summaryrefslogtreecommitdiffstats
path: root/testing/talos
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
commit26a029d407be480d791972afb5975cf62c9360a6 (patch)
treef435a8308119effd964b339f76abb83a57c29483 /testing/talos
parentInitial commit. (diff)
downloadfirefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz
firefox-26a029d407be480d791972afb5975cf62c9360a6.zip
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'testing/talos')
-rw-r--r--testing/talos/.eslintrc.js36
-rwxr-xr-xtesting/talos/INSTALL.py75
-rw-r--r--testing/talos/MANIFEST.in1
-rw-r--r--testing/talos/README12
-rw-r--r--testing/talos/jetstream-benchmark.manifest9
-rw-r--r--testing/talos/mach_commands.py133
-rw-r--r--testing/talos/moz.build57
-rw-r--r--testing/talos/perfdocs/config.yml1285
-rw-r--r--testing/talos/perfdocs/index.rst728
-rw-r--r--testing/talos/requirements.txt16
-rw-r--r--testing/talos/setup.py68
-rw-r--r--testing/talos/source_requirements.txt18
-rw-r--r--testing/talos/talos.json126
-rw-r--r--testing/talos/talos/__init__.py0
-rw-r--r--testing/talos/talos/allowlist.py184
-rw-r--r--testing/talos/talos/base_profile/permissions.sqlitebin0 -> 2048 bytes
-rw-r--r--testing/talos/talos/bootstrap.js62
-rw-r--r--testing/talos/talos/cmanager.py63
-rw-r--r--testing/talos/talos/cmanager_base.py27
-rw-r--r--testing/talos/talos/cmanager_linux.py181
-rw-r--r--testing/talos/talos/cmanager_mac.py90
-rw-r--r--testing/talos/talos/cmanager_win32.py267
-rw-r--r--testing/talos/talos/cmdline.py340
-rw-r--r--testing/talos/talos/config.py400
-rw-r--r--testing/talos/talos/ffsetup.py352
-rw-r--r--testing/talos/talos/filter.py264
-rw-r--r--testing/talos/talos/gecko_profile.py246
-rw-r--r--testing/talos/talos/getInfo.html37
-rw-r--r--testing/talos/talos/getinfooffline/api.js15
-rw-r--r--testing/talos/talos/getinfooffline/background.js10
-rw-r--r--testing/talos/talos/getinfooffline/manifest.json27
-rw-r--r--testing/talos/talos/getinfooffline/schema.json1
-rw-r--r--testing/talos/talos/heavy.py146
-rw-r--r--testing/talos/talos/mainthreadio.py189
-rw-r--r--testing/talos/talos/mtio-allowlist.json166
-rw-r--r--testing/talos/talos/output.py355
-rw-r--r--testing/talos/talos/pageloader/README63
-rw-r--r--testing/talos/talos/pageloader/api.js136
-rw-r--r--testing/talos/talos/pageloader/chrome/MozillaFileLogger.js95
-rw-r--r--testing/talos/talos/pageloader/chrome/Profiler.js221
-rw-r--r--testing/talos/talos/pageloader/chrome/a11y.js66
-rw-r--r--testing/talos/talos/pageloader/chrome/lh_dummy.js11
-rw-r--r--testing/talos/talos/pageloader/chrome/lh_fnbpaint.js45
-rw-r--r--testing/talos/talos/pageloader/chrome/lh_hero.js49
-rw-r--r--testing/talos/talos/pageloader/chrome/lh_moz.js28
-rw-r--r--testing/talos/talos/pageloader/chrome/lh_pdfpaint.js26
-rw-r--r--testing/talos/talos/pageloader/chrome/pageloader.js1113
-rw-r--r--testing/talos/talos/pageloader/chrome/pageloader.xhtml56
-rw-r--r--testing/talos/talos/pageloader/chrome/quit.js72
-rw-r--r--testing/talos/talos/pageloader/chrome/report.js195
-rw-r--r--testing/talos/talos/pageloader/chrome/talos-content.js24
-rw-r--r--testing/talos/talos/pageloader/chrome/tscroll.js327
-rw-r--r--testing/talos/talos/pageloader/chrome/utils.js34
-rw-r--r--testing/talos/talos/pageloader/manifest.json23
-rw-r--r--testing/talos/talos/pageloader/schema.json1
-rwxr-xr-xtesting/talos/talos/results.py556
-rwxr-xr-xtesting/talos/talos/run_tests.py554
-rw-r--r--testing/talos/talos/scripts/report.py148
-rw-r--r--testing/talos/talos/scripts/talos-debug.js215
-rw-r--r--testing/talos/talos/startup_test/__init__.py0
-rw-r--r--testing/talos/talos/startup_test/sessionrestore/addon/api.js167
-rw-r--r--testing/talos/talos/startup_test/sessionrestore/addon/manifest.json23
-rw-r--r--testing/talos/talos/startup_test/sessionrestore/addon/schema.json1
-rw-r--r--testing/talos/talos/startup_test/sessionrestore/profile-manywindows/sessionCheckpoints.json11
-rw-r--r--testing/talos/talos/startup_test/sessionrestore/profile-manywindows/sessionstore.js8030
-rw-r--r--testing/talos/talos/startup_test/sessionrestore/profile-manywindows/sessionstore.jsonlz4bin0 -> 66865 bytes
-rw-r--r--testing/talos/talos/startup_test/sessionrestore/profile/sessionCheckpoints.json11
-rw-r--r--testing/talos/talos/startup_test/sessionrestore/profile/sessionstore.js6203
-rw-r--r--testing/talos/talos/startup_test/sessionrestore/profile/sessionstore.jsonlz4bin0 -> 11261 bytes
-rw-r--r--testing/talos/talos/startup_test/startup_about_home_paint/addon/api.js83
-rw-r--r--testing/talos/talos/startup_test/startup_about_home_paint/addon/manifest.json23
-rw-r--r--testing/talos/talos/startup_test/startup_about_home_paint/addon/schema.json1
-rw-r--r--testing/talos/talos/startup_test/startup_about_home_paint/startup_about_home_paint.manifest0
-rw-r--r--testing/talos/talos/startup_test/tspaint_test.html61
-rw-r--r--testing/talos/talos/talos-powers/README5
-rw-r--r--testing/talos/talos/talos-powers/api.js455
-rw-r--r--testing/talos/talos/talos-powers/chrome/talos-powers-content.js214
-rw-r--r--testing/talos/talos/talos-powers/content/TalosContentProfiler.js309
-rw-r--r--testing/talos/talos/talos-powers/content/TalosParentProfiler.sys.mjs232
-rw-r--r--testing/talos/talos/talos-powers/content/TalosPowersContent.js151
-rw-r--r--testing/talos/talos/talos-powers/manifest.json23
-rw-r--r--testing/talos/talos/talos-powers/schema.json1
-rw-r--r--testing/talos/talos/talos_process.py294
-rw-r--r--testing/talos/talos/talosconfig.py60
-rw-r--r--testing/talos/talos/test.py1539
-rw-r--r--testing/talos/talos/tests/a11y/a11y.manifest2
-rw-r--r--testing/talos/talos/tests/a11y/dhtml.html60
-rw-r--r--testing/talos/talos/tests/a11y/tablemutation.html143
-rw-r--r--testing/talos/talos/tests/about-preferences/about_preferences_basic.manifest9
-rw-r--r--testing/talos/talos/tests/ares6/ares6.manifest1
-rw-r--r--testing/talos/talos/tests/canvas2d/benchmarks/video/video_upload.html74
-rw-r--r--testing/talos/talos/tests/canvas2d/canvas2dvideo.manifest1
-rw-r--r--testing/talos/talos/tests/cpstartup/cpstartup.html43
-rw-r--r--testing/talos/talos/tests/cpstartup/cpstartup.manifest1
-rw-r--r--testing/talos/talos/tests/cpstartup/extension/api.js133
-rw-r--r--testing/talos/talos/tests/cpstartup/extension/framescript.js40
-rw-r--r--testing/talos/talos/tests/cpstartup/extension/manifest.json23
-rw-r--r--testing/talos/talos/tests/cpstartup/extension/schema.json1
-rw-r--r--testing/talos/talos/tests/cpstartup/target.html9
-rw-r--r--testing/talos/talos/tests/cross_origin_pageload/cross_origin_pageload.manifest1
-rw-r--r--testing/talos/talos/tests/cross_origin_pageload/iframe.html1
-rw-r--r--testing/talos/talos/tests/cross_origin_pageload/index.html9
-rw-r--r--testing/talos/talos/tests/cross_origin_pageload/index2.html30
-rw-r--r--testing/talos/talos/tests/devtools/addon/api.js46
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/.eslintrc.js26
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/actors/DampLoadChild.sys.mjs13
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/actors/DampLoadParent.sys.mjs23
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/damp-tests.js255
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/damp.js552
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/pages/custom/console/bulklog.html65
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/pages/custom/console/iframe.html62
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/pages/custom/console/index.html31
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app-build/README.md10
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app-build/iframe.html149
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app-build/index.html34
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app-build/js/subfolder/testsubfolder.js5
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app-build/js/testfile.js1001
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app-build/static/js/main.js2
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app-build/static/js/main.js.map1
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app-build/static/js/minified.js2
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/README.md12
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/config/env.js98
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/config/paths.js118
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/config/polyfills.js30
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/config/webpack.config.prod.js369
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/package.json25
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/public/README.md10
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/public/iframe.html149
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/public/index.html36
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/public/js/subfolder/testsubfolder.js5
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/public/js/testfile.js1001
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/public/static/js/minified.js2
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/scripts/build.js158
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/src/App.js35
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/src/App.test.js8
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/src/index.js5
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/src/step-in-test.js10228
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/src/step-out-test.js1001
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/src/step-over-test.js28
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/yarn.lock6567
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/pages/custom/inspector/iframe.html125
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/pages/custom/inspector/index.html27
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/pages/custom/netmonitor/iframe.html16
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/pages/custom/netmonitor/index.html143
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/pages/custom/netmonitor/script.js101
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/pages/custom/netmonitor/style.css100
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/pages/custom/panels-in-background/index.html30
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/pages/custom/panels-in-background/sjs_simple-test-server.sjs7
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/pages/custom/styleeditor/iframe.html59
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/pages/custom/styleeditor/index.html27
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/pages/custom/styleeditor/style.css1
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/pages/simple.html14
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/tests/accessibility/accessibility-helpers.js35
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/tests/accessibility/cold-open.js25
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/tests/accessibility/simple.js27
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/tests/debugger/cold-open.js28
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/tests/debugger/complicated.js34
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/tests/debugger/custom.js362
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/tests/debugger/debugger-helpers.js455
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/tests/debugger/simple.js34
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/tests/head.js202
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/tests/inspector/cold-open.js21
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/tests/inspector/complicated.js26
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/tests/inspector/custom.js269
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/tests/inspector/inspector-helpers.js28
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/tests/inspector/layout.js63
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/tests/inspector/mutations.js74
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/tests/inspector/simple.js26
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/tests/netmonitor/cold-open.js20
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/tests/netmonitor/complicated.js52
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/tests/netmonitor/custom.js104
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/tests/netmonitor/netmonitor-helpers.js181
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/tests/netmonitor/simple.js38
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/tests/server/actor.js23
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/tests/server/protocol.js91
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/tests/server/spec.js39
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/tests/source-map/angular-min.js.map8
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/tests/source-map/source-map-library.js113
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/tests/source-map/source-map-loader.js52
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/tests/styleeditor/complicated.js25
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/tests/styleeditor/custom.js25
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/tests/styleeditor/simple.js22
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/tests/toolbox/browser-toolbox.js196
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/tests/toolbox/panels-in-background.js57
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/tests/toolbox/screenshot.js78
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/tests/webconsole/autocomplete.js93
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/tests/webconsole/bulklog.js93
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/tests/webconsole/cold-open.js20
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/tests/webconsole/complicated.js59
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/tests/webconsole/custom.js91
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/tests/webconsole/log-in-loop-content-process.js99
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/tests/webconsole/objectexpand.js125
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/tests/webconsole/openwithcache.js38
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/tests/webconsole/simple.js28
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/tests/webconsole/streamlog.js65
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/tests/webconsole/typing.js92
-rw-r--r--testing/talos/talos/tests/devtools/addon/content/tests/webconsole/webconsole-helpers.js132
-rw-r--r--testing/talos/talos/tests/devtools/addon/damp.html12
-rw-r--r--testing/talos/talos/tests/devtools/addon/driver.js10
-rw-r--r--testing/talos/talos/tests/devtools/addon/manifest.json30
-rw-r--r--testing/talos/talos/tests/devtools/addon/schema.json13
-rw-r--r--testing/talos/talos/tests/devtools/damp.manifest1
-rw-r--r--testing/talos/talos/tests/dromaeo/JSON.php806
-rw-r--r--testing/talos/talos/tests/dromaeo/LICENSE30
-rw-r--r--testing/talos/talos/tests/dromaeo/application.css115
-rw-r--r--testing/talos/talos/tests/dromaeo/css.manifest6
-rw-r--r--testing/talos/talos/tests/dromaeo/cssquery-dojo.html60
-rw-r--r--testing/talos/talos/tests/dromaeo/cssquery-ext.html60
-rw-r--r--testing/talos/talos/tests/dromaeo/cssquery-jquery.html60
-rw-r--r--testing/talos/talos/tests/dromaeo/cssquery-mootools.html60
-rw-r--r--testing/talos/talos/tests/dromaeo/cssquery-prototype.html60
-rw-r--r--testing/talos/talos/tests/dromaeo/cssquery-yui.html60
-rw-r--r--testing/talos/talos/tests/dromaeo/dom-attr.html60
-rw-r--r--testing/talos/talos/tests/dromaeo/dom-modify.html60
-rw-r--r--testing/talos/talos/tests/dromaeo/dom-query.html60
-rw-r--r--testing/talos/talos/tests/dromaeo/dom-traverse.html60
-rw-r--r--testing/talos/talos/tests/dromaeo/dom.manifest4
-rw-r--r--testing/talos/talos/tests/dromaeo/favicon.icobin0 -> 1406 bytes
-rw-r--r--testing/talos/talos/tests/dromaeo/favicon.pngbin0 -> 448 bytes
-rw-r--r--testing/talos/talos/tests/dromaeo/htmlrunner.js4
-rw-r--r--testing/talos/talos/tests/dromaeo/ie.css30
-rw-r--r--testing/talos/talos/tests/dromaeo/images/bg.pngbin0 -> 711 bytes
-rw-r--r--testing/talos/talos/tests/dromaeo/images/clouds.pngbin0 -> 1130 bytes
-rw-r--r--testing/talos/talos/tests/dromaeo/images/clouds2.pngbin0 -> 1341 bytes
-rw-r--r--testing/talos/talos/tests/dromaeo/images/comets.pngbin0 -> 4047 bytes
-rw-r--r--testing/talos/talos/tests/dromaeo/images/dino1.pngbin0 -> 1276 bytes
-rw-r--r--testing/talos/talos/tests/dromaeo/images/dino2.pngbin0 -> 1354 bytes
-rw-r--r--testing/talos/talos/tests/dromaeo/images/dino3.pngbin0 -> 3345 bytes
-rw-r--r--testing/talos/talos/tests/dromaeo/images/dino4.pngbin0 -> 1331 bytes
-rw-r--r--testing/talos/talos/tests/dromaeo/images/dino5.pngbin0 -> 2360 bytes
-rw-r--r--testing/talos/talos/tests/dromaeo/images/dino6.pngbin0 -> 1374 bytes
-rw-r--r--testing/talos/talos/tests/dromaeo/images/dino7.pngbin0 -> 2445 bytes
-rw-r--r--testing/talos/talos/tests/dromaeo/images/dino8.pngbin0 -> 2090 bytes
-rw-r--r--testing/talos/talos/tests/dromaeo/images/left.pngbin0 -> 8908 bytes
-rw-r--r--testing/talos/talos/tests/dromaeo/images/logo.pngbin0 -> 24809 bytes
-rw-r--r--testing/talos/talos/tests/dromaeo/images/logo2.pngbin0 -> 19809 bytes
-rw-r--r--testing/talos/talos/tests/dromaeo/images/logo3.pngbin0 -> 9172 bytes
-rw-r--r--testing/talos/talos/tests/dromaeo/images/right.pngbin0 -> 1821 bytes
-rw-r--r--testing/talos/talos/tests/dromaeo/images/top.pngbin0 -> 890 bytes
-rw-r--r--testing/talos/talos/tests/dromaeo/images/water.pngbin0 -> 1371 bytes
-rw-r--r--testing/talos/talos/tests/dromaeo/index.html60
-rw-r--r--testing/talos/talos/tests/dromaeo/jquery.js3408
-rw-r--r--testing/talos/talos/tests/dromaeo/json.js275
-rw-r--r--testing/talos/talos/tests/dromaeo/lib/dojo.js8458
-rw-r--r--testing/talos/talos/tests/dromaeo/lib/ext-base.js10
-rw-r--r--testing/talos/talos/tests/dromaeo/lib/ext-core.js19
-rw-r--r--testing/talos/talos/tests/dromaeo/lib/jquery.js3549
-rw-r--r--testing/talos/talos/tests/dromaeo/lib/mootools.js3946
-rw-r--r--testing/talos/talos/tests/dromaeo/lib/prototype.js4320
-rw-r--r--testing/talos/talos/tests/dromaeo/lib/yahoo.js986
-rw-r--r--testing/talos/talos/tests/dromaeo/lib/yui-dom.js1241
-rw-r--r--testing/talos/talos/tests/dromaeo/lib/yui-event.js2562
-rw-r--r--testing/talos/talos/tests/dromaeo/lib/yui-selector.js666
-rw-r--r--testing/talos/talos/tests/dromaeo/pngfix.js28
-rw-r--r--testing/talos/talos/tests/dromaeo/reset.css38
-rw-r--r--testing/talos/talos/tests/dromaeo/store.php58
-rw-r--r--testing/talos/talos/tests/dromaeo/test-head.html4
-rw-r--r--testing/talos/talos/tests/dromaeo/test-head.js2
-rw-r--r--testing/talos/talos/tests/dromaeo/test-tail.html4
-rw-r--r--testing/talos/talos/tests/dromaeo/test-tail.js1
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/MANIFEST.json442
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/cssquery-dojo.html3063
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/cssquery-ext.html3064
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/cssquery-jquery.html3062
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/cssquery-mootools.html3062
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/cssquery-prototype.html3062
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/cssquery-yui.html3065
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/dom-attr.html2943
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/dom-modify.html2973
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/dom-query.html3000
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/dom-traverse.html2972
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/dromaeo-3d-cube.html340
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/dromaeo-core-eval.html35
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/dromaeo-object-array.html64
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/dromaeo-object-regexp.html354
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/dromaeo-object-string.html197
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/dromaeo-string-base64.html155
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/jslib-attr-jquery.html2949
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/jslib-attr-prototype.html2949
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/jslib-event-jquery.html2936
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/jslib-event-prototype.html2936
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/jslib-modify-jquery.html2960
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/jslib-modify-prototype.html2960
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/jslib-style-jquery.html2958
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/jslib-style-prototype.html2959
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/jslib-traverse-jquery.html2960
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/jslib-traverse-prototype.html2960
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/sunspider-3d-morph.html44
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/sunspider-3d-raytrace.html460
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/sunspider-access-binary-trees.html64
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/sunspider-access-fannkuch.html80
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/sunspider-access-nbody.html181
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/sunspider-access-nsieve.html48
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/sunspider-bitops-3bit-bits-in-byte.html46
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/sunspider-bitops-bits-in-byte.html35
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/sunspider-bitops-bitwise-and.html42
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/sunspider-bitops-nsieve-bits.html42
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/sunspider-controlflow-recursive.html46
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/sunspider-crypto-aes.html443
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/sunspider-crypto-md5.html300
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/sunspider-crypto-sha1.html238
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/sunspider-date-format-tofte.html312
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/sunspider-date-format-xparb.html431
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/sunspider-math-cordic.html103
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/sunspider-math-partial-sums.html44
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/sunspider-math-spectral-norm.html64
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/sunspider-regexp-dna.html1740
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/sunspider-string-fasta.html104
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/sunspider-string-tagcloud.html282
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/sunspider-string-unpack-code.html81
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/sunspider-string-validate-input.html109
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/v8-crypto.html1705
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/v8-deltablue.html887
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/v8-earley-boyer.html4693
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/v8-raytrace.html3444
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/v8-richards.html549
-rw-r--r--testing/talos/talos/tests/dromaeo/tests/w3c_home.pngbin0 -> 1936 bytes
-rw-r--r--testing/talos/talos/tests/dromaeo/web-style.css24
-rw-r--r--testing/talos/talos/tests/dromaeo/webrunner.js807
-rw-r--r--testing/talos/talos/tests/gfx/benchmarks/rasterflood_gradient.html120
-rw-r--r--testing/talos/talos/tests/gfx/benchmarks/rasterflood_svg.html146
-rw-r--r--testing/talos/talos/tests/gfx/rasterflood_gradient.manifest1
-rw-r--r--testing/talos/talos/tests/gfx/rasterflood_svg.manifest1
-rw-r--r--testing/talos/talos/tests/jetstream/jetstream.manifest1
-rw-r--r--testing/talos/talos/tests/kraken/driver.html192
-rw-r--r--testing/talos/talos/tests/kraken/kraken.css54
-rw-r--r--testing/talos/talos/tests/kraken/kraken.manifest14
-rw-r--r--testing/talos/talos/tests/kraken/test-contents.js74412
-rw-r--r--testing/talos/talos/tests/kraken/test-prefix.js2
-rw-r--r--testing/talos/talos/tests/layout/benchmarks/displaylist_flattened_mutate.html64
-rw-r--r--testing/talos/talos/tests/layout/benchmarks/displaylist_inactive_mutate.html64
-rw-r--r--testing/talos/talos/tests/layout/benchmarks/displaylist_mutate.html63
-rw-r--r--testing/talos/talos/tests/layout/displaylist_mutate.manifest3
-rw-r--r--testing/talos/talos/tests/motionmark/animometer.manifest2
-rw-r--r--testing/talos/talos/tests/motionmark/htmlsuite.manifest1
-rw-r--r--testing/talos/talos/tests/motionmark/webgl.manifest1
-rw-r--r--testing/talos/talos/tests/offscreencanvas/benchmarks/video/2d_av1_main.html22
-rw-r--r--testing/talos/talos/tests/offscreencanvas/benchmarks/video/2d_av1_worker.html20
-rw-r--r--testing/talos/talos/tests/offscreencanvas/benchmarks/video/2d_h264_main.html22
-rw-r--r--testing/talos/talos/tests/offscreencanvas/benchmarks/video/2d_h264_worker.html20
-rw-r--r--testing/talos/talos/tests/offscreencanvas/benchmarks/video/2d_vp9_main.html22
-rw-r--r--testing/talos/talos/tests/offscreencanvas/benchmarks/video/2d_vp9_worker.html20
-rw-r--r--testing/talos/talos/tests/offscreencanvas/benchmarks/video/demuxer_mp4.js113
-rw-r--r--testing/talos/talos/tests/offscreencanvas/benchmarks/video/helper_main.js57
-rw-r--r--testing/talos/talos/tests/offscreencanvas/benchmarks/video/helper_worker.js53
-rw-r--r--testing/talos/talos/tests/offscreencanvas/benchmarks/video/mp4box.all.min.js4
-rw-r--r--testing/talos/talos/tests/offscreencanvas/benchmarks/video/mp4box.js-LICENSE24
-rw-r--r--testing/talos/talos/tests/offscreencanvas/benchmarks/video/shared.js128
-rw-r--r--testing/talos/talos/tests/offscreencanvas/benchmarks/video/webgl_av1_main.html22
-rw-r--r--testing/talos/talos/tests/offscreencanvas/benchmarks/video/webgl_av1_worker.html20
-rw-r--r--testing/talos/talos/tests/offscreencanvas/benchmarks/video/webgl_h264_main.html22
-rw-r--r--testing/talos/talos/tests/offscreencanvas/benchmarks/video/webgl_h264_worker.html20
-rw-r--r--testing/talos/talos/tests/offscreencanvas/benchmarks/video/webgl_vp9_main.html22
-rw-r--r--testing/talos/talos/tests/offscreencanvas/benchmarks/video/webgl_vp9_worker.html20
-rw-r--r--testing/talos/talos/tests/offscreencanvas/benchmarks/video/worker.js30
-rw-r--r--testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_main_2d_av1.manifest1
-rw-r--r--testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_main_2d_h264.manifest1
-rw-r--r--testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_main_2d_vp9.manifest1
-rw-r--r--testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_main_webgl_av1.manifest1
-rw-r--r--testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_main_webgl_h264.manifest1
-rw-r--r--testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_main_webgl_vp9.manifest1
-rw-r--r--testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_worker_2d_av1.manifest1
-rw-r--r--testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_worker_2d_h264.manifest1
-rw-r--r--testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_worker_2d_vp9.manifest1
-rw-r--r--testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_worker_webgl_av1.manifest1
-rw-r--r--testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_worker_webgl_h264.manifest1
-rw-r--r--testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_worker_webgl_vp9.manifest1
-rw-r--r--testing/talos/talos/tests/pdfpaint/bug1722807_page2.pdfbin0 -> 615734 bytes
-rw-r--r--testing/talos/talos/tests/pdfpaint/bug857031_page1.pdfbin0 -> 1079023 bytes
-rw-r--r--testing/talos/talos/tests/pdfpaint/pdfpaint.manifest3
-rw-r--r--testing/talos/talos/tests/pdfpaint/tracemonkey.pdfbin0 -> 1016315 bytes
-rw-r--r--testing/talos/talos/tests/perf-reftest-singletons/.eslintrc.json5
-rw-r--r--testing/talos/talos/tests/perf-reftest-singletons/README14
-rw-r--r--testing/talos/talos/tests/perf-reftest-singletons/abspos-reflow-1.html26
-rw-r--r--testing/talos/talos/tests/perf-reftest-singletons/append-nth-edge-has-pseudo.html39
-rw-r--r--testing/talos/talos/tests/perf-reftest-singletons/attr-selector-1.html15
-rw-r--r--testing/talos/talos/tests/perf-reftest-singletons/bidi-resolution-1.html24
-rw-r--r--testing/talos/talos/tests/perf-reftest-singletons/bloom-basic-2.html21
-rw-r--r--testing/talos/talos/tests/perf-reftest-singletons/bloom-basic.html20
-rw-r--r--testing/talos/talos/tests/perf-reftest-singletons/coalesce-1.html25
-rw-r--r--testing/talos/talos/tests/perf-reftest-singletons/coalesce-2.html25
-rw-r--r--testing/talos/talos/tests/perf-reftest-singletons/display-none-1.html20
-rw-r--r--testing/talos/talos/tests/perf-reftest-singletons/external-string-pass.html18
-rw-r--r--testing/talos/talos/tests/perf-reftest-singletons/getElementById-1.html42
-rw-r--r--testing/talos/talos/tests/perf-reftest-singletons/id-getter-1.html16
-rw-r--r--testing/talos/talos/tests/perf-reftest-singletons/id-getter-2.html16
-rw-r--r--testing/talos/talos/tests/perf-reftest-singletons/id-getter-3.html16
-rw-r--r--testing/talos/talos/tests/perf-reftest-singletons/id-getter-4.html16
-rw-r--r--testing/talos/talos/tests/perf-reftest-singletons/id-getter-5.html16
-rw-r--r--testing/talos/talos/tests/perf-reftest-singletons/id-getter-6.html17
-rw-r--r--testing/talos/talos/tests/perf-reftest-singletons/id-getter-7.html17
-rw-r--r--testing/talos/talos/tests/perf-reftest-singletons/inline-style-cache-1.html24
-rw-r--r--testing/talos/talos/tests/perf-reftest-singletons/input-type-number-setAttribute.html29
-rw-r--r--testing/talos/talos/tests/perf-reftest-singletons/line-iterator.html32
-rw-r--r--testing/talos/talos/tests/perf-reftest-singletons/link-style-cache-1.html26
-rw-r--r--testing/talos/talos/tests/perf-reftest-singletons/many-custom-props.html19
-rw-r--r--testing/talos/talos/tests/perf-reftest-singletons/nth-index-1.html24
-rw-r--r--testing/talos/talos/tests/perf-reftest-singletons/nth-index-2.html24
-rw-r--r--testing/talos/talos/tests/perf-reftest-singletons/only-children-1.html18
-rw-r--r--testing/talos/talos/tests/perf-reftest-singletons/parent-basic-singleton.html20
-rw-r--r--testing/talos/talos/tests/perf-reftest-singletons/perf_reftest_singletons.manifest41
-rw-r--r--testing/talos/talos/tests/perf-reftest-singletons/remove-children.html30
-rw-r--r--testing/talos/talos/tests/perf-reftest-singletons/remove-front-has-pseudo.html32
-rw-r--r--testing/talos/talos/tests/perf-reftest-singletons/scrollbar-styles-1.html16
-rw-r--r--testing/talos/talos/tests/perf-reftest-singletons/slow-selector-1.html21
-rw-r--r--testing/talos/talos/tests/perf-reftest-singletons/slow-selector-2.html21
-rw-r--r--testing/talos/talos/tests/perf-reftest-singletons/style-attr-1.html21
-rw-r--r--testing/talos/talos/tests/perf-reftest-singletons/style-sharing-style-attr.html21
-rw-r--r--testing/talos/talos/tests/perf-reftest-singletons/style-sharing.html20
-rw-r--r--testing/talos/talos/tests/perf-reftest-singletons/svg-text-getExtentOfChar-1.html36
-rw-r--r--testing/talos/talos/tests/perf-reftest-singletons/svg-text-textLength-1.html31
-rw-r--r--testing/talos/talos/tests/perf-reftest-singletons/tiny-traversal-singleton.html31
-rw-r--r--testing/talos/talos/tests/perf-reftest-singletons/util.js97
-rw-r--r--testing/talos/talos/tests/perf-reftest-singletons/window-named-property-get.html19
-rw-r--r--testing/talos/talos/tests/perf-reftest/.eslintrc.json5
-rw-r--r--testing/talos/talos/tests/perf-reftest/bidi-resolution-1-ref.html24
-rw-r--r--testing/talos/talos/tests/perf-reftest/bidi-resolution-1.html24
-rw-r--r--testing/talos/talos/tests/perf-reftest/bloom-basic-2.html21
-rw-r--r--testing/talos/talos/tests/perf-reftest/bloom-basic-ref.html20
-rw-r--r--testing/talos/talos/tests/perf-reftest/bloom-basic.html20
-rw-r--r--testing/talos/talos/tests/perf-reftest/coalesce-1.html25
-rw-r--r--testing/talos/talos/tests/perf-reftest/coalesce-2.html25
-rw-r--r--testing/talos/talos/tests/perf-reftest/coalesce-ref.html17
-rw-r--r--testing/talos/talos/tests/perf-reftest/dep-check-1-ref.html35
-rw-r--r--testing/talos/talos/tests/perf-reftest/dep-check-1.html37
-rw-r--r--testing/talos/talos/tests/perf-reftest/display-none-1-ref.html19
-rw-r--r--testing/talos/talos/tests/perf-reftest/display-none-1.html20
-rw-r--r--testing/talos/talos/tests/perf-reftest/nth-index-1.html24
-rw-r--r--testing/talos/talos/tests/perf-reftest/nth-index-2.html24
-rw-r--r--testing/talos/talos/tests/perf-reftest/nth-index-ref.html24
-rw-r--r--testing/talos/talos/tests/perf-reftest/only-children-1.html18
-rw-r--r--testing/talos/talos/tests/perf-reftest/only-children-ref.html18
-rw-r--r--testing/talos/talos/tests/perf-reftest/perf_reftest.manifest25
-rw-r--r--testing/talos/talos/tests/perf-reftest/recompute-position-horizontal-tb.html9
-rw-r--r--testing/talos/talos/tests/perf-reftest/recompute-position-vertical-lr.html9
-rw-r--r--testing/talos/talos/tests/perf-reftest/recompute-position-vertical-rl.html9
-rw-r--r--testing/talos/talos/tests/perf-reftest/recompute-position.js24
-rw-r--r--testing/talos/talos/tests/perf-reftest/slow-selector-1-ref.html20
-rw-r--r--testing/talos/talos/tests/perf-reftest/slow-selector-1.html21
-rw-r--r--testing/talos/talos/tests/perf-reftest/slow-selector-2-ref.html20
-rw-r--r--testing/talos/talos/tests/perf-reftest/slow-selector-2.html21
-rw-r--r--testing/talos/talos/tests/perf-reftest/some-descendants-1-ref.html29
-rw-r--r--testing/talos/talos/tests/perf-reftest/some-descendants-1.html29
-rw-r--r--testing/talos/talos/tests/perf-reftest/stop-cascade-1.html26
-rw-r--r--testing/talos/talos/tests/perf-reftest/stop-cascade-2.html27
-rw-r--r--testing/talos/talos/tests/perf-reftest/stop-cascade-ref.html25
-rw-r--r--testing/talos/talos/tests/perf-reftest/style-attr-1-ref.html14
-rw-r--r--testing/talos/talos/tests/perf-reftest/style-attr-1.html21
-rw-r--r--testing/talos/talos/tests/perf-reftest/style-sharing-ref.html20
-rw-r--r--testing/talos/talos/tests/perf-reftest/style-sharing-style-attr.html21
-rw-r--r--testing/talos/talos/tests/perf-reftest/style-sharing.html20
-rw-r--r--testing/talos/talos/tests/perf-reftest/util.js97
-rw-r--r--testing/talos/talos/tests/quantum_pageload/quantum_pageload_amazon.manifest1
-rw-r--r--testing/talos/talos/tests/quantum_pageload/quantum_pageload_facebook.manifest1
-rw-r--r--testing/talos/talos/tests/quantum_pageload/quantum_pageload_google.manifest1
-rw-r--r--testing/talos/talos/tests/quantum_pageload/quantum_pageload_youtube.manifest1
-rw-r--r--testing/talos/talos/tests/scroll/drac.htm381
-rw-r--r--testing/talos/talos/tests/scroll/iframe.svg39
-rw-r--r--testing/talos/talos/tests/scroll/reader.css63
-rw-r--r--testing/talos/talos/tests/scroll/reader.htm147
-rw-r--r--testing/talos/talos/tests/scroll/scroll.manifest6
-rw-r--r--testing/talos/talos/tests/scroll/strips-single.pngbin0 -> 191 bytes
-rw-r--r--testing/talos/talos/tests/scroll/strips.pngbin0 -> 191 bytes
-rw-r--r--testing/talos/talos/tests/scroll/tiled-downscale.html143
-rw-r--r--testing/talos/talos/tests/scroll/tiled-fixed-downscale.html144
-rw-r--r--testing/talos/talos/tests/scroll/tiled-fixed.html141
-rw-r--r--testing/talos/talos/tests/scroll/tiled.html140
-rw-r--r--testing/talos/talos/tests/speedometer/speedometer.manifest1
-rw-r--r--testing/talos/talos/tests/stylebench/stylebench.manifest1
-rw-r--r--testing/talos/talos/tests/svg_opacity/big-optimizable-group-opacity-2500.svg2503
-rw-r--r--testing/talos/talos/tests/svg_opacity/small-group-opacity-2500.svg2503
-rw-r--r--testing/talos/talos/tests/svg_opacity/svg_opacity.manifest4
-rw-r--r--testing/talos/talos/tests/svg_static/composite-scale-opacity.svg42
-rw-r--r--testing/talos/talos/tests/svg_static/composite-scale-rotate-opacity.svg42
-rw-r--r--testing/talos/talos/tests/svg_static/composite-scale-rotate.svg42
-rw-r--r--testing/talos/talos/tests/svg_static/composite-scale.svg42
-rw-r--r--testing/talos/talos/tests/svg_static/gearflowers.svg8342
-rw-r--r--testing/talos/talos/tests/svg_static/images/kyoto_1.jpgbin0 -> 89034 bytes
-rw-r--r--testing/talos/talos/tests/svg_static/svg_static.manifest8
-rw-r--r--testing/talos/talos/tests/svgx/hixie-001.xml297
-rw-r--r--testing/talos/talos/tests/svgx/hixie-002.xml300
-rw-r--r--testing/talos/talos/tests/svgx/hixie-003.xml85
-rw-r--r--testing/talos/talos/tests/svgx/hixie-004.xml86
-rw-r--r--testing/talos/talos/tests/svgx/hixie-005.xml92
-rw-r--r--testing/talos/talos/tests/svgx/hixie-006.xml92
-rw-r--r--testing/talos/talos/tests/svgx/hixie-007.xml284
-rw-r--r--testing/talos/talos/tests/svgx/images/smallcats.gifbin0 -> 10111 bytes
-rw-r--r--testing/talos/talos/tests/svgx/svgm.manifest8
-rw-r--r--testing/talos/talos/tests/svgx/svgx.manifest14
-rw-r--r--testing/talos/talos/tests/tabpaint/api.js213
-rw-r--r--testing/talos/talos/tests/tabpaint/framescript.js102
-rw-r--r--testing/talos/talos/tests/tabpaint/manifest.json23
-rw-r--r--testing/talos/talos/tests/tabpaint/schema.json1
-rw-r--r--testing/talos/talos/tests/tabpaint/tabpaint.html57
-rw-r--r--testing/talos/talos/tests/tabpaint/tabpaint.manifest2
-rw-r--r--testing/talos/talos/tests/tabpaint/target.html9
-rw-r--r--testing/talos/talos/tests/tabswitch/actors/TalosTabSwitchChild.sys.mjs31
-rw-r--r--testing/talos/talos/tests/tabswitch/actors/TalosTabSwitchParent.sys.mjs344
-rw-r--r--testing/talos/talos/tests/tabswitch/api.js62
-rw-r--r--testing/talos/talos/tests/tabswitch/background.js11
-rw-r--r--testing/talos/talos/tests/tabswitch/content/tabswitch-content-process.js69
-rw-r--r--testing/talos/talos/tests/tabswitch/content/test.html17
-rw-r--r--testing/talos/talos/tests/tabswitch/manifest.json24
-rw-r--r--testing/talos/talos/tests/tabswitch/schema.json14
-rw-r--r--testing/talos/talos/tests/tabswitch/tabswitch.manifest1
-rw-r--r--testing/talos/talos/tests/tart/addon/api.js109
-rw-r--r--testing/talos/talos/tests/tart/addon/chrome/blank.icon.html7
-rw-r--r--testing/talos/talos/tests/tart/addon/chrome/tart.icobin0 -> 1150 bytes
-rw-r--r--testing/talos/talos/tests/tart/addon/content/Profiler.js173
-rw-r--r--testing/talos/talos/tests/tart/addon/content/framescript.js58
-rw-r--r--testing/talos/talos/tests/tart/addon/content/tab-min-width-1px.css11
-rw-r--r--testing/talos/talos/tests/tart/addon/content/tart.js1034
-rw-r--r--testing/talos/talos/tests/tart/addon/manifest.json22
-rw-r--r--testing/talos/talos/tests/tart/addon/schema.json1
-rw-r--r--testing/talos/talos/tests/tart/tart.html320
-rw-r--r--testing/talos/talos/tests/tart/tart.icobin0 -> 1150 bytes
-rw-r--r--testing/talos/talos/tests/tart/tart.manifest1
-rw-r--r--testing/talos/talos/tests/tp5o.html51
-rw-r--r--testing/talos/talos/tests/tresize/addon/api.js47
-rw-r--r--testing/talos/talos/tests/tresize/addon/chrome/tresize-test.html24
-rw-r--r--testing/talos/talos/tests/tresize/addon/content/Profiler.js173
-rw-r--r--testing/talos/talos/tests/tresize/addon/content/framescript.js33
-rw-r--r--testing/talos/talos/tests/tresize/addon/content/tresize.js67
-rw-r--r--testing/talos/talos/tests/tresize/addon/manifest.json23
-rw-r--r--testing/talos/talos/tests/tresize/addon/schema.json1
-rw-r--r--testing/talos/talos/tests/tresize/tresize-iframe.html11
-rw-r--r--testing/talos/talos/tests/tresize/tresize.manifest1
-rw-r--r--testing/talos/talos/tests/twinopen/api.js71
-rw-r--r--testing/talos/talos/tests/twinopen/driver.js6
-rw-r--r--testing/talos/talos/tests/twinopen/manifest.json30
-rw-r--r--testing/talos/talos/tests/twinopen/schema.json13
-rw-r--r--testing/talos/talos/tests/twinopen/twinopen.html12
-rw-r--r--testing/talos/talos/tests/twinopen/twinopen.manifest1
-rw-r--r--testing/talos/talos/tests/twinopen/twinopen.manifest.develop1
-rw-r--r--testing/talos/talos/tests/v8_7/base.js298
-rw-r--r--testing/talos/talos/tests/v8_7/crypto.js1698
-rw-r--r--testing/talos/talos/tests/v8_7/deltablue.js880
-rw-r--r--testing/talos/talos/tests/v8_7/earley-boyer.js4684
-rw-r--r--testing/talos/talos/tests/v8_7/navier-stokes.js387
-rw-r--r--testing/talos/talos/tests/v8_7/raytrace.js904
-rw-r--r--testing/talos/talos/tests/v8_7/regexp.js1764
-rw-r--r--testing/talos/talos/tests/v8_7/revisions.html104
-rw-r--r--testing/talos/talos/tests/v8_7/richards.js539
-rw-r--r--testing/talos/talos/tests/v8_7/run.html167
-rw-r--r--testing/talos/talos/tests/v8_7/splay.js394
-rw-r--r--testing/talos/talos/tests/v8_7/style.css77
-rw-r--r--testing/talos/talos/tests/v8_7/v8-logo.pngbin0 -> 24293 bytes
-rw-r--r--testing/talos/talos/tests/v8_7/v8.manifest1
-rw-r--r--testing/talos/talos/tests/video/clips/testsrc.1080p.60fps.av1.short.mp4bin0 -> 90451 bytes
-rw-r--r--testing/talos/talos/tests/video/clips/testsrc.1080p.60fps.h264.short.mp4bin0 -> 228642 bytes
-rw-r--r--testing/talos/talos/tests/video/clips/testsrc.1080p.60fps.mp4bin0 -> 2582176 bytes
-rw-r--r--testing/talos/talos/tests/video/clips/testsrc.1080p.60fps.vp9.short.mp4bin0 -> 165119 bytes
-rw-r--r--testing/talos/talos/tests/video/clips/testsrc.240p.120fps.mp4bin0 -> 1003783 bytes
-rw-r--r--testing/talos/talos/tests/video/clips/testsrc.480p.60fps.webmbin0 -> 586956 bytes
-rw-r--r--testing/talos/talos/tests/video/video.manifest2
-rw-r--r--testing/talos/talos/tests/video/video_playback.html155
-rw-r--r--testing/talos/talos/tests/webgl/benchmarks/terrain/grass.jpegbin0 -> 45396 bytes
-rw-r--r--testing/talos/talos/tests/webgl/benchmarks/terrain/perftest.html407
-rw-r--r--testing/talos/talos/tests/webgl/benchmarks/video/video_upload.html72
-rw-r--r--testing/talos/talos/tests/webgl/glterrain.manifest1
-rw-r--r--testing/talos/talos/tests/webgl/glvideo.manifest1
-rw-r--r--testing/talos/talos/ttest.py290
-rw-r--r--testing/talos/talos/unittests/__init__.py0
-rw-r--r--testing/talos/talos/unittests/browser_output.ts.txt8
-rw-r--r--testing/talos/talos/unittests/browser_output.tsvg.txt214
-rw-r--r--testing/talos/talos/unittests/conftest.py47
-rw-r--r--testing/talos/talos/unittests/profile.tgzbin0 -> 338 bytes
-rw-r--r--testing/talos/talos/unittests/ps-Acj.out44
-rw-r--r--testing/talos/talos/unittests/python.toml8
-rw-r--r--testing/talos/talos/unittests/test_cmanager.py0
-rw-r--r--testing/talos/talos/unittests/test_cmanager_base.py0
-rw-r--r--testing/talos/talos/unittests/test_cmanager_linux.py0
-rw-r--r--testing/talos/talos/unittests/test_cmanager_mac.py0
-rw-r--r--testing/talos/talos/unittests/test_cmanger_win32.py0
-rw-r--r--testing/talos/talos/unittests/test_cmdline.py0
-rw-r--r--testing/talos/talos/unittests/test_config.py1313
-rw-r--r--testing/talos/talos/unittests/test_gecko_profile.py0
-rw-r--r--testing/talos/talos/unittests/test_mainthreadio.py0
-rw-r--r--testing/talos/talos/unittests/test_output.py0
-rw-r--r--testing/talos/talos/unittests/test_run_tests.py0
-rw-r--r--testing/talos/talos/unittests/test_talos_process.py0
-rw-r--r--testing/talos/talos/unittests/test_talosconfig_browser_config.json1
-rw-r--r--testing/talos/talos/unittests/test_talosconfig_test_config.json1
-rw-r--r--testing/talos/talos/unittests/test_test.py199
-rw-r--r--testing/talos/talos/unittests/test_ttest.py0
-rw-r--r--testing/talos/talos/unittests/test_whitelist.py0
-rw-r--r--testing/talos/talos/unittests/test_xtalos.py40
-rw-r--r--testing/talos/talos/unittests/xrestop_output.txt224
-rw-r--r--testing/talos/talos/utils.py177
-rw-r--r--testing/talos/talos/webextensions/dummy/background.js88
-rw-r--r--testing/talos/talos/webextensions/dummy/content.js16
-rw-r--r--testing/talos/talos/webextensions/dummy/dummy.xpibin0 -> 1868 bytes
-rw-r--r--testing/talos/talos/webextensions/dummy/icon.pngbin0 -> 166 bytes
-rw-r--r--testing/talos/talos/webextensions/dummy/manifest.json26
-rw-r--r--testing/talos/talos/xtalos/__init__.py3
-rw-r--r--testing/talos/talos/xtalos/etlparser.py639
-rw-r--r--testing/talos/talos/xtalos/parse_xperf.py126
-rw-r--r--testing/talos/talos/xtalos/start_xperf.py104
-rw-r--r--testing/talos/talos/xtalos/xperf_allowlist.json683
-rw-r--r--testing/talos/talos/xtalos/xperf_analyzer.py1224
-rw-r--r--testing/talos/talos/xtalos/xtalos.py167
-rw-r--r--testing/talos/talos_from_code.py141
-rw-r--r--testing/talos/tp5n-pageset.manifest10
-rw-r--r--testing/talos/webextensions.manifest9
604 files changed, 280605 insertions, 0 deletions
diff --git a/testing/talos/.eslintrc.js b/testing/talos/.eslintrc.js
new file mode 100644
index 0000000000..8dd0a1c559
--- /dev/null
+++ b/testing/talos/.eslintrc.js
@@ -0,0 +1,36 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+module.exports = {
+ globals: {
+ Cc: false,
+ Ci: false,
+ Cu: false,
+ content: true,
+ dumpLog: false,
+ netscape: false,
+ addMessageListener: false,
+ goQuitApplication: false,
+ MozillaFileLogger: false,
+ Profiler: true,
+ Services: false,
+ gBrowser: false,
+ removeMessageListener: false,
+ sendAsyncMessage: false,
+ sendSyncMessage: false,
+ TalosPowersContent: true,
+ TalosPowersParent: true,
+ TalosContentProfiler: true,
+ TalosParentProfiler: true,
+ tpRecordTime: true,
+ },
+
+ plugins: ["mozilla"],
+
+ rules: {
+ "mozilla/avoid-Date-timing": "error",
+ },
+};
diff --git a/testing/talos/INSTALL.py b/testing/talos/INSTALL.py
new file mode 100755
index 0000000000..6bdbfa13fa
--- /dev/null
+++ b/testing/talos/INSTALL.py
@@ -0,0 +1,75 @@
+#!/usr/bin/env python
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+
+"""
+installation script for talos. This script:
+- creates a virtualenv in the current directory
+- sets up talos in development mode: `python setup.py develop`
+- downloads pageloader and packages to talos/page_load_test/pageloader.xpi
+"""
+import os
+import subprocess
+import sys
+
+import six
+
+try:
+ from subprocess import check_call as call
+except ImportError:
+ from subprocess import call
+
+# globals
+here = os.path.dirname(os.path.abspath(__file__))
+VIRTUALENV = "https://raw.github.com/pypa/virtualenv/1.10/virtualenv.py"
+
+
+def which(binary, path=os.environ["PATH"]):
+ dirs = path.split(os.pathsep)
+ for dir in dirs:
+ if os.path.isfile(os.path.join(dir, path)):
+ return os.path.join(dir, path)
+ if os.path.isfile(os.path.join(dir, path + ".exe")):
+ return os.path.join(dir, path + ".exe")
+
+
+def main(args=sys.argv[1:]):
+ # sanity check
+ # ensure setup.py exists
+ setup_py = os.path.join(here, "setup.py")
+ assert os.path.exists(setup_py), "setup.py not found"
+
+ # create a virtualenv
+ virtualenv = which("virtualenv") or which("virtualenv.py")
+ if virtualenv:
+ call([virtualenv, "--system-site-packages", here])
+ else:
+ process = subprocess.Popen(
+ [sys.executable, "-", "--system-site-packages", here], stdin=subprocess.PIPE
+ )
+ stdout, stderr = process.communicate(
+ input=six.moves.urllib.request.urlopen(VIRTUALENV).read()
+ )
+
+ # find the virtualenv's python
+ for i in ("bin", "Scripts"):
+ bindir = os.path.join(here, i)
+ if os.path.exists(bindir):
+ break
+ else:
+ raise AssertionError("virtualenv binary directory not found")
+ for i in ("python", "python.exe"):
+ virtualenv_python = os.path.join(bindir, i)
+ if os.path.exists(virtualenv_python):
+ break
+ else:
+ raise AssertionError("virtualenv python not found")
+
+ # install talos into the virtualenv
+ call([os.path.abspath(virtualenv_python), "setup.py", "develop"], cwd=here)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/testing/talos/MANIFEST.in b/testing/talos/MANIFEST.in
new file mode 100644
index 0000000000..65bf9086cd
--- /dev/null
+++ b/testing/talos/MANIFEST.in
@@ -0,0 +1 @@
+recursive-include talos *
diff --git a/testing/talos/README b/testing/talos/README
new file mode 100644
index 0000000000..c52473eeec
--- /dev/null
+++ b/testing/talos/README
@@ -0,0 +1,12 @@
+Talos is a python performance testing framework that is usable on Windows,
+Mac and Linux. Talos is our versatile performance testing framework we
+use at Mozilla. It was created to serve as a test runner for the existing
+performance tests that Mozilla was running back in 2007 as well as providing
+an extensible framework for new tests as they were created.
+
+So, why Talos? Talos is the bronze automaton of Greek myth. Talos protected
+the island of Crete, throwing giant boulders at unwary seamen. He's
+also purported to have heated himself glowing hot and then embraced his
+enemies. Basically, he was awesome.
+
+For more information, see: https://wiki.mozilla.org/Buildbot/Talos
diff --git a/testing/talos/jetstream-benchmark.manifest b/testing/talos/jetstream-benchmark.manifest
new file mode 100644
index 0000000000..b7ef28f32e
--- /dev/null
+++ b/testing/talos/jetstream-benchmark.manifest
@@ -0,0 +1,9 @@
+[
+ {
+ "size": 10025531,
+ "visibility": "public",
+ "digest": "4ff745d55505720b4b5929476527ac0f9fd75a98151030699d3dec84cb11f24d2ab18f24c98ed063912e709c5126424fa7921080da3daaee31cf50eae5c9591a",
+ "algorithm": "sha512",
+ "filename": "jetstream.zip"
+ }
+] \ No newline at end of file
diff --git a/testing/talos/mach_commands.py b/testing/talos/mach_commands.py
new file mode 100644
index 0000000000..c685219422
--- /dev/null
+++ b/testing/talos/mach_commands.py
@@ -0,0 +1,133 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+# Integrates Talos mozharness with mach
+
+import json
+import logging
+import os
+import socket
+import sys
+
+import six
+from mach.decorators import Command
+from mozbuild.base import BinaryNotFoundException, MozbuildObject
+
+HERE = os.path.dirname(os.path.realpath(__file__))
+
+
+class TalosRunner(MozbuildObject):
+ def run_test(self, talos_args):
+ """
+ We want to do couple of things before running Talos
+ 1. Clone mozharness
+ 2. Make config for Talos Mozharness
+ 3. Run mozharness
+ """
+
+ try:
+ self.init_variables(talos_args)
+ except BinaryNotFoundException as e:
+ self.log(logging.ERROR, "talos", {"error": str(e)}, "ERROR: {error}")
+ self.log(logging.INFO, "raptor", {"help": e.help()}, "{help}")
+ return 1
+
+ self.make_config()
+ self.write_config()
+ self.make_args()
+ return self.run_mozharness()
+
+ def init_variables(self, talos_args):
+ self.talos_dir = os.path.join(self.topsrcdir, "testing", "talos")
+ self.mozharness_dir = os.path.join(self.topsrcdir, "testing", "mozharness")
+ self.talos_json = os.path.join(self.talos_dir, "talos.json")
+ self.config_file_path = os.path.join(
+ self._topobjdir, "testing", "talos-in_tree_conf.json"
+ )
+ self.binary_path = self.get_binary_path()
+ self.virtualenv_script = os.path.join(
+ self.topsrcdir, "third_party", "python", "virtualenv", "virtualenv.py"
+ )
+ self.virtualenv_path = os.path.join(self._topobjdir, "testing", "talos-venv")
+ self.python_interp = sys.executable
+ self.talos_args = talos_args
+
+ def make_config(self):
+ default_actions = ["populate-webroot"]
+ default_actions.extend(
+ [
+ "create-virtualenv",
+ "run-tests",
+ ]
+ )
+ self.config = {
+ "run_local": True,
+ "talos_json": self.talos_json,
+ "binary_path": self.binary_path,
+ "repo_path": self.topsrcdir,
+ "obj_path": self.topobjdir,
+ "log_name": "talos",
+ "virtualenv_path": self.virtualenv_path,
+ "pypi_url": "http://pypi.python.org/simple",
+ "base_work_dir": self.mozharness_dir,
+ "exes": {
+ "python": self.python_interp,
+ "virtualenv": [self.python_interp, self.virtualenv_script],
+ },
+ "title": socket.gethostname(),
+ "default_actions": default_actions,
+ "talos_extra_options": ["--develop"] + self.talos_args,
+ "python3_manifest": {
+ "win32": "python3.manifest",
+ "win64": "python3_x64.manifest",
+ },
+ }
+
+ def make_args(self):
+ self.args = {
+ "config": {},
+ "initial_config_file": self.config_file_path,
+ }
+
+ def write_config(self):
+ try:
+ config_file = open(self.config_file_path, "wb")
+ config_file.write(six.ensure_binary(json.dumps(self.config)))
+ except IOError as e:
+ err_str = "Error writing to Talos Mozharness config file {0}:{1}"
+ print(err_str.format(self.config_file_path, str(e)))
+ raise e
+
+ def run_mozharness(self):
+ sys.path.insert(0, self.mozharness_dir)
+ from mozharness.mozilla.testing.talos import Talos
+
+ talos_mh = Talos(
+ config=self.args["config"],
+ initial_config_file=self.args["initial_config_file"],
+ )
+ return talos_mh.run()
+
+
+def create_parser():
+ sys.path.insert(0, HERE) # allow to import the talos package
+ from talos.cmdline import create_parser
+
+ return create_parser(mach_interface=True)
+
+
+@Command(
+ "talos-test",
+ category="testing",
+ description="Run talos tests (performance testing).",
+ parser=create_parser,
+)
+def run_talos_test(command_context, **kwargs):
+ talos = command_context._spawn(TalosRunner)
+
+ try:
+ return talos.run_test(sys.argv[2:])
+ except Exception as e:
+ print(str(e))
+ return 1
diff --git a/testing/talos/moz.build b/testing/talos/moz.build
new file mode 100644
index 0000000000..02ec61441c
--- /dev/null
+++ b/testing/talos/moz.build
@@ -0,0 +1,57 @@
+# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+with Files("**"):
+ BUG_COMPONENT = ("Testing", "Talos")
+ SCHEDULES.exclusive = ["talos"]
+
+with Files("talos/startup_test/sessionrestore/**"):
+ BUG_COMPONENT = ("Firefox", "Session Restore")
+
+with Files("talos/tests/tresize/**"):
+ BUG_COMPONENT = ("Core", "XUL")
+
+with Files("talos/tests/a11y/**"):
+ BUG_COMPONENT = ("Core", "Disability Access APIs")
+
+with Files("talos/tests/canvas2d/**"):
+ BUG_COMPONENT = ("Core", "Graphics: Canvas2D")
+
+with Files("talos/tests/cpstartup/**"):
+ BUG_COMPONENT = ("Firefox", "Tabbed Browser")
+
+with Files("talos/tests/dromaeo/**"):
+ BUG_COMPONENT = ("Core", "DOM: Core & HTML")
+
+with Files("talos/tests/kraken/**"):
+ BUG_COMPONENT = ("Core", "JavaScript Engine")
+
+with Files("talos/tests/offscreencanvas/**"):
+ BUG_COMPONENT = ("Core", "Graphics: Canvas2D")
+
+with Files("talos/tests/scroll/**"):
+ BUG_COMPONENT = ("Core", "Graphics")
+
+with Files("talos/tests/svg*"):
+ BUG_COMPONENT = ("Core", "SVG")
+
+with Files("talos/tests/tabpaint/**"):
+ BUG_COMPONENT = ("Firefox", "Tabbed Browser")
+
+with Files("talos/tests/tabswitch/**"):
+ BUG_COMPONENT = ("Firefox", "Tabbed Browser")
+
+with Files("talos/tests/tart/**"):
+ BUG_COMPONENT = ("Firefox", "Tabbed Browser")
+
+with Files("talos/tests/v8_7/**"):
+ BUG_COMPONENT = ("Core", "JavaScript Engine")
+
+with Files("talos/tests/video/**"):
+ BUG_COMPONENT = ("Core", "Audio/Video: Playback")
+
+with Files("talos/tests/webgl/**"):
+ BUG_COMPONENT = ("Core", "Graphics: CanvasWebGL")
diff --git a/testing/talos/perfdocs/config.yml b/testing/talos/perfdocs/config.yml
new file mode 100644
index 0000000000..bbc71a74aa
--- /dev/null
+++ b/testing/talos/perfdocs/config.yml
@@ -0,0 +1,1285 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+---
+name: talos
+manifest: None
+static-only: False
+suites:
+ Talos Tests:
+ description: "For the sample commands found below, note that the capitalization used is important. Without the exact spelling, the test won't be found when running locally."
+ tests:
+ ARES6: >
+ - contact: :jandem and SpiderMonkey Team
+ - source: `ARES-6 <https://searchfox.org/mozilla-central/source/third_party/webkit/PerformanceTests/ARES-6>`__
+ - type: `Page load`_
+ - data: 6 cycles of the entire benchmark
+ * `geometric mean <https://searchfox.org/mozilla-central/source/testing/talos/talos/output.py#259>`__ self reported from the benchmark
+ - **Lower is better**
+ - unit: geometric mean / benchmark score
+ JetStream: >
+ - contact: :jandem and SpiderMonkey Team
+ - source: `jetstream.manifest <https://searchfox.org/mozilla-central/source/testing/talos/talos/tests/jetstream/jetstream.manifest>`__ and jetstream.zip from tooltool
+ - type: `Page load`_
+ - measuring: JavaScript performance
+ - reporting: geometric mean from the benchmark
+ - data: internal benchmark
+ * suite: `geometric
+ mean <https://searchfox.org/mozilla-central/source/testing/talos/talos/output.py#259>`__
+ provided by the benchmark
+ - description:
+ | This is the `JetStream <http://browserbench.org/JetStream/in-depth.html>`__
+ javascript benchmark taken verbatim and slightly modified to fit into
+ our pageloader extension and talos harness.
+ a11yr: >
+ - contact: :jamie and accessibility team
+ - source: `a11y.manifest <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/tests/a11y>`__
+ - type: `Page load`_
+ - measuring: ???
+ - data: we load 2 pages 25 times each, collect 2 sets of 25 data points
+ - summarization:
+ * subtest: `ignore first`_ data point, then take the `median`_ of the remaining 24; `source:
+ test.py <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/test.py#l627>`__
+ * suite: `geometric mean`_ of the 2 subtest results.
+ - reporting: test time in ms (lower is better)
+ - description:
+ | This test ensures basic a11y tables and permutations do not cause performance regressions.
+ - **Example Data**
+ * 0;dhtml.html;1584;1637;1643;1665;1741;1529;1647;1645;1692;1647;1542;1750;1654;1649;1541;1656;1674;1645;1645;1740;1558;1652;1654;1656;1654 |
+ * 1;tablemutation.html;398;385;389;391;387;387;385;387;388;385;384;31746;386;387;384;387;389;387;387;387;388;391;386;387;388 |
+ about_preferences_basic: >
+ - contact: :jaws and :gijs
+ - source: `about_preferences_basic.manifest <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/tests/about-preferences/about_preferences_basic.manifest>`__
+ - type: `Page load`_
+ - measuring: first-non-blank-paint
+ - data: We load 5 urls 1 time each, and repeat for 25 cycles; collecting 25 sets of 5 data points
+ - summarization:
+ * subtest: `ignore first`_ five data points, then take the `median`_ of the rest; `source: test.py <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/test.py#l627>`__
+ * suite: `geometric mean`_ of the the subtest results.
+ - reporting: test time in ms (lower is better)
+ - description:
+ | This test measures the performance of the Firefox about:preferences
+ page. This test is a little different than other pageload tests in that
+ we are loading one page (about:preferences) but also testing the loading
+ of that same page's subcategories/panels (i.e. about:preferences#home).
+
+ When simply changing the page's panel/category, that doesn't cause a new
+ onload event as expected; therefore we had to introduce loading the
+ 'about:blank' page in between each page category; that forces the entire
+ page to reload with the specified category panel activated.
+
+ For that reason, when new panels/categories are added to the
+ 'about:preferences' page, it can be expected that a performance
+ regression may be introduced, even if a subtest hasn't been added for
+ that new page category yet.
+
+ This test should only ever have 1 pagecycle consisting of the main
+ about-preferences page and each category separated by an about:blank
+ between. Then repeats are achieved by using 25 cycles (instead of
+ pagecycles).
+ - **Example Data**
+ * 0;preferences;346;141;143;150;136;143;153;140;154;156;143;154;146;147;151;166;140;146;140;144;144;156;154;150;140
+ * 2;preferences#search;164;142;133;141;141;141;142;140;131;146;131;140;131;131;139;142;140;144;146;143;143;142;142;137;143
+ * 3;preferences#privacy;179;159;166;177;173;153;148;154;168;155;164;155;152;157;149;155;156;186;149;156;160;151;158;168;157
+ * 4;preferences#sync;148;156;140;137;159;139;143;145;138;130;145;142;141;133;146;141;147;143;146;146;139;144;142;151;156
+ * 5;preferences#home;141;111;130;131;138;128;133;122;138;138;131;139;139;132;133;141;143;139;138;135;136;128;134;140;135
+ basic_compositor_video: >
+ - contact: :b0bh00d, :jeffm, and gfx
+ - source: `video <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/tests/video>`__
+ - type: `Page load`_
+ - data: 12 cycles of the entire benchmark, each subtest will have 12 data points (see below)
+ - summarization:
+ * subtest: `ignore first`_ data point, then take the `median`_ of the remaining 11; `source: test.py <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/test.py#l522>`__
+ * suite: `geometric mean`_ of the 24 subtest results.
+ - **Lower is better**
+ - **Example Data**
+ * ;0;240p.120fps.mp4_scale_fullscreen_startup;11.112;11.071;11.196;11.157;11.195;11.240;11.196;11.155;11.237;11.074;11.154;11.282
+ * ;1;240p.120fps.mp4_scale_fullscreen_inclip;10.995;11.114;11.052;10.991;10.876;11.115;10.995;10.991;10.997;10.994;10.992;10.993
+ * ;2;240p.120fps.mp4_scale_1_startup;1.686;1.690;1.694;1.683;1.689;1.692;1.686;1.692;1.689;1.704;1.684;1.686
+ * ;3;240p.120fps.mp4_scale_1_inclip;1.666;1.666;1.666;1.668;1.667;1.669;1.667;1.668;1.668;1.667;1.667;1.669
+ * ;4;240p.120fps.mp4_scale_1.1_startup;1.677;1.672;1.673;1.677;1.673;1.677;1.672;1.677;1.677;1.671;1.676;1.679
+ * ;5;240p.120fps.mp4_scale_1.1_inclip;1.667;1.668;1.666;1.667;1.667;1.668;1.667;1.667;1.667;1.667;1.668;1.668
+ * ;6;240p.120fps.mp4_scale_2_startup;1.927;1.908;1.947;1.946;1.902;1.932;1.916;1.936;1.921;1.896;1.908;1.894
+ * ;7;240p.120fps.mp4_scale_2_inclip;1.911;1.901;1.896;1.917;1.897;1.921;1.907;1.944;1.904;1.912;1.936;1.913
+ * ;8;480p.60fps.webm_scale_fullscreen_startup;11.675;11.587;11.539;11.454;11.723;11.410;11.629;11.410;11.454;11.498;11.540;11.540
+ * ;9;480p.60fps.webm_scale_fullscreen_inclip;11.304;11.238;11.370;11.300;11.364;11.368;11.237;11.238;11.434;11.238;11.304;11.368
+ * ;10;480p.60fps.webm_scale_1_startup;3.386;3.360;3.391;3.376;3.387;3.402;3.371;3.371;3.356;3.383;3.376;3.356
+ * ;11;480p.60fps.webm_scale_1_inclip;3.334;3.334;3.329;3.334;3.334;3.334;3.334;3.334;3.334;3.335;3.334;3.334
+ * ;12;480p.60fps.webm_scale_1.1_startup;3.363;3.363;3.368;3.356;3.356;3.379;3.364;3.360;3.360;3.356;3.363;3.356
+ * ;13;480p.60fps.webm_scale_1.1_inclip;3.329;3.334;3.329;3.334;3.333;3.334;3.334;3.334;3.340;3.335;3.329;3.335
+ * ;14;480p.60fps.webm_scale_2_startup;4.960;4.880;4.847;4.959;4.802;4.863;4.824;4.926;4.847;4.785;4.870;4.855
+ * ;15;480p.60fps.webm_scale_2_inclip;4.903;4.786;4.892;4.903;4.822;4.832;4.798;4.857;4.808;4.856;4.926;4.741
+ * ;16;1080p.60fps.mp4_scale_fullscreen_startup;14.638;14.495;14.496;14.710;14.781;14.853;14.639;14.637;14.707;14.637;14.711;14.636
+ * ;17;1080p.60fps.mp4_scale_fullscreen_inclip;13.795;13.798;13.893;13.702;13.799;13.607;13.798;13.705;13.896;13.896;13.896;14.088
+ * ;18;1080p.60fps.mp4_scale_1_startup;6.995;6.851;6.930;6.820;6.915;6.805;6.898;6.866;6.852;6.850;6.803;6.851
+ * ;19;1080p.60fps.mp4_scale_1_inclip;6.560;6.625;6.713;6.601;6.645;6.496;6.624;6.538;6.539;6.497;6.580;6.558
+ * ;20;1080p.60fps.mp4_scale_1.1_startup;7.354;7.230;7.195;7.300;7.266;7.283;7.196;7.249;7.230;7.230;7.212;7.264
+ * ;21;1080p.60fps.mp4_scale_1.1_inclip;6.969;7.222;7.018;6.993;7.045;6.970;6.970;6.807;7.118;6.969;6.997;6.972
+ * ;22;1080p.60fps.mp4_scale_2_startup;6.963;6.947;6.914;6.929;6.979;7.010;7.010245327102808;6.914;6.961;7.028;7.012;6.914
+ * ;23;1080p.60fps.mp4_scale_2_inclip;6.757;6.694;6.672;6.669;6.737;6.831;6.716;6.715;6.832;6.670;6.672;6.759
+ canvas2dvideo: >
+ - contact: :aosmond and gfx
+ - source: `canvas2dvideo <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/tests/canvas2d/benchmarks/video>`__
+ - type: `Page load`_
+ - data: 5 cycles of the entire benchmark, each subtest will have 5 data points (see below)
+ - summarization: Canvas2D video texture update with 1080p video. Measures mean tick time across 100 ticks.
+ * subtest: `ignore first`_ data point, then take the `median`_ of the remaining 4; `source:
+ test.py <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/test.py#l522>`__
+ * suite: `geometric mean`_ of the 4 subtest results.
+ - **Lower is better**
+ - **Example Data**
+ * 0;Mean tick time across 100 ticks: ;54.6916;49.0534;51.21645;51.239650000000005;52.44295
+ - description:
+ | This test playbacks a video file and ask Canvas2D to draw video frames as
+ Canvas2D textures for 100 ticks. It collects the mean tick time across 100
+ ticks to measure how much time it will spend for a video texture upload
+ to be a Canvas2D texture (ctx.drawImage). We run it for 5 times and ignore
+ the first found. Lower results are better.
+ offscreencanvas_webcodecs_main_webgl_h264: >
+ - contact: :aosmond and gfx
+ - source: `offscreencanvas_webcodecs_main_webgl_h264 <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/tests/offscreencanvas/benchmarks/video>`__
+ - type: `Page load`_
+ - data: 5 cycles of the entire benchmark, each subtest will have 5 data points (see below)
+ - summarization: OffscreenCanvas WebGL video texture update with WebCodecs and 1080p H264 video on the main thread. Measures mean frame time across 100 frames.
+ * subtest: `ignore first`_ data point, then take the `median`_ of the remaining 4; `source:
+ test.py <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/test.py#l795>`__
+ * suite: `geometric mean`_ of the 4 subtest results.
+ - **Lower is better**
+ - **Example Data**
+ * 0;Mean frame time across 100 frames: ;54.6916;49.0534;51.21645;51.239650000000005;52.44295
+ - description:
+ | This test extracts frames from a H264 video file using WebCodecs and ask WebGL to draw video
+ frames as WebGL textures for 100 frames on the main thread. It collects the mean frame time
+ across 100 frames to measure how much time it will spend for a video texture upload to be a
+ WebGL texture (gl.texImage2D). We run it for 5 times and ignore the first found. Lower
+ results are better.
+ offscreencanvas_webcodecs_main_webgl_vp9: >
+ - contact: :aosmond and gfx
+ - source: `offscreencanvas_webcodecs_main_webgl_vp9 <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/tests/offscreencanvas/benchmarks/video>`__
+ - type: `Page load`_
+ - data: 5 cycles of the entire benchmark, each subtest will have 5 data points (see below)
+ - summarization: OffscreenCanvas WebGL video texture update with WebCodecs and 1080p VP9 video on the main thread. Measures mean frame time across 100 frames.
+ * subtest: `ignore first`_ data point, then take the `median`_ of the remaining 4; `source:
+ test.py <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/test.py#l795>`__
+ * suite: `geometric mean`_ of the 4 subtest results.
+ - **Lower is better**
+ - **Example Data**
+ * 0;Mean frame time across 100 frames: ;54.6916;49.0534;51.21645;51.239650000000005;52.44295
+ - description:
+ | This test extracts frames from a VP9 video file using WebCodecs and ask WebGL to draw video
+ frames as WebGL textures for 100 frames on the main thread. It collects the mean frame time
+ across 100 frames to measure how much time it will spend for a video texture upload to be a
+ WebGL texture (gl.texImage2D). We run it for 5 times and ignore the first found. Lower
+ results are better.
+ offscreencanvas_webcodecs_main_webgl_av1: >
+ - contact: :aosmond and gfx
+ - source: `offscreencanvas_webcodecs_main_webgl_av1 <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/tests/offscreencanvas/benchmarks/video>`__
+ - type: `Page load`_
+ - data: 5 cycles of the entire benchmark, each subtest will have 5 data points (see below)
+ - summarization: OffscreenCanvas WebGL video texture update with WebCodecs and 1080p AV1 video on the main thread. Measures mean frame time across 100 frames.
+ * subtest: `ignore first`_ data point, then take the `median`_ of the remaining 4; `source:
+ test.py <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/test.py#l795>`__
+ * suite: `geometric mean`_ of the 4 subtest results.
+ - **Lower is better**
+ - **Example Data**
+ * 0;Mean frame time across 100 frames: ;54.6916;49.0534;51.21645;51.239650000000005;52.44295
+ - description:
+ | This test extracts frames from a AV1 video file using WebCodecs and ask WebGL to draw video
+ frames as WebGL textures for 100 frames on the main thread. It collects the mean frame time
+ across 100 frames to measure how much time it will spend for a video texture upload to be a
+ WebGL texture (gl.texImage2D). We run it for 5 times and ignore the first found. Lower
+ results are better.
+ offscreencanvas_webcodecs_worker_webgl_h264: >
+ - contact: :aosmond and gfx
+ - source: `offscreencanvas_webcodecs_worker_webgl_h264 <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/tests/offscreencanvas/benchmarks/video>`__
+ - type: `Page load`_
+ - data: 5 cycles of the entire benchmark, each subtest will have 5 data points (see below)
+ - summarization: OffscreenCanvas WebGL video texture update with WebCodecs and 1080p H264 video on a DOM worker thread. Measures mean frame time across 100 frames.
+ * subtest: `ignore first`_ data point, then take the `median`_ of the remaining 4; `source:
+ test.py <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/test.py#l795>`__
+ * suite: `geometric mean`_ of the 4 subtest results.
+ - **Lower is better**
+ - **Example Data**
+ * 0;Mean frame time across 100 frames: ;54.6916;49.0534;51.21645;51.239650000000005;52.44295
+ - description:
+ | This test extracts frames from a H264 video file using WebCodecs and ask WebGL to draw video
+ frames as WebGL textures for 100 frames on a DOM worker. It collects the mean frame time
+ across 100 frames to measure how much time it will spend for a video texture upload to be a
+ WebGL texture (gl.texImage2D). We run it for 5 times and ignore the first found. Lower
+ results are better.
+ offscreencanvas_webcodecs_worker_webgl_vp9: >
+ - contact: :aosmond and gfx
+ - source: `offscreencanvas_webcodecs_worker_webgl_vp9 <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/tests/offscreencanvas/benchmarks/video>`__
+ - type: `Page load`_
+ - data: 5 cycles of the entire benchmark, each subtest will have 5 data points (see below)
+ - summarization: OffscreenCanvas WebGL video texture update with WebCodecs and 1080p VP9 video on a DOM worker thread. Measures mean frame time across 100 frames.
+ * subtest: `ignore first`_ data point, then take the `median`_ of the remaining 4; `source:
+ test.py <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/test.py#l795>`__
+ * suite: `geometric mean`_ of the 4 subtest results.
+ - **Lower is better**
+ - **Example Data**
+ * 0;Mean frame time across 100 frames: ;54.6916;49.0534;51.21645;51.239650000000005;52.44295
+ - description:
+ | This test extracts frames from a VP9 video file using WebCodecs and ask WebGL to draw video
+ frames as WebGL textures for 100 frames on a DOM worker. It collects the mean frame time
+ across 100 frames to measure how much time it will spend for a video texture upload to be a
+ WebGL texture (gl.texImage2D). We run it for 5 times and ignore the first found. Lower
+ results are better.
+ offscreencanvas_webcodecs_worker_webgl_av1: >
+ - contact: :aosmond and gfx
+ - source: `offscreencanvas_webcodecs_worker_webgl_av1 <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/tests/offscreencanvas/benchmarks/video>`__
+ - type: `Page load`_
+ - data: 5 cycles of the entire benchmark, each subtest will have 5 data points (see below)
+ - summarization: OffscreenCanvas WebGL video texture update with WebCodecs and 1080p AV1 video on a DOM worker thread. Measures mean frame time across 100 frames.
+ * subtest: `ignore first`_ data point, then take the `median`_ of the remaining 4; `source:
+ test.py <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/test.py#l795>`__
+ * suite: `geometric mean`_ of the 4 subtest results.
+ - **Lower is better**
+ - **Example Data**
+ * 0;Mean frame time across 100 frames: ;54.6916;49.0534;51.21645;51.239650000000005;52.44295
+ - description:
+ | This test extracts frames from a AV1 video file using WebCodecs and ask WebGL to draw video
+ frames as WebGL textures for 100 frames on a DOM worker. It collects the mean frame time
+ across 100 frames to measure how much time it will spend for a video texture upload to be a
+ WebGL texture (gl.texImage2D). We run it for 5 times and ignore the first found. Lower
+ results are better.
+ offscreencanvas_webcodecs_main_2d_h264: >
+ - contact: :aosmond and gfx
+ - source: `offscreencanvas_webcodecs_main_2d_h264 <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/tests/offscreencanvas/benchmarks/video>`__
+ - type: `Page load`_
+ - data: 5 cycles of the entire benchmark, each subtest will have 5 data points (see below)
+ - summarization: OffscreenCanvas 2D video texture update with WebCodecs and 1080p H264 video on the main thread. Measures mean frame time across 100 frames.
+ * subtest: `ignore first`_ data point, then take the `median`_ of the remaining 4; `source:
+ test.py <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/test.py#l795>`__
+ * suite: `geometric mean`_ of the 4 subtest results.
+ - **Lower is better**
+ - **Example Data**
+ * 0;Mean frame time across 100 frames: ;54.6916;49.0534;51.21645;51.239650000000005;52.44295
+ - description:
+ | This test extracts frames from a H264 video file using WebCodecs and ask Canvas2D to draw video
+ frames as Canvas2D textures for 100 frames on the main thread. It collects the mean frame time
+ across 100 frames to measure how much time it will spend for a video texture upload to be a
+ Canvas2D texture (ctx.drawImage). We run it for 5 times and ignore the first found. Lower
+ results are better.
+ offscreencanvas_webcodecs_main_2d_vp9: >
+ - contact: :aosmond and gfx
+ - source: `offscreencanvas_webcodecs_main_2d_vp9 <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/tests/offscreencanvas/benchmarks/video>`__
+ - type: `Page load`_
+ - data: 5 cycles of the entire benchmark, each subtest will have 5 data points (see below)
+ - summarization: OffscreenCanvas 2D video texture update with WebCodecs and 1080p VP9 video on the main thread. Measures mean frame time across 100 frames.
+ * subtest: `ignore first`_ data point, then take the `median`_ of the remaining 4; `source:
+ test.py <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/test.py#l819>`__
+ * suite: `geometric mean`_ of the 4 subtest results.
+ - **Lower is better**
+ - **Example Data**
+ * 0;Mean frame time across 100 frames: ;54.6916;49.0534;51.21645;51.239650000000005;52.44295
+ - description:
+ | This test extracts frames from a VP9 video file using WebCodecs and ask Canvas2D to draw video
+ frames as Canvas2D textures for 100 frames on the main thread. It collects the mean frame time
+ across 100 frames to measure how much time it will spend for a video texture upload to be a
+ Canvas2D texture (ctx.drawImage). We run it for 5 times and ignore the first found. Lower
+ results are better.
+ offscreencanvas_webcodecs_main_2d_av1: >
+ - contact: :aosmond and gfx
+ - source: `offscreencanvas_webcodecs_main_2d_av1 <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/tests/offscreencanvas/benchmarks/video>`__
+ - type: `Page load`_
+ - data: 5 cycles of the entire benchmark, each subtest will have 5 data points (see below)
+ - summarization: OffscreenCanvas 2D video texture update with WebCodecs and 1080p AV1 video on the main thread. Measures mean frame time across 100 frames.
+ * subtest: `ignore first`_ data point, then take the `median`_ of the remaining 4; `source:
+ test.py <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/test.py#l843>`__
+ * suite: `geometric mean`_ of the 4 subtest results.
+ - **Lower is better**
+ - **Example Data**
+ * 0;Mean frame time across 100 frames: ;54.6916;49.0534;51.21645;51.239650000000005;52.44295
+ - description:
+ | This test extracts frames from a AV1 video file using WebCodecs and ask Canvas2D to draw video
+ frames as Canvas2D textures for 100 frames on the main thread. It collects the mean frame time
+ across 100 frames to measure how much time it will spend for a video texture upload to be a
+ Canvas2D texture (ctx.drawImage). We run it for 5 times and ignore the first found. Lower
+ results are better.
+ offscreencanvas_webcodecs_worker_2d_h264: >
+ - contact: :aosmond and gfx
+ - source: `offscreencanvas_webcodecs_worker_2d_h264 <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/tests/offscreencanvas/benchmarks/video>`__
+ - type: `Page load`_
+ - data: 5 cycles of the entire benchmark, each subtest will have 5 data points (see below)
+ - summarization: OffscreenCanvas 2D video texture update with WebCodecs and 1080p H264 video on a DOM worker thread. Measures mean frame time across 100 frames.
+ * subtest: `ignore first`_ data point, then take the `median`_ of the remaining 4; `source:
+ test.py <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/test.py#l795>`__
+ * suite: `geometric mean`_ of the 4 subtest results.
+ - **Lower is better**
+ - **Example Data**
+ * 0;Mean frame time across 100 frames: ;54.6916;49.0534;51.21645;51.239650000000005;52.44295
+ - description:
+ | This test extracts frames from a H264 video file using WebCodecs and ask Canvas2D to draw video
+ frames as Canvas2D textures for 100 frames on a DOM worker thread. It collects the mean frame time
+ across 100 frames to measure how much time it will spend for a video texture upload to be a
+ Canvas2D texture (ctx.drawImage). We run it for 5 times and ignore the first found. Lower
+ results are better.
+ offscreencanvas_webcodecs_worker_2d_vp9: >
+ - contact: :aosmond and gfx
+ - source: `offscreencanvas_webcodecs_worker_2d_vp9 <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/tests/offscreencanvas/benchmarks/video>`__
+ - type: `Page load`_
+ - data: 5 cycles of the entire benchmark, each subtest will have 5 data points (see below)
+ - summarization: OffscreenCanvas 2D video texture update with WebCodecs and 1080p VP9 video on a DOM worker thread. Measures mean frame time across 100 frames.
+ * subtest: `ignore first`_ data point, then take the `median`_ of the remaining 4; `source:
+ test.py <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/test.py#l795>`__
+ * suite: `geometric mean`_ of the 4 subtest results.
+ - **Lower is better**
+ - **Example Data**
+ * 0;Mean frame time across 100 frames: ;54.6916;49.0534;51.21645;51.239650000000005;52.44295
+ - description:
+ | This test extracts frames from a VP9 video file using WebCodecs and ask Canvas2D to draw video
+ frames as Canvas2D textures for 100 frames on a DOM worker thread. It collects the mean frame time
+ across 100 frames to measure how much time it will spend for a video texture upload to be a
+ Canvas2D texture (ctx.drawImage). We run it for 5 times and ignore the first found. Lower
+ results are better.
+ offscreencanvas_webcodecs_worker_2d_av1: >
+ - contact: :aosmond and gfx
+ - source: `offscreencanvas_webcodecs_worker_2d_av1 <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/tests/offscreencanvas/benchmarks/video>`__
+ - type: `Page load`_
+ - data: 5 cycles of the entire benchmark, each subtest will have 5 data points (see below)
+ - summarization: OffscreenCanvas 2D video texture update with WebCodecs and 1080p AV1 video on a DOM worker thread. Measures mean frame time across 100 frames.
+ * subtest: `ignore first`_ data point, then take the `median`_ of the remaining 4; `source:
+ test.py <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/test.py#l795>`__
+ * suite: `geometric mean`_ of the 4 subtest results.
+ - **Lower is better**
+ - **Example Data**
+ * 0;Mean frame time across 100 frames: ;54.6916;49.0534;51.21645;51.239650000000005;52.44295
+ - description:
+ | This test extracts frames from a AV1 video file using WebCodecs and ask Canvas2D to draw video
+ frames as Canvas2D textures for 100 frames on a DOM worker thread. It collects the mean frame time
+ across 100 frames to measure how much time it will spend for a video texture upload to be a
+ Canvas2D texture (ctx.drawImage). We run it for 5 times and ignore the first found. Lower
+ results are better.
+ cpstartup: >
+ - contact: :mconley, Firefox Desktop Front-end team, Gijs, fqueze, and dthayer
+ - measuring: Time from opening a new tab (which creates a new content process) to having that new content process be ready to load URLs.
+ - source: `cpstartup <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/tests/cpstartup>`__
+ - type: `Page load`_
+ - bug: `bug 1336389 <https://bugzilla.mozilla.org/show_bug.cgi?id=1336389>`__
+ - data: 20 cycles of the entire benchmark
+ - **Lower is better**
+ - **Example Data**
+ * 0;content-process-startup;877;737;687;688;802;697;794;685;694;688;794;669;699;684;690;849;687;873;694;689
+ cross_origin_pageload: >
+ - contact: :sefeng, :jesup, and perf eng team
+ - measuring: The time it takes to load a page which has 20 cross origin iframes
+ - source: `cross_origin_pageload <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/tests/cross_origin_pageload>`__
+ - type: `Page load`_
+ - bug: `bug 1701989 <https://bugzilla.mozilla.org/show_bug.cgi?id=1701989>`__
+ - data: 10 cycles of the entire benchmark
+ - **Lower is better**
+ - **Example Data**
+ * 0;/index.html;194.42;154.12;141.38;145.88;136.92;147.64;152.54;138.02;145.5;143.62
+ damp: >
+ - contact: :ochameau and devtools team
+ - source: `damp <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/tests/devtools>`__
+ - type: `Page load`_
+ - measuring: Developer Tools toolbox performance. Split in test suites covering different DevTools areas (inspector, webconsole, other).
+ - reporting: intervals in ms (lower is better) - see below for details
+ - data: there are 36 reported subtests from DAMP which we load 25 times, resulting in 36 sets of 25 data points.
+ - summarization:
+ * subtest: `ignore first`_ data point, then take the `median`_ of the remaining 24 data points; `source: test.py <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/test.py#l356>`__
+ * suite: No value for the suite, only individual subtests are relevant.
+ - description:
+ | To run this locally, you'll need to pull down the `tp5 page
+ set <#page-sets>`__ and run it in a local web server. See the `tp5
+ section <#tp5>`__.
+ - **Example Data**
+ * 0;simple.webconsole.open.DAMP;1198.86;354.38;314.44;337.32;344.73;339.05;345.55;358.37;314.89;353.73;324.02;339.45;304.63;335.50;316.69;341.05;353.45;353.73;342.28;344.63;357.62;375.18;326.08;363.10;357.30
+ * 1;simple.webconsole.reload.DAMP;44.60;41.21;25.62;29.85;38.10;42.29;38.25;40.14;26.95;39.24;40.32;34.67;34.64;44.88;32.51;42.09;28.04;43.05;40.62;36.56;42.44;44.11;38.69;29.10;42.00
+ * 2;simple.webconsole.close.DAMP;27.26;26.97;25.45;27.82;25.98;26.05;38.00;26.89;24.90;26.61;24.90;27.22;26.95;25.18;24.24;25.60;28.91;26.90;25.57;26.04;26.79;27.33;25.76;26.47;27.43
+ * 3;simple.inspector.open.DAMP;507.80;442.03;424.93;444.62;412.94;451.18;441.39;435.83;441.27;460.69;440.93;413.13;418.73;443.41;413.93;447.34;434.69;459.24;453.60;412.58;445.41;466.34;441.89;417.59;428.82
+ * 4;simple.inspector.reload.DAMP;169.45;165.11;163.93;181.12;167.86;164.67;170.34;173.12;165.24;180.59;176.72;187.42;170.14;190.35;176.59;155.00;151.66;174.40;169.46;163.85;190.93;217.00;186.25;181.31;161.13
+ * 5;simple.inspector.close.DAMP;44.40;42.28;42.71;47.21;41.74;41.24;42.94;43.73;48.24;43.04;48.61;42.49;45.93;41.36;43.83;42.43;41.81;43.93;41.38;40.98;49.76;50.86;43.49;48.99;44.02
+ * 6;simple.jsdebugger.open.DAMP;642.59;464.02;540.62;445.46;471.09;466.57;466.70;511.91;424.12;480.70;448.37;477.51;488.99;437.97;442.32;459.03;421.54;467.99;472.78;440.27;431.47;454.76;436.86;453.61;485.59
+ * 7;simple.jsdebugger.reload.DAMP;51.65;55.46;225.46;53.32;58.78;53.23;54.39;51.59;55.46;48.03;50.70;46.34;230.94;53.71;54.23;53.01;61.03;51.23;51.45;293.01;56.93;51.44;59.85;63.35;57.44
+ * 8;simple.jsdebugger.close.DAMP;29.12;30.76;40.34;32.09;31.26;32.30;33.95;31.89;29.68;31.39;32.09;30.36;44.63;32.33;30.16;32.43;30.89;30.85;31.99;49.86;30.94;44.63;32.54;29.79;33.15
+ * 9;simple.styleeditor.open.DAMP;758.54;896.93;821.17;1026.24;887.14;867.39;927.86;962.80;740.40;919.39;741.01;925.21;807.39;1051.47;729.04;1095.78;755.03;888.70;900.52;810.30;1090.09;869.72;737.44;893.16;927.72
+ * 10;simple.styleeditor.reload.DAMP;57.32;178.13;59.23;60.82;71.45;78.86;74.35;60.11;66.43;77.41;61.96;69.22;65.97;45.53;67.88;74.76;124.61;60.01;36.66;59.24;65.01;165.68;34.61;69.02;71.42
+ * 11;simple.styleeditor.close.DAMP;28.28;56.50;36.18;30.00;36.32;34.85;35.33;36.24;25.45;36.72;26.53;36.90;28.88;30.94;26.56;31.34;47.79;30.90;30.52;27.95;30.75;56.28;26.76;30.25;37.42
+ * 12;simple.performance.open.DAMP;444.28;357.87;331.17;335.16;585.71;402.99;504.58;466.95;272.98;427.54;345.60;441.53;319.99;327.91;312.94;349.79;399.51;465.60;418.42;295.14;362.06;363.11;445.71;634.96;500.83
+ * 13;simple.performance.reload.DAMP;38.07;33.44;35.99;70.57;64.04;106.47;148.31;29.60;68.47;28.95;148.46;75.92;32.15;93.72;36.17;44.13;75.11;154.76;98.28;75.16;29.39;36.68;113.16;64.05;135.60
+ * 14;simple.performance.close.DAMP;23.98;25.49;24.19;24.61;27.56;40.33;33.85;25.13;22.62;25.28;41.84;25.09;26.39;25.20;23.76;25.44;25.92;30.40;40.77;25.41;24.57;26.15;43.65;28.54;30.16
+ * 15;simple.netmonitor.open.DAMP;438.85;350.64;318.04;329.12;341.91;352.33;344.05;334.15;514.57;327.95;471.50;334.55;344.94;364.39;727.56;374.48;339.45;344.31;345.61;329.78;325.74;334.74;350.36;342.85;344.64
+ * 16;simple.netmonitor.reload.DAMP;59.68;47.50;69.37;61.18;76.89;83.22;68.11;81.24;56.15;68.20;32.41;81.22;81.62;44.30;39.52;29.60;86.07;71.18;76.32;79.93;79.63;82.15;83.58;87.04;82.97
+ * 17;simple.netmonitor.close.DAMP;38.42;39.32;52.56;43.37;48.08;40.62;51.12;41.11;59.54;43.29;41.72;40.85;51.61;49.61;51.39;44.91;40.36;41.10;45.43;42.15;42.63;40.69;41.21;44.04;41.95
+ * 18;complicated.webconsole.open.DAMP;589.97;505.93;480.71;530.93;460.60;479.63;485.33;489.08;605.28;457.12;463.95;493.28;680.05;478.72;504.47;578.69;488.66;485.34;504.94;460.67;548.38;474.98;470.33;471.34;464.58
+ * 19;complicated.webconsole.reload.DAMP;2707.20;2700.17;2596.02;2728.09;2905.51;2716.65;2657.68;2707.74;2567.86;2726.36;2650.92;2839.14;2620.34;2718.36;2595.22;2686.28;2703.48;2609.75;2686.41;2577.93;2634.47;2745.56;2655.89;2540.09;2649.18
+ * 20;complicated.webconsole.close.DAMP;623.56;570.80;636.63;502.49;565.83;537.93;525.46;565.78;532.90;562.66;525.42;490.88;611.99;486.45;528.60;505.35;480.55;500.75;532.75;480.91;488.69;548.77;535.31;477.92;519.84
+ * 21;complicated.inspector.open.DAMP;1233.26;753.57;742.74;953.11;653.29;692.66;653.75;767.02;840.68;707.56;713.95;685.79;690.21;1020.47;685.67;721.69;1063.72;695.55;702.15;760.91;853.14;660.12;729.16;1044.86;724.34
+ * 22;complicated.inspector.reload.DAMP;2384.90;2436.35;2356.11;2436.58;2372.96;2558.86;2543.76;2351.03;2411.95;2358.04;2413.27;2339.85;2373.11;2338.94;2418.88;2360.87;2349.09;2498.96;2577.73;2445.07;2354.88;2424.90;2696.10;2362.39;2493.29
+ * 23;complicated.inspector.close.DAMP;541.96;509.38;476.91;456.48;545.48;634.04;603.10;488.09;599.20;480.45;617.93;420.39;514.92;439.99;727.41;469.04;458.59;539.74;611.55;725.03;473.36;484.60;481.46;458.93;554.76
+ * 24;complicated.jsdebugger.open.DAMP;644.97;578.41;542.23;595.94;704.80;603.08;689.18;552.99;597.23;584.17;682.14;758.16;791.71;738.43;640.30;809.26;704.85;601.32;696.10;683.44;796.34;657.25;631.89;739.96;641.82
+ * 25;complicated.jsdebugger.reload.DAMP;2676.82;2650.84;2687.78;2401.23;3421.32;2450.91;2464.13;2286.40;2399.40;2415.97;2481.48;2827.69;2652.03;2554.63;2631.36;2443.83;2564.73;2466.22;2597.57;2552.73;2539.42;2481.21;2319.50;2539.00;2576.43
+ * 26;complicated.jsdebugger.close.DAMP;795.68;616.48;598.88;536.77;435.02;635.61;558.67;841.64;613.48;886.60;581.38;580.96;571.40;605.34;671.00;882.02;619.01;579.63;643.05;656.78;699.64;928.99;549.76;560.96;676.32
+ * 27;complicated.styleeditor.open.DAMP;2327.30;2494.19;2190.29;2205.60;2198.11;2509.01;2189.79;2532.05;2178.03;2207.75;2224.96;2665.84;2294.40;2645.44;2661.41;2364.60;2395.36;2582.72;2872.03;2679.29;2561.24;2330.11;2580.16;2510.36;2860.83
+ * 28;complicated.styleeditor.reload.DAMP;2218.46;2335.18;2284.20;2345.05;2286.98;2453.47;2506.97;2661.19;2529.51;2289.78;2564.15;2608.24;2270.77;2362.17;2287.31;2300.19;2331.56;2300.86;2239.27;2231.33;2476.14;2286.28;2583.24;2540.29;2259.67
+ * 29;complicated.styleeditor.close.DAMP;302.67;343.10;313.15;305.60;317.92;328.44;350.70;370.12;339.77;308.72;312.71;320.63;305.52;316.69;324.92;306.60;313.65;312.17;326.26;321.45;334.56;307.38;312.95;350.94;339.36
+ * 30;complicated.performance.open.DAMP;477.99;537.96;564.85;515.05;502.03;515.58;492.80;689.06;448.76;588.91;509.76;485.39;548.17;479.14;638.67;535.86;541.61;611.52;554.72;665.37;694.04;470.60;746.16;547.85;700.02
+ * 31;complicated.performance.reload.DAMP;2258.31;2345.74;2509.24;2579.71;2367.94;2365.94;2260.86;2324.23;2579.01;2412.63;2540.38;2069.80;2534.91;2443.48;2193.01;2442.99;2422.42;2475.35;2076.48;2092.95;2444.53;2353.86;2154.28;2354.61;2104.82
+ * 32;complicated.performance.close.DAMP;334.44;516.66;432.49;341.29;309.30;365.20;332.16;311.42;370.81;301.81;381.13;299.39;317.60;314.10;372.44;314.76;306.24;349.85;382.08;352.53;309.40;298.44;314.10;315.44;405.22
+ * 33;complicated.netmonitor.open.DAMP;469.70;597.87;468.36;823.09;696.39;477.19;487.78;495.92;587.89;471.48;555.02;507.45;883.33;522.15;756.86;713.64;593.82;715.13;477.15;717.85;586.79;556.97;631.43;629.55;581.16
+ * 34;complicated.netmonitor.reload.DAMP;4033.55;3577.36;3655.61;3721.24;3874.29;3977.92;3778.62;3825.60;3984.65;3707.91;3985.24;3565.21;3702.40;3956.70;3627.14;3916.11;3929.11;3934.06;3590.60;3628.39;3618.84;3579.52;3953.04;3781.01;3682.69
+ * 35;complicated.netmonitor.close.DAMP;1042.98;920.21;928.19;940.38;950.25;1043.61;1078.16;1077.38;1132.91;1095.05;1176.31;1256.83;1143.14;1234.61;1248.97;1242.29;1378.63;1312.74;1371.48;1373.15;1544.55;1422.51;1549.48;1616.55;1506.58
+ displaylist_mutate: >
+ - contact: :miko and gfx
+ - source: `displaylist_mutate.html <https://searchfox.org/mozilla-central/source/testing/talos/talos/tests/layout/benchmarks/displaylist_mutate.html>`__
+ - type: `Page load`_
+ - data: we load the displaylist_mutate.html page five times, measuring pageload each time, generating 5 data points.
+ - summarization:
+ * subtest: `ignore first`_ data point, then take the `median`_ of the remaining 4; `source: test.py <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/test.py#l986>`__
+ - description:
+ | This measures the amount of time it takes to render a page after
+ changing its display list. The page has a large number of display list
+ items (10,000), and mutates one every frame. The goal of the test is to
+ make displaylist construction a bottleneck, rather than painting or
+ other factors, and thus improvements or regressions to displaylist
+ construction will be visible. The test runs in ASAP mode to maximize
+ framerate, and the result is how quickly the test was able to mutate and
+ re-paint 600 items, one during each frame.
+ dromaeo: >
+ - description:
+ | Dromaeo suite of tests for JavaScript performance testing. See the
+ `Dromaeo wiki <https://wiki.mozilla.org/Dromaeo>`__ for more
+ information.
+
+ This suite is divided into several sub-suites.
+
+ Each sub-suite is divided into tests, and each test is divided into
+ sub-tests. Each sub-test takes some (in theory) fixed piece of work and
+ measures how many times that piece of work can be performed in one
+ second. The score for a test is then the geometric mean of the
+ runs/second numbers for its sub-tests. The score for a sub-suite is the
+ geometric mean of the scores for its tests.
+ dromaeo_css: >
+ - contact: :emilio, and css/layout team
+ - source: `css.manifest <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/tests/dromaeo>`__
+ - type: `Page load`_
+ - reporting: speed in test runs per second (higher is better)
+ - data: Dromaeo has 6 subtests which run internal benchmarks, each benchmark reports about 180 raw data points each
+ - summarization:
+ * subtest:
+ Dromaeo is a custom benchmark which has a lot of micro tests
+ inside each subtest, because of this we use a custom `dromaeo
+ filter <https://wiki.mozilla.org/TestEngineering/Performance/Talos/Data#dromaeo>`__
+ to summarize the subtest. Each micro test produces 5 data points and
+ for each 5 data points we take the mean, leaving 36 data points to
+ represent the subtest (assuming 180 points). These 36 micro test
+ means, are then run through a geometric_mean to produce a single
+ number for the dromaeo subtest. `source:
+ filter.py <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/test.py#l527>`__
+ * suite: `geometric mean`_ of the 6 subtest results.
+ - description:
+ | Each page in the manifest is part of the dromaeo css benchmark. Each
+ page measures the performance of searching the DOM for nodes matching
+ various CSS selectors, using different libraries for the selector
+ implementation (jQuery, Dojo, Mootools, ExtJS, Prototype, and Yahoo UI).
+ - **Example Data**
+ * 0;dojo.html;2209.83;2269.68;2275.47;2278.83;2279.81;4224.43;4344.96;4346.74;4428.69;4459.82;4392.80;4396.38;4412.54;4414.34;4415.62;3909.94;4027.96;4069.08;4099.63;4099.94;4017.70;4018.96;4054.25;4068.74;4081.31;3825.10;3984.20;4053.23;4074.59;4106.63;3893.88;3971.80;4031.15;4046.68;4048.31;3978.24;4010.16;4046.66;4051.68;4056.37;4189.50;4287.98;4390.98;4449.89;4450.20;4536.23;4557.82;4588.40;4662.58;4664.42;4675.51;4693.13;4743.72;4758.12;4764.67;4138.00;4251.60;4346.22;4410.12;4417.23;4677.53;4702.48;4714.62;4802.59;4805.33;4445.07;4539.91;4598.93;4605.45;4618.79;4434.40;4543.09;4618.56;4683.98;4689.51;4485.26;4496.75;4511.23;4600.86;4602.08;4567.52;4608.33;4615.56;4619.31;4622.79;3469.44;3544.11;3605.80;3647.74;3658.56;3101.88;3126.41;3147.73;3159.92;3170.73;3672.28;3686.40;3730.74;3748.89;3753.59;4411.71;4521.50;4633.98;4702.72;4708.76;3626.62;3646.71;3713.07;3713.13;3718.91;3846.17;3846.25;3913.61;3914.63;3916.22;3982.88;4112.98;4132.26;4194.92;4201.54;4472.64;4575.22;4644.74;4645.42;4665.51;4120.13;4142.88;4171.29;4208.43;4211.03;4405.36;4517.89;4537.50;4637.77;4644.28;4548.25;4581.20;4614.54;4658.42;4671.09;4452.78;4460.09;4494.06;4521.30;4522.37;4252.81;4350.72;4364.93;4441.40;4492.78;4251.34;4346.70;4355.00;4358.89;4365.72;4494.64;4511.03;4582.11;4591.79;4592.36;4207.54;4308.94;4309.14;4406.71;4474.46
+ * 1;ext.html;479.65;486.21;489.61;492.94;495.81;24454.14;33580.33;34089.15;34182.83;34186.15;34690.83;35050.30;35051.30;35071.65;35099.82;5758.22;5872.32;6389.62;6525.38;6555.57;8303.96;8532.96;8540.91;8544.00;8571.49;8360.79;8408.79;8432.96;8447.28;8447.83;5817.71;5932.67;8371.83;8389.20;8643.44;7983.80;8073.27;8073.84;8076.48;8078.15;24596.00;32518.84;32787.34;32830.51;32861.00;2220.87;2853.84;3333.53;3345.17;3445.47;24785.75;24971.75;25044.25;25707.61;25799.00;2464.69;2481.89;2527.57;2534.65;2534.92;217793.00;219347.90;219495.00;220059.00;297168.00;40556.19;53062.47;54275.73;54276.00;54440.37;50636.75;50833.49;50983.49;51028.49;51032.74;10746.36;10972.45;11450.37;11692.18;11797.76;8402.58;8415.79;8418.66;8426.75;8428.16;16768.75;16896.00;16925.24;16945.58;17018.15;7047.68;7263.13;7313.16;7337.38;7383.22;713.88;723.72;751.47;861.35;931.00;25454.36;25644.90;25801.87;25992.61;25995.00;819.89;851.23;852.00;886.59;909.89;14325.79;15064.92;15240.39;15431.23;15510.61;452382.00;458194.00;458707.00;459226.00;459601.00;45699.54;46244.54;46270.54;46271.54;46319.00;1073.94;1080.66;1083.35;1085.84;1087.74;26622.33;27807.58;27856.72;28040.58;28217.86;37229.81;37683.81;37710.81;37746.62;37749.81;220386.00;222903.00;240808.00;247394.00;247578.00;25567.00;25568.49;25610.74;25650.74;25710.23;26466.21;28718.71;36175.64;36529.27;36556.00;26676.00;30757.69;31965.84;34521.83;34622.65;32791.18;32884.00;33194.83;33720.16;34192.66;32150.36;32520.02;32851.18;32947.18;33128.01;29472.85;30214.09;30708.54;30999.23;32879.51;23822.88;23978.28;24358.88;24470.88;24515.51
+ * 2;jquery.html;285.42;288.57;292.66;293.75;294.14;10313.00;10688.20;13659.11;13968.65;14003.93;13488.39;13967.51;13980.79;14545.13;15059.77;4361.37;4488.35;4489.44;4492.24;4496.69;3314.32;3445.07;4412.51;5020.75;5216.66;5113.49;5136.56;5141.31;5143.87;5156.28;5055.95;5135.02;5138.64;5215.82;5226.48;4550.98;4551.59;4553.07;4557.77;4559.16;18339.63;18731.53;18738.63;18741.16;18806.15;1474.99;1538.31;1557.52;1703.67;1772.16;12209.94;12335.44;12358.32;12516.50;12651.94;1520.94;1522.62;1541.37;1584.71;1642.50;57533.00;59169.41;59436.11;59758.70;59872.40;8669.13;8789.34;8994.37;9016.05;9064.95;11047.39;11058.39;11063.78;11077.89;11082.78;6401.81;6426.26;6504.35;6518.25;6529.61;6250.22;6280.65;6304.59;6318.91;6328.72;5144.28;5228.40;5236.21;5271.26;5273.79;1398.91;1450.05;1456.39;1494.66;1519.42;727.85;766.62;844.35;858.49;904.87;9912.55;10249.54;14936.71;16566.50;16685.00;378.04;381.34;381.44;385.67;387.23;5362.60;5392.78;5397.14;5497.12;5514.83;213309.00;318297.00;320682.00;322681.00;322707.00;56357.44;67892.66;68329.66;68463.32;69506.00;418.91;424.49;425.19;425.28;426.40;9363.39;9559.95;9644.00;9737.07;9752.80;33170.83;33677.33;34950.83;35607.47;35765.82;44079.34;44588.55;45396.00;46309.00;46427.30;6302.87;6586.51;6607.08;6637.44;6642.17;9776.17;9790.46;9931.90;10391.79;10392.43;8739.26;8838.38;8870.20;8911.50;8955.15;8422.83;8786.21;8914.00;9135.82;9145.36;8945.28;9028.37;9035.23;9116.64;9137.86;6433.90;6688.73;6822.11;6830.08;6833.90;8575.23;8599.87;8610.91;8655.65;9123.91
+ * 3;mootools.html;1161.69;1333.31;1425.89;1500.37;1557.37;6706.93;7648.46;8020.04;8031.36;8049.64;7861.80;7972.40;7978.12;7993.32;7993.88;1838.83;1862.93;1864.11;1866.28;1866.71;1909.93;1921.83;1928.53;1954.07;1969.98;1808.68;1820.01;1821.30;1825.92;1826.91;1849.07;1904.99;1908.26;1911.24;1912.50;1856.86;1871.78;1873.72;1878.54;1929.57;6506.67;6752.73;7799.22;7830.41;7855.18;4117.18;4262.42;4267.30;4268.27;4269.62;2720.56;2795.36;2840.08;2840.79;2842.62;699.12;703.75;774.36;791.73;798.18;11096.22;11126.39;11132.72;11147.16;11157.44;3934.33;4067.37;4140.94;4149.75;4150.38;9042.82;9077.46;9083.55;9084.41;9086.41;4431.47;4432.84;4437.33;4438.40;4440.44;3935.67;3937.31;3937.43;3940.53;3976.68;3247.17;3307.90;3319.90;3323.32;3330.60;1001.90;1016.87;1021.12;1021.67;1022.05;1016.34;1019.09;1036.62;1056.81;1057.76;7345.56;7348.56;7391.89;7393.85;7406.30;374.27;392.53;394.73;397.28;398.26;5588.58;5653.21;5655.07;5659.15;5660.66;9775.41;9860.51;9938.40;9959.85;9968.45;9733.42;9904.31;9953.05;9960.55;9967.20;6399.26;6580.11;7245.93;7336.96;7386.78;7162.00;7245.49;7249.38;7250.75;7304.63;8458.24;8583.40;8651.57;8717.39;8742.39;8896.42;8904.60;8927.96;8960.73;8961.82;7483.48;7747.77;7763.46;7766.34;7773.07;7784.00;7821.41;7827.18;7849.18;7855.49;7012.16;7141.57;7250.09;7253.13;7335.89;6977.97;7015.51;7042.40;7204.35;7237.20;7160.46;7293.23;7321.27;7321.82;7331.16;6268.69;6324.11;6325.78;6328.56;6342.40;6554.54;6625.30;6646.00;6650.30;6674.90
+ * 4;prototype.html;237.05;251.94;256.61;259.65;263.52;4488.53;4676.88;4745.24;4745.50;4748.81;4648.47;4660.21;4666.58;4671.88;4677.32;3602.84;3611.40;3613.69;3615.69;3619.15;3604.41;3619.44;3623.24;3627.66;3628.11;3526.59;3589.35;3615.93;3616.35;3622.80;3624.69;3626.84;3628.47;3631.22;3632.15;3184.76;3186.11;3187.16;3187.78;3189.35;4353.43;4466.46;4482.57;4616.72;4617.88;4012.18;4034.84;4047.07;4047.82;4055.29;4815.11;4815.21;4816.11;4817.08;4820.40;3300.31;3345.18;3369.55;3420.98;3447.97;5026.99;5033.82;5034.50;5034.95;5038.97;3516.72;3520.79;3520.95;3521.81;3523.47;3565.29;3574.23;3574.37;3575.82;3578.37;4045.19;4053.51;4056.76;4058.76;4059.00;4714.67;4868.66;4869.66;4873.54;4878.29;1278.20;1300.92;1301.13;1301.17;1302.47;868.94;871.16;878.50;883.40;884.85;3874.71;3878.44;3881.61;3882.67;3886.92;4959.83;4968.45;4969.50;4971.38;4972.30;3862.69;3870.15;3871.79;3873.83;3878.07;2690.15;2711.66;2714.42;2715.39;2715.89;4349.04;4349.63;4351.33;4353.59;4355.46;4950.95;5101.08;5107.69;5120.21;5120.39;4336.63;4360.76;4361.96;4362.28;4365.43;4928.75;4939.41;4939.56;4943.95;4966.78;4869.03;4886.24;4888.85;4889.14;4895.76;4362.39;4362.78;4363.96;4365.00;4365.08;3408.00;3470.03;3476.37;3546.65;3547.34;4905.73;4926.21;4926.70;4926.93;4929.43;4682.88;4694.91;4696.30;4697.06;4699.69;4688.86;4691.25;4691.46;4698.37;4699.41;4628.07;4631.31;4633.42;4634.00;4636.00;4699.44;4796.02;4808.83;4809.95;4813.52;4719.10;4720.41;4722.95;4723.03;4723.53
+ * 5;yui.html;569.72;602.22;627.02;647.49;692.84;9978.30;10117.54;10121.70;10129.75;10137.24;9278.68;9291.44;9349.00;9370.53;9375.86;475.79;481.92;606.51;607.42;618.73;617.68;618.89;623.30;626.58;631.85;501.81;649.76;653.22;655.69;656.71;510.62;645.56;657.42;657.88;658.39;475.53;476.77;476.80;476.92;476.96;9895.16;9976.15;9988.25;9989.85;9996.40;9483.15;9545.75;9676.37;9808.51;10360.22;8331.29;8397.87;8538.06;8714.69;8803.78;2748.93;2800.93;2802.59;2857.33;2864.46;33757.16;33804.83;33859.32;33931.00;33991.32;7818.65;7846.92;7892.09;8170.55;8217.75;13691.38;13692.86;13693.25;13698.73;13706.66;5378.70;5517.83;5615.86;5616.16;5624.00;2985.63;3002.97;3003.07;3037.73;3038.87;2459.10;2502.52;2504.91;2507.07;2507.26;396.62;405.78;411.43;412.03;412.56;543.45;550.75;568.50;578.59;592.25;6762.21;6901.72;6984.27;7064.22;7122.29;454.78;519.40;539.29;543.96;566.16;3235.39;3266.13;3453.26;3498.79;3518.54;39079.22;39722.80;41350.59;41422.38;41540.17;34435.14;34606.31;34623.31;34661.00;34672.48;29449.12;29530.11;30507.24;31938.52;31961.52;7449.33;7524.62;7629.73;7712.96;7796.42;22917.43;23319.00;23441.41;23582.88;23583.53;29780.40;30272.55;31761.00;31765.84;31839.36;6112.45;6218.35;6476.68;6603.54;6793.66;10385.79;10471.69;10518.53;10552.74;10644.95;9563.52;9571.33;9617.09;9946.35;9976.80;9406.11;9518.48;9806.46;10102.44;10173.19;9482.43;9550.28;9878.21;9902.90;9951.45;8343.17;8511.00;8606.00;8750.21;8869.29;8234.96;8462.70;8473.49;8499.58;8808.91
+ dromaeo_dom: >
+ - contact: :peterv and dom team
+ - source: `dom.manifest <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/tests/dromaeo>`__
+ - type: `Page load`_
+ - data: see Dromaeo DOM
+ - reporting: speed in test runs per second (higher is better)
+ - description:
+ | Each page in the manifest is part of the dromaeo dom benchmark. These
+ are the specific areas that Dromaeo DOM covers:
+
+ * **DOM Attributes**:
+ Measures performance of getting and setting a DOM attribute, both via
+ ``getAttribute`` and via a reflecting DOM property. Also throws in some
+ expando getting/setting for good measure.
+
+ * **DOM Modification**:
+ Measures performance of various things that modify the DOM tree:
+ creating element and text nodes and inserting them into the DOM.
+
+ * **DOM Query**:
+ Measures performance of various methods of looking for nodes in the DOM:
+ ``getElementById``, ``getElementsByTagName``, and so forth.
+
+ * **DOM Traversal**:
+ Measures performance of various accessors (``childNodes``,
+ ``firstChild``, etc) that would be used when doing a walk over the DOM
+ tree.
+
+ Please see `dromaeo_css <#dromaeo_css>`_ for examples of data.
+ glterrain: >
+ - contact: :jgilbert and gfx
+ - source: `glterrain <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/tests/webgl/benchmarks/terrain>`__
+ - type: `Page load`_
+ - data: we load the perftest.html page (which generates 4 metrics to track) 25 times, resulting in 4 sets of 25 data points
+ - summarization: Measures average frames interval while animating a simple WebGL scene
+ * subtest: `ignore first`_ data point, then take the `median`_ of the remaining 24; `source:
+ test.py <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/test.py#l381>`__
+ * suite: `geometric mean`_ of the 4 subtest results.
+ - description:
+ | This tests animates a simple WebGL scene (static textured landscape, one
+ moving light source, rotating viewport) and measure the frames
+ throughput (expressed as average interval) over 100 frames. It runs in
+ ASAP mode (vsync off) and measures the same scene 4 times (for all
+ combination of antialiasing and alpha. It reports the results as 4
+ values) one for each combination. Lower results are better.
+ - **Example Data**
+ * 0;0.WebGL-terrain-alpha-no-AA-no;19.8189;20.57185;20.5069;21.09645;20.40045;20.89025;20.34285;20.8525;20.45845;20.6499;19.94505;20.05285;20.316049;19.46745;19.46135;20.63865;20.4789;19.97015;19.9546;20.40365;20.74385;20.828649;20.78295;20.51685;20.97069
+ * 1;1.WebGL-terrain-alpha-no-AA-yes;23.0464;23.5234;23.34595;23.40609;22.54349;22.0554;22.7933;23.00685;23.023649;22.51255;23.25975;23.65819;22.572249;22.9195;22.44325;22.95015;23.3567;23.02089;22.1459;23.04545;23.09235;23.40855;23.3296;23.18849;23.273249
+ * 2;2.WebGL-terrain-alpha-yes-AA-no;24.01795;23.889449;24.2683;24.34649;23.0562;24.02275;23.54819;24.1874;23.93545;23.53629;23.305149;23.62459;24.01589;24.06405;24.143449;23.998549;24.08205;24.26989;24.0736;24.2346;24.01145;23.7817;23.90785;24.7118;24.2834
+ * 3;3.WebGL-terrain-alpha-yes-AA-yes;25.91375;25.87005;25.64875;25.15615;25.5475;24.497449;24.56385;25.57529;25.54889;26.31559;24.143949;25.09895;24.75049;25.2087;25.52385;25.9017;25.4439;24.3495;25.9269;25.734449;26.4126;25.547449;25.667249;25.679349;25.9565
+ glvideo: >
+ - contact: :jgilbert and gfx
+ - source: `glvideo <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/tests/webgl/benchmarks/video>`__
+ - type: `Page load`_
+ - data: 5 cycles of the entire benchmark, each subtest will have 5 data points (see below)
+ - summarization: WebGL video texture update with 1080p video. Measures mean tick time across 100 ticks.
+ * subtest: `ignore first`_ data point, then take the `median`_ of the remaining 4; `source:
+ test.py <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/test.py#l522>`__
+ * suite: `geometric mean`_ of the 4 subtest results.
+ - **Lower is better**
+ - **Example Data**
+ * 0;Mean tick time across 100 ticks: ;54.6916;49.0534;51.21645;51.239650000000005;52.44295
+ - description:
+ | This test playbacks a video file and ask WebGL to draw video frames as
+ WebGL textures for 100 ticks. It collects the mean tick time across 100
+ ticks to measure how much time it will spend for a video texture upload
+ to be a WebGL texture (gl.texImage2D). We run it for 5 times and ignore
+ the first found. Lower results are better.
+ kraken: >
+ - contact: :sdetar, jandem, and SpiderMonkey Team
+ - source: `kraken.manifest <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/tests/kraken>`__
+ - type: `Page load`_
+ - measuring: JavaScript performance
+ - reporting: Total time for all tests, in ms (lower is better)
+ - data: there are 14 subtests in kraken, each subtest is an internal benchmark and generates 10 data points, or 14 sets of 10 data points.
+ - summarization:
+ * subtest: For all of the 10 data points, we take the
+ `mean <https://wiki.mozilla.org/TestEngineering/Performance/Talos/Data#mean>`__
+ to report a single number.
+ * suite: `geometric mean`_ of the 14 subtest results.
+ - description:
+ | This is the `Kraken <https://wiki.mozilla.org/Kraken>`__ javascript
+ benchmark taken verbatim and slightly modified to fit into our
+ pageloader extension and talos harness.
+ - **Example Data**
+ * 0;ai-astar;100;95;98;102;101;99;97;98;98;102
+ * 1;audio-beat-detection;147;147;191;173;145;139;186;143;183;140
+ * 2;audio-dft;161;156;158;157;160;158;160;160;159;158
+ * 3;audio-fft;82;83;83;154;83;83;82;83;160;82
+ * 4;audio-oscillator;96;96;141;95;95;95;129;96;95;134
+ * 5;imaging-gaussian-blur;116;115;116;115;115;115;115;115;117;116
+ * 6;imaging-darkroom;166;164;166;165;166;166;165;165;165;166
+ * 7;imaging-desaturate;87;87;87;87;88;87;88;87;87;87
+ * 8;json-parse-financial;75;77;77;76;77;76;77;76;77;77
+ * 9;json-stringify-tinderbox;79;79;80;79;78;79;79;78;79;79
+ * 10;stanford-crypto-aes;98;97;96;98;98;98;98;98;113;95
+ * 11;stanford-crypto-ccm;130;138;130;127;137;134;134;132;147;129
+ * 12;stanford-crypto-pbkdf2;176;187;183;183;176;174;181;187;175;173
+ * 13;stanford-crypto-sha256-iterative;86;85;83;84;86;85;85;86;83;83
+ motionmark_animometer: >
+ - contact: :b0bh00d, :jeffm, and gfx
+ - source: `source <https://searchfox.org/mozilla-central/source/third_party/webkit/PerformanceTests/MotionMark>`__ `manifests <https://searchfox.org/mozilla-central/source/testing/talos/talos/tests/motionmark>`__
+ - type: `Page load`_
+ - measuring: benchmark measuring the time to animate complex scenes
+ - summarization:
+ * subtest: FPS from the subtest, each subtest is run for 15 seconds,
+ repeat this 5 times and report the median value
+ * suite: we take a geometric mean of all the subtests (9 for
+ animometer, 11 for html suite)
+ motionmark_htmlsuite: >
+ - contact: :jrmuizel and graphics(gfx) team
+ motionmark_webgl: >
+ - contact: :jgilbert and gfx
+ - source: `source <https://searchfox.org/mozilla-central/source/third_party/webkit/PerformanceTests/MotionMark>`__ `manifest <https://searchfox.org/mozilla-central/source/testing/talos/talos/tests/motionmark/webgl.manifest>`__
+ - type: `Page load`_
+ - measuring: Draw call performance in WebGL
+ - summarization:
+ * subtest: FPS from the subtest, each subtest is run once for 15
+ seconds, report the average FPS over that time.
+ * suite: identical to subtest
+ pdfpaint: >
+ - contact: :calixte and CI and Quality Tools team
+ - source:
+ - type: `Page load`_
+ - reporting: time from *performance.timing.navigationStart* to *pagerendered* event in ms (lower is better)
+ - data: load a PDF 20 times
+ perf_reftest: >
+ - contact: :emilio and css/layout team
+ - source: `perf-reftest <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/tests/perf-reftest>`__
+ - type: `Page load`_
+ - reporting: intervals in ms (lower is better)
+ - data: each test loads 25 times
+ - summarization:
+ * subtest: `ignore first`_ 5 data points, then take the `median`_ of the remaining 20 data points; `source:
+ test.py <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/test.py#l734>`__
+ * suite: identical to subtest
+ - description:
+ | **Important note:** This test now requires an 'opt' build. If the
+ perf-reftest is ran on a non-opt build, it will time out (more
+ specifically on innertext-1.html, and possibly others in the future).
+
+ Style system performance test suite. The perf-reftest suite is a unique
+ talos suite where each subtest loads two different test pages: a 'base'
+ page (i.e. bloom_basic) and a 'reference' page (i.e. bloom_basic_ref),
+ and then compares each of the page load times against eachother to
+ determine the variance.
+
+ Talos runs each of the two pages as if they are stand-alone tests, and
+ then calculates and reports the variance; the test output 'replicates'
+ reported from bloom_basic are actually the comparisons between the
+ 'base' and 'reference' pages for each page load cycle. The suite
+ contains multiple subtests, each of which contains a base page and a
+ reference page.
+
+ If you wish to see the individual 'base' and 'reference' page results
+ instead of just the reported difference, the 'base_replicates' and
+ 'ref_replicates' can be found in the PERFHERDER_DATA log file output,
+ and in the 'local.json' talos output file when running talos locally. In
+ production, both of the page replicates are also archived in the
+ perfherder-data.json file. The perfherder-data.json file is archived
+ after each run in production, and can be found on the Treeherder Job
+ Details tab when the perf-reftest job symbol is selected.
+
+ This test suite was ported over from the `style-perf-tests <https://github.com/heycam/style-perf-tests>`__.
+ - **Example Data**
+ * "replicates": [1.185, 1.69, 1.22, 0.36, 11.26, 3.835, 3.315, 1.355, 3.185, 2.485, 2.2, 1.01, 0.9, 1.22, 1.9,
+ 0.285, 1.52, 0.31, 2.58, 0.725, 2.31, 2.67, 3.295, 1.57, 0.3], "value": 1.7349999999999999, "unit": "ms",
+ * "base_replicates": [166.94000000000003, 165.16, 165.64000000000001, 165.04000000000002, 167.355, 165.175,
+ 165.325, 165.11, 164.175, 164.78, 165.555, 165.885, 166.83499999999998, 165.76500000000001, 164.375, 166.825,
+ 167.13, 166.425, 169.22500000000002, 164.955, 165.335, 164.45000000000002, 164.85500000000002, 165.005, 166.035]}],
+ * "ref_replicates": [165.755, 166.85000000000002, 166.85999999999999, 165.4, 178.615, 169.01, 168.64, 166.465,
+ 167.36, 167.265, 167.75500000000002, 166.895, 167.735, 166.985, 166.275, 166.54000000000002, 165.61, 166.115,
+ 166.64499999999998, 165.68, 167.64499999999998, 167.12, 168.15, 166.575, 166.335],
+ perf_reftest_singletons: >
+ - contact: :emelio and Layout team
+ - source: `perf-reftest-singletons <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/tests/perf-reftest-singletons>`__
+ - type: `Page load`_
+ - reporting: intervals in ms (lower is better)
+ - data: each test loads 25 times
+ - summarization:
+ * subtest: `ignore first`_ 5 data points, then take the `median`_ of the remaining 20 data points; `source:
+ test.py <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/test.py#l734>`__
+ * suite: identical to subtest
+ - description:
+ | Individual style system performance tests. The perf-reftest-singletons
+ suite runs the perf-reftest 'base' pages (i.e. bloom_basic) test
+ individually, and reports the values for that single test page alone,
+ NOT the comparison of two different pages. There are multiple subtests
+ in this suite, each just containing the base page on its own.
+
+ This test suite was ported over from the `style-perf-tests <https://github.com/heycam/style-perf-tests>`__.
+ - **Example Data**
+ * bloombasic.html;88.34000000000003;88.66499999999999;94.815;92.60500000000002;95.30000000000001;
+ * 98.80000000000001;91.975;87.73500000000001;86.925;86.965;93.00500000000001;98.93;87.45000000000002;
+ * 87.14500000000001;92.78500000000001;86.96499999999999;98.32000000000001;97.485;90.67000000000002;
+ * 86.72500000000001;95.665;100.67;101.095;94.32;91.87
+ rasterflood_gradient: >
+ - contact: :jrmuizel, :jimm, and gfx
+ - source: `rasterflood_gradient.html <https://searchfox.org/mozilla-central/source/testing/talos/talos/tests/gfx/benchmarks/rasterflood_gradient.html>`__
+ - type: `Page load`_
+ - data: we load the rasterflood_gradient.html page ten times, computing a score each time, generating 10 data points.
+ - summarization:
+ * subtest: `ignore first`_ data point, then take the `median`_ of the remaining 9; `source:
+ test.py <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/test.py#l986>`__
+ - description:
+ | This page animates some complex gradient patterns in a
+ requestAnimationFrame callback. However, it also churns the CPU during
+ each callback, spinning an empty loop for 14ms each frame. The intent is
+ that, if we consider the rasterization costs to be 0, then the animation
+ should run close to 60fps. Otherwise it will lag. Since rasterization
+ costs are not 0, the lower we can get them, the faster the test will
+ run. The test runs in ASAP mode to maximize framerate.
+
+ The test runs for 10 seconds, and the resulting score is how many frames
+ we were able to render during that time. Higher is better. Improvements
+ (or regressions) to general painting performance or gradient rendering
+ will affect this benchmark.
+ rasterflood_svg: >
+ - contact: :jrmuizel, :jimm, and gfx
+ - source: `rasterflood_svg.html <https://searchfox.org/mozilla-central/source/testing/talos/talos/tests/gfx/benchmarks/rasterflood_svg.html>`__
+ - type: `Page load`_
+ - data: we load the rasterflood_svg.html page ten times, measuring pageload each time, generating 10 data points.
+ - summarization:
+ * subtest: `ignore first`_ data point, then take the `median`_ of the remaining 9; `source:
+ test.py <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/test.py#l986>`__
+ - description:
+ | This page animates some complex SVG patterns in a requestAnimationFrame
+ callback. However, it also churns the CPU during each callback, spinning
+ an empty loop for 14ms each frame. The intent is that, if we consider
+ the rasterization costs to be 0, then the animation should run close to
+ 60fps. Otherwise it will lag. Since rasterization costs are not 0, the
+ lower we can get them, the faster the test will run. The test runs in
+ ASAP mode to maximize framerate. The result is how quickly the browser
+ is able to render 600 frames of the animation.
+
+ Improvements (or regressions) to general painting performance or SVG are
+ likely to affect this benchmark.
+ sessionrestore: >
+ - contact: :dale, :dao, :farre, session restore module owners/peers, and DOM team
+ - source: `talos/sessionrestore <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/startup_test/sessionrestore>`__
+ - bug: `bug 936630 <https://bugzilla.mozilla.org/show_bug.cgi?id=936630>`__,
+ `bug 1331937 <https://bugzilla.mozilla.org/show_bug.cgi?id=1331937>`__,
+ `bug 1531520 <https://bugzilla.mozilla.org/show_bug.cgi?id=1531520>`__
+ - type: Startup_
+ - measuring: time spent reading and restoring the session.
+ - reporting: interval in ms (lower is better).
+ - data: we load the session restore index page 10 times to collect 1 set of 10 data points.
+ - summarization:
+ * subtest: `ignore first`_ data point, then take the `median`_ of the remaining 9 data points; `source:
+ test.py <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/test.py#l305>`__
+ * suite: identical to subtest
+ - description:
+ | Three tests measure the time spent reading and restoring the session
+ from a valid sessionstore.js. Time is counted from the *process start*
+ until the *sessionRestored* event.
+
+ In *sessionrestore*, this is tested with a configuration that requires
+ the session to be restored. In *sessionrestore_no_auto_restore*, this is
+ tested with a configuration that requires the session to not be
+ restored. Both of the above tests use a sessionstore.js file that
+ contains one window and roughly 89 tabs. In
+ *sessionrestore_many_windows*, this is tested with a sessionstore.js
+ that contains 3 windows and 130 tabs. The first window contains 50 tabs,
+ 80 remaning tabs are divided equally between the second and the third
+ window.
+ - **Example Data**
+ * [2362.0, 2147.0, 2171.0, 2134.0, 2116.0, 2145.0, 2141.0, 2141.0, 2136.0, 2080.0]
+ sessionrestore_many_windows: >
+ - See `sessionrestore <#sessionrestore>`_.
+ sessionrestore_no_auto_restore: >
+ - See `sessionrestore <#sessionrestore>`_.
+ startup_about_home_paint: >
+ - contact: :mconley, Firefox Desktop Front-end team, :gijs, :fqueze, and :dthayer
+ - source: `addon <https://hg.mozilla.org/mozilla-central/file/tip/testing/talos/talos/startup_test/startup_about_home_paint/addon/>`__
+ - type: Startup_
+ - measuring: The time from process start to the point where the about:home page reports that it has painted the Top Sites.
+ - data: we load restart the browser 20 times, and collect a timestamp for each run.
+ - reporting: test time in ms (lower is better)
+ - **Example Data**
+ * [1503.0, 1497.0, 1523.0, 1536.0, 1511.0, 1485.0, 1594.0, 1580.0, 1531.0, 1471.0, 1502.0, 1520.0, 1488.0, 1533.0, 1531.0, 1502.0, 1486.0, 1489.0, 1487.0, 1475.0]
+ startup_about_home_paint_cached: >
+ - contact: :mconley, Firefox Desktop Front-end team, :gijs, :fqueze, and :dthayer
+ - See `startup_about_home_paint <#startup_about_home_paint>`_.
+ - description:
+ | Tests loading about:home on startup with the about:home startup cache enabled.
+ startup_about_home_paint_realworld_webextensions: >
+ - contact: :mconley, Firefox Desktop Front-end team, :gijs, :fqueze, and :dthayer
+ - source: `addon <https://hg.mozilla.org/mozilla-central/file/tip/testing/talos/talos/startup_test/startup_about_home_paint/addon/>`__
+ - type: Startup_, `Real-world WebExtensions`_
+ - measuring: The time from process start to the point where the about:home page reports that it has painted the Top Sites when 5 popular, real-world WebExtensions are installed and enabled.
+ - data: we install the 5 real-world WebExtensions, then load and restart the browser 20 times, and collect a timestamp for each run.
+ - reporting: test time in ms (lower is better)
+ - **Example Data**
+ * [1503.0, 1497.0, 1523.0, 1536.0, 1511.0, 1485.0, 1594.0, 1580.0, 1531.0, 1471.0, 1502.0, 1520.0, 1488.0, 1533.0, 1531.0, 1502.0, 1486.0, 1489.0, 1487.0, 1475.0]
+ stylebench: >
+ - contact: :emilio and Layout team
+ - source: `stylebench.manifest <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/tests/stylebench/stylebench.manifest>`__
+ - type: `Page load`_
+ - measuring: speed of dynamic style recalculation
+ - reporting: runs/minute score
+ tabpaint: >
+ - contact: :mconley, Firefox Desktop Front-end team, :gijs, :fqueze, and :dthayer
+ - source: `tabpaint <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/tests/tabpaint>`__
+ - bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1253382
+ - type: `Page load`_
+ - measuring:
+ * The time it takes to paint the content of a newly opened tab when
+ the tab is opened from the parent (ex: by hitting Ctrl-T)
+ * The time it takes to paint the content of a newly opened tab when
+ the tab is opened from content (ex: by clicking on a target="_blank" link)
+ - **NOT** measuring:
+ * The time it takes to animate the tabs. That's the responsibility
+ of the TART test. tabpaint is strictly concerned with the painting of the web content.
+ - data: we load the tabpaint trigger page 20 times, each run produces
+ two values (the time it takes to paint content when opened from the
+ parent, and the time it takes to paint content when opened from
+ content), resulting in 2 sets of 20 data points.
+ - **Example Data**
+ * 0;tabpaint-from-parent;105;76;66;64;64;69;65;63;70;68;64;60;65;63;54;61;64;67;61;64
+ * 1;tabpaint-from-content;129;68;72;72;70;78;86;85;82;79;120;92;76;80;74;82;76;89;77;85
+ - summarization:
+ * subtest: `ignore first`_ data point, then take the `median`_ of the remaining 19 data points
+ * suite: geometric_mean(subtests)
+ tabswitch: >
+ - contact: :mconley, Firefox Desktop Front-end team, :gijs, :fqueze, and :dthayer
+ - source: `tabswitch <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/tests/tabswitch>`__
+ - bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1166132
+ - type: `Page load`_
+ - measuring:
+ * The time between switching a tab and the first paint to the content area
+ - reporting:
+ - data: we load 50 web pages 5 times each, resulting in 50 sets of 5 data points.
+ - **To run it locally**, you'd need `tp5n.zip <#Page_sets>`__.
+ - summarization:
+ * subtest: `ignore first`_ data point, then take the `median`_ of the remaining 4 data points; `source:
+ test.py <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/test.py#l305>`__
+ * suite: `geometric mean`_ of the 50 subtest results.
+ - **Example Data**
+ * 0;amazon.com/www.amazon.com/Kindle-Wireless-Reader-Wifi-Graphite/dp/B002Y27P3M/507846.html;66.34;54.15;53.08;55.79;49.12
+ * 1;cgi.ebay.com/cgi.ebay.com/ALL-NEW-KINDLE-3-eBOOK-WIRELESS-READING-DEVICE-W-WIFI-/130496077314@pt=LH_DefaultDomain_0&hash=item1e622c1e02.html;50.85;46.57;39.51;36.71;36.47
+ * 2;163.com/www.163.com/index.html;95.05;80.80;76.09;69.29;68.96
+ * 3;mail.ru/mail.ru/index.html;66.21;52.04;56.33;55.11;45.61
+ * 4;bbc.co.uk/www.bbc.co.uk/news/index.html;35.80;44.59;48.02;45.71;42.58
+ * 5;store.apple.com/store.apple.com/us@mco=Nzc1MjMwNA.html;52.98;49.45;58.47;56.79;61.29
+ * 6;imdb.com/www.imdb.com/title/tt1099212/index.html;46.51;55.12;46.22;50.60;47.63
+ * 7;cnn.com/www.cnn.com/index.html;43.02;50.77;43.88;49.70;50.02
+ * 8;sohu.com/www.sohu.com/index.html;74.03;62.89;63.30;67.71;89.35
+ * 9;youku.com/www.youku.com/index.html;43.98;52.69;45.80;63.00;57.02
+ * 10;ifeng.com/ifeng.com/index.html;88.01;87.54;104.47;94.93;113.91
+ * 11;tudou.com/www.tudou.com/index.html;45.32;48.10;46.03;39.26;58.38
+ * 12;chemistry.about.com/chemistry.about.com/index.html;38.24;37.07;39.59;39.48;39.60
+ * 13;beatonna.livejournal.com/beatonna.livejournal.com/index.html;35.59;50.75;36.17;48.49;52.61
+ * 14;rakuten.co.jp/www.rakuten.co.jp/index.html;90.28;71.95;62.66;60.33;67.76
+ * 15;uol.com.br/www.uol.com.br/index.html;42.89;48.05;53.77;40.02;42.41
+ * 16;thepiratebay.org/thepiratebay.org/top/201.html;40.46;42.46;47.63;57.66;45.49
+ * 17;page.renren.com/page.renren.com/index.html;47.61;66.78;47.91;62.78;47.19
+ * 18;chinaz.com/chinaz.com/index.html;50.34;58.17;118.43;55.47;63.80
+ * 19;globo.com/www.globo.com/index.html;41.34;38.52;42.82;53.14;45.20
+ * 20;spiegel.de/www.spiegel.de/index.html;33.60;34.34;36.25;36.18;47.04
+ * 21;dailymotion.com/www.dailymotion.com/us.html;37.68;36.13;39.52;37.15;42.79
+ * 22;goo.ne.jp/goo.ne.jp/index.html;50.74;47.30;63.04;58.41;58.96
+ * 23;stackoverflow.com/stackoverflow.com/questions/184618/what-is-the-best-comment-in-source-code-you-have-ever-encountered.html;44.66;44.40;43.39;47.38;57.65
+ * 24;ezinearticles.com/ezinearticles.com/index.html@Migraine-Ocular---The-Eye-Migraines&id=4684133.html;37.38;45.01;40.29;36.26;39.28
+ * 25;huffingtonpost.com/www.huffingtonpost.com/index.html;39.57;43.35;55.01;44.13;58.28
+ * 26;media.photobucket.com/media.photobucket.com/image/funny%20gif/findstuff22/Best%20Images/Funny/funny-gif1.jpg@o=1.html;39.77;42.46;75.54;42.38;47.72
+ * 27;imgur.com/imgur.com/gallery/index.html;34.72;37.37;46.74;40.93;37.08
+ * 28;reddit.com/www.reddit.com/index.html;42.47;39.89;51.54;51.51;41.68
+ * 29;noimpactman.typepad.com/noimpactman.typepad.com/index.html;54.28;47.40;52.38;52.15;50.97
+ * 30;myspace.com/www.myspace.com/albumart.html;48.97;64.12;61.66;48.32;68.53
+ * 31;mashable.com/mashable.com/index.html;36.76;40.95;35.30;53.86;42.76
+ * 32;dailymail.co.uk/www.dailymail.co.uk/ushome/index.html;42.06;40.64;44.24;37.32;61.35
+ * 33;whois.domaintools.com/whois.domaintools.com/mozilla.com.html;34.73;35.23;39.25;48.24;35.72
+ * 34;indiatimes.com/www.indiatimes.com/index.html;52.67;55.51;46.29;52.69;58.82
+ * 35;reuters.com/www.reuters.com/index.html;32.92;33.08;36.95;39.23;39.27
+ * 36;xinhuanet.com/xinhuanet.com/index.html;125.85;102.56;138.89;130.34;147.45
+ * 37;56.com/www.56.com/index.html;63.89;75.00;61.45;62.20;58.67
+ * 38;bild.de/www.bild.de/index.html;35.61;43.74;34.79;33.45;31.83
+ * 39;guardian.co.uk/www.guardian.co.uk/index.html;38.91;55.93;62.34;42.63;45.99
+ * 40;naver.com/www.naver.com/index.html;78.10;89.07;127.67;75.18;109.32
+ * 41;yelp.com/www.yelp.com/biz/alexanders-steakhouse-cupertino.html;42.54;46.92;39.19;49.82;50.43
+ * 42;wsj.com/online.wsj.com/home-page.html;46.43;55.51;44.16;81.79;48.78
+ * 43;google.com/www.google.com/search@q=mozilla.html;35.62;36.71;44.47;45.00;40.22
+ * 44;xunlei.com/xunlei.com/index.html;67.57;60.69;83.83;85.53;85.08
+ * 45;aljazeera.net/aljazeera.net/portal.html;65.03;51.84;73.29;64.77;69.70
+ * 46;w3.org/www.w3.org/standards/webdesign/htmlcss.html;53.57;58.50;72.98;66.95;55.62
+ * 47;homeway.com.cn/www.hexun.com/index.html;105.59;117.32;108.95;116.10;70.32
+ * 48;youtube.com/www.youtube.com/music.html;40.53;41.48;59.67;40.81;40.07
+ * 49;people.com.cn/people.com.cn/index.html;96.49;103.64;115.12;66.05;117.84
+ tart: >
+ - contact: :mconley, Firefox Desktop Front-end team, :gijs, :fqueze, and :dthayer
+ - source: `tart <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/tests/tart>`__
+ - type: `Page load`_
+ - measuring: Desktop Firefox UI animation speed and smoothness
+ - reporting: intervals in ms (lower is better) - see below for details
+ - data: there are 30 reported subtests from TART which we load 25 times, resulting in 30 sets of 25 data points.
+ - summarization:
+ * subtest: `ignore first`_ data point, then take the `median`_ of the remaining 24 data points; `source:
+ test.py <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/test.py#l305>`__
+ * suite: `geometric mean`_ of the 30 subtest results.
+ - TART is the **Tab Animation Regression Test**.
+ - TART tests tab animation on these cases:
+ - Simple: single new tab of about:blank open/close without affecting (shrinking/expanding) other tabs.
+ - icon: same as above with favicons and long title instead of about:blank.
+ - Newtab: newtab open with thumbnails preview - without affecting other tabs, with and without preload.
+ - Fade: opens a tab, then measures fadeout/fadein (tab animation without the overhead of opening/closing a tab).
+ * Case 1 is tested with DPI scaling of 1.
+ * Case 2 is tested with DPI scaling of 1.0 and 2.0.
+ * Case 3 is tested with the default scaling of the test system.
+ * Case 4 is tested with DPI scaling of 2.0 with the "icon" tab (favicon and long title).
+ - Each animation produces 3 test results:
+ * error: difference between the designated duration and the actual completion duration from the trigger.
+ * half: average frame interval over the 2nd half of the animation.
+ * all: average frame interval over all recorded intervals.
+ * And the run logs also include the explicit intervals from which these 3 values were derived.
+ - **Example Data**
+ * 0;simple-open-DPI1.half.TART;2.35;2.42;2.63;2.47;2.71;2.38;2.37;2.41;2.48;2.70;2.44;2.41;2.51;2.43;2.41;2.56;2.76;2.49;2.36;2.40;2.70;2.53;2.35;2.46;2.47
+ * 1;simple-open-DPI1.all.TART;2.80;2.95;3.12;2.92;3.46;2.87;2.92;2.99;2.89;3.24;2.94;2.95;3.25;2.92;3.02;3.00;3.21;3.31;2.84;2.87;3.10;3.13;3.10;2.94;2.95
+ * 2;simple-open-DPI1.error.TART;33.60;36.33;35.93;35.97;38.17;34.77;36.00;35.01;36.25;36.22;35.24;35.76;36.64;36.31;34.74;34.40;34.34;41.48;35.04;34.83;34.27;34.04;34.37;35.22;36.52
+ * 3;simple-close-DPI1.half.TART;1.95;1.88;1.91;1.94;2.00;1.97;1.88;1.76;1.84;2.18;1.99;1.83;2.04;1.93;1.81;1.77;1.79;1.90;1.82;1.84;1.78;1.75;1.76;1.89;1.81
+ * 4;simple-close-DPI1.all.TART;2.19;2.08;2.07;2.32;2.65;2.32;2.26;1.96;2.02;2.26;2.05;2.16;2.19;2.11;2.04;1.98;2.05;2.02;2.01;2.11;1.97;1.97;2.05;2.01;2.12
+ * 5;simple-close-DPI1.error.TART;21.35;23.87;22.60;22.02;22.97;22.35;22.15;22.79;21.81;21.90;22.26;22.58;23.15;22.43;22.76;23.36;21.86;22.70;22.96;22.70;22.28;22.03;21.78;22.33;22.23
+ * 6;icon-open-DPI1.half.TART;2.42;2.33;2.50;2.58;2.36;2.51;2.60;2.35;2.52;2.51;2.59;2.34;3.29;2.63;2.46;2.57;2.53;2.50;2.39;2.51;2.44;2.66;2.72;2.36;2.52
+ * 7;icon-open-DPI1.all.TART;3.12;2.94;3.42;3.23;3.10;3.21;3.33;3.14;3.24;3.32;3.46;2.90;3.65;3.19;3.27;3.47;3.32;3.13;2.95;3.23;3.21;3.33;3.47;3.15;3.32
+ * 8;icon-open-DPI1.error.TART;38.39;37.96;37.03;38.85;37.03;37.17;37.19;37.56;36.67;36.33;36.89;36.85;37.54;38.46;35.38;37.52;36.68;36.48;36.03;35.71;37.12;37.08;37.74;38.09;35.85
+ * 9;icon-close-DPI1.half.TART;1.94;1.93;1.79;1.89;1.83;1.83;1.90;1.89;1.75;1.76;1.77;1.74;1.81;1.86;1.95;1.99;1.73;1.83;1.97;1.80;1.94;1.84;2.01;1.88;2.03
+ * 10;icon-close-DPI1.all.TART;2.14;2.14;1.98;2.03;2.02;2.25;2.29;2.13;1.97;2.01;1.94;2.01;1.99;2.05;2.11;2.09;2.02;2.02;2.12;2.02;2.20;2.11;2.19;2.07;2.27
+ * 11;icon-close-DPI1.error.TART;24.51;25.03;25.17;24.54;23.86;23.70;24.02;23.61;24.10;24.53;23.92;23.75;23.73;23.78;23.42;25.40;24.21;24.55;23.96;24.96;24.41;24.96;24.16;24.20;23.65
+ * 12;icon-open-DPI2.half.TART;2.60;2.60;2.60;2.53;2.51;2.53;2.59;2.43;2.66;2.60;2.47;2.61;2.64;2.43;2.49;2.63;2.61;2.60;2.52;3.06;2.65;2.74;2.69;2.44;2.43
+ * 13;icon-open-DPI2.all.TART;3.45;3.22;3.38;3.47;3.10;3.31;3.47;3.13;3.37;3.14;3.28;3.20;3.40;3.15;3.14;3.23;3.41;3.16;3.26;3.55;3.29;3.49;3.44;3.11;3.22
+ * 14;icon-open-DPI2.error.TART;40.20;37.86;37.53;41.46;37.03;38.77;37.48;36.97;37.28;37.72;36.09;36.71;38.89;38.21;37.37;38.91;36.79;36.10;37.60;36.99;37.56;35.76;38.92;37.46;37.52
+ * 15;icon-close-DPI2.half.TART;2.27;1.97;1.83;1.86;2.08;1.88;1.80;1.90;1.77;1.89;2.06;1.89;1.89;1.86;2.01;1.79;1.78;1.83;1.89;1.85;1.74;1.82;1.84;1.81;1.79
+ * 16;icon-close-DPI2.all.TART;2.33;2.13;2.18;2.03;2.33;2.03;1.95;2.06;1.96;2.13;2.25;2.10;2.13;2.03;2.18;2.00;2.05;2.01;2.08;2.05;1.96;2.04;2.10;2.04;2.08
+ * 17;icon-close-DPI2.error.TART;22.99;23.02;24.32;23.58;23.05;23.34;22.92;23.22;22.90;23.33;23.33;23.05;22.80;23.45;24.05;22.39;22.14;22.97;22.85;22.13;22.89;22.98;23.69;22.99;23.08
+ * 18;iconFade-close-DPI2.half.TART;2.14;1.84;1.78;1.84;1.66;2.07;1.81;3.82;1.68;1.85;1.62;2.54;2.06;1.85;2.17;1.80;1.71;1.67;2.11;1.73;2.94;2.14;1.93;1.72;2.05
+ * 19;iconFade-close-DPI2.all.TART;2.17;1.76;1.80;1.89;1.70;1.93;1.80;3.38;1.78;1.90;1.70;2.50;1.94;1.81;2.29;1.82;1.79;1.76;2.23;1.80;2.85;2.06;1.84;1.83;2.09
+ * 20;iconFade-close-DPI2.error.TART;4.67;4.11;3.69;4.51;4.46;3.88;4.54;3.68;4.56;3.82;4.32;4.87;4.42;3.72;3.72;4.54;4.93;4.46;4.64;3.39;4.09;3.28;3.58;4.11;3.80
+ * 21;iconFade-open-DPI2.half.TART;2.37;2.61;2.37;2.62;2.54;2.84;2.57;2.44;4.33;2.57;2.59;2.67;2.58;2.48;2.38;2.39;2.50;2.39;2.50;2.57;2.52;2.55;2.47;2.69;2.41
+ * 22;iconFade-open-DPI2.all.TART;2.45;2.64;2.39;2.60;2.57;2.60;2.61;2.59;3.14;2.55;2.54;2.66;2.57;2.48;2.47;2.46;2.55;2.45;2.51;2.61;2.54;2.58;2.50;2.54;2.40
+ * 23;iconFade-open-DPI2.error.TART;3.64;4.67;4.31;5.79;6.43;3.64;4.82;8.68;5.78;4.38;3.80;3.98;4.64;653.63;4.63;3.76;4.23;5.01;5.48;4.99;3.48;5.10;5.02;6.14;5.58
+ * 24;newtab-open-preload-no.half.TART;5.02;2.90;3.06;3.03;2.94;2.94;3.08;3.12;3.60;3.19;2.82;2.96;3.67;7.85;2.79;3.12;3.18;2.92;2.86;2.96;2.96;3.00;2.90;2.97;2.94
+ * 25;newtab-open-preload-no.all.TART;7.11;4.66;5.03;4.68;4.50;4.58;4.76;4.76;5.67;4.96;4.36;4.51;5.21;11.16;4.38;4.69;4.77;4.45;4.45;4.70;4.51;4.61;4.54;4.69;4.60
+ * 26;newtab-open-preload-no.error.TART;40.82;40.85;37.38;37.40;36.30;36.47;36.89;37.63;37.12;38.65;36.73;36.95;36.11;38.59;37.39;37.77;37.93;37.54;37.46;38.29;36.58;38.25;38.32;37.92;36.93
+ * 27;newtab-open-preload-yes.half.TART;3.14;2.96;2.97;8.37;2.98;3.00;2.96;3.05;3.12;3.48;3.07;3.23;3.05;2.88;2.92;3.06;2.90;3.01;3.19;2.90;3.18;3.11;3.04;3.16;3.21
+ * 28;newtab-open-preload-yes.all.TART;5.10;4.60;4.63;8.94;5.01;4.69;4.63;4.67;4.93;5.43;4.78;5.12;4.77;4.65;4.50;4.78;4.75;4.63;4.76;4.45;4.86;4.88;4.69;4.86;4.92
+ * 29;newtab-open-preload-yes.error.TART;35.90;37.24;38.57;40.60;36.04;38.12;38.78;36.73;36.91;36.69;38.12;36.69;37.79;35.80;36.11;38.01;36.59;38.85;37.14;37.30;38.02;38.95;37.64;37.86;36.43
+ tp5n: >
+ - contact: fx-perf@mozilla.com
+ - description:
+ | The tp5 is an updated web page test set to 100 pages from April 8th, 2011. Effort was made for the pages to no longer be splash screens/login pages/home pages but to be pages that better reflect the actual content of the site in question.
+ tp5: >
+ - description:
+ | Note that the tp5 test no longer exists (only talos-tp5o) though many
+ tests still make use of this pageset. Here, we provide an overview of
+ the tp5 pageset and some information about how data using the tp5
+ pageset might be used in various suites.
+ tp5o: >
+ - contact: :davehunt, and perftest team
+ - source: `tp5n.zip <#page-sets>`__
+ - type: `Page load`_
+ - data: we load each of the 51 tp5o pages 25 times, resulting in 51 sets of 25 data points.
+ - **To run it locally**, you'd need `tp5n.zip <#page-sets>`__.
+ - summarization: tp5 with limited pageset (48 pages as others have too much noise)
+ * subtest: `ignore first`_ **5** data points, then take the `median`_ of the remaining 20; `source:
+ test.py <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/test.py#l449>`__
+ * suite: `geometric mean`_ of the 51 subtest results.
+ - description:
+ | Tests the time it takes Firefox to load the `tp5 web page test
+ set <#page-sets>`__. The web set was culled from the Alexa top 500 April
+ 8th, 2011 and consists of 100 pages in tp5n and 51 in tp5o. Some suites
+ use a subset of these, i.e. 48/51 tests to reduce noise - check with the
+ owner of the test suite which uses the pageset to check if this
+ difference exists there.
+
+ Here are the broad steps we use to create the test set:
+
+ #. Take the Alexa top 500 sites list
+ #. Remove all sites with questionable or explicit content
+ #. Remove duplicate site (for ex. many Google search front pages)
+ #. Manually select to keep interesting pages (such as pages in different locales)
+ #. Select a more representative page from any site presenting a simple search/login/etc. page
+ #. Deal with Windows 255 char limit for cached pages
+ #. Limit test set to top 100 pages
+
+ Note that the above steps did not eliminate all outside network access
+ so we had to take further action to scrub all the pages so that there
+ are 0 outside network accesses (this is done so that the tp test is as
+ deterministic measurement of our rendering/layout/paint process as
+ possible).
+ - **Example Data**
+ * 0;163.com/www.163.com/index.html;1035;512;542;519;505;514;551;513;554;793;487;528;528;498;503;530;527;490;521;535;521;496;498;564;520
+ * 1;56.com/www.56.com/index.html;1081;583;580;577;597;580;623;558;572;592;598;580;564;583;596;600;579;580;566;573;566;581;571;600;586
+ * 2;aljazeera.net/aljazeera.net/portal.html;688;347;401;382;346;362;347;372;337;345;365;337;380;338;355;360;356;366;367;352;350;366;346;375;382
+ * 3;amazon.com/www.amazon.com/Kindle-Wireless-Reader-Wifi-Graphite/dp/B002Y27P3M/507846.html;1392;878;901;852;886;867;877;864;862;877;866;888;3308;870;863;869;873;850;851;850;857;873;869;860;855
+ * 4;bbc.co.uk/www.bbc.co.uk/news/index.html;455;271;272;271;279;289;276;285;277;291;281;286;278;286;274;285;276;285;287;286;276;288;279;272;278
+ * 5;beatonna.livejournal.com/beatonna.livejournal.com/index.html;290;123;123;129;120;121;124;125;119;125;120;150;121;147;121;121;113;121;119;122;117;112;127;117;139
+ * 6;bild.de/www.bild.de/index.html;1314;937;946;931;922;918;920;937;934;930;947;928;936;933;933;928;930;941;951;946;947;938;925;939;938
+ * 7;cgi.ebay.com/cgi.ebay.com/ALL-NEW-KINDLE-3-eBOOK-WIRELESS-READING-DEVICE-W-WIFI-/130496077314@pt=LH_DefaultDomain_0&hash=item1e622c1e02.html;495;324;330;328;321;308;315;308;321;313;327;330;317;339;333;322;312;370;336;327;310;312;312;355;330
+ * 8;chemistry.about.com/chemistry.about.com/index.html;238;156;156;154;158;161;152;151;152;167;179;152;154;156;161;161;157;167;151;167;154;149;178;153;160
+ * 9;chinaz.com/chinaz.com/index.html;347;223;255;234;245;233;264;234;244;228;260;224;258;223;280;220;243;225;251;226;258;232;258;232;247
+ * 10;cnn.com/www.cnn.com/index.html;551;384;436;394;391;375;371;407;371;374;398;372;368;388;376;380;386;377;363;383;384;370;388;381;374
+ * 11;dailymail.co.uk/www.dailymail.co.uk/ushome/index.html;984;606;551;561;545;542;576;564;543;560;566;557;561;544;545;576;548;539;568;567;557;560;545;544;578
+ * 12;dailymotion.com/www.dailymotion.com/us.html;473;271;286;272;285;288;290;290;280;268;286;269;287;275;289;282;293;287;304;261;289;284;281;277;286
+ * 13;digg.com/digg.com/news/story/New_logo_for_Mozilla_Firefox_browser.html;410;321;304;303;322;300;319;321;320;306;323;313;312;305;312;338;317;338;301;325;297;302;309;305;300
+ * 14;ezinearticles.com/ezinearticles.com/index.html@Migraine-Ocular---The-Eye-Migraines&id=4684133.html;234;177;163;163;186;176;185;175;167;156;162;199;163;190;173;181;175;178;165;159;182;170;183;169;158
+ * 15;globo.com/www.globo.com/index.html;684;468;466;485;482;445;433;467;467;450;487;466;440;484;444;451;511;443;429;469;468;430;485;459;447
+ * 16;google.com/www.google.com/search@q=mozilla.html;150;100;102;101;97;104;99;116;107;100;98;137;102;102;99;106;98;112;100;102;105;104;107;96;100
+ * 17;goo.ne.jp/goo.ne.jp/index.html;328;125;132;132;143;121;122;120;132;145;166;139;144;125;128;152;128;145;130;132;154;126;142;133;139
+ * 18;guardian.co.uk/www.guardian.co.uk/index.html;462;311;296;322;309;305;303;288;301;308;301;304;319;309;295;305;294;308;304;322;310;314;302;303;292
+ * 19;homeway.com.cn/www.hexun.com/index.html;584;456;396;357;417;374;376;406;363;392;400;378;378;402;390;373;398;393;366;385;383;361;418;386;351
+ * 20;huffingtonpost.com/www.huffingtonpost.com/index.html;811;609;575;596;568;585;589;571;568;600;571;588;585;570;574;616;576;564;598;594;589;590;572;572;612
+ * 21;ifeng.com/ifeng.com/index.html;829;438;478;462;448;465;469;470;429;463;465;432;482;444;476;453;460;476;461;484;467;510;447;477;443
+ * 22;imdb.com/www.imdb.com/title/tt1099212/index.html;476;337;358;332;414;379;344;420;354;363;387;345;358;371;341;385;359;379;353;349;392;349;358;378;347
+ * 23;imgur.com/imgur.com/gallery/index.html;419;205;224;231;207;222;206;231;204;219;209;210;210;208;202;215;203;210;203;212;218;219;202;224;230
+ * 24;indiatimes.com/www.indiatimes.com/index.html;530;339;348;384;376;381;353;350;403;333;356;393;350;328;393;329;389;346;394;349;382;332;409;327;354
+ * 25;mail.ru/mail.ru/index.html;500;256;308;251;271;270;270;246;273;252;279;249;301;252;251;256;271;246;267;254;265;248;277;247;275
+ * 26;mashable.com/mashable.com/index.html;699;497;439;508;440;448;512;446;431;500;445;427;495;455;458;499;440;432;522;443;447;488;445;461;489
+ * 27;media.photobucket.com/media.photobucket.com/image/funny%20gif/findstuff22/Best%20Images/Funny/funny-gif1.jpg@o=1.html;294;203;195;189;213;186;195;186;204;188;190;220;204;202;195;204;192;204;191;187;204;199;191;192;211
+ * 28;myspace.com/www.myspace.com/albumart.html;595;446;455;420;433;425;416;429;452;411;435;439;389;434;418;402;422;426;396;438;423;391;434;438;395
+ * 29;naver.com/www.naver.com/index.html;626;368;338;386;342;377;371;352;379;348;362;357;359;354;386;338;394;330;326;372;345;392;336;336;368
+ * 30;noimpactman.typepad.com/noimpactman.typepad.com/index.html;431;333;288;292;285;313;277;289;282;292;276;293;270;294;289;281;275;302;285;290;280;285;278;284;283
+ * 31;page.renren.com/page.renren.com/index.html;373;232;228;228;213;227;224;227;226;216;234;226;230;212;213;221;224;230;212;218;217;221;212;222;230
+ * 32;people.com.cn/people.com.cn/index.html;579;318;305;339;307;341;325;326;307;309;315;314;318;317;321;309;307;299;312;313;305;326;318;384;310
+ * 33;rakuten.co.jp/www.rakuten.co.jp/index.html;717;385;371;388;381;348;394;358;396;368;343;386;348;388;393;388;360;339;398;357;392;378;395;386;367
+ * 34;reddit.com/www.reddit.com/index.html;340;254;248;255;241;241;248;275;251;250;250;252;243;274;240;269;254;249;242;257;271;253;243;278;252
+ * 35;reuters.com/www.reuters.com/index.html;513;404;355;358;379;343;354;385;379;354;418;363;342;412;355;351;402;375;354;400;362;355;380;373;336
+ * 36;slideshare.net/www.slideshare.net/jameswillamor/lolcats-in-popular-culture-a-historical-perspective.html;397;279;270;283;285;283;291;286;289;284;275;281;288;284;280;279;290;301;290;270;292;282;289;267;278
+ * 37;sohu.com/www.sohu.com/index.html;727;414;479;414;431;485;418;440;488;431;432;464;442;407;488;435;416;465;445;414;480;416;403;463;429
+ * 38;spiegel.de/www.spiegel.de/index.html;543;430;391;380;440;387;375;430;380;397;415;383;434;420;384;399;421;392;384;418;388;380;427;403;392
+ * 39;stackoverflow.com/stackoverflow.com/questions/184618/what-is-the-best-comment-in-source-code-you-have-ever-encountered.html;503;377;356;438;370;388;409;367;366;407;375;363;393;360;363;396;376;391;426;363;378;408;400;359;408
+ * 40;store.apple.com/store.apple.com/us@mco=Nzc1MjMwNA.html;488;327;344;343;333;329;328;348;361;342;362;332;389;333;382;331;382;343;405;343;326;325;329;323;340
+ * 41;thepiratebay.org/thepiratebay.org/top/201.html;412;274;317;260;256;269;266;261;258;289;245;284;256;277;251;302;276;307;268;268;247;285;260;271;257
+ * 42;tudou.com/www.tudou.com/index.html;522;304;281;283;287;285;288;307;279;288;282;303;292;288;290;287;311;271;279;274;294;272;290;269;290
+ * 43;uol.com.br/www.uol.com.br/index.html;668;387;450;411;395;452;386;431;452;394;385;436;413;414;440;401;412;439;408;430;426;415;382;433;387
+ * 44;w3.org/www.w3.org/standards/webdesign/htmlcss.html;225;143;129;151;181;141;147;137;159;179;142;153;136;139;191;140;151;143;141;181;140;154;142;143;183
+ * 45;wsj.com/online.wsj.com/home-page.html;634;466;512;463;467;507;461;432;492;494;491;507;466;477;495;455;451;495;461;463;494;468;444;497;442
+ * 46;xinhuanet.com/xinhuanet.com/index.html;991;663;727;659;647;639;644;656;666;658;670;648;676;653;652;654;641;636;664;668;655;657;646;674;633
+ * 47;xunlei.com/xunlei.com/index.html;802;625;624;636;641;652;659;642;623;635;628;606;667;688;683;694;672;640;628;620;653;626;633;654;643
+ * 48;yelp.com/www.yelp.com/biz/alexanders-steakhouse-cupertino.html;752;475;502;472;477;512;489;478;501;472;454;517;487;474;521;467;450;513;491;464;536;507;455;511;481
+ * 49;youku.com/www.youku.com/index.html;844;448;498;441;417;497;478;439;467;436;447;465;438;461;466;446;452;496;457;446;486;449;467;499;442
+ * 50;youtube.com/www.youtube.com/music.html;443;338;253;289;238;296;254;290;242;302;237;290;253;305;253;293;251;311;244;293;255;291;246;316;249
+ tp5o_scroll: >
+ - contact: :botond, :tnikkel, :hiro, and layout team
+ - source: `tp5n.zip <#page-sets>`__
+ - type: `Page load`_
+ - data: we load each of the 51 tp5o pages 12 times, resulting in 51 sets of 12 data points.
+ - **To run it locally**, you'd need `tp5n.zip <#page-sets>`__.
+ - summarization: Measures average frames interval while scrolling the pages of the tp5o set
+ * subtest: `ignore first`_ data point, then take the `median`_ of the remaining 11; `source:
+ test.py <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/test.py#l470>`__
+ * suite: `geometric mean`_ of the 51 subtest results.
+ - description:
+ | This test is identical to tscrollx, but it scrolls the 50 pages of the
+ tp5o set (rather than 6 synthetic pages which tscrollx scrolls). There
+ are two variants for each test page. The "regular" variant waits 500ms
+ after the page load event fires, then iterates 100 scroll steps of 10px
+ each (or until the bottom of the page is reached - whichever comes
+ first), then reports the average frame interval. The "CSSOM" variant is
+ similar, but uses APZ's smooth scrolling mechanism to do compositor
+ scrolling instead of main-thread scrolling. So it just requests the
+ final scroll destination and the compositor handles the scrolling and
+ reports frame intervals.
+ - **Example Data**
+ * 0;163.com/www.163.com/index.html;9.73;8.61;7.37;8.17;7.58;7.29;6.88;7.45;6.91;6.61;8.47;7.12
+ * 1;56.com/www.56.com/index.html;10.85;10.24;10.75;10.30;10.23;10.10;10.31;10.06;11.10;10.06;9.56;10.30
+ * 2;aljazeera.net/aljazeera.net/portal.html;9.23;7.15;7.50;7.26;7.73;7.05;7.14;7.66;7.23;7.93;7.26;7.18
+ * 3;amazon.com/www.amazon.com/Kindle-Wireless-Reader-Wifi-Graphite/dp/B002Y27P3M/507846.html;7.14;6.87;7.18;6.31;6.93;6.71;6.37;7.00;6.59;5.37;7.31;6.13
+ * 4;bbc.co.uk/www.bbc.co.uk/news/index.html;7.39;6.33;6.22;7.66;6.67;7.77;6.91;7.74;7.08;6.36;6.03;7.12
+ * 5;beatonna.livejournal.com/beatonna.livejournal.com/index.html;5.79;5.79;5.68;5.46;5.55;5.48;5.69;5.83;5.88;5.97;5.93;5.88
+ * 6;bild.de/www.bild.de/index.html;8.65;7.63;7.17;6.36;7.44;7.68;8.63;6.71;8.34;7.15;7.82;7.70
+ * 7;cgi.ebay.com/cgi.ebay.com/ALL-NEW-KINDLE-3-eBOOK-WIRELESS-READING-DEVICE-W-WIFI-/130496077314@pt=LH_DefaultDomain_0&hash=item1e622c1e02.html;7.12;6.81;7.22;6.98;7.05;5.68;7.15;6.54;7.31;7.18;7.82;7.77
+ * 8;chemistry.about.com/chemistry.about.com/index.html;6.76;6.17;6.41;6.88;5.67;5.47;6.83;6.28;6.16;6.81;6.21;6.75
+ * 9;chinaz.com/chinaz.com/index.html;10.72;7.99;7.33;7.10;7.85;8.62;8.39;6.72;6.26;6.65;8.14;7.78
+ * 10;cnn.com/www.cnn.com/index.html;7.73;6.80;6.08;8.27;9.24;7.81;7.69;7.05;8.17;7.70;7.90;6.81
+ * 11;dailymail.co.uk/www.dailymail.co.uk/ushome/index.html;6.37;8.28;7.19;8.00;8.09;7.43;6.90;7.24;7.77;7.29;7.38;6.14
+ * 12;dailymotion.com/www.dailymotion.com/us.html;9.53;9.80;9.29;9.03;9.10;8.64;8.62;8.71;8.77;9.81;9.64;8.96
+ * 13;digg.com/digg.com/news/story/New_logo_for_Mozilla_Firefox_browser.html;7.72;7.06;7.60;5.67;6.85;7.32;7.80;5.98;8.27;6.68;7.52;8.39
+ * 14;ezinearticles.com/ezinearticles.com/index.html@Migraine-Ocular---The-Eye-Migraines&id=4684133.html;7.14;7.11;8.09;7.17;6.87;7.12;7.65;7.74;7.26;7.36;6.91;6.95
+ * 15;globo.com/www.globo.com/index.html;6.71;7.91;5.83;7.34;7.75;8.00;7.73;7.85;7.03;6.42;8.43;8.11
+ * 16;google.com/www.google.com/search@q=mozilla.html;6.49;6.23;7.96;6.39;7.23;8.19;7.35;7.39;6.94;7.24;7.55;7.62
+ * 17;goo.ne.jp/goo.ne.jp/index.html;8.56;7.18;7.15;7.03;6.85;7.62;7.66;6.99;7.84;7.51;7.23;7.18
+ * 18;guardian.co.uk/www.guardian.co.uk/index.html;7.32;7.62;8.18;7.62;7.83;8.08;7.60;8.17;8.47;7.54;7.92;8.09
+ * 19;homeway.com.cn/www.hexun.com/index.html;10.18;8.75;8.83;8.64;8.98;8.07;7.76;9.29;8.05;7.55;8.91;7.78
+ * 20;huffingtonpost.com/www.huffingtonpost.com/index.html;8.38;7.17;7.03;6.83;6.49;6.47;6.69;7.08;6.81;7.29;7.13;7.70
+ * 21;ifeng.com/ifeng.com/index.html;12.45;8.65;8.75;7.56;8.26;7.71;8.04;7.45;7.83;7.14;8.38;7.68
+ * 22;imdb.com/www.imdb.com/title/tt1099212/index.html;8.53;5.65;6.94;7.18;6.10;7.57;6.26;8.34;8.16;7.29;7.62;8.51
+ * 23;imgur.com/imgur.com/gallery/index.html;8.10;7.20;7.50;7.88;7.27;6.97;8.13;7.14;7.59;7.39;8.01;8.82
+ * 24;indiatimes.com/www.indiatimes.com/index.html;8.00;6.74;7.37;8.52;7.03;8.45;7.08;8.47;9.26;7.89;7.17;6.74
+ * 25;mail.ru/mail.ru/index.html;7.64;9.50;9.47;7.03;6.45;6.24;8.03;6.72;7.18;6.39;6.25;6.25
+ * 26;mashable.com/mashable.com/index.html;7.97;8.03;6.10;7.80;7.91;7.26;7.49;7.45;7.60;7.08;7.63;7.36
+ * 27;media.photobucket.com/media.photobucket.com/image/funny%20gif/findstuff22/Best%20Images/Funny/funny-gif1.jpg@o=1.html;290.00;195.00;217.00;199.00;204.00;196.00;198.00;206.00;209.00;208.00;192.00;196.00
+ * 28;myspace.com/www.myspace.com/albumart.html;14.40;13.45;13.29;13.62;13.42;14.15;13.86;14.34;14.69;14.10;13.82;14.13
+ * 29;naver.com/www.naver.com/index.html;9.15;8.31;9.40;9.89;7.29;8.43;8.87;8.77;8.96;8.24;8.16;8.21
+ * 30;noimpactman.typepad.com/noimpactman.typepad.com/index.html;7.27;7.14;7.70;7.86;7.43;6.95;7.30;7.58;7.51;7.95;7.43;7.05
+ * 31;page.renren.com/page.renren.com/index.html;7.94;8.13;6.76;7.77;6.93;6.60;7.62;7.61;6.88;7.56;7.55;7.48
+ * 32;people.com.cn/people.com.cn/index.html;11.92;9.22;8.49;8.55;8.34;8.49;6.91;9.92;8.69;8.63;7.69;9.34
+ * 33;rakuten.co.jp/www.rakuten.co.jp/index.html;11.10;7.13;8.68;7.85;8.37;7.91;6.74;8.27;8.55;8.93;7.15;9.02
+ * 34;reddit.com/www.reddit.com/index.html;6.38;7.95;6.84;7.04;6.96;7.15;8.05;7.71;8.13;7.13;6.60;7.53
+ * 35;reuters.com/www.reuters.com/index.html;7.51;7.25;6.60;6.98;7.41;6.45;7.61;7.46;6.11;7.15;7.05;6.94
+ * 36;slideshare.net/www.slideshare.net/jameswillamor/lolcats-in-popular-culture-a-historical-perspective.html;7.20;6.32;6.80;6.87;6.29;6.45;7.18;6.92;6.57;7.41;7.08;6.51
+ * 37;sohu.com/www.sohu.com/index.html;11.72;9.64;8.85;7.12;7.96;9.14;7.76;8.19;7.14;7.68;8.08;7.24
+ * 38;spiegel.de/www.spiegel.de/index.html;7.24;7.30;6.64;7.01;6.74;6.70;6.36;6.84;7.86;7.08;7.12;7.40
+ * 39;stackoverflow.com/stackoverflow.com/questions/184618/what-is-the-best-comment-in-source-code-you-have-ever-encountered.html;7.39;5.88;7.22;6.51;7.12;6.51;6.46;6.53;6.63;6.54;6.48;6.80
+ * 40;store.apple.com/store.apple.com/us@mco=Nzc1MjMwNA.html;6.23;7.17;7.39;8.98;7.99;8.03;9.12;8.37;8.56;7.61;8.06;7.55
+ * 41;thepiratebay.org/thepiratebay.org/top/201.html;9.08;8.93;8.09;7.49;7.30;7.80;7.54;7.65;7.91;7.53;8.37;8.04
+ * 42;tudou.com/www.tudou.com/index.html;10.06;9.38;8.68;7.37;8.57;9.11;8.20;7.91;8.78;9.64;8.11;8.47
+ * 43;uol.com.br/www.uol.com.br/index.html;9.04;9.49;9.48;9.31;8.68;8.41;9.16;8.91;9.49;8.37;9.77;8.73
+ * 44;w3.org/www.w3.org/standards/webdesign/htmlcss.html;6.62;5.98;6.87;6.47;7.22;6.05;6.42;6.50;7.47;7.18;5.82;7.11
+ * 45;wsj.com/online.wsj.com/home-page.html;7.49;8.57;6.84;8.12;7.60;7.24;8.16;8.22;6.81;8.28;8.11;8.58
+ * 46;xinhuanet.com/xinhuanet.com/index.html;13.66;9.21;10.09;9.56;8.99;10.29;10.24;8.91;11.23;10.82;9.64;10.11
+ * 47;xunlei.com/xunlei.com/index.html;8.99;8.16;8.82;8.37;7.01;8.48;7.98;8.69;8.10;8.10;7.10;6.41
+ * 48;yelp.com/www.yelp.com/biz/alexanders-steakhouse-cupertino.html;8.18;7.45;7.01;8.14;7.12;7.82;8.24;7.13;7.00;6.41;6.85;7.31
+ * 49;youku.com/www.youku.com/index.html;12.21;10.29;10.37;10.34;8.40;9.82;9.23;9.91;9.64;9.91;8.90;10.23
+ * 50;youtube.com/www.youtube.com/music.html;9.90;9.06;9.29;9.17;8.85;8.77;9.83;9.21;9.29;10.09;9.69;8.64
+ - **Possible regression causes**: Some examples of things that cause regressions in this test are
+ * Increased displayport size (which causes a larger display list to be built)
+ * Slowdown in the building of display list
+ * Slowdown in rasterization of content
+ * Slowdown in composite times
+ tp5o_webext: >
+ - contact: :mixedpuppy and webextension team
+ tresize: >
+ - contact: :gcp and platform integration
+ - source: `tresize-test.html <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/startup_test/tresize/addon/content/tresize-test.html>`__
+ - type: Startup_
+ - measuring: Time to do XUL resize, in ms (lower is better).
+ - data: we run the tresize test page 20 times, resulting in 1 set of 20 data points.
+ - summarization:
+ * subtest: `ignore first`_ **5** data points, then take the `median`_ of the remaining 15 data points; `source:
+ test.py <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/test.py#l205>`__
+ * suite: same as subtest result
+ - description:
+ | A purer form of paint measurement than tpaint. This test opens a single
+ window positioned at 10,10 and sized to 300,300, then resizes the window
+ outward \|max\| times measuring the amount of time it takes to repaint
+ each resize. Dumps the resulting dataset and average to stdout or
+ logfile.
+
+ In `bug
+ 1102479 <https://bugzilla.mozilla.org/show_bug.cgi?id=1102479>`__
+ tresize was rewritten to work in e10s mode which involved a full rewrite
+ of the test.
+ - **Example Data**
+ * [23.2565333333333, 23.763383333333362, 22.58369999999999, 22.802766666666653, 22.304050000000025, 23.010383333333326, 22.865466666666677, 24.233716666666705, 24.110983333333365, 22.21390000000004, 23.910333333333316, 23.409816666666647, 19.873049999999992, 21.103966666666686, 20.389749999999978, 20.777349999999984, 20.326283333333365, 22.341616666666667, 20.29813333333336, 20.769600000000104]
+ - **Possible regression causes**
+ * slowdown in the paint pipeline
+ * resizes also trigger a rendering flush so bugs in the flushing code can manifest as regressions
+ * introduction of more spurious MozAfterPaint events - see `bug 1471961 <https://bugzilla.mozilla.org/show_bug.cgi?id=1471961>`__
+ ts_paint: >
+ - contact: :mconley, Firefox Desktop Front-end team,
+ - source: `tspaint_test.html <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/startup_test/tspaint_test.html>`__
+ - Perfomatic: "Ts, Paint"
+ - type: Startup_
+ - data: 20 times we start the browser and time how long it takes to
+ paint the startup test page, resulting in 1 set of 20 data points.
+ - summarization:
+ * subtest: identical to suite
+ * suite: `ignore first`_ data point, then take the `median`_ of the remaining 19 data points; `source:
+ test.py <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/test.py#l135>`__
+ - description:
+ | Starts the browser to display tspaint_test.html with the start time in
+ the url, waits for `MozAfterPaint and onLoad <#paint>`__ to fire, then
+ records the end time and calculates the time to startup.
+ - **Example Data**
+ * [1666.0, 1195.0, 1139.0, 1198.0, 1248.0, 1224.0, 1213.0, 1194.0, 1229.0, 1196.0, 1191.0, 1230.0, 1247.0, 1169.0, 1217.0, 1184.0, 1196.0, 1192.0, 1224.0, 1192.0]
+ - **Possible regression causes**
+ * (and/or maybe tpaint?) will regress if a new element is added to the
+ browser window (e.g. browser.xul) and it's frame gets created. Fix
+ this by ensuring it's display:none by default.
+ ts_paint_heavy: >
+ - `ts_paint <#ts_paint>`_ test run against a heavy user profile.
+ - contact: :mconley, Firefox Desktop Front-end team,
+ ts_paint_webext: >
+ - contact: :mconley, Firefox Desktop Front-end team,
+ tscrollx: >
+ - contact: :jrmuizel and gfx
+ - source: `scroll.manifest <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/tests/scroll>`__
+ - type: `Page load`_
+ - measuring: Scroll performance
+ - reporting: Average frame interval (1 ÷ fps). Lower is better.
+ - data: we load 6 pages 25 times each, collecting 6 sets of 25 data points
+ - summarization: `Replacing tscroll,tsvg with tscrollx,tsvgx <https://groups.google.com/d/topic/mozilla.dev.platform/RICw5SJhNMo/discussion>`__
+ * subtest: `ignore first`_ data point, then take the `median`_ of the remaining 24; `source:
+ test.py <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/test.py#l623>`__
+ * suite: `geometric mean`_ of the 6 subtest results.
+ - description:
+ | This test scrolls several pages where each represent a different known
+ "hard" case to scroll (\* needinfo), and measures the average frames
+ interval (1/FPS) on each. The ASAP test (tscrollx) iterates in unlimited
+ frame-rate mode thus reflecting the maximum scroll throughput per page.
+ To turn on ASAP mode, we set these preferences:
+
+ ``preferences = {'layout.frame_rate': 0, 'docshell.event_starvation_delay_hint': 1}``
+
+ See also `tp5o_scroll <#tp5o_scroll>`_ which has relevant information for this test.
+ - **Example Data**
+ * 0;tiled.html;5.41;5.57;5.34;5.64;5.53;5.48;5.44;5.49;5.50;5.50;5.49;5.66;5.50;5.37;5.57;5.54;5.46;5.31;5.41;5.57;5.50;5.52;5.71;5.31;5.44
+ * fixed.html;10.404609053497941;10.47;10.66;10.45;10.73;10.79;10.64;10.64;10.82;10.43;10.92;10.47;10.47;10.64;10.74;10.67;10.40;10.83;10.77;10.54;10.38;10.70;10.44;10.38;10.56
+ * downscale.html;5.493209876543211;5.27;5.50;5.50;5.51;5.46;5.58;5.58;5.51;5.49;5.49;5.47;9.09;5.56;5.61;5.50;5.47;5.59;5.47;5.49;5.60;5.61;5.58;5.40;5.43
+ * downscale.html;10.676522633744854;10.82;10.79;10.41;10.75;10.91;10.52;10.61;10.50;10.55;10.80;10.17;10.68;10.41;10.42;10.41;10.58;10.28;10.56;10.66;10.68;10.47;10.60;10.61;10.26
+ * 4;iframe.svg;13.82;14.87;14.78;14.35;14.73;14.50;14.15;14.46;14.80;14.48;15.10;14.93;14.77;14.52;14.08;15.01;14.58;14.52;15.23;14.35;14.72;14.28;14.30;14.27;14.96
+ * 5;reader.htm;10.72;10.62;10.23;10.48;10.42;10.64;10.40;10.40;10.14;10.60;10.51;10.36;10.57;10.41;10.52;10.75;10.19;10.72;10.44;9.75;10.49;10.07;10.54;10.46;10.44
+ tsvg_static: >
+ - contact: :jwatt, :dholbert
+ - source: `svg_static <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/tests/svg_static/>`__
+ - type: `Page load`_
+ - data: we load the 5 svg pages 25 times, resulting in 5 sets of 25 data points
+ - summarization: An svg-only number that measures SVG rendering performance of some complex (but static) SVG content.
+ * subtest: `ignore first`_ **5** data points, then take the `median`_ of the remaining 20; `source:
+ test.py <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/test.py#l623>`__
+ * suite: `geometric mean`_ of the 5 subtest results.
+ - **Example Data**
+ * 0;gearflowers.svg;262;184;184;198;197;187;181;186;177;192;196;194;194;186;195;190;237;193;188;182;188;196;191;194;184
+ * 1;composite-scale.svg;69;52;48;49;57;51;52;87;52;49;49;51;58;53;64;57;49;65;67;58;53;59;56;68;50
+ * 2;composite-scale-opacity.svg;72;53;91;54;51;58;60;46;51;57;59;58;66;70;57;61;47;51;76;65;52;65;64;64;63
+ * 3;composite-scale-rotate.svg;70;76;89;62;62;78;57;77;79;82;74;56;61;79;73;64;75;74;81;82;76;58;77;61;62
+ * 4;composite-scale-rotate-opacity.svg;91;60;67;84;62;66;78;69;65;68;62;73;68;63;64;71;79;77;63;80;85;65;82;76;81
+ tsvgm: >
+ - An svg-only number that measures SVG rendering performance for dynamic content only.
+ - contact: :jwatt, :dholbert
+ - add test details
+ tsvgr_opacity: >
+ - contact: :jwatt, :dholbert
+ - source: `svg_opacity.manifest <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/tests/svg_opacity/svg_opacity.manifest>`__
+ - type: `Page load`_
+ - data: we load the 2 svg opacity pages 25 times, resulting in 2 sets of 25 data points
+ - summarization: `Row Major <#row-major-vs-column-major>`__ and 25 cycles/page.
+ * subtest: `ignore first`_ **5** data points, then take the `median`_ of the remaining 20; `source:
+ test.py <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/test.py#l623>`__
+ * suite: `geometric mean`_ of the 2 subtest results.
+ - description:
+ | Renders many semi-transparent, partially overlapping SVG rectangles, and
+ measures time to completion of this rendering.
+
+ Note that this test also tends to reflect changes in network efficiency
+ and navigation bar rendering issues.
+ - Most of the page load tests measure from before the location is
+ changed, until onload + mozafterpaint, therefore any changes in
+ chrome performance from the location change, or network performance
+ (the pages load from a local web server) would affect page load
+ times. SVG opacity is rather quick by itself, so any such
+ chrome/network/etc performance changes would affect this test more
+ than other page load tests (relatively, in percentages).
+ - **Example Data**
+ * 0;big-optimizable-group-opacity-2500.svg;170;171;205;249;249;244;192;252;192;431;182;250;189;249;151;168;209;194;247;250;193;250;255;247;247
+ * 1;small-group-opacity-2500.svg;585;436;387;441;512;438;440;380;443;391;450;386;459;383;445;388;450;436;485;443;383;438;528;444;441
+ tsvgx: >
+ - contact: :jwatt, :dholbert
+ - source: `svgx <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/tests/svgx>`__
+ - type: `Page load`_
+ - data: we load the 7 svg pages 25 times, resulting in 7 sets of 25 data points
+ - summarization: `Replacing tscroll,tsvg with tscrollx,tsvgx <https://groups.google.com/d/topic/mozilla.dev.platform/RICw5SJhNMo/discussion>`__
+ * subtest: `ignore first`_ **5** data points, then take the `median`_ of the remaining 20; `source:
+ test.py <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/test.py#l623>`__
+ * suite: `geometric mean`_ of the 7 subtest results.
+ - description:
+ | An svg-only number that measures SVG rendering performance, with
+ animations or iterations of rendering. This is an ASAP test --i.e. it
+ iterates in unlimited frame-rate mode thus reflecting the maximum
+ rendering throughput of each test. The reported value is the overall
+ duration the sequence/animation took to complete. To turn on ASAP mode,
+ we set these preferences:
+
+ ``preferences = {'layout.frame_rate': 0, 'docshell.event_starvation_delay_hint': 1}``
+ - **Example Data**
+ * 0;hixie-001.xml;562;555;508;521;522;520;499;510;492;514;502;504;500;521;510;506;511;505;495;517;520;512;503;504;502
+ * 1;hixie-002.xml;510;613;536;530;536;522;498;505;500;504;498;529;498;509;493;512;501;506;504;499;496;505;508;511;503
+ * 2;hixie-003.xml;339;248;242;261;250;241;240;248;258;244;235;240;247;248;239;247;241;245;242;245;251;239;241;240;237
+ * 3;hixie-004.xml;709;540;538;536;540;536;552;539;535;535;543;533;536;535;545;537;537;537;537;539;538;535;536;538;536
+ * 4;hixie-005.xml;3096;3086;3003;3809;3213;3323;3143;3313;3192;3203;3225;3048;3069;3101;3189;3251;3172;3122;3266;3183;3159;3076;3014;3237;3100
+ * 5;hixie-006.xml;5586;5668;5565;5666;5668;5728;5886;5534;5484;5607;5678;5577;5745;5753;5532;5585;5506;5516;5648;5778;5894;5994;5794;5852;5810
+ * 6;hixie-007.xml;1823;1743;1739;1743;1744;1787;1802;1788;1782;1766;1787;1750;1748;1788;1766;1779;1767;1794;1758;1768;1781;1773;1765;1798;1805
+ - **Possible regression causes**
+ * Did you change the dimensions of the content area? Even a little? The
+ tsvgx test seems to be sensitive to changes like this. See `bug
+ 1375479 <https://bugzilla.mozilla.org/show_bug.cgi?id=1375479>`__,
+ for example. Usually, these sorts of "regressions" aren't real
+ regressions - they just mean that we need to re-baseline our
+ expectations from the test.
+ twinopen: >
+ - contact: :gcp and platform integration
+ - source: `twinopen <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/tests/twinopen>`__
+ - type: Startup_
+ - data: we open a new browser window 20 times, resulting in 1 set of 20 data points.
+ - summarization: Time from calling OpenBrowserWindow until the chrome of the new window has `painted <https://developer.mozilla.org/en-US/docs/Web/Events#MozAfterPaint>`__.
+ * subtest: `ignore first`_ **5** data points, then take the `median`_ of the remaining 15; `source:
+ test.py <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/test.py#l190>`__
+ * suite: identical to subtest
+ - description:
+ | Tests the amount of time it takes the open a new window from a currently
+ open browser. This test does not include startup time. Multiple test
+ windows are opened in succession, results reported are the average
+ amount of time required to create and display a window in the running
+ instance of the browser. (Measures ctrl-n performance.)
+ - **Example Data**
+ * [209.219, 222.180, 225.299, 225.970, 228.090, 229.450, 230.625, 236.315, 239.804, 242.795, 244.5, 244.770, 250.524, 251.785, 253.074, 255.349, 264.729, 266.014, 269.399, 326.190]
+ v8_7: >
+ - description:
+ | This is the V8 (version 7) javascript benchmark taken verbatim and slightly modified
+ to fit into our pageloader extension and talos harness. The previous version of this
+ test is V8 version 5 which was run on selective branches and operating systems.
+ - contact: No longer being maintained by any team/individual
diff --git a/testing/talos/perfdocs/index.rst b/testing/talos/perfdocs/index.rst
new file mode 100644
index 0000000000..e5e4ebe2a5
--- /dev/null
+++ b/testing/talos/perfdocs/index.rst
@@ -0,0 +1,728 @@
+=====
+Talos
+=====
+
+Talos is a cross-platform Python performance testing framework that is specifically for
+Firefox on desktop. New performance tests should be added to the newer framework
+`mozperftest </testing/perfdocs/mozperftest.html>`_ unless there are limitations
+there (highly unlikely) that make it absolutely necessary to add them to Talos. Talos is
+named after the `bronze automaton from Greek myth <https://en.wikipedia.org/wiki/Talos>`_.
+
+.. contents::
+ :depth: 1
+ :local:
+
+Talos tests are run in a similar manner to xpcshell and mochitests. They are started via
+the command :code:`mach talos-test`. A `python script <https://searchfox.org/mozilla-central/source/testing/talos>`_
+then launches Firefox, which runs the tests via JavaScript special powers. The test timing
+information is recorded in a text log file, e.g. :code:`browser_output.txt`, and then processed
+into the `JSON format supported by Perfherder <https://searchfox.org/mozilla-central/source/testing/mozharness/external_tools/performance-artifact-schema.json>`_.
+
+Talos bugs can be filed in `Testing::Talos <https://bugzilla.mozilla.org/enter_bug.cgi?product=Testing&component=Talos>`_.
+
+Talos infrastructure is still mostly documented `on the Mozilla Wiki <https://wiki.mozilla.org/TestEngineering/Performance/Talos>`_.
+In addition, there are plans to surface all of the individual tests using PerfDocs.
+This work is tracked in `Bug 1674220 <https://bugzilla.mozilla.org/show_bug.cgi?id=1674220>`_.
+
+Examples of current Talos runs can be `found in Treeherder by searching for "Talos" <https://treeherder.mozilla.org/jobs?repo=autoland&searchStr=Talos>`_.
+If none are immediately available, then scroll to the bottom of the page and load more test
+runs. The tests all share a group symbol starting with a :code:`T`, for example
+:code:`T(c d damp g1)` or :code:`T-gli(webgl)`.
+
+Running Talos Locally
+*********************
+
+Running tests locally is most likely only useful for debugging what is going on in a test,
+as the test output is only reported as raw JSON. The CLI is documented via:
+
+.. code-block:: bash
+
+ ./mach talos-test --help
+
+To quickly try out the :code:`./mach talos-test` command, the following can be run to do a
+single run of the DevTools' simple netmonitor test.
+
+.. code-block:: bash
+
+ # Run the "simple.netmonitor" test very quickly with 1 cycle, and 1 page cycle.
+ ./mach talos-test --activeTests damp --subtests simple.netmonitor --cycles 1 --tppagecycles 1
+
+
+The :code:`--print-suites` and :code:`--print-tests` are two helpful command flags to
+figure out what suites and tests are available to run.
+
+.. code-block:: bash
+
+ # Print out the suites:
+ ./mach talos-test --print-suites
+
+ # Available suites:
+ # bcv (basic_compositor_video)
+ # chromez (about_preferences_basic:tresize)
+ # dromaeojs (dromaeo_css:kraken)
+ # ...
+
+ # Run all of the tests in the "bcv" test suite:
+ ./mach talos-test --suite bcv
+
+ # Print out the tests:
+ ./mach talos-test --print-tests
+
+ # Available tests:
+ # ================
+ #
+ # a11yr
+ # -----
+ # This test ensures basic a11y tables and permutations do not cause
+ # performance regressions.
+ #
+ # ...
+
+ # Run the tests in "a11yr" listed above
+ ./mach talos-test --activeTests a11yr
+
+Running Talos on Try
+********************
+
+Talos runs can be generated through the mach try fuzzy finder:
+
+.. code-block:: bash
+
+ ./mach try fuzzy
+
+The following is an example output at the time of this writing. Refine the query for the
+platform and test suites of your choosing.
+
+.. code-block::
+
+ | test-windows10-64-qr/opt-talos-bcv-swr-e10s
+ | test-linux64-shippable/opt-talos-webgl-e10s
+ | test-linux64-shippable/opt-talos-other-e10s
+ | test-linux64-shippable-qr/opt-talos-g5-e10s
+ | test-linux64-shippable-qr/opt-talos-g4-e10s
+ | test-linux64-shippable-qr/opt-talos-g3-e10s
+ | test-linux64-shippable-qr/opt-talos-g1-e10s
+ | test-windows10-64/opt-talos-webgl-gli-e10s
+ | test-linux64-shippable/opt-talos-tp5o-e10s
+ | test-linux64-shippable/opt-talos-svgr-e10s
+ | test-linux64-shippable/opt-talos-damp-e10s
+ > test-windows7-32/opt-talos-webgl-gli-e10s
+ | test-linux64-shippable/opt-talos-bcv-e10s
+ | test-linux64-shippable/opt-talos-g5-e10s
+ | test-linux64-shippable/opt-talos-g4-e10s
+ | test-linux64-shippable/opt-talos-g3-e10s
+ | test-linux64-shippable/opt-talos-g1-e10s
+ | test-linux64-qr/opt-talos-bcv-swr-e10s
+
+ For more shortcuts, see mach help try fuzzy and man fzf
+ select: <tab>, accept: <enter>, cancel: <ctrl-c>, select-all: <ctrl-a>, cursor-up: <up>, cursor-down: <down>
+ 1379/2967
+ > talos
+
+At a glance
+***********
+
+- Tests are defined in
+ `testing/talos/talos/test.py <https://searchfox.org/mozilla-central/source/testing/talos/talos/test.py>`__
+- Treeherder abbreviations are defined in
+ `taskcluster/ci/test/talos.yml <https://searchfox.org/mozilla-central/source/taskcluster/ci/test/talos.yml>`__
+- Suites are defined for production in
+ `testing/talos/talos.json <https://searchfox.org/mozilla-central/source/testing/talos/talos.json>`__
+
+Test lifecycle
+**************
+
+- Taskcluster schedules `talos
+ jobs <https://searchfox.org/mozilla-central/source/taskcluster/ci/test/talos.yml>`__
+- Taskcluster runs a Talos job on a hardware machine when one is
+ available - this is bootstrapped by
+ `mozharness <https://searchfox.org/mozilla-central/source/testing/mozharness/mozharness/mozilla/testing/talos.py>`__
+
+ - mozharness downloads the build, talos.zip (found in
+ `talos.json <https://searchfox.org/mozilla-central/source/testing/talos/talos.json>`__),
+ and creates a virtualenv for running the test.
+ - mozharness `configures the test and runs
+ it <https://wiki.mozilla.org/TestEngineering/Performance/Talos/Running#How_Talos_is_Run_in_Production>`__
+ - After the test is completed the data is uploaded to
+ `Perfherder <https://treeherder.mozilla.org/perf.html#/graphs>`__
+
+- Treeherder displays a green (all OK) status and has a link to
+ `Perfherder <https://treeherder.mozilla.org/perf.html#/graphs>`__
+- 13 pushes later,
+ `analyze_talos.py <http://hg.mozilla.org/graphs/file/tip/server/analysis/analyze_talos.py>`__
+ is ran which compares your push to the previous 12 pushes and next 12
+ pushes to look for a
+ `regression <https://wiki.mozilla.org/TestEngineering/Performance/Talos/Data#Regressions>`__
+
+ - If a regression is found, it will be posted on `Perfherder
+ Alerts <https://treeherder.mozilla.org/perf.html#/alerts>`__
+
+Test types
+**********
+
+There are two different species of Talos tests:
+
+- Startup_: Start up the browser and wait for either the load event or the paint event and exit, measuring the time
+- `Page load`_: Load a manifest of pages
+
+In addition we have some variations on existing tests:
+
+- Heavy_: Run tests with the heavy user profile instead of a blank one
+- WebExtension_: Run tests with a WebExtension to see the perf impact extension have
+- `Real-world WebExtensions`_: Run tests with a set of 5 popular real-world WebExtensions installed and enabled.
+
+Some tests measure different things:
+
+- Paint_: These measure events from the browser like moz_after_paint, etc.
+- ASAP_: These tests go really fast and typically measure how many frames we can render in a time window
+- Benchmarks_: These are benchmarks that measure specific items and report a summarized score
+
+Startup
+=======
+
+`Startup
+tests <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/startup_test>`__
+launch Firefox and measure the time to the onload or paint events. We
+run this in a series of cycles (default to 20) to generate a full set of
+data. Tests that currently are startup tests are:
+
+- `ts_paint <#ts_paint>`_
+- tpaint_
+- `tresize <#tresize>`_
+- `sessionrestore <#sessionrestore>`_
+- `sessionrestore_no_auto_restore <#sessionrestore_no_auto_restore>`_
+- `sessionrestore_many_windows <#sessionrestore_many_windows>`_
+
+Page load
+=========
+
+Many of the talos tests use the page loader to load a manifest of pages.
+These are tests that load a specific page and measure the time it takes
+to load the page, scroll the page, draw the page etc. In order to run a
+page load test, you need a manifest of pages to run. The manifest is
+simply a list of URLs of pages to load, separated by carriage returns,
+e.g.:
+
+.. code-block:: none
+
+ https://www.mozilla.org
+ https://www.mozilla.com
+
+Example:
+`svgx.manifest <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/tests/svgx/svgx.manifest>`__
+
+Manifests may also specify that a test computes its own data by
+prepending a ``%`` in front of the line:
+
+.. code-block:: none
+
+ % https://www.mozilla.org
+ % https://www.mozilla.com
+
+Example:
+`v8.manifest <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/tests/v8_7/v8.manifest>`__
+
+The file you created should be referenced in your test config inside of
+`test.py <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/test.py#l607>`__.
+For example, open test.py, and look for the line referring to the test
+you want to run:
+
+.. code-block:: python
+
+ tpmanifest = '${talos}/page_load_test/svgx/svgx.manifest'
+ tpcycles = 1 # run a single cycle
+ tppagecycles = 25 # load each page 25 times before moving onto the next page
+
+Heavy
+=====
+
+All our testing is done with empty blank profiles, this is not ideal for
+finding issues for end users. We recently undertook a task to create a
+daily update to a profile so it is modern and relevant. It browses a
+variety of web pages, and have history and cache to give us a more
+realistic scenario.
+
+The toolchain is documented on
+`github <https://github.com/tarekziade/heavy-profile>`__ and was added
+to Talos in `bug
+1407398 <https://bugzilla.mozilla.org/show_bug.cgi?id=1407398>`__.
+
+Currently we have issues with this on windows (takes too long to unpack
+the files from the profile), so we have turned this off there. Our goal
+is to run this on basic pageload and startup tests.
+
+WebExtension
+=============
+
+WebExtensions are what Firefox has switched to and there are different
+code paths and APIs used vs addons. Historically we don't test with
+addons (other than our test addons) and are missing out on common
+slowdowns. In 2017 we started running some startup and basic pageload
+tests with a WebExtension in the profile (`bug
+1398974 <https://bugzilla.mozilla.org/show_bug.cgi?id=1398974>`__). We
+have updated the Extension to be more real world and will continue to do
+that.
+
+Real-world WebExtensions
+========================
+
+We've added a variation on our test suite that automatically downloads,
+installs and enables 5 popular WebExtensions. This is used to measure
+things like the impact of real-world WebExtensions on start-up time.
+
+Currently, the following extensions are installed:
+
+- Adblock Plus (3.5.2)
+- Cisco Webex Extension (1.4.0)
+- Easy Screenshot (3.67)
+- NoScript (10.6.3)
+- Video DownloadHelper (7.3.6)
+
+Note that these add-ons and versions are "pinned" by being held in a
+compressed file that's hosted in an archive by our test infrastructure
+and downloaded at test runtime. To update the add-ons in this set, one
+must provide a new ZIP file to someone on the test automation team. See
+`this comment in
+Bugzilla <https://bugzilla.mozilla.org/show_bug.cgi?id=1575089#c3>`__.
+
+Paint
+=====
+
+Paint tests are measuring the time to receive both the
+`MozAfterPaint <https://developer.mozilla.org/en-US/docs/Web/Events/MozAfterPaint>`__
+and OnLoad event instead of just the OnLoad event. Most tests now look
+for this unless they are an ASAP test, or an internal benchmark
+
+ASAP
+====
+
+We have a variety of tests which we now run in ASAP mode where we render
+as fast as possible (disabling vsync and letting the rendering iterate
+as fast as it can using \`requestAnimationFrame`). In fact we have
+replaced some original tests with the 'x' versions to make them measure.
+We do this with RequestAnimationFrame().
+
+ASAP tests are:
+
+- `basic_compositor_video <#basic_compositor_video>`_
+- `displaylist_mutate <#displaylist_mutate>`_
+- `glterrain <#glterrain>`_
+- `rasterflood_svg <#rasterflood_svg>`_
+- `rasterflood_gradient <#rasterflood_gradient>`_
+- `tsvgx <#tsvgx>`_
+- `tscrollx <#tscrollx>`_
+- `tp5o_scroll <#tp5o_scroll>`_
+- `tabswitch <#tabswitch>`_
+- `tart <#tart>`_
+
+Benchmarks
+==========
+
+Many tests have internal benchmarks which we report as accurately as
+possible. These are the exceptions to the general rule of calculating
+the suite score as a geometric mean of the subtest values (which are
+median values of the raw data from the subtests).
+
+Tests which are imported benchmarks are:
+
+- `ARES6 <#ares6>`_
+- `dromaeo <#dromaeo>`_
+- `JetStream <#jetstream>`_
+- `kraken <#kraken>`_
+- `motionmark <#motionmark>`_
+- `stylebench <#stylebench>`_
+
+Row major vs. column major
+==========================
+
+To get more stable numbers, tests are run multiple times. There are two
+ways that we do this: row major and column major. Row major means each
+test is run multiple times and then we move to the next test (and run it
+multiple times). Column major means that each test is run once one after
+the other and then the whole sequence of tests is run again.
+
+More background information about these approaches can be found in Joel
+Maher's `Reducing the Noise in
+Talos <https://elvis314.wordpress.com/2012/03/12/reducing-the-noise-in-talos/>`__
+blog post.
+
+Page sets
+*********
+
+We run our tests 100% offline, but serve pages via a webserver. Knowing
+this we need to store and make available the offline pages we use for
+testing.
+
+tp5pages
+========
+
+Some tests make use of a set of 50 "real world" pages, known as the tp5n
+set. These pages are not part of the talos repository, but without them
+the tests which use them won't run.
+
+- To add these pages to your local setup, download the latest tp5n zip
+ from `tooltool <https://mozilla-releng.net/tooltool/>`__, and extract
+ it such that ``tp5n`` ends up as ``testing/talos/talos/tests/tp5n``.
+ You can also obtain it by running a talos test locally to get the zip
+ into ``testing/talos/talos/tests/``, i.e ``./mach talos-test --suite damp``
+- see also `tp5o <#tp5o>`_.
+
+{documentation}
+
+Extra Talos Tests
+*****************
+
+.. contents::
+ :depth: 1
+ :local:
+
+File IO
+-------
+
+File IO is tested using the tp5 test set in the `xperf`_
+test.
+
+Possible regression causes
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+- **nonmain_startup_fileio opt (with or without e10s) windows7-32** –
+ `bug
+ 1274018 <https://bugzilla.mozilla.org/show_bug.cgi?id=1274018>`__
+ This test seems to consistently report a higher result for
+ mozilla-central compared to Try even for an identical revision due to
+ extension signing checks. In other words, if you are comparing Try
+ and Mozilla-Central you may see a false-positive regression on
+ perfherder. Graphs:
+ `non-e10s <https://treeherder.mozilla.org/perf.html#/graphs?timerange=604800&series=%5Bmozilla-central,e5f5eaa174ef22fdd6b6e150e8c450aa827c2ff6,1,1%5D&series=%5Btry,e5f5eaa174ef22fdd6b6e150e8c450aa827c2ff6,1,1%5D>`__
+ `e10s <https://treeherder.mozilla.org/perf.html#/graphs?series=%5B%22mozilla-central%22,%222f3af3833d55ff371ecf01c41aeee1939ef3a782%22,1,1%5D&series=%5B%22try%22,%222f3af3833d55ff371ecf01c41aeee1939ef3a782%22,1,1%5D&timerange=604800>`__
+
+Xres (X Resource Monitoring)
+----------------------------
+
+A memory metric tracked during tp5 test runs. This metric is sampled
+every 20 seconds. This metric is collected on linux only.
+
+`xres man page <https://linux.die.net/man/3/xres>`__.
+
+% CPU
+-----
+
+Cpu usage tracked during tp5 test runs. This metric is sampled every 20
+seconds. This metric is collected on windows only.
+
+Responsiveness
+--------------
+
+contact: :jimm, :overholt
+
+Measures the delay for the event loop to process a `tracer
+event <https://wiki.mozilla.org/Performance/Snappy#Current_Infrastructure>`__.
+For more details, see `bug
+631571 <https://bugzilla.mozilla.org/show_bug.cgi?id=631571>`__.
+
+The score on this benchmark is proportional to the sum of squares of all
+event delays that exceed a 20ms threshold. Lower is better.
+
+We collect 8000+ data points from the browser during the test and apply
+`this
+formula <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/output.py#l95>`__
+to the results:
+
+.. code-block:: python
+
+ return sum([float(x)*float(x) / 1000000.0 for x in val_list])
+
+tpaint
+======
+
+.. warning::
+
+ This test no longer exists
+
+- contact: :davidb
+- source:
+ `tpaint-window.html <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/startup_test/tpaint.html>`__
+- type: Startup_
+- data: we load the tpaint test window 20 times, resulting in 1 set of
+ 20 data points.
+- summarization:
+
+ - subtest: `ignore first`_ **5** data points, then take the `median`_ of the remaining 15; `source:
+ test.py <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/test.py#l190>`__
+ - suite: identical to subtest
+
++-----------------+---------------------------------------------------+
+| Talos test name | Description |
++-----------------+---------------------------------------------------+
+| tpaint | twinopen but measuring the time after we receive |
+| | the `MozAfterPaint and OnLoad event <#paint>`__. |
++-----------------+---------------------------------------------------+
+
+Tests the amount of time it takes the open a new window. This test does
+not include startup time. Multiple test windows are opened in
+succession, results reported are the average amount of time required to
+create and display a window in the running instance of the browser.
+(Measures ctrl-n performance.)
+
+**Example Data**
+
+.. code-block:: none
+
+ [209.219, 222.180, 225.299, 225.970, 228.090, 229.450, 230.625, 236.315, 239.804, 242.795, 244.5, 244.770, 250.524, 251.785, 253.074, 255.349, 264.729, 266.014, 269.399, 326.190]
+
+Possible regression causes
+--------------------------
+
+- None listed yet. If you fix a regression for this test and have some
+ tips to share, this is a good place for them.
+
+xperf
+=====
+
+- contact: fx-perf@mozilla.com
+- source: `xperf
+ instrumentation <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/xtalos>`__
+- type: `Page load`_ (tp5n) / Startup_
+- measuring: IO counters from windows (currently, only startup IO is in
+ scope)
+- reporting: Summary of read/write counters for disk, network (lower is
+ better)
+
+These tests only run on windows builds. See `this active-data
+query <https://activedata.allizom.org/tools/query.html#query_id=zqlX+2Jn>`__
+for an updated set of platforms that xperf can be found on. If the query
+is not found, use the following on the query page:
+
+.. code-block:: javascript
+
+ {
+ "from":"task",
+ "groupby":["run.name","build.platform"],
+ "limit":2000,
+ "where":{"regex":{"run.name":".*xperf.*"}}
+ }
+
+Talos will turn orange for 'x' jobs on windows 7 if your changeset
+accesses files which are not predefined in the
+`allowlist <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/xtalos/xperf_allowlist.json>`__
+during startup; specifically, before the
+"`sessionstore-windows-restored <https://hg.mozilla.org/mozilla-central/file/0eebc33d8593/toolkit/components/startup/nsAppStartup.cpp#l631>`__"
+Firefox event. If your job turns orange, you will see a list of files in
+Treeherder (or in the log file) which have been accessed unexpectedly
+(similar to this):
+
+.. code-block:: none
+
+ TEST-UNEXPECTED-FAIL : xperf: File '{profile}\secmod.db' was accessed and we were not expecting it. DiskReadCount: 6, DiskWriteCount: 0, DiskReadBytes: 16904, DiskWriteBytes: 0
+ TEST-UNEXPECTED-FAIL : xperf: File '{profile}\cert8.db' was accessed and we were not expecting it. DiskReadCount: 4, DiskWriteCount: 0, DiskReadBytes: 33288, DiskWriteBytes: 0
+ TEST-UNEXPECTED-FAIL : xperf: File 'c:\$logfile' was accessed and we were not expecting it. DiskReadCount: 0, DiskWriteCount: 2, DiskReadBytes: 0, DiskWriteBytes: 32768
+ TEST-UNEXPECTED-FAIL : xperf: File '{profile}\secmod.db' was accessed and we were not expecting it. DiskReadCount: 6, DiskWriteCount: 0, DiskReadBytes: 16904, DiskWriteBytes: 0
+ TEST-UNEXPECTED-FAIL : xperf: File '{profile}\cert8.db' was accessed and we were not expecting it. DiskReadCount: 4, DiskWriteCount: 0, DiskReadBytes: 33288, DiskWriteBytes: 0
+ TEST-UNEXPECTED-FAIL : xperf: File 'c:\$logfile' was accessed and we were not expecting it. DiskReadCount: 0, DiskWriteCount: 2, DiskReadBytes: 0, DiskWriteBytes: 32768
+
+In the case that these files are expected to be accessed during startup
+by your changeset, then we can add them to the
+`allowlist <https://bugzilla.mozilla.org/enter_bug.cgi?product=Testing&component=Talos>`__.
+
+Xperf runs tp5 while collecting xperf metrics for disk IO and network
+IO. The providers we listen for are:
+
+- `'PROC_THREAD', 'LOADER', 'HARD_FAULTS', 'FILENAME', 'FILE_IO',
+ 'FILE_IO_INIT' <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/xperf.config#l10>`__
+
+The values we collect during stackwalk are:
+
+- `'FileRead', 'FileWrite',
+ 'FileFlush' <https://dxr.mozilla.org/mozilla-central/source/testing/talos/talos/xperf.config#l11>`__
+
+Notes:
+
+- Currently some runs may `return all-zeros and skew the
+ results <https://bugzilla.mozilla.org/show_bug.cgi?id=1614805>`__
+- Additionally, these runs don't have dedicated hardware and have a
+ large variability. At least 30 runs are likely to be needed to get
+ stable statistics (xref `bug
+ 1616236 <https://bugzilla.mozilla.org/show_bug.cgi?id=1616236>`__)
+
+Build metrics
+*************
+
+These are not part of the Talos code, but like Talos they are benchmarks
+that record data using the graphserver and are analyzed by the same
+scripts for regressions.
+
+Number of constructors (num_ctors)
+==================================
+
+This test runs at build time and measures the number of static
+initializers in the compiled code. Reducing this number is helpful for
+`startup
+optimizations <https://blog.mozilla.org/tglek/2010/05/27/startup-backward-constructors/>`__.
+
+- https://hg.mozilla.org/build/tools/file/348853aee492/buildfarm/utils/count_ctors.py
+
+ - these are run for linux 32+64 opt and pgo builds.
+
+Platform microbenchmark
+***********************
+
+IsASCII and IsUTF8 gtest microbenchmarks
+========================================
+
+- contact: :hsivonen
+- source:
+ `TestStrings.cpp <https://dxr.mozilla.org/mozilla-central/source/xpcom/tests/gtest/TestStrings.cpp>`__
+- type: Microbench_
+- reporting: intervals in ms (lower is better)
+- data: each test is run and measured 5 times
+- summarization: take the `median`_ of the 5 data points; `source:
+ MozGTestBench.cpp <https://dxr.mozilla.org/mozilla-central/source/testing/gtest/mozilla/MozGTestBench.cpp#43-46>`__
+
+Test whose name starts with PerfIsASCII test the performance of the
+XPCOM string IsASCII function with ASCII inputs if different lengths.
+
+Test whose name starts with PerfIsUTF8 test the performance of the XPCOM
+string IsUTF8 function with ASCII inputs if different lengths.
+
+Possible regression causes
+--------------------------
+
+- The --enable-rust-simd accidentally getting turned off in automation.
+- Changes to encoding_rs internals.
+- LLVM optimizations regressing between updates to the copy of LLVM
+ included in the Rust compiler.
+
+Microbench
+==========
+
+- contact: :bholley
+- source:
+ `MozGTestBench.cpp <https://dxr.mozilla.org/mozilla-central/source/testing/gtest/mozilla/MozGTestBench.cpp>`__
+- type: Custom GTest micro-benchmarking
+- data: Time taken for a GTest function to execute
+- summarization: Not a Talos test. This suite is provides a way to add
+ low level platform performance regression tests for things that are
+ not suited to be tested by Talos.
+
+PerfStrip Tests
+===============
+
+- contact: :davidb
+- source:
+ https://dxr.mozilla.org/mozilla-central/source/xpcom/tests/gtest/TestStrings.cpp
+- type: Microbench_
+- reporting: execution time in ms (lower is better) for 100k function
+ calls
+- data: each test run and measured 5 times
+- summarization:
+
+PerfStripWhitespace - call StripWhitespace() on 5 different test cases
+20k times (each)
+
+PerfStripCharsWhitespace - call StripChars("\f\t\r\n") on 5 different
+test cases 20k times (each)
+
+PerfStripCRLF - call StripCRLF() on 5 different test cases 20k times
+(each)
+
+PerfStripCharsCRLF() - call StripChars("\r\n") on 5 different test cases
+20k times (each)
+
+Stylo gtest microbenchmarks
+===========================
+
+- contact: :bholley, :SimonSapin
+- source:
+ `gtest <https://dxr.mozilla.org/mozilla-central/source/layout/style/test/gtest>`__
+- type: Microbench_
+- reporting: intervals in ms (lower is better)
+- data: each test is run and measured 5 times
+- summarization: take the `median`_ of the 5 data points; `source:
+ MozGTestBench.cpp <https://dxr.mozilla.org/mozilla-central/source/testing/gtest/mozilla/MozGTestBench.cpp#43-46>`__
+
+Servo_StyleSheet_FromUTF8Bytes_Bench parses a sample stylesheet 20 times
+with Stylo’s CSS parser that is written in Rust. It starts from an
+in-memory UTF-8 string, so that I/O or UTF-16-to-UTF-8 conversion is not
+measured.
+
+Gecko_nsCSSParser_ParseSheet_Bench does the same with Gecko’s previous
+CSS parser that is written in C++, for comparison.
+
+Servo_DeclarationBlock_SetPropertyById_Bench parses the string "10px"
+with Stylo’s CSS parser and sets it as the value of a property in a
+declaration block, a million times. This is similar to animations that
+are based on JavaScript code modifying Element.style instead of using
+CSS @keyframes.
+
+Servo_DeclarationBlock_SetPropertyById_WithInitialSpace_Bench is the
+same, but with the string " 10px" with an initial space. That initial
+space is less typical of JS animations, but is almost always there in
+stylesheets or full declarations like "width: 10px". This microbenchmark
+was used to test the effect of some specific code changes. Regressions
+here may be acceptable if Servo_StyleSheet_FromUTF8Bytes_Bench is not
+affected.
+
+History of tp tests
+*******************
+
+tp
+==
+
+The original tp test created by Mozilla to test browser page load time.
+Cycled through 40 pages. The pages were copied from the live web during
+November, 2000. Pages were cycled by loading them within the main
+browser window from a script that lived in content.
+
+tp2/tp_js
+=========
+
+The same tp test but loading the individual pages into a frame instead
+of the main browser window. Still used the old 40 page, year 2000 web
+page test set.
+
+tp3
+===
+
+An update to both the page set and the method by which pages are cycled.
+The page set is now 393 pages from December, 2006. The pageloader is
+re-built as an extension that is pre-loaded into the browser
+chrome/components directories.
+
+tp4
+===
+
+Updated web page test set to 100 pages from February 2009.
+
+tp4m
+====
+
+This is a smaller pageset (21 pages) designed for mobile Firefox. This
+is a blend of regular and mobile friendly pages.
+
+We landed on this on April 18th, 2011 in `bug
+648307 <https://bugzilla.mozilla.org/show_bug.cgi?id=648307>`__. This
+runs for Android and Maemo mobile builds only.
+
+tp5
+===
+
+Updated web page test set to 100 pages from April 8th, 2011. Effort was
+made for the pages to no longer be splash screens/login pages/home pages
+but to be pages that better reflect the actual content of the site in
+question. There are two test page data sets for tp5 which are used in
+multiple tests (i.e. awsy, xperf, etc.): (i) an optimized data set
+called tp5o, and (ii) the standard data set called tp5n.
+
+tp6
+===
+
+Created June 2017 with recorded pages via mitmproxy using modern google,
+amazon, youtube, and facebook. Ideally this will contain more realistic
+user accounts that have full content, in addition we would have more
+than 4 sites- up to top 10 or maybe top 20.
+
+These were migrated to Raptor between 2018 and 2019.
+
+.. _geometric mean: https://wiki.mozilla.org/TestEngineering/Performance/Talos/Data#geometric_mean
+.. _ignore first: https://wiki.mozilla.org/TestEngineering/Performance/Talos/Data#ignore_first
+.. _median: https://wiki.mozilla.org/TestEngineering/Performance/Talos/Data#median
diff --git a/testing/talos/requirements.txt b/testing/talos/requirements.txt
new file mode 100644
index 0000000000..dc327506ab
--- /dev/null
+++ b/testing/talos/requirements.txt
@@ -0,0 +1,16 @@
+jsonschema>=2.5.1
+mozlog>=6.0
+mozcrash>=2.0
+mozfile>=1.2
+mozinfo>=0.8
+mozprocess>=0.22
+mozversion>=1.3
+mozprofile>=0.25
+mozrunner>=7.1.0
+psutil>=3.1.1
+simplejson>=2.1.1
+requests>=2.9.1
+../tools/wptserve
+../tools/wpt_third_party/h2
+../tools/wpt_third_party/pywebsocket3
+manifestparser>=2.1.0
diff --git a/testing/talos/setup.py b/testing/talos/setup.py
new file mode 100644
index 0000000000..628610f077
--- /dev/null
+++ b/testing/talos/setup.py
@@ -0,0 +1,68 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+import os
+
+from setuptools import find_packages, setup
+
+try:
+ here = os.path.dirname(os.path.abspath(__file__))
+ description = open(os.path.join(here, "README")).read()
+except OSError:
+ description = ""
+
+version = "0.0"
+
+with open(os.path.join(here, "requirements.txt")) as f:
+ dependencies = f.read().splitlines()
+
+dependency_links = []
+
+setup(
+ name="talos",
+ version=version,
+ description="Performance testing framework for Windows, Mac and Linux.",
+ long_description=description,
+ classifiers=[
+ "Programming Language :: Python :: 2.7",
+ "Programming Language :: Python :: 2 :: Only",
+ ],
+ # Get strings from http://www.python.org/pypi?%3Aaction=list_classifiers
+ author="Mozilla Foundation",
+ author_email="tools@lists.mozilla.org",
+ url="https://wiki.mozilla.org/Buildbot/Talos",
+ license="MPL",
+ packages=find_packages(exclude=["ez_setup", "examples", "tests"]),
+ include_package_data=True,
+ package_data={
+ "": [
+ "*.config",
+ "*.css",
+ "*.gif",
+ "*.htm",
+ "*.html",
+ "*.ico",
+ "*.js",
+ "*.json",
+ "*.manifest",
+ "*.php",
+ "*.png",
+ "*.rdf",
+ "*.sqlite",
+ "*.svg",
+ "*.xml",
+ "*.xul",
+ ]
+ },
+ zip_safe=False,
+ install_requires=dependencies,
+ dependency_links=dependency_links,
+ entry_points="""
+ # -*- Entry points: -*-
+ [console_scripts]
+ talos = talos.run_tests:main
+ talos-results = talos.results:main
+ """,
+ test_suite="tests",
+)
diff --git a/testing/talos/source_requirements.txt b/testing/talos/source_requirements.txt
new file mode 100644
index 0000000000..89c5e9fe8e
--- /dev/null
+++ b/testing/talos/source_requirements.txt
@@ -0,0 +1,18 @@
+# These dependencies are required for running talos tests from a source checkout
+
+jsonschema>=2.5.1
+mozlog>=6.0
+mozcrash>=2.0
+mozfile>=1.2
+mozinfo>=0.8
+mozprocess>=0.22
+mozversion>=1.3
+mozprofile>=0.25
+mozrunner>=7.1.0
+psutil>=3.1.1
+simplejson>=2.1.1
+requests>=2.9.1
+../web-platform/tests/tools/wptserve
+../web-platform/tests/tools/third_party/h2
+../web-platform/tests/tools/third_party/pywebsocket3
+manifestparser>=2.1.0
diff --git a/testing/talos/talos.json b/testing/talos/talos.json
new file mode 100644
index 0000000000..32904f87a3
--- /dev/null
+++ b/testing/talos/talos.json
@@ -0,0 +1,126 @@
+{
+ "suites": {
+ "bcv": {
+ "tests": ["basic_compositor_video"]
+ },
+ "chromez": {
+ "tests": ["about_preferences_basic", "tresize"]
+ },
+ "dromaeojs": {
+ "tests": ["dromaeo_css", "kraken"]
+ },
+ "other": {
+ "tests": [
+ "a11yr",
+ "ts_paint",
+ "twinopen",
+ "sessionrestore",
+ "sessionrestore_no_auto_restore",
+ "tabpaint",
+ "cpstartup",
+ "startup_about_home_paint",
+ "pdfpaint",
+ "cross_origin_pageload",
+ "startup_about_home_paint_cached"
+ ]
+ },
+ "sessionrestore-many-windows": {
+ "tests": ["sessionrestore_many_windows"]
+ },
+ "g1": {
+ "tests": ["tp5o_scroll"],
+ "pagesets_name": "tp5n.zip"
+ },
+ "damp": {
+ "tests": ["damp"],
+ "pagesets_name": "tp5n.zip",
+ "extra_prefs": ["talos.damp.suite=all"]
+ },
+ "damp-inspector": {
+ "tests": ["damp"],
+ "pagesets_name": "tp5n.zip",
+ "extra_prefs": ["talos.damp.suite=inspector"]
+ },
+ "damp-webconsole": {
+ "tests": ["damp"],
+ "pagesets_name": "tp5n.zip",
+ "extra_prefs": ["talos.damp.suite=webconsole"]
+ },
+ "damp-other": {
+ "tests": ["damp"],
+ "pagesets_name": "tp5n.zip",
+ "extra_prefs": ["talos.damp.suite=other"]
+ },
+ "tabswitch": {
+ "tests": ["tabswitch"],
+ "pagesets_name": "tp5n.zip"
+ },
+ "g3": {
+ "tests": ["dromaeo_dom"]
+ },
+ "g4": {
+ "tests": ["displaylist_mutate", "rasterflood_svg", "rasterflood_gradient"]
+ },
+ "g5": {
+ "tests": ["ts_paint_webext", "tp5o_webext"],
+ "pagesets_name": "tp5n.zip"
+ },
+ "motionmark": {
+ "tests": [
+ "motionmark_animometer",
+ "motionmark_htmlsuite",
+ "JetStream",
+ "ARES6"
+ ],
+ "benchmark_zip": "jetstream.zip"
+ },
+ "svgr": {
+ "tests": ["tsvgx", "tsvgr_opacity", "tscrollx", "tsvg_static", "tart"]
+ },
+ "perf-reftest": {
+ "tests": ["perf_reftest"]
+ },
+ "perf-reftest-singletons": {
+ "tests": ["perf_reftest_singletons"]
+ },
+ "tp5o": {
+ "tests": ["tp5o"],
+ "pagesets_name": "tp5n.zip"
+ },
+ "webgl": {
+ "tests": [
+ "canvas2dvideo",
+ "glterrain",
+ "glvideo",
+ "motionmark_webgl",
+ "offscreencanvas_webcodecs_main_webgl_h264",
+ "offscreencanvas_webcodecs_main_webgl_vp9",
+ "offscreencanvas_webcodecs_main_webgl_av1",
+ "offscreencanvas_webcodecs_worker_webgl_h264",
+ "offscreencanvas_webcodecs_worker_webgl_vp9",
+ "offscreencanvas_webcodecs_worker_webgl_av1",
+ "offscreencanvas_webcodecs_main_2d_h264",
+ "offscreencanvas_webcodecs_main_2d_vp9",
+ "offscreencanvas_webcodecs_main_2d_av1",
+ "offscreencanvas_webcodecs_worker_2d_h264",
+ "offscreencanvas_webcodecs_worker_2d_vp9",
+ "offscreencanvas_webcodecs_worker_2d_av1"
+ ]
+ },
+ "xperf": {
+ "tests": ["tp5n"],
+ "pagesets_name": "tp5n.zip",
+ "talos_options": [
+ "--xperf_path",
+ "\"c:/Program Files (x86)/Windows Kits/10/Windows Performance Toolkit/xperf.exe\""
+ ]
+ },
+ "h1": {
+ "tests": ["ts_paint_heavy"]
+ },
+ "realworld-webextensions": {
+ "tests": ["startup_about_home_paint_realworld_webextensions"],
+ "webextensions_zip": "webextensions.zip"
+ }
+ }
+}
diff --git a/testing/talos/talos/__init__.py b/testing/talos/talos/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/testing/talos/talos/__init__.py
diff --git a/testing/talos/talos/allowlist.py b/testing/talos/talos/allowlist.py
new file mode 100644
index 0000000000..195d85b6e1
--- /dev/null
+++ b/testing/talos/talos/allowlist.py
@@ -0,0 +1,184 @@
+# -*- Mode: python; tab-width: 8; indent-tabs-mode: nil -*-
+# vim: set ts=8 sts=4 et sw=4 tw=80:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import json
+import os
+import re
+
+KEY_XRE = "{xre}"
+DEFAULT_DURATION = 100.0
+
+
+class Allowlist:
+ # we need to find the root dir of the profile at runtime
+ PRE_PROFILE = ""
+
+ def __init__(
+ self,
+ test_name,
+ paths,
+ path_substitutions,
+ name_substitutions,
+ event_sources=None,
+ init_with=None,
+ ):
+ self.test_name = test_name
+ self.listmap = init_with if init_with else {}
+ self.dependent_libs = (
+ self.load_dependent_libs() if init_with and KEY_XRE in paths else {}
+ )
+ self.paths = paths
+ self.path_substitutions = path_substitutions
+ self.name_substitutions = name_substitutions
+ self.expected_event_sources = event_sources or []
+
+ def load(self, filename):
+ if not self.load_dependent_libs():
+ return False
+
+ try:
+ with open(filename, "r") as fHandle:
+ temp = json.load(fHandle)
+
+ for allowlist_name in temp:
+ self.listmap[allowlist_name.lower()] = temp[allowlist_name]
+
+ except IOError as e:
+ print("%s: %s" % (e.filename, e.strerror))
+ return False
+ return True
+
+ def sanitize_filename(self, filename):
+ filename = filename.lower()
+ filename.replace(" (x86)", "")
+
+ for path, subst in self.path_substitutions.items():
+ parts = filename.split(path)
+ if len(parts) >= 2:
+ if self.PRE_PROFILE == "" and subst == "{profile}":
+ fname = self.sanitize_filename(parts[0])
+ self.listmap[fname] = {}
+ # Windows can have {appdata}\local\temp\longnamedfolder
+ # or {appdata}\local\temp\longna~1
+ self.listmap[fname] = {}
+ if not fname.endswith("~1"):
+ # parse the longname into longna~1
+ dirs = fname.split("\\")
+ dirs[-1] = "%s~1" % (dirs[-1][:6])
+ # now we want to ensure that every parent dir is
+ # added since we seem to be accessing them sometimes
+ diter = 2
+ while diter < len(dirs):
+ self.listmap["\\".join(dirs[:diter])] = {}
+ diter = diter + 1
+ self.PRE_PROFILE = fname
+
+ filename = "%s%s" % (subst, path.join(parts[1:]))
+
+ for old_name, new_name in self.name_substitutions.items():
+ if isinstance(old_name, re.Pattern):
+ filename = re.sub(old_name, new_name, filename)
+ else:
+ parts = filename.split(old_name)
+ if len(parts) >= 2:
+ filename = "%s%s" % (parts[0], new_name)
+
+ return filename.strip("/\\\ \t")
+
+ def check(self, test, file_name_index, event_source_index=None):
+ errors = {}
+ for row_key in test.keys():
+ filename = self.sanitize_filename(row_key[file_name_index])
+
+ if filename in self.listmap:
+ if (
+ "ignore" in self.listmap[filename]
+ and self.listmap[filename]["ignore"]
+ ):
+ continue
+ elif filename in self.dependent_libs:
+ continue
+ elif (
+ event_source_index is not None
+ and row_key[event_source_index] in self.expected_event_sources
+ ):
+ continue
+ else:
+ if filename not in errors:
+ errors[filename] = []
+ errors[filename].append(test[row_key])
+ return errors
+
+ def checkDuration(self, test, file_name_index, file_duration_index):
+ errors = {}
+ for idx, (row_key, row_value) in enumerate(test.items()):
+ if row_value[file_duration_index] > DEFAULT_DURATION:
+ filename = self.sanitize_filename(row_key[file_name_index])
+ if (
+ filename in self.listmap
+ and "ignoreduration" in self.listmap[filename]
+ ):
+ # we have defined in the json manifest max values
+ # (max found value * 2) and will ignore it
+ if (
+ row_value[file_duration_index]
+ <= self.listmap[filename]["ignoreduration"]
+ ):
+ continue
+
+ if filename not in errors:
+ errors[filename] = []
+ errors[filename].append(
+ "Duration %s > %s" % (row_value[file_duration_index]),
+ DEFAULT_DURATION,
+ )
+ return errors
+
+ def filter(self, test, file_name_index):
+ for row_key in test.keys():
+ filename = self.sanitize_filename(row_key[file_name_index])
+ if filename in self.listmap:
+ if (
+ "ignore" in self.listmap[filename]
+ and self.listmap[filename]["ignore"]
+ ):
+ del test[row_key]
+ continue
+ elif filename in self.dependent_libs:
+ del test[row_key]
+ continue
+
+ @staticmethod
+ def get_error_strings(errors):
+ error_strs = []
+ for filename, data in errors.items():
+ for datum in data:
+ error_strs.append(
+ "File '%s' was accessed and we were not"
+ " expecting it: %r" % (filename, datum)
+ )
+ return error_strs
+
+ def print_errors(self, error_strs):
+ for error_msg in error_strs:
+ print("TEST-UNEXPECTED-FAIL | %s | %s" % (self.test_name, error_msg))
+
+ # Note that we don't store dependent libs in listmap. This makes
+ # save_baseline cleaner. Since a baseline allowlist should not include
+ # the dependent_libs, we would need to filter them out if everything was
+ # stored in the same dict.
+ def load_dependent_libs(self):
+ filename = "%s%sdependentlibs.list" % (self.paths[KEY_XRE], os.path.sep)
+ try:
+ with open(filename, "r") as f:
+ libs = f.readlines()
+ self.dependent_libs = {
+ "%s%s%s" % (KEY_XRE, os.path.sep, lib.strip()): {"ignore": True}
+ for lib in libs
+ }
+ return True
+ except IOError as e:
+ print("%s: %s" % (e.filename, e.strerror))
+ return False
diff --git a/testing/talos/talos/base_profile/permissions.sqlite b/testing/talos/talos/base_profile/permissions.sqlite
new file mode 100644
index 0000000000..d888531d3c
--- /dev/null
+++ b/testing/talos/talos/base_profile/permissions.sqlite
Binary files differ
diff --git a/testing/talos/talos/bootstrap.js b/testing/talos/talos/bootstrap.js
new file mode 100644
index 0000000000..7acad7ea90
--- /dev/null
+++ b/testing/talos/talos/bootstrap.js
@@ -0,0 +1,62 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+/* globals initializeBrowser */
+
+// PLEASE NOTE:
+//
+// The canonical version of this file lives in testing/talos/talos, and
+// is duplicated in a number of test add-ons in directories below it.
+// Please do not update one withput updating all.
+
+// Reads the chrome.manifest from a legacy non-restartless extension and loads
+// its overlays into the appropriate top-level windows.
+
+const { AppConstants } = ChromeUtils.importESModule(
+ "resource://gre/modules/AppConstants.sys.mjs"
+);
+const { NetUtil } = ChromeUtils.importESModule(
+ "resource://gre/modules/NetUtil.sys.mjs"
+);
+
+const windowTracker = {
+ init() {
+ Services.ww.registerNotification(this);
+ },
+
+ async observe(window, topic, data) {
+ if (topic === "domwindowopened") {
+ await new Promise(resolve =>
+ window.addEventListener("DOMWindowCreated", resolve, { once: true })
+ );
+
+ let { document } = window;
+ let { documentURI } = document;
+
+ if (documentURI !== AppConstants.BROWSER_CHROME_URL) {
+ return;
+ }
+ initializeBrowser(window);
+ }
+ },
+};
+
+function readSync(uri) {
+ let channel = NetUtil.newChannel({ uri, loadUsingSystemPrincipal: true });
+ let buffer = NetUtil.readInputStream(channel.open());
+ return new TextDecoder().decode(buffer);
+}
+
+function startup(data, reason) {
+ Services.scriptloader.loadSubScript(
+ data.resourceURI.resolve("content/initialize_browser.js")
+ );
+ windowTracker.init();
+}
+
+function shutdown(data, reason) {}
+function install(data, reason) {}
+function uninstall(data, reason) {}
diff --git a/testing/talos/talos/cmanager.py b/testing/talos/talos/cmanager.py
new file mode 100644
index 0000000000..8e342c2f5a
--- /dev/null
+++ b/testing/talos/talos/cmanager.py
@@ -0,0 +1,63 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import threading
+
+import mozinfo
+
+if mozinfo.os == "linux":
+ from talos.cmanager_linux import LinuxCounterManager as DefaultCounterManager
+elif mozinfo.os == "win":
+ from talos.cmanager_win32 import WinCounterManager as DefaultCounterManager
+else: # mac
+ from talos.cmanager_mac import MacCounterManager as DefaultCounterManager
+
+
+class CounterManagement(object):
+ def __init__(self, process_name, counters, resolution):
+ """
+ Public interface to manage counters.
+
+ On creation, create a thread to collect counters. Call :meth:`start`
+ to start collecting counters with that thread.
+
+ Be sure to call :meth:`stop` to stop the thread.
+ """
+ assert counters
+ self._raw_counters = counters
+ self._process_name = process_name
+ self._counter_results = dict([(counter, []) for counter in self._raw_counters])
+
+ self._resolution = resolution
+ self._stop = threading.Event()
+ self._thread = threading.Thread(target=self._collect)
+ self._process = None
+
+ def _collect(self):
+ manager = DefaultCounterManager(
+ self._process_name, self._process, self._raw_counters
+ )
+ while not self._stop.wait(self._resolution):
+ # Get the output from all the possible counters
+ for count_type in self._raw_counters:
+ val = manager.getCounterValue(count_type)
+ if val:
+ self._counter_results[count_type].append(val)
+
+ def start(self, process):
+ """
+ start the counter management thread.
+
+ :param process: a psutil.Process instance representing the browser
+ process.
+ """
+ self._process = process
+ self._thread.start()
+
+ def stop(self):
+ self._stop.set()
+ self._thread.join()
+
+ def results(self):
+ assert not self._thread.is_alive()
+ return self._counter_results
diff --git a/testing/talos/talos/cmanager_base.py b/testing/talos/talos/cmanager_base.py
new file mode 100644
index 0000000000..54c0c1bda9
--- /dev/null
+++ b/testing/talos/talos/cmanager_base.py
@@ -0,0 +1,27 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+
+class CounterManager(object):
+ counterDict = {}
+
+ def __init__(self):
+ self.allCounters = {}
+ self.registeredCounters = {}
+
+ def _loadCounters(self):
+ """Loads all of the counters defined in the counterDict"""
+ for counter in self.counterDict.keys():
+ self.allCounters[counter] = self.counterDict[counter]
+
+ def registerCounters(self, counters):
+ """Registers a list of counters that will be monitoring.
+ Only counters whose names are found in allCounters will be added
+ """
+ for counter in counters:
+ if counter in self.allCounters:
+ self.registeredCounters[counter] = [self.allCounters[counter], []]
+
+ def getCounterValue(self, counterName):
+ """Returns the last value of the counter 'counterName'"""
diff --git a/testing/talos/talos/cmanager_linux.py b/testing/talos/talos/cmanager_linux.py
new file mode 100644
index 0000000000..81f220aaba
--- /dev/null
+++ b/testing/talos/talos/cmanager_linux.py
@@ -0,0 +1,181 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import re
+import subprocess
+
+from cmanager_base import CounterManager
+
+
+def xrestop(binary="xrestop"):
+ """
+ python front-end to running xrestop:
+ http://www.freedesktop.org/wiki/Software/xrestop
+
+ For each monitored process, `xrestop -m 1 -b` produces output like:
+
+ 0 - Thunderbird ( PID: 2035 ):
+ res_base : 0x1600000
+ res_mask : 0x1fffff
+ windows : 69
+ GCs : 35
+ fonts : 1
+ pixmaps : 175
+ pictures : 272
+ glyphsets : 73
+ colormaps : 0
+ passive grabs : 0
+ cursors : 9
+ unknowns : 42
+ pixmap bytes : 4715737
+ other bytes : ~13024
+ total bytes : ~4728761
+ """
+
+ process_regex = re.compile(r"([0-9]+) - (.*) \( PID: *(.*) *\):")
+
+ args = ["-m", "1", "-b"]
+ command = [binary] + args
+ process = subprocess.Popen(
+ command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True
+ )
+ stdout, stderr = process.communicate()
+ if process.returncode:
+ raise Exception(
+ "Unexpected error executing '%s':\n%s"
+ % (subprocess.list2cmdline(command), stdout)
+ )
+
+ # process output
+ retval = {}
+ index = name = pid = None
+ for line in stdout.strip().splitlines():
+ line = line.rstrip()
+ match = process_regex.match(line)
+ if match:
+ index, name, pid = match.groups()
+ try:
+ pid = int(pid)
+ except ValueError:
+ # ignore processes without PIDs
+ index = name = pid = None
+ continue
+ index = int(index)
+ retval[pid] = dict(index=index, name=name)
+ else:
+ if not pid:
+ continue
+ counter, value = line.split(":", 1)
+ counter = counter.strip()
+ value = value.strip()
+ retval[pid][counter] = value
+
+ return retval
+
+
+def GetPrivateBytes(pids):
+ """Calculate the amount of private, writeable memory allocated to a
+ process.
+ This code was adapted from 'pmap.c', part of the procps project.
+ """
+ privateBytes = 0
+ for pid in pids:
+ mapfile = "/proc/%s/maps" % pid
+ with open(mapfile) as maps:
+ private = 0
+
+ for line in maps:
+ # split up
+ (range, line) = line.split(" ", 1)
+
+ (start, end) = range.split("-")
+ flags = line.split(" ", 1)[0]
+
+ size = int(end, 16) - int(start, 16)
+
+ if flags.find("p") >= 0:
+ if flags.find("w") >= 0:
+ private += size
+
+ privateBytes += private
+
+ return privateBytes
+
+
+def GetResidentSize(pids):
+ """Retrieve the current resident memory for a given process"""
+ # for some reason /proc/PID/stat doesn't give accurate information
+ # so we use status instead
+
+ RSS = 0
+ for pid in pids:
+ file = "/proc/%s/status" % pid
+
+ with open(file) as status:
+ for line in status:
+ if line.find("VmRSS") >= 0:
+ RSS += int(line.split()[1]) * 1024
+
+ return RSS
+
+
+def GetXRes(pids):
+ """Returns the total bytes used by X or raises an error if total bytes
+ is not available"""
+ XRes = 0
+ xres_output = xrestop()
+ for pid in pids:
+ if pid in xres_output:
+ data = xres_output[pid]["total bytes"]
+ data = data.lstrip("~") # total bytes is like '~4728761'
+ try:
+ data = float(data)
+ XRes += data
+ except ValueError:
+ print("Invalid data, not a float")
+ raise
+ # Content processes generally won't use X11 after bug 1635451,
+ # so failing to find the process isn't an error.
+ return XRes
+
+
+class LinuxCounterManager(CounterManager):
+ """This class manages the monitoring of a process with any number of
+ counters.
+
+ A counter can be any function that takes an argument of one pid and
+ returns a piece of data about that process.
+ Some examples are: CalcCPUTime, GetResidentSize, and GetPrivateBytes
+ """
+
+ counterDict = {
+ "Private Bytes": GetPrivateBytes,
+ "RSS": GetResidentSize,
+ "XRes": GetXRes,
+ }
+
+ def __init__(self, process_name, process, counters):
+ """Args:
+ counters: A list of counters to monitor. Any counters whose name
+ does not match a key in 'counterDict' will be ignored.
+ """
+
+ CounterManager.__init__(self)
+ self.process = process
+
+ self._loadCounters()
+ self.registerCounters(counters)
+
+ def getCounterValue(self, counterName):
+ """Returns the last value of the counter 'counterName'"""
+ try:
+ return self.registeredCounters[counterName][0](self.pidList())
+ except Exception:
+ return None
+
+ def pidList(self):
+ """Updates the list of PIDs we're interested in"""
+ try:
+ return [self.process.pid] + [child.pid for child in self.process.children()]
+ except Exception:
+ print("WARNING: problem updating child PID's")
diff --git a/testing/talos/talos/cmanager_mac.py b/testing/talos/talos/cmanager_mac.py
new file mode 100644
index 0000000000..21080c8e96
--- /dev/null
+++ b/testing/talos/talos/cmanager_mac.py
@@ -0,0 +1,90 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+"""CounterManager for Mac OSX"""
+import subprocess
+import sys
+
+from talos.cmanager_base import CounterManager
+
+
+def GetProcessData(pid):
+ """Runs a ps on the process identified by pid and returns the output line
+ as a list (pid, vsz, rss)
+ """
+ command = ["ps -o pid,vsize,rss -p" + str(pid)]
+ try:
+ handle = subprocess.Popen(
+ command, stdout=subprocess.PIPE, universal_newlines=True, shell=True
+ )
+ handle.wait()
+ data = handle.stdout.readlines()
+ except Exception:
+ print("Unexpected error executing '%s': %s", (command, sys.exc_info()))
+ raise
+
+ # First line is header output should look like:
+ # PID VSZ RSS
+ # 3210 75964 920
+ line = data[1]
+ line = line.split()
+ if line[0] == str(pid):
+ return line
+
+
+def GetPrivateBytes(pid):
+ """Calculate the amount of private, writeable memory allocated to a
+ process.
+ """
+ psData = GetProcessData(pid)
+ return int(psData[1]) * 1024 # convert to bytes
+
+
+def GetResidentSize(pid):
+ """Retrieve the current resident memory for a given process"""
+ psData = GetProcessData(pid)
+ return int(psData[2]) * 1024 # convert to bytes
+
+
+class MacCounterManager(CounterManager):
+ """This class manages the monitoring of a process with any number of
+ counters.
+
+ A counter can be any function that takes an argument of one pid and
+ returns a piece of data about that process.
+ Some examples are: CalcCPUTime, GetResidentSize, and GetPrivateBytes
+ """
+
+ counterDict = {"Private Bytes": GetPrivateBytes, "RSS": GetResidentSize}
+
+ def __init__(self, process_name, process, counters):
+ """Args:
+ counters: A list of counters to monitor. Any counters whose name
+ does not match a key in 'counterDict' will be ignored.
+ """
+
+ CounterManager.__init__(self)
+
+ # the last process is the useful one
+ self.pid = process.pid
+
+ self._loadCounters()
+ self.registerCounters(counters)
+
+ def getCounterValue(self, counterName):
+ """Returns the last value of the counter 'counterName'"""
+ if counterName not in self.registeredCounters:
+ print(
+ "Warning: attempting to collect counter %s and it is not"
+ " registered" % counterName
+ )
+ return
+
+ try:
+ return self.registeredCounters[counterName][0](self.pid)
+ except Exception as e:
+ print(
+ "Error in collecting counter: %s, pid: %s, exception: %s"
+ % (counterName, self.pid, e)
+ )
diff --git a/testing/talos/talos/cmanager_win32.py b/testing/talos/talos/cmanager_win32.py
new file mode 100644
index 0000000000..84bab8743d
--- /dev/null
+++ b/testing/talos/talos/cmanager_win32.py
@@ -0,0 +1,267 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import struct
+from ctypes import (
+ Structure,
+ Union,
+ byref,
+ c_double,
+ c_longlong,
+ create_string_buffer,
+ memmove,
+ pointer,
+ windll,
+)
+from ctypes.wintypes import DWORD, HANDLE, LONG, LPCSTR, LPCWSTR, LPSTR
+
+import six
+
+from talos.cmanager_base import CounterManager
+from talos.utils import TalosError
+
+pdh = windll.pdh
+
+_LONGLONG = c_longlong
+
+
+class _PDH_COUNTER_PATH_ELEMENTS_A(Structure):
+ _fields_ = [
+ ("szMachineName", LPSTR),
+ ("szObjectName", LPSTR),
+ ("szInstanceName", LPSTR),
+ ("szParentInstance", LPSTR),
+ ("dwInstanceIndex", DWORD),
+ ("szCounterName", LPSTR),
+ ]
+
+
+_PDH_MORE_DATA = -2147481646 # the need more space error
+
+
+def _getExpandedCounterPaths(processName, counterName):
+ """
+ Get list of expanded counter paths given a counter name. Returns a
+ list of strings or None, if no counter paths can be created
+ """
+ pcchPathListLength = DWORD(0)
+ szWildCardPath = LPSTR("\\process(%s)\\%s" % (processName, counterName))
+ if (
+ pdh.PdhExpandCounterPathA(
+ szWildCardPath, LPSTR(None), pointer(pcchPathListLength)
+ )
+ != _PDH_MORE_DATA
+ ):
+ return []
+
+ pathListLength = pcchPathListLength.value
+ szExpandedPathList = LPCSTR("\0" * pathListLength)
+ if (
+ pdh.PdhExpandCounterPathA(
+ szWildCardPath, szExpandedPathList, pointer(pcchPathListLength)
+ )
+ != 0
+ ):
+ return []
+ buffer = create_string_buffer(pcchPathListLength.value)
+ memmove(buffer, szExpandedPathList, pcchPathListLength.value)
+
+ paths = []
+ i = 0
+ path = ""
+ for j in six.moves.range(0, pcchPathListLength.value):
+ c = struct.unpack_from("c", buffer, offset=j)[0]
+ if c == "\0":
+ if j == i:
+ # double null: we're done
+ break
+ paths.append(path)
+ path = ""
+ i = j + 1
+ else:
+ path += c
+
+ return paths
+
+
+class _PDH_Counter_Union(Union):
+ _fields_ = [
+ ("longValue", LONG),
+ ("doubleValue", c_double),
+ ("largeValue", _LONGLONG),
+ ("AnsiStringValue", LPCSTR),
+ ("WideStringValue", LPCWSTR),
+ ]
+
+
+class _PDH_FMT_COUNTERVALUE(Structure):
+ _fields_ = [("CStatus", DWORD), ("union", _PDH_Counter_Union)]
+
+
+_PDH_FMT_LONG = 0x00000100
+
+
+class WinCounterManager(CounterManager):
+ def __init__(
+ self, process_name, process, counters, childProcess="plugin-container"
+ ):
+ CounterManager.__init__(self)
+ self.childProcess = childProcess
+ self.registeredCounters = {}
+ self.registerCounters(counters)
+ # PDH might need to be "refreshed" if it has been queried while the
+ # browser is closed
+ pdh.PdhEnumObjectsA(None, None, 0, 1, 0, True)
+
+ for counter in self.registeredCounters:
+ try:
+ # Add the counter path for the default process.
+ self._addCounter(process_name, "process", counter)
+ except TalosError:
+ # Assume that this is a memory counter for the system,
+ # not a process counter
+ # If we got an error that has nothing to do with that,
+ # the exception will almost certainly be re-raised
+ self._addCounter(process_name, "Memory", counter)
+
+ self._updateCounterPathsForChildProcesses(counter)
+
+ def _addCounter(self, processName, counterType, counterName):
+ pCounterPathElements = _PDH_COUNTER_PATH_ELEMENTS_A(
+ LPSTR(None),
+ LPSTR(counterType),
+ LPSTR(processName),
+ LPSTR(None),
+ DWORD(-1),
+ LPSTR(counterName),
+ )
+
+ pcchbufferSize = DWORD(0)
+
+ # First run we just try to get the buffer size so we can allocate a
+ # string big enough to fill it
+ if (
+ pdh.PdhMakeCounterPathA(
+ pointer(pCounterPathElements),
+ LPCSTR(0),
+ pointer(pcchbufferSize),
+ DWORD(0),
+ )
+ != _PDH_MORE_DATA
+ ):
+ raise TalosError(
+ "Could not create counter path for counter %s for %s"
+ % (counterName, processName)
+ )
+
+ szFullPathBuffer = LPCSTR("\0" * pcchbufferSize.value)
+ # Then we run to get the actual value
+ if (
+ pdh.PdhMakeCounterPathA(
+ pointer(pCounterPathElements),
+ szFullPathBuffer,
+ pointer(pcchbufferSize),
+ DWORD(0),
+ )
+ != 0
+ ):
+ raise TalosError(
+ "Could not create counter path for counter %s for %s"
+ % (counterName, processName)
+ )
+
+ path = szFullPathBuffer.value
+
+ hq = HANDLE()
+ if pdh.PdhOpenQuery(None, None, byref(hq)) != 0:
+ raise TalosError("Could not open win32 counter query")
+
+ hc = HANDLE()
+ if pdh.PdhAddCounterA(hq, path, 0, byref(hc)) != 0:
+ raise TalosError("Could not add win32 counter %s" % path)
+
+ self.registeredCounters[counterName] = [hq, [(hc, path)]]
+
+ def registerCounters(self, counters):
+ # self.registeredCounters[counter][0] is a counter query handle
+ # self.registeredCounters[counter][1] is a list of tuples, the first
+ # member of which is a counter handle, the second a counter path
+ for counter in counters:
+ # Main_RSS is collected inside of pageloader
+ if counter.strip() == "Main_RSS":
+ continue
+
+ # mainthread_io is collected from the browser via environment
+ # variables
+ if counter.strip() == "mainthread_io":
+ continue
+
+ self.registeredCounters[counter] = []
+
+ def _updateCounterPathsForChildProcesses(self, counter):
+ # Create a counter path for each instance of the child process that
+ # is running. If any of these paths are not in our counter list,
+ # add them to our counter query and append them to the counter list,
+ # so that we'll begin tracking their statistics. We don't need to
+ # worry about removing invalid paths from the list, as
+ # getCounterValue() will generate a value of 0 for those.
+ hq = self.registeredCounters[counter][0]
+ oldCounterListLength = len(self.registeredCounters[counter][1])
+
+ pdh.PdhEnumObjectsA(None, None, 0, 1, 0, True)
+
+ expandedPaths = _getExpandedCounterPaths(self.childProcess, counter)
+ if not expandedPaths:
+ return
+ for expandedPath in expandedPaths:
+ alreadyInCounterList = False
+ for singleCounter in self.registeredCounters[counter][1]:
+ if expandedPath == singleCounter[1]:
+ alreadyInCounterList = True
+ if not alreadyInCounterList:
+ try:
+ newhc = HANDLE()
+ if pdh.PdhAddCounterA(hq, expandedPath, 0, byref(newhc)) != 0:
+ raise TalosError(
+ "Could not add expanded win32 counter %s" % expandedPath
+ )
+ self.registeredCounters[counter][1].append((newhc, expandedPath))
+ except Exception:
+ continue
+
+ if oldCounterListLength != len(self.registeredCounters[counter][1]):
+ pdh.PdhCollectQueryData(hq)
+
+ def getCounterValue(self, counter):
+ # Update counter paths, to catch any new child processes that might
+ # have been launched since last call. Then iterate through all
+ # counter paths for this counter, and return a combined value.
+ if counter not in self.registeredCounters:
+ return None
+
+ if self.registeredCounters[counter] == []:
+ return None
+
+ self._updateCounterPathsForChildProcesses(counter)
+ hq = self.registeredCounters[counter][0]
+
+ # we'll just ignore the return value here, in case no counters
+ # are valid anymore
+ pdh.PdhCollectQueryData(hq)
+
+ aggregateValue = 0
+ for singleCounter in self.registeredCounters[counter][1]:
+ hc = singleCounter[0]
+ dwType = DWORD(0)
+ value = _PDH_FMT_COUNTERVALUE()
+
+ # if we can't get a value, just assume a value of 0
+ if (
+ pdh.PdhGetFormattedCounterValue(
+ hc, _PDH_FMT_LONG, byref(dwType), byref(value)
+ )
+ == 0
+ ):
+ aggregateValue += value.union.longValue
+
+ return aggregateValue
diff --git a/testing/talos/talos/cmdline.py b/testing/talos/talos/cmdline.py
new file mode 100644
index 0000000000..dc7ecd9a09
--- /dev/null
+++ b/testing/talos/talos/cmdline.py
@@ -0,0 +1,340 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this file,
+# You can obtain one at http://mozilla.org/MPL/2.0/.
+import argparse
+import os
+
+import six
+from mozlog.commandline import add_logging_group
+
+
+class _StopAction(argparse.Action):
+ def __init__(
+ self,
+ option_strings,
+ dest=argparse.SUPPRESS,
+ default=argparse.SUPPRESS,
+ help=None,
+ ):
+ super(_StopAction, self).__init__(
+ option_strings=option_strings,
+ dest=dest,
+ default=default,
+ nargs=0,
+ help=help,
+ )
+
+
+class _ListTests(_StopAction):
+ def __call__(self, parser, namespace, values, option_string=None):
+ from talos import test
+
+ print("Available tests:")
+ print("================\n")
+ test_class_names = [
+ (test_class.name(), test_class.description())
+ for test_class in six.itervalues(test.test_dict())
+ ]
+ test_class_names.sort()
+ for name, description in test_class_names:
+ print(name)
+ print("-" * len(name))
+ print(description)
+ print() # Appends a single blank line to the end
+ parser.exit()
+
+
+class _ListSuite(_StopAction):
+ def __call__(self, parser, namespace, values, option_string=None):
+ from talos.config import suites_conf
+
+ print("Available suites:")
+ conf = suites_conf()
+ max_suite_name = max([len(s) for s in conf])
+ pattern = " %%-%ds (%%s)" % max_suite_name
+ for name in conf:
+ print(pattern % (name, ":".join(conf[name]["tests"])))
+ print()
+ parser.exit()
+
+
+def create_parser(mach_interface=False):
+ parser = argparse.ArgumentParser()
+ add_arg = parser.add_argument
+
+ if not mach_interface:
+ add_arg(
+ "-e",
+ "--executablePath",
+ required=True,
+ dest="browser_path",
+ help="path to executable we are testing",
+ )
+ add_arg("-t", "--title", default="qm-pxp01", help="Title of the test run")
+ add_arg(
+ "--browserWait",
+ dest="browser_wait",
+ default=5,
+ type=int,
+ help="Amount of time allowed for the browser to cleanly close",
+ )
+ add_arg(
+ "-a",
+ "--activeTests",
+ help="List of tests to run, separated by ':' (ex. damp:tart)",
+ )
+ add_arg("--suite", help="Suite to use (instead of --activeTests)")
+ add_arg("--subtests", help="Name of the subtest(s) to run (works only on DAMP)")
+ add_arg(
+ "--mainthread",
+ action="store_true",
+ help="Collect mainthread IO data from the browser by setting"
+ " an environment variable",
+ )
+ add_arg(
+ "--mozAfterPaint",
+ action="store_true",
+ dest="tpmozafterpaint",
+ help="wait for MozAfterPaint event before recording the time",
+ )
+ add_arg(
+ "--firstPaint",
+ action="store_true",
+ dest="firstpaint",
+ help="Also report the first paint value in supported tests",
+ )
+ add_arg(
+ "--useHero",
+ action="store_true",
+ dest="tphero",
+ help="use Hero elementtiming attribute to record the time",
+ )
+ add_arg(
+ "--userReady",
+ action="store_true",
+ dest="userready",
+ help="Also report the user ready value in supported tests",
+ )
+ add_arg(
+ "--spsProfile",
+ action="store_true",
+ dest="gecko_profile",
+ help="(Deprecated - Use --gecko-profile instead.) Profile the "
+ "run and output the results in $MOZ_UPLOAD_DIR.",
+ )
+ add_arg(
+ "--spsProfileInterval",
+ dest="gecko_profile_interval",
+ type=float,
+ help="(Deprecated - Use --gecko-profile-interval instead.) How "
+ "frequently to take samples (ms)",
+ )
+ add_arg(
+ "--spsProfileEntries",
+ dest="gecko_profile_entries",
+ type=int,
+ help="(Deprecated - Use --gecko-profile-entries instead.) How "
+ "many samples to take with the profiler",
+ )
+ add_arg(
+ "--gecko-profile",
+ action="store_true",
+ dest="gecko_profile",
+ help="Profile the run and output the results in $MOZ_UPLOAD_DIR. "
+ "After talos is finished, profiler.firefox.com will be launched in "
+ "Firefox so you can analyze the local profiles. To disable "
+ "auto-launching of profiler.firefox.com set the "
+ "DISABLE_PROFILE_LAUNCH=1 env var.",
+ )
+ add_arg(
+ "--gecko-profile-interval",
+ dest="gecko_profile_interval",
+ type=float,
+ help="How frequently to take samples (ms)",
+ )
+ add_arg(
+ "--gecko-profile-entries",
+ dest="gecko_profile_entries",
+ type=int,
+ help="How many samples to take with the profiler",
+ )
+ add_arg(
+ "--gecko-profile-features",
+ dest="gecko_profile_features",
+ type=str,
+ help="Comma-separated list of features to enable in the profiler",
+ )
+ add_arg(
+ "--gecko-profile-threads",
+ dest="gecko_profile_threads",
+ type=str,
+ help="Comma-separated list of threads to sample",
+ )
+ add_arg(
+ "--gecko-profile-extra-threads",
+ dest="gecko_profile_extra_threads",
+ type=str,
+ help="Comma-separated list of extra threads to add to the default list of threads to profile.",
+ )
+ add_arg(
+ "--extension",
+ dest="extensions",
+ action="append",
+ default=["${talos}/talos-powers"],
+ help="Extension to install while running",
+ )
+ add_arg("--fast", action="store_true", help="Run tp tests as tp_fast")
+ add_arg(
+ "--symbolsPath",
+ dest="symbols_path",
+ help="Path to the symbols for the build we are testing",
+ )
+ add_arg("--xperf_path", help="Path to windows performance tool xperf.exe")
+ add_arg(
+ "--test_timeout",
+ type=int,
+ default=1200,
+ help="Time to wait for the browser to output to the log file",
+ )
+ add_arg(
+ "--errorFile",
+ dest="error_filename",
+ default=os.path.abspath("browser_failures.txt"),
+ help="Filename to store the errors found during the test."
+ " Currently used for xperf only.",
+ )
+ add_arg(
+ "--setpref",
+ action="append",
+ default=[],
+ dest="extraPrefs",
+ metavar="PREF=VALUE",
+ help="Set a browser preference. May be used multiple times.",
+ )
+ add_arg(
+ "--firstNonBlankPaint",
+ action="store_true",
+ dest="fnbpaint",
+ help="Wait for firstNonBlankPaint event before recording the time",
+ )
+ add_arg(
+ "--pdfPaint",
+ action="store_true",
+ dest="pdfpaint",
+ help="Wait for the first page of a PDF to be rendered",
+ )
+ add_arg("--webServer", dest="webserver", help="DEPRECATED")
+ if not mach_interface:
+ add_arg(
+ "--develop",
+ action="store_true",
+ default=False,
+ help="useful for running tests on a developer machine."
+ " Doesn't upload to the graph servers.",
+ )
+ add_arg("--cycles", type=int, help="number of browser cycles to run")
+ add_arg("--tpmanifest", help="manifest file to test")
+ add_arg("--tpcycles", type=int, help="number of pageloader cycles to run")
+ add_arg(
+ "--tptimeout",
+ type=int,
+ help="number of milliseconds to wait for a load event after"
+ " calling loadURI before timing out",
+ )
+ add_arg(
+ "--tppagecycles",
+ type=int,
+ help="number of pageloader cycles to run for each page in" " the manifest",
+ )
+ add_arg(
+ "--no-download",
+ action="store_true",
+ dest="no_download",
+ help="Do not download the talos test pagesets",
+ )
+ add_arg(
+ "--sourcestamp",
+ help="Specify the hg revision or sourcestamp for the changeset"
+ " we are testing. This will use the value found in"
+ " application.ini if it is not specified.",
+ )
+ add_arg(
+ "--repository",
+ help="Specify the url for the repository we are testing. "
+ "This will use the value found in application.ini if"
+ " it is not specified.",
+ )
+ add_arg(
+ "--framework",
+ help="Will post to the specified framework for Perfherder. "
+ 'Default "talos". Used primarily for experiments on '
+ "new platforms",
+ )
+ add_arg("--print-tests", action=_ListTests, help="print available tests")
+ add_arg("--print-suites", action=_ListSuite, help="list available suites")
+ add_arg(
+ "--no-upload-results",
+ action="store_true",
+ dest="no_upload_results",
+ help="If given, it disables uploading of talos results.",
+ )
+ add_arg(
+ "--profile",
+ type=str,
+ default=None,
+ help="Downloads a profile from TaskCluster and uses it",
+ )
+ debug_options = parser.add_argument_group("Command Arguments for debugging")
+ debug_options.add_argument(
+ "--debug",
+ action="store_true",
+ help="Enable the debugger. Not specifying a --debugger option will"
+ "result in the default debugger being used.",
+ )
+ debug_options.add_argument(
+ "--debugger", default=None, help="Name of debugger to use."
+ )
+ debug_options.add_argument(
+ "--debugger-args",
+ default=None,
+ metavar="params",
+ help="Command-line arguments to pass to the debugger itself; split"
+ "as the Bourne shell would.",
+ )
+ add_arg(
+ "--code-coverage",
+ action="store_true",
+ dest="code_coverage",
+ help="Remove any existing ccov gcda output files after browser"
+ " initialization but before starting the tests. NOTE:"
+ " Currently only supported in production.",
+ )
+ add_arg(
+ "--disable-fission",
+ action="store_false",
+ dest="fission",
+ default=True,
+ help="Disable Fission (site isolation) in Gecko.",
+ )
+ add_arg(
+ "--project",
+ type=str,
+ default="mozilla-central",
+ help="The project branch we're running tests on. Used for "
+ "disabling/skipping tests.",
+ )
+ add_arg(
+ "--screenshot-on-failure",
+ action="store_true",
+ dest="screenshot_on_failure",
+ default=False,
+ help="Take a screenshot when the test fails.",
+ )
+
+ add_logging_group(parser)
+ return parser
+
+
+def parse_args(argv=None):
+ parser = create_parser()
+ return parser.parse_args(argv)
diff --git a/testing/talos/talos/config.py b/testing/talos/talos/config.py
new file mode 100644
index 0000000000..e732e92d2f
--- /dev/null
+++ b/testing/talos/talos/config.py
@@ -0,0 +1,400 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this file,
+# You can obtain one at http://mozilla.org/MPL/2.0/.
+import copy
+import os
+import re
+import sys
+
+from mozlog.commandline import setup_logging
+
+from talos import test, utils
+from talos.cmdline import parse_args
+
+
+class ConfigurationError(Exception):
+ pass
+
+
+DEFAULTS = dict(
+ # args to pass to browser
+ extra_args=[],
+ buildid="testbuildid",
+ init_url="getInfo.html",
+ env={"NO_EM_RESTART": "1"},
+ # base data for all tests. Note that any None here will end up converted to
+ # an empty string in useBaseTestDefaults.
+ basetest=dict(
+ cycles=1,
+ profile_path="${talos}/base_profile",
+ responsiveness=False,
+ gecko_profile=False,
+ gecko_profile_interval=1,
+ gecko_profile_entries=100000,
+ resolution=1,
+ mainthread=False,
+ shutdown=False,
+ timeout=3600,
+ tpchrome=True,
+ tpcycles=10,
+ tpmozafterpaint=False,
+ tphero=False,
+ pdfpaint=True,
+ fnbpaint=False,
+ firstpaint=False,
+ format_pagename=True,
+ userready=False,
+ testeventmap=[],
+ base_vs_ref=False,
+ tppagecycles=1,
+ tploadnocache=False,
+ tpscrolltest=False,
+ win_counters=[],
+ w7_counters=[],
+ linux_counters=[],
+ mac_counters=[],
+ xperf_counters=[],
+ setup=None,
+ cleanup=None,
+ preferences={},
+ pine=True,
+ ),
+)
+
+
+# keys to generated self.config that are global overrides to tests
+GLOBAL_OVERRIDES = (
+ "cycles",
+ "gecko_profile",
+ "gecko_profile_interval",
+ "gecko_profile_entries",
+ "gecko_profile_features",
+ "gecko_profile_threads",
+ "gecko_profile_extra_threads",
+ "tpcycles",
+ "tppagecycles",
+ "tpmanifest",
+ "tptimeout",
+ "tpmozafterpaint",
+ "tphero",
+ "fnbpaint",
+ "pdfpaint",
+ "firstpaint",
+ "userready",
+)
+
+
+CONF_VALIDATORS = []
+
+
+def validator(func):
+ """
+ A decorator that register configuration validators to execute against the
+ configuration.
+
+ They will be executed in the order of declaration.
+ """
+ CONF_VALIDATORS.append(func)
+ return func
+
+
+def convert_url(config, url):
+ webserver = config["webserver"]
+ if not webserver:
+ return url
+
+ if "://" in url:
+ # assume a fully qualified url
+ return url
+
+ if ".html" in url:
+ url = "http://%s/%s" % (webserver, url)
+
+ return url
+
+
+@validator
+def fix_xperf(config):
+ # BBB: remove doubly-quoted xperf values from command line
+ # (needed for buildbot)
+ # https://bugzilla.mozilla.org/show_bug.cgi?id=704654#c43
+ win7_path = "c:/Program Files/Microsoft Windows Performance Toolkit/xperf.exe"
+ if config["xperf_path"]:
+ xperf_path = config["xperf_path"]
+ quotes = ('"', "'")
+ for quote in quotes:
+ if xperf_path.startswith(quote) and xperf_path.endswith(quote):
+ config["xperf_path"] = xperf_path[1:-1]
+ break
+ if not os.path.exists(config["xperf_path"]):
+ # look for old win7 path
+ if not os.path.exists(win7_path):
+ raise ConfigurationError(
+ "xperf.exe cannot be found at the path specified"
+ )
+ config["xperf_path"] = win7_path
+
+
+@validator
+def set_webserver(config):
+ # pick a free port
+ import socket
+
+ sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ sock.bind(("", 0))
+ port = sock.getsockname()[1]
+ sock.close()
+
+ config["webserver"] = "127.0.0.1:%d" % port
+
+
+@validator
+def update_prefs(config):
+ config.setdefault("preferences", {})
+
+ # update prefs from command line
+ prefs = config.pop("extraPrefs")
+ if prefs:
+ for arg in prefs:
+ k, v = arg.split("=", 1)
+ config["preferences"][k] = utils.parse_pref(v)
+
+
+@validator
+def fix_init_url(config):
+ if "init_url" in config:
+ config["init_url"] = convert_url(config, config["init_url"])
+
+
+@validator
+def determine_local_symbols_path(config):
+ if "symbols_path" not in config:
+ return
+
+ # use objdir/dist/crashreporter-symbols for symbolsPath if none provided
+ if (
+ not config["symbols_path"]
+ and config["develop"]
+ and "MOZ_DEVELOPER_OBJ_DIR" in os.environ
+ ):
+ config["symbols_path"] = os.path.join(
+ os.environ["MOZ_DEVELOPER_OBJ_DIR"], "dist", "crashreporter-symbols"
+ )
+
+
+def get_counters(config):
+ counters = set()
+ return counters
+
+
+def get_active_tests(config):
+ activeTests = config.pop("activeTests").strip().split(":")
+
+ # ensure tests are available
+ availableTests = test.test_dict()
+ if not set(activeTests).issubset(availableTests):
+ missing = [i for i in activeTests if i not in availableTests]
+ raise ConfigurationError("No definition found for test(s): %s" % missing)
+
+ return activeTests
+
+
+def get_global_overrides(config):
+ global_overrides = {}
+ for key in GLOBAL_OVERRIDES:
+ # get global overrides for all tests
+ value = config[key]
+ if value is not None:
+ global_overrides[key] = value
+ if key != "gecko_profile":
+ config.pop(key)
+
+ return global_overrides
+
+
+def get_test_host(manifest_line):
+ match = re.match(r"^http://localhost/page_load_test/tp5n/([^/]+)/", manifest_line)
+ host = match.group(1)
+ return host + "-talos"
+
+
+def build_manifest(config, is_multidomain, manifestName):
+ # read manifest lines
+ with open(manifestName, "r") as fHandle:
+ manifestLines = fHandle.readlines()
+
+ # write modified manifest lines
+ with open(manifestName + ".develop", "w") as newHandle:
+ for line in manifestLines:
+ new_host = get_test_host(line) if is_multidomain else config["webserver"]
+ newline = line.replace("localhost", new_host)
+ newline = newline.replace("page_load_test", "tests")
+ newHandle.write(newline)
+
+ newManifestName = manifestName + ".develop"
+
+ # return new manifest
+ return newManifestName
+
+
+def get_test(config, global_overrides, counters, test_instance):
+ mozAfterPaint = getattr(test_instance, "tpmozafterpaint", None)
+ hero = getattr(test_instance, "tphero", None)
+ firstPaint = getattr(test_instance, "firstpaint", None)
+ userReady = getattr(test_instance, "userready", None)
+ firstNonBlankPaint = getattr(test_instance, "fnbpaint", None)
+ pdfPaint = getattr(test_instance, "pdfpaint", None)
+
+ test_instance.update(**global_overrides)
+
+ # update original value of mozAfterPaint, this could be 'false',
+ # so check for None
+ if mozAfterPaint is not None:
+ test_instance.tpmozafterpaint = mozAfterPaint
+ if firstNonBlankPaint is not None:
+ test_instance.fnbpaint = firstNonBlankPaint
+ if firstPaint is not None:
+ test_instance.firstpaint = firstPaint
+ if userReady is not None:
+ test_instance.userready = userReady
+ if hero is not None:
+ test_instance.tphero = hero
+ if pdfPaint is not None:
+ test_instance.pdfpaint = pdfPaint
+
+ # fix up url
+ url = getattr(test_instance, "url", None)
+ if url:
+ test_instance.url = utils.interpolate(convert_url(config, url))
+
+ # fix up tpmanifest
+ tpmanifest = getattr(test_instance, "tpmanifest", None)
+ if tpmanifest:
+ is_multidomain = getattr(test_instance, "multidomain", False)
+ test_instance.tpmanifest = build_manifest(
+ config, is_multidomain, utils.interpolate(tpmanifest)
+ )
+
+ # add any counters
+ if counters:
+ keys = (
+ "linux_counters",
+ "mac_counters",
+ "win_counters",
+ "w7_counters",
+ "xperf_counters",
+ )
+ for key in keys:
+ if key not in test_instance.keys:
+ # only populate attributes that will be output
+ continue
+ if not isinstance(getattr(test_instance, key, None), list):
+ setattr(test_instance, key, [])
+ _counters = getattr(test_instance, key)
+ _counters.extend(
+ [counter for counter in counters if counter not in _counters]
+ )
+
+ return dict(test_instance.items())
+
+
+@validator
+def tests(config):
+ counters = get_counters(config)
+ global_overrides = get_global_overrides(config)
+ activeTests = get_active_tests(config)
+ test_dict = test.test_dict()
+
+ tests = []
+ for test_name in activeTests:
+ test_class = test_dict[test_name]
+ tests.append(get_test(config, global_overrides, counters, test_class()))
+ config["tests"] = tests
+
+
+def get_browser_config(config):
+ required = (
+ "extensions",
+ "browser_path",
+ "browser_wait",
+ "extra_args",
+ "buildid",
+ "env",
+ "init_url",
+ "webserver",
+ )
+ optional = {
+ "bcontroller_config": "${talos}/bcontroller.json",
+ "child_process": "plugin-container",
+ "debug": False,
+ "debugger": None,
+ "debugger_args": None,
+ "develop": False,
+ "fission": True,
+ "process": "",
+ "framework": "talos",
+ "repository": None,
+ "sourcestamp": None,
+ "symbols_path": None,
+ "test_timeout": 1200,
+ "xperf_path": None,
+ "error_filename": None,
+ "no_upload_results": False,
+ "subtests": None,
+ "preferences": {},
+ }
+ browser_config = dict(title=config["title"])
+ browser_config.update(dict([(i, config[i]) for i in required]))
+ browser_config.update(dict([(i, config.get(i, j)) for i, j in optional.items()]))
+ return browser_config
+
+
+def suites_conf():
+ import json
+
+ with open(os.path.join(os.path.dirname(utils.here), "talos.json")) as f:
+ return json.load(f)["suites"]
+
+
+def get_config(argv=None):
+ argv = argv or sys.argv[1:]
+ cli_opts = parse_args(argv=argv)
+ if cli_opts.suite:
+ # read the suite config, update the args
+ try:
+ suite_conf = suites_conf()[cli_opts.suite]
+ except KeyError:
+ raise ConfigurationError("No such suite: %r" % cli_opts.suite)
+ argv += ["-a", ":".join(suite_conf["tests"])]
+ # talos_options in the suite config should not override command line
+ # options, so we prepend argv with talos_options so that, when parsed,
+ # the command line options will clobber the suite config options.
+ argv = suite_conf.get("talos_options", []) + argv
+ # args needs to be reparsed now
+ elif not cli_opts.activeTests:
+ raise ConfigurationError("--activeTests or --suite required!")
+
+ cli_opts = parse_args(argv=argv)
+ setup_logging("talos", cli_opts, {"tbpl": sys.stdout})
+ config = copy.deepcopy(DEFAULTS)
+ config.update(cli_opts.__dict__)
+ for validate in CONF_VALIDATORS:
+ validate(config)
+ # remove None Values
+ for k, v in config.copy().items():
+ if v is None:
+ del config[k]
+ return config
+
+
+def get_configs(argv=None):
+ config = get_config(argv=argv)
+ browser_config = get_browser_config(config)
+ return config, browser_config
+
+
+if __name__ == "__main__":
+ cfgs = get_configs()
+ print(cfgs[0])
+ print()
+ print(cfgs[1])
diff --git a/testing/talos/talos/ffsetup.py b/testing/talos/talos/ffsetup.py
new file mode 100644
index 0000000000..c44535a677
--- /dev/null
+++ b/testing/talos/talos/ffsetup.py
@@ -0,0 +1,352 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+"""
+Set up a browser environment before running a test.
+"""
+import json
+import os
+import shutil
+import tempfile
+
+import mozfile
+import mozinfo
+import mozrunner
+import six
+from mozlog import get_proxy_logger
+from mozprofile.profile import Profile
+
+from talos import heavy, utils
+from talos.gecko_profile import GeckoProfile
+from talos.utils import TalosError, run_in_debug_mode
+
+here = os.path.abspath(os.path.dirname(__file__))
+
+LOG = get_proxy_logger()
+
+
+class FFSetup(object):
+ """
+ Initialize the browser environment before running a test.
+
+ This prepares:
+ - the environment vars for running the test in the browser,
+ available via the instance member *env*.
+ - the profile used to run the test, available via the
+ instance member *profile_dir*.
+ - Gecko profiling, available via the instance member *gecko_profile*
+ of type :class:`GeckoProfile` or None if not used.
+
+ Note that the browser will be run once with the profile, to ensure
+ this is basically working and negate any performance noise with the
+ real test run (installing the profile the first time takes time).
+
+ This class should be used as a context manager::
+
+ with FFSetup(browser_config, test_config) as setup:
+ # setup.env is initialized, and setup.profile_dir created
+ pass
+ # here the profile is removed
+ """
+
+ def __init__(self, browser_config, test_config):
+ self.browser_config, self.test_config = browser_config, test_config
+ self._tmp_dir = tempfile.mkdtemp()
+ self.env = None
+ # The profile dir must be named 'profile' because of xperf analysis
+ # (in etlparser.py). TODO fix that ?
+ self.profile_dir = os.path.join(self._tmp_dir, "profile")
+ self.gecko_profile = None
+ self.debug_mode = run_in_debug_mode(browser_config)
+
+ @property
+ def profile_data_dir(self):
+ if "MOZ_DEVELOPER_REPO_DIR" in os.environ:
+ return os.path.join(
+ os.environ["MOZ_DEVELOPER_REPO_DIR"], "testing", "profiles"
+ )
+ return os.path.join(here, "profile_data")
+
+ def _init_env(self):
+ self.env = dict(os.environ)
+ for k, v in six.iteritems(self.browser_config["env"]):
+ self.env[k] = str(v)
+ self.env["MOZ_CRASHREPORTER_NO_REPORT"] = "1"
+ if self.browser_config["symbols_path"]:
+ self.env["MOZ_CRASHREPORTER"] = "1"
+ else:
+ self.env["MOZ_CRASHREPORTER_DISABLE"] = "1"
+
+ self.env["MOZ_DISABLE_NONLOCAL_CONNECTIONS"] = "1"
+
+ self.env["LD_LIBRARY_PATH"] = os.path.dirname(
+ self.browser_config["browser_path"]
+ )
+
+ def _init_profile(self):
+ extensions = self.browser_config["extensions"][:]
+ if self.test_config.get("extensions"):
+ extensions.extend(self.test_config["extensions"])
+
+ # downloading a profile instead of using the empty one
+ if self.test_config["profile"] is not None:
+ path = heavy.download_profile(self.test_config["profile"])
+ self.test_config["profile_path"] = path
+
+ profile_path = os.path.normpath(self.test_config["profile_path"])
+ LOG.info("Cloning profile located at %s" % profile_path)
+
+ def _feedback(directory, content):
+ # Called by shutil.copytree on each visited directory.
+ # Used here to display info.
+ #
+ # Returns the items that should be ignored by
+ # shutil.copytree when copying the tree, so always returns
+ # an empty list.
+ sub = directory.split(profile_path)[-1].lstrip("/")
+ if sub:
+ LOG.info("=> %s" % sub)
+ return []
+
+ profile = Profile.clone(
+ profile_path, self.profile_dir, ignore=_feedback, restore=False
+ )
+
+ # build pref interpolation context
+ webserver = self.browser_config["webserver"]
+ if "://" not in webserver:
+ webserver = "http://" + webserver
+
+ interpolation = {
+ "webserver": webserver,
+ }
+
+ # merge base profiles
+ with open(os.path.join(self.profile_data_dir, "profiles.json"), "r") as fh:
+ base_profiles = json.load(fh)["talos"]
+
+ for name in base_profiles:
+ path = os.path.join(self.profile_data_dir, name)
+ LOG.info("Merging profile: {}".format(path))
+ profile.merge(path, interpolation=interpolation)
+
+ # set test preferences
+ preferences = self.browser_config.get("preferences", {}).copy()
+ if self.test_config.get("preferences"):
+ test_prefs = dict(
+ [
+ (i, utils.parse_pref(j))
+ for i, j in self.test_config["preferences"].items()
+ ]
+ )
+ preferences.update(test_prefs)
+
+ for name, value in preferences.items():
+ if type(value) is str:
+ value = utils.interpolate(value, **interpolation)
+ preferences[name] = value
+ profile.set_preferences(preferences)
+
+ # installing addons
+ LOG.info("Installing Add-ons:")
+ LOG.info(extensions)
+ profile.addons.install(extensions)
+
+ # installing webextensions
+ webextensions_to_install = []
+ webextensions_folder = self.test_config.get("webextensions_folder", None)
+ if isinstance(webextensions_folder, six.string_types):
+ folder = utils.interpolate(webextensions_folder)
+ for file in os.listdir(folder):
+ if file.endswith(".xpi"):
+ webextensions_to_install.append(os.path.join(folder, file))
+
+ webextensions = self.test_config.get("webextensions", None)
+ if isinstance(webextensions, six.string_types):
+ webextensions_to_install.append(webextensions)
+
+ if webextensions_to_install is not None:
+ LOG.info("Installing Webextensions:")
+ for webext in webextensions_to_install:
+ filename = utils.interpolate(webext)
+ if mozinfo.os == "win":
+ filename = filename.replace("/", "\\")
+ if not filename.endswith(".xpi"):
+ continue
+ if not os.path.exists(filename):
+ continue
+ LOG.info(filename)
+ profile.addons.install(filename)
+
+ def _run_profile(self):
+ runner_cls = mozrunner.runners.get(
+ mozinfo.info.get("appname", "firefox"), mozrunner.Runner
+ )
+
+ args = list(self.browser_config["extra_args"])
+ args.append(self.browser_config["init_url"])
+
+ runner = runner_cls(
+ profile=self.profile_dir,
+ binary=self.browser_config["browser_path"],
+ cmdargs=args,
+ env=self.env,
+ )
+
+ runner.start(outputTimeout=30)
+ proc = runner.process_handler
+ LOG.process_start(
+ proc.pid, "%s %s" % (self.browser_config["browser_path"], " ".join(args))
+ )
+
+ try:
+ exit_code = proc.wait()
+ except Exception:
+ proc.kill()
+ raise TalosError("Browser Failed to close properly during warmup")
+
+ LOG.process_exit(proc.pid, exit_code)
+
+ def _init_gecko_profile(self):
+ upload_dir = os.getenv("MOZ_UPLOAD_DIR")
+ if self.test_config.get("gecko_profile") and not upload_dir:
+ LOG.critical("Profiling ignored because MOZ_UPLOAD_DIR was not" " set")
+ if upload_dir and self.test_config.get("gecko_profile"):
+ self.gecko_profile = GeckoProfile(
+ upload_dir, self.browser_config, self.test_config
+ )
+ self.gecko_profile.update_env(self.env)
+
+ def clean(self):
+ try:
+ mozfile.remove(self._tmp_dir)
+ except Exception as e:
+ LOG.info("Exception while removing profile directory: %s" % self._tmp_dir)
+ LOG.info(e)
+
+ if self.gecko_profile:
+ self.gecko_profile.clean()
+
+ def collect_or_clean_ccov(self, clean=False):
+ # NOTE: Currently only supported when running in production
+ if not self.browser_config.get("develop", False):
+ # first see if we an find any ccov files at the ccov output dirs
+ if clean:
+ LOG.info("Cleaning ccov files before starting the talos test")
+ else:
+ LOG.info(
+ "Collecting ccov files that were generated during the talos test"
+ )
+ gcov_prefix = os.getenv("GCOV_PREFIX", None)
+ js_ccov_dir = os.getenv("JS_CODE_COVERAGE_OUTPUT_DIR", None)
+ gcda_archive_folder_name = "gcda-archive"
+ _gcda_files_found = []
+
+ for _ccov_env in [gcov_prefix, js_ccov_dir]:
+ if _ccov_env is not None:
+ # ccov output dir env vars exist; now search for gcda files to remove
+ _ccov_path = os.path.abspath(_ccov_env)
+ if os.path.exists(_ccov_path):
+ # now walk through and look for gcda files
+ LOG.info("Recursive search for gcda files in: %s" % _ccov_path)
+ for root, dirs, files in os.walk(_ccov_path):
+ for next_file in files:
+ if next_file.endswith(".gcda"):
+ # don't want to move or delete files in our 'gcda-archive'
+ if root.find(gcda_archive_folder_name) == -1:
+ _gcda_files_found.append(
+ os.path.join(root, next_file)
+ )
+ else:
+ LOG.info(
+ "The ccov env var path doesn't exist: %s" % str(_ccov_path)
+ )
+
+ # now clean or collect gcda files accordingly
+ if clean:
+ # remove ccov data
+ LOG.info(
+ "Found %d gcda files to clean. Deleting..."
+ % (len(_gcda_files_found))
+ )
+ for _gcda in _gcda_files_found:
+ try:
+ mozfile.remove(_gcda)
+ except Exception as e:
+ LOG.info("Exception while removing file: %s" % _gcda)
+ LOG.info(e)
+ LOG.info("Finished cleaning ccov gcda files")
+ else:
+ # copy gcda files to archive folder to be collected later
+ gcda_archive_top = os.path.join(
+ gcov_prefix, gcda_archive_folder_name, self.test_config["name"]
+ )
+ LOG.info(
+ "Found %d gcda files to collect. Moving to gcda archive %s"
+ % (len(_gcda_files_found), str(gcda_archive_top))
+ )
+ if not os.path.exists(gcda_archive_top):
+ try:
+ os.makedirs(gcda_archive_top)
+ except OSError:
+ LOG.critical(
+ "Unable to make gcda archive folder %s" % gcda_archive_top
+ )
+ for _gcda in _gcda_files_found:
+ # want to copy the existing directory strucutre but put it under archive-dir
+ # need to remove preceeding '/' from _gcda file name so can join the path
+ gcda_archive_file = os.path.join(
+ gcov_prefix,
+ gcda_archive_folder_name,
+ self.test_config["name"],
+ _gcda.strip(gcov_prefix + "//"),
+ )
+ gcda_archive_dest = os.path.dirname(gcda_archive_file)
+
+ # create archive folder, mirroring structure
+ if not os.path.exists(gcda_archive_dest):
+ try:
+ os.makedirs(gcda_archive_dest)
+ except OSError:
+ LOG.critical(
+ "Unable to make archive folder %s" % gcda_archive_dest
+ )
+ # now copy the file there
+ try:
+ shutil.copy(_gcda, gcda_archive_dest)
+ except Exception as e:
+ LOG.info(
+ "Error copying %s to %s"
+ % (str(_gcda), str(gcda_archive_dest))
+ )
+ LOG.info(e)
+ LOG.info(
+ "Finished collecting ccov gcda files. Copied to: %s"
+ % gcda_archive_top
+ )
+
+ def __enter__(self):
+ LOG.info("Initialising browser for %s test..." % self.test_config["name"])
+ self._init_env()
+ self._init_profile()
+ try:
+ if not self.debug_mode and not self.test_config["name"].startswith("damp"):
+ self._run_profile()
+ except BaseException:
+ self.clean()
+ raise
+ self._init_gecko_profile()
+ LOG.info("Browser initialized.")
+ LOG.info("Fission enabled: %s" % self.browser_config.get("fission", True))
+ # remove ccov files before actual tests start
+ if self.browser_config.get("code_coverage", False):
+ # if the Firefox build was instrumented for ccov, initializing the browser
+ # will have caused ccov to output some gcda files; in order to have valid
+ # ccov data for the talos test we want to remove these files before starting
+ # the actual talos test(s)
+ self.collect_or_clean_ccov(clean=True)
+ return self
+
+ def __exit__(self, type, value, tb):
+ self.clean()
diff --git a/testing/talos/talos/filter.py b/testing/talos/talos/filter.py
new file mode 100644
index 0000000000..833553139f
--- /dev/null
+++ b/testing/talos/talos/filter.py
@@ -0,0 +1,264 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+import math
+
+import six
+
+"""
+data filters:
+takes a series of run data and applies statistical transforms to it
+
+Each filter is a simple function, but it also have attached a special
+`prepare` method that create a tuple with one instance of a
+:class:`Filter`; this allow to write stuff like::
+
+ from talos import filter
+ filters = filter.ignore_first.prepare(1) + filter.median.prepare()
+
+ for filter in filters:
+ data = filter(data)
+ # data is filtered
+"""
+
+_FILTERS = {}
+
+
+class Filter(object):
+ def __init__(self, func, *args, **kwargs):
+ """
+ Takes a filter function, and save args and kwargs that
+ should be used when the filter is used.
+ """
+ self.func = func
+ self.args = args
+ self.kwargs = kwargs
+
+ def apply(self, data):
+ """
+ Apply the filter on the data, and return the new data
+ """
+ return self.func(data, *self.args, **self.kwargs)
+
+
+def define_filter(func):
+ """
+ decorator to attach the prepare method.
+ """
+
+ def prepare(*args, **kwargs):
+ return (Filter(func, *args, **kwargs),)
+
+ func.prepare = prepare
+ return func
+
+
+def register_filter(func):
+ """
+ all filters defined in this module
+ should be registered
+ """
+ global _FILTERS
+
+ _FILTERS[func.__name__] = func
+ return func
+
+
+def filters(*args):
+ global _FILTERS
+
+ filters_ = [_FILTERS[filter] for filter in args]
+ return filters_
+
+
+def apply(data, filters):
+ for filter in filters:
+ data = filter(data)
+
+ return data
+
+
+def parse(string_):
+ def to_number(string_number):
+ try:
+ return int(string_number)
+ except ValueError:
+ return float(string_number)
+
+ tokens = string_.split(":")
+
+ func = tokens[0]
+ digits = []
+ if len(tokens) > 1:
+ digits.extend(tokens[1].split(","))
+ digits = [to_number(digit) for digit in digits]
+
+ return [func, digits]
+
+
+# filters that return a scalar
+
+
+@register_filter
+@define_filter
+def mean(series):
+ """
+ mean of data; needs at least one data point
+ """
+ return sum(series) / float(len(series))
+
+
+@register_filter
+@define_filter
+def median(series):
+ """
+ median of data; needs at least one data point
+ """
+ series = sorted(series)
+ if len(series) % 2:
+ # odd
+ return series[int(len(series) / 2)]
+ else:
+ # even
+ middle = int(len(series) / 2) # the higher of the middle 2, actually
+ return 0.5 * (series[middle - 1] + series[middle])
+
+
+@register_filter
+@define_filter
+def variance(series):
+ """
+ variance: http://en.wikipedia.org/wiki/Variance
+ """
+
+ _mean = mean(series)
+ variance = sum([(i - _mean) ** 2 for i in series]) / float(len(series))
+ return variance
+
+
+@register_filter
+@define_filter
+def stddev(series):
+ """
+ standard deviation: http://en.wikipedia.org/wiki/Standard_deviation
+ """
+ return variance(series) ** 0.5
+
+
+@register_filter
+@define_filter
+def dromaeo(series):
+ """
+ dromaeo: https://wiki.mozilla.org/Dromaeo, pull the internal calculation
+ out
+ * This is for 'runs/s' based tests, not 'ms' tests.
+ * chunksize: defined in dromaeo: tests/dromaeo/webrunner.js#l8
+ """
+ means = []
+ chunksize = 5
+ series = list(dromaeo_chunks(series, chunksize))
+ for i in series:
+ means.append(mean(i))
+ return geometric_mean(means)
+
+
+@register_filter
+@define_filter
+def dromaeo_chunks(series, size):
+ for i in six.moves.range(0, len(series), size):
+ yield series[i : i + size]
+
+
+@register_filter
+@define_filter
+def geometric_mean(series):
+ """
+ geometric_mean: http://en.wikipedia.org/wiki/Geometric_mean
+ """
+ total = 0
+ for i in series:
+ total += math.log(i + 1)
+ # pylint --py3k W1619
+ return math.exp(total / len(series)) - 1
+
+
+# filters that return a list
+
+
+@register_filter
+@define_filter
+def ignore_first(series, number=1):
+ """
+ ignore first datapoint
+ """
+ if len(series) <= number:
+ # don't modify short series
+ return series
+ return series[number:]
+
+
+@register_filter
+@define_filter
+def ignore(series, function):
+ """
+ ignore the first value of a list given by function
+ """
+ if len(series) <= 1:
+ # don't modify short series
+ return series
+ series = series[:] # do not mutate the original series
+ value = function(series)
+ series.remove(value)
+ return series
+
+
+@register_filter
+@define_filter
+def ignore_max(series):
+ """
+ ignore maximum data point
+ """
+ return ignore(series, max)
+
+
+@register_filter
+@define_filter
+def ignore_min(series):
+ """
+ ignore minimum data point
+ """
+ return ignore(series, min)
+
+
+@register_filter
+@define_filter
+def v8_subtest(series, name):
+ """
+ v8 benchmark score - modified for no sub benchmarks.
+ * removed Crypto and kept Encrypt/Decrypt standalone
+ * removed EarlyBoyer and kept Earley/Boyer standalone
+
+ this is not 100% in parity but within .3%
+ """
+ reference = {
+ "Encrypt": 266181.0,
+ "Decrypt": 266181.0,
+ "DeltaBlue": 66118.0,
+ "Earley": 666463.0,
+ "Boyer": 666463.0,
+ "NavierStokes": 1484000.0,
+ "RayTrace": 739989.0,
+ "RegExp": 910985.0,
+ "Richards": 35302.0,
+ "Splay": 81491.0,
+ }
+
+ # pylint --py3k W1619
+ return reference[name] / geometric_mean(series)
+
+
+@register_filter
+@define_filter
+def responsiveness_Metric(val_list):
+ return sum([float(x) * float(x) / 1000000.0 for x in val_list])
diff --git a/testing/talos/talos/gecko_profile.py b/testing/talos/talos/gecko_profile.py
new file mode 100644
index 0000000000..f7bbbaf597
--- /dev/null
+++ b/testing/talos/talos/gecko_profile.py
@@ -0,0 +1,246 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+"""
+module to handle Gecko profiling.
+"""
+import json
+import os
+import tempfile
+import zipfile
+
+import mozfile
+from mozgeckoprofiler import ProfileSymbolicator, save_gecko_profile
+from mozlog import get_proxy_logger
+
+LOG = get_proxy_logger()
+
+
+class GeckoProfile(object):
+ """
+ Handle Gecko profiling.
+
+ This allow to collect Gecko profiling data and to zip results in one file.
+ """
+
+ def __init__(self, upload_dir, browser_config, test_config):
+ self.upload_dir = upload_dir
+ self.browser_config, self.test_config = browser_config, test_config
+ self.cleanup = True
+
+ # Create a temporary directory into which the tests can put
+ # their profiles. These files will be assembled into one big
+ # zip file later on, which is put into the MOZ_UPLOAD_DIR.
+ gecko_profile_dir = tempfile.mkdtemp()
+
+ gecko_profile_interval = test_config.get("gecko_profile_interval", 1)
+ # Default number of entries is 128MiB.
+ # This value is calculated by dividing the 128MiB of memory by 8 because
+ # the profiler uses 8 bytes per entry.
+ gecko_profile_entries = test_config.get(
+ "gecko_profile_entries", int(128 * 1024 * 1024 / 8)
+ )
+ gecko_profile_features = test_config.get(
+ "gecko_profile_features", "js,stackwalk,cpu,screenshots"
+ )
+ gecko_profile_threads = test_config.get(
+ "gecko_profile_threads", "GeckoMain,Compositor,Renderer"
+ )
+
+ gecko_profile_extra_threads = test_config.get(
+ "gecko_profile_extra_threads", None
+ )
+ if gecko_profile_extra_threads:
+ gecko_profile_threads += "," + gecko_profile_extra_threads
+
+ # Make sure no archive already exists in the location where
+ # we plan to output our profiler archive
+ # If individual talos is ran (--activeTest) instead of suite (--suite)
+ # the "suite" key will be empty and we'll name the profile after
+ # the test name
+ self.profile_arcname = os.path.join(
+ self.upload_dir,
+ "profile_{0}.zip".format(test_config.get("suite", test_config["name"])),
+ )
+
+ # We delete the archive if the current test is the first in the suite
+ if test_config.get("is_first_test", False):
+ LOG.info("Clearing archive {0}".format(self.profile_arcname))
+ mozfile.remove(self.profile_arcname)
+
+ self.symbol_paths = {
+ "FIREFOX": tempfile.mkdtemp(),
+ "THUNDERBIRD": tempfile.mkdtemp(),
+ "WINDOWS": tempfile.mkdtemp(),
+ }
+
+ LOG.info(
+ "Activating Gecko Profiling. Temp. profile dir:"
+ " {0}, interval: {1}, entries: {2}".format(
+ gecko_profile_dir, gecko_profile_interval, gecko_profile_entries
+ )
+ )
+
+ self.profiling_info = {
+ "gecko_profile_interval": gecko_profile_interval,
+ "gecko_profile_entries": gecko_profile_entries,
+ "gecko_profile_dir": gecko_profile_dir,
+ "gecko_profile_features": gecko_profile_features,
+ "gecko_profile_threads": gecko_profile_threads,
+ }
+
+ def option(self, name):
+ return self.profiling_info["gecko_profile_" + name]
+
+ def update_env(self, env):
+ """
+ update the given env to update some env vars if required.
+ """
+ if not self.test_config.get("gecko_profile_startup"):
+ return
+ # Set environment variables which will cause profiling to
+ # start as early as possible. These are consumed by Gecko
+ # itself, not by Talos JS code.
+ env.update(
+ {
+ "MOZ_PROFILER_STARTUP": "1",
+ # Temporary: Don't run Base Profiler, see bug 1630448.
+ # TODO: Remove when fix lands in bug 1648324 or bug 1648325.
+ "MOZ_PROFILER_STARTUP_NO_BASE": "1",
+ "MOZ_PROFILER_STARTUP_INTERVAL": str(self.option("interval")),
+ "MOZ_PROFILER_STARTUP_ENTRIES": str(self.option("entries")),
+ "MOZ_PROFILER_STARTUP_FEATURES": str(self.option("features")),
+ "MOZ_PROFILER_STARTUP_FILTERS": str(self.option("threads")),
+ }
+ )
+
+ def _save_gecko_profile(
+ self, cycle, symbolicator, missing_symbols_zip, profile_path
+ ):
+ try:
+ with open(profile_path, "r", encoding="utf-8") as profile_file:
+ profile = json.load(profile_file)
+ symbolicator.dump_and_integrate_missing_symbols(
+ profile, missing_symbols_zip
+ )
+ symbolicator.symbolicate_profile(profile)
+ save_gecko_profile(profile, profile_path)
+ except MemoryError:
+ LOG.critical(
+ "Ran out of memory while trying"
+ " to symbolicate profile {0} (cycle {1})".format(profile_path, cycle),
+ exc_info=True,
+ )
+ except Exception:
+ LOG.critical(
+ "Encountered an exception during profile"
+ " symbolication {0} (cycle {1})".format(profile_path, cycle),
+ exc_info=True,
+ )
+
+ def symbolicate(self, cycle):
+ """
+ Symbolicate Gecko profiling data for one cycle.
+
+ :param cycle: the number of the cycle of the test currently run.
+ """
+ symbolicator = ProfileSymbolicator(
+ {
+ # Trace-level logging (verbose)
+ "enableTracing": 0,
+ # Fallback server if symbol is not found locally
+ "remoteSymbolServer": "https://symbolication.services.mozilla.com/symbolicate/v4",
+ # Maximum number of symbol files to keep in memory
+ "maxCacheEntries": 2000000,
+ # Frequency of checking for recent symbols to
+ # cache (in hours)
+ "prefetchInterval": 12,
+ # Oldest file age to prefetch (in hours)
+ "prefetchThreshold": 48,
+ # Maximum number of library versions to pre-fetch
+ # per library
+ "prefetchMaxSymbolsPerLib": 3,
+ # Default symbol lookup directories
+ "defaultApp": "FIREFOX",
+ "defaultOs": "WINDOWS",
+ # Paths to .SYM files, expressed internally as a
+ # mapping of app or platform names to directories
+ # Note: App & OS names from requests are converted
+ # to all-uppercase internally
+ "symbolPaths": self.symbol_paths,
+ }
+ )
+
+ if self.browser_config["symbols_path"]:
+ if mozfile.is_url(self.browser_config["symbols_path"]):
+ symbolicator.integrate_symbol_zip_from_url(
+ self.browser_config["symbols_path"]
+ )
+ elif os.path.isfile(self.browser_config["symbols_path"]):
+ symbolicator.integrate_symbol_zip_from_file(
+ self.browser_config["symbols_path"]
+ )
+ elif os.path.isdir(self.browser_config["symbols_path"]):
+ sym_path = self.browser_config["symbols_path"]
+ symbolicator.options["symbolPaths"]["FIREFOX"] = sym_path
+ self.cleanup = False
+
+ missing_symbols_zip = os.path.join(self.upload_dir, "missingsymbols.zip")
+
+ try:
+ mode = zipfile.ZIP_DEFLATED
+ except NameError:
+ mode = zipfile.ZIP_STORED
+
+ gecko_profile_dir = self.option("dir")
+
+ with zipfile.ZipFile(self.profile_arcname, "a", mode) as arc:
+ # Collect all individual profiles that the test
+ # has put into gecko_profile_dir.
+ for profile_filename in os.listdir(gecko_profile_dir):
+ testname = profile_filename
+ if testname.endswith(".profile"):
+ testname = testname[0:-8]
+ profile_path = os.path.join(gecko_profile_dir, profile_filename)
+ self._save_gecko_profile(
+ cycle, symbolicator, missing_symbols_zip, profile_path
+ )
+
+ # Our zip will contain one directory per subtest,
+ # and each subtest directory will contain one or
+ # more cycle_i.profile files. For example, with
+ # test_config['name'] == 'tscrollx',
+ # profile_filename == 'iframe.svg.profile', i == 0,
+ # we'll get path_in_zip ==
+ # 'profile_tscrollx/iframe.svg/cycle_0.profile'.
+ cycle_name = "cycle_{0}.profile".format(cycle)
+ path_in_zip = os.path.join(
+ "profile_{0}".format(self.test_config["name"]), testname, cycle_name
+ )
+ LOG.info(
+ "Adding profile {0} to archive {1}".format(
+ path_in_zip, self.profile_arcname
+ )
+ )
+ try:
+ arc.write(profile_path, path_in_zip)
+ except Exception:
+ LOG.exception(
+ "Failed to copy profile {0} as {1} to"
+ " archive {2}".format(
+ profile_path, path_in_zip, self.profile_arcname
+ )
+ )
+ # save the latest gecko profile archive to an env var, so later on
+ # it can be viewed automatically via the view-gecko-profile tool
+ os.environ["TALOS_LATEST_GECKO_PROFILE_ARCHIVE"] = self.profile_arcname
+
+ def clean(self):
+ """
+ Clean up temp folders created with the instance creation.
+ """
+ mozfile.remove(self.option("dir"))
+ if self.cleanup:
+ for symbol_path in self.symbol_paths.values():
+ mozfile.remove(symbol_path)
diff --git a/testing/talos/talos/getInfo.html b/testing/talos/talos/getInfo.html
new file mode 100644
index 0000000000..0d549b381e
--- /dev/null
+++ b/testing/talos/talos/getInfo.html
@@ -0,0 +1,37 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ - You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+ <meta charset="utf-8">
+ <head>
+ <script>
+ window.onerror = (message, source, lineno) => {
+ dump(`TEST-UNEXPECTED-FAIL | getInfo | ${source}, line ${lineno}: ${message}\n`);
+ };
+ </script>
+ <script type="text/javascript" src="/talos-powers/content/TalosPowersContent.js"></script>
+ <title>shutdown script</title>
+ </head>
+
+ <script type="text/javascript">
+ addEventListener("load", async () => {
+ await TalosPowers.loadPromise;
+ var devicePixelRatio = window.devicePixelRatio;
+
+ dump(`__metrics\n\tScreen width/height: ${screen.width}/${screen.height}`);
+ if (devicePixelRatio != 1) {
+ dump(` (scaled from ${screen.width * devicePixelRatio}/${screen.height * devicePixelRatio})`);
+ }
+ dump(`\n\tcolorDepth: ${screen.colorDepth}\n`);
+ dump(`\tBrowser inner width/height: ${window.innerWidth}/${window.innerHeight}\n`);
+ // JMAHER: this is temporarily commented out because this hangs the fennec browser
+ // dump(`\tBrowser outer width/height: ${window.outerWidth}/${window.outerHeight}`);
+ dump("\n__metrics\n");
+ TalosPowersParent.exec("dumpAboutSupport");
+ TalosPowersContent.goQuitApplication(true /* waitForStartupFinished */);
+ });
+ </script>
+
+ <body></body>
+</html>
diff --git a/testing/talos/talos/getinfooffline/api.js b/testing/talos/talos/getinfooffline/api.js
new file mode 100644
index 0000000000..819fd6f36f
--- /dev/null
+++ b/testing/talos/talos/getinfooffline/api.js
@@ -0,0 +1,15 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* vim: set ts=2 et sw=2 tw=80 filetype=javascript: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+/* globals ExtensionAPI, Services */
+
+this.getinfooffline = class extends ExtensionAPI {
+ onStartup() {
+ Services.io.offline = true;
+ }
+};
diff --git a/testing/talos/talos/getinfooffline/background.js b/testing/talos/talos/getinfooffline/background.js
new file mode 100644
index 0000000000..951cc942ec
--- /dev/null
+++ b/testing/talos/talos/getinfooffline/background.js
@@ -0,0 +1,10 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// We've run once, and hopefully bypassed any network connections that add-ons
+// might have tried to make after first install. Now let's uninstall ourselves
+// so that subsequent starts run in online mode.
+
+/* globals browser */
+browser.management.uninstallSelf({});
diff --git a/testing/talos/talos/getinfooffline/manifest.json b/testing/talos/talos/getinfooffline/manifest.json
new file mode 100644
index 0000000000..f73e88095f
--- /dev/null
+++ b/testing/talos/talos/getinfooffline/manifest.json
@@ -0,0 +1,27 @@
+{
+ "manifest_version": 2,
+ "name": "Make the getinfo step happen offline for Talos",
+ "description": "Puts the browser in offline mode during the getinfo step and then uninstalls itself so that the browser runs in online mode for subsequent starts. This is useful when running startup tests that instal add-ons that like to open up network requests after being installed for the first time, which normally would cause the test runner to crash.",
+ "version": "0.1",
+
+ "browser_specific_settings": {
+ "gecko": {
+ "id": "getinfooffline@mozilla.org"
+ }
+ },
+
+ "background": {
+ "scripts": ["background.js"]
+ },
+
+ "experiment_apis": {
+ "getinfooffline": {
+ "schema": "schema.json",
+ "parent": {
+ "scopes": ["addon_parent"],
+ "script": "api.js",
+ "events": ["startup"]
+ }
+ }
+ }
+}
diff --git a/testing/talos/talos/getinfooffline/schema.json b/testing/talos/talos/getinfooffline/schema.json
new file mode 100644
index 0000000000..fe51488c70
--- /dev/null
+++ b/testing/talos/talos/getinfooffline/schema.json
@@ -0,0 +1 @@
+[]
diff --git a/testing/talos/talos/heavy.py b/testing/talos/talos/heavy.py
new file mode 100644
index 0000000000..982a08f05a
--- /dev/null
+++ b/testing/talos/talos/heavy.py
@@ -0,0 +1,146 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+"""
+Downloads Heavy profiles from TaskCluster.
+"""
+import datetime
+import functools
+import os
+import tarfile
+from email.utils import parsedate
+
+import requests
+from mozlog import get_proxy_logger
+from requests.adapters import HTTPAdapter
+
+LOG = get_proxy_logger()
+TC_LINK = (
+ "https://index.taskcluster.net/v1/task/garbage.heavyprofile/"
+ "artifacts/public/today-%s.tgz"
+)
+
+
+class ProgressBar(object):
+ def __init__(self, size, template="\r%d%%"):
+ self.size = size
+ self.current = 0
+ self.tens = 0
+ self.template = template
+
+ def __enter__(self):
+ return self
+
+ def __exit__(self, exc_type, exc_val, exc_tb):
+ return False
+
+ def incr(self):
+ if self.current == self.size:
+ return
+ percent = float(self.current) / float(self.size) * 100
+ tens, __ = divmod(percent, 10)
+ if tens > self.tens:
+ LOG.info(self.template % percent)
+ self.tens = tens
+
+ self.current += 1
+
+
+def follow_redirects(url, max=3):
+ location = url
+ current = 0
+ page = requests.head(url)
+ while page.status_code == 303 and current < max:
+ current += 1
+ location = page.headers["Location"]
+ page = requests.head(location)
+ if page.status_code == 303 and current == max:
+ raise ValueError("Max redirects Reached")
+
+ last_modified = page.headers.get("Last-Modified", None)
+ if last_modified is not None:
+ last_modified = datetime.datetime(*parsedate(last_modified)[:6])
+ return location, last_modified
+
+
+def _recursive_mtime(path):
+ max = os.path.getmtime(path)
+ for root, dirs, files in os.walk(path):
+ for element in dirs + files:
+ age = os.path.getmtime(os.path.join(root, element))
+ if age > max:
+ max = age
+ return max
+
+
+def profile_age(profile_dir, last_modified=None):
+ if last_modified is None:
+ last_modified = datetime.datetime.now()
+
+ profile_ts = _recursive_mtime(profile_dir)
+ profile_ts = datetime.datetime.fromtimestamp(profile_ts)
+ return (last_modified - profile_ts).days
+
+
+def download_profile(name, profiles_dir=None):
+ if profiles_dir is None:
+ profiles_dir = os.path.join(os.path.expanduser("~"), ".mozilla", "profiles")
+ profiles_dir = os.path.abspath(profiles_dir)
+ if not os.path.exists(profiles_dir):
+ os.makedirs(profiles_dir)
+
+ target = os.path.join(profiles_dir, name)
+ url = TC_LINK % name
+ cache_dir = os.path.join(profiles_dir, ".cache")
+ if not os.path.exists(cache_dir):
+ os.makedirs(cache_dir)
+
+ archive_file = os.path.join(cache_dir, "today-%s.tgz" % name)
+
+ url, last_modified = follow_redirects(url)
+ if os.path.exists(target):
+ age = profile_age(target, last_modified)
+ if age < 7:
+ # profile is not older than a week, we're good
+ LOG.info("Local copy of %r is fresh enough" % name)
+ LOG.info("%d days old" % age)
+ return target
+
+ LOG.info("Downloading from %r" % url)
+ session = requests.Session()
+ session.mount("https://", HTTPAdapter(max_retries=5))
+ req = session.get(url, stream=True, timeout=20)
+ req.raise_for_status()
+
+ total_length = int(req.headers.get("content-length"))
+
+ # XXX implement Range to resume download on disconnects
+ template = "Download progress %d%%"
+ with open(archive_file, "wb") as f:
+ iter = req.iter_content(chunk_size=1024)
+ # pylint --py3k W1619
+ size = total_length / 1024 + 1
+ with ProgressBar(size=size, template=template) as bar:
+ for chunk in iter:
+ if chunk:
+ f.write(chunk)
+ bar.incr()
+
+ LOG.info("Extracting profile in %r" % target)
+ template = "Extraction progress %d%%"
+
+ with tarfile.open(archive_file, "r:gz") as tar:
+ LOG.info("Checking the tarball content...")
+ size = len(list(tar))
+ with ProgressBar(size=size, template=template) as bar:
+
+ def _extract(self, *args, **kw):
+ bar.incr()
+ return self.old(*args, **kw)
+
+ tar.old = tar.extract
+ tar.extract = functools.partial(_extract, tar)
+ tar.extractall(target)
+ LOG.info("Profile downloaded.")
+ return target
diff --git a/testing/talos/talos/mainthreadio.py b/testing/talos/talos/mainthreadio.py
new file mode 100644
index 0000000000..4c3ac19913
--- /dev/null
+++ b/testing/talos/talos/mainthreadio.py
@@ -0,0 +1,189 @@
+# -*- Mode: python; tab-width: 8; indent-tabs-mode: nil -*-
+# vim: set ts=8 sts=4 et sw=4 tw=80:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import os
+import re
+from collections import OrderedDict
+
+from talos import allowlist
+
+SCRIPT_DIR = os.path.abspath(os.path.realpath(os.path.dirname(__file__)))
+
+STAGE_STARTUP = 0
+STAGE_STRINGS = ("startup", "normal", "shutdown")
+
+LENGTH_IO_ENTRY = 5
+LENGTH_NEXT_STAGE_ENTRY = 2
+TOKEN_NEXT_STAGE = "NEXT-STAGE"
+
+INDEX_OPERATION = 1
+INDEX_DURATION = 2
+INDEX_EVENT_SOURCE = 3
+INDEX_FILENAME = 4
+
+KEY_COUNT = "Count"
+KEY_DURATION = "Duration"
+KEY_NO_FILENAME = "(not available)"
+KEY_RUN_COUNT = "RunCount"
+
+LEAKED_SYMLINK_PREFIX = "::\\{"
+
+PATH_SUBSTITUTIONS = OrderedDict(
+ [
+ ("profile", "{profile}"),
+ ("firefox", "{xre}"),
+ ("desktop", "{desktop}"),
+ ("fonts", "{fonts}"),
+ ("appdata", " {appdata}"),
+ ]
+)
+NAME_SUBSTITUTIONS = OrderedDict(
+ [
+ ("installtime", "{time}"),
+ ("prefetch", "{prefetch}"),
+ ("thumbnails", "{thumbnails}"),
+ # {appdata}\locallow\mozilla\temp-{*}
+ ("temp-{", "{temp}"),
+ ("cltbld.", "{cltbld}"),
+ ("windows media player", "{media_player}"),
+ # regex order matters
+ (re.compile(r"{\w{8}-\w{4}-\w{4}-\w{4}-\w{12}}"), "{uuid}"),
+ (re.compile(r"{uuid}\.\d+\.ver\w+\.db"), "{uuid-db}"),
+ ]
+)
+
+TUPLE_EVENT_SOURCE_INDEX = 1
+TUPLE_FILENAME_INDEX = 2
+ALLOWLIST_FILENAME = os.path.join(SCRIPT_DIR, "mtio-allowlist.json")
+
+
+def parse(logfilename, data):
+ try:
+ with open(logfilename, "r") as logfile:
+ if not logfile:
+ return False
+ stage = STAGE_STARTUP
+ for line in logfile:
+ prev_filename = str()
+ entries = line.strip().split(",")
+ if len(entries) == LENGTH_IO_ENTRY:
+ if stage == STAGE_STARTUP:
+ continue
+ if entries[INDEX_FILENAME] == KEY_NO_FILENAME:
+ continue
+ # Format 1: I/O entry
+
+ # Temporary hack: logs are leaking Windows NT symlinks.
+ # We need to ignore those.
+ if entries[INDEX_FILENAME].startswith(LEAKED_SYMLINK_PREFIX):
+ continue
+
+ # We'll key each entry on (stage, event source,
+ # filename, operation)
+ key_tuple = (
+ STAGE_STRINGS[stage],
+ entries[INDEX_EVENT_SOURCE],
+ entries[INDEX_FILENAME],
+ entries[INDEX_OPERATION],
+ )
+ if key_tuple not in data:
+ data[key_tuple] = {
+ KEY_COUNT: 1,
+ KEY_RUN_COUNT: 1,
+ KEY_DURATION: float(entries[INDEX_DURATION]),
+ }
+ else:
+ if prev_filename != entries[INDEX_FILENAME]:
+ data[key_tuple][KEY_RUN_COUNT] += 1
+ data[key_tuple][KEY_COUNT] += 1
+ data[key_tuple][KEY_DURATION] += float(entries[INDEX_DURATION])
+ prev_filename = entries[INDEX_FILENAME]
+ elif (
+ len(entries) == LENGTH_NEXT_STAGE_ENTRY
+ and entries[1] == TOKEN_NEXT_STAGE
+ ):
+ # Format 2: next stage
+ stage = stage + 1
+ return True
+ except IOError as e:
+ print("%s: %s" % (e.filename, e.strerror))
+ return False
+
+
+def write_output(outfilename, data):
+ # Write the data out so that we can track it
+ try:
+ with open(outfilename, "w") as outfile:
+ outfile.write("[\n")
+ for idx, (key, value) in enumerate(data.items()):
+ output = ' ["%s", "%s", "%s", "%s", %d, %d, %f]' % (
+ key[0],
+ key[1],
+ key[2],
+ key[3],
+ value[KEY_COUNT],
+ value[KEY_RUN_COUNT],
+ value[KEY_DURATION],
+ )
+ outfile.write(output)
+ if idx >= 0:
+ outfile.write(",\n")
+ else:
+ outfile.write("\n")
+ outfile.write("]\n")
+ return True
+ except IOError as e:
+ print("%s: %s" % (e.filename, e.strerror))
+ return False
+
+
+def main(argv):
+ if len(argv) < 4:
+ print("Usage: %s <main_thread_io_log_file> <output_file> <xre_path>" % argv[0])
+ return 1
+ if not os.path.exists(argv[3]):
+ print('XRE Path "%s" does not exist' % argv[3])
+ return 1
+ data = {}
+ if not parse(argv[1], data):
+ print("Log parsing failed")
+ return 1
+
+ wl = allowlist.Allowlist(
+ test_name="mainthreadio",
+ paths={"{xre}": argv[3]},
+ path_substitutions=PATH_SUBSTITUTIONS,
+ name_substitutions=NAME_SUBSTITUTIONS,
+ event_sources=["PoisonIOInterposer"],
+ )
+ if not wl.load(ALLOWLIST_FILENAME):
+ print("Failed to load allowlist")
+ return 1
+
+ wl.filter(data, TUPLE_FILENAME_INDEX)
+
+ if not write_output(argv[2], data):
+ return 1
+
+ # Disabled until we enable TBPL oranges
+ # search for unknown filenames
+ errors = wl.check(data, TUPLE_FILENAME_INDEX, TUPLE_EVENT_SOURCE_INDEX)
+ if errors:
+ strs = wl.get_error_strings(errors)
+ wl.print_errors(strs)
+
+ # search for duration > 1.0
+ errors = wl.checkDuration(data, TUPLE_FILENAME_INDEX, "Duration")
+ if errors:
+ strs = wl.get_error_strings(errors)
+ wl.print_errors(strs)
+
+ return 0
+
+
+if __name__ == "__main__":
+ import sys
+
+ sys.exit(main(sys.argv))
diff --git a/testing/talos/talos/mtio-allowlist.json b/testing/talos/talos/mtio-allowlist.json
new file mode 100644
index 0000000000..f677ad5594
--- /dev/null
+++ b/testing/talos/talos/mtio-allowlist.json
@@ -0,0 +1,166 @@
+{
+ "c:\\program files\\nvidia corporation\\3d vision": {},
+ "c:\\program files\\nvidia corporation\\3d vision\\npnv3dv.dll": {},
+ "c:\\program files\\nvidia corporation\\3d vision\\npnv3dvstreaming.dll": {},
+ "c:\\program files\\{media_player}": {},
+ "c:\\programdata": {},
+ "c:\\programdata\\microsoft": {},
+ "c:\\programdata\\microsoft\\desktop.ini": {},
+ "c:\\programdata\\microsoft\\windows": {},
+ "c:\\users": {},
+ "c:\\users\\cltbld": {},
+ "c:\\users\\cltbld\\appdata": {},
+ "c:\\users\\cltbld\\appdata\\local": {},
+ "c:\\users\\desktop.ini": {},
+ "c:\\users\\public": {},
+ "c:\\users\\public\\desktop.ini": {},
+ "c:\\users\\{cltbld}": {},
+ "c:\\windows\\system32\\en-us\\kernelbase.dll.mui": {},
+ "c:\\windows\\system32\\propsys.dll": {},
+ "{appdata}": {},
+ "{appdata}\\local": {},
+ "{appdata}\\local\\microsoft\\windows\\caches": {},
+ "{appdata}\\local\\microsoft\\windows\\caches\\cversions.1.db": {},
+ "{appdata}\\local\\microsoft\\windows\\caches\\{uuid-db}": {},
+ "{appdata}\\local\\temp": {},
+ "{appdata}\\locallow\\mozilla": {},
+ "{appdata}\\locallow\\mozilla\\{temp}": {},
+ "{appdata}\\roaming": {},
+ "{appdata}\\roaming\\microsoft": {},
+ "{appdata}\\roaming\\microsoft\\desktop.ini": {},
+ "{appdata}\\roaming\\microsoft\\windows": {},
+ "{appdata}\\roaming\\mozilla": {},
+ "{appdata}\\roaming\\mozilla\\extensions\\{uuid}": {},
+ "{appdata}\\roaming\\mozilla\\plugins": {},
+ "{appdata}\\roaming\\temp": {},
+ "{desktop}\\desktop.ini": {},
+ "{fonts}\\arial.ttf": {},
+ "{fonts}\\arialbd.ttf": {},
+ "{fonts}\\arialbi.ttf": {},
+ "{fonts}\\ariali.ttf": {},
+ "{fonts}\\ariblk.ttf": {},
+ "{fonts}\\consola.ttf": {},
+ "{fonts}\\corbel.ttf": {},
+ "{fonts}\\corbelb.ttf": {},
+ "{fonts}\\cour.ttf": {},
+ "{fonts}\\courbd.ttf": {},
+ "{fonts}\\gautami.ttf": {},
+ "{fonts}\\georgia.ttf": {},
+ "{fonts}\\georgiab.ttf": {},
+ "{fonts}\\georgiai.ttf": {},
+ "{fonts}\\georgiaz.ttf": {},
+ "{fonts}\\gulim.ttc": {},
+ "{fonts}\\impact.ttf": {},
+ "{fonts}\\iskpota.ttf": {},
+ "{fonts}\\kalinga.ttf": {},
+ "{fonts}\\kartika.ttf": {},
+ "{fonts}\\l_10646.ttf": {},
+ "{fonts}\\latha.ttf": {},
+ "{fonts}\\lucon.ttf": {},
+ "{fonts}\\mangal.ttf": {},
+ "{fonts}\\mangalb.ttf": {},
+ "{fonts}\\meiryo.ttc": {},
+ "{fonts}\\meiryob.ttc": {},
+ "{fonts}\\micross.ttf": {},
+ "{fonts}\\mingliu.ttc": {},
+ "{fonts}\\mingliub.ttc": {},
+ "{fonts}\\msgothic.ttc": {},
+ "{fonts}\\msmincho.ttc": {},
+ "{fonts}\\msuighur.ttf": {},
+ "{fonts}\\msyh.ttf": {},
+ "{fonts}\\msyhbd.ttf": {},
+ "{fonts}\\pala.ttf": {},
+ "{fonts}\\palab.ttf": {},
+ "{fonts}\\raavi.ttf": {},
+ "{fonts}\\segoeui.ttf": {},
+ "{fonts}\\segoeuib.ttf": {},
+ "{fonts}\\segoeuii.ttf": {},
+ "{fonts}\\segoeuil.ttf": {},
+ "{fonts}\\segoeuiz.ttf": {},
+ "{fonts}\\seguisym.ttf": {},
+ "{fonts}\\shruti.ttf": {},
+ "{fonts}\\simhei.ttf": {},
+ "{fonts}\\simkai.ttf": {},
+ "{fonts}\\simsun.ttc": {},
+ "{fonts}\\simsunb.ttf": {},
+ "{fonts}\\sylfaen.ttf": {},
+ "{fonts}\\tahoma.ttf": {},
+ "{fonts}\\tahomabd.ttf": {},
+ "{fonts}\\timesbd.ttf": {},
+ "{fonts}\\timesbi.ttf": {},
+ "{fonts}\\timesi.ttf": {},
+ "{fonts}\\trebuc.ttf": {},
+ "{fonts}\\trebucbd.ttf": {},
+ "{fonts}\\trebucbi.ttf": {},
+ "{fonts}\\trebucit.ttf": {},
+ "{fonts}\\tunga.ttf": {},
+ "{fonts}\\verdana.ttf": {},
+ "{fonts}\\verdanab.ttf": {},
+ "{fonts}\\verdanai.ttf": {},
+ "{fonts}\\verdanaz.ttf": {},
+ "{fonts}\\vrinda.ttf": {},
+ "{profile}": {},
+ "{profile}\\": {},
+ "{profile}\\_cache_clean_": {},
+ "{profile}\\addons.sqlite": {},
+ "{profile}\\blocklist.xml": {},
+ "{profile}\\cache2\\index": {},
+ "{profile}\\cache2\\index.log": {},
+ "{profile}\\cache2\\index.tmp": {},
+ "{profile}\\cache\\_cache_001_": {},
+ "{profile}\\cache\\_cache_002_": {},
+ "{profile}\\cache\\_cache_003_": {},
+ "{profile}\\cache\\_cache_map_": {},
+ "{profile}\\cert8.db": {},
+ "{profile}\\cookies.sqlite": {},
+ "{profile}\\cookies.sqlite-journal": {},
+ "{profile}\\cookies.sqlite-shm": {},
+ "{profile}\\cookies.sqlite-wal": {},
+ "{profile}\\extensions\\pageloader@mozilla.org": {},
+ "{profile}\\extensions\\pageloader@mozilla.org\\chrome\\profiler.js": {},
+ "{profile}\\extensions\\pageloader@mozilla.org\\chrome\\talos-content.js": {},
+ "{profile}\\extensions\\pageloader@mozilla.org\\chrome\\tscroll.js": {},
+ "{profile}\\extensions\\pageloader@mozilla.org\\install.rdf": {},
+ "{profile}\\extensions\\pageloader@mozilla.org\\plugins": {},
+ "{profile}\\extensions\\pageloader@mozilla.org\\searchplugins": {},
+ "{profile}\\extensions\\talos-powers@mozilla.org": {},
+ "{profile}\\extensions\\talos-powers@mozilla.org\\bootstrap.js": {},
+ "{profile}\\extensions\\talos-powers@mozilla.org\\chrome.manifest": {},
+ "{profile}\\extensions\\talos-powers@mozilla.org\\chrome\\talos-powers-content.js": {},
+ "{profile}\\extensions\\talos-powers@mozilla.org\\components\\talospowersservice.js": {},
+ "{profile}\\extensions\\talos-powers@mozilla.org\\install.rdf": {},
+ "{profile}\\extensions\\talos-powers@mozilla.org\\plugins": {},
+ "{profile}\\extensions\\talos-powers@mozilla.org\\searchplugins": {},
+ "{profile}\\favicons.sqlite": {},
+ "{profile}\\favicons.sqlite-journal": {},
+ "{profile}\\favicons.sqlite-shm": {},
+ "{profile}\\favicons.sqlite-wal": {},
+ "{profile}\\key3.db": {},
+ "{profile}\\places.sqlite": {},
+ "{profile}\\places.sqlite-journal": {},
+ "{profile}\\places.sqlite-shm": {},
+ "{profile}\\places.sqlite-wal": {},
+ "{profile}\\pluginreg.dat": {},
+ "{profile}\\pluginreg.dat.tmp": {},
+ "{profile}\\plugins": {},
+ "{profile}\\prefs-1.js": {},
+ "{profile}\\prefs.js": {},
+ "{profile}\\searchplugins": {},
+ "{profile}\\secmod.db": {},
+ "{profile}\\startupcache": {},
+ "{profile}\\startupcache\\startupcache.4.little": {},
+ "{profile}\\telemetry.shutdowntime.txt.tmp": {},
+ "{profile}\\{thumbnails}": {},
+ "{xre}\\browser\\plugins": {},
+ "{xre}\\browser\\searchplugins": {},
+ "{xre}\\browser\\searchplugins\\amazondotcom.xml": {},
+ "{xre}\\browser\\searchplugins\\bing.xml": {},
+ "{xre}\\browser\\searchplugins\\ddg.xml": {},
+ "{xre}\\browser\\searchplugins\\ebay.xml": {},
+ "{xre}\\browser\\searchplugins\\google.xml": {},
+ "{xre}\\browser\\searchplugins\\twitter.xml": {},
+ "{xre}\\browser\\searchplugins\\wikipedia.xml": {},
+ "{xre}\\browser\\searchplugins\\yahoo.xml": {},
+ "{xre}\\distribution\\searchplugins": {},
+ "{xre}\\pingsender.exe": {}
+}
diff --git a/testing/talos/talos/output.py b/testing/talos/talos/output.py
new file mode 100644
index 0000000000..3b3b491f8b
--- /dev/null
+++ b/testing/talos/talos/output.py
@@ -0,0 +1,355 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+"""output formats for Talos"""
+# NOTE: we have a circular dependency with output.py when we import results
+import simplejson as json
+from mozlog import get_proxy_logger
+
+from talos import filter, utils
+
+LOG = get_proxy_logger()
+
+
+class Output(object):
+ """abstract base class for Talos output"""
+
+ @classmethod
+ def check(cls, urls):
+ """check to ensure that the urls are valid"""
+
+ def __init__(self, results, tsresult_class):
+ """
+ - results : TalosResults instance
+ - tsresult_class : Results class
+ """
+ self.results = results
+ self.tsresult_class = tsresult_class
+
+ def __call__(self):
+ suites = []
+ test_results = {
+ "application": {
+ "name": self.results.results[0].browser_name.lower(),
+ "version": self.results.results[0].browser_version,
+ },
+ "framework": {
+ "name": self.results.results[0].framework,
+ },
+ "suites": suites,
+ }
+
+ for test in self.results.results:
+ # serialize test results
+ tsresult = None
+ if not test.using_xperf:
+ subtests = []
+ suite = {
+ "name": test.name(),
+ "extraOptions": self.results.extra_options or [],
+ "subtests": subtests,
+ "shouldAlert": test.test_config.get("suite_should_alert", True),
+ }
+
+ suites.append(suite)
+ vals = []
+ replicates = {}
+
+ # TODO: counters!!!! we don't have any, but they suffer the same
+ for result in test.results:
+ # XXX this will not work for manifests which list
+ # the same page name twice. It also ignores cycles
+ for page, val in result.raw_values():
+ if page == "NULL":
+ page = test.name()
+ if tsresult is None:
+ tsresult = r = self.tsresult_class()
+ r.results = [
+ {"index": 0, "page": test.name(), "runs": val}
+ ]
+ else:
+ r = tsresult.results[0]
+ if r["page"] == test.name():
+ r["runs"].extend(val)
+ replicates.setdefault(page, []).extend(val)
+
+ tresults = [tsresult] if tsresult else test.results
+
+ # Merge results for the same page when using cycle > 1
+ merged_results = {}
+ for result in tresults:
+ results = []
+ for r in result.results:
+ page = r["page"]
+ if page in merged_results:
+ merged_results[page]["runs"].extend(r["runs"])
+ else:
+ merged_results[page] = r
+ results.append(r)
+ # override the list of page results for each run
+ result.results = results
+
+ for result in tresults:
+ filtered_results = result.values(
+ suite["name"], test.test_config["filters"]
+ )
+ vals.extend([[i["value"], j] for i, j in filtered_results])
+ subtest_index = 0
+ for val, page in filtered_results:
+ if page == "NULL":
+ # no real subtests
+ page = test.name()
+ subtest = {
+ "name": page,
+ "value": val["filtered"],
+ "replicates": replicates[page],
+ }
+ # if results are from a comparison test i.e. perf-reftest, it will also
+ # contain replicates for 'base' and 'reference'; we wish to keep those
+ # to reference; actual results were calculated as the difference of those
+ base_runs = result.results[subtest_index].get("base_runs", None)
+ ref_runs = result.results[subtest_index].get("ref_runs", None)
+ if base_runs and ref_runs:
+ subtest["base_replicates"] = base_runs
+ subtest["ref_replicates"] = ref_runs
+
+ subtests.append(subtest)
+ subtest_index += 1
+
+ if test.test_config.get("lower_is_better") is not None:
+ subtest["lowerIsBetter"] = test.test_config[
+ "lower_is_better"
+ ]
+ if test.test_config.get("alert_threshold") is not None:
+ subtest["alertThreshold"] = test.test_config[
+ "alert_threshold"
+ ]
+ if test.test_config.get("subtest_alerts") is not None:
+ subtest["shouldAlert"] = test.test_config["subtest_alerts"]
+ if test.test_config.get("alert_threshold") is not None:
+ subtest["alertThreshold"] = test.test_config[
+ "alert_threshold"
+ ]
+ if test.test_config.get("unit"):
+ subtest["unit"] = test.test_config["unit"]
+
+ # if there is only one subtest, carry alerting setting from the suite
+ if len(subtests) == 1:
+ subtests[0]["shouldAlert"] = suite["shouldAlert"]
+ # if there is more than one subtest, calculate a summary result
+ elif len(subtests) > 1:
+ suite["value"] = self.construct_results(vals, testname=test.name())
+ if test.test_config.get("lower_is_better") is not None:
+ suite["lowerIsBetter"] = test.test_config["lower_is_better"]
+ if test.test_config.get("alert_threshold") is not None:
+ suite["alertThreshold"] = test.test_config["alert_threshold"]
+
+ # counters results_aux data
+ counter_subtests = []
+ for cd in test.all_counter_results:
+ for name, vals in cd.items():
+ # We want to add the xperf data as talos_counters
+ # exclude counters whose values are tuples (bad for
+ # graphserver)
+ if len(vals) > 0 and isinstance(vals[0], list):
+ continue
+
+ # mainthread IO is a list of filenames and accesses, we do
+ # not report this as a counter
+ if "mainthreadio" in name:
+ continue
+
+ # responsiveness has it's own metric, not the mean
+ # TODO: consider doing this for all counters
+ if "responsiveness" == name:
+ subtest = {
+ "name": name,
+ "value": filter.responsiveness_Metric(vals),
+ }
+ counter_subtests.append(subtest)
+ continue
+
+ subtest = {
+ "name": name,
+ "value": 0.0,
+ }
+ counter_subtests.append(subtest)
+
+ if test.using_xperf:
+ if len(vals) > 0:
+ subtest["value"] = vals[0]
+ else:
+ # calculate mean value
+ if len(vals) > 0:
+ varray = [float(v) for v in vals]
+ subtest["value"] = filter.mean(varray)
+ if counter_subtests:
+ suites.append(
+ {
+ "name": test.name(),
+ "extraOptions": self.results.extra_options or [],
+ "subtests": counter_subtests,
+ "shouldAlert": test.test_config.get("suite_should_alert", True),
+ }
+ )
+ return test_results
+
+ def output(self, results, results_url):
+ """output to the a file if results_url starts with file://
+ - results : json instance
+ - results_url : file:// URL
+ """
+
+ # parse the results url
+ results_url_split = utils.urlsplit(results_url)
+ results_scheme, results_server, results_path, _, _ = results_url_split
+
+ if results_scheme in ("http", "https"):
+ self.post(results, results_server, results_path, results_scheme)
+ elif results_scheme == "file":
+ with open(results_path, "w") as f:
+ for result in results:
+ f.write("%s\n" % result)
+ else:
+ raise NotImplementedError(
+ "%s: %s - only http://, https://, and file:// supported"
+ % (self.__class__.__name__, results_url)
+ )
+
+ # This is the output that treeherder expects to find when parsing the
+ # log file
+ if "gecko-profile" in self.results.extra_options:
+ LOG.info("gecko-profile enabled")
+
+ for suite in results["suites"]:
+ suite["shouldAlert"] = False
+ for subtest in suite["subtests"]:
+ subtest["shouldAlert"] = False
+
+ LOG.info("PERFHERDER_DATA: %s" % json.dumps(results, ignore_nan=True))
+
+ if results_scheme in ("file"):
+ json.dump(
+ results,
+ open(results_path, "w"),
+ indent=2,
+ sort_keys=True,
+ ignore_nan=True,
+ )
+
+ def post(self, results, server, path, scheme):
+ raise NotImplementedError("Abstract base class")
+
+ @classmethod
+ def shortName(cls, name):
+ """short name for counters"""
+ names = {"% Processor Time": "%cpu", "XRes": "xres"}
+ return names.get(name, name)
+
+ @classmethod
+ def isMemoryMetric(cls, resultName):
+ """returns if the result is a memory metric"""
+ memory_metric = ["xres"] # measured in bytes
+ return bool([i for i in memory_metric if i in resultName])
+
+ @classmethod
+ def v8_Metric(cls, val_list):
+ results = [i for i, j in val_list]
+ score = 100 * filter.geometric_mean(results)
+ return score
+
+ @classmethod
+ def JS_Metric(cls, val_list):
+ """v8 benchmark score"""
+ results = [i for i, j in val_list]
+ return sum(results)
+
+ @classmethod
+ def benchmark_score(cls, val_list):
+ """
+ benchmark_score: ares6/jetstream self reported as 'geomean'
+ """
+ results = [i for i, j in val_list if j == "geomean"]
+ return filter.mean(results)
+
+ @classmethod
+ def stylebench_score(cls, val_list):
+ """
+ stylebench_score: https://bug-172968-attachments.webkit.org/attachment.cgi?id=319888
+ """
+ correctionFactor = 3
+ results = [i for i, j in val_list]
+
+ # stylebench has 5 tests, each of these are made of up 5 subtests
+ #
+ # * Adding classes.
+ # * Removing classes.
+ # * Mutating attributes.
+ # * Adding leaf elements.
+ # * Removing leaf elements.
+ #
+ # which are made of two subtests each (sync/async) and repeated 5 times
+ # each, thus, the list here looks like:
+ #
+ # [Test name/Adding classes - 0/ Sync; <x>]
+ # [Test name/Adding classes - 0/ Async; <y>]
+ # [Test name/Adding classes - 0; <x> + <y>]
+ # [Test name/Removing classes - 0/ Sync; <x>]
+ # [Test name/Removing classes - 0/ Async; <y>]
+ # [Test name/Removing classes - 0; <x> + <y>]
+ # ...
+ # [Test name/Adding classes - 1 / Sync; <x>]
+ # [Test name/Adding classes - 1 / Async; <y>]
+ # [Test name/Adding classes - 1 ; <x> + <y>]
+ # ...
+ # [Test name/Removing leaf elements - 4; <x> + <y>]
+ # [Test name; <sum>] <- This is what we want.
+ #
+ # So, 5 (subtests) *
+ # 5 (repetitions) *
+ # 3 (entries per repetition (sync/async/sum)) =
+ # 75 entries for test before the sum.
+ #
+ # We receive 76 entries per test, which ads up to 380. We want to use
+ # the 5 test entries, not the rest.
+ if len(results) != 380:
+ raise Exception(
+ "StyleBench requires 380 entries, found: %s instead" % len(results)
+ )
+
+ results = results[75::76]
+ # pylint --py3k W1619
+ score = 60 * 1000 / filter.geometric_mean(results) / correctionFactor
+ return score
+
+ @classmethod
+ def damp_score(cls, val_list):
+ """
+ damp_score: damp is only interested in the value of subtests and will
+ aggregate data from several suites.
+ Use a hardcoded value for the suite to avoid inconsistencies.
+ """
+ return 100
+
+ def construct_results(self, vals, testname):
+ if "responsiveness" in testname:
+ return filter.responsiveness_Metric([val for (val, page) in vals])
+ elif testname.startswith("v8_7"):
+ return self.v8_Metric(vals)
+ elif testname.startswith("kraken"):
+ return self.JS_Metric(vals)
+ elif testname.startswith("ares6"):
+ return self.benchmark_score(vals)
+ elif testname.startswith("jetstream"):
+ return self.benchmark_score(vals)
+ elif testname.startswith("speedometer"):
+ return self.speedometer_score(vals)
+ elif testname.startswith("stylebench"):
+ return self.stylebench_score(vals)
+ elif testname.startswith("damp"):
+ return self.damp_score(vals)
+ elif len(vals) > 1:
+ return filter.geometric_mean([i for i, j in vals])
+ else:
+ return filter.mean([i for i, j in vals])
diff --git a/testing/talos/talos/pageloader/README b/testing/talos/talos/pageloader/README
new file mode 100644
index 0000000000..0035138b11
--- /dev/null
+++ b/testing/talos/talos/pageloader/README
@@ -0,0 +1,63 @@
+Pageload Test Component
+=======================
+
+Pageloader tests are defined by tp.manifest, the location of which is
+provided in the preference talos.tpmanifest. If that preference is not
+set (ie, for startup tests), this extension has no effect.
+
+
+Manifest file format
+====================
+
+Comments in the manifest file start with a #. Each line may be:
+
+* a URL (absolute or relative to the manifest)
+
+This URL is added to the list of tests.
+
+* one or more flags, followed by whitespace, followed by a URL
+
+The only flag supported currently is '%', which indicates that
+a test will do its own timing. (See Self-timing Tests below.)
+
+* "include" followed by whitespace, followed by a URL
+
+Parse the given manifest file.
+
+Self-timing Tests
+=================
+
+Most timing tests are interested in timing how long it takes the page
+to load; that is, from the start of page loading until the 'load'
+event is dispatched. By default, this is what the pageloader will
+time. However, if a test URL has the % flag, the test is expected to
+report its own timing. For this purpose, the pageloader will provide
+a function named "tpRecordTime" in the test's global object that it
+should call once it has performed whatever timing it wants to do.
+The given value will be used as the timing result for this test.
+
+Output format
+=============
+
+The result is a dump to stdout via dump() --
+browser.dom.window.dump.enabled must be set to true in the profile.
+
+Sample output:
+
+__start_tp_report
+_x_x_mozilla_page_load,778.5,NaN,NaN
+_x_x_mozilla_page_load_details,avgmedian|778.5|average|766.75|minimum|NaN|maximum|NaN|stddev|NaN|0;file:///c:/proj/mozilla-cvs/perf/tp2/base/www.cnn.com/index.html;778.5;766.75;722;1027;1027;788;777;722;780|...
+__end_tp_report
+
+Note that the minimum, maximum, stddev are not calculated; they're
+always reported as NaN. (They were the minimum and maximum values of
+any sampled value, and the standard deviation across all sampled
+values -- not very useful.)
+
+TODO
+====
+
+* Command line option to choose whether to run with or without browser chrome. Currently runs without.
+
+* Tinderbox-dropping style output
+ * better yet would be to teach tinderbox about JSON
diff --git a/testing/talos/talos/pageloader/api.js b/testing/talos/talos/pageloader/api.js
new file mode 100644
index 0000000000..7a88d0e62c
--- /dev/null
+++ b/testing/talos/talos/pageloader/api.js
@@ -0,0 +1,136 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is DOM Inspector.
+ *
+ * The Initial Developer of the Original Code is
+ * Christopher A. Aillon <christopher@aillon.com>.
+ * Portions created by the Initial Developer are Copyright (C) 2003
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Christopher A. Aillon <christopher@aillon.com>
+ * L. David Baron, Mozilla Corporation <dbaron@dbaron.org> (modified for reftest)
+ * Vladimir Vukicevic, Mozilla Corporation <dbaron@dbaron.org> (modified for tp)
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+/* globals AppConstants, Services, XPCOMUtils */
+
+const { setTimeout } = ChromeUtils.importESModule(
+ "resource://gre/modules/Timer.sys.mjs"
+);
+
+XPCOMUtils.defineLazyServiceGetter(
+ this,
+ "aomStartup",
+ "@mozilla.org/addons/addon-manager-startup;1",
+ "amIAddonManagerStartup"
+);
+
+async function talosStart() {
+ // Tests are driven from pageloader.xhtml. We need to be careful to open
+ // pageloader.xhtml before dismissing the default browser window or we
+ // may inadvertently cause the browser to exit before the pageloader.xhtml
+ // window is opened. Start by finding or waiting for the default window.
+ let defaultWin = Services.wm.getMostRecentWindow("navigator:browser");
+ if (!defaultWin) {
+ defaultWin = await new Promise(resolve => {
+ const listener = {
+ onOpenWindow(win) {
+ if (
+ win.docShell.domWindow.location.href ==
+ AppConstants.BROWSER_CHROME_URL
+ ) {
+ Services.wm.removeListener(listener);
+ resolve(win);
+ }
+ },
+ };
+ Services.wm.addListener(listener);
+ });
+ }
+
+ // Wwe've got the default window, it is time for pageloader to take over.
+ // Open pageloader.xhtml in a new window and then close the default window.
+ let chromeURL = "chrome://pageloader/content/pageloader.xhtml";
+
+ let args = {};
+ args.wrappedJSObject = args;
+ let newWin = Services.ww.openWindow(
+ null,
+ chromeURL,
+ "_blank",
+ "chrome,dialog=no,all",
+ args
+ );
+
+ await new Promise(resolve => {
+ newWin.addEventListener("load", resolve);
+ });
+ defaultWin.close();
+}
+
+/* globals ExtensionAPI */
+this.pageloader = class extends ExtensionAPI {
+ onStartup() {
+ const manifestURI = Services.io.newURI(
+ "manifest.json",
+ null,
+ this.extension.rootURI
+ );
+ this.chromeHandle = aomStartup.registerChrome(manifestURI, [
+ ["content", "pageloader", "chrome/"],
+ ]);
+
+ if (Services.env.exists("MOZ_USE_PAGELOADER")) {
+ // TalosPowers is a separate WebExtension that may or may not already have
+ // finished loading. tryLoad is used to wait for TalosPowers to be around
+ // before continuing.
+ async function tryLoad() {
+ try {
+ ChromeUtils.importESModule(
+ "resource://talos-powers/TalosParentProfiler.sys.mjs"
+ );
+ } catch (err) {
+ await new Promise(resolve => setTimeout(resolve, 500));
+ return tryLoad();
+ }
+
+ return null;
+ }
+
+ // talosStart is async but we're deliberately not await-ing or return-ing
+ // it here since it doesn't block extension startup.
+ tryLoad().then(() => {
+ talosStart();
+ });
+ }
+ }
+
+ onShutdown() {
+ this.chromeHandle.destruct();
+ }
+};
diff --git a/testing/talos/talos/pageloader/chrome/MozillaFileLogger.js b/testing/talos/talos/pageloader/chrome/MozillaFileLogger.js
new file mode 100644
index 0000000000..3da728ef67
--- /dev/null
+++ b/testing/talos/talos/pageloader/chrome/MozillaFileLogger.js
@@ -0,0 +1,95 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/**
+ * MozillaFileLogger, a log listener that can write to a local file.
+ */
+
+// double logging to account for normal mode and ipc mode (mobile_profile only)
+// Ideally we would remove the dump() and just do ipc logging
+function dumpLog(msg) {
+ dump(msg);
+ MozillaFileLogger.log(msg);
+}
+
+const FOSTREAM_CID = "@mozilla.org/network/file-output-stream;1";
+const LF_CID = "@mozilla.org/file/local;1";
+
+// File status flags. It is a bitwise OR of the following bit flags.
+// Only one of the first three flags below may be used.
+const PR_READ_ONLY = 0x01; // Open for reading only.
+const PR_WRITE_ONLY = 0x02; // Open for writing only.
+const PR_READ_WRITE = 0x04; // Open for reading and writing.
+
+// If the file does not exist, the file is created.
+// If the file exists, this flag has no effect.
+const PR_CREATE_FILE = 0x08;
+
+// The file pointer is set to the end of the file prior to each write.
+const PR_APPEND = 0x10;
+
+// If the file exists, its length is truncated to 0.
+const PR_TRUNCATE = 0x20;
+
+// If set, each write will wait for both the file data
+// and file status to be physically updated.
+const PR_SYNC = 0x40;
+
+// If the file does not exist, the file is created. If the file already
+// exists, no action and NULL is returned.
+const PR_EXCL = 0x80;
+
+/** Init the file logger with the absolute path to the file.
+ It will create and append if the file already exists **/
+var MozillaFileLogger = {};
+
+MozillaFileLogger.init = function (path) {
+ MozillaFileLogger._file = Cc[LF_CID].createInstance(Ci.nsIFile);
+ MozillaFileLogger._file.initWithPath(path);
+ MozillaFileLogger._foStream = Cc[FOSTREAM_CID].createInstance(
+ Ci.nsIFileOutputStream
+ );
+ MozillaFileLogger._foStream.init(
+ this._file,
+ PR_WRITE_ONLY | PR_CREATE_FILE | PR_APPEND,
+ 0o664,
+ 0
+ );
+};
+
+MozillaFileLogger.getLogCallback = function () {
+ return function (msg) {
+ var data = msg.num + " " + msg.level + " " + msg.info.join(" ") + "\n";
+ if (MozillaFileLogger._foStream) {
+ MozillaFileLogger._foStream.write(data, data.length);
+ }
+
+ if (data.includes("SimpleTest FINISH")) {
+ MozillaFileLogger.close();
+ }
+ };
+};
+
+// This is only used from chrome space by the reftest harness
+MozillaFileLogger.log = function (msg) {
+ try {
+ if (MozillaFileLogger._foStream) {
+ MozillaFileLogger._foStream.write(msg, msg.length);
+ }
+ } catch (ex) {}
+};
+
+MozillaFileLogger.close = function () {
+ if (MozillaFileLogger._foStream) {
+ MozillaFileLogger._foStream.close();
+ }
+
+ MozillaFileLogger._foStream = null;
+ MozillaFileLogger._file = null;
+};
+
+try {
+ var filename = Services.prefs.getCharPref("talos.logfile");
+ MozillaFileLogger.init(filename);
+} catch (ex) {} // pref does not exist, return empty string
diff --git a/testing/talos/talos/pageloader/chrome/Profiler.js b/testing/talos/talos/pageloader/chrome/Profiler.js
new file mode 100644
index 0000000000..15524e347d
--- /dev/null
+++ b/testing/talos/talos/pageloader/chrome/Profiler.js
@@ -0,0 +1,221 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/* eslint-env mozilla/frame-script */
+
+// - NOTE: This file is duplicated verbatim at:
+// - talos/pageloader/chrome/Profiler.js
+// - talos/tests/tart/addon/content/Profiler.js
+// - talos/startup_test/tresize/addon/content/Profiler.js
+//
+// - Please keep these copies in sync.
+// - Please make sure your changes apply cleanly to all use cases.
+
+// Finer grained profiler control
+//
+// Use this object to pause and resume the profiler so that it only profiles the
+// relevant parts of our tests.
+var Profiler;
+
+(function () {
+ var _profiler;
+
+ // If this script is loaded in a framescript context, there won't be a
+ // document object, so just use a fallback value in that case.
+ var test_name = this.document ? this.document.location.pathname : "unknown";
+
+ // Whether Profiler has been initialized. Until that happens, most calls
+ // will be ignored.
+ var enabled = false;
+
+ // The subtest name that beginTest() was called with.
+ var currentTest = "";
+
+ // Start time of the current subtest. It will be used to create a duration
+ // marker at the end of the subtest.
+ var profilerSubtestStartTime;
+
+ // Profiling settings.
+ var profiler_interval,
+ profiler_entries,
+ profiler_threadsArray,
+ profiler_featuresArray,
+ profiler_dir;
+
+ try {
+ // eslint-disable-next-line mozilla/use-services
+ _profiler = Cc["@mozilla.org/tools/profiler;1"].getService(Ci.nsIProfiler);
+ } catch (ex) {
+ (typeof dumpLog == "undefined" ? dump : dumpLog)(ex + "\n");
+ }
+
+ // Parses an url query string into a JS object.
+ function searchToObject(locationSearch) {
+ var pairs = locationSearch.substring(1).split("&");
+ var result = {};
+
+ for (var i in pairs) {
+ if (pairs[i] !== "") {
+ var pair = pairs[i].split("=");
+ result[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1] || "");
+ }
+ }
+
+ return result;
+ }
+
+ Profiler = {
+ /**
+ * Initialize the profiler using profiler settings supplied in a JS object.
+ * The following properties on the object are respected:
+ * - gecko_profile_interval
+ * - gecko_profile_entries
+ * - gecko_profile_features
+ * - gecko_profile_threads
+ * - gecko_profile_dir
+ */
+ initFromObject: function Profiler__initFromObject(obj) {
+ if (
+ obj &&
+ "gecko_profile_dir" in obj &&
+ typeof obj.gecko_profile_dir == "string" &&
+ "gecko_profile_interval" in obj &&
+ Number.isFinite(obj.gecko_profile_interval * 1) &&
+ "gecko_profile_entries" in obj &&
+ Number.isFinite(obj.gecko_profile_entries * 1) &&
+ "gecko_profile_features" in obj &&
+ typeof obj.gecko_profile_features == "string" &&
+ "gecko_profile_threads" in obj &&
+ typeof obj.gecko_profile_threads == "string"
+ ) {
+ profiler_interval = obj.gecko_profile_interval;
+ profiler_entries = obj.gecko_profile_entries;
+ profiler_featuresArray = obj.gecko_profile_features.split(",");
+ profiler_threadsArray = obj.gecko_profile_threads.split(",");
+ profiler_dir = obj.gecko_profile_dir;
+ enabled = true;
+ }
+ },
+ initFromURLQueryParams: function Profiler__initFromURLQueryParams(
+ locationSearch
+ ) {
+ this.initFromObject(searchToObject(locationSearch));
+ },
+ beginTest: function Profiler__beginTest(testName) {
+ currentTest = testName;
+ if (_profiler && enabled) {
+ _profiler.StartProfiler(
+ profiler_entries,
+ profiler_interval,
+ profiler_featuresArray,
+ profiler_threadsArray
+ );
+ }
+ },
+ finishTest: function Profiler__finishTest() {
+ if (_profiler && enabled) {
+ _profiler.Pause();
+ _profiler.dumpProfileToFile(
+ profiler_dir + "/" + currentTest + ".profile"
+ );
+ _profiler.StopProfiler();
+ }
+ },
+ finishTestAsync: function Profiler__finishTest() {
+ if (!(_profiler && enabled)) {
+ return undefined;
+ }
+ return new Promise((resolve, reject) => {
+ Services.profiler.getProfileDataAsync().then(
+ profile => {
+ let profileFile = profiler_dir + "/" + currentTest + ".profile";
+
+ const { NetUtil } = ChromeUtils.importESModule(
+ "resource://gre/modules/NetUtil.sys.mjs"
+ );
+ const { FileUtils } = ChromeUtils.importESModule(
+ "resource://gre/modules/FileUtils.sys.mjs"
+ );
+
+ var file = Cc["@mozilla.org/file/local;1"].createInstance(
+ Ci.nsIFile
+ );
+ file.initWithPath(profileFile);
+
+ var ostream = FileUtils.openSafeFileOutputStream(file);
+
+ let istream = Cc[
+ "@mozilla.org/io/string-input-stream;1"
+ ].createInstance(Ci.nsIStringInputStream);
+ istream.setUTF8Data(JSON.stringify(profile));
+
+ // The last argument (the callback) is optional.
+ NetUtil.asyncCopy(istream, ostream, function (status) {
+ if (!Components.isSuccessCode(status)) {
+ reject();
+ return;
+ }
+
+ resolve();
+ });
+ },
+ error => {
+ console.error("Failed to gather profile:", error);
+ reject();
+ }
+ );
+ });
+ },
+ finishStartupProfiling: function Profiler__finishStartupProfiling() {
+ if (_profiler && enabled) {
+ _profiler.Pause();
+ _profiler.dumpProfileToFile(profiler_dir + "/startup.profile");
+ _profiler.StopProfiler();
+ }
+ },
+
+ /**
+ * Set a marker indicating the start of the subtest.
+ *
+ * It will also set the `profilerSubtestStartTime` to be used later by
+ * `subtestEnd`.
+ */
+ subtestStart: function Profiler__subtestStart(name, explicit) {
+ profilerSubtestStartTime = Cu.now();
+ if (_profiler) {
+ ChromeUtils.addProfilerMarker(
+ "Talos",
+ { category: "Test" },
+ explicit ? name : 'Start of test "' + (name || test_name) + '"'
+ );
+ }
+ },
+
+ /**
+ * Set a marker indicating the duration of the subtest.
+ *
+ * This will take the `profilerSubtestStartTime` that was set by
+ * `subtestStart` and will create a duration marker by setting the `endTime`
+ * to the current time.
+ */
+ subtestEnd: function Profiler__subtestEnd(name, explicit) {
+ if (_profiler) {
+ ChromeUtils.addProfilerMarker(
+ "Talos",
+ { startTime: profilerSubtestStartTime, category: "Test" },
+ explicit ? name : 'Test "' + (name || test_name) + '"'
+ );
+ }
+ },
+ mark: function Profiler__mark(marker, explicit) {
+ if (_profiler) {
+ ChromeUtils.addProfilerMarker(
+ "Talos",
+ { category: "Test" },
+ explicit ? marker : 'Profiler: "' + (marker || test_name) + '"'
+ );
+ }
+ },
+ };
+})();
diff --git a/testing/talos/talos/pageloader/chrome/a11y.js b/testing/talos/talos/pageloader/chrome/a11y.js
new file mode 100644
index 0000000000..3541076ee7
--- /dev/null
+++ b/testing/talos/talos/pageloader/chrome/a11y.js
@@ -0,0 +1,66 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/* eslint-env mozilla/frame-script */
+
+(function () {
+ let gAccService = 0;
+
+ function initAccessibility() {
+ if (!gAccService) {
+ var service = Cc["@mozilla.org/accessibilityService;1"];
+ if (service) {
+ // fails if build lacks accessibility module
+ gAccService = Cc["@mozilla.org/accessibilityService;1"].getService(
+ Ci.nsIAccessibilityService
+ );
+ }
+ }
+ return !!gAccService;
+ }
+
+ function getAccessible(aNode) {
+ try {
+ return gAccService.getAccessibleFor(aNode);
+ } catch (e) {}
+
+ return null;
+ }
+
+ function ensureAccessibleTreeForNode(aNode) {
+ var acc = getAccessible(aNode);
+
+ ensureAccessibleTreeForAccessible(acc);
+ }
+
+ function ensureAccessibleTreeForAccessible(aAccessible) {
+ var child = aAccessible.firstChild;
+ while (child) {
+ ensureAccessibleTreeForAccessible(child);
+ try {
+ child = child.nextSibling;
+ } catch (e) {
+ child = null;
+ }
+ }
+ }
+
+ // Walk accessible tree of the given identifier to ensure tree creation
+ function ensureAccessibleTreeForId(aID) {
+ var node = content.document.getElementById(aID);
+ if (!node) {
+ return;
+ }
+ ensureAccessibleTreeForNode(node);
+ }
+
+ addEventListener("DOMContentLoaded", e => {
+ Cu.exportFunction(initAccessibility, content, {
+ defineAs: "initAccessibility",
+ });
+ Cu.exportFunction(ensureAccessibleTreeForId, content, {
+ defineAs: "ensureAccessibleTreeForId",
+ });
+ });
+})();
diff --git a/testing/talos/talos/pageloader/chrome/lh_dummy.js b/testing/talos/talos/pageloader/chrome/lh_dummy.js
new file mode 100644
index 0000000000..134efd4ef1
--- /dev/null
+++ b/testing/talos/talos/pageloader/chrome/lh_dummy.js
@@ -0,0 +1,11 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/* eslint-env mozilla/frame-script */
+
+function _dummy() {
+ sendAsyncMessage("PageLoader:LoadEvent", {});
+}
+
+addEventListener("load", contentLoadHandlerCallback(_dummy), true); // eslint-disable-line no-undef
diff --git a/testing/talos/talos/pageloader/chrome/lh_fnbpaint.js b/testing/talos/talos/pageloader/chrome/lh_fnbpaint.js
new file mode 100644
index 0000000000..5ef0066ad2
--- /dev/null
+++ b/testing/talos/talos/pageloader/chrome/lh_fnbpaint.js
@@ -0,0 +1,45 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/* eslint-env mozilla/frame-script */
+
+var gErr =
+ "Abort: firstNonBlankPaint value is not available after loading the page";
+var gRetryCounter = 0;
+
+function _contentFNBPaintHandler() {
+ var x = content.window.performance.timing.timeToNonBlankPaint;
+ if (typeof x == "undefined") {
+ sendAsyncMessage("PageLoader:Error", { msg: gErr });
+ }
+ if (x > 0) {
+ dump("received fnbpaint value\n");
+ sendAsyncMessage("PageLoader:LoadEvent", { time: x, name: "fnbpaint" });
+ gRetryCounter = 0;
+ } else {
+ gRetryCounter += 1;
+ if (gRetryCounter <= 10) {
+ dump(
+ "\nfnbpaint is not yet available (0), retry number " +
+ gRetryCounter +
+ "...\n"
+ );
+ content.setTimeout(_contentFNBPaintHandler, 100);
+ } else {
+ dump(
+ "\nunable to get a value for fnbpaint after " +
+ gRetryCounter +
+ " retries\n"
+ );
+ sendAsyncMessage("PageLoader:Error", { msg: gErr });
+ }
+ }
+}
+
+addEventListener(
+ "load",
+ // eslint-disable-next-line no-undef
+ contentLoadHandlerCallback(_contentFNBPaintHandler),
+ true
+);
diff --git a/testing/talos/talos/pageloader/chrome/lh_hero.js b/testing/talos/talos/pageloader/chrome/lh_hero.js
new file mode 100644
index 0000000000..6705b6d53c
--- /dev/null
+++ b/testing/talos/talos/pageloader/chrome/lh_hero.js
@@ -0,0 +1,49 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/* eslint-env mozilla/frame-script */
+
+function _contentHeroHandler(isload) {
+ var obs = null;
+ var el = content.window.document.querySelector("[elementtiming]");
+ if (el) {
+ function callback(entries, observer) {
+ entries.forEach(entry => {
+ sendAsyncMessage("PageLoader:LoadEvent", {
+ time: content.window.performance.now(),
+ name: "tphero",
+ });
+ obs.disconnect();
+ });
+ }
+ // we want the element 100% visible on the viewport
+ var options = { root: null, rootMargin: "0px", threshold: [1] };
+ try {
+ obs = new content.window.IntersectionObserver(callback, options);
+ obs.observe(el);
+ } catch (err) {
+ sendAsyncMessage("PageLoader:Error", { msg: err.message });
+ }
+ } else if (isload) {
+ // If the hero element is added from a settimeout handler, it might not run before 'load'
+ content.setTimeout(function () {
+ _contentHeroHandler(false);
+ }, 5000);
+ } else {
+ var err = "Could not find a tag with an elmenttiming attr on the page";
+ sendAsyncMessage("PageLoader:Error", { msg: err });
+ }
+ return obs;
+}
+
+function _contentHeroLoadHandler() {
+ _contentHeroHandler(true);
+}
+
+addEventListener(
+ "load",
+ // eslint-disable-next-line no-undef
+ contentLoadHandlerCallback(_contentHeroLoadHandler),
+ true
+);
diff --git a/testing/talos/talos/pageloader/chrome/lh_moz.js b/testing/talos/talos/pageloader/chrome/lh_moz.js
new file mode 100644
index 0000000000..46d4a74a7c
--- /dev/null
+++ b/testing/talos/talos/pageloader/chrome/lh_moz.js
@@ -0,0 +1,28 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/* eslint-env mozilla/frame-script */
+
+function _contentPaintHandler() {
+ var utils = content.windowUtils;
+ if (utils.isMozAfterPaintPending) {
+ addEventListener(
+ "MozAfterPaint",
+ function afterpaint(e) {
+ removeEventListener("MozAfterPaint", afterpaint, true);
+ sendAsyncMessage("PageLoader:LoadEvent", {});
+ },
+ true
+ );
+ } else {
+ sendAsyncMessage("PageLoader:LoadEvent", {});
+ }
+}
+
+addEventListener(
+ "load",
+ // eslint-disable-next-line no-undef
+ contentLoadHandlerCallback(_contentPaintHandler),
+ true
+);
diff --git a/testing/talos/talos/pageloader/chrome/lh_pdfpaint.js b/testing/talos/talos/pageloader/chrome/lh_pdfpaint.js
new file mode 100644
index 0000000000..0f1eff6da9
--- /dev/null
+++ b/testing/talos/talos/pageloader/chrome/lh_pdfpaint.js
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/* eslint-env mozilla/frame-script */
+
+function _pdfPaintHandler() {
+ content.window.addEventListener(
+ "pagerendered",
+ e => {
+ if (e.detail.pageNumber !== 1) {
+ sendAsyncMessage("PageLoader:Error", {
+ msg: `Error: Expected page 1 got ${e.detail.pageNumber}`,
+ });
+ return;
+ }
+ sendAsyncMessage("PageLoader:LoadEvent", {
+ time: e.detail.timestamp,
+ name: "pdfpaint",
+ });
+ },
+ { once: true }
+ );
+}
+
+addEventListener("DOMContentLoaded", _pdfPaintHandler, true);
diff --git a/testing/talos/talos/pageloader/chrome/pageloader.js b/testing/talos/talos/pageloader/chrome/pageloader.js
new file mode 100644
index 0000000000..839901fb8e
--- /dev/null
+++ b/testing/talos/talos/pageloader/chrome/pageloader.js
@@ -0,0 +1,1113 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/* import-globals-from report.js */
+
+var { AppConstants } = ChromeUtils.importESModule(
+ "resource://gre/modules/AppConstants.sys.mjs"
+);
+var { E10SUtils } = ChromeUtils.importESModule(
+ "resource://gre/modules/E10SUtils.sys.mjs"
+);
+ChromeUtils.defineESModuleGetters(this, {
+ TalosParentProfiler: "resource://talos-powers/TalosParentProfiler.sys.mjs",
+});
+
+var NUM_CYCLES = 5;
+var numPageCycles = 1;
+
+var numRetries = 0;
+var maxRetries = 3;
+
+var pageFilterRegexp = null;
+var winWidth = 1024;
+var winHeight = 768;
+
+var pages;
+var pageIndex;
+var start_time;
+var cycle;
+var pageCycle;
+var report;
+var timeout = -1;
+var delay = 250;
+var running = false;
+var forceCC = true;
+
+var useMozAfterPaint = false;
+var useFNBPaint = false;
+var isFNBPaintPending = false;
+var usePDFPaint = false;
+var isPDFPaintPending = false;
+var useHero = false;
+var gPaintWindow = window;
+var gPaintListener = false;
+var loadNoCache = false;
+var scrollTest = false;
+var profilingInfo = false;
+var baseVsRef = false;
+var useBrowserChrome = false;
+var useA11y = false;
+
+var isIdleCallbackPending = false;
+
+// when TEST_DOES_OWN_TIMING, we need to store the time from the page as MozAfterPaint can be slower than pageload
+var gTime = -1;
+var gStartTime = -1;
+var gReference = -1;
+
+var gBrowser;
+
+// These are binary flags. Use 1/2/4/8/...
+var TEST_DOES_OWN_TIMING = 1;
+var EXECUTE_SCROLL_TEST = 2;
+
+var browserWindow = null;
+
+var recordedName = null;
+var pageUrls;
+
+/**
+ * SingleTimeout class. Allow to register one and only one callback using
+ * setTimeout at a time.
+ */
+var SingleTimeout = function () {
+ this.timeoutEvent = undefined;
+};
+
+/**
+ * Register a callback with the given timeout.
+ *
+ * If timeout is < 0, this is a no-op.
+ *
+ * If a callback was previously registered and has not been called yet, it is
+ * first cleared with clear().
+ */
+SingleTimeout.prototype.register = function (callback, timeout) {
+ if (timeout >= 0) {
+ if (this.timeoutEvent !== undefined) {
+ this.clear();
+ }
+ var that = this;
+ this.timeoutEvent = setTimeout(function () {
+ that.timeoutEvent = undefined;
+ callback();
+ }, timeout);
+ }
+};
+
+/**
+ * Clear a registered callback.
+ */
+SingleTimeout.prototype.clear = function () {
+ if (this.timeoutEvent !== undefined) {
+ clearTimeout(this.timeoutEvent);
+ this.timeoutEvent = undefined;
+ }
+};
+
+var failTimeout = new SingleTimeout();
+
+async function plInit() {
+ if (running) {
+ return;
+ }
+ running = true;
+
+ cycle = 0;
+ pageCycle = 1;
+
+ try {
+ /*
+ * Desktop firefox:
+ * non-chrome talos runs - tp-cmdline will create and load pageloader
+ * into the main window of the app which displays and tests content.
+ * chrome talos runs - tp-cmdline does the same however pageloader
+ * creates a new chromed browser window below for content.
+ */
+
+ var manifestURI = Services.prefs.getCharPref("talos.tpmanifest", null);
+ if (manifestURI.length == null) {
+ dumpLine("tp abort: talos.tpmanifest browser pref is not set");
+ plStop(true);
+ }
+
+ NUM_CYCLES = Services.prefs.getIntPref("talos.tpcycles", 1);
+ numPageCycles = Services.prefs.getIntPref("talos.tppagecycles", 1);
+ timeout = Services.prefs.getIntPref("talos.tptimeout", -1);
+ useMozAfterPaint = Services.prefs.getBoolPref(
+ "talos.tpmozafterpaint",
+ false
+ );
+ useHero = Services.prefs.getBoolPref("talos.tphero", false);
+ useFNBPaint = Services.prefs.getBoolPref("talos.fnbpaint", false);
+ usePDFPaint = Services.prefs.getBoolPref("talos.pdfpaint", false);
+ loadNoCache = Services.prefs.getBoolPref("talos.tploadnocache", false);
+ scrollTest = Services.prefs.getBoolPref("talos.tpscrolltest", false);
+ useBrowserChrome = Services.prefs.getBoolPref("talos.tpchrome", false);
+ useA11y = Services.prefs.getBoolPref("talos.a11y", false);
+
+ // for pageloader tests the profiling info is found in an env variable
+ // because it is not available early enough to set it as a browser pref
+ if (Services.env.exists("TPPROFILINGINFO")) {
+ profilingInfo = Services.env.get("TPPROFILINGINFO");
+ if (profilingInfo !== null) {
+ TalosParentProfiler.initFromObject(JSON.parse(profilingInfo));
+ }
+ }
+
+ if (forceCC && !window.windowUtils.garbageCollect) {
+ forceCC = false;
+ }
+
+ var fileURI = Services.io.newURI(manifestURI);
+ pages = plLoadURLsFromURI(fileURI);
+
+ if (!pages) {
+ dumpLine("tp: could not load URLs, quitting");
+ plStop(true);
+ }
+
+ if (!pages.length) {
+ dumpLine("tp: no pages to test, quitting");
+ plStop(true);
+ }
+
+ pageUrls = pages.map(function (p) {
+ return p.url.spec.toString();
+ });
+ report = new Report();
+
+ pageIndex = 0;
+ if (profilingInfo) {
+ TalosParentProfiler.beginTest(getCurrentPageShortName());
+ }
+
+ // Create a new chromed browser window for content
+ var blank = Cc["@mozilla.org/supports-string;1"].createInstance(
+ Ci.nsISupportsString
+ );
+ blank.data = "about:blank";
+
+ let toolbars = "all";
+ if (!useBrowserChrome) {
+ toolbars = "titlebar,resizable";
+ }
+
+ browserWindow = Services.ww.openWindow(
+ null,
+ AppConstants.BROWSER_CHROME_URL,
+ "_blank",
+ `chrome,${toolbars},dialog=no,width=${winWidth},height=${winHeight}`,
+ blank
+ );
+
+ gPaintWindow = browserWindow;
+ // get our window out of the way
+ window.resizeTo(10, 10);
+
+ await new Promise(resolve => {
+ browserWindow.addEventListener("load", resolve, {
+ capture: true,
+ once: true,
+ });
+ });
+
+ // do this half a second after load, because we need to be
+ // able to resize the window and not have it get clobbered
+ // by the persisted values
+ await new Promise(resolve => setTimeout(resolve, 500));
+
+ browserWindow.resizeTo(winWidth, winHeight);
+ browserWindow.moveTo(0, 0);
+ browserWindow.focus();
+ // This is hacky but pageloader has worked like this for a while...
+ // eslint-disable-next-line no-global-assign
+ gBrowser = browserWindow.gBrowser;
+
+ // Since bug 1261842, the initial browser is remote unless it attempts
+ // to browse to a URI that should be non-remote (landed at bug 1047603).
+ //
+ // However, when it loads a URI that requires a different remote type,
+ // we lose the load listener and the injected tpRecordTime.remote,
+ //
+ // This listener will listen for when one of these process switches has
+ // happened, and re-install these listeners and injected methods into
+ // the new browser tab.
+ //
+ // It also probably means that per test (or, in fact, per pageloader browser
+ // instance which adds the load listener and injects tpRecordTime), all the
+ // pages should be able to load in the same mode as the initial page - due
+ // to this reinitialization on the switch.
+ let tab = gBrowser.selectedTab;
+ tab.addEventListener("TabRemotenessChange", function (evt) {
+ loadFrameScripts(tab.linkedBrowser);
+ });
+ loadFrameScripts(tab.linkedBrowser);
+
+ // Ensure that any webextensions that need to do setup have a chance
+ // to do so. e.g. the 'tabswitch' talos test registers a about:tabswitch
+ // handler during initialization, and if we don't wait for that, then
+ // attempting to load that URL will result in an error and hang the
+ // test.
+ for (let extension of WebExtensionPolicy.getActiveExtensions()) {
+ await extension.readyPromise;
+ }
+ plLoadPage();
+ } catch (e) {
+ dumpLine("pageloader exception: " + e);
+ plStop(true);
+ }
+}
+
+function plPageFlags() {
+ return pages[pageIndex].flags;
+}
+
+var ContentListener = {
+ receiveMessage(message) {
+ switch (message.name) {
+ case "PageLoader:LoadEvent":
+ return plLoadHandlerMessage(message);
+ case "PageLoader:Error":
+ return plErrorMessage(message);
+ case "PageLoader:RecordTime":
+ return plRecordTimeMessage(message);
+ case "PageLoader:IdleCallbackSet":
+ return plIdleCallbackSet();
+ case "PageLoader:IdleCallbackReceived":
+ return plIdleCallbackReceived();
+ }
+ return undefined;
+ },
+};
+
+// load the current page, start timing
+var removeLastAddedMsgListener = null;
+function plLoadPage() {
+ if (profilingInfo) {
+ TalosParentProfiler.beginTest(
+ getCurrentPageShortName() + "_pagecycle_" + pageCycle
+ );
+ }
+
+ var pageURL = pages[pageIndex].url;
+
+ if (removeLastAddedMsgListener) {
+ removeLastAddedMsgListener();
+ removeLastAddedMsgListener = null;
+ }
+
+ let tab = gBrowser.selectedTab;
+ tab.addEventListener("TabRemotenessChange", evt => {
+ addMsgListeners(tab.linkedBrowser);
+ });
+ addMsgListeners(tab.linkedBrowser);
+
+ failTimeout.register(loadFail, timeout);
+ // record which page we are about to open
+ TalosParentProfiler.mark("Opening " + pages[pageIndex].url.pathQueryRef);
+
+ if (useFNBPaint) {
+ isFNBPaintPending = true;
+ }
+
+ if (usePDFPaint) {
+ isPDFPaintPending = true;
+ }
+
+ startAndLoadURI(pageURL);
+}
+
+function addMsgListeners(browser) {
+ let mm = browser.messageManager;
+ // messages to watch for page load
+ mm.addMessageListener("PageLoader:LoadEvent", ContentListener);
+ mm.addMessageListener("PageLoader:RecordTime", ContentListener);
+ mm.addMessageListener("PageLoader:IdleCallbackSet", ContentListener);
+ mm.addMessageListener("PageLoader:IdleCallbackReceived", ContentListener);
+ mm.addMessageListener("PageLoader:Error", ContentListener);
+
+ removeLastAddedMsgListener = function () {
+ mm.removeMessageListener("PageLoader:LoadEvent", ContentListener);
+ mm.removeMessageListener("PageLoader:RecordTime", ContentListener);
+ mm.removeMessageListener("PageLoader:IdleCallbackSet", ContentListener);
+ mm.removeMessageListener(
+ "PageLoader:IdleCallbackReceived",
+ ContentListener
+ );
+ mm.removeMessageListener("PageLoader:Error", ContentListener);
+ };
+}
+
+function loadFrameScripts(browser) {
+ let mm = browser.messageManager;
+
+ // Load our frame scripts.
+ mm.loadFrameScript("chrome://pageloader/content/utils.js", false, true);
+
+ // pick the right load handler
+ if (useFNBPaint) {
+ mm.loadFrameScript(
+ "chrome://pageloader/content/lh_fnbpaint.js",
+ false,
+ true
+ );
+ } else if (useMozAfterPaint) {
+ mm.loadFrameScript("chrome://pageloader/content/lh_moz.js", false, true);
+ } else if (useHero) {
+ mm.loadFrameScript("chrome://pageloader/content/lh_hero.js", false, true);
+ } else if (usePDFPaint) {
+ mm.loadFrameScript(
+ "chrome://pageloader/content/lh_pdfpaint.js",
+ false,
+ true
+ );
+ } else {
+ mm.loadFrameScript("chrome://pageloader/content/lh_dummy.js", false, true);
+ }
+ mm.loadFrameScript("chrome://pageloader/content/talos-content.js", false);
+ mm.loadFrameScript(
+ "resource://talos-powers/TalosContentProfiler.js",
+ false,
+ true
+ );
+ mm.loadFrameScript("chrome://pageloader/content/tscroll.js", false, true);
+ mm.loadFrameScript("chrome://pageloader/content/Profiler.js", false, true);
+ if (useA11y) {
+ mm.loadFrameScript("chrome://pageloader/content/a11y.js", false, true);
+ }
+}
+
+function startAndLoadURI(pageURL) {
+ if (!(plPageFlags() & TEST_DOES_OWN_TIMING)) {
+ // Indicate the subtest start if we're really measuring page load time.
+ // If the test is doing its own timing, it'll also need to do its own
+ // profiler subtestStart / subtestEnd.
+ TalosParentProfiler.subtestStart("Starting to load URI " + pageURL.spec);
+ }
+
+ start_time = window.performance.now();
+ if (loadNoCache) {
+ gBrowser.loadURI(pageURL, {
+ triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal(),
+ flags: Ci.nsIWebNavigation.LOAD_FLAGS_BYPASS_CACHE,
+ });
+ } else {
+ gBrowser.loadURI(pageURL, {
+ triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal(),
+ });
+ }
+}
+
+function getTestName() {
+ // returns tp5n
+ var pageName = pages[pageIndex].url.spec;
+ let parts = pageName.split("/");
+ if (parts.length > 4) {
+ return parts[4];
+ }
+ return "pageloader";
+}
+
+function getCurrentPageShortName() {
+ // this is also used by gecko profiling for the profile
+ // file name; so ensure it is valid on Windows/Linux/OSX
+ var pageName = pages[pageIndex].url.spec;
+ let parts = pageName.split("/");
+ if (parts.length > 5) {
+ // Tear off the first parts and concatenate the rest into a name.
+ let remainingParts = parts.slice(5);
+ let remainingAsString = remainingParts.join("_");
+ if (remainingAsString.includes("?")) {
+ // page name is something like 'tpaint.html?auto=1'
+ remainingAsString = remainingAsString.split("?")[0];
+ }
+ return remainingAsString;
+ }
+ return "page_" + pageIndex;
+}
+
+function loadFail() {
+ var pageName = pages[pageIndex].url.spec;
+ numRetries++;
+
+ if (numRetries >= maxRetries) {
+ dumpLine("__FAILTimeout in " + getTestName() + "__FAIL");
+ dumpLine(
+ "__FAILTimeout (" +
+ numRetries +
+ "/" +
+ maxRetries +
+ ") exceeded on " +
+ pageName +
+ "__FAIL"
+ );
+ TalosParentProfiler.finishTest().then(() => {
+ plStop(true);
+ });
+ } else {
+ dumpLine(
+ "__WARNTimeout (" +
+ numRetries +
+ "/" +
+ maxRetries +
+ ") exceeded on " +
+ pageName +
+ "__WARN"
+ );
+ // TODO: make this a cleaner cleanup
+ pageCycle--;
+ gBrowser.removeEventListener("load", plLoadHandler, true);
+ gBrowser.removeEventListener("load", plLoadHandlerCapturing, true);
+ gBrowser.removeEventListener("MozAfterPaint", plPaintedCapturing, true);
+ gBrowser.removeEventListener("MozAfterPaint", plPainted, true);
+ gPaintWindow.removeEventListener("MozAfterPaint", plPaintedCapturing, true);
+ gPaintWindow.removeEventListener("MozAfterPaint", plPainted, true);
+ removeLastAddedMsgListener = null;
+ gPaintListener = false;
+
+ // TODO: consider adding a tab and removing the old tab?!?
+ setTimeout(plLoadPage, delay);
+ }
+}
+
+var plNextPage = async function () {
+ var doNextPage = false;
+
+ // ensure we've receive idle-callback before proceeding
+ if (isIdleCallbackPending) {
+ dumpLine("Waiting for idle-callback");
+ await waitForIdleCallback();
+ }
+
+ if (useFNBPaint) {
+ // don't move to next page until we've received fnbpaint
+ if (isFNBPaintPending) {
+ dumpLine("Waiting for fnbpaint");
+ await waitForFNBPaint();
+ }
+ }
+
+ if (usePDFPaint) {
+ // don't move to next page until we've received pdfpaint
+ if (isPDFPaintPending) {
+ dumpLine("Waiting for pdfpaint");
+ await waitForPDFPaint();
+ }
+ }
+
+ if (profilingInfo) {
+ await TalosParentProfiler.finishTest();
+ }
+
+ if (pageCycle < numPageCycles) {
+ pageCycle++;
+ doNextPage = true;
+ } else if (pageIndex < pages.length - 1) {
+ pageIndex++;
+ recordedName = null;
+ pageCycle = 1;
+ doNextPage = true;
+ }
+
+ if (doNextPage) {
+ if (forceCC) {
+ var tccstart = window.performance.now();
+ window.windowUtils.garbageCollect();
+ var tccend = window.performance.now();
+ report.recordCCTime(tccend - tccstart);
+
+ // Now asynchronously trigger GC / CC in the content process
+ await forceContentGC();
+ }
+
+ setTimeout(plLoadPage, delay);
+ } else {
+ plStop(false);
+ }
+};
+
+function waitForIdleCallback() {
+ return new Promise(resolve => {
+ function checkForIdleCallback() {
+ if (!isIdleCallbackPending) {
+ resolve();
+ } else {
+ setTimeout(checkForIdleCallback, 5);
+ }
+ }
+ checkForIdleCallback();
+ });
+}
+
+function plIdleCallbackSet() {
+ if (!scrollTest) {
+ isIdleCallbackPending = true;
+ }
+}
+
+function plIdleCallbackReceived() {
+ isIdleCallbackPending = false;
+}
+
+function waitForFNBPaint() {
+ return new Promise(resolve => {
+ function checkForFNBPaint() {
+ if (!isFNBPaintPending) {
+ resolve();
+ } else {
+ setTimeout(checkForFNBPaint, 200);
+ }
+ }
+ checkForFNBPaint();
+ });
+}
+
+function waitForPDFPaint() {
+ return new Promise(resolve => {
+ function checkForPDFPaint() {
+ if (!isPDFPaintPending) {
+ resolve();
+ } else {
+ setTimeout(checkForPDFPaint, 200);
+ }
+ }
+ checkForPDFPaint();
+ });
+}
+
+function forceContentGC() {
+ return new Promise(resolve => {
+ let mm = browserWindow.gBrowser.selectedBrowser.messageManager;
+ mm.addMessageListener(
+ "Talos:ForceGC:OK",
+ function onTalosContentForceGC(msg) {
+ mm.removeMessageListener("Talos:ForceGC:OK", onTalosContentForceGC);
+ resolve();
+ }
+ );
+ mm.sendAsyncMessage("Talos:ForceGC");
+ });
+}
+
+function plRecordTime(time) {
+ var pageName = pages[pageIndex].url.spec;
+ var i = pageIndex;
+ if (i < pages.length - 1) {
+ i++;
+ } else {
+ i = 0;
+ }
+ var nextName = pages[i].url.spec;
+ if (!recordedName) {
+ // when doing base vs ref type of test, add pre 'base' or 'ref' to reported page name;
+ // this is necessary so that if multiple subtests use same reference page, results for
+ // each ref page run will be kept separate for each base vs ref run, and not grouped
+ // into just one set of results values for everytime that reference page was loaded
+ if (baseVsRef) {
+ recordedName = pages[pageIndex].pre + pageUrls[pageIndex];
+ } else {
+ recordedName = pageUrls[pageIndex];
+ }
+ }
+ if (typeof time == "string") {
+ var times = time.split(",");
+ var names = recordedName.split(",");
+ for (var t = 0; t < times.length; t++) {
+ if (names.length == 1) {
+ report.recordTime(names, times[t]);
+ } else {
+ report.recordTime(names[t], times[t]);
+ }
+ }
+ } else {
+ report.recordTime(recordedName, time);
+ }
+ dumpLine(
+ "Cycle " +
+ (cycle + 1) +
+ "(" +
+ pageCycle +
+ "): loaded " +
+ pageName +
+ " (next: " +
+ nextName +
+ ")"
+ );
+}
+
+function plLoadHandlerCapturing(evt) {
+ // make sure we pick up the right load event
+ if (evt.type != "load" || evt.originalTarget.defaultView.frameElement) {
+ return;
+ }
+
+ // set the tpRecordTime function (called from test pages we load) to store a global time.
+ gBrowser.contentWindow.wrappedJSObject.tpRecordTime = function (
+ time,
+ startTime,
+ testName
+ ) {
+ gTime = time;
+ gStartTime = startTime;
+ recordedName = testName;
+ setTimeout(plWaitForPaintingCapturing, 0);
+ };
+
+ gBrowser.contentWindow.wrappedJSObject.plGarbageCollect = function () {
+ window.windowUtils.garbageCollect();
+ };
+
+ gBrowser.removeEventListener("load", plLoadHandlerCapturing, true);
+
+ setTimeout(plWaitForPaintingCapturing, 0);
+}
+
+// Shim function this is really defined in tscroll.js
+function sendScroll() {
+ const SCROLL_TEST_STEP_PX = 10;
+ const SCROLL_TEST_NUM_STEPS = 100;
+ // The page doesn't really use tpRecordTime. Instead, we trigger the scroll test,
+ // and the scroll test will call tpRecordTime which will take us to the next page
+ let details = {
+ target: "content",
+ stepSize: SCROLL_TEST_STEP_PX,
+ opt_numSteps: SCROLL_TEST_NUM_STEPS,
+ };
+ let mm = gBrowser.selectedBrowser.messageManager;
+ mm.sendAsyncMessage("PageLoader:ScrollTest", { details });
+}
+
+function plWaitForPaintingCapturing() {
+ if (gPaintListener) {
+ return;
+ }
+
+ var utils = gPaintWindow.windowUtils;
+
+ if (utils.isMozAfterPaintPending && useMozAfterPaint) {
+ if (!gPaintListener) {
+ gPaintWindow.addEventListener("MozAfterPaint", plPaintedCapturing, true);
+ }
+ gPaintListener = true;
+ return;
+ }
+
+ _loadHandlerCapturing();
+}
+
+function plPaintedCapturing() {
+ gPaintWindow.removeEventListener("MozAfterPaint", plPaintedCapturing, true);
+ gPaintListener = false;
+ _loadHandlerCapturing();
+}
+
+function _loadHandlerCapturing() {
+ failTimeout.clear();
+
+ if (!(plPageFlags() & TEST_DOES_OWN_TIMING)) {
+ dumpLine(
+ "tp: Capturing onload handler used with page that doesn't do its own timing?"
+ );
+ plStop(true);
+ }
+
+ if (useMozAfterPaint) {
+ if (gStartTime != null && gStartTime >= 0) {
+ gTime =
+ window.performance.timing.navigationStart +
+ window.performance.now() -
+ gStartTime;
+ gStartTime = -1;
+ }
+ }
+
+ if (gTime !== -1) {
+ plRecordTime(gTime);
+ TalosParentProfiler.subtestEnd("Talos - capturing load handler fired");
+ gTime = -1;
+ recordedName = null;
+ setTimeout(plNextPage, delay);
+ }
+}
+
+// the onload handler
+function plLoadHandler(evt) {
+ // make sure we pick up the right load event
+ if (evt.type != "load" || evt.originalTarget.defaultView.frameElement) {
+ return;
+ }
+
+ gBrowser.removeEventListener("load", plLoadHandler, true);
+ setTimeout(waitForPainted, 0);
+}
+
+// This is called after we have received a load event, now we wait for painted
+function waitForPainted() {
+ var utils = gPaintWindow.windowUtils;
+
+ if (!utils.isMozAfterPaintPending || !useMozAfterPaint) {
+ _loadHandler();
+ return;
+ }
+
+ if (!gPaintListener) {
+ gPaintWindow.addEventListener("MozAfterPaint", plPainted, true);
+ }
+ gPaintListener = true;
+}
+
+function plPainted() {
+ gPaintWindow.removeEventListener("MozAfterPaint", plPainted, true);
+ gPaintListener = false;
+ _loadHandler();
+}
+
+function _loadHandler(paint_time = 0) {
+ failTimeout.clear();
+ var end_time = 0;
+
+ if (paint_time !== 0) {
+ // window.performance.timing.timeToNonBlankPaint is a timestamp
+ // this may have a value for hero element (also a timestamp)
+
+ let minDate = new Date("2001");
+
+ if (paint_time < minDate) {
+ //paint_time is a performance.now() value
+ end_time = paint_time;
+ } else {
+ //paint_time is a UNIX timestamp
+ end_time = paint_time - window.performance.timing.navigationStart;
+ }
+ } else {
+ end_time = window.performance.now();
+ }
+
+ var duration;
+ if (usePDFPaint) {
+ // PDF paint uses performance.now(), so the time does not need to be
+ // adjusted from the start time.
+ duration = end_time;
+ } else {
+ duration = end_time - start_time;
+ }
+ TalosParentProfiler.subtestEnd("Bubbling load handler fired.");
+
+ // does this page want to do its own timing?
+ // if so, we shouldn't be here
+ if (plPageFlags() & TEST_DOES_OWN_TIMING) {
+ dumpLine(
+ "tp: Bubbling onload handler used with page that does its own timing?"
+ );
+ plStop(true);
+ }
+
+ plRecordTime(duration);
+ plNextPage();
+}
+
+// the core handler
+function plLoadHandlerMessage(message) {
+ let paint_time = 0;
+ // XXX message.json.name contains the name
+ // of the load handler, so in future versions
+ // we can record several times per load.
+ if (message.json.time !== undefined) {
+ paint_time = message.json.time;
+ if (message.json.name == "fnbpaint") {
+ // we've received fnbpaint; no longer pending for this current pageload
+ isFNBPaintPending = false;
+ } else if (message.json.name == "pdfpaint") {
+ isPDFPaintPending = false;
+ }
+ }
+
+ failTimeout.clear();
+
+ if (plPageFlags() & EXECUTE_SCROLL_TEST) {
+ // Let the page settle down after its load event, then execute the scroll test.
+ setTimeout(sendScroll, 500);
+ } else if (plPageFlags() & TEST_DOES_OWN_TIMING) {
+ var time;
+
+ if (typeof gStartTime != "number") {
+ gStartTime = Date.parse(gStartTime);
+ }
+ if (gTime !== -1) {
+ if (useMozAfterPaint && gStartTime >= 0) {
+ time = window.performance.now() - gStartTime;
+ gStartTime = -1;
+ } else if (!useMozAfterPaint) {
+ time = gTime;
+ }
+ gTime = -1;
+ }
+
+ if (time !== undefined) {
+ plRecordTime(time);
+ plNextPage();
+ }
+ } else {
+ _loadHandler(paint_time);
+ }
+}
+
+// the record time handler
+function plRecordTimeMessage(message) {
+ gTime = message.json.time;
+ gStartTime = message.json.startTime;
+ recordedName = message.json.testName;
+
+ if (useMozAfterPaint) {
+ gStartTime = message.json.startTime;
+ }
+ _loadHandlerCapturing();
+}
+
+// error
+function plErrorMessage(message) {
+ if (message.json.msg) {
+ dumpLine(message.json.msg);
+ }
+ plStop(true);
+}
+
+function plStop(force) {
+ plStopAll(force);
+}
+
+function plStopAll(force) {
+ try {
+ if (!force) {
+ pageIndex = 0;
+ pageCycle = 1;
+ if (cycle < NUM_CYCLES - 1) {
+ cycle++;
+ recordedName = null;
+ setTimeout(plLoadPage, delay);
+ return;
+ }
+
+ /* output report */
+ dumpLine(report.getReport());
+ dumpLine(report.getReportSummary());
+ }
+ } catch (e) {
+ dumpLine(e);
+ }
+
+ if (gBrowser) {
+ gBrowser.removeEventListener("load", plLoadHandlerCapturing, true);
+ gBrowser.removeEventListener("load", plLoadHandler, true);
+
+ if (useMozAfterPaint) {
+ gBrowser.removeEventListener("MozAfterPaint", plPaintedCapturing, true);
+ gBrowser.removeEventListener("MozAfterPaint", plPainted, true);
+ }
+
+ let mm = gBrowser.selectedBrowser.messageManager;
+ mm.removeMessageListener("PageLoader:LoadEvent", ContentListener);
+ mm.removeMessageListener("PageLoader:RecordTime", ContentListener);
+ mm.removeMessageListener("PageLoader:Error", ContentListener);
+
+ if (isIdleCallbackPending) {
+ mm.removeMessageListener("PageLoader:IdleCallbackSet", ContentListener);
+ mm.removeMessageListener(
+ "PageLoader:IdleCallbackReceived",
+ ContentListener
+ );
+ }
+ mm.loadFrameScript(
+ "data:,removeEventListener('load', _contentLoadHandler, true);",
+ false,
+ true
+ );
+ }
+
+ if (MozillaFileLogger && MozillaFileLogger._foStream) {
+ MozillaFileLogger.close();
+ }
+
+ goQuitApplication();
+}
+
+/* Returns array */
+function plLoadURLsFromURI(manifestUri) {
+ var fstream = Cc["@mozilla.org/network/file-input-stream;1"].createInstance(
+ Ci.nsIFileInputStream
+ );
+
+ var uriFile = manifestUri.QueryInterface(Ci.nsIFileURL);
+
+ if (uriFile.file.isFile() === false) {
+ dumpLine("tp: invalid file: %s" % uriFile.file);
+ return null;
+ }
+
+ try {
+ fstream.init(uriFile.file, -1, 0, 0);
+ } catch (ex) {
+ dumpLine("tp: the file %s doesn't exist" % uriFile.file);
+ return null;
+ }
+
+ var lstream = fstream.QueryInterface(Ci.nsILineInputStream);
+
+ var url_array = [];
+
+ var lineNo = 0;
+ var line = { value: null };
+ var baseVsRefIndex = 0;
+ var more;
+ do {
+ lineNo++;
+ more = lstream.readLine(line);
+ var s = line.value;
+
+ // strip comments (only leading ones)
+ s = s.replace(/^#.*/, "");
+
+ // strip leading and trailing whitespace
+ s = s.replace(/^\s*/, "").replace(/\s*$/, "");
+
+ if (!s) {
+ continue;
+ }
+
+ var flags = 0;
+ var urlspec = s;
+ baseVsRefIndex += 1;
+
+ // split on whitespace, and figure out if we have any flags
+ var items = s.split(/\s+/);
+ if (items[0] == "include") {
+ if (items.length != 2) {
+ dumpLine(
+ "tp: Error on line " +
+ lineNo +
+ " in " +
+ manifestUri.spec +
+ ": include must be followed by the manifest to include!"
+ );
+ return null;
+ }
+
+ var subManifest = Services.io.newURI(items[1], null, manifestUri);
+ if (subManifest == null) {
+ dumpLine(
+ "tp: invalid URI on line " +
+ manifestUri.spec +
+ ":" +
+ lineNo +
+ " : '" +
+ line.value +
+ "'"
+ );
+ return null;
+ }
+
+ var subItems = plLoadURLsFromURI(subManifest);
+ if (subItems == null) {
+ return null;
+ }
+ url_array = url_array.concat(subItems);
+ } else {
+ // For scrollTest flag, we accept "normal" pages but treat them as TEST_DOES_OWN_TIMING
+ // together with EXECUTE_SCROLL_TEST which makes us run the scroll test on load.
+ // We do this by artificially "injecting" the TEST_DOES_OWN_TIMING flag ("%") to the item
+ // and then let the default flow for this flag run without further modifications
+ // (other than calling the scroll test once the page is loaded).
+ // Note that if we have the scrollTest flag but the item already has "%", then we do
+ // nothing (the scroll test will not execute, and the page will report with its
+ // own tpRecordTime and not the one from the scroll test).
+ if (scrollTest && items.length == 1) {
+ // scroll enabled and no "%"
+ items.unshift("%");
+ flags |= EXECUTE_SCROLL_TEST;
+ }
+
+ if (items.length == 2) {
+ if (items[0].includes("%")) {
+ flags |= TEST_DOES_OWN_TIMING;
+ }
+
+ urlspec = items[1];
+ } else if (items.length == 3) {
+ // base vs ref type of talos test
+ // expect each manifest line to be in the format of:
+ // & http://localhost/tests/perf-reftest/base-page.html, http://localhost/tests/perf-reftest/reference-page.html
+ // test will run with the base page, then with the reference page; and ultimately the actual test results will
+ // be the comparison values of those two pages; more than one line will result in base vs ref subtests
+ if (items[0].includes("&")) {
+ baseVsRef = true;
+ flags |= TEST_DOES_OWN_TIMING;
+ // for the base, must remove the comma on the end of the actual url
+ var urlspecBase = items[1].slice(0, -1);
+ var urlspecRef = items[2];
+ } else {
+ dumpLine(
+ "tp: Error on line " +
+ lineNo +
+ " in " +
+ manifestUri.spec +
+ ": unknown manifest format!"
+ );
+ return null;
+ }
+ } else if (items.length != 1) {
+ dumpLine(
+ "tp: Error on line " +
+ lineNo +
+ " in " +
+ manifestUri.spec +
+ ": whitespace must be %-escaped!"
+ );
+ return null;
+ }
+
+ var url;
+
+ if (!baseVsRef) {
+ url = Services.io.newURI(urlspec, null, manifestUri);
+
+ if (pageFilterRegexp && !pageFilterRegexp.test(url.spec)) {
+ continue;
+ }
+
+ url_array.push({ url, flags });
+ } else {
+ // base vs ref type of talos test
+ // we add a 'pre' prefix here indicating that this particular page is a base page or a reference
+ // page; later on this 'pre' is used when recording the actual time value/result; because in
+ // the results we use the url as the results key; but we might use the same test page as a reference
+ // page in the same test suite, so we need to add a prefix so this results key is always unique
+ url = Services.io.newURI(urlspecBase, null, manifestUri);
+ if (pageFilterRegexp && !pageFilterRegexp.test(url.spec)) {
+ continue;
+ }
+ var pre = "base_page_" + baseVsRefIndex + "_";
+ url_array.push({ url, flags, pre });
+
+ url = Services.io.newURI(urlspecRef, null, manifestUri);
+ if (pageFilterRegexp && !pageFilterRegexp.test(url.spec)) {
+ continue;
+ }
+ pre = "ref_page_" + baseVsRefIndex + "_";
+ url_array.push({ url, flags, pre });
+ }
+ }
+ } while (more);
+
+ return url_array;
+}
+
+function dumpLine(str) {
+ if (MozillaFileLogger && MozillaFileLogger._foStream) {
+ MozillaFileLogger.log(str + "\n");
+ }
+ dump(str);
+ dump("\n");
+}
diff --git a/testing/talos/talos/pageloader/chrome/pageloader.xhtml b/testing/talos/talos/pageloader/chrome/pageloader.xhtml
new file mode 100644
index 0000000000..177502a57d
--- /dev/null
+++ b/testing/talos/talos/pageloader/chrome/pageloader.xhtml
@@ -0,0 +1,56 @@
+<?xml version="1.0"?>
+<!-- ***** BEGIN LICENSE BLOCK *****
+ - Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ -
+ - The contents of this file are subject to the Mozilla Public License Version
+ - 1.1 (the "License"); you may not use this file except in compliance with
+ - the License. You may obtain a copy of the License at
+ - http://www.mozilla.org/MPL/
+ -
+ - Software distributed under the License is distributed on an "AS IS" basis,
+ - WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ - for the specific language governing rights and limitations under the
+ - License.
+ -
+ - The Original Code is tp.
+ -
+ - The Initial Developer of the Original Code is the Mozilla Corporation.
+ - Portions created by the Initial Developer are Copyright (C) 2007
+ - the Initial Developer. All Rights Reserved.
+ -
+ - Contributor(s):
+ - Rob Helmer <rhelmer@mozilla.com>
+ - Vladimir Vukicevic <vladimir@mozilla.com>
+ -
+ - Alternatively, the contents of this file may be used under the terms of
+ - either the GNU General Public License Version 2 or later (the "GPL"), or
+ - the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ - in which case the provisions of the GPL or the LGPL are applicable instead
+ - of those above. If you wish to allow use of your version of this file only
+ - under the terms of either the GPL or the LGPL, and not to allow others to
+ - use your version of this file under the terms of the MPL, indicate your
+ - decision by deleting the provisions above and replace them with the notice
+ - and other provisions required by the LGPL or the GPL. If you do not delete
+ - the provisions above, a recipient may use your version of this file under
+ - the terms of any one of the MPL, the GPL or the LGPL.
+ -
+ - ***** END LICENSE BLOCK ***** -->
+
+<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?>
+
+<window
+ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+ title="pageloader"
+ screenX="0" screenY="0"
+ onload="plInit()">
+
+ <script type="application/x-javascript"
+ src="chrome://global/content/globalOverlay.js"/>
+ <script type="application/x-javascript" src="MozillaFileLogger.js"></script>
+ <script type="application/x-javascript" src="report.js"></script>
+ <script type="application/x-javascript" src="pageloader.js"></script>
+ <script type="application/x-javascript" src="quit.js"></script>
+
+ <browser id="contentPageloader" src="about:blank"
+ type="content" flex="1"/>
+</window>
diff --git a/testing/talos/talos/pageloader/chrome/quit.js b/testing/talos/talos/pageloader/chrome/quit.js
new file mode 100644
index 0000000000..0261295c1c
--- /dev/null
+++ b/testing/talos/talos/pageloader/chrome/quit.js
@@ -0,0 +1,72 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is The Original Code is Mozilla Automated Testing Code
+ *
+ * The Initial Developer of the Original Code is
+ * Mozilla Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 2005
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s): Bob Clary <bob@bclary.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+/*
+ From mozilla/toolkit/content
+ These files did not have a license
+*/
+
+/* import-globals-from pageloader.js */
+
+function canQuitApplication() {
+ try {
+ var cancelQuit = Cc["@mozilla.org/supports-PRBool;1"].createInstance(
+ Ci.nsISupportsPRBool
+ );
+ Services.obs.notifyObservers(cancelQuit, "quit-application-requested");
+
+ // Something aborted the quit process.
+ if (cancelQuit.data) {
+ return false;
+ }
+ } catch (ex) {}
+ return true;
+}
+
+function goQuitApplication() {
+ if (!canQuitApplication()) {
+ return false;
+ }
+
+ try {
+ Services.startup.quit(Ci.nsIAppStartup.eForceQuit);
+ } catch (ex) {
+ throw new Error("goQuitApplication: " + ex);
+ }
+
+ return true;
+}
diff --git a/testing/talos/talos/pageloader/chrome/report.js b/testing/talos/talos/pageloader/chrome/report.js
new file mode 100644
index 0000000000..7f5d61922a
--- /dev/null
+++ b/testing/talos/talos/pageloader/chrome/report.js
@@ -0,0 +1,195 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// given an array of strings, finds the longest common prefix
+function findCommonPrefixLength(strs) {
+ if (strs.length < 2) {
+ // only one page in the manifest
+ // i.e. http://localhost/tests/perf-reftest/bloom-basic.html
+ var place = strs[0].lastIndexOf("/");
+ if (place < 0) {
+ place = 0;
+ }
+ return place;
+ }
+
+ var len = 0;
+ do {
+ var newlen = len + 1;
+ var newprefix = null;
+ var failed = false;
+ for (var i = 0; i < strs.length; i++) {
+ if (newlen > strs[i].length) {
+ failed = true;
+ break;
+ }
+
+ var s = strs[i].substr(0, newlen);
+ if (newprefix == null) {
+ newprefix = s;
+ } else if (newprefix != s) {
+ failed = true;
+ break;
+ }
+ }
+
+ if (failed) {
+ break;
+ }
+
+ len++;
+ } while (true);
+ return len;
+}
+
+// Constructor
+function Report() {
+ this.timeVals = {};
+ this.totalCCTime = 0;
+ this.showTotalCCTime = false;
+}
+
+Report.prototype.pageNames = function () {
+ var retval = [];
+ for (var page in this.timeVals) {
+ retval.push(page);
+ }
+ return retval;
+};
+
+Report.prototype.getReport = function () {
+ var report;
+ var pages = this.pageNames();
+ var prefixLen = findCommonPrefixLength(pages);
+
+ report = "__start_tp_report\n";
+ report += "_x_x_mozilla_page_load\n";
+ report += "_x_x_mozilla_page_load_details\n";
+ report += "|i|pagename|runs|\n";
+
+ for (var i = 0; i < pages.length; i++) {
+ // don't report any measurements that were reported for about:blank
+ // some tests (like about-preferences) use it as a dummy test page
+ if (pages[i] == "about:blank") {
+ continue;
+ }
+ report +=
+ "|" +
+ i +
+ ";" +
+ pages[i].substr(prefixLen) +
+ ";" +
+ this.timeVals[pages[i]].join(";") +
+ "\n";
+ }
+ report += "__end_tp_report\n";
+
+ if (this.showTotalCCTime) {
+ report += "__start_cc_report\n";
+ report += "_x_x_mozilla_cycle_collect," + this.totalCCTime + "\n";
+ report += "__end_cc_report\n";
+ }
+ var now = window.performance.now();
+ report += "__startTimestamp" + now + "__endTimestamp\n"; // timestamp for determning shutdown time, used by talos
+
+ return report;
+};
+
+Report.prototype.getReportSummary = function () {
+ function average(arr) {
+ var sum = 0;
+ for (var i in arr) {
+ sum += arr[i];
+ }
+ return sum / (arr.length || 1);
+ }
+
+ function median(arr) {
+ if (!arr.length) {
+ return 0;
+ } // As good indication for "not available" as any other value.
+
+ var sorted = arr.slice(0).sort();
+ var mid = Math.floor(arr.length / 2);
+
+ if (sorted.length % 2) {
+ return sorted[mid];
+ }
+
+ return average(sorted.slice(mid, mid + 2));
+ }
+
+ // We use sample stddev and not population stddev because
+ // well.. it's a sample and we can't collect all/infinite number of values.
+ function stddev(arr) {
+ if (arr.length <= 1) {
+ return 0;
+ }
+ var avg = average(arr);
+
+ var squareDiffArr = arr.map(function (v) {
+ return Math.pow(v - avg, 2);
+ });
+ var sum = squareDiffArr.reduce(function (a, b) {
+ return a + b;
+ });
+ var rv = Math.sqrt(sum / (arr.length - 1));
+ return rv;
+ }
+
+ var report = "";
+ var pages = this.pageNames();
+ var prefixLen = findCommonPrefixLength(pages);
+
+ report += "------- Summary: start -------\n";
+ report += "Number of tests: " + pages.length + "\n";
+
+ for (var i = 0; i < pages.length; i++) {
+ var results = this.timeVals[pages[i]].map(function (v) {
+ return Number(v);
+ });
+
+ report +=
+ "\n[#" +
+ i +
+ "] " +
+ pages[i].substr(prefixLen) +
+ " Cycles:" +
+ results.length +
+ " Average:" +
+ average(results).toFixed(2) +
+ " Median:" +
+ median(results).toFixed(2) +
+ " stddev:" +
+ stddev(results).toFixed(2) +
+ " (" +
+ ((100 * stddev(results)) / median(results)).toFixed(1) +
+ "%)" +
+ (results.length < 5
+ ? ""
+ : " stddev-sans-first:" + stddev(results.slice(1)).toFixed(2)) +
+ "\nValues: " +
+ results
+ .map(function (v) {
+ return v.toFixed(1);
+ })
+ .join(" ") +
+ "\n";
+ }
+ report += "-------- Summary: end --------\n";
+
+ return report;
+};
+
+Report.prototype.recordTime = function (pageName, ms) {
+ if (this.timeVals[pageName] == undefined) {
+ this.timeVals[pageName] = [];
+ }
+ this.timeVals[pageName].push(ms);
+};
+
+Report.prototype.recordCCTime = function (ms) {
+ this.totalCCTime += ms;
+ this.showTotalCCTime = true;
+};
diff --git a/testing/talos/talos/pageloader/chrome/talos-content.js b/testing/talos/talos/pageloader/chrome/talos-content.js
new file mode 100644
index 0000000000..ca21388c2c
--- /dev/null
+++ b/testing/talos/talos/pageloader/chrome/talos-content.js
@@ -0,0 +1,24 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/* eslint-env mozilla/frame-script */
+
+const TalosContent = {
+ init() {
+ addMessageListener("Talos:ForceGC", this);
+ },
+
+ receiveMessage(msg) {
+ if (msg.name == "Talos:ForceGC") {
+ this.forceGC();
+ }
+ },
+
+ forceGC() {
+ content.windowUtils.garbageCollect();
+ sendAsyncMessage("Talos:ForceGC:OK");
+ },
+};
+
+TalosContent.init();
diff --git a/testing/talos/talos/pageloader/chrome/tscroll.js b/testing/talos/talos/pageloader/chrome/tscroll.js
new file mode 100644
index 0000000000..7f64b8c474
--- /dev/null
+++ b/testing/talos/talos/pageloader/chrome/tscroll.js
@@ -0,0 +1,327 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/* eslint-env mozilla/frame-script */
+
+// Note: This file is used at both tscrollx and tp5o_scroll. With the former as
+// unprivileged code.
+// - Please make sure that any changes apply cleanly to all use cases.
+
+function testScroll(target, stepSize, opt_reportFunc, opt_numSteps) {
+ var win;
+ if (target == "content") {
+ target = content.wrappedJSObject;
+ win = content;
+ } else {
+ win = window;
+ }
+
+ var result = {
+ names: [],
+ values: [],
+ };
+ // We report multiple results, so we base the name on the path.
+ // Everything after '/tp5n/' if exists (for tp5o_scroll), or the file name at
+ // the path if non-empty (e.g. with tscrollx), or the last dir otherwise (e.g.
+ // 'mydir' for 'http://my.domain/dir1/mydir/').
+ var href = win.location.href;
+ var testBaseName =
+ href.split("/tp5n/")[1] ||
+ href.split("/").pop() ||
+ href.split("/").splice(-2, 1)[0] ||
+ "REALLY_WEIRD_URI";
+
+ // Verbatim copy from talos-powers/content/TalosPowersContent.js
+ // If the origin changes, this copy should be updated.
+ TalosPowersParent = {
+ replyId: 1,
+
+ // dispatch an event to the framescript and register the result/callback event
+ exec(commandName, arg, callback, opt_custom_window) {
+ let win = opt_custom_window || window;
+ let replyEvent = "TalosPowers:ParentExec:ReplyEvent:" + this.replyId++;
+ if (callback) {
+ win.addEventListener(
+ replyEvent,
+ function (e) {
+ callback(e.detail);
+ },
+ { once: true }
+ );
+ }
+ win.dispatchEvent(
+ new win.CustomEvent("TalosPowers:ParentExec:QueryEvent", {
+ bubbles: true,
+ detail: {
+ command: {
+ name: commandName,
+ data: arg,
+ },
+ listeningTo: replyEvent,
+ },
+ })
+ );
+ },
+ };
+ // End of code from talos-powers
+
+ var report;
+ /**
+ * Sets up the value of 'report' as a function for reporting the test result[s].
+ * Chooses between the "usual" tpRecordTime which the pageloader addon injects
+ * to pages, or a custom function in case we're a framescript which pageloader
+ * added to the tested page, or a debug tpRecordTime from talos-debug.js if
+ * running in a plain browser.
+ *
+ * @returns Promise
+ */
+ function P_setupReportFn() {
+ return new Promise(function (resolve) {
+ report = opt_reportFunc || win.tpRecordTime;
+ if (report == "PageLoader:RecordTime") {
+ report = function (duration, start, name) {
+ var msg = { time: duration, startTime: start, testName: name };
+ sendAsyncMessage("PageLoader:RecordTime", msg);
+ };
+ resolve();
+ return;
+ }
+
+ // Not part of the test and does nothing if we're within talos.
+ // Provides an alternative tpRecordTime (with some stats display) if running in a browser.
+ if (!report && document.head) {
+ var imported = document.createElement("script");
+ imported.addEventListener("load", function () {
+ report = tpRecordTime;
+ resolve();
+ });
+
+ imported.src =
+ "../../scripts/talos-debug.js?dummy=" + win.performance.now(); // For some browsers to re-read
+ document.head.appendChild(imported);
+ return;
+ }
+
+ resolve();
+ });
+ }
+
+ function FP_wait(ms) {
+ return function () {
+ return new Promise(function (resolve) {
+ win.setTimeout(resolve, ms);
+ });
+ };
+ }
+
+ function rAF(fn) {
+ return win.requestAnimationFrame(fn);
+ }
+
+ function P_rAF() {
+ return new Promise(function (resolve) {
+ rAF(resolve);
+ });
+ }
+
+ function P_MozAfterPaint() {
+ return new Promise(function (resolve) {
+ win.addEventListener("MozAfterPaint", () => resolve(), { once: true });
+ });
+ }
+
+ var isWindow = target.self === target;
+
+ var getPos = isWindow
+ ? function () {
+ return target.pageYOffset;
+ }
+ : function () {
+ return target.scrollTop;
+ };
+
+ var gotoTop = isWindow
+ ? function () {
+ target.scroll(0, 0);
+ ensureScroll();
+ }
+ : function () {
+ target.scrollTop = 0;
+ ensureScroll();
+ };
+
+ var doScrollTick = isWindow
+ ? function () {
+ target.scrollBy(0, stepSize);
+ ensureScroll();
+ }
+ : function () {
+ target.scrollTop += stepSize;
+ ensureScroll();
+ };
+
+ var setSmooth = isWindow
+ ? function () {
+ target.document.scrollingElement.style.scrollBehavior = "smooth";
+ }
+ : function () {
+ target.style.scrollBehavior = "smooth";
+ };
+
+ var gotoBottom = isWindow
+ ? function () {
+ target.scrollTo(0, target.scrollMaxY);
+ }
+ : function () {
+ target.scrollTop = target.scrollHeight;
+ };
+
+ function ensureScroll() {
+ // Ensure scroll by reading computed values. screenY is for X11.
+ if (!this.dummyEnsureScroll) {
+ this.dummyEnsureScroll = 1;
+ }
+ this.dummyEnsureScroll += win.screenY + getPos();
+ }
+
+ // For reference, rAF should fire on vsync, but Gecko currently doesn't use vsync.
+ // Instead, it uses 1000/layout.frame_rate
+ // (with 60 as default value when layout.frame_rate == -1).
+ function P_syncScrollTest() {
+ return new Promise(function (resolve) {
+ // We should be at the top of the page now.
+ var start = win.performance.now();
+ var lastScrollPos = getPos();
+ var lastScrollTime = start;
+ var durations = [];
+
+ function tick() {
+ var now = win.performance.now();
+ var duration = now - lastScrollTime;
+ lastScrollTime = now;
+
+ durations.push(duration);
+ doScrollTick();
+
+ /* stop scrolling if we can't scroll more, or if we've reached requested number of steps */
+ if (
+ getPos() == lastScrollPos ||
+ (opt_numSteps && durations.length >= opt_numSteps + 2)
+ ) {
+ let profilerPaused = Promise.resolve();
+ if (typeof TalosContentProfiler !== "undefined") {
+ profilerPaused = TalosContentProfiler.subtestEnd(
+ testBaseName,
+ true
+ );
+ }
+
+ profilerPaused.then(() => {
+ // Note: The first (1-5) intervals WILL be longer than the rest.
+ // First interval might include initial rendering and be extra slow.
+ // Also requestAnimationFrame needs to sync (optimally in 1 frame) after long frames.
+ // Suggested: Ignore the first 5 intervals.
+
+ durations.pop(); // Last step was 0.
+ durations.pop(); // and the prev one was shorter and with end-of-page logic, ignore both.
+
+ if (win.talosDebug) {
+ win.talosDebug.displayData = true;
+ } // In a browser: also display all data points.
+
+ // For analysis (otherwise, it's too many data points for talos):
+ var sum = 0;
+ for (var i = 0; i < durations.length; i++) {
+ sum += Number(durations[i]);
+ }
+
+ // Report average interval or (failsafe) 0 if no intervls were recorded
+ result.values.push(durations.length ? sum / durations.length : 0);
+ result.names.push(testBaseName);
+ resolve();
+ });
+ return;
+ }
+
+ lastScrollPos = getPos();
+ P_MozAfterPaint().then(tick);
+ }
+
+ if (typeof TalosContentProfiler !== "undefined") {
+ TalosContentProfiler.subtestStart(testBaseName, true).then(() => {
+ rAF(tick);
+ });
+ }
+ });
+ }
+
+ function P_testAPZScroll() {
+ var APZ_MEASURE_MS = 1000;
+
+ function startFrameTimeRecording(cb) {
+ TalosPowersParent.exec("startFrameTimeRecording", null, cb, win);
+ }
+
+ function stopFrameTimeRecording(handle, cb) {
+ TalosPowersParent.exec("stopFrameTimeRecording", handle, cb, win);
+ }
+
+ return new Promise(function (resolve, reject) {
+ setSmooth();
+
+ var handle = -1;
+ startFrameTimeRecording(function (rv) {
+ handle = rv;
+ });
+
+ // Get the measurements after APZ_MEASURE_MS of scrolling
+ win.setTimeout(function () {
+ stopFrameTimeRecording(handle, function (intervals) {
+ function average(arr) {
+ var sum = 0;
+ for (var i = 0; i < arr.length; i++) {
+ sum += arr[i];
+ }
+ return arr.length ? sum / arr.length : 0;
+ }
+
+ // remove two frames on each side of the recording to get a cleaner result
+ result.values.push(average(intervals.slice(2, intervals.length - 2)));
+ result.names.push("CSSOM." + testBaseName);
+
+ resolve();
+ });
+ }, APZ_MEASURE_MS);
+
+ gotoBottom(); // trigger the APZ scroll
+ });
+ }
+
+ P_setupReportFn()
+ .then(FP_wait(260))
+ .then(gotoTop)
+ .then(P_rAF)
+ .then(P_syncScrollTest)
+ .then(gotoTop)
+ .then(FP_wait(260))
+ .then(P_testAPZScroll)
+ .then(function () {
+ report(result.values.join(","), 0, result.names.join(","));
+ });
+}
+
+// This code below here is unique to tscroll.js inside of pageloader
+try {
+ function handleMessageFromChrome(message) {
+ var payload = message.data.details;
+ testScroll(
+ payload.target,
+ payload.stepSize,
+ "PageLoader:RecordTime",
+ payload.opt_numSteps
+ );
+ }
+
+ addMessageListener("PageLoader:ScrollTest", handleMessageFromChrome);
+} catch (e) {}
diff --git a/testing/talos/talos/pageloader/chrome/utils.js b/testing/talos/talos/pageloader/chrome/utils.js
new file mode 100644
index 0000000000..e326f6c6a4
--- /dev/null
+++ b/testing/talos/talos/pageloader/chrome/utils.js
@@ -0,0 +1,34 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/* eslint-env mozilla/frame-script */
+
+var idleCallbackHandle;
+
+function _idleCallbackHandler() {
+ content.window.cancelIdleCallback(idleCallbackHandle);
+ sendAsyncMessage("PageLoader:IdleCallbackReceived", {});
+}
+
+function setIdleCallback() {
+ idleCallbackHandle = content.window.requestIdleCallback(_idleCallbackHandler);
+ sendAsyncMessage("PageLoader:IdleCallbackSet", {});
+}
+
+function contentLoadHandlerCallback(cb) {
+ function _handler(e) {
+ if (e.originalTarget.defaultView == content) {
+ content.wrappedJSObject.tpRecordTime = Cu.exportFunction((t, s, n) => {
+ sendAsyncMessage("PageLoader:RecordTime", {
+ time: t,
+ startTime: s,
+ testName: n,
+ });
+ }, content);
+ content.setTimeout(cb, 0);
+ content.setTimeout(setIdleCallback, 0);
+ }
+ }
+ return _handler;
+}
diff --git a/testing/talos/talos/pageloader/manifest.json b/testing/talos/talos/pageloader/manifest.json
new file mode 100644
index 0000000000..bd01bca519
--- /dev/null
+++ b/testing/talos/talos/pageloader/manifest.json
@@ -0,0 +1,23 @@
+{
+ "manifest_version": 2,
+ "name": "PageLoader extension",
+ "description": "Cycles through pages and measures load times",
+ "version": "1.1",
+
+ "browser_specific_settings": {
+ "gecko": {
+ "id": "pageloader@mozilla.org"
+ }
+ },
+
+ "experiment_apis": {
+ "pageloader": {
+ "schema": "schema.json",
+ "parent": {
+ "scopes": ["addon_parent"],
+ "script": "api.js",
+ "events": ["startup"]
+ }
+ }
+ }
+}
diff --git a/testing/talos/talos/pageloader/schema.json b/testing/talos/talos/pageloader/schema.json
new file mode 100644
index 0000000000..fe51488c70
--- /dev/null
+++ b/testing/talos/talos/pageloader/schema.json
@@ -0,0 +1 @@
+[]
diff --git a/testing/talos/talos/results.py b/testing/talos/talos/results.py
new file mode 100755
index 0000000000..801c18a0cc
--- /dev/null
+++ b/testing/talos/talos/results.py
@@ -0,0 +1,556 @@
+#!/usr/bin/env python
+
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+"""
+objects and methods for parsing and serializing Talos results
+see https://wiki.mozilla.org/Buildbot/Talos/DataFormat
+"""
+import csv
+import json
+import os
+import re
+
+import six
+
+from talos import filter, output, utils
+
+
+class TalosResults(object):
+ """Container class for Talos results"""
+
+ def __init__(self):
+ self.results = []
+ self.extra_options = []
+
+ def add(self, test_results):
+ self.results.append(test_results)
+
+ def add_extra_option(self, extra_option):
+ self.extra_options.append(extra_option)
+
+ def has_results(self):
+ return len(self.results) > 0
+
+ def output(self, output_formats):
+ """
+ output all results to appropriate URLs
+ - output_formats: a dict mapping formats to a list of URLs
+ """
+ try:
+ for key, urls in output_formats.items():
+ _output = output.Output(self, Results)
+ results = _output()
+ for url in urls:
+ _output.output(results, url)
+ except utils.TalosError as e:
+ # print to results.out
+ try:
+ _output = output.GraphserverOutput(self)
+ results = _output()
+ _output.output(
+ "file://%s" % os.path.join(os.getcwd(), "results.out"), results
+ )
+ except Exception:
+ pass
+ print("\nFAIL: %s" % str(e).replace("\n", "\nRETURN:"))
+ raise e
+
+
+class TestResults(object):
+ """container object for all test results across cycles"""
+
+ def __init__(self, test_config, global_counters=None, framework=None):
+ self.results = []
+ self.test_config = test_config
+ self.format = None
+ self.global_counters = global_counters or {}
+ self.all_counter_results = []
+ self.framework = framework
+ self.using_xperf = False
+
+ def name(self):
+ return self.test_config["name"]
+
+ def mainthread(self):
+ return self.test_config["mainthread"]
+
+ def add(self, results, counter_results=None):
+ """
+ accumulate one cycle of results
+ - results : TalosResults instance or path to browser log
+ - counter_results : counters accumulated for this cycle
+ """
+
+ # convert to a results class via parsing the browser log
+ format_pagename = True
+ if not self.test_config["format_pagename"]:
+ format_pagename = False
+
+ browserLog = BrowserLogResults(
+ results,
+ format_pagename=format_pagename,
+ counter_results=counter_results,
+ global_counters=self.global_counters,
+ )
+ results = browserLog.results()
+
+ self.using_xperf = browserLog.using_xperf
+ # ensure the results format matches previous results
+ if self.results:
+ if not results.format == self.results[0].format:
+ raise utils.TalosError("Conflicting formats for results")
+ else:
+ self.format = results.format
+
+ self.results.append(results)
+
+ if counter_results:
+ self.all_counter_results.append(counter_results)
+
+
+class Results(object):
+ def filter(self, testname, filters):
+ """
+ filter the results set;
+ applies each of the filters in order to the results data
+ filters should be callables that take a list
+ the last filter should return a scalar (float or int)
+ returns a list of [[data, page], ...]
+ """
+ retval = []
+ for result in self.results:
+ page = result["page"]
+ data = result["runs"]
+ remaining_filters = []
+
+ # ignore* functions return a filtered set of data
+ for f in filters:
+ if f.func.__name__.startswith("ignore"):
+ data = f.apply(data)
+ else:
+ remaining_filters.append(f)
+
+ # apply the summarization filters
+ for f in remaining_filters:
+ if f.func.__name__ == "v8_subtest":
+ # for v8_subtest we need to page for reference data
+ data = filter.v8_subtest(data, page)
+ else:
+ data = f.apply(data)
+
+ summary = {
+ "filtered": data, # backward compatibility with perfherder
+ "value": data,
+ }
+
+ retval.append([summary, page])
+
+ return retval
+
+ def raw_values(self):
+ return [(result["page"], result["runs"]) for result in self.results]
+
+ def values(self, testname, filters):
+ """return filtered (value, page) for each value"""
+ return [
+ [val, page]
+ for val, page in self.filter(testname, filters)
+ if val["filtered"] > -1
+ ]
+
+
+class TsResults(Results):
+ """
+ results for Ts tests
+ """
+
+ format = "tsformat"
+
+ def __init__(self, string, counter_results=None, format_pagename=True):
+ self.counter_results = counter_results
+
+ string = string.strip()
+ lines = string.splitlines()
+
+ # gather the data
+ self.results = []
+ index = 0
+
+ # Case where one test iteration may report multiple event values i.e. ts_paint
+ if string.startswith("{"):
+ jsonResult = json.loads(string)
+ result = {"runs": {}}
+ result["index"] = index
+ result["page"] = "NULL"
+
+ for event_label in jsonResult:
+ result["runs"][str(event_label)] = [jsonResult[event_label]]
+ self.results.append(result)
+
+ # Case where we support a pagename in the results
+ if not self.results:
+ for line in lines:
+ result = {}
+ r = line.strip().split(",")
+ r = [i for i in r if i]
+ if len(r) <= 1:
+ continue
+ result["index"] = index
+ result["page"] = r[0]
+ # note: if we have len(r) >1, then we have pagename,raw_results
+ result["runs"] = [float(i) for i in r[1:]]
+ self.results.append(result)
+ index += 1
+
+ # Original case where we just have numbers and no pagename
+ if not self.results:
+ result = {}
+ result["index"] = index
+ result["page"] = "NULL"
+ result["runs"] = [float(val) for val in string.split("|")]
+ self.results.append(result)
+
+
+class PageloaderResults(Results):
+ """
+ results from a browser_dump snippet
+ https://wiki.mozilla.org/Buildbot/Talos/DataFormat#browser_output.txt
+ """
+
+ format = "tpformat"
+
+ def __init__(self, string, counter_results=None, format_pagename=True):
+ """
+ - string : string of relevent part of browser dump
+ - counter_results : counter results dictionary
+ """
+
+ self.counter_results = counter_results
+
+ string = string.strip()
+ lines = string.splitlines()
+
+ # currently we ignore the metadata on top of the output (e.g.):
+ # _x_x_mozilla_page_load
+ # _x_x_mozilla_page_load_details
+ # |i|pagename|runs|
+ lines = [line for line in lines if ";" in line]
+
+ # gather the data
+ self.results = []
+ prev_line = ""
+ for line in lines:
+ result = {}
+
+ # Bug 1562883 - Determine what is causing a single line to get
+ # written on multiple lines.
+ if prev_line:
+ line = prev_line + line
+ prev_line = ""
+
+ r = line.strip("|").split(";")
+ r = [i for i in r if i]
+
+ if len(r) <= 2:
+ prev_line = line
+ continue
+
+ result["index"] = int(r[0])
+ result["page"] = r[1]
+ result["runs"] = [float(i) for i in r[2:]]
+
+ # fix up page
+ if format_pagename:
+ result["page"] = self.format_pagename(result["page"])
+
+ self.results.append(result)
+
+ def format_pagename(self, page):
+ """
+ fix up the page for reporting
+ """
+ page = page.rstrip("/")
+ if "/" in page:
+ if "base_page" in page or "ref_page" in page:
+ # for base vs ref type test, the page name is different format, i.e.
+ # base_page_1_http://localhost:53309/tests/perf-reftest/bloom-basic.html
+ page = page.split("/")[-1]
+ else:
+ page = page.split("/")[0]
+ return page
+
+
+class BrowserLogResults(object):
+ """parse the results from the browser log output"""
+
+ # tokens for the report types
+ report_tokens = [
+ ("tsformat", ("__start_report", "__end_report")),
+ ("tpformat", ("__start_tp_report", "__end_tp_report")),
+ ]
+
+ # tokens for timestamps, in order (attribute, (start_delimeter,
+ # end_delimter))
+ time_tokens = [
+ ("startTime", ("__startTimestamp", "__endTimestamp")),
+ (
+ "beforeLaunchTime",
+ ("__startBeforeLaunchTimestamp", "__endBeforeLaunchTimestamp"),
+ ),
+ (
+ "endTime",
+ ("__startAfterTerminationTimestamp", "__endAfterTerminationTimestamp"),
+ ),
+ ]
+
+ # regular expression for failure case if we can't parse the tokens
+ RESULTS_REGEX_FAIL = re.compile("__FAIL(.*?)__FAIL", re.DOTALL | re.MULTILINE)
+
+ # regular expression for responsiveness results
+ RESULTS_RESPONSIVENESS_REGEX = re.compile(
+ "MOZ_EVENT_TRACE\ssample\s\d*?\s(\d*\.?\d*)$", re.DOTALL | re.MULTILINE
+ )
+
+ # classes for results types
+ classes = {"tsformat": TsResults, "tpformat": PageloaderResults}
+
+ # If we are using xperf, we do not upload the regular results, only
+ # xperf counters
+ using_xperf = False
+
+ def __init__(
+ self,
+ results_raw,
+ format_pagename=True,
+ counter_results=None,
+ global_counters=None,
+ ):
+ """
+ - shutdown : whether to record shutdown results or not
+ """
+
+ self.counter_results = counter_results
+ self.global_counters = global_counters
+ self.format_pagename = format_pagename
+ self.results_raw = results_raw
+
+ # parse the results
+ try:
+ match = self.RESULTS_REGEX_FAIL.search(self.results_raw)
+ if match:
+ self.error(match.group(1))
+ raise utils.TalosError(match.group(1))
+
+ self.parse()
+ except utils.TalosError:
+ # TODO: consider investigating this further or adding additional
+ # information
+ raise # reraise failing exception
+
+ # accumulate counter results
+ self.counters(self.counter_results, self.global_counters)
+
+ def error(self, message):
+ """raise a TalosError for bad parsing of the browser log"""
+ raise utils.TalosError(message)
+
+ def parse(self):
+ position = -1
+
+ # parse the report
+ for format, tokens in self.report_tokens:
+ report, position = self.get_single_token(*tokens)
+ if report is None:
+ continue
+ self.browser_results = report
+ self.format = format
+ previous_tokens = tokens
+ break
+ else:
+ self.error(
+ "Could not find report in browser output: %s" % self.report_tokens
+ )
+
+ # parse the timestamps
+ for attr, tokens in self.time_tokens:
+ # parse the token contents
+ value, _last_token = self.get_single_token(*tokens)
+
+ # check for errors
+ if not value:
+ self.error(
+ "Could not find %s in browser output: (tokens: %s)" % (attr, tokens)
+ )
+ try:
+ value = int(float(value))
+ except ValueError:
+ self.error("Could not cast %s to an integer: %s" % (attr, value))
+ if _last_token < position:
+ self.error(
+ "%s [character position: %s] found before %s"
+ " [character position: %s]"
+ % (tokens, _last_token, previous_tokens, position)
+ )
+
+ # process
+ setattr(self, attr, value)
+ position = _last_token
+ previous_tokens = tokens
+
+ def get_single_token(self, start_token, end_token):
+ """browser logs should only have a single instance of token pairs"""
+ try:
+ parts, last_token = utils.tokenize(self.results_raw, start_token, end_token)
+ except AssertionError as e:
+ self.error(str(e))
+ if not parts:
+ return None, -1 # no match
+ if len(parts) != 1:
+ self.error("Multiple matches for %s,%s" % (start_token, end_token))
+ return parts[0], last_token
+
+ def results(self):
+ """return results instance appropriate to the format detected"""
+
+ if self.format not in self.classes:
+ raise utils.TalosError(
+ "Unable to find a results class for format: %s" % repr(self.format)
+ )
+
+ return self.classes[self.format](
+ self.browser_results, format_pagename=self.format_pagename
+ )
+
+ # methods for counters
+
+ def counters(self, counter_results=None, global_counters=None):
+ """accumulate all counters"""
+
+ if global_counters is not None:
+ if "responsiveness" in global_counters:
+ global_counters["responsiveness"].extend(self.responsiveness())
+ self.xperf(global_counters)
+
+ def xperf(self, counter_results):
+ """record xperf counters in counter_results dictionary"""
+
+ session_store_counter = "time_to_session_store_window_restored_ms"
+
+ counters = [
+ "main_startup_fileio",
+ "main_startup_netio",
+ "main_normal_fileio",
+ "main_normal_netio",
+ "nonmain_startup_fileio",
+ "nonmain_normal_fileio",
+ "nonmain_normal_netio",
+ session_store_counter,
+ ]
+
+ mainthread_counter_keys = ["readcount", "readbytes", "writecount", "writebytes"]
+ mainthread_counters = [
+ "_".join(["mainthread", counter_key])
+ for counter_key in mainthread_counter_keys
+ ]
+
+ self.mainthread_io(counter_results)
+
+ if (
+ not set(counters)
+ .union(set(mainthread_counters))
+ .intersection(counter_results.keys())
+ ):
+ # no xperf counters to accumulate
+ return
+
+ filename = "etl_output_thread_stats.csv"
+ if not os.path.exists(filename):
+ raise utils.TalosError(
+ "Error: we are looking for xperf results file %s,"
+ " and didn't find it" % filename
+ )
+
+ contents = open(filename).read()
+ lines = contents.splitlines()
+ reader = csv.reader(lines)
+ header = None
+ for row in reader:
+ # Read CSV
+ row = [i.strip() for i in row]
+ if not header:
+ # We are assuming the first row is the header and all other
+ # data is counters
+ header = row
+ continue
+ values = dict(six.moves.zip(header, row))
+
+ # Format for talos
+ thread = values["thread"]
+ counter = values["counter"].rsplit("_io_bytes", 1)[0]
+ counter_name = "%s_%s_%sio" % (thread, values["stage"], counter)
+ value = float(values["value"])
+
+ # Accrue counter
+ if counter_name in counter_results:
+ counter_results.setdefault(counter_name, []).append(value)
+ self.using_xperf = True
+
+ if set(mainthread_counters).intersection(counter_results.keys()):
+ filename = "etl_output.csv"
+ if not os.path.exists(filename):
+ raise utils.TalosError(
+ "Error: we are looking for xperf results file"
+ " %s, and didn't find it" % filename
+ )
+
+ contents = open(filename).read()
+ lines = contents.splitlines()
+ reader = csv.reader(lines)
+ header = None
+ for row in reader:
+ row = [i.strip() for i in row]
+ if not header:
+ # We are assuming the first row is the header and all
+ # other data is counters
+ header = row
+ continue
+ values = dict(six.moves.zip(header, row))
+ for i, mainthread_counter in enumerate(mainthread_counters):
+ if int(values[mainthread_counter_keys[i]]) > 0:
+ counter_results.setdefault(mainthread_counter, []).append(
+ [
+ int(values[mainthread_counter_keys[i]]),
+ values["filename"],
+ ]
+ )
+
+ if session_store_counter in counter_results.keys():
+ filename = "etl_output_session_restore_stats.csv"
+ # This file is a csv but it only contains one field, so we'll just
+ # obtain the value by converting the second line in the file.
+ with open(filename, "r") as contents:
+ lines = contents.read().splitlines()
+ if len(lines) > 1:
+ value = float(lines[1].strip())
+ counter_results.setdefault(session_store_counter, []).append(value)
+
+ def mainthread_io(self, counter_results):
+ """record mainthread IO counters in counter_results dictionary"""
+
+ # we want to measure mtio on xperf runs.
+ # this will be shoved into the xperf results as we ignore those
+ SCRIPT_DIR = os.path.abspath(os.path.realpath(os.path.dirname(__file__)))
+ filename = os.path.join(SCRIPT_DIR, "mainthread_io.json")
+ try:
+ contents = open(filename).read()
+ counter_results.setdefault("mainthreadio", []).append(contents)
+ self.using_xperf = True
+ except Exception:
+ # silent failure is fine here as we will only see this on tp5n runs
+ pass
+
+ def responsiveness(self):
+ return self.RESULTS_RESPONSIVENESS_REGEX.findall(self.results_raw)
diff --git a/testing/talos/talos/run_tests.py b/testing/talos/talos/run_tests.py
new file mode 100755
index 0000000000..8213c92897
--- /dev/null
+++ b/testing/talos/talos/run_tests.py
@@ -0,0 +1,554 @@
+#!/usr/bin/env python
+
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import copy
+import os
+import pathlib
+import sys
+import time
+import traceback
+
+import mozinfo
+import mozversion
+import six
+from mozgeckoprofiler import view_gecko_profile
+from mozlog import get_proxy_logger
+from wptserve import server
+from wptserve.handlers import handler
+
+from talos import utils
+from talos.config import ConfigurationError, get_configs
+from talos.results import TalosResults
+from talos.ttest import TTest
+from talos.utils import TalosError, TalosRegression
+
+# directory of this file
+here = os.path.dirname(os.path.realpath(__file__))
+LOG = get_proxy_logger()
+
+
+def useBaseTestDefaults(base, tests):
+ for test in tests:
+ for item in base:
+ if item not in test:
+ test[item] = base[item]
+ if test[item] is None:
+ test[item] = ""
+ return tests
+
+
+def set_tp_preferences(test, browser_config):
+ # sanity check pageloader values
+ # mandatory options: tpmanifest, tpcycles
+ if test["tpcycles"] not in six.moves.range(1, 1000):
+ raise TalosError("pageloader cycles must be int 1 to 1,000")
+ if "tpmanifest" not in test:
+ raise TalosError("tpmanifest not found in test: %s" % test)
+
+ # if profiling is on, override tppagecycles to prevent test hanging
+ if test["gecko_profile"]:
+ LOG.info(
+ "Gecko profiling is enabled so talos is reducing the number "
+ "of cycles, please disregard reported numbers"
+ )
+ for cycle_var in ["tppagecycles", "tpcycles", "cycles"]:
+ if test[cycle_var] > 2:
+ test[cycle_var] = 2
+
+ CLI_bool_options = [
+ "tpchrome",
+ "tphero",
+ "tpmozafterpaint",
+ "tploadnocache",
+ "tpscrolltest",
+ "fnbpaint",
+ "pdfpaint",
+ "a11y",
+ ]
+ CLI_options = ["tpcycles", "tppagecycles", "tptimeout", "tpmanifest"]
+ for key in CLI_bool_options:
+ _pref_name = "talos.%s" % key
+ if key in test:
+ test["preferences"][_pref_name] = test.get(key)
+ else:
+ # current test doesn't use this setting, remove it from our prefs
+ if _pref_name in test["preferences"]:
+ del test["preferences"][_pref_name]
+
+ for key in CLI_options:
+ value = test.get(key)
+ _pref_name = "talos.%s" % key
+ if value:
+ test["preferences"][_pref_name] = value
+ else:
+ # current test doesn't use this setting, remove it from our prefs
+ if _pref_name in test["preferences"]:
+ del test["preferences"][_pref_name]
+
+
+def setup_webserver(webserver):
+ """Set up a new web server with wptserve."""
+ LOG.info("starting webserver on %r" % webserver)
+
+ @handler
+ def tracemonkey_pdf_handler(request, response):
+ """Handler for the talos pdfpaint test."""
+ headers = [("Content-Type", "application/pdf")]
+ with open("%s/tests/pdfpaint/tracemonkey.pdf" % here, "rb") as file:
+ content = file.read()
+ return headers, content
+
+ host, port = webserver.split(":")
+ httpd = server.WebTestHttpd(host=host, port=int(port), doc_root=here)
+ httpd.router.register(
+ "GET", "tests/pdfpaint/tracemonkey.pdf", tracemonkey_pdf_handler
+ )
+ return httpd
+
+
+def skip_test(test_instance_dict, config):
+ # Determines if a test should be skipped, and returns
+ # a message with a reason why or None if it doesn't need
+ # to be skipped
+ if not test_instance_dict.get("pine", True) and config.get(
+ "project", ""
+ ).startswith("pine"):
+ return "Broken on the pine branch"
+ return None
+
+
+def run_tests(config, browser_config):
+ """Runs the talos tests on the given configuration and generates a report."""
+ # get the test data
+ tests = config["tests"]
+ tests = useBaseTestDefaults(config.get("basetest", {}), tests)
+ paths = ["profile_path", "tpmanifest", "extensions", "setup", "cleanup"]
+
+ for test_index, test in enumerate(tests):
+ if config.get("suite", False):
+ test["suite"] = config["suite"]
+ if test_index == 0:
+ test["is_first_test"] = True
+ # Check for profile_path, tpmanifest and interpolate based on Talos
+ # root https://bugzilla.mozilla.org/show_bug.cgi?id=727711
+ # Build command line from config
+ for path in paths:
+ if test.get(path):
+ if path == "extensions":
+ for _index, _ext in enumerate(test["extensions"]):
+ test["extensions"][_index] = utils.interpolate(_ext)
+ else:
+ test[path] = utils.interpolate(test[path])
+ if test.get("tpmanifest"):
+ test["tpmanifest"] = os.path.normpath(
+ "file:/%s"
+ % (six.moves.urllib.parse.quote(test["tpmanifest"], "/\\t:\\"))
+ )
+ test["preferences"]["talos.tpmanifest"] = test["tpmanifest"]
+
+ # if using firstNonBlankPaint, set test preference for it
+ # so that the browser pref will be turned on (in ffsetup)
+ if test.get("fnbpaint", False):
+ LOG.info("Test is using firstNonBlankPaint, browser pref will be turned on")
+ test["preferences"][
+ "dom.performance.time_to_non_blank_paint.enabled"
+ ] = True
+
+ test["setup"] = utils.interpolate(test["setup"])
+ test["cleanup"] = utils.interpolate(test["cleanup"])
+
+ if not test.get("profile", False):
+ test["profile"] = config.get("profile")
+
+ if mozinfo.os == "win":
+ browser_config["extra_args"] = ["-wait-for-browser", "-no-deelevate"]
+ else:
+ browser_config["extra_args"] = []
+
+ # pass --no-remote to firefox launch, if --develop is specified
+ # we do that to allow locally the user to have another running firefox
+ # instance
+ if browser_config["develop"]:
+ browser_config["extra_args"].append("--no-remote")
+
+ # Pass subtests filter argument via a preference
+ if browser_config["subtests"]:
+ browser_config["preferences"]["talos.subtests"] = browser_config["subtests"]
+
+ if not browser_config.get("fission", True):
+ browser_config["preferences"]["fission.autostart"] = False
+
+ browser_config["preferences"]["network.proxy.type"] = 2
+ browser_config["preferences"]["network.proxy.autoconfig_url"] = (
+ """data:text/plain,
+function FindProxyForURL(url, host) {
+ if (url.startsWith('http')) {
+ return 'PROXY %s';
+ }
+ return 'DIRECT';
+}"""
+ % browser_config["webserver"]
+ )
+
+ # If --code-coverage files are expected, set flag in browser config so ffsetup knows
+ # that it needs to delete any ccov files resulting from browser initialization
+ # NOTE: This is only supported in production; local setup of ccov folders and
+ # data collection not supported yet, so if attempting to run with --code-coverage
+ # flag locally, that is not supported yet
+ if config.get("code_coverage", False):
+ if browser_config["develop"]:
+ raise TalosError(
+ "Aborting: talos --code-coverage flag is only "
+ "supported in production"
+ )
+ else:
+ browser_config["code_coverage"] = True
+
+ # set defaults
+ testdate = config.get("testdate", "")
+
+ # get the process name from the path to the browser
+ if not browser_config["process"]:
+ browser_config["process"] = os.path.basename(browser_config["browser_path"])
+
+ # fix paths to substitute
+ # `os.path.dirname(os.path.abspath(__file__))` for ${talos}
+ # https://bugzilla.mozilla.org/show_bug.cgi?id=705809
+ browser_config["extensions"] = [
+ utils.interpolate(i) for i in browser_config["extensions"]
+ ]
+ browser_config["bcontroller_config"] = utils.interpolate(
+ browser_config["bcontroller_config"]
+ )
+
+ # normalize browser path to work across platforms
+ browser_config["browser_path"] = os.path.normpath(browser_config["browser_path"])
+
+ binary = browser_config["browser_path"]
+ version_info = mozversion.get_version(binary=binary)
+ browser_config["browser_name"] = version_info["application_name"]
+ browser_config["browser_version"] = version_info["application_version"]
+ browser_config["buildid"] = version_info["application_buildid"]
+ try:
+ browser_config["repository"] = version_info["application_repository"]
+ browser_config["sourcestamp"] = version_info["application_changeset"]
+ except KeyError:
+ if not browser_config["develop"]:
+ print("Abort: unable to find changeset or repository: %s" % version_info)
+ sys.exit(1)
+ else:
+ browser_config["repository"] = "develop"
+ browser_config["sourcestamp"] = "develop"
+
+ # get test date in seconds since epoch
+ if testdate:
+ date = int(time.mktime(time.strptime(testdate, "%a, %d %b %Y %H:%M:%S GMT")))
+ else:
+ date = int(time.time())
+ LOG.debug("using testdate: %d" % date)
+ LOG.debug("actual date: %d" % int(time.time()))
+
+ # results container
+ talos_results = TalosResults()
+
+ # results links
+ if not browser_config["develop"] and not config["gecko_profile"]:
+ results_urls = dict(
+ # another hack; datazilla stands for Perfherder
+ # and do not require url, but a non empty dict is required...
+ output_urls=["local.json"],
+ )
+ else:
+ # local mode, output to files
+ results_urls = dict(output_urls=[os.path.abspath("local.json")])
+
+ httpd = setup_webserver(browser_config["webserver"])
+ httpd.start()
+
+ # legacy still required for perfherder data
+ talos_results.add_extra_option("e10s")
+ talos_results.add_extra_option("stylo")
+
+ if config["gecko_profile"]:
+ talos_results.add_extra_option("gecko-profile")
+
+ # differentiate fission vs non-fission results in perfherder
+ if browser_config.get("fission", True):
+ talos_results.add_extra_option("fission")
+
+ # differentiate webrender from non-webrender results
+ if browser_config["preferences"].get("gfx.webrender.software", False):
+ talos_results.add_extra_option("webrender-sw")
+ else:
+ # we need to add 'webrender' so reported data is consistent
+ talos_results.add_extra_option("webrender")
+
+ # differentiate webgl from webgl-ipc results
+ if browser_config["preferences"].get("webgl.out-of-process", False):
+ talos_results.add_extra_option("webgl-ipc")
+
+ testname = None
+
+ # run the tests
+ timer = utils.Timer()
+ LOG.suite_start(tests=[test["name"] for test in tests])
+ try:
+ for test in tests:
+ testname = test["name"]
+ LOG.test_start(testname)
+
+ # Skip test if necessary
+ skip_reason = skip_test(test, config)
+ if skip_reason is not None and skip_reason != "":
+ LOG.info("Skipping %s, reason: %s" % (testname, skip_reason))
+ LOG.test_end(
+ testname,
+ status="SKIP",
+ message="Test skipped: %s" % skip_reason,
+ )
+ continue
+
+ if not test.get("url"):
+ # set browser prefs for pageloader test setings (doesn't use cmd line args / url)
+ test["url"] = None
+ set_tp_preferences(test, browser_config)
+
+ mytest = TTest()
+
+ utility_path = None
+ if config.get("screenshot_on_failure"):
+ obj_dir = os.environ.get("MOZ_DEVELOPER_OBJ_DIR", None)
+ if obj_dir is None:
+ build_dir = pathlib.Path(os.environ.get("MOZ_UPLOAD_DIR")).parent
+ utility_path = pathlib.Path(build_dir, "tests", "bin")
+ else:
+ utility_path = os.path.join(obj_dir, "dist", "bin")
+
+ # some tests like ts_paint return multiple results in a single iteration
+ if test.get("firstpaint", False) or test.get("userready", None):
+ # we need a 'testeventmap' to tell us which tests each event should map to
+ multi_value_result = None
+ separate_results_list = []
+
+ test_event_map = test.get("testeventmap", None)
+ if test_event_map is None:
+ raise TalosError(
+ "Need 'testeventmap' in test.py for %s" % test.get("name")
+ )
+
+ # run the test
+ multi_value_result = mytest.runTest(browser_config, test)
+ if multi_value_result is None:
+ raise TalosError(
+ "Abort: no results returned for %s" % test.get("name")
+ )
+
+ # parse out the multi-value results, and 'fake it' to appear like separate tests
+ separate_results_list = convert_to_separate_test_results(
+ multi_value_result, test_event_map
+ )
+
+ # now we have three separate test results, store them
+ for test_result in separate_results_list:
+ talos_results.add(test_result)
+
+ # some tests like bloom_basic run two separate tests and then compare those values
+ # we want the results in perfherder to only be the actual difference between those
+ # and store the base and reference test replicates in results.json for upload
+ elif test.get("base_vs_ref", False):
+ # run the test, results will be reported for each page like two tests in the suite
+ base_and_reference_results = mytest.runTest(
+ browser_config, test, utility_path=utility_path
+ )
+ # now compare each test, and create a new test object for the comparison
+ talos_results.add(make_comparison_result(base_and_reference_results))
+ else:
+ # just expecting regular test - one result value per iteration
+ talos_results.add(
+ mytest.runTest(browser_config, test, utility_path=utility_path)
+ )
+ LOG.test_end(testname, status="OK")
+
+ except TalosRegression as exc:
+ LOG.error("Detected a regression for %s" % testname)
+ # by returning 1, we report an orange to buildbot
+ # http://docs.buildbot.net/latest/developer/results.html
+ LOG.test_end(
+ testname, status="FAIL", message=str(exc), stack=traceback.format_exc()
+ )
+ return 1
+ except Exception as exc:
+ # NOTE: if we get into this condition, talos has an internal
+ # problem and cannot continue
+ # this will prevent future tests from running
+ LOG.test_end(
+ testname, status="ERROR", message=str(exc), stack=traceback.format_exc()
+ )
+ # indicate a failure to buildbot, turn the job red
+ return 2
+ finally:
+ LOG.suite_end()
+ httpd.stop()
+
+ LOG.info("Completed test suite (%s)" % timer.elapsed())
+
+ if talos_results.has_results():
+ # output results
+ if results_urls and not browser_config["no_upload_results"]:
+ talos_results.output(results_urls)
+ if browser_config["develop"] or config["gecko_profile"]:
+ print(
+ "Thanks for running Talos locally. Results are in %s"
+ % (results_urls["output_urls"])
+ )
+
+ # when running talos locally with gecko profiling on, use the view-gecko-profile
+ # tool to automatically load the latest gecko profile in profiler.firefox.com
+ if config["gecko_profile"] and browser_config["develop"]:
+ if os.environ.get("DISABLE_PROFILE_LAUNCH", "0") == "1":
+ LOG.info(
+ "Not launching profiler.firefox.com because DISABLE_PROFILE_LAUNCH=1"
+ )
+ else:
+ view_gecko_profile_from_talos()
+ else:
+ LOG.error("No tests ran")
+ return 2
+
+ # we will stop running tests on a failed test, or we will return 0 for
+ # green
+ return 0
+
+
+def view_gecko_profile_from_talos():
+ profile_zip_path = os.environ.get("TALOS_LATEST_GECKO_PROFILE_ARCHIVE", None)
+ if profile_zip_path is None or not os.path.exists(profile_zip_path):
+ LOG.info(
+ "No local talos gecko profiles were found so not launching profiler.firefox.com"
+ )
+ return
+
+ LOG.info("Profile saved locally to: %s" % profile_zip_path)
+ view_gecko_profile(profile_zip_path)
+
+
+def make_comparison_result(base_and_reference_results):
+ """Receive a test result object meant to be used as a base vs reference test. The result
+ object will have one test with two subtests; instead of traditional subtests we want to
+ treat them as separate tests, comparing them together and reporting the comparison results.
+
+ Results with multiple pages used as subtests would look like this normally, with the overall
+ result value being the mean of the pages/subtests:
+
+ PERFHERDER_DATA: {"framework": {"name": "talos"}, "suites": [{"extraOptions": ["e10s"],
+ "name": "bloom_basic", "lowerIsBetter": true, "alertThreshold": 5.0, "value": 594.81,
+ "subtests": [{"name": ".html", "lowerIsBetter": true, "alertThreshold": 5.0, "replicates":
+ [586.52, ...], "value": 586.52], "unit": "ms"}, {"name": "-ref.html", "lowerIsBetter": true,
+ "alertThreshold": 5.0, "replicates": [603.225, ...], "value": 603.225, "unit": "ms"}]}]}
+
+ We want to compare the subtests against eachother (base vs ref) and create a new single test
+ results object with the comparison results, that will look like traditional single test results
+ like this:
+
+ PERFHERDER_DATA: {"framework": {"name": "talos"}, "suites": [{"lowerIsBetter": true,
+ "subtests": [{"name": "", "lowerIsBetter": true, "alertThreshold": 5.0, "replicates":
+ [16.705, ...], "value": 16.705, "unit": "ms"}], "extraOptions": ["e10s"], "name":
+ "bloom_basic", "alertThreshold": 5.0}]}
+ """
+ # create a new results object for the comparison result; keep replicates from both pages
+ comparison_result = copy.deepcopy(base_and_reference_results)
+
+ # remove original results from our copy as they will be replaced by one comparison result
+ comparison_result.results[0].results = []
+ comp_results = comparison_result.results[0].results
+
+ # zero-based count of how many base vs reftest sets we have
+ subtest_index = 0
+
+ # each set of two results is actually a base test followed by the
+ # reference test; we want to go through each set of base vs reference
+ for x in range(0, len(base_and_reference_results.results[0].results), 2):
+ # separate the 'base' and 'reference' result run values
+ results = base_and_reference_results.results[0].results
+ base_result_runs = results[x]["runs"]
+ ref_result_runs = results[x + 1]["runs"]
+
+ # the test/subtest result is the difference between the base vs reference test page
+ # values; for this result use the base test page name for the subtest/test name
+ sub_test_name = base_and_reference_results.results[0].results[x]["page"]
+
+ # populate our new comparison result with 'base' and 'ref' replicates
+ comp_results.append(
+ {
+ "index": 0,
+ "runs": [],
+ "page": sub_test_name,
+ "base_runs": base_result_runs,
+ "ref_runs": ref_result_runs,
+ }
+ )
+
+ # now step thru each result, compare 'base' vs 'ref', and store the difference in 'runs'
+ _index = 0
+ for next_ref in comp_results[subtest_index]["ref_runs"]:
+ diff = abs(next_ref - comp_results[subtest_index]["base_runs"][_index])
+ # pylint: disable=W1633
+ comp_results[subtest_index]["runs"].append(float(round(diff, 3)))
+ _index += 1
+
+ # increment our base vs reference subtest index
+ subtest_index += 1
+
+ return comparison_result
+
+
+def convert_to_separate_test_results(multi_value_result, test_event_map):
+ """Receive a test result that actually contains multiple values in a single iteration, and
+ parse it out in order to 'fake' three seprate test results.
+
+ Incoming result looks like this:
+
+ [{'index': 0, 'runs': {'event_1': [1338, ...], 'event_2': [1438, ...], 'event_3':
+ [1538, ...]}, 'page': 'NULL'}]
+
+ We want to parse it out such that we have 'faked' three separate tests, setting test names
+ and taking the run values for each. End goal is to have results reported as three separate
+ tests, like this:
+
+ PERFHERDER_DATA: {"framework": {"name": "talos"}, "suites": [{"subtests": [{"replicates":
+ [1338, ...], "name": "ts_paint", "value": 1338}], "extraOptions": ["e10s"], "name":
+ "ts_paint"}, {"subtests": [{"replicates": [1438, ...], "name": "ts_first_paint", "value":
+ 1438}], "extraOptions": ["e10s"], "name": "ts_first_paint"}, {"subtests": [{"replicates":
+ [1538, ...], "name": "ts_user_ready", "value": 1538}], "extraOptions": ["e10s"], "name":
+ "ts_user_ready"}]}
+ """
+ list_of_separate_tests = []
+
+ for next_test in test_event_map:
+ # copy the original test result that has multiple values per iteration
+ separate_test = copy.deepcopy(multi_value_result)
+ # set the name of the new 'faked' test
+ separate_test.test_config["name"] = next_test["name"]
+ # set the run values for the new test
+ for x in separate_test.results:
+ for item in x.results:
+ all_runs = item["runs"]
+ item["runs"] = all_runs[next_test["label"]]
+ # add it to our list of results to return
+ list_of_separate_tests.append(separate_test)
+
+ return list_of_separate_tests
+
+
+def main(args=sys.argv[1:]):
+ try:
+ config, browser_config = get_configs()
+ except ConfigurationError as exc:
+ sys.exit("ERROR: %s" % exc)
+ sys.exit(run_tests(config, browser_config))
+
+
+if __name__ == "__main__":
+ main()
diff --git a/testing/talos/talos/scripts/report.py b/testing/talos/talos/scripts/report.py
new file mode 100644
index 0000000000..f5b952371a
--- /dev/null
+++ b/testing/talos/talos/scripts/report.py
@@ -0,0 +1,148 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+import argparse
+import collections
+import csv
+import os
+import sys
+from calendar import day_name
+from datetime import datetime
+
+import compare
+import numpy
+import six
+
+sys.path.insert(1, os.path.join(sys.path[0], ".."))
+
+
+def get_branch(platform):
+ if platform.startswith("OSX"):
+ return compare.branch_map["Inbound"]["pgo"]["id"]
+ return compare.branch_map["Inbound"]["nonpgo"]["id"]
+
+
+def get_all_test_tuples():
+ ret = []
+ for test in compare.test_map:
+ for platform in compare.platform_map:
+ ret.extend(get_tuple(test, platform))
+ return ret
+
+
+def get_tuple(test, platform):
+ return [
+ (
+ compare.test_map[test]["id"],
+ get_branch(platform),
+ compare.platform_map[platform],
+ test,
+ platform,
+ )
+ ]
+
+
+def generate_report(tuple_list, filepath, mode="variance"):
+ avg = []
+
+ for test in tuple_list:
+ testid, branchid, platformid = test[:3]
+ data_dict = compare.getGraphData(testid, branchid, platformid)
+ week_avgs = []
+
+ if data_dict:
+ data = data_dict["test_runs"]
+ data.sort(key=lambda x: x[3])
+ data = data[int(0.1 * len(data)) : int(0.9 * len(data) + 1)]
+ time_dict = collections.OrderedDict()
+ days = {}
+
+ for point in data:
+ time = datetime.fromtimestamp(point[2]).strftime("%Y-%m-%d")
+ time_dict[time] = time_dict.get(time, []) + [point[3]]
+
+ for time in time_dict:
+ runs = len(time_dict[time])
+ weekday = datetime.strptime(time, "%Y-%m-%d").strftime("%A")
+ variance = numpy.var(time_dict[time])
+ if mode == "variance":
+ days[weekday] = days.get(weekday, []) + [variance]
+ elif mode == "count":
+ days[weekday] = days.get(weekday, []) + [runs]
+
+ line = ["-".join(test[3:])]
+ for day in day_name:
+ if mode == "variance":
+ # removing top and bottom 10% to reduce outlier influence
+ # pylint --py3k W1619
+ tenth = len(days[day]) / 10
+ average = numpy.average(sorted(days[day])[tenth : tenth * 9 + 1])
+ elif mode == "count":
+ average = numpy.average(days[day])
+ line.append("%.3f" % average)
+ week_avgs.append(average)
+
+ outliers = is_normal(week_avgs)
+ for j in six.moves.range(7):
+ if j in outliers:
+ line[j + 1] = "**" + str(line[j + 1]) + "**"
+
+ avg.append(line)
+
+ with open(filepath, "wb") as report:
+ avgs_header = csv.writer(report, quoting=csv.QUOTE_ALL)
+ avgs_header.writerow(["test-platform"] + list(day_name))
+ for line in avg:
+ out = csv.writer(report, quoting=csv.QUOTE_ALL)
+ out.writerow(line)
+
+
+def is_normal(y):
+ # This is a crude initial attempt at detecting normal distributions
+ # TODO: Improve this
+ limit = 1.5
+ clean_week = []
+ outliers = []
+ # find a baseline for the week
+ if (min(y[0:4]) * limit) <= max(y[0:4]):
+ for i in six.moves.range(1, 5):
+ if y[i] > (y[i - 1] * limit) or y[i] > (y[i + 1] * limit):
+ outliers.append(i)
+ continue
+ clean_week.append(y[i])
+ else:
+ clean_week = y
+
+ # look at weekends now
+ # pylint --py3k W1619
+ avg = sum(clean_week) / len(clean_week)
+ for i in six.moves.range(5, 7):
+ # look for something outside of the 20% window
+ if (y[i] * 1.2) < avg or y[i] > (avg * 1.2):
+ outliers.append(i)
+ return outliers
+
+
+def main():
+ parser = argparse.ArgumentParser(description="Generate weekdays reports")
+ parser.add_argument("--test", help="show only the test named TEST")
+ parser.add_argument("--platform", help="show only the platform named PLATFORM")
+ parser.add_argument("--mode", help="select mode", default="variance")
+ args = parser.parse_args()
+ tuple_list = get_all_test_tuples()
+ f = "report"
+ if args.platform:
+ tuple_list = [x for x in tuple_list if x[4] == args.platform]
+ f += "-%s" % args.platform
+
+ if args.test:
+ tuple_list = [x for x in tuple_list if x[3] == args.test]
+ f += "-%s" % args.test
+
+ f += "-%s" % args.mode
+ generate_report(tuple_list, filepath=f + ".csv", mode=args.mode)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/testing/talos/talos/scripts/talos-debug.js b/testing/talos/talos/scripts/talos-debug.js
new file mode 100644
index 0000000000..90c102071e
--- /dev/null
+++ b/testing/talos/talos/scripts/talos-debug.js
@@ -0,0 +1,215 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/** ****************************************************************
+ * window.talosDebug provides some statistical functions
+ * (sum, average, median, stddev) and a tpRecordTime method which
+ * reports some statistics about the data set, including detected
+ * stability point of the data (detecting first few noisy elements).
+ * If tpRecordTime doesn't exist globally (i.e. running outside of
+ * talos, e.g. in a browser), then it points it to window.talosDebug.tpRecordTime
+ * Can be controlled by few properties (disable display, hardcoded
+ * stability point, etc)
+ *
+ * talos-debug.js: Bug 849558
+ *****************************************************************/
+window.talosDebug = {
+ // Optional config properties
+ disabled: false,
+ ignore: -1, // Number of items to ignore at the begining of the set. -1 for auto-detect.
+ displayData: false, // If true, will also display all the data points.
+ fixed: 2, // default floating point digits for display.
+ // End of config
+
+ sum(values) {
+ return values.reduce(function (a, b) {
+ return a + b;
+ });
+ },
+
+ average(values) {
+ var d = window.talosDebug;
+ return values.length ? d.sum(values) / values.length : 999999;
+ },
+
+ median(values) {
+ var clone = values.slice(0);
+ var sorted = clone.sort(function (a, b) {
+ // eslint-disable-next-line no-nested-ternary
+ return a > b ? 1 : a < b ? -1 : 0;
+ });
+ var len = values.length;
+ if (!len) {
+ return 999999;
+ }
+ if (len % 2) {
+ // We have a middle number
+ return sorted[(len - 1) / 2];
+ }
+ return (sorted[len / 2] + sorted[len / 2 - 1]) / 2; // Average value of the two middle items.
+ },
+
+ stddev(values, avg) {
+ if (values.length <= 1) {
+ return 0;
+ }
+
+ return Math.sqrt(
+ values
+ .map(function (v) {
+ return Math.pow(v - avg, 2);
+ })
+ .reduce(function (a, b) {
+ return a + b;
+ }) /
+ (values.length - 1)
+ );
+ },
+
+ // Estimate the number of warmup iterations of this data set (in a completely unscrientific way).
+ // returns -1 if could not find a stability point (supposedly meaning that the values
+ // are still in the process of convergence).
+ // Algorithm (not based on a scientific method which I know of):
+ // Target: Find a locally noisy value after the values show stability
+ // (stddev of a moving window stops decreasing), while trying to make sure
+ // that it wasn't a glitch and the next 2 floating window stddev are, indeed, not
+ // still decreasing.
+ // Do the above for few different window widths (3-7), get the maximum result of those.
+ // Now we should have an index which is at least the 2nd value within the stable part.
+ // We get stddev for that index..end (baseStd), and then go backwards as long as stddev is
+ // decreasing or within ~1% of baseStd, and return the earliest index for which it is.
+ detectWarmup(values) {
+ var MIN_WIDTH = 3;
+ var MAX_WIDTH = 7;
+ var d = window.talosDebug;
+
+ function windowStd(from, winSize) {
+ var win = values.slice(from, from + winSize);
+ return d.stddev(win, d.median(values));
+ }
+
+ var stableFrom = -1;
+ var overallAverage = d.median(values);
+ // var overallStd = d.stddev(values, overallAverage);
+ for (var winWidth = MIN_WIDTH; winWidth < MAX_WIDTH + 1; winWidth++) {
+ var prevStd = windowStd(0, winWidth);
+ for (var i = 1; i < values.length - winWidth - 3; i++) {
+ var w0 = windowStd(i + 0, winWidth);
+ var w1 = windowStd(i + 1, winWidth);
+ var w2 = windowStd(i + 2, winWidth);
+ // var currWindow = values.slice(i, i + winWidth);
+ if (w0 >= prevStd && !(w1 < w0 && w2 < w1)) {
+ if (i > stableFrom) {
+ stableFrom = i;
+ }
+ break;
+ }
+ prevStd = w0;
+ }
+ }
+
+ function withinPercentage(base, value, percentage) {
+ return Math.abs(base - value) < (base * percentage) / 100;
+ }
+ // Now go backwards as long as stddev decreases or doesn't increase in more than 1%.
+ var baseStd = d.stddev(values.slice(stableFrom), overallAverage);
+ var len = values.length;
+ while (true) {
+ var current = d.stddev(values.slice(stableFrom - 1), overallAverage);
+ // 100/len : the more items we have, the more sensitively we compare:
+ // for 100 items, we're allowing 2% over baseStd.
+ if (
+ stableFrom > 0 &&
+ (current < baseStd ||
+ withinPercentage(baseStd, current, 200 / (len ? len : 100)))
+ ) {
+ stableFrom--;
+ } else {
+ break;
+ }
+ }
+
+ return stableFrom;
+ },
+
+ statsDisplay(collection) {
+ var d = window.talosDebug;
+ var std = d.stddev(collection, d.average(collection));
+ var avg = d.average(collection);
+ var med = d.median(collection);
+ return (
+ "Count: " +
+ collection.length +
+ "\nAverage: " +
+ avg.toFixed(d.fixed) +
+ "\nMedian: " +
+ med.toFixed(d.fixed) +
+ "\nStdDev: " +
+ std.toFixed(d.fixed) +
+ " (" +
+ ((100 * std) / (avg ? avg : 1)).toFixed(d.fixed) +
+ "% of average)"
+ );
+ },
+
+ tpRecordTime(dataCSV) {
+ var d = window.talosDebug;
+ if (d.disabled) {
+ return;
+ }
+
+ var collection = ("" + dataCSV).split(",").map(function (item) {
+ return parseFloat(item);
+ });
+ var res = d.statsDisplay(collection);
+
+ var warmup = d.ignore >= 0 ? d.ignore : d.detectWarmup(collection);
+ if (warmup >= 0) {
+ res +=
+ "\n\nWarmup " +
+ (d.ignore >= 0 ? "requested: " : "auto-detected: ") +
+ warmup;
+ var warmedUp = collection.slice(warmup);
+ if (warmup) {
+ res +=
+ "\nAfter ignoring first " +
+ (warmup > 1 ? warmup + " items" : "item") +
+ ":\n";
+ res += d.statsDisplay(warmedUp);
+ }
+ } else {
+ res += "\n\nWarmup auto-detection: Failed.";
+ }
+
+ if (d.displayData) {
+ var disp = collection.map(function (item) {
+ return item.toFixed(d.fixed);
+ });
+ if (warmup >= 0) {
+ disp.splice(warmup, 0, "[warmed-up:]");
+ }
+ res += "\n\nRecorded:\n" + disp.join(", ");
+
+ res += "\n\nStddev from item NN to last:\n";
+ disp = collection.map(function (value, index) {
+ return d
+ .stddev(collection.slice(index), d.average(collection.slice(index)))
+ .toFixed(d.fixed);
+ });
+ if (warmup >= 0) {
+ disp.splice(warmup, 0, "[warmed-up:]");
+ }
+ res += disp.join(", ");
+ } else {
+ res += "\n\n[set window.talosDebug.displayData=true for data]";
+ }
+
+ alert(res);
+ },
+};
+
+// Enable testing outside of talos by providing an alternative report function.
+if (typeof tpRecordTime === "undefined") {
+ tpRecordTime = window.talosDebug.tpRecordTime;
+}
diff --git a/testing/talos/talos/startup_test/__init__.py b/testing/talos/talos/startup_test/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/testing/talos/talos/startup_test/__init__.py
diff --git a/testing/talos/talos/startup_test/sessionrestore/addon/api.js b/testing/talos/talos/startup_test/sessionrestore/addon/api.js
new file mode 100644
index 0000000000..f621894623
--- /dev/null
+++ b/testing/talos/talos/startup_test/sessionrestore/addon/api.js
@@ -0,0 +1,167 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* vim: set ts=2 et sw=2 tw=80 filetype=javascript: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+/* globals Services, XPCOMUtils */
+
+ChromeUtils.defineESModuleGetters(this, {
+ BrowserWindowTracker: "resource:///modules/BrowserWindowTracker.sys.mjs",
+ SessionStartup: "resource:///modules/sessionstore/SessionStartup.sys.mjs",
+ StartupPerformance:
+ "resource:///modules/sessionstore/StartupPerformance.sys.mjs",
+ setTimeout: "resource://gre/modules/Timer.sys.mjs",
+});
+
+/* globals ExtensionAPI */
+
+this.sessionrestore = class extends ExtensionAPI {
+ onStartup() {
+ this.promiseIdleFinished = Promise.withResolvers();
+ Services.obs.addObserver(this, "browser-idle-startup-tasks-finished");
+ // run() is async but we don't want to await or return it here,
+ // since the extension should be considered started even before
+ // run() has finished all its work.
+ this.run();
+ }
+
+ observe(subject, topic, data) {
+ if (topic == "browser-idle-startup-tasks-finished") {
+ this.promiseIdleFinished.resolve();
+ }
+ }
+
+ async ensureTalosParentProfiler() {
+ // TalosParentProfiler is part of TalosPowers, which is a separate WebExtension
+ // that may or may not already have finished loading at this point. getTalosParentProfiler
+ // is used to wait for TalosPowers to be around before continuing. This should
+ // not be used to delay the execution of the test, but to delay the dumping of
+ // the profile to disk.
+ async function getTalosParentProfiler() {
+ try {
+ var { TalosParentProfiler } = ChromeUtils.importESModule(
+ "resource://talos-powers/TalosParentProfiler.sys.mjs"
+ );
+ return TalosParentProfiler;
+ } catch (err) {
+ await new Promise(resolve => setTimeout(resolve, 500));
+ return getTalosParentProfiler();
+ }
+ }
+
+ this.TalosParentProfiler = await getTalosParentProfiler();
+ }
+
+ async finishProfiling(msg) {
+ await this.ensureTalosParentProfiler();
+
+ // In rare circumstances, it's possible for the session file to be read
+ // into memory and for SessionStore to report itself as initialized before
+ // the initial window has had a chance to finish setting itself up. To
+ // account for this, we ensure that BrowserWindowTracker.windowCount is
+ // not zero - and if it is, we wait for the first window to finish opening
+ // before proceeding.
+ if (!BrowserWindowTracker.windowCount) {
+ const BROWSER_WINDOW_READY_TOPIC = "browser-delayed-startup-finished";
+ await new Promise(resolve => {
+ let observe = async () => {
+ Services.obs.removeObserver(observe, BROWSER_WINDOW_READY_TOPIC);
+ resolve();
+ };
+ Services.obs.addObserver(observe, BROWSER_WINDOW_READY_TOPIC);
+ });
+ }
+
+ let win = BrowserWindowTracker.getTopWindow();
+ let args = win.arguments[0];
+ if (args && args instanceof Ci.nsIArray) {
+ // For start-up tests Gecko Profiler arguments are passed to the first URL in
+ // the query string, with the presumption that some tab that is loaded at start-up
+ // will want to use them in the TalosContentProfiler.js script.
+ //
+ // Because we're running this part of the test in the parent process, we
+ // pull those arguments from the top window directly. This is mainly so
+ // that TalosParentProfiler knows where to save the profile.
+ // eslint-disable-next-line mozilla/reject-importGlobalProperties
+ Cu.importGlobalProperties(["URL"]);
+ let url = new URL(args.queryElementAt(0, Ci.nsISupportsString).data);
+ this.TalosParentProfiler.initFromURLQueryParams(url.search);
+ }
+
+ await this.TalosParentProfiler.subtestEnd(msg);
+ await this.TalosParentProfiler.finishStartupProfiling();
+ }
+
+ async run() {
+ try {
+ let didRestore = true;
+
+ if (!StartupPerformance.isRestored) {
+ await SessionStartup.onceInitialized;
+
+ if (
+ SessionStartup.sessionType == SessionStartup.NO_SESSION ||
+ SessionStartup.sessionType == SessionStartup.DEFER_SESSION
+ ) {
+ // We should only hit this patch in sessionrestore_no_auto_restore
+ if (
+ !Services.prefs.getBoolPref("talos.sessionrestore.norestore", false)
+ ) {
+ throw new Error("Session was not restored!");
+ }
+ await this.finishProfiling(
+ "This test measures the time between process " +
+ "creation and sessionRestored."
+ );
+
+ didRestore = false;
+ } else {
+ await new Promise(resolve => {
+ let observe = async () => {
+ Services.obs.removeObserver(
+ observe,
+ StartupPerformance.RESTORED_TOPIC
+ );
+ await this.finishProfiling(
+ "This test measures the time between process " +
+ "creation and the last restored tab."
+ );
+
+ resolve();
+ };
+ Services.obs.addObserver(
+ observe,
+ StartupPerformance.RESTORED_TOPIC
+ );
+ });
+ }
+ }
+
+ let startup_info = Services.startup.getStartupInfo();
+ let restoreTime = didRestore
+ ? StartupPerformance.latestRestoredTimeStamp
+ : startup_info.sessionRestored;
+ let duration = restoreTime - startup_info.process;
+ let win = BrowserWindowTracker.getTopWindow();
+
+ // Report data to Talos, if possible.
+ dump("__start_report" + duration + "__end_report\n\n");
+
+ // Next one is required by the test harness but not used.
+ dump("__startTimestamp" + win.performance.now() + "__endTimestamp\n\n");
+ } catch (ex) {
+ dump(`SessionRestoreTalosTest: error ${ex}\n`);
+ dump(ex.stack);
+ dump("\n");
+ }
+
+ // Ensure we wait for idle to finish so that we can have a clean shutdown
+ // that isn't happening in the middle of start-up.
+ await this.promiseIdleFinished.promise;
+
+ Services.startup.quit(Services.startup.eForceQuit);
+ }
+};
diff --git a/testing/talos/talos/startup_test/sessionrestore/addon/manifest.json b/testing/talos/talos/startup_test/sessionrestore/addon/manifest.json
new file mode 100644
index 0000000000..5290abae6b
--- /dev/null
+++ b/testing/talos/talos/startup_test/sessionrestore/addon/manifest.json
@@ -0,0 +1,23 @@
+{
+ "manifest_version": 2,
+ "name": "Session Restore Startup Performance Test",
+ "description": "Bug 936630, bug 1098357. This add-on broadcasts the duration of session restore.",
+ "version": "2.1",
+
+ "browser_specific_settings": {
+ "gecko": {
+ "id": "session-restore-test-2@mozilla.org"
+ }
+ },
+
+ "experiment_apis": {
+ "sessionrestore": {
+ "schema": "schema.json",
+ "parent": {
+ "scopes": ["addon_parent"],
+ "script": "api.js",
+ "events": ["startup"]
+ }
+ }
+ }
+}
diff --git a/testing/talos/talos/startup_test/sessionrestore/addon/schema.json b/testing/talos/talos/startup_test/sessionrestore/addon/schema.json
new file mode 100644
index 0000000000..fe51488c70
--- /dev/null
+++ b/testing/talos/talos/startup_test/sessionrestore/addon/schema.json
@@ -0,0 +1 @@
+[]
diff --git a/testing/talos/talos/startup_test/sessionrestore/profile-manywindows/sessionCheckpoints.json b/testing/talos/talos/startup_test/sessionrestore/profile-manywindows/sessionCheckpoints.json
new file mode 100644
index 0000000000..e02c421c3b
--- /dev/null
+++ b/testing/talos/talos/startup_test/sessionrestore/profile-manywindows/sessionCheckpoints.json
@@ -0,0 +1,11 @@
+{
+ "profile-after-change": true,
+ "final-ui-startup": true,
+ "sessionstore-windows-restored": true,
+ "quit-application-granted": true,
+ "quit-application": true,
+ "sessionstore-final-state-write-complete": true,
+ "profile-change-net-teardown": true,
+ "profile-change-teardown": true,
+ "profile-before-change": true
+}
diff --git a/testing/talos/talos/startup_test/sessionrestore/profile-manywindows/sessionstore.js b/testing/talos/talos/startup_test/sessionrestore/profile-manywindows/sessionstore.js
new file mode 100644
index 0000000000..bb41987741
--- /dev/null
+++ b/testing/talos/talos/startup_test/sessionrestore/profile-manywindows/sessionstore.js
@@ -0,0 +1,8030 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+{
+ "version": ["sessionrestore", 1],
+ "windows": [{
+ "tabs": [{
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738406681,
+ "docshellUUID": "{bc7c1e1a-47d2-4b02-b01a-cb913c7965ed}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezQ0N2FkYTczLTJjY2QtNDc0Ny05YmVkLWM0MTgzYWEzNDI2MX0AAAAA",
+ "docIdentifier": 103,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=www.facebook.com/",
+ "title": "Welcome to Facebook - Log In, Sign Up or Learn More",
+ "cacheKey": 0,
+ "ID": 3738406682,
+ "docshellUUID": "{bc7c1e1a-47d2-4b02-b01a-cb913c7965ed}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezkxMzRlNDNmLTcwMTctNDVjYi05OTZmLWZjZGU3N2MxZmFhNn0AAAAA",
+ "docIdentifier": 104,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=www.facebook.com/checkpoint/?next",
+ "title": "Facebook",
+ "cacheKey": 0,
+ "ID": 3738406683,
+ "docshellUUID": "{bc7c1e1a-47d2-4b02-b01a-cb913c7965ed}",
+ "referrer": "http://localhost:8080/?httpsurl=www.facebook.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezc2ZjBiZTJjLWNlMDYtNGI5Yy1iOWE1LTUyNGE3ODg2ZDFhY30AAAAA",
+ "docIdentifier": 105,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=www.facebook.com/checkpoint/?next",
+ "title": "Facebook",
+ "cacheKey": 1393256027,
+ "ID": 3738406684,
+ "docshellUUID": "{bc7c1e1a-47d2-4b02-b01a-cb913c7965ed}",
+ "referrer": "http://localhost:8080/?httpsurl=www.facebook.com/checkpoint/?next",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezY4MDk2MDVhLWEyNTQtNGQzZS1iZjk0LTc5NGQyMjRmMjMzNH0AAAAA",
+ "docIdentifier": 106,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=www.facebook.com/checkpoint/?next",
+ "title": "Facebook",
+ "cacheKey": 1393256028,
+ "ID": 3738406685,
+ "docshellUUID": "{bc7c1e1a-47d2-4b02-b01a-cb913c7965ed}",
+ "referrer": "http://localhost:8080/?httpsurl=www.facebook.com/checkpoint/?next",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezE3N2NkMjljLTg3MWItNDYzNi04ZDU4LTgwMDYyYjc1Zjk4M30AAAAA",
+ "docIdentifier": 107,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=www.facebook.com/checkpoint/?next",
+ "title": "Facebook",
+ "cacheKey": 1393256029,
+ "ID": 3738406686,
+ "docshellUUID": "{bc7c1e1a-47d2-4b02-b01a-cb913c7965ed}",
+ "referrer": "http://localhost:8080/?httpsurl=www.facebook.com/checkpoint/?next",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezlmMjU0YTg0LTc0NGYtNGVjNy1hN2NiLTkxNDA4YzE0OGQwMX0AAAAA",
+ "docIdentifier": 108,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=www.facebook.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738406687,
+ "docshellUUID": "{bc7c1e1a-47d2-4b02-b01a-cb913c7965ed}",
+ "referrer": "http://localhost:8080/?httpsurl=www.facebook.com/checkpoint/?next",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2NiNjE0MTJjLWMxZjgtNDk5My05YWY3LWM2ZmEzYWY1YTAwYX0AAAAA",
+ "docIdentifier": 109,
+ "structuredCloneState": "GQAAAAQA//9oAHQAdABwAHMAOgAvAC8AdwB3AHcALgBmAGEAYwBlAGIAbwBvAGsALgBjAG8AbQAvAAAAAAAAAA==",
+ "structuredCloneVersion": 2,
+ "persist": true
+ }],
+ "lastAccessed": 1528451818877,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 7,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAAMWh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9d3d3LmZhY2Vib29rLmNvbS8AAAAAAAAABAAAAAcAAAAOAAAAB/////8AAAAH/////wAAAAcAAAAJAAAAFQAAABwAAAAVAAAAAQAAABUAAAABAAAAFgAAAAAAAAAW/////wAAAAD/////AAAAFwAAABoAAAAV/////wEAAAAAAAAAAAAAAAA="
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738406454,
+ "docshellUUID": "{5df5fcc9-749d-45e0-b672-c1b76890eec0}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezk2YTA1ZjRiLTMyOGQtNDU1NS04MzNlLWQxMTQ2NDllZmM2Yn0AAAAA",
+ "docIdentifier": 99,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738406455,
+ "docshellUUID": "{5df5fcc9-749d-45e0-b672-c1b76890eec0}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezI5NDBlMDYyLTY4NmUtNDhjNC1iZmRkLTU0NGRlMDA5ZDc5N30AAAAA",
+ "docIdentifier": 100,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738406456,
+ "docshellUUID": "{43584cab-ac21-4bd8-bc9b-cd5d22599d93}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezQ0MWVjNGE3LTY2OWUtNDMwOC1hZWJjLTcwODllZDNjNThlN30AAAAA",
+ "docIdentifier": 101
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738406457,
+ "docshellUUID": "{7266f212-5701-4962-88f6-daf21b0cd491}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezZjMmVlYzNjLTAwM2QtNGY4Zi1iNTFhLTA1NDljYzUzMWVhOX0AAAAA",
+ "docIdentifier": 102
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738406458,
+ "docshellUUID": "{76a8f95b-bf8b-4ec5-b161-8ba52f6afae2}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2ViNTFhZTVmLWMxZGMtNGNlYS1hNzlhLTdhMDhkNGEwMWY3OH0AAAAA",
+ "docIdentifier": 103
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451818914,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738406258,
+ "docshellUUID": "{d9bc5aea-8f59-42cb-8b48-8ac6677f94d9}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezI2MTM3YTAxLWZlYjUtNGZmZS05YzhmLWUyN2I5NTMxNDllMn0AAAAA",
+ "docIdentifier": 96,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738406259,
+ "docshellUUID": "{d9bc5aea-8f59-42cb-8b48-8ac6677f94d9}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2Y2ZGYxNzZhLWM3YTEtNDI0ZC04NzlmLTM3MDBiMDkwZDA4MH0AAAAA",
+ "docIdentifier": 97,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738406260,
+ "docshellUUID": "{878ab3bc-a999-43c3-99dc-b9434fe13501}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2E5MDk5N2VlLTg2ZmUtNGJkYS1iMzI3LTE0OWQzZWRjNDZjZn0AAAAA",
+ "docIdentifier": 98
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738406261,
+ "docshellUUID": "{60c88f70-13c3-4a9d-ac20-e0df112ccd50}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2IxM2QyYzA3LWE4NDctNDRhZC04ZGMwLTlkNmNlZjY1ZDVkNH0AAAAA",
+ "docIdentifier": 99
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738406262,
+ "docshellUUID": "{964d9c55-7ca5-476b-838e-7a9896e8fe70}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezA3MzA4ZWUxLTY0MmEtNDg4Mi1iY2FhLTRlODA4YmEyNzNhOH0AAAAA",
+ "docIdentifier": 100
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451818936,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738406020,
+ "docshellUUID": "{8acd802f-03b1-48a6-a067-3eb9aa6a7e7f}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2M3ZjZjNjFkLTQ2YWUtNDIzMy05ZjIyLWI3NzE3YjE3YmY2ZH0AAAAA",
+ "docIdentifier": 104,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738406021,
+ "docshellUUID": "{8acd802f-03b1-48a6-a067-3eb9aa6a7e7f}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezk1ODAwYzRmLWZkMzktNGU1Yi05NmUyLTFhOWQ5Y2UzNTVlZH0AAAAA",
+ "docIdentifier": 105,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738406022,
+ "docshellUUID": "{1009278f-9c58-4c63-ac7e-e239c816fa69}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2ZjYTEwNWQwLWY2Y2MtNDE0Ni1iMTg1LTg5NjkyZThjZmFjYX0AAAAA",
+ "docIdentifier": 106
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738406023,
+ "docshellUUID": "{32225ac0-0b7c-4069-b2ca-78b179fd0839}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2MzMTE0YjA1LTI5NTItNGM3ZS04OTBlLWJlYmNmZjkxYjg5OH0AAAAA",
+ "docIdentifier": 107
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738406024,
+ "docshellUUID": "{470c5de2-944c-4cb2-ac46-e33322567876}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2JhZTY5YmMyLWE2N2UtNDg1Yi05ZGRmLThlNTBkYzk3YTgyMH0AAAAA",
+ "docIdentifier": 108
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451818967,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738405540,
+ "docshellUUID": "{d155d2d0-3704-48a6-b90f-0b4b756ec4ef}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezk4ZjkxODc0LTlmYjUtNDJkNi04YjViLTM1Y2U2YTFhMGRlZn0AAAAA",
+ "docIdentifier": 98,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738405541,
+ "docshellUUID": "{d155d2d0-3704-48a6-b90f-0b4b756ec4ef}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezU1OWI3N2RiLTI3M2YtNGE1Mi1hMWJlLWNhZTg2MmZhNDA1Mn0AAAAA",
+ "docIdentifier": 99,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738405542,
+ "docshellUUID": "{797ed9aa-9c8d-4540-90a1-21a221af9baa}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezJjMGZjNDA1LTQ1OTctNDcyMS04NWFmLWIwZDk4YzY1ZWJhOH0AAAAA",
+ "docIdentifier": 100
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738405543,
+ "docshellUUID": "{825230d4-e859-444c-8661-b7e2aa63dc33}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2U4ZTAyOTJmLWU3OWYtNGQwMC05NTgwLWE2MWRlYjEyOWQ2OH0AAAAA",
+ "docIdentifier": 101
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738405544,
+ "docshellUUID": "{16b2e3e5-fcf0-45f2-9df2-7b167c44a22e}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2RkMWY5MjQ3LWUyZGUtNDZlMS1hNTRhLTM0NjY3MGE0MzJhOH0AAAAA",
+ "docIdentifier": 102
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451818997,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738353124,
+ "docshellUUID": "{12cc37f3-e357-41e4-b132-8e697030b736}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezkwZmY4YTk2LTg5ZjUtNDhiNC04MTRiLWJhYTM0YjQwMjI0Y30AAAAA",
+ "docIdentifier": 1,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738353125,
+ "docshellUUID": "{12cc37f3-e357-41e4-b132-8e697030b736}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezc2YmMyZjgwLTVkMzMtNGQ3YS05Y2Y5LTAyYzk0NjhlNDM4Nn0AAAAA",
+ "docIdentifier": 2,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738353126,
+ "docshellUUID": "{19ff1d9c-ab86-4049-bb6e-9ae0c5016290}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2Y3MjgxYzU1LTFmMjktNGIwYy04OWRhLTA5OWViZTkzODE0NX0AAAAA",
+ "docIdentifier": 3
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738353127,
+ "docshellUUID": "{f08430c7-9bd7-49e4-baff-4f490b741b4e}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2M0OThjMzk0LTg1MDQtNDY2Yi05NjZlLTg1ZTc5NTgwMDhlOH0AAAAA",
+ "docIdentifier": 4
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738353128,
+ "docshellUUID": "{a2b02301-0523-4b54-9ce6-184a3c725d8b}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezcyNWExYzVjLWQ2MGQtNDJkZS1hYjkyLWZlOTZkYWEyNWNjMX0AAAAA",
+ "docIdentifier": 5
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451819026,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738413567,
+ "docshellUUID": "{a5421f18-2731-401c-a1e5-822c839516bf}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezA3NmJkNDY4LWQwNDAtNGZjNi1hZjg5LTIzZjM5ODFkYWNhN30AAAAA",
+ "docIdentifier": 148,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738413568,
+ "docshellUUID": "{a5421f18-2731-401c-a1e5-822c839516bf}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2UxZTVjMWYzLTE4ZTktNDBlNi1hYmM4LTAyYmRiNWY3Y2Y2Nn0AAAAA",
+ "docIdentifier": 149,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738413569,
+ "docshellUUID": "{797ed9aa-9c8d-4540-90a1-21a221af9baa}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezVhN2UyNDE4LTc0NWUtNDk1Ni04YWVjLTI1YmZhZTIzNDAxMX0AAAAA",
+ "docIdentifier": 150
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738413570,
+ "docshellUUID": "{825230d4-e859-444c-8661-b7e2aa63dc33}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2ZkYjhmNzc0LTk5NmQtNDllNC05ZmEyLWZhZDk2OTE4NTQ5ZH0AAAAA",
+ "docIdentifier": 151
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738413571,
+ "docshellUUID": "{16b2e3e5-fcf0-45f2-9df2-7b167c44a22e}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezkzMTE5MzU0LTkxZmEtNDM5ZS1hMjRhLWExNzMzNzkwYWIzNH0AAAAA",
+ "docIdentifier": 152
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451819805,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738413679,
+ "docshellUUID": "{808951e8-a7d3-44a1-8593-1457da8f21e0}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2Y5NzhmZDk4LWRiYTMtNDIwMC04Nzc5LTMyNzdlYjdkYWEzZX0AAAAA",
+ "docIdentifier": 155,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738413680,
+ "docshellUUID": "{808951e8-a7d3-44a1-8593-1457da8f21e0}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezIzOTg0MjA1LTNlNjItNGE0Yy1hNzA1LTBkNGU2MDI3ZWMyOX0AAAAA",
+ "docIdentifier": 156,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738413681,
+ "docshellUUID": "{1009278f-9c58-4c63-ac7e-e239c816fa69}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezFlYTg3MDc5LWNjNDktNDI0ZC05NWNjLWUwZjNjMzE1ZWUxM30AAAAA",
+ "docIdentifier": 157
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738413682,
+ "docshellUUID": "{32225ac0-0b7c-4069-b2ca-78b179fd0839}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezMzZjJiNjI2LWE5ODItNGRjMi04ZjAwLTVmOTk0NGMzNmEwNH0AAAAA",
+ "docIdentifier": 158
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738413683,
+ "docshellUUID": "{470c5de2-944c-4cb2-ac46-e33322567876}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezM2NjE5N2I0LWYzOGItNGIwYy04MzlmLTllNTdiNzQ5NjY3MH0AAAAA",
+ "docIdentifier": 159
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451819963,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738413796,
+ "docshellUUID": "{ecd8bb52-6b7d-4f4b-bfaf-6a15c3f8932b}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2NmMWM3NWZiLTQ0YzQtNGJmNC1iODk4LTM3MWM4ZDJmYWYyM30AAAAA",
+ "docIdentifier": 142,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738413797,
+ "docshellUUID": "{ecd8bb52-6b7d-4f4b-bfaf-6a15c3f8932b}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezM1ZDViM2VkLTBhMWUtNDZlNC1iNTE4LTM3NWE3YzJjMTJlN30AAAAA",
+ "docIdentifier": 143,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738413798,
+ "docshellUUID": "{878ab3bc-a999-43c3-99dc-b9434fe13501}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2QxZWE5OWMxLTM2ZDgtNGFlOS04YTg0LTBkZjcxYzEyMzUxZH0AAAAA",
+ "docIdentifier": 144
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738413799,
+ "docshellUUID": "{60c88f70-13c3-4a9d-ac20-e0df112ccd50}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2QyMDJlYzE1LThjMjQtNDZhNC05ODkyLTQ4N2FkNGU2YTJkYX0AAAAA",
+ "docIdentifier": 145
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738413800,
+ "docshellUUID": "{964d9c55-7ca5-476b-838e-7a9896e8fe70}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezAwODU5ZGQyLTRjYTgtNDNhYS05YWFkLTZhZTdjNTNhY2ZhZn0AAAAA",
+ "docIdentifier": 146
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451820061,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738413921,
+ "docshellUUID": "{b97136cf-f548-405c-b5ea-82b136ea1cc3}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezE4OTIxYWM3LTg3MTQtNDI3OC1hMjM0LWZiOGMzZWFjMjc1MH0AAAAA",
+ "docIdentifier": 145,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738413922,
+ "docshellUUID": "{b97136cf-f548-405c-b5ea-82b136ea1cc3}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezM3ZGNiMGE1LTViZTAtNGExMy04YjAxLWZiODEzZjA4YzJmNX0AAAAA",
+ "docIdentifier": 146,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738413923,
+ "docshellUUID": "{43584cab-ac21-4bd8-bc9b-cd5d22599d93}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezZmNmEyNGE4LTQxYjEtNDJiOC1hZTM2LWYwYTgyNjI4MzE4MH0AAAAA",
+ "docIdentifier": 147
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738413924,
+ "docshellUUID": "{7266f212-5701-4962-88f6-daf21b0cd491}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezA1ZDUxMTliLTI5MzQtNDkxNy04NGI4LTdiZjY0MWMwOTY5OX0AAAAA",
+ "docIdentifier": 148
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738413925,
+ "docshellUUID": "{76a8f95b-bf8b-4ec5-b161-8ba52f6afae2}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezQwMzRkMDBjLWI5ZGYtNGZlYi1hNDYwLTZjOWRiY2JiYzRmOH0AAAAA",
+ "docIdentifier": 149
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451857671,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738414042,
+ "docshellUUID": "{5d8ee25d-a38e-4d70-be41-cc2eff887dd9}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezA0NTdkZjczLTJjNzQtNDQ3OS04Y2I3LTU0ZmZmMDU0ZGM1Nn0AAAAA",
+ "docIdentifier": 153,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738414043,
+ "docshellUUID": "{5d8ee25d-a38e-4d70-be41-cc2eff887dd9}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2IxYjE1MjIzLTUzZDEtNDZkZC05NGFjLTk5NTMyN2Q0YWJmNH0AAAAA",
+ "docIdentifier": 154,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738414044,
+ "docshellUUID": "{797ed9aa-9c8d-4540-90a1-21a221af9baa}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezA3YTMyZTE5LWI0NTQtNGEwMS1hMzgyLTMzMWVhZGFmZTE1YX0AAAAA",
+ "docIdentifier": 155
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738414045,
+ "docshellUUID": "{825230d4-e859-444c-8661-b7e2aa63dc33}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2M1ODNjZmQ0LTc0MGEtNDcxMC04NzgzLWZhOGM0ZWQzMDQwOH0AAAAA",
+ "docIdentifier": 156
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738414046,
+ "docshellUUID": "{16b2e3e5-fcf0-45f2-9df2-7b167c44a22e}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2IxMTNhZTMyLWU4MjEtNGZkZS1iZTM0LTdlMjk4MGYwYWYzMX0AAAAA",
+ "docIdentifier": 157
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451817691,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738414138,
+ "docshellUUID": "{4090a1cc-cbd0-49eb-9e8e-bf9f402f652f}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2Y0Mzg4ZjY0LWM5ZTgtNGY5My1iNWQwLTA4N2I2Y2QzNjQ5NH0AAAAA",
+ "docIdentifier": 160,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738414139,
+ "docshellUUID": "{4090a1cc-cbd0-49eb-9e8e-bf9f402f652f}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezM3MTNmYzA2LTBmZWQtNDU4Yi1hNTBhLWFiOWI3YTk4MDljM30AAAAA",
+ "docIdentifier": 161,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738414140,
+ "docshellUUID": "{1009278f-9c58-4c63-ac7e-e239c816fa69}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezkzNjAyMmUxLTNkZmMtNDQ2Ni1iNjA2LWQ0MDlhMjYyNzljMX0AAAAA",
+ "docIdentifier": 162
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738414141,
+ "docshellUUID": "{32225ac0-0b7c-4069-b2ca-78b179fd0839}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezY4OGM5ZjQ0LWE5ZTAtNGFlOS1hYWMyLTNhZGIxYWY4Nzg5ZX0AAAAA",
+ "docIdentifier": 163
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738414142,
+ "docshellUUID": "{470c5de2-944c-4cb2-ac46-e33322567876}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2ZiOGYwNTgwLTUxNmMtNDJlNi05NjM0LTk3MDk0MmNhMjZjY30AAAAA",
+ "docIdentifier": 164
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451817721,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738414261,
+ "docshellUUID": "{b9aff768-1c66-4a7d-b70c-be884baf9651}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2E0MGRjNjNiLWM4NmYtNDhjZC1hZjEzLTJiYjA2M2JhMzE4YX0AAAAA",
+ "docIdentifier": 147,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738414262,
+ "docshellUUID": "{b9aff768-1c66-4a7d-b70c-be884baf9651}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezJlNWE3ODQzLTdlOTUtNGJkZS05N2I4LTYxZTIzYjFlYjlhY30AAAAA",
+ "docIdentifier": 148,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738414263,
+ "docshellUUID": "{878ab3bc-a999-43c3-99dc-b9434fe13501}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezA1YTIxZThjLWYzODItNGVkYi05NzdlLTQ4ODQ1ZDk5NjQ1NX0AAAAA",
+ "docIdentifier": 149
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738414264,
+ "docshellUUID": "{60c88f70-13c3-4a9d-ac20-e0df112ccd50}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezYxN2ZlZDE0LTQxNzYtNDMzNy05ZDYzLWY4OTdlMjNkMTYyNX0AAAAA",
+ "docIdentifier": 150
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738414265,
+ "docshellUUID": "{964d9c55-7ca5-476b-838e-7a9896e8fe70}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2I0NDZiMmZlLTg1ZDYtNDVmOS04ZWI2LWJhMTFkOWU4ZGM1ZX0AAAAA",
+ "docIdentifier": 151
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451817745,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738414358,
+ "docshellUUID": "{d711fedc-2aa3-4a61-8ff3-9716901f21a2}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2EzYmE5NTJkLTk1N2YtNDlhNC1hZTRlLTUxMzYyMzI2ZmZiZH0AAAAA",
+ "docIdentifier": 150,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738414359,
+ "docshellUUID": "{d711fedc-2aa3-4a61-8ff3-9716901f21a2}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2YxOTVkZjI2LWJlNjAtNDA3MS04YTViLWVmYjU0NTEwMmZkM30AAAAA",
+ "docIdentifier": 151,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738414360,
+ "docshellUUID": "{43584cab-ac21-4bd8-bc9b-cd5d22599d93}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezVlMTg3Y2VlLTEzM2MtNDhkOC1iZDg3LWFjMjdhZDk2YWMzOH0AAAAA",
+ "docIdentifier": 152
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738414361,
+ "docshellUUID": "{7266f212-5701-4962-88f6-daf21b0cd491}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezU3OGM2ZTVkLTJjNDctNDI3NS1hNzBhLWQ0MWI2MjgyYmJhNX0AAAAA",
+ "docIdentifier": 153
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738414362,
+ "docshellUUID": "{76a8f95b-bf8b-4ec5-b161-8ba52f6afae2}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezBmY2M1OTQ3LWYxMDgtNDU2MS04MDIwLWNlZDI5ZWI3ODY5NX0AAAAA",
+ "docIdentifier": 154
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451817777,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738408941,
+ "docshellUUID": "{eb256376-3626-41bb-9277-795bf7f040f2}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2JkYmE4MWYwLWE2MTAtNDA4OC1hMjVlLWYwNmMxMmNhNDI2Mn0AAAAA",
+ "docIdentifier": 140,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738408942,
+ "docshellUUID": "{eb256376-3626-41bb-9277-795bf7f040f2}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezkyMjI4YjQ1LWFlMzEtNGQ3Mi1hZTk1LWQ0OTE1NWVjYmQ2M30AAAAA",
+ "docIdentifier": 141,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408943,
+ "docshellUUID": "{43584cab-ac21-4bd8-bc9b-cd5d22599d93}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezRkYzAyMjAwLTZkNWItNDNkMC1iODBmLTllMTc4MWVkMWZjMH0AAAAA",
+ "docIdentifier": 142
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408944,
+ "docshellUUID": "{7266f212-5701-4962-88f6-daf21b0cd491}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2EyZDgyNDRmLTVjNGMtNDcyNy05NTdhLWQxY2U3ZThkZWIwNX0AAAAA",
+ "docIdentifier": 143
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408945,
+ "docshellUUID": "{76a8f95b-bf8b-4ec5-b161-8ba52f6afae2}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezRjMDY2ZjljLWE2NDYtNGM4NS1hNzE5LTczYTI3YzdiMTI5YX0AAAAA",
+ "docIdentifier": 144
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451817809,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738408910,
+ "docshellUUID": "{446f8d85-179d-40c2-9c8f-1abd84052d2d}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2UyNjNiYzdmLTM1NGEtNDk0Zi1hYmIxLWFmOGRiNzQwNmU4Zn0AAAAA",
+ "docIdentifier": 137,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738408911,
+ "docshellUUID": "{446f8d85-179d-40c2-9c8f-1abd84052d2d}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezVhZTQwMmFlLWRhNWYtNDgwOS1iZDNhLWMyZjFjYzNlYjBkZH0AAAAA",
+ "docIdentifier": 138,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408912,
+ "docshellUUID": "{878ab3bc-a999-43c3-99dc-b9434fe13501}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2IwZmUxY2Y1LTVmYzQtNDhmZC04M2ZiLWVkMDlmZDE3ODFkMn0AAAAA",
+ "docIdentifier": 139
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408913,
+ "docshellUUID": "{60c88f70-13c3-4a9d-ac20-e0df112ccd50}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezE1MDM4MzNkLTAyYjQtNGMyYi1hM2MzLWI1MTRmMGQwMjAxNH0AAAAA",
+ "docIdentifier": 140
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408914,
+ "docshellUUID": "{964d9c55-7ca5-476b-838e-7a9896e8fe70}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2Y4NTJlZGNkLTg1ODEtNGMzYS05MThiLWZjN2IzZTYwMGUyMH0AAAAA",
+ "docIdentifier": 141
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451817856,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738408884,
+ "docshellUUID": "{ce3ca867-0ed8-406e-98d1-fe234fd63946}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezE0MjRhYTQ3LTc5MWMtNDc3MC04ZTA1LTYxOGFjMjE2MzY5M30AAAAA",
+ "docIdentifier": 150,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738408885,
+ "docshellUUID": "{ce3ca867-0ed8-406e-98d1-fe234fd63946}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2Q5NWYzYzBlLTRlZmQtNGI0Zi05NmRjLTlhNDc0NWJlYjg3N30AAAAA",
+ "docIdentifier": 151,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408886,
+ "docshellUUID": "{1009278f-9c58-4c63-ac7e-e239c816fa69}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezY3OWFiMTI4LTFlYTUtNGI5ZS1iZDNhLWU2ODJlMGM1Nzk3MH0AAAAA",
+ "docIdentifier": 152
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408887,
+ "docshellUUID": "{32225ac0-0b7c-4069-b2ca-78b179fd0839}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezAxOTcwNGZmLTc1YTQtNDVhYS1iYTkxLWZjYjk5MDAyY2FiNn0AAAAA",
+ "docIdentifier": 153
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408888,
+ "docshellUUID": "{470c5de2-944c-4cb2-ac46-e33322567876}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezY2MTZjYTczLThkZGItNDg2Yi1iMTliLTEyOTNmN2I4NDgzN30AAAAA",
+ "docIdentifier": 154
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451817871,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738408849,
+ "docshellUUID": "{dc330d22-c38c-4405-be8a-5d60db6861b8}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezUxYjkwYjkwLTllYjMtNGI4Yy04ZWNhLWVhNTdlMzVmMDgzN30AAAAA",
+ "docIdentifier": 143,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738408850,
+ "docshellUUID": "{dc330d22-c38c-4405-be8a-5d60db6861b8}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2U3MTRjZjFlLWZlYzMtNDQ1Yy1hODE0LWJiZDEwMzBhYjkwMn0AAAAA",
+ "docIdentifier": 144,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408851,
+ "docshellUUID": "{797ed9aa-9c8d-4540-90a1-21a221af9baa}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezVlOTUzNmVkLWQ3NDQtNGNhYS1iZjA3LTNjNTk1YTVhY2JlMX0AAAAA",
+ "docIdentifier": 145
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408852,
+ "docshellUUID": "{825230d4-e859-444c-8661-b7e2aa63dc33}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2IzZDlkYjczLTQ4ZDYtNDgzYi04Y2JjLTA3MWUxMmQ3MDQxZn0AAAAA",
+ "docIdentifier": 146
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408853,
+ "docshellUUID": "{16b2e3e5-fcf0-45f2-9df2-7b167c44a22e}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezI5YzM5Y2RmLTEyMmQtNDFkZC05NWM2LTA1MzY5YjgzOTI2MH0AAAAA",
+ "docIdentifier": 147
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451817903,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738408820,
+ "docshellUUID": "{49318475-bb97-4977-97e5-b9a85b437c28}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezA2NmEyYTg5LTYzNmYtNDAwNy04MzhkLWRiM2ZiMmE5ODZmMn0AAAAA",
+ "docIdentifier": 135,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738408821,
+ "docshellUUID": "{49318475-bb97-4977-97e5-b9a85b437c28}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2NkY2QxY2JhLWM5MTQtNDYwMS1iNjBjLWNhMGEzNzk2ZDgyYn0AAAAA",
+ "docIdentifier": 136,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408822,
+ "docshellUUID": "{43584cab-ac21-4bd8-bc9b-cd5d22599d93}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezcwMjM3NDY0LTg2MDQtNGVmMS04OGY2LTMwZTc1ZGQwOWMxNH0AAAAA",
+ "docIdentifier": 137
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408823,
+ "docshellUUID": "{7266f212-5701-4962-88f6-daf21b0cd491}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2FmYWYxMDY3LTY0MjEtNGJhZC04YjIxLTg3MzI3ODJjMDMyYX0AAAAA",
+ "docIdentifier": 138
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408824,
+ "docshellUUID": "{76a8f95b-bf8b-4ec5-b161-8ba52f6afae2}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezY5MzI0MTM2LWI5YWUtNDM0My1hNGUwLWJmZjMxYjA0YmYzNX0AAAAA",
+ "docIdentifier": 139
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451817935,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738408790,
+ "docshellUUID": "{7419eee2-bbb8-46d0-8459-9bf35de0fef6}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2Y3MDBkYjFlLTk4MjYtNDY2Ny04ZmVmLTRkZWU2MjdiZWVkMX0AAAAA",
+ "docIdentifier": 132,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738408791,
+ "docshellUUID": "{7419eee2-bbb8-46d0-8459-9bf35de0fef6}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2Y3MjlkOTA5LTNjMzctNGQwYS04ZDQwLTY4MTU2YjEzYWFhZX0AAAAA",
+ "docIdentifier": 133,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408792,
+ "docshellUUID": "{878ab3bc-a999-43c3-99dc-b9434fe13501}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezExYmRkMTJlLWRkOTktNDY4Mi05NzkyLTBmNTBmYWIwYjYzY30AAAAA",
+ "docIdentifier": 134
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408793,
+ "docshellUUID": "{60c88f70-13c3-4a9d-ac20-e0df112ccd50}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2ZhY2M1ZTA4LTRmMTQtNDBkOC1hOWYyLTY0MDRjYTVmMmNjZX0AAAAA",
+ "docIdentifier": 135
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408794,
+ "docshellUUID": "{964d9c55-7ca5-476b-838e-7a9896e8fe70}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezkwM2I0YzNhLWI3NmMtNDBjZi1hOTVhLTZjOGYyZTliZmU3Mn0AAAAA",
+ "docIdentifier": 136
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451817975,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738408759,
+ "docshellUUID": "{3357d475-ab53-4832-aaca-f239b855b439}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2EyMmE2NzQ5LWY5MTItNDdhZS05MmViLWNhOTY0Zjg0YWJiYn0AAAAA",
+ "docIdentifier": 145,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738408760,
+ "docshellUUID": "{3357d475-ab53-4832-aaca-f239b855b439}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2M2ZTJlZjFjLWI3YzItNDY2YS1hNzgxLWZkMmFkOGY5MTZkOH0AAAAA",
+ "docIdentifier": 146,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408761,
+ "docshellUUID": "{1009278f-9c58-4c63-ac7e-e239c816fa69}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezc1ZTVhM2Y3LTg3OGEtNDE2ZS1iZTk3LTBlYmFmOWM3NzIzMH0AAAAA",
+ "docIdentifier": 147
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408762,
+ "docshellUUID": "{32225ac0-0b7c-4069-b2ca-78b179fd0839}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezA5MWY3ZDhkLWZiZWEtNDU2Ny04ZWI3LTNmMzA0YTI0NmY2OH0AAAAA",
+ "docIdentifier": 148
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408763,
+ "docshellUUID": "{470c5de2-944c-4cb2-ac46-e33322567876}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2M1ZjU1Nzk5LTEzODMtNDk1NS05MDZjLTQ3YWM3ZGI3NmFiNX0AAAAA",
+ "docIdentifier": 149
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451817993,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738408729,
+ "docshellUUID": "{3258249a-81b2-45a6-97f5-f5cb97969389}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezYxZjlmOTYwLTcxZTctNDY4ZC1iOTBmLTExYmNiYzhhYjM5M30AAAAA",
+ "docIdentifier": 138,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738408730,
+ "docshellUUID": "{3258249a-81b2-45a6-97f5-f5cb97969389}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2E4MDZmMjhiLWI1MWQtNDA2Ny1hZGZlLWRiOWRiM2QxMTI1MH0AAAAA",
+ "docIdentifier": 139,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408731,
+ "docshellUUID": "{797ed9aa-9c8d-4540-90a1-21a221af9baa}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2EzNmI2YWU4LTIxYWEtNDRlYS1iYzFiLTA4YWNjMmI0YzUwYX0AAAAA",
+ "docIdentifier": 140
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408732,
+ "docshellUUID": "{825230d4-e859-444c-8661-b7e2aa63dc33}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezFiZWE2YWU3LTY2MmEtNGJjMy1iN2U1LTdmYWExYTA1MWU3Mn0AAAAA",
+ "docIdentifier": 141
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408733,
+ "docshellUUID": "{16b2e3e5-fcf0-45f2-9df2-7b167c44a22e}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2EyZmUyYjdhLTAwMDctNDIxOC04MzgwLWM4MjdlMjhmMDYzZn0AAAAA",
+ "docIdentifier": 142
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451818046,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738408703,
+ "docshellUUID": "{e9c9c15f-073d-48e7-ab7d-29eb9ce6d0ff}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2UzZDAxNTMzLWNiNzAtNDZiZi05N2E1LTEwNTliMjI3NDcxOX0AAAAA",
+ "docIdentifier": 130,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738408704,
+ "docshellUUID": "{e9c9c15f-073d-48e7-ab7d-29eb9ce6d0ff}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezExYjc3NDZiLTI3MzQtNDU2Zi1iNzExLWFjYzBiMWJkM2ZiNn0AAAAA",
+ "docIdentifier": 131,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408705,
+ "docshellUUID": "{43584cab-ac21-4bd8-bc9b-cd5d22599d93}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezk3NDU4MTNhLTM3NWMtNDkzZS05MzVjLWU1ZWIxNzAxMTYzYn0AAAAA",
+ "docIdentifier": 132
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408706,
+ "docshellUUID": "{7266f212-5701-4962-88f6-daf21b0cd491}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezJjMjY1ZDc5LTcwZGMtNGM5Ny1iYjgwLTEzNjgyOTkwYjc3MH0AAAAA",
+ "docIdentifier": 133
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408707,
+ "docshellUUID": "{76a8f95b-bf8b-4ec5-b161-8ba52f6afae2}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezI1N2FiMDIzLWIwNmMtNDY0ZS04ZDFhLTcxNGYwNmZkZGFkMH0AAAAA",
+ "docIdentifier": 134
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451818061,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738408673,
+ "docshellUUID": "{ac5c9949-eb8c-464f-a4ae-358a88a8b8da}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezEwMmNmYmJkLWRmZTgtNDJiNi1iODlkLTNhMDBkNGI5MTlmY30AAAAA",
+ "docIdentifier": 127,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738408674,
+ "docshellUUID": "{ac5c9949-eb8c-464f-a4ae-358a88a8b8da}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2I5ZDFhODYyLTg1OWEtNGM3Ny05OWU5LTI3NDMyNmRiNjhiMn0AAAAA",
+ "docIdentifier": 128,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408675,
+ "docshellUUID": "{878ab3bc-a999-43c3-99dc-b9434fe13501}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2UyMWU1ODdhLTBlNWYtNGQ5Ni04Y2ZiLTY3NThhODhhZmRiMn0AAAAA",
+ "docIdentifier": 129
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408676,
+ "docshellUUID": "{60c88f70-13c3-4a9d-ac20-e0df112ccd50}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezUxNGZjNGEyLTMzYzYtNDMxNy1hZWY0LWFkMzI0OTE4NGUyYX0AAAAA",
+ "docIdentifier": 130
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408677,
+ "docshellUUID": "{964d9c55-7ca5-476b-838e-7a9896e8fe70}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezFjY2UzZmNmLWIwMDQtNGVkZS1hMDZiLTBmMTRiOGQ5YmMzMn0AAAAA",
+ "docIdentifier": 131
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451818090,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738408646,
+ "docshellUUID": "{0244fd58-d51c-4fc1-8dc2-d8271def9725}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezVjYTcyYzE3LTY5NTMtNDIwNC04YjJlLTQwNzdhNDM3MjM0OX0AAAAA",
+ "docIdentifier": 140,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738408647,
+ "docshellUUID": "{0244fd58-d51c-4fc1-8dc2-d8271def9725}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2E2MWE0ZWRjLTRjMzMtNGU1NS1hMjg0LTAyMDkwNzBkNDcyMH0AAAAA",
+ "docIdentifier": 141,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408648,
+ "docshellUUID": "{1009278f-9c58-4c63-ac7e-e239c816fa69}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezA1M2Q4MjM5LTgxYWYtNGE4OS04ZmNkLTM2YmM1MzVmMjBjZX0AAAAA",
+ "docIdentifier": 142
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408649,
+ "docshellUUID": "{32225ac0-0b7c-4069-b2ca-78b179fd0839}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezEwM2ZhYTVlLTk5MzAtNGM2Yi1hNGYxLTM5OTg4ZmMwZGZjYX0AAAAA",
+ "docIdentifier": 143
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408650,
+ "docshellUUID": "{470c5de2-944c-4cb2-ac46-e33322567876}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezM0ODhiOGExLWZiZWEtNDg5Yi05MmJmLTcxNWIxMTk4NzI4Yn0AAAAA",
+ "docIdentifier": 144
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451818123,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738408621,
+ "docshellUUID": "{ede50b3c-447f-4817-ba04-414965bc64ef}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezRhM2M2OGQyLWU0MGMtNGZkMy04MDRmLWI3OGEwYTNhNjcxNX0AAAAA",
+ "docIdentifier": 133,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738408622,
+ "docshellUUID": "{ede50b3c-447f-4817-ba04-414965bc64ef}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezZjODNlYzlhLTFhZmEtNDE1Yi1iMzY1LWU0MTFlM2MxMTIwMn0AAAAA",
+ "docIdentifier": 134,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408623,
+ "docshellUUID": "{797ed9aa-9c8d-4540-90a1-21a221af9baa}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezJlNDI1YWQ4LWZhNWUtNDg4YS04NzBkLWJjODg2OWViY2ViOH0AAAAA",
+ "docIdentifier": 135
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408624,
+ "docshellUUID": "{825230d4-e859-444c-8661-b7e2aa63dc33}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezhmNTIxZThkLWNlYTYtNGUyMi1hZmZiLTAwNjBjY2M5ODg5MH0AAAAA",
+ "docIdentifier": 136
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408625,
+ "docshellUUID": "{16b2e3e5-fcf0-45f2-9df2-7b167c44a22e}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2Y4ZDI5ZmNlLTRjMDctNDExZS05YzE0LThiMTY3NmE1MzZlNX0AAAAA",
+ "docIdentifier": 137
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451818144,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738408580,
+ "docshellUUID": "{f1aad793-3c87-497f-826f-c639756c2c59}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezU0YTVmMTc2LTA3ZjAtNGIzMi04ZTAzLTg1NzJmYjMwOTVlYn0AAAAA",
+ "docIdentifier": 125,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738408581,
+ "docshellUUID": "{f1aad793-3c87-497f-826f-c639756c2c59}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezUyNzMyOWVkLTZmYTItNDgxZC1hMWIyLWE4YzkxODRmYzY4OH0AAAAA",
+ "docIdentifier": 126,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408582,
+ "docshellUUID": "{43584cab-ac21-4bd8-bc9b-cd5d22599d93}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2U2ZjEzZGI4LTdmOGMtNGU5Zi05OTM3LTVhNWY2Y2NmNzNiZH0AAAAA",
+ "docIdentifier": 127
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408583,
+ "docshellUUID": "{7266f212-5701-4962-88f6-daf21b0cd491}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezIwYmY4OGIxLWUzNzctNGM2ZS04MTFjLTNmNWM1NDY4ZDU4Zn0AAAAA",
+ "docIdentifier": 128
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408584,
+ "docshellUUID": "{76a8f95b-bf8b-4ec5-b161-8ba52f6afae2}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2UwMjU2MWZkLWFhZDMtNGQ0MS1iOGYwLWVhMGY4MjlkN2I0Nn0AAAAA",
+ "docIdentifier": 129
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451818192,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738408548,
+ "docshellUUID": "{25a1d7d2-b55d-49bc-8d2d-adf05a59b9ba}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2JiZjUyZGU2LTg3NjEtNGM4ZC05YjM0LTZlNWVkOTZhZmQxMn0AAAAA",
+ "docIdentifier": 122,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738408549,
+ "docshellUUID": "{25a1d7d2-b55d-49bc-8d2d-adf05a59b9ba}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezZjMmUzZjg3LTlkMDUtNGM2NS1hZGRjLTFiY2Q4YTgzNjNmMX0AAAAA",
+ "docIdentifier": 123,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408550,
+ "docshellUUID": "{878ab3bc-a999-43c3-99dc-b9434fe13501}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2VmZjE5NTM4LTYzNGYtNDMwMS05ZDY3LWI3MTA1NzNjNzUxYn0AAAAA",
+ "docIdentifier": 124
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408551,
+ "docshellUUID": "{60c88f70-13c3-4a9d-ac20-e0df112ccd50}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2JmM2M2OGNhLWIzMTgtNDUwNy1iZjUzLTc3MWRlNDJlZmUyMX0AAAAA",
+ "docIdentifier": 125
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408552,
+ "docshellUUID": "{964d9c55-7ca5-476b-838e-7a9896e8fe70}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2MyYjdkZjM2LWEwMTEtNGY4OC1iN2JmLWUzOTIwYWIxNjk0Zn0AAAAA",
+ "docIdentifier": 126
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451818208,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738408515,
+ "docshellUUID": "{e204a0ef-eeda-48e0-a94d-f136c660b6a6}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2IyMDQ2OGQzLTI0NDUtNDAzZi04ZjFjLThhYmExZjEyNzY3Yn0AAAAA",
+ "docIdentifier": 135,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738408516,
+ "docshellUUID": "{e204a0ef-eeda-48e0-a94d-f136c660b6a6}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezUyZDA1ZDA2LWYzOWYtNGI2YS1hMjFhLWQzYzI2NGQ5MDdiMH0AAAAA",
+ "docIdentifier": 136,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408517,
+ "docshellUUID": "{1009278f-9c58-4c63-ac7e-e239c816fa69}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezEzNGE0YjUxLTg0ZWItNDlhZC04MWRiLWJhNzIwMWZhZDU0ZH0AAAAA",
+ "docIdentifier": 137
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408518,
+ "docshellUUID": "{32225ac0-0b7c-4069-b2ca-78b179fd0839}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2RjY2VkZTUxLTlmOTUtNDFkYy04ZWE5LWRjMTk5OGZhZDJiOX0AAAAA",
+ "docIdentifier": 138
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408519,
+ "docshellUUID": "{470c5de2-944c-4cb2-ac46-e33322567876}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2Y5MWIzYmM3LTRiYTQtNGQ1ZS05MWJlLTQ4MzIwY2NjNDU5ZH0AAAAA",
+ "docIdentifier": 139
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451818257,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738408491,
+ "docshellUUID": "{3ab47ac2-fb3c-4c7d-9c72-7e1ec614350e}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezFhNzM2YzE4LWZkMWMtNGRjNi1hMThiLTE2NmRmYzNjM2U5NX0AAAAA",
+ "docIdentifier": 128,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738408492,
+ "docshellUUID": "{3ab47ac2-fb3c-4c7d-9c72-7e1ec614350e}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezJiYzE3ZWExLThmM2EtNDVjOC1hNDc3LTNjMjBkOGIyNGUxYn0AAAAA",
+ "docIdentifier": 129,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408493,
+ "docshellUUID": "{797ed9aa-9c8d-4540-90a1-21a221af9baa}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezYzNmM5MDBkLTFlNDQtNDIxOS1hY2U2LWIxZWYwMTZjMmE0YX0AAAAA",
+ "docIdentifier": 130
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408494,
+ "docshellUUID": "{825230d4-e859-444c-8661-b7e2aa63dc33}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezI5ZmE3N2RjLWZjODMtNDUzZC1iNDBkLTdhMDBjZGU2YWFhMn0AAAAA",
+ "docIdentifier": 131
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408495,
+ "docshellUUID": "{16b2e3e5-fcf0-45f2-9df2-7b167c44a22e}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezgwM2I5MTA0LTk0YzItNDcxNC04NDYxLTg2ZWFhODdlYTJkNX0AAAAA",
+ "docIdentifier": 132
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451818269,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738408469,
+ "docshellUUID": "{24ef9a24-9199-43a8-9ffc-4784468738db}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2FmNzU3MTM5LWQ4NzMtNGY1YS04NzgwLThhYWI3NjYwNDA4Y30AAAAA",
+ "docIdentifier": 120,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738408470,
+ "docshellUUID": "{24ef9a24-9199-43a8-9ffc-4784468738db}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezUwNGE3NWY2LTA2ZTQtNGVkYy04ZTg0LWU0ZWZkYTMwNjEyMX0AAAAA",
+ "docIdentifier": 121,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408471,
+ "docshellUUID": "{43584cab-ac21-4bd8-bc9b-cd5d22599d93}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2JjZjRmOTlkLTE3ZTMtNDFjMy1hMTRjLTAzMWJiZWM5ZDlmYn0AAAAA",
+ "docIdentifier": 122
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408472,
+ "docshellUUID": "{7266f212-5701-4962-88f6-daf21b0cd491}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2I5NmI2ZjgxLWY3NmItNDg1OC1hYmQ5LTc0NGQ1YzExMzRiMH0AAAAA",
+ "docIdentifier": 123
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408473,
+ "docshellUUID": "{76a8f95b-bf8b-4ec5-b161-8ba52f6afae2}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2RiNjgwMTc4LTU1ZDktNGI2ZS1iYzM4LTAxZTA0MDE2ZDEwOH0AAAAA",
+ "docIdentifier": 124
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451818297,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738408425,
+ "docshellUUID": "{1fbe9917-506d-4fdc-aeb5-61ed46c8f7a9}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2JjNzUwYmNjLWQ4ZDEtNDY4Ny1iNzYyLWU2MTFmZGNmMTljOH0AAAAA",
+ "docIdentifier": 117,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738408426,
+ "docshellUUID": "{1fbe9917-506d-4fdc-aeb5-61ed46c8f7a9}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2JjYThjZGYwLWUxNDktNDU1Yi04ZTM1LWZjMDNmZDkyNDkxZn0AAAAA",
+ "docIdentifier": 118,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408427,
+ "docshellUUID": "{878ab3bc-a999-43c3-99dc-b9434fe13501}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2FmODc0MzRiLWQwZWYtNGUxNC1iMmJjLTBiYzUzNmQyMDM5M30AAAAA",
+ "docIdentifier": 119
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408428,
+ "docshellUUID": "{60c88f70-13c3-4a9d-ac20-e0df112ccd50}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2FmYjU3NzQwLTNkYjEtNGMyYS1iOWUzLTRmZjYwNDkxNjY3NX0AAAAA",
+ "docIdentifier": 120
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408429,
+ "docshellUUID": "{964d9c55-7ca5-476b-838e-7a9896e8fe70}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezAzMmVmMGNkLWNmMGItNDM4YS1hNjNhLTJmYzcwNjlkODU0N30AAAAA",
+ "docIdentifier": 121
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451818328,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738408395,
+ "docshellUUID": "{fb4d8e18-1d9f-47a1-90ac-11a07178ce6d}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2EwMGJmNTMwLTZiMjUtNGNlYy05Mzk5LWJjOTJiMDhmYTQ0Y30AAAAA",
+ "docIdentifier": 130,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738408396,
+ "docshellUUID": "{fb4d8e18-1d9f-47a1-90ac-11a07178ce6d}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2YyYmIyNmY2LWYxM2ItNDA1ZS1iMmU0LTg1YzdjNjdjZGI3YX0AAAAA",
+ "docIdentifier": 131,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408397,
+ "docshellUUID": "{1009278f-9c58-4c63-ac7e-e239c816fa69}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezBiNWY0ZDEzLTNjMzctNDVkMi04ODBmLThmYjcwZmM1ODhkOX0AAAAA",
+ "docIdentifier": 132
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408398,
+ "docshellUUID": "{32225ac0-0b7c-4069-b2ca-78b179fd0839}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezg4MWU2OTc4LWFiZGYtNDFmOS05YmRjLWUzYTJhMmIxNWZjNX0AAAAA",
+ "docIdentifier": 133
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408399,
+ "docshellUUID": "{470c5de2-944c-4cb2-ac46-e33322567876}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezI5ZjVkNmIyLWRjYTMtNGNkZi05NjU3LWY2NzQyMzAyOTU5ZH0AAAAA",
+ "docIdentifier": 134
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451818372,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738408366,
+ "docshellUUID": "{f33f3aba-8a68-481b-b443-2ce97dc176f9}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezMzNDkzODgyLTJjN2QtNDc4Ni1iNGRiLWQ1NTA3NzU5ODk5MH0AAAAA",
+ "docIdentifier": 123,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738408367,
+ "docshellUUID": "{f33f3aba-8a68-481b-b443-2ce97dc176f9}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2YzNzM5ODFjLTE2NWMtNDNiMC1hYThjLWQ4Mzk5MTJiNWY5OX0AAAAA",
+ "docIdentifier": 124,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408368,
+ "docshellUUID": "{797ed9aa-9c8d-4540-90a1-21a221af9baa}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezY2M2VjOWEwLWU4NjgtNDI0My04MWJhLWRkMDE3YmNmNDEwOX0AAAAA",
+ "docIdentifier": 125
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408369,
+ "docshellUUID": "{825230d4-e859-444c-8661-b7e2aa63dc33}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezgyODZmMDI3LTkzZmEtNDI4OS1hZjg3LTZiOTZhNGJkNWE0Y30AAAAA",
+ "docIdentifier": 126
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408370,
+ "docshellUUID": "{16b2e3e5-fcf0-45f2-9df2-7b167c44a22e}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2JmMWNhODY0LTBhNTUtNGI3ZC1hZTFmLWQ5ZWVjMDk1ZWRkZn0AAAAA",
+ "docIdentifier": 127
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451818407,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738408339,
+ "docshellUUID": "{79a9b0ba-723d-4a36-91e7-ccadb90ea42d}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2M2YzE0ZTBjLWFlY2MtNGMzOS04MGVlLTZkMDlkOTg4NTA4ZH0AAAAA",
+ "docIdentifier": 115,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738408340,
+ "docshellUUID": "{79a9b0ba-723d-4a36-91e7-ccadb90ea42d}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2FmNjczNjlmLWMzNDctNGRkOC05NDIyLWVlYTYzMzFmYzY2OX0AAAAA",
+ "docIdentifier": 116,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408341,
+ "docshellUUID": "{43584cab-ac21-4bd8-bc9b-cd5d22599d93}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezBiMjRlYmRhLTc0NTEtNDg3OC1hOTkzLTkxODdlZGMwYTAzOH0AAAAA",
+ "docIdentifier": 117
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408342,
+ "docshellUUID": "{7266f212-5701-4962-88f6-daf21b0cd491}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezczMDUzNjMyLTNiZTQtNGViMi1iNTRiLTE4ZjUyZmQyNjgxM30AAAAA",
+ "docIdentifier": 118
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408343,
+ "docshellUUID": "{76a8f95b-bf8b-4ec5-b161-8ba52f6afae2}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezE4ODkwOTFkLTA2ODMtNDhhZi05M2Y1LWRjYmY4YWE2NWY1OX0AAAAA",
+ "docIdentifier": 119
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451818424,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738408306,
+ "docshellUUID": "{951fc66f-5e88-4d1e-ad53-9b42b152a398}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezY1OTI2ODhhLThjNzItNDQ1OS1iNWI5LTIxZjgxYzc3NWI4Y30AAAAA",
+ "docIdentifier": 112,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738408307,
+ "docshellUUID": "{951fc66f-5e88-4d1e-ad53-9b42b152a398}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2VhOWRjYTBjLWU4MDItNDg5ZS1hZTI2LTViYTdjYzlhNTAxNH0AAAAA",
+ "docIdentifier": 113,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408308,
+ "docshellUUID": "{878ab3bc-a999-43c3-99dc-b9434fe13501}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezVjNjdkNTNkLTBlN2QtNGJkZS04NzU4LWFjZTFjMzYxNzA1OH0AAAAA",
+ "docIdentifier": 114
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408309,
+ "docshellUUID": "{60c88f70-13c3-4a9d-ac20-e0df112ccd50}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2NlOWM0NDYyLWRlNjAtNDc0MS1iYTAyLTY1YjVmNzBjZmE3ZX0AAAAA",
+ "docIdentifier": 115
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408310,
+ "docshellUUID": "{964d9c55-7ca5-476b-838e-7a9896e8fe70}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2I4NzFkODUyLWM0NDYtNGY4MS1hMDMxLTY4Y2VkMDE4Mjg3MH0AAAAA",
+ "docIdentifier": 116
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451818456,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738408282,
+ "docshellUUID": "{19c99806-937d-4953-9317-2004dba6badb}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezRjMzUxMjhjLTc1NWEtNGU3NS04MmEwLTFkNGViN2I4ZWE2OH0AAAAA",
+ "docIdentifier": 125,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738408283,
+ "docshellUUID": "{19c99806-937d-4953-9317-2004dba6badb}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezJiMGYwNzhlLWJhMmItNDM5My05Mjc1LWQ4YjBjYzY3MzhhMn0AAAAA",
+ "docIdentifier": 126,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408284,
+ "docshellUUID": "{1009278f-9c58-4c63-ac7e-e239c816fa69}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezA0NWRiNDVmLTcyNGUtNDE1Ni04Y2VhLTVjY2JjNDI4MTgzZX0AAAAA",
+ "docIdentifier": 127
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408285,
+ "docshellUUID": "{32225ac0-0b7c-4069-b2ca-78b179fd0839}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezMyZTVjOWQyLTMzMzEtNGYyZC1hMGQ0LWIzOTNmNGEyYTEzMn0AAAAA",
+ "docIdentifier": 128
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408286,
+ "docshellUUID": "{470c5de2-944c-4cb2-ac46-e33322567876}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezkxZmM0NGIxLWUzZjQtNDQ5Mi05ZDBiLTEyMmM0MTY4OGI3MX0AAAAA",
+ "docIdentifier": 129
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451818483,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738408257,
+ "docshellUUID": "{b246a1f1-4cd8-4bd6-8af7-0fd41b392f38}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezA5N2Y3MjY0LThmYmMtNDQ1Yi1iNDRiLWRiMDNiMTk5Mjg5ZX0AAAAA",
+ "docIdentifier": 118,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738408258,
+ "docshellUUID": "{b246a1f1-4cd8-4bd6-8af7-0fd41b392f38}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezJhYzg2YWExLTdiZDQtNDE4OS1hOTg5LTU4ZWNkZTNjNzQyYn0AAAAA",
+ "docIdentifier": 119,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408259,
+ "docshellUUID": "{797ed9aa-9c8d-4540-90a1-21a221af9baa}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2ViZDUzMjYxLTRhZDItNDhjMi04NGYyLTViYmU5ZDUwMzJhMX0AAAAA",
+ "docIdentifier": 120
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408260,
+ "docshellUUID": "{825230d4-e859-444c-8661-b7e2aa63dc33}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2Q3NGQ1NzI4LWExYTQtNGM3MS05MTExLTJiMjllNzI0MWIzOX0AAAAA",
+ "docIdentifier": 121
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408261,
+ "docshellUUID": "{16b2e3e5-fcf0-45f2-9df2-7b167c44a22e}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezMwMzQzODE1LWEzN2UtNGIyMS1iYmNhLTdhOTlhM2IwM2UzN30AAAAA",
+ "docIdentifier": 122
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451818512,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738408237,
+ "docshellUUID": "{865d09a7-af12-4651-82e6-abac35c7157b}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2I2YTY2MWNjLWQyZTMtNGIzMy04NWU2LTU2MzY5Yjc1ZjAwOX0AAAAA",
+ "docIdentifier": 110,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738408238,
+ "docshellUUID": "{865d09a7-af12-4651-82e6-abac35c7157b}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezkxNTczZTkyLTIzMTYtNGMyZC04NDNmLWQxMzFmN2Y4ZGU1NH0AAAAA",
+ "docIdentifier": 111,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408239,
+ "docshellUUID": "{43584cab-ac21-4bd8-bc9b-cd5d22599d93}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezVjZmVkNDRkLTRhYWYtNDJkMS04Nzg5LThjNjgxMGI4YWMxMH0AAAAA",
+ "docIdentifier": 112
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408240,
+ "docshellUUID": "{7266f212-5701-4962-88f6-daf21b0cd491}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezQ3MzMzOTQyLWRmZjUtNGNmNi1iYjgyLWY4YWNjZmE4MTVjMn0AAAAA",
+ "docIdentifier": 113
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408241,
+ "docshellUUID": "{76a8f95b-bf8b-4ec5-b161-8ba52f6afae2}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2QyM2M3ZWY2LWUxZWUtNDhhZi05MDQ2LWFjY2MzNDQ2M2U1M30AAAAA",
+ "docIdentifier": 114
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451818563,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738408211,
+ "docshellUUID": "{fdc1d953-da9b-47c3-a61d-19e66360623d}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezJhMDI3NDA3LTRlYjctNDM1ZC04YWViLTYzODdjYjE4NjhiZn0AAAAA",
+ "docIdentifier": 107,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738408212,
+ "docshellUUID": "{fdc1d953-da9b-47c3-a61d-19e66360623d}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezdiMWRjN2E2LWExOTItNDRlNC1hMjFiLWNhNDQ3OWUwMDA3Mn0AAAAA",
+ "docIdentifier": 108,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408213,
+ "docshellUUID": "{878ab3bc-a999-43c3-99dc-b9434fe13501}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2JmZmNjOWRkLWViMGEtNDAyNi05NTkzLThjMzIxYWZlOTQ4YX0AAAAA",
+ "docIdentifier": 109
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408214,
+ "docshellUUID": "{60c88f70-13c3-4a9d-ac20-e0df112ccd50}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2JkNzNiMjM4LTM3MjItNDY0MS04MGQ5LTczOGYyNGVmM2YxNn0AAAAA",
+ "docIdentifier": 110
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408215,
+ "docshellUUID": "{964d9c55-7ca5-476b-838e-7a9896e8fe70}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2M3MGQ5NWRlLTYzZTgtNGMxNC05YzY1LWJkMGRmY2U4YjZhZH0AAAAA",
+ "docIdentifier": 111
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451818575,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738408187,
+ "docshellUUID": "{2974364a-5403-4333-b9fa-24f64911947b}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2YxYjVjMTlmLWIwNGEtNDc4Zi1hOGJjLWY3ZWIyNjM5MDlkMX0AAAAA",
+ "docIdentifier": 120,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738408188,
+ "docshellUUID": "{2974364a-5403-4333-b9fa-24f64911947b}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2E1ZTZiOGJiLWRlM2ItNDgxMS1iYWMyLTI5Mjc4ODc2ODA0M30AAAAA",
+ "docIdentifier": 121,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408189,
+ "docshellUUID": "{1009278f-9c58-4c63-ac7e-e239c816fa69}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezM3MGM5NWExLTkxNDItNDMyNi1iNzU5LTVkODBjOTdjMjhlZH0AAAAA",
+ "docIdentifier": 122
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408190,
+ "docshellUUID": "{32225ac0-0b7c-4069-b2ca-78b179fd0839}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezM4MDM1ZDZmLThiNmMtNDhmZS05OGFlLTYwZGFkYWRlYTcwOX0AAAAA",
+ "docIdentifier": 123
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408191,
+ "docshellUUID": "{470c5de2-944c-4cb2-ac46-e33322567876}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2Y4NDU3NTM3LWUwZTYtNGEyZC1hZWUzLTNhN2QwMjBiMGI5N30AAAAA",
+ "docIdentifier": 124
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451818603,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738408153,
+ "docshellUUID": "{27351734-b8ce-4b4a-912c-edb0110086a8}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezRhM2I2M2M5LTMyYmEtNDE1Mi05MGVjLTgxYTVlNGVlNzZhOX0AAAAA",
+ "docIdentifier": 113,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738408154,
+ "docshellUUID": "{27351734-b8ce-4b4a-912c-edb0110086a8}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezRlYTcwNzBkLTgyNTUtNGUwNi04ZDY5LTYwZTI2MWFkMDQyOX0AAAAA",
+ "docIdentifier": 114,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408155,
+ "docshellUUID": "{797ed9aa-9c8d-4540-90a1-21a221af9baa}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2YyMmFmYzk1LTAzZmYtNDYwYy04YjkwLTUxNjFjNjY2ZDFjNn0AAAAA",
+ "docIdentifier": 115
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408156,
+ "docshellUUID": "{825230d4-e859-444c-8661-b7e2aa63dc33}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2Y2NTg0MzIzLWEwMjgtNDRiNS04ZGRkLTAyMDg2ZjI2NDBkMH0AAAAA",
+ "docIdentifier": 116
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408157,
+ "docshellUUID": "{16b2e3e5-fcf0-45f2-9df2-7b167c44a22e}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezkxM2RjMmE4LTVmNWUtNGUzYi1hNWI3LWU3NTFmMGViYzQ1OX0AAAAA",
+ "docIdentifier": 117
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451818637,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738408128,
+ "docshellUUID": "{be618eb8-a6d7-463b-bfc4-a5a4ad07dc8e}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezRlYWE0NGNlLTQ2N2UtNDM2Yy05NTRkLTNmYzQzNGUyZGFlNn0AAAAA",
+ "docIdentifier": 105,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738408129,
+ "docshellUUID": "{be618eb8-a6d7-463b-bfc4-a5a4ad07dc8e}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2NlNGUxZTBhLTMxNDEtNDIzZi04ZmFlLWI0NjYyYTFjOTQzOX0AAAAA",
+ "docIdentifier": 106,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408130,
+ "docshellUUID": "{43584cab-ac21-4bd8-bc9b-cd5d22599d93}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2U0ZWFkZmE2LWY5N2UtNGI5OC1iMjBjLWMxY2QwYmY5Yjk1OX0AAAAA",
+ "docIdentifier": 107
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408131,
+ "docshellUUID": "{7266f212-5701-4962-88f6-daf21b0cd491}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2IwMThmZTE0LTQ1ZWEtNGZkMy1hNWRhLTEyMGI5MWYyOTAxMX0AAAAA",
+ "docIdentifier": 108
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408132,
+ "docshellUUID": "{76a8f95b-bf8b-4ec5-b161-8ba52f6afae2}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezAxZDkyZjRlLWI5YWItNDE2Zi04OTAzLWQ4Y2U2MDcwZjIwMH0AAAAA",
+ "docIdentifier": 109
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451818666,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738408089,
+ "docshellUUID": "{c8875099-2620-48f7-a6e6-0413e7b9c71a}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2NjZWNjNWE4LTM0ZWMtNDY4Yi1hYWY5LTlmOGQzNDY4MzhhM30AAAAA",
+ "docIdentifier": 102,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738408090,
+ "docshellUUID": "{c8875099-2620-48f7-a6e6-0413e7b9c71a}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezdhY2YzOTBmLTZlNzYtNGZjYS1hNDY2LWM0ODc3YTg1YjQwYn0AAAAA",
+ "docIdentifier": 103,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408091,
+ "docshellUUID": "{878ab3bc-a999-43c3-99dc-b9434fe13501}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezU0MWZhNTFlLTEzZDktNDU3My1iOGU2LWQzNjY0MTZkODBmNX0AAAAA",
+ "docIdentifier": 104
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408092,
+ "docshellUUID": "{60c88f70-13c3-4a9d-ac20-e0df112ccd50}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezExZjkwOTA4LWQ1N2MtNDkwZi04M2YyLTVlYjFkODczMTExMH0AAAAA",
+ "docIdentifier": 105
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408093,
+ "docshellUUID": "{964d9c55-7ca5-476b-838e-7a9896e8fe70}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2I5MzE2ZWMzLTkwOWUtNDQ0ZC1hNTY5LTRmZTQ0Y2ZkOTA0OH0AAAAA",
+ "docIdentifier": 106
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451818709,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "http://localhost:8080/?httpsurl=twitter.com/Telegraph/status/437962536407666688/photo/1",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738408057,
+ "docshellUUID": "{6e8a927c-39a4-45ab-9e51-3450c9725730}",
+ "referrer": "http://localhost:8080/?url=t.co/FslmElOVwY",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezU2NDRjYWNiLWVkY2UtNGViMC04MTIwLTBlNDA0ODEyNjMxZn0AAAAA",
+ "docIdentifier": 116,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408058,
+ "docshellUUID": "{e8979a67-52ae-4d6e-8b94-8de24a2a0733}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezcwMzg5ZmQ5LWQ0ODYtNGUyZC1hNGYzLTViZThhOTgxOWE0MX0AAAAA",
+ "docIdentifier": 117
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408059,
+ "docshellUUID": "{946a54d1-68a3-41e3-9a78-60a643045e94}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezg4NDcxN2I3LWFhOTgtNDJhZS1iNTc1LTc2OTFlMjhhYzQ0YX0AAAAA",
+ "docIdentifier": 118
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738408060,
+ "docshellUUID": "{c2df782f-1821-48ce-a941-d9d492f5a71b}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezA3MzY1OWZkLTQ1YjAtNDg2My04ZGYyLWUxMTRkOGZhYTRjZH0AAAAA",
+ "docIdentifier": 119
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451818726,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 1,
+ "storage": {
+ "http://localhost:8080": {
+ "ScribeTransport": "{\"internal_referer\":null,\"client_version\":\"macaw-swift\",\"items\":[{}],\"associations\":{\"2\":{\"association_id\":null,\"association_type\":3},\"3\":{\"association_id\":null,\"association_type\":3}},\"message\":\"//twitter.com/Telegraph/status/437962536407666688/photo/1/large\",\"event_namespace\":{\"client\":\"web\",\"page\":\"permalink\",\"section\":\"permalink\",\"element\":\"platform_photo_card\",\"action\":\"show\"},\"triggered_on\":1393256185388,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":null,\"client_version\":\"macaw-swift\",\"event_value\":0,\"event_namespace\":{\"client\":\"web\",\"page\":\"permalink\",\"section\":\"permalink\",\"component\":\"reduced_action_queue\",\"action\":\"captured\"},\"triggered_on\":1393256185472,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":null,\"client_version\":\"macaw-swift\",\"event_value\":0,\"event_namespace\":{\"client\":\"web\",\"page\":\"permalink\",\"section\":\"permalink\",\"component\":\"reduced_action_queue\",\"action\":\"ignored\"},\"triggered_on\":1393256185473,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":null,\"client_version\":\"macaw-swift\",\"event_value\":0,\"event_namespace\":{\"client\":\"web\",\"page\":\"permalink\",\"section\":\"permalink\",\"component\":\"reduced_action_queue\",\"action\":\"direct\"},\"triggered_on\":1393256185473,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":null,\"client_version\":\"macaw-swift\",\"event_value\":0,\"event_namespace\":{\"client\":\"web\",\"page\":\"permalink\",\"section\":\"permalink\",\"component\":\"reduced_action_queue\",\"action\":\"all\"},\"triggered_on\":1393256185473,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAAV2h0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vVGVsZWdyYXBoL3N0YXR1cy80Mzc5NjI1MzY0MDc2NjY2ODgvcGhvdG8vMQAAAAAAAAAEAAAABwAAAA4AAAAH/////wAAAAf/////AAAABwAAAAkAAAAVAAAAQgAAABUAAAABAAAAFQAAAAEAAAAWAAAAAAAAABb/////AAAAAP////8AAAAXAAAAQAAAABX/////AQAAAAAAAAAAAAAAAA=="
+ }, {
+ "entries": [{
+ "url": "http://localhost:8080/?httpsurl=www.google.fr/search?q=google+docs&ie=utf-8&oe=utf-8&rls=org.mozilla:en-US:unofficial&client=firefox-nightly&channel=fflb&gfe_rd=ctrl&ei=aGcLU8r5I4Hf8geZ5YHABg&gws_rd=cr",
+ "title": "google docs - Recherche Google",
+ "cacheKey": 0,
+ "ID": 3738407536,
+ "docshellUUID": "{71f13212-db7d-4b64-afda-f0983d0f1cf0}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2M1ZTA3NWZkLTUxMTktNDUxOC1hZWM5LWUzZDIxODQ3MzM1Y30AAAAA",
+ "docIdentifier": 110,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=accounts.google.com/ServiceLogin?service=writely&passive=1209600&continue=https%3A%2F%2Fdocs.google.com%2F%3Fhl%3Dfr%26urp%3Dhttps%3A%2F%2Fwww.google.fr%2Furl%3Fsa%253Dt%2526rct%253Dj%2526q%253D%2526esrc%253Ds%2526sou%23&followup=https%3A%2F%2Fdocs.google.com%2F%3Fhl%3Dfr%26urp%3Dhttps%3A%2F%2Fwww.google.fr%2Furl%3Fsa%253Dt%2526rct%253Dj%2526q%253D%2526esrc%253Ds%2526sou&ltmpl=homepage&hl=fr",
+ "title": "Google Drive",
+ "cacheKey": 0,
+ "ID": 3738407537,
+ "docshellUUID": "{71f13212-db7d-4b64-afda-f0983d0f1cf0}",
+ "referrer": "http://localhost:8080/?httpsurl=docs.google.com/?hl=fr",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2VlZjgzMThmLWNmZGYtNDVmOC1iYmVhLTMxY2Q1ZWZmYWQyNH0AAAAA",
+ "docIdentifier": 111,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=drive.google.com/?hl=fr&urp=http://localhost:8080/?httpsurl=www.google.fr/url?sa%3Dt%26rct%3Dj%26q%3D%26esrc%3Ds%26sou&authuser=0#my-drive",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738407538,
+ "docshellUUID": "{71f13212-db7d-4b64-afda-f0983d0f1cf0}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezk0NTg2NTMyLWM3MWEtNDQ2Mi04ZmVjLTE1YmYyZTgxOGY3YX0AAAAA",
+ "docIdentifier": 112,
+ "persist": true
+ }],
+ "lastAccessed": 1528451818759,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 3,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAAqmh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9ZHJpdmUuZ29vZ2xlLmNvbS8/aGw9ZnImdXJwPWh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9d3d3Lmdvb2dsZS5mci91cmw/c2ElM0R0JTI2cmN0JTNEaiUyNnElM0QlMjZlc3JjJTNEcyUyNnNvdSZhdXRodXNlcj0wI215LWRyaXZlAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAACVAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAACKAAAAogAAAAgBAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "http://localhost:8080/?httpsurl=docs.google.com/drawings/d/1Kq65yVqWT7HxrGLeNdxAipqbX7P4OuS4Md325R0edrA/edit",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738407337,
+ "docshellUUID": "{3c628173-3a28-431b-9602-d117562d83e7}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezYxNGI4NDk1LTMyNWMtNGQxNC1hZDVhLWQ5MjE3ZjcyNjE4YX0AAAAA",
+ "docIdentifier": 104,
+ "structuredCloneState": "AAAAAAAA//8=",
+ "structuredCloneVersion": 2,
+ "persist": true
+ }],
+ "lastAccessed": 1528451818789,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 1,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAAbGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9ZG9jcy5nb29nbGUuY29tL2RyYXdpbmdzL2QvMUtxNjV5VnFXVDdIeHJHTGVOZHhBaXBxYlg3UDRPdVM0TWQzMjVSMGVkckEvZWRpdAAAAAAAAAAEAAAABwAAAA4AAAAH/////wAAAAf/////AAAABwAAAAkAAAAVAAAAVwAAABUAAAABAAAAFQAAAAEAAAAWAAAAAAAAABb/////AAAAAP////8AAAAXAAAAVQAAABX/////AQAAAAAAAAAAAAAAAA=="
+ }, {
+ "entries": [{
+ "url": "http://localhost:8080/?httpsurl=docs.google.com/document/d/1dm2Z_yaEU506PHeJE64BReXQyIlJgJk7mXOjKx36MbE/edit",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738407107,
+ "docshellUUID": "{42de7195-c626-4fa2-9243-d62b03c43292}",
+ "referrer": "http://localhost:8080/?httpsurl=docs.google.com/drawings/d/1Kq65yVqWT7HxrGLeNdxAipqbX7P4OuS4Md325R0edrA/edit",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezk3NmIxNmVkLTNlMDAtNGU4MC1iNTQxLWFiMTY2NDMzNmIxNX0AAAAA",
+ "docIdentifier": 101,
+ "structuredCloneState": "AAAAAAAA//8=",
+ "structuredCloneVersion": 2,
+ "persist": true
+ }],
+ "lastAccessed": 1528451818823,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 1,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAAbGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9ZG9jcy5nb29nbGUuY29tL2RvY3VtZW50L2QvMWRtMlpfeWFFVTUwNlBIZUpFNjRCUmVYUXlJbEpnSms3bVhPakt4MzZNYkUvZWRpdAAAAAAAAAAEAAAABwAAAA4AAAAH/////wAAAAf/////AAAABwAAAAkAAAAVAAAAVwAAABUAAAABAAAAFQAAAAEAAAAWAAAAAAAAABb/////AAAAAP////8AAAAXAAAAVQAAABX/////AQAAAAAAAAAAAAAAAA=="
+ }, {
+ "entries": [{
+ "url": "http://localhost:8080/?httpsurl=www.google.fr/search?q=movies&ie=utf-8&oe=utf-8&rls=org.mozilla:en-US:unofficial&client=firefox-nightly&channel=fflb&gfe_rd=ctrl&ei=U6UMU8XlJYHf8geZ5YHABg&gws_rd=cr",
+ "title": "movies - Google Search",
+ "cacheKey": 0,
+ "ID": 3738406924,
+ "docshellUUID": "{a8e41a81-4a16-4b82-b4ff-f66db6d40681}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezg5MTk5YjkyLTM3NjAtNGViNi1iZWEzLWZkMzQ4NGFmNjA1MH0AAAAA",
+ "docIdentifier": 109,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?url=www.youtube.com/user/YouTubeMoviesFR",
+ "title": "Films - YouTube",
+ "cacheKey": 0,
+ "ID": 3738406925,
+ "docshellUUID": "{a8e41a81-4a16-4b82-b4ff-f66db6d40681}",
+ "referrer": "http://localhost:8080/?url=www.google.fr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CDUQFjAB&url=http%3A%2F%2Fwww.youtube.com%2Fuser%2Fmovies&ei=U6UMU9fnKIOb0AXAgYFg&usg=AFQjCNHrmNe-ykFP-4R2NPUvq_YQh3LfQw&sig2=k395eaN4vi_NxXCeQwBYtg&bvm=bv.61725948,d.d2k",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2UyNjE3NGQxLTkwOTAtNDUxMy04YjZhLTBkMWYzODNlYzQ1OH0AAAAA",
+ "docIdentifier": 110,
+ "structuredCloneState": "AAAAAAgA//8LAAAABAD//3MAcABmAC0AcgBlAGYAZQByAGUAcgAAAO0AAAAEAP//aAB0AHQAcAA6AC8ALwB3AHcAdwAuAGcAbwBvAGcAbABlAC4AZgByAC8AdQByAGwAPwBzAGEAPQB0ACYAcgBjAHQAPQBqACYAcQA9ACYAZQBzAHIAYwA9AHMAJgBzAG8AdQByAGMAZQA9AHcAZQBiACYAYwBkAD0AMgAmAHYAZQBkAD0AMABDAEQAVQBRAEYAagBBAEIAJgB1AHIAbAA9AGgAdAB0AHAAJQAzAEEAJQAyAEYAJQAyAEYAdwB3AHcALgB5AG8AdQB0AHUAYgBlAC4AYwBvAG0AJQAyAEYAdQBzAGUAcgAlADIARgBtAG8AdgBpAGUAcwAmAGUAaQA9AFUANgBVAE0AVQA5AGYAbgBLAEkATwBiADAAQQBYAEEAZwBZAEYAZwAmAHUAcwBnAD0AQQBGAFEAagBDAE4ASAByAG0ATgBlAC0AeQBrAEYAUAAtADQAUgAyAE4AUABVAHYAcQBfAFkAUQBoADMATABmAFEAdwAmAHMAaQBnADIAPQBrADMAOQA1AGUAYQBOADQAdgBpAF8ATgB4AFgAQwBlAFEAdwBCAFkAdABnACYAYgB2AG0APQBiAHYALgA2ADEANwAyADUAOQA0ADgALABkAC4AZAAyAGsAAAAAAAAADQAAAAQA//9zAHAAZgAtAHQAaQBtAGUAcwB0AGEAbQBwAAAAAAAAAAAwaV6WRnRCAAAAAAAA//8=",
+ "structuredCloneVersion": 2,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738406926,
+ "docshellUUID": "{269707f0-f4f5-450b-a5da-ef1fe3bad30d}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezIzMGFlMjUwLTUxOWItNGEwZS1iMjU0LWY5YzU5Zjc0MmY3YX0AAAAA",
+ "docIdentifier": 111
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738406927,
+ "docshellUUID": "{cde4b193-6588-492d-b575-85c5796d1a7c}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2Q5YjlkYmZiLTU4NTYtNGI2Ny05MzRhLWQ1Zjc5Njk0ZjU1M30AAAAA",
+ "docIdentifier": 112
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738406928,
+ "docshellUUID": "{58a19b11-699b-4d3c-b6d8-b796fd6ba9f1}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2Q1M2NhMzUwLWJmYmYtNDRkNi1iOGNlLWUxNmU0ZjU3NWQ0Y30AAAAA",
+ "docIdentifier": 113
+ }],
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?url=www.youtube.com/watch?v=gYCzg8xg4c0&feature=c4-overview",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738406929,
+ "docshellUUID": "{a8e41a81-4a16-4b82-b4ff-f66db6d40681}",
+ "referrer": "http://localhost:8080/?url=www.youtube.com/user/YouTubeMoviesFR",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2UxZGYxZmE1LTc2ZjItNDFkNS04NTViLWNlMWQ4NGYwYWI1OX0AAAAA",
+ "docIdentifier": 114,
+ "structuredCloneState": "AAAAAAAA//8=",
+ "structuredCloneVersion": 2,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738406930,
+ "docshellUUID": "{9c3dc524-a7c4-4e3b-9152-8ef3114a6db4}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezU1MWFkMWFiLTBkNjUtNDIzYi1iNmJlLTk2NjZiZjcyMmM3NH0AAAAA",
+ "docIdentifier": 115
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451818845,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 3,
+ "scroll": {
+ "scroll": "0,374"
+ },
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAAUmh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/dXJsPXd3dy55b3V0dWJlLmNvbS93YXRjaD92PWdZQ3pnOHhnNGMwJmZlYXR1cmU9YzQtb3ZlcnZpZXcAAAAAAAAABAAAAAcAAAAOAAAAB/////8AAAAH/////wAAAAcAAAAJAAAAFQAAAD0AAAAVAAAAAQAAABUAAAABAAAAFgAAAAAAAAAW/////wAAAAD/////AAAAFwAAADsAAAAV/////wEAAAAAAAAAAAAAAAA="
+ }],
+ "selected": 10,
+ "_closedTabs": [{
+ "state": {
+ "entries": [{
+ "url": "http://localhost:8080/?url=swimswam.com/video-walk-2013-junior-world-championships-hamdem-center/",
+ "title": "Video Walk Through: 2013 Junior World Championships, Hamdan Center",
+ "ID": 17,
+ "docshellID": 15,
+ "docIdentifier": 17,
+ "children": [{
+ "url": "http://localhost:8080/?url=player.vimeo.com/video/73623354?title=0&byline=0&portrait=0",
+ "title": "Hamdam Centre Walk Thru at World Jnr Champs from SWIMSWAM on Vimeo",
+ "ID": 19,
+ "docshellID": 16,
+ "referrer": "http://localhost:8080/?url=swimswam.com/video-walk-2013-junior-world-championships-hamdem-center/",
+ "docIdentifier": 19
+ }, {
+ "url": "http://localhost:8080/?httpsurl=www.facebook.com/plugins/like.php?href=http%3A%2F%2Fswimswam.com%2Fvideo-walk-2013-junior-world-championships-hamdem-center%2F&layout=box_count&show_faces=false&width=50&action=like&colorscheme=light&height=90",
+ "ID": 24,
+ "docshellID": 17,
+ "referrer": "http://localhost:8080/?url=swimswam.com/video-walk-2013-junior-world-championships-hamdem-center/",
+ "docIdentifier": 24
+ }, {
+ "url": "http://localhost:8080/?httpsurl=www.facebook.com/plugins/like.php?href=http%3A%2F%2Fswimswam.com%2Fvideo-walk-2013-junior-world-championships-hamdem-center%2F&layout=button_count&show_faces=false&width=85&action=like&colorscheme=light&height=21",
+ "title": "Facebook",
+ "ID": 25,
+ "docshellID": 19,
+ "referrer": "http://localhost:8080/?url=swimswam.com/video-walk-2013-junior-world-championships-hamdem-center/",
+ "docIdentifier": 25
+ }]
+ }],
+ "lastAccessed": 1393256151290,
+ "hidden": false,
+ "attributes": {},
+ "image": "http://localhost:8080/?url=cdn.swimswam.com/wp-content/themes/swimswam/favicon.ico",
+ "index": 1
+ },
+ "title": "Video Walk Through: 2013 Junior World Championships, Hamdan Center",
+ "image": "http://localhost:8080/?url=cdn.swimswam.com/wp-content/themes/swimswam/favicon.ico",
+ "pos": 1,
+ "closedAt": 1393256151290
+ }, {
+ "state": {
+ "entries": [{
+ "url": "about:newtab",
+ "title": "New Tab",
+ "ID": 17,
+ "docshellID": 18,
+ "owner_b64": "SmIS26zLEdO3ZQBgsLbOywAAAAAAAAAAwAAAAAAAAEY=",
+ "docIdentifier": 17
+ }],
+ "lastAccessed": 1393256966807,
+ "userTypedValue": "sess",
+ "userTypedClear": 0,
+ "hidden": false,
+ "attributes": {},
+ "image": null,
+ "index": 1
+ },
+ "title": "New Tab",
+ "image": null,
+ "pos": 4,
+ "closedAt": 1393256966808
+ }, {
+ "state": {
+ "entries": [{
+ "url": "http://localhost:8080/?httpsurl=docs.google.com/presentation/d/1oTncQrrq06b1ow-BdKkaFaNr5IlZaWQEhqjsNSgcEdM/edit#slide=id.i0",
+ "title": "Untitled Presentation - Google Drive",
+ "ID": 45,
+ "docshellID": 38,
+ "referrer": "http://localhost:8080/?httpsurl=drive.google.com/?hl=fr&urp=http://localhost:8080/?httpsurl=www.google.fr/url?sa%3Dt%26rct%3Dj%26q%3D%26esrc%3Ds%26sou&authuser=0",
+ "docIdentifier": 46,
+ "structuredCloneState": "AAAAAAAA//8=",
+ "structuredCloneVersion": 2
+ }],
+ "lastAccessed": 1393256660847,
+ "hidden": false,
+ "attributes": {},
+ "image": "http://localhost:8080/?httpsurl=ssl.gstatic.com/docs/presentations/images/favicon4.ico",
+ "index": 1
+ },
+ "title": "Untitled Presentation - Google Drive",
+ "image": "http://localhost:8080/?httpsurl=ssl.gstatic.com/docs/presentations/images/favicon4.ico",
+ "pos": 4,
+ "closedAt": 1393256660847
+ }, {
+ "state": {
+ "entries": [{
+ "url": "http://localhost:8080/?httpsurl=docs.google.com/document/d/1lzeZ7lKYsBq1mXs6I1KwNAF4gbrCR7qVW1jr_5Ka0tQ/edit",
+ "title": "Untitled document - Google Drive",
+ "ID": 51,
+ "docshellID": 45,
+ "referrer": "http://localhost:8080/?httpsurl=drive.google.com/?hl=fr&urp=http://localhost:8080/?httpsurl=www.google.fr/url?sa%3Dt%26rct%3Dj%26q%3D%26esrc%3Ds%26sou&authuser=0",
+ "docIdentifier": 52,
+ "structuredCloneState": "AAAAAAAA//8=",
+ "structuredCloneVersion": 2
+ }],
+ "lastAccessed": 1393256601337,
+ "hidden": false,
+ "attributes": {},
+ "image": "http://localhost:8080/?httpsurl=ssl.gstatic.com/docs/documents/images/kix-favicon6.ico",
+ "index": 1
+ },
+ "title": "Untitled document - Google Drive",
+ "image": "http://localhost:8080/?httpsurl=ssl.gstatic.com/docs/documents/images/kix-favicon6.ico",
+ "pos": 3,
+ "closedAt": 1393256601337
+ }, {
+ "state": {
+ "entries": [{
+ "url": "http://localhost:8080/?httpsurl=docs.google.com/spreadsheet/ccc?key=0AsDW-iLj4J3pdEFaYkRmajhsMTJoTTd4U2k4V1E4U2c&usp=drive_web",
+ "title": "SessionFile.read() - Google Drive",
+ "ID": 39,
+ "docshellID": 33,
+ "referrer": "http://localhost:8080/?httpsurl=drive.google.com/?hl=fr&urp=http://localhost:8080/?httpsurl=www.google.fr/url?sa%3Dt%26rct%3Dj%26q%3D%26esrc%3Ds%26sou&authuser=0",
+ "docIdentifier": 40,
+ "structuredCloneState": "AAAAAAAA//8=",
+ "structuredCloneVersion": 2
+ }, {
+ "url": "http://localhost:8080/?httpsurl=docs.google.com/spreadsheet/ccc?key=0AsDW-iLj4J3pdEFaYkRmajhsMTJoTTd4U2k4V1E4U2c&usp=drive_web#gid=0",
+ "title": "SessionFile.read()",
+ "ID": 40,
+ "docshellID": 33,
+ "docIdentifier": 40
+ }],
+ "lastAccessed": 1393256373871,
+ "hidden": false,
+ "attributes": {},
+ "image": "http://localhost:8080/?httpsurl=docs.google.com/favicon.ico",
+ "index": 2,
+ "pageStyle": {
+ "pageStyle": "gridCss"
+ }
+ },
+ "title": "SessionFile.read()",
+ "image": "http://localhost:8080/?httpsurl=docs.google.com/favicon.ico",
+ "pos": 3,
+ "closedAt": 1393256373871
+ }, {
+ "state": {
+ "entries": [{
+ "url": "http://localhost:8080/?httpsurl=github.com/andrewray/iocamljs",
+ "title": "andrewray/iocamljs · GitHub",
+ "ID": 16,
+ "docshellID": 16,
+ "referrer": "http://localhost:8080/?httpsurl=t.co/Lgc1R8XU0T",
+ "docIdentifier": 16
+ }],
+ "lastAccessed": 1393256206748,
+ "hidden": false,
+ "attributes": {},
+ "image": "http://localhost:8080/?httpsurl=github.com/favicon.ico",
+ "index": 1,
+ "scroll": {
+ "scroll": "0,625"
+ }
+ },
+ "title": "andrewray/iocamljs · GitHub",
+ "image": "http://localhost:8080/?httpsurl=github.com/favicon.ico",
+ "pos": 2,
+ "closedAt": 1393256298987
+ }],
+ "busy": false,
+ "width": 1440,
+ "height": 874,
+ "screenX": 2908,
+ "screenY": 73,
+ "sizemode": "normal",
+ "zIndex": 1
+ }, {
+ "tabs": [{
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738366957,
+ "docshellUUID": "{771f237b-7a6c-4aec-be7c-5b95057a9b97}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezk2NWViODFkLTQ2ZDEtNDJlNS1hZTlmLTNkYzliMmIxNGM5Mn0AAAAA",
+ "docIdentifier": 0,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=www.facebook.com/",
+ "title": "Welcome to Facebook - Log In, Sign Up or Learn More",
+ "cacheKey": 0,
+ "ID": 3738366958,
+ "docshellUUID": "{771f237b-7a6c-4aec-be7c-5b95057a9b97}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezFkN2JlMjg4LTBiODctNDZhMS1iNDQyLWNlN2UxMGI2YmI5M30AAAAA",
+ "docIdentifier": 1,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=www.facebook.com/checkpoint/?next",
+ "title": "Facebook",
+ "cacheKey": 0,
+ "ID": 3738366959,
+ "docshellUUID": "{771f237b-7a6c-4aec-be7c-5b95057a9b97}",
+ "referrer": "http://localhost:8080/?httpsurl=www.facebook.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezFiNTQ3ZGJmLWI2ODItNGNhNi1hZDQxLTg5MWQ0NzUyNzQ4ZX0AAAAA",
+ "docIdentifier": 2,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=www.facebook.com/checkpoint/?next",
+ "title": "Facebook",
+ "cacheKey": 1393256027,
+ "ID": 3738366960,
+ "docshellUUID": "{771f237b-7a6c-4aec-be7c-5b95057a9b97}",
+ "referrer": "http://localhost:8080/?httpsurl=www.facebook.com/checkpoint/?next",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezFjZjk4M2Y3LTAyZTktNDQwNS1iZWE4LTM3ZDdkNTAwNTExZH0AAAAA",
+ "docIdentifier": 3,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=www.facebook.com/checkpoint/?next",
+ "title": "Facebook",
+ "cacheKey": 1393256028,
+ "ID": 3738366961,
+ "docshellUUID": "{771f237b-7a6c-4aec-be7c-5b95057a9b97}",
+ "referrer": "http://localhost:8080/?httpsurl=www.facebook.com/checkpoint/?next",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezcxMjUyNjQ4LWEzMjctNGY5Ni1iNTg3LWRkYzljMWY0NGIwOX0AAAAA",
+ "docIdentifier": 4,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=www.facebook.com/checkpoint/?next",
+ "title": "Facebook",
+ "cacheKey": 1393256029,
+ "ID": 3738366962,
+ "docshellUUID": "{771f237b-7a6c-4aec-be7c-5b95057a9b97}",
+ "referrer": "http://localhost:8080/?httpsurl=www.facebook.com/checkpoint/?next",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2RlZjY1ZWEwLWFhYWMtNDM5Zi04ZTg2LWIxNjQ3ZGVhNzM1Mn0AAAAA",
+ "docIdentifier": 5,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=www.facebook.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738366963,
+ "docshellUUID": "{771f237b-7a6c-4aec-be7c-5b95057a9b97}",
+ "referrer": "http://localhost:8080/?httpsurl=www.facebook.com/checkpoint/?next",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezA1Mzk3NTE4LWVmY2QtNGM2Zi1hNmI5LWZiYWQ0ODliNmU4MH0AAAAA",
+ "docIdentifier": 6,
+ "structuredCloneState": "GQAAAAQA//9oAHQAdABwAHMAOgAvAC8AdwB3AHcALgBmAGEAYwBlAGIAbwBvAGsALgBjAG8AbQAvAAAAAAAAAA==",
+ "structuredCloneVersion": 2,
+ "persist": true
+ }],
+ "lastAccessed": 1528451778773,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 7,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAAMWh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9d3d3LmZhY2Vib29rLmNvbS8AAAAAAAAABAAAAAcAAAAOAAAAB/////8AAAAH/////wAAAAcAAAAJAAAAFQAAABwAAAAVAAAAAQAAABUAAAABAAAAFgAAAAAAAAAW/////wAAAAD/////AAAAFwAAABoAAAAV/////wEAAAAAAAAAAAAAAAA="
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738368435,
+ "docshellUUID": "{fc5eb424-e812-45b8-90bf-a8f7efefda01}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2YyZjA3Y2JjLWJkMDUtNDRkNi1hOTI5LWFmZmE5YmY1ODJkM30AAAAA",
+ "docIdentifier": 7,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738368436,
+ "docshellUUID": "{fc5eb424-e812-45b8-90bf-a8f7efefda01}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2E3MDA1Mzc1LWI3YzktNDIwNi1iY2I4LWRlM2ExZDRmNGJkZH0AAAAA",
+ "docIdentifier": 8,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738368437,
+ "docshellUUID": "{43584cab-ac21-4bd8-bc9b-cd5d22599d93}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezAzM2UzZTdhLWZmOTktNGFmMC04ZmNhLWI2MGYyNTA3YWRlZX0AAAAA",
+ "docIdentifier": 9
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738368438,
+ "docshellUUID": "{7266f212-5701-4962-88f6-daf21b0cd491}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2Q3OTc4YmIyLWM0ODgtNGY4My1iNzg4LWQwYzAwMTM4YmYxZX0AAAAA",
+ "docIdentifier": 10
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738368439,
+ "docshellUUID": "{76a8f95b-bf8b-4ec5-b161-8ba52f6afae2}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2RhMzJjODNlLTUyYjYtNGYyNi1hOTE3LTY0YWY3NTg0YjA0OH0AAAAA",
+ "docIdentifier": 11
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451778269,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738368641,
+ "docshellUUID": "{b37faa84-49c2-486a-bd8e-f7feed76df75}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezNkZjRjZTc2LTIxZjgtNDM3OS04ZjI1LTA1Mjg5ZTNjYTllZX0AAAAA",
+ "docIdentifier": 7,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738368642,
+ "docshellUUID": "{b37faa84-49c2-486a-bd8e-f7feed76df75}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2UzMDNiOGQxLWIzMjAtNDgwZC1hMzY2LTU0YTUzYzM0NWI2NH0AAAAA",
+ "docIdentifier": 8,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738368643,
+ "docshellUUID": "{797ed9aa-9c8d-4540-90a1-21a221af9baa}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezNkYTRlMDg1LTc1NzAtNGFkYi05YzJmLTJmNmNjODY1MTY5M30AAAAA",
+ "docIdentifier": 9
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738368644,
+ "docshellUUID": "{825230d4-e859-444c-8661-b7e2aa63dc33}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezIwZmE3MDdkLWQxMzItNDg3MS04MGY2LTMzOGE0NTM3ZjkwZn0AAAAA",
+ "docIdentifier": 10
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738368645,
+ "docshellUUID": "{16b2e3e5-fcf0-45f2-9df2-7b167c44a22e}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezI2OTBiZDU2LTIxMWUtNDdhOC05NTk2LTUyYTFjNzNmYzNjOX0AAAAA",
+ "docIdentifier": 11
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451758813,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738368742,
+ "docshellUUID": "{3b3d275b-0b9d-486b-96d8-9e1fb8e7c53f}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezMyYjRlMzBiLTE1NGEtNGY3OC1iNjA5LTY3ZDE2MjYwZDFjOH0AAAAA",
+ "docIdentifier": 9,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738368743,
+ "docshellUUID": "{3b3d275b-0b9d-486b-96d8-9e1fb8e7c53f}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2U1MDUwNGJhLWNiYTQtNDU2NC1hN2RiLTA5ZTRjNDAxNTUzNn0AAAAA",
+ "docIdentifier": 10,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738368744,
+ "docshellUUID": "{1009278f-9c58-4c63-ac7e-e239c816fa69}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2JmMzA4NTI2LTEwNWItNDUyYy05Yjc0LWU0OTQ0MjkwMmE1YX0AAAAA",
+ "docIdentifier": 11
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738368745,
+ "docshellUUID": "{32225ac0-0b7c-4069-b2ca-78b179fd0839}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezg0MTVhZGEyLWJkZTAtNDc2Yi04ZjFhLWJkY2I4ZDQ3OGZjZH0AAAAA",
+ "docIdentifier": 12
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738368746,
+ "docshellUUID": "{470c5de2-944c-4cb2-ac46-e33322567876}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2IxN2YxODdjLTgxN2QtNDY4Ny05ZGUwLTI0MmIzMDYwYmI0Zn0AAAAA",
+ "docIdentifier": 13
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451758927,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738368854,
+ "docshellUUID": "{6474e5ef-b095-4245-b981-5e62738c20a3}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2EwOTEzZWRkLTQ2N2QtNDE4MC05Y2E1LTJmMTg5MDllZDQ0Nn0AAAAA",
+ "docIdentifier": 3,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738368855,
+ "docshellUUID": "{6474e5ef-b095-4245-b981-5e62738c20a3}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2VhMDYwYjAyLTI5MmMtNGUzOS04YTAwLTQzODIwNTg0OTYwNn0AAAAA",
+ "docIdentifier": 4,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738368856,
+ "docshellUUID": "{878ab3bc-a999-43c3-99dc-b9434fe13501}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2JhMWQ0YzZmLTIwYWEtNDE1Ni1iNjRkLTZhYzIyZDg4OGM1M30AAAAA",
+ "docIdentifier": 5
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738368857,
+ "docshellUUID": "{60c88f70-13c3-4a9d-ac20-e0df112ccd50}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2VlMzVjNjhlLTVlNmEtNGJmMS04NTBlLWU4OTE5NDlhNzY4MX0AAAAA",
+ "docIdentifier": 6
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738368858,
+ "docshellUUID": "{964d9c55-7ca5-476b-838e-7a9896e8fe70}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezUyNTA0MDk1LTg5OWMtNDRmOC04MzU4LWQ0ZTkyZTU2Y2Q0N30AAAAA",
+ "docIdentifier": 7
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451759052,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738368992,
+ "docshellUUID": "{57a6ec1d-599c-424d-a1e3-da58b927ff7c}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezJhMzlhOTZkLTAzYTctNDA0Mi04YjI5LWM0ODdhYTI4OTA5Nn0AAAAA",
+ "docIdentifier": 12,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738368993,
+ "docshellUUID": "{57a6ec1d-599c-424d-a1e3-da58b927ff7c}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezlhZDQ1ODllLTEwMDItNDE3NC1hY2RmLTU4ODY2ZTM2ZGEzZH0AAAAA",
+ "docIdentifier": 13,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738368994,
+ "docshellUUID": "{43584cab-ac21-4bd8-bc9b-cd5d22599d93}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezQxOTA5ZmUyLWMyZDAtNGE4Mi1hZDU5LWI5OGFlOTU4OGVjN30AAAAA",
+ "docIdentifier": 14
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738368995,
+ "docshellUUID": "{7266f212-5701-4962-88f6-daf21b0cd491}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezY5MzU3NWNjLWZjMDgtNDUyYS1hNDk3LWNlMzkzNjZhY2I2Zn0AAAAA",
+ "docIdentifier": 15
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738368996,
+ "docshellUUID": "{76a8f95b-bf8b-4ec5-b161-8ba52f6afae2}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezdmM2Q0ZjFhLWY2ZTgtNGE3YS04YTk1LWJmNzIyMDNhZDE3MX0AAAAA",
+ "docIdentifier": 16
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451759170,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738369095,
+ "docshellUUID": "{0a8233af-40c0-4375-88a2-891ffc3b57f1}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezlkMTQ3ZDM4LTkyNzgtNDI2Ni1hNjYzLWYzNGJlNWExMTZhY30AAAAA",
+ "docIdentifier": 12,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738369096,
+ "docshellUUID": "{0a8233af-40c0-4375-88a2-891ffc3b57f1}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2ZiNTdiOTBhLTU3NjctNGVhMS04MTAwLWZmODk2MjI0M2Q5Mn0AAAAA",
+ "docIdentifier": 13,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738369097,
+ "docshellUUID": "{797ed9aa-9c8d-4540-90a1-21a221af9baa}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2M0YzU3Y2E4LWE0M2EtNGViMi05NTdmLWEyMDQ0MGRkNWQ3M30AAAAA",
+ "docIdentifier": 14
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738369098,
+ "docshellUUID": "{825230d4-e859-444c-8661-b7e2aa63dc33}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezFiZDFhNDdhLTYzNDMtNDVlNC1iMzgwLTY2ZGY2YzVjYjFmNn0AAAAA",
+ "docIdentifier": 15
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738369099,
+ "docshellUUID": "{16b2e3e5-fcf0-45f2-9df2-7b167c44a22e}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2FmNDQ2NDgxLWVhNmQtNDdkOS1hOWQ1LTViOTEwOTk1MmYzNX0AAAAA",
+ "docIdentifier": 16
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451759293,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738369222,
+ "docshellUUID": "{f4a276aa-4265-4756-885c-030f3b497678}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezg4NmMwYTY5LTkzNGUtNDRjMi04OTE5LWZiOTUzZjFkODIxOH0AAAAA",
+ "docIdentifier": 14,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738369223,
+ "docshellUUID": "{f4a276aa-4265-4756-885c-030f3b497678}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezQ3NDBiNTkzLTAzZDUtNDMzZC1hNTk3LTk0OGVkMWYyMjM5Yn0AAAAA",
+ "docIdentifier": 15,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738369224,
+ "docshellUUID": "{1009278f-9c58-4c63-ac7e-e239c816fa69}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezU4MzExMGYxLWViNzMtNDc2Yi1hOTQyLWQ4M2Q2MDM3MTgxN30AAAAA",
+ "docIdentifier": 16
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738369225,
+ "docshellUUID": "{32225ac0-0b7c-4069-b2ca-78b179fd0839}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezc3ODBhN2E1LTM5ODYtNDc2ZC04NGZjLWRjMDVlM2FjZTMxZn0AAAAA",
+ "docIdentifier": 17
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738369226,
+ "docshellUUID": "{470c5de2-944c-4cb2-ac46-e33322567876}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2M4MDE1YjhmLThmMDAtNDZhNS1iMGQ5LTNiZjJkN2ZmYmM4NH0AAAAA",
+ "docIdentifier": 18
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451759412,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738369341,
+ "docshellUUID": "{6d454462-6ac7-43b9-99cd-bb48fb41034f}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezgyMjc4YjBiLTI5MDMtNDM3My1iZTc5LTRjYzEwMmU3NjI2NH0AAAAA",
+ "docIdentifier": 8,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738369342,
+ "docshellUUID": "{6d454462-6ac7-43b9-99cd-bb48fb41034f}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2IwMDgxYWQxLWMzNzMtNGE1Ni1iYzg1LTg1YzRlZTZjNWVlOH0AAAAA",
+ "docIdentifier": 9,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738369343,
+ "docshellUUID": "{878ab3bc-a999-43c3-99dc-b9434fe13501}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2NjZDY2Y2I0LTAwZmUtNDM2OS1hNWVjLTk2NzMzOTk0MDljYX0AAAAA",
+ "docIdentifier": 10
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738369344,
+ "docshellUUID": "{60c88f70-13c3-4a9d-ac20-e0df112ccd50}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2M5MmRlYzNkLWVlYzctNDI4ZS04ZmZhLTA4NTMxMjNmMmQxZn0AAAAA",
+ "docIdentifier": 11
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738369345,
+ "docshellUUID": "{964d9c55-7ca5-476b-838e-7a9896e8fe70}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2FhN2I2N2IzLWMzZTItNDRlZS1iMmZkLTQ4ZjdlNTRlM2NmM30AAAAA",
+ "docIdentifier": 12
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451759539,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738369464,
+ "docshellUUID": "{3c189af3-3e28-4be2-931d-503dd3f67718}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezU4ODRkNmQ5LTQ5NzEtNGQyZC1hNDFkLTkzZjY2YmMxNzEzMX0AAAAA",
+ "docIdentifier": 17,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738369465,
+ "docshellUUID": "{3c189af3-3e28-4be2-931d-503dd3f67718}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2M0ZmFmNzE4LTM1ZjItNGMyZC1hNzY3LTViNjZmZDA3YTY5NX0AAAAA",
+ "docIdentifier": 18,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738369466,
+ "docshellUUID": "{43584cab-ac21-4bd8-bc9b-cd5d22599d93}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezg1YmYxOGVhLTljMzctNGRhNi1iZDgzLWNmOTU5YzUxZGJlM30AAAAA",
+ "docIdentifier": 19
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738369467,
+ "docshellUUID": "{7266f212-5701-4962-88f6-daf21b0cd491}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezJjNzUzODhkLWYxYWYtNDMxMi04NmQzLWM5OTI5ZTU4ZGI1Zn0AAAAA",
+ "docIdentifier": 20
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738369468,
+ "docshellUUID": "{76a8f95b-bf8b-4ec5-b161-8ba52f6afae2}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezI4Mjg1MWVjLTYzYjgtNGYzOC1hZGY0LTFmNzM0OWI2ODExOH0AAAAA",
+ "docIdentifier": 21
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451759676,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738369602,
+ "docshellUUID": "{5184ca7e-0d81-4034-8162-e077d1e7eca1}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2QzNTA4YzI4LWI3Y2YtNGZhNi04NWMyLTNkYTEwY2JhY2E1YX0AAAAA",
+ "docIdentifier": 17,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738369603,
+ "docshellUUID": "{5184ca7e-0d81-4034-8162-e077d1e7eca1}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2ZjODFmNTAyLTI0ZmMtNDIzMy1hMGYwLTZhNGE5ZTAwMWVkMn0AAAAA",
+ "docIdentifier": 18,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738369604,
+ "docshellUUID": "{797ed9aa-9c8d-4540-90a1-21a221af9baa}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezU2ODQ5ZThlLWYyZTktNDhjOS04Nzg0LTBjZjZlNmYxNDdjYn0AAAAA",
+ "docIdentifier": 19
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738369605,
+ "docshellUUID": "{825230d4-e859-444c-8661-b7e2aa63dc33}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezkwYTM1NzUxLTdhZjctNDE0YS04MjcwLTIzNWU2ZTNkZWYyY30AAAAA",
+ "docIdentifier": 20
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738369606,
+ "docshellUUID": "{16b2e3e5-fcf0-45f2-9df2-7b167c44a22e}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2VkMDVkNzYwLTU2MWYtNDI2Ni04YmEzLWQ3ZGViYzBjOWFkMn0AAAAA",
+ "docIdentifier": 21
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451759821,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738369747,
+ "docshellUUID": "{5c261eef-7de0-4495-b85c-b62a58bd8378}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezMyZWMwZjNhLWIxMTUtNDgyNi05MzkzLWNiYmNlNTg1NmQxZX0AAAAA",
+ "docIdentifier": 19,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738369748,
+ "docshellUUID": "{5c261eef-7de0-4495-b85c-b62a58bd8378}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2U0NGM4ZDQ1LTNkMDEtNGNhYS1hNWU0LTA5ZGM3NjVlMjMwOH0AAAAA",
+ "docIdentifier": 20,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738369749,
+ "docshellUUID": "{1009278f-9c58-4c63-ac7e-e239c816fa69}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezZlZjlkNjA3LTQ0OGUtNDZkMy04MTlmLTAyZDcyMzA1OGM3N30AAAAA",
+ "docIdentifier": 21
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738369750,
+ "docshellUUID": "{32225ac0-0b7c-4069-b2ca-78b179fd0839}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2Y2YjE2N2VlLTExZjktNDEwYi1iYjk5LWFkMDk1ZWYzMGZmYn0AAAAA",
+ "docIdentifier": 22
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738369751,
+ "docshellUUID": "{470c5de2-944c-4cb2-ac46-e33322567876}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezNlZTViMDlkLTY5OWUtNDM2Ny1hZDg4LWNjNDY2MGZiYWRmNH0AAAAA",
+ "docIdentifier": 23
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451759955,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738369884,
+ "docshellUUID": "{9d07d778-69b6-4be4-a306-4a9797bfbcf6}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezJlZWUyOTJlLWQ4ZmMtNDFlYS1hYWE0LTdmMjJhYTZhMTMwNH0AAAAA",
+ "docIdentifier": 13,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738369885,
+ "docshellUUID": "{9d07d778-69b6-4be4-a306-4a9797bfbcf6}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezllN2JmYzgyLWQ1YTktNDcyNC1iNjliLWJhMDJiOTJjZTNhMX0AAAAA",
+ "docIdentifier": 14,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738369886,
+ "docshellUUID": "{878ab3bc-a999-43c3-99dc-b9434fe13501}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2ViN2IzZjc0LTlhNjAtNGY2My05NGMwLWY3YmJmZTQ0ZmNkM30AAAAA",
+ "docIdentifier": 15
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738369887,
+ "docshellUUID": "{60c88f70-13c3-4a9d-ac20-e0df112ccd50}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezJkMzg3YTZjLTEyNmQtNGZiYi1hM2I1LWIzMWUzZmExY2JhYX0AAAAA",
+ "docIdentifier": 16
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738369888,
+ "docshellUUID": "{964d9c55-7ca5-476b-838e-7a9896e8fe70}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezQ4YzFhYzk1LTU1MjAtNDViZi05MGMxLWNjOWNmMWNjNzJlN30AAAAA",
+ "docIdentifier": 17
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451760099,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738370024,
+ "docshellUUID": "{b9d6d22a-2893-4eea-9a3d-951d8c5dbb88}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezJlNmRlZTczLTFmNjktNDc2MS1hMTkwLTAxMTA4YWNjN2RmOX0AAAAA",
+ "docIdentifier": 22,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738370025,
+ "docshellUUID": "{b9d6d22a-2893-4eea-9a3d-951d8c5dbb88}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2MxYWYzNGVjLTcxYmItNGE3MC1hNGExLTdmNDY5OTI5MzFmMn0AAAAA",
+ "docIdentifier": 23,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738370026,
+ "docshellUUID": "{43584cab-ac21-4bd8-bc9b-cd5d22599d93}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezBlM2MzZDE0LTYyMWUtNDMxNS1iOTMxLTg2NGZhNWQwYTA3Zn0AAAAA",
+ "docIdentifier": 24
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738370027,
+ "docshellUUID": "{7266f212-5701-4962-88f6-daf21b0cd491}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2ZiMTYyYTdhLWM4OTItNDYxNC04YjdjLTYyMDUzYzE0Y2JlNn0AAAAA",
+ "docIdentifier": 25
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738370028,
+ "docshellUUID": "{76a8f95b-bf8b-4ec5-b161-8ba52f6afae2}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezA1YWZmODBiLTgzYWQtNDY1NC1hMTEzLTNkM2U3ZTE1NTY5Nn0AAAAA",
+ "docIdentifier": 26
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451760461,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738370379,
+ "docshellUUID": "{fd98e6aa-7638-4918-9cf4-079b6d5cd486}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezE5ZWE1MjEwLTYwOGUtNGJmNi05OTIzLTdlZDAxNmMxZjkyYX0AAAAA",
+ "docIdentifier": 22,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738370380,
+ "docshellUUID": "{fd98e6aa-7638-4918-9cf4-079b6d5cd486}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2M1NDI4MGRkLWI2NGMtNGE2ZS04MDNmLTRmYzIyMDJlYmJmNH0AAAAA",
+ "docIdentifier": 23,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738370381,
+ "docshellUUID": "{797ed9aa-9c8d-4540-90a1-21a221af9baa}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2M3OWE1NDNhLTI2NjUtNGI5MC1iNDVjLTJlNGYxMGRkZWEwYn0AAAAA",
+ "docIdentifier": 24
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738370382,
+ "docshellUUID": "{825230d4-e859-444c-8661-b7e2aa63dc33}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2UwZDZlYTJiLTUwODUtNDczMC1iY2Y3LWRlZDRjOTU3ZDI0YX0AAAAA",
+ "docIdentifier": 25
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738370383,
+ "docshellUUID": "{16b2e3e5-fcf0-45f2-9df2-7b167c44a22e}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezM3YTczMDMwLTVmOTAtNGM4NC1hODM3LWI1NTMxOTRmNGU0NH0AAAAA",
+ "docIdentifier": 26
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451760691,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738370626,
+ "docshellUUID": "{ec1a7075-01ad-4eed-9480-0116865b0b4b}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezIyMDNmMWQzLTJiYTEtNGFmNS1hNjU3LTc4MWExZTdiNWQyZX0AAAAA",
+ "docIdentifier": 24,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738370627,
+ "docshellUUID": "{ec1a7075-01ad-4eed-9480-0116865b0b4b}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezI2ODdkNTA3LWExNTYtNGRkZS04ODJhLTk1OTgxZTM0MzRiMX0AAAAA",
+ "docIdentifier": 25,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738370628,
+ "docshellUUID": "{1009278f-9c58-4c63-ac7e-e239c816fa69}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezdiMjhjMmE0LTM5NzMtNDRhZC1hZDdkLTMzMzJhZGEyZjVhN30AAAAA",
+ "docIdentifier": 26
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738370629,
+ "docshellUUID": "{32225ac0-0b7c-4069-b2ca-78b179fd0839}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2Q1OGJlYTUzLWY0YzYtNDkxNi05NzE2LTRmZTdlYmQ5NDgwNX0AAAAA",
+ "docIdentifier": 27
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738370630,
+ "docshellUUID": "{470c5de2-944c-4cb2-ac46-e33322567876}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezRiNGUwZjVmLTAxY2YtNDY2Zi1iM2NiLWRiYTUzNTQ1ODliYn0AAAAA",
+ "docIdentifier": 28
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451760923,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738370848,
+ "docshellUUID": "{81af231e-71de-4d2e-a2d9-e2d23692906d}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezY2ODY4ODcwLTMyMGMtNGFlZS1hYzM2LTRhNWRhNWQ4ZmNjZn0AAAAA",
+ "docIdentifier": 18,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738370849,
+ "docshellUUID": "{81af231e-71de-4d2e-a2d9-e2d23692906d}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2E1Yjc4MWJmLTQ3ZjgtNDFkMi04ODhmLTJiMTEwMjE2ZTkxZH0AAAAA",
+ "docIdentifier": 19,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738370850,
+ "docshellUUID": "{878ab3bc-a999-43c3-99dc-b9434fe13501}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezc3NmQwMjQwLWMzNWQtNDQ0Zi05NTQ2LTQ1NDZlZjJmNzFjZH0AAAAA",
+ "docIdentifier": 20
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738370851,
+ "docshellUUID": "{60c88f70-13c3-4a9d-ac20-e0df112ccd50}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezY3NThlYzYyLWVlZDItNDA2OC1hMTAwLTcyZGQwZWIyNGVkZH0AAAAA",
+ "docIdentifier": 21
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738370852,
+ "docshellUUID": "{964d9c55-7ca5-476b-838e-7a9896e8fe70}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezIyZjI4OWQ0LTVjNzAtNDVkNi1iYzc0LWUwNTllYjJjNmQxMn0AAAAA",
+ "docIdentifier": 22
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451761140,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738371089,
+ "docshellUUID": "{cf203ed9-6ba7-4358-91ee-44eb4b0a7194}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezM2Y2JlNzNiLTBmMTctNDE1MS05NjQ1LTk1NDZiYTZlZTQyZX0AAAAA",
+ "docIdentifier": 27,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738371090,
+ "docshellUUID": "{cf203ed9-6ba7-4358-91ee-44eb4b0a7194}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezhjOTU0OGQwLTVkMzItNDhlZC05NGNhLTM2Njc2ZjFlZWIwMH0AAAAA",
+ "docIdentifier": 28,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738371091,
+ "docshellUUID": "{43584cab-ac21-4bd8-bc9b-cd5d22599d93}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2ZhMDJkZWQ0LWJmNWItNDE1Ny1iNTAxLTdlYTQzZDA5M2MwOX0AAAAA",
+ "docIdentifier": 29
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738371092,
+ "docshellUUID": "{7266f212-5701-4962-88f6-daf21b0cd491}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2RjOWI5YTg0LTAxZjYtNGY5NC05YWQ1LTVlZmVkM2I3ZDkwZH0AAAAA",
+ "docIdentifier": 30
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738371093,
+ "docshellUUID": "{76a8f95b-bf8b-4ec5-b161-8ba52f6afae2}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezVlZDIyZDcyLThlNjAtNDE1YS1iZTY2LWZlYzY4MjlkYTNkMX0AAAAA",
+ "docIdentifier": 31
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451761393,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738371321,
+ "docshellUUID": "{2a9324ce-ce5c-4911-b6ff-dbcf213ba3da}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2Q2OWZjN2YwLTI3YjItNGYzNy1hMjQ1LWI5MGU0NTBlYmExNX0AAAAA",
+ "docIdentifier": 27,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738371322,
+ "docshellUUID": "{2a9324ce-ce5c-4911-b6ff-dbcf213ba3da}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezI4ODZjOWU2LTJmM2YtNDdjMy05NWIyLTdhNGE0NDkyM2RhZn0AAAAA",
+ "docIdentifier": 28,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738371323,
+ "docshellUUID": "{797ed9aa-9c8d-4540-90a1-21a221af9baa}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2JhMWMxYWU2LWEwMzUtNGFjZC05YWJlLWZlOTU1MDhmN2RhZn0AAAAA",
+ "docIdentifier": 29
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738371324,
+ "docshellUUID": "{825230d4-e859-444c-8661-b7e2aa63dc33}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezE4MDc1NDk1LWMwN2MtNGI1Zi1iMjk2LTA2NDdmMTgxYjkwZX0AAAAA",
+ "docIdentifier": 30
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738371325,
+ "docshellUUID": "{16b2e3e5-fcf0-45f2-9df2-7b167c44a22e}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2E0MjlmM2I5LTNhZjgtNGQwNi1iNTJlLTRjNTc2YTcwYTRjYn0AAAAA",
+ "docIdentifier": 31
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451761608,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738371537,
+ "docshellUUID": "{072c99ea-aefa-4c3e-9401-03441d499629}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezVmNDNhMzFhLTQzZTctNDAwYy05Y2NlLTY0Yjk2ZTIwYmIwZn0AAAAA",
+ "docIdentifier": 29,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738371538,
+ "docshellUUID": "{072c99ea-aefa-4c3e-9401-03441d499629}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezc5ZDZkNWUxLTRkOGUtNDQxOC1hMTVjLWNiMjNhNzg3OWMwNX0AAAAA",
+ "docIdentifier": 30,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738371539,
+ "docshellUUID": "{1009278f-9c58-4c63-ac7e-e239c816fa69}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezE1MzhkYTY5LWRjNDAtNDg4OC04NmFkLWM1M2UzZjJiNDY0ZX0AAAAA",
+ "docIdentifier": 31
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738371540,
+ "docshellUUID": "{32225ac0-0b7c-4069-b2ca-78b179fd0839}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2QyNjdjMGE0LWNmZWItNGJmZi1iMGEyLWI1M2ZhMzQ4NmViMH0AAAAA",
+ "docIdentifier": 32
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738371541,
+ "docshellUUID": "{470c5de2-944c-4cb2-ac46-e33322567876}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezllYWRmM2JkLTZhMWItNGY2OC04MzU2LThhMDAwZTM0YzU5Nn0AAAAA",
+ "docIdentifier": 33
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451761873,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738371800,
+ "docshellUUID": "{c971066a-25e0-4293-94d3-b6d2c95203a1}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2NiNDhlYmM5LTZiYWItNDU0NS05NWQzLTAyMjlkZGU1MDA4N30AAAAA",
+ "docIdentifier": 23,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738371801,
+ "docshellUUID": "{c971066a-25e0-4293-94d3-b6d2c95203a1}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezBkNWExOTZmLTE1YzQtNDAyNy04MTVjLWIxOTMwMDNmZjJmOH0AAAAA",
+ "docIdentifier": 24,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738371802,
+ "docshellUUID": "{878ab3bc-a999-43c3-99dc-b9434fe13501}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2I4ZTZmNjI5LTdmNmMtNDExNy04ZDE2LWVhYzBhZWFhODBkM30AAAAA",
+ "docIdentifier": 25
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738371803,
+ "docshellUUID": "{60c88f70-13c3-4a9d-ac20-e0df112ccd50}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2NmNjdkMjZhLTY3MjgtNDRmYS05Yjg2LTliMzQ4NGI5MjFmNH0AAAAA",
+ "docIdentifier": 26
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738371804,
+ "docshellUUID": "{964d9c55-7ca5-476b-838e-7a9896e8fe70}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2RiMDRiNzZjLWZmMGUtNDY5Zi04NWVlLWFmY2FmNTk4NWJkMH0AAAAA",
+ "docIdentifier": 27
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451762140,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738372065,
+ "docshellUUID": "{f70ebb92-f590-43d0-9626-2be9cceff3a3}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezhjZTczNWQzLWFiOTItNDdhYS1iYTEzLTE0YjlmMmZhYTQyYn0AAAAA",
+ "docIdentifier": 32,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738372066,
+ "docshellUUID": "{f70ebb92-f590-43d0-9626-2be9cceff3a3}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezE5NDEwYzU2LWFmNWEtNDdmMS1iZTZjLTY3MTQ4ZWUyMjdlOH0AAAAA",
+ "docIdentifier": 33,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738372067,
+ "docshellUUID": "{43584cab-ac21-4bd8-bc9b-cd5d22599d93}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2JmOWE1YzIwLWY5YjItNDUxMi05YjQ1LWM5ZDVhNzI2ZTRjNX0AAAAA",
+ "docIdentifier": 34
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738372068,
+ "docshellUUID": "{7266f212-5701-4962-88f6-daf21b0cd491}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezgzNmIyY2RkLTIzNDctNGMwYS1iNjZjLTIxZjYyZjBjYjk3Nn0AAAAA",
+ "docIdentifier": 35
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738372069,
+ "docshellUUID": "{76a8f95b-bf8b-4ec5-b161-8ba52f6afae2}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezdlNzUwNWM3LTdmMmMtNDMxNi1hMzYyLTA3YmFjZTA4MDQ0M30AAAAA",
+ "docIdentifier": 36
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451762409,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738372338,
+ "docshellUUID": "{71ddba67-dda4-4c76-a0c6-f5cf08ab2467}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezVjMTUwMjVlLWY0MDYtNGQ3MS1hNDJlLWMyOTJhMzRmNjBmMn0AAAAA",
+ "docIdentifier": 32,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738372339,
+ "docshellUUID": "{71ddba67-dda4-4c76-a0c6-f5cf08ab2467}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2QxNjM3MzllLTIyMjItNDFlYy05Mzk0LWUwMGQwZWJmNjgyMn0AAAAA",
+ "docIdentifier": 33,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738372340,
+ "docshellUUID": "{797ed9aa-9c8d-4540-90a1-21a221af9baa}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2EwZGM4M2MyLTcxYjYtNDc0My04YzBmLTc4ZWIzZjNmZGQxY30AAAAA",
+ "docIdentifier": 34
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738372341,
+ "docshellUUID": "{825230d4-e859-444c-8661-b7e2aa63dc33}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezNkZDBiYzM4LTI4ZTgtNDk1ZC04YmQyLWE0OTNiMjJkMTU2NX0AAAAA",
+ "docIdentifier": 35
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738372342,
+ "docshellUUID": "{16b2e3e5-fcf0-45f2-9df2-7b167c44a22e}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezhlN2IzODc1LTViOTEtNDk0MS1iMGQ5LTZhYjE3NjBjMzdmN30AAAAA",
+ "docIdentifier": 36
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451762641,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738372570,
+ "docshellUUID": "{ef3db746-9c3d-4cab-a845-53ae91f3db4e}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezE4MDEzODA3LWZjYmMtNGQ2NC04NjJjLTk0MTAwMzAzYWQ4M30AAAAA",
+ "docIdentifier": 34,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738372571,
+ "docshellUUID": "{ef3db746-9c3d-4cab-a845-53ae91f3db4e}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezUyZTIyYzQ3LWU5YzktNGJmNC1iYjNiLWQ2NGM4MDlkMDBjZn0AAAAA",
+ "docIdentifier": 35,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738372572,
+ "docshellUUID": "{1009278f-9c58-4c63-ac7e-e239c816fa69}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezMyNzQ1ZDY0LThlMDctNDcxOS1iYzJjLTljOTE3ZjQ2NmU1Y30AAAAA",
+ "docIdentifier": 36
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738372573,
+ "docshellUUID": "{32225ac0-0b7c-4069-b2ca-78b179fd0839}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2E0ZTM1ODNmLWU3ODYtNGVlNS05ZDQxLTUyZDE3NWIzYzliM30AAAAA",
+ "docIdentifier": 37
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738372574,
+ "docshellUUID": "{470c5de2-944c-4cb2-ac46-e33322567876}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezk0OWIzZmQ1LTgzMTUtNDU3OC1hOGI4LTE0ZWZhMGM4N2Q5Yn0AAAAA",
+ "docIdentifier": 38
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451762832,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738372758,
+ "docshellUUID": "{075f5658-cb05-48bb-ba52-ebba8ea0ff40}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezc2ZTdiMTI2LWIyMmUtNDdjNS05ZWY0LTNmODNjODBjMGFmN30AAAAA",
+ "docIdentifier": 28,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738372759,
+ "docshellUUID": "{075f5658-cb05-48bb-ba52-ebba8ea0ff40}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezkyZWM1NjUzLTZkNTAtNDU3Ny05MmI0LTBkN2RlMmJkZjE2ZH0AAAAA",
+ "docIdentifier": 29,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738372760,
+ "docshellUUID": "{878ab3bc-a999-43c3-99dc-b9434fe13501}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2I4YzkxNzcyLTg5OTMtNDhkMS1iYmI3LTY5YjdjYjNlYjRiOX0AAAAA",
+ "docIdentifier": 30
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738372761,
+ "docshellUUID": "{60c88f70-13c3-4a9d-ac20-e0df112ccd50}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2NiMDhlZTk5LWYyNjktNGNmOS04MTgzLTc4MjU4NjNkYWI4Yn0AAAAA",
+ "docIdentifier": 31
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738372762,
+ "docshellUUID": "{964d9c55-7ca5-476b-838e-7a9896e8fe70}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezgxNDFhMmZiLTAwNzMtNDI2NS04NDZkLTI1NjI5NzFhZjEyNH0AAAAA",
+ "docIdentifier": 32
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451763098,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738373024,
+ "docshellUUID": "{b9616028-d518-4053-aa33-6cd7253acb82}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezliZGY4ZTc3LTA3ZjAtNGQyNi1iNWU2LWRlZjE2ZWRkYTU2M30AAAAA",
+ "docIdentifier": 37,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738373025,
+ "docshellUUID": "{b9616028-d518-4053-aa33-6cd7253acb82}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezAzYTg4MjBhLTU2M2QtNGMxOS1hOTM4LTg0NDQ3NTY5YzgzN30AAAAA",
+ "docIdentifier": 38,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738373026,
+ "docshellUUID": "{43584cab-ac21-4bd8-bc9b-cd5d22599d93}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezUwZGE0Y2RlLTI0NDUtNGVhNy04ZTFjLTM4MDQ1NTgzNjM3Yn0AAAAA",
+ "docIdentifier": 39
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738373027,
+ "docshellUUID": "{7266f212-5701-4962-88f6-daf21b0cd491}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezI5OTgwZjM2LTZhNGEtNDQ3Ny1iODA5LWZmMDA1MWUxNWJhNn0AAAAA",
+ "docIdentifier": 40
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738373028,
+ "docshellUUID": "{76a8f95b-bf8b-4ec5-b161-8ba52f6afae2}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2ZhMzUyOTAyLWYxNTQtNGY3ZS1iZmU4LTkyYTlhNGQxYTkxNn0AAAAA",
+ "docIdentifier": 41
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451763574,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738373506,
+ "docshellUUID": "{3fdf58fd-e8dd-47f3-aa5b-22eb11827ca5}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2M3YzY5MDdmLTdmNWYtNDQxOC05MWZjLTQyNjUxM2ViYTA0Mn0AAAAA",
+ "docIdentifier": 37,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738373507,
+ "docshellUUID": "{3fdf58fd-e8dd-47f3-aa5b-22eb11827ca5}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezU2ZTJjNjdjLTZhOGUtNDFmZC04OTljLThlYTI2MDZjZmUzM30AAAAA",
+ "docIdentifier": 38,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738373508,
+ "docshellUUID": "{797ed9aa-9c8d-4540-90a1-21a221af9baa}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezQwYjI3YmYyLWM1NDQtNDkwOC1hZTQwLTEyZWY5NmNjMzBiZH0AAAAA",
+ "docIdentifier": 39
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738373509,
+ "docshellUUID": "{825230d4-e859-444c-8661-b7e2aa63dc33}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2ExNDNjOTk1LTFlNDQtNDM3MC04ZDI5LTVlODFhMDk0YjY3ZX0AAAAA",
+ "docIdentifier": 40
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738373510,
+ "docshellUUID": "{16b2e3e5-fcf0-45f2-9df2-7b167c44a22e}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezQzM2I3NGNmLTBlZWEtNDM0Yy1iNmZiLTQ1ZWQxYWQ3ODIxYn0AAAAA",
+ "docIdentifier": 41
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451764116,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738374045,
+ "docshellUUID": "{2623cd60-a7e9-43de-be45-ac41673b7953}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezI1NGFhZTliLTk5ZDEtNDQwYy04OWNhLTU0OTJlNDkzZThlNn0AAAAA",
+ "docIdentifier": 39,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738374046,
+ "docshellUUID": "{2623cd60-a7e9-43de-be45-ac41673b7953}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezU4Njk4ZmNkLTY3MmYtNGRlOC04Y2VhLThiYjJkNTZjZmYwNn0AAAAA",
+ "docIdentifier": 40,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738374047,
+ "docshellUUID": "{1009278f-9c58-4c63-ac7e-e239c816fa69}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2RiYmExZjVlLWIxZTktNGQwZS05MjhkLWE3ZjQ5YmFkMGMxYX0AAAAA",
+ "docIdentifier": 41
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738374048,
+ "docshellUUID": "{32225ac0-0b7c-4069-b2ca-78b179fd0839}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezk2ZjNjMGEzLTdkZmUtNGM4Ni04MGRmLWMyOWE2ZjYzZWQzN30AAAAA",
+ "docIdentifier": 42
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738374049,
+ "docshellUUID": "{470c5de2-944c-4cb2-ac46-e33322567876}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezliYmIwMDgzLTI0OGYtNGZlMC1iMjYzLWI5ZWZhZjk4YTZmYX0AAAAA",
+ "docIdentifier": 43
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451764619,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738374550,
+ "docshellUUID": "{7bfe85f3-4edf-4826-b5ec-a2fffe5774ac}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezEzYWU2NTc4LTk2ZTEtNDgwNS1hNGY5LTA0ZDlhZWQ2NmVjMn0AAAAA",
+ "docIdentifier": 33,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738374551,
+ "docshellUUID": "{7bfe85f3-4edf-4826-b5ec-a2fffe5774ac}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2FjNWZiMDJiLTZjODktNGYwMi04ZTYxLWJkMmU5ZjRhZmQzZX0AAAAA",
+ "docIdentifier": 34,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738374552,
+ "docshellUUID": "{878ab3bc-a999-43c3-99dc-b9434fe13501}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezZhYzMzYTUwLTEyZDctNGNlMy05MTZhLTNlZTZjNGMzMzZjMn0AAAAA",
+ "docIdentifier": 35
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738374553,
+ "docshellUUID": "{60c88f70-13c3-4a9d-ac20-e0df112ccd50}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezc5NGYzMzY1LTFkNGUtNDI5NC04N2RiLTA3MDc1NGUxYjg1Mn0AAAAA",
+ "docIdentifier": 36
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738374554,
+ "docshellUUID": "{964d9c55-7ca5-476b-838e-7a9896e8fe70}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2RiMzMzNDRmLWI0YjktNDQ4OC04OWJlLTViMTU4ZjRiMTE5YX0AAAAA",
+ "docIdentifier": 37
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451765104,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738375035,
+ "docshellUUID": "{75a2ec1a-ded9-4267-9591-e0db7ed8dfb8}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezJiOTM1ZmE2LTJhMmQtNGM4Yi04ZjE4LTNhMjlhOWM3NTE1Nn0AAAAA",
+ "docIdentifier": 42,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738375036,
+ "docshellUUID": "{75a2ec1a-ded9-4267-9591-e0db7ed8dfb8}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezQ2M2E1MzhjLTdlMWItNDZjNy1hNzBjLTJlNmYwNjY1MDVmOX0AAAAA",
+ "docIdentifier": 43,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738375037,
+ "docshellUUID": "{43584cab-ac21-4bd8-bc9b-cd5d22599d93}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezVlMGM0ZGQwLWIwMGUtNDkyMi1hMWI4LWZmZWI5ZTVjYTJlYX0AAAAA",
+ "docIdentifier": 44
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738375038,
+ "docshellUUID": "{7266f212-5701-4962-88f6-daf21b0cd491}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezFjMTI3YmRlLTNmZDMtNDhjYy04MTdhLWQxMTcwMWJjZjIzZn0AAAAA",
+ "docIdentifier": 45
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738375039,
+ "docshellUUID": "{76a8f95b-bf8b-4ec5-b161-8ba52f6afae2}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezllZmNmZjk0LTE2ZjgtNDllOS1hZTJmLTJmZjdlZWRkOWQ0OH0AAAAA",
+ "docIdentifier": 46
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451765517,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738375446,
+ "docshellUUID": "{774adad7-1957-4b24-b947-de17a0b59ac4}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezllMWE2OTgwLWRjYzktNDI3Ni05NTNiLTIyYTZhZmIyN2EwNn0AAAAA",
+ "docIdentifier": 42,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738375447,
+ "docshellUUID": "{774adad7-1957-4b24-b947-de17a0b59ac4}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2I3ZTA4NThjLTk1NDYtNDU3Ni1iNGVmLTU5YWMwYjE0OTdjNX0AAAAA",
+ "docIdentifier": 43,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738375448,
+ "docshellUUID": "{797ed9aa-9c8d-4540-90a1-21a221af9baa}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezBiYWMyZTAxLTdlODctNDQyNS05MmIzLTdkOTJmOGUzMTA5ZX0AAAAA",
+ "docIdentifier": 44
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738375449,
+ "docshellUUID": "{825230d4-e859-444c-8661-b7e2aa63dc33}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezY4NGU1YjQ3LTdlZjctNGZlZi1hMzUyLTkwMjNmYjA1ZTc4N30AAAAA",
+ "docIdentifier": 45
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738375450,
+ "docshellUUID": "{16b2e3e5-fcf0-45f2-9df2-7b167c44a22e}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezUzOTM3YWZlLWZmYTQtNDhlNS05ZTE5LTkwZDliMmJjZDc1NX0AAAAA",
+ "docIdentifier": 46
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451765943,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738375875,
+ "docshellUUID": "{5c786142-423f-4b3e-a6c8-9df83c02ddad}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2VhZGQ3NzcwLWRjNjEtNDJjMy1iN2IzLTk1MmRlNGM3NGQ2NH0AAAAA",
+ "docIdentifier": 44,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738375876,
+ "docshellUUID": "{5c786142-423f-4b3e-a6c8-9df83c02ddad}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2UzMDE1MDBjLWMyNDYtNGEzMi05ODQ4LTM2YzIzZTBlYTExNH0AAAAA",
+ "docIdentifier": 45,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738375877,
+ "docshellUUID": "{1009278f-9c58-4c63-ac7e-e239c816fa69}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2NiMjJkNDUwLWU5OGEtNDYxMC1iZDg0LTQ5ZGQ2NWE2NGQzNX0AAAAA",
+ "docIdentifier": 46
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738375878,
+ "docshellUUID": "{32225ac0-0b7c-4069-b2ca-78b179fd0839}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2E3ZTYzZDcxLWRhMGUtNDc5ZC1hY2JiLTcwMzEyOGMyMGNjZH0AAAAA",
+ "docIdentifier": 47
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738375879,
+ "docshellUUID": "{470c5de2-944c-4cb2-ac46-e33322567876}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezU3NTlhNjQwLWQzMjQtNDJmYy1hNzg1LWRlMTljZWM0NTEwY30AAAAA",
+ "docIdentifier": 48
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451766692,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738376624,
+ "docshellUUID": "{ac054f42-1fcf-464e-bad7-c1cc87d726a2}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2Q4NThkMzY1LWY1YzYtNGRiNS1iYjc5LTkxZDFkMDFhYWI3N30AAAAA",
+ "docIdentifier": 38,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738376625,
+ "docshellUUID": "{ac054f42-1fcf-464e-bad7-c1cc87d726a2}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezI0ZTMwNThjLWM5ZDctNDY5NS05MmNiLWRmZWM4MDg1YmUxMH0AAAAA",
+ "docIdentifier": 39,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738376626,
+ "docshellUUID": "{878ab3bc-a999-43c3-99dc-b9434fe13501}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezg0MWRkZDk2LTg2NzAtNDUyOC04NDNlLTM5Mzk5OTZmMzRjMH0AAAAA",
+ "docIdentifier": 40
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738376627,
+ "docshellUUID": "{60c88f70-13c3-4a9d-ac20-e0df112ccd50}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezgzMjUzMTJkLWZmNDYtNGQ5Yi05MWM4LWY4MzBiYzQzMDQ0Y30AAAAA",
+ "docIdentifier": 41
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738376628,
+ "docshellUUID": "{964d9c55-7ca5-476b-838e-7a9896e8fe70}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezk4NjM5N2VhLWZjNDgtNDYyNy04YmUyLTQyZjBmMTBlOWNiNH0AAAAA",
+ "docIdentifier": 42
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451767314,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738377242,
+ "docshellUUID": "{ab70d2e1-0ec2-4b82-a1ad-8b3225942683}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezA4ZGI4YWRmLWJjM2ItNDkzOS1iODgzLTA2NTY5YTVkYTYxNH0AAAAA",
+ "docIdentifier": 47,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738377243,
+ "docshellUUID": "{ab70d2e1-0ec2-4b82-a1ad-8b3225942683}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezQ5MmFmOWQzLTFjNmQtNGIwMy04MDViLWI4OTQ1Yjg1OWNjZn0AAAAA",
+ "docIdentifier": 48,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738377244,
+ "docshellUUID": "{43584cab-ac21-4bd8-bc9b-cd5d22599d93}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2Q2MDI3MDI3LTJjMGEtNDM3MS1hMDA3LTZmODAxODBjN2IwYX0AAAAA",
+ "docIdentifier": 49
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738377245,
+ "docshellUUID": "{7266f212-5701-4962-88f6-daf21b0cd491}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2JmZmFiNGI0LTJiZTUtNDU4NC1iZjBjLWJkODNlOTZhN2VhY30AAAAA",
+ "docIdentifier": 50
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738377246,
+ "docshellUUID": "{76a8f95b-bf8b-4ec5-b161-8ba52f6afae2}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezk2MzM1OTg5LTY1NTctNGNjMS1hNmJmLTg5MDY2NWE0ZjdhYn0AAAAA",
+ "docIdentifier": 51
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451767882,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738377819,
+ "docshellUUID": "{e67d331a-b22e-42d1-8b09-13e138bfd5cd}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezc0NmQ5MThkLWE5OTUtNGE3My04MTkxLTgxZTkzMmZmNjE3Nn0AAAAA",
+ "docIdentifier": 47,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738377820,
+ "docshellUUID": "{e67d331a-b22e-42d1-8b09-13e138bfd5cd}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezk0ZmRiYTA0LWFiMGUtNDI5NC1iMDcxLWMwOGE1MTBhMWE0M30AAAAA",
+ "docIdentifier": 48,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738377821,
+ "docshellUUID": "{797ed9aa-9c8d-4540-90a1-21a221af9baa}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezczM2NlZWM4LTQ2MDYtNDA0OS05NzBhLTczYzAwNjhhYWRjYn0AAAAA",
+ "docIdentifier": 49
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738377822,
+ "docshellUUID": "{825230d4-e859-444c-8661-b7e2aa63dc33}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezAyYTdjYWVhLTYxNzktNDA2Ni1iZGIxLTUxNDFkMGNhZTAwYn0AAAAA",
+ "docIdentifier": 50
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738377823,
+ "docshellUUID": "{16b2e3e5-fcf0-45f2-9df2-7b167c44a22e}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezZiYjA5N2IwLTEyODUtNGUzZi1hZWU1LTE3ODkyNjRkZjZlOX0AAAAA",
+ "docIdentifier": 51
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451768368,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "http://localhost:8080/?httpsurl=twitter.com/Telegraph/status/437962536407666688/photo/1",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738378300,
+ "docshellUUID": "{8da4a49f-06b3-42d3-8b3c-ac10482438fb}",
+ "referrer": "http://localhost:8080/?url=t.co/FslmElOVwY",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2FkYTg2NTgwLWViYzYtNDExMi1iNWQwLWQzOGY0ZDExNDIxM30AAAAA",
+ "docIdentifier": 49,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738378301,
+ "docshellUUID": "{e8979a67-52ae-4d6e-8b94-8de24a2a0733}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2Q4NGRmNmRkLWFkMjktNGI5OC1hYmIzLTEzYzAzOGJjMWUzOX0AAAAA",
+ "docIdentifier": 50
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738378302,
+ "docshellUUID": "{946a54d1-68a3-41e3-9a78-60a643045e94}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezEyOGUxNTJjLTUwYTMtNDE1Ni04ZmQ5LTQ1ODM0MWJjNmYyMX0AAAAA",
+ "docIdentifier": 51
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738378303,
+ "docshellUUID": "{c2df782f-1821-48ce-a941-d9d492f5a71b}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2Y5NmRmMDU1LTNmOGYtNDkwMy1iZWMzLWZkYjg4ZTFkMjI0ZX0AAAAA",
+ "docIdentifier": 52
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451769139,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 1,
+ "storage": {
+ "http://localhost:8080": {
+ "ScribeTransport": "{\"internal_referer\":null,\"client_version\":\"macaw-swift\",\"items\":[{}],\"associations\":{\"2\":{\"association_id\":null,\"association_type\":3},\"3\":{\"association_id\":null,\"association_type\":3}},\"message\":\"//twitter.com/Telegraph/status/437962536407666688/photo/1/large\",\"event_namespace\":{\"client\":\"web\",\"page\":\"permalink\",\"section\":\"permalink\",\"element\":\"platform_photo_card\",\"action\":\"show\"},\"triggered_on\":1393256185388,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":null,\"client_version\":\"macaw-swift\",\"event_value\":0,\"event_namespace\":{\"client\":\"web\",\"page\":\"permalink\",\"section\":\"permalink\",\"component\":\"reduced_action_queue\",\"action\":\"captured\"},\"triggered_on\":1393256185472,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":null,\"client_version\":\"macaw-swift\",\"event_value\":0,\"event_namespace\":{\"client\":\"web\",\"page\":\"permalink\",\"section\":\"permalink\",\"component\":\"reduced_action_queue\",\"action\":\"ignored\"},\"triggered_on\":1393256185473,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":null,\"client_version\":\"macaw-swift\",\"event_value\":0,\"event_namespace\":{\"client\":\"web\",\"page\":\"permalink\",\"section\":\"permalink\",\"component\":\"reduced_action_queue\",\"action\":\"direct\"},\"triggered_on\":1393256185473,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":null,\"client_version\":\"macaw-swift\",\"event_value\":0,\"event_namespace\":{\"client\":\"web\",\"page\":\"permalink\",\"section\":\"permalink\",\"component\":\"reduced_action_queue\",\"action\":\"all\"},\"triggered_on\":1393256185473,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAAV2h0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vVGVsZWdyYXBoL3N0YXR1cy80Mzc5NjI1MzY0MDc2NjY2ODgvcGhvdG8vMQAAAAAAAAAEAAAABwAAAA4AAAAH/////wAAAAf/////AAAABwAAAAkAAAAVAAAAQgAAABUAAAABAAAAFQAAAAEAAAAWAAAAAAAAABb/////AAAAAP////8AAAAXAAAAQAAAABX/////AQAAAAAAAAAAAAAAAA=="
+ }, {
+ "entries": [{
+ "url": "http://localhost:8080/?httpsurl=www.google.fr/search?q=google+docs&ie=utf-8&oe=utf-8&rls=org.mozilla:en-US:unofficial&client=firefox-nightly&channel=fflb&gfe_rd=ctrl&ei=aGcLU8r5I4Hf8geZ5YHABg&gws_rd=cr",
+ "title": "google docs - Recherche Google",
+ "cacheKey": 0,
+ "ID": 3738379064,
+ "docshellUUID": "{28ed802b-12a1-4fa2-a9c6-fd7ef099435e}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezQ3NjJlNzI3LWZjMjYtNDg2MS1hNzkwLTIxMGU5ZjA5Yzk4MH0AAAAA",
+ "docIdentifier": 43,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=accounts.google.com/ServiceLogin?service=writely&passive=1209600&continue=https%3A%2F%2Fdocs.google.com%2F%3Fhl%3Dfr%26urp%3Dhttps%3A%2F%2Fwww.google.fr%2Furl%3Fsa%253Dt%2526rct%253Dj%2526q%253D%2526esrc%253Ds%2526sou%23&followup=https%3A%2F%2Fdocs.google.com%2F%3Fhl%3Dfr%26urp%3Dhttps%3A%2F%2Fwww.google.fr%2Furl%3Fsa%253Dt%2526rct%253Dj%2526q%253D%2526esrc%253Ds%2526sou&ltmpl=homepage&hl=fr",
+ "title": "Google Drive",
+ "cacheKey": 0,
+ "ID": 3738379065,
+ "docshellUUID": "{28ed802b-12a1-4fa2-a9c6-fd7ef099435e}",
+ "referrer": "http://localhost:8080/?httpsurl=docs.google.com/?hl=fr",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2Y4NGZiNTIxLTg1OTUtNGZlMS05YTZlLTdmNDVkNjNiYjhhZH0AAAAA",
+ "docIdentifier": 44,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=drive.google.com/?hl=fr&urp=http://localhost:8080/?httpsurl=www.google.fr/url?sa%3Dt%26rct%3Dj%26q%3D%26esrc%3Ds%26sou&authuser=0#my-drive",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738379066,
+ "docshellUUID": "{28ed802b-12a1-4fa2-a9c6-fd7ef099435e}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2QzMjhiOWI3LTk1NmEtNDVhMy1hNTI3LTk1MWU3MjY5MWM2MH0AAAAA",
+ "docIdentifier": 45,
+ "persist": true
+ }],
+ "lastAccessed": 1528451769873,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 3,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAAqmh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9ZHJpdmUuZ29vZ2xlLmNvbS8/aGw9ZnImdXJwPWh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9d3d3Lmdvb2dsZS5mci91cmw/c2ElM0R0JTI2cmN0JTNEaiUyNnElM0QlMjZlc3JjJTNEcyUyNnNvdSZhdXRodXNlcj0wI215LWRyaXZlAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAACVAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAACKAAAAogAAAAgBAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "http://localhost:8080/?httpsurl=docs.google.com/drawings/d/1Kq65yVqWT7HxrGLeNdxAipqbX7P4OuS4Md325R0edrA/edit",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738379803,
+ "docshellUUID": "{d8612a79-667b-429e-a1fd-bf60e438ea87}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezY5MzRhZTVkLWM5NWUtNDUyZS1iMzg0LWZjNDExNTAzZjRhOX0AAAAA",
+ "docIdentifier": 52,
+ "structuredCloneState": "AAAAAAAA//8=",
+ "structuredCloneVersion": 2,
+ "persist": true
+ }],
+ "lastAccessed": 1528451773304,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 1,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAAbGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9ZG9jcy5nb29nbGUuY29tL2RyYXdpbmdzL2QvMUtxNjV5VnFXVDdIeHJHTGVOZHhBaXBxYlg3UDRPdVM0TWQzMjVSMGVkckEvZWRpdAAAAAAAAAAEAAAABwAAAA4AAAAH/////wAAAAf/////AAAABwAAAAkAAAAVAAAAVwAAABUAAAABAAAAFQAAAAEAAAAWAAAAAAAAABb/////AAAAAP////8AAAAXAAAAVQAAABX/////AQAAAAAAAAAAAAAAAA=="
+ }, {
+ "entries": [{
+ "url": "http://localhost:8080/?httpsurl=docs.google.com/document/d/1dm2Z_yaEU506PHeJE64BReXQyIlJgJk7mXOjKx36MbE/edit",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738383232,
+ "docshellUUID": "{7601d93f-7b07-43f0-9ba6-a97f2759bcc1}",
+ "referrer": "http://localhost:8080/?httpsurl=docs.google.com/drawings/d/1Kq65yVqWT7HxrGLeNdxAipqbX7P4OuS4Md325R0edrA/edit",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezNjNWE2NGI4LTNmOTgtNDAxNC1iNjRjLWRmZGIyNmNlNDE1NH0AAAAA",
+ "docIdentifier": 52,
+ "structuredCloneState": "AAAAAAAA//8=",
+ "structuredCloneVersion": 2,
+ "persist": true
+ }],
+ "lastAccessed": 1528451773714,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 1,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAAbGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9ZG9jcy5nb29nbGUuY29tL2RvY3VtZW50L2QvMWRtMlpfeWFFVTUwNlBIZUpFNjRCUmVYUXlJbEpnSms3bVhPakt4MzZNYkUvZWRpdAAAAAAAAAAEAAAABwAAAA4AAAAH/////wAAAAf/////AAAABwAAAAkAAAAVAAAAVwAAABUAAAABAAAAFQAAAAEAAAAWAAAAAAAAABb/////AAAAAP////8AAAAXAAAAVQAAABX/////AQAAAAAAAAAAAAAAAA=="
+ }, {
+ "entries": [{
+ "url": "http://localhost:8080/?httpsurl=www.google.fr/search?q=movies&ie=utf-8&oe=utf-8&rls=org.mozilla:en-US:unofficial&client=firefox-nightly&channel=fflb&gfe_rd=ctrl&ei=U6UMU8XlJYHf8geZ5YHABg&gws_rd=cr",
+ "title": "movies - Google Search",
+ "cacheKey": 0,
+ "ID": 3738353352,
+ "docshellUUID": "{55a18881-1dea-4dc7-937c-77e0811a51dc}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezhlMTYxYzMxLWFlN2MtNDA5MS04YWZhLWUyOTBmYjdjZmU4Mn0AAAAA",
+ "docIdentifier": 1,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?url=www.youtube.com/user/YouTubeMoviesFR",
+ "title": "Films - YouTube",
+ "cacheKey": 0,
+ "ID": 3738353353,
+ "docshellUUID": "{55a18881-1dea-4dc7-937c-77e0811a51dc}",
+ "referrer": "http://localhost:8080/?url=www.google.fr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CDUQFjAB&url=http%3A%2F%2Fwww.youtube.com%2Fuser%2Fmovies&ei=U6UMU9fnKIOb0AXAgYFg&usg=AFQjCNHrmNe-ykFP-4R2NPUvq_YQh3LfQw&sig2=k395eaN4vi_NxXCeQwBYtg&bvm=bv.61725948,d.d2k",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezEyNDMwN2I5LWVjMmEtNDk4My1hNDk4LWE1ODE5ZDFiYjlhOX0AAAAA",
+ "docIdentifier": 2,
+ "structuredCloneState": "AAAAAAgA//8LAAAABAD//3MAcABmAC0AcgBlAGYAZQByAGUAcgAAAO0AAAAEAP//aAB0AHQAcAA6AC8ALwB3AHcAdwAuAGcAbwBvAGcAbABlAC4AZgByAC8AdQByAGwAPwBzAGEAPQB0ACYAcgBjAHQAPQBqACYAcQA9ACYAZQBzAHIAYwA9AHMAJgBzAG8AdQByAGMAZQA9AHcAZQBiACYAYwBkAD0AMgAmAHYAZQBkAD0AMABDAEQAVQBRAEYAagBBAEIAJgB1AHIAbAA9AGgAdAB0AHAAJQAzAEEAJQAyAEYAJQAyAEYAdwB3AHcALgB5AG8AdQB0AHUAYgBlAC4AYwBvAG0AJQAyAEYAdQBzAGUAcgAlADIARgBtAG8AdgBpAGUAcwAmAGUAaQA9AFUANgBVAE0AVQA5AGYAbgBLAEkATwBiADAAQQBYAEEAZwBZAEYAZwAmAHUAcwBnAD0AQQBGAFEAagBDAE4ASAByAG0ATgBlAC0AeQBrAEYAUAAtADQAUgAyAE4AUABVAHYAcQBfAFkAUQBoADMATABmAFEAdwAmAHMAaQBnADIAPQBrADMAOQA1AGUAYQBOADQAdgBpAF8ATgB4AFgAQwBlAFEAdwBCAFkAdABnACYAYgB2AG0APQBiAHYALgA2ADEANwAyADUAOQA0ADgALABkAC4AZAAyAGsAAAAAAAAADQAAAAQA//9zAHAAZgAtAHQAaQBtAGUAcwB0AGEAbQBwAAAAAAAAAAAwaV6WRnRCAAAAAAAA//8=",
+ "structuredCloneVersion": 2,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738353354,
+ "docshellUUID": "{8503ff2e-c42e-44ca-b144-c062166806d3}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezZmZDJkNTc3LThiYTItNGFmNy05ZGRkLWVhODk4ZTRjNWM1Mn0AAAAA",
+ "docIdentifier": 3
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738353355,
+ "docshellUUID": "{c700236c-2e81-4408-91e6-5c5ae237b153}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2VhYzcwOTNmLWI4OTAtNDRlZC1hYzJiLWI3YjFhYzBmODc5OH0AAAAA",
+ "docIdentifier": 4
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738353356,
+ "docshellUUID": "{4bab4fb2-6d15-4f56-ad7b-aaed67612d88}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezIwZmU2Zjc1LTQ2MmMtNGMxMC04NjYxLWE1NDNiZTE0Y2U4Nn0AAAAA",
+ "docIdentifier": 5
+ }],
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?url=www.youtube.com/watch?v=gYCzg8xg4c0&feature=c4-overview",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738353357,
+ "docshellUUID": "{55a18881-1dea-4dc7-937c-77e0811a51dc}",
+ "referrer": "http://localhost:8080/?url=www.youtube.com/user/YouTubeMoviesFR",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2VmMTdhZWY4LWU0MzAtNGMxNC04NThhLWRmNjFlOTEzNzUwZn0AAAAA",
+ "docIdentifier": 6,
+ "structuredCloneState": "AAAAAAAA//8=",
+ "structuredCloneVersion": 2,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738353358,
+ "docshellUUID": "{1e8146cb-7b8d-4e52-a5ed-c8172a694cd5}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2EyMDJmZjBjLWI4MWItNDMyMi1iMDhmLTQ4ZTczYWMxMzliZn0AAAAA",
+ "docIdentifier": 7
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451857681,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 3,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAAUmh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/dXJsPXd3dy55b3V0dWJlLmNvbS93YXRjaD92PWdZQ3pnOHhnNGMwJmZlYXR1cmU9YzQtb3ZlcnZpZXcAAAAAAAAABAAAAAcAAAAOAAAAB/////8AAAAH/////wAAAAcAAAAJAAAAFQAAAD0AAAAVAAAAAQAAABUAAAABAAAAFgAAAAAAAAAW/////wAAAAD/////AAAAFwAAADsAAAAV/////wEAAAAAAAAAAAAAAAA="
+ }],
+ "selected": 40,
+ "_closedTabs": [{
+ "state": {
+ "entries": [{
+ "url": "http://localhost:8080/?url=swimswam.com/video-walk-2013-junior-world-championships-hamdem-center/",
+ "title": "Video Walk Through: 2013 Junior World Championships, Hamdan Center",
+ "ID": 17,
+ "docshellID": 15,
+ "docIdentifier": 17,
+ "children": [{
+ "url": "http://localhost:8080/?url=player.vimeo.com/video/73623354?title=0&byline=0&portrait=0",
+ "title": "Hamdam Centre Walk Thru at World Jnr Champs from SWIMSWAM on Vimeo",
+ "ID": 19,
+ "docshellID": 16,
+ "referrer": "http://localhost:8080/?url=swimswam.com/video-walk-2013-junior-world-championships-hamdem-center/",
+ "docIdentifier": 19
+ }, {
+ "url": "http://localhost:8080/?httpsurl=www.facebook.com/plugins/like.php?href=http%3A%2F%2Fswimswam.com%2Fvideo-walk-2013-junior-world-championships-hamdem-center%2F&layout=box_count&show_faces=false&width=50&action=like&colorscheme=light&height=90",
+ "ID": 24,
+ "docshellID": 17,
+ "referrer": "http://localhost:8080/?url=swimswam.com/video-walk-2013-junior-world-championships-hamdem-center/",
+ "docIdentifier": 24
+ }, {
+ "url": "http://localhost:8080/?httpsurl=www.facebook.com/plugins/like.php?href=http%3A%2F%2Fswimswam.com%2Fvideo-walk-2013-junior-world-championships-hamdem-center%2F&layout=button_count&show_faces=false&width=85&action=like&colorscheme=light&height=21",
+ "title": "Facebook",
+ "ID": 25,
+ "docshellID": 19,
+ "referrer": "http://localhost:8080/?url=swimswam.com/video-walk-2013-junior-world-championships-hamdem-center/",
+ "docIdentifier": 25
+ }]
+ }],
+ "lastAccessed": 1393256151290,
+ "hidden": false,
+ "attributes": {},
+ "image": "http://localhost:8080/?url=cdn.swimswam.com/wp-content/themes/swimswam/favicon.ico",
+ "index": 1
+ },
+ "title": "Video Walk Through: 2013 Junior World Championships, Hamdan Center",
+ "image": "http://localhost:8080/?url=cdn.swimswam.com/wp-content/themes/swimswam/favicon.ico",
+ "pos": 1,
+ "closedAt": 1393256151290
+ }, {
+ "state": {
+ "entries": [{
+ "url": "about:newtab",
+ "title": "New Tab",
+ "ID": 17,
+ "docshellID": 18,
+ "owner_b64": "SmIS26zLEdO3ZQBgsLbOywAAAAAAAAAAwAAAAAAAAEY=",
+ "docIdentifier": 17
+ }],
+ "lastAccessed": 1393256966807,
+ "userTypedValue": "sess",
+ "userTypedClear": 0,
+ "hidden": false,
+ "attributes": {},
+ "image": null,
+ "index": 1
+ },
+ "title": "New Tab",
+ "image": null,
+ "pos": 4,
+ "closedAt": 1393256966808
+ }, {
+ "state": {
+ "entries": [{
+ "url": "http://localhost:8080/?httpsurl=docs.google.com/presentation/d/1oTncQrrq06b1ow-BdKkaFaNr5IlZaWQEhqjsNSgcEdM/edit#slide=id.i0",
+ "title": "Untitled Presentation - Google Drive",
+ "ID": 45,
+ "docshellID": 38,
+ "referrer": "http://localhost:8080/?httpsurl=drive.google.com/?hl=fr&urp=http://localhost:8080/?httpsurl=www.google.fr/url?sa%3Dt%26rct%3Dj%26q%3D%26esrc%3Ds%26sou&authuser=0",
+ "docIdentifier": 46,
+ "structuredCloneState": "AAAAAAAA//8=",
+ "structuredCloneVersion": 2
+ }],
+ "lastAccessed": 1393256660847,
+ "hidden": false,
+ "attributes": {},
+ "image": "http://localhost:8080/?httpsurl=ssl.gstatic.com/docs/presentations/images/favicon4.ico",
+ "index": 1
+ },
+ "title": "Untitled Presentation - Google Drive",
+ "image": "http://localhost:8080/?httpsurl=ssl.gstatic.com/docs/presentations/images/favicon4.ico",
+ "pos": 4,
+ "closedAt": 1393256660847
+ }, {
+ "state": {
+ "entries": [{
+ "url": "http://localhost:8080/?httpsurl=docs.google.com/document/d/1lzeZ7lKYsBq1mXs6I1KwNAF4gbrCR7qVW1jr_5Ka0tQ/edit",
+ "title": "Untitled document - Google Drive",
+ "ID": 51,
+ "docshellID": 45,
+ "referrer": "http://localhost:8080/?httpsurl=drive.google.com/?hl=fr&urp=http://localhost:8080/?httpsurl=www.google.fr/url?sa%3Dt%26rct%3Dj%26q%3D%26esrc%3Ds%26sou&authuser=0",
+ "docIdentifier": 52,
+ "structuredCloneState": "AAAAAAAA//8=",
+ "structuredCloneVersion": 2
+ }],
+ "lastAccessed": 1393256601337,
+ "hidden": false,
+ "attributes": {},
+ "image": "http://localhost:8080/?httpsurl=ssl.gstatic.com/docs/documents/images/kix-favicon6.ico",
+ "index": 1
+ },
+ "title": "Untitled document - Google Drive",
+ "image": "http://localhost:8080/?httpsurl=ssl.gstatic.com/docs/documents/images/kix-favicon6.ico",
+ "pos": 3,
+ "closedAt": 1393256601337
+ }, {
+ "state": {
+ "entries": [{
+ "url": "http://localhost:8080/?httpsurl=docs.google.com/spreadsheet/ccc?key=0AsDW-iLj4J3pdEFaYkRmajhsMTJoTTd4U2k4V1E4U2c&usp=drive_web",
+ "title": "SessionFile.read() - Google Drive",
+ "ID": 39,
+ "docshellID": 33,
+ "referrer": "http://localhost:8080/?httpsurl=drive.google.com/?hl=fr&urp=http://localhost:8080/?httpsurl=www.google.fr/url?sa%3Dt%26rct%3Dj%26q%3D%26esrc%3Ds%26sou&authuser=0",
+ "docIdentifier": 40,
+ "structuredCloneState": "AAAAAAAA//8=",
+ "structuredCloneVersion": 2
+ }, {
+ "url": "http://localhost:8080/?httpsurl=docs.google.com/spreadsheet/ccc?key=0AsDW-iLj4J3pdEFaYkRmajhsMTJoTTd4U2k4V1E4U2c&usp=drive_web#gid=0",
+ "title": "SessionFile.read()",
+ "ID": 40,
+ "docshellID": 33,
+ "docIdentifier": 40
+ }],
+ "lastAccessed": 1393256373871,
+ "hidden": false,
+ "attributes": {},
+ "image": "http://localhost:8080/?httpsurl=docs.google.com/favicon.ico",
+ "index": 2,
+ "pageStyle": {
+ "pageStyle": "gridCss"
+ }
+ },
+ "title": "SessionFile.read()",
+ "image": "http://localhost:8080/?httpsurl=docs.google.com/favicon.ico",
+ "pos": 3,
+ "closedAt": 1393256373871
+ }, {
+ "state": {
+ "entries": [{
+ "url": "http://localhost:8080/?httpsurl=github.com/andrewray/iocamljs",
+ "title": "andrewray/iocamljs · GitHub",
+ "ID": 16,
+ "docshellID": 16,
+ "referrer": "http://localhost:8080/?httpsurl=t.co/Lgc1R8XU0T",
+ "docIdentifier": 16
+ }],
+ "lastAccessed": 1393256206748,
+ "hidden": false,
+ "attributes": {},
+ "image": "http://localhost:8080/?httpsurl=github.com/favicon.ico",
+ "index": 1,
+ "scroll": {
+ "scroll": "0,625"
+ }
+ },
+ "title": "andrewray/iocamljs · GitHub",
+ "image": "http://localhost:8080/?httpsurl=github.com/favicon.ico",
+ "pos": 2,
+ "closedAt": 1393256298987
+ }],
+ "busy": false,
+ "width": 1440,
+ "height": 874,
+ "screenX": 2596,
+ "screenY": 671,
+ "sizemode": "normal",
+ "zIndex": 3
+ }, {
+ "tabs": [{
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738392588,
+ "docshellUUID": "{310c2b32-78a6-487e-8d14-7ba6a025be55}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2IxZTZlYjc5LWJhNzctNDY5MS1hYTI4LWRiZjcwYmVmNmNmMH0AAAAA",
+ "docIdentifier": 46,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=www.facebook.com/",
+ "title": "Welcome to Facebook - Log In, Sign Up or Learn More",
+ "cacheKey": 0,
+ "ID": 3738392589,
+ "docshellUUID": "{310c2b32-78a6-487e-8d14-7ba6a025be55}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezA2YzBiMzJmLWEyNTktNDI5Zi1hNWI3LTVhYTRlOGRiNTYwMX0AAAAA",
+ "docIdentifier": 47,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=www.facebook.com/checkpoint/?next",
+ "title": "Facebook",
+ "cacheKey": 0,
+ "ID": 3738392590,
+ "docshellUUID": "{310c2b32-78a6-487e-8d14-7ba6a025be55}",
+ "referrer": "http://localhost:8080/?httpsurl=www.facebook.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezUwYjBmMzRmLTUzODEtNDA5NS1iODE4LTMyMzYzN2RmMWQzZH0AAAAA",
+ "docIdentifier": 48,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=www.facebook.com/checkpoint/?next",
+ "title": "Facebook",
+ "cacheKey": 1393256027,
+ "ID": 3738392591,
+ "docshellUUID": "{310c2b32-78a6-487e-8d14-7ba6a025be55}",
+ "referrer": "http://localhost:8080/?httpsurl=www.facebook.com/checkpoint/?next",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezczNzk5NjgyLTZlMzEtNDVhNi05MzQyLWRhYTNkOGUyZDk3M30AAAAA",
+ "docIdentifier": 49,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=www.facebook.com/checkpoint/?next",
+ "title": "Facebook",
+ "cacheKey": 1393256028,
+ "ID": 3738392592,
+ "docshellUUID": "{310c2b32-78a6-487e-8d14-7ba6a025be55}",
+ "referrer": "http://localhost:8080/?httpsurl=www.facebook.com/checkpoint/?next",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2Q3ZDM5MjgxLTdkNWMtNDEwNS05ZmM3LWM5NjBlMjFhYWE4Yn0AAAAA",
+ "docIdentifier": 50,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=www.facebook.com/checkpoint/?next",
+ "title": "Facebook",
+ "cacheKey": 1393256029,
+ "ID": 3738392593,
+ "docshellUUID": "{310c2b32-78a6-487e-8d14-7ba6a025be55}",
+ "referrer": "http://localhost:8080/?httpsurl=www.facebook.com/checkpoint/?next",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezViODQzMWQ1LTkxMDYtNDUzYy04NDY2LTk4ZWU4M2UxODg0N30AAAAA",
+ "docIdentifier": 51,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=www.facebook.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738392594,
+ "docshellUUID": "{310c2b32-78a6-487e-8d14-7ba6a025be55}",
+ "referrer": "http://localhost:8080/?httpsurl=www.facebook.com/checkpoint/?next",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2IzNGNiMTU2LTQ5OTQtNGQ0ZC05M2Y2LTUzMzI2YWVmZWQzNX0AAAAA",
+ "docIdentifier": 52,
+ "structuredCloneState": "GQAAAAQA//9oAHQAdABwAHMAOgAvAC8AdwB3AHcALgBmAGEAYwBlAGIAbwBvAGsALgBjAG8AbQAvAAAAAAAAAA==",
+ "structuredCloneVersion": 2,
+ "persist": true
+ }],
+ "lastAccessed": 1528451791890,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 7,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAAMWh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9d3d3LmZhY2Vib29rLmNvbS8AAAAAAAAABAAAAAcAAAAOAAAAB/////8AAAAH/////wAAAAcAAAAJAAAAFQAAABwAAAAVAAAAAQAAABUAAAABAAAAFgAAAAAAAAAW/////wAAAAD/////AAAAFwAAABoAAAAV/////wEAAAAAAAAAAAAAAAA="
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738393633,
+ "docshellUUID": "{335446bc-57a9-4cd3-987b-984c0239d326}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2RiZGVhOWU1LTBlNjMtNDdjYi1iODNiLTYwYjIzMjBlMzIyOX0AAAAA",
+ "docIdentifier": 53,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738393634,
+ "docshellUUID": "{335446bc-57a9-4cd3-987b-984c0239d326}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezk0MjY2ZmE3LWZhN2EtNGNiZC05NzZjLWEwNjM2NGUzNjJiYn0AAAAA",
+ "docIdentifier": 54,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738393635,
+ "docshellUUID": "{43584cab-ac21-4bd8-bc9b-cd5d22599d93}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2ZmNzQwZDZjLWM3NDItNDgzYS04YjBmLThmYzE3MGE3NWVjMn0AAAAA",
+ "docIdentifier": 55
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738393636,
+ "docshellUUID": "{7266f212-5701-4962-88f6-daf21b0cd491}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezI5N2IxMmRjLTIxYmYtNDgwNy1iNmRjLTNmOGNiNmEzYmRjN30AAAAA",
+ "docIdentifier": 56
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738393637,
+ "docshellUUID": "{76a8f95b-bf8b-4ec5-b161-8ba52f6afae2}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezY4NzBhNWRlLTQyZGYtNDhlMy05OTQwLWYzNWNhYWQwN2E4YX0AAAAA",
+ "docIdentifier": 57
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451791164,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738393813,
+ "docshellUUID": "{86c12ff6-31a2-4c9f-92ad-5033f3a65515}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2I3ZjgxNzQ0LWJmNDEtNDRjZi1hYTQyLTFiODA0NjE5NTdjZH0AAAAA",
+ "docIdentifier": 53,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738393814,
+ "docshellUUID": "{86c12ff6-31a2-4c9f-92ad-5033f3a65515}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezc0NjdjZjBkLWM4NzMtNDk5My1iZGQ5LTZlYmU2MDU3NjRmNH0AAAAA",
+ "docIdentifier": 54,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738393815,
+ "docshellUUID": "{797ed9aa-9c8d-4540-90a1-21a221af9baa}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2NlMmViYWNjLWZiNzUtNGRlYi05OWNjLWMxZGYzNDA2YWY0OX0AAAAA",
+ "docIdentifier": 55
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738393816,
+ "docshellUUID": "{825230d4-e859-444c-8661-b7e2aa63dc33}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2ZhODc2NmVkLTVmNzQtNDQ5ZC05MTk1LWFlNjA1ZTMwMjI5Zn0AAAAA",
+ "docIdentifier": 56
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738393817,
+ "docshellUUID": "{16b2e3e5-fcf0-45f2-9df2-7b167c44a22e}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2Q4OGY5ZDJmLTYxMGEtNDYwOS05Nzc1LTk3NmVhNDljNWJlZn0AAAAA",
+ "docIdentifier": 57
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451790793,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738393925,
+ "docshellUUID": "{f46d62a6-87c0-4574-b3e1-403f464f7b86}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2ZiMDYzM2ZmLTJmOTktNDRlZS05NTQxLTFjZWY2ODQ0NjU0Zn0AAAAA",
+ "docIdentifier": 60,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738393926,
+ "docshellUUID": "{f46d62a6-87c0-4574-b3e1-403f464f7b86}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezg1YWI0MmQwLWYzMGYtNGU1Yy04NDEwLTNiYzE0MDZmMTkyZX0AAAAA",
+ "docIdentifier": 61,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738393927,
+ "docshellUUID": "{1009278f-9c58-4c63-ac7e-e239c816fa69}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezYwOWQyZDc0LTM4YzctNGRiZS1hZjc5LTY0MmI1MGRkNjA4Nn0AAAAA",
+ "docIdentifier": 62
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738393928,
+ "docshellUUID": "{32225ac0-0b7c-4069-b2ca-78b179fd0839}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezE5MDM5NzRlLTU0YzQtNGZmNS1iYTE3LThiNjM1NjQwYmM0NH0AAAAA",
+ "docIdentifier": 63
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738393929,
+ "docshellUUID": "{470c5de2-944c-4cb2-ac46-e33322567876}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezE5M2VjZTI3LTA0OWMtNDMyOS05YzRjLTdhNTY0OTZlNWU2Yn0AAAAA",
+ "docIdentifier": 64
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451784113,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738394044,
+ "docshellUUID": "{b48b1b73-ab13-4c1e-9caf-604f1aac99a1}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2MyN2ZkNzZjLTJjYzItNDQyZC1iNmU0LTdiN2JjMjM4MjkxN30AAAAA",
+ "docIdentifier": 53,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738394045,
+ "docshellUUID": "{b48b1b73-ab13-4c1e-9caf-604f1aac99a1}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezdmNGMzNTJkLWMxNzgtNDhjYS04NGM5LTk5NmI2ZGIzNjNlY30AAAAA",
+ "docIdentifier": 54,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738394046,
+ "docshellUUID": "{878ab3bc-a999-43c3-99dc-b9434fe13501}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezY0N2Q4M2ZjLWU5Y2MtNDdmMC05ZTQ2LTg2NTUzYjIwZDFkZH0AAAAA",
+ "docIdentifier": 55
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738394047,
+ "docshellUUID": "{60c88f70-13c3-4a9d-ac20-e0df112ccd50}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2Q1NTQ2YTZlLWMzYzktNGIzYy1hNzRiLTYyZmU4ZGNmNTI0Yn0AAAAA",
+ "docIdentifier": 56
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738394048,
+ "docshellUUID": "{964d9c55-7ca5-476b-838e-7a9896e8fe70}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2U3NDIwNjQyLTA3MTItNDA1MC05YmFhLTA3NmM5NTI4MmE5OX0AAAAA",
+ "docIdentifier": 57
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451784231,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738394156,
+ "docshellUUID": "{364e1ef0-469a-4e29-b4f7-b68412dad2df}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezUzODZjZWI1LTQzODgtNGI2My1hMzM2LTJiNTBlNTQwMzE2Y30AAAAA",
+ "docIdentifier": 58,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738394157,
+ "docshellUUID": "{364e1ef0-469a-4e29-b4f7-b68412dad2df}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezBlMjU2MjgyLTZlODAtNGVmMC04MTQxLWU0MmM2NGMwZjVhZH0AAAAA",
+ "docIdentifier": 59,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738394158,
+ "docshellUUID": "{43584cab-ac21-4bd8-bc9b-cd5d22599d93}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezQ5Y2E1MGRlLTI5ZTUtNDg1ZC05N2M3LWI1NzFiZTMxZDIzYn0AAAAA",
+ "docIdentifier": 60
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738394159,
+ "docshellUUID": "{7266f212-5701-4962-88f6-daf21b0cd491}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezMzZTRhMjA5LTRkNGQtNGYwOS05NDgyLTI4OWVkMGY2YmNjZn0AAAAA",
+ "docIdentifier": 61
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738394160,
+ "docshellUUID": "{76a8f95b-bf8b-4ec5-b161-8ba52f6afae2}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezRkMmE4OTBjLWRlZDItNDU1NC05MTg3LTY5ZmExMWJmZjU3YX0AAAAA",
+ "docIdentifier": 62
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451784333,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738394258,
+ "docshellUUID": "{973e770b-8ff0-4bbe-96a8-6bd02c9ff01c}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezVhYWEwNWIzLWQzYTQtNDNmMy1iYjM1LWJkZjI0MWMyNGVmOH0AAAAA",
+ "docIdentifier": 58,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738394259,
+ "docshellUUID": "{973e770b-8ff0-4bbe-96a8-6bd02c9ff01c}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezE0MGY0M2UzLWE5NTAtNDE0Yi05ZGNhLTY4Njc0OWMxYWI4MX0AAAAA",
+ "docIdentifier": 59,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738394260,
+ "docshellUUID": "{797ed9aa-9c8d-4540-90a1-21a221af9baa}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezQwYjk5YWMyLWJhNmQtNGQ4ZS1hNzk3LTk0MzRjNmM5ZDA1ZH0AAAAA",
+ "docIdentifier": 60
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738394261,
+ "docshellUUID": "{825230d4-e859-444c-8661-b7e2aa63dc33}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezEwYjgxODE3LTlkZGQtNGMzNy05MTJlLThjY2IxODFjODFiYX0AAAAA",
+ "docIdentifier": 61
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738394262,
+ "docshellUUID": "{16b2e3e5-fcf0-45f2-9df2-7b167c44a22e}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezNjY2Y5ZjcxLTljYjctNDU4NC1hZDExLWVmNTM1NmI5NTE5ZX0AAAAA",
+ "docIdentifier": 62
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451784452,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738394377,
+ "docshellUUID": "{a5a5a1a3-8c65-4d5e-9498-f19fbcf0efb4}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezU5NDZkYWJkLWY4NjctNGUxZC1iMjFiLTg1OWYzMWMwMjM2OX0AAAAA",
+ "docIdentifier": 65,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738394378,
+ "docshellUUID": "{a5a5a1a3-8c65-4d5e-9498-f19fbcf0efb4}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2Q4NGJlZTAzLTI4ZWUtNDU4OS1hMjQ0LTU4ZjdkMzAyZmJkOX0AAAAA",
+ "docIdentifier": 66,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738394379,
+ "docshellUUID": "{1009278f-9c58-4c63-ac7e-e239c816fa69}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezYyNjJmZWVmLWIzNmItNGU4OC04NTc4LTBmMmNlNmVmOGE1NH0AAAAA",
+ "docIdentifier": 67
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738394380,
+ "docshellUUID": "{32225ac0-0b7c-4069-b2ca-78b179fd0839}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2FlN2RlZTU4LWUyNmQtNGZjMi05NGRkLTMyNWNkNWE4MGVjOX0AAAAA",
+ "docIdentifier": 68
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738394381,
+ "docshellUUID": "{470c5de2-944c-4cb2-ac46-e33322567876}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2FmMmE2ODFlLWNiZTEtNDJhYy05ZTQ0LTVjMjc1N2I0MWU5NH0AAAAA",
+ "docIdentifier": 69
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451784580,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738394510,
+ "docshellUUID": "{8c038340-04bf-457e-837d-eeead721030c}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezRiMzRkM2VjLWVlNDktNGZkMS04ZTc1LWY0MjU1ODU1NzRiM30AAAAA",
+ "docIdentifier": 58,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738394511,
+ "docshellUUID": "{8c038340-04bf-457e-837d-eeead721030c}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezgyM2M5MGU0LTE5OTQtNDY1My1iYjY2LWRlYzQ0ODdmOWY3OX0AAAAA",
+ "docIdentifier": 59,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738394512,
+ "docshellUUID": "{878ab3bc-a999-43c3-99dc-b9434fe13501}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezE4MmE3NmMzLTY5YzktNGMxMy1hMWY5LWRkZWE1NjNlNjIxMH0AAAAA",
+ "docIdentifier": 60
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738394513,
+ "docshellUUID": "{60c88f70-13c3-4a9d-ac20-e0df112ccd50}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezNjNWI5YTRjLTU5ZmYtNDM0ZC05ZTJjLTE2ZDFhMWQ1MTQwOH0AAAAA",
+ "docIdentifier": 61
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738394514,
+ "docshellUUID": "{964d9c55-7ca5-476b-838e-7a9896e8fe70}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezEyNDliM2U0LWU1OTEtNDQ4YS1hMWI1LTc5MDc3NjQ0ZDMyNX0AAAAA",
+ "docIdentifier": 62
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451784718,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738394644,
+ "docshellUUID": "{6fb01239-3fa8-4b60-a742-0145f1d0dd30}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2JhNmQxNzdlLTk2ODUtNDQzNC1hZGQzLTg4NjI2ODE4OWE4NH0AAAAA",
+ "docIdentifier": 63,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738394645,
+ "docshellUUID": "{6fb01239-3fa8-4b60-a742-0145f1d0dd30}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2M5MjRiMzI1LWQ3NjEtNGVkOC05N2Y3LWY4ZDhlYWUxYmMxZn0AAAAA",
+ "docIdentifier": 64,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738394646,
+ "docshellUUID": "{43584cab-ac21-4bd8-bc9b-cd5d22599d93}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezMxYWMzZTg5LTQwNTktNGQwOC1hM2JhLWQ0NjhlNmFjOGJlZX0AAAAA",
+ "docIdentifier": 65
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738394647,
+ "docshellUUID": "{7266f212-5701-4962-88f6-daf21b0cd491}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2M4ODA3MTUxLTcxMGUtNDcwZS1hYTU3LWI2ZDcwYWNjM2Q3MH0AAAAA",
+ "docIdentifier": 66
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738394648,
+ "docshellUUID": "{76a8f95b-bf8b-4ec5-b161-8ba52f6afae2}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezdjMGNjYzRmLWFlZGItNGZlNC05MDQ1LTNjNGE2YzBmYTNiZX0AAAAA",
+ "docIdentifier": 67
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451784835,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738394761,
+ "docshellUUID": "{5cc59426-0b70-4eae-ae5d-10978afcd6c6}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezljZDZkNzk4LTRjODktNGQyMC1hMmZhLTAxZjFjZmEzNzcyM30AAAAA",
+ "docIdentifier": 63,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738394762,
+ "docshellUUID": "{5cc59426-0b70-4eae-ae5d-10978afcd6c6}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezNjZjlhODlhLWQzNzctNDE5NC1iNDVjLTBmMDBmNzUzMDliZH0AAAAA",
+ "docIdentifier": 64,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738394763,
+ "docshellUUID": "{797ed9aa-9c8d-4540-90a1-21a221af9baa}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezRiNmI5ZjBhLWM0ZmItNGIyMC1iZjY2LWYyZjU3NmRhYzA0Yn0AAAAA",
+ "docIdentifier": 65
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738394764,
+ "docshellUUID": "{825230d4-e859-444c-8661-b7e2aa63dc33}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezQwZDM5ZTA3LWNkYmItNGI5ZC04MjA1LWJhYmNiNzdhODk0Y30AAAAA",
+ "docIdentifier": 66
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738394765,
+ "docshellUUID": "{16b2e3e5-fcf0-45f2-9df2-7b167c44a22e}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2Y1N2NkMjhlLTc1MzQtNGMxMi04NjEyLTg3ZTMzNWExMmQ3NH0AAAAA",
+ "docIdentifier": 67
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451784978,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738394906,
+ "docshellUUID": "{3658105f-5557-44c2-8121-e02c138ab197}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezQ5YjJmNDdkLTMyOTItNGZkMC05NDJmLTM3NTM2MjE0ODc5Nn0AAAAA",
+ "docIdentifier": 70,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738394907,
+ "docshellUUID": "{3658105f-5557-44c2-8121-e02c138ab197}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezliZjg4ZTEyLWQ4NTAtNDI3ZC1hMjI3LWU3ZWVjYjM1NGYwY30AAAAA",
+ "docIdentifier": 71,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738394908,
+ "docshellUUID": "{1009278f-9c58-4c63-ac7e-e239c816fa69}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2M3MmQ5YWI0LWU2YzYtNGQxZS04NWE2LWE3MTdmMTZlNTIzYn0AAAAA",
+ "docIdentifier": 72
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738394909,
+ "docshellUUID": "{32225ac0-0b7c-4069-b2ca-78b179fd0839}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezJmZDkxZDc3LTFkMWUtNGZiNy05NDdkLWVhZWYzMDQyMjk1NX0AAAAA",
+ "docIdentifier": 73
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738394910,
+ "docshellUUID": "{470c5de2-944c-4cb2-ac46-e33322567876}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2M4Yjg0MTk3LTg1ODMtNDVkZC05MGUyLThhNWNhN2M0ZmRmYn0AAAAA",
+ "docIdentifier": 74
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451785098,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738395024,
+ "docshellUUID": "{2b1ee9bd-a06b-453e-810b-dd3d588171df}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2M3MjQ3Y2ZlLTQ1YzYtNDIzMi04N2M5LTA1M2NmYTUwMWU4N30AAAAA",
+ "docIdentifier": 63,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738395025,
+ "docshellUUID": "{2b1ee9bd-a06b-453e-810b-dd3d588171df}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2Y2ODE5YjZjLTU5ODUtNDRhYS05ZGNiLWNlMzEzY2ZhMTBlZX0AAAAA",
+ "docIdentifier": 64,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738395026,
+ "docshellUUID": "{878ab3bc-a999-43c3-99dc-b9434fe13501}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezE1MTE3ZTRkLWU0MmQtNGFjYy05NWI1LTIwNGI5OWU3M2M1OH0AAAAA",
+ "docIdentifier": 65
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738395027,
+ "docshellUUID": "{60c88f70-13c3-4a9d-ac20-e0df112ccd50}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezFmYzk5M2ZjLTdkNjgtNDFhMi04ZDZmLTcyZThlM2FkZmZmNn0AAAAA",
+ "docIdentifier": 66
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738395028,
+ "docshellUUID": "{964d9c55-7ca5-476b-838e-7a9896e8fe70}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezg3NzhkMjM5LWQ4OGUtNDA1ZS1hNzQwLTY3YzQxYzliZWQ2M30AAAAA",
+ "docIdentifier": 67
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451785250,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738395176,
+ "docshellUUID": "{6f83cd68-05e0-4f73-ad76-242ec696dd7d}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2RmYjVkOGUyLWUzYWItNGUxNC1hYjM0LTU2ODNkZmVkYmEyNn0AAAAA",
+ "docIdentifier": 68,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738395177,
+ "docshellUUID": "{6f83cd68-05e0-4f73-ad76-242ec696dd7d}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2MxYzM4MzQ0LWVlNzYtNDViMi1iYjM4LTEzOWI0Y2E4NTU5MH0AAAAA",
+ "docIdentifier": 69,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738395178,
+ "docshellUUID": "{43584cab-ac21-4bd8-bc9b-cd5d22599d93}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezZjZTJmZjA3LWFkNjQtNDZlMC05MzNhLTg1NDc1MjA0MzZhOX0AAAAA",
+ "docIdentifier": 70
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738395179,
+ "docshellUUID": "{7266f212-5701-4962-88f6-daf21b0cd491}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2UzMzE3YThiLTdiMzQtNDVkYS04YjRiLTUwMjFlNzA0ZWU4MX0AAAAA",
+ "docIdentifier": 71
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738395180,
+ "docshellUUID": "{76a8f95b-bf8b-4ec5-b161-8ba52f6afae2}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezY5ZWViY2QxLWNjNDAtNDYwZS1iYzZlLThjYTZlNWMyYzQ2NX0AAAAA",
+ "docIdentifier": 72
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451785363,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738395288,
+ "docshellUUID": "{354ba2a4-2462-4c14-be41-3e4e3a1ce1cc}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezVjZGI0M2ZjLWVmNmMtNGMzMS05OWMwLTY5OGE4MTFiZTI3NH0AAAAA",
+ "docIdentifier": 68,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738395289,
+ "docshellUUID": "{354ba2a4-2462-4c14-be41-3e4e3a1ce1cc}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezg1MmYwYTRiLTIyY2EtNDE5ZS04NDM3LWNlYzJhNGYwODQ0NH0AAAAA",
+ "docIdentifier": 69,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738395290,
+ "docshellUUID": "{797ed9aa-9c8d-4540-90a1-21a221af9baa}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2Q3NDVjNGUxLTExZTEtNGYyMy1iMTUzLThkMjM2Nzk5OGU1YX0AAAAA",
+ "docIdentifier": 70
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738395291,
+ "docshellUUID": "{825230d4-e859-444c-8661-b7e2aa63dc33}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2NjNTIxOWYyLWJiZjEtNDgzNS1iMmM2LTA4YTU0NmE2Njc1MX0AAAAA",
+ "docIdentifier": 71
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738395292,
+ "docshellUUID": "{16b2e3e5-fcf0-45f2-9df2-7b167c44a22e}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezhiZDkxM2Q0LTFiMzEtNDRmYS1hN2FiLTBkNmI5MmM4NGI0Mn0AAAAA",
+ "docIdentifier": 72
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451785481,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738395405,
+ "docshellUUID": "{5e06fdec-09c5-40f6-bea4-0d5bdcaff926}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezZkMTM2ZjRjLTc2OGUtNDMyMi1hODA1LTc0ZWY4NDA1OTc4Y30AAAAA",
+ "docIdentifier": 75,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738395406,
+ "docshellUUID": "{5e06fdec-09c5-40f6-bea4-0d5bdcaff926}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezQyY2Y2OTEyLWI4NjMtNDdmZi1iMzg1LWRjYWI0MmY4YjJmOH0AAAAA",
+ "docIdentifier": 76,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738395407,
+ "docshellUUID": "{1009278f-9c58-4c63-ac7e-e239c816fa69}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezUxNzNiNTg0LWQ1ZmEtNGE4My04NWM1LThlNTQzNTMwMDhjMH0AAAAA",
+ "docIdentifier": 77
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738395408,
+ "docshellUUID": "{32225ac0-0b7c-4069-b2ca-78b179fd0839}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2UwNjYwZmVkLTljMDgtNGNlOS04YjczLTU2ODE4MWEyYWViNn0AAAAA",
+ "docIdentifier": 78
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738395409,
+ "docshellUUID": "{470c5de2-944c-4cb2-ac46-e33322567876}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezQ5OTY0Y2Q2LTY5M2YtNDc3Yy05ZGFiLTM0NWQwMDYzNTExOH0AAAAA",
+ "docIdentifier": 79
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451785620,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738395545,
+ "docshellUUID": "{1a7f4dad-27bb-4725-b04f-9f8c892d1008}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2ZhYmFhYmEzLWEzZmUtNDUzZi04NzY5LTEyMDMyYzYxNWJlM30AAAAA",
+ "docIdentifier": 68,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738395546,
+ "docshellUUID": "{1a7f4dad-27bb-4725-b04f-9f8c892d1008}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezgyOTk5NzEzLTdhM2QtNDE3OC05YjBkLWQ1ZmZmNDE5NWFhN30AAAAA",
+ "docIdentifier": 69,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738395547,
+ "docshellUUID": "{878ab3bc-a999-43c3-99dc-b9434fe13501}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2JjNjc5YjIxLTBiZjAtNDc1ZS05MTllLTY3ZTJmMWVlNzM2Yn0AAAAA",
+ "docIdentifier": 70
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738395548,
+ "docshellUUID": "{60c88f70-13c3-4a9d-ac20-e0df112ccd50}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezJiYmI1YjM5LWNlZmMtNGQyNS04OGVmLTA5YmM4YTgwOWEyZX0AAAAA",
+ "docIdentifier": 71
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738395549,
+ "docshellUUID": "{964d9c55-7ca5-476b-838e-7a9896e8fe70}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2YxY2NlNjJlLWQ2MjktNDU3ZS05YjMwLWMyNjZlODg2NWE3MX0AAAAA",
+ "docIdentifier": 72
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451785760,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738395686,
+ "docshellUUID": "{44ed296d-b887-44d2-8c47-bf788fd7d9ba}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2Q4YmYyNWZlLTA1ZTctNGNmMy1iNWNmLTdlYzU1NzZlMGRhMn0AAAAA",
+ "docIdentifier": 73,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738395687,
+ "docshellUUID": "{44ed296d-b887-44d2-8c47-bf788fd7d9ba}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2ZhYzljOTljLTdlZWMtNDJmMi05N2E5LTg5OGY4MWRhNDg5Nn0AAAAA",
+ "docIdentifier": 74,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738395688,
+ "docshellUUID": "{43584cab-ac21-4bd8-bc9b-cd5d22599d93}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezM5YjFkMjJlLWMwZGYtNGYxZC04MDMyLWEyMTM4ZTVmOTQ2OX0AAAAA",
+ "docIdentifier": 75
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738395689,
+ "docshellUUID": "{7266f212-5701-4962-88f6-daf21b0cd491}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2QzZmM3ZWVmLWY5NWYtNDMyMS04MmYwLWUyOWRlYjE0NmIyMX0AAAAA",
+ "docIdentifier": 76
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738395690,
+ "docshellUUID": "{76a8f95b-bf8b-4ec5-b161-8ba52f6afae2}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2JjMTkxZTgwLWQ3ODMtNDZlOC1iMjcwLWVlNWNiMWVjMGE4Nn0AAAAA",
+ "docIdentifier": 77
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451785910,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738395839,
+ "docshellUUID": "{f7a5d662-5eba-4e54-9097-5e18bdc3039a}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2E1OTA4ODQ4LTJhMTAtNDNkNy1iZThlLWEzMTY2OTA5MzYwMH0AAAAA",
+ "docIdentifier": 73,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738395840,
+ "docshellUUID": "{f7a5d662-5eba-4e54-9097-5e18bdc3039a}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezRkNGUzNTIzLWNlNDgtNDIyYy05YjUyLTQ3NjZkNjk3MTVmOX0AAAAA",
+ "docIdentifier": 74,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738395841,
+ "docshellUUID": "{797ed9aa-9c8d-4540-90a1-21a221af9baa}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2E4MjFhODUxLTkwZTgtNGFhYy04NzAzLTFkYzY5YjFjNTI2N30AAAAA",
+ "docIdentifier": 75
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738395842,
+ "docshellUUID": "{825230d4-e859-444c-8661-b7e2aa63dc33}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezE2NzczMmJiLWU3Y2QtNDY4NC1iNDZhLTAzODdlNmViMGQzOX0AAAAA",
+ "docIdentifier": 76
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738395843,
+ "docshellUUID": "{16b2e3e5-fcf0-45f2-9df2-7b167c44a22e}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezUwOWE5N2Q2LTJjMWYtNDBkNy1iN2Q1LTAzOGJlMDk4NWQ1N30AAAAA",
+ "docIdentifier": 77
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451786045,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738395972,
+ "docshellUUID": "{1fd927be-fde0-43f4-a0a7-84e493367f75}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2YxNDQzYzM0LTBhYTMtNDE2NC1iYjNmLTk3ZjI2OGUzMDk0Nn0AAAAA",
+ "docIdentifier": 80,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738395973,
+ "docshellUUID": "{1fd927be-fde0-43f4-a0a7-84e493367f75}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2U5ZjUzODljLTAzZDctNGJhZC1hOTVjLTg5MWJiNWU0YjA5Nn0AAAAA",
+ "docIdentifier": 81,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738395974,
+ "docshellUUID": "{1009278f-9c58-4c63-ac7e-e239c816fa69}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezBmMTE2NjA2LWM0MDItNGZmYi05NjFkLTg0NGE0ODJhMTM1ZX0AAAAA",
+ "docIdentifier": 82
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738395975,
+ "docshellUUID": "{32225ac0-0b7c-4069-b2ca-78b179fd0839}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezk1MWI3MjY2LWE2OGQtNGE3Zi05MmNmLTQwZWFkNjM0MWE0OH0AAAAA",
+ "docIdentifier": 83
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738395976,
+ "docshellUUID": "{470c5de2-944c-4cb2-ac46-e33322567876}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezhjMzg0NWNiLTFjYzItNGQ2Zi04MzMwLWNlOWIwMjc2MTc2Zn0AAAAA",
+ "docIdentifier": 84
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451786173,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738396098,
+ "docshellUUID": "{0f043b40-b70f-4ee7-b465-180dfe187371}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezQ5M2U4MDNkLTYyYmYtNDQxYy1hYTEzLWYzNTIzOTQ5MjMyMX0AAAAA",
+ "docIdentifier": 73,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738396099,
+ "docshellUUID": "{0f043b40-b70f-4ee7-b465-180dfe187371}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2MwN2ZhYWRmLWY0YWUtNDU3Zi05NmIzLTNlNWU2MjJkNTFhY30AAAAA",
+ "docIdentifier": 74,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738396100,
+ "docshellUUID": "{878ab3bc-a999-43c3-99dc-b9434fe13501}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezEzZWU4MzljLTkyZGYtNDg1MS1hMWJkLTE0OTg4ZWI0YzVjYn0AAAAA",
+ "docIdentifier": 75
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738396101,
+ "docshellUUID": "{60c88f70-13c3-4a9d-ac20-e0df112ccd50}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2M2M2Q1OWIzLTVkOWMtNDY4NS04M2I4LWFkOTllNDkzMjlhNX0AAAAA",
+ "docIdentifier": 76
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738396102,
+ "docshellUUID": "{964d9c55-7ca5-476b-838e-7a9896e8fe70}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezc0NjkxYWJiLWM0MWEtNGY1OS1hMWVhLTg2Nzg2NjVhMDMxZn0AAAAA",
+ "docIdentifier": 77
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451786307,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738396232,
+ "docshellUUID": "{1213d0d4-aad8-4ecc-89f6-e3d502bb48b7}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2UzZWNiYmY5LWQ3MTktNDNmMy05ZWNkLWQyNGRjN2NhYjYzOH0AAAAA",
+ "docIdentifier": 78,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738396233,
+ "docshellUUID": "{1213d0d4-aad8-4ecc-89f6-e3d502bb48b7}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezYxM2U3YjIwLWM5OTQtNDk0My04MDhlLTdlODhhYjYzOGUwNn0AAAAA",
+ "docIdentifier": 79,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738396234,
+ "docshellUUID": "{43584cab-ac21-4bd8-bc9b-cd5d22599d93}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezI2YmI2NmJmLTRlMTMtNDYxNy1hOGUxLTA1ODkwYjgyYzk5NH0AAAAA",
+ "docIdentifier": 80
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738396235,
+ "docshellUUID": "{7266f212-5701-4962-88f6-daf21b0cd491}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2U4MDRmZTI3LTk1MGYtNDFlNS05ZjgwLWNlMmI5MjFjYWEyY30AAAAA",
+ "docIdentifier": 81
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738396236,
+ "docshellUUID": "{76a8f95b-bf8b-4ec5-b161-8ba52f6afae2}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2YyOWI1OWRiLTczYmMtNDM4YS1iY2I4LWJlNmNjNjc0YzllN30AAAAA",
+ "docIdentifier": 82
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451786456,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738396383,
+ "docshellUUID": "{3caaff21-1839-4fe2-8ea6-855fa63c9fc8}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezdjYmRmMDYxLTM3NDgtNDRlZS05ZjgxLTQ1NTI4NTM0MGUzOH0AAAAA",
+ "docIdentifier": 78,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738396384,
+ "docshellUUID": "{3caaff21-1839-4fe2-8ea6-855fa63c9fc8}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2Y0ZWI1ZjU4LTQ0ZmQtNGE2Yi05MzA5LTczZDcxNGVkYTliM30AAAAA",
+ "docIdentifier": 79,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738396385,
+ "docshellUUID": "{797ed9aa-9c8d-4540-90a1-21a221af9baa}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2JkN2NjN2U2LTUyOTktNDYwYS05NDQxLTA2ZmQ5NmVjY2YxYn0AAAAA",
+ "docIdentifier": 80
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738396386,
+ "docshellUUID": "{825230d4-e859-444c-8661-b7e2aa63dc33}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezNiMWU0YjFjLTc0MDItNGI0ZC1iODM0LWM5NTdjMmE3MjYyNn0AAAAA",
+ "docIdentifier": 81
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738396387,
+ "docshellUUID": "{16b2e3e5-fcf0-45f2-9df2-7b167c44a22e}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezEyMzA4M2YxLWY1YzktNGVkZS1iYzJiLTEzNDM3Yjg1MGQ0Y30AAAAA",
+ "docIdentifier": 82
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451786567,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738396493,
+ "docshellUUID": "{f8695cf1-d667-4f53-b970-57bcc7a8c029}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2Q2MTM1MmY2LWY2NWEtNDQ2ZS1hYmU0LTkxYjZjZDBlZTdlOX0AAAAA",
+ "docIdentifier": 85,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738396494,
+ "docshellUUID": "{f8695cf1-d667-4f53-b970-57bcc7a8c029}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezhlYTgxYTQ4LTllNmItNDliOS1iY2JlLTI0ZGQwMDQ5MjA4Yn0AAAAA",
+ "docIdentifier": 86,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738396495,
+ "docshellUUID": "{1009278f-9c58-4c63-ac7e-e239c816fa69}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2RhNzEzYWEzLTFkOGItNGNmNC1hN2ZjLWMxNzUyOTM2NWFmMX0AAAAA",
+ "docIdentifier": 87
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738396496,
+ "docshellUUID": "{32225ac0-0b7c-4069-b2ca-78b179fd0839}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezM3MzUzZWU2LWU5NzItNGZkZS04OWM5LTIzY2I5N2NkNzEzY30AAAAA",
+ "docIdentifier": 88
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738396497,
+ "docshellUUID": "{470c5de2-944c-4cb2-ac46-e33322567876}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezIxMjFiMTczLTBkN2QtNGU1My04YmIwLTJkNzE2MDQzZDk5Mn0AAAAA",
+ "docIdentifier": 89
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451786716,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738396641,
+ "docshellUUID": "{553fd3fa-36a9-442c-bb7f-5a030d57d011}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezY0MjU2MmJjLTAxMTktNDdhYy1iODRhLWVhOTM2YmY0M2Y2NH0AAAAA",
+ "docIdentifier": 78,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738396642,
+ "docshellUUID": "{553fd3fa-36a9-442c-bb7f-5a030d57d011}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezE0OTczZjhmLWJlNjctNDBjZi1iYjY5LTBkYWYxZjIwNzE2Yn0AAAAA",
+ "docIdentifier": 79,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738396643,
+ "docshellUUID": "{878ab3bc-a999-43c3-99dc-b9434fe13501}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2YwMzk5MjhiLWE5NGMtNDdlNS1hNTkzLTUyMjU5OGNjZjk4ZX0AAAAA",
+ "docIdentifier": 80
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738396644,
+ "docshellUUID": "{60c88f70-13c3-4a9d-ac20-e0df112ccd50}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2E3MGE2MjNjLTI4NTMtNDEzMS1iYjNiLTFiMjZlMzdlOTI1M30AAAAA",
+ "docIdentifier": 81
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738396645,
+ "docshellUUID": "{964d9c55-7ca5-476b-838e-7a9896e8fe70}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezJmMTIyYjQ2LTYxZTItNDE5Yi05ZjFhLWFkMzcwMTk4NWE2MX0AAAAA",
+ "docIdentifier": 82
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451786829,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738396753,
+ "docshellUUID": "{033226aa-1468-48b7-ac8f-289183364049}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezQyMzA0ZGU4LTNjZTQtNGRhYS1hZWE5LTE1YmEzOTRjNGZjNn0AAAAA",
+ "docIdentifier": 83,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738396754,
+ "docshellUUID": "{033226aa-1468-48b7-ac8f-289183364049}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2MyNDdlMGY4LTQ5NWYtNDg5Ny1iZWY0LTJhMTgzZGIzZjQ1Zn0AAAAA",
+ "docIdentifier": 84,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738396755,
+ "docshellUUID": "{43584cab-ac21-4bd8-bc9b-cd5d22599d93}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezU1YjM3MjJiLWRmYWEtNDcyNi1hOTVkLTFkZDUzMTU4NTgwM30AAAAA",
+ "docIdentifier": 85
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738396756,
+ "docshellUUID": "{7266f212-5701-4962-88f6-daf21b0cd491}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2RjMDYzMjZiLTI4M2UtNGY4YS1hNjdkLWFmNGIzZDZlZTRhMH0AAAAA",
+ "docIdentifier": 86
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738396757,
+ "docshellUUID": "{76a8f95b-bf8b-4ec5-b161-8ba52f6afae2}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2U4ZDE2MzEyLTM3MDItNGM3MS04MjA1LWE3MzJjZWI5OTM4N30AAAAA",
+ "docIdentifier": 87
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451786935,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738396862,
+ "docshellUUID": "{03b3a921-78a7-4fe4-916f-e4ab3770d0a7}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezMyN2YxOGE1LTI0Y2QtNDYzNC1iMmI1LWM0MDViYWZhMmZlNX0AAAAA",
+ "docIdentifier": 83,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738396863,
+ "docshellUUID": "{03b3a921-78a7-4fe4-916f-e4ab3770d0a7}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezkwYWEyYzIzLTQ2ZjQtNDQ3My04NzQ3LWFlNTdhOGI4YWU0YX0AAAAA",
+ "docIdentifier": 84,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738396864,
+ "docshellUUID": "{797ed9aa-9c8d-4540-90a1-21a221af9baa}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezE2ZTViZTJiLTExMzQtNDIxZC05ZGI0LTIzZDE5ODAwYzFmN30AAAAA",
+ "docIdentifier": 85
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738396865,
+ "docshellUUID": "{825230d4-e859-444c-8661-b7e2aa63dc33}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2M0MTZlNTI1LThlMGEtNDJmMy05Yjk5LTRkZDVkNDU0ZWM1ZH0AAAAA",
+ "docIdentifier": 86
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738396866,
+ "docshellUUID": "{16b2e3e5-fcf0-45f2-9df2-7b167c44a22e}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezhiNjQyNjQ0LTAyODYtNGQ1ZC1iMDE5LWYzZjNmYjY4YzZjZn0AAAAA",
+ "docIdentifier": 87
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451787055,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738396982,
+ "docshellUUID": "{c7f55732-44a2-4cff-8b10-c73e90c60f96}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezNjNmMxYjI1LTY4ZTEtNGNhNy1iMTkzLWVjZmNkOGY1MTEyYX0AAAAA",
+ "docIdentifier": 90,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738396983,
+ "docshellUUID": "{c7f55732-44a2-4cff-8b10-c73e90c60f96}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2E5MzBlNjNjLWU2Y2UtNDZiNC04MjY4LTIyYjAzZmQ3ODUwMH0AAAAA",
+ "docIdentifier": 91,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738396984,
+ "docshellUUID": "{1009278f-9c58-4c63-ac7e-e239c816fa69}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezk5NTdjNWQ3LTBmNTgtNDc5OS1iNjJhLTBiOTk5MWRlYTA3Mn0AAAAA",
+ "docIdentifier": 92
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738396985,
+ "docshellUUID": "{32225ac0-0b7c-4069-b2ca-78b179fd0839}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezUyZTliNDVmLTk0OWYtNDA3ZS04YjViLTAwN2YxMTBkZDQ5YX0AAAAA",
+ "docIdentifier": 93
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738396986,
+ "docshellUUID": "{470c5de2-944c-4cb2-ac46-e33322567876}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezY3MjQxMmU3LWQwZjUtNDUwMy05ZTc3LTlkZmE3NWQ1OTgwY30AAAAA",
+ "docIdentifier": 94
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451787170,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738397096,
+ "docshellUUID": "{5bd4775d-c379-4093-ba8e-08109694e976}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2Y1NmE4ZTExLTJiYjEtNGIwNy04ZDc1LWEyNzM5OGE0MDJlOX0AAAAA",
+ "docIdentifier": 83,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738397097,
+ "docshellUUID": "{5bd4775d-c379-4093-ba8e-08109694e976}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezZiOTA5YmUyLTE4YzMtNGY3Yy05YmU1LWI5NTg4Mjc1MmM4ZX0AAAAA",
+ "docIdentifier": 84,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738397098,
+ "docshellUUID": "{878ab3bc-a999-43c3-99dc-b9434fe13501}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2ZjN2IwOWU5LWFlZGEtNDA4YS1hYzc4LTFlMzFjYTQwNDk1Nn0AAAAA",
+ "docIdentifier": 85
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738397099,
+ "docshellUUID": "{60c88f70-13c3-4a9d-ac20-e0df112ccd50}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezg0YTA0YTI1LWY1NzMtNDc4MC1iODJlLWVmZDJkMmM2ZGIzOH0AAAAA",
+ "docIdentifier": 86
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738397100,
+ "docshellUUID": "{964d9c55-7ca5-476b-838e-7a9896e8fe70}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezk2ZWYyOGNjLThlYjktNDFkMi1iMzQ3LTIyMDcwMDJlNzBlOX0AAAAA",
+ "docIdentifier": 87
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451787304,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738397229,
+ "docshellUUID": "{406f60a1-6ceb-4e65-882c-e095bd9ab8a3}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2ViYzAzZjI5LTY2OWEtNDFlMi05YjM4LTAwM2M3YTJlMjc4MX0AAAAA",
+ "docIdentifier": 88,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738397230,
+ "docshellUUID": "{406f60a1-6ceb-4e65-882c-e095bd9ab8a3}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezBkMzVkZWE2LTUxZmMtNGVhMS1iZDZjLWJiZjU2NjYzMzBkOX0AAAAA",
+ "docIdentifier": 89,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738397231,
+ "docshellUUID": "{43584cab-ac21-4bd8-bc9b-cd5d22599d93}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2MxOTNjMTdlLWI3MTctNGM4OC04NTA2LTYzYzM3NGMzYzVkNn0AAAAA",
+ "docIdentifier": 90
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738397232,
+ "docshellUUID": "{7266f212-5701-4962-88f6-daf21b0cd491}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2IwNTliZDYzLWI0YmUtNGRjNS05MjAwLTAzNWQ1MjQ4YWNlMH0AAAAA",
+ "docIdentifier": 91
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738397233,
+ "docshellUUID": "{76a8f95b-bf8b-4ec5-b161-8ba52f6afae2}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezk3MThlMzVhLTkwY2UtNGZjNy04MDgzLWMxNWU2NzU0OTllZH0AAAAA",
+ "docIdentifier": 92
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451787446,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738397374,
+ "docshellUUID": "{c526e02d-1ae7-4966-b120-33825e35f03a}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezNlZjViMjdhLTNlYTYtNDdmZi1hOWRjLTcxYTJlYTU5MDQ3NH0AAAAA",
+ "docIdentifier": 88,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738397375,
+ "docshellUUID": "{c526e02d-1ae7-4966-b120-33825e35f03a}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezUyOWE3NzkzLTI2MWEtNDQ0NC04MmM0LWVmODcwNWRjZWFlMn0AAAAA",
+ "docIdentifier": 89,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738397376,
+ "docshellUUID": "{797ed9aa-9c8d-4540-90a1-21a221af9baa}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2FiYzI4OGI2LTAxNTctNDk5OS04MTk0LTAwMzA1Y2MxN2E4Nn0AAAAA",
+ "docIdentifier": 90
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738397377,
+ "docshellUUID": "{825230d4-e859-444c-8661-b7e2aa63dc33}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2FmYTE3YjEzLTE4MTktNDNhMS1iNjU3LWRkMmQ2ODZiNjdkY30AAAAA",
+ "docIdentifier": 91
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738397378,
+ "docshellUUID": "{16b2e3e5-fcf0-45f2-9df2-7b167c44a22e}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezVjYWE3NGY5LTU1MGItNDM5NS1iOTNmLTY4N2IxNjgwZTMyOX0AAAAA",
+ "docIdentifier": 92
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451787557,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738397482,
+ "docshellUUID": "{32a44b4d-bd6b-4a86-8fcb-3bb08d6b3c97}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezRjZTdjMDE5LTcwYTgtNDZiNy1iYzI3LTMzYmEwYWEwMWZjMX0AAAAA",
+ "docIdentifier": 95,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738397483,
+ "docshellUUID": "{32a44b4d-bd6b-4a86-8fcb-3bb08d6b3c97}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2U4OGU4MzYyLWFjYzUtNGQ1Ny1iMzA2LTk3OTU5MWU4ZmUyZX0AAAAA",
+ "docIdentifier": 96,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738397484,
+ "docshellUUID": "{1009278f-9c58-4c63-ac7e-e239c816fa69}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezQ0N2Y5MDdjLTliZGYtNDA0Ni1hMjlhLTM1YTQ5OTAyOTMzOX0AAAAA",
+ "docIdentifier": 97
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738397485,
+ "docshellUUID": "{32225ac0-0b7c-4069-b2ca-78b179fd0839}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezIyOWM5MThiLTg1MzEtNDc3OS1iOWFlLTU4NTIzMTBhMDc4NH0AAAAA",
+ "docIdentifier": 98
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738397486,
+ "docshellUUID": "{470c5de2-944c-4cb2-ac46-e33322567876}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2Q3NDQ4YjVlLWVjOWEtNDRmNC1iNTgyLTNjOTc3ZGQ4MDZjY30AAAAA",
+ "docIdentifier": 99
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451787669,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738397594,
+ "docshellUUID": "{d4dd4095-8426-47ae-a815-c89502165780}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezcwNThjYjg1LTk2YzUtNDBkNi1hOGFkLTdkYjY1NjlhNTI2Nn0AAAAA",
+ "docIdentifier": 88,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738397595,
+ "docshellUUID": "{d4dd4095-8426-47ae-a815-c89502165780}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2IyNjI4ZTViLTgzZWUtNGVhMC1hMTcxLTk5ZWRlZjg1NDMwMH0AAAAA",
+ "docIdentifier": 89,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738397596,
+ "docshellUUID": "{878ab3bc-a999-43c3-99dc-b9434fe13501}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezhmYjA1OGQ2LWJkZDUtNDMxNC1hMzcxLWQ2MjU4ZmI4YTE2N30AAAAA",
+ "docIdentifier": 90
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738397597,
+ "docshellUUID": "{60c88f70-13c3-4a9d-ac20-e0df112ccd50}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2I4N2YzMGJjLTM4NmYtNDg0ZS05NWRiLWIxNWM5MDZlNzc0Yn0AAAAA",
+ "docIdentifier": 91
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738397598,
+ "docshellUUID": "{964d9c55-7ca5-476b-838e-7a9896e8fe70}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2U5OTE0OGZjLTNhN2ItNGQ5NC05ZWVkLTFlMGM1ODUxMTBmZH0AAAAA",
+ "docIdentifier": 92
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451787802,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738397727,
+ "docshellUUID": "{c34a1bbc-720f-47ab-8381-19ddc412cffe}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezEyNzc3MzI0LTU4NmItNDhjNS05YWIyLWU5ZWEwMGIwMjc0Yn0AAAAA",
+ "docIdentifier": 93,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738397728,
+ "docshellUUID": "{c34a1bbc-720f-47ab-8381-19ddc412cffe}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezQwZjNmNDA4LTg2NzMtNGNiNS05ZmNkLTcwYzhlMWIwYzZhNH0AAAAA",
+ "docIdentifier": 94,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738397729,
+ "docshellUUID": "{43584cab-ac21-4bd8-bc9b-cd5d22599d93}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezQ3NWUxYjZkLTE4Y2MtNDRmMS1hNTY3LWI1NDgzNWRkMzMyNH0AAAAA",
+ "docIdentifier": 95
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738397730,
+ "docshellUUID": "{7266f212-5701-4962-88f6-daf21b0cd491}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezFkNGJhMWMxLWRkYTctNDExNC1iMGRmLTlkYzBiMWU4Y2E4Nn0AAAAA",
+ "docIdentifier": 96
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738397731,
+ "docshellUUID": "{76a8f95b-bf8b-4ec5-b161-8ba52f6afae2}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezQzMDRhY2MwLWE3ZWEtNGM1OS1hNGMwLWIxMzA2YjdhMDU1NX0AAAAA",
+ "docIdentifier": 97
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451787934,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "cacheKey": 0,
+ "ID": 3738397860,
+ "docshellUUID": "{221c40fa-3210-415f-869b-d4d279ed5fc8}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezdjOGM3MGM3LWQyZTgtNDAzYS05ZDkyLTViY2MxOTEzMDI2Y30AAAAA",
+ "docIdentifier": 93,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=twitter.com/",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738397861,
+ "docshellUUID": "{221c40fa-3210-415f-869b-d4d279ed5fc8}",
+ "referrer": "http://localhost:8080/?httpsurl=twitter.com/",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezA4ODdlYWNhLTUyZDYtNGM1My1iZjAxLTk2NTk5YjRiZWIzMX0AAAAA",
+ "docIdentifier": 94,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738397862,
+ "docshellUUID": "{797ed9aa-9c8d-4540-90a1-21a221af9baa}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2Q3Yzk0Y2ZkLWI2NGYtNDJlYS04Zjc0LTk4OTk2ODNhYjUxN30AAAAA",
+ "docIdentifier": 95
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738397863,
+ "docshellUUID": "{825230d4-e859-444c-8661-b7e2aa63dc33}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2E5ZmE3OGZiLTYyY2MtNDgzZi1iNWE0LTY5OGQ0OTIwZDcwMn0AAAAA",
+ "docIdentifier": 96
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738397864,
+ "docshellUUID": "{16b2e3e5-fcf0-45f2-9df2-7b167c44a22e}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2IyODA0N2M2LTc5YTAtNDgzYy05NjVjLTg4N2QzZjU5OWY4M30AAAAA",
+ "docIdentifier": 97
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451788059,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 2,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAALGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAAAXAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAAAVAAAAFf////8BAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "http://localhost:8080/?httpsurl=twitter.com/Telegraph/status/437962536407666688/photo/1",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738397986,
+ "docshellUUID": "{c88a8410-8d3d-479c-b38a-db837696dfcd}",
+ "referrer": "http://localhost:8080/?url=t.co/FslmElOVwY",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezg1N2I1NTNlLTU0Y2UtNGRlZi05M2Y2LTIyZDg2ZGI3MmQyM30AAAAA",
+ "docIdentifier": 100,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738397987,
+ "docshellUUID": "{e8979a67-52ae-4d6e-8b94-8de24a2a0733}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezc5ZGRiYzZjLTFhOTYtNDk2My04YTAyLWE1MWE5MDMxYzgwNX0AAAAA",
+ "docIdentifier": 101
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738397988,
+ "docshellUUID": "{946a54d1-68a3-41e3-9a78-60a643045e94}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezQ0MjQ3M2MwLTM1NzEtNGUzNy1hYjIwLWI5N2FkOTM0ZmU0MX0AAAAA",
+ "docIdentifier": 102
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738397989,
+ "docshellUUID": "{c2df782f-1821-48ce-a941-d9d492f5a71b}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2U4YzFhYWJlLWI1N2UtNDA1Yi1hMTIzLWRhOTU5MzgwZTBmZn0AAAAA",
+ "docIdentifier": 103
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451788199,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 1,
+ "storage": {
+ "http://localhost:8080": {
+ "ScribeTransport": "{\"internal_referer\":null,\"client_version\":\"macaw-swift\",\"items\":[{}],\"associations\":{\"2\":{\"association_id\":null,\"association_type\":3},\"3\":{\"association_id\":null,\"association_type\":3}},\"message\":\"//twitter.com/Telegraph/status/437962536407666688/photo/1/large\",\"event_namespace\":{\"client\":\"web\",\"page\":\"permalink\",\"section\":\"permalink\",\"element\":\"platform_photo_card\",\"action\":\"show\"},\"triggered_on\":1393256185388,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":null,\"client_version\":\"macaw-swift\",\"event_value\":0,\"event_namespace\":{\"client\":\"web\",\"page\":\"permalink\",\"section\":\"permalink\",\"component\":\"reduced_action_queue\",\"action\":\"captured\"},\"triggered_on\":1393256185472,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":null,\"client_version\":\"macaw-swift\",\"event_value\":0,\"event_namespace\":{\"client\":\"web\",\"page\":\"permalink\",\"section\":\"permalink\",\"component\":\"reduced_action_queue\",\"action\":\"ignored\"},\"triggered_on\":1393256185473,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":null,\"client_version\":\"macaw-swift\",\"event_value\":0,\"event_namespace\":{\"client\":\"web\",\"page\":\"permalink\",\"section\":\"permalink\",\"component\":\"reduced_action_queue\",\"action\":\"direct\"},\"triggered_on\":1393256185473,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":null,\"client_version\":\"macaw-swift\",\"event_value\":0,\"event_namespace\":{\"client\":\"web\",\"page\":\"permalink\",\"section\":\"permalink\",\"component\":\"reduced_action_queue\",\"action\":\"all\"},\"triggered_on\":1393256185473,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAAV2h0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9dHdpdHRlci5jb20vVGVsZWdyYXBoL3N0YXR1cy80Mzc5NjI1MzY0MDc2NjY2ODgvcGhvdG8vMQAAAAAAAAAEAAAABwAAAA4AAAAH/////wAAAAf/////AAAABwAAAAkAAAAVAAAAQgAAABUAAAABAAAAFQAAAAEAAAAWAAAAAAAAABb/////AAAAAP////8AAAAXAAAAQAAAABX/////AQAAAAAAAAAAAAAAAA=="
+ }, {
+ "entries": [{
+ "url": "http://localhost:8080/?httpsurl=www.google.fr/search?q=google+docs&ie=utf-8&oe=utf-8&rls=org.mozilla:en-US:unofficial&client=firefox-nightly&channel=fflb&gfe_rd=ctrl&ei=aGcLU8r5I4Hf8geZ5YHABg&gws_rd=cr",
+ "title": "google docs - Recherche Google",
+ "cacheKey": 0,
+ "ID": 3738398126,
+ "docshellUUID": "{5a45bd4d-c522-4b3d-b59c-15db35d421cd}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezVkYTFkYmQwLTViZjAtNDg3Mi04NWJjLTdmODI0MzFlOTg1MH0AAAAA",
+ "docIdentifier": 93,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=accounts.google.com/ServiceLogin?service=writely&passive=1209600&continue=https%3A%2F%2Fdocs.google.com%2F%3Fhl%3Dfr%26urp%3Dhttps%3A%2F%2Fwww.google.fr%2Furl%3Fsa%253Dt%2526rct%253Dj%2526q%253D%2526esrc%253Ds%2526sou%23&followup=https%3A%2F%2Fdocs.google.com%2F%3Fhl%3Dfr%26urp%3Dhttps%3A%2F%2Fwww.google.fr%2Furl%3Fsa%253Dt%2526rct%253Dj%2526q%253D%2526esrc%253Ds%2526sou&ltmpl=homepage&hl=fr",
+ "title": "Google Drive",
+ "cacheKey": 0,
+ "ID": 3738398127,
+ "docshellUUID": "{5a45bd4d-c522-4b3d-b59c-15db35d421cd}",
+ "referrer": "http://localhost:8080/?httpsurl=docs.google.com/?hl=fr",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2VkODJiZTMyLTJhMjQtNGY1ZS04YThlLTI1MDUwZGYzOTUzZX0AAAAA",
+ "docIdentifier": 94,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?httpsurl=drive.google.com/?hl=fr&urp=http://localhost:8080/?httpsurl=www.google.fr/url?sa%3Dt%26rct%3Dj%26q%3D%26esrc%3Ds%26sou&authuser=0#my-drive",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738398128,
+ "docshellUUID": "{5a45bd4d-c522-4b3d-b59c-15db35d421cd}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezk0Zjc0ZjQxLTFmMGUtNDdmMC1iNTIxLTk0MDkxMDRkODM4OX0AAAAA",
+ "docIdentifier": 95,
+ "persist": true
+ }],
+ "lastAccessed": 1528451788495,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 3,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAAqmh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9ZHJpdmUuZ29vZ2xlLmNvbS8/aGw9ZnImdXJwPWh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9d3d3Lmdvb2dsZS5mci91cmw/c2ElM0R0JTI2cmN0JTNEaiUyNnElM0QlMjZlc3JjJTNEcyUyNnNvdSZhdXRodXNlcj0wI215LWRyaXZlAAAAAAAAAAQAAAAHAAAADgAAAAf/////AAAAB/////8AAAAHAAAACQAAABUAAACVAAAAFQAAAAEAAAAVAAAAAQAAABYAAAAAAAAAFv////8AAAAA/////wAAABcAAACKAAAAogAAAAgBAAAAAAAAAAAAAAAA"
+ }, {
+ "entries": [{
+ "url": "http://localhost:8080/?httpsurl=docs.google.com/drawings/d/1Kq65yVqWT7HxrGLeNdxAipqbX7P4OuS4Md325R0edrA/edit",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738398427,
+ "docshellUUID": "{ad22e4e1-16ae-4222-8df5-45138c4cd7d4}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezA5YmY5MjhkLTM0YzgtNDkyNS1iZTlmLTFmODI5OTYwODhiY30AAAAA",
+ "docIdentifier": 98,
+ "structuredCloneState": "AAAAAAAA//8=",
+ "structuredCloneVersion": 2,
+ "persist": true
+ }],
+ "lastAccessed": 1528451788780,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 1,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAAbGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9ZG9jcy5nb29nbGUuY29tL2RyYXdpbmdzL2QvMUtxNjV5VnFXVDdIeHJHTGVOZHhBaXBxYlg3UDRPdVM0TWQzMjVSMGVkckEvZWRpdAAAAAAAAAAEAAAABwAAAA4AAAAH/////wAAAAf/////AAAABwAAAAkAAAAVAAAAVwAAABUAAAABAAAAFQAAAAEAAAAWAAAAAAAAABb/////AAAAAP////8AAAAXAAAAVQAAABX/////AQAAAAAAAAAAAAAAAA=="
+ }, {
+ "entries": [{
+ "url": "http://localhost:8080/?httpsurl=docs.google.com/document/d/1dm2Z_yaEU506PHeJE64BReXQyIlJgJk7mXOjKx36MbE/edit",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738353580,
+ "docshellUUID": "{be70618a-6e3d-4859-989a-298fcb3027ad}",
+ "referrer": "http://localhost:8080/?httpsurl=docs.google.com/drawings/d/1Kq65yVqWT7HxrGLeNdxAipqbX7P4OuS4Md325R0edrA/edit",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezZjYWVkOGIxLWNhZjktNGIxNy04YzdiLTE0OWFjODBlZjEzOX0AAAAA",
+ "docIdentifier": 1,
+ "structuredCloneState": "AAAAAAAA//8=",
+ "structuredCloneVersion": 2,
+ "persist": true
+ }],
+ "lastAccessed": 1528451857677,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 1,
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAAbGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/aHR0cHN1cmw9ZG9jcy5nb29nbGUuY29tL2RvY3VtZW50L2QvMWRtMlpfeWFFVTUwNlBIZUpFNjRCUmVYUXlJbEpnSms3bVhPakt4MzZNYkUvZWRpdAAAAAAAAAAEAAAABwAAAA4AAAAH/////wAAAAf/////AAAABwAAAAkAAAAVAAAAVwAAABUAAAABAAAAFQAAAAEAAAAWAAAAAAAAABb/////AAAAAP////8AAAAXAAAAVQAAABX/////AQAAAAAAAAAAAAAAAA=="
+ }, {
+ "entries": [{
+ "url": "http://localhost:8080/?httpsurl=www.google.fr/search?q=movies&ie=utf-8&oe=utf-8&rls=org.mozilla:en-US:unofficial&client=firefox-nightly&channel=fflb&gfe_rd=ctrl&ei=U6UMU8XlJYHf8geZ5YHABg&gws_rd=cr",
+ "title": "movies - Google Search",
+ "cacheKey": 0,
+ "ID": 3738391809,
+ "docshellUUID": "{9dfafab7-31b0-424c-b085-d3a4df8906de}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2M1MGY5NjljLTMxNzItNDdhNS1hNzdkLWM1MDQyZTcwYzU5Nn0AAAAA",
+ "docIdentifier": 53,
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?url=www.youtube.com/user/YouTubeMoviesFR",
+ "title": "Films - YouTube",
+ "cacheKey": 0,
+ "ID": 3738391810,
+ "docshellUUID": "{9dfafab7-31b0-424c-b085-d3a4df8906de}",
+ "referrer": "http://localhost:8080/?url=www.google.fr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CDUQFjAB&url=http%3A%2F%2Fwww.youtube.com%2Fuser%2Fmovies&ei=U6UMU9fnKIOb0AXAgYFg&usg=AFQjCNHrmNe-ykFP-4R2NPUvq_YQh3LfQw&sig2=k395eaN4vi_NxXCeQwBYtg&bvm=bv.61725948,d.d2k",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2NkM2FkMWM2LTMxYmUtNGNjNy1iNWE0LWQwM2ZiNDAxYzc4ZH0AAAAA",
+ "docIdentifier": 54,
+ "structuredCloneState": "AAAAAAgA//8LAAAABAD//3MAcABmAC0AcgBlAGYAZQByAGUAcgAAAO0AAAAEAP//aAB0AHQAcAA6AC8ALwB3AHcAdwAuAGcAbwBvAGcAbABlAC4AZgByAC8AdQByAGwAPwBzAGEAPQB0ACYAcgBjAHQAPQBqACYAcQA9ACYAZQBzAHIAYwA9AHMAJgBzAG8AdQByAGMAZQA9AHcAZQBiACYAYwBkAD0AMgAmAHYAZQBkAD0AMABDAEQAVQBRAEYAagBBAEIAJgB1AHIAbAA9AGgAdAB0AHAAJQAzAEEAJQAyAEYAJQAyAEYAdwB3AHcALgB5AG8AdQB0AHUAYgBlAC4AYwBvAG0AJQAyAEYAdQBzAGUAcgAlADIARgBtAG8AdgBpAGUAcwAmAGUAaQA9AFUANgBVAE0AVQA5AGYAbgBLAEkATwBiADAAQQBYAEEAZwBZAEYAZwAmAHUAcwBnAD0AQQBGAFEAagBDAE4ASAByAG0ATgBlAC0AeQBrAEYAUAAtADQAUgAyAE4AUABVAHYAcQBfAFkAUQBoADMATABmAFEAdwAmAHMAaQBnADIAPQBrADMAOQA1AGUAYQBOADQAdgBpAF8ATgB4AFgAQwBlAFEAdwBCAFkAdABnACYAYgB2AG0APQBiAHYALgA2ADEANwAyADUAOQA0ADgALABkAC4AZAAyAGsAAAAAAAAADQAAAAQA//9zAHAAZgAtAHQAaQBtAGUAcwB0AGEAbQBwAAAAAAAAAAAwaV6WRnRCAAAAAAAA//8=",
+ "structuredCloneVersion": 2,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738391811,
+ "docshellUUID": "{269707f0-f4f5-450b-a5da-ef1fe3bad30d}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezdmYWY2MWEyLTBiNDgtNGNiMC1hYjlmLTRkYjNmMzJkZGJmNn0AAAAA",
+ "docIdentifier": 55
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738391812,
+ "docshellUUID": "{cde4b193-6588-492d-b575-85c5796d1a7c}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezE1YzM0Y2Q1LTJhMDQtNGU0MS1iZTdiLTU0NmE5MmM5MmU2Zn0AAAAA",
+ "docIdentifier": 56
+ }, {
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738391813,
+ "docshellUUID": "{58a19b11-699b-4d3c-b6d8-b796fd6ba9f1}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2VkODY5MzY2LTQwNzMtNDQxNy1iMjcxLTI4NmNjNzYzNjBmYX0AAAAA",
+ "docIdentifier": 57
+ }],
+ "persist": true
+ }, {
+ "url": "http://localhost:8080/?url=www.youtube.com/watch?v=gYCzg8xg4c0&feature=c4-overview",
+ "title": "Apache2 Ubuntu Default Page: It works",
+ "cacheKey": 0,
+ "ID": 3738391814,
+ "docshellUUID": "{9dfafab7-31b0-424c-b085-d3a4df8906de}",
+ "referrer": "http://localhost:8080/?url=www.youtube.com/user/YouTubeMoviesFR",
+ "referrerPolicy": 0,
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6ezZhZWM0YTdlLTBmYzUtNDc3YS05MTJlLWI3OTcwOTEzYzM2ZH0AAAAA",
+ "docIdentifier": 58,
+ "structuredCloneState": "AAAAAAAA//8=",
+ "structuredCloneVersion": 2,
+ "children": [{
+ "url": "about:blank",
+ "title": "about:blank",
+ "cacheKey": 0,
+ "ID": 3738391815,
+ "docshellUUID": "{9c3dc524-a7c4-4e3b-9152-8ef3114a6db4}",
+ "resultPrincipalURI": null,
+ "triggeringPrincipal_base64": "vQZuXxRvRHKDMXv9BbHtkAAAAAAAAAAAwAAAAAAAAEYAAAA4bW96LW51bGxwcmluY2lwYWw6e2U3YzExOWNlLTMwOTYtNGZjOS05NjEwLTE4YzA2MmViOWE1Yn0AAAAA",
+ "docIdentifier": 59
+ }],
+ "persist": true
+ }],
+ "lastAccessed": 1528451792927,
+ "hidden": false,
+ "attributes": {},
+ "userContextId": 0,
+ "index": 3,
+ "scroll": {
+ "scroll": "0,374"
+ },
+ "image": "http://localhost:8080/favicon.ico",
+ "iconLoadingPrincipal": "ZT4OTT7kRfqycpfCC8AeuAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QJIHOlRteE8wkTq4cYEyCMYAAAACAAAfkAAAAFABAAAAUmh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8/dXJsPXd3dy55b3V0dWJlLmNvbS93YXRjaD92PWdZQ3pnOHhnNGMwJmZlYXR1cmU9YzQtb3ZlcnZpZXcAAAAAAAAABAAAAAcAAAAOAAAAB/////8AAAAH/////wAAAAcAAAAJAAAAFQAAAD0AAAAVAAAAAQAAABUAAAABAAAAFgAAAAAAAAAW/////wAAAAD/////AAAAFwAAADsAAAAV/////wEAAAAAAAAAAAAAAAA="
+ }],
+ "selected": 39,
+ "_closedTabs": [{
+ "state": {
+ "entries": [{
+ "url": "http://localhost:8080/?url=swimswam.com/video-walk-2013-junior-world-championships-hamdem-center/",
+ "title": "Video Walk Through: 2013 Junior World Championships, Hamdan Center",
+ "ID": 17,
+ "docshellID": 15,
+ "docIdentifier": 17,
+ "children": [{
+ "url": "http://localhost:8080/?url=player.vimeo.com/video/73623354?title=0&byline=0&portrait=0",
+ "title": "Hamdam Centre Walk Thru at World Jnr Champs from SWIMSWAM on Vimeo",
+ "ID": 19,
+ "docshellID": 16,
+ "referrer": "http://localhost:8080/?url=swimswam.com/video-walk-2013-junior-world-championships-hamdem-center/",
+ "docIdentifier": 19
+ }, {
+ "url": "http://localhost:8080/?httpsurl=www.facebook.com/plugins/like.php?href=http%3A%2F%2Fswimswam.com%2Fvideo-walk-2013-junior-world-championships-hamdem-center%2F&layout=box_count&show_faces=false&width=50&action=like&colorscheme=light&height=90",
+ "ID": 24,
+ "docshellID": 17,
+ "referrer": "http://localhost:8080/?url=swimswam.com/video-walk-2013-junior-world-championships-hamdem-center/",
+ "docIdentifier": 24
+ }, {
+ "url": "http://localhost:8080/?httpsurl=www.facebook.com/plugins/like.php?href=http%3A%2F%2Fswimswam.com%2Fvideo-walk-2013-junior-world-championships-hamdem-center%2F&layout=button_count&show_faces=false&width=85&action=like&colorscheme=light&height=21",
+ "title": "Facebook",
+ "ID": 25,
+ "docshellID": 19,
+ "referrer": "http://localhost:8080/?url=swimswam.com/video-walk-2013-junior-world-championships-hamdem-center/",
+ "docIdentifier": 25
+ }]
+ }],
+ "lastAccessed": 1393256151290,
+ "hidden": false,
+ "attributes": {},
+ "image": "http://localhost:8080/?url=cdn.swimswam.com/wp-content/themes/swimswam/favicon.ico",
+ "index": 1
+ },
+ "title": "Video Walk Through: 2013 Junior World Championships, Hamdan Center",
+ "image": "http://localhost:8080/?url=cdn.swimswam.com/wp-content/themes/swimswam/favicon.ico",
+ "pos": 1,
+ "closedAt": 1393256151290
+ }, {
+ "state": {
+ "entries": [{
+ "url": "about:newtab",
+ "title": "New Tab",
+ "ID": 17,
+ "docshellID": 18,
+ "owner_b64": "SmIS26zLEdO3ZQBgsLbOywAAAAAAAAAAwAAAAAAAAEY=",
+ "docIdentifier": 17
+ }],
+ "lastAccessed": 1393256966807,
+ "userTypedValue": "sess",
+ "userTypedClear": 0,
+ "hidden": false,
+ "attributes": {},
+ "image": null,
+ "index": 1
+ },
+ "title": "New Tab",
+ "image": null,
+ "pos": 4,
+ "closedAt": 1393256966808
+ }, {
+ "state": {
+ "entries": [{
+ "url": "http://localhost:8080/?httpsurl=docs.google.com/presentation/d/1oTncQrrq06b1ow-BdKkaFaNr5IlZaWQEhqjsNSgcEdM/edit#slide=id.i0",
+ "title": "Untitled Presentation - Google Drive",
+ "ID": 45,
+ "docshellID": 38,
+ "referrer": "http://localhost:8080/?httpsurl=drive.google.com/?hl=fr&urp=http://localhost:8080/?httpsurl=www.google.fr/url?sa%3Dt%26rct%3Dj%26q%3D%26esrc%3Ds%26sou&authuser=0",
+ "docIdentifier": 46,
+ "structuredCloneState": "AAAAAAAA//8=",
+ "structuredCloneVersion": 2
+ }],
+ "lastAccessed": 1393256660847,
+ "hidden": false,
+ "attributes": {},
+ "image": "http://localhost:8080/?httpsurl=ssl.gstatic.com/docs/presentations/images/favicon4.ico",
+ "index": 1
+ },
+ "title": "Untitled Presentation - Google Drive",
+ "image": "http://localhost:8080/?httpsurl=ssl.gstatic.com/docs/presentations/images/favicon4.ico",
+ "pos": 4,
+ "closedAt": 1393256660847
+ }, {
+ "state": {
+ "entries": [{
+ "url": "http://localhost:8080/?httpsurl=docs.google.com/document/d/1lzeZ7lKYsBq1mXs6I1KwNAF4gbrCR7qVW1jr_5Ka0tQ/edit",
+ "title": "Untitled document - Google Drive",
+ "ID": 51,
+ "docshellID": 45,
+ "referrer": "http://localhost:8080/?httpsurl=drive.google.com/?hl=fr&urp=http://localhost:8080/?httpsurl=www.google.fr/url?sa%3Dt%26rct%3Dj%26q%3D%26esrc%3Ds%26sou&authuser=0",
+ "docIdentifier": 52,
+ "structuredCloneState": "AAAAAAAA//8=",
+ "structuredCloneVersion": 2
+ }],
+ "lastAccessed": 1393256601337,
+ "hidden": false,
+ "attributes": {},
+ "image": "http://localhost:8080/?httpsurl=ssl.gstatic.com/docs/documents/images/kix-favicon6.ico",
+ "index": 1
+ },
+ "title": "Untitled document - Google Drive",
+ "image": "http://localhost:8080/?httpsurl=ssl.gstatic.com/docs/documents/images/kix-favicon6.ico",
+ "pos": 3,
+ "closedAt": 1393256601337
+ }, {
+ "state": {
+ "entries": [{
+ "url": "http://localhost:8080/?httpsurl=docs.google.com/spreadsheet/ccc?key=0AsDW-iLj4J3pdEFaYkRmajhsMTJoTTd4U2k4V1E4U2c&usp=drive_web",
+ "title": "SessionFile.read() - Google Drive",
+ "ID": 39,
+ "docshellID": 33,
+ "referrer": "http://localhost:8080/?httpsurl=drive.google.com/?hl=fr&urp=http://localhost:8080/?httpsurl=www.google.fr/url?sa%3Dt%26rct%3Dj%26q%3D%26esrc%3Ds%26sou&authuser=0",
+ "docIdentifier": 40,
+ "structuredCloneState": "AAAAAAAA//8=",
+ "structuredCloneVersion": 2
+ }, {
+ "url": "http://localhost:8080/?httpsurl=docs.google.com/spreadsheet/ccc?key=0AsDW-iLj4J3pdEFaYkRmajhsMTJoTTd4U2k4V1E4U2c&usp=drive_web#gid=0",
+ "title": "SessionFile.read()",
+ "ID": 40,
+ "docshellID": 33,
+ "docIdentifier": 40
+ }],
+ "lastAccessed": 1393256373871,
+ "hidden": false,
+ "attributes": {},
+ "image": "http://localhost:8080/?httpsurl=docs.google.com/favicon.ico",
+ "index": 2,
+ "pageStyle": {
+ "pageStyle": "gridCss"
+ }
+ },
+ "title": "SessionFile.read()",
+ "image": "http://localhost:8080/?httpsurl=docs.google.com/favicon.ico",
+ "pos": 3,
+ "closedAt": 1393256373871
+ }, {
+ "state": {
+ "entries": [{
+ "url": "http://localhost:8080/?httpsurl=github.com/andrewray/iocamljs",
+ "title": "andrewray/iocamljs · GitHub",
+ "ID": 16,
+ "docshellID": 16,
+ "referrer": "http://localhost:8080/?httpsurl=t.co/Lgc1R8XU0T",
+ "docIdentifier": 16
+ }],
+ "lastAccessed": 1393256206748,
+ "hidden": false,
+ "attributes": {},
+ "image": "http://localhost:8080/?httpsurl=github.com/favicon.ico",
+ "index": 1,
+ "scroll": {
+ "scroll": "0,625"
+ }
+ },
+ "title": "andrewray/iocamljs · GitHub",
+ "image": "http://localhost:8080/?httpsurl=github.com/favicon.ico",
+ "pos": 2,
+ "closedAt": 1393256298987
+ }],
+ "busy": false,
+ "width": 960,
+ "height": 521,
+ "screenX": 2988,
+ "screenY": 443,
+ "sizemode": "normal",
+ "zIndex": 2
+ }],
+ "selectedWindow": 2,
+ "_closedWindows": [],
+ "session": {
+ "lastUpdate": 1528451857947,
+ "startTime": 1393256133774,
+ "recentCrashes": 0
+ },
+ "global": {},
+ "cookies": []
+} \ No newline at end of file
diff --git a/testing/talos/talos/startup_test/sessionrestore/profile-manywindows/sessionstore.jsonlz4 b/testing/talos/talos/startup_test/sessionrestore/profile-manywindows/sessionstore.jsonlz4
new file mode 100644
index 0000000000..66cf54d02e
--- /dev/null
+++ b/testing/talos/talos/startup_test/sessionrestore/profile-manywindows/sessionstore.jsonlz4
Binary files differ
diff --git a/testing/talos/talos/startup_test/sessionrestore/profile/sessionCheckpoints.json b/testing/talos/talos/startup_test/sessionrestore/profile/sessionCheckpoints.json
new file mode 100644
index 0000000000..e02c421c3b
--- /dev/null
+++ b/testing/talos/talos/startup_test/sessionrestore/profile/sessionCheckpoints.json
@@ -0,0 +1,11 @@
+{
+ "profile-after-change": true,
+ "final-ui-startup": true,
+ "sessionstore-windows-restored": true,
+ "quit-application-granted": true,
+ "quit-application": true,
+ "sessionstore-final-state-write-complete": true,
+ "profile-change-net-teardown": true,
+ "profile-change-teardown": true,
+ "profile-before-change": true
+}
diff --git a/testing/talos/talos/startup_test/sessionrestore/profile/sessionstore.js b/testing/talos/talos/startup_test/sessionrestore/profile/sessionstore.js
new file mode 100644
index 0000000000..78163db192
--- /dev/null
+++ b/testing/talos/talos/startup_test/sessionrestore/profile/sessionstore.js
@@ -0,0 +1,6203 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+{
+ "windows": [
+ {
+ "tabs": [
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 6,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=www.facebook.com\/",
+ "title": "Welcome to Facebook - Log In, Sign Up or Learn More",
+ "ID": 9,
+ "docshellID": 6,
+ "docIdentifier": 9
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=www.facebook.com\/checkpoint\/?next",
+ "title": "Facebook",
+ "ID": 10,
+ "docshellID": 6,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=www.facebook.com\/",
+ "docIdentifier": 10
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=www.facebook.com\/checkpoint\/?next",
+ "title": "Facebook",
+ "cacheKey": 1393256027,
+ "ID": 11,
+ "docshellID": 6,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=www.facebook.com\/checkpoint\/?next",
+ "docIdentifier": 11
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=www.facebook.com\/checkpoint\/?next",
+ "title": "Facebook",
+ "cacheKey": 1393256028,
+ "ID": 12,
+ "docshellID": 6,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=www.facebook.com\/checkpoint\/?next",
+ "docIdentifier": 12
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=www.facebook.com\/checkpoint\/?next",
+ "title": "Facebook",
+ "cacheKey": 1393256029,
+ "ID": 13,
+ "docshellID": 6,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=www.facebook.com\/checkpoint\/?next",
+ "docIdentifier": 13
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=www.facebook.com\/",
+ "title": "Facebook",
+ "ID": 14,
+ "docshellID": 6,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=www.facebook.com\/checkpoint\/?next",
+ "docIdentifier": 14,
+ "structuredCloneState": "GQAAAAQA\/\/9oAHQAdABwAHMAOgAvAC8AdwB3AHcALgBmAGEAYwBlAGIAbwBvAGsALgBjAG8AbQAvAAAAAAAAAA==",
+ "structuredCloneVersion": 2
+ }
+ ]
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "about:home",
+ "title": "Nightly Start Page",
+ "ID": 2,
+ "docshellID": 5,
+ "docIdentifier": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "title": "Twitter",
+ "ID": 6,
+ "docshellID": 5,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=twitter.com\/",
+ "docIdentifier": 6,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 7,
+ "docshellID": 9,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 7
+ },
+ {
+ "url": "about:blank",
+ "ID": 8,
+ "docshellID": 10,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 8
+ },
+ {
+ "url": "about:blank",
+ "ID": 9,
+ "docshellID": 11,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAFGh0dHBzOi8vdHdpdHRlci5jb20vAAAAAAAAAAUAAAAIAAAACwAAAAj\/\/\/\/\/AAAACP\/\/\/\/8AAAAIAAAACwAAABMAAAABAAAAEwAAAAEAAAATAAAAAQAAABQAAAAAAAAAFP\/\/\/\/8AAAAA\/\/\/\/\/wAAABP\/\/\/\/\/AAAAE\/\/\/\/\/8BAAAAAAAAAAAAAQHelHLQgDQR05OZABBLoP1AOV\/gRX0YStuj\/a+YyKGvEQAAAAL\/\/\/\/\/AAABuwEAAAAUaHR0cHM6Ly90d2l0dGVyLmNvbS8AAAAAAAAABQAAAAgAAAALAAAACP\/\/\/\/8AAAAI\/\/\/\/\/wAAAAgAAAALAAAAEwAAAAEAAAATAAAAAQAAABMAAAABAAAAFAAAAAAAAAAU\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAE\/\/\/\/\/8AAAAT\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAA",
+ "docIdentifier": 9
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256652207,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 2,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"url\":\"http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs\",\"items\":[{\"position\":4,\"id\":\"437966178300882944\",\"item_type\":0}],\"message\":\"http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T\",\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet\",\"action\":\"open_link\"},\"triggered_on\":1393256192216,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256261047,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"send_tweet\"},\"triggered_on\":1393256261081,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"id\":\"437974593618198528\",\"item_type\":0}],\"message\":2,\"event_info\":0,\"format_version\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_box\",\"element\":\"tweet_box\",\"action\":\"entities\"},\"triggered_on\":1393256261081,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256467268,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"items\":[{\"position\":0,\"id\":\"437975419758080001\",\"item_type\":0}],\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"tweet_stream\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256649260,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":\"\/\",\"client_version\":\"macaw-swift\",\"woeid\":1,\"referring_event\":\"newer\",\"items\":[{\"name\":\"#RoamingBouygues\",\"item_type\":8,\"item_query\":\"#RoamingBouygues\",\"position\":0,\"promoted_id\":17833},{\"name\":\"#JeMeRappelleQuEnPrimaire\",\"item_type\":8,\"item_query\":\"#JeMeRappelleQuEnPrimaire\",\"position\":1},{\"name\":\"#LRT\",\"item_type\":8,\"item_query\":\"#LRT\",\"position\":2},{\"name\":\"#LOSCOL\",\"item_type\":8,\"item_query\":\"#LOSCOL\",\"position\":3},{\"name\":\"#enqueteexclusive\",\"item_type\":8,\"item_query\":\"#enqueteexclusive\",\"position\":4},{\"name\":\"#TeamDubuisson\",\"item_type\":8,\"item_query\":\"#TeamDubuisson\",\"position\":5},{\"name\":\"Talking Angela\",\"item_type\":8,\"item_query\":\"Talking Angela\",\"position\":6},{\"name\":\"SFR\",\"item_type\":8,\"item_query\":\"SFR\",\"position\":7},{\"name\":\"wAllah\",\"item_type\":8,\"item_query\":\"wAllah\",\"position\":8},{\"name\":\"Verts\",\"item_type\":8,\"item_query\":\"Verts\",\"position\":9}],\"promoted\":true,\"event_initiator\":2,\"event_namespace\":{\"client\":\"web\",\"page\":\"home\",\"section\":\"home\",\"component\":\"trends\",\"element\":\"newer\",\"action\":\"results\"},\"triggered_on\":1393256947261,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='page-container']\/xhtml:div[2]\/xhtml:div\/xhtml:div[2]\/xhtml:form\/xhtml:div\/xhtml:textarea[@name='status']": "So, let's see how much Twitter impacts @Firefox Session Restore #perf."
+ },
+ "id": {
+ "age-gate-year": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-month": {
+ "selectedIndex": -1,
+ "value": ""
+ },
+ "age-gate-day": {
+ "selectedIndex": -1,
+ "value": ""
+ }
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/"
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=twitter.com\/Telegraph\/status\/437962536407666688\/photo\/1",
+ "title": "Twitter \/ Telegraph: Harry Potter stars win stage ...",
+ "ID": 11,
+ "docshellID": 12,
+ "referrer": "http:\/\/localhost:8080/?url=t.co\/FslmElOVwY",
+ "docIdentifier": 11,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 12,
+ "docshellID": 13,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAFABAAAAP2h0dHBzOi8vdHdpdHRlci5jb20vVGVsZWdyYXBoL3N0YXR1cy80Mzc5NjI1MzY0MDc2NjY2ODgvcGhvdG8vMQAAAAAAAAAFAAAACAAAAAsAAAAI\/\/\/\/\/wAAAAj\/\/\/\/\/AAAACAAAAAsAAAATAAAALAAAABMAAAAsAAAAEwAAACsAAAA+AAAAAQAAAD7\/\/\/\/\/AAAAAP\/\/\/\/8AAAAT\/\/\/\/\/wAAABP\/\/\/\/\/AQAAAAAAAAAAAAEB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAP2h0dHBzOi8vdHdpdHRlci5jb20vVGVsZWdyYXBoL3N0YXR1cy80Mzc5NjI1MzY0MDc2NjY2ODgvcGhvdG8vMQAAAAAAAAAFAAAACAAAAAsAAAAI\/\/\/\/\/wAAAAj\/\/\/\/\/AAAACAAAAAsAAAATAAAALAAAABMAAAAsAAAAEwAAACsAAAA+AAAAAQAAAD7\/\/\/\/\/AAAAAP\/\/\/\/8AAAAT\/\/\/\/\/wAAABP\/\/\/\/\/AQAAAAAAAAAAAAEAAAAAAAA=",
+ "docIdentifier": 12
+ },
+ {
+ "url": "about:blank",
+ "ID": 13,
+ "docshellID": 14,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAFABAAAAP2h0dHBzOi8vdHdpdHRlci5jb20vVGVsZWdyYXBoL3N0YXR1cy80Mzc5NjI1MzY0MDc2NjY2ODgvcGhvdG8vMQAAAAAAAAAFAAAACAAAAAsAAAAI\/\/\/\/\/wAAAAj\/\/\/\/\/AAAACAAAAAsAAAATAAAALAAAABMAAAAsAAAAEwAAACsAAAA+AAAAAQAAAD7\/\/\/\/\/AAAAAP\/\/\/\/8AAAAT\/\/\/\/\/wAAABP\/\/\/\/\/AQAAAAAAAAAAAAEB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAP2h0dHBzOi8vdHdpdHRlci5jb20vVGVsZWdyYXBoL3N0YXR1cy80Mzc5NjI1MzY0MDc2NjY2ODgvcGhvdG8vMQAAAAAAAAAFAAAACAAAAAsAAAAI\/\/\/\/\/wAAAAj\/\/\/\/\/AAAACAAAAAsAAAATAAAALAAAABMAAAAsAAAAEwAAACsAAAA+AAAAAQAAAD7\/\/\/\/\/AAAAAP\/\/\/\/8AAAAT\/\/\/\/\/wAAABP\/\/\/\/\/AQAAAAAAAAAAAAEAAAAAAAA=",
+ "docIdentifier": 13
+ },
+ {
+ "url": "about:blank",
+ "ID": 14,
+ "docshellID": 15,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAFABAAAAP2h0dHBzOi8vdHdpdHRlci5jb20vVGVsZWdyYXBoL3N0YXR1cy80Mzc5NjI1MzY0MDc2NjY2ODgvcGhvdG8vMQAAAAAAAAAFAAAACAAAAAsAAAAI\/\/\/\/\/wAAAAj\/\/\/\/\/AAAACAAAAAsAAAATAAAALAAAABMAAAAsAAAAEwAAACsAAAA+AAAAAQAAAD7\/\/\/\/\/AAAAAP\/\/\/\/8AAAAT\/\/\/\/\/wAAABP\/\/\/\/\/AQAAAAAAAAAAAAEB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAbsBAAAAP2h0dHBzOi8vdHdpdHRlci5jb20vVGVsZWdyYXBoL3N0YXR1cy80Mzc5NjI1MzY0MDc2NjY2ODgvcGhvdG8vMQAAAAAAAAAFAAAACAAAAAsAAAAI\/\/\/\/\/wAAAAj\/\/\/\/\/AAAACAAAAAsAAAATAAAALAAAABMAAAAsAAAAEwAAACsAAAA+AAAAAQAAAD7\/\/\/\/\/AAAAAP\/\/\/\/8AAAAT\/\/\/\/\/wAAABP\/\/\/\/\/AQAAAAAAAAAAAAEAAAAAAAA=",
+ "docIdentifier": 14
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 0,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=abs.twimg.com\/favicons\/favicon.ico",
+ "index": 1,
+ "storage": {
+ "http:\/\/localhost:8080/?httpsurl=twitter.com": {
+ "ScribeTransport": "{\"internal_referer\":null,\"client_version\":\"macaw-swift\",\"items\":[{}],\"associations\":{\"2\":{\"association_id\":null,\"association_type\":3},\"3\":{\"association_id\":null,\"association_type\":3}},\"message\":\"\/\/twitter.com\/Telegraph\/status\/437962536407666688\/photo\/1\/large\",\"event_namespace\":{\"client\":\"web\",\"page\":\"permalink\",\"section\":\"permalink\",\"element\":\"platform_photo_card\",\"action\":\"show\"},\"triggered_on\":1393256185388,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":null,\"client_version\":\"macaw-swift\",\"event_value\":0,\"event_namespace\":{\"client\":\"web\",\"page\":\"permalink\",\"section\":\"permalink\",\"component\":\"reduced_action_queue\",\"action\":\"captured\"},\"triggered_on\":1393256185472,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":null,\"client_version\":\"macaw-swift\",\"event_value\":0,\"event_namespace\":{\"client\":\"web\",\"page\":\"permalink\",\"section\":\"permalink\",\"component\":\"reduced_action_queue\",\"action\":\"ignored\"},\"triggered_on\":1393256185473,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":null,\"client_version\":\"macaw-swift\",\"event_value\":0,\"event_namespace\":{\"client\":\"web\",\"page\":\"permalink\",\"section\":\"permalink\",\"component\":\"reduced_action_queue\",\"action\":\"direct\"},\"triggered_on\":1393256185473,\"format_version\":2,\"_category_\":\"client_event\"},{\"internal_referer\":null,\"client_version\":\"macaw-swift\",\"event_value\":0,\"event_namespace\":{\"client\":\"web\",\"page\":\"permalink\",\"section\":\"permalink\",\"component\":\"reduced_action_queue\",\"action\":\"all\"},\"triggered_on\":1393256185473,\"format_version\":2,\"_category_\":\"client_event\"}"
+ }
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=www.google.fr\/search?q=google+docs&ie=utf-8&oe=utf-8&rls=org.mozilla:en-US:unofficial&client=firefox-nightly&channel=fflb&gfe_rd=ctrl&ei=aGcLU8r5I4Hf8geZ5YHABg&gws_rd=cr",
+ "title": "google docs - Recherche Google",
+ "ID": 18,
+ "docshellID": 7,
+ "docIdentifier": 18
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=accounts.google.com\/ServiceLogin?service=writely&passive=1209600&continue=https%3A%2F%2Fdocs.google.com%2F%3Fhl%3Dfr%26urp%3Dhttps%3A%2F%2Fwww.google.fr%2Furl%3Fsa%253Dt%2526rct%253Dj%2526q%253D%2526esrc%253Ds%2526sou%23&followup=https%3A%2F%2Fdocs.google.com%2F%3Fhl%3Dfr%26urp%3Dhttps%3A%2F%2Fwww.google.fr%2Furl%3Fsa%253Dt%2526rct%253Dj%2526q%253D%2526esrc%253Ds%2526sou&ltmpl=homepage&hl=fr",
+ "title": "Google\u00a0Drive",
+ "ID": 21,
+ "docshellID": 7,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=docs.google.com\/?hl=fr",
+ "docIdentifier": 22
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=drive.google.com\/?hl=fr&urp=http:\/\/localhost:8080/?httpsurl=www.google.fr\/url?sa%3Dt%26rct%3Dj%26q%3D%26esrc%3Ds%26sou&authuser=0#my-drive",
+ "title": "My Drive - Google Drive",
+ "ID": 27,
+ "docshellID": 7,
+ "docIdentifier": 27
+ }
+ ],
+ "lastAccessed": 1393256606155,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=drive.google.com\/favicon.ico",
+ "index": 3
+ },
+ {
+ "entries": [
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=docs.google.com\/drawings\/d\/1Kq65yVqWT7HxrGLeNdxAipqbX7P4OuS4Md325R0edrA\/edit",
+ "title": "Untitled drawing - Google Drive",
+ "ID": 60,
+ "docshellID": 54,
+ "docIdentifier": 61,
+ "structuredCloneState": "AAAAAAAA\/\/8=",
+ "structuredCloneVersion": 2
+ }
+ ],
+ "lastAccessed": 1393257103880,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=ssl.gstatic.com\/docs\/drawings\/images\/favicon5.ico",
+ "index": 1
+ },
+ {
+ "entries": [
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=docs.google.com\/document\/d\/1dm2Z_yaEU506PHeJE64BReXQyIlJgJk7mXOjKx36MbE\/edit",
+ "title": "Untitled document - Google Drive",
+ "ID": 1757193939,
+ "docshellID": 65,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=docs.google.com\/drawings\/d\/1Kq65yVqWT7HxrGLeNdxAipqbX7P4OuS4Md325R0edrA\/edit",
+ "docIdentifier": 8,
+ "structuredCloneState": "AAAAAAAA\/\/8=",
+ "structuredCloneVersion": 2
+ }
+ ],
+ "lastAccessed": 1393359020203,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=ssl.gstatic.com\/docs\/documents\/images\/kix-favicon6.ico",
+ "index": 1,
+ "scroll": {
+ "children": [
+ {
+ "scroll": "0,8"
+ }
+ ]
+ },
+ "formdata": {
+ "xpath": {
+ "\/\/xhtml:div[@id='zoomSelect']\/xhtml:div\/xhtml:div\/xhtml:div\/xhtml:input": "100%",
+ "\/\/xhtml:div[@id='fontSizeSelect']\/xhtml:div\/xhtml:div\/xhtml:div\/xhtml:input": "11"
+ },
+ "url": "http:\/\/localhost:8080/?httpsurl=docs.google.com\/document\/d\/1dm2Z_yaEU506PHeJE64BReXQyIlJgJk7mXOjKx36MbE\/edit",
+ "children": [
+ {
+ "innerHTML": "<br>",
+ "url": "about:blank"
+ }
+ ]
+ }
+ },
+ {
+ "entries": [
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=www.google.fr\/search?q=movies&ie=utf-8&oe=utf-8&rls=org.mozilla:en-US:unofficial&client=firefox-nightly&channel=fflb&gfe_rd=ctrl&ei=U6UMU8XlJYHf8geZ5YHABg&gws_rd=cr",
+ "title": "movies - Google Search",
+ "ID": 1789616335,
+ "docshellID": 7,
+ "docIdentifier": 47
+ },
+ {
+ "url": "http:\/\/localhost:8080/?url=www.youtube.com\/user\/YouTubeMoviesFR",
+ "title": "Films - YouTube",
+ "ID": 1789616336,
+ "docshellID": 7,
+ "referrer": "http:\/\/localhost:8080/?url=www.google.fr\/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CDUQFjAB&url=http%3A%2F%2Fwww.youtube.com%2Fuser%2Fmovies&ei=U6UMU9fnKIOb0AXAgYFg&usg=AFQjCNHrmNe-ykFP-4R2NPUvq_YQh3LfQw&sig2=k395eaN4vi_NxXCeQwBYtg&bvm=bv.61725948,d.d2k",
+ "docIdentifier": 48,
+ "structuredCloneState": "AAAAAAgA\/\/8LAAAABAD\/\/3MAcABmAC0AcgBlAGYAZQByAGUAcgAAAO0AAAAEAP\/\/aAB0AHQAcAA6AC8ALwB3AHcAdwAuAGcAbwBvAGcAbABlAC4AZgByAC8AdQByAGwAPwBzAGEAPQB0ACYAcgBjAHQAPQBqACYAcQA9ACYAZQBzAHIAYwA9AHMAJgBzAG8AdQByAGMAZQA9AHcAZQBiACYAYwBkAD0AMgAmAHYAZQBkAD0AMABDAEQAVQBRAEYAagBBAEIAJgB1AHIAbAA9AGgAdAB0AHAAJQAzAEEAJQAyAEYAJQAyAEYAdwB3AHcALgB5AG8AdQB0AHUAYgBlAC4AYwBvAG0AJQAyAEYAdQBzAGUAcgAlADIARgBtAG8AdgBpAGUAcwAmAGUAaQA9AFUANgBVAE0AVQA5AGYAbgBLAEkATwBiADAAQQBYAEEAZwBZAEYAZwAmAHUAcwBnAD0AQQBGAFEAagBDAE4ASAByAG0ATgBlAC0AeQBrAEYAUAAtADQAUgAyAE4AUABVAHYAcQBfAFkAUQBoADMATABmAFEAdwAmAHMAaQBnADIAPQBrADMAOQA1AGUAYQBOADQAdgBpAF8ATgB4AFgAQwBlAFEAdwBCAFkAdABnACYAYgB2AG0APQBiAHYALgA2ADEANwAyADUAOQA0ADgALABkAC4AZAAyAGsAAAAAAAAADQAAAAQA\/\/9zAHAAZgAtAHQAaQBtAGUAcwB0AGEAbQBwAAAAAAAAAAAwaV6WRnRCAAAAAAAA\/\/8=",
+ "structuredCloneVersion": 2,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 1789616337,
+ "docshellID": 23,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAFABAAAAK2h0dHA6Ly93d3cueW91dHViZS5jb20vdXNlci9Zb3VUdWJlTW92aWVzRlIAAAAAAAAABAAAAAcAAAAPAAAAB\/\/\/\/\/8AAAAH\/\/\/\/\/wAAAAcAAAAPAAAAFgAAABUAAAAWAAAAFQAAABYAAAAGAAAAHAAAAA8AAAAc\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAFv\/\/\/\/8AAAAW\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAAAA==",
+ "docIdentifier": 49
+ },
+ {
+ "url": "about:blank",
+ "ID": 1789616338,
+ "docshellID": 24,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAFABAAAAK2h0dHA6Ly93d3cueW91dHViZS5jb20vdXNlci9Zb3VUdWJlTW92aWVzRlIAAAAAAAAABAAAAAcAAAAPAAAAB\/\/\/\/\/8AAAAH\/\/\/\/\/wAAAAcAAAAPAAAAFgAAABUAAAAWAAAAFQAAABYAAAAGAAAAHAAAAA8AAAAc\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAFv\/\/\/\/8AAAAW\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAAAA==",
+ "docIdentifier": 50
+ },
+ {
+ "url": "about:blank",
+ "ID": 1789616339,
+ "docshellID": 25,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAFABAAAAK2h0dHA6Ly93d3cueW91dHViZS5jb20vdXNlci9Zb3VUdWJlTW92aWVzRlIAAAAAAAAABAAAAAcAAAAPAAAAB\/\/\/\/\/8AAAAH\/\/\/\/\/wAAAAcAAAAPAAAAFgAAABUAAAAWAAAAFQAAABYAAAAGAAAAHAAAAA8AAAAc\/\/\/\/\/wAAAAD\/\/\/\/\/AAAAFv\/\/\/\/8AAAAW\/\/\/\/\/wEAAAAAAAAAAAABAAAAAAAAAA==",
+ "docIdentifier": 51
+ }
+ ]
+ },
+ {
+ "url": "http:\/\/localhost:8080/?url=www.youtube.com\/watch?v=gYCzg8xg4c0&feature=c4-overview",
+ "title": "\u25b6 Gravity (VF) - YouTube",
+ "ID": 1789616340,
+ "docshellID": 7,
+ "referrer": "http:\/\/localhost:8080/?url=www.youtube.com\/user\/YouTubeMoviesFR",
+ "docIdentifier": 52,
+ "structuredCloneState": "AAAAAAAA\/\/8=",
+ "structuredCloneVersion": 2,
+ "children": [
+ {
+ "url": "about:blank",
+ "ID": 1789616341,
+ "docshellID": 27,
+ "owner_b64": "CbflmEkNQj+opi5sTsh3UAAAAAAAAAAAwAAAAAAAAEYB3pRy0IA0EdOTmQAQS6D9QDlf4EV9GErbo\/2vmMihrxEAAAAC\/\/\/\/\/wAAAFABAAAAPmh0dHA6Ly93d3cueW91dHViZS5jb20vd2F0Y2g\/dj1nWUN6Zzh4ZzRjMCZmZWF0dXJlPWM0LW92ZXJ2aWV3AAAAAAAAAAQAAAAHAAAADwAAAAf\/\/\/\/\/AAAAB\/\/\/\/\/8AAAAHAAAADwAAABYAAAAoAAAAFgAAAAYAAAAWAAAAAQAAABcAAAAFAAAAF\/\/\/\/\/8AAAAA\/\/\/\/\/wAAAB0AAAAhAAAAFv\/\/\/\/8BAAAAAAAAAAAAAQAAAAAAAAA=",
+ "docIdentifier": 53
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393368180318,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?url=s.ytimg.com\/yts\/img\/favicon_32-vflWoMFGx.png",
+ "index": 3,
+ "scroll": {
+ "scroll": "0,374"
+ }
+ }
+ ],
+ "selected": 6,
+ "_closedTabs": [
+ {
+ "state": {
+ "entries": [
+ {
+ "url": "http:\/\/localhost:8080/?url=swimswam.com\/video-walk-2013-junior-world-championships-hamdem-center\/",
+ "title": "Video Walk Through: 2013 Junior World Championships, Hamdan Center",
+ "ID": 17,
+ "docshellID": 15,
+ "docIdentifier": 17,
+ "children": [
+ {
+ "url": "http:\/\/localhost:8080/?url=player.vimeo.com\/video\/73623354?title=0&byline=0&portrait=0",
+ "title": "Hamdam Centre Walk Thru at World Jnr Champs from SWIMSWAM on Vimeo",
+ "ID": 19,
+ "docshellID": 16,
+ "referrer": "http:\/\/localhost:8080/?url=swimswam.com\/video-walk-2013-junior-world-championships-hamdem-center\/",
+ "docIdentifier": 19
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=www.facebook.com\/plugins\/like.php?href=http%3A%2F%2Fswimswam.com%2Fvideo-walk-2013-junior-world-championships-hamdem-center%2F&layout=box_count&show_faces=false&width=50&action=like&colorscheme=light&height=90",
+ "ID": 24,
+ "docshellID": 17,
+ "referrer": "http:\/\/localhost:8080/?url=swimswam.com\/video-walk-2013-junior-world-championships-hamdem-center\/",
+ "docIdentifier": 24
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=www.facebook.com\/plugins\/like.php?href=http%3A%2F%2Fswimswam.com%2Fvideo-walk-2013-junior-world-championships-hamdem-center%2F&layout=button_count&show_faces=false&width=85&action=like&colorscheme=light&height=21",
+ "title": "Facebook",
+ "ID": 25,
+ "docshellID": 19,
+ "referrer": "http:\/\/localhost:8080/?url=swimswam.com\/video-walk-2013-junior-world-championships-hamdem-center\/",
+ "docIdentifier": 25
+ }
+ ]
+ }
+ ],
+ "lastAccessed": 1393256151290,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?url=cdn.swimswam.com\/wp-content\/themes\/swimswam\/favicon.ico",
+ "index": 1
+ },
+ "title": "Video Walk Through: 2013 Junior World Championships, Hamdan Center",
+ "image": "http:\/\/localhost:8080/?url=cdn.swimswam.com\/wp-content\/themes\/swimswam\/favicon.ico",
+ "pos": 1,
+ "closedAt": 1393256151290
+ },
+ {
+ "state": {
+ "entries": [
+ {
+ "url": "about:newtab",
+ "title": "New Tab",
+ "ID": 17,
+ "docshellID": 18,
+ "owner_b64": "SmIS26zLEdO3ZQBgsLbOywAAAAAAAAAAwAAAAAAAAEY=",
+ "docIdentifier": 17
+ }
+ ],
+ "lastAccessed": 1393256966807,
+ "userTypedValue": "sess",
+ "userTypedClear": 0,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": null,
+ "index": 1
+ },
+ "title": "New Tab",
+ "image": null,
+ "pos": 4,
+ "closedAt": 1393256966808
+ },
+ {
+ "state": {
+ "entries": [
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=docs.google.com\/presentation\/d\/1oTncQrrq06b1ow-BdKkaFaNr5IlZaWQEhqjsNSgcEdM\/edit#slide=id.i0",
+ "title": "Untitled Presentation - Google Drive",
+ "ID": 45,
+ "docshellID": 38,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=drive.google.com\/?hl=fr&urp=http:\/\/localhost:8080/?httpsurl=www.google.fr\/url?sa%3Dt%26rct%3Dj%26q%3D%26esrc%3Ds%26sou&authuser=0",
+ "docIdentifier": 46,
+ "structuredCloneState": "AAAAAAAA\/\/8=",
+ "structuredCloneVersion": 2
+ }
+ ],
+ "lastAccessed": 1393256660847,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=ssl.gstatic.com\/docs\/presentations\/images\/favicon4.ico",
+ "index": 1
+ },
+ "title": "Untitled Presentation - Google Drive",
+ "image": "http:\/\/localhost:8080/?httpsurl=ssl.gstatic.com\/docs\/presentations\/images\/favicon4.ico",
+ "pos": 4,
+ "closedAt": 1393256660847
+ },
+ {
+ "state": {
+ "entries": [
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=docs.google.com\/document\/d\/1lzeZ7lKYsBq1mXs6I1KwNAF4gbrCR7qVW1jr_5Ka0tQ\/edit",
+ "title": "Untitled document - Google Drive",
+ "ID": 51,
+ "docshellID": 45,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=drive.google.com\/?hl=fr&urp=http:\/\/localhost:8080/?httpsurl=www.google.fr\/url?sa%3Dt%26rct%3Dj%26q%3D%26esrc%3Ds%26sou&authuser=0",
+ "docIdentifier": 52,
+ "structuredCloneState": "AAAAAAAA\/\/8=",
+ "structuredCloneVersion": 2
+ }
+ ],
+ "lastAccessed": 1393256601337,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=ssl.gstatic.com\/docs\/documents\/images\/kix-favicon6.ico",
+ "index": 1
+ },
+ "title": "Untitled document - Google Drive",
+ "image": "http:\/\/localhost:8080/?httpsurl=ssl.gstatic.com\/docs\/documents\/images\/kix-favicon6.ico",
+ "pos": 3,
+ "closedAt": 1393256601337
+ },
+ {
+ "state": {
+ "entries": [
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=docs.google.com\/spreadsheet\/ccc?key=0AsDW-iLj4J3pdEFaYkRmajhsMTJoTTd4U2k4V1E4U2c&usp=drive_web",
+ "title": "SessionFile.read() - Google Drive",
+ "ID": 39,
+ "docshellID": 33,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=drive.google.com\/?hl=fr&urp=http:\/\/localhost:8080/?httpsurl=www.google.fr\/url?sa%3Dt%26rct%3Dj%26q%3D%26esrc%3Ds%26sou&authuser=0",
+ "docIdentifier": 40,
+ "structuredCloneState": "AAAAAAAA\/\/8=",
+ "structuredCloneVersion": 2
+ },
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=docs.google.com\/spreadsheet\/ccc?key=0AsDW-iLj4J3pdEFaYkRmajhsMTJoTTd4U2k4V1E4U2c&usp=drive_web#gid=0",
+ "title": "SessionFile.read()",
+ "ID": 40,
+ "docshellID": 33,
+ "docIdentifier": 40
+ }
+ ],
+ "lastAccessed": 1393256373871,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=docs.google.com\/favicon.ico",
+ "index": 2,
+ "pageStyle": {
+ "pageStyle": "gridCss"
+ }
+ },
+ "title": "SessionFile.read()",
+ "image": "http:\/\/localhost:8080/?httpsurl=docs.google.com\/favicon.ico",
+ "pos": 3,
+ "closedAt": 1393256373871
+ },
+ {
+ "state": {
+ "entries": [
+ {
+ "url": "http:\/\/localhost:8080/?httpsurl=github.com\/andrewray\/iocamljs",
+ "title": "andrewray\/iocamljs \u00b7 GitHub",
+ "ID": 16,
+ "docshellID": 16,
+ "referrer": "http:\/\/localhost:8080/?httpsurl=t.co\/Lgc1R8XU0T",
+ "docIdentifier": 16
+ }
+ ],
+ "lastAccessed": 1393256206748,
+ "hidden": false,
+ "attributes": {
+
+ },
+ "image": "http:\/\/localhost:8080/?httpsurl=github.com\/favicon.ico",
+ "index": 1,
+ "scroll": {
+ "scroll": "0,625"
+ }
+ },
+ "title": "andrewray\/iocamljs \u00b7 GitHub",
+ "image": "http:\/\/localhost:8080/?httpsurl=github.com\/favicon.ico",
+ "pos": 2,
+ "closedAt": 1393256298987
+ }
+ ],
+ "busy": false,
+ "width": "960",
+ "height": "521",
+ "screenX": "4",
+ "screenY": "22",
+ "sizemode": "maximized"
+ }
+ ],
+ "selectedWindow": 1,
+ "_closedWindows": [
+
+ ],
+ "session": {
+ "lastUpdate": 1393368180441,
+ "startTime": 1393256133774,
+ "recentCrashes": 0
+ },
+ "global": {
+
+ }
+}
diff --git a/testing/talos/talos/startup_test/sessionrestore/profile/sessionstore.jsonlz4 b/testing/talos/talos/startup_test/sessionrestore/profile/sessionstore.jsonlz4
new file mode 100644
index 0000000000..e1c0254c17
--- /dev/null
+++ b/testing/talos/talos/startup_test/sessionrestore/profile/sessionstore.jsonlz4
Binary files differ
diff --git a/testing/talos/talos/startup_test/startup_about_home_paint/addon/api.js b/testing/talos/talos/startup_test/startup_about_home_paint/addon/api.js
new file mode 100644
index 0000000000..14887aa112
--- /dev/null
+++ b/testing/talos/talos/startup_test/startup_about_home_paint/addon/api.js
@@ -0,0 +1,83 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/* globals ExtensionAPI, Services, XPCOMUtils */
+
+ChromeUtils.defineESModuleGetters(this, {
+ BrowserWindowTracker: "resource:///modules/BrowserWindowTracker.sys.mjs",
+ TalosParentProfiler: "resource://talos-powers/TalosParentProfiler.sys.mjs",
+ setTimeout: "resource://gre/modules/Timer.sys.mjs",
+});
+
+const SCALAR_KEY = "timestamps.about_home_topsites_first_paint";
+
+const MAX_ATTEMPTS = 10;
+
+let gAttempts = 0;
+
+this.startup_about_home_paint = class extends ExtensionAPI {
+ onStartup() {
+ Services.obs.addObserver(this, "browser-idle-startup-tasks-finished");
+ }
+
+ async wait(aMs) {
+ return new Promise(resolve => {
+ setTimeout(resolve, aMs);
+ });
+ }
+
+ observe(subject, topic, data) {
+ if (topic == "browser-idle-startup-tasks-finished") {
+ this.checkForTelemetry();
+ }
+ }
+
+ async checkForTelemetry() {
+ let snapshot = Services.telemetry.getSnapshotForScalars("main");
+ let measurement = snapshot.parent[SCALAR_KEY];
+ let win = BrowserWindowTracker.getTopWindow();
+ if (!measurement) {
+ if (gAttempts == MAX_ATTEMPTS) {
+ dump(`Failed to get ${SCALAR_KEY} scalar probe in time.\n`);
+ await this.quit();
+ return;
+ }
+ gAttempts++;
+
+ await this.wait(1000);
+ ChromeUtils.idleDispatch(() => {
+ this.checkForTelemetry();
+ });
+ } else {
+ // Got our measurement.
+ dump("__start_report" + measurement + "__end_report\n\n");
+ dump("__startTimestamp" + win.performance.now() + "__endTimestamp\n");
+
+ if (Services.env.exists("TPPROFILINGINFO")) {
+ let profilingInfo = Services.env.get("TPPROFILINGINFO");
+ if (profilingInfo !== null) {
+ TalosParentProfiler.initFromObject(JSON.parse(profilingInfo));
+ await TalosParentProfiler.finishStartupProfiling();
+ }
+ }
+
+ await this.quit();
+ }
+ }
+
+ async quit() {
+ for (let domWindow of Services.wm.getEnumerator(null)) {
+ domWindow.close();
+ }
+
+ try {
+ await this.wait(0);
+ Services.startup.quit(Services.startup.eForceQuit);
+ } catch (e) {
+ dump("Force Quit failed: " + e);
+ }
+ }
+
+ onShutdown() {}
+};
diff --git a/testing/talos/talos/startup_test/startup_about_home_paint/addon/manifest.json b/testing/talos/talos/startup_test/startup_about_home_paint/addon/manifest.json
new file mode 100644
index 0000000000..8adf9d2004
--- /dev/null
+++ b/testing/talos/talos/startup_test/startup_about_home_paint/addon/manifest.json
@@ -0,0 +1,23 @@
+{
+ "manifest_version": 2,
+ "name": "First about:home paint performance test",
+ "description": "Add-on that quits the browser once the about:home paint measurement has been taken.",
+ "version": "0.1",
+
+ "browser_specific_settings": {
+ "gecko": {
+ "id": "startup_about_home_paint@mozilla.org"
+ }
+ },
+
+ "experiment_apis": {
+ "startup_about_home_paint": {
+ "schema": "schema.json",
+ "parent": {
+ "scopes": ["addon_parent"],
+ "script": "api.js",
+ "events": ["startup"]
+ }
+ }
+ }
+}
diff --git a/testing/talos/talos/startup_test/startup_about_home_paint/addon/schema.json b/testing/talos/talos/startup_test/startup_about_home_paint/addon/schema.json
new file mode 100644
index 0000000000..fe51488c70
--- /dev/null
+++ b/testing/talos/talos/startup_test/startup_about_home_paint/addon/schema.json
@@ -0,0 +1 @@
+[]
diff --git a/testing/talos/talos/startup_test/startup_about_home_paint/startup_about_home_paint.manifest b/testing/talos/talos/startup_test/startup_about_home_paint/startup_about_home_paint.manifest
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/testing/talos/talos/startup_test/startup_about_home_paint/startup_about_home_paint.manifest
diff --git a/testing/talos/talos/startup_test/tspaint_test.html b/testing/talos/talos/startup_test/tspaint_test.html
new file mode 100644
index 0000000000..7282f1fcfa
--- /dev/null
+++ b/testing/talos/talos/startup_test/tspaint_test.html
@@ -0,0 +1,61 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ - You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<html>
+<meta charset="utf-8">
+<!-- Pick off begin time as a cgi argument and print it out -->
+<!-- call this with an arg, e.g. file://foo/startup-test.html?begin=12345678 -->
+<!-- In-line this to avoid compilation. -->
+<script>
+window.onerror = (message, source, lineno) => {
+ dump(`TEST-UNEXPECTED-FAIL | tspaint_test | ${source}, line ${lineno}: ${message}\n`);
+};
+</script>
+<script language="Javascript" type="text/javascript" src="../talos-powers/content/TalosPowersContent.js"></script>
+<script language="Javascript" type="text/javascript" src="../talos-powers/content/TalosContentProfiler.js"></script>
+<script language="javascript" type="text/javascript">
+
+async function painted() {
+ window.removeEventListener("MozAfterPaint", painted, true);
+
+ await TalosPowers.loadPromise;
+
+ await TalosContentProfiler.initFromURLQueryParams(location.search);
+ await TalosContentProfiler.finishStartupProfiling();
+
+ let startupInfo = await TalosPowersContent.getStartupInfo();
+
+ let startupTime = startupInfo.firstPaint - startupInfo.process;
+
+ document.body.textContent = "Startup time = " + startupTime + " ms";
+ if (window.dump) {
+ dump("__start_report" + startupTime + "__end_report\n\n");
+ }
+ dumpConsoleAndQuit();
+}
+
+function failed() {
+ if (window.dump) {
+ dump("BROWSER FAILED TO GENERATE MOZAFTERPAINT IN 5 SECONDS\n");
+ }
+ dumpConsoleAndQuit();
+}
+
+function dumpConsoleAndQuit() {
+ TalosPowersContent.dumpConsole();
+
+ // Close window asynchronously, there might still be startup operations that still need to run
+ window.setTimeout(function() {
+ if (window.dump) {
+ dump("__startTimestamp" + window.performance.now() + "__endTimestamp\n");
+ }
+ TalosPowersContent.goQuitApplication();
+ }, 0);
+}
+
+window.addEventListener("MozAfterPaint", painted, true);
+setTimeout(failed, 5000);
+
+</script>
+<body></body>
+</html>
diff --git a/testing/talos/talos/talos-powers/README b/testing/talos/talos/talos-powers/README
new file mode 100644
index 0000000000..37f23274bc
--- /dev/null
+++ b/testing/talos/talos/talos-powers/README
@@ -0,0 +1,5 @@
+# Talos Powers Add-on
+
+This add-ons purpose is to give talos content some special powers
+that are normally restricted to the browser.
+
diff --git a/testing/talos/talos/talos-powers/api.js b/testing/talos/talos/talos-powers/api.js
new file mode 100644
index 0000000000..cb0ddaccef
--- /dev/null
+++ b/testing/talos/talos/talos-powers/api.js
@@ -0,0 +1,455 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/* globals ExtensionAPI, Services, XPCOMUtils */
+
+const { ComponentUtils } = ChromeUtils.importESModule(
+ "resource://gre/modules/ComponentUtils.sys.mjs"
+);
+
+ChromeUtils.defineESModuleGetters(this, {
+ AboutHomeStartupCache: "resource:///modules/BrowserGlue.sys.mjs",
+ AboutNewTab: "resource:///modules/AboutNewTab.sys.mjs",
+ BrowserWindowTracker: "resource:///modules/BrowserWindowTracker.sys.mjs",
+ PerTestCoverageUtils:
+ "resource://testing-common/PerTestCoverageUtils.sys.mjs",
+ SessionStore: "resource:///modules/sessionstore/SessionStore.sys.mjs",
+ setTimeout: "resource://gre/modules/Timer.sys.mjs",
+});
+
+XPCOMUtils.defineLazyServiceGetter(
+ this,
+ "resProto",
+ "@mozilla.org/network/protocol;1?name=resource",
+ "nsISubstitutingProtocolHandler"
+);
+
+// These are not automagically defined for us because we are an extension.
+//
+// eslint-disable-next-line mozilla/reject-importGlobalProperties
+Cu.importGlobalProperties(["IOUtils", "PathUtils"]);
+
+const Cm = Components.manager.QueryInterface(Ci.nsIComponentRegistrar);
+
+let frameScriptURL;
+let profilerSubtestStartTime;
+
+function TalosPowersService() {
+ this.wrappedJSObject = this;
+
+ this.init();
+}
+
+TalosPowersService.prototype = {
+ factory: ComponentUtils.generateSingletonFactory(TalosPowersService),
+ classDescription: "Talos Powers",
+ classID: Components.ID("{f5d53443-d58d-4a2f-8df0-98525d4f91ad}"),
+ contractID: "@mozilla.org/talos/talos-powers-service;1",
+ QueryInterface: ChromeUtils.generateQI([]),
+
+ register() {
+ Cm.registerFactory(
+ this.classID,
+ this.classDescription,
+ this.contractID,
+ this.factory
+ );
+
+ void Cc[this.contractID].getService();
+ },
+
+ unregister() {
+ Cm.unregisterFactory(this.classID, this.factory);
+ },
+
+ init() {
+ if (!frameScriptURL) {
+ throw new Error("Cannot find frame script url (extension not started?)");
+ }
+ Services.mm.loadFrameScript(frameScriptURL, true);
+ Services.mm.addMessageListener("Talos:ForceQuit", this);
+ Services.mm.addMessageListener("TalosContentProfiler:Command", this);
+ Services.mm.addMessageListener("TalosPowersContent:ForceCCAndGC", this);
+ Services.mm.addMessageListener("TalosPowersContent:GetStartupInfo", this);
+ Services.mm.addMessageListener("TalosPowers:ParentExec:QueryMsg", this);
+ },
+
+ receiveMessage(message) {
+ switch (message.name) {
+ case "Talos:ForceQuit": {
+ this.forceQuit(message.data);
+ break;
+ }
+ case "TalosContentProfiler:Command": {
+ this.receiveProfileCommand(message);
+ break;
+ }
+ case "TalosPowersContent:ForceCCAndGC": {
+ Cu.forceGC();
+ Cu.forceCC();
+ Cu.forceShrinkingGC();
+ break;
+ }
+ case "TalosPowersContent:GetStartupInfo": {
+ this.receiveGetStartupInfo(message);
+ break;
+ }
+ case "TalosPowers:ParentExec:QueryMsg": {
+ this.RecieveParentExecCommand(message);
+ break;
+ }
+ }
+ },
+
+ /**
+ * Enable the Gecko Profiler with some settings.
+ *
+ * @param data (object)
+ * A JavaScript object with the following properties:
+ *
+ * entries (int):
+ * The sampling buffer size in bytes.
+ *
+ * interval (int):
+ * The sampling interval in milliseconds.
+ *
+ * threadsArray (array of strings):
+ * The thread names to sample.
+ */
+ profilerBegin(data) {
+ Services.profiler.StartProfiler(
+ data.entries,
+ data.interval,
+ data.featuresArray,
+ data.threadsArray
+ );
+ },
+
+ /**
+ * Assuming the Profiler is running, dumps the Profile from all sampled
+ * processes and threads to the disk. The Profiler will be stopped once
+ * the profiles have been dumped. This method returns a Promise that
+ * will resolve once this has occurred.
+ *
+ * @param profileDir (string)
+ * The name of the directory to write the profile in.
+ * @param profileFile (string)
+ * The name of the file to write to.
+ *
+ * @returns Promise
+ */
+ profilerFinish(profileDir, profileFile) {
+ const profilePath = PathUtils.join(profileDir, profileFile);
+ return new Promise((resolve, reject) => {
+ Services.profiler.Pause();
+ Services.profiler.getProfileDataAsync().then(
+ profile =>
+ IOUtils.writeJSON(profilePath, profile, {
+ tmpPath: `${profilePath}.tmp`,
+ }).then(() => {
+ Services.profiler.StopProfiler();
+ resolve();
+ Services.obs.notifyObservers(null, "talos-profile-gathered");
+ }),
+ error => {
+ console.error("Failed to gather profile:", error);
+ // FIXME: We should probably send a message down to the
+ // child which causes it to reject the waiting Promise.
+ reject();
+ }
+ );
+ });
+ },
+
+ /**
+ * Add a parent process marker to the profiler to indicate the subtest duration.
+ *
+ * @param marker (string, optional)
+ * Marker name.
+ */
+ profilerSubtestEnd(marker = null, startTime = undefined) {
+ if (marker) {
+ this.addIntervalMarker(marker, startTime ?? profilerSubtestStartTime);
+ }
+ },
+
+ /**
+ * * Add a parent process marker to the profiler to indicate the start of the subtest.
+ *
+ * @param marker (string, optional)
+ * Marker name.
+ */
+ profilerSubtestStart(marker = null) {
+ profilerSubtestStartTime = Cu.now();
+
+ if (marker) {
+ this.addInstantMarker(marker);
+ }
+ },
+
+ /**
+ * Adds an instant marker to the Profile in the parent process.
+ *
+ * @param marker (string) A marker to set.
+ *
+ */
+ addInstantMarker(marker) {
+ ChromeUtils.addProfilerMarker("Talos", { category: "Test" }, marker);
+ },
+
+ /**
+ * Adds a marker to the Profile in the parent process.
+ *
+ * @param marker (string)
+ * A marker to set.
+ *
+ * @param startTime (number)
+ * Start time, used to create an interval profile marker. If
+ * undefined, a single instance marker will be placed.
+ */
+ addIntervalMarker(marker, startTime) {
+ ChromeUtils.addProfilerMarker(
+ "Talos",
+ { startTime, category: "Test" },
+ marker
+ );
+ },
+
+ receiveProfileCommand(message) {
+ const ACK_NAME = "TalosContentProfiler:Response";
+ let mm = message.target.messageManager;
+ let name = message.data.name;
+ let data = message.data.data;
+
+ switch (name) {
+ case "Profiler:Begin": {
+ this.profilerBegin(data);
+ // profilerBegin will cause the parent to send an async message to any
+ // child processes to start profiling. Because messages are serviced
+ // in order, we know that by the time that the child services the
+ // ACK message, that the profiler has started in its process.
+ mm.sendAsyncMessage(ACK_NAME, { name });
+ break;
+ }
+
+ case "Profiler:Finish": {
+ // The test is done. Dump the profile.
+ this.profilerFinish(data.profileDir, data.profileFile).then(() => {
+ mm.sendAsyncMessage(ACK_NAME, { name });
+ });
+ break;
+ }
+
+ case "Profiler:SubtestEnd": {
+ this.profilerSubtestEnd(data.marker, data.startTime);
+ mm.sendAsyncMessage(ACK_NAME, { name });
+ break;
+ }
+
+ case "Profiler:SubtestStart": {
+ this.profilerSubtestStart(data.marker);
+ mm.sendAsyncMessage(ACK_NAME, { name });
+ break;
+ }
+
+ case "Profiler:Marker": {
+ this.profilerMarker(data.marker, data.startTime);
+ mm.sendAsyncMessage(ACK_NAME, { name });
+ break;
+ }
+ }
+ },
+
+ async forceQuit(messageData) {
+ if (messageData && messageData.waitForStartupFinished) {
+ // We can wait for various startup items here to complete during
+ // the getInfo.html step for Talos so that subsequent runs don't
+ // have to do things like re-request the SafeBrowsing list.
+ let { SafeBrowsing } = ChromeUtils.importESModule(
+ "resource://gre/modules/SafeBrowsing.sys.mjs"
+ );
+
+ // Speed things up in case nobody else called this:
+ SafeBrowsing.init();
+
+ try {
+ await SafeBrowsing.addMozEntriesFinishedPromise;
+ } catch (e) {
+ // We don't care if things go wrong here - let's just shut down.
+ }
+
+ // We wait for the AboutNewTab's TopSitesFeed (and its "Contile"
+ // integration, which shows the sponsored Top Sites) to finish
+ // being enabled here. This is because it's possible for getInfo.html
+ // to run so quickly that the feed will still be initializing, and
+ // that would cause us to write a mostly empty cache to the
+ // about:home startup cache on shutdown, which causes that test
+ // to break periodically.
+ AboutNewTab.onBrowserReady();
+ // There aren't currently any easily observable notifications or
+ // events to let us know when the feed is ready, so we'll just poll
+ // for now.
+ let pollForFeed = async function () {
+ let foundFeed = AboutNewTab.activityStream.store.feeds.get(
+ "feeds.system.topsites"
+ );
+ if (!foundFeed) {
+ await new Promise(resolve => setTimeout(resolve, 500));
+ return pollForFeed();
+ }
+ return foundFeed;
+ };
+ let feed = await pollForFeed();
+ await feed._contile.refresh();
+ await feed.refresh({ broadcast: true });
+ await AboutHomeStartupCache.cacheNow();
+ }
+
+ await SessionStore.promiseAllWindowsRestored;
+
+ // Check to see if the top-most browser window still needs to fire its
+ // idle tasks notification. If so, we'll wait for it before shutting
+ // down, since some caching that can influence future runs in this profile
+ // keys off of that notification.
+ let topWin = BrowserWindowTracker.getTopWindow();
+ if (topWin && topWin.gBrowserInit) {
+ await topWin.gBrowserInit.idleTasksFinishedPromise;
+ }
+
+ for (let domWindow of Services.wm.getEnumerator(null)) {
+ domWindow.close();
+ }
+
+ try {
+ Services.startup.quit(Services.startup.eForceQuit);
+ } catch (e) {
+ dump("Force Quit failed: " + e);
+ }
+ },
+
+ receiveGetStartupInfo(message) {
+ let mm = message.target.messageManager;
+ let startupInfo = Services.startup.getStartupInfo();
+
+ if (!startupInfo.firstPaint) {
+ // It's possible that we were called early enough that
+ // the firstPaint measurement hasn't been set yet. In
+ // that case, we set up an observer for the next time
+ // a window is painted and re-retrieve the startup info.
+ let obs = function (subject, topic) {
+ Services.obs.removeObserver(this, topic);
+ startupInfo = Services.startup.getStartupInfo();
+ mm.sendAsyncMessage(
+ "TalosPowersContent:GetStartupInfo:Result",
+ startupInfo
+ );
+ };
+ Services.obs.addObserver(obs, "widget-first-paint");
+ } else {
+ mm.sendAsyncMessage(
+ "TalosPowersContent:GetStartupInfo:Result",
+ startupInfo
+ );
+ }
+ },
+
+ // These services are exposed to local unprivileged content.
+ // Each service is a function which accepts an argument, a callback for sending
+ // the reply (possibly async), and the parent window as a utility.
+ // arg/reply semantice are service-specific.
+ // To add a service: add a method at ParentExecServices here, then at the content:
+ // <script src="chrome://talos-powers-content/content/TalosPowersContent.js"></script>
+ // and then e.g. TalosPowersParent.exec("sampleParentService", myArg, myCallback)
+ // Sample service:
+ /*
+ // arg: anything. return: sample reply
+ sampleParentService: function(arg, callback, win) {
+ win.setTimeout(function() {
+ callback("sample reply for: " + arg);
+ }, 500);
+ },
+ */
+ ParentExecServices: {
+ ping(arg, callback, win) {
+ callback();
+ },
+
+ // arg: ignored. return: handle (number) for use with stopFrameTimeRecording
+ startFrameTimeRecording(arg, callback, win) {
+ var rv = win.windowUtils.startFrameTimeRecording();
+ callback(rv);
+ },
+
+ // arg: handle from startFrameTimeRecording. return: array with composition intervals
+ stopFrameTimeRecording(arg, callback, win) {
+ var rv = win.windowUtils.stopFrameTimeRecording(arg);
+ callback(rv);
+ },
+
+ requestDumpCoverageCounters(arg, callback, win) {
+ PerTestCoverageUtils.afterTest().then(callback);
+ },
+
+ requestResetCoverageCounters(arg, callback, win) {
+ PerTestCoverageUtils.beforeTest().then(callback);
+ },
+
+ dumpAboutSupport(arg, callback, win) {
+ const { Troubleshoot } = ChromeUtils.importESModule(
+ "resource://gre/modules/Troubleshoot.sys.mjs"
+ );
+ Troubleshoot.snapshot().then(snapshot => {
+ dump("about:support\t" + JSON.stringify(snapshot) + "\n");
+ callback();
+ });
+ },
+ },
+
+ RecieveParentExecCommand(msg) {
+ function sendResult(result) {
+ let mm = msg.target.messageManager;
+ mm.sendAsyncMessage("TalosPowers:ParentExec:ReplyMsg", {
+ id: msg.data.id,
+ result,
+ });
+ }
+
+ let command = msg.data.command;
+ if (!this.ParentExecServices.hasOwnProperty(command.name)) {
+ throw new Error(
+ "TalosPowers:ParentExec: Invalid service '" + command.name + "'"
+ );
+ }
+
+ this.ParentExecServices[command.name](
+ command.data,
+ sendResult,
+ msg.target.ownerGlobal
+ );
+ },
+};
+
+this.talos_powers = class extends ExtensionAPI {
+ onStartup() {
+ let uri = Services.io.newURI("content/", null, this.extension.rootURI);
+ resProto.setSubstitutionWithFlags(
+ "talos-powers",
+ uri,
+ resProto.ALLOW_CONTENT_ACCESS
+ );
+
+ frameScriptURL = this.extension.rootURI.resolve(
+ "chrome/talos-powers-content.js"
+ );
+
+ TalosPowersService.prototype.register();
+ }
+
+ onShutdown() {
+ TalosPowersService.prototype.unregister();
+
+ frameScriptURL = null;
+ resProto.setSubstitution("talos-powers", null);
+ }
+};
diff --git a/testing/talos/talos/talos-powers/chrome/talos-powers-content.js b/testing/talos/talos/talos-powers/chrome/talos-powers-content.js
new file mode 100644
index 0000000000..4b7276e7a5
--- /dev/null
+++ b/testing/talos/talos/talos-powers/chrome/talos-powers-content.js
@@ -0,0 +1,214 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/* eslint-env mozilla/frame-script */
+
+addEventListener(
+ "TalosContentProfilerCommand",
+ e => {
+ let name = e.detail.name;
+ let data = e.detail.data;
+ sendAsyncMessage("TalosContentProfiler:Command", { name, data });
+ },
+ { wantUntrusted: true } // since we're exposing to unprivileged
+);
+
+addMessageListener("TalosContentProfiler:Response", msg => {
+ let name = msg.data.name;
+ let data = msg.data.data;
+
+ let event = Cu.cloneInto(
+ {
+ bubbles: true,
+ detail: {
+ name,
+ data,
+ },
+ },
+ content
+ );
+ content.dispatchEvent(
+ new content.CustomEvent("TalosContentProfilerResponse", event)
+ );
+});
+
+addEventListener(
+ "TalosPowersContentForceCCAndGC",
+ e => {
+ Cu.forceGC();
+ Cu.forceCC();
+ Cu.forceShrinkingGC();
+ sendSyncMessage("TalosPowersContent:ForceCCAndGC");
+ },
+ { wantUntrusted: true } // since we're exposing to unprivileged
+);
+
+addEventListener(
+ "TalosPowersContentFocus",
+ e => {
+ if (
+ content.location.protocol != "file:" &&
+ content.location.hostname != "localhost" &&
+ content.location.hostname != "127.0.0.1"
+ ) {
+ throw new Error(
+ "TalosPowersContentFocus may only be used with local content"
+ );
+ }
+ content.focus();
+ let contentEvent = Cu.cloneInto(
+ {
+ bubbles: true,
+ },
+ content
+ );
+ content.dispatchEvent(
+ new content.CustomEvent("TalosPowersContentFocused", contentEvent)
+ );
+ },
+ { capture: true, wantUntrusted: true } // since we're exposing to unprivileged
+);
+
+addEventListener(
+ "TalosPowersContentGetStartupInfo",
+ e => {
+ sendAsyncMessage("TalosPowersContent:GetStartupInfo");
+ addMessageListener(
+ "TalosPowersContent:GetStartupInfo:Result",
+ function onResult(msg) {
+ removeMessageListener(
+ "TalosPowersContent:GetStartupInfo:Result",
+ onResult
+ );
+ let event = Cu.cloneInto(
+ {
+ bubbles: true,
+ detail: msg.data,
+ },
+ content
+ );
+
+ content.dispatchEvent(
+ new content.CustomEvent(
+ "TalosPowersContentGetStartupInfoResult",
+ event
+ )
+ );
+ }
+ );
+ },
+ { wantUntrusted: true } // since we're exposing to unprivileged
+);
+
+addEventListener(
+ "TalosPowersContentDumpConsole",
+ e => {
+ var messages;
+ try {
+ messages = Services.console.getMessageArray();
+ } catch (ex) {
+ dump(ex + "\n");
+ messages = [];
+ }
+
+ for (var i = 0; i < messages.length; i++) {
+ dump(messages[i].message + "\n");
+ }
+ },
+ { wantUntrusted: true } // since we're exposing to unprivileged
+);
+
+/**
+ * Content that wants to quit the whole session should
+ * fire the TalosPowersGoQuitApplication custom event. This will
+ * attempt to force-quit the browser.
+ */
+addEventListener(
+ "TalosPowersGoQuitApplication",
+ e => {
+ // If we're loaded in a low-priority background process, like
+ // the background page thumbnailer, then we shouldn't be allowed
+ // to quit the whole application. This is a workaround until
+ // bug 1164459 is fixed.
+ let priority = docShell
+ .QueryInterface(Ci.nsIDocumentLoader)
+ .loadGroup.QueryInterface(Ci.nsISupportsPriority).priority;
+ if (priority != Ci.nsISupportsPriority.PRIORITY_LOWEST) {
+ sendAsyncMessage("Talos:ForceQuit", e.detail);
+ }
+ },
+ { wantUntrusted: true } // since we're exposing to unprivileged
+);
+
+/**
+ * Content that wants to trigger a WebRender capture should fire the
+ * TalosPowersWebRenderCapture custom event.
+ */
+addEventListener(
+ "TalosPowersWebRenderCapture",
+ e => {
+ if (content && content.windowUtils) {
+ content.windowUtils.wrCapture();
+ } else {
+ dump("Unable to obtain DOMWindowUtils for TalosPowersWebRenderCapture\n");
+ }
+ },
+ { wantUntrusted: true } // since we're exposing to unprivileged
+);
+
+/* *
+ * Mediator for the generic ParentExec mechanism.
+ * Listens for a query event from the content, forwards it as a query message
+ * to the parent, listens to a parent reply message, and forwards it as a reply
+ * event for the content to capture.
+ * The consumer API for this mechanism is at content/TalosPowersContent.js
+ * and the callees are at ParentExecServices at components/TalosPowersService.js
+ */
+addEventListener(
+ "TalosPowers:ParentExec:QueryEvent",
+ function (e) {
+ if (
+ content.location.protocol != "file:" &&
+ content.location.hostname != "localhost" &&
+ content.location.hostname != "127.0.0.1"
+ ) {
+ throw new Error(
+ "TalosPowers:ParentExec may only be used with local content"
+ );
+ }
+ let uniqueMessageId =
+ "TalosPowers:ParentExec:" +
+ content.document.documentURI +
+ content.window.performance.now() +
+ Math.random();
+
+ // Listener for the reply from the parent process
+ addMessageListener("TalosPowers:ParentExec:ReplyMsg", function done(reply) {
+ if (reply.data.id != uniqueMessageId) {
+ return;
+ }
+
+ removeMessageListener("TalosPowers:ParentExec:ReplyMsg", done);
+
+ // reply to content via an event
+ let contentEvent = Cu.cloneInto(
+ {
+ bubbles: true,
+ detail: reply.data.result,
+ },
+ content
+ );
+ content.dispatchEvent(
+ new content.CustomEvent(e.detail.listeningTo, contentEvent)
+ );
+ });
+
+ // Send the query to the parent process
+ sendAsyncMessage("TalosPowers:ParentExec:QueryMsg", {
+ command: e.detail.command,
+ id: uniqueMessageId,
+ });
+ },
+ { wantUntrusted: true } // since we're exposing to unprivileged
+);
diff --git a/testing/talos/talos/talos-powers/content/TalosContentProfiler.js b/testing/talos/talos/talos-powers/content/TalosContentProfiler.js
new file mode 100644
index 0000000000..e732b06102
--- /dev/null
+++ b/testing/talos/talos/talos-powers/content/TalosContentProfiler.js
@@ -0,0 +1,309 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/* eslint-env mozilla/frame-script */
+
+/**
+ * This utility script is for instrumenting your Talos test for
+ * performance profiles while running within content. If your test
+ * is running in the parent process, you should use
+ * TalosParentProfiler.js instead to avoid the messaging overhead.
+ *
+ * This file can be loaded directly into a test page, or can be loaded
+ * as a frame script into a browser by the parent process.
+ */
+
+if (typeof window !== "undefined") {
+ window.onerror = (message, source, lineno) => {
+ dump(`TEST-UNEXPECTED-FAIL | ${source}, line ${lineno}: ${message}\n`);
+ };
+}
+
+var TalosContentProfiler;
+
+(function () {
+ // Whether or not this TalosContentProfiler object has had initFromObject
+ // or initFromURLQueryParams called on it. Any functions that will send
+ // events to the parent to change the behaviour of the Gecko Profiler
+ // should only be called after calling either initFromObject or
+ // initFromURLQueryParams.
+ var initted = false;
+
+ // The subtest name that beginTest() was called with.
+ var currentTest = "unknown";
+
+ // Profiler settings.
+ var interval, entries, featuresArray, threadsArray, profileDir;
+
+ /**
+ * Emits a TalosContentProfiler prefixed event and then returns a Promise
+ * that resolves once a corresponding acknowledgement event is
+ * dispatched on our document.
+ *
+ * @param name
+ * The name of the event that will be TalosContentProfiler prefixed and
+ * eventually sent to the parent.
+ * @param data (optional)
+ * The data that will be sent to the parent.
+ * @returns Promise
+ * Resolves when a corresponding acknowledgement event is dispatched
+ * on this document.
+ */
+ function sendEventAndWait(name, data = {}) {
+ // If we're running as a frame script, we can send messages directly to
+ // the parent, rather than going through the talos-powers-content.js
+ // mediator, which ends up being more complicated.
+ if (typeof sendAsyncMessage !== "undefined") {
+ return new Promise(resolve => {
+ sendAsyncMessage("TalosContentProfiler:Command", { name, data });
+ addMessageListener(
+ "TalosContentProfiler:Response",
+ function onMsg(msg) {
+ if (msg.data.name != name) {
+ return;
+ }
+
+ removeMessageListener("TalosContentProfiler:Response", onMsg);
+ resolve(msg.data);
+ }
+ );
+ });
+ }
+
+ return new Promise(resolve => {
+ var event = new CustomEvent("TalosContentProfilerCommand", {
+ bubbles: true,
+ detail: {
+ name,
+ data,
+ },
+ });
+ document.dispatchEvent(event);
+
+ addEventListener(
+ "TalosContentProfilerResponse",
+ function onResponse(event) {
+ if (event.detail.name != name) {
+ return;
+ }
+
+ removeEventListener("TalosContentProfilerResponse", onResponse);
+
+ resolve(event.detail.data);
+ }
+ );
+ });
+ }
+
+ /**
+ * Parses an url query string into a JS object.
+ *
+ * @param locationSearch (string)
+ * The location string to parse.
+ * @returns Object
+ * The GET params from the location string as
+ * key-value pairs in the Object.
+ */
+ function searchToObject(locationSearch) {
+ var pairs = locationSearch.substring(1).split("&");
+ var result = {};
+
+ for (var i in pairs) {
+ if (pairs[i] !== "") {
+ var pair = pairs[i].split("=");
+ result[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1] || "");
+ }
+ }
+
+ return result;
+ }
+
+ TalosContentProfiler = {
+ /**
+ * Initialize the profiler using profiler settings supplied in a JS object.
+ *
+ * @param obj (object)
+ * The following properties on the object are respected:
+ * gecko_profile_interval (int)
+ * gecko_profile_entries (int)
+ * gecko_profile_features (string, comma separated list of features to enable)
+ * gecko_profile_threads (string, comma separated list of threads to filter with)
+ * gecko_profile_dir (string)
+ */
+ initFromObject(obj = {}) {
+ if (!initted) {
+ if (
+ "gecko_profile_dir" in obj &&
+ typeof obj.gecko_profile_dir == "string" &&
+ "gecko_profile_interval" in obj &&
+ Number.isFinite(obj.gecko_profile_interval * 1) &&
+ "gecko_profile_entries" in obj &&
+ Number.isFinite(obj.gecko_profile_entries * 1) &&
+ "gecko_profile_features" in obj &&
+ typeof obj.gecko_profile_features == "string" &&
+ "gecko_profile_threads" in obj &&
+ typeof obj.gecko_profile_threads == "string"
+ ) {
+ interval = obj.gecko_profile_interval;
+ entries = obj.gecko_profile_entries;
+ featuresArray = obj.gecko_profile_features.split(",");
+ threadsArray = obj.gecko_profile_threads.split(",");
+ profileDir = obj.gecko_profile_dir;
+ initted = true;
+ } else {
+ console.error(
+ "Profiler could not init with object: " + JSON.stringify(obj)
+ );
+ }
+ }
+ },
+
+ /**
+ * Initialize the profiler using a string from a location string.
+ *
+ * @param locationSearch (string)
+ * The location string to initialize with.
+ */
+ initFromURLQueryParams(locationSearch) {
+ this.initFromObject(searchToObject(locationSearch));
+ },
+
+ /**
+ * A Talos test is about to start. This will return a Promise that
+ * resolves once the Profiler has been initialized.
+ *
+ * @param testName (string)
+ * The name of the test to use in Profiler markers.
+ * @returns Promise
+ * Resolves once the Gecko Profiler has been initialized.
+ * If the TalosContentProfiler is not initialized, then this resolves
+ * without doing anything.
+ */
+ beginTest(testName) {
+ if (initted) {
+ currentTest = testName;
+ return sendEventAndWait("Profiler:Begin", {
+ interval,
+ entries,
+ featuresArray,
+ threadsArray,
+ });
+ }
+ return Promise.resolve();
+ },
+
+ /**
+ * A Talos test has finished. This will stop the Gecko Profiler from
+ * sampling, and return a Promise that resolves once the Profiler has
+ * finished dumping the multi-process profile to disk.
+ *
+ * @returns Promise
+ * Resolves once the profile has been dumped to disk. The test should
+ * not try to quit the browser until this has resolved.
+ * If the TalosContentProfiler is not initialized, then this resolves
+ * without doing anything.
+ */
+ finishTest() {
+ if (initted) {
+ let profileFile = `${currentTest}.profile`;
+ return sendEventAndWait("Profiler:Finish", { profileDir, profileFile });
+ }
+ return Promise.resolve();
+ },
+
+ /**
+ * A start-up test has finished. Callers don't need to run beginTest or
+ * finishTest, but should pause the sampler as soon as possible, and call
+ * this function to dump the profile.
+ *
+ * @returns Promise
+ * Resolves once the profile has been dumped to disk. The test should
+ * not try to quit the browser until this has resolved.
+ */
+ finishStartupProfiling() {
+ if (initted) {
+ let profileFile = "startup.profile";
+ return sendEventAndWait("Profiler:Finish", { profileDir, profileFile });
+ }
+ return Promise.resolve();
+ },
+
+ /**
+ * Add a marker to the profiler to indicate the start of the subtest.
+ *
+ * @param marker (string, optional)
+ * If non-empty, will set a marker immediately after resuming.
+ * @param inittedInParent (bool, optional)
+ * If true, it is assumed that the parent has already started profiling
+ * for us, and we can skip the initialization check. This is usually
+ * true for pageloader tests.
+ * @returns Promise
+ * Resolves once the marker has been set.
+ */
+ subtestStart(marker = "", inittedInParent = false) {
+ if (initted || inittedInParent) {
+ return sendEventAndWait("Profiler:SubtestStart", { marker });
+ }
+ return Promise.resolve();
+ },
+
+ /**
+ * Add a marker to the profiler to indicate the subtest duration.
+ *
+ * @param marker (string, optional)
+ * If non-empty, will set a marker immediately.
+ * @param inittedInParent (bool, optional)
+ * If true, it is assumed that the parent has already started profiling
+ * for us, and we can skip the initialization check. This is usually
+ * true for pageloader tests.
+ * @param startTime (number, optional)
+ * Start time, used to create an interval profile marker. If
+ * undefined, a single instance marker will be placed.
+ * @returns Promise
+ * Resolves once the marker has been set.
+ */
+ subtestEnd(marker = "", inittedInParent = false, startTime = undefined) {
+ if (initted || inittedInParent) {
+ return sendEventAndWait("Profiler:SubtestEnd", { marker, startTime });
+ }
+
+ return Promise.resolve();
+ },
+
+ /**
+ * Adds a marker to the profile.
+ *
+ * @param marker (string)
+ * If non-empty, will set a marker immediately.
+ * @param inittedInParent (bool, optional)
+ * If true, it is assumed that the parent has already started profiling
+ * for us, and we can skip the initialization check. This is usually
+ * true for pageloader tests.
+ * @param startTime (number, optional)
+ * Start time, used to create an interval profile marker. If
+ * undefined, a single instance marker will be placed.
+ * @returns Promise
+ * Resolves once the marker has been set.
+ */
+ mark(marker, inittedInParent = false, startTime = undefined) {
+ if (initted || inittedInParent) {
+ // If marker is omitted, just use the test name
+ if (!marker) {
+ marker = currentTest;
+ }
+
+ return sendEventAndWait("Profiler:Marker", { marker, startTime });
+ }
+
+ return Promise.resolve();
+ },
+ };
+
+ // sendAsyncMessage is a hack-y mechanism to determine whether or not
+ // we're running as a frame script. If we are, jam TalosContentProfiler
+ // into the content scope.
+ if (typeof sendAsyncMessage !== "undefined") {
+ content.wrappedJSObject.TalosContentProfiler = TalosContentProfiler;
+ }
+})();
diff --git a/testing/talos/talos/talos-powers/content/TalosParentProfiler.sys.mjs b/testing/talos/talos/talos-powers/content/TalosParentProfiler.sys.mjs
new file mode 100644
index 0000000000..e167235bf3
--- /dev/null
+++ b/testing/talos/talos/talos-powers/content/TalosParentProfiler.sys.mjs
@@ -0,0 +1,232 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/**
+ * This module is for instrumenting your Talos test for
+ * performance profiles while running within the parent process.
+ * Almost all of the functions that this script exposes to the
+ * Gecko Profiler are synchronous, except for finishTest, since that
+ * involves requesting the profiles from any content processes and
+ * then writing to disk.
+ *
+ * If your test is running in the content process, you should use the
+ * TalosContentProfiler.js utility script instead.
+ */
+
+export const TalosParentProfiler = {
+ // Whether or not this TalosContentProfiler object has had initFromObject
+ // or initFromURLQueryParams called on it. Any functions that change the
+ // state of the Gecko Profiler should only be called after calling either
+ // initFromObject or initFromURLQueryParams.
+ initted: false,
+ // The subtest name that beginTest() was called with.
+ currentTest: "unknown",
+ // Profiler settings.
+ interval: undefined,
+ entries: undefined,
+ featuresArray: undefined,
+ threadsArray: undefined,
+ profileDir: undefined,
+
+ get TalosPowers() {
+ // Use a bit of XPCOM hackery to get at the Talos Powers service
+ // implementation...
+ return Cc["@mozilla.org/talos/talos-powers-service;1"].getService(
+ Ci.nsISupports
+ ).wrappedJSObject;
+ },
+
+ /**
+ * Initialize the profiler using profiler settings supplied in a JS object.
+ *
+ * @param obj (object)
+ * The following properties on the object are respected:
+ * gecko_profile_interval (int)
+ * gecko_profile_entries (int)
+ * gecko_profile_features (string, comma separated list of features to enable)
+ * gecko_profile_threads (string, comma separated list of threads to filter with)
+ * gecko_profile_dir (string)
+ */
+ initFromObject(obj = {}) {
+ if (!this.initted) {
+ if (
+ "gecko_profile_dir" in obj &&
+ typeof obj.gecko_profile_dir == "string" &&
+ "gecko_profile_interval" in obj &&
+ Number.isFinite(obj.gecko_profile_interval * 1) &&
+ "gecko_profile_entries" in obj &&
+ Number.isFinite(obj.gecko_profile_entries * 1) &&
+ "gecko_profile_features" in obj &&
+ typeof obj.gecko_profile_features == "string" &&
+ "gecko_profile_threads" in obj &&
+ typeof obj.gecko_profile_threads == "string"
+ ) {
+ this.interval = obj.gecko_profile_interval;
+ this.entries = obj.gecko_profile_entries;
+ this.featuresArray = obj.gecko_profile_features.split(",");
+ this.threadsArray = obj.gecko_profile_threads.split(",");
+ this.profileDir = obj.gecko_profile_dir;
+ this.initted = true;
+ } else {
+ console.error(
+ "Profiler could not init with object: " + JSON.stringify(obj)
+ );
+ }
+ }
+ },
+
+ /**
+ * Initialize the profiler using a string from a location string.
+ *
+ * @param locationSearch (string)
+ * The location string to initialize with.
+ */
+ initFromURLQueryParams(locationSearch) {
+ this.initFromObject(this.searchToObject(locationSearch));
+ },
+
+ /**
+ * Parses an url query string into a JS object.
+ *
+ * @param locationSearch (string)
+ * The location string to parse.
+ * @returns Object
+ * The GET params from the location string as
+ * key-value pairs in the Object.
+ */
+ searchToObject(locationSearch) {
+ let pairs = locationSearch.substring(1).split("&");
+ let result = {};
+
+ for (let i in pairs) {
+ if (pairs[i] !== "") {
+ let pair = pairs[i].split("=");
+ result[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1] || "");
+ }
+ }
+
+ return result;
+ },
+
+ /**
+ * A Talos test is about to start.
+ *
+ * @param testName (string)
+ * The name of the test to use in Profiler markers.
+ */
+ beginTest(testName) {
+ if (this.initted) {
+ this.currentTest = testName;
+ this.TalosPowers.profilerBegin({
+ entries: this.entries,
+ interval: this.interval,
+ featuresArray: this.featuresArray,
+ threadsArray: this.threadsArray,
+ });
+ } else {
+ let msg =
+ "You should not call beginTest without having first " +
+ "initted the Profiler";
+ console.error(msg);
+ }
+ },
+
+ /**
+ * A Talos test has finished. This will stop the Gecko Profiler from
+ * sampling, and return a Promise that resolves once the Profiler has
+ * finished dumping the multi-process profile to disk.
+ *
+ * @returns Promise
+ * Resolves once the profile has been dumped to disk. The test should
+ * not try to quit the browser until this has resolved.
+ */
+ finishTest() {
+ if (this.initted) {
+ let profileFile = `${this.currentTest}.profile`;
+ return this.TalosPowers.profilerFinish(this.profileDir, profileFile);
+ }
+ let msg =
+ "You should not call finishTest without having first " +
+ "initted the Profiler";
+ console.error(msg);
+ return Promise.reject(msg);
+ },
+
+ /**
+ * A start-up test has finished. Callers don't need to run beginTest or
+ * finishTest, but should pause the sampler as soon as possible, and call
+ * this function to dump the profile.
+ *
+ * @returns Promise
+ * Resolves once the profile has been dumped to disk. The test should
+ * not try to quit the browser until this has resolved.
+ */
+ finishStartupProfiling() {
+ if (this.initted) {
+ let profileFile = "startup.profile";
+ return this.TalosPowers.profilerFinish(this.profileDir, profileFile);
+ }
+ return Promise.resolve();
+ },
+
+ /**
+ * Set a marker indicating the start of the subtest.
+ *
+ */
+ subtestStart(marker = "") {
+ if (this.initted) {
+ this.TalosPowers.profilerSubtestStart(marker);
+ }
+ },
+
+ /**
+ * Set a marker indicating the duration of the subtest.
+ *
+ * @param marker (string, optional)
+ * If non-empty, will set a marker immediately.
+ * @param startTime (number, optional)
+ * Start time, used to create an interval profile marker. If
+ * undefined, a single instance marker will be placed.
+ */
+ subtestEnd(marker = "", startTime = undefined) {
+ if (this.initted) {
+ this.TalosPowers.profilerSubtestEnd(marker, startTime);
+ }
+ },
+
+ /**
+ * Adds a marker to the profile.
+ *
+ * @param marker (string, optional)
+ * If non-empty, will set a marker immediately.
+ * @param startTime (number, optional)
+ * Start time, used to create an interval profile marker. If
+ * undefined, a single instance marker will be placed.
+ * @returns Promise
+ * Resolves once the marker has been set.
+ */
+ mark(marker, startTime = undefined) {
+ if (this.initted) {
+ // If marker is omitted, just use the test name
+ if (!marker) {
+ marker = this.currentTest;
+ }
+
+ this.TalosPowers.addIntervalMarker(marker, startTime);
+ }
+ },
+
+ afterProfileGathered() {
+ if (!this.initted) {
+ return Promise.resolve();
+ }
+
+ return new Promise(resolve => {
+ Services.obs.addObserver(function onGathered() {
+ Services.obs.removeObserver(onGathered, "talos-profile-gathered");
+ resolve();
+ }, "talos-profile-gathered");
+ });
+ },
+};
diff --git a/testing/talos/talos/talos-powers/content/TalosPowersContent.js b/testing/talos/talos/talos-powers/content/TalosPowersContent.js
new file mode 100644
index 0000000000..b50e1360c6
--- /dev/null
+++ b/testing/talos/talos/talos-powers/content/TalosPowersContent.js
@@ -0,0 +1,151 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// This file should be executed by the [possibly unprivileged] consumer, e.g.:
+// <script src="/scripts/TalosPowersContent.js"></script>
+// and then e.g. TalosPowersParent.exec("sampleParentService", myArg, myCallback)
+// It marely sends a query event and possibly listens to a reply event, and does not
+// depend on any special privileges.
+
+var TalosPowers;
+var TalosPowersContent;
+var TalosPowersParent;
+
+(function () {
+ // The talos powers chrome event/message listeners are set up
+ // asynchronously during startup so attempts to use this code too early
+ // may race against the extension initialization. Code that has might
+ // be vulnerable to that race can use `await TalosPowers.loadPromise;`
+ // which waits until it can successfully exchange a simple "ping" message
+ // with the extension.
+ async function tryPing() {
+ let pingPromise = new Promise(resolve => {
+ TalosPowersParent.exec("ping", null, resolve);
+ });
+ let timeoutPromise = new Promise((resolve, reject) => {
+ setTimeout(reject, 500);
+ });
+
+ try {
+ await Promise.race([pingPromise, timeoutPromise]);
+ } catch (e) {
+ return tryPing();
+ }
+
+ return null;
+ }
+
+ TalosPowers = {};
+ Object.defineProperty(TalosPowers, "loadPromise", {
+ get: () => tryPing(),
+ configurable: true,
+ enumerable: true,
+ });
+
+ TalosPowersContent = {
+ /**
+ * Synchronously force CC and GC in this process, as well as in the
+ * parent process.
+ */
+ forceCCAndGC() {
+ var event = new CustomEvent("TalosPowersContentForceCCAndGC", {
+ bubbles: true,
+ });
+ document.dispatchEvent(event);
+ },
+
+ focus(callback) {
+ if (callback) {
+ addEventListener("TalosPowersContentFocused", function focused() {
+ removeEventListener("TalosPowersContentFocused", focused);
+ callback();
+ });
+ }
+ document.dispatchEvent(
+ new CustomEvent("TalosPowersContentFocus", {
+ bubbles: true,
+ })
+ );
+ },
+
+ getStartupInfo() {
+ return new Promise(resolve => {
+ var event = new CustomEvent("TalosPowersContentGetStartupInfo", {
+ bubbles: true,
+ });
+ document.dispatchEvent(event);
+
+ addEventListener(
+ "TalosPowersContentGetStartupInfoResult",
+ function onResult(e) {
+ removeEventListener(
+ "TalosPowersContentGetStartupInfoResult",
+ onResult
+ );
+ resolve(e.detail);
+ }
+ );
+ });
+ },
+
+ dumpConsole() {
+ var event = new CustomEvent("TalosPowersContentDumpConsole", {
+ bubbles: true,
+ });
+ document.dispatchEvent(event);
+ },
+
+ goQuitApplication(waitForStartupFinished) {
+ var event = new CustomEvent("TalosPowersGoQuitApplication", {
+ bubbles: true,
+ detail: { waitForStartupFinished },
+ });
+ document.dispatchEvent(event);
+ },
+
+ wrCapture() {
+ var event = new CustomEvent("TalosPowersWebRenderCapture", {
+ bubbles: true,
+ });
+ document.dispatchEvent(event);
+ },
+ };
+
+ /**
+ * Generic interface to service functions which run at the parent process.
+ */
+ // If including this script proves too much touble, you may embed the following
+ // code verbatim instead, and keep the copy up to date with its source here:
+ TalosPowersParent = {
+ replyId: 1,
+
+ // dispatch an event to the framescript and register the result/callback event
+ exec(commandName, arg, callback, opt_custom_window) {
+ let win = opt_custom_window || window;
+ let replyEvent = "TalosPowers:ParentExec:ReplyEvent:" + this.replyId++;
+ if (callback) {
+ win.addEventListener(
+ replyEvent,
+ function (e) {
+ callback(e.detail);
+ },
+ { once: true }
+ );
+ }
+ win.dispatchEvent(
+ new win.CustomEvent("TalosPowers:ParentExec:QueryEvent", {
+ bubbles: true,
+ detail: {
+ command: {
+ name: commandName,
+ data: arg,
+ },
+ listeningTo: replyEvent,
+ },
+ })
+ );
+ },
+ };
+ // End of possibly embedded code
+})();
diff --git a/testing/talos/talos/talos-powers/manifest.json b/testing/talos/talos/talos-powers/manifest.json
new file mode 100644
index 0000000000..f31c9fe1fa
--- /dev/null
+++ b/testing/talos/talos/talos-powers/manifest.json
@@ -0,0 +1,23 @@
+{
+ "manifest_version": 2,
+ "name": "Talos Powers",
+ "description": "Gives Talos content special powers.",
+ "version": "1.1",
+
+ "browser_specific_settings": {
+ "gecko": {
+ "id": "talos-powers@mozilla.org"
+ }
+ },
+
+ "experiment_apis": {
+ "talos_powers": {
+ "schema": "schema.json",
+ "parent": {
+ "scopes": ["addon_parent"],
+ "script": "api.js",
+ "events": ["startup"]
+ }
+ }
+ }
+}
diff --git a/testing/talos/talos/talos-powers/schema.json b/testing/talos/talos/talos-powers/schema.json
new file mode 100644
index 0000000000..fe51488c70
--- /dev/null
+++ b/testing/talos/talos/talos-powers/schema.json
@@ -0,0 +1 @@
+[]
diff --git a/testing/talos/talos/talos_process.py b/testing/talos/talos/talos_process.py
new file mode 100644
index 0000000000..d55b02da7b
--- /dev/null
+++ b/testing/talos/talos/talos_process.py
@@ -0,0 +1,294 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this file,
+# You can obtain one at http://mozilla.org/MPL/2.0/.
+import pprint
+import signal
+import subprocess
+import sys
+import time
+import traceback
+from threading import Timer
+
+import mozcrash
+import psutil
+import six
+from mozlog import get_proxy_logger
+from mozscreenshot import dump_screen
+
+from talos.utils import TalosError
+
+LOG = get_proxy_logger()
+
+
+class ProcessContext(object):
+ """
+ Store useful results of the browser execution.
+ """
+
+ def __init__(self, is_launcher=False):
+ self.output = None
+ self.process = None
+ self.is_launcher = is_launcher
+
+ @property
+ def pid(self):
+ return self.process and self.process.pid
+
+ def kill_process(self):
+ """
+ Kill the process, returning the exit code or None if the process
+ is already finished.
+ """
+ parentProc = self.process
+ # If we're using a launcher process, terminate that instead of us:
+ kids = parentProc and parentProc.is_running() and parentProc.children()
+ if self.is_launcher and kids and len(kids) == 1 and kids[0].is_running():
+ LOG.debug(
+ (
+ "Launcher process {} detected. Terminating parent"
+ " process {} instead."
+ ).format(parentProc, kids[0])
+ )
+ parentProc = kids[0]
+
+ if parentProc and parentProc.is_running():
+ LOG.debug("Terminating %s" % parentProc)
+ try:
+ parentProc.terminate()
+ except psutil.NoSuchProcess:
+ procs = parentProc.children()
+ for p in procs:
+ c = ProcessContext()
+ c.process = p
+ c.kill_process()
+ return parentProc.returncode
+ try:
+ return parentProc.wait(3)
+ except psutil.TimeoutExpired:
+ LOG.debug("Killing %s" % parentProc)
+ parentProc.kill()
+ # will raise TimeoutExpired if unable to kill
+ return parentProc.wait(3)
+
+
+class Reader(object):
+ def __init__(self):
+ self.output = []
+ self.got_end_timestamp = False
+ self.got_timeout = False
+ self.timeout_message = ""
+ self.got_error = False
+ self.proc = None
+
+ def __call__(self, line):
+ line = six.ensure_str(line)
+ line = line.strip("\r\n")
+ if line.find("__endTimestamp") != -1:
+ self.got_end_timestamp = True
+ elif line == "TART: TIMEOUT":
+ self.got_timeout = True
+ self.timeout_message = "TART"
+ elif line.startswith("TEST-UNEXPECTED-FAIL | "):
+ self.got_error = True
+
+ if not (
+ "JavaScript error:" in line
+ or "JavaScript warning:" in line
+ or "SyntaxError:" in line
+ or "TypeError:" in line
+ ):
+ LOG.process_output(self.proc.pid, line)
+ self.output.append(line)
+
+
+def run_browser(
+ command,
+ minidump_dir,
+ timeout=None,
+ on_started=None,
+ debug=None,
+ debugger=None,
+ debugger_args=None,
+ utility_path=None,
+ **kwargs
+):
+ """
+ Run the browser using the given `command`.
+
+ After the browser prints __endTimestamp, we give it 5
+ seconds to quit and kill it if it's still alive at that point.
+
+ Note that this method ensure that the process is killed at
+ the end. If this is not possible, an exception will be raised.
+
+ :param command: the commad (as a string list) to run the browser
+ :param minidump_dir: a path where to extract minidumps in case the
+ browser hang. This have to be the same value
+ used in `mozcrash.check_for_crashes`.
+ :param timeout: if specified, timeout to wait for the browser before
+ we raise a :class:`TalosError`
+ :param on_started: a callback that can be used to do things just after
+ the browser has been started. The callback must takes
+ an argument, which is the psutil.Process instance
+ :param kwargs: additional keyword arguments for the :class:`subprocess.Popen`
+ instance
+
+ Returns a ProcessContext instance, with available output and pid used.
+ """
+
+ debugger_info = find_debugger_info(debug, debugger, debugger_args)
+ if debugger_info is not None:
+ return run_in_debug_mode(
+ command, debugger_info, on_started=on_started, env=kwargs.get("env")
+ )
+
+ is_launcher = sys.platform.startswith("win") and "-wait-for-browser" in command
+ context = ProcessContext(is_launcher)
+ first_time = int(time.time()) * 1000
+ wait_for_quit_timeout = 20
+ reader = Reader()
+
+ LOG.info("Using env: %s" % pprint.pformat(kwargs["env"]))
+
+ timed_out = False
+
+ def timeout_handler():
+ nonlocal timed_out
+ timed_out = True
+
+ proc_timer = Timer(timeout, timeout_handler)
+ proc_timer.start()
+
+ proc = subprocess.Popen(
+ command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=False, **kwargs
+ )
+ reader.proc = proc
+
+ LOG.process_start(proc.pid, " ".join(command))
+ try:
+ context.process = psutil.Process(proc.pid)
+ if on_started:
+ on_started(context.process)
+
+ # read output until the browser terminates or the timeout is hit
+ for line in proc.stdout:
+ reader(line)
+ if timed_out:
+ LOG.info("Timeout waiting for test completion; killing browser...")
+ # try to extract the minidump stack if the browser hangs
+ dump_screen_on_failure(utility_path)
+ kill_and_get_minidump(context, minidump_dir)
+ raise TalosError("timeout")
+ break
+
+ if reader.got_end_timestamp:
+ proc.wait(wait_for_quit_timeout)
+ if proc.poll() is None:
+ LOG.info(
+ "Browser shutdown timed out after {0} seconds, killing"
+ " process.".format(wait_for_quit_timeout)
+ )
+ dump_screen_on_failure(utility_path)
+ kill_and_get_minidump(context, minidump_dir)
+ raise TalosError(
+ "Browser shutdown timed out after {0} seconds, killed"
+ " process.".format(wait_for_quit_timeout)
+ )
+ elif reader.got_timeout:
+ dump_screen_on_failure(utility_path)
+ raise TalosError("TIMEOUT: %s" % reader.timeout_message)
+ elif reader.got_error:
+ dump_screen_on_failure(utility_path)
+ raise TalosError("unexpected error")
+ finally:
+ # this also handle KeyboardInterrupt
+ # ensure early the process is really terminated
+ proc_timer.cancel()
+ return_code = None
+ try:
+ return_code = context.kill_process()
+ if return_code is None:
+ return_code = proc.wait(1)
+ except Exception:
+ # Maybe killed by kill_and_get_minidump(), maybe ended?
+ LOG.info("Unable to kill process")
+ LOG.info(traceback.format_exc())
+
+ reader.output.append(
+ "__startBeforeLaunchTimestamp%d__endBeforeLaunchTimestamp" % first_time
+ )
+ reader.output.append(
+ "__startAfterTerminationTimestamp%d__endAfterTerminationTimestamp"
+ % (int(time.time()) * 1000)
+ )
+
+ if return_code is not None:
+ LOG.process_exit(proc.pid, return_code)
+ else:
+ LOG.debug("Unable to detect exit code of the process %s." % proc.pid)
+ context.output = reader.output
+ return context
+
+
+def find_debugger_info(debug, debugger, debugger_args):
+ debuggerInfo = None
+ if debug or debugger or debugger_args:
+ import mozdebug
+
+ if not debugger:
+ # No debugger name was provided. Look for the default ones on
+ # current OS.
+ debugger = mozdebug.get_default_debugger_name(
+ mozdebug.DebuggerSearch.KeepLooking
+ )
+
+ debuggerInfo = None
+ if debugger:
+ debuggerInfo = mozdebug.get_debugger_info(debugger, debugger_args)
+
+ if debuggerInfo is None:
+ raise TalosError("Could not find a suitable debugger in your PATH.")
+
+ return debuggerInfo
+
+
+def run_in_debug_mode(command, debugger_info, on_started=None, env=None):
+ signal.signal(signal.SIGINT, lambda sigid, frame: None)
+ context = ProcessContext()
+ command_under_dbg = [debugger_info.path] + debugger_info.args + command
+
+ ttest_process = subprocess.Popen(command_under_dbg, env=env)
+
+ context.process = psutil.Process(ttest_process.pid)
+ if on_started:
+ on_started(context.process)
+
+ return_code = ttest_process.wait()
+
+ if return_code is not None:
+ LOG.process_exit(ttest_process.pid, return_code)
+ else:
+ LOG.debug("Unable to detect exit code of the process %s." % ttest_process.pid)
+
+ return context
+
+
+def kill_and_get_minidump(context, minidump_dir):
+ proc = context.process
+ if context.is_launcher:
+ kids = context.process.children()
+ if len(kids) == 1:
+ LOG.debug(
+ (
+ "Launcher process {} detected. Killing parent"
+ " process {} instead."
+ ).format(proc, kids[0])
+ )
+ proc = kids[0]
+ LOG.debug("Killing %s and writing a minidump file" % proc)
+ mozcrash.kill_and_get_minidump(proc.pid, minidump_dir)
+
+
+def dump_screen_on_failure(utility_path):
+ if utility_path is not None:
+ dump_screen(utility_path, LOG)
diff --git a/testing/talos/talos/talosconfig.py b/testing/talos/talos/talosconfig.py
new file mode 100644
index 0000000000..d3dc64cd0d
--- /dev/null
+++ b/testing/talos/talos/talosconfig.py
@@ -0,0 +1,60 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+import json
+import os
+
+
+def writeConfigFile(obj, vals):
+ data = dict((opt, obj[opt]) for opt in (vals or obj.keys()))
+ return json.dumps(data)
+
+
+def generateTalosConfig(command_line, browser_config, test_config, pid=None):
+ bcontroller_vars = [
+ "command",
+ "child_process",
+ "process",
+ "browser_wait",
+ "test_timeout",
+ "browser_path",
+ "error_filename",
+ ]
+
+ if "xperf_path" in browser_config:
+ bcontroller_vars.append("xperf_path")
+ bcontroller_vars.extend(["buildid", "sourcestamp", "repository", "title"])
+ if "name" in test_config:
+ bcontroller_vars.append("testname")
+ browser_config["testname"] = test_config["name"]
+
+ browser_config["command"] = " ".join(command_line)
+
+ if (
+ ("xperf_providers" in test_config)
+ and ("xperf_user_providers" in test_config)
+ and ("xperf_stackwalk" in test_config)
+ ): # noqa
+ print("extending with xperf!")
+ browser_config["xperf_providers"] = test_config["xperf_providers"]
+ browser_config["xperf_user_providers"] = test_config["xperf_user_providers"]
+ browser_config["xperf_stackwalk"] = test_config["xperf_stackwalk"]
+ browser_config["processID"] = pid
+ browser_config["approot"] = os.path.dirname(browser_config["browser_path"])
+ bcontroller_vars.extend(
+ [
+ "xperf_providers",
+ "xperf_user_providers",
+ "xperf_stackwalk",
+ "processID",
+ "approot",
+ ]
+ )
+
+ content = writeConfigFile(browser_config, bcontroller_vars)
+
+ with open(browser_config["bcontroller_config"], "w") as fhandle:
+ fhandle.write(content)
+
+ return content
diff --git a/testing/talos/talos/test.py b/testing/talos/talos/test.py
new file mode 100644
index 0000000000..9f6bd78e58
--- /dev/null
+++ b/testing/talos/talos/test.py
@@ -0,0 +1,1539 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+import os
+
+from talos import filter
+
+"""
+test definitions for Talos
+"""
+
+_TESTS = {} # internal dict of Talos test classes
+
+
+def register_test():
+ """Decorator to register Talos test classes"""
+
+ def wrapper(klass):
+ assert issubclass(klass, Test)
+ assert klass.name() not in _TESTS
+
+ _TESTS[klass.name()] = klass
+ return klass
+
+ return wrapper
+
+
+def test_dict():
+ """Return the dict of the registered test classes"""
+ return _TESTS
+
+
+class Test(object):
+ """abstract base class for a Talos test case"""
+
+ __test__ = False # not pytest
+
+ cycles = None # number of cycles
+ keys = []
+ desktop = True
+ filters = filter.ignore_first.prepare(1) + filter.median.prepare()
+ lower_is_better = True
+ alert_threshold = 2.0
+ perfherder_framework = "talos"
+ subtest_alerts = False
+ suite_should_alert = True
+ # Default number of entries for the gecko profiler which is 128MiB.
+ # This value is calculated by dividing the 128MiB of memory by 8 because
+ # the profiler uses 8 bytes per entry.
+ gecko_profile_entries = int(128 * 1024 * 1024 / 8)
+
+ @classmethod
+ def name(cls):
+ return cls.__name__
+
+ @classmethod
+ def description(cls):
+ if cls.__doc__ is None:
+ return "No documentation available yet."
+ else:
+ doc = cls.__doc__
+ description_lines = [i.strip() for i in doc.strip().splitlines()]
+ return "\n".join(description_lines)
+
+ def __init__(self, **kw):
+ self.update(**kw)
+
+ def update(self, **kw):
+ self.__dict__.update(kw)
+
+ def items(self):
+ """
+ returns a list of 2-tuples
+ """
+ retval = [("name", self.name())]
+ for key in self.keys:
+ value = getattr(self, key, None)
+ if value is not None:
+ retval.append((key, value))
+ return retval
+
+ def __str__(self):
+ """string form appropriate for YAML output"""
+ items = self.items()
+
+ key, value = items.pop(0)
+ lines = ["- %s: %s" % (key, value)]
+ for key, value in items:
+ lines.append(" %s: %s" % (key, value))
+ return "\n".join(lines)
+
+
+# ts-style startup tests (ts, twinopen, ts_cold, etc)
+# The overall test number is calculated by excluding the max opening time
+# and taking an average of the remaining numbers.
+class TsBase(Test):
+ """abstract base class for ts-style tests"""
+
+ keys = [
+ "url",
+ "url_timestamp",
+ "timeout",
+ "cycles",
+ "profile_path", # The path containing the template profile. This
+ # directory is copied to the temporary profile during
+ # initialization of the test. If some of the files may
+ # be overwritten by Firefox and need to be reinstalled
+ # before each pass, use key |reinstall|
+ "gecko_profile",
+ "gecko_profile_interval",
+ "gecko_profile_entries",
+ "gecko_profile_features",
+ "gecko_profile_threads",
+ "gecko_profile_extra_threads",
+ "gecko_profile_startup",
+ "preferences",
+ "xperf_counters",
+ "xperf_providers",
+ "xperf_user_providers",
+ "xperf_stackwalk",
+ "tpmozafterpaint",
+ "fnbpaint",
+ "tphero",
+ "tpmanifest",
+ "profile",
+ "firstpaint",
+ "userready",
+ "testeventmap",
+ "base_vs_ref",
+ "extensions",
+ "filters",
+ "setup",
+ "cleanup",
+ "pine",
+ "skip_reason",
+ "webextensions",
+ "webextensions_folder",
+ "reinstall", # A list of files from the profile directory that
+ # should be copied to the temporary profile prior to
+ # running each cycle, to avoid one cycle overwriting
+ # the data used by the next another cycle (may be used
+ # e.g. for sessionstore.js to ensure that all cycles
+ # use the exact same sessionstore.js, rather than a
+ # more recent copy).
+ ]
+
+ def __init__(self, **kw):
+ super(TsBase, self).__init__(**kw)
+
+ # Unless set to False explicitly, all TsBase tests will have the blocklist
+ # enabled by default in order to more accurately test the startup paths.
+ BLOCKLIST_PREF = "extensions.blocklist.enabled"
+
+ if not hasattr(self, "preferences"):
+ self.preferences = {
+ BLOCKLIST_PREF: True,
+ }
+ elif BLOCKLIST_PREF not in self.preferences:
+ self.preferences[BLOCKLIST_PREF] = True
+
+
+@register_test()
+class ts_paint(TsBase):
+ """
+ Launches tspaint_test.html with the current timestamp in the url,
+ waits for [MozAfterPaint and onLoad] to fire, then records the end
+ time and calculates the time to startup.
+ """
+
+ cycles = 20
+ timeout = 150
+ gecko_profile_startup = True
+ url = "startup_test/tspaint_test.html"
+ xperf_counters = []
+ win7_counters = []
+ filters = filter.ignore_first.prepare(1) + filter.median.prepare()
+ tpmozafterpaint = True
+ mainthread = False
+ responsiveness = False
+ unit = "ms"
+
+
+@register_test()
+class ts_paint_webext(ts_paint):
+ webextensions = "${talos}/webextensions/dummy/dummy.xpi"
+ preferences = {"xpinstall.signatures.required": False}
+
+
+@register_test()
+class ts_paint_heavy(ts_paint):
+ """
+ ts_paint test ran against a heavy-user profile
+ """
+
+ profile = "simple"
+
+
+@register_test()
+class startup_about_home_paint(ts_paint):
+ """
+ Tests loading about:home on startup with the about:home startup cache
+ disabled, to more accurately simulate startup when the cache does not
+ exist.
+ """
+
+ url = None
+ cycles = 20
+ timeout = 600
+ extensions = ["${talos}/startup_test/startup_about_home_paint/addon"]
+ tpmanifest = "${talos}/startup_test/startup_about_home_paint/startup_about_home_paint.manifest"
+ preferences = {
+ "browser.startup.homepage.abouthome_cache.enabled": False,
+ }
+ pine = False
+
+
+@register_test()
+class startup_about_home_paint_cached(ts_paint):
+ """
+ Tests loading about:home on startup with the about:home startup cache
+ enabled.
+ """
+
+ url = None
+ cycles = 20
+ extensions = ["${talos}/startup_test/startup_about_home_paint/addon"]
+ tpmanifest = "${talos}/startup_test/startup_about_home_paint/startup_about_home_paint.manifest"
+ preferences = {
+ "browser.startup.homepage.abouthome_cache.enabled": True,
+ }
+ pine = False
+
+
+@register_test()
+class startup_about_home_paint_realworld_webextensions(ts_paint):
+ url = None
+ cycles = 20
+ extensions = [
+ "${talos}/startup_test/startup_about_home_paint/addon",
+ "${talos}/getinfooffline",
+ ]
+ tpmanifest = "${talos}/startup_test/startup_about_home_paint/startup_about_home_paint.manifest"
+ webextensions_folder = "${talos}/webextensions"
+ preferences = {
+ "browser.startup.homepage.abouthome_cache.enabled": False,
+ }
+ pine = False
+
+
+@register_test()
+class sessionrestore(TsBase):
+ """
+ A start up test measuring the time it takes to load a sessionstore.js file.
+
+ 1. Set up Firefox to restore from a given sessionstore.js file.
+ 2. Launch Firefox.
+ 3. Measure the delta between firstPaint and sessionRestored.
+ """
+
+ extensions = ["${talos}/startup_test/sessionrestore/addon"]
+ cycles = 10
+ timeout = 900
+ gecko_profile_startup = True
+ profile_path = "${talos}/startup_test/sessionrestore/profile"
+ reinstall = ["sessionstore.jsonlz4", "sessionstore.js", "sessionCheckpoints.json"]
+ # Restore the session. We have to provide a URL, otherwise Talos
+ # asks for a manifest URL.
+ url = "about:home"
+ preferences = {"browser.startup.page": 3}
+ unit = "ms"
+ pine = False
+
+
+@register_test()
+class sessionrestore_no_auto_restore(sessionrestore):
+ """
+ A start up test measuring the time it takes to load a sessionstore.js file.
+
+ 1. Set up Firefox to *not* restore automatically from sessionstore.js file.
+ 2. Launch Firefox.
+ 3. Measure the delta between firstPaint and sessionRestored.
+ """
+
+ timeout = 300
+ preferences = {
+ "browser.startup.page": 1,
+ "talos.sessionrestore.norestore": True,
+ }
+
+
+@register_test()
+class sessionrestore_many_windows(sessionrestore):
+ """
+ A start up test measuring the time it takes to load a sessionstore.js file.
+
+ 1. Set up Firefox to restore automatically from sessionstore.js file.
+ 2. Launch Firefox.
+ 3. Measure the delta between firstPaint and sessionRestored.
+ """
+
+ profile_path = "${talos}/startup_test/sessionrestore/profile-manywindows"
+
+
+# pageloader tests(tp5, etc)
+
+# The overall test number is determined by first calculating the median
+# page load time for each page in the set (excluding the max page load
+# per individual page). The max median from that set is then excluded and
+# the average is taken; that becomes the number reported to the tinderbox
+# waterfall.
+
+
+class PageloaderTest(Test):
+ """abstract base class for a Talos Pageloader test"""
+
+ extensions = ["${talos}/pageloader"]
+ tpmanifest = None # test manifest
+ tpcycles = 1 # number of time to run each page
+ cycles = None
+ timeout = None
+
+ keys = [
+ "tpmanifest",
+ "tpcycles",
+ "tppagecycles",
+ "tprender",
+ "tpchrome",
+ "tpmozafterpaint",
+ "fnbpaint",
+ "tphero",
+ "tploadnocache",
+ "firstpaint",
+ "userready",
+ "testeventmap",
+ "base_vs_ref",
+ "mainthread",
+ "resolution",
+ "cycles",
+ "gecko_profile",
+ "gecko_profile_interval",
+ "gecko_profile_entries",
+ "gecko_profile_features",
+ "gecko_profile_threads",
+ "gecko_profile_extra_threads",
+ "tptimeout",
+ "win_counters",
+ "w7_counters",
+ "linux_counters",
+ "mac_counters",
+ "tpscrolltest",
+ "xperf_counters",
+ "timeout",
+ "responsiveness",
+ "profile_path",
+ "xperf_providers",
+ "xperf_user_providers",
+ "xperf_stackwalk",
+ "format_pagename",
+ "filters",
+ "preferences",
+ "extensions",
+ "setup",
+ "cleanup",
+ "pine",
+ "skip_reason",
+ "lower_is_better",
+ "alert_threshold",
+ "unit",
+ "webextensions",
+ "profile",
+ "suite_should_alert",
+ "subtest_alerts",
+ "perfherder_framework",
+ "pdfpaint",
+ "webextensions_folder",
+ "a11y",
+ ]
+
+
+class QuantumPageloadTest(PageloaderTest):
+ """
+ Base class for a Quantum Pageload test
+ """
+
+ tpcycles = 1
+ tppagecycles = 25
+ gecko_profile_interval = 1
+ filters = filter.ignore_first.prepare(5) + filter.median.prepare()
+ unit = "ms"
+ lower_is_better = True
+ fnbpaint = True
+
+
+@register_test()
+class twinopen(PageloaderTest):
+ """
+ Tests the amount of time it takes an open browser to open a new browser
+ window and paint the browser chrome. This test does not include startup
+ time. Multiple test windows are opened in succession.
+ (Measures ctrl-n performance.)
+ """
+
+ extensions = ["${talos}/pageloader", "${talos}/tests/twinopen"]
+ tpmanifest = "${talos}/tests/twinopen/twinopen.manifest"
+ tppagecycles = 20
+ timeout = 300
+ gecko_profile_interval = 1
+ tpmozafterpaint = True
+ filters = filter.ignore_first.prepare(5) + filter.median.prepare()
+ unit = "ms"
+ preferences = {"browser.startup.homepage": "about:blank"}
+
+
+@register_test()
+class pdfpaint(PageloaderTest):
+ """
+ Tests the amount of time it takes for the the first page of a PDF to
+ be rendered.
+ """
+
+ tpmanifest = "${talos}/tests/pdfpaint/pdfpaint.manifest"
+ tppagecycles = 20
+ timeout = 600
+ pdfpaint = True
+ unit = "ms"
+
+
+@register_test()
+class cpstartup(PageloaderTest):
+ """
+ Tests the amount of time it takes to start up a new content process and
+ initialize it to the point where it can start processing incoming URLs
+ to load.
+ """
+
+ extensions = ["${talos}/pageloader", "${talos}/tests/cpstartup/extension"]
+ tpmanifest = "${talos}/tests/cpstartup/cpstartup.manifest"
+ tppagecycles = 20
+ timeout = 600
+ tploadnocache = True
+ unit = "ms"
+ preferences = {
+ # By default, Talos is configured to open links from
+ # content in new windows. We're overriding them so that
+ # they open in new tabs instead.
+ # See http://kb.mozillazine.org/Browser.link.open_newwindow
+ # and http://kb.mozillazine.org/Browser.link.open_newwindow.restriction
+ "browser.link.open_newwindow": 3,
+ "browser.link.open_newwindow.restriction": 2,
+ }
+
+
+@register_test()
+class tabpaint(PageloaderTest):
+ """
+ Tests the amount of time it takes to open new tabs, triggered from
+ both the parent process and the content process.
+ """
+
+ extensions = ["${talos}/tests/tabpaint", "${talos}/pageloader"]
+ tpmanifest = "${talos}/tests/tabpaint/tabpaint.manifest"
+ tppagecycles = 20
+ timeout = 600
+ tploadnocache = True
+ unit = "ms"
+ preferences = {
+ # By default, Talos is configured to open links from
+ # content in new windows. We're overriding them so that
+ # they open in new tabs instead.
+ # See http://kb.mozillazine.org/Browser.link.open_newwindow
+ # and http://kb.mozillazine.org/Browser.link.open_newwindow.restriction
+ "browser.link.open_newwindow": 3,
+ "browser.link.open_newwindow.restriction": 2,
+ "browser.newtab.preload": False,
+ }
+
+
+@register_test()
+class tabswitch(PageloaderTest):
+ """
+ Tests the amount of time it takes to switch between tabs
+ """
+
+ extensions = ["${talos}/tests/tabswitch", "${talos}/pageloader"]
+ tpmanifest = "${talos}/tests/tabswitch/tabswitch.manifest"
+ tppagecycles = 5
+ timeout = 900
+ tploadnocache = True
+ preferences = {
+ "addon.test.tabswitch.urlfile": os.path.join("${talos}", "tests", "tp5o.html"),
+ "addon.test.tabswitch.webserver": "${webserver}",
+ "addon.test.tabswitch.maxurls": -1,
+ }
+ unit = "ms"
+
+
+@register_test()
+class cross_origin_pageload(PageloaderTest):
+ """
+ Tests the amount of time it takes to load a page which
+ has 20 cross origin iframes
+ """
+
+ preferences = {"dom.ipc.processPrelaunch.fission.number": 30}
+ extensions = ["${talos}/pageloader"]
+ tpmanifest = "${talos}/tests/cross_origin_pageload/cross_origin_pageload.manifest"
+ tppagecycles = 10
+ timeout = 100
+ tploadnocache = True
+ unit = "ms"
+
+
+@register_test()
+class tart(PageloaderTest):
+ """
+ Tab Animation Regression Test
+ Tests tab animation on these cases:
+ 1. Simple: single new tab of about:blank open/close without affecting
+ (shrinking/expanding) other tabs.
+ 2. icon: same as above with favicons and long title instead of about:blank.
+ 3. Newtab: newtab open with thumbnails preview - without affecting other
+ tabs, with and without preload.
+ 4. Fade: opens a tab, then measures fadeout/fadein (tab animation without
+ the overhead of opening/closing a tab).
+ - Case 1 is tested with DPI scaling of 1.
+ - Case 2 is tested with DPI scaling of 1.0 and 2.0.
+ - Case 3 is tested with the default scaling of the test system.
+ - Case 4 is tested with DPI scaling of 2.0 with the "icon" tab
+ (favicon and long title).
+ - Each animation produces 3 test results:
+ - error: difference between the designated duration and the actual
+ completion duration from the trigger.
+ - half: average interval over the 2nd half of the animation.
+ - all: average interval over all recorded intervals.
+ """
+
+ tpmanifest = "${talos}/tests/tart/tart.manifest"
+ extensions = ["${talos}/pageloader", "${talos}/tests/tart/addon"]
+ tpcycles = 1
+ tppagecycles = 25
+ tploadnocache = True
+ tpmozafterpaint = False
+ gecko_profile_interval = 10
+ win_counters = w7_counters = linux_counters = mac_counters = None
+ """
+ ASAP mode
+ The recording API is broken with OMTC before ~2013-11-27
+ After ~2013-11-27, disabling OMTC will also implicitly disable
+ OGL HW composition to disable OMTC with older firefox builds, also
+ set 'layers.offmainthreadcomposition.enabled': False
+ """
+ preferences = {
+ "layout.frame_rate": 0,
+ "docshell.event_starvation_delay_hint": 1,
+ "dom.send_after_paint_to_content": False,
+ }
+ filters = filter.ignore_first.prepare(1) + filter.median.prepare()
+ unit = "ms"
+ pine = False
+
+
+@register_test()
+class damp(PageloaderTest):
+ """
+ Devtools At Maximum Performance
+ Tests the speed of DevTools toolbox open, close, and page reload
+ for each tool, across a very simple and very complicated page.
+ """
+
+ tpmanifest = "${talos}/tests/devtools/damp.manifest"
+ extensions = ["${talos}/pageloader", "${talos}/tests/devtools/addon"]
+ cycles = 5
+ tpcycles = 1
+ tppagecycles = 5
+ tploadnocache = True
+ tpmozafterpaint = False
+ gecko_profile_interval = 10
+ gecko_profile_extra_threads = "DOM Worker"
+ win_counters = w7_counters = linux_counters = mac_counters = None
+ filters = filter.ignore_first.prepare(1) + filter.median.prepare()
+ preferences = {"devtools.memory.enabled": True}
+ unit = "ms"
+ subtest_alerts = True
+ perfherder_framework = "devtools"
+
+
+@register_test()
+class glterrain(PageloaderTest):
+ """
+ Simple rotating WebGL scene with moving light source over a
+ textured terrain.
+ Measures average frame intervals.
+ The same sequence is measured 4 times for combinations of alpha and
+ antialias as canvas properties.
+ Each of these 4 runs is reported as a different test name.
+ """
+
+ tpmanifest = "${talos}/tests/webgl/glterrain.manifest"
+ tpcycles = 1
+ tppagecycles = 25
+ tploadnocache = True
+ tpmozafterpaint = False
+ tpchrome = False
+ timeout = 600
+ gecko_profile_interval = 10
+ win_counters = w7_counters = linux_counters = mac_counters = None
+ """ ASAP mode """
+ preferences = {
+ "layout.frame_rate": 0,
+ "docshell.event_starvation_delay_hint": 1,
+ "dom.send_after_paint_to_content": False,
+ }
+ filters = filter.ignore_first.prepare(1) + filter.median.prepare()
+ unit = "frame interval"
+
+
+@register_test()
+class glvideo(PageloaderTest):
+ """
+ WebGL video texture update with 1080p video.
+ Measures mean tick time across 100 ticks.
+ (each tick is texImage2D(<video>)+setTimeout(0))
+ """
+
+ tpmanifest = "${talos}/tests/webgl/glvideo.manifest"
+ tpcycles = 1
+ tppagecycles = 5
+ tploadnocache = True
+ tpmozafterpaint = False
+ tpchrome = False
+ timeout = 600
+ gecko_profile_interval = 2
+ gecko_profile_extra_threads = "CanvasRenderer,CanvasWorker,MediaSupervisor"
+ win_counters = w7_counters = linux_counters = mac_counters = None
+ filters = filter.ignore_first.prepare(1) + filter.median.prepare()
+ unit = "ms"
+
+
+@register_test()
+class canvas2dvideo(PageloaderTest):
+ """
+ Canvas2D video texture update with 1080p video.
+ Measures mean tick time across 100 ticks.
+ (each tick is drawImage(<video>)+setTimeout(0))
+ """
+
+ tpmanifest = "${talos}/tests/canvas2d/canvas2dvideo.manifest"
+ tpcycles = 1
+ tppagecycles = 5
+ tploadnocache = True
+ tpmozafterpaint = False
+ tpchrome = False
+ timeout = 600
+ gecko_profile_interval = 2
+ gecko_profile_extra_threads = "CanvasRenderer,CanvasWorker,MediaSupervisor"
+ win_counters = w7_counters = linux_counters = mac_counters = None
+ filters = filter.ignore_first.prepare(1) + filter.median.prepare()
+ unit = "ms"
+
+
+@register_test()
+class offscreencanvas_webcodecs_main_webgl_h264(PageloaderTest):
+ """
+ OffscreenCanvas WebGL video texture update on the main thread with WebCodecs and 1080p H264 video.
+ Measures mean frame time across 100 frames.
+ (decodes each frame and performs texImage2D(<videoFrame>))
+ """
+
+ tpmanifest = "${talos}/tests/offscreencanvas/offscreencanvas_webcodecs_main_webgl_h264.manifest"
+ tpcycles = 1
+ tppagecycles = 5
+ tploadnocache = True
+ tpmozafterpaint = False
+ tpchrome = False
+ timeout = 600
+ gecko_profile_interval = 2
+ gecko_profile_extra_threads = "CanvasRenderer,MediaSupervisor"
+ win_counters = w7_counters = linux_counters = mac_counters = None
+ preferences = {
+ "dom.media.webcodecs.enabled": True,
+ "dom.media.webcodecs.force-osx-h264-enabled": True,
+ }
+ filters = filter.ignore_first.prepare(1) + filter.median.prepare()
+ unit = "ms"
+
+
+@register_test()
+class offscreencanvas_webcodecs_main_webgl_vp9(PageloaderTest):
+ """
+ OffscreenCanvas WebGL video texture update on the main thread with WebCodecs and 1080p VP9 video.
+ Measures mean frame time across 100 frames.
+ (decodes each frame and performs texImage2D(<videoFrame>))
+ """
+
+ tpmanifest = "${talos}/tests/offscreencanvas/offscreencanvas_webcodecs_main_webgl_vp9.manifest"
+ tpcycles = 1
+ tppagecycles = 5
+ tploadnocache = True
+ tpmozafterpaint = False
+ tpchrome = False
+ timeout = 600
+ gecko_profile_interval = 2
+ gecko_profile_extra_threads = "CanvasRenderer,MediaSupervisor"
+ win_counters = w7_counters = linux_counters = mac_counters = None
+ preferences = {
+ "dom.media.webcodecs.enabled": True,
+ "dom.media.webcodecs.force-osx-h264-enabled": True,
+ }
+ filters = filter.ignore_first.prepare(1) + filter.median.prepare()
+ unit = "ms"
+
+
+@register_test()
+class offscreencanvas_webcodecs_main_webgl_av1(PageloaderTest):
+ """
+ OffscreenCanvas WebGL video texture update on the main thread with WebCodecs and 1080p AV1 video.
+ Measures mean frame time across 100 frames.
+ (decodes each frame and performs texImage2D(<videoFrame>))
+ """
+
+ tpmanifest = "${talos}/tests/offscreencanvas/offscreencanvas_webcodecs_main_webgl_av1.manifest"
+ tpcycles = 1
+ tppagecycles = 5
+ tploadnocache = True
+ tpmozafterpaint = False
+ tpchrome = False
+ timeout = 600
+ gecko_profile_interval = 2
+ gecko_profile_extra_threads = "CanvasRenderer,MediaSupervisor"
+ win_counters = w7_counters = linux_counters = mac_counters = None
+ preferences = {
+ "dom.media.webcodecs.enabled": True,
+ "dom.media.webcodecs.force-osx-h264-enabled": True,
+ }
+ filters = filter.ignore_first.prepare(1) + filter.median.prepare()
+ unit = "ms"
+
+
+@register_test()
+class offscreencanvas_webcodecs_worker_webgl_h264(PageloaderTest):
+ """
+ OffscreenCanvas WebGL video texture update on a DOM worker thread with WebCodecs and 1080p H264 video.
+ Measures mean frame time across 100 frames.
+ (decodes each frame and performs texImage2D(<videoFrame>))
+ """
+
+ tpmanifest = "${talos}/tests/offscreencanvas/offscreencanvas_webcodecs_worker_webgl_h264.manifest"
+ tpcycles = 1
+ tppagecycles = 5
+ tploadnocache = True
+ tpmozafterpaint = False
+ tpchrome = False
+ timeout = 600
+ gecko_profile_interval = 2
+ gecko_profile_extra_threads = "DOM Worker,CanvasRenderer,MediaSupervisor"
+ win_counters = w7_counters = linux_counters = mac_counters = None
+ preferences = {
+ "dom.media.webcodecs.enabled": True,
+ "dom.media.webcodecs.force-osx-h264-enabled": True,
+ }
+ filters = filter.ignore_first.prepare(1) + filter.median.prepare()
+ unit = "ms"
+
+
+@register_test()
+class offscreencanvas_webcodecs_worker_webgl_vp9(PageloaderTest):
+ """
+ OffscreenCanvas WebGL video texture update on a DOM worker thread with WebCodecs and 1080p VP9 video.
+ Measures mean frame time across 100 frames.
+ (decodes each frame and performs texImage2D(<videoFrame>))
+ """
+
+ tpmanifest = "${talos}/tests/offscreencanvas/offscreencanvas_webcodecs_worker_webgl_vp9.manifest"
+ tpcycles = 1
+ tppagecycles = 5
+ tploadnocache = True
+ tpmozafterpaint = False
+ tpchrome = False
+ timeout = 600
+ gecko_profile_interval = 2
+ gecko_profile_extra_threads = "DOM Worker,CanvasRenderer,MediaSupervisor"
+ win_counters = w7_counters = linux_counters = mac_counters = None
+ preferences = {
+ "dom.media.webcodecs.enabled": True,
+ "dom.media.webcodecs.force-osx-h264-enabled": True,
+ }
+ filters = filter.ignore_first.prepare(1) + filter.median.prepare()
+ unit = "ms"
+
+
+@register_test()
+class offscreencanvas_webcodecs_worker_webgl_av1(PageloaderTest):
+ """
+ OffscreenCanvas WebGL video texture update on a DOM worker thread with WebCodecs and 1080p AV1 video.
+ Measures mean frame time across 100 frames.
+ (decodes each frame and performs texImage2D(<videoFrame>))
+ """
+
+ tpmanifest = "${talos}/tests/offscreencanvas/offscreencanvas_webcodecs_worker_webgl_av1.manifest"
+ tpcycles = 1
+ tppagecycles = 5
+ tploadnocache = True
+ tpmozafterpaint = False
+ tpchrome = False
+ timeout = 600
+ gecko_profile_interval = 2
+ gecko_profile_extra_threads = "DOM Worker,CanvasRenderer,MediaSupervisor"
+ win_counters = w7_counters = linux_counters = mac_counters = None
+ preferences = {
+ "dom.media.webcodecs.enabled": True,
+ "dom.media.webcodecs.force-osx-h264-enabled": True,
+ }
+ filters = filter.ignore_first.prepare(1) + filter.median.prepare()
+ unit = "ms"
+
+
+@register_test()
+class offscreencanvas_webcodecs_main_2d_h264(PageloaderTest):
+ """
+ OffscreenCanvas 2D video texture update on the main thread with WebCodecs and 1080p H264 video.
+ Measures mean frame time across 100 frames.
+ (decodes each frame and performs drawImage(<videoFrame>))
+ """
+
+ tpmanifest = (
+ "${talos}/tests/offscreencanvas/offscreencanvas_webcodecs_main_2d_h264.manifest"
+ )
+ tpcycles = 1
+ tppagecycles = 5
+ tploadnocache = True
+ tpmozafterpaint = False
+ tpchrome = False
+ timeout = 600
+ gecko_profile_interval = 2
+ gecko_profile_extra_threads = "CanvasRenderer,CanvasWorker,MediaSupervisor"
+ win_counters = w7_counters = linux_counters = mac_counters = None
+ preferences = {
+ "dom.media.webcodecs.enabled": True,
+ "dom.media.webcodecs.force-osx-h264-enabled": True,
+ }
+ filters = filter.ignore_first.prepare(1) + filter.median.prepare()
+ unit = "ms"
+
+
+@register_test()
+class offscreencanvas_webcodecs_main_2d_vp9(PageloaderTest):
+ """
+ OffscreenCanvas 2D video texture update on the main thread with WebCodecs and 1080p VP9 video.
+ Measures mean frame time across 100 frames.
+ (decodes each frame and performs drawImage(<videoFrame>))
+ """
+
+ tpmanifest = (
+ "${talos}/tests/offscreencanvas/offscreencanvas_webcodecs_main_2d_vp9.manifest"
+ )
+ tpcycles = 1
+ tppagecycles = 5
+ tploadnocache = True
+ tpmozafterpaint = False
+ tpchrome = False
+ timeout = 600
+ gecko_profile_interval = 2
+ gecko_profile_extra_threads = "CanvasRenderer,CanvasWorker,MediaSupervisor"
+ win_counters = w7_counters = linux_counters = mac_counters = None
+ preferences = {
+ "dom.media.webcodecs.enabled": True,
+ "dom.media.webcodecs.force-osx-h264-enabled": True,
+ }
+ filters = filter.ignore_first.prepare(1) + filter.median.prepare()
+ unit = "ms"
+
+
+@register_test()
+class offscreencanvas_webcodecs_main_2d_av1(PageloaderTest):
+ """
+ OffscreenCanvas 2D video texture update on the main thread with WebCodecs and 1080p AV1 video.
+ Measures mean frame time across 100 frames.
+ (decodes each frame and performs drawImage(<videoFrame>))
+ """
+
+ tpmanifest = (
+ "${talos}/tests/offscreencanvas/offscreencanvas_webcodecs_main_2d_av1.manifest"
+ )
+ tpcycles = 1
+ tppagecycles = 5
+ tploadnocache = True
+ tpmozafterpaint = False
+ tpchrome = False
+ timeout = 600
+ gecko_profile_interval = 2
+ gecko_profile_extra_threads = "CanvasRenderer,CanvasWorker,MediaSupervisor"
+ win_counters = w7_counters = linux_counters = mac_counters = None
+ preferences = {
+ "dom.media.webcodecs.enabled": True,
+ "dom.media.webcodecs.force-osx-h264-enabled": True,
+ }
+ filters = filter.ignore_first.prepare(1) + filter.median.prepare()
+ unit = "ms"
+
+
+@register_test()
+class offscreencanvas_webcodecs_worker_2d_h264(PageloaderTest):
+ """
+ OffscreenCanvas 2D video texture update on a DOM worker thread with WebCodecs and 1080p H264 video.
+ Measures mean frame time across 100 frames.
+ (decodes each frame and performs drawImage(<videoFrame>))
+ """
+
+ tpmanifest = "${talos}/tests/offscreencanvas/offscreencanvas_webcodecs_worker_2d_h264.manifest"
+ tpcycles = 1
+ tppagecycles = 5
+ tploadnocache = True
+ tpmozafterpaint = False
+ tpchrome = False
+ timeout = 600
+ gecko_profile_interval = 2
+ gecko_profile_extra_threads = (
+ "DOM Worker,CanvasRenderer,CanvasWorker,MediaSupervisor"
+ )
+ win_counters = w7_counters = linux_counters = mac_counters = None
+ preferences = {
+ "dom.media.webcodecs.enabled": True,
+ "dom.media.webcodecs.force-osx-h264-enabled": True,
+ }
+ filters = filter.ignore_first.prepare(1) + filter.median.prepare()
+ unit = "ms"
+
+
+@register_test()
+class offscreencanvas_webcodecs_worker_2d_vp9(PageloaderTest):
+ """
+ OffscreenCanvas 2D video texture update on a DOM worker thread with WebCodecs and 1080p VP9 video.
+ Measures mean frame time across 100 frames.
+ (decodes each frame and performs drawImage(<videoFrame>))
+ """
+
+ tpmanifest = "${talos}/tests/offscreencanvas/offscreencanvas_webcodecs_worker_2d_vp9.manifest"
+ tpcycles = 1
+ tppagecycles = 5
+ tploadnocache = True
+ tpmozafterpaint = False
+ tpchrome = False
+ timeout = 600
+ gecko_profile_interval = 2
+ gecko_profile_extra_threads = (
+ "DOM Worker,CanvasRenderer,CanvasWorker,MediaSupervisor"
+ )
+ win_counters = w7_counters = linux_counters = mac_counters = None
+ preferences = {
+ "dom.media.webcodecs.enabled": True,
+ "dom.media.webcodecs.force-osx-h264-enabled": True,
+ }
+ filters = filter.ignore_first.prepare(1) + filter.median.prepare()
+ unit = "ms"
+
+
+@register_test()
+class offscreencanvas_webcodecs_worker_2d_av1(PageloaderTest):
+ """
+ OffscreenCanvas 2D video texture update on a DOM worker thread with WebCodecs and 1080p AV1 video.
+ Measures mean frame time across 100 frames.
+ (decodes each frame and performs drawImage(<videoFrame>))
+ """
+
+ tpmanifest = "${talos}/tests/offscreencanvas/offscreencanvas_webcodecs_worker_2d_av1.manifest"
+ tpcycles = 1
+ tppagecycles = 5
+ tploadnocache = True
+ tpmozafterpaint = False
+ tpchrome = False
+ timeout = 600
+ gecko_profile_interval = 2
+ gecko_profile_extra_threads = (
+ "DOM Worker,CanvasRenderer,CanvasWorker,MediaSupervisor"
+ )
+ win_counters = w7_counters = linux_counters = mac_counters = None
+ preferences = {
+ "dom.media.webcodecs.enabled": True,
+ "dom.media.webcodecs.force-osx-h264-enabled": True,
+ }
+ filters = filter.ignore_first.prepare(1) + filter.median.prepare()
+ unit = "ms"
+
+
+@register_test()
+class tp5n(PageloaderTest):
+ """
+ Tests the time it takes Firefox to load the tp5 web page test set.
+
+ The tp5 is an updated web page test set to 100 pages from April 8th, 2011.
+ Effort was made for the pages to no longer be splash screens/login
+ pages/home pages but to be pages that better reflect the actual content
+ of the site in question.
+ """
+
+ resolution = 20
+ multidomain = True
+ tpmanifest = "${talos}/fis/tp5n/tp5n.manifest"
+ tpcycles = 1
+ tppagecycles = 1
+ cycles = 1
+ tpmozafterpaint = True
+ tptimeout = 10000
+ mainthread = True
+ w7_counters = []
+ win_counters = []
+ linux_counters = []
+ mac_counters = []
+ xperf_counters = [
+ "main_startup_fileio",
+ "main_startup_netio",
+ "main_normal_fileio",
+ "main_normal_netio",
+ "nonmain_startup_fileio",
+ "nonmain_normal_fileio",
+ "nonmain_normal_netio",
+ "mainthread_readcount",
+ "mainthread_readbytes",
+ "mainthread_writecount",
+ "mainthread_writebytes",
+ "time_to_session_store_window_restored_ms",
+ ]
+ xperf_providers = [
+ "PROC_THREAD",
+ "LOADER",
+ "HARD_FAULTS",
+ "FILENAME",
+ "FILE_IO",
+ "FILE_IO_INIT",
+ ]
+ xperf_user_providers = ["Mozilla Generic Provider", "Microsoft-Windows-TCPIP"]
+ xperf_stackwalk = ["FileCreate", "FileRead", "FileWrite", "FileFlush", "FileClose"]
+ filters = filter.ignore_first.prepare(1) + filter.median.prepare()
+ timeout = 1800
+ setup = "${talos}/xtalos/start_xperf.py -c ${talos}/bcontroller.json"
+ cleanup = "${talos}/xtalos/parse_xperf.py -c ${talos}/bcontroller.json"
+ preferences = {
+ "extensions.enabledScopes": "",
+ "talos.logfile": "browser_output.txt",
+ }
+ unit = "ms"
+
+
+@register_test()
+class tp5o(PageloaderTest):
+ """
+ Derived from the tp5n pageset, this is the 49 most reliable webpages.
+ """
+
+ tpcycles = 1
+ tppagecycles = 25
+ cycles = 1
+ tpmozafterpaint = True
+ tptimeout = 5000
+ mainthread = False
+ multidomain = True
+ tpmanifest = "${talos}/fis/tp5n/tp5o.manifest"
+ win_counters = ["% Processor Time"]
+ w7_counters = ["% Processor Time"]
+ linux_counters = ["XRes"]
+ mac_counters = []
+ responsiveness = True
+ gecko_profile_interval = 2
+ filters = filter.ignore_first.prepare(5) + filter.median.prepare()
+ timeout = 1800
+ unit = "ms"
+
+
+@register_test()
+class tp5o_webext(tp5o):
+ webextensions = "${talos}/webextensions/dummy/dummy.xpi"
+ preferences = {"xpinstall.signatures.required": False}
+
+
+@register_test()
+class tp5o_scroll(PageloaderTest):
+ """
+ Tests scroll (like tscrollx does, including ASAP) but on the tp5o pageset.
+ """
+
+ tpmanifest = "${talos}/tests/tp5n/tp5o.manifest"
+ tpcycles = 1
+ tppagecycles = 12
+ gecko_profile_interval = 2
+ tpscrolltest = True
+ """ASAP mode"""
+ tpmozafterpaint = False
+ preferences = {
+ "layout.frame_rate": 0,
+ "docshell.event_starvation_delay_hint": 1,
+ "dom.send_after_paint_to_content": True,
+ "apz.paint_skipping.enabled": False,
+ "layout.css.scroll-behavior.spring-constant": "'10'",
+ "toolkit.framesRecording.bufferSize": 10000,
+ }
+ filters = filter.ignore_first.prepare(1) + filter.median.prepare()
+ unit = "1/FPS"
+
+
+@register_test()
+class v8_7(PageloaderTest):
+ """
+ This is the V8 (version 7) javascript benchmark taken verbatim and
+ slightly modified to fit into our pageloader extension and talos harness.
+
+ The previous version of this test is V8 version 5 which was run on
+ selective branches and operating systems.
+ """
+
+ tpmanifest = "${talos}/tests/v8_7/v8.manifest"
+ gecko_profile_interval = 1
+ tpcycles = 1
+ resolution = 20
+ tpmozafterpaint = False
+ preferences = {"dom.send_after_paint_to_content": False}
+ filters = filter.v8_subtest.prepare()
+ unit = "score"
+ lower_is_better = False
+
+
+@register_test()
+class kraken(PageloaderTest):
+ """
+ This is the Kraken javascript benchmark taken verbatim and slightly
+ modified to fit into our pageloader extension and talos harness.
+ """
+
+ tpmanifest = "${talos}/tests/kraken/kraken.manifest"
+ tpcycles = 1
+ tppagecycles = 1
+ gecko_profile_interval = 1
+ tpmozafterpaint = False
+ tpchrome = False
+ preferences = {"dom.send_after_paint_to_content": False}
+ filters = filter.mean.prepare()
+ unit = "score"
+
+
+@register_test()
+class basic_compositor_video(PageloaderTest):
+ """
+ Video test
+ """
+
+ tpmanifest = "${talos}/tests/video/video.manifest"
+ tpcycles = 1
+ tppagecycles = 12
+ tpchrome = False
+ timeout = 10000
+ gecko_profile_interval = 1
+ preferences = {
+ "full-screen-api.allow-trusted-requests-only": False,
+ "layers.acceleration.force-enabled": False,
+ "layers.acceleration.disabled": True,
+ "gfx.webrender.software": True,
+ "layout.frame_rate": 0,
+ "docshell.event_starvation_delay_hint": 1,
+ "full-screen-api.warning.timeout": 500,
+ "media.ruin-av-sync.enabled": True,
+ }
+ filters = filter.ignore_first.prepare(1) + filter.median.prepare()
+ unit = "ms/frame"
+ lower_is_better = True
+
+
+class dromaeo(PageloaderTest):
+ """abstract base class for dramaeo tests"""
+
+ filters = filter.dromaeo.prepare()
+ lower_is_better = False
+ alert_threshold = 5.0
+ tpchrome = False
+
+
+@register_test()
+class dromaeo_css(dromaeo):
+ """
+ Dromaeo suite of tests for JavaScript performance testing.
+ See the Dromaeo wiki (https://wiki.mozilla.org/Dromaeo)
+ for more information.
+
+ Each page in the manifest is part of the dromaemo css benchmark.
+ """
+
+ gecko_profile_interval = 2
+ tpmanifest = "${talos}/tests/dromaeo/css.manifest"
+ unit = "score"
+
+
+@register_test()
+class dromaeo_dom(dromaeo):
+ """
+ Dromaeo suite of tests for JavaScript performance testing.
+ See the Dromaeo wiki (https://wiki.mozilla.org/Dromaeo)
+ for more information.
+
+ Each page in the manifest is part of the dromaemo dom benchmark.
+ """
+
+ gecko_profile_interval = 2
+ tpmanifest = "${talos}/tests/dromaeo/dom.manifest"
+ unit = "score"
+
+
+@register_test()
+class tresize(PageloaderTest):
+ """
+ This test does some resize thing.
+ """
+
+ tpmanifest = "${talos}/tests/tresize/tresize.manifest"
+ extensions = ["${talos}/pageloader", "${talos}/tests/tresize/addon"]
+ tppagecycles = 20
+ timeout = 900
+ gecko_profile_interval = 2
+ tpmozafterpaint = True
+ filters = filter.ignore_first.prepare(5) + filter.median.prepare()
+ unit = "ms"
+
+
+@register_test()
+class tsvgm(PageloaderTest):
+ """
+ An svg-only number that measures SVG rendering performance
+ for dynamic content only.
+ """
+
+ tpmanifest = "${talos}/tests/svgx/svgm.manifest"
+ tpcycles = 1
+ tppagecycles = 7
+ tpmozafterpaint = False
+ tpchrome = False
+ gecko_profile_interval = 10
+ """ASAP mode"""
+ preferences = {
+ "layout.frame_rate": 0,
+ "docshell.event_starvation_delay_hint": 1,
+ "dom.send_after_paint_to_content": False,
+ }
+ filters = filter.ignore_first.prepare(2) + filter.median.prepare()
+ unit = "ms"
+
+
+@register_test()
+class tsvgx(PageloaderTest):
+ """
+ An svg-only number that measures SVG rendering performance
+ for dynamic content only.
+ """
+
+ tpmanifest = "${talos}/tests/svgx/svgx.manifest"
+ tpcycles = 1
+ tppagecycles = 25
+ tpmozafterpaint = False
+ tpchrome = False
+ timeout = 600
+ gecko_profile_interval = 10
+ """ASAP mode"""
+ preferences = {
+ "layout.frame_rate": 0,
+ "docshell.event_starvation_delay_hint": 1,
+ "dom.send_after_paint_to_content": False,
+ "places.history.enabled": False,
+ }
+ filters = filter.ignore_first.prepare(5) + filter.median.prepare()
+ unit = "ms"
+
+
+@register_test()
+class tsvg_static(PageloaderTest):
+ """
+ An svg-only number that measures SVG rendering performance
+ for static content only.
+ """
+
+ tpmanifest = "${talos}/tests/svg_static/svg_static.manifest"
+ tpcycles = 1
+ tppagecycles = 25
+ tpmozafterpaint = True
+ tpchrome = False
+ timeout = 600
+ gecko_profile_interval = 1
+ filters = filter.ignore_first.prepare(5) + filter.median.prepare()
+ unit = "ms"
+
+
+@register_test()
+class tsvgr_opacity(PageloaderTest):
+ """
+ An svg-only number that measures SVG rendering performance.
+ """
+
+ tpmanifest = "${talos}/tests/svg_opacity/svg_opacity.manifest"
+ tpcycles = 1
+ tppagecycles = 25
+ tpmozafterpaint = True
+ tpchrome = False
+ timeout = 600
+ gecko_profile_interval = 1
+ filters = filter.ignore_first.prepare(5) + filter.median.prepare()
+ unit = "ms"
+
+
+@register_test()
+class tscrollx(PageloaderTest):
+ """
+ This test does some scrolly thing.
+ """
+
+ tpmanifest = "${talos}/tests/scroll/scroll.manifest"
+ tpcycles = 1
+ tppagecycles = 25
+ tpmozafterpaint = False
+ tpchrome = False
+ timeout = 600
+ gecko_profile_interval = 1
+ """ ASAP mode """
+ preferences = {
+ "layout.frame_rate": 0,
+ "docshell.event_starvation_delay_hint": 1,
+ "dom.send_after_paint_to_content": True,
+ "apz.paint_skipping.enabled": False,
+ "layout.css.scroll-behavior.spring-constant": "'10'",
+ "toolkit.framesRecording.bufferSize": 10000,
+ }
+ filters = filter.ignore_first.prepare(5) + filter.median.prepare()
+ unit = "ms"
+ pine = False
+
+
+@register_test()
+class a11yr(PageloaderTest):
+ """
+ This test ensures basic a11y tables and permutations do not cause
+ performance regressions.
+ """
+
+ tpmanifest = "${talos}/tests/a11y/a11y.manifest"
+ tpcycles = 1
+ tppagecycles = 25
+ tpmozafterpaint = True
+ tpchrome = False
+ timeout = 600
+ preferences = {"dom.send_after_paint_to_content": False}
+ unit = "ms"
+ alert_threshold = 5.0
+ a11y = True
+
+
+class WebkitBenchmark(PageloaderTest):
+ tpcycles = 1
+ tppagecycles = 5
+ tpmozafterpaint = False
+ tpchrome = False
+ format_pagename = False
+ lower_is_better = False
+ unit = "score"
+
+
+@register_test()
+class stylebench(WebkitBenchmark):
+ # StyleBench benchmark used by many browser vendors (from webkit)
+ tpmanifest = "${talos}/tests/stylebench/stylebench.manifest"
+
+
+@register_test()
+class motionmark_animometer(WebkitBenchmark):
+ # MotionMark benchmark used by many browser vendors (from webkit)
+ tpmanifest = "${talos}/tests/motionmark/animometer.manifest"
+
+
+@register_test()
+class motionmark_webgl(WebkitBenchmark):
+ # MotionMark benchmark used by many browser vendors (from webkit)
+ tpmanifest = "${talos}/tests/motionmark/webgl.manifest"
+ unit = "fps"
+ timeout = 600
+
+
+@register_test()
+class ARES6(WebkitBenchmark):
+ # ARES-6 benchmark used by many browser vendors (from webkit)
+ tpmanifest = "${talos}/tests/ares6/ares6.manifest"
+ tppagecycles = 1
+ lower_is_better = True
+
+
+@register_test()
+class motionmark_htmlsuite(WebkitBenchmark):
+ # MotionMark benchmark used by many browser vendors (from webkit)
+ tpmanifest = "${talos}/tests/motionmark/htmlsuite.manifest"
+
+
+@register_test()
+class JetStream(WebkitBenchmark):
+ # JetStream benchmark used by many browser vendors (from webkit)
+ tpmanifest = "${talos}/tests/jetstream/jetstream.manifest"
+ tppagecycles = 1
+
+
+@register_test()
+class perf_reftest(PageloaderTest):
+ """
+ Style perf-reftest a set of tests where the result is the difference of base vs ref pages
+ """
+
+ base_vs_ref = (
+ True # compare the two test pages with eachother and report comparison
+ )
+ tpmanifest = "${talos}/tests/perf-reftest/perf_reftest.manifest"
+ tpcycles = 1
+ tppagecycles = 10
+ tptimeout = 30000
+ gecko_profile_interval = 1
+ filters = filter.ignore_first.prepare(5) + filter.median.prepare()
+ unit = "ms"
+ lower_is_better = True
+ alert_threshold = 5.0
+ subtest_alerts = True
+
+
+@register_test()
+class perf_reftest_singletons(PageloaderTest):
+ """
+ Style perf-reftests run as individual tests
+ """
+
+ tpmanifest = (
+ "${talos}/tests/perf-reftest-singletons/perf_reftest_singletons.manifest"
+ )
+ tpcycles = 1
+ tppagecycles = 15
+ tptimeout = 30000
+ gecko_profile_interval = 1
+ filters = filter.ignore_first.prepare(5) + filter.median.prepare()
+ unit = "ms"
+ lower_is_better = True
+ alert_threshold = 5.0
+ subtest_alerts = True
+ suite_should_alert = False
+
+
+@register_test()
+class displaylist_mutate(PageloaderTest):
+ """
+ Test modifying single items in a large display list. Measure transaction speed
+ to the compositor.
+ """
+
+ tpmanifest = "${talos}/tests/layout/displaylist_mutate.manifest"
+ tpcycles = 1
+ tppagecycles = 5
+ tploadnocache = True
+ tpmozafterpaint = False
+ tpchrome = False
+ timeout = 600
+ gecko_profile_interval = 2
+ win_counters = w7_counters = linux_counters = mac_counters = None
+ filters = filter.ignore_first.prepare(1) + filter.median.prepare()
+ """ASAP mode"""
+ preferences = {
+ "layout.frame_rate": 0,
+ "docshell.event_starvation_delay_hint": 1,
+ "dom.send_after_paint_to_content": False,
+ }
+ unit = "ms"
+
+
+@register_test()
+class rasterflood_svg(PageloaderTest):
+ """
+ Test modifying single items in a large display list. Measure transaction speed
+ to the compositor.
+ """
+
+ tpmanifest = "${talos}/tests/gfx/rasterflood_svg.manifest"
+ tpcycles = 1
+ tppagecycles = 10
+ tploadnocache = True
+ tpmozafterpaint = False
+ tpchrome = False
+ timeout = 600
+ gecko_profile_interval = 2
+ win_counters = w7_counters = linux_counters = mac_counters = None
+ filters = filter.ignore_first.prepare(1) + filter.median.prepare()
+ """ASAP mode"""
+ preferences = {
+ "layout.frame_rate": 0,
+ "docshell.event_starvation_delay_hint": 1,
+ "dom.send_after_paint_to_content": False,
+ }
+ unit = "ms"
+
+
+@register_test()
+class rasterflood_gradient(PageloaderTest):
+ """
+ Test expensive rasterization while the main thread is busy.
+ """
+
+ tpmanifest = "${talos}/tests/gfx/rasterflood_gradient.manifest"
+ tpcycles = 1
+ tppagecycles = 10
+ tploadnocache = True
+ tpmozafterpaint = False
+ tpchrome = False
+ timeout = 600
+ gecko_profile_interval = 2
+ win_counters = w7_counters = linux_counters = mac_counters = None
+ filters = filter.ignore_first.prepare(1) + filter.median.prepare()
+ """ASAP mode"""
+ preferences = {
+ "layout.frame_rate": 0,
+ "docshell.event_starvation_delay_hint": 1,
+ "dom.send_after_paint_to_content": False,
+ }
+ lower_is_better = False
+ unit = "score"
+
+
+@register_test()
+class about_preferences_basic(PageloaderTest):
+ """
+ Base class for about_preferences test
+ """
+
+ tpmanifest = "${talos}/tests/about-preferences/about_preferences_basic.manifest"
+ # this test uses 'about:blank' as a dummy page (see manifest) so that the pages
+ # that just change url categories (i.e. about:preferences#search) will get a load event
+ # also any of the url category pages cannot have more than one tppagecycle
+ tpcycles = 25
+ tppagecycles = 1
+ gecko_profile_interval = 1
+ filters = filter.ignore_first.prepare(5) + filter.median.prepare()
+ unit = "ms"
+ lower_is_better = True
+ fnbpaint = True
+ pine = False
diff --git a/testing/talos/talos/tests/a11y/a11y.manifest b/testing/talos/talos/tests/a11y/a11y.manifest
new file mode 100644
index 0000000000..fb203f242a
--- /dev/null
+++ b/testing/talos/talos/tests/a11y/a11y.manifest
@@ -0,0 +1,2 @@
+% dhtml.html
+% tablemutation.html
diff --git a/testing/talos/talos/tests/a11y/dhtml.html b/testing/talos/talos/tests/a11y/dhtml.html
new file mode 100644
index 0000000000..0aa9d1dbc3
--- /dev/null
+++ b/testing/talos/talos/tests/a11y/dhtml.html
@@ -0,0 +1,60 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<meta charset="utf-8">
+<head>
+<title>accessibility perf for dhtml</title>
+<script src="resource://talos-powers/TalosContentProfiler.js"></script>
+<script>
+ /* globals initAccessibility */
+ // based on: http://hacks.mozilla.org/2010/05/better-performance-with-lazy-frame-construction/
+ var ppDate = null;
+ var startTime;
+
+ function doInsertion() {
+ if (!initAccessibility()) {
+ dump("__FAILinit:AccessibilityUnvailable__FAIL");
+ return;
+ }
+
+ TalosContentProfiler.subtestStart("a11y: Begin dhtml test", true).then(() => {
+ var container = document.getElementById("container");
+ var lastchild = document.getElementById("lastchild");
+
+ startTime = window.performance.now();
+
+ var i, div;
+ for (i = 0; i < 2000; i++) {
+ div = document.createElement("div");
+ div.innerHTML = "<input type='text' value='a bc def g hijkl mn op qrs'/>";
+ container.insertBefore(div, lastchild);
+ }
+ for (i = 0; i < 2000; i++) {
+ div = document.createElement("div");
+ div.innerHTML = "<ul><li>foo<ul><li>bar</li></ul></li><li>baz</li></ul>";
+ container.insertBefore(div, lastchild);
+ }
+ for (i = 0; i < 2000; i++) {
+ div = document.createElement("div");
+
+ // eslint-disable-next-line no-unsanitized/property
+ div.innerHTML = "<div role='progressbar'>progressbar</div>" +
+ "<span id='span" + i + "'>cb</span>";
+ container.appendChild(div);
+ }
+ document.documentElement.offsetLeft; // flush layout
+ setTimeout(postProcessingRecord, 0, startTime);
+ });
+ }
+
+ function postProcessingRecord(start) {
+ let delta = window.performance.now() - start;
+ TalosContentProfiler.subtestEnd("a11y: dhtml test", true, startTime).then(() => {
+ tpRecordTime(delta, window.performance.timing.navigationStart + start);
+ });
+ }
+</script>
+</head>
+<body onload="doInsertion();">
+ <div id="container" role="application"><div id="lastchild"></div></div>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/a11y/tablemutation.html b/testing/talos/talos/tests/a11y/tablemutation.html
new file mode 100644
index 0000000000..566a901db4
--- /dev/null
+++ b/testing/talos/talos/tests/a11y/tablemutation.html
@@ -0,0 +1,143 @@
+<head>
+<meta charset="utf-8">
+<title>Accessibility Table Mutation</title>
+<script src="resource://talos-powers/TalosContentProfiler.js"></script>
+</head>
+
+<body>
+<div id="start">
+<table id="datatable">
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+<tr><td>Row #0</td><td>348003</td><td>745393</td><td>658838</td><td>273744</td></tr><tr><td>Row #1</td><td>482498</td><td>724073</td><td>792474</td><td>549091</td></tr><tr><td>Row #2</td><td>639859</td><td>151692</td><td>251949</td><td>323840</td></tr><tr><td>Row #3</td><td>269274</td><td>211292</td><td>892989</td><td>473276</td></tr><tr><td>Row #4</td><td>148736</td><td>438719</td><td>789802</td><td>986023</td></tr><tr><td>Row #5</td><td>999863</td><td>782360</td><td>648663</td><td>959764</td></tr><tr><td>Row #6</td><td>302562</td><td>122962</td><td>623747</td><td>961374</td></tr><tr><td>Row #7</td><td>620408</td><td>740513</td><td>562968</td><td>868412</td></tr><tr><td>Row #8</td><td>485907</td><td>221807</td><td>142157</td><td>868405</td></tr><tr><td>Row #9</td><td>845880</td><td>834632</td><td>417497</td><td>485740</td></tr><tr><td>Row #10</td><td>886324</td><td>569447</td><td>709581</td><td>155598</td></tr><tr><td>Row #11</td><td>680740</td><td>602570</td><td>528874</td><td>729476</td></tr><tr><td>Row #12</td><td>941289</td><td>318677</td><td>715499</td><td>941153</td></tr><tr><td>Row #13</td><td>101037</td><td>364163</td><td>900918</td><td>303600</td></tr><tr><td>Row #14</td><td>387126</td><td>524665</td><td>264974</td><td>907534</td></tr><tr><td>Row #15</td><td>265179</td><td>727943</td><td>775947</td><td>651086</td></tr><tr><td>Row #16</td><td>849750</td><td>818104</td><td>519492</td><td>695631</td></tr><tr><td>Row #17</td><td>652736</td><td>836990</td><td>181371</td><td>539061</td></tr><tr><td>Row #18</td><td>406437</td><td>790952</td><td>594659</td><td>987177</td></tr><tr><td>Row #19</td><td>393523</td><td>123534</td><td>716653</td><td>334813</td></tr><tr><td>Row #20</td><td>342211</td><td>432153</td><td>275966</td><td>343248</td></tr><tr><td>Row #21</td><td>696316</td><td>176885</td><td>546849</td><td>983442</td></tr><tr><td>Row #22</td><td>601550</td><td>711824</td><td>890977</td><td>766730</td></tr><tr><td>Row #23</td><td>439767</td><td>666925</td><td>417816</td><td>289518</td></tr><tr><td>Row #24</td><td>485029</td><td>837309</td><td>885150</td><td>137766</td></tr>
+</table>
+</div>
+
+</body>
+<script>
+/* globals initAccessibility, ensureAccessibleTreeForId */
+window.onload = function() {
+ setTimeout(function() {
+ mutateTable();
+ }, 100);
+};
+
+
+function mutateTable() {
+ var htmTable = document.getElementById("datatable");
+ var TableRows = [ ];
+
+ // Locate all TR elements of the table
+ TalosContentProfiler.mark('a11yr tablemutation - locate all TR elements of the table', true)
+ var htmRow = htmTable.childNodes[0];
+ while (htmRow) {
+ if (htmRow.nodeType == 1) {
+ if (htmRow.tagName == "TR") {
+ TableRows.push(htmRow);
+ } else {
+ htmRow = htmRow.childNodes[0];
+ }
+ }
+ htmRow = htmRow.nextSibling;
+ }
+
+ var Range = document.createRange();
+ Range.setStartBefore(TableRows[0]);
+ Range.setEndAfter(TableRows[TableRows.length - 1]);
+
+ // Put all rows into a Fragment
+ TalosContentProfiler.mark('a11yr tablemutation - put all rows into a fragment', true)
+ var Fragment = document.createDocumentFragment();
+ for (var Index in TableRows) {
+ Fragment.appendChild(TableRows[Index]);
+ }
+
+ // Start with a cached accessible tree
+ if (!initAccessibility()) {
+ dump("__FAILinit:AccessibilityUnvailable__FAIL");
+ return;
+ }
+
+ ensureAccessibleTreeForId("start");
+
+ TalosContentProfiler.subtestStart("tablemutation start", true).then(() => {
+ let start = window.performance.now();
+
+ // Cause all kinds of crazy events
+ Range.deleteContents();
+ Range.insertNode(Fragment);
+
+ document.documentElement.offsetLeft; // flush layout
+
+ setTimeout(postProcessingRecord, 0, start);
+ });
+}
+
+function postProcessingRecord(startTime) {
+ let delta = window.performance.now() - startTime;
+ TalosContentProfiler.subtestEnd("a11y test: tablemutation", true).then(() => {
+ tpRecordTime(delta, window.performance.timing.navigationStart + startTime);
+ });
+}
+</script>
diff --git a/testing/talos/talos/tests/about-preferences/about_preferences_basic.manifest b/testing/talos/talos/tests/about-preferences/about_preferences_basic.manifest
new file mode 100644
index 0000000000..0eef6eef3d
--- /dev/null
+++ b/testing/talos/talos/tests/about-preferences/about_preferences_basic.manifest
@@ -0,0 +1,9 @@
+about:preferences
+about:blank
+about:preferences#search
+about:blank
+about:preferences#privacy
+about:blank
+about:preferences#sync
+about:blank
+about:preferences#home \ No newline at end of file
diff --git a/testing/talos/talos/tests/ares6/ares6.manifest b/testing/talos/talos/tests/ares6/ares6.manifest
new file mode 100644
index 0000000000..eadda27c25
--- /dev/null
+++ b/testing/talos/talos/tests/ares6/ares6.manifest
@@ -0,0 +1 @@
+% http://localhost/tests/webkit/PerformanceTests/ARES-6/index.html?gecko
diff --git a/testing/talos/talos/tests/canvas2d/benchmarks/video/video_upload.html b/testing/talos/talos/tests/canvas2d/benchmarks/video/video_upload.html
new file mode 100644
index 0000000000..d0bd143fed
--- /dev/null
+++ b/testing/talos/talos/tests/canvas2d/benchmarks/video/video_upload.html
@@ -0,0 +1,74 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ - You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<html>
+<head>
+<script src="resource://talos-powers/TalosPowersContent.js"></script>
+<script type="text/javascript" src="resource://talos-powers/TalosContentProfiler.js"></script>
+<script language="javascript" type="text/javascript">
+const kTotalTicks = 100;
+var start;
+var canvas = document.createElement("canvas");
+canvas.width = 1920;
+canvas.height = 1080;
+var ctx = canvas.getContext("2d");
+var video;
+video = document.createElement("video");
+video.src = "../../../video/clips/testsrc.1080p.60fps.mp4";
+video.addEventListener("playing", playingListener, true); // loadstart?
+video.loop = true;
+
+function init() {
+ TalosPowersContent.focus(content_focused);
+}
+
+function content_focused() {
+ TalosContentProfiler.subtestStart("canvas2dvideo start", true).then(() => {
+ video.play();
+ });
+}
+
+function playingListener() {
+ video.removeEventListener("playing", playingListener, true);
+ start = performance.now();
+ tick();
+}
+
+var tickCount = 0;
+function tick() {
+ if (tickCount >= kTotalTicks) {
+ var elapsed = performance.now() - start;
+ TalosContentProfiler.subtestEnd("canvas2dvideo", true).then(() => {
+ reportResult(elapsed, kTotalTicks);
+ });
+ return;
+ }
+
+ ctx.drawImage(video, 0, 0);
+ ++tickCount;
+
+ window.setTimeout(tick, 0);
+}
+
+function reportResult(totalTime, totalTicks) {
+ var meanTickTime = totalTime / totalTicks;
+ var desc = "Mean tick time across " + totalTicks + " ticks: ";
+ var text = desc + meanTickTime + " ms\n";
+
+ dump("[talos canvas2dvideo result] " + text);
+
+ if (window.tpRecordTime) {
+ // Within talos - report the results
+ return tpRecordTime(meanTickTime, 0, desc);
+ }
+ // Local run in a plain browser, display the formatted report
+ alert("[talos canvas2dvideo result] " + text);
+
+ return undefined;
+}
+</script>
+
+</head>
+<body id="body" onload="init();">
+</body>
+</html>
diff --git a/testing/talos/talos/tests/canvas2d/canvas2dvideo.manifest b/testing/talos/talos/tests/canvas2d/canvas2dvideo.manifest
new file mode 100644
index 0000000000..3d3ba2b473
--- /dev/null
+++ b/testing/talos/talos/tests/canvas2d/canvas2dvideo.manifest
@@ -0,0 +1 @@
+% http://localhost/tests/canvas2d/benchmarks/video/video_upload.html
diff --git a/testing/talos/talos/tests/cpstartup/cpstartup.html b/testing/talos/talos/tests/cpstartup/cpstartup.html
new file mode 100644
index 0000000000..ddac3629bc
--- /dev/null
+++ b/testing/talos/talos/tests/cpstartup/cpstartup.html
@@ -0,0 +1,43 @@
+<html>
+<head>
+<script>
+
+function init() {
+ window.addEventListener("CPStartup:FinalResults", function onResults(event) {
+ let results = event.detail;
+ tpRecordTime(results, 0, "content-process-startup");
+ }, {once: true});
+
+ async function tryPing() {
+ let pingPromise = new Promise(resolve => {
+ window.addEventListener("CPStartup:Pong", resolve, {once: true});
+ dispatchEvent(new CustomEvent("CPStartup:Ping", {bubbles: true}));
+ });
+ let timeoutPromise = new Promise((resolve, reject) => setTimeout(reject, 500));
+
+ try {
+ await Promise.race([pingPromise, timeoutPromise]);
+ } catch (e) {
+ return tryPing();
+ }
+ return null;
+ }
+
+ let target = document.location.href.replace(/cpstartup.html$/, "target.html");
+ tryPing().then(() => {
+ dispatchEvent(new CustomEvent("CPStartup:Go", {
+ bubbles: true,
+ detail: {target},
+ }));
+ });
+}
+
+</script>
+</head>
+
+<body onload="init();">
+ Hello, Talos!
+
+ <a href="#" id="target" target="_blank">I'll open a new tab</a>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/cpstartup/cpstartup.manifest b/testing/talos/talos/tests/cpstartup/cpstartup.manifest
new file mode 100644
index 0000000000..a686c45f82
--- /dev/null
+++ b/testing/talos/talos/tests/cpstartup/cpstartup.manifest
@@ -0,0 +1 @@
+% http://localhost/tests/cpstartup/cpstartup.html
diff --git a/testing/talos/talos/tests/cpstartup/extension/api.js b/testing/talos/talos/tests/cpstartup/extension/api.js
new file mode 100644
index 0000000000..8b5e7438ce
--- /dev/null
+++ b/testing/talos/talos/tests/cpstartup/extension/api.js
@@ -0,0 +1,133 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/**
+ * The purpose of this test it to measure the performance of a
+ * content process startup.
+ *
+ * In practice it measures a bit more than the content process startup. First
+ * the parent process starts the clock and requests a new tab with a simple
+ * page and then the child stops the clock in the frame script that will be
+ * able to process the URL to handle. So it does measure a few things
+ * pre process creation (browser element and tab creation on parent side) but
+ * does not measure the part where we actually parse and render the page on
+ * the content side, just the overhead of spawning a new content process.
+ */
+
+ChromeUtils.defineESModuleGetters(this, {
+ TalosParentProfiler: "resource://talos-powers/TalosParentProfiler.sys.mjs",
+});
+
+const PREALLOCATED_PREF = "dom.ipc.processPrelaunch.enabled";
+const MESSAGES = ["CPStartup:Go", "CPStartup:BrowserChildReady"];
+const BROWSER_FLUSH_TOPIC = "sessionstore-browser-shutdown-flush";
+let domainID = 1;
+
+/* global ExtensionAPI */
+
+this.cpstartup = class extends ExtensionAPI {
+ onStartup() {
+ for (let msgName of MESSAGES) {
+ Services.mm.addMessageListener(msgName, this);
+ }
+
+ this.framescriptURL = this.extension.baseURI.resolve("/framescript.js");
+ Services.mm.loadFrameScript(this.framescriptURL, true);
+
+ this.originalPreallocatedEnabled =
+ Services.prefs.getBoolPref(PREALLOCATED_PREF);
+ Services.prefs.setBoolPref(PREALLOCATED_PREF, false);
+
+ this.readyCallback = null;
+ this.startStamp = null;
+ this.tab = null;
+ }
+
+ onShutdown() {
+ Services.prefs.setBoolPref(
+ PREALLOCATED_PREF,
+ this.originalPreallocatedEnabled
+ );
+ Services.mm.removeDelayedFrameScript(this.framescriptURL);
+
+ for (let msgName of MESSAGES) {
+ Services.mm.removeMessageListener(msgName, this);
+ }
+ }
+
+ receiveMessage(msg) {
+ let browser = msg.target;
+ let gBrowser = browser.ownerGlobal.gBrowser;
+
+ switch (msg.name) {
+ case "CPStartup:Go": {
+ this.openTab(gBrowser, msg.data.target).then(results =>
+ this.reportResults(results)
+ );
+ break;
+ }
+
+ case "CPStartup:BrowserChildReady": {
+ // Content has reported that it's ready to process an URL.
+ if (!this.readyCallback) {
+ throw new Error(
+ "Content:BrowserChildReady fired without a readyCallback set"
+ );
+ }
+ let tab = gBrowser.getTabForBrowser(browser);
+ if (tab != this.tab) {
+ // Let's ignore the message if it's not from the tab we've just opened.
+ break;
+ }
+ // The child stopped the timer when it was ready to process the first URL, it's time to
+ // calculate the difference and report it.
+ let delta = msg.data.time - this.startStamp;
+ this.readyCallback({ tab, delta });
+ break;
+ }
+ }
+ }
+
+ async openTab(gBrowser, url) {
+ // Start the timer and the profiler right before the tab open on the parent side.
+ TalosParentProfiler.subtestStart("cpstartup: Begin Tab Open");
+ let startTime = Cu.now();
+
+ this.startStamp = Services.telemetry.msSystemNow();
+ let newDomainURL = url.replace(
+ /http:\/\/127\.0\.0\.1:[0-9]+/,
+ "http://domain_" + domainID++
+ );
+ this.tab = gBrowser.selectedTab = gBrowser.addTrustedTab(newDomainURL);
+
+ let { tab, delta } = await this.whenTabReady();
+ TalosParentProfiler.subtestEnd("cpstartup: Tab Open", startTime);
+ await this.removeTab(tab);
+ return delta;
+ }
+
+ whenTabReady() {
+ return new Promise(resolve => {
+ this.readyCallback = resolve;
+ });
+ }
+
+ removeTab(tab) {
+ return new Promise(resolve => {
+ let browser = tab.linkedBrowser;
+ let observer = (subject, topic, data) => {
+ if (subject === browser) {
+ Services.obs.removeObserver(observer, BROWSER_FLUSH_TOPIC);
+ resolve();
+ }
+ };
+ Services.obs.addObserver(observer, BROWSER_FLUSH_TOPIC);
+ tab.ownerGlobal.gBrowser.removeTab(tab);
+ });
+ }
+
+ reportResults(results) {
+ Services.mm.broadcastAsyncMessage("CPStartup:FinalResults", results);
+ }
+};
diff --git a/testing/talos/talos/tests/cpstartup/extension/framescript.js b/testing/talos/talos/tests/cpstartup/extension/framescript.js
new file mode 100644
index 0000000000..972f938881
--- /dev/null
+++ b/testing/talos/talos/tests/cpstartup/extension/framescript.js
@@ -0,0 +1,40 @@
+/* eslint-env mozilla/frame-script */
+
+(function () {
+ sendAsyncMessage("CPStartup:BrowserChildReady", {
+ time: Services.telemetry.msSystemNow(),
+ });
+
+ addEventListener(
+ "CPStartup:Ping",
+ e => {
+ let evt = new content.CustomEvent("CPStartup:Pong", { bubbles: true });
+ content.dispatchEvent(evt);
+ },
+ false,
+ true
+ );
+
+ addEventListener(
+ "CPStartup:Go",
+ e => {
+ sendAsyncMessage("CPStartup:Go", e.detail);
+ },
+ false,
+ true
+ );
+
+ addMessageListener("CPStartup:FinalResults", msg => {
+ let evt = Cu.cloneInto(
+ {
+ bubbles: true,
+ detail: msg.data,
+ },
+ content
+ );
+
+ content.dispatchEvent(
+ new content.CustomEvent("CPStartup:FinalResults", evt)
+ );
+ });
+})();
diff --git a/testing/talos/talos/tests/cpstartup/extension/manifest.json b/testing/talos/talos/tests/cpstartup/extension/manifest.json
new file mode 100644
index 0000000000..c1459a8471
--- /dev/null
+++ b/testing/talos/talos/tests/cpstartup/extension/manifest.json
@@ -0,0 +1,23 @@
+{
+ "manifest_version": 2,
+ "name": "cpstartup test",
+ "description": "Measures the performance of starting and initializing new content processes",
+ "version": "1.1",
+
+ "browser_specific_settings": {
+ "gecko": {
+ "id": "cpstartup-test@mozilla.org"
+ }
+ },
+
+ "experiment_apis": {
+ "cpstartup": {
+ "schema": "schema.json",
+ "parent": {
+ "scopes": ["addon_parent"],
+ "script": "api.js",
+ "events": ["startup"]
+ }
+ }
+ }
+}
diff --git a/testing/talos/talos/tests/cpstartup/extension/schema.json b/testing/talos/talos/tests/cpstartup/extension/schema.json
new file mode 100644
index 0000000000..fe51488c70
--- /dev/null
+++ b/testing/talos/talos/tests/cpstartup/extension/schema.json
@@ -0,0 +1 @@
+[]
diff --git a/testing/talos/talos/tests/cpstartup/target.html b/testing/talos/talos/tests/cpstartup/target.html
new file mode 100644
index 0000000000..fe1b8860b6
--- /dev/null
+++ b/testing/talos/talos/tests/cpstartup/target.html
@@ -0,0 +1,9 @@
+<html>
+<head>
+<title>Content Process Startup</title>
+<meta http-equiv="Content-Type" content="text/html;charset=utf-8"></meta>
+</head>
+<body>
+<p>Content Process Startup</p>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/cross_origin_pageload/cross_origin_pageload.manifest b/testing/talos/talos/tests/cross_origin_pageload/cross_origin_pageload.manifest
new file mode 100644
index 0000000000..2e75639ae5
--- /dev/null
+++ b/testing/talos/talos/tests/cross_origin_pageload/cross_origin_pageload.manifest
@@ -0,0 +1 @@
+% http://localhost/tests/cross_origin_pageload/index.html
diff --git a/testing/talos/talos/tests/cross_origin_pageload/iframe.html b/testing/talos/talos/tests/cross_origin_pageload/iframe.html
new file mode 100644
index 0000000000..557db03de9
--- /dev/null
+++ b/testing/talos/talos/tests/cross_origin_pageload/iframe.html
@@ -0,0 +1 @@
+Hello World
diff --git a/testing/talos/talos/tests/cross_origin_pageload/index.html b/testing/talos/talos/tests/cross_origin_pageload/index.html
new file mode 100644
index 0000000000..1524cc4d20
--- /dev/null
+++ b/testing/talos/talos/tests/cross_origin_pageload/index.html
@@ -0,0 +1,9 @@
+<html>
+ <body>
+ <script>
+ // give lots of preallocated processes time to start, so we don't
+ // measure OS process-start time
+ setTimeout(function(){ window.location.href = 'index2.html';}, 3000);
+ </script>
+ </body>
+</html>
diff --git a/testing/talos/talos/tests/cross_origin_pageload/index2.html b/testing/talos/talos/tests/cross_origin_pageload/index2.html
new file mode 100644
index 0000000000..0064783429
--- /dev/null
+++ b/testing/talos/talos/tests/cross_origin_pageload/index2.html
@@ -0,0 +1,30 @@
+<html>
+ <body>
+ <iframe src="http://test:80/tests/cross_origin_pageload/iframe.html"></iframe>
+ <iframe src="http://mochi.test:8888/tests/cross_origin_pageload/iframe.html"></iframe>
+ <iframe src="http://mochi.xorigin-test:8888/tests/cross_origin_pageload/iframe.html"></iframe>
+ <iframe src="http://example.org:80/tests/cross_origin_pageload/iframe.html"></iframe>
+ <iframe src="http://www.example.com:80/tests/cross_origin_pageload/iframe.html"></iframe>
+ <iframe src="http://example.net:80/tests/cross_origin_pageload/iframe.html"></iframe>
+ <iframe src="http://www.itisatrap.org:80/tests/cross_origin_pageload/iframe.html"></iframe>
+ <iframe src="http://xn--exmple-cua.test:80/tests/cross_origin_pageload/iframe.html"></iframe>
+ <iframe src="http://xn--exaple-kqf.test:80/tests/cross_origin_pageload/iframe.html"></iframe>
+ <iframe src="http://itisatracker.org:80/tests/cross_origin_pageload/iframe.html"></iframe>
+ <iframe src="http://trackertest.org:80/tests/cross_origin_pageload/iframe.html"></iframe>
+ <iframe src="http://fpdownload2.macromedia.com:80/tests/cross_origin_pageload/iframe.html"></iframe>
+ <iframe src="http://w3c-test.org:80/tests/cross_origin_pageload/iframe.html"></iframe>
+ <iframe src="http://example.tw:80/tests/cross_origin_pageload/iframe.html"></iframe>
+ <iframe src="http://example.cn:80/tests/cross_origin_pageload/iframe.html"></iframe>
+ <iframe src="http://example.co.jp:80/tests/cross_origin_pageload/iframe.html"></iframe>
+ <iframe src="http://example.fi:80/tests/cross_origin_pageload/iframe.html"></iframe>
+ <iframe src="http://example.in:80/tests/cross_origin_pageload/iframe.html"></iframe>
+ <iframe src="http://example.lk:80/tests/cross_origin_pageload/iframe.html"></iframe>
+ <iframe src="http://httpsfirst.com:80/tests/cross_origin_pageload/iframe.html"></iframe>
+
+ <script>
+ window.onload = function(event) {
+ if (window.tpRecordTime) window.tpRecordTime(event.timeStamp);
+ }
+ </script>
+ </body>
+</html>
diff --git a/testing/talos/talos/tests/devtools/addon/api.js b/testing/talos/talos/tests/devtools/addon/api.js
new file mode 100644
index 0000000000..9d9719bb68
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/api.js
@@ -0,0 +1,46 @@
+"use strict";
+
+/* globals ExtensionAPI, Services, XPCOMUtils */
+
+this.damp = class extends ExtensionAPI {
+ getAPI(context) {
+ return {
+ damp: {
+ startTest() {
+ // Some notes about using a DevTools loader for DAMP.
+ //
+ // The DAMP loader needs to be same loader as the one used by the
+ // toolbox later on. Otherwise, we will not retrieve the proper
+ // instance of some modules.
+ // The main devtools loader is the exported `loader` from Loader.sys.mjs,
+ // we have to use that.
+
+ dump("[damp-api] Retrieve the main DevTools loader\n");
+ const { loader, require } = ChromeUtils.importESModule(
+ "resource://devtools/shared/loader/Loader.sys.mjs"
+ );
+
+ const { rootURI } = context.extension;
+ const dampRootDir = rootURI.QueryInterface(Ci.nsIFileURL);
+
+ const protocolHandler = Services.io
+ .getProtocolHandler("resource")
+ .QueryInterface(Ci.nsIResProtocolHandler);
+
+ // Serve testing/talos/talos/tests/devtools/addon/ via "resource://damp-test"
+ // Loader.sys.mjs will map `require("damp-test/...")` to `resource://damp-test/content/...`
+ // Thus allowing to load damp files from the content folder via the DevTools loader.
+ protocolHandler.setSubstitution("damp-test", dampRootDir);
+
+ // Expose the window to modules loaded for DAMP.
+ loader.loader.globals.dampWindow = context.appWindow;
+ loader.loader.globals.fetch = context.appWindow.fetch;
+
+ dump("[damp-api] Retrieve the DAMP runner and start the test\n");
+ const { damp } = require("damp-test/damp");
+ return damp.startTest();
+ },
+ },
+ };
+ }
+};
diff --git a/testing/talos/talos/tests/devtools/addon/content/.eslintrc.js b/testing/talos/talos/tests/devtools/addon/content/.eslintrc.js
new file mode 100644
index 0000000000..e2b9246fbb
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/.eslintrc.js
@@ -0,0 +1,26 @@
+"use strict";
+
+module.exports = {
+ plugins: ["react"],
+ globals: {
+ exports: true,
+ isWorker: true,
+ loader: true,
+ module: true,
+ reportError: true,
+ require: true,
+ dampWindow: true,
+ },
+ rules: {
+ "no-unused-vars": ["error", { args: "none", vars: "all" }],
+ // These are the rules that have been configured so far to match the
+ // devtools coding style.
+
+ // Rules from the mozilla plugin
+ "mozilla/no-aArgs": "error",
+ "mozilla/no-define-cc-etc": "off",
+ // See bug 1224289.
+ "mozilla/reject-importGlobalProperties": ["error", "everything"],
+ "mozilla/var-only-at-top-level": "error",
+ },
+};
diff --git a/testing/talos/talos/tests/devtools/addon/content/actors/DampLoadChild.sys.mjs b/testing/talos/talos/tests/devtools/addon/content/actors/DampLoadChild.sys.mjs
new file mode 100644
index 0000000000..1f7db91c4b
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/actors/DampLoadChild.sys.mjs
@@ -0,0 +1,13 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/* eslint-disable no-restricted-globals */
+
+export class DampLoadChild extends JSWindowActorChild {
+ handleEvent(evt) {
+ this.sendAsyncMessage("DampLoadChild:PageShow", {
+ browsingContext: this.browsingContext,
+ });
+ }
+}
diff --git a/testing/talos/talos/tests/devtools/addon/content/actors/DampLoadParent.sys.mjs b/testing/talos/talos/tests/devtools/addon/content/actors/DampLoadParent.sys.mjs
new file mode 100644
index 0000000000..5ec7aba275
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/actors/DampLoadParent.sys.mjs
@@ -0,0 +1,23 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+import { EventEmitter } from "resource://gre/modules/EventEmitter.sys.mjs";
+
+// Global event emitter to avoid listening to individual JSWindowActor instances.
+// For a single load, several pairs of JSWindowActors might be created in quick
+// succession, so listening to events on individual actor instances is usually
+// not enough to monitor a load.
+export const EventDispatcher = {};
+
+EventEmitter.decorate(EventDispatcher);
+
+// Simple JSWindow actor pair to listen to page show events.
+export class DampLoadParent extends JSWindowActorParent {
+ async receiveMessage(msg) {
+ const { name, data } = msg;
+ if (name === "DampLoadChild:PageShow") {
+ EventDispatcher.emit("DampLoadParent:PageShow", data);
+ }
+ }
+}
diff --git a/testing/talos/talos/tests/devtools/addon/content/damp-tests.js b/testing/talos/talos/tests/devtools/addon/content/damp-tests.js
new file mode 100644
index 0000000000..4a7a6fe78d
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/damp-tests.js
@@ -0,0 +1,255 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const isWindows = Services.appinfo.OS === "WINNT";
+
+// DAMP is split in sub-suites to run the tests faster on continuous integration.
+// See the initial patches in Bug 1749928 if we need to add more suites.
+const TEST_SUITES = {
+ INSPECTOR: "inspector",
+ WEBCONSOLE: "webconsole",
+ OTHER: "other",
+};
+
+/**
+ * This is the registry for all DAMP tests. The registry is an object containing
+ * one property for each DAMP sub-suite used in continuous integration. And each
+ * property contains the array of tests which correspond to this suite.
+ * Tests will be run in the order specified by the array.
+ *
+ * A test is defined with the following properties:
+ * - {String} name: the name of the test (should match the path when possible)
+ * - {String} path: the path to the test file under
+ * testing/talos/talos/tests/devtools/addon/content/tests/
+ * - {String} description: Test description
+ * - {Boolean} disabled: set to true to skip the test
+ * - {Boolean} cold: set to true to run the test only during the first run of the browser
+ */
+
+module.exports = {
+ [TEST_SUITES.INSPECTOR]: [
+ // The first cold-open test is *colder* than the other cold-open tests, it will also
+ // assess the impact of loading shared DevTools modules for the first time.
+ // This test will assert the impact of base loader/Loader.sys.mjs modules loading,
+ // typically gDevtools/gDevToolsBrowser/Framework modules, while the others will mostly
+ // track panel-specific modules (Browser loader, but not only).
+ {
+ name: "inspector.cold-open",
+ path: "inspector/cold-open.js",
+ description:
+ "Measure first open toolbox on inspector panel (incl. shared modules)",
+ cold: true,
+ },
+ {
+ name: "accessibility.cold-open",
+ path: "accessibility/cold-open.js",
+ description: "Measure first open toolbox on accessibility panel",
+ cold: true,
+ },
+ // Run all tests against "simple" document
+ {
+ name: "simple.inspector",
+ path: "inspector/simple.js",
+ description:
+ "Measure open/close toolbox on inspector panel against simple document",
+ },
+ {
+ name: "simple.styleeditor",
+ path: "styleeditor/simple.js",
+ description:
+ "Measure open/close toolbox on style editor panel against simple document",
+ },
+ {
+ name: "simple.accessibility",
+ path: "accessibility/simple.js",
+ description:
+ "Measure open/close toolbox on accessibility panel against simple document",
+ // Bug 1660854 - disable on Windows due to frequent failures
+ disabled: isWindows,
+ },
+ // Run all tests against "complicated" document
+ {
+ name: "complicated.inspector",
+ path: "inspector/complicated.js",
+ description:
+ "Measure open/close toolbox on inspector panel against complicated document",
+ },
+ {
+ name: "complicated.styleeditor",
+ path: "styleeditor/complicated.js",
+ description:
+ "Measure open/close toolbox on style editor panel against complicated document",
+ },
+ {
+ name: "custom.inspector",
+ path: "inspector/custom.js",
+ },
+ {
+ name: "custom.styleeditor",
+ path: "styleeditor/custom.js",
+ },
+ // Run individual tests covering a very precise tool feature.
+ {
+ name: "inspector.mutations",
+ path: "inspector/mutations.js",
+ description:
+ "Measure the time to perform childList mutations when inspector is enabled",
+ },
+ {
+ name: "inspector.layout",
+ path: "inspector/layout.js",
+ description:
+ "Measure the time to open/close toolbox on inspector with layout tab against big document with grid containers",
+ },
+ ],
+ [TEST_SUITES.WEBCONSOLE]: [
+ {
+ name: "webconsole.cold-open",
+ path: "webconsole/cold-open.js",
+ description: "Measure first open toolbox on webconsole panel",
+ cold: true,
+ },
+ {
+ name: "simple.webconsole",
+ path: "webconsole/simple.js",
+ description:
+ "Measure open/close toolbox on webconsole panel against simple document",
+ },
+ {
+ name: "complicated.webconsole",
+ path: "webconsole/complicated.js",
+ description:
+ "Measure open/close toolbox on webconsole panel against complicated document",
+ },
+ {
+ name: "custom.webconsole",
+ path: "webconsole/custom.js",
+ },
+ {
+ name: "console.bulklog",
+ path: "webconsole/bulklog.js",
+ description:
+ "Measure time for a bunch of sync console.log statements to appear",
+ },
+ {
+ name: "console.log-in-loop-content-process",
+ path: "webconsole/log-in-loop-content-process.js",
+ description:
+ "Measure time for a bunch of sync console.log statements to be handled on the content process",
+ },
+ {
+ name: "console.autocomplete",
+ path: "webconsole/autocomplete.js",
+ description: "Measure time for autocomplete popup to appear",
+ },
+ {
+ name: "console.streamlog",
+ path: "webconsole/streamlog.js",
+ description:
+ "Measure rAF on page during a stream of console.log statements",
+ },
+ {
+ name: "console.objectexpand",
+ path: "webconsole/objectexpand.js",
+ description:
+ "Measure time to expand a large object and close the console",
+ },
+ {
+ name: "console.openwithcache",
+ path: "webconsole/openwithcache.js",
+ description:
+ "Measure time to render last logged messages in console for a page with 100 logged messages",
+ },
+ {
+ name: "console.typing",
+ path: "webconsole/typing.js",
+ description:
+ "Measure time it takes to type something in the console input",
+ },
+ ],
+ [TEST_SUITES.OTHER]: [
+ {
+ name: "debugger.cold-open",
+ path: "debugger/cold-open.js",
+ description: "Measure first open toolbox on debugger panel",
+ cold: true,
+ },
+ {
+ name: "netmonitor.cold-open",
+ path: "netmonitor/cold-open.js",
+ description: "Measure first open toolbox on netmonitor panel",
+ cold: true,
+ },
+ {
+ name: "simple.debugger",
+ path: "debugger/simple.js",
+ description:
+ "Measure open/close toolbox on debugger panel against simple document",
+ },
+ {
+ name: "simple.netmonitor",
+ path: "netmonitor/simple.js",
+ description:
+ "Measure open/close toolbox on network monitor panel against simple document",
+ },
+ {
+ name: "complicated.debugger",
+ path: "debugger/complicated.js",
+ description:
+ "Measure open/close toolbox on debugger panel against complicated document",
+ },
+ // Bug 1693975 - disable test due to frequent failures
+ // {
+ // name: "complicated.netmonitor",
+ // path: "netmonitor/complicated.js",
+ // description:
+ // "Measure open/close toolbox on network monitor panel against complicated document",
+ // },
+ // Run all tests against a document specific to each tool
+ {
+ name: "custom.debugger",
+ path: "debugger/custom.js",
+ },
+ {
+ name: "custom.netmonitor",
+ path: "netmonitor/custom.js",
+ description:
+ "Measure open/reload/close toolbox on network monitor panel against a custom test document",
+ },
+ {
+ name: "panelsInBackground.reload",
+ path: "toolbox/panels-in-background.js",
+ description: "Measure page reload time when all panels are in background",
+ },
+ {
+ name: "toolbox.screenshot",
+ path: "toolbox/screenshot.js",
+ description: "Measure the time to take a fullpage screenshot",
+ },
+ {
+ name: "browser-toolbox",
+ path: "toolbox/browser-toolbox.js",
+ },
+ {
+ name: "server.protocoljs",
+ path: "server/protocol.js",
+ description: "Measure RDP/protocol.js performance",
+ },
+ {
+ name: "source-map-loader",
+ path: "source-map/source-map-loader.js",
+ description: "Measure source map loader performance",
+ },
+ {
+ name: "source-map-library",
+ path: "source-map/source-map-library.js",
+ description: "Measure source map library performance",
+ },
+ // ⚠ Adding new individual tests slows down DAMP execution ⚠
+ // ⚠ Consider contributing to custom.${tool} rather than adding isolated tests ⚠
+ // ⚠ See https://firefox-source-docs.mozilla.org/devtools/tests/writing-perf-tests.html ⚠
+ ],
+};
diff --git a/testing/talos/talos/tests/devtools/addon/content/damp.js b/testing/talos/talos/tests/devtools/addon/content/damp.js
new file mode 100644
index 0000000000..9f710763d1
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/damp.js
@@ -0,0 +1,552 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+/* globals dampWindow */
+
+const { gBrowser, MozillaFileLogger, requestIdleCallback } = dampWindow;
+
+const { AddonManager } = require("resource://gre/modules/AddonManager.jsm");
+
+const DampLoadParentModule = require("damp-test/actors/DampLoadParent.jsm");
+const DAMP_TESTS = require("damp-test/damp-tests.js");
+
+// Record allocation count in new subtests if DEBUG_DEVTOOLS_ALLOCATIONS is set to
+// "normal". Print allocation sites to stdout if DEBUG_DEVTOOLS_ALLOCATIONS is set to
+// "verbose".
+const DEBUG_ALLOCATIONS = Services.env.get("DEBUG_DEVTOOLS_ALLOCATIONS");
+
+const DEBUG_SCREENSHOTS = Services.env.get("DEBUG_DEVTOOLS_SCREENSHOTS");
+
+// Maximum time spent in one test, in milliseconds
+const TEST_TIMEOUT = 5 * 60000;
+
+function getMostRecentBrowserWindow() {
+ return Services.wm.getMostRecentWindow("navigator:browser");
+}
+
+function Damp() {}
+
+Damp.prototype = {
+ async garbageCollect() {
+ dump("Garbage collect\n");
+ let startTime = Cu.now();
+
+ // Minimize memory usage
+ // mimic miminizeMemoryUsage, by only flushing JS objects via GC.
+ // We don't want to flush all the cache like minimizeMemoryUsage,
+ // as it slow down next executions almost like a cold start.
+
+ // See minimizeMemoryUsage code to justify the 3 iterations and the setTimeout:
+ // https://searchfox.org/mozilla-central/rev/33c21c060b7f3a52477a73d06ebcb2bf313c4431/xpcom/base/nsMemoryReporterManager.cpp#2574-2585,2591-2594
+ for (let i = 0; i < 3; i++) {
+ // See minimizeMemoryUsage code here to justify the GC+CC+GC:
+ // https://searchfox.org/mozilla-central/rev/be78e6ea9b10b1f5b2b3b013f01d86e1062abb2b/dom/base/nsJSEnvironment.cpp#341-349
+ Cu.forceGC();
+ Cu.forceCC();
+ Cu.forceGC();
+ await new Promise(done => setTimeout(done, 0));
+ }
+ ChromeUtils.addProfilerMarker(
+ "DAMP",
+ { startTime, category: "Test" },
+ "GC"
+ );
+ },
+
+ async ensureTalosParentProfiler() {
+ // TalosParentProfiler is part of TalosPowers, which is a separate WebExtension
+ // that may or may not already have finished loading at this point (unlike most
+ // Pageloader tests, Damp doesn't wait for Pageloader to find TalosPowers before
+ // running). getTalosParentProfiler is used to wait for TalosPowers to be around
+ // before continuing.
+ async function getTalosParentProfiler() {
+ try {
+ const {
+ TalosParentProfiler,
+ } = require("resource://talos-powers/TalosParentProfiler.jsm");
+ return TalosParentProfiler;
+ } catch (err) {
+ await new Promise(resolve => setTimeout(resolve, 500));
+ return getTalosParentProfiler();
+ }
+ }
+
+ this.TalosParentProfiler = await getTalosParentProfiler();
+ },
+
+ // Take a screenshot of the whole browser window and open it in a background tab
+ async screenshot(label) {
+ const win = this._win;
+ const canvas = win.document.createElementNS(
+ "http://www.w3.org/1999/xhtml",
+ "html:canvas"
+ );
+ const context = canvas.getContext("2d");
+ canvas.width = win.innerWidth;
+ canvas.height = win.innerHeight;
+ context.drawWindow(win, 0, 0, canvas.width, canvas.height, "white");
+ const imgURL = canvas.toDataURL();
+ const url = `data:text/html,<title>${label}</title>
+ <h1>${label}</h1>
+ <img width="100%" height="100%" src="${imgURL}"/>`;
+ this._win.gBrowser.addTab(url, {
+ triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal(),
+ });
+ },
+
+ /**
+ * Helper to tell when a test start and when it is finished.
+ * It helps recording its duration, but also put markers for profiler.firefox.com
+ * when profiling DAMP.
+ *
+ * When this method is called, the test is considered to be starting immediately
+ * When the test is over, the returned object's `done` method should be called.
+ *
+ * @param label String
+ * Test title, displayed everywhere in PerfHerder, DevTools Perf Dashboard, ...
+ * @param record Boolean
+ * Optional, if passed false, the test won't be recorded. It won't appear in
+ * PerfHerder. Instead we will record profiler.firefox.com markers and only
+ * print the timings on stdout.
+ *
+ * @return object
+ * With a `done` method, to be called whenever the test is finished running
+ * and we should record its duration.
+ */
+ runTest(label, record = true) {
+ if (DEBUG_ALLOCATIONS) {
+ if (!this.allocationTracker) {
+ this.allocationTracker = this.startAllocationTracker();
+ }
+ // Flush the current allocations before running the test
+ this.allocationTracker.flushAllocations();
+ }
+
+ let start = Cu.now();
+
+ return {
+ done: () => {
+ let end = Cu.now();
+ let duration = end - start;
+ ChromeUtils.addProfilerMarker(
+ "DAMP",
+ { startTime: start, category: "Test" },
+ label
+ );
+ if (record) {
+ this._results.push({
+ name: label,
+ value: duration,
+ });
+ } else {
+ dump(`'${label}' took ${duration}ms.\n`);
+ }
+
+ if (DEBUG_ALLOCATIONS == "normal" && record) {
+ this._results.push({
+ name: label + ".allocations",
+ value: this.allocationTracker.countAllocations(),
+ });
+ } else if (DEBUG_ALLOCATIONS == "verbose") {
+ this.allocationTracker.logAllocationSites();
+ }
+ if (DEBUG_SCREENSHOTS) {
+ this.screenshot(label);
+ }
+ },
+ };
+ },
+
+ async addTab(url) {
+ // Disable opening animation to avoid intermittents and prevent having to wait for
+ // animation's end. (See bug 1480953)
+ let tab = (this._win.gBrowser.selectedTab =
+ this._win.gBrowser.addTrustedTab(url, { skipAnimation: true }));
+ let browser = tab.linkedBrowser;
+ await this._awaitBrowserLoaded(browser);
+ return tab;
+ },
+
+ async waitForPendingPaints(window) {
+ let utils = window.windowUtils;
+ let startTime = Cu.now();
+ while (utils.isMozAfterPaintPending) {
+ await new Promise(done => {
+ window.addEventListener(
+ "MozAfterPaint",
+ function listener() {
+ ChromeUtils.addProfilerMarker(
+ "DAMP",
+ { category: "Test" },
+ "pending paint"
+ );
+ done();
+ },
+ { once: true }
+ );
+ });
+ }
+ ChromeUtils.addProfilerMarker(
+ "DAMP",
+ { startTime, category: "Test" },
+ "pending paints"
+ );
+ },
+
+ reloadPage(onReload) {
+ return new Promise(resolve => {
+ let browser = gBrowser.selectedBrowser;
+ if (typeof onReload == "function") {
+ onReload().then(resolve);
+ } else {
+ resolve(this._awaitBrowserLoaded(browser));
+ }
+ browser.reload();
+ });
+ },
+
+ async testSetup(url) {
+ let tab = await this.addTab(url);
+ await new Promise(resolve => {
+ setTimeout(resolve, 100);
+ });
+ return tab;
+ },
+
+ async testTeardown(url) {
+ // Disable closing animation to avoid intermittents and prevent having to wait for
+ // animation's end. (See bug 1480953)
+ this._win.gBrowser.removeCurrentTab({ animate: false });
+
+ // Force freeing memory now so that it doesn't happen during the next test
+ await this.garbageCollect();
+
+ let duration = Math.round(Cu.now() - this._startTime);
+ dump(`${this._currentTest} took ${duration}ms.\n`);
+
+ this._runNextTest();
+ },
+
+ _win: undefined,
+ _dampTab: undefined,
+ _results: [],
+ _nextTestIndex: 0,
+ _tests: [],
+ _onSequenceComplete: 0,
+
+ // Timeout ID to guard against current test never finishing
+ _timeout: null,
+
+ // The unix time at which the current test started (ms)
+ _startTime: null,
+
+ // Name of the test currently executed (i.e. path from /tests folder)
+ _currentTest: null,
+
+ _runNextTest() {
+ clearTimeout(this._timeout);
+
+ if (this._nextTestIndex >= this._tests.length) {
+ this._onSequenceComplete();
+ return;
+ }
+
+ let test = this._tests[this._nextTestIndex++];
+ this._startTime = Cu.now();
+ this._currentTest = test;
+
+ dump(`Loading test '${test}'\n`);
+ let testMethod = require(`damp-test/tests/${test}`);
+
+ this._timeout = setTimeout(() => {
+ this.error("Test timed out");
+ }, TEST_TIMEOUT);
+
+ dump(`Executing test '${test}'\n`);
+ let promise = testMethod();
+
+ // If test method is an async function, ensure catching its exceptions
+ if (promise && typeof promise.catch == "function") {
+ promise.catch(e => {
+ this.exception(e);
+ });
+ }
+ },
+ // Each command at the array a function which must call nextCommand once it's done
+ _doSequence(tests, onComplete) {
+ this._tests = tests;
+ this._onSequenceComplete = onComplete;
+ this._results = [];
+ this._nextTestIndex = 0;
+
+ this._runNextTest();
+ },
+
+ _log(str) {
+ if (MozillaFileLogger && MozillaFileLogger.log) {
+ MozillaFileLogger.log(str);
+ }
+
+ dump(str);
+ },
+
+ _logLine(str) {
+ return this._log(str + "\n");
+ },
+
+ _reportAllResults() {
+ const testNames = [];
+ const testResults = [];
+
+ let out = "";
+ for (const i in this._results) {
+ const res = this._results[i];
+ const disp = []
+ .concat(res.value)
+ .map(function (a) {
+ return isNaN(a) ? -1 : a.toFixed(1);
+ })
+ .join(" ");
+ out += res.name + ": " + disp + "\n";
+
+ if (!Array.isArray(res.value)) {
+ // Waw intervals array is not reported to talos
+ testNames.push(res.name);
+ testResults.push(res.value);
+ }
+ }
+ this._log("\n" + out);
+
+ if (DEBUG_SCREENSHOTS) {
+ // When we are printing screenshots, we don't want to want to exit firefox
+ // so that we have time to view them.
+ dump(
+ "All tests are finished, please review the screenshots and close the browser manually.\n"
+ );
+ return;
+ }
+
+ if (this.testDone) {
+ this.testDone({ testResults, testNames });
+ } else {
+ // alert(out);
+ }
+ },
+
+ _doneInternal() {
+ // Ignore any duplicated call to this method
+ // Call startTest() again in order to reset this flag.
+ if (this._done) {
+ return;
+ }
+ this._done = true;
+
+ if (this.allocationTracker) {
+ this.allocationTracker.stop();
+ this.allocationTracker = null;
+ }
+ this._win.gBrowser.selectedTab = this._dampTab;
+
+ if (this._results) {
+ this._logLine("DAMP_RESULTS_JSON=" + JSON.stringify(this._results));
+ this._reportAllResults();
+ }
+
+ this.TalosParentProfiler.subtestEnd("DAMP");
+
+ this._unregisterDampLoadActors();
+ },
+
+ startAllocationTracker() {
+ const {
+ allocationTracker,
+ } = require("devtools/shared/test-helpers/allocation-tracker");
+ return allocationTracker();
+ },
+
+ error(message) {
+ // Log a unique prefix in order to be interpreted as an error and stop DAMP from
+ // testing/talos/talos/talos_process.py
+ dump("TEST-UNEXPECTED-FAIL | damp | ");
+
+ // Print the currently executed test, if we already started executing one
+ if (this._currentTest) {
+ dump(this._currentTest + ": ");
+ }
+
+ dump(message + "\n");
+
+ // Stop further test execution and immediatly close DAMP
+ this._tests = [];
+ this._results = null;
+ this._doneInternal();
+ },
+
+ exception(e) {
+ const str =
+ "Exception: " + (e?.message || e) + "\n" + (e?.stack || "No stack");
+ this.error(str);
+ },
+
+ // Waits for any pending operations that may execute on Firefox startup and that
+ // can still be pending when we start running DAMP tests.
+ async waitBeforeRunningTests() {
+ // Addons may still be being loaded, so wait for them to be fully set up.
+ if (!AddonManager.isReady) {
+ let onAddonManagerReady = new Promise(resolve => {
+ let listener = {
+ onStartup() {
+ AddonManager.removeManagerListener(listener);
+ resolve();
+ },
+ onShutdown() {},
+ };
+ AddonManager.addManagerListener(listener);
+ });
+ await onAddonManagerReady;
+ }
+
+ // SessionRestore triggers some saving sequence on idle,
+ // so wait for that to be processed before starting tests.
+ // https://searchfox.org/mozilla-central/rev/83a923ef7a3b95a516f240a6810c20664b1e0ac9/browser/components/sessionstore/content/content-sessionStore.js#828-830
+ // https://searchfox.org/mozilla-central/rev/83a923ef7a3b95a516f240a6810c20664b1e0ac9/browser/components/sessionstore/content/content-sessionStore.js#858
+ await new Promise(resolve => {
+ setTimeout(resolve, 1500);
+ });
+ await new Promise(resolve => {
+ requestIdleCallback(resolve, { timeout: 15000 });
+ });
+
+ await this.ensureTalosParentProfiler();
+
+ // Free memory before running the first test, otherwise we may have a GC
+ // related to Firefox startup or DAMP setup during the first test.
+ await this.garbageCollect();
+ },
+
+ /**
+ * This is the main entry point for DAMP, called from
+ * testing/talos/talos/tests/devtools/addon/api
+ */
+ startTest() {
+ let promise = new Promise(resolve => {
+ this.testDone = resolve;
+ });
+
+ try {
+ // Is DAMP finished executing? Help preventing async execution when DAMP had an error
+ this._done = false;
+
+ this._registerDampLoadActors();
+
+ this._win = Services.wm.getMostRecentWindow("navigator:browser");
+ this._dampTab = this._win.gBrowser.selectedTab;
+ this._win.gBrowser.selectedBrowser.focus(); // Unfocus the URL bar to avoid caret blink
+
+ // Filter tests via `./mach --subtests filter` command line argument
+ let filter = Services.prefs.getCharPref("talos.subtests", "");
+
+ const suite = Services.prefs.getCharPref("talos.damp.suite", "");
+ let testSuite;
+ if (suite === "all") {
+ testSuite = Object.values(DAMP_TESTS).flat();
+ } else {
+ testSuite = DAMP_TESTS[suite];
+ if (!testSuite) {
+ this.error(`Unable to find any test suite matching '${suite}'`);
+ }
+ }
+
+ let tests = testSuite
+ .filter(test => !test.disabled)
+ .filter(test => test.name.includes(filter));
+
+ if (tests.length === 0) {
+ this.error(`Unable to find any test matching '${filter}'`);
+ }
+
+ // Run cold test only once
+ let topWindow = getMostRecentBrowserWindow();
+ if (topWindow.coldRunDAMPDone) {
+ tests = tests.filter(test => !test.cold);
+ } else {
+ topWindow.coldRunDAMPDone = true;
+ }
+
+ // Construct the sequence array while filtering tests
+ let sequenceArray = [];
+ for (let test of tests) {
+ sequenceArray.push(test.path);
+ }
+
+ this.waitBeforeRunningTests()
+ .then(() => {
+ this.TalosParentProfiler.subtestStart("Begin DAMP");
+ this._doSequence(sequenceArray, this._doneInternal);
+ })
+ .catch(e => {
+ this.exception(e);
+ });
+ } catch (e) {
+ this.exception(e);
+ }
+
+ return promise;
+ },
+
+ /**
+ * Wait for a page-show/load event on the provided browser element, using the
+ * JSWindowActor pair at content/actors/DampLoad.
+ */
+ _awaitBrowserLoaded(browser) {
+ dump(
+ `Wait for a pageshow event for browsing context ${browser.browsingContext.id}\n`
+ );
+ return new Promise(resolve => {
+ const eventDispatcher = DampLoadParentModule.EventDispatcher;
+ const onPageShow = (eventName, data) => {
+ dump(`Received pageshow event for ${data.browsingContext.id}\n`);
+ if (data.browsingContext !== browser.browsingContext) {
+ return;
+ }
+
+ eventDispatcher.off("DampLoadParent:PageShow", onPageShow);
+ resolve();
+ };
+
+ eventDispatcher.on("DampLoadParent:PageShow", onPageShow);
+ });
+ },
+
+ _registerDampLoadActors() {
+ dump(`[DampLoad helper] Register DampLoad actors\n`);
+ ChromeUtils.registerWindowActor("DampLoad", {
+ kind: "JSWindowActor",
+ parent: {
+ esModuleURI:
+ "resource://damp-test/content/actors/DampLoadParent.sys.mjs",
+ },
+ child: {
+ esModuleURI:
+ "resource://damp-test/content/actors/DampLoadChild.sys.mjs",
+ events: {
+ pageshow: { mozSystemGroup: true },
+ },
+ },
+
+ // Only listen to top level content frame load.
+ allFrames: false,
+ includeChrome: false,
+ });
+ },
+
+ _unregisterDampLoadActors() {
+ dump(`[DampLoad helper] Unregister DampLoad actors\n`);
+ ChromeUtils.unregisterWindowActor("DampLoad");
+ },
+};
+
+exports.damp = new Damp();
diff --git a/testing/talos/talos/tests/devtools/addon/content/pages/custom/console/bulklog.html b/testing/talos/talos/tests/devtools/addon/content/pages/custom/console/bulklog.html
new file mode 100644
index 0000000000..bb6fe4e5df
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/pages/custom/console/bulklog.html
@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Console custom page for logging specific types in loops</title>
+ <script>
+
+ const argByType = {
+ string: "damp",
+ longstring: "damp ".repeat(10000),
+ number: 42,
+ bigint: 42n,
+ null: null,
+ undefined: undefined,
+ nan: NaN,
+ bool: true,
+ infinity: Infinity,
+ symbol: Symbol('sym'),
+ array: Array.from({length: 1000}, (_, i) => i),
+ typedarray: new Uint8Array(Array.from({length: 100000}, (_, i) => i)),
+ /* 10 is already large enough to trigger some slowness */
+ set: new Set(Array.from({length: 10}, (_, i) => i)),
+ /* 10 is already large enough to trigger some slowness */
+ map: new Map(Array.from({length: 10}, (_, i) => ["key-" + i, "value-" + i])),
+ get object(){
+ const value = {};
+ for (let i = 0; i < 100; i++) {
+ value["item-" + i] = {index: i, ...value};
+ }
+ return value;
+ },
+ node: document.body,
+ nodelist: document.querySelectorAll("*"),
+ promise: Promise.resolve(123),
+ get error() {
+ let value;
+ const d = () => {
+ value = new Error('blah', {cause: 'because of you'});
+ }
+ const c = () => d()
+ const b = () => c()
+ const a = () => b()
+ a();
+ return value;
+ },
+ document: document,
+ window: window,
+ date: new Date()
+ }
+
+ globalThis.doLogs = function(type, iterations) {
+ if (!iterations) {
+ throw new Error("iterations is required");
+ }
+ let arg = argByType[type];
+ for (let i = 0; i < iterations; i++) {
+ console.log(arg);
+ }
+ }
+ </script>
+</head>
+<body>
+ <h1>console.log in for loop for specific types</h1>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/devtools/addon/content/pages/custom/console/iframe.html b/testing/talos/talos/tests/devtools/addon/content/pages/custom/console/iframe.html
new file mode 100644
index 0000000000..997de3edd0
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/pages/custom/console/iframe.html
@@ -0,0 +1,62 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Custom page for the Console</title>
+</head>
+<body>
+<script>
+// These query parameters are set in damp.js:customConsole and define the number
+// of console API calls we do in this test.
+const searchParams = new URLSearchParams(location.search);
+const sync = searchParams.get("sync");
+const stream = searchParams.get("stream");
+const batch = searchParams.get("batch");
+const batchSize = searchParams.get("batchSize");
+
+// We log complex objects:
+// * a complex js object (window)
+// * a DOM node (body)
+// * a large array
+const bigArray = Array.from({length: 10000}, (_, i) => i);
+
+// Fill up the console with many logs synchronously during page load.
+for (let i = 0; i < sync; i++) {
+ console.log("sync log", i, window, document.body, bigArray);
+}
+
+// Then, do streamlogs, log asynchronously a lot of messages
+let n = 0;
+function streamLogs() {
+ console.log("stream log", n++, window, document.body, bigArray);
+ if (n < stream) {
+ requestAnimationFrame(streamLogs);
+ } else {
+ requestIdleCallback(batchLogs);
+ }
+}
+requestIdleCallback(streamLogs);
+
+// We batch log by small bulk asynchronously slightly more slowly thanks to idle callback
+let x = 0;
+function batchLogs() {
+ for (let i = 0; i < batchSize; i++) {
+ // Alternate between simple logs and trace to trigger more edgecases
+ if (i % 2 == 0) {
+ console.log("batch log", (x * batchSize) + i, window, document.body, bigArray);
+ } else {
+ console.trace("batch log", (x * batchSize) + i, window, document.body, bigArray);
+ }
+ }
+ if (x < batch - 1) {
+ requestIdleCallback(batchLogs);
+ } else {
+ // We are done logging all messages
+ console.log("very last message");
+ }
+ x++;
+}
+
+</script>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/devtools/addon/content/pages/custom/console/index.html b/testing/talos/talos/tests/devtools/addon/content/pages/custom/console/index.html
new file mode 100644
index 0000000000..8de2b7fbb1
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/pages/custom/console/index.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>iframe wrapper for the console custom page</title>
+ <style type="text/css">
+ html, body {
+ height: 100%;
+ width: 100%;
+ }
+ iframe {
+ border-style: none;
+ height: 100%;
+ position: absolute;
+ width: 100%;
+ }
+ </style>
+</head>
+<body>
+<script>
+ // Test parameters are passed to this page via url parameters.
+ // Create the iframe URL from the current URL to preserve the parameters.
+ const searchParamsEncoded = document.location.search;
+ const searchParams = new URLSearchParams(searchParamsEncoded);
+ const iframeSrc = `http://damp.iframe.com/tests/devtools/addon/content/pages/custom/console/iframe.html${searchParamsEncoded}`;
+ const iframe = document.createElement("iframe");
+ iframe.setAttribute("src", iframeSrc);
+ document.body.appendChild(iframe);
+</script>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app-build/README.md b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app-build/README.md
new file mode 100644
index 0000000000..08dd15bf69
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app-build/README.md
@@ -0,0 +1,10 @@
+## Create React Test App Build
+This is a fork of [Create React App](https://github.com/facebookincubator/create-react-app) that is
+being used as part of the DAMP test tool suite.
+
+This `app-build/` is built from the files in the `app/` folder.
+
+Note: No changes should be made directly in this folder
+
+For details on how to make changes and rebuild this app, see readme in `app/README.md`
+
diff --git a/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app-build/iframe.html b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app-build/iframe.html
new file mode 100644
index 0000000000..026ad25349
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app-build/iframe.html
@@ -0,0 +1,149 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no">
+ <meta name="theme-color" content="#000000">
+ <!--
+ Notice the use of . in the tags above.
+ It will be replaced with the URL of the `public` folder during the build.
+ Only files inside the `public` folder can be referenced from the HTML.
+
+ Unlike "/favicon.ico" or "favicon.ico", "./favicon.ico" will
+ work correctly both with client-side routing and a non-root public URL.
+ Learn how to configure a non-root public URL by running `npm run build`.
+ -->
+ <title>React App</title>
+ <script type="text/javascript" src="./js/testfile.js?id=0"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=1"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=2"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=3"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=4"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=5"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=6"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=7"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=8"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=9"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=10"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=11"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=12"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=13"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=14"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=15"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=16"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=17"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=18"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=19"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=20"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=21"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=22"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=23"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=24"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=25"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=26"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=27"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=28"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=29"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=30"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=31"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=32"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=33"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=34"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=35"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=36"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=37"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=38"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=39"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=40"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=41"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=42"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=43"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=44"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=45"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=46"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=47"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=48"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=49"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=50"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=51"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=52"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=53"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=54"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=55"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=56"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=57"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=58"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=59"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=60"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=61"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=62"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=63"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=64"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=65"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=66"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=67"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=68"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=69"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=70"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=71"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=72"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=73"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=74"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=75"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=76"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=77"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=78"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=79"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=80"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=81"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=82"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=83"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=84"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=85"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=86"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=87"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=88"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=89"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=90"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=91"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=92"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=93"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=94"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=95"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=96"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=97"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=98"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=99"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=100"></script>
+ <script type="text/javascript" src="./js/subfolder/testsubfolder.js"></script>
+ </head>
+ <body>
+ <noscript>
+ You need to enable JavaScript to run this app.
+ </noscript>
+ <div id="root"></div>
+ <!--
+ This HTML file is a template.
+ If you open it directly in the browser, you will see an empty page.
+
+ You can add webfonts, meta tags, or analytics to this file.
+ The build step will place the bundled scripts into the <body> tag.
+
+ To begin the development, run `npm start` or `yarn start`.
+ To create a production bundle, use `npm run build` or `yarn build`.
+ -->
+ <script type="text/javascript" src="./static/js/main.js"></script></body>
+
+ <script>
+ // We are using eval + sourceURL in order to prevent doing any HTTP request
+ // and speed up the test runtime.
+ for(let i = 0; i < 250; i++) {
+ eval("function evalScript() {} //# sourceURL=foo/eval-script-" + i +".js");
+ }
+ for(let i = 0; i < 250; i++) {
+ eval("function evalScript() {} //# sourceURL=foo/bar/plop/eval-script-" + i +".js");
+ }
+ </script>
+
+ <script type="text/javascript" src="./static/js/minified.js"></script></body>
+</html>
diff --git a/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app-build/index.html b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app-build/index.html
new file mode 100644
index 0000000000..9e1f3afdb6
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app-build/index.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>iframe wrapper for the debugger custom page</title>
+ <style type="text/css">
+ html, body {
+ height: 100%;
+ width: 100%;
+ }
+ iframe {
+ border-style: none;
+ height: 100%;
+ position: absolute;
+ width: 100%;
+ }
+ </style>
+</head>
+<body>
+
+ <!-- For now we load the iframe in the same site as the damp top frame.
+ We will switch to a different-site URL (eg http://damp.iframe.com) when
+ DevTools work against remote frames. -->
+ <iframe src="http://damp.top.com/tests/devtools/addon/content/pages/custom/debugger/app-build/iframe.html"></iframe>
+
+ <script>
+ // We are using eval + sourceURL in order to prevent doing any HTTP request
+ // and speed up the test runtime.
+ for(let i = 0; i < 500; i++) {
+ eval("function evalScript() {} //# sourceURL=eval/eval-script-" + i +".js");
+ }
+ </script>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app-build/js/subfolder/testsubfolder.js b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app-build/js/subfolder/testsubfolder.js
new file mode 100644
index 0000000000..228ebe310e
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app-build/js/subfolder/testsubfolder.js
@@ -0,0 +1,5 @@
+(function () {
+ function fSubFolder() {
+ return Math.random();
+ }
+});
diff --git a/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app-build/js/testfile.js b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app-build/js/testfile.js
new file mode 100644
index 0000000000..b78be47b7e
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app-build/js/testfile.js
@@ -0,0 +1,1001 @@
+(function () {
+ function f0() {
+ f1();
+ return Math.random();
+ }
+
+ function f1() {
+ f2();
+ return Math.random();
+ }
+
+ function f2() {
+ f3();
+ return Math.random();
+ }
+
+ function f3() {
+ f4();
+ return Math.random();
+ }
+
+ function f4() {
+ f5();
+ return Math.random();
+ }
+
+ function f5() {
+ f6();
+ return Math.random();
+ }
+
+ function f6() {
+ f7();
+ return Math.random();
+ }
+
+ function f7() {
+ f8();
+ return Math.random();
+ }
+
+ function f8() {
+ f9();
+ return Math.random();
+ }
+
+ function f9() {
+ f10();
+ return Math.random();
+ }
+
+ function f10() {
+ f11();
+ return Math.random();
+ }
+
+ function f11() {
+ f12();
+ return Math.random();
+ }
+
+ function f12() {
+ f13();
+ return Math.random();
+ }
+
+ function f13() {
+ f14();
+ return Math.random();
+ }
+
+ function f14() {
+ f15();
+ return Math.random();
+ }
+
+ function f15() {
+ f16();
+ return Math.random();
+ }
+
+ function f16() {
+ f17();
+ return Math.random();
+ }
+
+ function f17() {
+ f18();
+ return Math.random();
+ }
+
+ function f18() {
+ f19();
+ return Math.random();
+ }
+
+ function f19() {
+ f20();
+ return Math.random();
+ }
+
+ function f20() {
+ f21();
+ return Math.random();
+ }
+
+ function f21() {
+ f22();
+ return Math.random();
+ }
+
+ function f22() {
+ f23();
+ return Math.random();
+ }
+
+ function f23() {
+ f24();
+ return Math.random();
+ }
+
+ function f24() {
+ f25();
+ return Math.random();
+ }
+
+ function f25() {
+ f26();
+ return Math.random();
+ }
+
+ function f26() {
+ f27();
+ return Math.random();
+ }
+
+ function f27() {
+ f28();
+ return Math.random();
+ }
+
+ function f28() {
+ f29();
+ return Math.random();
+ }
+
+ function f29() {
+ f30();
+ return Math.random();
+ }
+
+ function f30() {
+ f31();
+ return Math.random();
+ }
+
+ function f31() {
+ f32();
+ return Math.random();
+ }
+
+ function f32() {
+ f33();
+ return Math.random();
+ }
+
+ function f33() {
+ f34();
+ return Math.random();
+ }
+
+ function f34() {
+ f35();
+ return Math.random();
+ }
+
+ function f35() {
+ f36();
+ return Math.random();
+ }
+
+ function f36() {
+ f37();
+ return Math.random();
+ }
+
+ function f37() {
+ f38();
+ return Math.random();
+ }
+
+ function f38() {
+ f39();
+ return Math.random();
+ }
+
+ function f39() {
+ f40();
+ return Math.random();
+ }
+
+ function f40() {
+ f41();
+ return Math.random();
+ }
+
+ function f41() {
+ f42();
+ return Math.random();
+ }
+
+ function f42() {
+ f43();
+ return Math.random();
+ }
+
+ function f43() {
+ f44();
+ return Math.random();
+ }
+
+ function f44() {
+ f45();
+ return Math.random();
+ }
+
+ function f45() {
+ f46();
+ return Math.random();
+ }
+
+ function f46() {
+ f47();
+ return Math.random();
+ }
+
+ function f47() {
+ f48();
+ return Math.random();
+ }
+
+ function f48() {
+ f49();
+ return Math.random();
+ }
+
+ function f49() {
+ f50();
+ return Math.random();
+ }
+
+ function f50() {
+ f51();
+ return Math.random();
+ }
+
+ function f51() {
+ f52();
+ return Math.random();
+ }
+
+ function f52() {
+ f53();
+ return Math.random();
+ }
+
+ function f53() {
+ f54();
+ return Math.random();
+ }
+
+ function f54() {
+ f55();
+ return Math.random();
+ }
+
+ function f55() {
+ f56();
+ return Math.random();
+ }
+
+ function f56() {
+ f57();
+ return Math.random();
+ }
+
+ function f57() {
+ f58();
+ return Math.random();
+ }
+
+ function f58() {
+ f59();
+ return Math.random();
+ }
+
+ function f59() {
+ f60();
+ return Math.random();
+ }
+
+ function f60() {
+ f61();
+ return Math.random();
+ }
+
+ function f61() {
+ f62();
+ return Math.random();
+ }
+
+ function f62() {
+ f63();
+ return Math.random();
+ }
+
+ function f63() {
+ f64();
+ return Math.random();
+ }
+
+ function f64() {
+ f65();
+ return Math.random();
+ }
+
+ function f65() {
+ f66();
+ return Math.random();
+ }
+
+ function f66() {
+ f67();
+ return Math.random();
+ }
+
+ function f67() {
+ f68();
+ return Math.random();
+ }
+
+ function f68() {
+ f69();
+ return Math.random();
+ }
+
+ function f69() {
+ f70();
+ return Math.random();
+ }
+
+ function f70() {
+ f71();
+ return Math.random();
+ }
+
+ function f71() {
+ f72();
+ return Math.random();
+ }
+
+ function f72() {
+ f73();
+ return Math.random();
+ }
+
+ function f73() {
+ f74();
+ return Math.random();
+ }
+
+ function f74() {
+ f75();
+ return Math.random();
+ }
+
+ function f75() {
+ f76();
+ return Math.random();
+ }
+
+ function f76() {
+ f77();
+ return Math.random();
+ }
+
+ function f77() {
+ f78();
+ return Math.random();
+ }
+
+ function f78() {
+ f79();
+ return Math.random();
+ }
+
+ function f79() {
+ f80();
+ return Math.random();
+ }
+
+ function f80() {
+ f81();
+ return Math.random();
+ }
+
+ function f81() {
+ f82();
+ return Math.random();
+ }
+
+ function f82() {
+ f83();
+ return Math.random();
+ }
+
+ function f83() {
+ f84();
+ return Math.random();
+ }
+
+ function f84() {
+ f85();
+ return Math.random();
+ }
+
+ function f85() {
+ f86();
+ return Math.random();
+ }
+
+ function f86() {
+ f87();
+ return Math.random();
+ }
+
+ function f87() {
+ f88();
+ return Math.random();
+ }
+
+ function f88() {
+ f89();
+ return Math.random();
+ }
+
+ function f89() {
+ f90();
+ return Math.random();
+ }
+
+ function f90() {
+ f91();
+ return Math.random();
+ }
+
+ function f91() {
+ f92();
+ return Math.random();
+ }
+
+ function f92() {
+ f93();
+ return Math.random();
+ }
+
+ function f93() {
+ f94();
+ return Math.random();
+ }
+
+ function f94() {
+ f95();
+ return Math.random();
+ }
+
+ function f95() {
+ f96();
+ return Math.random();
+ }
+
+ function f96() {
+ f97();
+ return Math.random();
+ }
+
+ function f97() {
+ f98();
+ return Math.random();
+ }
+
+ function f98() {
+ f99();
+ return Math.random();
+ }
+
+ function f99() {
+ f100();
+ return Math.random();
+ }
+
+
+ function f100() {
+ f101();
+ return Math.random();
+ }
+
+ function f101() {
+ f102();
+ return Math.random();
+ }
+
+ function f102() {
+ f103();
+ return Math.random();
+ }
+
+ function f103() {
+ f104();
+ return Math.random();
+ }
+
+ function f104() {
+ f105();
+ return Math.random();
+ }
+
+ function f105() {
+ f106();
+ return Math.random();
+ }
+
+ function f106() {
+ f107();
+ return Math.random();
+ }
+
+ function f107() {
+ f108();
+ return Math.random();
+ }
+
+ function f108() {
+ f109();
+ return Math.random();
+ }
+
+ function f109() {
+ f110();
+ return Math.random();
+ }
+
+ function f110() {
+ f111();
+ return Math.random();
+ }
+
+ function f111() {
+ f112();
+ return Math.random();
+ }
+
+ function f112() {
+ f113();
+ return Math.random();
+ }
+
+ function f113() {
+ f114();
+ return Math.random();
+ }
+
+ function f114() {
+ f115();
+ return Math.random();
+ }
+
+ function f115() {
+ f116();
+ return Math.random();
+ }
+
+ function f116() {
+ f117();
+ return Math.random();
+ }
+
+ function f117() {
+ f118();
+ return Math.random();
+ }
+
+ function f118() {
+ f119();
+ return Math.random();
+ }
+
+ function f119() {
+ f120();
+ return Math.random();
+ }
+
+ function f120() {
+ f121();
+ return Math.random();
+ }
+
+ function f121() {
+ f122();
+ return Math.random();
+ }
+
+ function f122() {
+ f123();
+ return Math.random();
+ }
+
+ function f123() {
+ f124();
+ return Math.random();
+ }
+
+ function f124() {
+ f125();
+ return Math.random();
+ }
+
+ function f125() {
+ f126();
+ return Math.random();
+ }
+
+ function f126() {
+ f127();
+ return Math.random();
+ }
+
+ function f127() {
+ f128();
+ return Math.random();
+ }
+
+ function f128() {
+ f129();
+ return Math.random();
+ }
+
+ function f129() {
+ f130();
+ return Math.random();
+ }
+
+ function f130() {
+ f131();
+ return Math.random();
+ }
+
+ function f131() {
+ f132();
+ return Math.random();
+ }
+
+ function f132() {
+ f133();
+ return Math.random();
+ }
+
+ function f133() {
+ f134();
+ return Math.random();
+ }
+
+ function f134() {
+ f135();
+ return Math.random();
+ }
+
+ function f135() {
+ f136();
+ return Math.random();
+ }
+
+ function f136() {
+ f137();
+ return Math.random();
+ }
+
+ function f137() {
+ f138();
+ return Math.random();
+ }
+
+ function f138() {
+ f139();
+ return Math.random();
+ }
+
+ function f139() {
+ f140();
+ return Math.random();
+ }
+
+ function f140() {
+ f141();
+ return Math.random();
+ }
+
+ function f141() {
+ f142();
+ return Math.random();
+ }
+
+ function f142() {
+ f143();
+ return Math.random();
+ }
+
+ function f143() {
+ f144();
+ return Math.random();
+ }
+
+ function f144() {
+ f145();
+ return Math.random();
+ }
+
+ function f145() {
+ f146();
+ return Math.random();
+ }
+
+ function f146() {
+ f147();
+ return Math.random();
+ }
+
+ function f147() {
+ f148();
+ return Math.random();
+ }
+
+ function f148() {
+ f149();
+ return Math.random();
+ }
+
+ function f149() {
+ f150();
+ return Math.random();
+ }
+
+ function f150() {
+ f151();
+ return Math.random();
+ }
+
+ function f151() {
+ f152();
+ return Math.random();
+ }
+
+ function f152() {
+ f153();
+ return Math.random();
+ }
+
+ function f153() {
+ f154();
+ return Math.random();
+ }
+
+ function f154() {
+ f155();
+ return Math.random();
+ }
+
+ function f155() {
+ f156();
+ return Math.random();
+ }
+
+ function f156() {
+ f157();
+ return Math.random();
+ }
+
+ function f157() {
+ f158();
+ return Math.random();
+ }
+
+ function f158() {
+ f159();
+ return Math.random();
+ }
+
+ function f159() {
+ f160();
+ return Math.random();
+ }
+
+ function f160() {
+ f161();
+ return Math.random();
+ }
+
+ function f161() {
+ f162();
+ return Math.random();
+ }
+
+ function f162() {
+ f163();
+ return Math.random();
+ }
+
+ function f163() {
+ f164();
+ return Math.random();
+ }
+
+ function f164() {
+ f165();
+ return Math.random();
+ }
+
+ function f165() {
+ f166();
+ return Math.random();
+ }
+
+ function f166() {
+ f167();
+ return Math.random();
+ }
+
+ function f167() {
+ f168();
+ return Math.random();
+ }
+
+ function f168() {
+ f169();
+ return Math.random();
+ }
+
+ function f169() {
+ f170();
+ return Math.random();
+ }
+
+ function f170() {
+ f171();
+ return Math.random();
+ }
+
+ function f171() {
+ f172();
+ return Math.random();
+ }
+
+ function f172() {
+ f173();
+ return Math.random();
+ }
+
+ function f173() {
+ f174();
+ return Math.random();
+ }
+
+ function f174() {
+ f175();
+ return Math.random();
+ }
+
+ function f175() {
+ f176();
+ return Math.random();
+ }
+
+ function f176() {
+ f177();
+ return Math.random();
+ }
+
+ function f177() {
+ f178();
+ return Math.random();
+ }
+
+ function f178() {
+ f179();
+ return Math.random();
+ }
+
+ function f179() {
+ f180();
+ return Math.random();
+ }
+
+ function f180() {
+ f181();
+ return Math.random();
+ }
+
+ function f181() {
+ f182();
+ return Math.random();
+ }
+
+ function f182() {
+ f183();
+ return Math.random();
+ }
+
+ function f183() {
+ f184();
+ return Math.random();
+ }
+
+ function f184() {
+ f185();
+ return Math.random();
+ }
+
+ function f185() {
+ f186();
+ return Math.random();
+ }
+
+ function f186() {
+ f187();
+ return Math.random();
+ }
+
+ function f187() {
+ f188();
+ return Math.random();
+ }
+
+ function f188() {
+ f189();
+ return Math.random();
+ }
+
+ function f189() {
+ f190();
+ return Math.random();
+ }
+
+ function f190() {
+ f191();
+ return Math.random();
+ }
+
+ function f191() {
+ f192();
+ return Math.random();
+ }
+
+ function f192() {
+ f193();
+ return Math.random();
+ }
+
+ function f193() {
+ f194();
+ return Math.random();
+ }
+
+ function f194() {
+ f195();
+ return Math.random();
+ }
+
+ function f195() {
+ f196();
+ return Math.random();
+ }
+
+ function f196() {
+ f197();
+ return Math.random();
+ }
+
+ function f197() {
+ f198();
+ return Math.random();
+ }
+
+ function f198() {
+ f199();
+ return Math.random();
+ }
+
+ function f199() {
+ return Math.random();
+ }
+})();
diff --git a/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app-build/static/js/main.js b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app-build/static/js/main.js
new file mode 100644
index 0000000000..83841a04cf
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app-build/static/js/main.js
@@ -0,0 +1,2 @@
+!function(n){function t(r){if(e[r])return e[r].exports;var o=e[r]={i:r,l:!1,exports:{}};return n[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var e={};t.m=n,t.c=e,t.d=function(n,e,r){t.o(n,e)||Object.defineProperty(n,e,{configurable:!1,enumerable:!0,get:r})},t.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(e,"a",e),e},t.o=function(n,t){return Object.prototype.hasOwnProperty.call(n,t)},t.p="./",t(t.s=5)}([function(n,t,e){"use strict";function r(n){if(null===n||void 0===n)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(n)}var o=Object.getOwnPropertySymbols,a=Object.prototype.hasOwnProperty,u=Object.prototype.propertyIsEnumerable;n.exports=function(){try{if(!Object.assign)return!1;var n=new String("abc");if(n[5]="de","5"===Object.getOwnPropertyNames(n)[0])return!1;for(var t={},e=0;e<10;e++)t["_"+String.fromCharCode(e)]=e;if("0123456789"!==Object.getOwnPropertyNames(t).map(function(n){return t[n]}).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach(function(n){r[n]=n}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(n){return!1}}()?Object.assign:function(n,t){for(var e,i,c=r(n),d=1;d<arguments.length;d++){e=Object(arguments[d]);for(var f in e)a.call(e,f)&&(c[f]=e[f]);if(o){i=o(e);for(var m=0;m<i.length;m++)u.call(e,i[m])&&(c[i[m]]=e[i[m]])}}return c}},function(n,t,e){"use strict";n.exports=e(13)},function(n,t,e){"use strict";function r(n){return function(){return n}}var o=function(){};o.thatReturns=r,o.thatReturnsFalse=r(!1),o.thatReturnsTrue=r(!0),o.thatReturnsNull=r(null),o.thatReturnsThis=function(){return this},o.thatReturnsArgument=function(n){return n},n.exports=o},function(n,t,e){"use strict";function r(){}function o(n){try{return n.then}catch(n){return v=n,N}}function a(n,t){try{return n(t)}catch(n){return v=n,N}}function u(n,t,e){try{n(t,e)}catch(n){return v=n,N}}function i(n){if("object"!==typeof this)throw new TypeError("Promises must be constructed via new");if("function"!==typeof n)throw new TypeError("Promise constructor's argument is not a function");this._75=0,this._83=0,this._18=null,this._38=null,n!==r&&p(n,this)}function c(n,t,e){return new n.constructor(function(o,a){var u=new i(r);u.then(o,a),d(n,new s(t,e,u))})}function d(n,t){for(;3===n._83;)n=n._18;if(i._47&&i._47(n),0===n._83)return 0===n._75?(n._75=1,void(n._38=t)):1===n._75?(n._75=2,void(n._38=[n._38,t])):void n._38.push(t);f(n,t)}function f(n,t){M(function(){var e=1===n._83?t.onFulfilled:t.onRejected;if(null===e)return void(1===n._83?m(t.promise,n._18):l(t.promise,n._18));var r=a(e,n._18);r===N?l(t.promise,v):m(t.promise,r)})}function m(n,t){if(t===n)return l(n,new TypeError("A promise cannot be resolved with itself."));if(t&&("object"===typeof t||"function"===typeof t)){var e=o(t);if(e===N)return l(n,v);if(e===n.then&&t instanceof i)return n._83=3,n._18=t,void h(n);if("function"===typeof e)return void p(e.bind(t),n)}n._83=1,n._18=t,h(n)}function l(n,t){n._83=2,n._18=t,i._71&&i._71(n,t),h(n)}function h(n){if(1===n._75&&(d(n,n._38),n._38=null),2===n._75){for(var t=0;t<n._38.length;t++)d(n,n._38[t]);n._38=null}}function s(n,t,e){this.onFulfilled="function"===typeof n?n:null,this.onRejected="function"===typeof t?t:null,this.promise=e}function p(n,t){var e=!1,r=u(n,function(n){e||(e=!0,m(t,n))},function(n){e||(e=!0,l(t,n))});e||r!==N||(e=!0,l(t,v))}var M=e(8),v=null,N={};n.exports=i,i._47=null,i._71=null,i._44=r,i.prototype.then=function(n,t){if(this.constructor!==i)return c(this,n,t);var e=new i(r);return d(this,new s(n,t,e)),e}},function(n,t,e){"use strict";var r={};n.exports=r},function(n,t,e){e(6),n.exports=e(12)},function(n,t,e){"use strict";"undefined"===typeof Promise&&(e(7).enable(),window.Promise=e(10)),e(11),Object.assign=e(0)},function(n,t,e){"use strict";function r(){d=!1,i._47=null,i._71=null}function o(n){function t(t){(n.allRejections||u(m[t].error,n.whitelist||c))&&(m[t].displayId=f++,n.onUnhandled?(m[t].logged=!0,n.onUnhandled(m[t].displayId,m[t].error)):(m[t].logged=!0,a(m[t].displayId,m[t].error)))}function e(t){m[t].logged&&(n.onHandled?n.onHandled(m[t].displayId,m[t].error):m[t].onUnhandled||(console.warn("Promise Rejection Handled (id: "+m[t].displayId+"):"),console.warn(' This means you can ignore any previous messages of the form "Possible Unhandled Promise Rejection" with id '+m[t].displayId+".")))}n=n||{},d&&r(),d=!0;var o=0,f=0,m={};i._47=function(n){2===n._83&&m[n._56]&&(m[n._56].logged?e(n._56):clearTimeout(m[n._56].timeout),delete m[n._56])},i._71=function(n,e){0===n._75&&(n._56=o++,m[n._56]={displayId:null,error:e,timeout:setTimeout(t.bind(null,n._56),u(e,c)?100:2e3),logged:!1})}}function a(n,t){console.warn("Possible Unhandled Promise Rejection (id: "+n+"):"),((t&&(t.stack||t))+"").split("\n").forEach(function(n){console.warn(" "+n)})}function u(n,t){return t.some(function(t){return n instanceof t})}var i=e(3),c=[ReferenceError,TypeError,RangeError],d=!1;t.disable=r,t.enable=o},function(n,t,e){"use strict";(function(t){function e(n){u.length||(a(),i=!0),u[u.length]=n}function r(){for(;c<u.length;){var n=c;if(c+=1,u[n].call(),c>d){for(var t=0,e=u.length-c;t<e;t++)u[t]=u[t+c];u.length-=c,c=0}}u.length=0,c=0,i=!1}function o(n){return function(){function t(){clearTimeout(e),clearInterval(r),n()}var e=setTimeout(t,0),r=setInterval(t,50)}}n.exports=e;var a,u=[],i=!1,c=0,d=1024,f="undefined"!==typeof t?t:self,m=f.MutationObserver||f.WebKitMutationObserver;a="function"===typeof m?function(n){var t=1,e=new m(n),r=document.createTextNode("");return e.observe(r,{characterData:!0}),function(){t=-t,r.data=t}}(r):o(r),e.requestFlush=a,e.makeRequestCallFromTimer=o}).call(t,e(9))},function(n,t){var e;e=function(){return this}();try{e=e||Function("return this")()||(0,eval)("this")}catch(n){"object"===typeof window&&(e=window)}n.exports=e},function(n,t,e){"use strict";function r(n){var t=new o(o._44);return t._83=1,t._18=n,t}var o=e(3);n.exports=o;var a=r(!0),u=r(!1),i=r(null),c=r(void 0),d=r(0),f=r("");o.resolve=function(n){if(n instanceof o)return n;if(null===n)return i;if(void 0===n)return c;if(!0===n)return a;if(!1===n)return u;if(0===n)return d;if(""===n)return f;if("object"===typeof n||"function"===typeof n)try{var t=n.then;if("function"===typeof t)return new o(t.bind(n))}catch(n){return new o(function(t,e){e(n)})}return r(n)},o.all=function(n){var t=Array.prototype.slice.call(n);return new o(function(n,e){function r(u,i){if(i&&("object"===typeof i||"function"===typeof i)){if(i instanceof o&&i.then===o.prototype.then){for(;3===i._83;)i=i._18;return 1===i._83?r(u,i._18):(2===i._83&&e(i._18),void i.then(function(n){r(u,n)},e))}var c=i.then;if("function"===typeof c){return void new o(c.bind(i)).then(function(n){r(u,n)},e)}}t[u]=i,0===--a&&n(t)}if(0===t.length)return n([]);for(var a=t.length,u=0;u<t.length;u++)r(u,t[u])})},o.reject=function(n){return new o(function(t,e){e(n)})},o.race=function(n){return new o(function(t,e){n.forEach(function(n){o.resolve(n).then(t,e)})})},o.prototype.catch=function(n){return this.then(null,n)}},function(n,t){!function(n){"use strict";function t(n){if("string"!==typeof n&&(n=String(n)),/[^a-z0-9\-#$%&'*+.\^_`|~]/i.test(n))throw new TypeError("Invalid character in header field name");return n.toLowerCase()}function e(n){return"string"!==typeof n&&(n=String(n)),n}function r(n){var t={next:function(){var t=n.shift();return{done:void 0===t,value:t}}};return v.iterable&&(t[Symbol.iterator]=function(){return t}),t}function o(n){this.map={},n instanceof o?n.forEach(function(n,t){this.append(t,n)},this):Array.isArray(n)?n.forEach(function(n){this.append(n[0],n[1])},this):n&&Object.getOwnPropertyNames(n).forEach(function(t){this.append(t,n[t])},this)}function a(n){if(n.bodyUsed)return Promise.reject(new TypeError("Already read"));n.bodyUsed=!0}function u(n){return new Promise(function(t,e){n.onload=function(){t(n.result)},n.onerror=function(){e(n.error)}})}function i(n){var t=new FileReader,e=u(t);return t.readAsArrayBuffer(n),e}function c(n){var t=new FileReader,e=u(t);return t.readAsText(n),e}function d(n){for(var t=new Uint8Array(n),e=new Array(t.length),r=0;r<t.length;r++)e[r]=String.fromCharCode(t[r]);return e.join("")}function f(n){if(n.slice)return n.slice(0);var t=new Uint8Array(n.byteLength);return t.set(new Uint8Array(n)),t.buffer}function m(){return this.bodyUsed=!1,this._initBody=function(n){if(this._bodyInit=n,n)if("string"===typeof n)this._bodyText=n;else if(v.blob&&Blob.prototype.isPrototypeOf(n))this._bodyBlob=n;else if(v.formData&&FormData.prototype.isPrototypeOf(n))this._bodyFormData=n;else if(v.searchParams&&URLSearchParams.prototype.isPrototypeOf(n))this._bodyText=n.toString();else if(v.arrayBuffer&&v.blob&&C(n))this._bodyArrayBuffer=f(n.buffer),this._bodyInit=new Blob([this._bodyArrayBuffer]);else{if(!v.arrayBuffer||!ArrayBuffer.prototype.isPrototypeOf(n)&&!y(n))throw new Error("unsupported BodyInit type");this._bodyArrayBuffer=f(n)}else this._bodyText="";this.headers.get("content-type")||("string"===typeof n?this.headers.set("content-type","text/plain;charset=UTF-8"):this._bodyBlob&&this._bodyBlob.type?this.headers.set("content-type",this._bodyBlob.type):v.searchParams&&URLSearchParams.prototype.isPrototypeOf(n)&&this.headers.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"))},v.blob&&(this.blob=function(){var n=a(this);if(n)return n;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(new Blob([this._bodyArrayBuffer]));if(this._bodyFormData)throw new Error("could not read FormData body as blob");return Promise.resolve(new Blob([this._bodyText]))},this.arrayBuffer=function(){return this._bodyArrayBuffer?a(this)||Promise.resolve(this._bodyArrayBuffer):this.blob().then(i)}),this.text=function(){var n=a(this);if(n)return n;if(this._bodyBlob)return c(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(d(this._bodyArrayBuffer));if(this._bodyFormData)throw new Error("could not read FormData body as text");return Promise.resolve(this._bodyText)},v.formData&&(this.formData=function(){return this.text().then(s)}),this.json=function(){return this.text().then(JSON.parse)},this}function l(n){var t=n.toUpperCase();return x.indexOf(t)>-1?t:n}function h(n,t){t=t||{};var e=t.body;if(n instanceof h){if(n.bodyUsed)throw new TypeError("Already read");this.url=n.url,this.credentials=n.credentials,t.headers||(this.headers=new o(n.headers)),this.method=n.method,this.mode=n.mode,e||null==n._bodyInit||(e=n._bodyInit,n.bodyUsed=!0)}else this.url=String(n);if(this.credentials=t.credentials||this.credentials||"omit",!t.headers&&this.headers||(this.headers=new o(t.headers)),this.method=l(t.method||this.method||"GET"),this.mode=t.mode||this.mode||null,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&e)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(e)}function s(n){var t=new FormData;return n.trim().split("&").forEach(function(n){if(n){var e=n.split("="),r=e.shift().replace(/\+/g," "),o=e.join("=").replace(/\+/g," ");t.append(decodeURIComponent(r),decodeURIComponent(o))}}),t}function p(n){var t=new o;return n.split(/\r?\n/).forEach(function(n){var e=n.split(":"),r=e.shift().trim();if(r){var o=e.join(":").trim();t.append(r,o)}}),t}function M(n,t){t||(t={}),this.type="default",this.status="status"in t?t.status:200,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in t?t.statusText:"OK",this.headers=new o(t.headers),this.url=t.url||"",this._initBody(n)}if(!n.fetch){var v={searchParams:"URLSearchParams"in n,iterable:"Symbol"in n&&"iterator"in Symbol,blob:"FileReader"in n&&"Blob"in n&&function(){try{return new Blob,!0}catch(n){return!1}}(),formData:"FormData"in n,arrayBuffer:"ArrayBuffer"in n};if(v.arrayBuffer)var N=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],C=function(n){return n&&DataView.prototype.isPrototypeOf(n)},y=ArrayBuffer.isView||function(n){return n&&N.indexOf(Object.prototype.toString.call(n))>-1};o.prototype.append=function(n,r){n=t(n),r=e(r);var o=this.map[n];this.map[n]=o?o+","+r:r},o.prototype.delete=function(n){delete this.map[t(n)]},o.prototype.get=function(n){return n=t(n),this.has(n)?this.map[n]:null},o.prototype.has=function(n){return this.map.hasOwnProperty(t(n))},o.prototype.set=function(n,r){this.map[t(n)]=e(r)},o.prototype.forEach=function(n,t){for(var e in this.map)this.map.hasOwnProperty(e)&&n.call(t,this.map[e],e,this)},o.prototype.keys=function(){var n=[];return this.forEach(function(t,e){n.push(e)}),r(n)},o.prototype.values=function(){var n=[];return this.forEach(function(t){n.push(t)}),r(n)},o.prototype.entries=function(){var n=[];return this.forEach(function(t,e){n.push([e,t])}),r(n)},v.iterable&&(o.prototype[Symbol.iterator]=o.prototype.entries);var x=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];h.prototype.clone=function(){return new h(this,{body:this._bodyInit})},m.call(h.prototype),m.call(M.prototype),M.prototype.clone=function(){return new M(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new o(this.headers),url:this.url})},M.error=function(){var n=new M(null,{status:0,statusText:""});return n.type="error",n};var g=[301,302,303,307,308];M.redirect=function(n,t){if(-1===g.indexOf(t))throw new RangeError("Invalid status code");return new M(null,{status:t,headers:{location:n}})},n.Headers=o,n.Request=h,n.Response=M,n.fetch=function(n,t){return new Promise(function(e,r){var o=new h(n,t),a=new XMLHttpRequest;a.onload=function(){var n={status:a.status,statusText:a.statusText,headers:p(a.getAllResponseHeaders()||"")};n.url="responseURL"in a?a.responseURL:n.headers.get("X-Request-URL");var t="response"in a?a.response:a.responseText;e(new M(t,n))},a.onerror=function(){r(new TypeError("Network request failed"))},a.ontimeout=function(){r(new TypeError("Network request failed"))},a.open(o.method,o.url,!0),"include"===o.credentials&&(a.withCredentials=!0),"responseType"in a&&v.blob&&(a.responseType="blob"),o.headers.forEach(function(n,t){a.setRequestHeader(t,n)}),a.send("undefined"===typeof o._bodyInit?null:o._bodyInit)})},n.fetch.polyfill=!0}}("undefined"!==typeof self?self:this)},function(n,t,e){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=e(1),o=e.n(r),a=e(14),u=e.n(a),i=e(24);u.a.render(o.a.createElement(i.a,null),document.getElementById("root"))},function(n,t,e){"use strict";function r(n){for(var t=arguments.length-1,e="Minified React error #"+n+"; visit http://facebook.github.io/react/docs/error-decoder.html?invariant="+n,r=0;r<t;r++)e+="&args[]="+encodeURIComponent(arguments[r+1]);throw t=Error(e+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."),t.name="Invariant Violation",t.framesToPop=1,t}function o(n,t,e){this.props=n,this.context=t,this.refs=C,this.updater=e||w}function a(n,t,e){this.props=n,this.context=t,this.refs=C,this.updater=e||w}function u(){}function i(n,t,e){this.props=n,this.context=t,this.refs=C,this.updater=e||w}function c(n,t,e){var r,o={},a=null,u=null;if(null!=t)for(r in void 0!==t.ref&&(u=t.ref),void 0!==t.key&&(a=""+t.key),t)_.call(t,r)&&!S.hasOwnProperty(r)&&(o[r]=t[r]);var i=arguments.length-2;if(1===i)o.children=e;else if(1<i){for(var c=Array(i),d=0;d<i;d++)c[d]=arguments[d+2];o.children=c}if(n&&n.defaultProps)for(r in i=n.defaultProps)void 0===o[r]&&(o[r]=i[r]);return{$$typeof:g,type:n,key:a,ref:u,props:o,_owner:T.current}}function d(n){return"object"===typeof n&&null!==n&&n.$$typeof===g}function f(n){var t={"=":"=0",":":"=2"};return"$"+(""+n).replace(/[=:]/g,function(n){return t[n]})}function m(n,t,e,r){if(O.length){var o=O.pop();return o.result=n,o.keyPrefix=t,o.func=e,o.context=r,o.count=0,o}return{result:n,keyPrefix:t,func:e,context:r,count:0}}function l(n){n.result=null,n.keyPrefix=null,n.func=null,n.context=null,n.count=0,10>O.length&&O.push(n)}function h(n,t,e,o){var a=typeof n;"undefined"!==a&&"boolean"!==a||(n=null);var u=!1;if(null===n)u=!0;else switch(a){case"string":case"number":u=!0;break;case"object":switch(n.$$typeof){case g:case I:case b:case R:u=!0}}if(u)return e(o,n,""===t?"."+s(n,0):t),1;if(u=0,t=""===t?".":t+":",Array.isArray(n))for(var i=0;i<n.length;i++){a=n[i];var c=t+s(a,i);u+=h(a,c,e,o)}else if(null===n||"undefined"===typeof n?c=null:(c=Q&&n[Q]||n["@@iterator"],c="function"===typeof c?c:null),"function"===typeof c)for(n=c.call(n),i=0;!(a=n.next()).done;)a=a.value,c=t+s(a,i++),u+=h(a,c,e,o);else"object"===a&&(e=""+n,r("31","[object Object]"===e?"object with keys {"+Object.keys(n).join(", ")+"}":e,""));return u}function s(n,t){return"object"===typeof n&&null!==n&&null!=n.key?f(n.key):t.toString(36)}function p(n,t){n.func.call(n.context,t,n.count++)}function M(n,t,e){var r=n.result,o=n.keyPrefix;n=n.func.call(n.context,t,n.count++),Array.isArray(n)?v(n,r,e,y.thatReturnsArgument):null!=n&&(d(n)&&(t=o+(!n.key||t&&t.key===n.key?"":(""+n.key).replace(P,"$&/")+"/")+e,n={$$typeof:g,type:n.type,key:t,ref:n.ref,props:n.props,_owner:n._owner}),r.push(n))}function v(n,t,e,r,o){var a="";null!=e&&(a=(""+e).replace(P,"$&/")+"/"),t=m(t,a,r,o),null==n||h(n,"",M,t),l(t)}var N=e(0),C=e(4),y=e(2),x="function"===typeof Symbol&&Symbol.for,g=x?Symbol.for("react.element"):60103,I=x?Symbol.for("react.call"):60104,b=x?Symbol.for("react.return"):60105,R=x?Symbol.for("react.portal"):60106,U=x?Symbol.for("react.fragment"):60107,Q="function"===typeof Symbol&&Symbol.iterator,w={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}};o.prototype.isReactComponent={},o.prototype.setState=function(n,t){"object"!==typeof n&&"function"!==typeof n&&null!=n&&r("85"),this.updater.enqueueSetState(this,n,t,"setState")},o.prototype.forceUpdate=function(n){this.updater.enqueueForceUpdate(this,n,"forceUpdate")},u.prototype=o.prototype;var k=a.prototype=new u;k.constructor=a,N(k,o.prototype),k.isPureReactComponent=!0;var E=i.prototype=new u;E.constructor=i,N(E,o.prototype),E.unstable_isAsyncReactComponent=!0,E.render=function(){return this.props.children};var T={current:null},_=Object.prototype.hasOwnProperty,S={key:!0,ref:!0,__self:!0,__source:!0},P=/\/+/g,O=[],A={Children:{map:function(n,t,e){if(null==n)return n;var r=[];return v(n,r,null,t,e),r},forEach:function(n,t,e){if(null==n)return n;t=m(null,null,t,e),null==n||h(n,"",p,t),l(t)},count:function(n){return null==n?0:h(n,"",y.thatReturnsNull,null)},toArray:function(n){var t=[];return v(n,t,null,y.thatReturnsArgument),t},only:function(n){return d(n)||r("143"),n}},Component:o,PureComponent:a,unstable_AsyncComponent:i,Fragment:U,createElement:c,cloneElement:function(n,t,e){var r=N({},n.props),o=n.key,a=n.ref,u=n._owner;if(null!=t){if(void 0!==t.ref&&(a=t.ref,u=T.current),void 0!==t.key&&(o=""+t.key),n.type&&n.type.defaultProps)var i=n.type.defaultProps;for(c in t)_.call(t,c)&&!S.hasOwnProperty(c)&&(r[c]=void 0===t[c]&&void 0!==i?i[c]:t[c])}var c=arguments.length-2;if(1===c)r.children=e;else if(1<c){i=Array(c);for(var d=0;d<c;d++)i[d]=arguments[d+2];r.children=i}return{$$typeof:g,type:n.type,key:o,ref:a,props:r,_owner:u}},createFactory:function(n){var t=c.bind(null,n);return t.type=n,t},isValidElement:d,version:"16.2.0",__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:{ReactCurrentOwner:T,assign:N}},D=Object.freeze({default:A}),F=D&&A||D;n.exports=F.default?F.default:F},function(n,t,e){"use strict";function r(){if("undefined"!==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"===typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(r)}catch(n){console.error(n)}}r(),n.exports=e(15)},function(n,t,e){"use strict";function r(n){for(var t=arguments.length-1,e="Minified React error #"+n+"; visit http://facebook.github.io/react/docs/error-decoder.html?invariant="+n,r=0;r<t;r++)e+="&args[]="+encodeURIComponent(arguments[r+1]);throw t=Error(e+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."),t.name="Invariant Violation",t.framesToPop=1,t}function o(n,t){return(n&t)===t}function a(n,t){if(ke.hasOwnProperty(n)||2<n.length&&("o"===n[0]||"O"===n[0])&&("n"===n[1]||"N"===n[1]))return!1;if(null===t)return!0;switch(typeof t){case"boolean":return ke.hasOwnProperty(n)?n=!0:(t=u(n))?n=t.hasBooleanValue||t.hasStringBooleanValue||t.hasOverloadedBooleanValue:(n=n.toLowerCase().slice(0,5),n="data-"===n||"aria-"===n),n;case"undefined":case"number":case"string":case"object":return!0;default:return!1}}function u(n){return Te.hasOwnProperty(n)?Te[n]:null}function i(n){return n[1].toUpperCase()}function c(n,t,e,r,o,a,u,i,c){Ve._hasCaughtError=!1,Ve._caughtError=null;var d=Array.prototype.slice.call(arguments,3);try{t.apply(e,d)}catch(n){Ve._caughtError=n,Ve._hasCaughtError=!0}}function d(){if(Ve._hasRethrowError){var n=Ve._rethrowError;throw Ve._rethrowError=null,Ve._hasRethrowError=!1,n}}function f(){if(Ke)for(var n in We){var t=We[n],e=Ke.indexOf(n);if(-1<e||r("96",n),!qe[e]){t.extractEvents||r("97",n),qe[e]=t,e=t.eventTypes;for(var o in e){var a=void 0,u=e[o],i=t,c=o;$e.hasOwnProperty(c)&&r("99",c),$e[c]=u;var d=u.phasedRegistrationNames;if(d){for(a in d)d.hasOwnProperty(a)&&m(d[a],i,c);a=!0}else u.registrationName?(m(u.registrationName,i,c),a=!0):a=!1;a||r("98",o,n)}}}}function m(n,t,e){Ge[n]&&r("100",n),Ge[n]=t,Ye[n]=t.eventTypes[e].dependencies}function l(n){Ke&&r("101"),Ke=Array.prototype.slice.call(n),f()}function h(n){var t,e=!1;for(t in n)if(n.hasOwnProperty(t)){var o=n[t];We.hasOwnProperty(t)&&We[t]===o||(We[t]&&r("102",t),We[t]=o,e=!0)}e&&f()}function s(n,t,e,r){t=n.type||"unknown-event",n.currentTarget=nr(r),Ve.invokeGuardedCallbackAndCatchFirstError(t,e,void 0,n),n.currentTarget=null}function p(n,t){return null==t&&r("30"),null==n?t:Array.isArray(n)?Array.isArray(t)?(n.push.apply(n,t),n):(n.push(t),n):Array.isArray(t)?[n].concat(t):[n,t]}function M(n,t,e){Array.isArray(n)?n.forEach(t,e):n&&t.call(e,n)}function v(n,t){if(n){var e=n._dispatchListeners,r=n._dispatchInstances;if(Array.isArray(e))for(var o=0;o<e.length&&!n.isPropagationStopped();o++)s(n,t,e[o],r[o]);else e&&s(n,t,e,r);n._dispatchListeners=null,n._dispatchInstances=null,n.isPersistent()||n.constructor.release(n)}}function N(n){return v(n,!0)}function C(n){return v(n,!1)}function y(n,t){var e=n.stateNode;if(!e)return null;var o=Ze(e);if(!o)return null;e=o[t];n:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":(o=!o.disabled)||(n=n.type,o=!("button"===n||"input"===n||"select"===n||"textarea"===n)),n=!o;break n;default:n=!1}return n?null:(e&&"function"!==typeof e&&r("231",t,typeof e),e)}function x(n,t,e,r){for(var o,a=0;a<qe.length;a++){var u=qe[a];u&&(u=u.extractEvents(n,t,e,r))&&(o=p(o,u))}return o}function g(n){n&&(tr=p(tr,n))}function I(n){var t=tr;tr=null,t&&(n?M(t,N):M(t,C),tr&&r("95"),Ve.rethrowCaughtError())}function b(n){if(n[ar])return n[ar];for(var t=[];!n[ar];){if(t.push(n),!n.parentNode)return null;n=n.parentNode}var e=void 0,r=n[ar];if(5===r.tag||6===r.tag)return r;for(;n&&(r=n[ar]);n=t.pop())e=r;return e}function R(n){if(5===n.tag||6===n.tag)return n.stateNode;r("33")}function U(n){return n[ur]||null}function Q(n){do{n=n.return}while(n&&5!==n.tag);return n||null}function w(n,t,e){for(var r=[];n;)r.push(n),n=Q(n);for(n=r.length;0<n--;)t(r[n],"captured",e);for(n=0;n<r.length;n++)t(r[n],"bubbled",e)}function k(n,t,e){(t=y(n,e.dispatchConfig.phasedRegistrationNames[t]))&&(e._dispatchListeners=p(e._dispatchListeners,t),e._dispatchInstances=p(e._dispatchInstances,n))}function E(n){n&&n.dispatchConfig.phasedRegistrationNames&&w(n._targetInst,k,n)}function T(n){if(n&&n.dispatchConfig.phasedRegistrationNames){var t=n._targetInst;t=t?Q(t):null,w(t,k,n)}}function _(n,t,e){n&&e&&e.dispatchConfig.registrationName&&(t=y(n,e.dispatchConfig.registrationName))&&(e._dispatchListeners=p(e._dispatchListeners,t),e._dispatchInstances=p(e._dispatchInstances,n))}function S(n){n&&n.dispatchConfig.registrationName&&_(n._targetInst,null,n)}function P(n){M(n,E)}function O(n,t,e,r){if(e&&r)n:{for(var o=e,a=r,u=0,i=o;i;i=Q(i))u++;i=0;for(var c=a;c;c=Q(c))i++;for(;0<u-i;)o=Q(o),u--;for(;0<i-u;)a=Q(a),i--;for(;u--;){if(o===a||o===a.alternate)break n;o=Q(o),a=Q(a)}o=null}else o=null;for(a=o,o=[];e&&e!==a&&(null===(u=e.alternate)||u!==a);)o.push(e),e=Q(e);for(e=[];r&&r!==a&&(null===(u=r.alternate)||u!==a);)e.push(r),r=Q(r);for(r=0;r<o.length;r++)_(o[r],"bubbled",n);for(n=e.length;0<n--;)_(e[n],"captured",t)}function A(){return!dr&&ye.canUseDOM&&(dr="textContent"in document.documentElement?"textContent":"innerText"),dr}function D(){if(fr._fallbackText)return fr._fallbackText;var n,t,e=fr._startText,r=e.length,o=F(),a=o.length;for(n=0;n<r&&e[n]===o[n];n++);var u=r-n;for(t=1;t<=u&&e[r-t]===o[a-t];t++);return fr._fallbackText=o.slice(n,1<t?1-t:void 0),fr._fallbackText}function F(){return"value"in fr._root?fr._root.value:fr._root[A()]}function L(n,t,e,r){this.dispatchConfig=n,this._targetInst=t,this.nativeEvent=e,n=this.constructor.Interface;for(var o in n)n.hasOwnProperty(o)&&((t=n[o])?this[o]=t(e):"target"===o?this.target=r:this[o]=e[o]);return this.isDefaultPrevented=(null!=e.defaultPrevented?e.defaultPrevented:!1===e.returnValue)?ge.thatReturnsTrue:ge.thatReturnsFalse,this.isPropagationStopped=ge.thatReturnsFalse,this}function j(n,t,e,r){if(this.eventPool.length){var o=this.eventPool.pop();return this.call(o,n,t,e,r),o}return new this(n,t,e,r)}function H(n){n instanceof this||r("223"),n.destructor(),10>this.eventPool.length&&this.eventPool.push(n)}function B(n){n.eventPool=[],n.getPooled=j,n.release=H}function z(n,t,e,r){return L.call(this,n,t,e,r)}function V(n,t,e,r){return L.call(this,n,t,e,r)}function K(n,t){switch(n){case"topKeyUp":return-1!==hr.indexOf(t.keyCode);case"topKeyDown":return 229!==t.keyCode;case"topKeyPress":case"topMouseDown":case"topBlur":return!0;default:return!1}}function W(n){return n=n.detail,"object"===typeof n&&"data"in n?n.data:null}function q(n,t){switch(n){case"topCompositionEnd":return W(t);case"topKeyPress":return 32!==t.which?null:(Ir=!0,xr);case"topTextInput":return n=t.data,n===xr&&Ir?null:n;default:return null}}function $(n,t){if(br)return"topCompositionEnd"===n||!sr&&K(n,t)?(n=D(),fr._root=null,fr._startText=null,fr._fallbackText=null,br=!1,n):null;switch(n){case"topPaste":return null;case"topKeyPress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"topCompositionEnd":return yr?null:t.data;default:return null}}function G(n){if(n=Je(n)){Ur&&"function"===typeof Ur.restoreControlledState||r("194");var t=Ze(n.stateNode);Ur.restoreControlledState(n.stateNode,n.type,t)}}function Y(n){Qr?wr?wr.push(n):wr=[n]:Qr=n}function X(){if(Qr){var n=Qr,t=wr;if(wr=Qr=null,G(n),t)for(n=0;n<t.length;n++)G(t[n])}}function Z(n,t){return n(t)}function J(n,t){if(Tr)return Z(n,t);Tr=!0;try{return Z(n,t)}finally{Tr=!1,X()}}function nn(n){var t=n&&n.nodeName&&n.nodeName.toLowerCase();return"input"===t?!!_r[n.type]:"textarea"===t}function tn(n){return n=n.target||n.srcElement||window,n.correspondingUseElement&&(n=n.correspondingUseElement),3===n.nodeType?n.parentNode:n}function en(n,t){if(!ye.canUseDOM||t&&!("addEventListener"in document))return!1;t="on"+n;var e=t in document;return e||(e=document.createElement("div"),e.setAttribute(t,"return;"),e="function"===typeof e[t]),!e&&Nr&&"wheel"===n&&(e=document.implementation.hasFeature("Events.wheel","3.0")),e}function rn(n){var t=n.type;return(n=n.nodeName)&&"input"===n.toLowerCase()&&("checkbox"===t||"radio"===t)}function on(n){var t=rn(n)?"checked":"value",e=Object.getOwnPropertyDescriptor(n.constructor.prototype,t),r=""+n[t];if(!n.hasOwnProperty(t)&&"function"===typeof e.get&&"function"===typeof e.set)return Object.defineProperty(n,t,{enumerable:e.enumerable,configurable:!0,get:function(){return e.get.call(this)},set:function(n){r=""+n,e.set.call(this,n)}}),{getValue:function(){return r},setValue:function(n){r=""+n},stopTracking:function(){n._valueTracker=null,delete n[t]}}}function an(n){n._valueTracker||(n._valueTracker=on(n))}function un(n){if(!n)return!1;var t=n._valueTracker;if(!t)return!0;var e=t.getValue(),r="";return n&&(r=rn(n)?n.checked?"true":"false":n.value),(n=r)!==e&&(t.setValue(n),!0)}function cn(n,t,e){return n=L.getPooled(Sr.change,n,t,e),n.type="change",Y(e),P(n),n}function dn(n){g(n),I(!1)}function fn(n){if(un(R(n)))return n}function mn(n,t){if("topChange"===n)return t}function ln(){Pr&&(Pr.detachEvent("onpropertychange",hn),Or=Pr=null)}function hn(n){"value"===n.propertyName&&fn(Or)&&(n=cn(Or,n,tn(n)),J(dn,n))}function sn(n,t,e){"topFocus"===n?(ln(),Pr=t,Or=e,Pr.attachEvent("onpropertychange",hn)):"topBlur"===n&&ln()}function pn(n){if("topSelectionChange"===n||"topKeyUp"===n||"topKeyDown"===n)return fn(Or)}function Mn(n,t){if("topClick"===n)return fn(t)}function vn(n,t){if("topInput"===n||"topChange"===n)return fn(t)}function Nn(n,t,e,r){return L.call(this,n,t,e,r)}function Cn(n){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(n):!!(n=Fr[n])&&!!t[n]}function yn(){return Cn}function xn(n,t,e,r){return L.call(this,n,t,e,r)}function gn(n){return n=n.type,"string"===typeof n?n:"function"===typeof n?n.displayName||n.name:null}function In(n){var t=n;if(n.alternate)for(;t.return;)t=t.return;else{if(0!==(2&t.effectTag))return 1;for(;t.return;)if(t=t.return,0!==(2&t.effectTag))return 1}return 3===t.tag?2:3}function bn(n){return!!(n=n._reactInternalFiber)&&2===In(n)}function Rn(n){2!==In(n)&&r("188")}function Un(n){var t=n.alternate;if(!t)return t=In(n),3===t&&r("188"),1===t?null:n;for(var e=n,o=t;;){var a=e.return,u=a?a.alternate:null;if(!a||!u)break;if(a.child===u.child){for(var i=a.child;i;){if(i===e)return Rn(a),n;if(i===o)return Rn(a),t;i=i.sibling}r("188")}if(e.return!==o.return)e=a,o=u;else{i=!1;for(var c=a.child;c;){if(c===e){i=!0,e=a,o=u;break}if(c===o){i=!0,o=a,e=u;break}c=c.sibling}if(!i){for(c=u.child;c;){if(c===e){i=!0,e=u,o=a;break}if(c===o){i=!0,o=u,e=a;break}c=c.sibling}i||r("189")}}e.alternate!==o&&r("190")}return 3!==e.tag&&r("188"),e.stateNode.current===e?n:t}function Qn(n){if(!(n=Un(n)))return null;for(var t=n;;){if(5===t.tag||6===t.tag)return t;if(t.child)t.child.return=t,t=t.child;else{if(t===n)break;for(;!t.sibling;){if(!t.return||t.return===n)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}}return null}function wn(n){if(!(n=Un(n)))return null;for(var t=n;;){if(5===t.tag||6===t.tag)return t;if(t.child&&4!==t.tag)t.child.return=t,t=t.child;else{if(t===n)break;for(;!t.sibling;){if(!t.return||t.return===n)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}}return null}function kn(n){var t=n.targetInst;do{if(!t){n.ancestors.push(t);break}var e;for(e=t;e.return;)e=e.return;if(!(e=3!==e.tag?null:e.stateNode.containerInfo))break;n.ancestors.push(t),t=b(e)}while(t);for(e=0;e<n.ancestors.length;e++)t=n.ancestors[e],Vr(n.topLevelType,t,n.nativeEvent,tn(n.nativeEvent))}function En(n){zr=!!n}function Tn(n,t,e){return e?Ie.listen(e,t,Sn.bind(null,n)):null}function _n(n,t,e){return e?Ie.capture(e,t,Sn.bind(null,n)):null}function Sn(n,t){if(zr){var e=tn(t);if(e=b(e),null===e||"number"!==typeof e.tag||2===In(e)||(e=null),Br.length){var r=Br.pop();r.topLevelType=n,r.nativeEvent=t,r.targetInst=e,n=r}else n={topLevelType:n,nativeEvent:t,targetInst:e,ancestors:[]};try{J(kn,n)}finally{n.topLevelType=null,n.nativeEvent=null,n.targetInst=null,n.ancestors.length=0,10>Br.length&&Br.push(n)}}}function Pn(n,t){var e={};return e[n.toLowerCase()]=t.toLowerCase(),e["Webkit"+n]="webkit"+t,e["Moz"+n]="moz"+t,e["ms"+n]="MS"+t,e["O"+n]="o"+t.toLowerCase(),e}function On(n){if(qr[n])return qr[n];if(!Wr[n])return n;var t,e=Wr[n];for(t in e)if(e.hasOwnProperty(t)&&t in $r)return qr[n]=e[t];return""}function An(n){return Object.prototype.hasOwnProperty.call(n,Zr)||(n[Zr]=Xr++,Yr[n[Zr]]={}),Yr[n[Zr]]}function Dn(n){for(;n&&n.firstChild;)n=n.firstChild;return n}function Fn(n,t){var e=Dn(n);n=0;for(var r;e;){if(3===e.nodeType){if(r=n+e.textContent.length,n<=t&&r>=t)return{node:e,offset:t-n};n=r}n:{for(;e;){if(e.nextSibling){e=e.nextSibling;break n}e=e.parentNode}e=void 0}e=Dn(e)}}function Ln(n){var t=n&&n.nodeName&&n.nodeName.toLowerCase();return t&&("input"===t&&"text"===n.type||"textarea"===t||"true"===n.contentEditable)}function jn(n,t){if(oo||null==to||to!==be())return null;var e=to;return"selectionStart"in e&&Ln(e)?e={start:e.selectionStart,end:e.selectionEnd}:window.getSelection?(e=window.getSelection(),e={anchorNode:e.anchorNode,anchorOffset:e.anchorOffset,focusNode:e.focusNode,focusOffset:e.focusOffset}):e=void 0,ro&&Re(ro,e)?null:(ro=e,n=L.getPooled(no.select,eo,n,t),n.type="select",n.target=to,P(n),n)}function Hn(n,t,e,r){return L.call(this,n,t,e,r)}function Bn(n,t,e,r){return L.call(this,n,t,e,r)}function zn(n,t,e,r){return L.call(this,n,t,e,r)}function Vn(n){var t=n.keyCode;return"charCode"in n?0===(n=n.charCode)&&13===t&&(n=13):n=t,32<=n||13===n?n:0}function Kn(n,t,e,r){return L.call(this,n,t,e,r)}function Wn(n,t,e,r){return L.call(this,n,t,e,r)}function qn(n,t,e,r){return L.call(this,n,t,e,r)}function $n(n,t,e,r){return L.call(this,n,t,e,r)}function Gn(n,t,e,r){return L.call(this,n,t,e,r)}function Yn(n){0>ho||(n.current=lo[ho],lo[ho]=null,ho--)}function Xn(n,t){ho++,lo[ho]=n.current,n.current=t}function Zn(n){return nt(n)?Mo:so.current}function Jn(n,t){var e=n.type.contextTypes;if(!e)return we;var r=n.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o,a={};for(o in e)a[o]=t[o];return r&&(n=n.stateNode,n.__reactInternalMemoizedUnmaskedChildContext=t,n.__reactInternalMemoizedMaskedChildContext=a),a}function nt(n){return 2===n.tag&&null!=n.type.childContextTypes}function tt(n){nt(n)&&(Yn(po,n),Yn(so,n))}function et(n,t,e){null!=so.cursor&&r("168"),Xn(so,t,n),Xn(po,e,n)}function rt(n,t){var e=n.stateNode,o=n.type.childContextTypes;if("function"!==typeof e.getChildContext)return t;e=e.getChildContext();for(var a in e)a in o||r("108",gn(n)||"Unknown",a);return xe({},t,e)}function ot(n){if(!nt(n))return!1;var t=n.stateNode;return t=t&&t.__reactInternalMemoizedMergedChildContext||we,Mo=so.current,Xn(so,t,n),Xn(po,po.current,n),!0}function at(n,t){var e=n.stateNode;if(e||r("169"),t){var o=rt(n,Mo);e.__reactInternalMemoizedMergedChildContext=o,Yn(po,n),Yn(so,n),Xn(so,o,n)}else Yn(po,n);Xn(po,t,n)}function ut(n,t,e){this.tag=n,this.key=t,this.stateNode=this.type=null,this.sibling=this.child=this.return=null,this.index=0,this.memoizedState=this.updateQueue=this.memoizedProps=this.pendingProps=this.ref=null,this.internalContextTag=e,this.effectTag=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.expirationTime=0,this.alternate=null}function it(n,t,e){var r=n.alternate;return null===r?(r=new ut(n.tag,n.key,n.internalContextTag),r.type=n.type,r.stateNode=n.stateNode,r.alternate=n,n.alternate=r):(r.effectTag=0,r.nextEffect=null,r.firstEffect=null,r.lastEffect=null),r.expirationTime=e,r.pendingProps=t,r.child=n.child,r.memoizedProps=n.memoizedProps,r.memoizedState=n.memoizedState,r.updateQueue=n.updateQueue,r.sibling=n.sibling,r.index=n.index,r.ref=n.ref,r}function ct(n,t,e){var o=void 0,a=n.type,u=n.key;return"function"===typeof a?(o=a.prototype&&a.prototype.isReactComponent?new ut(2,u,t):new ut(0,u,t),o.type=a,o.pendingProps=n.props):"string"===typeof a?(o=new ut(5,u,t),o.type=a,o.pendingProps=n.props):"object"===typeof a&&null!==a&&"number"===typeof a.tag?(o=a,o.pendingProps=n.props):r("130",null==a?a:typeof a,""),o.expirationTime=e,o}function dt(n,t,e,r){return t=new ut(10,r,t),t.pendingProps=n,t.expirationTime=e,t}function ft(n,t,e){return t=new ut(6,null,t),t.pendingProps=n,t.expirationTime=e,t}function mt(n,t,e){return t=new ut(7,n.key,t),t.type=n.handler,t.pendingProps=n,t.expirationTime=e,t}function lt(n,t,e){return n=new ut(9,null,t),n.expirationTime=e,n}function ht(n,t,e){return t=new ut(4,n.key,t),t.pendingProps=n.children||[],t.expirationTime=e,t.stateNode={containerInfo:n.containerInfo,pendingChildren:null,implementation:n.implementation},t}function st(n){return function(t){try{return n(t)}catch(n){}}}function pt(n){if("undefined"===typeof __REACT_DEVTOOLS_GLOBAL_HOOK__)return!1;var t=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(t.isDisabled||!t.supportsFiber)return!0;try{var e=t.inject(n);vo=st(function(n){return t.onCommitFiberRoot(e,n)}),No=st(function(n){return t.onCommitFiberUnmount(e,n)})}catch(n){}return!0}function Mt(n){"function"===typeof vo&&vo(n)}function vt(n){"function"===typeof No&&No(n)}function Nt(n){return{baseState:n,expirationTime:0,first:null,last:null,callbackList:null,hasForceUpdate:!1,isInitialized:!1}}function Ct(n,t){null===n.last?n.first=n.last=t:(n.last.next=t,n.last=t),(0===n.expirationTime||n.expirationTime>t.expirationTime)&&(n.expirationTime=t.expirationTime)}function yt(n,t){var e=n.alternate,r=n.updateQueue;null===r&&(r=n.updateQueue=Nt(null)),null!==e?null===(n=e.updateQueue)&&(n=e.updateQueue=Nt(null)):n=null,n=n!==r?n:null,null===n?Ct(r,t):null===r.last||null===n.last?(Ct(r,t),Ct(n,t)):(Ct(r,t),n.last=t)}function xt(n,t,e,r){return n=n.partialState,"function"===typeof n?n.call(t,e,r):n}function gt(n,t,e,r,o,a){null!==n&&n.updateQueue===e&&(e=t.updateQueue={baseState:e.baseState,expirationTime:e.expirationTime,first:e.first,last:e.last,isInitialized:e.isInitialized,callbackList:null,hasForceUpdate:!1}),e.expirationTime=0,e.isInitialized?n=e.baseState:(n=e.baseState=t.memoizedState,e.isInitialized=!0);for(var u=!0,i=e.first,c=!1;null!==i;){var d=i.expirationTime;if(d>a){var f=e.expirationTime;(0===f||f>d)&&(e.expirationTime=d),c||(c=!0,e.baseState=n)}else c||(e.first=i.next,null===e.first&&(e.last=null)),i.isReplace?(n=xt(i,r,n,o),u=!0):(d=xt(i,r,n,o))&&(n=u?xe({},n,d):xe(n,d),u=!1),i.isForced&&(e.hasForceUpdate=!0),null!==i.callback&&(d=e.callbackList,null===d&&(d=e.callbackList=[]),d.push(i));i=i.next}return null!==e.callbackList?t.effectTag|=32:null!==e.first||e.hasForceUpdate||(t.updateQueue=null),c||(e.baseState=n),n}function It(n,t){var e=n.callbackList;if(null!==e)for(n.callbackList=null,n=0;n<e.length;n++){var o=e[n],a=o.callback;o.callback=null,"function"!==typeof a&&r("191",a),a.call(t)}}function bt(n,t,e,o){function a(n,t){t.updater=u,n.stateNode=t,t._reactInternalFiber=n}var u={isMounted:bn,enqueueSetState:function(e,r,o){e=e._reactInternalFiber,o=void 0===o?null:o;var a=t(e);yt(e,{expirationTime:a,partialState:r,callback:o,isReplace:!1,isForced:!1,nextCallback:null,next:null}),n(e,a)},enqueueReplaceState:function(e,r,o){e=e._reactInternalFiber,o=void 0===o?null:o;var a=t(e);yt(e,{expirationTime:a,partialState:r,callback:o,isReplace:!0,isForced:!1,nextCallback:null,next:null}),n(e,a)},enqueueForceUpdate:function(e,r){e=e._reactInternalFiber,r=void 0===r?null:r;var o=t(e);yt(e,{expirationTime:o,partialState:null,callback:r,isReplace:!1,isForced:!0,nextCallback:null,next:null}),n(e,o)}};return{adoptClassInstance:a,constructClassInstance:function(n,t){var e=n.type,r=Zn(n),o=2===n.tag&&null!=n.type.contextTypes,u=o?Jn(n,r):we;return t=new e(t,u),a(n,t),o&&(n=n.stateNode,n.__reactInternalMemoizedUnmaskedChildContext=r,n.__reactInternalMemoizedMaskedChildContext=u),t},mountClassInstance:function(n,t){var e=n.alternate,o=n.stateNode,a=o.state||null,i=n.pendingProps;i||r("158");var c=Zn(n);o.props=i,o.state=n.memoizedState=a,o.refs=we,o.context=Jn(n,c),null!=n.type&&null!=n.type.prototype&&!0===n.type.prototype.unstable_isAsyncReactComponent&&(n.internalContextTag|=1),"function"===typeof o.componentWillMount&&(a=o.state,o.componentWillMount(),a!==o.state&&u.enqueueReplaceState(o,o.state,null),null!==(a=n.updateQueue)&&(o.state=gt(e,n,a,o,i,t))),"function"===typeof o.componentDidMount&&(n.effectTag|=4)},updateClassInstance:function(n,t,a){var i=t.stateNode;i.props=t.memoizedProps,i.state=t.memoizedState;var c=t.memoizedProps,d=t.pendingProps;d||null==(d=c)&&r("159");var f=i.context,m=Zn(t);if(m=Jn(t,m),"function"!==typeof i.componentWillReceiveProps||c===d&&f===m||(f=i.state,i.componentWillReceiveProps(d,m),i.state!==f&&u.enqueueReplaceState(i,i.state,null)),f=t.memoizedState,a=null!==t.updateQueue?gt(n,t,t.updateQueue,i,d,a):f,!(c!==d||f!==a||po.current||null!==t.updateQueue&&t.updateQueue.hasForceUpdate))return"function"!==typeof i.componentDidUpdate||c===n.memoizedProps&&f===n.memoizedState||(t.effectTag|=4),!1;var l=d;if(null===c||null!==t.updateQueue&&t.updateQueue.hasForceUpdate)l=!0;else{var h=t.stateNode,s=t.type;l="function"===typeof h.shouldComponentUpdate?h.shouldComponentUpdate(l,a,m):!s.prototype||!s.prototype.isPureReactComponent||(!Re(c,l)||!Re(f,a))}return l?("function"===typeof i.componentWillUpdate&&i.componentWillUpdate(d,a,m),"function"===typeof i.componentDidUpdate&&(t.effectTag|=4)):("function"!==typeof i.componentDidUpdate||c===n.memoizedProps&&f===n.memoizedState||(t.effectTag|=4),e(t,d),o(t,a)),i.props=d,i.state=a,i.context=m,l}}}function Rt(n){return null===n||"undefined"===typeof n?null:(n=Ro&&n[Ro]||n["@@iterator"],"function"===typeof n?n:null)}function Ut(n,t){var e=t.ref;if(null!==e&&"function"!==typeof e){if(t._owner){t=t._owner;var o=void 0;t&&(2!==t.tag&&r("110"),o=t.stateNode),o||r("147",e);var a=""+e;return null!==n&&null!==n.ref&&n.ref._stringRef===a?n.ref:(n=function(n){var t=o.refs===we?o.refs={}:o.refs;null===n?delete t[a]:t[a]=n},n._stringRef=a,n)}"string"!==typeof e&&r("148"),t._owner||r("149",e)}return e}function Qt(n,t){"textarea"!==n.type&&r("31","[object Object]"===Object.prototype.toString.call(t)?"object with keys {"+Object.keys(t).join(", ")+"}":t,"")}function wt(n){function t(t,e){if(n){var r=t.lastEffect;null!==r?(r.nextEffect=e,t.lastEffect=e):t.firstEffect=t.lastEffect=e,e.nextEffect=null,e.effectTag=8}}function e(e,r){if(!n)return null;for(;null!==r;)t(e,r),r=r.sibling;return null}function o(n,t){for(n=new Map;null!==t;)null!==t.key?n.set(t.key,t):n.set(t.index,t),t=t.sibling;return n}function a(n,t,e){return n=it(n,t,e),n.index=0,n.sibling=null,n}function u(t,e,r){return t.index=r,n?null!==(r=t.alternate)?(r=r.index,r<e?(t.effectTag=2,e):r):(t.effectTag=2,e):e}function i(t){return n&&null===t.alternate&&(t.effectTag=2),t}function c(n,t,e,r){return null===t||6!==t.tag?(t=ft(e,n.internalContextTag,r),t.return=n,t):(t=a(t,e,r),t.return=n,t)}function d(n,t,e,r){return null!==t&&t.type===e.type?(r=a(t,e.props,r),r.ref=Ut(t,e),r.return=n,r):(r=ct(e,n.internalContextTag,r),r.ref=Ut(t,e),r.return=n,r)}function f(n,t,e,r){return null===t||7!==t.tag?(t=mt(e,n.internalContextTag,r),t.return=n,t):(t=a(t,e,r),t.return=n,t)}function m(n,t,e,r){return null===t||9!==t.tag?(t=lt(e,n.internalContextTag,r),t.type=e.value,t.return=n,t):(t=a(t,null,r),t.type=e.value,t.return=n,t)}function l(n,t,e,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==e.containerInfo||t.stateNode.implementation!==e.implementation?(t=ht(e,n.internalContextTag,r),t.return=n,t):(t=a(t,e.children||[],r),t.return=n,t)}function h(n,t,e,r,o){return null===t||10!==t.tag?(t=dt(e,n.internalContextTag,r,o),t.return=n,t):(t=a(t,e,r),t.return=n,t)}function s(n,t,e){if("string"===typeof t||"number"===typeof t)return t=ft(""+t,n.internalContextTag,e),t.return=n,t;if("object"===typeof t&&null!==t){switch(t.$$typeof){case yo:return t.type===bo?(t=dt(t.props.children,n.internalContextTag,e,t.key),t.return=n,t):(e=ct(t,n.internalContextTag,e),e.ref=Ut(null,t),e.return=n,e);case xo:return t=mt(t,n.internalContextTag,e),t.return=n,t;case go:return e=lt(t,n.internalContextTag,e),e.type=t.value,e.return=n,e;case Io:return t=ht(t,n.internalContextTag,e),t.return=n,t}if(Uo(t)||Rt(t))return t=dt(t,n.internalContextTag,e,null),t.return=n,t;Qt(n,t)}return null}function p(n,t,e,r){var o=null!==t?t.key:null;if("string"===typeof e||"number"===typeof e)return null!==o?null:c(n,t,""+e,r);if("object"===typeof e&&null!==e){switch(e.$$typeof){case yo:return e.key===o?e.type===bo?h(n,t,e.props.children,r,o):d(n,t,e,r):null;case xo:return e.key===o?f(n,t,e,r):null;case go:return null===o?m(n,t,e,r):null;case Io:return e.key===o?l(n,t,e,r):null}if(Uo(e)||Rt(e))return null!==o?null:h(n,t,e,r,null);Qt(n,e)}return null}function M(n,t,e,r,o){if("string"===typeof r||"number"===typeof r)return n=n.get(e)||null,c(t,n,""+r,o);if("object"===typeof r&&null!==r){switch(r.$$typeof){case yo:return n=n.get(null===r.key?e:r.key)||null,r.type===bo?h(t,n,r.props.children,o,r.key):d(t,n,r,o);case xo:return n=n.get(null===r.key?e:r.key)||null,f(t,n,r,o);case go:return n=n.get(e)||null,m(t,n,r,o);case Io:return n=n.get(null===r.key?e:r.key)||null,l(t,n,r,o)}if(Uo(r)||Rt(r))return n=n.get(e)||null,h(t,n,r,o,null);Qt(t,r)}return null}function v(r,a,i,c){for(var d=null,f=null,m=a,l=a=0,h=null;null!==m&&l<i.length;l++){m.index>l?(h=m,m=null):h=m.sibling;var v=p(r,m,i[l],c);if(null===v){null===m&&(m=h);break}n&&m&&null===v.alternate&&t(r,m),a=u(v,a,l),null===f?d=v:f.sibling=v,f=v,m=h}if(l===i.length)return e(r,m),d;if(null===m){for(;l<i.length;l++)(m=s(r,i[l],c))&&(a=u(m,a,l),null===f?d=m:f.sibling=m,f=m);return d}for(m=o(r,m);l<i.length;l++)(h=M(m,r,l,i[l],c))&&(n&&null!==h.alternate&&m.delete(null===h.key?l:h.key),a=u(h,a,l),null===f?d=h:f.sibling=h,f=h);return n&&m.forEach(function(n){return t(r,n)}),d}function N(a,i,c,d){var f=Rt(c);"function"!==typeof f&&r("150"),null==(c=f.call(c))&&r("151");for(var m=f=null,l=i,h=i=0,v=null,N=c.next();null!==l&&!N.done;h++,N=c.next()){l.index>h?(v=l,l=null):v=l.sibling;var C=p(a,l,N.value,d);if(null===C){l||(l=v);break}n&&l&&null===C.alternate&&t(a,l),i=u(C,i,h),null===m?f=C:m.sibling=C,m=C,l=v}if(N.done)return e(a,l),f;if(null===l){for(;!N.done;h++,N=c.next())null!==(N=s(a,N.value,d))&&(i=u(N,i,h),null===m?f=N:m.sibling=N,m=N);return f}for(l=o(a,l);!N.done;h++,N=c.next())null!==(N=M(l,a,h,N.value,d))&&(n&&null!==N.alternate&&l.delete(null===N.key?h:N.key),i=u(N,i,h),null===m?f=N:m.sibling=N,m=N);return n&&l.forEach(function(n){return t(a,n)}),f}return function(n,o,u,c){"object"===typeof u&&null!==u&&u.type===bo&&null===u.key&&(u=u.props.children);var d="object"===typeof u&&null!==u;if(d)switch(u.$$typeof){case yo:n:{var f=u.key;for(d=o;null!==d;){if(d.key===f){if(10===d.tag?u.type===bo:d.type===u.type){e(n,d.sibling),o=a(d,u.type===bo?u.props.children:u.props,c),o.ref=Ut(d,u),o.return=n,n=o;break n}e(n,d);break}t(n,d),d=d.sibling}u.type===bo?(o=dt(u.props.children,n.internalContextTag,c,u.key),o.return=n,n=o):(c=ct(u,n.internalContextTag,c),c.ref=Ut(o,u),c.return=n,n=c)}return i(n);case xo:n:{for(d=u.key;null!==o;){if(o.key===d){if(7===o.tag){e(n,o.sibling),o=a(o,u,c),o.return=n,n=o;break n}e(n,o);break}t(n,o),o=o.sibling}o=mt(u,n.internalContextTag,c),o.return=n,n=o}return i(n);case go:n:{if(null!==o){if(9===o.tag){e(n,o.sibling),o=a(o,null,c),o.type=u.value,o.return=n,n=o;break n}e(n,o)}o=lt(u,n.internalContextTag,c),o.type=u.value,o.return=n,n=o}return i(n);case Io:n:{for(d=u.key;null!==o;){if(o.key===d){if(4===o.tag&&o.stateNode.containerInfo===u.containerInfo&&o.stateNode.implementation===u.implementation){e(n,o.sibling),o=a(o,u.children||[],c),o.return=n,n=o;break n}e(n,o);break}t(n,o),o=o.sibling}o=ht(u,n.internalContextTag,c),o.return=n,n=o}return i(n)}if("string"===typeof u||"number"===typeof u)return u=""+u,null!==o&&6===o.tag?(e(n,o.sibling),o=a(o,u,c)):(e(n,o),o=ft(u,n.internalContextTag,c)),o.return=n,n=o,i(n);if(Uo(u))return v(n,o,u,c);if(Rt(u))return N(n,o,u,c);if(d&&Qt(n,u),"undefined"===typeof u)switch(n.tag){case 2:case 1:c=n.type,r("152",c.displayName||c.name||"Component")}return e(n,o)}}function kt(n,t,e,o,a){function u(n,t,e){var r=t.expirationTime;t.child=null===n?wo(t,null,e,r):Qo(t,n.child,e,r)}function i(n,t){var e=t.ref;null===e||n&&n.ref===e||(t.effectTag|=128)}function c(n,t,e,r){if(i(n,t),!e)return r&&at(t,!1),f(n,t);e=t.stateNode,Hr.current=t;var o=e.render();return t.effectTag|=1,u(n,t,o),t.memoizedState=e.state,t.memoizedProps=e.props,r&&at(t,!0),t.child}function d(n){var t=n.stateNode;t.pendingContext?et(n,t.pendingContext,t.pendingContext!==t.context):t.context&&et(n,t.context,!1),M(n,t.containerInfo)}function f(n,t){if(null!==n&&t.child!==n.child&&r("153"),null!==t.child){n=t.child;var e=it(n,n.pendingProps,n.expirationTime);for(t.child=e,e.return=t;null!==n.sibling;)n=n.sibling,e=e.sibling=it(n,n.pendingProps,n.expirationTime),e.return=t;e.sibling=null}return t.child}function m(n,t){switch(t.tag){case 3:d(t);break;case 2:ot(t);break;case 4:M(t,t.stateNode.containerInfo)}return null}var l=n.shouldSetTextContent,h=n.useSyncScheduling,s=n.shouldDeprioritizeSubtree,p=t.pushHostContext,M=t.pushHostContainer,v=e.enterHydrationState,N=e.resetHydrationState,C=e.tryToClaimNextHydratableInstance;n=bt(o,a,function(n,t){n.memoizedProps=t},function(n,t){n.memoizedState=t});var y=n.adoptClassInstance,x=n.constructClassInstance,g=n.mountClassInstance,I=n.updateClassInstance;return{beginWork:function(n,t,e){if(0===t.expirationTime||t.expirationTime>e)return m(n,t);switch(t.tag){case 0:null!==n&&r("155");var o=t.type,a=t.pendingProps,b=Zn(t);return b=Jn(t,b),o=o(a,b),t.effectTag|=1,"object"===typeof o&&null!==o&&"function"===typeof o.render?(t.tag=2,a=ot(t),y(t,o),g(t,e),t=c(n,t,!0,a)):(t.tag=1,u(n,t,o),t.memoizedProps=a,t=t.child),t;case 1:n:{if(a=t.type,e=t.pendingProps,o=t.memoizedProps,po.current)null===e&&(e=o);else if(null===e||o===e){t=f(n,t);break n}o=Zn(t),o=Jn(t,o),a=a(e,o),t.effectTag|=1,u(n,t,a),t.memoizedProps=e,t=t.child}return t;case 2:return a=ot(t),o=void 0,null===n?t.stateNode?r("153"):(x(t,t.pendingProps),g(t,e),o=!0):o=I(n,t,e),c(n,t,o,a);case 3:return d(t),a=t.updateQueue,null!==a?(o=t.memoizedState,a=gt(n,t,a,null,null,e),o===a?(N(),t=f(n,t)):(o=a.element,b=t.stateNode,(null===n||null===n.child)&&b.hydrate&&v(t)?(t.effectTag|=2,t.child=wo(t,null,o,e)):(N(),u(n,t,o)),t.memoizedState=a,t=t.child)):(N(),t=f(n,t)),t;case 5:p(t),null===n&&C(t),a=t.type;var R=t.memoizedProps;return o=t.pendingProps,null===o&&null===(o=R)&&r("154"),b=null!==n?n.memoizedProps:null,po.current||null!==o&&R!==o?(R=o.children,l(a,o)?R=null:b&&l(a,b)&&(t.effectTag|=16),i(n,t),2147483647!==e&&!h&&s(a,o)?(t.expirationTime=2147483647,t=null):(u(n,t,R),t.memoizedProps=o,t=t.child)):t=f(n,t),t;case 6:return null===n&&C(t),n=t.pendingProps,null===n&&(n=t.memoizedProps),t.memoizedProps=n,null;case 8:t.tag=7;case 7:return a=t.pendingProps,po.current?null===a&&null===(a=n&&n.memoizedProps)&&r("154"):null!==a&&t.memoizedProps!==a||(a=t.memoizedProps),o=a.children,t.stateNode=null===n?wo(t,t.stateNode,o,e):Qo(t,t.stateNode,o,e),t.memoizedProps=a,t.stateNode;case 9:return null;case 4:n:{if(M(t,t.stateNode.containerInfo),a=t.pendingProps,po.current)null===a&&null==(a=n&&n.memoizedProps)&&r("154");else if(null===a||t.memoizedProps===a){t=f(n,t);break n}null===n?t.child=Qo(t,null,a,e):u(n,t,a),t.memoizedProps=a,t=t.child}return t;case 10:n:{if(e=t.pendingProps,po.current)null===e&&(e=t.memoizedProps);else if(null===e||t.memoizedProps===e){t=f(n,t);break n}u(n,t,e),t.memoizedProps=e,t=t.child}return t;default:r("156")}},beginFailedWork:function(n,t,e){switch(t.tag){case 2:ot(t);break;case 3:d(t);break;default:r("157")}return t.effectTag|=64,null===n?t.child=null:t.child!==n.child&&(t.child=n.child),0===t.expirationTime||t.expirationTime>e?m(n,t):(t.firstEffect=null,t.lastEffect=null,t.child=null===n?wo(t,null,null,e):Qo(t,n.child,null,e),2===t.tag&&(n=t.stateNode,t.memoizedProps=n.props,t.memoizedState=n.state),t.child)}}}function Et(n,t,e){function o(n){n.effectTag|=4}var a=n.createInstance,u=n.createTextInstance,i=n.appendInitialChild,c=n.finalizeInitialChildren,d=n.prepareUpdate,f=n.persistence,m=t.getRootHostContainer,l=t.popHostContext,h=t.getHostContext,s=t.popHostContainer,p=e.prepareToHydrateHostInstance,M=e.prepareToHydrateHostTextInstance,v=e.popHydrationState,N=void 0,C=void 0,y=void 0;return n.mutation?(N=function(){},C=function(n,t,e){(t.updateQueue=e)&&o(t)},y=function(n,t,e,r){e!==r&&o(t)}):r(f?"235":"236"),{completeWork:function(n,t,e){var f=t.pendingProps;switch(null===f?f=t.memoizedProps:2147483647===t.expirationTime&&2147483647!==e||(t.pendingProps=null),t.tag){case 1:return null;case 2:return tt(t),null;case 3:return s(t),Yn(po,t),Yn(so,t),f=t.stateNode,f.pendingContext&&(f.context=f.pendingContext,f.pendingContext=null),null!==n&&null!==n.child||(v(t),t.effectTag&=-3),N(t),null;case 5:l(t),e=m();var x=t.type;if(null!==n&&null!=t.stateNode){var g=n.memoizedProps,I=t.stateNode,b=h();I=d(I,x,g,f,e,b),C(n,t,I,x,g,f,e),n.ref!==t.ref&&(t.effectTag|=128)}else{if(!f)return null===t.stateNode&&r("166"),null;if(n=h(),v(t))p(t,e,n)&&o(t);else{n=a(x,f,e,n,t);n:for(g=t.child;null!==g;){if(5===g.tag||6===g.tag)i(n,g.stateNode);else if(4!==g.tag&&null!==g.child){g.child.return=g,g=g.child;continue}if(g===t)break;for(;null===g.sibling;){if(null===g.return||g.return===t)break n;g=g.return}g.sibling.return=g.return,g=g.sibling}c(n,x,f,e)&&o(t),t.stateNode=n}null!==t.ref&&(t.effectTag|=128)}return null;case 6:if(n&&null!=t.stateNode)y(n,t,n.memoizedProps,f);else{if("string"!==typeof f)return null===t.stateNode&&r("166"),null;n=m(),e=h(),v(t)?M(t)&&o(t):t.stateNode=u(f,n,e,t)}return null;case 7:(f=t.memoizedProps)||r("165"),t.tag=8,x=[];n:for((g=t.stateNode)&&(g.return=t);null!==g;){if(5===g.tag||6===g.tag||4===g.tag)r("247");else if(9===g.tag)x.push(g.type);else if(null!==g.child){g.child.return=g,g=g.child;continue}for(;null===g.sibling;){if(null===g.return||g.return===t)break n;g=g.return}g.sibling.return=g.return,g=g.sibling}return g=f.handler,f=g(f.props,x),t.child=Qo(t,null!==n?n.child:null,f,e),t.child;case 8:return t.tag=7,null;case 9:case 10:return null;case 4:return s(t),N(t),null;case 0:r("167");default:r("156")}}}}function Tt(n,t){function e(n){var e=n.ref;if(null!==e)try{e(null)}catch(e){t(n,e)}}function o(n){switch("function"===typeof vt&&vt(n),n.tag){case 2:e(n);var r=n.stateNode;if("function"===typeof r.componentWillUnmount)try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(e){t(n,e)}break;case 5:e(n);break;case 7:a(n.stateNode);break;case 4:d&&i(n)}}function a(n){for(var t=n;;)if(o(t),null===t.child||d&&4===t.tag){if(t===n)break;for(;null===t.sibling;){if(null===t.return||t.return===n)return;t=t.return}t.sibling.return=t.return,t=t.sibling}else t.child.return=t,t=t.child}function u(n){return 5===n.tag||3===n.tag||4===n.tag}function i(n){for(var t=n,e=!1,u=void 0,i=void 0;;){if(!e){e=t.return;n:for(;;){switch(null===e&&r("160"),e.tag){case 5:u=e.stateNode,i=!1;break n;case 3:case 4:u=e.stateNode.containerInfo,i=!0;break n}e=e.return}e=!0}if(5===t.tag||6===t.tag)a(t),i?C(u,t.stateNode):N(u,t.stateNode);else if(4===t.tag?u=t.stateNode.containerInfo:o(t),null!==t.child){t.child.return=t,t=t.child;continue}if(t===n)break;for(;null===t.sibling;){if(null===t.return||t.return===n)return;t=t.return,4===t.tag&&(e=!1)}t.sibling.return=t.return,t=t.sibling}}var c=n.getPublicInstance,d=n.mutation;n=n.persistence,d||r(n?"235":"236");var f=d.commitMount,m=d.commitUpdate,l=d.resetTextContent,h=d.commitTextUpdate,s=d.appendChild,p=d.appendChildToContainer,M=d.insertBefore,v=d.insertInContainerBefore,N=d.removeChild,C=d.removeChildFromContainer;return{commitResetTextContent:function(n){l(n.stateNode)},commitPlacement:function(n){n:{for(var t=n.return;null!==t;){if(u(t)){var e=t;break n}t=t.return}r("160"),e=void 0}var o=t=void 0;switch(e.tag){case 5:t=e.stateNode,o=!1;break;case 3:case 4:t=e.stateNode.containerInfo,o=!0;break;default:r("161")}16&e.effectTag&&(l(t),e.effectTag&=-17);n:t:for(e=n;;){for(;null===e.sibling;){if(null===e.return||u(e.return)){e=null;break n}e=e.return}for(e.sibling.return=e.return,e=e.sibling;5!==e.tag&&6!==e.tag;){if(2&e.effectTag)continue t;if(null===e.child||4===e.tag)continue t;e.child.return=e,e=e.child}if(!(2&e.effectTag)){e=e.stateNode;break n}}for(var a=n;;){if(5===a.tag||6===a.tag)e?o?v(t,a.stateNode,e):M(t,a.stateNode,e):o?p(t,a.stateNode):s(t,a.stateNode);else if(4!==a.tag&&null!==a.child){a.child.return=a,a=a.child;continue}if(a===n)break;for(;null===a.sibling;){if(null===a.return||a.return===n)return;a=a.return}a.sibling.return=a.return,a=a.sibling}},commitDeletion:function(n){i(n),n.return=null,n.child=null,n.alternate&&(n.alternate.child=null,n.alternate.return=null)},commitWork:function(n,t){switch(t.tag){case 2:break;case 5:var e=t.stateNode;if(null!=e){var o=t.memoizedProps;n=null!==n?n.memoizedProps:o;var a=t.type,u=t.updateQueue;t.updateQueue=null,null!==u&&m(e,u,a,n,o,t)}break;case 6:null===t.stateNode&&r("162"),e=t.memoizedProps,h(t.stateNode,null!==n?n.memoizedProps:e,e);break;case 3:break;default:r("163")}},commitLifeCycles:function(n,t){switch(t.tag){case 2:var e=t.stateNode;if(4&t.effectTag)if(null===n)e.props=t.memoizedProps,e.state=t.memoizedState,e.componentDidMount();else{var o=n.memoizedProps;n=n.memoizedState,e.props=t.memoizedProps,e.state=t.memoizedState,e.componentDidUpdate(o,n)}t=t.updateQueue,null!==t&&It(t,e);break;case 3:e=t.updateQueue,null!==e&&It(e,null!==t.child?t.child.stateNode:null);break;case 5:e=t.stateNode,null===n&&4&t.effectTag&&f(e,t.type,t.memoizedProps,t);break;case 6:case 4:break;default:r("163")}},commitAttachRef:function(n){var t=n.ref;if(null!==t){var e=n.stateNode;switch(n.tag){case 5:t(c(e));break;default:t(e)}}},commitDetachRef:function(n){null!==(n=n.ref)&&n(null)}}}function _t(n){function t(n){return n===ko&&r("174"),n}var e=n.getChildHostContext,o=n.getRootHostContext,a={current:ko},u={current:ko},i={current:ko};return{getHostContext:function(){return t(a.current)},getRootHostContainer:function(){return t(i.current)},popHostContainer:function(n){Yn(a,n),Yn(u,n),Yn(i,n)},popHostContext:function(n){u.current===n&&(Yn(a,n),Yn(u,n))},pushHostContainer:function(n,t){Xn(i,t,n),t=o(t),Xn(u,n,n),Xn(a,t,n)},pushHostContext:function(n){var r=t(i.current),o=t(a.current);r=e(o,n.type,r),o!==r&&(Xn(u,n,n),Xn(a,r,n))},resetHostContainer:function(){a.current=ko,i.current=ko}}}function St(n){function t(n,t){var e=new ut(5,null,0);e.type="DELETED",e.stateNode=t,e.return=n,e.effectTag=8,null!==n.lastEffect?(n.lastEffect.nextEffect=e,n.lastEffect=e):n.firstEffect=n.lastEffect=e}function e(n,t){switch(n.tag){case 5:return null!==(t=u(t,n.type,n.pendingProps))&&(n.stateNode=t,!0);case 6:return null!==(t=i(t,n.pendingProps))&&(n.stateNode=t,!0);default:return!1}}function o(n){for(n=n.return;null!==n&&5!==n.tag&&3!==n.tag;)n=n.return;l=n}var a=n.shouldSetTextContent;if(!(n=n.hydration))return{enterHydrationState:function(){return!1},resetHydrationState:function(){},tryToClaimNextHydratableInstance:function(){},prepareToHydrateHostInstance:function(){r("175")},prepareToHydrateHostTextInstance:function(){r("176")},popHydrationState:function(){return!1}};var u=n.canHydrateInstance,i=n.canHydrateTextInstance,c=n.getNextHydratableSibling,d=n.getFirstHydratableChild,f=n.hydrateInstance,m=n.hydrateTextInstance,l=null,h=null,s=!1;return{enterHydrationState:function(n){return h=d(n.stateNode.containerInfo),l=n,s=!0},resetHydrationState:function(){h=l=null,s=!1},tryToClaimNextHydratableInstance:function(n){if(s){var r=h;if(r){if(!e(n,r)){if(!(r=c(r))||!e(n,r))return n.effectTag|=2,s=!1,void(l=n);t(l,h)}l=n,h=d(r)}else n.effectTag|=2,s=!1,l=n}},prepareToHydrateHostInstance:function(n,t,e){return t=f(n.stateNode,n.type,n.memoizedProps,t,e,n),n.updateQueue=t,null!==t},prepareToHydrateHostTextInstance:function(n){return m(n.stateNode,n.memoizedProps,n)},popHydrationState:function(n){if(n!==l)return!1;if(!s)return o(n),s=!0,!1;var e=n.type;if(5!==n.tag||"head"!==e&&"body"!==e&&!a(e,n.memoizedProps))for(e=h;e;)t(n,e),e=c(e);return o(n),h=l?c(n.stateNode):null,!0}}}function Pt(n){function t(n){an=G=!0;var t=n.stateNode;if(t.current===n&&r("177"),t.isReadyForCommit=!1,Hr.current=null,1<n.effectTag)if(null!==n.lastEffect){n.lastEffect.nextEffect=n;var e=n.firstEffect}else e=n;else e=n.firstEffect;for(V(),J=e;null!==J;){var o=!1,a=void 0;try{for(;null!==J;){var u=J.effectTag;if(16&u&&S(J),128&u){var i=J.alternate;null!==i&&L(i)}switch(-242&u){case 2:P(J),J.effectTag&=-3;break;case 6:P(J),J.effectTag&=-3,A(J.alternate,J);break;case 4:A(J.alternate,J);break;case 8:un=!0,O(J),un=!1}J=J.nextEffect}}catch(n){o=!0,a=n}o&&(null===J&&r("178"),c(J,a),null!==J&&(J=J.nextEffect))}for(K(),t.current=n,J=e;null!==J;){e=!1,o=void 0;try{for(;null!==J;){var d=J.effectTag;if(36&d&&D(J.alternate,J),128&d&&F(J),64&d)switch(a=J,u=void 0,null!==nn&&(u=nn.get(a),nn.delete(a),null==u&&null!==a.alternate&&(a=a.alternate,u=nn.get(a),nn.delete(a))),null==u&&r("184"),a.tag){case 2:a.stateNode.componentDidCatch(u.error,{componentStack:u.componentStack});break;case 3:null===rn&&(rn=u.error);break;default:r("157")}var f=J.nextEffect;J.nextEffect=null,J=f}}catch(n){e=!0,o=n}e&&(null===J&&r("178"),c(J,o),null!==J&&(J=J.nextEffect))}return G=an=!1,"function"===typeof Mt&&Mt(n.stateNode),en&&(en.forEach(p),en=null),null!==rn&&(n=rn,rn=null,I(n)),t=t.current.expirationTime,0===t&&(tn=nn=null),t}function e(n){for(;;){var t=_(n.alternate,n,Z),e=n.return,r=n.sibling,o=n;if(2147483647===Z||2147483647!==o.expirationTime){if(2!==o.tag&&3!==o.tag)var a=0;else a=o.updateQueue,a=null===a?0:a.expirationTime;for(var u=o.child;null!==u;)0!==u.expirationTime&&(0===a||a>u.expirationTime)&&(a=u.expirationTime),u=u.sibling;o.expirationTime=a}if(null!==t)return t;if(null!==e&&(null===e.firstEffect&&(e.firstEffect=n.firstEffect),null!==n.lastEffect&&(null!==e.lastEffect&&(e.lastEffect.nextEffect=n.firstEffect),e.lastEffect=n.lastEffect),1<n.effectTag&&(null!==e.lastEffect?e.lastEffect.nextEffect=n:e.firstEffect=n,e.lastEffect=n)),null!==r)return r;if(null===e){n.stateNode.isReadyForCommit=!0;break}n=e}return null}function o(n){var t=E(n.alternate,n,Z);return null===t&&(t=e(n)),Hr.current=null,t}function a(n){var t=T(n.alternate,n,Z);return null===t&&(t=e(n)),Hr.current=null,t}function u(n){if(null!==nn){if(!(0===Z||Z>n))if(Z<=q)for(;null!==Y;)Y=d(Y)?a(Y):o(Y);else for(;null!==Y&&!g();)Y=d(Y)?a(Y):o(Y)}else if(!(0===Z||Z>n))if(Z<=q)for(;null!==Y;)Y=o(Y);else for(;null!==Y&&!g();)Y=o(Y)}function i(n,t){if(G&&r("243"),G=!0,n.isReadyForCommit=!1,n!==X||t!==Z||null===Y){for(;-1<ho;)lo[ho]=null,ho--;Mo=we,so.current=we,po.current=!1,w(),X=n,Z=t,Y=it(X.current,null,t)}var e=!1,o=null;try{u(t)}catch(n){e=!0,o=n}for(;e;){if(on){rn=o;break}var i=Y;if(null===i)on=!0;else{var d=c(i,o);if(null===d&&r("183"),!on){try{for(e=d,o=t,d=e;null!==i;){switch(i.tag){case 2:tt(i);break;case 5:Q(i);break;case 3:U(i);break;case 4:U(i)}if(i===d||i.alternate===d)break;i=i.return}Y=a(e),u(o)}catch(n){e=!0,o=n;continue}break}}}return t=rn,on=G=!1,rn=null,null!==t&&I(t),n.isReadyForCommit?n.current.alternate:null}function c(n,t){var e=Hr.current=null,r=!1,o=!1,a=null;if(3===n.tag)e=n,f(n)&&(on=!0);else for(var u=n.return;null!==u&&null===e;){if(2===u.tag?"function"===typeof u.stateNode.componentDidCatch&&(r=!0,a=gn(u),e=u,o=!0):3===u.tag&&(e=u),f(u)){if(un||null!==en&&(en.has(u)||null!==u.alternate&&en.has(u.alternate)))return null;e=null,o=!1}u=u.return}if(null!==e){null===tn&&(tn=new Set),tn.add(e);var i="";u=n;do{n:switch(u.tag){case 0:case 1:case 2:case 5:var c=u._debugOwner,d=u._debugSource,m=gn(u),l=null;c&&(l=gn(c)),c=d,m="\n in "+(m||"Unknown")+(c?" (at "+c.fileName.replace(/^.*[\\\/]/,"")+":"+c.lineNumber+")":l?" (created by "+l+")":"");break n;default:m=""}i+=m,u=u.return}while(u);u=i,n=gn(n),null===nn&&(nn=new Map),t={componentName:n,componentStack:u,error:t,errorBoundary:r?e.stateNode:null,errorBoundaryFound:r,errorBoundaryName:a,willRetry:o},nn.set(e,t);try{var h=t.error;h&&h.suppressReactErrorLogging||console.error(h)}catch(n){n&&n.suppressReactErrorLogging||console.error(n)}return an?(null===en&&(en=new Set),en.add(e)):p(e),e}return null===rn&&(rn=t),null}function d(n){return null!==nn&&(nn.has(n)||null!==n.alternate&&nn.has(n.alternate))}function f(n){return null!==tn&&(tn.has(n)||null!==n.alternate&&tn.has(n.alternate))}function m(){return 20*(1+((M()+100)/20|0))}function l(n){return 0!==$?$:G?an?1:Z:!z||1&n.internalContextTag?m():1}function h(n,t){return s(n,t,!1)}function s(n,t){for(;null!==n;){if((0===n.expirationTime||n.expirationTime>t)&&(n.expirationTime=t),null!==n.alternate&&(0===n.alternate.expirationTime||n.alternate.expirationTime>t)&&(n.alternate.expirationTime=t),null===n.return){if(3!==n.tag)break;var e=n.stateNode;!G&&e===X&&t<Z&&(Y=X=null,Z=0);var o=e,a=t;if(In>xn&&r("185"),null===o.nextScheduledRoot)o.remainingExpirationTime=a,null===dn?(cn=dn=o,o.nextScheduledRoot=o):(dn=dn.nextScheduledRoot=o,dn.nextScheduledRoot=cn);else{var u=o.remainingExpirationTime;(0===u||a<u)&&(o.remainingExpirationTime=a)}ln||(Cn?yn&&(hn=o,sn=1,x(hn,sn)):1===a?y(1,null):v(a)),!G&&e===X&&t<Z&&(Y=X=null,Z=0)}n=n.return}}function p(n){s(n,1,!0)}function M(){return q=2+((j()-W)/10|0)}function v(n){if(0!==fn){if(n>fn)return;B(mn)}var t=j()-W;fn=n,mn=H(C,{timeout:10*(n-2)-t})}function N(){var n=0,t=null;if(null!==dn)for(var e=dn,o=cn;null!==o;){var a=o.remainingExpirationTime;if(0===a){if((null===e||null===dn)&&r("244"),o===o.nextScheduledRoot){cn=dn=o.nextScheduledRoot=null;break}if(o===cn)cn=a=o.nextScheduledRoot,dn.nextScheduledRoot=a,o.nextScheduledRoot=null;else{if(o===dn){dn=e,dn.nextScheduledRoot=cn,o.nextScheduledRoot=null;break}e.nextScheduledRoot=o.nextScheduledRoot,o.nextScheduledRoot=null}o=e.nextScheduledRoot}else{if((0===n||a<n)&&(n=a,t=o),o===dn)break;e=o,o=o.nextScheduledRoot}}e=hn,null!==e&&e===t?In++:In=0,hn=t,sn=n}function C(n){y(0,n)}function y(n,t){for(Nn=t,N();null!==hn&&0!==sn&&(0===n||sn<=n)&&!pn;)x(hn,sn),N();if(null!==Nn&&(fn=0,mn=-1),0!==sn&&v(sn),Nn=null,pn=!1,In=0,Mn)throw n=vn,vn=null,Mn=!1,n}function x(n,e){if(ln&&r("245"),ln=!0,e<=M()){var o=n.finishedWork;null!==o?(n.finishedWork=null,n.remainingExpirationTime=t(o)):(n.finishedWork=null,null!==(o=i(n,e))&&(n.remainingExpirationTime=t(o)))}else o=n.finishedWork,null!==o?(n.finishedWork=null,n.remainingExpirationTime=t(o)):(n.finishedWork=null,null!==(o=i(n,e))&&(g()?n.finishedWork=o:n.remainingExpirationTime=t(o)));ln=!1}function g(){return!(null===Nn||Nn.timeRemaining()>bn)&&(pn=!0)}function I(n){null===hn&&r("246"),hn.remainingExpirationTime=0,Mn||(Mn=!0,vn=n)}var b=_t(n),R=St(n),U=b.popHostContainer,Q=b.popHostContext,w=b.resetHostContainer,k=kt(n,b,R,h,l),E=k.beginWork,T=k.beginFailedWork,_=Et(n,b,R).completeWork;b=Tt(n,c);var S=b.commitResetTextContent,P=b.commitPlacement,O=b.commitDeletion,A=b.commitWork,D=b.commitLifeCycles,F=b.commitAttachRef,L=b.commitDetachRef,j=n.now,H=n.scheduleDeferredCallback,B=n.cancelDeferredCallback,z=n.useSyncScheduling,V=n.prepareForCommit,K=n.resetAfterCommit,W=j(),q=2,$=0,G=!1,Y=null,X=null,Z=0,J=null,nn=null,tn=null,en=null,rn=null,on=!1,an=!1,un=!1,cn=null,dn=null,fn=0,mn=-1,ln=!1,hn=null,sn=0,pn=!1,Mn=!1,vn=null,Nn=null,Cn=!1,yn=!1,xn=1e3,In=0,bn=1;return{computeAsyncExpiration:m,computeExpirationForFiber:l,scheduleWork:h,batchedUpdates:function(n,t){var e=Cn;Cn=!0;try{return n(t)}finally{(Cn=e)||ln||y(1,null)}},unbatchedUpdates:function(n){if(Cn&&!yn){yn=!0;try{return n()}finally{yn=!1}}return n()},flushSync:function(n){var t=Cn;Cn=!0;try{n:{var e=$;$=1;try{var o=n();break n}finally{$=e}o=void 0}return o}finally{Cn=t,ln&&r("187"),y(1,null)}},deferredUpdates:function(n){var t=$;$=m();try{return n()}finally{$=t}}}}function Ot(n){function t(n){return n=Qn(n),null===n?null:n.stateNode}var e=n.getPublicInstance;n=Pt(n);var o=n.computeAsyncExpiration,a=n.computeExpirationForFiber,u=n.scheduleWork;return{createContainer:function(n,t){var e=new ut(3,null,0);return n={current:e,containerInfo:n,pendingChildren:null,remainingExpirationTime:0,isReadyForCommit:!1,finishedWork:null,context:null,pendingContext:null,hydrate:t,nextScheduledRoot:null},e.stateNode=n},updateContainer:function(n,t,e,i){var c=t.current;if(e){e=e._reactInternalFiber;var d;n:{for(2===In(e)&&2===e.tag||r("170"),d=e;3!==d.tag;){if(nt(d)){d=d.stateNode.__reactInternalMemoizedMergedChildContext;break n}(d=d.return)||r("171")}d=d.stateNode.context}e=nt(e)?rt(e,d):d}else e=we;null===t.context?t.context=e:t.pendingContext=e,t=i,t=void 0===t?null:t,i=null!=n&&null!=n.type&&null!=n.type.prototype&&!0===n.type.prototype.unstable_isAsyncReactComponent?o():a(c),yt(c,{expirationTime:i,partialState:{element:n},callback:t,isReplace:!1,isForced:!1,nextCallback:null,next:null}),u(c,i)},batchedUpdates:n.batchedUpdates,unbatchedUpdates:n.unbatchedUpdates,deferredUpdates:n.deferredUpdates,flushSync:n.flushSync,getPublicRootInstance:function(n){if(n=n.current,!n.child)return null;switch(n.child.tag){case 5:return e(n.child.stateNode);default:return n.child.stateNode}},findHostInstance:t,findHostInstanceWithNoPortals:function(n){return n=wn(n),null===n?null:n.stateNode},injectIntoDevTools:function(n){var e=n.findFiberByHostInstance;return pt(xe({},n,{findHostInstanceByFiber:function(n){return t(n)},findFiberByHostInstance:function(n){return e?e(n):null}}))}}}function At(n,t,e){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:Io,key:null==r?null:""+r,children:n,containerInfo:t,implementation:e}}function Dt(n){return!!Go.hasOwnProperty(n)||!$o.hasOwnProperty(n)&&(qo.test(n)?Go[n]=!0:($o[n]=!0,!1))}function Ft(n,t,e){var r=u(t);if(r&&a(t,e)){var o=r.mutationMethod;o?o(n,e):null==e||r.hasBooleanValue&&!e||r.hasNumericValue&&isNaN(e)||r.hasPositiveNumericValue&&1>e||r.hasOverloadedBooleanValue&&!1===e?jt(n,t):r.mustUseProperty?n[r.propertyName]=e:(t=r.attributeName,(o=r.attributeNamespace)?n.setAttributeNS(o,t,""+e):r.hasBooleanValue||r.hasOverloadedBooleanValue&&!0===e?n.setAttribute(t,""):n.setAttribute(t,""+e))}else Lt(n,t,a(t,e)?e:null)}function Lt(n,t,e){Dt(t)&&(null==e?n.removeAttribute(t):n.setAttribute(t,""+e))}function jt(n,t){var e=u(t);e?(t=e.mutationMethod)?t(n,void 0):e.mustUseProperty?n[e.propertyName]=!e.hasBooleanValue&&"":n.removeAttribute(e.attributeName):n.removeAttribute(t)}function Ht(n,t){var e=t.value,r=t.checked;return xe({type:void 0,step:void 0,min:void 0,max:void 0},t,{defaultChecked:void 0,defaultValue:void 0,value:null!=e?e:n._wrapperState.initialValue,checked:null!=r?r:n._wrapperState.initialChecked})}function Bt(n,t){var e=t.defaultValue;n._wrapperState={initialChecked:null!=t.checked?t.checked:t.defaultChecked,initialValue:null!=t.value?t.value:e,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function zt(n,t){null!=(t=t.checked)&&Ft(n,"checked",t)}function Vt(n,t){zt(n,t);var e=t.value;null!=e?0===e&&""===n.value?n.value="0":"number"===t.type?(t=parseFloat(n.value)||0,(e!=t||e==t&&n.value!=e)&&(n.value=""+e)):n.value!==""+e&&(n.value=""+e):(null==t.value&&null!=t.defaultValue&&n.defaultValue!==""+t.defaultValue&&(n.defaultValue=""+t.defaultValue),null==t.checked&&null!=t.defaultChecked&&(n.defaultChecked=!!t.defaultChecked))}function Kt(n,t){switch(t.type){case"submit":case"reset":break;case"color":case"date":case"datetime":case"datetime-local":case"month":case"time":case"week":n.value="",n.value=n.defaultValue;break;default:n.value=n.value}t=n.name,""!==t&&(n.name=""),n.defaultChecked=!n.defaultChecked,n.defaultChecked=!n.defaultChecked,""!==t&&(n.name=t)}function Wt(n){var t="";return Ce.Children.forEach(n,function(n){null==n||"string"!==typeof n&&"number"!==typeof n||(t+=n)}),t}function qt(n,t){return n=xe({children:void 0},t),(t=Wt(t.children))&&(n.children=t),n}function $t(n,t,e,r){if(n=n.options,t){t={};for(var o=0;o<e.length;o++)t["$"+e[o]]=!0;for(e=0;e<n.length;e++)o=t.hasOwnProperty("$"+n[e].value),n[e].selected!==o&&(n[e].selected=o),o&&r&&(n[e].defaultSelected=!0)}else{for(e=""+e,t=null,o=0;o<n.length;o++){if(n[o].value===e)return n[o].selected=!0,void(r&&(n[o].defaultSelected=!0));null!==t||n[o].disabled||(t=n[o])}null!==t&&(t.selected=!0)}}function Gt(n,t){var e=t.value;n._wrapperState={initialValue:null!=e?e:t.defaultValue,wasMultiple:!!t.multiple}}function Yt(n,t){return null!=t.dangerouslySetInnerHTML&&r("91"),xe({},t,{value:void 0,defaultValue:void 0,children:""+n._wrapperState.initialValue})}function Xt(n,t){var e=t.value;null==e&&(e=t.defaultValue,t=t.children,null!=t&&(null!=e&&r("92"),Array.isArray(t)&&(1>=t.length||r("93"),t=t[0]),e=""+t),null==e&&(e="")),n._wrapperState={initialValue:""+e}}function Zt(n,t){var e=t.value;null!=e&&(e=""+e,e!==n.value&&(n.value=e),null==t.defaultValue&&(n.defaultValue=e)),null!=t.defaultValue&&(n.defaultValue=t.defaultValue)}function Jt(n){var t=n.textContent;t===n._wrapperState.initialValue&&(n.value=t)}function ne(n){switch(n){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function te(n,t){return null==n||"http://www.w3.org/1999/xhtml"===n?ne(t):"http://www.w3.org/2000/svg"===n&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":n}function ee(n,t){if(t){var e=n.firstChild;if(e&&e===n.lastChild&&3===e.nodeType)return void(e.nodeValue=t)}n.textContent=t}function re(n,t){n=n.style;for(var e in t)if(t.hasOwnProperty(e)){var r=0===e.indexOf("--"),o=e,a=t[e];o=null==a||"boolean"===typeof a||""===a?"":r||"number"!==typeof a||0===a||Jo.hasOwnProperty(o)&&Jo[o]?(""+a).trim():a+"px","float"===e&&(e="cssFloat"),r?n.setProperty(e,o):n[e]=o}}function oe(n,t,e){t&&(ta[n]&&(null!=t.children||null!=t.dangerouslySetInnerHTML)&&r("137",n,e()),null!=t.dangerouslySetInnerHTML&&(null!=t.children&&r("60"),"object"===typeof t.dangerouslySetInnerHTML&&"__html"in t.dangerouslySetInnerHTML||r("61")),null!=t.style&&"object"!==typeof t.style&&r("62",e()))}function ae(n,t){if(-1===n.indexOf("-"))return"string"===typeof t.is;switch(n){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function ue(n,t){n=9===n.nodeType||11===n.nodeType?n:n.ownerDocument;var e=An(n);t=Ye[t];for(var r=0;r<t.length;r++){var o=t[r];e.hasOwnProperty(o)&&e[o]||("topScroll"===o?_n("topScroll","scroll",n):"topFocus"===o||"topBlur"===o?(_n("topFocus","focus",n),_n("topBlur","blur",n),e.topBlur=!0,e.topFocus=!0):"topCancel"===o?(en("cancel",!0)&&_n("topCancel","cancel",n),e.topCancel=!0):"topClose"===o?(en("close",!0)&&_n("topClose","close",n),e.topClose=!0):Gr.hasOwnProperty(o)&&Tn(o,Gr[o],n),e[o]=!0)}}function ie(n,t,e,r){return e=9===e.nodeType?e:e.ownerDocument,r===ea&&(r=ne(n)),r===ea?"script"===n?(n=e.createElement("div"),n.innerHTML="<script><\/script>",n=n.removeChild(n.firstChild)):n="string"===typeof t.is?e.createElement(n,{is:t.is}):e.createElement(n):n=e.createElementNS(r,n),n}function ce(n,t){return(9===t.nodeType?t:t.ownerDocument).createTextNode(n)}function de(n,t,e,r){var o=ae(t,e);switch(t){case"iframe":case"object":Tn("topLoad","load",n);var a=e;break;case"video":case"audio":for(a in oa)oa.hasOwnProperty(a)&&Tn(a,oa[a],n);a=e;break;case"source":Tn("topError","error",n),a=e;break;case"img":case"image":Tn("topError","error",n),Tn("topLoad","load",n),a=e;break;case"form":Tn("topReset","reset",n),Tn("topSubmit","submit",n),a=e;break;case"details":Tn("topToggle","toggle",n),a=e;break;case"input":Bt(n,e),a=Ht(n,e),Tn("topInvalid","invalid",n),ue(r,"onChange");break;case"option":a=qt(n,e);break;case"select":Gt(n,e),a=xe({},e,{value:void 0}),Tn("topInvalid","invalid",n),ue(r,"onChange");break;case"textarea":Xt(n,e),a=Yt(n,e),Tn("topInvalid","invalid",n),ue(r,"onChange");break;default:a=e}oe(t,a,ra);var u,i=a;for(u in i)if(i.hasOwnProperty(u)){var c=i[u];"style"===u?re(n,c,ra):"dangerouslySetInnerHTML"===u?null!=(c=c?c.__html:void 0)&&Zo(n,c):"children"===u?"string"===typeof c?("textarea"!==t||""!==c)&&ee(n,c):"number"===typeof c&&ee(n,""+c):"suppressContentEditableWarning"!==u&&"suppressHydrationWarning"!==u&&"autoFocus"!==u&&(Ge.hasOwnProperty(u)?null!=c&&ue(r,u):o?Lt(n,u,c):null!=c&&Ft(n,u,c))}switch(t){case"input":an(n),Kt(n,e);break;case"textarea":an(n),Jt(n,e);break;case"option":null!=e.value&&n.setAttribute("value",e.value);break;case"select":n.multiple=!!e.multiple,t=e.value,null!=t?$t(n,!!e.multiple,t,!1):null!=e.defaultValue&&$t(n,!!e.multiple,e.defaultValue,!0);break;default:"function"===typeof a.onClick&&(n.onclick=ge)}}function fe(n,t,e,r,o){var a=null;switch(t){case"input":e=Ht(n,e),r=Ht(n,r),a=[];break;case"option":e=qt(n,e),r=qt(n,r),a=[];break;case"select":e=xe({},e,{value:void 0}),r=xe({},r,{value:void 0}),a=[];break;case"textarea":e=Yt(n,e),r=Yt(n,r),a=[];break;default:"function"!==typeof e.onClick&&"function"===typeof r.onClick&&(n.onclick=ge)}oe(t,r,ra);var u,i;n=null;for(u in e)if(!r.hasOwnProperty(u)&&e.hasOwnProperty(u)&&null!=e[u])if("style"===u)for(i in t=e[u])t.hasOwnProperty(i)&&(n||(n={}),n[i]="");else"dangerouslySetInnerHTML"!==u&&"children"!==u&&"suppressContentEditableWarning"!==u&&"suppressHydrationWarning"!==u&&"autoFocus"!==u&&(Ge.hasOwnProperty(u)?a||(a=[]):(a=a||[]).push(u,null));for(u in r){var c=r[u];if(t=null!=e?e[u]:void 0,r.hasOwnProperty(u)&&c!==t&&(null!=c||null!=t))if("style"===u)if(t){for(i in t)!t.hasOwnProperty(i)||c&&c.hasOwnProperty(i)||(n||(n={}),n[i]="");for(i in c)c.hasOwnProperty(i)&&t[i]!==c[i]&&(n||(n={}),n[i]=c[i])}else n||(a||(a=[]),a.push(u,n)),n=c;else"dangerouslySetInnerHTML"===u?(c=c?c.__html:void 0,t=t?t.__html:void 0,null!=c&&t!==c&&(a=a||[]).push(u,""+c)):"children"===u?t===c||"string"!==typeof c&&"number"!==typeof c||(a=a||[]).push(u,""+c):"suppressContentEditableWarning"!==u&&"suppressHydrationWarning"!==u&&(Ge.hasOwnProperty(u)?(null!=c&&ue(o,u),a||t===c||(a=[])):(a=a||[]).push(u,c))}return n&&(a=a||[]).push("style",n),a}function me(n,t,e,r,o){"input"===e&&"radio"===o.type&&null!=o.name&&zt(n,o),ae(e,r),r=ae(e,o);for(var a=0;a<t.length;a+=2){var u=t[a],i=t[a+1];"style"===u?re(n,i,ra):"dangerouslySetInnerHTML"===u?Zo(n,i):"children"===u?ee(n,i):r?null!=i?Lt(n,u,i):n.removeAttribute(u):null!=i?Ft(n,u,i):jt(n,u)}switch(e){case"input":Vt(n,o);break;case"textarea":Zt(n,o);break;case"select":n._wrapperState.initialValue=void 0,t=n._wrapperState.wasMultiple,n._wrapperState.wasMultiple=!!o.multiple,e=o.value,null!=e?$t(n,!!o.multiple,e,!1):t!==!!o.multiple&&(null!=o.defaultValue?$t(n,!!o.multiple,o.defaultValue,!0):$t(n,!!o.multiple,o.multiple?[]:"",!1))}}function le(n,t,e,r,o){switch(t){case"iframe":case"object":Tn("topLoad","load",n);break;case"video":case"audio":for(var a in oa)oa.hasOwnProperty(a)&&Tn(a,oa[a],n);break;case"source":Tn("topError","error",n);break;case"img":case"image":Tn("topError","error",n),Tn("topLoad","load",n);break;case"form":Tn("topReset","reset",n),Tn("topSubmit","submit",n);break;case"details":Tn("topToggle","toggle",n);break;case"input":Bt(n,e),Tn("topInvalid","invalid",n),ue(o,"onChange");break;case"select":Gt(n,e),Tn("topInvalid","invalid",n),ue(o,"onChange");break;case"textarea":Xt(n,e),Tn("topInvalid","invalid",n),ue(o,"onChange")}oe(t,e,ra),r=null;for(var u in e)e.hasOwnProperty(u)&&(a=e[u],"children"===u?"string"===typeof a?n.textContent!==a&&(r=["children",a]):"number"===typeof a&&n.textContent!==""+a&&(r=["children",""+a]):Ge.hasOwnProperty(u)&&null!=a&&ue(o,u));switch(t){case"input":an(n),Kt(n,e);break;case"textarea":an(n),Jt(n,e);break;case"select":case"option":break;default:"function"===typeof e.onClick&&(n.onclick=ge)}return r}function he(n,t){return n.nodeValue!==t}function se(n){return!(!n||1!==n.nodeType&&9!==n.nodeType&&11!==n.nodeType&&(8!==n.nodeType||" react-mount-point-unstable "!==n.nodeValue))}function pe(n){return!(!(n=n?9===n.nodeType?n.documentElement:n.firstChild:null)||1!==n.nodeType||!n.hasAttribute("data-reactroot"))}function Me(n,t,e,o,a){se(e)||r("200");var u=e._reactRootContainer;if(u)ca.updateContainer(t,u,n,a);else{if(!(o=o||pe(e)))for(u=void 0;u=e.lastChild;)e.removeChild(u);var i=ca.createContainer(e,o);u=e._reactRootContainer=i,ca.unbatchedUpdates(function(){ca.updateContainer(t,i,n,a)})}return ca.getPublicRootInstance(u)}function ve(n,t){var e=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;return se(t)||r("200"),At(n,t,null,e)}function Ne(n,t){this._reactRootContainer=ca.createContainer(n,t)}var Ce=e(1),ye=e(16),xe=e(0),ge=e(2),Ie=e(17),be=e(18),Re=e(19),Ue=e(20),Qe=e(23),we=e(4);Ce||r("227");var ke={children:!0,dangerouslySetInnerHTML:!0,defaultValue:!0,defaultChecked:!0,innerHTML:!0,suppressContentEditableWarning:!0,suppressHydrationWarning:!0,style:!0},Ee={MUST_USE_PROPERTY:1,HAS_BOOLEAN_VALUE:4,HAS_NUMERIC_VALUE:8,HAS_POSITIVE_NUMERIC_VALUE:24,HAS_OVERLOADED_BOOLEAN_VALUE:32,HAS_STRING_BOOLEAN_VALUE:64,injectDOMPropertyConfig:function(n){var t=Ee,e=n.Properties||{},a=n.DOMAttributeNamespaces||{},u=n.DOMAttributeNames||{};n=n.DOMMutationMethods||{};for(var i in e){Te.hasOwnProperty(i)&&r("48",i);var c=i.toLowerCase(),d=e[i];c={attributeName:c,attributeNamespace:null,propertyName:i,mutationMethod:null,mustUseProperty:o(d,t.MUST_USE_PROPERTY),hasBooleanValue:o(d,t.HAS_BOOLEAN_VALUE),hasNumericValue:o(d,t.HAS_NUMERIC_VALUE),hasPositiveNumericValue:o(d,t.HAS_POSITIVE_NUMERIC_VALUE),hasOverloadedBooleanValue:o(d,t.HAS_OVERLOADED_BOOLEAN_VALUE),hasStringBooleanValue:o(d,t.HAS_STRING_BOOLEAN_VALUE)},1>=c.hasBooleanValue+c.hasNumericValue+c.hasOverloadedBooleanValue||r("50",i),u.hasOwnProperty(i)&&(c.attributeName=u[i]),a.hasOwnProperty(i)&&(c.attributeNamespace=a[i]),n.hasOwnProperty(i)&&(c.mutationMethod=n[i]),Te[i]=c}}},Te={},_e=Ee,Se=_e.MUST_USE_PROPERTY,Pe=_e.HAS_BOOLEAN_VALUE,Oe=_e.HAS_NUMERIC_VALUE,Ae=_e.HAS_POSITIVE_NUMERIC_VALUE,De=_e.HAS_OVERLOADED_BOOLEAN_VALUE,Fe=_e.HAS_STRING_BOOLEAN_VALUE,Le={Properties:{allowFullScreen:Pe,async:Pe,autoFocus:Pe,autoPlay:Pe,capture:De,checked:Se|Pe,cols:Ae,contentEditable:Fe,controls:Pe,default:Pe,defer:Pe,disabled:Pe,download:De,draggable:Fe,formNoValidate:Pe,hidden:Pe,loop:Pe,multiple:Se|Pe,muted:Se|Pe,noValidate:Pe,open:Pe,playsInline:Pe,readOnly:Pe,required:Pe,reversed:Pe,rows:Ae,rowSpan:Oe,scoped:Pe,seamless:Pe,selected:Se|Pe,size:Ae,start:Oe,span:Ae,spellCheck:Fe,style:0,tabIndex:0,itemScope:Pe,acceptCharset:0,className:0,htmlFor:0,httpEquiv:0,value:Fe},DOMAttributeNames:{acceptCharset:"accept-charset",className:"class",htmlFor:"for",httpEquiv:"http-equiv"},DOMMutationMethods:{value:function(n,t){if(null==t)return n.removeAttribute("value");"number"!==n.type||!1===n.hasAttribute("value")?n.setAttribute("value",""+t):n.validity&&!n.validity.badInput&&n.ownerDocument.activeElement!==n&&n.setAttribute("value",""+t)}}},je=_e.HAS_STRING_BOOLEAN_VALUE,He={xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace"},Be={Properties:{autoReverse:je,externalResourcesRequired:je,preserveAlpha:je},DOMAttributeNames:{autoReverse:"autoReverse",externalResourcesRequired:"externalResourcesRequired",preserveAlpha:"preserveAlpha"},DOMAttributeNamespaces:{xlinkActuate:He.xlink,xlinkArcrole:He.xlink,xlinkHref:He.xlink,xlinkRole:He.xlink,xlinkShow:He.xlink,xlinkTitle:He.xlink,xlinkType:He.xlink,xmlBase:He.xml,xmlLang:He.xml,xmlSpace:He.xml}},ze=/[\-\:]([a-z])/g;"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode x-height xlink:actuate xlink:arcrole xlink:href xlink:role xlink:show xlink:title xlink:type xml:base xmlns:xlink xml:lang xml:space".split(" ").forEach(function(n){var t=n.replace(ze,i);Be.Properties[t]=0,Be.DOMAttributeNames[t]=n}),_e.injectDOMPropertyConfig(Le),_e.injectDOMPropertyConfig(Be);var Ve={_caughtError:null,_hasCaughtError:!1,_rethrowError:null,_hasRethrowError:!1,injection:{injectErrorUtils:function(n){"function"!==typeof n.invokeGuardedCallback&&r("197"),c=n.invokeGuardedCallback}},invokeGuardedCallback:function(n,t,e,r,o,a,u,i,d){c.apply(Ve,arguments)},invokeGuardedCallbackAndCatchFirstError:function(n,t,e,r,o,a,u,i,c){if(Ve.invokeGuardedCallback.apply(this,arguments),Ve.hasCaughtError()){var d=Ve.clearCaughtError();Ve._hasRethrowError||(Ve._hasRethrowError=!0,Ve._rethrowError=d)}},rethrowCaughtError:function(){return d.apply(Ve,arguments)},hasCaughtError:function(){return Ve._hasCaughtError},clearCaughtError:function(){if(Ve._hasCaughtError){var n=Ve._caughtError;return Ve._caughtError=null,Ve._hasCaughtError=!1,n}r("198")}},Ke=null,We={},qe=[],$e={},Ge={},Ye={},Xe=Object.freeze({plugins:qe,eventNameDispatchConfigs:$e,registrationNameModules:Ge,registrationNameDependencies:Ye,possibleRegistrationNames:null,injectEventPluginOrder:l,injectEventPluginsByName:h}),Ze=null,Je=null,nr=null,tr=null,er={injectEventPluginOrder:l,injectEventPluginsByName:h},rr=Object.freeze({injection:er,getListener:y,extractEvents:x,enqueueEvents:g,processEventQueue:I}),or=Math.random().toString(36).slice(2),ar="__reactInternalInstance$"+or,ur="__reactEventHandlers$"+or,ir=Object.freeze({precacheFiberNode:function(n,t){t[ar]=n},getClosestInstanceFromNode:b,getInstanceFromNode:function(n){return n=n[ar],!n||5!==n.tag&&6!==n.tag?null:n},getNodeFromInstance:R,getFiberCurrentPropsFromNode:U,updateFiberProps:function(n,t){n[ur]=t}}),cr=Object.freeze({accumulateTwoPhaseDispatches:P,accumulateTwoPhaseDispatchesSkipTarget:function(n){M(n,T)},accumulateEnterLeaveDispatches:O,accumulateDirectDispatches:function(n){M(n,S)}}),dr=null,fr={_root:null,_startText:null,_fallbackText:null},mr="dispatchConfig _targetInst nativeEvent isDefaultPrevented isPropagationStopped _dispatchListeners _dispatchInstances".split(" "),lr={type:null,target:null,currentTarget:ge.thatReturnsNull,eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(n){return n.timeStamp||Date.now()},defaultPrevented:null,isTrusted:null};xe(L.prototype,{preventDefault:function(){this.defaultPrevented=!0;var n=this.nativeEvent;n&&(n.preventDefault?n.preventDefault():"unknown"!==typeof n.returnValue&&(n.returnValue=!1),this.isDefaultPrevented=ge.thatReturnsTrue)},stopPropagation:function(){var n=this.nativeEvent;n&&(n.stopPropagation?n.stopPropagation():"unknown"!==typeof n.cancelBubble&&(n.cancelBubble=!0),this.isPropagationStopped=ge.thatReturnsTrue)},persist:function(){this.isPersistent=ge.thatReturnsTrue},isPersistent:ge.thatReturnsFalse,destructor:function(){var n,t=this.constructor.Interface;for(n in t)this[n]=null;for(t=0;t<mr.length;t++)this[mr[t]]=null}}),L.Interface=lr,L.augmentClass=function(n,t){function e(){}e.prototype=this.prototype;var r=new e;xe(r,n.prototype),n.prototype=r,n.prototype.constructor=n,n.Interface=xe({},this.Interface,t),n.augmentClass=this.augmentClass,B(n)},B(L),L.augmentClass(z,{data:null}),L.augmentClass(V,{data:null});var hr=[9,13,27,32],sr=ye.canUseDOM&&"CompositionEvent"in window,pr=null;ye.canUseDOM&&"documentMode"in document&&(pr=document.documentMode);var Mr;if(Mr=ye.canUseDOM&&"TextEvent"in window&&!pr){var vr=window.opera;Mr=!("object"===typeof vr&&"function"===typeof vr.version&&12>=parseInt(vr.version(),10))}var Nr,Cr=Mr,yr=ye.canUseDOM&&(!sr||pr&&8<pr&&11>=pr),xr=String.fromCharCode(32),gr={beforeInput:{phasedRegistrationNames:{bubbled:"onBeforeInput",captured:"onBeforeInputCapture"},dependencies:["topCompositionEnd","topKeyPress","topTextInput","topPaste"]},compositionEnd:{phasedRegistrationNames:{bubbled:"onCompositionEnd",captured:"onCompositionEndCapture"},dependencies:"topBlur topCompositionEnd topKeyDown topKeyPress topKeyUp topMouseDown".split(" ")},compositionStart:{phasedRegistrationNames:{bubbled:"onCompositionStart",captured:"onCompositionStartCapture"},dependencies:"topBlur topCompositionStart topKeyDown topKeyPress topKeyUp topMouseDown".split(" ")},compositionUpdate:{phasedRegistrationNames:{bubbled:"onCompositionUpdate",captured:"onCompositionUpdateCapture"},dependencies:"topBlur topCompositionUpdate topKeyDown topKeyPress topKeyUp topMouseDown".split(" ")}},Ir=!1,br=!1,Rr={eventTypes:gr,extractEvents:function(n,t,e,r){var o;if(sr)n:{switch(n){case"topCompositionStart":var a=gr.compositionStart;break n;case"topCompositionEnd":a=gr.compositionEnd;break n;case"topCompositionUpdate":a=gr.compositionUpdate;break n}a=void 0}else br?K(n,e)&&(a=gr.compositionEnd):"topKeyDown"===n&&229===e.keyCode&&(a=gr.compositionStart);return a?(yr&&(br||a!==gr.compositionStart?a===gr.compositionEnd&&br&&(o=D()):(fr._root=r,fr._startText=F(),br=!0)),a=z.getPooled(a,t,e,r),o?a.data=o:null!==(o=W(e))&&(a.data=o),P(a),o=a):o=null,(n=Cr?q(n,e):$(n,e))?(t=V.getPooled(gr.beforeInput,t,e,r),t.data=n,P(t)):t=null,[o,t]}},Ur=null,Qr=null,wr=null,kr={injectFiberControlledHostComponent:function(n){Ur=n}},Er=Object.freeze({injection:kr,enqueueStateRestore:Y,restoreStateIfNeeded:X}),Tr=!1,_r={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};ye.canUseDOM&&(Nr=document.implementation&&document.implementation.hasFeature&&!0!==document.implementation.hasFeature("",""));var Sr={change:{phasedRegistrationNames:{bubbled:"onChange",captured:"onChangeCapture"},dependencies:"topBlur topChange topClick topFocus topInput topKeyDown topKeyUp topSelectionChange".split(" ")}},Pr=null,Or=null,Ar=!1;ye.canUseDOM&&(Ar=en("input")&&(!document.documentMode||9<document.documentMode));var Dr={eventTypes:Sr,_isInputEventSupported:Ar,extractEvents:function(n,t,e,r){var o=t?R(t):window,a=o.nodeName&&o.nodeName.toLowerCase();if("select"===a||"input"===a&&"file"===o.type)var u=mn;else if(nn(o))if(Ar)u=vn;else{u=pn;var i=sn}else!(a=o.nodeName)||"input"!==a.toLowerCase()||"checkbox"!==o.type&&"radio"!==o.type||(u=Mn);if(u&&(u=u(n,t)))return cn(u,e,r);i&&i(n,o,t),"topBlur"===n&&null!=t&&(n=t._wrapperState||o._wrapperState)&&n.controlled&&"number"===o.type&&(n=""+o.value,o.getAttribute("value")!==n&&o.setAttribute("value",n))}};L.augmentClass(Nn,{view:null,detail:null});var Fr={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};Nn.augmentClass(xn,{screenX:null,screenY:null,clientX:null,clientY:null,pageX:null,pageY:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,getModifierState:yn,button:null,buttons:null,relatedTarget:function(n){return n.relatedTarget||(n.fromElement===n.srcElement?n.toElement:n.fromElement)}});var Lr={mouseEnter:{registrationName:"onMouseEnter",dependencies:["topMouseOut","topMouseOver"]},mouseLeave:{registrationName:"onMouseLeave",dependencies:["topMouseOut","topMouseOver"]}},jr={eventTypes:Lr,extractEvents:function(n,t,e,r){if("topMouseOver"===n&&(e.relatedTarget||e.fromElement)||"topMouseOut"!==n&&"topMouseOver"!==n)return null;var o=r.window===r?r:(o=r.ownerDocument)?o.defaultView||o.parentWindow:window;if("topMouseOut"===n?(n=t,t=(t=e.relatedTarget||e.toElement)?b(t):null):n=null,n===t)return null;var a=null==n?o:R(n);o=null==t?o:R(t);var u=xn.getPooled(Lr.mouseLeave,n,e,r);return u.type="mouseleave",u.target=a,u.relatedTarget=o,e=xn.getPooled(Lr.mouseEnter,t,e,r),e.type="mouseenter",e.target=o,e.relatedTarget=a,O(u,e,n,t),[u,e]}},Hr=Ce.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,Br=[],zr=!0,Vr=void 0,Kr=Object.freeze({get _enabled(){return zr},get _handleTopLevel(){return Vr},setHandleTopLevel:function(n){Vr=n},setEnabled:En,isEnabled:function(){return zr},trapBubbledEvent:Tn,trapCapturedEvent:_n,dispatchEvent:Sn}),Wr={animationend:Pn("Animation","AnimationEnd"),animationiteration:Pn("Animation","AnimationIteration"),animationstart:Pn("Animation","AnimationStart"),transitionend:Pn("Transition","TransitionEnd")},qr={},$r={};ye.canUseDOM&&($r=document.createElement("div").style,"AnimationEvent"in window||(delete Wr.animationend.animation,delete Wr.animationiteration.animation,delete Wr.animationstart.animation),"TransitionEvent"in window||delete Wr.transitionend.transition);var Gr={topAbort:"abort",topAnimationEnd:On("animationend")||"animationend",topAnimationIteration:On("animationiteration")||"animationiteration",topAnimationStart:On("animationstart")||"animationstart",topBlur:"blur",topCancel:"cancel",topCanPlay:"canplay",topCanPlayThrough:"canplaythrough",topChange:"change",topClick:"click",topClose:"close",topCompositionEnd:"compositionend",topCompositionStart:"compositionstart",topCompositionUpdate:"compositionupdate",topContextMenu:"contextmenu",topCopy:"copy",topCut:"cut",topDoubleClick:"dblclick",topDrag:"drag",topDragEnd:"dragend",topDragEnter:"dragenter",topDragExit:"dragexit",topDragLeave:"dragleave",topDragOver:"dragover",topDragStart:"dragstart",topDrop:"drop",topDurationChange:"durationchange",topEmptied:"emptied",topEncrypted:"encrypted",topEnded:"ended",topError:"error",topFocus:"focus",topInput:"input",topKeyDown:"keydown",topKeyPress:"keypress",topKeyUp:"keyup",topLoadedData:"loadeddata",topLoad:"load",topLoadedMetadata:"loadedmetadata",topLoadStart:"loadstart",topMouseDown:"mousedown",topMouseMove:"mousemove",topMouseOut:"mouseout",topMouseOver:"mouseover",topMouseUp:"mouseup",topPaste:"paste",topPause:"pause",topPlay:"play",topPlaying:"playing",topProgress:"progress",topRateChange:"ratechange",topScroll:"scroll",topSeeked:"seeked",topSeeking:"seeking",topSelectionChange:"selectionchange",topStalled:"stalled",topSuspend:"suspend",topTextInput:"textInput",topTimeUpdate:"timeupdate",topToggle:"toggle",topTouchCancel:"touchcancel",topTouchEnd:"touchend",topTouchMove:"touchmove",topTouchStart:"touchstart",topTransitionEnd:On("transitionend")||"transitionend",topVolumeChange:"volumechange",topWaiting:"waiting",topWheel:"wheel"},Yr={},Xr=0,Zr="_reactListenersID"+(""+Math.random()).slice(2),Jr=ye.canUseDOM&&"documentMode"in document&&11>=document.documentMode,no={select:{phasedRegistrationNames:{bubbled:"onSelect",captured:"onSelectCapture"},dependencies:"topBlur topContextMenu topFocus topKeyDown topKeyUp topMouseDown topMouseUp topSelectionChange".split(" ")}},to=null,eo=null,ro=null,oo=!1,ao={eventTypes:no,extractEvents:function(n,t,e,r){var o,a=r.window===r?r.document:9===r.nodeType?r:r.ownerDocument;if(!(o=!a)){n:{a=An(a),o=Ye.onSelect;for(var u=0;u<o.length;u++){var i=o[u];if(!a.hasOwnProperty(i)||!a[i]){a=!1;break n}}a=!0}o=!a}if(o)return null;switch(a=t?R(t):window,n){case"topFocus":(nn(a)||"true"===a.contentEditable)&&(to=a,eo=t,ro=null);break;case"topBlur":ro=eo=to=null;break;case"topMouseDown":oo=!0;break;case"topContextMenu":case"topMouseUp":return oo=!1,jn(e,r);case"topSelectionChange":if(Jr)break;case"topKeyDown":case"topKeyUp":return jn(e,r)}return null}};L.augmentClass(Hn,{animationName:null,elapsedTime:null,pseudoElement:null}),L.augmentClass(Bn,{clipboardData:function(n){return"clipboardData"in n?n.clipboardData:window.clipboardData}}),Nn.augmentClass(zn,{relatedTarget:null});var uo={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},io={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"};Nn.augmentClass(Kn,{key:function(n){if(n.key){var t=uo[n.key]||n.key;if("Unidentified"!==t)return t}return"keypress"===n.type?(n=Vn(n),13===n?"Enter":String.fromCharCode(n)):"keydown"===n.type||"keyup"===n.type?io[n.keyCode]||"Unidentified":""},location:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,repeat:null,locale:null,getModifierState:yn,charCode:function(n){return"keypress"===n.type?Vn(n):0},keyCode:function(n){return"keydown"===n.type||"keyup"===n.type?n.keyCode:0},which:function(n){return"keypress"===n.type?Vn(n):"keydown"===n.type||"keyup"===n.type?n.keyCode:0}}),xn.augmentClass(Wn,{dataTransfer:null}),Nn.augmentClass(qn,{touches:null,targetTouches:null,changedTouches:null,altKey:null,metaKey:null,ctrlKey:null,shiftKey:null,getModifierState:yn}),L.augmentClass($n,{propertyName:null,elapsedTime:null,pseudoElement:null}),xn.augmentClass(Gn,{deltaX:function(n){return"deltaX"in n?n.deltaX:"wheelDeltaX"in n?-n.wheelDeltaX:0},deltaY:function(n){return"deltaY"in n?n.deltaY:"wheelDeltaY"in n?-n.wheelDeltaY:"wheelDelta"in n?-n.wheelDelta:0},deltaZ:null,deltaMode:null});var co={},fo={};"abort animationEnd animationIteration animationStart blur cancel canPlay canPlayThrough click close contextMenu copy cut doubleClick drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error focus input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing progress rateChange reset scroll seeked seeking stalled submit suspend timeUpdate toggle touchCancel touchEnd touchMove touchStart transitionEnd volumeChange waiting wheel".split(" ").forEach(function(n){var t=n[0].toUpperCase()+n.slice(1),e="on"+t;t="top"+t,e={phasedRegistrationNames:{bubbled:e,captured:e+"Capture"},dependencies:[t]},co[n]=e,fo[t]=e});var mo={eventTypes:co,extractEvents:function(n,t,e,r){var o=fo[n];if(!o)return null;switch(n){case"topKeyPress":if(0===Vn(e))return null;case"topKeyDown":case"topKeyUp":n=Kn;break;case"topBlur":case"topFocus":n=zn;break;case"topClick":if(2===e.button)return null;case"topDoubleClick":case"topMouseDown":case"topMouseMove":case"topMouseUp":case"topMouseOut":case"topMouseOver":case"topContextMenu":n=xn;break;case"topDrag":case"topDragEnd":case"topDragEnter":case"topDragExit":case"topDragLeave":case"topDragOver":case"topDragStart":case"topDrop":n=Wn;break;case"topTouchCancel":case"topTouchEnd":case"topTouchMove":case"topTouchStart":n=qn;break;case"topAnimationEnd":case"topAnimationIteration":case"topAnimationStart":n=Hn;break;case"topTransitionEnd":n=$n;break;case"topScroll":n=Nn;break;case"topWheel":n=Gn;break;case"topCopy":case"topCut":case"topPaste":n=Bn;break;default:n=L}return t=n.getPooled(o,t,e,r),P(t),t}};Vr=function(n,t,e,r){n=x(n,t,e,r),g(n),I(!1)},er.injectEventPluginOrder("ResponderEventPlugin SimpleEventPlugin TapEventPlugin EnterLeaveEventPlugin ChangeEventPlugin SelectEventPlugin BeforeInputEventPlugin".split(" ")),Ze=ir.getFiberCurrentPropsFromNode,Je=ir.getInstanceFromNode,nr=ir.getNodeFromInstance,er.injectEventPluginsByName({SimpleEventPlugin:mo,EnterLeaveEventPlugin:jr,ChangeEventPlugin:Dr,SelectEventPlugin:ao,BeforeInputEventPlugin:Rr});var lo=[],ho=-1;new Set;var so={current:we},po={current:!1},Mo=we,vo=null,No=null,Co="function"===typeof Symbol&&Symbol.for,yo=Co?Symbol.for("react.element"):60103,xo=Co?Symbol.for("react.call"):60104,go=Co?Symbol.for("react.return"):60105,Io=Co?Symbol.for("react.portal"):60106,bo=Co?Symbol.for("react.fragment"):60107,Ro="function"===typeof Symbol&&Symbol.iterator,Uo=Array.isArray,Qo=wt(!0),wo=wt(!1),ko={},Eo=Object.freeze({default:Ot}),To=Eo&&Ot||Eo,_o=To.default?To.default:To,So="object"===typeof performance&&"function"===typeof performance.now,Po=void 0;Po=So?function(){return performance.now()}:function(){return Date.now()};var Oo=void 0,Ao=void 0;if(ye.canUseDOM)if("function"!==typeof requestIdleCallback||"function"!==typeof cancelIdleCallback){var Do,Fo=null,Lo=!1,jo=-1,Ho=!1,Bo=0,zo=33,Vo=33;Do=So?{didTimeout:!1,timeRemaining:function(){var n=Bo-performance.now();return 0<n?n:0}}:{didTimeout:!1,timeRemaining:function(){var n=Bo-Date.now();return 0<n?n:0}};var Ko="__reactIdleCallback$"+Math.random().toString(36).slice(2);window.addEventListener("message",function(n){if(n.source===window&&n.data===Ko){if(Lo=!1,n=Po(),0>=Bo-n){if(!(-1!==jo&&jo<=n))return void(Ho||(Ho=!0,requestAnimationFrame(Wo)));Do.didTimeout=!0}else Do.didTimeout=!1;jo=-1,n=Fo,Fo=null,null!==n&&n(Do)}},!1);var Wo=function(n){Ho=!1;var t=n-Bo+Vo;t<Vo&&zo<Vo?(8>t&&(t=8),Vo=t<zo?zo:t):zo=t,Bo=n+Vo,Lo||(Lo=!0,window.postMessage(Ko,"*"))};Oo=function(n,t){return Fo=n,null!=t&&"number"===typeof t.timeout&&(jo=Po()+t.timeout),Ho||(Ho=!0,requestAnimationFrame(Wo)),0},Ao=function(){Fo=null,Lo=!1,jo=-1}}else Oo=window.requestIdleCallback,Ao=window.cancelIdleCallback;else Oo=function(n){return setTimeout(function(){n({timeRemaining:function(){return 1/0}})})},Ao=function(n){clearTimeout(n)};var qo=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,$o={},Go={},Yo={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"},Xo=void 0,Zo=function(n){return"undefined"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(t,e,r,o){MSApp.execUnsafeLocalFunction(function(){return n(t,e)})}:n}(function(n,t){if(n.namespaceURI!==Yo.svg||"innerHTML"in n)n.innerHTML=t;else{for(Xo=Xo||document.createElement("div"),Xo.innerHTML="<svg>"+t+"</svg>",t=Xo.firstChild;n.firstChild;)n.removeChild(n.firstChild);for(;t.firstChild;)n.appendChild(t.firstChild)}}),Jo={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},na=["Webkit","ms","Moz","O"];Object.keys(Jo).forEach(function(n){na.forEach(function(t){t=t+n.charAt(0).toUpperCase()+n.substring(1),Jo[t]=Jo[n]})});var ta=xe({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0}),ea=Yo.html,ra=ge.thatReturns(""),oa={topAbort:"abort",topCanPlay:"canplay",topCanPlayThrough:"canplaythrough",topDurationChange:"durationchange",topEmptied:"emptied",topEncrypted:"encrypted",topEnded:"ended",topError:"error",topLoadedData:"loadeddata",topLoadedMetadata:"loadedmetadata",topLoadStart:"loadstart",topPause:"pause",topPlay:"play",topPlaying:"playing",topProgress:"progress",topRateChange:"ratechange",topSeeked:"seeked",topSeeking:"seeking",topStalled:"stalled",topSuspend:"suspend",topTimeUpdate:"timeupdate",topVolumeChange:"volumechange",topWaiting:"waiting"},aa=Object.freeze({createElement:ie,createTextNode:ce,setInitialProperties:de,diffProperties:fe,updateProperties:me,diffHydratedProperties:le,diffHydratedText:he,warnForUnmatchedText:function(){},warnForDeletedHydratableElement:function(){},warnForDeletedHydratableText:function(){},warnForInsertedHydratedElement:function(){},warnForInsertedHydratedText:function(){},restoreControlledState:function(n,t,e){switch(t){case"input":if(Vt(n,e),t=e.name,"radio"===e.type&&null!=t){for(e=n;e.parentNode;)e=e.parentNode;for(e=e.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<e.length;t++){var o=e[t];if(o!==n&&o.form===n.form){var a=U(o);a||r("90"),un(o),Vt(o,a)}}}break;case"textarea":Zt(n,e);break;case"select":null!=(t=e.value)&&$t(n,!!e.multiple,t,!1)}}});kr.injectFiberControlledHostComponent(aa);var ua=null,ia=null,ca=_o({getRootHostContext:function(n){var t=n.nodeType;switch(t){case 9:case 11:n=(n=n.documentElement)?n.namespaceURI:te(null,"");break;default:t=8===t?n.parentNode:n,n=t.namespaceURI||null,t=t.tagName,n=te(n,t)}return n},getChildHostContext:function(n,t){return te(n,t)},getPublicInstance:function(n){return n},prepareForCommit:function(){ua=zr;var n=be();if(Ln(n)){if("selectionStart"in n)var t={start:n.selectionStart,end:n.selectionEnd};else n:{var e=window.getSelection&&window.getSelection();if(e&&0!==e.rangeCount){t=e.anchorNode;var r=e.anchorOffset,o=e.focusNode;e=e.focusOffset;try{t.nodeType,o.nodeType}catch(n){t=null;break n}var a=0,u=-1,i=-1,c=0,d=0,f=n,m=null;t:for(;;){for(var l;f!==t||0!==r&&3!==f.nodeType||(u=a+r),f!==o||0!==e&&3!==f.nodeType||(i=a+e),3===f.nodeType&&(a+=f.nodeValue.length),null!==(l=f.firstChild);)m=f,f=l;for(;;){if(f===n)break t;if(m===t&&++c===r&&(u=a),m===o&&++d===e&&(i=a),null!==(l=f.nextSibling))break;f=m,m=f.parentNode}f=l}t=-1===u||-1===i?null:{start:u,end:i}}else t=null}t=t||{start:0,end:0}}else t=null;ia={focusedElem:n,selectionRange:t},En(!1)},resetAfterCommit:function(){var n=ia,t=be(),e=n.focusedElem,r=n.selectionRange;if(t!==e&&Ue(document.documentElement,e)){if(Ln(e))if(t=r.start,n=r.end,void 0===n&&(n=t),"selectionStart"in e)e.selectionStart=t,e.selectionEnd=Math.min(n,e.value.length);else if(window.getSelection){t=window.getSelection();var o=e[A()].length;n=Math.min(r.start,o),r=void 0===r.end?n:Math.min(r.end,o),!t.extend&&n>r&&(o=r,r=n,n=o),o=Fn(e,n);var a=Fn(e,r);if(o&&a&&(1!==t.rangeCount||t.anchorNode!==o.node||t.anchorOffset!==o.offset||t.focusNode!==a.node||t.focusOffset!==a.offset)){var u=document.createRange();u.setStart(o.node,o.offset),t.removeAllRanges(),n>r?(t.addRange(u),t.extend(a.node,a.offset)):(u.setEnd(a.node,a.offset),t.addRange(u))}}for(t=[],n=e;n=n.parentNode;)1===n.nodeType&&t.push({element:n,left:n.scrollLeft,top:n.scrollTop});for(Qe(e),e=0;e<t.length;e++)n=t[e],n.element.scrollLeft=n.left,n.element.scrollTop=n.top}ia=null,En(ua),ua=null},createInstance:function(n,t,e,r,o){return n=ie(n,t,e,r),n[ar]=o,n[ur]=t,n},appendInitialChild:function(n,t){n.appendChild(t)},finalizeInitialChildren:function(n,t,e,r){de(n,t,e,r);n:{switch(t){case"button":case"input":case"select":case"textarea":n=!!e.autoFocus;break n}n=!1}return n},prepareUpdate:function(n,t,e,r,o){return fe(n,t,e,r,o)},shouldSetTextContent:function(n,t){return"textarea"===n||"string"===typeof t.children||"number"===typeof t.children||"object"===typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&"string"===typeof t.dangerouslySetInnerHTML.__html},shouldDeprioritizeSubtree:function(n,t){return!!t.hidden},createTextInstance:function(n,t,e,r){return n=ce(n,t),n[ar]=r,n},now:Po,mutation:{commitMount:function(n){n.focus()},commitUpdate:function(n,t,e,r,o){n[ur]=o,me(n,t,e,r,o)},resetTextContent:function(n){n.textContent=""},commitTextUpdate:function(n,t,e){n.nodeValue=e},appendChild:function(n,t){n.appendChild(t)},appendChildToContainer:function(n,t){8===n.nodeType?n.parentNode.insertBefore(t,n):n.appendChild(t)},insertBefore:function(n,t,e){n.insertBefore(t,e)},insertInContainerBefore:function(n,t,e){8===n.nodeType?n.parentNode.insertBefore(t,e):n.insertBefore(t,e)},removeChild:function(n,t){n.removeChild(t)},removeChildFromContainer:function(n,t){8===n.nodeType?n.parentNode.removeChild(t):n.removeChild(t)}},hydration:{canHydrateInstance:function(n,t){return 1!==n.nodeType||t.toLowerCase()!==n.nodeName.toLowerCase()?null:n},canHydrateTextInstance:function(n,t){return""===t||3!==n.nodeType?null:n},getNextHydratableSibling:function(n){for(n=n.nextSibling;n&&1!==n.nodeType&&3!==n.nodeType;)n=n.nextSibling;return n},getFirstHydratableChild:function(n){for(n=n.firstChild;n&&1!==n.nodeType&&3!==n.nodeType;)n=n.nextSibling;return n},hydrateInstance:function(n,t,e,r,o,a){return n[ar]=a,n[ur]=e,le(n,t,e,o,r)},hydrateTextInstance:function(n,t,e){return n[ar]=e,he(n,t)},didNotMatchHydratedContainerTextInstance:function(){},didNotMatchHydratedTextInstance:function(){},didNotHydrateContainerInstance:function(){},didNotHydrateInstance:function(){},didNotFindHydratableContainerInstance:function(){},didNotFindHydratableContainerTextInstance:function(){},didNotFindHydratableInstance:function(){},didNotFindHydratableTextInstance:function(){}},scheduleDeferredCallback:Oo,cancelDeferredCallback:Ao,useSyncScheduling:!0});Z=ca.batchedUpdates,Ne.prototype.render=function(n,t){ca.updateContainer(n,this._reactRootContainer,null,t)},Ne.prototype.unmount=function(n){ca.updateContainer(null,this._reactRootContainer,null,n)};var da={createPortal:ve,findDOMNode:function(n){if(null==n)return null;if(1===n.nodeType)return n;var t=n._reactInternalFiber;if(t)return ca.findHostInstance(t);"function"===typeof n.render?r("188"):r("213",Object.keys(n))},hydrate:function(n,t,e){return Me(null,n,t,!0,e)},render:function(n,t,e){return Me(null,n,t,!1,e)},unstable_renderSubtreeIntoContainer:function(n,t,e,o){return(null==n||void 0===n._reactInternalFiber)&&r("38"),Me(n,t,e,!1,o)},unmountComponentAtNode:function(n){return se(n)||r("40"),!!n._reactRootContainer&&(ca.unbatchedUpdates(function(){Me(null,null,n,!1,function(){n._reactRootContainer=null})}),!0)},unstable_createPortal:ve,unstable_batchedUpdates:J,unstable_deferredUpdates:ca.deferredUpdates,flushSync:ca.flushSync,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:{EventPluginHub:rr,EventPluginRegistry:Xe,EventPropagators:cr,ReactControlledComponent:Er,ReactDOMComponentTree:ir,ReactDOMEventListener:Kr}};ca.injectIntoDevTools({findFiberByHostInstance:b,bundleType:0,version:"16.2.0",rendererPackageName:"react-dom"});var fa=Object.freeze({default:da}),ma=fa&&da||fa;n.exports=ma.default?ma.default:ma},function(n,t,e){"use strict";var r=!("undefined"===typeof window||!window.document||!window.document.createElement),o={canUseDOM:r,canUseWorkers:"undefined"!==typeof Worker,canUseEventListeners:r&&!(!window.addEventListener&&!window.attachEvent),canUseViewport:r&&!!window.screen,isInWorker:!r};n.exports=o},function(n,t,e){"use strict";var r=e(2),o={listen:function(n,t,e){return n.addEventListener?(n.addEventListener(t,e,!1),{remove:function(){n.removeEventListener(t,e,!1)}}):n.attachEvent?(n.attachEvent("on"+t,e),{remove:function(){n.detachEvent("on"+t,e)}}):void 0},capture:function(n,t,e){return n.addEventListener?(n.addEventListener(t,e,!0),{remove:function(){n.removeEventListener(t,e,!0)}}):{remove:r}},registerDefault:function(){}};n.exports=o},function(n,t,e){"use strict";function r(n){if("undefined"===typeof(n=n||("undefined"!==typeof document?document:void 0)))return null;try{return n.activeElement||n.body}catch(t){return n.body}}n.exports=r},function(n,t,e){"use strict";function r(n,t){return n===t?0!==n||0!==t||1/n===1/t:n!==n&&t!==t}function o(n,t){if(r(n,t))return!0;if("object"!==typeof n||null===n||"object"!==typeof t||null===t)return!1;var e=Object.keys(n),o=Object.keys(t);if(e.length!==o.length)return!1;for(var u=0;u<e.length;u++)if(!a.call(t,e[u])||!r(n[e[u]],t[e[u]]))return!1;return!0}var a=Object.prototype.hasOwnProperty;n.exports=o},function(n,t,e){"use strict";function r(n,t){return!(!n||!t)&&(n===t||!o(n)&&(o(t)?r(n,t.parentNode):"contains"in n?n.contains(t):!!n.compareDocumentPosition&&!!(16&n.compareDocumentPosition(t))))}var o=e(21);n.exports=r},function(n,t,e){"use strict";function r(n){return o(n)&&3==n.nodeType}var o=e(22);n.exports=r},function(n,t,e){"use strict";function r(n){var t=n?n.ownerDocument||n:document,e=t.defaultView||window;return!(!n||!("function"===typeof e.Node?n instanceof e.Node:"object"===typeof n&&"number"===typeof n.nodeType&&"string"===typeof n.nodeName))}n.exports=r},function(n,t,e){"use strict";function r(n){try{n.focus()}catch(n){}}n.exports=r},function(n,t,e){"use strict";function r(n,t){if(!(n instanceof t))throw new TypeError("Cannot call a class as a function")}function o(n,t){if(!n)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!==typeof t&&"function"!==typeof t?n:t}function a(n,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);n.prototype=Object.create(t&&t.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(n,t):n.__proto__=t)}var u=e(1),i=e.n(u),c=e(25),d=e(26),f=e(27),m=function(){function n(n,t){for(var e=0;e<t.length;e++){var r=t[e];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(n,r.key,r)}}return function(t,e,r){return e&&n(t.prototype,e),r&&n(t,r),t}}(),l=function(n){function t(){return r(this,t),o(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return a(t,n),m(t,[{key:"render",value:function(){return i.a.createElement("div",{className:"App"},i.a.createElement("header",{className:"App-header"},i.a.createElement("h1",{className:"App-title"},"Welcome to React")),i.a.createElement("p",{className:"App-intro"},"To get started, edit ",i.a.createElement("code",null,"src/App.js")," and save to reload."))}}]),t}(u.Component);window.hitBreakpoint=function(){Object(c.b)(),Object(d.a)(),Object(f.a)(),console.log("hitting a breakpoint")},window.hitDebugStatement=function(){Object(c.a)(),console.log("hitting a debug statement")},t.a=l},function(n,t,e){"use strict";function r(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function o(){return Math.max(Math.random(),Math.random())}function a(){return Math.random()}function u(){return Math.random()}function i(){return isNaN(void 0)}function c(){return Math.max(Math.random(),Math.random())}function d(){return Math.max(Math.random(),Math.random())}function f(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function m(){return Math.max(Math.random(),Math.random())}function l(){return Math.max(Math.random(),Math.random())}function h(){return Math.max(Math.random(),Math.random())}function s(){return Math.max(Math.random(),Math.random())}function p(){r(),o(),a(),u(),i(),c(),d(),f(),m(),l(),h(),s()}function M(){return Math.max(Math.random(),Math.random())}function v(){return Math.random()}function N(){return Math.random()}function C(){return Math.max(Math.random(),Math.random())}function y(){return Math.random()}function x(){return isNaN(void 0)}function g(){return Math.max(Math.random(),Math.random())}function I(){return isNaN(void 0)}function b(){return Math.max(Math.random(),Math.random())}function R(){return Math.max(Math.random(),Math.random())}function U(){return Math.random()}function Q(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function w(){M(),v(),N(),C(),y(),x(),g(),I(),b(),R(),U(),Q()}function k(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function E(){return isNaN(void 0)}function T(){return isNaN(void 0)}function _(){return Math.max(Math.random(),Math.random())}function S(){return Math.random()}function P(){return Math.max(Math.random(),Math.random())}function O(){return Math.max(Math.random(),Math.random())}function A(){return Math.max(Math.random(),Math.random())}function D(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function F(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function L(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function j(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function H(){k(),E(),T(),_(),S(),P(),O(),A(),D(),F(),L(),j()}function B(){return Math.max(Math.random(),Math.random())}function z(){return Math.max(Math.random(),Math.random())}function V(){return Math.max(Math.random(),Math.random())}function K(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function W(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function q(){return isNaN(void 0)}function $(){return isNaN(void 0)}function G(){return isNaN(void 0)}function Y(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function X(){return Math.random()}function Z(){return isNaN(void 0)}function J(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function nn(){B(),z(),V(),K(),W(),q(),$(),G(),Y(),X(),Z(),J()}function tn(){return isNaN(void 0)}function en(){return Math.max(Math.random(),Math.random())}function rn(){return Math.random()}function on(){return isNaN(void 0)}function an(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function un(){return isNaN(void 0)}function cn(){return isNaN(void 0)}function dn(){return isNaN(void 0)}function fn(){return isNaN(void 0)}function mn(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function ln(){return Math.random()}function hn(){return isNaN(void 0)}function sn(){tn(),en(),rn(),on(),an(),un(),cn(),dn(),fn(),mn(),ln(),hn()}function pn(){return Math.random()}function Mn(){return Math.random()}function vn(){return Math.max(Math.random(),Math.random())}function Nn(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Cn(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function yn(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function xn(){return Math.random()}function gn(){return isNaN(void 0)}function In(){return Math.max(Math.random(),Math.random())}function bn(){return Math.max(Math.random(),Math.random())}function Rn(){return isNaN(void 0)}function Un(){return Math.random()}function Qn(){pn(),Mn(),vn(),Nn(),Cn(),yn(),xn(),gn(),In(),bn(),Rn(),Un()}function wn(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function kn(){return Math.random()}function En(){return isNaN(void 0)}function Tn(){return isNaN(void 0)}function _n(){return isNaN(void 0)}function Sn(){return Math.random()}function Pn(){return Math.max(Math.random(),Math.random())}function On(){return Math.max(Math.random(),Math.random())}function An(){return Math.random()}function Dn(){return Math.max(Math.random(),Math.random())}function Fn(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Ln(){return Math.max(Math.random(),Math.random())}function jn(){wn(),kn(),En(),Tn(),_n(),Sn(),Pn(),On(),An(),Dn(),Fn(),Ln()}function Hn(){return isNaN(void 0)}function Bn(){return Math.random()}function zn(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Vn(){return Math.random()}function Kn(){return Math.random()}function Wn(){return Math.max(Math.random(),Math.random())}function qn(){return Math.random()}function $n(){return Math.random()}function Gn(){return Math.max(Math.random(),Math.random())}function Yn(){return isNaN(void 0)}function Xn(){return Math.max(Math.random(),Math.random())}function Zn(){return Math.max(Math.random(),Math.random())}function Jn(){Hn(),Bn(),zn(),Vn(),Kn(),Wn(),qn(),$n(),Gn(),Yn(),Xn(),Zn()}function nt(){return Math.random()}function tt(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function et(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function rt(){return Math.random()}function ot(){return isNaN(void 0)}function at(){return Math.random()}function ut(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function it(){return Math.random()}function ct(){return Math.max(Math.random(),Math.random())}function dt(){return Math.max(Math.random(),Math.random())}function ft(){return Math.max(Math.random(),Math.random())}function mt(){return Math.random()}function lt(){nt(),tt(),et(),rt(),ot(),at(),ut(),it(),ct(),dt(),ft(),mt()}function ht(){return Math.max(Math.random(),Math.random())}function st(){return Math.random()}function pt(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Mt(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function vt(){return Math.max(Math.random(),Math.random())}function Nt(){return isNaN(void 0)}function Ct(){return Math.random()}function yt(){return Math.random()}function xt(){return Math.random()}function gt(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function It(){return Math.random()}function bt(){return Math.random()}function Rt(){ht(),st(),pt(),Mt(),vt(),Nt(),Ct(),yt(),xt(),gt(),It(),bt()}function Ut(){return Math.random()}function Qt(){return isNaN(void 0)}function wt(){return Math.max(Math.random(),Math.random())}function kt(){return Math.random()}function Et(){return Math.max(Math.random(),Math.random())}function Tt(){return isNaN(void 0)}function _t(){return Math.random()}function St(){return Math.max(Math.random(),Math.random())}function Pt(){return Math.max(Math.random(),Math.random())}function Ot(){return Math.max(Math.random(),Math.random())}function At(){return Math.max(Math.random(),Math.random())}function Dt(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Ft(){Ut(),Qt(),wt(),kt(),Et(),Tt(),_t(),St(),Pt(),Ot(),At(),Dt()}function Lt(){return Math.random()}function jt(){return Math.max(Math.random(),Math.random())}function Ht(){return Math.max(Math.random(),Math.random())}function Bt(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function zt(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Vt(){return isNaN(void 0)}function Kt(){return isNaN(void 0)}function Wt(){return Math.max(Math.random(),Math.random())}function qt(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function $t(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Gt(){return Math.random()}function Yt(){return Math.random()}function Xt(){Lt(),jt(),Ht(),Bt(),zt(),Vt(),Kt(),Wt(),qt(),$t(),Gt(),Yt()}function Zt(){p(),w(),H(),nn(),sn(),Qn(),jn(),Jn(),lt(),Rt(),Ft(),Xt()}function Jt(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function ne(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function te(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function ee(){return Math.max(Math.random(),Math.random())}function re(){return Math.max(Math.random(),Math.random())}function oe(){return Math.random()}function ae(){return isNaN(void 0)}function ue(){return Math.random()}function ie(){return isNaN(void 0)}function ce(){return Math.max(Math.random(),Math.random())}function de(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function fe(){return Math.random()}function me(){Jt(),ne(),te(),ee(),re(),oe(),ae(),ue(),ie(),ce(),de(),fe()}function le(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function he(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function se(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function pe(){return isNaN(void 0)}function Me(){return Math.random()}function ve(){return isNaN(void 0)}function Ne(){return isNaN(void 0)}function Ce(){return Math.max(Math.random(),Math.random())}function ye(){return Math.random()}function xe(){return Math.random()}function ge(){return Math.random()}function Ie(){return Math.random()}function be(){le(),he(),se(),pe(),Me(),ve(),Ne(),Ce(),ye(),xe(),ge(),Ie()}function Re(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Ue(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Qe(){return Math.max(Math.random(),Math.random())}function we(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function ke(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Ee(){return Math.random()}function Te(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function _e(){return Math.max(Math.random(),Math.random())}function Se(){return isNaN(void 0)}function Pe(){return Math.random()}function Oe(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Ae(){return Math.random()}function De(){Re(),Ue(),Qe(),we(),ke(),Ee(),Te(),_e(),Se(),Pe(),Oe(),Ae()}function Fe(){return isNaN(void 0)}function Le(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function je(){return isNaN(void 0)}function He(){return Math.max(Math.random(),Math.random())}function Be(){return isNaN(void 0)}function ze(){return Math.random()}function Ve(){return Math.random()}function Ke(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function We(){return Math.max(Math.random(),Math.random())}function qe(){return Math.max(Math.random(),Math.random())}function $e(){return Math.random()}function Ge(){return Math.max(Math.random(),Math.random())}function Ye(){Fe(),Le(),je(),He(),Be(),ze(),Ve(),Ke(),We(),qe(),$e(),Ge()}function Xe(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Ze(){return isNaN(void 0)}function Je(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function nr(){return isNaN(void 0)}function tr(){return isNaN(void 0)}function er(){return isNaN(void 0)}function rr(){return isNaN(void 0)}function or(){return Math.random()}function ar(){return Math.max(Math.random(),Math.random())}function ur(){return isNaN(void 0)}function ir(){return Math.max(Math.random(),Math.random())}function cr(){return Math.random()}function dr(){Xe(),Ze(),Je(),nr(),tr(),er(),rr(),or(),ar(),ur(),ir(),cr()}function fr(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function mr(){return isNaN(void 0)}function lr(){return Math.max(Math.random(),Math.random())}function hr(){return Math.max(Math.random(),Math.random())}function sr(){return Math.max(Math.random(),Math.random())}function pr(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Mr(){return Math.max(Math.random(),Math.random())}function vr(){return isNaN(void 0)}function Nr(){return isNaN(void 0)}function Cr(){return Math.random()}function yr(){return Math.max(Math.random(),Math.random())}function xr(){return isNaN(void 0)}function gr(){fr(),mr(),lr(),hr(),sr(),pr(),Mr(),vr(),Nr(),Cr(),yr(),xr()}function Ir(){return Math.max(Math.random(),Math.random())}function br(){return isNaN(void 0)}function Rr(){return isNaN(void 0)}function Ur(){return isNaN(void 0)}function Qr(){return isNaN(void 0)}function wr(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function kr(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Er(){return Math.max(Math.random(),Math.random())}function Tr(){return isNaN(void 0)}function _r(){return Math.max(Math.random(),Math.random())}function Sr(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Pr(){return Math.max(Math.random(),Math.random())}function Or(){Ir(),br(),Rr(),Ur(),Qr(),wr(),kr(),Er(),Tr(),_r(),Sr(),Pr()}function Ar(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Dr(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Fr(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Lr(){return Math.random()}function jr(){return Math.max(Math.random(),Math.random())}function Hr(){return isNaN(void 0)}function Br(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function zr(){return Math.max(Math.random(),Math.random())}function Vr(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Kr(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Wr(){return Math.max(Math.random(),Math.random())}function qr(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function $r(){Ar(),Dr(),Fr(),Lr(),jr(),Hr(),Br(),zr(),Vr(),Kr(),Wr(),qr()}function Gr(){return Math.max(Math.random(),Math.random())}function Yr(){return isNaN(void 0)}function Xr(){return Math.random()}function Zr(){return isNaN(void 0)}function Jr(){return isNaN(void 0)}function no(){return isNaN(void 0)}function to(){return isNaN(void 0)}function eo(){return Math.random()}function ro(){return Math.max(Math.random(),Math.random())}function oo(){return isNaN(void 0)}function ao(){return isNaN(void 0)}function uo(){return Math.max(Math.random(),Math.random())}function io(){Gr(),Yr(),Xr(),Zr(),Jr(),no(),to(),eo(),ro(),oo(),ao(),uo()}function co(){return isNaN(void 0)}function fo(){return isNaN(void 0)}function mo(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function lo(){return isNaN(void 0)}function ho(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function so(){return isNaN(void 0)}function po(){return Math.max(Math.random(),Math.random())}function Mo(){return Math.random()}function vo(){return isNaN(void 0)}function No(){return Math.random()}function Co(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function yo(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function xo(){co(),fo(),mo(),lo(),ho(),so(),po(),Mo(),vo(),No(),Co(),yo()}function go(){return isNaN(void 0)}function Io(){return isNaN(void 0)}function bo(){return Math.max(Math.random(),Math.random())}function Ro(){return Math.random()}function Uo(){return Math.max(Math.random(),Math.random())}function Qo(){return Math.random()}function wo(){return Math.max(Math.random(),Math.random())}function ko(){return Math.max(Math.random(),Math.random())}function Eo(){return isNaN(void 0)}function To(){return isNaN(void 0)}function _o(){return isNaN(void 0)}function So(){return isNaN(void 0)}function Po(){go(),Io(),bo(),Ro(),Uo(),Qo(),wo(),ko(),Eo(),To(),_o(),So()}function Oo(){return Math.random()}function Ao(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Do(){return Math.random()}function Fo(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Lo(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function jo(){return Math.max(Math.random(),Math.random())}function Ho(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Bo(){return Math.max(Math.random(),Math.random())}function zo(){return Math.random()}function Vo(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Ko(){return Math.max(Math.random(),Math.random())}function Wo(){return Math.max(Math.random(),Math.random())}function qo(){Oo(),Ao(),Do(),Fo(),Lo(),jo(),Ho(),Bo(),zo(),Vo(),Ko(),Wo()}function $o(){me(),be(),De(),Ye(),dr(),gr(),Or(),$r(),io(),xo(),Po(),qo()}function Go(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Yo(){return Math.random()}function Xo(){return Math.max(Math.random(),Math.random())}function Zo(){return isNaN(void 0)}function Jo(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function na(){return Math.random()}function ta(){return Math.max(Math.random(),Math.random())}function ea(){return Math.random()}function ra(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function oa(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function aa(){return isNaN(void 0)}function ua(){return isNaN(void 0)}function ia(){Go(),Yo(),Xo(),Zo(),Jo(),na(),ta(),ea(),ra(),oa(),aa(),ua()}function ca(){return Math.max(Math.random(),Math.random())}function da(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function fa(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function ma(){return isNaN(void 0)}function la(){return Math.max(Math.random(),Math.random())}function ha(){return Math.max(Math.random(),Math.random())}function sa(){return isNaN(void 0)}function pa(){return Math.max(Math.random(),Math.random())}function Ma(){return isNaN(void 0)}function va(){return Math.max(Math.random(),Math.random())}function Na(){return isNaN(void 0)}function Ca(){return isNaN(void 0)}function ya(){ca(),da(),fa(),ma(),la(),ha(),sa(),pa(),Ma(),va(),Na(),Ca()}function xa(){return Math.random()}function ga(){return Math.random()}function Ia(){return Math.max(Math.random(),Math.random())}function ba(){return Math.max(Math.random(),Math.random())}function Ra(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Ua(){return Math.random()}function Qa(){return Math.max(Math.random(),Math.random())}function wa(){return Math.max(Math.random(),Math.random())}function ka(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Ea(){return Math.random()}function Ta(){return Math.random()}function _a(){return isNaN(void 0)}function Sa(){xa(),ga(),Ia(),ba(),Ra(),Ua(),Qa(),wa(),ka(),Ea(),Ta(),_a()}function Pa(){return Math.random()}function Oa(){return Math.random()}function Aa(){return Math.random()}function Da(){return Math.max(Math.random(),Math.random())}function Fa(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function La(){return Math.max(Math.random(),Math.random())}function ja(){return isNaN(void 0)}function Ha(){return isNaN(void 0)}function Ba(){return Math.max(Math.random(),Math.random())}function za(){return Math.random()}function Va(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Ka(){return isNaN(void 0)}function Wa(){Pa(),Oa(),Aa(),Da(),Fa(),La(),ja(),Ha(),Ba(),za(),Va(),Ka()}function qa(){return Math.max(Math.random(),Math.random())}function $a(){return Math.random()}function Ga(){return Math.random()}function Ya(){return isNaN(void 0)}function Xa(){return isNaN(void 0)}function Za(){return Math.max(Math.random(),Math.random())}function Ja(){return Math.random()}function nu(){return Math.max(Math.random(),Math.random())}function tu(){return Math.random()}function eu(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function ru(){return isNaN(void 0)}function ou(){return isNaN(void 0)}function au(){qa(),$a(),Ga(),Ya(),Xa(),Za(),Ja(),nu(),tu(),eu(),ru(),ou()}function uu(){return Math.max(Math.random(),Math.random())}function iu(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function cu(){return Math.random()}function du(){return Math.random()}function fu(){return isNaN(void 0)}function mu(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function lu(){return Math.max(Math.random(),Math.random())}function hu(){return isNaN(void 0)}function su(){return Math.max(Math.random(),Math.random())}function pu(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Mu(){return Math.random()}function vu(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Nu(){uu(),iu(),cu(),du(),fu(),mu(),lu(),hu(),su(),pu(),Mu(),vu()}function Cu(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function yu(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function xu(){return Math.random()}function gu(){return Math.random()}function Iu(){return Math.random()}function bu(){return Math.max(Math.random(),Math.random())}function Ru(){return Math.random()}function Uu(){return Math.max(Math.random(),Math.random())}function Qu(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function wu(){return Math.random()}function ku(){return isNaN(void 0)}function Eu(){return Math.max(Math.random(),Math.random())}function Tu(){Cu(),yu(),xu(),gu(),Iu(),bu(),Ru(),Uu(),Qu(),wu(),ku(),Eu()}function _u(){return Math.max(Math.random(),Math.random())}function Su(){return Math.max(Math.random(),Math.random())}function Pu(){return isNaN(void 0)}function Ou(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Au(){return Math.max(Math.random(),Math.random())}function Du(){return isNaN(void 0)}function Fu(){return Math.max(Math.random(),Math.random())}function Lu(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function ju(){return isNaN(void 0)}function Hu(){return Math.random()}function Bu(){return Math.max(Math.random(),Math.random())}function zu(){return Math.max(Math.random(),Math.random())}function Vu(){_u(),Su(),Pu(),Ou(),Au(),Du(),Fu(),Lu(),ju(),Hu(),Bu(),zu()}function Ku(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Wu(){return Math.random()}function qu(){return isNaN(void 0)}function $u(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Gu(){return Math.max(Math.random(),Math.random())}function Yu(){return isNaN(void 0)}function Xu(){return Math.random()}function Zu(){return isNaN(void 0)}function Ju(){return Math.random()}function ni(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function ti(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function ei(){return Math.max(Math.random(),Math.random())}function ri(){Ku(),Wu(),qu(),$u(),Gu(),Yu(),Xu(),Zu(),Ju(),ni(),ti(),ei()}function oi(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function ai(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function ui(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function ii(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function ci(){return isNaN(void 0)}function di(){return Math.max(Math.random(),Math.random())}function fi(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function mi(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function li(){return Math.random()}function hi(){return Math.random()}function si(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function pi(){return isNaN(void 0)}function Mi(){oi(),ai(),ui(),ii(),ci(),di(),fi(),mi(),li(),hi(),si(),pi()}function vi(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Ni(){return Math.random()}function Ci(){return isNaN(void 0)}function yi(){return isNaN(void 0)}function xi(){return isNaN(void 0)}function gi(){return isNaN(void 0)}function Ii(){return isNaN(void 0)}function bi(){return Math.random()}function Ri(){return Math.max(Math.random(),Math.random())}function Ui(){return Math.max(Math.random(),Math.random())}function Qi(){return Math.max(Math.random(),Math.random())}function wi(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function ki(){vi(),Ni(),Ci(),yi(),xi(),gi(),Ii(),bi(),Ri(),Ui(),Qi(),wi()}function Ei(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Ti(){return Math.random()}function _i(){return Math.random()}function Si(){return Math.max(Math.random(),Math.random())}function Pi(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Oi(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Ai(){return isNaN(void 0)}function Di(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Fi(){return Math.max(Math.random(),Math.random())}function Li(){return isNaN(void 0)}function ji(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Hi(){return isNaN(void 0)}function Bi(){Ei(),Ti(),_i(),Si(),Pi(),Oi(),Ai(),Di(),Fi(),Li(),ji(),Hi()}function zi(){ia(),ya(),Sa(),Wa(),au(),Nu(),Tu(),Vu(),ri(),Mi(),ki(),Bi()}function Vi(){return Math.random()}function Ki(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Wi(){return Math.max(Math.random(),Math.random())}function qi(){return isNaN(void 0)}function $i(){return Math.random()}function Gi(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Yi(){return Math.max(Math.random(),Math.random())}function Xi(){return Math.max(Math.random(),Math.random())}function Zi(){return Math.max(Math.random(),Math.random())}function Ji(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function nc(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function tc(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function ec(){Vi(),Ki(),Wi(),qi(),$i(),Gi(),Yi(),Xi(),Zi(),Ji(),nc(),tc()}function rc(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function oc(){return isNaN(void 0)}function ac(){return Math.random()}function uc(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function ic(){return isNaN(void 0)}function cc(){return Math.random()}function dc(){return Math.max(Math.random(),Math.random())}function fc(){return isNaN(void 0)}function mc(){return Math.random()}function lc(){return Math.random()}function hc(){return Math.random()}function sc(){return Math.random()}function pc(){rc(),oc(),ac(),uc(),ic(),cc(),dc(),fc(),mc(),lc(),hc(),sc()}function Mc(){return Math.random()}function vc(){return Math.max(Math.random(),Math.random())}function Nc(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Cc(){return isNaN(void 0)}function yc(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function xc(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function gc(){return Math.max(Math.random(),Math.random())}function Ic(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function bc(){return Math.max(Math.random(),Math.random())}function Rc(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Uc(){return isNaN(void 0)}function Qc(){return Math.random()}function wc(){Mc(),vc(),Nc(),Cc(),yc(),xc(),gc(),Ic(),bc(),Rc(),Uc(),Qc()}function kc(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Ec(){return Math.max(Math.random(),Math.random())}function Tc(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function _c(){return Math.max(Math.random(),Math.random())}function Sc(){return isNaN(void 0)}function Pc(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Oc(){return Math.random()}function Ac(){return isNaN(void 0)}function Dc(){return isNaN(void 0)}function Fc(){return isNaN(void 0)}function Lc(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function jc(){return Math.random()}function Hc(){kc(),Ec(),Tc(),_c(),Sc(),Pc(),Oc(),Ac(),Dc(),Fc(),Lc(),jc()}function Bc(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function zc(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Vc(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Kc(){return Math.random()}function Wc(){return Math.max(Math.random(),Math.random())}function qc(){return Math.random()}function $c(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Gc(){return Math.random()}function Yc(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Xc(){return Math.random()}function Zc(){return Math.random()}function Jc(){return Math.random()}function nd(){Bc(),zc(),Vc(),Kc(),Wc(),qc(),$c(),Gc(),Yc(),Xc(),Zc(),Jc()}function td(){return Math.random()}function ed(){return Math.max(Math.random(),Math.random())}function rd(){return isNaN(void 0)}function od(){return isNaN(void 0)}function ad(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function ud(){return Math.random()}function id(){return Math.max(Math.random(),Math.random())}function cd(){return Math.random()}function dd(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function fd(){return isNaN(void 0)}function md(){return Math.random()}function ld(){return Math.max(Math.random(),Math.random())}function hd(){td(),ed(),rd(),od(),ad(),ud(),id(),cd(),dd(),fd(),md(),ld()}function sd(){return Math.max(Math.random(),Math.random())}function pd(){return isNaN(void 0)}function Md(){return Math.random()}function vd(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Nd(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Cd(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function yd(){return isNaN(void 0)}function xd(){return Math.max(Math.random(),Math.random())}function gd(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Id(){return isNaN(void 0)}function bd(){return Math.random()}function Rd(){return Math.max(Math.random(),Math.random())}function Ud(){sd(),pd(),Md(),vd(),Nd(),Cd(),yd(),xd(),gd(),Id(),bd(),Rd()}function Qd(){return isNaN(void 0)}function wd(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function kd(){return Math.random()}function Ed(){return isNaN(void 0)}function Td(){return isNaN(void 0)}function _d(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Sd(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Pd(){return isNaN(void 0)}function Od(){return Math.random()}function Ad(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Dd(){return isNaN(void 0)}function Fd(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Ld(){Qd(),wd(),kd(),Ed(),Td(),_d(),Sd(),Pd(),Od(),Ad(),Dd(),Fd()}function jd(){return Math.random()}function Hd(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Bd(){return isNaN(void 0)}function zd(){return Math.random()}function Vd(){return Math.random()}function Kd(){return Math.max(Math.random(),Math.random())}function Wd(){return Math.max(Math.random(),Math.random())}function qd(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function $d(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Gd(){return Math.random()}function Yd(){return Math.max(Math.random(),Math.random())}function Xd(){return Math.random()}function Zd(){jd(),Hd(),Bd(),zd(),Vd(),Kd(),Wd(),qd(),$d(),Gd(),Yd(),Xd()}function Jd(){return isNaN(void 0)}function nf(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function tf(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function ef(){return Math.max(Math.random(),Math.random())}function rf(){return isNaN(void 0)}function of(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function af(){return Math.max(Math.random(),Math.random())}function uf(){return Math.random()}function cf(){return Math.max(Math.random(),Math.random())}function df(){return Math.random()}function ff(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function mf(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function lf(){Jd(),nf(),tf(),ef(),rf(),of(),af(),uf(),cf(),df(),ff(),mf()}function hf(){return Math.max(Math.random(),Math.random())}function sf(){return Math.max(Math.random(),Math.random())}function pf(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Mf(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function vf(){return isNaN(void 0)}function Nf(){return Math.random()}function Cf(){return isNaN(void 0)}function yf(){return isNaN(void 0)}function xf(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function gf(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function If(){return isNaN(void 0)}function bf(){return Math.max(Math.random(),Math.random())}function Rf(){hf(),sf(),pf(),Mf(),vf(),Nf(),Cf(),yf(),xf(),gf(),If(),bf()}function Uf(){return isNaN(void 0)}function Qf(){return Math.max(Math.random(),Math.random())}function wf(){return Math.max(Math.random(),Math.random())}function kf(){return isNaN(void 0)}function Ef(){return isNaN(void 0)}function Tf(){return Math.max(Math.random(),Math.random())}function _f(){return Math.max(Math.random(),Math.random())}function Sf(){return Math.random()}function Pf(){return Math.random()}function Of(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Af(){return Math.max(Math.random(),Math.random())}function Df(){return Math.random()}function Ff(){Uf(),Qf(),wf(),kf(),Ef(),Tf(),_f(),Sf(),Pf(),Of(),Af(),Df()}function Lf(){ec(),pc(),wc(),Hc(),nd(),hd(),Ud(),Ld(),Zd(),lf(),Rf(),Ff()}function jf(){return Math.max(Math.random(),Math.random())}function Hf(){return Math.max(Math.random(),Math.random())}function Bf(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function zf(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Vf(){return Math.random()}function Kf(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Wf(){return isNaN(void 0)}function qf(){return isNaN(void 0)}function $f(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Gf(){return Math.random()}function Yf(){return Math.max(Math.random(),Math.random())}function Xf(){return Math.max(Math.random(),Math.random())}function Zf(){jf(),Hf(),Bf(),zf(),Vf(),Kf(),Wf(),qf(),$f(),Gf(),Yf(),Xf()}function Jf(){return Math.max(Math.random(),Math.random())}function nm(){return Math.random()}function tm(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function em(){return Math.max(Math.random(),Math.random())}function rm(){return isNaN(void 0)}function om(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function am(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function um(){return Math.max(Math.random(),Math.random())}function im(){return isNaN(void 0)}function cm(){return Math.max(Math.random(),Math.random())}function dm(){return isNaN(void 0)}function fm(){return Math.max(Math.random(),Math.random())}function mm(){Jf(),nm(),tm(),em(),rm(),om(),am(),um(),im(),cm(),dm(),fm()}function lm(){return Math.random()}function hm(){return Math.random()}function sm(){return isNaN(void 0)}function pm(){return isNaN(void 0)}function Mm(){return isNaN(void 0)}function vm(){return Math.max(Math.random(),Math.random())}function Nm(){return Math.max(Math.random(),Math.random())}function Cm(){return Math.random()}function ym(){return Math.random()}function xm(){return isNaN(void 0)}function gm(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Im(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function bm(){lm(),hm(),sm(),pm(),Mm(),vm(),Nm(),Cm(),ym(),xm(),gm(),Im()}function Rm(){return isNaN(void 0)}function Um(){return Math.max(Math.random(),Math.random())}function Qm(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function wm(){return isNaN(void 0)}function km(){return Math.max(Math.random(),Math.random())}function Em(){return isNaN(void 0)}function Tm(){return Math.random()}function _m(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Sm(){return Math.max(Math.random(),Math.random())}function Pm(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Om(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Am(){return Math.max(Math.random(),Math.random())}function Dm(){Rm(),Um(),Qm(),wm(),km(),Em(),Tm(),_m(),Sm(),Pm(),Om(),Am()}function Fm(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Lm(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function jm(){return isNaN(void 0)}function Hm(){return Math.max(Math.random(),Math.random())}function Bm(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function zm(){return isNaN(void 0)}function Vm(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Km(){return Math.random()}function Wm(){return isNaN(void 0)}function qm(){return Math.max(Math.random(),Math.random())}function $m(){return isNaN(void 0)}function Gm(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Ym(){Fm(),Lm(),jm(),Hm(),Bm(),zm(),Vm(),Km(),Wm(),qm(),$m(),Gm()}function Xm(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Zm(){return Math.max(Math.random(),Math.random())}function Jm(){return Math.max(Math.random(),Math.random())}function nl(){return isNaN(void 0)}function tl(){return Math.random()}function el(){return Math.max(Math.random(),Math.random())}function rl(){return isNaN(void 0)}function ol(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function al(){return Math.random()}function ul(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function il(){return Math.max(Math.random(),Math.random())}function cl(){return Math.max(Math.random(),Math.random())}function dl(){Xm(),Zm(),Jm(),nl(),tl(),el(),rl(),ol(),al(),ul(),il(),cl()}function fl(){return Math.random()}function ml(){return Math.max(Math.random(),Math.random())}function ll(){return Math.max(Math.random(),Math.random())}function hl(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function sl(){return Math.max(Math.random(),Math.random())}function pl(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Ml(){return Math.max(Math.random(),Math.random())}function vl(){return Math.random()}function Nl(){return isNaN(void 0)}function Cl(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function yl(){return Math.max(Math.random(),Math.random())}function xl(){return Math.random()}function gl(){fl(),ml(),ll(),hl(),sl(),pl(),Ml(),vl(),Nl(),Cl(),yl(),xl()}function Il(){return Math.max(Math.random(),Math.random())}function bl(){return Math.random()}function Rl(){return Math.max(Math.random(),Math.random())}function Ul(){return isNaN(void 0)}function Ql(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function wl(){return Math.max(Math.random(),Math.random())}function kl(){return Math.max(Math.random(),Math.random())}function El(){return isNaN(void 0)}function Tl(){return Math.max(Math.random(),Math.random())}function _l(){return Math.random()}function Sl(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Pl(){return isNaN(void 0)}function Ol(){Il(),bl(),Rl(),Ul(),Ql(),wl(),kl(),El(),Tl(),_l(),Sl(),Pl()}function Al(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Dl(){return Math.max(Math.random(),Math.random())}function Fl(){return Math.random()}function Ll(){return Math.max(Math.random(),Math.random())}function jl(){return Math.random()}function Hl(){return isNaN(void 0)}function Bl(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function zl(){return Math.random()}function Vl(){return Math.max(Math.random(),Math.random())}function Kl(){return isNaN(void 0)}function Wl(){return Math.random()}function ql(){return isNaN(void 0)}function $l(){Al(),Dl(),Fl(),Ll(),jl(),Hl(),Bl(),zl(),Vl(),Kl(),Wl(),ql()}function Gl(){return Math.max(Math.random(),Math.random())}function Yl(){return Math.random()}function Xl(){return Math.random()}function Zl(){return Math.max(Math.random(),Math.random())}function Jl(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function nh(){return isNaN(void 0)}function th(){return isNaN(void 0)}function eh(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function rh(){return Math.random()}function oh(){return Math.random()}function ah(){return Math.max(Math.random(),Math.random())}function uh(){return Math.random()}function ih(){Gl(),Yl(),Xl(),Zl(),Jl(),nh(),th(),eh(),rh(),oh(),ah(),uh()}function ch(){return isNaN(void 0)}function dh(){return isNaN(void 0)}function fh(){return Math.max(Math.random(),Math.random())}function mh(){return Math.random()}function lh(){return Math.random()}function hh(){return Math.random()}function sh(){return isNaN(void 0)}function ph(){return isNaN(void 0)}function Mh(){return Math.random()}function vh(){return Math.random()}function Nh(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Ch(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function yh(){ch(),dh(),fh(),mh(),lh(),hh(),sh(),ph(),Mh(),vh(),Nh(),Ch()}function xh(){return isNaN(void 0)}function gh(){return Math.max(Math.random(),Math.random())}function Ih(){return Math.max(Math.random(),Math.random())}function bh(){return isNaN(void 0)}function Rh(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Uh(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Qh(){return isNaN(void 0)}function wh(){return isNaN(void 0)}function kh(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Eh(){return Math.max(Math.random(),Math.random())}function Th(){return isNaN(void 0)}function _h(){return isNaN(void 0)}function Sh(){xh(),gh(),Ih(),bh(),Rh(),Uh(),Qh(),wh(),kh(),Eh(),Th(),_h()}function Ph(){Zf(),mm(),bm(),Dm(),Ym(),dl(),gl(),Ol(),$l(),ih(),yh(),Sh()}function Oh(){return Math.max(Math.random(),Math.random())}function Ah(){return Math.random()}function Dh(){return isNaN(void 0)}function Fh(){return Math.random()}function Lh(){return Math.max(Math.random(),Math.random())}function jh(){return isNaN(void 0)}function Hh(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Bh(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function zh(){return Math.max(Math.random(),Math.random())}function Vh(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Kh(){return Math.random()}function Wh(){return isNaN(void 0)}function qh(){Oh(),Ah(),Dh(),Fh(),Lh(),jh(),Hh(),Bh(),zh(),Vh(),Kh(),Wh()}function $h(){return Math.max(Math.random(),Math.random())}function Gh(){return isNaN(void 0)}function Yh(){return Math.random()}function Xh(){return isNaN(void 0)}function Zh(){return Math.random()}function Jh(){return Math.max(Math.random(),Math.random())}function ns(){return isNaN(void 0)}function ts(){return isNaN(void 0)}function es(){return Math.random()}function rs(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function os(){return Math.max(Math.random(),Math.random())}function as(){return Math.max(Math.random(),Math.random())}function us(){$h(),Gh(),Yh(),Xh(),Zh(),Jh(),ns(),ts(),es(),rs(),os(),as()}function is(){return isNaN(void 0)}function cs(){return isNaN(void 0)}function ds(){return Math.random()}function fs(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function ms(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function ls(){return Math.max(Math.random(),Math.random())}function hs(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function ss(){return Math.random()}function ps(){return Math.max(Math.random(),Math.random())}function Ms(){return isNaN(void 0)}function vs(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Ns(){return isNaN(void 0)}function Cs(){is(),cs(),ds(),fs(),ms(),ls(),hs(),ss(),ps(),Ms(),vs(),Ns()}function ys(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function xs(){return isNaN(void 0)}function gs(){return Math.random()}function Is(){return isNaN(void 0)}function bs(){return Math.max(Math.random(),Math.random())}function Rs(){return Math.max(Math.random(),Math.random())}function Us(){return isNaN(void 0)}function Qs(){return Math.max(Math.random(),Math.random())}function ws(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function ks(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Es(){return Math.max(Math.random(),Math.random())}function Ts(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function _s(){ys(),xs(),gs(),Is(),bs(),Rs(),Us(),Qs(),ws(),ks(),Es(),Ts()}function Ss(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Ps(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Os(){return Math.random()}function As(){return Math.random()}function Ds(){return Math.random()}function Fs(){return Math.random()}function Ls(){return Math.random()}function js(){return Math.random()}function Hs(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Bs(){return Math.random()}function zs(){return isNaN(void 0)}function Vs(){return Math.max(Math.random(),Math.random())}function Ks(){Ss(),Ps(),Os(),As(),Ds(),Fs(),Ls(),js(),Hs(),Bs(),zs(),Vs()}function Ws(){return isNaN(void 0)}function qs(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function $s(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Gs(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Ys(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Xs(){return isNaN(void 0)}function Zs(){return Math.random()}function Js(){return Math.random()}function np(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function tp(){return Math.random()}function ep(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function rp(){return Math.random()}function op(){Ws(),qs(),$s(),Gs(),Ys(),Xs(),Zs(),Js(),np(),tp(),ep(),rp()}function ap(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function up(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function ip(){return Math.random()}function cp(){return isNaN(void 0)}function dp(){return Math.random()}function fp(){return Math.max(Math.random(),Math.random())}function mp(){return Math.random()}function lp(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function hp(){return isNaN(void 0)}function sp(){return isNaN(void 0)}function pp(){return Math.random()}function Mp(){return Math.random()}function vp(){ap(),up(),ip(),cp(),dp(),fp(),mp(),lp(),hp(),sp(),pp(),Mp()}function Np(){return Math.max(Math.random(),Math.random())}function Cp(){return Math.max(Math.random(),Math.random())}function yp(){return Math.random()}function xp(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function gp(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Ip(){return Math.random()}function bp(){return isNaN(void 0)}function Rp(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Up(){return Math.random()}function Qp(){return Math.max(Math.random(),Math.random())}function wp(){return Math.random()}function kp(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Ep(){Np(),Cp(),yp(),xp(),gp(),Ip(),bp(),Rp(),Up(),Qp(),wp(),kp()}function Tp(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function _p(){return Math.max(Math.random(),Math.random())}function Sp(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Pp(){return Math.random()}function Op(){return Math.max(Math.random(),Math.random())}function Ap(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Dp(){return Math.random()}function Fp(){return Math.random()}function Lp(){return isNaN(void 0)}function jp(){return Math.random()}function Hp(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Bp(){return isNaN(void 0)}function zp(){Tp(),_p(),Sp(),Pp(),Op(),Ap(),Dp(),Fp(),Lp(),jp(),Hp(),Bp()}function Vp(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Kp(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Wp(){return Math.max(Math.random(),Math.random())}function qp(){return Math.max(Math.random(),Math.random())}function $p(){return Math.max(Math.random(),Math.random())}function Gp(){return Math.max(Math.random(),Math.random())}function Yp(){return Math.max(Math.random(),Math.random())}function Xp(){return Math.random()}function Zp(){return Math.max(Math.random(),Math.random())}function Jp(){return Math.random()}function nM(){return Math.random()}function tM(){return isNaN(void 0)}function eM(){Vp(),Kp(),Wp(),qp(),$p(),Gp(),Yp(),Xp(),Zp(),Jp(),nM(),tM()}function rM(){return isNaN(void 0)}function oM(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function aM(){return isNaN(void 0)}function uM(){return Math.max(Math.random(),Math.random())}function iM(){return Math.random()}function cM(){return Math.random()}function dM(){return Math.random()}function fM(){return Math.max(Math.random(),Math.random())}function mM(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function lM(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function hM(){return Math.max(Math.random(),Math.random())}function sM(){return Math.random()}function pM(){rM(),oM(),aM(),uM(),iM(),cM(),dM(),fM(),mM(),lM(),hM(),sM()}function MM(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function vM(){return Math.max(Math.random(),Math.random())}function NM(){return Math.random()}function CM(){return Math.random()}function yM(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function xM(){return Math.random()}function gM(){return Math.random()}function IM(){return isNaN(void 0)}function bM(){return isNaN(void 0)}function RM(){return Math.max(Math.random(),Math.random())}function UM(){return Math.max(Math.random(),Math.random())}function QM(){return isNaN(void 0)}function wM(){MM(),vM(),NM(),CM(),yM(),xM(),gM(),IM(),bM(),RM(),UM(),QM()}function kM(){qh(),us(),Cs(),_s(),Ks(),op(),vp(),Ep(),zp(),eM(),pM(),wM()}function EM(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function TM(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function _M(){return Math.max(Math.random(),Math.random())}function SM(){return Math.random()}function PM(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function OM(){return isNaN(void 0)}function AM(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function DM(){return Math.random()}function FM(){return isNaN(void 0)}function LM(){return isNaN(void 0)}function jM(){return Math.max(Math.random(),Math.random())}function HM(){return isNaN(void 0)}function BM(){EM(),TM(),_M(),SM(),PM(),OM(),AM(),DM(),FM(),LM(),jM(),HM()}function zM(){return isNaN(void 0)}function VM(){return Math.max(Math.random(),Math.random())}function KM(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function WM(){return Math.max(Math.random(),Math.random())}function qM(){return Math.random()}function $M(){return isNaN(void 0)}function GM(){return isNaN(void 0)}function YM(){return isNaN(void 0)}function XM(){return Math.random()}function ZM(){return Math.max(Math.random(),Math.random())}function JM(){return Math.random()}function nv(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function tv(){zM(),VM(),KM(),WM(),qM(),$M(),GM(),YM(),XM(),ZM(),JM(),nv()}function ev(){return isNaN(void 0)}function rv(){return Math.random()}function ov(){return isNaN(void 0)}function av(){return Math.max(Math.random(),Math.random())}function uv(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function iv(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function cv(){return Math.max(Math.random(),Math.random())}function dv(){return Math.max(Math.random(),Math.random())}function fv(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function mv(){return Math.random()}function lv(){return Math.max(Math.random(),Math.random())}function hv(){return isNaN(void 0)}function sv(){ev(),rv(),ov(),av(),uv(),iv(),cv(),dv(),fv(),mv(),lv(),hv()}function pv(){return Math.random()}function Mv(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function vv(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Nv(){return isNaN(void 0)}function Cv(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function yv(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function xv(){return Math.random()}function gv(){return isNaN(void 0)}function Iv(){return Math.max(Math.random(),Math.random())}function bv(){return Math.max(Math.random(),Math.random())}function Rv(){return Math.max(Math.random(),Math.random())}function Uv(){return Math.random()}function Qv(){pv(),Mv(),vv(),Nv(),Cv(),yv(),xv(),gv(),Iv(),bv(),Rv(),Uv()}function wv(){return Math.max(Math.random(),Math.random())}function kv(){return Math.random()}function Ev(){return isNaN(void 0)}function Tv(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function _v(){return Math.max(Math.random(),Math.random())}function Sv(){return Math.max(Math.random(),Math.random())}function Pv(){return Math.max(Math.random(),Math.random())}function Ov(){return Math.random()}function Av(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Dv(){return isNaN(void 0)}function Fv(){return isNaN(void 0)}function Lv(){return Math.max(Math.random(),Math.random())}function jv(){wv(),kv(),Ev(),Tv(),_v(),Sv(),Pv(),Ov(),Av(),Dv(),Fv(),Lv()}function Hv(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Bv(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function zv(){return isNaN(void 0)}function Vv(){return isNaN(void 0)}function Kv(){return Math.random()}function Wv(){return Math.max(Math.random(),Math.random())}function qv(){return Math.max(Math.random(),Math.random())}function $v(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Gv(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Yv(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Xv(){return isNaN(void 0)}function Zv(){return Math.max(Math.random(),Math.random())}function Jv(){Hv(),Bv(),zv(),Vv(),Kv(),Wv(),qv(),$v(),Gv(),Yv(),Xv(),Zv()}function nN(){return Math.max(Math.random(),Math.random())}function tN(){return Math.max(Math.random(),Math.random())}function eN(){return Math.max(Math.random(),Math.random())}function rN(){return Math.random()}function oN(){return isNaN(void 0)}function aN(){return isNaN(void 0)}function uN(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function iN(){return isNaN(void 0)}function cN(){return Math.max(Math.random(),Math.random())}function dN(){return isNaN(void 0)}function fN(){return Math.max(Math.random(),Math.random())}function mN(){return isNaN(void 0)}function lN(){nN(),tN(),eN(),rN(),oN(),aN(),uN(),iN(),cN(),dN(),fN(),mN()}function hN(){return isNaN(void 0)}function sN(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function pN(){return Math.random()}function MN(){return Math.max(Math.random(),Math.random())}function vN(){return Math.random()}function NN(){return isNaN(void 0)}function CN(){return isNaN(void 0)}function yN(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function xN(){return Math.random()}function gN(){return Math.random()}function IN(){return Math.max(Math.random(),Math.random())}function bN(){return Math.max(Math.random(),Math.random())}function RN(){hN(),sN(),pN(),MN(),vN(),NN(),CN(),yN(),xN(),gN(),IN(),bN()}function UN(){return isNaN(void 0)}function QN(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function wN(){return Math.max(Math.random(),Math.random())}function kN(){return isNaN(void 0)}function EN(){return isNaN(void 0)}function TN(){return Math.max(Math.random(),Math.random())}function _N(){return isNaN(void 0)}function SN(){return Math.random()}function PN(){return Math.random()}function ON(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function AN(){return Math.max(Math.random(),Math.random())}function DN(){return Math.random()}function FN(){UN(),QN(),wN(),kN(),EN(),TN(),_N(),SN(),PN(),ON(),AN(),DN()}function LN(){return isNaN(void 0)}function jN(){return Math.max(Math.random(),Math.random())}function HN(){return isNaN(void 0)}function BN(){return Math.random()}function zN(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function VN(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function KN(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function WN(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function qN(){return Math.max(Math.random(),Math.random())}function $N(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function GN(){return isNaN(void 0)}function YN(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function XN(){LN(),jN(),HN(),BN(),zN(),VN(),KN(),WN(),qN(),$N(),GN(),YN()}function ZN(){return isNaN(void 0)}function JN(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function nC(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function tC(){return isNaN(void 0)}function eC(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function rC(){return Math.random()}function oC(){return Math.random()}function aC(){return Math.max(Math.random(),Math.random())}function uC(){return isNaN(void 0)}function iC(){return Math.random()}function cC(){return isNaN(void 0)}function dC(){return Math.max(Math.random(),Math.random())}function fC(){ZN(),JN(),nC(),tC(),eC(),rC(),oC(),aC(),uC(),iC(),cC(),dC()}function mC(){return isNaN(void 0)}function lC(){return Math.max(Math.random(),Math.random())}function hC(){return Math.random()}function sC(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function pC(){return Math.random()}function MC(){return isNaN(void 0)}function vC(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function NC(){return Math.random()}function CC(){return Math.max(Math.random(),Math.random())}function yC(){return Math.max(Math.random(),Math.random())}function xC(){return Math.random()}function gC(){return Math.max(Math.random(),Math.random())}function IC(){mC(),lC(),hC(),sC(),pC(),MC(),vC(),NC(),CC(),yC(),xC(),gC()}function bC(){BM(),tv(),sv(),Qv(),jv(),Jv(),lN(),RN(),FN(),XN(),fC(),IC()}function RC(){return Math.max(Math.random(),Math.random())}function UC(){return Math.random()}function QC(){return Math.max(Math.random(),Math.random())}function wC(){return isNaN(void 0)}function kC(){return Math.random()}function EC(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function TC(){return isNaN(void 0)}function _C(){return Math.max(Math.random(),Math.random())}function SC(){return Math.random()}function PC(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function OC(){return isNaN(void 0)}function AC(){return isNaN(void 0)}function DC(){RC(),UC(),QC(),wC(),kC(),EC(),TC(),_C(),SC(),PC(),OC(),AC()}function FC(){return Math.random()}function LC(){return Math.random()}function jC(){return Math.random()}function HC(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function BC(){return Math.random()}function zC(){return isNaN(void 0)}function VC(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function KC(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function WC(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function qC(){return Math.random()}function $C(){return Math.max(Math.random(),Math.random())}function GC(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function YC(){FC(),LC(),jC(),HC(),BC(),zC(),VC(),KC(),WC(),qC(),$C(),GC()}function XC(){return isNaN(void 0)}function ZC(){return Math.random()}function JC(){return isNaN(void 0)}function ny(){return Math.max(Math.random(),Math.random())}function ty(){return isNaN(void 0)}function ey(){return Math.random()}function ry(){return Math.random()}function oy(){return Math.max(Math.random(),Math.random())}function ay(){return isNaN(void 0)}function uy(){return isNaN(void 0)}function iy(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function cy(){return isNaN(void 0)}function dy(){XC(),ZC(),JC(),ny(),ty(),ey(),ry(),oy(),ay(),uy(),iy(),cy()}function fy(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function my(){return isNaN(void 0)}function ly(){return isNaN(void 0)}function hy(){return Math.max(Math.random(),Math.random())}function sy(){return Math.max(Math.random(),Math.random())}function py(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function My(){return isNaN(void 0)}function vy(){return Math.random()}function Ny(){return Math.max(Math.random(),Math.random())}function Cy(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function yy(){return isNaN(void 0)}function xy(){return isNaN(void 0)}function gy(){fy(),my(),ly(),hy(),sy(),py(),My(),vy(),Ny(),Cy(),yy(),xy()}function Iy(){return Math.max(Math.random(),Math.random())}function by(){return Math.max(Math.random(),Math.random())}function Ry(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Uy(){return Math.random()}function Qy(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function wy(){return isNaN(void 0)}function ky(){return Math.random()}function Ey(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Ty(){return isNaN(void 0)}function _y(){return Math.max(Math.random(),Math.random())}function Sy(){return isNaN(void 0)}function Py(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Oy(){Iy(),by(),Ry(),Uy(),Qy(),wy(),ky(),Ey(),Ty(),_y(),Sy(),Py()}function Ay(){return Math.random()}function Dy(){return Math.random()}function Fy(){return isNaN(void 0)}function Ly(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function jy(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Hy(){return Math.max(Math.random(),Math.random())}function By(){return isNaN(void 0)}function zy(){return Math.max(Math.random(),Math.random())}function Vy(){return isNaN(void 0)}function Ky(){return isNaN(void 0)}function Wy(){return isNaN(void 0)}function qy(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function $y(){Ay(),Dy(),Fy(),Ly(),jy(),Hy(),By(),zy(),Vy(),Ky(),Wy(),qy()}function Gy(){return Math.max(Math.random(),Math.random())}function Yy(){return Math.max(Math.random(),Math.random())}function Xy(){return Math.random()}function Zy(){return Math.random()}function Jy(){return isNaN(void 0)}function nx(){return isNaN(void 0)}function tx(){return Math.random()}function ex(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function rx(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function ox(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function ax(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function ux(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function ix(){Gy(),Yy(),Xy(),Zy(),Jy(),nx(),tx(),ex(),rx(),ox(),ax(),ux()}function cx(){return Math.max(Math.random(),Math.random())}function dx(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function fx(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function mx(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function lx(){return isNaN(void 0)}function hx(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function sx(){return Math.max(Math.random(),Math.random())}function px(){return Math.random()}function Mx(){return Math.max(Math.random(),Math.random())}function vx(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Nx(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Cx(){return Math.random()}function yx(){cx(),dx(),fx(),mx(),lx(),hx(),sx(),px(),Mx(),vx(),Nx(),Cx()}function xx(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function gx(){return Math.max(Math.random(),Math.random())}function Ix(){return Math.random()}function bx(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Rx(){return isNaN(void 0)}function Ux(){return isNaN(void 0)}function Qx(){return Math.max(Math.random(),Math.random())}function wx(){return Math.random()}function kx(){return isNaN(void 0)}function Ex(){return isNaN(void 0)}function Tx(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function _x(){return Math.max(Math.random(),Math.random())}function Sx(){xx(),gx(),Ix(),bx(),Rx(),Ux(),Qx(),wx(),kx(),Ex(),Tx(),_x()}function Px(){return Math.random()}function Ox(){return Math.random()}function Ax(){return Math.random()}function Dx(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Fx(){return Math.max(Math.random(),Math.random())}function Lx(){return isNaN(void 0)}function jx(){return Math.random()}function Hx(){return Math.random()}function Bx(){return Math.max(Math.random(),Math.random())}function zx(){return isNaN(void 0)}function Vx(){return Math.max(Math.random(),Math.random())}function Kx(){return Math.max(Math.random(),Math.random())}function Wx(){Px(),Ox(),Ax(),Dx(),Fx(),Lx(),jx(),Hx(),Bx(),zx(),Vx(),Kx()}function qx(){return Math.max(Math.random(),Math.random())}function $x(){return Math.random()}function Gx(){return Math.max(Math.random(),Math.random())}function Yx(){return Math.max(Math.random(),Math.random())}function Xx(){return isNaN(void 0)}function Zx(){return Math.max(Math.random(),Math.random())}function Jx(){return isNaN(void 0)}function ng(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function tg(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function eg(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function rg(){return isNaN(void 0)}function og(){return Math.max(Math.random(),Math.random())}function ag(){qx(),$x(),Gx(),Yx(),Xx(),Zx(),Jx(),ng(),tg(),eg(),rg(),og()}function ug(){return Math.max(Math.random(),Math.random())}function ig(){return Math.max(Math.random(),Math.random())}function cg(){return isNaN(void 0)}function dg(){return isNaN(void 0)}function fg(){return Math.max(Math.random(),Math.random())}function mg(){return Math.max(Math.random(),Math.random())}function lg(){return Math.random()}function hg(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function sg(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function pg(){return isNaN(void 0)}function Mg(){return Math.random()}function vg(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Ng(){ug(),ig(),cg(),dg(),fg(),mg(),lg(),hg(),sg(),pg(),Mg(),vg()}function Cg(){DC(),YC(),dy(),gy(),Oy(),$y(),ix(),yx(),Sx(),Wx(),ag(),Ng()}function yg(){return Math.max(Math.random(),Math.random())}function xg(){return Math.max(Math.random(),Math.random())}function gg(){return Math.random()}function Ig(){return Math.max(Math.random(),Math.random())}function bg(){return Math.random()}function Rg(){return Math.max(Math.random(),Math.random())}function Ug(){return Math.random()}function Qg(){return Math.random()}function wg(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function kg(){return Math.random()}function Eg(){return Math.max(Math.random(),Math.random())}function Tg(){return isNaN(void 0)}function _g(){yg(),xg(),gg(),Ig(),bg(),Rg(),Ug(),Qg(),wg(),kg(),Eg(),Tg()}function Sg(){return Math.random()}function Pg(){return Math.random()}function Og(){return Math.random()}function Ag(){return isNaN(void 0)}function Dg(){return Math.random()}function Fg(){return Math.random()}function Lg(){return isNaN(void 0)}function jg(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Hg(){return Math.max(Math.random(),Math.random())}function Bg(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function zg(){return Math.max(Math.random(),Math.random())}function Vg(){return Math.max(Math.random(),Math.random())}function Kg(){Sg(),Pg(),Og(),Ag(),Dg(),Fg(),Lg(),jg(),Hg(),Bg(),zg(),Vg()}function Wg(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function qg(){return isNaN(void 0)}function $g(){return isNaN(void 0)}function Gg(){return Math.max(Math.random(),Math.random())}function Yg(){return Math.max(Math.random(),Math.random())}function Xg(){return isNaN(void 0)}function Zg(){return Math.random()}function Jg(){return isNaN(void 0)}function nI(){return Math.random()}function tI(){return isNaN(void 0)}function eI(){return isNaN(void 0)}function rI(){return isNaN(void 0)}function oI(){Wg(),qg(),$g(),Gg(),Yg(),Xg(),Zg(),Jg(),nI(),tI(),eI(),rI()}function aI(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function uI(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function iI(){return isNaN(void 0)}function cI(){return isNaN(void 0)}function dI(){return Math.max(Math.random(),Math.random())}function fI(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function mI(){return Math.random()}function lI(){return isNaN(void 0)}function hI(){return Math.random()}function sI(){return Math.random()}function pI(){return isNaN(void 0)}function MI(){return Math.random()}function vI(){aI(),uI(),iI(),cI(),dI(),fI(),mI(),lI(),hI(),sI(),pI(),MI()}function NI(){return Math.max(Math.random(),Math.random())}function CI(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function yI(){return Math.max(Math.random(),Math.random())}function xI(){return Math.max(Math.random(),Math.random())}function gI(){return Math.random()}function II(){return Math.max(Math.random(),Math.random())}function bI(){return isNaN(void 0)}function RI(){return Math.random()}function UI(){return Math.max(Math.random(),Math.random())}function QI(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function wI(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function kI(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function EI(){NI(),CI(),yI(),xI(),gI(),II(),bI(),RI(),UI(),QI(),wI(),kI()}function TI(){return isNaN(void 0)}function _I(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function SI(){return isNaN(void 0)}function PI(){return isNaN(void 0)}function OI(){return Math.random()}function AI(){return Math.max(Math.random(),Math.random())}function DI(){return Math.max(Math.random(),Math.random())}function FI(){return Math.random()}function LI(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function jI(){return Math.random()}function HI(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function BI(){return Math.max(Math.random(),Math.random())}function zI(){TI(),_I(),SI(),PI(),OI(),AI(),DI(),FI(),LI(),jI(),HI(),BI()}function VI(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function KI(){return Math.random()}function WI(){return isNaN(void 0)}function qI(){return Math.max(Math.random(),Math.random())}function $I(){return Math.random()}function GI(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function YI(){return Math.random()}function XI(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function ZI(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function JI(){return Math.random()}function nb(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function tb(){return isNaN(void 0)}function eb(){VI(),KI(),WI(),qI(),$I(),GI(),YI(),XI(),ZI(),JI(),nb(),tb()}function rb(){return Math.max(Math.random(),Math.random())}function ob(){return Math.max(Math.random(),Math.random())}function ab(){return Math.random()}function ub(){return isNaN(void 0)}function ib(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function cb(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function db(){return Math.max(Math.random(),Math.random())}function fb(){return Math.max(Math.random(),Math.random())}function mb(){return isNaN(void 0)}function lb(){return isNaN(void 0)}function hb(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function sb(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function pb(){rb(),ob(),ab(),ub(),ib(),cb(),db(),fb(),mb(),lb(),hb(),sb()}function Mb(){return isNaN(void 0)}function vb(){return Math.max(Math.random(),Math.random())}function Nb(){return isNaN(void 0)}function Cb(){return Math.max(Math.random(),Math.random())}function yb(){return Math.random()}function xb(){return isNaN(void 0)}function gb(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Ib(){return Math.max(Math.random(),Math.random())}function bb(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Rb(){return Math.random()}function Ub(){return Math.random()}function Qb(){return Math.max(Math.random(),Math.random())}function wb(){Mb(),vb(),Nb(),Cb(),yb(),xb(),gb(),Ib(),bb(),Rb(),Ub(),Qb()}function kb(){return Math.max(Math.random(),Math.random())}function Eb(){return isNaN(void 0)}function Tb(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function _b(){return isNaN(void 0)}function Sb(){return isNaN(void 0)}function Pb(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Ob(){return Math.random()}function Ab(){return isNaN(void 0)}function Db(){return isNaN(void 0)}function Fb(){return isNaN(void 0)}function Lb(){return isNaN(void 0)}function jb(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Hb(){kb(),Eb(),Tb(),_b(),Sb(),Pb(),Ob(),Ab(),Db(),Fb(),Lb(),jb()}function Bb(){return Math.max(Math.random(),Math.random())}function zb(){return isNaN(void 0)}function Vb(){return isNaN(void 0)}function Kb(){return Math.random()}function Wb(){return isNaN(void 0)}function qb(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function $b(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Gb(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Yb(){return Math.max(Math.random(),Math.random())}function Xb(){return Math.random()}function Zb(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Jb(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function nR(){Bb(),zb(),Vb(),Kb(),Wb(),qb(),$b(),Gb(),Yb(),Xb(),Zb(),Jb()}function tR(){return isNaN(void 0)}function eR(){return Math.max(Math.random(),Math.random())}function rR(){return Math.max(Math.random(),Math.random())}function oR(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function aR(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function uR(){return isNaN(void 0)}function iR(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function cR(){return Math.random()}function dR(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function fR(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function mR(){return Math.random()}function lR(){return isNaN(void 0)}function hR(){tR(),eR(),rR(),oR(),aR(),uR(),iR(),cR(),dR(),fR(),mR(),lR()}function sR(){_g(),Kg(),oI(),vI(),EI(),zI(),eb(),pb(),wb(),Hb(),nR(),hR()}function pR(){return Math.random()}function MR(){return Math.max(Math.random(),Math.random())}function vR(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function NR(){return Math.max(Math.random(),Math.random())}function CR(){return Math.random()}function yR(){return Math.random()}function xR(){return isNaN(void 0)}function gR(){return Math.random()}function IR(){return Math.max(Math.random(),Math.random())}function bR(){return isNaN(void 0)}function RR(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function UR(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function QR(){pR(),MR(),vR(),NR(),CR(),yR(),xR(),gR(),IR(),bR(),RR(),UR()}function wR(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function kR(){return isNaN(void 0)}function ER(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function TR(){return isNaN(void 0)}function _R(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function SR(){return Math.max(Math.random(),Math.random())}function PR(){return Math.random()}function OR(){return Math.max(Math.random(),Math.random())}function AR(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function DR(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function FR(){return Math.max(Math.random(),Math.random())}function LR(){return isNaN(void 0)}function jR(){wR(),kR(),ER(),TR(),_R(),SR(),PR(),OR(),AR(),DR(),FR(),LR()}function HR(){return isNaN(void 0)}function BR(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function zR(){return Math.max(Math.random(),Math.random())}function VR(){return Math.random()}function KR(){return isNaN(void 0)}function WR(){return Math.max(Math.random(),Math.random())}function qR(){return isNaN(void 0)}function $R(){return Math.random()}function GR(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function YR(){return isNaN(void 0)}function XR(){return Math.max(Math.random(),Math.random())}function ZR(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function JR(){HR(),BR(),zR(),VR(),KR(),WR(),qR(),$R(),GR(),YR(),XR(),ZR()}function nU(){return Math.random()}function tU(){return isNaN(void 0)}function eU(){return Math.random()}function rU(){return Math.max(Math.random(),Math.random())}function oU(){return Math.random()}function aU(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function uU(){return Math.random()}function iU(){return Math.max(Math.random(),Math.random())}function cU(){return Math.random()}function dU(){return Math.max(Math.random(),Math.random())}function fU(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function mU(){return Math.max(Math.random(),Math.random())}function lU(){nU(),tU(),eU(),rU(),oU(),aU(),uU(),iU(),cU(),dU(),fU(),mU()}function hU(){return Math.max(Math.random(),Math.random())}function sU(){return Math.random()}function pU(){return Math.random()}function MU(){return Math.random()}function vU(){return Math.max(Math.random(),Math.random())}function NU(){return isNaN(void 0)}function CU(){return isNaN(void 0)}function yU(){return Math.max(Math.random(),Math.random())}function xU(){return Math.max(Math.random(),Math.random())}function gU(){return Math.random()}function IU(){return Math.random()}function bU(){return isNaN(void 0)}function RU(){hU(),sU(),pU(),MU(),vU(),NU(),CU(),yU(),xU(),gU(),IU(),bU()}function UU(){return Math.max(Math.random(),Math.random())}function QU(){return Math.max(Math.random(),Math.random())}function wU(){return isNaN(void 0)}function kU(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function EU(){return Math.random()}function TU(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function _U(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function SU(){return isNaN(void 0)}function PU(){return isNaN(void 0)}function OU(){return Math.random()}function AU(){return isNaN(void 0)}function DU(){return Math.max(Math.random(),Math.random())}function FU(){UU(),QU(),wU(),kU(),EU(),TU(),_U(),SU(),PU(),OU(),AU(),DU()}function LU(){return Math.random()}function jU(){return isNaN(void 0)}function HU(){return isNaN(void 0)}function BU(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function zU(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function VU(){return Math.random()}function KU(){return Math.random()}function WU(){return Math.max(Math.random(),Math.random())}function qU(){return isNaN(void 0)}function $U(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function GU(){return Math.random()}function YU(){return Math.max(Math.random(),Math.random())}function XU(){LU(),jU(),HU(),BU(),zU(),VU(),KU(),WU(),qU(),$U(),GU(),YU()}function ZU(){return Math.random()}function JU(){return Math.random()}function nQ(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function tQ(){return isNaN(void 0)}function eQ(){return Math.max(Math.random(),Math.random())}function rQ(){return isNaN(void 0)}function oQ(){return Math.random()}function aQ(){return isNaN(void 0)}function uQ(){return Math.max(Math.random(),Math.random())}function iQ(){return Math.max(Math.random(),Math.random())}function cQ(){return Math.random()}function dQ(){return isNaN(void 0)}function fQ(){ZU(),JU(),nQ(),tQ(),eQ(),rQ(),oQ(),aQ(),uQ(),iQ(),cQ(),dQ()}function mQ(){return isNaN(void 0)}function lQ(){return Math.max(Math.random(),Math.random())}function hQ(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function sQ(){return isNaN(void 0)}function pQ(){return isNaN(void 0)}function MQ(){return Math.random()}function vQ(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function NQ(){return Math.max(Math.random(),Math.random())}function CQ(){return Math.random()}function yQ(){return Math.max(Math.random(),Math.random())}function xQ(){return Math.max(Math.random(),Math.random())}function gQ(){return Math.max(Math.random(),Math.random())}function IQ(){mQ(),lQ(),hQ(),sQ(),pQ(),MQ(),vQ(),NQ(),CQ(),yQ(),xQ(),gQ()}function bQ(){return Math.max(Math.random(),Math.random())}function RQ(){return isNaN(void 0)}function UQ(){return Math.random()}function QQ(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function wQ(){return Math.random()}function kQ(){return isNaN(void 0)}function EQ(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function TQ(){return isNaN(void 0)}function _Q(){return Math.max(Math.random(),Math.random())}function SQ(){return isNaN(void 0)}function PQ(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function OQ(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function AQ(){bQ(),RQ(),UQ(),QQ(),wQ(),kQ(),EQ(),TQ(),_Q(),SQ(),PQ(),OQ()}function DQ(){return Math.max(Math.random(),Math.random())}function FQ(){return isNaN(void 0)}function LQ(){return Math.max(Math.random(),Math.random())}function jQ(){return Math.max(Math.random(),Math.random())}function HQ(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function BQ(){return isNaN(void 0)}function zQ(){return Math.max(Math.random(),Math.random())}function VQ(){return isNaN(void 0)}function KQ(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function WQ(){return isNaN(void 0)}function qQ(){return isNaN(void 0)}function $Q(){return isNaN(void 0)}function GQ(){DQ(),FQ(),LQ(),jQ(),HQ(),BQ(),zQ(),VQ(),KQ(),WQ(),qQ(),$Q()}function YQ(){return Math.random()}function XQ(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function ZQ(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function JQ(){return isNaN(void 0)}function nw(){return Math.max(Math.random(),Math.random())}function tw(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function ew(){return isNaN(void 0)}function rw(){return Math.max(Math.random(),Math.random())}function ow(){return Math.random()}function aw(){return Math.random()}function uw(){return isNaN(void 0)}function iw(){return Math.max(Math.random(),Math.random())}function cw(){YQ(),XQ(),ZQ(),JQ(),nw(),tw(),ew(),rw(),ow(),aw(),uw(),iw()}function dw(){QR(),jR(),JR(),lU(),RU(),FU(),XU(),fQ(),IQ(),AQ(),GQ(),cw()}function fw(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function mw(){return isNaN(void 0)}function lw(){return Math.max(Math.random(),Math.random())}function hw(){return Math.max(Math.random(),Math.random())}function sw(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function pw(){return Math.max(Math.random(),Math.random())}function Mw(){return isNaN(void 0)}function vw(){return Math.max(Math.random(),Math.random())}function Nw(){return Math.random()}function Cw(){return isNaN(void 0)}function yw(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function xw(){return Math.max(Math.random(),Math.random())}function gw(){fw(),mw(),lw(),hw(),sw(),pw(),Mw(),vw(),Nw(),Cw(),yw(),xw()}function Iw(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function bw(){return Math.max(Math.random(),Math.random())}function Rw(){return Math.max(Math.random(),Math.random())}function Uw(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Qw(){return Math.max(Math.random(),Math.random())}function ww(){return Math.random()}function kw(){return Math.max(Math.random(),Math.random())}function Ew(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Tw(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function _w(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Sw(){return Math.random()}function Pw(){return isNaN(void 0)}function Ow(){Iw(),bw(),Rw(),Uw(),Qw(),ww(),kw(),Ew(),Tw(),_w(),Sw(),Pw()}function Aw(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Dw(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Fw(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Lw(){return Math.max(Math.random(),Math.random())}function jw(){return Math.random()}function Hw(){return Math.random()}function Bw(){return Math.random()}function zw(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Vw(){return Math.max(Math.random(),Math.random())}function Kw(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Ww(){return Math.random()}function qw(){return isNaN(void 0)}function $w(){Aw(),Dw(),Fw(),Lw(),jw(),Hw(),Bw(),zw(),Vw(),Kw(),Ww(),qw()}function Gw(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Yw(){return Math.max(Math.random(),Math.random())}function Xw(){return isNaN(void 0)}function Zw(){return isNaN(void 0)}function Jw(){return isNaN(void 0)}function nk(){return Math.max(Math.random(),Math.random())}function tk(){return Math.max(Math.random(),Math.random())}function ek(){return Math.random()}function rk(){return isNaN(void 0)}function ok(){return isNaN(void 0)}function ak(){return Math.random()}function uk(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function ik(){Gw(),Yw(),Xw(),Zw(),Jw(),nk(),tk(),ek(),rk(),ok(),ak(),uk()}function ck(){return Math.random()}function dk(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function fk(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function mk(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function lk(){return isNaN(void 0)}function hk(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function sk(){return Math.max(Math.random(),Math.random())}function pk(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Mk(){return isNaN(void 0)}function vk(){return Math.max(Math.random(),Math.random())}function Nk(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Ck(){return Math.random()}function yk(){ck(),dk(),fk(),mk(),lk(),hk(),sk(),pk(),Mk(),vk(),Nk(),Ck()}function xk(){return Math.random()}function gk(){return Math.random()}function Ik(){return isNaN(void 0)}function bk(){return Math.max(Math.random(),Math.random())}function Rk(){return isNaN(void 0)}function Uk(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Qk(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function wk(){return isNaN(void 0)}function kk(){return isNaN(void 0)}function Ek(){return Math.random()}function Tk(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function _k(){return Math.random()}function Sk(){xk(),gk(),Ik(),bk(),Rk(),Uk(),Qk(),wk(),kk(),Ek(),Tk(),_k()}function Pk(){return Math.random()}function Ok(){return Math.random()}function Ak(){return Math.random()}function Dk(){return isNaN(void 0)}function Fk(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Lk(){return isNaN(void 0)}function jk(){return isNaN(void 0)}function Hk(){return Math.max(Math.random(),Math.random())}function Bk(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function zk(){return isNaN(void 0)}function Vk(){return Math.max(Math.random(),Math.random())}function Kk(){return Math.random()}function Wk(){Pk(),Ok(),Ak(),Dk(),Fk(),Lk(),jk(),Hk(),Bk(),zk(),Vk(),Kk()}function qk(){return Math.random()}function $k(){return Math.random()}function Gk(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Yk(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function Xk(){return isNaN(void 0)}function Zk(){return Math.max(Math.random(),Math.random())}function Jk(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function nE(){return Math.max(Math.random(),Math.random())}function tE(){return Math.max(Math.random(),Math.random())}function eE(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function rE(){return isNaN(void 0)}function oE(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function aE(){qk(),$k(),Gk(),Yk(),Xk(),Zk(),Jk(),nE(),tE(),eE(),rE(),oE()}function uE(){return Math.max(Math.random(),Math.random())}function iE(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function cE(){return Math.max(Math.random(),Math.random())}function dE(){return isNaN(void 0)}function fE(){return isNaN(void 0)}function mE(){return Math.random()}function lE(){return isNaN(void 0)}function hE(){return isNaN(void 0)}function sE(){return Math.max(Math.random(),Math.random())}function pE(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function ME(){return isNaN(void 0)}function vE(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function NE(){uE(),iE(),cE(),dE(),fE(),mE(),lE(),hE(),sE(),pE(),ME(),vE()}function CE(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function yE(){return Math.max(Math.random(),Math.random())}function xE(){return Math.max(Math.random(),Math.random())}function gE(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function IE(){return Math.max(Math.random(),Math.random())}function bE(){return Math.random()}function RE(){return Math.max(Math.random(),Math.random())}function UE(){return isNaN(void 0)}function QE(){return Math.random()}function wE(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function kE(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function EE(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function TE(){CE(),yE(),xE(),gE(),IE(),bE(),RE(),UE(),QE(),wE(),kE(),EE()}function _E(){return Math.max(Math.random(),Math.random())}function SE(){return Math.random()}function PE(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function OE(){return Math.max(Math.random(),Math.random())}function AE(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function DE(){return isNaN(void 0)}function FE(){return Math.random()}function LE(){return Math.random()}function jE(){return Math.random()}function HE(){return isNaN(void 0)}function BE(){return Math.random()}function zE(){return isNaN(void 0)}function VE(){_E(),SE(),PE(),OE(),AE(),DE(),FE(),LE(),jE(),HE(),BE(),zE()}function KE(){return isNaN(void 0)}function WE(){return Math.max(Math.random(),Math.random())}function qE(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function $E(){return isNaN(void 0)}function GE(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function YE(){return Math.random()}function XE(){return isNaN(void 0)}function ZE(){return Math.max(Math.random(),Math.random())}function JE(){return Math.max(Math.random(),Math.random())}function nT(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function tT(){return isNaN(void 0)}function eT(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function rT(){KE(),WE(),qE(),$E(),GE(),YE(),XE(),ZE(),JE(),nT(),tT(),eT()}function oT(){gw(),Ow(),$w(),ik(),yk(),Sk(),Wk(),aE(),NE(),TE(),VE(),rT()}function aT(){return Math.random()}function uT(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function iT(){return isNaN(void 0)}function cT(){return Math.random()}function dT(){return Math.max(Math.random(),Math.random())}function fT(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function mT(){return isNaN(void 0)}function lT(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function hT(){return Math.random()}function sT(){return Math.random()}function pT(){return Math.max(Math.random(),Math.random())}function MT(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function vT(){aT(),uT(),iT(),cT(),dT(),fT(),mT(),lT(),hT(),sT(),pT(),MT()}function NT(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function CT(){return Math.random()}function yT(){return Math.max(Math.random(),Math.random())}function xT(){return Math.random()}function gT(){return isNaN(void 0)}function IT(){return Math.random()}function bT(){return isNaN(void 0)}function RT(){return Math.max(Math.random(),Math.random())}function UT(){return Math.random()}function QT(){return isNaN(void 0)}function wT(){return isNaN(void 0)}function kT(){return Math.max(Math.random(),Math.random())}function ET(){NT(),CT(),yT(),xT(),gT(),IT(),bT(),RT(),UT(),QT(),wT(),kT()}function TT(){return Math.random()}function _T(){return isNaN(void 0)}function ST(){return isNaN(void 0)}function PT(){return Math.max(Math.random(),Math.random())}function OT(){return Math.max(Math.random(),Math.random())}function AT(){return isNaN(void 0)}function DT(){return Math.random()}function FT(){return Math.random()}function LT(){return Math.random()}function jT(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function HT(){return isNaN(void 0)}function BT(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function zT(){TT(),_T(),ST(),PT(),OT(),AT(),DT(),FT(),LT(),jT(),HT(),BT()}function VT(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function KT(){return Math.random()}function WT(){return isNaN(void 0)}function qT(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function $T(){return Math.random()}function GT(){return Math.random()}function YT(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function XT(){return Math.max(Math.random(),Math.random())}function ZT(){return Math.max(Math.random(),Math.random())}function JT(){return Math.random()}function n_(){return Math.max(Math.random(),Math.random())}function t_(){return Math.max(Math.random(),Math.random())}function e_(){VT(),KT(),WT(),qT(),$T(),GT(),YT(),XT(),ZT(),JT(),n_(),t_()}function r_(){return isNaN(void 0)}function o_(){return Math.random()}function a_(){return Math.random()}function u_(){return Math.random()}function i_(){return Math.random()}function c_(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function d_(){return Math.max(Math.random(),Math.random())}function f_(){return Math.random()}function m_(){return Math.random()}function l_(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function h_(){return Math.random()}function s_(){return isNaN(void 0)}function p_(){r_(),o_(),a_(),u_(),i_(),c_(),d_(),f_(),m_(),l_(),h_(),s_()}function M_(){return Math.max(Math.random(),Math.random())}function v_(){return Math.random()}function N_(){return isNaN(void 0)}function C_(){return isNaN(void 0)}function y_(){return Math.random()}function x_(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function g_(){return Math.random()}function I_(){return Math.max(Math.random(),Math.random())}function b_(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function R_(){return Math.random()}function U_(){return Math.max(Math.random(),Math.random())}function Q_(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function w_(){M_(),v_(),N_(),C_(),y_(),x_(),g_(),I_(),b_(),R_(),U_(),Q_()}function k_(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function E_(){return Math.max(Math.random(),Math.random())}function T_(){return isNaN(void 0)}function __(){return isNaN(void 0)}function S_(){return isNaN(void 0)}function P_(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function O_(){return Math.random()}function A_(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function D_(){return Math.random()}function F_(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function L_(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function j_(){return Math.max(Math.random(),Math.random())}function H_(){k_(),E_(),T_(),__(),S_(),P_(),O_(),A_(),D_(),F_(),L_(),j_()}function B_(){return isNaN(void 0)}function z_(){return Math.random()}function V_(){return Math.random()}function K_(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function W_(){return Math.max(Math.random(),Math.random())}function q_(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function $_(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function G_(){return Math.random()}function Y_(){return Math.max(Math.random(),Math.random())}function X_(){return Math.max(Math.random(),Math.random())}function Z_(){return Math.max(Math.random(),Math.random())}function J_(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function nS(){B_(),z_(),V_(),K_(),W_(),q_(),$_(),G_(),Y_(),X_(),Z_(),J_()}function tS(){return Math.max(Math.random(),Math.random())}function eS(){return isNaN(void 0)}function rS(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function oS(){return Math.max(Math.random(),Math.random())}function aS(){return Math.max(Math.random(),Math.random())}function uS(){return Math.random()}function iS(){return Math.random()}function cS(){return Math.max(Math.random(),Math.random())}function dS(){return isNaN(void 0)}function fS(){return isNaN(void 0)}function mS(){return Math.max(Math.random(),Math.random())}function lS(){return Math.max(Math.random(),Math.random())}function hS(){tS(),eS(),rS(),oS(),aS(),uS(),iS(),cS(),dS(),fS(),mS(),lS()}function sS(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function pS(){return Math.random()}function MS(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function vS(){return Math.random()}function NS(){return isNaN(void 0)}function CS(){return Math.random()}function yS(){return Math.max(Math.random(),Math.random())}function xS(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function gS(){return Math.random()}function IS(){return isNaN(void 0)}function bS(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function RS(){return Math.max(Math.random(),Math.random())}function US(){sS(),pS(),MS(),vS(),NS(),CS(),yS(),xS(),gS(),IS(),bS(),RS()}function QS(){return Math.max(Math.random(),Math.random())}function wS(){return Math.max(Math.random(),Math.random())}function kS(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function ES(){return isNaN(void 0)}function TS(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function _S(){return isNaN(void 0)}function SS(){return Math.max(Math.random(),Math.random())}function PS(){return isNaN(void 0)}function OS(){return Math.random()}function AS(){return Math.max(Math.random(),Math.random())}function DS(){return isNaN(void 0)}function FS(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function LS(){QS(),wS(),kS(),ES(),TS(),_S(),SS(),PS(),OS(),AS(),DS(),FS()}function jS(){return Math.random()}function HS(){return isNaN(void 0)}function BS(){return Math.max(Math.random(),Math.random())}function zS(){return isNaN(void 0)}function VS(){return Math.max(Math.random(),Math.random())}function KS(){return isNaN(void 0)}function WS(){return Math.max(Math.random(),Math.random())}function qS(){return isNaN(void 0)}function $S(){return Math.random()}function GS(){return Math.random()}function YS(){return Math.max(Math.random(),Math.random())}function XS(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function ZS(){jS(),HS(),BS(),zS(),VS(),KS(),WS(),qS(),$S(),GS(),YS(),XS()}function JS(){vT(),ET(),zT(),e_(),p_(),w_(),H_(),nS(),hS(),US(),LS(),ZS()}function nP(){Zt(),$o(),zi(),Lf(),Ph(),kM(),bC(),Cg(),sR(),dw(),oT(),JS()}function tP(){return Math.random()}function eP(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function rP(){return isNaN(void 0)}function oP(){return isNaN(void 0)}function aP(){return isNaN(void 0)}function uP(){return Math.max(Math.random(),Math.random())}function iP(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function cP(){return Math.max(Math.random(),Math.random())}function dP(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function fP(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function mP(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function lP(){return isNaN(void 0)}function hP(){UP(),LP(),ZP(),mO(),bO(),DO(),YO(),dA(),gA(),OA(),$A(),iD()}function sP(){return Math.max(Math.random(),Math.random())}function pP(){return Math.max(Math.random(),Math.random())}function MP(){return Math.random()}function vP(){return isNaN(void 0)}function NP(){return isNaN(void 0)}function CP(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function yP(){return isNaN(void 0)}function xP(){return Math.max(Math.random(),Math.random())}function gP(){return isNaN(void 0)}function IP(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function bP(){return Math.random()}function RP(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function UP(){sP(),pP(),MP(),vP(),NP(),CP(),yP(),xP(),gP(),IP(),bP(),RP()}function QP(){return Math.max(Math.random(),Math.random())}function wP(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function kP(){return isNaN(void 0)}function EP(){return Math.max(Math.random(),Math.random())}function TP(){return Math.max(Math.random(),Math.random())}function _P(){return Math.random()}function SP(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function PP(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function OP(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function AP(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function DP(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function FP(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function LP(){QP(),wP(),kP(),EP(),TP(),_P(),SP(),PP(),OP(),AP(),DP(),FP()}function jP(){return Math.random()}function HP(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function BP(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function zP(){return isNaN(void 0)}function VP(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function KP(){return Math.random()}function WP(){return Math.max(Math.random(),Math.random())}function qP(){return isNaN(void 0)}function $P(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function GP(){return Math.random()}function YP(){return Math.max(Math.random(),Math.random())}function XP(){return Math.random()}function ZP(){jP(),HP(),BP(),zP(),VP(),KP(),WP(),qP(),$P(),GP(),YP(),XP()}function JP(){return Math.random()}function nO(){return isNaN(void 0)}function tO(){return Math.max(Math.random(),Math.random())}function eO(){return isNaN(void 0)}function rO(){return Math.max(Math.random(),Math.random())}function oO(){return isNaN(void 0)}function aO(){return Math.random()}function uO(){return Math.random()}function iO(){return Math.max(Math.random(),Math.random())}function cO(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function dO(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function fO(){return Math.max(Math.random(),Math.random())}function mO(){JP(),nO(),tO(),eO(),rO(),oO(),aO(),uO(),iO(),cO(),dO(),fO()}function lO(){return isNaN(void 0)}function hO(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function sO(){return isNaN(void 0)}function pO(){return Math.max(Math.random(),Math.random())}function MO(){return Math.random()}function vO(){return Math.max(Math.random(),Math.random())}function NO(){return isNaN(void 0)}function CO(){return isNaN(void 0)}function yO(){return Math.random()}function xO(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function gO(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function IO(){return Math.max(Math.random(),Math.random())}function bO(){lO(),hO(),sO(),pO(),MO(),vO(),NO(),CO(),yO(),xO(),gO(),IO()}function RO(){return isNaN(void 0)}function UO(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function QO(){return Math.random()}function wO(){return isNaN(void 0)}function kO(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function EO(){return isNaN(void 0)}function TO(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function _O(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function SO(){return Math.random()}function PO(){return Math.max(Math.random(),Math.random())}function OO(){return isNaN(void 0)}function AO(){return isNaN(void 0)}function DO(){RO(),UO(),QO(),wO(),kO(),EO(),TO(),_O(),SO(),PO(),OO(),AO()}function FO(){return Math.random()}function LO(){return Math.max(Math.random(),Math.random())}function jO(){return Math.random()}function HO(){return Math.max(Math.random(),Math.random())}function BO(){return Math.random()}function zO(){return Math.random()}function VO(){return Math.random()}function KO(){return Math.random()}function WO(){return isNaN(void 0)}function qO(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function $O(){return Math.random()}function GO(){return Math.max(Math.random(),Math.random())}function YO(){FO(),LO(),jO(),HO(),BO(),zO(),VO(),KO(),WO(),qO(),$O(),GO()}function XO(){return Math.random()}function ZO(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function JO(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function nA(){return Math.random()}function tA(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function eA(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function rA(){return Math.max(Math.random(),Math.random())}function oA(){return isNaN(void 0)}function aA(){return isNaN(void 0)}function uA(){return isNaN(void 0)}function iA(){return Math.max(Math.random(),Math.random())}function cA(){return Math.max(Math.random(),Math.random())}function dA(){XO(),ZO(),JO(),nA(),tA(),eA(),rA(),oA(),aA(),uA(),iA(),cA()}function fA(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function mA(){return Math.max(Math.random(),Math.random())}function lA(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function hA(){return isNaN(void 0)}function sA(){return isNaN(void 0)}function pA(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function MA(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function vA(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function NA(){return Math.max(Math.random(),Math.random())}function CA(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function yA(){return isNaN(void 0)}function xA(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function gA(){fA(),mA(),lA(),hA(),sA(),pA(),MA(),vA(),NA(),CA(),yA(),xA()}function IA(){return Math.random()}function bA(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function RA(){return Math.max(Math.random(),Math.random())}function UA(){return Math.max(Math.random(),Math.random())}function QA(){return Math.random()}function wA(){return isNaN(void 0)}function kA(){return isNaN(void 0)}function EA(){return Math.random()}function TA(){return Math.random()}function _A(){return Math.random()}function SA(){return isNaN(void 0)}function PA(){return Math.max(Math.random(),Math.random())}function OA(){IA(),bA(),RA(),UA(),QA(),wA(),kA(),EA(),TA(),_A(),SA(),PA()}function AA(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function DA(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function FA(){return Math.random()}function LA(){return Math.max(Math.random(),Math.random())}function jA(){return Math.max(Math.random(),Math.random())}function HA(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function BA(){return Math.random()}function zA(){return Math.random()}function VA(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function KA(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function WA(){return Math.max(Math.random(),Math.random())}function qA(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function $A(){AA(),DA(),FA(),LA(),jA(),HA(),BA(),zA(),VA(),KA(),WA(),qA()}function GA(){return isNaN(void 0)}function YA(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function XA(){return isNaN(void 0)}function ZA(){return isNaN(void 0)}function JA(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function nD(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function tD(){return Math.random()}function eD(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function rD(){return Math.random()}function oD(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function aD(){return encodeURIComponent(',45098#"\xa4#"&\xa4/%"Q"')}function uD(){return Math.random()}function iD(){GA(),YA(),XA(),ZA(),JA(),nD(),tD(),eD(),rD(),oD(),aD(),uD()}function cD(){tP(),eP(),rP(),oP(),aP(),uP(),iP(),cP(),dP(),fP(),mP(),lP()}function dD(){return isNaN(void 0)}function fD(){return Math.max(Math.random(),Math.random())}function mD(){return Math.max(Math.random(),Math.random())}function lD(){return Math.max(Math.random(),Math.random())}function hD(){return isNaN(void 0)}function sD(){return Math.max(Math.random(),Math.random())}function pD(){return isNaN(void 0)}function MD(){return isNaN(void 0)}function vD(){return isNaN(void 0)}function ND(){nP(),hP(),cD(),dD(),fD(),mD(),lD(),hD(),sD(),pD(),MD(),vD(),console.log("Done!")}function CD(){nP(),hP(),cD(),dD(),fD(),mD(),lD(),hD(),sD(),pD(),MD(),vD(),console.log("Done!")}t.b=ND,t.a=CD},function(n,t,e){"use strict";function r(n){return n*n+1}function o(n,t){return n*n>=t?n*n:o(n*n,t)}function a(n,t,e){return n+t>e?n+t:a(n+t,t,e)}function u(n){return r(10)+o(10,99999999999)+a(10,5,1050)}t.a=u},function(n,t,e){"use strict";function r(){return o(),Math.random()}function o(){return a(),Math.random()}function a(){return u(),Math.random()}function u(){return i(),Math.random()}function i(){return c(),Math.random()}function c(){return d(),Math.random()}function d(){return f(),Math.random()}function f(){return m(),Math.random()}function m(){return l(),Math.random()}function l(){return h(),Math.random()}function h(){return s(),Math.random()}function s(){return p(),Math.random()}function p(){return M(),Math.random()}function M(){return v(),Math.random()}function v(){return N(),Math.random()}function N(){return C(),Math.random()}function C(){return y(),Math.random()}function y(){return x(),Math.random()}function x(){return g(),Math.random()}function g(){return I(),Math.random()}function I(){return b(),Math.random()}function b(){return R(),Math.random()}function R(){return U(),Math.random()}function U(){return Q(),Math.random()}function Q(){return w(),Math.random()}function w(){return k(),Math.random()}function k(){return E(),Math.random()}function E(){return T(),Math.random()}function T(){return _(),Math.random()}function _(){return S(),Math.random()}function S(){return P(),Math.random()}function P(){return O(),Math.random()}function O(){return A(),Math.random()}function A(){return D(),Math.random()}function D(){return F(),Math.random()}function F(){return L(),Math.random()}function L(){return j(),Math.random()}function j(){return H(),Math.random()}function H(){return B(),Math.random()}function B(){return z(),Math.random()}function z(){return V(),Math.random()}function V(){return K(),Math.random()}function K(){return W(),Math.random()}function W(){return q(),Math.random()}function q(){return $(),Math.random()}function $(){return G(),Math.random()}function G(){return Y(),Math.random()}function Y(){return X(),Math.random()}function X(){return Z(),Math.random()}function Z(){return J(),Math.random()}function J(){return nn(),Math.random()}function nn(){return tn(),Math.random()}function tn(){return en(),Math.random()}function en(){return rn(),Math.random()}function rn(){return on(),Math.random()}function on(){return an(),Math.random()}function an(){return un(),Math.random()}function un(){return cn(),Math.random()}function cn(){return dn(),Math.random()}function dn(){return fn(),Math.random()}function fn(){return mn(),Math.random()}function mn(){return ln(),Math.random()}function ln(){return hn(),Math.random()}function hn(){return sn(),Math.random()}function sn(){return pn(),Math.random()}function pn(){return Mn(),Math.random()}function Mn(){return vn(),Math.random()}function vn(){return Nn(),Math.random()}function Nn(){return Cn(),Math.random()}function Cn(){return yn(),Math.random()}function yn(){return xn(),Math.random()}function xn(){return gn(),Math.random()}function gn(){return In(),Math.random()}function In(){return bn(),Math.random()}function bn(){return Rn(),Math.random()}function Rn(){return Un(),Math.random()}function Un(){return Qn(),Math.random()}function Qn(){return wn(),Math.random()}function wn(){return kn(),Math.random()}function kn(){return En(),Math.random()}function En(){return Tn(),Math.random()}function Tn(){return _n(),Math.random()}function _n(){return Sn(),Math.random()}function Sn(){return Pn(),Math.random()}function Pn(){return On(),Math.random()}function On(){return An(),Math.random()}function An(){return Dn(),Math.random()}function Dn(){return Fn(),Math.random()}function Fn(){return Ln(),Math.random()}function Ln(){return jn(),Math.random()}function jn(){return Hn(),Math.random()}function Hn(){return Bn(),Math.random()}function Bn(){return zn(),Math.random()}function zn(){return Vn(),Math.random()}function Vn(){return Kn(),Math.random()}function Kn(){return Wn(),Math.random()}function Wn(){return qn(),Math.random()}function qn(){return $n(),Math.random()}function $n(){return Gn(),Math.random()}function Gn(){return Yn(),Math.random()}function Yn(){return Xn(),Math.random()}function Xn(){return Zn(),Math.random()}function Zn(){return Jn(),Math.random()}function Jn(){return nt(),Math.random()}function nt(){return tt(),Math.random()}function tt(){return et(),Math.random()}function et(){return rt(),Math.random()}function rt(){return ot(),Math.random()}function ot(){return at(),Math.random()}function at(){return ut(),Math.random()}function ut(){return it(),Math.random()}function it(){return ct(),Math.random()}function ct(){return dt(),Math.random()}function dt(){return ft(),Math.random()}function ft(){return mt(),Math.random()}function mt(){return lt(),Math.random()}function lt(){return ht(),Math.random()}function ht(){return st(),Math.random()}function st(){return pt(),Math.random()}function pt(){return Mt(),Math.random()}function Mt(){return vt(),Math.random()}function vt(){return Nt(),Math.random()}function Nt(){return Ct(),Math.random()}function Ct(){return yt(),Math.random()}function yt(){return xt(),Math.random()}function xt(){return gt(),Math.random()}function gt(){return It(),Math.random()}function It(){return bt(),Math.random()}function bt(){return Rt(),Math.random()}function Rt(){return Ut(),Math.random()}function Ut(){return Qt(),Math.random()}function Qt(){return wt(),Math.random()}function wt(){return kt(),Math.random()}function kt(){return Et(),Math.random()}function Et(){return Tt(),Math.random()}function Tt(){return _t(),Math.random()}function _t(){return St(),Math.random()}function St(){return Pt(),Math.random()}function Pt(){return Ot(),Math.random()}function Ot(){return At(),Math.random()}function At(){return Dt(),Math.random()}function Dt(){return Ft(),Math.random()}function Ft(){return Lt(),Math.random()}function Lt(){return jt(),Math.random()}function jt(){return Ht(),Math.random()}function Ht(){return Bt(),Math.random()}function Bt(){return zt(),Math.random()}function zt(){return Vt(),Math.random()}function Vt(){return Kt(),Math.random()}function Kt(){return Wt(),Math.random()}function Wt(){return qt(),Math.random()}function qt(){return $t(),Math.random()}function $t(){return Gt(),Math.random()}function Gt(){return Yt(),Math.random()}function Yt(){return Xt(),Math.random()}function Xt(){return Zt(),Math.random()}function Zt(){return Jt(),Math.random()}function Jt(){return ne(),Math.random()}function ne(){return te(),Math.random()}function te(){return ee(),Math.random()}function ee(){return re(),Math.random()}function re(){return oe(),Math.random()}function oe(){return ae(),Math.random()}function ae(){return ue(),Math.random()}function ue(){return ie(),Math.random()}function ie(){return ce(),Math.random()}function ce(){return de(),Math.random()}function de(){return fe(),Math.random()}function fe(){return me(),Math.random()}function me(){return le(),Math.random()}function le(){return he(),Math.random()}function he(){return se(),Math.random()}function se(){return pe(),Math.random()}function pe(){return Me(),Math.random()}function Me(){return ve(),Math.random()}function ve(){return Ne(),Math.random()}function Ne(){return Ce(),Math.random()}function Ce(){return ye(),Math.random()}function ye(){return xe(),Math.random()}function xe(){return ge(),Math.random()}function ge(){return Ie(),Math.random()}function Ie(){return be(),Math.random()}function be(){return Re(),Math.random()}function Re(){return Ue(),Math.random()}function Ue(){return Qe(),Math.random()}function Qe(){return we(),Math.random()}function we(){return ke(),Math.random()}function ke(){return Ee(),Math.random()}function Ee(){return Te(),Math.random()}function Te(){return _e(),Math.random()}function _e(){return Se(),Math.random()}function Se(){return Pe(),Math.random()}function Pe(){return Oe(),Math.random()}function Oe(){return Ae(),Math.random()}function Ae(){return De(),Math.random()}function De(){return Fe(),Math.random()}function Fe(){return Le(),Math.random()}function Le(){return je(),Math.random()}function je(){return He(),Math.random()}function He(){return Math.random()}t.a=r}]);
+//# sourceMappingURL=main.js.map \ No newline at end of file
diff --git a/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app-build/static/js/main.js.map b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app-build/static/js/main.js.map
new file mode 100644
index 0000000000..780c3c326a
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app-build/static/js/main.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["../static/js/main.js","../webpack/bootstrap 248c19f4efa19f864adc","../node_modules/object-assign/index.js","../node_modules/react/index.js","../node_modules/fbjs/lib/emptyFunction.js","../node_modules/promise/lib/core.js","../node_modules/fbjs/lib/emptyObject.js","../config/polyfills.js","../node_modules/promise/lib/rejection-tracking.js","../node_modules/asap/browser-raw.js","../node_modules/webpack/buildin/global.js","../node_modules/promise/lib/es6-extensions.js","../node_modules/whatwg-fetch/fetch.js","index.js","../node_modules/react/cjs/react.production.min.js","../node_modules/react-dom/index.js","../node_modules/react-dom/cjs/react-dom.production.min.js","../node_modules/fbjs/lib/ExecutionEnvironment.js","../node_modules/fbjs/lib/EventListener.js","../node_modules/fbjs/lib/getActiveElement.js","../node_modules/fbjs/lib/shallowEqual.js","../node_modules/fbjs/lib/containsNode.js","../node_modules/fbjs/lib/isTextNode.js","../node_modules/fbjs/lib/isNode.js","../node_modules/fbjs/lib/focusNode.js","App.js","step-in-test.js","step-over-test.js","step-out-test.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","toObject","val","undefined","TypeError","getOwnPropertySymbols","propIsEnumerable","propertyIsEnumerable","assign","test1","String","getOwnPropertyNames","test2","fromCharCode","map","join","test3","split","forEach","letter","keys","err","target","source","from","symbols","to","arguments","length","key","makeEmptyFunction","arg","emptyFunction","thatReturns","thatReturnsFalse","thatReturnsTrue","thatReturnsNull","thatReturnsThis","this","thatReturnsArgument","noop","getThen","obj","then","ex","LAST_ERROR","IS_ERROR","tryCallOne","fn","a","tryCallTwo","b","Promise","_75","_83","_18","_38","doResolve","safeThen","self","onFulfilled","onRejected","constructor","resolve","reject","res","handle","Handler","deferred","_47","push","handleResolved","asap","cb","promise","ret","newValue","finale","bind","_71","done","value","reason","_44","emptyObject","enable","window","disable","enabled","options","onUnhandled","id","allRejections","matchWhitelist","rejections","error","whitelist","DEFAULT_WHITELIST","displayId","logged","logError","onHandled","console","warn","_56","clearTimeout","timeout","setTimeout","stack","line","list","some","cls","ReferenceError","RangeError","global","rawAsap","task","queue","requestFlush","flushing","flush","index","currentIndex","capacity","scan","newLength","makeRequestCallFromTimer","callback","handleTimer","timeoutHandle","clearInterval","intervalHandle","setInterval","scope","BrowserMutationObserver","MutationObserver","WebKitMutationObserver","toggle","observer","node","document","createTextNode","observe","characterData","data","g","Function","eval","e","valuePromise","TRUE","FALSE","NULL","UNDEFINED","ZERO","EMPTYSTRING","all","arr","args","Array","slice","remaining","race","values","normalizeName","test","toLowerCase","normalizeValue","iteratorFor","items","iterator","next","shift","support","iterable","Symbol","Headers","headers","append","isArray","header","consumed","body","bodyUsed","fileReaderReady","reader","onload","result","onerror","readBlobAsArrayBuffer","blob","FileReader","readAsArrayBuffer","readBlobAsText","readAsText","readArrayBufferAsText","buf","view","Uint8Array","chars","bufferClone","byteLength","set","buffer","Body","_initBody","_bodyInit","_bodyText","Blob","isPrototypeOf","_bodyBlob","formData","FormData","_bodyFormData","searchParams","URLSearchParams","toString","arrayBuffer","isDataView","_bodyArrayBuffer","ArrayBuffer","isArrayBufferView","Error","type","rejected","text","decode","json","JSON","parse","normalizeMethod","method","upcased","toUpperCase","methods","indexOf","Request","input","url","credentials","mode","referrer","form","trim","bytes","replace","decodeURIComponent","parseHeaders","rawHeaders","parts","Response","bodyInit","status","ok","statusText","fetch","viewClasses","DataView","isView","oldValue","has","thisArg","entries","clone","response","redirectStatuses","redirect","location","init","request","xhr","XMLHttpRequest","getAllResponseHeaders","responseURL","responseText","ontimeout","open","withCredentials","responseType","setRequestHeader","send","polyfill","__webpack_exports__","__WEBPACK_IMPORTED_MODULE_0_react__","__WEBPACK_IMPORTED_MODULE_0_react___default","__WEBPACK_IMPORTED_MODULE_1_react_dom__","__WEBPACK_IMPORTED_MODULE_1_react_dom___default","__WEBPACK_IMPORTED_MODULE_2__App__","render","createElement","getElementById","y","encodeURIComponent","framesToPop","A","props","context","refs","updater","z","B","C","E","J","k","ref","H","I","f","children","h","defaultProps","$$typeof","r","_owner","G","current","K","escape","=",":","N","M","pop","keyPrefix","func","count","O","P","t","u","v","Q","x","R","S","T","L","q","w","isMounted","enqueueForceUpdate","enqueueReplaceState","enqueueSetState","isReactComponent","setState","forceUpdate","D","isPureReactComponent","F","unstable_isAsyncReactComponent","__self","__source","U","Children","toArray","only","Component","PureComponent","unstable_AsyncComponent","Fragment","cloneElement","createFactory","isValidElement","version","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","V","freeze","default","W","checkDCE","__REACT_DEVTOOLS_GLOBAL_HOOK__","pa","va","oa","wa","hasBooleanValue","hasStringBooleanValue","hasOverloadedBooleanValue","ua","Ia","Ja","_hasCaughtError","_caughtError","apply","Ka","_hasRethrowError","_rethrowError","Na","La","Ma","Oa","extractEvents","eventTypes","Pa","phasedRegistrationNames","Qa","registrationName","Ra","Sa","dependencies","Ta","Ua","Za","currentTarget","Ya","invokeGuardedCallbackAndCatchFirstError","$a","concat","ab","_dispatchListeners","_dispatchInstances","isPropagationStopped","isPersistent","release","db","gb","ib","stateNode","Wa","disabled","jb","kb","bb","lb","rethrowCaughtError","pb","parentNode","tag","qb","rb","ob","tb","ub","vb","dispatchConfig","wb","_targetInst","xb","yb","zb","Ab","Bb","alternate","Eb","Db","canUseDOM","documentElement","Fb","_fallbackText","_startText","Gb","_root","nativeEvent","Interface","isDefaultPrevented","defaultPrevented","returnValue","Kb","eventPool","Lb","destructor","Jb","getPooled","Mb","Nb","dc","Pb","keyCode","ec","detail","gc","which","cc","ac","hc","fc","Vb","ctrlKey","altKey","metaKey","char","$b","mc","Xa","jc","restoreControlledState","oc","kc","lc","pc","rc","tc","sc","vc","nodeName","uc","wc","srcElement","correspondingUseElement","nodeType","yc","setAttribute","xc","implementation","hasFeature","zc","Ac","getOwnPropertyDescriptor","getValue","setValue","stopTracking","_valueTracker","Bc","Cc","checked","Ec","Dc","change","Hc","Ic","Jc","Lc","Fc","detachEvent","Mc","Gc","propertyName","Nc","attachEvent","Oc","Pc","$c","bd","dd","getModifierState","cd","ed","fd","jd","displayName","kd","effectTag","ld","_reactInternalFiber","md","nd","child","sibling","od","pd","rd","targetInst","ancestors","containerInfo","sd","topLevelType","ud","td","ba","listen","vd","wd","capture","qd","yd","Cd","Ad","zd","Bd","Hd","Gd","Fd","Ed","Id","firstChild","Jd","textContent","offset","nextSibling","Kd","contentEditable","Rd","Qd","Nd","da","start","selectionStart","end","selectionEnd","getSelection","anchorNode","anchorOffset","focusNode","focusOffset","Pd","ea","Md","select","Od","Td","Ud","Vd","Wd","charCode","Zd","$d","ae","be","ce","he","ge","ke","le","je","ie","me","contextTypes","__reactInternalMemoizedUnmaskedChildContext","__reactInternalMemoizedMaskedChildContext","childContextTypes","ne","X","oe","cursor","pe","getChildContext","qe","__reactInternalMemoizedMergedChildContext","re","Y","memoizedState","updateQueue","memoizedProps","pendingProps","internalContextTag","lastEffect","firstEffect","nextEffect","expirationTime","se","te","ue","ve","we","handler","xe","ye","pendingChildren","Be","Ce","isDisabled","supportsFiber","inject","ze","onCommitFiberRoot","Ae","onCommitFiberUnmount","De","Ee","Fe","baseState","first","last","callbackList","hasForceUpdate","isInitialized","Ge","He","Ie","partialState","Je","isReplace","isForced","Ke","Le","nextCallback","adoptClassInstance","constructClassInstance","mountClassInstance","state","componentWillMount","componentDidMount","updateClassInstance","componentWillReceiveProps","componentDidUpdate","shouldComponentUpdate","componentWillUpdate","Xe","We","Ze","_stringRef","$e","af","Map","Re","Ve","Se","Te","Ue","Ye","df","cf","bf","pendingContext","shouldSetTextContent","useSyncScheduling","shouldDeprioritizeSubtree","pushHostContext","pushHostContainer","enterHydrationState","resetHydrationState","tryToClaimNextHydratableInstance","Ob","beginWork","element","hydrate","beginFailedWork","ef","createInstance","createTextInstance","appendInitialChild","finalizeInitialChildren","prepareUpdate","persistence","getRootHostContainer","popHostContext","getHostContext","popHostContainer","prepareToHydrateHostInstance","prepareToHydrateHostTextInstance","popHydrationState","mutation","completeWork","ff","componentWillUnmount","getPublicInstance","commitMount","commitUpdate","resetTextContent","commitTextUpdate","appendChild","appendChildToContainer","insertBefore","insertInContainerBefore","removeChild","removeChildFromContainer","commitResetTextContent","commitPlacement","commitDeletion","commitWork","commitLifeCycles","commitAttachRef","commitDetachRef","hf","gf","getChildHostContext","getRootHostContext","resetHostContainer","jf","hydration","canHydrateInstance","canHydrateTextInstance","getNextHydratableSibling","getFirstHydratableChild","hydrateInstance","hydrateTextInstance","kf","Qb","ja","isReadyForCommit","yg","zg","Ag","Ne","Oe","Sc","Bg","Tc","Cg","Dg","Eg","componentDidCatch","componentStack","ca","Qc","ha","qa","Fg","rg","Gg","Uc","ra","Rc","eb","qg","Set","add","_debugOwner","_debugSource","fileName","lineNumber","componentName","errorBoundary","errorBoundaryFound","errorBoundaryName","willRetry","suppressReactErrorLogging","Vc","ka","Hg","Rb","Ig","nextScheduledRoot","remainingExpirationTime","sa","Fa","la","Sb","ma","na","Wc","Pe","Tb","Jg","Xc","Kg","fb","Yc","Ub","Zc","finishedWork","timeRemaining","Lg","Me","now","scheduleDeferredCallback","cancelDeferredCallback","prepareForCommit","resetAfterCommit","computeAsyncExpiration","computeExpirationForFiber","scheduleWork","batchedUpdates","unbatchedUpdates","flushSync","deferredUpdates","lf","createContainer","updateContainer","getPublicRootInstance","findHostInstance","findHostInstanceWithNoPortals","injectIntoDevTools","findFiberByHostInstance","findHostInstanceByFiber","pf","Hf","Gf","Ff","Ef","If","mutationMethod","hasNumericValue","isNaN","hasPositiveNumericValue","Jf","mustUseProperty","attributeName","attributeNamespace","setAttributeNS","Kf","removeAttribute","Lf","step","min","max","defaultChecked","defaultValue","_wrapperState","initialValue","initialChecked","Mf","controlled","Nf","Of","parseFloat","Pf","Qf","aa","Rf","Sf","selected","defaultSelected","Tf","wasMultiple","multiple","Uf","dangerouslySetInnerHTML","Vf","Wf","Xf","Zf","$f","cg","lastChild","nodeValue","fg","style","dg","setProperty","hg","gg","ig","is","lg","ownerDocument","topBlur","topFocus","topCancel","topClose","Dd","ng","jg","innerHTML","createElementNS","og","pg","mg","kg","__html","bg","onClick","onclick","sg","tg","ug","vg","Ng","Og","hasAttribute","Pg","_reactRootContainer","Z","Qg","Rg","fa","ia","suppressContentEditableWarning","suppressHydrationWarning","ta","MUST_USE_PROPERTY","HAS_BOOLEAN_VALUE","HAS_NUMERIC_VALUE","HAS_POSITIVE_NUMERIC_VALUE","HAS_OVERLOADED_BOOLEAN_VALUE","HAS_STRING_BOOLEAN_VALUE","injectDOMPropertyConfig","Properties","DOMAttributeNamespaces","DOMAttributeNames","DOMMutationMethods","xa","ya","za","Aa","Ba","Ca","Da","allowFullScreen","async","autoFocus","autoPlay","cols","controls","defer","download","draggable","formNoValidate","hidden","loop","muted","noValidate","playsInline","readOnly","required","reversed","rows","rowSpan","scoped","seamless","size","span","spellCheck","tabIndex","itemScope","acceptCharset","className","htmlFor","httpEquiv","validity","badInput","activeElement","Ea","xlink","xml","Ga","autoReverse","externalResourcesRequired","preserveAlpha","xlinkActuate","xlinkArcrole","xlinkHref","xlinkRole","xlinkShow","xlinkTitle","xlinkType","xmlBase","xmlLang","xmlSpace","Ha","injection","injectErrorUtils","invokeGuardedCallback","hasCaughtError","clearCaughtError","Va","plugins","eventNameDispatchConfigs","registrationNameModules","registrationNameDependencies","possibleRegistrationNames","injectEventPluginOrder","injectEventPluginsByName","hb","mb","getListener","enqueueEvents","processEventQueue","nb","Math","random","sb","precacheFiberNode","getClosestInstanceFromNode","getInstanceFromNode","getNodeFromInstance","getFiberCurrentPropsFromNode","updateFiberProps","Cb","accumulateTwoPhaseDispatches","accumulateTwoPhaseDispatchesSkipTarget","accumulateEnterLeaveDispatches","accumulateDirectDispatches","Hb","Ib","eventPhase","bubbles","cancelable","timeStamp","Date","isTrusted","preventDefault","stopPropagation","cancelBubble","persist","augmentClass","Wb","documentMode","Xb","Yb","opera","parseInt","Zb","bc","beforeInput","bubbled","captured","compositionEnd","compositionStart","compositionUpdate","ic","nc","injectFiberControlledHostComponent","qc","enqueueStateRestore","restoreStateIfNeeded","color","date","datetime","datetime-local","email","month","number","password","range","search","tel","time","week","Kc","ad","_isInputEventSupported","getAttribute","Alt","Control","Meta","Shift","screenX","screenY","clientX","clientY","pageX","pageY","shiftKey","button","buttons","relatedTarget","fromElement","toElement","gd","mouseEnter","mouseLeave","hd","defaultView","parentWindow","xd","_enabled","_handleTopLevel","setHandleTopLevel","setEnabled","isEnabled","trapBubbledEvent","trapCapturedEvent","dispatchEvent","animationend","animationiteration","animationstart","transitionend","animation","transition","topAbort","topAnimationEnd","topAnimationIteration","topAnimationStart","topCanPlay","topCanPlayThrough","topChange","topClick","topCompositionEnd","topCompositionStart","topCompositionUpdate","topContextMenu","topCopy","topCut","topDoubleClick","topDrag","topDragEnd","topDragEnter","topDragExit","topDragLeave","topDragOver","topDragStart","topDrop","topDurationChange","topEmptied","topEncrypted","topEnded","topError","topInput","topKeyDown","topKeyPress","topKeyUp","topLoadedData","topLoad","topLoadedMetadata","topLoadStart","topMouseDown","topMouseMove","topMouseOut","topMouseOver","topMouseUp","topPaste","topPause","topPlay","topPlaying","topProgress","topRateChange","topScroll","topSeeked","topSeeking","topSelectionChange","topStalled","topSuspend","topTextInput","topTimeUpdate","topToggle","topTouchCancel","topTouchEnd","topTouchMove","topTouchStart","topTransitionEnd","topVolumeChange","topWaiting","topWheel","Ld","Sd","onSelect","animationName","elapsedTime","pseudoElement","clipboardData","Xd","Esc","Spacebar","Left","Up","Right","Down","Del","Win","Menu","Apps","Scroll","MozPrintableKey","Yd","8","9","12","13","16","17","18","19","20","27","32","33","34","35","36","37","38","39","40","45","46","112","113","114","115","116","117","118","119","120","121","122","123","144","145","224","repeat","locale","dataTransfer","touches","targetTouches","changedTouches","deltaX","wheelDeltaX","deltaY","wheelDeltaY","wheelDelta","deltaZ","deltaMode","de","ee","fe","SimpleEventPlugin","EnterLeaveEventPlugin","ChangeEventPlugin","SelectEventPlugin","BeforeInputEventPlugin","Qe","mf","nf","of","qf","performance","rf","sf","tf","requestIdleCallback","cancelIdleCallback","Bf","uf","vf","wf","xf","yf","zf","Af","didTimeout","Cf","addEventListener","requestAnimationFrame","Df","postMessage","Infinity","Yf","html","mathml","svg","ag","MSApp","execUnsafeLocalFunction","namespaceURI","animationIterationCount","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","columns","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","fontWeight","lineClamp","lineHeight","opacity","order","orphans","tabSize","widows","zIndex","zoom","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","strokeWidth","eg","charAt","substring","menuitem","area","base","br","col","embed","hr","img","keygen","link","meta","param","track","wbr","wg","setInitialProperties","diffProperties","updateProperties","diffHydratedProperties","diffHydratedText","warnForUnmatchedText","warnForDeletedHydratableElement","warnForDeletedHydratableText","warnForInsertedHydratedElement","warnForInsertedHydratedText","querySelectorAll","stringify","xg","Mg","tagName","rangeCount","focusedElem","selectionRange","extend","createRange","setStart","removeAllRanges","addRange","setEnd","left","scrollLeft","top","scrollTop","focus","didNotMatchHydratedContainerTextInstance","didNotMatchHydratedTextInstance","didNotHydrateContainerInstance","didNotHydrateInstance","didNotFindHydratableContainerInstance","didNotFindHydratableContainerTextInstance","didNotFindHydratableInstance","didNotFindHydratableTextInstance","unmount","Sg","createPortal","findDOMNode","unstable_renderSubtreeIntoContainer","unmountComponentAtNode","unstable_createPortal","unstable_batchedUpdates","unstable_deferredUpdates","EventPluginHub","EventPluginRegistry","EventPropagators","ReactControlledComponent","ReactDOMComponentTree","ReactDOMEventListener","bundleType","rendererPackageName","Tg","Ug","ExecutionEnvironment","canUseWorkers","Worker","canUseEventListeners","canUseViewport","screen","isInWorker","EventListener","eventType","remove","removeEventListener","registerDefault","getActiveElement","doc","shallowEqual","objA","objB","keysA","keysB","containsNode","outerNode","innerNode","isTextNode","contains","compareDocumentPosition","isNode","Node","_classCallCheck","instance","Constructor","_possibleConstructorReturn","_inherits","subClass","superClass","create","writable","setPrototypeOf","__proto__","__WEBPACK_IMPORTED_MODULE_1__step_in_test_js__","__WEBPACK_IMPORTED_MODULE_2__step_over_test_js__","__WEBPACK_IMPORTED_MODULE_3__step_out_test_js__","_createClass","defineProperties","descriptor","protoProps","staticProps","App","_Component","getPrototypeOf","hitBreakpoint","log","hitDebugStatement","f0_0_0_0","f0_0_0_1","f0_0_0_2","f0_0_0_3","f0_0_0_4","f0_0_0_5","f0_0_0_6","f0_0_0_7","f0_0_0_8","f0_0_0_9","f0_0_0_10","f0_0_0_11","f0_0_0","f0_0_1_0","f0_0_1_1","f0_0_1_2","f0_0_1_3","f0_0_1_4","f0_0_1_5","f0_0_1_6","f0_0_1_7","f0_0_1_8","f0_0_1_9","f0_0_1_10","f0_0_1_11","f0_0_1","f0_0_2_0","f0_0_2_1","f0_0_2_2","f0_0_2_3","f0_0_2_4","f0_0_2_5","f0_0_2_6","f0_0_2_7","f0_0_2_8","f0_0_2_9","f0_0_2_10","f0_0_2_11","f0_0_2","f0_0_3_0","f0_0_3_1","f0_0_3_2","f0_0_3_3","f0_0_3_4","f0_0_3_5","f0_0_3_6","f0_0_3_7","f0_0_3_8","f0_0_3_9","f0_0_3_10","f0_0_3_11","f0_0_3","f0_0_4_0","f0_0_4_1","f0_0_4_2","f0_0_4_3","f0_0_4_4","f0_0_4_5","f0_0_4_6","f0_0_4_7","f0_0_4_8","f0_0_4_9","f0_0_4_10","f0_0_4_11","f0_0_4","f0_0_5_0","f0_0_5_1","f0_0_5_2","f0_0_5_3","f0_0_5_4","f0_0_5_5","f0_0_5_6","f0_0_5_7","f0_0_5_8","f0_0_5_9","f0_0_5_10","f0_0_5_11","f0_0_5","f0_0_6_0","f0_0_6_1","f0_0_6_2","f0_0_6_3","f0_0_6_4","f0_0_6_5","f0_0_6_6","f0_0_6_7","f0_0_6_8","f0_0_6_9","f0_0_6_10","f0_0_6_11","f0_0_6","f0_0_7_0","f0_0_7_1","f0_0_7_2","f0_0_7_3","f0_0_7_4","f0_0_7_5","f0_0_7_6","f0_0_7_7","f0_0_7_8","f0_0_7_9","f0_0_7_10","f0_0_7_11","f0_0_7","f0_0_8_0","f0_0_8_1","f0_0_8_2","f0_0_8_3","f0_0_8_4","f0_0_8_5","f0_0_8_6","f0_0_8_7","f0_0_8_8","f0_0_8_9","f0_0_8_10","f0_0_8_11","f0_0_8","f0_0_9_0","f0_0_9_1","f0_0_9_2","f0_0_9_3","f0_0_9_4","f0_0_9_5","f0_0_9_6","f0_0_9_7","f0_0_9_8","f0_0_9_9","f0_0_9_10","f0_0_9_11","f0_0_9","f0_0_10_0","f0_0_10_1","f0_0_10_2","f0_0_10_3","f0_0_10_4","f0_0_10_5","f0_0_10_6","f0_0_10_7","f0_0_10_8","f0_0_10_9","f0_0_10_10","f0_0_10_11","f0_0_10","f0_0_11_0","f0_0_11_1","f0_0_11_2","f0_0_11_3","f0_0_11_4","f0_0_11_5","f0_0_11_6","f0_0_11_7","f0_0_11_8","f0_0_11_9","f0_0_11_10","f0_0_11_11","f0_0_11","f0_0","f0_1_0_0","f0_1_0_1","f0_1_0_2","f0_1_0_3","f0_1_0_4","f0_1_0_5","f0_1_0_6","f0_1_0_7","f0_1_0_8","f0_1_0_9","f0_1_0_10","f0_1_0_11","f0_1_0","f0_1_1_0","f0_1_1_1","f0_1_1_2","f0_1_1_3","f0_1_1_4","f0_1_1_5","f0_1_1_6","f0_1_1_7","f0_1_1_8","f0_1_1_9","f0_1_1_10","f0_1_1_11","f0_1_1","f0_1_2_0","f0_1_2_1","f0_1_2_2","f0_1_2_3","f0_1_2_4","f0_1_2_5","f0_1_2_6","f0_1_2_7","f0_1_2_8","f0_1_2_9","f0_1_2_10","f0_1_2_11","f0_1_2","f0_1_3_0","f0_1_3_1","f0_1_3_2","f0_1_3_3","f0_1_3_4","f0_1_3_5","f0_1_3_6","f0_1_3_7","f0_1_3_8","f0_1_3_9","f0_1_3_10","f0_1_3_11","f0_1_3","f0_1_4_0","f0_1_4_1","f0_1_4_2","f0_1_4_3","f0_1_4_4","f0_1_4_5","f0_1_4_6","f0_1_4_7","f0_1_4_8","f0_1_4_9","f0_1_4_10","f0_1_4_11","f0_1_4","f0_1_5_0","f0_1_5_1","f0_1_5_2","f0_1_5_3","f0_1_5_4","f0_1_5_5","f0_1_5_6","f0_1_5_7","f0_1_5_8","f0_1_5_9","f0_1_5_10","f0_1_5_11","f0_1_5","f0_1_6_0","f0_1_6_1","f0_1_6_2","f0_1_6_3","f0_1_6_4","f0_1_6_5","f0_1_6_6","f0_1_6_7","f0_1_6_8","f0_1_6_9","f0_1_6_10","f0_1_6_11","f0_1_6","f0_1_7_0","f0_1_7_1","f0_1_7_2","f0_1_7_3","f0_1_7_4","f0_1_7_5","f0_1_7_6","f0_1_7_7","f0_1_7_8","f0_1_7_9","f0_1_7_10","f0_1_7_11","f0_1_7","f0_1_8_0","f0_1_8_1","f0_1_8_2","f0_1_8_3","f0_1_8_4","f0_1_8_5","f0_1_8_6","f0_1_8_7","f0_1_8_8","f0_1_8_9","f0_1_8_10","f0_1_8_11","f0_1_8","f0_1_9_0","f0_1_9_1","f0_1_9_2","f0_1_9_3","f0_1_9_4","f0_1_9_5","f0_1_9_6","f0_1_9_7","f0_1_9_8","f0_1_9_9","f0_1_9_10","f0_1_9_11","f0_1_9","f0_1_10_0","f0_1_10_1","f0_1_10_2","f0_1_10_3","f0_1_10_4","f0_1_10_5","f0_1_10_6","f0_1_10_7","f0_1_10_8","f0_1_10_9","f0_1_10_10","f0_1_10_11","f0_1_10","f0_1_11_0","f0_1_11_1","f0_1_11_2","f0_1_11_3","f0_1_11_4","f0_1_11_5","f0_1_11_6","f0_1_11_7","f0_1_11_8","f0_1_11_9","f0_1_11_10","f0_1_11_11","f0_1_11","f0_1","f0_2_0_0","f0_2_0_1","f0_2_0_2","f0_2_0_3","f0_2_0_4","f0_2_0_5","f0_2_0_6","f0_2_0_7","f0_2_0_8","f0_2_0_9","f0_2_0_10","f0_2_0_11","f0_2_0","f0_2_1_0","f0_2_1_1","f0_2_1_2","f0_2_1_3","f0_2_1_4","f0_2_1_5","f0_2_1_6","f0_2_1_7","f0_2_1_8","f0_2_1_9","f0_2_1_10","f0_2_1_11","f0_2_1","f0_2_2_0","f0_2_2_1","f0_2_2_2","f0_2_2_3","f0_2_2_4","f0_2_2_5","f0_2_2_6","f0_2_2_7","f0_2_2_8","f0_2_2_9","f0_2_2_10","f0_2_2_11","f0_2_2","f0_2_3_0","f0_2_3_1","f0_2_3_2","f0_2_3_3","f0_2_3_4","f0_2_3_5","f0_2_3_6","f0_2_3_7","f0_2_3_8","f0_2_3_9","f0_2_3_10","f0_2_3_11","f0_2_3","f0_2_4_0","f0_2_4_1","f0_2_4_2","f0_2_4_3","f0_2_4_4","f0_2_4_5","f0_2_4_6","f0_2_4_7","f0_2_4_8","f0_2_4_9","f0_2_4_10","f0_2_4_11","f0_2_4","f0_2_5_0","f0_2_5_1","f0_2_5_2","f0_2_5_3","f0_2_5_4","f0_2_5_5","f0_2_5_6","f0_2_5_7","f0_2_5_8","f0_2_5_9","f0_2_5_10","f0_2_5_11","f0_2_5","f0_2_6_0","f0_2_6_1","f0_2_6_2","f0_2_6_3","f0_2_6_4","f0_2_6_5","f0_2_6_6","f0_2_6_7","f0_2_6_8","f0_2_6_9","f0_2_6_10","f0_2_6_11","f0_2_6","f0_2_7_0","f0_2_7_1","f0_2_7_2","f0_2_7_3","f0_2_7_4","f0_2_7_5","f0_2_7_6","f0_2_7_7","f0_2_7_8","f0_2_7_9","f0_2_7_10","f0_2_7_11","f0_2_7","f0_2_8_0","f0_2_8_1","f0_2_8_2","f0_2_8_3","f0_2_8_4","f0_2_8_5","f0_2_8_6","f0_2_8_7","f0_2_8_8","f0_2_8_9","f0_2_8_10","f0_2_8_11","f0_2_8","f0_2_9_0","f0_2_9_1","f0_2_9_2","f0_2_9_3","f0_2_9_4","f0_2_9_5","f0_2_9_6","f0_2_9_7","f0_2_9_8","f0_2_9_9","f0_2_9_10","f0_2_9_11","f0_2_9","f0_2_10_0","f0_2_10_1","f0_2_10_2","f0_2_10_3","f0_2_10_4","f0_2_10_5","f0_2_10_6","f0_2_10_7","f0_2_10_8","f0_2_10_9","f0_2_10_10","f0_2_10_11","f0_2_10","f0_2_11_0","f0_2_11_1","f0_2_11_2","f0_2_11_3","f0_2_11_4","f0_2_11_5","f0_2_11_6","f0_2_11_7","f0_2_11_8","f0_2_11_9","f0_2_11_10","f0_2_11_11","f0_2_11","f0_2","f0_3_0_0","f0_3_0_1","f0_3_0_2","f0_3_0_3","f0_3_0_4","f0_3_0_5","f0_3_0_6","f0_3_0_7","f0_3_0_8","f0_3_0_9","f0_3_0_10","f0_3_0_11","f0_3_0","f0_3_1_0","f0_3_1_1","f0_3_1_2","f0_3_1_3","f0_3_1_4","f0_3_1_5","f0_3_1_6","f0_3_1_7","f0_3_1_8","f0_3_1_9","f0_3_1_10","f0_3_1_11","f0_3_1","f0_3_2_0","f0_3_2_1","f0_3_2_2","f0_3_2_3","f0_3_2_4","f0_3_2_5","f0_3_2_6","f0_3_2_7","f0_3_2_8","f0_3_2_9","f0_3_2_10","f0_3_2_11","f0_3_2","f0_3_3_0","f0_3_3_1","f0_3_3_2","f0_3_3_3","f0_3_3_4","f0_3_3_5","f0_3_3_6","f0_3_3_7","f0_3_3_8","f0_3_3_9","f0_3_3_10","f0_3_3_11","f0_3_3","f0_3_4_0","f0_3_4_1","f0_3_4_2","f0_3_4_3","f0_3_4_4","f0_3_4_5","f0_3_4_6","f0_3_4_7","f0_3_4_8","f0_3_4_9","f0_3_4_10","f0_3_4_11","f0_3_4","f0_3_5_0","f0_3_5_1","f0_3_5_2","f0_3_5_3","f0_3_5_4","f0_3_5_5","f0_3_5_6","f0_3_5_7","f0_3_5_8","f0_3_5_9","f0_3_5_10","f0_3_5_11","f0_3_5","f0_3_6_0","f0_3_6_1","f0_3_6_2","f0_3_6_3","f0_3_6_4","f0_3_6_5","f0_3_6_6","f0_3_6_7","f0_3_6_8","f0_3_6_9","f0_3_6_10","f0_3_6_11","f0_3_6","f0_3_7_0","f0_3_7_1","f0_3_7_2","f0_3_7_3","f0_3_7_4","f0_3_7_5","f0_3_7_6","f0_3_7_7","f0_3_7_8","f0_3_7_9","f0_3_7_10","f0_3_7_11","f0_3_7","f0_3_8_0","f0_3_8_1","f0_3_8_2","f0_3_8_3","f0_3_8_4","f0_3_8_5","f0_3_8_6","f0_3_8_7","f0_3_8_8","f0_3_8_9","f0_3_8_10","f0_3_8_11","f0_3_8","f0_3_9_0","f0_3_9_1","f0_3_9_2","f0_3_9_3","f0_3_9_4","f0_3_9_5","f0_3_9_6","f0_3_9_7","f0_3_9_8","f0_3_9_9","f0_3_9_10","f0_3_9_11","f0_3_9","f0_3_10_0","f0_3_10_1","f0_3_10_2","f0_3_10_3","f0_3_10_4","f0_3_10_5","f0_3_10_6","f0_3_10_7","f0_3_10_8","f0_3_10_9","f0_3_10_10","f0_3_10_11","f0_3_10","f0_3_11_0","f0_3_11_1","f0_3_11_2","f0_3_11_3","f0_3_11_4","f0_3_11_5","f0_3_11_6","f0_3_11_7","f0_3_11_8","f0_3_11_9","f0_3_11_10","f0_3_11_11","f0_3_11","f0_3","f0_4_0_0","f0_4_0_1","f0_4_0_2","f0_4_0_3","f0_4_0_4","f0_4_0_5","f0_4_0_6","f0_4_0_7","f0_4_0_8","f0_4_0_9","f0_4_0_10","f0_4_0_11","f0_4_0","f0_4_1_0","f0_4_1_1","f0_4_1_2","f0_4_1_3","f0_4_1_4","f0_4_1_5","f0_4_1_6","f0_4_1_7","f0_4_1_8","f0_4_1_9","f0_4_1_10","f0_4_1_11","f0_4_1","f0_4_2_0","f0_4_2_1","f0_4_2_2","f0_4_2_3","f0_4_2_4","f0_4_2_5","f0_4_2_6","f0_4_2_7","f0_4_2_8","f0_4_2_9","f0_4_2_10","f0_4_2_11","f0_4_2","f0_4_3_0","f0_4_3_1","f0_4_3_2","f0_4_3_3","f0_4_3_4","f0_4_3_5","f0_4_3_6","f0_4_3_7","f0_4_3_8","f0_4_3_9","f0_4_3_10","f0_4_3_11","f0_4_3","f0_4_4_0","f0_4_4_1","f0_4_4_2","f0_4_4_3","f0_4_4_4","f0_4_4_5","f0_4_4_6","f0_4_4_7","f0_4_4_8","f0_4_4_9","f0_4_4_10","f0_4_4_11","f0_4_4","f0_4_5_0","f0_4_5_1","f0_4_5_2","f0_4_5_3","f0_4_5_4","f0_4_5_5","f0_4_5_6","f0_4_5_7","f0_4_5_8","f0_4_5_9","f0_4_5_10","f0_4_5_11","f0_4_5","f0_4_6_0","f0_4_6_1","f0_4_6_2","f0_4_6_3","f0_4_6_4","f0_4_6_5","f0_4_6_6","f0_4_6_7","f0_4_6_8","f0_4_6_9","f0_4_6_10","f0_4_6_11","f0_4_6","f0_4_7_0","f0_4_7_1","f0_4_7_2","f0_4_7_3","f0_4_7_4","f0_4_7_5","f0_4_7_6","f0_4_7_7","f0_4_7_8","f0_4_7_9","f0_4_7_10","f0_4_7_11","f0_4_7","f0_4_8_0","f0_4_8_1","f0_4_8_2","f0_4_8_3","f0_4_8_4","f0_4_8_5","f0_4_8_6","f0_4_8_7","f0_4_8_8","f0_4_8_9","f0_4_8_10","f0_4_8_11","f0_4_8","f0_4_9_0","f0_4_9_1","f0_4_9_2","f0_4_9_3","f0_4_9_4","f0_4_9_5","f0_4_9_6","f0_4_9_7","f0_4_9_8","f0_4_9_9","f0_4_9_10","f0_4_9_11","f0_4_9","f0_4_10_0","f0_4_10_1","f0_4_10_2","f0_4_10_3","f0_4_10_4","f0_4_10_5","f0_4_10_6","f0_4_10_7","f0_4_10_8","f0_4_10_9","f0_4_10_10","f0_4_10_11","f0_4_10","f0_4_11_0","f0_4_11_1","f0_4_11_2","f0_4_11_3","f0_4_11_4","f0_4_11_5","f0_4_11_6","f0_4_11_7","f0_4_11_8","f0_4_11_9","f0_4_11_10","f0_4_11_11","f0_4_11","f0_4","f0_5_0_0","f0_5_0_1","f0_5_0_2","f0_5_0_3","f0_5_0_4","f0_5_0_5","f0_5_0_6","f0_5_0_7","f0_5_0_8","f0_5_0_9","f0_5_0_10","f0_5_0_11","f0_5_0","f0_5_1_0","f0_5_1_1","f0_5_1_2","f0_5_1_3","f0_5_1_4","f0_5_1_5","f0_5_1_6","f0_5_1_7","f0_5_1_8","f0_5_1_9","f0_5_1_10","f0_5_1_11","f0_5_1","f0_5_2_0","f0_5_2_1","f0_5_2_2","f0_5_2_3","f0_5_2_4","f0_5_2_5","f0_5_2_6","f0_5_2_7","f0_5_2_8","f0_5_2_9","f0_5_2_10","f0_5_2_11","f0_5_2","f0_5_3_0","f0_5_3_1","f0_5_3_2","f0_5_3_3","f0_5_3_4","f0_5_3_5","f0_5_3_6","f0_5_3_7","f0_5_3_8","f0_5_3_9","f0_5_3_10","f0_5_3_11","f0_5_3","f0_5_4_0","f0_5_4_1","f0_5_4_2","f0_5_4_3","f0_5_4_4","f0_5_4_5","f0_5_4_6","f0_5_4_7","f0_5_4_8","f0_5_4_9","f0_5_4_10","f0_5_4_11","f0_5_4","f0_5_5_0","f0_5_5_1","f0_5_5_2","f0_5_5_3","f0_5_5_4","f0_5_5_5","f0_5_5_6","f0_5_5_7","f0_5_5_8","f0_5_5_9","f0_5_5_10","f0_5_5_11","f0_5_5","f0_5_6_0","f0_5_6_1","f0_5_6_2","f0_5_6_3","f0_5_6_4","f0_5_6_5","f0_5_6_6","f0_5_6_7","f0_5_6_8","f0_5_6_9","f0_5_6_10","f0_5_6_11","f0_5_6","f0_5_7_0","f0_5_7_1","f0_5_7_2","f0_5_7_3","f0_5_7_4","f0_5_7_5","f0_5_7_6","f0_5_7_7","f0_5_7_8","f0_5_7_9","f0_5_7_10","f0_5_7_11","f0_5_7","f0_5_8_0","f0_5_8_1","f0_5_8_2","f0_5_8_3","f0_5_8_4","f0_5_8_5","f0_5_8_6","f0_5_8_7","f0_5_8_8","f0_5_8_9","f0_5_8_10","f0_5_8_11","f0_5_8","f0_5_9_0","f0_5_9_1","f0_5_9_2","f0_5_9_3","f0_5_9_4","f0_5_9_5","f0_5_9_6","f0_5_9_7","f0_5_9_8","f0_5_9_9","f0_5_9_10","f0_5_9_11","f0_5_9","f0_5_10_0","f0_5_10_1","f0_5_10_2","f0_5_10_3","f0_5_10_4","f0_5_10_5","f0_5_10_6","f0_5_10_7","f0_5_10_8","f0_5_10_9","f0_5_10_10","f0_5_10_11","f0_5_10","f0_5_11_0","f0_5_11_1","f0_5_11_2","f0_5_11_3","f0_5_11_4","f0_5_11_5","f0_5_11_6","f0_5_11_7","f0_5_11_8","f0_5_11_9","f0_5_11_10","f0_5_11_11","f0_5_11","f0_5","f0_6_0_0","f0_6_0_1","f0_6_0_2","f0_6_0_3","f0_6_0_4","f0_6_0_5","f0_6_0_6","f0_6_0_7","f0_6_0_8","f0_6_0_9","f0_6_0_10","f0_6_0_11","f0_6_0","f0_6_1_0","f0_6_1_1","f0_6_1_2","f0_6_1_3","f0_6_1_4","f0_6_1_5","f0_6_1_6","f0_6_1_7","f0_6_1_8","f0_6_1_9","f0_6_1_10","f0_6_1_11","f0_6_1","f0_6_2_0","f0_6_2_1","f0_6_2_2","f0_6_2_3","f0_6_2_4","f0_6_2_5","f0_6_2_6","f0_6_2_7","f0_6_2_8","f0_6_2_9","f0_6_2_10","f0_6_2_11","f0_6_2","f0_6_3_0","f0_6_3_1","f0_6_3_2","f0_6_3_3","f0_6_3_4","f0_6_3_5","f0_6_3_6","f0_6_3_7","f0_6_3_8","f0_6_3_9","f0_6_3_10","f0_6_3_11","f0_6_3","f0_6_4_0","f0_6_4_1","f0_6_4_2","f0_6_4_3","f0_6_4_4","f0_6_4_5","f0_6_4_6","f0_6_4_7","f0_6_4_8","f0_6_4_9","f0_6_4_10","f0_6_4_11","f0_6_4","f0_6_5_0","f0_6_5_1","f0_6_5_2","f0_6_5_3","f0_6_5_4","f0_6_5_5","f0_6_5_6","f0_6_5_7","f0_6_5_8","f0_6_5_9","f0_6_5_10","f0_6_5_11","f0_6_5","f0_6_6_0","f0_6_6_1","f0_6_6_2","f0_6_6_3","f0_6_6_4","f0_6_6_5","f0_6_6_6","f0_6_6_7","f0_6_6_8","f0_6_6_9","f0_6_6_10","f0_6_6_11","f0_6_6","f0_6_7_0","f0_6_7_1","f0_6_7_2","f0_6_7_3","f0_6_7_4","f0_6_7_5","f0_6_7_6","f0_6_7_7","f0_6_7_8","f0_6_7_9","f0_6_7_10","f0_6_7_11","f0_6_7","f0_6_8_0","f0_6_8_1","f0_6_8_2","f0_6_8_3","f0_6_8_4","f0_6_8_5","f0_6_8_6","f0_6_8_7","f0_6_8_8","f0_6_8_9","f0_6_8_10","f0_6_8_11","f0_6_8","f0_6_9_0","f0_6_9_1","f0_6_9_2","f0_6_9_3","f0_6_9_4","f0_6_9_5","f0_6_9_6","f0_6_9_7","f0_6_9_8","f0_6_9_9","f0_6_9_10","f0_6_9_11","f0_6_9","f0_6_10_0","f0_6_10_1","f0_6_10_2","f0_6_10_3","f0_6_10_4","f0_6_10_5","f0_6_10_6","f0_6_10_7","f0_6_10_8","f0_6_10_9","f0_6_10_10","f0_6_10_11","f0_6_10","f0_6_11_0","f0_6_11_1","f0_6_11_2","f0_6_11_3","f0_6_11_4","f0_6_11_5","f0_6_11_6","f0_6_11_7","f0_6_11_8","f0_6_11_9","f0_6_11_10","f0_6_11_11","f0_6_11","f0_6","f0_7_0_0","f0_7_0_1","f0_7_0_2","f0_7_0_3","f0_7_0_4","f0_7_0_5","f0_7_0_6","f0_7_0_7","f0_7_0_8","f0_7_0_9","f0_7_0_10","f0_7_0_11","f0_7_0","f0_7_1_0","f0_7_1_1","f0_7_1_2","f0_7_1_3","f0_7_1_4","f0_7_1_5","f0_7_1_6","f0_7_1_7","f0_7_1_8","f0_7_1_9","f0_7_1_10","f0_7_1_11","f0_7_1","f0_7_2_0","f0_7_2_1","f0_7_2_2","f0_7_2_3","f0_7_2_4","f0_7_2_5","f0_7_2_6","f0_7_2_7","f0_7_2_8","f0_7_2_9","f0_7_2_10","f0_7_2_11","f0_7_2","f0_7_3_0","f0_7_3_1","f0_7_3_2","f0_7_3_3","f0_7_3_4","f0_7_3_5","f0_7_3_6","f0_7_3_7","f0_7_3_8","f0_7_3_9","f0_7_3_10","f0_7_3_11","f0_7_3","f0_7_4_0","f0_7_4_1","f0_7_4_2","f0_7_4_3","f0_7_4_4","f0_7_4_5","f0_7_4_6","f0_7_4_7","f0_7_4_8","f0_7_4_9","f0_7_4_10","f0_7_4_11","f0_7_4","f0_7_5_0","f0_7_5_1","f0_7_5_2","f0_7_5_3","f0_7_5_4","f0_7_5_5","f0_7_5_6","f0_7_5_7","f0_7_5_8","f0_7_5_9","f0_7_5_10","f0_7_5_11","f0_7_5","f0_7_6_0","f0_7_6_1","f0_7_6_2","f0_7_6_3","f0_7_6_4","f0_7_6_5","f0_7_6_6","f0_7_6_7","f0_7_6_8","f0_7_6_9","f0_7_6_10","f0_7_6_11","f0_7_6","f0_7_7_0","f0_7_7_1","f0_7_7_2","f0_7_7_3","f0_7_7_4","f0_7_7_5","f0_7_7_6","f0_7_7_7","f0_7_7_8","f0_7_7_9","f0_7_7_10","f0_7_7_11","f0_7_7","f0_7_8_0","f0_7_8_1","f0_7_8_2","f0_7_8_3","f0_7_8_4","f0_7_8_5","f0_7_8_6","f0_7_8_7","f0_7_8_8","f0_7_8_9","f0_7_8_10","f0_7_8_11","f0_7_8","f0_7_9_0","f0_7_9_1","f0_7_9_2","f0_7_9_3","f0_7_9_4","f0_7_9_5","f0_7_9_6","f0_7_9_7","f0_7_9_8","f0_7_9_9","f0_7_9_10","f0_7_9_11","f0_7_9","f0_7_10_0","f0_7_10_1","f0_7_10_2","f0_7_10_3","f0_7_10_4","f0_7_10_5","f0_7_10_6","f0_7_10_7","f0_7_10_8","f0_7_10_9","f0_7_10_10","f0_7_10_11","f0_7_10","f0_7_11_0","f0_7_11_1","f0_7_11_2","f0_7_11_3","f0_7_11_4","f0_7_11_5","f0_7_11_6","f0_7_11_7","f0_7_11_8","f0_7_11_9","f0_7_11_10","f0_7_11_11","f0_7_11","f0_7","f0_8_0_0","f0_8_0_1","f0_8_0_2","f0_8_0_3","f0_8_0_4","f0_8_0_5","f0_8_0_6","f0_8_0_7","f0_8_0_8","f0_8_0_9","f0_8_0_10","f0_8_0_11","f0_8_0","f0_8_1_0","f0_8_1_1","f0_8_1_2","f0_8_1_3","f0_8_1_4","f0_8_1_5","f0_8_1_6","f0_8_1_7","f0_8_1_8","f0_8_1_9","f0_8_1_10","f0_8_1_11","f0_8_1","f0_8_2_0","f0_8_2_1","f0_8_2_2","f0_8_2_3","f0_8_2_4","f0_8_2_5","f0_8_2_6","f0_8_2_7","f0_8_2_8","f0_8_2_9","f0_8_2_10","f0_8_2_11","f0_8_2","f0_8_3_0","f0_8_3_1","f0_8_3_2","f0_8_3_3","f0_8_3_4","f0_8_3_5","f0_8_3_6","f0_8_3_7","f0_8_3_8","f0_8_3_9","f0_8_3_10","f0_8_3_11","f0_8_3","f0_8_4_0","f0_8_4_1","f0_8_4_2","f0_8_4_3","f0_8_4_4","f0_8_4_5","f0_8_4_6","f0_8_4_7","f0_8_4_8","f0_8_4_9","f0_8_4_10","f0_8_4_11","f0_8_4","f0_8_5_0","f0_8_5_1","f0_8_5_2","f0_8_5_3","f0_8_5_4","f0_8_5_5","f0_8_5_6","f0_8_5_7","f0_8_5_8","f0_8_5_9","f0_8_5_10","f0_8_5_11","f0_8_5","f0_8_6_0","f0_8_6_1","f0_8_6_2","f0_8_6_3","f0_8_6_4","f0_8_6_5","f0_8_6_6","f0_8_6_7","f0_8_6_8","f0_8_6_9","f0_8_6_10","f0_8_6_11","f0_8_6","f0_8_7_0","f0_8_7_1","f0_8_7_2","f0_8_7_3","f0_8_7_4","f0_8_7_5","f0_8_7_6","f0_8_7_7","f0_8_7_8","f0_8_7_9","f0_8_7_10","f0_8_7_11","f0_8_7","f0_8_8_0","f0_8_8_1","f0_8_8_2","f0_8_8_3","f0_8_8_4","f0_8_8_5","f0_8_8_6","f0_8_8_7","f0_8_8_8","f0_8_8_9","f0_8_8_10","f0_8_8_11","f0_8_8","f0_8_9_0","f0_8_9_1","f0_8_9_2","f0_8_9_3","f0_8_9_4","f0_8_9_5","f0_8_9_6","f0_8_9_7","f0_8_9_8","f0_8_9_9","f0_8_9_10","f0_8_9_11","f0_8_9","f0_8_10_0","f0_8_10_1","f0_8_10_2","f0_8_10_3","f0_8_10_4","f0_8_10_5","f0_8_10_6","f0_8_10_7","f0_8_10_8","f0_8_10_9","f0_8_10_10","f0_8_10_11","f0_8_10","f0_8_11_0","f0_8_11_1","f0_8_11_2","f0_8_11_3","f0_8_11_4","f0_8_11_5","f0_8_11_6","f0_8_11_7","f0_8_11_8","f0_8_11_9","f0_8_11_10","f0_8_11_11","f0_8_11","f0_8","f0_9_0_0","f0_9_0_1","f0_9_0_2","f0_9_0_3","f0_9_0_4","f0_9_0_5","f0_9_0_6","f0_9_0_7","f0_9_0_8","f0_9_0_9","f0_9_0_10","f0_9_0_11","f0_9_0","f0_9_1_0","f0_9_1_1","f0_9_1_2","f0_9_1_3","f0_9_1_4","f0_9_1_5","f0_9_1_6","f0_9_1_7","f0_9_1_8","f0_9_1_9","f0_9_1_10","f0_9_1_11","f0_9_1","f0_9_2_0","f0_9_2_1","f0_9_2_2","f0_9_2_3","f0_9_2_4","f0_9_2_5","f0_9_2_6","f0_9_2_7","f0_9_2_8","f0_9_2_9","f0_9_2_10","f0_9_2_11","f0_9_2","f0_9_3_0","f0_9_3_1","f0_9_3_2","f0_9_3_3","f0_9_3_4","f0_9_3_5","f0_9_3_6","f0_9_3_7","f0_9_3_8","f0_9_3_9","f0_9_3_10","f0_9_3_11","f0_9_3","f0_9_4_0","f0_9_4_1","f0_9_4_2","f0_9_4_3","f0_9_4_4","f0_9_4_5","f0_9_4_6","f0_9_4_7","f0_9_4_8","f0_9_4_9","f0_9_4_10","f0_9_4_11","f0_9_4","f0_9_5_0","f0_9_5_1","f0_9_5_2","f0_9_5_3","f0_9_5_4","f0_9_5_5","f0_9_5_6","f0_9_5_7","f0_9_5_8","f0_9_5_9","f0_9_5_10","f0_9_5_11","f0_9_5","f0_9_6_0","f0_9_6_1","f0_9_6_2","f0_9_6_3","f0_9_6_4","f0_9_6_5","f0_9_6_6","f0_9_6_7","f0_9_6_8","f0_9_6_9","f0_9_6_10","f0_9_6_11","f0_9_6","f0_9_7_0","f0_9_7_1","f0_9_7_2","f0_9_7_3","f0_9_7_4","f0_9_7_5","f0_9_7_6","f0_9_7_7","f0_9_7_8","f0_9_7_9","f0_9_7_10","f0_9_7_11","f0_9_7","f0_9_8_0","f0_9_8_1","f0_9_8_2","f0_9_8_3","f0_9_8_4","f0_9_8_5","f0_9_8_6","f0_9_8_7","f0_9_8_8","f0_9_8_9","f0_9_8_10","f0_9_8_11","f0_9_8","f0_9_9_0","f0_9_9_1","f0_9_9_2","f0_9_9_3","f0_9_9_4","f0_9_9_5","f0_9_9_6","f0_9_9_7","f0_9_9_8","f0_9_9_9","f0_9_9_10","f0_9_9_11","f0_9_9","f0_9_10_0","f0_9_10_1","f0_9_10_2","f0_9_10_3","f0_9_10_4","f0_9_10_5","f0_9_10_6","f0_9_10_7","f0_9_10_8","f0_9_10_9","f0_9_10_10","f0_9_10_11","f0_9_10","f0_9_11_0","f0_9_11_1","f0_9_11_2","f0_9_11_3","f0_9_11_4","f0_9_11_5","f0_9_11_6","f0_9_11_7","f0_9_11_8","f0_9_11_9","f0_9_11_10","f0_9_11_11","f0_9_11","f0_9","f0_10_0_0","f0_10_0_1","f0_10_0_2","f0_10_0_3","f0_10_0_4","f0_10_0_5","f0_10_0_6","f0_10_0_7","f0_10_0_8","f0_10_0_9","f0_10_0_10","f0_10_0_11","f0_10_0","f0_10_1_0","f0_10_1_1","f0_10_1_2","f0_10_1_3","f0_10_1_4","f0_10_1_5","f0_10_1_6","f0_10_1_7","f0_10_1_8","f0_10_1_9","f0_10_1_10","f0_10_1_11","f0_10_1","f0_10_2_0","f0_10_2_1","f0_10_2_2","f0_10_2_3","f0_10_2_4","f0_10_2_5","f0_10_2_6","f0_10_2_7","f0_10_2_8","f0_10_2_9","f0_10_2_10","f0_10_2_11","f0_10_2","f0_10_3_0","f0_10_3_1","f0_10_3_2","f0_10_3_3","f0_10_3_4","f0_10_3_5","f0_10_3_6","f0_10_3_7","f0_10_3_8","f0_10_3_9","f0_10_3_10","f0_10_3_11","f0_10_3","f0_10_4_0","f0_10_4_1","f0_10_4_2","f0_10_4_3","f0_10_4_4","f0_10_4_5","f0_10_4_6","f0_10_4_7","f0_10_4_8","f0_10_4_9","f0_10_4_10","f0_10_4_11","f0_10_4","f0_10_5_0","f0_10_5_1","f0_10_5_2","f0_10_5_3","f0_10_5_4","f0_10_5_5","f0_10_5_6","f0_10_5_7","f0_10_5_8","f0_10_5_9","f0_10_5_10","f0_10_5_11","f0_10_5","f0_10_6_0","f0_10_6_1","f0_10_6_2","f0_10_6_3","f0_10_6_4","f0_10_6_5","f0_10_6_6","f0_10_6_7","f0_10_6_8","f0_10_6_9","f0_10_6_10","f0_10_6_11","f0_10_6","f0_10_7_0","f0_10_7_1","f0_10_7_2","f0_10_7_3","f0_10_7_4","f0_10_7_5","f0_10_7_6","f0_10_7_7","f0_10_7_8","f0_10_7_9","f0_10_7_10","f0_10_7_11","f0_10_7","f0_10_8_0","f0_10_8_1","f0_10_8_2","f0_10_8_3","f0_10_8_4","f0_10_8_5","f0_10_8_6","f0_10_8_7","f0_10_8_8","f0_10_8_9","f0_10_8_10","f0_10_8_11","f0_10_8","f0_10_9_0","f0_10_9_1","f0_10_9_2","f0_10_9_3","f0_10_9_4","f0_10_9_5","f0_10_9_6","f0_10_9_7","f0_10_9_8","f0_10_9_9","f0_10_9_10","f0_10_9_11","f0_10_9","f0_10_10_0","f0_10_10_1","f0_10_10_2","f0_10_10_3","f0_10_10_4","f0_10_10_5","f0_10_10_6","f0_10_10_7","f0_10_10_8","f0_10_10_9","f0_10_10_10","f0_10_10_11","f0_10_10","f0_10_11_0","f0_10_11_1","f0_10_11_2","f0_10_11_3","f0_10_11_4","f0_10_11_5","f0_10_11_6","f0_10_11_7","f0_10_11_8","f0_10_11_9","f0_10_11_10","f0_10_11_11","f0_10_11","f0_10","f0_11_0_0","f0_11_0_1","f0_11_0_2","f0_11_0_3","f0_11_0_4","f0_11_0_5","f0_11_0_6","f0_11_0_7","f0_11_0_8","f0_11_0_9","f0_11_0_10","f0_11_0_11","f0_11_0","f0_11_1_0","f0_11_1_1","f0_11_1_2","f0_11_1_3","f0_11_1_4","f0_11_1_5","f0_11_1_6","f0_11_1_7","f0_11_1_8","f0_11_1_9","f0_11_1_10","f0_11_1_11","f0_11_1","f0_11_2_0","f0_11_2_1","f0_11_2_2","f0_11_2_3","f0_11_2_4","f0_11_2_5","f0_11_2_6","f0_11_2_7","f0_11_2_8","f0_11_2_9","f0_11_2_10","f0_11_2_11","f0_11_2","f0_11_3_0","f0_11_3_1","f0_11_3_2","f0_11_3_3","f0_11_3_4","f0_11_3_5","f0_11_3_6","f0_11_3_7","f0_11_3_8","f0_11_3_9","f0_11_3_10","f0_11_3_11","f0_11_3","f0_11_4_0","f0_11_4_1","f0_11_4_2","f0_11_4_3","f0_11_4_4","f0_11_4_5","f0_11_4_6","f0_11_4_7","f0_11_4_8","f0_11_4_9","f0_11_4_10","f0_11_4_11","f0_11_4","f0_11_5_0","f0_11_5_1","f0_11_5_2","f0_11_5_3","f0_11_5_4","f0_11_5_5","f0_11_5_6","f0_11_5_7","f0_11_5_8","f0_11_5_9","f0_11_5_10","f0_11_5_11","f0_11_5","f0_11_6_0","f0_11_6_1","f0_11_6_2","f0_11_6_3","f0_11_6_4","f0_11_6_5","f0_11_6_6","f0_11_6_7","f0_11_6_8","f0_11_6_9","f0_11_6_10","f0_11_6_11","f0_11_6","f0_11_7_0","f0_11_7_1","f0_11_7_2","f0_11_7_3","f0_11_7_4","f0_11_7_5","f0_11_7_6","f0_11_7_7","f0_11_7_8","f0_11_7_9","f0_11_7_10","f0_11_7_11","f0_11_7","f0_11_8_0","f0_11_8_1","f0_11_8_2","f0_11_8_3","f0_11_8_4","f0_11_8_5","f0_11_8_6","f0_11_8_7","f0_11_8_8","f0_11_8_9","f0_11_8_10","f0_11_8_11","f0_11_8","f0_11_9_0","f0_11_9_1","f0_11_9_2","f0_11_9_3","f0_11_9_4","f0_11_9_5","f0_11_9_6","f0_11_9_7","f0_11_9_8","f0_11_9_9","f0_11_9_10","f0_11_9_11","f0_11_9","f0_11_10_0","f0_11_10_1","f0_11_10_2","f0_11_10_3","f0_11_10_4","f0_11_10_5","f0_11_10_6","f0_11_10_7","f0_11_10_8","f0_11_10_9","f0_11_10_10","f0_11_10_11","f0_11_10","f0_11_11_0","f0_11_11_1","f0_11_11_2","f0_11_11_3","f0_11_11_4","f0_11_11_5","f0_11_11_6","f0_11_11_7","f0_11_11_8","f0_11_11_9","f0_11_11_10","f0_11_11_11","f0_11_11","f0_11","f0","f2_0","f2_1","f2_2","f2_3","f2_4","f2_5","f2_6","f2_7","f2_8","f2_9","f2_10","f2_11","f1","f1_0","f1_1","f1_2","f1_3","f1_4","f1_5","f1_6","f1_7","f1_8","f1_9","f1_10","f1_11","f1_0_0","f1_0_1","f1_0_2","f1_0_3","f1_0_4","f1_0_5","f1_0_6","f1_0_7","f1_0_8","f1_0_9","f1_0_10","f1_0_11","f1_1_0","f1_1_1","f1_1_2","f1_1_3","f1_1_4","f1_1_5","f1_1_6","f1_1_7","f1_1_8","f1_1_9","f1_1_10","f1_1_11","f1_2_0","f1_2_1","f1_2_2","f1_2_3","f1_2_4","f1_2_5","f1_2_6","f1_2_7","f1_2_8","f1_2_9","f1_2_10","f1_2_11","f1_3_0","f1_3_1","f1_3_2","f1_3_3","f1_3_4","f1_3_5","f1_3_6","f1_3_7","f1_3_8","f1_3_9","f1_3_10","f1_3_11","f1_4_0","f1_4_1","f1_4_2","f1_4_3","f1_4_4","f1_4_5","f1_4_6","f1_4_7","f1_4_8","f1_4_9","f1_4_10","f1_4_11","f1_5_0","f1_5_1","f1_5_2","f1_5_3","f1_5_4","f1_5_5","f1_5_6","f1_5_7","f1_5_8","f1_5_9","f1_5_10","f1_5_11","f1_6_0","f1_6_1","f1_6_2","f1_6_3","f1_6_4","f1_6_5","f1_6_6","f1_6_7","f1_6_8","f1_6_9","f1_6_10","f1_6_11","f1_7_0","f1_7_1","f1_7_2","f1_7_3","f1_7_4","f1_7_5","f1_7_6","f1_7_7","f1_7_8","f1_7_9","f1_7_10","f1_7_11","f1_8_0","f1_8_1","f1_8_2","f1_8_3","f1_8_4","f1_8_5","f1_8_6","f1_8_7","f1_8_8","f1_8_9","f1_8_10","f1_8_11","f1_9_0","f1_9_1","f1_9_2","f1_9_3","f1_9_4","f1_9_5","f1_9_6","f1_9_7","f1_9_8","f1_9_9","f1_9_10","f1_9_11","f1_10_0","f1_10_1","f1_10_2","f1_10_3","f1_10_4","f1_10_5","f1_10_6","f1_10_7","f1_10_8","f1_10_9","f1_10_10","f1_10_11","f1_11_0","f1_11_1","f1_11_2","f1_11_3","f1_11_4","f1_11_5","f1_11_6","f1_11_7","f1_11_8","f1_11_9","f1_11_10","f1_11_11","f2","f3","f4","f5","f6","f7","f8","f9","f10","f11","stepInTest","debugStatement","squareAndOne","squareUntil","limit","addUntil","arg1","arg2","testStart","aArg","f12","f13","f14","f15","f16","f17","f18","f19","f20","f21","f22","f23","f24","f25","f26","f27","f28","f29","f30","f31","f32","f33","f34","f35","f36","f37","f38","f39","f40","f41","f42","f43","f44","f45","f46","f47","f48","f49","f50","f51","f52","f53","f54","f55","f56","f57","f58","f59","f60","f61","f62","f63","f64","f65","f66","f67","f68","f69","f70","f71","f72","f73","f74","f75","f76","f77","f78","f79","f80","f81","f82","f83","f84","f85","f86","f87","f88","f89","f90","f91","f92","f93","f94","f95","f96","f97","f98","f99","f100","f101","f102","f103","f104","f105","f106","f107","f108","f109","f110","f111","f112","f113","f114","f115","f116","f117","f118","f119","f120","f121","f122","f123","f124","f125","f126","f127","f128","f129","f130","f131","f132","f133","f134","f135","f136","f137","f138","f139","f140","f141","f142","f143","f144","f145","f146","f147","f148","f149","f150","f151","f152","f153","f154","f155","f156","f157","f158","f159","f160","f161","f162","f163","f164","f165","f166","f167","f168","f169","f170","f171","f172","f173","f174","f175","f176","f177","f178","f179","f180","f181","f182","f183","f184","f185","f186","f187","f188","f189","f190","f191","f192","f193","f194","f195","f196","f197","f198","f199"],"mappings":"CAAS,SAAUA,GCInB,QAAAC,GAAAC,GAGA,GAAAC,EAAAD,GACA,MAAAC,GAAAD,GAAAE,OAGA,IAAAC,GAAAF,EAAAD,IACAI,EAAAJ,EACAK,GAAA,EACAH,WAUA,OANAJ,GAAAE,GAAAM,KAAAH,EAAAD,QAAAC,IAAAD,QAAAH,GAGAI,EAAAE,GAAA,EAGAF,EAAAD,QAvBA,GAAAD,KA4BAF,GAAAQ,EAAAT,EAGAC,EAAAS,EAAAP,EAGAF,EAAAU,EAAA,SAAAP,EAAAQ,EAAAC,GACAZ,EAAAa,EAAAV,EAAAQ,IACAG,OAAAC,eAAAZ,EAAAQ,GACAK,cAAA,EACAC,YAAA,EACAC,IAAAN,KAMAZ,EAAAmB,EAAA,SAAAf,GACA,GAAAQ,GAAAR,KAAAgB,WACA,WAA2B,MAAAhB,GAAA,SAC3B,WAAiC,MAAAA,GAEjC,OADAJ,GAAAU,EAAAE,EAAA,IAAAA,GACAA,GAIAZ,EAAAa,EAAA,SAAAQ,EAAAC,GAAsD,MAAAR,QAAAS,UAAAC,eAAAjB,KAAAc,EAAAC,IAGtDtB,EAAAyB,EAAA,KAGAzB,IAAA0B,EAAA,KDMM,SAAUtB,EAAQD,EAASH,GAEjC,YEzDA,SAAA2B,GAAAC,GACA,UAAAA,OAAAC,KAAAD,EACA,SAAAE,WAAA,wDAGA,OAAAhB,QAAAc,GATA,GAAAG,GAAAjB,OAAAiB,sBACAP,EAAAV,OAAAS,UAAAC,eACAQ,EAAAlB,OAAAS,UAAAU,oBAsDA7B,GAAAD,QA5CA,WACA,IACA,IAAAW,OAAAoB,OACA,QAMA,IAAAC,GAAA,GAAAC,QAAA,MAEA,IADAD,EAAA,QACA,MAAArB,OAAAuB,oBAAAF,GAAA,GACA,QAKA,QADAG,MACAjC,EAAA,EAAiBA,EAAA,GAAQA,IACzBiC,EAAA,IAAAF,OAAAG,aAAAlC,KAKA,mBAHAS,OAAAuB,oBAAAC,GAAAE,IAAA,SAAArB,GACA,MAAAmB,GAAAnB,KAEAsB,KAAA,IACA,QAIA,IAAAC,KAIA,OAHA,uBAAAC,MAAA,IAAAC,QAAA,SAAAC,GACAH,EAAAG,OAGA,yBADA/B,OAAAgC,KAAAhC,OAAAoB,UAAkCQ,IAAAD,KAAA,IAMhC,MAAAM,GAEF,aAIAjC,OAAAoB,OAAA,SAAAc,EAAAC,GAKA,OAJAC,GAEAC,EADAC,EAAAzB,EAAAqB,GAGAtB,EAAA,EAAgBA,EAAA2B,UAAAC,OAAsB5B,IAAA,CACtCwB,EAAApC,OAAAuC,UAAA3B,GAEA,QAAA6B,KAAAL,GACA1B,EAAAjB,KAAA2C,EAAAK,KACAH,EAAAG,GAAAL,EAAAK,GAIA,IAAAxB,EAAA,CACAoB,EAAApB,EAAAmB,EACA,QAAA7C,GAAA,EAAkBA,EAAA8C,EAAAG,OAAoBjD,IACtC2B,EAAAzB,KAAA2C,EAAAC,EAAA9C,MACA+C,EAAAD,EAAA9C,IAAA6C,EAAAC,EAAA9C,MAMA,MAAA+C,KF4EM,SAAUhD,EAAQD,EAASH,GAEjC,YGnKAI,GAAAD,QAAAH,EAAA,KH+KM,SAAUI,EAAQD,EAASH,GAEjC,YIzKA,SAAAwD,GAAAC,GACA,kBACA,MAAAA,IASA,GAAAC,GAAA,YAEAA,GAAAC,YAAAH,EACAE,EAAAE,iBAAAJ,GAAA,GACAE,EAAAG,gBAAAL,GAAA,GACAE,EAAAI,gBAAAN,EAAA,MACAE,EAAAK,gBAAA,WACA,MAAAC,OAEAN,EAAAO,oBAAA,SAAAR,GACA,MAAAA,IAGArD,EAAAD,QAAAuD,GJyLM,SAAUtD,EAAQD,EAASH,GAEjC,YK1NA,SAAAkE,MAqBA,QAAAC,GAAAC,GACA,IACA,MAAAA,GAAAC,KACG,MAAAC,GAEH,MADAC,GAAAD,EACAE,GAIA,QAAAC,GAAAC,EAAAC,GACA,IACA,MAAAD,GAAAC,GACG,MAAAL,GAEH,MADAC,GAAAD,EACAE,GAGA,QAAAI,GAAAF,EAAAC,EAAAE,GACA,IACAH,EAAAC,EAAAE,GACG,MAAAP,GAEH,MADAC,GAAAD,EACAE,GAMA,QAAAM,GAAAJ,GACA,oBAAAV,MACA,SAAAlC,WAAA,uCAEA,uBAAA4C,GACA,SAAA5C,WAAA,mDAEAkC,MAAAe,IAAA,EACAf,KAAAgB,IAAA,EACAhB,KAAAiB,IAAA,KACAjB,KAAAkB,IAAA,KACAR,IAAAR,GACAiB,EAAAT,EAAAV,MAeA,QAAAoB,GAAAC,EAAAC,EAAAC,GACA,UAAAF,GAAAG,YAAA,SAAAC,EAAAC,GACA,GAAAC,GAAA,GAAAb,GAAAZ,EACAyB,GAAAtB,KAAAoB,EAAAC,GACAE,EAAAP,EAAA,GAAAQ,GAAAP,EAAAC,EAAAI,MAGA,QAAAC,GAAAP,EAAAS,GACA,SAAAT,EAAAL,KACAK,IAAAJ,GAKA,IAHAH,EAAAiB,KACAjB,EAAAiB,IAAAV,GAEA,IAAAA,EAAAL,IACA,WAAAK,EAAAN,KACAM,EAAAN,IAAA,OACAM,EAAAH,IAAAY,IAGA,IAAAT,EAAAN,KACAM,EAAAN,IAAA,OACAM,EAAAH,KAAAG,EAAAH,IAAAY,SAGAT,GAAAH,IAAAc,KAAAF,EAGAG,GAAAZ,EAAAS,GAGA,QAAAG,GAAAZ,EAAAS,GACAI,EAAA,WACA,GAAAC,GAAA,IAAAd,EAAAL,IAAAc,EAAAR,YAAAQ,EAAAP,UACA,WAAAY,EAMA,YALA,IAAAd,EAAAL,IACAS,EAAAK,EAAAM,QAAAf,EAAAJ,KAEAS,EAAAI,EAAAM,QAAAf,EAAAJ,KAIA,IAAAoB,GAAA5B,EAAA0B,EAAAd,EAAAJ,IACAoB,KAAA7B,EACAkB,EAAAI,EAAAM,QAAA7B,GAEAkB,EAAAK,EAAAM,QAAAC,KAIA,QAAAZ,GAAAJ,EAAAiB,GAEA,GAAAA,IAAAjB,EACA,MAAAK,GACAL,EACA,GAAAvD,WAAA,6CAGA,IACAwE,IACA,iBAAAA,IAAA,mBAAAA,IACA,CACA,GAAAjC,GAAAF,EAAAmC,EACA,IAAAjC,IAAAG,EACA,MAAAkB,GAAAL,EAAAd,EAEA,IACAF,IAAAgB,EAAAhB,MACAiC,YAAAxB,GAKA,MAHAO,GAAAL,IAAA,EACAK,EAAAJ,IAAAqB,MACAC,GAAAlB,EAEK,uBAAAhB,GAEL,WADAc,GAAAd,EAAAmC,KAAAF,GAAAjB,GAIAA,EAAAL,IAAA,EACAK,EAAAJ,IAAAqB,EACAC,EAAAlB,GAGA,QAAAK,GAAAL,EAAAiB,GACAjB,EAAAL,IAAA,EACAK,EAAAJ,IAAAqB,EACAxB,EAAA2B,KACA3B,EAAA2B,IAAApB,EAAAiB,GAEAC,EAAAlB,GAEA,QAAAkB,GAAAlB,GAKA,GAJA,IAAAA,EAAAN,MACAa,EAAAP,IAAAH,KACAG,EAAAH,IAAA,MAEA,IAAAG,EAAAN,IAAA,CACA,OAAA1E,GAAA,EAAmBA,EAAAgF,EAAAH,IAAA5B,OAAqBjD,IACxCuF,EAAAP,IAAAH,IAAA7E,GAEAgF,GAAAH,IAAA,MAIA,QAAAW,GAAAP,EAAAC,EAAAa,GACApC,KAAAsB,YAAA,mBAAAA,KAAA,KACAtB,KAAAuB,WAAA,mBAAAA,KAAA,KACAvB,KAAAoC,UASA,QAAAjB,GAAAT,EAAA0B,GACA,GAAAM,IAAA,EACAf,EAAAf,EAAAF,EAAA,SAAAiC,GACAD,IACAA,GAAA,EACAjB,EAAAW,EAAAO,KACG,SAAAC,GACHF,IACAA,GAAA,EACAhB,EAAAU,EAAAQ,KAEAF,IAAAf,IAAAnB,IACAkC,GAAA,EACAhB,EAAAU,EAAA7B,IAhNA,GAAA2B,GAAAlG,EAAA,GAqBAuE,EAAA,KACAC,IA2BApE,GAAAD,QAAA2E,EAgBAA,EAAAiB,IAAA,KACAjB,EAAA2B,IAAA,KACA3B,EAAA+B,IAAA3C,EAEAY,EAAAvD,UAAA8C,KAAA,SAAAiB,EAAAC,GACA,GAAAvB,KAAAwB,cAAAV,EACA,MAAAM,GAAApB,KAAAsB,EAAAC,EAEA,IAAAI,GAAA,GAAAb,GAAAZ,EAEA,OADA0B,GAAA5B,KAAA,GAAA6B,GAAAP,EAAAC,EAAAI,IACAA,IL2WM,SAAUvF,EAAQD,EAASH,GAEjC,YMhbA,IAAA8G,KAMA1G,GAAAD,QAAA2G,GN+bM,SAAU1G,EAAQD,EAASH,GAEjCA,EAAoB,GACpBI,EAAOD,QAAUH,EAAoB,KAK/B,SAAUI,EAAQD,EAASH,GAEjC,YO/cA,qBAAA8E,WAIA9E,EAAA,GAAA+G,SACAC,OAAAlC,QAAA9E,EAAA,KAIAA,EAAA,IAIAc,OAAAoB,OAAAlC,EAAA,IPqeM,SAAUI,EAAQD,EAASH,GAEjC,YQlfA,SAAAiH,KACAC,GAAA,EACApC,EAAAiB,IAAA,KACAjB,EAAA2B,IAAA,KAIA,QAAAM,GAAAI,GAwCA,QAAAC,GAAAC,IAEAF,EAAAG,eACAC,EACAC,EAAAH,GAAAI,MACAN,EAAAO,WAAAC,MAGAH,EAAAH,GAAAO,cACAT,EAAAC,aACAI,EAAAH,GAAAQ,QAAA,EACAV,EAAAC,YACAI,EAAAH,GAAAO,UACAJ,EAAAH,GAAAI,SAGAD,EAAAH,GAAAQ,QAAA,EACAC,EACAN,EAAAH,GAAAO,UACAJ,EAAAH,GAAAI,SAKA,QAAAM,GAAAV,GACAG,EAAAH,GAAAQ,SACAV,EAAAY,UACAZ,EAAAY,UAAAP,EAAAH,GAAAO,UAAAJ,EAAAH,GAAAI,OACOD,EAAAH,GAAAD,cACPY,QAAAC,KACA,kCAAAT,EAAAH,GAAAO,UAAA,MAEAI,QAAAC,KACA,gHACAT,EAAAH,GAAAO,UAAA,OAzEAT,QACAD,GAAAD,IACAC,GAAA,CACA,IAAAG,GAAA,EACAO,EAAA,EACAJ,IACA1C,GAAAiB,IAAA,SAAAK,GAEA,IAAAA,EAAApB,KACAwC,EAAApB,EAAA8B,OAEAV,EAAApB,EAAA8B,KAAAL,OACAE,EAAA3B,EAAA8B,KAEAC,aAAAX,EAAApB,EAAA8B,KAAAE,eAEAZ,GAAApB,EAAA8B,OAGApD,EAAA2B,IAAA,SAAAL,EAAArD,GACA,IAAAqD,EAAArB,MACAqB,EAAA8B,IAAAb,IACAG,EAAApB,EAAA8B,MACAN,UAAA,KACAH,MAAA1E,EACAqF,QAAAC,WACAjB,EAAAZ,KAAA,KAAAJ,EAAA8B,KAKAX,EAAAxE,EAAA4E,GACA,IACA,KAEAE,QAAA,KA6CA,QAAAC,GAAAT,EAAAI,GACAO,QAAAC,KAAA,6CAAAZ,EAAA,QACAI,MAAAa,OAAAb,IAAA,IACA9E,MAAA,MAAAC,QAAA,SAAA2F,GACAP,QAAAC,KAAA,KAAAM,KAIA,QAAAhB,GAAAE,EAAAe,GACA,MAAAA,GAAAC,KAAA,SAAAC,GACA,MAAAjB,aAAAiB,KA5GA,GAAA5D,GAAA9E,EAAA,GAEA2H,GACAgB,eACA7G,UACA8G,YAGA1B,GAAA,CACA/G,GAAA8G,UAOA9G,EAAA4G,URimBM,SAAU3G,EAAQD,EAASH,GAEjC,cAC4B,SAAS6I,GSzmBrC,QAAAC,GAAAC,GACAC,EAAA1F,SACA2F,IACAC,GAAA,GAGAF,IAAA1F,QAAAyF,EA0BA,QAAAI,KACA,KAAAC,EAAAJ,EAAA1F,QAAA,CACA,GAAA+F,GAAAD,CAUA,IAPAA,GAAA,EACAJ,EAAAK,GAAA9I,OAMA6I,EAAAE,EAAA,CAGA,OAAAC,GAAA,EAAAC,EAAAR,EAAA1F,OAAA8F,EAAgEG,EAAAC,EAAkBD,IAClFP,EAAAO,GAAAP,EAAAO,EAAAH,EAEAJ,GAAA1F,QAAA8F,EACAA,EAAA,GAGAJ,EAAA1F,OAAA,EACA8F,EAAA,EACAF,GAAA,EAyHA,QAAAO,GAAAC,GACA,kBAWA,QAAAC,KAGAxB,aAAAyB,GACAC,cAAAC,GACAJ,IAXA,GAAAE,GAAAvB,WAAAsB,EAAA,GAIAG,EAAAC,YAAAJ,EAAA,KA5LAvJ,EAAAD,QAAA2I,CAUA,IAOAG,GAPAD,KAGAE,GAAA,EAQAE,EAAA,EAIAE,EAAA,KA6CAU,EAAA,oBAAAnB,KAAAxD,KACA4E,EAAAD,EAAAE,kBAAAF,EAAAG,sBAcAlB,GADA,mBAAAgB,GA2CA,SAAAP,GACA,GAAAU,GAAA,EACAC,EAAA,GAAAJ,GAAAP,GACAY,EAAAC,SAAAC,eAAA,GAEA,OADAH,GAAAI,QAAAH,GAA4BI,eAAA,IAC5B,WACAN,KACAE,EAAAK,KAAAP,IAjDAjB,GA8BAM,EAAAN,GAQAL,EAAAG,eAgFAH,EAAAW,6BT+nB6BlJ,KAAKJ,EAASH,EAAoB,KAIzD,SAAUI,EAAQD,GU11BxB,GAAAyK,EAGAA,GAAA,WACA,MAAA5G,QAGA,KAEA4G,KAAAC,SAAA,qBAAAC,MAAA,QACC,MAAAC,GAED,iBAAA/D,UACA4D,EAAA5D,QAOA5G,EAAAD,QAAAyK,GVi2BM,SAAUxK,EAAQD,EAASH,GAEjC,YWt2BA,SAAAgL,GAAArE,GACA,GAAAlF,GAAA,GAAAqD,KAAA+B,IAGA,OAFApF,GAAAuD,IAAA,EACAvD,EAAAwD,IAAA0B,EACAlF,EAjBA,GAAAqD,GAAA9E,EAAA,EAEAI,GAAAD,QAAA2E,CAIA,IAAAmG,GAAAD,GAAA,GACAE,EAAAF,GAAA,GACAG,EAAAH,EAAA,MACAI,EAAAJ,MAAAnJ,IACAwJ,EAAAL,EAAA,GACAM,EAAAN,EAAA,GAQAlG,GAAAW,QAAA,SAAAkB,GACA,GAAAA,YAAA7B,GAAA,MAAA6B,EAEA,WAAAA,EAAA,MAAAwE,EACA,QAAAtJ,KAAA8E,EAAA,MAAAyE,EACA,SAAAzE,EAAA,MAAAsE,EACA,SAAAtE,EAAA,MAAAuE,EACA,QAAAvE,EAAA,MAAA0E,EACA,SAAA1E,EAAA,MAAA2E,EAEA,qBAAA3E,IAAA,mBAAAA,GACA,IACA,GAAAtC,GAAAsC,EAAAtC,IACA,uBAAAA,GACA,UAAAS,GAAAT,EAAAmC,KAAAG,IAEK,MAAArC,GACL,UAAAQ,GAAA,SAAAW,EAAAC,GACAA,EAAApB,KAIA,MAAA0G,GAAArE,IAGA7B,EAAAyG,IAAA,SAAAC,GACA,GAAAC,GAAAC,MAAAnK,UAAAoK,MAAApL,KAAAiL,EAEA,WAAA1G,GAAA,SAAAW,EAAAC,GAGA,QAAAC,GAAAtF,EAAAuB,GACA,GAAAA,IAAA,iBAAAA,IAAA,mBAAAA,IAAA,CACA,GAAAA,YAAAkD,IAAAlD,EAAAyC,OAAAS,EAAAvD,UAAA8C,KAAA,CACA,SAAAzC,EAAAoD,KACApD,IAAAqD,GAEA,YAAArD,EAAAoD,IAAAW,EAAAtF,EAAAuB,EAAAqD,MACA,IAAArD,EAAAoD,KAAAU,EAAA9D,EAAAqD,SACArD,GAAAyC,KAAA,SAAAzC,GACA+D,EAAAtF,EAAAuB,IACW8D,IAGX,GAAArB,GAAAzC,EAAAyC,IACA,uBAAAA,GAAA,CAKA,WAJA,IAAAS,GAAAT,EAAAmC,KAAA5E,IACAyC,KAAA,SAAAzC,GACA+D,EAAAtF,EAAAuB,IACa8D,IAKb+F,EAAApL,GAAAuB,EACA,MAAAgK,GACAnG,EAAAgG,GA3BA,OAAAA,EAAAnI,OAAA,MAAAmC,MA8BA,QA7BAmG,GAAAH,EAAAnI,OA6BAjD,EAAA,EAAmBA,EAAAoL,EAAAnI,OAAiBjD,IACpCsF,EAAAtF,EAAAoL,EAAApL,OAKAyE,EAAAY,OAAA,SAAAiB,GACA,UAAA7B,GAAA,SAAAW,EAAAC,GACAA,EAAAiB,MAIA7B,EAAA+G,KAAA,SAAAC,GACA,UAAAhH,GAAA,SAAAW,EAAAC,GACAoG,EAAAlJ,QAAA,SAAA+D,GACA7B,EAAAW,QAAAkB,GAAAtC,KAAAoB,EAAAC,QAOAZ,EAAAvD,UAAA,eAAAgE,GACA,MAAAvB,MAAAK,KAAA,KAAAkB,KX83BM,SAAUnF,EAAQD,IYv+BxB,SAAAkF,GACA,YA2CA,SAAA0G,GAAApL,GAIA,GAHA,iBAAAA,KACAA,EAAAyB,OAAAzB,IAEA,6BAAAqL,KAAArL,GACA,SAAAmB,WAAA,yCAEA,OAAAnB,GAAAsL,cAGA,QAAAC,GAAAvF,GAIA,MAHA,iBAAAA,KACAA,EAAAvE,OAAAuE,IAEAA,EAIA,QAAAwF,GAAAC,GACA,GAAAC,IACAC,KAAA,WACA,GAAA3F,GAAAyF,EAAAG,OACA,QAAgB7F,SAAA7E,KAAA8E,YAUhB,OANA6F,GAAAC,WACAJ,EAAAK,OAAAL,UAAA,WACA,MAAAA,KAIAA,EAGA,QAAAM,GAAAC,GACA5I,KAAAxB,OAEAoK,YAAAD,GACAC,EAAAhK,QAAA,SAAA+D,EAAAhG,GACAqD,KAAA6I,OAAAlM,EAAAgG,IACO3C,MACF0H,MAAAoB,QAAAF,GACLA,EAAAhK,QAAA,SAAAmK,GACA/I,KAAA6I,OAAAE,EAAA,GAAAA,EAAA,KACO/I,MACF4I,GACL9L,OAAAuB,oBAAAuK,GAAAhK,QAAA,SAAAjC,GACAqD,KAAA6I,OAAAlM,EAAAiM,EAAAjM,KACOqD,MA0DP,QAAAgJ,GAAAC,GACA,GAAAA,EAAAC,SACA,MAAApI,SAAAY,OAAA,GAAA5D,WAAA,gBAEAmL,GAAAC,UAAA,EAGA,QAAAC,GAAAC,GACA,UAAAtI,SAAA,SAAAW,EAAAC,GACA0H,EAAAC,OAAA,WACA5H,EAAA2H,EAAAE,SAEAF,EAAAG,QAAA,WACA7H,EAAA0H,EAAA3F,UAKA,QAAA+F,GAAAC,GACA,GAAAL,GAAA,GAAAM,YACAtH,EAAA+G,EAAAC,EAEA,OADAA,GAAAO,kBAAAF,GACArH,EAGA,QAAAwH,GAAAH,GACA,GAAAL,GAAA,GAAAM,YACAtH,EAAA+G,EAAAC,EAEA,OADAA,GAAAS,WAAAJ,GACArH,EAGA,QAAA0H,GAAAC,GAIA,OAHAC,GAAA,GAAAC,YAAAF,GACAG,EAAA,GAAAxC,OAAAsC,EAAA1K,QAEAjD,EAAA,EAAmBA,EAAA2N,EAAA1K,OAAiBjD,IACpC6N,EAAA7N,GAAA+B,OAAAG,aAAAyL,EAAA3N,GAEA,OAAA6N,GAAAzL,KAAA,IAGA,QAAA0L,GAAAJ,GACA,GAAAA,EAAApC,MACA,MAAAoC,GAAApC,MAAA,EAEA,IAAAqC,GAAA,GAAAC,YAAAF,EAAAK,WAEA,OADAJ,GAAAK,IAAA,GAAAJ,YAAAF,IACAC,EAAAM,OAIA,QAAAC,KA0FA,MAzFAvK,MAAAkJ,UAAA,EAEAlJ,KAAAwK,UAAA,SAAAvB,GAEA,GADAjJ,KAAAyK,UAAAxB,EACAA,EAEO,oBAAAA,GACPjJ,KAAA0K,UAAAzB,MACO,IAAAT,EAAAiB,MAAAkB,KAAApN,UAAAqN,cAAA3B,GACPjJ,KAAA6K,UAAA5B,MACO,IAAAT,EAAAsC,UAAAC,SAAAxN,UAAAqN,cAAA3B,GACPjJ,KAAAgL,cAAA/B,MACO,IAAAT,EAAAyC,cAAAC,gBAAA3N,UAAAqN,cAAA3B,GACPjJ,KAAA0K,UAAAzB,EAAAkC,eACO,IAAA3C,EAAA4C,aAAA5C,EAAAiB,MAAA4B,EAAApC,GACPjJ,KAAAsL,iBAAAnB,EAAAlB,EAAAqB,QAEAtK,KAAAyK,UAAA,GAAAE,OAAA3K,KAAAsL,uBACO,KAAA9C,EAAA4C,cAAAG,YAAAhO,UAAAqN,cAAA3B,KAAAuC,EAAAvC,GAGP,SAAAwC,OAAA,4BAFAzL,MAAAsL,iBAAAnB,EAAAlB,OAdAjJ,MAAA0K,UAAA,EAmBA1K,MAAA4I,QAAA1L,IAAA,kBACA,iBAAA+L,GACAjJ,KAAA4I,QAAAyB,IAAA,2CACSrK,KAAA6K,WAAA7K,KAAA6K,UAAAa,KACT1L,KAAA4I,QAAAyB,IAAA,eAAArK,KAAA6K,UAAAa,MACSlD,EAAAyC,cAAAC,gBAAA3N,UAAAqN,cAAA3B,IACTjJ,KAAA4I,QAAAyB,IAAA,oEAKA7B,EAAAiB,OACAzJ,KAAAyJ,KAAA,WACA,GAAAkC,GAAA3C,EAAAhJ,KACA,IAAA2L,EACA,MAAAA,EAGA,IAAA3L,KAAA6K,UACA,MAAA/J,SAAAW,QAAAzB,KAAA6K,UACS,IAAA7K,KAAAsL,iBACT,MAAAxK,SAAAW,QAAA,GAAAkJ,OAAA3K,KAAAsL,mBACS,IAAAtL,KAAAgL,cACT,SAAAS,OAAA,uCAEA,OAAA3K,SAAAW,QAAA,GAAAkJ,OAAA3K,KAAA0K,cAIA1K,KAAAoL,YAAA,WACA,MAAApL,MAAAsL,iBACAtC,EAAAhJ,OAAAc,QAAAW,QAAAzB,KAAAsL,kBAEAtL,KAAAyJ,OAAApJ,KAAAmJ,KAKAxJ,KAAA4L,KAAA,WACA,GAAAD,GAAA3C,EAAAhJ,KACA,IAAA2L,EACA,MAAAA,EAGA,IAAA3L,KAAA6K,UACA,MAAAjB,GAAA5J,KAAA6K,UACO,IAAA7K,KAAAsL,iBACP,MAAAxK,SAAAW,QAAAqI,EAAA9J,KAAAsL,kBACO,IAAAtL,KAAAgL,cACP,SAAAS,OAAA,uCAEA,OAAA3K,SAAAW,QAAAzB,KAAA0K,YAIAlC,EAAAsC,WACA9K,KAAA8K,SAAA,WACA,MAAA9K,MAAA4L,OAAAvL,KAAAwL,KAIA7L,KAAA8L,KAAA,WACA,MAAA9L,MAAA4L,OAAAvL,KAAA0L,KAAAC,QAGAhM,KAMA,QAAAiM,GAAAC,GACA,GAAAC,GAAAD,EAAAE,aACA,OAAAC,GAAAC,QAAAH,IAAA,EAAAA,EAAAD,EAGA,QAAAK,GAAAC,EAAArJ,GACAA,OACA,IAAA8F,GAAA9F,EAAA8F,IAEA,IAAAuD,YAAAD,GAAA,CACA,GAAAC,EAAAtD,SACA,SAAApL,WAAA,eAEAkC,MAAAyM,IAAAD,EAAAC,IACAzM,KAAA0M,YAAAF,EAAAE,YACAvJ,EAAAyF,UACA5I,KAAA4I,QAAA,GAAAD,GAAA6D,EAAA5D,UAEA5I,KAAAkM,OAAAM,EAAAN,OACAlM,KAAA2M,KAAAH,EAAAG,KACA1D,GAAA,MAAAuD,EAAA/B,YACAxB,EAAAuD,EAAA/B,UACA+B,EAAAtD,UAAA,OAGAlJ,MAAAyM,IAAArO,OAAAoO,EAWA,IARAxM,KAAA0M,YAAAvJ,EAAAuJ,aAAA1M,KAAA0M,aAAA,QACAvJ,EAAAyF,SAAA5I,KAAA4I,UACA5I,KAAA4I,QAAA,GAAAD,GAAAxF,EAAAyF,UAEA5I,KAAAkM,OAAAD,EAAA9I,EAAA+I,QAAAlM,KAAAkM,QAAA,OACAlM,KAAA2M,KAAAxJ,EAAAwJ,MAAA3M,KAAA2M,MAAA,KACA3M,KAAA4M,SAAA,MAEA,QAAA5M,KAAAkM,QAAA,SAAAlM,KAAAkM,SAAAjD,EACA,SAAAnL,WAAA,4CAEAkC,MAAAwK,UAAAvB,GAOA,QAAA4C,GAAA5C,GACA,GAAA4D,GAAA,GAAA9B,SASA,OARA9B,GAAA6D,OAAAnO,MAAA,KAAAC,QAAA,SAAAmO,GACA,GAAAA,EAAA,CACA,GAAApO,GAAAoO,EAAApO,MAAA,KACAhC,EAAAgC,EAAA4J,QAAAyE,QAAA,WACArK,EAAAhE,EAAAF,KAAA,KAAAuO,QAAA,UACAH,GAAAhE,OAAAoE,mBAAAtQ,GAAAsQ,mBAAAtK,OAGAkK,EAGA,QAAAK,GAAAC,GACA,GAAAvE,GAAA,GAAAD,EASA,OARAwE,GAAAxO,MAAA,SAAAC,QAAA,SAAA2F,GACA,GAAA6I,GAAA7I,EAAA5F,MAAA,KACAY,EAAA6N,EAAA7E,QAAAuE,MACA,IAAAvN,EAAA,CACA,GAAAoD,GAAAyK,EAAA3O,KAAA,KAAAqO,MACAlE,GAAAC,OAAAtJ,EAAAoD,MAGAiG,EAKA,QAAAyE,GAAAC,EAAAnK,GACAA,IACAA,MAGAnD,KAAA0L,KAAA,UACA1L,KAAAuN,OAAA,UAAApK,KAAAoK,OAAA,IACAvN,KAAAwN,GAAAxN,KAAAuN,QAAA,KAAAvN,KAAAuN,OAAA,IACAvN,KAAAyN,WAAA,cAAAtK,KAAAsK,WAAA,KACAzN,KAAA4I,QAAA,GAAAD,GAAAxF,EAAAyF,SACA5I,KAAAyM,IAAAtJ,EAAAsJ,KAAA,GACAzM,KAAAwK,UAAA8C,GA7XA,IAAAjM,EAAAqM,MAAA,CAIA,GAAAlF,IACAyC,aAAA,mBAAA5J,GACAoH,SAAA,UAAApH,IAAA,YAAAqH,QACAe,KAAA,cAAApI,IAAA,QAAAA,IAAA,WACA,IAEA,MADA,IAAAsJ,OACA,EACO,MAAA5D,GACP,aAGA+D,SAAA,YAAAzJ,GACA+J,YAAA,eAAA/J,GAGA,IAAAmH,EAAA4C,YACA,GAAAuC,IACA,qBACA,sBACA,6BACA,sBACA,uBACA,sBACA,uBACA,wBACA,yBAGAtC,EAAA,SAAAjL,GACA,MAAAA,IAAAwN,SAAArQ,UAAAqN,cAAAxK,IAGAoL,EAAAD,YAAAsC,QAAA,SAAAzN,GACA,MAAAA,IAAAuN,EAAArB,QAAAxP,OAAAS,UAAA4N,SAAA5O,KAAA6D,KAAA,EAyDAuI,GAAApL,UAAAsL,OAAA,SAAAlM,EAAAgG,GACAhG,EAAAoL,EAAApL,GACAgG,EAAAuF,EAAAvF,EACA,IAAAmL,GAAA9N,KAAAxB,IAAA7B,EACAqD,MAAAxB,IAAA7B,GAAAmR,IAAA,IAAAnL,KAGAgG,EAAApL,UAAA,gBAAAZ,SACAqD,MAAAxB,IAAAuJ,EAAApL,KAGAgM,EAAApL,UAAAL,IAAA,SAAAP,GAEA,MADAA,GAAAoL,EAAApL,GACAqD,KAAA+N,IAAApR,GAAAqD,KAAAxB,IAAA7B,GAAA,MAGAgM,EAAApL,UAAAwQ,IAAA,SAAApR,GACA,MAAAqD,MAAAxB,IAAAhB,eAAAuK,EAAApL,KAGAgM,EAAApL,UAAA8M,IAAA,SAAA1N,EAAAgG,GACA3C,KAAAxB,IAAAuJ,EAAApL,IAAAuL,EAAAvF,IAGAgG,EAAApL,UAAAqB,QAAA,SAAA8G,EAAAsI,GACA,OAAArR,KAAAqD,MAAAxB,IACAwB,KAAAxB,IAAAhB,eAAAb,IACA+I,EAAAnJ,KAAAyR,EAAAhO,KAAAxB,IAAA7B,KAAAqD,OAKA2I,EAAApL,UAAAuB,KAAA,WACA,GAAAsJ,KAEA,OADApI,MAAApB,QAAA,SAAA+D,EAAAhG,GAAwCyL,EAAApG,KAAArF,KACxCwL,EAAAC,IAGAO,EAAApL,UAAAuK,OAAA,WACA,GAAAM,KAEA,OADApI,MAAApB,QAAA,SAAA+D,GAAkCyF,EAAApG,KAAAW,KAClCwF,EAAAC,IAGAO,EAAApL,UAAA0Q,QAAA,WACA,GAAA7F,KAEA,OADApI,MAAApB,QAAA,SAAA+D,EAAAhG,GAAwCyL,EAAApG,MAAArF,EAAAgG,MACxCwF,EAAAC,IAGAI,EAAAC,WACAE,EAAApL,UAAAmL,OAAAL,UAAAM,EAAApL,UAAA0Q,QAqJA,IAAA5B,IAAA,6CA4CAE,GAAAhP,UAAA2Q,MAAA,WACA,UAAA3B,GAAAvM,MAA8BiJ,KAAAjJ,KAAAyK,aA6B9BF,EAAAhO,KAAAgQ,EAAAhP,WAgBAgN,EAAAhO,KAAA8Q,EAAA9P,WAEA8P,EAAA9P,UAAA2Q,MAAA,WACA,UAAAb,GAAArN,KAAAyK,WACA8C,OAAAvN,KAAAuN,OACAE,WAAAzN,KAAAyN,WACA7E,QAAA,GAAAD,GAAA3I,KAAA4I,SACA6D,IAAAzM,KAAAyM,OAIAY,EAAA5J,MAAA,WACA,GAAA0K,GAAA,GAAAd,GAAA,MAAuCE,OAAA,EAAAE,WAAA,IAEvC,OADAU,GAAAzC,KAAA,QACAyC,EAGA,IAAAC,IAAA,oBAEAf,GAAAgB,SAAA,SAAA5B,EAAAc,GACA,QAAAa,EAAA9B,QAAAiB,GACA,SAAA3I,YAAA,sBAGA,WAAAyI,GAAA,MAA+BE,SAAA3E,SAA0B0F,SAAA7B,MAGzDpL,EAAAsH,UACAtH,EAAAkL,UACAlL,EAAAgM,WAEAhM,EAAAqM,MAAA,SAAAlB,EAAA+B,GACA,UAAAzN,SAAA,SAAAW,EAAAC,GACA,GAAA8M,GAAA,GAAAjC,GAAAC,EAAA+B,GACAE,EAAA,GAAAC,eAEAD,GAAApF,OAAA,WACA,GAAAlG,IACAoK,OAAAkB,EAAAlB,OACAE,WAAAgB,EAAAhB,WACA7E,QAAAsE,EAAAuB,EAAAE,yBAAA,IAEAxL,GAAAsJ,IAAA,eAAAgC,KAAAG,YAAAzL,EAAAyF,QAAA1L,IAAA,gBACA,IAAA+L,GAAA,YAAAwF,KAAAN,SAAAM,EAAAI,YACApN,GAAA,GAAA4L,GAAApE,EAAA9F,KAGAsL,EAAAlF,QAAA,WACA7H,EAAA,GAAA5D,WAAA,4BAGA2Q,EAAAK,UAAA,WACApN,EAAA,GAAA5D,WAAA,4BAGA2Q,EAAAM,KAAAP,EAAAtC,OAAAsC,EAAA/B,KAAA,GAEA,YAAA+B,EAAA9B,cACA+B,EAAAO,iBAAA,GAGA,gBAAAP,IAAAjG,EAAAiB,OACAgF,EAAAQ,aAAA,QAGAT,EAAA5F,QAAAhK,QAAA,SAAA+D,EAAAhG,GACA8R,EAAAS,iBAAAvS,EAAAgG,KAGA8L,EAAAU,KAAA,oBAAAX,GAAA/D,UAAA,KAAA+D,EAAA/D,cAGApJ,EAAAqM,MAAA0B,UAAA,IACC,oBAAA/N,WAAArB,OZ8+BK,SAAU5D,EAAQiT,EAAqBrT,GAE7C,YACAc,QAAOC,eAAesS,EAAqB,cAAgB1M,OAAO,GAC7C,IAAI2M,GAAsCtT,EAAoB,GAC1DuT,EAA8CvT,EAAoBmB,EAAEmS,GACpEE,EAA0CxT,EAAoB,IAC9DyT,EAAkDzT,EAAoBmB,EAAEqS,GACxEE,EAAqC1T,EAAoB,Ga97ClFyT,GAAA9O,EAASgP,OAAOJ,EAAA5O,EAAAiP,cAACF,EAAA,EAAD,MAASnJ,SAASsJ,eAAe,Ubm8C3C,SAAUzT,EAAQD,EAASH,GAEjC,Yc/7CA,SAAA8T,GAAAnP,GAAc,OAAAE,GAAAxB,UAAAC,OAAA,EAAAyH,EAAA,yBAAApG,EAAA,6EAA4DA,EAAAlE,EAAA,EAAoFA,EAAAoE,EAAIpE,IAAAsK,GAAA,WAAAgJ,mBAAA1Q,UAAA5C,EAAA,GAAoO,MAAzKoE,GAAA4K,MAAA1E,EAAA,kHAA4HlG,EAAAlE,KAAA,sBAA6BkE,EAAAmP,YAAA,EAAgBnP,EACjQ,QAAAoP,GAAAtP,EAAAE,EAAAkG,GAAkB/G,KAAAkQ,MAAAvP,EAAaX,KAAAmQ,QAAAtP,EAAeb,KAAAoQ,KAAAjT,EAAY6C,KAAAqQ,QAAAtJ,GAAAuJ,EAC/L,QAAAC,GAAA5P,EAAAE,EAAAkG,GAAkB/G,KAAAkQ,MAAAvP,EAAaX,KAAAmQ,QAAAtP,EAAeb,KAAAoQ,KAAAjT,EAAY6C,KAAAqQ,QAAAtJ,GAAAuJ,EAAkB,QAAAE,MAAyH,QAAAC,GAAA9P,EAAAE,EAAAkG,GAAkB/G,KAAAkQ,MAAAvP,EAAaX,KAAAmQ,QAAAtP,EAAeb,KAAAoQ,KAAAjT,EAAY6C,KAAAqQ,QAAAtJ,GAAAuJ,EAC/P,QAAAI,GAAA/P,EAAAE,EAAAkG,GAAkB,GAAAtK,GAAAC,KAAUkK,EAAA,KAAA+J,EAAA,IAAe,UAAA9P,EAAA,IAAApE,SAAA,KAAAoE,EAAA+P,MAAAD,EAAA9P,EAAA+P,SAAA,KAAA/P,EAAAtB,MAAAqH,EAAA,GAAA/F,EAAAtB,KAAAsB,EAAAgQ,EAAAtU,KAAAsE,EAAApE,KAAAqU,EAAAtT,eAAAf,KAAAC,EAAAD,GAAAoE,EAAApE,GAA4H,IAAAsU,GAAA1R,UAAAC,OAAA,CAAyB,QAAAyR,EAAArU,EAAAsU,SAAAjK,MAAsB,MAAAgK,EAAA,CAAa,OAAAE,GAAAvJ,MAAAqJ,GAAAzU,EAAA,EAAuBA,EAAAyU,EAAIzU,IAAA2U,EAAA3U,GAAA+C,UAAA/C,EAAA,EAAwBI,GAAAsU,SAAAC,EAAa,GAAAtQ,KAAAuQ,aAAA,IAAAzU,IAAAsU,GAAApQ,EAAAuQ,iBAAA,KAAAxU,EAAAD,KAAAC,EAAAD,GAAAsU,EAAAtU,GAA4E,QAAO0U,SAAAC,EAAA1F,KAAA/K,EAAApB,IAAAqH,EAAAgK,IAAAD,EAAAT,MAAAxT,EAAA2U,OAAAC,EAAAC,SAAwD,QAAAC,GAAA7Q,GAAc,uBAAAA,IAAA,OAAAA,KAAAwQ,WAAAC,EAC5b,QAAAK,GAAA9Q,GAAmB,GAAAE,IAAO6Q,IAAA,KAAAC,IAAA,KAA4B,eAAAhR,GAAAqM,QAAA,iBAAArM,GAA6C,MAAAE,GAAAF,KAAgC,QAAAiR,GAAAjR,EAAAE,EAAAkG,EAAAtK,GAAoB,GAAAoV,EAAAvS,OAAA,CAAa,GAAA5C,GAAAmV,EAAAC,KAAsE,OAAxDpV,GAAA4M,OAAA3I,EAAWjE,EAAAqV,UAAAlR,EAAcnE,EAAAsV,KAAAjL,EAASrK,EAAAyT,QAAA1T,EAAYC,EAAAuV,MAAA,EAAUvV,EAAS,OAAO4M,OAAA3I,EAAAoR,UAAAlR,EAAAmR,KAAAjL,EAAAoJ,QAAA1T,EAAAwV,MAAA,GAA+C,QAAAC,GAAAvR,GAAcA,EAAA2I,OAAA,KAAc3I,EAAAoR,UAAA,KAAiBpR,EAAAqR,KAAA,KAAYrR,EAAAwP,QAAA,KAAexP,EAAAsR,MAAA,EAAU,GAAAJ,EAAAvS,QAAAuS,EAAA7P,KAAArB,GAC3X,QAAAwR,GAAAxR,EAAAE,EAAAkG,EAAAtK,GAAoB,GAAAC,SAAAiE,EAAe,eAAAjE,GAAA,YAAAA,IAAAiE,EAAA,KAAyC,IAAAiG,IAAA,CAAS,WAAAjG,EAAAiG,GAAA,MAAiB,QAAAlK,GAAe,0BAAAkK,GAAA,CAAiC,MAAM,qBAAAjG,EAAAwQ,UAAiC,IAAAC,GAAA,IAAAgB,GAAA,IAAAC,GAAA,IAAAC,GAAA1L,GAAA,GAAkC,GAAAA,EAAA,MAAAG,GAAAtK,EAAAkE,EAAA,KAAAE,EAAA,IAAA0R,EAAA5R,EAAA,GAAAE,GAAA,CAAgE,IAAvB+F,EAAA,EAAI/F,EAAA,KAAAA,EAAA,IAAAA,EAAA,IAAmB6G,MAAAoB,QAAAnI,GAAA,OAAAgQ,GAAA,EAAgCA,EAAAhQ,EAAArB,OAAWqR,IAAA,CAAKjU,EAAAiE,EAAAgQ,EAAO,IAAAI,GAAAlQ,EAAA0R,EAAA7V,EAAAiU,EAAe/J,IAAAuL,EAAAzV,EAAAqU,EAAAhK,EAAAtK,OAAc,WAAAkE,GAAA,oBAAAA,GAAAoQ,EAAA,MAAAA,EAAAyB,GAAA7R,EAAA6R,IAAA7R,EAAA,cAAAoQ,EAAA,mBAAAA,KAAA,yBAAAA,GAAA,IAAApQ,EACnXoQ,EAAAxU,KAAAoE,GAAAgQ,EAAA,IAAcjU,EAAAiE,EAAA2H,QAAA5F,MAAmBhG,IAAAiG,MAAAoO,EAAAlQ,EAAA0R,EAAA7V,EAAAiU,KAAA/J,GAAAuL,EAAAzV,EAAAqU,EAAAhK,EAAAtK,OAAsC,WAAAC,IAAAqK,EAAA,GAAApG,EAAAmP,EAAA,yBAAA/I,EAAA,qBAA0EjK,OAAAgC,KAAA6B,GAAAlC,KAAA,UAA8BsI,EAAA,IAAS,OAAAH,GAAS,QAAA2L,GAAA5R,EAAAE,GAAgB,uBAAAF,IAAA,OAAAA,GAAA,MAAAA,EAAApB,IAAAkS,EAAA9Q,EAAApB,KAAAsB,EAAAsK,SAAA,IAA8E,QAAAsH,GAAA9R,EAAAE,GAAgBF,EAAAqR,KAAAzV,KAAAoE,EAAAwP,QAAAtP,EAAAF,EAAAsR,SAC/S,QAAAS,GAAA/R,EAAAE,EAAAkG,GAAkB,GAAAtK,GAAAkE,EAAA2I,OAAA5M,EAAAiE,EAAAoR,SAA6BpR,KAAAqR,KAAAzV,KAAAoE,EAAAwP,QAAAtP,EAAAF,EAAAsR,SAAqCvK,MAAAoB,QAAAnI,GAAAgS,EAAAhS,EAAAlE,EAAAsK,EAAAtJ,EAAAwC,qBAAA,MAAAU,IAAA6Q,EAAA7Q,KAAAE,EAAAnE,IAAAiE,EAAApB,KAAAsB,KAAAtB,MAAAoB,EAAApB,IAAA,OAAAoB,EAAApB,KAAAyN,QAAA4F,EAAA,YAAA7L,EAAApG,GAA2IwQ,SAAAC,EAAA1F,KAAA/K,EAAA+K,KAAAnM,IAAAsB,EAAA+P,IAAAjQ,EAAAiQ,IAAAV,MAAAvP,EAAAuP,MAAAmB,OAAA1Q,EAAA0Q,SAAqE5U,EAAAuF,KAAArB,IAAa,QAAAgS,GAAAhS,EAAAE,EAAAkG,EAAAtK,EAAAC,GAAsB,GAAAkK,GAAA,EAAS,OAAAG,IAAAH,GAAA,GAAAG,GAAAiG,QAAA4F,EAAA,YAA4C/R,EAAA+Q,EAAA/Q,EAAA+F,EAAAnK,EAAAC,GAAa,MAAAiE,GAAAwR,EAAAxR,EAAA,GAAA+R,EAAA7R,GAAqBqR,EAAArR,GARjZ,GAAArE,GAAAR,EAAA,GAAAmB,EAAAnB,EAAA,GAAAyB,EAAAzB,EAAA,GAAA6W,EAAA,mBAAAnK,gBAAA,IAAA0I,EAAAyB,EAAAnK,OAAA,2BAAA0J,EAAAS,EAAAnK,OAAA,wBAAA2J,EAAAQ,EAAAnK,OAAA,0BAAA4J,EAAAO,EAAAnK,OAAA,0BAAAoK,EAAAD,EAAAnK,OAAA,4BAAA8J,EAAA,mBAAA9J,gBAAAL,SAEbiI,GAAOyC,UAAA,WAAqB,UAASC,mBAAA,aAAgCC,oBAAA,aAAiCC,gBAAA,aAA2GjD,GAAA1S,UAAA4V,oBAAgClD,EAAA1S,UAAA6V,SAAA,SAAAzS,EAAAE,GAAmC,iBAAAF,IAAA,mBAAAA,IAAA,MAAAA,GAAAmP,EAAA,MAAmE9P,KAAAqQ,QAAA6C,gBAAAlT,KAAAW,EAAAE,EAAA,aAAmDoP,EAAA1S,UAAA8V,YAAA,SAAA1S,GAAoCX,KAAAqQ,QAAA2C,mBAAAhT,KAAAW,EAAA,gBACpV6P,EAAAjT,UAAA0S,EAAA1S,SAAwB,IAAA+V,GAAA/C,EAAAhT,UAAA,GAAAiT,EAAwB8C,GAAA9R,YAAA+O,EAAgB/T,EAAA8W,EAAArD,EAAA1S,WAAiB+V,EAAAC,sBAAA,CAAsG,IAAAC,GAAA/C,EAAAlT,UAAA,GAAAiT,EAAwBgD,GAAAhS,YAAAiP,EAAgBjU,EAAAgX,EAAAvD,EAAA1S,WAAiBiW,EAAAC,gCAAA,EAAoCD,EAAA7D,OAAA,WAAoB,MAAA3P,MAAAkQ,MAAAc,SAA4B,IAAAM,IAAOC,QAAA,MAAaV,EAAA/T,OAAAS,UAAAC,eAAAsT,GAAsCvR,KAAA,EAAAqR,KAAA,EAAA8C,QAAA,EAAAC,UAAA,GAEvWf,EAAA,OAAAf,KAIjH+B,GAAOC,UAAUrV,IAAA,SAAAmC,EAAAE,EAAAkG,GAAoB,SAAApG,EAAA,MAAAA,EAAoB,IAAAlE,KAAyB,OAAhBkW,GAAAhS,EAAAlE,EAAA,KAAAoE,EAAAkG,GAAgBtK,GAASmC,QAAA,SAAA+B,EAAAE,EAAAkG,GAAyB,SAAApG,EAAA,MAAAA,EAAoBE,GAAA+Q,EAAA,UAAA/Q,EAAAkG,GAAmB,MAAApG,GAAAwR,EAAAxR,EAAA,GAAA8R,EAAA5R,GAAqBqR,EAAArR,IAAKoR,MAAA,SAAAtR,GAAmB,aAAAA,EAAA,EAAAwR,EAAAxR,EAAA,GAAAlD,EAAAqC,gBAAA,OAAgDgU,QAAA,SAAAnT,GAAqB,GAAAE,KAA2C,OAAlC8R,GAAAhS,EAAAE,EAAA,KAAApD,EAAAwC,qBAAkCY,GAASkT,KAAA,SAAApT,GAAuC,MAArB6Q,GAAA7Q,IAAAmP,EAAA,OAAqBnP,IAAUqT,UAAA/D,EAAAgE,cAAA1D,EAAA2D,wBAAAzD,EAAA0D,SAAArB,EAAAlD,cAAAc,EAAA0D,aAAA,SAAAzT,EAAAE,EAAAkG,GAA+G,GAAAtK,GAAAD,KAAUmE,EAAAuP,OAC3exT,EAAAiE,EAAApB,IAAAqH,EAAAjG,EAAAiQ,IAAAD,EAAAhQ,EAAA0Q,MAA2B,UAAAxQ,EAAA,CAA+E,OAAnE,KAAAA,EAAA+P,MAAAhK,EAAA/F,EAAA+P,IAAAD,EAAAW,EAAAC,aAAsC,KAAA1Q,EAAAtB,MAAA7C,EAAA,GAAAmE,EAAAtB,KAA6BoB,EAAA+K,MAAA/K,EAAA+K,KAAAwF,aAAA,GAAAH,GAAApQ,EAAA+K,KAAAwF,YAAyD,KAAAD,IAAApQ,GAAAgQ,EAAAtU,KAAAsE,EAAAoQ,KAAAH,EAAAtT,eAAAyT,KAAAxU,EAAAwU,OAAA,KAAApQ,EAAAoQ,QAAA,KAAAF,IAAAE,GAAApQ,EAAAoQ,IAAyF,GAAAA,GAAA5R,UAAAC,OAAA,CAAyB,QAAA2R,EAAAxU,EAAAuU,SAAAjK,MAAsB,MAAAkK,EAAA,CAAaF,EAAArJ,MAAAuJ,EAAW,QAAA3U,GAAA,EAAYA,EAAA2U,EAAI3U,IAAAyU,EAAAzU,GAAA+C,UAAA/C,EAAA,EAAwBG,GAAAuU,SAAAD,EAAa,OAAOI,SAAAC,EAAA1F,KAAA/K,EAAA+K,KAAAnM,IAAA7C,EAAAkU,IAAAhK,EAAAsJ,MAAAzT,EAAA4U,OAAAV,IAAqD0D,cAAA,SAAA1T,GAA2B,GAAAE,GAAA6P,EAAAlO,KAAA,KAAA7B,EAA8B,OAATE,GAAA6K,KAAA/K,EAASE,GAC7eyT,eAAA9C,EAAA+C,QAAA,SAAAC,oDAAsFC,kBAAAnD,EAAApT,OAAA1B,IAA8BkY,EAAA5X,OAAA6X,QAAkBC,QAAAhB,IAAUiB,EAAAH,GAAAd,GAAAc,CAAYtY,GAAAD,QAAA0Y,EAAA,QAAAA,EAAA,QAAAA,Gd+8CtJ,SAAUzY,EAAQD,EAASH,GAEjC,Yen+CA,SAAA8Y,KAEA,GACA,oBAAAC,iCACA,mBAAAA,gCAAAD,SAcA,IAEAC,+BAAAD,YACG,MAAA/V,GAGHiF,QAAAP,MAAA1E,IAOA+V,IACA1Y,EAAAD,QAAAH,EAAA,Kf8+CM,SAAUI,EAAQD,EAASH,GAEjC,YgBrgDA,SAAAyU,GAAA9P,GAAc,OAAAE,GAAAxB,UAAAC,OAAA,EAAA7C,EAAA,yBAAAkE,EAAA,6EAA4DA,EAAAjE,EAAA,EAAoFA,EAAAmE,EAAInE,IAAAD,GAAA,WAAAsT,mBAAA1Q,UAAA3C,EAAA,GAAoO,MAAzKmE,GAAA4K,MAAAhP,EAAA,kHAA4HoE,EAAAlE,KAAA,sBAA6BkE,EAAAmP,YAAA,EAAgBnP,EAChO,QAAAmU,GAAArU,EAAAE,GAAiB,OAAAF,EAAAE,OAGvL,QAAAoU,GAAAtU,EAAAE,GAAiB,GAAAqU,GAAA1X,eAAAmD,IAAA,EAAAA,EAAArB,SAAA,MAAAqB,EAAA,UAAAA,EAAA,YAAAA,EAAA,UAAAA,EAAA,YAAiG,WAAAE,EAAA,QAAqB,cAAAA,IAAiB,oBAAAqU,IAAA1X,eAAAmD,MAAA,GAAAE,EAAAsU,EAAAxU,MAAAE,EAAAuU,iBAAAvU,EAAAwU,uBAAAxU,EAAAyU,2BAAA3U,IAAAsH,cAAAN,MAAA,KAAAhH,EAAA,UAAAA,GAAA,UAAAA,IAAgM,gEAAoE,mBAAkB,QAAAwU,GAAAxU,GAAe,MAAA4U,IAAA/X,eAAAmD,GAAA4U,GAAA5U,GAAA,KAI5X,QAAA6U,GAAA7U,GAAe,MAAAA,GAAA,GAAAyL,cAIyK,QAAAqJ,GAAA9U,EAAAE,EAAApE,EAAAC,EAAAqK,EAAAgK,EAAAnK,EAAAqK,EAAAN,GAA+BwB,GAAAuD,iBAAA,EAAqBvD,GAAAwD,aAAA,IAAoB,IAAA9C,GAAAnL,MAAAnK,UAAAoK,MAAApL,KAAA8C,UAAA,EAA8C,KAAIwB,EAAA+U,MAAAnZ,EAAAoW,GAAa,MAAAP,GAASH,GAAAwD,aAAArD,EAAAH,GAAAuD,iBAAA,GACzY,QAAAG,KAAc,GAAA1D,GAAA2D,iBAAA,CAAuB,GAAAnV,GAAAwR,GAAA4D,aAAiE,MAA3C5D,IAAA4D,cAAA,KAAqB5D,GAAA2D,kBAAA,EAAsBnV,GACtG,QAAAqV,KAAc,GAAAC,GAAA,OAAAtV,KAAAuV,IAAA,CAAuB,GAAArV,GAAAqV,GAAAvV,GAAAlE,EAAAwZ,GAAA3J,QAAA3L,EAAkD,KAAtB,EAAAlE,GAAAgU,EAAA,KAAA9P,IAAsBwV,GAAA1Z,GAAA,CAAWoE,EAAAuV,eAAA3F,EAAA,KAAA9P,GAAiCwV,GAAA1Z,GAAAoE,EAAQpE,EAAAoE,EAAAwV,UAAe,QAAA3Z,KAAAD,GAAA,CAAgB,GAAAsK,OAAA,GAAagK,EAAAtU,EAAAC,GAAAkK,EAAA/F,EAAAoQ,EAAAvU,CAAmB4Z,IAAA9Y,eAAAyT,IAAAR,EAAA,KAAAQ,GAAsCqF,GAAArF,GAAAF,CAAQ,IAAAJ,GAAAI,EAAAwF,uBAAgC,IAAA5F,EAAA,CAAM,IAAA5J,IAAA4J,KAAAnT,eAAAuJ,IAAAyP,EAAA7F,EAAA5J,GAAAH,EAAAqK,EAA6ClK,IAAA,MAAKgK,GAAA0F,kBAAAD,EAAAzF,EAAA0F,iBAAA7P,EAAAqK,GAAAlK,GAAA,GAAAA,GAAA,CAA+DA,IAAA0J,EAAA,KAAA/T,EAAAiE,MAC/Y,QAAA6V,GAAA7V,EAAAE,EAAApE,GAAmBia,GAAA/V,IAAA8P,EAAA,MAAA9P,GAAwB+V,GAAA/V,GAAAE,EAAQ8V,GAAAhW,GAAAE,EAAAwV,WAAA5Z,GAAAma,aAA+D,QAAAC,GAAAlW,GAAesV,IAAAxF,EAAA,OAAmBwF,GAAAvO,MAAAnK,UAAAoK,MAAApL,KAAAoE,GAAiCqV,IAAK,QAAAc,GAAAnW,GAAe,GAAAlE,GAAAoE,GAAA,CAAW,KAAApE,IAAAkE,GAAA,GAAAA,EAAAnD,eAAAf,GAAA,CAAmC,GAAAC,GAAAiE,EAAAlE,EAAWyZ,IAAA1Y,eAAAf,IAAAyZ,GAAAzZ,KAAAC,IAAAwZ,GAAAzZ,IAAAgU,EAAA,MAAAhU,GAAAyZ,GAAAzZ,GAAAC,EAAAmE,GAAA,GAAwEA,GAAAmV,IACnG,QAAAe,GAAApW,EAAAE,EAAApE,EAAAC,GAAqBmE,EAAAF,EAAA+K,MAAA,gBAA0B/K,EAAAqW,cAAAC,GAAAva,GAAsByV,GAAA+E,wCAAArW,EAAApE,MAAA,GAAAkE,GAAwDA,EAAAqW,cAAA,KACpW,QAAAG,GAAAxW,EAAAE,GAAwC,MAAvB,OAAAA,GAAA4P,EAAA,MAAuB,MAAA9P,EAAAE,EAAoB6G,MAAAoB,QAAAnI,GAAqB+G,MAAAoB,QAAAjI,IAAAF,EAAAqB,KAAA4T,MAAAjV,EAAAE,GAAAF,IAA+CA,EAAAqB,KAAAnB,GAAUF,GAAS+G,MAAAoB,QAAAjI,IAAAF,GAAAyW,OAAAvW,IAAAF,EAAAE,GAA4C,QAAAwW,GAAA1W,EAAAE,EAAApE,GAAmBiL,MAAAoB,QAAAnI,KAAA/B,QAAAiC,EAAApE,GAAAkE,GAAAE,EAAAtE,KAAAE,EAAAkE,GAClN,QAAAwB,GAAAxB,EAAAE,GAAiB,GAAAF,EAAA,CAAM,GAAAlE,GAAAkE,EAAA2W,mBAAA5a,EAAAiE,EAAA4W,kBAAkD,IAAA7P,MAAAoB,QAAArM,GAAA,OAAAsK,GAAA,EAAgCA,EAAAtK,EAAA6C,SAAAqB,EAAA6W,uBAAsCzQ,IAAAgQ,EAAApW,EAAAE,EAAApE,EAAAsK,GAAArK,EAAAqK,QAAsBtK,IAAAsa,EAAApW,EAAAE,EAAApE,EAAAC,EAAoBiE,GAAA2W,mBAAA,KAA0B3W,EAAA4W,mBAAA,KAA0B5W,EAAA8W,gBAAA9W,EAAAa,YAAAkW,QAAA/W,IAA4C,QAAAgX,GAAAhX,GAAe,MAAAwB,GAAAxB,GAAA,GAAgB,QAAAiX,GAAAjX,GAAe,MAAAwB,GAAAxB,GAAA,GACvU,QAAAkX,GAAAlX,EAAAE,GAAiB,GAAApE,GAAAkE,EAAAmX,SAAkB,KAAArb,EAAA,WAAkB,IAAAC,GAAAqb,GAAAtb,EAAY,KAAAC,EAAA,WAAkBD,GAAAC,EAAAmE,EAAOF,GAAA,OAAAE,GAAY,gNAAAnE,KAAAsb,YAAArX,IAAA+K,KAAAhP,IAAA,WAAAiE,GAAA,UAAAA,GAAA,WAAAA,GAAA,aAAAA,IAAkTA,GAAAjE,CAAK,MAAAiE,EAAQ,SAAAA,GAAA,EAAa,MAAAA,GAAA,MAAiBlE,GAAA,mBAAAA,IAAAgU,EAAA,MAAA5P,QAAApE,IACncA,GAAS,QAAAwb,GAAAtX,EAAAE,EAAApE,EAAAC,GAAqB,OAAAqK,GAAAgK,EAAA,EAAcA,EAAAoF,GAAA7W,OAAYyR,IAAA,CAAK,GAAAnK,GAAAuP,GAAApF,EAAYnK,SAAAwP,cAAAzV,EAAAE,EAAApE,EAAAC,MAAAqK,EAAAoQ,EAAApQ,EAAAH,IAA6C,MAAAG,GAAS,QAAAmR,GAAAvX,GAAeA,IAAAwX,GAAAhB,EAAAgB,GAAAxX,IAAiB,QAAAyX,GAAAzX,GAAe,GAAAE,GAAAsX,EAASA,IAAA,KAAQtX,IAAAF,EAAA0W,EAAAxW,EAAA8W,GAAAN,EAAAxW,EAAA+W,GAAAO,IAAA1H,EAAA,MAAA0B,GAAAkG,sBAC/L,QAAAC,GAAA3X,GAAe,GAAAA,EAAA4R,IAAA,MAAA5R,GAAA4R,GAAoB,QAAA1R,OAAaF,EAAA4R,KAAM,IAAA1R,EAAAmB,KAAArB,MAAA4X,WAA0C,WAA1C5X,KAAA4X,WAA2D,GAAA9b,OAAA,GAAAC,EAAAiE,EAAA4R,GAAoB,QAAA7V,EAAA8b,KAAA,IAAA9b,EAAA8b,IAAA,MAAA9b,EAAiC,MAAKiE,IAAAjE,EAAAiE,EAAA4R,KAAY5R,EAAAE,EAAAiR,MAAArV,EAAAC,CAAc,OAAAD,GAAS,QAAAgc,GAAA9X,GAAe,OAAAA,EAAA6X,KAAA,IAAA7X,EAAA6X,IAAA,MAAA7X,GAAAmX,SAA2CrH,GAAA,MAAQ,QAAAiI,GAAA/X,GAAe,MAAAA,GAAAgY,KAAA,KACpB,QAAAC,GAAAjY,GAAe,GAAAA,IAAA,aAAiBA,GAAA,IAAAA,EAAA6X,IAAoB,OAAA7X,IAAA,KAAgB,QAAAkY,GAAAlY,EAAAE,EAAApE,GAAmB,OAAAC,MAAaiE,GAAEjE,EAAAsF,KAAArB,KAAAiY,EAAAjY,EAAmB,KAAAA,EAAAjE,EAAA4C,OAAe,EAAAqB,KAAME,EAAAnE,EAAAiE,GAAA,WAAAlE,EAAsB,KAAAkE,EAAA,EAAQA,EAAAjE,EAAA4C,OAAWqB,IAAAE,EAAAnE,EAAAiE,GAAA,UAAAlE,GAClc,QAAAqc,GAAAnY,EAAAE,EAAApE,IAAmBoE,EAAAgX,EAAAlX,EAAAlE,EAAAsc,eAAAxC,wBAAA1V,OAAApE,EAAA6a,mBAAAH,EAAA1a,EAAA6a,mBAAAzW,GAAApE,EAAA8a,mBAAAJ,EAAA1a,EAAA8a,mBAAA5W,IAAuJ,QAAAqY,GAAArY,GAAeA,KAAAoY,eAAAxC,yBAAAsC,EAAAlY,EAAAsY,YAAAH,EAAAnY,GAAoE,QAAAuY,GAAAvY,GAAe,GAAAA,KAAAoY,eAAAxC,wBAAA,CAAgD,GAAA1V,GAAAF,EAAAsY,WAAoBpY,KAAA+X,EAAA/X,GAAA,KAAegY,EAAAhY,EAAAiY,EAAAnY,IAC/V,QAAAwY,GAAAxY,EAAAE,EAAApE,GAAmBkE,GAAAlE,KAAAsc,eAAAtC,mBAAA5V,EAAAgX,EAAAlX,EAAAlE,EAAAsc,eAAAtC,qBAAAha,EAAA6a,mBAAAH,EAAA1a,EAAA6a,mBAAAzW,GAAApE,EAAA8a,mBAAAJ,EAAA1a,EAAA8a,mBAAA5W,IAAwL,QAAAyY,GAAAzY,GAAeA,KAAAoY,eAAAtC,kBAAA0C,EAAAxY,EAAAsY,YAAA,KAAAtY,GAA+D,QAAA0Y,GAAA1Y,GAAe0W,EAAA1W,EAAAqY,GACxS,QAAAM,GAAA3Y,EAAAE,EAAApE,EAAAC,GAAqB,GAAAD,GAAAC,EAAAiE,EAAA,CAAmB,OAARoG,GAAAtK,EAAQsU,EAAArU,EAAAkK,EAAA,EAAAqK,EAAAlK,EAAoBkK,EAAEA,EAAA2H,EAAA3H,GAAArK,GAAYqK,GAAA,CAAI,QAAAN,GAAAI,EAAYJ,EAAEA,EAAAiI,EAAAjI,GAAAM,GAAY,MAAK,EAAArK,EAAAqK,GAAMlK,EAAA6R,EAAA7R,GAAAH,GAAa,MAAK,EAAAqK,EAAArK,GAAMmK,EAAA6H,EAAA7H,GAAAE,GAAa,MAAKrK,KAAI,CAAE,GAAAG,IAAAgK,GAAAhK,IAAAgK,EAAAwI,UAAA,KAAA5Y,EAAkCoG,GAAA6R,EAAA7R,GAAQgK,EAAA6H,EAAA7H,GAAQhK,EAAA,SAAOA,GAAA,IAAgB,KAAJgK,EAAAhK,EAAIA,KAAStK,OAAAsU,IAAyB,QAAdnK,EAAAnK,EAAA8c,YAAc3S,IAAAmK,IAAyBhK,EAAA/E,KAAAvF,GAAUA,EAAAmc,EAAAnc,EAAQ,KAAAA,KAASC,OAAAqU,IAAyB,QAAdnK,EAAAlK,EAAA6c,YAAc3S,IAAAmK,IAAyBtU,EAAAuF,KAAAtF,GAAUA,EAAAkc,EAAAlc,EAAQ,KAAAA,EAAA,EAAQA,EAAAqK,EAAAzH,OAAW5C,IAAAyc,EAAApS,EAAArK,GAAA,UAAAiE,EAAyB,KAAAA,EAAAlE,EAAA6C,OAAe,EAAAqB,KAAMwY,EAAA1c,EAAAkE,GAAA,WAAAE,GACvP,QAAA2Y,KAAwG,OAA1FC,IAAAnd,GAAAod,YAAAD,GAAA,eAAAlT,UAAAoT,gBAAA,2BAA0FF,GACxT,QAAAG,KAAc,GAAAlH,GAAAmH,cAAA,MAAAnH,IAAAmH,aAA0C,IAAAlZ,GAAAjE,EAAAmE,EAAA6R,GAAAoH,WAAArd,EAAAoE,EAAAvB,OAAAyH,EAAAgT,IAAAhJ,EAAAhK,EAAAzH,MAAoD,KAAAqB,EAAA,EAAQA,EAAAlE,GAAAoE,EAAAF,KAAAoG,EAAApG,GAAiBA,KAAK,GAAAiG,GAAAnK,EAAAkE,CAAU,KAAAjE,EAAA,EAAQA,GAAAkK,GAAA/F,EAAApE,EAAAC,KAAAqK,EAAAgK,EAAArU,GAAsBA,KAA+C,MAA1CgW,IAAAmH,cAAA9S,EAAAY,MAAAhH,EAAA,EAAAjE,EAAA,EAAAA,MAAA,IAA0CgW,GAAAmH,cAAuB,QAAAE,KAAc,eAAArH,IAAAsH,MAAAtH,GAAAsH,MAAArX,MAAA+P,GAAAsH,MAAAR,KAEtQ,QAAA7G,GAAAhS,EAAAE,EAAApE,EAAAC,GAAoBsD,KAAA+Y,eAAApY,EAAsBX,KAAAiZ,YAAApY,EAAmBb,KAAAia,YAAAxd,EAAmBkE,EAAAX,KAAAwB,YAAA0Y,SAA6B,QAAAnT,KAAApG,KAAAnD,eAAAuJ,MAAAlG,EAAAF,EAAAoG,IAAA/G,KAAA+G,GAAAlG,EAAApE,GAAA,WAAAsK,EAAA/G,KAAAhB,OAAAtC,EAAAsD,KAAA+G,GAAAtK,EAAAsK,GAA+Q,OAA3K/G,MAAAma,oBAAA,MAAA1d,EAAA2d,iBAAA3d,EAAA2d,kBAAA,IAAA3d,EAAA4d,aAAA7J,GAAA3Q,gBAAA2Q,GAAA5Q,iBAA8HI,KAAAwX,qBAAAhH,GAAA5Q,iBAA6CI,KAEpB,QAAAsa,GAAA3Z,EAAAE,EAAApE,EAAAC,GAAqB,GAAAsD,KAAAua,UAAAjb,OAAA,CAA0B,GAAAyH,GAAA/G,KAAAua,UAAAzI,KAAgD,OAArB9R,MAAAzD,KAAAwK,EAAApG,EAAAE,EAAApE,EAAAC,GAAqBqK,EAAS,UAAA/G,MAAAW,EAAAE,EAAApE,EAAAC,GAChd,QAAA8d,GAAA7Z,GAAeA,YAAAX,OAAAyQ,EAAA,OAAkC9P,EAAA8Z,aAAe,GAAAza,KAAAua,UAAAjb,QAAAU,KAAAua,UAAAvY,KAAArB,GAAiD,QAAA+Z,GAAA/Z,GAAeA,EAAA4Z,aAAe5Z,EAAAga,UAAAL,EAAe3Z,EAAA+W,QAAA8C,EAAa,QAAAI,GAAAja,EAAAE,EAAApE,EAAAC,GAAqB,MAAAiW,GAAApW,KAAAyD,KAAAW,EAAAE,EAAApE,EAAAC,GAA2D,QAAAme,GAAAla,EAAAE,EAAApE,EAAAC,GAAqB,MAAAiW,GAAApW,KAAAyD,KAAAW,EAAAE,EAAApE,EAAAC,GAIhR,QAAAoe,GAAAna,EAAAE,GAAiB,OAAAF,GAAU,0BAAAoa,GAAAzO,QAAAzL,EAAAma,QAAiD,+BAAAna,EAAAma,OAAyC,4DAA+D,mBAAkB,QAAAC,GAAAta,GAA0B,MAAXA,KAAAua,OAAW,iBAAAva,IAAA,QAAAA,KAAAgG,KAAA,KAA4D,QAAAwU,GAAAxa,EAAAE,GAAiB,OAAAF,GAAU,8BAAAsa,GAAApa,EAAsC,+BAAAA,EAAAua,MAAA,MAA+CC,IAAA,EAAMC,GAAU,0BAAA3a,GAAAE,EAAA8F,KAAAhG,IAAA2a,IAAAD,GAAA,KAAA1a,CAAsD,sBACld,QAAA4a,GAAA5a,EAAAE,GAAiB,GAAA2a,GAAA,4BAAA7a,IAAA8a,IAAAX,EAAAna,EAAAE,IAAAF,EAAAiZ,IAAAlH,GAAAsH,MAAA,KAAAtH,GAAAoH,WAAA,KAAApH,GAAAmH,cAAA,KAAA2B,IAAA,EAAA7a,GAAA,IAA4H,QAAAA,GAAU,0BAA4B,wBAAAE,EAAA6a,SAAA7a,EAAA8a,QAAA9a,EAAA+a,UAAA/a,EAAA6a,SAAA7a,EAAA8a,OAAA,CAA8E,GAAA9a,EAAAgb,MAAA,EAAAhb,EAAAgb,KAAAvc,OAAA,MAAAuB,GAAAgb,IAAyC,IAAAhb,EAAAua,MAAA,MAAAhd,QAAAG,aAAAsC,EAAAua,OAA+C,WAAY,+BAAAU,IAAA,KAAAjb,EAAA8F,IAA+C,sBAEvO,QAAAoV,GAAApb,GAAe,GAAAA,EAAAqb,GAAArb,GAAA,CAAYsb,IAAA,mBAAAA,IAAAC,wBAAAzL,EAAA,MAAkE,IAAA5P,GAAAkX,GAAApX,EAAAmX,UAAsBmE,IAAAC,uBAAAvb,EAAAmX,UAAAnX,EAAA+K,KAAA7K,IAA+G,QAAAsb,GAAAxb,GAAeyb,GAAAC,MAAAra,KAAArB,GAAA0b,IAAA1b,GAAAyb,GAAAzb,EAC9Z,QAAA2b,KAAc,GAAAF,GAAA,CAAO,GAAAzb,GAAAyb,GAAAvb,EAAAwb,EAA+B,IAAjBA,GAAAD,GAAA,KAAWL,EAAApb,GAAME,EAAA,IAAAF,EAAA,EAAaA,EAAAE,EAAAvB,OAAWqB,IAAAob,EAAAlb,EAAAF,KAAkG,QAAA4b,GAAA5b,EAAAE,GAAiB,MAAAF,GAAAE,GAAsB,QAAA2b,GAAA7b,EAAAE,GAAiB,GAAA4b,GAAA,MAAAF,GAAA5b,EAAAE,EAAqB4b,KAAA,CAAM,KAAI,MAAAF,GAAA5b,EAAAE,GAAe,QAAQ4b,IAAA,EAAAH,KAC5R,QAAAI,IAAA/b,GAAe,GAAAE,GAAAF,KAAAgc,UAAAhc,EAAAgc,SAAA1U,aAA8C,iBAAApH,IAAA+b,GAAAjc,EAAA+K,MAAA,aAAA7K,EAAoD,QAAAgc,IAAAlc,GAAyG,MAA1FA,KAAA3B,QAAA2B,EAAAmc,YAAA9Z,OAAiCrC,EAAAoc,0BAAApc,IAAAoc,yBAAyD,IAAApc,EAAAqc,SAAArc,EAAA4X,WAAA5X,EAC1N,QAAAsc,IAAAtc,EAAAE,GAAiB,IAAAvE,GAAAod,WAAA7Y,KAAA,oBAAA0F,WAAA,QAA8D1F,GAAA,KAAAF,CAAS,IAAAlE,GAAAoE,IAAA0F,SAAkM,OAA9K9J,OAAA8J,SAAAqJ,cAAA,OAAAnT,EAAAygB,aAAArc,EAAA,WAA6DpE,EAAA,mBAAAA,GAAAoE,KAA+BpE,GAAA0gB,IAAA,UAAAxc,IAAAlE,EAAA8J,SAAA6W,eAAAC,WAAA,uBAAkF5gB,EAAS,QAAA6gB,IAAA3c,GAAe,GAAAE,GAAAF,EAAA+K,IAAa,QAAA/K,IAAAgc,WAAA,UAAAhc,EAAAsH,gBAAA,aAAApH,GAAA,UAAAA,GAC/T,QAAA0c,IAAA5c,GAAe,GAAAE,GAAAyc,GAAA3c,GAAA,kBAAAlE,EAAAK,OAAA0gB,yBAAA7c,EAAAa,YAAAjE,UAAAsD,GAAAnE,EAAA,GAAAiE,EAAAE,EAAqG,KAAAF,EAAAnD,eAAAqD,IAAA,mBAAApE,GAAAS,KAAA,mBAAAT,GAAA4N,IAAA,MAAAvN,QAAAC,eAAA4D,EAAAE,GAAgH5D,WAAAR,EAAAQ,WAAAD,cAAA,EAAAE,IAAA,WAAuD,MAAAT,GAAAS,IAAAX,KAAAyD,OAAwBqK,IAAA,SAAA1J,GAAiBjE,EAAA,GAAAiE,EAAOlE,EAAA4N,IAAA9N,KAAAyD,KAAAW,OAAuB8c,SAAA,WAAoB,MAAA/gB,IAASghB,SAAA,SAAA/c,GAAsBjE,EAAA,GAAAiE,GAAOgd,aAAA,WAAyBhd,EAAAid,cAAA,WAAqBjd,GAAAE,KAC1c,QAAAgd,IAAAld,GAAeA,EAAAid,gBAAAjd,EAAAid,cAAAL,GAAA5c,IAAyC,QAAAmd,IAAAnd,GAAe,IAAAA,EAAA,QAAe,IAAAE,GAAAF,EAAAid,aAAsB,KAAA/c,EAAA,QAAe,IAAApE,GAAAoE,EAAA4c,WAAmB/gB,EAAA,EAA2D,OAAlDiE,KAAAjE,EAAA4gB,GAAA3c,KAAAod,QAAA,eAAApd,EAAAgC,QAA8ChC,EAAAjE,KAAID,IAAAoE,EAAA6c,SAAA/c,IAAA,GACzM,QAAAqd,IAAArd,EAAAE,EAAApE,GAA8E,MAA3DkE,GAAAgS,EAAAgI,UAAAsD,GAAAC,OAAAvd,EAAAE,EAAApE,GAA+BkE,EAAA+K,KAAA,SAAgByQ,EAAA1f,GAAM4c,EAAA1Y,GAAMA,EAA6B,QAAAwd,IAAAxd,GAAeuX,EAAAvX,GAAMyX,GAAA,GAAO,QAAAgG,IAAAzd,GAA2B,GAAAmd,GAAZrF,EAAA9X,IAAY,MAAAA,GAAkB,QAAA0d,IAAA1d,EAAAE,GAAiB,iBAAAF,EAAA,MAAAE,GAAuH,QAAAyd,MAAcC,QAAAC,YAAA,mBAAAC,IAAAC,GAAAH,GAAA,MAAuD,QAAAE,IAAA9d,GAAe,UAAAA,EAAAge,cAAAP,GAAAM,MAAA/d,EAAAqd,GAAAU,GAAA/d,EAAAkc,GAAAlc,IAAA6b,EAAA2B,GAAAxd,IAChZ,QAAAie,IAAAje,EAAAE,EAAApE,GAAmB,aAAAkE,GAAA2d,KAAAC,GAAA1d,EAAA6d,GAAAjiB,EAAA8hB,GAAAM,YAAA,mBAAAJ,KAAA,YAAA9d,GAAA2d,KAA0F,QAAAQ,IAAAne,GAAe,0BAAAA,GAAA,aAAAA,GAAA,eAAAA,EAAA,MAAAyd,IAAAM,IAA4E,QAAAK,IAAApe,EAAAE,GAAiB,gBAAAF,EAAA,MAAAyd,IAAAvd,GAA+B,QAAAme,IAAAre,EAAAE,GAAiB,gBAAAF,GAAA,cAAAA,EAAA,MAAAyd,IAAAvd,GAEzO,QAAAoe,IAAAte,EAAAE,EAAApE,EAAAC,GAAqB,MAAAiW,GAAApW,KAAAyD,KAAAW,EAAAE,EAAApE,EAAAC,GAA+I,QAAAwiB,IAAAve,GAAe,GAAAE,GAAAb,KAAAia,WAAuB,OAAApZ,GAAAse,iBAAAte,EAAAse,iBAAAxe,QAAAye,GAAAze,OAAAE,EAAAF,GAAoE,QAAA0e,MAAc,MAAAH,IAAU,QAAAI,IAAA3e,EAAAE,EAAApE,EAAAC,GAAqB,MAAAiW,GAAApW,KAAAyD,KAAAW,EAAAE,EAAApE,EAAAC,GAGlB,QAAA6iB,IAAA5e,GAAwB,MAATA,KAAA+K,KAAS,iBAAA/K,KAAA,mBAAAA,KAAA6e,aAAA7e,EAAAhE,KAAA,KACjW,QAAA8iB,IAAA9e,GAAe,GAAAE,GAAAF,CAAQ,IAAAA,EAAA4Y,UAAA,KAAoB1Y,EAAA,QAAYA,IAAA,WAAe,CAAK,UAAAA,EAAA6e,WAAA,QAAgC,MAAK7e,EAAA,QAAY,GAAAA,IAAA,cAAAA,EAAA6e,WAAA,SAA+C,WAAA7e,EAAA2X,IAAA,IAAqB,QAAAmH,IAAAhf,GAAe,SAAAA,IAAAif,sBAAA,IAAAH,GAAA9e,GAA6C,QAAAkf,IAAAlf,GAAe,IAAA8e,GAAA9e,IAAA8P,EAAA,OAC3Q,QAAAqP,IAAAnf,GAAe,GAAAE,GAAAF,EAAA4Y,SAAkB,KAAA1Y,EAAA,MAAAA,GAAA4e,GAAA9e,GAAA,IAAAE,GAAA4P,EAAA,WAAA5P,EAAA,KAAAF,CAAwD,QAAAlE,GAAAkE,EAAAjE,EAAAmE,IAAiB,CAAE,GAAAkG,GAAAtK,EAAA,OAAAsU,EAAAhK,IAAAwS,UAAA,IAAuC,KAAAxS,IAAAgK,EAAA,KAAgB,IAAAhK,EAAAgZ,QAAAhP,EAAAgP,MAAA,CAAsB,OAAAnZ,GAAAG,EAAAgZ,MAAkBnZ,GAAE,CAAE,GAAAA,IAAAnK,EAAA,MAAAojB,IAAA9Y,GAAApG,CAAwB,IAAAiG,IAAAlK,EAAA,MAAAmjB,IAAA9Y,GAAAlG,CAAwB+F,KAAAoZ,QAAYvP,EAAA,OAAS,GAAAhU,EAAA,SAAAC,EAAA,OAAAD,EAAAsK,EAAArK,EAAAqU,MAAqC,CAAKnK,GAAA,CAAK,QAAAqK,GAAAlK,EAAAgZ,MAAkB9O,GAAE,CAAE,GAAAA,IAAAxU,EAAA,CAAUmK,GAAA,EAAKnK,EAAAsK,EAAIrK,EAAAqU,CAAI,OAAM,GAAAE,IAAAvU,EAAA,CAAUkK,GAAA,EAAKlK,EAAAqK,EAAItK,EAAAsU,CAAI,OAAME,IAAA+O,QAAY,IAAApZ,EAAA,CAAO,IAAAqK,EAAAF,EAAAgP,MAAc9O,GAAE,CAAE,GAAAA,IAAAxU,EAAA,CAAUmK,GAAA,EAAKnK,EAAAsU,EAAIrU,EAAAqK,CAAI,OAAM,GAAAkK,IAAAvU,EAAA,CAAUkK,GAAA,EAAKlK,EAAAqU,EAAItU,EAAAsK,CAAI,OAAMkK,IAAA+O,QAAYpZ,GAC9f6J,EAAA,QAAiBhU,EAAA8c,YAAA7c,GAAA+T,EAAA,OAA0D,MAA1B,KAAAhU,EAAA+b,KAAA/H,EAAA,OAA0BhU,EAAAqb,UAAAvG,UAAA9U,EAAAkE,EAAAE,EAAmC,QAAAof,IAAAtf,GAAuB,KAARA,EAAAmf,GAAAnf,IAAQ,WAAkB,QAAAE,GAAAF,IAAa,CAAE,OAAAE,EAAA2X,KAAA,IAAA3X,EAAA2X,IAAA,MAAA3X,EAAiC,IAAAA,EAAAkf,MAAAlf,EAAAkf,MAAA,OAAAlf,MAAAkf,UAAyC,CAAK,GAAAlf,IAAAF,EAAA,KAAe,OAAKE,EAAAmf,SAAW,CAAE,IAAAnf,EAAA,QAAAA,EAAA,SAAAF,EAAA,WAA6CE,KAAA,OAAcA,EAAAmf,QAAA,OAAAnf,EAAA,OAAgCA,IAAAmf,SAAa,YAC9X,QAAAE,IAAAvf,GAAuB,KAARA,EAAAmf,GAAAnf,IAAQ,WAAkB,QAAAE,GAAAF,IAAa,CAAE,OAAAE,EAAA2X,KAAA,IAAA3X,EAAA2X,IAAA,MAAA3X,EAAiC,IAAAA,EAAAkf,OAAA,IAAAlf,EAAA2X,IAAA3X,EAAAkf,MAAA,OAAAlf,MAAAkf,UAAoD,CAAK,GAAAlf,IAAAF,EAAA,KAAe,OAAKE,EAAAmf,SAAW,CAAE,IAAAnf,EAAA,QAAAA,EAAA,SAAAF,EAAA,WAA6CE,KAAA,OAAcA,EAAAmf,QAAA,OAAAnf,EAAA,OAAgCA,IAAAmf,SAAa,YAC3R,QAAAG,IAAAxf,GAAe,GAAAE,GAAAF,EAAAyf,UAAmB,IAAG,IAAAvf,EAAA,CAAOF,EAAA0f,UAAAre,KAAAnB,EAAoB,OAAM,GAAApE,EAAM,KAAAA,EAAAoE,EAAQpE,EAAA,QAAYA,IAAA,MAA0D,MAA3CA,EAAA,IAAAA,EAAA+b,IAAA,KAAA/b,EAAAqb,UAAAwI,eAA2C,KAAY3f,GAAA0f,UAAAre,KAAAnB,GAAoBA,EAAAyX,EAAA7b,SAAQoE,EAAS,KAAApE,EAAA,EAAQA,EAAAkE,EAAA0f,UAAA/gB,OAAqB7C,IAAAoE,EAAAF,EAAA0f,UAAA5jB,GAAA8jB,GAAA5f,EAAA6f,aAAA3f,EAAAF,EAAAsZ,YAAA4C,GAAAlc,EAAAsZ,cAA8F,QAAAwG,IAAA9f,GAAe+f,KAAA/f,EAAO,QAAAiT,IAAAjT,EAAAE,EAAApE,GAAkB,MAAAA,GAAAkkB,GAAAC,OAAAnkB,EAAAoE,EAAAggB,GAAAre,KAAA,KAAA7B,IAAA,KAA6C,QAAAmgB,IAAAngB,EAAAE,EAAApE,GAAmB,MAAAA,GAAAkkB,GAAAI,QAAAtkB,EAAAoE,EAAAggB,GAAAre,KAAA,KAAA7B,IAAA,KAC9a,QAAAkgB,IAAAlgB,EAAAE,GAAiB,GAAA6f,GAAA,CAAO,GAAAjkB,GAAAogB,GAAAhc,EAA2E,IAA/DpE,EAAA6b,EAAA7b,GAAQ,OAAAA,GAAA,iBAAAA,GAAA+b,KAAA,IAAAiH,GAAAhjB,OAAA,MAAuDukB,GAAA1hB,OAAA,CAAc,GAAA5C,GAAAskB,GAAAlP,KAAepV,GAAA8jB,aAAA7f,EAAiBjE,EAAAud,YAAApZ,EAAgBnE,EAAA0jB,WAAA3jB,EAAekE,EAAAjE,MAAIiE,IAAQ6f,aAAA7f,EAAAsZ,YAAApZ,EAAAuf,WAAA3jB,EAAA4jB,aAAwD,KAAI7D,EAAA2D,GAAAxf,GAAS,QAAQA,EAAA6f,aAAA,KAAA7f,EAAAsZ,YAAA,KAAAtZ,EAAAyf,WAAA,KAAAzf,EAAA0f,UAAA/gB,OAAA,KAAA0hB,GAAA1hB,QAAA0hB,GAAAhf,KAAArB,KAC3C,QAAAsgB,IAAAtgB,EAAAE,GAAiB,GAAApE,KAAsI,OAA7HA,GAAAkE,EAAAsH,eAAApH,EAAAoH,cAAmCxL,EAAA,SAAAkE,GAAA,SAAAE,EAAyBpE,EAAA,MAAAkE,GAAA,MAAAE,EAAmBpE,EAAA,KAAAkE,GAAA,KAAAE,EAAiBpE,EAAA,IAAAkE,GAAA,IAAAE,EAAAoH,cAA6BxL,EAErX,QAAAykB,IAAAvgB,GAAe,GAAAwgB,GAAAxgB,GAAA,MAAAwgB,IAAAxgB,EAAsB,KAAAygB,GAAAzgB,GAAA,MAAAA,EAAmB,IAAAlE,GAAAoE,EAAAugB,GAAAzgB,EAAc,KAAAlE,IAAAoE,GAAA,GAAAA,EAAArD,eAAAf,QAAA4kB,IAAA,MAAAF,IAAAxgB,GAAAE,EAAApE,EAA6D,UAIkF,QAAA6kB,IAAA3gB,GAAqF,MAAtE7D,QAAAS,UAAAC,eAAAjB,KAAAoE,EAAA4gB,MAAA5gB,EAAA4gB,IAAAC,KAAAC,GAAA9gB,EAAA4gB,SAAsEE,GAAA9gB,EAAA4gB,KAAiB,QAAAG,IAAA/gB,GAAe,KAAKA,KAAAghB,YAAgBhhB,IAAAghB,UAAgB,OAAAhhB,GAC/W,QAAAihB,IAAAjhB,EAAAE,GAAiB,GAAApE,GAAAilB,GAAA/gB,EAAYA,GAAA,CAAI,QAAAjE,GAAUD,GAAE,CAAE,OAAAA,EAAAugB,SAAA,CAA4C,GAAzBtgB,EAAAiE,EAAAlE,EAAAolB,YAAAviB,OAAyBqB,GAAAE,GAAAnE,GAAAmE,EAAA,OAAqByF,KAAA7J,EAAAqlB,OAAAjhB,EAAAF,EAAmBA,GAAAjE,EAAIiE,EAAA,CAAG,KAAKlE,GAAE,CAAE,GAAAA,EAAAslB,YAAA,CAAkBtlB,IAAAslB,WAAgB,MAAAphB,GAAQlE,IAAA8b,WAAe9b,MAAA,GAASA,EAAAilB,GAAAjlB,IAAS,QAAAulB,IAAArhB,GAAe,GAAAE,GAAAF,KAAAgc,UAAAhc,EAAAgc,SAAA1U,aAA8C,OAAApH,KAAA,UAAAA,GAAA,SAAAF,EAAA+K,MAAA,aAAA7K,GAAA,SAAAF,EAAAshB,iBAE3R,QAAAC,IAAAvhB,EAAAE,GAAiB,GAAAshB,IAAA,MAAAC,SAAAC,KAAA,WAAuC,IAAA5lB,GAAA2lB,EAAkP,OAAzO,kBAAA3lB,IAAAulB,GAAAvlB,MAA+B6lB,MAAA7lB,EAAA8lB,eAAAC,IAAA/lB,EAAAgmB,cAA0Czf,OAAA0f,cAAAjmB,EAAAuG,OAAA0f,eAAAjmB,GAAiDkmB,WAAAlmB,EAAAkmB,WAAAC,aAAAnmB,EAAAmmB,aAAAC,UAAApmB,EAAAomB,UAAAC,YAAArmB,EAAAqmB,cAAoGrmB,MAAA,GAAWsmB,IAAAC,GAAAD,GAAAtmB,GAAA,MAAAsmB,GAAAtmB,EAAAkE,EAAAgS,EAAAgI,UAAAsI,GAAAC,OAAAC,GAAAxiB,EAAAE,GAAAF,EAAA+K,KAAA,SAAA/K,EAAA3B,OAAAojB,GAAA/I,EAAA1Y,MAE3O,QAAAyiB,IAAAziB,EAAAE,EAAApE,EAAAC,GAAqB,MAAAiW,GAAApW,KAAAyD,KAAAW,EAAAE,EAAApE,EAAAC,GAAwG,QAAA2mB,IAAA1iB,EAAAE,EAAApE,EAAAC,GAAqB,MAAAiW,GAAApW,KAAAyD,KAAAW,EAAAE,EAAApE,EAAAC,GAA2I,QAAA4mB,IAAA3iB,EAAAE,EAAApE,EAAAC,GAAqB,MAAAiW,GAAApW,KAAAyD,KAAAW,EAAAE,EAAApE,EAAAC,GACjX,QAAA6mB,IAAA5iB,GAAe,GAAAE,GAAAF,EAAAqa,OAAwE,OAAxD,YAAAra,GAAA,KAAAA,IAAA6iB,WAAA,KAAA3iB,IAAAF,EAAA,IAAAA,EAAAE,EAAwD,IAAAF,GAAA,KAAAA,IAAA,EAE+B,QAAA8iB,IAAA9iB,EAAAE,EAAApE,EAAAC,GAAqB,MAAAiW,GAAApW,KAAAyD,KAAAW,EAAAE,EAAApE,EAAAC,GAE1E,QAAAgnB,IAAA/iB,EAAAE,EAAApE,EAAAC,GAAqB,MAAAiW,GAAApW,KAAAyD,KAAAW,EAAAE,EAAApE,EAAAC,GAAoE,QAAAinB,IAAAhjB,EAAAE,EAAApE,EAAAC,GAAqB,MAAAiW,GAAApW,KAAAyD,KAAAW,EAAAE,EAAApE,EAAAC,GAA8K,QAAAknB,IAAAjjB,EAAAE,EAAApE,EAAAC,GAAqB,MAAAiW,GAAApW,KAAAyD,KAAAW,EAAAE,EAAApE,EAAAC,GAClX,QAAAmnB,IAAAljB,EAAAE,EAAApE,EAAAC,GAAqB,MAAAiW,GAAApW,KAAAyD,KAAAW,EAAAE,EAAApE,EAAAC,GAKmO,QAAAgY,IAAA/T,GAAc,EAAAmjB,KAAAnjB,EAAA4Q,QAAAwS,GAAAD,IAAAC,GAAAD,IAAA,KAAAA,MAA0C,QAAAjP,IAAAlU,EAAAE,GAAgBijB,KAAKC,GAAAD,IAAAnjB,EAAA4Q,QAAiB5Q,EAAA4Q,QAAA1Q,EAA2D,QAAAmjB,IAAArjB,GAAe,MAAAsjB,IAAAtjB,GAAAujB,GAAAC,GAAA5S,QACha,QAAA6S,IAAAzjB,EAAAE,GAAiB,GAAApE,GAAAkE,EAAA+K,KAAA2Y,YAA0B,KAAA5nB,EAAA,MAAA6W,GAAe,IAAA5W,GAAAiE,EAAAmX,SAAkB,IAAApb,KAAA4nB,8CAAAzjB,EAAA,MAAAnE,GAAA6nB,yCAA2G,IAAQxT,GAARhK,IAAW,KAAAgK,IAAAtU,GAAAsK,EAAAgK,GAAAlQ,EAAAkQ,EAAsI,OAAjHrU,KAAAiE,IAAAmX,UAAAnX,EAAA2jB,4CAAAzjB,EAAAF,EAAA4jB,0CAAAxd,GAAiHA,EAAS,QAAAkd,IAAAtjB,GAAe,WAAAA,EAAA6X,KAAA,MAAA7X,EAAA+K,KAAA8Y,kBAAiD,QAAAC,IAAA9jB,GAAesjB,GAAAtjB,KAAA+T,GAAAgQ,GAAA/jB,GAAA+T,GAAAyP,GAAAxjB,IACha,QAAAgkB,IAAAhkB,EAAAE,EAAApE,GAAmB,MAAA0nB,GAAAS,QAAAnU,EAAA,OAAgCoE,GAAAsP,GAAAtjB,EAAAF,GAAUkU,GAAA6P,GAAAjoB,EAAAkE,GAAS,QAAAkkB,IAAAlkB,EAAAE,GAAiB,GAAApE,GAAAkE,EAAAmX,UAAApb,EAAAiE,EAAA+K,KAAA8Y,iBAA6C,uBAAA/nB,GAAAqoB,gBAAA,MAAAjkB,EAAkDpE,KAAAqoB,iBAAsB,QAAA/d,KAAAtK,GAAAsK,IAAArK,IAAA+T,EAAA,MAAA8O,GAAA5e,IAAA,UAAAoG,EAAyD,OAAAwJ,OAAW1P,EAAApE,GAAM,QAAAsoB,IAAApkB,GAAe,IAAAsjB,GAAAtjB,GAAA,QAAmB,IAAAE,GAAAF,EAAAmX,SAA+G,OAA7FjX,QAAAmkB,2CAAA1R,GAAoD4Q,GAAAC,GAAA5S,QAAcsD,GAAAsP,GAAAtjB,EAAAF,GAAUkU,GAAA6P,MAAAnT,QAAA5Q,IAAiB,EACva,QAAAskB,IAAAtkB,EAAAE,GAAiB,GAAApE,GAAAkE,EAAAmX,SAAoC,IAAlBrb,GAAAgU,EAAA,OAAkB5P,EAAA,CAAM,GAAAnE,GAAAmoB,GAAAlkB,EAAAujB,GAAeznB,GAAAuoB,0CAAAtoB,EAA8CgY,GAAAgQ,GAAA/jB,GAAO+T,GAAAyP,GAAAxjB,GAAQkU,GAAAsP,GAAAznB,EAAAiE,OAAU+T,IAAAgQ,GAAA/jB,EAAYkU,IAAA6P,GAAA7jB,EAAAF,GAC7J,QAAAukB,IAAAvkB,EAAAE,EAAApE,GAAkBuD,KAAAwY,IAAA7X,EAAWX,KAAAT,IAAAsB,EAAWb,KAAA8X,UAAA9X,KAAA0L,KAAA,KAA8B1L,KAAAggB,QAAAhgB,KAAA+f,MAAA/f,KAAA,YAA4CA,KAAAoF,MAAA,EAAapF,KAAAmlB,cAAAnlB,KAAAolB,YAAAplB,KAAAqlB,cAAArlB,KAAAslB,aAAAtlB,KAAA4Q,IAAA,KAAuF5Q,KAAAulB,mBAAA9oB,EAA0BuD,KAAA0f,UAAA,EAAiB1f,KAAAwlB,WAAAxlB,KAAAylB,YAAAzlB,KAAA0lB,WAAA,KAAsD1lB,KAAA2lB,eAAA,EAAsB3lB,KAAAuZ,UAAA,KAC7U,QAAAqM,IAAAjlB,EAAAE,EAAApE,GAAmB,GAAAC,GAAAiE,EAAA4Y,SAAgZ,OAA9X,QAAA7c,KAAA,GAAAwoB,IAAAvkB,EAAA6X,IAAA7X,EAAApB,IAAAoB,EAAA4kB,oBAAA7oB,EAAAgP,KAAA/K,EAAA+K,KAAAhP,EAAAob,UAAAnX,EAAAmX,UAAApb,EAAA6c,UAAA5Y,IAAA4Y,UAAA7c,MAAAgjB,UAAA,EAAAhjB,EAAAgpB,WAAA,KAAAhpB,EAAA+oB,YAAA,KAAA/oB,EAAA8oB,WAAA,MAA8L9oB,EAAAipB,eAAAlpB,EAAmBC,EAAA4oB,aAAAzkB,EAAiBnE,EAAAqjB,MAAApf,EAAAof,MAAgBrjB,EAAA2oB,cAAA1kB,EAAA0kB,cAAgC3oB,EAAAyoB,cAAAxkB,EAAAwkB,cAAgCzoB,EAAA0oB,YAAAzkB,EAAAykB,YAA4B1oB,EAAAsjB,QAAArf,EAAAqf,QAAoBtjB,EAAA0I,MAAAzE,EAAAyE,MAAgB1I,EAAAkU,IAAAjQ,EAAAiQ,IAAYlU,EACna,QAAAmpB,IAAAllB,EAAAE,EAAApE,GAAmB,GAAAC,OAAA,GAAAqK,EAAApG,EAAA+K,KAAAqF,EAAApQ,EAAApB,GAAuW,OAAzU,mBAAAwH,IAAArK,EAAAqK,EAAAxJ,WAAAwJ,EAAAxJ,UAAA4V,iBAAA,GAAA+R,IAAA,EAAAnU,EAAAlQ,GAAA,GAAAqkB,IAAA,EAAAnU,EAAAlQ,GAAAnE,EAAAgP,KAAA3E,EAAArK,EAAA4oB,aAAA3kB,EAAAuP,OAAA,iBAAAnJ,IAAArK,EAAA,GAAAwoB,IAAA,EAAAnU,EAAAlQ,GAAAnE,EAAAgP,KAAA3E,EAAArK,EAAA4oB,aAAA3kB,EAAAuP,OAAA,iBAAAnJ,IAAA,OAAAA,GAAA,iBAAAA,GAAAyR,KAAA9b,EAAAqK,EAAArK,EAAA4oB,aAAA3kB,EAAAuP,OAAAO,EAAA,YAAA1J,aAAA,IAAsTrK,EAAAipB,eAAAlpB,EAAmBC,EAAS,QAAAopB,IAAAnlB,EAAAE,EAAApE,EAAAC,GAAyE,MAApDmE,GAAA,GAAAqkB,IAAA,GAAAxoB,EAAAmE,GAAgBA,EAAAykB,aAAA3kB,EAAiBE,EAAA8kB,eAAAlpB,EAAmBoE,EAC5c,QAAAklB,IAAAplB,EAAAE,EAAApE,GAAyE,MAAtDoE,GAAA,GAAAqkB,IAAA,OAAArkB,GAAkBA,EAAAykB,aAAA3kB,EAAiBE,EAAA8kB,eAAAlpB,EAAmBoE,EAAS,QAAAmlB,IAAArlB,EAAAE,EAAApE,GAA2F,MAAxEoE,GAAA,GAAAqkB,IAAA,EAAAvkB,EAAApB,IAAAsB,GAAmBA,EAAA6K,KAAA/K,EAAAslB,QAAiBplB,EAAAykB,aAAA3kB,EAAiBE,EAAA8kB,eAAAlpB,EAAmBoE,EAAS,QAAAqlB,IAAAvlB,EAAAE,EAAApE,GAAwD,MAArCkE,GAAA,GAAAukB,IAAA,OAAArkB,GAAkBF,EAAAglB,eAAAlpB,EAAmBkE,EAAS,QAAAwlB,IAAAxlB,EAAAE,EAAApE,GAAwL,MAArKoE,GAAA,GAAAqkB,IAAA,EAAAvkB,EAAApB,IAAAsB,GAAmBA,EAAAykB,aAAA3kB,EAAAqQ,aAA8BnQ,EAAA8kB,eAAAlpB,EAAmBoE,EAAAiX,WAAawI,cAAA3f,EAAA2f,cAAA8F,gBAAA,KAAAhJ,eAAAzc,EAAAyc,gBAAoFvc,EAC/a,QAAAwlB,IAAA1lB,GAAe,gBAAAE,GAAmB,IAAI,MAAAF,GAAAE,GAAY,MAAApE,MAAY,QAAA6pB,IAAA3lB,GAAe,uBAAAoU,gCAAA,QAAgE,IAAAlU,GAAAkU,8BAAqC,IAAAlU,EAAA0lB,aAAA1lB,EAAA2lB,cAAA,QAA2C,KAAI,GAAA/pB,GAAAoE,EAAA4lB,OAAA9lB,EAAkB+lB,IAAAL,GAAA,SAAA1lB,GAAkB,MAAAE,GAAA8lB,kBAAAlqB,EAAAkE,KAAkCimB,GAAAP,GAAA,SAAA1lB,GAAkB,MAAAE,GAAAgmB,qBAAApqB,EAAAkE,KAAqC,MAAAjE,IAAU,SAAS,QAAAoqB,IAAAnmB,GAAe,mBAAA+lB,QAAA/lB,GAA8B,QAAAomB,IAAApmB,GAAe,mBAAAimB,QAAAjmB,GAC7a,QAAAqmB,IAAArmB,GAAe,OAAOsmB,UAAAtmB,EAAAglB,eAAA,EAAAuB,MAAA,KAAAC,KAAA,KAAAC,aAAA,KAAAC,gBAAA,EAAAC,eAAA,GAAwG,QAAAC,IAAA5mB,EAAAE,GAAiB,OAAAF,EAAAwmB,KAAAxmB,EAAAumB,MAAAvmB,EAAAwmB,KAAAtmB,GAAAF,EAAAwmB,KAAA7e,KAAAzH,EAAAF,EAAAwmB,KAAAtmB,IAAwD,IAAAF,EAAAglB,gBAAAhlB,EAAAglB,eAAA9kB,EAAA8kB,kBAAAhlB,EAAAglB,eAAA9kB,EAAA8kB,gBACvM,QAAA6B,IAAA7mB,EAAAE,GAAiB,GAAApE,GAAAkE,EAAA4Y,UAAA7c,EAAAiE,EAAAykB,WAAkC,QAAA1oB,MAAAiE,EAAAykB,YAAA4B,GAAA,OAAqC,OAAAvqB,EAAA,QAAAkE,EAAAlE,EAAA2oB,eAAAzkB,EAAAlE,EAAA2oB,YAAA4B,GAAA,OAAArmB,EAAA,KAAuEA,MAAAjE,EAAAiE,EAAA,KAAe,OAAAA,EAAA4mB,GAAA7qB,EAAAmE,GAAA,OAAAnE,EAAAyqB,MAAA,OAAAxmB,EAAAwmB,MAAAI,GAAA7qB,EAAAmE,GAAA0mB,GAAA5mB,EAAAE,KAAA0mB,GAAA7qB,EAAAmE,GAAAF,EAAAwmB,KAAAtmB,GAAmF,QAAA4mB,IAAA9mB,EAAAE,EAAApE,EAAAC,GAAsC,MAAjBiE,KAAA+mB,aAAiB,mBAAA/mB,KAAApE,KAAAsE,EAAApE,EAAAC,GAAAiE,EACvS,QAAAgnB,IAAAhnB,EAAAE,EAAApE,EAAAC,EAAAqK,EAAAgK,GAAyB,OAAApQ,KAAAykB,cAAA3oB,MAAAoE,EAAAukB,aAA+C6B,UAAAxqB,EAAAwqB,UAAAtB,eAAAlpB,EAAAkpB,eAAAuB,MAAAzqB,EAAAyqB,MAAAC,KAAA1qB,EAAA0qB,KAAAG,cAAA7qB,EAAA6qB,cAAAF,aAAA,KAAAC,gBAAA,IAAoJ5qB,EAAAkpB,eAAA,EAAmBlpB,EAAA6qB,cAAA3mB,EAAAlE,EAAAwqB,WAAAtmB,EAAAlE,EAAAwqB,UAAApmB,EAAAskB,cAAA1oB,EAAA6qB,eAAA,EAAiF,QAAA1gB,IAAA,EAAAqK,EAAAxU,EAAAyqB,MAAAvW,GAAA,EAA4B,OAAAM,GAAS,CAAE,GAAA4B,GAAA5B,EAAA0U,cAAuB,IAAA9S,EAAA9B,EAAA,CAAQ,GAAAuB,GAAA7V,EAAAkpB,gBAAuB,IAAArT,KAAAO,KAAApW,EAAAkpB,eAAA9S,GAAiClC,OAAA,EAAAlU,EAAAwqB,UAAAtmB,OAA6BgQ,KAAAlU,EAAAyqB,MAAAjW,EAAA3I,KAAA,OAC3d7L,EAAAyqB,QAAAzqB,EAAA0qB,KAAA,OAAwBlW,EAAA2W,WAAAjnB,EAAA8mB,GAAAxW,EAAAvU,EAAAiE,EAAAoG,GAAAH,GAAA,IAAkCiM,EAAA4U,GAAAxW,EAAAvU,EAAAiE,EAAAoG,MAAApG,EAAAiG,EAAA2J,MAA8B5P,EAAAkS,GAAAtC,GAAA5P,EAAAkS,GAAAjM,GAAA,GAAkBqK,EAAA4W,WAAAprB,EAAA4qB,gBAAA,GAAkC,OAAApW,EAAAvL,WAAAmN,EAAApW,EAAA2qB,aAAA,OAAAvU,MAAApW,EAAA2qB,iBAAAvU,EAAA7Q,KAAAiP,GAAgFA,KAAA3I,KAAyH,MAAhH,QAAA7L,EAAA2qB,aAAAvmB,EAAA6e,WAAA,UAAAjjB,EAAAyqB,OAAAzqB,EAAA4qB,iBAAAxmB,EAAAukB,YAAA,MAA6FzU,IAAAlU,EAAAwqB,UAAAtmB,GAAmBA,EACrV,QAAAmnB,IAAAnnB,EAAAE,GAAiB,GAAApE,GAAAkE,EAAAymB,YAAqB,WAAA3qB,EAAA,IAAAkE,EAAAymB,aAAA,KAAAzmB,EAAA,EAAwCA,EAAAlE,EAAA6C,OAAWqB,IAAA,CAAK,GAAAjE,GAAAD,EAAAkE,GAAAoG,EAAArK,EAAAgJ,QAAwBhJ,GAAAgJ,SAAA,KAAgB,mBAAAqB,IAAA0J,EAAA,MAAA1J,GAAwCA,EAAAxK,KAAAsE,IAC9K,QAAAknB,IAAApnB,EAAAE,EAAApE,EAAAC,GAAqB,QAAAqK,GAAApG,EAAAE,GAAgBA,EAAAwP,QAAAU,EAAYpQ,EAAAmX,UAAAjX,EAAcA,EAAA+e,oBAAAjf,EAAwB,GAAAoQ,IAAOgC,UAAA4M,GAAAzM,gBAAA,SAAAzW,EAAAC,EAAAqK,GAA6CtK,IAAAmjB,oBAAwB7Y,MAAA,KAAAA,EAAA,KAAAA,CAAoB,IAAAH,GAAA/F,EAAApE,EAAW+qB,IAAA/qB,GAAMkpB,eAAA/e,EAAA8gB,aAAAhrB,EAAAgJ,SAAAqB,EAAA6gB,WAAA,EAAAC,UAAA,EAAAG,aAAA,KAAA1f,KAAA,OAAkG3H,EAAAlE,EAAAmK,IAAOqM,oBAAA,SAAAxW,EAAAC,EAAAqK,GAAqCtK,IAAAmjB,oBAAwB7Y,MAAA,KAAAA,EAAA,KAAAA,CAAoB,IAAAH,GAAA/F,EAAApE,EAAW+qB,IAAA/qB,GAAMkpB,eAAA/e,EAAA8gB,aAAAhrB,EAAAgJ,SAAAqB,EAAA6gB,WAAA,EAAAC,UAAA,EAAAG,aAAA,KAAA1f,KAAA,OACnZ3H,EAAAlE,EAAAmK,IAAOoM,mBAAA,SAAAvW,EAAAC,GAAkCD,IAAAmjB,oBAAwBljB,MAAA,KAAAA,EAAA,KAAAA,CAAoB,IAAAqK,GAAAlG,EAAApE,EAAW+qB,IAAA/qB,GAAMkpB,eAAA5e,EAAA2gB,aAAA,KAAAhiB,SAAAhJ,EAAAkrB,WAAA,EAAAC,UAAA,EAAAG,aAAA,KAAA1f,KAAA,OAAqG3H,EAAAlE,EAAAsK,IAAS,QAAOkhB,mBAAAlhB,EAAAmhB,uBAAA,SAAAvnB,EAAAE,GAA0D,GAAApE,GAAAkE,EAAA+K,KAAAhP,EAAAsnB,GAAArjB,GAAAoQ,EAAA,IAAApQ,EAAA6X,KAAA,MAAA7X,EAAA+K,KAAA2Y,aAAAzd,EAAAmK,EAAAqT,GAAAzjB,EAAAjE,GAAA4W,EAA+M,OAArIzS,GAAA,GAAApE,GAAAoE,EAAA+F,GAAaG,EAAApG,EAAAE,GAAOkQ,IAAApQ,IAAAmX,UAAAnX,EAAA2jB,4CAAA5nB,EAAAiE,EAAA4jB,0CAAA3d,GAAiH/F,GAASsnB,mBAAA,SAAAxnB,EAC7eE,GAAG,GAAApE,GAAAkE,EAAA4Y,UAAA7c,EAAAiE,EAAAmX,UAAA/Q,EAAArK,EAAA0rB,OAAA,KAAAxhB,EAAAjG,EAAA2kB,YAAiE1e,IAAA6J,EAAA,MAAkB,IAAAQ,GAAA+S,GAAArjB,EAAYjE,GAAAwT,MAAAtJ,EAAUlK,EAAA0rB,MAAAznB,EAAAwkB,cAAApe,EAA0BrK,EAAA0T,KAAAkD,GAAS5W,EAAAyT,QAAAiU,GAAAzjB,EAAAsQ,GAAkB,MAAAtQ,EAAA+K,MAAA,MAAA/K,EAAA+K,KAAAnO,YAAA,IAAAoD,EAAA+K,KAAAnO,UAAAkW,iCAAA9S,EAAA4kB,oBAAA,GAAsH,mBAAA7oB,GAAA2rB,qBAAAthB,EAAArK,EAAA0rB,MAAA1rB,EAAA2rB,qBAAAthB,IAAArK,EAAA0rB,OAAArX,EAAAkC,oBAAAvW,IAAA0rB,MAAA,cAAArhB,EAAApG,EAAAykB,eAAA1oB,EAAA0rB,MAAAT,GAAAlrB,EAAAkE,EAAAoG,EAAArK,EAAAkK,EAAA/F,KAAoL,mBAAAnE,GAAA4rB,oBAAA3nB,EAAA+e,WAC3c,IAAG6I,oBAAA,SAAA5nB,EAAAE,EAAAkG,GAAqC,GAAAH,GAAA/F,EAAAiX,SAAkBlR,GAAAsJ,MAAArP,EAAAwkB,cAAwBze,EAAAwhB,MAAAvnB,EAAAskB,aAAwB,IAAAlU,GAAApQ,EAAAwkB,cAAA1U,EAAA9P,EAAAykB,YAAuC3U,IAAA,OAAAA,EAAAM,IAAAR,EAAA,MAAiC,IAAA4B,GAAAzL,EAAAuJ,QAAAG,EAAA0T,GAAAnjB,EAAwQ,IAAhPyP,EAAA8T,GAAAvjB,EAAAyP,GAAU,mBAAA1J,GAAA4hB,2BAAAvX,IAAAN,GAAA0B,IAAA/B,IAAA+B,EAAAzL,EAAAwhB,MAAAxhB,EAAA4hB,0BAAA7X,EAAAL,GAAA1J,EAAAwhB,QAAA/V,GAAAtB,EAAAkC,oBAAArM,IAAAwhB,MAAA,OAA+J/V,EAAAxR,EAAAskB,cAAkBpe,EAAA,OAAAlG,EAAAukB,YAAAuC,GAAAhnB,EAAAE,IAAAukB,YAAAxe,EAAA+J,EAAA5J,GAAAsL,IAAqDpB,IAAAN,GAAA0B,IAAAtL,GAAA2d,GAAAnT,SAAA,OAAA1Q,EAAAukB,aAAAvkB,EAAAukB,YAAAiC,gBAAA,yBAC1bzgB,GAAA6hB,oBAAAxX,IAAAtQ,EAAA0kB,eAAAhT,IAAA1R,EAAAwkB,gBAAAtkB,EAAA6e,WAAA,KAA2F,IAAApO,GAAAX,CAAQ,WAAAM,GAAA,OAAApQ,EAAAukB,aAAAvkB,EAAAukB,YAAAiC,eAAA/V,GAAA,MAAqE,CAAK,GAAAR,GAAAjQ,EAAAiX,UAAAlF,EAAA/R,EAAA6K,IAA2B4F,GAAA,mBAAAR,GAAA4X,sBAAA5X,EAAA4X,sBAAApX,EAAAvK,EAAAuJ,IAAAsC,EAAArV,YAAAqV,EAAArV,UAAAgW,wBAAAyP,GAAA/R,EAAAK,KAAA0R,GAAA3Q,EAAAtL,IAC9F,MAD+OuK,IAAA,mBAAA1K,GAAA+hB,qBAAA/hB,EAAA+hB,oBAAAhY,EAAA5J,EAAAuJ,GAAA,mBAAA1J,GAAA6hB,qBAAA5nB,EAAA6e,WAAA,wBAAA9Y,GAAA6hB,oBACzVxX,IAAAtQ,EAAA0kB,eAAAhT,IAAA1R,EAAAwkB,gBAAAtkB,EAAA6e,WAAA,GAAAjjB,EAAAoE,EAAA8P,GAAAjU,EAAAmE,EAAAkG,IAA0EH,EAAAsJ,MAAAS,EAAU/J,EAAAwhB,MAAArhB,EAAUH,EAAAuJ,QAAAG,EAAYgB,IAC1G,QAAAsX,IAAAjoB,GAAe,cAAAA,GAAA,oBAAAA,GAAA,MAAgDA,EAAAkoB,IAAAloB,EAAAkoB,KAAAloB,EAAA,cAA6B,mBAAAA,KAAA,MAC5F,QAAAmoB,IAAAnoB,EAAAE,GAAiB,GAAApE,GAAAoE,EAAA+P,GAAY,WAAAnU,GAAA,mBAAAA,GAAA,CAAoC,GAAAoE,EAAAwQ,OAAA,CAAaxQ,IAAAwQ,MAAW,IAAA3U,OAAA,EAAamE,KAAA,IAAAA,EAAA2X,KAAA/H,EAAA,OAAA/T,EAAAmE,EAAAiX,WAA6Cpb,GAAA+T,EAAA,MAAAhU,EAAoB,IAAAsK,GAAA,GAAAtK,CAAW,eAAAkE,GAAA,OAAAA,EAAAiQ,KAAAjQ,EAAAiQ,IAAAmY,aAAAhiB,EAAApG,EAAAiQ,KAA6DjQ,EAAA,SAAAA,GAAc,GAAAE,GAAAnE,EAAA0T,OAAAkD,GAAA5W,EAAA0T,QAA0B1T,EAAA0T,IAAQ,QAAAzP,QAAAE,GAAAkG,GAAAlG,EAAAkG,GAAApG,GAA6BA,EAAAooB,WAAAhiB,EAAepG,GAAS,iBAAAlE,IAAAgU,EAAA,OAAoC5P,EAAAwQ,QAAAZ,EAAA,MAAAhU,GAA2B,MAAAA,GACnZ,QAAAusB,IAAAroB,EAAAE,GAAiB,aAAAF,EAAA+K,MAAA+E,EAAA,yBAAA3T,OAAAS,UAAA4N,SAAA5O,KAAAsE,GAAA,qBAAqG/D,OAAAgC,KAAA+B,GAAApC,KAAA,UAA8BoC,EAAA,IACpJ,QAAAooB,IAAAtoB,GAAe,QAAAE,KAAApE,GAAgB,GAAAkE,EAAA,CAAM,GAAAjE,GAAAmE,EAAA2kB,UAAmB,QAAA9oB,KAAAgpB,WAAAjpB,EAAAoE,EAAA2kB,WAAA/oB,GAAAoE,EAAA4kB,YAAA5kB,EAAA2kB,WAAA/oB,EAAsEA,EAAAipB,WAAA,KAAkBjpB,EAAAijB,UAAA,GAAe,QAAAjjB,KAAAC,GAAgB,IAAAiE,EAAA,WAAkB,MAAK,OAAAjE,GAASmE,EAAApE,EAAAC,OAAAsjB,OAAoB,aAAY,QAAAtjB,GAAAiE,EAAAE,GAAgB,IAAAF,EAAA,GAAAuoB,KAAc,OAAAroB,GAAS,OAAAA,EAAAtB,IAAAoB,EAAA0J,IAAAxJ,EAAAtB,IAAAsB,GAAAF,EAAA0J,IAAAxJ,EAAAuE,MAAAvE,OAAAmf,OAA0D,OAAArf,GAAS,QAAAoG,GAAApG,EAAAE,EAAApE,GAAuD,MAArCkE,GAAAilB,GAAAjlB,EAAAE,EAAApE,GAAYkE,EAAAyE,MAAA,EAAUzE,EAAAqf,QAAA,KAAerf,EAAS,QAAAoQ,GAAAlQ,EAAApE,EAAAC,GAA4B,MAAVmE,GAAAuE,MAAA1I,EAAUiE,EAA6B,QAAdjE,EAAAmE,EAAA0Y,YAAc7c,IAAA0I,MAAA1I,EAAAD,GAAAoE,EAAA6e,UACld,EAAAjjB,GAAAC,IAAOmE,EAAA6e,UAAA,EAAcjjB,GADgaA,EACvZ,QAAAmK,GAAA/F,GAAqD,MAAvCF,IAAA,OAAAE,EAAA0Y,YAAA1Y,EAAA6e,UAAA,GAAuC7e,EAAS,QAAAoQ,GAAAtQ,EAAAE,EAAApE,EAAAC,GAAoB,cAAAmE,GAAA,IAAAA,EAAA2X,KAAA3X,EAAAklB,GAAAtpB,EAAAkE,EAAA4kB,mBAAA7oB,GAAAmE,EAAA,OAAAF,EAAAE,IAA6EA,EAAAkG,EAAAlG,EAAApE,EAAAC,GAAWmE,EAAA,OAAAF,EAAcE,GAAS,QAAA8P,GAAAhQ,EAAAE,EAAApE,EAAAC,GAAoB,cAAAmE,KAAA6K,OAAAjP,EAAAiP,MAAAhP,EAAAqK,EAAAlG,EAAApE,EAAAyT,MAAAxT,KAAAkU,IAAAkY,GAAAjoB,EAAApE,GAAAC,EAAA,OAAAiE,EAAAjE,IAAmFA,EAAAmpB,GAAAppB,EAAAkE,EAAA4kB,mBAAA7oB,GAA+BA,EAAAkU,IAAAkY,GAAAjoB,EAAApE,GAAcC,EAAA,OAAAiE,EAAcjE,GAAS,QAAAmW,GAAAlS,EAAAE,EAAApE,EAAAC,GAAoB,cAAAmE,GAAA,IAAAA,EAAA2X,KAAA3X,EAAAmlB,GAAAvpB,EAAAkE,EAAA4kB,mBAAA7oB,GAAAmE,EAAA,OAAAF,EAAAE,IAA6EA,EAAAkG,EAAAlG,EAAApE,EAAAC,GAC3emE,EAAA,OAAAF,EAAcE,GAAS,QAAAyR,GAAA3R,EAAAE,EAAApE,EAAAC,GAAoB,cAAAmE,GAAA,IAAAA,EAAA2X,KAAA3X,EAAAqlB,GAAAzpB,EAAAkE,EAAA4kB,mBAAA7oB,GAAAmE,EAAA6K,KAAAjP,EAAAkG,MAAA9B,EAAA,OAAAF,EAAAE,IAA4FA,EAAAkG,EAAAlG,EAAA,KAAAnE,GAAcmE,EAAA6K,KAAAjP,EAAAkG,MAAe9B,EAAA,OAAAF,EAAcE,GAAS,QAAAiP,GAAAnP,EAAAE,EAAApE,EAAAC,GAAoB,cAAAmE,GAAA,IAAAA,EAAA2X,KAAA3X,EAAAiX,UAAAwI,gBAAA7jB,EAAA6jB,eAAAzf,EAAAiX,UAAAsF,iBAAA3gB,EAAA2gB,gBAAAvc,EAAAslB,GAAA1pB,EAAAkE,EAAA4kB,mBAAA7oB,GAAAmE,EAAA,OAAAF,EAAAE,IAAyKA,EAAAkG,EAAAlG,EAAApE,EAAAuU,aAAAtU,GAAwBmE,EAAA,OAAAF,EAAcE,GAAS,QAAAwR,GAAA1R,EAAAE,EAAApE,EAAAC,EAAAqU,GAAsB,cAAAlQ,GAAA,KAAAA,EAAA2X,KAAA3X,EAAAilB,GAAArpB,EAAAkE,EAAA4kB,mBAC7b7oB,EAAAqU,GAAAlQ,EAAA,OAAAF,EAAAE,IAAqBA,EAAAkG,EAAAlG,EAAApE,EAAAC,GAAWmE,EAAA,OAAAF,EAAcE,GAAS,QAAAyP,GAAA3P,EAAAE,EAAApE,GAAkB,oBAAAoE,IAAA,iBAAAA,GAAA,MAAAA,GAAAklB,GAAA,GAAAllB,EAAAF,EAAA4kB,mBAAA9oB,GAAAoE,EAAA,OAAAF,EAAAE,CAAqG,qBAAAA,IAAA,OAAAA,EAAA,CAAkC,OAAAA,EAAAsQ,UAAmB,IAAAgY,IAAA,MAAAtoB,GAAA6K,OAAA0d,IAAAvoB,EAAAilB,GAAAjlB,EAAAqP,MAAAc,SAAArQ,EAAA4kB,mBAAA9oB,EAAAoE,EAAAtB,KAAAsB,EAAA,OAAAF,EAAAE,IAAkGpE,EAAAopB,GAAAhlB,EAAAF,EAAA4kB,mBAAA9oB,GAA+BA,EAAAmU,IAAAkY,GAAA,KAAAjoB,GAAiBpE,EAAA,OAAAkE,EAAclE,EAAS,KAAA4sB,IAAA,MAAAxoB,GAAAmlB,GAAAnlB,EAAAF,EAAA4kB,mBAAA9oB,GAAAoE,EAAA,OAAAF,EAAAE,CAA8D,KAAAyoB,IAAA,MAAA7sB,GAAAypB,GAAArlB,EAAAF,EAAA4kB,mBAC1c9oB,KAAAiP,KAAA7K,EAAA8B,MAAAlG,EAAA,OAAAkE,EAAAlE,CAAkC,KAAA8sB,IAAA,MAAA1oB,GAAAslB,GAAAtlB,EAAAF,EAAA4kB,mBAAA9oB,GAAAoE,EAAA,OAAAF,EAAAE,EAA8D,GAAA2oB,GAAA3oB,IAAA+nB,GAAA/nB,GAAA,MAAAA,GAAAilB,GAAAjlB,EAAAF,EAAA4kB,mBAAA9oB,EAAA,MAAAoE,EAAA,OAAAF,EAAAE,CAA2EmoB,IAAAroB,EAAAE,GAAQ,YAAY,QAAAyQ,GAAA3Q,EAAAE,EAAApE,EAAAC,GAAoB,GAAAqK,GAAA,OAAAlG,IAAAtB,IAAA,IAA0B,qBAAA9C,IAAA,iBAAAA,GAAA,cAAAsK,EAAA,KAAAkK,EAAAtQ,EAAAE,EAAA,GAAApE,EAAAC,EAA+E,qBAAAD,IAAA,OAAAA,EAAA,CAAkC,OAAAA,EAAA0U,UAAmB,IAAAgY,IAAA,MAAA1sB,GAAA8C,MAAAwH,EAAAtK,EAAAiP,OAAA0d,GAAA/W,EAAA1R,EAAAE,EAAApE,EAAAyT,MAAAc,SAAAtU,EAAAqK,GAAA4J,EAAAhQ,EAAAE,EAAApE,EAAAC,GAAA,IAAiF,KAAA2sB,IAAA,MAAA5sB,GAAA8C,MAAAwH,EAAA8L,EAAAlS,EAAAE,EAAApE,EAAAC,GAAA,IAAyC,KAAA4sB,IAAA,cAC3eviB,EAAAuL,EAAA3R,EAAAE,EAAApE,EAAAC,GAAA,IAAkB,KAAA6sB,IAAA,MAAA9sB,GAAA8C,MAAAwH,EAAA+I,EAAAnP,EAAAE,EAAApE,EAAAC,GAAA,KAAyC,GAAA8sB,GAAA/sB,IAAAmsB,GAAAnsB,GAAA,cAAAsK,EAAA,KAAAsL,EAAA1R,EAAAE,EAAApE,EAAAC,EAAA,KAAqDssB,IAAAroB,EAAAlE,GAAQ,YAAY,QAAAqU,GAAAnQ,EAAAE,EAAApE,EAAAC,EAAAqK,GAAsB,oBAAArK,IAAA,iBAAAA,GAAA,MAAAiE,KAAAzD,IAAAT,IAAA,KAAAwU,EAAApQ,EAAAF,EAAA,GAAAjE,EAAAqK,EAAkF,qBAAArK,IAAA,OAAAA,EAAA,CAAkC,OAAAA,EAAAyU,UAAmB,IAAAgY,IAAA,MAAAxoB,KAAAzD,IAAA,OAAAR,EAAA6C,IAAA9C,EAAAC,EAAA6C,MAAA,KAAA7C,EAAAgP,OAAA0d,GAAA/W,EAAAxR,EAAAF,EAAAjE,EAAAwT,MAAAc,SAAAjK,EAAArK,EAAA6C,KAAAoR,EAAA9P,EAAAF,EAAAjE,EAAAqK,EAA0G,KAAAsiB,IAAA,MAAA1oB,KAAAzD,IAAA,OAAAR,EAAA6C,IAAA9C,EAAAC,EAAA6C,MAAA,KAAAsT,EAAAhS,EAAAF,EAAAjE,EAAAqK,EAA8D,KAAAuiB,IAAA,MAAA3oB,KAAAzD,IAAAT,IAAA,KAAA6V,EAAAzR,EAAAF,EAAAjE,EAAAqK,EAA2C,KAAAwiB,IAAA,MAAA5oB,GACpfA,EAAAzD,IAAA,OAAAR,EAAA6C,IAAA9C,EAAAC,EAAA6C,MAAA,KAAAuQ,EAAAjP,EAAAF,EAAAjE,EAAAqK,GAA6C,GAAAyiB,GAAA9sB,IAAAksB,GAAAlsB,GAAA,MAAAiE,KAAAzD,IAAAT,IAAA,KAAA4V,EAAAxR,EAAAF,EAAAjE,EAAAqK,EAAA,KAAwDiiB,IAAAnoB,EAAAnE,GAAQ,YAAY,QAAAkW,GAAA7L,EAAAH,EAAApK,EAAAyT,GAAoB,OAAAgB,GAAA,KAAAG,EAAA,KAAAjU,EAAAyJ,EAAAkM,EAAAlM,EAAA,EAAA+J,EAAA,KAAuC,OAAAxT,GAAA2V,EAAAtW,EAAA8C,OAAqBwT,IAAA,CAAK3V,EAAAiI,MAAA0N,GAAAnC,EAAAxT,IAAA,MAAAwT,EAAAxT,EAAA6iB,OAAmC,IAAAxN,GAAAlB,EAAAvK,EAAA5J,EAAAX,EAAAsW,GAAA7C,EAAoB,WAAAuC,EAAA,CAAa,OAAArV,MAAAwT,EAAgB,OAAMhQ,GAAAxD,GAAA,OAAAqV,EAAA+G,WAAA1Y,EAAAkG,EAAA5J,GAAiCyJ,EAAAmK,EAAAyB,EAAA5L,EAAAkM,GAAW,OAAA1B,EAAAH,EAAAuB,EAAApB,EAAA4O,QAAAxN,EAAyBpB,EAAAoB,EAAIrV,EAAAwT,EAAI,GAAAmC,IAAAtW,EAAA8C,OAAA,MAAA7C,GAAAsK,EAAA5J,GAAA8T,CAAgC,WAAA9T,EAAA,CAAa,KAAK2V,EAAAtW,EAAA8C,OAAWwT,KAAA3V,EAAAmT,EAAAvJ,EAAAvK,EAAAsW,GAAA7C,MAAArJ,EAAAmK,EAAA5T,EAAAyJ,EAAAkM,GAAA,OAAA1B,EAAAH,EAAA9T,EAAAiU,EAAA4O,QAAA7iB,EAAAiU,EAAAjU,EAA6D,OAAA8T,GAAS,IAAA9T,EACxfT,EAAAqK,EAAA5J,GAAO2V,EAAAtW,EAAA8C,OAAWwT,KAAAnC,EAAAG,EAAA3T,EAAA4J,EAAA+L,EAAAtW,EAAAsW,GAAA7C,MAA0BtP,GAAA,OAAAgQ,EAAA4I,WAAApc,EAAA,cAAAwT,EAAApR,IAAAuT,EAAAnC,EAAApR,KAA2DqH,EAAAmK,EAAAJ,EAAA/J,EAAAkM,GAAW,OAAA1B,EAAAH,EAAAN,EAAAS,EAAA4O,QAAArP,EAAyBS,EAAAT,EAA6C,OAAzChQ,IAAAxD,EAAAyB,QAAA,SAAA+B,GAAyB,MAAAE,GAAAkG,EAAApG,KAAgBsQ,EAAS,QAAAW,GAAA7K,EAAAH,EAAApK,EAAAyT,GAAoB,GAAAgB,GAAA2X,GAAApsB,EAAY,oBAAAyU,IAAAR,EAAA,OAAkD,OAAZjU,EAAAyU,EAAA1U,KAAAC,KAAYiU,EAAA,MAAwB,QAAAW,GAAAH,EAAA,KAAA9T,EAAAyJ,EAAAkM,EAAAlM,EAAA,EAAA+J,EAAA,KAAA6B,EAAAhW,EAAA8L,OAA6C,OAAAnL,IAAAqV,EAAA9P,KAAkBoQ,IAAAN,EAAAhW,EAAA8L,OAAA,CAAgBnL,EAAAiI,MAAA0N,GAAAnC,EAAAxT,IAAA,MAAAwT,EAAAxT,EAAA6iB,OAAmC,IAAAtP,GAAAY,EAAAvK,EAAA5J,EAAAqV,EAAA7P,MAAAsN,EAAuB,WAAAS,EAAA,CAAavT,MAAAwT,EAAS,OAAMhQ,GAAAxD,GAAA,OAAAuT,EAAA6I,WAAA1Y,EAAAkG,EAAA5J,GAAiCyJ,EAAAmK,EAAAL,EACjf9J,EAAAkM,GAAK,OAAA1B,EAAAH,EAAAP,EAAAU,EAAA4O,QAAAtP,EAAyBU,EAAAV,EAAIvT,EAAAwT,EAAI,GAAA6B,EAAA9P,KAAA,MAAAjG,GAAAsK,EAAA5J,GAAA8T,CAA0B,WAAA9T,EAAA,CAAa,MAAKqV,EAAA9P,KAAQoQ,IAAAN,EAAAhW,EAAA8L,OAAA,QAAAkK,EAAAlC,EAAAvJ,EAAAyL,EAAA7P,MAAAsN,MAAArJ,EAAAmK,EAAAyB,EAAA5L,EAAAkM,GAAA,OAAA1B,EAAAH,EAAAuB,EAAApB,EAAA4O,QAAAxN,EAAApB,EAAAoB,EAAoF,OAAAvB,GAAS,IAAA9T,EAAAT,EAAAqK,EAAA5J,IAAaqV,EAAA9P,KAAQoQ,IAAAN,EAAAhW,EAAA8L,OAAA,QAAAkK,EAAA1B,EAAA3T,EAAA4J,EAAA+L,EAAAN,EAAA7P,MAAAsN,MAAiDtP,GAAA,OAAA6R,EAAA+G,WAAApc,EAAA,cAAAqV,EAAAjT,IAAAuT,EAAAN,EAAAjT,KAA2DqH,EAAAmK,EAAAyB,EAAA5L,EAAAkM,GAAW,OAAA1B,EAAAH,EAAAuB,EAAApB,EAAA4O,QAAAxN,EAAyBpB,EAAAoB,EAA6C,OAAzC7R,IAAAxD,EAAAyB,QAAA,SAAA+B,GAAyB,MAAAE,GAAAkG,EAAApG,KAAgBsQ,EAAS,gBAAAtQ,EAAAjE,EAAAqU,EAAAE,GAAyB,iBAAAF,IAAA,OAAAA,KAAArF,OAAA0d,IAAA,OAAArY,EAAAxR,MAAAwR,IAAAb,MAAAc,SAC3a,IAAAxU,GAAA,iBAAAuU,IAAA,OAAAA,CAAoC,IAAAvU,EAAA,OAAAuU,EAAAI,UAAwB,IAAAgY,IAAAxoB,EAAA,CAAW,GAAAyQ,GAAAL,EAAAxR,GAAY,KAAA/C,EAAAE,EAAQ,OAAAF,GAAS,CAAE,GAAAA,EAAA+C,MAAA6R,EAAA,SAAA5U,EAAAgc,IAAAzH,EAAArF,OAAA0d,GAAA5sB,EAAAkP,OAAAqF,EAAArF,KAAA,CAAwDjP,EAAAkE,EAAAnE,EAAAwjB,SAAetjB,EAAAqK,EAAAvK,EAAAuU,EAAArF,OAAA0d,GAAArY,EAAAb,MAAAc,SAAAD,EAAAb,MAAAe,GAA8CvU,EAAAkU,IAAAkY,GAAAtsB,EAAAuU,GAAcrU,EAAA,OAAAiE,EAAcA,EAAAjE,CAAI,MAAAiE,GAAalE,EAAAkE,EAAAnE,EAAO,OAAMqE,EAAAF,EAAAnE,GAAYA,IAAAwjB,QAAYjP,EAAArF,OAAA0d,IAAA1sB,EAAAopB,GAAA/U,EAAAb,MAAAc,SAAArQ,EAAA4kB,mBAAAtU,EAAAF,EAAAxR,KAAA7C,EAAA,OAAAiE,IAAAjE,IAAAuU,EAAA4U,GAAA9U,EAAApQ,EAAA4kB,mBAAAtU,KAAAL,IAAAkY,GAAApsB,EAAAqU,GAAAE,EAAA,OAAAtQ,IAAAsQ,GAAqJ,MAAArK,GAAAjG,EAAY,KAAA0oB,IAAA1oB,EAAA,CAAW,IAAAnE,EAAAuU,EAAAxR,IAAY,OAAA7C,GAAS,CAAE,GAAAA,EAAA6C,MAChf/C,EAAA,QAAAE,EAAA8b,IAAA,CAAgB/b,EAAAkE,EAAAjE,EAAAsjB,SAAetjB,EAAAqK,EAAArK,EAAAqU,EAAAE,GAAWvU,EAAA,OAAAiE,EAAcA,EAAAjE,CAAI,MAAAiE,GAAalE,EAAAkE,EAAAjE,EAAO,OAAMmE,EAAAF,EAAAjE,GAAYA,IAAAsjB,QAAYtjB,EAAAspB,GAAAjV,EAAApQ,EAAA4kB,mBAAAtU,GAA+BvU,EAAA,OAAAiE,EAAcA,EAAAjE,EAAI,MAAAkK,GAAAjG,EAAY,KAAA2oB,IAAA3oB,EAAA,CAAW,UAAAjE,EAAA,QAAAA,EAAA8b,IAAA,CAA0B/b,EAAAkE,EAAAjE,EAAAsjB,SAAetjB,EAAAqK,EAAArK,EAAA,KAAAuU,GAAcvU,EAAAgP,KAAAqF,EAAApO,MAAejG,EAAA,OAAAiE,EAAcA,EAAAjE,CAAI,MAAAiE,GAAQlE,EAAAkE,EAAAjE,GAAYA,EAAAwpB,GAAAnV,EAAApQ,EAAA4kB,mBAAAtU,GAA+BvU,EAAAgP,KAAAqF,EAAApO,MAAejG,EAAA,OAAAiE,EAAcA,EAAAjE,EAAI,MAAAkK,GAAAjG,EAAY,KAAA4oB,IAAA5oB,EAAA,CAAW,IAAAnE,EAAAuU,EAAAxR,IAAY,OAAA7C,GAAS,CAAE,GAAAA,EAAA6C,MAAA/C,EAAA,QAAAE,EAAA8b,KAAA9b,EAAAob,UAAAwI,gBAAAvP,EAAAuP,eAAA5jB,EAAAob,UAAAsF,iBAChZrM,EAAAqM,eAAA,CAAkB3gB,EAAAkE,EAAAjE,EAAAsjB,SAAetjB,EAAAqK,EAAArK,EAAAqU,EAAAC,aAAAC,GAAwBvU,EAAA,OAAAiE,EAAcA,EAAAjE,CAAI,MAAAiE,GAAalE,EAAAkE,EAAAjE,EAAO,OAAMmE,EAAAF,EAAAjE,GAAYA,IAAAsjB,QAAYtjB,EAAAypB,GAAApV,EAAApQ,EAAA4kB,mBAAAtU,GAA+BvU,EAAA,OAAAiE,EAAcA,EAAAjE,EAAI,MAAAkK,GAAAjG,GAAY,oBAAAoQ,IAAA,iBAAAA,GAAA,MAAAA,GAAA,GAAAA,EAAA,OAAArU,GAAA,IAAAA,EAAA8b,KAAA/b,EAAAkE,EAAAjE,EAAAsjB,SAAAtjB,EAAAqK,EAAArK,EAAAqU,EAAAE,KAAAxU,EAAAkE,EAAAjE,KAAAqpB,GAAAhV,EAAApQ,EAAA4kB,mBAAAtU,IAAAvU,EAAA,OAAAiE,IAAAjE,EAAAkK,EAAAjG,EAAyK,IAAA6oB,GAAAzY,GAAA,MAAA6B,GAAAjS,EAAAjE,EAAAqU,EAAAE,EAA2B,IAAA2X,GAAA7X,GAAA,MAAAa,GAAAjR,EAAAjE,EAAAqU,EAAAE,EAAsC,IAAXzU,GAAAwsB,GAAAroB,EAAAoQ,GAAW,oBAAAA,GAAA,OAAApQ,EAAA6X,KAAwC,cAAAvH,EAAAtQ,EAAA+K,KAAA+E,EAAA,MAAAQ,EAAAuO,aAC5cvO,EAAAtU,MAAA,aAAqB,MAAAF,GAAAkE,EAAAjE,IACrB,QAAA+sB,IAAA9oB,EAAAE,EAAApE,EAAAC,EAAAqK,GAAuB,QAAAgK,GAAApQ,EAAAE,EAAApE,GAAkB,GAAAC,GAAAmE,EAAA8kB,cAAuB9kB,GAAAkf,MAAA,OAAApf,EAAA+oB,GAAA7oB,EAAA,KAAApE,EAAAC,GAAAitB,GAAA9oB,EAAAF,EAAAof,MAAAtjB,EAAAC,GAAkD,QAAAkK,GAAAjG,EAAAE,GAAgB,GAAApE,GAAAoE,EAAA+P,GAAY,QAAAnU,GAAAkE,KAAAiQ,MAAAnU,IAAAoE,EAAA6e,WAAA,KAA2C,QAAAzO,GAAAtQ,EAAAE,EAAApE,EAAAC,GAA2B,GAAPkK,EAAAjG,EAAAE,IAAOpE,EAAA,MAAAC,IAAAuoB,GAAApkB,GAAA,GAAAgS,EAAAlS,EAAAE,EAAgCpE,GAAAoE,EAAAiX,UAAczU,GAAAkO,QAAA1Q,CAAa,IAAAkG,GAAAtK,EAAAkT,QAAqG,OAApF9O,GAAA6e,WAAA,EAAe3O,EAAApQ,EAAAE,EAAAkG,GAASlG,EAAAskB,cAAA1oB,EAAA2rB,MAAwBvnB,EAAAwkB,cAAA5oB,EAAAyT,MAAwBxT,GAAAuoB,GAAApkB,GAAA,GAAYA,EAAAkf,MAAe,QAAApP,GAAAhQ,GAAc,GAAAE,GAAAF,EAAAmX,SAAkBjX,GAAA+oB,eAAAjF,GAAAhkB,EAAAE,EAAA+oB,eAAA/oB,EAAA+oB,iBAAA/oB,EAAAsP,SAAAtP,EAAAsP,SAAAwU,GAAAhkB,EACnaE,EAAAsP,SAAA,GAAcW,EAAAnQ,EAAAE,EAAAyf,eAAqB,QAAAzN,GAAAlS,EAAAE,GAA4D,GAA5C,OAAAF,GAAAE,EAAAkf,QAAApf,EAAAof,OAAAtP,EAAA,OAA4C,OAAA5P,EAAAkf,MAAA,CAAmBpf,EAAAE,EAAAkf,KAAU,IAAAtjB,GAAAmpB,GAAAjlB,IAAA2kB,aAAA3kB,EAAAglB,eAAsD,KAAV9kB,EAAAkf,MAAAtjB,EAAUA,EAAA,OAAAoE,EAAkB,OAAAF,EAAAqf,SAAiBrf,IAAAqf,QAAAvjB,IAAAujB,QAAA4F,GAAAjlB,IAAA2kB,aAAA3kB,EAAAglB,gBAAAlpB,EAAA,OAAAoE,CAA6EpE,GAAAujB,QAAA,KAAe,MAAAnf,GAAAkf,MAAe,QAAAzN,GAAA3R,EAAAE,GAAgB,OAAAA,EAAA2X,KAAc,OAAA7H,EAAA9P,EAAY,MAAM,QAAAkkB,GAAAlkB,EAAa,MAAM,QAAAiQ,EAAAjQ,IAAAiX,UAAAwI,eAAsC,YAAY,GAAAxQ,GAAAnP,EAAAkpB,qBAAAxX,EAAA1R,EAAAmpB,kBAAAxZ,EAAA3P,EAAAopB,0BACrbzY,EAAAzQ,EAAAmpB,gBAAAlZ,EAAAjQ,EAAAopB,kBAAArX,EAAAnW,EAAAytB,oBAAAtY,EAAAnV,EAAA0tB,oBAAAzZ,EAAAjU,EAAA2tB,gCAA+HzpB,GAAAonB,GAAArrB,EAAAqK,EAAA,SAAApG,EAAAE,GAAuBF,EAAA0kB,cAAAxkB,GAAkB,SAAAF,EAAAE,GAAeF,EAAAwkB,cAAAtkB,GAAoB,IAAAiS,GAAAnS,EAAAsnB,mBAAAzrB,EAAAmE,EAAAunB,uBAAAjY,EAAAtP,EAAAwnB,mBAAAkC,EAAA1pB,EAAA4nB,mBAAsG,QAAO+B,UAAA,SAAA3pB,EAAAE,EAAApE,GAA0B,OAAAoE,EAAA8kB,gBAAA9kB,EAAA8kB,eAAAlpB,EAAA,MAAA6V,GAAA3R,EAAAE,EAA0D,QAAAA,EAAA2X,KAAc,cAAA7X,GAAA8P,EAAA,MAAgC,IAAA/T,GAAAmE,EAAA6K,KAAA3E,EAAAlG,EAAAykB,aAAAlU,EAAA4S,GAAAnjB,EAC/R,OADqUuQ,GAAAgT,GAAAvjB,EAAAuQ,GAAU1U,IAAAqK,EAAAqK,GAASvQ,EAAA6e,WACnf,EAAE,iBAAAhjB,IAAA,OAAAA,GAAA,mBAAAA,GAAAiT,QAAA9O,EAAA2X,IAAA,EAAAzR,EAAAge,GAAAlkB,GAAAiS,EAAAjS,EAAAnE,GAAAuT,EAAApP,EAAApE,GAAAoE,EAAAoQ,EAAAtQ,EAAAE,GAAA,EAAAkG,KAAAlG,EAAA2X,IAAA,EAAAzH,EAAApQ,EAAAE,EAAAnE,GAAAmE,EAAAwkB,cAAAte,EAAAlG,IAAAkf,OAAyJlf,CAAS,QAAAF,EAAA,CAAsD,GAA5CoG,EAAAlG,EAAA6K,KAASjP,EAAAoE,EAAAykB,aAAiB5oB,EAAAmE,EAAAwkB,cAAkBX,GAAAnT,QAAA,OAAA9U,MAAAC,OAA6B,WAAAD,GAAAC,IAAAD,EAAA,CAAyBoE,EAAAgS,EAAAlS,EAAAE,EAAS,MAAAF,GAAQjE,EAAAsnB,GAAAnjB,GAAQnE,EAAA0nB,GAAAvjB,EAAAnE,GAAUqK,IAAAtK,EAAAC,GAASmE,EAAA6e,WAAA,EAAe3O,EAAApQ,EAAAE,EAAAkG,GAASlG,EAAAwkB,cAAA5oB,EAAkBoE,IAAAkf,MAAU,MAAAlf,EAAS,cAAAkG,GAAAge,GAAAlkB,GAAAnE,MAAA,UAAAiE,EAAAE,EAAAiX,UAAArH,EAAA,QAAAjU,EAAAqE,IAAAykB,cAAArV,EAAApP,EAAApE,GAAAC,GAAA,GAAAA,EAAA2tB,EAAA1pB,EAAAE,EAAApE,GAAAwU,EAAAtQ,EAAAE,EAAAnE,EAAAqK,EAAsH,cAAA4J,GAAA9P,GAC/ekG,EAAAlG,EAAAukB,YAAA,OAAAre,GAAArK,EAAAmE,EAAAskB,cAAApe,EAAA4gB,GAAAhnB,EAAAE,EAAAkG,EAAA,UAAAtK,GAAAC,IAAAqK,GAAA6K,IAAA/Q,EAAAgS,EAAAlS,EAAAE,KAAAnE,EAAAqK,EAAAwjB,QAAAnZ,EAAAvQ,EAAAiX,WAAA,OAAAnX,GAAA,OAAAA,EAAAof,QAAA3O,EAAAoZ,SAAA5X,EAAA/R,MAAA6e,WAAA,EAAA7e,EAAAkf,MAAA2J,GAAA7oB,EAAA,KAAAnE,EAAAD,KAAAmV,IAAAb,EAAApQ,EAAAE,EAAAnE,IAAAmE,EAAAskB,cAAApe,EAAAlG,IAAAkf,SAAAnO,IAAA/Q,EAAAgS,EAAAlS,EAAAE,KAAsQ,QAAAyQ,EAAAzQ,GAAY,OAAAF,GAAA+P,EAAA7P,GAAekG,EAAAlG,EAAA6K,IAAS,IAAAvO,GAAA0D,EAAAwkB,aACzL,OAD+M3oB,GAAAmE,EAAAykB,aAAiB,OAAA5oB,GAAA,QAAAA,EAAAS,IAAAsT,EAAA,OAAyCW,EAAA,OAAAzQ,IAAA0kB,cAAA,KAAgCX,GAAAnT,SAAA,OAAA7U,GAAAS,IAAAT,GAAAS,EAAAT,EAAAsU,SAAAlB,EAAA/I,EAAArK,GAAAS,EAAA,KAAAiU,GAAAtB,EAAA/I,EAAAqK,KAAAvQ,EAAA6e,WAAA,IAAA9Y,EAAAjG,EAAAE,GAC1Z,aAAApE,IAAA4V,GAAA/B,EAAAvJ,EAAArK,IAAAmE,EAAA8kB,eAAA,WAAA9kB,EAAA,OAAAkQ,EAAApQ,EAAAE,EAAA1D,GAAA0D,EAAAwkB,cAAA3oB,EAAAmE,IAAAkf,QAAAlf,EAAAgS,EAAAlS,EAAAE,GAAiHA,CAAS,sBAAAF,GAAA+P,EAAA7P,GAAAF,EAAAE,EAAAykB,aAAA,OAAA3kB,MAAAE,EAAAwkB,eAAAxkB,EAAAwkB,cAAA1kB,EAAA,IAAmG,QAAAE,EAAA2X,IAAA,CAAe,QAAuP,MAAvPzR,GAAAlG,EAAAykB,aAAwBZ,GAAAnT,QAAA,OAAAxK,GAAA,QAAAA,EAAApG,KAAA0kB,gBAAA5U,EAAA,OAAuE,OAAA1J,GAAAlG,EAAAwkB,gBAAAte,MAAAlG,EAAAwkB,eAAwD3oB,EAAAqK,EAAAiK,SAAanQ,EAAAiX,UAAA,OAAAnX,EAAA+oB,GAAA7oB,IAAAiX,UAAApb,EAAAD,GAAAktB,GAAA9oB,IAAAiX,UAAApb,EAAAD,GAAiEoE,EAAAwkB,cAAAte,EAAkBlG,EAAAiX,SACne,mBAAmB,QAAAnX,EAAA,CAA0D,GAAhDmQ,EAAAjQ,IAAAiX,UAAAwI,eAA+BvZ,EAAAlG,EAAAykB,aAAiBZ,GAAAnT,QAAA,OAAAxK,GAAA,OAAAA,EAAApG,KAAA0kB,gBAAA5U,EAAA,WAAsE,WAAA1J,GAAAlG,EAAAwkB,gBAAAte,EAAA,CAAuClG,EAAAgS,EAAAlS,EAAAE,EAAS,MAAAF,GAAQ,OAAAA,EAAAE,EAAAkf,MAAA4J,GAAA9oB,EAAA,KAAAkG,EAAAtK,GAAAsU,EAAApQ,EAAAE,EAAAkG,GAAyClG,EAAAwkB,cAAAte,EAAkBlG,IAAAkf,MAAU,MAAAlf,EAAS,SAAAF,EAAA,CAA4B,GAAjBlE,EAAAoE,EAAAykB,aAAiBZ,GAAAnT,QAAA,OAAA9U,MAAAoE,EAAAwkB,mBAA2C,WAAA5oB,GAAAoE,EAAAwkB,gBAAA5oB,EAAA,CAAuCoE,EAAAgS,EAAAlS,EAAAE,EAAS,MAAAF,GAAQoQ,EAAApQ,EAAAE,EAAApE,GAASoE,EAAAwkB,cAAA5oB,EAAkBoE,IAAAkf,MAAU,MAAAlf,EAAS,SAAA4P,EAAA,SAAkBga,gBAAA,SAAA9pB,EAAAE,EACxdpE,GAAG,OAAAoE,EAAA2X,KAAc,OAAAuM,GAAAlkB,EAAa,MAAM,QAAA8P,EAAA9P,EAAY,MAAM,SAAA4P,EAAA,OAA4F,MAA3E5P,GAAA6e,WAAA,GAAgB,OAAA/e,EAAAE,EAAAkf,MAAA,KAAAlf,EAAAkf,QAAApf,EAAAof,QAAAlf,EAAAkf,MAAApf,EAAAof,OAA2D,IAAAlf,EAAA8kB,gBAAA9kB,EAAA8kB,eAAAlpB,EAAA6V,EAAA3R,EAAAE,IAA0DA,EAAA4kB,YAAA,KAAmB5kB,EAAA2kB,WAAA,KAAkB3kB,EAAAkf,MAAA,OAAApf,EAAA+oB,GAAA7oB,EAAA,UAAApE,GAAAktB,GAAA9oB,EAAAF,EAAAof,MAAA,KAAAtjB,GAAwD,IAAAoE,EAAA2X,MAAA7X,EAAAE,EAAAiX,UAAAjX,EAAAwkB,cAAA1kB,EAAAuP,MAAArP,EAAAskB,cAAAxkB,EAAAynB,OAA2EvnB,EAAAkf,SACpX,QAAA2K,IAAA/pB,EAAAE,EAAApE,GAAmB,QAAAC,GAAAiE,GAAcA,EAAA+e,WAAA,EAAe,GAAA3Y,GAAApG,EAAAgqB,eAAA5Z,EAAApQ,EAAAiqB,mBAAAhkB,EAAAjG,EAAAkqB,mBAAA5Z,EAAAtQ,EAAAmqB,wBAAAna,EAAAhQ,EAAAoqB,cAAAlY,EAAAlS,EAAAqqB,YAAA1Y,EAAAzR,EAAAoqB,qBAAAnb,EAAAjP,EAAAqqB,eAAA7Y,EAAAxR,EAAAsqB,eAAA7a,EAAAzP,EAAAuqB,iBAAA9Z,EAAA7U,EAAA4uB,6BAAAva,EAAArU,EAAA6uB,iCAAA1Y,EAAAnW,EAAA8uB,kBAAA3Z,MAAA,GAAAlB,MAAA,GAAAoC,MAAA,EAChD,OAD8XnS,GAAA6qB,UAAA5Z,EAAA,aAA0BlB,EAAA,SAAA/P,EAAAE,EAAApE,IAAmBoE,EAAAukB,YAAA3oB,IAAAC,EAAAmE,IAAwBiS,EAAA,SAAAnS,EAAAE,EAAApE,EAAAsK,GAAqBtK,IAAAsK,GAAArK,EAAAmE,KAAY4P,EAAAoC,EAAA,cAC7d4Y,aAAA,SAAA9qB,EAAAE,EAAApE,GAA6B,GAAAD,GAAAqE,EAAAykB,YAA6H,QAAxG,OAAA9oB,IAAAqE,EAAAwkB,cAA8B,aAAAxkB,EAAA8kB,gBAAA,aAAAlpB,IAAAoE,EAAAykB,aAAA,MAA0EzkB,EAAA2X,KAAc,kBAAmB,cAAAiM,IAAA5jB,GAAA,IAAyB,QAAoK,MAApKyP,GAAAzP,GAAY6T,GAAAgQ,GAAA7jB,GAAO6T,GAAAyP,GAAAtjB,GAAQrE,EAAAqE,EAAAiX,UAActb,EAAAotB,iBAAAptB,EAAA2T,QAAA3T,EAAAotB,eAAAptB,EAAAotB,eAAA,MAAqE,OAAAjpB,GAAA,OAAAA,EAAAof,QAAAnN,EAAA/R,KAAA6e,YAAA,GAAiD9N,EAAA/Q,GAAK,IAAY,QAAAiP,EAAAjP,GAAYpE,EAAA6V,GAAM,IAAArC,GAAApP,EAAA6K,IAAa,WAAA/K,GAAA,MAAAE,EAAAiX,UAAA,CAAgC,GAAAra,GAAAkD,EAAA0kB,cAAAxS,EAAAhS,EAAAiX,UAAAtF,EAAAH,GAA0CQ,GACpflC,EAAAkC,EAAA5C,EAAAxS,EAAAjB,EAAAC,EAAA+V,GAAe9B,EAAA/P,EAAAE,EAAAgS,EAAA5C,EAAAxS,EAAAjB,EAAAC,GAAiBkE,EAAAiQ,MAAA/P,EAAA+P,MAAA/P,EAAA6e,WAAA,SAAkC,CAAK,IAAAljB,EAAA,cAAAqE,EAAAiX,WAAArH,EAAA,WAA2D,IAAN9P,EAAA0R,IAAMO,EAAA/R,GAAAyQ,EAAAzQ,EAAApE,EAAAkE,IAAAjE,EAAAmE,OAAuB,CAAKF,EAAAoG,EAAAkJ,EAAAzT,EAAAC,EAAAkE,EAAAE,EAAeF,GAAA,IAAAlD,EAAAoD,EAAAkf,MAAgB,OAAAtiB,GAAS,CAAE,OAAAA,EAAA+a,KAAA,IAAA/a,EAAA+a,IAAA5R,EAAAjG,EAAAlD,EAAAqa,eAAyC,QAAAra,EAAA+a,KAAA,OAAA/a,EAAAsiB,MAAA,CAAmCtiB,EAAAsiB,MAAA,OAAAtiB,EAAoBA,IAAAsiB,KAAU,UAAS,GAAAtiB,IAAAoD,EAAA,KAAe,MAAK,OAAApD,EAAAuiB,SAAiB,CAAE,UAAAviB,EAAA,QAAAA,EAAA,SAAAoD,EAAA,KAAAF,EAA+ClD,KAAA,OAAcA,EAAAuiB,QAAA,OAAAviB,EAAA,OAAgCA,IAAAuiB,QAAY/O,EAAAtQ,EAAAsP,EAAAzT,EAAAC,IAAAC,EAAAmE,GAAiBA,EAAAiX,UAAAnX,EAAc,OAAAE,EAAA+P,MAC1e/P,EAAA6e,WAAA,KAAmB,WAAY,WAAA/e,GAAA,MAAAE,EAAAiX,UAAAhF,EAAAnS,EAAAE,EAAAF,EAAA0kB,cAAA7oB,OAAwD,CAAK,oBAAAA,GAAA,cAAAqE,EAAAiX,WAAArH,EAAA,WAAsE9P,GAAA2R,IAAM7V,EAAA4V,IAAMO,EAAA/R,GAAAiQ,EAAAjQ,IAAAnE,EAAAmE,KAAAiX,UAAA/G,EAAAvU,EAAAmE,EAAAlE,EAAAoE,GAAuC,WAAY,SAAArE,EAAAqE,EAAAwkB,gBAAA5U,EAAA,OAA2C5P,EAAA2X,IAAA,EAAQvI,IAAKtP,GAAA,KAAAlD,EAAAoD,EAAAiX,aAAAra,EAAA,OAAAoD,GAAuC,OAAApD,GAAS,CAAE,OAAAA,EAAA+a,KAAA,IAAA/a,EAAA+a,KAAA,IAAA/a,EAAA+a,IAAA/H,EAAA,WAA4C,QAAAhT,EAAA+a,IAAAvI,EAAAjO,KAAAvE,EAAAiO,UAAiC,WAAAjO,EAAAsiB,MAAA,CAAwBtiB,EAAAsiB,MAAA,OAAAtiB,EAAoBA,IAAAsiB,KAAU,UAAS,KAAK,OAAAtiB,EAAAuiB,SAAiB,CAAE,UAC/eviB,EAAA,QAAAA,EAAA,SAAAoD,EAAA,KAAAF,EAAqClD,KAAA,OAAcA,EAAAuiB,QAAA,OAAAviB,EAAA,OAAgCA,IAAAuiB,QAA+E,MAAnEviB,GAAAjB,EAAAypB,QAAYzpB,EAAAiB,EAAAjB,EAAA0T,MAAAD,GAAepP,EAAAkf,MAAA4J,GAAA9oB,EAAA,OAAAF,IAAAof,MAAA,KAAAvjB,EAAAC,GAAwCoE,EAAAkf,KAAe,cAAAlf,GAAA2X,IAAA,MAA2B,QAAmB,mBAAoB,cAAAlI,GAAAzP,GAAA+Q,EAAA/Q,GAAA,IAA6B,QAAA4P,EAAA,MAAgB,SAAAA,EAAA,UAChS,QAAAib,IAAA/qB,EAAAE,GAAiB,QAAApE,GAAAkE,GAAc,GAAAlE,GAAAkE,EAAAiQ,GAAY,WAAAnU,EAAA,IAAgBA,EAAA,MAAQ,MAAAwT,GAASpP,EAAAF,EAAAsP,IAAQ,QAAAvT,GAAAiE,GAA4C,OAA9B,mBAAAomB,QAAApmB,GAA8BA,EAAA6X,KAAc,OAAA/b,EAAAkE,EAAY,IAAAjE,GAAAiE,EAAAmX,SAAkB,uBAAApb,GAAAivB,qBAAA,IAAkDjvB,EAAAwT,MAAAvP,EAAA0kB,cAAA3oB,EAAA0rB,MAAAznB,EAAAwkB,cAAAzoB,EAAAivB,uBAAyE,MAAA1b,GAASpP,EAAAF,EAAAsP,GAAO,KAAM,QAAAxT,EAAAkE,EAAY,MAAM,QAAAoG,EAAApG,EAAAmX,UAAsB,MAAM,QAAAnH,GAAA/J,EAAAjG,IAAgB,QAAAoG,GAAApG,GAAc,OAAAE,GAAAF,IAAa,GAAAjE,EAAAmE,GAAA,OAAAA,EAAAkf,OAAApP,GAAA,IAAA9P,EAAA2X,IAAA,CAAuC,GAAA3X,IAAAF,EAAA,KAAe,MAAK,OAAAE,EAAAmf,SAAiB,CAAE,UAAAnf,EAAA,QACpeA,EAAA,SAAAF,EAAA,MAAuBE,KAAA,OAAcA,EAAAmf,QAAA,OAAAnf,EAAA,OAAgCA,IAAAmf,YAAYnf,GAAAkf,MAAA,OAAAlf,MAAAkf,MAAmC,QAAAhP,GAAApQ,GAAc,WAAAA,EAAA6X,KAAA,IAAA7X,EAAA6X,KAAA,IAAA7X,EAAA6X,IAAuC,QAAA5R,GAAAjG,GAAc,OAAAE,GAAAF,EAAAlE,GAAA,EAAAsU,MAAA,GAAAnK,MAAA,KAAoC,CAAE,IAAAnK,EAAA,CAAOA,EAAAoE,EAAA,MAAcF,GAAA,OAAQ,CAA2B,OAAzB,OAAAlE,GAAAgU,EAAA,OAAyBhU,EAAA+b,KAAc,OAAAzH,EAAAtU,EAAAqb,UAAqBlR,GAAA,CAAK,MAAAjG,EAAQ,QAAgD,OAAAoQ,EAAAtU,EAAAqb,UAAAwI,cAAmC1Z,GAAA,CAAK,MAAAjG,GAAQlE,IAAA,OAAcA,GAAA,EAAK,OAAAoE,EAAA2X,KAAA,IAAA3X,EAAA2X,IAAAzR,EAAAlG,GAAA+F,EAAA8J,EAAAK,EAAAlQ,EAAAiX,WAAAlG,EAAAb,EAAAlQ,EAAAiX,eACxb,QAAAjX,EAAA2X,IAAAzH,EAAAlQ,EAAAiX,UAAAwI,cAAA5jB,EAAAmE,GAAA,OAAAA,EAAAkf,MAAA,CAAmElf,EAAAkf,MAAA,OAAAlf,EAAoBA,IAAAkf,KAAU,UAAS,GAAAlf,IAAAF,EAAA,KAAe,MAAK,OAAAE,EAAAmf,SAAiB,CAAE,UAAAnf,EAAA,QAAAA,EAAA,SAAAF,EAAA,MAA8CE,KAAA,OAAc,IAAAA,EAAA2X,MAAA/b,GAAA,GAAkBoE,EAAAmf,QAAA,OAAAnf,EAAA,OAAgCA,IAAAmf,SAAa,GAAA/O,GAAAtQ,EAAAirB,kBAAAjb,EAAAhQ,EAAA6qB,QAAuC7qB,KAAAqqB,YAAgBra,GAAAF,EAAA9P,EAAA,YAAyB,IAAAkS,GAAAlC,EAAAkb,YAAAvZ,EAAA3B,EAAAmb,aAAAhc,EAAAa,EAAAob,iBAAA1Z,EAAA1B,EAAAqb,iBAAA1b,EAAAK,EAAAsb,YAAA3a,EAAAX,EAAAub,uBAAApb,EAAAH,EAAAwb,aAAAvZ,EAAAjC,EAAAyb,wBAC5Vxa,EAAAjB,EAAA0b,YAAA3b,EAAAC,EAAA2b,wBAA6C,QAAOC,uBAAA,SAAA5rB,GAAmCmP,EAAAnP,EAAAmX,YAAe0U,gBAAA,SAAA7rB,GAA6BA,EAAA,CAAG,OAAAE,GAAAF,EAAA,OAAsB,OAAAE,GAAS,CAAE,GAAAkQ,EAAAlQ,GAAA,CAAS,GAAApE,GAAAoE,CAAQ,MAAAF,GAAQE,IAAA,OAAc4P,EAAA,OAAShU,MAAA,GAAS,GAAAC,GAAAmE,MAAA,EAAe,QAAApE,EAAA+b,KAAc,OAAA3X,EAAApE,EAAAqb,UAAqBpb,GAAA,CAAK,MAAM,QAA8C,OAAAmE,EAAApE,EAAAqb,UAAAwI,cAAmC5jB,GAAA,CAAK,MAAM,SAAA+T,EAAA,OAAiB,GAAAhU,EAAAijB,YAAA5P,EAAAjP,GAAApE,EAAAijB,YAAA,GAAwC/e,GAAAE,EAAA,IAAApE,EAAAkE,IAAa,CAAE,KAAK,OAAAlE,EAAAujB,SAAiB,CAAE,UAAAvjB,EAAA,QAAAsU,EAAAtU,EAAA,SAAuCA,EAChgB,IAAK,MAAAkE,GAAQlE,IAAA,OAA8C,IAAhCA,EAAAujB,QAAA,OAAAvjB,EAAA,OAAgCA,IAAAujB,QAAgB,IAAAvjB,EAAA+b,KAAA,IAAA/b,EAAA+b,KAAqB,CAAE,KAAA/b,EAAAijB,UAAA,QAAA7e,EAA4B,WAAApE,EAAAsjB,OAAA,IAAAtjB,EAAA+b,IAAA,QAAA3X,EAAwCpE,GAAAsjB,MAAA,OAAAtjB,MAAAsjB,MAAmC,OAAAtjB,EAAAijB,WAAA,CAAqBjjB,IAAAqb,SAAc,MAAAnX,IAAS,OAAAoG,GAAApG,IAAa,CAAE,OAAAoG,EAAAyR,KAAA,IAAAzR,EAAAyR,IAAA/b,EAAAC,EAAAkW,EAAA/R,EAAAkG,EAAA+Q,UAAArb,GAAAqU,EAAAjQ,EAAAkG,EAAA+Q,UAAArb,GAAAC,EAAA4U,EAAAzQ,EAAAkG,EAAA+Q,WAAAxH,EAAAzP,EAAAkG,EAAA+Q,eAAsG,QAAA/Q,EAAAyR,KAAA,OAAAzR,EAAAgZ,MAAA,CAAmChZ,EAAAgZ,MAAA,OAAAhZ,EAAoBA,IAAAgZ,KAAU,UAAS,GAAAhZ,IAAApG,EAAA,KAAe,MAAK,OAAAoG,EAAAiZ,SAAiB,CAAE,UAAAjZ,EAAA,QAAAA,EAAA,SAC3dpG,EAAA,MAASoG,KAAA,OAAcA,EAAAiZ,QAAA,OAAAjZ,EAAA,OAAgCA,IAAAiZ,UAAayM,eAAA,SAAA9rB,GAA4BiG,EAAAjG,GAAKA,EAAA,YAAiBA,EAAAof,MAAA,KAAapf,EAAA4Y,YAAA5Y,EAAA4Y,UAAAwG,MAAA,KAAApf,EAAA4Y,UAAA,cAAiEmT,WAAA,SAAA/rB,EAAAE,GAA0B,OAAAA,EAAA2X,KAAc,YAAa,WAAA/b,GAAAoE,EAAAiX,SAAyB,UAAArb,EAAA,CAAY,GAAAC,GAAAmE,EAAAwkB,aAAsB1kB,GAAA,OAAAA,IAAA0kB,cAAA3oB,CAA6B,IAAAqK,GAAAlG,EAAA6K,KAAAqF,EAAAlQ,EAAAukB,WAA6BvkB,GAAAukB,YAAA,KAAmB,OAAArU,GAAAuB,EAAA7V,EAAAsU,EAAAhK,EAAApG,EAAAjE,EAAAmE,GAAyB,KAAM,eAAAA,EAAAiX,WAAArH,EAAA,OAA0ChU,EAAAoE,EAAAwkB,cAAkBhT,EAAAxR,EAAAiX,UAAA,OAAAnX,IAAA0kB,cAC5d5oB,IAAK,MAAM,aAAa,SAAAgU,EAAA,SAAkBkc,iBAAA,SAAAhsB,EAAAE,GAAgC,OAAAA,EAAA2X,KAAc,UAAA/b,GAAAoE,EAAAiX,SAAyB,MAAAjX,EAAA6e,UAAA,UAAA/e,EAAAlE,EAAAyT,MAAArP,EAAAwkB,cAAA5oB,EAAA2rB,MAAAvnB,EAAAskB,cAAA1oB,EAAA6rB,wBAAmG,CAAK,GAAA5rB,GAAAiE,EAAA0kB,aAAsB1kB,KAAAwkB,cAAkB1oB,EAAAyT,MAAArP,EAAAwkB,cAAwB5oB,EAAA2rB,MAAAvnB,EAAAskB,cAAwB1oB,EAAAgsB,mBAAA/rB,EAAAiE,GAA0BE,IAAAukB,YAAgB,OAAAvkB,GAAAinB,GAAAjnB,EAAApE,EAAkB,MAAM,QAAAA,EAAAoE,EAAAukB,YAAuB,OAAA3oB,GAAAqrB,GAAArrB,EAAA,OAAAoE,EAAAkf,MAAAlf,EAAAkf,MAAAjI,UAAA,KAAsD,MAAM,QAAArb,EAAAoE,EAAAiX,UAAqB,OAAAnX,GAAA,EAAAE,EAAA6e,WAAA7M,EAAApW,EAC3doE,EAAA6K,KAAA7K,EAAAwkB,cAAAxkB,EAA0B,MAAM,QAAa,YAAa,SAAA4P,EAAA,SAAkBmc,gBAAA,SAAAjsB,GAA6B,GAAAE,GAAAF,EAAAiQ,GAAY,WAAA/P,EAAA,CAAa,GAAApE,GAAAkE,EAAAmX,SAAkB,QAAAnX,EAAA6X,KAAc,OAAA3X,EAAAoQ,EAAAxU,GAAe,MAAM,SAAAoE,EAAApE,MAAeowB,gBAAA,SAAAlsB,GAAqC,QAARA,IAAAiQ,MAAQjQ,EAAA,QAC3O,QAAAmsB,IAAAnsB,GAAe,QAAAE,GAAAF,GAAqC,MAAvBA,KAAAosB,IAAAtc,EAAA,OAAuB9P,EAAS,GAAAlE,GAAAkE,EAAAqsB,oBAAAtwB,EAAAiE,EAAAssB,mBAAAlmB,GAAsDwK,QAAAwb,IAAWhc,GAAIQ,QAAAwb,IAAWnmB,GAAI2K,QAAAwb,GAAY,QAAO5B,eAAA,WAA0B,MAAAtqB,GAAAkG,EAAAwK,UAAoB0Z,qBAAA,WAAiC,MAAApqB,GAAA+F,EAAA2K,UAAoB6Z,iBAAA,SAAAzqB,GAA8B+T,GAAA3N,EAAApG,GAAO+T,GAAA3D,EAAApQ,GAAO+T,GAAA9N,EAAAjG,IAAOuqB,eAAA,SAAAvqB,GAA4BoQ,EAAAQ,UAAA5Q,IAAA+T,GAAA3N,EAAApG,GAAA+T,GAAA3D,EAAApQ,KAA+BspB,kBAAA,SAAAtpB,EAAAE,GAAiCgU,GAAAjO,EAAA/F,EAAAF,GAASE,EAAAnE,EAAAmE,GAAOgU,GAAA9D,EAAApQ,KAASkU,GAAA9N,EAAAlG,EAAAF,IAASqpB,gBAAA,SAAArpB,GAA6B,GAAAjE,GAAAmE,EAAA+F,EAAA2K,SAAAN,EAAApQ,EAAAkG,EAAAwK,QACrd7U,GAAAD,EAAAwU,EAAAtQ,EAAA+K,KAAAhP,GAAgBuU,IAAAvU,IAAAmY,GAAA9D,EAAApQ,KAAAkU,GAAA9N,EAAArK,EAAAiE,KAA2BusB,mBAAA,WAA+BnmB,EAAAwK,QAAAwb,GAAanmB,EAAA2K,QAAAwb,KACvF,QAAAI,IAAAxsB,GAAe,QAAAE,GAAAF,EAAAE,GAAgB,GAAApE,GAAA,GAAAyoB,IAAA,SAAsBzoB,GAAAiP,KAAA,UAAiBjP,EAAAqb,UAAAjX,EAAcpE,EAAA,OAAAkE,EAAclE,EAAAijB,UAAA,EAAc,OAAA/e,EAAA6kB,YAAA7kB,EAAA6kB,WAAAE,WAAAjpB,EAAAkE,EAAA6kB,WAAA/oB,GAAAkE,EAAA8kB,YAAA9kB,EAAA6kB,WAAA/oB,EAA4F,QAAAA,GAAAkE,EAAAE,GAAgB,OAAAF,EAAA6X,KAAc,sBAAA3X,EAAAkQ,EAAAlQ,EAAAF,EAAA+K,KAAA/K,EAAA2kB,iBAAA3kB,EAAAmX,UAAAjX,GAAA,EAA0E,uBAAAA,EAAA+F,EAAA/F,EAAAF,EAAA2kB,iBAAA3kB,EAAAmX,UAAAjX,GAAA,EAAmE,mBAAkB,QAAAnE,GAAAiE,GAAc,IAAAA,IAAA,OAAkB,OAAAA,GAAA,IAAAA,EAAA6X,KAAA,IAAA7X,EAAA6X,KAA+B7X,IAAA,MAAemP,GAAAnP,EAAI,GAAAoG,GAAApG,EAAAkpB,oBAC7c,MAAdlpB,IAAAysB,WAAc,OAAalD,oBAAA,WAA+B,UAASC,oBAAA,aAAiCC,iCAAA,aAA8CiB,6BAAA,WAAyC5a,EAAA,QAAS6a,iCAAA,WAA6C7a,EAAA,QAAS8a,kBAAA,WAA8B,UAAW,IAAAxa,GAAApQ,EAAA0sB,mBAAAzmB,EAAAjG,EAAA2sB,uBAAArc,EAAAtQ,EAAA4sB,yBAAA5c,EAAAhQ,EAAA6sB,wBAAA3a,EAAAlS,EAAA8sB,gBAAAnb,EAAA3R,EAAA+sB,oBAAA5d,EAAA,KAAAuC,EAAA,KAAA/B,GAAA,CAA8K,QAAO4Z,oBAAA,SAAAvpB,GACvb,MADud0R,GACxf1B,EAAAhQ,EAAAmX,UAAAwI,eAA6BxQ,EAAAnP,EAAI2P,GAAA,GAAY6Z,oBAAA,WAAgC9X,EAAAvC,EAAA,KAASQ,GAAA,GAAK8Z,iCAAA,SAAAzpB,GAA8C,GAAA2P,EAAA,CAAM,GAAA5T,GAAA2V,CAAQ,IAAA3V,EAAA,CAAM,IAAAD,EAAAkE,EAAAjE,GAAA,CAAmB,KAAPA,EAAAuU,EAAAvU,MAAOD,EAAAkE,EAAAjE,GAAwC,MAAxBiE,GAAA+e,WAAA,EAAepP,GAAA,OAAKR,EAAAnP,EAAWE,GAAAiP,EAAAuC,GAAOvC,EAAAnP,EAAI0R,EAAA1B,EAAAjU,OAAOiE,GAAA+e,WAAA,EAAApP,GAAA,EAAAR,EAAAnP,IAA8B0qB,6BAAA,SAAA1qB,EAAAE,EAAApE,GAA4G,MAA9DoE,GAAAgS,EAAAlS,EAAAmX,UAAAnX,EAAA+K,KAAA/K,EAAA0kB,cAAAxkB,EAAApE,EAAAkE,GAA8CA,EAAAykB,YAAAvkB,EAAgB,OAAAA,GAAsByqB,iCAAA,SAAA3qB,GAA8C,MAAA2R,GAAA3R,EAAAmX,UAAAnX,EAAA0kB,cAAA1kB,IAAwC4qB,kBAAA,SAAA5qB,GAA+B,GAAAA,IACtgBmP,EAAA,QAAW,KAAAQ,EAAA,MAAA5T,GAAAiE,GAAA2P,GAAA,IAA0B,IAAA7T,GAAAkE,EAAA+K,IAAa,QAAA/K,EAAA6X,KAAA,SAAA/b,GAAA,SAAAA,IAAAsK,EAAAtK,EAAAkE,EAAA0kB,eAAA,IAAA5oB,EAAA4V,EAAoE5V,GAAEoE,EAAAF,EAAAlE,KAAAwU,EAAAxU,EAA4C,OAA7BC,GAAAiE,GAAK0R,EAAAvC,EAAAmB,EAAAtQ,EAAAmX,WAAA,MAAwB,IACpK,QAAA6V,IAAAhtB,GAAe,QAAAE,GAAAF,GAAcitB,GAAAC,GAAA,CAAS,IAAAhtB,GAAAF,EAAAmX,SAAsF,IAApEjX,EAAA0Q,UAAA5Q,GAAA8P,EAAA,OAA8B5P,EAAAitB,kBAAA,EAAsBzqB,GAAAkO,QAAA,KAAgB,EAAA5Q,EAAA+e,UAAA,UAAA/e,EAAA6kB,WAAA,CAAyC7kB,EAAA6kB,WAAAE,WAAA/kB,CAA0B,IAAAlE,GAAAkE,EAAA8kB,gBAAoBhpB,GAAAkE,MAASlE,GAAAkE,EAAA8kB,WAA0B,KAALsI,IAAK3b,EAAA3V,EAAQ,OAAA2V,GAAS,CAAE,GAAA1V,IAAA,EAAAqK,MAAA,EAAkB,KAAI,KAAK,OAAAqL,GAAS,CAAE,GAAArB,GAAAqB,EAAAsN,SAA8B,IAAZ,GAAA3O,GAAAid,EAAA5b,GAAY,IAAArB,EAAA,CAAU,GAAAnK,GAAAwL,EAAAmH,SAAkB,QAAA3S,GAAAqnB,EAAArnB,GAAgB,YAAAmK,GAAe,OAAAmd,EAAA9b,GAAaA,EAAAsN,YAAA,CAAgB,MAAM,QAAAwO,EAAA9b,GAAaA,EAAAsN,YAAA,EAAgByO,EAAA/b,EAAAmH,UAAAnH,EAAkB,MAAM,QAAA+b,EAAA/b,EAAAmH,UAChenH,EAAG,MAAM,QAAAgc,IAAA,EAAAC,EAAAjc,GAAAgc,IAAA,EAAyBhc,IAAAsT,YAAgB,MAAA4I,GAAU5xB,GAAA,EAAAqK,EAAAunB,EAAU5xB,IAAA,OAAA0V,GAAA3B,EAAA,OAAAQ,EAAAmB,EAAArL,GAAA,OAAAqL,QAAAsT,aAAiF,IAAjB6I,IAAK1tB,EAAA0Q,QAAA5Q,EAAYyR,EAAA3V,EAAQ,OAAA2V,GAAS,CAAE3V,GAAA,EAAKC,MAAA,EAAS,KAAI,KAAK,OAAA0V,GAAS,CAAE,GAAAzB,GAAAyB,EAAAsN,SAAuD,IAArC,GAAA/O,GAAA6d,EAAApc,EAAAmH,UAAAnH,GAAwB,IAAAzB,GAAA8d,EAAArc,GAAa,GAAAzB,EAAA,OAAA5J,EAAAqL,EAAArB,MAAA,UAAA0B,KAAA1B,EAAA0B,GAAAvV,IAAA6J,GAAA0L,GAAA,OAAA1L,GAAA,MAAAgK,GAAA,OAAAhK,EAAAwS,YAAAxS,IAAAwS,UAAAxI,EAAA0B,GAAAvV,IAAA6J,GAAA0L,GAAA,OAAA1L,KAAA,MAAAgK,GAAAN,EAAA,OAAA1J,EAAAyR,KAAwK,OAAAzR,EAAA+Q,UAAA4W,kBAAA3d,EAAAtN,OAA8CkrB,eAAA5d,EAAA4d,gBACzd,MAAM,eAAAC,QAAA7d,EAAAtN,MAA+B,MAAM,SAAAgN,EAAA,OAAiB,GAAAoe,GAAAzc,EAAAsT,UAAoBtT,GAAAsT,WAAA,KAAkBtT,EAAAyc,GAAM,MAAAP,GAAU7xB,GAAA,EAAAC,EAAA4xB,EAAU7xB,IAAA,OAAA2V,GAAA3B,EAAA,OAAAQ,EAAAmB,EAAA1V,GAAA,OAAA0V,QAAAsT,aAA2N,MAA3JmI,GAAAD,IAAA,EAAS,mBAAA9G,QAAAnmB,EAAAmX,WAAwCgX,QAAAlwB,QAAA0S,GAAAwd,GAAA,MAA4B,OAAAF,KAAAjuB,EAAAiuB,MAAA,KAAAvE,EAAA1pB,IAAgCE,IAAA0Q,QAAAoU,eAA2B,IAAA9kB,IAAAkuB,GAAAtc,GAAA,MAAmB5R,EAAS,QAAApE,GAAAkE,GAAc,OAAM,CAAE,GAAAE,GAAAmuB,EAAAruB,EAAA4Y,UAAA5Y,EAAAkQ,GAAApU,EAAAkE,EAAA,OAAAjE,EAAAiE,EAAAqf,QAAoDjZ,EAAApG,CAAQ,iBAAAkQ,GAAA,aAAA9J,EAAA4e,eAAA,CAAkD,OAAA5e,EAAAyR,KAAA,IACpezR,EAAAyR,IAAA,GAAAzH,GAAA,MAAcA,GAAAhK,EAAAqe,YAAArU,EAAA,OAAAA,EAAA,EAAAA,EAAA4U,cAAmD,QAAA/e,GAAAG,EAAAgZ,MAAkB,OAAAnZ,GAAS,IAAAA,EAAA+e,iBAAA,IAAA5U,KAAAnK,EAAA+e,kBAAA5U,EAAAnK,EAAA+e,gBAAA/e,IAAAoZ,OAAqFjZ,GAAA4e,eAAA5U,EAAmB,UAAAlQ,EAAA,MAAAA,EAAiS,IAA5Q,OAAApE,IAAA,OAAAA,EAAAgpB,cAAAhpB,EAAAgpB,YAAA9kB,EAAA8kB,aAAA,OAAA9kB,EAAA6kB,aAAA,OAAA/oB,EAAA+oB,aAAA/oB,EAAA+oB,WAAAE,WAAA/kB,EAAA8kB,aAAAhpB,EAAA+oB,WAAA7kB,EAAA6kB,YAAA,EAAA7kB,EAAA+e,YAAA,OAAAjjB,EAAA+oB,WAAA/oB,EAAA+oB,WAAAE,WAAA/kB,EAAAlE,EAAAgpB,YAAA9kB,EAAAlE,EAAA+oB,WAAA7kB,IAA4Q,OAAAjE,EAAA,MAAAA,EACre,WAAAD,EAAgB,CAAKkE,EAAAmX,UAAAgW,kBAAA,CAAgC,OAArDntB,EAAAlE,EAA4D,YAAY,QAAAC,GAAAiE,GAAc,GAAAE,GAAAouB,EAAAtuB,EAAA4Y,UAAA5Y,EAAAkQ,EAA6D,OAAnC,QAAAhQ,MAAApE,EAAAkE,IAAmB0C,GAAAkO,QAAA,KAAgB1Q,EAAS,QAAAkG,GAAApG,GAAc,GAAAE,GAAAquB,EAAAvuB,EAAA4Y,UAAA5Y,EAAAkQ,EAA6D,OAAnC,QAAAhQ,MAAApE,EAAAkE,IAAmB0C,GAAAkO,QAAA,KAAgB1Q,EAAS,QAAAkQ,GAAApQ,GAAc,UAAA8R,IAAa,SAAA5B,KAAAlQ,GAAA,GAAAkQ,GAAAse,EAAA,KAA+B,OAAA3b,GAASA,EAAA7C,EAAA6C,GAAAzM,EAAAyM,GAAA9W,EAAA8W,OAAkB,MAAU,OAAAA,IAAAvD,KAAeuD,EAAA7C,EAAA6C,GAAAzM,EAAAyM,GAAA9W,EAAA8W,OAAkB,UAAA3C,KAAAlQ,GAAA,GAAAkQ,GAAAse,EAAA,KAAoC,OAAA3b,GAASA,EAAA9W,EAAA8W,OAAQ,MAAU,OAAAA,IAAAvD,KAAeuD,EAAA9W,EAAA8W,GAAQ,QAAA5M,GAAAjG,EAAAE,GACnc,GADmdgtB,GAAApd,EAAA,OAAmBod,GAAA,EAAMltB,EAAAmtB,kBAC/e,EAAGntB,IAAAyuB,GAAAvuB,IAAAgQ,GAAA,OAAA2C,EAAA,CAA4B,MAAK,EAAAsQ,IAAMC,GAAAD,IAAA,KAAAA,IAAkBI,IAAA5Q,GAAK6Q,GAAA5S,QAAA+B,GAAaoR,GAAAnT,SAAA,EAAaiB,IAAI4c,EAAAzuB,EAAKkQ,EAAAhQ,EAAI2S,EAAAoS,GAAAwJ,EAAA7d,QAAA,KAAA1Q,GAAwB,GAAApE,IAAA,EAAAC,EAAA,IAAgB,KAAIqU,EAAAlQ,GAAK,MAAAwuB,GAAU5yB,GAAA,EAAAC,EAAA2yB,EAAU,KAAK5yB,GAAE,CAAE,GAAA6yB,GAAA,CAAOV,GAAAlyB,CAAK,OAAM,GAAAkK,GAAA4M,CAAQ,WAAA5M,EAAA0oB,IAAA,MAAkB,CAAK,GAAA3e,GAAAM,EAAArK,EAAAlK,EAAsC,IAAzB,OAAAiU,GAAAF,EAAA,QAAyB6e,GAAA,CAAQ,IAAY,IAAR7yB,EAAAkU,EAAIjU,EAAAmE,EAAI8P,EAAAlU,EAAQ,OAAAmK,GAAS,CAAE,OAAAA,EAAA4R,KAAc,OAAAiM,GAAA7d,EAAa,MAAM,QAAA2oB,EAAA3oB,EAAa,MAAM,QAAAnJ,EAAAmJ,EAAY,MAAM,QAAAnJ,EAAAmJ,GAAY,GAAAA,IAAA+J,GAAA/J,EAAA2S,YAAA5I,EAAA,KAAgC/J,KAAA,OAAc4M,EAAAzM,EAAAtK,GAAOsU,EAAArU,GAAK,MAAA2yB,GAAU5yB,GAAA,EAAKC,EAAA2yB,CAAK,UAAS,QACxc,MADgdxuB,GAAA+tB,GAAKU,GAAAzB,GAAA,EAASe,GACnf,KAAK,OAAA/tB,GAAAwpB,EAAAxpB,GAAgBF,EAAAmtB,iBAAAntB,EAAA4Q,QAAAgI,UAAA,KAAmD,QAAAtI,GAAAtQ,EAAAE,GAAgB,GAAApE,GAAA4G,GAAAkO,QAAA,KAAA7U,GAAA,EAAAqK,GAAA,EAAAgK,EAAA,IAAuC,QAAApQ,EAAA6X,IAAA/b,EAAAkE,EAAAkS,EAAAlS,KAAA2uB,IAAA,OAA+B,QAAA1oB,GAAAjG,EAAA,OAA2B,OAAAiG,GAAA,OAAAnK,GAAmB,CAAwG,GAAtG,IAAAmK,EAAA4R,IAAA,mBAAA5R,GAAAkR,UAAA4W,oBAAAhyB,GAAA,EAAAqU,EAAAwO,GAAA3Y,GAAAnK,EAAAmK,EAAAG,GAAA,OAAAH,EAAA4R,MAAA/b,EAAAmK,GAAsGiM,EAAAjM,GAAA,CAAS,GAAAwnB,IAAA,OAAAU,QAAA/gB,IAAAnH,IAAA,OAAAA,EAAA2S,WAAAuV,GAAA/gB,IAAAnH,EAAA2S,YAAA,WAAmF9c,GAAA,KAAOsK,GAAA,EAAKH,IAAA,OAAc,UAAAnK,EAAA,CAAa,OAAAsyB,QAAA,GAAAS,MAAwBT,GAAAU,IAAAhzB,EAAU,IAAAwU,GAAA,EAASrK,GAAAjG,CAAI,IAAGA,EAAA,OAAAiG,EAAA4R,KAAgB,+BAAA7H,GACzf/J,EAAA8oB,YAAAb,EAAAjoB,EAAA+oB,aAAgCnzB,EAAA+iB,GAAA3Y,GAAYzJ,EAAA,IAAWwT,KAAAxT,EAAAoiB,GAAA5O,IAAaA,EAAAke,EAAKryB,EAAA,aAAAA,GAAA,YAAAmU,EAAA,QAAAA,EAAAif,SAAA5iB,QAAA,oBAAA2D,EAAAkf,WAAA,IAAA1yB,EAAA,gBAAAA,EAAA,OAA4H,MAAAwD,EAAQ,SAAAnE,EAAA,GAAayU,GAAAzU,EAAKoK,IAAA,aAAcA,EAASA,GAAAqK,EAAItQ,EAAA4e,GAAA5e,GAAQ,OAAA8R,QAAA,GAAAyW,MAAsBroB,GAAGivB,cAAAnvB,EAAAguB,eAAA/nB,EAAAnD,MAAA5C,EAAAkvB,cAAArzB,EAAAD,EAAAqb,UAAA,KAAAkY,mBAAAtzB,EAAAuzB,kBAAAlf,EAAAmf,UAAAnpB,GAAgI0L,GAAApI,IAAA5N,EAAAoE,EAAW,KAAI,GAAApD,GAAAoD,EAAA4C,KAAchG,MAAA0yB,2BAAAnsB,QAAAP,MAAAhG,GAAiD,MAAA2yB,GAAUA,GACnfA,EAAAD,2BAAAnsB,QAAAP,MAAA2sB,GAA4F,MAA5CxC,KAAA,OAAAkB,QAAA,GAAAU,MAAAV,GAAAW,IAAAhzB,IAAA6U,EAAA7U,GAA4CA,EAA2B,MAAlB,QAAAmyB,QAAA/tB,GAAkB,KAAY,QAAA8P,GAAAhQ,GAAc,cAAA8R,QAAA1E,IAAApN,IAAA,OAAAA,EAAA4Y,WAAA9G,GAAA1E,IAAApN,EAAA4Y,YAAoE,QAAA1G,GAAAlS,GAAc,cAAAouB,QAAAhhB,IAAApN,IAAA,OAAAA,EAAA4Y,WAAAwV,GAAAhhB,IAAApN,EAAA4Y,YAAuE,QAAAjH,KAAa,eAAAxB,IAAA,YAA+B,QAAAhB,GAAAnP,GAAc,WAAA0vB,IAAAxC,EAAAD,GAAA,EAAA/c,GAAAyf,GAAA,EAAA3vB,EAAA4kB,mBAAAjT,IAAA,EAA6D,QAAAD,GAAA1R,EAAAE,GAAgB,MAAAyP,GAAA3P,EAAAE,GAAA,GAAiB,QAAAyP,GAAA3P,EAAAE,GAAgB,KAAK,OAAAF,GAAS,CACvU,IADyU,IAAAA,EAAAglB,gBAClehlB,EAAAglB,eAAA9kB,KAAAF,EAAAglB,eAAA9kB,GAAsC,OAAAF,EAAA4Y,YAAA,IAAA5Y,EAAA4Y,UAAAoM,gBAAAhlB,EAAA4Y,UAAAoM,eAAA9kB,KAAAF,EAAA4Y,UAAAoM,eAAA9kB,GAAmH,OAAAF,EAAA,eAAAA,EAAA6X,IACxE,KAD4G,IAAA/b,GAAAkE,EAAAmX,WAAkB+V,GAAApxB,IAAA2yB,GAAAvuB,EAAAgQ,IAAA2C,EAAA4b,EAAA,KAAAve,EAAA,EAAkC,IAAAnU,GAAAD,EAAAsK,EAAAlG,CAA4B,IAAhB0vB,GAAAC,IAAA/f,EAAA,OAAgB,OAAA/T,EAAA+zB,kBAAA/zB,EAAAg0B,wBAAA3pB,EAAA,OAAAmL,IAAAye,GAAAze,GAAAxV,IAAA+zB,kBAAA/zB,IAAAwV,MAAAue,kBAAA/zB,EAAAwV,GAAAue,kBAAAE,QAAmJ,CAAK,GAAA5f,GAAArU,EAAAg0B,yBAAgC,IAAA3f,GAAAhK,EAAAgK,KAAArU,EAAAg0B,wBAAA3pB,GAA0C6pB,KAAAC,GAC/eC,KAAAC,GAAAr0B,EAAAs0B,GAAA,EAAAx0B,EAAAu0B,GAAAC,KAAA,IAAAjqB,EAAA+L,EAAA,QAAAF,EAAA7L,KAA+C8mB,GAAApxB,IAAA2yB,GAAAvuB,EAAAgQ,IAAA2C,EAAA4b,EAAA,KAAAve,EAAA,GAA6ClQ,IAAA,QAAe,QAAA2Q,GAAA3Q,GAAc2P,EAAA3P,EAAA,MAAU,QAAAmQ,KAAa,MAAAqe,GAAA,IAAA8B,IAAAC,GAAA,MAA6B,QAAAte,GAAAjS,GAAc,OAAAwwB,GAAA,CAAW,GAAAxwB,EAAAwwB,GAAA,MAAeC,GAAAC,IAAO,GAAAxwB,GAAAowB,IAAAC,CAAcC,IAAAxwB,EAAK0wB,GAAAC,EAAA5gB,GAAStM,QAAA,IAAAzD,EAAA,GAAAE,IAAqB,QAAA+Q,KAAa,GAAAjR,GAAA,EAAAE,EAAA,IAAe,WAAAqR,GAAA,OAAAzV,GAAAyV,GAAAxV,EAAAi0B,GAA6B,OAAAj0B,GAAS,CAAE,GAAAqK,GAAArK,EAAAg0B,uBAAgC,QAAA3pB,EAAA,CAA6C,IAAnC,OAAAtK,GAAA,OAAAyV,KAAAzB,EAAA,OAAmC/T,MAAA+zB,kBAAA,CAA4BE,GAAAze,GAAAxV,EAAA+zB,kBAAA,IAA8B,OAAM,GAAA/zB,IAAAi0B,MAAA5pB,EAAArK,EAAA+zB,kBAC9dve,GAAAue,kBAAA1pB,EAAArK,EAAA+zB,kBAAA,SAA+C,IAAA/zB,IAAAwV,GAAA,CAAeA,GAAAzV,EAAIyV,GAAAue,kBAAAE,GAAuBj0B,EAAA+zB,kBAAA,IAAyB,OAAMh0B,EAAAg0B,kBAAA/zB,EAAA+zB,kBAAA/zB,EAAA+zB,kBAAA,KAAsE/zB,EAAAD,EAAAg0B,sBAAsB,CAA2B,IAAtB,IAAA9vB,GAAAoG,EAAApG,OAAAoG,EAAAlG,EAAAnE,GAAsBA,IAAAwV,GAAA,KAAezV,GAAAC,EAAIA,IAAA+zB,mBAAuBh0B,EAAAs0B,GAAK,OAAAt0B,OAAAoE,EAAA0vB,QAAA,EAA0BQ,GAAAlwB,EAAKmwB,GAAArwB,EAAK,QAAA+P,GAAA/P,GAAcmS,EAAA,EAAAnS,GAAO,QAAAmS,GAAAnS,EAAAE,GAAqB,IAAL0wB,GAAA1wB,EAAK+Q,IAAQ,OAAAmf,IAAA,IAAAC,KAAA,IAAArwB,GAAAqwB,IAAArwB,KAAA6wB,IAAuCh1B,EAAAu0B,GAAAC,IAAApf,GAAuE,IAAzD,OAAA2f,KAAAJ,GAAA,EAAAE,IAAA,GAAwB,IAAAL,IAAApe,EAAAoe,IAAcO,GAAA,KAAQC,IAAA,EAAMjB,GAAA,EAAKkB,GAAA,KAAA9wB,GAAA+wB,MACle,KAAAD,IAAA,EAAA9wB,EAAc,QAAAnE,GAAAmE,EAAAlE,GAAyC,GAAzBm0B,IAAAngB,EAAA,OAAmBmgB,IAAA,EAAMn0B,GAAAqU,IAAA,CAAW,GAAApU,GAAAiE,EAAAgxB,YAAqB,QAAAj1B,GAAAiE,EAAAgxB,aAAA,KAAAhxB,EAAA+vB,wBAAA7vB,EAAAnE,KAAAiE,EAAAgxB,aAAA,aAAAj1B,EAAAkK,EAAAjG,EAAAlE,MAAAkE,EAAA+vB,wBAAA7vB,EAAAnE,SAAwIA,GAAAiE,EAAAgxB,aAAA,OAAAj1B,GAAAiE,EAAAgxB,aAAA,KAAAhxB,EAAA+vB,wBAAA7vB,EAAAnE,KAAAiE,EAAAgxB,aAAA,aAAAj1B,EAAAkK,EAAAjG,EAAAlE,MAAAwT,IAAAtP,EAAAgxB,aAAAj1B,EAAAiE,EAAA+vB,wBAAA7vB,EAAAnE,IAAmLk0B,KAAA,EAAM,QAAA3gB,KAAa,eAAAshB,OAAAK,gBAAAC,MAAAL,IAAA,GAAiD,QAAAnH,GAAA1pB,GAAe,OAAAowB,IAAAtgB,EAAA,OAC9dsgB,GAAAL,wBAAA,EAA6Be,SAAA,EAAAC,GAAA/wB,GAAiB,GAAAyQ,GAAA0b,GAAAnsB,GAAAxD,EAAAgwB,GAAAxsB,GAAAlD,EAAA2T,EAAAga,iBAAAmE,EAAAne,EAAA8Z,eAAA1Y,EAAApB,EAAA8b,mBAAA4E,EAAArI,GAAA9oB,EAAAyQ,EAAAjU,EAAAkV,EAAAvC,GAAAmf,EAAA6C,EAAAxH,UAAA4E,EAAA4C,EAAArH,gBAAAuE,EAAAtE,GAAA/pB,EAAAyQ,EAAAjU,GAAAsuB,YAAqKra,GAAAsa,GAAA/qB,EAAAsQ,EAAU,IAAA+c,GAAA5c,EAAAmb,uBAAA2B,EAAA9c,EAAAob,gBAAA6B,EAAAjd,EAAAqb,eAAA0B,EAAA/c,EAAAsb,WAAA8B,EAAApd,EAAAub,iBAAA8B,EAAArd,EAAAwb,gBAAAqB,EAAA7c,EAAAyb,gBAAAoE,EAAAtwB,EAAAoxB,IAAAT,EAAA3wB,EAAAqxB,yBAAAZ,EAAAzwB,EAAAsxB,uBAAA3B,EAAA3vB,EAAAmpB,kBAAAiE,EAAAptB,EAAAuxB,iBAAA3D,EAAA5tB,EAAAwxB,iBACpOjB,EAAAD,IAAA9B,EAAA,EAAAkB,EAAA,EAAAxC,GAAA,EAAAra,EAAA,KAAA4b,EAAA,KAAAve,EAAA,EAAAuB,EAAA,KAAAK,GAAA,KAAAsc,GAAA,KAAAD,GAAA,KAAAF,GAAA,KAAAU,IAAA,EAAA1B,IAAA,EAAAQ,IAAA,EAAAuC,GAAA,KAAAze,GAAA,KAAAif,GAAA,EAAAE,IAAA,EAAAT,IAAA,EAAAG,GAAA,KAAAC,GAAA,EAAAQ,IAAA,EAAAC,IAAA,EAAAC,GAAA,KAAAH,GAAA,KAAAV,IAAA,EAAAC,IAAA,EAAAN,GAAA,IAAAD,GAAA,EAAAsB,GAAA,CAAyM,QAAOO,uBAAA9f,EAAA+f,0BAAAviB,EAAAwiB,aAAAjgB,EAAAkgB,eAAA,SAAA5xB,EAAAE,GAAiG,GAAApE,GAAAo0B,EAASA,KAAA,CAAM,KAAI,MAAAlwB,GAAAE,GAAY,SAAQgwB,GAAAp0B,IAAAm0B,IAAA9d,EAAA,UAAuB0f,iBAAA,SAAA7xB,GAA8B,GAAAkwB,KAAAC,GAAA,CAAYA,IAAA,CAAM,KAAI,MAAAnwB,KAAW,QAAQmwB,IAAA,GAAO,MAAAnwB,MAAW8xB,UAAA,SAAA9xB,GAAuB,GAAAE,GAAAgwB,EAASA,KAAA,CAAM,KAAIlwB,EAAA,CAAG,GAAAlE,GACrf4zB,CAAGA,GAAA,CAAK,KAAI,GAAA3zB,GAAAiE,GAAU,MAAAA,GAAQ,QAAQ0vB,EAAA5zB,EAAKC,MAAA,GAAS,MAAAA,GAAS,QAAQm0B,GAAAhwB,EAAA+vB,IAAAngB,EAAA,OAAAqC,EAAA,UAAmC4f,gBAAA,SAAA/xB,GAA6B,GAAAE,GAAAwvB,CAASA,GAAA/d,GAAO,KAAI,MAAA3R,KAAW,QAAQ0vB,EAAAxvB,KAC5K,QAAA8xB,IAAAhyB,GAAe,QAAAE,GAAAF,GAAsB,MAARA,GAAAsf,GAAAtf,GAAQ,OAAAA,EAAA,KAAAA,EAAAmX,UAAiC,GAAArb,GAAAkE,EAAAirB,iBAA0BjrB,GAAAgtB,GAAAhtB,EAAQ,IAAAjE,GAAAiE,EAAAyxB,uBAAArrB,EAAApG,EAAA0xB,0BAAAthB,EAAApQ,EAAA2xB,YAA8E,QAAOM,gBAAA,SAAAjyB,EAAAE,GAA8B,GAAApE,GAAA,GAAAyoB,IAAA,SAA2M,OAArLvkB,IAAG4Q,QAAA9U,EAAA6jB,cAAA3f,EAAAylB,gBAAA,KAAAsK,wBAAA,EAAA5C,kBAAA,EAAA6D,aAAA,KAAAxhB,QAAA,KAAAyZ,eAAA,KAAAY,QAAA3pB,EAAA4vB,kBAAA,MAAkLh0B,EAAAqb,UAAAnX,GAAqBkyB,gBAAA,SAAAlyB,EAAAE,EAAApE,EAAAoW,GAAmC,GAAAjM,GAAA/F,EAAA0Q,OAAgB,IAAA9U,EAAA,CAAMA,EACpfA,EAAAmjB,mBAAsB,IAAA3O,EAAMpQ,GAAA,CAAwC,IAArC,IAAA4e,GAAAhjB,IAAA,IAAAA,EAAA+b,KAAA/H,EAAA,OAAqCQ,EAAAxU,EAAQ,IAAAwU,EAAAuH,KAAU,CAAE,GAAAyL,GAAAhT,GAAA,CAAUA,IAAA6G,UAAAkN,yCAAwD,MAAAnkB,IAAQoQ,IAAA,SAAAR,EAAA,OAAgCQ,IAAA6G,UAAA3H,QAAsB1T,EAAAwnB,GAAAxnB,GAAAooB,GAAApoB,EAAAwU,SAAkBxU,GAAA6W,EAAS,QAAAzS,EAAAsP,QAAAtP,EAAAsP,QAAA1T,EAAAoE,EAAA+oB,eAAAntB,EAAgDoE,EAAAgS,EAAIhS,MAAA,KAAAA,EAAA,KAAAA,EAAoBgS,EAAA,MAAAlS,GAAA,MAAAA,EAAA+K,MAAA,MAAA/K,EAAA+K,KAAAnO,YAAA,IAAAoD,EAAA+K,KAAAnO,UAAAkW,+BAAA/W,IAAAqK,EAAAH,GAA+G4gB,GAAA5gB,GAAM+e,eAAA9S,EAAA6U,cAA+B6C,QAAA5pB,GAAU+E,SAAA7E,EAAA+mB,WAAA,EAAAC,UAAA,EACzdG,aAAA,KAAA1f,KAAA,OAA8ByI,EAAAnK,EAAAiM,IAAO0f,eAAA5xB,EAAA4xB,eAAAC,iBAAA7xB,EAAA6xB,iBAAAE,gBAAA/xB,EAAA+xB,gBAAAD,UAAA9xB,EAAA8xB,UAAAK,sBAAA,SAAAnyB,GAA2K,GAAZA,IAAA4Q,SAAY5Q,EAAAof,MAAA,WAAwB,QAAApf,EAAAof,MAAAvH,KAAoB,aAAA/b,GAAAkE,EAAAof,MAAAjI,UAAmC,eAAAnX,GAAAof,MAAAjI,YAAkCib,iBAAAlyB,EAAAmyB,8BAAA,SAAAryB,GAAsE,MAARA,GAAAuf,GAAAvf,GAAQ,OAAAA,EAAA,KAAAA,EAAAmX,WAAiCmb,mBAAA,SAAAtyB,GAAgC,GAAAlE,GAAAkE,EAAAuyB,uBAAgC,OAAA5M,IAAA/V,MACxe5P,GAAGwyB,wBAAA,SAAAxyB,GAAoC,MAAAE,GAAAF,IAAYuyB,wBAAA,SAAAvyB,GAAqC,MAAAlE,KAAAkE,GAAA,WAA4G,QAAAyyB,IAAAzyB,EAAAE,EAAApE,GAAmB,GAAAC,GAAA,EAAA2C,UAAAC,YAAA,KAAAD,UAAA,GAAAA,UAAA,OAAkE,QAAO8R,SAAAoY,GAAAhqB,IAAA,MAAA7C,EAAA,QAAAA,EAAAsU,SAAArQ,EAAA2f,cAAAzf,EAAAuc,eAAA3gB,GAKhS,QAAA42B,IAAA1yB,GAAe,QAAA2yB,GAAA91B,eAAAmD,KAAiC4yB,GAAA/1B,eAAAmD,KAAiC6yB,GAAAxrB,KAAArH,GAAA2yB,GAAA3yB,IAAA,GAA8B4yB,GAAA5yB,IAAA,GAAS,IACxH,QAAA8yB,IAAA9yB,EAAAE,EAAApE,GAAmB,GAAAC,GAAAyY,EAAAtU,EAAY,IAAAnE,GAAAuY,EAAApU,EAAApE,GAAA,CAAe,GAAAsK,GAAArK,EAAAg3B,cAAuB3sB,KAAApG,EAAAlE,GAAA,MAAAA,GAAAC,EAAA0Y,kBAAA3Y,GAAAC,EAAAi3B,iBAAAC,MAAAn3B,IAAAC,EAAAm3B,yBAAA,EAAAp3B,GAAAC,EAAA4Y,4BAAA,IAAA7Y,EAAAq3B,GAAAnzB,EAAAE,GAAAnE,EAAAq3B,gBAAApzB,EAAAjE,EAAAiiB,cAAAliB,GAAAoE,EAAAnE,EAAAs3B,eAAAjtB,EAAArK,EAAAu3B,oBAAAtzB,EAAAuzB,eAAAntB,EAAAlG,EAAA,GAAApE,GAAAC,EAAA0Y,iBAAA1Y,EAAA4Y,4BAAA,IAAA7Y,EAAAkE,EAAAuc,aAAArc,EAAA,IAAAF,EAAAuc,aAAArc,EAAA,GAAApE,QAAmW03B,IAAAxzB,EAAAE,EAAAoU,EAAApU,EAAApE,KAAA,MACxa,QAAA03B,IAAAxzB,EAAAE,EAAApE,GAAmB42B,GAAAxyB,KAAA,MAAApE,EAAAkE,EAAAyzB,gBAAAvzB,GAAAF,EAAAuc,aAAArc,EAAA,GAAApE,IAA6D,QAAAq3B,IAAAnzB,EAAAE,GAAiB,GAAApE,GAAA0Y,EAAAtU,EAAYpE,IAAAoE,EAAApE,EAAAi3B,gBAAA7yB,EAAAF,MAAA,IAAAlE,EAAAs3B,gBAAApzB,EAAAlE,EAAAkiB,eAAAliB,EAAA2Y,iBAAA,GAAAzU,EAAAyzB,gBAAA33B,EAAAu3B,eAAArzB,EAAAyzB,gBAAAvzB,GAC7G,QAAAwzB,IAAA1zB,EAAAE,GAAiB,GAAApE,GAAAoE,EAAA8B,MAAAjG,EAAAmE,EAAAkd,OAA0B,OAAAxN,KAAU7E,SAAA,GAAA4oB,SAAA,GAAAC,QAAA,GAAAC,QAAA,IAA8C3zB,GAAI4zB,mBAAA,GAAAC,iBAAA,GAAA/xB,MAAA,MAAAlG,IAAAkE,EAAAg0B,cAAAC,aAAA7W,QAAA,MAAArhB,IAAAiE,EAAAg0B,cAAAE,iBAA0I,QAAAC,IAAAn0B,EAAAE,GAAiB,GAAApE,GAAAoE,EAAA6zB,YAAqB/zB,GAAAg0B,eAAiBE,eAAA,MAAAh0B,EAAAkd,QAAAld,EAAAkd,QAAAld,EAAA4zB,eAAAG,aAAA,MAAA/zB,EAAA8B,MAAA9B,EAAA8B,MAAAlG,EAAAs4B,WAAA,aAAAl0B,EAAA6K,MAAA,UAAA7K,EAAA6K,KAAA,MAAA7K,EAAAkd,QAAA,MAAAld,EAAA8B,OACxS,QAAAqyB,IAAAr0B,EAAAE,GAA6B,OAAZA,IAAAkd,UAAY0V,GAAA9yB,EAAA,UAAAE,GAA2B,QAAAo0B,IAAAt0B,EAAAE,GAAiBm0B,GAAAr0B,EAAAE,EAAQ,IAAApE,GAAAoE,EAAA8B,KAAc,OAAAlG,EAAA,IAAAA,GAAA,KAAAkE,EAAAgC,MAAAhC,EAAAgC,MAAA,IAA8C,WAAA9B,EAAA6K,MAA2B7K,EAAAq0B,WAAAv0B,EAAAgC,QAAA,GAAAlG,GAAAoE,GAAApE,GAAAoE,GAAAF,EAAAgC,OAAAlG,KAAAkE,EAAAgC,MAAA,GAAAlG,IAAgEkE,EAAAgC,QAAA,GAAAlG,IAAAkE,EAAAgC,MAAA,GAAAlG,IAAoC,MAAAoE,EAAA8B,OAAA,MAAA9B,EAAA6zB,cAAA/zB,EAAA+zB,eAAA,GAAA7zB,EAAA6zB,eAAA/zB,EAAA+zB,aAAA,GAAA7zB,EAAA6zB,cAAA,MAAA7zB,EAAAkd,SAAA,MAAAld,EAAA4zB,iBAAA9zB,EAAA8zB,iBAAA5zB,EAAA4zB,iBAC5Q,QAAAU,IAAAx0B,EAAAE,GAAiB,OAAAA,EAAA6K,MAAe,8BAAiC,8FAAA/K,EAAAgC,MAAA,GAA+GhC,EAAAgC,MAAAhC,EAAA+zB,YAAuB,MAAM,SAAA/zB,EAAAgC,MAAAhC,EAAAgC,MAAwB9B,EAAAF,EAAAhE,KAAS,KAAAkE,IAAAF,EAAAhE,KAAA,IAAoBgE,EAAA8zB,gBAAA9zB,EAAA8zB,eAAmC9zB,EAAA8zB,gBAAA9zB,EAAA8zB,eAAmC,KAAA5zB,IAAAF,EAAAhE,KAAAkE,GAAmB,QAAAu0B,IAAAz0B,GAAe,GAAAE,GAAA,EAAuG,OAA9Fw0B,IAAAxhB,SAAAjV,QAAA+B,EAAA,SAAAA,GAAkC,MAAAA,GAAA,iBAAAA,IAAA,iBAAAA,KAAAE,GAAAF,KAA4DE,EACjd,QAAAy0B,IAAA30B,EAAAE,GAA2E,MAA1DF,GAAA4P,IAAKS,aAAA,IAAgBnQ,IAAIA,EAAAu0B,GAAAv0B,EAAAmQ,aAAArQ,EAAAqQ,SAAAnQ,GAAiCF,EAAS,QAAA40B,IAAA50B,EAAAE,EAAApE,EAAAC,GAAiC,GAAZiE,IAAAwC,QAAYtC,EAAA,CAAMA,IAAK,QAAAkG,GAAA,EAAYA,EAAAtK,EAAA6C,OAAWyH,IAAAlG,EAAA,IAAApE,EAAAsK,KAAA,CAAmB,KAAAtK,EAAA,EAAQA,EAAAkE,EAAArB,OAAW7C,IAAAsK,EAAAlG,EAAArD,eAAA,IAAAmD,EAAAlE,GAAAkG,OAAAhC,EAAAlE,GAAA+4B,WAAAzuB,IAAApG,EAAAlE,GAAA+4B,SAAAzuB,MAAArK,IAAAiE,EAAAlE,GAAAg5B,iBAAA,OAA4G,CAAmB,IAAdh5B,EAAA,GAAAA,EAAOoE,EAAA,KAAOkG,EAAA,EAAQA,EAAApG,EAAArB,OAAWyH,IAAA,CAAK,GAAApG,EAAAoG,GAAApE,QAAAlG,EAAiE,MAA9CkE,GAAAoG,GAAAyuB,UAAA,OAAiB94B,IAAAiE,EAAAoG,GAAA0uB,iBAAA,GAAoC,QAAA50B,GAAAF,EAAAoG,GAAAiR,WAAAnX,EAAAF,EAAAoG,IAAkC,OAAAlG,MAAA20B,UAAA,IAC9b,QAAAE,IAAA/0B,EAAAE,GAAiB,GAAApE,GAAAoE,EAAA8B,KAAchC,GAAAg0B,eAAiBC,aAAA,MAAAn4B,IAAAoE,EAAA6zB,aAAAiB,cAAA90B,EAAA+0B,UAAgE,QAAAC,IAAAl1B,EAAAE,GAAgE,MAA/C,OAAAA,EAAAi1B,yBAAArlB,EAAA,MAA+CF,MAAW1P,GAAI8B,UAAA,GAAA+xB,iBAAA,GAAA1jB,SAAA,GAAArQ,EAAAg0B,cAAAC,eAA4E,QAAAmB,IAAAp1B,EAAAE,GAAiB,GAAApE,GAAAoE,EAAA8B,KAAc,OAAAlG,MAAAoE,EAAA6zB,aAAA7zB,IAAAmQ,SAAA,MAAAnQ,IAAA,MAAApE,GAAAgU,EAAA,MAAA/I,MAAAoB,QAAAjI,KAAA,GAAAA,EAAAvB,QAAAmR,EAAA,MAAA5P,IAAA,IAAApE,EAAA,GAAAoE,GAAA,MAAApE,MAAA,KAAwJkE,EAAAg0B,eAAiBC,aAAA,GAAAn4B,GACnd,QAAAu5B,IAAAr1B,EAAAE,GAAiB,GAAApE,GAAAoE,EAAA8B,KAAc,OAAAlG,MAAA,GAAAA,MAAAkE,EAAAgC,QAAAhC,EAAAgC,MAAAlG,GAAA,MAAAoE,EAAA6zB,eAAA/zB,EAAA+zB,aAAAj4B,IAAoF,MAAAoE,EAAA6zB,eAAA/zB,EAAA+zB,aAAA7zB,EAAA6zB,cAAsD,QAAAuB,IAAAt1B,GAAe,GAAAE,GAAAF,EAAAkhB,WAAoBhhB,KAAAF,EAAAg0B,cAAAC,eAAAj0B,EAAAgC,MAAA9B,GAC5M,QAAAq1B,IAAAv1B,GAAe,OAAAA,GAAU,4CAA8C,sDAAuD,+CAA8C,QAAAw1B,IAAAx1B,EAAAE,GAAiB,aAAAF,GAAA,iCAAAA,EAAAu1B,GAAAr1B,GAAA,+BAAAF,GAAA,kBAAAE,EAAA,+BAAAF,EAE7L,QAAAy1B,IAAAz1B,EAAAE,GAAiB,GAAAA,EAAA,CAAM,GAAApE,GAAAkE,EAAAghB,UAAmB,IAAAllB,OAAAkE,EAAA01B,WAAA,IAAA55B,EAAAugB,SAAqD,YAAdvgB,EAAA65B,UAAAz1B,GAAsBF,EAAAkhB,YAAAhhB,EAGvG,QAAA01B,IAAA51B,EAAAE,GAAiBF,IAAA61B,KAAU,QAAA/5B,KAAAoE,GAAA,GAAAA,EAAArD,eAAAf,GAAA,CAAuC,GAAAC,GAAA,IAAAD,EAAA6P,QAAA,MAA0BvF,EAAAtK,EAAQsU,EAAAlQ,EAAApE,EAAWsK,GAAA,MAAAgK,GAAA,kBAAAA,IAAA,KAAAA,EAAA,GAAArU,GAAA,iBAAAqU,IAAA,IAAAA,GAAA0lB,GAAAj5B,eAAAuJ,IAAA0vB,GAAA1vB,IAAA,GAAAgK,GAAAjE,OAAAiE,EAAA,KAA2H,UAAAtU,MAAA,YAA4BC,EAAAiE,EAAA+1B,YAAAj6B,EAAAsK,GAAApG,EAAAlE,GAAAsK,GACtQ,QAAA4vB,IAAAh2B,EAAAE,EAAApE,GAAmBoE,IAAA+1B,GAAAj2B,KAAA,MAAAE,EAAAmQ,UAAA,MAAAnQ,EAAAi1B,0BAAArlB,EAAA,MAAA9P,EAAAlE,KAAA,MAAAoE,EAAAi1B,0BAAA,MAAAj1B,EAAAmQ,UAAAP,EAAA,uBAAA5P,GAAAi1B,yBAAA,UAAAj1B,GAAAi1B,yBAAArlB,EAAA,aAAA5P,EAAA21B,OAAA,iBAAA31B,GAAA21B,OAAA/lB,EAAA,KAAAhU,MACnB,QAAAo6B,IAAAl2B,EAAAE,GAAiB,QAAAF,EAAA2L,QAAA,4BAAAzL,GAAAi2B,EAAoD,QAAAn2B,GAAU,yKAAkL,mBACjQ,QAAAo2B,IAAAp2B,EAAAE,GAAiBF,EAAA,IAAAA,EAAAqc,UAAA,KAAArc,EAAAqc,SAAArc,IAAAq2B,aAAoD,IAAAv6B,GAAA6kB,GAAA3gB,EAAYE,GAAA8V,GAAA9V,EAAQ,QAAAnE,GAAA,EAAYA,EAAAmE,EAAAvB,OAAW5C,IAAA,CAAK,GAAAqK,GAAAlG,EAAAnE,EAAWD,GAAAe,eAAAuJ,IAAAtK,EAAAsK,KAAA,cAAAA,EAAA+Z,GAAA,qBAAAngB,GAAA,aAAAoG,GAAA,YAAAA,GAAA+Z,GAAA,mBAAAngB,GAAAmgB,GAAA,iBAAAngB,GAAAlE,EAAAw6B,SAAA,EAAAx6B,EAAAy6B,UAAA,iBAAAnwB,GAAAkW,GAAA,cAAA6D,GAAA,qBAAAngB,GAAAlE,EAAA06B,WAAA,gBAAApwB,GAAAkW,GAAA,aAAA6D,GAAA,mBAAAngB,GAAAlE,EAAA26B,UAAA,GAAAC,GAAA75B,eAAAuJ,IAAA6M,GAAA7M,EAAAswB,GAAAtwB,GAAApG,GAAAlE,EAAAsK,IAAA,IAE1G,QAAAuwB,IAAA32B,EAAAE,EAAApE,EAAAC,GAAqS,MAAhRD,GAAA,IAAAA,EAAAugB,SAAAvgB,IAAAu6B,cAAmCt6B,IAAA66B,KAAA76B,EAAAw5B,GAAAv1B,IAAkBjE,IAAA66B,GAAA,WAAA52B,KAAAlE,EAAAmT,cAAA,OAAAjP,EAAA62B,UAAA,qBAAA72B,IAAA0rB,YAAA1rB,EAAAghB,aAAAhhB,EAAA,iBAAAE,GAAAi2B,GAAAr6B,EAAAmT,cAAAjP,GAAqKm2B,GAAAj2B,EAAAi2B,KAAQr6B,EAAAmT,cAAAjP,KAAAlE,EAAAg7B,gBAAA/6B,EAAAiE,GAA8CA,EAAS,QAAA+2B,IAAA/2B,EAAAE,GAAiB,WAAAA,EAAAmc,SAAAnc,IAAAm2B,eAAAxwB,eAAA7F,GACrV,QAAAg3B,IAAAh3B,EAAAE,EAAApE,EAAAC,GAAqB,GAAAqK,GAAA8vB,GAAAh2B,EAAApE,EAAc,QAAAoE,GAAU,0BAAA+S,GAAA,iBAAAjT,EAAkD,IAAAoQ,GAAAtU,CAAQ,MAAM,6BAAAsU,IAAA6mB,OAAAp6B,eAAAuT,IAAA6C,GAAA7C,EAAA6mB,GAAA7mB,GAAApQ,EAAyEoQ,GAAAtU,CAAI,MAAM,cAAAmX,GAAA,mBAAAjT,GAAsCoQ,EAAAtU,CAAI,MAAM,uBAAAmX,GAAA,mBAAAjT,GAAgDiT,GAAA,iBAAAjT,GAAsBoQ,EAAAtU,CAAI,MAAM,YAAAmX,GAAA,mBAAAjT,GAAoCiT,GAAA,qBAAAjT,GAA0BoQ,EAAAtU,CAAI,MAAM,eAAAmX,GAAA,qBAAAjT,GAAyCoQ,EAAAtU,CAAI,MAAM,aAAAq4B,GAAAn0B,EAAAlE,GAAqBsU,EAAAsjB,GAAA1zB,EAAAlE,GAAUmX,GAAA,uBAAAjT,GAC1do2B,GAAAr6B,EAAA,WAAiB,MAAM,cAAAqU,EAAAukB,GAAA30B,EAAAlE,EAAwB,MAAM,cAAAi5B,GAAA/0B,EAAAlE,GAAsBsU,EAAAR,MAAM9T,GAAIkG,UAAA,KAAeiR,GAAA,uBAAAjT,GAA4Bo2B,GAAAr6B,EAAA,WAAiB,MAAM,gBAAAq5B,GAAAp1B,EAAAlE,GAAwBsU,EAAA8kB,GAAAl1B,EAAAlE,GAAUmX,GAAA,uBAAAjT,GAA4Bo2B,GAAAr6B,EAAA,WAAiB,MAAM,SAAAqU,EAAAtU,EAAYk6B,GAAA91B,EAAAkQ,EAAA8mB,GAAW,IAAA5mB,GAAArK,EAAAmK,CAAU,KAAAE,IAAArK,GAAA,GAAAA,EAAApJ,eAAAyT,GAAA,CAAmC,GAAAN,GAAA/J,EAAAqK,EAAW,WAAAA,EAAAslB,GAAA51B,EAAAgQ,EAAAknB,IAAA,4BAAA5mB,EAAA,OAAAN,MAAAmnB,WAAA,KAAAC,GAAAp3B,EAAAgQ,GAAA,aAAAM,EAAA,iBAAAN,IAAA,aAAA9P,GAAA,KAAA8P,IAAAylB,GAAAz1B,EAAAgQ,GAAA,iBAAAA,IAAAylB,GAAAz1B,EAC3T,GAAAgQ,GAAA,mCAAAM,GAAA,6BAAAA,GAAA,cAAAA,IAAAyF,GAAAlZ,eAAAyT,GAAA,MAAAN,GAAAomB,GAAAr6B,EAAAuU,GAAAlK,EAAAotB,GAAAxzB,EAAAsQ,EAAAN,GAAA,MAAAA,GAAA8iB,GAAA9yB,EAAAsQ,EAAAN,IAAoK,OAAA9P,GAAU,YAAAgd,GAAAld,GAAmBw0B,GAAAx0B,EAAAlE,EAAQ,MAAM,gBAAAohB,GAAAld,GAAsBs1B,GAAAt1B,EAAAlE,EAAQ,MAAM,oBAAAA,EAAAkG,OAAAhC,EAAAuc,aAAA,QAAAzgB,EAAAkG,MAA6D,MAAM,cAAAhC,EAAAi1B,WAAAn5B,EAAAm5B,SAAsC/0B,EAAApE,EAAAkG,MAAU,MAAA9B,EAAA00B,GAAA50B,IAAAlE,EAAAm5B,SAAA/0B,GAAA,SAAApE,EAAAi4B,cAAAa,GAAA50B,IAAAlE,EAAAm5B,SAAAn5B,EAAAi4B,cAAA,EAA2F,MAAM,4BAAA3jB,GAAAinB,UAAAr3B,EAAAs3B,QACvcznB,KACA,QAAA0nB,IAAAv3B,EAAAE,EAAApE,EAAAC,EAAAqK,GAAuB,GAAAgK,GAAA,IAAW,QAAAlQ,GAAU,YAAApE,EAAA43B,GAAA1zB,EAAAlE,GAAuBC,EAAA23B,GAAA1zB,EAAAjE,GAAUqU,IAAK,MAAM,cAAAtU,EAAA64B,GAAA30B,EAAAlE,GAAwBC,EAAA44B,GAAA30B,EAAAjE,GAAUqU,IAAK,MAAM,cAAAtU,EAAA8T,MAAoB9T,GAAIkG,UAAA,KAAejG,EAAA6T,MAAM7T,GAAIiG,UAAA,KAAeoO,IAAK,MAAM,gBAAAtU,EAAAo5B,GAAAl1B,EAAAlE,GAA0BC,EAAAm5B,GAAAl1B,EAAAjE,GAAUqU,IAAK,MAAM,4BAAAtU,GAAAu7B,SAAA,mBAAAt7B,GAAAs7B,UAAAr3B,EAAAs3B,QAAAznB,IAAoFmmB,GAAA91B,EAAAnE,EAAAm7B,GAAW,IAAAjxB,GAAAqK,CAAQtQ,GAAA,IAAO,KAAAiG,IAAAnK,GAAA,IAAAC,EAAAc,eAAAoJ,IAAAnK,EAAAe,eAAAoJ,IAAA,MAAAnK,EAAAmK,GAAA,aAAAA,EAAA,IAAAqK,IAAApQ,GAAApE,EAAAmK,GAAA/F,EAAArD,eAAAyT,KAAAtQ,UAAmIA,EAAAsQ,GAChf,QAAI,4BAAArK,GAAA,aAAAA,GAAA,mCAAAA,GAAA,6BAAAA,GAAA,cAAAA,IAAA8P,GAAAlZ,eAAAoJ,GAAAmK,oBAAA/O,KAAA4E,EAAA,MAAkM,KAAAA,IAAAlK,GAAA,CAAY,GAAAiU,GAAAjU,EAAAkK,EAAiC,IAAtB/F,EAAA,MAAApE,IAAAmK,OAAA,GAAsBlK,EAAAc,eAAAoJ,IAAA+J,IAAA9P,IAAA,MAAA8P,GAAA,MAAA9P,GAAA,aAAA+F,EAAA,GAAA/F,EAAA,CAAuE,IAAAoQ,IAAApQ,MAAArD,eAAAyT,IAAAN,KAAAnT,eAAAyT,KAAAtQ,UAAkEA,EAAAsQ,GAAA,GAAW,KAAAA,IAAAN,KAAAnT,eAAAyT,IAAApQ,EAAAoQ,KAAAN,EAAAM,KAAAtQ,UAAsDA,EAAAsQ,GAAAN,EAAAM,QAAatQ,KAAAoQ,YAAA/O,KAAA4E,EAAAjG,MAAAgQ,MAAoC,4BAC9e/J,GAAA+J,MAAAmnB,WAAA,GAAAj3B,MAAAi3B,WAAA,SAAAnnB,GAAA9P,IAAA8P,IAAAI,SAAA/O,KAAA4E,EAAA,GAAA+J,IAAA,aAAA/J,EAAA/F,IAAA8P,GAAA,iBAAAA,IAAA,iBAAAA,KAAAI,SAAA/O,KAAA4E,EAAA,GAAA+J,GAAA,mCAAA/J,GAAA,6BAAAA,IAAA8P,GAAAlZ,eAAAoJ,IAAA,MAAA+J,GAAAomB,GAAAhwB,EAAAH,GAAAmK,GAAAlQ,IAAA8P,IAAAI,iBAAA/O,KAAA4E,EAAA+J,IAA4V,MAA7BhQ,KAAAoQ,SAAA/O,KAAA,QAAArB,GAA6BoQ,EAC5V,QAAAonB,IAAAx3B,EAAAE,EAAApE,EAAAC,EAAAqK,GAAuB,UAAAtK,GAAA,UAAAsK,EAAA2E,MAAA,MAAA3E,EAAApK,MAAAq4B,GAAAr0B,EAAAoG,GAAqD8vB,GAAAp6B,EAAAC,GAAQA,EAAAm6B,GAAAp6B,EAAAsK,EAAU,QAAAgK,GAAA,EAAYA,EAAAlQ,EAAAvB,OAAWyR,GAAA,GAAM,GAAAnK,GAAA/F,EAAAkQ,GAAAE,EAAApQ,EAAAkQ,EAAA,EAAoB,WAAAnK,EAAA2vB,GAAA51B,EAAAsQ,EAAA4mB,IAAA,4BAAAjxB,EAAAmxB,GAAAp3B,EAAAsQ,GAAA,aAAArK,EAAAwvB,GAAAz1B,EAAAsQ,GAAAvU,EAAA,MAAAuU,EAAAkjB,GAAAxzB,EAAAiG,EAAAqK,GAAAtQ,EAAAyzB,gBAAAxtB,GAAA,MAAAqK,EAAAwiB,GAAA9yB,EAAAiG,EAAAqK,GAAA6iB,GAAAnzB,EAAAiG,GAAuJ,OAAAnK,GAAU,YAAAw4B,GAAAt0B,EAAAoG,EAAqB,MAAM,gBAAAivB,GAAAr1B,EAAAoG,EAAwB,MAAM,cAAApG,EAAAg0B,cAAAC,iBAAA,GAAA/zB,EAAAF,EAAAg0B,cAAAgB,YAAAh1B,EAAAg0B,cAAAgB,cAAA5uB,EAAA6uB,SAAAn5B,EAAAsK,EAAApE,MAAA,MAAAlG,EAAA84B,GAAA50B,IACzWoG,EAAA6uB,SAAAn5B,GAAA,GAAAoE,MAAAkG,EAAA6uB,WAAA,MAAA7uB,EAAA2tB,aAAAa,GAAA50B,IAAAoG,EAAA6uB,SAAA7uB,EAAA2tB,cAAA,GAAAa,GAAA50B,IAAAoG,EAAA6uB,SAAA7uB,EAAA6uB,YAAA,SACA,QAAAwC,IAAAz3B,EAAAE,EAAApE,EAAAC,EAAAqK,GAAuB,OAAAlG,GAAU,0BAAA+S,GAAA,iBAAAjT,EAAkD,MAAM,gCAAAoQ,KAAA6mB,OAAAp6B,eAAAuT,IAAA6C,GAAA7C,EAAA6mB,GAAA7mB,GAAApQ,EAA6E,MAAM,cAAAiT,GAAA,mBAAAjT,EAAsC,MAAM,uBAAAiT,GAAA,mBAAAjT,GAAgDiT,GAAA,iBAAAjT,EAAsB,MAAM,YAAAiT,GAAA,mBAAAjT,GAAoCiT,GAAA,qBAAAjT,EAA0B,MAAM,eAAAiT,GAAA,qBAAAjT,EAAyC,MAAM,aAAAm0B,GAAAn0B,EAAAlE,GAAqBmX,GAAA,uBAAAjT,GAA4Bo2B,GAAAhwB,EAAA,WAAiB,MAAM,cAAA2uB,GAAA/0B,EAAAlE,GAC/dmX,GAAA,uBAAAjT,GAA4Bo2B,GAAAhwB,EAAA,WAAiB,MAAM,gBAAAgvB,GAAAp1B,EAAAlE,GAAAmX,GAAA,uBAAAjT,GAAAo2B,GAAAhwB,EAAA,YAAqE4vB,GAAA91B,EAAApE,EAAAo7B,IAAWn7B,EAAA,IAAO,QAAAkK,KAAAnK,KAAAe,eAAAoJ,KAAAmK,EAAAtU,EAAAmK,GAAA,aAAAA,EAAA,iBAAAmK,GAAApQ,EAAAkhB,cAAA9Q,IAAArU,GAAA,WAAAqU,IAAA,iBAAAA,IAAApQ,EAAAkhB,cAAA,GAAA9Q,IAAArU,GAAA,cAAAqU,IAAA2F,GAAAlZ,eAAAoJ,IAAA,MAAAmK,GAAAgmB,GAAAhwB,EAAAH,GAA8N,QAAA/F,GAAU,YAAAgd,GAAAld,GAAmBw0B,GAAAx0B,EAAAlE,EAAQ,MAAM,gBAAAohB,GAAAld,GAAsBs1B,GAAAt1B,EAAAlE,EAAQ,MAAM,gCAAkC,4BAAAA,GAAAu7B,UACzdr3B,EAAAs3B,QAAAznB,IAAc,MAAA9T,GAAS,QAAA27B,IAAA13B,EAAAE,GAAiB,MAAAF,GAAA21B,YAAAz1B,EAEgU,QAAAy3B,IAAA33B,GAAe,SAAAA,GAAA,IAAAA,EAAAqc,UAAA,IAAArc,EAAAqc,UAAA,KAAArc,EAAAqc,WAAA,IAAArc,EAAAqc,UAAA,iCAAArc,EAAA21B,YACvX,QAAAiC,IAAA53B,GAAsE,UAAvDA,IAAA,IAAAA,EAAAqc,SAAArc,EAAAgZ,gBAAAhZ,EAAAghB,WAAA,OAAuD,IAAAhhB,EAAAqc,WAAArc,EAAA63B,aAAA,mBAUtE,QAAAC,IAAA93B,EAAAE,EAAApE,EAAAC,EAAAqK,GAAuBuxB,GAAA77B,IAAAgU,EAAA,MAAsB,IAAAM,GAAAtU,EAAAi8B,mBAA4B,IAAA3nB,EAAA4nB,GAAA9F,gBAAAhyB,EAAAkQ,EAAApQ,EAAAoG,OAAgC,CAAgB,KAAXrK,KAAA67B,GAAA97B,IAAW,IAAAsU,MAAA,GAAmBA,EAAAtU,EAAA45B,WAAc55B,EAAA4vB,YAAAtb,EAAkB,IAAAnK,GAAA+xB,GAAA/F,gBAAAn2B,EAAAC,EAA6BqU,GAAAtU,EAAAi8B,oBAAA9xB,EAA0B+xB,GAAAnG,iBAAA,WAA8BmG,GAAA9F,gBAAAhyB,EAAA+F,EAAAjG,EAAAoG,KAA6B,MAAA4xB,IAAA7F,sBAAA/hB,GAAkC,QAAA6nB,IAAAj4B,EAAAE,GAAiB,GAAApE,GAAA,EAAA4C,UAAAC,YAAA,KAAAD,UAAA,GAAAA,UAAA,OAAwF,OAAtBi5B,IAAAz3B,IAAA4P,EAAA,OAAsB2iB,GAAAzyB,EAAAE,EAAA,KAAApE,GACza,QAAAo8B,IAAAl4B,EAAAE,GAAiBb,KAAA04B,oBAAAC,GAAA/F,gBAAAjyB,EAAAE,GArNJ,GAAAw0B,IAAAr5B,EAAA,GAAAM,GAAAN,EAAA,IAAAuU,GAAAvU,EAAA,GAAAwU,GAAAxU,EAAA,GAAA2kB,GAAA3kB,EAAA,IAAAqmB,GAAArmB,EAAA,IAAAgnB,GAAAhnB,EAAA,IAAA88B,GAAA98B,EAAA,IAAA+8B,GAAA/8B,EAAA,IAAAsX,GAAAtX,EAAA,EACkYq5B,KAAA5kB,EAAA,MAC/Y,IAAAyE,KAAQlE,UAAA,EAAA8kB,yBAAA,EAAApB,cAAA,EAAAD,gBAAA,EAAA+C,WAAA,EAAAwB,gCAAA,EAAAC,0BAAA,EAAAzC,OAAA,GACR0C,IAAQC,kBAAA,EAAAC,kBAAA,EAAAC,kBAAA,EAAAC,2BAAA,GAAAC,6BAAA,GAAAC,yBAAA,GAAAC,wBAAA,SAAA94B,GAA0L,GAAAE,GAAAq4B,GAAAz8B,EAAAkE,EAAA+4B,eAA2Bh9B,EAAAiE,EAAAg5B,2BAA+B5yB,EAAApG,EAAAi5B,qBAA2Bj5B,KAAAk5B,sBAA2B,QAAA9oB,KAAAtU,GAAA,CAAgB8Y,GAAA/X,eAAAuT,IAAAN,EAAA,KAAAM,EAAsC,IAAAnK,GAAAmK,EAAA9I,cAAAgJ,EAAAxU,EAAAsU,EAA6BnK,IAAGotB,cAAAptB,EAAAqtB,mBAAA,KAAAtV,aAAA5N,EAAA2iB,eAAA,KAAAK,gBAAA/e,EAAA/D,EAAApQ,EAAAs4B,mBACxY/jB,gBAAAJ,EAAA/D,EAAApQ,EAAAu4B,mBAAAzF,gBAAA3e,EAAA/D,EAAApQ,EAAAw4B,mBAAAxF,wBAAA7e,EAAA/D,EAAApQ,EAAAy4B,4BAAAhkB,0BAAAN,EAAA/D,EAAApQ,EAAA04B,8BAAAlkB,sBAAAL,EAAA/D,EAAApQ,EAAA24B,2BAAsQ,GAAA5yB,EAAAwO,gBAAAxO,EAAA+sB,gBAAA/sB,EAAA0O,2BAAA7E,EAAA,KAAAM,GAAoFhK,EAAAvJ,eAAAuT,KAAAnK,EAAAotB,cAAAjtB,EAAAgK,IAA4CrU,EAAAc,eAAAuT,KAAAnK,EAAAqtB,mBAAAv3B,EAAAqU,IAAiDpQ,EAAAnD,eAAAuT,KAAAnK,EAAA8sB,eAAA/yB,EAAAoQ,IAA6CwE,GAAAxE,GAAAnK,KAAU2O,MAE9eukB,GAAAZ,GAAAa,GAAAD,GAAAX,kBAAA3nB,GAAAsoB,GAAAV,kBAAAY,GAAAF,GAAAT,kBAAAY,GAAAH,GAAAR,2BAAAY,GAAAJ,GAAAP,6BAAAY,GAAAL,GAAAN,yBAAAY,IAAwLV,YAAYW,gBAAA7oB,GAAA8oB,MAAA9oB,GAAA+oB,UAAA/oB,GAAAgpB,SAAAhpB,GAAAuP,QAAAmZ,GAAAnc,QAAAgc,GAAAvoB,GAAAipB,KAAAR,GAAAhY,gBAAAkY,GAAAO,SAAAlpB,GAAAoD,QAAApD,GAAAmpB,MAAAnpB,GAAAwG,SAAAxG,GAAAopB,SAAAV,GAAAW,UAAAV,GAAAW,eAAAtpB,GAAAupB,OAAAvpB,GAAAwpB,KAAAxpB,GAAAokB,SAAAmE,GAAAvoB,GAAAypB,MAAAlB,GAAAvoB,GAAA0pB,WAAA1pB,GAAAzC,KAAAyC,GAAA2pB,YAAA3pB,GAAA4pB,SAAA5pB,GAAA6pB,SAAA7pB,GAAA8pB,SAAA9pB,GAAA+pB,KAAAtB,GAAAuB,QAAAxB,GACpMyB,OAAAjqB,GAAAkqB,SAAAlqB,GAAAgkB,SAAAuE,GAAAvoB,GAAAmqB,KAAA1B,GAAA3X,MAAA0X,GAAA4B,KAAA3B,GAAA4B,WAAA1B,GAAA3D,MAAA,EAAAsF,SAAA,EAAAC,UAAAvqB,GAAAwqB,cAAA,EAAAC,UAAA,EAAAC,QAAA,EAAAC,UAAA,EAAAx5B,MAAAw3B,IAAmKP,mBAAoBoC,cAAA,iBAAAC,UAAA,QAAAC,QAAA,MAAAC,UAAA,cAAsFtC,oBAAqBl3B,MAAA,SAAAhC,EAAAE,GAAoB,SAAAA,EAAA,MAAAF,GAAAyzB,gBAAA,QAA6C,YAAAzzB,EAAA+K,OAAA,IAAA/K,EAAA63B,aAAA,SAAA73B,EAAAuc,aAAA,WAAArc,GAAAF,EAAAy7B,WAAAz7B,EAAAy7B,SAAAC,UAAA17B,EAAAq2B,cAAAsF,gBAAA37B,GACnWA,EAAAuc,aAAA,WAAArc,MAA+B07B,GAAAzC,GAAAN,yBAAA3nB,IAAmC2qB,MAAA,+BAAAC,IAAA,wCAAgFC,IAAKhD,YAAYiD,YAAAJ,GAAAK,0BAAAL,GAAAM,cAAAN,IAA6D3C,mBAAoB+C,YAAA,cAAAC,0BAAA,4BAAAC,cAAA,iBAA8GlD,wBAAyBmD,aAAAjrB,GAAA2qB,MAAAO,aAAAlrB,GAAA2qB,MAAAQ,UAAAnrB,GAAA2qB,MAAAS,UAAAprB,GAAA2qB,MAAAU,UAAArrB,GAAA2qB,MAAAW,WAAAtrB,GAAA2qB,MAAAY,UAAAvrB,GAAA2qB,MAC3Xa,QAAAxrB,GAAA4qB,IAAAa,QAAAzrB,GAAA4qB,IAAAc,SAAA1rB,GAAA4qB,MAA4Ce,GAAA,gBAC5C,2qCAAA7+B,MAAA,KAAAC,QAAA,SAAA+B,GAAysC,GAAAE,GAAAF,EAAAqM,QAAAwwB,GACzsChoB,EAAIknB,IAAAhD,WAAA74B,GAAA,EAAmB67B,GAAA9C,kBAAA/4B,GAAAF,IAA4Bm5B,GAAAL,wBAAAW,IAA+BN,GAAAL,wBAAAiD,GAClF,IAAAvqB,KAAOwD,aAAA,KAAAD,iBAAA,EAAAK,cAAA,KAAAD,kBAAA,EAAA2nB,WAAuFC,iBAAA,SAAA/8B,GAA6B,mBAAAA,GAAAg9B,uBAAAltB,EAAA,OAA4DgF,EAAA9U,EAAAg9B,wBAA4BA,sBAAA,SAAAh9B,EAAAE,EAAApE,EAAAC,EAAAqK,EAAAgK,EAAAnK,EAAAqK,EAAAN,GAAmD8E,EAAAG,MAAAzD,GAAA9S,YAAsB6X,wCAAA,SAAAvW,EAAAE,EAAApE,EAAAC,EAAAqK,EAAAgK,EAAAnK,EAAAqK,EAAAN,GAAmH,GAA9CwB,GAAAwrB,sBAAA/nB,MAAA5V,KAAAX,WAA8C8S,GAAAyrB,iBAAA,CAAuB,GAAA/qB,GAAAV,GAAA0rB,kBAA2B1rB,IAAA2D,mBAAA3D,GAAA2D,kBAAA,EAAA3D,GAAA4D,cACjclD,KAAIwF,mBAAA,WAA+B,MAAAxC,GAAAD,MAAAzD,GAAA9S,YAA6Bu+B,eAAA,WAA2B,MAAAzrB,IAAAuD,iBAAyBmoB,iBAAA,WAA6B,GAAA1rB,GAAAuD,gBAAA,CAAsB,GAAA/U,GAAAwR,GAAAwD,YAA8D,OAAzCxD,IAAAwD,aAAA,KAAoBxD,GAAAuD,iBAAA,EAAqB/U,EAAS8P,EAAA,SAC9HwF,GAAA,KAAAC,MAE1BC,MAAAG,MAAeI,MAAMC,MAC3GmnB,GAAAhhC,OAAA6X,QAAsBopB,QAAA5nB,GAAA6nB,yBAAA1nB,GAAA2nB,wBAAAvnB,GAAAwnB,6BAAAvnB,GAAAwnB,0BAAA,KAAAC,uBAAAvnB,EAAAwnB,yBAAAvnB,IAAuLiB,GAAA,KAAAiE,GAAA,KAAA/E,GAAA,KACoDkB,GAAA,KACsFmmB,IAAQF,uBAAAvnB,EAAAwnB,yBAAAvnB,GAE9FynB,GAAAzhC,OAAA6X,QAAsB8oB,UAAAa,GAAAE,YAAA3mB,EAAAzB,cAAA6B,EAAAwmB,cAAAvmB,EAAAwmB,kBAAAtmB,IAAmFumB,GAAAC,KAAAC,SAAA1zB,SAAA,IAAAxD,MAAA,GAAA4K,GAAA,2BAAAosB,GAAAhmB,GAAA,wBAAAgmB,GAE1WG,GAAAhiC,OAAA6X,QAAsBoqB,kBAAA,SAAAp+B,EAAAE,GAAgCA,EAAA0R,IAAA5R,GAAOq+B,2BAAA1mB,EAAA2mB,oBAAA,SAAAt+B,GAAsE,MAAPA,KAAA4R,KAAO5R,GAAA,IAAAA,EAAA6X,KAAA,IAAA7X,EAAA6X,IAAA,KAAA7X,GAAsCu+B,oBAAAzmB,EAAA0mB,6BAAAzmB,EAAA0mB,iBAAA,SAAAz+B,EAAAE,GAAuFF,EAAAgY,IAAA9X,KAIhQw+B,GAAAviC,OAAA6X,QAAsB2qB,6BAAAjmB,EAAAkmB,uCAAA,SAAA5+B,GAAmF0W,EAAA1W,EAAAuY,IAASsmB,+BAAAlmB,EAAAmmB,2BAAA,SAAA9+B,GAA0E0W,EAAA1W,EAAAyY,MAAUK,GAAA,KAA4H/G,IAAOsH,MAAA,KAAAF,WAAA,KAAAD,cAAA,MAEzU6lB,GAAA,uHAAA/gC,MAAA,KAAAghC,IAA6Ij0B,KAAA,KAAA1M,OAAA,KAAAgY,cAAAxG,GAAA1Q,gBAAA8/B,WAAA,KAAAC,QAAA,KAAAC,WAAA,KAAAC,UAAA,SAAAp/B,GAAyH,MAAAA,GAAAo/B,WAAAC,KAAAjO,OAA+B3X,iBAAA,KAAA6lB,UAAA,KAErS1vB,IAAAoC,EAAApV,WAAe2iC,eAAA,WAA0BlgC,KAAAoa,kBAAA,CAAyB,IAAAzZ,GAAAX,KAAAia,WAAuBtZ,OAAAu/B,eAAAv/B,EAAAu/B,iBAAA,kBAAAv/B,GAAA0Z,cAAA1Z,EAAA0Z,aAAA,GAAAra,KAAAma,mBAAA3J,GAAA3Q,kBAAwIsgC,gBAAA,WAA4B,GAAAx/B,GAAAX,KAAAia,WAAuBtZ,OAAAw/B,gBAAAx/B,EAAAw/B,kBAAA,kBAAAx/B,GAAAy/B,eAAAz/B,EAAAy/B,cAAA,GAAApgC,KAAAwX,qBAAAhH,GAAA3Q,kBAA8IwgC,QAAA,WAAoBrgC,KAAAyX,aAAAjH,GAAA3Q,iBAAoC4X,aAAAjH,GAAA5Q,iBAC1d6a,WAAA,WAAsB,GAAA5Z,GAAAF,EAAAX,KAAAwB,YAAA0Y,SAAmC,KAAArZ,IAAAF,GAAAX,KAAAa,GAAA,IAAwB,KAAAF,EAAA,EAAQA,EAAA++B,GAAApgC,OAAYqB,IAAAX,KAAA0/B,GAAA/+B,IAAA,QAAwBgS,EAAAuH,UAAAylB,GAAehtB,EAAA2tB,aAAA,SAAA3/B,EAAAE,GAA6B,QAAApE,MAAcA,EAAAc,UAAAyC,KAAAzC,SAA2B,IAAAb,GAAA,GAAAD,EAAY8T,IAAA7T,EAAAiE,EAAApD,WAAiBoD,EAAApD,UAAAb,EAAciE,EAAApD,UAAAiE,YAAAb,EAA0BA,EAAAuZ,UAAA3J,MAAgBvQ,KAAAka,UAAArZ,GAAmBF,EAAA2/B,aAAAtgC,KAAAsgC,aAAiC5lB,EAAA/Z,IAAO+Z,EAAA/H,GACtIA,EAAA2tB,aAAA1lB,GAAmBjU,KAAA,OAA6DgM,EAAA2tB,aAAAzlB,GAAmBlU,KAAA,MAAY,IAAAoU,KAAA,YAAAU,GAAAnf,GAAAod,WAAA,oBAAA1W,QAAAu9B,GAAA,IAAwEjkC,IAAAod,WAAA,gBAAAnT,YAAAg6B,GAAAh6B,SAAAi6B,aAAmE,IAAAC,GACtd,IAAAA,GAAAnkC,GAAAod,WAAA,aAAA1W,UAAAu9B,GAAA,CAA8C,GAAAG,IAAA19B,OAAA29B,KAAoBF,MAAA,iBAAAC,KAAA,mBAAAA,IAAAnsB,SAAA,IAAAqsB,SAAAF,GAAAnsB,UAAA,KAClE,GAO+P4I,IAP/P0jB,GAAAJ,GAAA3kB,GAAAxf,GAAAod,aAAA+B,IAAA8kB,IAAA,EAAAA,IAAA,IAAAA,IAAAjlB,GAAAld,OAAAG,aAAA,IAAAuiC,IAAiFC,aAAaxqB,yBAAyByqB,QAAA,gBAAAC,SAAA,wBAAwDrqB,cAAA,8DAA4EsqB,gBAAiB3qB,yBAAyByqB,QAAA,mBAAAC,SAAA,2BAA8DrqB,aAAA,yEAAAjY,MAAA,MAAkGwiC,kBAAmB5qB,yBAAyByqB,QAAA,qBACjfC,SAAA,6BAAqCrqB,aAAA,2EAAAjY,MAAA,MAAoGyiC,mBAAoB7qB,yBAAyByqB,QAAA,sBAAAC,SAAA,8BAAoErqB,aAAA,4EAAAjY,MAAA,OAAsG0c,IAAA,EAC9EG,IAAA,EAElR6lB,IAAQhrB,WAAAyqB,GAAA1qB,cAAA,SAAAzV,EAAAE,EAAApE,EAAAC,GAA8C,GAAAqK,EAAM,IAAA0U,GAAA5a,EAAA,CAAS,OAAAF,GAAU,6BAAAoQ,GAAA+vB,GAAAK,gBAAqD,MAAAtgC,EAAQ,yBAAAkQ,EAAA+vB,GAAAI,cAA6C,MAAArgC,EAAQ,4BAAAkQ,EAAA+vB,GAAAM,iBAAmD,MAAAvgC,GAAQkQ,MAAA,OAASyK,IAAAV,EAAAna,EAAAlE,KAAAsU,EAAA+vB,GAAAI,gBAAA,eAAAvgC,GAAA,MAAAlE,EAAAue,UAAAjK,EAAA+vB,GAAAK,iBAC9H,OADgOpwB,IAAA+K,KAAAN,IAAAzK,IAAA+vB,GAAAK,iBAAApwB,IAAA+vB,GAAAI,gBAAA1lB,KAAAzU,EAAA6S,MAAAlH,GAAAsH,MAAAtd,EAAAgW,GAAAoH,WAAAC,IAAAyB,IAAA,IAAAzK,EAAA6J,EAAAD,UAAA5J,EAAAlQ,EAAApE,EAAAC,GAAAqK,EAAAgK,EAAApK,KACvWI,EAAA,QAAAA,EAAAkU,EAAAxe,MAAAsU,EAAApK,KAAAI,GAAAsS,EAAAtI,GAAAhK,EAAAgK,GAAAhK,EAAA,MAAmDpG,EAAAkgC,GAAA1lB,EAAAxa,EAAAlE,GAAA8e,EAAA5a,EAAAlE,KAAAoE,EAAAga,EAAAF,UAAAmmB,GAAAC,YAAAlgC,EAAApE,EAAAC,GAAAmE,EAAA8F,KAAAhG,EAAA0Y,EAAAxY,MAAA,MAAoFkG,EAAAlG,KAAaob,GAAA,KAAAG,GAAA,KAAAC,GAAA,KAA6LilB,IAAQC,mCAAA,SAAA5gC,GAA+Csb,GAAAtb,IAC9S6gC,GAAA1kC,OAAA6X,QAAsB8oB,UAAA6D,GAAAG,oBAAAtlB,EAAAulB,qBAAAplB,IAA2FG,IAAA,EAA6FG,IAAQ+kB,OAAA,EAAAC,MAAA,EAAAC,UAAA,EAAAC,kBAAA,EAAAC,OAAA,EAAAC,OAAA,EAAAC,QAAA,EAAAC,UAAA,EAAAC,OAAA,EAAAC,QAAA,EAAAC,KAAA,EAAAz2B,MAAA,EAAA02B,MAAA,EAAA71B,KAAA,EAAA81B,MAAA,EAC1CjmC,IAAAod,YAAAyD,GAAA5W,SAAA6W,gBAAA7W,SAAA6W,eAAAC,aAAA,IAAA9W,SAAA6W,eAAAC,WAAA,OAG1B,IAAAY,KAAQC,QAAQ3H,yBAAyByqB,QAAA,WAAAC,SAAA,mBAA8CrqB,aAAA,sFAAAjY,MAAA,OAC5O4f,GAAA,KAAAG,GAAA,KAA0I8jB,IAAA,CAAUlmC,IAAAod,YAAA8oB,GAAAvlB,GAAA,YAAA1W,SAAAi6B,cAAA,EAAAj6B,SAAAi6B,cAE3O,IAAAiC,KAAQpsB,WAAA4H,GAAAykB,uBAAAF,GAAApsB,cAAA,SAAAzV,EAAAE,EAAApE,EAAAC,GAAwE,GAAAqK,GAAAlG,EAAA4X,EAAA5X,GAAAmC,OAAA+N,EAAAhK,EAAA4V,UAAA5V,EAAA4V,SAAA1U,aAA4D,eAAA8I,GAAA,UAAAA,GAAA,SAAAhK,EAAA2E,KAAA,GAAA9E,GAAAyX,OAAuD,IAAA3B,GAAA3V,GAAA,GAAAy7B,GAAA57B,EAAAoY,OAAyB,CAAKpY,EAAAkY,EAAK,IAAA7N,GAAA2N,SAAS7N,EAAAhK,EAAA4V,WAAA,UAAA5L,EAAA9I,eAAA,aAAAlB,EAAA2E,MAAA,UAAA3E,EAAA2E,OAAA9E,EAAAmY,GAA+F,IAAAnY,QAAAjG,EAAAE,IAAA,MAAAmd,IAAApX,EAAAnK,EAAAC,EAAkCuU,MAAAtQ,EAAAoG,EAAAlG,GAAY,YAAAF,GAAA,MAAAE,IAAAF,EAAAE,EAAA8zB,eAAA5tB,EAAA4tB,gBAAAh0B,EAAAo0B,YAAA,WAAAhuB,EAAA2E,OAAA/K,EAAA,GAAAoG,EAAApE,MAAAoE,EAAA47B,aAAA,WAC5XhiC,GAAAoG,EAAAmW,aAAA,QAAAvc,KAAiFgS,GAAA2tB,aAAArhB,IAAmBjV,KAAA,KAAAkR,OAAA,MAAwB,IAAAkE,KAAQwjB,IAAA,SAAAC,QAAA,UAAAC,KAAA,UAAAC,MAAA,WACpI9jB,IAAAqhB,aAAAhhB,IAAoB0jB,QAAA,KAAAC,QAAA,KAAAC,QAAA,KAAAC,QAAA,KAAAC,MAAA,KAAAC,MAAA,KAAA3nB,QAAA,KAAA4nB,SAAA,KAAA3nB,OAAA,KAAAC,QAAA,KAAAuD,iBAAAE,GAAAkkB,OAAA,KAAAC,QAAA,KAAAC,cAAA,SAAA9iC,GAAqM,MAAAA,GAAA8iC,gBAAA9iC,EAAA+iC,cAAA/iC,EAAAmc,WAAAnc,EAAAgjC,UAAAhjC,EAAA+iC,eACzN,IAAAE,KAAQC,YAAYptB,iBAAA,eAAAG,cAAA,+BAA4EktB,YAAartB,iBAAA,eAAAG,cAAA,gCAA6EmtB,IAAK1tB,WAAAutB,GAAAxtB,cAAA,SAAAzV,EAAAE,EAAApE,EAAAC,GAA8C,oBAAAiE,IAAAlE,EAAAgnC,eAAAhnC,EAAAinC,cAAA,gBAAA/iC,GAAA,iBAAAA,EAAA,WAA2G,IAAAoG,GAAArK,EAAAsG,SAAAtG,KAAAqK,EAAArK,EAAAs6B,eAAAjwB,EAAAi9B,aAAAj9B,EAAAk9B,aAAAjhC,MAA2J,IAA7E,gBAAArC,KAAAE,OAAApE,EAAAgnC,eAAAhnC,EAAAknC,WAAArrB,EAAAzX,GAAA,MAAAF,EAAA,KAA6EA,IACnfE,EAAA,WAAc,IAAAkQ,GAAA,MAAApQ,EAAAoG,EAAA0R,EAAA9X,EAAsBoG,GAAA,MAAAlG,EAAAkG,EAAA0R,EAAA5X,EAAkB,IAAA+F,GAAA0Y,GAAA3E,UAAAipB,GAAAE,WAAAnjC,EAAAlE,EAAAC,EAA0L,OAAlJkK,GAAA8E,KAAA,aAAoB9E,EAAA5H,OAAA+R,EAAWnK,EAAA68B,cAAA18B,EAAkBtK,EAAA6iB,GAAA3E,UAAAipB,GAAAC,WAAAhjC,EAAApE,EAAAC,GAAoCD,EAAAiP,KAAA,aAAoBjP,EAAAuC,OAAA+H,EAAWtK,EAAAgnC,cAAA1yB,EAAkBuI,EAAA1S,EAAAnK,EAAAkE,EAAAE,IAAY+F,EAAAnK,KAAa4G,GAAAgyB,GAAA7gB,mDAAAC,kBAI0CuM,MACWN,IAAA,EAAAH,OAAA,GAElT2jB,GAAApnC,OAAA6X,QAAsBwvB,eAAe,MAAAzjB,KAAU0jB,sBAAuB,MAAA7jB,KAAU8jB,kBAAA,SAAA1jC,GAA+B4f,GAAA5f,GAAK2jC,WAAA7jB,GAAA8jB,UAAA,WAAoC,MAAA7jB,KAAU8jB,iBAAA5wB,GAAA6wB,kBAAA3jB,GAAA4jB,cAAA7jB,KAClKO,IAAQujB,aAAA1jB,GAAA,4BAAA2jB,mBAAA3jB,GAAA,kCAAA4jB,eAAA5jB,GAAA,8BAAA6jB,cAAA7jB,GAAA,+BAAmME,MAAME,KAAO/kB,IAAAod,YAAA2H,GAAA9a,SAAAqJ,cAAA,OAAA4mB,MAAA,kBAAAxzB,gBAAAoe,IAAAujB,aAAAI,gBAAA3jB,IAAAwjB,mBAAAG,gBAAA3jB,IAAAyjB,eAAAE,WAAA,mBAAA/hC,eAAAoe,IAAA0jB,cAAAE,WAExN,IAAA3N,KAAQ4N,SAAA,QAAAC,gBAAAhkB,GAAA,gCAAAikB,sBAAAjkB,GAAA,4CAAAkkB,kBAAAlkB,GAAA,oCAAA+V,QAAA,OAAAE,UAAA,SAAAkO,WAAA,UAAAC,kBAAA,iBAAAC,UAAA,SAAAC,SAAA,QAAApO,SAAA,QAAAqO,kBAAA,iBAAAC,oBAAA,mBAAAC,qBAAA,oBAAAC,eAAA,cAAAC,QAAA,OACRC,OAAA,MAAAC,eAAA,WAAAC,QAAA,OAAAC,WAAA,UAAAC,aAAA,YAAAC,YAAA,WAAAC,aAAA,YAAAC,YAAA,WAAAC,aAAA,YAAAC,QAAA,OAAAC,kBAAA,iBAAAC,WAAA,UAAAC,aAAA,YAAAC,SAAA,QAAAC,SAAA,QAAA1P,SAAA,QAAA2P,SAAA,QAAAC,WAAA,UAAAC,YAAA,WAAAC,SAAA,QAAAC,cAAA,aAAAC,QAAA,OAAAC,kBAAA,iBAAAC,aAAA,YACAC,aAAA,YAAAC,aAAA,YAAAC,YAAA,WAAAC,aAAA,YAAAC,WAAA,UAAAC,SAAA,QAAAC,SAAA,QAAAC,QAAA,OAAAC,WAAA,UAAAC,YAAA,WAAAC,cAAA,aAAAC,UAAA,SAAAC,UAAA,SAAAC,WAAA,UAAAC,mBAAA,kBAAAC,WAAA,UAAAC,WAAA,UAAAC,aAAA,YAAAC,cAAA,aAAAC,UAAA,SAAAC,eAAA,cAAAC,YAAA,WAAAC,aAAA,YACAC,cAAA,aAAAC,iBAAA3nB,GAAA,kCAAA4nB,gBAAA,eAAAC,WAAA,UAAAC,SAAA,SAAsJvnB,MAAMD,GAAA,EAAAD,GAAA,wBAAAqd,KAAAC,UAAAl3B,MAAA,GAE5JshC,GAAA3sC,GAAAod,WAAA,gBAAAnT,WAAA,IAAAA,SAAAi6B,aAAAvd,IAA6EC,QAAQ3M,yBAAyByqB,QAAA,WAAAC,SAAA,mBAA8CrqB,aAAA,iGAAAjY,MAAA,OAA2HyjB,GAAA,KAAAe,GAAA,KAAAJ,GAAA,KAAAZ,IAAA,EAEvR+mB,IAAQ7yB,WAAA4M,GAAA7M,cAAA,SAAAzV,EAAAE,EAAApE,EAAAC,GAA8C,GAAAqU,GAAAhK,EAAArK,EAAAsG,SAAAtG,IAAA6J,SAAA,IAAA7J,EAAAsgB,SAAAtgB,IAAAs6B,aAAiE,MAAAjmB,GAAAhK,GAAA,CAAYpG,EAAA,CAAGoG,EAAAua,GAAAva,GAAQgK,EAAA4F,GAAAwyB,QAAc,QAAAviC,GAAA,EAAYA,EAAAmK,EAAAzR,OAAWsH,IAAA,CAAK,GAAAqK,GAAAF,EAAAnK,EAAW,KAAAG,EAAAvJ,eAAAyT,KAAAlK,EAAAkK,GAAA,CAAgClK,GAAA,CAAK,MAAApG,IAASoG,GAAA,EAAKgK,GAAAhK,EAAK,GAAAgK,EAAA,WAAkC,QAAjBhK,EAAAlG,EAAA4X,EAAA5X,GAAAmC,OAAiBrC,GAAU,gBAAA+b,GAAA3V,IAAA,SAAAA,EAAAkb,mBAAAG,GAAArb,EAAAoc,GAAAtiB,EAAAkiB,GAAA,KAAuE,MAAM,eAAAA,GAAAI,GAAAf,GAAA,IAA6B,MAAM,oBAAAD,IAAA,CAA0B,MAAM,6CAAAA,KAAA,EAAAD,GAAAzlB,EAAAC,EAA6D,6BAAAusC,GAAA,KACpf,uCAAA/mB,IAAAzlB,EAAAC,GAAiD,aAA+DiW,GAAA2tB,aAAAld,IAAmBgmB,cAAA,KAAAC,YAAA,KAAAC,cAAA,OAA0G32B,EAAA2tB,aAAAjd,IAAmBkmB,cAAA,SAAA5oC,GAA0B,uBAAAA,KAAA4oC,cAAAvmC,OAAAumC,iBAAmHtqB,GAAAqhB,aAAAhd,IAAoBmgB,cAAA,MAEja,IAAA+F,KAAQC,IAAA,SAAAC,SAAA,IAAAC,KAAA,YAAAC,GAAA,UAAAC,MAAA,aAAAC,KAAA,YAAAC,IAAA,SAAAC,IAAA,KAAAC,KAAA,cAAAC,KAAA,cAAAC,OAAA,aAAAC,gBAAA,gBAA2MC,IAAKC,EAAA,YAAAC,EAAA,MAAAC,GAAA,QAAAC,GAAA,QAAAC,GAAA,QAAAC,GAAA,UAAAC,GAAA,MAAAC,GAAA,QAAAC,GAAA,WAAAC,GAAA,SAAAC,GAAA,IAAAC,GAAA,SAAAC,GAAA,WAAAC,GAAA,MAAAC,GAAA,OAAAC,GAAA,YAAAC,GAAA,UAAAC,GAAA,aAAAC,GAAA,YAAAC,GAAA,SAAAC,GAAA,SAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KACxNC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,MAAAC,IAAA,MAAAC,IAAA,MAAAC,IAAA,UAAAC,IAAA,aAAAC,IAAA,OACAxtB,IAAAqhB,aAAA7c,IAAoBlkB,IAAA,SAAAoB,GAAgB,GAAAA,EAAApB,IAAA,CAAU,GAAAsB,GAAA2oC,GAAA7oC,EAAApB,MAAAoB,EAAApB,GAAuB,qBAAAsB,EAAA,MAAAA,GAA+B,mBAAAF,EAAA+K,MAAA/K,EAAA4iB,GAAA5iB,GAAA,KAAAA,EAAA,QAAAvC,OAAAG,aAAAoC,IAAA,YAAAA,EAAA+K,MAAA,UAAA/K,EAAA+K,KAAA2+B,GAAA1pC,EAAAqa,UAAA,mBAAgJ1M,SAAA,KAAAoN,QAAA,KAAA4nB,SAAA,KAAA3nB,OAAA,KAAAC,QAAA,KAAA8wB,OAAA,KAAAC,OAAA,KAAAxtB,iBAAAE,GAAAmE,SAAA,SAAA7iB,GAAoI,mBAAAA,EAAA+K,KAAA6X,GAAA5iB,GAAA,GAAkCqa,QAAA,SAAAra,GAAqB,kBAAAA,EAAA+K,MAAA,UAAA/K,EAAA+K,KAAA/K,EAAAqa,QAAA,GAAuDI,MAAA,SAAAza,GAAmB,mBACzfA,EAAA+K,KAAA6X,GAAA5iB,GAAA,YAAAA,EAAA+K,MAAA,UAAA/K,EAAA+K,KAAA/K,EAAAqa,QAAA,KAAkHsE,GAAAghB,aAAA5c,IAAoBkpB,aAAA,OAAqE3tB,GAAAqhB,aAAA3c,IAAoBkpB,QAAA,KAAAC,cAAA,KAAAC,eAAA,KAAApxB,OAAA,KAAAC,QAAA,KAAAF,QAAA,KAAA4nB,SAAA,KAAAnkB,iBAAAE,KAA+K1M,EAAA2tB,aAAA1c,IAAmBjF,aAAA,KAAA0qB,YAAA,KAAAC,cAAA,OAChXhqB,GAAAghB,aAAAzc,IAAoBmpB,OAAA,SAAArsC,GAAmB,gBAAAA,KAAAqsC,OAAA,eAAArsC,MAAAssC,YAAA,GAA+DC,OAAA,SAAAvsC,GAAoB,gBAAAA,KAAAusC,OAAA,eAAAvsC,MAAAwsC,YAAA,cAAAxsC,MAAAysC,WAAA,GAA8FC,OAAA,KAAAC,UAAA,MAA8B,IAAAC,OAASC,KAChT,+jBAAA7uC,MAAA,KAAAC,QAAA,SAAA+B,GAA6lB,GAAAE,GAAAF,EAAA,GAAAyL,cAC7lBzL,EAAAgH,MAAA,GAAAlL,EAAA,KAAAoE,CAAoBA,GAAA,MAAAA,EAAUpE,GAAG8Z,yBAAyByqB,QAAAvkC,EAAAwkC,SAAAxkC,EAAA,WAA+Bma,cAAA/V,IAAmB0sC,GAAA5sC,GAAAlE,EAAQ+wC,GAAA3sC,GAAApE,GACpH,IAAAgxC,KAAQp3B,WAAAk3B,GAAAn3B,cAAA,SAAAzV,EAAAE,EAAApE,EAAAC,GAA8C,GAAAqK,GAAAymC,GAAA7sC,EAAY,KAAAoG,EAAA,WAAkB,QAAApG,GAAU,yBAAA4iB,GAAA9mB,GAAA,WAA4C,iCAAAkE,EAAA8iB,EAAuC,MAAM,8BAAA9iB,EAAA2iB,EAAoC,MAAM,uBAAA7mB,EAAA8mC,OAAA,WAA4C,uIAAA5iC,EAAA2e,EAAkJ,MAAM,2IAAA3e,EACra+iB,EAAG,MAAM,+EAAA/iB,EAAAgjB,EAAuF,MAAM,2EAAAhjB,EAAAyiB,EAAkF,MAAM,wBAAAziB,EAAAijB,EAA6B,MAAM,iBAAAjjB,EAAAse,EAAsB,MAAM,gBAAAte,EAAAkjB,EAAqB,MAAM,2CAAAljB,EAAA0iB,EAAkD,MAAM,SAAA1iB,EAAAgS,EAAyC,MAA7B9R,GAAAF,EAAAga,UAAA5T,EAAAlG,EAAApE,EAAAC,GAAuB2c,EAAAxY,GAAMA,GAAW0f,IAAA,SAAA5f,EAAAE,EAAApE,EAAAC,GAAqBiE,EAAAsX,EAAAtX,EAAAE,EAAApE,EAAAC,GAAcwb,EAAAvX,GAAMyX,GAAA,IAAQkmB,GAAAF,uBAAA,yIAAAz/B,MAAA,MACrboZ,GAAA+mB,GAAAK,6BAAmCnjB,GAAA8iB,GAAAG,oBAA0BhoB,GAAA6nB,GAAAI,oBAA0BZ,GAAAD,0BAA6BqP,kBAAAD,GAAAE,sBAAA5J,GAAA6J,kBAAAnL,GAAAoL,kBAAA3E,GAAA4E,uBAAAzM,IAAoH,IAAAtd,OAAAD,IAAA,CAA0H,IAAA0L,IAAQ,IAAArL,KAAQ5S,QAAA+B,IAAUoR,IAAInT,SAAA,GAAW2S,GAAA5Q,GAO6CoT,GAAA,KAAAE,GAAA,KAYnUmnB,GAAA,mBAAArlC,gBAAA,IAAAygB,GAAA4kB,GAAArlC,OAAA,2BAAA2gB,GAAA0kB,GAAArlC,OAAA,wBAAA4gB,GAAAykB,GAAArlC,OAAA,0BAAA6gB,GAAAwkB,GAAArlC,OAAA,0BAAA0gB,GAAA2kB,GAAArlC,OAAA,4BAAAmgB,GAAA,mBAAAngB,gBAAAL,SACUmhB,GAAA9hB,MAAAoB,QAe3F6gB,GAAAV,IAAA,GAAAS,GAAAT,IAAA,GAqB2N8D,MA0B9IihB,GAAAlxC,OAAA6X,QAAsBC,QAAA+d,KAAWsb,GAAAD,IAAArb,IAAAqb,GAAAE,GAAAD,GAAA,QAAAA,GAAA,QAAAA,GAA6NE,GAAA,iBAAAC,cAAA,mBAAAA,aAAArc,IAAAsc,OAAA,EAAoFA,IAAAF,GAAA,WAAiB,MAAAC,aAAArc,OAAyB,WAAY,MAAAiO,MAAAjO,MACzf,IAAAuc,QAAA,GAAAC,OAAA,EACA,IAAAjyC,GAAAod,UAAA,sBAAA80B,sBAAA,mBAAAC,oBAAA,CAAmG,GAAAC,IAAAC,GAAA,KAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,GAAA,EAAAC,GAAA,GAAAC,GAAA,EAAkDP,IAAAP,IAAOe,YAAA,EAAAtd,cAAA,WAAuC,GAAAjxB,GAAAouC,GAAAX,YAAArc,KAA2B,UAAApxB,IAAA,KAAkBuuC,YAAA,EAAAtd,cAAA,WAAuC,GAAAjxB,GAAAouC,GAAA/O,KAAAjO,KAAoB,UAAApxB,IAAA,GAAiB,IAAAwuC,IAAA,uBAAAvQ,KAAAC,SAAA1zB,SAAA,IAAAxD,MAAA,EAAkE3E,QAAAosC,iBAAA,mBAAAzuC,GAA8C,GAAAA,EAAA1B,SAAA+D,QAAArC,EAAAgG,OAAAwoC,GAAA,CAAgD,GAAbP,IAAA,EAAMjuC,EAAA0tC,KAAO,GAAAU,GAAApuC,EAAA,WAAAkuC,QAC5dluC,GAA8D,YAAtCmuC,SAAA,EAAAO,sBAAAC,KAAxBZ,IAAAQ,YAAA,MAAqER,IAAAQ,YAAA,CAAsBL,KAAA,EAAMluC,EAAAguC,GAAKA,GAAA,KAAQ,OAAAhuC,KAAA+tC,OAAiB,EAAK,IAAAY,IAAA,SAAA3uC,GAAmBmuC,IAAA,CAAM,IAAAjuC,GAAAF,EAAAouC,GAAAE,EAAcpuC,GAAAouC,IAAAD,GAAAC,IAAA,EAAApuC,MAAA,GAAAouC,GAAApuC,EAAAmuC,MAAAnuC,GAAAmuC,GAAAnuC,EAA2CkuC,GAAApuC,EAAAsuC,GAAQL,SAAA,EAAA5rC,OAAAusC,YAAAJ,GAAA,MAAwCb,IAAA,SAAA3tC,EAAAE,GAAsH,MAArG8tC,IAAAhuC,EAAK,MAAAE,GAAA,iBAAAA,GAAAuD,UAAAyqC,GAAAR,KAAAxtC,EAAAuD,SAA0D0qC,SAAA,EAAAO,sBAAAC,KAAsC,GAAUf,GAAA,WAAcI,GAAA,KAAQC,IAAA,EAAMC,IAAA,OAAOP,IAAAtrC,OAAAwrC,oBAAAD,GAAAvrC,OAAAyrC,uBAAgEH,IAAA,SAAA3tC,GAAoB,MAAA0D,YAAA,WAA6B1D,GAAGixB,cAAA,WAAyB,MAAA4d,WACtjBjB,GAAA,SAAA5tC,GAAewD,aAAAxD,GAAiB,IAAA6yB,IAAA,8VAAAD,MAA0WD,MAShJmc,IAAQC,KAAA,+BAAAC,OAAA,qCAAAC,IAAA,8BAElQC,OAAA,GAAA9X,GAAA,SAAAp3B,GAA6B,0BAAAmvC,cAAAC,wBAAA,SAAAlvC,EAAApE,EAAAC,EAAAqK,GAAkF+oC,MAAAC,wBAAA,WAAyC,MAAApvC,GAAAE,EAAApE,MAAoBkE,GAAG,SAAAA,EAAAE,GAAe,GAAAF,EAAAqvC,eAAAP,GAAAG,KAAA,aAAAjvC,KAAA62B,UAAA32B,MAA0D,CAAsF,IAAjFgvC,OAAAtpC,SAAAqJ,cAAA,OAAqCigC,GAAArY,UAAA,QAAA32B,EAAA,SAA4CA,EAAAgvC,GAAAluB,WAAoBhhB,EAAAghB,YAAahhB,EAAA0rB,YAAA1rB,EAAAghB,WAA6B,MAAK9gB,EAAA8gB,YAAahhB,EAAAsrB,YAAAprB,EAAA8gB,eAE9Z8U,IAAQwZ,yBAAA,EAAAC,mBAAA,EAAAC,kBAAA,EAAAC,kBAAA,EAAAC,SAAA,EAAAC,cAAA,EAAAC,iBAAA,EAAAC,aAAA,EAAAC,SAAA,EAAAC,MAAA,EAAAC,UAAA,EAAAC,cAAA,EAAAC,YAAA,EAAAC,cAAA,EAAAC,WAAA,EAAAC,SAAA,EAAAC,YAAA,EAAAC,aAAA,EAAAC,cAAA,EAAAC,YAAA,EAAAC,eAAA,EAAAC,gBAAA,EAAAC,iBAAA,EAAAC,YAAA,EAAAC,WAAA,EAAAC,YAAA,EAAAC,SAAA,EAAAC,OAAA,EAAAC,SAAA,EAAAC,SAAA,EAAAC,QAAA,EAAAC,QAAA,EAAAC,MAAA,EAAAC,aAAA,EAAAC,cAAA,EACRC,aAAA,EAAAC,iBAAA,EAAAC,kBAAA,EAAAC,kBAAA,EAAAC,eAAA,EAAAC,aAAA,GAA0GC,IAAA,wBAA8B51C,QAAAgC,KAAA23B,IAAA73B,QAAA,SAAA+B,GAAoC+xC,GAAA9zC,QAAA,SAAAiC,GAAuBA,IAAAF,EAAAgyC,OAAA,GAAAvmC,cAAAzL,EAAAiyC,UAAA,GAA6Cnc,GAAA51B,GAAA41B,GAAA91B,MACmD,IAAAi2B,IAAArmB,IAAUsiC,UAAA,IAAcC,MAAA,EAAAC,MAAA,EAAAC,IAAA,EAAAC,KAAA,EAAAC,OAAA,EAAAC,IAAA,EAAAC,KAAA,EAAA5mC,OAAA,EAAA6mC,QAAA,EAAAC,MAAA,EAAAC,MAAA,EAAAC,OAAA,EAAAv0C,QAAA,EAAAw0C,OAAA,EAAAC,KAAA,IAExCnc,GAAAkY,GAAAC,KAAA7X,GAAArnB,GAAA7Q,YAAA,IAEnRi4B,IAAQqN,SAAA,QAAAI,WAAA,UAAAC,kBAAA,iBAAAkB,kBAAA,iBAAAC,WAAA,UAAAC,aAAA,YAAAC,SAAA,QAAAC,SAAA,QAAAK,cAAA,aAAAE,kBAAA,iBAAAC,aAAA,YAAAO,SAAA,QAAAC,QAAA,OAAAC,WAAA,UAAAC,YAAA,WAAAC,cAAA,aAAAE,UAAA,SAAAC,WAAA,UAAAE,WAAA,UAAAC,WAAA,UAAAE,cAAA,aAAAO,gBAAA,eACRC,WAAA,WAaA4K,GAAA72C,OAAA6X,QAAsB/E,cAAA0nB,GAAA9wB,eAAAkxB,GAAAkc,qBAAAjc,GAAAkc,eAAA3b,GAAA4b,iBAAA3b,GAAA4b,uBAAA3b,GAAA4b,iBAAA3b,GAAA4b,qBAAA,aAAgLC,gCAAA,aAA6CC,6BAAA,aAA0CC,+BAAA,aAA4CC,4BAAA,aAAyCn4B,uBAAA,SAAAvb,EAAAE,EAAApE,GAAwC,OAAAoE,GAAU,YAA8B,GAA9Bo0B,GAAAt0B,EAAAlE,GAAqBoE,EAAApE,EAAAE,KAAS,UAAAF,EAAAiP,MAAA,MAAA7K,EAAA,CAA8B,IAAApE,EAAAkE,EAAQlE,EAAA8b,YAAa9b,EACrfA,EAAA8b,UAA8F,KAAjF9b,IAAA63C,iBAAA,cAAAvoC,KAAAwoC,UAAA,GAAA1zC,GAAA,mBAAiFA,EAAA,EAAQA,EAAApE,EAAA6C,OAAWuB,IAAA,CAAK,GAAAnE,GAAAD,EAAAoE,EAAW,IAAAnE,IAAAiE,GAAAjE,EAAAmQ,OAAAlM,EAAAkM,KAAA,CAA2B,GAAA9F,GAAA2R,EAAAhc,EAAYqK,IAAA0J,EAAA,MAAiBqN,GAAAphB,GAAMu4B,GAAAv4B,EAAAqK,KAAU,KAAM,gBAAAivB,GAAAr1B,EAAAlE,EAAwB,MAAM,qBAAAoE,EAAApE,EAAAkG,QAAA4yB,GAAA50B,IAAAlE,EAAAm5B,SAAA/0B,GAAA,MAA6DygC,IAAAC,mCAAAoS,GAA0C,IAAAa,IAAA,KAAAC,GAAA,KAEpV9b,GAAAuV,IAAUjhB,mBAAA,SAAAtsB,GAA+B,GAAAE,GAAAF,EAAAqc,QAAiB,QAAAnc,GAAU,eAAAF,OAAAgZ,iBAAAhZ,EAAAqvC,aAAA7Z,GAAA,QAAkE,MAAM,SAAAt1B,EAAA,IAAAA,EAAAF,EAAA4X,WAAA5X,IAAAE,EAAAmvC,cAAA,KAAAnvC,IAAA6zC,QAAA/zC,EAAAw1B,GAAAx1B,EAAAE,GAA4E,MAAAF,IAASqsB,oBAAA,SAAArsB,EAAAE,GAAmC,MAAAs1B,IAAAx1B,EAAAE,IAAe+qB,kBAAA,SAAAjrB,GAA+B,MAAAA,IAASuxB,iBAAA,WAA6BsiB,GAAA9zB,EAAM,IAAA/f,GAAA0hB,IAAW,IAAAL,GAAArhB,GAAA,CAAU,qBAAAA,GAAA,GAAAE,IAA+ByhB,MAAA3hB,EAAA4hB,eAAAC,IAAA7hB,EAAA8hB,kBAA2C9hB,GAAA,CAAQ,GAAAlE,GAAAuG,OAAA0f,cAAA1f,OAAA0f,cACrc,IAAAjmB,GAAA,IAAAA,EAAAk4C,WAAA,CAAwB9zC,EAAApE,EAAAkmB,UAAe,IAAAjmB,GAAAD,EAAAmmB,aAAA7b,EAAAtK,EAAAomB,SAAmCpmB,KAAAqmB,WAAgB,KAAIjiB,EAAAmc,SAAAjW,EAAAiW,SAAsB,MAAA1M,GAASzP,EAAA,IAAO,MAAAF,GAAQ,GAAAoQ,GAAA,EAAAnK,GAAA,EAAAqK,GAAA,EAAAN,EAAA,EAAAkC,EAAA,EAAAP,EAAA3R,EAAAmP,EAAA,IAAqCjP,GAAA,OAAQ,CAAE,OAAAwR,GAAaC,IAAAzR,GAAA,IAAAnE,GAAA,IAAA4V,EAAA0K,WAAApW,EAAAmK,EAAArU,GAAsC4V,IAAAvL,GAAA,IAAAtK,GAAA,IAAA6V,EAAA0K,WAAA/L,EAAAF,EAAAtU,GAAsC,IAAA6V,EAAA0K,WAAAjM,GAAAuB,EAAAgkB,UAAAh3B,QAAwC,QAAA+S,EAAAC,EAAAqP,aAAiC7R,EAAAwC,EAAIA,EAAAD,CAAI,QAAM,CAAE,GAAAC,IAAA3R,EAAA,KAAAE,EAA6D,IAA5CiP,IAAAjP,KAAA8P,IAAAjU,IAAAkK,EAAAmK,GAAsBjB,IAAA/I,KAAA8L,IAAApW,IAAAwU,EAAAF,GAAsB,QAAAsB,EAAAC,EAAAyP,aAAA,KAAkCzP,GAAAxC,EAAIA,EAAAwC,EAAAiG,WAAejG,EAAAD,EAAIxR,GAAA,IAAA+F,IAAA,IAAAqK,EAAA,MACleqR,MAAA1b,EAAA4b,IAAAvR,OAAepQ,GAAA,KAAYA,MAAMyhB,MAAA,EAAAE,IAAA,OAAe3hB,GAAA,IAAY4zC,KAAIG,YAAAj0C,EAAAk0C,eAAAh0C,GAAgC4f,IAAA,IAAO0R,iBAAA,WAA6B,GAAAxxB,GAAA8zC,GAAA5zC,EAAAwhB,KAAA5lB,EAAAkE,EAAAi0C,YAAAl4C,EAAAiE,EAAAk0C,cAAmD,IAAAh0C,IAAApE,GAAAq8B,GAAAvyB,SAAAoT,gBAAAld,GAAA,CAA0C,GAAAulB,GAAAvlB,GAAA,GAAAoE,EAAAnE,EAAA4lB,MAAA3hB,EAAAjE,EAAA8lB,QAAA,KAAA7hB,MAAAE,GAAA,kBAAApE,KAAA8lB,eAAA1hB,EAAApE,EAAAgmB,aAAAmc,KAAArK,IAAA5zB,EAAAlE,EAAAkG,MAAArD,YAAkI,IAAA0D,OAAA0f,aAAA,CAA6B7hB,EAAAmC,OAAA0f,cAAwB,IAAA3b,GAAAtK,EAAA+c,KAAAla,MAAqBqB,GAAAi+B,KAAArK,IAAA73B,EAAA4lB,MAAAvb,GAAsBrK,MAAA,KAAAA,EAAA8lB,IAAA7hB,EAAAi+B,KAAArK,IAAA73B,EAAA8lB,IAAAzb,IAAqClG,EAAAi0C,QAAAn0C,EACzejE,IAAAqK,EAAArK,IAAAiE,IAAAoG,GAAiBA,EAAA6a,GAAAnlB,EAAAkE,EAAU,IAAAoQ,GAAA6Q,GAAAnlB,EAAAC,EAAc,IAAAqK,GAAAgK,IAAA,IAAAlQ,EAAA8zC,YAAA9zC,EAAA8hB,aAAA5b,EAAAT,MAAAzF,EAAA+hB,eAAA7b,EAAA+a,QAAAjhB,EAAAgiB,YAAA9R,EAAAzK,MAAAzF,EAAAiiB,cAAA/R,EAAA+Q,QAAA,CAA+H,GAAAlb,GAAAL,SAAAwuC,aAA6BnuC,GAAAouC,SAAAjuC,EAAAT,KAAAS,EAAA+a,QAA4BjhB,EAAAo0C,kBAAoBt0C,EAAAjE,GAAAmE,EAAAq0C,SAAAtuC,GAAA/F,EAAAi0C,OAAA/jC,EAAAzK,KAAAyK,EAAA+Q,UAAAlb,EAAAuuC,OAAApkC,EAAAzK,KAAAyK,EAAA+Q,QAAAjhB,EAAAq0C,SAAAtuC,KAA8F,IAAL/F,KAAKF,EAAAlE,EAAQkE,IAAA4X,YAAe,IAAA5X,EAAAqc,UAAAnc,EAAAmB,MAAyBuoB,QAAA5pB,EAAAy0C,KAAAz0C,EAAA00C,WAAAC,IAAA30C,EAAA40C,WAAoD,KAANxc,GAAAt8B,GAAMA,EAAA,EAAQA,EAAAoE,EAAAvB,OAAW7C,IAAAkE,EAAAE,EAAApE,GAAAkE,EAAA4pB,QAAA8qB,WAAA10C,EAAAy0C,KAAAz0C,EAAA4pB,QAAAgrB,UAC1c50C,EAAA20C,IAAMb,GAAA,KAAQh0B,GAAA+zB,IAAOA,GAAA,MAAQ7pB,eAAA,SAAAhqB,EAAAE,EAAApE,EAAAC,EAAAqK,GAAiE,MAA7BpG,GAAA22B,GAAA32B,EAAAE,EAAApE,EAAAC,GAAciE,EAAA4R,IAAAxL,EAAOpG,EAAAgY,IAAA9X,EAAQF,GAASkqB,mBAAA,SAAAlqB,EAAAE,GAAkCF,EAAAsrB,YAAAprB,IAAiBiqB,wBAAA,SAAAnqB,EAAAE,EAAApE,EAAAC,GAA2Ci7B,GAAAh3B,EAAAE,EAAApE,EAAAC,EAAYiE,GAAA,CAAG,OAAAE,GAAU,qDAAAF,IAAAlE,EAAA89B,SAAyE,MAAA55B,GAAQA,GAAA,EAAK,MAAAA,IAASoqB,cAAA,SAAApqB,EAAAE,EAAApE,EAAAC,EAAAqK,GAAmC,MAAAmxB,IAAAv3B,EAAAE,EAAApE,EAAAC,EAAAqK,IAAqB8iB,qBAAA,SAAAlpB,EAAAE,GAAoC,mBAAAF,GAAA,iBAAAE,GAAAmQ,UAAA,iBAAAnQ,GAAAmQ,UAAA,iBACzZnQ,GAAAi1B,yBAAA,OAAAj1B,EAAAi1B,yBAAA,iBAAAj1B,GAAAi1B,wBAAAgC,QAAuH/N,0BAAA,SAAAppB,EAAAE,GAAyC,QAAAA,EAAAk6B,QAAiBnQ,mBAAA,SAAAjqB,EAAAE,EAAApE,EAAAC,GAAuD,MAAjBiE,GAAA+2B,GAAA/2B,EAAAE,GAAUF,EAAA4R,IAAA7V,EAAOiE,GAASoxB,IAAAsc,GAAA7iB,UAAkBK,YAAA,SAAAlrB,GAAwBA,EAAA60C,SAAU1pB,aAAA,SAAAnrB,EAAAE,EAAApE,EAAAC,EAAAqK,GAAkCpG,EAAAgY,IAAA5R,EAAQoxB,GAAAx3B,EAAAE,EAAApE,EAAAC,EAAAqK,IAAcglB,iBAAA,SAAAprB,GAA8BA,EAAAkhB,YAAA,IAAiBmK,iBAAA,SAAArrB,EAAAE,EAAApE,GAAkCkE,EAAA21B,UAAA75B,GAAcwvB,YAAA,SAAAtrB,EAAAE,GAA2BF,EAAAsrB,YAAAprB,IAAiBqrB,uBAAA,SAAAvrB,EACxeE,GAAG,IAAAF,EAAAqc,SAAArc,EAAA4X,WAAA4T,aAAAtrB,EAAAF,KAAAsrB,YAAAprB,IAA+DsrB,aAAA,SAAAxrB,EAAAE,EAAApE,GAA8BkE,EAAAwrB,aAAAtrB,EAAApE,IAAoB2vB,wBAAA,SAAAzrB,EAAAE,EAAApE,GAAyC,IAAAkE,EAAAqc,SAAArc,EAAA4X,WAAA4T,aAAAtrB,EAAApE,GAAAkE,EAAAwrB,aAAAtrB,EAAApE,IAAkE4vB,YAAA,SAAA1rB,EAAAE,GAA2BF,EAAA0rB,YAAAxrB,IAAiByrB,yBAAA,SAAA3rB,EAAAE,GAAwC,IAAAF,EAAAqc,SAAArc,EAAA4X,WAAA8T,YAAAxrB,GAAAF,EAAA0rB,YAAAxrB,KAA6DusB,WAAYC,mBAAA,SAAA1sB,EAAAE,GAAiC,WAAAF,EAAAqc,UAAAnc,EAAAoH,gBAAAtH,EAAAgc,SAAA1U,cAAA,KAAAtH,GAAyE2sB,uBAAA,SAAA3sB,EACteE,GAAG,WAAAA,GAAA,IAAAF,EAAAqc,SAAA,KAAArc,GAAoC4sB,yBAAA,SAAA5sB,GAAsC,IAAAA,IAAAohB,YAAoBphB,GAAA,IAAAA,EAAAqc,UAAA,IAAArc,EAAAqc,UAAkCrc,IAAAohB,WAAiB,OAAAphB,IAAS6sB,wBAAA,SAAA7sB,GAAqC,IAAAA,IAAAghB,WAAmBhhB,GAAA,IAAAA,EAAAqc,UAAA,IAAArc,EAAAqc,UAAkCrc,IAAAohB,WAAiB,OAAAphB,IAAS8sB,gBAAA,SAAA9sB,EAAAE,EAAApE,EAAAC,EAAAqK,EAAAgK,GAAsD,MAAfpQ,GAAA4R,IAAAxB,EAAOpQ,EAAAgY,IAAAlc,EAAQ27B,GAAAz3B,EAAAE,EAAApE,EAAAsK,EAAArK,IAAqBgxB,oBAAA,SAAA/sB,EAAAE,EAAApE,GAA4C,MAAPkE,GAAA4R,IAAA9V,EAAO47B,GAAA13B,EAAAE,IAAe40C,yCAAA,aAAsDC,gCAAA,aAC7cC,+BAAA,aAA2CC,sBAAA,aAAmCC,sCAAA,aAAmDC,0CAAA,aAAuDC,6BAAA,aAA0CC,iCAAA,cAA+ChkB,yBAAAsc,GAAArc,uBAAAsc,GAAAzkB,mBAAA,GAA8EvN,GAAAoc,GAAApG,eAE9RsG,GAAAt7B,UAAAoS,OAAA,SAAAhP,EAAAE,GAAkC83B,GAAA9F,gBAAAlyB,EAAAX,KAAA04B,oBAAA,KAAA73B,IAAsDg4B,GAAAt7B,UAAA04C,QAAA,SAAAt1C,GAAiCg4B,GAAA9F,gBAAA,KAAA7yB,KAAA04B,oBAAA,KAAA/3B,GAC1L,IAAAu1C,KAAQC,aAAAvd,GAAAwd,YAAA,SAAAz1C,GAAwC,SAAAA,EAAA,WAAuB,QAAAA,EAAAqc,SAAA,MAAArc,EAA2B,IAAAE,GAAAF,EAAAif,mBAA4B,IAAA/e,EAAA,MAAA83B,IAAA5F,iBAAAlyB,EAAkC,oBAAAF,GAAAgP,OAAAc,EAAA,OAAAA,EAAA,MAAA3T,OAAAgC,KAAA6B,KAA8D6pB,QAAA,SAAA7pB,EAAAE,EAAApE,GAAyB,MAAAg8B,IAAA,KAAA93B,EAAAE,GAAA,EAAApE,IAAyBkT,OAAA,SAAAhP,EAAAE,EAAApE,GAAwB,MAAAg8B,IAAA,KAAA93B,EAAAE,GAAA,EAAApE,IAAyB45C,oCAAA,SAAA11C,EAAAE,EAAApE,EAAAC,GAA8G,OAAvD,MAAAiE,OAAA,KAAAA,EAAAif,sBAAAnP,EAAA,MAAuDgoB,GAAA93B,EAAAE,EAAApE,GAAA,EAAAC,IAAsB45C,uBAAA,SAAA31C,GAC7b,MADie23B,IAAA33B,IACze8P,EAAA,QAAQ9P,EAAA+3B,sBAAAC,GAAAnG,iBAAA,WAA4DiG,GAAA,UAAA93B,GAAA,aAA6BA,EAAA+3B,oBAAA,UAA6B,IAAS6d,sBAAA3d,GAAA4d,wBAAAh6B,EAAAi6B,yBAAA9d,GAAAjG,gBAAAD,UAAAkG,GAAAlG,UAAAje,oDAA0KkiC,eAAAnY,GAAAoY,oBAAA7Y,GAAA8Y,iBAAAvX,GAAAwX,yBAAArV,GAAAsV,sBAAAhY,GAAAiY,sBAAA7S,IACjTvL,IAAA1F,oBAAsBC,wBAAA5a,EAAA0+B,WAAA,EAAAziC,QAAA,SAAA0iC,oBAAA,aAA2F,IAAAC,IAAAp6C,OAAA6X,QAAsBC,QAAAshC,KAAWiB,GAAAD,IAAAhB,IAAAgB,EAAgB96C,GAAAD,QAAAg7C,GAAA,QAAAA,GAAA,QAAAA,IhBwhD5J,SAAU/6C,EAAQD,EAASH,GAEjC,YiBpvDA,IAAA0d,KAAA,oBAAA1W,iBAAAuD,WAAAvD,OAAAuD,SAAAqJ,eAQAwnC,GAEA19B,YAEA29B,cAAA,oBAAAC,QAEAC,qBAAA79B,MAAA1W,OAAAosC,mBAAApsC,OAAA6b,aAEA24B,eAAA99B,KAAA1W,OAAAy0C,OAEAC,YAAAh+B,EAIAtd,GAAAD,QAAAi7C,GjBmwDM,SAAUh7C,EAAQD,EAASH,GAEjC,YkB1xDA,IAAA0D,GAAA1D,EAAA,GAMA27C,GASA/2B,OAAA,SAAA5hB,EAAA44C,EAAAlyC,GACA,MAAA1G,GAAAowC,kBACApwC,EAAAowC,iBAAAwI,EAAAlyC,GAAA,IAEAmyC,OAAA,WACA74C,EAAA84C,oBAAAF,EAAAlyC,GAAA,MAGK1G,EAAA6f,aACL7f,EAAA6f,YAAA,KAAA+4B,EAAAlyC,IAEAmyC,OAAA,WACA74C,EAAAwf,YAAA,KAAAo5B,EAAAlyC,UAJK,IAkBLqb,QAAA,SAAA/hB,EAAA44C,EAAAlyC,GACA,MAAA1G,GAAAowC,kBACApwC,EAAAowC,iBAAAwI,EAAAlyC,GAAA,IAEAmyC,OAAA,WACA74C,EAAA84C,oBAAAF,EAAAlyC,GAAA,OAQAmyC,OAAAn4C,IAKAq4C,gBAAA,aAGA37C,GAAAD,QAAAw7C,GlB0yDM,SAAUv7C,EAAQD,EAASH,GAEjC,YmB91DA,SAAAg8C,GAAAC,GAEA,wBADAA,MAAA,oBAAA1xC,uBAAA1I,KAEA,WAEA,KACA,MAAAo6C,GAAA3b,eAAA2b,EAAAhvC,KACG,MAAAlC,GACH,MAAAkxC,GAAAhvC,MAIA7M,EAAAD,QAAA67C,GnB03DM,SAAU57C,EAAQD,EAASH,GAEjC,YoB34DA,SAAA86B,GAAAtkB,EAAA1C,GAEA,MAAA0C,KAAA1C,EAIA,IAAA0C,GAAA,IAAA1C,GAAA,EAAA0C,IAAA,EAAA1C,EAGA0C,OAAA1C,MASA,QAAAooC,GAAAC,EAAAC,GACA,GAAAthB,EAAAqhB,EAAAC,GACA,QAGA,qBAAAD,IAAA,OAAAA,GAAA,iBAAAC,IAAA,OAAAA,EACA,QAGA,IAAAC,GAAAv7C,OAAAgC,KAAAq5C,GACAG,EAAAx7C,OAAAgC,KAAAs5C,EAEA,IAAAC,EAAA/4C,SAAAg5C,EAAAh5C,OACA,QAIA,QAAAjD,GAAA,EAAiBA,EAAAg8C,EAAA/4C,OAAkBjD,IACnC,IAAAmB,EAAAjB,KAAA67C,EAAAC,EAAAh8C,MAAAy6B,EAAAqhB,EAAAE,EAAAh8C,IAAA+7C,EAAAC,EAAAh8C,KACA,QAIA,UA/CA,GAAAmB,GAAAV,OAAAS,UAAAC,cAkDApB,GAAAD,QAAA+7C,GpBo6DM,SAAU97C,EAAQD,EAASH,GAEjC,YqBp9DA,SAAAu8C,GAAAC,EAAAC,GACA,SAAAD,IAAAC,KAEGD,IAAAC,IAEAC,EAAAF,KAEAE,EAAAD,GACHF,EAAAC,EAAAC,EAAAlgC,YACG,YAAAigC,GACHA,EAAAG,SAAAF,KACGD,EAAAI,4BACH,GAAAJ,EAAAI,wBAAAH,MAnBA,GAAAC,GAAA18C,EAAA,GAyBAI,GAAAD,QAAAo8C,GrB2+DM,SAAUn8C,EAAQD,EAASH,GAEjC,YsBhgEA,SAAA08C,GAAAr7C,GACA,MAAAw7C,GAAAx7C,IAAA,GAAAA,EAAA2f,SAPA,GAAA67B,GAAA78C,EAAA,GAUAI,GAAAD,QAAAu8C,GtBshEM,SAAUt8C,EAAQD,EAASH,GAEjC,YuB9hEA,SAAA68C,GAAAx7C,GACA,GAAA46C,GAAA56C,IAAA25B,eAAA35B,EAAAkJ,SACAy9B,EAAAiU,EAAAjU,aAAAhhC,MACA,UAAA3F,KAAA,mBAAA2mC,GAAA8U,KAAAz7C,YAAA2mC,GAAA8U,KAAA,iBAAAz7C,IAAA,iBAAAA,GAAA2f,UAAA,iBAAA3f,GAAAsf,WAGAvgB,EAAAD,QAAA08C,GvBkjEM,SAAUz8C,EAAQD,EAASH,GAEjC,YwB3jEA,SAAA6mB,GAAAvc,GAIA,IACAA,EAAAkvC,QACG,MAAAzuC,KAGH3K,EAAAD,QAAA0mB,GxB8kEM,SAAUzmB,EAAQiT,EAAqBrT,GAE7C,YAM8f,SAAS+8C,GAAgBC,EAASC,GAAa,KAAKD,YAAoBC,IAAc,KAAM,IAAIn7C,WAAU,qCAAuC,QAASo7C,GAA2B73C,EAAK9E,GAAM,IAAI8E,EAAM,KAAM,IAAIsD,gBAAe,4DAA8D,QAAOpI,GAAqB,iBAAPA,IAA+B,mBAAPA,GAAwB8E,EAAL9E,EAAW,QAAS48C,GAAUC,EAASC,GAAY,GAAuB,mBAAbA,IAAsC,OAAbA,EAAmB,KAAM,IAAIv7C,WAAU,iEAAkEu7C,GAAaD,GAAS77C,UAAUT,OAAOw8C,OAAOD,GAAYA,EAAW97C,WAAWiE,aAAamB,MAAMy2C,EAASn8C,YAAW,EAAMs8C,UAAS,EAAKv8C,cAAa,KAAWq8C,IAAWv8C,OAAO08C,eAAe18C,OAAO08C,eAAeJ,EAASC,GAAYD,EAASK,UAAUJ,GAL3wC,GAAI/pC,GAAsCtT,EAAoB,GAC1DuT,EAA8CvT,EAAoBmB,EAAEmS,GACpEoqC,EAAiD19C,EAAoB,IACrE29C,EAAmD39C,EAAoB,IACvE49C,EAAkD59C,EAAoB,IAC3F69C,EAAa,WAAW,QAASC,GAAiB96C,EAAOkR,GAAO,IAAI,GAAI7T,GAAE,EAAEA,EAAE6T,EAAM5Q,OAAOjD,IAAI,CAAC,GAAI09C,GAAW7pC,EAAM7T,EAAG09C,GAAW98C,WAAW88C,EAAW98C,aAAY,EAAM88C,EAAW/8C,cAAa,EAAQ,SAAU+8C,KAAWA,EAAWR,UAAS,GAAKz8C,OAAOC,eAAeiC,EAAO+6C,EAAWx6C,IAAIw6C,IAAc,MAAO,UAASd,EAAYe,EAAWC,GAAuI,MAAvHD,IAAWF,EAAiBb,EAAY17C,UAAUy8C,GAAeC,GAAYH,EAAiBb,EAAYgB,GAAoBhB,MyBxmEteiB,EzBwmE8yC,SAASC,GAAsC,QAASD,KAAgC,MAA1BnB,GAAgB/4C,KAAKk6C,GAAYhB,EAA2Bl5C,MAAMk6C,EAAIT,WAAW38C,OAAOs9C,eAAeF,IAAMtkC,MAAM5V,KAAKX,YAAglB,MAAjvB85C,GAAUe,EAAIC,GAAgKN,EAAaK,IAAM36C,IAAI,SAASoD,MAAM,WyBtmEzhD,MACE4M,GAAA5O,EAAAiP,cAAA,OAAKqsB,UAAU,OACb1sB,EAAA5O,EAAAiP,cAAA,UAAQqsB,UAAU,cAChB1sB,EAAA5O,EAAAiP,cAAA,MAAIqsB,UAAU,aAAd,qBAEF1sB,EAAA5O,EAAAiP,cAAA,KAAGqsB,UAAU,aAAb,wBACuB1sB,EAAA5O,EAAAiP,cAAA,0BADvB,6BzBimEyjEsqC,GyBxmE/iE5qC,EAAA,UAelBtM,QAAOq3C,cAAgB,WACrBv9C,OAAA48C,EAAA,KACA58C,OAAA68C,EAAA,KACA78C,OAAA88C,EAAA,KACA51C,QAAQs2C,IAAI,yBAIdt3C,OAAOu3C,kBAAoB,WACzBz9C,OAAA48C,EAAA,KACA11C,QAAQs2C,IAAI,8BAIdjrC,EAAA,KzB+kEM,SAAUjT,EAAQiT,EAAqBrT,GAE7C,Y0BhnEA,SAASw+C,KACL,MAAOzqC,oBAAmB,4BAG9B,QAAS0qC,KACL,MAAO7b,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS6b,KACL,MAAO9b,MAAKC,SAGhB,QAAS8b,KACL,MAAO/b,MAAKC,SAGhB,QAAS+b,KACL,MAAOhnB,WAAM/1B,IAGjB,QAASg9C,KACL,MAAOjc,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASic,KACL,MAAOlc,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASkc,KACL,MAAOhrC,oBAAmB,4BAG9B,QAASirC,KACL,MAAOpc,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASoc,KACL,MAAOrc,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASqc,KACL,MAAOtc,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASsc,KACL,MAAOvc,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASuc,KACLZ,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IAIJ,QAASE,KACL,MAAOzc,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASyc,KACL,MAAO1c,MAAKC,SAGhB,QAAS0c,KACL,MAAO3c,MAAKC,SAGhB,QAAS2c,KACL,MAAO5c,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS4c,KACL,MAAO7c,MAAKC,SAGhB,QAAS6c,KACL,MAAO9nB,WAAM/1B,IAGjB,QAAS89C,KACL,MAAO/c,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS+c,KACL,MAAOhoB,WAAM/1B,IAGjB,QAASg+C,KACL,MAAOjd,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASid,KACL,MAAOld,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASkd,KACL,MAAOnd,MAAKC,SAGhB,QAASmd,KACL,MAAOjsC,oBAAmB,4BAG9B,QAASksC,KACLZ,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IAIJ,QAASE,KACL,MAAOnsC,oBAAmB,4BAG9B,QAASosC,KACL,MAAOvoB,WAAM/1B,IAGjB,QAASu+C,KACL,MAAOxoB,WAAM/1B,IAGjB,QAASw+C,KACL,MAAOzd,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASyd,KACL,MAAO1d,MAAKC,SAGhB,QAAS0d,KACL,MAAO3d,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS2d,KACL,MAAO5d,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS4d,KACL,MAAO7d,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS6d,KACL,MAAO3sC,oBAAmB,4BAG9B,QAAS4sC,KACL,MAAO5sC,oBAAmB,4BAG9B,QAAS6sC,KACL,MAAO7sC,oBAAmB,4BAG9B,QAAS8sC,KACL,MAAO9sC,oBAAmB,4BAG9B,QAAS+sC,KACLZ,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IAIJ,QAASE,KACL,MAAOne,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASme,KACL,MAAOpe,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASoe,KACL,MAAOre,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASqe,KACL,MAAOntC,oBAAmB,4BAG9B,QAASotC,KACL,MAAOptC,oBAAmB,4BAG9B,QAASqtC,KACL,MAAOxpB,WAAM/1B,IAGjB,QAASw/C,KACL,MAAOzpB,WAAM/1B,IAGjB,QAASy/C,KACL,MAAO1pB,WAAM/1B,IAGjB,QAAS0/C,KACL,MAAOxtC,oBAAmB,4BAG9B,QAASytC,KACL,MAAO5e,MAAKC,SAGhB,QAAS4e,KACL,MAAO7pB,WAAM/1B,IAGjB,QAAS6/C,KACL,MAAO3tC,oBAAmB,4BAG9B,QAAS4tC,MACLZ,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IAIJ,QAASE,MACL,MAAOhqB,WAAM/1B,IAGjB,QAASggD,MACL,MAAOjf,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASif,MACL,MAAOlf,MAAKC,SAGhB,QAASkf,MACL,MAAOnqB,WAAM/1B,IAGjB,QAASmgD,MACL,MAAOjuC,oBAAmB,4BAG9B,QAASkuC,MACL,MAAOrqB,WAAM/1B,IAGjB,QAASqgD,MACL,MAAOtqB,WAAM/1B,IAGjB,QAASsgD,MACL,MAAOvqB,WAAM/1B,IAGjB,QAASugD,MACL,MAAOxqB,WAAM/1B,IAGjB,QAASwgD,MACL,MAAOtuC,oBAAmB,4BAG9B,QAASuuC,MACL,MAAO1f,MAAKC,SAGhB,QAAS0f,MACL,MAAO3qB,WAAM/1B,IAGjB,QAAS2gD,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAIJ,QAASE,MACL,MAAO7f,MAAKC,SAGhB,QAAS6f,MACL,MAAO9f,MAAKC,SAGhB,QAAS8f,MACL,MAAO/f,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS+f,MACL,MAAO7uC,oBAAmB,4BAG9B,QAAS8uC,MACL,MAAO9uC,oBAAmB,4BAG9B,QAAS+uC,MACL,MAAO/uC,oBAAmB,4BAG9B,QAASgvC,MACL,MAAOngB,MAAKC,SAGhB,QAASmgB,MACL,MAAOprB,WAAM/1B,IAGjB,QAASohD,MACL,MAAOrgB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASqgB,MACL,MAAOtgB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASsgB,MACL,MAAOvrB,WAAM/1B,IAGjB,QAASuhD,MACL,MAAOxgB,MAAKC,SAGhB,QAASwgB,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAIJ,QAASE,MACL,MAAOvvC,oBAAmB,4BAG9B,QAASwvC,MACL,MAAO3gB,MAAKC,SAGhB,QAAS2gB,MACL,MAAO5rB,WAAM/1B,IAGjB,QAAS4hD,MACL,MAAO7rB,WAAM/1B,IAGjB,QAAS6hD,MACL,MAAO9rB,WAAM/1B,IAGjB,QAAS8hD,MACL,MAAO/gB,MAAKC,SAGhB,QAAS+gB,MACL,MAAOhhB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASghB,MACL,MAAOjhB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASihB,MACL,MAAOlhB,MAAKC,SAGhB,QAASkhB,MACL,MAAOnhB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASmhB,MACL,MAAOjwC,oBAAmB,4BAG9B,QAASkwC,MACL,MAAOrhB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASqhB,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAIJ,QAASE,MACL,MAAOvsB,WAAM/1B,IAGjB,QAASuiD,MACL,MAAOxhB,MAAKC,SAGhB,QAASwhB,MACL,MAAOtwC,oBAAmB,4BAG9B,QAASuwC,MACL,MAAO1hB,MAAKC,SAGhB,QAAS0hB,MACL,MAAO3hB,MAAKC,SAGhB,QAAS2hB,MACL,MAAO5hB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS4hB,MACL,MAAO7hB,MAAKC,SAGhB,QAAS6hB,MACL,MAAO9hB,MAAKC,SAGhB,QAAS8hB,MACL,MAAO/hB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS+hB,MACL,MAAOhtB,WAAM/1B,IAGjB,QAASgjD,MACL,MAAOjiB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASiiB,MACL,MAAOliB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASkiB,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAIJ,QAASE,MACL,MAAOpiB,MAAKC,SAGhB,QAASoiB,MACL,MAAOlxC,oBAAmB,4BAG9B,QAASmxC,MACL,MAAOnxC,oBAAmB,4BAG9B,QAASoxC,MACL,MAAOviB,MAAKC,SAGhB,QAASuiB,MACL,MAAOxtB,WAAM/1B,IAGjB,QAASwjD,MACL,MAAOziB,MAAKC,SAGhB,QAASyiB,MACL,MAAOvxC,oBAAmB,4BAG9B,QAASwxC,MACL,MAAO3iB,MAAKC,SAGhB,QAAS2iB,MACL,MAAO5iB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS4iB,MACL,MAAO7iB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS6iB,MACL,MAAO9iB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS8iB,MACL,MAAO/iB,MAAKC,SAGhB,QAAS+iB,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAIJ,QAASE,MACL,MAAOjjB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASijB,MACL,MAAOljB,MAAKC,SAGhB,QAASkjB,MACL,MAAOhyC,oBAAmB,4BAG9B,QAASiyC,MACL,MAAOjyC,oBAAmB,4BAG9B,QAASkyC,MACL,MAAOrjB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASqjB,MACL,MAAOtuB,WAAM/1B,IAGjB,QAASskD,MACL,MAAOvjB,MAAKC,SAGhB,QAASujB,MACL,MAAOxjB,MAAKC,SAGhB,QAASwjB,MACL,MAAOzjB,MAAKC,SAGhB,QAASyjB,MACL,MAAOvyC,oBAAmB,4BAG9B,QAASwyC,MACL,MAAO3jB,MAAKC,SAGhB,QAAS2jB,MACL,MAAO5jB,MAAKC,SAGhB,QAAS4jB,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAIJ,QAASE,MACL,MAAO9jB,MAAKC,SAGhB,QAAS8jB,MACL,MAAO/uB,WAAM/1B,IAGjB,QAAS+kD,MACL,MAAOhkB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASgkB,MACL,MAAOjkB,MAAKC,SAGhB,QAASikB,MACL,MAAOlkB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASkkB,MACL,MAAOnvB,WAAM/1B,IAGjB,QAASmlD,MACL,MAAOpkB,MAAKC,SAGhB,QAASokB,MACL,MAAOrkB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASqkB,MACL,MAAOtkB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASskB,MACL,MAAOvkB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASukB,MACL,MAAOxkB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASwkB,MACL,MAAOtzC,oBAAmB,4BAG9B,QAASuzC,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAIJ,QAASE,MACL,MAAO3kB,MAAKC,SAGhB,QAAS2kB,MACL,MAAO5kB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS4kB,MACL,MAAO7kB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS6kB,MACL,MAAO3zC,oBAAmB,4BAG9B,QAAS4zC,MACL,MAAO5zC,oBAAmB,4BAG9B,QAAS6zC,MACL,MAAOhwB,WAAM/1B,IAGjB,QAASgmD,MACL,MAAOjwB,WAAM/1B,IAGjB,QAASimD,MACL,MAAOllB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASklB,MACL,MAAOh0C,oBAAmB,4BAG9B,QAASi0C,MACL,MAAOj0C,oBAAmB,4BAG9B,QAASk0C,MACL,MAAOrlB,MAAKC,SAGhB,QAASqlB,MACL,MAAOtlB,MAAKC,SAGhB,QAASslB,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAIJ,QAASE,MACLhJ,IACAa,IACAa,IACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KAIJ,QAASE,MACL,MAAOt0C,oBAAmB,4BAG9B,QAASu0C,MACL,MAAOv0C,oBAAmB,4BAG9B,QAASw0C,MACL,MAAOx0C,oBAAmB,4BAG9B,QAASy0C,MACL,MAAO5lB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS4lB,MACL,MAAO7lB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS6lB,MACL,MAAO9lB,MAAKC,SAGhB,QAAS8lB,MACL,MAAO/wB,WAAM/1B,IAGjB,QAAS+mD,MACL,MAAOhmB,MAAKC,SAGhB,QAASgmB,MACL,MAAOjxB,WAAM/1B,IAGjB,QAASinD,MACL,MAAOlmB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASkmB,MACL,MAAOh1C,oBAAmB,4BAG9B,QAASi1C,MACL,MAAOpmB,MAAKC,SAGhB,QAASomB,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAIJ,QAASE,MACL,MAAOn1C,oBAAmB,4BAG9B,QAASo1C,MACL,MAAOp1C,oBAAmB,4BAG9B,QAASq1C,MACL,MAAOr1C,oBAAmB,4BAG9B,QAASs1C,MACL,MAAOzxB,WAAM/1B,IAGjB,QAASynD,MACL,MAAO1mB,MAAKC,SAGhB,QAAS0mB,MACL,MAAO3xB,WAAM/1B,IAGjB,QAAS2nD,MACL,MAAO5xB,WAAM/1B,IAGjB,QAAS4nD,MACL,MAAO7mB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS6mB,MACL,MAAO9mB,MAAKC,SAGhB,QAAS8mB,MACL,MAAO/mB,MAAKC,SAGhB,QAAS+mB,MACL,MAAOhnB,MAAKC,SAGhB,QAASgnB,MACL,MAAOjnB,MAAKC,SAGhB,QAASinB,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAIJ,QAASE,MACL,MAAOh2C,oBAAmB,4BAG9B,QAASi2C,MACL,MAAOj2C,oBAAmB,4BAG9B,QAASk2C,MACL,MAAOrnB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASqnB,MACL,MAAOn2C,oBAAmB,4BAG9B,QAASo2C,MACL,MAAOp2C,oBAAmB,4BAG9B,QAASq2C,MACL,MAAOxnB,MAAKC,SAGhB,QAASwnB,MACL,MAAOt2C,oBAAmB,4BAG9B,QAASu2C,MACL,MAAO1nB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS0nB,MACL,MAAO3yB,WAAM/1B,IAGjB,QAAS2oD,MACL,MAAO5nB,MAAKC,SAGhB,QAAS4nB,MACL,MAAO12C,oBAAmB,4BAG9B,QAAS22C,MACL,MAAO9nB,MAAKC,SAGhB,QAAS8nB,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAIJ,QAASE,MACL,MAAOhzB,WAAM/1B,IAGjB,QAASgpD,MACL,MAAO92C,oBAAmB,4BAG9B,QAAS+2C,MACL,MAAOlzB,WAAM/1B,IAGjB,QAASkpD,MACL,MAAOnoB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASmoB,MACL,MAAOpzB,WAAM/1B,IAGjB,QAASopD,MACL,MAAOroB,MAAKC,SAGhB,QAASqoB,MACL,MAAOtoB,MAAKC,SAGhB,QAASsoB,MACL,MAAOp3C,oBAAmB,4BAG9B,QAASq3C,MACL,MAAOxoB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASwoB,MACL,MAAOzoB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASyoB,MACL,MAAO1oB,MAAKC,SAGhB,QAAS0oB,MACL,MAAO3oB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS2oB,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAIJ,QAASE,MACL,MAAO13C,oBAAmB,4BAG9B,QAAS23C,MACL,MAAO9zB,WAAM/1B,IAGjB,QAAS8pD,MACL,MAAO53C,oBAAmB,4BAG9B,QAAS63C,MACL,MAAOh0B,WAAM/1B,IAGjB,QAASgqD,MACL,MAAOj0B,WAAM/1B,IAGjB,QAASiqD,MACL,MAAOl0B,WAAM/1B,IAGjB,QAASkqD,MACL,MAAOn0B,WAAM/1B,IAGjB,QAASmqD,MACL,MAAOppB,MAAKC,SAGhB,QAASopB,MACL,MAAOrpB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASqpB,MACL,MAAOt0B,WAAM/1B,IAGjB,QAASsqD,MACL,MAAOvpB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASupB,MACL,MAAOxpB,MAAKC,SAGhB,QAASwpB,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAIJ,QAASE,MACL,MAAOv4C,oBAAmB,4BAG9B,QAASw4C,MACL,MAAO30B,WAAM/1B,IAGjB,QAAS2qD,MACL,MAAO5pB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS4pB,MACL,MAAO7pB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS6pB,MACL,MAAO9pB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS8pB,MACL,MAAO54C,oBAAmB,4BAG9B,QAAS64C,MACL,MAAOhqB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASgqB,MACL,MAAOj1B,WAAM/1B,IAGjB,QAASirD,MACL,MAAOl1B,WAAM/1B,IAGjB,QAASkrD,MACL,MAAOnqB,MAAKC,SAGhB,QAASmqB,MACL,MAAOpqB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASoqB,MACL,MAAOr1B,WAAM/1B,IAGjB,QAASqrD,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAIJ,QAASE,MACL,MAAOvqB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASuqB,MACL,MAAOx1B,WAAM/1B,IAGjB,QAASwrD,MACL,MAAOz1B,WAAM/1B,IAGjB,QAASyrD,MACL,MAAO11B,WAAM/1B,IAGjB,QAAS0rD,MACL,MAAO31B,WAAM/1B,IAGjB,QAAS2rD,MACL,MAAOz5C,oBAAmB,4BAG9B,QAAS05C,MACL,MAAO15C,oBAAmB,4BAG9B,QAAS25C,MACL,MAAO9qB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS8qB,MACL,MAAO/1B,WAAM/1B,IAGjB,QAAS+rD,MACL,MAAOhrB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASgrB,MACL,MAAO95C,oBAAmB,4BAG9B,QAAS+5C,MACL,MAAOlrB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASkrB,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAIJ,QAASE,MACL,MAAOj6C,oBAAmB,4BAG9B,QAASk6C,MACL,MAAOl6C,oBAAmB,4BAG9B,QAASm6C,MACL,MAAOn6C,oBAAmB,4BAG9B,QAASo6C,MACL,MAAOvrB,MAAKC,SAGhB,QAASurB,MACL,MAAOxrB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASwrB,MACL,MAAOz2B,WAAM/1B,IAGjB,QAASysD,MACL,MAAOv6C,oBAAmB,4BAG9B,QAASw6C,MACL,MAAO3rB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS2rB,MACL,MAAOz6C,oBAAmB,4BAG9B,QAAS06C,MACL,MAAO16C,oBAAmB,4BAG9B,QAAS26C,MACL,MAAO9rB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS8rB,MACL,MAAO56C,oBAAmB,4BAG9B,QAAS66C,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOjsB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASisB,MACL,MAAOl3B,WAAM/1B,IAGjB,QAASktD,MACL,MAAOnsB,MAAKC,SAGhB,QAASmsB,MACL,MAAOp3B,WAAM/1B,IAGjB,QAASotD,MACL,MAAOr3B,WAAM/1B,IAGjB,QAASqtD,MACL,MAAOt3B,WAAM/1B,IAGjB,QAASstD,MACL,MAAOv3B,WAAM/1B,IAGjB,QAASutD,MACL,MAAOxsB,MAAKC,SAGhB,QAASwsB,MACL,MAAOzsB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASysB,MACL,MAAO13B,WAAM/1B,IAGjB,QAAS0tD,MACL,MAAO33B,WAAM/1B,IAGjB,QAAS2tD,MACL,MAAO5sB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS4sB,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAIJ,QAASE,MACL,MAAO93B,WAAM/1B,IAGjB,QAAS8tD,MACL,MAAO/3B,WAAM/1B,IAGjB,QAAS+tD,MACL,MAAO77C,oBAAmB,4BAG9B,QAAS87C,MACL,MAAOj4B,WAAM/1B,IAGjB,QAASiuD,MACL,MAAO/7C,oBAAmB,4BAG9B,QAASg8C,MACL,MAAOn4B,WAAM/1B,IAGjB,QAASmuD,MACL,MAAOptB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASotB,MACL,MAAOrtB,MAAKC,SAGhB,QAASqtB,MACL,MAAOt4B,WAAM/1B,IAGjB,QAASsuD,MACL,MAAOvtB,MAAKC,SAGhB,QAASutB,MACL,MAAOr8C,oBAAmB,4BAG9B,QAASs8C,MACL,MAAOt8C,oBAAmB,4BAG9B,QAASu8C,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAIJ,QAASE,MACL,MAAO34B,WAAM/1B,IAGjB,QAAS2uD,MACL,MAAO54B,WAAM/1B,IAGjB,QAAS4uD,MACL,MAAO7tB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS6tB,MACL,MAAO9tB,MAAKC,SAGhB,QAAS8tB,MACL,MAAO/tB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS+tB,MACL,MAAOhuB,MAAKC,SAGhB,QAASguB,MACL,MAAOjuB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASiuB,MACL,MAAOluB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASkuB,MACL,MAAOn5B,WAAM/1B,IAGjB,QAASmvD,MACL,MAAOp5B,WAAM/1B,IAGjB,QAASovD,MACL,MAAOr5B,WAAM/1B,IAGjB,QAASqvD,MACL,MAAOt5B,WAAM/1B,IAGjB,QAASsvD,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAIJ,QAASE,MACL,MAAOxuB,MAAKC,SAGhB,QAASwuB,MACL,MAAOt9C,oBAAmB,4BAG9B,QAASu9C,MACL,MAAO1uB,MAAKC,SAGhB,QAAS0uB,MACL,MAAOx9C,oBAAmB,4BAG9B,QAASy9C,MACL,MAAOz9C,oBAAmB,4BAG9B,QAAS09C,MACL,MAAO7uB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS6uB,MACL,MAAO39C,oBAAmB,4BAG9B,QAAS49C,MACL,MAAO/uB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS+uB,MACL,MAAOhvB,MAAKC,SAGhB,QAASgvB,MACL,MAAO99C,oBAAmB,4BAG9B,QAAS+9C,MACL,MAAOlvB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASkvB,MACL,MAAOnvB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASmvB,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAIJ,QAASE,MACLhJ,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KAIJ,QAASE,MACL,MAAOn+C,oBAAmB,4BAG9B,QAASo+C,MACL,MAAOvvB,MAAKC,SAGhB,QAASuvB,MACL,MAAOxvB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASwvB,MACL,MAAOz6B,WAAM/1B,IAGjB,QAASywD,MACL,MAAOv+C,oBAAmB,4BAG9B,QAASw+C,MACL,MAAO3vB,MAAKC,SAGhB,QAAS2vB,MACL,MAAO5vB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS4vB,MACL,MAAO7vB,MAAKC,SAGhB,QAAS6vB,MACL,MAAO3+C,oBAAmB,4BAG9B,QAAS4+C,MACL,MAAO5+C,oBAAmB,4BAG9B,QAAS6+C,MACL,MAAOh7B,WAAM/1B,IAGjB,QAASgxD,MACL,MAAOj7B,WAAM/1B,IAGjB,QAASixD,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAIJ,QAASE,MACL,MAAOnwB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASmwB,MACL,MAAOj/C,oBAAmB,4BAG9B,QAASk/C,MACL,MAAOl/C,oBAAmB,4BAG9B,QAASm/C,MACL,MAAOt7B,WAAM/1B,IAGjB,QAASsxD,MACL,MAAOvwB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASuwB,MACL,MAAOxwB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASwwB,MACL,MAAOz7B,WAAM/1B,IAGjB,QAASyxD,MACL,MAAO1wB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS0wB,MACL,MAAO37B,WAAM/1B,IAGjB,QAAS2xD,MACL,MAAO5wB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS4wB,MACL,MAAO77B,WAAM/1B,IAGjB,QAAS6xD,MACL,MAAO97B,WAAM/1B,IAGjB,QAAS8xD,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAIJ,QAASE,MACL,MAAOhxB,MAAKC,SAGhB,QAASgxB,MACL,MAAOjxB,MAAKC,SAGhB,QAASixB,MACL,MAAOlxB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASkxB,MACL,MAAOnxB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASmxB,MACL,MAAOjgD,oBAAmB,4BAG9B,QAASkgD,MACL,MAAOrxB,MAAKC,SAGhB,QAASqxB,MACL,MAAOtxB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASsxB,MACL,MAAOvxB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASuxB,MACL,MAAOrgD,oBAAmB,4BAG9B,QAASsgD,MACL,MAAOzxB,MAAKC,SAGhB,QAASyxB,MACL,MAAO1xB,MAAKC,SAGhB,QAAS0xB,MACL,MAAO38B,WAAM/1B,IAGjB,QAAS2yD,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAIJ,QAASE,MACL,MAAO7xB,MAAKC,SAGhB,QAAS6xB,MACL,MAAO9xB,MAAKC,SAGhB,QAAS8xB,MACL,MAAO/xB,MAAKC,SAGhB,QAAS+xB,MACL,MAAOhyB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASgyB,MACL,MAAO9gD,oBAAmB,4BAG9B,QAAS+gD,MACL,MAAOlyB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASkyB,MACL,MAAOn9B,WAAM/1B,IAGjB,QAASmzD,MACL,MAAOp9B,WAAM/1B,IAGjB,QAASozD,MACL,MAAOryB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASqyB,MACL,MAAOtyB,MAAKC,SAGhB,QAASsyB,MACL,MAAOphD,oBAAmB,4BAG9B,QAASqhD,MACL,MAAOx9B,WAAM/1B,IAGjB,QAASwzD,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAO1yB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS0yB,MACL,MAAO3yB,MAAKC,SAGhB,QAAS2yB,MACL,MAAO5yB,MAAKC,SAGhB,QAAS4yB,MACL,MAAO79B,WAAM/1B,IAGjB,QAAS6zD,MACL,MAAO99B,WAAM/1B,IAGjB,QAAS8zD,MACL,MAAO/yB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS+yB,MACL,MAAOhzB,MAAKC,SAGhB,QAASgzB,MACL,MAAOjzB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASizB,MACL,MAAOlzB,MAAKC,SAGhB,QAASkzB,MACL,MAAOhiD,oBAAmB,4BAG9B,QAASiiD,MACL,MAAOp+B,WAAM/1B,IAGjB,QAASo0D,MACL,MAAOr+B,WAAM/1B,IAGjB,QAASq0D,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOvzB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASuzB,MACL,MAAOriD,oBAAmB,4BAG9B,QAASsiD,MACL,MAAOzzB,MAAKC,SAGhB,QAASyzB,MACL,MAAO1zB,MAAKC,SAGhB,QAAS0zB,MACL,MAAO3+B,WAAM/1B,IAGjB,QAAS20D,MACL,MAAOziD,oBAAmB,4BAG9B,QAAS0iD,MACL,MAAO7zB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS6zB,MACL,MAAO9+B,WAAM/1B,IAGjB,QAAS80D,MACL,MAAO/zB,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS+zB,MACL,MAAO7iD,oBAAmB,4BAG9B,QAAS8iD,MACL,MAAOj0B,MAAKC,SAGhB,QAASi0B,MACL,MAAO/iD,oBAAmB,4BAG9B,QAASgjD,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOjjD,oBAAmB,4BAG9B,QAASkjD,MACL,MAAOljD,oBAAmB,4BAG9B,QAASmjD,MACL,MAAOt0B,MAAKC,SAGhB,QAASs0B,MACL,MAAOv0B,MAAKC,SAGhB,QAASu0B,MACL,MAAOx0B,MAAKC,SAGhB,QAASw0B,MACL,MAAOz0B,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASy0B,MACL,MAAO10B,MAAKC,SAGhB,QAAS00B,MACL,MAAO30B,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS20B,MACL,MAAOzjD,oBAAmB,4BAG9B,QAAS0jD,MACL,MAAO70B,MAAKC,SAGhB,QAAS60B,MACL,MAAO9/B,WAAM/1B,IAGjB,QAAS81D,MACL,MAAO/0B,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS+0B,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOj1B,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASi1B,MACL,MAAOl1B,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASk1B,MACL,MAAOngC,WAAM/1B,IAGjB,QAASm2D,MACL,MAAOjkD,oBAAmB,4BAG9B,QAASkkD,MACL,MAAOr1B,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASq1B,MACL,MAAOtgC,WAAM/1B,IAGjB,QAASs2D,MACL,MAAOv1B,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASu1B,MACL,MAAOrkD,oBAAmB,4BAG9B,QAASskD,MACL,MAAOzgC,WAAM/1B,IAGjB,QAASy2D,MACL,MAAO11B,MAAKC,SAGhB,QAAS01B,MACL,MAAO31B,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS21B,MACL,MAAO51B,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS41B,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAO3kD,oBAAmB,4BAG9B,QAAS4kD,MACL,MAAO/1B,MAAKC,SAGhB,QAAS+1B,MACL,MAAOhhC,WAAM/1B,IAGjB,QAASg3D,MACL,MAAO9kD,oBAAmB,4BAG9B,QAAS+kD,MACL,MAAOl2B,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASk2B,MACL,MAAOnhC,WAAM/1B,IAGjB,QAASm3D,MACL,MAAOp2B,MAAKC,SAGhB,QAASo2B,MACL,MAAOrhC,WAAM/1B,IAGjB,QAASq3D,MACL,MAAOt2B,MAAKC,SAGhB,QAASs2B,MACL,MAAOplD,oBAAmB,4BAG9B,QAASqlD,MACL,MAAOrlD,oBAAmB,4BAG9B,QAASslD,MACL,MAAOz2B,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASy2B,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOxlD,oBAAmB,4BAG9B,QAASylD,MACL,MAAOzlD,oBAAmB,4BAG9B,QAAS0lD,MACL,MAAO1lD,oBAAmB,4BAG9B,QAAS2lD,MACL,MAAO3lD,oBAAmB,4BAG9B,QAAS4lD,MACL,MAAO/hC,WAAM/1B,IAGjB,QAAS+3D,MACL,MAAOh3B,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASg3B,MACL,MAAO9lD,oBAAmB,4BAG9B,QAAS+lD,MACL,MAAO/lD,oBAAmB,4BAG9B,QAASgmD,MACL,MAAOn3B,MAAKC,SAGhB,QAASm3B,MACL,MAAOp3B,MAAKC,SAGhB,QAASo3B,MACL,MAAOlmD,oBAAmB,4BAG9B,QAASmmD,MACL,MAAOtiC,WAAM/1B,IAGjB,QAASs4D,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOrmD,oBAAmB,4BAG9B,QAASsmD,MACL,MAAOz3B,MAAKC,SAGhB,QAASy3B,MACL,MAAO1iC,WAAM/1B,IAGjB,QAAS04D,MACL,MAAO3iC,WAAM/1B,IAGjB,QAAS24D,MACL,MAAO5iC,WAAM/1B,IAGjB,QAAS44D,MACL,MAAO7iC,WAAM/1B,IAGjB,QAAS64D,MACL,MAAO9iC,WAAM/1B,IAGjB,QAAS84D,MACL,MAAO/3B,MAAKC,SAGhB,QAAS+3B,MACL,MAAOh4B,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASg4B,MACL,MAAOj4B,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASi4B,MACL,MAAOl4B,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASk4B,MACL,MAAOhnD,oBAAmB,4BAG9B,QAASinD,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOlnD,oBAAmB,4BAG9B,QAASmnD,MACL,MAAOt4B,MAAKC,SAGhB,QAASs4B,MACL,MAAOv4B,MAAKC,SAGhB,QAASu4B,MACL,MAAOx4B,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASw4B,MACL,MAAOtnD,oBAAmB,4BAG9B,QAASunD,MACL,MAAOvnD,oBAAmB,4BAG9B,QAASwnD,MACL,MAAO3jC,WAAM/1B,IAGjB,QAAS25D,MACL,MAAOznD,oBAAmB,4BAG9B,QAAS0nD,MACL,MAAO74B,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS64B,MACL,MAAO9jC,WAAM/1B,IAGjB,QAAS85D,MACL,MAAO5nD,oBAAmB,4BAG9B,QAAS6nD,MACL,MAAOhkC,WAAM/1B,IAGjB,QAASg6D,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACLhJ,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KAIJ,QAASE,MACL,MAAOn5B,MAAKC,SAGhB,QAASm5B,MACL,MAAOjoD,oBAAmB,4BAG9B,QAASkoD,MACL,MAAOr5B,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASq5B,MACL,MAAOtkC,WAAM/1B,IAGjB,QAASs6D,MACL,MAAOv5B,MAAKC,SAGhB,QAASu5B,MACL,MAAOroD,oBAAmB,4BAG9B,QAASsoD,MACL,MAAOz5B,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASy5B,MACL,MAAO15B,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS05B,MACL,MAAO35B,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS25B,MACL,MAAOzoD,oBAAmB,4BAG9B,QAAS0oD,MACL,MAAO1oD,oBAAmB,4BAG9B,QAAS2oD,MACL,MAAO3oD,oBAAmB,4BAG9B,QAAS4oD,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAO7oD,oBAAmB,4BAG9B,QAAS8oD,MACL,MAAOjlC,WAAM/1B,IAGjB,QAASi7D,MACL,MAAOl6B,MAAKC,SAGhB,QAASk6B,MACL,MAAOhpD,oBAAmB,4BAG9B,QAASipD,MACL,MAAOplC,WAAM/1B,IAGjB,QAASo7D,MACL,MAAOr6B,MAAKC,SAGhB,QAASq6B,MACL,MAAOt6B,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASs6B,MACL,MAAOvlC,WAAM/1B,IAGjB,QAASu7D,MACL,MAAOx6B,MAAKC,SAGhB,QAASw6B,MACL,MAAOz6B,MAAKC,SAGhB,QAASy6B,MACL,MAAO16B,MAAKC,SAGhB,QAAS06B,MACL,MAAO36B,MAAKC,SAGhB,QAAS26B,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAO76B,MAAKC,SAGhB,QAAS66B,MACL,MAAO96B,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS86B,MACL,MAAO5pD,oBAAmB,4BAG9B,QAAS6pD,MACL,MAAOhmC,WAAM/1B,IAGjB,QAASg8D,MACL,MAAO9pD,oBAAmB,4BAG9B,QAAS+pD,MACL,MAAO/pD,oBAAmB,4BAG9B,QAASgqD,MACL,MAAOn7B,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASm7B,MACL,MAAOjqD,oBAAmB,4BAG9B,QAASkqD,MACL,MAAOr7B,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASq7B,MACL,MAAOnqD,oBAAmB,4BAG9B,QAASoqD,MACL,MAAOvmC,WAAM/1B,IAGjB,QAASu8D,MACL,MAAOx7B,MAAKC,SAGhB,QAASw7B,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOvqD,oBAAmB,4BAG9B,QAASwqD,MACL,MAAO37B,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS27B,MACL,MAAOzqD,oBAAmB,4BAG9B,QAAS0qD,MACL,MAAO77B,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS67B,MACL,MAAO9mC,WAAM/1B,IAGjB,QAAS88D,MACL,MAAO5qD,oBAAmB,4BAG9B,QAAS6qD,MACL,MAAOh8B,MAAKC,SAGhB,QAASg8B,MACL,MAAOjnC,WAAM/1B,IAGjB,QAASi9D,MACL,MAAOlnC,WAAM/1B,IAGjB,QAASk9D,MACL,MAAOnnC,WAAM/1B,IAGjB,QAASm9D,MACL,MAAOjrD,oBAAmB,4BAG9B,QAASkrD,MACL,MAAOr8B,MAAKC,SAGhB,QAASq8B,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOprD,oBAAmB,4BAG9B,QAASqrD,MACL,MAAOrrD,oBAAmB,4BAG9B,QAASsrD,MACL,MAAOtrD,oBAAmB,4BAG9B,QAASurD,MACL,MAAO18B,MAAKC,SAGhB,QAAS08B,MACL,MAAO38B,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS28B,MACL,MAAO58B,MAAKC,SAGhB,QAAS48B,MACL,MAAO1rD,oBAAmB,4BAG9B,QAAS2rD,MACL,MAAO98B,MAAKC,SAGhB,QAAS88B,MACL,MAAO5rD,oBAAmB,4BAG9B,QAAS6rD,MACL,MAAOh9B,MAAKC,SAGhB,QAASg9B,MACL,MAAOj9B,MAAKC,SAGhB,QAASi9B,MACL,MAAOl9B,MAAKC,SAGhB,QAASk9B,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOp9B,MAAKC,SAGhB,QAASo9B,MACL,MAAOr9B,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASq9B,MACL,MAAOtoC,WAAM/1B,IAGjB,QAASs+D,MACL,MAAOvoC,WAAM/1B,IAGjB,QAASu+D,MACL,MAAOrsD,oBAAmB,4BAG9B,QAASssD,MACL,MAAOz9B,MAAKC,SAGhB,QAASy9B,MACL,MAAO19B,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS09B,MACL,MAAO39B,MAAKC,SAGhB,QAAS29B,MACL,MAAOzsD,oBAAmB,4BAG9B,QAAS0sD,MACL,MAAO7oC,WAAM/1B,IAGjB,QAAS6+D,MACL,MAAO99B,MAAKC,SAGhB,QAAS89B,MACL,MAAO/9B,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS+9B,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOj+B,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASi+B,MACL,MAAOlpC,WAAM/1B,IAGjB,QAASk/D,MACL,MAAOn+B,MAAKC,SAGhB,QAASm+B,MACL,MAAOjtD,oBAAmB,4BAG9B,QAASktD,MACL,MAAOltD,oBAAmB,4BAG9B,QAASmtD,MACL,MAAOntD,oBAAmB,4BAG9B,QAASotD,MACL,MAAOvpC,WAAM/1B,IAGjB,QAASu/D,MACL,MAAOx+B,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASw+B,MACL,MAAOttD,oBAAmB,4BAG9B,QAASutD,MACL,MAAO1pC,WAAM/1B,IAGjB,QAAS0/D,MACL,MAAO3+B,MAAKC,SAGhB,QAAS2+B,MACL,MAAO5+B,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS4+B,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAO9pC,WAAM/1B,IAGjB,QAAS8/D,MACL,MAAO5tD,oBAAmB,4BAG9B,QAAS6tD,MACL,MAAOh/B,MAAKC,SAGhB,QAASg/B,MACL,MAAOjqC,WAAM/1B,IAGjB,QAASigE,MACL,MAAOlqC,WAAM/1B,IAGjB,QAASkgE,MACL,MAAOhuD,oBAAmB,4BAG9B,QAASiuD,MACL,MAAOjuD,oBAAmB,4BAG9B,QAASkuD,MACL,MAAOrqC,WAAM/1B,IAGjB,QAASqgE,MACL,MAAOt/B,MAAKC,SAGhB,QAASs/B,MACL,MAAOpuD,oBAAmB,4BAG9B,QAASquD,MACL,MAAOxqC,WAAM/1B,IAGjB,QAASwgE,MACL,MAAOtuD,oBAAmB,4BAG9B,QAASuuD,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAO3/B,MAAKC,SAGhB,QAAS2/B,MACL,MAAOzuD,oBAAmB,4BAG9B,QAAS0uD,MACL,MAAO7qC,WAAM/1B,IAGjB,QAAS6gE,MACL,MAAO9/B,MAAKC,SAGhB,QAAS8/B,MACL,MAAO//B,MAAKC,SAGhB,QAAS+/B,MACL,MAAOhgC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASggC,MACL,MAAOjgC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASigC,MACL,MAAO/uD,oBAAmB,4BAG9B,QAASgvD,MACL,MAAOhvD,oBAAmB,4BAG9B,QAASivD,MACL,MAAOpgC,MAAKC,SAGhB,QAASogC,MACL,MAAOrgC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASqgC,MACL,MAAOtgC,MAAKC,SAGhB,QAASsgC,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOxrC,WAAM/1B,IAGjB,QAASwhE,MACL,MAAOtvD,oBAAmB,4BAG9B,QAASuvD,MACL,MAAOvvD,oBAAmB,4BAG9B,QAASwvD,MACL,MAAO3gC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS2gC,MACL,MAAO5rC,WAAM/1B,IAGjB,QAAS4hE,MACL,MAAO1vD,oBAAmB,4BAG9B,QAAS2vD,MACL,MAAO9gC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS8gC,MACL,MAAO/gC,MAAKC,SAGhB,QAAS+gC,MACL,MAAOhhC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASghC,MACL,MAAOjhC,MAAKC,SAGhB,QAASihC,MACL,MAAO/vD,oBAAmB,4BAG9B,QAASgwD,MACL,MAAOhwD,oBAAmB,4BAG9B,QAASiwD,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOrhC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASqhC,MACL,MAAOthC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASshC,MACL,MAAOpwD,oBAAmB,4BAG9B,QAASqwD,MACL,MAAOrwD,oBAAmB,4BAG9B,QAASswD,MACL,MAAOzsC,WAAM/1B,IAGjB,QAASyiE,MACL,MAAO1hC,MAAKC,SAGhB,QAAS0hC,MACL,MAAO3sC,WAAM/1B,IAGjB,QAAS2iE,MACL,MAAO5sC,WAAM/1B,IAGjB,QAAS4iE,MACL,MAAO1wD,oBAAmB,4BAG9B,QAAS2wD,MACL,MAAO3wD,oBAAmB,4BAG9B,QAAS4wD,MACL,MAAO/sC,WAAM/1B,IAGjB,QAAS+iE,MACL,MAAOhiC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASgiC,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOltC,WAAM/1B,IAGjB,QAASkjE,MACL,MAAOniC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASmiC,MACL,MAAOpiC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASoiC,MACL,MAAOrtC,WAAM/1B,IAGjB,QAASqjE,MACL,MAAOttC,WAAM/1B,IAGjB,QAASsjE,MACL,MAAOviC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASuiC,MACL,MAAOxiC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASwiC,MACL,MAAOziC,MAAKC,SAGhB,QAASyiC,MACL,MAAO1iC,MAAKC,SAGhB,QAAS0iC,MACL,MAAOxxD,oBAAmB,4BAG9B,QAASyxD,MACL,MAAO5iC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS4iC,MACL,MAAO7iC,MAAKC,SAGhB,QAAS6iC,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACLhJ,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KAIJ,QAASE,MACL,MAAOhjC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASgjC,MACL,MAAOjjC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASijC,MACL,MAAO/xD,oBAAmB,4BAG9B,QAASgyD,MACL,MAAOhyD,oBAAmB,4BAG9B,QAASiyD,MACL,MAAOpjC,MAAKC,SAGhB,QAASojC,MACL,MAAOlyD,oBAAmB,4BAG9B,QAASmyD,MACL,MAAOtuC,WAAM/1B,IAGjB,QAASskE,MACL,MAAOvuC,WAAM/1B,IAGjB,QAASukE,MACL,MAAOryD,oBAAmB,4BAG9B,QAASsyD,MACL,MAAOzjC,MAAKC,SAGhB,QAASyjC,MACL,MAAO1jC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS0jC,MACL,MAAO3jC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS2jC,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAO7jC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS6jC,MACL,MAAO9jC,MAAKC,SAGhB,QAAS8jC,MACL,MAAO5yD,oBAAmB,4BAG9B,QAAS6yD,MACL,MAAOhkC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASgkC,MACL,MAAOjvC,WAAM/1B,IAGjB,QAASilE,MACL,MAAO/yD,oBAAmB,4BAG9B,QAASgzD,MACL,MAAOhzD,oBAAmB,4BAG9B,QAASizD,MACL,MAAOpkC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASokC,MACL,MAAOrvC,WAAM/1B,IAGjB,QAASqlE,MACL,MAAOtkC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASskC,MACL,MAAOvvC,WAAM/1B,IAGjB,QAASulE,MACL,MAAOxkC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASwkC,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAO1kC,MAAKC,SAGhB,QAAS0kC,MACL,MAAO3kC,MAAKC,SAGhB,QAAS2kC,MACL,MAAO5vC,WAAM/1B,IAGjB,QAAS4lE,MACL,MAAO7vC,WAAM/1B,IAGjB,QAAS6lE,MACL,MAAO9vC,WAAM/1B,IAGjB,QAAS8lE,MACL,MAAO/kC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS+kC,MACL,MAAOhlC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASglC,MACL,MAAOjlC,MAAKC,SAGhB,QAASilC,MACL,MAAOllC,MAAKC,SAGhB,QAASklC,MACL,MAAOnwC,WAAM/1B,IAGjB,QAASmmE,MACL,MAAOj0D,oBAAmB,4BAG9B,QAASk0D,MACL,MAAOl0D,oBAAmB,4BAG9B,QAASm0D,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOvwC,WAAM/1B,IAGjB,QAASumE,MACL,MAAOxlC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASwlC,MACL,MAAOt0D,oBAAmB,4BAG9B,QAASu0D,MACL,MAAO1wC,WAAM/1B,IAGjB,QAAS0mE,MACL,MAAO3lC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS2lC,MACL,MAAO5wC,WAAM/1B,IAGjB,QAAS4mE,MACL,MAAO7lC,MAAKC,SAGhB,QAAS6lC,MACL,MAAO30D,oBAAmB,4BAG9B,QAAS40D,MACL,MAAO/lC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS+lC,MACL,MAAO70D,oBAAmB,4BAG9B,QAAS80D,MACL,MAAO90D,oBAAmB,4BAG9B,QAAS+0D,MACL,MAAOlmC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASkmC,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOj1D,oBAAmB,4BAG9B,QAASk1D,MACL,MAAOl1D,oBAAmB,4BAG9B,QAASm1D,MACL,MAAOtxC,WAAM/1B,IAGjB,QAASsnE,MACL,MAAOvmC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASumC,MACL,MAAOr1D,oBAAmB,4BAG9B,QAASs1D,MACL,MAAOzxC,WAAM/1B,IAGjB,QAASynE,MACL,MAAOv1D,oBAAmB,4BAG9B,QAASw1D,MACL,MAAO3mC,MAAKC,SAGhB,QAAS2mC,MACL,MAAO5xC,WAAM/1B,IAGjB,QAAS4nE,MACL,MAAO7mC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS6mC,MACL,MAAO9xC,WAAM/1B,IAGjB,QAAS8nE,MACL,MAAO51D,oBAAmB,4BAG9B,QAAS61D,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAO91D,oBAAmB,4BAG9B,QAAS+1D,MACL,MAAOlnC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASknC,MACL,MAAOnnC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASmnC,MACL,MAAOpyC,WAAM/1B,IAGjB,QAASooE,MACL,MAAOrnC,MAAKC,SAGhB,QAASqnC,MACL,MAAOtnC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASsnC,MACL,MAAOvyC,WAAM/1B,IAGjB,QAASuoE,MACL,MAAOr2D,oBAAmB,4BAG9B,QAASs2D,MACL,MAAOznC,MAAKC,SAGhB,QAASynC,MACL,MAAOv2D,oBAAmB,4BAG9B,QAASw2D,MACL,MAAO3nC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS2nC,MACL,MAAO5nC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS4nC,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAO9nC,MAAKC,SAGhB,QAAS8nC,MACL,MAAO/nC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS+nC,MACL,MAAOhoC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASgoC,MACL,MAAO92D,oBAAmB,4BAG9B,QAAS+2D,MACL,MAAOloC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASkoC,MACL,MAAOh3D,oBAAmB,4BAG9B,QAASi3D,MACL,MAAOpoC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASooC,MACL,MAAOroC,MAAKC,SAGhB,QAASqoC,MACL,MAAOtzC,WAAM/1B,IAGjB,QAASspE,MACL,MAAOp3D,oBAAmB,4BAG9B,QAASq3D,MACL,MAAOxoC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASwoC,MACL,MAAOzoC,MAAKC,SAGhB,QAASyoC,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAO3oC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS2oC,MACL,MAAO5oC,MAAKC,SAGhB,QAAS4oC,MACL,MAAO7oC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS6oC,MACL,MAAO9zC,WAAM/1B,IAGjB,QAAS8pE,MACL,MAAO53D,oBAAmB,4BAG9B,QAAS63D,MACL,MAAOhpC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASgpC,MACL,MAAOjpC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASipC,MACL,MAAOl0C,WAAM/1B,IAGjB,QAASkqE,MACL,MAAOnpC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASmpC,MACL,MAAOppC,MAAKC,SAGhB,QAASopC,MACL,MAAOl4D,oBAAmB,4BAG9B,QAASm4D,MACL,MAAOt0C,WAAM/1B,IAGjB,QAASsqE,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOr4D,oBAAmB,4BAG9B,QAASs4D,MACL,MAAOzpC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASypC,MACL,MAAO1pC,MAAKC,SAGhB,QAAS0pC,MACL,MAAO3pC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS2pC,MACL,MAAO5pC,MAAKC,SAGhB,QAAS4pC,MACL,MAAO70C,WAAM/1B,IAGjB,QAAS6qE,MACL,MAAO34D,oBAAmB,4BAG9B,QAAS44D,MACL,MAAO/pC,MAAKC,SAGhB,QAAS+pC,MACL,MAAOhqC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASgqC,MACL,MAAOj1C,WAAM/1B,IAGjB,QAASirE,MACL,MAAOlqC,MAAKC,SAGhB,QAASkqC,MACL,MAAOn1C,WAAM/1B,IAGjB,QAASmrE,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOrqC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASqqC,MACL,MAAOtqC,MAAKC,SAGhB,QAASsqC,MACL,MAAOvqC,MAAKC,SAGhB,QAASuqC,MACL,MAAOxqC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASwqC,MACL,MAAOt5D,oBAAmB,4BAG9B,QAASu5D,MACL,MAAO11C,WAAM/1B,IAGjB,QAAS0rE,MACL,MAAO31C,WAAM/1B,IAGjB,QAAS2rE,MACL,MAAOz5D,oBAAmB,4BAG9B,QAAS05D,MACL,MAAO7qC,MAAKC,SAGhB,QAAS6qC,MACL,MAAO9qC,MAAKC,SAGhB,QAAS8qC,MACL,MAAO/qC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS+qC,MACL,MAAOhrC,MAAKC,SAGhB,QAASgrC,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOl2C,WAAM/1B,IAGjB,QAASksE,MACL,MAAOn2C,WAAM/1B,IAGjB,QAASmsE,MACL,MAAOprC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASorC,MACL,MAAOrrC,MAAKC,SAGhB,QAASqrC,MACL,MAAOtrC,MAAKC,SAGhB,QAASsrC,MACL,MAAOvrC,MAAKC,SAGhB,QAASurC,MACL,MAAOx2C,WAAM/1B,IAGjB,QAASwsE,MACL,MAAOz2C,WAAM/1B,IAGjB,QAASysE,MACL,MAAO1rC,MAAKC,SAGhB,QAAS0rC,MACL,MAAO3rC,MAAKC,SAGhB,QAAS2rC,MACL,MAAOz6D,oBAAmB,4BAG9B,QAAS06D,MACL,MAAO16D,oBAAmB,4BAG9B,QAAS26D,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAO/2C,WAAM/1B,IAGjB,QAAS+sE,MACL,MAAOhsC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASgsC,MACL,MAAOjsC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASisC,MACL,MAAOl3C,WAAM/1B,IAGjB,QAASktE,MACL,MAAOh7D,oBAAmB,4BAG9B,QAASi7D,MACL,MAAOj7D,oBAAmB,4BAG9B,QAASk7D,MACL,MAAOr3C,WAAM/1B,IAGjB,QAASqtE,MACL,MAAOt3C,WAAM/1B,IAGjB,QAASstE,MACL,MAAOp7D,oBAAmB,4BAG9B,QAASq7D,MACL,MAAOxsC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASwsC,MACL,MAAOz3C,WAAM/1B,IAGjB,QAASytE,MACL,MAAO13C,WAAM/1B,IAGjB,QAAS0tE,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACLhJ,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KAIJ,QAASE,MACL,MAAO7sC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS6sC,MACL,MAAO9sC,MAAKC,SAGhB,QAAS8sC,MACL,MAAO/3C,WAAM/1B,IAGjB,QAAS+tE,MACL,MAAOhtC,MAAKC,SAGhB,QAASgtC,MACL,MAAOjtC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASitC,MACL,MAAOl4C,WAAM/1B,IAGjB,QAASkuE,MACL,MAAOh8D,oBAAmB,4BAG9B,QAASi8D,MACL,MAAOj8D,oBAAmB,4BAG9B,QAASk8D,MACL,MAAOrtC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASqtC,MACL,MAAOn8D,oBAAmB,4BAG9B,QAASo8D,MACL,MAAOvtC,MAAKC,SAGhB,QAASutC,MACL,MAAOx4C,WAAM/1B,IAGjB,QAASwuE,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAO1tC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS0tC,MACL,MAAO34C,WAAM/1B,IAGjB,QAAS2uE,MACL,MAAO5tC,MAAKC,SAGhB,QAAS4tC,MACL,MAAO74C,WAAM/1B,IAGjB,QAAS6uE,MACL,MAAO9tC,MAAKC,SAGhB,QAAS8tC,MACL,MAAO/tC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS+tC,MACL,MAAOh5C,WAAM/1B,IAGjB,QAASgvE,MACL,MAAOj5C,WAAM/1B,IAGjB,QAASivE,MACL,MAAOluC,MAAKC,SAGhB,QAASkuC,MACL,MAAOh9D,oBAAmB,4BAG9B,QAASi9D,MACL,MAAOpuC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASouC,MACL,MAAOruC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASquC,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOv5C,WAAM/1B,IAGjB,QAASuvE,MACL,MAAOx5C,WAAM/1B,IAGjB,QAASwvE,MACL,MAAOzuC,MAAKC,SAGhB,QAASyuC,MACL,MAAOv9D,oBAAmB,4BAG9B,QAASw9D,MACL,MAAOx9D,oBAAmB,4BAG9B,QAASy9D,MACL,MAAO5uC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS4uC,MACL,MAAO19D,oBAAmB,4BAG9B,QAAS29D,MACL,MAAO9uC,MAAKC,SAGhB,QAAS8uC,MACL,MAAO/uC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS+uC,MACL,MAAOh6C,WAAM/1B,IAGjB,QAASgwE,MACL,MAAO99D,oBAAmB,4BAG9B,QAAS+9D,MACL,MAAOl6C,WAAM/1B,IAGjB,QAASkwE,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOj+D,oBAAmB,4BAG9B,QAASk+D,MACL,MAAOr6C,WAAM/1B,IAGjB,QAASqwE,MACL,MAAOtvC,MAAKC,SAGhB,QAASsvC,MACL,MAAOv6C,WAAM/1B,IAGjB,QAASuwE,MACL,MAAOxvC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASwvC,MACL,MAAOzvC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASyvC,MACL,MAAO16C,WAAM/1B,IAGjB,QAAS0wE,MACL,MAAO3vC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS2vC,MACL,MAAOz+D,oBAAmB,4BAG9B,QAAS0+D,MACL,MAAO1+D,oBAAmB,4BAG9B,QAAS2+D,MACL,MAAO9vC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS8vC,MACL,MAAO5+D,oBAAmB,4BAG9B,QAAS6+D,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAO9+D,oBAAmB,4BAG9B,QAAS++D,MACL,MAAO/+D,oBAAmB,4BAG9B,QAASg/D,MACL,MAAOnwC,MAAKC,SAGhB,QAASmwC,MACL,MAAOpwC,MAAKC,SAGhB,QAASowC,MACL,MAAOrwC,MAAKC,SAGhB,QAASqwC,MACL,MAAOtwC,MAAKC,SAGhB,QAASswC,MACL,MAAOvwC,MAAKC,SAGhB,QAASuwC,MACL,MAAOxwC,MAAKC,SAGhB,QAASwwC,MACL,MAAOt/D,oBAAmB,4BAG9B,QAASu/D,MACL,MAAO1wC,MAAKC,SAGhB,QAAS0wC,MACL,MAAO37C,WAAM/1B,IAGjB,QAAS2xE,MACL,MAAO5wC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS4wC,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAO97C,WAAM/1B,IAGjB,QAAS8xE,MACL,MAAO5/D,oBAAmB,4BAG9B,QAAS6/D,MACL,MAAO7/D,oBAAmB,4BAG9B,QAAS8/D,MACL,MAAO9/D,oBAAmB,4BAG9B,QAAS+/D,MACL,MAAO//D,oBAAmB,4BAG9B,QAASggE,MACL,MAAOn8C,WAAM/1B,IAGjB,QAASmyE,MACL,MAAOpxC,MAAKC,SAGhB,QAASoxC,MACL,MAAOrxC,MAAKC,SAGhB,QAASqxC,MACL,MAAOngE,oBAAmB,4BAG9B,QAASogE,MACL,MAAOvxC,MAAKC,SAGhB,QAASuxC,MACL,MAAOrgE,oBAAmB,4BAG9B,QAASsgE,MACL,MAAOzxC,MAAKC,SAGhB,QAASyxC,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOxgE,oBAAmB,4BAG9B,QAASygE,MACL,MAAOzgE,oBAAmB,4BAG9B,QAAS0gE,MACL,MAAO7xC,MAAKC,SAGhB,QAAS6xC,MACL,MAAO98C,WAAM/1B,IAGjB,QAAS8yE,MACL,MAAO/xC,MAAKC,SAGhB,QAAS+xC,MACL,MAAOhyC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASgyC,MACL,MAAOjyC,MAAKC,SAGhB,QAASiyC,MACL,MAAO/gE,oBAAmB,4BAG9B,QAASghE,MACL,MAAOn9C,WAAM/1B,IAGjB,QAASmzE,MACL,MAAOp9C,WAAM/1B,IAGjB,QAASozE,MACL,MAAOryC,MAAKC,SAGhB,QAASqyC,MACL,MAAOtyC,MAAKC,SAGhB,QAASsyC,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOxyC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASwyC,MACL,MAAOzyC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASyyC,MACL,MAAO1yC,MAAKC,SAGhB,QAAS0yC,MACL,MAAOxhE,oBAAmB,4BAG9B,QAASyhE,MACL,MAAOzhE,oBAAmB,4BAG9B,QAAS0hE,MACL,MAAO7yC,MAAKC,SAGhB,QAAS6yC,MACL,MAAO99C,WAAM/1B,IAGjB,QAAS8zE,MACL,MAAO5hE,oBAAmB,4BAG9B,QAAS6hE,MACL,MAAOhzC,MAAKC,SAGhB,QAASgzC,MACL,MAAOjzC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASizC,MACL,MAAOlzC,MAAKC,SAGhB,QAASkzC,MACL,MAAOhiE,oBAAmB,4BAG9B,QAASiiE,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOliE,oBAAmB,4BAG9B,QAASmiE,MACL,MAAOtzC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASszC,MACL,MAAOpiE,oBAAmB,4BAG9B,QAASqiE,MACL,MAAOxzC,MAAKC,SAGhB,QAASwzC,MACL,MAAOzzC,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASyzC,MACL,MAAOviE,oBAAmB,4BAG9B,QAASwiE,MACL,MAAO3zC,MAAKC,SAGhB,QAAS2zC,MACL,MAAO5zC,MAAKC,SAGhB,QAAS4zC,MACL,MAAO7+C,WAAM/1B,IAGjB,QAAS60E,MACL,MAAO9zC,MAAKC,SAGhB,QAAS8zC,MACL,MAAO5iE,oBAAmB,4BAG9B,QAAS6iE,MACL,MAAOh/C,WAAM/1B,IAGjB,QAASg1E,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAO/iE,oBAAmB,4BAG9B,QAASgjE,MACL,MAAOhjE,oBAAmB,4BAG9B,QAASijE,MACL,MAAOp0C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASo0C,MACL,MAAOr0C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASq0C,MACL,MAAOt0C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASs0C,MACL,MAAOv0C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASu0C,MACL,MAAOx0C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASw0C,MACL,MAAOz0C,MAAKC,SAGhB,QAASy0C,MACL,MAAO10C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS00C,MACL,MAAO30C,MAAKC,SAGhB,QAAS20C,MACL,MAAO50C,MAAKC,SAGhB,QAAS40C,MACL,MAAO7/C,WAAM/1B,IAGjB,QAAS61E,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAO//C,WAAM/1B,IAGjB,QAAS+1E,MACL,MAAO7jE,oBAAmB,4BAG9B,QAAS8jE,MACL,MAAOjgD,WAAM/1B,IAGjB,QAASi2E,MACL,MAAOl1C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASk1C,MACL,MAAOn1C,MAAKC,SAGhB,QAASm1C,MACL,MAAOp1C,MAAKC,SAGhB,QAASo1C,MACL,MAAOr1C,MAAKC,SAGhB,QAASq1C,MACL,MAAOt1C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASs1C,MACL,MAAOpkE,oBAAmB,4BAG9B,QAASqkE,MACL,MAAOrkE,oBAAmB,4BAG9B,QAASskE,MACL,MAAOz1C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASy1C,MACL,MAAO11C,MAAKC,SAGhB,QAAS01C,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOzkE,oBAAmB,4BAG9B,QAAS0kE,MACL,MAAO71C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS61C,MACL,MAAO91C,MAAKC,SAGhB,QAAS81C,MACL,MAAO/1C,MAAKC,SAGhB,QAAS+1C,MACL,MAAO7kE,oBAAmB,4BAG9B,QAAS8kE,MACL,MAAOj2C,MAAKC,SAGhB,QAASi2C,MACL,MAAOl2C,MAAKC,SAGhB,QAASk2C,MACL,MAAOnhD,WAAM/1B,IAGjB,QAASm3E,MACL,MAAOphD,WAAM/1B,IAGjB,QAASo3E,MACL,MAAOr2C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASq2C,MACL,MAAOt2C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASs2C,MACL,MAAOvhD,WAAM/1B,IAGjB,QAASu3E,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACLhJ,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KAIJ,QAASE,MACL,MAAOvlE,oBAAmB,4BAG9B,QAASwlE,MACL,MAAOxlE,oBAAmB,4BAG9B,QAASylE,MACL,MAAO52C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS42C,MACL,MAAO72C,MAAKC,SAGhB,QAAS62C,MACL,MAAO3lE,oBAAmB,4BAG9B,QAAS4lE,MACL,MAAO/hD,WAAM/1B,IAGjB,QAAS+3E,MACL,MAAO7lE,oBAAmB,4BAG9B,QAAS8lE,MACL,MAAOj3C,MAAKC,SAGhB,QAASi3C,MACL,MAAOliD,WAAM/1B,IAGjB,QAASk4E,MACL,MAAOniD,WAAM/1B,IAGjB,QAASm4E,MACL,MAAOp3C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASo3C,MACL,MAAOriD,WAAM/1B,IAGjB,QAASq4E,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOviD,WAAM/1B,IAGjB,QAASu4E,MACL,MAAOx3C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASw3C,MACL,MAAOtmE,oBAAmB,4BAG9B,QAASumE,MACL,MAAO13C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS03C,MACL,MAAO33C,MAAKC,SAGhB,QAAS23C,MACL,MAAO5iD,WAAM/1B,IAGjB,QAAS44E,MACL,MAAO7iD,WAAM/1B,IAGjB,QAAS64E,MACL,MAAO9iD,WAAM/1B,IAGjB,QAAS84E,MACL,MAAO/3C,MAAKC,SAGhB,QAAS+3C,MACL,MAAOh4C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASg4C,MACL,MAAOj4C,MAAKC,SAGhB,QAASi4C,MACL,MAAO/mE,oBAAmB,4BAG9B,QAASgnE,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOpjD,WAAM/1B,IAGjB,QAASo5E,MACL,MAAOr4C,MAAKC,SAGhB,QAASq4C,MACL,MAAOtjD,WAAM/1B,IAGjB,QAASs5E,MACL,MAAOv4C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASu4C,MACL,MAAOrnE,oBAAmB,4BAG9B,QAASsnE,MACL,MAAOtnE,oBAAmB,4BAG9B,QAASunE,MACL,MAAO14C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS04C,MACL,MAAO34C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS24C,MACL,MAAOznE,oBAAmB,4BAG9B,QAAS0nE,MACL,MAAO74C,MAAKC,SAGhB,QAAS64C,MACL,MAAO94C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS84C,MACL,MAAO/jD,WAAM/1B,IAGjB,QAAS+5E,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOj5C,MAAKC,SAGhB,QAASi5C,MACL,MAAO/nE,oBAAmB,4BAG9B,QAASgoE,MACL,MAAOhoE,oBAAmB,4BAG9B,QAASioE,MACL,MAAOpkD,WAAM/1B,IAGjB,QAASo6E,MACL,MAAOloE,oBAAmB,4BAG9B,QAASmoE,MACL,MAAOnoE,oBAAmB,4BAG9B,QAASooE,MACL,MAAOv5C,MAAKC,SAGhB,QAASu5C,MACL,MAAOxkD,WAAM/1B,IAGjB,QAASw6E,MACL,MAAOz5C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASy5C,MACL,MAAO15C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS05C,MACL,MAAO35C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS25C,MACL,MAAO55C,MAAKC,SAGhB,QAAS45C,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAO95C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS85C,MACL,MAAO/5C,MAAKC,SAGhB,QAAS+5C,MACL,MAAOhlD,WAAM/1B,IAGjB,QAASg7E,MACL,MAAO9oE,oBAAmB,4BAG9B,QAAS+oE,MACL,MAAOl6C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASk6C,MACL,MAAOn6C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASm6C,MACL,MAAOp6C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASo6C,MACL,MAAOr6C,MAAKC,SAGhB,QAASq6C,MACL,MAAOnpE,oBAAmB,4BAG9B,QAASopE,MACL,MAAOvlD,WAAM/1B,IAGjB,QAASu7E,MACL,MAAOxlD,WAAM/1B,IAGjB,QAASw7E,MACL,MAAOz6C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASy6C,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOxpE,oBAAmB,4BAG9B,QAASypE,MACL,MAAOzpE,oBAAmB,4BAG9B,QAAS0pE,MACL,MAAO7lD,WAAM/1B,IAGjB,QAAS67E,MACL,MAAO9lD,WAAM/1B,IAGjB,QAAS87E,MACL,MAAO/6C,MAAKC,SAGhB,QAAS+6C,MACL,MAAOh7C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASg7C,MACL,MAAOj7C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASi7C,MACL,MAAO/pE,oBAAmB,4BAG9B,QAASgqE,MACL,MAAOhqE,oBAAmB,4BAG9B,QAASiqE,MACL,MAAOjqE,oBAAmB,4BAG9B,QAASkqE,MACL,MAAOrmD,WAAM/1B,IAGjB,QAASq8E,MACL,MAAOt7C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASs7C,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOx7C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASw7C,MACL,MAAOz7C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASy7C,MACL,MAAO17C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS07C,MACL,MAAO37C,MAAKC,SAGhB,QAAS27C,MACL,MAAO5mD,WAAM/1B,IAGjB,QAAS48E,MACL,MAAO7mD,WAAM/1B,IAGjB,QAAS68E,MACL,MAAO3qE,oBAAmB,4BAG9B,QAAS4qE,MACL,MAAO/mD,WAAM/1B,IAGjB,QAAS+8E,MACL,MAAOh8C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASg8C,MACL,MAAOjnD,WAAM/1B,IAGjB,QAASi9E,MACL,MAAOl8C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASk8C,MACL,MAAOnnD,WAAM/1B,IAGjB,QAASm9E,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOrnD,WAAM/1B,IAGjB,QAASq9E,MACL,MAAOnrE,oBAAmB,4BAG9B,QAASorE,MACL,MAAOv8C,MAAKC,SAGhB,QAASu8C,MACL,MAAOx8C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASw8C,MACL,MAAOz8C,MAAKC,SAGhB,QAASy8C,MACL,MAAO1nD,WAAM/1B,IAGjB,QAAS09E,MACL,MAAO3nD,WAAM/1B,IAGjB,QAAS29E,MACL,MAAOzrE,oBAAmB,4BAG9B,QAAS0rE,MACL,MAAO78C,MAAKC,SAGhB,QAAS68C,MACL,MAAO98C,MAAKC,SAGhB,QAAS88C,MACL,MAAO/8C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS+8C,MACL,MAAOh9C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASg9C,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOloD,WAAM/1B,IAGjB,QAASk+E,MACL,MAAOhsE,oBAAmB,4BAG9B,QAASisE,MACL,MAAOp9C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASo9C,MACL,MAAOroD,WAAM/1B,IAGjB,QAASq+E,MACL,MAAOtoD,WAAM/1B,IAGjB,QAASs+E,MACL,MAAOv9C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASu9C,MACL,MAAOxoD,WAAM/1B,IAGjB,QAASw+E,MACL,MAAOz9C,MAAKC,SAGhB,QAASy9C,MACL,MAAO19C,MAAKC,SAGhB,QAAS09C,MACL,MAAOxsE,oBAAmB,4BAG9B,QAASysE,MACL,MAAO59C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS49C,MACL,MAAO79C,MAAKC,SAGhB,QAAS69C,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAO/oD,WAAM/1B,IAGjB,QAAS++E,MACL,MAAOh+C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASg+C,MACL,MAAOjpD,WAAM/1B,IAGjB,QAASi/E,MACL,MAAOl+C,MAAKC,SAGhB,QAASk+C,MACL,MAAOhtE,oBAAmB,4BAG9B,QAASitE,MACL,MAAOjtE,oBAAmB,4BAG9B,QAASktE,MACL,MAAOltE,oBAAmB,4BAG9B,QAASmtE,MACL,MAAOntE,oBAAmB,4BAG9B,QAASotE,MACL,MAAOv+C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASu+C,MACL,MAAOrtE,oBAAmB,4BAG9B,QAASstE,MACL,MAAOzpD,WAAM/1B,IAGjB,QAASy/E,MACL,MAAOvtE,oBAAmB,4BAG9B,QAASwtE,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAO5pD,WAAM/1B,IAGjB,QAAS4/E,MACL,MAAO1tE,oBAAmB,4BAG9B,QAAS2tE,MACL,MAAO3tE,oBAAmB,4BAG9B,QAAS4tE,MACL,MAAO/pD,WAAM/1B,IAGjB,QAAS+/E,MACL,MAAO7tE,oBAAmB,4BAG9B,QAAS8tE,MACL,MAAOj/C,MAAKC,SAGhB,QAASi/C,MACL,MAAOl/C,MAAKC,SAGhB,QAASk/C,MACL,MAAOn/C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASm/C,MACL,MAAOpqD,WAAM/1B,IAGjB,QAASogF,MACL,MAAOr/C,MAAKC,SAGhB,QAASq/C,MACL,MAAOtqD,WAAM/1B,IAGjB,QAASsgF,MACL,MAAOv/C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASu/C,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOzqD,WAAM/1B,IAGjB,QAASygF,MACL,MAAO1/C,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS0/C,MACL,MAAO3/C,MAAKC,SAGhB,QAAS2/C,MACL,MAAOzuE,oBAAmB,4BAG9B,QAAS0uE,MACL,MAAO7/C,MAAKC,SAGhB,QAAS6/C,MACL,MAAO9qD,WAAM/1B,IAGjB,QAAS8gF,MACL,MAAO5uE,oBAAmB,4BAG9B,QAAS6uE,MACL,MAAOhgD,MAAKC,SAGhB,QAASggD,MACL,MAAOjgD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASigD,MACL,MAAOlgD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASkgD,MACL,MAAOngD,MAAKC,SAGhB,QAASmgD,MACL,MAAOpgD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASogD,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACLhJ,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KAIJ,QAASE,MACL,MAAOvgD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASugD,MACL,MAAOxgD,MAAKC,SAGhB,QAASwgD,MACL,MAAOzgD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASygD,MACL,MAAO1rD,WAAM/1B,IAGjB,QAAS0hF,MACL,MAAO3gD,MAAKC,SAGhB,QAAS2gD,MACL,MAAOzvE,oBAAmB,4BAG9B,QAAS0vE,MACL,MAAO7rD,WAAM/1B,IAGjB,QAAS6hF,MACL,MAAO9gD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS8gD,MACL,MAAO/gD,MAAKC,SAGhB,QAAS+gD,MACL,MAAO7vE,oBAAmB,4BAG9B,QAAS8vE,MACL,MAAOjsD,WAAM/1B,IAGjB,QAASiiF,MACL,MAAOlsD,WAAM/1B,IAGjB,QAASkiF,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOphD,MAAKC,SAGhB,QAASohD,MACL,MAAOrhD,MAAKC,SAGhB,QAASqhD,MACL,MAAOthD,MAAKC,SAGhB,QAASshD,MACL,MAAOpwE,oBAAmB,4BAG9B,QAASqwE,MACL,MAAOxhD,MAAKC,SAGhB,QAASwhD,MACL,MAAOzsD,WAAM/1B,IAGjB,QAASyiF,MACL,MAAOvwE,oBAAmB,4BAG9B,QAASwwE,MACL,MAAOxwE,oBAAmB,4BAG9B,QAASywE,MACL,MAAOzwE,oBAAmB,4BAG9B,QAAS0wE,MACL,MAAO7hD,MAAKC,SAGhB,QAAS6hD,MACL,MAAO9hD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS8hD,MACL,MAAO5wE,oBAAmB,4BAG9B,QAAS6wE,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOjtD,WAAM/1B,IAGjB,QAASijF,MACL,MAAOliD,MAAKC,SAGhB,QAASkiD,MACL,MAAOntD,WAAM/1B,IAGjB,QAASmjF,MACL,MAAOpiD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASoiD,MACL,MAAOrtD,WAAM/1B,IAGjB,QAASqjF,MACL,MAAOtiD,MAAKC,SAGhB,QAASsiD,MACL,MAAOviD,MAAKC,SAGhB,QAASuiD,MACL,MAAOxiD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASwiD,MACL,MAAOztD,WAAM/1B,IAGjB,QAASyjF,MACL,MAAO1tD,WAAM/1B,IAGjB,QAAS0jF,MACL,MAAOxxE,oBAAmB,4BAG9B,QAASyxE,MACL,MAAO5tD,WAAM/1B,IAGjB,QAAS4jF,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAO3xE,oBAAmB,4BAG9B,QAAS4xE,MACL,MAAO/tD,WAAM/1B,IAGjB,QAAS+jF,MACL,MAAOhuD,WAAM/1B,IAGjB,QAASgkF,MACL,MAAOjjD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASijD,MACL,MAAOljD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASkjD,MACL,MAAOhyE,oBAAmB,4BAG9B,QAASiyE,MACL,MAAOpuD,WAAM/1B,IAGjB,QAASokF,MACL,MAAOrjD,MAAKC,SAGhB,QAASqjD,MACL,MAAOtjD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASsjD,MACL,MAAOpyE,oBAAmB,4BAG9B,QAASqyE,MACL,MAAOxuD,WAAM/1B,IAGjB,QAASwkF,MACL,MAAOzuD,WAAM/1B,IAGjB,QAASykF,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAO3jD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS2jD,MACL,MAAO5jD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS4jD,MACL,MAAO1yE,oBAAmB,4BAG9B,QAAS2yE,MACL,MAAO9jD,MAAKC,SAGhB,QAAS8jD,MACL,MAAO5yE,oBAAmB,4BAG9B,QAAS6yE,MACL,MAAOhvD,WAAM/1B,IAGjB,QAASglF,MACL,MAAOjkD,MAAKC,SAGhB,QAASikD,MACL,MAAO/yE,oBAAmB,4BAG9B,QAASgzE,MACL,MAAOnvD,WAAM/1B,IAGjB,QAASmlF,MACL,MAAOpkD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASokD,MACL,MAAOrvD,WAAM/1B,IAGjB,QAASqlF,MACL,MAAOnzE,oBAAmB,4BAG9B,QAASozE,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOxkD,MAAKC,SAGhB,QAASwkD,MACL,MAAOzkD,MAAKC,SAGhB,QAASykD,MACL,MAAO1vD,WAAM/1B,IAGjB,QAAS0lF,MACL,MAAOxzE,oBAAmB,4BAG9B,QAASyzE,MACL,MAAOzzE,oBAAmB,4BAG9B,QAAS0zE,MACL,MAAO7kD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS6kD,MACL,MAAO9vD,WAAM/1B,IAGjB,QAAS8lF,MACL,MAAO/kD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS+kD,MACL,MAAOhwD,WAAM/1B,IAGjB,QAASgmF,MACL,MAAOjwD,WAAM/1B,IAGjB,QAASimF,MACL,MAAOlwD,WAAM/1B,IAGjB,QAASkmF,MACL,MAAOh0E,oBAAmB,4BAG9B,QAASi0E,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOrlD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASqlD,MACL,MAAOtlD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASslD,MACL,MAAOvlD,MAAKC,SAGhB,QAASulD,MACL,MAAOxlD,MAAKC,SAGhB,QAASwlD,MACL,MAAOzwD,WAAM/1B,IAGjB,QAASymF,MACL,MAAO1wD,WAAM/1B,IAGjB,QAAS0mF,MACL,MAAO3lD,MAAKC,SAGhB,QAAS2lD,MACL,MAAOz0E,oBAAmB,4BAG9B,QAAS00E,MACL,MAAO10E,oBAAmB,4BAG9B,QAAS20E,MACL,MAAO30E,oBAAmB,4BAG9B,QAAS40E,MACL,MAAO50E,oBAAmB,4BAG9B,QAAS60E,MACL,MAAO70E,oBAAmB,4BAG9B,QAAS80E,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOlmD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASkmD,MACL,MAAOh1E,oBAAmB,4BAG9B,QAASi1E,MACL,MAAOj1E,oBAAmB,4BAG9B,QAASk1E,MACL,MAAOl1E,oBAAmB,4BAG9B,QAASm1E,MACL,MAAOtxD,WAAM/1B,IAGjB,QAASsnF,MACL,MAAOp1E,oBAAmB,4BAG9B,QAASq1E,MACL,MAAOxmD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASwmD,MACL,MAAOzmD,MAAKC,SAGhB,QAASymD,MACL,MAAO1mD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS0mD,MACL,MAAOx1E,oBAAmB,4BAG9B,QAASy1E,MACL,MAAOz1E,oBAAmB,4BAG9B,QAAS01E,MACL,MAAO7mD,MAAKC,SAGhB,QAAS6mD,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAO51E,oBAAmB,4BAG9B,QAAS61E,MACL,MAAOhnD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASgnD,MACL,MAAOjnD,MAAKC,SAGhB,QAASinD,MACL,MAAO/1E,oBAAmB,4BAG9B,QAASg2E,MACL,MAAOnyD,WAAM/1B,IAGjB,QAASmoF,MACL,MAAOpyD,WAAM/1B,IAGjB,QAASooF,MACL,MAAOrnD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASqnD,MACL,MAAOtnD,MAAKC,SAGhB,QAASsnD,MACL,MAAOvyD,WAAM/1B,IAGjB,QAASuoF,MACL,MAAOxyD,WAAM/1B,IAGjB,QAASwoF,MACL,MAAOt2E,oBAAmB,4BAG9B,QAASu2E,MACL,MAAO1nD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS0nD,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAO5nD,MAAKC,SAGhB,QAAS4nD,MACL,MAAO7nD,MAAKC,SAGhB,QAAS6nD,MACL,MAAO9nD,MAAKC,SAGhB,QAAS8nD,MACL,MAAO52E,oBAAmB,4BAG9B,QAAS62E,MACL,MAAOhoD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASgoD,MACL,MAAOjzD,WAAM/1B,IAGjB,QAASipF,MACL,MAAOloD,MAAKC,SAGhB,QAASkoD,MACL,MAAOnoD,MAAKC,SAGhB,QAASmoD,MACL,MAAOpoD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASooD,MACL,MAAOrzD,WAAM/1B,IAGjB,QAASqpF,MACL,MAAOtoD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASsoD,MACL,MAAOvoD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASuoD,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOzoD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASyoD,MACL,MAAO1oD,MAAKC,SAGhB,QAAS0oD,MACL,MAAO3oD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS2oD,MACL,MAAO5oD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS4oD,MACL,MAAO7zD,WAAM/1B,IAGjB,QAAS6pF,MACL,MAAO9oD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS8oD,MACL,MAAO/zD,WAAM/1B,IAGjB,QAAS+pF,MACL,MAAO73E,oBAAmB,4BAG9B,QAAS83E,MACL,MAAO93E,oBAAmB,4BAG9B,QAAS+3E,MACL,MAAO/3E,oBAAmB,4BAG9B,QAASg4E,MACL,MAAOn0D,WAAM/1B,IAGjB,QAASmqF,MACL,MAAOppD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASopD,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOtpD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASspD,MACL,MAAOvpD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASupD,MACL,MAAOx0D,WAAM/1B,IAGjB,QAASwqF,MACL,MAAOz0D,WAAM/1B,IAGjB,QAASyqF,MACL,MAAO1pD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS0pD,MACL,MAAO3pD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS2pD,MACL,MAAO5pD,MAAKC,SAGhB,QAAS4pD,MACL,MAAO14E,oBAAmB,4BAG9B,QAAS24E,MACL,MAAO34E,oBAAmB,4BAG9B,QAAS44E,MACL,MAAO/0D,WAAM/1B,IAGjB,QAAS+qF,MACL,MAAOhqD,MAAKC,SAGhB,QAASgqD,MACL,MAAO94E,oBAAmB,4BAG9B,QAAS+4E,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACLhJ,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KAIJ,QAASE,MACL,MAAOpqD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASoqD,MACL,MAAOrqD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASqqD,MACL,MAAOtqD,MAAKC,SAGhB,QAASsqD,MACL,MAAOvqD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASuqD,MACL,MAAOxqD,MAAKC,SAGhB,QAASwqD,MACL,MAAOzqD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASyqD,MACL,MAAO1qD,MAAKC,SAGhB,QAAS0qD,MACL,MAAO3qD,MAAKC,SAGhB,QAAS2qD,MACL,MAAOz5E,oBAAmB,4BAG9B,QAAS05E,MACL,MAAO7qD,MAAKC,SAGhB,QAAS6qD,MACL,MAAO9qD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS8qD,MACL,MAAO/1D,WAAM/1B,IAGjB,QAAS+rF,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOjrD,MAAKC,SAGhB,QAASirD,MACL,MAAOlrD,MAAKC,SAGhB,QAASkrD,MACL,MAAOnrD,MAAKC,SAGhB,QAASmrD,MACL,MAAOp2D,WAAM/1B,IAGjB,QAASosF,MACL,MAAOrrD,MAAKC,SAGhB,QAASqrD,MACL,MAAOtrD,MAAKC,SAGhB,QAASsrD,MACL,MAAOv2D,WAAM/1B,IAGjB,QAASusF,MACL,MAAOr6E,oBAAmB,4BAG9B,QAASs6E,MACL,MAAOzrD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASyrD,MACL,MAAOv6E,oBAAmB,4BAG9B,QAASw6E,MACL,MAAO3rD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS2rD,MACL,MAAO5rD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS4rD,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAO36E,oBAAmB,4BAG9B,QAAS46E,MACL,MAAO/2D,WAAM/1B,IAGjB,QAAS+sF,MACL,MAAOh3D,WAAM/1B,IAGjB,QAASgtF,MACL,MAAOjsD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASisD,MACL,MAAOlsD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASksD,MACL,MAAOn3D,WAAM/1B,IAGjB,QAASmtF,MACL,MAAOpsD,MAAKC,SAGhB,QAASosD,MACL,MAAOr3D,WAAM/1B,IAGjB,QAASqtF,MACL,MAAOtsD,MAAKC,SAGhB,QAASssD,MACL,MAAOv3D,WAAM/1B,IAGjB,QAASutF,MACL,MAAOx3D,WAAM/1B,IAGjB,QAASwtF,MACL,MAAOz3D,WAAM/1B,IAGjB,QAASytF,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOx7E,oBAAmB,4BAG9B,QAASy7E,MACL,MAAOz7E,oBAAmB,4BAG9B,QAAS07E,MACL,MAAO73D,WAAM/1B,IAGjB,QAAS6tF,MACL,MAAO93D,WAAM/1B,IAGjB,QAAS8tF,MACL,MAAO/sD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS+sD,MACL,MAAO77E,oBAAmB,4BAG9B,QAAS87E,MACL,MAAOjtD,MAAKC,SAGhB,QAASitD,MACL,MAAOl4D,WAAM/1B,IAGjB,QAASkuF,MACL,MAAOntD,MAAKC,SAGhB,QAASmtD,MACL,MAAOptD,MAAKC,SAGhB,QAASotD,MACL,MAAOr4D,WAAM/1B,IAGjB,QAASquF,MACL,MAAOttD,MAAKC,SAGhB,QAASstD,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOxtD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASwtD,MACL,MAAOt8E,oBAAmB,4BAG9B,QAASu8E,MACL,MAAO1tD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS0tD,MACL,MAAO3tD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS2tD,MACL,MAAO5tD,MAAKC,SAGhB,QAAS4tD,MACL,MAAO7tD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS6tD,MACL,MAAO94D,WAAM/1B,IAGjB,QAAS8uF,MACL,MAAO/tD,MAAKC,SAGhB,QAAS+tD,MACL,MAAOhuD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASguD,MACL,MAAO98E,oBAAmB,4BAG9B,QAAS+8E,MACL,MAAO/8E,oBAAmB,4BAG9B,QAASg9E,MACL,MAAOh9E,oBAAmB,4BAG9B,QAASi9E,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOr5D,WAAM/1B,IAGjB,QAASqvF,MACL,MAAOn9E,oBAAmB,4BAG9B,QAASo9E,MACL,MAAOv5D,WAAM/1B,IAGjB,QAASuvF,MACL,MAAOx5D,WAAM/1B,IAGjB,QAASwvF,MACL,MAAOzuD,MAAKC,SAGhB,QAASyuD,MACL,MAAO1uD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS0uD,MACL,MAAO3uD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS2uD,MACL,MAAO5uD,MAAKC,SAGhB,QAAS4uD,MACL,MAAO19E,oBAAmB,4BAG9B,QAAS29E,MACL,MAAO9uD,MAAKC,SAGhB,QAAS8uD,MACL,MAAO59E,oBAAmB,4BAG9B,QAAS69E,MACL,MAAOhvD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASgvD,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAO/9E,oBAAmB,4BAG9B,QAASg+E,MACL,MAAOnvD,MAAKC,SAGhB,QAASmvD,MACL,MAAOp6D,WAAM/1B,IAGjB,QAASowF,MACL,MAAOrvD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASqvD,MACL,MAAOtvD,MAAKC,SAGhB,QAASsvD,MACL,MAAOp+E,oBAAmB,4BAG9B,QAASq+E,MACL,MAAOxvD,MAAKC,SAGhB,QAASwvD,MACL,MAAOt+E,oBAAmB,4BAG9B,QAASu+E,MACL,MAAOv+E,oBAAmB,4BAG9B,QAASw+E,MACL,MAAO3vD,MAAKC,SAGhB,QAAS2vD,MACL,MAAOz+E,oBAAmB,4BAG9B,QAAS0+E,MACL,MAAO76D,WAAM/1B,IAGjB,QAAS6wF,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAO/vD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS+vD,MACL,MAAOhwD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASgwD,MACL,MAAOjwD,MAAKC,SAGhB,QAASiwD,MACL,MAAOl7D,WAAM/1B,IAGjB,QAASkxF,MACL,MAAOh/E,oBAAmB,4BAG9B,QAASi/E,MACL,MAAOj/E,oBAAmB,4BAG9B,QAASk/E,MACL,MAAOrwD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASqwD,MACL,MAAOtwD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASswD,MACL,MAAOv7D,WAAM/1B,IAGjB,QAASuxF,MACL,MAAOx7D,WAAM/1B,IAGjB,QAASwxF,MACL,MAAOt/E,oBAAmB,4BAG9B,QAASu/E,MACL,MAAOv/E,oBAAmB,4BAG9B,QAASw/E,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAO57D,WAAM/1B,IAGjB,QAAS4xF,MACL,MAAO7wD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS6wD,MACL,MAAO97D,WAAM/1B,IAGjB,QAAS8xF,MACL,MAAO/wD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS+wD,MACL,MAAOhxD,MAAKC,SAGhB,QAASgxD,MACL,MAAOj8D,WAAM/1B,IAGjB,QAASiyF,MACL,MAAO//E,oBAAmB,4BAG9B,QAASggF,MACL,MAAOnxD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASmxD,MACL,MAAOjgF,oBAAmB,4BAG9B,QAASkgF,MACL,MAAOrxD,MAAKC,SAGhB,QAASqxD,MACL,MAAOtxD,MAAKC,SAGhB,QAASsxD,MACL,MAAOvxD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASuxD,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOzxD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASyxD,MACL,MAAO18D,WAAM/1B,IAGjB,QAAS0yF,MACL,MAAOxgF,oBAAmB,4BAG9B,QAASygF,MACL,MAAO58D,WAAM/1B,IAGjB,QAAS4yF,MACL,MAAO78D,WAAM/1B,IAGjB,QAAS6yF,MACL,MAAO3gF,oBAAmB,4BAG9B,QAAS4gF,MACL,MAAO/xD,MAAKC,SAGhB,QAAS+xD,MACL,MAAOh9D,WAAM/1B,IAGjB,QAASgzF,MACL,MAAOj9D,WAAM/1B,IAGjB,QAASizF,MACL,MAAOl9D,WAAM/1B,IAGjB,QAASkzF,MACL,MAAOn9D,WAAM/1B,IAGjB,QAASmzF,MACL,MAAOjhF,oBAAmB,4BAG9B,QAASkhF,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOtyD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASsyD,MACL,MAAOv9D,WAAM/1B,IAGjB,QAASuzF,MACL,MAAOx9D,WAAM/1B,IAGjB,QAASwzF,MACL,MAAOzyD,MAAKC,SAGhB,QAASyyD,MACL,MAAO19D,WAAM/1B,IAGjB,QAAS0zF,MACL,MAAOxhF,oBAAmB,4BAG9B,QAASyhF,MACL,MAAOzhF,oBAAmB,4BAG9B,QAAS0hF,MACL,MAAO1hF,oBAAmB,4BAG9B,QAAS2hF,MACL,MAAO9yD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS8yD,MACL,MAAO/yD,MAAKC,SAGhB,QAAS+yD,MACL,MAAO7hF,oBAAmB,4BAG9B,QAAS8hF,MACL,MAAO9hF,oBAAmB,4BAG9B,QAAS+hF,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOn+D,WAAM/1B,IAGjB,QAASm0F,MACL,MAAOpzD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASozD,MACL,MAAOrzD,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASqzD,MACL,MAAOniF,oBAAmB,4BAG9B,QAASoiF,MACL,MAAOpiF,oBAAmB,4BAG9B,QAASqiF,MACL,MAAOx+D,WAAM/1B,IAGjB,QAASw0F,MACL,MAAOtiF,oBAAmB,4BAG9B,QAASuiF,MACL,MAAO1zD,MAAKC,SAGhB,QAAS0zD,MACL,MAAOxiF,oBAAmB,4BAG9B,QAASyiF,MACL,MAAOziF,oBAAmB,4BAG9B,QAAS0iF,MACL,MAAO7zD,MAAKC,SAGhB,QAAS6zD,MACL,MAAO9+D,WAAM/1B,IAGjB,QAAS80F,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACLhJ,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KAIJ,QAASE,MACL,MAAOj0D,MAAKC,SAGhB,QAASi0D,MACL,MAAOl0D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASk0D,MACL,MAAOhjF,oBAAmB,4BAG9B,QAASijF,MACL,MAAOp0D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASo0D,MACL,MAAOr0D,MAAKC,SAGhB,QAASq0D,MACL,MAAOt0D,MAAKC,SAGhB,QAASs0D,MACL,MAAOv/D,WAAM/1B,IAGjB,QAASu1F,MACL,MAAOx0D,MAAKC,SAGhB,QAASw0D,MACL,MAAOz0D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASy0D,MACL,MAAO1/D,WAAM/1B,IAGjB,QAAS01F,MACL,MAAOxjF,oBAAmB,4BAG9B,QAASyjF,MACL,MAAOzjF,oBAAmB,4BAG9B,QAAS0jF,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAO3jF,oBAAmB,4BAG9B,QAAS4jF,MACL,MAAO//D,WAAM/1B,IAGjB,QAAS+1F,MACL,MAAO7jF,oBAAmB,4BAG9B,QAAS8jF,MACL,MAAOjgE,WAAM/1B,IAGjB,QAASi2F,MACL,MAAO/jF,oBAAmB,4BAG9B,QAASgkF,MACL,MAAOn1D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASm1D,MACL,MAAOp1D,MAAKC,SAGhB,QAASo1D,MACL,MAAOr1D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASq1D,MACL,MAAOnkF,oBAAmB,4BAG9B,QAASokF,MACL,MAAOpkF,oBAAmB,4BAG9B,QAASqkF,MACL,MAAOx1D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASw1D,MACL,MAAOzgE,WAAM/1B,IAGjB,QAASy2F,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAO3gE,WAAM/1B,IAGjB,QAAS22F,MACL,MAAOzkF,oBAAmB,4BAG9B,QAAS0kF,MACL,MAAO71D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS61D,MACL,MAAO91D,MAAKC,SAGhB,QAAS81D,MACL,MAAO/gE,WAAM/1B,IAGjB,QAAS+2F,MACL,MAAOh2D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASg2D,MACL,MAAOjhE,WAAM/1B,IAGjB,QAASi3F,MACL,MAAOl2D,MAAKC,SAGhB,QAASk2D,MACL,MAAOhlF,oBAAmB,4BAG9B,QAASilF,MACL,MAAOphE,WAAM/1B,IAGjB,QAASo3F,MACL,MAAOr2D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASq2D,MACL,MAAOnlF,oBAAmB,4BAG9B,QAASolF,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOx2D,MAAKC,SAGhB,QAASw2D,MACL,MAAOzhE,WAAM/1B,IAGjB,QAASy3F,MACL,MAAO12D,MAAKC,SAGhB,QAAS02D,MACL,MAAO32D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS22D,MACL,MAAO52D,MAAKC,SAGhB,QAAS42D,MACL,MAAO1lF,oBAAmB,4BAG9B,QAAS2lF,MACL,MAAO92D,MAAKC,SAGhB,QAAS82D,MACL,MAAO/2D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS+2D,MACL,MAAOh3D,MAAKC,SAGhB,QAASg3D,MACL,MAAOj3D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASi3D,MACL,MAAO/lF,oBAAmB,4BAG9B,QAASgmF,MACL,MAAOn3D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASm3D,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOr3D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASq3D,MACL,MAAOt3D,MAAKC,SAGhB,QAASs3D,MACL,MAAOv3D,MAAKC,SAGhB,QAASu3D,MACL,MAAOx3D,MAAKC,SAGhB,QAASw3D,MACL,MAAOz3D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASy3D,MACL,MAAO1iE,WAAM/1B,IAGjB,QAAS04F,MACL,MAAO3iE,WAAM/1B,IAGjB,QAAS24F,MACL,MAAO53D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS43D,MACL,MAAO73D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS63D,MACL,MAAO93D,MAAKC,SAGhB,QAAS83D,MACL,MAAO/3D,MAAKC,SAGhB,QAAS+3D,MACL,MAAOhjE,WAAM/1B,IAGjB,QAASg5F,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOl4D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASk4D,MACL,MAAOn4D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASm4D,MACL,MAAOpjE,WAAM/1B,IAGjB,QAASo5F,MACL,MAAOlnF,oBAAmB,4BAG9B,QAASmnF,MACL,MAAOt4D,MAAKC,SAGhB,QAASs4D,MACL,MAAOpnF,oBAAmB,4BAG9B,QAASqnF,MACL,MAAOrnF,oBAAmB,4BAG9B,QAASsnF,MACL,MAAOzjE,WAAM/1B,IAGjB,QAASy5F,MACL,MAAO1jE,WAAM/1B,IAGjB,QAAS05F,MACL,MAAO34D,MAAKC,SAGhB,QAAS24D,MACL,MAAO5jE,WAAM/1B,IAGjB,QAAS45F,MACL,MAAO74D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS64D,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAO/4D,MAAKC,SAGhB,QAAS+4D,MACL,MAAOhkE,WAAM/1B,IAGjB,QAASg6F,MACL,MAAOjkE,WAAM/1B,IAGjB,QAASi6F,MACL,MAAO/nF,oBAAmB,4BAG9B,QAASgoF,MACL,MAAOhoF,oBAAmB,4BAG9B,QAASioF,MACL,MAAOp5D,MAAKC,SAGhB,QAASo5D,MACL,MAAOr5D,MAAKC,SAGhB,QAASq5D,MACL,MAAOt5D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASs5D,MACL,MAAOvkE,WAAM/1B,IAGjB,QAASu6F,MACL,MAAOroF,oBAAmB,4BAG9B,QAASsoF,MACL,MAAOz5D,MAAKC,SAGhB,QAASy5D,MACL,MAAO15D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS05D,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAO55D,MAAKC,SAGhB,QAAS45D,MACL,MAAO75D,MAAKC,SAGhB,QAAS65D,MACL,MAAO3oF,oBAAmB,4BAG9B,QAAS4oF,MACL,MAAO/kE,WAAM/1B,IAGjB,QAAS+6F,MACL,MAAOh6D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASg6D,MACL,MAAOjlE,WAAM/1B,IAGjB,QAASi7F,MACL,MAAOl6D,MAAKC,SAGhB,QAASk6D,MACL,MAAOnlE,WAAM/1B,IAGjB,QAASm7F,MACL,MAAOp6D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASo6D,MACL,MAAOr6D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASq6D,MACL,MAAOt6D,MAAKC,SAGhB,QAASs6D,MACL,MAAOvlE,WAAM/1B,IAGjB,QAASu7F,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOzlE,WAAM/1B,IAGjB,QAASy7F,MACL,MAAO16D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS06D,MACL,MAAOxpF,oBAAmB,4BAG9B,QAASypF,MACL,MAAO5lE,WAAM/1B,IAGjB,QAAS47F,MACL,MAAO7lE,WAAM/1B,IAGjB,QAAS67F,MACL,MAAO96D,MAAKC,SAGhB,QAAS86D,MACL,MAAO5pF,oBAAmB,4BAG9B,QAAS6pF,MACL,MAAOh7D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASg7D,MACL,MAAOj7D,MAAKC,SAGhB,QAASi7D,MACL,MAAOl7D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASk7D,MACL,MAAOn7D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASm7D,MACL,MAAOp7D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASo7D,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOt7D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASs7D,MACL,MAAOvmE,WAAM/1B,IAGjB,QAASu8F,MACL,MAAOx7D,MAAKC,SAGhB,QAASw7D,MACL,MAAOtqF,oBAAmB,4BAG9B,QAASuqF,MACL,MAAO17D,MAAKC,SAGhB,QAAS07D,MACL,MAAO3mE,WAAM/1B,IAGjB,QAAS28F,MACL,MAAOzqF,oBAAmB,4BAG9B,QAAS0qF,MACL,MAAO7mE,WAAM/1B,IAGjB,QAAS68F,MACL,MAAO97D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS87D,MACL,MAAO/mE,WAAM/1B,IAGjB,QAAS+8F,MACL,MAAO7qF,oBAAmB,4BAG9B,QAAS8qF,MACL,MAAO9qF,oBAAmB,4BAG9B,QAAS+qF,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOn8D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASm8D,MACL,MAAOpnE,WAAM/1B,IAGjB,QAASo9F,MACL,MAAOr8D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASq8D,MACL,MAAOt8D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASs8D,MACL,MAAOprF,oBAAmB,4BAG9B,QAASqrF,MACL,MAAOxnE,WAAM/1B,IAGjB,QAASw9F,MACL,MAAOz8D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASy8D,MACL,MAAO1nE,WAAM/1B,IAGjB,QAAS09F,MACL,MAAOxrF,oBAAmB,4BAG9B,QAASyrF,MACL,MAAO5nE,WAAM/1B,IAGjB,QAAS49F,MACL,MAAO7nE,WAAM/1B,IAGjB,QAAS69F,MACL,MAAO9nE,WAAM/1B,IAGjB,QAAS89F,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOh9D,MAAKC,SAGhB,QAASg9D,MACL,MAAO9rF,oBAAmB,4BAG9B,QAAS+rF,MACL,MAAO/rF,oBAAmB,4BAG9B,QAASgsF,MACL,MAAOnoE,WAAM/1B,IAGjB,QAASm+F,MACL,MAAOp9D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASo9D,MACL,MAAOlsF,oBAAmB,4BAG9B,QAASmsF,MACL,MAAOtoE,WAAM/1B,IAGjB,QAASs+F,MACL,MAAOv9D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASu9D,MACL,MAAOx9D,MAAKC,SAGhB,QAASw9D,MACL,MAAOz9D,MAAKC,SAGhB,QAASy9D,MACL,MAAO1oE,WAAM/1B,IAGjB,QAAS0+F,MACL,MAAO39D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS29D,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACLhJ,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KAIJ,QAASE,MACL,MAAO3sF,oBAAmB,4BAG9B,QAAS4sF,MACL,MAAO/oE,WAAM/1B,IAGjB,QAAS++F,MACL,MAAOh+D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASg+D,MACL,MAAOj+D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASi+D,MACL,MAAO/sF,oBAAmB,4BAG9B,QAASgtF,MACL,MAAOn+D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASm+D,MACL,MAAOppE,WAAM/1B,IAGjB,QAASo/F,MACL,MAAOr+D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASq+D,MACL,MAAOt+D,MAAKC,SAGhB,QAASs+D,MACL,MAAOvpE,WAAM/1B,IAGjB,QAASu/F,MACL,MAAOrtF,oBAAmB,4BAG9B,QAASstF,MACL,MAAOz+D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASy+D,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOxtF,oBAAmB,4BAG9B,QAASytF,MACL,MAAO5+D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS4+D,MACL,MAAO7+D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS6+D,MACL,MAAO3tF,oBAAmB,4BAG9B,QAAS4tF,MACL,MAAO/+D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS++D,MACL,MAAOh/D,MAAKC,SAGhB,QAASg/D,MACL,MAAOj/D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASi/D,MACL,MAAO/tF,oBAAmB,4BAG9B,QAASguF,MACL,MAAOhuF,oBAAmB,4BAG9B,QAASiuF,MACL,MAAOjuF,oBAAmB,4BAG9B,QAASkuF,MACL,MAAOr/D,MAAKC,SAGhB,QAASq/D,MACL,MAAOtqE,WAAM/1B,IAGjB,QAASsgG,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOruF,oBAAmB,4BAG9B,QAASsuF,MACL,MAAOtuF,oBAAmB,4BAG9B,QAASuuF,MACL,MAAOvuF,oBAAmB,4BAG9B,QAASwuF,MACL,MAAO3/D,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS2/D,MACL,MAAO5/D,MAAKC,SAGhB,QAAS4/D,MACL,MAAO7/D,MAAKC,SAGhB,QAAS6/D,MACL,MAAO9/D,MAAKC,SAGhB,QAAS8/D,MACL,MAAO5uF,oBAAmB,4BAG9B,QAAS6uF,MACL,MAAOhgE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASggE,MACL,MAAO9uF,oBAAmB,4BAG9B,QAAS+uF,MACL,MAAOlgE,MAAKC,SAGhB,QAASkgE,MACL,MAAOnrE,WAAM/1B,IAGjB,QAASmhG,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOlvF,oBAAmB,4BAG9B,QAASmvF,MACL,MAAOtgE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASsgE,MACL,MAAOvrE,WAAM/1B,IAGjB,QAASuhG,MACL,MAAOxrE,WAAM/1B,IAGjB,QAASwhG,MACL,MAAOzrE,WAAM/1B,IAGjB,QAASyhG,MACL,MAAO1gE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS0gE,MACL,MAAO3gE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS2gE,MACL,MAAO5gE,MAAKC,SAGhB,QAAS4gE,MACL,MAAO7rE,WAAM/1B,IAGjB,QAAS6hG,MACL,MAAO9rE,WAAM/1B,IAGjB,QAAS8hG,MACL,MAAO/gE,MAAKC,SAGhB,QAAS+gE,MACL,MAAO7vF,oBAAmB,4BAG9B,QAAS8vF,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOlhE,MAAKC,SAGhB,QAASkhE,MACL,MAAOhwF,oBAAmB,4BAG9B,QAASiwF,MACL,MAAOjwF,oBAAmB,4BAG9B,QAASkwF,MACL,MAAOlwF,oBAAmB,4BAG9B,QAASmwF,MACL,MAAOtsE,WAAM/1B,IAGjB,QAASsiG,MACL,MAAOpwF,oBAAmB,4BAG9B,QAASqwF,MACL,MAAOxhE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASwhE,MACL,MAAOtwF,oBAAmB,4BAG9B,QAASuwF,MACL,MAAO1sE,WAAM/1B,IAGjB,QAAS0iG,MACL,MAAO3hE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS2hE,MACL,MAAOzwF,oBAAmB,4BAG9B,QAAS0wF,MACL,MAAO7hE,MAAKC,SAGhB,QAAS6hE,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAO/hE,MAAKC,SAGhB,QAAS+hE,MACL,MAAOhiE,MAAKC,SAGhB,QAASgiE,MACL,MAAOjtE,WAAM/1B,IAGjB,QAASijG,MACL,MAAOliE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASkiE,MACL,MAAOntE,WAAM/1B,IAGjB,QAASmjG,MACL,MAAOjxF,oBAAmB,4BAG9B,QAASkxF,MACL,MAAOlxF,oBAAmB,4BAG9B,QAASmxF,MACL,MAAOttE,WAAM/1B,IAGjB,QAASsjG,MACL,MAAOvtE,WAAM/1B,IAGjB,QAASujG,MACL,MAAOxiE,MAAKC,SAGhB,QAASwiE,MACL,MAAOtxF,oBAAmB,4BAG9B,QAASuxF,MACL,MAAO1iE,MAAKC,SAGhB,QAAS0iE,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAO5iE,MAAKC,SAGhB,QAAS4iE,MACL,MAAO7iE,MAAKC,SAGhB,QAAS6iE,MACL,MAAO9iE,MAAKC,SAGhB,QAAS8iE,MACL,MAAO/tE,WAAM/1B,IAGjB,QAAS+jG,MACL,MAAO7xF,oBAAmB,4BAG9B,QAAS8xF,MACL,MAAOjuE,WAAM/1B,IAGjB,QAASikG,MACL,MAAOluE,WAAM/1B,IAGjB,QAASkkG,MACL,MAAOnjE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASmjE,MACL,MAAOjyF,oBAAmB,4BAG9B,QAASkyF,MACL,MAAOruE,WAAM/1B,IAGjB,QAASqkG,MACL,MAAOtjE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASsjE,MACL,MAAOvjE,MAAKC,SAGhB,QAASujE,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOzjE,MAAKC,SAGhB,QAASyjE,MACL,MAAO1jE,MAAKC,SAGhB,QAAS0jE,MACL,MAAOxyF,oBAAmB,4BAG9B,QAASyyF,MACL,MAAOzyF,oBAAmB,4BAG9B,QAAS0yF,MACL,MAAO7uE,WAAM/1B,IAGjB,QAAS6kG,MACL,MAAO9jE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS8jE,MACL,MAAO5yF,oBAAmB,4BAG9B,QAAS6yF,MACL,MAAOhkE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASgkE,MACL,MAAOjkE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASikE,MACL,MAAO/yF,oBAAmB,4BAG9B,QAASgzF,MACL,MAAOnvE,WAAM/1B,IAGjB,QAASmlG,MACL,MAAOjzF,oBAAmB,4BAG9B,QAASkzF,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOtkE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASskE,MACL,MAAOpzF,oBAAmB,4BAG9B,QAASqzF,MACL,MAAOxkE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASwkE,MACL,MAAOzvE,WAAM/1B,IAGjB,QAASylG,MACL,MAAO1vE,WAAM/1B,IAGjB,QAAS0lG,MACL,MAAO3kE,MAAKC,SAGhB,QAAS2kE,MACL,MAAO5vE,WAAM/1B,IAGjB,QAAS4lG,MACL,MAAO7vE,WAAM/1B,IAGjB,QAAS6lG,MACL,MAAO9kE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS8kE,MACL,MAAO5zF,oBAAmB,4BAG9B,QAAS6zF,MACL,MAAOhwE,WAAM/1B,IAGjB,QAASgmG,MACL,MAAO9zF,oBAAmB,4BAG9B,QAAS+zF,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOh0F,oBAAmB,4BAG9B,QAASi0F,MACL,MAAOplE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASolE,MACL,MAAOrlE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASqlE,MACL,MAAOn0F,oBAAmB,4BAG9B,QAASo0F,MACL,MAAOvlE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASulE,MACL,MAAOxlE,MAAKC,SAGhB,QAASwlE,MACL,MAAOzlE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASylE,MACL,MAAO1wE,WAAM/1B,IAGjB,QAAS0mG,MACL,MAAO3lE,MAAKC,SAGhB,QAAS2lE,MACL,MAAOz0F,oBAAmB,4BAG9B,QAAS00F,MACL,MAAO10F,oBAAmB,4BAG9B,QAAS20F,MACL,MAAO30F,oBAAmB,4BAG9B,QAAS40F,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOhmE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASgmE,MACL,MAAOjmE,MAAKC,SAGhB,QAASimE,MACL,MAAO/0F,oBAAmB,4BAG9B,QAASg1F,MACL,MAAOnmE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASmmE,MACL,MAAOj1F,oBAAmB,4BAG9B,QAASk1F,MACL,MAAOrxE,WAAM/1B,IAGjB,QAASqnG,MACL,MAAOtmE,MAAKC,SAGhB,QAASsmE,MACL,MAAOvmE,MAAKC,SAGhB,QAASumE,MACL,MAAOxmE,MAAKC,SAGhB,QAASwmE,MACL,MAAOzxE,WAAM/1B,IAGjB,QAASynG,MACL,MAAO1mE,MAAKC,SAGhB,QAAS0mE,MACL,MAAO3xE,WAAM/1B,IAGjB,QAAS2nG,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAO7xE,WAAM/1B,IAGjB,QAAS6nG,MACL,MAAO9mE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS8mE,MACL,MAAO51F,oBAAmB,4BAG9B,QAAS61F,MACL,MAAOhyE,WAAM/1B,IAGjB,QAASgoG,MACL,MAAO91F,oBAAmB,4BAG9B,QAAS+1F,MACL,MAAOlnE,MAAKC,SAGhB,QAASknE,MACL,MAAOnyE,WAAM/1B,IAGjB,QAASmoG,MACL,MAAOpnE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASonE,MACL,MAAOrnE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASqnE,MACL,MAAOn2F,oBAAmB,4BAG9B,QAASo2F,MACL,MAAOvyE,WAAM/1B,IAGjB,QAASuoG,MACL,MAAOr2F,oBAAmB,4BAG9B,QAASs2F,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACLhJ,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KAIJ,QAASE,MACL,MAAO3nE,MAAKC,SAGhB,QAAS2nE,MACL,MAAOz2F,oBAAmB,4BAG9B,QAAS02F,MACL,MAAO7yE,WAAM/1B,IAGjB,QAAS6oG,MACL,MAAO9nE,MAAKC,SAGhB,QAAS8nE,MACL,MAAO/nE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS+nE,MACL,MAAO72F,oBAAmB,4BAG9B,QAAS82F,MACL,MAAOjzE,WAAM/1B,IAGjB,QAASipG,MACL,MAAO/2F,oBAAmB,4BAG9B,QAASg3F,MACL,MAAOnoE,MAAKC,SAGhB,QAASmoE,MACL,MAAOpoE,MAAKC,SAGhB,QAASooE,MACL,MAAOroE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASqoE,MACL,MAAOn3F,oBAAmB,4BAG9B,QAASo3F,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOr3F,oBAAmB,4BAG9B,QAASs3F,MACL,MAAOzoE,MAAKC,SAGhB,QAASyoE,MACL,MAAO1oE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS0oE,MACL,MAAO3oE,MAAKC,SAGhB,QAAS2oE,MACL,MAAO5zE,WAAM/1B,IAGjB,QAAS4pG,MACL,MAAO7oE,MAAKC,SAGhB,QAAS6oE,MACL,MAAO9zE,WAAM/1B,IAGjB,QAAS8pG,MACL,MAAO/oE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS+oE,MACL,MAAOhpE,MAAKC,SAGhB,QAASgpE,MACL,MAAOj0E,WAAM/1B,IAGjB,QAASiqG,MACL,MAAOl0E,WAAM/1B,IAGjB,QAASkqG,MACL,MAAOnpE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASmpE,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOrpE,MAAKC,SAGhB,QAASqpE,MACL,MAAOt0E,WAAM/1B,IAGjB,QAASsqG,MACL,MAAOv0E,WAAM/1B,IAGjB,QAASuqG,MACL,MAAOxpE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASwpE,MACL,MAAOzpE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASypE,MACL,MAAO10E,WAAM/1B,IAGjB,QAAS0qG,MACL,MAAO3pE,MAAKC,SAGhB,QAAS2pE,MACL,MAAO5pE,MAAKC,SAGhB,QAAS4pE,MACL,MAAO7pE,MAAKC,SAGhB,QAAS6pE,MACL,MAAO34F,oBAAmB,4BAG9B,QAAS44F,MACL,MAAO/0E,WAAM/1B,IAGjB,QAAS+qG,MACL,MAAO74F,oBAAmB,4BAG9B,QAAS84F,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAO/4F,oBAAmB,4BAG9B,QAASg5F,MACL,MAAOnqE,MAAKC,SAGhB,QAASmqE,MACL,MAAOp1E,WAAM/1B,IAGjB,QAASorG,MACL,MAAOl5F,oBAAmB,4BAG9B,QAASm5F,MACL,MAAOtqE,MAAKC,SAGhB,QAASsqE,MACL,MAAOvqE,MAAKC,SAGhB,QAASuqE,MACL,MAAOr5F,oBAAmB,4BAG9B,QAASs5F,MACL,MAAOzqE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASyqE,MACL,MAAO1qE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS0qE,MACL,MAAO3qE,MAAKC,SAGhB,QAAS2qE,MACL,MAAO5qE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS4qE,MACL,MAAO7qE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS6qE,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAO/1E,WAAM/1B,IAGjB,QAAS+rG,MACL,MAAOhrE,MAAKC,SAGhB,QAASgrE,MACL,MAAOjrE,MAAKC,SAGhB,QAASirE,MACL,MAAOlrE,MAAKC,SAGhB,QAASkrE,MACL,MAAOnrE,MAAKC,SAGhB,QAASmrE,MACL,MAAOj6F,oBAAmB,4BAG9B,QAASk6F,MACL,MAAOrrE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASqrE,MACL,MAAOtrE,MAAKC,SAGhB,QAASsrE,MACL,MAAOvrE,MAAKC,SAGhB,QAASurE,MACL,MAAOr6F,oBAAmB,4BAG9B,QAASs6F,MACL,MAAOzrE,MAAKC,SAGhB,QAASyrE,MACL,MAAO12E,WAAM/1B,IAGjB,QAAS0sG,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAO5rE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS4rE,MACL,MAAO7rE,MAAKC,SAGhB,QAAS6rE,MACL,MAAO92E,WAAM/1B,IAGjB,QAAS8sG,MACL,MAAO/2E,WAAM/1B,IAGjB,QAAS+sG,MACL,MAAOhsE,MAAKC,SAGhB,QAASgsE,MACL,MAAO96F,oBAAmB,4BAG9B,QAAS+6F,MACL,MAAOlsE,MAAKC,SAGhB,QAASksE,MACL,MAAOnsE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASmsE,MACL,MAAOj7F,oBAAmB,4BAG9B,QAASk7F,MACL,MAAOrsE,MAAKC,SAGhB,QAASqsE,MACL,MAAOtsE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASssE,MACL,MAAOp7F,oBAAmB,4BAG9B,QAASq7F,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOt7F,oBAAmB,4BAG9B,QAASu7F,MACL,MAAO1sE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS0sE,MACL,MAAO33E,WAAM/1B,IAGjB,QAAS2tG,MACL,MAAO53E,WAAM/1B,IAGjB,QAAS4tG,MACL,MAAO73E,WAAM/1B,IAGjB,QAAS6tG,MACL,MAAO37F,oBAAmB,4BAG9B,QAAS47F,MACL,MAAO/sE,MAAKC,SAGhB,QAAS+sE,MACL,MAAO77F,oBAAmB,4BAG9B,QAAS87F,MACL,MAAOjtE,MAAKC,SAGhB,QAASitE,MACL,MAAO/7F,oBAAmB,4BAG9B,QAASg8F,MACL,MAAOh8F,oBAAmB,4BAG9B,QAASi8F,MACL,MAAOptE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASotE,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOt4E,WAAM/1B,IAGjB,QAASsuG,MACL,MAAOvtE,MAAKC,SAGhB,QAASutE,MACL,MAAOxtE,MAAKC,SAGhB,QAASwtE,MACL,MAAOt8F,oBAAmB,4BAG9B,QAASu8F,MACL,MAAO1tE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS0tE,MACL,MAAOx8F,oBAAmB,4BAG9B,QAASy8F,MACL,MAAOz8F,oBAAmB,4BAG9B,QAAS08F,MACL,MAAO7tE,MAAKC,SAGhB,QAAS6tE,MACL,MAAO9tE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS8tE,MACL,MAAO/tE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS+tE,MACL,MAAOhuE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASguE,MACL,MAAO98F,oBAAmB,4BAG9B,QAAS+8F,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAOnuE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASmuE,MACL,MAAOp5E,WAAM/1B,IAGjB,QAASovG,MACL,MAAOl9F,oBAAmB,4BAG9B,QAASm9F,MACL,MAAOtuE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASsuE,MACL,MAAOvuE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASuuE,MACL,MAAOxuE,MAAKC,SAGhB,QAASwuE,MACL,MAAOzuE,MAAKC,SAGhB,QAASyuE,MACL,MAAO1uE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS0uE,MACL,MAAO35E,WAAM/1B,IAGjB,QAAS2vG,MACL,MAAO55E,WAAM/1B,IAGjB,QAAS4vG,MACL,MAAO7uE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS6uE,MACL,MAAO9uE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS8uE,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAO79F,oBAAmB,4BAG9B,QAAS89F,MACL,MAAOjvE,MAAKC,SAGhB,QAASivE,MACL,MAAO/9F,oBAAmB,4BAG9B,QAASg+F,MACL,MAAOnvE,MAAKC,SAGhB,QAASmvE,MACL,MAAOp6E,WAAM/1B,IAGjB,QAASowG,MACL,MAAOrvE,MAAKC,SAGhB,QAASqvE,MACL,MAAOtvE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASsvE,MACL,MAAOp+F,oBAAmB,4BAG9B,QAASq+F,MACL,MAAOxvE,MAAKC,SAGhB,QAASwvE,MACL,MAAOz6E,WAAM/1B,IAGjB,QAASywG,MACL,MAAOv+F,oBAAmB,4BAG9B,QAASw+F,MACL,MAAO3vE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS2vE,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAO7vE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS6vE,MACL,MAAO9vE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS8vE,MACL,MAAO5+F,oBAAmB,4BAG9B,QAAS6+F,MACL,MAAOh7E,WAAM/1B,IAGjB,QAASgxG,MACL,MAAO9+F,oBAAmB,4BAG9B,QAAS++F,MACL,MAAOl7E,WAAM/1B,IAGjB,QAASkxG,MACL,MAAOnwE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASmwE,MACL,MAAOp7E,WAAM/1B,IAGjB,QAASoxG,MACL,MAAOrwE,MAAKC,SAGhB,QAASqwE,MACL,MAAOtwE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASswE,MACL,MAAOv7E,WAAM/1B,IAGjB,QAASuxG,MACL,MAAOr/F,oBAAmB,4BAG9B,QAASs/F,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACL,MAAO1wE,MAAKC,SAGhB,QAAS0wE,MACL,MAAO37E,WAAM/1B,IAGjB,QAAS2xG,MACL,MAAO5wE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS4wE,MACL,MAAO77E,WAAM/1B,IAGjB,QAAS6xG,MACL,MAAO9wE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS8wE,MACL,MAAO/7E,WAAM/1B,IAGjB,QAAS+xG,MACL,MAAOhxE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASgxE,MACL,MAAOj8E,WAAM/1B,IAGjB,QAASiyG,MACL,MAAOlxE,MAAKC,SAGhB,QAASkxE,MACL,MAAOnxE,MAAKC,SAGhB,QAASmxE,MACL,MAAOpxE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASoxE,MACL,MAAOlgG,oBAAmB,4BAG9B,QAASmgG,MACLZ,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASE,MACLhJ,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KACAa,KAIJ,QAASE,MACLhsD,KACA6J,KACA6J,KACA6J,KACA6J,KACA6J,KACA6J,KACA6J,KACA6J,KACA6J,KACA6J,KACA6J,KAIJ,QAASE,MACL,MAAOzxE,MAAKC,SAGhB,QAASyxE,MACL,MAAOvgG,oBAAmB,4BAG9B,QAASwgG,MACL,MAAO38E,WAAM/1B,IAGjB,QAAS2yG,MACL,MAAO58E,WAAM/1B,IAGjB,QAAS4yG,MACL,MAAO78E,WAAM/1B,IAGjB,QAAS6yG,MACL,MAAO9xE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS8xE,MACL,MAAO5gG,oBAAmB,4BAG9B,QAAS6gG,MACL,MAAOhyE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASgyE,MACL,MAAO9gG,oBAAmB,4BAG9B,QAAS+gG,MACL,MAAO/gG,oBAAmB,4BAG9B,QAASghG,MACL,MAAOhhG,oBAAmB,4BAG9B,QAASihG,MACL,MAAOp9E,WAAM/1B,IAGjB,QAASozG,MACLC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAIJ,QAASC,MACL,MAAOlzE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASkzE,MACL,MAAOnzE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASmzE,MACL,MAAOpzE,MAAKC,SAGhB,QAASozE,MACL,MAAOr+E,WAAM/1B,IAGjB,QAASq0G,MACL,MAAOt+E,WAAM/1B,IAGjB,QAASs0G,MACL,MAAOpiG,oBAAmB,4BAG9B,QAASqiG,MACL,MAAOx+E,WAAM/1B,IAGjB,QAASw0G,MACL,MAAOzzE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASyzE,MACL,MAAO1+E,WAAM/1B,IAGjB,QAAS00G,MACL,MAAOxiG,oBAAmB,4BAG9B,QAASyiG,MACL,MAAO5zE,MAAKC,SAGhB,QAAS4zE,MACL,MAAO1iG,oBAAmB,4BAG9B,QAASmhG,MACLY,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAIJ,QAASC,MACL,MAAO9zE,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS8zE,MACL,MAAO5iG,oBAAmB,4BAG9B,QAAS6iG,MACL,MAAOh/E,WAAM/1B,IAGjB,QAASg1G,MACL,MAAOj0E,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASi0E,MACL,MAAOl0E,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASk0E,MACL,MAAOn0E,MAAKC,SAGhB,QAASm0E,MACL,MAAOjjG,oBAAmB,4BAG9B,QAASkjG,MACL,MAAOljG,oBAAmB,4BAG9B,QAASmjG,MACL,MAAOnjG,oBAAmB,4BAG9B,QAASojG,MACL,MAAOpjG,oBAAmB,4BAG9B,QAASqjG,MACL,MAAOrjG,oBAAmB,4BAG9B,QAASsjG,MACL,MAAOtjG,oBAAmB,4BAG9B,QAASohG,MACLuB,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASC,MACL,MAAO10E,MAAKC,SAGhB,QAAS00E,MACL,MAAOxjG,oBAAmB,4BAG9B,QAASyjG,MACL,MAAOzjG,oBAAmB,4BAG9B,QAAS0jG,MACL,MAAO7/E,WAAM/1B,IAGjB,QAAS61G,MACL,MAAO3jG,oBAAmB,4BAG9B,QAAS4jG,MACL,MAAO/0E,MAAKC,SAGhB,QAAS+0E,MACL,MAAOh1E,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASg1E,MACL,MAAOjgF,WAAM/1B,IAGjB,QAASi2G,MACL,MAAO/jG,oBAAmB,4BAG9B,QAASgkG,MACL,MAAOn1E,MAAKC,SAGhB,QAASm1E,MACL,MAAOp1E,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASo1E,MACL,MAAOr1E,MAAKC,SAGhB,QAASuyE,MACLkC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAIJ,QAASC,MACL,MAAOt1E,MAAKC,SAGhB,QAASs1E,MACL,MAAOvgF,WAAM/1B,IAGjB,QAASu2G,MACL,MAAOx1E,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASw1E,MACL,MAAOzgF,WAAM/1B,IAGjB,QAASy2G,MACL,MAAO11E,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS01E,MACL,MAAO3gF,WAAM/1B,IAGjB,QAAS22G,MACL,MAAO51E,MAAKC,SAGhB,QAAS41E,MACL,MAAO71E,MAAKC,SAGhB,QAAS61E,MACL,MAAO91E,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS81E,MACL,MAAO5kG,oBAAmB,4BAG9B,QAAS6kG,MACL,MAAO7kG,oBAAmB,4BAG9B,QAAS8kG,MACL,MAAOj2E,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASwyE,MACL6C,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAIJ,QAASC,MACL,MAAOlhF,WAAM/1B,IAGjB,QAASk3G,MACL,MAAOhlG,oBAAmB,4BAG9B,QAASilG,MACL,MAAOphF,WAAM/1B,IAGjB,QAASo3G,MACL,MAAOr2E,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASq2E,MACL,MAAOt2E,MAAKC,SAGhB,QAASs2E,MACL,MAAOv2E,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASu2E,MACL,MAAOxhF,WAAM/1B,IAGjB,QAASw3G,MACL,MAAOzhF,WAAM/1B,IAGjB,QAASy3G,MACL,MAAO12E,MAAKC,SAGhB,QAAS02E,MACL,MAAOxlG,oBAAmB,4BAG9B,QAASylG,MACL,MAAOzlG,oBAAmB,4BAG9B,QAAS0lG,MACL,MAAO72E,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASyyE,MACLwD,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAIJ,QAASC,MACL,MAAO9hF,WAAM/1B,IAGjB,QAAS83G,MACL,MAAO5lG,oBAAmB,4BAG9B,QAAS6lG,MACL,MAAOh3E,MAAKC,SAGhB,QAASg3E,MACL,MAAOjiF,WAAM/1B,IAGjB,QAASi4G,MACL,MAAO/lG,oBAAmB,4BAG9B,QAASgmG,MACL,MAAOniF,WAAM/1B,IAGjB,QAASm4G,MACL,MAAOjmG,oBAAmB,4BAG9B,QAASkmG,MACL,MAAOlmG,oBAAmB,4BAG9B,QAASmmG,MACL,MAAOt3E,MAAKC,SAGhB,QAASs3E,MACL,MAAOv3E,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASu3E,MACL,MAAOxiF,WAAM/1B,IAGjB,QAASw4G,MACL,MAAOziF,WAAM/1B,IAGjB,QAAS0zG,MACLmE,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAIJ,QAASC,MACL,MAAO13E,MAAKC,SAGhB,QAAS03E,MACL,MAAO33E,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS23E,MACL,MAAO53E,MAAKC,SAGhB,QAAS43E,MACL,MAAO73E,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS63E,MACL,MAAO93E,MAAKC,SAGhB,QAAS83E,MACL,MAAO/3E,MAAKC,SAGhB,QAAS+3E,MACL,MAAOh4E,MAAKC,SAGhB,QAASg4E,MACL,MAAOj4E,MAAKC,SAGhB,QAASi4E,MACL,MAAOljF,WAAM/1B,IAGjB,QAASk5G,MACL,MAAOhnG,oBAAmB,4BAG9B,QAASinG,MACL,MAAOp4E,MAAKC,SAGhB,QAASo4E,MACL,MAAOr4E,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS2yE,MACL8E,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAIJ,QAASC,MACL,MAAOt4E,MAAKC,SAGhB,QAASs4E,MACL,MAAOpnG,oBAAmB,4BAG9B,QAASqnG,MACL,MAAOrnG,oBAAmB,4BAG9B,QAASsnG,MACL,MAAOz4E,MAAKC,SAGhB,QAASy4E,MACL,MAAOvnG,oBAAmB,4BAG9B,QAASwnG,MACL,MAAOxnG,oBAAmB,4BAG9B,QAASynG,MACL,MAAO54E,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS44E,MACL,MAAO7jF,WAAM/1B,IAGjB,QAAS65G,MACL,MAAO9jF,WAAM/1B,IAGjB,QAAS85G,MACL,MAAO/jF,WAAM/1B,IAGjB,QAAS+5G,MACL,MAAOh5E,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASg5E,MACL,MAAOj5E,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS4yE,MACLyF,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAIJ,QAASC,MACL,MAAO/nG,oBAAmB,4BAG9B,QAASgoG,MACL,MAAOn5E,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASm5E,MACL,MAAOjoG,oBAAmB,4BAG9B,QAASkoG,MACL,MAAOrkF,WAAM/1B,IAGjB,QAASq6G,MACL,MAAOtkF,WAAM/1B,IAGjB,QAASs6G,MACL,MAAOpoG,oBAAmB,4BAG9B,QAASqoG,MACL,MAAOroG,oBAAmB,4BAG9B,QAASsoG,MACL,MAAOtoG,oBAAmB,4BAG9B,QAASuoG,MACL,MAAO15E,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS05E,MACL,MAAOxoG,oBAAmB,4BAG9B,QAASyoG,MACL,MAAO5kF,WAAM/1B,IAGjB,QAAS46G,MACL,MAAO1oG,oBAAmB,4BAG9B,QAAS2hG,MACLoG,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAIJ,QAASC,MACL,MAAO95E,MAAKC,SAGhB,QAAS85E,MACL,MAAO5oG,oBAAmB,4BAG9B,QAAS6oG,MACL,MAAOh6E,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASg6E,MACL,MAAOj6E,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASi6E,MACL,MAAOl6E,MAAKC,SAGhB,QAASk6E,MACL,MAAOnlF,WAAM/1B,IAGjB,QAASm7G,MACL,MAAOplF,WAAM/1B,IAGjB,QAASo7G,MACL,MAAOr6E,MAAKC,SAGhB,QAASq6E,MACL,MAAOt6E,MAAKC,SAGhB,QAASs6E,MACL,MAAOv6E,MAAKC,SAGhB,QAASu6E,MACL,MAAOxlF,WAAM/1B,IAGjB,QAASw7G,MACL,MAAOz6E,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS8yE,MACL+G,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAIJ,QAASC,MACL,MAAOvpG,oBAAmB,4BAG9B,QAASwpG,MACL,MAAOxpG,oBAAmB,4BAG9B,QAASypG,MACL,MAAO56E,MAAKC,SAGhB,QAAS46E,MACL,MAAO76E,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS66E,MACL,MAAO96E,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAAS86E,MACL,MAAO5pG,oBAAmB,4BAG9B,QAAS6pG,MACL,MAAOh7E,MAAKC,SAGhB,QAASg7E,MACL,MAAOj7E,MAAKC,SAGhB,QAASi7E,MACL,MAAO/pG,oBAAmB,4BAG9B,QAASgqG,MACL,MAAOhqG,oBAAmB,4BAG9B,QAASiqG,MACL,MAAOp7E,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASo7E,MACL,MAAOlqG,oBAAmB,4BAG9B,QAAS6hG,MACL0H,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAIJ,QAASC,MACL,MAAOtmF,WAAM/1B,IAGjB,QAASs8G,MACL,MAAOpqG,oBAAmB,4BAG9B,QAASqqG,MACL,MAAOxmF,WAAM/1B,IAGjB,QAASw8G,MACL,MAAOzmF,WAAM/1B,IAGjB,QAASy8G,MACL,MAAOvqG,oBAAmB,4BAG9B,QAASwqG,MACL,MAAOxqG,oBAAmB,4BAG9B,QAASyqG,MACL,MAAO57E,MAAKC,SAGhB,QAAS47E,MACL,MAAO1qG,oBAAmB,4BAG9B,QAAS2qG,MACL,MAAO97E,MAAKC,SAGhB,QAAS87E,MACL,MAAO5qG,oBAAmB,4BAG9B,QAAS6qG,MACL,MAAO7qG,oBAAmB,4BAG9B,QAAS8qG,MACL,MAAOj8E,MAAKC,SAGhB,QAASgzE,MACLqI,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAGJ,QAASC,MACLzK,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAIJ,QAAS+J,MACL,MAAOnnF,WAAM/1B,IAGjB,QAASm9G,MACL,MAAOp8E,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASo8E,MACL,MAAOr8E,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASq8E,MACL,MAAOt8E,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASs8E,MACL,MAAOvnF,WAAM/1B,IAGjB,QAASu9G,MACL,MAAOx8E,MAAKpK,IAAIoK,KAAKC,SAAUD,KAAKC,UAGxC,QAASw8E,MACL,MAAOznF,WAAM/1B,IAGjB,QAASy9G,MACL,MAAO1nF,WAAM/1B,IAGjB,QAAS09G,MACL,MAAO3nF,WAAM/1B,IAGV,QAAS29G,MAEdpL,KACAa,KACA6J,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAv3G,QAAQs2C,IAAI,SAIP,QAASmhE,MAGdrL,KACAa,KACA6J,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAv3G,QAAQs2C,IAAI,S1B53PmBjrC,EAAuB,EAAImsG,G0BpnE5DnsG,EAAA,EAAAosG,I1B4nEM,SAAUr/G,EAAQiT,EAAqBrT,GAE7C,Y2B9nEA,SAAS0/G,GAAaj8G,GACpB,MAAQA,GAAMA,EAAO,EAEvB,QAASk8G,GAAYl8G,EAAKm8G,GACxB,MAAGn8G,GAAMA,GAAOm8G,EACPn8G,EAAMA,EAENk8G,EAAYl8G,EAAMA,EAAKm8G,GAIlC,QAASC,GAASC,EAAMC,EAAMH,GAC5B,MAAGE,GAAOC,EAAOH,EACRE,EAAOC,EAEPF,EAASC,EAAOC,EAAMA,EAAMH,GAIvC,QAASI,GAAUC,GAKjB,MAHQP,GADA,IAEAC,EAFA,GAEe,aACfE,EAHA,GAGY,EAAG,MAIzBxsG,EAAA,K3B0mEM,SAAUjT,EAAQiT,EAAqBrT,GAE7C,Y4BvoEA,SAASo0G,KAEP,MADAa,KACOryE,KAAKC,SAGd,QAASoyE,KAEP,MADA6J,KACOl8E,KAAKC,SAGd,QAASi8E,KAEP,MADAC,KACOn8E,KAAKC,SAGd,QAASk8E,KAEP,MADAC,KACOp8E,KAAKC,SAGd,QAASm8E,KAEP,MADAC,KACOr8E,KAAKC,SAGd,QAASo8E,KAEP,MADAC,KACOt8E,KAAKC,SAGd,QAASq8E,KAEP,MADAC,KACOv8E,KAAKC,SAGd,QAASs8E,KAEP,MADAC,KACOx8E,KAAKC,SAGd,QAASu8E,KAEP,MADAC,KACOz8E,KAAKC,SAGd,QAASw8E,KAEP,MADAC,KACO18E,KAAKC,SAGd,QAASy8E,KAEP,MADAC,KACO38E,KAAKC,SAGd,QAAS08E,KAEP,MADAW,KACOt9E,KAAKC,SAGd,QAASq9E,KAEP,MADAC,KACOv9E,KAAKC,SAGd,QAASs9E,KAEP,MADAC,KACOx9E,KAAKC,SAGd,QAASu9E,KAEP,MADAC,KACOz9E,KAAKC,SAGd,QAASw9E,KAEP,MADAC,KACO19E,KAAKC,SAGd,QAASy9E,KAEP,MADAC,KACO39E,KAAKC,SAGd,QAAS09E,KAEP,MADAC,KACO59E,KAAKC,SAGd,QAAS29E,KAEP,MADAC,KACO79E,KAAKC,SAGd,QAAS49E,KAEP,MADAC,KACO99E,KAAKC,SAGd,QAAS69E,KAEP,MADAC,KACO/9E,KAAKC,SAGd,QAAS89E,KAEP,MADAC,KACOh+E,KAAKC,SAGd,QAAS+9E,KAEP,MADAC,KACOj+E,KAAKC,SAGd,QAASg+E,KAEP,MADAC,KACOl+E,KAAKC,SAGd,QAASi+E,KAEP,MADAC,KACOn+E,KAAKC,SAGd,QAASk+E,KAEP,MADAC,KACOp+E,KAAKC,SAGd,QAASm+E,KAEP,MADAC,KACOr+E,KAAKC,SAGd,QAASo+E,KAEP,MADAC,KACOt+E,KAAKC,SAGd,QAASq+E,KAEP,MADAC,KACOv+E,KAAKC,SAGd,QAASs+E,KAEP,MADAC,KACOx+E,KAAKC,SAGd,QAASu+E,KAEP,MADAC,KACOz+E,KAAKC,SAGd,QAASw+E,KAEP,MADAC,KACO1+E,KAAKC,SAGd,QAASy+E,KAEP,MADAC,KACO3+E,KAAKC,SAGd,QAAS0+E,KAEP,MADAC,KACO5+E,KAAKC,SAGd,QAAS2+E,KAEP,MADAC,KACO7+E,KAAKC,SAGd,QAAS4+E,KAEP,MADAC,KACO9+E,KAAKC,SAGd,QAAS6+E,KAEP,MADAC,KACO/+E,KAAKC,SAGd,QAAS8+E,KAEP,MADAC,KACOh/E,KAAKC,SAGd,QAAS++E,KAEP,MADAC,KACOj/E,KAAKC,SAGd,QAASg/E,KAEP,MADAC,KACOl/E,KAAKC,SAGd,QAASi/E,KAEP,MADAC,KACOn/E,KAAKC,SAGd,QAASk/E,KAEP,MADAC,KACOp/E,KAAKC,SAGd,QAASm/E,KAEP,MADAC,KACOr/E,KAAKC,SAGd,QAASo/E,KAEP,MADAC,KACOt/E,KAAKC,SAGd,QAASq/E,KAEP,MADAC,KACOv/E,KAAKC,SAGd,QAASs/E,KAEP,MADAC,KACOx/E,KAAKC,SAGd,QAASu/E,KAEP,MADAC,KACOz/E,KAAKC,SAGd,QAASw/E,KAEP,MADAC,KACO1/E,KAAKC,SAGd,QAASy/E,KAEP,MADAC,KACO3/E,KAAKC,SAGd,QAAS0/E,KAEP,MADAC,KACO5/E,KAAKC,SAGd,QAAS2/E,KAEP,MADAC,MACO7/E,KAAKC,SAGd,QAAS4/E,MAEP,MADAC,MACO9/E,KAAKC,SAGd,QAAS6/E,MAEP,MADAC,MACO//E,KAAKC,SAGd,QAAS8/E,MAEP,MADAC,MACOhgF,KAAKC,SAGd,QAAS+/E,MAEP,MADAC,MACOjgF,KAAKC,SAGd,QAASggF,MAEP,MADAC,MACOlgF,KAAKC,SAGd,QAASigF,MAEP,MADAC,MACOngF,KAAKC,SAGd,QAASkgF,MAEP,MADAC,MACOpgF,KAAKC,SAGd,QAASmgF,MAEP,MADAC,MACOrgF,KAAKC,SAGd,QAASogF,MAEP,MADAC,MACOtgF,KAAKC,SAGd,QAASqgF,MAEP,MADAC,MACOvgF,KAAKC,SAGd,QAASsgF,MAEP,MADAC,MACOxgF,KAAKC,SAGd,QAASugF,MAEP,MADAC,MACOzgF,KAAKC,SAGd,QAASwgF,MAEP,MADAC,MACO1gF,KAAKC,SAGd,QAASygF,MAEP,MADAC,MACO3gF,KAAKC,SAGd,QAAS0gF,MAEP,MADAC,MACO5gF,KAAKC,SAGd,QAAS2gF,MAEP,MADAC,MACO7gF,KAAKC,SAGd,QAAS4gF,MAEP,MADAC,MACO9gF,KAAKC,SAGd,QAAS6gF,MAEP,MADAC,MACO/gF,KAAKC,SAGd,QAAS8gF,MAEP,MADAC,MACOhhF,KAAKC,SAGd,QAAS+gF,MAEP,MADAC,MACOjhF,KAAKC,SAGd,QAASghF,MAEP,MADAC,MACOlhF,KAAKC,SAGd,QAASihF,MAEP,MADAC,MACOnhF,KAAKC,SAGd,QAASkhF,MAEP,MADAC,MACOphF,KAAKC,SAGd,QAASmhF,MAEP,MADAC,MACOrhF,KAAKC,SAGd,QAASohF,MAEP,MADAC,MACOthF,KAAKC,SAGd,QAASqhF,MAEP,MADAC,MACOvhF,KAAKC,SAGd,QAASshF,MAEP,MADAC,MACOxhF,KAAKC,SAGd,QAASuhF,MAEP,MADAC,MACOzhF,KAAKC,SAGd,QAASwhF,MAEP,MADAC,MACO1hF,KAAKC,SAGd,QAASyhF,MAEP,MADAC,MACO3hF,KAAKC,SAGd,QAAS0hF,MAEP,MADAC,MACO5hF,KAAKC,SAGd,QAAS2hF,MAEP,MADAC,MACO7hF,KAAKC,SAGd,QAAS4hF,MAEP,MADAC,MACO9hF,KAAKC,SAGd,QAAS6hF,MAEP,MADAC,MACO/hF,KAAKC,SAGd,QAAS8hF,MAEP,MADAC,MACOhiF,KAAKC,SAGd,QAAS+hF,MAEP,MADAC,MACOjiF,KAAKC,SAGd,QAASgiF,MAEP,MADAC,MACOliF,KAAKC,SAGd,QAASiiF,MAEP,MADAC,MACOniF,KAAKC,SAGd,QAASkiF,MAEP,MADAC,MACOpiF,KAAKC,SAGd,QAASmiF,MAEP,MADAC,MACOriF,KAAKC,SAGd,QAASoiF,MAEP,MADAC,MACOtiF,KAAKC,SAGd,QAASqiF,MAEP,MADAC,MACOviF,KAAKC,SAGd,QAASsiF,MAEP,MADAC,MACOxiF,KAAKC,SAGd,QAASuiF,MAEP,MADAC,MACOziF,KAAKC,SAGd,QAASwiF,MAEP,MADAC,MACO1iF,KAAKC,SAGd,QAASyiF,MAEP,MADAC,MACO3iF,KAAKC,SAGd,QAAS0iF,MAEP,MADAC,MACO5iF,KAAKC,SAGd,QAAS2iF,MAEP,MADAC,MACO7iF,KAAKC,SAGd,QAAS4iF,MAEP,MADAC,MACO9iF,KAAKC,SAId,QAAS6iF,MAEP,MADAC,MACO/iF,KAAKC,SAGd,QAAS8iF,MAEP,MADAC,MACOhjF,KAAKC,SAGd,QAAS+iF,MAEP,MADAC,MACOjjF,KAAKC,SAGd,QAASgjF,MAEP,MADAC,MACOljF,KAAKC,SAGd,QAASijF,MAEP,MADAC,MACOnjF,KAAKC,SAGd,QAASkjF,MAEP,MADAC,MACOpjF,KAAKC,SAGd,QAASmjF,MAEP,MADAC,MACOrjF,KAAKC,SAGd,QAASojF,MAEP,MADAC,MACOtjF,KAAKC,SAGd,QAASqjF,MAEP,MADAC,MACOvjF,KAAKC,SAGd,QAASsjF,MAEP,MADAC,MACOxjF,KAAKC,SAGd,QAASujF,MAEP,MADAC,MACOzjF,KAAKC,SAGd,QAASwjF,MAEP,MADAC,MACO1jF,KAAKC,SAGd,QAASyjF,MAEP,MADAC,MACO3jF,KAAKC,SAGd,QAAS0jF,MAEP,MADAC,MACO5jF,KAAKC,SAGd,QAAS2jF,MAEP,MADAC,MACO7jF,KAAKC,SAGd,QAAS4jF,MAEP,MADAC,MACO9jF,KAAKC,SAGd,QAAS6jF,MAEP,MADAC,MACO/jF,KAAKC,SAGd,QAAS8jF,MAEP,MADAC,MACOhkF,KAAKC,SAGd,QAAS+jF,MAEP,MADAC,MACOjkF,KAAKC,SAGd,QAASgkF,MAEP,MADAC,MACOlkF,KAAKC,SAGd,QAASikF,MAEP,MADAC,MACOnkF,KAAKC,SAGd,QAASkkF,MAEP,MADAC,MACOpkF,KAAKC,SAGd,QAASmkF,MAEP,MADAC,MACOrkF,KAAKC,SAGd,QAASokF,MAEP,MADAC,MACOtkF,KAAKC,SAGd,QAASqkF,MAEP,MADAC,MACOvkF,KAAKC,SAGd,QAASskF,MAEP,MADAC,MACOxkF,KAAKC,SAGd,QAASukF,MAEP,MADAC,MACOzkF,KAAKC,SAGd,QAASwkF,MAEP,MADAC,MACO1kF,KAAKC,SAGd,QAASykF,MAEP,MADAC,MACO3kF,KAAKC,SAGd,QAAS0kF,MAEP,MADAC,MACO5kF,KAAKC,SAGd,QAAS2kF,MAEP,MADAC,MACO7kF,KAAKC,SAGd,QAAS4kF,MAEP,MADAC,MACO9kF,KAAKC,SAGd,QAAS6kF,MAEP,MADAC,MACO/kF,KAAKC,SAGd,QAAS8kF,MAEP,MADAC,MACOhlF,KAAKC,SAGd,QAAS+kF,MAEP,MADAC,MACOjlF,KAAKC,SAGd,QAASglF,MAEP,MADAC,MACOllF,KAAKC,SAGd,QAASilF,MAEP,MADAC,MACOnlF,KAAKC,SAGd,QAASklF,MAEP,MADAC,MACOplF,KAAKC,SAGd,QAASmlF,MAEP,MADAC,MACOrlF,KAAKC,SAGd,QAASolF,MAEP,MADAC,MACOtlF,KAAKC,SAGd,QAASqlF,MAEP,MADAC,MACOvlF,KAAKC,SAGd,QAASslF,MAEP,MADAC,MACOxlF,KAAKC,SAGd,QAASulF,MAEP,MADAC,MACOzlF,KAAKC,SAGd,QAASwlF,MAEP,MADAC,MACO1lF,KAAKC,SAGd,QAASylF,MAEP,MADAC,MACO3lF,KAAKC,SAGd,QAAS0lF,MAEP,MADAC,MACO5lF,KAAKC,SAGd,QAAS2lF,MAEP,MADAC,MACO7lF,KAAKC,SAGd,QAAS4lF,MAEP,MADAC,MACO9lF,KAAKC,SAGd,QAAS6lF,MAEP,MADAC,MACO/lF,KAAKC,SAGd,QAAS8lF,MAEP,MADAC,MACOhmF,KAAKC,SAGd,QAAS+lF,MAEP,MADAC,MACOjmF,KAAKC,SAGd,QAASgmF,MAEP,MADAC,MACOlmF,KAAKC,SAGd,QAASimF,MAEP,MADAC,MACOnmF,KAAKC,SAGd,QAASkmF,MAEP,MADAC,MACOpmF,KAAKC,SAGd,QAASmmF,MAEP,MADAC,MACOrmF,KAAKC,SAGd,QAASomF,MAEP,MADAC,MACOtmF,KAAKC,SAGd,QAASqmF,MAEP,MADAC,MACOvmF,KAAKC,SAGd,QAASsmF,MAEP,MADAC,MACOxmF,KAAKC,SAGd,QAASumF,MAEP,MADAC,MACOzmF,KAAKC,SAGd,QAASwmF,MAEP,MADAC,MACO1mF,KAAKC,SAGd,QAASymF,MAEP,MADAC,MACO3mF,KAAKC,SAGd,QAAS0mF,MAEP,MADAC,MACO5mF,KAAKC,SAGd,QAAS2mF,MAEP,MADAC,MACO7mF,KAAKC,SAGd,QAAS4mF,MAEP,MADAC,MACO9mF,KAAKC,SAGd,QAAS6mF,MAEP,MADAC,MACO/mF,KAAKC,SAGd,QAAS8mF,MAEP,MADAC,MACOhnF,KAAKC,SAGd,QAAS+mF,MAEP,MADAC,MACOjnF,KAAKC,SAGd,QAASgnF,MAEP,MADAC,MACOlnF,KAAKC,SAGd,QAASinF,MAEP,MADAC,MACOnnF,KAAKC,SAGd,QAASknF,MAEP,MADAC,MACOpnF,KAAKC,SAGd,QAASmnF,MAEP,MADAC,MACOrnF,KAAKC,SAGd,QAASonF,MAEP,MADAC,MACOtnF,KAAKC,SAGd,QAASqnF,MAEP,MADAC,MACOvnF,KAAKC,SAGd,QAASsnF,MAEP,MADAC,MACOxnF,KAAKC,SAGd,QAASunF,MAEP,MADAC,MACOznF,KAAKC,SAGd,QAASwnF,MAEP,MADAC,MACO1nF,KAAKC,SAGd,QAASynF,MAEP,MADAC,MACO3nF,KAAKC,SAGd,QAAS0nF,MAEP,MADAC,MACO5nF,KAAKC,SAGd,QAAS2nF,MAEP,MADAC,MACO7nF,KAAKC,SAGd,QAAS4nF,MAEP,MADAC,MACO9nF,KAAKC,SAGd,QAAS6nF,MAEP,MADAC,MACO/nF,KAAKC,SAGd,QAAS8nF,MAEP,MADAC,MACOhoF,KAAKC,SAGd,QAAS+nF,MAEP,MADAC,MACOjoF,KAAKC,SAGd,QAASgoF,MAEP,MADAC,MACOloF,KAAKC,SAGd,QAASioF,MAEP,MADAC,MACOnoF,KAAKC,SAGd,QAASkoF,MAEP,MADAC,MACOpoF,KAAKC,SAGd,QAASmoF,MAEP,MADAC,MACOroF,KAAKC,SAGd,QAASooF,MAEP,MADAC,MACOtoF,KAAKC,SAGd,QAASqoF,MAEP,MADAC,MACOvoF,KAAKC,SAGd,QAASsoF,MAEP,MADAC,MACOxoF,KAAKC,SAGd,QAASuoF,MAEP,MADAC,MACOzoF,KAAKC,SAGd,QAASwoF,MAEP,MADAC,MACO1oF,KAAKC,SAGd,QAASyoF,MAEP,MADAC,MACO3oF,KAAKC,SAGd,QAAS0oF,MAEP,MADAC,MACO5oF,KAAKC,SAGd,QAAS2oF,MAEP,MADAC,MACO7oF,KAAKC,SAGd,QAAS4oF,MAEP,MADAC,MACO9oF,KAAKC,SAGd,QAAS6oF,MAEP,MADAC,MACO/oF,KAAKC,SAGd,QAAS8oF,MAEP,MADAC,MACOhpF,KAAKC,SAGd,QAAS+oF,MAEP,MADAC,MACOjpF,KAAKC,SAGd,QAASgpF,MACP,MAAOjpF,MAAKC,SAGdxvB,EAAA","file":"static/js/main.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"./\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 5);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nif (true) {\n module.exports = __webpack_require__(13);\n} else {\n module.exports = require('./cjs/react.development.js');\n}\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nfunction makeEmptyFunction(arg) {\n return function () {\n return arg;\n };\n}\n\n/**\n * This function accepts and discards inputs; it has no side effects. This is\n * primarily useful idiomatically for overridable function endpoints which\n * always need to be callable, since JS lacks a null-call idiom ala Cocoa.\n */\nvar emptyFunction = function emptyFunction() {};\n\nemptyFunction.thatReturns = makeEmptyFunction;\nemptyFunction.thatReturnsFalse = makeEmptyFunction(false);\nemptyFunction.thatReturnsTrue = makeEmptyFunction(true);\nemptyFunction.thatReturnsNull = makeEmptyFunction(null);\nemptyFunction.thatReturnsThis = function () {\n return this;\n};\nemptyFunction.thatReturnsArgument = function (arg) {\n return arg;\n};\n\nmodule.exports = emptyFunction;\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar asap = __webpack_require__(8);\n\nfunction noop() {}\n\n// States:\n//\n// 0 - pending\n// 1 - fulfilled with _value\n// 2 - rejected with _value\n// 3 - adopted the state of another promise, _value\n//\n// once the state is no longer pending (0) it is immutable\n\n// All `_` prefixed properties will be reduced to `_{random number}`\n// at build time to obfuscate them and discourage their use.\n// We don't use symbols or Object.defineProperty to fully hide them\n// because the performance isn't good enough.\n\n\n// to avoid using try/catch inside critical functions, we\n// extract them to here.\nvar LAST_ERROR = null;\nvar IS_ERROR = {};\nfunction getThen(obj) {\n try {\n return obj.then;\n } catch (ex) {\n LAST_ERROR = ex;\n return IS_ERROR;\n }\n}\n\nfunction tryCallOne(fn, a) {\n try {\n return fn(a);\n } catch (ex) {\n LAST_ERROR = ex;\n return IS_ERROR;\n }\n}\nfunction tryCallTwo(fn, a, b) {\n try {\n fn(a, b);\n } catch (ex) {\n LAST_ERROR = ex;\n return IS_ERROR;\n }\n}\n\nmodule.exports = Promise;\n\nfunction Promise(fn) {\n if (typeof this !== 'object') {\n throw new TypeError('Promises must be constructed via new');\n }\n if (typeof fn !== 'function') {\n throw new TypeError('Promise constructor\\'s argument is not a function');\n }\n this._75 = 0;\n this._83 = 0;\n this._18 = null;\n this._38 = null;\n if (fn === noop) return;\n doResolve(fn, this);\n}\nPromise._47 = null;\nPromise._71 = null;\nPromise._44 = noop;\n\nPromise.prototype.then = function(onFulfilled, onRejected) {\n if (this.constructor !== Promise) {\n return safeThen(this, onFulfilled, onRejected);\n }\n var res = new Promise(noop);\n handle(this, new Handler(onFulfilled, onRejected, res));\n return res;\n};\n\nfunction safeThen(self, onFulfilled, onRejected) {\n return new self.constructor(function (resolve, reject) {\n var res = new Promise(noop);\n res.then(resolve, reject);\n handle(self, new Handler(onFulfilled, onRejected, res));\n });\n}\nfunction handle(self, deferred) {\n while (self._83 === 3) {\n self = self._18;\n }\n if (Promise._47) {\n Promise._47(self);\n }\n if (self._83 === 0) {\n if (self._75 === 0) {\n self._75 = 1;\n self._38 = deferred;\n return;\n }\n if (self._75 === 1) {\n self._75 = 2;\n self._38 = [self._38, deferred];\n return;\n }\n self._38.push(deferred);\n return;\n }\n handleResolved(self, deferred);\n}\n\nfunction handleResolved(self, deferred) {\n asap(function() {\n var cb = self._83 === 1 ? deferred.onFulfilled : deferred.onRejected;\n if (cb === null) {\n if (self._83 === 1) {\n resolve(deferred.promise, self._18);\n } else {\n reject(deferred.promise, self._18);\n }\n return;\n }\n var ret = tryCallOne(cb, self._18);\n if (ret === IS_ERROR) {\n reject(deferred.promise, LAST_ERROR);\n } else {\n resolve(deferred.promise, ret);\n }\n });\n}\nfunction resolve(self, newValue) {\n // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n if (newValue === self) {\n return reject(\n self,\n new TypeError('A promise cannot be resolved with itself.')\n );\n }\n if (\n newValue &&\n (typeof newValue === 'object' || typeof newValue === 'function')\n ) {\n var then = getThen(newValue);\n if (then === IS_ERROR) {\n return reject(self, LAST_ERROR);\n }\n if (\n then === self.then &&\n newValue instanceof Promise\n ) {\n self._83 = 3;\n self._18 = newValue;\n finale(self);\n return;\n } else if (typeof then === 'function') {\n doResolve(then.bind(newValue), self);\n return;\n }\n }\n self._83 = 1;\n self._18 = newValue;\n finale(self);\n}\n\nfunction reject(self, newValue) {\n self._83 = 2;\n self._18 = newValue;\n if (Promise._71) {\n Promise._71(self, newValue);\n }\n finale(self);\n}\nfunction finale(self) {\n if (self._75 === 1) {\n handle(self, self._38);\n self._38 = null;\n }\n if (self._75 === 2) {\n for (var i = 0; i < self._38.length; i++) {\n handle(self, self._38[i]);\n }\n self._38 = null;\n }\n}\n\nfunction Handler(onFulfilled, onRejected, promise){\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.promise = promise;\n}\n\n/**\n * Take a potentially misbehaving resolver function and make sure\n * onFulfilled and onRejected are only called once.\n *\n * Makes no guarantees about asynchrony.\n */\nfunction doResolve(fn, promise) {\n var done = false;\n var res = tryCallTwo(fn, function (value) {\n if (done) return;\n done = true;\n resolve(promise, value);\n }, function (reason) {\n if (done) return;\n done = true;\n reject(promise, reason);\n });\n if (!done && res === IS_ERROR) {\n done = true;\n reject(promise, LAST_ERROR);\n }\n}\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n\n\nvar emptyObject = {};\n\nif (false) {\n Object.freeze(emptyObject);\n}\n\nmodule.exports = emptyObject;\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(6);\nmodule.exports = __webpack_require__(12);\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n// @remove-on-eject-begin\n/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n// @remove-on-eject-end\n\n\nif (typeof Promise === 'undefined') {\n // Rejection tracking prevents a common issue where React gets into an\n // inconsistent state due to an error, but it gets swallowed by a Promise,\n // and the user has no idea what causes React's erratic future behavior.\n __webpack_require__(7).enable();\n window.Promise = __webpack_require__(10);\n}\n\n// fetch() polyfill for making API calls.\n__webpack_require__(11);\n\n// Object.assign() is commonly used with React.\n// It will use the native implementation if it's present and isn't buggy.\nObject.assign = __webpack_require__(0);\n\n// In tests, polyfill requestAnimationFrame since jsdom doesn't provide it yet.\n// We don't polyfill it in the browser--this is user's responsibility.\nif (false) {\n require('raf').polyfill(global);\n}\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar Promise = __webpack_require__(3);\n\nvar DEFAULT_WHITELIST = [\n ReferenceError,\n TypeError,\n RangeError\n];\n\nvar enabled = false;\nexports.disable = disable;\nfunction disable() {\n enabled = false;\n Promise._47 = null;\n Promise._71 = null;\n}\n\nexports.enable = enable;\nfunction enable(options) {\n options = options || {};\n if (enabled) disable();\n enabled = true;\n var id = 0;\n var displayId = 0;\n var rejections = {};\n Promise._47 = function (promise) {\n if (\n promise._83 === 2 && // IS REJECTED\n rejections[promise._56]\n ) {\n if (rejections[promise._56].logged) {\n onHandled(promise._56);\n } else {\n clearTimeout(rejections[promise._56].timeout);\n }\n delete rejections[promise._56];\n }\n };\n Promise._71 = function (promise, err) {\n if (promise._75 === 0) { // not yet handled\n promise._56 = id++;\n rejections[promise._56] = {\n displayId: null,\n error: err,\n timeout: setTimeout(\n onUnhandled.bind(null, promise._56),\n // For reference errors and type errors, this almost always\n // means the programmer made a mistake, so log them after just\n // 100ms\n // otherwise, wait 2 seconds to see if they get handled\n matchWhitelist(err, DEFAULT_WHITELIST)\n ? 100\n : 2000\n ),\n logged: false\n };\n }\n };\n function onUnhandled(id) {\n if (\n options.allRejections ||\n matchWhitelist(\n rejections[id].error,\n options.whitelist || DEFAULT_WHITELIST\n )\n ) {\n rejections[id].displayId = displayId++;\n if (options.onUnhandled) {\n rejections[id].logged = true;\n options.onUnhandled(\n rejections[id].displayId,\n rejections[id].error\n );\n } else {\n rejections[id].logged = true;\n logError(\n rejections[id].displayId,\n rejections[id].error\n );\n }\n }\n }\n function onHandled(id) {\n if (rejections[id].logged) {\n if (options.onHandled) {\n options.onHandled(rejections[id].displayId, rejections[id].error);\n } else if (!rejections[id].onUnhandled) {\n console.warn(\n 'Promise Rejection Handled (id: ' + rejections[id].displayId + '):'\n );\n console.warn(\n ' This means you can ignore any previous messages of the form \"Possible Unhandled Promise Rejection\" with id ' +\n rejections[id].displayId + '.'\n );\n }\n }\n }\n}\n\nfunction logError(id, error) {\n console.warn('Possible Unhandled Promise Rejection (id: ' + id + '):');\n var errStr = (error && (error.stack || error)) + '';\n errStr.split('\\n').forEach(function (line) {\n console.warn(' ' + line);\n });\n}\n\nfunction matchWhitelist(error, list) {\n return list.some(function (cls) {\n return error instanceof cls;\n });\n}\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(global) {\n\n// Use the fastest means possible to execute a task in its own turn, with\n// priority over other events including IO, animation, reflow, and redraw\n// events in browsers.\n//\n// An exception thrown by a task will permanently interrupt the processing of\n// subsequent tasks. The higher level `asap` function ensures that if an\n// exception is thrown by a task, that the task queue will continue flushing as\n// soon as possible, but if you use `rawAsap` directly, you are responsible to\n// either ensure that no exceptions are thrown from your task, or to manually\n// call `rawAsap.requestFlush` if an exception is thrown.\nmodule.exports = rawAsap;\nfunction rawAsap(task) {\n if (!queue.length) {\n requestFlush();\n flushing = true;\n }\n // Equivalent to push, but avoids a function call.\n queue[queue.length] = task;\n}\n\nvar queue = [];\n// Once a flush has been requested, no further calls to `requestFlush` are\n// necessary until the next `flush` completes.\nvar flushing = false;\n// `requestFlush` is an implementation-specific method that attempts to kick\n// off a `flush` event as quickly as possible. `flush` will attempt to exhaust\n// the event queue before yielding to the browser's own event loop.\nvar requestFlush;\n// The position of the next task to execute in the task queue. This is\n// preserved between calls to `flush` so that it can be resumed if\n// a task throws an exception.\nvar index = 0;\n// If a task schedules additional tasks recursively, the task queue can grow\n// unbounded. To prevent memory exhaustion, the task queue will periodically\n// truncate already-completed tasks.\nvar capacity = 1024;\n\n// The flush function processes all tasks that have been scheduled with\n// `rawAsap` unless and until one of those tasks throws an exception.\n// If a task throws an exception, `flush` ensures that its state will remain\n// consistent and will resume where it left off when called again.\n// However, `flush` does not make any arrangements to be called again if an\n// exception is thrown.\nfunction flush() {\n while (index < queue.length) {\n var currentIndex = index;\n // Advance the index before calling the task. This ensures that we will\n // begin flushing on the next task the task throws an error.\n index = index + 1;\n queue[currentIndex].call();\n // Prevent leaking memory for long chains of recursive calls to `asap`.\n // If we call `asap` within tasks scheduled by `asap`, the queue will\n // grow, but to avoid an O(n) walk for every task we execute, we don't\n // shift tasks off the queue after they have been executed.\n // Instead, we periodically shift 1024 tasks off the queue.\n if (index > capacity) {\n // Manually shift all values starting at the index back to the\n // beginning of the queue.\n for (var scan = 0, newLength = queue.length - index; scan < newLength; scan++) {\n queue[scan] = queue[scan + index];\n }\n queue.length -= index;\n index = 0;\n }\n }\n queue.length = 0;\n index = 0;\n flushing = false;\n}\n\n// `requestFlush` is implemented using a strategy based on data collected from\n// every available SauceLabs Selenium web driver worker at time of writing.\n// https://docs.google.com/spreadsheets/d/1mG-5UYGup5qxGdEMWkhP6BWCz053NUb2E1QoUTU16uA/edit#gid=783724593\n\n// Safari 6 and 6.1 for desktop, iPad, and iPhone are the only browsers that\n// have WebKitMutationObserver but not un-prefixed MutationObserver.\n// Must use `global` or `self` instead of `window` to work in both frames and web\n// workers. `global` is a provision of Browserify, Mr, Mrs, or Mop.\n\n/* globals self */\nvar scope = typeof global !== \"undefined\" ? global : self;\nvar BrowserMutationObserver = scope.MutationObserver || scope.WebKitMutationObserver;\n\n// MutationObservers are desirable because they have high priority and work\n// reliably everywhere they are implemented.\n// They are implemented in all modern browsers.\n//\n// - Android 4-4.3\n// - Chrome 26-34\n// - Firefox 14-29\n// - Internet Explorer 11\n// - iPad Safari 6-7.1\n// - iPhone Safari 7-7.1\n// - Safari 6-7\nif (typeof BrowserMutationObserver === \"function\") {\n requestFlush = makeRequestCallFromMutationObserver(flush);\n\n// MessageChannels are desirable because they give direct access to the HTML\n// task queue, are implemented in Internet Explorer 10, Safari 5.0-1, and Opera\n// 11-12, and in web workers in many engines.\n// Although message channels yield to any queued rendering and IO tasks, they\n// would be better than imposing the 4ms delay of timers.\n// However, they do not work reliably in Internet Explorer or Safari.\n\n// Internet Explorer 10 is the only browser that has setImmediate but does\n// not have MutationObservers.\n// Although setImmediate yields to the browser's renderer, it would be\n// preferrable to falling back to setTimeout since it does not have\n// the minimum 4ms penalty.\n// Unfortunately there appears to be a bug in Internet Explorer 10 Mobile (and\n// Desktop to a lesser extent) that renders both setImmediate and\n// MessageChannel useless for the purposes of ASAP.\n// https://github.com/kriskowal/q/issues/396\n\n// Timers are implemented universally.\n// We fall back to timers in workers in most engines, and in foreground\n// contexts in the following browsers.\n// However, note that even this simple case requires nuances to operate in a\n// broad spectrum of browsers.\n//\n// - Firefox 3-13\n// - Internet Explorer 6-9\n// - iPad Safari 4.3\n// - Lynx 2.8.7\n} else {\n requestFlush = makeRequestCallFromTimer(flush);\n}\n\n// `requestFlush` requests that the high priority event queue be flushed as\n// soon as possible.\n// This is useful to prevent an error thrown in a task from stalling the event\n// queue if the exception handled by Node.js’s\n// `process.on(\"uncaughtException\")` or by a domain.\nrawAsap.requestFlush = requestFlush;\n\n// To request a high priority event, we induce a mutation observer by toggling\n// the text of a text node between \"1\" and \"-1\".\nfunction makeRequestCallFromMutationObserver(callback) {\n var toggle = 1;\n var observer = new BrowserMutationObserver(callback);\n var node = document.createTextNode(\"\");\n observer.observe(node, {characterData: true});\n return function requestCall() {\n toggle = -toggle;\n node.data = toggle;\n };\n}\n\n// The message channel technique was discovered by Malte Ubl and was the\n// original foundation for this library.\n// http://www.nonblocking.io/2011/06/windownexttick.html\n\n// Safari 6.0.5 (at least) intermittently fails to create message ports on a\n// page's first load. Thankfully, this version of Safari supports\n// MutationObservers, so we don't need to fall back in that case.\n\n// function makeRequestCallFromMessageChannel(callback) {\n// var channel = new MessageChannel();\n// channel.port1.onmessage = callback;\n// return function requestCall() {\n// channel.port2.postMessage(0);\n// };\n// }\n\n// For reasons explained above, we are also unable to use `setImmediate`\n// under any circumstances.\n// Even if we were, there is another bug in Internet Explorer 10.\n// It is not sufficient to assign `setImmediate` to `requestFlush` because\n// `setImmediate` must be called *by name* and therefore must be wrapped in a\n// closure.\n// Never forget.\n\n// function makeRequestCallFromSetImmediate(callback) {\n// return function requestCall() {\n// setImmediate(callback);\n// };\n// }\n\n// Safari 6.0 has a problem where timers will get lost while the user is\n// scrolling. This problem does not impact ASAP because Safari 6.0 supports\n// mutation observers, so that implementation is used instead.\n// However, if we ever elect to use timers in Safari, the prevalent work-around\n// is to add a scroll event listener that calls for a flush.\n\n// `setTimeout` does not call the passed callback if the delay is less than\n// approximately 7 in web workers in Firefox 8 through 18, and sometimes not\n// even then.\n\nfunction makeRequestCallFromTimer(callback) {\n return function requestCall() {\n // We dispatch a timeout with a specified delay of 0 for engines that\n // can reliably accommodate that request. This will usually be snapped\n // to a 4 milisecond delay, but once we're flushing, there's no delay\n // between events.\n var timeoutHandle = setTimeout(handleTimer, 0);\n // However, since this timer gets frequently dropped in Firefox\n // workers, we enlist an interval handle that will try to fire\n // an event 20 times per second until it succeeds.\n var intervalHandle = setInterval(handleTimer, 50);\n\n function handleTimer() {\n // Whichever timer succeeds will cancel both timers and\n // execute the callback.\n clearTimeout(timeoutHandle);\n clearInterval(intervalHandle);\n callback();\n }\n };\n}\n\n// This is for `asap.js` only.\n// Its name will be periodically randomized to break any code that depends on\n// its existence.\nrawAsap.makeRequestCallFromTimer = makeRequestCallFromTimer;\n\n// ASAP was originally a nextTick shim included in Q. This was factored out\n// into this ASAP package. It was later adapted to RSVP which made further\n// amendments. These decisions, particularly to marginalize MessageChannel and\n// to capture the MutationObserver implementation in a closure, were integrated\n// back into ASAP proper.\n// https://github.com/tildeio/rsvp.js/blob/cddf7232546a9cf858524b75cde6f9edf72620a7/lib/rsvp/asap.js\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(9)))\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports) {\n\nvar g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\n} catch(e) {\n\t// This works if the window reference is available\n\tif(typeof window === \"object\")\n\t\tg = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n//This file contains the ES6 extensions to the core Promises/A+ API\n\nvar Promise = __webpack_require__(3);\n\nmodule.exports = Promise;\n\n/* Static Functions */\n\nvar TRUE = valuePromise(true);\nvar FALSE = valuePromise(false);\nvar NULL = valuePromise(null);\nvar UNDEFINED = valuePromise(undefined);\nvar ZERO = valuePromise(0);\nvar EMPTYSTRING = valuePromise('');\n\nfunction valuePromise(value) {\n var p = new Promise(Promise._44);\n p._83 = 1;\n p._18 = value;\n return p;\n}\nPromise.resolve = function (value) {\n if (value instanceof Promise) return value;\n\n if (value === null) return NULL;\n if (value === undefined) return UNDEFINED;\n if (value === true) return TRUE;\n if (value === false) return FALSE;\n if (value === 0) return ZERO;\n if (value === '') return EMPTYSTRING;\n\n if (typeof value === 'object' || typeof value === 'function') {\n try {\n var then = value.then;\n if (typeof then === 'function') {\n return new Promise(then.bind(value));\n }\n } catch (ex) {\n return new Promise(function (resolve, reject) {\n reject(ex);\n });\n }\n }\n return valuePromise(value);\n};\n\nPromise.all = function (arr) {\n var args = Array.prototype.slice.call(arr);\n\n return new Promise(function (resolve, reject) {\n if (args.length === 0) return resolve([]);\n var remaining = args.length;\n function res(i, val) {\n if (val && (typeof val === 'object' || typeof val === 'function')) {\n if (val instanceof Promise && val.then === Promise.prototype.then) {\n while (val._83 === 3) {\n val = val._18;\n }\n if (val._83 === 1) return res(i, val._18);\n if (val._83 === 2) reject(val._18);\n val.then(function (val) {\n res(i, val);\n }, reject);\n return;\n } else {\n var then = val.then;\n if (typeof then === 'function') {\n var p = new Promise(then.bind(val));\n p.then(function (val) {\n res(i, val);\n }, reject);\n return;\n }\n }\n }\n args[i] = val;\n if (--remaining === 0) {\n resolve(args);\n }\n }\n for (var i = 0; i < args.length; i++) {\n res(i, args[i]);\n }\n });\n};\n\nPromise.reject = function (value) {\n return new Promise(function (resolve, reject) {\n reject(value);\n });\n};\n\nPromise.race = function (values) {\n return new Promise(function (resolve, reject) {\n values.forEach(function(value){\n Promise.resolve(value).then(resolve, reject);\n });\n });\n};\n\n/* Prototype Methods */\n\nPromise.prototype['catch'] = function (onRejected) {\n return this.then(null, onRejected);\n};\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports) {\n\n(function(self) {\n 'use strict';\n\n if (self.fetch) {\n return\n }\n\n var support = {\n searchParams: 'URLSearchParams' in self,\n iterable: 'Symbol' in self && 'iterator' in Symbol,\n blob: 'FileReader' in self && 'Blob' in self && (function() {\n try {\n new Blob()\n return true\n } catch(e) {\n return false\n }\n })(),\n formData: 'FormData' in self,\n arrayBuffer: 'ArrayBuffer' in self\n }\n\n if (support.arrayBuffer) {\n var viewClasses = [\n '[object Int8Array]',\n '[object Uint8Array]',\n '[object Uint8ClampedArray]',\n '[object Int16Array]',\n '[object Uint16Array]',\n '[object Int32Array]',\n '[object Uint32Array]',\n '[object Float32Array]',\n '[object Float64Array]'\n ]\n\n var isDataView = function(obj) {\n return obj && DataView.prototype.isPrototypeOf(obj)\n }\n\n var isArrayBufferView = ArrayBuffer.isView || function(obj) {\n return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n }\n }\n\n function normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name)\n }\n if (/[^a-z0-9\\-#$%&'*+.\\^_`|~]/i.test(name)) {\n throw new TypeError('Invalid character in header field name')\n }\n return name.toLowerCase()\n }\n\n function normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value)\n }\n return value\n }\n\n // Build a destructive iterator for the value list\n function iteratorFor(items) {\n var iterator = {\n next: function() {\n var value = items.shift()\n return {done: value === undefined, value: value}\n }\n }\n\n if (support.iterable) {\n iterator[Symbol.iterator] = function() {\n return iterator\n }\n }\n\n return iterator\n }\n\n function Headers(headers) {\n this.map = {}\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value)\n }, this)\n } else if (Array.isArray(headers)) {\n headers.forEach(function(header) {\n this.append(header[0], header[1])\n }, this)\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name])\n }, this)\n }\n }\n\n Headers.prototype.append = function(name, value) {\n name = normalizeName(name)\n value = normalizeValue(value)\n var oldValue = this.map[name]\n this.map[name] = oldValue ? oldValue+','+value : value\n }\n\n Headers.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)]\n }\n\n Headers.prototype.get = function(name) {\n name = normalizeName(name)\n return this.has(name) ? this.map[name] : null\n }\n\n Headers.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n }\n\n Headers.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = normalizeValue(value)\n }\n\n Headers.prototype.forEach = function(callback, thisArg) {\n for (var name in this.map) {\n if (this.map.hasOwnProperty(name)) {\n callback.call(thisArg, this.map[name], name, this)\n }\n }\n }\n\n Headers.prototype.keys = function() {\n var items = []\n this.forEach(function(value, name) { items.push(name) })\n return iteratorFor(items)\n }\n\n Headers.prototype.values = function() {\n var items = []\n this.forEach(function(value) { items.push(value) })\n return iteratorFor(items)\n }\n\n Headers.prototype.entries = function() {\n var items = []\n this.forEach(function(value, name) { items.push([name, value]) })\n return iteratorFor(items)\n }\n\n if (support.iterable) {\n Headers.prototype[Symbol.iterator] = Headers.prototype.entries\n }\n\n function consumed(body) {\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true\n }\n\n function fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result)\n }\n reader.onerror = function() {\n reject(reader.error)\n }\n })\n }\n\n function readBlobAsArrayBuffer(blob) {\n var reader = new FileReader()\n var promise = fileReaderReady(reader)\n reader.readAsArrayBuffer(blob)\n return promise\n }\n\n function readBlobAsText(blob) {\n var reader = new FileReader()\n var promise = fileReaderReady(reader)\n reader.readAsText(blob)\n return promise\n }\n\n function readArrayBufferAsText(buf) {\n var view = new Uint8Array(buf)\n var chars = new Array(view.length)\n\n for (var i = 0; i < view.length; i++) {\n chars[i] = String.fromCharCode(view[i])\n }\n return chars.join('')\n }\n\n function bufferClone(buf) {\n if (buf.slice) {\n return buf.slice(0)\n } else {\n var view = new Uint8Array(buf.byteLength)\n view.set(new Uint8Array(buf))\n return view.buffer\n }\n }\n\n function Body() {\n this.bodyUsed = false\n\n this._initBody = function(body) {\n this._bodyInit = body\n if (!body) {\n this._bodyText = ''\n } else if (typeof body === 'string') {\n this._bodyText = body\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this._bodyText = body.toString()\n } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n this._bodyArrayBuffer = bufferClone(body.buffer)\n // IE 10-11 can't handle a DataView body.\n this._bodyInit = new Blob([this._bodyArrayBuffer])\n } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n this._bodyArrayBuffer = bufferClone(body)\n } else {\n throw new Error('unsupported BodyInit type')\n }\n\n if (!this.headers.get('content-type')) {\n if (typeof body === 'string') {\n this.headers.set('content-type', 'text/plain;charset=UTF-8')\n } else if (this._bodyBlob && this._bodyBlob.type) {\n this.headers.set('content-type', this._bodyBlob.type)\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8')\n }\n }\n }\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n }\n\n this.arrayBuffer = function() {\n if (this._bodyArrayBuffer) {\n return consumed(this) || Promise.resolve(this._bodyArrayBuffer)\n } else {\n return this.blob().then(readBlobAsArrayBuffer)\n }\n }\n }\n\n this.text = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n }\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n }\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n }\n\n return this\n }\n\n // HTTP methods whose capitalization should be normalized\n var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']\n\n function normalizeMethod(method) {\n var upcased = method.toUpperCase()\n return (methods.indexOf(upcased) > -1) ? upcased : method\n }\n\n function Request(input, options) {\n options = options || {}\n var body = options.body\n\n if (input instanceof Request) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url\n this.credentials = input.credentials\n if (!options.headers) {\n this.headers = new Headers(input.headers)\n }\n this.method = input.method\n this.mode = input.mode\n if (!body && input._bodyInit != null) {\n body = input._bodyInit\n input.bodyUsed = true\n }\n } else {\n this.url = String(input)\n }\n\n this.credentials = options.credentials || this.credentials || 'omit'\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers)\n }\n this.method = normalizeMethod(options.method || this.method || 'GET')\n this.mode = options.mode || this.mode || null\n this.referrer = null\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body)\n }\n\n Request.prototype.clone = function() {\n return new Request(this, { body: this._bodyInit })\n }\n\n function decode(body) {\n var form = new FormData()\n body.trim().split('&').forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=')\n var name = split.shift().replace(/\\+/g, ' ')\n var value = split.join('=').replace(/\\+/g, ' ')\n form.append(decodeURIComponent(name), decodeURIComponent(value))\n }\n })\n return form\n }\n\n function parseHeaders(rawHeaders) {\n var headers = new Headers()\n rawHeaders.split(/\\r?\\n/).forEach(function(line) {\n var parts = line.split(':')\n var key = parts.shift().trim()\n if (key) {\n var value = parts.join(':').trim()\n headers.append(key, value)\n }\n })\n return headers\n }\n\n Body.call(Request.prototype)\n\n function Response(bodyInit, options) {\n if (!options) {\n options = {}\n }\n\n this.type = 'default'\n this.status = 'status' in options ? options.status : 200\n this.ok = this.status >= 200 && this.status < 300\n this.statusText = 'statusText' in options ? options.statusText : 'OK'\n this.headers = new Headers(options.headers)\n this.url = options.url || ''\n this._initBody(bodyInit)\n }\n\n Body.call(Response.prototype)\n\n Response.prototype.clone = function() {\n return new Response(this._bodyInit, {\n status: this.status,\n statusText: this.statusText,\n headers: new Headers(this.headers),\n url: this.url\n })\n }\n\n Response.error = function() {\n var response = new Response(null, {status: 0, statusText: ''})\n response.type = 'error'\n return response\n }\n\n var redirectStatuses = [301, 302, 303, 307, 308]\n\n Response.redirect = function(url, status) {\n if (redirectStatuses.indexOf(status) === -1) {\n throw new RangeError('Invalid status code')\n }\n\n return new Response(null, {status: status, headers: {location: url}})\n }\n\n self.Headers = Headers\n self.Request = Request\n self.Response = Response\n\n self.fetch = function(input, init) {\n return new Promise(function(resolve, reject) {\n var request = new Request(input, init)\n var xhr = new XMLHttpRequest()\n\n xhr.onload = function() {\n var options = {\n status: xhr.status,\n statusText: xhr.statusText,\n headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n }\n options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL')\n var body = 'response' in xhr ? xhr.response : xhr.responseText\n resolve(new Response(body, options))\n }\n\n xhr.onerror = function() {\n reject(new TypeError('Network request failed'))\n }\n\n xhr.ontimeout = function() {\n reject(new TypeError('Network request failed'))\n }\n\n xhr.open(request.method, request.url, true)\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true\n }\n\n if ('responseType' in xhr && support.blob) {\n xhr.responseType = 'blob'\n }\n\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value)\n })\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)\n })\n }\n self.fetch.polyfill = true\n})(typeof self !== 'undefined' ? self : this);\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react_dom__ = __webpack_require__(14);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_react_dom___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react_dom__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__App__ = __webpack_require__(24);\n__WEBPACK_IMPORTED_MODULE_1_react_dom___default.a.render(__WEBPACK_IMPORTED_MODULE_0_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_2__App__[\"a\" /* default */],null),document.getElementById('root'));\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/** @license React v16.2.0\n * react.production.min.js\n *\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar m=__webpack_require__(0),n=__webpack_require__(4),p=__webpack_require__(2),q=\"function\"===typeof Symbol&&Symbol[\"for\"],r=q?Symbol[\"for\"](\"react.element\"):60103,t=q?Symbol[\"for\"](\"react.call\"):60104,u=q?Symbol[\"for\"](\"react.return\"):60105,v=q?Symbol[\"for\"](\"react.portal\"):60106,w=q?Symbol[\"for\"](\"react.fragment\"):60107,x=\"function\"===typeof Symbol&&Symbol.iterator;\nfunction y(a){for(var b=arguments.length-1,e=\"Minified React error #\"+a+\"; visit http://facebook.github.io/react/docs/error-decoder.html?invariant\\x3d\"+a,c=0;c<b;c++)e+=\"\\x26args[]\\x3d\"+encodeURIComponent(arguments[c+1]);b=Error(e+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\");b.name=\"Invariant Violation\";b.framesToPop=1;throw b;}\nvar z={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}};function A(a,b,e){this.props=a;this.context=b;this.refs=n;this.updater=e||z}A.prototype.isReactComponent={};A.prototype.setState=function(a,b){\"object\"!==typeof a&&\"function\"!==typeof a&&null!=a?y(\"85\"):void 0;this.updater.enqueueSetState(this,a,b,\"setState\")};A.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,\"forceUpdate\")};\nfunction B(a,b,e){this.props=a;this.context=b;this.refs=n;this.updater=e||z}function C(){}C.prototype=A.prototype;var D=B.prototype=new C;D.constructor=B;m(D,A.prototype);D.isPureReactComponent=!0;function E(a,b,e){this.props=a;this.context=b;this.refs=n;this.updater=e||z}var F=E.prototype=new C;F.constructor=E;m(F,A.prototype);F.unstable_isAsyncReactComponent=!0;F.render=function(){return this.props.children};var G={current:null},H=Object.prototype.hasOwnProperty,I={key:!0,ref:!0,__self:!0,__source:!0};\nfunction J(a,b,e){var c,d={},g=null,k=null;if(null!=b)for(c in void 0!==b.ref&&(k=b.ref),void 0!==b.key&&(g=\"\"+b.key),b)H.call(b,c)&&!I.hasOwnProperty(c)&&(d[c]=b[c]);var f=arguments.length-2;if(1===f)d.children=e;else if(1<f){for(var h=Array(f),l=0;l<f;l++)h[l]=arguments[l+2];d.children=h}if(a&&a.defaultProps)for(c in f=a.defaultProps,f)void 0===d[c]&&(d[c]=f[c]);return{$$typeof:r,type:a,key:g,ref:k,props:d,_owner:G.current}}function K(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===r}\nfunction escape(a){var b={\"\\x3d\":\"\\x3d0\",\":\":\"\\x3d2\"};return\"$\"+(\"\"+a).replace(/[=:]/g,function(a){return b[a]})}var L=/\\/+/g,M=[];function N(a,b,e,c){if(M.length){var d=M.pop();d.result=a;d.keyPrefix=b;d.func=e;d.context=c;d.count=0;return d}return{result:a,keyPrefix:b,func:e,context:c,count:0}}function O(a){a.result=null;a.keyPrefix=null;a.func=null;a.context=null;a.count=0;10>M.length&&M.push(a)}\nfunction P(a,b,e,c){var d=typeof a;if(\"undefined\"===d||\"boolean\"===d)a=null;var g=!1;if(null===a)g=!0;else switch(d){case \"string\":case \"number\":g=!0;break;case \"object\":switch(a.$$typeof){case r:case t:case u:case v:g=!0}}if(g)return e(c,a,\"\"===b?\".\"+Q(a,0):b),1;g=0;b=\"\"===b?\".\":b+\":\";if(Array.isArray(a))for(var k=0;k<a.length;k++){d=a[k];var f=b+Q(d,k);g+=P(d,f,e,c)}else if(null===a||\"undefined\"===typeof a?f=null:(f=x&&a[x]||a[\"@@iterator\"],f=\"function\"===typeof f?f:null),\"function\"===typeof f)for(a=\nf.call(a),k=0;!(d=a.next()).done;)d=d.value,f=b+Q(d,k++),g+=P(d,f,e,c);else\"object\"===d&&(e=\"\"+a,y(\"31\",\"[object Object]\"===e?\"object with keys {\"+Object.keys(a).join(\", \")+\"}\":e,\"\"));return g}function Q(a,b){return\"object\"===typeof a&&null!==a&&null!=a.key?escape(a.key):b.toString(36)}function R(a,b){a.func.call(a.context,b,a.count++)}\nfunction S(a,b,e){var c=a.result,d=a.keyPrefix;a=a.func.call(a.context,b,a.count++);Array.isArray(a)?T(a,c,e,p.thatReturnsArgument):null!=a&&(K(a)&&(b=d+(!a.key||b&&b.key===a.key?\"\":(\"\"+a.key).replace(L,\"$\\x26/\")+\"/\")+e,a={$$typeof:r,type:a.type,key:b,ref:a.ref,props:a.props,_owner:a._owner}),c.push(a))}function T(a,b,e,c,d){var g=\"\";null!=e&&(g=(\"\"+e).replace(L,\"$\\x26/\")+\"/\");b=N(b,g,c,d);null==a||P(a,\"\",S,b);O(b)}\nvar U={Children:{map:function(a,b,e){if(null==a)return a;var c=[];T(a,c,null,b,e);return c},forEach:function(a,b,e){if(null==a)return a;b=N(null,null,b,e);null==a||P(a,\"\",R,b);O(b)},count:function(a){return null==a?0:P(a,\"\",p.thatReturnsNull,null)},toArray:function(a){var b=[];T(a,b,null,p.thatReturnsArgument);return b},only:function(a){K(a)?void 0:y(\"143\");return a}},Component:A,PureComponent:B,unstable_AsyncComponent:E,Fragment:w,createElement:J,cloneElement:function(a,b,e){var c=m({},a.props),\nd=a.key,g=a.ref,k=a._owner;if(null!=b){void 0!==b.ref&&(g=b.ref,k=G.current);void 0!==b.key&&(d=\"\"+b.key);if(a.type&&a.type.defaultProps)var f=a.type.defaultProps;for(h in b)H.call(b,h)&&!I.hasOwnProperty(h)&&(c[h]=void 0===b[h]&&void 0!==f?f[h]:b[h])}var h=arguments.length-2;if(1===h)c.children=e;else if(1<h){f=Array(h);for(var l=0;l<h;l++)f[l]=arguments[l+2];c.children=f}return{$$typeof:r,type:a.type,key:d,ref:g,props:c,_owner:k}},createFactory:function(a){var b=J.bind(null,a);b.type=a;return b},\nisValidElement:K,version:\"16.2.0\",__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:{ReactCurrentOwner:G,assign:m}},V=Object.freeze({default:U}),W=V&&U||V;module.exports=W[\"default\"]?W[\"default\"]:W;\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n ) {\n return;\n }\n if (false) {\n // This branch is unreachable because this function is only called\n // in production, but the condition is true only in development.\n // Therefore if the branch is still here, dead code elimination wasn't\n // properly applied.\n // Don't change the message. React DevTools relies on it. Also make sure\n // this message doesn't occur elsewhere in this function, or it will cause\n // a false positive.\n throw new Error('^_^');\n }\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (true) {\n // DCE check should happen before ReactDOM bundle executes so that\n // DevTools can report bad minification during injection.\n checkDCE();\n module.exports = __webpack_require__(15);\n} else {\n module.exports = require('./cjs/react-dom.development.js');\n}\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/** @license React v16.2.0\n * react-dom.production.min.js\n *\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\nvar aa=__webpack_require__(1),l=__webpack_require__(16),B=__webpack_require__(0),C=__webpack_require__(2),ba=__webpack_require__(17),da=__webpack_require__(18),ea=__webpack_require__(19),fa=__webpack_require__(20),ia=__webpack_require__(23),D=__webpack_require__(4);\nfunction E(a){for(var b=arguments.length-1,c=\"Minified React error #\"+a+\"; visit http://facebook.github.io/react/docs/error-decoder.html?invariant\\x3d\"+a,d=0;d<b;d++)c+=\"\\x26args[]\\x3d\"+encodeURIComponent(arguments[d+1]);b=Error(c+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\");b.name=\"Invariant Violation\";b.framesToPop=1;throw b;}aa?void 0:E(\"227\");\nvar oa={children:!0,dangerouslySetInnerHTML:!0,defaultValue:!0,defaultChecked:!0,innerHTML:!0,suppressContentEditableWarning:!0,suppressHydrationWarning:!0,style:!0};function pa(a,b){return(a&b)===b}\nvar ta={MUST_USE_PROPERTY:1,HAS_BOOLEAN_VALUE:4,HAS_NUMERIC_VALUE:8,HAS_POSITIVE_NUMERIC_VALUE:24,HAS_OVERLOADED_BOOLEAN_VALUE:32,HAS_STRING_BOOLEAN_VALUE:64,injectDOMPropertyConfig:function(a){var b=ta,c=a.Properties||{},d=a.DOMAttributeNamespaces||{},e=a.DOMAttributeNames||{};a=a.DOMMutationMethods||{};for(var f in c){ua.hasOwnProperty(f)?E(\"48\",f):void 0;var g=f.toLowerCase(),h=c[f];g={attributeName:g,attributeNamespace:null,propertyName:f,mutationMethod:null,mustUseProperty:pa(h,b.MUST_USE_PROPERTY),\nhasBooleanValue:pa(h,b.HAS_BOOLEAN_VALUE),hasNumericValue:pa(h,b.HAS_NUMERIC_VALUE),hasPositiveNumericValue:pa(h,b.HAS_POSITIVE_NUMERIC_VALUE),hasOverloadedBooleanValue:pa(h,b.HAS_OVERLOADED_BOOLEAN_VALUE),hasStringBooleanValue:pa(h,b.HAS_STRING_BOOLEAN_VALUE)};1>=g.hasBooleanValue+g.hasNumericValue+g.hasOverloadedBooleanValue?void 0:E(\"50\",f);e.hasOwnProperty(f)&&(g.attributeName=e[f]);d.hasOwnProperty(f)&&(g.attributeNamespace=d[f]);a.hasOwnProperty(f)&&(g.mutationMethod=a[f]);ua[f]=g}}},ua={};\nfunction va(a,b){if(oa.hasOwnProperty(a)||2<a.length&&(\"o\"===a[0]||\"O\"===a[0])&&(\"n\"===a[1]||\"N\"===a[1]))return!1;if(null===b)return!0;switch(typeof b){case \"boolean\":return oa.hasOwnProperty(a)?a=!0:(b=wa(a))?a=b.hasBooleanValue||b.hasStringBooleanValue||b.hasOverloadedBooleanValue:(a=a.toLowerCase().slice(0,5),a=\"data-\"===a||\"aria-\"===a),a;case \"undefined\":case \"number\":case \"string\":case \"object\":return!0;default:return!1}}function wa(a){return ua.hasOwnProperty(a)?ua[a]:null}\nvar xa=ta,ya=xa.MUST_USE_PROPERTY,K=xa.HAS_BOOLEAN_VALUE,za=xa.HAS_NUMERIC_VALUE,Aa=xa.HAS_POSITIVE_NUMERIC_VALUE,Ba=xa.HAS_OVERLOADED_BOOLEAN_VALUE,Ca=xa.HAS_STRING_BOOLEAN_VALUE,Da={Properties:{allowFullScreen:K,async:K,autoFocus:K,autoPlay:K,capture:Ba,checked:ya|K,cols:Aa,contentEditable:Ca,controls:K,\"default\":K,defer:K,disabled:K,download:Ba,draggable:Ca,formNoValidate:K,hidden:K,loop:K,multiple:ya|K,muted:ya|K,noValidate:K,open:K,playsInline:K,readOnly:K,required:K,reversed:K,rows:Aa,rowSpan:za,\nscoped:K,seamless:K,selected:ya|K,size:Aa,start:za,span:Aa,spellCheck:Ca,style:0,tabIndex:0,itemScope:K,acceptCharset:0,className:0,htmlFor:0,httpEquiv:0,value:Ca},DOMAttributeNames:{acceptCharset:\"accept-charset\",className:\"class\",htmlFor:\"for\",httpEquiv:\"http-equiv\"},DOMMutationMethods:{value:function(a,b){if(null==b)return a.removeAttribute(\"value\");\"number\"!==a.type||!1===a.hasAttribute(\"value\")?a.setAttribute(\"value\",\"\"+b):a.validity&&!a.validity.badInput&&a.ownerDocument.activeElement!==a&&\na.setAttribute(\"value\",\"\"+b)}}},Ea=xa.HAS_STRING_BOOLEAN_VALUE,M={xlink:\"http://www.w3.org/1999/xlink\",xml:\"http://www.w3.org/XML/1998/namespace\"},Ga={Properties:{autoReverse:Ea,externalResourcesRequired:Ea,preserveAlpha:Ea},DOMAttributeNames:{autoReverse:\"autoReverse\",externalResourcesRequired:\"externalResourcesRequired\",preserveAlpha:\"preserveAlpha\"},DOMAttributeNamespaces:{xlinkActuate:M.xlink,xlinkArcrole:M.xlink,xlinkHref:M.xlink,xlinkRole:M.xlink,xlinkShow:M.xlink,xlinkTitle:M.xlink,xlinkType:M.xlink,\nxmlBase:M.xml,xmlLang:M.xml,xmlSpace:M.xml}},Ha=/[\\-\\:]([a-z])/g;function Ia(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode x-height xlink:actuate xlink:arcrole xlink:href xlink:role xlink:show xlink:title xlink:type xml:base xmlns:xlink xml:lang xml:space\".split(\" \").forEach(function(a){var b=a.replace(Ha,\nIa);Ga.Properties[b]=0;Ga.DOMAttributeNames[b]=a});xa.injectDOMPropertyConfig(Da);xa.injectDOMPropertyConfig(Ga);\nvar P={_caughtError:null,_hasCaughtError:!1,_rethrowError:null,_hasRethrowError:!1,injection:{injectErrorUtils:function(a){\"function\"!==typeof a.invokeGuardedCallback?E(\"197\"):void 0;Ja=a.invokeGuardedCallback}},invokeGuardedCallback:function(a,b,c,d,e,f,g,h,k){Ja.apply(P,arguments)},invokeGuardedCallbackAndCatchFirstError:function(a,b,c,d,e,f,g,h,k){P.invokeGuardedCallback.apply(this,arguments);if(P.hasCaughtError()){var q=P.clearCaughtError();P._hasRethrowError||(P._hasRethrowError=!0,P._rethrowError=\nq)}},rethrowCaughtError:function(){return Ka.apply(P,arguments)},hasCaughtError:function(){return P._hasCaughtError},clearCaughtError:function(){if(P._hasCaughtError){var a=P._caughtError;P._caughtError=null;P._hasCaughtError=!1;return a}E(\"198\")}};function Ja(a,b,c,d,e,f,g,h,k){P._hasCaughtError=!1;P._caughtError=null;var q=Array.prototype.slice.call(arguments,3);try{b.apply(c,q)}catch(v){P._caughtError=v,P._hasCaughtError=!0}}\nfunction Ka(){if(P._hasRethrowError){var a=P._rethrowError;P._rethrowError=null;P._hasRethrowError=!1;throw a;}}var La=null,Ma={};\nfunction Na(){if(La)for(var a in Ma){var b=Ma[a],c=La.indexOf(a);-1<c?void 0:E(\"96\",a);if(!Oa[c]){b.extractEvents?void 0:E(\"97\",a);Oa[c]=b;c=b.eventTypes;for(var d in c){var e=void 0;var f=c[d],g=b,h=d;Pa.hasOwnProperty(h)?E(\"99\",h):void 0;Pa[h]=f;var k=f.phasedRegistrationNames;if(k){for(e in k)k.hasOwnProperty(e)&&Qa(k[e],g,h);e=!0}else f.registrationName?(Qa(f.registrationName,g,h),e=!0):e=!1;e?void 0:E(\"98\",d,a)}}}}\nfunction Qa(a,b,c){Ra[a]?E(\"100\",a):void 0;Ra[a]=b;Sa[a]=b.eventTypes[c].dependencies}var Oa=[],Pa={},Ra={},Sa={};function Ta(a){La?E(\"101\"):void 0;La=Array.prototype.slice.call(a);Na()}function Ua(a){var b=!1,c;for(c in a)if(a.hasOwnProperty(c)){var d=a[c];Ma.hasOwnProperty(c)&&Ma[c]===d||(Ma[c]?E(\"102\",c):void 0,Ma[c]=d,b=!0)}b&&Na()}\nvar Va=Object.freeze({plugins:Oa,eventNameDispatchConfigs:Pa,registrationNameModules:Ra,registrationNameDependencies:Sa,possibleRegistrationNames:null,injectEventPluginOrder:Ta,injectEventPluginsByName:Ua}),Wa=null,Xa=null,Ya=null;function Za(a,b,c,d){b=a.type||\"unknown-event\";a.currentTarget=Ya(d);P.invokeGuardedCallbackAndCatchFirstError(b,c,void 0,a);a.currentTarget=null}\nfunction $a(a,b){null==b?E(\"30\"):void 0;if(null==a)return b;if(Array.isArray(a)){if(Array.isArray(b))return a.push.apply(a,b),a;a.push(b);return a}return Array.isArray(b)?[a].concat(b):[a,b]}function ab(a,b,c){Array.isArray(a)?a.forEach(b,c):a&&b.call(c,a)}var bb=null;\nfunction cb(a,b){if(a){var c=a._dispatchListeners,d=a._dispatchInstances;if(Array.isArray(c))for(var e=0;e<c.length&&!a.isPropagationStopped();e++)Za(a,b,c[e],d[e]);else c&&Za(a,b,c,d);a._dispatchListeners=null;a._dispatchInstances=null;a.isPersistent()||a.constructor.release(a)}}function db(a){return cb(a,!0)}function gb(a){return cb(a,!1)}var hb={injectEventPluginOrder:Ta,injectEventPluginsByName:Ua};\nfunction ib(a,b){var c=a.stateNode;if(!c)return null;var d=Wa(c);if(!d)return null;c=d[b];a:switch(b){case \"onClick\":case \"onClickCapture\":case \"onDoubleClick\":case \"onDoubleClickCapture\":case \"onMouseDown\":case \"onMouseDownCapture\":case \"onMouseMove\":case \"onMouseMoveCapture\":case \"onMouseUp\":case \"onMouseUpCapture\":(d=!d.disabled)||(a=a.type,d=!(\"button\"===a||\"input\"===a||\"select\"===a||\"textarea\"===a));a=!d;break a;default:a=!1}if(a)return null;c&&\"function\"!==typeof c?E(\"231\",b,typeof c):void 0;\nreturn c}function jb(a,b,c,d){for(var e,f=0;f<Oa.length;f++){var g=Oa[f];g&&(g=g.extractEvents(a,b,c,d))&&(e=$a(e,g))}return e}function kb(a){a&&(bb=$a(bb,a))}function lb(a){var b=bb;bb=null;b&&(a?ab(b,db):ab(b,gb),bb?E(\"95\"):void 0,P.rethrowCaughtError())}var mb=Object.freeze({injection:hb,getListener:ib,extractEvents:jb,enqueueEvents:kb,processEventQueue:lb}),nb=Math.random().toString(36).slice(2),Q=\"__reactInternalInstance$\"+nb,ob=\"__reactEventHandlers$\"+nb;\nfunction pb(a){if(a[Q])return a[Q];for(var b=[];!a[Q];)if(b.push(a),a.parentNode)a=a.parentNode;else return null;var c=void 0,d=a[Q];if(5===d.tag||6===d.tag)return d;for(;a&&(d=a[Q]);a=b.pop())c=d;return c}function qb(a){if(5===a.tag||6===a.tag)return a.stateNode;E(\"33\")}function rb(a){return a[ob]||null}\nvar sb=Object.freeze({precacheFiberNode:function(a,b){b[Q]=a},getClosestInstanceFromNode:pb,getInstanceFromNode:function(a){a=a[Q];return!a||5!==a.tag&&6!==a.tag?null:a},getNodeFromInstance:qb,getFiberCurrentPropsFromNode:rb,updateFiberProps:function(a,b){a[ob]=b}});function tb(a){do a=a[\"return\"];while(a&&5!==a.tag);return a?a:null}function ub(a,b,c){for(var d=[];a;)d.push(a),a=tb(a);for(a=d.length;0<a--;)b(d[a],\"captured\",c);for(a=0;a<d.length;a++)b(d[a],\"bubbled\",c)}\nfunction vb(a,b,c){if(b=ib(a,c.dispatchConfig.phasedRegistrationNames[b]))c._dispatchListeners=$a(c._dispatchListeners,b),c._dispatchInstances=$a(c._dispatchInstances,a)}function wb(a){a&&a.dispatchConfig.phasedRegistrationNames&&ub(a._targetInst,vb,a)}function xb(a){if(a&&a.dispatchConfig.phasedRegistrationNames){var b=a._targetInst;b=b?tb(b):null;ub(b,vb,a)}}\nfunction yb(a,b,c){a&&c&&c.dispatchConfig.registrationName&&(b=ib(a,c.dispatchConfig.registrationName))&&(c._dispatchListeners=$a(c._dispatchListeners,b),c._dispatchInstances=$a(c._dispatchInstances,a))}function zb(a){a&&a.dispatchConfig.registrationName&&yb(a._targetInst,null,a)}function Ab(a){ab(a,wb)}\nfunction Bb(a,b,c,d){if(c&&d)a:{var e=c;for(var f=d,g=0,h=e;h;h=tb(h))g++;h=0;for(var k=f;k;k=tb(k))h++;for(;0<g-h;)e=tb(e),g--;for(;0<h-g;)f=tb(f),h--;for(;g--;){if(e===f||e===f.alternate)break a;e=tb(e);f=tb(f)}e=null}else e=null;f=e;for(e=[];c&&c!==f;){g=c.alternate;if(null!==g&&g===f)break;e.push(c);c=tb(c)}for(c=[];d&&d!==f;){g=d.alternate;if(null!==g&&g===f)break;c.push(d);d=tb(d)}for(d=0;d<e.length;d++)yb(e[d],\"bubbled\",a);for(a=c.length;0<a--;)yb(c[a],\"captured\",b)}\nvar Cb=Object.freeze({accumulateTwoPhaseDispatches:Ab,accumulateTwoPhaseDispatchesSkipTarget:function(a){ab(a,xb)},accumulateEnterLeaveDispatches:Bb,accumulateDirectDispatches:function(a){ab(a,zb)}}),Db=null;function Eb(){!Db&&l.canUseDOM&&(Db=\"textContent\"in document.documentElement?\"textContent\":\"innerText\");return Db}var S={_root:null,_startText:null,_fallbackText:null};\nfunction Fb(){if(S._fallbackText)return S._fallbackText;var a,b=S._startText,c=b.length,d,e=Gb(),f=e.length;for(a=0;a<c&&b[a]===e[a];a++);var g=c-a;for(d=1;d<=g&&b[c-d]===e[f-d];d++);S._fallbackText=e.slice(a,1<d?1-d:void 0);return S._fallbackText}function Gb(){return\"value\"in S._root?S._root.value:S._root[Eb()]}\nvar Hb=\"dispatchConfig _targetInst nativeEvent isDefaultPrevented isPropagationStopped _dispatchListeners _dispatchInstances\".split(\" \"),Ib={type:null,target:null,currentTarget:C.thatReturnsNull,eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(a){return a.timeStamp||Date.now()},defaultPrevented:null,isTrusted:null};\nfunction T(a,b,c,d){this.dispatchConfig=a;this._targetInst=b;this.nativeEvent=c;a=this.constructor.Interface;for(var e in a)a.hasOwnProperty(e)&&((b=a[e])?this[e]=b(c):\"target\"===e?this.target=d:this[e]=c[e]);this.isDefaultPrevented=(null!=c.defaultPrevented?c.defaultPrevented:!1===c.returnValue)?C.thatReturnsTrue:C.thatReturnsFalse;this.isPropagationStopped=C.thatReturnsFalse;return this}\nB(T.prototype,{preventDefault:function(){this.defaultPrevented=!0;var a=this.nativeEvent;a&&(a.preventDefault?a.preventDefault():\"unknown\"!==typeof a.returnValue&&(a.returnValue=!1),this.isDefaultPrevented=C.thatReturnsTrue)},stopPropagation:function(){var a=this.nativeEvent;a&&(a.stopPropagation?a.stopPropagation():\"unknown\"!==typeof a.cancelBubble&&(a.cancelBubble=!0),this.isPropagationStopped=C.thatReturnsTrue)},persist:function(){this.isPersistent=C.thatReturnsTrue},isPersistent:C.thatReturnsFalse,\ndestructor:function(){var a=this.constructor.Interface,b;for(b in a)this[b]=null;for(a=0;a<Hb.length;a++)this[Hb[a]]=null}});T.Interface=Ib;T.augmentClass=function(a,b){function c(){}c.prototype=this.prototype;var d=new c;B(d,a.prototype);a.prototype=d;a.prototype.constructor=a;a.Interface=B({},this.Interface,b);a.augmentClass=this.augmentClass;Jb(a)};Jb(T);function Kb(a,b,c,d){if(this.eventPool.length){var e=this.eventPool.pop();this.call(e,a,b,c,d);return e}return new this(a,b,c,d)}\nfunction Lb(a){a instanceof this?void 0:E(\"223\");a.destructor();10>this.eventPool.length&&this.eventPool.push(a)}function Jb(a){a.eventPool=[];a.getPooled=Kb;a.release=Lb}function Mb(a,b,c,d){return T.call(this,a,b,c,d)}T.augmentClass(Mb,{data:null});function Nb(a,b,c,d){return T.call(this,a,b,c,d)}T.augmentClass(Nb,{data:null});var Pb=[9,13,27,32],Vb=l.canUseDOM&&\"CompositionEvent\"in window,Wb=null;l.canUseDOM&&\"documentMode\"in document&&(Wb=document.documentMode);var Xb;\nif(Xb=l.canUseDOM&&\"TextEvent\"in window&&!Wb){var Yb=window.opera;Xb=!(\"object\"===typeof Yb&&\"function\"===typeof Yb.version&&12>=parseInt(Yb.version(),10))}\nvar Zb=Xb,$b=l.canUseDOM&&(!Vb||Wb&&8<Wb&&11>=Wb),ac=String.fromCharCode(32),bc={beforeInput:{phasedRegistrationNames:{bubbled:\"onBeforeInput\",captured:\"onBeforeInputCapture\"},dependencies:[\"topCompositionEnd\",\"topKeyPress\",\"topTextInput\",\"topPaste\"]},compositionEnd:{phasedRegistrationNames:{bubbled:\"onCompositionEnd\",captured:\"onCompositionEndCapture\"},dependencies:\"topBlur topCompositionEnd topKeyDown topKeyPress topKeyUp topMouseDown\".split(\" \")},compositionStart:{phasedRegistrationNames:{bubbled:\"onCompositionStart\",\ncaptured:\"onCompositionStartCapture\"},dependencies:\"topBlur topCompositionStart topKeyDown topKeyPress topKeyUp topMouseDown\".split(\" \")},compositionUpdate:{phasedRegistrationNames:{bubbled:\"onCompositionUpdate\",captured:\"onCompositionUpdateCapture\"},dependencies:\"topBlur topCompositionUpdate topKeyDown topKeyPress topKeyUp topMouseDown\".split(\" \")}},cc=!1;\nfunction dc(a,b){switch(a){case \"topKeyUp\":return-1!==Pb.indexOf(b.keyCode);case \"topKeyDown\":return 229!==b.keyCode;case \"topKeyPress\":case \"topMouseDown\":case \"topBlur\":return!0;default:return!1}}function ec(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var fc=!1;function gc(a,b){switch(a){case \"topCompositionEnd\":return ec(b);case \"topKeyPress\":if(32!==b.which)return null;cc=!0;return ac;case \"topTextInput\":return a=b.data,a===ac&&cc?null:a;default:return null}}\nfunction hc(a,b){if(fc)return\"topCompositionEnd\"===a||!Vb&&dc(a,b)?(a=Fb(),S._root=null,S._startText=null,S._fallbackText=null,fc=!1,a):null;switch(a){case \"topPaste\":return null;case \"topKeyPress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1<b.char.length)return b.char;if(b.which)return String.fromCharCode(b.which)}return null;case \"topCompositionEnd\":return $b?null:b.data;default:return null}}\nvar ic={eventTypes:bc,extractEvents:function(a,b,c,d){var e;if(Vb)b:{switch(a){case \"topCompositionStart\":var f=bc.compositionStart;break b;case \"topCompositionEnd\":f=bc.compositionEnd;break b;case \"topCompositionUpdate\":f=bc.compositionUpdate;break b}f=void 0}else fc?dc(a,c)&&(f=bc.compositionEnd):\"topKeyDown\"===a&&229===c.keyCode&&(f=bc.compositionStart);f?($b&&(fc||f!==bc.compositionStart?f===bc.compositionEnd&&fc&&(e=Fb()):(S._root=d,S._startText=Gb(),fc=!0)),f=Mb.getPooled(f,b,c,d),e?f.data=\ne:(e=ec(c),null!==e&&(f.data=e)),Ab(f),e=f):e=null;(a=Zb?gc(a,c):hc(a,c))?(b=Nb.getPooled(bc.beforeInput,b,c,d),b.data=a,Ab(b)):b=null;return[e,b]}},jc=null,kc=null,lc=null;function mc(a){if(a=Xa(a)){jc&&\"function\"===typeof jc.restoreControlledState?void 0:E(\"194\");var b=Wa(a.stateNode);jc.restoreControlledState(a.stateNode,a.type,b)}}var nc={injectFiberControlledHostComponent:function(a){jc=a}};function oc(a){kc?lc?lc.push(a):lc=[a]:kc=a}\nfunction pc(){if(kc){var a=kc,b=lc;lc=kc=null;mc(a);if(b)for(a=0;a<b.length;a++)mc(b[a])}}var qc=Object.freeze({injection:nc,enqueueStateRestore:oc,restoreStateIfNeeded:pc});function rc(a,b){return a(b)}var sc=!1;function tc(a,b){if(sc)return rc(a,b);sc=!0;try{return rc(a,b)}finally{sc=!1,pc()}}var uc={color:!0,date:!0,datetime:!0,\"datetime-local\":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};\nfunction vc(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return\"input\"===b?!!uc[a.type]:\"textarea\"===b?!0:!1}function wc(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}var xc;l.canUseDOM&&(xc=document.implementation&&document.implementation.hasFeature&&!0!==document.implementation.hasFeature(\"\",\"\"));\nfunction yc(a,b){if(!l.canUseDOM||b&&!(\"addEventListener\"in document))return!1;b=\"on\"+a;var c=b in document;c||(c=document.createElement(\"div\"),c.setAttribute(b,\"return;\"),c=\"function\"===typeof c[b]);!c&&xc&&\"wheel\"===a&&(c=document.implementation.hasFeature(\"Events.wheel\",\"3.0\"));return c}function zc(a){var b=a.type;return(a=a.nodeName)&&\"input\"===a.toLowerCase()&&(\"checkbox\"===b||\"radio\"===b)}\nfunction Ac(a){var b=zc(a)?\"checked\":\"value\",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=\"\"+a[b];if(!a.hasOwnProperty(b)&&\"function\"===typeof c.get&&\"function\"===typeof c.set)return Object.defineProperty(a,b,{enumerable:c.enumerable,configurable:!0,get:function(){return c.get.call(this)},set:function(a){d=\"\"+a;c.set.call(this,a)}}),{getValue:function(){return d},setValue:function(a){d=\"\"+a},stopTracking:function(){a._valueTracker=null;delete a[b]}}}\nfunction Bc(a){a._valueTracker||(a._valueTracker=Ac(a))}function Cc(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d=\"\";a&&(d=zc(a)?a.checked?\"true\":\"false\":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}var Dc={change:{phasedRegistrationNames:{bubbled:\"onChange\",captured:\"onChangeCapture\"},dependencies:\"topBlur topChange topClick topFocus topInput topKeyDown topKeyUp topSelectionChange\".split(\" \")}};\nfunction Ec(a,b,c){a=T.getPooled(Dc.change,a,b,c);a.type=\"change\";oc(c);Ab(a);return a}var Fc=null,Gc=null;function Hc(a){kb(a);lb(!1)}function Ic(a){var b=qb(a);if(Cc(b))return a}function Jc(a,b){if(\"topChange\"===a)return b}var Kc=!1;l.canUseDOM&&(Kc=yc(\"input\")&&(!document.documentMode||9<document.documentMode));function Lc(){Fc&&(Fc.detachEvent(\"onpropertychange\",Mc),Gc=Fc=null)}function Mc(a){\"value\"===a.propertyName&&Ic(Gc)&&(a=Ec(Gc,a,wc(a)),tc(Hc,a))}\nfunction Nc(a,b,c){\"topFocus\"===a?(Lc(),Fc=b,Gc=c,Fc.attachEvent(\"onpropertychange\",Mc)):\"topBlur\"===a&&Lc()}function Oc(a){if(\"topSelectionChange\"===a||\"topKeyUp\"===a||\"topKeyDown\"===a)return Ic(Gc)}function Pc(a,b){if(\"topClick\"===a)return Ic(b)}function $c(a,b){if(\"topInput\"===a||\"topChange\"===a)return Ic(b)}\nvar ad={eventTypes:Dc,_isInputEventSupported:Kc,extractEvents:function(a,b,c,d){var e=b?qb(b):window,f=e.nodeName&&e.nodeName.toLowerCase();if(\"select\"===f||\"input\"===f&&\"file\"===e.type)var g=Jc;else if(vc(e))if(Kc)g=$c;else{g=Oc;var h=Nc}else f=e.nodeName,!f||\"input\"!==f.toLowerCase()||\"checkbox\"!==e.type&&\"radio\"!==e.type||(g=Pc);if(g&&(g=g(a,b)))return Ec(g,c,d);h&&h(a,e,b);\"topBlur\"===a&&null!=b&&(a=b._wrapperState||e._wrapperState)&&a.controlled&&\"number\"===e.type&&(a=\"\"+e.value,e.getAttribute(\"value\")!==\na&&e.setAttribute(\"value\",a))}};function bd(a,b,c,d){return T.call(this,a,b,c,d)}T.augmentClass(bd,{view:null,detail:null});var cd={Alt:\"altKey\",Control:\"ctrlKey\",Meta:\"metaKey\",Shift:\"shiftKey\"};function dd(a){var b=this.nativeEvent;return b.getModifierState?b.getModifierState(a):(a=cd[a])?!!b[a]:!1}function ed(){return dd}function fd(a,b,c,d){return T.call(this,a,b,c,d)}\nbd.augmentClass(fd,{screenX:null,screenY:null,clientX:null,clientY:null,pageX:null,pageY:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,getModifierState:ed,button:null,buttons:null,relatedTarget:function(a){return a.relatedTarget||(a.fromElement===a.srcElement?a.toElement:a.fromElement)}});\nvar gd={mouseEnter:{registrationName:\"onMouseEnter\",dependencies:[\"topMouseOut\",\"topMouseOver\"]},mouseLeave:{registrationName:\"onMouseLeave\",dependencies:[\"topMouseOut\",\"topMouseOver\"]}},hd={eventTypes:gd,extractEvents:function(a,b,c,d){if(\"topMouseOver\"===a&&(c.relatedTarget||c.fromElement)||\"topMouseOut\"!==a&&\"topMouseOver\"!==a)return null;var e=d.window===d?d:(e=d.ownerDocument)?e.defaultView||e.parentWindow:window;\"topMouseOut\"===a?(a=b,b=(b=c.relatedTarget||c.toElement)?pb(b):null):a=null;if(a===\nb)return null;var f=null==a?e:qb(a);e=null==b?e:qb(b);var g=fd.getPooled(gd.mouseLeave,a,c,d);g.type=\"mouseleave\";g.target=f;g.relatedTarget=e;c=fd.getPooled(gd.mouseEnter,b,c,d);c.type=\"mouseenter\";c.target=e;c.relatedTarget=f;Bb(g,c,a,b);return[g,c]}},id=aa.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner;function jd(a){a=a.type;return\"string\"===typeof a?a:\"function\"===typeof a?a.displayName||a.name:null}\nfunction kd(a){var b=a;if(a.alternate)for(;b[\"return\"];)b=b[\"return\"];else{if(0!==(b.effectTag&2))return 1;for(;b[\"return\"];)if(b=b[\"return\"],0!==(b.effectTag&2))return 1}return 3===b.tag?2:3}function ld(a){return(a=a._reactInternalFiber)?2===kd(a):!1}function md(a){2!==kd(a)?E(\"188\"):void 0}\nfunction nd(a){var b=a.alternate;if(!b)return b=kd(a),3===b?E(\"188\"):void 0,1===b?null:a;for(var c=a,d=b;;){var e=c[\"return\"],f=e?e.alternate:null;if(!e||!f)break;if(e.child===f.child){for(var g=e.child;g;){if(g===c)return md(e),a;if(g===d)return md(e),b;g=g.sibling}E(\"188\")}if(c[\"return\"]!==d[\"return\"])c=e,d=f;else{g=!1;for(var h=e.child;h;){if(h===c){g=!0;c=e;d=f;break}if(h===d){g=!0;d=e;c=f;break}h=h.sibling}if(!g){for(h=f.child;h;){if(h===c){g=!0;c=f;d=e;break}if(h===d){g=!0;d=f;c=e;break}h=h.sibling}g?\nvoid 0:E(\"189\")}}c.alternate!==d?E(\"190\"):void 0}3!==c.tag?E(\"188\"):void 0;return c.stateNode.current===c?a:b}function od(a){a=nd(a);if(!a)return null;for(var b=a;;){if(5===b.tag||6===b.tag)return b;if(b.child)b.child[\"return\"]=b,b=b.child;else{if(b===a)break;for(;!b.sibling;){if(!b[\"return\"]||b[\"return\"]===a)return null;b=b[\"return\"]}b.sibling[\"return\"]=b[\"return\"];b=b.sibling}}return null}\nfunction pd(a){a=nd(a);if(!a)return null;for(var b=a;;){if(5===b.tag||6===b.tag)return b;if(b.child&&4!==b.tag)b.child[\"return\"]=b,b=b.child;else{if(b===a)break;for(;!b.sibling;){if(!b[\"return\"]||b[\"return\"]===a)return null;b=b[\"return\"]}b.sibling[\"return\"]=b[\"return\"];b=b.sibling}}return null}var qd=[];\nfunction rd(a){var b=a.targetInst;do{if(!b){a.ancestors.push(b);break}var c;for(c=b;c[\"return\"];)c=c[\"return\"];c=3!==c.tag?null:c.stateNode.containerInfo;if(!c)break;a.ancestors.push(b);b=pb(c)}while(b);for(c=0;c<a.ancestors.length;c++)b=a.ancestors[c],sd(a.topLevelType,b,a.nativeEvent,wc(a.nativeEvent))}var td=!0,sd=void 0;function ud(a){td=!!a}function U(a,b,c){return c?ba.listen(c,b,vd.bind(null,a)):null}function wd(a,b,c){return c?ba.capture(c,b,vd.bind(null,a)):null}\nfunction vd(a,b){if(td){var c=wc(b);c=pb(c);null===c||\"number\"!==typeof c.tag||2===kd(c)||(c=null);if(qd.length){var d=qd.pop();d.topLevelType=a;d.nativeEvent=b;d.targetInst=c;a=d}else a={topLevelType:a,nativeEvent:b,targetInst:c,ancestors:[]};try{tc(rd,a)}finally{a.topLevelType=null,a.nativeEvent=null,a.targetInst=null,a.ancestors.length=0,10>qd.length&&qd.push(a)}}}\nvar xd=Object.freeze({get _enabled(){return td},get _handleTopLevel(){return sd},setHandleTopLevel:function(a){sd=a},setEnabled:ud,isEnabled:function(){return td},trapBubbledEvent:U,trapCapturedEvent:wd,dispatchEvent:vd});function yd(a,b){var c={};c[a.toLowerCase()]=b.toLowerCase();c[\"Webkit\"+a]=\"webkit\"+b;c[\"Moz\"+a]=\"moz\"+b;c[\"ms\"+a]=\"MS\"+b;c[\"O\"+a]=\"o\"+b.toLowerCase();return c}\nvar zd={animationend:yd(\"Animation\",\"AnimationEnd\"),animationiteration:yd(\"Animation\",\"AnimationIteration\"),animationstart:yd(\"Animation\",\"AnimationStart\"),transitionend:yd(\"Transition\",\"TransitionEnd\")},Ad={},Bd={};l.canUseDOM&&(Bd=document.createElement(\"div\").style,\"AnimationEvent\"in window||(delete zd.animationend.animation,delete zd.animationiteration.animation,delete zd.animationstart.animation),\"TransitionEvent\"in window||delete zd.transitionend.transition);\nfunction Cd(a){if(Ad[a])return Ad[a];if(!zd[a])return a;var b=zd[a],c;for(c in b)if(b.hasOwnProperty(c)&&c in Bd)return Ad[a]=b[c];return\"\"}\nvar Dd={topAbort:\"abort\",topAnimationEnd:Cd(\"animationend\")||\"animationend\",topAnimationIteration:Cd(\"animationiteration\")||\"animationiteration\",topAnimationStart:Cd(\"animationstart\")||\"animationstart\",topBlur:\"blur\",topCancel:\"cancel\",topCanPlay:\"canplay\",topCanPlayThrough:\"canplaythrough\",topChange:\"change\",topClick:\"click\",topClose:\"close\",topCompositionEnd:\"compositionend\",topCompositionStart:\"compositionstart\",topCompositionUpdate:\"compositionupdate\",topContextMenu:\"contextmenu\",topCopy:\"copy\",\ntopCut:\"cut\",topDoubleClick:\"dblclick\",topDrag:\"drag\",topDragEnd:\"dragend\",topDragEnter:\"dragenter\",topDragExit:\"dragexit\",topDragLeave:\"dragleave\",topDragOver:\"dragover\",topDragStart:\"dragstart\",topDrop:\"drop\",topDurationChange:\"durationchange\",topEmptied:\"emptied\",topEncrypted:\"encrypted\",topEnded:\"ended\",topError:\"error\",topFocus:\"focus\",topInput:\"input\",topKeyDown:\"keydown\",topKeyPress:\"keypress\",topKeyUp:\"keyup\",topLoadedData:\"loadeddata\",topLoad:\"load\",topLoadedMetadata:\"loadedmetadata\",topLoadStart:\"loadstart\",\ntopMouseDown:\"mousedown\",topMouseMove:\"mousemove\",topMouseOut:\"mouseout\",topMouseOver:\"mouseover\",topMouseUp:\"mouseup\",topPaste:\"paste\",topPause:\"pause\",topPlay:\"play\",topPlaying:\"playing\",topProgress:\"progress\",topRateChange:\"ratechange\",topScroll:\"scroll\",topSeeked:\"seeked\",topSeeking:\"seeking\",topSelectionChange:\"selectionchange\",topStalled:\"stalled\",topSuspend:\"suspend\",topTextInput:\"textInput\",topTimeUpdate:\"timeupdate\",topToggle:\"toggle\",topTouchCancel:\"touchcancel\",topTouchEnd:\"touchend\",topTouchMove:\"touchmove\",\ntopTouchStart:\"touchstart\",topTransitionEnd:Cd(\"transitionend\")||\"transitionend\",topVolumeChange:\"volumechange\",topWaiting:\"waiting\",topWheel:\"wheel\"},Ed={},Fd=0,Gd=\"_reactListenersID\"+(\"\"+Math.random()).slice(2);function Hd(a){Object.prototype.hasOwnProperty.call(a,Gd)||(a[Gd]=Fd++,Ed[a[Gd]]={});return Ed[a[Gd]]}function Id(a){for(;a&&a.firstChild;)a=a.firstChild;return a}\nfunction Jd(a,b){var c=Id(a);a=0;for(var d;c;){if(3===c.nodeType){d=a+c.textContent.length;if(a<=b&&d>=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Id(c)}}function Kd(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&\"text\"===a.type||\"textarea\"===b||\"true\"===a.contentEditable)}\nvar Ld=l.canUseDOM&&\"documentMode\"in document&&11>=document.documentMode,Md={select:{phasedRegistrationNames:{bubbled:\"onSelect\",captured:\"onSelectCapture\"},dependencies:\"topBlur topContextMenu topFocus topKeyDown topKeyUp topMouseDown topMouseUp topSelectionChange\".split(\" \")}},Nd=null,Od=null,Pd=null,Qd=!1;\nfunction Rd(a,b){if(Qd||null==Nd||Nd!==da())return null;var c=Nd;\"selectionStart\"in c&&Kd(c)?c={start:c.selectionStart,end:c.selectionEnd}:window.getSelection?(c=window.getSelection(),c={anchorNode:c.anchorNode,anchorOffset:c.anchorOffset,focusNode:c.focusNode,focusOffset:c.focusOffset}):c=void 0;return Pd&&ea(Pd,c)?null:(Pd=c,a=T.getPooled(Md.select,Od,a,b),a.type=\"select\",a.target=Nd,Ab(a),a)}\nvar Sd={eventTypes:Md,extractEvents:function(a,b,c,d){var e=d.window===d?d.document:9===d.nodeType?d:d.ownerDocument,f;if(!(f=!e)){a:{e=Hd(e);f=Sa.onSelect;for(var g=0;g<f.length;g++){var h=f[g];if(!e.hasOwnProperty(h)||!e[h]){e=!1;break a}}e=!0}f=!e}if(f)return null;e=b?qb(b):window;switch(a){case \"topFocus\":if(vc(e)||\"true\"===e.contentEditable)Nd=e,Od=b,Pd=null;break;case \"topBlur\":Pd=Od=Nd=null;break;case \"topMouseDown\":Qd=!0;break;case \"topContextMenu\":case \"topMouseUp\":return Qd=!1,Rd(c,d);case \"topSelectionChange\":if(Ld)break;\ncase \"topKeyDown\":case \"topKeyUp\":return Rd(c,d)}return null}};function Td(a,b,c,d){return T.call(this,a,b,c,d)}T.augmentClass(Td,{animationName:null,elapsedTime:null,pseudoElement:null});function Ud(a,b,c,d){return T.call(this,a,b,c,d)}T.augmentClass(Ud,{clipboardData:function(a){return\"clipboardData\"in a?a.clipboardData:window.clipboardData}});function Vd(a,b,c,d){return T.call(this,a,b,c,d)}bd.augmentClass(Vd,{relatedTarget:null});\nfunction Wd(a){var b=a.keyCode;\"charCode\"in a?(a=a.charCode,0===a&&13===b&&(a=13)):a=b;return 32<=a||13===a?a:0}\nvar Xd={Esc:\"Escape\",Spacebar:\" \",Left:\"ArrowLeft\",Up:\"ArrowUp\",Right:\"ArrowRight\",Down:\"ArrowDown\",Del:\"Delete\",Win:\"OS\",Menu:\"ContextMenu\",Apps:\"ContextMenu\",Scroll:\"ScrollLock\",MozPrintableKey:\"Unidentified\"},Yd={8:\"Backspace\",9:\"Tab\",12:\"Clear\",13:\"Enter\",16:\"Shift\",17:\"Control\",18:\"Alt\",19:\"Pause\",20:\"CapsLock\",27:\"Escape\",32:\" \",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"ArrowLeft\",38:\"ArrowUp\",39:\"ArrowRight\",40:\"ArrowDown\",45:\"Insert\",46:\"Delete\",112:\"F1\",113:\"F2\",114:\"F3\",115:\"F4\",\n116:\"F5\",117:\"F6\",118:\"F7\",119:\"F8\",120:\"F9\",121:\"F10\",122:\"F11\",123:\"F12\",144:\"NumLock\",145:\"ScrollLock\",224:\"Meta\"};function Zd(a,b,c,d){return T.call(this,a,b,c,d)}\nbd.augmentClass(Zd,{key:function(a){if(a.key){var b=Xd[a.key]||a.key;if(\"Unidentified\"!==b)return b}return\"keypress\"===a.type?(a=Wd(a),13===a?\"Enter\":String.fromCharCode(a)):\"keydown\"===a.type||\"keyup\"===a.type?Yd[a.keyCode]||\"Unidentified\":\"\"},location:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,repeat:null,locale:null,getModifierState:ed,charCode:function(a){return\"keypress\"===a.type?Wd(a):0},keyCode:function(a){return\"keydown\"===a.type||\"keyup\"===a.type?a.keyCode:0},which:function(a){return\"keypress\"===\na.type?Wd(a):\"keydown\"===a.type||\"keyup\"===a.type?a.keyCode:0}});function $d(a,b,c,d){return T.call(this,a,b,c,d)}fd.augmentClass($d,{dataTransfer:null});function ae(a,b,c,d){return T.call(this,a,b,c,d)}bd.augmentClass(ae,{touches:null,targetTouches:null,changedTouches:null,altKey:null,metaKey:null,ctrlKey:null,shiftKey:null,getModifierState:ed});function be(a,b,c,d){return T.call(this,a,b,c,d)}T.augmentClass(be,{propertyName:null,elapsedTime:null,pseudoElement:null});\nfunction ce(a,b,c,d){return T.call(this,a,b,c,d)}fd.augmentClass(ce,{deltaX:function(a){return\"deltaX\"in a?a.deltaX:\"wheelDeltaX\"in a?-a.wheelDeltaX:0},deltaY:function(a){return\"deltaY\"in a?a.deltaY:\"wheelDeltaY\"in a?-a.wheelDeltaY:\"wheelDelta\"in a?-a.wheelDelta:0},deltaZ:null,deltaMode:null});var de={},ee={};\n\"abort animationEnd animationIteration animationStart blur cancel canPlay canPlayThrough click close contextMenu copy cut doubleClick drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error focus input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing progress rateChange reset scroll seeked seeking stalled submit suspend timeUpdate toggle touchCancel touchEnd touchMove touchStart transitionEnd volumeChange waiting wheel\".split(\" \").forEach(function(a){var b=a[0].toUpperCase()+\na.slice(1),c=\"on\"+b;b=\"top\"+b;c={phasedRegistrationNames:{bubbled:c,captured:c+\"Capture\"},dependencies:[b]};de[a]=c;ee[b]=c});\nvar fe={eventTypes:de,extractEvents:function(a,b,c,d){var e=ee[a];if(!e)return null;switch(a){case \"topKeyPress\":if(0===Wd(c))return null;case \"topKeyDown\":case \"topKeyUp\":a=Zd;break;case \"topBlur\":case \"topFocus\":a=Vd;break;case \"topClick\":if(2===c.button)return null;case \"topDoubleClick\":case \"topMouseDown\":case \"topMouseMove\":case \"topMouseUp\":case \"topMouseOut\":case \"topMouseOver\":case \"topContextMenu\":a=fd;break;case \"topDrag\":case \"topDragEnd\":case \"topDragEnter\":case \"topDragExit\":case \"topDragLeave\":case \"topDragOver\":case \"topDragStart\":case \"topDrop\":a=\n$d;break;case \"topTouchCancel\":case \"topTouchEnd\":case \"topTouchMove\":case \"topTouchStart\":a=ae;break;case \"topAnimationEnd\":case \"topAnimationIteration\":case \"topAnimationStart\":a=Td;break;case \"topTransitionEnd\":a=be;break;case \"topScroll\":a=bd;break;case \"topWheel\":a=ce;break;case \"topCopy\":case \"topCut\":case \"topPaste\":a=Ud;break;default:a=T}b=a.getPooled(e,b,c,d);Ab(b);return b}};sd=function(a,b,c,d){a=jb(a,b,c,d);kb(a);lb(!1)};hb.injectEventPluginOrder(\"ResponderEventPlugin SimpleEventPlugin TapEventPlugin EnterLeaveEventPlugin ChangeEventPlugin SelectEventPlugin BeforeInputEventPlugin\".split(\" \"));\nWa=sb.getFiberCurrentPropsFromNode;Xa=sb.getInstanceFromNode;Ya=sb.getNodeFromInstance;hb.injectEventPluginsByName({SimpleEventPlugin:fe,EnterLeaveEventPlugin:hd,ChangeEventPlugin:ad,SelectEventPlugin:Sd,BeforeInputEventPlugin:ic});var ge=[],he=-1;function V(a){0>he||(a.current=ge[he],ge[he]=null,he--)}function W(a,b){he++;ge[he]=a.current;a.current=b}new Set;var ie={current:D},X={current:!1},je=D;function ke(a){return le(a)?je:ie.current}\nfunction me(a,b){var c=a.type.contextTypes;if(!c)return D;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}function le(a){return 2===a.tag&&null!=a.type.childContextTypes}function ne(a){le(a)&&(V(X,a),V(ie,a))}\nfunction oe(a,b,c){null!=ie.cursor?E(\"168\"):void 0;W(ie,b,a);W(X,c,a)}function pe(a,b){var c=a.stateNode,d=a.type.childContextTypes;if(\"function\"!==typeof c.getChildContext)return b;c=c.getChildContext();for(var e in c)e in d?void 0:E(\"108\",jd(a)||\"Unknown\",e);return B({},b,c)}function qe(a){if(!le(a))return!1;var b=a.stateNode;b=b&&b.__reactInternalMemoizedMergedChildContext||D;je=ie.current;W(ie,b,a);W(X,X.current,a);return!0}\nfunction re(a,b){var c=a.stateNode;c?void 0:E(\"169\");if(b){var d=pe(a,je);c.__reactInternalMemoizedMergedChildContext=d;V(X,a);V(ie,a);W(ie,d,a)}else V(X,a);W(X,b,a)}\nfunction Y(a,b,c){this.tag=a;this.key=b;this.stateNode=this.type=null;this.sibling=this.child=this[\"return\"]=null;this.index=0;this.memoizedState=this.updateQueue=this.memoizedProps=this.pendingProps=this.ref=null;this.internalContextTag=c;this.effectTag=0;this.lastEffect=this.firstEffect=this.nextEffect=null;this.expirationTime=0;this.alternate=null}\nfunction se(a,b,c){var d=a.alternate;null===d?(d=new Y(a.tag,a.key,a.internalContextTag),d.type=a.type,d.stateNode=a.stateNode,d.alternate=a,a.alternate=d):(d.effectTag=0,d.nextEffect=null,d.firstEffect=null,d.lastEffect=null);d.expirationTime=c;d.pendingProps=b;d.child=a.child;d.memoizedProps=a.memoizedProps;d.memoizedState=a.memoizedState;d.updateQueue=a.updateQueue;d.sibling=a.sibling;d.index=a.index;d.ref=a.ref;return d}\nfunction te(a,b,c){var d=void 0,e=a.type,f=a.key;\"function\"===typeof e?(d=e.prototype&&e.prototype.isReactComponent?new Y(2,f,b):new Y(0,f,b),d.type=e,d.pendingProps=a.props):\"string\"===typeof e?(d=new Y(5,f,b),d.type=e,d.pendingProps=a.props):\"object\"===typeof e&&null!==e&&\"number\"===typeof e.tag?(d=e,d.pendingProps=a.props):E(\"130\",null==e?e:typeof e,\"\");d.expirationTime=c;return d}function ue(a,b,c,d){b=new Y(10,d,b);b.pendingProps=a;b.expirationTime=c;return b}\nfunction ve(a,b,c){b=new Y(6,null,b);b.pendingProps=a;b.expirationTime=c;return b}function we(a,b,c){b=new Y(7,a.key,b);b.type=a.handler;b.pendingProps=a;b.expirationTime=c;return b}function xe(a,b,c){a=new Y(9,null,b);a.expirationTime=c;return a}function ye(a,b,c){b=new Y(4,a.key,b);b.pendingProps=a.children||[];b.expirationTime=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}var ze=null,Ae=null;\nfunction Be(a){return function(b){try{return a(b)}catch(c){}}}function Ce(a){if(\"undefined\"===typeof __REACT_DEVTOOLS_GLOBAL_HOOK__)return!1;var b=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(b.isDisabled||!b.supportsFiber)return!0;try{var c=b.inject(a);ze=Be(function(a){return b.onCommitFiberRoot(c,a)});Ae=Be(function(a){return b.onCommitFiberUnmount(c,a)})}catch(d){}return!0}function De(a){\"function\"===typeof ze&&ze(a)}function Ee(a){\"function\"===typeof Ae&&Ae(a)}\nfunction Fe(a){return{baseState:a,expirationTime:0,first:null,last:null,callbackList:null,hasForceUpdate:!1,isInitialized:!1}}function Ge(a,b){null===a.last?a.first=a.last=b:(a.last.next=b,a.last=b);if(0===a.expirationTime||a.expirationTime>b.expirationTime)a.expirationTime=b.expirationTime}\nfunction He(a,b){var c=a.alternate,d=a.updateQueue;null===d&&(d=a.updateQueue=Fe(null));null!==c?(a=c.updateQueue,null===a&&(a=c.updateQueue=Fe(null))):a=null;a=a!==d?a:null;null===a?Ge(d,b):null===d.last||null===a.last?(Ge(d,b),Ge(a,b)):(Ge(d,b),a.last=b)}function Ie(a,b,c,d){a=a.partialState;return\"function\"===typeof a?a.call(b,c,d):a}\nfunction Je(a,b,c,d,e,f){null!==a&&a.updateQueue===c&&(c=b.updateQueue={baseState:c.baseState,expirationTime:c.expirationTime,first:c.first,last:c.last,isInitialized:c.isInitialized,callbackList:null,hasForceUpdate:!1});c.expirationTime=0;c.isInitialized?a=c.baseState:(a=c.baseState=b.memoizedState,c.isInitialized=!0);for(var g=!0,h=c.first,k=!1;null!==h;){var q=h.expirationTime;if(q>f){var v=c.expirationTime;if(0===v||v>q)c.expirationTime=q;k||(k=!0,c.baseState=a)}else{k||(c.first=h.next,null===\nc.first&&(c.last=null));if(h.isReplace)a=Ie(h,d,a,e),g=!0;else if(q=Ie(h,d,a,e))a=g?B({},a,q):B(a,q),g=!1;h.isForced&&(c.hasForceUpdate=!0);null!==h.callback&&(q=c.callbackList,null===q&&(q=c.callbackList=[]),q.push(h))}h=h.next}null!==c.callbackList?b.effectTag|=32:null!==c.first||c.hasForceUpdate||(b.updateQueue=null);k||(c.baseState=a);return a}\nfunction Ke(a,b){var c=a.callbackList;if(null!==c)for(a.callbackList=null,a=0;a<c.length;a++){var d=c[a],e=d.callback;d.callback=null;\"function\"!==typeof e?E(\"191\",e):void 0;e.call(b)}}\nfunction Le(a,b,c,d){function e(a,b){b.updater=f;a.stateNode=b;b._reactInternalFiber=a}var f={isMounted:ld,enqueueSetState:function(c,d,e){c=c._reactInternalFiber;e=void 0===e?null:e;var g=b(c);He(c,{expirationTime:g,partialState:d,callback:e,isReplace:!1,isForced:!1,nextCallback:null,next:null});a(c,g)},enqueueReplaceState:function(c,d,e){c=c._reactInternalFiber;e=void 0===e?null:e;var g=b(c);He(c,{expirationTime:g,partialState:d,callback:e,isReplace:!0,isForced:!1,nextCallback:null,next:null});\na(c,g)},enqueueForceUpdate:function(c,d){c=c._reactInternalFiber;d=void 0===d?null:d;var e=b(c);He(c,{expirationTime:e,partialState:null,callback:d,isReplace:!1,isForced:!0,nextCallback:null,next:null});a(c,e)}};return{adoptClassInstance:e,constructClassInstance:function(a,b){var c=a.type,d=ke(a),f=2===a.tag&&null!=a.type.contextTypes,g=f?me(a,d):D;b=new c(b,g);e(a,b);f&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=d,a.__reactInternalMemoizedMaskedChildContext=g);return b},mountClassInstance:function(a,\nb){var c=a.alternate,d=a.stateNode,e=d.state||null,g=a.pendingProps;g?void 0:E(\"158\");var h=ke(a);d.props=g;d.state=a.memoizedState=e;d.refs=D;d.context=me(a,h);null!=a.type&&null!=a.type.prototype&&!0===a.type.prototype.unstable_isAsyncReactComponent&&(a.internalContextTag|=1);\"function\"===typeof d.componentWillMount&&(e=d.state,d.componentWillMount(),e!==d.state&&f.enqueueReplaceState(d,d.state,null),e=a.updateQueue,null!==e&&(d.state=Je(c,a,e,d,g,b)));\"function\"===typeof d.componentDidMount&&(a.effectTag|=\n4)},updateClassInstance:function(a,b,e){var g=b.stateNode;g.props=b.memoizedProps;g.state=b.memoizedState;var h=b.memoizedProps,k=b.pendingProps;k||(k=h,null==k?E(\"159\"):void 0);var u=g.context,z=ke(b);z=me(b,z);\"function\"!==typeof g.componentWillReceiveProps||h===k&&u===z||(u=g.state,g.componentWillReceiveProps(k,z),g.state!==u&&f.enqueueReplaceState(g,g.state,null));u=b.memoizedState;e=null!==b.updateQueue?Je(a,b,b.updateQueue,g,k,e):u;if(!(h!==k||u!==e||X.current||null!==b.updateQueue&&b.updateQueue.hasForceUpdate))return\"function\"!==\ntypeof g.componentDidUpdate||h===a.memoizedProps&&u===a.memoizedState||(b.effectTag|=4),!1;var G=k;if(null===h||null!==b.updateQueue&&b.updateQueue.hasForceUpdate)G=!0;else{var I=b.stateNode,L=b.type;G=\"function\"===typeof I.shouldComponentUpdate?I.shouldComponentUpdate(G,e,z):L.prototype&&L.prototype.isPureReactComponent?!ea(h,G)||!ea(u,e):!0}G?(\"function\"===typeof g.componentWillUpdate&&g.componentWillUpdate(k,e,z),\"function\"===typeof g.componentDidUpdate&&(b.effectTag|=4)):(\"function\"!==typeof g.componentDidUpdate||\nh===a.memoizedProps&&u===a.memoizedState||(b.effectTag|=4),c(b,k),d(b,e));g.props=k;g.state=e;g.context=z;return G}}}var Qe=\"function\"===typeof Symbol&&Symbol[\"for\"],Re=Qe?Symbol[\"for\"](\"react.element\"):60103,Se=Qe?Symbol[\"for\"](\"react.call\"):60104,Te=Qe?Symbol[\"for\"](\"react.return\"):60105,Ue=Qe?Symbol[\"for\"](\"react.portal\"):60106,Ve=Qe?Symbol[\"for\"](\"react.fragment\"):60107,We=\"function\"===typeof Symbol&&Symbol.iterator;\nfunction Xe(a){if(null===a||\"undefined\"===typeof a)return null;a=We&&a[We]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}var Ye=Array.isArray;\nfunction Ze(a,b){var c=b.ref;if(null!==c&&\"function\"!==typeof c){if(b._owner){b=b._owner;var d=void 0;b&&(2!==b.tag?E(\"110\"):void 0,d=b.stateNode);d?void 0:E(\"147\",c);var e=\"\"+c;if(null!==a&&null!==a.ref&&a.ref._stringRef===e)return a.ref;a=function(a){var b=d.refs===D?d.refs={}:d.refs;null===a?delete b[e]:b[e]=a};a._stringRef=e;return a}\"string\"!==typeof c?E(\"148\"):void 0;b._owner?void 0:E(\"149\",c)}return c}\nfunction $e(a,b){\"textarea\"!==a.type&&E(\"31\",\"[object Object]\"===Object.prototype.toString.call(b)?\"object with keys {\"+Object.keys(b).join(\", \")+\"}\":b,\"\")}\nfunction af(a){function b(b,c){if(a){var d=b.lastEffect;null!==d?(d.nextEffect=c,b.lastEffect=c):b.firstEffect=b.lastEffect=c;c.nextEffect=null;c.effectTag=8}}function c(c,d){if(!a)return null;for(;null!==d;)b(c,d),d=d.sibling;return null}function d(a,b){for(a=new Map;null!==b;)null!==b.key?a.set(b.key,b):a.set(b.index,b),b=b.sibling;return a}function e(a,b,c){a=se(a,b,c);a.index=0;a.sibling=null;return a}function f(b,c,d){b.index=d;if(!a)return c;d=b.alternate;if(null!==d)return d=d.index,d<c?(b.effectTag=\n2,c):d;b.effectTag=2;return c}function g(b){a&&null===b.alternate&&(b.effectTag=2);return b}function h(a,b,c,d){if(null===b||6!==b.tag)return b=ve(c,a.internalContextTag,d),b[\"return\"]=a,b;b=e(b,c,d);b[\"return\"]=a;return b}function k(a,b,c,d){if(null!==b&&b.type===c.type)return d=e(b,c.props,d),d.ref=Ze(b,c),d[\"return\"]=a,d;d=te(c,a.internalContextTag,d);d.ref=Ze(b,c);d[\"return\"]=a;return d}function q(a,b,c,d){if(null===b||7!==b.tag)return b=we(c,a.internalContextTag,d),b[\"return\"]=a,b;b=e(b,c,d);\nb[\"return\"]=a;return b}function v(a,b,c,d){if(null===b||9!==b.tag)return b=xe(c,a.internalContextTag,d),b.type=c.value,b[\"return\"]=a,b;b=e(b,null,d);b.type=c.value;b[\"return\"]=a;return b}function y(a,b,c,d){if(null===b||4!==b.tag||b.stateNode.containerInfo!==c.containerInfo||b.stateNode.implementation!==c.implementation)return b=ye(c,a.internalContextTag,d),b[\"return\"]=a,b;b=e(b,c.children||[],d);b[\"return\"]=a;return b}function u(a,b,c,d,f){if(null===b||10!==b.tag)return b=ue(c,a.internalContextTag,\nd,f),b[\"return\"]=a,b;b=e(b,c,d);b[\"return\"]=a;return b}function z(a,b,c){if(\"string\"===typeof b||\"number\"===typeof b)return b=ve(\"\"+b,a.internalContextTag,c),b[\"return\"]=a,b;if(\"object\"===typeof b&&null!==b){switch(b.$$typeof){case Re:if(b.type===Ve)return b=ue(b.props.children,a.internalContextTag,c,b.key),b[\"return\"]=a,b;c=te(b,a.internalContextTag,c);c.ref=Ze(null,b);c[\"return\"]=a;return c;case Se:return b=we(b,a.internalContextTag,c),b[\"return\"]=a,b;case Te:return c=xe(b,a.internalContextTag,\nc),c.type=b.value,c[\"return\"]=a,c;case Ue:return b=ye(b,a.internalContextTag,c),b[\"return\"]=a,b}if(Ye(b)||Xe(b))return b=ue(b,a.internalContextTag,c,null),b[\"return\"]=a,b;$e(a,b)}return null}function G(a,b,c,d){var e=null!==b?b.key:null;if(\"string\"===typeof c||\"number\"===typeof c)return null!==e?null:h(a,b,\"\"+c,d);if(\"object\"===typeof c&&null!==c){switch(c.$$typeof){case Re:return c.key===e?c.type===Ve?u(a,b,c.props.children,d,e):k(a,b,c,d):null;case Se:return c.key===e?q(a,b,c,d):null;case Te:return null===\ne?v(a,b,c,d):null;case Ue:return c.key===e?y(a,b,c,d):null}if(Ye(c)||Xe(c))return null!==e?null:u(a,b,c,d,null);$e(a,c)}return null}function I(a,b,c,d,e){if(\"string\"===typeof d||\"number\"===typeof d)return a=a.get(c)||null,h(b,a,\"\"+d,e);if(\"object\"===typeof d&&null!==d){switch(d.$$typeof){case Re:return a=a.get(null===d.key?c:d.key)||null,d.type===Ve?u(b,a,d.props.children,e,d.key):k(b,a,d,e);case Se:return a=a.get(null===d.key?c:d.key)||null,q(b,a,d,e);case Te:return a=a.get(c)||null,v(b,a,d,e);case Ue:return a=\na.get(null===d.key?c:d.key)||null,y(b,a,d,e)}if(Ye(d)||Xe(d))return a=a.get(c)||null,u(b,a,d,e,null);$e(b,d)}return null}function L(e,g,m,A){for(var h=null,r=null,n=g,w=g=0,k=null;null!==n&&w<m.length;w++){n.index>w?(k=n,n=null):k=n.sibling;var x=G(e,n,m[w],A);if(null===x){null===n&&(n=k);break}a&&n&&null===x.alternate&&b(e,n);g=f(x,g,w);null===r?h=x:r.sibling=x;r=x;n=k}if(w===m.length)return c(e,n),h;if(null===n){for(;w<m.length;w++)if(n=z(e,m[w],A))g=f(n,g,w),null===r?h=n:r.sibling=n,r=n;return h}for(n=\nd(e,n);w<m.length;w++)if(k=I(n,e,w,m[w],A)){if(a&&null!==k.alternate)n[\"delete\"](null===k.key?w:k.key);g=f(k,g,w);null===r?h=k:r.sibling=k;r=k}a&&n.forEach(function(a){return b(e,a)});return h}function N(e,g,m,A){var h=Xe(m);\"function\"!==typeof h?E(\"150\"):void 0;m=h.call(m);null==m?E(\"151\"):void 0;for(var r=h=null,n=g,w=g=0,k=null,x=m.next();null!==n&&!x.done;w++,x=m.next()){n.index>w?(k=n,n=null):k=n.sibling;var J=G(e,n,x.value,A);if(null===J){n||(n=k);break}a&&n&&null===J.alternate&&b(e,n);g=f(J,\ng,w);null===r?h=J:r.sibling=J;r=J;n=k}if(x.done)return c(e,n),h;if(null===n){for(;!x.done;w++,x=m.next())x=z(e,x.value,A),null!==x&&(g=f(x,g,w),null===r?h=x:r.sibling=x,r=x);return h}for(n=d(e,n);!x.done;w++,x=m.next())if(x=I(n,e,w,x.value,A),null!==x){if(a&&null!==x.alternate)n[\"delete\"](null===x.key?w:x.key);g=f(x,g,w);null===r?h=x:r.sibling=x;r=x}a&&n.forEach(function(a){return b(e,a)});return h}return function(a,d,f,h){\"object\"===typeof f&&null!==f&&f.type===Ve&&null===f.key&&(f=f.props.children);\nvar m=\"object\"===typeof f&&null!==f;if(m)switch(f.$$typeof){case Re:a:{var r=f.key;for(m=d;null!==m;){if(m.key===r)if(10===m.tag?f.type===Ve:m.type===f.type){c(a,m.sibling);d=e(m,f.type===Ve?f.props.children:f.props,h);d.ref=Ze(m,f);d[\"return\"]=a;a=d;break a}else{c(a,m);break}else b(a,m);m=m.sibling}f.type===Ve?(d=ue(f.props.children,a.internalContextTag,h,f.key),d[\"return\"]=a,a=d):(h=te(f,a.internalContextTag,h),h.ref=Ze(d,f),h[\"return\"]=a,a=h)}return g(a);case Se:a:{for(m=f.key;null!==d;){if(d.key===\nm)if(7===d.tag){c(a,d.sibling);d=e(d,f,h);d[\"return\"]=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=we(f,a.internalContextTag,h);d[\"return\"]=a;a=d}return g(a);case Te:a:{if(null!==d)if(9===d.tag){c(a,d.sibling);d=e(d,null,h);d.type=f.value;d[\"return\"]=a;a=d;break a}else c(a,d);d=xe(f,a.internalContextTag,h);d.type=f.value;d[\"return\"]=a;a=d}return g(a);case Ue:a:{for(m=f.key;null!==d;){if(d.key===m)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===\nf.implementation){c(a,d.sibling);d=e(d,f.children||[],h);d[\"return\"]=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=ye(f,a.internalContextTag,h);d[\"return\"]=a;a=d}return g(a)}if(\"string\"===typeof f||\"number\"===typeof f)return f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f,h)):(c(a,d),d=ve(f,a.internalContextTag,h)),d[\"return\"]=a,a=d,g(a);if(Ye(f))return L(a,d,f,h);if(Xe(f))return N(a,d,f,h);m&&$e(a,f);if(\"undefined\"===typeof f)switch(a.tag){case 2:case 1:h=a.type,E(\"152\",h.displayName||\nh.name||\"Component\")}return c(a,d)}}var bf=af(!0),cf=af(!1);\nfunction df(a,b,c,d,e){function f(a,b,c){var d=b.expirationTime;b.child=null===a?cf(b,null,c,d):bf(b,a.child,c,d)}function g(a,b){var c=b.ref;null===c||a&&a.ref===c||(b.effectTag|=128)}function h(a,b,c,d){g(a,b);if(!c)return d&&re(b,!1),q(a,b);c=b.stateNode;id.current=b;var e=c.render();b.effectTag|=1;f(a,b,e);b.memoizedState=c.state;b.memoizedProps=c.props;d&&re(b,!0);return b.child}function k(a){var b=a.stateNode;b.pendingContext?oe(a,b.pendingContext,b.pendingContext!==b.context):b.context&&oe(a,\nb.context,!1);I(a,b.containerInfo)}function q(a,b){null!==a&&b.child!==a.child?E(\"153\"):void 0;if(null!==b.child){a=b.child;var c=se(a,a.pendingProps,a.expirationTime);b.child=c;for(c[\"return\"]=b;null!==a.sibling;)a=a.sibling,c=c.sibling=se(a,a.pendingProps,a.expirationTime),c[\"return\"]=b;c.sibling=null}return b.child}function v(a,b){switch(b.tag){case 3:k(b);break;case 2:qe(b);break;case 4:I(b,b.stateNode.containerInfo)}return null}var y=a.shouldSetTextContent,u=a.useSyncScheduling,z=a.shouldDeprioritizeSubtree,\nG=b.pushHostContext,I=b.pushHostContainer,L=c.enterHydrationState,N=c.resetHydrationState,J=c.tryToClaimNextHydratableInstance;a=Le(d,e,function(a,b){a.memoizedProps=b},function(a,b){a.memoizedState=b});var w=a.adoptClassInstance,m=a.constructClassInstance,A=a.mountClassInstance,Ob=a.updateClassInstance;return{beginWork:function(a,b,c){if(0===b.expirationTime||b.expirationTime>c)return v(a,b);switch(b.tag){case 0:null!==a?E(\"155\"):void 0;var d=b.type,e=b.pendingProps,r=ke(b);r=me(b,r);d=d(e,r);b.effectTag|=\n1;\"object\"===typeof d&&null!==d&&\"function\"===typeof d.render?(b.tag=2,e=qe(b),w(b,d),A(b,c),b=h(a,b,!0,e)):(b.tag=1,f(a,b,d),b.memoizedProps=e,b=b.child);return b;case 1:a:{e=b.type;c=b.pendingProps;d=b.memoizedProps;if(X.current)null===c&&(c=d);else if(null===c||d===c){b=q(a,b);break a}d=ke(b);d=me(b,d);e=e(c,d);b.effectTag|=1;f(a,b,e);b.memoizedProps=c;b=b.child}return b;case 2:return e=qe(b),d=void 0,null===a?b.stateNode?E(\"153\"):(m(b,b.pendingProps),A(b,c),d=!0):d=Ob(a,b,c),h(a,b,d,e);case 3:return k(b),\ne=b.updateQueue,null!==e?(d=b.memoizedState,e=Je(a,b,e,null,null,c),d===e?(N(),b=q(a,b)):(d=e.element,r=b.stateNode,(null===a||null===a.child)&&r.hydrate&&L(b)?(b.effectTag|=2,b.child=cf(b,null,d,c)):(N(),f(a,b,d)),b.memoizedState=e,b=b.child)):(N(),b=q(a,b)),b;case 5:G(b);null===a&&J(b);e=b.type;var n=b.memoizedProps;d=b.pendingProps;null===d&&(d=n,null===d?E(\"154\"):void 0);r=null!==a?a.memoizedProps:null;X.current||null!==d&&n!==d?(n=d.children,y(e,d)?n=null:r&&y(e,r)&&(b.effectTag|=16),g(a,b),\n2147483647!==c&&!u&&z(e,d)?(b.expirationTime=2147483647,b=null):(f(a,b,n),b.memoizedProps=d,b=b.child)):b=q(a,b);return b;case 6:return null===a&&J(b),a=b.pendingProps,null===a&&(a=b.memoizedProps),b.memoizedProps=a,null;case 8:b.tag=7;case 7:e=b.pendingProps;if(X.current)null===e&&(e=a&&a.memoizedProps,null===e?E(\"154\"):void 0);else if(null===e||b.memoizedProps===e)e=b.memoizedProps;d=e.children;b.stateNode=null===a?cf(b,b.stateNode,d,c):bf(b,b.stateNode,d,c);b.memoizedProps=e;return b.stateNode;\ncase 9:return null;case 4:a:{I(b,b.stateNode.containerInfo);e=b.pendingProps;if(X.current)null===e&&(e=a&&a.memoizedProps,null==e?E(\"154\"):void 0);else if(null===e||b.memoizedProps===e){b=q(a,b);break a}null===a?b.child=bf(b,null,e,c):f(a,b,e);b.memoizedProps=e;b=b.child}return b;case 10:a:{c=b.pendingProps;if(X.current)null===c&&(c=b.memoizedProps);else if(null===c||b.memoizedProps===c){b=q(a,b);break a}f(a,b,c);b.memoizedProps=c;b=b.child}return b;default:E(\"156\")}},beginFailedWork:function(a,b,\nc){switch(b.tag){case 2:qe(b);break;case 3:k(b);break;default:E(\"157\")}b.effectTag|=64;null===a?b.child=null:b.child!==a.child&&(b.child=a.child);if(0===b.expirationTime||b.expirationTime>c)return v(a,b);b.firstEffect=null;b.lastEffect=null;b.child=null===a?cf(b,null,null,c):bf(b,a.child,null,c);2===b.tag&&(a=b.stateNode,b.memoizedProps=a.props,b.memoizedState=a.state);return b.child}}}\nfunction ef(a,b,c){function d(a){a.effectTag|=4}var e=a.createInstance,f=a.createTextInstance,g=a.appendInitialChild,h=a.finalizeInitialChildren,k=a.prepareUpdate,q=a.persistence,v=b.getRootHostContainer,y=b.popHostContext,u=b.getHostContext,z=b.popHostContainer,G=c.prepareToHydrateHostInstance,I=c.prepareToHydrateHostTextInstance,L=c.popHydrationState,N=void 0,J=void 0,w=void 0;a.mutation?(N=function(){},J=function(a,b,c){(b.updateQueue=c)&&d(b)},w=function(a,b,c,e){c!==e&&d(b)}):q?E(\"235\"):E(\"236\");\nreturn{completeWork:function(a,b,c){var m=b.pendingProps;if(null===m)m=b.memoizedProps;else if(2147483647!==b.expirationTime||2147483647===c)b.pendingProps=null;switch(b.tag){case 1:return null;case 2:return ne(b),null;case 3:z(b);V(X,b);V(ie,b);m=b.stateNode;m.pendingContext&&(m.context=m.pendingContext,m.pendingContext=null);if(null===a||null===a.child)L(b),b.effectTag&=-3;N(b);return null;case 5:y(b);c=v();var A=b.type;if(null!==a&&null!=b.stateNode){var p=a.memoizedProps,q=b.stateNode,x=u();q=\nk(q,A,p,m,c,x);J(a,b,q,A,p,m,c);a.ref!==b.ref&&(b.effectTag|=128)}else{if(!m)return null===b.stateNode?E(\"166\"):void 0,null;a=u();if(L(b))G(b,c,a)&&d(b);else{a=e(A,m,c,a,b);a:for(p=b.child;null!==p;){if(5===p.tag||6===p.tag)g(a,p.stateNode);else if(4!==p.tag&&null!==p.child){p.child[\"return\"]=p;p=p.child;continue}if(p===b)break;for(;null===p.sibling;){if(null===p[\"return\"]||p[\"return\"]===b)break a;p=p[\"return\"]}p.sibling[\"return\"]=p[\"return\"];p=p.sibling}h(a,A,m,c)&&d(b);b.stateNode=a}null!==b.ref&&\n(b.effectTag|=128)}return null;case 6:if(a&&null!=b.stateNode)w(a,b,a.memoizedProps,m);else{if(\"string\"!==typeof m)return null===b.stateNode?E(\"166\"):void 0,null;a=v();c=u();L(b)?I(b)&&d(b):b.stateNode=f(m,a,c,b)}return null;case 7:(m=b.memoizedProps)?void 0:E(\"165\");b.tag=8;A=[];a:for((p=b.stateNode)&&(p[\"return\"]=b);null!==p;){if(5===p.tag||6===p.tag||4===p.tag)E(\"247\");else if(9===p.tag)A.push(p.type);else if(null!==p.child){p.child[\"return\"]=p;p=p.child;continue}for(;null===p.sibling;){if(null===\np[\"return\"]||p[\"return\"]===b)break a;p=p[\"return\"]}p.sibling[\"return\"]=p[\"return\"];p=p.sibling}p=m.handler;m=p(m.props,A);b.child=bf(b,null!==a?a.child:null,m,c);return b.child;case 8:return b.tag=7,null;case 9:return null;case 10:return null;case 4:return z(b),N(b),null;case 0:E(\"167\");default:E(\"156\")}}}}\nfunction ff(a,b){function c(a){var c=a.ref;if(null!==c)try{c(null)}catch(A){b(a,A)}}function d(a){\"function\"===typeof Ee&&Ee(a);switch(a.tag){case 2:c(a);var d=a.stateNode;if(\"function\"===typeof d.componentWillUnmount)try{d.props=a.memoizedProps,d.state=a.memoizedState,d.componentWillUnmount()}catch(A){b(a,A)}break;case 5:c(a);break;case 7:e(a.stateNode);break;case 4:k&&g(a)}}function e(a){for(var b=a;;)if(d(b),null===b.child||k&&4===b.tag){if(b===a)break;for(;null===b.sibling;){if(null===b[\"return\"]||\nb[\"return\"]===a)return;b=b[\"return\"]}b.sibling[\"return\"]=b[\"return\"];b=b.sibling}else b.child[\"return\"]=b,b=b.child}function f(a){return 5===a.tag||3===a.tag||4===a.tag}function g(a){for(var b=a,c=!1,f=void 0,g=void 0;;){if(!c){c=b[\"return\"];a:for(;;){null===c?E(\"160\"):void 0;switch(c.tag){case 5:f=c.stateNode;g=!1;break a;case 3:f=c.stateNode.containerInfo;g=!0;break a;case 4:f=c.stateNode.containerInfo;g=!0;break a}c=c[\"return\"]}c=!0}if(5===b.tag||6===b.tag)e(b),g?J(f,b.stateNode):N(f,b.stateNode);\nelse if(4===b.tag?f=b.stateNode.containerInfo:d(b),null!==b.child){b.child[\"return\"]=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b[\"return\"]||b[\"return\"]===a)return;b=b[\"return\"];4===b.tag&&(c=!1)}b.sibling[\"return\"]=b[\"return\"];b=b.sibling}}var h=a.getPublicInstance,k=a.mutation;a=a.persistence;k||(a?E(\"235\"):E(\"236\"));var q=k.commitMount,v=k.commitUpdate,y=k.resetTextContent,u=k.commitTextUpdate,z=k.appendChild,G=k.appendChildToContainer,I=k.insertBefore,L=k.insertInContainerBefore,\nN=k.removeChild,J=k.removeChildFromContainer;return{commitResetTextContent:function(a){y(a.stateNode)},commitPlacement:function(a){a:{for(var b=a[\"return\"];null!==b;){if(f(b)){var c=b;break a}b=b[\"return\"]}E(\"160\");c=void 0}var d=b=void 0;switch(c.tag){case 5:b=c.stateNode;d=!1;break;case 3:b=c.stateNode.containerInfo;d=!0;break;case 4:b=c.stateNode.containerInfo;d=!0;break;default:E(\"161\")}c.effectTag&16&&(y(b),c.effectTag&=-17);a:b:for(c=a;;){for(;null===c.sibling;){if(null===c[\"return\"]||f(c[\"return\"])){c=\nnull;break a}c=c[\"return\"]}c.sibling[\"return\"]=c[\"return\"];for(c=c.sibling;5!==c.tag&&6!==c.tag;){if(c.effectTag&2)continue b;if(null===c.child||4===c.tag)continue b;else c.child[\"return\"]=c,c=c.child}if(!(c.effectTag&2)){c=c.stateNode;break a}}for(var e=a;;){if(5===e.tag||6===e.tag)c?d?L(b,e.stateNode,c):I(b,e.stateNode,c):d?G(b,e.stateNode):z(b,e.stateNode);else if(4!==e.tag&&null!==e.child){e.child[\"return\"]=e;e=e.child;continue}if(e===a)break;for(;null===e.sibling;){if(null===e[\"return\"]||e[\"return\"]===\na)return;e=e[\"return\"]}e.sibling[\"return\"]=e[\"return\"];e=e.sibling}},commitDeletion:function(a){g(a);a[\"return\"]=null;a.child=null;a.alternate&&(a.alternate.child=null,a.alternate[\"return\"]=null)},commitWork:function(a,b){switch(b.tag){case 2:break;case 5:var c=b.stateNode;if(null!=c){var d=b.memoizedProps;a=null!==a?a.memoizedProps:d;var e=b.type,f=b.updateQueue;b.updateQueue=null;null!==f&&v(c,f,e,a,d,b)}break;case 6:null===b.stateNode?E(\"162\"):void 0;c=b.memoizedProps;u(b.stateNode,null!==a?a.memoizedProps:\nc,c);break;case 3:break;default:E(\"163\")}},commitLifeCycles:function(a,b){switch(b.tag){case 2:var c=b.stateNode;if(b.effectTag&4)if(null===a)c.props=b.memoizedProps,c.state=b.memoizedState,c.componentDidMount();else{var d=a.memoizedProps;a=a.memoizedState;c.props=b.memoizedProps;c.state=b.memoizedState;c.componentDidUpdate(d,a)}b=b.updateQueue;null!==b&&Ke(b,c);break;case 3:c=b.updateQueue;null!==c&&Ke(c,null!==b.child?b.child.stateNode:null);break;case 5:c=b.stateNode;null===a&&b.effectTag&4&&q(c,\nb.type,b.memoizedProps,b);break;case 6:break;case 4:break;default:E(\"163\")}},commitAttachRef:function(a){var b=a.ref;if(null!==b){var c=a.stateNode;switch(a.tag){case 5:b(h(c));break;default:b(c)}}},commitDetachRef:function(a){a=a.ref;null!==a&&a(null)}}}var gf={};\nfunction hf(a){function b(a){a===gf?E(\"174\"):void 0;return a}var c=a.getChildHostContext,d=a.getRootHostContext,e={current:gf},f={current:gf},g={current:gf};return{getHostContext:function(){return b(e.current)},getRootHostContainer:function(){return b(g.current)},popHostContainer:function(a){V(e,a);V(f,a);V(g,a)},popHostContext:function(a){f.current===a&&(V(e,a),V(f,a))},pushHostContainer:function(a,b){W(g,b,a);b=d(b);W(f,a,a);W(e,b,a)},pushHostContext:function(a){var d=b(g.current),h=b(e.current);\nd=c(h,a.type,d);h!==d&&(W(f,a,a),W(e,d,a))},resetHostContainer:function(){e.current=gf;g.current=gf}}}\nfunction jf(a){function b(a,b){var c=new Y(5,null,0);c.type=\"DELETED\";c.stateNode=b;c[\"return\"]=a;c.effectTag=8;null!==a.lastEffect?(a.lastEffect.nextEffect=c,a.lastEffect=c):a.firstEffect=a.lastEffect=c}function c(a,b){switch(a.tag){case 5:return b=f(b,a.type,a.pendingProps),null!==b?(a.stateNode=b,!0):!1;case 6:return b=g(b,a.pendingProps),null!==b?(a.stateNode=b,!0):!1;default:return!1}}function d(a){for(a=a[\"return\"];null!==a&&5!==a.tag&&3!==a.tag;)a=a[\"return\"];y=a}var e=a.shouldSetTextContent;\na=a.hydration;if(!a)return{enterHydrationState:function(){return!1},resetHydrationState:function(){},tryToClaimNextHydratableInstance:function(){},prepareToHydrateHostInstance:function(){E(\"175\")},prepareToHydrateHostTextInstance:function(){E(\"176\")},popHydrationState:function(){return!1}};var f=a.canHydrateInstance,g=a.canHydrateTextInstance,h=a.getNextHydratableSibling,k=a.getFirstHydratableChild,q=a.hydrateInstance,v=a.hydrateTextInstance,y=null,u=null,z=!1;return{enterHydrationState:function(a){u=\nk(a.stateNode.containerInfo);y=a;return z=!0},resetHydrationState:function(){u=y=null;z=!1},tryToClaimNextHydratableInstance:function(a){if(z){var d=u;if(d){if(!c(a,d)){d=h(d);if(!d||!c(a,d)){a.effectTag|=2;z=!1;y=a;return}b(y,u)}y=a;u=k(d)}else a.effectTag|=2,z=!1,y=a}},prepareToHydrateHostInstance:function(a,b,c){b=q(a.stateNode,a.type,a.memoizedProps,b,c,a);a.updateQueue=b;return null!==b?!0:!1},prepareToHydrateHostTextInstance:function(a){return v(a.stateNode,a.memoizedProps,a)},popHydrationState:function(a){if(a!==\ny)return!1;if(!z)return d(a),z=!0,!1;var c=a.type;if(5!==a.tag||\"head\"!==c&&\"body\"!==c&&!e(c,a.memoizedProps))for(c=u;c;)b(a,c),c=h(c);d(a);u=y?h(a.stateNode):null;return!0}}}\nfunction kf(a){function b(a){Qb=ja=!0;var b=a.stateNode;b.current===a?E(\"177\"):void 0;b.isReadyForCommit=!1;id.current=null;if(1<a.effectTag)if(null!==a.lastEffect){a.lastEffect.nextEffect=a;var c=a.firstEffect}else c=a;else c=a.firstEffect;yg();for(t=c;null!==t;){var d=!1,e=void 0;try{for(;null!==t;){var f=t.effectTag;f&16&&zg(t);if(f&128){var g=t.alternate;null!==g&&Ag(g)}switch(f&-242){case 2:Ne(t);t.effectTag&=-3;break;case 6:Ne(t);t.effectTag&=-3;Oe(t.alternate,t);break;case 4:Oe(t.alternate,\nt);break;case 8:Sc=!0,Bg(t),Sc=!1}t=t.nextEffect}}catch(Tc){d=!0,e=Tc}d&&(null===t?E(\"178\"):void 0,h(t,e),null!==t&&(t=t.nextEffect))}Cg();b.current=a;for(t=c;null!==t;){c=!1;d=void 0;try{for(;null!==t;){var k=t.effectTag;k&36&&Dg(t.alternate,t);k&128&&Eg(t);if(k&64)switch(e=t,f=void 0,null!==R&&(f=R.get(e),R[\"delete\"](e),null==f&&null!==e.alternate&&(e=e.alternate,f=R.get(e),R[\"delete\"](e))),null==f?E(\"184\"):void 0,e.tag){case 2:e.stateNode.componentDidCatch(f.error,{componentStack:f.componentStack});\nbreak;case 3:null===ca&&(ca=f.error);break;default:E(\"157\")}var Qc=t.nextEffect;t.nextEffect=null;t=Qc}}catch(Tc){c=!0,d=Tc}c&&(null===t?E(\"178\"):void 0,h(t,d),null!==t&&(t=t.nextEffect))}ja=Qb=!1;\"function\"===typeof De&&De(a.stateNode);ha&&(ha.forEach(G),ha=null);null!==ca&&(a=ca,ca=null,Ob(a));b=b.current.expirationTime;0===b&&(qa=R=null);return b}function c(a){for(;;){var b=Fg(a.alternate,a,H),c=a[\"return\"],d=a.sibling;var e=a;if(2147483647===H||2147483647!==e.expirationTime){if(2!==e.tag&&3!==\ne.tag)var f=0;else f=e.updateQueue,f=null===f?0:f.expirationTime;for(var g=e.child;null!==g;)0!==g.expirationTime&&(0===f||f>g.expirationTime)&&(f=g.expirationTime),g=g.sibling;e.expirationTime=f}if(null!==b)return b;null!==c&&(null===c.firstEffect&&(c.firstEffect=a.firstEffect),null!==a.lastEffect&&(null!==c.lastEffect&&(c.lastEffect.nextEffect=a.firstEffect),c.lastEffect=a.lastEffect),1<a.effectTag&&(null!==c.lastEffect?c.lastEffect.nextEffect=a:c.firstEffect=a,c.lastEffect=a));if(null!==d)return d;\nif(null!==c)a=c;else{a.stateNode.isReadyForCommit=!0;break}}return null}function d(a){var b=rg(a.alternate,a,H);null===b&&(b=c(a));id.current=null;return b}function e(a){var b=Gg(a.alternate,a,H);null===b&&(b=c(a));id.current=null;return b}function f(a){if(null!==R){if(!(0===H||H>a))if(H<=Uc)for(;null!==F;)F=k(F)?e(F):d(F);else for(;null!==F&&!A();)F=k(F)?e(F):d(F)}else if(!(0===H||H>a))if(H<=Uc)for(;null!==F;)F=d(F);else for(;null!==F&&!A();)F=d(F)}function g(a,b){ja?E(\"243\"):void 0;ja=!0;a.isReadyForCommit=\n!1;if(a!==ra||b!==H||null===F){for(;-1<he;)ge[he]=null,he--;je=D;ie.current=D;X.current=!1;x();ra=a;H=b;F=se(ra.current,null,b)}var c=!1,d=null;try{f(b)}catch(Rc){c=!0,d=Rc}for(;c;){if(eb){ca=d;break}var g=F;if(null===g)eb=!0;else{var k=h(g,d);null===k?E(\"183\"):void 0;if(!eb){try{c=k;d=b;for(k=c;null!==g;){switch(g.tag){case 2:ne(g);break;case 5:qg(g);break;case 3:p(g);break;case 4:p(g)}if(g===k||g.alternate===k)break;g=g[\"return\"]}F=e(c);f(d)}catch(Rc){c=!0;d=Rc;continue}break}}}b=ca;eb=ja=!1;ca=\nnull;null!==b&&Ob(b);return a.isReadyForCommit?a.current.alternate:null}function h(a,b){var c=id.current=null,d=!1,e=!1,f=null;if(3===a.tag)c=a,q(a)&&(eb=!0);else for(var g=a[\"return\"];null!==g&&null===c;){2===g.tag?\"function\"===typeof g.stateNode.componentDidCatch&&(d=!0,f=jd(g),c=g,e=!0):3===g.tag&&(c=g);if(q(g)){if(Sc||null!==ha&&(ha.has(g)||null!==g.alternate&&ha.has(g.alternate)))return null;c=null;e=!1}g=g[\"return\"]}if(null!==c){null===qa&&(qa=new Set);qa.add(c);var h=\"\";g=a;do{a:switch(g.tag){case 0:case 1:case 2:case 5:var k=\ng._debugOwner,Qc=g._debugSource;var m=jd(g);var n=null;k&&(n=jd(k));k=Qc;m=\"\\n in \"+(m||\"Unknown\")+(k?\" (at \"+k.fileName.replace(/^.*[\\\\\\/]/,\"\")+\":\"+k.lineNumber+\")\":n?\" (created by \"+n+\")\":\"\");break a;default:m=\"\"}h+=m;g=g[\"return\"]}while(g);g=h;a=jd(a);null===R&&(R=new Map);b={componentName:a,componentStack:g,error:b,errorBoundary:d?c.stateNode:null,errorBoundaryFound:d,errorBoundaryName:f,willRetry:e};R.set(c,b);try{var p=b.error;p&&p.suppressReactErrorLogging||console.error(p)}catch(Vc){Vc&&\nVc.suppressReactErrorLogging||console.error(Vc)}Qb?(null===ha&&(ha=new Set),ha.add(c)):G(c);return c}null===ca&&(ca=b);return null}function k(a){return null!==R&&(R.has(a)||null!==a.alternate&&R.has(a.alternate))}function q(a){return null!==qa&&(qa.has(a)||null!==a.alternate&&qa.has(a.alternate))}function v(){return 20*(((I()+100)/20|0)+1)}function y(a){return 0!==ka?ka:ja?Qb?1:H:!Hg||a.internalContextTag&1?v():1}function u(a,b){return z(a,b,!1)}function z(a,b){for(;null!==a;){if(0===a.expirationTime||\na.expirationTime>b)a.expirationTime=b;null!==a.alternate&&(0===a.alternate.expirationTime||a.alternate.expirationTime>b)&&(a.alternate.expirationTime=b);if(null===a[\"return\"])if(3===a.tag){var c=a.stateNode;!ja&&c===ra&&b<H&&(F=ra=null,H=0);var d=c,e=b;Rb>Ig&&E(\"185\");if(null===d.nextScheduledRoot)d.remainingExpirationTime=e,null===O?(sa=O=d,d.nextScheduledRoot=d):(O=O.nextScheduledRoot=d,O.nextScheduledRoot=sa);else{var f=d.remainingExpirationTime;if(0===f||e<f)d.remainingExpirationTime=e}Fa||(la?\nSb&&(ma=d,na=1,m(ma,na)):1===e?w(1,null):L(e));!ja&&c===ra&&b<H&&(F=ra=null,H=0)}else break;a=a[\"return\"]}}function G(a){z(a,1,!0)}function I(){return Uc=((Wc()-Pe)/10|0)+2}function L(a){if(0!==Tb){if(a>Tb)return;Jg(Xc)}var b=Wc()-Pe;Tb=a;Xc=Kg(J,{timeout:10*(a-2)-b})}function N(){var a=0,b=null;if(null!==O)for(var c=O,d=sa;null!==d;){var e=d.remainingExpirationTime;if(0===e){null===c||null===O?E(\"244\"):void 0;if(d===d.nextScheduledRoot){sa=O=d.nextScheduledRoot=null;break}else if(d===sa)sa=e=d.nextScheduledRoot,\nO.nextScheduledRoot=e,d.nextScheduledRoot=null;else if(d===O){O=c;O.nextScheduledRoot=sa;d.nextScheduledRoot=null;break}else c.nextScheduledRoot=d.nextScheduledRoot,d.nextScheduledRoot=null;d=c.nextScheduledRoot}else{if(0===a||e<a)a=e,b=d;if(d===O)break;c=d;d=d.nextScheduledRoot}}c=ma;null!==c&&c===b?Rb++:Rb=0;ma=b;na=a}function J(a){w(0,a)}function w(a,b){fb=b;for(N();null!==ma&&0!==na&&(0===a||na<=a)&&!Yc;)m(ma,na),N();null!==fb&&(Tb=0,Xc=-1);0!==na&&L(na);fb=null;Yc=!1;Rb=0;if(Ub)throw a=Zc,Zc=\nnull,Ub=!1,a;}function m(a,c){Fa?E(\"245\"):void 0;Fa=!0;if(c<=I()){var d=a.finishedWork;null!==d?(a.finishedWork=null,a.remainingExpirationTime=b(d)):(a.finishedWork=null,d=g(a,c),null!==d&&(a.remainingExpirationTime=b(d)))}else d=a.finishedWork,null!==d?(a.finishedWork=null,a.remainingExpirationTime=b(d)):(a.finishedWork=null,d=g(a,c),null!==d&&(A()?a.finishedWork=d:a.remainingExpirationTime=b(d)));Fa=!1}function A(){return null===fb||fb.timeRemaining()>Lg?!1:Yc=!0}function Ob(a){null===ma?E(\"246\"):\nvoid 0;ma.remainingExpirationTime=0;Ub||(Ub=!0,Zc=a)}var r=hf(a),n=jf(a),p=r.popHostContainer,qg=r.popHostContext,x=r.resetHostContainer,Me=df(a,r,n,u,y),rg=Me.beginWork,Gg=Me.beginFailedWork,Fg=ef(a,r,n).completeWork;r=ff(a,h);var zg=r.commitResetTextContent,Ne=r.commitPlacement,Bg=r.commitDeletion,Oe=r.commitWork,Dg=r.commitLifeCycles,Eg=r.commitAttachRef,Ag=r.commitDetachRef,Wc=a.now,Kg=a.scheduleDeferredCallback,Jg=a.cancelDeferredCallback,Hg=a.useSyncScheduling,yg=a.prepareForCommit,Cg=a.resetAfterCommit,\nPe=Wc(),Uc=2,ka=0,ja=!1,F=null,ra=null,H=0,t=null,R=null,qa=null,ha=null,ca=null,eb=!1,Qb=!1,Sc=!1,sa=null,O=null,Tb=0,Xc=-1,Fa=!1,ma=null,na=0,Yc=!1,Ub=!1,Zc=null,fb=null,la=!1,Sb=!1,Ig=1E3,Rb=0,Lg=1;return{computeAsyncExpiration:v,computeExpirationForFiber:y,scheduleWork:u,batchedUpdates:function(a,b){var c=la;la=!0;try{return a(b)}finally{(la=c)||Fa||w(1,null)}},unbatchedUpdates:function(a){if(la&&!Sb){Sb=!0;try{return a()}finally{Sb=!1}}return a()},flushSync:function(a){var b=la;la=!0;try{a:{var c=\nka;ka=1;try{var d=a();break a}finally{ka=c}d=void 0}return d}finally{la=b,Fa?E(\"187\"):void 0,w(1,null)}},deferredUpdates:function(a){var b=ka;ka=v();try{return a()}finally{ka=b}}}}\nfunction lf(a){function b(a){a=od(a);return null===a?null:a.stateNode}var c=a.getPublicInstance;a=kf(a);var d=a.computeAsyncExpiration,e=a.computeExpirationForFiber,f=a.scheduleWork;return{createContainer:function(a,b){var c=new Y(3,null,0);a={current:c,containerInfo:a,pendingChildren:null,remainingExpirationTime:0,isReadyForCommit:!1,finishedWork:null,context:null,pendingContext:null,hydrate:b,nextScheduledRoot:null};return c.stateNode=a},updateContainer:function(a,b,c,q){var g=b.current;if(c){c=\nc._reactInternalFiber;var h;b:{2===kd(c)&&2===c.tag?void 0:E(\"170\");for(h=c;3!==h.tag;){if(le(h)){h=h.stateNode.__reactInternalMemoizedMergedChildContext;break b}(h=h[\"return\"])?void 0:E(\"171\")}h=h.stateNode.context}c=le(c)?pe(c,h):h}else c=D;null===b.context?b.context=c:b.pendingContext=c;b=q;b=void 0===b?null:b;q=null!=a&&null!=a.type&&null!=a.type.prototype&&!0===a.type.prototype.unstable_isAsyncReactComponent?d():e(g);He(g,{expirationTime:q,partialState:{element:a},callback:b,isReplace:!1,isForced:!1,\nnextCallback:null,next:null});f(g,q)},batchedUpdates:a.batchedUpdates,unbatchedUpdates:a.unbatchedUpdates,deferredUpdates:a.deferredUpdates,flushSync:a.flushSync,getPublicRootInstance:function(a){a=a.current;if(!a.child)return null;switch(a.child.tag){case 5:return c(a.child.stateNode);default:return a.child.stateNode}},findHostInstance:b,findHostInstanceWithNoPortals:function(a){a=pd(a);return null===a?null:a.stateNode},injectIntoDevTools:function(a){var c=a.findFiberByHostInstance;return Ce(B({},\na,{findHostInstanceByFiber:function(a){return b(a)},findFiberByHostInstance:function(a){return c?c(a):null}}))}}}var mf=Object.freeze({default:lf}),nf=mf&&lf||mf,of=nf[\"default\"]?nf[\"default\"]:nf;function pf(a,b,c){var d=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:Ue,key:null==d?null:\"\"+d,children:a,containerInfo:b,implementation:c}}var qf=\"object\"===typeof performance&&\"function\"===typeof performance.now,rf=void 0;rf=qf?function(){return performance.now()}:function(){return Date.now()};\nvar sf=void 0,tf=void 0;\nif(l.canUseDOM)if(\"function\"!==typeof requestIdleCallback||\"function\"!==typeof cancelIdleCallback){var uf=null,vf=!1,wf=-1,xf=!1,yf=0,zf=33,Af=33,Bf;Bf=qf?{didTimeout:!1,timeRemaining:function(){var a=yf-performance.now();return 0<a?a:0}}:{didTimeout:!1,timeRemaining:function(){var a=yf-Date.now();return 0<a?a:0}};var Cf=\"__reactIdleCallback$\"+Math.random().toString(36).slice(2);window.addEventListener(\"message\",function(a){if(a.source===window&&a.data===Cf){vf=!1;a=rf();if(0>=yf-a)if(-1!==wf&&wf<=\na)Bf.didTimeout=!0;else{xf||(xf=!0,requestAnimationFrame(Df));return}else Bf.didTimeout=!1;wf=-1;a=uf;uf=null;null!==a&&a(Bf)}},!1);var Df=function(a){xf=!1;var b=a-yf+Af;b<Af&&zf<Af?(8>b&&(b=8),Af=b<zf?zf:b):zf=b;yf=a+Af;vf||(vf=!0,window.postMessage(Cf,\"*\"))};sf=function(a,b){uf=a;null!=b&&\"number\"===typeof b.timeout&&(wf=rf()+b.timeout);xf||(xf=!0,requestAnimationFrame(Df));return 0};tf=function(){uf=null;vf=!1;wf=-1}}else sf=window.requestIdleCallback,tf=window.cancelIdleCallback;else sf=function(a){return setTimeout(function(){a({timeRemaining:function(){return Infinity}})})},\ntf=function(a){clearTimeout(a)};var Ef=/^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$/,Ff={},Gf={};\nfunction Hf(a){if(Gf.hasOwnProperty(a))return!0;if(Ff.hasOwnProperty(a))return!1;if(Ef.test(a))return Gf[a]=!0;Ff[a]=!0;return!1}\nfunction If(a,b,c){var d=wa(b);if(d&&va(b,c)){var e=d.mutationMethod;e?e(a,c):null==c||d.hasBooleanValue&&!c||d.hasNumericValue&&isNaN(c)||d.hasPositiveNumericValue&&1>c||d.hasOverloadedBooleanValue&&!1===c?Jf(a,b):d.mustUseProperty?a[d.propertyName]=c:(b=d.attributeName,(e=d.attributeNamespace)?a.setAttributeNS(e,b,\"\"+c):d.hasBooleanValue||d.hasOverloadedBooleanValue&&!0===c?a.setAttribute(b,\"\"):a.setAttribute(b,\"\"+c))}else Kf(a,b,va(b,c)?c:null)}\nfunction Kf(a,b,c){Hf(b)&&(null==c?a.removeAttribute(b):a.setAttribute(b,\"\"+c))}function Jf(a,b){var c=wa(b);c?(b=c.mutationMethod)?b(a,void 0):c.mustUseProperty?a[c.propertyName]=c.hasBooleanValue?!1:\"\":a.removeAttribute(c.attributeName):a.removeAttribute(b)}\nfunction Lf(a,b){var c=b.value,d=b.checked;return B({type:void 0,step:void 0,min:void 0,max:void 0},b,{defaultChecked:void 0,defaultValue:void 0,value:null!=c?c:a._wrapperState.initialValue,checked:null!=d?d:a._wrapperState.initialChecked})}function Mf(a,b){var c=b.defaultValue;a._wrapperState={initialChecked:null!=b.checked?b.checked:b.defaultChecked,initialValue:null!=b.value?b.value:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}\nfunction Nf(a,b){b=b.checked;null!=b&&If(a,\"checked\",b)}function Of(a,b){Nf(a,b);var c=b.value;if(null!=c)if(0===c&&\"\"===a.value)a.value=\"0\";else if(\"number\"===b.type){if(b=parseFloat(a.value)||0,c!=b||c==b&&a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else null==b.value&&null!=b.defaultValue&&a.defaultValue!==\"\"+b.defaultValue&&(a.defaultValue=\"\"+b.defaultValue),null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction Pf(a,b){switch(b.type){case \"submit\":case \"reset\":break;case \"color\":case \"date\":case \"datetime\":case \"datetime-local\":case \"month\":case \"time\":case \"week\":a.value=\"\";a.value=a.defaultValue;break;default:a.value=a.value}b=a.name;\"\"!==b&&(a.name=\"\");a.defaultChecked=!a.defaultChecked;a.defaultChecked=!a.defaultChecked;\"\"!==b&&(a.name=b)}function Qf(a){var b=\"\";aa.Children.forEach(a,function(a){null==a||\"string\"!==typeof a&&\"number\"!==typeof a||(b+=a)});return b}\nfunction Rf(a,b){a=B({children:void 0},b);if(b=Qf(b.children))a.children=b;return a}function Sf(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e<c.length;e++)b[\"$\"+c[e]]=!0;for(c=0;c<a.length;c++)e=b.hasOwnProperty(\"$\"+a[c].value),a[c].selected!==e&&(a[c].selected=e),e&&d&&(a[c].defaultSelected=!0)}else{c=\"\"+c;b=null;for(e=0;e<a.length;e++){if(a[e].value===c){a[e].selected=!0;d&&(a[e].defaultSelected=!0);return}null!==b||a[e].disabled||(b=a[e])}null!==b&&(b.selected=!0)}}\nfunction Tf(a,b){var c=b.value;a._wrapperState={initialValue:null!=c?c:b.defaultValue,wasMultiple:!!b.multiple}}function Uf(a,b){null!=b.dangerouslySetInnerHTML?E(\"91\"):void 0;return B({},b,{value:void 0,defaultValue:void 0,children:\"\"+a._wrapperState.initialValue})}function Vf(a,b){var c=b.value;null==c&&(c=b.defaultValue,b=b.children,null!=b&&(null!=c?E(\"92\"):void 0,Array.isArray(b)&&(1>=b.length?void 0:E(\"93\"),b=b[0]),c=\"\"+b),null==c&&(c=\"\"));a._wrapperState={initialValue:\"\"+c}}\nfunction Wf(a,b){var c=b.value;null!=c&&(c=\"\"+c,c!==a.value&&(a.value=c),null==b.defaultValue&&(a.defaultValue=c));null!=b.defaultValue&&(a.defaultValue=b.defaultValue)}function Xf(a){var b=a.textContent;b===a._wrapperState.initialValue&&(a.value=b)}var Yf={html:\"http://www.w3.org/1999/xhtml\",mathml:\"http://www.w3.org/1998/Math/MathML\",svg:\"http://www.w3.org/2000/svg\"};\nfunction Zf(a){switch(a){case \"svg\":return\"http://www.w3.org/2000/svg\";case \"math\":return\"http://www.w3.org/1998/Math/MathML\";default:return\"http://www.w3.org/1999/xhtml\"}}function $f(a,b){return null==a||\"http://www.w3.org/1999/xhtml\"===a?Zf(b):\"http://www.w3.org/2000/svg\"===a&&\"foreignObject\"===b?\"http://www.w3.org/1999/xhtml\":a}\nvar ag=void 0,bg=function(a){return\"undefined\"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(b,c,d,e){MSApp.execUnsafeLocalFunction(function(){return a(b,c,d,e)})}:a}(function(a,b){if(a.namespaceURI!==Yf.svg||\"innerHTML\"in a)a.innerHTML=b;else{ag=ag||document.createElement(\"div\");ag.innerHTML=\"\\x3csvg\\x3e\"+b+\"\\x3c/svg\\x3e\";for(b=ag.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction cg(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}\nvar dg={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,\nstopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},eg=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(dg).forEach(function(a){eg.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);dg[b]=dg[a]})});\nfunction fg(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\");var e=c;var f=b[c];e=null==f||\"boolean\"===typeof f||\"\"===f?\"\":d||\"number\"!==typeof f||0===f||dg.hasOwnProperty(e)&&dg[e]?(\"\"+f).trim():f+\"px\";\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var gg=B({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction hg(a,b,c){b&&(gg[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML?E(\"137\",a,c()):void 0),null!=b.dangerouslySetInnerHTML&&(null!=b.children?E(\"60\"):void 0,\"object\"===typeof b.dangerouslySetInnerHTML&&\"__html\"in b.dangerouslySetInnerHTML?void 0:E(\"61\")),null!=b.style&&\"object\"!==typeof b.style?E(\"62\",c()):void 0)}\nfunction ig(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}var jg=Yf.html,kg=C.thatReturns(\"\");\nfunction lg(a,b){a=9===a.nodeType||11===a.nodeType?a:a.ownerDocument;var c=Hd(a);b=Sa[b];for(var d=0;d<b.length;d++){var e=b[d];c.hasOwnProperty(e)&&c[e]||(\"topScroll\"===e?wd(\"topScroll\",\"scroll\",a):\"topFocus\"===e||\"topBlur\"===e?(wd(\"topFocus\",\"focus\",a),wd(\"topBlur\",\"blur\",a),c.topBlur=!0,c.topFocus=!0):\"topCancel\"===e?(yc(\"cancel\",!0)&&wd(\"topCancel\",\"cancel\",a),c.topCancel=!0):\"topClose\"===e?(yc(\"close\",!0)&&wd(\"topClose\",\"close\",a),c.topClose=!0):Dd.hasOwnProperty(e)&&U(e,Dd[e],a),c[e]=!0)}}\nvar mg={topAbort:\"abort\",topCanPlay:\"canplay\",topCanPlayThrough:\"canplaythrough\",topDurationChange:\"durationchange\",topEmptied:\"emptied\",topEncrypted:\"encrypted\",topEnded:\"ended\",topError:\"error\",topLoadedData:\"loadeddata\",topLoadedMetadata:\"loadedmetadata\",topLoadStart:\"loadstart\",topPause:\"pause\",topPlay:\"play\",topPlaying:\"playing\",topProgress:\"progress\",topRateChange:\"ratechange\",topSeeked:\"seeked\",topSeeking:\"seeking\",topStalled:\"stalled\",topSuspend:\"suspend\",topTimeUpdate:\"timeupdate\",topVolumeChange:\"volumechange\",\ntopWaiting:\"waiting\"};function ng(a,b,c,d){c=9===c.nodeType?c:c.ownerDocument;d===jg&&(d=Zf(a));d===jg?\"script\"===a?(a=c.createElement(\"div\"),a.innerHTML=\"\\x3cscript\\x3e\\x3c/script\\x3e\",a=a.removeChild(a.firstChild)):a=\"string\"===typeof b.is?c.createElement(a,{is:b.is}):c.createElement(a):a=c.createElementNS(d,a);return a}function og(a,b){return(9===b.nodeType?b:b.ownerDocument).createTextNode(a)}\nfunction pg(a,b,c,d){var e=ig(b,c);switch(b){case \"iframe\":case \"object\":U(\"topLoad\",\"load\",a);var f=c;break;case \"video\":case \"audio\":for(f in mg)mg.hasOwnProperty(f)&&U(f,mg[f],a);f=c;break;case \"source\":U(\"topError\",\"error\",a);f=c;break;case \"img\":case \"image\":U(\"topError\",\"error\",a);U(\"topLoad\",\"load\",a);f=c;break;case \"form\":U(\"topReset\",\"reset\",a);U(\"topSubmit\",\"submit\",a);f=c;break;case \"details\":U(\"topToggle\",\"toggle\",a);f=c;break;case \"input\":Mf(a,c);f=Lf(a,c);U(\"topInvalid\",\"invalid\",a);\nlg(d,\"onChange\");break;case \"option\":f=Rf(a,c);break;case \"select\":Tf(a,c);f=B({},c,{value:void 0});U(\"topInvalid\",\"invalid\",a);lg(d,\"onChange\");break;case \"textarea\":Vf(a,c);f=Uf(a,c);U(\"topInvalid\",\"invalid\",a);lg(d,\"onChange\");break;default:f=c}hg(b,f,kg);var g=f,h;for(h in g)if(g.hasOwnProperty(h)){var k=g[h];\"style\"===h?fg(a,k,kg):\"dangerouslySetInnerHTML\"===h?(k=k?k.__html:void 0,null!=k&&bg(a,k)):\"children\"===h?\"string\"===typeof k?(\"textarea\"!==b||\"\"!==k)&&cg(a,k):\"number\"===typeof k&&cg(a,\n\"\"+k):\"suppressContentEditableWarning\"!==h&&\"suppressHydrationWarning\"!==h&&\"autoFocus\"!==h&&(Ra.hasOwnProperty(h)?null!=k&&lg(d,h):e?Kf(a,h,k):null!=k&&If(a,h,k))}switch(b){case \"input\":Bc(a);Pf(a,c);break;case \"textarea\":Bc(a);Xf(a,c);break;case \"option\":null!=c.value&&a.setAttribute(\"value\",c.value);break;case \"select\":a.multiple=!!c.multiple;b=c.value;null!=b?Sf(a,!!c.multiple,b,!1):null!=c.defaultValue&&Sf(a,!!c.multiple,c.defaultValue,!0);break;default:\"function\"===typeof f.onClick&&(a.onclick=\nC)}}\nfunction sg(a,b,c,d,e){var f=null;switch(b){case \"input\":c=Lf(a,c);d=Lf(a,d);f=[];break;case \"option\":c=Rf(a,c);d=Rf(a,d);f=[];break;case \"select\":c=B({},c,{value:void 0});d=B({},d,{value:void 0});f=[];break;case \"textarea\":c=Uf(a,c);d=Uf(a,d);f=[];break;default:\"function\"!==typeof c.onClick&&\"function\"===typeof d.onClick&&(a.onclick=C)}hg(b,d,kg);var g,h;a=null;for(g in c)if(!d.hasOwnProperty(g)&&c.hasOwnProperty(g)&&null!=c[g])if(\"style\"===g)for(h in b=c[g],b)b.hasOwnProperty(h)&&(a||(a={}),a[h]=\n\"\");else\"dangerouslySetInnerHTML\"!==g&&\"children\"!==g&&\"suppressContentEditableWarning\"!==g&&\"suppressHydrationWarning\"!==g&&\"autoFocus\"!==g&&(Ra.hasOwnProperty(g)?f||(f=[]):(f=f||[]).push(g,null));for(g in d){var k=d[g];b=null!=c?c[g]:void 0;if(d.hasOwnProperty(g)&&k!==b&&(null!=k||null!=b))if(\"style\"===g)if(b){for(h in b)!b.hasOwnProperty(h)||k&&k.hasOwnProperty(h)||(a||(a={}),a[h]=\"\");for(h in k)k.hasOwnProperty(h)&&b[h]!==k[h]&&(a||(a={}),a[h]=k[h])}else a||(f||(f=[]),f.push(g,a)),a=k;else\"dangerouslySetInnerHTML\"===\ng?(k=k?k.__html:void 0,b=b?b.__html:void 0,null!=k&&b!==k&&(f=f||[]).push(g,\"\"+k)):\"children\"===g?b===k||\"string\"!==typeof k&&\"number\"!==typeof k||(f=f||[]).push(g,\"\"+k):\"suppressContentEditableWarning\"!==g&&\"suppressHydrationWarning\"!==g&&(Ra.hasOwnProperty(g)?(null!=k&&lg(e,g),f||b===k||(f=[])):(f=f||[]).push(g,k))}a&&(f=f||[]).push(\"style\",a);return f}\nfunction tg(a,b,c,d,e){\"input\"===c&&\"radio\"===e.type&&null!=e.name&&Nf(a,e);ig(c,d);d=ig(c,e);for(var f=0;f<b.length;f+=2){var g=b[f],h=b[f+1];\"style\"===g?fg(a,h,kg):\"dangerouslySetInnerHTML\"===g?bg(a,h):\"children\"===g?cg(a,h):d?null!=h?Kf(a,g,h):a.removeAttribute(g):null!=h?If(a,g,h):Jf(a,g)}switch(c){case \"input\":Of(a,e);break;case \"textarea\":Wf(a,e);break;case \"select\":a._wrapperState.initialValue=void 0,b=a._wrapperState.wasMultiple,a._wrapperState.wasMultiple=!!e.multiple,c=e.value,null!=c?Sf(a,\n!!e.multiple,c,!1):b!==!!e.multiple&&(null!=e.defaultValue?Sf(a,!!e.multiple,e.defaultValue,!0):Sf(a,!!e.multiple,e.multiple?[]:\"\",!1))}}\nfunction ug(a,b,c,d,e){switch(b){case \"iframe\":case \"object\":U(\"topLoad\",\"load\",a);break;case \"video\":case \"audio\":for(var f in mg)mg.hasOwnProperty(f)&&U(f,mg[f],a);break;case \"source\":U(\"topError\",\"error\",a);break;case \"img\":case \"image\":U(\"topError\",\"error\",a);U(\"topLoad\",\"load\",a);break;case \"form\":U(\"topReset\",\"reset\",a);U(\"topSubmit\",\"submit\",a);break;case \"details\":U(\"topToggle\",\"toggle\",a);break;case \"input\":Mf(a,c);U(\"topInvalid\",\"invalid\",a);lg(e,\"onChange\");break;case \"select\":Tf(a,c);\nU(\"topInvalid\",\"invalid\",a);lg(e,\"onChange\");break;case \"textarea\":Vf(a,c),U(\"topInvalid\",\"invalid\",a),lg(e,\"onChange\")}hg(b,c,kg);d=null;for(var g in c)c.hasOwnProperty(g)&&(f=c[g],\"children\"===g?\"string\"===typeof f?a.textContent!==f&&(d=[\"children\",f]):\"number\"===typeof f&&a.textContent!==\"\"+f&&(d=[\"children\",\"\"+f]):Ra.hasOwnProperty(g)&&null!=f&&lg(e,g));switch(b){case \"input\":Bc(a);Pf(a,c);break;case \"textarea\":Bc(a);Xf(a,c);break;case \"select\":case \"option\":break;default:\"function\"===typeof c.onClick&&\n(a.onclick=C)}return d}function vg(a,b){return a.nodeValue!==b}\nvar wg=Object.freeze({createElement:ng,createTextNode:og,setInitialProperties:pg,diffProperties:sg,updateProperties:tg,diffHydratedProperties:ug,diffHydratedText:vg,warnForUnmatchedText:function(){},warnForDeletedHydratableElement:function(){},warnForDeletedHydratableText:function(){},warnForInsertedHydratedElement:function(){},warnForInsertedHydratedText:function(){},restoreControlledState:function(a,b,c){switch(b){case \"input\":Of(a,c);b=c.name;if(\"radio\"===c.type&&null!=b){for(c=a;c.parentNode;)c=\nc.parentNode;c=c.querySelectorAll(\"input[name\\x3d\"+JSON.stringify(\"\"+b)+'][type\\x3d\"radio\"]');for(b=0;b<c.length;b++){var d=c[b];if(d!==a&&d.form===a.form){var e=rb(d);e?void 0:E(\"90\");Cc(d);Of(d,e)}}}break;case \"textarea\":Wf(a,c);break;case \"select\":b=c.value,null!=b&&Sf(a,!!c.multiple,b,!1)}}});nc.injectFiberControlledHostComponent(wg);var xg=null,Mg=null;function Ng(a){return!(!a||1!==a.nodeType&&9!==a.nodeType&&11!==a.nodeType&&(8!==a.nodeType||\" react-mount-point-unstable \"!==a.nodeValue))}\nfunction Og(a){a=a?9===a.nodeType?a.documentElement:a.firstChild:null;return!(!a||1!==a.nodeType||!a.hasAttribute(\"data-reactroot\"))}\nvar Z=of({getRootHostContext:function(a){var b=a.nodeType;switch(b){case 9:case 11:a=(a=a.documentElement)?a.namespaceURI:$f(null,\"\");break;default:b=8===b?a.parentNode:a,a=b.namespaceURI||null,b=b.tagName,a=$f(a,b)}return a},getChildHostContext:function(a,b){return $f(a,b)},getPublicInstance:function(a){return a},prepareForCommit:function(){xg=td;var a=da();if(Kd(a)){if(\"selectionStart\"in a)var b={start:a.selectionStart,end:a.selectionEnd};else a:{var c=window.getSelection&&window.getSelection();\nif(c&&0!==c.rangeCount){b=c.anchorNode;var d=c.anchorOffset,e=c.focusNode;c=c.focusOffset;try{b.nodeType,e.nodeType}catch(z){b=null;break a}var f=0,g=-1,h=-1,k=0,q=0,v=a,y=null;b:for(;;){for(var u;;){v!==b||0!==d&&3!==v.nodeType||(g=f+d);v!==e||0!==c&&3!==v.nodeType||(h=f+c);3===v.nodeType&&(f+=v.nodeValue.length);if(null===(u=v.firstChild))break;y=v;v=u}for(;;){if(v===a)break b;y===b&&++k===d&&(g=f);y===e&&++q===c&&(h=f);if(null!==(u=v.nextSibling))break;v=y;y=v.parentNode}v=u}b=-1===g||-1===h?null:\n{start:g,end:h}}else b=null}b=b||{start:0,end:0}}else b=null;Mg={focusedElem:a,selectionRange:b};ud(!1)},resetAfterCommit:function(){var a=Mg,b=da(),c=a.focusedElem,d=a.selectionRange;if(b!==c&&fa(document.documentElement,c)){if(Kd(c))if(b=d.start,a=d.end,void 0===a&&(a=b),\"selectionStart\"in c)c.selectionStart=b,c.selectionEnd=Math.min(a,c.value.length);else if(window.getSelection){b=window.getSelection();var e=c[Eb()].length;a=Math.min(d.start,e);d=void 0===d.end?a:Math.min(d.end,e);!b.extend&&a>\nd&&(e=d,d=a,a=e);e=Jd(c,a);var f=Jd(c,d);if(e&&f&&(1!==b.rangeCount||b.anchorNode!==e.node||b.anchorOffset!==e.offset||b.focusNode!==f.node||b.focusOffset!==f.offset)){var g=document.createRange();g.setStart(e.node,e.offset);b.removeAllRanges();a>d?(b.addRange(g),b.extend(f.node,f.offset)):(g.setEnd(f.node,f.offset),b.addRange(g))}}b=[];for(a=c;a=a.parentNode;)1===a.nodeType&&b.push({element:a,left:a.scrollLeft,top:a.scrollTop});ia(c);for(c=0;c<b.length;c++)a=b[c],a.element.scrollLeft=a.left,a.element.scrollTop=\na.top}Mg=null;ud(xg);xg=null},createInstance:function(a,b,c,d,e){a=ng(a,b,c,d);a[Q]=e;a[ob]=b;return a},appendInitialChild:function(a,b){a.appendChild(b)},finalizeInitialChildren:function(a,b,c,d){pg(a,b,c,d);a:{switch(b){case \"button\":case \"input\":case \"select\":case \"textarea\":a=!!c.autoFocus;break a}a=!1}return a},prepareUpdate:function(a,b,c,d,e){return sg(a,b,c,d,e)},shouldSetTextContent:function(a,b){return\"textarea\"===a||\"string\"===typeof b.children||\"number\"===typeof b.children||\"object\"===\ntypeof b.dangerouslySetInnerHTML&&null!==b.dangerouslySetInnerHTML&&\"string\"===typeof b.dangerouslySetInnerHTML.__html},shouldDeprioritizeSubtree:function(a,b){return!!b.hidden},createTextInstance:function(a,b,c,d){a=og(a,b);a[Q]=d;return a},now:rf,mutation:{commitMount:function(a){a.focus()},commitUpdate:function(a,b,c,d,e){a[ob]=e;tg(a,b,c,d,e)},resetTextContent:function(a){a.textContent=\"\"},commitTextUpdate:function(a,b,c){a.nodeValue=c},appendChild:function(a,b){a.appendChild(b)},appendChildToContainer:function(a,\nb){8===a.nodeType?a.parentNode.insertBefore(b,a):a.appendChild(b)},insertBefore:function(a,b,c){a.insertBefore(b,c)},insertInContainerBefore:function(a,b,c){8===a.nodeType?a.parentNode.insertBefore(b,c):a.insertBefore(b,c)},removeChild:function(a,b){a.removeChild(b)},removeChildFromContainer:function(a,b){8===a.nodeType?a.parentNode.removeChild(b):a.removeChild(b)}},hydration:{canHydrateInstance:function(a,b){return 1!==a.nodeType||b.toLowerCase()!==a.nodeName.toLowerCase()?null:a},canHydrateTextInstance:function(a,\nb){return\"\"===b||3!==a.nodeType?null:a},getNextHydratableSibling:function(a){for(a=a.nextSibling;a&&1!==a.nodeType&&3!==a.nodeType;)a=a.nextSibling;return a},getFirstHydratableChild:function(a){for(a=a.firstChild;a&&1!==a.nodeType&&3!==a.nodeType;)a=a.nextSibling;return a},hydrateInstance:function(a,b,c,d,e,f){a[Q]=f;a[ob]=c;return ug(a,b,c,e,d)},hydrateTextInstance:function(a,b,c){a[Q]=c;return vg(a,b)},didNotMatchHydratedContainerTextInstance:function(){},didNotMatchHydratedTextInstance:function(){},\ndidNotHydrateContainerInstance:function(){},didNotHydrateInstance:function(){},didNotFindHydratableContainerInstance:function(){},didNotFindHydratableContainerTextInstance:function(){},didNotFindHydratableInstance:function(){},didNotFindHydratableTextInstance:function(){}},scheduleDeferredCallback:sf,cancelDeferredCallback:tf,useSyncScheduling:!0});rc=Z.batchedUpdates;\nfunction Pg(a,b,c,d,e){Ng(c)?void 0:E(\"200\");var f=c._reactRootContainer;if(f)Z.updateContainer(b,f,a,e);else{d=d||Og(c);if(!d)for(f=void 0;f=c.lastChild;)c.removeChild(f);var g=Z.createContainer(c,d);f=c._reactRootContainer=g;Z.unbatchedUpdates(function(){Z.updateContainer(b,g,a,e)})}return Z.getPublicRootInstance(f)}function Qg(a,b){var c=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;Ng(b)?void 0:E(\"200\");return pf(a,b,null,c)}\nfunction Rg(a,b){this._reactRootContainer=Z.createContainer(a,b)}Rg.prototype.render=function(a,b){Z.updateContainer(a,this._reactRootContainer,null,b)};Rg.prototype.unmount=function(a){Z.updateContainer(null,this._reactRootContainer,null,a)};\nvar Sg={createPortal:Qg,findDOMNode:function(a){if(null==a)return null;if(1===a.nodeType)return a;var b=a._reactInternalFiber;if(b)return Z.findHostInstance(b);\"function\"===typeof a.render?E(\"188\"):E(\"213\",Object.keys(a))},hydrate:function(a,b,c){return Pg(null,a,b,!0,c)},render:function(a,b,c){return Pg(null,a,b,!1,c)},unstable_renderSubtreeIntoContainer:function(a,b,c,d){null==a||void 0===a._reactInternalFiber?E(\"38\"):void 0;return Pg(a,b,c,!1,d)},unmountComponentAtNode:function(a){Ng(a)?void 0:\nE(\"40\");return a._reactRootContainer?(Z.unbatchedUpdates(function(){Pg(null,null,a,!1,function(){a._reactRootContainer=null})}),!0):!1},unstable_createPortal:Qg,unstable_batchedUpdates:tc,unstable_deferredUpdates:Z.deferredUpdates,flushSync:Z.flushSync,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:{EventPluginHub:mb,EventPluginRegistry:Va,EventPropagators:Cb,ReactControlledComponent:qc,ReactDOMComponentTree:sb,ReactDOMEventListener:xd}};\nZ.injectIntoDevTools({findFiberByHostInstance:pb,bundleType:0,version:\"16.2.0\",rendererPackageName:\"react-dom\"});var Tg=Object.freeze({default:Sg}),Ug=Tg&&Sg||Tg;module.exports=Ug[\"default\"]?Ug[\"default\"]:Ug;\n\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n\n/**\n * Simple, lightweight module assisting with the detection and context of\n * Worker. Helps avoid circular dependencies and allows code to reason about\n * whether or not they are in a Worker, even if they never include the main\n * `ReactWorker` dependency.\n */\nvar ExecutionEnvironment = {\n\n canUseDOM: canUseDOM,\n\n canUseWorkers: typeof Worker !== 'undefined',\n\n canUseEventListeners: canUseDOM && !!(window.addEventListener || window.attachEvent),\n\n canUseViewport: canUseDOM && !!window.screen,\n\n isInWorker: !canUseDOM // For now, this is true - might change in the future.\n\n};\n\nmodule.exports = ExecutionEnvironment;\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @typechecks\n */\n\nvar emptyFunction = __webpack_require__(2);\n\n/**\n * Upstream version of event listener. Does not take into account specific\n * nature of platform.\n */\nvar EventListener = {\n /**\n * Listen to DOM events during the bubble phase.\n *\n * @param {DOMEventTarget} target DOM element to register listener on.\n * @param {string} eventType Event type, e.g. 'click' or 'mouseover'.\n * @param {function} callback Callback function.\n * @return {object} Object with a `remove` method.\n */\n listen: function listen(target, eventType, callback) {\n if (target.addEventListener) {\n target.addEventListener(eventType, callback, false);\n return {\n remove: function remove() {\n target.removeEventListener(eventType, callback, false);\n }\n };\n } else if (target.attachEvent) {\n target.attachEvent('on' + eventType, callback);\n return {\n remove: function remove() {\n target.detachEvent('on' + eventType, callback);\n }\n };\n }\n },\n\n /**\n * Listen to DOM events during the capture phase.\n *\n * @param {DOMEventTarget} target DOM element to register listener on.\n * @param {string} eventType Event type, e.g. 'click' or 'mouseover'.\n * @param {function} callback Callback function.\n * @return {object} Object with a `remove` method.\n */\n capture: function capture(target, eventType, callback) {\n if (target.addEventListener) {\n target.addEventListener(eventType, callback, true);\n return {\n remove: function remove() {\n target.removeEventListener(eventType, callback, true);\n }\n };\n } else {\n if (false) {\n console.error('Attempted to listen to events during the capture phase on a ' + 'browser that does not support the capture phase. Your application ' + 'will not receive some events.');\n }\n return {\n remove: emptyFunction\n };\n }\n },\n\n registerDefault: function registerDefault() {}\n};\n\nmodule.exports = EventListener;\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @typechecks\n */\n\n/* eslint-disable fb-www/typeof-undefined */\n\n/**\n * Same as document.activeElement but wraps in a try-catch block. In IE it is\n * not safe to call document.activeElement if there is nothing focused.\n *\n * The activeElement will be null only if the document or document body is not\n * yet defined.\n *\n * @param {?DOMDocument} doc Defaults to current document.\n * @return {?DOMElement}\n */\nfunction getActiveElement(doc) /*?DOMElement*/{\n doc = doc || (typeof document !== 'undefined' ? document : undefined);\n if (typeof doc === 'undefined') {\n return null;\n }\n try {\n return doc.activeElement || doc.body;\n } catch (e) {\n return doc.body;\n }\n}\n\nmodule.exports = getActiveElement;\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @typechecks\n * \n */\n\n/*eslint-disable no-self-compare */\n\n\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\nfunction is(x, y) {\n // SameValue algorithm\n if (x === y) {\n // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n // Added the nonzero y check to make Flow happy, but it is redundant\n return x !== 0 || y !== 0 || 1 / x === 1 / y;\n } else {\n // Step 6.a: NaN == NaN\n return x !== x && y !== y;\n }\n}\n\n/**\n * Performs equality by iterating through keys on an object and returning false\n * when any key has values which are not strictly equal between the arguments.\n * Returns true when the values of all keys are strictly equal.\n */\nfunction shallowEqual(objA, objB) {\n if (is(objA, objB)) {\n return true;\n }\n\n if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {\n return false;\n }\n\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n\n if (keysA.length !== keysB.length) {\n return false;\n }\n\n // Test for A's keys different from B.\n for (var i = 0; i < keysA.length; i++) {\n if (!hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n return false;\n }\n }\n\n return true;\n}\n\nmodule.exports = shallowEqual;\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar isTextNode = __webpack_require__(21);\n\n/*eslint-disable no-bitwise */\n\n/**\n * Checks if a given DOM node contains or is another DOM node.\n */\nfunction containsNode(outerNode, innerNode) {\n if (!outerNode || !innerNode) {\n return false;\n } else if (outerNode === innerNode) {\n return true;\n } else if (isTextNode(outerNode)) {\n return false;\n } else if (isTextNode(innerNode)) {\n return containsNode(outerNode, innerNode.parentNode);\n } else if ('contains' in outerNode) {\n return outerNode.contains(innerNode);\n } else if (outerNode.compareDocumentPosition) {\n return !!(outerNode.compareDocumentPosition(innerNode) & 16);\n } else {\n return false;\n }\n}\n\nmodule.exports = containsNode;\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @typechecks\n */\n\nvar isNode = __webpack_require__(22);\n\n/**\n * @param {*} object The object to check.\n * @return {boolean} Whether or not the object is a DOM text node.\n */\nfunction isTextNode(object) {\n return isNode(object) && object.nodeType == 3;\n}\n\nmodule.exports = isTextNode;\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @typechecks\n */\n\n/**\n * @param {*} object The object to check.\n * @return {boolean} Whether or not the object is a DOM node.\n */\nfunction isNode(object) {\n var doc = object ? object.ownerDocument || object : document;\n var defaultView = doc.defaultView || window;\n return !!(object && (typeof defaultView.Node === 'function' ? object instanceof defaultView.Node : typeof object === 'object' && typeof object.nodeType === 'number' && typeof object.nodeName === 'string'));\n}\n\nmodule.exports = isNode;\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n\n\n/**\n * @param {DOMElement} node input/textarea to focus\n */\n\nfunction focusNode(node) {\n // IE8 can throw \"Can't move focus to the control because it is invisible,\n // not enabled, or of a type that does not accept the focus.\" for all kinds of\n // reasons that are too expensive and fragile to test.\n try {\n node.focus();\n } catch (e) {}\n}\n\nmodule.exports = focusNode;\n\n/***/ }),\n/* 24 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__step_in_test_js__ = __webpack_require__(25);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__step_over_test_js__ = __webpack_require__(26);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__step_out_test_js__ = __webpack_require__(27);\nvar _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if(\"value\"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}function _possibleConstructorReturn(self,call){if(!self){throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");}return call&&(typeof call===\"object\"||typeof call===\"function\")?call:self;}function _inherits(subClass,superClass){if(typeof superClass!==\"function\"&&superClass!==null){throw new TypeError(\"Super expression must either be null or a function, not \"+typeof superClass);}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass)Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass;}var App=function(_Component){_inherits(App,_Component);function App(){_classCallCheck(this,App);return _possibleConstructorReturn(this,(App.__proto__||Object.getPrototypeOf(App)).apply(this,arguments));}_createClass(App,[{key:'render',value:function render(){return __WEBPACK_IMPORTED_MODULE_0_react___default.a.createElement('div',{className:'App'},__WEBPACK_IMPORTED_MODULE_0_react___default.a.createElement('header',{className:'App-header'},__WEBPACK_IMPORTED_MODULE_0_react___default.a.createElement('h1',{className:'App-title'},'Welcome to React')),__WEBPACK_IMPORTED_MODULE_0_react___default.a.createElement('p',{className:'App-intro'},'To get started, edit ',__WEBPACK_IMPORTED_MODULE_0_react___default.a.createElement('code',null,'src/App.js'),' and save to reload.'));}}]);return App;}(__WEBPACK_IMPORTED_MODULE_0_react__[\"Component\"]);window.hitBreakpoint=function breakpoint(){Object(__WEBPACK_IMPORTED_MODULE_1__step_in_test_js__[\"b\" /* stepInTest */])();Object(__WEBPACK_IMPORTED_MODULE_2__step_over_test_js__[\"a\" /* default */])();Object(__WEBPACK_IMPORTED_MODULE_3__step_out_test_js__[\"a\" /* default */])();console.log('hitting a breakpoint');return;};window.hitDebugStatement=function(){Object(__WEBPACK_IMPORTED_MODULE_1__step_in_test_js__[\"a\" /* debugStatement */])();console.log('hitting a debug statement');return;};/* harmony default export */ __webpack_exports__[\"a\"] = (App);\n\n/***/ }),\n/* 25 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"b\"] = stepInTest;\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = debugStatement;\n// depth: 3, width: 12\n// 2586 functions, 182225 characters generated\nfunction f0_0_0_0(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_0_0_1(){return Math.max(Math.random(),Math.random());}function f0_0_0_2(){return Math.random();}function f0_0_0_3(){return Math.random();}function f0_0_0_4(){return isNaN(undefined);}function f0_0_0_5(){return Math.max(Math.random(),Math.random());}function f0_0_0_6(){return Math.max(Math.random(),Math.random());}function f0_0_0_7(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_0_0_8(){return Math.max(Math.random(),Math.random());}function f0_0_0_9(){return Math.max(Math.random(),Math.random());}function f0_0_0_10(){return Math.max(Math.random(),Math.random());}function f0_0_0_11(){return Math.max(Math.random(),Math.random());}function f0_0_0(){f0_0_0_0();f0_0_0_1();f0_0_0_2();f0_0_0_3();f0_0_0_4();f0_0_0_5();f0_0_0_6();f0_0_0_7();f0_0_0_8();f0_0_0_9();f0_0_0_10();f0_0_0_11();}function f0_0_1_0(){return Math.max(Math.random(),Math.random());}function f0_0_1_1(){return Math.random();}function f0_0_1_2(){return Math.random();}function f0_0_1_3(){return Math.max(Math.random(),Math.random());}function f0_0_1_4(){return Math.random();}function f0_0_1_5(){return isNaN(undefined);}function f0_0_1_6(){return Math.max(Math.random(),Math.random());}function f0_0_1_7(){return isNaN(undefined);}function f0_0_1_8(){return Math.max(Math.random(),Math.random());}function f0_0_1_9(){return Math.max(Math.random(),Math.random());}function f0_0_1_10(){return Math.random();}function f0_0_1_11(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_0_1(){f0_0_1_0();f0_0_1_1();f0_0_1_2();f0_0_1_3();f0_0_1_4();f0_0_1_5();f0_0_1_6();f0_0_1_7();f0_0_1_8();f0_0_1_9();f0_0_1_10();f0_0_1_11();}function f0_0_2_0(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_0_2_1(){return isNaN(undefined);}function f0_0_2_2(){return isNaN(undefined);}function f0_0_2_3(){return Math.max(Math.random(),Math.random());}function f0_0_2_4(){return Math.random();}function f0_0_2_5(){return Math.max(Math.random(),Math.random());}function f0_0_2_6(){return Math.max(Math.random(),Math.random());}function f0_0_2_7(){return Math.max(Math.random(),Math.random());}function f0_0_2_8(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_0_2_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_0_2_10(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_0_2_11(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_0_2(){f0_0_2_0();f0_0_2_1();f0_0_2_2();f0_0_2_3();f0_0_2_4();f0_0_2_5();f0_0_2_6();f0_0_2_7();f0_0_2_8();f0_0_2_9();f0_0_2_10();f0_0_2_11();}function f0_0_3_0(){return Math.max(Math.random(),Math.random());}function f0_0_3_1(){return Math.max(Math.random(),Math.random());}function f0_0_3_2(){return Math.max(Math.random(),Math.random());}function f0_0_3_3(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_0_3_4(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_0_3_5(){return isNaN(undefined);}function f0_0_3_6(){return isNaN(undefined);}function f0_0_3_7(){return isNaN(undefined);}function f0_0_3_8(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_0_3_9(){return Math.random();}function f0_0_3_10(){return isNaN(undefined);}function f0_0_3_11(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_0_3(){f0_0_3_0();f0_0_3_1();f0_0_3_2();f0_0_3_3();f0_0_3_4();f0_0_3_5();f0_0_3_6();f0_0_3_7();f0_0_3_8();f0_0_3_9();f0_0_3_10();f0_0_3_11();}function f0_0_4_0(){return isNaN(undefined);}function f0_0_4_1(){return Math.max(Math.random(),Math.random());}function f0_0_4_2(){return Math.random();}function f0_0_4_3(){return isNaN(undefined);}function f0_0_4_4(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_0_4_5(){return isNaN(undefined);}function f0_0_4_6(){return isNaN(undefined);}function f0_0_4_7(){return isNaN(undefined);}function f0_0_4_8(){return isNaN(undefined);}function f0_0_4_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_0_4_10(){return Math.random();}function f0_0_4_11(){return isNaN(undefined);}function f0_0_4(){f0_0_4_0();f0_0_4_1();f0_0_4_2();f0_0_4_3();f0_0_4_4();f0_0_4_5();f0_0_4_6();f0_0_4_7();f0_0_4_8();f0_0_4_9();f0_0_4_10();f0_0_4_11();}function f0_0_5_0(){return Math.random();}function f0_0_5_1(){return Math.random();}function f0_0_5_2(){return Math.max(Math.random(),Math.random());}function f0_0_5_3(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_0_5_4(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_0_5_5(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_0_5_6(){return Math.random();}function f0_0_5_7(){return isNaN(undefined);}function f0_0_5_8(){return Math.max(Math.random(),Math.random());}function f0_0_5_9(){return Math.max(Math.random(),Math.random());}function f0_0_5_10(){return isNaN(undefined);}function f0_0_5_11(){return Math.random();}function f0_0_5(){f0_0_5_0();f0_0_5_1();f0_0_5_2();f0_0_5_3();f0_0_5_4();f0_0_5_5();f0_0_5_6();f0_0_5_7();f0_0_5_8();f0_0_5_9();f0_0_5_10();f0_0_5_11();}function f0_0_6_0(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_0_6_1(){return Math.random();}function f0_0_6_2(){return isNaN(undefined);}function f0_0_6_3(){return isNaN(undefined);}function f0_0_6_4(){return isNaN(undefined);}function f0_0_6_5(){return Math.random();}function f0_0_6_6(){return Math.max(Math.random(),Math.random());}function f0_0_6_7(){return Math.max(Math.random(),Math.random());}function f0_0_6_8(){return Math.random();}function f0_0_6_9(){return Math.max(Math.random(),Math.random());}function f0_0_6_10(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_0_6_11(){return Math.max(Math.random(),Math.random());}function f0_0_6(){f0_0_6_0();f0_0_6_1();f0_0_6_2();f0_0_6_3();f0_0_6_4();f0_0_6_5();f0_0_6_6();f0_0_6_7();f0_0_6_8();f0_0_6_9();f0_0_6_10();f0_0_6_11();}function f0_0_7_0(){return isNaN(undefined);}function f0_0_7_1(){return Math.random();}function f0_0_7_2(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_0_7_3(){return Math.random();}function f0_0_7_4(){return Math.random();}function f0_0_7_5(){return Math.max(Math.random(),Math.random());}function f0_0_7_6(){return Math.random();}function f0_0_7_7(){return Math.random();}function f0_0_7_8(){return Math.max(Math.random(),Math.random());}function f0_0_7_9(){return isNaN(undefined);}function f0_0_7_10(){return Math.max(Math.random(),Math.random());}function f0_0_7_11(){return Math.max(Math.random(),Math.random());}function f0_0_7(){f0_0_7_0();f0_0_7_1();f0_0_7_2();f0_0_7_3();f0_0_7_4();f0_0_7_5();f0_0_7_6();f0_0_7_7();f0_0_7_8();f0_0_7_9();f0_0_7_10();f0_0_7_11();}function f0_0_8_0(){return Math.random();}function f0_0_8_1(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_0_8_2(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_0_8_3(){return Math.random();}function f0_0_8_4(){return isNaN(undefined);}function f0_0_8_5(){return Math.random();}function f0_0_8_6(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_0_8_7(){return Math.random();}function f0_0_8_8(){return Math.max(Math.random(),Math.random());}function f0_0_8_9(){return Math.max(Math.random(),Math.random());}function f0_0_8_10(){return Math.max(Math.random(),Math.random());}function f0_0_8_11(){return Math.random();}function f0_0_8(){f0_0_8_0();f0_0_8_1();f0_0_8_2();f0_0_8_3();f0_0_8_4();f0_0_8_5();f0_0_8_6();f0_0_8_7();f0_0_8_8();f0_0_8_9();f0_0_8_10();f0_0_8_11();}function f0_0_9_0(){return Math.max(Math.random(),Math.random());}function f0_0_9_1(){return Math.random();}function f0_0_9_2(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_0_9_3(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_0_9_4(){return Math.max(Math.random(),Math.random());}function f0_0_9_5(){return isNaN(undefined);}function f0_0_9_6(){return Math.random();}function f0_0_9_7(){return Math.random();}function f0_0_9_8(){return Math.random();}function f0_0_9_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_0_9_10(){return Math.random();}function f0_0_9_11(){return Math.random();}function f0_0_9(){f0_0_9_0();f0_0_9_1();f0_0_9_2();f0_0_9_3();f0_0_9_4();f0_0_9_5();f0_0_9_6();f0_0_9_7();f0_0_9_8();f0_0_9_9();f0_0_9_10();f0_0_9_11();}function f0_0_10_0(){return Math.random();}function f0_0_10_1(){return isNaN(undefined);}function f0_0_10_2(){return Math.max(Math.random(),Math.random());}function f0_0_10_3(){return Math.random();}function f0_0_10_4(){return Math.max(Math.random(),Math.random());}function f0_0_10_5(){return isNaN(undefined);}function f0_0_10_6(){return Math.random();}function f0_0_10_7(){return Math.max(Math.random(),Math.random());}function f0_0_10_8(){return Math.max(Math.random(),Math.random());}function f0_0_10_9(){return Math.max(Math.random(),Math.random());}function f0_0_10_10(){return Math.max(Math.random(),Math.random());}function f0_0_10_11(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_0_10(){f0_0_10_0();f0_0_10_1();f0_0_10_2();f0_0_10_3();f0_0_10_4();f0_0_10_5();f0_0_10_6();f0_0_10_7();f0_0_10_8();f0_0_10_9();f0_0_10_10();f0_0_10_11();}function f0_0_11_0(){return Math.random();}function f0_0_11_1(){return Math.max(Math.random(),Math.random());}function f0_0_11_2(){return Math.max(Math.random(),Math.random());}function f0_0_11_3(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_0_11_4(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_0_11_5(){return isNaN(undefined);}function f0_0_11_6(){return isNaN(undefined);}function f0_0_11_7(){return Math.max(Math.random(),Math.random());}function f0_0_11_8(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_0_11_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_0_11_10(){return Math.random();}function f0_0_11_11(){return Math.random();}function f0_0_11(){f0_0_11_0();f0_0_11_1();f0_0_11_2();f0_0_11_3();f0_0_11_4();f0_0_11_5();f0_0_11_6();f0_0_11_7();f0_0_11_8();f0_0_11_9();f0_0_11_10();f0_0_11_11();}function f0_0(){f0_0_0();f0_0_1();f0_0_2();f0_0_3();f0_0_4();f0_0_5();f0_0_6();f0_0_7();f0_0_8();f0_0_9();f0_0_10();f0_0_11();}function f0_1_0_0(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_1_0_1(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_1_0_2(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_1_0_3(){return Math.max(Math.random(),Math.random());}function f0_1_0_4(){return Math.max(Math.random(),Math.random());}function f0_1_0_5(){return Math.random();}function f0_1_0_6(){return isNaN(undefined);}function f0_1_0_7(){return Math.random();}function f0_1_0_8(){return isNaN(undefined);}function f0_1_0_9(){return Math.max(Math.random(),Math.random());}function f0_1_0_10(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_1_0_11(){return Math.random();}function f0_1_0(){f0_1_0_0();f0_1_0_1();f0_1_0_2();f0_1_0_3();f0_1_0_4();f0_1_0_5();f0_1_0_6();f0_1_0_7();f0_1_0_8();f0_1_0_9();f0_1_0_10();f0_1_0_11();}function f0_1_1_0(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_1_1_1(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_1_1_2(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_1_1_3(){return isNaN(undefined);}function f0_1_1_4(){return Math.random();}function f0_1_1_5(){return isNaN(undefined);}function f0_1_1_6(){return isNaN(undefined);}function f0_1_1_7(){return Math.max(Math.random(),Math.random());}function f0_1_1_8(){return Math.random();}function f0_1_1_9(){return Math.random();}function f0_1_1_10(){return Math.random();}function f0_1_1_11(){return Math.random();}function f0_1_1(){f0_1_1_0();f0_1_1_1();f0_1_1_2();f0_1_1_3();f0_1_1_4();f0_1_1_5();f0_1_1_6();f0_1_1_7();f0_1_1_8();f0_1_1_9();f0_1_1_10();f0_1_1_11();}function f0_1_2_0(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_1_2_1(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_1_2_2(){return Math.max(Math.random(),Math.random());}function f0_1_2_3(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_1_2_4(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_1_2_5(){return Math.random();}function f0_1_2_6(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_1_2_7(){return Math.max(Math.random(),Math.random());}function f0_1_2_8(){return isNaN(undefined);}function f0_1_2_9(){return Math.random();}function f0_1_2_10(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_1_2_11(){return Math.random();}function f0_1_2(){f0_1_2_0();f0_1_2_1();f0_1_2_2();f0_1_2_3();f0_1_2_4();f0_1_2_5();f0_1_2_6();f0_1_2_7();f0_1_2_8();f0_1_2_9();f0_1_2_10();f0_1_2_11();}function f0_1_3_0(){return isNaN(undefined);}function f0_1_3_1(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_1_3_2(){return isNaN(undefined);}function f0_1_3_3(){return Math.max(Math.random(),Math.random());}function f0_1_3_4(){return isNaN(undefined);}function f0_1_3_5(){return Math.random();}function f0_1_3_6(){return Math.random();}function f0_1_3_7(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_1_3_8(){return Math.max(Math.random(),Math.random());}function f0_1_3_9(){return Math.max(Math.random(),Math.random());}function f0_1_3_10(){return Math.random();}function f0_1_3_11(){return Math.max(Math.random(),Math.random());}function f0_1_3(){f0_1_3_0();f0_1_3_1();f0_1_3_2();f0_1_3_3();f0_1_3_4();f0_1_3_5();f0_1_3_6();f0_1_3_7();f0_1_3_8();f0_1_3_9();f0_1_3_10();f0_1_3_11();}function f0_1_4_0(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_1_4_1(){return isNaN(undefined);}function f0_1_4_2(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_1_4_3(){return isNaN(undefined);}function f0_1_4_4(){return isNaN(undefined);}function f0_1_4_5(){return isNaN(undefined);}function f0_1_4_6(){return isNaN(undefined);}function f0_1_4_7(){return Math.random();}function f0_1_4_8(){return Math.max(Math.random(),Math.random());}function f0_1_4_9(){return isNaN(undefined);}function f0_1_4_10(){return Math.max(Math.random(),Math.random());}function f0_1_4_11(){return Math.random();}function f0_1_4(){f0_1_4_0();f0_1_4_1();f0_1_4_2();f0_1_4_3();f0_1_4_4();f0_1_4_5();f0_1_4_6();f0_1_4_7();f0_1_4_8();f0_1_4_9();f0_1_4_10();f0_1_4_11();}function f0_1_5_0(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_1_5_1(){return isNaN(undefined);}function f0_1_5_2(){return Math.max(Math.random(),Math.random());}function f0_1_5_3(){return Math.max(Math.random(),Math.random());}function f0_1_5_4(){return Math.max(Math.random(),Math.random());}function f0_1_5_5(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_1_5_6(){return Math.max(Math.random(),Math.random());}function f0_1_5_7(){return isNaN(undefined);}function f0_1_5_8(){return isNaN(undefined);}function f0_1_5_9(){return Math.random();}function f0_1_5_10(){return Math.max(Math.random(),Math.random());}function f0_1_5_11(){return isNaN(undefined);}function f0_1_5(){f0_1_5_0();f0_1_5_1();f0_1_5_2();f0_1_5_3();f0_1_5_4();f0_1_5_5();f0_1_5_6();f0_1_5_7();f0_1_5_8();f0_1_5_9();f0_1_5_10();f0_1_5_11();}function f0_1_6_0(){return Math.max(Math.random(),Math.random());}function f0_1_6_1(){return isNaN(undefined);}function f0_1_6_2(){return isNaN(undefined);}function f0_1_6_3(){return isNaN(undefined);}function f0_1_6_4(){return isNaN(undefined);}function f0_1_6_5(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_1_6_6(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_1_6_7(){return Math.max(Math.random(),Math.random());}function f0_1_6_8(){return isNaN(undefined);}function f0_1_6_9(){return Math.max(Math.random(),Math.random());}function f0_1_6_10(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_1_6_11(){return Math.max(Math.random(),Math.random());}function f0_1_6(){f0_1_6_0();f0_1_6_1();f0_1_6_2();f0_1_6_3();f0_1_6_4();f0_1_6_5();f0_1_6_6();f0_1_6_7();f0_1_6_8();f0_1_6_9();f0_1_6_10();f0_1_6_11();}function f0_1_7_0(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_1_7_1(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_1_7_2(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_1_7_3(){return Math.random();}function f0_1_7_4(){return Math.max(Math.random(),Math.random());}function f0_1_7_5(){return isNaN(undefined);}function f0_1_7_6(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_1_7_7(){return Math.max(Math.random(),Math.random());}function f0_1_7_8(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_1_7_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_1_7_10(){return Math.max(Math.random(),Math.random());}function f0_1_7_11(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_1_7(){f0_1_7_0();f0_1_7_1();f0_1_7_2();f0_1_7_3();f0_1_7_4();f0_1_7_5();f0_1_7_6();f0_1_7_7();f0_1_7_8();f0_1_7_9();f0_1_7_10();f0_1_7_11();}function f0_1_8_0(){return Math.max(Math.random(),Math.random());}function f0_1_8_1(){return isNaN(undefined);}function f0_1_8_2(){return Math.random();}function f0_1_8_3(){return isNaN(undefined);}function f0_1_8_4(){return isNaN(undefined);}function f0_1_8_5(){return isNaN(undefined);}function f0_1_8_6(){return isNaN(undefined);}function f0_1_8_7(){return Math.random();}function f0_1_8_8(){return Math.max(Math.random(),Math.random());}function f0_1_8_9(){return isNaN(undefined);}function f0_1_8_10(){return isNaN(undefined);}function f0_1_8_11(){return Math.max(Math.random(),Math.random());}function f0_1_8(){f0_1_8_0();f0_1_8_1();f0_1_8_2();f0_1_8_3();f0_1_8_4();f0_1_8_5();f0_1_8_6();f0_1_8_7();f0_1_8_8();f0_1_8_9();f0_1_8_10();f0_1_8_11();}function f0_1_9_0(){return isNaN(undefined);}function f0_1_9_1(){return isNaN(undefined);}function f0_1_9_2(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_1_9_3(){return isNaN(undefined);}function f0_1_9_4(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_1_9_5(){return isNaN(undefined);}function f0_1_9_6(){return Math.max(Math.random(),Math.random());}function f0_1_9_7(){return Math.random();}function f0_1_9_8(){return isNaN(undefined);}function f0_1_9_9(){return Math.random();}function f0_1_9_10(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_1_9_11(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_1_9(){f0_1_9_0();f0_1_9_1();f0_1_9_2();f0_1_9_3();f0_1_9_4();f0_1_9_5();f0_1_9_6();f0_1_9_7();f0_1_9_8();f0_1_9_9();f0_1_9_10();f0_1_9_11();}function f0_1_10_0(){return isNaN(undefined);}function f0_1_10_1(){return isNaN(undefined);}function f0_1_10_2(){return Math.max(Math.random(),Math.random());}function f0_1_10_3(){return Math.random();}function f0_1_10_4(){return Math.max(Math.random(),Math.random());}function f0_1_10_5(){return Math.random();}function f0_1_10_6(){return Math.max(Math.random(),Math.random());}function f0_1_10_7(){return Math.max(Math.random(),Math.random());}function f0_1_10_8(){return isNaN(undefined);}function f0_1_10_9(){return isNaN(undefined);}function f0_1_10_10(){return isNaN(undefined);}function f0_1_10_11(){return isNaN(undefined);}function f0_1_10(){f0_1_10_0();f0_1_10_1();f0_1_10_2();f0_1_10_3();f0_1_10_4();f0_1_10_5();f0_1_10_6();f0_1_10_7();f0_1_10_8();f0_1_10_9();f0_1_10_10();f0_1_10_11();}function f0_1_11_0(){return Math.random();}function f0_1_11_1(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_1_11_2(){return Math.random();}function f0_1_11_3(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_1_11_4(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_1_11_5(){return Math.max(Math.random(),Math.random());}function f0_1_11_6(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_1_11_7(){return Math.max(Math.random(),Math.random());}function f0_1_11_8(){return Math.random();}function f0_1_11_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_1_11_10(){return Math.max(Math.random(),Math.random());}function f0_1_11_11(){return Math.max(Math.random(),Math.random());}function f0_1_11(){f0_1_11_0();f0_1_11_1();f0_1_11_2();f0_1_11_3();f0_1_11_4();f0_1_11_5();f0_1_11_6();f0_1_11_7();f0_1_11_8();f0_1_11_9();f0_1_11_10();f0_1_11_11();}function f0_1(){f0_1_0();f0_1_1();f0_1_2();f0_1_3();f0_1_4();f0_1_5();f0_1_6();f0_1_7();f0_1_8();f0_1_9();f0_1_10();f0_1_11();}function f0_2_0_0(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_2_0_1(){return Math.random();}function f0_2_0_2(){return Math.max(Math.random(),Math.random());}function f0_2_0_3(){return isNaN(undefined);}function f0_2_0_4(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_2_0_5(){return Math.random();}function f0_2_0_6(){return Math.max(Math.random(),Math.random());}function f0_2_0_7(){return Math.random();}function f0_2_0_8(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_2_0_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_2_0_10(){return isNaN(undefined);}function f0_2_0_11(){return isNaN(undefined);}function f0_2_0(){f0_2_0_0();f0_2_0_1();f0_2_0_2();f0_2_0_3();f0_2_0_4();f0_2_0_5();f0_2_0_6();f0_2_0_7();f0_2_0_8();f0_2_0_9();f0_2_0_10();f0_2_0_11();}function f0_2_1_0(){return Math.max(Math.random(),Math.random());}function f0_2_1_1(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_2_1_2(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_2_1_3(){return isNaN(undefined);}function f0_2_1_4(){return Math.max(Math.random(),Math.random());}function f0_2_1_5(){return Math.max(Math.random(),Math.random());}function f0_2_1_6(){return isNaN(undefined);}function f0_2_1_7(){return Math.max(Math.random(),Math.random());}function f0_2_1_8(){return isNaN(undefined);}function f0_2_1_9(){return Math.max(Math.random(),Math.random());}function f0_2_1_10(){return isNaN(undefined);}function f0_2_1_11(){return isNaN(undefined);}function f0_2_1(){f0_2_1_0();f0_2_1_1();f0_2_1_2();f0_2_1_3();f0_2_1_4();f0_2_1_5();f0_2_1_6();f0_2_1_7();f0_2_1_8();f0_2_1_9();f0_2_1_10();f0_2_1_11();}function f0_2_2_0(){return Math.random();}function f0_2_2_1(){return Math.random();}function f0_2_2_2(){return Math.max(Math.random(),Math.random());}function f0_2_2_3(){return Math.max(Math.random(),Math.random());}function f0_2_2_4(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_2_2_5(){return Math.random();}function f0_2_2_6(){return Math.max(Math.random(),Math.random());}function f0_2_2_7(){return Math.max(Math.random(),Math.random());}function f0_2_2_8(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_2_2_9(){return Math.random();}function f0_2_2_10(){return Math.random();}function f0_2_2_11(){return isNaN(undefined);}function f0_2_2(){f0_2_2_0();f0_2_2_1();f0_2_2_2();f0_2_2_3();f0_2_2_4();f0_2_2_5();f0_2_2_6();f0_2_2_7();f0_2_2_8();f0_2_2_9();f0_2_2_10();f0_2_2_11();}function f0_2_3_0(){return Math.random();}function f0_2_3_1(){return Math.random();}function f0_2_3_2(){return Math.random();}function f0_2_3_3(){return Math.max(Math.random(),Math.random());}function f0_2_3_4(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_2_3_5(){return Math.max(Math.random(),Math.random());}function f0_2_3_6(){return isNaN(undefined);}function f0_2_3_7(){return isNaN(undefined);}function f0_2_3_8(){return Math.max(Math.random(),Math.random());}function f0_2_3_9(){return Math.random();}function f0_2_3_10(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_2_3_11(){return isNaN(undefined);}function f0_2_3(){f0_2_3_0();f0_2_3_1();f0_2_3_2();f0_2_3_3();f0_2_3_4();f0_2_3_5();f0_2_3_6();f0_2_3_7();f0_2_3_8();f0_2_3_9();f0_2_3_10();f0_2_3_11();}function f0_2_4_0(){return Math.max(Math.random(),Math.random());}function f0_2_4_1(){return Math.random();}function f0_2_4_2(){return Math.random();}function f0_2_4_3(){return isNaN(undefined);}function f0_2_4_4(){return isNaN(undefined);}function f0_2_4_5(){return Math.max(Math.random(),Math.random());}function f0_2_4_6(){return Math.random();}function f0_2_4_7(){return Math.max(Math.random(),Math.random());}function f0_2_4_8(){return Math.random();}function f0_2_4_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_2_4_10(){return isNaN(undefined);}function f0_2_4_11(){return isNaN(undefined);}function f0_2_4(){f0_2_4_0();f0_2_4_1();f0_2_4_2();f0_2_4_3();f0_2_4_4();f0_2_4_5();f0_2_4_6();f0_2_4_7();f0_2_4_8();f0_2_4_9();f0_2_4_10();f0_2_4_11();}function f0_2_5_0(){return Math.max(Math.random(),Math.random());}function f0_2_5_1(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_2_5_2(){return Math.random();}function f0_2_5_3(){return Math.random();}function f0_2_5_4(){return isNaN(undefined);}function f0_2_5_5(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_2_5_6(){return Math.max(Math.random(),Math.random());}function f0_2_5_7(){return isNaN(undefined);}function f0_2_5_8(){return Math.max(Math.random(),Math.random());}function f0_2_5_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_2_5_10(){return Math.random();}function f0_2_5_11(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_2_5(){f0_2_5_0();f0_2_5_1();f0_2_5_2();f0_2_5_3();f0_2_5_4();f0_2_5_5();f0_2_5_6();f0_2_5_7();f0_2_5_8();f0_2_5_9();f0_2_5_10();f0_2_5_11();}function f0_2_6_0(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_2_6_1(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_2_6_2(){return Math.random();}function f0_2_6_3(){return Math.random();}function f0_2_6_4(){return Math.random();}function f0_2_6_5(){return Math.max(Math.random(),Math.random());}function f0_2_6_6(){return Math.random();}function f0_2_6_7(){return Math.max(Math.random(),Math.random());}function f0_2_6_8(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_2_6_9(){return Math.random();}function f0_2_6_10(){return isNaN(undefined);}function f0_2_6_11(){return Math.max(Math.random(),Math.random());}function f0_2_6(){f0_2_6_0();f0_2_6_1();f0_2_6_2();f0_2_6_3();f0_2_6_4();f0_2_6_5();f0_2_6_6();f0_2_6_7();f0_2_6_8();f0_2_6_9();f0_2_6_10();f0_2_6_11();}function f0_2_7_0(){return Math.max(Math.random(),Math.random());}function f0_2_7_1(){return Math.max(Math.random(),Math.random());}function f0_2_7_2(){return isNaN(undefined);}function f0_2_7_3(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_2_7_4(){return Math.max(Math.random(),Math.random());}function f0_2_7_5(){return isNaN(undefined);}function f0_2_7_6(){return Math.max(Math.random(),Math.random());}function f0_2_7_7(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_2_7_8(){return isNaN(undefined);}function f0_2_7_9(){return Math.random();}function f0_2_7_10(){return Math.max(Math.random(),Math.random());}function f0_2_7_11(){return Math.max(Math.random(),Math.random());}function f0_2_7(){f0_2_7_0();f0_2_7_1();f0_2_7_2();f0_2_7_3();f0_2_7_4();f0_2_7_5();f0_2_7_6();f0_2_7_7();f0_2_7_8();f0_2_7_9();f0_2_7_10();f0_2_7_11();}function f0_2_8_0(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_2_8_1(){return Math.random();}function f0_2_8_2(){return isNaN(undefined);}function f0_2_8_3(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_2_8_4(){return Math.max(Math.random(),Math.random());}function f0_2_8_5(){return isNaN(undefined);}function f0_2_8_6(){return Math.random();}function f0_2_8_7(){return isNaN(undefined);}function f0_2_8_8(){return Math.random();}function f0_2_8_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_2_8_10(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_2_8_11(){return Math.max(Math.random(),Math.random());}function f0_2_8(){f0_2_8_0();f0_2_8_1();f0_2_8_2();f0_2_8_3();f0_2_8_4();f0_2_8_5();f0_2_8_6();f0_2_8_7();f0_2_8_8();f0_2_8_9();f0_2_8_10();f0_2_8_11();}function f0_2_9_0(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_2_9_1(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_2_9_2(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_2_9_3(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_2_9_4(){return isNaN(undefined);}function f0_2_9_5(){return Math.max(Math.random(),Math.random());}function f0_2_9_6(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_2_9_7(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_2_9_8(){return Math.random();}function f0_2_9_9(){return Math.random();}function f0_2_9_10(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_2_9_11(){return isNaN(undefined);}function f0_2_9(){f0_2_9_0();f0_2_9_1();f0_2_9_2();f0_2_9_3();f0_2_9_4();f0_2_9_5();f0_2_9_6();f0_2_9_7();f0_2_9_8();f0_2_9_9();f0_2_9_10();f0_2_9_11();}function f0_2_10_0(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_2_10_1(){return Math.random();}function f0_2_10_2(){return isNaN(undefined);}function f0_2_10_3(){return isNaN(undefined);}function f0_2_10_4(){return isNaN(undefined);}function f0_2_10_5(){return isNaN(undefined);}function f0_2_10_6(){return isNaN(undefined);}function f0_2_10_7(){return Math.random();}function f0_2_10_8(){return Math.max(Math.random(),Math.random());}function f0_2_10_9(){return Math.max(Math.random(),Math.random());}function f0_2_10_10(){return Math.max(Math.random(),Math.random());}function f0_2_10_11(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_2_10(){f0_2_10_0();f0_2_10_1();f0_2_10_2();f0_2_10_3();f0_2_10_4();f0_2_10_5();f0_2_10_6();f0_2_10_7();f0_2_10_8();f0_2_10_9();f0_2_10_10();f0_2_10_11();}function f0_2_11_0(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_2_11_1(){return Math.random();}function f0_2_11_2(){return Math.random();}function f0_2_11_3(){return Math.max(Math.random(),Math.random());}function f0_2_11_4(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_2_11_5(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_2_11_6(){return isNaN(undefined);}function f0_2_11_7(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_2_11_8(){return Math.max(Math.random(),Math.random());}function f0_2_11_9(){return isNaN(undefined);}function f0_2_11_10(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_2_11_11(){return isNaN(undefined);}function f0_2_11(){f0_2_11_0();f0_2_11_1();f0_2_11_2();f0_2_11_3();f0_2_11_4();f0_2_11_5();f0_2_11_6();f0_2_11_7();f0_2_11_8();f0_2_11_9();f0_2_11_10();f0_2_11_11();}function f0_2(){f0_2_0();f0_2_1();f0_2_2();f0_2_3();f0_2_4();f0_2_5();f0_2_6();f0_2_7();f0_2_8();f0_2_9();f0_2_10();f0_2_11();}function f0_3_0_0(){return Math.random();}function f0_3_0_1(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_3_0_2(){return Math.max(Math.random(),Math.random());}function f0_3_0_3(){return isNaN(undefined);}function f0_3_0_4(){return Math.random();}function f0_3_0_5(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_3_0_6(){return Math.max(Math.random(),Math.random());}function f0_3_0_7(){return Math.max(Math.random(),Math.random());}function f0_3_0_8(){return Math.max(Math.random(),Math.random());}function f0_3_0_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_3_0_10(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_3_0_11(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_3_0(){f0_3_0_0();f0_3_0_1();f0_3_0_2();f0_3_0_3();f0_3_0_4();f0_3_0_5();f0_3_0_6();f0_3_0_7();f0_3_0_8();f0_3_0_9();f0_3_0_10();f0_3_0_11();}function f0_3_1_0(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_3_1_1(){return isNaN(undefined);}function f0_3_1_2(){return Math.random();}function f0_3_1_3(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_3_1_4(){return isNaN(undefined);}function f0_3_1_5(){return Math.random();}function f0_3_1_6(){return Math.max(Math.random(),Math.random());}function f0_3_1_7(){return isNaN(undefined);}function f0_3_1_8(){return Math.random();}function f0_3_1_9(){return Math.random();}function f0_3_1_10(){return Math.random();}function f0_3_1_11(){return Math.random();}function f0_3_1(){f0_3_1_0();f0_3_1_1();f0_3_1_2();f0_3_1_3();f0_3_1_4();f0_3_1_5();f0_3_1_6();f0_3_1_7();f0_3_1_8();f0_3_1_9();f0_3_1_10();f0_3_1_11();}function f0_3_2_0(){return Math.random();}function f0_3_2_1(){return Math.max(Math.random(),Math.random());}function f0_3_2_2(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_3_2_3(){return isNaN(undefined);}function f0_3_2_4(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_3_2_5(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_3_2_6(){return Math.max(Math.random(),Math.random());}function f0_3_2_7(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_3_2_8(){return Math.max(Math.random(),Math.random());}function f0_3_2_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_3_2_10(){return isNaN(undefined);}function f0_3_2_11(){return Math.random();}function f0_3_2(){f0_3_2_0();f0_3_2_1();f0_3_2_2();f0_3_2_3();f0_3_2_4();f0_3_2_5();f0_3_2_6();f0_3_2_7();f0_3_2_8();f0_3_2_9();f0_3_2_10();f0_3_2_11();}function f0_3_3_0(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_3_3_1(){return Math.max(Math.random(),Math.random());}function f0_3_3_2(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_3_3_3(){return Math.max(Math.random(),Math.random());}function f0_3_3_4(){return isNaN(undefined);}function f0_3_3_5(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_3_3_6(){return Math.random();}function f0_3_3_7(){return isNaN(undefined);}function f0_3_3_8(){return isNaN(undefined);}function f0_3_3_9(){return isNaN(undefined);}function f0_3_3_10(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_3_3_11(){return Math.random();}function f0_3_3(){f0_3_3_0();f0_3_3_1();f0_3_3_2();f0_3_3_3();f0_3_3_4();f0_3_3_5();f0_3_3_6();f0_3_3_7();f0_3_3_8();f0_3_3_9();f0_3_3_10();f0_3_3_11();}function f0_3_4_0(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_3_4_1(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_3_4_2(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_3_4_3(){return Math.random();}function f0_3_4_4(){return Math.max(Math.random(),Math.random());}function f0_3_4_5(){return Math.random();}function f0_3_4_6(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_3_4_7(){return Math.random();}function f0_3_4_8(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_3_4_9(){return Math.random();}function f0_3_4_10(){return Math.random();}function f0_3_4_11(){return Math.random();}function f0_3_4(){f0_3_4_0();f0_3_4_1();f0_3_4_2();f0_3_4_3();f0_3_4_4();f0_3_4_5();f0_3_4_6();f0_3_4_7();f0_3_4_8();f0_3_4_9();f0_3_4_10();f0_3_4_11();}function f0_3_5_0(){return Math.random();}function f0_3_5_1(){return Math.max(Math.random(),Math.random());}function f0_3_5_2(){return isNaN(undefined);}function f0_3_5_3(){return isNaN(undefined);}function f0_3_5_4(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_3_5_5(){return Math.random();}function f0_3_5_6(){return Math.max(Math.random(),Math.random());}function f0_3_5_7(){return Math.random();}function f0_3_5_8(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_3_5_9(){return isNaN(undefined);}function f0_3_5_10(){return Math.random();}function f0_3_5_11(){return Math.max(Math.random(),Math.random());}function f0_3_5(){f0_3_5_0();f0_3_5_1();f0_3_5_2();f0_3_5_3();f0_3_5_4();f0_3_5_5();f0_3_5_6();f0_3_5_7();f0_3_5_8();f0_3_5_9();f0_3_5_10();f0_3_5_11();}function f0_3_6_0(){return Math.max(Math.random(),Math.random());}function f0_3_6_1(){return isNaN(undefined);}function f0_3_6_2(){return Math.random();}function f0_3_6_3(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_3_6_4(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_3_6_5(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_3_6_6(){return isNaN(undefined);}function f0_3_6_7(){return Math.max(Math.random(),Math.random());}function f0_3_6_8(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_3_6_9(){return isNaN(undefined);}function f0_3_6_10(){return Math.random();}function f0_3_6_11(){return Math.max(Math.random(),Math.random());}function f0_3_6(){f0_3_6_0();f0_3_6_1();f0_3_6_2();f0_3_6_3();f0_3_6_4();f0_3_6_5();f0_3_6_6();f0_3_6_7();f0_3_6_8();f0_3_6_9();f0_3_6_10();f0_3_6_11();}function f0_3_7_0(){return isNaN(undefined);}function f0_3_7_1(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_3_7_2(){return Math.random();}function f0_3_7_3(){return isNaN(undefined);}function f0_3_7_4(){return isNaN(undefined);}function f0_3_7_5(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_3_7_6(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_3_7_7(){return isNaN(undefined);}function f0_3_7_8(){return Math.random();}function f0_3_7_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_3_7_10(){return isNaN(undefined);}function f0_3_7_11(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_3_7(){f0_3_7_0();f0_3_7_1();f0_3_7_2();f0_3_7_3();f0_3_7_4();f0_3_7_5();f0_3_7_6();f0_3_7_7();f0_3_7_8();f0_3_7_9();f0_3_7_10();f0_3_7_11();}function f0_3_8_0(){return Math.random();}function f0_3_8_1(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_3_8_2(){return isNaN(undefined);}function f0_3_8_3(){return Math.random();}function f0_3_8_4(){return Math.random();}function f0_3_8_5(){return Math.max(Math.random(),Math.random());}function f0_3_8_6(){return Math.max(Math.random(),Math.random());}function f0_3_8_7(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_3_8_8(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_3_8_9(){return Math.random();}function f0_3_8_10(){return Math.max(Math.random(),Math.random());}function f0_3_8_11(){return Math.random();}function f0_3_8(){f0_3_8_0();f0_3_8_1();f0_3_8_2();f0_3_8_3();f0_3_8_4();f0_3_8_5();f0_3_8_6();f0_3_8_7();f0_3_8_8();f0_3_8_9();f0_3_8_10();f0_3_8_11();}function f0_3_9_0(){return isNaN(undefined);}function f0_3_9_1(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_3_9_2(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_3_9_3(){return Math.max(Math.random(),Math.random());}function f0_3_9_4(){return isNaN(undefined);}function f0_3_9_5(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_3_9_6(){return Math.max(Math.random(),Math.random());}function f0_3_9_7(){return Math.random();}function f0_3_9_8(){return Math.max(Math.random(),Math.random());}function f0_3_9_9(){return Math.random();}function f0_3_9_10(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_3_9_11(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_3_9(){f0_3_9_0();f0_3_9_1();f0_3_9_2();f0_3_9_3();f0_3_9_4();f0_3_9_5();f0_3_9_6();f0_3_9_7();f0_3_9_8();f0_3_9_9();f0_3_9_10();f0_3_9_11();}function f0_3_10_0(){return Math.max(Math.random(),Math.random());}function f0_3_10_1(){return Math.max(Math.random(),Math.random());}function f0_3_10_2(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_3_10_3(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_3_10_4(){return isNaN(undefined);}function f0_3_10_5(){return Math.random();}function f0_3_10_6(){return isNaN(undefined);}function f0_3_10_7(){return isNaN(undefined);}function f0_3_10_8(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_3_10_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_3_10_10(){return isNaN(undefined);}function f0_3_10_11(){return Math.max(Math.random(),Math.random());}function f0_3_10(){f0_3_10_0();f0_3_10_1();f0_3_10_2();f0_3_10_3();f0_3_10_4();f0_3_10_5();f0_3_10_6();f0_3_10_7();f0_3_10_8();f0_3_10_9();f0_3_10_10();f0_3_10_11();}function f0_3_11_0(){return isNaN(undefined);}function f0_3_11_1(){return Math.max(Math.random(),Math.random());}function f0_3_11_2(){return Math.max(Math.random(),Math.random());}function f0_3_11_3(){return isNaN(undefined);}function f0_3_11_4(){return isNaN(undefined);}function f0_3_11_5(){return Math.max(Math.random(),Math.random());}function f0_3_11_6(){return Math.max(Math.random(),Math.random());}function f0_3_11_7(){return Math.random();}function f0_3_11_8(){return Math.random();}function f0_3_11_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_3_11_10(){return Math.max(Math.random(),Math.random());}function f0_3_11_11(){return Math.random();}function f0_3_11(){f0_3_11_0();f0_3_11_1();f0_3_11_2();f0_3_11_3();f0_3_11_4();f0_3_11_5();f0_3_11_6();f0_3_11_7();f0_3_11_8();f0_3_11_9();f0_3_11_10();f0_3_11_11();}function f0_3(){f0_3_0();f0_3_1();f0_3_2();f0_3_3();f0_3_4();f0_3_5();f0_3_6();f0_3_7();f0_3_8();f0_3_9();f0_3_10();f0_3_11();}function f0_4_0_0(){return Math.max(Math.random(),Math.random());}function f0_4_0_1(){return Math.max(Math.random(),Math.random());}function f0_4_0_2(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_4_0_3(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_4_0_4(){return Math.random();}function f0_4_0_5(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_4_0_6(){return isNaN(undefined);}function f0_4_0_7(){return isNaN(undefined);}function f0_4_0_8(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_4_0_9(){return Math.random();}function f0_4_0_10(){return Math.max(Math.random(),Math.random());}function f0_4_0_11(){return Math.max(Math.random(),Math.random());}function f0_4_0(){f0_4_0_0();f0_4_0_1();f0_4_0_2();f0_4_0_3();f0_4_0_4();f0_4_0_5();f0_4_0_6();f0_4_0_7();f0_4_0_8();f0_4_0_9();f0_4_0_10();f0_4_0_11();}function f0_4_1_0(){return Math.max(Math.random(),Math.random());}function f0_4_1_1(){return Math.random();}function f0_4_1_2(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_4_1_3(){return Math.max(Math.random(),Math.random());}function f0_4_1_4(){return isNaN(undefined);}function f0_4_1_5(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_4_1_6(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_4_1_7(){return Math.max(Math.random(),Math.random());}function f0_4_1_8(){return isNaN(undefined);}function f0_4_1_9(){return Math.max(Math.random(),Math.random());}function f0_4_1_10(){return isNaN(undefined);}function f0_4_1_11(){return Math.max(Math.random(),Math.random());}function f0_4_1(){f0_4_1_0();f0_4_1_1();f0_4_1_2();f0_4_1_3();f0_4_1_4();f0_4_1_5();f0_4_1_6();f0_4_1_7();f0_4_1_8();f0_4_1_9();f0_4_1_10();f0_4_1_11();}function f0_4_2_0(){return Math.random();}function f0_4_2_1(){return Math.random();}function f0_4_2_2(){return isNaN(undefined);}function f0_4_2_3(){return isNaN(undefined);}function f0_4_2_4(){return isNaN(undefined);}function f0_4_2_5(){return Math.max(Math.random(),Math.random());}function f0_4_2_6(){return Math.max(Math.random(),Math.random());}function f0_4_2_7(){return Math.random();}function f0_4_2_8(){return Math.random();}function f0_4_2_9(){return isNaN(undefined);}function f0_4_2_10(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_4_2_11(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_4_2(){f0_4_2_0();f0_4_2_1();f0_4_2_2();f0_4_2_3();f0_4_2_4();f0_4_2_5();f0_4_2_6();f0_4_2_7();f0_4_2_8();f0_4_2_9();f0_4_2_10();f0_4_2_11();}function f0_4_3_0(){return isNaN(undefined);}function f0_4_3_1(){return Math.max(Math.random(),Math.random());}function f0_4_3_2(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_4_3_3(){return isNaN(undefined);}function f0_4_3_4(){return Math.max(Math.random(),Math.random());}function f0_4_3_5(){return isNaN(undefined);}function f0_4_3_6(){return Math.random();}function f0_4_3_7(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_4_3_8(){return Math.max(Math.random(),Math.random());}function f0_4_3_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_4_3_10(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_4_3_11(){return Math.max(Math.random(),Math.random());}function f0_4_3(){f0_4_3_0();f0_4_3_1();f0_4_3_2();f0_4_3_3();f0_4_3_4();f0_4_3_5();f0_4_3_6();f0_4_3_7();f0_4_3_8();f0_4_3_9();f0_4_3_10();f0_4_3_11();}function f0_4_4_0(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_4_4_1(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_4_4_2(){return isNaN(undefined);}function f0_4_4_3(){return Math.max(Math.random(),Math.random());}function f0_4_4_4(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_4_4_5(){return isNaN(undefined);}function f0_4_4_6(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_4_4_7(){return Math.random();}function f0_4_4_8(){return isNaN(undefined);}function f0_4_4_9(){return Math.max(Math.random(),Math.random());}function f0_4_4_10(){return isNaN(undefined);}function f0_4_4_11(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_4_4(){f0_4_4_0();f0_4_4_1();f0_4_4_2();f0_4_4_3();f0_4_4_4();f0_4_4_5();f0_4_4_6();f0_4_4_7();f0_4_4_8();f0_4_4_9();f0_4_4_10();f0_4_4_11();}function f0_4_5_0(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_4_5_1(){return Math.max(Math.random(),Math.random());}function f0_4_5_2(){return Math.max(Math.random(),Math.random());}function f0_4_5_3(){return isNaN(undefined);}function f0_4_5_4(){return Math.random();}function f0_4_5_5(){return Math.max(Math.random(),Math.random());}function f0_4_5_6(){return isNaN(undefined);}function f0_4_5_7(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_4_5_8(){return Math.random();}function f0_4_5_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_4_5_10(){return Math.max(Math.random(),Math.random());}function f0_4_5_11(){return Math.max(Math.random(),Math.random());}function f0_4_5(){f0_4_5_0();f0_4_5_1();f0_4_5_2();f0_4_5_3();f0_4_5_4();f0_4_5_5();f0_4_5_6();f0_4_5_7();f0_4_5_8();f0_4_5_9();f0_4_5_10();f0_4_5_11();}function f0_4_6_0(){return Math.random();}function f0_4_6_1(){return Math.max(Math.random(),Math.random());}function f0_4_6_2(){return Math.max(Math.random(),Math.random());}function f0_4_6_3(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_4_6_4(){return Math.max(Math.random(),Math.random());}function f0_4_6_5(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_4_6_6(){return Math.max(Math.random(),Math.random());}function f0_4_6_7(){return Math.random();}function f0_4_6_8(){return isNaN(undefined);}function f0_4_6_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_4_6_10(){return Math.max(Math.random(),Math.random());}function f0_4_6_11(){return Math.random();}function f0_4_6(){f0_4_6_0();f0_4_6_1();f0_4_6_2();f0_4_6_3();f0_4_6_4();f0_4_6_5();f0_4_6_6();f0_4_6_7();f0_4_6_8();f0_4_6_9();f0_4_6_10();f0_4_6_11();}function f0_4_7_0(){return Math.max(Math.random(),Math.random());}function f0_4_7_1(){return Math.random();}function f0_4_7_2(){return Math.max(Math.random(),Math.random());}function f0_4_7_3(){return isNaN(undefined);}function f0_4_7_4(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_4_7_5(){return Math.max(Math.random(),Math.random());}function f0_4_7_6(){return Math.max(Math.random(),Math.random());}function f0_4_7_7(){return isNaN(undefined);}function f0_4_7_8(){return Math.max(Math.random(),Math.random());}function f0_4_7_9(){return Math.random();}function f0_4_7_10(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_4_7_11(){return isNaN(undefined);}function f0_4_7(){f0_4_7_0();f0_4_7_1();f0_4_7_2();f0_4_7_3();f0_4_7_4();f0_4_7_5();f0_4_7_6();f0_4_7_7();f0_4_7_8();f0_4_7_9();f0_4_7_10();f0_4_7_11();}function f0_4_8_0(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_4_8_1(){return Math.max(Math.random(),Math.random());}function f0_4_8_2(){return Math.random();}function f0_4_8_3(){return Math.max(Math.random(),Math.random());}function f0_4_8_4(){return Math.random();}function f0_4_8_5(){return isNaN(undefined);}function f0_4_8_6(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_4_8_7(){return Math.random();}function f0_4_8_8(){return Math.max(Math.random(),Math.random());}function f0_4_8_9(){return isNaN(undefined);}function f0_4_8_10(){return Math.random();}function f0_4_8_11(){return isNaN(undefined);}function f0_4_8(){f0_4_8_0();f0_4_8_1();f0_4_8_2();f0_4_8_3();f0_4_8_4();f0_4_8_5();f0_4_8_6();f0_4_8_7();f0_4_8_8();f0_4_8_9();f0_4_8_10();f0_4_8_11();}function f0_4_9_0(){return Math.max(Math.random(),Math.random());}function f0_4_9_1(){return Math.random();}function f0_4_9_2(){return Math.random();}function f0_4_9_3(){return Math.max(Math.random(),Math.random());}function f0_4_9_4(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_4_9_5(){return isNaN(undefined);}function f0_4_9_6(){return isNaN(undefined);}function f0_4_9_7(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_4_9_8(){return Math.random();}function f0_4_9_9(){return Math.random();}function f0_4_9_10(){return Math.max(Math.random(),Math.random());}function f0_4_9_11(){return Math.random();}function f0_4_9(){f0_4_9_0();f0_4_9_1();f0_4_9_2();f0_4_9_3();f0_4_9_4();f0_4_9_5();f0_4_9_6();f0_4_9_7();f0_4_9_8();f0_4_9_9();f0_4_9_10();f0_4_9_11();}function f0_4_10_0(){return isNaN(undefined);}function f0_4_10_1(){return isNaN(undefined);}function f0_4_10_2(){return Math.max(Math.random(),Math.random());}function f0_4_10_3(){return Math.random();}function f0_4_10_4(){return Math.random();}function f0_4_10_5(){return Math.random();}function f0_4_10_6(){return isNaN(undefined);}function f0_4_10_7(){return isNaN(undefined);}function f0_4_10_8(){return Math.random();}function f0_4_10_9(){return Math.random();}function f0_4_10_10(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_4_10_11(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_4_10(){f0_4_10_0();f0_4_10_1();f0_4_10_2();f0_4_10_3();f0_4_10_4();f0_4_10_5();f0_4_10_6();f0_4_10_7();f0_4_10_8();f0_4_10_9();f0_4_10_10();f0_4_10_11();}function f0_4_11_0(){return isNaN(undefined);}function f0_4_11_1(){return Math.max(Math.random(),Math.random());}function f0_4_11_2(){return Math.max(Math.random(),Math.random());}function f0_4_11_3(){return isNaN(undefined);}function f0_4_11_4(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_4_11_5(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_4_11_6(){return isNaN(undefined);}function f0_4_11_7(){return isNaN(undefined);}function f0_4_11_8(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_4_11_9(){return Math.max(Math.random(),Math.random());}function f0_4_11_10(){return isNaN(undefined);}function f0_4_11_11(){return isNaN(undefined);}function f0_4_11(){f0_4_11_0();f0_4_11_1();f0_4_11_2();f0_4_11_3();f0_4_11_4();f0_4_11_5();f0_4_11_6();f0_4_11_7();f0_4_11_8();f0_4_11_9();f0_4_11_10();f0_4_11_11();}function f0_4(){f0_4_0();f0_4_1();f0_4_2();f0_4_3();f0_4_4();f0_4_5();f0_4_6();f0_4_7();f0_4_8();f0_4_9();f0_4_10();f0_4_11();}function f0_5_0_0(){return Math.max(Math.random(),Math.random());}function f0_5_0_1(){return Math.random();}function f0_5_0_2(){return isNaN(undefined);}function f0_5_0_3(){return Math.random();}function f0_5_0_4(){return Math.max(Math.random(),Math.random());}function f0_5_0_5(){return isNaN(undefined);}function f0_5_0_6(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_5_0_7(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_5_0_8(){return Math.max(Math.random(),Math.random());}function f0_5_0_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_5_0_10(){return Math.random();}function f0_5_0_11(){return isNaN(undefined);}function f0_5_0(){f0_5_0_0();f0_5_0_1();f0_5_0_2();f0_5_0_3();f0_5_0_4();f0_5_0_5();f0_5_0_6();f0_5_0_7();f0_5_0_8();f0_5_0_9();f0_5_0_10();f0_5_0_11();}function f0_5_1_0(){return Math.max(Math.random(),Math.random());}function f0_5_1_1(){return isNaN(undefined);}function f0_5_1_2(){return Math.random();}function f0_5_1_3(){return isNaN(undefined);}function f0_5_1_4(){return Math.random();}function f0_5_1_5(){return Math.max(Math.random(),Math.random());}function f0_5_1_6(){return isNaN(undefined);}function f0_5_1_7(){return isNaN(undefined);}function f0_5_1_8(){return Math.random();}function f0_5_1_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_5_1_10(){return Math.max(Math.random(),Math.random());}function f0_5_1_11(){return Math.max(Math.random(),Math.random());}function f0_5_1(){f0_5_1_0();f0_5_1_1();f0_5_1_2();f0_5_1_3();f0_5_1_4();f0_5_1_5();f0_5_1_6();f0_5_1_7();f0_5_1_8();f0_5_1_9();f0_5_1_10();f0_5_1_11();}function f0_5_2_0(){return isNaN(undefined);}function f0_5_2_1(){return isNaN(undefined);}function f0_5_2_2(){return Math.random();}function f0_5_2_3(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_5_2_4(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_5_2_5(){return Math.max(Math.random(),Math.random());}function f0_5_2_6(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_5_2_7(){return Math.random();}function f0_5_2_8(){return Math.max(Math.random(),Math.random());}function f0_5_2_9(){return isNaN(undefined);}function f0_5_2_10(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_5_2_11(){return isNaN(undefined);}function f0_5_2(){f0_5_2_0();f0_5_2_1();f0_5_2_2();f0_5_2_3();f0_5_2_4();f0_5_2_5();f0_5_2_6();f0_5_2_7();f0_5_2_8();f0_5_2_9();f0_5_2_10();f0_5_2_11();}function f0_5_3_0(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_5_3_1(){return isNaN(undefined);}function f0_5_3_2(){return Math.random();}function f0_5_3_3(){return isNaN(undefined);}function f0_5_3_4(){return Math.max(Math.random(),Math.random());}function f0_5_3_5(){return Math.max(Math.random(),Math.random());}function f0_5_3_6(){return isNaN(undefined);}function f0_5_3_7(){return Math.max(Math.random(),Math.random());}function f0_5_3_8(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_5_3_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_5_3_10(){return Math.max(Math.random(),Math.random());}function f0_5_3_11(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_5_3(){f0_5_3_0();f0_5_3_1();f0_5_3_2();f0_5_3_3();f0_5_3_4();f0_5_3_5();f0_5_3_6();f0_5_3_7();f0_5_3_8();f0_5_3_9();f0_5_3_10();f0_5_3_11();}function f0_5_4_0(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_5_4_1(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_5_4_2(){return Math.random();}function f0_5_4_3(){return Math.random();}function f0_5_4_4(){return Math.random();}function f0_5_4_5(){return Math.random();}function f0_5_4_6(){return Math.random();}function f0_5_4_7(){return Math.random();}function f0_5_4_8(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_5_4_9(){return Math.random();}function f0_5_4_10(){return isNaN(undefined);}function f0_5_4_11(){return Math.max(Math.random(),Math.random());}function f0_5_4(){f0_5_4_0();f0_5_4_1();f0_5_4_2();f0_5_4_3();f0_5_4_4();f0_5_4_5();f0_5_4_6();f0_5_4_7();f0_5_4_8();f0_5_4_9();f0_5_4_10();f0_5_4_11();}function f0_5_5_0(){return isNaN(undefined);}function f0_5_5_1(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_5_5_2(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_5_5_3(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_5_5_4(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_5_5_5(){return isNaN(undefined);}function f0_5_5_6(){return Math.random();}function f0_5_5_7(){return Math.random();}function f0_5_5_8(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_5_5_9(){return Math.random();}function f0_5_5_10(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_5_5_11(){return Math.random();}function f0_5_5(){f0_5_5_0();f0_5_5_1();f0_5_5_2();f0_5_5_3();f0_5_5_4();f0_5_5_5();f0_5_5_6();f0_5_5_7();f0_5_5_8();f0_5_5_9();f0_5_5_10();f0_5_5_11();}function f0_5_6_0(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_5_6_1(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_5_6_2(){return Math.random();}function f0_5_6_3(){return isNaN(undefined);}function f0_5_6_4(){return Math.random();}function f0_5_6_5(){return Math.max(Math.random(),Math.random());}function f0_5_6_6(){return Math.random();}function f0_5_6_7(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_5_6_8(){return isNaN(undefined);}function f0_5_6_9(){return isNaN(undefined);}function f0_5_6_10(){return Math.random();}function f0_5_6_11(){return Math.random();}function f0_5_6(){f0_5_6_0();f0_5_6_1();f0_5_6_2();f0_5_6_3();f0_5_6_4();f0_5_6_5();f0_5_6_6();f0_5_6_7();f0_5_6_8();f0_5_6_9();f0_5_6_10();f0_5_6_11();}function f0_5_7_0(){return Math.max(Math.random(),Math.random());}function f0_5_7_1(){return Math.max(Math.random(),Math.random());}function f0_5_7_2(){return Math.random();}function f0_5_7_3(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_5_7_4(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_5_7_5(){return Math.random();}function f0_5_7_6(){return isNaN(undefined);}function f0_5_7_7(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_5_7_8(){return Math.random();}function f0_5_7_9(){return Math.max(Math.random(),Math.random());}function f0_5_7_10(){return Math.random();}function f0_5_7_11(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_5_7(){f0_5_7_0();f0_5_7_1();f0_5_7_2();f0_5_7_3();f0_5_7_4();f0_5_7_5();f0_5_7_6();f0_5_7_7();f0_5_7_8();f0_5_7_9();f0_5_7_10();f0_5_7_11();}function f0_5_8_0(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_5_8_1(){return Math.max(Math.random(),Math.random());}function f0_5_8_2(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_5_8_3(){return Math.random();}function f0_5_8_4(){return Math.max(Math.random(),Math.random());}function f0_5_8_5(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_5_8_6(){return Math.random();}function f0_5_8_7(){return Math.random();}function f0_5_8_8(){return isNaN(undefined);}function f0_5_8_9(){return Math.random();}function f0_5_8_10(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_5_8_11(){return isNaN(undefined);}function f0_5_8(){f0_5_8_0();f0_5_8_1();f0_5_8_2();f0_5_8_3();f0_5_8_4();f0_5_8_5();f0_5_8_6();f0_5_8_7();f0_5_8_8();f0_5_8_9();f0_5_8_10();f0_5_8_11();}function f0_5_9_0(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_5_9_1(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_5_9_2(){return Math.max(Math.random(),Math.random());}function f0_5_9_3(){return Math.max(Math.random(),Math.random());}function f0_5_9_4(){return Math.max(Math.random(),Math.random());}function f0_5_9_5(){return Math.max(Math.random(),Math.random());}function f0_5_9_6(){return Math.max(Math.random(),Math.random());}function f0_5_9_7(){return Math.random();}function f0_5_9_8(){return Math.max(Math.random(),Math.random());}function f0_5_9_9(){return Math.random();}function f0_5_9_10(){return Math.random();}function f0_5_9_11(){return isNaN(undefined);}function f0_5_9(){f0_5_9_0();f0_5_9_1();f0_5_9_2();f0_5_9_3();f0_5_9_4();f0_5_9_5();f0_5_9_6();f0_5_9_7();f0_5_9_8();f0_5_9_9();f0_5_9_10();f0_5_9_11();}function f0_5_10_0(){return isNaN(undefined);}function f0_5_10_1(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_5_10_2(){return isNaN(undefined);}function f0_5_10_3(){return Math.max(Math.random(),Math.random());}function f0_5_10_4(){return Math.random();}function f0_5_10_5(){return Math.random();}function f0_5_10_6(){return Math.random();}function f0_5_10_7(){return Math.max(Math.random(),Math.random());}function f0_5_10_8(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_5_10_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_5_10_10(){return Math.max(Math.random(),Math.random());}function f0_5_10_11(){return Math.random();}function f0_5_10(){f0_5_10_0();f0_5_10_1();f0_5_10_2();f0_5_10_3();f0_5_10_4();f0_5_10_5();f0_5_10_6();f0_5_10_7();f0_5_10_8();f0_5_10_9();f0_5_10_10();f0_5_10_11();}function f0_5_11_0(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_5_11_1(){return Math.max(Math.random(),Math.random());}function f0_5_11_2(){return Math.random();}function f0_5_11_3(){return Math.random();}function f0_5_11_4(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_5_11_5(){return Math.random();}function f0_5_11_6(){return Math.random();}function f0_5_11_7(){return isNaN(undefined);}function f0_5_11_8(){return isNaN(undefined);}function f0_5_11_9(){return Math.max(Math.random(),Math.random());}function f0_5_11_10(){return Math.max(Math.random(),Math.random());}function f0_5_11_11(){return isNaN(undefined);}function f0_5_11(){f0_5_11_0();f0_5_11_1();f0_5_11_2();f0_5_11_3();f0_5_11_4();f0_5_11_5();f0_5_11_6();f0_5_11_7();f0_5_11_8();f0_5_11_9();f0_5_11_10();f0_5_11_11();}function f0_5(){f0_5_0();f0_5_1();f0_5_2();f0_5_3();f0_5_4();f0_5_5();f0_5_6();f0_5_7();f0_5_8();f0_5_9();f0_5_10();f0_5_11();}function f0_6_0_0(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_6_0_1(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_6_0_2(){return Math.max(Math.random(),Math.random());}function f0_6_0_3(){return Math.random();}function f0_6_0_4(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_6_0_5(){return isNaN(undefined);}function f0_6_0_6(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_6_0_7(){return Math.random();}function f0_6_0_8(){return isNaN(undefined);}function f0_6_0_9(){return isNaN(undefined);}function f0_6_0_10(){return Math.max(Math.random(),Math.random());}function f0_6_0_11(){return isNaN(undefined);}function f0_6_0(){f0_6_0_0();f0_6_0_1();f0_6_0_2();f0_6_0_3();f0_6_0_4();f0_6_0_5();f0_6_0_6();f0_6_0_7();f0_6_0_8();f0_6_0_9();f0_6_0_10();f0_6_0_11();}function f0_6_1_0(){return isNaN(undefined);}function f0_6_1_1(){return Math.max(Math.random(),Math.random());}function f0_6_1_2(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_6_1_3(){return Math.max(Math.random(),Math.random());}function f0_6_1_4(){return Math.random();}function f0_6_1_5(){return isNaN(undefined);}function f0_6_1_6(){return isNaN(undefined);}function f0_6_1_7(){return isNaN(undefined);}function f0_6_1_8(){return Math.random();}function f0_6_1_9(){return Math.max(Math.random(),Math.random());}function f0_6_1_10(){return Math.random();}function f0_6_1_11(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_6_1(){f0_6_1_0();f0_6_1_1();f0_6_1_2();f0_6_1_3();f0_6_1_4();f0_6_1_5();f0_6_1_6();f0_6_1_7();f0_6_1_8();f0_6_1_9();f0_6_1_10();f0_6_1_11();}function f0_6_2_0(){return isNaN(undefined);}function f0_6_2_1(){return Math.random();}function f0_6_2_2(){return isNaN(undefined);}function f0_6_2_3(){return Math.max(Math.random(),Math.random());}function f0_6_2_4(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_6_2_5(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_6_2_6(){return Math.max(Math.random(),Math.random());}function f0_6_2_7(){return Math.max(Math.random(),Math.random());}function f0_6_2_8(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_6_2_9(){return Math.random();}function f0_6_2_10(){return Math.max(Math.random(),Math.random());}function f0_6_2_11(){return isNaN(undefined);}function f0_6_2(){f0_6_2_0();f0_6_2_1();f0_6_2_2();f0_6_2_3();f0_6_2_4();f0_6_2_5();f0_6_2_6();f0_6_2_7();f0_6_2_8();f0_6_2_9();f0_6_2_10();f0_6_2_11();}function f0_6_3_0(){return Math.random();}function f0_6_3_1(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_6_3_2(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_6_3_3(){return isNaN(undefined);}function f0_6_3_4(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_6_3_5(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_6_3_6(){return Math.random();}function f0_6_3_7(){return isNaN(undefined);}function f0_6_3_8(){return Math.max(Math.random(),Math.random());}function f0_6_3_9(){return Math.max(Math.random(),Math.random());}function f0_6_3_10(){return Math.max(Math.random(),Math.random());}function f0_6_3_11(){return Math.random();}function f0_6_3(){f0_6_3_0();f0_6_3_1();f0_6_3_2();f0_6_3_3();f0_6_3_4();f0_6_3_5();f0_6_3_6();f0_6_3_7();f0_6_3_8();f0_6_3_9();f0_6_3_10();f0_6_3_11();}function f0_6_4_0(){return Math.max(Math.random(),Math.random());}function f0_6_4_1(){return Math.random();}function f0_6_4_2(){return isNaN(undefined);}function f0_6_4_3(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_6_4_4(){return Math.max(Math.random(),Math.random());}function f0_6_4_5(){return Math.max(Math.random(),Math.random());}function f0_6_4_6(){return Math.max(Math.random(),Math.random());}function f0_6_4_7(){return Math.random();}function f0_6_4_8(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_6_4_9(){return isNaN(undefined);}function f0_6_4_10(){return isNaN(undefined);}function f0_6_4_11(){return Math.max(Math.random(),Math.random());}function f0_6_4(){f0_6_4_0();f0_6_4_1();f0_6_4_2();f0_6_4_3();f0_6_4_4();f0_6_4_5();f0_6_4_6();f0_6_4_7();f0_6_4_8();f0_6_4_9();f0_6_4_10();f0_6_4_11();}function f0_6_5_0(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_6_5_1(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_6_5_2(){return isNaN(undefined);}function f0_6_5_3(){return isNaN(undefined);}function f0_6_5_4(){return Math.random();}function f0_6_5_5(){return Math.max(Math.random(),Math.random());}function f0_6_5_6(){return Math.max(Math.random(),Math.random());}function f0_6_5_7(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_6_5_8(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_6_5_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_6_5_10(){return isNaN(undefined);}function f0_6_5_11(){return Math.max(Math.random(),Math.random());}function f0_6_5(){f0_6_5_0();f0_6_5_1();f0_6_5_2();f0_6_5_3();f0_6_5_4();f0_6_5_5();f0_6_5_6();f0_6_5_7();f0_6_5_8();f0_6_5_9();f0_6_5_10();f0_6_5_11();}function f0_6_6_0(){return Math.max(Math.random(),Math.random());}function f0_6_6_1(){return Math.max(Math.random(),Math.random());}function f0_6_6_2(){return Math.max(Math.random(),Math.random());}function f0_6_6_3(){return Math.random();}function f0_6_6_4(){return isNaN(undefined);}function f0_6_6_5(){return isNaN(undefined);}function f0_6_6_6(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_6_6_7(){return isNaN(undefined);}function f0_6_6_8(){return Math.max(Math.random(),Math.random());}function f0_6_6_9(){return isNaN(undefined);}function f0_6_6_10(){return Math.max(Math.random(),Math.random());}function f0_6_6_11(){return isNaN(undefined);}function f0_6_6(){f0_6_6_0();f0_6_6_1();f0_6_6_2();f0_6_6_3();f0_6_6_4();f0_6_6_5();f0_6_6_6();f0_6_6_7();f0_6_6_8();f0_6_6_9();f0_6_6_10();f0_6_6_11();}function f0_6_7_0(){return isNaN(undefined);}function f0_6_7_1(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_6_7_2(){return Math.random();}function f0_6_7_3(){return Math.max(Math.random(),Math.random());}function f0_6_7_4(){return Math.random();}function f0_6_7_5(){return isNaN(undefined);}function f0_6_7_6(){return isNaN(undefined);}function f0_6_7_7(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_6_7_8(){return Math.random();}function f0_6_7_9(){return Math.random();}function f0_6_7_10(){return Math.max(Math.random(),Math.random());}function f0_6_7_11(){return Math.max(Math.random(),Math.random());}function f0_6_7(){f0_6_7_0();f0_6_7_1();f0_6_7_2();f0_6_7_3();f0_6_7_4();f0_6_7_5();f0_6_7_6();f0_6_7_7();f0_6_7_8();f0_6_7_9();f0_6_7_10();f0_6_7_11();}function f0_6_8_0(){return isNaN(undefined);}function f0_6_8_1(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_6_8_2(){return Math.max(Math.random(),Math.random());}function f0_6_8_3(){return isNaN(undefined);}function f0_6_8_4(){return isNaN(undefined);}function f0_6_8_5(){return Math.max(Math.random(),Math.random());}function f0_6_8_6(){return isNaN(undefined);}function f0_6_8_7(){return Math.random();}function f0_6_8_8(){return Math.random();}function f0_6_8_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_6_8_10(){return Math.max(Math.random(),Math.random());}function f0_6_8_11(){return Math.random();}function f0_6_8(){f0_6_8_0();f0_6_8_1();f0_6_8_2();f0_6_8_3();f0_6_8_4();f0_6_8_5();f0_6_8_6();f0_6_8_7();f0_6_8_8();f0_6_8_9();f0_6_8_10();f0_6_8_11();}function f0_6_9_0(){return isNaN(undefined);}function f0_6_9_1(){return Math.max(Math.random(),Math.random());}function f0_6_9_2(){return isNaN(undefined);}function f0_6_9_3(){return Math.random();}function f0_6_9_4(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_6_9_5(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_6_9_6(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_6_9_7(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_6_9_8(){return Math.max(Math.random(),Math.random());}function f0_6_9_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_6_9_10(){return isNaN(undefined);}function f0_6_9_11(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_6_9(){f0_6_9_0();f0_6_9_1();f0_6_9_2();f0_6_9_3();f0_6_9_4();f0_6_9_5();f0_6_9_6();f0_6_9_7();f0_6_9_8();f0_6_9_9();f0_6_9_10();f0_6_9_11();}function f0_6_10_0(){return isNaN(undefined);}function f0_6_10_1(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_6_10_2(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_6_10_3(){return isNaN(undefined);}function f0_6_10_4(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_6_10_5(){return Math.random();}function f0_6_10_6(){return Math.random();}function f0_6_10_7(){return Math.max(Math.random(),Math.random());}function f0_6_10_8(){return isNaN(undefined);}function f0_6_10_9(){return Math.random();}function f0_6_10_10(){return isNaN(undefined);}function f0_6_10_11(){return Math.max(Math.random(),Math.random());}function f0_6_10(){f0_6_10_0();f0_6_10_1();f0_6_10_2();f0_6_10_3();f0_6_10_4();f0_6_10_5();f0_6_10_6();f0_6_10_7();f0_6_10_8();f0_6_10_9();f0_6_10_10();f0_6_10_11();}function f0_6_11_0(){return isNaN(undefined);}function f0_6_11_1(){return Math.max(Math.random(),Math.random());}function f0_6_11_2(){return Math.random();}function f0_6_11_3(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_6_11_4(){return Math.random();}function f0_6_11_5(){return isNaN(undefined);}function f0_6_11_6(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_6_11_7(){return Math.random();}function f0_6_11_8(){return Math.max(Math.random(),Math.random());}function f0_6_11_9(){return Math.max(Math.random(),Math.random());}function f0_6_11_10(){return Math.random();}function f0_6_11_11(){return Math.max(Math.random(),Math.random());}function f0_6_11(){f0_6_11_0();f0_6_11_1();f0_6_11_2();f0_6_11_3();f0_6_11_4();f0_6_11_5();f0_6_11_6();f0_6_11_7();f0_6_11_8();f0_6_11_9();f0_6_11_10();f0_6_11_11();}function f0_6(){f0_6_0();f0_6_1();f0_6_2();f0_6_3();f0_6_4();f0_6_5();f0_6_6();f0_6_7();f0_6_8();f0_6_9();f0_6_10();f0_6_11();}function f0_7_0_0(){return Math.max(Math.random(),Math.random());}function f0_7_0_1(){return Math.random();}function f0_7_0_2(){return Math.max(Math.random(),Math.random());}function f0_7_0_3(){return isNaN(undefined);}function f0_7_0_4(){return Math.random();}function f0_7_0_5(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_7_0_6(){return isNaN(undefined);}function f0_7_0_7(){return Math.max(Math.random(),Math.random());}function f0_7_0_8(){return Math.random();}function f0_7_0_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_7_0_10(){return isNaN(undefined);}function f0_7_0_11(){return isNaN(undefined);}function f0_7_0(){f0_7_0_0();f0_7_0_1();f0_7_0_2();f0_7_0_3();f0_7_0_4();f0_7_0_5();f0_7_0_6();f0_7_0_7();f0_7_0_8();f0_7_0_9();f0_7_0_10();f0_7_0_11();}function f0_7_1_0(){return Math.random();}function f0_7_1_1(){return Math.random();}function f0_7_1_2(){return Math.random();}function f0_7_1_3(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_7_1_4(){return Math.random();}function f0_7_1_5(){return isNaN(undefined);}function f0_7_1_6(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_7_1_7(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_7_1_8(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_7_1_9(){return Math.random();}function f0_7_1_10(){return Math.max(Math.random(),Math.random());}function f0_7_1_11(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_7_1(){f0_7_1_0();f0_7_1_1();f0_7_1_2();f0_7_1_3();f0_7_1_4();f0_7_1_5();f0_7_1_6();f0_7_1_7();f0_7_1_8();f0_7_1_9();f0_7_1_10();f0_7_1_11();}function f0_7_2_0(){return isNaN(undefined);}function f0_7_2_1(){return Math.random();}function f0_7_2_2(){return isNaN(undefined);}function f0_7_2_3(){return Math.max(Math.random(),Math.random());}function f0_7_2_4(){return isNaN(undefined);}function f0_7_2_5(){return Math.random();}function f0_7_2_6(){return Math.random();}function f0_7_2_7(){return Math.max(Math.random(),Math.random());}function f0_7_2_8(){return isNaN(undefined);}function f0_7_2_9(){return isNaN(undefined);}function f0_7_2_10(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_7_2_11(){return isNaN(undefined);}function f0_7_2(){f0_7_2_0();f0_7_2_1();f0_7_2_2();f0_7_2_3();f0_7_2_4();f0_7_2_5();f0_7_2_6();f0_7_2_7();f0_7_2_8();f0_7_2_9();f0_7_2_10();f0_7_2_11();}function f0_7_3_0(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_7_3_1(){return isNaN(undefined);}function f0_7_3_2(){return isNaN(undefined);}function f0_7_3_3(){return Math.max(Math.random(),Math.random());}function f0_7_3_4(){return Math.max(Math.random(),Math.random());}function f0_7_3_5(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_7_3_6(){return isNaN(undefined);}function f0_7_3_7(){return Math.random();}function f0_7_3_8(){return Math.max(Math.random(),Math.random());}function f0_7_3_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_7_3_10(){return isNaN(undefined);}function f0_7_3_11(){return isNaN(undefined);}function f0_7_3(){f0_7_3_0();f0_7_3_1();f0_7_3_2();f0_7_3_3();f0_7_3_4();f0_7_3_5();f0_7_3_6();f0_7_3_7();f0_7_3_8();f0_7_3_9();f0_7_3_10();f0_7_3_11();}function f0_7_4_0(){return Math.max(Math.random(),Math.random());}function f0_7_4_1(){return Math.max(Math.random(),Math.random());}function f0_7_4_2(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_7_4_3(){return Math.random();}function f0_7_4_4(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_7_4_5(){return isNaN(undefined);}function f0_7_4_6(){return Math.random();}function f0_7_4_7(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_7_4_8(){return isNaN(undefined);}function f0_7_4_9(){return Math.max(Math.random(),Math.random());}function f0_7_4_10(){return isNaN(undefined);}function f0_7_4_11(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_7_4(){f0_7_4_0();f0_7_4_1();f0_7_4_2();f0_7_4_3();f0_7_4_4();f0_7_4_5();f0_7_4_6();f0_7_4_7();f0_7_4_8();f0_7_4_9();f0_7_4_10();f0_7_4_11();}function f0_7_5_0(){return Math.random();}function f0_7_5_1(){return Math.random();}function f0_7_5_2(){return isNaN(undefined);}function f0_7_5_3(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_7_5_4(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_7_5_5(){return Math.max(Math.random(),Math.random());}function f0_7_5_6(){return isNaN(undefined);}function f0_7_5_7(){return Math.max(Math.random(),Math.random());}function f0_7_5_8(){return isNaN(undefined);}function f0_7_5_9(){return isNaN(undefined);}function f0_7_5_10(){return isNaN(undefined);}function f0_7_5_11(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_7_5(){f0_7_5_0();f0_7_5_1();f0_7_5_2();f0_7_5_3();f0_7_5_4();f0_7_5_5();f0_7_5_6();f0_7_5_7();f0_7_5_8();f0_7_5_9();f0_7_5_10();f0_7_5_11();}function f0_7_6_0(){return Math.max(Math.random(),Math.random());}function f0_7_6_1(){return Math.max(Math.random(),Math.random());}function f0_7_6_2(){return Math.random();}function f0_7_6_3(){return Math.random();}function f0_7_6_4(){return isNaN(undefined);}function f0_7_6_5(){return isNaN(undefined);}function f0_7_6_6(){return Math.random();}function f0_7_6_7(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_7_6_8(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_7_6_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_7_6_10(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_7_6_11(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_7_6(){f0_7_6_0();f0_7_6_1();f0_7_6_2();f0_7_6_3();f0_7_6_4();f0_7_6_5();f0_7_6_6();f0_7_6_7();f0_7_6_8();f0_7_6_9();f0_7_6_10();f0_7_6_11();}function f0_7_7_0(){return Math.max(Math.random(),Math.random());}function f0_7_7_1(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_7_7_2(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_7_7_3(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_7_7_4(){return isNaN(undefined);}function f0_7_7_5(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_7_7_6(){return Math.max(Math.random(),Math.random());}function f0_7_7_7(){return Math.random();}function f0_7_7_8(){return Math.max(Math.random(),Math.random());}function f0_7_7_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_7_7_10(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_7_7_11(){return Math.random();}function f0_7_7(){f0_7_7_0();f0_7_7_1();f0_7_7_2();f0_7_7_3();f0_7_7_4();f0_7_7_5();f0_7_7_6();f0_7_7_7();f0_7_7_8();f0_7_7_9();f0_7_7_10();f0_7_7_11();}function f0_7_8_0(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_7_8_1(){return Math.max(Math.random(),Math.random());}function f0_7_8_2(){return Math.random();}function f0_7_8_3(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_7_8_4(){return isNaN(undefined);}function f0_7_8_5(){return isNaN(undefined);}function f0_7_8_6(){return Math.max(Math.random(),Math.random());}function f0_7_8_7(){return Math.random();}function f0_7_8_8(){return isNaN(undefined);}function f0_7_8_9(){return isNaN(undefined);}function f0_7_8_10(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_7_8_11(){return Math.max(Math.random(),Math.random());}function f0_7_8(){f0_7_8_0();f0_7_8_1();f0_7_8_2();f0_7_8_3();f0_7_8_4();f0_7_8_5();f0_7_8_6();f0_7_8_7();f0_7_8_8();f0_7_8_9();f0_7_8_10();f0_7_8_11();}function f0_7_9_0(){return Math.random();}function f0_7_9_1(){return Math.random();}function f0_7_9_2(){return Math.random();}function f0_7_9_3(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_7_9_4(){return Math.max(Math.random(),Math.random());}function f0_7_9_5(){return isNaN(undefined);}function f0_7_9_6(){return Math.random();}function f0_7_9_7(){return Math.random();}function f0_7_9_8(){return Math.max(Math.random(),Math.random());}function f0_7_9_9(){return isNaN(undefined);}function f0_7_9_10(){return Math.max(Math.random(),Math.random());}function f0_7_9_11(){return Math.max(Math.random(),Math.random());}function f0_7_9(){f0_7_9_0();f0_7_9_1();f0_7_9_2();f0_7_9_3();f0_7_9_4();f0_7_9_5();f0_7_9_6();f0_7_9_7();f0_7_9_8();f0_7_9_9();f0_7_9_10();f0_7_9_11();}function f0_7_10_0(){return Math.max(Math.random(),Math.random());}function f0_7_10_1(){return Math.random();}function f0_7_10_2(){return Math.max(Math.random(),Math.random());}function f0_7_10_3(){return Math.max(Math.random(),Math.random());}function f0_7_10_4(){return isNaN(undefined);}function f0_7_10_5(){return Math.max(Math.random(),Math.random());}function f0_7_10_6(){return isNaN(undefined);}function f0_7_10_7(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_7_10_8(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_7_10_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_7_10_10(){return isNaN(undefined);}function f0_7_10_11(){return Math.max(Math.random(),Math.random());}function f0_7_10(){f0_7_10_0();f0_7_10_1();f0_7_10_2();f0_7_10_3();f0_7_10_4();f0_7_10_5();f0_7_10_6();f0_7_10_7();f0_7_10_8();f0_7_10_9();f0_7_10_10();f0_7_10_11();}function f0_7_11_0(){return Math.max(Math.random(),Math.random());}function f0_7_11_1(){return Math.max(Math.random(),Math.random());}function f0_7_11_2(){return isNaN(undefined);}function f0_7_11_3(){return isNaN(undefined);}function f0_7_11_4(){return Math.max(Math.random(),Math.random());}function f0_7_11_5(){return Math.max(Math.random(),Math.random());}function f0_7_11_6(){return Math.random();}function f0_7_11_7(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_7_11_8(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_7_11_9(){return isNaN(undefined);}function f0_7_11_10(){return Math.random();}function f0_7_11_11(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_7_11(){f0_7_11_0();f0_7_11_1();f0_7_11_2();f0_7_11_3();f0_7_11_4();f0_7_11_5();f0_7_11_6();f0_7_11_7();f0_7_11_8();f0_7_11_9();f0_7_11_10();f0_7_11_11();}function f0_7(){f0_7_0();f0_7_1();f0_7_2();f0_7_3();f0_7_4();f0_7_5();f0_7_6();f0_7_7();f0_7_8();f0_7_9();f0_7_10();f0_7_11();}function f0_8_0_0(){return Math.max(Math.random(),Math.random());}function f0_8_0_1(){return Math.max(Math.random(),Math.random());}function f0_8_0_2(){return Math.random();}function f0_8_0_3(){return Math.max(Math.random(),Math.random());}function f0_8_0_4(){return Math.random();}function f0_8_0_5(){return Math.max(Math.random(),Math.random());}function f0_8_0_6(){return Math.random();}function f0_8_0_7(){return Math.random();}function f0_8_0_8(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_8_0_9(){return Math.random();}function f0_8_0_10(){return Math.max(Math.random(),Math.random());}function f0_8_0_11(){return isNaN(undefined);}function f0_8_0(){f0_8_0_0();f0_8_0_1();f0_8_0_2();f0_8_0_3();f0_8_0_4();f0_8_0_5();f0_8_0_6();f0_8_0_7();f0_8_0_8();f0_8_0_9();f0_8_0_10();f0_8_0_11();}function f0_8_1_0(){return Math.random();}function f0_8_1_1(){return Math.random();}function f0_8_1_2(){return Math.random();}function f0_8_1_3(){return isNaN(undefined);}function f0_8_1_4(){return Math.random();}function f0_8_1_5(){return Math.random();}function f0_8_1_6(){return isNaN(undefined);}function f0_8_1_7(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_8_1_8(){return Math.max(Math.random(),Math.random());}function f0_8_1_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_8_1_10(){return Math.max(Math.random(),Math.random());}function f0_8_1_11(){return Math.max(Math.random(),Math.random());}function f0_8_1(){f0_8_1_0();f0_8_1_1();f0_8_1_2();f0_8_1_3();f0_8_1_4();f0_8_1_5();f0_8_1_6();f0_8_1_7();f0_8_1_8();f0_8_1_9();f0_8_1_10();f0_8_1_11();}function f0_8_2_0(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_8_2_1(){return isNaN(undefined);}function f0_8_2_2(){return isNaN(undefined);}function f0_8_2_3(){return Math.max(Math.random(),Math.random());}function f0_8_2_4(){return Math.max(Math.random(),Math.random());}function f0_8_2_5(){return isNaN(undefined);}function f0_8_2_6(){return Math.random();}function f0_8_2_7(){return isNaN(undefined);}function f0_8_2_8(){return Math.random();}function f0_8_2_9(){return isNaN(undefined);}function f0_8_2_10(){return isNaN(undefined);}function f0_8_2_11(){return isNaN(undefined);}function f0_8_2(){f0_8_2_0();f0_8_2_1();f0_8_2_2();f0_8_2_3();f0_8_2_4();f0_8_2_5();f0_8_2_6();f0_8_2_7();f0_8_2_8();f0_8_2_9();f0_8_2_10();f0_8_2_11();}function f0_8_3_0(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_8_3_1(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_8_3_2(){return isNaN(undefined);}function f0_8_3_3(){return isNaN(undefined);}function f0_8_3_4(){return Math.max(Math.random(),Math.random());}function f0_8_3_5(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_8_3_6(){return Math.random();}function f0_8_3_7(){return isNaN(undefined);}function f0_8_3_8(){return Math.random();}function f0_8_3_9(){return Math.random();}function f0_8_3_10(){return isNaN(undefined);}function f0_8_3_11(){return Math.random();}function f0_8_3(){f0_8_3_0();f0_8_3_1();f0_8_3_2();f0_8_3_3();f0_8_3_4();f0_8_3_5();f0_8_3_6();f0_8_3_7();f0_8_3_8();f0_8_3_9();f0_8_3_10();f0_8_3_11();}function f0_8_4_0(){return Math.max(Math.random(),Math.random());}function f0_8_4_1(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_8_4_2(){return Math.max(Math.random(),Math.random());}function f0_8_4_3(){return Math.max(Math.random(),Math.random());}function f0_8_4_4(){return Math.random();}function f0_8_4_5(){return Math.max(Math.random(),Math.random());}function f0_8_4_6(){return isNaN(undefined);}function f0_8_4_7(){return Math.random();}function f0_8_4_8(){return Math.max(Math.random(),Math.random());}function f0_8_4_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_8_4_10(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_8_4_11(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_8_4(){f0_8_4_0();f0_8_4_1();f0_8_4_2();f0_8_4_3();f0_8_4_4();f0_8_4_5();f0_8_4_6();f0_8_4_7();f0_8_4_8();f0_8_4_9();f0_8_4_10();f0_8_4_11();}function f0_8_5_0(){return isNaN(undefined);}function f0_8_5_1(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_8_5_2(){return isNaN(undefined);}function f0_8_5_3(){return isNaN(undefined);}function f0_8_5_4(){return Math.random();}function f0_8_5_5(){return Math.max(Math.random(),Math.random());}function f0_8_5_6(){return Math.max(Math.random(),Math.random());}function f0_8_5_7(){return Math.random();}function f0_8_5_8(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_8_5_9(){return Math.random();}function f0_8_5_10(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_8_5_11(){return Math.max(Math.random(),Math.random());}function f0_8_5(){f0_8_5_0();f0_8_5_1();f0_8_5_2();f0_8_5_3();f0_8_5_4();f0_8_5_5();f0_8_5_6();f0_8_5_7();f0_8_5_8();f0_8_5_9();f0_8_5_10();f0_8_5_11();}function f0_8_6_0(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_8_6_1(){return Math.random();}function f0_8_6_2(){return isNaN(undefined);}function f0_8_6_3(){return Math.max(Math.random(),Math.random());}function f0_8_6_4(){return Math.random();}function f0_8_6_5(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_8_6_6(){return Math.random();}function f0_8_6_7(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_8_6_8(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_8_6_9(){return Math.random();}function f0_8_6_10(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_8_6_11(){return isNaN(undefined);}function f0_8_6(){f0_8_6_0();f0_8_6_1();f0_8_6_2();f0_8_6_3();f0_8_6_4();f0_8_6_5();f0_8_6_6();f0_8_6_7();f0_8_6_8();f0_8_6_9();f0_8_6_10();f0_8_6_11();}function f0_8_7_0(){return Math.max(Math.random(),Math.random());}function f0_8_7_1(){return Math.max(Math.random(),Math.random());}function f0_8_7_2(){return Math.random();}function f0_8_7_3(){return isNaN(undefined);}function f0_8_7_4(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_8_7_5(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_8_7_6(){return Math.max(Math.random(),Math.random());}function f0_8_7_7(){return Math.max(Math.random(),Math.random());}function f0_8_7_8(){return isNaN(undefined);}function f0_8_7_9(){return isNaN(undefined);}function f0_8_7_10(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_8_7_11(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_8_7(){f0_8_7_0();f0_8_7_1();f0_8_7_2();f0_8_7_3();f0_8_7_4();f0_8_7_5();f0_8_7_6();f0_8_7_7();f0_8_7_8();f0_8_7_9();f0_8_7_10();f0_8_7_11();}function f0_8_8_0(){return isNaN(undefined);}function f0_8_8_1(){return Math.max(Math.random(),Math.random());}function f0_8_8_2(){return isNaN(undefined);}function f0_8_8_3(){return Math.max(Math.random(),Math.random());}function f0_8_8_4(){return Math.random();}function f0_8_8_5(){return isNaN(undefined);}function f0_8_8_6(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_8_8_7(){return Math.max(Math.random(),Math.random());}function f0_8_8_8(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_8_8_9(){return Math.random();}function f0_8_8_10(){return Math.random();}function f0_8_8_11(){return Math.max(Math.random(),Math.random());}function f0_8_8(){f0_8_8_0();f0_8_8_1();f0_8_8_2();f0_8_8_3();f0_8_8_4();f0_8_8_5();f0_8_8_6();f0_8_8_7();f0_8_8_8();f0_8_8_9();f0_8_8_10();f0_8_8_11();}function f0_8_9_0(){return Math.max(Math.random(),Math.random());}function f0_8_9_1(){return isNaN(undefined);}function f0_8_9_2(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_8_9_3(){return isNaN(undefined);}function f0_8_9_4(){return isNaN(undefined);}function f0_8_9_5(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_8_9_6(){return Math.random();}function f0_8_9_7(){return isNaN(undefined);}function f0_8_9_8(){return isNaN(undefined);}function f0_8_9_9(){return isNaN(undefined);}function f0_8_9_10(){return isNaN(undefined);}function f0_8_9_11(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_8_9(){f0_8_9_0();f0_8_9_1();f0_8_9_2();f0_8_9_3();f0_8_9_4();f0_8_9_5();f0_8_9_6();f0_8_9_7();f0_8_9_8();f0_8_9_9();f0_8_9_10();f0_8_9_11();}function f0_8_10_0(){return Math.max(Math.random(),Math.random());}function f0_8_10_1(){return isNaN(undefined);}function f0_8_10_2(){return isNaN(undefined);}function f0_8_10_3(){return Math.random();}function f0_8_10_4(){return isNaN(undefined);}function f0_8_10_5(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_8_10_6(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_8_10_7(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_8_10_8(){return Math.max(Math.random(),Math.random());}function f0_8_10_9(){return Math.random();}function f0_8_10_10(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_8_10_11(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_8_10(){f0_8_10_0();f0_8_10_1();f0_8_10_2();f0_8_10_3();f0_8_10_4();f0_8_10_5();f0_8_10_6();f0_8_10_7();f0_8_10_8();f0_8_10_9();f0_8_10_10();f0_8_10_11();}function f0_8_11_0(){return isNaN(undefined);}function f0_8_11_1(){return Math.max(Math.random(),Math.random());}function f0_8_11_2(){return Math.max(Math.random(),Math.random());}function f0_8_11_3(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_8_11_4(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_8_11_5(){return isNaN(undefined);}function f0_8_11_6(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_8_11_7(){return Math.random();}function f0_8_11_8(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_8_11_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_8_11_10(){return Math.random();}function f0_8_11_11(){return isNaN(undefined);}function f0_8_11(){f0_8_11_0();f0_8_11_1();f0_8_11_2();f0_8_11_3();f0_8_11_4();f0_8_11_5();f0_8_11_6();f0_8_11_7();f0_8_11_8();f0_8_11_9();f0_8_11_10();f0_8_11_11();}function f0_8(){f0_8_0();f0_8_1();f0_8_2();f0_8_3();f0_8_4();f0_8_5();f0_8_6();f0_8_7();f0_8_8();f0_8_9();f0_8_10();f0_8_11();}function f0_9_0_0(){return Math.random();}function f0_9_0_1(){return Math.max(Math.random(),Math.random());}function f0_9_0_2(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_9_0_3(){return Math.max(Math.random(),Math.random());}function f0_9_0_4(){return Math.random();}function f0_9_0_5(){return Math.random();}function f0_9_0_6(){return isNaN(undefined);}function f0_9_0_7(){return Math.random();}function f0_9_0_8(){return Math.max(Math.random(),Math.random());}function f0_9_0_9(){return isNaN(undefined);}function f0_9_0_10(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_9_0_11(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_9_0(){f0_9_0_0();f0_9_0_1();f0_9_0_2();f0_9_0_3();f0_9_0_4();f0_9_0_5();f0_9_0_6();f0_9_0_7();f0_9_0_8();f0_9_0_9();f0_9_0_10();f0_9_0_11();}function f0_9_1_0(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_9_1_1(){return isNaN(undefined);}function f0_9_1_2(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_9_1_3(){return isNaN(undefined);}function f0_9_1_4(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_9_1_5(){return Math.max(Math.random(),Math.random());}function f0_9_1_6(){return Math.random();}function f0_9_1_7(){return Math.max(Math.random(),Math.random());}function f0_9_1_8(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_9_1_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_9_1_10(){return Math.max(Math.random(),Math.random());}function f0_9_1_11(){return isNaN(undefined);}function f0_9_1(){f0_9_1_0();f0_9_1_1();f0_9_1_2();f0_9_1_3();f0_9_1_4();f0_9_1_5();f0_9_1_6();f0_9_1_7();f0_9_1_8();f0_9_1_9();f0_9_1_10();f0_9_1_11();}function f0_9_2_0(){return isNaN(undefined);}function f0_9_2_1(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_9_2_2(){return Math.max(Math.random(),Math.random());}function f0_9_2_3(){return Math.random();}function f0_9_2_4(){return isNaN(undefined);}function f0_9_2_5(){return Math.max(Math.random(),Math.random());}function f0_9_2_6(){return isNaN(undefined);}function f0_9_2_7(){return Math.random();}function f0_9_2_8(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_9_2_9(){return isNaN(undefined);}function f0_9_2_10(){return Math.max(Math.random(),Math.random());}function f0_9_2_11(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_9_2(){f0_9_2_0();f0_9_2_1();f0_9_2_2();f0_9_2_3();f0_9_2_4();f0_9_2_5();f0_9_2_6();f0_9_2_7();f0_9_2_8();f0_9_2_9();f0_9_2_10();f0_9_2_11();}function f0_9_3_0(){return Math.random();}function f0_9_3_1(){return isNaN(undefined);}function f0_9_3_2(){return Math.random();}function f0_9_3_3(){return Math.max(Math.random(),Math.random());}function f0_9_3_4(){return Math.random();}function f0_9_3_5(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_9_3_6(){return Math.random();}function f0_9_3_7(){return Math.max(Math.random(),Math.random());}function f0_9_3_8(){return Math.random();}function f0_9_3_9(){return Math.max(Math.random(),Math.random());}function f0_9_3_10(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_9_3_11(){return Math.max(Math.random(),Math.random());}function f0_9_3(){f0_9_3_0();f0_9_3_1();f0_9_3_2();f0_9_3_3();f0_9_3_4();f0_9_3_5();f0_9_3_6();f0_9_3_7();f0_9_3_8();f0_9_3_9();f0_9_3_10();f0_9_3_11();}function f0_9_4_0(){return Math.max(Math.random(),Math.random());}function f0_9_4_1(){return Math.random();}function f0_9_4_2(){return Math.random();}function f0_9_4_3(){return Math.random();}function f0_9_4_4(){return Math.max(Math.random(),Math.random());}function f0_9_4_5(){return isNaN(undefined);}function f0_9_4_6(){return isNaN(undefined);}function f0_9_4_7(){return Math.max(Math.random(),Math.random());}function f0_9_4_8(){return Math.max(Math.random(),Math.random());}function f0_9_4_9(){return Math.random();}function f0_9_4_10(){return Math.random();}function f0_9_4_11(){return isNaN(undefined);}function f0_9_4(){f0_9_4_0();f0_9_4_1();f0_9_4_2();f0_9_4_3();f0_9_4_4();f0_9_4_5();f0_9_4_6();f0_9_4_7();f0_9_4_8();f0_9_4_9();f0_9_4_10();f0_9_4_11();}function f0_9_5_0(){return Math.max(Math.random(),Math.random());}function f0_9_5_1(){return Math.max(Math.random(),Math.random());}function f0_9_5_2(){return isNaN(undefined);}function f0_9_5_3(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_9_5_4(){return Math.random();}function f0_9_5_5(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_9_5_6(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_9_5_7(){return isNaN(undefined);}function f0_9_5_8(){return isNaN(undefined);}function f0_9_5_9(){return Math.random();}function f0_9_5_10(){return isNaN(undefined);}function f0_9_5_11(){return Math.max(Math.random(),Math.random());}function f0_9_5(){f0_9_5_0();f0_9_5_1();f0_9_5_2();f0_9_5_3();f0_9_5_4();f0_9_5_5();f0_9_5_6();f0_9_5_7();f0_9_5_8();f0_9_5_9();f0_9_5_10();f0_9_5_11();}function f0_9_6_0(){return Math.random();}function f0_9_6_1(){return isNaN(undefined);}function f0_9_6_2(){return isNaN(undefined);}function f0_9_6_3(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_9_6_4(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_9_6_5(){return Math.random();}function f0_9_6_6(){return Math.random();}function f0_9_6_7(){return Math.max(Math.random(),Math.random());}function f0_9_6_8(){return isNaN(undefined);}function f0_9_6_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_9_6_10(){return Math.random();}function f0_9_6_11(){return Math.max(Math.random(),Math.random());}function f0_9_6(){f0_9_6_0();f0_9_6_1();f0_9_6_2();f0_9_6_3();f0_9_6_4();f0_9_6_5();f0_9_6_6();f0_9_6_7();f0_9_6_8();f0_9_6_9();f0_9_6_10();f0_9_6_11();}function f0_9_7_0(){return Math.random();}function f0_9_7_1(){return Math.random();}function f0_9_7_2(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_9_7_3(){return isNaN(undefined);}function f0_9_7_4(){return Math.max(Math.random(),Math.random());}function f0_9_7_5(){return isNaN(undefined);}function f0_9_7_6(){return Math.random();}function f0_9_7_7(){return isNaN(undefined);}function f0_9_7_8(){return Math.max(Math.random(),Math.random());}function f0_9_7_9(){return Math.max(Math.random(),Math.random());}function f0_9_7_10(){return Math.random();}function f0_9_7_11(){return isNaN(undefined);}function f0_9_7(){f0_9_7_0();f0_9_7_1();f0_9_7_2();f0_9_7_3();f0_9_7_4();f0_9_7_5();f0_9_7_6();f0_9_7_7();f0_9_7_8();f0_9_7_9();f0_9_7_10();f0_9_7_11();}function f0_9_8_0(){return isNaN(undefined);}function f0_9_8_1(){return Math.max(Math.random(),Math.random());}function f0_9_8_2(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_9_8_3(){return isNaN(undefined);}function f0_9_8_4(){return isNaN(undefined);}function f0_9_8_5(){return Math.random();}function f0_9_8_6(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_9_8_7(){return Math.max(Math.random(),Math.random());}function f0_9_8_8(){return Math.random();}function f0_9_8_9(){return Math.max(Math.random(),Math.random());}function f0_9_8_10(){return Math.max(Math.random(),Math.random());}function f0_9_8_11(){return Math.max(Math.random(),Math.random());}function f0_9_8(){f0_9_8_0();f0_9_8_1();f0_9_8_2();f0_9_8_3();f0_9_8_4();f0_9_8_5();f0_9_8_6();f0_9_8_7();f0_9_8_8();f0_9_8_9();f0_9_8_10();f0_9_8_11();}function f0_9_9_0(){return Math.max(Math.random(),Math.random());}function f0_9_9_1(){return isNaN(undefined);}function f0_9_9_2(){return Math.random();}function f0_9_9_3(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_9_9_4(){return Math.random();}function f0_9_9_5(){return isNaN(undefined);}function f0_9_9_6(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_9_9_7(){return isNaN(undefined);}function f0_9_9_8(){return Math.max(Math.random(),Math.random());}function f0_9_9_9(){return isNaN(undefined);}function f0_9_9_10(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_9_9_11(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_9_9(){f0_9_9_0();f0_9_9_1();f0_9_9_2();f0_9_9_3();f0_9_9_4();f0_9_9_5();f0_9_9_6();f0_9_9_7();f0_9_9_8();f0_9_9_9();f0_9_9_10();f0_9_9_11();}function f0_9_10_0(){return Math.max(Math.random(),Math.random());}function f0_9_10_1(){return isNaN(undefined);}function f0_9_10_2(){return Math.max(Math.random(),Math.random());}function f0_9_10_3(){return Math.max(Math.random(),Math.random());}function f0_9_10_4(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_9_10_5(){return isNaN(undefined);}function f0_9_10_6(){return Math.max(Math.random(),Math.random());}function f0_9_10_7(){return isNaN(undefined);}function f0_9_10_8(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_9_10_9(){return isNaN(undefined);}function f0_9_10_10(){return isNaN(undefined);}function f0_9_10_11(){return isNaN(undefined);}function f0_9_10(){f0_9_10_0();f0_9_10_1();f0_9_10_2();f0_9_10_3();f0_9_10_4();f0_9_10_5();f0_9_10_6();f0_9_10_7();f0_9_10_8();f0_9_10_9();f0_9_10_10();f0_9_10_11();}function f0_9_11_0(){return Math.random();}function f0_9_11_1(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_9_11_2(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_9_11_3(){return isNaN(undefined);}function f0_9_11_4(){return Math.max(Math.random(),Math.random());}function f0_9_11_5(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_9_11_6(){return isNaN(undefined);}function f0_9_11_7(){return Math.max(Math.random(),Math.random());}function f0_9_11_8(){return Math.random();}function f0_9_11_9(){return Math.random();}function f0_9_11_10(){return isNaN(undefined);}function f0_9_11_11(){return Math.max(Math.random(),Math.random());}function f0_9_11(){f0_9_11_0();f0_9_11_1();f0_9_11_2();f0_9_11_3();f0_9_11_4();f0_9_11_5();f0_9_11_6();f0_9_11_7();f0_9_11_8();f0_9_11_9();f0_9_11_10();f0_9_11_11();}function f0_9(){f0_9_0();f0_9_1();f0_9_2();f0_9_3();f0_9_4();f0_9_5();f0_9_6();f0_9_7();f0_9_8();f0_9_9();f0_9_10();f0_9_11();}function f0_10_0_0(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_10_0_1(){return isNaN(undefined);}function f0_10_0_2(){return Math.max(Math.random(),Math.random());}function f0_10_0_3(){return Math.max(Math.random(),Math.random());}function f0_10_0_4(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_10_0_5(){return Math.max(Math.random(),Math.random());}function f0_10_0_6(){return isNaN(undefined);}function f0_10_0_7(){return Math.max(Math.random(),Math.random());}function f0_10_0_8(){return Math.random();}function f0_10_0_9(){return isNaN(undefined);}function f0_10_0_10(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_10_0_11(){return Math.max(Math.random(),Math.random());}function f0_10_0(){f0_10_0_0();f0_10_0_1();f0_10_0_2();f0_10_0_3();f0_10_0_4();f0_10_0_5();f0_10_0_6();f0_10_0_7();f0_10_0_8();f0_10_0_9();f0_10_0_10();f0_10_0_11();}function f0_10_1_0(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_10_1_1(){return Math.max(Math.random(),Math.random());}function f0_10_1_2(){return Math.max(Math.random(),Math.random());}function f0_10_1_3(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_10_1_4(){return Math.max(Math.random(),Math.random());}function f0_10_1_5(){return Math.random();}function f0_10_1_6(){return Math.max(Math.random(),Math.random());}function f0_10_1_7(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_10_1_8(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_10_1_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_10_1_10(){return Math.random();}function f0_10_1_11(){return isNaN(undefined);}function f0_10_1(){f0_10_1_0();f0_10_1_1();f0_10_1_2();f0_10_1_3();f0_10_1_4();f0_10_1_5();f0_10_1_6();f0_10_1_7();f0_10_1_8();f0_10_1_9();f0_10_1_10();f0_10_1_11();}function f0_10_2_0(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_10_2_1(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_10_2_2(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_10_2_3(){return Math.max(Math.random(),Math.random());}function f0_10_2_4(){return Math.random();}function f0_10_2_5(){return Math.random();}function f0_10_2_6(){return Math.random();}function f0_10_2_7(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_10_2_8(){return Math.max(Math.random(),Math.random());}function f0_10_2_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_10_2_10(){return Math.random();}function f0_10_2_11(){return isNaN(undefined);}function f0_10_2(){f0_10_2_0();f0_10_2_1();f0_10_2_2();f0_10_2_3();f0_10_2_4();f0_10_2_5();f0_10_2_6();f0_10_2_7();f0_10_2_8();f0_10_2_9();f0_10_2_10();f0_10_2_11();}function f0_10_3_0(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_10_3_1(){return Math.max(Math.random(),Math.random());}function f0_10_3_2(){return isNaN(undefined);}function f0_10_3_3(){return isNaN(undefined);}function f0_10_3_4(){return isNaN(undefined);}function f0_10_3_5(){return Math.max(Math.random(),Math.random());}function f0_10_3_6(){return Math.max(Math.random(),Math.random());}function f0_10_3_7(){return Math.random();}function f0_10_3_8(){return isNaN(undefined);}function f0_10_3_9(){return isNaN(undefined);}function f0_10_3_10(){return Math.random();}function f0_10_3_11(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_10_3(){f0_10_3_0();f0_10_3_1();f0_10_3_2();f0_10_3_3();f0_10_3_4();f0_10_3_5();f0_10_3_6();f0_10_3_7();f0_10_3_8();f0_10_3_9();f0_10_3_10();f0_10_3_11();}function f0_10_4_0(){return Math.random();}function f0_10_4_1(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_10_4_2(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_10_4_3(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_10_4_4(){return isNaN(undefined);}function f0_10_4_5(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_10_4_6(){return Math.max(Math.random(),Math.random());}function f0_10_4_7(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_10_4_8(){return isNaN(undefined);}function f0_10_4_9(){return Math.max(Math.random(),Math.random());}function f0_10_4_10(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_10_4_11(){return Math.random();}function f0_10_4(){f0_10_4_0();f0_10_4_1();f0_10_4_2();f0_10_4_3();f0_10_4_4();f0_10_4_5();f0_10_4_6();f0_10_4_7();f0_10_4_8();f0_10_4_9();f0_10_4_10();f0_10_4_11();}function f0_10_5_0(){return Math.random();}function f0_10_5_1(){return Math.random();}function f0_10_5_2(){return isNaN(undefined);}function f0_10_5_3(){return Math.max(Math.random(),Math.random());}function f0_10_5_4(){return isNaN(undefined);}function f0_10_5_5(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_10_5_6(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_10_5_7(){return isNaN(undefined);}function f0_10_5_8(){return isNaN(undefined);}function f0_10_5_9(){return Math.random();}function f0_10_5_10(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_10_5_11(){return Math.random();}function f0_10_5(){f0_10_5_0();f0_10_5_1();f0_10_5_2();f0_10_5_3();f0_10_5_4();f0_10_5_5();f0_10_5_6();f0_10_5_7();f0_10_5_8();f0_10_5_9();f0_10_5_10();f0_10_5_11();}function f0_10_6_0(){return Math.random();}function f0_10_6_1(){return Math.random();}function f0_10_6_2(){return Math.random();}function f0_10_6_3(){return isNaN(undefined);}function f0_10_6_4(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_10_6_5(){return isNaN(undefined);}function f0_10_6_6(){return isNaN(undefined);}function f0_10_6_7(){return Math.max(Math.random(),Math.random());}function f0_10_6_8(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_10_6_9(){return isNaN(undefined);}function f0_10_6_10(){return Math.max(Math.random(),Math.random());}function f0_10_6_11(){return Math.random();}function f0_10_6(){f0_10_6_0();f0_10_6_1();f0_10_6_2();f0_10_6_3();f0_10_6_4();f0_10_6_5();f0_10_6_6();f0_10_6_7();f0_10_6_8();f0_10_6_9();f0_10_6_10();f0_10_6_11();}function f0_10_7_0(){return Math.random();}function f0_10_7_1(){return Math.random();}function f0_10_7_2(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_10_7_3(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_10_7_4(){return isNaN(undefined);}function f0_10_7_5(){return Math.max(Math.random(),Math.random());}function f0_10_7_6(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_10_7_7(){return Math.max(Math.random(),Math.random());}function f0_10_7_8(){return Math.max(Math.random(),Math.random());}function f0_10_7_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_10_7_10(){return isNaN(undefined);}function f0_10_7_11(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_10_7(){f0_10_7_0();f0_10_7_1();f0_10_7_2();f0_10_7_3();f0_10_7_4();f0_10_7_5();f0_10_7_6();f0_10_7_7();f0_10_7_8();f0_10_7_9();f0_10_7_10();f0_10_7_11();}function f0_10_8_0(){return Math.max(Math.random(),Math.random());}function f0_10_8_1(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_10_8_2(){return Math.max(Math.random(),Math.random());}function f0_10_8_3(){return isNaN(undefined);}function f0_10_8_4(){return isNaN(undefined);}function f0_10_8_5(){return Math.random();}function f0_10_8_6(){return isNaN(undefined);}function f0_10_8_7(){return isNaN(undefined);}function f0_10_8_8(){return Math.max(Math.random(),Math.random());}function f0_10_8_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_10_8_10(){return isNaN(undefined);}function f0_10_8_11(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_10_8(){f0_10_8_0();f0_10_8_1();f0_10_8_2();f0_10_8_3();f0_10_8_4();f0_10_8_5();f0_10_8_6();f0_10_8_7();f0_10_8_8();f0_10_8_9();f0_10_8_10();f0_10_8_11();}function f0_10_9_0(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_10_9_1(){return Math.max(Math.random(),Math.random());}function f0_10_9_2(){return Math.max(Math.random(),Math.random());}function f0_10_9_3(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_10_9_4(){return Math.max(Math.random(),Math.random());}function f0_10_9_5(){return Math.random();}function f0_10_9_6(){return Math.max(Math.random(),Math.random());}function f0_10_9_7(){return isNaN(undefined);}function f0_10_9_8(){return Math.random();}function f0_10_9_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_10_9_10(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_10_9_11(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_10_9(){f0_10_9_0();f0_10_9_1();f0_10_9_2();f0_10_9_3();f0_10_9_4();f0_10_9_5();f0_10_9_6();f0_10_9_7();f0_10_9_8();f0_10_9_9();f0_10_9_10();f0_10_9_11();}function f0_10_10_0(){return Math.max(Math.random(),Math.random());}function f0_10_10_1(){return Math.random();}function f0_10_10_2(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_10_10_3(){return Math.max(Math.random(),Math.random());}function f0_10_10_4(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_10_10_5(){return isNaN(undefined);}function f0_10_10_6(){return Math.random();}function f0_10_10_7(){return Math.random();}function f0_10_10_8(){return Math.random();}function f0_10_10_9(){return isNaN(undefined);}function f0_10_10_10(){return Math.random();}function f0_10_10_11(){return isNaN(undefined);}function f0_10_10(){f0_10_10_0();f0_10_10_1();f0_10_10_2();f0_10_10_3();f0_10_10_4();f0_10_10_5();f0_10_10_6();f0_10_10_7();f0_10_10_8();f0_10_10_9();f0_10_10_10();f0_10_10_11();}function f0_10_11_0(){return isNaN(undefined);}function f0_10_11_1(){return Math.max(Math.random(),Math.random());}function f0_10_11_2(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_10_11_3(){return isNaN(undefined);}function f0_10_11_4(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_10_11_5(){return Math.random();}function f0_10_11_6(){return isNaN(undefined);}function f0_10_11_7(){return Math.max(Math.random(),Math.random());}function f0_10_11_8(){return Math.max(Math.random(),Math.random());}function f0_10_11_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_10_11_10(){return isNaN(undefined);}function f0_10_11_11(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_10_11(){f0_10_11_0();f0_10_11_1();f0_10_11_2();f0_10_11_3();f0_10_11_4();f0_10_11_5();f0_10_11_6();f0_10_11_7();f0_10_11_8();f0_10_11_9();f0_10_11_10();f0_10_11_11();}function f0_10(){f0_10_0();f0_10_1();f0_10_2();f0_10_3();f0_10_4();f0_10_5();f0_10_6();f0_10_7();f0_10_8();f0_10_9();f0_10_10();f0_10_11();}function f0_11_0_0(){return Math.random();}function f0_11_0_1(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_11_0_2(){return isNaN(undefined);}function f0_11_0_3(){return Math.random();}function f0_11_0_4(){return Math.max(Math.random(),Math.random());}function f0_11_0_5(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_11_0_6(){return isNaN(undefined);}function f0_11_0_7(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_11_0_8(){return Math.random();}function f0_11_0_9(){return Math.random();}function f0_11_0_10(){return Math.max(Math.random(),Math.random());}function f0_11_0_11(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_11_0(){f0_11_0_0();f0_11_0_1();f0_11_0_2();f0_11_0_3();f0_11_0_4();f0_11_0_5();f0_11_0_6();f0_11_0_7();f0_11_0_8();f0_11_0_9();f0_11_0_10();f0_11_0_11();}function f0_11_1_0(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_11_1_1(){return Math.random();}function f0_11_1_2(){return Math.max(Math.random(),Math.random());}function f0_11_1_3(){return Math.random();}function f0_11_1_4(){return isNaN(undefined);}function f0_11_1_5(){return Math.random();}function f0_11_1_6(){return isNaN(undefined);}function f0_11_1_7(){return Math.max(Math.random(),Math.random());}function f0_11_1_8(){return Math.random();}function f0_11_1_9(){return isNaN(undefined);}function f0_11_1_10(){return isNaN(undefined);}function f0_11_1_11(){return Math.max(Math.random(),Math.random());}function f0_11_1(){f0_11_1_0();f0_11_1_1();f0_11_1_2();f0_11_1_3();f0_11_1_4();f0_11_1_5();f0_11_1_6();f0_11_1_7();f0_11_1_8();f0_11_1_9();f0_11_1_10();f0_11_1_11();}function f0_11_2_0(){return Math.random();}function f0_11_2_1(){return isNaN(undefined);}function f0_11_2_2(){return isNaN(undefined);}function f0_11_2_3(){return Math.max(Math.random(),Math.random());}function f0_11_2_4(){return Math.max(Math.random(),Math.random());}function f0_11_2_5(){return isNaN(undefined);}function f0_11_2_6(){return Math.random();}function f0_11_2_7(){return Math.random();}function f0_11_2_8(){return Math.random();}function f0_11_2_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_11_2_10(){return isNaN(undefined);}function f0_11_2_11(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_11_2(){f0_11_2_0();f0_11_2_1();f0_11_2_2();f0_11_2_3();f0_11_2_4();f0_11_2_5();f0_11_2_6();f0_11_2_7();f0_11_2_8();f0_11_2_9();f0_11_2_10();f0_11_2_11();}function f0_11_3_0(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_11_3_1(){return Math.random();}function f0_11_3_2(){return isNaN(undefined);}function f0_11_3_3(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_11_3_4(){return Math.random();}function f0_11_3_5(){return Math.random();}function f0_11_3_6(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_11_3_7(){return Math.max(Math.random(),Math.random());}function f0_11_3_8(){return Math.max(Math.random(),Math.random());}function f0_11_3_9(){return Math.random();}function f0_11_3_10(){return Math.max(Math.random(),Math.random());}function f0_11_3_11(){return Math.max(Math.random(),Math.random());}function f0_11_3(){f0_11_3_0();f0_11_3_1();f0_11_3_2();f0_11_3_3();f0_11_3_4();f0_11_3_5();f0_11_3_6();f0_11_3_7();f0_11_3_8();f0_11_3_9();f0_11_3_10();f0_11_3_11();}function f0_11_4_0(){return isNaN(undefined);}function f0_11_4_1(){return Math.random();}function f0_11_4_2(){return Math.random();}function f0_11_4_3(){return Math.random();}function f0_11_4_4(){return Math.random();}function f0_11_4_5(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_11_4_6(){return Math.max(Math.random(),Math.random());}function f0_11_4_7(){return Math.random();}function f0_11_4_8(){return Math.random();}function f0_11_4_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_11_4_10(){return Math.random();}function f0_11_4_11(){return isNaN(undefined);}function f0_11_4(){f0_11_4_0();f0_11_4_1();f0_11_4_2();f0_11_4_3();f0_11_4_4();f0_11_4_5();f0_11_4_6();f0_11_4_7();f0_11_4_8();f0_11_4_9();f0_11_4_10();f0_11_4_11();}function f0_11_5_0(){return Math.max(Math.random(),Math.random());}function f0_11_5_1(){return Math.random();}function f0_11_5_2(){return isNaN(undefined);}function f0_11_5_3(){return isNaN(undefined);}function f0_11_5_4(){return Math.random();}function f0_11_5_5(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_11_5_6(){return Math.random();}function f0_11_5_7(){return Math.max(Math.random(),Math.random());}function f0_11_5_8(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_11_5_9(){return Math.random();}function f0_11_5_10(){return Math.max(Math.random(),Math.random());}function f0_11_5_11(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_11_5(){f0_11_5_0();f0_11_5_1();f0_11_5_2();f0_11_5_3();f0_11_5_4();f0_11_5_5();f0_11_5_6();f0_11_5_7();f0_11_5_8();f0_11_5_9();f0_11_5_10();f0_11_5_11();}function f0_11_6_0(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_11_6_1(){return Math.max(Math.random(),Math.random());}function f0_11_6_2(){return isNaN(undefined);}function f0_11_6_3(){return isNaN(undefined);}function f0_11_6_4(){return isNaN(undefined);}function f0_11_6_5(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_11_6_6(){return Math.random();}function f0_11_6_7(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_11_6_8(){return Math.random();}function f0_11_6_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_11_6_10(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_11_6_11(){return Math.max(Math.random(),Math.random());}function f0_11_6(){f0_11_6_0();f0_11_6_1();f0_11_6_2();f0_11_6_3();f0_11_6_4();f0_11_6_5();f0_11_6_6();f0_11_6_7();f0_11_6_8();f0_11_6_9();f0_11_6_10();f0_11_6_11();}function f0_11_7_0(){return isNaN(undefined);}function f0_11_7_1(){return Math.random();}function f0_11_7_2(){return Math.random();}function f0_11_7_3(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_11_7_4(){return Math.max(Math.random(),Math.random());}function f0_11_7_5(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_11_7_6(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_11_7_7(){return Math.random();}function f0_11_7_8(){return Math.max(Math.random(),Math.random());}function f0_11_7_9(){return Math.max(Math.random(),Math.random());}function f0_11_7_10(){return Math.max(Math.random(),Math.random());}function f0_11_7_11(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_11_7(){f0_11_7_0();f0_11_7_1();f0_11_7_2();f0_11_7_3();f0_11_7_4();f0_11_7_5();f0_11_7_6();f0_11_7_7();f0_11_7_8();f0_11_7_9();f0_11_7_10();f0_11_7_11();}function f0_11_8_0(){return Math.max(Math.random(),Math.random());}function f0_11_8_1(){return isNaN(undefined);}function f0_11_8_2(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_11_8_3(){return Math.max(Math.random(),Math.random());}function f0_11_8_4(){return Math.max(Math.random(),Math.random());}function f0_11_8_5(){return Math.random();}function f0_11_8_6(){return Math.random();}function f0_11_8_7(){return Math.max(Math.random(),Math.random());}function f0_11_8_8(){return isNaN(undefined);}function f0_11_8_9(){return isNaN(undefined);}function f0_11_8_10(){return Math.max(Math.random(),Math.random());}function f0_11_8_11(){return Math.max(Math.random(),Math.random());}function f0_11_8(){f0_11_8_0();f0_11_8_1();f0_11_8_2();f0_11_8_3();f0_11_8_4();f0_11_8_5();f0_11_8_6();f0_11_8_7();f0_11_8_8();f0_11_8_9();f0_11_8_10();f0_11_8_11();}function f0_11_9_0(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_11_9_1(){return Math.random();}function f0_11_9_2(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_11_9_3(){return Math.random();}function f0_11_9_4(){return isNaN(undefined);}function f0_11_9_5(){return Math.random();}function f0_11_9_6(){return Math.max(Math.random(),Math.random());}function f0_11_9_7(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_11_9_8(){return Math.random();}function f0_11_9_9(){return isNaN(undefined);}function f0_11_9_10(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_11_9_11(){return Math.max(Math.random(),Math.random());}function f0_11_9(){f0_11_9_0();f0_11_9_1();f0_11_9_2();f0_11_9_3();f0_11_9_4();f0_11_9_5();f0_11_9_6();f0_11_9_7();f0_11_9_8();f0_11_9_9();f0_11_9_10();f0_11_9_11();}function f0_11_10_0(){return Math.max(Math.random(),Math.random());}function f0_11_10_1(){return Math.max(Math.random(),Math.random());}function f0_11_10_2(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_11_10_3(){return isNaN(undefined);}function f0_11_10_4(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_11_10_5(){return isNaN(undefined);}function f0_11_10_6(){return Math.max(Math.random(),Math.random());}function f0_11_10_7(){return isNaN(undefined);}function f0_11_10_8(){return Math.random();}function f0_11_10_9(){return Math.max(Math.random(),Math.random());}function f0_11_10_10(){return isNaN(undefined);}function f0_11_10_11(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_11_10(){f0_11_10_0();f0_11_10_1();f0_11_10_2();f0_11_10_3();f0_11_10_4();f0_11_10_5();f0_11_10_6();f0_11_10_7();f0_11_10_8();f0_11_10_9();f0_11_10_10();f0_11_10_11();}function f0_11_11_0(){return Math.random();}function f0_11_11_1(){return isNaN(undefined);}function f0_11_11_2(){return Math.max(Math.random(),Math.random());}function f0_11_11_3(){return isNaN(undefined);}function f0_11_11_4(){return Math.max(Math.random(),Math.random());}function f0_11_11_5(){return isNaN(undefined);}function f0_11_11_6(){return Math.max(Math.random(),Math.random());}function f0_11_11_7(){return isNaN(undefined);}function f0_11_11_8(){return Math.random();}function f0_11_11_9(){return Math.random();}function f0_11_11_10(){return Math.max(Math.random(),Math.random());}function f0_11_11_11(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f0_11_11(){f0_11_11_0();f0_11_11_1();f0_11_11_2();f0_11_11_3();f0_11_11_4();f0_11_11_5();f0_11_11_6();f0_11_11_7();f0_11_11_8();f0_11_11_9();f0_11_11_10();f0_11_11_11();}function f0_11(){f0_11_0();f0_11_1();f0_11_2();f0_11_3();f0_11_4();f0_11_5();f0_11_6();f0_11_7();f0_11_8();f0_11_9();f0_11_10();f0_11_11();}function f0(){f0_0();f0_1();f0_2();f0_3();f0_4();f0_5();f0_6();f0_7();f0_8();f0_9();f0_10();f0_11();}function f2_0(){return Math.random();}function f2_1(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f2_2(){return isNaN(undefined);}function f2_3(){return isNaN(undefined);}function f2_4(){return isNaN(undefined);}function f2_5(){return Math.max(Math.random(),Math.random());}function f2_6(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f2_7(){return Math.max(Math.random(),Math.random());}function f2_8(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f2_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f2_10(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f2_11(){return isNaN(undefined);}function f1(){f1_0();f1_1();f1_2();f1_3();f1_4();f1_5();f1_6();f1_7();f1_8();f1_9();f1_10();f1_11();}function f1_0_0(){return Math.max(Math.random(),Math.random());}function f1_0_1(){return Math.max(Math.random(),Math.random());}function f1_0_2(){return Math.random();}function f1_0_3(){return isNaN(undefined);}function f1_0_4(){return isNaN(undefined);}function f1_0_5(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_0_6(){return isNaN(undefined);}function f1_0_7(){return Math.max(Math.random(),Math.random());}function f1_0_8(){return isNaN(undefined);}function f1_0_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_0_10(){return Math.random();}function f1_0_11(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_0(){f1_0_0();f1_0_1();f1_0_2();f1_0_3();f1_0_4();f1_0_5();f1_0_6();f1_0_7();f1_0_8();f1_0_9();f1_0_10();f1_0_11();}function f1_1_0(){return Math.max(Math.random(),Math.random());}function f1_1_1(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_1_2(){return isNaN(undefined);}function f1_1_3(){return Math.max(Math.random(),Math.random());}function f1_1_4(){return Math.max(Math.random(),Math.random());}function f1_1_5(){return Math.random();}function f1_1_6(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_1_7(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_1_8(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_1_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_1_10(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_1_11(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_1(){f1_1_0();f1_1_1();f1_1_2();f1_1_3();f1_1_4();f1_1_5();f1_1_6();f1_1_7();f1_1_8();f1_1_9();f1_1_10();f1_1_11();}function f1_2_0(){return Math.random();}function f1_2_1(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_2_2(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_2_3(){return isNaN(undefined);}function f1_2_4(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_2_5(){return Math.random();}function f1_2_6(){return Math.max(Math.random(),Math.random());}function f1_2_7(){return isNaN(undefined);}function f1_2_8(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_2_9(){return Math.random();}function f1_2_10(){return Math.max(Math.random(),Math.random());}function f1_2_11(){return Math.random();}function f1_2(){f1_2_0();f1_2_1();f1_2_2();f1_2_3();f1_2_4();f1_2_5();f1_2_6();f1_2_7();f1_2_8();f1_2_9();f1_2_10();f1_2_11();}function f1_3_0(){return Math.random();}function f1_3_1(){return isNaN(undefined);}function f1_3_2(){return Math.max(Math.random(),Math.random());}function f1_3_3(){return isNaN(undefined);}function f1_3_4(){return Math.max(Math.random(),Math.random());}function f1_3_5(){return isNaN(undefined);}function f1_3_6(){return Math.random();}function f1_3_7(){return Math.random();}function f1_3_8(){return Math.max(Math.random(),Math.random());}function f1_3_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_3_10(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_3_11(){return Math.max(Math.random(),Math.random());}function f1_3(){f1_3_0();f1_3_1();f1_3_2();f1_3_3();f1_3_4();f1_3_5();f1_3_6();f1_3_7();f1_3_8();f1_3_9();f1_3_10();f1_3_11();}function f1_4_0(){return isNaN(undefined);}function f1_4_1(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_4_2(){return isNaN(undefined);}function f1_4_3(){return Math.max(Math.random(),Math.random());}function f1_4_4(){return Math.random();}function f1_4_5(){return Math.max(Math.random(),Math.random());}function f1_4_6(){return isNaN(undefined);}function f1_4_7(){return isNaN(undefined);}function f1_4_8(){return Math.random();}function f1_4_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_4_10(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_4_11(){return Math.max(Math.random(),Math.random());}function f1_4(){f1_4_0();f1_4_1();f1_4_2();f1_4_3();f1_4_4();f1_4_5();f1_4_6();f1_4_7();f1_4_8();f1_4_9();f1_4_10();f1_4_11();}function f1_5_0(){return isNaN(undefined);}function f1_5_1(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_5_2(){return Math.random();}function f1_5_3(){return isNaN(undefined);}function f1_5_4(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_5_5(){return isNaN(undefined);}function f1_5_6(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_5_7(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_5_8(){return Math.random();}function f1_5_9(){return Math.max(Math.random(),Math.random());}function f1_5_10(){return isNaN(undefined);}function f1_5_11(){return isNaN(undefined);}function f1_5(){f1_5_0();f1_5_1();f1_5_2();f1_5_3();f1_5_4();f1_5_5();f1_5_6();f1_5_7();f1_5_8();f1_5_9();f1_5_10();f1_5_11();}function f1_6_0(){return Math.random();}function f1_6_1(){return Math.max(Math.random(),Math.random());}function f1_6_2(){return Math.random();}function f1_6_3(){return Math.max(Math.random(),Math.random());}function f1_6_4(){return Math.random();}function f1_6_5(){return Math.random();}function f1_6_6(){return Math.random();}function f1_6_7(){return Math.random();}function f1_6_8(){return isNaN(undefined);}function f1_6_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_6_10(){return Math.random();}function f1_6_11(){return Math.max(Math.random(),Math.random());}function f1_6(){f1_6_0();f1_6_1();f1_6_2();f1_6_3();f1_6_4();f1_6_5();f1_6_6();f1_6_7();f1_6_8();f1_6_9();f1_6_10();f1_6_11();}function f1_7_0(){return Math.random();}function f1_7_1(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_7_2(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_7_3(){return Math.random();}function f1_7_4(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_7_5(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_7_6(){return Math.max(Math.random(),Math.random());}function f1_7_7(){return isNaN(undefined);}function f1_7_8(){return isNaN(undefined);}function f1_7_9(){return isNaN(undefined);}function f1_7_10(){return Math.max(Math.random(),Math.random());}function f1_7_11(){return Math.max(Math.random(),Math.random());}function f1_7(){f1_7_0();f1_7_1();f1_7_2();f1_7_3();f1_7_4();f1_7_5();f1_7_6();f1_7_7();f1_7_8();f1_7_9();f1_7_10();f1_7_11();}function f1_8_0(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_8_1(){return Math.max(Math.random(),Math.random());}function f1_8_2(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_8_3(){return isNaN(undefined);}function f1_8_4(){return isNaN(undefined);}function f1_8_5(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_8_6(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_8_7(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_8_8(){return Math.max(Math.random(),Math.random());}function f1_8_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_8_10(){return isNaN(undefined);}function f1_8_11(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_8(){f1_8_0();f1_8_1();f1_8_2();f1_8_3();f1_8_4();f1_8_5();f1_8_6();f1_8_7();f1_8_8();f1_8_9();f1_8_10();f1_8_11();}function f1_9_0(){return Math.random();}function f1_9_1(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_9_2(){return Math.max(Math.random(),Math.random());}function f1_9_3(){return Math.max(Math.random(),Math.random());}function f1_9_4(){return Math.random();}function f1_9_5(){return isNaN(undefined);}function f1_9_6(){return isNaN(undefined);}function f1_9_7(){return Math.random();}function f1_9_8(){return Math.random();}function f1_9_9(){return Math.random();}function f1_9_10(){return isNaN(undefined);}function f1_9_11(){return Math.max(Math.random(),Math.random());}function f1_9(){f1_9_0();f1_9_1();f1_9_2();f1_9_3();f1_9_4();f1_9_5();f1_9_6();f1_9_7();f1_9_8();f1_9_9();f1_9_10();f1_9_11();}function f1_10_0(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_10_1(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_10_2(){return Math.random();}function f1_10_3(){return Math.max(Math.random(),Math.random());}function f1_10_4(){return Math.max(Math.random(),Math.random());}function f1_10_5(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_10_6(){return Math.random();}function f1_10_7(){return Math.random();}function f1_10_8(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_10_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_10_10(){return Math.max(Math.random(),Math.random());}function f1_10_11(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_10(){f1_10_0();f1_10_1();f1_10_2();f1_10_3();f1_10_4();f1_10_5();f1_10_6();f1_10_7();f1_10_8();f1_10_9();f1_10_10();f1_10_11();}function f1_11_0(){return isNaN(undefined);}function f1_11_1(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_11_2(){return isNaN(undefined);}function f1_11_3(){return isNaN(undefined);}function f1_11_4(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_11_5(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_11_6(){return Math.random();}function f1_11_7(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_11_8(){return Math.random();}function f1_11_9(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_11_10(){return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\");}function f1_11_11(){return Math.random();}function f1_11(){f1_11_0();f1_11_1();f1_11_2();f1_11_3();f1_11_4();f1_11_5();f1_11_6();f1_11_7();f1_11_8();f1_11_9();f1_11_10();f1_11_11();}function f2(){f2_0();f2_1();f2_2();f2_3();f2_4();f2_5();f2_6();f2_7();f2_8();f2_9();f2_10();f2_11();}function f3(){return isNaN(undefined);}function f4(){return Math.max(Math.random(),Math.random());}function f5(){return Math.max(Math.random(),Math.random());}function f6(){return Math.max(Math.random(),Math.random());}function f7(){return isNaN(undefined);}function f8(){return Math.max(Math.random(),Math.random());}function f9(){return isNaN(undefined);}function f10(){return isNaN(undefined);}function f11(){return isNaN(undefined);}function stepInTest(){f0();f1();f2();f3();f4();f5();f6();f7();f8();f9();f10();f11();console.log('Done!');}function debugStatement(){debugger;f0();f1();f2();f3();f4();f5();f6();f7();f8();f9();f10();f11();console.log('Done!');}\n\n/***/ }),\n/* 26 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nfunction squareAndOne(arg){return arg*arg+1;}function squareUntil(arg,limit){if(arg*arg>=limit){return arg*arg;}else{return squareUntil(arg*arg,limit);}}function addUntil(arg1,arg2,limit){if(arg1+arg2>limit){return arg1+arg2;}else{return addUntil(arg1+arg2,arg2,limit);}}function testStart(aArg){var r=10;var a=squareAndOne(r);var b=squareUntil(r,99999999999);//recurses 3 times, returns on 4th call\nvar c=addUntil(r,5,1050);// recurses 208 times and returns on the 209th call\nreturn a+b+c;}/* harmony default export */ __webpack_exports__[\"a\"] = (testStart);\n\n/***/ }),\n/* 27 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nfunction f0(){f1();return Math.random();}function f1(){f2();return Math.random();}function f2(){f3();return Math.random();}function f3(){f4();return Math.random();}function f4(){f5();return Math.random();}function f5(){f6();return Math.random();}function f6(){f7();return Math.random();}function f7(){f8();return Math.random();}function f8(){f9();return Math.random();}function f9(){f10();return Math.random();}function f10(){f11();return Math.random();}function f11(){f12();return Math.random();}function f12(){f13();return Math.random();}function f13(){f14();return Math.random();}function f14(){f15();return Math.random();}function f15(){f16();return Math.random();}function f16(){f17();return Math.random();}function f17(){f18();return Math.random();}function f18(){f19();return Math.random();}function f19(){f20();return Math.random();}function f20(){f21();return Math.random();}function f21(){f22();return Math.random();}function f22(){f23();return Math.random();}function f23(){f24();return Math.random();}function f24(){f25();return Math.random();}function f25(){f26();return Math.random();}function f26(){f27();return Math.random();}function f27(){f28();return Math.random();}function f28(){f29();return Math.random();}function f29(){f30();return Math.random();}function f30(){f31();return Math.random();}function f31(){f32();return Math.random();}function f32(){f33();return Math.random();}function f33(){f34();return Math.random();}function f34(){f35();return Math.random();}function f35(){f36();return Math.random();}function f36(){f37();return Math.random();}function f37(){f38();return Math.random();}function f38(){f39();return Math.random();}function f39(){f40();return Math.random();}function f40(){f41();return Math.random();}function f41(){f42();return Math.random();}function f42(){f43();return Math.random();}function f43(){f44();return Math.random();}function f44(){f45();return Math.random();}function f45(){f46();return Math.random();}function f46(){f47();return Math.random();}function f47(){f48();return Math.random();}function f48(){f49();return Math.random();}function f49(){f50();return Math.random();}function f50(){f51();return Math.random();}function f51(){f52();return Math.random();}function f52(){f53();return Math.random();}function f53(){f54();return Math.random();}function f54(){f55();return Math.random();}function f55(){f56();return Math.random();}function f56(){f57();return Math.random();}function f57(){f58();return Math.random();}function f58(){f59();return Math.random();}function f59(){f60();return Math.random();}function f60(){f61();return Math.random();}function f61(){f62();return Math.random();}function f62(){f63();return Math.random();}function f63(){f64();return Math.random();}function f64(){f65();return Math.random();}function f65(){f66();return Math.random();}function f66(){f67();return Math.random();}function f67(){f68();return Math.random();}function f68(){f69();return Math.random();}function f69(){f70();return Math.random();}function f70(){f71();return Math.random();}function f71(){f72();return Math.random();}function f72(){f73();return Math.random();}function f73(){f74();return Math.random();}function f74(){f75();return Math.random();}function f75(){f76();return Math.random();}function f76(){f77();return Math.random();}function f77(){f78();return Math.random();}function f78(){f79();return Math.random();}function f79(){f80();return Math.random();}function f80(){f81();return Math.random();}function f81(){f82();return Math.random();}function f82(){f83();return Math.random();}function f83(){f84();return Math.random();}function f84(){f85();return Math.random();}function f85(){f86();return Math.random();}function f86(){f87();return Math.random();}function f87(){f88();return Math.random();}function f88(){f89();return Math.random();}function f89(){f90();return Math.random();}function f90(){f91();return Math.random();}function f91(){f92();return Math.random();}function f92(){f93();return Math.random();}function f93(){f94();return Math.random();}function f94(){f95();return Math.random();}function f95(){f96();return Math.random();}function f96(){f97();return Math.random();}function f97(){f98();return Math.random();}function f98(){f99();return Math.random();}function f99(){f100();return Math.random();}function f100(){f101();return Math.random();}function f101(){f102();return Math.random();}function f102(){f103();return Math.random();}function f103(){f104();return Math.random();}function f104(){f105();return Math.random();}function f105(){f106();return Math.random();}function f106(){f107();return Math.random();}function f107(){f108();return Math.random();}function f108(){f109();return Math.random();}function f109(){f110();return Math.random();}function f110(){f111();return Math.random();}function f111(){f112();return Math.random();}function f112(){f113();return Math.random();}function f113(){f114();return Math.random();}function f114(){f115();return Math.random();}function f115(){f116();return Math.random();}function f116(){f117();return Math.random();}function f117(){f118();return Math.random();}function f118(){f119();return Math.random();}function f119(){f120();return Math.random();}function f120(){f121();return Math.random();}function f121(){f122();return Math.random();}function f122(){f123();return Math.random();}function f123(){f124();return Math.random();}function f124(){f125();return Math.random();}function f125(){f126();return Math.random();}function f126(){f127();return Math.random();}function f127(){f128();return Math.random();}function f128(){f129();return Math.random();}function f129(){f130();return Math.random();}function f130(){f131();return Math.random();}function f131(){f132();return Math.random();}function f132(){f133();return Math.random();}function f133(){f134();return Math.random();}function f134(){f135();return Math.random();}function f135(){f136();return Math.random();}function f136(){f137();return Math.random();}function f137(){f138();return Math.random();}function f138(){f139();return Math.random();}function f139(){f140();return Math.random();}function f140(){f141();return Math.random();}function f141(){f142();return Math.random();}function f142(){f143();return Math.random();}function f143(){f144();return Math.random();}function f144(){f145();return Math.random();}function f145(){f146();return Math.random();}function f146(){f147();return Math.random();}function f147(){f148();return Math.random();}function f148(){f149();return Math.random();}function f149(){f150();return Math.random();}function f150(){f151();return Math.random();}function f151(){f152();return Math.random();}function f152(){f153();return Math.random();}function f153(){f154();return Math.random();}function f154(){f155();return Math.random();}function f155(){f156();return Math.random();}function f156(){f157();return Math.random();}function f157(){f158();return Math.random();}function f158(){f159();return Math.random();}function f159(){f160();return Math.random();}function f160(){f161();return Math.random();}function f161(){f162();return Math.random();}function f162(){f163();return Math.random();}function f163(){f164();return Math.random();}function f164(){f165();return Math.random();}function f165(){f166();return Math.random();}function f166(){f167();return Math.random();}function f167(){f168();return Math.random();}function f168(){f169();return Math.random();}function f169(){f170();return Math.random();}function f170(){f171();return Math.random();}function f171(){f172();return Math.random();}function f172(){f173();return Math.random();}function f173(){f174();return Math.random();}function f174(){f175();return Math.random();}function f175(){f176();return Math.random();}function f176(){f177();return Math.random();}function f177(){f178();return Math.random();}function f178(){f179();return Math.random();}function f179(){f180();return Math.random();}function f180(){f181();return Math.random();}function f181(){f182();return Math.random();}function f182(){f183();return Math.random();}function f183(){f184();return Math.random();}function f184(){f185();return Math.random();}function f185(){f186();return Math.random();}function f186(){f187();return Math.random();}function f187(){f188();return Math.random();}function f188(){f189();return Math.random();}function f189(){f190();return Math.random();}function f190(){f191();return Math.random();}function f191(){f192();return Math.random();}function f192(){f193();return Math.random();}function f193(){f194();return Math.random();}function f194(){f195();return Math.random();}function f195(){f196();return Math.random();}function f196(){f197();return Math.random();}function f197(){f198();return Math.random();}function f198(){f199();return Math.random();}function f199(){return Math.random();}/* harmony default export */ __webpack_exports__[\"a\"] = (f0);\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// static/js/main.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"./\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 5);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 248c19f4efa19f864adc","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/object-assign/index.js\n// module id = 0\n// module chunks = 0","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react.production.min.js');\n} else {\n module.exports = require('./cjs/react.development.js');\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react/index.js\n// module id = 1\n// module chunks = 0","\"use strict\";\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nfunction makeEmptyFunction(arg) {\n return function () {\n return arg;\n };\n}\n\n/**\n * This function accepts and discards inputs; it has no side effects. This is\n * primarily useful idiomatically for overridable function endpoints which\n * always need to be callable, since JS lacks a null-call idiom ala Cocoa.\n */\nvar emptyFunction = function emptyFunction() {};\n\nemptyFunction.thatReturns = makeEmptyFunction;\nemptyFunction.thatReturnsFalse = makeEmptyFunction(false);\nemptyFunction.thatReturnsTrue = makeEmptyFunction(true);\nemptyFunction.thatReturnsNull = makeEmptyFunction(null);\nemptyFunction.thatReturnsThis = function () {\n return this;\n};\nemptyFunction.thatReturnsArgument = function (arg) {\n return arg;\n};\n\nmodule.exports = emptyFunction;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/fbjs/lib/emptyFunction.js\n// module id = 2\n// module chunks = 0","'use strict';\n\nvar asap = require('asap/raw');\n\nfunction noop() {}\n\n// States:\n//\n// 0 - pending\n// 1 - fulfilled with _value\n// 2 - rejected with _value\n// 3 - adopted the state of another promise, _value\n//\n// once the state is no longer pending (0) it is immutable\n\n// All `_` prefixed properties will be reduced to `_{random number}`\n// at build time to obfuscate them and discourage their use.\n// We don't use symbols or Object.defineProperty to fully hide them\n// because the performance isn't good enough.\n\n\n// to avoid using try/catch inside critical functions, we\n// extract them to here.\nvar LAST_ERROR = null;\nvar IS_ERROR = {};\nfunction getThen(obj) {\n try {\n return obj.then;\n } catch (ex) {\n LAST_ERROR = ex;\n return IS_ERROR;\n }\n}\n\nfunction tryCallOne(fn, a) {\n try {\n return fn(a);\n } catch (ex) {\n LAST_ERROR = ex;\n return IS_ERROR;\n }\n}\nfunction tryCallTwo(fn, a, b) {\n try {\n fn(a, b);\n } catch (ex) {\n LAST_ERROR = ex;\n return IS_ERROR;\n }\n}\n\nmodule.exports = Promise;\n\nfunction Promise(fn) {\n if (typeof this !== 'object') {\n throw new TypeError('Promises must be constructed via new');\n }\n if (typeof fn !== 'function') {\n throw new TypeError('Promise constructor\\'s argument is not a function');\n }\n this._75 = 0;\n this._83 = 0;\n this._18 = null;\n this._38 = null;\n if (fn === noop) return;\n doResolve(fn, this);\n}\nPromise._47 = null;\nPromise._71 = null;\nPromise._44 = noop;\n\nPromise.prototype.then = function(onFulfilled, onRejected) {\n if (this.constructor !== Promise) {\n return safeThen(this, onFulfilled, onRejected);\n }\n var res = new Promise(noop);\n handle(this, new Handler(onFulfilled, onRejected, res));\n return res;\n};\n\nfunction safeThen(self, onFulfilled, onRejected) {\n return new self.constructor(function (resolve, reject) {\n var res = new Promise(noop);\n res.then(resolve, reject);\n handle(self, new Handler(onFulfilled, onRejected, res));\n });\n}\nfunction handle(self, deferred) {\n while (self._83 === 3) {\n self = self._18;\n }\n if (Promise._47) {\n Promise._47(self);\n }\n if (self._83 === 0) {\n if (self._75 === 0) {\n self._75 = 1;\n self._38 = deferred;\n return;\n }\n if (self._75 === 1) {\n self._75 = 2;\n self._38 = [self._38, deferred];\n return;\n }\n self._38.push(deferred);\n return;\n }\n handleResolved(self, deferred);\n}\n\nfunction handleResolved(self, deferred) {\n asap(function() {\n var cb = self._83 === 1 ? deferred.onFulfilled : deferred.onRejected;\n if (cb === null) {\n if (self._83 === 1) {\n resolve(deferred.promise, self._18);\n } else {\n reject(deferred.promise, self._18);\n }\n return;\n }\n var ret = tryCallOne(cb, self._18);\n if (ret === IS_ERROR) {\n reject(deferred.promise, LAST_ERROR);\n } else {\n resolve(deferred.promise, ret);\n }\n });\n}\nfunction resolve(self, newValue) {\n // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n if (newValue === self) {\n return reject(\n self,\n new TypeError('A promise cannot be resolved with itself.')\n );\n }\n if (\n newValue &&\n (typeof newValue === 'object' || typeof newValue === 'function')\n ) {\n var then = getThen(newValue);\n if (then === IS_ERROR) {\n return reject(self, LAST_ERROR);\n }\n if (\n then === self.then &&\n newValue instanceof Promise\n ) {\n self._83 = 3;\n self._18 = newValue;\n finale(self);\n return;\n } else if (typeof then === 'function') {\n doResolve(then.bind(newValue), self);\n return;\n }\n }\n self._83 = 1;\n self._18 = newValue;\n finale(self);\n}\n\nfunction reject(self, newValue) {\n self._83 = 2;\n self._18 = newValue;\n if (Promise._71) {\n Promise._71(self, newValue);\n }\n finale(self);\n}\nfunction finale(self) {\n if (self._75 === 1) {\n handle(self, self._38);\n self._38 = null;\n }\n if (self._75 === 2) {\n for (var i = 0; i < self._38.length; i++) {\n handle(self, self._38[i]);\n }\n self._38 = null;\n }\n}\n\nfunction Handler(onFulfilled, onRejected, promise){\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.promise = promise;\n}\n\n/**\n * Take a potentially misbehaving resolver function and make sure\n * onFulfilled and onRejected are only called once.\n *\n * Makes no guarantees about asynchrony.\n */\nfunction doResolve(fn, promise) {\n var done = false;\n var res = tryCallTwo(fn, function (value) {\n if (done) return;\n done = true;\n resolve(promise, value);\n }, function (reason) {\n if (done) return;\n done = true;\n reject(promise, reason);\n });\n if (!done && res === IS_ERROR) {\n done = true;\n reject(promise, LAST_ERROR);\n }\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/promise/lib/core.js\n// module id = 3\n// module chunks = 0","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n'use strict';\n\nvar emptyObject = {};\n\nif (process.env.NODE_ENV !== 'production') {\n Object.freeze(emptyObject);\n}\n\nmodule.exports = emptyObject;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/fbjs/lib/emptyObject.js\n// module id = 4\n// module chunks = 0","// @remove-on-eject-begin\n/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n// @remove-on-eject-end\n'use strict';\n\nif (typeof Promise === 'undefined') {\n // Rejection tracking prevents a common issue where React gets into an\n // inconsistent state due to an error, but it gets swallowed by a Promise,\n // and the user has no idea what causes React's erratic future behavior.\n require('promise/lib/rejection-tracking').enable();\n window.Promise = require('promise/lib/es6-extensions.js');\n}\n\n// fetch() polyfill for making API calls.\nrequire('whatwg-fetch');\n\n// Object.assign() is commonly used with React.\n// It will use the native implementation if it's present and isn't buggy.\nObject.assign = require('object-assign');\n\n// In tests, polyfill requestAnimationFrame since jsdom doesn't provide it yet.\n// We don't polyfill it in the browser--this is user's responsibility.\nif (process.env.NODE_ENV === 'test') {\n require('raf').polyfill(global);\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./config/polyfills.js\n// module id = 6\n// module chunks = 0","'use strict';\n\nvar Promise = require('./core');\n\nvar DEFAULT_WHITELIST = [\n ReferenceError,\n TypeError,\n RangeError\n];\n\nvar enabled = false;\nexports.disable = disable;\nfunction disable() {\n enabled = false;\n Promise._47 = null;\n Promise._71 = null;\n}\n\nexports.enable = enable;\nfunction enable(options) {\n options = options || {};\n if (enabled) disable();\n enabled = true;\n var id = 0;\n var displayId = 0;\n var rejections = {};\n Promise._47 = function (promise) {\n if (\n promise._83 === 2 && // IS REJECTED\n rejections[promise._56]\n ) {\n if (rejections[promise._56].logged) {\n onHandled(promise._56);\n } else {\n clearTimeout(rejections[promise._56].timeout);\n }\n delete rejections[promise._56];\n }\n };\n Promise._71 = function (promise, err) {\n if (promise._75 === 0) { // not yet handled\n promise._56 = id++;\n rejections[promise._56] = {\n displayId: null,\n error: err,\n timeout: setTimeout(\n onUnhandled.bind(null, promise._56),\n // For reference errors and type errors, this almost always\n // means the programmer made a mistake, so log them after just\n // 100ms\n // otherwise, wait 2 seconds to see if they get handled\n matchWhitelist(err, DEFAULT_WHITELIST)\n ? 100\n : 2000\n ),\n logged: false\n };\n }\n };\n function onUnhandled(id) {\n if (\n options.allRejections ||\n matchWhitelist(\n rejections[id].error,\n options.whitelist || DEFAULT_WHITELIST\n )\n ) {\n rejections[id].displayId = displayId++;\n if (options.onUnhandled) {\n rejections[id].logged = true;\n options.onUnhandled(\n rejections[id].displayId,\n rejections[id].error\n );\n } else {\n rejections[id].logged = true;\n logError(\n rejections[id].displayId,\n rejections[id].error\n );\n }\n }\n }\n function onHandled(id) {\n if (rejections[id].logged) {\n if (options.onHandled) {\n options.onHandled(rejections[id].displayId, rejections[id].error);\n } else if (!rejections[id].onUnhandled) {\n console.warn(\n 'Promise Rejection Handled (id: ' + rejections[id].displayId + '):'\n );\n console.warn(\n ' This means you can ignore any previous messages of the form \"Possible Unhandled Promise Rejection\" with id ' +\n rejections[id].displayId + '.'\n );\n }\n }\n }\n}\n\nfunction logError(id, error) {\n console.warn('Possible Unhandled Promise Rejection (id: ' + id + '):');\n var errStr = (error && (error.stack || error)) + '';\n errStr.split('\\n').forEach(function (line) {\n console.warn(' ' + line);\n });\n}\n\nfunction matchWhitelist(error, list) {\n return list.some(function (cls) {\n return error instanceof cls;\n });\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/promise/lib/rejection-tracking.js\n// module id = 7\n// module chunks = 0","\"use strict\";\n\n// Use the fastest means possible to execute a task in its own turn, with\n// priority over other events including IO, animation, reflow, and redraw\n// events in browsers.\n//\n// An exception thrown by a task will permanently interrupt the processing of\n// subsequent tasks. The higher level `asap` function ensures that if an\n// exception is thrown by a task, that the task queue will continue flushing as\n// soon as possible, but if you use `rawAsap` directly, you are responsible to\n// either ensure that no exceptions are thrown from your task, or to manually\n// call `rawAsap.requestFlush` if an exception is thrown.\nmodule.exports = rawAsap;\nfunction rawAsap(task) {\n if (!queue.length) {\n requestFlush();\n flushing = true;\n }\n // Equivalent to push, but avoids a function call.\n queue[queue.length] = task;\n}\n\nvar queue = [];\n// Once a flush has been requested, no further calls to `requestFlush` are\n// necessary until the next `flush` completes.\nvar flushing = false;\n// `requestFlush` is an implementation-specific method that attempts to kick\n// off a `flush` event as quickly as possible. `flush` will attempt to exhaust\n// the event queue before yielding to the browser's own event loop.\nvar requestFlush;\n// The position of the next task to execute in the task queue. This is\n// preserved between calls to `flush` so that it can be resumed if\n// a task throws an exception.\nvar index = 0;\n// If a task schedules additional tasks recursively, the task queue can grow\n// unbounded. To prevent memory exhaustion, the task queue will periodically\n// truncate already-completed tasks.\nvar capacity = 1024;\n\n// The flush function processes all tasks that have been scheduled with\n// `rawAsap` unless and until one of those tasks throws an exception.\n// If a task throws an exception, `flush` ensures that its state will remain\n// consistent and will resume where it left off when called again.\n// However, `flush` does not make any arrangements to be called again if an\n// exception is thrown.\nfunction flush() {\n while (index < queue.length) {\n var currentIndex = index;\n // Advance the index before calling the task. This ensures that we will\n // begin flushing on the next task the task throws an error.\n index = index + 1;\n queue[currentIndex].call();\n // Prevent leaking memory for long chains of recursive calls to `asap`.\n // If we call `asap` within tasks scheduled by `asap`, the queue will\n // grow, but to avoid an O(n) walk for every task we execute, we don't\n // shift tasks off the queue after they have been executed.\n // Instead, we periodically shift 1024 tasks off the queue.\n if (index > capacity) {\n // Manually shift all values starting at the index back to the\n // beginning of the queue.\n for (var scan = 0, newLength = queue.length - index; scan < newLength; scan++) {\n queue[scan] = queue[scan + index];\n }\n queue.length -= index;\n index = 0;\n }\n }\n queue.length = 0;\n index = 0;\n flushing = false;\n}\n\n// `requestFlush` is implemented using a strategy based on data collected from\n// every available SauceLabs Selenium web driver worker at time of writing.\n// https://docs.google.com/spreadsheets/d/1mG-5UYGup5qxGdEMWkhP6BWCz053NUb2E1QoUTU16uA/edit#gid=783724593\n\n// Safari 6 and 6.1 for desktop, iPad, and iPhone are the only browsers that\n// have WebKitMutationObserver but not un-prefixed MutationObserver.\n// Must use `global` or `self` instead of `window` to work in both frames and web\n// workers. `global` is a provision of Browserify, Mr, Mrs, or Mop.\n\n/* globals self */\nvar scope = typeof global !== \"undefined\" ? global : self;\nvar BrowserMutationObserver = scope.MutationObserver || scope.WebKitMutationObserver;\n\n// MutationObservers are desirable because they have high priority and work\n// reliably everywhere they are implemented.\n// They are implemented in all modern browsers.\n//\n// - Android 4-4.3\n// - Chrome 26-34\n// - Firefox 14-29\n// - Internet Explorer 11\n// - iPad Safari 6-7.1\n// - iPhone Safari 7-7.1\n// - Safari 6-7\nif (typeof BrowserMutationObserver === \"function\") {\n requestFlush = makeRequestCallFromMutationObserver(flush);\n\n// MessageChannels are desirable because they give direct access to the HTML\n// task queue, are implemented in Internet Explorer 10, Safari 5.0-1, and Opera\n// 11-12, and in web workers in many engines.\n// Although message channels yield to any queued rendering and IO tasks, they\n// would be better than imposing the 4ms delay of timers.\n// However, they do not work reliably in Internet Explorer or Safari.\n\n// Internet Explorer 10 is the only browser that has setImmediate but does\n// not have MutationObservers.\n// Although setImmediate yields to the browser's renderer, it would be\n// preferrable to falling back to setTimeout since it does not have\n// the minimum 4ms penalty.\n// Unfortunately there appears to be a bug in Internet Explorer 10 Mobile (and\n// Desktop to a lesser extent) that renders both setImmediate and\n// MessageChannel useless for the purposes of ASAP.\n// https://github.com/kriskowal/q/issues/396\n\n// Timers are implemented universally.\n// We fall back to timers in workers in most engines, and in foreground\n// contexts in the following browsers.\n// However, note that even this simple case requires nuances to operate in a\n// broad spectrum of browsers.\n//\n// - Firefox 3-13\n// - Internet Explorer 6-9\n// - iPad Safari 4.3\n// - Lynx 2.8.7\n} else {\n requestFlush = makeRequestCallFromTimer(flush);\n}\n\n// `requestFlush` requests that the high priority event queue be flushed as\n// soon as possible.\n// This is useful to prevent an error thrown in a task from stalling the event\n// queue if the exception handled by Node.js’s\n// `process.on(\"uncaughtException\")` or by a domain.\nrawAsap.requestFlush = requestFlush;\n\n// To request a high priority event, we induce a mutation observer by toggling\n// the text of a text node between \"1\" and \"-1\".\nfunction makeRequestCallFromMutationObserver(callback) {\n var toggle = 1;\n var observer = new BrowserMutationObserver(callback);\n var node = document.createTextNode(\"\");\n observer.observe(node, {characterData: true});\n return function requestCall() {\n toggle = -toggle;\n node.data = toggle;\n };\n}\n\n// The message channel technique was discovered by Malte Ubl and was the\n// original foundation for this library.\n// http://www.nonblocking.io/2011/06/windownexttick.html\n\n// Safari 6.0.5 (at least) intermittently fails to create message ports on a\n// page's first load. Thankfully, this version of Safari supports\n// MutationObservers, so we don't need to fall back in that case.\n\n// function makeRequestCallFromMessageChannel(callback) {\n// var channel = new MessageChannel();\n// channel.port1.onmessage = callback;\n// return function requestCall() {\n// channel.port2.postMessage(0);\n// };\n// }\n\n// For reasons explained above, we are also unable to use `setImmediate`\n// under any circumstances.\n// Even if we were, there is another bug in Internet Explorer 10.\n// It is not sufficient to assign `setImmediate` to `requestFlush` because\n// `setImmediate` must be called *by name* and therefore must be wrapped in a\n// closure.\n// Never forget.\n\n// function makeRequestCallFromSetImmediate(callback) {\n// return function requestCall() {\n// setImmediate(callback);\n// };\n// }\n\n// Safari 6.0 has a problem where timers will get lost while the user is\n// scrolling. This problem does not impact ASAP because Safari 6.0 supports\n// mutation observers, so that implementation is used instead.\n// However, if we ever elect to use timers in Safari, the prevalent work-around\n// is to add a scroll event listener that calls for a flush.\n\n// `setTimeout` does not call the passed callback if the delay is less than\n// approximately 7 in web workers in Firefox 8 through 18, and sometimes not\n// even then.\n\nfunction makeRequestCallFromTimer(callback) {\n return function requestCall() {\n // We dispatch a timeout with a specified delay of 0 for engines that\n // can reliably accommodate that request. This will usually be snapped\n // to a 4 milisecond delay, but once we're flushing, there's no delay\n // between events.\n var timeoutHandle = setTimeout(handleTimer, 0);\n // However, since this timer gets frequently dropped in Firefox\n // workers, we enlist an interval handle that will try to fire\n // an event 20 times per second until it succeeds.\n var intervalHandle = setInterval(handleTimer, 50);\n\n function handleTimer() {\n // Whichever timer succeeds will cancel both timers and\n // execute the callback.\n clearTimeout(timeoutHandle);\n clearInterval(intervalHandle);\n callback();\n }\n };\n}\n\n// This is for `asap.js` only.\n// Its name will be periodically randomized to break any code that depends on\n// its existence.\nrawAsap.makeRequestCallFromTimer = makeRequestCallFromTimer;\n\n// ASAP was originally a nextTick shim included in Q. This was factored out\n// into this ASAP package. It was later adapted to RSVP which made further\n// amendments. These decisions, particularly to marginalize MessageChannel and\n// to capture the MutationObserver implementation in a closure, were integrated\n// back into ASAP proper.\n// https://github.com/tildeio/rsvp.js/blob/cddf7232546a9cf858524b75cde6f9edf72620a7/lib/rsvp/asap.js\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/asap/browser-raw.js\n// module id = 8\n// module chunks = 0","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\n} catch(e) {\n\t// This works if the window reference is available\n\tif(typeof window === \"object\")\n\t\tg = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = 9\n// module chunks = 0","'use strict';\n\n//This file contains the ES6 extensions to the core Promises/A+ API\n\nvar Promise = require('./core.js');\n\nmodule.exports = Promise;\n\n/* Static Functions */\n\nvar TRUE = valuePromise(true);\nvar FALSE = valuePromise(false);\nvar NULL = valuePromise(null);\nvar UNDEFINED = valuePromise(undefined);\nvar ZERO = valuePromise(0);\nvar EMPTYSTRING = valuePromise('');\n\nfunction valuePromise(value) {\n var p = new Promise(Promise._44);\n p._83 = 1;\n p._18 = value;\n return p;\n}\nPromise.resolve = function (value) {\n if (value instanceof Promise) return value;\n\n if (value === null) return NULL;\n if (value === undefined) return UNDEFINED;\n if (value === true) return TRUE;\n if (value === false) return FALSE;\n if (value === 0) return ZERO;\n if (value === '') return EMPTYSTRING;\n\n if (typeof value === 'object' || typeof value === 'function') {\n try {\n var then = value.then;\n if (typeof then === 'function') {\n return new Promise(then.bind(value));\n }\n } catch (ex) {\n return new Promise(function (resolve, reject) {\n reject(ex);\n });\n }\n }\n return valuePromise(value);\n};\n\nPromise.all = function (arr) {\n var args = Array.prototype.slice.call(arr);\n\n return new Promise(function (resolve, reject) {\n if (args.length === 0) return resolve([]);\n var remaining = args.length;\n function res(i, val) {\n if (val && (typeof val === 'object' || typeof val === 'function')) {\n if (val instanceof Promise && val.then === Promise.prototype.then) {\n while (val._83 === 3) {\n val = val._18;\n }\n if (val._83 === 1) return res(i, val._18);\n if (val._83 === 2) reject(val._18);\n val.then(function (val) {\n res(i, val);\n }, reject);\n return;\n } else {\n var then = val.then;\n if (typeof then === 'function') {\n var p = new Promise(then.bind(val));\n p.then(function (val) {\n res(i, val);\n }, reject);\n return;\n }\n }\n }\n args[i] = val;\n if (--remaining === 0) {\n resolve(args);\n }\n }\n for (var i = 0; i < args.length; i++) {\n res(i, args[i]);\n }\n });\n};\n\nPromise.reject = function (value) {\n return new Promise(function (resolve, reject) {\n reject(value);\n });\n};\n\nPromise.race = function (values) {\n return new Promise(function (resolve, reject) {\n values.forEach(function(value){\n Promise.resolve(value).then(resolve, reject);\n });\n });\n};\n\n/* Prototype Methods */\n\nPromise.prototype['catch'] = function (onRejected) {\n return this.then(null, onRejected);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/promise/lib/es6-extensions.js\n// module id = 10\n// module chunks = 0","(function(self) {\n 'use strict';\n\n if (self.fetch) {\n return\n }\n\n var support = {\n searchParams: 'URLSearchParams' in self,\n iterable: 'Symbol' in self && 'iterator' in Symbol,\n blob: 'FileReader' in self && 'Blob' in self && (function() {\n try {\n new Blob()\n return true\n } catch(e) {\n return false\n }\n })(),\n formData: 'FormData' in self,\n arrayBuffer: 'ArrayBuffer' in self\n }\n\n if (support.arrayBuffer) {\n var viewClasses = [\n '[object Int8Array]',\n '[object Uint8Array]',\n '[object Uint8ClampedArray]',\n '[object Int16Array]',\n '[object Uint16Array]',\n '[object Int32Array]',\n '[object Uint32Array]',\n '[object Float32Array]',\n '[object Float64Array]'\n ]\n\n var isDataView = function(obj) {\n return obj && DataView.prototype.isPrototypeOf(obj)\n }\n\n var isArrayBufferView = ArrayBuffer.isView || function(obj) {\n return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n }\n }\n\n function normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name)\n }\n if (/[^a-z0-9\\-#$%&'*+.\\^_`|~]/i.test(name)) {\n throw new TypeError('Invalid character in header field name')\n }\n return name.toLowerCase()\n }\n\n function normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value)\n }\n return value\n }\n\n // Build a destructive iterator for the value list\n function iteratorFor(items) {\n var iterator = {\n next: function() {\n var value = items.shift()\n return {done: value === undefined, value: value}\n }\n }\n\n if (support.iterable) {\n iterator[Symbol.iterator] = function() {\n return iterator\n }\n }\n\n return iterator\n }\n\n function Headers(headers) {\n this.map = {}\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value)\n }, this)\n } else if (Array.isArray(headers)) {\n headers.forEach(function(header) {\n this.append(header[0], header[1])\n }, this)\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name])\n }, this)\n }\n }\n\n Headers.prototype.append = function(name, value) {\n name = normalizeName(name)\n value = normalizeValue(value)\n var oldValue = this.map[name]\n this.map[name] = oldValue ? oldValue+','+value : value\n }\n\n Headers.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)]\n }\n\n Headers.prototype.get = function(name) {\n name = normalizeName(name)\n return this.has(name) ? this.map[name] : null\n }\n\n Headers.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n }\n\n Headers.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = normalizeValue(value)\n }\n\n Headers.prototype.forEach = function(callback, thisArg) {\n for (var name in this.map) {\n if (this.map.hasOwnProperty(name)) {\n callback.call(thisArg, this.map[name], name, this)\n }\n }\n }\n\n Headers.prototype.keys = function() {\n var items = []\n this.forEach(function(value, name) { items.push(name) })\n return iteratorFor(items)\n }\n\n Headers.prototype.values = function() {\n var items = []\n this.forEach(function(value) { items.push(value) })\n return iteratorFor(items)\n }\n\n Headers.prototype.entries = function() {\n var items = []\n this.forEach(function(value, name) { items.push([name, value]) })\n return iteratorFor(items)\n }\n\n if (support.iterable) {\n Headers.prototype[Symbol.iterator] = Headers.prototype.entries\n }\n\n function consumed(body) {\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true\n }\n\n function fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result)\n }\n reader.onerror = function() {\n reject(reader.error)\n }\n })\n }\n\n function readBlobAsArrayBuffer(blob) {\n var reader = new FileReader()\n var promise = fileReaderReady(reader)\n reader.readAsArrayBuffer(blob)\n return promise\n }\n\n function readBlobAsText(blob) {\n var reader = new FileReader()\n var promise = fileReaderReady(reader)\n reader.readAsText(blob)\n return promise\n }\n\n function readArrayBufferAsText(buf) {\n var view = new Uint8Array(buf)\n var chars = new Array(view.length)\n\n for (var i = 0; i < view.length; i++) {\n chars[i] = String.fromCharCode(view[i])\n }\n return chars.join('')\n }\n\n function bufferClone(buf) {\n if (buf.slice) {\n return buf.slice(0)\n } else {\n var view = new Uint8Array(buf.byteLength)\n view.set(new Uint8Array(buf))\n return view.buffer\n }\n }\n\n function Body() {\n this.bodyUsed = false\n\n this._initBody = function(body) {\n this._bodyInit = body\n if (!body) {\n this._bodyText = ''\n } else if (typeof body === 'string') {\n this._bodyText = body\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this._bodyText = body.toString()\n } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n this._bodyArrayBuffer = bufferClone(body.buffer)\n // IE 10-11 can't handle a DataView body.\n this._bodyInit = new Blob([this._bodyArrayBuffer])\n } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n this._bodyArrayBuffer = bufferClone(body)\n } else {\n throw new Error('unsupported BodyInit type')\n }\n\n if (!this.headers.get('content-type')) {\n if (typeof body === 'string') {\n this.headers.set('content-type', 'text/plain;charset=UTF-8')\n } else if (this._bodyBlob && this._bodyBlob.type) {\n this.headers.set('content-type', this._bodyBlob.type)\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8')\n }\n }\n }\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n }\n\n this.arrayBuffer = function() {\n if (this._bodyArrayBuffer) {\n return consumed(this) || Promise.resolve(this._bodyArrayBuffer)\n } else {\n return this.blob().then(readBlobAsArrayBuffer)\n }\n }\n }\n\n this.text = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n }\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n }\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n }\n\n return this\n }\n\n // HTTP methods whose capitalization should be normalized\n var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']\n\n function normalizeMethod(method) {\n var upcased = method.toUpperCase()\n return (methods.indexOf(upcased) > -1) ? upcased : method\n }\n\n function Request(input, options) {\n options = options || {}\n var body = options.body\n\n if (input instanceof Request) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url\n this.credentials = input.credentials\n if (!options.headers) {\n this.headers = new Headers(input.headers)\n }\n this.method = input.method\n this.mode = input.mode\n if (!body && input._bodyInit != null) {\n body = input._bodyInit\n input.bodyUsed = true\n }\n } else {\n this.url = String(input)\n }\n\n this.credentials = options.credentials || this.credentials || 'omit'\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers)\n }\n this.method = normalizeMethod(options.method || this.method || 'GET')\n this.mode = options.mode || this.mode || null\n this.referrer = null\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body)\n }\n\n Request.prototype.clone = function() {\n return new Request(this, { body: this._bodyInit })\n }\n\n function decode(body) {\n var form = new FormData()\n body.trim().split('&').forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=')\n var name = split.shift().replace(/\\+/g, ' ')\n var value = split.join('=').replace(/\\+/g, ' ')\n form.append(decodeURIComponent(name), decodeURIComponent(value))\n }\n })\n return form\n }\n\n function parseHeaders(rawHeaders) {\n var headers = new Headers()\n rawHeaders.split(/\\r?\\n/).forEach(function(line) {\n var parts = line.split(':')\n var key = parts.shift().trim()\n if (key) {\n var value = parts.join(':').trim()\n headers.append(key, value)\n }\n })\n return headers\n }\n\n Body.call(Request.prototype)\n\n function Response(bodyInit, options) {\n if (!options) {\n options = {}\n }\n\n this.type = 'default'\n this.status = 'status' in options ? options.status : 200\n this.ok = this.status >= 200 && this.status < 300\n this.statusText = 'statusText' in options ? options.statusText : 'OK'\n this.headers = new Headers(options.headers)\n this.url = options.url || ''\n this._initBody(bodyInit)\n }\n\n Body.call(Response.prototype)\n\n Response.prototype.clone = function() {\n return new Response(this._bodyInit, {\n status: this.status,\n statusText: this.statusText,\n headers: new Headers(this.headers),\n url: this.url\n })\n }\n\n Response.error = function() {\n var response = new Response(null, {status: 0, statusText: ''})\n response.type = 'error'\n return response\n }\n\n var redirectStatuses = [301, 302, 303, 307, 308]\n\n Response.redirect = function(url, status) {\n if (redirectStatuses.indexOf(status) === -1) {\n throw new RangeError('Invalid status code')\n }\n\n return new Response(null, {status: status, headers: {location: url}})\n }\n\n self.Headers = Headers\n self.Request = Request\n self.Response = Response\n\n self.fetch = function(input, init) {\n return new Promise(function(resolve, reject) {\n var request = new Request(input, init)\n var xhr = new XMLHttpRequest()\n\n xhr.onload = function() {\n var options = {\n status: xhr.status,\n statusText: xhr.statusText,\n headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n }\n options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL')\n var body = 'response' in xhr ? xhr.response : xhr.responseText\n resolve(new Response(body, options))\n }\n\n xhr.onerror = function() {\n reject(new TypeError('Network request failed'))\n }\n\n xhr.ontimeout = function() {\n reject(new TypeError('Network request failed'))\n }\n\n xhr.open(request.method, request.url, true)\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true\n }\n\n if ('responseType' in xhr && support.blob) {\n xhr.responseType = 'blob'\n }\n\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value)\n })\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)\n })\n }\n self.fetch.polyfill = true\n})(typeof self !== 'undefined' ? self : this);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/whatwg-fetch/fetch.js\n// module id = 11\n// module chunks = 0","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from './App';\n\nReactDOM.render(<App />, document.getElementById('root'));\n\n\n\n// WEBPACK FOOTER //\n// ./src/index.js","/** @license React v16.2.0\n * react.production.min.js\n *\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var m=require(\"object-assign\"),n=require(\"fbjs/lib/emptyObject\"),p=require(\"fbjs/lib/emptyFunction\"),q=\"function\"===typeof Symbol&&Symbol[\"for\"],r=q?Symbol[\"for\"](\"react.element\"):60103,t=q?Symbol[\"for\"](\"react.call\"):60104,u=q?Symbol[\"for\"](\"react.return\"):60105,v=q?Symbol[\"for\"](\"react.portal\"):60106,w=q?Symbol[\"for\"](\"react.fragment\"):60107,x=\"function\"===typeof Symbol&&Symbol.iterator;\nfunction y(a){for(var b=arguments.length-1,e=\"Minified React error #\"+a+\"; visit http://facebook.github.io/react/docs/error-decoder.html?invariant\\x3d\"+a,c=0;c<b;c++)e+=\"\\x26args[]\\x3d\"+encodeURIComponent(arguments[c+1]);b=Error(e+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\");b.name=\"Invariant Violation\";b.framesToPop=1;throw b;}\nvar z={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}};function A(a,b,e){this.props=a;this.context=b;this.refs=n;this.updater=e||z}A.prototype.isReactComponent={};A.prototype.setState=function(a,b){\"object\"!==typeof a&&\"function\"!==typeof a&&null!=a?y(\"85\"):void 0;this.updater.enqueueSetState(this,a,b,\"setState\")};A.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,\"forceUpdate\")};\nfunction B(a,b,e){this.props=a;this.context=b;this.refs=n;this.updater=e||z}function C(){}C.prototype=A.prototype;var D=B.prototype=new C;D.constructor=B;m(D,A.prototype);D.isPureReactComponent=!0;function E(a,b,e){this.props=a;this.context=b;this.refs=n;this.updater=e||z}var F=E.prototype=new C;F.constructor=E;m(F,A.prototype);F.unstable_isAsyncReactComponent=!0;F.render=function(){return this.props.children};var G={current:null},H=Object.prototype.hasOwnProperty,I={key:!0,ref:!0,__self:!0,__source:!0};\nfunction J(a,b,e){var c,d={},g=null,k=null;if(null!=b)for(c in void 0!==b.ref&&(k=b.ref),void 0!==b.key&&(g=\"\"+b.key),b)H.call(b,c)&&!I.hasOwnProperty(c)&&(d[c]=b[c]);var f=arguments.length-2;if(1===f)d.children=e;else if(1<f){for(var h=Array(f),l=0;l<f;l++)h[l]=arguments[l+2];d.children=h}if(a&&a.defaultProps)for(c in f=a.defaultProps,f)void 0===d[c]&&(d[c]=f[c]);return{$$typeof:r,type:a,key:g,ref:k,props:d,_owner:G.current}}function K(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===r}\nfunction escape(a){var b={\"\\x3d\":\"\\x3d0\",\":\":\"\\x3d2\"};return\"$\"+(\"\"+a).replace(/[=:]/g,function(a){return b[a]})}var L=/\\/+/g,M=[];function N(a,b,e,c){if(M.length){var d=M.pop();d.result=a;d.keyPrefix=b;d.func=e;d.context=c;d.count=0;return d}return{result:a,keyPrefix:b,func:e,context:c,count:0}}function O(a){a.result=null;a.keyPrefix=null;a.func=null;a.context=null;a.count=0;10>M.length&&M.push(a)}\nfunction P(a,b,e,c){var d=typeof a;if(\"undefined\"===d||\"boolean\"===d)a=null;var g=!1;if(null===a)g=!0;else switch(d){case \"string\":case \"number\":g=!0;break;case \"object\":switch(a.$$typeof){case r:case t:case u:case v:g=!0}}if(g)return e(c,a,\"\"===b?\".\"+Q(a,0):b),1;g=0;b=\"\"===b?\".\":b+\":\";if(Array.isArray(a))for(var k=0;k<a.length;k++){d=a[k];var f=b+Q(d,k);g+=P(d,f,e,c)}else if(null===a||\"undefined\"===typeof a?f=null:(f=x&&a[x]||a[\"@@iterator\"],f=\"function\"===typeof f?f:null),\"function\"===typeof f)for(a=\nf.call(a),k=0;!(d=a.next()).done;)d=d.value,f=b+Q(d,k++),g+=P(d,f,e,c);else\"object\"===d&&(e=\"\"+a,y(\"31\",\"[object Object]\"===e?\"object with keys {\"+Object.keys(a).join(\", \")+\"}\":e,\"\"));return g}function Q(a,b){return\"object\"===typeof a&&null!==a&&null!=a.key?escape(a.key):b.toString(36)}function R(a,b){a.func.call(a.context,b,a.count++)}\nfunction S(a,b,e){var c=a.result,d=a.keyPrefix;a=a.func.call(a.context,b,a.count++);Array.isArray(a)?T(a,c,e,p.thatReturnsArgument):null!=a&&(K(a)&&(b=d+(!a.key||b&&b.key===a.key?\"\":(\"\"+a.key).replace(L,\"$\\x26/\")+\"/\")+e,a={$$typeof:r,type:a.type,key:b,ref:a.ref,props:a.props,_owner:a._owner}),c.push(a))}function T(a,b,e,c,d){var g=\"\";null!=e&&(g=(\"\"+e).replace(L,\"$\\x26/\")+\"/\");b=N(b,g,c,d);null==a||P(a,\"\",S,b);O(b)}\nvar U={Children:{map:function(a,b,e){if(null==a)return a;var c=[];T(a,c,null,b,e);return c},forEach:function(a,b,e){if(null==a)return a;b=N(null,null,b,e);null==a||P(a,\"\",R,b);O(b)},count:function(a){return null==a?0:P(a,\"\",p.thatReturnsNull,null)},toArray:function(a){var b=[];T(a,b,null,p.thatReturnsArgument);return b},only:function(a){K(a)?void 0:y(\"143\");return a}},Component:A,PureComponent:B,unstable_AsyncComponent:E,Fragment:w,createElement:J,cloneElement:function(a,b,e){var c=m({},a.props),\nd=a.key,g=a.ref,k=a._owner;if(null!=b){void 0!==b.ref&&(g=b.ref,k=G.current);void 0!==b.key&&(d=\"\"+b.key);if(a.type&&a.type.defaultProps)var f=a.type.defaultProps;for(h in b)H.call(b,h)&&!I.hasOwnProperty(h)&&(c[h]=void 0===b[h]&&void 0!==f?f[h]:b[h])}var h=arguments.length-2;if(1===h)c.children=e;else if(1<h){f=Array(h);for(var l=0;l<h;l++)f[l]=arguments[l+2];c.children=f}return{$$typeof:r,type:a.type,key:d,ref:g,props:c,_owner:k}},createFactory:function(a){var b=J.bind(null,a);b.type=a;return b},\nisValidElement:K,version:\"16.2.0\",__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:{ReactCurrentOwner:G,assign:m}},V=Object.freeze({default:U}),W=V&&U||V;module.exports=W[\"default\"]?W[\"default\"]:W;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react/cjs/react.production.min.js\n// module id = 13\n// module chunks = 0","'use strict';\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n ) {\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n // This branch is unreachable because this function is only called\n // in production, but the condition is true only in development.\n // Therefore if the branch is still here, dead code elimination wasn't\n // properly applied.\n // Don't change the message. React DevTools relies on it. Also make sure\n // this message doesn't occur elsewhere in this function, or it will cause\n // a false positive.\n throw new Error('^_^');\n }\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (process.env.NODE_ENV === 'production') {\n // DCE check should happen before ReactDOM bundle executes so that\n // DevTools can report bad minification during injection.\n checkDCE();\n module.exports = require('./cjs/react-dom.production.min.js');\n} else {\n module.exports = require('./cjs/react-dom.development.js');\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-dom/index.js\n// module id = 14\n// module chunks = 0","/** @license React v16.2.0\n * react-dom.production.min.js\n *\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n'use strict';var aa=require(\"react\"),l=require(\"fbjs/lib/ExecutionEnvironment\"),B=require(\"object-assign\"),C=require(\"fbjs/lib/emptyFunction\"),ba=require(\"fbjs/lib/EventListener\"),da=require(\"fbjs/lib/getActiveElement\"),ea=require(\"fbjs/lib/shallowEqual\"),fa=require(\"fbjs/lib/containsNode\"),ia=require(\"fbjs/lib/focusNode\"),D=require(\"fbjs/lib/emptyObject\");\nfunction E(a){for(var b=arguments.length-1,c=\"Minified React error #\"+a+\"; visit http://facebook.github.io/react/docs/error-decoder.html?invariant\\x3d\"+a,d=0;d<b;d++)c+=\"\\x26args[]\\x3d\"+encodeURIComponent(arguments[d+1]);b=Error(c+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\");b.name=\"Invariant Violation\";b.framesToPop=1;throw b;}aa?void 0:E(\"227\");\nvar oa={children:!0,dangerouslySetInnerHTML:!0,defaultValue:!0,defaultChecked:!0,innerHTML:!0,suppressContentEditableWarning:!0,suppressHydrationWarning:!0,style:!0};function pa(a,b){return(a&b)===b}\nvar ta={MUST_USE_PROPERTY:1,HAS_BOOLEAN_VALUE:4,HAS_NUMERIC_VALUE:8,HAS_POSITIVE_NUMERIC_VALUE:24,HAS_OVERLOADED_BOOLEAN_VALUE:32,HAS_STRING_BOOLEAN_VALUE:64,injectDOMPropertyConfig:function(a){var b=ta,c=a.Properties||{},d=a.DOMAttributeNamespaces||{},e=a.DOMAttributeNames||{};a=a.DOMMutationMethods||{};for(var f in c){ua.hasOwnProperty(f)?E(\"48\",f):void 0;var g=f.toLowerCase(),h=c[f];g={attributeName:g,attributeNamespace:null,propertyName:f,mutationMethod:null,mustUseProperty:pa(h,b.MUST_USE_PROPERTY),\nhasBooleanValue:pa(h,b.HAS_BOOLEAN_VALUE),hasNumericValue:pa(h,b.HAS_NUMERIC_VALUE),hasPositiveNumericValue:pa(h,b.HAS_POSITIVE_NUMERIC_VALUE),hasOverloadedBooleanValue:pa(h,b.HAS_OVERLOADED_BOOLEAN_VALUE),hasStringBooleanValue:pa(h,b.HAS_STRING_BOOLEAN_VALUE)};1>=g.hasBooleanValue+g.hasNumericValue+g.hasOverloadedBooleanValue?void 0:E(\"50\",f);e.hasOwnProperty(f)&&(g.attributeName=e[f]);d.hasOwnProperty(f)&&(g.attributeNamespace=d[f]);a.hasOwnProperty(f)&&(g.mutationMethod=a[f]);ua[f]=g}}},ua={};\nfunction va(a,b){if(oa.hasOwnProperty(a)||2<a.length&&(\"o\"===a[0]||\"O\"===a[0])&&(\"n\"===a[1]||\"N\"===a[1]))return!1;if(null===b)return!0;switch(typeof b){case \"boolean\":return oa.hasOwnProperty(a)?a=!0:(b=wa(a))?a=b.hasBooleanValue||b.hasStringBooleanValue||b.hasOverloadedBooleanValue:(a=a.toLowerCase().slice(0,5),a=\"data-\"===a||\"aria-\"===a),a;case \"undefined\":case \"number\":case \"string\":case \"object\":return!0;default:return!1}}function wa(a){return ua.hasOwnProperty(a)?ua[a]:null}\nvar xa=ta,ya=xa.MUST_USE_PROPERTY,K=xa.HAS_BOOLEAN_VALUE,za=xa.HAS_NUMERIC_VALUE,Aa=xa.HAS_POSITIVE_NUMERIC_VALUE,Ba=xa.HAS_OVERLOADED_BOOLEAN_VALUE,Ca=xa.HAS_STRING_BOOLEAN_VALUE,Da={Properties:{allowFullScreen:K,async:K,autoFocus:K,autoPlay:K,capture:Ba,checked:ya|K,cols:Aa,contentEditable:Ca,controls:K,\"default\":K,defer:K,disabled:K,download:Ba,draggable:Ca,formNoValidate:K,hidden:K,loop:K,multiple:ya|K,muted:ya|K,noValidate:K,open:K,playsInline:K,readOnly:K,required:K,reversed:K,rows:Aa,rowSpan:za,\nscoped:K,seamless:K,selected:ya|K,size:Aa,start:za,span:Aa,spellCheck:Ca,style:0,tabIndex:0,itemScope:K,acceptCharset:0,className:0,htmlFor:0,httpEquiv:0,value:Ca},DOMAttributeNames:{acceptCharset:\"accept-charset\",className:\"class\",htmlFor:\"for\",httpEquiv:\"http-equiv\"},DOMMutationMethods:{value:function(a,b){if(null==b)return a.removeAttribute(\"value\");\"number\"!==a.type||!1===a.hasAttribute(\"value\")?a.setAttribute(\"value\",\"\"+b):a.validity&&!a.validity.badInput&&a.ownerDocument.activeElement!==a&&\na.setAttribute(\"value\",\"\"+b)}}},Ea=xa.HAS_STRING_BOOLEAN_VALUE,M={xlink:\"http://www.w3.org/1999/xlink\",xml:\"http://www.w3.org/XML/1998/namespace\"},Ga={Properties:{autoReverse:Ea,externalResourcesRequired:Ea,preserveAlpha:Ea},DOMAttributeNames:{autoReverse:\"autoReverse\",externalResourcesRequired:\"externalResourcesRequired\",preserveAlpha:\"preserveAlpha\"},DOMAttributeNamespaces:{xlinkActuate:M.xlink,xlinkArcrole:M.xlink,xlinkHref:M.xlink,xlinkRole:M.xlink,xlinkShow:M.xlink,xlinkTitle:M.xlink,xlinkType:M.xlink,\nxmlBase:M.xml,xmlLang:M.xml,xmlSpace:M.xml}},Ha=/[\\-\\:]([a-z])/g;function Ia(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode x-height xlink:actuate xlink:arcrole xlink:href xlink:role xlink:show xlink:title xlink:type xml:base xmlns:xlink xml:lang xml:space\".split(\" \").forEach(function(a){var b=a.replace(Ha,\nIa);Ga.Properties[b]=0;Ga.DOMAttributeNames[b]=a});xa.injectDOMPropertyConfig(Da);xa.injectDOMPropertyConfig(Ga);\nvar P={_caughtError:null,_hasCaughtError:!1,_rethrowError:null,_hasRethrowError:!1,injection:{injectErrorUtils:function(a){\"function\"!==typeof a.invokeGuardedCallback?E(\"197\"):void 0;Ja=a.invokeGuardedCallback}},invokeGuardedCallback:function(a,b,c,d,e,f,g,h,k){Ja.apply(P,arguments)},invokeGuardedCallbackAndCatchFirstError:function(a,b,c,d,e,f,g,h,k){P.invokeGuardedCallback.apply(this,arguments);if(P.hasCaughtError()){var q=P.clearCaughtError();P._hasRethrowError||(P._hasRethrowError=!0,P._rethrowError=\nq)}},rethrowCaughtError:function(){return Ka.apply(P,arguments)},hasCaughtError:function(){return P._hasCaughtError},clearCaughtError:function(){if(P._hasCaughtError){var a=P._caughtError;P._caughtError=null;P._hasCaughtError=!1;return a}E(\"198\")}};function Ja(a,b,c,d,e,f,g,h,k){P._hasCaughtError=!1;P._caughtError=null;var q=Array.prototype.slice.call(arguments,3);try{b.apply(c,q)}catch(v){P._caughtError=v,P._hasCaughtError=!0}}\nfunction Ka(){if(P._hasRethrowError){var a=P._rethrowError;P._rethrowError=null;P._hasRethrowError=!1;throw a;}}var La=null,Ma={};\nfunction Na(){if(La)for(var a in Ma){var b=Ma[a],c=La.indexOf(a);-1<c?void 0:E(\"96\",a);if(!Oa[c]){b.extractEvents?void 0:E(\"97\",a);Oa[c]=b;c=b.eventTypes;for(var d in c){var e=void 0;var f=c[d],g=b,h=d;Pa.hasOwnProperty(h)?E(\"99\",h):void 0;Pa[h]=f;var k=f.phasedRegistrationNames;if(k){for(e in k)k.hasOwnProperty(e)&&Qa(k[e],g,h);e=!0}else f.registrationName?(Qa(f.registrationName,g,h),e=!0):e=!1;e?void 0:E(\"98\",d,a)}}}}\nfunction Qa(a,b,c){Ra[a]?E(\"100\",a):void 0;Ra[a]=b;Sa[a]=b.eventTypes[c].dependencies}var Oa=[],Pa={},Ra={},Sa={};function Ta(a){La?E(\"101\"):void 0;La=Array.prototype.slice.call(a);Na()}function Ua(a){var b=!1,c;for(c in a)if(a.hasOwnProperty(c)){var d=a[c];Ma.hasOwnProperty(c)&&Ma[c]===d||(Ma[c]?E(\"102\",c):void 0,Ma[c]=d,b=!0)}b&&Na()}\nvar Va=Object.freeze({plugins:Oa,eventNameDispatchConfigs:Pa,registrationNameModules:Ra,registrationNameDependencies:Sa,possibleRegistrationNames:null,injectEventPluginOrder:Ta,injectEventPluginsByName:Ua}),Wa=null,Xa=null,Ya=null;function Za(a,b,c,d){b=a.type||\"unknown-event\";a.currentTarget=Ya(d);P.invokeGuardedCallbackAndCatchFirstError(b,c,void 0,a);a.currentTarget=null}\nfunction $a(a,b){null==b?E(\"30\"):void 0;if(null==a)return b;if(Array.isArray(a)){if(Array.isArray(b))return a.push.apply(a,b),a;a.push(b);return a}return Array.isArray(b)?[a].concat(b):[a,b]}function ab(a,b,c){Array.isArray(a)?a.forEach(b,c):a&&b.call(c,a)}var bb=null;\nfunction cb(a,b){if(a){var c=a._dispatchListeners,d=a._dispatchInstances;if(Array.isArray(c))for(var e=0;e<c.length&&!a.isPropagationStopped();e++)Za(a,b,c[e],d[e]);else c&&Za(a,b,c,d);a._dispatchListeners=null;a._dispatchInstances=null;a.isPersistent()||a.constructor.release(a)}}function db(a){return cb(a,!0)}function gb(a){return cb(a,!1)}var hb={injectEventPluginOrder:Ta,injectEventPluginsByName:Ua};\nfunction ib(a,b){var c=a.stateNode;if(!c)return null;var d=Wa(c);if(!d)return null;c=d[b];a:switch(b){case \"onClick\":case \"onClickCapture\":case \"onDoubleClick\":case \"onDoubleClickCapture\":case \"onMouseDown\":case \"onMouseDownCapture\":case \"onMouseMove\":case \"onMouseMoveCapture\":case \"onMouseUp\":case \"onMouseUpCapture\":(d=!d.disabled)||(a=a.type,d=!(\"button\"===a||\"input\"===a||\"select\"===a||\"textarea\"===a));a=!d;break a;default:a=!1}if(a)return null;c&&\"function\"!==typeof c?E(\"231\",b,typeof c):void 0;\nreturn c}function jb(a,b,c,d){for(var e,f=0;f<Oa.length;f++){var g=Oa[f];g&&(g=g.extractEvents(a,b,c,d))&&(e=$a(e,g))}return e}function kb(a){a&&(bb=$a(bb,a))}function lb(a){var b=bb;bb=null;b&&(a?ab(b,db):ab(b,gb),bb?E(\"95\"):void 0,P.rethrowCaughtError())}var mb=Object.freeze({injection:hb,getListener:ib,extractEvents:jb,enqueueEvents:kb,processEventQueue:lb}),nb=Math.random().toString(36).slice(2),Q=\"__reactInternalInstance$\"+nb,ob=\"__reactEventHandlers$\"+nb;\nfunction pb(a){if(a[Q])return a[Q];for(var b=[];!a[Q];)if(b.push(a),a.parentNode)a=a.parentNode;else return null;var c=void 0,d=a[Q];if(5===d.tag||6===d.tag)return d;for(;a&&(d=a[Q]);a=b.pop())c=d;return c}function qb(a){if(5===a.tag||6===a.tag)return a.stateNode;E(\"33\")}function rb(a){return a[ob]||null}\nvar sb=Object.freeze({precacheFiberNode:function(a,b){b[Q]=a},getClosestInstanceFromNode:pb,getInstanceFromNode:function(a){a=a[Q];return!a||5!==a.tag&&6!==a.tag?null:a},getNodeFromInstance:qb,getFiberCurrentPropsFromNode:rb,updateFiberProps:function(a,b){a[ob]=b}});function tb(a){do a=a[\"return\"];while(a&&5!==a.tag);return a?a:null}function ub(a,b,c){for(var d=[];a;)d.push(a),a=tb(a);for(a=d.length;0<a--;)b(d[a],\"captured\",c);for(a=0;a<d.length;a++)b(d[a],\"bubbled\",c)}\nfunction vb(a,b,c){if(b=ib(a,c.dispatchConfig.phasedRegistrationNames[b]))c._dispatchListeners=$a(c._dispatchListeners,b),c._dispatchInstances=$a(c._dispatchInstances,a)}function wb(a){a&&a.dispatchConfig.phasedRegistrationNames&&ub(a._targetInst,vb,a)}function xb(a){if(a&&a.dispatchConfig.phasedRegistrationNames){var b=a._targetInst;b=b?tb(b):null;ub(b,vb,a)}}\nfunction yb(a,b,c){a&&c&&c.dispatchConfig.registrationName&&(b=ib(a,c.dispatchConfig.registrationName))&&(c._dispatchListeners=$a(c._dispatchListeners,b),c._dispatchInstances=$a(c._dispatchInstances,a))}function zb(a){a&&a.dispatchConfig.registrationName&&yb(a._targetInst,null,a)}function Ab(a){ab(a,wb)}\nfunction Bb(a,b,c,d){if(c&&d)a:{var e=c;for(var f=d,g=0,h=e;h;h=tb(h))g++;h=0;for(var k=f;k;k=tb(k))h++;for(;0<g-h;)e=tb(e),g--;for(;0<h-g;)f=tb(f),h--;for(;g--;){if(e===f||e===f.alternate)break a;e=tb(e);f=tb(f)}e=null}else e=null;f=e;for(e=[];c&&c!==f;){g=c.alternate;if(null!==g&&g===f)break;e.push(c);c=tb(c)}for(c=[];d&&d!==f;){g=d.alternate;if(null!==g&&g===f)break;c.push(d);d=tb(d)}for(d=0;d<e.length;d++)yb(e[d],\"bubbled\",a);for(a=c.length;0<a--;)yb(c[a],\"captured\",b)}\nvar Cb=Object.freeze({accumulateTwoPhaseDispatches:Ab,accumulateTwoPhaseDispatchesSkipTarget:function(a){ab(a,xb)},accumulateEnterLeaveDispatches:Bb,accumulateDirectDispatches:function(a){ab(a,zb)}}),Db=null;function Eb(){!Db&&l.canUseDOM&&(Db=\"textContent\"in document.documentElement?\"textContent\":\"innerText\");return Db}var S={_root:null,_startText:null,_fallbackText:null};\nfunction Fb(){if(S._fallbackText)return S._fallbackText;var a,b=S._startText,c=b.length,d,e=Gb(),f=e.length;for(a=0;a<c&&b[a]===e[a];a++);var g=c-a;for(d=1;d<=g&&b[c-d]===e[f-d];d++);S._fallbackText=e.slice(a,1<d?1-d:void 0);return S._fallbackText}function Gb(){return\"value\"in S._root?S._root.value:S._root[Eb()]}\nvar Hb=\"dispatchConfig _targetInst nativeEvent isDefaultPrevented isPropagationStopped _dispatchListeners _dispatchInstances\".split(\" \"),Ib={type:null,target:null,currentTarget:C.thatReturnsNull,eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(a){return a.timeStamp||Date.now()},defaultPrevented:null,isTrusted:null};\nfunction T(a,b,c,d){this.dispatchConfig=a;this._targetInst=b;this.nativeEvent=c;a=this.constructor.Interface;for(var e in a)a.hasOwnProperty(e)&&((b=a[e])?this[e]=b(c):\"target\"===e?this.target=d:this[e]=c[e]);this.isDefaultPrevented=(null!=c.defaultPrevented?c.defaultPrevented:!1===c.returnValue)?C.thatReturnsTrue:C.thatReturnsFalse;this.isPropagationStopped=C.thatReturnsFalse;return this}\nB(T.prototype,{preventDefault:function(){this.defaultPrevented=!0;var a=this.nativeEvent;a&&(a.preventDefault?a.preventDefault():\"unknown\"!==typeof a.returnValue&&(a.returnValue=!1),this.isDefaultPrevented=C.thatReturnsTrue)},stopPropagation:function(){var a=this.nativeEvent;a&&(a.stopPropagation?a.stopPropagation():\"unknown\"!==typeof a.cancelBubble&&(a.cancelBubble=!0),this.isPropagationStopped=C.thatReturnsTrue)},persist:function(){this.isPersistent=C.thatReturnsTrue},isPersistent:C.thatReturnsFalse,\ndestructor:function(){var a=this.constructor.Interface,b;for(b in a)this[b]=null;for(a=0;a<Hb.length;a++)this[Hb[a]]=null}});T.Interface=Ib;T.augmentClass=function(a,b){function c(){}c.prototype=this.prototype;var d=new c;B(d,a.prototype);a.prototype=d;a.prototype.constructor=a;a.Interface=B({},this.Interface,b);a.augmentClass=this.augmentClass;Jb(a)};Jb(T);function Kb(a,b,c,d){if(this.eventPool.length){var e=this.eventPool.pop();this.call(e,a,b,c,d);return e}return new this(a,b,c,d)}\nfunction Lb(a){a instanceof this?void 0:E(\"223\");a.destructor();10>this.eventPool.length&&this.eventPool.push(a)}function Jb(a){a.eventPool=[];a.getPooled=Kb;a.release=Lb}function Mb(a,b,c,d){return T.call(this,a,b,c,d)}T.augmentClass(Mb,{data:null});function Nb(a,b,c,d){return T.call(this,a,b,c,d)}T.augmentClass(Nb,{data:null});var Pb=[9,13,27,32],Vb=l.canUseDOM&&\"CompositionEvent\"in window,Wb=null;l.canUseDOM&&\"documentMode\"in document&&(Wb=document.documentMode);var Xb;\nif(Xb=l.canUseDOM&&\"TextEvent\"in window&&!Wb){var Yb=window.opera;Xb=!(\"object\"===typeof Yb&&\"function\"===typeof Yb.version&&12>=parseInt(Yb.version(),10))}\nvar Zb=Xb,$b=l.canUseDOM&&(!Vb||Wb&&8<Wb&&11>=Wb),ac=String.fromCharCode(32),bc={beforeInput:{phasedRegistrationNames:{bubbled:\"onBeforeInput\",captured:\"onBeforeInputCapture\"},dependencies:[\"topCompositionEnd\",\"topKeyPress\",\"topTextInput\",\"topPaste\"]},compositionEnd:{phasedRegistrationNames:{bubbled:\"onCompositionEnd\",captured:\"onCompositionEndCapture\"},dependencies:\"topBlur topCompositionEnd topKeyDown topKeyPress topKeyUp topMouseDown\".split(\" \")},compositionStart:{phasedRegistrationNames:{bubbled:\"onCompositionStart\",\ncaptured:\"onCompositionStartCapture\"},dependencies:\"topBlur topCompositionStart topKeyDown topKeyPress topKeyUp topMouseDown\".split(\" \")},compositionUpdate:{phasedRegistrationNames:{bubbled:\"onCompositionUpdate\",captured:\"onCompositionUpdateCapture\"},dependencies:\"topBlur topCompositionUpdate topKeyDown topKeyPress topKeyUp topMouseDown\".split(\" \")}},cc=!1;\nfunction dc(a,b){switch(a){case \"topKeyUp\":return-1!==Pb.indexOf(b.keyCode);case \"topKeyDown\":return 229!==b.keyCode;case \"topKeyPress\":case \"topMouseDown\":case \"topBlur\":return!0;default:return!1}}function ec(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var fc=!1;function gc(a,b){switch(a){case \"topCompositionEnd\":return ec(b);case \"topKeyPress\":if(32!==b.which)return null;cc=!0;return ac;case \"topTextInput\":return a=b.data,a===ac&&cc?null:a;default:return null}}\nfunction hc(a,b){if(fc)return\"topCompositionEnd\"===a||!Vb&&dc(a,b)?(a=Fb(),S._root=null,S._startText=null,S._fallbackText=null,fc=!1,a):null;switch(a){case \"topPaste\":return null;case \"topKeyPress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1<b.char.length)return b.char;if(b.which)return String.fromCharCode(b.which)}return null;case \"topCompositionEnd\":return $b?null:b.data;default:return null}}\nvar ic={eventTypes:bc,extractEvents:function(a,b,c,d){var e;if(Vb)b:{switch(a){case \"topCompositionStart\":var f=bc.compositionStart;break b;case \"topCompositionEnd\":f=bc.compositionEnd;break b;case \"topCompositionUpdate\":f=bc.compositionUpdate;break b}f=void 0}else fc?dc(a,c)&&(f=bc.compositionEnd):\"topKeyDown\"===a&&229===c.keyCode&&(f=bc.compositionStart);f?($b&&(fc||f!==bc.compositionStart?f===bc.compositionEnd&&fc&&(e=Fb()):(S._root=d,S._startText=Gb(),fc=!0)),f=Mb.getPooled(f,b,c,d),e?f.data=\ne:(e=ec(c),null!==e&&(f.data=e)),Ab(f),e=f):e=null;(a=Zb?gc(a,c):hc(a,c))?(b=Nb.getPooled(bc.beforeInput,b,c,d),b.data=a,Ab(b)):b=null;return[e,b]}},jc=null,kc=null,lc=null;function mc(a){if(a=Xa(a)){jc&&\"function\"===typeof jc.restoreControlledState?void 0:E(\"194\");var b=Wa(a.stateNode);jc.restoreControlledState(a.stateNode,a.type,b)}}var nc={injectFiberControlledHostComponent:function(a){jc=a}};function oc(a){kc?lc?lc.push(a):lc=[a]:kc=a}\nfunction pc(){if(kc){var a=kc,b=lc;lc=kc=null;mc(a);if(b)for(a=0;a<b.length;a++)mc(b[a])}}var qc=Object.freeze({injection:nc,enqueueStateRestore:oc,restoreStateIfNeeded:pc});function rc(a,b){return a(b)}var sc=!1;function tc(a,b){if(sc)return rc(a,b);sc=!0;try{return rc(a,b)}finally{sc=!1,pc()}}var uc={color:!0,date:!0,datetime:!0,\"datetime-local\":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};\nfunction vc(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return\"input\"===b?!!uc[a.type]:\"textarea\"===b?!0:!1}function wc(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}var xc;l.canUseDOM&&(xc=document.implementation&&document.implementation.hasFeature&&!0!==document.implementation.hasFeature(\"\",\"\"));\nfunction yc(a,b){if(!l.canUseDOM||b&&!(\"addEventListener\"in document))return!1;b=\"on\"+a;var c=b in document;c||(c=document.createElement(\"div\"),c.setAttribute(b,\"return;\"),c=\"function\"===typeof c[b]);!c&&xc&&\"wheel\"===a&&(c=document.implementation.hasFeature(\"Events.wheel\",\"3.0\"));return c}function zc(a){var b=a.type;return(a=a.nodeName)&&\"input\"===a.toLowerCase()&&(\"checkbox\"===b||\"radio\"===b)}\nfunction Ac(a){var b=zc(a)?\"checked\":\"value\",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=\"\"+a[b];if(!a.hasOwnProperty(b)&&\"function\"===typeof c.get&&\"function\"===typeof c.set)return Object.defineProperty(a,b,{enumerable:c.enumerable,configurable:!0,get:function(){return c.get.call(this)},set:function(a){d=\"\"+a;c.set.call(this,a)}}),{getValue:function(){return d},setValue:function(a){d=\"\"+a},stopTracking:function(){a._valueTracker=null;delete a[b]}}}\nfunction Bc(a){a._valueTracker||(a._valueTracker=Ac(a))}function Cc(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d=\"\";a&&(d=zc(a)?a.checked?\"true\":\"false\":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}var Dc={change:{phasedRegistrationNames:{bubbled:\"onChange\",captured:\"onChangeCapture\"},dependencies:\"topBlur topChange topClick topFocus topInput topKeyDown topKeyUp topSelectionChange\".split(\" \")}};\nfunction Ec(a,b,c){a=T.getPooled(Dc.change,a,b,c);a.type=\"change\";oc(c);Ab(a);return a}var Fc=null,Gc=null;function Hc(a){kb(a);lb(!1)}function Ic(a){var b=qb(a);if(Cc(b))return a}function Jc(a,b){if(\"topChange\"===a)return b}var Kc=!1;l.canUseDOM&&(Kc=yc(\"input\")&&(!document.documentMode||9<document.documentMode));function Lc(){Fc&&(Fc.detachEvent(\"onpropertychange\",Mc),Gc=Fc=null)}function Mc(a){\"value\"===a.propertyName&&Ic(Gc)&&(a=Ec(Gc,a,wc(a)),tc(Hc,a))}\nfunction Nc(a,b,c){\"topFocus\"===a?(Lc(),Fc=b,Gc=c,Fc.attachEvent(\"onpropertychange\",Mc)):\"topBlur\"===a&&Lc()}function Oc(a){if(\"topSelectionChange\"===a||\"topKeyUp\"===a||\"topKeyDown\"===a)return Ic(Gc)}function Pc(a,b){if(\"topClick\"===a)return Ic(b)}function $c(a,b){if(\"topInput\"===a||\"topChange\"===a)return Ic(b)}\nvar ad={eventTypes:Dc,_isInputEventSupported:Kc,extractEvents:function(a,b,c,d){var e=b?qb(b):window,f=e.nodeName&&e.nodeName.toLowerCase();if(\"select\"===f||\"input\"===f&&\"file\"===e.type)var g=Jc;else if(vc(e))if(Kc)g=$c;else{g=Oc;var h=Nc}else f=e.nodeName,!f||\"input\"!==f.toLowerCase()||\"checkbox\"!==e.type&&\"radio\"!==e.type||(g=Pc);if(g&&(g=g(a,b)))return Ec(g,c,d);h&&h(a,e,b);\"topBlur\"===a&&null!=b&&(a=b._wrapperState||e._wrapperState)&&a.controlled&&\"number\"===e.type&&(a=\"\"+e.value,e.getAttribute(\"value\")!==\na&&e.setAttribute(\"value\",a))}};function bd(a,b,c,d){return T.call(this,a,b,c,d)}T.augmentClass(bd,{view:null,detail:null});var cd={Alt:\"altKey\",Control:\"ctrlKey\",Meta:\"metaKey\",Shift:\"shiftKey\"};function dd(a){var b=this.nativeEvent;return b.getModifierState?b.getModifierState(a):(a=cd[a])?!!b[a]:!1}function ed(){return dd}function fd(a,b,c,d){return T.call(this,a,b,c,d)}\nbd.augmentClass(fd,{screenX:null,screenY:null,clientX:null,clientY:null,pageX:null,pageY:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,getModifierState:ed,button:null,buttons:null,relatedTarget:function(a){return a.relatedTarget||(a.fromElement===a.srcElement?a.toElement:a.fromElement)}});\nvar gd={mouseEnter:{registrationName:\"onMouseEnter\",dependencies:[\"topMouseOut\",\"topMouseOver\"]},mouseLeave:{registrationName:\"onMouseLeave\",dependencies:[\"topMouseOut\",\"topMouseOver\"]}},hd={eventTypes:gd,extractEvents:function(a,b,c,d){if(\"topMouseOver\"===a&&(c.relatedTarget||c.fromElement)||\"topMouseOut\"!==a&&\"topMouseOver\"!==a)return null;var e=d.window===d?d:(e=d.ownerDocument)?e.defaultView||e.parentWindow:window;\"topMouseOut\"===a?(a=b,b=(b=c.relatedTarget||c.toElement)?pb(b):null):a=null;if(a===\nb)return null;var f=null==a?e:qb(a);e=null==b?e:qb(b);var g=fd.getPooled(gd.mouseLeave,a,c,d);g.type=\"mouseleave\";g.target=f;g.relatedTarget=e;c=fd.getPooled(gd.mouseEnter,b,c,d);c.type=\"mouseenter\";c.target=e;c.relatedTarget=f;Bb(g,c,a,b);return[g,c]}},id=aa.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner;function jd(a){a=a.type;return\"string\"===typeof a?a:\"function\"===typeof a?a.displayName||a.name:null}\nfunction kd(a){var b=a;if(a.alternate)for(;b[\"return\"];)b=b[\"return\"];else{if(0!==(b.effectTag&2))return 1;for(;b[\"return\"];)if(b=b[\"return\"],0!==(b.effectTag&2))return 1}return 3===b.tag?2:3}function ld(a){return(a=a._reactInternalFiber)?2===kd(a):!1}function md(a){2!==kd(a)?E(\"188\"):void 0}\nfunction nd(a){var b=a.alternate;if(!b)return b=kd(a),3===b?E(\"188\"):void 0,1===b?null:a;for(var c=a,d=b;;){var e=c[\"return\"],f=e?e.alternate:null;if(!e||!f)break;if(e.child===f.child){for(var g=e.child;g;){if(g===c)return md(e),a;if(g===d)return md(e),b;g=g.sibling}E(\"188\")}if(c[\"return\"]!==d[\"return\"])c=e,d=f;else{g=!1;for(var h=e.child;h;){if(h===c){g=!0;c=e;d=f;break}if(h===d){g=!0;d=e;c=f;break}h=h.sibling}if(!g){for(h=f.child;h;){if(h===c){g=!0;c=f;d=e;break}if(h===d){g=!0;d=f;c=e;break}h=h.sibling}g?\nvoid 0:E(\"189\")}}c.alternate!==d?E(\"190\"):void 0}3!==c.tag?E(\"188\"):void 0;return c.stateNode.current===c?a:b}function od(a){a=nd(a);if(!a)return null;for(var b=a;;){if(5===b.tag||6===b.tag)return b;if(b.child)b.child[\"return\"]=b,b=b.child;else{if(b===a)break;for(;!b.sibling;){if(!b[\"return\"]||b[\"return\"]===a)return null;b=b[\"return\"]}b.sibling[\"return\"]=b[\"return\"];b=b.sibling}}return null}\nfunction pd(a){a=nd(a);if(!a)return null;for(var b=a;;){if(5===b.tag||6===b.tag)return b;if(b.child&&4!==b.tag)b.child[\"return\"]=b,b=b.child;else{if(b===a)break;for(;!b.sibling;){if(!b[\"return\"]||b[\"return\"]===a)return null;b=b[\"return\"]}b.sibling[\"return\"]=b[\"return\"];b=b.sibling}}return null}var qd=[];\nfunction rd(a){var b=a.targetInst;do{if(!b){a.ancestors.push(b);break}var c;for(c=b;c[\"return\"];)c=c[\"return\"];c=3!==c.tag?null:c.stateNode.containerInfo;if(!c)break;a.ancestors.push(b);b=pb(c)}while(b);for(c=0;c<a.ancestors.length;c++)b=a.ancestors[c],sd(a.topLevelType,b,a.nativeEvent,wc(a.nativeEvent))}var td=!0,sd=void 0;function ud(a){td=!!a}function U(a,b,c){return c?ba.listen(c,b,vd.bind(null,a)):null}function wd(a,b,c){return c?ba.capture(c,b,vd.bind(null,a)):null}\nfunction vd(a,b){if(td){var c=wc(b);c=pb(c);null===c||\"number\"!==typeof c.tag||2===kd(c)||(c=null);if(qd.length){var d=qd.pop();d.topLevelType=a;d.nativeEvent=b;d.targetInst=c;a=d}else a={topLevelType:a,nativeEvent:b,targetInst:c,ancestors:[]};try{tc(rd,a)}finally{a.topLevelType=null,a.nativeEvent=null,a.targetInst=null,a.ancestors.length=0,10>qd.length&&qd.push(a)}}}\nvar xd=Object.freeze({get _enabled(){return td},get _handleTopLevel(){return sd},setHandleTopLevel:function(a){sd=a},setEnabled:ud,isEnabled:function(){return td},trapBubbledEvent:U,trapCapturedEvent:wd,dispatchEvent:vd});function yd(a,b){var c={};c[a.toLowerCase()]=b.toLowerCase();c[\"Webkit\"+a]=\"webkit\"+b;c[\"Moz\"+a]=\"moz\"+b;c[\"ms\"+a]=\"MS\"+b;c[\"O\"+a]=\"o\"+b.toLowerCase();return c}\nvar zd={animationend:yd(\"Animation\",\"AnimationEnd\"),animationiteration:yd(\"Animation\",\"AnimationIteration\"),animationstart:yd(\"Animation\",\"AnimationStart\"),transitionend:yd(\"Transition\",\"TransitionEnd\")},Ad={},Bd={};l.canUseDOM&&(Bd=document.createElement(\"div\").style,\"AnimationEvent\"in window||(delete zd.animationend.animation,delete zd.animationiteration.animation,delete zd.animationstart.animation),\"TransitionEvent\"in window||delete zd.transitionend.transition);\nfunction Cd(a){if(Ad[a])return Ad[a];if(!zd[a])return a;var b=zd[a],c;for(c in b)if(b.hasOwnProperty(c)&&c in Bd)return Ad[a]=b[c];return\"\"}\nvar Dd={topAbort:\"abort\",topAnimationEnd:Cd(\"animationend\")||\"animationend\",topAnimationIteration:Cd(\"animationiteration\")||\"animationiteration\",topAnimationStart:Cd(\"animationstart\")||\"animationstart\",topBlur:\"blur\",topCancel:\"cancel\",topCanPlay:\"canplay\",topCanPlayThrough:\"canplaythrough\",topChange:\"change\",topClick:\"click\",topClose:\"close\",topCompositionEnd:\"compositionend\",topCompositionStart:\"compositionstart\",topCompositionUpdate:\"compositionupdate\",topContextMenu:\"contextmenu\",topCopy:\"copy\",\ntopCut:\"cut\",topDoubleClick:\"dblclick\",topDrag:\"drag\",topDragEnd:\"dragend\",topDragEnter:\"dragenter\",topDragExit:\"dragexit\",topDragLeave:\"dragleave\",topDragOver:\"dragover\",topDragStart:\"dragstart\",topDrop:\"drop\",topDurationChange:\"durationchange\",topEmptied:\"emptied\",topEncrypted:\"encrypted\",topEnded:\"ended\",topError:\"error\",topFocus:\"focus\",topInput:\"input\",topKeyDown:\"keydown\",topKeyPress:\"keypress\",topKeyUp:\"keyup\",topLoadedData:\"loadeddata\",topLoad:\"load\",topLoadedMetadata:\"loadedmetadata\",topLoadStart:\"loadstart\",\ntopMouseDown:\"mousedown\",topMouseMove:\"mousemove\",topMouseOut:\"mouseout\",topMouseOver:\"mouseover\",topMouseUp:\"mouseup\",topPaste:\"paste\",topPause:\"pause\",topPlay:\"play\",topPlaying:\"playing\",topProgress:\"progress\",topRateChange:\"ratechange\",topScroll:\"scroll\",topSeeked:\"seeked\",topSeeking:\"seeking\",topSelectionChange:\"selectionchange\",topStalled:\"stalled\",topSuspend:\"suspend\",topTextInput:\"textInput\",topTimeUpdate:\"timeupdate\",topToggle:\"toggle\",topTouchCancel:\"touchcancel\",topTouchEnd:\"touchend\",topTouchMove:\"touchmove\",\ntopTouchStart:\"touchstart\",topTransitionEnd:Cd(\"transitionend\")||\"transitionend\",topVolumeChange:\"volumechange\",topWaiting:\"waiting\",topWheel:\"wheel\"},Ed={},Fd=0,Gd=\"_reactListenersID\"+(\"\"+Math.random()).slice(2);function Hd(a){Object.prototype.hasOwnProperty.call(a,Gd)||(a[Gd]=Fd++,Ed[a[Gd]]={});return Ed[a[Gd]]}function Id(a){for(;a&&a.firstChild;)a=a.firstChild;return a}\nfunction Jd(a,b){var c=Id(a);a=0;for(var d;c;){if(3===c.nodeType){d=a+c.textContent.length;if(a<=b&&d>=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Id(c)}}function Kd(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&\"text\"===a.type||\"textarea\"===b||\"true\"===a.contentEditable)}\nvar Ld=l.canUseDOM&&\"documentMode\"in document&&11>=document.documentMode,Md={select:{phasedRegistrationNames:{bubbled:\"onSelect\",captured:\"onSelectCapture\"},dependencies:\"topBlur topContextMenu topFocus topKeyDown topKeyUp topMouseDown topMouseUp topSelectionChange\".split(\" \")}},Nd=null,Od=null,Pd=null,Qd=!1;\nfunction Rd(a,b){if(Qd||null==Nd||Nd!==da())return null;var c=Nd;\"selectionStart\"in c&&Kd(c)?c={start:c.selectionStart,end:c.selectionEnd}:window.getSelection?(c=window.getSelection(),c={anchorNode:c.anchorNode,anchorOffset:c.anchorOffset,focusNode:c.focusNode,focusOffset:c.focusOffset}):c=void 0;return Pd&&ea(Pd,c)?null:(Pd=c,a=T.getPooled(Md.select,Od,a,b),a.type=\"select\",a.target=Nd,Ab(a),a)}\nvar Sd={eventTypes:Md,extractEvents:function(a,b,c,d){var e=d.window===d?d.document:9===d.nodeType?d:d.ownerDocument,f;if(!(f=!e)){a:{e=Hd(e);f=Sa.onSelect;for(var g=0;g<f.length;g++){var h=f[g];if(!e.hasOwnProperty(h)||!e[h]){e=!1;break a}}e=!0}f=!e}if(f)return null;e=b?qb(b):window;switch(a){case \"topFocus\":if(vc(e)||\"true\"===e.contentEditable)Nd=e,Od=b,Pd=null;break;case \"topBlur\":Pd=Od=Nd=null;break;case \"topMouseDown\":Qd=!0;break;case \"topContextMenu\":case \"topMouseUp\":return Qd=!1,Rd(c,d);case \"topSelectionChange\":if(Ld)break;\ncase \"topKeyDown\":case \"topKeyUp\":return Rd(c,d)}return null}};function Td(a,b,c,d){return T.call(this,a,b,c,d)}T.augmentClass(Td,{animationName:null,elapsedTime:null,pseudoElement:null});function Ud(a,b,c,d){return T.call(this,a,b,c,d)}T.augmentClass(Ud,{clipboardData:function(a){return\"clipboardData\"in a?a.clipboardData:window.clipboardData}});function Vd(a,b,c,d){return T.call(this,a,b,c,d)}bd.augmentClass(Vd,{relatedTarget:null});\nfunction Wd(a){var b=a.keyCode;\"charCode\"in a?(a=a.charCode,0===a&&13===b&&(a=13)):a=b;return 32<=a||13===a?a:0}\nvar Xd={Esc:\"Escape\",Spacebar:\" \",Left:\"ArrowLeft\",Up:\"ArrowUp\",Right:\"ArrowRight\",Down:\"ArrowDown\",Del:\"Delete\",Win:\"OS\",Menu:\"ContextMenu\",Apps:\"ContextMenu\",Scroll:\"ScrollLock\",MozPrintableKey:\"Unidentified\"},Yd={8:\"Backspace\",9:\"Tab\",12:\"Clear\",13:\"Enter\",16:\"Shift\",17:\"Control\",18:\"Alt\",19:\"Pause\",20:\"CapsLock\",27:\"Escape\",32:\" \",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"ArrowLeft\",38:\"ArrowUp\",39:\"ArrowRight\",40:\"ArrowDown\",45:\"Insert\",46:\"Delete\",112:\"F1\",113:\"F2\",114:\"F3\",115:\"F4\",\n116:\"F5\",117:\"F6\",118:\"F7\",119:\"F8\",120:\"F9\",121:\"F10\",122:\"F11\",123:\"F12\",144:\"NumLock\",145:\"ScrollLock\",224:\"Meta\"};function Zd(a,b,c,d){return T.call(this,a,b,c,d)}\nbd.augmentClass(Zd,{key:function(a){if(a.key){var b=Xd[a.key]||a.key;if(\"Unidentified\"!==b)return b}return\"keypress\"===a.type?(a=Wd(a),13===a?\"Enter\":String.fromCharCode(a)):\"keydown\"===a.type||\"keyup\"===a.type?Yd[a.keyCode]||\"Unidentified\":\"\"},location:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,repeat:null,locale:null,getModifierState:ed,charCode:function(a){return\"keypress\"===a.type?Wd(a):0},keyCode:function(a){return\"keydown\"===a.type||\"keyup\"===a.type?a.keyCode:0},which:function(a){return\"keypress\"===\na.type?Wd(a):\"keydown\"===a.type||\"keyup\"===a.type?a.keyCode:0}});function $d(a,b,c,d){return T.call(this,a,b,c,d)}fd.augmentClass($d,{dataTransfer:null});function ae(a,b,c,d){return T.call(this,a,b,c,d)}bd.augmentClass(ae,{touches:null,targetTouches:null,changedTouches:null,altKey:null,metaKey:null,ctrlKey:null,shiftKey:null,getModifierState:ed});function be(a,b,c,d){return T.call(this,a,b,c,d)}T.augmentClass(be,{propertyName:null,elapsedTime:null,pseudoElement:null});\nfunction ce(a,b,c,d){return T.call(this,a,b,c,d)}fd.augmentClass(ce,{deltaX:function(a){return\"deltaX\"in a?a.deltaX:\"wheelDeltaX\"in a?-a.wheelDeltaX:0},deltaY:function(a){return\"deltaY\"in a?a.deltaY:\"wheelDeltaY\"in a?-a.wheelDeltaY:\"wheelDelta\"in a?-a.wheelDelta:0},deltaZ:null,deltaMode:null});var de={},ee={};\n\"abort animationEnd animationIteration animationStart blur cancel canPlay canPlayThrough click close contextMenu copy cut doubleClick drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error focus input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing progress rateChange reset scroll seeked seeking stalled submit suspend timeUpdate toggle touchCancel touchEnd touchMove touchStart transitionEnd volumeChange waiting wheel\".split(\" \").forEach(function(a){var b=a[0].toUpperCase()+\na.slice(1),c=\"on\"+b;b=\"top\"+b;c={phasedRegistrationNames:{bubbled:c,captured:c+\"Capture\"},dependencies:[b]};de[a]=c;ee[b]=c});\nvar fe={eventTypes:de,extractEvents:function(a,b,c,d){var e=ee[a];if(!e)return null;switch(a){case \"topKeyPress\":if(0===Wd(c))return null;case \"topKeyDown\":case \"topKeyUp\":a=Zd;break;case \"topBlur\":case \"topFocus\":a=Vd;break;case \"topClick\":if(2===c.button)return null;case \"topDoubleClick\":case \"topMouseDown\":case \"topMouseMove\":case \"topMouseUp\":case \"topMouseOut\":case \"topMouseOver\":case \"topContextMenu\":a=fd;break;case \"topDrag\":case \"topDragEnd\":case \"topDragEnter\":case \"topDragExit\":case \"topDragLeave\":case \"topDragOver\":case \"topDragStart\":case \"topDrop\":a=\n$d;break;case \"topTouchCancel\":case \"topTouchEnd\":case \"topTouchMove\":case \"topTouchStart\":a=ae;break;case \"topAnimationEnd\":case \"topAnimationIteration\":case \"topAnimationStart\":a=Td;break;case \"topTransitionEnd\":a=be;break;case \"topScroll\":a=bd;break;case \"topWheel\":a=ce;break;case \"topCopy\":case \"topCut\":case \"topPaste\":a=Ud;break;default:a=T}b=a.getPooled(e,b,c,d);Ab(b);return b}};sd=function(a,b,c,d){a=jb(a,b,c,d);kb(a);lb(!1)};hb.injectEventPluginOrder(\"ResponderEventPlugin SimpleEventPlugin TapEventPlugin EnterLeaveEventPlugin ChangeEventPlugin SelectEventPlugin BeforeInputEventPlugin\".split(\" \"));\nWa=sb.getFiberCurrentPropsFromNode;Xa=sb.getInstanceFromNode;Ya=sb.getNodeFromInstance;hb.injectEventPluginsByName({SimpleEventPlugin:fe,EnterLeaveEventPlugin:hd,ChangeEventPlugin:ad,SelectEventPlugin:Sd,BeforeInputEventPlugin:ic});var ge=[],he=-1;function V(a){0>he||(a.current=ge[he],ge[he]=null,he--)}function W(a,b){he++;ge[he]=a.current;a.current=b}new Set;var ie={current:D},X={current:!1},je=D;function ke(a){return le(a)?je:ie.current}\nfunction me(a,b){var c=a.type.contextTypes;if(!c)return D;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}function le(a){return 2===a.tag&&null!=a.type.childContextTypes}function ne(a){le(a)&&(V(X,a),V(ie,a))}\nfunction oe(a,b,c){null!=ie.cursor?E(\"168\"):void 0;W(ie,b,a);W(X,c,a)}function pe(a,b){var c=a.stateNode,d=a.type.childContextTypes;if(\"function\"!==typeof c.getChildContext)return b;c=c.getChildContext();for(var e in c)e in d?void 0:E(\"108\",jd(a)||\"Unknown\",e);return B({},b,c)}function qe(a){if(!le(a))return!1;var b=a.stateNode;b=b&&b.__reactInternalMemoizedMergedChildContext||D;je=ie.current;W(ie,b,a);W(X,X.current,a);return!0}\nfunction re(a,b){var c=a.stateNode;c?void 0:E(\"169\");if(b){var d=pe(a,je);c.__reactInternalMemoizedMergedChildContext=d;V(X,a);V(ie,a);W(ie,d,a)}else V(X,a);W(X,b,a)}\nfunction Y(a,b,c){this.tag=a;this.key=b;this.stateNode=this.type=null;this.sibling=this.child=this[\"return\"]=null;this.index=0;this.memoizedState=this.updateQueue=this.memoizedProps=this.pendingProps=this.ref=null;this.internalContextTag=c;this.effectTag=0;this.lastEffect=this.firstEffect=this.nextEffect=null;this.expirationTime=0;this.alternate=null}\nfunction se(a,b,c){var d=a.alternate;null===d?(d=new Y(a.tag,a.key,a.internalContextTag),d.type=a.type,d.stateNode=a.stateNode,d.alternate=a,a.alternate=d):(d.effectTag=0,d.nextEffect=null,d.firstEffect=null,d.lastEffect=null);d.expirationTime=c;d.pendingProps=b;d.child=a.child;d.memoizedProps=a.memoizedProps;d.memoizedState=a.memoizedState;d.updateQueue=a.updateQueue;d.sibling=a.sibling;d.index=a.index;d.ref=a.ref;return d}\nfunction te(a,b,c){var d=void 0,e=a.type,f=a.key;\"function\"===typeof e?(d=e.prototype&&e.prototype.isReactComponent?new Y(2,f,b):new Y(0,f,b),d.type=e,d.pendingProps=a.props):\"string\"===typeof e?(d=new Y(5,f,b),d.type=e,d.pendingProps=a.props):\"object\"===typeof e&&null!==e&&\"number\"===typeof e.tag?(d=e,d.pendingProps=a.props):E(\"130\",null==e?e:typeof e,\"\");d.expirationTime=c;return d}function ue(a,b,c,d){b=new Y(10,d,b);b.pendingProps=a;b.expirationTime=c;return b}\nfunction ve(a,b,c){b=new Y(6,null,b);b.pendingProps=a;b.expirationTime=c;return b}function we(a,b,c){b=new Y(7,a.key,b);b.type=a.handler;b.pendingProps=a;b.expirationTime=c;return b}function xe(a,b,c){a=new Y(9,null,b);a.expirationTime=c;return a}function ye(a,b,c){b=new Y(4,a.key,b);b.pendingProps=a.children||[];b.expirationTime=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}var ze=null,Ae=null;\nfunction Be(a){return function(b){try{return a(b)}catch(c){}}}function Ce(a){if(\"undefined\"===typeof __REACT_DEVTOOLS_GLOBAL_HOOK__)return!1;var b=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(b.isDisabled||!b.supportsFiber)return!0;try{var c=b.inject(a);ze=Be(function(a){return b.onCommitFiberRoot(c,a)});Ae=Be(function(a){return b.onCommitFiberUnmount(c,a)})}catch(d){}return!0}function De(a){\"function\"===typeof ze&&ze(a)}function Ee(a){\"function\"===typeof Ae&&Ae(a)}\nfunction Fe(a){return{baseState:a,expirationTime:0,first:null,last:null,callbackList:null,hasForceUpdate:!1,isInitialized:!1}}function Ge(a,b){null===a.last?a.first=a.last=b:(a.last.next=b,a.last=b);if(0===a.expirationTime||a.expirationTime>b.expirationTime)a.expirationTime=b.expirationTime}\nfunction He(a,b){var c=a.alternate,d=a.updateQueue;null===d&&(d=a.updateQueue=Fe(null));null!==c?(a=c.updateQueue,null===a&&(a=c.updateQueue=Fe(null))):a=null;a=a!==d?a:null;null===a?Ge(d,b):null===d.last||null===a.last?(Ge(d,b),Ge(a,b)):(Ge(d,b),a.last=b)}function Ie(a,b,c,d){a=a.partialState;return\"function\"===typeof a?a.call(b,c,d):a}\nfunction Je(a,b,c,d,e,f){null!==a&&a.updateQueue===c&&(c=b.updateQueue={baseState:c.baseState,expirationTime:c.expirationTime,first:c.first,last:c.last,isInitialized:c.isInitialized,callbackList:null,hasForceUpdate:!1});c.expirationTime=0;c.isInitialized?a=c.baseState:(a=c.baseState=b.memoizedState,c.isInitialized=!0);for(var g=!0,h=c.first,k=!1;null!==h;){var q=h.expirationTime;if(q>f){var v=c.expirationTime;if(0===v||v>q)c.expirationTime=q;k||(k=!0,c.baseState=a)}else{k||(c.first=h.next,null===\nc.first&&(c.last=null));if(h.isReplace)a=Ie(h,d,a,e),g=!0;else if(q=Ie(h,d,a,e))a=g?B({},a,q):B(a,q),g=!1;h.isForced&&(c.hasForceUpdate=!0);null!==h.callback&&(q=c.callbackList,null===q&&(q=c.callbackList=[]),q.push(h))}h=h.next}null!==c.callbackList?b.effectTag|=32:null!==c.first||c.hasForceUpdate||(b.updateQueue=null);k||(c.baseState=a);return a}\nfunction Ke(a,b){var c=a.callbackList;if(null!==c)for(a.callbackList=null,a=0;a<c.length;a++){var d=c[a],e=d.callback;d.callback=null;\"function\"!==typeof e?E(\"191\",e):void 0;e.call(b)}}\nfunction Le(a,b,c,d){function e(a,b){b.updater=f;a.stateNode=b;b._reactInternalFiber=a}var f={isMounted:ld,enqueueSetState:function(c,d,e){c=c._reactInternalFiber;e=void 0===e?null:e;var g=b(c);He(c,{expirationTime:g,partialState:d,callback:e,isReplace:!1,isForced:!1,nextCallback:null,next:null});a(c,g)},enqueueReplaceState:function(c,d,e){c=c._reactInternalFiber;e=void 0===e?null:e;var g=b(c);He(c,{expirationTime:g,partialState:d,callback:e,isReplace:!0,isForced:!1,nextCallback:null,next:null});\na(c,g)},enqueueForceUpdate:function(c,d){c=c._reactInternalFiber;d=void 0===d?null:d;var e=b(c);He(c,{expirationTime:e,partialState:null,callback:d,isReplace:!1,isForced:!0,nextCallback:null,next:null});a(c,e)}};return{adoptClassInstance:e,constructClassInstance:function(a,b){var c=a.type,d=ke(a),f=2===a.tag&&null!=a.type.contextTypes,g=f?me(a,d):D;b=new c(b,g);e(a,b);f&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=d,a.__reactInternalMemoizedMaskedChildContext=g);return b},mountClassInstance:function(a,\nb){var c=a.alternate,d=a.stateNode,e=d.state||null,g=a.pendingProps;g?void 0:E(\"158\");var h=ke(a);d.props=g;d.state=a.memoizedState=e;d.refs=D;d.context=me(a,h);null!=a.type&&null!=a.type.prototype&&!0===a.type.prototype.unstable_isAsyncReactComponent&&(a.internalContextTag|=1);\"function\"===typeof d.componentWillMount&&(e=d.state,d.componentWillMount(),e!==d.state&&f.enqueueReplaceState(d,d.state,null),e=a.updateQueue,null!==e&&(d.state=Je(c,a,e,d,g,b)));\"function\"===typeof d.componentDidMount&&(a.effectTag|=\n4)},updateClassInstance:function(a,b,e){var g=b.stateNode;g.props=b.memoizedProps;g.state=b.memoizedState;var h=b.memoizedProps,k=b.pendingProps;k||(k=h,null==k?E(\"159\"):void 0);var u=g.context,z=ke(b);z=me(b,z);\"function\"!==typeof g.componentWillReceiveProps||h===k&&u===z||(u=g.state,g.componentWillReceiveProps(k,z),g.state!==u&&f.enqueueReplaceState(g,g.state,null));u=b.memoizedState;e=null!==b.updateQueue?Je(a,b,b.updateQueue,g,k,e):u;if(!(h!==k||u!==e||X.current||null!==b.updateQueue&&b.updateQueue.hasForceUpdate))return\"function\"!==\ntypeof g.componentDidUpdate||h===a.memoizedProps&&u===a.memoizedState||(b.effectTag|=4),!1;var G=k;if(null===h||null!==b.updateQueue&&b.updateQueue.hasForceUpdate)G=!0;else{var I=b.stateNode,L=b.type;G=\"function\"===typeof I.shouldComponentUpdate?I.shouldComponentUpdate(G,e,z):L.prototype&&L.prototype.isPureReactComponent?!ea(h,G)||!ea(u,e):!0}G?(\"function\"===typeof g.componentWillUpdate&&g.componentWillUpdate(k,e,z),\"function\"===typeof g.componentDidUpdate&&(b.effectTag|=4)):(\"function\"!==typeof g.componentDidUpdate||\nh===a.memoizedProps&&u===a.memoizedState||(b.effectTag|=4),c(b,k),d(b,e));g.props=k;g.state=e;g.context=z;return G}}}var Qe=\"function\"===typeof Symbol&&Symbol[\"for\"],Re=Qe?Symbol[\"for\"](\"react.element\"):60103,Se=Qe?Symbol[\"for\"](\"react.call\"):60104,Te=Qe?Symbol[\"for\"](\"react.return\"):60105,Ue=Qe?Symbol[\"for\"](\"react.portal\"):60106,Ve=Qe?Symbol[\"for\"](\"react.fragment\"):60107,We=\"function\"===typeof Symbol&&Symbol.iterator;\nfunction Xe(a){if(null===a||\"undefined\"===typeof a)return null;a=We&&a[We]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}var Ye=Array.isArray;\nfunction Ze(a,b){var c=b.ref;if(null!==c&&\"function\"!==typeof c){if(b._owner){b=b._owner;var d=void 0;b&&(2!==b.tag?E(\"110\"):void 0,d=b.stateNode);d?void 0:E(\"147\",c);var e=\"\"+c;if(null!==a&&null!==a.ref&&a.ref._stringRef===e)return a.ref;a=function(a){var b=d.refs===D?d.refs={}:d.refs;null===a?delete b[e]:b[e]=a};a._stringRef=e;return a}\"string\"!==typeof c?E(\"148\"):void 0;b._owner?void 0:E(\"149\",c)}return c}\nfunction $e(a,b){\"textarea\"!==a.type&&E(\"31\",\"[object Object]\"===Object.prototype.toString.call(b)?\"object with keys {\"+Object.keys(b).join(\", \")+\"}\":b,\"\")}\nfunction af(a){function b(b,c){if(a){var d=b.lastEffect;null!==d?(d.nextEffect=c,b.lastEffect=c):b.firstEffect=b.lastEffect=c;c.nextEffect=null;c.effectTag=8}}function c(c,d){if(!a)return null;for(;null!==d;)b(c,d),d=d.sibling;return null}function d(a,b){for(a=new Map;null!==b;)null!==b.key?a.set(b.key,b):a.set(b.index,b),b=b.sibling;return a}function e(a,b,c){a=se(a,b,c);a.index=0;a.sibling=null;return a}function f(b,c,d){b.index=d;if(!a)return c;d=b.alternate;if(null!==d)return d=d.index,d<c?(b.effectTag=\n2,c):d;b.effectTag=2;return c}function g(b){a&&null===b.alternate&&(b.effectTag=2);return b}function h(a,b,c,d){if(null===b||6!==b.tag)return b=ve(c,a.internalContextTag,d),b[\"return\"]=a,b;b=e(b,c,d);b[\"return\"]=a;return b}function k(a,b,c,d){if(null!==b&&b.type===c.type)return d=e(b,c.props,d),d.ref=Ze(b,c),d[\"return\"]=a,d;d=te(c,a.internalContextTag,d);d.ref=Ze(b,c);d[\"return\"]=a;return d}function q(a,b,c,d){if(null===b||7!==b.tag)return b=we(c,a.internalContextTag,d),b[\"return\"]=a,b;b=e(b,c,d);\nb[\"return\"]=a;return b}function v(a,b,c,d){if(null===b||9!==b.tag)return b=xe(c,a.internalContextTag,d),b.type=c.value,b[\"return\"]=a,b;b=e(b,null,d);b.type=c.value;b[\"return\"]=a;return b}function y(a,b,c,d){if(null===b||4!==b.tag||b.stateNode.containerInfo!==c.containerInfo||b.stateNode.implementation!==c.implementation)return b=ye(c,a.internalContextTag,d),b[\"return\"]=a,b;b=e(b,c.children||[],d);b[\"return\"]=a;return b}function u(a,b,c,d,f){if(null===b||10!==b.tag)return b=ue(c,a.internalContextTag,\nd,f),b[\"return\"]=a,b;b=e(b,c,d);b[\"return\"]=a;return b}function z(a,b,c){if(\"string\"===typeof b||\"number\"===typeof b)return b=ve(\"\"+b,a.internalContextTag,c),b[\"return\"]=a,b;if(\"object\"===typeof b&&null!==b){switch(b.$$typeof){case Re:if(b.type===Ve)return b=ue(b.props.children,a.internalContextTag,c,b.key),b[\"return\"]=a,b;c=te(b,a.internalContextTag,c);c.ref=Ze(null,b);c[\"return\"]=a;return c;case Se:return b=we(b,a.internalContextTag,c),b[\"return\"]=a,b;case Te:return c=xe(b,a.internalContextTag,\nc),c.type=b.value,c[\"return\"]=a,c;case Ue:return b=ye(b,a.internalContextTag,c),b[\"return\"]=a,b}if(Ye(b)||Xe(b))return b=ue(b,a.internalContextTag,c,null),b[\"return\"]=a,b;$e(a,b)}return null}function G(a,b,c,d){var e=null!==b?b.key:null;if(\"string\"===typeof c||\"number\"===typeof c)return null!==e?null:h(a,b,\"\"+c,d);if(\"object\"===typeof c&&null!==c){switch(c.$$typeof){case Re:return c.key===e?c.type===Ve?u(a,b,c.props.children,d,e):k(a,b,c,d):null;case Se:return c.key===e?q(a,b,c,d):null;case Te:return null===\ne?v(a,b,c,d):null;case Ue:return c.key===e?y(a,b,c,d):null}if(Ye(c)||Xe(c))return null!==e?null:u(a,b,c,d,null);$e(a,c)}return null}function I(a,b,c,d,e){if(\"string\"===typeof d||\"number\"===typeof d)return a=a.get(c)||null,h(b,a,\"\"+d,e);if(\"object\"===typeof d&&null!==d){switch(d.$$typeof){case Re:return a=a.get(null===d.key?c:d.key)||null,d.type===Ve?u(b,a,d.props.children,e,d.key):k(b,a,d,e);case Se:return a=a.get(null===d.key?c:d.key)||null,q(b,a,d,e);case Te:return a=a.get(c)||null,v(b,a,d,e);case Ue:return a=\na.get(null===d.key?c:d.key)||null,y(b,a,d,e)}if(Ye(d)||Xe(d))return a=a.get(c)||null,u(b,a,d,e,null);$e(b,d)}return null}function L(e,g,m,A){for(var h=null,r=null,n=g,w=g=0,k=null;null!==n&&w<m.length;w++){n.index>w?(k=n,n=null):k=n.sibling;var x=G(e,n,m[w],A);if(null===x){null===n&&(n=k);break}a&&n&&null===x.alternate&&b(e,n);g=f(x,g,w);null===r?h=x:r.sibling=x;r=x;n=k}if(w===m.length)return c(e,n),h;if(null===n){for(;w<m.length;w++)if(n=z(e,m[w],A))g=f(n,g,w),null===r?h=n:r.sibling=n,r=n;return h}for(n=\nd(e,n);w<m.length;w++)if(k=I(n,e,w,m[w],A)){if(a&&null!==k.alternate)n[\"delete\"](null===k.key?w:k.key);g=f(k,g,w);null===r?h=k:r.sibling=k;r=k}a&&n.forEach(function(a){return b(e,a)});return h}function N(e,g,m,A){var h=Xe(m);\"function\"!==typeof h?E(\"150\"):void 0;m=h.call(m);null==m?E(\"151\"):void 0;for(var r=h=null,n=g,w=g=0,k=null,x=m.next();null!==n&&!x.done;w++,x=m.next()){n.index>w?(k=n,n=null):k=n.sibling;var J=G(e,n,x.value,A);if(null===J){n||(n=k);break}a&&n&&null===J.alternate&&b(e,n);g=f(J,\ng,w);null===r?h=J:r.sibling=J;r=J;n=k}if(x.done)return c(e,n),h;if(null===n){for(;!x.done;w++,x=m.next())x=z(e,x.value,A),null!==x&&(g=f(x,g,w),null===r?h=x:r.sibling=x,r=x);return h}for(n=d(e,n);!x.done;w++,x=m.next())if(x=I(n,e,w,x.value,A),null!==x){if(a&&null!==x.alternate)n[\"delete\"](null===x.key?w:x.key);g=f(x,g,w);null===r?h=x:r.sibling=x;r=x}a&&n.forEach(function(a){return b(e,a)});return h}return function(a,d,f,h){\"object\"===typeof f&&null!==f&&f.type===Ve&&null===f.key&&(f=f.props.children);\nvar m=\"object\"===typeof f&&null!==f;if(m)switch(f.$$typeof){case Re:a:{var r=f.key;for(m=d;null!==m;){if(m.key===r)if(10===m.tag?f.type===Ve:m.type===f.type){c(a,m.sibling);d=e(m,f.type===Ve?f.props.children:f.props,h);d.ref=Ze(m,f);d[\"return\"]=a;a=d;break a}else{c(a,m);break}else b(a,m);m=m.sibling}f.type===Ve?(d=ue(f.props.children,a.internalContextTag,h,f.key),d[\"return\"]=a,a=d):(h=te(f,a.internalContextTag,h),h.ref=Ze(d,f),h[\"return\"]=a,a=h)}return g(a);case Se:a:{for(m=f.key;null!==d;){if(d.key===\nm)if(7===d.tag){c(a,d.sibling);d=e(d,f,h);d[\"return\"]=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=we(f,a.internalContextTag,h);d[\"return\"]=a;a=d}return g(a);case Te:a:{if(null!==d)if(9===d.tag){c(a,d.sibling);d=e(d,null,h);d.type=f.value;d[\"return\"]=a;a=d;break a}else c(a,d);d=xe(f,a.internalContextTag,h);d.type=f.value;d[\"return\"]=a;a=d}return g(a);case Ue:a:{for(m=f.key;null!==d;){if(d.key===m)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===\nf.implementation){c(a,d.sibling);d=e(d,f.children||[],h);d[\"return\"]=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=ye(f,a.internalContextTag,h);d[\"return\"]=a;a=d}return g(a)}if(\"string\"===typeof f||\"number\"===typeof f)return f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f,h)):(c(a,d),d=ve(f,a.internalContextTag,h)),d[\"return\"]=a,a=d,g(a);if(Ye(f))return L(a,d,f,h);if(Xe(f))return N(a,d,f,h);m&&$e(a,f);if(\"undefined\"===typeof f)switch(a.tag){case 2:case 1:h=a.type,E(\"152\",h.displayName||\nh.name||\"Component\")}return c(a,d)}}var bf=af(!0),cf=af(!1);\nfunction df(a,b,c,d,e){function f(a,b,c){var d=b.expirationTime;b.child=null===a?cf(b,null,c,d):bf(b,a.child,c,d)}function g(a,b){var c=b.ref;null===c||a&&a.ref===c||(b.effectTag|=128)}function h(a,b,c,d){g(a,b);if(!c)return d&&re(b,!1),q(a,b);c=b.stateNode;id.current=b;var e=c.render();b.effectTag|=1;f(a,b,e);b.memoizedState=c.state;b.memoizedProps=c.props;d&&re(b,!0);return b.child}function k(a){var b=a.stateNode;b.pendingContext?oe(a,b.pendingContext,b.pendingContext!==b.context):b.context&&oe(a,\nb.context,!1);I(a,b.containerInfo)}function q(a,b){null!==a&&b.child!==a.child?E(\"153\"):void 0;if(null!==b.child){a=b.child;var c=se(a,a.pendingProps,a.expirationTime);b.child=c;for(c[\"return\"]=b;null!==a.sibling;)a=a.sibling,c=c.sibling=se(a,a.pendingProps,a.expirationTime),c[\"return\"]=b;c.sibling=null}return b.child}function v(a,b){switch(b.tag){case 3:k(b);break;case 2:qe(b);break;case 4:I(b,b.stateNode.containerInfo)}return null}var y=a.shouldSetTextContent,u=a.useSyncScheduling,z=a.shouldDeprioritizeSubtree,\nG=b.pushHostContext,I=b.pushHostContainer,L=c.enterHydrationState,N=c.resetHydrationState,J=c.tryToClaimNextHydratableInstance;a=Le(d,e,function(a,b){a.memoizedProps=b},function(a,b){a.memoizedState=b});var w=a.adoptClassInstance,m=a.constructClassInstance,A=a.mountClassInstance,Ob=a.updateClassInstance;return{beginWork:function(a,b,c){if(0===b.expirationTime||b.expirationTime>c)return v(a,b);switch(b.tag){case 0:null!==a?E(\"155\"):void 0;var d=b.type,e=b.pendingProps,r=ke(b);r=me(b,r);d=d(e,r);b.effectTag|=\n1;\"object\"===typeof d&&null!==d&&\"function\"===typeof d.render?(b.tag=2,e=qe(b),w(b,d),A(b,c),b=h(a,b,!0,e)):(b.tag=1,f(a,b,d),b.memoizedProps=e,b=b.child);return b;case 1:a:{e=b.type;c=b.pendingProps;d=b.memoizedProps;if(X.current)null===c&&(c=d);else if(null===c||d===c){b=q(a,b);break a}d=ke(b);d=me(b,d);e=e(c,d);b.effectTag|=1;f(a,b,e);b.memoizedProps=c;b=b.child}return b;case 2:return e=qe(b),d=void 0,null===a?b.stateNode?E(\"153\"):(m(b,b.pendingProps),A(b,c),d=!0):d=Ob(a,b,c),h(a,b,d,e);case 3:return k(b),\ne=b.updateQueue,null!==e?(d=b.memoizedState,e=Je(a,b,e,null,null,c),d===e?(N(),b=q(a,b)):(d=e.element,r=b.stateNode,(null===a||null===a.child)&&r.hydrate&&L(b)?(b.effectTag|=2,b.child=cf(b,null,d,c)):(N(),f(a,b,d)),b.memoizedState=e,b=b.child)):(N(),b=q(a,b)),b;case 5:G(b);null===a&&J(b);e=b.type;var n=b.memoizedProps;d=b.pendingProps;null===d&&(d=n,null===d?E(\"154\"):void 0);r=null!==a?a.memoizedProps:null;X.current||null!==d&&n!==d?(n=d.children,y(e,d)?n=null:r&&y(e,r)&&(b.effectTag|=16),g(a,b),\n2147483647!==c&&!u&&z(e,d)?(b.expirationTime=2147483647,b=null):(f(a,b,n),b.memoizedProps=d,b=b.child)):b=q(a,b);return b;case 6:return null===a&&J(b),a=b.pendingProps,null===a&&(a=b.memoizedProps),b.memoizedProps=a,null;case 8:b.tag=7;case 7:e=b.pendingProps;if(X.current)null===e&&(e=a&&a.memoizedProps,null===e?E(\"154\"):void 0);else if(null===e||b.memoizedProps===e)e=b.memoizedProps;d=e.children;b.stateNode=null===a?cf(b,b.stateNode,d,c):bf(b,b.stateNode,d,c);b.memoizedProps=e;return b.stateNode;\ncase 9:return null;case 4:a:{I(b,b.stateNode.containerInfo);e=b.pendingProps;if(X.current)null===e&&(e=a&&a.memoizedProps,null==e?E(\"154\"):void 0);else if(null===e||b.memoizedProps===e){b=q(a,b);break a}null===a?b.child=bf(b,null,e,c):f(a,b,e);b.memoizedProps=e;b=b.child}return b;case 10:a:{c=b.pendingProps;if(X.current)null===c&&(c=b.memoizedProps);else if(null===c||b.memoizedProps===c){b=q(a,b);break a}f(a,b,c);b.memoizedProps=c;b=b.child}return b;default:E(\"156\")}},beginFailedWork:function(a,b,\nc){switch(b.tag){case 2:qe(b);break;case 3:k(b);break;default:E(\"157\")}b.effectTag|=64;null===a?b.child=null:b.child!==a.child&&(b.child=a.child);if(0===b.expirationTime||b.expirationTime>c)return v(a,b);b.firstEffect=null;b.lastEffect=null;b.child=null===a?cf(b,null,null,c):bf(b,a.child,null,c);2===b.tag&&(a=b.stateNode,b.memoizedProps=a.props,b.memoizedState=a.state);return b.child}}}\nfunction ef(a,b,c){function d(a){a.effectTag|=4}var e=a.createInstance,f=a.createTextInstance,g=a.appendInitialChild,h=a.finalizeInitialChildren,k=a.prepareUpdate,q=a.persistence,v=b.getRootHostContainer,y=b.popHostContext,u=b.getHostContext,z=b.popHostContainer,G=c.prepareToHydrateHostInstance,I=c.prepareToHydrateHostTextInstance,L=c.popHydrationState,N=void 0,J=void 0,w=void 0;a.mutation?(N=function(){},J=function(a,b,c){(b.updateQueue=c)&&d(b)},w=function(a,b,c,e){c!==e&&d(b)}):q?E(\"235\"):E(\"236\");\nreturn{completeWork:function(a,b,c){var m=b.pendingProps;if(null===m)m=b.memoizedProps;else if(2147483647!==b.expirationTime||2147483647===c)b.pendingProps=null;switch(b.tag){case 1:return null;case 2:return ne(b),null;case 3:z(b);V(X,b);V(ie,b);m=b.stateNode;m.pendingContext&&(m.context=m.pendingContext,m.pendingContext=null);if(null===a||null===a.child)L(b),b.effectTag&=-3;N(b);return null;case 5:y(b);c=v();var A=b.type;if(null!==a&&null!=b.stateNode){var p=a.memoizedProps,q=b.stateNode,x=u();q=\nk(q,A,p,m,c,x);J(a,b,q,A,p,m,c);a.ref!==b.ref&&(b.effectTag|=128)}else{if(!m)return null===b.stateNode?E(\"166\"):void 0,null;a=u();if(L(b))G(b,c,a)&&d(b);else{a=e(A,m,c,a,b);a:for(p=b.child;null!==p;){if(5===p.tag||6===p.tag)g(a,p.stateNode);else if(4!==p.tag&&null!==p.child){p.child[\"return\"]=p;p=p.child;continue}if(p===b)break;for(;null===p.sibling;){if(null===p[\"return\"]||p[\"return\"]===b)break a;p=p[\"return\"]}p.sibling[\"return\"]=p[\"return\"];p=p.sibling}h(a,A,m,c)&&d(b);b.stateNode=a}null!==b.ref&&\n(b.effectTag|=128)}return null;case 6:if(a&&null!=b.stateNode)w(a,b,a.memoizedProps,m);else{if(\"string\"!==typeof m)return null===b.stateNode?E(\"166\"):void 0,null;a=v();c=u();L(b)?I(b)&&d(b):b.stateNode=f(m,a,c,b)}return null;case 7:(m=b.memoizedProps)?void 0:E(\"165\");b.tag=8;A=[];a:for((p=b.stateNode)&&(p[\"return\"]=b);null!==p;){if(5===p.tag||6===p.tag||4===p.tag)E(\"247\");else if(9===p.tag)A.push(p.type);else if(null!==p.child){p.child[\"return\"]=p;p=p.child;continue}for(;null===p.sibling;){if(null===\np[\"return\"]||p[\"return\"]===b)break a;p=p[\"return\"]}p.sibling[\"return\"]=p[\"return\"];p=p.sibling}p=m.handler;m=p(m.props,A);b.child=bf(b,null!==a?a.child:null,m,c);return b.child;case 8:return b.tag=7,null;case 9:return null;case 10:return null;case 4:return z(b),N(b),null;case 0:E(\"167\");default:E(\"156\")}}}}\nfunction ff(a,b){function c(a){var c=a.ref;if(null!==c)try{c(null)}catch(A){b(a,A)}}function d(a){\"function\"===typeof Ee&&Ee(a);switch(a.tag){case 2:c(a);var d=a.stateNode;if(\"function\"===typeof d.componentWillUnmount)try{d.props=a.memoizedProps,d.state=a.memoizedState,d.componentWillUnmount()}catch(A){b(a,A)}break;case 5:c(a);break;case 7:e(a.stateNode);break;case 4:k&&g(a)}}function e(a){for(var b=a;;)if(d(b),null===b.child||k&&4===b.tag){if(b===a)break;for(;null===b.sibling;){if(null===b[\"return\"]||\nb[\"return\"]===a)return;b=b[\"return\"]}b.sibling[\"return\"]=b[\"return\"];b=b.sibling}else b.child[\"return\"]=b,b=b.child}function f(a){return 5===a.tag||3===a.tag||4===a.tag}function g(a){for(var b=a,c=!1,f=void 0,g=void 0;;){if(!c){c=b[\"return\"];a:for(;;){null===c?E(\"160\"):void 0;switch(c.tag){case 5:f=c.stateNode;g=!1;break a;case 3:f=c.stateNode.containerInfo;g=!0;break a;case 4:f=c.stateNode.containerInfo;g=!0;break a}c=c[\"return\"]}c=!0}if(5===b.tag||6===b.tag)e(b),g?J(f,b.stateNode):N(f,b.stateNode);\nelse if(4===b.tag?f=b.stateNode.containerInfo:d(b),null!==b.child){b.child[\"return\"]=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b[\"return\"]||b[\"return\"]===a)return;b=b[\"return\"];4===b.tag&&(c=!1)}b.sibling[\"return\"]=b[\"return\"];b=b.sibling}}var h=a.getPublicInstance,k=a.mutation;a=a.persistence;k||(a?E(\"235\"):E(\"236\"));var q=k.commitMount,v=k.commitUpdate,y=k.resetTextContent,u=k.commitTextUpdate,z=k.appendChild,G=k.appendChildToContainer,I=k.insertBefore,L=k.insertInContainerBefore,\nN=k.removeChild,J=k.removeChildFromContainer;return{commitResetTextContent:function(a){y(a.stateNode)},commitPlacement:function(a){a:{for(var b=a[\"return\"];null!==b;){if(f(b)){var c=b;break a}b=b[\"return\"]}E(\"160\");c=void 0}var d=b=void 0;switch(c.tag){case 5:b=c.stateNode;d=!1;break;case 3:b=c.stateNode.containerInfo;d=!0;break;case 4:b=c.stateNode.containerInfo;d=!0;break;default:E(\"161\")}c.effectTag&16&&(y(b),c.effectTag&=-17);a:b:for(c=a;;){for(;null===c.sibling;){if(null===c[\"return\"]||f(c[\"return\"])){c=\nnull;break a}c=c[\"return\"]}c.sibling[\"return\"]=c[\"return\"];for(c=c.sibling;5!==c.tag&&6!==c.tag;){if(c.effectTag&2)continue b;if(null===c.child||4===c.tag)continue b;else c.child[\"return\"]=c,c=c.child}if(!(c.effectTag&2)){c=c.stateNode;break a}}for(var e=a;;){if(5===e.tag||6===e.tag)c?d?L(b,e.stateNode,c):I(b,e.stateNode,c):d?G(b,e.stateNode):z(b,e.stateNode);else if(4!==e.tag&&null!==e.child){e.child[\"return\"]=e;e=e.child;continue}if(e===a)break;for(;null===e.sibling;){if(null===e[\"return\"]||e[\"return\"]===\na)return;e=e[\"return\"]}e.sibling[\"return\"]=e[\"return\"];e=e.sibling}},commitDeletion:function(a){g(a);a[\"return\"]=null;a.child=null;a.alternate&&(a.alternate.child=null,a.alternate[\"return\"]=null)},commitWork:function(a,b){switch(b.tag){case 2:break;case 5:var c=b.stateNode;if(null!=c){var d=b.memoizedProps;a=null!==a?a.memoizedProps:d;var e=b.type,f=b.updateQueue;b.updateQueue=null;null!==f&&v(c,f,e,a,d,b)}break;case 6:null===b.stateNode?E(\"162\"):void 0;c=b.memoizedProps;u(b.stateNode,null!==a?a.memoizedProps:\nc,c);break;case 3:break;default:E(\"163\")}},commitLifeCycles:function(a,b){switch(b.tag){case 2:var c=b.stateNode;if(b.effectTag&4)if(null===a)c.props=b.memoizedProps,c.state=b.memoizedState,c.componentDidMount();else{var d=a.memoizedProps;a=a.memoizedState;c.props=b.memoizedProps;c.state=b.memoizedState;c.componentDidUpdate(d,a)}b=b.updateQueue;null!==b&&Ke(b,c);break;case 3:c=b.updateQueue;null!==c&&Ke(c,null!==b.child?b.child.stateNode:null);break;case 5:c=b.stateNode;null===a&&b.effectTag&4&&q(c,\nb.type,b.memoizedProps,b);break;case 6:break;case 4:break;default:E(\"163\")}},commitAttachRef:function(a){var b=a.ref;if(null!==b){var c=a.stateNode;switch(a.tag){case 5:b(h(c));break;default:b(c)}}},commitDetachRef:function(a){a=a.ref;null!==a&&a(null)}}}var gf={};\nfunction hf(a){function b(a){a===gf?E(\"174\"):void 0;return a}var c=a.getChildHostContext,d=a.getRootHostContext,e={current:gf},f={current:gf},g={current:gf};return{getHostContext:function(){return b(e.current)},getRootHostContainer:function(){return b(g.current)},popHostContainer:function(a){V(e,a);V(f,a);V(g,a)},popHostContext:function(a){f.current===a&&(V(e,a),V(f,a))},pushHostContainer:function(a,b){W(g,b,a);b=d(b);W(f,a,a);W(e,b,a)},pushHostContext:function(a){var d=b(g.current),h=b(e.current);\nd=c(h,a.type,d);h!==d&&(W(f,a,a),W(e,d,a))},resetHostContainer:function(){e.current=gf;g.current=gf}}}\nfunction jf(a){function b(a,b){var c=new Y(5,null,0);c.type=\"DELETED\";c.stateNode=b;c[\"return\"]=a;c.effectTag=8;null!==a.lastEffect?(a.lastEffect.nextEffect=c,a.lastEffect=c):a.firstEffect=a.lastEffect=c}function c(a,b){switch(a.tag){case 5:return b=f(b,a.type,a.pendingProps),null!==b?(a.stateNode=b,!0):!1;case 6:return b=g(b,a.pendingProps),null!==b?(a.stateNode=b,!0):!1;default:return!1}}function d(a){for(a=a[\"return\"];null!==a&&5!==a.tag&&3!==a.tag;)a=a[\"return\"];y=a}var e=a.shouldSetTextContent;\na=a.hydration;if(!a)return{enterHydrationState:function(){return!1},resetHydrationState:function(){},tryToClaimNextHydratableInstance:function(){},prepareToHydrateHostInstance:function(){E(\"175\")},prepareToHydrateHostTextInstance:function(){E(\"176\")},popHydrationState:function(){return!1}};var f=a.canHydrateInstance,g=a.canHydrateTextInstance,h=a.getNextHydratableSibling,k=a.getFirstHydratableChild,q=a.hydrateInstance,v=a.hydrateTextInstance,y=null,u=null,z=!1;return{enterHydrationState:function(a){u=\nk(a.stateNode.containerInfo);y=a;return z=!0},resetHydrationState:function(){u=y=null;z=!1},tryToClaimNextHydratableInstance:function(a){if(z){var d=u;if(d){if(!c(a,d)){d=h(d);if(!d||!c(a,d)){a.effectTag|=2;z=!1;y=a;return}b(y,u)}y=a;u=k(d)}else a.effectTag|=2,z=!1,y=a}},prepareToHydrateHostInstance:function(a,b,c){b=q(a.stateNode,a.type,a.memoizedProps,b,c,a);a.updateQueue=b;return null!==b?!0:!1},prepareToHydrateHostTextInstance:function(a){return v(a.stateNode,a.memoizedProps,a)},popHydrationState:function(a){if(a!==\ny)return!1;if(!z)return d(a),z=!0,!1;var c=a.type;if(5!==a.tag||\"head\"!==c&&\"body\"!==c&&!e(c,a.memoizedProps))for(c=u;c;)b(a,c),c=h(c);d(a);u=y?h(a.stateNode):null;return!0}}}\nfunction kf(a){function b(a){Qb=ja=!0;var b=a.stateNode;b.current===a?E(\"177\"):void 0;b.isReadyForCommit=!1;id.current=null;if(1<a.effectTag)if(null!==a.lastEffect){a.lastEffect.nextEffect=a;var c=a.firstEffect}else c=a;else c=a.firstEffect;yg();for(t=c;null!==t;){var d=!1,e=void 0;try{for(;null!==t;){var f=t.effectTag;f&16&&zg(t);if(f&128){var g=t.alternate;null!==g&&Ag(g)}switch(f&-242){case 2:Ne(t);t.effectTag&=-3;break;case 6:Ne(t);t.effectTag&=-3;Oe(t.alternate,t);break;case 4:Oe(t.alternate,\nt);break;case 8:Sc=!0,Bg(t),Sc=!1}t=t.nextEffect}}catch(Tc){d=!0,e=Tc}d&&(null===t?E(\"178\"):void 0,h(t,e),null!==t&&(t=t.nextEffect))}Cg();b.current=a;for(t=c;null!==t;){c=!1;d=void 0;try{for(;null!==t;){var k=t.effectTag;k&36&&Dg(t.alternate,t);k&128&&Eg(t);if(k&64)switch(e=t,f=void 0,null!==R&&(f=R.get(e),R[\"delete\"](e),null==f&&null!==e.alternate&&(e=e.alternate,f=R.get(e),R[\"delete\"](e))),null==f?E(\"184\"):void 0,e.tag){case 2:e.stateNode.componentDidCatch(f.error,{componentStack:f.componentStack});\nbreak;case 3:null===ca&&(ca=f.error);break;default:E(\"157\")}var Qc=t.nextEffect;t.nextEffect=null;t=Qc}}catch(Tc){c=!0,d=Tc}c&&(null===t?E(\"178\"):void 0,h(t,d),null!==t&&(t=t.nextEffect))}ja=Qb=!1;\"function\"===typeof De&&De(a.stateNode);ha&&(ha.forEach(G),ha=null);null!==ca&&(a=ca,ca=null,Ob(a));b=b.current.expirationTime;0===b&&(qa=R=null);return b}function c(a){for(;;){var b=Fg(a.alternate,a,H),c=a[\"return\"],d=a.sibling;var e=a;if(2147483647===H||2147483647!==e.expirationTime){if(2!==e.tag&&3!==\ne.tag)var f=0;else f=e.updateQueue,f=null===f?0:f.expirationTime;for(var g=e.child;null!==g;)0!==g.expirationTime&&(0===f||f>g.expirationTime)&&(f=g.expirationTime),g=g.sibling;e.expirationTime=f}if(null!==b)return b;null!==c&&(null===c.firstEffect&&(c.firstEffect=a.firstEffect),null!==a.lastEffect&&(null!==c.lastEffect&&(c.lastEffect.nextEffect=a.firstEffect),c.lastEffect=a.lastEffect),1<a.effectTag&&(null!==c.lastEffect?c.lastEffect.nextEffect=a:c.firstEffect=a,c.lastEffect=a));if(null!==d)return d;\nif(null!==c)a=c;else{a.stateNode.isReadyForCommit=!0;break}}return null}function d(a){var b=rg(a.alternate,a,H);null===b&&(b=c(a));id.current=null;return b}function e(a){var b=Gg(a.alternate,a,H);null===b&&(b=c(a));id.current=null;return b}function f(a){if(null!==R){if(!(0===H||H>a))if(H<=Uc)for(;null!==F;)F=k(F)?e(F):d(F);else for(;null!==F&&!A();)F=k(F)?e(F):d(F)}else if(!(0===H||H>a))if(H<=Uc)for(;null!==F;)F=d(F);else for(;null!==F&&!A();)F=d(F)}function g(a,b){ja?E(\"243\"):void 0;ja=!0;a.isReadyForCommit=\n!1;if(a!==ra||b!==H||null===F){for(;-1<he;)ge[he]=null,he--;je=D;ie.current=D;X.current=!1;x();ra=a;H=b;F=se(ra.current,null,b)}var c=!1,d=null;try{f(b)}catch(Rc){c=!0,d=Rc}for(;c;){if(eb){ca=d;break}var g=F;if(null===g)eb=!0;else{var k=h(g,d);null===k?E(\"183\"):void 0;if(!eb){try{c=k;d=b;for(k=c;null!==g;){switch(g.tag){case 2:ne(g);break;case 5:qg(g);break;case 3:p(g);break;case 4:p(g)}if(g===k||g.alternate===k)break;g=g[\"return\"]}F=e(c);f(d)}catch(Rc){c=!0;d=Rc;continue}break}}}b=ca;eb=ja=!1;ca=\nnull;null!==b&&Ob(b);return a.isReadyForCommit?a.current.alternate:null}function h(a,b){var c=id.current=null,d=!1,e=!1,f=null;if(3===a.tag)c=a,q(a)&&(eb=!0);else for(var g=a[\"return\"];null!==g&&null===c;){2===g.tag?\"function\"===typeof g.stateNode.componentDidCatch&&(d=!0,f=jd(g),c=g,e=!0):3===g.tag&&(c=g);if(q(g)){if(Sc||null!==ha&&(ha.has(g)||null!==g.alternate&&ha.has(g.alternate)))return null;c=null;e=!1}g=g[\"return\"]}if(null!==c){null===qa&&(qa=new Set);qa.add(c);var h=\"\";g=a;do{a:switch(g.tag){case 0:case 1:case 2:case 5:var k=\ng._debugOwner,Qc=g._debugSource;var m=jd(g);var n=null;k&&(n=jd(k));k=Qc;m=\"\\n in \"+(m||\"Unknown\")+(k?\" (at \"+k.fileName.replace(/^.*[\\\\\\/]/,\"\")+\":\"+k.lineNumber+\")\":n?\" (created by \"+n+\")\":\"\");break a;default:m=\"\"}h+=m;g=g[\"return\"]}while(g);g=h;a=jd(a);null===R&&(R=new Map);b={componentName:a,componentStack:g,error:b,errorBoundary:d?c.stateNode:null,errorBoundaryFound:d,errorBoundaryName:f,willRetry:e};R.set(c,b);try{var p=b.error;p&&p.suppressReactErrorLogging||console.error(p)}catch(Vc){Vc&&\nVc.suppressReactErrorLogging||console.error(Vc)}Qb?(null===ha&&(ha=new Set),ha.add(c)):G(c);return c}null===ca&&(ca=b);return null}function k(a){return null!==R&&(R.has(a)||null!==a.alternate&&R.has(a.alternate))}function q(a){return null!==qa&&(qa.has(a)||null!==a.alternate&&qa.has(a.alternate))}function v(){return 20*(((I()+100)/20|0)+1)}function y(a){return 0!==ka?ka:ja?Qb?1:H:!Hg||a.internalContextTag&1?v():1}function u(a,b){return z(a,b,!1)}function z(a,b){for(;null!==a;){if(0===a.expirationTime||\na.expirationTime>b)a.expirationTime=b;null!==a.alternate&&(0===a.alternate.expirationTime||a.alternate.expirationTime>b)&&(a.alternate.expirationTime=b);if(null===a[\"return\"])if(3===a.tag){var c=a.stateNode;!ja&&c===ra&&b<H&&(F=ra=null,H=0);var d=c,e=b;Rb>Ig&&E(\"185\");if(null===d.nextScheduledRoot)d.remainingExpirationTime=e,null===O?(sa=O=d,d.nextScheduledRoot=d):(O=O.nextScheduledRoot=d,O.nextScheduledRoot=sa);else{var f=d.remainingExpirationTime;if(0===f||e<f)d.remainingExpirationTime=e}Fa||(la?\nSb&&(ma=d,na=1,m(ma,na)):1===e?w(1,null):L(e));!ja&&c===ra&&b<H&&(F=ra=null,H=0)}else break;a=a[\"return\"]}}function G(a){z(a,1,!0)}function I(){return Uc=((Wc()-Pe)/10|0)+2}function L(a){if(0!==Tb){if(a>Tb)return;Jg(Xc)}var b=Wc()-Pe;Tb=a;Xc=Kg(J,{timeout:10*(a-2)-b})}function N(){var a=0,b=null;if(null!==O)for(var c=O,d=sa;null!==d;){var e=d.remainingExpirationTime;if(0===e){null===c||null===O?E(\"244\"):void 0;if(d===d.nextScheduledRoot){sa=O=d.nextScheduledRoot=null;break}else if(d===sa)sa=e=d.nextScheduledRoot,\nO.nextScheduledRoot=e,d.nextScheduledRoot=null;else if(d===O){O=c;O.nextScheduledRoot=sa;d.nextScheduledRoot=null;break}else c.nextScheduledRoot=d.nextScheduledRoot,d.nextScheduledRoot=null;d=c.nextScheduledRoot}else{if(0===a||e<a)a=e,b=d;if(d===O)break;c=d;d=d.nextScheduledRoot}}c=ma;null!==c&&c===b?Rb++:Rb=0;ma=b;na=a}function J(a){w(0,a)}function w(a,b){fb=b;for(N();null!==ma&&0!==na&&(0===a||na<=a)&&!Yc;)m(ma,na),N();null!==fb&&(Tb=0,Xc=-1);0!==na&&L(na);fb=null;Yc=!1;Rb=0;if(Ub)throw a=Zc,Zc=\nnull,Ub=!1,a;}function m(a,c){Fa?E(\"245\"):void 0;Fa=!0;if(c<=I()){var d=a.finishedWork;null!==d?(a.finishedWork=null,a.remainingExpirationTime=b(d)):(a.finishedWork=null,d=g(a,c),null!==d&&(a.remainingExpirationTime=b(d)))}else d=a.finishedWork,null!==d?(a.finishedWork=null,a.remainingExpirationTime=b(d)):(a.finishedWork=null,d=g(a,c),null!==d&&(A()?a.finishedWork=d:a.remainingExpirationTime=b(d)));Fa=!1}function A(){return null===fb||fb.timeRemaining()>Lg?!1:Yc=!0}function Ob(a){null===ma?E(\"246\"):\nvoid 0;ma.remainingExpirationTime=0;Ub||(Ub=!0,Zc=a)}var r=hf(a),n=jf(a),p=r.popHostContainer,qg=r.popHostContext,x=r.resetHostContainer,Me=df(a,r,n,u,y),rg=Me.beginWork,Gg=Me.beginFailedWork,Fg=ef(a,r,n).completeWork;r=ff(a,h);var zg=r.commitResetTextContent,Ne=r.commitPlacement,Bg=r.commitDeletion,Oe=r.commitWork,Dg=r.commitLifeCycles,Eg=r.commitAttachRef,Ag=r.commitDetachRef,Wc=a.now,Kg=a.scheduleDeferredCallback,Jg=a.cancelDeferredCallback,Hg=a.useSyncScheduling,yg=a.prepareForCommit,Cg=a.resetAfterCommit,\nPe=Wc(),Uc=2,ka=0,ja=!1,F=null,ra=null,H=0,t=null,R=null,qa=null,ha=null,ca=null,eb=!1,Qb=!1,Sc=!1,sa=null,O=null,Tb=0,Xc=-1,Fa=!1,ma=null,na=0,Yc=!1,Ub=!1,Zc=null,fb=null,la=!1,Sb=!1,Ig=1E3,Rb=0,Lg=1;return{computeAsyncExpiration:v,computeExpirationForFiber:y,scheduleWork:u,batchedUpdates:function(a,b){var c=la;la=!0;try{return a(b)}finally{(la=c)||Fa||w(1,null)}},unbatchedUpdates:function(a){if(la&&!Sb){Sb=!0;try{return a()}finally{Sb=!1}}return a()},flushSync:function(a){var b=la;la=!0;try{a:{var c=\nka;ka=1;try{var d=a();break a}finally{ka=c}d=void 0}return d}finally{la=b,Fa?E(\"187\"):void 0,w(1,null)}},deferredUpdates:function(a){var b=ka;ka=v();try{return a()}finally{ka=b}}}}\nfunction lf(a){function b(a){a=od(a);return null===a?null:a.stateNode}var c=a.getPublicInstance;a=kf(a);var d=a.computeAsyncExpiration,e=a.computeExpirationForFiber,f=a.scheduleWork;return{createContainer:function(a,b){var c=new Y(3,null,0);a={current:c,containerInfo:a,pendingChildren:null,remainingExpirationTime:0,isReadyForCommit:!1,finishedWork:null,context:null,pendingContext:null,hydrate:b,nextScheduledRoot:null};return c.stateNode=a},updateContainer:function(a,b,c,q){var g=b.current;if(c){c=\nc._reactInternalFiber;var h;b:{2===kd(c)&&2===c.tag?void 0:E(\"170\");for(h=c;3!==h.tag;){if(le(h)){h=h.stateNode.__reactInternalMemoizedMergedChildContext;break b}(h=h[\"return\"])?void 0:E(\"171\")}h=h.stateNode.context}c=le(c)?pe(c,h):h}else c=D;null===b.context?b.context=c:b.pendingContext=c;b=q;b=void 0===b?null:b;q=null!=a&&null!=a.type&&null!=a.type.prototype&&!0===a.type.prototype.unstable_isAsyncReactComponent?d():e(g);He(g,{expirationTime:q,partialState:{element:a},callback:b,isReplace:!1,isForced:!1,\nnextCallback:null,next:null});f(g,q)},batchedUpdates:a.batchedUpdates,unbatchedUpdates:a.unbatchedUpdates,deferredUpdates:a.deferredUpdates,flushSync:a.flushSync,getPublicRootInstance:function(a){a=a.current;if(!a.child)return null;switch(a.child.tag){case 5:return c(a.child.stateNode);default:return a.child.stateNode}},findHostInstance:b,findHostInstanceWithNoPortals:function(a){a=pd(a);return null===a?null:a.stateNode},injectIntoDevTools:function(a){var c=a.findFiberByHostInstance;return Ce(B({},\na,{findHostInstanceByFiber:function(a){return b(a)},findFiberByHostInstance:function(a){return c?c(a):null}}))}}}var mf=Object.freeze({default:lf}),nf=mf&&lf||mf,of=nf[\"default\"]?nf[\"default\"]:nf;function pf(a,b,c){var d=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:Ue,key:null==d?null:\"\"+d,children:a,containerInfo:b,implementation:c}}var qf=\"object\"===typeof performance&&\"function\"===typeof performance.now,rf=void 0;rf=qf?function(){return performance.now()}:function(){return Date.now()};\nvar sf=void 0,tf=void 0;\nif(l.canUseDOM)if(\"function\"!==typeof requestIdleCallback||\"function\"!==typeof cancelIdleCallback){var uf=null,vf=!1,wf=-1,xf=!1,yf=0,zf=33,Af=33,Bf;Bf=qf?{didTimeout:!1,timeRemaining:function(){var a=yf-performance.now();return 0<a?a:0}}:{didTimeout:!1,timeRemaining:function(){var a=yf-Date.now();return 0<a?a:0}};var Cf=\"__reactIdleCallback$\"+Math.random().toString(36).slice(2);window.addEventListener(\"message\",function(a){if(a.source===window&&a.data===Cf){vf=!1;a=rf();if(0>=yf-a)if(-1!==wf&&wf<=\na)Bf.didTimeout=!0;else{xf||(xf=!0,requestAnimationFrame(Df));return}else Bf.didTimeout=!1;wf=-1;a=uf;uf=null;null!==a&&a(Bf)}},!1);var Df=function(a){xf=!1;var b=a-yf+Af;b<Af&&zf<Af?(8>b&&(b=8),Af=b<zf?zf:b):zf=b;yf=a+Af;vf||(vf=!0,window.postMessage(Cf,\"*\"))};sf=function(a,b){uf=a;null!=b&&\"number\"===typeof b.timeout&&(wf=rf()+b.timeout);xf||(xf=!0,requestAnimationFrame(Df));return 0};tf=function(){uf=null;vf=!1;wf=-1}}else sf=window.requestIdleCallback,tf=window.cancelIdleCallback;else sf=function(a){return setTimeout(function(){a({timeRemaining:function(){return Infinity}})})},\ntf=function(a){clearTimeout(a)};var Ef=/^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$/,Ff={},Gf={};\nfunction Hf(a){if(Gf.hasOwnProperty(a))return!0;if(Ff.hasOwnProperty(a))return!1;if(Ef.test(a))return Gf[a]=!0;Ff[a]=!0;return!1}\nfunction If(a,b,c){var d=wa(b);if(d&&va(b,c)){var e=d.mutationMethod;e?e(a,c):null==c||d.hasBooleanValue&&!c||d.hasNumericValue&&isNaN(c)||d.hasPositiveNumericValue&&1>c||d.hasOverloadedBooleanValue&&!1===c?Jf(a,b):d.mustUseProperty?a[d.propertyName]=c:(b=d.attributeName,(e=d.attributeNamespace)?a.setAttributeNS(e,b,\"\"+c):d.hasBooleanValue||d.hasOverloadedBooleanValue&&!0===c?a.setAttribute(b,\"\"):a.setAttribute(b,\"\"+c))}else Kf(a,b,va(b,c)?c:null)}\nfunction Kf(a,b,c){Hf(b)&&(null==c?a.removeAttribute(b):a.setAttribute(b,\"\"+c))}function Jf(a,b){var c=wa(b);c?(b=c.mutationMethod)?b(a,void 0):c.mustUseProperty?a[c.propertyName]=c.hasBooleanValue?!1:\"\":a.removeAttribute(c.attributeName):a.removeAttribute(b)}\nfunction Lf(a,b){var c=b.value,d=b.checked;return B({type:void 0,step:void 0,min:void 0,max:void 0},b,{defaultChecked:void 0,defaultValue:void 0,value:null!=c?c:a._wrapperState.initialValue,checked:null!=d?d:a._wrapperState.initialChecked})}function Mf(a,b){var c=b.defaultValue;a._wrapperState={initialChecked:null!=b.checked?b.checked:b.defaultChecked,initialValue:null!=b.value?b.value:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}\nfunction Nf(a,b){b=b.checked;null!=b&&If(a,\"checked\",b)}function Of(a,b){Nf(a,b);var c=b.value;if(null!=c)if(0===c&&\"\"===a.value)a.value=\"0\";else if(\"number\"===b.type){if(b=parseFloat(a.value)||0,c!=b||c==b&&a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else null==b.value&&null!=b.defaultValue&&a.defaultValue!==\"\"+b.defaultValue&&(a.defaultValue=\"\"+b.defaultValue),null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction Pf(a,b){switch(b.type){case \"submit\":case \"reset\":break;case \"color\":case \"date\":case \"datetime\":case \"datetime-local\":case \"month\":case \"time\":case \"week\":a.value=\"\";a.value=a.defaultValue;break;default:a.value=a.value}b=a.name;\"\"!==b&&(a.name=\"\");a.defaultChecked=!a.defaultChecked;a.defaultChecked=!a.defaultChecked;\"\"!==b&&(a.name=b)}function Qf(a){var b=\"\";aa.Children.forEach(a,function(a){null==a||\"string\"!==typeof a&&\"number\"!==typeof a||(b+=a)});return b}\nfunction Rf(a,b){a=B({children:void 0},b);if(b=Qf(b.children))a.children=b;return a}function Sf(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e<c.length;e++)b[\"$\"+c[e]]=!0;for(c=0;c<a.length;c++)e=b.hasOwnProperty(\"$\"+a[c].value),a[c].selected!==e&&(a[c].selected=e),e&&d&&(a[c].defaultSelected=!0)}else{c=\"\"+c;b=null;for(e=0;e<a.length;e++){if(a[e].value===c){a[e].selected=!0;d&&(a[e].defaultSelected=!0);return}null!==b||a[e].disabled||(b=a[e])}null!==b&&(b.selected=!0)}}\nfunction Tf(a,b){var c=b.value;a._wrapperState={initialValue:null!=c?c:b.defaultValue,wasMultiple:!!b.multiple}}function Uf(a,b){null!=b.dangerouslySetInnerHTML?E(\"91\"):void 0;return B({},b,{value:void 0,defaultValue:void 0,children:\"\"+a._wrapperState.initialValue})}function Vf(a,b){var c=b.value;null==c&&(c=b.defaultValue,b=b.children,null!=b&&(null!=c?E(\"92\"):void 0,Array.isArray(b)&&(1>=b.length?void 0:E(\"93\"),b=b[0]),c=\"\"+b),null==c&&(c=\"\"));a._wrapperState={initialValue:\"\"+c}}\nfunction Wf(a,b){var c=b.value;null!=c&&(c=\"\"+c,c!==a.value&&(a.value=c),null==b.defaultValue&&(a.defaultValue=c));null!=b.defaultValue&&(a.defaultValue=b.defaultValue)}function Xf(a){var b=a.textContent;b===a._wrapperState.initialValue&&(a.value=b)}var Yf={html:\"http://www.w3.org/1999/xhtml\",mathml:\"http://www.w3.org/1998/Math/MathML\",svg:\"http://www.w3.org/2000/svg\"};\nfunction Zf(a){switch(a){case \"svg\":return\"http://www.w3.org/2000/svg\";case \"math\":return\"http://www.w3.org/1998/Math/MathML\";default:return\"http://www.w3.org/1999/xhtml\"}}function $f(a,b){return null==a||\"http://www.w3.org/1999/xhtml\"===a?Zf(b):\"http://www.w3.org/2000/svg\"===a&&\"foreignObject\"===b?\"http://www.w3.org/1999/xhtml\":a}\nvar ag=void 0,bg=function(a){return\"undefined\"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(b,c,d,e){MSApp.execUnsafeLocalFunction(function(){return a(b,c,d,e)})}:a}(function(a,b){if(a.namespaceURI!==Yf.svg||\"innerHTML\"in a)a.innerHTML=b;else{ag=ag||document.createElement(\"div\");ag.innerHTML=\"\\x3csvg\\x3e\"+b+\"\\x3c/svg\\x3e\";for(b=ag.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction cg(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}\nvar dg={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,\nstopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},eg=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(dg).forEach(function(a){eg.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);dg[b]=dg[a]})});\nfunction fg(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\");var e=c;var f=b[c];e=null==f||\"boolean\"===typeof f||\"\"===f?\"\":d||\"number\"!==typeof f||0===f||dg.hasOwnProperty(e)&&dg[e]?(\"\"+f).trim():f+\"px\";\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var gg=B({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction hg(a,b,c){b&&(gg[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML?E(\"137\",a,c()):void 0),null!=b.dangerouslySetInnerHTML&&(null!=b.children?E(\"60\"):void 0,\"object\"===typeof b.dangerouslySetInnerHTML&&\"__html\"in b.dangerouslySetInnerHTML?void 0:E(\"61\")),null!=b.style&&\"object\"!==typeof b.style?E(\"62\",c()):void 0)}\nfunction ig(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}var jg=Yf.html,kg=C.thatReturns(\"\");\nfunction lg(a,b){a=9===a.nodeType||11===a.nodeType?a:a.ownerDocument;var c=Hd(a);b=Sa[b];for(var d=0;d<b.length;d++){var e=b[d];c.hasOwnProperty(e)&&c[e]||(\"topScroll\"===e?wd(\"topScroll\",\"scroll\",a):\"topFocus\"===e||\"topBlur\"===e?(wd(\"topFocus\",\"focus\",a),wd(\"topBlur\",\"blur\",a),c.topBlur=!0,c.topFocus=!0):\"topCancel\"===e?(yc(\"cancel\",!0)&&wd(\"topCancel\",\"cancel\",a),c.topCancel=!0):\"topClose\"===e?(yc(\"close\",!0)&&wd(\"topClose\",\"close\",a),c.topClose=!0):Dd.hasOwnProperty(e)&&U(e,Dd[e],a),c[e]=!0)}}\nvar mg={topAbort:\"abort\",topCanPlay:\"canplay\",topCanPlayThrough:\"canplaythrough\",topDurationChange:\"durationchange\",topEmptied:\"emptied\",topEncrypted:\"encrypted\",topEnded:\"ended\",topError:\"error\",topLoadedData:\"loadeddata\",topLoadedMetadata:\"loadedmetadata\",topLoadStart:\"loadstart\",topPause:\"pause\",topPlay:\"play\",topPlaying:\"playing\",topProgress:\"progress\",topRateChange:\"ratechange\",topSeeked:\"seeked\",topSeeking:\"seeking\",topStalled:\"stalled\",topSuspend:\"suspend\",topTimeUpdate:\"timeupdate\",topVolumeChange:\"volumechange\",\ntopWaiting:\"waiting\"};function ng(a,b,c,d){c=9===c.nodeType?c:c.ownerDocument;d===jg&&(d=Zf(a));d===jg?\"script\"===a?(a=c.createElement(\"div\"),a.innerHTML=\"\\x3cscript\\x3e\\x3c/script\\x3e\",a=a.removeChild(a.firstChild)):a=\"string\"===typeof b.is?c.createElement(a,{is:b.is}):c.createElement(a):a=c.createElementNS(d,a);return a}function og(a,b){return(9===b.nodeType?b:b.ownerDocument).createTextNode(a)}\nfunction pg(a,b,c,d){var e=ig(b,c);switch(b){case \"iframe\":case \"object\":U(\"topLoad\",\"load\",a);var f=c;break;case \"video\":case \"audio\":for(f in mg)mg.hasOwnProperty(f)&&U(f,mg[f],a);f=c;break;case \"source\":U(\"topError\",\"error\",a);f=c;break;case \"img\":case \"image\":U(\"topError\",\"error\",a);U(\"topLoad\",\"load\",a);f=c;break;case \"form\":U(\"topReset\",\"reset\",a);U(\"topSubmit\",\"submit\",a);f=c;break;case \"details\":U(\"topToggle\",\"toggle\",a);f=c;break;case \"input\":Mf(a,c);f=Lf(a,c);U(\"topInvalid\",\"invalid\",a);\nlg(d,\"onChange\");break;case \"option\":f=Rf(a,c);break;case \"select\":Tf(a,c);f=B({},c,{value:void 0});U(\"topInvalid\",\"invalid\",a);lg(d,\"onChange\");break;case \"textarea\":Vf(a,c);f=Uf(a,c);U(\"topInvalid\",\"invalid\",a);lg(d,\"onChange\");break;default:f=c}hg(b,f,kg);var g=f,h;for(h in g)if(g.hasOwnProperty(h)){var k=g[h];\"style\"===h?fg(a,k,kg):\"dangerouslySetInnerHTML\"===h?(k=k?k.__html:void 0,null!=k&&bg(a,k)):\"children\"===h?\"string\"===typeof k?(\"textarea\"!==b||\"\"!==k)&&cg(a,k):\"number\"===typeof k&&cg(a,\n\"\"+k):\"suppressContentEditableWarning\"!==h&&\"suppressHydrationWarning\"!==h&&\"autoFocus\"!==h&&(Ra.hasOwnProperty(h)?null!=k&&lg(d,h):e?Kf(a,h,k):null!=k&&If(a,h,k))}switch(b){case \"input\":Bc(a);Pf(a,c);break;case \"textarea\":Bc(a);Xf(a,c);break;case \"option\":null!=c.value&&a.setAttribute(\"value\",c.value);break;case \"select\":a.multiple=!!c.multiple;b=c.value;null!=b?Sf(a,!!c.multiple,b,!1):null!=c.defaultValue&&Sf(a,!!c.multiple,c.defaultValue,!0);break;default:\"function\"===typeof f.onClick&&(a.onclick=\nC)}}\nfunction sg(a,b,c,d,e){var f=null;switch(b){case \"input\":c=Lf(a,c);d=Lf(a,d);f=[];break;case \"option\":c=Rf(a,c);d=Rf(a,d);f=[];break;case \"select\":c=B({},c,{value:void 0});d=B({},d,{value:void 0});f=[];break;case \"textarea\":c=Uf(a,c);d=Uf(a,d);f=[];break;default:\"function\"!==typeof c.onClick&&\"function\"===typeof d.onClick&&(a.onclick=C)}hg(b,d,kg);var g,h;a=null;for(g in c)if(!d.hasOwnProperty(g)&&c.hasOwnProperty(g)&&null!=c[g])if(\"style\"===g)for(h in b=c[g],b)b.hasOwnProperty(h)&&(a||(a={}),a[h]=\n\"\");else\"dangerouslySetInnerHTML\"!==g&&\"children\"!==g&&\"suppressContentEditableWarning\"!==g&&\"suppressHydrationWarning\"!==g&&\"autoFocus\"!==g&&(Ra.hasOwnProperty(g)?f||(f=[]):(f=f||[]).push(g,null));for(g in d){var k=d[g];b=null!=c?c[g]:void 0;if(d.hasOwnProperty(g)&&k!==b&&(null!=k||null!=b))if(\"style\"===g)if(b){for(h in b)!b.hasOwnProperty(h)||k&&k.hasOwnProperty(h)||(a||(a={}),a[h]=\"\");for(h in k)k.hasOwnProperty(h)&&b[h]!==k[h]&&(a||(a={}),a[h]=k[h])}else a||(f||(f=[]),f.push(g,a)),a=k;else\"dangerouslySetInnerHTML\"===\ng?(k=k?k.__html:void 0,b=b?b.__html:void 0,null!=k&&b!==k&&(f=f||[]).push(g,\"\"+k)):\"children\"===g?b===k||\"string\"!==typeof k&&\"number\"!==typeof k||(f=f||[]).push(g,\"\"+k):\"suppressContentEditableWarning\"!==g&&\"suppressHydrationWarning\"!==g&&(Ra.hasOwnProperty(g)?(null!=k&&lg(e,g),f||b===k||(f=[])):(f=f||[]).push(g,k))}a&&(f=f||[]).push(\"style\",a);return f}\nfunction tg(a,b,c,d,e){\"input\"===c&&\"radio\"===e.type&&null!=e.name&&Nf(a,e);ig(c,d);d=ig(c,e);for(var f=0;f<b.length;f+=2){var g=b[f],h=b[f+1];\"style\"===g?fg(a,h,kg):\"dangerouslySetInnerHTML\"===g?bg(a,h):\"children\"===g?cg(a,h):d?null!=h?Kf(a,g,h):a.removeAttribute(g):null!=h?If(a,g,h):Jf(a,g)}switch(c){case \"input\":Of(a,e);break;case \"textarea\":Wf(a,e);break;case \"select\":a._wrapperState.initialValue=void 0,b=a._wrapperState.wasMultiple,a._wrapperState.wasMultiple=!!e.multiple,c=e.value,null!=c?Sf(a,\n!!e.multiple,c,!1):b!==!!e.multiple&&(null!=e.defaultValue?Sf(a,!!e.multiple,e.defaultValue,!0):Sf(a,!!e.multiple,e.multiple?[]:\"\",!1))}}\nfunction ug(a,b,c,d,e){switch(b){case \"iframe\":case \"object\":U(\"topLoad\",\"load\",a);break;case \"video\":case \"audio\":for(var f in mg)mg.hasOwnProperty(f)&&U(f,mg[f],a);break;case \"source\":U(\"topError\",\"error\",a);break;case \"img\":case \"image\":U(\"topError\",\"error\",a);U(\"topLoad\",\"load\",a);break;case \"form\":U(\"topReset\",\"reset\",a);U(\"topSubmit\",\"submit\",a);break;case \"details\":U(\"topToggle\",\"toggle\",a);break;case \"input\":Mf(a,c);U(\"topInvalid\",\"invalid\",a);lg(e,\"onChange\");break;case \"select\":Tf(a,c);\nU(\"topInvalid\",\"invalid\",a);lg(e,\"onChange\");break;case \"textarea\":Vf(a,c),U(\"topInvalid\",\"invalid\",a),lg(e,\"onChange\")}hg(b,c,kg);d=null;for(var g in c)c.hasOwnProperty(g)&&(f=c[g],\"children\"===g?\"string\"===typeof f?a.textContent!==f&&(d=[\"children\",f]):\"number\"===typeof f&&a.textContent!==\"\"+f&&(d=[\"children\",\"\"+f]):Ra.hasOwnProperty(g)&&null!=f&&lg(e,g));switch(b){case \"input\":Bc(a);Pf(a,c);break;case \"textarea\":Bc(a);Xf(a,c);break;case \"select\":case \"option\":break;default:\"function\"===typeof c.onClick&&\n(a.onclick=C)}return d}function vg(a,b){return a.nodeValue!==b}\nvar wg=Object.freeze({createElement:ng,createTextNode:og,setInitialProperties:pg,diffProperties:sg,updateProperties:tg,diffHydratedProperties:ug,diffHydratedText:vg,warnForUnmatchedText:function(){},warnForDeletedHydratableElement:function(){},warnForDeletedHydratableText:function(){},warnForInsertedHydratedElement:function(){},warnForInsertedHydratedText:function(){},restoreControlledState:function(a,b,c){switch(b){case \"input\":Of(a,c);b=c.name;if(\"radio\"===c.type&&null!=b){for(c=a;c.parentNode;)c=\nc.parentNode;c=c.querySelectorAll(\"input[name\\x3d\"+JSON.stringify(\"\"+b)+'][type\\x3d\"radio\"]');for(b=0;b<c.length;b++){var d=c[b];if(d!==a&&d.form===a.form){var e=rb(d);e?void 0:E(\"90\");Cc(d);Of(d,e)}}}break;case \"textarea\":Wf(a,c);break;case \"select\":b=c.value,null!=b&&Sf(a,!!c.multiple,b,!1)}}});nc.injectFiberControlledHostComponent(wg);var xg=null,Mg=null;function Ng(a){return!(!a||1!==a.nodeType&&9!==a.nodeType&&11!==a.nodeType&&(8!==a.nodeType||\" react-mount-point-unstable \"!==a.nodeValue))}\nfunction Og(a){a=a?9===a.nodeType?a.documentElement:a.firstChild:null;return!(!a||1!==a.nodeType||!a.hasAttribute(\"data-reactroot\"))}\nvar Z=of({getRootHostContext:function(a){var b=a.nodeType;switch(b){case 9:case 11:a=(a=a.documentElement)?a.namespaceURI:$f(null,\"\");break;default:b=8===b?a.parentNode:a,a=b.namespaceURI||null,b=b.tagName,a=$f(a,b)}return a},getChildHostContext:function(a,b){return $f(a,b)},getPublicInstance:function(a){return a},prepareForCommit:function(){xg=td;var a=da();if(Kd(a)){if(\"selectionStart\"in a)var b={start:a.selectionStart,end:a.selectionEnd};else a:{var c=window.getSelection&&window.getSelection();\nif(c&&0!==c.rangeCount){b=c.anchorNode;var d=c.anchorOffset,e=c.focusNode;c=c.focusOffset;try{b.nodeType,e.nodeType}catch(z){b=null;break a}var f=0,g=-1,h=-1,k=0,q=0,v=a,y=null;b:for(;;){for(var u;;){v!==b||0!==d&&3!==v.nodeType||(g=f+d);v!==e||0!==c&&3!==v.nodeType||(h=f+c);3===v.nodeType&&(f+=v.nodeValue.length);if(null===(u=v.firstChild))break;y=v;v=u}for(;;){if(v===a)break b;y===b&&++k===d&&(g=f);y===e&&++q===c&&(h=f);if(null!==(u=v.nextSibling))break;v=y;y=v.parentNode}v=u}b=-1===g||-1===h?null:\n{start:g,end:h}}else b=null}b=b||{start:0,end:0}}else b=null;Mg={focusedElem:a,selectionRange:b};ud(!1)},resetAfterCommit:function(){var a=Mg,b=da(),c=a.focusedElem,d=a.selectionRange;if(b!==c&&fa(document.documentElement,c)){if(Kd(c))if(b=d.start,a=d.end,void 0===a&&(a=b),\"selectionStart\"in c)c.selectionStart=b,c.selectionEnd=Math.min(a,c.value.length);else if(window.getSelection){b=window.getSelection();var e=c[Eb()].length;a=Math.min(d.start,e);d=void 0===d.end?a:Math.min(d.end,e);!b.extend&&a>\nd&&(e=d,d=a,a=e);e=Jd(c,a);var f=Jd(c,d);if(e&&f&&(1!==b.rangeCount||b.anchorNode!==e.node||b.anchorOffset!==e.offset||b.focusNode!==f.node||b.focusOffset!==f.offset)){var g=document.createRange();g.setStart(e.node,e.offset);b.removeAllRanges();a>d?(b.addRange(g),b.extend(f.node,f.offset)):(g.setEnd(f.node,f.offset),b.addRange(g))}}b=[];for(a=c;a=a.parentNode;)1===a.nodeType&&b.push({element:a,left:a.scrollLeft,top:a.scrollTop});ia(c);for(c=0;c<b.length;c++)a=b[c],a.element.scrollLeft=a.left,a.element.scrollTop=\na.top}Mg=null;ud(xg);xg=null},createInstance:function(a,b,c,d,e){a=ng(a,b,c,d);a[Q]=e;a[ob]=b;return a},appendInitialChild:function(a,b){a.appendChild(b)},finalizeInitialChildren:function(a,b,c,d){pg(a,b,c,d);a:{switch(b){case \"button\":case \"input\":case \"select\":case \"textarea\":a=!!c.autoFocus;break a}a=!1}return a},prepareUpdate:function(a,b,c,d,e){return sg(a,b,c,d,e)},shouldSetTextContent:function(a,b){return\"textarea\"===a||\"string\"===typeof b.children||\"number\"===typeof b.children||\"object\"===\ntypeof b.dangerouslySetInnerHTML&&null!==b.dangerouslySetInnerHTML&&\"string\"===typeof b.dangerouslySetInnerHTML.__html},shouldDeprioritizeSubtree:function(a,b){return!!b.hidden},createTextInstance:function(a,b,c,d){a=og(a,b);a[Q]=d;return a},now:rf,mutation:{commitMount:function(a){a.focus()},commitUpdate:function(a,b,c,d,e){a[ob]=e;tg(a,b,c,d,e)},resetTextContent:function(a){a.textContent=\"\"},commitTextUpdate:function(a,b,c){a.nodeValue=c},appendChild:function(a,b){a.appendChild(b)},appendChildToContainer:function(a,\nb){8===a.nodeType?a.parentNode.insertBefore(b,a):a.appendChild(b)},insertBefore:function(a,b,c){a.insertBefore(b,c)},insertInContainerBefore:function(a,b,c){8===a.nodeType?a.parentNode.insertBefore(b,c):a.insertBefore(b,c)},removeChild:function(a,b){a.removeChild(b)},removeChildFromContainer:function(a,b){8===a.nodeType?a.parentNode.removeChild(b):a.removeChild(b)}},hydration:{canHydrateInstance:function(a,b){return 1!==a.nodeType||b.toLowerCase()!==a.nodeName.toLowerCase()?null:a},canHydrateTextInstance:function(a,\nb){return\"\"===b||3!==a.nodeType?null:a},getNextHydratableSibling:function(a){for(a=a.nextSibling;a&&1!==a.nodeType&&3!==a.nodeType;)a=a.nextSibling;return a},getFirstHydratableChild:function(a){for(a=a.firstChild;a&&1!==a.nodeType&&3!==a.nodeType;)a=a.nextSibling;return a},hydrateInstance:function(a,b,c,d,e,f){a[Q]=f;a[ob]=c;return ug(a,b,c,e,d)},hydrateTextInstance:function(a,b,c){a[Q]=c;return vg(a,b)},didNotMatchHydratedContainerTextInstance:function(){},didNotMatchHydratedTextInstance:function(){},\ndidNotHydrateContainerInstance:function(){},didNotHydrateInstance:function(){},didNotFindHydratableContainerInstance:function(){},didNotFindHydratableContainerTextInstance:function(){},didNotFindHydratableInstance:function(){},didNotFindHydratableTextInstance:function(){}},scheduleDeferredCallback:sf,cancelDeferredCallback:tf,useSyncScheduling:!0});rc=Z.batchedUpdates;\nfunction Pg(a,b,c,d,e){Ng(c)?void 0:E(\"200\");var f=c._reactRootContainer;if(f)Z.updateContainer(b,f,a,e);else{d=d||Og(c);if(!d)for(f=void 0;f=c.lastChild;)c.removeChild(f);var g=Z.createContainer(c,d);f=c._reactRootContainer=g;Z.unbatchedUpdates(function(){Z.updateContainer(b,g,a,e)})}return Z.getPublicRootInstance(f)}function Qg(a,b){var c=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;Ng(b)?void 0:E(\"200\");return pf(a,b,null,c)}\nfunction Rg(a,b){this._reactRootContainer=Z.createContainer(a,b)}Rg.prototype.render=function(a,b){Z.updateContainer(a,this._reactRootContainer,null,b)};Rg.prototype.unmount=function(a){Z.updateContainer(null,this._reactRootContainer,null,a)};\nvar Sg={createPortal:Qg,findDOMNode:function(a){if(null==a)return null;if(1===a.nodeType)return a;var b=a._reactInternalFiber;if(b)return Z.findHostInstance(b);\"function\"===typeof a.render?E(\"188\"):E(\"213\",Object.keys(a))},hydrate:function(a,b,c){return Pg(null,a,b,!0,c)},render:function(a,b,c){return Pg(null,a,b,!1,c)},unstable_renderSubtreeIntoContainer:function(a,b,c,d){null==a||void 0===a._reactInternalFiber?E(\"38\"):void 0;return Pg(a,b,c,!1,d)},unmountComponentAtNode:function(a){Ng(a)?void 0:\nE(\"40\");return a._reactRootContainer?(Z.unbatchedUpdates(function(){Pg(null,null,a,!1,function(){a._reactRootContainer=null})}),!0):!1},unstable_createPortal:Qg,unstable_batchedUpdates:tc,unstable_deferredUpdates:Z.deferredUpdates,flushSync:Z.flushSync,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:{EventPluginHub:mb,EventPluginRegistry:Va,EventPropagators:Cb,ReactControlledComponent:qc,ReactDOMComponentTree:sb,ReactDOMEventListener:xd}};\nZ.injectIntoDevTools({findFiberByHostInstance:pb,bundleType:0,version:\"16.2.0\",rendererPackageName:\"react-dom\"});var Tg=Object.freeze({default:Sg}),Ug=Tg&&Sg||Tg;module.exports=Ug[\"default\"]?Ug[\"default\"]:Ug;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-dom/cjs/react-dom.production.min.js\n// module id = 15\n// module chunks = 0","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n'use strict';\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n\n/**\n * Simple, lightweight module assisting with the detection and context of\n * Worker. Helps avoid circular dependencies and allows code to reason about\n * whether or not they are in a Worker, even if they never include the main\n * `ReactWorker` dependency.\n */\nvar ExecutionEnvironment = {\n\n canUseDOM: canUseDOM,\n\n canUseWorkers: typeof Worker !== 'undefined',\n\n canUseEventListeners: canUseDOM && !!(window.addEventListener || window.attachEvent),\n\n canUseViewport: canUseDOM && !!window.screen,\n\n isInWorker: !canUseDOM // For now, this is true - might change in the future.\n\n};\n\nmodule.exports = ExecutionEnvironment;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/fbjs/lib/ExecutionEnvironment.js\n// module id = 16\n// module chunks = 0","'use strict';\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @typechecks\n */\n\nvar emptyFunction = require('./emptyFunction');\n\n/**\n * Upstream version of event listener. Does not take into account specific\n * nature of platform.\n */\nvar EventListener = {\n /**\n * Listen to DOM events during the bubble phase.\n *\n * @param {DOMEventTarget} target DOM element to register listener on.\n * @param {string} eventType Event type, e.g. 'click' or 'mouseover'.\n * @param {function} callback Callback function.\n * @return {object} Object with a `remove` method.\n */\n listen: function listen(target, eventType, callback) {\n if (target.addEventListener) {\n target.addEventListener(eventType, callback, false);\n return {\n remove: function remove() {\n target.removeEventListener(eventType, callback, false);\n }\n };\n } else if (target.attachEvent) {\n target.attachEvent('on' + eventType, callback);\n return {\n remove: function remove() {\n target.detachEvent('on' + eventType, callback);\n }\n };\n }\n },\n\n /**\n * Listen to DOM events during the capture phase.\n *\n * @param {DOMEventTarget} target DOM element to register listener on.\n * @param {string} eventType Event type, e.g. 'click' or 'mouseover'.\n * @param {function} callback Callback function.\n * @return {object} Object with a `remove` method.\n */\n capture: function capture(target, eventType, callback) {\n if (target.addEventListener) {\n target.addEventListener(eventType, callback, true);\n return {\n remove: function remove() {\n target.removeEventListener(eventType, callback, true);\n }\n };\n } else {\n if (process.env.NODE_ENV !== 'production') {\n console.error('Attempted to listen to events during the capture phase on a ' + 'browser that does not support the capture phase. Your application ' + 'will not receive some events.');\n }\n return {\n remove: emptyFunction\n };\n }\n },\n\n registerDefault: function registerDefault() {}\n};\n\nmodule.exports = EventListener;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/fbjs/lib/EventListener.js\n// module id = 17\n// module chunks = 0","'use strict';\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @typechecks\n */\n\n/* eslint-disable fb-www/typeof-undefined */\n\n/**\n * Same as document.activeElement but wraps in a try-catch block. In IE it is\n * not safe to call document.activeElement if there is nothing focused.\n *\n * The activeElement will be null only if the document or document body is not\n * yet defined.\n *\n * @param {?DOMDocument} doc Defaults to current document.\n * @return {?DOMElement}\n */\nfunction getActiveElement(doc) /*?DOMElement*/{\n doc = doc || (typeof document !== 'undefined' ? document : undefined);\n if (typeof doc === 'undefined') {\n return null;\n }\n try {\n return doc.activeElement || doc.body;\n } catch (e) {\n return doc.body;\n }\n}\n\nmodule.exports = getActiveElement;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/fbjs/lib/getActiveElement.js\n// module id = 18\n// module chunks = 0","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @typechecks\n * \n */\n\n/*eslint-disable no-self-compare */\n\n'use strict';\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\nfunction is(x, y) {\n // SameValue algorithm\n if (x === y) {\n // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n // Added the nonzero y check to make Flow happy, but it is redundant\n return x !== 0 || y !== 0 || 1 / x === 1 / y;\n } else {\n // Step 6.a: NaN == NaN\n return x !== x && y !== y;\n }\n}\n\n/**\n * Performs equality by iterating through keys on an object and returning false\n * when any key has values which are not strictly equal between the arguments.\n * Returns true when the values of all keys are strictly equal.\n */\nfunction shallowEqual(objA, objB) {\n if (is(objA, objB)) {\n return true;\n }\n\n if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {\n return false;\n }\n\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n\n if (keysA.length !== keysB.length) {\n return false;\n }\n\n // Test for A's keys different from B.\n for (var i = 0; i < keysA.length; i++) {\n if (!hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n return false;\n }\n }\n\n return true;\n}\n\nmodule.exports = shallowEqual;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/fbjs/lib/shallowEqual.js\n// module id = 19\n// module chunks = 0","'use strict';\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar isTextNode = require('./isTextNode');\n\n/*eslint-disable no-bitwise */\n\n/**\n * Checks if a given DOM node contains or is another DOM node.\n */\nfunction containsNode(outerNode, innerNode) {\n if (!outerNode || !innerNode) {\n return false;\n } else if (outerNode === innerNode) {\n return true;\n } else if (isTextNode(outerNode)) {\n return false;\n } else if (isTextNode(innerNode)) {\n return containsNode(outerNode, innerNode.parentNode);\n } else if ('contains' in outerNode) {\n return outerNode.contains(innerNode);\n } else if (outerNode.compareDocumentPosition) {\n return !!(outerNode.compareDocumentPosition(innerNode) & 16);\n } else {\n return false;\n }\n}\n\nmodule.exports = containsNode;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/fbjs/lib/containsNode.js\n// module id = 20\n// module chunks = 0","'use strict';\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @typechecks\n */\n\nvar isNode = require('./isNode');\n\n/**\n * @param {*} object The object to check.\n * @return {boolean} Whether or not the object is a DOM text node.\n */\nfunction isTextNode(object) {\n return isNode(object) && object.nodeType == 3;\n}\n\nmodule.exports = isTextNode;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/fbjs/lib/isTextNode.js\n// module id = 21\n// module chunks = 0","'use strict';\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @typechecks\n */\n\n/**\n * @param {*} object The object to check.\n * @return {boolean} Whether or not the object is a DOM node.\n */\nfunction isNode(object) {\n var doc = object ? object.ownerDocument || object : document;\n var defaultView = doc.defaultView || window;\n return !!(object && (typeof defaultView.Node === 'function' ? object instanceof defaultView.Node : typeof object === 'object' && typeof object.nodeType === 'number' && typeof object.nodeName === 'string'));\n}\n\nmodule.exports = isNode;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/fbjs/lib/isNode.js\n// module id = 22\n// module chunks = 0","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n'use strict';\n\n/**\n * @param {DOMElement} node input/textarea to focus\n */\n\nfunction focusNode(node) {\n // IE8 can throw \"Can't move focus to the control because it is invisible,\n // not enabled, or of a type that does not accept the focus.\" for all kinds of\n // reasons that are too expensive and fragile to test.\n try {\n node.focus();\n } catch (e) {}\n}\n\nmodule.exports = focusNode;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/fbjs/lib/focusNode.js\n// module id = 23\n// module chunks = 0","import React, { Component } from 'react';\nimport { stepInTest, debugStatement } from './step-in-test.js';\nimport stepOverTest from './step-over-test.js';\nimport stepOutTest from './step-out-test.js';\n\nclass App extends Component {\n render() {\n return (\n <div className=\"App\">\n <header className=\"App-header\">\n <h1 className=\"App-title\">Welcome to React</h1>\n </header>\n <p className=\"App-intro\">\n To get started, edit <code>src/App.js</code> and save to reload.\n </p>\n </div>\n );\n }\n}\n\nwindow.hitBreakpoint = function breakpoint() {\n stepInTest();\n stepOverTest();\n stepOutTest();\n console.log('hitting a breakpoint');\n return;\n}\n\nwindow.hitDebugStatement = function() {\n debugStatement();\n console.log('hitting a debug statement');\n return;\n}\n\nexport default App;\n\n\n\n// WEBPACK FOOTER //\n// ./src/App.js","// depth: 3, width: 12\n// 2586 functions, 182225 characters generated\n\nfunction f0_0_0_0(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_0_0_1(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_0_0_2(){\n return Math.random()\n}\n\nfunction f0_0_0_3(){\n return Math.random()\n}\n\nfunction f0_0_0_4(){\n return isNaN(undefined)\n}\n\nfunction f0_0_0_5(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_0_0_6(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_0_0_7(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_0_0_8(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_0_0_9(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_0_0_10(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_0_0_11(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_0_0(){\n f0_0_0_0();\n f0_0_0_1();\n f0_0_0_2();\n f0_0_0_3();\n f0_0_0_4();\n f0_0_0_5();\n f0_0_0_6();\n f0_0_0_7();\n f0_0_0_8();\n f0_0_0_9();\n f0_0_0_10();\n f0_0_0_11();\n\n}\n\nfunction f0_0_1_0(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_0_1_1(){\n return Math.random()\n}\n\nfunction f0_0_1_2(){\n return Math.random()\n}\n\nfunction f0_0_1_3(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_0_1_4(){\n return Math.random()\n}\n\nfunction f0_0_1_5(){\n return isNaN(undefined)\n}\n\nfunction f0_0_1_6(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_0_1_7(){\n return isNaN(undefined)\n}\n\nfunction f0_0_1_8(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_0_1_9(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_0_1_10(){\n return Math.random()\n}\n\nfunction f0_0_1_11(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_0_1(){\n f0_0_1_0();\n f0_0_1_1();\n f0_0_1_2();\n f0_0_1_3();\n f0_0_1_4();\n f0_0_1_5();\n f0_0_1_6();\n f0_0_1_7();\n f0_0_1_8();\n f0_0_1_9();\n f0_0_1_10();\n f0_0_1_11();\n\n}\n\nfunction f0_0_2_0(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_0_2_1(){\n return isNaN(undefined)\n}\n\nfunction f0_0_2_2(){\n return isNaN(undefined)\n}\n\nfunction f0_0_2_3(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_0_2_4(){\n return Math.random()\n}\n\nfunction f0_0_2_5(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_0_2_6(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_0_2_7(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_0_2_8(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_0_2_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_0_2_10(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_0_2_11(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_0_2(){\n f0_0_2_0();\n f0_0_2_1();\n f0_0_2_2();\n f0_0_2_3();\n f0_0_2_4();\n f0_0_2_5();\n f0_0_2_6();\n f0_0_2_7();\n f0_0_2_8();\n f0_0_2_9();\n f0_0_2_10();\n f0_0_2_11();\n\n}\n\nfunction f0_0_3_0(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_0_3_1(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_0_3_2(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_0_3_3(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_0_3_4(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_0_3_5(){\n return isNaN(undefined)\n}\n\nfunction f0_0_3_6(){\n return isNaN(undefined)\n}\n\nfunction f0_0_3_7(){\n return isNaN(undefined)\n}\n\nfunction f0_0_3_8(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_0_3_9(){\n return Math.random()\n}\n\nfunction f0_0_3_10(){\n return isNaN(undefined)\n}\n\nfunction f0_0_3_11(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_0_3(){\n f0_0_3_0();\n f0_0_3_1();\n f0_0_3_2();\n f0_0_3_3();\n f0_0_3_4();\n f0_0_3_5();\n f0_0_3_6();\n f0_0_3_7();\n f0_0_3_8();\n f0_0_3_9();\n f0_0_3_10();\n f0_0_3_11();\n\n}\n\nfunction f0_0_4_0(){\n return isNaN(undefined)\n}\n\nfunction f0_0_4_1(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_0_4_2(){\n return Math.random()\n}\n\nfunction f0_0_4_3(){\n return isNaN(undefined)\n}\n\nfunction f0_0_4_4(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_0_4_5(){\n return isNaN(undefined)\n}\n\nfunction f0_0_4_6(){\n return isNaN(undefined)\n}\n\nfunction f0_0_4_7(){\n return isNaN(undefined)\n}\n\nfunction f0_0_4_8(){\n return isNaN(undefined)\n}\n\nfunction f0_0_4_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_0_4_10(){\n return Math.random()\n}\n\nfunction f0_0_4_11(){\n return isNaN(undefined)\n}\n\nfunction f0_0_4(){\n f0_0_4_0();\n f0_0_4_1();\n f0_0_4_2();\n f0_0_4_3();\n f0_0_4_4();\n f0_0_4_5();\n f0_0_4_6();\n f0_0_4_7();\n f0_0_4_8();\n f0_0_4_9();\n f0_0_4_10();\n f0_0_4_11();\n\n}\n\nfunction f0_0_5_0(){\n return Math.random()\n}\n\nfunction f0_0_5_1(){\n return Math.random()\n}\n\nfunction f0_0_5_2(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_0_5_3(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_0_5_4(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_0_5_5(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_0_5_6(){\n return Math.random()\n}\n\nfunction f0_0_5_7(){\n return isNaN(undefined)\n}\n\nfunction f0_0_5_8(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_0_5_9(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_0_5_10(){\n return isNaN(undefined)\n}\n\nfunction f0_0_5_11(){\n return Math.random()\n}\n\nfunction f0_0_5(){\n f0_0_5_0();\n f0_0_5_1();\n f0_0_5_2();\n f0_0_5_3();\n f0_0_5_4();\n f0_0_5_5();\n f0_0_5_6();\n f0_0_5_7();\n f0_0_5_8();\n f0_0_5_9();\n f0_0_5_10();\n f0_0_5_11();\n\n}\n\nfunction f0_0_6_0(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_0_6_1(){\n return Math.random()\n}\n\nfunction f0_0_6_2(){\n return isNaN(undefined)\n}\n\nfunction f0_0_6_3(){\n return isNaN(undefined)\n}\n\nfunction f0_0_6_4(){\n return isNaN(undefined)\n}\n\nfunction f0_0_6_5(){\n return Math.random()\n}\n\nfunction f0_0_6_6(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_0_6_7(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_0_6_8(){\n return Math.random()\n}\n\nfunction f0_0_6_9(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_0_6_10(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_0_6_11(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_0_6(){\n f0_0_6_0();\n f0_0_6_1();\n f0_0_6_2();\n f0_0_6_3();\n f0_0_6_4();\n f0_0_6_5();\n f0_0_6_6();\n f0_0_6_7();\n f0_0_6_8();\n f0_0_6_9();\n f0_0_6_10();\n f0_0_6_11();\n\n}\n\nfunction f0_0_7_0(){\n return isNaN(undefined)\n}\n\nfunction f0_0_7_1(){\n return Math.random()\n}\n\nfunction f0_0_7_2(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_0_7_3(){\n return Math.random()\n}\n\nfunction f0_0_7_4(){\n return Math.random()\n}\n\nfunction f0_0_7_5(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_0_7_6(){\n return Math.random()\n}\n\nfunction f0_0_7_7(){\n return Math.random()\n}\n\nfunction f0_0_7_8(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_0_7_9(){\n return isNaN(undefined)\n}\n\nfunction f0_0_7_10(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_0_7_11(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_0_7(){\n f0_0_7_0();\n f0_0_7_1();\n f0_0_7_2();\n f0_0_7_3();\n f0_0_7_4();\n f0_0_7_5();\n f0_0_7_6();\n f0_0_7_7();\n f0_0_7_8();\n f0_0_7_9();\n f0_0_7_10();\n f0_0_7_11();\n\n}\n\nfunction f0_0_8_0(){\n return Math.random()\n}\n\nfunction f0_0_8_1(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_0_8_2(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_0_8_3(){\n return Math.random()\n}\n\nfunction f0_0_8_4(){\n return isNaN(undefined)\n}\n\nfunction f0_0_8_5(){\n return Math.random()\n}\n\nfunction f0_0_8_6(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_0_8_7(){\n return Math.random()\n}\n\nfunction f0_0_8_8(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_0_8_9(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_0_8_10(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_0_8_11(){\n return Math.random()\n}\n\nfunction f0_0_8(){\n f0_0_8_0();\n f0_0_8_1();\n f0_0_8_2();\n f0_0_8_3();\n f0_0_8_4();\n f0_0_8_5();\n f0_0_8_6();\n f0_0_8_7();\n f0_0_8_8();\n f0_0_8_9();\n f0_0_8_10();\n f0_0_8_11();\n\n}\n\nfunction f0_0_9_0(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_0_9_1(){\n return Math.random()\n}\n\nfunction f0_0_9_2(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_0_9_3(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_0_9_4(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_0_9_5(){\n return isNaN(undefined)\n}\n\nfunction f0_0_9_6(){\n return Math.random()\n}\n\nfunction f0_0_9_7(){\n return Math.random()\n}\n\nfunction f0_0_9_8(){\n return Math.random()\n}\n\nfunction f0_0_9_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_0_9_10(){\n return Math.random()\n}\n\nfunction f0_0_9_11(){\n return Math.random()\n}\n\nfunction f0_0_9(){\n f0_0_9_0();\n f0_0_9_1();\n f0_0_9_2();\n f0_0_9_3();\n f0_0_9_4();\n f0_0_9_5();\n f0_0_9_6();\n f0_0_9_7();\n f0_0_9_8();\n f0_0_9_9();\n f0_0_9_10();\n f0_0_9_11();\n\n}\n\nfunction f0_0_10_0(){\n return Math.random()\n}\n\nfunction f0_0_10_1(){\n return isNaN(undefined)\n}\n\nfunction f0_0_10_2(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_0_10_3(){\n return Math.random()\n}\n\nfunction f0_0_10_4(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_0_10_5(){\n return isNaN(undefined)\n}\n\nfunction f0_0_10_6(){\n return Math.random()\n}\n\nfunction f0_0_10_7(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_0_10_8(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_0_10_9(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_0_10_10(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_0_10_11(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_0_10(){\n f0_0_10_0();\n f0_0_10_1();\n f0_0_10_2();\n f0_0_10_3();\n f0_0_10_4();\n f0_0_10_5();\n f0_0_10_6();\n f0_0_10_7();\n f0_0_10_8();\n f0_0_10_9();\n f0_0_10_10();\n f0_0_10_11();\n\n}\n\nfunction f0_0_11_0(){\n return Math.random()\n}\n\nfunction f0_0_11_1(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_0_11_2(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_0_11_3(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_0_11_4(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_0_11_5(){\n return isNaN(undefined)\n}\n\nfunction f0_0_11_6(){\n return isNaN(undefined)\n}\n\nfunction f0_0_11_7(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_0_11_8(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_0_11_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_0_11_10(){\n return Math.random()\n}\n\nfunction f0_0_11_11(){\n return Math.random()\n}\n\nfunction f0_0_11(){\n f0_0_11_0();\n f0_0_11_1();\n f0_0_11_2();\n f0_0_11_3();\n f0_0_11_4();\n f0_0_11_5();\n f0_0_11_6();\n f0_0_11_7();\n f0_0_11_8();\n f0_0_11_9();\n f0_0_11_10();\n f0_0_11_11();\n\n}\n\nfunction f0_0(){\n f0_0_0();\n f0_0_1();\n f0_0_2();\n f0_0_3();\n f0_0_4();\n f0_0_5();\n f0_0_6();\n f0_0_7();\n f0_0_8();\n f0_0_9();\n f0_0_10();\n f0_0_11();\n\n}\n\nfunction f0_1_0_0(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_1_0_1(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_1_0_2(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_1_0_3(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_1_0_4(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_1_0_5(){\n return Math.random()\n}\n\nfunction f0_1_0_6(){\n return isNaN(undefined)\n}\n\nfunction f0_1_0_7(){\n return Math.random()\n}\n\nfunction f0_1_0_8(){\n return isNaN(undefined)\n}\n\nfunction f0_1_0_9(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_1_0_10(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_1_0_11(){\n return Math.random()\n}\n\nfunction f0_1_0(){\n f0_1_0_0();\n f0_1_0_1();\n f0_1_0_2();\n f0_1_0_3();\n f0_1_0_4();\n f0_1_0_5();\n f0_1_0_6();\n f0_1_0_7();\n f0_1_0_8();\n f0_1_0_9();\n f0_1_0_10();\n f0_1_0_11();\n\n}\n\nfunction f0_1_1_0(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_1_1_1(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_1_1_2(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_1_1_3(){\n return isNaN(undefined)\n}\n\nfunction f0_1_1_4(){\n return Math.random()\n}\n\nfunction f0_1_1_5(){\n return isNaN(undefined)\n}\n\nfunction f0_1_1_6(){\n return isNaN(undefined)\n}\n\nfunction f0_1_1_7(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_1_1_8(){\n return Math.random()\n}\n\nfunction f0_1_1_9(){\n return Math.random()\n}\n\nfunction f0_1_1_10(){\n return Math.random()\n}\n\nfunction f0_1_1_11(){\n return Math.random()\n}\n\nfunction f0_1_1(){\n f0_1_1_0();\n f0_1_1_1();\n f0_1_1_2();\n f0_1_1_3();\n f0_1_1_4();\n f0_1_1_5();\n f0_1_1_6();\n f0_1_1_7();\n f0_1_1_8();\n f0_1_1_9();\n f0_1_1_10();\n f0_1_1_11();\n\n}\n\nfunction f0_1_2_0(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_1_2_1(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_1_2_2(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_1_2_3(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_1_2_4(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_1_2_5(){\n return Math.random()\n}\n\nfunction f0_1_2_6(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_1_2_7(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_1_2_8(){\n return isNaN(undefined)\n}\n\nfunction f0_1_2_9(){\n return Math.random()\n}\n\nfunction f0_1_2_10(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_1_2_11(){\n return Math.random()\n}\n\nfunction f0_1_2(){\n f0_1_2_0();\n f0_1_2_1();\n f0_1_2_2();\n f0_1_2_3();\n f0_1_2_4();\n f0_1_2_5();\n f0_1_2_6();\n f0_1_2_7();\n f0_1_2_8();\n f0_1_2_9();\n f0_1_2_10();\n f0_1_2_11();\n\n}\n\nfunction f0_1_3_0(){\n return isNaN(undefined)\n}\n\nfunction f0_1_3_1(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_1_3_2(){\n return isNaN(undefined)\n}\n\nfunction f0_1_3_3(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_1_3_4(){\n return isNaN(undefined)\n}\n\nfunction f0_1_3_5(){\n return Math.random()\n}\n\nfunction f0_1_3_6(){\n return Math.random()\n}\n\nfunction f0_1_3_7(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_1_3_8(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_1_3_9(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_1_3_10(){\n return Math.random()\n}\n\nfunction f0_1_3_11(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_1_3(){\n f0_1_3_0();\n f0_1_3_1();\n f0_1_3_2();\n f0_1_3_3();\n f0_1_3_4();\n f0_1_3_5();\n f0_1_3_6();\n f0_1_3_7();\n f0_1_3_8();\n f0_1_3_9();\n f0_1_3_10();\n f0_1_3_11();\n\n}\n\nfunction f0_1_4_0(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_1_4_1(){\n return isNaN(undefined)\n}\n\nfunction f0_1_4_2(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_1_4_3(){\n return isNaN(undefined)\n}\n\nfunction f0_1_4_4(){\n return isNaN(undefined)\n}\n\nfunction f0_1_4_5(){\n return isNaN(undefined)\n}\n\nfunction f0_1_4_6(){\n return isNaN(undefined)\n}\n\nfunction f0_1_4_7(){\n return Math.random()\n}\n\nfunction f0_1_4_8(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_1_4_9(){\n return isNaN(undefined)\n}\n\nfunction f0_1_4_10(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_1_4_11(){\n return Math.random()\n}\n\nfunction f0_1_4(){\n f0_1_4_0();\n f0_1_4_1();\n f0_1_4_2();\n f0_1_4_3();\n f0_1_4_4();\n f0_1_4_5();\n f0_1_4_6();\n f0_1_4_7();\n f0_1_4_8();\n f0_1_4_9();\n f0_1_4_10();\n f0_1_4_11();\n\n}\n\nfunction f0_1_5_0(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_1_5_1(){\n return isNaN(undefined)\n}\n\nfunction f0_1_5_2(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_1_5_3(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_1_5_4(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_1_5_5(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_1_5_6(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_1_5_7(){\n return isNaN(undefined)\n}\n\nfunction f0_1_5_8(){\n return isNaN(undefined)\n}\n\nfunction f0_1_5_9(){\n return Math.random()\n}\n\nfunction f0_1_5_10(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_1_5_11(){\n return isNaN(undefined)\n}\n\nfunction f0_1_5(){\n f0_1_5_0();\n f0_1_5_1();\n f0_1_5_2();\n f0_1_5_3();\n f0_1_5_4();\n f0_1_5_5();\n f0_1_5_6();\n f0_1_5_7();\n f0_1_5_8();\n f0_1_5_9();\n f0_1_5_10();\n f0_1_5_11();\n\n}\n\nfunction f0_1_6_0(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_1_6_1(){\n return isNaN(undefined)\n}\n\nfunction f0_1_6_2(){\n return isNaN(undefined)\n}\n\nfunction f0_1_6_3(){\n return isNaN(undefined)\n}\n\nfunction f0_1_6_4(){\n return isNaN(undefined)\n}\n\nfunction f0_1_6_5(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_1_6_6(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_1_6_7(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_1_6_8(){\n return isNaN(undefined)\n}\n\nfunction f0_1_6_9(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_1_6_10(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_1_6_11(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_1_6(){\n f0_1_6_0();\n f0_1_6_1();\n f0_1_6_2();\n f0_1_6_3();\n f0_1_6_4();\n f0_1_6_5();\n f0_1_6_6();\n f0_1_6_7();\n f0_1_6_8();\n f0_1_6_9();\n f0_1_6_10();\n f0_1_6_11();\n\n}\n\nfunction f0_1_7_0(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_1_7_1(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_1_7_2(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_1_7_3(){\n return Math.random()\n}\n\nfunction f0_1_7_4(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_1_7_5(){\n return isNaN(undefined)\n}\n\nfunction f0_1_7_6(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_1_7_7(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_1_7_8(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_1_7_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_1_7_10(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_1_7_11(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_1_7(){\n f0_1_7_0();\n f0_1_7_1();\n f0_1_7_2();\n f0_1_7_3();\n f0_1_7_4();\n f0_1_7_5();\n f0_1_7_6();\n f0_1_7_7();\n f0_1_7_8();\n f0_1_7_9();\n f0_1_7_10();\n f0_1_7_11();\n\n}\nfunction f0_1_8_0(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_1_8_1(){\n return isNaN(undefined)\n}\n\nfunction f0_1_8_2(){\n return Math.random()\n}\n\nfunction f0_1_8_3(){\n return isNaN(undefined)\n}\n\nfunction f0_1_8_4(){\n return isNaN(undefined)\n}\n\nfunction f0_1_8_5(){\n return isNaN(undefined)\n}\n\nfunction f0_1_8_6(){\n return isNaN(undefined)\n}\n\nfunction f0_1_8_7(){\n return Math.random()\n}\n\nfunction f0_1_8_8(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_1_8_9(){\n return isNaN(undefined)\n}\n\nfunction f0_1_8_10(){\n return isNaN(undefined)\n}\n\nfunction f0_1_8_11(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_1_8(){\n f0_1_8_0();\n f0_1_8_1();\n f0_1_8_2();\n f0_1_8_3();\n f0_1_8_4();\n f0_1_8_5();\n f0_1_8_6();\n f0_1_8_7();\n f0_1_8_8();\n f0_1_8_9();\n f0_1_8_10();\n f0_1_8_11();\n\n}\n\nfunction f0_1_9_0(){\n return isNaN(undefined)\n}\n\nfunction f0_1_9_1(){\n return isNaN(undefined)\n}\n\nfunction f0_1_9_2(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_1_9_3(){\n return isNaN(undefined)\n}\n\nfunction f0_1_9_4(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_1_9_5(){\n return isNaN(undefined)\n}\n\nfunction f0_1_9_6(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_1_9_7(){\n return Math.random()\n}\n\nfunction f0_1_9_8(){\n return isNaN(undefined)\n}\n\nfunction f0_1_9_9(){\n return Math.random()\n}\n\nfunction f0_1_9_10(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_1_9_11(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_1_9(){\n f0_1_9_0();\n f0_1_9_1();\n f0_1_9_2();\n f0_1_9_3();\n f0_1_9_4();\n f0_1_9_5();\n f0_1_9_6();\n f0_1_9_7();\n f0_1_9_8();\n f0_1_9_9();\n f0_1_9_10();\n f0_1_9_11();\n\n}\n\nfunction f0_1_10_0(){\n return isNaN(undefined)\n}\n\nfunction f0_1_10_1(){\n return isNaN(undefined)\n}\n\nfunction f0_1_10_2(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_1_10_3(){\n return Math.random()\n}\n\nfunction f0_1_10_4(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_1_10_5(){\n return Math.random()\n}\n\nfunction f0_1_10_6(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_1_10_7(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_1_10_8(){\n return isNaN(undefined)\n}\n\nfunction f0_1_10_9(){\n return isNaN(undefined)\n}\n\nfunction f0_1_10_10(){\n return isNaN(undefined)\n}\n\nfunction f0_1_10_11(){\n return isNaN(undefined)\n}\n\nfunction f0_1_10(){\n f0_1_10_0();\n f0_1_10_1();\n f0_1_10_2();\n f0_1_10_3();\n f0_1_10_4();\n f0_1_10_5();\n f0_1_10_6();\n f0_1_10_7();\n f0_1_10_8();\n f0_1_10_9();\n f0_1_10_10();\n f0_1_10_11();\n\n}\n\nfunction f0_1_11_0(){\n return Math.random()\n}\n\nfunction f0_1_11_1(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_1_11_2(){\n return Math.random()\n}\n\nfunction f0_1_11_3(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_1_11_4(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_1_11_5(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_1_11_6(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_1_11_7(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_1_11_8(){\n return Math.random()\n}\n\nfunction f0_1_11_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_1_11_10(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_1_11_11(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_1_11(){\n f0_1_11_0();\n f0_1_11_1();\n f0_1_11_2();\n f0_1_11_3();\n f0_1_11_4();\n f0_1_11_5();\n f0_1_11_6();\n f0_1_11_7();\n f0_1_11_8();\n f0_1_11_9();\n f0_1_11_10();\n f0_1_11_11();\n\n}\n\nfunction f0_1(){\n f0_1_0();\n f0_1_1();\n f0_1_2();\n f0_1_3();\n f0_1_4();\n f0_1_5();\n f0_1_6();\n f0_1_7();\n f0_1_8();\n f0_1_9();\n f0_1_10();\n f0_1_11();\n\n}\n\nfunction f0_2_0_0(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_2_0_1(){\n return Math.random()\n}\n\nfunction f0_2_0_2(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_2_0_3(){\n return isNaN(undefined)\n}\n\nfunction f0_2_0_4(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_2_0_5(){\n return Math.random()\n}\n\nfunction f0_2_0_6(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_2_0_7(){\n return Math.random()\n}\n\nfunction f0_2_0_8(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_2_0_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_2_0_10(){\n return isNaN(undefined)\n}\n\nfunction f0_2_0_11(){\n return isNaN(undefined)\n}\n\nfunction f0_2_0(){\n f0_2_0_0();\n f0_2_0_1();\n f0_2_0_2();\n f0_2_0_3();\n f0_2_0_4();\n f0_2_0_5();\n f0_2_0_6();\n f0_2_0_7();\n f0_2_0_8();\n f0_2_0_9();\n f0_2_0_10();\n f0_2_0_11();\n\n}\n\nfunction f0_2_1_0(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_2_1_1(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_2_1_2(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_2_1_3(){\n return isNaN(undefined)\n}\n\nfunction f0_2_1_4(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_2_1_5(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_2_1_6(){\n return isNaN(undefined)\n}\n\nfunction f0_2_1_7(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_2_1_8(){\n return isNaN(undefined)\n}\n\nfunction f0_2_1_9(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_2_1_10(){\n return isNaN(undefined)\n}\n\nfunction f0_2_1_11(){\n return isNaN(undefined)\n}\n\nfunction f0_2_1(){\n f0_2_1_0();\n f0_2_1_1();\n f0_2_1_2();\n f0_2_1_3();\n f0_2_1_4();\n f0_2_1_5();\n f0_2_1_6();\n f0_2_1_7();\n f0_2_1_8();\n f0_2_1_9();\n f0_2_1_10();\n f0_2_1_11();\n\n}\n\nfunction f0_2_2_0(){\n return Math.random()\n}\n\nfunction f0_2_2_1(){\n return Math.random()\n}\n\nfunction f0_2_2_2(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_2_2_3(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_2_2_4(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_2_2_5(){\n return Math.random()\n}\n\nfunction f0_2_2_6(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_2_2_7(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_2_2_8(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_2_2_9(){\n return Math.random()\n}\n\nfunction f0_2_2_10(){\n return Math.random()\n}\n\nfunction f0_2_2_11(){\n return isNaN(undefined)\n}\n\nfunction f0_2_2(){\n f0_2_2_0();\n f0_2_2_1();\n f0_2_2_2();\n f0_2_2_3();\n f0_2_2_4();\n f0_2_2_5();\n f0_2_2_6();\n f0_2_2_7();\n f0_2_2_8();\n f0_2_2_9();\n f0_2_2_10();\n f0_2_2_11();\n\n}\n\nfunction f0_2_3_0(){\n return Math.random()\n}\n\nfunction f0_2_3_1(){\n return Math.random()\n}\n\nfunction f0_2_3_2(){\n return Math.random()\n}\n\nfunction f0_2_3_3(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_2_3_4(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_2_3_5(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_2_3_6(){\n return isNaN(undefined)\n}\n\nfunction f0_2_3_7(){\n return isNaN(undefined)\n}\n\nfunction f0_2_3_8(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_2_3_9(){\n return Math.random()\n}\n\nfunction f0_2_3_10(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_2_3_11(){\n return isNaN(undefined)\n}\n\nfunction f0_2_3(){\n f0_2_3_0();\n f0_2_3_1();\n f0_2_3_2();\n f0_2_3_3();\n f0_2_3_4();\n f0_2_3_5();\n f0_2_3_6();\n f0_2_3_7();\n f0_2_3_8();\n f0_2_3_9();\n f0_2_3_10();\n f0_2_3_11();\n}\n\nfunction f0_2_4_0(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_2_4_1(){\n return Math.random()\n}\n\nfunction f0_2_4_2(){\n return Math.random()\n}\n\nfunction f0_2_4_3(){\n return isNaN(undefined)\n}\n\nfunction f0_2_4_4(){\n return isNaN(undefined)\n}\n\nfunction f0_2_4_5(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_2_4_6(){\n return Math.random()\n}\n\nfunction f0_2_4_7(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_2_4_8(){\n return Math.random()\n}\n\nfunction f0_2_4_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_2_4_10(){\n return isNaN(undefined)\n}\n\nfunction f0_2_4_11(){\n return isNaN(undefined)\n}\n\nfunction f0_2_4(){\n f0_2_4_0();\n f0_2_4_1();\n f0_2_4_2();\n f0_2_4_3();\n f0_2_4_4();\n f0_2_4_5();\n f0_2_4_6();\n f0_2_4_7();\n f0_2_4_8();\n f0_2_4_9();\n f0_2_4_10();\n f0_2_4_11();\n}\n\nfunction f0_2_5_0(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_2_5_1(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_2_5_2(){\n return Math.random()\n}\n\nfunction f0_2_5_3(){\n return Math.random()\n}\n\nfunction f0_2_5_4(){\n return isNaN(undefined)\n}\n\nfunction f0_2_5_5(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_2_5_6(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_2_5_7(){\n return isNaN(undefined)\n}\n\nfunction f0_2_5_8(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_2_5_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_2_5_10(){\n return Math.random()\n}\n\nfunction f0_2_5_11(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_2_5(){\n f0_2_5_0();\n f0_2_5_1();\n f0_2_5_2();\n f0_2_5_3();\n f0_2_5_4();\n f0_2_5_5();\n f0_2_5_6();\n f0_2_5_7();\n f0_2_5_8();\n f0_2_5_9();\n f0_2_5_10();\n f0_2_5_11();\n}\n\nfunction f0_2_6_0(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_2_6_1(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_2_6_2(){\n return Math.random()\n}\n\nfunction f0_2_6_3(){\n return Math.random()\n}\n\nfunction f0_2_6_4(){\n return Math.random()\n}\n\nfunction f0_2_6_5(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_2_6_6(){\n return Math.random()\n}\n\nfunction f0_2_6_7(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_2_6_8(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_2_6_9(){\n return Math.random()\n}\n\nfunction f0_2_6_10(){\n return isNaN(undefined)\n}\n\nfunction f0_2_6_11(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_2_6(){\n f0_2_6_0();\n f0_2_6_1();\n f0_2_6_2();\n f0_2_6_3();\n f0_2_6_4();\n f0_2_6_5();\n f0_2_6_6();\n f0_2_6_7();\n f0_2_6_8();\n f0_2_6_9();\n f0_2_6_10();\n f0_2_6_11();\n}\n\nfunction f0_2_7_0(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_2_7_1(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_2_7_2(){\n return isNaN(undefined)\n}\n\nfunction f0_2_7_3(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_2_7_4(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_2_7_5(){\n return isNaN(undefined)\n}\n\nfunction f0_2_7_6(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_2_7_7(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_2_7_8(){\n return isNaN(undefined)\n}\n\nfunction f0_2_7_9(){\n return Math.random()\n}\n\nfunction f0_2_7_10(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_2_7_11(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_2_7(){\n f0_2_7_0();\n f0_2_7_1();\n f0_2_7_2();\n f0_2_7_3();\n f0_2_7_4();\n f0_2_7_5();\n f0_2_7_6();\n f0_2_7_7();\n f0_2_7_8();\n f0_2_7_9();\n f0_2_7_10();\n f0_2_7_11();\n}\n\nfunction f0_2_8_0(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_2_8_1(){\n return Math.random()\n}\n\nfunction f0_2_8_2(){\n return isNaN(undefined)\n}\n\nfunction f0_2_8_3(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_2_8_4(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_2_8_5(){\n return isNaN(undefined)\n}\n\nfunction f0_2_8_6(){\n return Math.random()\n}\n\nfunction f0_2_8_7(){\n return isNaN(undefined)\n}\n\nfunction f0_2_8_8(){\n return Math.random()\n}\n\nfunction f0_2_8_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_2_8_10(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_2_8_11(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_2_8(){\n f0_2_8_0();\n f0_2_8_1();\n f0_2_8_2();\n f0_2_8_3();\n f0_2_8_4();\n f0_2_8_5();\n f0_2_8_6();\n f0_2_8_7();\n f0_2_8_8();\n f0_2_8_9();\n f0_2_8_10();\n f0_2_8_11();\n}\n\nfunction f0_2_9_0(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_2_9_1(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_2_9_2(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_2_9_3(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_2_9_4(){\n return isNaN(undefined)\n}\n\nfunction f0_2_9_5(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_2_9_6(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_2_9_7(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_2_9_8(){\n return Math.random()\n}\n\nfunction f0_2_9_9(){\n return Math.random()\n}\n\nfunction f0_2_9_10(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_2_9_11(){\n return isNaN(undefined)\n}\n\nfunction f0_2_9(){\n f0_2_9_0();\n f0_2_9_1();\n f0_2_9_2();\n f0_2_9_3();\n f0_2_9_4();\n f0_2_9_5();\n f0_2_9_6();\n f0_2_9_7();\n f0_2_9_8();\n f0_2_9_9();\n f0_2_9_10();\n f0_2_9_11();\n}\n\nfunction f0_2_10_0(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_2_10_1(){\n return Math.random()\n}\n\nfunction f0_2_10_2(){\n return isNaN(undefined)\n}\n\nfunction f0_2_10_3(){\n return isNaN(undefined)\n}\n\nfunction f0_2_10_4(){\n return isNaN(undefined)\n}\n\nfunction f0_2_10_5(){\n return isNaN(undefined)\n}\n\nfunction f0_2_10_6(){\n return isNaN(undefined)\n}\n\nfunction f0_2_10_7(){\n return Math.random()\n}\n\nfunction f0_2_10_8(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_2_10_9(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_2_10_10(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_2_10_11(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_2_10(){\n f0_2_10_0();\n f0_2_10_1();\n f0_2_10_2();\n f0_2_10_3();\n f0_2_10_4();\n f0_2_10_5();\n f0_2_10_6();\n f0_2_10_7();\n f0_2_10_8();\n f0_2_10_9();\n f0_2_10_10();\n f0_2_10_11();\n}\n\nfunction f0_2_11_0(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_2_11_1(){\n return Math.random()\n}\n\nfunction f0_2_11_2(){\n return Math.random()\n}\n\nfunction f0_2_11_3(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_2_11_4(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_2_11_5(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_2_11_6(){\n return isNaN(undefined)\n}\n\nfunction f0_2_11_7(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_2_11_8(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_2_11_9(){\n return isNaN(undefined)\n}\n\nfunction f0_2_11_10(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_2_11_11(){\n return isNaN(undefined)\n}\n\nfunction f0_2_11(){\n f0_2_11_0();\n f0_2_11_1();\n f0_2_11_2();\n f0_2_11_3();\n f0_2_11_4();\n f0_2_11_5();\n f0_2_11_6();\n f0_2_11_7();\n f0_2_11_8();\n f0_2_11_9();\n f0_2_11_10();\n f0_2_11_11();\n}\n\nfunction f0_2(){\n f0_2_0();\n f0_2_1();\n f0_2_2();\n f0_2_3();\n f0_2_4();\n f0_2_5();\n f0_2_6();\n f0_2_7();\n f0_2_8();\n f0_2_9();\n f0_2_10();\n f0_2_11();\n\n}\n\nfunction f0_3_0_0(){\n return Math.random()\n}\n\nfunction f0_3_0_1(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_3_0_2(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_3_0_3(){\n return isNaN(undefined)\n}\n\nfunction f0_3_0_4(){\n return Math.random()\n}\n\nfunction f0_3_0_5(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_3_0_6(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_3_0_7(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_3_0_8(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_3_0_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_3_0_10(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_3_0_11(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_3_0(){\n f0_3_0_0();\n f0_3_0_1();\n f0_3_0_2();\n f0_3_0_3();\n f0_3_0_4();\n f0_3_0_5();\n f0_3_0_6();\n f0_3_0_7();\n f0_3_0_8();\n f0_3_0_9();\n f0_3_0_10();\n f0_3_0_11();\n}\n\nfunction f0_3_1_0(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_3_1_1(){\n return isNaN(undefined)\n}\n\nfunction f0_3_1_2(){\n return Math.random()\n}\n\nfunction f0_3_1_3(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_3_1_4(){\n return isNaN(undefined)\n}\n\nfunction f0_3_1_5(){\n return Math.random()\n}\n\nfunction f0_3_1_6(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_3_1_7(){\n return isNaN(undefined)\n}\n\nfunction f0_3_1_8(){\n return Math.random()\n}\n\nfunction f0_3_1_9(){\n return Math.random()\n}\n\nfunction f0_3_1_10(){\n return Math.random()\n}\n\nfunction f0_3_1_11(){\n return Math.random()\n}\n\nfunction f0_3_1(){\n f0_3_1_0();\n f0_3_1_1();\n f0_3_1_2();\n f0_3_1_3();\n f0_3_1_4();\n f0_3_1_5();\n f0_3_1_6();\n f0_3_1_7();\n f0_3_1_8();\n f0_3_1_9();\n f0_3_1_10();\n f0_3_1_11();\n}\n\nfunction f0_3_2_0(){\n return Math.random()\n}\n\nfunction f0_3_2_1(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_3_2_2(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_3_2_3(){\n return isNaN(undefined)\n}\n\nfunction f0_3_2_4(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_3_2_5(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_3_2_6(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_3_2_7(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_3_2_8(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_3_2_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_3_2_10(){\n return isNaN(undefined)\n}\n\nfunction f0_3_2_11(){\n return Math.random()\n}\n\nfunction f0_3_2(){\n f0_3_2_0();\n f0_3_2_1();\n f0_3_2_2();\n f0_3_2_3();\n f0_3_2_4();\n f0_3_2_5();\n f0_3_2_6();\n f0_3_2_7();\n f0_3_2_8();\n f0_3_2_9();\n f0_3_2_10();\n f0_3_2_11();\n}\n\nfunction f0_3_3_0(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_3_3_1(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_3_3_2(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_3_3_3(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_3_3_4(){\n return isNaN(undefined)\n}\n\nfunction f0_3_3_5(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_3_3_6(){\n return Math.random()\n}\n\nfunction f0_3_3_7(){\n return isNaN(undefined)\n}\n\nfunction f0_3_3_8(){\n return isNaN(undefined)\n}\n\nfunction f0_3_3_9(){\n return isNaN(undefined)\n}\n\nfunction f0_3_3_10(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_3_3_11(){\n return Math.random()\n}\n\nfunction f0_3_3(){\n f0_3_3_0();\n f0_3_3_1();\n f0_3_3_2();\n f0_3_3_3();\n f0_3_3_4();\n f0_3_3_5();\n f0_3_3_6();\n f0_3_3_7();\n f0_3_3_8();\n f0_3_3_9();\n f0_3_3_10();\n f0_3_3_11();\n}\n\nfunction f0_3_4_0(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_3_4_1(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_3_4_2(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_3_4_3(){\n return Math.random()\n}\n\nfunction f0_3_4_4(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_3_4_5(){\n return Math.random()\n}\n\nfunction f0_3_4_6(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_3_4_7(){\n return Math.random()\n}\n\nfunction f0_3_4_8(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_3_4_9(){\n return Math.random()\n}\n\nfunction f0_3_4_10(){\n return Math.random()\n}\n\nfunction f0_3_4_11(){\n return Math.random()\n}\n\nfunction f0_3_4(){\n f0_3_4_0();\n f0_3_4_1();\n f0_3_4_2();\n f0_3_4_3();\n f0_3_4_4();\n f0_3_4_5();\n f0_3_4_6();\n f0_3_4_7();\n f0_3_4_8();\n f0_3_4_9();\n f0_3_4_10();\n f0_3_4_11();\n}\n\nfunction f0_3_5_0(){\n return Math.random()\n}\n\nfunction f0_3_5_1(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_3_5_2(){\n return isNaN(undefined)\n}\n\nfunction f0_3_5_3(){\n return isNaN(undefined)\n}\n\nfunction f0_3_5_4(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_3_5_5(){\n return Math.random()\n}\n\nfunction f0_3_5_6(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_3_5_7(){\n return Math.random()\n}\n\nfunction f0_3_5_8(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_3_5_9(){\n return isNaN(undefined)\n}\n\nfunction f0_3_5_10(){\n return Math.random()\n}\n\nfunction f0_3_5_11(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_3_5(){\n f0_3_5_0();\n f0_3_5_1();\n f0_3_5_2();\n f0_3_5_3();\n f0_3_5_4();\n f0_3_5_5();\n f0_3_5_6();\n f0_3_5_7();\n f0_3_5_8();\n f0_3_5_9();\n f0_3_5_10();\n f0_3_5_11();\n}\n\nfunction f0_3_6_0(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_3_6_1(){\n return isNaN(undefined)\n}\n\nfunction f0_3_6_2(){\n return Math.random()\n}\n\nfunction f0_3_6_3(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_3_6_4(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_3_6_5(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_3_6_6(){\n return isNaN(undefined)\n}\n\nfunction f0_3_6_7(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_3_6_8(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_3_6_9(){\n return isNaN(undefined)\n}\n\nfunction f0_3_6_10(){\n return Math.random()\n}\n\nfunction f0_3_6_11(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_3_6(){\n f0_3_6_0();\n f0_3_6_1();\n f0_3_6_2();\n f0_3_6_3();\n f0_3_6_4();\n f0_3_6_5();\n f0_3_6_6();\n f0_3_6_7();\n f0_3_6_8();\n f0_3_6_9();\n f0_3_6_10();\n f0_3_6_11();\n}\n\nfunction f0_3_7_0(){\n return isNaN(undefined)\n}\n\nfunction f0_3_7_1(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_3_7_2(){\n return Math.random()\n}\n\nfunction f0_3_7_3(){\n return isNaN(undefined)\n}\n\nfunction f0_3_7_4(){\n return isNaN(undefined)\n}\n\nfunction f0_3_7_5(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_3_7_6(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_3_7_7(){\n return isNaN(undefined)\n}\n\nfunction f0_3_7_8(){\n return Math.random()\n}\n\nfunction f0_3_7_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_3_7_10(){\n return isNaN(undefined)\n}\n\nfunction f0_3_7_11(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_3_7(){\n f0_3_7_0();\n f0_3_7_1();\n f0_3_7_2();\n f0_3_7_3();\n f0_3_7_4();\n f0_3_7_5();\n f0_3_7_6();\n f0_3_7_7();\n f0_3_7_8();\n f0_3_7_9();\n f0_3_7_10();\n f0_3_7_11();\n}\n\nfunction f0_3_8_0(){\n return Math.random()\n}\n\nfunction f0_3_8_1(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_3_8_2(){\n return isNaN(undefined)\n}\n\nfunction f0_3_8_3(){\n return Math.random()\n}\n\nfunction f0_3_8_4(){\n return Math.random()\n}\n\nfunction f0_3_8_5(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_3_8_6(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_3_8_7(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_3_8_8(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_3_8_9(){\n return Math.random()\n}\n\nfunction f0_3_8_10(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_3_8_11(){\n return Math.random()\n}\n\nfunction f0_3_8(){\n f0_3_8_0();\n f0_3_8_1();\n f0_3_8_2();\n f0_3_8_3();\n f0_3_8_4();\n f0_3_8_5();\n f0_3_8_6();\n f0_3_8_7();\n f0_3_8_8();\n f0_3_8_9();\n f0_3_8_10();\n f0_3_8_11();\n}\n\nfunction f0_3_9_0(){\n return isNaN(undefined)\n}\n\nfunction f0_3_9_1(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_3_9_2(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_3_9_3(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_3_9_4(){\n return isNaN(undefined)\n}\n\nfunction f0_3_9_5(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_3_9_6(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_3_9_7(){\n return Math.random()\n}\n\nfunction f0_3_9_8(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_3_9_9(){\n return Math.random()\n}\n\nfunction f0_3_9_10(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_3_9_11(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_3_9(){\n f0_3_9_0();\n f0_3_9_1();\n f0_3_9_2();\n f0_3_9_3();\n f0_3_9_4();\n f0_3_9_5();\n f0_3_9_6();\n f0_3_9_7();\n f0_3_9_8();\n f0_3_9_9();\n f0_3_9_10();\n f0_3_9_11();\n}\n\nfunction f0_3_10_0(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_3_10_1(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_3_10_2(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_3_10_3(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_3_10_4(){\n return isNaN(undefined)\n}\n\nfunction f0_3_10_5(){\n return Math.random()\n}\n\nfunction f0_3_10_6(){\n return isNaN(undefined)\n}\n\nfunction f0_3_10_7(){\n return isNaN(undefined)\n}\n\nfunction f0_3_10_8(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_3_10_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_3_10_10(){\n return isNaN(undefined)\n}\n\nfunction f0_3_10_11(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_3_10(){\n f0_3_10_0();\n f0_3_10_1();\n f0_3_10_2();\n f0_3_10_3();\n f0_3_10_4();\n f0_3_10_5();\n f0_3_10_6();\n f0_3_10_7();\n f0_3_10_8();\n f0_3_10_9();\n f0_3_10_10();\n f0_3_10_11();\n}\n\nfunction f0_3_11_0(){\n return isNaN(undefined)\n}\n\nfunction f0_3_11_1(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_3_11_2(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_3_11_3(){\n return isNaN(undefined)\n}\n\nfunction f0_3_11_4(){\n return isNaN(undefined)\n}\n\nfunction f0_3_11_5(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_3_11_6(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_3_11_7(){\n return Math.random()\n}\n\nfunction f0_3_11_8(){\n return Math.random()\n}\n\nfunction f0_3_11_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_3_11_10(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_3_11_11(){\n return Math.random()\n}\n\nfunction f0_3_11(){\n f0_3_11_0();\n f0_3_11_1();\n f0_3_11_2();\n f0_3_11_3();\n f0_3_11_4();\n f0_3_11_5();\n f0_3_11_6();\n f0_3_11_7();\n f0_3_11_8();\n f0_3_11_9();\n f0_3_11_10();\n f0_3_11_11();\n}\n\nfunction f0_3(){\n f0_3_0();\n f0_3_1();\n f0_3_2();\n f0_3_3();\n f0_3_4();\n f0_3_5();\n f0_3_6();\n f0_3_7();\n f0_3_8();\n f0_3_9();\n f0_3_10();\n f0_3_11();\n\n}\n\nfunction f0_4_0_0(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_4_0_1(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_4_0_2(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_4_0_3(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_4_0_4(){\n return Math.random()\n}\n\nfunction f0_4_0_5(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_4_0_6(){\n return isNaN(undefined)\n}\n\nfunction f0_4_0_7(){\n return isNaN(undefined)\n}\n\nfunction f0_4_0_8(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_4_0_9(){\n return Math.random()\n}\n\nfunction f0_4_0_10(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_4_0_11(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_4_0(){\n f0_4_0_0();\n f0_4_0_1();\n f0_4_0_2();\n f0_4_0_3();\n f0_4_0_4();\n f0_4_0_5();\n f0_4_0_6();\n f0_4_0_7();\n f0_4_0_8();\n f0_4_0_9();\n f0_4_0_10();\n f0_4_0_11();\n}\n\nfunction f0_4_1_0(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_4_1_1(){\n return Math.random()\n}\n\nfunction f0_4_1_2(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_4_1_3(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_4_1_4(){\n return isNaN(undefined)\n}\n\nfunction f0_4_1_5(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_4_1_6(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_4_1_7(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_4_1_8(){\n return isNaN(undefined)\n}\n\nfunction f0_4_1_9(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_4_1_10(){\n return isNaN(undefined)\n}\n\nfunction f0_4_1_11(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_4_1(){\n f0_4_1_0();\n f0_4_1_1();\n f0_4_1_2();\n f0_4_1_3();\n f0_4_1_4();\n f0_4_1_5();\n f0_4_1_6();\n f0_4_1_7();\n f0_4_1_8();\n f0_4_1_9();\n f0_4_1_10();\n f0_4_1_11();\n}\n\nfunction f0_4_2_0(){\n return Math.random()\n}\n\nfunction f0_4_2_1(){\n return Math.random()\n}\n\nfunction f0_4_2_2(){\n return isNaN(undefined)\n}\n\nfunction f0_4_2_3(){\n return isNaN(undefined)\n}\n\nfunction f0_4_2_4(){\n return isNaN(undefined)\n}\n\nfunction f0_4_2_5(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_4_2_6(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_4_2_7(){\n return Math.random()\n}\n\nfunction f0_4_2_8(){\n return Math.random()\n}\n\nfunction f0_4_2_9(){\n return isNaN(undefined)\n}\n\nfunction f0_4_2_10(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_4_2_11(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_4_2(){\n f0_4_2_0();\n f0_4_2_1();\n f0_4_2_2();\n f0_4_2_3();\n f0_4_2_4();\n f0_4_2_5();\n f0_4_2_6();\n f0_4_2_7();\n f0_4_2_8();\n f0_4_2_9();\n f0_4_2_10();\n f0_4_2_11();\n}\n\nfunction f0_4_3_0(){\n return isNaN(undefined)\n}\n\nfunction f0_4_3_1(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_4_3_2(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_4_3_3(){\n return isNaN(undefined)\n}\n\nfunction f0_4_3_4(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_4_3_5(){\n return isNaN(undefined)\n}\n\nfunction f0_4_3_6(){\n return Math.random()\n}\n\nfunction f0_4_3_7(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_4_3_8(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_4_3_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_4_3_10(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_4_3_11(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_4_3(){\n f0_4_3_0();\n f0_4_3_1();\n f0_4_3_2();\n f0_4_3_3();\n f0_4_3_4();\n f0_4_3_5();\n f0_4_3_6();\n f0_4_3_7();\n f0_4_3_8();\n f0_4_3_9();\n f0_4_3_10();\n f0_4_3_11();\n}\n\nfunction f0_4_4_0(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_4_4_1(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_4_4_2(){\n return isNaN(undefined)\n}\n\nfunction f0_4_4_3(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_4_4_4(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_4_4_5(){\n return isNaN(undefined)\n}\n\nfunction f0_4_4_6(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_4_4_7(){\n return Math.random()\n}\n\nfunction f0_4_4_8(){\n return isNaN(undefined)\n}\n\nfunction f0_4_4_9(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_4_4_10(){\n return isNaN(undefined)\n}\n\nfunction f0_4_4_11(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_4_4(){\n f0_4_4_0();\n f0_4_4_1();\n f0_4_4_2();\n f0_4_4_3();\n f0_4_4_4();\n f0_4_4_5();\n f0_4_4_6();\n f0_4_4_7();\n f0_4_4_8();\n f0_4_4_9();\n f0_4_4_10();\n f0_4_4_11();\n}\n\nfunction f0_4_5_0(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_4_5_1(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_4_5_2(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_4_5_3(){\n return isNaN(undefined)\n}\n\nfunction f0_4_5_4(){\n return Math.random()\n}\n\nfunction f0_4_5_5(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_4_5_6(){\n return isNaN(undefined)\n}\n\nfunction f0_4_5_7(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_4_5_8(){\n return Math.random()\n}\n\nfunction f0_4_5_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_4_5_10(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_4_5_11(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_4_5(){\n f0_4_5_0();\n f0_4_5_1();\n f0_4_5_2();\n f0_4_5_3();\n f0_4_5_4();\n f0_4_5_5();\n f0_4_5_6();\n f0_4_5_7();\n f0_4_5_8();\n f0_4_5_9();\n f0_4_5_10();\n f0_4_5_11();\n}\n\nfunction f0_4_6_0(){\n return Math.random()\n}\n\nfunction f0_4_6_1(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_4_6_2(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_4_6_3(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_4_6_4(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_4_6_5(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_4_6_6(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_4_6_7(){\n return Math.random()\n}\n\nfunction f0_4_6_8(){\n return isNaN(undefined)\n}\n\nfunction f0_4_6_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_4_6_10(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_4_6_11(){\n return Math.random()\n}\n\nfunction f0_4_6(){\n f0_4_6_0();\n f0_4_6_1();\n f0_4_6_2();\n f0_4_6_3();\n f0_4_6_4();\n f0_4_6_5();\n f0_4_6_6();\n f0_4_6_7();\n f0_4_6_8();\n f0_4_6_9();\n f0_4_6_10();\n f0_4_6_11();\n}\n\nfunction f0_4_7_0(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_4_7_1(){\n return Math.random()\n}\n\nfunction f0_4_7_2(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_4_7_3(){\n return isNaN(undefined)\n}\n\nfunction f0_4_7_4(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_4_7_5(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_4_7_6(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_4_7_7(){\n return isNaN(undefined)\n}\n\nfunction f0_4_7_8(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_4_7_9(){\n return Math.random()\n}\n\nfunction f0_4_7_10(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_4_7_11(){\n return isNaN(undefined)\n}\n\nfunction f0_4_7(){\n f0_4_7_0();\n f0_4_7_1();\n f0_4_7_2();\n f0_4_7_3();\n f0_4_7_4();\n f0_4_7_5();\n f0_4_7_6();\n f0_4_7_7();\n f0_4_7_8();\n f0_4_7_9();\n f0_4_7_10();\n f0_4_7_11();\n}\n\nfunction f0_4_8_0(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_4_8_1(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_4_8_2(){\n return Math.random()\n}\n\nfunction f0_4_8_3(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_4_8_4(){\n return Math.random()\n}\n\nfunction f0_4_8_5(){\n return isNaN(undefined)\n}\n\nfunction f0_4_8_6(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_4_8_7(){\n return Math.random()\n}\n\nfunction f0_4_8_8(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_4_8_9(){\n return isNaN(undefined)\n}\n\nfunction f0_4_8_10(){\n return Math.random()\n}\n\nfunction f0_4_8_11(){\n return isNaN(undefined)\n}\n\nfunction f0_4_8(){\n f0_4_8_0();\n f0_4_8_1();\n f0_4_8_2();\n f0_4_8_3();\n f0_4_8_4();\n f0_4_8_5();\n f0_4_8_6();\n f0_4_8_7();\n f0_4_8_8();\n f0_4_8_9();\n f0_4_8_10();\n f0_4_8_11();\n}\n\nfunction f0_4_9_0(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_4_9_1(){\n return Math.random()\n}\n\nfunction f0_4_9_2(){\n return Math.random()\n}\n\nfunction f0_4_9_3(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_4_9_4(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_4_9_5(){\n return isNaN(undefined)\n}\n\nfunction f0_4_9_6(){\n return isNaN(undefined)\n}\n\nfunction f0_4_9_7(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_4_9_8(){\n return Math.random()\n}\n\nfunction f0_4_9_9(){\n return Math.random()\n}\n\nfunction f0_4_9_10(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_4_9_11(){\n return Math.random()\n}\n\nfunction f0_4_9(){\n f0_4_9_0();\n f0_4_9_1();\n f0_4_9_2();\n f0_4_9_3();\n f0_4_9_4();\n f0_4_9_5();\n f0_4_9_6();\n f0_4_9_7();\n f0_4_9_8();\n f0_4_9_9();\n f0_4_9_10();\n f0_4_9_11();\n}\n\nfunction f0_4_10_0(){\n return isNaN(undefined)\n}\n\nfunction f0_4_10_1(){\n return isNaN(undefined)\n}\n\nfunction f0_4_10_2(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_4_10_3(){\n return Math.random()\n}\n\nfunction f0_4_10_4(){\n return Math.random()\n}\n\nfunction f0_4_10_5(){\n return Math.random()\n}\n\nfunction f0_4_10_6(){\n return isNaN(undefined)\n}\n\nfunction f0_4_10_7(){\n return isNaN(undefined)\n}\n\nfunction f0_4_10_8(){\n return Math.random()\n}\n\nfunction f0_4_10_9(){\n return Math.random()\n}\n\nfunction f0_4_10_10(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_4_10_11(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_4_10(){\n f0_4_10_0();\n f0_4_10_1();\n f0_4_10_2();\n f0_4_10_3();\n f0_4_10_4();\n f0_4_10_5();\n f0_4_10_6();\n f0_4_10_7();\n f0_4_10_8();\n f0_4_10_9();\n f0_4_10_10();\n f0_4_10_11();\n}\n\nfunction f0_4_11_0(){\n return isNaN(undefined)\n}\n\nfunction f0_4_11_1(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_4_11_2(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_4_11_3(){\n return isNaN(undefined)\n}\n\nfunction f0_4_11_4(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_4_11_5(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_4_11_6(){\n return isNaN(undefined)\n}\n\nfunction f0_4_11_7(){\n return isNaN(undefined)\n}\n\nfunction f0_4_11_8(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_4_11_9(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_4_11_10(){\n return isNaN(undefined)\n}\n\nfunction f0_4_11_11(){\n return isNaN(undefined)\n}\n\nfunction f0_4_11(){\n f0_4_11_0();\n f0_4_11_1();\n f0_4_11_2();\n f0_4_11_3();\n f0_4_11_4();\n f0_4_11_5();\n f0_4_11_6();\n f0_4_11_7();\n f0_4_11_8();\n f0_4_11_9();\n f0_4_11_10();\n f0_4_11_11();\n}\n\nfunction f0_4(){\n f0_4_0();\n f0_4_1();\n f0_4_2();\n f0_4_3();\n f0_4_4();\n f0_4_5();\n f0_4_6();\n f0_4_7();\n f0_4_8();\n f0_4_9();\n f0_4_10();\n f0_4_11();\n\n}\n\nfunction f0_5_0_0(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_5_0_1(){\n return Math.random()\n}\n\nfunction f0_5_0_2(){\n return isNaN(undefined)\n}\n\nfunction f0_5_0_3(){\n return Math.random()\n}\n\nfunction f0_5_0_4(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_5_0_5(){\n return isNaN(undefined)\n}\n\nfunction f0_5_0_6(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_5_0_7(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_5_0_8(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_5_0_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_5_0_10(){\n return Math.random()\n}\n\nfunction f0_5_0_11(){\n return isNaN(undefined)\n}\n\nfunction f0_5_0(){\n f0_5_0_0();\n f0_5_0_1();\n f0_5_0_2();\n f0_5_0_3();\n f0_5_0_4();\n f0_5_0_5();\n f0_5_0_6();\n f0_5_0_7();\n f0_5_0_8();\n f0_5_0_9();\n f0_5_0_10();\n f0_5_0_11();\n}\n\nfunction f0_5_1_0(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_5_1_1(){\n return isNaN(undefined)\n}\n\nfunction f0_5_1_2(){\n return Math.random()\n}\n\nfunction f0_5_1_3(){\n return isNaN(undefined)\n}\n\nfunction f0_5_1_4(){\n return Math.random()\n}\n\nfunction f0_5_1_5(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_5_1_6(){\n return isNaN(undefined)\n}\n\nfunction f0_5_1_7(){\n return isNaN(undefined)\n}\n\nfunction f0_5_1_8(){\n return Math.random()\n}\n\nfunction f0_5_1_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_5_1_10(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_5_1_11(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_5_1(){\n f0_5_1_0();\n f0_5_1_1();\n f0_5_1_2();\n f0_5_1_3();\n f0_5_1_4();\n f0_5_1_5();\n f0_5_1_6();\n f0_5_1_7();\n f0_5_1_8();\n f0_5_1_9();\n f0_5_1_10();\n f0_5_1_11();\n}\n\nfunction f0_5_2_0(){\n return isNaN(undefined)\n}\n\nfunction f0_5_2_1(){\n return isNaN(undefined)\n}\n\nfunction f0_5_2_2(){\n return Math.random()\n}\n\nfunction f0_5_2_3(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_5_2_4(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_5_2_5(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_5_2_6(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_5_2_7(){\n return Math.random()\n}\n\nfunction f0_5_2_8(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_5_2_9(){\n return isNaN(undefined)\n}\n\nfunction f0_5_2_10(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_5_2_11(){\n return isNaN(undefined)\n}\n\nfunction f0_5_2(){\n f0_5_2_0();\n f0_5_2_1();\n f0_5_2_2();\n f0_5_2_3();\n f0_5_2_4();\n f0_5_2_5();\n f0_5_2_6();\n f0_5_2_7();\n f0_5_2_8();\n f0_5_2_9();\n f0_5_2_10();\n f0_5_2_11();\n}\n\nfunction f0_5_3_0(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_5_3_1(){\n return isNaN(undefined)\n}\n\nfunction f0_5_3_2(){\n return Math.random()\n}\n\nfunction f0_5_3_3(){\n return isNaN(undefined)\n}\n\nfunction f0_5_3_4(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_5_3_5(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_5_3_6(){\n return isNaN(undefined)\n}\n\nfunction f0_5_3_7(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_5_3_8(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_5_3_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_5_3_10(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_5_3_11(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_5_3(){\n f0_5_3_0();\n f0_5_3_1();\n f0_5_3_2();\n f0_5_3_3();\n f0_5_3_4();\n f0_5_3_5();\n f0_5_3_6();\n f0_5_3_7();\n f0_5_3_8();\n f0_5_3_9();\n f0_5_3_10();\n f0_5_3_11();\n}\n\nfunction f0_5_4_0(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_5_4_1(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_5_4_2(){\n return Math.random()\n}\n\nfunction f0_5_4_3(){\n return Math.random()\n}\n\nfunction f0_5_4_4(){\n return Math.random()\n}\n\nfunction f0_5_4_5(){\n return Math.random()\n}\n\nfunction f0_5_4_6(){\n return Math.random()\n}\n\nfunction f0_5_4_7(){\n return Math.random()\n}\n\nfunction f0_5_4_8(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_5_4_9(){\n return Math.random()\n}\n\nfunction f0_5_4_10(){\n return isNaN(undefined)\n}\n\nfunction f0_5_4_11(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_5_4(){\n f0_5_4_0();\n f0_5_4_1();\n f0_5_4_2();\n f0_5_4_3();\n f0_5_4_4();\n f0_5_4_5();\n f0_5_4_6();\n f0_5_4_7();\n f0_5_4_8();\n f0_5_4_9();\n f0_5_4_10();\n f0_5_4_11();\n}\n\nfunction f0_5_5_0(){\n return isNaN(undefined)\n}\n\nfunction f0_5_5_1(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_5_5_2(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_5_5_3(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_5_5_4(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_5_5_5(){\n return isNaN(undefined)\n}\n\nfunction f0_5_5_6(){\n return Math.random()\n}\n\nfunction f0_5_5_7(){\n return Math.random()\n}\n\nfunction f0_5_5_8(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_5_5_9(){\n return Math.random()\n}\n\nfunction f0_5_5_10(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_5_5_11(){\n return Math.random()\n}\n\nfunction f0_5_5(){\n f0_5_5_0();\n f0_5_5_1();\n f0_5_5_2();\n f0_5_5_3();\n f0_5_5_4();\n f0_5_5_5();\n f0_5_5_6();\n f0_5_5_7();\n f0_5_5_8();\n f0_5_5_9();\n f0_5_5_10();\n f0_5_5_11();\n}\n\nfunction f0_5_6_0(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_5_6_1(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_5_6_2(){\n return Math.random()\n}\n\nfunction f0_5_6_3(){\n return isNaN(undefined)\n}\n\nfunction f0_5_6_4(){\n return Math.random()\n}\n\nfunction f0_5_6_5(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_5_6_6(){\n return Math.random()\n}\n\nfunction f0_5_6_7(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_5_6_8(){\n return isNaN(undefined)\n}\n\nfunction f0_5_6_9(){\n return isNaN(undefined)\n}\n\nfunction f0_5_6_10(){\n return Math.random()\n}\n\nfunction f0_5_6_11(){\n return Math.random()\n}\n\nfunction f0_5_6(){\n f0_5_6_0();\n f0_5_6_1();\n f0_5_6_2();\n f0_5_6_3();\n f0_5_6_4();\n f0_5_6_5();\n f0_5_6_6();\n f0_5_6_7();\n f0_5_6_8();\n f0_5_6_9();\n f0_5_6_10();\n f0_5_6_11();\n}\n\nfunction f0_5_7_0(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_5_7_1(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_5_7_2(){\n return Math.random()\n}\n\nfunction f0_5_7_3(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_5_7_4(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_5_7_5(){\n return Math.random()\n}\n\nfunction f0_5_7_6(){\n return isNaN(undefined)\n}\n\nfunction f0_5_7_7(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_5_7_8(){\n return Math.random()\n}\n\nfunction f0_5_7_9(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_5_7_10(){\n return Math.random()\n}\n\nfunction f0_5_7_11(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_5_7(){\n f0_5_7_0();\n f0_5_7_1();\n f0_5_7_2();\n f0_5_7_3();\n f0_5_7_4();\n f0_5_7_5();\n f0_5_7_6();\n f0_5_7_7();\n f0_5_7_8();\n f0_5_7_9();\n f0_5_7_10();\n f0_5_7_11();\n}\n\nfunction f0_5_8_0(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_5_8_1(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_5_8_2(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_5_8_3(){\n return Math.random()\n}\n\nfunction f0_5_8_4(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_5_8_5(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_5_8_6(){\n return Math.random()\n}\n\nfunction f0_5_8_7(){\n return Math.random()\n}\n\nfunction f0_5_8_8(){\n return isNaN(undefined)\n}\n\nfunction f0_5_8_9(){\n return Math.random()\n}\n\nfunction f0_5_8_10(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_5_8_11(){\n return isNaN(undefined)\n}\n\nfunction f0_5_8(){\n f0_5_8_0();\n f0_5_8_1();\n f0_5_8_2();\n f0_5_8_3();\n f0_5_8_4();\n f0_5_8_5();\n f0_5_8_6();\n f0_5_8_7();\n f0_5_8_8();\n f0_5_8_9();\n f0_5_8_10();\n f0_5_8_11();\n}\n\nfunction f0_5_9_0(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_5_9_1(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_5_9_2(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_5_9_3(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_5_9_4(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_5_9_5(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_5_9_6(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_5_9_7(){\n return Math.random()\n}\n\nfunction f0_5_9_8(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_5_9_9(){\n return Math.random()\n}\n\nfunction f0_5_9_10(){\n return Math.random()\n}\n\nfunction f0_5_9_11(){\n return isNaN(undefined)\n}\n\nfunction f0_5_9(){\n f0_5_9_0();\n f0_5_9_1();\n f0_5_9_2();\n f0_5_9_3();\n f0_5_9_4();\n f0_5_9_5();\n f0_5_9_6();\n f0_5_9_7();\n f0_5_9_8();\n f0_5_9_9();\n f0_5_9_10();\n f0_5_9_11();\n}\n\nfunction f0_5_10_0(){\n return isNaN(undefined)\n}\n\nfunction f0_5_10_1(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_5_10_2(){\n return isNaN(undefined)\n}\n\nfunction f0_5_10_3(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_5_10_4(){\n return Math.random()\n}\n\nfunction f0_5_10_5(){\n return Math.random()\n}\n\nfunction f0_5_10_6(){\n return Math.random()\n}\n\nfunction f0_5_10_7(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_5_10_8(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_5_10_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_5_10_10(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_5_10_11(){\n return Math.random()\n}\n\nfunction f0_5_10(){\n f0_5_10_0();\n f0_5_10_1();\n f0_5_10_2();\n f0_5_10_3();\n f0_5_10_4();\n f0_5_10_5();\n f0_5_10_6();\n f0_5_10_7();\n f0_5_10_8();\n f0_5_10_9();\n f0_5_10_10();\n f0_5_10_11();\n}\n\nfunction f0_5_11_0(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_5_11_1(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_5_11_2(){\n return Math.random()\n}\n\nfunction f0_5_11_3(){\n return Math.random()\n}\n\nfunction f0_5_11_4(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_5_11_5(){\n return Math.random()\n}\n\nfunction f0_5_11_6(){\n return Math.random()\n}\n\nfunction f0_5_11_7(){\n return isNaN(undefined)\n}\n\nfunction f0_5_11_8(){\n return isNaN(undefined)\n}\n\nfunction f0_5_11_9(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_5_11_10(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_5_11_11(){\n return isNaN(undefined)\n}\n\nfunction f0_5_11(){\n f0_5_11_0();\n f0_5_11_1();\n f0_5_11_2();\n f0_5_11_3();\n f0_5_11_4();\n f0_5_11_5();\n f0_5_11_6();\n f0_5_11_7();\n f0_5_11_8();\n f0_5_11_9();\n f0_5_11_10();\n f0_5_11_11();\n}\n\nfunction f0_5(){\n f0_5_0();\n f0_5_1();\n f0_5_2();\n f0_5_3();\n f0_5_4();\n f0_5_5();\n f0_5_6();\n f0_5_7();\n f0_5_8();\n f0_5_9();\n f0_5_10();\n f0_5_11();\n\n}\n\nfunction f0_6_0_0(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_6_0_1(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_6_0_2(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_6_0_3(){\n return Math.random()\n}\n\nfunction f0_6_0_4(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_6_0_5(){\n return isNaN(undefined)\n}\n\nfunction f0_6_0_6(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_6_0_7(){\n return Math.random()\n}\n\nfunction f0_6_0_8(){\n return isNaN(undefined)\n}\n\nfunction f0_6_0_9(){\n return isNaN(undefined)\n}\n\nfunction f0_6_0_10(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_6_0_11(){\n return isNaN(undefined)\n}\n\nfunction f0_6_0(){\n f0_6_0_0();\n f0_6_0_1();\n f0_6_0_2();\n f0_6_0_3();\n f0_6_0_4();\n f0_6_0_5();\n f0_6_0_6();\n f0_6_0_7();\n f0_6_0_8();\n f0_6_0_9();\n f0_6_0_10();\n f0_6_0_11();\n}\n\nfunction f0_6_1_0(){\n return isNaN(undefined)\n}\n\nfunction f0_6_1_1(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_6_1_2(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_6_1_3(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_6_1_4(){\n return Math.random()\n}\n\nfunction f0_6_1_5(){\n return isNaN(undefined)\n}\n\nfunction f0_6_1_6(){\n return isNaN(undefined)\n}\n\nfunction f0_6_1_7(){\n return isNaN(undefined)\n}\n\nfunction f0_6_1_8(){\n return Math.random()\n}\n\nfunction f0_6_1_9(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_6_1_10(){\n return Math.random()\n}\n\nfunction f0_6_1_11(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_6_1(){\n f0_6_1_0();\n f0_6_1_1();\n f0_6_1_2();\n f0_6_1_3();\n f0_6_1_4();\n f0_6_1_5();\n f0_6_1_6();\n f0_6_1_7();\n f0_6_1_8();\n f0_6_1_9();\n f0_6_1_10();\n f0_6_1_11();\n}\n\nfunction f0_6_2_0(){\n return isNaN(undefined)\n}\n\nfunction f0_6_2_1(){\n return Math.random()\n}\n\nfunction f0_6_2_2(){\n return isNaN(undefined)\n}\n\nfunction f0_6_2_3(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_6_2_4(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_6_2_5(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_6_2_6(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_6_2_7(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_6_2_8(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_6_2_9(){\n return Math.random()\n}\n\nfunction f0_6_2_10(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_6_2_11(){\n return isNaN(undefined)\n}\n\nfunction f0_6_2(){\n f0_6_2_0();\n f0_6_2_1();\n f0_6_2_2();\n f0_6_2_3();\n f0_6_2_4();\n f0_6_2_5();\n f0_6_2_6();\n f0_6_2_7();\n f0_6_2_8();\n f0_6_2_9();\n f0_6_2_10();\n f0_6_2_11();\n}\n\nfunction f0_6_3_0(){\n return Math.random()\n}\n\nfunction f0_6_3_1(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_6_3_2(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_6_3_3(){\n return isNaN(undefined)\n}\n\nfunction f0_6_3_4(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_6_3_5(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_6_3_6(){\n return Math.random()\n}\n\nfunction f0_6_3_7(){\n return isNaN(undefined)\n}\n\nfunction f0_6_3_8(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_6_3_9(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_6_3_10(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_6_3_11(){\n return Math.random()\n}\n\nfunction f0_6_3(){\n f0_6_3_0();\n f0_6_3_1();\n f0_6_3_2();\n f0_6_3_3();\n f0_6_3_4();\n f0_6_3_5();\n f0_6_3_6();\n f0_6_3_7();\n f0_6_3_8();\n f0_6_3_9();\n f0_6_3_10();\n f0_6_3_11();\n}\n\nfunction f0_6_4_0(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_6_4_1(){\n return Math.random()\n}\n\nfunction f0_6_4_2(){\n return isNaN(undefined)\n}\n\nfunction f0_6_4_3(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_6_4_4(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_6_4_5(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_6_4_6(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_6_4_7(){\n return Math.random()\n}\n\nfunction f0_6_4_8(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_6_4_9(){\n return isNaN(undefined)\n}\n\nfunction f0_6_4_10(){\n return isNaN(undefined)\n}\n\nfunction f0_6_4_11(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_6_4(){\n f0_6_4_0();\n f0_6_4_1();\n f0_6_4_2();\n f0_6_4_3();\n f0_6_4_4();\n f0_6_4_5();\n f0_6_4_6();\n f0_6_4_7();\n f0_6_4_8();\n f0_6_4_9();\n f0_6_4_10();\n f0_6_4_11();\n}\n\nfunction f0_6_5_0(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_6_5_1(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_6_5_2(){\n return isNaN(undefined)\n}\n\nfunction f0_6_5_3(){\n return isNaN(undefined)\n}\n\nfunction f0_6_5_4(){\n return Math.random()\n}\n\nfunction f0_6_5_5(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_6_5_6(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_6_5_7(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_6_5_8(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_6_5_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_6_5_10(){\n return isNaN(undefined)\n}\n\nfunction f0_6_5_11(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_6_5(){\n f0_6_5_0();\n f0_6_5_1();\n f0_6_5_2();\n f0_6_5_3();\n f0_6_5_4();\n f0_6_5_5();\n f0_6_5_6();\n f0_6_5_7();\n f0_6_5_8();\n f0_6_5_9();\n f0_6_5_10();\n f0_6_5_11();\n}\n\nfunction f0_6_6_0(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_6_6_1(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_6_6_2(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_6_6_3(){\n return Math.random()\n}\n\nfunction f0_6_6_4(){\n return isNaN(undefined)\n}\n\nfunction f0_6_6_5(){\n return isNaN(undefined)\n}\n\nfunction f0_6_6_6(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_6_6_7(){\n return isNaN(undefined)\n}\n\nfunction f0_6_6_8(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_6_6_9(){\n return isNaN(undefined)\n}\n\nfunction f0_6_6_10(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_6_6_11(){\n return isNaN(undefined)\n}\n\nfunction f0_6_6(){\n f0_6_6_0();\n f0_6_6_1();\n f0_6_6_2();\n f0_6_6_3();\n f0_6_6_4();\n f0_6_6_5();\n f0_6_6_6();\n f0_6_6_7();\n f0_6_6_8();\n f0_6_6_9();\n f0_6_6_10();\n f0_6_6_11();\n}\n\nfunction f0_6_7_0(){\n return isNaN(undefined)\n}\n\nfunction f0_6_7_1(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_6_7_2(){\n return Math.random()\n}\n\nfunction f0_6_7_3(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_6_7_4(){\n return Math.random()\n}\n\nfunction f0_6_7_5(){\n return isNaN(undefined)\n}\n\nfunction f0_6_7_6(){\n return isNaN(undefined)\n}\n\nfunction f0_6_7_7(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_6_7_8(){\n return Math.random()\n}\n\nfunction f0_6_7_9(){\n return Math.random()\n}\n\nfunction f0_6_7_10(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_6_7_11(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_6_7(){\n f0_6_7_0();\n f0_6_7_1();\n f0_6_7_2();\n f0_6_7_3();\n f0_6_7_4();\n f0_6_7_5();\n f0_6_7_6();\n f0_6_7_7();\n f0_6_7_8();\n f0_6_7_9();\n f0_6_7_10();\n f0_6_7_11();\n}\n\nfunction f0_6_8_0(){\n return isNaN(undefined)\n}\n\nfunction f0_6_8_1(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_6_8_2(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_6_8_3(){\n return isNaN(undefined)\n}\n\nfunction f0_6_8_4(){\n return isNaN(undefined)\n}\n\nfunction f0_6_8_5(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_6_8_6(){\n return isNaN(undefined)\n}\n\nfunction f0_6_8_7(){\n return Math.random()\n}\n\nfunction f0_6_8_8(){\n return Math.random()\n}\n\nfunction f0_6_8_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_6_8_10(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_6_8_11(){\n return Math.random()\n}\n\nfunction f0_6_8(){\n f0_6_8_0();\n f0_6_8_1();\n f0_6_8_2();\n f0_6_8_3();\n f0_6_8_4();\n f0_6_8_5();\n f0_6_8_6();\n f0_6_8_7();\n f0_6_8_8();\n f0_6_8_9();\n f0_6_8_10();\n f0_6_8_11();\n}\n\nfunction f0_6_9_0(){\n return isNaN(undefined)\n}\n\nfunction f0_6_9_1(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_6_9_2(){\n return isNaN(undefined)\n}\n\nfunction f0_6_9_3(){\n return Math.random()\n}\n\nfunction f0_6_9_4(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_6_9_5(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_6_9_6(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_6_9_7(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_6_9_8(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_6_9_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_6_9_10(){\n return isNaN(undefined)\n}\n\nfunction f0_6_9_11(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_6_9(){\n f0_6_9_0();\n f0_6_9_1();\n f0_6_9_2();\n f0_6_9_3();\n f0_6_9_4();\n f0_6_9_5();\n f0_6_9_6();\n f0_6_9_7();\n f0_6_9_8();\n f0_6_9_9();\n f0_6_9_10();\n f0_6_9_11();\n}\n\nfunction f0_6_10_0(){\n return isNaN(undefined)\n}\n\nfunction f0_6_10_1(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_6_10_2(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_6_10_3(){\n return isNaN(undefined)\n}\n\nfunction f0_6_10_4(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_6_10_5(){\n return Math.random()\n}\n\nfunction f0_6_10_6(){\n return Math.random()\n}\n\nfunction f0_6_10_7(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_6_10_8(){\n return isNaN(undefined)\n}\n\nfunction f0_6_10_9(){\n return Math.random()\n}\n\nfunction f0_6_10_10(){\n return isNaN(undefined)\n}\n\nfunction f0_6_10_11(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_6_10(){\n f0_6_10_0();\n f0_6_10_1();\n f0_6_10_2();\n f0_6_10_3();\n f0_6_10_4();\n f0_6_10_5();\n f0_6_10_6();\n f0_6_10_7();\n f0_6_10_8();\n f0_6_10_9();\n f0_6_10_10();\n f0_6_10_11();\n}\n\nfunction f0_6_11_0(){\n return isNaN(undefined)\n}\n\nfunction f0_6_11_1(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_6_11_2(){\n return Math.random()\n}\n\nfunction f0_6_11_3(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_6_11_4(){\n return Math.random()\n}\n\nfunction f0_6_11_5(){\n return isNaN(undefined)\n}\n\nfunction f0_6_11_6(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_6_11_7(){\n return Math.random()\n}\n\nfunction f0_6_11_8(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_6_11_9(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_6_11_10(){\n return Math.random()\n}\n\nfunction f0_6_11_11(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_6_11(){\n f0_6_11_0();\n f0_6_11_1();\n f0_6_11_2();\n f0_6_11_3();\n f0_6_11_4();\n f0_6_11_5();\n f0_6_11_6();\n f0_6_11_7();\n f0_6_11_8();\n f0_6_11_9();\n f0_6_11_10();\n f0_6_11_11();\n}\n\nfunction f0_6(){\n f0_6_0();\n f0_6_1();\n f0_6_2();\n f0_6_3();\n f0_6_4();\n f0_6_5();\n f0_6_6();\n f0_6_7();\n f0_6_8();\n f0_6_9();\n f0_6_10();\n f0_6_11();\n\n}\n\nfunction f0_7_0_0(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_7_0_1(){\n return Math.random()\n}\n\nfunction f0_7_0_2(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_7_0_3(){\n return isNaN(undefined)\n}\n\nfunction f0_7_0_4(){\n return Math.random()\n}\n\nfunction f0_7_0_5(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_7_0_6(){\n return isNaN(undefined)\n}\n\nfunction f0_7_0_7(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_7_0_8(){\n return Math.random()\n}\n\nfunction f0_7_0_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_7_0_10(){\n return isNaN(undefined)\n}\n\nfunction f0_7_0_11(){\n return isNaN(undefined)\n}\n\nfunction f0_7_0(){\n f0_7_0_0();\n f0_7_0_1();\n f0_7_0_2();\n f0_7_0_3();\n f0_7_0_4();\n f0_7_0_5();\n f0_7_0_6();\n f0_7_0_7();\n f0_7_0_8();\n f0_7_0_9();\n f0_7_0_10();\n f0_7_0_11();\n}\n\nfunction f0_7_1_0(){\n return Math.random()\n}\n\nfunction f0_7_1_1(){\n return Math.random()\n}\n\nfunction f0_7_1_2(){\n return Math.random()\n}\n\nfunction f0_7_1_3(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_7_1_4(){\n return Math.random()\n}\n\nfunction f0_7_1_5(){\n return isNaN(undefined)\n}\n\nfunction f0_7_1_6(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_7_1_7(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_7_1_8(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_7_1_9(){\n return Math.random()\n}\n\nfunction f0_7_1_10(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_7_1_11(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_7_1(){\n f0_7_1_0();\n f0_7_1_1();\n f0_7_1_2();\n f0_7_1_3();\n f0_7_1_4();\n f0_7_1_5();\n f0_7_1_6();\n f0_7_1_7();\n f0_7_1_8();\n f0_7_1_9();\n f0_7_1_10();\n f0_7_1_11();\n}\n\nfunction f0_7_2_0(){\n return isNaN(undefined)\n}\n\nfunction f0_7_2_1(){\n return Math.random()\n}\n\nfunction f0_7_2_2(){\n return isNaN(undefined)\n}\n\nfunction f0_7_2_3(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_7_2_4(){\n return isNaN(undefined)\n}\n\nfunction f0_7_2_5(){\n return Math.random()\n}\n\nfunction f0_7_2_6(){\n return Math.random()\n}\n\nfunction f0_7_2_7(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_7_2_8(){\n return isNaN(undefined)\n}\n\nfunction f0_7_2_9(){\n return isNaN(undefined)\n}\n\nfunction f0_7_2_10(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_7_2_11(){\n return isNaN(undefined)\n}\n\nfunction f0_7_2(){\n f0_7_2_0();\n f0_7_2_1();\n f0_7_2_2();\n f0_7_2_3();\n f0_7_2_4();\n f0_7_2_5();\n f0_7_2_6();\n f0_7_2_7();\n f0_7_2_8();\n f0_7_2_9();\n f0_7_2_10();\n f0_7_2_11();\n}\n\nfunction f0_7_3_0(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_7_3_1(){\n return isNaN(undefined)\n}\n\nfunction f0_7_3_2(){\n return isNaN(undefined)\n}\n\nfunction f0_7_3_3(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_7_3_4(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_7_3_5(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_7_3_6(){\n return isNaN(undefined)\n}\n\nfunction f0_7_3_7(){\n return Math.random()\n}\n\nfunction f0_7_3_8(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_7_3_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_7_3_10(){\n return isNaN(undefined)\n}\n\nfunction f0_7_3_11(){\n return isNaN(undefined)\n}\n\nfunction f0_7_3(){\n f0_7_3_0();\n f0_7_3_1();\n f0_7_3_2();\n f0_7_3_3();\n f0_7_3_4();\n f0_7_3_5();\n f0_7_3_6();\n f0_7_3_7();\n f0_7_3_8();\n f0_7_3_9();\n f0_7_3_10();\n f0_7_3_11();\n}\n\nfunction f0_7_4_0(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_7_4_1(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_7_4_2(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_7_4_3(){\n return Math.random()\n}\n\nfunction f0_7_4_4(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_7_4_5(){\n return isNaN(undefined)\n}\n\nfunction f0_7_4_6(){\n return Math.random()\n}\n\nfunction f0_7_4_7(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_7_4_8(){\n return isNaN(undefined)\n}\n\nfunction f0_7_4_9(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_7_4_10(){\n return isNaN(undefined)\n}\n\nfunction f0_7_4_11(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_7_4(){\n f0_7_4_0();\n f0_7_4_1();\n f0_7_4_2();\n f0_7_4_3();\n f0_7_4_4();\n f0_7_4_5();\n f0_7_4_6();\n f0_7_4_7();\n f0_7_4_8();\n f0_7_4_9();\n f0_7_4_10();\n f0_7_4_11();\n}\n\nfunction f0_7_5_0(){\n return Math.random()\n}\n\nfunction f0_7_5_1(){\n return Math.random()\n}\n\nfunction f0_7_5_2(){\n return isNaN(undefined)\n}\n\nfunction f0_7_5_3(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_7_5_4(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_7_5_5(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_7_5_6(){\n return isNaN(undefined)\n}\n\nfunction f0_7_5_7(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_7_5_8(){\n return isNaN(undefined)\n}\n\nfunction f0_7_5_9(){\n return isNaN(undefined)\n}\n\nfunction f0_7_5_10(){\n return isNaN(undefined)\n}\n\nfunction f0_7_5_11(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_7_5(){\n f0_7_5_0();\n f0_7_5_1();\n f0_7_5_2();\n f0_7_5_3();\n f0_7_5_4();\n f0_7_5_5();\n f0_7_5_6();\n f0_7_5_7();\n f0_7_5_8();\n f0_7_5_9();\n f0_7_5_10();\n f0_7_5_11();\n}\n\nfunction f0_7_6_0(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_7_6_1(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_7_6_2(){\n return Math.random()\n}\n\nfunction f0_7_6_3(){\n return Math.random()\n}\n\nfunction f0_7_6_4(){\n return isNaN(undefined)\n}\n\nfunction f0_7_6_5(){\n return isNaN(undefined)\n}\n\nfunction f0_7_6_6(){\n return Math.random()\n}\n\nfunction f0_7_6_7(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_7_6_8(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_7_6_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_7_6_10(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_7_6_11(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_7_6(){\n f0_7_6_0();\n f0_7_6_1();\n f0_7_6_2();\n f0_7_6_3();\n f0_7_6_4();\n f0_7_6_5();\n f0_7_6_6();\n f0_7_6_7();\n f0_7_6_8();\n f0_7_6_9();\n f0_7_6_10();\n f0_7_6_11();\n}\n\nfunction f0_7_7_0(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_7_7_1(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_7_7_2(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_7_7_3(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_7_7_4(){\n return isNaN(undefined)\n}\n\nfunction f0_7_7_5(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_7_7_6(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_7_7_7(){\n return Math.random()\n}\n\nfunction f0_7_7_8(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_7_7_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_7_7_10(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_7_7_11(){\n return Math.random()\n}\n\nfunction f0_7_7(){\n f0_7_7_0();\n f0_7_7_1();\n f0_7_7_2();\n f0_7_7_3();\n f0_7_7_4();\n f0_7_7_5();\n f0_7_7_6();\n f0_7_7_7();\n f0_7_7_8();\n f0_7_7_9();\n f0_7_7_10();\n f0_7_7_11();\n}\n\nfunction f0_7_8_0(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_7_8_1(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_7_8_2(){\n return Math.random()\n}\n\nfunction f0_7_8_3(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_7_8_4(){\n return isNaN(undefined)\n}\n\nfunction f0_7_8_5(){\n return isNaN(undefined)\n}\n\nfunction f0_7_8_6(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_7_8_7(){\n return Math.random()\n}\n\nfunction f0_7_8_8(){\n return isNaN(undefined)\n}\n\nfunction f0_7_8_9(){\n return isNaN(undefined)\n}\n\nfunction f0_7_8_10(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_7_8_11(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_7_8(){\n f0_7_8_0();\n f0_7_8_1();\n f0_7_8_2();\n f0_7_8_3();\n f0_7_8_4();\n f0_7_8_5();\n f0_7_8_6();\n f0_7_8_7();\n f0_7_8_8();\n f0_7_8_9();\n f0_7_8_10();\n f0_7_8_11();\n}\n\nfunction f0_7_9_0(){\n return Math.random()\n}\n\nfunction f0_7_9_1(){\n return Math.random()\n}\n\nfunction f0_7_9_2(){\n return Math.random()\n}\n\nfunction f0_7_9_3(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_7_9_4(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_7_9_5(){\n return isNaN(undefined)\n}\n\nfunction f0_7_9_6(){\n return Math.random()\n}\n\nfunction f0_7_9_7(){\n return Math.random()\n}\n\nfunction f0_7_9_8(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_7_9_9(){\n return isNaN(undefined)\n}\n\nfunction f0_7_9_10(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_7_9_11(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_7_9(){\n f0_7_9_0();\n f0_7_9_1();\n f0_7_9_2();\n f0_7_9_3();\n f0_7_9_4();\n f0_7_9_5();\n f0_7_9_6();\n f0_7_9_7();\n f0_7_9_8();\n f0_7_9_9();\n f0_7_9_10();\n f0_7_9_11();\n}\n\nfunction f0_7_10_0(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_7_10_1(){\n return Math.random()\n}\n\nfunction f0_7_10_2(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_7_10_3(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_7_10_4(){\n return isNaN(undefined)\n}\n\nfunction f0_7_10_5(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_7_10_6(){\n return isNaN(undefined)\n}\n\nfunction f0_7_10_7(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_7_10_8(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_7_10_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_7_10_10(){\n return isNaN(undefined)\n}\n\nfunction f0_7_10_11(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_7_10(){\n f0_7_10_0();\n f0_7_10_1();\n f0_7_10_2();\n f0_7_10_3();\n f0_7_10_4();\n f0_7_10_5();\n f0_7_10_6();\n f0_7_10_7();\n f0_7_10_8();\n f0_7_10_9();\n f0_7_10_10();\n f0_7_10_11();\n}\n\nfunction f0_7_11_0(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_7_11_1(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_7_11_2(){\n return isNaN(undefined)\n}\n\nfunction f0_7_11_3(){\n return isNaN(undefined)\n}\n\nfunction f0_7_11_4(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_7_11_5(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_7_11_6(){\n return Math.random()\n}\n\nfunction f0_7_11_7(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_7_11_8(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_7_11_9(){\n return isNaN(undefined)\n}\n\nfunction f0_7_11_10(){\n return Math.random()\n}\n\nfunction f0_7_11_11(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_7_11(){\n f0_7_11_0();\n f0_7_11_1();\n f0_7_11_2();\n f0_7_11_3();\n f0_7_11_4();\n f0_7_11_5();\n f0_7_11_6();\n f0_7_11_7();\n f0_7_11_8();\n f0_7_11_9();\n f0_7_11_10();\n f0_7_11_11();\n}\n\nfunction f0_7(){\n f0_7_0();\n f0_7_1();\n f0_7_2();\n f0_7_3();\n f0_7_4();\n f0_7_5();\n f0_7_6();\n f0_7_7();\n f0_7_8();\n f0_7_9();\n f0_7_10();\n f0_7_11();\n\n}\n\nfunction f0_8_0_0(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_8_0_1(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_8_0_2(){\n return Math.random()\n}\n\nfunction f0_8_0_3(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_8_0_4(){\n return Math.random()\n}\n\nfunction f0_8_0_5(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_8_0_6(){\n return Math.random()\n}\n\nfunction f0_8_0_7(){\n return Math.random()\n}\n\nfunction f0_8_0_8(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_8_0_9(){\n return Math.random()\n}\n\nfunction f0_8_0_10(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_8_0_11(){\n return isNaN(undefined)\n}\n\nfunction f0_8_0(){\n f0_8_0_0();\n f0_8_0_1();\n f0_8_0_2();\n f0_8_0_3();\n f0_8_0_4();\n f0_8_0_5();\n f0_8_0_6();\n f0_8_0_7();\n f0_8_0_8();\n f0_8_0_9();\n f0_8_0_10();\n f0_8_0_11();\n}\n\nfunction f0_8_1_0(){\n return Math.random()\n}\n\nfunction f0_8_1_1(){\n return Math.random()\n}\n\nfunction f0_8_1_2(){\n return Math.random()\n}\n\nfunction f0_8_1_3(){\n return isNaN(undefined)\n}\n\nfunction f0_8_1_4(){\n return Math.random()\n}\n\nfunction f0_8_1_5(){\n return Math.random()\n}\n\nfunction f0_8_1_6(){\n return isNaN(undefined)\n}\n\nfunction f0_8_1_7(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_8_1_8(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_8_1_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_8_1_10(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_8_1_11(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_8_1(){\n f0_8_1_0();\n f0_8_1_1();\n f0_8_1_2();\n f0_8_1_3();\n f0_8_1_4();\n f0_8_1_5();\n f0_8_1_6();\n f0_8_1_7();\n f0_8_1_8();\n f0_8_1_9();\n f0_8_1_10();\n f0_8_1_11();\n}\n\nfunction f0_8_2_0(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_8_2_1(){\n return isNaN(undefined)\n}\n\nfunction f0_8_2_2(){\n return isNaN(undefined)\n}\n\nfunction f0_8_2_3(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_8_2_4(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_8_2_5(){\n return isNaN(undefined)\n}\n\nfunction f0_8_2_6(){\n return Math.random()\n}\n\nfunction f0_8_2_7(){\n return isNaN(undefined)\n}\n\nfunction f0_8_2_8(){\n return Math.random()\n}\n\nfunction f0_8_2_9(){\n return isNaN(undefined)\n}\n\nfunction f0_8_2_10(){\n return isNaN(undefined)\n}\n\nfunction f0_8_2_11(){\n return isNaN(undefined)\n}\n\nfunction f0_8_2(){\n f0_8_2_0();\n f0_8_2_1();\n f0_8_2_2();\n f0_8_2_3();\n f0_8_2_4();\n f0_8_2_5();\n f0_8_2_6();\n f0_8_2_7();\n f0_8_2_8();\n f0_8_2_9();\n f0_8_2_10();\n f0_8_2_11();\n}\n\nfunction f0_8_3_0(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_8_3_1(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_8_3_2(){\n return isNaN(undefined)\n}\n\nfunction f0_8_3_3(){\n return isNaN(undefined)\n}\n\nfunction f0_8_3_4(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_8_3_5(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_8_3_6(){\n return Math.random()\n}\n\nfunction f0_8_3_7(){\n return isNaN(undefined)\n}\n\nfunction f0_8_3_8(){\n return Math.random()\n}\n\nfunction f0_8_3_9(){\n return Math.random()\n}\n\nfunction f0_8_3_10(){\n return isNaN(undefined)\n}\n\nfunction f0_8_3_11(){\n return Math.random()\n}\n\nfunction f0_8_3(){\n f0_8_3_0();\n f0_8_3_1();\n f0_8_3_2();\n f0_8_3_3();\n f0_8_3_4();\n f0_8_3_5();\n f0_8_3_6();\n f0_8_3_7();\n f0_8_3_8();\n f0_8_3_9();\n f0_8_3_10();\n f0_8_3_11();\n}\n\nfunction f0_8_4_0(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_8_4_1(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_8_4_2(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_8_4_3(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_8_4_4(){\n return Math.random()\n}\n\nfunction f0_8_4_5(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_8_4_6(){\n return isNaN(undefined)\n}\n\nfunction f0_8_4_7(){\n return Math.random()\n}\n\nfunction f0_8_4_8(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_8_4_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_8_4_10(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_8_4_11(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_8_4(){\n f0_8_4_0();\n f0_8_4_1();\n f0_8_4_2();\n f0_8_4_3();\n f0_8_4_4();\n f0_8_4_5();\n f0_8_4_6();\n f0_8_4_7();\n f0_8_4_8();\n f0_8_4_9();\n f0_8_4_10();\n f0_8_4_11();\n}\n\nfunction f0_8_5_0(){\n return isNaN(undefined)\n}\n\nfunction f0_8_5_1(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_8_5_2(){\n return isNaN(undefined)\n}\n\nfunction f0_8_5_3(){\n return isNaN(undefined)\n}\n\nfunction f0_8_5_4(){\n return Math.random()\n}\n\nfunction f0_8_5_5(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_8_5_6(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_8_5_7(){\n return Math.random()\n}\n\nfunction f0_8_5_8(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_8_5_9(){\n return Math.random()\n}\n\nfunction f0_8_5_10(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_8_5_11(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_8_5(){\n f0_8_5_0();\n f0_8_5_1();\n f0_8_5_2();\n f0_8_5_3();\n f0_8_5_4();\n f0_8_5_5();\n f0_8_5_6();\n f0_8_5_7();\n f0_8_5_8();\n f0_8_5_9();\n f0_8_5_10();\n f0_8_5_11();\n}\n\nfunction f0_8_6_0(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_8_6_1(){\n return Math.random()\n}\n\nfunction f0_8_6_2(){\n return isNaN(undefined)\n}\n\nfunction f0_8_6_3(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_8_6_4(){\n return Math.random()\n}\n\nfunction f0_8_6_5(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_8_6_6(){\n return Math.random()\n}\n\nfunction f0_8_6_7(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_8_6_8(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_8_6_9(){\n return Math.random()\n}\n\nfunction f0_8_6_10(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_8_6_11(){\n return isNaN(undefined)\n}\n\nfunction f0_8_6(){\n f0_8_6_0();\n f0_8_6_1();\n f0_8_6_2();\n f0_8_6_3();\n f0_8_6_4();\n f0_8_6_5();\n f0_8_6_6();\n f0_8_6_7();\n f0_8_6_8();\n f0_8_6_9();\n f0_8_6_10();\n f0_8_6_11();\n}\n\nfunction f0_8_7_0(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_8_7_1(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_8_7_2(){\n return Math.random()\n}\n\nfunction f0_8_7_3(){\n return isNaN(undefined)\n}\n\nfunction f0_8_7_4(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_8_7_5(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_8_7_6(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_8_7_7(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_8_7_8(){\n return isNaN(undefined)\n}\n\nfunction f0_8_7_9(){\n return isNaN(undefined)\n}\n\nfunction f0_8_7_10(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_8_7_11(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_8_7(){\n f0_8_7_0();\n f0_8_7_1();\n f0_8_7_2();\n f0_8_7_3();\n f0_8_7_4();\n f0_8_7_5();\n f0_8_7_6();\n f0_8_7_7();\n f0_8_7_8();\n f0_8_7_9();\n f0_8_7_10();\n f0_8_7_11();\n}\n\nfunction f0_8_8_0(){\n return isNaN(undefined)\n}\n\nfunction f0_8_8_1(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_8_8_2(){\n return isNaN(undefined)\n}\n\nfunction f0_8_8_3(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_8_8_4(){\n return Math.random()\n}\n\nfunction f0_8_8_5(){\n return isNaN(undefined)\n}\n\nfunction f0_8_8_6(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_8_8_7(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_8_8_8(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_8_8_9(){\n return Math.random()\n}\n\nfunction f0_8_8_10(){\n return Math.random()\n}\n\nfunction f0_8_8_11(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_8_8(){\n f0_8_8_0();\n f0_8_8_1();\n f0_8_8_2();\n f0_8_8_3();\n f0_8_8_4();\n f0_8_8_5();\n f0_8_8_6();\n f0_8_8_7();\n f0_8_8_8();\n f0_8_8_9();\n f0_8_8_10();\n f0_8_8_11();\n}\n\nfunction f0_8_9_0(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_8_9_1(){\n return isNaN(undefined)\n}\n\nfunction f0_8_9_2(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_8_9_3(){\n return isNaN(undefined)\n}\n\nfunction f0_8_9_4(){\n return isNaN(undefined)\n}\n\nfunction f0_8_9_5(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_8_9_6(){\n return Math.random()\n}\n\nfunction f0_8_9_7(){\n return isNaN(undefined)\n}\n\nfunction f0_8_9_8(){\n return isNaN(undefined)\n}\n\nfunction f0_8_9_9(){\n return isNaN(undefined)\n}\n\nfunction f0_8_9_10(){\n return isNaN(undefined)\n}\n\nfunction f0_8_9_11(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_8_9(){\n f0_8_9_0();\n f0_8_9_1();\n f0_8_9_2();\n f0_8_9_3();\n f0_8_9_4();\n f0_8_9_5();\n f0_8_9_6();\n f0_8_9_7();\n f0_8_9_8();\n f0_8_9_9();\n f0_8_9_10();\n f0_8_9_11();\n}\n\nfunction f0_8_10_0(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_8_10_1(){\n return isNaN(undefined)\n}\n\nfunction f0_8_10_2(){\n return isNaN(undefined)\n}\n\nfunction f0_8_10_3(){\n return Math.random()\n}\n\nfunction f0_8_10_4(){\n return isNaN(undefined)\n}\n\nfunction f0_8_10_5(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_8_10_6(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_8_10_7(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_8_10_8(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_8_10_9(){\n return Math.random()\n}\n\nfunction f0_8_10_10(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_8_10_11(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_8_10(){\n f0_8_10_0();\n f0_8_10_1();\n f0_8_10_2();\n f0_8_10_3();\n f0_8_10_4();\n f0_8_10_5();\n f0_8_10_6();\n f0_8_10_7();\n f0_8_10_8();\n f0_8_10_9();\n f0_8_10_10();\n f0_8_10_11();\n}\n\nfunction f0_8_11_0(){\n return isNaN(undefined)\n}\n\nfunction f0_8_11_1(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_8_11_2(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_8_11_3(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_8_11_4(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_8_11_5(){\n return isNaN(undefined)\n}\n\nfunction f0_8_11_6(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_8_11_7(){\n return Math.random()\n}\n\nfunction f0_8_11_8(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_8_11_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_8_11_10(){\n return Math.random()\n}\n\nfunction f0_8_11_11(){\n return isNaN(undefined)\n}\n\nfunction f0_8_11(){\n f0_8_11_0();\n f0_8_11_1();\n f0_8_11_2();\n f0_8_11_3();\n f0_8_11_4();\n f0_8_11_5();\n f0_8_11_6();\n f0_8_11_7();\n f0_8_11_8();\n f0_8_11_9();\n f0_8_11_10();\n f0_8_11_11();\n}\n\nfunction f0_8(){\n f0_8_0();\n f0_8_1();\n f0_8_2();\n f0_8_3();\n f0_8_4();\n f0_8_5();\n f0_8_6();\n f0_8_7();\n f0_8_8();\n f0_8_9();\n f0_8_10();\n f0_8_11();\n\n}\n\nfunction f0_9_0_0(){\n return Math.random()\n}\n\nfunction f0_9_0_1(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_9_0_2(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_9_0_3(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_9_0_4(){\n return Math.random()\n}\n\nfunction f0_9_0_5(){\n return Math.random()\n}\n\nfunction f0_9_0_6(){\n return isNaN(undefined)\n}\n\nfunction f0_9_0_7(){\n return Math.random()\n}\n\nfunction f0_9_0_8(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_9_0_9(){\n return isNaN(undefined)\n}\n\nfunction f0_9_0_10(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_9_0_11(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_9_0(){\n f0_9_0_0();\n f0_9_0_1();\n f0_9_0_2();\n f0_9_0_3();\n f0_9_0_4();\n f0_9_0_5();\n f0_9_0_6();\n f0_9_0_7();\n f0_9_0_8();\n f0_9_0_9();\n f0_9_0_10();\n f0_9_0_11();\n}\n\nfunction f0_9_1_0(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_9_1_1(){\n return isNaN(undefined)\n}\n\nfunction f0_9_1_2(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_9_1_3(){\n return isNaN(undefined)\n}\n\nfunction f0_9_1_4(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_9_1_5(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_9_1_6(){\n return Math.random()\n}\n\nfunction f0_9_1_7(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_9_1_8(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_9_1_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_9_1_10(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_9_1_11(){\n return isNaN(undefined)\n}\n\nfunction f0_9_1(){\n f0_9_1_0();\n f0_9_1_1();\n f0_9_1_2();\n f0_9_1_3();\n f0_9_1_4();\n f0_9_1_5();\n f0_9_1_6();\n f0_9_1_7();\n f0_9_1_8();\n f0_9_1_9();\n f0_9_1_10();\n f0_9_1_11();\n}\n\nfunction f0_9_2_0(){\n return isNaN(undefined)\n}\n\nfunction f0_9_2_1(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_9_2_2(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_9_2_3(){\n return Math.random()\n}\n\nfunction f0_9_2_4(){\n return isNaN(undefined)\n}\n\nfunction f0_9_2_5(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_9_2_6(){\n return isNaN(undefined)\n}\n\nfunction f0_9_2_7(){\n return Math.random()\n}\n\nfunction f0_9_2_8(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_9_2_9(){\n return isNaN(undefined)\n}\n\nfunction f0_9_2_10(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_9_2_11(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_9_2(){\n f0_9_2_0();\n f0_9_2_1();\n f0_9_2_2();\n f0_9_2_3();\n f0_9_2_4();\n f0_9_2_5();\n f0_9_2_6();\n f0_9_2_7();\n f0_9_2_8();\n f0_9_2_9();\n f0_9_2_10();\n f0_9_2_11();\n}\n\nfunction f0_9_3_0(){\n return Math.random()\n}\n\nfunction f0_9_3_1(){\n return isNaN(undefined)\n}\n\nfunction f0_9_3_2(){\n return Math.random()\n}\n\nfunction f0_9_3_3(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_9_3_4(){\n return Math.random()\n}\n\nfunction f0_9_3_5(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_9_3_6(){\n return Math.random()\n}\n\nfunction f0_9_3_7(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_9_3_8(){\n return Math.random()\n}\n\nfunction f0_9_3_9(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_9_3_10(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_9_3_11(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_9_3(){\n f0_9_3_0();\n f0_9_3_1();\n f0_9_3_2();\n f0_9_3_3();\n f0_9_3_4();\n f0_9_3_5();\n f0_9_3_6();\n f0_9_3_7();\n f0_9_3_8();\n f0_9_3_9();\n f0_9_3_10();\n f0_9_3_11();\n}\n\nfunction f0_9_4_0(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_9_4_1(){\n return Math.random()\n}\n\nfunction f0_9_4_2(){\n return Math.random()\n}\n\nfunction f0_9_4_3(){\n return Math.random()\n}\n\nfunction f0_9_4_4(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_9_4_5(){\n return isNaN(undefined)\n}\n\nfunction f0_9_4_6(){\n return isNaN(undefined)\n}\n\nfunction f0_9_4_7(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_9_4_8(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_9_4_9(){\n return Math.random()\n}\n\nfunction f0_9_4_10(){\n return Math.random()\n}\n\nfunction f0_9_4_11(){\n return isNaN(undefined)\n}\n\nfunction f0_9_4(){\n f0_9_4_0();\n f0_9_4_1();\n f0_9_4_2();\n f0_9_4_3();\n f0_9_4_4();\n f0_9_4_5();\n f0_9_4_6();\n f0_9_4_7();\n f0_9_4_8();\n f0_9_4_9();\n f0_9_4_10();\n f0_9_4_11();\n}\n\nfunction f0_9_5_0(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_9_5_1(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_9_5_2(){\n return isNaN(undefined)\n}\n\nfunction f0_9_5_3(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_9_5_4(){\n return Math.random()\n}\n\nfunction f0_9_5_5(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_9_5_6(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_9_5_7(){\n return isNaN(undefined)\n}\n\nfunction f0_9_5_8(){\n return isNaN(undefined)\n}\n\nfunction f0_9_5_9(){\n return Math.random()\n}\n\nfunction f0_9_5_10(){\n return isNaN(undefined)\n}\n\nfunction f0_9_5_11(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_9_5(){\n f0_9_5_0();\n f0_9_5_1();\n f0_9_5_2();\n f0_9_5_3();\n f0_9_5_4();\n f0_9_5_5();\n f0_9_5_6();\n f0_9_5_7();\n f0_9_5_8();\n f0_9_5_9();\n f0_9_5_10();\n f0_9_5_11();\n}\n\nfunction f0_9_6_0(){\n return Math.random()\n}\n\nfunction f0_9_6_1(){\n return isNaN(undefined)\n}\n\nfunction f0_9_6_2(){\n return isNaN(undefined)\n}\n\nfunction f0_9_6_3(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_9_6_4(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_9_6_5(){\n return Math.random()\n}\n\nfunction f0_9_6_6(){\n return Math.random()\n}\n\nfunction f0_9_6_7(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_9_6_8(){\n return isNaN(undefined)\n}\n\nfunction f0_9_6_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_9_6_10(){\n return Math.random()\n}\n\nfunction f0_9_6_11(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_9_6(){\n f0_9_6_0();\n f0_9_6_1();\n f0_9_6_2();\n f0_9_6_3();\n f0_9_6_4();\n f0_9_6_5();\n f0_9_6_6();\n f0_9_6_7();\n f0_9_6_8();\n f0_9_6_9();\n f0_9_6_10();\n f0_9_6_11();\n}\n\nfunction f0_9_7_0(){\n return Math.random()\n}\n\nfunction f0_9_7_1(){\n return Math.random()\n}\n\nfunction f0_9_7_2(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_9_7_3(){\n return isNaN(undefined)\n}\n\nfunction f0_9_7_4(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_9_7_5(){\n return isNaN(undefined)\n}\n\nfunction f0_9_7_6(){\n return Math.random()\n}\n\nfunction f0_9_7_7(){\n return isNaN(undefined)\n}\n\nfunction f0_9_7_8(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_9_7_9(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_9_7_10(){\n return Math.random()\n}\n\nfunction f0_9_7_11(){\n return isNaN(undefined)\n}\n\nfunction f0_9_7(){\n f0_9_7_0();\n f0_9_7_1();\n f0_9_7_2();\n f0_9_7_3();\n f0_9_7_4();\n f0_9_7_5();\n f0_9_7_6();\n f0_9_7_7();\n f0_9_7_8();\n f0_9_7_9();\n f0_9_7_10();\n f0_9_7_11();\n}\n\nfunction f0_9_8_0(){\n return isNaN(undefined)\n}\n\nfunction f0_9_8_1(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_9_8_2(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_9_8_3(){\n return isNaN(undefined)\n}\n\nfunction f0_9_8_4(){\n return isNaN(undefined)\n}\n\nfunction f0_9_8_5(){\n return Math.random()\n}\n\nfunction f0_9_8_6(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_9_8_7(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_9_8_8(){\n return Math.random()\n}\n\nfunction f0_9_8_9(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_9_8_10(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_9_8_11(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_9_8(){\n f0_9_8_0();\n f0_9_8_1();\n f0_9_8_2();\n f0_9_8_3();\n f0_9_8_4();\n f0_9_8_5();\n f0_9_8_6();\n f0_9_8_7();\n f0_9_8_8();\n f0_9_8_9();\n f0_9_8_10();\n f0_9_8_11();\n}\n\nfunction f0_9_9_0(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_9_9_1(){\n return isNaN(undefined)\n}\n\nfunction f0_9_9_2(){\n return Math.random()\n}\n\nfunction f0_9_9_3(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_9_9_4(){\n return Math.random()\n}\n\nfunction f0_9_9_5(){\n return isNaN(undefined)\n}\n\nfunction f0_9_9_6(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_9_9_7(){\n return isNaN(undefined)\n}\n\nfunction f0_9_9_8(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_9_9_9(){\n return isNaN(undefined)\n}\n\nfunction f0_9_9_10(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_9_9_11(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_9_9(){\n f0_9_9_0();\n f0_9_9_1();\n f0_9_9_2();\n f0_9_9_3();\n f0_9_9_4();\n f0_9_9_5();\n f0_9_9_6();\n f0_9_9_7();\n f0_9_9_8();\n f0_9_9_9();\n f0_9_9_10();\n f0_9_9_11();\n}\n\nfunction f0_9_10_0(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_9_10_1(){\n return isNaN(undefined)\n}\n\nfunction f0_9_10_2(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_9_10_3(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_9_10_4(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_9_10_5(){\n return isNaN(undefined)\n}\n\nfunction f0_9_10_6(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_9_10_7(){\n return isNaN(undefined)\n}\n\nfunction f0_9_10_8(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_9_10_9(){\n return isNaN(undefined)\n}\n\nfunction f0_9_10_10(){\n return isNaN(undefined)\n}\n\nfunction f0_9_10_11(){\n return isNaN(undefined)\n}\n\nfunction f0_9_10(){\n f0_9_10_0();\n f0_9_10_1();\n f0_9_10_2();\n f0_9_10_3();\n f0_9_10_4();\n f0_9_10_5();\n f0_9_10_6();\n f0_9_10_7();\n f0_9_10_8();\n f0_9_10_9();\n f0_9_10_10();\n f0_9_10_11();\n}\n\nfunction f0_9_11_0(){\n return Math.random()\n}\n\nfunction f0_9_11_1(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_9_11_2(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_9_11_3(){\n return isNaN(undefined)\n}\n\nfunction f0_9_11_4(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_9_11_5(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_9_11_6(){\n return isNaN(undefined)\n}\n\nfunction f0_9_11_7(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_9_11_8(){\n return Math.random()\n}\n\nfunction f0_9_11_9(){\n return Math.random()\n}\n\nfunction f0_9_11_10(){\n return isNaN(undefined)\n}\n\nfunction f0_9_11_11(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_9_11(){\n f0_9_11_0();\n f0_9_11_1();\n f0_9_11_2();\n f0_9_11_3();\n f0_9_11_4();\n f0_9_11_5();\n f0_9_11_6();\n f0_9_11_7();\n f0_9_11_8();\n f0_9_11_9();\n f0_9_11_10();\n f0_9_11_11();\n}\n\nfunction f0_9(){\n f0_9_0();\n f0_9_1();\n f0_9_2();\n f0_9_3();\n f0_9_4();\n f0_9_5();\n f0_9_6();\n f0_9_7();\n f0_9_8();\n f0_9_9();\n f0_9_10();\n f0_9_11();\n\n}\n\nfunction f0_10_0_0(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_10_0_1(){\n return isNaN(undefined)\n}\n\nfunction f0_10_0_2(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_10_0_3(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_10_0_4(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_10_0_5(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_10_0_6(){\n return isNaN(undefined)\n}\n\nfunction f0_10_0_7(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_10_0_8(){\n return Math.random()\n}\n\nfunction f0_10_0_9(){\n return isNaN(undefined)\n}\n\nfunction f0_10_0_10(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_10_0_11(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_10_0(){\n f0_10_0_0();\n f0_10_0_1();\n f0_10_0_2();\n f0_10_0_3();\n f0_10_0_4();\n f0_10_0_5();\n f0_10_0_6();\n f0_10_0_7();\n f0_10_0_8();\n f0_10_0_9();\n f0_10_0_10();\n f0_10_0_11();\n}\n\nfunction f0_10_1_0(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_10_1_1(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_10_1_2(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_10_1_3(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_10_1_4(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_10_1_5(){\n return Math.random()\n}\n\nfunction f0_10_1_6(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_10_1_7(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_10_1_8(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_10_1_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_10_1_10(){\n return Math.random()\n}\n\nfunction f0_10_1_11(){\n return isNaN(undefined)\n}\n\nfunction f0_10_1(){\n f0_10_1_0();\n f0_10_1_1();\n f0_10_1_2();\n f0_10_1_3();\n f0_10_1_4();\n f0_10_1_5();\n f0_10_1_6();\n f0_10_1_7();\n f0_10_1_8();\n f0_10_1_9();\n f0_10_1_10();\n f0_10_1_11();\n}\n\nfunction f0_10_2_0(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_10_2_1(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_10_2_2(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_10_2_3(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_10_2_4(){\n return Math.random()\n}\n\nfunction f0_10_2_5(){\n return Math.random()\n}\n\nfunction f0_10_2_6(){\n return Math.random()\n}\n\nfunction f0_10_2_7(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_10_2_8(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_10_2_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_10_2_10(){\n return Math.random()\n}\n\nfunction f0_10_2_11(){\n return isNaN(undefined)\n}\n\nfunction f0_10_2(){\n f0_10_2_0();\n f0_10_2_1();\n f0_10_2_2();\n f0_10_2_3();\n f0_10_2_4();\n f0_10_2_5();\n f0_10_2_6();\n f0_10_2_7();\n f0_10_2_8();\n f0_10_2_9();\n f0_10_2_10();\n f0_10_2_11();\n}\n\nfunction f0_10_3_0(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_10_3_1(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_10_3_2(){\n return isNaN(undefined)\n}\n\nfunction f0_10_3_3(){\n return isNaN(undefined)\n}\n\nfunction f0_10_3_4(){\n return isNaN(undefined)\n}\n\nfunction f0_10_3_5(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_10_3_6(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_10_3_7(){\n return Math.random()\n}\n\nfunction f0_10_3_8(){\n return isNaN(undefined)\n}\n\nfunction f0_10_3_9(){\n return isNaN(undefined)\n}\n\nfunction f0_10_3_10(){\n return Math.random()\n}\n\nfunction f0_10_3_11(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_10_3(){\n f0_10_3_0();\n f0_10_3_1();\n f0_10_3_2();\n f0_10_3_3();\n f0_10_3_4();\n f0_10_3_5();\n f0_10_3_6();\n f0_10_3_7();\n f0_10_3_8();\n f0_10_3_9();\n f0_10_3_10();\n f0_10_3_11();\n}\n\nfunction f0_10_4_0(){\n return Math.random()\n}\n\nfunction f0_10_4_1(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_10_4_2(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_10_4_3(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_10_4_4(){\n return isNaN(undefined)\n}\n\nfunction f0_10_4_5(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_10_4_6(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_10_4_7(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_10_4_8(){\n return isNaN(undefined)\n}\n\nfunction f0_10_4_9(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_10_4_10(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_10_4_11(){\n return Math.random()\n}\n\nfunction f0_10_4(){\n f0_10_4_0();\n f0_10_4_1();\n f0_10_4_2();\n f0_10_4_3();\n f0_10_4_4();\n f0_10_4_5();\n f0_10_4_6();\n f0_10_4_7();\n f0_10_4_8();\n f0_10_4_9();\n f0_10_4_10();\n f0_10_4_11();\n}\n\nfunction f0_10_5_0(){\n return Math.random()\n}\n\nfunction f0_10_5_1(){\n return Math.random()\n}\n\nfunction f0_10_5_2(){\n return isNaN(undefined)\n}\n\nfunction f0_10_5_3(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_10_5_4(){\n return isNaN(undefined)\n}\n\nfunction f0_10_5_5(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_10_5_6(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_10_5_7(){\n return isNaN(undefined)\n}\n\nfunction f0_10_5_8(){\n return isNaN(undefined)\n}\n\nfunction f0_10_5_9(){\n return Math.random()\n}\n\nfunction f0_10_5_10(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_10_5_11(){\n return Math.random()\n}\n\nfunction f0_10_5(){\n f0_10_5_0();\n f0_10_5_1();\n f0_10_5_2();\n f0_10_5_3();\n f0_10_5_4();\n f0_10_5_5();\n f0_10_5_6();\n f0_10_5_7();\n f0_10_5_8();\n f0_10_5_9();\n f0_10_5_10();\n f0_10_5_11();\n}\n\nfunction f0_10_6_0(){\n return Math.random()\n}\n\nfunction f0_10_6_1(){\n return Math.random()\n}\n\nfunction f0_10_6_2(){\n return Math.random()\n}\n\nfunction f0_10_6_3(){\n return isNaN(undefined)\n}\n\nfunction f0_10_6_4(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_10_6_5(){\n return isNaN(undefined)\n}\n\nfunction f0_10_6_6(){\n return isNaN(undefined)\n}\n\nfunction f0_10_6_7(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_10_6_8(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_10_6_9(){\n return isNaN(undefined)\n}\n\nfunction f0_10_6_10(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_10_6_11(){\n return Math.random()\n}\n\nfunction f0_10_6(){\n f0_10_6_0();\n f0_10_6_1();\n f0_10_6_2();\n f0_10_6_3();\n f0_10_6_4();\n f0_10_6_5();\n f0_10_6_6();\n f0_10_6_7();\n f0_10_6_8();\n f0_10_6_9();\n f0_10_6_10();\n f0_10_6_11();\n}\n\nfunction f0_10_7_0(){\n return Math.random()\n}\n\nfunction f0_10_7_1(){\n return Math.random()\n}\n\nfunction f0_10_7_2(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_10_7_3(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_10_7_4(){\n return isNaN(undefined)\n}\n\nfunction f0_10_7_5(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_10_7_6(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_10_7_7(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_10_7_8(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_10_7_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_10_7_10(){\n return isNaN(undefined)\n}\n\nfunction f0_10_7_11(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_10_7(){\n f0_10_7_0();\n f0_10_7_1();\n f0_10_7_2();\n f0_10_7_3();\n f0_10_7_4();\n f0_10_7_5();\n f0_10_7_6();\n f0_10_7_7();\n f0_10_7_8();\n f0_10_7_9();\n f0_10_7_10();\n f0_10_7_11();\n}\n\nfunction f0_10_8_0(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_10_8_1(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_10_8_2(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_10_8_3(){\n return isNaN(undefined)\n}\n\nfunction f0_10_8_4(){\n return isNaN(undefined)\n}\n\nfunction f0_10_8_5(){\n return Math.random()\n}\n\nfunction f0_10_8_6(){\n return isNaN(undefined)\n}\n\nfunction f0_10_8_7(){\n return isNaN(undefined)\n}\n\nfunction f0_10_8_8(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_10_8_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_10_8_10(){\n return isNaN(undefined)\n}\n\nfunction f0_10_8_11(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_10_8(){\n f0_10_8_0();\n f0_10_8_1();\n f0_10_8_2();\n f0_10_8_3();\n f0_10_8_4();\n f0_10_8_5();\n f0_10_8_6();\n f0_10_8_7();\n f0_10_8_8();\n f0_10_8_9();\n f0_10_8_10();\n f0_10_8_11();\n}\n\nfunction f0_10_9_0(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_10_9_1(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_10_9_2(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_10_9_3(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_10_9_4(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_10_9_5(){\n return Math.random()\n}\n\nfunction f0_10_9_6(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_10_9_7(){\n return isNaN(undefined)\n}\n\nfunction f0_10_9_8(){\n return Math.random()\n}\n\nfunction f0_10_9_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_10_9_10(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_10_9_11(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_10_9(){\n f0_10_9_0();\n f0_10_9_1();\n f0_10_9_2();\n f0_10_9_3();\n f0_10_9_4();\n f0_10_9_5();\n f0_10_9_6();\n f0_10_9_7();\n f0_10_9_8();\n f0_10_9_9();\n f0_10_9_10();\n f0_10_9_11();\n}\n\nfunction f0_10_10_0(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_10_10_1(){\n return Math.random()\n}\n\nfunction f0_10_10_2(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_10_10_3(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_10_10_4(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_10_10_5(){\n return isNaN(undefined)\n}\n\nfunction f0_10_10_6(){\n return Math.random()\n}\n\nfunction f0_10_10_7(){\n return Math.random()\n}\n\nfunction f0_10_10_8(){\n return Math.random()\n}\n\nfunction f0_10_10_9(){\n return isNaN(undefined)\n}\n\nfunction f0_10_10_10(){\n return Math.random()\n}\n\nfunction f0_10_10_11(){\n return isNaN(undefined)\n}\n\nfunction f0_10_10(){\n f0_10_10_0();\n f0_10_10_1();\n f0_10_10_2();\n f0_10_10_3();\n f0_10_10_4();\n f0_10_10_5();\n f0_10_10_6();\n f0_10_10_7();\n f0_10_10_8();\n f0_10_10_9();\n f0_10_10_10();\n f0_10_10_11();\n}\n\nfunction f0_10_11_0(){\n return isNaN(undefined)\n}\n\nfunction f0_10_11_1(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_10_11_2(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_10_11_3(){\n return isNaN(undefined)\n}\n\nfunction f0_10_11_4(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_10_11_5(){\n return Math.random()\n}\n\nfunction f0_10_11_6(){\n return isNaN(undefined)\n}\n\nfunction f0_10_11_7(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_10_11_8(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_10_11_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_10_11_10(){\n return isNaN(undefined)\n}\n\nfunction f0_10_11_11(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_10_11(){\n f0_10_11_0();\n f0_10_11_1();\n f0_10_11_2();\n f0_10_11_3();\n f0_10_11_4();\n f0_10_11_5();\n f0_10_11_6();\n f0_10_11_7();\n f0_10_11_8();\n f0_10_11_9();\n f0_10_11_10();\n f0_10_11_11();\n}\n\nfunction f0_10(){\n f0_10_0();\n f0_10_1();\n f0_10_2();\n f0_10_3();\n f0_10_4();\n f0_10_5();\n f0_10_6();\n f0_10_7();\n f0_10_8();\n f0_10_9();\n f0_10_10();\n f0_10_11();\n\n}\n\nfunction f0_11_0_0(){\n return Math.random()\n}\n\nfunction f0_11_0_1(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_11_0_2(){\n return isNaN(undefined)\n}\n\nfunction f0_11_0_3(){\n return Math.random()\n}\n\nfunction f0_11_0_4(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_11_0_5(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_11_0_6(){\n return isNaN(undefined)\n}\n\nfunction f0_11_0_7(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_11_0_8(){\n return Math.random()\n}\n\nfunction f0_11_0_9(){\n return Math.random()\n}\n\nfunction f0_11_0_10(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_11_0_11(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_11_0(){\n f0_11_0_0();\n f0_11_0_1();\n f0_11_0_2();\n f0_11_0_3();\n f0_11_0_4();\n f0_11_0_5();\n f0_11_0_6();\n f0_11_0_7();\n f0_11_0_8();\n f0_11_0_9();\n f0_11_0_10();\n f0_11_0_11();\n}\n\nfunction f0_11_1_0(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_11_1_1(){\n return Math.random()\n}\n\nfunction f0_11_1_2(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_11_1_3(){\n return Math.random()\n}\n\nfunction f0_11_1_4(){\n return isNaN(undefined)\n}\n\nfunction f0_11_1_5(){\n return Math.random()\n}\n\nfunction f0_11_1_6(){\n return isNaN(undefined)\n}\n\nfunction f0_11_1_7(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_11_1_8(){\n return Math.random()\n}\n\nfunction f0_11_1_9(){\n return isNaN(undefined)\n}\n\nfunction f0_11_1_10(){\n return isNaN(undefined)\n}\n\nfunction f0_11_1_11(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_11_1(){\n f0_11_1_0();\n f0_11_1_1();\n f0_11_1_2();\n f0_11_1_3();\n f0_11_1_4();\n f0_11_1_5();\n f0_11_1_6();\n f0_11_1_7();\n f0_11_1_8();\n f0_11_1_9();\n f0_11_1_10();\n f0_11_1_11();\n}\n\nfunction f0_11_2_0(){\n return Math.random()\n}\n\nfunction f0_11_2_1(){\n return isNaN(undefined)\n}\n\nfunction f0_11_2_2(){\n return isNaN(undefined)\n}\n\nfunction f0_11_2_3(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_11_2_4(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_11_2_5(){\n return isNaN(undefined)\n}\n\nfunction f0_11_2_6(){\n return Math.random()\n}\n\nfunction f0_11_2_7(){\n return Math.random()\n}\n\nfunction f0_11_2_8(){\n return Math.random()\n}\n\nfunction f0_11_2_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_11_2_10(){\n return isNaN(undefined)\n}\n\nfunction f0_11_2_11(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_11_2(){\n f0_11_2_0();\n f0_11_2_1();\n f0_11_2_2();\n f0_11_2_3();\n f0_11_2_4();\n f0_11_2_5();\n f0_11_2_6();\n f0_11_2_7();\n f0_11_2_8();\n f0_11_2_9();\n f0_11_2_10();\n f0_11_2_11();\n}\n\nfunction f0_11_3_0(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_11_3_1(){\n return Math.random()\n}\n\nfunction f0_11_3_2(){\n return isNaN(undefined)\n}\n\nfunction f0_11_3_3(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_11_3_4(){\n return Math.random()\n}\n\nfunction f0_11_3_5(){\n return Math.random()\n}\n\nfunction f0_11_3_6(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_11_3_7(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_11_3_8(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_11_3_9(){\n return Math.random()\n}\n\nfunction f0_11_3_10(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_11_3_11(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_11_3(){\n f0_11_3_0();\n f0_11_3_1();\n f0_11_3_2();\n f0_11_3_3();\n f0_11_3_4();\n f0_11_3_5();\n f0_11_3_6();\n f0_11_3_7();\n f0_11_3_8();\n f0_11_3_9();\n f0_11_3_10();\n f0_11_3_11();\n}\n\nfunction f0_11_4_0(){\n return isNaN(undefined)\n}\n\nfunction f0_11_4_1(){\n return Math.random()\n}\n\nfunction f0_11_4_2(){\n return Math.random()\n}\n\nfunction f0_11_4_3(){\n return Math.random()\n}\n\nfunction f0_11_4_4(){\n return Math.random()\n}\n\nfunction f0_11_4_5(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_11_4_6(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_11_4_7(){\n return Math.random()\n}\n\nfunction f0_11_4_8(){\n return Math.random()\n}\n\nfunction f0_11_4_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_11_4_10(){\n return Math.random()\n}\n\nfunction f0_11_4_11(){\n return isNaN(undefined)\n}\n\nfunction f0_11_4(){\n f0_11_4_0();\n f0_11_4_1();\n f0_11_4_2();\n f0_11_4_3();\n f0_11_4_4();\n f0_11_4_5();\n f0_11_4_6();\n f0_11_4_7();\n f0_11_4_8();\n f0_11_4_9();\n f0_11_4_10();\n f0_11_4_11();\n}\n\nfunction f0_11_5_0(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_11_5_1(){\n return Math.random()\n}\n\nfunction f0_11_5_2(){\n return isNaN(undefined)\n}\n\nfunction f0_11_5_3(){\n return isNaN(undefined)\n}\n\nfunction f0_11_5_4(){\n return Math.random()\n}\n\nfunction f0_11_5_5(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_11_5_6(){\n return Math.random()\n}\n\nfunction f0_11_5_7(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_11_5_8(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_11_5_9(){\n return Math.random()\n}\n\nfunction f0_11_5_10(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_11_5_11(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_11_5(){\n f0_11_5_0();\n f0_11_5_1();\n f0_11_5_2();\n f0_11_5_3();\n f0_11_5_4();\n f0_11_5_5();\n f0_11_5_6();\n f0_11_5_7();\n f0_11_5_8();\n f0_11_5_9();\n f0_11_5_10();\n f0_11_5_11();\n}\n\nfunction f0_11_6_0(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_11_6_1(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_11_6_2(){\n return isNaN(undefined)\n}\n\nfunction f0_11_6_3(){\n return isNaN(undefined)\n}\n\nfunction f0_11_6_4(){\n return isNaN(undefined)\n}\n\nfunction f0_11_6_5(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_11_6_6(){\n return Math.random()\n}\n\nfunction f0_11_6_7(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_11_6_8(){\n return Math.random()\n}\n\nfunction f0_11_6_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_11_6_10(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_11_6_11(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_11_6(){\n f0_11_6_0();\n f0_11_6_1();\n f0_11_6_2();\n f0_11_6_3();\n f0_11_6_4();\n f0_11_6_5();\n f0_11_6_6();\n f0_11_6_7();\n f0_11_6_8();\n f0_11_6_9();\n f0_11_6_10();\n f0_11_6_11();\n}\n\nfunction f0_11_7_0(){\n return isNaN(undefined)\n}\n\nfunction f0_11_7_1(){\n return Math.random()\n}\n\nfunction f0_11_7_2(){\n return Math.random()\n}\n\nfunction f0_11_7_3(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_11_7_4(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_11_7_5(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_11_7_6(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_11_7_7(){\n return Math.random()\n}\n\nfunction f0_11_7_8(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_11_7_9(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_11_7_10(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_11_7_11(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_11_7(){\n f0_11_7_0();\n f0_11_7_1();\n f0_11_7_2();\n f0_11_7_3();\n f0_11_7_4();\n f0_11_7_5();\n f0_11_7_6();\n f0_11_7_7();\n f0_11_7_8();\n f0_11_7_9();\n f0_11_7_10();\n f0_11_7_11();\n}\n\nfunction f0_11_8_0(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_11_8_1(){\n return isNaN(undefined)\n}\n\nfunction f0_11_8_2(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_11_8_3(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_11_8_4(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_11_8_5(){\n return Math.random()\n}\n\nfunction f0_11_8_6(){\n return Math.random()\n}\n\nfunction f0_11_8_7(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_11_8_8(){\n return isNaN(undefined)\n}\n\nfunction f0_11_8_9(){\n return isNaN(undefined)\n}\n\nfunction f0_11_8_10(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_11_8_11(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_11_8(){\n f0_11_8_0();\n f0_11_8_1();\n f0_11_8_2();\n f0_11_8_3();\n f0_11_8_4();\n f0_11_8_5();\n f0_11_8_6();\n f0_11_8_7();\n f0_11_8_8();\n f0_11_8_9();\n f0_11_8_10();\n f0_11_8_11();\n}\n\nfunction f0_11_9_0(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_11_9_1(){\n return Math.random()\n}\n\nfunction f0_11_9_2(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_11_9_3(){\n return Math.random()\n}\n\nfunction f0_11_9_4(){\n return isNaN(undefined)\n}\n\nfunction f0_11_9_5(){\n return Math.random()\n}\n\nfunction f0_11_9_6(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_11_9_7(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_11_9_8(){\n return Math.random()\n}\n\nfunction f0_11_9_9(){\n return isNaN(undefined)\n}\n\nfunction f0_11_9_10(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_11_9_11(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_11_9(){\n f0_11_9_0();\n f0_11_9_1();\n f0_11_9_2();\n f0_11_9_3();\n f0_11_9_4();\n f0_11_9_5();\n f0_11_9_6();\n f0_11_9_7();\n f0_11_9_8();\n f0_11_9_9();\n f0_11_9_10();\n f0_11_9_11();\n}\n\nfunction f0_11_10_0(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_11_10_1(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_11_10_2(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_11_10_3(){\n return isNaN(undefined)\n}\n\nfunction f0_11_10_4(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_11_10_5(){\n return isNaN(undefined)\n}\n\nfunction f0_11_10_6(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_11_10_7(){\n return isNaN(undefined)\n}\n\nfunction f0_11_10_8(){\n return Math.random()\n}\n\nfunction f0_11_10_9(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_11_10_10(){\n return isNaN(undefined)\n}\n\nfunction f0_11_10_11(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_11_10(){\n f0_11_10_0();\n f0_11_10_1();\n f0_11_10_2();\n f0_11_10_3();\n f0_11_10_4();\n f0_11_10_5();\n f0_11_10_6();\n f0_11_10_7();\n f0_11_10_8();\n f0_11_10_9();\n f0_11_10_10();\n f0_11_10_11();\n}\n\nfunction f0_11_11_0(){\n return Math.random()\n}\n\nfunction f0_11_11_1(){\n return isNaN(undefined)\n}\n\nfunction f0_11_11_2(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_11_11_3(){\n return isNaN(undefined)\n}\n\nfunction f0_11_11_4(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_11_11_5(){\n return isNaN(undefined)\n}\n\nfunction f0_11_11_6(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_11_11_7(){\n return isNaN(undefined)\n}\n\nfunction f0_11_11_8(){\n return Math.random()\n}\n\nfunction f0_11_11_9(){\n return Math.random()\n}\n\nfunction f0_11_11_10(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f0_11_11_11(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f0_11_11(){\n f0_11_11_0();\n f0_11_11_1();\n f0_11_11_2();\n f0_11_11_3();\n f0_11_11_4();\n f0_11_11_5();\n f0_11_11_6();\n f0_11_11_7();\n f0_11_11_8();\n f0_11_11_9();\n f0_11_11_10();\n f0_11_11_11();\n}\n\nfunction f0_11(){\n f0_11_0();\n f0_11_1();\n f0_11_2();\n f0_11_3();\n f0_11_4();\n f0_11_5();\n f0_11_6();\n f0_11_7();\n f0_11_8();\n f0_11_9();\n f0_11_10();\n f0_11_11();\n\n}\n\nfunction f0(){\n f0_0();\n f0_1();\n f0_2();\n f0_3();\n f0_4();\n f0_5();\n f0_6();\n f0_7();\n f0_8();\n f0_9();\n f0_10();\n f0_11();\n\n}\n\nfunction f2_0(){\n return Math.random()\n}\n\nfunction f2_1(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f2_2(){\n return isNaN(undefined)\n}\n\nfunction f2_3(){\n return isNaN(undefined)\n}\n\nfunction f2_4(){\n return isNaN(undefined)\n}\n\nfunction f2_5(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f2_6(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f2_7(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f2_8(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f2_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f2_10(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f2_11(){\n return isNaN(undefined)\n}\n\nfunction f1(){\n f1_0();\n f1_1();\n f1_2();\n f1_3();\n f1_4();\n f1_5();\n f1_6();\n f1_7();\n f1_8();\n f1_9();\n f1_10();\n f1_11();\n\n}\n\nfunction f1_0_0(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f1_0_1(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f1_0_2(){\n return Math.random()\n}\n\nfunction f1_0_3(){\n return isNaN(undefined)\n}\n\nfunction f1_0_4(){\n return isNaN(undefined)\n}\n\nfunction f1_0_5(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_0_6(){\n return isNaN(undefined)\n}\n\nfunction f1_0_7(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f1_0_8(){\n return isNaN(undefined)\n}\n\nfunction f1_0_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_0_10(){\n return Math.random()\n}\n\nfunction f1_0_11(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_0(){\n f1_0_0();\n f1_0_1();\n f1_0_2();\n f1_0_3();\n f1_0_4();\n f1_0_5();\n f1_0_6();\n f1_0_7();\n f1_0_8();\n f1_0_9();\n f1_0_10();\n f1_0_11();\n\n}\n\nfunction f1_1_0(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f1_1_1(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_1_2(){\n return isNaN(undefined)\n}\n\nfunction f1_1_3(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f1_1_4(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f1_1_5(){\n return Math.random()\n}\n\nfunction f1_1_6(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_1_7(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_1_8(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_1_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_1_10(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_1_11(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_1(){\n f1_1_0();\n f1_1_1();\n f1_1_2();\n f1_1_3();\n f1_1_4();\n f1_1_5();\n f1_1_6();\n f1_1_7();\n f1_1_8();\n f1_1_9();\n f1_1_10();\n f1_1_11();\n}\n\nfunction f1_2_0(){\n return Math.random()\n}\n\nfunction f1_2_1(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_2_2(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_2_3(){\n return isNaN(undefined)\n}\n\nfunction f1_2_4(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_2_5(){\n return Math.random()\n}\n\nfunction f1_2_6(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f1_2_7(){\n return isNaN(undefined)\n}\n\nfunction f1_2_8(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_2_9(){\n return Math.random()\n}\n\nfunction f1_2_10(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f1_2_11(){\n return Math.random()\n}\n\nfunction f1_2(){\n f1_2_0();\n f1_2_1();\n f1_2_2();\n f1_2_3();\n f1_2_4();\n f1_2_5();\n f1_2_6();\n f1_2_7();\n f1_2_8();\n f1_2_9();\n f1_2_10();\n f1_2_11();\n\n}\n\nfunction f1_3_0(){\n return Math.random()\n}\n\nfunction f1_3_1(){\n return isNaN(undefined)\n}\n\nfunction f1_3_2(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f1_3_3(){\n return isNaN(undefined)\n}\n\nfunction f1_3_4(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f1_3_5(){\n return isNaN(undefined)\n}\n\nfunction f1_3_6(){\n return Math.random()\n}\n\nfunction f1_3_7(){\n return Math.random()\n}\n\nfunction f1_3_8(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f1_3_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_3_10(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_3_11(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f1_3(){\n f1_3_0();\n f1_3_1();\n f1_3_2();\n f1_3_3();\n f1_3_4();\n f1_3_5();\n f1_3_6();\n f1_3_7();\n f1_3_8();\n f1_3_9();\n f1_3_10();\n f1_3_11();\n\n}\n\nfunction f1_4_0(){\n return isNaN(undefined)\n}\n\nfunction f1_4_1(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_4_2(){\n return isNaN(undefined)\n}\n\nfunction f1_4_3(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f1_4_4(){\n return Math.random()\n}\n\nfunction f1_4_5(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f1_4_6(){\n return isNaN(undefined)\n}\n\nfunction f1_4_7(){\n return isNaN(undefined)\n}\n\nfunction f1_4_8(){\n return Math.random()\n}\n\nfunction f1_4_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_4_10(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_4_11(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f1_4(){\n f1_4_0();\n f1_4_1();\n f1_4_2();\n f1_4_3();\n f1_4_4();\n f1_4_5();\n f1_4_6();\n f1_4_7();\n f1_4_8();\n f1_4_9();\n f1_4_10();\n f1_4_11();\n\n}\n\nfunction f1_5_0(){\n return isNaN(undefined)\n}\n\nfunction f1_5_1(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_5_2(){\n return Math.random()\n}\n\nfunction f1_5_3(){\n return isNaN(undefined)\n}\n\nfunction f1_5_4(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_5_5(){\n return isNaN(undefined)\n}\n\nfunction f1_5_6(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_5_7(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_5_8(){\n return Math.random()\n}\n\nfunction f1_5_9(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f1_5_10(){\n return isNaN(undefined)\n}\n\nfunction f1_5_11(){\n return isNaN(undefined)\n}\n\nfunction f1_5(){\n f1_5_0();\n f1_5_1();\n f1_5_2();\n f1_5_3();\n f1_5_4();\n f1_5_5();\n f1_5_6();\n f1_5_7();\n f1_5_8();\n f1_5_9();\n f1_5_10();\n f1_5_11();\n\n}\n\nfunction f1_6_0(){\n return Math.random()\n}\n\nfunction f1_6_1(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f1_6_2(){\n return Math.random()\n}\n\nfunction f1_6_3(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f1_6_4(){\n return Math.random()\n}\n\nfunction f1_6_5(){\n return Math.random()\n}\n\nfunction f1_6_6(){\n return Math.random()\n}\n\nfunction f1_6_7(){\n return Math.random()\n}\n\nfunction f1_6_8(){\n return isNaN(undefined)\n}\n\nfunction f1_6_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_6_10(){\n return Math.random()\n}\n\nfunction f1_6_11(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f1_6(){\n f1_6_0();\n f1_6_1();\n f1_6_2();\n f1_6_3();\n f1_6_4();\n f1_6_5();\n f1_6_6();\n f1_6_7();\n f1_6_8();\n f1_6_9();\n f1_6_10();\n f1_6_11();\n\n}\n\nfunction f1_7_0(){\n return Math.random()\n}\n\nfunction f1_7_1(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_7_2(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_7_3(){\n return Math.random()\n}\n\nfunction f1_7_4(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_7_5(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_7_6(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f1_7_7(){\n return isNaN(undefined)\n}\n\nfunction f1_7_8(){\n return isNaN(undefined)\n}\n\nfunction f1_7_9(){\n return isNaN(undefined)\n}\n\nfunction f1_7_10(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f1_7_11(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f1_7(){\n f1_7_0();\n f1_7_1();\n f1_7_2();\n f1_7_3();\n f1_7_4();\n f1_7_5();\n f1_7_6();\n f1_7_7();\n f1_7_8();\n f1_7_9();\n f1_7_10();\n f1_7_11();\n\n}\n\nfunction f1_8_0(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_8_1(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f1_8_2(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_8_3(){\n return isNaN(undefined)\n}\n\nfunction f1_8_4(){\n return isNaN(undefined)\n}\n\nfunction f1_8_5(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_8_6(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_8_7(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_8_8(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f1_8_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_8_10(){\n return isNaN(undefined)\n}\n\nfunction f1_8_11(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_8(){\n f1_8_0();\n f1_8_1();\n f1_8_2();\n f1_8_3();\n f1_8_4();\n f1_8_5();\n f1_8_6();\n f1_8_7();\n f1_8_8();\n f1_8_9();\n f1_8_10();\n f1_8_11();\n\n}\n\nfunction f1_9_0(){\n return Math.random()\n}\n\nfunction f1_9_1(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_9_2(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f1_9_3(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f1_9_4(){\n return Math.random()\n}\n\nfunction f1_9_5(){\n return isNaN(undefined)\n}\n\nfunction f1_9_6(){\n return isNaN(undefined)\n}\n\nfunction f1_9_7(){\n return Math.random()\n}\n\nfunction f1_9_8(){\n return Math.random()\n}\n\nfunction f1_9_9(){\n return Math.random()\n}\n\nfunction f1_9_10(){\n return isNaN(undefined)\n}\n\nfunction f1_9_11(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f1_9(){\n f1_9_0();\n f1_9_1();\n f1_9_2();\n f1_9_3();\n f1_9_4();\n f1_9_5();\n f1_9_6();\n f1_9_7();\n f1_9_8();\n f1_9_9();\n f1_9_10();\n f1_9_11();\n\n}\n\nfunction f1_10_0(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_10_1(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_10_2(){\n return Math.random()\n}\n\nfunction f1_10_3(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f1_10_4(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f1_10_5(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_10_6(){\n return Math.random()\n}\n\nfunction f1_10_7(){\n return Math.random()\n}\n\nfunction f1_10_8(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_10_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_10_10(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f1_10_11(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_10(){\n f1_10_0();\n f1_10_1();\n f1_10_2();\n f1_10_3();\n f1_10_4();\n f1_10_5();\n f1_10_6();\n f1_10_7();\n f1_10_8();\n f1_10_9();\n f1_10_10();\n f1_10_11();\n\n}\n\nfunction f1_11_0(){\n return isNaN(undefined)\n}\n\nfunction f1_11_1(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_11_2(){\n return isNaN(undefined)\n}\n\nfunction f1_11_3(){\n return isNaN(undefined)\n}\n\nfunction f1_11_4(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_11_5(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_11_6(){\n return Math.random()\n}\n\nfunction f1_11_7(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_11_8(){\n return Math.random()\n}\n\nfunction f1_11_9(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_11_10(){\n return encodeURIComponent(\",45098#\\\"¤#\\\"&¤/%\\\"Q\\\"\")\n}\n\nfunction f1_11_11(){\n return Math.random()\n}\n\nfunction f1_11(){\n f1_11_0();\n f1_11_1();\n f1_11_2();\n f1_11_3();\n f1_11_4();\n f1_11_5();\n f1_11_6();\n f1_11_7();\n f1_11_8();\n f1_11_9();\n f1_11_10();\n f1_11_11();\n}\n\nfunction f2(){\n f2_0();\n f2_1();\n f2_2();\n f2_3();\n f2_4();\n f2_5();\n f2_6();\n f2_7();\n f2_8();\n f2_9();\n f2_10();\n f2_11();\n\n}\n\nfunction f3(){\n return isNaN(undefined)\n}\n\nfunction f4(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f5(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f6(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f7(){\n return isNaN(undefined)\n}\n\nfunction f8(){\n return Math.max(Math.random(), Math.random())\n}\n\nfunction f9(){\n return isNaN(undefined)\n}\n\nfunction f10(){\n return isNaN(undefined)\n}\n\nfunction f11(){\n return isNaN(undefined)\n}\n\nexport function stepInTest(){\n\n f0();\n f1();\n f2();\n f3();\n f4();\n f5();\n f6();\n f7();\n f8();\n f9();\n f10();\n f11();\n console.log('Done!');\n\n}\n\nexport function debugStatement(){\n\n debugger;\n f0();\n f1();\n f2();\n f3();\n f4();\n f5();\n f6();\n f7();\n f8();\n f9();\n f10();\n f11();\n console.log('Done!');\n\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./src/step-in-test.js","function squareAndOne(arg){\n return (arg * arg) + 1;\n}\nfunction squareUntil(arg, limit){\n if(arg * arg >= limit){\n return arg * arg;\n }else{\n return squareUntil(arg * arg, limit);\n }\n}\n\nfunction addUntil(arg1, arg2, limit){\n if(arg1 + arg2 > limit){\n return arg1 + arg2;\n }else{\n return addUntil(arg1 + arg2, arg2, limit);\n }\n}\n\nfunction testStart(aArg) {\n var r = 10;\n var a = squareAndOne(r);\n var b = squareUntil(r, 99999999999); //recurses 3 times, returns on 4th call\n var c = addUntil(r, 5, 1050); // recurses 208 times and returns on the 209th call\n return a + b + c;\n}\n\nexport default testStart;\n\n\n\n// WEBPACK FOOTER //\n// ./src/step-over-test.js","function f0() {\n f1();\n return Math.random();\n}\n\nfunction f1() {\n f2();\n return Math.random();\n}\n\nfunction f2() {\n f3();\n return Math.random();\n}\n\nfunction f3() {\n f4();\n return Math.random();\n}\n\nfunction f4() {\n f5();\n return Math.random();\n}\n\nfunction f5() {\n f6();\n return Math.random();\n}\n\nfunction f6() {\n f7();\n return Math.random();\n}\n\nfunction f7() {\n f8();\n return Math.random();\n}\n\nfunction f8() {\n f9();\n return Math.random();\n}\n\nfunction f9() {\n f10();\n return Math.random();\n}\n\nfunction f10() {\n f11();\n return Math.random();\n}\n\nfunction f11() {\n f12();\n return Math.random();\n}\n\nfunction f12() {\n f13();\n return Math.random();\n}\n\nfunction f13() {\n f14();\n return Math.random();\n}\n\nfunction f14() {\n f15();\n return Math.random();\n}\n\nfunction f15() {\n f16();\n return Math.random();\n}\n\nfunction f16() {\n f17();\n return Math.random();\n}\n\nfunction f17() {\n f18();\n return Math.random();\n}\n\nfunction f18() {\n f19();\n return Math.random();\n}\n\nfunction f19() {\n f20();\n return Math.random();\n}\n\nfunction f20() {\n f21();\n return Math.random();\n}\n\nfunction f21() {\n f22();\n return Math.random();\n}\n\nfunction f22() {\n f23();\n return Math.random();\n}\n\nfunction f23() {\n f24();\n return Math.random();\n}\n\nfunction f24() {\n f25();\n return Math.random();\n}\n\nfunction f25() {\n f26();\n return Math.random();\n}\n\nfunction f26() {\n f27();\n return Math.random();\n}\n\nfunction f27() {\n f28();\n return Math.random();\n}\n\nfunction f28() {\n f29();\n return Math.random();\n}\n\nfunction f29() {\n f30();\n return Math.random();\n}\n\nfunction f30() {\n f31();\n return Math.random();\n}\n\nfunction f31() {\n f32();\n return Math.random();\n}\n\nfunction f32() {\n f33();\n return Math.random();\n}\n\nfunction f33() {\n f34();\n return Math.random();\n}\n\nfunction f34() {\n f35();\n return Math.random();\n}\n\nfunction f35() {\n f36();\n return Math.random();\n}\n\nfunction f36() {\n f37();\n return Math.random();\n}\n\nfunction f37() {\n f38();\n return Math.random();\n}\n\nfunction f38() {\n f39();\n return Math.random();\n}\n\nfunction f39() {\n f40();\n return Math.random();\n}\n\nfunction f40() {\n f41();\n return Math.random();\n}\n\nfunction f41() {\n f42();\n return Math.random();\n}\n\nfunction f42() {\n f43();\n return Math.random();\n}\n\nfunction f43() {\n f44();\n return Math.random();\n}\n\nfunction f44() {\n f45();\n return Math.random();\n}\n\nfunction f45() {\n f46();\n return Math.random();\n}\n\nfunction f46() {\n f47();\n return Math.random();\n}\n\nfunction f47() {\n f48();\n return Math.random();\n}\n\nfunction f48() {\n f49();\n return Math.random();\n}\n\nfunction f49() {\n f50();\n return Math.random();\n}\n\nfunction f50() {\n f51();\n return Math.random();\n}\n\nfunction f51() {\n f52();\n return Math.random();\n}\n\nfunction f52() {\n f53();\n return Math.random();\n}\n\nfunction f53() {\n f54();\n return Math.random();\n}\n\nfunction f54() {\n f55();\n return Math.random();\n}\n\nfunction f55() {\n f56();\n return Math.random();\n}\n\nfunction f56() {\n f57();\n return Math.random();\n}\n\nfunction f57() {\n f58();\n return Math.random();\n}\n\nfunction f58() {\n f59();\n return Math.random();\n}\n\nfunction f59() {\n f60();\n return Math.random();\n}\n\nfunction f60() {\n f61();\n return Math.random();\n}\n\nfunction f61() {\n f62();\n return Math.random();\n}\n\nfunction f62() {\n f63();\n return Math.random();\n}\n\nfunction f63() {\n f64();\n return Math.random();\n}\n\nfunction f64() {\n f65();\n return Math.random();\n}\n\nfunction f65() {\n f66();\n return Math.random();\n}\n\nfunction f66() {\n f67();\n return Math.random();\n}\n\nfunction f67() {\n f68();\n return Math.random();\n}\n\nfunction f68() {\n f69();\n return Math.random();\n}\n\nfunction f69() {\n f70();\n return Math.random();\n}\n\nfunction f70() {\n f71();\n return Math.random();\n}\n\nfunction f71() {\n f72();\n return Math.random();\n}\n\nfunction f72() {\n f73();\n return Math.random();\n}\n\nfunction f73() {\n f74();\n return Math.random();\n}\n\nfunction f74() {\n f75();\n return Math.random();\n}\n\nfunction f75() {\n f76();\n return Math.random();\n}\n\nfunction f76() {\n f77();\n return Math.random();\n}\n\nfunction f77() {\n f78();\n return Math.random();\n}\n\nfunction f78() {\n f79();\n return Math.random();\n}\n\nfunction f79() {\n f80();\n return Math.random();\n}\n\nfunction f80() {\n f81();\n return Math.random();\n}\n\nfunction f81() {\n f82();\n return Math.random();\n}\n\nfunction f82() {\n f83();\n return Math.random();\n}\n\nfunction f83() {\n f84();\n return Math.random();\n}\n\nfunction f84() {\n f85();\n return Math.random();\n}\n\nfunction f85() {\n f86();\n return Math.random();\n}\n\nfunction f86() {\n f87();\n return Math.random();\n}\n\nfunction f87() {\n f88();\n return Math.random();\n}\n\nfunction f88() {\n f89();\n return Math.random();\n}\n\nfunction f89() {\n f90();\n return Math.random();\n}\n\nfunction f90() {\n f91();\n return Math.random();\n}\n\nfunction f91() {\n f92();\n return Math.random();\n}\n\nfunction f92() {\n f93();\n return Math.random();\n}\n\nfunction f93() {\n f94();\n return Math.random();\n}\n\nfunction f94() {\n f95();\n return Math.random();\n}\n\nfunction f95() {\n f96();\n return Math.random();\n}\n\nfunction f96() {\n f97();\n return Math.random();\n}\n\nfunction f97() {\n f98();\n return Math.random();\n}\n\nfunction f98() {\n f99();\n return Math.random();\n}\n\nfunction f99() {\n f100();\n return Math.random();\n}\n\n\nfunction f100() {\n f101();\n return Math.random();\n}\n\nfunction f101() {\n f102();\n return Math.random();\n}\n\nfunction f102() {\n f103();\n return Math.random();\n}\n\nfunction f103() {\n f104();\n return Math.random();\n}\n\nfunction f104() {\n f105();\n return Math.random();\n}\n\nfunction f105() {\n f106();\n return Math.random();\n}\n\nfunction f106() {\n f107();\n return Math.random();\n}\n\nfunction f107() {\n f108();\n return Math.random();\n}\n\nfunction f108() {\n f109();\n return Math.random();\n}\n\nfunction f109() {\n f110();\n return Math.random();\n}\n\nfunction f110() {\n f111();\n return Math.random();\n}\n\nfunction f111() {\n f112();\n return Math.random();\n}\n\nfunction f112() {\n f113();\n return Math.random();\n}\n\nfunction f113() {\n f114();\n return Math.random();\n}\n\nfunction f114() {\n f115();\n return Math.random();\n}\n\nfunction f115() {\n f116();\n return Math.random();\n}\n\nfunction f116() {\n f117();\n return Math.random();\n}\n\nfunction f117() {\n f118();\n return Math.random();\n}\n\nfunction f118() {\n f119();\n return Math.random();\n}\n\nfunction f119() {\n f120();\n return Math.random();\n}\n\nfunction f120() {\n f121();\n return Math.random();\n}\n\nfunction f121() {\n f122();\n return Math.random();\n}\n\nfunction f122() {\n f123();\n return Math.random();\n}\n\nfunction f123() {\n f124();\n return Math.random();\n}\n\nfunction f124() {\n f125();\n return Math.random();\n}\n\nfunction f125() {\n f126();\n return Math.random();\n}\n\nfunction f126() {\n f127();\n return Math.random();\n}\n\nfunction f127() {\n f128();\n return Math.random();\n}\n\nfunction f128() {\n f129();\n return Math.random();\n}\n\nfunction f129() {\n f130();\n return Math.random();\n}\n\nfunction f130() {\n f131();\n return Math.random();\n}\n\nfunction f131() {\n f132();\n return Math.random();\n}\n\nfunction f132() {\n f133();\n return Math.random();\n}\n\nfunction f133() {\n f134();\n return Math.random();\n}\n\nfunction f134() {\n f135();\n return Math.random();\n}\n\nfunction f135() {\n f136();\n return Math.random();\n}\n\nfunction f136() {\n f137();\n return Math.random();\n}\n\nfunction f137() {\n f138();\n return Math.random();\n}\n\nfunction f138() {\n f139();\n return Math.random();\n}\n\nfunction f139() {\n f140();\n return Math.random();\n}\n\nfunction f140() {\n f141();\n return Math.random();\n}\n\nfunction f141() {\n f142();\n return Math.random();\n}\n\nfunction f142() {\n f143();\n return Math.random();\n}\n\nfunction f143() {\n f144();\n return Math.random();\n}\n\nfunction f144() {\n f145();\n return Math.random();\n}\n\nfunction f145() {\n f146();\n return Math.random();\n}\n\nfunction f146() {\n f147();\n return Math.random();\n}\n\nfunction f147() {\n f148();\n return Math.random();\n}\n\nfunction f148() {\n f149();\n return Math.random();\n}\n\nfunction f149() {\n f150();\n return Math.random();\n}\n\nfunction f150() {\n f151();\n return Math.random();\n}\n\nfunction f151() {\n f152();\n return Math.random();\n}\n\nfunction f152() {\n f153();\n return Math.random();\n}\n\nfunction f153() {\n f154();\n return Math.random();\n}\n\nfunction f154() {\n f155();\n return Math.random();\n}\n\nfunction f155() {\n f156();\n return Math.random();\n}\n\nfunction f156() {\n f157();\n return Math.random();\n}\n\nfunction f157() {\n f158();\n return Math.random();\n}\n\nfunction f158() {\n f159();\n return Math.random();\n}\n\nfunction f159() {\n f160();\n return Math.random();\n}\n\nfunction f160() {\n f161();\n return Math.random();\n}\n\nfunction f161() {\n f162();\n return Math.random();\n}\n\nfunction f162() {\n f163();\n return Math.random();\n}\n\nfunction f163() {\n f164();\n return Math.random();\n}\n\nfunction f164() {\n f165();\n return Math.random();\n}\n\nfunction f165() {\n f166();\n return Math.random();\n}\n\nfunction f166() {\n f167();\n return Math.random();\n}\n\nfunction f167() {\n f168();\n return Math.random();\n}\n\nfunction f168() {\n f169();\n return Math.random();\n}\n\nfunction f169() {\n f170();\n return Math.random();\n}\n\nfunction f170() {\n f171();\n return Math.random();\n}\n\nfunction f171() {\n f172();\n return Math.random();\n}\n\nfunction f172() {\n f173();\n return Math.random();\n}\n\nfunction f173() {\n f174();\n return Math.random();\n}\n\nfunction f174() {\n f175();\n return Math.random();\n}\n\nfunction f175() {\n f176();\n return Math.random();\n}\n\nfunction f176() {\n f177();\n return Math.random();\n}\n\nfunction f177() {\n f178();\n return Math.random();\n}\n\nfunction f178() {\n f179();\n return Math.random();\n}\n\nfunction f179() {\n f180();\n return Math.random();\n}\n\nfunction f180() {\n f181();\n return Math.random();\n}\n\nfunction f181() {\n f182();\n return Math.random();\n}\n\nfunction f182() {\n f183();\n return Math.random();\n}\n\nfunction f183() {\n f184();\n return Math.random();\n}\n\nfunction f184() {\n f185();\n return Math.random();\n}\n\nfunction f185() {\n f186();\n return Math.random();\n}\n\nfunction f186() {\n f187();\n return Math.random();\n}\n\nfunction f187() {\n f188();\n return Math.random();\n}\n\nfunction f188() {\n f189();\n return Math.random();\n}\n\nfunction f189() {\n f190();\n return Math.random();\n}\n\nfunction f190() {\n f191();\n return Math.random();\n}\n\nfunction f191() {\n f192();\n return Math.random();\n}\n\nfunction f192() {\n f193();\n return Math.random();\n}\n\nfunction f193() {\n f194();\n return Math.random();\n}\n\nfunction f194() {\n f195();\n return Math.random();\n}\n\nfunction f195() {\n f196();\n return Math.random();\n}\n\nfunction f196() {\n f197();\n return Math.random();\n}\n\nfunction f197() {\n f198();\n return Math.random();\n}\n\nfunction f198() {\n f199();\n return Math.random();\n}\n\nfunction f199() {\n return Math.random();\n}\n\nexport default f0;\n\n\n\n// WEBPACK FOOTER //\n// ./src/step-out-test.js"],"sourceRoot":""} \ No newline at end of file
diff --git a/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app-build/static/js/minified.js b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app-build/static/js/minified.js
new file mode 100644
index 0000000000..0a1672b892
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app-build/static/js/minified.js
@@ -0,0 +1,2 @@
+(()=>{var e,t,n,r,o={82603:(e,t,n)=>{var r={"./af/amo.js":[87761,7004],"./ar/amo.js":[85723,7496],"./ast/amo.js":[82180,8865],"./az/amo.js":[40159,339],"./bg/amo.js":[13534,9628],"./bn/amo.js":[19583,685],"./bs/amo.js":[24711,3751],"./ca/amo.js":[88233,9918],"./cak/amo.js":[41964,8677],"./cs/amo.js":[55610,4402],"./da/amo.js":[77457,689],"./de/amo.js":[22359,652],"./dsb/amo.js":[60440,7049],"./el/amo.js":[59509,1132],"./en_CA/amo.js":[71553,9419],"./en_GB/amo.js":[93778,7927],"./en_US/amo.js":[35946,7636],"./es/amo.js":[16397,3178],"./et/amo.js":[99677,186],"./eu/amo.js":[58331,458],"./fa/amo.js":[93234,5763],"./fi/amo.js":[86493,972],"./fr/amo.js":[63565,8470],"./fy_NL/amo.js":[20138,673],"./ga_IE/amo.js":[89495,7597],"./he/amo.js":[69983,9300],"./hr/amo.js":[13136,3107],"./hsb/amo.js":[59932,7352],"./hu/amo.js":[56290,9649],"./ia/amo.js":[44432,5039],"./id/amo.js":[95407,7542],"./is/amo.js":[99406,5110],"./it/amo.js":[31661,6918],"./ja/amo.js":[25800,2958],"./ka/amo.js":[3821,2704],"./kab/amo.js":[83514,6897],"./ko/amo.js":[82917,9814],"./lt/amo.js":[13907,7030],"./lv/amo.js":[2787,3957],"./mk/amo.js":[87286,4960],"./mn/amo.js":[18282,5101],"./ms/amo.js":[55497,5256],"./mt/amo.js":[30954,3130],"./nb_NO/amo.js":[78493,6788],"./nl/amo.js":[80097,9988],"./nn_NO/amo.js":[13094,2068],"./pa_IN/amo.js":[23501,3197],"./pl/amo.js":[87918,6737],"./pt_BR/amo.js":[37377,9700],"./pt_PT/amo.js":[98187,7905],"./ro/amo.js":[21598,5490],"./ru/amo.js":[8665,6872],"./sk/amo.js":[33969,2580],"./sl/amo.js":[8607,4469],"./sq/amo.js":[32785,929],"./sv_SE/amo.js":[2431,7284],"./te/amo.js":[91635,9290],"./th/amo.js":[65576,9901],"./tr/amo.js":[81986,3155],"./uk/amo.js":[98707,1818],"./ur/amo.js":[38564,5899],"./vi/amo.js":[61222,6553],"./zh_CN/amo.js":[52008,4872],"./zh_TW/amo.js":[42617,5494]};function o(e){if(!n.o(r,e))return Promise.resolve().then((()=>{var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}));var t=r[e],o=t[0];return n.e(t[1]).then((()=>n.t(o,23)))}o.keys=()=>Object.keys(r),o.id=82603,e.exports=o},66534:(e,t,n)=>{e.exports=n(39425)},17066:e=>{e.exports=window.FormData},96521:e=>{!function(){const t=(e,t)=>e===t?0:e>t?1:-1,n=(e,n)=>e?n?t(e,n):-1:n?1:0,r=(e,r)=>{let o=t(e.a,r.a);return 0!==o?o:(o=n(e.b,r.b),0!==o?o:(o=t(e.c,r.c),0!==o?o:n(e.d,r.d)))},o=e=>!e||/^0+$/.test(e.toString())?0:parseInt(e,10)||e,i=e=>{const t={a:0,b:0,c:0,d:0};if(!e)return t;if("*"===e)return t.a=1/0,t;t.a=parseInt(e,10);let n=e.indexOf(t.a.toString()[0])+1;t.a.toString().startsWith("-")&&n++;const r=e.substr(n);return"+"===r[0]?(t.a+=1,t.b="pre"):r.startsWith("pre")?(t.b="pre",t.c=o(r.substr(3))):r&&(t.b=o(r)),t.c&&(t.d=o(r.substr(t.b.toString().length+t.c.toString().length))),t},a=(e,t)=>{const n=e.split("."),o=t.split("."),a=Math.max(n.length,o.length);for(let e=0;e<a;e++){const t=i(n[e]),a=i(o[e]),u=r(t,a);if(0!==u)return u}return 0};void 0!==e.exports?e.exports={mozCompare:a,parseVersionPart:i}:"undefined"!=typeof window&&(window.mozCompare=a)}()},77565:(e,t,n)=>{"use strict";n.r(t),n.d(t,{addChangeListeners:()=>h,enable:()=>y,getAddon:()=>s,getAddonStatus:()=>u,hasAbuseReportPanelEnabled:()=>l,hasAddonManager:()=>c,install:()=>p,reportAbuse:()=>f,uninstall:()=>d});n(59201),n(86781),n(99918),n(72145),n(45792),n(6893),n(72764),n(83386),n(52906),n(66728),n(42484),n(31815),n(79249),n(38957),n(51913),n(87758),n(53689),n(9229),n(78685),n(28417);var r=n(9119),o=n(2163);function i(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return a(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return a(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){function t(t){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}((function(e){throw e})),f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,u=!0,c=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return u=e.done,e},e:function(e){function t(t){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}((function(e){c=!0,i=e})),f:function(){try{u||null==n.return||n.return()}finally{if(c)throw i}}}}function a(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function u(e){var t=e.addon,n=e.type,r=t.isActive,i=t.isEnabled,a=o.rr;return r&&i?a=o.Hi:o.Yd!==n&&!r&&i&&(a=o.zK),a}function c(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.navigator;return"undefined"!=typeof window&&"mozAddonManager"in(t||window.navigator)}function s(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=n._mozAddonManager,i=void 0===o?window.navigator.mozAddonManager:o;return i||e.exports.hasAddonManager()?i.getAddonByID(t).then((function(e){if(!e)throw new Error("Addon not found");return r.Z.debug("Add-on found",e),e})):Promise.reject(new Error("Cannot check add-on status"))}function l(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.navigator.mozAddonManager;return(e||c())&&e.abuseReportPanelEnabled||!1}function f(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t._mozAddonManager,r=void 0===n?window.navigator.mozAddonManager:n;return l(r)&&r.reportAbuse?r.reportAbuse&&r.reportAbuse(e):Promise.reject(new Error("Cannot report abuse via Firefox"))}function p(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},a=n._log,u=void 0===a?r.Z:a,c=n._mozAddonManager,s=void 0===c?window.navigator.mozAddonManager:c,l=n.hash,f=n.onIgnoredRejection,p=void 0===f?function(){}:f;return s.createInstall({url:e,hash:l}).then((function(e){var n,r=function(n){return t(e,n)},a=i(o.Nc);try{for(a.s();!(n=a.n()).done;){var c=n.value;u.info("[install] Adding listener for ".concat(c)),e.addEventListener(c,r)}}catch(e){a.e(e)}finally{a.f()}return new Promise((function(t,n){e.addEventListener("onInstallEnded",(function(){return t()})),e.addEventListener("onInstallFailed",(function(){return n()})),u.info("Events to handle the installation initialized."),e.install().catch((function(e){u.warn("Ignoring promise rejection during installation: ".concat(e)),p()}))}))}))}function d(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t._mozAddonManager,o=void 0===n?window.navigator.mozAddonManager:n;return s(e,{_mozAddonManager:o}).then((function(t){return r.Z.info("Requesting uninstall of ".concat(e)),t.uninstall()}))}function h(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},a=n._log,c=void 0===a?r.Z:a;function l(n){var r=n.id,i=n.type,a=n.needsRestart;if(c.info("Event received: %o",{type:i,id:r,needsRestart:a}),i===o.a)return s(r,{_mozAddonManager:t}).then((function(t){var n=u({addon:t});return e({guid:r,status:n,needsRestart:a,canUninstall:t.canUninstall})})).catch((function(e){c.error("Unexpected error after having received onOperationCancelled event: %o",e)}));if([o.uf,o.C$].includes(i))return e({guid:r,status:o.U9[i],needsRestart:a,canUninstall:!0});if(o.U9.hasOwnProperty(i))return s(r,{_mozAddonManager:t}).then((function(t){return e({guid:r,status:o.U9[i],needsRestart:a,canUninstall:t.canUninstall})}));throw new Error("Unknown global event: ".concat(i))}if(t&&t.addEventListener){var f,p=i(o.N8);try{for(p.s();!(f=p.n()).done;){var d=f.value;c.info('adding event listener for "'.concat(d,'"')),t.addEventListener(d,l)}}catch(e){p.e(e)}finally{p.f()}t.addEventListener(o.a,l),c.info("Global change event listeners have been initialized")}else c.info("mozAddonManager.addEventListener not available");return l}function y(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t._mozAddonManager,i=void 0===n?window.navigator.mozAddonManager:n;return s(e,{_mozAddonManager:i}).then((function(t){if(r.Z.info("Enable ".concat(e)),t.setEnabled)return t.setEnabled(!0);throw new Error(o.U4)}))}e=n.hmd(e)},18647:(e,t,n)=>{"use strict";n.d(t,{Z:()=>l});n(67407),n(72764),n(99627),n(12978),n(61511),n(79249),n(14862),n(99918),n(7283),n(83159),n(9536),n(75880),n(12578),n(59201),n(86781);var r,o=n(29343);function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){u(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function u(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function c(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function s(e,t,n){return t&&c(e.prototype,t),n&&c(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}const l=new(s((function e(t){var n=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),Object.assign(this,{has:function(e){return t.hasOwnProperty(e)},get:function(e){if(n.has(e))return t[e];throw new Error((0,o.f9)(r||(i=['Key "','" was not found in clientConfig. Check the\n key has been added to clientConfigKeys'],a||(a=i.slice(0)),r=Object.freeze(Object.defineProperties(i,{raw:{value:Object.freeze(a)}}))),e));var i,a}})})))(a(a({},{allowErrorSimulation:!1,apiHost:"https://addons.mozilla.org",apiPath:"/api/",apiVersion:"v5",baseURL:"https://addons.mozilla.org",cookieMaxAge:2592e3,cookieName:"sessionid",cookieSecure:!0,defaultLang:"en-US",enableDevTools:!1,enableFeatureVPNPromo:!0,enableRequestID:!0,enableStrictMode:!1,experiments:{"20210714_amo_vpn_promo":!1},extensionWorkshopUrl:"https://extensionworkshop.com",fxaConfig:"amo",hrefLangsMap:{"x-default":"en-US",en:"en-US",pt:"pt-PT"},isDeployed:!0,isDevelopment:!1,langMap:{"bn-BD":"bn",en:"en-US",ga:"ga-IE",pt:"pt-PT",sv:"sv-SE",zh:"zh-CN"},langs:["af","ar","ast","az","bg","bn","bs","ca","cak","cs","da","de","dsb","el","en-CA","en-GB","en-US","es","et","eu","fa","fi","fr","fy-NL","ga-IE","he","hr","hsb","hu","ia","id","is","it","ja","ka","kab","ko","lt","lv","mk","mn","ms","mt","nb-NO","nl","nn-NO","pa-IN","pl","pt-BR","pt-PT","ro","ru","sk","sl","sq","sv-SE","te","th","tr","uk","ur","vi","zh-CN","zh-TW"],loggingLevel:"info",mozillaUserId:4757633,restrictSearchResultsToAppVersion:!0,rtlLangs:["ar","fa","he","ur"],staticPath:"/static-frontend/",trackingEnabled:!0,trackingId:"UA-36116321-7",trackingSendInitPageView:!0,trackingSendWebVitals:!0,unsupportedHrefLangs:["ast","cak","dsb","hsb","kab"],validClientAppUrlExceptions:["__frontend_heartbeat__","__frontend_lbheartbeat__","__frontend_version__","__version__","about","admin","apps","blocklist","blog","contribute.json","developer_agreement","developers","editors","google1f3e37b7351799a5.html","google231a41e803e464e9.html","jsi18n","review_guide","reviewers","robots.txt","services","sitemap.xml","static-frontend","static-server","statistics","update","user-media"],validClientApplications:["android","firefox"],validLocaleUrlExceptions:["__frontend_version__","__version__","blocklist","blog","contribute.json","downloads","google1f3e37b7351799a5.html","google231a41e803e464e9.html","robots.txt","services","sitemap.xml","static-frontend","static-server","update","user-media"],validTrailingSlashUrlExceptions:["/$lang/$clientApp/user/abuse","/$lang/$clientApp/user/rmlocale","/$lang/$clientApp/users/ajax","/$lang/$clientApp/users/delete","/$lang/$clientApp/users/edit","/$lang/$clientApp/users/login","/$lang/$clientApp/users/logout","/$lang/$clientApp/users/register","/$lang/about","/$lang/review_guide"]}),{},{client:!0,server:!1}))},2163:(e,t,n)=>{"use strict";n.d(t,{AT:()=>Ot,Ai:()=>ht,B2:()=>ye,B6:()=>St,BH:()=>fe,Bg:()=>Et,Bz:()=>X,C$:()=>Je,CK:()=>G,D6:()=>kt,DE:()=>I,Db:()=>l,Eb:()=>te,F6:()=>A,Fb:()=>p,Go:()=>Oe,Gz:()=>M,H0:()=>Re,HH:()=>Q,HR:()=>Pe,Hi:()=>g,IU:()=>re,J6:()=>Rt,JW:()=>$,Jp:()=>nt,Jt:()=>oe,Kj:()=>w,LF:()=>q,Mb:()=>bt,Mg:()=>S,Mj:()=>ue,Mr:()=>ft,My:()=>pe,N8:()=>et,NI:()=>ae,Nc:()=>xe,Nu:()=>se,Nx:()=>be,OC:()=>u,OO:()=>Pt,OS:()=>ke,Of:()=>_e,Oj:()=>Ge,Ow:()=>ee,Pn:()=>f,Po:()=>H,Pr:()=>wt,Px:()=>z,QZ:()=>at,Rq:()=>Te,So:()=>L,Sw:()=>lt,T3:()=>W,Tq:()=>B,U4:()=>$e,U9:()=>Ke,UZ:()=>v,Uw:()=>ot,VD:()=>V,VN:()=>De,V_:()=>dt,Vg:()=>P,W8:()=>It,Y4:()=>ve,YE:()=>Y,YM:()=>he,Yd:()=>U,Yp:()=>pt,ZP:()=>_,ZV:()=>Me,Zt:()=>Ve,_y:()=>T,a:()=>Xe,aS:()=>We,bp:()=>ut,cr:()=>Tt,cs:()=>ie,d$:()=>F,dG:()=>Ie,dJ:()=>Be,e0:()=>rt,eO:()=>ge,eV:()=>s,e_:()=>E,fq:()=>_t,g:()=>b,g$:()=>xt,gQ:()=>Le,hY:()=>C,hi:()=>je,iC:()=>Ct,i_:()=>qe,iq:()=>m,jM:()=>Fe,jV:()=>D,jm:()=>yt,jy:()=>vt,k_:()=>J,kc:()=>ce,kl:()=>we,lS:()=>gt,lm:()=>Ae,lx:()=>He,lz:()=>j,mD:()=>it,nl:()=>Ne,o6:()=>K,o_:()=>ze,op:()=>Z,pl:()=>R,pn:()=>me,q3:()=>h,rZ:()=>d,rr:()=>y,rs:()=>Ee,tX:()=>Se,u:()=>ne,uW:()=>a,uf:()=>Qe,ui:()=>Ye,un:()=>x,ut:()=>ct,vY:()=>tt,wZ:()=>N,wn:()=>le,xS:()=>mt,xZ:()=>de,xw:()=>c,z:()=>Ue,z1:()=>st,z8:()=>Ze,zK:()=>O,zi:()=>Ce,zl:()=>k});n(17918),n(99918),n(61511),n(67407),n(79249),n(14862),n(7283),n(83159),n(9536),n(75880),n(12978);function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){i(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var a="review_flag_reason_spam",u="review_flag_reason_language",c="review_flag_reason_bug_support",s="review_flag_reason_other",l=4,f=3,p=10,d="https://www.mozilla.org/firefox/download/thanks/",h="https://support.mozilla.org/kb/add-on-badges",y="DISABLED",m="DISABLING",v="DOWNLOADING",g="ENABLED",b="ENABLING",w="ERROR",O="INACTIVE",E="INSTALLED",_="INSTALLING",x="UNINSTALLED",S="UNINSTALLING",j="UNKNOWN",P="DOWNLOAD_FAILED",k="INSTALL_CANCELLED",I="INSTALL_FAILED",T="ERROR_CORRUPT_FILE",R="FATAL_INSTALL_ERROR",C="FATAL_UNINSTALL_ERROR",A="FATAL_ERROR",N="android",L="firefox",D="dictionary",M="extension",F="language",U="statictheme",B=[D,M,F,U],H={extensions:M,themes:U},q=Object.keys(H).reduce((function(e,t){return o(o({},e),{},i({},H[t],t))}),{}),z="INCOMPATIBLE_FIREFOX_FOR_IOS",G="INCOMPATIBLE_OVER_MAX_VERSION",W="INCOMPATIBLE_NOT_FIREFOX",V="INCOMPATIBLE_UNDER_MIN_VERSION",Y="INCOMPATIBLE_UNSUPPORTED_PLATFORM",Z="INCOMPATIBLE_ANDROID_UNSUPPORTED",$="addon",K=U,Q="invalid",X="collection",J="homepage-collection-featured",ee="featured",te="search",ne="rating",re="hotness",oe="tag-shelf-",ie="VIEW_CONTEXT_HOME",ae="VIEW_CONTEXT_LANGUAGE_TOOLS",ue="hotness",ce="rating",se="users",le="random",fe="relevance",pe="updated",de="recommended",he="".concat(de,",").concat(se),ye=he,me="added",ve="-added",ge="name",be="-popularity",we="CLEAR_ERROR",Oe="SET_ERROR",Ee="SET_ERROR_MESSAGE",_e="SET_VIEW_CONTEXT",xe=["onDownloadStarted","onDownloadProgress","onDownloadEnded","onDownloadCancelled","onDownloadFailed","onInstallStarted","onInstallProgress","onInstallEnded","onInstallCancelled","onInstallFailed"],Se="INSTALL_STATE",je="START_DOWNLOAD",Pe="DOWNLOAD_PROGRESS",ke="INSTALL_COMPLETE",Ie="UNINSTALL_COMPLETE",Te="INSTALL_ERROR",Re="enable",Ce="install",Ae="install:cancelled",Ne="install:download-failed",Le="install:started",De="uninstall",Me="AMO Addon Activation",Fe="AMO Theme Activation",Ue="AMO Addon Installs",Be="AMO Theme Installs",He="AMO Addon Installs Cancelled",qe="AMO Theme Installs Cancelled",ze="AMO Addon Installs Download Failed",Ge="AMO Theme Installs Download Failed",We="AMO Addon Installs Started",Ve="AMO Theme Installs Started",Ye="AMO Addon Uninstalls",Ze="AMO Theme Uninstalls",$e="SET_ENABLE_NOT_AVAILABLE",Ke={onDisabled:y,onEnabled:g,onInstalling:_,onInstalled:E,onUninstalling:S,onUninstalled:x,onEnabling:b,onDisabling:m},Qe="onInstalling",Xe="onOperationCancelled",Je="onUninstalled",et=Object.keys(Ke),tt="ERROR_UNKNOWN",nt=["ERROR_AUTHENTICATION_EXPIRED","ERROR_DECODING_SIGNATURE","ERROR_SIGNATURE_EXPIRED"],rt="ERROR_ADDON_DISABLED_BY_DEV",ot="ERROR_ADDON_DISABLED_BY_ADMIN",it="Addons:Edit",at="Addons:Review",ut="Stats:View",ct="Admin:Curation",st="Collections:Contribute",lt="featured-personas",ft="Addons:ContentReview",pt="Addons:ReviewUnlisted",dt="Ratings:Moderate",ht="Users:Edit",yt="*:*",mt="ReviewerTools:View",vt="Addons:RecommendedReview",gt="Addons:ThemeReview",bt="amo-request-id",wt="addons.mozilla.org",Ot="referral",Et="amo-fx-cta",_t="line",xt="recommended",St="sponsored",jt="spotlight",Pt="verified",kt=[_t,xt,Pt],It=[_t,xt,St,jt,Pt],Tt="badged",Rt="".concat(St,",").concat(Pt),Ct="amo"},9119:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});n(17918),n(99918),n(36353),n(67407),n(61511),n(79249),n(14862),n(7283),n(83159),n(9536),n(75880),n(12978);var r=n(18647),o=n(2163);function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){u(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function u(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var c=null,s=null,l=null;c=n(88653),r.Z.get("enableRequestID")&&(s=n(97925)),r.Z.get("server")&&(l=n(92366));var f=c({level:r.Z.get("loggingLevel"),name:o.iC,timestamp:!l||function(){return',"time":'.concat(l())}});const p=["debug","error","fatal","info","trace","warn"].reduce((function(e,t){return a(a({},e),{},u({},t,(function(){for(var e=s&&s.get(o.Mb),n=arguments.length,r=new Array(n),i=0;i<n;i++)r[i]=arguments[i];e?f[t].apply(f,[{amo_request_id:e}].concat(r)):f[t].apply(f,r)})))}),{})},24579:(e,t)=>{"use strict";var n="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");t.encode=function(e){if(0===e)return n[0];for(var t="";e>0;)t=n[e%62]+t,e=Math.floor(e/62);return t},t.decode=function(e){var t,n,r=0,o=e.length;for(t=0;t<o;t++)n=e.charCodeAt(t),r+=(n-=n<58?48:n<91?29:87)*Math.pow(62,o-t-1);return r}},24920:(e,t)=>{"use strict";t.encode=function(e,t){let n=t.byCode;if(0===e)return n[0];for(var r="",o=t.length;e>0;)r=n[e%o]+r,e=Math.floor(e/o);return r},t.decode=function(e,t){var n,r=t.byChar,o=0,i=e.length,a=t.length;for(n=0;n<i;n++)o+=r[e[n]]*Math.pow(a,i-n-1);return o},t.indexCharset=function(e){var t,n,r={},o={},i=e.length;for(t=0;t<i;t++)n=e[t],r[t]=n,o[n]=t;return{byCode:r,byChar:o,length:i}}},1047:(e,t,n)=>{"use strict";var r=n(24579),o=n(24920),i={encode:r.encode,decode:r.decode,setCharacterSet:function(e){if(62!==e.length)throw Error("You must supply 62 characters.");var t,n,r={};for(t=0;t<e.length;t++){if(r[n=e[t]])throw Error("You must use unique characters.");r[n]=!0}e=o.indexCharset(e),i.encode=function(t){return o.encode(t,e)},i.decode=function(t){return o.decode(t,e)}}};e.exports=i},41550:(e,t)=>{"use strict";t.byteLength=function(e){var t=c(e),n=t[0],r=t[1];return 3*(n+r)/4-r},t.toByteArray=function(e){var t,n,i=c(e),a=i[0],u=i[1],s=new o(function(e,t,n){return 3*(t+n)/4-n}(0,a,u)),l=0,f=u>0?a-4:a;for(n=0;n<f;n+=4)t=r[e.charCodeAt(n)]<<18|r[e.charCodeAt(n+1)]<<12|r[e.charCodeAt(n+2)]<<6|r[e.charCodeAt(n+3)],s[l++]=t>>16&255,s[l++]=t>>8&255,s[l++]=255&t;2===u&&(t=r[e.charCodeAt(n)]<<2|r[e.charCodeAt(n+1)]>>4,s[l++]=255&t);1===u&&(t=r[e.charCodeAt(n)]<<10|r[e.charCodeAt(n+1)]<<4|r[e.charCodeAt(n+2)]>>2,s[l++]=t>>8&255,s[l++]=255&t);return s},t.fromByteArray=function(e){for(var t,r=e.length,o=r%3,i=[],a=16383,u=0,c=r-o;u<c;u+=a)i.push(s(e,u,u+a>c?c:u+a));1===o?(t=e[r-1],i.push(n[t>>2]+n[t<<4&63]+"==")):2===o&&(t=(e[r-2]<<8)+e[r-1],i.push(n[t>>10]+n[t>>4&63]+n[t<<2&63]+"="));return i.join("")};for(var n=[],r=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=0,u=i.length;a<u;++a)n[a]=i[a],r[i.charCodeAt(a)]=a;function c(e){var t=e.length;if(t%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var n=e.indexOf("=");return-1===n&&(n=t),[n,n===t?0:4-n%4]}function s(e,t,r){for(var o,i,a=[],u=t;u<r;u+=3)o=(e[u]<<16&16711680)+(e[u+1]<<8&65280)+(255&e[u+2]),a.push(n[(i=o)>>18&63]+n[i>>12&63]+n[i>>6&63]+n[63&i]);return a.join("")}r["-".charCodeAt(0)]=62,r["_".charCodeAt(0)]=63},64942:(e,t,n)=>{var r;e=n.nmd(e);var o=function(e){"use strict";var t=1e7,n=9007199254740992,r=p(n),i="0123456789abcdefghijklmnopqrstuvwxyz",a="function"==typeof BigInt;function u(e,t,n,r){return void 0===e?u[0]:void 0!==t&&(10!=+t||n)?G(e,t,n,r):$(e)}function c(e,t){this.value=e,this.sign=t,this.isSmall=!1}function s(e){this.value=e,this.sign=e<0,this.isSmall=!0}function l(e){this.value=e}function f(e){return-n<e&&e<n}function p(e){return e<1e7?[e]:e<1e14?[e%1e7,Math.floor(e/1e7)]:[e%1e7,Math.floor(e/1e7)%1e7,Math.floor(e/1e14)]}function d(e){h(e);var n=e.length;if(n<4&&T(e,r)<0)switch(n){case 0:return 0;case 1:return e[0];case 2:return e[0]+e[1]*t;default:return e[0]+(e[1]+e[2]*t)*t}return e}function h(e){for(var t=e.length;0===e[--t];);e.length=t+1}function y(e){for(var t=new Array(e),n=-1;++n<e;)t[n]=0;return t}function m(e){return e>0?Math.floor(e):Math.ceil(e)}function v(e,n){var r,o,i=e.length,a=n.length,u=new Array(i),c=0,s=t;for(o=0;o<a;o++)c=(r=e[o]+n[o]+c)>=s?1:0,u[o]=r-c*s;for(;o<i;)c=(r=e[o]+c)===s?1:0,u[o++]=r-c*s;return c>0&&u.push(c),u}function g(e,t){return e.length>=t.length?v(e,t):v(t,e)}function b(e,n){var r,o,i=e.length,a=new Array(i),u=t;for(o=0;o<i;o++)r=e[o]-u+n,n=Math.floor(r/u),a[o]=r-n*u,n+=1;for(;n>0;)a[o++]=n%u,n=Math.floor(n/u);return a}function w(e,n){var r,o,i=e.length,a=n.length,u=new Array(i),c=0,s=t;for(r=0;r<a;r++)(o=e[r]-c-n[r])<0?(o+=s,c=1):c=0,u[r]=o;for(r=a;r<i;r++){if(!((o=e[r]-c)<0)){u[r++]=o;break}o+=s,u[r]=o}for(;r<i;r++)u[r]=e[r];return h(u),u}function O(e,n,r){var o,i,a=e.length,u=new Array(a),l=-n,f=t;for(o=0;o<a;o++)i=e[o]+l,l=Math.floor(i/f),i%=f,u[o]=i<0?i+f:i;return"number"==typeof(u=d(u))?(r&&(u=-u),new s(u)):new c(u,r)}function E(e,n){var r,o,i,a,u=e.length,c=n.length,s=y(u+c),l=t;for(i=0;i<u;++i){a=e[i];for(var f=0;f<c;++f)r=a*n[f]+s[i+f],o=Math.floor(r/l),s[i+f]=r-o*l,s[i+f+1]+=o}return h(s),s}function _(e,n){var r,o,i=e.length,a=new Array(i),u=t,c=0;for(o=0;o<i;o++)r=e[o]*n+c,c=Math.floor(r/u),a[o]=r-c*u;for(;c>0;)a[o++]=c%u,c=Math.floor(c/u);return a}function x(e,t){for(var n=[];t-- >0;)n.push(0);return n.concat(e)}function S(e,t){var n=Math.max(e.length,t.length);if(n<=30)return E(e,t);n=Math.ceil(n/2);var r=e.slice(n),o=e.slice(0,n),i=t.slice(n),a=t.slice(0,n),u=S(o,a),c=S(r,i),s=S(g(o,r),g(a,i)),l=g(g(u,x(w(w(s,u),c),n)),x(c,2*n));return h(l),l}function j(e,n,r){return new c(e<t?_(n,e):E(n,p(e)),r)}function P(e){var n,r,o,i,a=e.length,u=y(a+a),c=t;for(o=0;o<a;o++){r=0-(i=e[o])*i;for(var s=o;s<a;s++)n=i*e[s]*2+u[o+s]+r,r=Math.floor(n/c),u[o+s]=n-r*c;u[o+a]=r}return h(u),u}function k(e,t){var n,r,o,i,a=e.length,u=y(a);for(o=0,n=a-1;n>=0;--n)o=(i=1e7*o+e[n])-(r=m(i/t))*t,u[n]=0|r;return[u,0|o]}function I(e,n){var r,o=$(n);if(a)return[new l(e.value/o.value),new l(e.value%o.value)];var i,f=e.value,v=o.value;if(0===v)throw new Error("Cannot divide by zero");if(e.isSmall)return o.isSmall?[new s(m(f/v)),new s(f%v)]:[u[0],e];if(o.isSmall){if(1===v)return[e,u[0]];if(-1==v)return[e.negate(),u[0]];var g=Math.abs(v);if(g<t){i=d((r=k(f,g))[0]);var b=r[1];return e.sign&&(b=-b),"number"==typeof i?(e.sign!==o.sign&&(i=-i),[new s(i),new s(b)]):[new c(i,e.sign!==o.sign),new s(b)]}v=p(g)}var O=T(f,v);if(-1===O)return[u[0],e];if(0===O)return[u[e.sign===o.sign?1:-1],u[0]];i=(r=f.length+v.length<=200?function(e,n){var r,o,i,a,u,c,s,l=e.length,f=n.length,p=t,h=y(n.length),m=n[f-1],v=Math.ceil(p/(2*m)),g=_(e,v),b=_(n,v);for(g.length<=l&&g.push(0),b.push(0),m=b[f-1],o=l-f;o>=0;o--){for(r=p-1,g[o+f]!==m&&(r=Math.floor((g[o+f]*p+g[o+f-1])/m)),i=0,a=0,c=b.length,u=0;u<c;u++)i+=r*b[u],s=Math.floor(i/p),a+=g[o+u]-(i-s*p),i=s,a<0?(g[o+u]=a+p,a=-1):(g[o+u]=a,a=0);for(;0!==a;){for(r-=1,i=0,u=0;u<c;u++)(i+=g[o+u]-p+b[u])<0?(g[o+u]=i+p,i=0):(g[o+u]=i,i=1);a+=i}h[o]=r}return g=k(g,v)[0],[d(h),d(g)]}(f,v):function(e,n){for(var r,o,i,a,u,c=e.length,s=n.length,l=[],f=[],p=t;c;)if(f.unshift(e[--c]),h(f),T(f,n)<0)l.push(0);else{i=f[(o=f.length)-1]*p+f[o-2],a=n[s-1]*p+n[s-2],o>s&&(i=(i+1)*p),r=Math.ceil(i/a);do{if(T(u=_(n,r),f)<=0)break;r--}while(r);l.push(r),f=w(f,u)}return l.reverse(),[d(l),d(f)]}(f,v))[0];var E=e.sign!==o.sign,x=r[1],S=e.sign;return"number"==typeof i?(E&&(i=-i),i=new s(i)):i=new c(i,E),"number"==typeof x?(S&&(x=-x),x=new s(x)):x=new c(x,S),[i,x]}function T(e,t){if(e.length!==t.length)return e.length>t.length?1:-1;for(var n=e.length-1;n>=0;n--)if(e[n]!==t[n])return e[n]>t[n]?1:-1;return 0}function R(e){var t=e.abs();return!t.isUnit()&&(!!(t.equals(2)||t.equals(3)||t.equals(5))||!(t.isEven()||t.isDivisibleBy(3)||t.isDivisibleBy(5))&&(!!t.lesser(49)||void 0))}function C(e,t){for(var n,r,i,a=e.prev(),u=a,c=0;u.isEven();)u=u.divide(2),c++;e:for(r=0;r<t.length;r++)if(!e.lesser(t[r])&&!(i=o(t[r]).modPow(u,e)).isUnit()&&!i.equals(a)){for(n=c-1;0!=n;n--){if((i=i.square().mod(e)).isUnit())return!1;if(i.equals(a))continue e}return!1}return!0}c.prototype=Object.create(u.prototype),s.prototype=Object.create(u.prototype),l.prototype=Object.create(u.prototype),c.prototype.add=function(e){var t=$(e);if(this.sign!==t.sign)return this.subtract(t.negate());var n=this.value,r=t.value;return t.isSmall?new c(b(n,Math.abs(r)),this.sign):new c(g(n,r),this.sign)},c.prototype.plus=c.prototype.add,s.prototype.add=function(e){var t=$(e),n=this.value;if(n<0!==t.sign)return this.subtract(t.negate());var r=t.value;if(t.isSmall){if(f(n+r))return new s(n+r);r=p(Math.abs(r))}return new c(b(r,Math.abs(n)),n<0)},s.prototype.plus=s.prototype.add,l.prototype.add=function(e){return new l(this.value+$(e).value)},l.prototype.plus=l.prototype.add,c.prototype.subtract=function(e){var t=$(e);if(this.sign!==t.sign)return this.add(t.negate());var n=this.value,r=t.value;return t.isSmall?O(n,Math.abs(r),this.sign):function(e,t,n){var r;return T(e,t)>=0?r=w(e,t):(r=w(t,e),n=!n),"number"==typeof(r=d(r))?(n&&(r=-r),new s(r)):new c(r,n)}(n,r,this.sign)},c.prototype.minus=c.prototype.subtract,s.prototype.subtract=function(e){var t=$(e),n=this.value;if(n<0!==t.sign)return this.add(t.negate());var r=t.value;return t.isSmall?new s(n-r):O(r,Math.abs(n),n>=0)},s.prototype.minus=s.prototype.subtract,l.prototype.subtract=function(e){return new l(this.value-$(e).value)},l.prototype.minus=l.prototype.subtract,c.prototype.negate=function(){return new c(this.value,!this.sign)},s.prototype.negate=function(){var e=this.sign,t=new s(-this.value);return t.sign=!e,t},l.prototype.negate=function(){return new l(-this.value)},c.prototype.abs=function(){return new c(this.value,!1)},s.prototype.abs=function(){return new s(Math.abs(this.value))},l.prototype.abs=function(){return new l(this.value>=0?this.value:-this.value)},c.prototype.multiply=function(e){var n,r,o,i=$(e),a=this.value,s=i.value,l=this.sign!==i.sign;if(i.isSmall){if(0===s)return u[0];if(1===s)return this;if(-1===s)return this.negate();if((n=Math.abs(s))<t)return new c(_(a,n),l);s=p(n)}return r=a.length,o=s.length,new c(-.012*r-.012*o+15e-6*r*o>0?S(a,s):E(a,s),l)},c.prototype.times=c.prototype.multiply,s.prototype._multiplyBySmall=function(e){return f(e.value*this.value)?new s(e.value*this.value):j(Math.abs(e.value),p(Math.abs(this.value)),this.sign!==e.sign)},c.prototype._multiplyBySmall=function(e){return 0===e.value?u[0]:1===e.value?this:-1===e.value?this.negate():j(Math.abs(e.value),this.value,this.sign!==e.sign)},s.prototype.multiply=function(e){return $(e)._multiplyBySmall(this)},s.prototype.times=s.prototype.multiply,l.prototype.multiply=function(e){return new l(this.value*$(e).value)},l.prototype.times=l.prototype.multiply,c.prototype.square=function(){return new c(P(this.value),!1)},s.prototype.square=function(){var e=this.value*this.value;return f(e)?new s(e):new c(P(p(Math.abs(this.value))),!1)},l.prototype.square=function(e){return new l(this.value*this.value)},c.prototype.divmod=function(e){var t=I(this,e);return{quotient:t[0],remainder:t[1]}},l.prototype.divmod=s.prototype.divmod=c.prototype.divmod,c.prototype.divide=function(e){return I(this,e)[0]},l.prototype.over=l.prototype.divide=function(e){return new l(this.value/$(e).value)},s.prototype.over=s.prototype.divide=c.prototype.over=c.prototype.divide,c.prototype.mod=function(e){return I(this,e)[1]},l.prototype.mod=l.prototype.remainder=function(e){return new l(this.value%$(e).value)},s.prototype.remainder=s.prototype.mod=c.prototype.remainder=c.prototype.mod,c.prototype.pow=function(e){var t,n,r,o=$(e),i=this.value,a=o.value;if(0===a)return u[1];if(0===i)return u[0];if(1===i)return u[1];if(-1===i)return o.isEven()?u[1]:u[-1];if(o.sign)return u[0];if(!o.isSmall)throw new Error("The exponent "+o.toString()+" is too large.");if(this.isSmall&&f(t=Math.pow(i,a)))return new s(m(t));for(n=this,r=u[1];!0&a&&(r=r.times(n),--a),0!==a;)a/=2,n=n.square();return r},s.prototype.pow=c.prototype.pow,l.prototype.pow=function(e){var t=$(e),n=this.value,r=t.value,o=BigInt(0),i=BigInt(1),a=BigInt(2);if(r===o)return u[1];if(n===o)return u[0];if(n===i)return u[1];if(n===BigInt(-1))return t.isEven()?u[1]:u[-1];if(t.isNegative())return new l(o);for(var c=this,s=u[1];(r&i)===i&&(s=s.times(c),--r),r!==o;)r/=a,c=c.square();return s},c.prototype.modPow=function(e,t){if(e=$(e),(t=$(t)).isZero())throw new Error("Cannot take modPow with modulus 0");var n=u[1],r=this.mod(t);for(e.isNegative()&&(e=e.multiply(u[-1]),r=r.modInv(t));e.isPositive();){if(r.isZero())return u[0];e.isOdd()&&(n=n.multiply(r).mod(t)),e=e.divide(2),r=r.square().mod(t)}return n},l.prototype.modPow=s.prototype.modPow=c.prototype.modPow,c.prototype.compareAbs=function(e){var t=$(e),n=this.value,r=t.value;return t.isSmall?1:T(n,r)},s.prototype.compareAbs=function(e){var t=$(e),n=Math.abs(this.value),r=t.value;return t.isSmall?n===(r=Math.abs(r))?0:n>r?1:-1:-1},l.prototype.compareAbs=function(e){var t=this.value,n=$(e).value;return(t=t>=0?t:-t)===(n=n>=0?n:-n)?0:t>n?1:-1},c.prototype.compare=function(e){if(e===1/0)return-1;if(e===-1/0)return 1;var t=$(e),n=this.value,r=t.value;return this.sign!==t.sign?t.sign?1:-1:t.isSmall?this.sign?-1:1:T(n,r)*(this.sign?-1:1)},c.prototype.compareTo=c.prototype.compare,s.prototype.compare=function(e){if(e===1/0)return-1;if(e===-1/0)return 1;var t=$(e),n=this.value,r=t.value;return t.isSmall?n==r?0:n>r?1:-1:n<0!==t.sign?n<0?-1:1:n<0?1:-1},s.prototype.compareTo=s.prototype.compare,l.prototype.compare=function(e){if(e===1/0)return-1;if(e===-1/0)return 1;var t=this.value,n=$(e).value;return t===n?0:t>n?1:-1},l.prototype.compareTo=l.prototype.compare,c.prototype.equals=function(e){return 0===this.compare(e)},l.prototype.eq=l.prototype.equals=s.prototype.eq=s.prototype.equals=c.prototype.eq=c.prototype.equals,c.prototype.notEquals=function(e){return 0!==this.compare(e)},l.prototype.neq=l.prototype.notEquals=s.prototype.neq=s.prototype.notEquals=c.prototype.neq=c.prototype.notEquals,c.prototype.greater=function(e){return this.compare(e)>0},l.prototype.gt=l.prototype.greater=s.prototype.gt=s.prototype.greater=c.prototype.gt=c.prototype.greater,c.prototype.lesser=function(e){return this.compare(e)<0},l.prototype.lt=l.prototype.lesser=s.prototype.lt=s.prototype.lesser=c.prototype.lt=c.prototype.lesser,c.prototype.greaterOrEquals=function(e){return this.compare(e)>=0},l.prototype.geq=l.prototype.greaterOrEquals=s.prototype.geq=s.prototype.greaterOrEquals=c.prototype.geq=c.prototype.greaterOrEquals,c.prototype.lesserOrEquals=function(e){return this.compare(e)<=0},l.prototype.leq=l.prototype.lesserOrEquals=s.prototype.leq=s.prototype.lesserOrEquals=c.prototype.leq=c.prototype.lesserOrEquals,c.prototype.isEven=function(){return 0==(1&this.value[0])},s.prototype.isEven=function(){return 0==(1&this.value)},l.prototype.isEven=function(){return(this.value&BigInt(1))===BigInt(0)},c.prototype.isOdd=function(){return 1==(1&this.value[0])},s.prototype.isOdd=function(){return 1==(1&this.value)},l.prototype.isOdd=function(){return(this.value&BigInt(1))===BigInt(1)},c.prototype.isPositive=function(){return!this.sign},s.prototype.isPositive=function(){return this.value>0},l.prototype.isPositive=s.prototype.isPositive,c.prototype.isNegative=function(){return this.sign},s.prototype.isNegative=function(){return this.value<0},l.prototype.isNegative=s.prototype.isNegative,c.prototype.isUnit=function(){return!1},s.prototype.isUnit=function(){return 1===Math.abs(this.value)},l.prototype.isUnit=function(){return this.abs().value===BigInt(1)},c.prototype.isZero=function(){return!1},s.prototype.isZero=function(){return 0===this.value},l.prototype.isZero=function(){return this.value===BigInt(0)},c.prototype.isDivisibleBy=function(e){var t=$(e);return!t.isZero()&&(!!t.isUnit()||(0===t.compareAbs(2)?this.isEven():this.mod(t).isZero()))},l.prototype.isDivisibleBy=s.prototype.isDivisibleBy=c.prototype.isDivisibleBy,c.prototype.isPrime=function(t){var n=R(this);if(n!==e)return n;var r=this.abs(),i=r.bitLength();if(i<=64)return C(r,[2,3,5,7,11,13,17,19,23,29,31,37]);for(var a=Math.log(2)*i.toJSNumber(),u=Math.ceil(!0===t?2*Math.pow(a,2):a),c=[],s=0;s<u;s++)c.push(o(s+2));return C(r,c)},l.prototype.isPrime=s.prototype.isPrime=c.prototype.isPrime,c.prototype.isProbablePrime=function(t,n){var r=R(this);if(r!==e)return r;for(var i=this.abs(),a=t===e?5:t,u=[],c=0;c<a;c++)u.push(o.randBetween(2,i.minus(2),n));return C(i,u)},l.prototype.isProbablePrime=s.prototype.isProbablePrime=c.prototype.isProbablePrime,c.prototype.modInv=function(e){for(var t,n,r,i=o.zero,a=o.one,u=$(e),c=this.abs();!c.isZero();)t=u.divide(c),n=i,r=u,i=a,u=c,a=n.subtract(t.multiply(a)),c=r.subtract(t.multiply(c));if(!u.isUnit())throw new Error(this.toString()+" and "+e.toString()+" are not co-prime");return-1===i.compare(0)&&(i=i.add(e)),this.isNegative()?i.negate():i},l.prototype.modInv=s.prototype.modInv=c.prototype.modInv,c.prototype.next=function(){var e=this.value;return this.sign?O(e,1,this.sign):new c(b(e,1),this.sign)},s.prototype.next=function(){var e=this.value;return e+1<n?new s(e+1):new c(r,!1)},l.prototype.next=function(){return new l(this.value+BigInt(1))},c.prototype.prev=function(){var e=this.value;return this.sign?new c(b(e,1),!0):O(e,1,this.sign)},s.prototype.prev=function(){var e=this.value;return e-1>-n?new s(e-1):new c(r,!0)},l.prototype.prev=function(){return new l(this.value-BigInt(1))};for(var A=[1];2*A[A.length-1]<=t;)A.push(2*A[A.length-1]);var N=A.length,L=A[N-1];function D(e){return Math.abs(e)<=t}function M(e,t,n){t=$(t);for(var r=e.isNegative(),i=t.isNegative(),a=r?e.not():e,u=i?t.not():t,c=0,s=0,l=null,f=null,p=[];!a.isZero()||!u.isZero();)c=(l=I(a,L))[1].toJSNumber(),r&&(c=L-1-c),s=(f=I(u,L))[1].toJSNumber(),i&&(s=L-1-s),a=l[0],u=f[0],p.push(n(c,s));for(var d=0!==n(r?1:0,i?1:0)?o(-1):o(0),h=p.length-1;h>=0;h-=1)d=d.multiply(L).add(o(p[h]));return d}c.prototype.shiftLeft=function(e){var t=$(e).toJSNumber();if(!D(t))throw new Error(String(t)+" is too large for shifting.");if(t<0)return this.shiftRight(-t);var n=this;if(n.isZero())return n;for(;t>=N;)n=n.multiply(L),t-=N-1;return n.multiply(A[t])},l.prototype.shiftLeft=s.prototype.shiftLeft=c.prototype.shiftLeft,c.prototype.shiftRight=function(e){var t,n=$(e).toJSNumber();if(!D(n))throw new Error(String(n)+" is too large for shifting.");if(n<0)return this.shiftLeft(-n);for(var r=this;n>=N;){if(r.isZero()||r.isNegative()&&r.isUnit())return r;r=(t=I(r,L))[1].isNegative()?t[0].prev():t[0],n-=N-1}return(t=I(r,A[n]))[1].isNegative()?t[0].prev():t[0]},l.prototype.shiftRight=s.prototype.shiftRight=c.prototype.shiftRight,c.prototype.not=function(){return this.negate().prev()},l.prototype.not=s.prototype.not=c.prototype.not,c.prototype.and=function(e){return M(this,e,(function(e,t){return e&t}))},l.prototype.and=s.prototype.and=c.prototype.and,c.prototype.or=function(e){return M(this,e,(function(e,t){return e|t}))},l.prototype.or=s.prototype.or=c.prototype.or,c.prototype.xor=function(e){return M(this,e,(function(e,t){return e^t}))},l.prototype.xor=s.prototype.xor=c.prototype.xor;var F=1<<30;function U(e){var n=e.value,r="number"==typeof n?n|F:"bigint"==typeof n?n|BigInt(F):n[0]+n[1]*t|1073758208;return r&-r}function B(e,t){if(t.compareTo(e)<=0){var n=B(e,t.square(t)),r=n.p,i=n.e,a=r.multiply(t);return a.compareTo(e)<=0?{p:a,e:2*i+1}:{p:r,e:2*i}}return{p:o(1),e:0}}function H(e,t){return e=$(e),t=$(t),e.greater(t)?e:t}function q(e,t){return e=$(e),t=$(t),e.lesser(t)?e:t}function z(e,t){if(e=$(e).abs(),t=$(t).abs(),e.equals(t))return e;if(e.isZero())return t;if(t.isZero())return e;for(var n,r,o=u[1];e.isEven()&&t.isEven();)n=q(U(e),U(t)),e=e.divide(n),t=t.divide(n),o=o.multiply(n);for(;e.isEven();)e=e.divide(U(e));do{for(;t.isEven();)t=t.divide(U(t));e.greater(t)&&(r=t,t=e,e=r),t=t.subtract(e)}while(!t.isZero());return o.isUnit()?e:e.multiply(o)}c.prototype.bitLength=function(){var e=this;return e.compareTo(o(0))<0&&(e=e.negate().subtract(o(1))),0===e.compareTo(o(0))?o(0):o(B(e,o(2)).e).add(o(1))},l.prototype.bitLength=s.prototype.bitLength=c.prototype.bitLength;var G=function(e,t,n,r){n=n||i,e=String(e),r||(e=e.toLowerCase(),n=n.toLowerCase());var o,a=e.length,u=Math.abs(t),c={};for(o=0;o<n.length;o++)c[n[o]]=o;for(o=0;o<a;o++){if("-"!==(f=e[o])&&(f in c&&c[f]>=u)){if("1"===f&&1===u)continue;throw new Error(f+" is not a valid digit in base "+t+".")}}t=$(t);var s=[],l="-"===e[0];for(o=l?1:0;o<e.length;o++){var f;if((f=e[o])in c)s.push($(c[f]));else{if("<"!==f)throw new Error(f+" is not a valid character");var p=o;do{o++}while(">"!==e[o]&&o<e.length);s.push($(e.slice(p+1,o)))}}return W(s,t,l)};function W(e,t,n){var r,o=u[0],i=u[1];for(r=e.length-1;r>=0;r--)o=o.add(e[r].times(i)),i=i.times(t);return n?o.negate():o}function V(e,t){if((t=o(t)).isZero()){if(e.isZero())return{value:[0],isNegative:!1};throw new Error("Cannot convert nonzero numbers to base 0.")}if(t.equals(-1)){if(e.isZero())return{value:[0],isNegative:!1};if(e.isNegative())return{value:[].concat.apply([],Array.apply(null,Array(-e.toJSNumber())).map(Array.prototype.valueOf,[1,0])),isNegative:!1};var n=Array.apply(null,Array(e.toJSNumber()-1)).map(Array.prototype.valueOf,[0,1]);return n.unshift([1]),{value:[].concat.apply([],n),isNegative:!1}}var r=!1;if(e.isNegative()&&t.isPositive()&&(r=!0,e=e.abs()),t.isUnit())return e.isZero()?{value:[0],isNegative:!1}:{value:Array.apply(null,Array(e.toJSNumber())).map(Number.prototype.valueOf,1),isNegative:r};for(var i,a=[],u=e;u.isNegative()||u.compareAbs(t)>=0;){i=u.divmod(t),u=i.quotient;var c=i.remainder;c.isNegative()&&(c=t.minus(c).abs(),u=u.next()),a.push(c.toJSNumber())}return a.push(u.toJSNumber()),{value:a.reverse(),isNegative:r}}function Y(e,t,n){var r=V(e,t);return(r.isNegative?"-":"")+r.value.map((function(e){return function(e,t){return e<(t=t||i).length?t[e]:"<"+e+">"}(e,n)})).join("")}function Z(e){if(f(+e)){var t=+e;if(t===m(t))return a?new l(BigInt(t)):new s(t);throw new Error("Invalid integer: "+e)}var n="-"===e[0];n&&(e=e.slice(1));var r=e.split(/e/i);if(r.length>2)throw new Error("Invalid integer: "+r.join("e"));if(2===r.length){var o=r[1];if("+"===o[0]&&(o=o.slice(1)),(o=+o)!==m(o)||!f(o))throw new Error("Invalid integer: "+o+" is not a valid exponent.");var i=r[0],u=i.indexOf(".");if(u>=0&&(o-=i.length-u-1,i=i.slice(0,u)+i.slice(u+1)),o<0)throw new Error("Cannot include negative exponent part for integers");e=i+=new Array(o+1).join("0")}if(!/^([0-9][0-9]*)$/.test(e))throw new Error("Invalid integer: "+e);if(a)return new l(BigInt(n?"-"+e:e));for(var p=[],d=e.length,y=d-7;d>0;)p.push(+e.slice(y,d)),(y-=7)<0&&(y=0),d-=7;return h(p),new c(p,n)}function $(e){return"number"==typeof e?function(e){if(a)return new l(BigInt(e));if(f(e)){if(e!==m(e))throw new Error(e+" is not an integer.");return new s(e)}return Z(e.toString())}(e):"string"==typeof e?Z(e):"bigint"==typeof e?new l(e):e}c.prototype.toArray=function(e){return V(this,e)},s.prototype.toArray=function(e){return V(this,e)},l.prototype.toArray=function(e){return V(this,e)},c.prototype.toString=function(t,n){if(t===e&&(t=10),10!==t)return Y(this,t,n);for(var r,o=this.value,i=o.length,a=String(o[--i]);--i>=0;)r=String(o[i]),a+="0000000".slice(r.length)+r;return(this.sign?"-":"")+a},s.prototype.toString=function(t,n){return t===e&&(t=10),10!=t?Y(this,t,n):String(this.value)},l.prototype.toString=s.prototype.toString,l.prototype.toJSON=c.prototype.toJSON=s.prototype.toJSON=function(){return this.toString()},c.prototype.valueOf=function(){return parseInt(this.toString(),10)},c.prototype.toJSNumber=c.prototype.valueOf,s.prototype.valueOf=function(){return this.value},s.prototype.toJSNumber=s.prototype.valueOf,l.prototype.valueOf=l.prototype.toJSNumber=function(){return parseInt(this.toString(),10)};for(var K=0;K<1e3;K++)u[K]=$(K),K>0&&(u[-K]=$(-K));return u.one=u[1],u.zero=u[0],u.minusOne=u[-1],u.max=H,u.min=q,u.gcd=z,u.lcm=function(e,t){return e=$(e).abs(),t=$(t).abs(),e.divide(z(e,t)).multiply(t)},u.isInstance=function(e){return e instanceof c||e instanceof s||e instanceof l},u.randBetween=function(e,n,r){e=$(e),n=$(n);var o=r||Math.random,i=q(e,n),a=H(e,n).subtract(i).add(1);if(a.isSmall)return i.add(Math.floor(o()*a));for(var c=V(a,t).value,s=[],l=!0,f=0;f<c.length;f++){var p=l?c[f]:t,d=m(o()*p);s.push(d),d<p&&(l=!1)}return i.add(u.fromArray(s,t,!1))},u.fromArray=function(e,t,n){return W(e.map($),$(t||10),n)},u}();e.hasOwnProperty("exports")&&(e.exports=o),void 0===(r=function(){return o}.call(t,n,t,e))||(e.exports=r)},16274:(e,t,n)=>{"use strict";var r=n(41550),o=n(21706),i="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;t.Buffer=c,t.SlowBuffer=function(e){+e!=e&&(e=0);return c.alloc(+e)},t.INSPECT_MAX_BYTES=50;var a=2147483647;function u(e){if(e>a)throw new RangeError('The value "'+e+'" is invalid for option "size"');var t=new Uint8Array(e);return Object.setPrototypeOf(t,c.prototype),t}function c(e,t,n){if("number"==typeof e){if("string"==typeof t)throw new TypeError('The "string" argument must be of type string. Received type number');return f(e)}return s(e,t,n)}function s(e,t,n){if("string"==typeof e)return function(e,t){"string"==typeof t&&""!==t||(t="utf8");if(!c.isEncoding(t))throw new TypeError("Unknown encoding: "+t);var n=0|y(e,t),r=u(n),o=r.write(e,t);o!==n&&(r=r.slice(0,o));return r}(e,t);if(ArrayBuffer.isView(e))return function(e){if(H(e,Uint8Array)){var t=new Uint8Array(e);return d(t.buffer,t.byteOffset,t.byteLength)}return p(e)}(e);if(null==e)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);if(H(e,ArrayBuffer)||e&&H(e.buffer,ArrayBuffer))return d(e,t,n);if("undefined"!=typeof SharedArrayBuffer&&(H(e,SharedArrayBuffer)||e&&H(e.buffer,SharedArrayBuffer)))return d(e,t,n);if("number"==typeof e)throw new TypeError('The "value" argument must not be of type number. Received type number');var r=e.valueOf&&e.valueOf();if(null!=r&&r!==e)return c.from(r,t,n);var o=function(e){if(c.isBuffer(e)){var t=0|h(e.length),n=u(t);return 0===n.length||e.copy(n,0,0,t),n}if(void 0!==e.length)return"number"!=typeof e.length||q(e.length)?u(0):p(e);if("Buffer"===e.type&&Array.isArray(e.data))return p(e.data)}(e);if(o)return o;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof e[Symbol.toPrimitive])return c.from(e[Symbol.toPrimitive]("string"),t,n);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e)}function l(e){if("number"!=typeof e)throw new TypeError('"size" argument must be of type number');if(e<0)throw new RangeError('The value "'+e+'" is invalid for option "size"')}function f(e){return l(e),u(e<0?0:0|h(e))}function p(e){for(var t=e.length<0?0:0|h(e.length),n=u(t),r=0;r<t;r+=1)n[r]=255&e[r];return n}function d(e,t,n){if(t<0||e.byteLength<t)throw new RangeError('"offset" is outside of buffer bounds');if(e.byteLength<t+(n||0))throw new RangeError('"length" is outside of buffer bounds');var r;return r=void 0===t&&void 0===n?new Uint8Array(e):void 0===n?new Uint8Array(e,t):new Uint8Array(e,t,n),Object.setPrototypeOf(r,c.prototype),r}function h(e){if(e>=a)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a.toString(16)+" bytes");return 0|e}function y(e,t){if(c.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||H(e,ArrayBuffer))return e.byteLength;if("string"!=typeof e)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);var n=e.length,r=arguments.length>2&&!0===arguments[2];if(!r&&0===n)return 0;for(var o=!1;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":return F(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return U(e).length;default:if(o)return r?-1:F(e).length;t=(""+t).toLowerCase(),o=!0}}function m(e,t,n){var r=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return T(this,t,n);case"utf8":case"utf-8":return j(this,t,n);case"ascii":return k(this,t,n);case"latin1":case"binary":return I(this,t,n);case"base64":return S(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return R(this,t,n);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}function v(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function g(e,t,n,r,o){if(0===e.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),q(n=+n)&&(n=o?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(o)return-1;n=e.length-1}else if(n<0){if(!o)return-1;n=0}if("string"==typeof t&&(t=c.from(t,r)),c.isBuffer(t))return 0===t.length?-1:b(e,t,n,r,o);if("number"==typeof t)return t&=255,"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):b(e,[t],n,r,o);throw new TypeError("val must be string, number or Buffer")}function b(e,t,n,r,o){var i,a=1,u=e.length,c=t.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||t.length<2)return-1;a=2,u/=2,c/=2,n/=2}function s(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(o){var l=-1;for(i=n;i<u;i++)if(s(e,i)===s(t,-1===l?0:i-l)){if(-1===l&&(l=i),i-l+1===c)return l*a}else-1!==l&&(i-=i-l),l=-1}else for(n+c>u&&(n=u-c),i=n;i>=0;i--){for(var f=!0,p=0;p<c;p++)if(s(e,i+p)!==s(t,p)){f=!1;break}if(f)return i}return-1}function w(e,t,n,r){n=Number(n)||0;var o=e.length-n;r?(r=Number(r))>o&&(r=o):r=o;var i=t.length;r>i/2&&(r=i/2);for(var a=0;a<r;++a){var u=parseInt(t.substr(2*a,2),16);if(q(u))return a;e[n+a]=u}return a}function O(e,t,n,r){return B(F(t,e.length-n),e,n,r)}function E(e,t,n,r){return B(function(e){for(var t=[],n=0;n<e.length;++n)t.push(255&e.charCodeAt(n));return t}(t),e,n,r)}function _(e,t,n,r){return B(U(t),e,n,r)}function x(e,t,n,r){return B(function(e,t){for(var n,r,o,i=[],a=0;a<e.length&&!((t-=2)<0);++a)r=(n=e.charCodeAt(a))>>8,o=n%256,i.push(o),i.push(r);return i}(t,e.length-n),e,n,r)}function S(e,t,n){return 0===t&&n===e.length?r.fromByteArray(e):r.fromByteArray(e.slice(t,n))}function j(e,t,n){n=Math.min(e.length,n);for(var r=[],o=t;o<n;){var i,a,u,c,s=e[o],l=null,f=s>239?4:s>223?3:s>191?2:1;if(o+f<=n)switch(f){case 1:s<128&&(l=s);break;case 2:128==(192&(i=e[o+1]))&&(c=(31&s)<<6|63&i)>127&&(l=c);break;case 3:i=e[o+1],a=e[o+2],128==(192&i)&&128==(192&a)&&(c=(15&s)<<12|(63&i)<<6|63&a)>2047&&(c<55296||c>57343)&&(l=c);break;case 4:i=e[o+1],a=e[o+2],u=e[o+3],128==(192&i)&&128==(192&a)&&128==(192&u)&&(c=(15&s)<<18|(63&i)<<12|(63&a)<<6|63&u)>65535&&c<1114112&&(l=c)}null===l?(l=65533,f=1):l>65535&&(l-=65536,r.push(l>>>10&1023|55296),l=56320|1023&l),r.push(l),o+=f}return function(e){var t=e.length;if(t<=P)return String.fromCharCode.apply(String,e);var n="",r=0;for(;r<t;)n+=String.fromCharCode.apply(String,e.slice(r,r+=P));return n}(r)}t.kMaxLength=a,c.TYPED_ARRAY_SUPPORT=function(){try{var e=new Uint8Array(1),t={foo:function(){return 42}};return Object.setPrototypeOf(t,Uint8Array.prototype),Object.setPrototypeOf(e,t),42===e.foo()}catch(e){return!1}}(),!c.TYPED_ARRAY_SUPPORT&&"undefined"!=typeof console&&console.error,Object.defineProperty(c.prototype,"parent",{enumerable:!0,get:function(){if(c.isBuffer(this))return this.buffer}}),Object.defineProperty(c.prototype,"offset",{enumerable:!0,get:function(){if(c.isBuffer(this))return this.byteOffset}}),c.poolSize=8192,c.from=function(e,t,n){return s(e,t,n)},Object.setPrototypeOf(c.prototype,Uint8Array.prototype),Object.setPrototypeOf(c,Uint8Array),c.alloc=function(e,t,n){return function(e,t,n){return l(e),e<=0?u(e):void 0!==t?"string"==typeof n?u(e).fill(t,n):u(e).fill(t):u(e)}(e,t,n)},c.allocUnsafe=function(e){return f(e)},c.allocUnsafeSlow=function(e){return f(e)},c.isBuffer=function(e){return null!=e&&!0===e._isBuffer&&e!==c.prototype},c.compare=function(e,t){if(H(e,Uint8Array)&&(e=c.from(e,e.offset,e.byteLength)),H(t,Uint8Array)&&(t=c.from(t,t.offset,t.byteLength)),!c.isBuffer(e)||!c.isBuffer(t))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(e===t)return 0;for(var n=e.length,r=t.length,o=0,i=Math.min(n,r);o<i;++o)if(e[o]!==t[o]){n=e[o],r=t[o];break}return n<r?-1:r<n?1:0},c.isEncoding=function(e){switch(String(e).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},c.concat=function(e,t){if(!Array.isArray(e))throw new TypeError('"list" argument must be an Array of Buffers');if(0===e.length)return c.alloc(0);var n;if(void 0===t)for(t=0,n=0;n<e.length;++n)t+=e[n].length;var r=c.allocUnsafe(t),o=0;for(n=0;n<e.length;++n){var i=e[n];if(H(i,Uint8Array))o+i.length>r.length?c.from(i).copy(r,o):Uint8Array.prototype.set.call(r,i,o);else{if(!c.isBuffer(i))throw new TypeError('"list" argument must be an Array of Buffers');i.copy(r,o)}o+=i.length}return r},c.byteLength=y,c.prototype._isBuffer=!0,c.prototype.swap16=function(){var e=this.length;if(e%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var t=0;t<e;t+=2)v(this,t,t+1);return this},c.prototype.swap32=function(){var e=this.length;if(e%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var t=0;t<e;t+=4)v(this,t,t+3),v(this,t+1,t+2);return this},c.prototype.swap64=function(){var e=this.length;if(e%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var t=0;t<e;t+=8)v(this,t,t+7),v(this,t+1,t+6),v(this,t+2,t+5),v(this,t+3,t+4);return this},c.prototype.toString=function(){var e=this.length;return 0===e?"":0===arguments.length?j(this,0,e):m.apply(this,arguments)},c.prototype.toLocaleString=c.prototype.toString,c.prototype.equals=function(e){if(!c.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e||0===c.compare(this,e)},c.prototype.inspect=function(){var e="",n=t.INSPECT_MAX_BYTES;return e=this.toString("hex",0,n).replace(/(.{2})/g,"$1 ").trim(),this.length>n&&(e+=" ... "),"<Buffer "+e+">"},i&&(c.prototype[i]=c.prototype.inspect),c.prototype.compare=function(e,t,n,r,o){if(H(e,Uint8Array)&&(e=c.from(e,e.offset,e.byteLength)),!c.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===r&&(r=0),void 0===o&&(o=this.length),t<0||n>e.length||r<0||o>this.length)throw new RangeError("out of range index");if(r>=o&&t>=n)return 0;if(r>=o)return-1;if(t>=n)return 1;if(this===e)return 0;for(var i=(o>>>=0)-(r>>>=0),a=(n>>>=0)-(t>>>=0),u=Math.min(i,a),s=this.slice(r,o),l=e.slice(t,n),f=0;f<u;++f)if(s[f]!==l[f]){i=s[f],a=l[f];break}return i<a?-1:a<i?1:0},c.prototype.includes=function(e,t,n){return-1!==this.indexOf(e,t,n)},c.prototype.indexOf=function(e,t,n){return g(this,e,t,n,!0)},c.prototype.lastIndexOf=function(e,t,n){return g(this,e,t,n,!1)},c.prototype.write=function(e,t,n,r){if(void 0===t)r="utf8",n=this.length,t=0;else if(void 0===n&&"string"==typeof t)r=t,n=this.length,t=0;else{if(!isFinite(t))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");t>>>=0,isFinite(n)?(n>>>=0,void 0===r&&(r="utf8")):(r=n,n=void 0)}var o=this.length-t;if((void 0===n||n>o)&&(n=o),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var i=!1;;)switch(r){case"hex":return w(this,e,t,n);case"utf8":case"utf-8":return O(this,e,t,n);case"ascii":case"latin1":case"binary":return E(this,e,t,n);case"base64":return _(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return x(this,e,t,n);default:if(i)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),i=!0}},c.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var P=4096;function k(e,t,n){var r="";n=Math.min(e.length,n);for(var o=t;o<n;++o)r+=String.fromCharCode(127&e[o]);return r}function I(e,t,n){var r="";n=Math.min(e.length,n);for(var o=t;o<n;++o)r+=String.fromCharCode(e[o]);return r}function T(e,t,n){var r=e.length;(!t||t<0)&&(t=0),(!n||n<0||n>r)&&(n=r);for(var o="",i=t;i<n;++i)o+=z[e[i]];return o}function R(e,t,n){for(var r=e.slice(t,n),o="",i=0;i<r.length-1;i+=2)o+=String.fromCharCode(r[i]+256*r[i+1]);return o}function C(e,t,n){if(e%1!=0||e<0)throw new RangeError("offset is not uint");if(e+t>n)throw new RangeError("Trying to access beyond buffer length")}function A(e,t,n,r,o,i){if(!c.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>o||t<i)throw new RangeError('"value" argument is out of bounds');if(n+r>e.length)throw new RangeError("Index out of range")}function N(e,t,n,r,o,i){if(n+r>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function L(e,t,n,r,i){return t=+t,n>>>=0,i||N(e,0,n,4),o.write(e,t,n,r,23,4),n+4}function D(e,t,n,r,i){return t=+t,n>>>=0,i||N(e,0,n,8),o.write(e,t,n,r,52,8),n+8}c.prototype.slice=function(e,t){var n=this.length;(e=~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),(t=void 0===t?n:~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),t<e&&(t=e);var r=this.subarray(e,t);return Object.setPrototypeOf(r,c.prototype),r},c.prototype.readUintLE=c.prototype.readUIntLE=function(e,t,n){e>>>=0,t>>>=0,n||C(e,t,this.length);for(var r=this[e],o=1,i=0;++i<t&&(o*=256);)r+=this[e+i]*o;return r},c.prototype.readUintBE=c.prototype.readUIntBE=function(e,t,n){e>>>=0,t>>>=0,n||C(e,t,this.length);for(var r=this[e+--t],o=1;t>0&&(o*=256);)r+=this[e+--t]*o;return r},c.prototype.readUint8=c.prototype.readUInt8=function(e,t){return e>>>=0,t||C(e,1,this.length),this[e]},c.prototype.readUint16LE=c.prototype.readUInt16LE=function(e,t){return e>>>=0,t||C(e,2,this.length),this[e]|this[e+1]<<8},c.prototype.readUint16BE=c.prototype.readUInt16BE=function(e,t){return e>>>=0,t||C(e,2,this.length),this[e]<<8|this[e+1]},c.prototype.readUint32LE=c.prototype.readUInt32LE=function(e,t){return e>>>=0,t||C(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},c.prototype.readUint32BE=c.prototype.readUInt32BE=function(e,t){return e>>>=0,t||C(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},c.prototype.readIntLE=function(e,t,n){e>>>=0,t>>>=0,n||C(e,t,this.length);for(var r=this[e],o=1,i=0;++i<t&&(o*=256);)r+=this[e+i]*o;return r>=(o*=128)&&(r-=Math.pow(2,8*t)),r},c.prototype.readIntBE=function(e,t,n){e>>>=0,t>>>=0,n||C(e,t,this.length);for(var r=t,o=1,i=this[e+--r];r>0&&(o*=256);)i+=this[e+--r]*o;return i>=(o*=128)&&(i-=Math.pow(2,8*t)),i},c.prototype.readInt8=function(e,t){return e>>>=0,t||C(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},c.prototype.readInt16LE=function(e,t){e>>>=0,t||C(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},c.prototype.readInt16BE=function(e,t){e>>>=0,t||C(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},c.prototype.readInt32LE=function(e,t){return e>>>=0,t||C(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},c.prototype.readInt32BE=function(e,t){return e>>>=0,t||C(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},c.prototype.readFloatLE=function(e,t){return e>>>=0,t||C(e,4,this.length),o.read(this,e,!0,23,4)},c.prototype.readFloatBE=function(e,t){return e>>>=0,t||C(e,4,this.length),o.read(this,e,!1,23,4)},c.prototype.readDoubleLE=function(e,t){return e>>>=0,t||C(e,8,this.length),o.read(this,e,!0,52,8)},c.prototype.readDoubleBE=function(e,t){return e>>>=0,t||C(e,8,this.length),o.read(this,e,!1,52,8)},c.prototype.writeUintLE=c.prototype.writeUIntLE=function(e,t,n,r){(e=+e,t>>>=0,n>>>=0,r)||A(this,e,t,n,Math.pow(2,8*n)-1,0);var o=1,i=0;for(this[t]=255&e;++i<n&&(o*=256);)this[t+i]=e/o&255;return t+n},c.prototype.writeUintBE=c.prototype.writeUIntBE=function(e,t,n,r){(e=+e,t>>>=0,n>>>=0,r)||A(this,e,t,n,Math.pow(2,8*n)-1,0);var o=n-1,i=1;for(this[t+o]=255&e;--o>=0&&(i*=256);)this[t+o]=e/i&255;return t+n},c.prototype.writeUint8=c.prototype.writeUInt8=function(e,t,n){return e=+e,t>>>=0,n||A(this,e,t,1,255,0),this[t]=255&e,t+1},c.prototype.writeUint16LE=c.prototype.writeUInt16LE=function(e,t,n){return e=+e,t>>>=0,n||A(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},c.prototype.writeUint16BE=c.prototype.writeUInt16BE=function(e,t,n){return e=+e,t>>>=0,n||A(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},c.prototype.writeUint32LE=c.prototype.writeUInt32LE=function(e,t,n){return e=+e,t>>>=0,n||A(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},c.prototype.writeUint32BE=c.prototype.writeUInt32BE=function(e,t,n){return e=+e,t>>>=0,n||A(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},c.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t>>>=0,!r){var o=Math.pow(2,8*n-1);A(this,e,t,n,o-1,-o)}var i=0,a=1,u=0;for(this[t]=255&e;++i<n&&(a*=256);)e<0&&0===u&&0!==this[t+i-1]&&(u=1),this[t+i]=(e/a>>0)-u&255;return t+n},c.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t>>>=0,!r){var o=Math.pow(2,8*n-1);A(this,e,t,n,o-1,-o)}var i=n-1,a=1,u=0;for(this[t+i]=255&e;--i>=0&&(a*=256);)e<0&&0===u&&0!==this[t+i+1]&&(u=1),this[t+i]=(e/a>>0)-u&255;return t+n},c.prototype.writeInt8=function(e,t,n){return e=+e,t>>>=0,n||A(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},c.prototype.writeInt16LE=function(e,t,n){return e=+e,t>>>=0,n||A(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},c.prototype.writeInt16BE=function(e,t,n){return e=+e,t>>>=0,n||A(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},c.prototype.writeInt32LE=function(e,t,n){return e=+e,t>>>=0,n||A(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},c.prototype.writeInt32BE=function(e,t,n){return e=+e,t>>>=0,n||A(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},c.prototype.writeFloatLE=function(e,t,n){return L(this,e,t,!0,n)},c.prototype.writeFloatBE=function(e,t,n){return L(this,e,t,!1,n)},c.prototype.writeDoubleLE=function(e,t,n){return D(this,e,t,!0,n)},c.prototype.writeDoubleBE=function(e,t,n){return D(this,e,t,!1,n)},c.prototype.copy=function(e,t,n,r){if(!c.isBuffer(e))throw new TypeError("argument should be a Buffer");if(n||(n=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),r>0&&r<n&&(r=n),r===n)return 0;if(0===e.length||0===this.length)return 0;if(t<0)throw new RangeError("targetStart out of bounds");if(n<0||n>=this.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),e.length-t<r-n&&(r=e.length-t+n);var o=r-n;return this===e&&"function"==typeof Uint8Array.prototype.copyWithin?this.copyWithin(t,n,r):Uint8Array.prototype.set.call(e,this.subarray(n,r),t),o},c.prototype.fill=function(e,t,n,r){if("string"==typeof e){if("string"==typeof t?(r=t,t=0,n=this.length):"string"==typeof n&&(r=n,n=this.length),void 0!==r&&"string"!=typeof r)throw new TypeError("encoding must be a string");if("string"==typeof r&&!c.isEncoding(r))throw new TypeError("Unknown encoding: "+r);if(1===e.length){var o=e.charCodeAt(0);("utf8"===r&&o<128||"latin1"===r)&&(e=o)}}else"number"==typeof e?e&=255:"boolean"==typeof e&&(e=Number(e));if(t<0||this.length<t||this.length<n)throw new RangeError("Out of range index");if(n<=t)return this;var i;if(t>>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"==typeof e)for(i=t;i<n;++i)this[i]=e;else{var a=c.isBuffer(e)?e:c.from(e,r),u=a.length;if(0===u)throw new TypeError('The value "'+e+'" is invalid for argument "value"');for(i=0;i<n-t;++i)this[i+t]=a[i%u]}return this};var M=/[^+/0-9A-Za-z-_]/g;function F(e,t){var n;t=t||1/0;for(var r=e.length,o=null,i=[],a=0;a<r;++a){if((n=e.charCodeAt(a))>55295&&n<57344){if(!o){if(n>56319){(t-=3)>-1&&i.push(239,191,189);continue}if(a+1===r){(t-=3)>-1&&i.push(239,191,189);continue}o=n;continue}if(n<56320){(t-=3)>-1&&i.push(239,191,189),o=n;continue}n=65536+(o-55296<<10|n-56320)}else o&&(t-=3)>-1&&i.push(239,191,189);if(o=null,n<128){if((t-=1)<0)break;i.push(n)}else if(n<2048){if((t-=2)<0)break;i.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;i.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;i.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return i}function U(e){return r.toByteArray(function(e){if((e=(e=e.split("=")[0]).trim().replace(M,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function B(e,t,n,r){for(var o=0;o<r&&!(o+n>=t.length||o>=e.length);++o)t[o+n]=e[o];return o}function H(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function q(e){return e!=e}var z=function(){for(var e="0123456789abcdef",t=new Array(256),n=0;n<16;++n)for(var r=16*n,o=0;o<16;++o)t[r+o]=e[n]+e[o];return t}()},77352:(e,t,n)=>{"use strict";var r=n(13049),o=n(89193),i=o(r("String.prototype.indexOf"));e.exports=function(e,t){var n=r(e,!!t);return"function"==typeof n&&i(e,".prototype.")>-1?o(n):n}},89193:(e,t,n)=>{"use strict";var r=n(92502),o=n(13049),i=o("%Function.prototype.apply%"),a=o("%Function.prototype.call%"),u=o("%Reflect.apply%",!0)||r.call(a,i),c=o("%Object.getOwnPropertyDescriptor%",!0),s=o("%Object.defineProperty%",!0),l=o("%Math.max%");if(s)try{s({},"a",{value:1})}catch(e){s=null}e.exports=function(e){var t=u(r,a,arguments);if(c&&s){var n=c(t,"length");n.configurable&&s(t,"length",{value:1+l(0,e.length-(arguments.length-1))})}return t};var f=function(){return u(r,i,arguments)};s?s(e.exports,"apply",{value:f}):e.exports.apply=f},10166:(e,t)=>{var n;!function(){"use strict";var r={}.hasOwnProperty;function o(){for(var e=[],t=0;t<arguments.length;t++){var n=arguments[t];if(n){var i=typeof n;if("string"===i||"number"===i)e.push(n);else if(Array.isArray(n)){if(n.length){var a=o.apply(null,n);a&&e.push(a)}}else if("object"===i)if(n.toString===Object.prototype.toString)for(var u in n)r.call(n,u)&&n[u]&&e.push(u);else e.push(n.toString())}}return e.join(" ")}e.exports?(o.default=o,e.exports=o):void 0===(n=function(){return o}.apply(t,[]))||(e.exports=n)}()},29343:(e,t,n)=>{"use strict";n.d(t,{f9:()=>b,IV:()=>w});var r,o,i=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),a=(r=["",""],o=["",""],Object.freeze(Object.defineProperties(r,{raw:{value:Object.freeze(o)}})));function u(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}const c=function(){function e(){for(var t=this,n=arguments.length,r=Array(n),o=0;o<n;o++)r[o]=arguments[o];return u(this,e),this.tag=function(e){for(var n=arguments.length,r=Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];return"function"==typeof e?t.interimTag.bind(t,e):"string"==typeof e?t.transformEndResult(e):(e=e.map(t.transformString.bind(t)),t.transformEndResult(e.reduce(t.processSubstitutions.bind(t,r))))},r.length>0&&Array.isArray(r[0])&&(r=r[0]),this.transformers=r.map((function(e){return"function"==typeof e?e():e})),this.tag}return i(e,[{key:"interimTag",value:function(e,t){for(var n=arguments.length,r=Array(n>2?n-2:0),o=2;o<n;o++)r[o-2]=arguments[o];return this.tag(a,e.apply(void 0,[t].concat(r)))}},{key:"processSubstitutions",value:function(e,t,n){var r=this.transformSubstitution(e.shift(),t);return"".concat(t,r,n)}},{key:"transformString",value:function(e){return this.transformers.reduce((function(e,t){return t.onString?t.onString(e):e}),e)}},{key:"transformSubstitution",value:function(e,t){return this.transformers.reduce((function(e,n){return n.onSubstitution?n.onSubstitution(e,t):e}),e)}},{key:"transformEndResult",value:function(e){return this.transformers.reduce((function(e,t){return t.onEndResult?t.onEndResult(e):e}),e)}}]),e}();var s={separator:"",conjunction:"",serial:!1};const l=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:s;return{onSubstitution:function(t,n){if(Array.isArray(t)){var r=t.length,o=e.separator,i=e.conjunction,a=e.serial,u=n.match(/(\n?[^\S\n]+)$/);if(t=u?t.join(o+u[1]):t.join(o+" "),i&&r>1){var c=t.lastIndexOf(o);t=t.slice(0,c)+(a?o:"")+" "+i+t.slice(c+1)}}return t}}};function f(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}const p=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"initial";return{onEndResult:function(t){if("initial"===e){var n=t.match(/^[^\S\n]*(?=\S)/gm),r=n&&Math.min.apply(Math,f(n.map((function(e){return e.length}))));if(r){var o=new RegExp("^.{"+r+"}","gm");return t.replace(o,"")}return t}if("all"===e)return t.replace(/^[^\S\n]+/gm,"");throw new Error("Unknown type: "+e)}}};const d=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return{onEndResult:function(t){if(""===e)return t.trim();if("start"===(e=e.toLowerCase())||"left"===e)return t.replace(/^\s*/,"");if("end"===e||"right"===e)return t.replace(/\s*$/,"");throw new Error("Side not supported: "+e)}}};new c(l({separator:","}),p,d);new c(l({separator:",",conjunction:"and"}),p,d);new c(l({separator:",",conjunction:"or"}),p,d);const h=function(e){return{onSubstitution:function(t,n){if(null==e||"string"!=typeof e)throw new Error("You need to specify a string character to split by.");return"string"==typeof t&&t.includes(e)&&(t=t.split(e)),t}}};var y=function(e){return null!=e&&!Number.isNaN(e)&&"boolean"!=typeof e};const m=function(){return{onSubstitution:function(e){return Array.isArray(e)?e.filter(y):y(e)?e:""}}};new c(h("\n"),m,l,p,d);const v=function(e,t){return{onSubstitution:function(n,r){if(null==e||null==t)throw new Error("replaceSubstitutionTransformer requires at least 2 arguments.");return null==n?n:n.toString().replace(e,t)}}};new c(h("\n"),l,p,d,v(/&/g,"&amp;"),v(/</g,"&lt;"),v(/>/g,"&gt;"),v(/"/g,"&quot;"),v(/'/g,"&#x27;"),v(/`/g,"&#x60;"));const g=function(e,t){return{onEndResult:function(n){if(null==e||null==t)throw new Error("replaceResultTransformer requires at least 2 arguments.");return n.replace(e,t)}}};const b=new c(g(/(?:\n(?:\s*))+/g," "),d);const w=new c(g(/(?:\n\s*)/g,""),d);new c(l({separator:","}),g(/(?:\s+)/g," "),d);new c(l({separator:",",conjunction:"or"}),g(/(?:\s+)/g," "),d);new c(l({separator:",",conjunction:"and"}),g(/(?:\s+)/g," "),d);new c(l,p,d);new c(l,g(/(?:\s+)/g," "),d);new c(p,d);new c(p("all"),d)},78695:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.__RewireAPI__=t.__ResetDependency__=t.__set__=t.__Rewire__=t.__GetDependency__=t.__get__=void 0;var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=n(84258),a=f(i),u=f(n(53486)),c=n(72466),s=n(91499),l=n(35052);function f(e){return e&&e.__esModule?e:{default:e}}var p=function(e){var t=e.getIn,n=e.toJS,r=function(e){function r(e,o){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,r);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(r.__proto__||Object.getPrototypeOf(r)).call(this,e));i.inTimeTravelling=!1,i.unsubscribe=o.store.subscribe((function(){var r=n(t(o.store.getState(),["router","location"])),a=r.pathname,u=r.search,c=r.hash,s=e.history.location,l=s.pathname,f=s.search,p=s.hash;l===a&&f===u&&p===c||(i.inTimeTravelling=!0,e.history.push({pathname:a,search:u,hash:c}))}));var a=function(t,n){i.inTimeTravelling?i.inTimeTravelling=!1:e.onLocationChanged(t,n)};return i.unlisten=e.history.listen(a),a(e.history.location,e.history.action),i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(r,e),o(r,[{key:"componentWillUnmount",value:function(){this.unlisten(),this.unsubscribe()}},{key:"render",value:function(){var e=this.props,t=e.history,n=e.children;return O("React").createElement(O("Router"),{history:t},n)}}]),r}(O("Component"));r.contextTypes={store:O("PropTypes").shape({getState:O("PropTypes").func.isRequired,subscribe:O("PropTypes").func.isRequired}).isRequired},r.propTypes={history:O("PropTypes").shape({action:O("PropTypes").string.isRequired,listen:O("PropTypes").func.isRequired,location:O("PropTypes").object.isRequired,push:O("PropTypes").func.isRequired}).isRequired,location:O("PropTypes").oneOfType([O("PropTypes").object,O("PropTypes").string]).isRequired,action:O("PropTypes").string.isRequired,basename:O("PropTypes").string,children:O("PropTypes").oneOfType([O("PropTypes").func,O("PropTypes").node]),onLocationChanged:O("PropTypes").func.isRequired};return O("connect")((function(e){return{action:t(e,["router","action"]),location:t(e,["router","location"])}}),(function(e){return{onLocationChanged:function(t,n){return e(O("onLocationChanged")(t,n))}}}))(r)};function d(){try{if(n.g)return n.g}catch(e){try{if(window)return window}catch(e){return this}}}t.default=O("createConnectedRouter");var h,y=null;function m(){if(null===y){var e=d();e.__$$GLOBAL_REWIRE_NEXT_MODULE_ID__||(e.__$$GLOBAL_REWIRE_NEXT_MODULE_ID__=0),y=__$$GLOBAL_REWIRE_NEXT_MODULE_ID__++}return y}function v(){var e=d();return e.__$$GLOBAL_REWIRE_REGISTRY__||(e.__$$GLOBAL_REWIRE_REGISTRY__=Object.create(null)),__$$GLOBAL_REWIRE_REGISTRY__}function g(){var e=m(),t=v(),n=t[e];return n||(t[e]=Object.create(null),n=t[e]),n}(h=d()).__rewire_reset_all__||(h.__rewire_reset_all__=function(){h.__$$GLOBAL_REWIRE_REGISTRY__=Object.create(null)});var b="__INTENTIONAL_UNDEFINED__",w={};function O(e){var t=g();if(void 0===t[e])return function(e){switch(e){case"Component":return i.Component;case"PropTypes":return u.default;case"onLocationChanged":return l.onLocationChanged;case"connect":return c.connect;case"createConnectedRouter":return p;case"React":return a.default;case"Router":return s.Router}return}(e);var n=t[e];return n===b?void 0:n}function E(e,t){var n=g();if("object"!==(void 0===e?"undefined":r(e)))return n[e]=void 0===t?b:t,function(){_(e)};Object.keys(e).forEach((function(t){n[t]=e[t]}))}function _(e){var t=g();delete t[e],0==Object.keys(t).length&&delete v()[m]}function x(e){var t=g(),n=Object.keys(e),r={};function o(){n.forEach((function(e){t[e]=r[e]}))}return function(i){n.forEach((function(n){r[n]=t[n],t[n]=e[n]}));var a=i();return a&&"function"==typeof a.then?a.then(o).catch(o):o(),a}}!function(){function e(e,t){Object.defineProperty(w,e,{value:t,enumerable:!1,configurable:!0})}e("__get__",O),e("__GetDependency__",O),e("__Rewire__",E),e("__set__",E),e("__reset__",_),e("__ResetDependency__",_),e("__with__",x)}();var S=r(p);function j(e,t){Object.defineProperty(p,e,{value:t,enumerable:!1,configurable:!0})}"object"!==S&&"function"!==S||!Object.isExtensible(p)||(j("__get__",O),j("__GetDependency__",O),j("__Rewire__",E),j("__set__",E),j("__reset__",_),j("__ResetDependency__",_),j("__with__",x),j("__RewireAPI__",w)),t.__get__=O,t.__GetDependency__=O,t.__Rewire__=E,t.__set__=E,t.__ResetDependency__=_,t.__RewireAPI__=w},35052:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o=t.LOCATION_CHANGE="@@router/LOCATION_CHANGE",i=(t.onLocationChanged=function(e,t){return{type:w("LOCATION_CHANGE"),payload:{location:e,action:t}}},t.CALL_HISTORY_METHOD="@@router/CALL_HISTORY_METHOD"),a=function(e){return function(){for(var t=arguments.length,n=Array(t),r=0;r<t;r++)n[r]=arguments[r];return{type:w("CALL_HISTORY_METHOD"),payload:{method:e,args:n}}}},u=t.push=w("updateLocation")("push"),c=t.replace=w("updateLocation")("replace"),s=t.go=w("updateLocation")("go"),l=t.goBack=w("updateLocation")("goBack"),f=t.goForward=w("updateLocation")("goForward");t.routerActions={push:w("push"),replace:w("replace"),go:w("go"),goBack:w("goBack"),goForward:w("goForward")};function p(){try{if(n.g)return n.g}catch(e){try{if(window)return window}catch(e){return this}}}var d,h=null;function y(){if(null===h){var e=p();e.__$$GLOBAL_REWIRE_NEXT_MODULE_ID__||(e.__$$GLOBAL_REWIRE_NEXT_MODULE_ID__=0),h=__$$GLOBAL_REWIRE_NEXT_MODULE_ID__++}return h}function m(){var e=p();return e.__$$GLOBAL_REWIRE_REGISTRY__||(e.__$$GLOBAL_REWIRE_REGISTRY__=Object.create(null)),__$$GLOBAL_REWIRE_REGISTRY__}function v(){var e=y(),t=m(),n=t[e];return n||(t[e]=Object.create(null),n=t[e]),n}(d=p()).__rewire_reset_all__||(d.__rewire_reset_all__=function(){d.__$$GLOBAL_REWIRE_REGISTRY__=Object.create(null)});var g="__INTENTIONAL_UNDEFINED__",b={};function w(e){var t=v();if(void 0===t[e])return function(e){switch(e){case"LOCATION_CHANGE":return o;case"CALL_HISTORY_METHOD":return i;case"updateLocation":return a;case"push":return u;case"replace":return c;case"go":return s;case"goBack":return l;case"goForward":return f}return}(e);var n=t[e];return n===g?void 0:n}function O(e,t){var n=v();if("object"!==(void 0===e?"undefined":r(e)))return n[e]=void 0===t?g:t,function(){E(e)};Object.keys(e).forEach((function(t){n[t]=e[t]}))}function E(e){var t=v();delete t[e],0==Object.keys(t).length&&delete m()[y]}function _(e){var t=v(),n=Object.keys(e),r={};function o(){n.forEach((function(e){t[e]=r[e]}))}return function(i){n.forEach((function(n){r[n]=t[n],t[n]=e[n]}));var a=i();return a&&"function"==typeof a.then?a.then(o).catch(o):o(),a}}!function(){function e(e,t){Object.defineProperty(b,e,{value:t,enumerable:!1,configurable:!0})}e("__get__",w),e("__GetDependency__",w),e("__Rewire__",O),e("__set__",O),e("__reset__",E),e("__ResetDependency__",E),e("__with__",_)}(),t.__get__=w,t.__GetDependency__=w,t.__Rewire__=O,t.__set__=O,t.__ResetDependency__=E,t.__RewireAPI__=b,t.default=b},53214:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.__RewireAPI__=t.__ResetDependency__=t.__set__=t.__Rewire__=t.__GetDependency__=t.__get__=void 0;var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(n(35052)),a=l(n(78695)),u=l(n(66370)),c=l(n(90827)),s=l(n(92661));function l(e){return e&&e.__esModule?e:{default:e}}var f=function(e){return o({},w("actions"),w("createSelectors")(e),{ConnectedRouter:w("createConnectedRouter")(e),connectRouter:w("createConnectRouter")(e),routerMiddleware:w("routerMiddleware")})};function p(){try{if(n.g)return n.g}catch(e){try{if(window)return window}catch(e){return this}}}t.default=w("createAll");var d,h=null;function y(){if(null===h){var e=p();e.__$$GLOBAL_REWIRE_NEXT_MODULE_ID__||(e.__$$GLOBAL_REWIRE_NEXT_MODULE_ID__=0),h=__$$GLOBAL_REWIRE_NEXT_MODULE_ID__++}return h}function m(){var e=p();return e.__$$GLOBAL_REWIRE_REGISTRY__||(e.__$$GLOBAL_REWIRE_REGISTRY__=Object.create(null)),__$$GLOBAL_REWIRE_REGISTRY__}function v(){var e=y(),t=m(),n=t[e];return n||(t[e]=Object.create(null),n=t[e]),n}(d=p()).__rewire_reset_all__||(d.__rewire_reset_all__=function(){d.__$$GLOBAL_REWIRE_REGISTRY__=Object.create(null)});var g="__INTENTIONAL_UNDEFINED__",b={};function w(e){var t=v();if(void 0===t[e])return function(e){switch(e){case"actions":return function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return Object.keys(e).filter((function(e){return"__get__"!==e&&"__set__"!==e&&"__reset__"!==e&&"__with__"!==e&&"__GetDependency__"!==e&&"__Rewire__"!==e&&"__ResetDependency__"!==e&&"__RewireAPI__"!==e})).reduce((function(t,n){return t[n]=e[n],t}),{})}(i);case"createSelectors":return s.default;case"createConnectedRouter":return a.default;case"createConnectRouter":return u.default;case"routerMiddleware":return c.default;case"createAll":return f}return}(e);var n=t[e];return n===g?void 0:n}function O(e,t){var n=v();if("object"!==(void 0===e?"undefined":r(e)))return n[e]=void 0===t?g:t,function(){E(e)};Object.keys(e).forEach((function(t){n[t]=e[t]}))}function E(e){var t=v();delete t[e],0==Object.keys(t).length&&delete m()[y]}function _(e){var t=v(),n=Object.keys(e),r={};function o(){n.forEach((function(e){t[e]=r[e]}))}return function(i){n.forEach((function(n){r[n]=t[n],t[n]=e[n]}));var a=i();return a&&"function"==typeof a.then?a.then(o).catch(o):o(),a}}!function(){function e(e,t){Object.defineProperty(b,e,{value:t,enumerable:!1,configurable:!0})}e("__get__",w),e("__GetDependency__",w),e("__Rewire__",O),e("__set__",O),e("__reset__",E),e("__ResetDependency__",E),e("__with__",_)}();var x=r(f);function S(e,t){Object.defineProperty(f,e,{value:t,enumerable:!1,configurable:!0})}"object"!==x&&"function"!==x||!Object.isExtensible(f)||(S("__get__",w),S("__GetDependency__",w),S("__Rewire__",O),S("__set__",O),S("__reset__",E),S("__ResetDependency__",E),S("__with__",_),S("__RewireAPI__",b)),t.__get__=w,t.__GetDependency__=w,t.__Rewire__=O,t.__set__=O,t.__ResetDependency__=E,t.__RewireAPI__=b},99133:(e,t,n)=>{"use strict";t.zk=t.iz=t.xI=t.VF=t.nk=void 0;var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o=a(n(53214)),i=a(n(4674));function a(e){return e&&e.__esModule?e:{default:e}}var u=T("createAll")(T("plainStructure")),c=u.LOCATION_CHANGE,s=u.CALL_HISTORY_METHOD,l=u.push,f=u.replace,p=u.go,d=u.goBack,h=u.goForward,y=u.routerActions,m=u.ConnectedRouter,v=u.connectRouter,g=u.routerMiddleware,b=u.getLocation,w=u.getAction,O=u.createMatchSelector;function E(){try{if(n.g)return n.g}catch(e){try{if(window)return window}catch(e){return this}}}t.nk=c,t.VF=l,t.xI=m,t.iz=v,t.zk=g;var _,x=null;function S(){if(null===x){var e=E();e.__$$GLOBAL_REWIRE_NEXT_MODULE_ID__||(e.__$$GLOBAL_REWIRE_NEXT_MODULE_ID__=0),x=__$$GLOBAL_REWIRE_NEXT_MODULE_ID__++}return x}function j(){var e=E();return e.__$$GLOBAL_REWIRE_REGISTRY__||(e.__$$GLOBAL_REWIRE_REGISTRY__=Object.create(null)),__$$GLOBAL_REWIRE_REGISTRY__}function P(){var e=S(),t=j(),n=t[e];return n||(t[e]=Object.create(null),n=t[e]),n}(_=E()).__rewire_reset_all__||(_.__rewire_reset_all__=function(){_.__$$GLOBAL_REWIRE_REGISTRY__=Object.create(null)});var k="__INTENTIONAL_UNDEFINED__",I={};function T(e){var t=P();if(void 0===t[e])return function(e){switch(e){case"createAll":return o.default;case"plainStructure":return i.default}return}(e);var n=t[e];return n===k?void 0:n}function R(e,t){var n=P();if("object"!==(void 0===e?"undefined":r(e)))return n[e]=void 0===t?k:t,function(){C(e)};Object.keys(e).forEach((function(t){n[t]=e[t]}))}function C(e){var t=P();delete t[e],0==Object.keys(t).length&&delete j()[S]}function A(e){var t=P(),n=Object.keys(e),r={};function o(){n.forEach((function(e){t[e]=r[e]}))}return function(i){n.forEach((function(n){r[n]=t[n],t[n]=e[n]}));var a=i();return a&&"function"==typeof a.then?a.then(o).catch(o):o(),a}}!function(){function e(e,t){Object.defineProperty(I,e,{value:t,enumerable:!1,configurable:!0})}e("__get__",T),e("__GetDependency__",T),e("__Rewire__",R),e("__set__",R),e("__reset__",C),e("__ResetDependency__",C),e("__with__",A)}()},90827:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.__RewireAPI__=t.__ResetDependency__=t.__set__=t.__Rewire__=t.__GetDependency__=t.__get__=void 0;var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o=n(35052);var i=function(e){return function(t){return function(t){return function(n){if(n.type!==h("CALL_HISTORY_METHOD"))return t(n);var r=n.payload,o=r.method,i=r.args;e[o].apply(e,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}(i))}}}};function a(){try{if(n.g)return n.g}catch(e){try{if(window)return window}catch(e){return this}}}t.default=h("routerMiddleware");var u,c=null;function s(){if(null===c){var e=a();e.__$$GLOBAL_REWIRE_NEXT_MODULE_ID__||(e.__$$GLOBAL_REWIRE_NEXT_MODULE_ID__=0),c=__$$GLOBAL_REWIRE_NEXT_MODULE_ID__++}return c}function l(){var e=a();return e.__$$GLOBAL_REWIRE_REGISTRY__||(e.__$$GLOBAL_REWIRE_REGISTRY__=Object.create(null)),__$$GLOBAL_REWIRE_REGISTRY__}function f(){var e=s(),t=l(),n=t[e];return n||(t[e]=Object.create(null),n=t[e]),n}(u=a()).__rewire_reset_all__||(u.__rewire_reset_all__=function(){u.__$$GLOBAL_REWIRE_REGISTRY__=Object.create(null)});var p="__INTENTIONAL_UNDEFINED__",d={};function h(e){var t=f();if(void 0===t[e])return function(e){switch(e){case"CALL_HISTORY_METHOD":return o.CALL_HISTORY_METHOD;case"routerMiddleware":return i}return}(e);var n=t[e];return n===p?void 0:n}function y(e,t){var n=f();if("object"!==(void 0===e?"undefined":r(e)))return n[e]=void 0===t?p:t,function(){m(e)};Object.keys(e).forEach((function(t){n[t]=e[t]}))}function m(e){var t=f();delete t[e],0==Object.keys(t).length&&delete l()[s]}function v(e){var t=f(),n=Object.keys(e),r={};function o(){n.forEach((function(e){t[e]=r[e]}))}return function(i){n.forEach((function(n){r[n]=t[n],t[n]=e[n]}));var a=i();return a&&"function"==typeof a.then?a.then(o).catch(o):o(),a}}!function(){function e(e,t){Object.defineProperty(d,e,{value:t,enumerable:!1,configurable:!0})}e("__get__",h),e("__GetDependency__",h),e("__Rewire__",y),e("__set__",y),e("__reset__",m),e("__ResetDependency__",m),e("__with__",v)}();var g=r(i);function b(e,t){Object.defineProperty(i,e,{value:t,enumerable:!1,configurable:!0})}"object"!==g&&"function"!==g||!Object.isExtensible(i)||(b("__get__",h),b("__GetDependency__",h),b("__Rewire__",y),b("__set__",y),b("__reset__",m),b("__ResetDependency__",m),b("__with__",v),b("__RewireAPI__",d)),t.__get__=h,t.__GetDependency__=h,t.__Rewire__=y,t.__set__=y,t.__ResetDependency__=m,t.__RewireAPI__=d},66370:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.__RewireAPI__=t.__ResetDependency__=t.__set__=t.__Rewire__=t.__GetDependency__=t.__get__=void 0;var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o=n(35052),i=function(e){var t=e.fromJS,n=e.merge;return function(e){var r=t({location:e.location,action:e.action});return function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:r,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=t.type,i=t.payload;return o===h("LOCATION_CHANGE")?n(e,i):e}}};function a(){try{if(n.g)return n.g}catch(e){try{if(window)return window}catch(e){return this}}}t.default=h("createConnectRouter");var u,c=null;function s(){if(null===c){var e=a();e.__$$GLOBAL_REWIRE_NEXT_MODULE_ID__||(e.__$$GLOBAL_REWIRE_NEXT_MODULE_ID__=0),c=__$$GLOBAL_REWIRE_NEXT_MODULE_ID__++}return c}function l(){var e=a();return e.__$$GLOBAL_REWIRE_REGISTRY__||(e.__$$GLOBAL_REWIRE_REGISTRY__=Object.create(null)),__$$GLOBAL_REWIRE_REGISTRY__}function f(){var e=s(),t=l(),n=t[e];return n||(t[e]=Object.create(null),n=t[e]),n}(u=a()).__rewire_reset_all__||(u.__rewire_reset_all__=function(){u.__$$GLOBAL_REWIRE_REGISTRY__=Object.create(null)});var p="__INTENTIONAL_UNDEFINED__",d={};function h(e){var t=f();if(void 0===t[e])return function(e){switch(e){case"LOCATION_CHANGE":return o.LOCATION_CHANGE;case"createConnectRouter":return i}return}(e);var n=t[e];return n===p?void 0:n}function y(e,t){var n=f();if("object"!==(void 0===e?"undefined":r(e)))return n[e]=void 0===t?p:t,function(){m(e)};Object.keys(e).forEach((function(t){n[t]=e[t]}))}function m(e){var t=f();delete t[e],0==Object.keys(t).length&&delete l()[s]}function v(e){var t=f(),n=Object.keys(e),r={};function o(){n.forEach((function(e){t[e]=r[e]}))}return function(i){n.forEach((function(n){r[n]=t[n],t[n]=e[n]}));var a=i();return a&&"function"==typeof a.then?a.then(o).catch(o):o(),a}}!function(){function e(e,t){Object.defineProperty(d,e,{value:t,enumerable:!1,configurable:!0})}e("__get__",h),e("__GetDependency__",h),e("__Rewire__",y),e("__set__",y),e("__reset__",m),e("__ResetDependency__",m),e("__with__",v)}();var g=r(i);function b(e,t){Object.defineProperty(i,e,{value:t,enumerable:!1,configurable:!0})}"object"!==g&&"function"!==g||!Object.isExtensible(i)||(b("__get__",h),b("__GetDependency__",h),b("__Rewire__",y),b("__set__",y),b("__reset__",m),b("__ResetDependency__",m),b("__with__",v),b("__RewireAPI__",d)),t.__get__=h,t.__GetDependency__=h,t.__Rewire__=y,t.__set__=y,t.__ResetDependency__=m,t.__RewireAPI__=d},92661:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.__RewireAPI__=t.__ResetDependency__=t.__set__=t.__Rewire__=t.__GetDependency__=t.__get__=void 0;var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o=n(91499),i=function(e){var t=e.getIn,n=e.toJS,r=function(e){return n(t(e,["router","location"]))};return{getLocation:r,getAction:function(e){return n(t(e,["router","action"]))},createMatchSelector:function(e){var t=null,n=null;return function(o){var i=(r(o)||{}).pathname;if(i===t)return n;t=i;var a=h("matchPath")(i,e);return a&&n&&a.url===n.url||(n=a),n}}}};function a(){try{if(n.g)return n.g}catch(e){try{if(window)return window}catch(e){return this}}}t.default=h("createSelectors");var u,c=null;function s(){if(null===c){var e=a();e.__$$GLOBAL_REWIRE_NEXT_MODULE_ID__||(e.__$$GLOBAL_REWIRE_NEXT_MODULE_ID__=0),c=__$$GLOBAL_REWIRE_NEXT_MODULE_ID__++}return c}function l(){var e=a();return e.__$$GLOBAL_REWIRE_REGISTRY__||(e.__$$GLOBAL_REWIRE_REGISTRY__=Object.create(null)),__$$GLOBAL_REWIRE_REGISTRY__}function f(){var e=s(),t=l(),n=t[e];return n||(t[e]=Object.create(null),n=t[e]),n}(u=a()).__rewire_reset_all__||(u.__rewire_reset_all__=function(){u.__$$GLOBAL_REWIRE_REGISTRY__=Object.create(null)});var p="__INTENTIONAL_UNDEFINED__",d={};function h(e){var t=f();if(void 0===t[e])return function(e){switch(e){case"matchPath":return o.matchPath;case"createSelectors":return i}return}(e);var n=t[e];return n===p?void 0:n}function y(e,t){var n=f();if("object"!==(void 0===e?"undefined":r(e)))return n[e]=void 0===t?p:t,function(){m(e)};Object.keys(e).forEach((function(t){n[t]=e[t]}))}function m(e){var t=f();delete t[e],0==Object.keys(t).length&&delete l()[s]}function v(e){var t=f(),n=Object.keys(e),r={};function o(){n.forEach((function(e){t[e]=r[e]}))}return function(i){n.forEach((function(n){r[n]=t[n],t[n]=e[n]}));var a=i();return a&&"function"==typeof a.then?a.then(o).catch(o):o(),a}}!function(){function e(e,t){Object.defineProperty(d,e,{value:t,enumerable:!1,configurable:!0})}e("__get__",h),e("__GetDependency__",h),e("__Rewire__",y),e("__set__",y),e("__reset__",m),e("__ResetDependency__",m),e("__with__",v)}();var g=r(i);function b(e,t){Object.defineProperty(i,e,{value:t,enumerable:!1,configurable:!0})}"object"!==g&&"function"!==g||!Object.isExtensible(i)||(b("__get__",h),b("__GetDependency__",h),b("__Rewire__",y),b("__set__",y),b("__reset__",m),b("__ResetDependency__",m),b("__with__",v),b("__RewireAPI__",d)),t.__get__=h,t.__GetDependency__=h,t.__Rewire__=y,t.__set__=y,t.__ResetDependency__=m,t.__RewireAPI__=d},95080:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o=function(e,t){if(!e)return e;var n=t.length;if(n){for(var r=e,o=0;o<n&&r;++o)r=r[t[o]];return r}};function i(){try{if(n.g)return n.g}catch(e){try{if(window)return window}catch(e){return this}}}t.default=d("getIn");var a,u=null;function c(){if(null===u){var e=i();e.__$$GLOBAL_REWIRE_NEXT_MODULE_ID__||(e.__$$GLOBAL_REWIRE_NEXT_MODULE_ID__=0),u=__$$GLOBAL_REWIRE_NEXT_MODULE_ID__++}return u}function s(){var e=i();return e.__$$GLOBAL_REWIRE_REGISTRY__||(e.__$$GLOBAL_REWIRE_REGISTRY__=Object.create(null)),__$$GLOBAL_REWIRE_REGISTRY__}function l(){var e=c(),t=s(),n=t[e];return n||(t[e]=Object.create(null),n=t[e]),n}(a=i()).__rewire_reset_all__||(a.__rewire_reset_all__=function(){a.__$$GLOBAL_REWIRE_REGISTRY__=Object.create(null)});var f="__INTENTIONAL_UNDEFINED__",p={};function d(e){var t=l();if(void 0===t[e])return function(e){switch(e){case"getIn":return o}return}(e);var n=t[e];return n===f?void 0:n}function h(e,t){var n=l();if("object"!==(void 0===e?"undefined":r(e)))return n[e]=void 0===t?f:t,function(){y(e)};Object.keys(e).forEach((function(t){n[t]=e[t]}))}function y(e){var t=l();delete t[e],0==Object.keys(t).length&&delete s()[c]}function m(e){var t=l(),n=Object.keys(e),r={};function o(){n.forEach((function(e){t[e]=r[e]}))}return function(i){n.forEach((function(n){r[n]=t[n],t[n]=e[n]}));var a=i();return a&&"function"==typeof a.then?a.then(o).catch(o):o(),a}}!function(){function e(e,t){Object.defineProperty(p,e,{value:t,enumerable:!1,configurable:!0})}e("__get__",d),e("__GetDependency__",d),e("__Rewire__",h),e("__set__",h),e("__reset__",y),e("__ResetDependency__",y),e("__with__",m)}();var v=r(o);function g(e,t){Object.defineProperty(o,e,{value:t,enumerable:!1,configurable:!0})}"object"!==v&&"function"!==v||!Object.isExtensible(o)||(g("__get__",d),g("__GetDependency__",d),g("__Rewire__",h),g("__set__",h),g("__reset__",y),g("__ResetDependency__",y),g("__with__",m),g("__RewireAPI__",p)),t.__get__=d,t.__GetDependency__=d,t.__Rewire__=h,t.__set__=h,t.__ResetDependency__=y,t.__RewireAPI__=p},4674:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.__RewireAPI__=t.__ResetDependency__=t.__set__=t.__Rewire__=t.__GetDependency__=t.__get__=void 0;var r,o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a=n(95080),u=(r=a)&&r.__esModule?r:{default:r};var c={fromJS:function(e){return e},getIn:v("getIn"),merge:function(e,t){return i({},e,t)},toJS:function(e){return e}};function s(){try{if(n.g)return n.g}catch(e){try{if(window)return window}catch(e){return this}}}t.default=v("structure");var l,f=null;function p(){if(null===f){var e=s();e.__$$GLOBAL_REWIRE_NEXT_MODULE_ID__||(e.__$$GLOBAL_REWIRE_NEXT_MODULE_ID__=0),f=__$$GLOBAL_REWIRE_NEXT_MODULE_ID__++}return f}function d(){var e=s();return e.__$$GLOBAL_REWIRE_REGISTRY__||(e.__$$GLOBAL_REWIRE_REGISTRY__=Object.create(null)),__$$GLOBAL_REWIRE_REGISTRY__}function h(){var e=p(),t=d(),n=t[e];return n||(t[e]=Object.create(null),n=t[e]),n}(l=s()).__rewire_reset_all__||(l.__rewire_reset_all__=function(){l.__$$GLOBAL_REWIRE_REGISTRY__=Object.create(null)});var y="__INTENTIONAL_UNDEFINED__",m={};function v(e){var t=h();if(void 0===t[e])return function(e){switch(e){case"getIn":return u.default;case"structure":return c}return}(e);var n=t[e];return n===y?void 0:n}function g(e,t){var n=h();if("object"!==(void 0===e?"undefined":o(e)))return n[e]=void 0===t?y:t,function(){b(e)};Object.keys(e).forEach((function(t){n[t]=e[t]}))}function b(e){var t=h();delete t[e],0==Object.keys(t).length&&delete d()[p]}function w(e){var t=h(),n=Object.keys(e),r={};function o(){n.forEach((function(e){t[e]=r[e]}))}return function(i){n.forEach((function(n){r[n]=t[n],t[n]=e[n]}));var a=i();return a&&"function"==typeof a.then?a.then(o).catch(o):o(),a}}!function(){function e(e,t){Object.defineProperty(m,e,{value:t,enumerable:!1,configurable:!0})}e("__get__",v),e("__GetDependency__",v),e("__Rewire__",g),e("__set__",g),e("__reset__",b),e("__ResetDependency__",b),e("__with__",w)}();var O=void 0===c?"undefined":o(c);function E(e,t){Object.defineProperty(c,e,{value:t,enumerable:!1,configurable:!0})}"object"!==O&&"function"!==O||!Object.isExtensible(c)||(E("__get__",v),E("__GetDependency__",v),E("__Rewire__",g),E("__set__",g),E("__reset__",b),E("__ResetDependency__",b),E("__with__",w),E("__RewireAPI__",m)),t.__get__=v,t.__GetDependency__=v,t.__Rewire__=g,t.__set__=g,t.__ResetDependency__=b,t.__RewireAPI__=m},83089:(e,t,n)=>{var r=n(83907),o=n(89075),i=TypeError;e.exports=function(e){if(r(e))return e;throw i(o(e)+" is not a function")}},31474:(e,t,n)=>{var r=n(95386),o=n(89075),i=TypeError;e.exports=function(e){if(r(e))return e;throw i(o(e)+" is not a constructor")}},90513:(e,t,n)=>{var r=n(83907),o=String,i=TypeError;e.exports=function(e){if("object"==typeof e||r(e))return e;throw i("Can't set "+o(e)+" as a prototype")}},16693:(e,t,n)=>{var r=n(2905),o=n(63513),i=n(60342).f,a=r("unscopables"),u=Array.prototype;null==u[a]&&i(u,a,{configurable:!0,value:o(null)}),e.exports=function(e){u[a][e]=!0}},96281:(e,t,n)=>{"use strict";var r=n(42968).charAt;e.exports=function(e,t,n){return t+(n?r(e,t).length:1)}},66992:(e,t,n)=>{var r=n(18142),o=TypeError;e.exports=function(e,t){if(r(t,e))return e;throw o("Incorrect invocation")}},95665:(e,t,n)=>{var r=n(21752),o=String,i=TypeError;e.exports=function(e){if(r(e))return e;throw i(o(e)+" is not an object")}},76930:(e,t,n)=>{var r=n(82304);e.exports=r((function(){if("function"==typeof ArrayBuffer){var e=new ArrayBuffer(8);Object.isExtensible(e)&&Object.defineProperty(e,"a",{value:8})}}))},25022:(e,t,n)=>{"use strict";var r=n(55835),o=n(59470),i=n(54020);e.exports=function(e){for(var t=r(this),n=i(t),a=arguments.length,u=o(a>1?arguments[1]:void 0,n),c=a>2?arguments[2]:void 0,s=void 0===c?n:o(c,n);s>u;)t[u++]=e;return t}},66469:(e,t,n)=>{"use strict";var r=n(7189).forEach,o=n(62235)("forEach");e.exports=o?[].forEach:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}},93099:(e,t,n)=>{"use strict";var r=n(45408),o=n(12364),i=n(55835),a=n(34268),u=n(36485),c=n(95386),s=n(54020),l=n(48245),f=n(6850),p=n(85437),d=Array;e.exports=function(e){var t=i(e),n=c(this),h=arguments.length,y=h>1?arguments[1]:void 0,m=void 0!==y;m&&(y=r(y,h>2?arguments[2]:void 0));var v,g,b,w,O,E,_=p(t),x=0;if(!_||this===d&&u(_))for(v=s(t),g=n?new this(v):d(v);v>x;x++)E=m?y(t[x],x):t[x],l(g,x,E);else for(O=(w=f(t,_)).next,g=n?new this:[];!(b=o(O,w)).done;x++)E=m?a(w,y,[b.value,x],!0):b.value,l(g,x,E);return g.length=x,g}},26281:(e,t,n)=>{var r=n(79486),o=n(59470),i=n(54020),a=function(e){return function(t,n,a){var u,c=r(t),s=i(c),l=o(a,s);if(e&&n!=n){for(;s>l;)if((u=c[l++])!=u)return!0}else for(;s>l;l++)if((e||l in c)&&c[l]===n)return e||l||0;return!e&&-1}};e.exports={includes:a(!0),indexOf:a(!1)}},7189:(e,t,n)=>{var r=n(45408),o=n(50295),i=n(6237),a=n(55835),u=n(54020),c=n(86729),s=o([].push),l=function(e){var t=1==e,n=2==e,o=3==e,l=4==e,f=6==e,p=7==e,d=5==e||f;return function(h,y,m,v){for(var g,b,w=a(h),O=i(w),E=r(y,m),_=u(O),x=0,S=v||c,j=t?S(h,_):n||p?S(h,0):void 0;_>x;x++)if((d||x in O)&&(b=E(g=O[x],x,w),e))if(t)j[x]=b;else if(b)switch(e){case 3:return!0;case 5:return g;case 6:return x;case 2:s(j,g)}else switch(e){case 4:return!1;case 7:s(j,g)}return f?-1:o||l?l:j}};e.exports={forEach:l(0),map:l(1),filter:l(2),some:l(3),every:l(4),find:l(5),findIndex:l(6),filterReject:l(7)}},21392:(e,t,n)=>{var r=n(82304),o=n(2905),i=n(80773),a=o("species");e.exports=function(e){return i>=51||!r((function(){var t=[];return(t.constructor={})[a]=function(){return{foo:1}},1!==t[e](Boolean).foo}))}},62235:(e,t,n)=>{"use strict";var r=n(82304);e.exports=function(e,t){var n=[][e];return!!n&&r((function(){n.call(null,t||function(){return 1},1)}))}},5153:(e,t,n)=>{var r=n(83089),o=n(55835),i=n(6237),a=n(54020),u=TypeError,c=function(e){return function(t,n,c,s){r(n);var l=o(t),f=i(l),p=a(l),d=e?p-1:0,h=e?-1:1;if(c<2)for(;;){if(d in f){s=f[d],d+=h;break}if(d+=h,e?d<0:p<=d)throw u("Reduce of empty array with no initial value")}for(;e?d>=0:p>d;d+=h)d in f&&(s=n(s,f[d],d,l));return s}};e.exports={left:c(!1),right:c(!0)}},51069:(e,t,n)=>{var r=n(59470),o=n(54020),i=n(48245),a=Array,u=Math.max;e.exports=function(e,t,n){for(var c=o(e),s=r(t,c),l=r(void 0===n?c:n,c),f=a(u(l-s,0)),p=0;s<l;s++,p++)i(f,p,e[s]);return f.length=p,f}},52311:(e,t,n)=>{var r=n(50295);e.exports=r([].slice)},41953:(e,t,n)=>{var r=n(51069),o=Math.floor,i=function(e,t){var n=e.length,c=o(n/2);return n<8?a(e,t):u(e,i(r(e,0,c),t),i(r(e,c),t),t)},a=function(e,t){for(var n,r,o=e.length,i=1;i<o;){for(r=i,n=e[i];r&&t(e[r-1],n)>0;)e[r]=e[--r];r!==i++&&(e[r]=n)}return e},u=function(e,t,n,r){for(var o=t.length,i=n.length,a=0,u=0;a<o||u<i;)e[a+u]=a<o&&u<i?r(t[a],n[u])<=0?t[a++]:n[u++]:a<o?t[a++]:n[u++];return e};e.exports=i},91657:(e,t,n)=>{var r=n(4887),o=n(95386),i=n(21752),a=n(2905)("species"),u=Array;e.exports=function(e){var t;return r(e)&&(t=e.constructor,(o(t)&&(t===u||r(t.prototype))||i(t)&&null===(t=t[a]))&&(t=void 0)),void 0===t?u:t}},86729:(e,t,n)=>{var r=n(91657);e.exports=function(e,t){return new(r(e))(0===t?0:t)}},34268:(e,t,n)=>{var r=n(95665),o=n(87175);e.exports=function(e,t,n,i){try{return i?t(r(n)[0],n[1]):t(n)}catch(t){o(e,"throw",t)}}},83307:(e,t,n)=>{var r=n(2905)("iterator"),o=!1;try{var i=0,a={next:function(){return{done:!!i++}},return:function(){o=!0}};a[r]=function(){return this},Array.from(a,(function(){throw 2}))}catch(e){}e.exports=function(e,t){if(!t&&!o)return!1;var n=!1;try{var i={};i[r]=function(){return{next:function(){return{done:n=!0}}}},e(i)}catch(e){}return n}},47157:(e,t,n)=>{var r=n(50295),o=r({}.toString),i=r("".slice);e.exports=function(e){return i(o(e),8,-1)}},47465:(e,t,n)=>{var r=n(54172),o=n(83907),i=n(47157),a=n(2905)("toStringTag"),u=Object,c="Arguments"==i(function(){return arguments}());e.exports=r?i:function(e){var t,n,r;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=u(e),a))?n:c?i(t):"Object"==(r=i(t))&&o(t.callee)?"Arguments":r}},95862:(e,t,n)=>{var r=n(50295),o=Error,i=r("".replace),a=String(o("zxcasd").stack),u=/\n\s*at [^:]*:[^\n]*/,c=u.test(a);e.exports=function(e,t){if(c&&"string"==typeof e&&!o.prepareStackTrace)for(;t--;)e=i(e,u,"");return e}},81632:(e,t,n)=>{"use strict";var r=n(60342).f,o=n(63513),i=n(74357),a=n(45408),u=n(66992),c=n(46386),s=n(69106),l=n(53207),f=n(8370),p=n(61145).fastKey,d=n(22956),h=d.set,y=d.getterFor;e.exports={getConstructor:function(e,t,n,s){var l=e((function(e,r){u(e,d),h(e,{type:t,index:o(null),first:void 0,last:void 0,size:0}),f||(e.size=0),null!=r&&c(r,e[s],{that:e,AS_ENTRIES:n})})),d=l.prototype,m=y(t),v=function(e,t,n){var r,o,i=m(e),a=g(e,t);return a?a.value=n:(i.last=a={index:o=p(t,!0),key:t,value:n,previous:r=i.last,next:void 0,removed:!1},i.first||(i.first=a),r&&(r.next=a),f?i.size++:e.size++,"F"!==o&&(i.index[o]=a)),e},g=function(e,t){var n,r=m(e),o=p(t);if("F"!==o)return r.index[o];for(n=r.first;n;n=n.next)if(n.key==t)return n};return i(d,{clear:function(){for(var e=m(this),t=e.index,n=e.first;n;)n.removed=!0,n.previous&&(n.previous=n.previous.next=void 0),delete t[n.index],n=n.next;e.first=e.last=void 0,f?e.size=0:this.size=0},delete:function(e){var t=this,n=m(t),r=g(t,e);if(r){var o=r.next,i=r.previous;delete n.index[r.index],r.removed=!0,i&&(i.next=o),o&&(o.previous=i),n.first==r&&(n.first=o),n.last==r&&(n.last=i),f?n.size--:t.size--}return!!r},forEach:function(e){for(var t,n=m(this),r=a(e,arguments.length>1?arguments[1]:void 0);t=t?t.next:n.first;)for(r(t.value,t.key,this);t&&t.removed;)t=t.previous},has:function(e){return!!g(this,e)}}),i(d,n?{get:function(e){var t=g(this,e);return t&&t.value},set:function(e,t){return v(this,0===e?0:e,t)}}:{add:function(e){return v(this,e=0===e?0:e,e)}}),f&&r(d,"size",{get:function(){return m(this).size}}),l},setStrong:function(e,t,n){var r=t+" Iterator",o=y(t),i=y(r);s(e,t,(function(e,t){h(this,{type:r,target:e,state:o(e),kind:t,last:void 0})}),(function(){for(var e=i(this),t=e.kind,n=e.last;n&&n.removed;)n=n.previous;return e.target&&(e.last=n=n?n.next:e.state.first)?"keys"==t?{value:n.key,done:!1}:"values"==t?{value:n.value,done:!1}:{value:[n.key,n.value],done:!1}:(e.target=void 0,{value:void 0,done:!0})}),n?"entries":"values",!n,!0),l(t)}}},86535:(e,t,n)=>{"use strict";var r=n(4209),o=n(68348),i=n(50295),a=n(82136),u=n(57002),c=n(61145),s=n(46386),l=n(66992),f=n(83907),p=n(21752),d=n(82304),h=n(83307),y=n(14036),m=n(84175);e.exports=function(e,t,n){var v=-1!==e.indexOf("Map"),g=-1!==e.indexOf("Weak"),b=v?"set":"add",w=o[e],O=w&&w.prototype,E=w,_={},x=function(e){var t=i(O[e]);u(O,e,"add"==e?function(e){return t(this,0===e?0:e),this}:"delete"==e?function(e){return!(g&&!p(e))&&t(this,0===e?0:e)}:"get"==e?function(e){return g&&!p(e)?void 0:t(this,0===e?0:e)}:"has"==e?function(e){return!(g&&!p(e))&&t(this,0===e?0:e)}:function(e,n){return t(this,0===e?0:e,n),this})};if(a(e,!f(w)||!(g||O.forEach&&!d((function(){(new w).entries().next()})))))E=n.getConstructor(t,e,v,b),c.enable();else if(a(e,!0)){var S=new E,j=S[b](g?{}:-0,1)!=S,P=d((function(){S.has(1)})),k=h((function(e){new w(e)})),I=!g&&d((function(){for(var e=new w,t=5;t--;)e[b](t,t);return!e.has(-0)}));k||((E=t((function(e,t){l(e,O);var n=m(new w,e,E);return null!=t&&s(t,n[b],{that:n,AS_ENTRIES:v}),n}))).prototype=O,O.constructor=E),(P||I)&&(x("delete"),x("has"),v&&x("get")),(I||j)&&x(b),g&&O.clear&&delete O.clear}return _[e]=E,r({global:!0,constructor:!0,forced:E!=w},_),y(E,e),g||n.setStrong(E,e,v),E}},37349:(e,t,n)=>{var r=n(35920),o=n(81448),i=n(4172),a=n(60342);e.exports=function(e,t,n){for(var u=o(t),c=a.f,s=i.f,l=0;l<u.length;l++){var f=u[l];r(e,f)||n&&r(n,f)||c(e,f,s(t,f))}}},33241:(e,t,n)=>{var r=n(2905)("match");e.exports=function(e){var t=/./;try{"/./"[e](t)}catch(n){try{return t[r]=!1,"/./"[e](t)}catch(e){}}return!1}},83379:(e,t,n)=>{var r=n(82304);e.exports=!r((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}))},61807:(e,t,n)=>{"use strict";var r=n(74479).IteratorPrototype,o=n(63513),i=n(53688),a=n(14036),u=n(59451),c=function(){return this};e.exports=function(e,t,n,s){var l=t+" Iterator";return e.prototype=o(r,{next:i(+!s,n)}),a(e,l,!1,!0),u[l]=c,e}},54652:(e,t,n)=>{var r=n(8370),o=n(60342),i=n(53688);e.exports=r?function(e,t,n){return o.f(e,t,i(1,n))}:function(e,t,n){return e[t]=n,e}},53688:e=>{e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},48245:(e,t,n)=>{"use strict";var r=n(54089),o=n(60342),i=n(53688);e.exports=function(e,t,n){var a=r(t);a in e?o.f(e,a,i(0,n)):e[a]=n}},21394:(e,t,n)=>{var r=n(87915),o=n(60342);e.exports=function(e,t,n){return n.get&&r(n.get,t,{getter:!0}),n.set&&r(n.set,t,{setter:!0}),o.f(e,t,n)}},57002:(e,t,n)=>{var r=n(83907),o=n(60342),i=n(87915),a=n(76925);e.exports=function(e,t,n,u){u||(u={});var c=u.enumerable,s=void 0!==u.name?u.name:t;return r(n)&&i(n,s,u),u.global?c?e[t]=n:a(t,n):(u.unsafe?e[t]&&(c=!0):delete e[t],c?e[t]=n:o.f(e,t,{value:n,enumerable:!1,configurable:!u.nonConfigurable,writable:!u.nonWritable})),e}},74357:(e,t,n)=>{var r=n(57002);e.exports=function(e,t,n){for(var o in t)r(e,o,t[o],n);return e}},76925:(e,t,n)=>{var r=n(68348),o=Object.defineProperty;e.exports=function(e,t){try{o(r,e,{value:t,configurable:!0,writable:!0})}catch(n){r[e]=t}return t}},69106:(e,t,n)=>{"use strict";var r=n(4209),o=n(12364),i=n(80692),a=n(10140),u=n(83907),c=n(61807),s=n(78066),l=n(12398),f=n(14036),p=n(54652),d=n(57002),h=n(2905),y=n(59451),m=n(74479),v=a.PROPER,g=a.CONFIGURABLE,b=m.IteratorPrototype,w=m.BUGGY_SAFARI_ITERATORS,O=h("iterator"),E="keys",_="values",x="entries",S=function(){return this};e.exports=function(e,t,n,a,h,m,j){c(n,t,a);var P,k,I,T=function(e){if(e===h&&L)return L;if(!w&&e in A)return A[e];switch(e){case E:case _:case x:return function(){return new n(this,e)}}return function(){return new n(this)}},R=t+" Iterator",C=!1,A=e.prototype,N=A[O]||A["@@iterator"]||h&&A[h],L=!w&&N||T(h),D="Array"==t&&A.entries||N;if(D&&(P=s(D.call(new e)))!==Object.prototype&&P.next&&(i||s(P)===b||(l?l(P,b):u(P[O])||d(P,O,S)),f(P,R,!0,!0),i&&(y[R]=S)),v&&h==_&&N&&N.name!==_&&(!i&&g?p(A,"name",_):(C=!0,L=function(){return o(N,this)})),h)if(k={values:T(_),keys:m?L:T(E),entries:T(x)},j)for(I in k)(w||C||!(I in A))&&d(A,I,k[I]);else r({target:t,proto:!0,forced:w||C},k);return i&&!j||A[O]===L||d(A,O,L,{name:h}),y[t]=L,k}},87251:(e,t,n)=>{var r=n(75590),o=n(35920),i=n(43445),a=n(60342).f;e.exports=function(e){var t=r.Symbol||(r.Symbol={});o(t,e)||a(t,e,{value:i.f(e)})}},91337:(e,t,n)=>{"use strict";var r=n(89075),o=TypeError;e.exports=function(e,t){if(!delete e[t])throw o("Cannot delete property "+r(t)+" of "+r(e))}},8370:(e,t,n)=>{var r=n(82304);e.exports=!r((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},37027:(e,t,n)=>{var r=n(68348),o=n(21752),i=r.document,a=o(i)&&o(i.createElement);e.exports=function(e){return a?i.createElement(e):{}}},68539:e=>{var t=TypeError;e.exports=function(e){if(e>9007199254740991)throw t("Maximum allowed index exceeded");return e}},6917:e=>{e.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},4152:(e,t,n)=>{var r=n(37027)("span").classList,o=r&&r.constructor&&r.constructor.prototype;e.exports=o===Object.prototype?void 0:o},14855:(e,t,n)=>{var r=n(41790).match(/firefox\/(\d+)/i);e.exports=!!r&&+r[1]},55943:e=>{e.exports="object"==typeof window&&"object"!=typeof Deno},48784:(e,t,n)=>{var r=n(41790);e.exports=/MSIE|Trident/.test(r)},17007:(e,t,n)=>{var r=n(41790),o=n(68348);e.exports=/ipad|iphone|ipod/i.test(r)&&void 0!==o.Pebble},75891:(e,t,n)=>{var r=n(41790);e.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(r)},15200:(e,t,n)=>{var r=n(47157),o=n(68348);e.exports="process"==r(o.process)},55158:(e,t,n)=>{var r=n(41790);e.exports=/web0s(?!.*chrome)/i.test(r)},41790:(e,t,n)=>{var r=n(38161);e.exports=r("navigator","userAgent")||""},80773:(e,t,n)=>{var r,o,i=n(68348),a=n(41790),u=i.process,c=i.Deno,s=u&&u.versions||c&&c.version,l=s&&s.v8;l&&(o=(r=l.split("."))[0]>0&&r[0]<4?1:+(r[0]+r[1])),!o&&a&&(!(r=a.match(/Edge\/(\d+)/))||r[1]>=74)&&(r=a.match(/Chrome\/(\d+)/))&&(o=+r[1]),e.exports=o},25109:(e,t,n)=>{var r=n(41790).match(/AppleWebKit\/(\d+)\./);e.exports=!!r&&+r[1]},16534:e=>{e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},84563:(e,t,n)=>{var r=n(82304),o=n(53688);e.exports=!r((function(){var e=Error("a");return!("stack"in e)||(Object.defineProperty(e,"stack",o(1,7)),7!==e.stack)}))},90672:(e,t,n)=>{"use strict";var r=n(8370),o=n(82304),i=n(95665),a=n(63513),u=n(27966),c=Error.prototype.toString,s=o((function(){if(r){var e=a(Object.defineProperty({},"name",{get:function(){return this===e}}));if("true"!==c.call(e))return!0}return"2: 1"!==c.call({message:1,name:2})||"Error"!==c.call({})}));e.exports=s?function(){var e=i(this),t=u(e.name,"Error"),n=u(e.message);return t?n?t+": "+n:t:n}:c},4209:(e,t,n)=>{var r=n(68348),o=n(4172).f,i=n(54652),a=n(57002),u=n(76925),c=n(37349),s=n(82136);e.exports=function(e,t){var n,l,f,p,d,h=e.target,y=e.global,m=e.stat;if(n=y?r:m?r[h]||u(h,{}):(r[h]||{}).prototype)for(l in t){if(p=t[l],f=e.dontCallGetSet?(d=o(n,l))&&d.value:n[l],!s(y?l:h+(m?".":"#")+l,e.forced)&&void 0!==f){if(typeof p==typeof f)continue;c(p,f)}(e.sham||f&&f.sham)&&i(p,"sham",!0),a(n,l,p,e)}}},82304:e=>{e.exports=function(e){try{return!!e()}catch(e){return!0}}},19798:(e,t,n)=>{"use strict";n(42484);var r=n(50295),o=n(57002),i=n(64118),a=n(82304),u=n(2905),c=n(54652),s=u("species"),l=RegExp.prototype;e.exports=function(e,t,n,f){var p=u(e),d=!a((function(){var t={};return t[p]=function(){return 7},7!=""[e](t)})),h=d&&!a((function(){var t=!1,n=/a/;return"split"===e&&((n={}).constructor={},n.constructor[s]=function(){return n},n.flags="",n[p]=/./[p]),n.exec=function(){return t=!0,null},n[p](""),!t}));if(!d||!h||n){var y=r(/./[p]),m=t(p,""[e],(function(e,t,n,o,a){var u=r(e),c=t.exec;return c===i||c===l.exec?d&&!a?{done:!0,value:y(t,n,o)}:{done:!0,value:u(n,t,o)}:{done:!1}}));o(String.prototype,e,m[0]),o(l,p,m[1])}f&&c(l[p],"sham",!0)}},24367:(e,t,n)=>{var r=n(82304);e.exports=!r((function(){return Object.isExtensible(Object.preventExtensions({}))}))},89664:(e,t,n)=>{var r=n(4055),o=Function.prototype,i=o.apply,a=o.call;e.exports="object"==typeof Reflect&&Reflect.apply||(r?a.bind(i):function(){return a.apply(i,arguments)})},45408:(e,t,n)=>{var r=n(50295),o=n(83089),i=n(4055),a=r(r.bind);e.exports=function(e,t){return o(e),void 0===t?e:i?a(e,t):function(){return e.apply(t,arguments)}}},4055:(e,t,n)=>{var r=n(82304);e.exports=!r((function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")}))},1068:(e,t,n)=>{"use strict";var r=n(50295),o=n(83089),i=n(21752),a=n(35920),u=n(52311),c=n(4055),s=Function,l=r([].concat),f=r([].join),p={},d=function(e,t,n){if(!a(p,t)){for(var r=[],o=0;o<t;o++)r[o]="a["+o+"]";p[t]=s("C,a","return new C("+f(r,",")+")")}return p[t](e,n)};e.exports=c?s.bind:function(e){var t=o(this),n=t.prototype,r=u(arguments,1),a=function(){var n=l(r,u(arguments));return this instanceof a?d(t,n.length,n):t.apply(e,n)};return i(n)&&(a.prototype=n),a}},12364:(e,t,n)=>{var r=n(4055),o=Function.prototype.call;e.exports=r?o.bind(o):function(){return o.apply(o,arguments)}},10140:(e,t,n)=>{var r=n(8370),o=n(35920),i=Function.prototype,a=r&&Object.getOwnPropertyDescriptor,u=o(i,"name"),c=u&&"something"===function(){}.name,s=u&&(!r||r&&a(i,"name").configurable);e.exports={EXISTS:u,PROPER:c,CONFIGURABLE:s}},50295:(e,t,n)=>{var r=n(4055),o=Function.prototype,i=o.bind,a=o.call,u=r&&i.bind(a,a);e.exports=r?function(e){return e&&u(e)}:function(e){return e&&function(){return a.apply(e,arguments)}}},38161:(e,t,n)=>{var r=n(68348),o=n(83907),i=function(e){return o(e)?e:void 0};e.exports=function(e,t){return arguments.length<2?i(r[e]):r[e]&&r[e][t]}},85437:(e,t,n)=>{var r=n(47465),o=n(37838),i=n(59451),a=n(2905)("iterator");e.exports=function(e){if(null!=e)return o(e,a)||o(e,"@@iterator")||i[r(e)]}},6850:(e,t,n)=>{var r=n(12364),o=n(83089),i=n(95665),a=n(89075),u=n(85437),c=TypeError;e.exports=function(e,t){var n=arguments.length<2?u(e):t;if(o(n))return i(r(n,e));throw c(a(e)+" is not iterable")}},37838:(e,t,n)=>{var r=n(83089);e.exports=function(e,t){var n=e[t];return null==n?void 0:r(n)}},30585:(e,t,n)=>{var r=n(50295),o=n(55835),i=Math.floor,a=r("".charAt),u=r("".replace),c=r("".slice),s=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,l=/\$([$&'`]|\d{1,2})/g;e.exports=function(e,t,n,r,f,p){var d=n+e.length,h=r.length,y=l;return void 0!==f&&(f=o(f),y=s),u(p,y,(function(o,u){var s;switch(a(u,0)){case"$":return"$";case"&":return e;case"`":return c(t,0,n);case"'":return c(t,d);case"<":s=f[c(u,1,-1)];break;default:var l=+u;if(0===l)return o;if(l>h){var p=i(l/10);return 0===p?o:p<=h?void 0===r[p-1]?a(u,1):r[p-1]+a(u,1):o}s=r[l-1]}return void 0===s?"":s}))}},68348:(e,t,n)=>{var r=function(e){return e&&e.Math==Math&&e};e.exports=r("object"==typeof globalThis&&globalThis)||r("object"==typeof window&&window)||r("object"==typeof self&&self)||r("object"==typeof n.g&&n.g)||function(){return this}()||Function("return this")()},35920:(e,t,n)=>{var r=n(50295),o=n(55835),i=r({}.hasOwnProperty);e.exports=Object.hasOwn||function(e,t){return i(o(e),t)}},19112:e=>{e.exports={}},10917:(e,t,n)=>{var r=n(68348);e.exports=function(e,t){var n=r.console;n&&n.error&&(1==arguments.length?n.error(e):n.error(e,t))}},99146:(e,t,n)=>{var r=n(38161);e.exports=r("document","documentElement")},80124:(e,t,n)=>{var r=n(8370),o=n(82304),i=n(37027);e.exports=!r&&!o((function(){return 7!=Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a}))},6237:(e,t,n)=>{var r=n(50295),o=n(82304),i=n(47157),a=Object,u=r("".split);e.exports=o((function(){return!a("z").propertyIsEnumerable(0)}))?function(e){return"String"==i(e)?u(e,""):a(e)}:a},84175:(e,t,n)=>{var r=n(83907),o=n(21752),i=n(12398);e.exports=function(e,t,n){var a,u;return i&&r(a=t.constructor)&&a!==n&&o(u=a.prototype)&&u!==n.prototype&&i(e,u),e}},58119:(e,t,n)=>{var r=n(50295),o=n(83907),i=n(8386),a=r(Function.toString);o(i.inspectSource)||(i.inspectSource=function(e){return a(e)}),e.exports=i.inspectSource},77046:(e,t,n)=>{var r=n(21752),o=n(54652);e.exports=function(e,t){r(t)&&"cause"in t&&o(e,"cause",t.cause)}},61145:(e,t,n)=>{var r=n(4209),o=n(50295),i=n(19112),a=n(21752),u=n(35920),c=n(60342).f,s=n(13194),l=n(78698),f=n(41534),p=n(51339),d=n(24367),h=!1,y=p("meta"),m=0,v=function(e){c(e,y,{value:{objectID:"O"+m++,weakData:{}}})},g=e.exports={enable:function(){g.enable=function(){},h=!0;var e=s.f,t=o([].splice),n={};n[y]=1,e(n).length&&(s.f=function(n){for(var r=e(n),o=0,i=r.length;o<i;o++)if(r[o]===y){t(r,o,1);break}return r},r({target:"Object",stat:!0,forced:!0},{getOwnPropertyNames:l.f}))},fastKey:function(e,t){if(!a(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!u(e,y)){if(!f(e))return"F";if(!t)return"E";v(e)}return e[y].objectID},getWeakData:function(e,t){if(!u(e,y)){if(!f(e))return!0;if(!t)return!1;v(e)}return e[y].weakData},onFreeze:function(e){return d&&h&&f(e)&&!u(e,y)&&v(e),e}};i[y]=!0},22956:(e,t,n)=>{var r,o,i,a=n(11200),u=n(68348),c=n(50295),s=n(21752),l=n(54652),f=n(35920),p=n(8386),d=n(95235),h=n(19112),y="Object already initialized",m=u.TypeError,v=u.WeakMap;if(a||p.state){var g=p.state||(p.state=new v),b=c(g.get),w=c(g.has),O=c(g.set);r=function(e,t){if(w(g,e))throw new m(y);return t.facade=e,O(g,e,t),t},o=function(e){return b(g,e)||{}},i=function(e){return w(g,e)}}else{var E=d("state");h[E]=!0,r=function(e,t){if(f(e,E))throw new m(y);return t.facade=e,l(e,E,t),t},o=function(e){return f(e,E)?e[E]:{}},i=function(e){return f(e,E)}}e.exports={set:r,get:o,has:i,enforce:function(e){return i(e)?o(e):r(e,{})},getterFor:function(e){return function(t){var n;if(!s(t)||(n=o(t)).type!==e)throw m("Incompatible receiver, "+e+" required");return n}}}},36485:(e,t,n)=>{var r=n(2905),o=n(59451),i=r("iterator"),a=Array.prototype;e.exports=function(e){return void 0!==e&&(o.Array===e||a[i]===e)}},4887:(e,t,n)=>{var r=n(47157);e.exports=Array.isArray||function(e){return"Array"==r(e)}},83907:e=>{e.exports=function(e){return"function"==typeof e}},95386:(e,t,n)=>{var r=n(50295),o=n(82304),i=n(83907),a=n(47465),u=n(38161),c=n(58119),s=function(){},l=[],f=u("Reflect","construct"),p=/^\s*(?:class|function)\b/,d=r(p.exec),h=!p.exec(s),y=function(e){if(!i(e))return!1;try{return f(s,l,e),!0}catch(e){return!1}},m=function(e){if(!i(e))return!1;switch(a(e)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return h||!!d(p,c(e))}catch(e){return!0}};m.sham=!0,e.exports=!f||o((function(){var e;return y(y.call)||!y(Object)||!y((function(){e=!0}))||e}))?m:y},82136:(e,t,n)=>{var r=n(82304),o=n(83907),i=/#|\.prototype\./,a=function(e,t){var n=c[u(e)];return n==l||n!=s&&(o(t)?r(t):!!t)},u=a.normalize=function(e){return String(e).replace(i,".").toLowerCase()},c=a.data={},s=a.NATIVE="N",l=a.POLYFILL="P";e.exports=a},37086:(e,t,n)=>{var r=n(21752),o=Math.floor;e.exports=Number.isInteger||function(e){return!r(e)&&isFinite(e)&&o(e)===e}},21752:(e,t,n)=>{var r=n(83907);e.exports=function(e){return"object"==typeof e?null!==e:r(e)}},80692:e=>{e.exports=!1},12810:(e,t,n)=>{var r=n(21752),o=n(47157),i=n(2905)("match");e.exports=function(e){var t;return r(e)&&(void 0!==(t=e[i])?!!t:"RegExp"==o(e))}},33758:(e,t,n)=>{var r=n(38161),o=n(83907),i=n(18142),a=n(14386),u=Object;e.exports=a?function(e){return"symbol"==typeof e}:function(e){var t=r("Symbol");return o(t)&&i(t.prototype,u(e))}},46386:(e,t,n)=>{var r=n(45408),o=n(12364),i=n(95665),a=n(89075),u=n(36485),c=n(54020),s=n(18142),l=n(6850),f=n(85437),p=n(87175),d=TypeError,h=function(e,t){this.stopped=e,this.result=t},y=h.prototype;e.exports=function(e,t,n){var m,v,g,b,w,O,E,_=n&&n.that,x=!(!n||!n.AS_ENTRIES),S=!(!n||!n.IS_ITERATOR),j=!(!n||!n.INTERRUPTED),P=r(t,_),k=function(e){return m&&p(m,"normal",e),new h(!0,e)},I=function(e){return x?(i(e),j?P(e[0],e[1],k):P(e[0],e[1])):j?P(e,k):P(e)};if(S)m=e;else{if(!(v=f(e)))throw d(a(e)+" is not iterable");if(u(v)){for(g=0,b=c(e);b>g;g++)if((w=I(e[g]))&&s(y,w))return w;return new h(!1)}m=l(e,v)}for(O=m.next;!(E=o(O,m)).done;){try{w=I(E.value)}catch(e){p(m,"throw",e)}if("object"==typeof w&&w&&s(y,w))return w}return new h(!1)}},87175:(e,t,n)=>{var r=n(12364),o=n(95665),i=n(37838);e.exports=function(e,t,n){var a,u;o(e);try{if(!(a=i(e,"return"))){if("throw"===t)throw n;return n}a=r(a,e)}catch(e){u=!0,a=e}if("throw"===t)throw n;if(u)throw a;return o(a),n}},74479:(e,t,n)=>{"use strict";var r,o,i,a=n(82304),u=n(83907),c=n(63513),s=n(78066),l=n(57002),f=n(2905),p=n(80692),d=f("iterator"),h=!1;[].keys&&("next"in(i=[].keys())?(o=s(s(i)))!==Object.prototype&&(r=o):h=!0),null==r||a((function(){var e={};return r[d].call(e)!==e}))?r={}:p&&(r=c(r)),u(r[d])||l(r,d,(function(){return this})),e.exports={IteratorPrototype:r,BUGGY_SAFARI_ITERATORS:h}},59451:e=>{e.exports={}},54020:(e,t,n)=>{var r=n(36350);e.exports=function(e){return r(e.length)}},87915:(e,t,n)=>{var r=n(82304),o=n(83907),i=n(35920),a=n(8370),u=n(10140).CONFIGURABLE,c=n(58119),s=n(22956),l=s.enforce,f=s.get,p=Object.defineProperty,d=a&&!r((function(){return 8!==p((function(){}),"length",{value:8}).length})),h=String(String).split("String"),y=e.exports=function(e,t,n){"Symbol("===String(t).slice(0,7)&&(t="["+String(t).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),n&&n.getter&&(t="get "+t),n&&n.setter&&(t="set "+t),(!i(e,"name")||u&&e.name!==t)&&p(e,"name",{value:t,configurable:!0}),d&&n&&i(n,"arity")&&e.length!==n.arity&&p(e,"length",{value:n.arity});try{n&&i(n,"constructor")&&n.constructor?a&&p(e,"prototype",{writable:!1}):e.prototype&&(e.prototype=void 0)}catch(e){}var r=l(e);return i(r,"source")||(r.source=h.join("string"==typeof t?t:"")),e};Function.prototype.toString=y((function(){return o(this)&&f(this).source||c(this)}),"toString")},7688:e=>{var t=Math.ceil,n=Math.floor;e.exports=Math.trunc||function(e){var r=+e;return(r>0?n:t)(r)}},21029:(e,t,n)=>{var r,o,i,a,u,c,s,l,f=n(68348),p=n(45408),d=n(4172).f,h=n(36585).set,y=n(75891),m=n(17007),v=n(55158),g=n(15200),b=f.MutationObserver||f.WebKitMutationObserver,w=f.document,O=f.process,E=f.Promise,_=d(f,"queueMicrotask"),x=_&&_.value;x||(r=function(){var e,t;for(g&&(e=O.domain)&&e.exit();o;){t=o.fn,o=o.next;try{t()}catch(e){throw o?a():i=void 0,e}}i=void 0,e&&e.enter()},y||g||v||!b||!w?!m&&E&&E.resolve?((s=E.resolve(void 0)).constructor=E,l=p(s.then,s),a=function(){l(r)}):g?a=function(){O.nextTick(r)}:(h=p(h,f),a=function(){h(r)}):(u=!0,c=w.createTextNode(""),new b(r).observe(c,{characterData:!0}),a=function(){c.data=u=!u})),e.exports=x||function(e){var t={fn:e,next:void 0};i&&(i.next=t),o||(o=t,a()),i=t}},75698:(e,t,n)=>{var r=n(37201);e.exports=r&&!!Symbol.for&&!!Symbol.keyFor},37201:(e,t,n)=>{var r=n(80773),o=n(82304);e.exports=!!Object.getOwnPropertySymbols&&!o((function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&r&&r<41}))},11200:(e,t,n)=>{var r=n(68348),o=n(83907),i=n(58119),a=r.WeakMap;e.exports=o(a)&&/native code/.test(i(a))},63223:(e,t,n)=>{"use strict";var r=n(83089),o=function(e){var t,n;this.promise=new e((function(e,r){if(void 0!==t||void 0!==n)throw TypeError("Bad Promise constructor");t=e,n=r})),this.resolve=r(t),this.reject=r(n)};e.exports.f=function(e){return new o(e)}},27966:(e,t,n)=>{var r=n(43974);e.exports=function(e,t){return void 0===e?arguments.length<2?"":t:r(e)}},9397:(e,t,n)=>{var r=n(12810),o=TypeError;e.exports=function(e){if(r(e))throw o("The method doesn't accept regular expressions");return e}},10634:(e,t,n)=>{var r=n(68348),o=n(82304),i=n(50295),a=n(43974),u=n(16221).trim,c=n(56346),s=i("".charAt),l=r.parseFloat,f=r.Symbol,p=f&&f.iterator,d=1/l(c+"-0")!=-1/0||p&&!o((function(){l(Object(p))}));e.exports=d?function(e){var t=u(a(e)),n=l(t);return 0===n&&"-"==s(t,0)?-0:n}:l},49268:(e,t,n)=>{var r=n(68348),o=n(82304),i=n(50295),a=n(43974),u=n(16221).trim,c=n(56346),s=r.parseInt,l=r.Symbol,f=l&&l.iterator,p=/^[+-]?0x/i,d=i(p.exec),h=8!==s(c+"08")||22!==s(c+"0x16")||f&&!o((function(){s(Object(f))}));e.exports=h?function(e,t){var n=u(a(e));return s(n,t>>>0||(d(p,n)?16:10))}:s},70194:(e,t,n)=>{"use strict";var r=n(8370),o=n(50295),i=n(12364),a=n(82304),u=n(89361),c=n(19849),s=n(12922),l=n(55835),f=n(6237),p=Object.assign,d=Object.defineProperty,h=o([].concat);e.exports=!p||a((function(){if(r&&1!==p({b:1},p(d({},"a",{enumerable:!0,get:function(){d(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},n=Symbol(),o="abcdefghijklmnopqrst";return e[n]=7,o.split("").forEach((function(e){t[e]=e})),7!=p({},e)[n]||u(p({},t)).join("")!=o}))?function(e,t){for(var n=l(e),o=arguments.length,a=1,p=c.f,d=s.f;o>a;)for(var y,m=f(arguments[a++]),v=p?h(u(m),p(m)):u(m),g=v.length,b=0;g>b;)y=v[b++],r&&!i(d,m,y)||(n[y]=m[y]);return n}:p},63513:(e,t,n)=>{var r,o=n(95665),i=n(81040),a=n(16534),u=n(19112),c=n(99146),s=n(37027),l=n(95235),f=l("IE_PROTO"),p=function(){},d=function(e){return"<script>"+e+"</"+"script>"},h=function(e){e.write(d("")),e.close();var t=e.parentWindow.Object;return e=null,t},y=function(){try{r=new ActiveXObject("htmlfile")}catch(e){}var e,t;y="undefined"!=typeof document?document.domain&&r?h(r):((t=s("iframe")).style.display="none",c.appendChild(t),t.src=String("javascript:"),(e=t.contentWindow.document).open(),e.write(d("document.F=Object")),e.close(),e.F):h(r);for(var n=a.length;n--;)delete y.prototype[a[n]];return y()};u[f]=!0,e.exports=Object.create||function(e,t){var n;return null!==e?(p.prototype=o(e),n=new p,p.prototype=null,n[f]=e):n=y(),void 0===t?n:i.f(n,t)}},81040:(e,t,n)=>{var r=n(8370),o=n(53850),i=n(60342),a=n(95665),u=n(79486),c=n(89361);t.f=r&&!o?Object.defineProperties:function(e,t){a(e);for(var n,r=u(t),o=c(t),s=o.length,l=0;s>l;)i.f(e,n=o[l++],r[n]);return e}},60342:(e,t,n)=>{var r=n(8370),o=n(80124),i=n(53850),a=n(95665),u=n(54089),c=TypeError,s=Object.defineProperty,l=Object.getOwnPropertyDescriptor,f="enumerable",p="configurable",d="writable";t.f=r?i?function(e,t,n){if(a(e),t=u(t),a(n),"function"==typeof e&&"prototype"===t&&"value"in n&&d in n&&!n.writable){var r=l(e,t);r&&r.writable&&(e[t]=n.value,n={configurable:p in n?n.configurable:r.configurable,enumerable:f in n?n.enumerable:r.enumerable,writable:!1})}return s(e,t,n)}:s:function(e,t,n){if(a(e),t=u(t),a(n),o)try{return s(e,t,n)}catch(e){}if("get"in n||"set"in n)throw c("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},4172:(e,t,n)=>{var r=n(8370),o=n(12364),i=n(12922),a=n(53688),u=n(79486),c=n(54089),s=n(35920),l=n(80124),f=Object.getOwnPropertyDescriptor;t.f=r?f:function(e,t){if(e=u(e),t=c(t),l)try{return f(e,t)}catch(e){}if(s(e,t))return a(!o(i.f,e,t),e[t])}},78698:(e,t,n)=>{var r=n(47157),o=n(79486),i=n(13194).f,a=n(51069),u="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];e.exports.f=function(e){return u&&"Window"==r(e)?function(e){try{return i(e)}catch(e){return a(u)}}(e):i(o(e))}},13194:(e,t,n)=>{var r=n(11704),o=n(16534).concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return r(e,o)}},19849:(e,t)=>{t.f=Object.getOwnPropertySymbols},78066:(e,t,n)=>{var r=n(35920),o=n(83907),i=n(55835),a=n(95235),u=n(83379),c=a("IE_PROTO"),s=Object,l=s.prototype;e.exports=u?s.getPrototypeOf:function(e){var t=i(e);if(r(t,c))return t[c];var n=t.constructor;return o(n)&&t instanceof n?n.prototype:t instanceof s?l:null}},41534:(e,t,n)=>{var r=n(82304),o=n(21752),i=n(47157),a=n(76930),u=Object.isExtensible,c=r((function(){u(1)}));e.exports=c||a?function(e){return!!o(e)&&((!a||"ArrayBuffer"!=i(e))&&(!u||u(e)))}:u},18142:(e,t,n)=>{var r=n(50295);e.exports=r({}.isPrototypeOf)},11704:(e,t,n)=>{var r=n(50295),o=n(35920),i=n(79486),a=n(26281).indexOf,u=n(19112),c=r([].push);e.exports=function(e,t){var n,r=i(e),s=0,l=[];for(n in r)!o(u,n)&&o(r,n)&&c(l,n);for(;t.length>s;)o(r,n=t[s++])&&(~a(l,n)||c(l,n));return l}},89361:(e,t,n)=>{var r=n(11704),o=n(16534);e.exports=Object.keys||function(e){return r(e,o)}},12922:(e,t)=>{"use strict";var n={}.propertyIsEnumerable,r=Object.getOwnPropertyDescriptor,o=r&&!n.call({1:2},1);t.f=o?function(e){var t=r(this,e);return!!t&&t.enumerable}:n},12398:(e,t,n)=>{var r=n(50295),o=n(95665),i=n(90513);e.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,n={};try{(e=r(Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set))(n,[]),t=n instanceof Array}catch(e){}return function(n,r){return o(n),i(r),t?e(n,r):n.__proto__=r,n}}():void 0)},64307:(e,t,n)=>{var r=n(8370),o=n(50295),i=n(89361),a=n(79486),u=o(n(12922).f),c=o([].push),s=function(e){return function(t){for(var n,o=a(t),s=i(o),l=s.length,f=0,p=[];l>f;)n=s[f++],r&&!u(o,n)||c(p,e?[n,o[n]]:o[n]);return p}};e.exports={entries:s(!0),values:s(!1)}},51431:(e,t,n)=>{"use strict";var r=n(54172),o=n(47465);e.exports=r?{}.toString:function(){return"[object "+o(this)+"]"}},29786:(e,t,n)=>{var r=n(12364),o=n(83907),i=n(21752),a=TypeError;e.exports=function(e,t){var n,u;if("string"===t&&o(n=e.toString)&&!i(u=r(n,e)))return u;if(o(n=e.valueOf)&&!i(u=r(n,e)))return u;if("string"!==t&&o(n=e.toString)&&!i(u=r(n,e)))return u;throw a("Can't convert object to primitive value")}},81448:(e,t,n)=>{var r=n(38161),o=n(50295),i=n(13194),a=n(19849),u=n(95665),c=o([].concat);e.exports=r("Reflect","ownKeys")||function(e){var t=i.f(u(e)),n=a.f;return n?c(t,n(e)):t}},75590:(e,t,n)=>{var r=n(68348);e.exports=r},88481:e=>{e.exports=function(e){try{return{error:!1,value:e()}}catch(e){return{error:!0,value:e}}}},31240:(e,t,n)=>{var r=n(68348),o=n(36576),i=n(83907),a=n(82136),u=n(58119),c=n(2905),s=n(55943),l=n(80692),f=n(80773),p=o&&o.prototype,d=c("species"),h=!1,y=i(r.PromiseRejectionEvent),m=a("Promise",(function(){var e=u(o),t=e!==String(o);if(!t&&66===f)return!0;if(l&&(!p.catch||!p.finally))return!0;if(f>=51&&/native code/.test(e))return!1;var n=new o((function(e){e(1)})),r=function(e){e((function(){}),(function(){}))};return(n.constructor={})[d]=r,!(h=n.then((function(){}))instanceof r)||!t&&s&&!y}));e.exports={CONSTRUCTOR:m,REJECTION_EVENT:y,SUBCLASSING:h}},36576:(e,t,n)=>{var r=n(68348);e.exports=r.Promise},26750:(e,t,n)=>{var r=n(95665),o=n(21752),i=n(63223);e.exports=function(e,t){if(r(e),o(t)&&t.constructor===e)return t;var n=i.f(e);return(0,n.resolve)(t),n.promise}},69700:(e,t,n)=>{var r=n(36576),o=n(83307),i=n(31240).CONSTRUCTOR;e.exports=i||!o((function(e){r.all(e).then(void 0,(function(){}))}))},97487:(e,t,n)=>{var r=n(60342).f;e.exports=function(e,t,n){n in e||r(e,n,{configurable:!0,get:function(){return t[n]},set:function(e){t[n]=e}})}},55149:e=>{var t=function(){this.head=null,this.tail=null};t.prototype={add:function(e){var t={item:e,next:null};this.head?this.tail.next=t:this.head=t,this.tail=t},get:function(){var e=this.head;if(e)return this.head=e.next,this.tail===e&&(this.tail=null),e.item}},e.exports=t},90123:(e,t,n)=>{var r=n(12364),o=n(95665),i=n(83907),a=n(47157),u=n(64118),c=TypeError;e.exports=function(e,t){var n=e.exec;if(i(n)){var s=r(n,e,t);return null!==s&&o(s),s}if("RegExp"===a(e))return r(u,e,t);throw c("RegExp#exec called on incompatible receiver")}},64118:(e,t,n)=>{"use strict";var r,o,i=n(12364),a=n(50295),u=n(43974),c=n(12098),s=n(7588),l=n(54365),f=n(63513),p=n(22956).get,d=n(53937),h=n(41085),y=l("native-string-replace",String.prototype.replace),m=RegExp.prototype.exec,v=m,g=a("".charAt),b=a("".indexOf),w=a("".replace),O=a("".slice),E=(o=/b*/g,i(m,r=/a/,"a"),i(m,o,"a"),0!==r.lastIndex||0!==o.lastIndex),_=s.BROKEN_CARET,x=void 0!==/()??/.exec("")[1];(E||x||_||d||h)&&(v=function(e){var t,n,r,o,a,s,l,d=this,h=p(d),S=u(e),j=h.raw;if(j)return j.lastIndex=d.lastIndex,t=i(v,j,S),d.lastIndex=j.lastIndex,t;var P=h.groups,k=_&&d.sticky,I=i(c,d),T=d.source,R=0,C=S;if(k&&(I=w(I,"y",""),-1===b(I,"g")&&(I+="g"),C=O(S,d.lastIndex),d.lastIndex>0&&(!d.multiline||d.multiline&&"\n"!==g(S,d.lastIndex-1))&&(T="(?: "+T+")",C=" "+C,R++),n=new RegExp("^(?:"+T+")",I)),x&&(n=new RegExp("^"+T+"$(?!\\s)",I)),E&&(r=d.lastIndex),o=i(m,k?n:d,C),k?o?(o.input=O(o.input,R),o[0]=O(o[0],R),o.index=d.lastIndex,d.lastIndex+=o[0].length):d.lastIndex=0:E&&o&&(d.lastIndex=d.global?o.index+o[0].length:r),x&&o&&o.length>1&&i(y,o[0],n,(function(){for(a=1;a<arguments.length-2;a++)void 0===arguments[a]&&(o[a]=void 0)})),o&&P)for(o.groups=s=f(null),a=0;a<P.length;a++)s[(l=P[a])[0]]=o[l[1]];return o}),e.exports=v},12098:(e,t,n)=>{"use strict";var r=n(95665);e.exports=function(){var e=r(this),t="";return e.hasIndices&&(t+="d"),e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.dotAll&&(t+="s"),e.unicode&&(t+="u"),e.unicodeSets&&(t+="v"),e.sticky&&(t+="y"),t}},17350:(e,t,n)=>{var r=n(12364),o=n(35920),i=n(18142),a=n(12098),u=RegExp.prototype;e.exports=function(e){var t=e.flags;return void 0!==t||"flags"in u||o(e,"flags")||!i(u,e)?t:r(a,e)}},7588:(e,t,n)=>{var r=n(82304),o=n(68348).RegExp,i=r((function(){var e=o("a","y");return e.lastIndex=2,null!=e.exec("abcd")})),a=i||r((function(){return!o("a","y").sticky})),u=i||r((function(){var e=o("^r","gy");return e.lastIndex=2,null!=e.exec("str")}));e.exports={BROKEN_CARET:u,MISSED_STICKY:a,UNSUPPORTED_Y:i}},53937:(e,t,n)=>{var r=n(82304),o=n(68348).RegExp;e.exports=r((function(){var e=o(".","s");return!(e.dotAll&&e.exec("\n")&&"s"===e.flags)}))},41085:(e,t,n)=>{var r=n(82304),o=n(68348).RegExp;e.exports=r((function(){var e=o("(?<a>b)","g");return"b"!==e.exec("b").groups.a||"bc"!=="b".replace(e,"$<a>c")}))},21132:e=>{var t=TypeError;e.exports=function(e){if(null==e)throw t("Can't call method on "+e);return e}},19300:e=>{e.exports=Object.is||function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t}},65387:(e,t,n)=>{var r=n(68348),o=n(89664),i=n(83907),a=n(41790),u=n(52311),c=n(57167),s=/MSIE .\./.test(a),l=r.Function,f=function(e){return s?function(t,n){var r=c(arguments.length,1)>2,a=i(t)?t:l(t),s=r?u(arguments,2):void 0;return e(r?function(){o(a,this,s)}:a,n)}:e};e.exports={setTimeout:f(r.setTimeout),setInterval:f(r.setInterval)}},53207:(e,t,n)=>{"use strict";var r=n(38161),o=n(60342),i=n(2905),a=n(8370),u=i("species");e.exports=function(e){var t=r(e),n=o.f;a&&t&&!t[u]&&n(t,u,{configurable:!0,get:function(){return this}})}},14036:(e,t,n)=>{var r=n(60342).f,o=n(35920),i=n(2905)("toStringTag");e.exports=function(e,t,n){e&&!n&&(e=e.prototype),e&&!o(e,i)&&r(e,i,{configurable:!0,value:t})}},95235:(e,t,n)=>{var r=n(54365),o=n(51339),i=r("keys");e.exports=function(e){return i[e]||(i[e]=o(e))}},8386:(e,t,n)=>{var r=n(68348),o=n(76925),i="__core-js_shared__",a=r[i]||o(i,{});e.exports=a},54365:(e,t,n)=>{var r=n(80692),o=n(8386);(e.exports=function(e,t){return o[e]||(o[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.23.1",mode:r?"pure":"global",copyright:"© 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.23.1/LICENSE",source:"https://github.com/zloirock/core-js"})},18062:(e,t,n)=>{var r=n(95665),o=n(31474),i=n(2905)("species");e.exports=function(e,t){var n,a=r(e).constructor;return void 0===a||null==(n=r(a)[i])?t:o(n)}},42968:(e,t,n)=>{var r=n(50295),o=n(89345),i=n(43974),a=n(21132),u=r("".charAt),c=r("".charCodeAt),s=r("".slice),l=function(e){return function(t,n){var r,l,f=i(a(t)),p=o(n),d=f.length;return p<0||p>=d?e?"":void 0:(r=c(f,p))<55296||r>56319||p+1===d||(l=c(f,p+1))<56320||l>57343?e?u(f,p):r:e?s(f,p,p+2):l-56320+(r-55296<<10)+65536}};e.exports={codeAt:l(!1),charAt:l(!0)}},98816:(e,t,n)=>{"use strict";var r=n(89345),o=n(43974),i=n(21132),a=RangeError;e.exports=function(e){var t=o(i(this)),n="",u=r(e);if(u<0||u==1/0)throw a("Wrong number of repetitions");for(;u>0;(u>>>=1)&&(t+=t))1&u&&(n+=t);return n}},21225:(e,t,n)=>{var r=n(10140).PROPER,o=n(82304),i=n(56346);e.exports=function(e){return o((function(){return!!i[e]()||"​…᠎"!=="​…᠎"[e]()||r&&i[e].name!==e}))}},16221:(e,t,n)=>{var r=n(50295),o=n(21132),i=n(43974),a=n(56346),u=r("".replace),c="["+a+"]",s=RegExp("^"+c+c+"*"),l=RegExp(c+c+"*$"),f=function(e){return function(t){var n=i(o(t));return 1&e&&(n=u(n,s,"")),2&e&&(n=u(n,l,"")),n}};e.exports={start:f(1),end:f(2),trim:f(3)}},50205:(e,t,n)=>{var r=n(12364),o=n(38161),i=n(2905),a=n(57002);e.exports=function(){var e=o("Symbol"),t=e&&e.prototype,n=t&&t.valueOf,u=i("toPrimitive");t&&!t[u]&&a(t,u,(function(e){return r(n,this)}),{arity:1})}},36585:(e,t,n)=>{var r,o,i,a,u=n(68348),c=n(89664),s=n(45408),l=n(83907),f=n(35920),p=n(82304),d=n(99146),h=n(52311),y=n(37027),m=n(57167),v=n(75891),g=n(15200),b=u.setImmediate,w=u.clearImmediate,O=u.process,E=u.Dispatch,_=u.Function,x=u.MessageChannel,S=u.String,j=0,P={},k="onreadystatechange";try{r=u.location}catch(e){}var I=function(e){if(f(P,e)){var t=P[e];delete P[e],t()}},T=function(e){return function(){I(e)}},R=function(e){I(e.data)},C=function(e){u.postMessage(S(e),r.protocol+"//"+r.host)};b&&w||(b=function(e){m(arguments.length,1);var t=l(e)?e:_(e),n=h(arguments,1);return P[++j]=function(){c(t,void 0,n)},o(j),j},w=function(e){delete P[e]},g?o=function(e){O.nextTick(T(e))}:E&&E.now?o=function(e){E.now(T(e))}:x&&!v?(a=(i=new x).port2,i.port1.onmessage=R,o=s(a.postMessage,a)):u.addEventListener&&l(u.postMessage)&&!u.importScripts&&r&&"file:"!==r.protocol&&!p(C)?(o=C,u.addEventListener("message",R,!1)):o=k in y("script")?function(e){d.appendChild(y("script")).onreadystatechange=function(){d.removeChild(this),I(e)}}:function(e){setTimeout(T(e),0)}),e.exports={set:b,clear:w}},90364:(e,t,n)=>{var r=n(50295);e.exports=r(1..valueOf)},59470:(e,t,n)=>{var r=n(89345),o=Math.max,i=Math.min;e.exports=function(e,t){var n=r(e);return n<0?o(n+t,0):i(n,t)}},79486:(e,t,n)=>{var r=n(6237),o=n(21132);e.exports=function(e){return r(o(e))}},89345:(e,t,n)=>{var r=n(7688);e.exports=function(e){var t=+e;return t!=t||0===t?0:r(t)}},36350:(e,t,n)=>{var r=n(89345),o=Math.min;e.exports=function(e){return e>0?o(r(e),9007199254740991):0}},55835:(e,t,n)=>{var r=n(21132),o=Object;e.exports=function(e){return o(r(e))}},4420:(e,t,n)=>{var r=n(12364),o=n(21752),i=n(33758),a=n(37838),u=n(29786),c=n(2905),s=TypeError,l=c("toPrimitive");e.exports=function(e,t){if(!o(e)||i(e))return e;var n,c=a(e,l);if(c){if(void 0===t&&(t="default"),n=r(c,e,t),!o(n)||i(n))return n;throw s("Can't convert object to primitive value")}return void 0===t&&(t="number"),u(e,t)}},54089:(e,t,n)=>{var r=n(4420),o=n(33758);e.exports=function(e){var t=r(e,"string");return o(t)?t:t+""}},54172:(e,t,n)=>{var r={};r[n(2905)("toStringTag")]="z",e.exports="[object z]"===String(r)},43974:(e,t,n)=>{var r=n(47465),o=String;e.exports=function(e){if("Symbol"===r(e))throw TypeError("Cannot convert a Symbol value to a string");return o(e)}},89075:e=>{var t=String;e.exports=function(e){try{return t(e)}catch(e){return"Object"}}},51339:(e,t,n)=>{var r=n(50295),o=0,i=Math.random(),a=r(1..toString);e.exports=function(e){return"Symbol("+(void 0===e?"":e)+")_"+a(++o+i,36)}},14386:(e,t,n)=>{var r=n(37201);e.exports=r&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},53850:(e,t,n)=>{var r=n(8370),o=n(82304);e.exports=r&&o((function(){return 42!=Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype}))},57167:e=>{var t=TypeError;e.exports=function(e,n){if(e<n)throw t("Not enough arguments");return e}},43445:(e,t,n)=>{var r=n(2905);t.f=r},2905:(e,t,n)=>{var r=n(68348),o=n(54365),i=n(35920),a=n(51339),u=n(37201),c=n(14386),s=o("wks"),l=r.Symbol,f=l&&l.for,p=c?l:l&&l.withoutSetter||a;e.exports=function(e){if(!i(s,e)||!u&&"string"!=typeof s[e]){var t="Symbol."+e;u&&i(l,e)?s[e]=l[e]:s[e]=c&&f?f(t):p(t)}return s[e]}},56346:e=>{e.exports="\t\n\v\f\r                 \u2028\u2029\ufeff"},58113:(e,t,n)=>{"use strict";var r=n(38161),o=n(35920),i=n(54652),a=n(18142),u=n(12398),c=n(37349),s=n(97487),l=n(84175),f=n(27966),p=n(77046),d=n(95862),h=n(84563),y=n(8370),m=n(80692);e.exports=function(e,t,n,v){var g="stackTraceLimit",b=v?2:1,w=e.split("."),O=w[w.length-1],E=r.apply(null,w);if(E){var _=E.prototype;if(!m&&o(_,"cause")&&delete _.cause,!n)return E;var x=r("Error"),S=t((function(e,t){var n=f(v?t:e,void 0),r=v?new E(e):new E;return void 0!==n&&i(r,"message",n),h&&i(r,"stack",d(r.stack,2)),this&&a(_,this)&&l(r,this,S),arguments.length>b&&p(r,arguments[b]),r}));if(S.prototype=_,"Error"!==O?u?u(S,x):c(S,x,{name:!0}):y&&g in E&&(s(S,E,g),s(S,E,"prepareStackTrace")),c(S,E),!m)try{_.name!==O&&i(_,"name",O),_.constructor=S}catch(e){}return S}}},36353:(e,t,n)=>{"use strict";var r=n(4209),o=n(82304),i=n(4887),a=n(21752),u=n(55835),c=n(54020),s=n(68539),l=n(48245),f=n(86729),p=n(21392),d=n(2905),h=n(80773),y=d("isConcatSpreadable"),m=h>=51||!o((function(){var e=[];return e[y]=!1,e.concat()[0]!==e})),v=p("concat"),g=function(e){if(!a(e))return!1;var t=e[y];return void 0!==t?!!t:i(e)};r({target:"Array",proto:!0,arity:1,forced:!m||!v},{concat:function(e){var t,n,r,o,i,a=u(this),p=f(a,0),d=0;for(t=-1,r=arguments.length;t<r;t++)if(g(i=-1===t?a:arguments[t]))for(o=c(i),s(d+o),n=0;n<o;n++,d++)n in i&&l(p,d,i[n]);else s(d+1),l(p,d++,i);return p.length=d,p}})},77653:(e,t,n)=>{"use strict";var r=n(4209),o=n(7189).every;r({target:"Array",proto:!0,forced:!n(62235)("every")},{every:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}})},93857:(e,t,n)=>{var r=n(4209),o=n(25022),i=n(16693);r({target:"Array",proto:!0},{fill:o}),i("fill")},14862:(e,t,n)=>{"use strict";var r=n(4209),o=n(7189).filter;r({target:"Array",proto:!0,forced:!n(21392)("filter")},{filter:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}})},35288:(e,t,n)=>{"use strict";var r=n(4209),o=n(7189).findIndex,i=n(16693),a="findIndex",u=!0;a in[]&&Array(1).findIndex((function(){u=!1})),r({target:"Array",proto:!0,forced:u},{findIndex:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),i(a)},90330:(e,t,n)=>{"use strict";var r=n(4209),o=n(7189).find,i=n(16693),a="find",u=!0;a in[]&&Array(1).find((function(){u=!1})),r({target:"Array",proto:!0,forced:u},{find:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),i(a)},83159:(e,t,n)=>{"use strict";var r=n(4209),o=n(66469);r({target:"Array",proto:!0,forced:[].forEach!=o},{forEach:o})},52906:(e,t,n)=>{var r=n(4209),o=n(93099);r({target:"Array",stat:!0,forced:!n(83307)((function(e){Array.from(e)}))},{from:o})},45792:(e,t,n)=>{"use strict";var r=n(4209),o=n(26281).includes,i=n(82304),a=n(16693);r({target:"Array",proto:!0,forced:i((function(){return!Array(1).includes()}))},{includes:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),a("includes")},4356:(e,t,n)=>{"use strict";var r=n(4209),o=n(50295),i=n(26281).indexOf,a=n(62235),u=o([].indexOf),c=!!u&&1/u([1],1,-0)<0,s=a("indexOf");r({target:"Array",proto:!0,forced:c||!s},{indexOf:function(e){var t=arguments.length>1?arguments[1]:void 0;return c?u(this,e,t)||0:i(this,e,t)}})},9229:(e,t,n)=>{n(4209)({target:"Array",stat:!0},{isArray:n(4887)})},87758:(e,t,n)=>{"use strict";var r=n(79486),o=n(16693),i=n(59451),a=n(22956),u=n(60342).f,c=n(69106),s=n(80692),l=n(8370),f="Array Iterator",p=a.set,d=a.getterFor(f);e.exports=c(Array,"Array",(function(e,t){p(this,{type:f,target:r(e),index:0,kind:t})}),(function(){var e=d(this),t=e.target,n=e.kind,r=e.index++;return!t||r>=t.length?(e.target=void 0,{value:void 0,done:!0}):"keys"==n?{value:r,done:!1}:"values"==n?{value:t[r],done:!1}:{value:[r,t[r]],done:!1}}),"values");var h=i.Arguments=i.Array;if(o("keys"),o("values"),o("entries"),!s&&l&&"values"!==h.name)try{u(h,"name",{value:"values"})}catch(e){}},72829:(e,t,n)=>{"use strict";var r=n(4209),o=n(50295),i=n(6237),a=n(79486),u=n(62235),c=o([].join),s=i!=Object,l=u("join",",");r({target:"Array",proto:!0,forced:s||!l},{join:function(e){return c(a(this),void 0===e?",":e)}})},53790:(e,t,n)=>{"use strict";var r=n(4209),o=n(7189).map;r({target:"Array",proto:!0,forced:!n(21392)("map")},{map:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}})},17918:(e,t,n)=>{"use strict";var r=n(4209),o=n(5153).left,i=n(62235),a=n(80773),u=n(15200);r({target:"Array",proto:!0,forced:!i("reduce")||!u&&a>79&&a<83},{reduce:function(e){var t=arguments.length;return o(this,e,t,t>1?arguments[1]:void 0)}})},42478:(e,t,n)=>{"use strict";var r=n(4209),o=n(50295),i=n(4887),a=o([].reverse),u=[1,2];r({target:"Array",proto:!0,forced:String(u)===String(u.reverse())},{reverse:function(){return i(this)&&(this.length=this.length),a(this)}})},72764:(e,t,n)=>{"use strict";var r=n(4209),o=n(4887),i=n(95386),a=n(21752),u=n(59470),c=n(54020),s=n(79486),l=n(48245),f=n(2905),p=n(21392),d=n(52311),h=p("slice"),y=f("species"),m=Array,v=Math.max;r({target:"Array",proto:!0,forced:!h},{slice:function(e,t){var n,r,f,p=s(this),h=c(p),g=u(e,h),b=u(void 0===t?h:t,h);if(o(p)&&(n=p.constructor,(i(n)&&(n===m||o(n.prototype))||a(n)&&null===(n=n[y]))&&(n=void 0),n===m||void 0===n))return d(p,g,b);for(r=new(void 0===n?m:n)(v(b-g,0)),f=0;g<b;g++,f++)g in p&&l(r,f,p[g]);return r.length=f,r}})},92973:(e,t,n)=>{"use strict";var r=n(4209),o=n(7189).some;r({target:"Array",proto:!0,forced:!n(62235)("some")},{some:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}})},42396:(e,t,n)=>{"use strict";var r=n(4209),o=n(50295),i=n(83089),a=n(55835),u=n(54020),c=n(91337),s=n(43974),l=n(82304),f=n(41953),p=n(62235),d=n(14855),h=n(48784),y=n(80773),m=n(25109),v=[],g=o(v.sort),b=o(v.push),w=l((function(){v.sort(void 0)})),O=l((function(){v.sort(null)})),E=p("sort"),_=!l((function(){if(y)return y<70;if(!(d&&d>3)){if(h)return!0;if(m)return m<603;var e,t,n,r,o="";for(e=65;e<76;e++){switch(t=String.fromCharCode(e),e){case 66:case 69:case 70:case 72:n=3;break;case 68:case 71:n=4;break;default:n=2}for(r=0;r<47;r++)v.push({k:t+r,v:n})}for(v.sort((function(e,t){return t.v-e.v})),r=0;r<v.length;r++)t=v[r].k.charAt(0),o.charAt(o.length-1)!==t&&(o+=t);return"DGBEFHACIJK"!==o}}));r({target:"Array",proto:!0,forced:w||!O||!E||!_},{sort:function(e){void 0!==e&&i(e);var t=a(this);if(_)return void 0===e?g(t):g(t,e);var n,r,o=[],l=u(t);for(r=0;r<l;r++)r in t&&b(o,t[r]);for(f(o,function(e){return function(t,n){return void 0===n?-1:void 0===t?1:void 0!==e?+e(t,n)||0:s(t)>s(n)?1:-1}}(e)),n=o.length,r=0;r<n;)t[r]=o[r++];for(;r<l;)c(t,r++);return t}})},78685:(e,t,n)=>{var r=n(50295),o=n(57002),i=Date.prototype,a="Invalid Date",u="toString",c=r(i.toString),s=r(i.getTime);String(new Date(NaN))!=a&&o(i,u,(function(){var e=s(this);return e==e?c(this):a}))},59201:(e,t,n)=>{var r=n(4209),o=n(68348),i=n(89664),a=n(58113),u="WebAssembly",c=o.WebAssembly,s=7!==Error("e",{cause:7}).cause,l=function(e,t){var n={};n[e]=a(e,t,s),r({global:!0,constructor:!0,arity:1,forced:s},n)},f=function(e,t){if(c&&c[e]){var n={};n[e]=a("WebAssembly."+e,t,s),r({target:u,stat:!0,constructor:!0,arity:1,forced:s},n)}};l("Error",(function(e){return function(t){return i(e,this,arguments)}})),l("EvalError",(function(e){return function(t){return i(e,this,arguments)}})),l("RangeError",(function(e){return function(t){return i(e,this,arguments)}})),l("ReferenceError",(function(e){return function(t){return i(e,this,arguments)}})),l("SyntaxError",(function(e){return function(t){return i(e,this,arguments)}})),l("TypeError",(function(e){return function(t){return i(e,this,arguments)}})),l("URIError",(function(e){return function(t){return i(e,this,arguments)}})),f("CompileError",(function(e){return function(t){return i(e,this,arguments)}})),f("LinkError",(function(e){return function(t){return i(e,this,arguments)}})),f("RuntimeError",(function(e){return function(t){return i(e,this,arguments)}}))},86781:(e,t,n)=>{var r=n(57002),o=n(90672),i=Error.prototype;i.toString!==o&&r(i,"toString",o)},82765:(e,t,n)=>{var r=n(4209),o=n(1068);r({target:"Function",proto:!0,forced:Function.bind!==o},{bind:o})},83386:(e,t,n)=>{var r=n(8370),o=n(10140).EXISTS,i=n(50295),a=n(60342).f,u=Function.prototype,c=i(u.toString),s=/function\b(?:\s|\/\*[\S\s]*?\*\/|\/\/[^\n\r]*[\n\r]+)*([^\s(/]*)/,l=i(s.exec);r&&!o&&a(u,"name",{configurable:!0,get:function(){try{return l(s,c(this))[1]}catch(e){return""}}})},80763:(e,t,n)=>{var r=n(4209),o=n(38161),i=n(89664),a=n(12364),u=n(50295),c=n(82304),s=n(4887),l=n(83907),f=n(21752),p=n(33758),d=n(52311),h=n(37201),y=o("JSON","stringify"),m=u(/./.exec),v=u("".charAt),g=u("".charCodeAt),b=u("".replace),w=u(1..toString),O=/[\uD800-\uDFFF]/g,E=/^[\uD800-\uDBFF]$/,_=/^[\uDC00-\uDFFF]$/,x=!h||c((function(){var e=o("Symbol")();return"[null]"!=y([e])||"{}"!=y({a:e})||"{}"!=y(Object(e))})),S=c((function(){return'"\\udf06\\ud834"'!==y("\udf06\ud834")||'"\\udead"'!==y("\udead")})),j=function(e,t){var n=d(arguments),r=t;if((f(t)||void 0!==e)&&!p(e))return s(t)||(t=function(e,t){if(l(r)&&(t=a(r,this,e,t)),!p(t))return t}),n[1]=t,i(y,null,n)},P=function(e,t,n){var r=v(n,t-1),o=v(n,t+1);return m(E,e)&&!m(_,o)||m(_,e)&&!m(E,r)?"\\u"+w(g(e,0),16):e};y&&r({target:"JSON",stat:!0,arity:3,forced:x||S},{stringify:function(e,t,n){var r=d(arguments),o=i(x?j:y,null,r);return S&&"string"==typeof o?b(o,O,P):o}})},22532:(e,t,n)=>{var r=n(68348);n(14036)(r.JSON,"JSON",!0)},49564:(e,t,n)=>{n(14036)(Math,"Math",!0)},26072:(e,t,n)=>{"use strict";var r=n(8370),o=n(68348),i=n(50295),a=n(82136),u=n(57002),c=n(35920),s=n(84175),l=n(18142),f=n(33758),p=n(4420),d=n(82304),h=n(13194).f,y=n(4172).f,m=n(60342).f,v=n(90364),g=n(16221).trim,b="Number",w=o.Number,O=w.prototype,E=o.TypeError,_=i("".slice),x=i("".charCodeAt),S=function(e){var t=p(e,"number");return"bigint"==typeof t?t:j(t)},j=function(e){var t,n,r,o,i,a,u,c,s=p(e,"number");if(f(s))throw E("Cannot convert a Symbol value to a number");if("string"==typeof s&&s.length>2)if(s=g(s),43===(t=x(s,0))||45===t){if(88===(n=x(s,2))||120===n)return NaN}else if(48===t){switch(x(s,1)){case 66:case 98:r=2,o=49;break;case 79:case 111:r=8,o=55;break;default:return+s}for(a=(i=_(s,2)).length,u=0;u<a;u++)if((c=x(i,u))<48||c>o)return NaN;return parseInt(i,r)}return+s};if(a(b,!w(" 0o1")||!w("0b1")||w("+0x1"))){for(var P,k=function(e){var t=arguments.length<1?0:w(S(e)),n=this;return l(O,n)&&d((function(){v(n)}))?s(Object(t),n,k):t},I=r?h(w):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,fromString,range".split(","),T=0;I.length>T;T++)c(w,P=I[T])&&!c(k,P)&&m(k,P,y(w,P));k.prototype=O,O.constructor=k,u(o,b,k,{constructor:!0})}},86833:(e,t,n)=>{n(4209)({target:"Number",stat:!0},{isInteger:n(37086)})},15661:(e,t,n)=>{n(4209)({target:"Number",stat:!0},{isNaN:function(e){return e!=e}})},70849:(e,t,n)=>{"use strict";var r=n(4209),o=n(50295),i=n(89345),a=n(90364),u=n(98816),c=n(82304),s=RangeError,l=String,f=Math.floor,p=o(u),d=o("".slice),h=o(1..toFixed),y=function(e,t,n){return 0===t?n:t%2==1?y(e,t-1,n*e):y(e*e,t/2,n)},m=function(e,t,n){for(var r=-1,o=n;++r<6;)o+=t*e[r],e[r]=o%1e7,o=f(o/1e7)},v=function(e,t){for(var n=6,r=0;--n>=0;)r+=e[n],e[n]=f(r/t),r=r%t*1e7},g=function(e){for(var t=6,n="";--t>=0;)if(""!==n||0===t||0!==e[t]){var r=l(e[t]);n=""===n?r:n+p("0",7-r.length)+r}return n};r({target:"Number",proto:!0,forced:c((function(){return"0.000"!==h(8e-5,3)||"1"!==h(.9,0)||"1.25"!==h(1.255,2)||"1000000000000000128"!==h(0xde0b6b3a7640080,0)}))||!c((function(){h({})}))},{toFixed:function(e){var t,n,r,o,u=a(this),c=i(e),f=[0,0,0,0,0,0],h="",b="0";if(c<0||c>20)throw s("Incorrect fraction digits");if(u!=u)return"NaN";if(u<=-1e21||u>=1e21)return l(u);if(u<0&&(h="-",u=-u),u>1e-21)if(n=(t=function(e){for(var t=0,n=e;n>=4096;)t+=12,n/=4096;for(;n>=2;)t+=1,n/=2;return t}(u*y(2,69,1))-69)<0?u*y(2,-t,1):u/y(2,t,1),n*=4503599627370496,(t=52-t)>0){for(m(f,0,n),r=c;r>=7;)m(f,1e7,0),r-=7;for(m(f,y(10,r,1),0),r=t-1;r>=23;)v(f,1<<23),r-=23;v(f,1<<r),m(f,1,1),v(f,2),b=g(f)}else m(f,0,n),m(f,1<<-t,0),b=g(f)+p("0",c);return b=c>0?h+((o=b.length)<=c?"0."+p("0",c-o)+b:d(b,0,o-c)+"."+d(b,o-c)):h+b}})},12578:(e,t,n)=>{var r=n(4209),o=n(70194);r({target:"Object",stat:!0,arity:2,forced:Object.assign!==o},{assign:o})},22653:(e,t,n)=>{n(4209)({target:"Object",stat:!0,sham:!n(8370)},{create:n(63513)})},12978:(e,t,n)=>{var r=n(4209),o=n(8370),i=n(81040).f;r({target:"Object",stat:!0,forced:Object.defineProperties!==i,sham:!o},{defineProperties:i})},67407:(e,t,n)=>{var r=n(4209),o=n(8370),i=n(60342).f;r({target:"Object",stat:!0,forced:Object.defineProperty!==i,sham:!o},{defineProperty:i})},99627:(e,t,n)=>{var r=n(4209),o=n(24367),i=n(82304),a=n(21752),u=n(61145).onFreeze,c=Object.freeze;r({target:"Object",stat:!0,forced:i((function(){c(1)})),sham:!o},{freeze:function(e){return c&&a(e)?c(u(e)):e}})},7283:(e,t,n)=>{var r=n(4209),o=n(82304),i=n(79486),a=n(4172).f,u=n(8370),c=o((function(){a(1)}));r({target:"Object",stat:!0,forced:!u||c,sham:!u},{getOwnPropertyDescriptor:function(e,t){return a(i(e),t)}})},75880:(e,t,n)=>{var r=n(4209),o=n(8370),i=n(81448),a=n(79486),u=n(4172),c=n(48245);r({target:"Object",stat:!0,sham:!o},{getOwnPropertyDescriptors:function(e){for(var t,n,r=a(e),o=u.f,s=i(r),l={},f=0;s.length>f;)void 0!==(n=o(r,t=s[f++]))&&c(l,t,n);return l}})},18412:(e,t,n)=>{var r=n(4209),o=n(37201),i=n(82304),a=n(19849),u=n(55835);r({target:"Object",stat:!0,forced:!o||i((function(){a.f(1)}))},{getOwnPropertySymbols:function(e){var t=a.f;return t?t(u(e)):[]}})},92792:(e,t,n)=>{var r=n(4209),o=n(82304),i=n(55835),a=n(78066),u=n(83379);r({target:"Object",stat:!0,forced:o((function(){a(1)})),sham:!u},{getPrototypeOf:function(e){return a(i(e))}})},61511:(e,t,n)=>{var r=n(4209),o=n(55835),i=n(89361);r({target:"Object",stat:!0,forced:n(82304)((function(){i(1)}))},{keys:function(e){return i(o(e))}})},88627:(e,t,n)=>{n(4209)({target:"Object",stat:!0},{setPrototypeOf:n(12398)})},99918:(e,t,n)=>{var r=n(54172),o=n(57002),i=n(51431);r||o(Object.prototype,"toString",i,{unsafe:!0})},94606:(e,t,n)=>{var r=n(4209),o=n(64307).values;r({target:"Object",stat:!0},{values:function(e){return o(e)}})},13940:(e,t,n)=>{var r=n(4209),o=n(10634);r({global:!0,forced:parseFloat!=o},{parseFloat:o})},92124:(e,t,n)=>{var r=n(4209),o=n(49268);r({global:!0,forced:parseInt!=o},{parseInt:o})},9206:(e,t,n)=>{"use strict";var r=n(4209),o=n(12364),i=n(83089),a=n(63223),u=n(88481),c=n(46386);r({target:"Promise",stat:!0,forced:n(69700)},{all:function(e){var t=this,n=a.f(t),r=n.resolve,s=n.reject,l=u((function(){var n=i(t.resolve),a=[],u=0,l=1;c(e,(function(e){var i=u++,c=!1;l++,o(n,t,e).then((function(e){c||(c=!0,a[i]=e,--l||r(a))}),s)})),--l||r(a)}));return l.error&&s(l.value),n.promise}})},5665:(e,t,n)=>{"use strict";var r=n(4209),o=n(80692),i=n(31240).CONSTRUCTOR,a=n(36576),u=n(38161),c=n(83907),s=n(57002),l=a&&a.prototype;if(r({target:"Promise",proto:!0,forced:i,real:!0},{catch:function(e){return this.then(void 0,e)}}),!o&&c(a)){var f=u("Promise").prototype.catch;l.catch!==f&&s(l,"catch",f,{unsafe:!0})}},63692:(e,t,n)=>{"use strict";var r,o,i,a=n(4209),u=n(80692),c=n(15200),s=n(68348),l=n(12364),f=n(57002),p=n(12398),d=n(14036),h=n(53207),y=n(83089),m=n(83907),v=n(21752),g=n(66992),b=n(18062),w=n(36585).set,O=n(21029),E=n(10917),_=n(88481),x=n(55149),S=n(22956),j=n(36576),P=n(31240),k=n(63223),I="Promise",T=P.CONSTRUCTOR,R=P.REJECTION_EVENT,C=P.SUBCLASSING,A=S.getterFor(I),N=S.set,L=j&&j.prototype,D=j,M=L,F=s.TypeError,U=s.document,B=s.process,H=k.f,q=H,z=!!(U&&U.createEvent&&s.dispatchEvent),G="unhandledrejection",W=function(e){var t;return!(!v(e)||!m(t=e.then))&&t},V=function(e,t){var n,r,o,i=t.value,a=1==t.state,u=a?e.ok:e.fail,c=e.resolve,s=e.reject,f=e.domain;try{u?(a||(2===t.rejection&&Q(t),t.rejection=1),!0===u?n=i:(f&&f.enter(),n=u(i),f&&(f.exit(),o=!0)),n===e.promise?s(F("Promise-chain cycle")):(r=W(n))?l(r,n,c,s):c(n)):s(i)}catch(e){f&&!o&&f.exit(),s(e)}},Y=function(e,t){e.notified||(e.notified=!0,O((function(){for(var n,r=e.reactions;n=r.get();)V(n,e);e.notified=!1,t&&!e.rejection&&$(e)})))},Z=function(e,t,n){var r,o;z?((r=U.createEvent("Event")).promise=t,r.reason=n,r.initEvent(e,!1,!0),s.dispatchEvent(r)):r={promise:t,reason:n},!R&&(o=s["on"+e])?o(r):e===G&&E("Unhandled promise rejection",n)},$=function(e){l(w,s,(function(){var t,n=e.facade,r=e.value;if(K(e)&&(t=_((function(){c?B.emit("unhandledRejection",r,n):Z(G,n,r)})),e.rejection=c||K(e)?2:1,t.error))throw t.value}))},K=function(e){return 1!==e.rejection&&!e.parent},Q=function(e){l(w,s,(function(){var t=e.facade;c?B.emit("rejectionHandled",t):Z("rejectionhandled",t,e.value)}))},X=function(e,t,n){return function(r){e(t,r,n)}},J=function(e,t,n){e.done||(e.done=!0,n&&(e=n),e.value=t,e.state=2,Y(e,!0))},ee=function(e,t,n){if(!e.done){e.done=!0,n&&(e=n);try{if(e.facade===t)throw F("Promise can't be resolved itself");var r=W(t);r?O((function(){var n={done:!1};try{l(r,t,X(ee,n,e),X(J,n,e))}catch(t){J(n,t,e)}})):(e.value=t,e.state=1,Y(e,!1))}catch(t){J({done:!1},t,e)}}};if(T&&(M=(D=function(e){g(this,M),y(e),l(r,this);var t=A(this);try{e(X(ee,t),X(J,t))}catch(e){J(t,e)}}).prototype,(r=function(e){N(this,{type:I,done:!1,notified:!1,parent:!1,reactions:new x,rejection:!1,state:0,value:void 0})}).prototype=f(M,"then",(function(e,t){var n=A(this),r=H(b(this,D));return n.parent=!0,r.ok=!m(e)||e,r.fail=m(t)&&t,r.domain=c?B.domain:void 0,0==n.state?n.reactions.add(r):O((function(){V(r,n)})),r.promise})),o=function(){var e=new r,t=A(e);this.promise=e,this.resolve=X(ee,t),this.reject=X(J,t)},k.f=H=function(e){return e===D||undefined===e?new o(e):q(e)},!u&&m(j)&&L!==Object.prototype)){i=L.then,C||f(L,"then",(function(e,t){var n=this;return new D((function(e,t){l(i,n,e,t)})).then(e,t)}),{unsafe:!0});try{delete L.constructor}catch(e){}p&&p(L,M)}a({global:!0,constructor:!0,wrap:!0,forced:T},{Promise:D}),d(D,I,!1,!0),h(I)},72145:(e,t,n)=>{n(63692),n(9206),n(5665),n(8147),n(97120),n(55754)},8147:(e,t,n)=>{"use strict";var r=n(4209),o=n(12364),i=n(83089),a=n(63223),u=n(88481),c=n(46386);r({target:"Promise",stat:!0,forced:n(69700)},{race:function(e){var t=this,n=a.f(t),r=n.reject,s=u((function(){var a=i(t.resolve);c(e,(function(e){o(a,t,e).then(n.resolve,r)}))}));return s.error&&r(s.value),n.promise}})},97120:(e,t,n)=>{"use strict";var r=n(4209),o=n(12364),i=n(63223);r({target:"Promise",stat:!0,forced:n(31240).CONSTRUCTOR},{reject:function(e){var t=i.f(this);return o(t.reject,void 0,e),t.promise}})},55754:(e,t,n)=>{"use strict";var r=n(4209),o=n(38161),i=n(80692),a=n(36576),u=n(31240).CONSTRUCTOR,c=n(26750),s=o("Promise"),l=i&&!u;r({target:"Promise",stat:!0,forced:i||u},{resolve:function(e){return c(l&&this===s?a:this,e)}})},25701:(e,t,n)=>{var r=n(4209),o=n(38161),i=n(89664),a=n(1068),u=n(31474),c=n(95665),s=n(21752),l=n(63513),f=n(82304),p=o("Reflect","construct"),d=Object.prototype,h=[].push,y=f((function(){function e(){}return!(p((function(){}),[],e)instanceof e)})),m=!f((function(){p((function(){}))})),v=y||m;r({target:"Reflect",stat:!0,forced:v,sham:v},{construct:function(e,t){u(e),c(t);var n=arguments.length<3?e:u(arguments[2]);if(m&&!y)return p(e,t,n);if(e==n){switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3])}var r=[null];return i(h,r,t),new(i(a,e,r))}var o=n.prototype,f=l(s(o)?o:d),v=i(e,f,t);return s(v)?v:f}})},98120:(e,t,n)=>{var r=n(4209),o=n(68348),i=n(14036);r({global:!0},{Reflect:{}}),i(o.Reflect,"Reflect",!0)},34591:(e,t,n)=>{var r=n(8370),o=n(68348),i=n(50295),a=n(82136),u=n(84175),c=n(54652),s=n(13194).f,l=n(18142),f=n(12810),p=n(43974),d=n(17350),h=n(7588),y=n(97487),m=n(57002),v=n(82304),g=n(35920),b=n(22956).enforce,w=n(53207),O=n(2905),E=n(53937),_=n(41085),x=O("match"),S=o.RegExp,j=S.prototype,P=o.SyntaxError,k=i(j.exec),I=i("".charAt),T=i("".replace),R=i("".indexOf),C=i("".slice),A=/^\?<[^\s\d!#%&*+<=>@^][^\s!#%&*+<=>@^]*>/,N=/a/g,L=/a/g,D=new S(N)!==N,M=h.MISSED_STICKY,F=h.UNSUPPORTED_Y,U=r&&(!D||M||E||_||v((function(){return L[x]=!1,S(N)!=N||S(L)==L||"/a/i"!=S(N,"i")})));if(a("RegExp",U)){for(var B=function(e,t){var n,r,o,i,a,s,h=l(j,this),y=f(e),m=void 0===t,v=[],w=e;if(!h&&y&&m&&e.constructor===B)return e;if((y||l(j,e))&&(e=e.source,m&&(t=d(w))),e=void 0===e?"":p(e),t=void 0===t?"":p(t),w=e,E&&"dotAll"in N&&(r=!!t&&R(t,"s")>-1)&&(t=T(t,/s/g,"")),n=t,M&&"sticky"in N&&(o=!!t&&R(t,"y")>-1)&&F&&(t=T(t,/y/g,"")),_&&(e=(i=function(e){for(var t,n=e.length,r=0,o="",i=[],a={},u=!1,c=!1,s=0,l="";r<=n;r++){if("\\"===(t=I(e,r)))t+=I(e,++r);else if("]"===t)u=!1;else if(!u)switch(!0){case"["===t:u=!0;break;case"("===t:k(A,C(e,r+1))&&(r+=2,c=!0),o+=t,s++;continue;case">"===t&&c:if(""===l||g(a,l))throw new P("Invalid capture group name");a[l]=!0,i[i.length]=[l,s],c=!1,l="";continue}c?l+=t:o+=t}return[o,i]}(e))[0],v=i[1]),a=u(S(e,t),h?this:j,B),(r||o||v.length)&&(s=b(a),r&&(s.dotAll=!0,s.raw=B(function(e){for(var t,n=e.length,r=0,o="",i=!1;r<=n;r++)"\\"!==(t=I(e,r))?i||"."!==t?("["===t?i=!0:"]"===t&&(i=!1),o+=t):o+="[\\s\\S]":o+=t+I(e,++r);return o}(e),n)),o&&(s.sticky=!0),v.length&&(s.groups=v)),e!==w)try{c(a,"source",""===w?"(?:)":w)}catch(e){}return a},H=s(S),q=0;H.length>q;)y(B,S,H[q++]);j.constructor=B,B.prototype=j,m(o,"RegExp",B,{constructor:!0})}w("RegExp")},41866:(e,t,n)=>{var r=n(8370),o=n(53937),i=n(47157),a=n(21394),u=n(22956).get,c=RegExp.prototype,s=TypeError;r&&o&&a(c,"dotAll",{configurable:!0,get:function(){if(this!==c){if("RegExp"===i(this))return!!u(this).dotAll;throw s("Incompatible receiver, RegExp required")}}})},42484:(e,t,n)=>{"use strict";var r=n(4209),o=n(64118);r({target:"RegExp",proto:!0,forced:/./.exec!==o},{exec:o})},11253:(e,t,n)=>{var r=n(8370),o=n(7588).MISSED_STICKY,i=n(47157),a=n(21394),u=n(22956).get,c=RegExp.prototype,s=TypeError;r&&o&&a(c,"sticky",{configurable:!0,get:function(){if(this!==c){if("RegExp"===i(this))return!!u(this).sticky;throw s("Incompatible receiver, RegExp required")}}})},31815:(e,t,n)=>{"use strict";n(42484);var r,o,i=n(4209),a=n(12364),u=n(50295),c=n(83907),s=n(21752),l=(r=!1,(o=/[ac]/).exec=function(){return r=!0,/./.exec.apply(this,arguments)},!0===o.test("abc")&&r),f=TypeError,p=u(/./.test);i({target:"RegExp",proto:!0,forced:!l},{test:function(e){var t=this.exec;if(!c(t))return p(this,e);var n=a(t,this,e);if(null!==n&&!s(n))throw new f("RegExp exec method returned something other than an Object or null");return!!n}})},28417:(e,t,n)=>{"use strict";var r=n(10140).PROPER,o=n(57002),i=n(95665),a=n(43974),u=n(82304),c=n(17350),s="toString",l=RegExp.prototype.toString,f=u((function(){return"/a/b"!=l.call({source:"a",flags:"b"})})),p=r&&l.name!=s;(f||p)&&o(RegExp.prototype,s,(function(){var e=i(this);return"/"+a(e.source)+"/"+a(c(e))}),{unsafe:!0})},86330:(e,t,n)=>{"use strict";n(86535)("Set",(function(e){return function(){return e(this,arguments.length?arguments[0]:void 0)}}),n(81632))},68064:(e,t,n)=>{n(86330)},48078:(e,t,n)=>{"use strict";var r,o=n(4209),i=n(50295),a=n(4172).f,u=n(36350),c=n(43974),s=n(9397),l=n(21132),f=n(33241),p=n(80692),d=i("".endsWith),h=i("".slice),y=Math.min,m=f("endsWith");o({target:"String",proto:!0,forced:!!(p||m||(r=a(String.prototype,"endsWith"),!r||r.writable))&&!m},{endsWith:function(e){var t=c(l(this));s(e);var n=arguments.length>1?arguments[1]:void 0,r=t.length,o=void 0===n?r:y(u(n),r),i=c(e);return d?d(t,i,o):h(t,o-i.length,o)===i}})},6893:(e,t,n)=>{"use strict";var r=n(4209),o=n(50295),i=n(9397),a=n(21132),u=n(43974),c=n(33241),s=o("".indexOf);r({target:"String",proto:!0,forced:!c("includes")},{includes:function(e){return!!~s(u(a(this)),u(i(e)),arguments.length>1?arguments[1]:void 0)}})},66728:(e,t,n)=>{"use strict";var r=n(42968).charAt,o=n(43974),i=n(22956),a=n(69106),u="String Iterator",c=i.set,s=i.getterFor(u);a(String,"String",(function(e){c(this,{type:u,string:o(e),index:0})}),(function(){var e,t=s(this),n=t.string,o=t.index;return o>=n.length?{value:void 0,done:!0}:(e=r(n,o),t.index+=e.length,{value:e,done:!1})}))},4941:(e,t,n)=>{"use strict";var r=n(12364),o=n(19798),i=n(95665),a=n(36350),u=n(43974),c=n(21132),s=n(37838),l=n(96281),f=n(90123);o("match",(function(e,t,n){return[function(t){var n=c(this),o=null==t?void 0:s(t,e);return o?r(o,t,n):new RegExp(t)[e](u(n))},function(e){var r=i(this),o=u(e),c=n(t,r,o);if(c.done)return c.value;if(!r.global)return f(r,o);var s=r.unicode;r.lastIndex=0;for(var p,d=[],h=0;null!==(p=f(r,o));){var y=u(p[0]);d[h]=y,""===y&&(r.lastIndex=l(o,a(r.lastIndex),s)),h++}return 0===h?null:d}]}))},71772:(e,t,n)=>{"use strict";var r=n(89664),o=n(12364),i=n(50295),a=n(19798),u=n(82304),c=n(95665),s=n(83907),l=n(89345),f=n(36350),p=n(43974),d=n(21132),h=n(96281),y=n(37838),m=n(30585),v=n(90123),g=n(2905)("replace"),b=Math.max,w=Math.min,O=i([].concat),E=i([].push),_=i("".indexOf),x=i("".slice),S="$0"==="a".replace(/./,"$0"),j=!!/./[g]&&""===/./[g]("a","$0");a("replace",(function(e,t,n){var i=j?"$":"$0";return[function(e,n){var r=d(this),i=null==e?void 0:y(e,g);return i?o(i,e,r,n):o(t,p(r),e,n)},function(e,o){var a=c(this),u=p(e);if("string"==typeof o&&-1===_(o,i)&&-1===_(o,"$<")){var d=n(t,a,u,o);if(d.done)return d.value}var y=s(o);y||(o=p(o));var g=a.global;if(g){var S=a.unicode;a.lastIndex=0}for(var j=[];;){var P=v(a,u);if(null===P)break;if(E(j,P),!g)break;""===p(P[0])&&(a.lastIndex=h(u,f(a.lastIndex),S))}for(var k,I="",T=0,R=0;R<j.length;R++){for(var C=p((P=j[R])[0]),A=b(w(l(P.index),u.length),0),N=[],L=1;L<P.length;L++)E(N,void 0===(k=P[L])?k:String(k));var D=P.groups;if(y){var M=O([C],N,A,u);void 0!==D&&E(M,D);var F=p(r(o,void 0,M))}else F=m(C,u,A,N,D,o);A>=T&&(I+=x(u,T,A)+F,T=A+C.length)}return I+x(u,T)}]}),!!u((function(){var e=/./;return e.exec=function(){var e=[];return e.groups={a:"7"},e},"7"!=="".replace(e,"$<a>")}))||!S||j)},71246:(e,t,n)=>{"use strict";var r=n(12364),o=n(19798),i=n(95665),a=n(21132),u=n(19300),c=n(43974),s=n(37838),l=n(90123);o("search",(function(e,t,n){return[function(t){var n=a(this),o=null==t?void 0:s(t,e);return o?r(o,t,n):new RegExp(t)[e](c(n))},function(e){var r=i(this),o=c(e),a=n(t,r,o);if(a.done)return a.value;var s=r.lastIndex;u(s,0)||(r.lastIndex=0);var f=l(r,o);return u(r.lastIndex,s)||(r.lastIndex=s),null===f?-1:f.index}]}))},24450:(e,t,n)=>{"use strict";var r=n(89664),o=n(12364),i=n(50295),a=n(19798),u=n(12810),c=n(95665),s=n(21132),l=n(18062),f=n(96281),p=n(36350),d=n(43974),h=n(37838),y=n(51069),m=n(90123),v=n(64118),g=n(7588),b=n(82304),w=g.UNSUPPORTED_Y,O=4294967295,E=Math.min,_=[].push,x=i(/./.exec),S=i(_),j=i("".slice);a("split",(function(e,t,n){var i;return i="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(e,n){var i=d(s(this)),a=void 0===n?O:n>>>0;if(0===a)return[];if(void 0===e)return[i];if(!u(e))return o(t,i,e,a);for(var c,l,f,p=[],h=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),m=0,g=new RegExp(e.source,h+"g");(c=o(v,g,i))&&!((l=g.lastIndex)>m&&(S(p,j(i,m,c.index)),c.length>1&&c.index<i.length&&r(_,p,y(c,1)),f=c[0].length,m=l,p.length>=a));)g.lastIndex===c.index&&g.lastIndex++;return m===i.length?!f&&x(g,"")||S(p,""):S(p,j(i,m)),p.length>a?y(p,0,a):p}:"0".split(void 0,0).length?function(e,n){return void 0===e&&0===n?[]:o(t,this,e,n)}:t,[function(t,n){var r=s(this),a=null==t?void 0:h(t,e);return a?o(a,t,r,n):o(i,d(r),t,n)},function(e,r){var o=c(this),a=d(e),u=n(i,o,a,r,i!==t);if(u.done)return u.value;var s=l(o,RegExp),h=o.unicode,y=(o.ignoreCase?"i":"")+(o.multiline?"m":"")+(o.unicode?"u":"")+(w?"g":"y"),v=new s(w?"^(?:"+o.source+")":o,y),g=void 0===r?O:r>>>0;if(0===g)return[];if(0===a.length)return null===m(v,a)?[a]:[];for(var b=0,_=0,x=[];_<a.length;){v.lastIndex=w?0:_;var P,k=m(v,w?j(a,_):a);if(null===k||(P=E(p(v.lastIndex+(w?_:0)),a.length))===b)_=f(a,_,h);else{if(S(x,j(a,b,_)),x.length===g)return x;for(var I=1;I<=k.length-1;I++)if(S(x,k[I]),x.length===g)return x;_=b=P}}return S(x,j(a,b)),x}]}),!!b((function(){var e=/(?:)/,t=e.exec;e.exec=function(){return t.apply(this,arguments)};var n="ab".split(e);return 2!==n.length||"a"!==n[0]||"b"!==n[1]})),w)},95581:(e,t,n)=>{"use strict";var r,o=n(4209),i=n(50295),a=n(4172).f,u=n(36350),c=n(43974),s=n(9397),l=n(21132),f=n(33241),p=n(80692),d=i("".startsWith),h=i("".slice),y=Math.min,m=f("startsWith");o({target:"String",proto:!0,forced:!!(p||m||(r=a(String.prototype,"startsWith"),!r||r.writable))&&!m},{startsWith:function(e){var t=c(l(this));s(e);var n=u(y(arguments.length>1?arguments[1]:void 0,t.length)),r=c(e);return d?d(t,r,n):h(t,n,n+r.length)===r}})},76047:(e,t,n)=>{"use strict";var r=n(4209),o=n(50295),i=n(21132),a=n(89345),u=n(43974),c=o("".slice),s=Math.max,l=Math.min;r({target:"String",proto:!0,forced:!"".substr||"b"!=="ab".substr(-1)},{substr:function(e,t){var n,r,o=u(i(this)),f=o.length,p=a(e);return p===1/0&&(p=0),p<0&&(p=s(f+p,0)),(n=void 0===t?f:a(t))<=0||n===1/0||p>=(r=l(p+n,f))?"":c(o,p,r)}})},38233:(e,t,n)=>{"use strict";var r=n(4209),o=n(16221).trim;r({target:"String",proto:!0,forced:n(21225)("trim")},{trim:function(){return o(this)}})},20227:(e,t,n)=>{n(87251)("asyncIterator")},29283:(e,t,n)=>{"use strict";var r=n(4209),o=n(68348),i=n(12364),a=n(50295),u=n(80692),c=n(8370),s=n(37201),l=n(82304),f=n(35920),p=n(18142),d=n(95665),h=n(79486),y=n(54089),m=n(43974),v=n(53688),g=n(63513),b=n(89361),w=n(13194),O=n(78698),E=n(19849),_=n(4172),x=n(60342),S=n(81040),j=n(12922),P=n(57002),k=n(54365),I=n(95235),T=n(19112),R=n(51339),C=n(2905),A=n(43445),N=n(87251),L=n(50205),D=n(14036),M=n(22956),F=n(7189).forEach,U=I("hidden"),B="Symbol",H=M.set,q=M.getterFor(B),z=Object.prototype,G=o.Symbol,W=G&&G.prototype,V=o.TypeError,Y=o.QObject,Z=_.f,$=x.f,K=O.f,Q=j.f,X=a([].push),J=k("symbols"),ee=k("op-symbols"),te=k("wks"),ne=!Y||!Y.prototype||!Y.prototype.findChild,re=c&&l((function(){return 7!=g($({},"a",{get:function(){return $(this,"a",{value:7}).a}})).a}))?function(e,t,n){var r=Z(z,t);r&&delete z[t],$(e,t,n),r&&e!==z&&$(z,t,r)}:$,oe=function(e,t){var n=J[e]=g(W);return H(n,{type:B,tag:e,description:t}),c||(n.description=t),n},ie=function(e,t,n){e===z&&ie(ee,t,n),d(e);var r=y(t);return d(n),f(J,r)?(n.enumerable?(f(e,U)&&e[U][r]&&(e[U][r]=!1),n=g(n,{enumerable:v(0,!1)})):(f(e,U)||$(e,U,v(1,{})),e[U][r]=!0),re(e,r,n)):$(e,r,n)},ae=function(e,t){d(e);var n=h(t),r=b(n).concat(le(n));return F(r,(function(t){c&&!i(ue,n,t)||ie(e,t,n[t])})),e},ue=function(e){var t=y(e),n=i(Q,this,t);return!(this===z&&f(J,t)&&!f(ee,t))&&(!(n||!f(this,t)||!f(J,t)||f(this,U)&&this[U][t])||n)},ce=function(e,t){var n=h(e),r=y(t);if(n!==z||!f(J,r)||f(ee,r)){var o=Z(n,r);return!o||!f(J,r)||f(n,U)&&n[U][r]||(o.enumerable=!0),o}},se=function(e){var t=K(h(e)),n=[];return F(t,(function(e){f(J,e)||f(T,e)||X(n,e)})),n},le=function(e){var t=e===z,n=K(t?ee:h(e)),r=[];return F(n,(function(e){!f(J,e)||t&&!f(z,e)||X(r,J[e])})),r};s||(P(W=(G=function(){if(p(W,this))throw V("Symbol is not a constructor");var e=arguments.length&&void 0!==arguments[0]?m(arguments[0]):void 0,t=R(e),n=function(e){this===z&&i(n,ee,e),f(this,U)&&f(this[U],t)&&(this[U][t]=!1),re(this,t,v(1,e))};return c&&ne&&re(z,t,{configurable:!0,set:n}),oe(t,e)}).prototype,"toString",(function(){return q(this).tag})),P(G,"withoutSetter",(function(e){return oe(R(e),e)})),j.f=ue,x.f=ie,S.f=ae,_.f=ce,w.f=O.f=se,E.f=le,A.f=function(e){return oe(C(e),e)},c&&($(W,"description",{configurable:!0,get:function(){return q(this).description}}),u||P(z,"propertyIsEnumerable",ue,{unsafe:!0}))),r({global:!0,constructor:!0,wrap:!0,forced:!s,sham:!s},{Symbol:G}),F(b(te),(function(e){N(e)})),r({target:B,stat:!0,forced:!s},{useSetter:function(){ne=!0},useSimple:function(){ne=!1}}),r({target:"Object",stat:!0,forced:!s,sham:!c},{create:function(e,t){return void 0===t?g(e):ae(g(e),t)},defineProperty:ie,defineProperties:ae,getOwnPropertyDescriptor:ce}),r({target:"Object",stat:!0,forced:!s},{getOwnPropertyNames:se}),L(),D(G,B),T[U]=!0},38957:(e,t,n)=>{"use strict";var r=n(4209),o=n(8370),i=n(68348),a=n(50295),u=n(35920),c=n(83907),s=n(18142),l=n(43974),f=n(60342).f,p=n(37349),d=i.Symbol,h=d&&d.prototype;if(o&&c(d)&&(!("description"in h)||void 0!==d().description)){var y={},m=function(){var e=arguments.length<1||void 0===arguments[0]?void 0:l(arguments[0]),t=s(h,this)?new d(e):void 0===e?d():d(e);return""===e&&(y[t]=!0),t};p(m,d),m.prototype=h,h.constructor=m;var v="Symbol(test)"==String(d("test")),g=a(h.toString),b=a(h.valueOf),w=/^Symbol\((.*)\)[^)]+$/,O=a("".replace),E=a("".slice);f(h,"description",{configurable:!0,get:function(){var e=b(this),t=g(e);if(u(y,e))return"";var n=v?E(t,7,-1):O(t,w,"$1");return""===n?void 0:n}}),r({global:!0,constructor:!0,forced:!0},{Symbol:m})}},48959:(e,t,n)=>{var r=n(4209),o=n(38161),i=n(35920),a=n(43974),u=n(54365),c=n(75698),s=u("string-to-symbol-registry"),l=u("symbol-to-string-registry");r({target:"Symbol",stat:!0,forced:!c},{for:function(e){var t=a(e);if(i(s,t))return s[t];var n=o("Symbol")(t);return s[t]=n,l[n]=t,n}})},51913:(e,t,n)=>{n(87251)("iterator")},79249:(e,t,n)=>{n(29283),n(48959),n(6935),n(80763),n(18412)},6935:(e,t,n)=>{var r=n(4209),o=n(35920),i=n(33758),a=n(89075),u=n(54365),c=n(75698),s=u("symbol-to-string-registry");r({target:"Symbol",stat:!0,forced:!c},{keyFor:function(e){if(!i(e))throw TypeError(a(e)+" is not a symbol");if(o(s,e))return s[e]}})},21094:(e,t,n)=>{var r=n(38161),o=n(87251),i=n(14036);o("toStringTag"),i(r("Symbol"),"Symbol")},9536:(e,t,n)=>{var r=n(68348),o=n(6917),i=n(4152),a=n(66469),u=n(54652),c=function(e){if(e&&e.forEach!==a)try{u(e,"forEach",a)}catch(t){e.forEach=a}};for(var s in o)o[s]&&c(r[s]&&r[s].prototype);c(i)},53689:(e,t,n)=>{var r=n(68348),o=n(6917),i=n(4152),a=n(87758),u=n(54652),c=n(2905),s=c("iterator"),l=c("toStringTag"),f=a.values,p=function(e,t){if(e){if(e[s]!==f)try{u(e,s,f)}catch(t){e[s]=f}if(e[l]||u(e,l,t),o[t])for(var n in a)if(e[n]!==a[n])try{u(e,n,a[n])}catch(t){e[n]=a[n]}}};for(var d in o)p(r[d]&&r[d].prototype,d);p(i,"DOMTokenList")},59694:(e,t,n)=>{var r=n(4209),o=n(68348),i=n(65387).setInterval;r({global:!0,bind:!0,forced:o.setInterval!==i},{setInterval:i})},14187:(e,t,n)=>{var r=n(4209),o=n(68348),i=n(65387).setTimeout;r({global:!0,bind:!0,forced:o.setTimeout!==i},{setTimeout:i})},99385:(e,t,n)=>{n(59694),n(14187)},12569:(e,t,n)=>{"use strict";var r=n(23205);function o(){this._key="chai/deep-eql__"+Math.random()+Date.now()}o.prototype={get:function(e){return e[this._key]},set:function(e,t){Object.isExtensible(e)&&Object.defineProperty(e,this._key,{value:t,configurable:!0})}};var i="function"==typeof WeakMap?WeakMap:o;function a(e,t,n){if(!n||g(e)||g(t))return null;var r=n.get(e);if(r){var o=r.get(t);if("boolean"==typeof o)return o}return null}function u(e,t,n,r){if(n&&!g(e)&&!g(t)){var o=n.get(e);o?o.set(t,r):((o=new i).set(t,r),n.set(e,o))}}function c(e,t,n){if(n&&n.comparator)return l(e,t,n);var r=s(e,t);return null!==r?r:l(e,t,n)}function s(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t||!g(e)&&!g(t)&&null}function l(e,t,n){(n=n||{}).memoize=!1!==n.memoize&&(n.memoize||new i);var o=n&&n.comparator,l=a(e,t,n.memoize);if(null!==l)return l;var g=a(t,e,n.memoize);if(null!==g)return g;if(o){var b=o(e,t);if(!1===b||!0===b)return u(e,t,n.memoize,b),b;var w=s(e,t);if(null!==w)return w}var O=r(e);if(O!==r(t))return u(e,t,n.memoize,!1),!1;u(e,t,n.memoize,!0);var E=function(e,t,n,r){switch(n){case"String":case"Number":case"Boolean":case"Date":return c(e.valueOf(),t.valueOf());case"Promise":case"Symbol":case"function":case"WeakMap":case"WeakSet":return e===t;case"Error":return v(e,t,["name","message","code"],r);case"Arguments":case"Int8Array":case"Uint8Array":case"Uint8ClampedArray":case"Int16Array":case"Uint16Array":case"Int32Array":case"Uint32Array":case"Float32Array":case"Float64Array":case"Array":return p(e,t,r);case"RegExp":return function(e,t){return e.toString()===t.toString()}(e,t);case"Generator":return function(e,t,n){return p(h(e),h(t),n)}(e,t,r);case"DataView":return p(new Uint8Array(e.buffer),new Uint8Array(t.buffer),r);case"ArrayBuffer":return p(new Uint8Array(e),new Uint8Array(t),r);case"Set":case"Map":return f(e,t,r);default:return function(e,t,n){var r=y(e),o=y(t),i=m(e),a=m(t);i&&(r=r.concat(i));a&&(o=o.concat(a));if(r.length&&r.length===o.length)return r.sort(),o.sort(),!1!==p(r,o)&&v(e,t,r,n);var u=d(e),c=d(t);if(u.length&&u.length===c.length)return u.sort(),c.sort(),p(u,c,n);if(0===r.length&&0===u.length&&0===o.length&&0===c.length)return!0;return!1}(e,t,r)}}(e,t,O,n);return u(e,t,n.memoize,E),E}function f(e,t,n){if(e.size!==t.size)return!1;if(0===e.size)return!0;var r=[],o=[];return e.forEach((function(e,t){r.push([e,t])})),t.forEach((function(e,t){o.push([e,t])})),p(r.sort(),o.sort(),n)}function p(e,t,n){var r=e.length;if(r!==t.length)return!1;if(0===r)return!0;for(var o=-1;++o<r;)if(!1===c(e[o],t[o],n))return!1;return!0}function d(e){if(function(e){return"undefined"!=typeof Symbol&&"object"==typeof e&&void 0!==Symbol.iterator&&"function"==typeof e[Symbol.iterator]}(e))try{return h(e[Symbol.iterator]())}catch(e){return[]}return[]}function h(e){for(var t=e.next(),n=[t.value];!1===t.done;)t=e.next(),n.push(t.value);return n}function y(e){var t=[];for(var n in e)t.push(n);return t}function m(e){return Object.getOwnPropertySymbols(e)}function v(e,t,n,r){var o=n.length;if(0===o)return!0;for(var i=0;i<o;i+=1)if(!1===c(e[n[i]],t[n[i]],r))return!1;return!0}function g(e){return null===e||"object"!=typeof e}e.exports=c,e.exports.MemoizeMap=i},49394:function(e,t,n){e.exports=function(){"use strict";var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:"undefined"!=typeof self?self:{};function t(e,t){return e(t={exports:{}},t.exports),t.exports}var r=t((function(t,n){!function(e,n){t.exports=n()}(0,(function(){var t="function"==typeof Promise,n="object"==typeof self?self:e,r="undefined"!=typeof Symbol,o="undefined"!=typeof Map,i="undefined"!=typeof Set,a="undefined"!=typeof WeakMap,u="undefined"!=typeof WeakSet,c="undefined"!=typeof DataView,s=r&&void 0!==Symbol.iterator,l=r&&void 0!==Symbol.toStringTag,f=i&&"function"==typeof Set.prototype.entries,p=o&&"function"==typeof Map.prototype.entries,d=f&&Object.getPrototypeOf((new Set).entries()),h=p&&Object.getPrototypeOf((new Map).entries()),y=s&&"function"==typeof Array.prototype[Symbol.iterator],m=y&&Object.getPrototypeOf([][Symbol.iterator]()),v=s&&"function"==typeof String.prototype[Symbol.iterator],g=v&&Object.getPrototypeOf(""[Symbol.iterator]()),b=8,w=-1;function O(e){var r=typeof e;if("object"!==r)return r;if(null===e)return"null";if(e===n)return"global";if(Array.isArray(e)&&(!1===l||!(Symbol.toStringTag in e)))return"Array";if("object"==typeof window&&null!==window){if("object"==typeof window.location&&e===window.location)return"Location";if("object"==typeof window.document&&e===window.document)return"Document";if("object"==typeof window.navigator){if("object"==typeof window.navigator.mimeTypes&&e===window.navigator.mimeTypes)return"MimeTypeArray";if("object"==typeof window.navigator.plugins&&e===window.navigator.plugins)return"PluginArray"}if(("function"==typeof window.HTMLElement||"object"==typeof window.HTMLElement)&&e instanceof window.HTMLElement){if("BLOCKQUOTE"===e.tagName)return"HTMLQuoteElement";if("TD"===e.tagName)return"HTMLTableDataCellElement";if("TH"===e.tagName)return"HTMLTableHeaderCellElement"}}var s=l&&e[Symbol.toStringTag];if("string"==typeof s)return s;var f=Object.getPrototypeOf(e);return f===RegExp.prototype?"RegExp":f===Date.prototype?"Date":t&&f===Promise.prototype?"Promise":i&&f===Set.prototype?"Set":o&&f===Map.prototype?"Map":u&&f===WeakSet.prototype?"WeakSet":a&&f===WeakMap.prototype?"WeakMap":c&&f===DataView.prototype?"DataView":o&&f===h?"Map Iterator":i&&f===d?"Set Iterator":y&&f===m?"Array Iterator":v&&f===g?"String Iterator":null===f?"Object":Object.prototype.toString.call(e).slice(b,w)}return O}))}));const o="undefined"!=typeof Buffer,i=o&&void 0!==Buffer.from,a=o?function(e){return Buffer.isBuffer(e)}:function(){return!1},u=i?function(e){return Buffer.from(e)}:o?function(e){return new Buffer(e)}:function(e){return e};function c(e){return a(e)?"Buffer":r(e)}const s=new Set(["Arguments","Array","Map","Object","Set"]);function l(e,t,n=null){switch(n||c(e)){case"Arguments":case"Array":case"Object":return e[t];case"Map":return e.get(t);case"Set":return t}}function f(e){return s.has(e)}function p(e,t,n,r=null){switch(r||c(e)){case"Arguments":case"Array":case"Object":e[t]=n;break;case"Map":e.set(t,n);break;case"Set":e.add(n)}return e}const d="undefined"!=typeof globalThis&&null!==globalThis&&globalThis.Object===Object&&globalThis,h=void 0!==n.g&&null!==n.g&&n.g.Object===Object&&n.g,y="undefined"!=typeof self&&null!==self&&self.Object===Object&&self,m=d||h||y||Function("return this")();function v(e){return e.slice(0)}function g(e){return new Boolean(e.valueOf())}function b(e){return new DataView(e.buffer)}function w(e){return u(e)}function O(e){return new Date(e.getTime())}function E(e){return new Number(e)}function _(e){return new RegExp(e.source,e.flags)}function x(e){return new String(e)}function S(e,t){return m[t].from?m[t].from(e):new m[t](e)}function j(e){return e}function P(){return[]}function k(){return new Map}function I(){return{}}function T(){return new Set}var R=new Map([["ArrayBuffer",v],["Boolean",g],["Buffer",w],["DataView",b],["Date",O],["Number",E],["RegExp",_],["String",x],["Float32Array",S],["Float64Array",S],["Int16Array",S],["Int32Array",S],["Int8Array",S],["Uint16Array",S],["Uint32Array",S],["Uint8Array",S],["Uint8ClampedArray",S],["Array Iterator",j],["Map Iterator",j],["Promise",j],["Set Iterator",j],["String Iterator",j],["function",j],["global",j],["WeakMap",j],["WeakSet",j],["boolean",j],["null",j],["number",j],["string",j],["symbol",j],["undefined",j],["Arguments",P],["Array",P],["Map",k],["Object",I],["Set",T]]);function C(){}function A(e,t=null,n=C){2===arguments.length&&"function"==typeof t&&(n=t,t=null);const r=t||c(e),o=R.get(r);if("Object"===r){const t=n(e,r);if(void 0!==t)return t}return o?o(e,r):e}function N(e,t={}){"function"==typeof t&&(t={customizer:t});const{customizer:n}=t,r=c(e);if(!f(r))return L(e,null,null,null);const o=A(e,r,n);return L(e,o,new WeakMap([[e,o]]),new WeakSet([e]))}function L(e,t,n,r,o){const i=c(e),a=A(e,i);if(!f(i))return a;let u;switch(i){case"Arguments":case"Array":u=Object.keys(e);break;case"Object":u=Object.keys(e),u.push(...Object.getOwnPropertySymbols(e));break;case"Map":case"Set":u=e.keys()}for(let o of u){const a=l(e,o,i);if(r.has(a))p(t,o,n.get(a),i);else{const e=c(a),u=A(a,e);f(e)&&(n.set(a,u),r.add(a)),p(t,o,L(a,u,n,r),i)}}return t}return N}()},44683:function(e){e.exports=function(){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(t)}function t(e,n){return(t=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,n)}function n(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}function r(e,o,i){return(r=n()?Reflect.construct:function(e,n,r){var o=[null];o.push.apply(o,n);var i=new(Function.bind.apply(e,o));return r&&t(i,r.prototype),i}).apply(null,arguments)}function o(e){return i(e)||a(e)||u(e)||s()}function i(e){if(Array.isArray(e))return c(e)}function a(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}function u(e,t){if(e){if("string"==typeof e)return c(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?c(e,t):void 0}}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function s(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var l=Object.hasOwnProperty,f=Object.setPrototypeOf,p=Object.isFrozen,d=Object.getPrototypeOf,h=Object.getOwnPropertyDescriptor,y=Object.freeze,m=Object.seal,v=Object.create,g="undefined"!=typeof Reflect&&Reflect,b=g.apply,w=g.construct;b||(b=function(e,t,n){return e.apply(t,n)}),y||(y=function(e){return e}),m||(m=function(e){return e}),w||(w=function(e,t){return r(e,o(t))});var O=R(Array.prototype.forEach),E=R(Array.prototype.pop),_=R(Array.prototype.push),x=R(String.prototype.toLowerCase),S=R(String.prototype.match),j=R(String.prototype.replace),P=R(String.prototype.indexOf),k=R(String.prototype.trim),I=R(RegExp.prototype.test),T=C(TypeError);function R(e){return function(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];return b(e,t,r)}}function C(e){return function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return w(e,n)}}function A(e,t){f&&f(e,null);for(var n=t.length;n--;){var r=t[n];if("string"==typeof r){var o=x(r);o!==r&&(p(t)||(t[n]=o),r=o)}e[r]=!0}return e}function N(e){var t,n=v(null);for(t in e)b(l,e,[t])&&(n[t]=e[t]);return n}function L(e,t){for(;null!==e;){var n=h(e,t);if(n){if(n.get)return R(n.get);if("function"==typeof n.value)return R(n.value)}e=d(e)}function r(e){return null}return r}var D=y(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),M=y(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),F=y(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),U=y(["animate","color-profile","cursor","discard","fedropshadow","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),B=y(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover"]),H=y(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),q=y(["#text"]),z=y(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","xmlns","slot"]),G=y(["accent-height","accumulate","additive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),W=y(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),V=y(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),Y=m(/\{\{[\w\W]*|[\w\W]*\}\}/gm),Z=m(/<%[\w\W]*|[\w\W]*%>/gm),$=m(/^data-[\-\w.\u00B7-\uFFFF]/),K=m(/^aria-[\-\w]+$/),Q=m(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),X=m(/^(?:\w+script|data):/i),J=m(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),ee=m(/^html$/i),te=function(){return"undefined"==typeof window?null:window},ne=function(t,n){if("object"!==e(t)||"function"!=typeof t.createPolicy)return null;var r=null,o="data-tt-policy-suffix";n.currentScript&&n.currentScript.hasAttribute(o)&&(r=n.currentScript.getAttribute(o));var i="dompurify"+(r?"#"+r:"");try{return t.createPolicy(i,{createHTML:function(e){return e}})}catch(e){return null}};function re(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:te(),n=function(e){return re(e)};if(n.version="2.3.8",n.removed=[],!t||!t.document||9!==t.document.nodeType)return n.isSupported=!1,n;var r=t.document,i=t.document,a=t.DocumentFragment,u=t.HTMLTemplateElement,c=t.Node,s=t.Element,l=t.NodeFilter,f=t.NamedNodeMap,p=void 0===f?t.NamedNodeMap||t.MozNamedAttrMap:f,d=t.HTMLFormElement,h=t.DOMParser,m=t.trustedTypes,v=s.prototype,g=L(v,"cloneNode"),b=L(v,"nextSibling"),w=L(v,"childNodes"),R=L(v,"parentNode");if("function"==typeof u){var C=i.createElement("template");C.content&&C.content.ownerDocument&&(i=C.content.ownerDocument)}var oe=ne(m,r),ie=oe?oe.createHTML(""):"",ae=i,ue=ae.implementation,ce=ae.createNodeIterator,se=ae.createDocumentFragment,le=ae.getElementsByTagName,fe=r.importNode,pe={};try{pe=N(i).documentMode?i.documentMode:{}}catch(e){}var de={};n.isSupported="function"==typeof R&&ue&&void 0!==ue.createHTMLDocument&&9!==pe;var he,ye,me=Y,ve=Z,ge=$,be=K,we=X,Oe=J,Ee=Q,_e=null,xe=A({},[].concat(o(D),o(M),o(F),o(B),o(q))),Se=null,je=A({},[].concat(o(z),o(G),o(W),o(V))),Pe=Object.seal(Object.create(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),ke=null,Ie=null,Te=!0,Re=!0,Ce=!1,Ae=!1,Ne=!1,Le=!1,De=!1,Me=!1,Fe=!1,Ue=!1,Be=!0,He=!0,qe=!1,ze={},Ge=null,We=A({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),Ve=null,Ye=A({},["audio","video","img","source","image","track"]),Ze=null,$e=A({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Ke="http://www.w3.org/1998/Math/MathML",Qe="http://www.w3.org/2000/svg",Xe="http://www.w3.org/1999/xhtml",Je=Xe,et=!1,tt=["application/xhtml+xml","text/html"],nt="text/html",rt=null,ot=i.createElement("form"),it=function(e){return e instanceof RegExp||e instanceof Function},at=function(t){rt&&rt===t||(t&&"object"===e(t)||(t={}),t=N(t),_e="ALLOWED_TAGS"in t?A({},t.ALLOWED_TAGS):xe,Se="ALLOWED_ATTR"in t?A({},t.ALLOWED_ATTR):je,Ze="ADD_URI_SAFE_ATTR"in t?A(N($e),t.ADD_URI_SAFE_ATTR):$e,Ve="ADD_DATA_URI_TAGS"in t?A(N(Ye),t.ADD_DATA_URI_TAGS):Ye,Ge="FORBID_CONTENTS"in t?A({},t.FORBID_CONTENTS):We,ke="FORBID_TAGS"in t?A({},t.FORBID_TAGS):{},Ie="FORBID_ATTR"in t?A({},t.FORBID_ATTR):{},ze="USE_PROFILES"in t&&t.USE_PROFILES,Te=!1!==t.ALLOW_ARIA_ATTR,Re=!1!==t.ALLOW_DATA_ATTR,Ce=t.ALLOW_UNKNOWN_PROTOCOLS||!1,Ae=t.SAFE_FOR_TEMPLATES||!1,Ne=t.WHOLE_DOCUMENT||!1,Me=t.RETURN_DOM||!1,Fe=t.RETURN_DOM_FRAGMENT||!1,Ue=t.RETURN_TRUSTED_TYPE||!1,De=t.FORCE_BODY||!1,Be=!1!==t.SANITIZE_DOM,He=!1!==t.KEEP_CONTENT,qe=t.IN_PLACE||!1,Ee=t.ALLOWED_URI_REGEXP||Ee,Je=t.NAMESPACE||Xe,t.CUSTOM_ELEMENT_HANDLING&&it(t.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(Pe.tagNameCheck=t.CUSTOM_ELEMENT_HANDLING.tagNameCheck),t.CUSTOM_ELEMENT_HANDLING&&it(t.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(Pe.attributeNameCheck=t.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),t.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof t.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(Pe.allowCustomizedBuiltInElements=t.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),he=he=-1===tt.indexOf(t.PARSER_MEDIA_TYPE)?nt:t.PARSER_MEDIA_TYPE,ye="application/xhtml+xml"===he?function(e){return e}:x,Ae&&(Re=!1),Fe&&(Me=!0),ze&&(_e=A({},o(q)),Se=[],!0===ze.html&&(A(_e,D),A(Se,z)),!0===ze.svg&&(A(_e,M),A(Se,G),A(Se,V)),!0===ze.svgFilters&&(A(_e,F),A(Se,G),A(Se,V)),!0===ze.mathMl&&(A(_e,B),A(Se,W),A(Se,V))),t.ADD_TAGS&&(_e===xe&&(_e=N(_e)),A(_e,t.ADD_TAGS)),t.ADD_ATTR&&(Se===je&&(Se=N(Se)),A(Se,t.ADD_ATTR)),t.ADD_URI_SAFE_ATTR&&A(Ze,t.ADD_URI_SAFE_ATTR),t.FORBID_CONTENTS&&(Ge===We&&(Ge=N(Ge)),A(Ge,t.FORBID_CONTENTS)),He&&(_e["#text"]=!0),Ne&&A(_e,["html","head","body"]),_e.table&&(A(_e,["tbody"]),delete ke.tbody),y&&y(t),rt=t)},ut=A({},["mi","mo","mn","ms","mtext"]),ct=A({},["foreignobject","desc","title","annotation-xml"]),st=A({},["title","style","font","a","script"]),lt=A({},M);A(lt,F),A(lt,U);var ft=A({},B);A(ft,H);var pt=function(e){var t=R(e);t&&t.tagName||(t={namespaceURI:Xe,tagName:"template"});var n=x(e.tagName),r=x(t.tagName);return e.namespaceURI===Qe?t.namespaceURI===Xe?"svg"===n:t.namespaceURI===Ke?"svg"===n&&("annotation-xml"===r||ut[r]):Boolean(lt[n]):e.namespaceURI===Ke?t.namespaceURI===Xe?"math"===n:t.namespaceURI===Qe?"math"===n&&ct[r]:Boolean(ft[n]):e.namespaceURI===Xe&&!(t.namespaceURI===Qe&&!ct[r])&&!(t.namespaceURI===Ke&&!ut[r])&&!ft[n]&&(st[n]||!lt[n])},dt=function(e){_(n.removed,{element:e});try{e.parentNode.removeChild(e)}catch(t){try{e.outerHTML=ie}catch(t){e.remove()}}},ht=function(e,t){try{_(n.removed,{attribute:t.getAttributeNode(e),from:t})}catch(e){_(n.removed,{attribute:null,from:t})}if(t.removeAttribute(e),"is"===e&&!Se[e])if(Me||Fe)try{dt(t)}catch(e){}else try{t.setAttribute(e,"")}catch(e){}},yt=function(e){var t,n;if(De)e="<remove></remove>"+e;else{var r=S(e,/^[\r\n\t ]+/);n=r&&r[0]}"application/xhtml+xml"===he&&(e='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+e+"</body></html>");var o=oe?oe.createHTML(e):e;if(Je===Xe)try{t=(new h).parseFromString(o,he)}catch(e){}if(!t||!t.documentElement){t=ue.createDocument(Je,"template",null);try{t.documentElement.innerHTML=et?"":o}catch(e){}}var a=t.body||t.documentElement;return e&&n&&a.insertBefore(i.createTextNode(n),a.childNodes[0]||null),Je===Xe?le.call(t,Ne?"html":"body")[0]:Ne?t.documentElement:a},mt=function(e){return ce.call(e.ownerDocument||e,e,l.SHOW_ELEMENT|l.SHOW_COMMENT|l.SHOW_TEXT,null,!1)},vt=function(e){return e instanceof d&&("string"!=typeof e.nodeName||"string"!=typeof e.textContent||"function"!=typeof e.removeChild||!(e.attributes instanceof p)||"function"!=typeof e.removeAttribute||"function"!=typeof e.setAttribute||"string"!=typeof e.namespaceURI||"function"!=typeof e.insertBefore)},gt=function(t){return"object"===e(c)?t instanceof c:t&&"object"===e(t)&&"number"==typeof t.nodeType&&"string"==typeof t.nodeName},bt=function(e,t,r){de[e]&&O(de[e],(function(e){e.call(n,t,r,rt)}))},wt=function(e){var t;if(bt("beforeSanitizeElements",e,null),vt(e))return dt(e),!0;if(I(/[\u0080-\uFFFF]/,e.nodeName))return dt(e),!0;var r=ye(e.nodeName);if(bt("uponSanitizeElement",e,{tagName:r,allowedTags:_e}),e.hasChildNodes()&&!gt(e.firstElementChild)&&(!gt(e.content)||!gt(e.content.firstElementChild))&&I(/<[/\w]/g,e.innerHTML)&&I(/<[/\w]/g,e.textContent))return dt(e),!0;if("select"===r&&I(/<template/i,e.innerHTML))return dt(e),!0;if(!_e[r]||ke[r]){if(!ke[r]&&Et(r)){if(Pe.tagNameCheck instanceof RegExp&&I(Pe.tagNameCheck,r))return!1;if(Pe.tagNameCheck instanceof Function&&Pe.tagNameCheck(r))return!1}if(He&&!Ge[r]){var o=R(e)||e.parentNode,i=w(e)||e.childNodes;if(i&&o)for(var a=i.length-1;a>=0;--a)o.insertBefore(g(i[a],!0),b(e))}return dt(e),!0}return e instanceof s&&!pt(e)?(dt(e),!0):"noscript"!==r&&"noembed"!==r||!I(/<\/no(script|embed)/i,e.innerHTML)?(Ae&&3===e.nodeType&&(t=e.textContent,t=j(t,me," "),t=j(t,ve," "),e.textContent!==t&&(_(n.removed,{element:e.cloneNode()}),e.textContent=t)),bt("afterSanitizeElements",e,null),!1):(dt(e),!0)},Ot=function(e,t,n){if(Be&&("id"===t||"name"===t)&&(n in i||n in ot))return!1;if(Re&&!Ie[t]&&I(ge,t));else if(Te&&I(be,t));else if(!Se[t]||Ie[t]){if(!(Et(e)&&(Pe.tagNameCheck instanceof RegExp&&I(Pe.tagNameCheck,e)||Pe.tagNameCheck instanceof Function&&Pe.tagNameCheck(e))&&(Pe.attributeNameCheck instanceof RegExp&&I(Pe.attributeNameCheck,t)||Pe.attributeNameCheck instanceof Function&&Pe.attributeNameCheck(t))||"is"===t&&Pe.allowCustomizedBuiltInElements&&(Pe.tagNameCheck instanceof RegExp&&I(Pe.tagNameCheck,n)||Pe.tagNameCheck instanceof Function&&Pe.tagNameCheck(n))))return!1}else if(Ze[t]);else if(I(Ee,j(n,Oe,"")));else if("src"!==t&&"xlink:href"!==t&&"href"!==t||"script"===e||0!==P(n,"data:")||!Ve[e])if(Ce&&!I(we,j(n,Oe,"")));else if(n)return!1;return!0},Et=function(e){return e.indexOf("-")>0},_t=function(e){var t,r,o,i;bt("beforeSanitizeAttributes",e,null);var a=e.attributes;if(a){var u={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:Se};for(i=a.length;i--;){var c=t=a[i],s=c.name,l=c.namespaceURI;if(r="value"===s?t.value:k(t.value),o=ye(s),u.attrName=o,u.attrValue=r,u.keepAttr=!0,u.forceKeepAttr=void 0,bt("uponSanitizeAttribute",e,u),r=u.attrValue,!u.forceKeepAttr&&(ht(s,e),u.keepAttr))if(I(/\/>/i,r))ht(s,e);else{Ae&&(r=j(r,me," "),r=j(r,ve," "));var f=ye(e.nodeName);if(Ot(f,o,r))try{l?e.setAttributeNS(l,s,r):e.setAttribute(s,r),E(n.removed)}catch(e){}}}bt("afterSanitizeAttributes",e,null)}},xt=function e(t){var n,r=mt(t);for(bt("beforeSanitizeShadowDOM",t,null);n=r.nextNode();)bt("uponSanitizeShadowNode",n,null),wt(n)||(n.content instanceof a&&e(n.content),_t(n));bt("afterSanitizeShadowDOM",t,null)};return n.sanitize=function(o,i){var u,s,l,f,p;if((et=!o)&&(o="\x3c!--\x3e"),"string"!=typeof o&&!gt(o)){if("function"!=typeof o.toString)throw T("toString is not a function");if("string"!=typeof(o=o.toString()))throw T("dirty is not a string, aborting")}if(!n.isSupported){if("object"===e(t.toStaticHTML)||"function"==typeof t.toStaticHTML){if("string"==typeof o)return t.toStaticHTML(o);if(gt(o))return t.toStaticHTML(o.outerHTML)}return o}if(Le||at(i),n.removed=[],"string"==typeof o&&(qe=!1),qe){if(o.nodeName){var d=ye(o.nodeName);if(!_e[d]||ke[d])throw T("root node is forbidden and cannot be sanitized in-place")}}else if(o instanceof c)1===(s=(u=yt("\x3c!----\x3e")).ownerDocument.importNode(o,!0)).nodeType&&"BODY"===s.nodeName||"HTML"===s.nodeName?u=s:u.appendChild(s);else{if(!Me&&!Ae&&!Ne&&-1===o.indexOf("<"))return oe&&Ue?oe.createHTML(o):o;if(!(u=yt(o)))return Me?null:Ue?ie:""}u&&De&&dt(u.firstChild);for(var h=mt(qe?o:u);l=h.nextNode();)3===l.nodeType&&l===f||wt(l)||(l.content instanceof a&&xt(l.content),_t(l),f=l);if(f=null,qe)return o;if(Me){if(Fe)for(p=se.call(u.ownerDocument);u.firstChild;)p.appendChild(u.firstChild);else p=u;return Se.shadowroot&&(p=fe.call(r,p,!0)),p}var y=Ne?u.outerHTML:u.innerHTML;return Ne&&_e["!doctype"]&&u.ownerDocument&&u.ownerDocument.doctype&&u.ownerDocument.doctype.name&&I(ee,u.ownerDocument.doctype.name)&&(y="<!DOCTYPE "+u.ownerDocument.doctype.name+">\n"+y),Ae&&(y=j(y,me," "),y=j(y,ve," ")),oe&&Ue?oe.createHTML(y):y},n.setConfig=function(e){at(e),Le=!0},n.clearConfig=function(){rt=null,Le=!1},n.isValidAttribute=function(e,t,n){rt||at({});var r=ye(e),o=ye(t);return Ot(r,o,n)},n.addHook=function(e,t){"function"==typeof t&&(de[e]=de[e]||[],_(de[e],t))},n.removeHook=function(e){if(de[e])return E(de[e])},n.removeHooks=function(e){de[e]&&(de[e]=[])},n.removeAllHooks=function(){de={}},n}return re()}()},97925:e=>{e.exports={middleware:function(e,t,n){throw new Error("`middleware` cannot be called from the browser code.")},get:function(){return null},set:function(e,t){},ns:null}},67683:function(e){e.exports=function(){"use strict";var e=/^(b|B)$/,t={iec:{bits:["bit","Kibit","Mibit","Gibit","Tibit","Pibit","Eibit","Zibit","Yibit"],bytes:["B","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"]},jedec:{bits:["bit","Kbit","Mbit","Gbit","Tbit","Pbit","Ebit","Zbit","Ybit"],bytes:["B","KB","MB","GB","TB","PB","EB","ZB","YB"]}},n={iec:["","kibi","mebi","gibi","tebi","pebi","exbi","zebi","yobi"],jedec:["","kilo","mega","giga","tera","peta","exa","zetta","yotta"]},r={floor:Math.floor,ceil:Math.ceil};function o(o){var i,a,u,c,s,l,f,p,d,h,y,m,v,g,b,w,O,E,_,x,S,j=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},P=[],k=0;if(isNaN(o))throw new TypeError("Invalid number");if(u=!0===j.bits,b=!0===j.unix,m=!0===j.pad,a=j.base||10,v=void 0!==j.round?j.round:b?1:2,f=void 0!==j.locale?j.locale:"",p=j.localeOptions||{},w=void 0!==j.separator?j.separator:"",O=void 0!==j.spacer?j.spacer:b?"":" ",_=j.symbols||{},E=2===a?j.standard||"iec":"jedec",y=j.output||"string",s=!0===j.fullform,l=j.fullforms instanceof Array?j.fullforms:[],i=void 0!==j.exponent?j.exponent:-1,x=r[j.roundingMethod]||Math.round,d=(h=Number(o))<0,c=a>2?1e3:1024,S=!1===isNaN(j.precision)?parseInt(j.precision,10):0,d&&(h=-h),(-1===i||isNaN(i))&&(i=Math.floor(Math.log(h)/Math.log(c)))<0&&(i=0),i>8&&(S>0&&(S+=8-i),i=8),"exponent"===y)return i;if(0===h)P[0]=0,g=P[1]=b?"":t[E][u?"bits":"bytes"][i];else{k=h/(2===a?Math.pow(2,10*i):Math.pow(1e3,i)),u&&(k*=8)>=c&&i<8&&(k/=c,i++);var I=Math.pow(10,i>0?v:0);P[0]=x(k*I)/I,P[0]===c&&i<8&&void 0===j.exponent&&(P[0]=1,i++),g=P[1]=10===a&&1===i?u?"kbit":"kB":t[E][u?"bits":"bytes"][i],b&&(P[1]=P[1].charAt(0),e.test(P[1])&&(P[0]=Math.floor(P[0]),P[1]=""))}if(d&&(P[0]=-P[0]),S>0&&(P[0]=P[0].toPrecision(S)),P[1]=_[P[1]]||P[1],!0===f?P[0]=P[0].toLocaleString():f.length>0?P[0]=P[0].toLocaleString(f,p):w.length>0&&(P[0]=P[0].toString().replace(".",w)),m&&!1===Number.isInteger(P[0])&&v>0){var T=w||".",R=P[0].toString().split(T),C=R[1]||"",A=C.length,N=v-A;P[0]="".concat(R[0]).concat(T).concat(C.padEnd(A+N,"0"))}return s&&(P[1]=l[i]?l[i]:n[E][i]+(u?"bit":"byte")+(1===P[0]?"":"s")),"array"===y?P:"object"===y?{value:P[0],symbol:P[1],exponent:i,unit:g}:P.join(O)}return o.partial=function(e){return function(t){return o(t,e)}},o}()},21699:function(){!function(){"use strict";function e(e){var t=!0,n=!1,r=null,o={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,"datetime-local":!0};function i(e){return!!(e&&e!==document&&"HTML"!==e.nodeName&&"BODY"!==e.nodeName&&"classList"in e&&"contains"in e.classList)}function a(e){var t=e.type,n=e.tagName;return!("INPUT"!==n||!o[t]||e.readOnly)||"TEXTAREA"===n&&!e.readOnly||!!e.isContentEditable}function u(e){e.classList.contains("focus-visible")||(e.classList.add("focus-visible"),e.setAttribute("data-focus-visible-added",""))}function c(e){e.hasAttribute("data-focus-visible-added")&&(e.classList.remove("focus-visible"),e.removeAttribute("data-focus-visible-added"))}function s(n){n.metaKey||n.altKey||n.ctrlKey||(i(e.activeElement)&&u(e.activeElement),t=!0)}function l(e){t=!1}function f(e){i(e.target)&&(t||a(e.target))&&u(e.target)}function p(e){i(e.target)&&(e.target.classList.contains("focus-visible")||e.target.hasAttribute("data-focus-visible-added"))&&(n=!0,window.clearTimeout(r),r=window.setTimeout((function(){n=!1}),100),c(e.target))}function d(e){"hidden"===document.visibilityState&&(n&&(t=!0),h())}function h(){document.addEventListener("mousemove",m),document.addEventListener("mousedown",m),document.addEventListener("mouseup",m),document.addEventListener("pointermove",m),document.addEventListener("pointerdown",m),document.addEventListener("pointerup",m),document.addEventListener("touchmove",m),document.addEventListener("touchstart",m),document.addEventListener("touchend",m)}function y(){document.removeEventListener("mousemove",m),document.removeEventListener("mousedown",m),document.removeEventListener("mouseup",m),document.removeEventListener("pointermove",m),document.removeEventListener("pointerdown",m),document.removeEventListener("pointerup",m),document.removeEventListener("touchmove",m),document.removeEventListener("touchstart",m),document.removeEventListener("touchend",m)}function m(e){e.target.nodeName&&"html"===e.target.nodeName.toLowerCase()||(t=!1,y())}document.addEventListener("keydown",s,!0),document.addEventListener("mousedown",l,!0),document.addEventListener("pointerdown",l,!0),document.addEventListener("touchstart",l,!0),document.addEventListener("visibilitychange",d,!0),h(),e.addEventListener("focus",f,!0),e.addEventListener("blur",p,!0),e.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&e.host?e.host.setAttribute("data-js-focus-visible",""):e.nodeType===Node.DOCUMENT_NODE&&(document.documentElement.classList.add("js-focus-visible"),document.documentElement.setAttribute("data-js-focus-visible",""))}if("undefined"!=typeof window&&"undefined"!=typeof document){var t;window.applyFocusVisiblePolyfill=e;try{t=new CustomEvent("focus-visible-polyfill-ready")}catch(e){(t=document.createEvent("CustomEvent")).initCustomEvent("focus-visible-polyfill-ready",!1,!1,{})}window.dispatchEvent(t)}"undefined"!=typeof document&&e(document)}()},59757:e=>{"use strict";var t="Function.prototype.bind called on incompatible ",n=Array.prototype.slice,r=Object.prototype.toString,o="[object Function]";e.exports=function(e){var i=this;if("function"!=typeof i||r.call(i)!==o)throw new TypeError(t+i);for(var a,u=n.call(arguments,1),c=function(){if(this instanceof a){var t=i.apply(this,u.concat(n.call(arguments)));return Object(t)===t?t:this}return i.apply(e,u.concat(n.call(arguments)))},s=Math.max(0,i.length-u.length),l=[],f=0;f<s;f++)l.push("$"+f);if(a=Function("binder","return function ("+l.join(",")+"){ return binder.apply(this,arguments); }")(c),i.prototype){var p=function(){};p.prototype=i.prototype,a.prototype=new p,p.prototype=null}return a}},92502:(e,t,n)=>{"use strict";var r=n(59757);e.exports=Function.prototype.bind||r},13049:(e,t,n)=>{"use strict";var r,o=SyntaxError,i=Function,a=TypeError,u=function(e){try{return i('"use strict"; return ('+e+").constructor;")()}catch(e){}},c=Object.getOwnPropertyDescriptor;if(c)try{c({},"")}catch(e){c=null}var s=function(){throw new a},l=c?function(){try{return s}catch(e){try{return c(arguments,"callee").get}catch(e){return s}}}():s,f=n(14844)(),p=Object.getPrototypeOf||function(e){return e.__proto__},d={},h="undefined"==typeof Uint8Array?r:p(Uint8Array),y={"%AggregateError%":"undefined"==typeof AggregateError?r:AggregateError,"%Array%":Array,"%ArrayBuffer%":"undefined"==typeof ArrayBuffer?r:ArrayBuffer,"%ArrayIteratorPrototype%":f?p([][Symbol.iterator]()):r,"%AsyncFromSyncIteratorPrototype%":r,"%AsyncFunction%":d,"%AsyncGenerator%":d,"%AsyncGeneratorFunction%":d,"%AsyncIteratorPrototype%":d,"%Atomics%":"undefined"==typeof Atomics?r:Atomics,"%BigInt%":"undefined"==typeof BigInt?r:BigInt,"%Boolean%":Boolean,"%DataView%":"undefined"==typeof DataView?r:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":Error,"%eval%":eval,"%EvalError%":EvalError,"%Float32Array%":"undefined"==typeof Float32Array?r:Float32Array,"%Float64Array%":"undefined"==typeof Float64Array?r:Float64Array,"%FinalizationRegistry%":"undefined"==typeof FinalizationRegistry?r:FinalizationRegistry,"%Function%":i,"%GeneratorFunction%":d,"%Int8Array%":"undefined"==typeof Int8Array?r:Int8Array,"%Int16Array%":"undefined"==typeof Int16Array?r:Int16Array,"%Int32Array%":"undefined"==typeof Int32Array?r:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":f?p(p([][Symbol.iterator]())):r,"%JSON%":"object"==typeof JSON?JSON:r,"%Map%":"undefined"==typeof Map?r:Map,"%MapIteratorPrototype%":"undefined"!=typeof Map&&f?p((new Map)[Symbol.iterator]()):r,"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":"undefined"==typeof Promise?r:Promise,"%Proxy%":"undefined"==typeof Proxy?r:Proxy,"%RangeError%":RangeError,"%ReferenceError%":ReferenceError,"%Reflect%":"undefined"==typeof Reflect?r:Reflect,"%RegExp%":RegExp,"%Set%":"undefined"==typeof Set?r:Set,"%SetIteratorPrototype%":"undefined"!=typeof Set&&f?p((new Set)[Symbol.iterator]()):r,"%SharedArrayBuffer%":"undefined"==typeof SharedArrayBuffer?r:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":f?p(""[Symbol.iterator]()):r,"%Symbol%":f?Symbol:r,"%SyntaxError%":o,"%ThrowTypeError%":l,"%TypedArray%":h,"%TypeError%":a,"%Uint8Array%":"undefined"==typeof Uint8Array?r:Uint8Array,"%Uint8ClampedArray%":"undefined"==typeof Uint8ClampedArray?r:Uint8ClampedArray,"%Uint16Array%":"undefined"==typeof Uint16Array?r:Uint16Array,"%Uint32Array%":"undefined"==typeof Uint32Array?r:Uint32Array,"%URIError%":URIError,"%WeakMap%":"undefined"==typeof WeakMap?r:WeakMap,"%WeakRef%":"undefined"==typeof WeakRef?r:WeakRef,"%WeakSet%":"undefined"==typeof WeakSet?r:WeakSet},m=function e(t){var n;if("%AsyncFunction%"===t)n=u("async function () {}");else if("%GeneratorFunction%"===t)n=u("function* () {}");else if("%AsyncGeneratorFunction%"===t)n=u("async function* () {}");else if("%AsyncGenerator%"===t){var r=e("%AsyncGeneratorFunction%");r&&(n=r.prototype)}else if("%AsyncIteratorPrototype%"===t){var o=e("%AsyncGenerator%");o&&(n=p(o.prototype))}return y[t]=n,n},v={"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},g=n(92502),b=n(66670),w=g.call(Function.call,Array.prototype.concat),O=g.call(Function.apply,Array.prototype.splice),E=g.call(Function.call,String.prototype.replace),_=g.call(Function.call,String.prototype.slice),x=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,S=/\\(\\)?/g,j=function(e){var t=_(e,0,1),n=_(e,-1);if("%"===t&&"%"!==n)throw new o("invalid intrinsic syntax, expected closing `%`");if("%"===n&&"%"!==t)throw new o("invalid intrinsic syntax, expected opening `%`");var r=[];return E(e,x,(function(e,t,n,o){r[r.length]=n?E(o,S,"$1"):t||e})),r},P=function(e,t){var n,r=e;if(b(v,r)&&(r="%"+(n=v[r])[0]+"%"),b(y,r)){var i=y[r];if(i===d&&(i=m(r)),void 0===i&&!t)throw new a("intrinsic "+e+" exists, but is not available. Please file an issue!");return{alias:n,name:r,value:i}}throw new o("intrinsic "+e+" does not exist!")};e.exports=function(e,t){if("string"!=typeof e||0===e.length)throw new a("intrinsic name must be a non-empty string");if(arguments.length>1&&"boolean"!=typeof t)throw new a('"allowMissing" argument must be a boolean');var n=j(e),r=n.length>0?n[0]:"",i=P("%"+r+"%",t),u=i.name,s=i.value,l=!1,f=i.alias;f&&(r=f[0],O(n,w([0,1],f)));for(var p=1,d=!0;p<n.length;p+=1){var h=n[p],m=_(h,0,1),v=_(h,-1);if(('"'===m||"'"===m||"`"===m||'"'===v||"'"===v||"`"===v)&&m!==v)throw new o("property names with quotes must have matching quotes");if("constructor"!==h&&d||(l=!0),b(y,u="%"+(r+="."+h)+"%"))s=y[u];else if(null!=s){if(!(h in s)){if(!t)throw new a("base intrinsic for "+e+" exists, but the property is not available.");return}if(c&&p+1>=n.length){var g=c(s,h);s=(d=!!g)&&"get"in g&&!("originalValue"in g.get)?g.get:s[h]}else d=b(s,h),s=s[h];d&&!l&&(y[u]=s)}}return s}},14844:(e,t,n)=>{"use strict";var r="undefined"!=typeof Symbol&&Symbol,o=n(10635);e.exports=function(){return"function"==typeof r&&("function"==typeof Symbol&&("symbol"==typeof r("foo")&&("symbol"==typeof Symbol("bar")&&o())))}},10635:e=>{"use strict";e.exports=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var e={},t=Symbol("test"),n=Object(t);if("string"==typeof t)return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;if("[object Symbol]"!==Object.prototype.toString.call(n))return!1;for(t in e[t]=42,e)return!1;if("function"==typeof Object.keys&&0!==Object.keys(e).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var r=Object.getOwnPropertySymbols(e);if(1!==r.length||r[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var o=Object.getOwnPropertyDescriptor(e,t);if(42!==o.value||!0!==o.enumerable)return!1}return!0}},66670:(e,t,n)=>{"use strict";var r=n(92502);e.exports=r.call(Function.call,Object.prototype.hasOwnProperty)},90528:(e,t,n)=>{"use strict";n.d(t,{lX:()=>_,ob:()=>y,PP:()=>S,Ep:()=>h,Hp:()=>m});var r=n(30513);function o(e){return"/"===e.charAt(0)}function i(e,t){for(var n=t,r=n+1,o=e.length;r<o;n+=1,r+=1)e[n]=e[r];e.pop()}const a=function(e,t){void 0===t&&(t="");var n,r=e&&e.split("/")||[],a=t&&t.split("/")||[],u=e&&o(e),c=t&&o(t),s=u||c;if(e&&o(e)?a=r:r.length&&(a.pop(),a=a.concat(r)),!a.length)return"/";if(a.length){var l=a[a.length-1];n="."===l||".."===l||""===l}else n=!1;for(var f=0,p=a.length;p>=0;p--){var d=a[p];"."===d?i(a,p):".."===d?(i(a,p),f++):f&&(i(a,p),f--)}if(!s)for(;f--;f)a.unshift("..");!s||""===a[0]||a[0]&&o(a[0])||a.unshift("");var h=a.join("/");return n&&"/"!==h.substr(-1)&&(h+="/"),h};function u(e){return e.valueOf?e.valueOf():Object.prototype.valueOf.call(e)}const c=function e(t,n){if(t===n)return!0;if(null==t||null==n)return!1;if(Array.isArray(t))return Array.isArray(n)&&t.length===n.length&&t.every((function(t,r){return e(t,n[r])}));if("object"==typeof t||"object"==typeof n){var r=u(t),o=u(n);return r!==t||o!==n?e(r,o):Object.keys(Object.assign({},t,n)).every((function(r){return e(t[r],n[r])}))}return!1};var s="Invariant failed";const l=function(e,t){if(!e)throw new Error(s)};function f(e){return"/"===e.charAt(0)?e:"/"+e}function p(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function h(e){var t=e.pathname,n=e.search,r=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(o+="#"===r.charAt(0)?r:"#"+r),o}function y(e,t,n,o){var i;"string"==typeof e?(i=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var i=t.indexOf("?");return-1!==i&&(n=t.substr(i),t=t.substr(0,i)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e)).state=t:(void 0===(i=(0,r.Z)({},e)).pathname&&(i.pathname=""),i.search?"?"!==i.search.charAt(0)&&(i.search="?"+i.search):i.search="",i.hash?"#"!==i.hash.charAt(0)&&(i.hash="#"+i.hash):i.hash="",void 0!==t&&void 0===i.state&&(i.state=t));try{i.pathname=decodeURI(i.pathname)}catch(e){throw e instanceof URIError?new URIError('Pathname "'+i.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):e}return n&&(i.key=n),o?i.pathname?"/"!==i.pathname.charAt(0)&&(i.pathname=a(i.pathname,o.pathname)):i.pathname=o.pathname:i.pathname||(i.pathname="/"),i}function m(e,t){return e.pathname===t.pathname&&e.search===t.search&&e.hash===t.hash&&e.key===t.key&&c(e.state,t.state)}function v(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,o){if(null!=e){var i="function"==typeof e?e(t,n):e;"string"==typeof i?"function"==typeof r?r(i,o):o(!0):o(!1!==i)}else o(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];t.forEach((function(e){return e.apply(void 0,n)}))}}}var g=!("undefined"==typeof window||!window.document||!window.document.createElement);function b(e,t){t(window.confirm(e))}var w="popstate",O="hashchange";function E(){try{return window.history.state||{}}catch(e){return{}}}function _(e){void 0===e&&(e={}),g||l(!1);var t,n=window.history,o=(-1===(t=window.navigator.userAgent).indexOf("Android 2.")&&-1===t.indexOf("Android 4.0")||-1===t.indexOf("Mobile Safari")||-1!==t.indexOf("Chrome")||-1!==t.indexOf("Windows Phone"))&&window.history&&"pushState"in window.history,i=!(-1===window.navigator.userAgent.indexOf("Trident")),a=e,u=a.forceRefresh,c=void 0!==u&&u,s=a.getUserConfirmation,m=void 0===s?b:s,_=a.keyLength,x=void 0===_?6:_,S=e.basename?d(f(e.basename)):"";function j(e){var t=e||{},n=t.key,r=t.state,o=window.location,i=o.pathname+o.search+o.hash;return S&&(i=p(i,S)),y(i,r,n)}function P(){return Math.random().toString(36).substr(2,x)}var k=v();function I(e){(0,r.Z)(H,e),H.length=n.length,k.notifyListeners(H.location,H.action)}function T(e){(function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")})(e)||A(j(e.state))}function R(){A(j(E()))}var C=!1;function A(e){if(C)C=!1,I();else{k.confirmTransitionTo(e,"POP",m,(function(t){t?I({action:"POP",location:e}):function(e){var t=H.location,n=L.indexOf(t.key);-1===n&&(n=0);var r=L.indexOf(e.key);-1===r&&(r=0);var o=n-r;o&&(C=!0,M(o))}(e)}))}}var N=j(E()),L=[N.key];function D(e){return S+h(e)}function M(e){n.go(e)}var F=0;function U(e){1===(F+=e)&&1===e?(window.addEventListener(w,T),i&&window.addEventListener(O,R)):0===F&&(window.removeEventListener(w,T),i&&window.removeEventListener(O,R))}var B=!1;var H={length:n.length,action:"POP",location:N,createHref:D,push:function(e,t){var r="PUSH",i=y(e,t,P(),H.location);k.confirmTransitionTo(i,r,m,(function(e){if(e){var t=D(i),a=i.key,u=i.state;if(o)if(n.pushState({key:a,state:u},null,t),c)window.location.href=t;else{var s=L.indexOf(H.location.key),l=L.slice(0,s+1);l.push(i.key),L=l,I({action:r,location:i})}else window.location.href=t}}))},replace:function(e,t){var r="REPLACE",i=y(e,t,P(),H.location);k.confirmTransitionTo(i,r,m,(function(e){if(e){var t=D(i),a=i.key,u=i.state;if(o)if(n.replaceState({key:a,state:u},null,t),c)window.location.replace(t);else{var s=L.indexOf(H.location.key);-1!==s&&(L[s]=i.key),I({action:r,location:i})}else window.location.replace(t)}}))},go:M,goBack:function(){M(-1)},goForward:function(){M(1)},block:function(e){void 0===e&&(e=!1);var t=k.setPrompt(e);return B||(U(1),B=!0),function(){return B&&(B=!1,U(-1)),t()}},listen:function(e){var t=k.appendListener(e);return U(1),function(){U(-1),t()}}};return H}function x(e,t,n){return Math.min(Math.max(e,t),n)}function S(e){void 0===e&&(e={});var t=e,n=t.getUserConfirmation,o=t.initialEntries,i=void 0===o?["/"]:o,a=t.initialIndex,u=void 0===a?0:a,c=t.keyLength,s=void 0===c?6:c,l=v();function f(e){(0,r.Z)(w,e),w.length=w.entries.length,l.notifyListeners(w.location,w.action)}function p(){return Math.random().toString(36).substr(2,s)}var d=x(u,0,i.length-1),m=i.map((function(e){return y(e,void 0,"string"==typeof e?p():e.key||p())})),g=h;function b(e){var t=x(w.index+e,0,w.entries.length-1),r=w.entries[t];l.confirmTransitionTo(r,"POP",n,(function(e){e?f({action:"POP",location:r,index:t}):f()}))}var w={length:m.length,action:"POP",location:m[d],index:d,entries:m,createHref:g,push:function(e,t){var r="PUSH",o=y(e,t,p(),w.location);l.confirmTransitionTo(o,r,n,(function(e){if(e){var t=w.index+1,n=w.entries.slice(0);n.length>t?n.splice(t,n.length-t,o):n.push(o),f({action:r,location:o,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",o=y(e,t,p(),w.location);l.confirmTransitionTo(o,r,n,(function(e){e&&(w.entries[w.index]=o,f({action:r,location:o}))}))},go:b,goBack:function(){b(-1)},goForward:function(){b(1)},canGo:function(e){var t=w.index+e;return t>=0&&t<w.entries.length},block:function(e){return void 0===e&&(e=!1),l.setPrompt(e)},listen:function(e){return l.appendListener(e)}};return w}},37707:(e,t,n)=>{"use strict";var r=n(2781),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},i={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},a={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},u={};function c(e){return r.isMemo(e)?a:u[e.$$typeof]||o}u[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},u[r.Memo]=a;var s=Object.defineProperty,l=Object.getOwnPropertyNames,f=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,d=Object.getPrototypeOf,h=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(h){var o=d(n);o&&o!==h&&e(t,o,r)}var a=l(n);f&&(a=a.concat(f(n)));for(var u=c(t),y=c(n),m=0;m<a.length;++m){var v=a[m];if(!(i[v]||r&&r[v]||y&&y[v]||u&&u[v])){var g=p(n,v);try{s(t,v,g)}catch(e){}}}}return t}},21706:(e,t)=>{t.read=function(e,t,n,r,o){var i,a,u=8*o-r-1,c=(1<<u)-1,s=c>>1,l=-7,f=n?o-1:0,p=n?-1:1,d=e[t+f];for(f+=p,i=d&(1<<-l)-1,d>>=-l,l+=u;l>0;i=256*i+e[t+f],f+=p,l-=8);for(a=i&(1<<-l)-1,i>>=-l,l+=r;l>0;a=256*a+e[t+f],f+=p,l-=8);if(0===i)i=1-s;else{if(i===c)return a?NaN:1/0*(d?-1:1);a+=Math.pow(2,r),i-=s}return(d?-1:1)*a*Math.pow(2,i-r)},t.write=function(e,t,n,r,o,i){var a,u,c,s=8*i-o-1,l=(1<<s)-1,f=l>>1,p=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,d=r?0:i-1,h=r?1:-1,y=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(u=isNaN(t)?1:0,a=l):(a=Math.floor(Math.log(t)/Math.LN2),t*(c=Math.pow(2,-a))<1&&(a--,c*=2),(t+=a+f>=1?p/c:p*Math.pow(2,1-f))*c>=2&&(a++,c/=2),a+f>=l?(u=0,a=l):a+f>=1?(u=(t*c-1)*Math.pow(2,o),a+=f):(u=t*Math.pow(2,f-1)*Math.pow(2,o),a=0));o>=8;e[n+d]=255&u,d+=h,u/=256,o-=8);for(a=a<<o|u,s+=o;s>0;e[n+d]=255&a,d+=h,a/=256,s-=8);e[n+d-h]|=128*y}},83021:e=>{"use strict";e.exports=function(e,t,n,r,o,i,a,u){if(!e){var c;if(void 0===t)c=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var s=[n,r,o,i,a,u],l=0;(c=new Error(t.replace(/%s/g,(function(){return s[l++]})))).name="Invariant Violation"}throw c.framesToPop=1,c}}},58412:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},33529:(e,t,n)=>{n(35409),e.exports=self.fetch.bind(self)},12321:function(e,t){!function(n,r){var o=Array.prototype,i=Object.prototype,a=o.slice,u=i.hasOwnProperty,c=o.forEach,s={},l={forEach:function(e,t,n){var r,o,i;if(null!==e)if(c&&e.forEach===c)e.forEach(t,n);else if(e.length===+e.length){for(r=0,o=e.length;r<o;r++)if(r in e&&t.call(n,e[r],r,e)===s)return}else for(i in e)if(u.call(e,i)&&t.call(n,e[i],i,e)===s)return},extend:function(e){return this.forEach(a.call(arguments,1),(function(t){for(var n in t)e[n]=t[n]})),e}},f=function(e){if(this.defaults={locale_data:{messages:{"":{domain:"messages",lang:"en",plural_forms:"nplurals=2; plural=(n != 1);"}}},domain:"messages",debug:!1},this.options=l.extend({},this.defaults,e),this.textdomain(this.options.domain),e.domain&&!this.options.locale_data[this.options.domain])throw new Error("Text domain set to non-existent domain: `"+e.domain+"`")};function p(e){return f.PF.compile(e||"nplurals=2; plural=(n != 1);")}function d(e,t){this._key=e,this._i18n=t}f.context_delimiter=String.fromCharCode(4),l.extend(d.prototype,{onDomain:function(e){return this._domain=e,this},withContext:function(e){return this._context=e,this},ifPlural:function(e,t){return this._val=e,this._pkey=t,this},fetch:function(e){return"[object Array]"!={}.toString.call(e)&&(e=[].slice.call(arguments,0)),(e&&e.length?f.sprintf:function(e){return e})(this._i18n.dcnpgettext(this._domain,this._context,this._key,this._pkey,this._val),e)}}),l.extend(f.prototype,{translate:function(e){return new d(e,this)},textdomain:function(e){if(!e)return this._textdomain;this._textdomain=e},gettext:function(e){return this.dcnpgettext.call(this,r,r,e)},dgettext:function(e,t){return this.dcnpgettext.call(this,e,r,t)},dcgettext:function(e,t){return this.dcnpgettext.call(this,e,r,t)},ngettext:function(e,t,n){return this.dcnpgettext.call(this,r,r,e,t,n)},dngettext:function(e,t,n,o){return this.dcnpgettext.call(this,e,r,t,n,o)},dcngettext:function(e,t,n,o){return this.dcnpgettext.call(this,e,r,t,n,o)},pgettext:function(e,t){return this.dcnpgettext.call(this,r,e,t)},dpgettext:function(e,t,n){return this.dcnpgettext.call(this,e,t,n)},dcpgettext:function(e,t,n){return this.dcnpgettext.call(this,e,t,n)},npgettext:function(e,t,n,o){return this.dcnpgettext.call(this,r,e,t,n,o)},dnpgettext:function(e,t,n,r,o){return this.dcnpgettext.call(this,e,t,n,r,o)},dcnpgettext:function(e,t,n,r,o){var i;if(r=r||n,e=e||this._textdomain,!this.options)return(i=new f).dcnpgettext.call(i,void 0,void 0,n,r,o);if(!this.options.locale_data)throw new Error("No locale data provided.");if(!this.options.locale_data[e])throw new Error("Domain `"+e+"` was not found.");if(!this.options.locale_data[e][""])throw new Error("No locale meta information provided.");if(!n)throw new Error("No translation key found.");var a,u,c,s=t?t+f.context_delimiter+n:n,l=this.options.locale_data,d=l[e],h=(l.messages||this.defaults.locale_data.messages)[""],y=d[""].plural_forms||d[""]["Plural-Forms"]||d[""]["plural-forms"]||h.plural_forms||h["Plural-Forms"]||h["plural-forms"];if(void 0===o)c=0;else{if("number"!=typeof o&&(o=parseInt(o,10),isNaN(o)))throw new Error("The number that was passed in is not a number.");c=p(y)(o)}if(!d)throw new Error("No domain named `"+e+"` could be found.");return!(a=d[s])||c>a.length?(this.options.missing_key_callback&&this.options.missing_key_callback(s,e),u=[n,r],this.options.debug,u[p()(o)]):(u=a[c])||(u=[n,r])[p()(o)]}});var h,y,m=function(){function e(e){return Object.prototype.toString.call(e).slice(8,-1).toLowerCase()}function t(e,t){for(var n=[];t>0;n[--t]=e);return n.join("")}var n=function(){return n.cache.hasOwnProperty(arguments[0])||(n.cache[arguments[0]]=n.parse(arguments[0])),n.format.call(null,n.cache[arguments[0]],arguments)};return n.format=function(n,r){var o,i,a,u,c,s,l,f=1,p=n.length,d="",h=[];for(i=0;i<p;i++)if("string"===(d=e(n[i])))h.push(n[i]);else if("array"===d){if((u=n[i])[2])for(o=r[f],a=0;a<u[2].length;a++){if(!o.hasOwnProperty(u[2][a]))throw m('[sprintf] property "%s" does not exist',u[2][a]);o=o[u[2][a]]}else o=u[1]?r[u[1]]:r[f++];if(/[^s]/.test(u[8])&&"number"!=e(o))throw m("[sprintf] expecting number but found %s",e(o));switch(null==o&&(o=""),u[8]){case"b":o=o.toString(2);break;case"c":o=String.fromCharCode(o);break;case"d":o=parseInt(o,10);break;case"e":o=u[7]?o.toExponential(u[7]):o.toExponential();break;case"f":o=u[7]?parseFloat(o).toFixed(u[7]):parseFloat(o);break;case"o":o=o.toString(8);break;case"s":o=(o=String(o))&&u[7]?o.substring(0,u[7]):o;break;case"u":o=Math.abs(o);break;case"x":o=o.toString(16);break;case"X":o=o.toString(16).toUpperCase()}o=/[def]/.test(u[8])&&u[3]&&o>=0?"+"+o:o,s=u[4]?"0"==u[4]?"0":u[4].charAt(1):" ",l=u[6]-String(o).length,c=u[6]?t(s,l):"",h.push(u[5]?o+c:c+o)}return h.join("")},n.cache={},n.parse=function(e){for(var t=e,n=[],r=[],o=0;t;){if(null!==(n=/^[^\x25]+/.exec(t)))r.push(n[0]);else if(null!==(n=/^\x25{2}/.exec(t)))r.push("%");else{if(null===(n=/^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(t)))throw"[sprintf] huh?";if(n[2]){o|=1;var i=[],a=n[2],u=[];if(null===(u=/^([a-z_][a-z_\d]*)/i.exec(a)))throw"[sprintf] huh?";for(i.push(u[1]);""!==(a=a.substring(u[0].length));)if(null!==(u=/^\.([a-z_][a-z_\d]*)/i.exec(a)))i.push(u[1]);else{if(null===(u=/^\[(\d+)\]/.exec(a)))throw"[sprintf] huh?";i.push(u[1])}n[2]=i}else o|=2;if(3===o)throw"[sprintf] mixing positional and named placeholders is not (yet) supported";r.push(n)}t=t.substring(n[0].length)}return r},n}(),v=function(e,t){return t.unshift(e),m.apply(null,t)};f.parse_plural=function(e,t){return e=e.replace(/n/g,t),f.parse_expression(e)},f.sprintf=function(e,t){return"[object Array]"=={}.toString.call(t)?v(e,[].slice.call(t)):m.apply(this,[].slice.call(arguments))},f.prototype.sprintf=function(){return f.sprintf.apply(this,arguments)},(f.PF={}).parse=function(e){var t=f.PF.extractPluralExpr(e);return f.PF.parser.parse.call(f.PF.parser,t)},f.PF.compile=function(e){var t=f.PF.parse(e);return function(e){return!0===(n=f.PF.interpreter(t)(e))?1:n||0;var n}},f.PF.interpreter=function(e){return function(t){switch(e.type){case"GROUP":return f.PF.interpreter(e.expr)(t);case"TERNARY":return f.PF.interpreter(e.expr)(t)?f.PF.interpreter(e.truthy)(t):f.PF.interpreter(e.falsey)(t);case"OR":return f.PF.interpreter(e.left)(t)||f.PF.interpreter(e.right)(t);case"AND":return f.PF.interpreter(e.left)(t)&&f.PF.interpreter(e.right)(t);case"LT":return f.PF.interpreter(e.left)(t)<f.PF.interpreter(e.right)(t);case"GT":return f.PF.interpreter(e.left)(t)>f.PF.interpreter(e.right)(t);case"LTE":return f.PF.interpreter(e.left)(t)<=f.PF.interpreter(e.right)(t);case"GTE":return f.PF.interpreter(e.left)(t)>=f.PF.interpreter(e.right)(t);case"EQ":return f.PF.interpreter(e.left)(t)==f.PF.interpreter(e.right)(t);case"NEQ":return f.PF.interpreter(e.left)(t)!=f.PF.interpreter(e.right)(t);case"MOD":return f.PF.interpreter(e.left)(t)%f.PF.interpreter(e.right)(t);case"VAR":return t;case"NUM":return e.val;default:throw new Error("Invalid Token found.")}}},f.PF.extractPluralExpr=function(e){e=e.replace(/^\s\s*/,"").replace(/\s\s*$/,""),/;\s*$/.test(e)||(e=e.concat(";"));var t,n=/nplurals\=(\d+);/,r=e.match(n);if(!(r.length>1))throw new Error("nplurals not found in plural_forms string: "+e);if(r[1],!((t=(e=e.replace(n,"")).match(/plural\=(.*);/))&&t.length>1))throw new Error("`plural` expression not found: "+e);return t[1]},f.PF.parser=(h={trace:function(){},yy:{},symbols_:{error:2,expressions:3,e:4,EOF:5,"?":6,":":7,"||":8,"&&":9,"<":10,"<=":11,">":12,">=":13,"!=":14,"==":15,"%":16,"(":17,")":18,n:19,NUMBER:20,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",6:"?",7:":",8:"||",9:"&&",10:"<",11:"<=",12:">",13:">=",14:"!=",15:"==",16:"%",17:"(",18:")",19:"n",20:"NUMBER"},productions_:[0,[3,2],[4,5],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,1],[4,1]],performAction:function(e,t,n,r,o,i,a){var u=i.length-1;switch(o){case 1:return{type:"GROUP",expr:i[u-1]};case 2:this.$={type:"TERNARY",expr:i[u-4],truthy:i[u-2],falsey:i[u]};break;case 3:this.$={type:"OR",left:i[u-2],right:i[u]};break;case 4:this.$={type:"AND",left:i[u-2],right:i[u]};break;case 5:this.$={type:"LT",left:i[u-2],right:i[u]};break;case 6:this.$={type:"LTE",left:i[u-2],right:i[u]};break;case 7:this.$={type:"GT",left:i[u-2],right:i[u]};break;case 8:this.$={type:"GTE",left:i[u-2],right:i[u]};break;case 9:this.$={type:"NEQ",left:i[u-2],right:i[u]};break;case 10:this.$={type:"EQ",left:i[u-2],right:i[u]};break;case 11:this.$={type:"MOD",left:i[u-2],right:i[u]};break;case 12:this.$={type:"GROUP",expr:i[u-1]};break;case 13:this.$={type:"VAR"};break;case 14:this.$={type:"NUM",val:Number(e)}}},table:[{3:1,4:2,17:[1,3],19:[1,4],20:[1,5]},{1:[3]},{5:[1,6],6:[1,7],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16]},{4:17,17:[1,3],19:[1,4],20:[1,5]},{5:[2,13],6:[2,13],7:[2,13],8:[2,13],9:[2,13],10:[2,13],11:[2,13],12:[2,13],13:[2,13],14:[2,13],15:[2,13],16:[2,13],18:[2,13]},{5:[2,14],6:[2,14],7:[2,14],8:[2,14],9:[2,14],10:[2,14],11:[2,14],12:[2,14],13:[2,14],14:[2,14],15:[2,14],16:[2,14],18:[2,14]},{1:[2,1]},{4:18,17:[1,3],19:[1,4],20:[1,5]},{4:19,17:[1,3],19:[1,4],20:[1,5]},{4:20,17:[1,3],19:[1,4],20:[1,5]},{4:21,17:[1,3],19:[1,4],20:[1,5]},{4:22,17:[1,3],19:[1,4],20:[1,5]},{4:23,17:[1,3],19:[1,4],20:[1,5]},{4:24,17:[1,3],19:[1,4],20:[1,5]},{4:25,17:[1,3],19:[1,4],20:[1,5]},{4:26,17:[1,3],19:[1,4],20:[1,5]},{4:27,17:[1,3],19:[1,4],20:[1,5]},{6:[1,7],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[1,28]},{6:[1,7],7:[1,29],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16]},{5:[2,3],6:[2,3],7:[2,3],8:[2,3],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[2,3]},{5:[2,4],6:[2,4],7:[2,4],8:[2,4],9:[2,4],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[2,4]},{5:[2,5],6:[2,5],7:[2,5],8:[2,5],9:[2,5],10:[2,5],11:[2,5],12:[2,5],13:[2,5],14:[2,5],15:[2,5],16:[1,16],18:[2,5]},{5:[2,6],6:[2,6],7:[2,6],8:[2,6],9:[2,6],10:[2,6],11:[2,6],12:[2,6],13:[2,6],14:[2,6],15:[2,6],16:[1,16],18:[2,6]},{5:[2,7],6:[2,7],7:[2,7],8:[2,7],9:[2,7],10:[2,7],11:[2,7],12:[2,7],13:[2,7],14:[2,7],15:[2,7],16:[1,16],18:[2,7]},{5:[2,8],6:[2,8],7:[2,8],8:[2,8],9:[2,8],10:[2,8],11:[2,8],12:[2,8],13:[2,8],14:[2,8],15:[2,8],16:[1,16],18:[2,8]},{5:[2,9],6:[2,9],7:[2,9],8:[2,9],9:[2,9],10:[2,9],11:[2,9],12:[2,9],13:[2,9],14:[2,9],15:[2,9],16:[1,16],18:[2,9]},{5:[2,10],6:[2,10],7:[2,10],8:[2,10],9:[2,10],10:[2,10],11:[2,10],12:[2,10],13:[2,10],14:[2,10],15:[2,10],16:[1,16],18:[2,10]},{5:[2,11],6:[2,11],7:[2,11],8:[2,11],9:[2,11],10:[2,11],11:[2,11],12:[2,11],13:[2,11],14:[2,11],15:[2,11],16:[2,11],18:[2,11]},{5:[2,12],6:[2,12],7:[2,12],8:[2,12],9:[2,12],10:[2,12],11:[2,12],12:[2,12],13:[2,12],14:[2,12],15:[2,12],16:[2,12],18:[2,12]},{4:30,17:[1,3],19:[1,4],20:[1,5]},{5:[2,2],6:[1,7],7:[2,2],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[2,2]}],defaultActions:{6:[2,1]},parseError:function(e,t){throw new Error(e)},parse:function(e){var t=this,n=[0],r=[null],o=[],i=this.table,a="",u=0,c=0,s=0;this.lexer.setInput(e),this.lexer.yy=this.yy,this.yy.lexer=this.lexer,void 0===this.lexer.yylloc&&(this.lexer.yylloc={});var l=this.lexer.yylloc;function f(){var e;return"number"!=typeof(e=t.lexer.lex()||1)&&(e=t.symbols_[e]||e),e}o.push(l),"function"==typeof this.yy.parseError&&(this.parseError=this.yy.parseError);for(var p,d,h,y,m,v,g,b,w,O,E={};;){if(h=n[n.length-1],this.defaultActions[h]?y=this.defaultActions[h]:(null==p&&(p=f()),y=i[h]&&i[h][p]),void 0===y||!y.length||!y[0]){if(!s){for(v in w=[],i[h])this.terminals_[v]&&v>2&&w.push("'"+this.terminals_[v]+"'");var _="";_=this.lexer.showPosition?"Parse error on line "+(u+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+w.join(", ")+", got '"+this.terminals_[p]+"'":"Parse error on line "+(u+1)+": Unexpected "+(1==p?"end of input":"'"+(this.terminals_[p]||p)+"'"),this.parseError(_,{text:this.lexer.match,token:this.terminals_[p]||p,line:this.lexer.yylineno,loc:l,expected:w})}if(3==s){if(1==p)throw new Error(_||"Parsing halted.");c=this.lexer.yyleng,a=this.lexer.yytext,u=this.lexer.yylineno,l=this.lexer.yylloc,p=f()}for(;!(2..toString()in i[h]);){if(0==h)throw new Error(_||"Parsing halted.");O=1,n.length=n.length-2*O,r.length=r.length-O,o.length=o.length-O,h=n[n.length-1]}d=p,p=2,y=i[h=n[n.length-1]]&&i[h][2],s=3}if(y[0]instanceof Array&&y.length>1)throw new Error("Parse Error: multiple actions possible at state: "+h+", token: "+p);switch(y[0]){case 1:n.push(p),r.push(this.lexer.yytext),o.push(this.lexer.yylloc),n.push(y[1]),p=null,d?(p=d,d=null):(c=this.lexer.yyleng,a=this.lexer.yytext,u=this.lexer.yylineno,l=this.lexer.yylloc,s>0&&s--);break;case 2:if(g=this.productions_[y[1]][1],E.$=r[r.length-g],E._$={first_line:o[o.length-(g||1)].first_line,last_line:o[o.length-1].last_line,first_column:o[o.length-(g||1)].first_column,last_column:o[o.length-1].last_column},void 0!==(m=this.performAction.call(E,a,c,u,this.yy,y[1],r,o)))return m;g&&(n=n.slice(0,-1*g*2),r=r.slice(0,-1*g),o=o.slice(0,-1*g)),n.push(this.productions_[y[1]][0]),r.push(E.$),o.push(E._$),b=i[n[n.length-2]][n[n.length-1]],n.push(b);break;case 3:return!0}}return!0}},y=function(){var e={EOF:1,parseError:function(e,t){if(!this.yy.parseError)throw new Error(e);this.yy.parseError(e,t)},setInput:function(e){return this._input=e,this._more=this._less=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.match+=e,this.matched+=e,e.match(/\n/)&&this.yylineno++,this._input=this._input.slice(1),e},unput:function(e){return this._input=e+this._input,this},more:function(){return this._more=!0,this},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},next:function(){if(this.done)return this.EOF;var e,t;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var n=this._currentRules(),r=0;r<n.length;r++)if(e=this._input.match(this.rules[n[r]]))return(t=e[0].match(/\n.*/g))&&(this.yylineno+=t.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:t?t[t.length-1].length-1:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this._more=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],this.performAction.call(this,this.yy,this,n[r],this.conditionStack[this.conditionStack.length-1])||void 0;if(""===this._input)return this.EOF;this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return void 0!==e?e:this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.pop()},_currentRules:function(){return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules},topState:function(){return this.conditionStack[this.conditionStack.length-2]},pushState:function(e){this.begin(e)},performAction:function(e,t,n,r){switch(n){case 0:break;case 1:return 20;case 2:return 19;case 3:return 8;case 4:return 9;case 5:return 6;case 6:return 7;case 7:return 11;case 8:return 13;case 9:return 10;case 10:return 12;case 11:return 14;case 12:return 15;case 13:return 16;case 14:return 17;case 15:return 18;case 16:return 5;case 17:return"INVALID"}},rules:[/^\s+/,/^[0-9]+(\.[0-9]+)?\b/,/^n\b/,/^\|\|/,/^&&/,/^\?/,/^:/,/^<=/,/^>=/,/^</,/^>/,/^!=/,/^==/,/^%/,/^\(/,/^\)/,/^$/,/^./],conditions:{INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],inclusive:!0}}};return e}(),h.lexer=y,h),e.exports&&(t=e.exports=f),t.Jed=f}()},97170:e=>{"use strict";function t(e){return null!=e}e.exports={pathname:function(){for(var e=arguments.length,n=new Array(e);e--;)n[e]=arguments[e];return n.filter(t).join("/").replace(/\/+/g,"/")},hostname:function(){for(var e=arguments.length,n=new Array(e);e--;)n[e]=arguments[e];return n.filter(t).join(".").replace(/^\./,"").replace(/\.+/g,".")},query:function(){for(var e=arguments.length,n=new Array(e);e--;)n[e]=arguments[e];return n.filter(t).join("&").replace(/^&/,"").replace(/&+/g,"&")}}},86432:(e,t,n)=>{e.exports=function e(t,n,r){function o(a,u){if(!n[a]){if(!t[a]){if(i)return i(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var s=n[a]={exports:{}};t[a][0].call(s.exports,(function(e){var n=t[a][1][e];return o(n||e)}),s,s.exports,e,t,n,r)}return n[a].exports}for(var i=void 0,a=0;a<r.length;a++)o(r[a]);return o}({1:[function(e,t,r){(function(e){"use strict";var n,r,o=e.MutationObserver||e.WebKitMutationObserver;if(o){var i=0,a=new o(l),u=e.document.createTextNode("");a.observe(u,{characterData:!0}),n=function(){u.data=i=++i%2}}else if(e.setImmediate||void 0===e.MessageChannel)n="document"in e&&"onreadystatechange"in e.document.createElement("script")?function(){var t=e.document.createElement("script");t.onreadystatechange=function(){l(),t.onreadystatechange=null,t.parentNode.removeChild(t),t=null},e.document.documentElement.appendChild(t)}:function(){setTimeout(l,0)};else{var c=new e.MessageChannel;c.port1.onmessage=l,n=function(){c.port2.postMessage(0)}}var s=[];function l(){var e,t;r=!0;for(var n=s.length;n;){for(t=s,s=[],e=-1;++e<n;)t[e]();n=s.length}r=!1}function f(e){1!==s.push(e)||r||n()}t.exports=f}).call(this,void 0!==n.g?n.g:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],2:[function(e,t,n){"use strict";var r=e(1);function o(){}var i={},a=["REJECTED"],u=["FULFILLED"],c=["PENDING"];function s(e){if("function"!=typeof e)throw new TypeError("resolver must be a function");this.state=c,this.queue=[],this.outcome=void 0,e!==o&&d(this,e)}function l(e,t,n){this.promise=e,"function"==typeof t&&(this.onFulfilled=t,this.callFulfilled=this.otherCallFulfilled),"function"==typeof n&&(this.onRejected=n,this.callRejected=this.otherCallRejected)}function f(e,t,n){r((function(){var r;try{r=t(n)}catch(t){return i.reject(e,t)}r===e?i.reject(e,new TypeError("Cannot resolve promise with itself")):i.resolve(e,r)}))}function p(e){var t=e&&e.then;if(e&&("object"==typeof e||"function"==typeof e)&&"function"==typeof t)return function(){t.apply(e,arguments)}}function d(e,t){var n=!1;function r(t){n||(n=!0,i.reject(e,t))}function o(t){n||(n=!0,i.resolve(e,t))}function a(){t(o,r)}var u=h(a);"error"===u.status&&r(u.value)}function h(e,t){var n={};try{n.value=e(t),n.status="success"}catch(e){n.status="error",n.value=e}return n}function y(e){return e instanceof this?e:i.resolve(new this(o),e)}function m(e){var t=new this(o);return i.reject(t,e)}function v(e){var t=this;if("[object Array]"!==Object.prototype.toString.call(e))return this.reject(new TypeError("must be an array"));var n=e.length,r=!1;if(!n)return this.resolve([]);for(var a=new Array(n),u=0,c=-1,s=new this(o);++c<n;)l(e[c],c);return s;function l(e,o){function c(e){a[o]=e,++u!==n||r||(r=!0,i.resolve(s,a))}t.resolve(e).then(c,(function(e){r||(r=!0,i.reject(s,e))}))}}function g(e){var t=this;if("[object Array]"!==Object.prototype.toString.call(e))return this.reject(new TypeError("must be an array"));var n=e.length,r=!1;if(!n)return this.resolve([]);for(var a=-1,u=new this(o);++a<n;)c(e[a]);return u;function c(e){t.resolve(e).then((function(e){r||(r=!0,i.resolve(u,e))}),(function(e){r||(r=!0,i.reject(u,e))}))}}t.exports=s,s.prototype.catch=function(e){return this.then(null,e)},s.prototype.then=function(e,t){if("function"!=typeof e&&this.state===u||"function"!=typeof t&&this.state===a)return this;var n=new this.constructor(o);return this.state!==c?f(n,this.state===u?e:t,this.outcome):this.queue.push(new l(n,e,t)),n},l.prototype.callFulfilled=function(e){i.resolve(this.promise,e)},l.prototype.otherCallFulfilled=function(e){f(this.promise,this.onFulfilled,e)},l.prototype.callRejected=function(e){i.reject(this.promise,e)},l.prototype.otherCallRejected=function(e){f(this.promise,this.onRejected,e)},i.resolve=function(e,t){var n=h(p,t);if("error"===n.status)return i.reject(e,n.value);var r=n.value;if(r)d(e,r);else{e.state=u,e.outcome=t;for(var o=-1,a=e.queue.length;++o<a;)e.queue[o].callFulfilled(t)}return e},i.reject=function(e,t){e.state=a,e.outcome=t;for(var n=-1,r=e.queue.length;++n<r;)e.queue[n].callRejected(t);return e},s.resolve=y,s.reject=m,s.all=v,s.race=g},{1:1}],3:[function(e,t,r){(function(t){"use strict";"function"!=typeof t.Promise&&(t.Promise=e(2))}).call(this,void 0!==n.g?n.g:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{2:2}],4:[function(e,t,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(){try{if("undefined"!=typeof indexedDB)return indexedDB;if("undefined"!=typeof webkitIndexedDB)return webkitIndexedDB;if("undefined"!=typeof mozIndexedDB)return mozIndexedDB;if("undefined"!=typeof OIndexedDB)return OIndexedDB;if("undefined"!=typeof msIndexedDB)return msIndexedDB}catch(e){return}}var a=i();function u(){try{if(!a||!a.open)return!1;var e="undefined"!=typeof openDatabase&&/(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent)&&!/Chrome/.test(navigator.userAgent)&&!/BlackBerry/.test(navigator.platform),t="function"==typeof fetch&&-1!==fetch.toString().indexOf("[native code");return(!e||t)&&"undefined"!=typeof indexedDB&&"undefined"!=typeof IDBKeyRange}catch(e){return!1}}function c(e,t){e=e||[],t=t||{};try{return new Blob(e,t)}catch(o){if("TypeError"!==o.name)throw o;for(var n=new("undefined"!=typeof BlobBuilder?BlobBuilder:"undefined"!=typeof MSBlobBuilder?MSBlobBuilder:"undefined"!=typeof MozBlobBuilder?MozBlobBuilder:WebKitBlobBuilder),r=0;r<e.length;r+=1)n.append(e[r]);return n.getBlob(t.type)}}"undefined"==typeof Promise&&e(3);var s=Promise;function l(e,t){t&&e.then((function(e){t(null,e)}),(function(e){t(e)}))}function f(e,t,n){"function"==typeof t&&e.then(t),"function"==typeof n&&e.catch(n)}function p(e){return"string"!=typeof e&&(e=String(e)),e}function d(){if(arguments.length&&"function"==typeof arguments[arguments.length-1])return arguments[arguments.length-1]}var h="local-forage-detect-blob-support",y=void 0,m={},v=Object.prototype.toString,g="readonly",b="readwrite";function w(e){for(var t=e.length,n=new ArrayBuffer(t),r=new Uint8Array(n),o=0;o<t;o++)r[o]=e.charCodeAt(o);return n}function O(e){return new s((function(t){var n=e.transaction(h,b),r=c([""]);n.objectStore(h).put(r,"key"),n.onabort=function(e){e.preventDefault(),e.stopPropagation(),t(!1)},n.oncomplete=function(){var e=navigator.userAgent.match(/Chrome\/(\d+)/),n=navigator.userAgent.match(/Edge\//);t(n||!e||parseInt(e[1],10)>=43)}})).catch((function(){return!1}))}function E(e){return"boolean"==typeof y?s.resolve(y):O(e).then((function(e){return y=e}))}function _(e){var t=m[e.name],n={};n.promise=new s((function(e,t){n.resolve=e,n.reject=t})),t.deferredOperations.push(n),t.dbReady?t.dbReady=t.dbReady.then((function(){return n.promise})):t.dbReady=n.promise}function x(e){var t=m[e.name].deferredOperations.pop();if(t)return t.resolve(),t.promise}function S(e,t){var n=m[e.name].deferredOperations.pop();if(n)return n.reject(t),n.promise}function j(e,t){return new s((function(n,r){if(m[e.name]=m[e.name]||D(),e.db){if(!t)return n(e.db);_(e),e.db.close()}var o=[e.name];t&&o.push(e.version);var i=a.open.apply(a,o);t&&(i.onupgradeneeded=function(t){var n=i.result;try{n.createObjectStore(e.storeName),t.oldVersion<=1&&n.createObjectStore(h)}catch(e){if("ConstraintError"!==e.name)throw e}}),i.onerror=function(e){e.preventDefault(),r(i.error)},i.onsuccess=function(){var t=i.result;t.onversionchange=function(e){e.target.close()},n(t),x(e)}}))}function P(e){return j(e,!1)}function k(e){return j(e,!0)}function I(e,t){if(!e.db)return!0;var n=!e.db.objectStoreNames.contains(e.storeName),r=e.version<e.db.version,o=e.version>e.db.version;if(r&&(e.version,e.version=e.db.version),o||n){if(n){var i=e.db.version+1;i>e.version&&(e.version=i)}return!0}return!1}function T(e){return new s((function(t,n){var r=new FileReader;r.onerror=n,r.onloadend=function(n){var r=btoa(n.target.result||"");t({__local_forage_encoded_blob:!0,data:r,type:e.type})},r.readAsBinaryString(e)}))}function R(e){return c([w(atob(e.data))],{type:e.type})}function C(e){return e&&e.__local_forage_encoded_blob}function A(e){var t=this,n=t._initReady().then((function(){var e=m[t._dbInfo.name];if(e&&e.dbReady)return e.dbReady}));return f(n,e,e),n}function N(e){_(e);for(var t=m[e.name],n=t.forages,r=0;r<n.length;r++){var o=n[r];o._dbInfo.db&&(o._dbInfo.db.close(),o._dbInfo.db=null)}return e.db=null,P(e).then((function(t){return e.db=t,I(e)?k(e):t})).then((function(r){e.db=t.db=r;for(var o=0;o<n.length;o++)n[o]._dbInfo.db=r})).catch((function(t){throw S(e,t),t}))}function L(e,t,n,r){void 0===r&&(r=1);try{var o=e.db.transaction(e.storeName,t);n(null,o)}catch(o){if(r>0&&(!e.db||"InvalidStateError"===o.name||"NotFoundError"===o.name))return s.resolve().then((function(){if(!e.db||"NotFoundError"===o.name&&!e.db.objectStoreNames.contains(e.storeName)&&e.version<=e.db.version)return e.db&&(e.version=e.db.version+1),k(e)})).then((function(){return N(e).then((function(){L(e,t,n,r-1)}))})).catch(n);n(o)}}function D(){return{forages:[],db:null,dbReady:null,deferredOperations:[]}}function M(e){var t=this,n={db:null};if(e)for(var r in e)n[r]=e[r];var o=m[n.name];o||(o=D(),m[n.name]=o),o.forages.push(t),t._initReady||(t._initReady=t.ready,t.ready=A);var i=[];function a(){return s.resolve()}for(var u=0;u<o.forages.length;u++){var c=o.forages[u];c!==t&&i.push(c._initReady().catch(a))}var l=o.forages.slice(0);return s.all(i).then((function(){return n.db=o.db,P(n)})).then((function(e){return n.db=e,I(n,t._defaultConfig.version)?k(n):e})).then((function(e){n.db=o.db=e,t._dbInfo=n;for(var r=0;r<l.length;r++){var i=l[r];i!==t&&(i._dbInfo.db=n.db,i._dbInfo.version=n.version)}}))}function F(e,t){var n=this;e=p(e);var r=new s((function(t,r){n.ready().then((function(){L(n._dbInfo,g,(function(o,i){if(o)return r(o);try{var a=i.objectStore(n._dbInfo.storeName).get(e);a.onsuccess=function(){var e=a.result;void 0===e&&(e=null),C(e)&&(e=R(e)),t(e)},a.onerror=function(){r(a.error)}}catch(e){r(e)}}))})).catch(r)}));return l(r,t),r}function U(e,t){var n=this,r=new s((function(t,r){n.ready().then((function(){L(n._dbInfo,g,(function(o,i){if(o)return r(o);try{var a=i.objectStore(n._dbInfo.storeName).openCursor(),u=1;a.onsuccess=function(){var n=a.result;if(n){var r=n.value;C(r)&&(r=R(r));var o=e(r,n.key,u++);void 0!==o?t(o):n.continue()}else t()},a.onerror=function(){r(a.error)}}catch(e){r(e)}}))})).catch(r)}));return l(r,t),r}function B(e,t,n){var r=this;e=p(e);var o=new s((function(n,o){var i;r.ready().then((function(){return i=r._dbInfo,"[object Blob]"===v.call(t)?E(i.db).then((function(e){return e?t:T(t)})):t})).then((function(t){L(r._dbInfo,b,(function(i,a){if(i)return o(i);try{var u=a.objectStore(r._dbInfo.storeName);null===t&&(t=void 0);var c=u.put(t,e);a.oncomplete=function(){void 0===t&&(t=null),n(t)},a.onabort=a.onerror=function(){var e=c.error?c.error:c.transaction.error;o(e)}}catch(e){o(e)}}))})).catch(o)}));return l(o,n),o}function H(e,t){var n=this;e=p(e);var r=new s((function(t,r){n.ready().then((function(){L(n._dbInfo,b,(function(o,i){if(o)return r(o);try{var a=i.objectStore(n._dbInfo.storeName).delete(e);i.oncomplete=function(){t()},i.onerror=function(){r(a.error)},i.onabort=function(){var e=a.error?a.error:a.transaction.error;r(e)}}catch(e){r(e)}}))})).catch(r)}));return l(r,t),r}function q(e){var t=this,n=new s((function(e,n){t.ready().then((function(){L(t._dbInfo,b,(function(r,o){if(r)return n(r);try{var i=o.objectStore(t._dbInfo.storeName).clear();o.oncomplete=function(){e()},o.onabort=o.onerror=function(){var e=i.error?i.error:i.transaction.error;n(e)}}catch(e){n(e)}}))})).catch(n)}));return l(n,e),n}function z(e){var t=this,n=new s((function(e,n){t.ready().then((function(){L(t._dbInfo,g,(function(r,o){if(r)return n(r);try{var i=o.objectStore(t._dbInfo.storeName).count();i.onsuccess=function(){e(i.result)},i.onerror=function(){n(i.error)}}catch(e){n(e)}}))})).catch(n)}));return l(n,e),n}function G(e,t){var n=this,r=new s((function(t,r){e<0?t(null):n.ready().then((function(){L(n._dbInfo,g,(function(o,i){if(o)return r(o);try{var a=i.objectStore(n._dbInfo.storeName),u=!1,c=a.openKeyCursor();c.onsuccess=function(){var n=c.result;n?0===e||u?t(n.key):(u=!0,n.advance(e)):t(null)},c.onerror=function(){r(c.error)}}catch(e){r(e)}}))})).catch(r)}));return l(r,t),r}function W(e){var t=this,n=new s((function(e,n){t.ready().then((function(){L(t._dbInfo,g,(function(r,o){if(r)return n(r);try{var i=o.objectStore(t._dbInfo.storeName).openKeyCursor(),a=[];i.onsuccess=function(){var t=i.result;t?(a.push(t.key),t.continue()):e(a)},i.onerror=function(){n(i.error)}}catch(e){n(e)}}))})).catch(n)}));return l(n,e),n}function V(e,t){t=d.apply(this,arguments);var n=this.config();(e="function"!=typeof e&&e||{}).name||(e.name=e.name||n.name,e.storeName=e.storeName||n.storeName);var r,o=this;if(e.name){var i=e.name===n.name&&o._dbInfo.db?s.resolve(o._dbInfo.db):P(e).then((function(t){var n=m[e.name],r=n.forages;n.db=t;for(var o=0;o<r.length;o++)r[o]._dbInfo.db=t;return t}));r=e.storeName?i.then((function(t){if(t.objectStoreNames.contains(e.storeName)){var n=t.version+1;_(e);var r=m[e.name],o=r.forages;t.close();for(var i=0;i<o.length;i++){var u=o[i];u._dbInfo.db=null,u._dbInfo.version=n}return new s((function(t,r){var o=a.open(e.name,n);o.onerror=function(e){o.result.close(),r(e)},o.onupgradeneeded=function(){o.result.deleteObjectStore(e.storeName)},o.onsuccess=function(){var e=o.result;e.close(),t(e)}})).then((function(e){r.db=e;for(var t=0;t<o.length;t++){var n=o[t];n._dbInfo.db=e,x(n._dbInfo)}})).catch((function(t){throw(S(e,t)||s.resolve()).catch((function(){})),t}))}})):i.then((function(t){_(e);var n=m[e.name],r=n.forages;t.close();for(var o=0;o<r.length;o++)r[o]._dbInfo.db=null;return new s((function(t,n){var r=a.deleteDatabase(e.name);r.onerror=function(){var e=r.result;e&&e.close(),n(r.error)},r.onblocked=function(){},r.onsuccess=function(){var e=r.result;e&&e.close(),t(e)}})).then((function(e){n.db=e;for(var t=0;t<r.length;t++)x(r[t]._dbInfo)})).catch((function(t){throw(S(e,t)||s.resolve()).catch((function(){})),t}))}))}else r=s.reject("Invalid arguments");return l(r,t),r}var Y={_driver:"asyncStorage",_initStorage:M,_support:u(),iterate:U,getItem:F,setItem:B,removeItem:H,clear:q,length:z,key:G,keys:W,dropInstance:V};function Z(){return"function"==typeof openDatabase}var $="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",K="~~local_forage_type~",Q=/^~~local_forage_type~([^~]+)~/,X="__lfsc__:",J=X.length,ee="arbf",te="blob",ne="si08",re="ui08",oe="uic8",ie="si16",ae="si32",ue="ur16",ce="ui32",se="fl32",le="fl64",fe=J+ee.length,pe=Object.prototype.toString;function de(e){var t,n,r,o,i,a=.75*e.length,u=e.length,c=0;"="===e[e.length-1]&&(a--,"="===e[e.length-2]&&a--);var s=new ArrayBuffer(a),l=new Uint8Array(s);for(t=0;t<u;t+=4)n=$.indexOf(e[t]),r=$.indexOf(e[t+1]),o=$.indexOf(e[t+2]),i=$.indexOf(e[t+3]),l[c++]=n<<2|r>>4,l[c++]=(15&r)<<4|o>>2,l[c++]=(3&o)<<6|63&i;return s}function he(e){var t,n=new Uint8Array(e),r="";for(t=0;t<n.length;t+=3)r+=$[n[t]>>2],r+=$[(3&n[t])<<4|n[t+1]>>4],r+=$[(15&n[t+1])<<2|n[t+2]>>6],r+=$[63&n[t+2]];return n.length%3==2?r=r.substring(0,r.length-1)+"=":n.length%3==1&&(r=r.substring(0,r.length-2)+"=="),r}function ye(e,t){var n="";if(e&&(n=pe.call(e)),e&&("[object ArrayBuffer]"===n||e.buffer&&"[object ArrayBuffer]"===pe.call(e.buffer))){var r,o=X;e instanceof ArrayBuffer?(r=e,o+=ee):(r=e.buffer,"[object Int8Array]"===n?o+=ne:"[object Uint8Array]"===n?o+=re:"[object Uint8ClampedArray]"===n?o+=oe:"[object Int16Array]"===n?o+=ie:"[object Uint16Array]"===n?o+=ue:"[object Int32Array]"===n?o+=ae:"[object Uint32Array]"===n?o+=ce:"[object Float32Array]"===n?o+=se:"[object Float64Array]"===n?o+=le:t(new Error("Failed to get type for BinaryArray"))),t(o+he(r))}else if("[object Blob]"===n){var i=new FileReader;i.onload=function(){var n=K+e.type+"~"+he(this.result);t(X+te+n)},i.readAsArrayBuffer(e)}else try{t(JSON.stringify(e))}catch(e){t(null,e)}}function me(e){if(e.substring(0,J)!==X)return JSON.parse(e);var t,n=e.substring(fe),r=e.substring(J,fe);if(r===te&&Q.test(n)){var o=n.match(Q);t=o[1],n=n.substring(o[0].length)}var i=de(n);switch(r){case ee:return i;case te:return c([i],{type:t});case ne:return new Int8Array(i);case re:return new Uint8Array(i);case oe:return new Uint8ClampedArray(i);case ie:return new Int16Array(i);case ue:return new Uint16Array(i);case ae:return new Int32Array(i);case ce:return new Uint32Array(i);case se:return new Float32Array(i);case le:return new Float64Array(i);default:throw new Error("Unkown type: "+r)}}var ve={serialize:ye,deserialize:me,stringToBuffer:de,bufferToString:he};function ge(e,t,n,r){e.executeSql("CREATE TABLE IF NOT EXISTS "+t.storeName+" (id INTEGER PRIMARY KEY, key unique, value)",[],n,r)}function be(e){var t=this,n={db:null};if(e)for(var r in e)n[r]="string"!=typeof e[r]?e[r].toString():e[r];var o=new s((function(e,r){try{n.db=openDatabase(n.name,String(n.version),n.description,n.size)}catch(e){return r(e)}n.db.transaction((function(o){ge(o,n,(function(){t._dbInfo=n,e()}),(function(e,t){r(t)}))}),r)}));return n.serializer=ve,o}function we(e,t,n,r,o,i){e.executeSql(n,r,o,(function(e,a){a.code===a.SYNTAX_ERR?e.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name = ?",[t.storeName],(function(e,u){u.rows.length?i(e,a):ge(e,t,(function(){e.executeSql(n,r,o,i)}),i)}),i):i(e,a)}),i)}function Oe(e,t){var n=this;e=p(e);var r=new s((function(t,r){n.ready().then((function(){var o=n._dbInfo;o.db.transaction((function(n){we(n,o,"SELECT * FROM "+o.storeName+" WHERE key = ? LIMIT 1",[e],(function(e,n){var r=n.rows.length?n.rows.item(0).value:null;r&&(r=o.serializer.deserialize(r)),t(r)}),(function(e,t){r(t)}))}))})).catch(r)}));return l(r,t),r}function Ee(e,t){var n=this,r=new s((function(t,r){n.ready().then((function(){var o=n._dbInfo;o.db.transaction((function(n){we(n,o,"SELECT * FROM "+o.storeName,[],(function(n,r){for(var i=r.rows,a=i.length,u=0;u<a;u++){var c=i.item(u),s=c.value;if(s&&(s=o.serializer.deserialize(s)),void 0!==(s=e(s,c.key,u+1)))return void t(s)}t()}),(function(e,t){r(t)}))}))})).catch(r)}));return l(r,t),r}function _e(e,t,n,r){var o=this;e=p(e);var i=new s((function(i,a){o.ready().then((function(){void 0===t&&(t=null);var u=t,c=o._dbInfo;c.serializer.serialize(t,(function(t,s){s?a(s):c.db.transaction((function(n){we(n,c,"INSERT OR REPLACE INTO "+c.storeName+" (key, value) VALUES (?, ?)",[e,t],(function(){i(u)}),(function(e,t){a(t)}))}),(function(t){if(t.code===t.QUOTA_ERR){if(r>0)return void i(_e.apply(o,[e,u,n,r-1]));a(t)}}))}))})).catch(a)}));return l(i,n),i}function xe(e,t,n){return _e.apply(this,[e,t,n,1])}function Se(e,t){var n=this;e=p(e);var r=new s((function(t,r){n.ready().then((function(){var o=n._dbInfo;o.db.transaction((function(n){we(n,o,"DELETE FROM "+o.storeName+" WHERE key = ?",[e],(function(){t()}),(function(e,t){r(t)}))}))})).catch(r)}));return l(r,t),r}function je(e){var t=this,n=new s((function(e,n){t.ready().then((function(){var r=t._dbInfo;r.db.transaction((function(t){we(t,r,"DELETE FROM "+r.storeName,[],(function(){e()}),(function(e,t){n(t)}))}))})).catch(n)}));return l(n,e),n}function Pe(e){var t=this,n=new s((function(e,n){t.ready().then((function(){var r=t._dbInfo;r.db.transaction((function(t){we(t,r,"SELECT COUNT(key) as c FROM "+r.storeName,[],(function(t,n){var r=n.rows.item(0).c;e(r)}),(function(e,t){n(t)}))}))})).catch(n)}));return l(n,e),n}function ke(e,t){var n=this,r=new s((function(t,r){n.ready().then((function(){var o=n._dbInfo;o.db.transaction((function(n){we(n,o,"SELECT key FROM "+o.storeName+" WHERE id = ? LIMIT 1",[e+1],(function(e,n){var r=n.rows.length?n.rows.item(0).key:null;t(r)}),(function(e,t){r(t)}))}))})).catch(r)}));return l(r,t),r}function Ie(e){var t=this,n=new s((function(e,n){t.ready().then((function(){var r=t._dbInfo;r.db.transaction((function(t){we(t,r,"SELECT key FROM "+r.storeName,[],(function(t,n){for(var r=[],o=0;o<n.rows.length;o++)r.push(n.rows.item(o).key);e(r)}),(function(e,t){n(t)}))}))})).catch(n)}));return l(n,e),n}function Te(e){return new s((function(t,n){e.transaction((function(r){r.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'",[],(function(n,r){for(var o=[],i=0;i<r.rows.length;i++)o.push(r.rows.item(i).name);t({db:e,storeNames:o})}),(function(e,t){n(t)}))}),(function(e){n(e)}))}))}function Re(e,t){t=d.apply(this,arguments);var n=this.config();(e="function"!=typeof e&&e||{}).name||(e.name=e.name||n.name,e.storeName=e.storeName||n.storeName);var r,o=this;return l(r=e.name?new s((function(t){var r;r=e.name===n.name?o._dbInfo.db:openDatabase(e.name,"","",0),e.storeName?t({db:r,storeNames:[e.storeName]}):t(Te(r))})).then((function(e){return new s((function(t,n){e.db.transaction((function(r){function o(e){return new s((function(t,n){r.executeSql("DROP TABLE IF EXISTS "+e,[],(function(){t()}),(function(e,t){n(t)}))}))}for(var i=[],a=0,u=e.storeNames.length;a<u;a++)i.push(o(e.storeNames[a]));s.all(i).then((function(){t()})).catch((function(e){n(e)}))}),(function(e){n(e)}))}))})):s.reject("Invalid arguments"),t),r}var Ce={_driver:"webSQLStorage",_initStorage:be,_support:Z(),iterate:Ee,getItem:Oe,setItem:xe,removeItem:Se,clear:je,length:Pe,key:ke,keys:Ie,dropInstance:Re};function Ae(){try{return"undefined"!=typeof localStorage&&"setItem"in localStorage&&!!localStorage.setItem}catch(e){return!1}}function Ne(e,t){var n=e.name+"/";return e.storeName!==t.storeName&&(n+=e.storeName+"/"),n}function Le(){var e="_localforage_support_test";try{return localStorage.setItem(e,!0),localStorage.removeItem(e),!1}catch(e){return!0}}function De(){return!Le()||localStorage.length>0}function Me(e){var t=this,n={};if(e)for(var r in e)n[r]=e[r];return n.keyPrefix=Ne(e,t._defaultConfig),De()?(t._dbInfo=n,n.serializer=ve,s.resolve()):s.reject()}function Fe(e){var t=this,n=t.ready().then((function(){for(var e=t._dbInfo.keyPrefix,n=localStorage.length-1;n>=0;n--){var r=localStorage.key(n);0===r.indexOf(e)&&localStorage.removeItem(r)}}));return l(n,e),n}function Ue(e,t){var n=this;e=p(e);var r=n.ready().then((function(){var t=n._dbInfo,r=localStorage.getItem(t.keyPrefix+e);return r&&(r=t.serializer.deserialize(r)),r}));return l(r,t),r}function Be(e,t){var n=this,r=n.ready().then((function(){for(var t=n._dbInfo,r=t.keyPrefix,o=r.length,i=localStorage.length,a=1,u=0;u<i;u++){var c=localStorage.key(u);if(0===c.indexOf(r)){var s=localStorage.getItem(c);if(s&&(s=t.serializer.deserialize(s)),void 0!==(s=e(s,c.substring(o),a++)))return s}}}));return l(r,t),r}function He(e,t){var n=this,r=n.ready().then((function(){var t,r=n._dbInfo;try{t=localStorage.key(e)}catch(e){t=null}return t&&(t=t.substring(r.keyPrefix.length)),t}));return l(r,t),r}function qe(e){var t=this,n=t.ready().then((function(){for(var e=t._dbInfo,n=localStorage.length,r=[],o=0;o<n;o++){var i=localStorage.key(o);0===i.indexOf(e.keyPrefix)&&r.push(i.substring(e.keyPrefix.length))}return r}));return l(n,e),n}function ze(e){var t=this.keys().then((function(e){return e.length}));return l(t,e),t}function Ge(e,t){var n=this;e=p(e);var r=n.ready().then((function(){var t=n._dbInfo;localStorage.removeItem(t.keyPrefix+e)}));return l(r,t),r}function We(e,t,n){var r=this;e=p(e);var o=r.ready().then((function(){void 0===t&&(t=null);var n=t;return new s((function(o,i){var a=r._dbInfo;a.serializer.serialize(t,(function(t,r){if(r)i(r);else try{localStorage.setItem(a.keyPrefix+e,t),o(n)}catch(e){"QuotaExceededError"!==e.name&&"NS_ERROR_DOM_QUOTA_REACHED"!==e.name||i(e),i(e)}}))}))}));return l(o,n),o}function Ve(e,t){if(t=d.apply(this,arguments),!(e="function"!=typeof e&&e||{}).name){var n=this.config();e.name=e.name||n.name,e.storeName=e.storeName||n.storeName}var r,o=this;return l(r=e.name?new s((function(t){e.storeName?t(Ne(e,o._defaultConfig)):t(e.name+"/")})).then((function(e){for(var t=localStorage.length-1;t>=0;t--){var n=localStorage.key(t);0===n.indexOf(e)&&localStorage.removeItem(n)}})):s.reject("Invalid arguments"),t),r}var Ye={_driver:"localStorageWrapper",_initStorage:Me,_support:Ae(),iterate:Be,getItem:Ue,setItem:We,removeItem:Ge,clear:Fe,length:ze,key:He,keys:qe,dropInstance:Ve},Ze=function(e,t){return e===t||"number"==typeof e&&"number"==typeof t&&isNaN(e)&&isNaN(t)},$e=function(e,t){for(var n=e.length,r=0;r<n;){if(Ze(e[r],t))return!0;r++}return!1},Ke=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)},Qe={},Xe={},Je={INDEXEDDB:Y,WEBSQL:Ce,LOCALSTORAGE:Ye},et=[Je.INDEXEDDB._driver,Je.WEBSQL._driver,Je.LOCALSTORAGE._driver],tt=["dropInstance"],nt=["clear","getItem","iterate","key","keys","length","removeItem","setItem"].concat(tt),rt={description:"",driver:et.slice(),name:"localforage",size:4980736,storeName:"keyvaluepairs",version:1};function ot(e,t){e[t]=function(){var n=arguments;return e.ready().then((function(){return e[t].apply(e,n)}))}}function it(){for(var e=1;e<arguments.length;e++){var t=arguments[e];if(t)for(var n in t)t.hasOwnProperty(n)&&(Ke(t[n])?arguments[0][n]=t[n].slice():arguments[0][n]=t[n])}return arguments[0]}var at=new(function(){function e(t){for(var n in o(this,e),Je)if(Je.hasOwnProperty(n)){var r=Je[n],i=r._driver;this[n]=i,Qe[i]||this.defineDriver(r)}this._defaultConfig=it({},rt),this._config=it({},this._defaultConfig,t),this._driverSet=null,this._initDriver=null,this._ready=!1,this._dbInfo=null,this._wrapLibraryMethodsWithReady(),this.setDriver(this._config.driver).catch((function(){}))}return e.prototype.config=function(e){if("object"===(void 0===e?"undefined":r(e))){if(this._ready)return new Error("Can't call config() after localforage has been used.");for(var t in e){if("storeName"===t&&(e[t]=e[t].replace(/\W/g,"_")),"version"===t&&"number"!=typeof e[t])return new Error("Database version must be a number.");this._config[t]=e[t]}return!("driver"in e)||!e.driver||this.setDriver(this._config.driver)}return"string"==typeof e?this._config[e]:this._config},e.prototype.defineDriver=function(e,t,n){var r=new s((function(t,n){try{var r=e._driver,o=new Error("Custom driver not compliant; see https://mozilla.github.io/localForage/#definedriver");if(!e._driver)return void n(o);for(var i=nt.concat("_initStorage"),a=0,u=i.length;a<u;a++){var c=i[a];if((!$e(tt,c)||e[c])&&"function"!=typeof e[c])return void n(o)}!function(){for(var t=function(e){return function(){var t=new Error("Method "+e+" is not implemented by the current driver"),n=s.reject(t);return l(n,arguments[arguments.length-1]),n}},n=0,r=tt.length;n<r;n++){var o=tt[n];e[o]||(e[o]=t(o))}}();var f=function(n){Qe[r],Qe[r]=e,Xe[r]=n,t()};"_support"in e?e._support&&"function"==typeof e._support?e._support().then(f,n):f(!!e._support):f(!0)}catch(e){n(e)}}));return f(r,t,n),r},e.prototype.driver=function(){return this._driver||null},e.prototype.getDriver=function(e,t,n){var r=Qe[e]?s.resolve(Qe[e]):s.reject(new Error("Driver not found."));return f(r,t,n),r},e.prototype.getSerializer=function(e){var t=s.resolve(ve);return f(t,e),t},e.prototype.ready=function(e){var t=this,n=t._driverSet.then((function(){return null===t._ready&&(t._ready=t._initDriver()),t._ready}));return f(n,e,e),n},e.prototype.setDriver=function(e,t,n){var r=this;Ke(e)||(e=[e]);var o=this._getSupportedDrivers(e);function i(){r._config.driver=r.driver()}function a(e){return r._extend(e),i(),r._ready=r._initStorage(r._config),r._ready}function u(e){return function(){var t=0;function n(){for(;t<e.length;){var o=e[t];return t++,r._dbInfo=null,r._ready=null,r.getDriver(o).then(a).catch(n)}i();var u=new Error("No available storage method found.");return r._driverSet=s.reject(u),r._driverSet}return n()}}var c=null!==this._driverSet?this._driverSet.catch((function(){return s.resolve()})):s.resolve();return this._driverSet=c.then((function(){var e=o[0];return r._dbInfo=null,r._ready=null,r.getDriver(e).then((function(e){r._driver=e._driver,i(),r._wrapLibraryMethodsWithReady(),r._initDriver=u(o)}))})).catch((function(){i();var e=new Error("No available storage method found.");return r._driverSet=s.reject(e),r._driverSet})),f(this._driverSet,t,n),this._driverSet},e.prototype.supports=function(e){return!!Xe[e]},e.prototype._extend=function(e){it(this,e)},e.prototype._getSupportedDrivers=function(e){for(var t=[],n=0,r=e.length;n<r;n++){var o=e[n];this.supports(o)&&t.push(o)}return t},e.prototype._wrapLibraryMethodsWithReady=function(){for(var e=0,t=nt.length;e<t;e++)ot(this,nt[e])},e.prototype.createInstance=function(t){return new e(t)},e}());t.exports=at},{3:3}]},{},[4])(4)},87003:(e,t,n)=>{var r=/^\s+|\s+$/g,o=/^[-+]0x[0-9a-f]+$/i,i=/^0b[01]+$/i,a=/^0o[0-7]+$/i,u=parseInt,c="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,s="object"==typeof self&&self&&self.Object===Object&&self,l=c||s||Function("return this")(),f=Object.prototype.toString,p=Math.max,d=Math.min,h=function(){return l.Date.now()};function y(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function m(e){if("number"==typeof e)return e;if(function(e){return"symbol"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&"[object Symbol]"==f.call(e)}(e))return NaN;if(y(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=y(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(r,"");var n=i.test(e);return n||a.test(e)?u(e.slice(2),n?2:8):o.test(e)?NaN:+e}e.exports=function(e,t,n){var r,o,i,a,u,c,s=0,l=!1,f=!1,v=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function g(t){var n=r,i=o;return r=o=void 0,s=t,a=e.apply(i,n)}function b(e){return s=e,u=setTimeout(O,t),l?g(e):a}function w(e){var n=e-c;return void 0===c||n>=t||n<0||f&&e-s>=i}function O(){var e=h();if(w(e))return E(e);u=setTimeout(O,function(e){var n=t-(e-c);return f?d(n,i-(e-s)):n}(e))}function E(e){return u=void 0,v&&r?g(e):(r=o=void 0,a)}function _(){var e=h(),n=w(e);if(r=arguments,o=this,c=e,n){if(void 0===u)return b(c);if(f)return u=setTimeout(O,t),g(c)}return void 0===u&&(u=setTimeout(O,t)),a}return t=m(t)||0,y(n)&&(l=!!n.leading,i=(f="maxWait"in n)?p(m(n.maxWait)||0,t):i,v="trailing"in n?!!n.trailing:v),_.cancel=function(){void 0!==u&&clearTimeout(u),s=0,r=c=o=u=void 0},_.flush=function(){return void 0===u?a:E(h())},_}},8617:e=>{function t(e){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}t.keys=()=>[],t.resolve=t,t.id=8617,e.exports=t},59348:function(e,t,n){(e=n.nmd(e)).exports=function(){"use strict";var t,r;function o(){return t.apply(null,arguments)}function i(e){t=e}function a(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function u(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function c(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function s(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;var t;for(t in e)if(c(e,t))return!1;return!0}function l(e){return void 0===e}function f(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function p(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function d(e,t){var n,r=[],o=e.length;for(n=0;n<o;++n)r.push(t(e[n],n));return r}function h(e,t){for(var n in t)c(t,n)&&(e[n]=t[n]);return c(t,"toString")&&(e.toString=t.toString),c(t,"valueOf")&&(e.valueOf=t.valueOf),e}function y(e,t,n,r){return $n(e,t,n,r,!0).utc()}function m(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}}function v(e){return null==e._pf&&(e._pf=m()),e._pf}function g(e){if(null==e._isValid){var t=v(e),n=r.call(t.parsedDateParts,(function(e){return null!=e})),o=!isNaN(e._d.getTime())&&t.overflow<0&&!t.empty&&!t.invalidEra&&!t.invalidMonth&&!t.invalidWeekday&&!t.weekdayMismatch&&!t.nullInput&&!t.invalidFormat&&!t.userInvalidated&&(!t.meridiem||t.meridiem&&n);if(e._strict&&(o=o&&0===t.charsLeftOver&&0===t.unusedTokens.length&&void 0===t.bigHour),null!=Object.isFrozen&&Object.isFrozen(e))return o;e._isValid=o}return e._isValid}function b(e){var t=y(NaN);return null!=e?h(v(t),e):v(t).userInvalidated=!0,t}r=Array.prototype.some?Array.prototype.some:function(e){var t,n=Object(this),r=n.length>>>0;for(t=0;t<r;t++)if(t in n&&e.call(this,n[t],t,n))return!0;return!1};var w=o.momentProperties=[],O=!1;function E(e,t){var n,r,o,i=w.length;if(l(t._isAMomentObject)||(e._isAMomentObject=t._isAMomentObject),l(t._i)||(e._i=t._i),l(t._f)||(e._f=t._f),l(t._l)||(e._l=t._l),l(t._strict)||(e._strict=t._strict),l(t._tzm)||(e._tzm=t._tzm),l(t._isUTC)||(e._isUTC=t._isUTC),l(t._offset)||(e._offset=t._offset),l(t._pf)||(e._pf=v(t)),l(t._locale)||(e._locale=t._locale),i>0)for(n=0;n<i;n++)l(o=t[r=w[n]])||(e[r]=o);return e}function _(e){E(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===O&&(O=!0,o.updateOffset(this),O=!1)}function x(e){return e instanceof _||null!=e&&null!=e._isAMomentObject}function S(e){!1===o.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn}function j(e,t){var n=!0;return h((function(){if(null!=o.deprecationHandler&&o.deprecationHandler(null,e),n){var r,i,a,u=[],s=arguments.length;for(i=0;i<s;i++){if(r="","object"==typeof arguments[i]){for(a in r+="\n["+i+"] ",arguments[0])c(arguments[0],a)&&(r+=a+": "+arguments[0][a]+", ");r=r.slice(0,-2)}else r=arguments[i];u.push(r)}S(e+"\nArguments: "+Array.prototype.slice.call(u).join("")+"\n"+(new Error).stack),n=!1}return t.apply(this,arguments)}),t)}var P,k={};function I(e,t){null!=o.deprecationHandler&&o.deprecationHandler(e,t),k[e]||(S(t),k[e]=!0)}function T(e){return"undefined"!=typeof Function&&e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}function R(e){var t,n;for(n in e)c(e,n)&&(T(t=e[n])?this[n]=t:this["_"+n]=t);this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)}function C(e,t){var n,r=h({},e);for(n in t)c(t,n)&&(u(e[n])&&u(t[n])?(r[n]={},h(r[n],e[n]),h(r[n],t[n])):null!=t[n]?r[n]=t[n]:delete r[n]);for(n in e)c(e,n)&&!c(t,n)&&u(e[n])&&(r[n]=h({},r[n]));return r}function A(e){null!=e&&this.set(e)}o.suppressDeprecationWarnings=!1,o.deprecationHandler=null,P=Object.keys?Object.keys:function(e){var t,n=[];for(t in e)c(e,t)&&n.push(t);return n};var N={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"};function L(e,t,n){var r=this._calendar[e]||this._calendar.sameElse;return T(r)?r.call(t,n):r}function D(e,t,n){var r=""+Math.abs(e),o=t-r.length;return(e>=0?n?"+":"":"-")+Math.pow(10,Math.max(0,o)).toString().substr(1)+r}var M=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,F=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,U={},B={};function H(e,t,n,r){var o=r;"string"==typeof r&&(o=function(){return this[r]()}),e&&(B[e]=o),t&&(B[t[0]]=function(){return D(o.apply(this,arguments),t[1],t[2])}),n&&(B[n]=function(){return this.localeData().ordinal(o.apply(this,arguments),e)})}function q(e){return e.match(/\[[\s\S]/)?e.replace(/^\[|\]$/g,""):e.replace(/\\/g,"")}function z(e){var t,n,r=e.match(M);for(t=0,n=r.length;t<n;t++)B[r[t]]?r[t]=B[r[t]]:r[t]=q(r[t]);return function(t){var o,i="";for(o=0;o<n;o++)i+=T(r[o])?r[o].call(t,e):r[o];return i}}function G(e,t){return e.isValid()?(t=W(t,e.localeData()),U[t]=U[t]||z(t),U[t](e)):e.localeData().invalidDate()}function W(e,t){var n=5;function r(e){return t.longDateFormat(e)||e}for(F.lastIndex=0;n>=0&&F.test(e);)e=e.replace(F,r),F.lastIndex=0,n-=1;return e}var V={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};function Y(e){var t=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];return t||!n?t:(this._longDateFormat[e]=n.match(M).map((function(e){return"MMMM"===e||"MM"===e||"DD"===e||"dddd"===e?e.slice(1):e})).join(""),this._longDateFormat[e])}var Z="Invalid date";function $(){return this._invalidDate}var K="%d",Q=/\d{1,2}/;function X(e){return this._ordinal.replace("%d",e)}var J={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function ee(e,t,n,r){var o=this._relativeTime[n];return T(o)?o(e,t,n,r):o.replace(/%d/i,e)}function te(e,t){var n=this._relativeTime[e>0?"future":"past"];return T(n)?n(t):n.replace(/%s/i,t)}var ne={};function re(e,t){var n=e.toLowerCase();ne[n]=ne[n+"s"]=ne[t]=e}function oe(e){return"string"==typeof e?ne[e]||ne[e.toLowerCase()]:void 0}function ie(e){var t,n,r={};for(n in e)c(e,n)&&(t=oe(n))&&(r[t]=e[n]);return r}var ae={};function ue(e,t){ae[e]=t}function ce(e){var t,n=[];for(t in e)c(e,t)&&n.push({unit:t,priority:ae[t]});return n.sort((function(e,t){return e.priority-t.priority})),n}function se(e){return e%4==0&&e%100!=0||e%400==0}function le(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function fe(e){var t=+e,n=0;return 0!==t&&isFinite(t)&&(n=le(t)),n}function pe(e,t){return function(n){return null!=n?(he(this,e,n),o.updateOffset(this,t),this):de(this,e)}}function de(e,t){return e.isValid()?e._d["get"+(e._isUTC?"UTC":"")+t]():NaN}function he(e,t,n){e.isValid()&&!isNaN(n)&&("FullYear"===t&&se(e.year())&&1===e.month()&&29===e.date()?(n=fe(n),e._d["set"+(e._isUTC?"UTC":"")+t](n,e.month(),et(n,e.month()))):e._d["set"+(e._isUTC?"UTC":"")+t](n))}function ye(e){return T(this[e=oe(e)])?this[e]():this}function me(e,t){if("object"==typeof e){var n,r=ce(e=ie(e)),o=r.length;for(n=0;n<o;n++)this[r[n].unit](e[r[n].unit])}else if(T(this[e=oe(e)]))return this[e](t);return this}var ve,ge=/\d/,be=/\d\d/,we=/\d{3}/,Oe=/\d{4}/,Ee=/[+-]?\d{6}/,_e=/\d\d?/,xe=/\d\d\d\d?/,Se=/\d\d\d\d\d\d?/,je=/\d{1,3}/,Pe=/\d{1,4}/,ke=/[+-]?\d{1,6}/,Ie=/\d+/,Te=/[+-]?\d+/,Re=/Z|[+-]\d\d:?\d\d/gi,Ce=/Z|[+-]\d\d(?::?\d\d)?/gi,Ae=/[+-]?\d+(\.\d{1,3})?/,Ne=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i;function Le(e,t,n){ve[e]=T(t)?t:function(e,r){return e&&n?n:t}}function De(e,t){return c(ve,e)?ve[e](t._strict,t._locale):new RegExp(Me(e))}function Me(e){return Fe(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,(function(e,t,n,r,o){return t||n||r||o})))}function Fe(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}ve={};var Ue={};function Be(e,t){var n,r,o=t;for("string"==typeof e&&(e=[e]),f(t)&&(o=function(e,n){n[t]=fe(e)}),r=e.length,n=0;n<r;n++)Ue[e[n]]=o}function He(e,t){Be(e,(function(e,n,r,o){r._w=r._w||{},t(e,r._w,r,o)}))}function qe(e,t,n){null!=t&&c(Ue,e)&&Ue[e](t,n._a,n,e)}var ze,Ge=0,We=1,Ve=2,Ye=3,Ze=4,$e=5,Ke=6,Qe=7,Xe=8;function Je(e,t){return(e%t+t)%t}function et(e,t){if(isNaN(e)||isNaN(t))return NaN;var n=Je(t,12);return e+=(t-n)/12,1===n?se(e)?29:28:31-n%7%2}ze=Array.prototype.indexOf?Array.prototype.indexOf:function(e){var t;for(t=0;t<this.length;++t)if(this[t]===e)return t;return-1},H("M",["MM",2],"Mo",(function(){return this.month()+1})),H("MMM",0,0,(function(e){return this.localeData().monthsShort(this,e)})),H("MMMM",0,0,(function(e){return this.localeData().months(this,e)})),re("month","M"),ue("month",8),Le("M",_e),Le("MM",_e,be),Le("MMM",(function(e,t){return t.monthsShortRegex(e)})),Le("MMMM",(function(e,t){return t.monthsRegex(e)})),Be(["M","MM"],(function(e,t){t[We]=fe(e)-1})),Be(["MMM","MMMM"],(function(e,t,n,r){var o=n._locale.monthsParse(e,r,n._strict);null!=o?t[We]=o:v(n).invalidMonth=e}));var tt="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),nt="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),rt=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,ot=Ne,it=Ne;function at(e,t){return e?a(this._months)?this._months[e.month()]:this._months[(this._months.isFormat||rt).test(t)?"format":"standalone"][e.month()]:a(this._months)?this._months:this._months.standalone}function ut(e,t){return e?a(this._monthsShort)?this._monthsShort[e.month()]:this._monthsShort[rt.test(t)?"format":"standalone"][e.month()]:a(this._monthsShort)?this._monthsShort:this._monthsShort.standalone}function ct(e,t,n){var r,o,i,a=e.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],r=0;r<12;++r)i=y([2e3,r]),this._shortMonthsParse[r]=this.monthsShort(i,"").toLocaleLowerCase(),this._longMonthsParse[r]=this.months(i,"").toLocaleLowerCase();return n?"MMM"===t?-1!==(o=ze.call(this._shortMonthsParse,a))?o:null:-1!==(o=ze.call(this._longMonthsParse,a))?o:null:"MMM"===t?-1!==(o=ze.call(this._shortMonthsParse,a))||-1!==(o=ze.call(this._longMonthsParse,a))?o:null:-1!==(o=ze.call(this._longMonthsParse,a))||-1!==(o=ze.call(this._shortMonthsParse,a))?o:null}function st(e,t,n){var r,o,i;if(this._monthsParseExact)return ct.call(this,e,t,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),r=0;r<12;r++){if(o=y([2e3,r]),n&&!this._longMonthsParse[r]&&(this._longMonthsParse[r]=new RegExp("^"+this.months(o,"").replace(".","")+"$","i"),this._shortMonthsParse[r]=new RegExp("^"+this.monthsShort(o,"").replace(".","")+"$","i")),n||this._monthsParse[r]||(i="^"+this.months(o,"")+"|^"+this.monthsShort(o,""),this._monthsParse[r]=new RegExp(i.replace(".",""),"i")),n&&"MMMM"===t&&this._longMonthsParse[r].test(e))return r;if(n&&"MMM"===t&&this._shortMonthsParse[r].test(e))return r;if(!n&&this._monthsParse[r].test(e))return r}}function lt(e,t){var n;if(!e.isValid())return e;if("string"==typeof t)if(/^\d+$/.test(t))t=fe(t);else if(!f(t=e.localeData().monthsParse(t)))return e;return n=Math.min(e.date(),et(e.year(),t)),e._d["set"+(e._isUTC?"UTC":"")+"Month"](t,n),e}function ft(e){return null!=e?(lt(this,e),o.updateOffset(this,!0),this):de(this,"Month")}function pt(){return et(this.year(),this.month())}function dt(e){return this._monthsParseExact?(c(this,"_monthsRegex")||yt.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(c(this,"_monthsShortRegex")||(this._monthsShortRegex=ot),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)}function ht(e){return this._monthsParseExact?(c(this,"_monthsRegex")||yt.call(this),e?this._monthsStrictRegex:this._monthsRegex):(c(this,"_monthsRegex")||(this._monthsRegex=it),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)}function yt(){function e(e,t){return t.length-e.length}var t,n,r=[],o=[],i=[];for(t=0;t<12;t++)n=y([2e3,t]),r.push(this.monthsShort(n,"")),o.push(this.months(n,"")),i.push(this.months(n,"")),i.push(this.monthsShort(n,""));for(r.sort(e),o.sort(e),i.sort(e),t=0;t<12;t++)r[t]=Fe(r[t]),o[t]=Fe(o[t]);for(t=0;t<24;t++)i[t]=Fe(i[t]);this._monthsRegex=new RegExp("^("+i.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+o.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+r.join("|")+")","i")}function mt(e){return se(e)?366:365}H("Y",0,0,(function(){var e=this.year();return e<=9999?D(e,4):"+"+e})),H(0,["YY",2],0,(function(){return this.year()%100})),H(0,["YYYY",4],0,"year"),H(0,["YYYYY",5],0,"year"),H(0,["YYYYYY",6,!0],0,"year"),re("year","y"),ue("year",1),Le("Y",Te),Le("YY",_e,be),Le("YYYY",Pe,Oe),Le("YYYYY",ke,Ee),Le("YYYYYY",ke,Ee),Be(["YYYYY","YYYYYY"],Ge),Be("YYYY",(function(e,t){t[Ge]=2===e.length?o.parseTwoDigitYear(e):fe(e)})),Be("YY",(function(e,t){t[Ge]=o.parseTwoDigitYear(e)})),Be("Y",(function(e,t){t[Ge]=parseInt(e,10)})),o.parseTwoDigitYear=function(e){return fe(e)+(fe(e)>68?1900:2e3)};var vt=pe("FullYear",!0);function gt(){return se(this.year())}function bt(e,t,n,r,o,i,a){var u;return e<100&&e>=0?(u=new Date(e+400,t,n,r,o,i,a),isFinite(u.getFullYear())&&u.setFullYear(e)):u=new Date(e,t,n,r,o,i,a),u}function wt(e){var t,n;return e<100&&e>=0?((n=Array.prototype.slice.call(arguments))[0]=e+400,t=new Date(Date.UTC.apply(null,n)),isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e)):t=new Date(Date.UTC.apply(null,arguments)),t}function Ot(e,t,n){var r=7+t-n;return-(7+wt(e,0,r).getUTCDay()-t)%7+r-1}function Et(e,t,n,r,o){var i,a,u=1+7*(t-1)+(7+n-r)%7+Ot(e,r,o);return u<=0?a=mt(i=e-1)+u:u>mt(e)?(i=e+1,a=u-mt(e)):(i=e,a=u),{year:i,dayOfYear:a}}function _t(e,t,n){var r,o,i=Ot(e.year(),t,n),a=Math.floor((e.dayOfYear()-i-1)/7)+1;return a<1?r=a+xt(o=e.year()-1,t,n):a>xt(e.year(),t,n)?(r=a-xt(e.year(),t,n),o=e.year()+1):(o=e.year(),r=a),{week:r,year:o}}function xt(e,t,n){var r=Ot(e,t,n),o=Ot(e+1,t,n);return(mt(e)-r+o)/7}function St(e){return _t(e,this._week.dow,this._week.doy).week}H("w",["ww",2],"wo","week"),H("W",["WW",2],"Wo","isoWeek"),re("week","w"),re("isoWeek","W"),ue("week",5),ue("isoWeek",5),Le("w",_e),Le("ww",_e,be),Le("W",_e),Le("WW",_e,be),He(["w","ww","W","WW"],(function(e,t,n,r){t[r.substr(0,1)]=fe(e)}));var jt={dow:0,doy:6};function Pt(){return this._week.dow}function kt(){return this._week.doy}function It(e){var t=this.localeData().week(this);return null==e?t:this.add(7*(e-t),"d")}function Tt(e){var t=_t(this,1,4).week;return null==e?t:this.add(7*(e-t),"d")}function Rt(e,t){return"string"!=typeof e?e:isNaN(e)?"number"==typeof(e=t.weekdaysParse(e))?e:null:parseInt(e,10)}function Ct(e,t){return"string"==typeof e?t.weekdaysParse(e)%7||7:isNaN(e)?null:e}function At(e,t){return e.slice(t,7).concat(e.slice(0,t))}H("d",0,"do","day"),H("dd",0,0,(function(e){return this.localeData().weekdaysMin(this,e)})),H("ddd",0,0,(function(e){return this.localeData().weekdaysShort(this,e)})),H("dddd",0,0,(function(e){return this.localeData().weekdays(this,e)})),H("e",0,0,"weekday"),H("E",0,0,"isoWeekday"),re("day","d"),re("weekday","e"),re("isoWeekday","E"),ue("day",11),ue("weekday",11),ue("isoWeekday",11),Le("d",_e),Le("e",_e),Le("E",_e),Le("dd",(function(e,t){return t.weekdaysMinRegex(e)})),Le("ddd",(function(e,t){return t.weekdaysShortRegex(e)})),Le("dddd",(function(e,t){return t.weekdaysRegex(e)})),He(["dd","ddd","dddd"],(function(e,t,n,r){var o=n._locale.weekdaysParse(e,r,n._strict);null!=o?t.d=o:v(n).invalidWeekday=e})),He(["d","e","E"],(function(e,t,n,r){t[r]=fe(e)}));var Nt="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Lt="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Dt="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Mt=Ne,Ft=Ne,Ut=Ne;function Bt(e,t){var n=a(this._weekdays)?this._weekdays:this._weekdays[e&&!0!==e&&this._weekdays.isFormat.test(t)?"format":"standalone"];return!0===e?At(n,this._week.dow):e?n[e.day()]:n}function Ht(e){return!0===e?At(this._weekdaysShort,this._week.dow):e?this._weekdaysShort[e.day()]:this._weekdaysShort}function qt(e){return!0===e?At(this._weekdaysMin,this._week.dow):e?this._weekdaysMin[e.day()]:this._weekdaysMin}function zt(e,t,n){var r,o,i,a=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],r=0;r<7;++r)i=y([2e3,1]).day(r),this._minWeekdaysParse[r]=this.weekdaysMin(i,"").toLocaleLowerCase(),this._shortWeekdaysParse[r]=this.weekdaysShort(i,"").toLocaleLowerCase(),this._weekdaysParse[r]=this.weekdays(i,"").toLocaleLowerCase();return n?"dddd"===t?-1!==(o=ze.call(this._weekdaysParse,a))?o:null:"ddd"===t?-1!==(o=ze.call(this._shortWeekdaysParse,a))?o:null:-1!==(o=ze.call(this._minWeekdaysParse,a))?o:null:"dddd"===t?-1!==(o=ze.call(this._weekdaysParse,a))||-1!==(o=ze.call(this._shortWeekdaysParse,a))||-1!==(o=ze.call(this._minWeekdaysParse,a))?o:null:"ddd"===t?-1!==(o=ze.call(this._shortWeekdaysParse,a))||-1!==(o=ze.call(this._weekdaysParse,a))||-1!==(o=ze.call(this._minWeekdaysParse,a))?o:null:-1!==(o=ze.call(this._minWeekdaysParse,a))||-1!==(o=ze.call(this._weekdaysParse,a))||-1!==(o=ze.call(this._shortWeekdaysParse,a))?o:null}function Gt(e,t,n){var r,o,i;if(this._weekdaysParseExact)return zt.call(this,e,t,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),r=0;r<7;r++){if(o=y([2e3,1]).day(r),n&&!this._fullWeekdaysParse[r]&&(this._fullWeekdaysParse[r]=new RegExp("^"+this.weekdays(o,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[r]=new RegExp("^"+this.weekdaysShort(o,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[r]=new RegExp("^"+this.weekdaysMin(o,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[r]||(i="^"+this.weekdays(o,"")+"|^"+this.weekdaysShort(o,"")+"|^"+this.weekdaysMin(o,""),this._weekdaysParse[r]=new RegExp(i.replace(".",""),"i")),n&&"dddd"===t&&this._fullWeekdaysParse[r].test(e))return r;if(n&&"ddd"===t&&this._shortWeekdaysParse[r].test(e))return r;if(n&&"dd"===t&&this._minWeekdaysParse[r].test(e))return r;if(!n&&this._weekdaysParse[r].test(e))return r}}function Wt(e){if(!this.isValid())return null!=e?this:NaN;var t=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=e?(e=Rt(e,this.localeData()),this.add(e-t,"d")):t}function Vt(e){if(!this.isValid())return null!=e?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return null==e?t:this.add(e-t,"d")}function Yt(e){if(!this.isValid())return null!=e?this:NaN;if(null!=e){var t=Ct(e,this.localeData());return this.day(this.day()%7?t:t-7)}return this.day()||7}function Zt(e){return this._weekdaysParseExact?(c(this,"_weekdaysRegex")||Qt.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(c(this,"_weekdaysRegex")||(this._weekdaysRegex=Mt),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)}function $t(e){return this._weekdaysParseExact?(c(this,"_weekdaysRegex")||Qt.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(c(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Ft),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Kt(e){return this._weekdaysParseExact?(c(this,"_weekdaysRegex")||Qt.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(c(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Ut),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Qt(){function e(e,t){return t.length-e.length}var t,n,r,o,i,a=[],u=[],c=[],s=[];for(t=0;t<7;t++)n=y([2e3,1]).day(t),r=Fe(this.weekdaysMin(n,"")),o=Fe(this.weekdaysShort(n,"")),i=Fe(this.weekdays(n,"")),a.push(r),u.push(o),c.push(i),s.push(r),s.push(o),s.push(i);a.sort(e),u.sort(e),c.sort(e),s.sort(e),this._weekdaysRegex=new RegExp("^("+s.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+c.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+a.join("|")+")","i")}function Xt(){return this.hours()%12||12}function Jt(){return this.hours()||24}function en(e,t){H(e,0,0,(function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)}))}function tn(e,t){return t._meridiemParse}function nn(e){return"p"===(e+"").toLowerCase().charAt(0)}H("H",["HH",2],0,"hour"),H("h",["hh",2],0,Xt),H("k",["kk",2],0,Jt),H("hmm",0,0,(function(){return""+Xt.apply(this)+D(this.minutes(),2)})),H("hmmss",0,0,(function(){return""+Xt.apply(this)+D(this.minutes(),2)+D(this.seconds(),2)})),H("Hmm",0,0,(function(){return""+this.hours()+D(this.minutes(),2)})),H("Hmmss",0,0,(function(){return""+this.hours()+D(this.minutes(),2)+D(this.seconds(),2)})),en("a",!0),en("A",!1),re("hour","h"),ue("hour",13),Le("a",tn),Le("A",tn),Le("H",_e),Le("h",_e),Le("k",_e),Le("HH",_e,be),Le("hh",_e,be),Le("kk",_e,be),Le("hmm",xe),Le("hmmss",Se),Le("Hmm",xe),Le("Hmmss",Se),Be(["H","HH"],Ye),Be(["k","kk"],(function(e,t,n){var r=fe(e);t[Ye]=24===r?0:r})),Be(["a","A"],(function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e})),Be(["h","hh"],(function(e,t,n){t[Ye]=fe(e),v(n).bigHour=!0})),Be("hmm",(function(e,t,n){var r=e.length-2;t[Ye]=fe(e.substr(0,r)),t[Ze]=fe(e.substr(r)),v(n).bigHour=!0})),Be("hmmss",(function(e,t,n){var r=e.length-4,o=e.length-2;t[Ye]=fe(e.substr(0,r)),t[Ze]=fe(e.substr(r,2)),t[$e]=fe(e.substr(o)),v(n).bigHour=!0})),Be("Hmm",(function(e,t,n){var r=e.length-2;t[Ye]=fe(e.substr(0,r)),t[Ze]=fe(e.substr(r))})),Be("Hmmss",(function(e,t,n){var r=e.length-4,o=e.length-2;t[Ye]=fe(e.substr(0,r)),t[Ze]=fe(e.substr(r,2)),t[$e]=fe(e.substr(o))}));var rn=/[ap]\.?m?\.?/i,on=pe("Hours",!0);function an(e,t,n){return e>11?n?"pm":"PM":n?"am":"AM"}var un,cn={calendar:N,longDateFormat:V,invalidDate:Z,ordinal:K,dayOfMonthOrdinalParse:Q,relativeTime:J,months:tt,monthsShort:nt,week:jt,weekdays:Nt,weekdaysMin:Dt,weekdaysShort:Lt,meridiemParse:rn},sn={},ln={};function fn(e,t){var n,r=Math.min(e.length,t.length);for(n=0;n<r;n+=1)if(e[n]!==t[n])return n;return r}function pn(e){return e?e.toLowerCase().replace("_","-"):e}function dn(e){for(var t,n,r,o,i=0;i<e.length;){for(t=(o=pn(e[i]).split("-")).length,n=(n=pn(e[i+1]))?n.split("-"):null;t>0;){if(r=yn(o.slice(0,t).join("-")))return r;if(n&&n.length>=t&&fn(o,n)>=t-1)break;t--}i++}return un}function hn(e){return null!=e.match("^[^/\\\\]*$")}function yn(t){var r=null;if(void 0===sn[t]&&e&&e.exports&&hn(t))try{r=un._abbr,n(8617)("./"+t),mn(r)}catch(e){sn[t]=null}return sn[t]}function mn(e,t){var n;return e&&((n=l(t)?bn(e):vn(e,t))?un=n:"undefined"!=typeof console&&console.warn),un._abbr}function vn(e,t){if(null!==t){var n,r=cn;if(t.abbr=e,null!=sn[e])I("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),r=sn[e]._config;else if(null!=t.parentLocale)if(null!=sn[t.parentLocale])r=sn[t.parentLocale]._config;else{if(null==(n=yn(t.parentLocale)))return ln[t.parentLocale]||(ln[t.parentLocale]=[]),ln[t.parentLocale].push({name:e,config:t}),null;r=n._config}return sn[e]=new A(C(r,t)),ln[e]&&ln[e].forEach((function(e){vn(e.name,e.config)})),mn(e),sn[e]}return delete sn[e],null}function gn(e,t){if(null!=t){var n,r,o=cn;null!=sn[e]&&null!=sn[e].parentLocale?sn[e].set(C(sn[e]._config,t)):(null!=(r=yn(e))&&(o=r._config),t=C(o,t),null==r&&(t.abbr=e),(n=new A(t)).parentLocale=sn[e],sn[e]=n),mn(e)}else null!=sn[e]&&(null!=sn[e].parentLocale?(sn[e]=sn[e].parentLocale,e===mn()&&mn(e)):null!=sn[e]&&delete sn[e]);return sn[e]}function bn(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return un;if(!a(e)){if(t=yn(e))return t;e=[e]}return dn(e)}function wn(){return P(sn)}function On(e){var t,n=e._a;return n&&-2===v(e).overflow&&(t=n[We]<0||n[We]>11?We:n[Ve]<1||n[Ve]>et(n[Ge],n[We])?Ve:n[Ye]<0||n[Ye]>24||24===n[Ye]&&(0!==n[Ze]||0!==n[$e]||0!==n[Ke])?Ye:n[Ze]<0||n[Ze]>59?Ze:n[$e]<0||n[$e]>59?$e:n[Ke]<0||n[Ke]>999?Ke:-1,v(e)._overflowDayOfYear&&(t<Ge||t>Ve)&&(t=Ve),v(e)._overflowWeeks&&-1===t&&(t=Qe),v(e)._overflowWeekday&&-1===t&&(t=Xe),v(e).overflow=t),e}var En=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,_n=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,xn=/Z|[+-]\d\d(?::?\d\d)?/,Sn=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],jn=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Pn=/^\/?Date\((-?\d+)/i,kn=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,In={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function Tn(e){var t,n,r,o,i,a,u=e._i,c=En.exec(u)||_n.exec(u),s=Sn.length,l=jn.length;if(c){for(v(e).iso=!0,t=0,n=s;t<n;t++)if(Sn[t][1].exec(c[1])){o=Sn[t][0],r=!1!==Sn[t][2];break}if(null==o)return void(e._isValid=!1);if(c[3]){for(t=0,n=l;t<n;t++)if(jn[t][1].exec(c[3])){i=(c[2]||" ")+jn[t][0];break}if(null==i)return void(e._isValid=!1)}if(!r&&null!=i)return void(e._isValid=!1);if(c[4]){if(!xn.exec(c[4]))return void(e._isValid=!1);a="Z"}e._f=o+(i||"")+(a||""),qn(e)}else e._isValid=!1}function Rn(e,t,n,r,o,i){var a=[Cn(e),nt.indexOf(t),parseInt(n,10),parseInt(r,10),parseInt(o,10)];return i&&a.push(parseInt(i,10)),a}function Cn(e){var t=parseInt(e,10);return t<=49?2e3+t:t<=999?1900+t:t}function An(e){return e.replace(/\([^()]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,"")}function Nn(e,t,n){return!e||Lt.indexOf(e)===new Date(t[0],t[1],t[2]).getDay()||(v(n).weekdayMismatch=!0,n._isValid=!1,!1)}function Ln(e,t,n){if(e)return In[e];if(t)return 0;var r=parseInt(n,10),o=r%100;return(r-o)/100*60+o}function Dn(e){var t,n=kn.exec(An(e._i));if(n){if(t=Rn(n[4],n[3],n[2],n[5],n[6],n[7]),!Nn(n[1],t,e))return;e._a=t,e._tzm=Ln(n[8],n[9],n[10]),e._d=wt.apply(null,e._a),e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),v(e).rfc2822=!0}else e._isValid=!1}function Mn(e){var t=Pn.exec(e._i);null===t?(Tn(e),!1===e._isValid&&(delete e._isValid,Dn(e),!1===e._isValid&&(delete e._isValid,e._strict?e._isValid=!1:o.createFromInputFallback(e)))):e._d=new Date(+t[1])}function Fn(e,t,n){return null!=e?e:null!=t?t:n}function Un(e){var t=new Date(o.now());return e._useUTC?[t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate()]:[t.getFullYear(),t.getMonth(),t.getDate()]}function Bn(e){var t,n,r,o,i,a=[];if(!e._d){for(r=Un(e),e._w&&null==e._a[Ve]&&null==e._a[We]&&Hn(e),null!=e._dayOfYear&&(i=Fn(e._a[Ge],r[Ge]),(e._dayOfYear>mt(i)||0===e._dayOfYear)&&(v(e)._overflowDayOfYear=!0),n=wt(i,0,e._dayOfYear),e._a[We]=n.getUTCMonth(),e._a[Ve]=n.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=a[t]=r[t];for(;t<7;t++)e._a[t]=a[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[Ye]&&0===e._a[Ze]&&0===e._a[$e]&&0===e._a[Ke]&&(e._nextDay=!0,e._a[Ye]=0),e._d=(e._useUTC?wt:bt).apply(null,a),o=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[Ye]=24),e._w&&void 0!==e._w.d&&e._w.d!==o&&(v(e).weekdayMismatch=!0)}}function Hn(e){var t,n,r,o,i,a,u,c,s;null!=(t=e._w).GG||null!=t.W||null!=t.E?(i=1,a=4,n=Fn(t.GG,e._a[Ge],_t(Kn(),1,4).year),r=Fn(t.W,1),((o=Fn(t.E,1))<1||o>7)&&(c=!0)):(i=e._locale._week.dow,a=e._locale._week.doy,s=_t(Kn(),i,a),n=Fn(t.gg,e._a[Ge],s.year),r=Fn(t.w,s.week),null!=t.d?((o=t.d)<0||o>6)&&(c=!0):null!=t.e?(o=t.e+i,(t.e<0||t.e>6)&&(c=!0)):o=i),r<1||r>xt(n,i,a)?v(e)._overflowWeeks=!0:null!=c?v(e)._overflowWeekday=!0:(u=Et(n,r,o,i,a),e._a[Ge]=u.year,e._dayOfYear=u.dayOfYear)}function qn(e){if(e._f!==o.ISO_8601)if(e._f!==o.RFC_2822){e._a=[],v(e).empty=!0;var t,n,r,i,a,u,c,s=""+e._i,l=s.length,f=0;for(c=(r=W(e._f,e._locale).match(M)||[]).length,t=0;t<c;t++)i=r[t],(n=(s.match(De(i,e))||[])[0])&&((a=s.substr(0,s.indexOf(n))).length>0&&v(e).unusedInput.push(a),s=s.slice(s.indexOf(n)+n.length),f+=n.length),B[i]?(n?v(e).empty=!1:v(e).unusedTokens.push(i),qe(i,n,e)):e._strict&&!n&&v(e).unusedTokens.push(i);v(e).charsLeftOver=l-f,s.length>0&&v(e).unusedInput.push(s),e._a[Ye]<=12&&!0===v(e).bigHour&&e._a[Ye]>0&&(v(e).bigHour=void 0),v(e).parsedDateParts=e._a.slice(0),v(e).meridiem=e._meridiem,e._a[Ye]=zn(e._locale,e._a[Ye],e._meridiem),null!==(u=v(e).era)&&(e._a[Ge]=e._locale.erasConvertYear(u,e._a[Ge])),Bn(e),On(e)}else Dn(e);else Tn(e)}function zn(e,t,n){var r;return null==n?t:null!=e.meridiemHour?e.meridiemHour(t,n):null!=e.isPM?((r=e.isPM(n))&&t<12&&(t+=12),r||12!==t||(t=0),t):t}function Gn(e){var t,n,r,o,i,a,u=!1,c=e._f.length;if(0===c)return v(e).invalidFormat=!0,void(e._d=new Date(NaN));for(o=0;o<c;o++)i=0,a=!1,t=E({},e),null!=e._useUTC&&(t._useUTC=e._useUTC),t._f=e._f[o],qn(t),g(t)&&(a=!0),i+=v(t).charsLeftOver,i+=10*v(t).unusedTokens.length,v(t).score=i,u?i<r&&(r=i,n=t):(null==r||i<r||a)&&(r=i,n=t,a&&(u=!0));h(e,n||t)}function Wn(e){if(!e._d){var t=ie(e._i),n=void 0===t.day?t.date:t.day;e._a=d([t.year,t.month,n,t.hour,t.minute,t.second,t.millisecond],(function(e){return e&&parseInt(e,10)})),Bn(e)}}function Vn(e){var t=new _(On(Yn(e)));return t._nextDay&&(t.add(1,"d"),t._nextDay=void 0),t}function Yn(e){var t=e._i,n=e._f;return e._locale=e._locale||bn(e._l),null===t||void 0===n&&""===t?b({nullInput:!0}):("string"==typeof t&&(e._i=t=e._locale.preparse(t)),x(t)?new _(On(t)):(p(t)?e._d=t:a(n)?Gn(e):n?qn(e):Zn(e),g(e)||(e._d=null),e))}function Zn(e){var t=e._i;l(t)?e._d=new Date(o.now()):p(t)?e._d=new Date(t.valueOf()):"string"==typeof t?Mn(e):a(t)?(e._a=d(t.slice(0),(function(e){return parseInt(e,10)})),Bn(e)):u(t)?Wn(e):f(t)?e._d=new Date(t):o.createFromInputFallback(e)}function $n(e,t,n,r,o){var i={};return!0!==t&&!1!==t||(r=t,t=void 0),!0!==n&&!1!==n||(r=n,n=void 0),(u(e)&&s(e)||a(e)&&0===e.length)&&(e=void 0),i._isAMomentObject=!0,i._useUTC=i._isUTC=o,i._l=n,i._i=e,i._f=t,i._strict=r,Vn(i)}function Kn(e,t,n,r){return $n(e,t,n,r,!1)}o.createFromInputFallback=j("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",(function(e){e._d=new Date(e._i+(e._useUTC?" UTC":""))})),o.ISO_8601=function(){},o.RFC_2822=function(){};var Qn=j("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var e=Kn.apply(null,arguments);return this.isValid()&&e.isValid()?e<this?this:e:b()})),Xn=j("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var e=Kn.apply(null,arguments);return this.isValid()&&e.isValid()?e>this?this:e:b()}));function Jn(e,t){var n,r;if(1===t.length&&a(t[0])&&(t=t[0]),!t.length)return Kn();for(n=t[0],r=1;r<t.length;++r)t[r].isValid()&&!t[r][e](n)||(n=t[r]);return n}function er(){return Jn("isBefore",[].slice.call(arguments,0))}function tr(){return Jn("isAfter",[].slice.call(arguments,0))}var nr=function(){return Date.now?Date.now():+new Date},rr=["year","quarter","month","week","day","hour","minute","second","millisecond"];function or(e){var t,n,r=!1,o=rr.length;for(t in e)if(c(e,t)&&(-1===ze.call(rr,t)||null!=e[t]&&isNaN(e[t])))return!1;for(n=0;n<o;++n)if(e[rr[n]]){if(r)return!1;parseFloat(e[rr[n]])!==fe(e[rr[n]])&&(r=!0)}return!0}function ir(){return this._isValid}function ar(){return Ir(NaN)}function ur(e){var t=ie(e),n=t.year||0,r=t.quarter||0,o=t.month||0,i=t.week||t.isoWeek||0,a=t.day||0,u=t.hour||0,c=t.minute||0,s=t.second||0,l=t.millisecond||0;this._isValid=or(t),this._milliseconds=+l+1e3*s+6e4*c+1e3*u*60*60,this._days=+a+7*i,this._months=+o+3*r+12*n,this._data={},this._locale=bn(),this._bubble()}function cr(e){return e instanceof ur}function sr(e){return e<0?-1*Math.round(-1*e):Math.round(e)}function lr(e,t,n){var r,o=Math.min(e.length,t.length),i=Math.abs(e.length-t.length),a=0;for(r=0;r<o;r++)(n&&e[r]!==t[r]||!n&&fe(e[r])!==fe(t[r]))&&a++;return a+i}function fr(e,t){H(e,0,0,(function(){var e=this.utcOffset(),n="+";return e<0&&(e=-e,n="-"),n+D(~~(e/60),2)+t+D(~~e%60,2)}))}fr("Z",":"),fr("ZZ",""),Le("Z",Ce),Le("ZZ",Ce),Be(["Z","ZZ"],(function(e,t,n){n._useUTC=!0,n._tzm=dr(Ce,e)}));var pr=/([\+\-]|\d\d)/gi;function dr(e,t){var n,r,o=(t||"").match(e);return null===o?null:0===(r=60*(n=((o[o.length-1]||[])+"").match(pr)||["-",0,0])[1]+fe(n[2]))?0:"+"===n[0]?r:-r}function hr(e,t){var n,r;return t._isUTC?(n=t.clone(),r=(x(e)||p(e)?e.valueOf():Kn(e).valueOf())-n.valueOf(),n._d.setTime(n._d.valueOf()+r),o.updateOffset(n,!1),n):Kn(e).local()}function yr(e){return-Math.round(e._d.getTimezoneOffset())}function mr(e,t,n){var r,i=this._offset||0;if(!this.isValid())return null!=e?this:NaN;if(null!=e){if("string"==typeof e){if(null===(e=dr(Ce,e)))return this}else Math.abs(e)<16&&!n&&(e*=60);return!this._isUTC&&t&&(r=yr(this)),this._offset=e,this._isUTC=!0,null!=r&&this.add(r,"m"),i!==e&&(!t||this._changeInProgress?Nr(this,Ir(e-i,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,o.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?i:yr(this)}function vr(e,t){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()}function gr(e){return this.utcOffset(0,e)}function br(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(yr(this),"m")),this}function wr(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var e=dr(Re,this._i);null!=e?this.utcOffset(e):this.utcOffset(0,!0)}return this}function Or(e){return!!this.isValid()&&(e=e?Kn(e).utcOffset():0,(this.utcOffset()-e)%60==0)}function Er(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function _r(){if(!l(this._isDSTShifted))return this._isDSTShifted;var e,t={};return E(t,this),(t=Yn(t))._a?(e=t._isUTC?y(t._a):Kn(t._a),this._isDSTShifted=this.isValid()&&lr(t._a,e.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}function xr(){return!!this.isValid()&&!this._isUTC}function Sr(){return!!this.isValid()&&this._isUTC}function jr(){return!!this.isValid()&&this._isUTC&&0===this._offset}o.updateOffset=function(){};var Pr=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,kr=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Ir(e,t){var n,r,o,i=e,a=null;return cr(e)?i={ms:e._milliseconds,d:e._days,M:e._months}:f(e)||!isNaN(+e)?(i={},t?i[t]=+e:i.milliseconds=+e):(a=Pr.exec(e))?(n="-"===a[1]?-1:1,i={y:0,d:fe(a[Ve])*n,h:fe(a[Ye])*n,m:fe(a[Ze])*n,s:fe(a[$e])*n,ms:fe(sr(1e3*a[Ke]))*n}):(a=kr.exec(e))?(n="-"===a[1]?-1:1,i={y:Tr(a[2],n),M:Tr(a[3],n),w:Tr(a[4],n),d:Tr(a[5],n),h:Tr(a[6],n),m:Tr(a[7],n),s:Tr(a[8],n)}):null==i?i={}:"object"==typeof i&&("from"in i||"to"in i)&&(o=Cr(Kn(i.from),Kn(i.to)),(i={}).ms=o.milliseconds,i.M=o.months),r=new ur(i),cr(e)&&c(e,"_locale")&&(r._locale=e._locale),cr(e)&&c(e,"_isValid")&&(r._isValid=e._isValid),r}function Tr(e,t){var n=e&&parseFloat(e.replace(",","."));return(isNaN(n)?0:n)*t}function Rr(e,t){var n={};return n.months=t.month()-e.month()+12*(t.year()-e.year()),e.clone().add(n.months,"M").isAfter(t)&&--n.months,n.milliseconds=+t-+e.clone().add(n.months,"M"),n}function Cr(e,t){var n;return e.isValid()&&t.isValid()?(t=hr(t,e),e.isBefore(t)?n=Rr(e,t):((n=Rr(t,e)).milliseconds=-n.milliseconds,n.months=-n.months),n):{milliseconds:0,months:0}}function Ar(e,t){return function(n,r){var o;return null===r||isNaN(+r)||(I(t,"moment()."+t+"(period, number) is deprecated. Please use moment()."+t+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),o=n,n=r,r=o),Nr(this,Ir(n,r),e),this}}function Nr(e,t,n,r){var i=t._milliseconds,a=sr(t._days),u=sr(t._months);e.isValid()&&(r=null==r||r,u&&lt(e,de(e,"Month")+u*n),a&&he(e,"Date",de(e,"Date")+a*n),i&&e._d.setTime(e._d.valueOf()+i*n),r&&o.updateOffset(e,a||u))}Ir.fn=ur.prototype,Ir.invalid=ar;var Lr=Ar(1,"add"),Dr=Ar(-1,"subtract");function Mr(e){return"string"==typeof e||e instanceof String}function Fr(e){return x(e)||p(e)||Mr(e)||f(e)||Br(e)||Ur(e)||null==e}function Ur(e){var t,n,r=u(e)&&!s(e),o=!1,i=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],a=i.length;for(t=0;t<a;t+=1)n=i[t],o=o||c(e,n);return r&&o}function Br(e){var t=a(e),n=!1;return t&&(n=0===e.filter((function(t){return!f(t)&&Mr(e)})).length),t&&n}function Hr(e){var t,n,r=u(e)&&!s(e),o=!1,i=["sameDay","nextDay","lastDay","nextWeek","lastWeek","sameElse"];for(t=0;t<i.length;t+=1)n=i[t],o=o||c(e,n);return r&&o}function qr(e,t){var n=e.diff(t,"days",!0);return n<-6?"sameElse":n<-1?"lastWeek":n<0?"lastDay":n<1?"sameDay":n<2?"nextDay":n<7?"nextWeek":"sameElse"}function zr(e,t){1===arguments.length&&(arguments[0]?Fr(arguments[0])?(e=arguments[0],t=void 0):Hr(arguments[0])&&(t=arguments[0],e=void 0):(e=void 0,t=void 0));var n=e||Kn(),r=hr(n,this).startOf("day"),i=o.calendarFormat(this,r)||"sameElse",a=t&&(T(t[i])?t[i].call(this,n):t[i]);return this.format(a||this.localeData().calendar(i,this,Kn(n)))}function Gr(){return new _(this)}function Wr(e,t){var n=x(e)?e:Kn(e);return!(!this.isValid()||!n.isValid())&&("millisecond"===(t=oe(t)||"millisecond")?this.valueOf()>n.valueOf():n.valueOf()<this.clone().startOf(t).valueOf())}function Vr(e,t){var n=x(e)?e:Kn(e);return!(!this.isValid()||!n.isValid())&&("millisecond"===(t=oe(t)||"millisecond")?this.valueOf()<n.valueOf():this.clone().endOf(t).valueOf()<n.valueOf())}function Yr(e,t,n,r){var o=x(e)?e:Kn(e),i=x(t)?t:Kn(t);return!!(this.isValid()&&o.isValid()&&i.isValid())&&("("===(r=r||"()")[0]?this.isAfter(o,n):!this.isBefore(o,n))&&(")"===r[1]?this.isBefore(i,n):!this.isAfter(i,n))}function Zr(e,t){var n,r=x(e)?e:Kn(e);return!(!this.isValid()||!r.isValid())&&("millisecond"===(t=oe(t)||"millisecond")?this.valueOf()===r.valueOf():(n=r.valueOf(),this.clone().startOf(t).valueOf()<=n&&n<=this.clone().endOf(t).valueOf()))}function $r(e,t){return this.isSame(e,t)||this.isAfter(e,t)}function Kr(e,t){return this.isSame(e,t)||this.isBefore(e,t)}function Qr(e,t,n){var r,o,i;if(!this.isValid())return NaN;if(!(r=hr(e,this)).isValid())return NaN;switch(o=6e4*(r.utcOffset()-this.utcOffset()),t=oe(t)){case"year":i=Xr(this,r)/12;break;case"month":i=Xr(this,r);break;case"quarter":i=Xr(this,r)/3;break;case"second":i=(this-r)/1e3;break;case"minute":i=(this-r)/6e4;break;case"hour":i=(this-r)/36e5;break;case"day":i=(this-r-o)/864e5;break;case"week":i=(this-r-o)/6048e5;break;default:i=this-r}return n?i:le(i)}function Xr(e,t){if(e.date()<t.date())return-Xr(t,e);var n=12*(t.year()-e.year())+(t.month()-e.month()),r=e.clone().add(n,"months");return-(n+(t-r<0?(t-r)/(r-e.clone().add(n-1,"months")):(t-r)/(e.clone().add(n+1,"months")-r)))||0}function Jr(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function eo(e){if(!this.isValid())return null;var t=!0!==e,n=t?this.clone().utc():this;return n.year()<0||n.year()>9999?G(n,t?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):T(Date.prototype.toISOString)?t?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",G(n,"Z")):G(n,t?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")}function to(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var e,t,n,r,o="moment",i="";return this.isLocal()||(o=0===this.utcOffset()?"moment.utc":"moment.parseZone",i="Z"),e="["+o+'("]',t=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",n="-MM-DD[T]HH:mm:ss.SSS",r=i+'[")]',this.format(e+t+n+r)}function no(e){e||(e=this.isUtc()?o.defaultFormatUtc:o.defaultFormat);var t=G(this,e);return this.localeData().postformat(t)}function ro(e,t){return this.isValid()&&(x(e)&&e.isValid()||Kn(e).isValid())?Ir({to:this,from:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()}function oo(e){return this.from(Kn(),e)}function io(e,t){return this.isValid()&&(x(e)&&e.isValid()||Kn(e).isValid())?Ir({from:this,to:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()}function ao(e){return this.to(Kn(),e)}function uo(e){var t;return void 0===e?this._locale._abbr:(null!=(t=bn(e))&&(this._locale=t),this)}o.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",o.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var co=j("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",(function(e){return void 0===e?this.localeData():this.locale(e)}));function so(){return this._locale}var lo=1e3,fo=60*lo,po=60*fo,ho=3506328*po;function yo(e,t){return(e%t+t)%t}function mo(e,t,n){return e<100&&e>=0?new Date(e+400,t,n)-ho:new Date(e,t,n).valueOf()}function vo(e,t,n){return e<100&&e>=0?Date.UTC(e+400,t,n)-ho:Date.UTC(e,t,n)}function go(e){var t,n;if(void 0===(e=oe(e))||"millisecond"===e||!this.isValid())return this;switch(n=this._isUTC?vo:mo,e){case"year":t=n(this.year(),0,1);break;case"quarter":t=n(this.year(),this.month()-this.month()%3,1);break;case"month":t=n(this.year(),this.month(),1);break;case"week":t=n(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":t=n(this.year(),this.month(),this.date());break;case"hour":t=this._d.valueOf(),t-=yo(t+(this._isUTC?0:this.utcOffset()*fo),po);break;case"minute":t=this._d.valueOf(),t-=yo(t,fo);break;case"second":t=this._d.valueOf(),t-=yo(t,lo)}return this._d.setTime(t),o.updateOffset(this,!0),this}function bo(e){var t,n;if(void 0===(e=oe(e))||"millisecond"===e||!this.isValid())return this;switch(n=this._isUTC?vo:mo,e){case"year":t=n(this.year()+1,0,1)-1;break;case"quarter":t=n(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":t=n(this.year(),this.month()+1,1)-1;break;case"week":t=n(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":t=n(this.year(),this.month(),this.date()+1)-1;break;case"hour":t=this._d.valueOf(),t+=po-yo(t+(this._isUTC?0:this.utcOffset()*fo),po)-1;break;case"minute":t=this._d.valueOf(),t+=fo-yo(t,fo)-1;break;case"second":t=this._d.valueOf(),t+=lo-yo(t,lo)-1}return this._d.setTime(t),o.updateOffset(this,!0),this}function wo(){return this._d.valueOf()-6e4*(this._offset||0)}function Oo(){return Math.floor(this.valueOf()/1e3)}function Eo(){return new Date(this.valueOf())}function _o(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()]}function xo(){var e=this;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}}function So(){return this.isValid()?this.toISOString():null}function jo(){return g(this)}function Po(){return h({},v(this))}function ko(){return v(this).overflow}function Io(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function To(e,t){var n,r,i,a=this._eras||bn("en")._eras;for(n=0,r=a.length;n<r;++n){switch(typeof a[n].since){case"string":i=o(a[n].since).startOf("day"),a[n].since=i.valueOf()}switch(typeof a[n].until){case"undefined":a[n].until=1/0;break;case"string":i=o(a[n].until).startOf("day").valueOf(),a[n].until=i.valueOf()}}return a}function Ro(e,t,n){var r,o,i,a,u,c=this.eras();for(e=e.toUpperCase(),r=0,o=c.length;r<o;++r)if(i=c[r].name.toUpperCase(),a=c[r].abbr.toUpperCase(),u=c[r].narrow.toUpperCase(),n)switch(t){case"N":case"NN":case"NNN":if(a===e)return c[r];break;case"NNNN":if(i===e)return c[r];break;case"NNNNN":if(u===e)return c[r]}else if([i,a,u].indexOf(e)>=0)return c[r]}function Co(e,t){var n=e.since<=e.until?1:-1;return void 0===t?o(e.since).year():o(e.since).year()+(t-e.offset)*n}function Ao(){var e,t,n,r=this.localeData().eras();for(e=0,t=r.length;e<t;++e){if(n=this.clone().startOf("day").valueOf(),r[e].since<=n&&n<=r[e].until)return r[e].name;if(r[e].until<=n&&n<=r[e].since)return r[e].name}return""}function No(){var e,t,n,r=this.localeData().eras();for(e=0,t=r.length;e<t;++e){if(n=this.clone().startOf("day").valueOf(),r[e].since<=n&&n<=r[e].until)return r[e].narrow;if(r[e].until<=n&&n<=r[e].since)return r[e].narrow}return""}function Lo(){var e,t,n,r=this.localeData().eras();for(e=0,t=r.length;e<t;++e){if(n=this.clone().startOf("day").valueOf(),r[e].since<=n&&n<=r[e].until)return r[e].abbr;if(r[e].until<=n&&n<=r[e].since)return r[e].abbr}return""}function Do(){var e,t,n,r,i=this.localeData().eras();for(e=0,t=i.length;e<t;++e)if(n=i[e].since<=i[e].until?1:-1,r=this.clone().startOf("day").valueOf(),i[e].since<=r&&r<=i[e].until||i[e].until<=r&&r<=i[e].since)return(this.year()-o(i[e].since).year())*n+i[e].offset;return this.year()}function Mo(e){return c(this,"_erasNameRegex")||Go.call(this),e?this._erasNameRegex:this._erasRegex}function Fo(e){return c(this,"_erasAbbrRegex")||Go.call(this),e?this._erasAbbrRegex:this._erasRegex}function Uo(e){return c(this,"_erasNarrowRegex")||Go.call(this),e?this._erasNarrowRegex:this._erasRegex}function Bo(e,t){return t.erasAbbrRegex(e)}function Ho(e,t){return t.erasNameRegex(e)}function qo(e,t){return t.erasNarrowRegex(e)}function zo(e,t){return t._eraYearOrdinalRegex||Ie}function Go(){var e,t,n=[],r=[],o=[],i=[],a=this.eras();for(e=0,t=a.length;e<t;++e)r.push(Fe(a[e].name)),n.push(Fe(a[e].abbr)),o.push(Fe(a[e].narrow)),i.push(Fe(a[e].name)),i.push(Fe(a[e].abbr)),i.push(Fe(a[e].narrow));this._erasRegex=new RegExp("^("+i.join("|")+")","i"),this._erasNameRegex=new RegExp("^("+r.join("|")+")","i"),this._erasAbbrRegex=new RegExp("^("+n.join("|")+")","i"),this._erasNarrowRegex=new RegExp("^("+o.join("|")+")","i")}function Wo(e,t){H(0,[e,e.length],0,t)}function Vo(e){return Xo.call(this,e,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)}function Yo(e){return Xo.call(this,e,this.isoWeek(),this.isoWeekday(),1,4)}function Zo(){return xt(this.year(),1,4)}function $o(){return xt(this.isoWeekYear(),1,4)}function Ko(){var e=this.localeData()._week;return xt(this.year(),e.dow,e.doy)}function Qo(){var e=this.localeData()._week;return xt(this.weekYear(),e.dow,e.doy)}function Xo(e,t,n,r,o){var i;return null==e?_t(this,r,o).year:(t>(i=xt(e,r,o))&&(t=i),Jo.call(this,e,t,n,r,o))}function Jo(e,t,n,r,o){var i=Et(e,t,n,r,o),a=wt(i.year,0,i.dayOfYear);return this.year(a.getUTCFullYear()),this.month(a.getUTCMonth()),this.date(a.getUTCDate()),this}function ei(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)}H("N",0,0,"eraAbbr"),H("NN",0,0,"eraAbbr"),H("NNN",0,0,"eraAbbr"),H("NNNN",0,0,"eraName"),H("NNNNN",0,0,"eraNarrow"),H("y",["y",1],"yo","eraYear"),H("y",["yy",2],0,"eraYear"),H("y",["yyy",3],0,"eraYear"),H("y",["yyyy",4],0,"eraYear"),Le("N",Bo),Le("NN",Bo),Le("NNN",Bo),Le("NNNN",Ho),Le("NNNNN",qo),Be(["N","NN","NNN","NNNN","NNNNN"],(function(e,t,n,r){var o=n._locale.erasParse(e,r,n._strict);o?v(n).era=o:v(n).invalidEra=e})),Le("y",Ie),Le("yy",Ie),Le("yyy",Ie),Le("yyyy",Ie),Le("yo",zo),Be(["y","yy","yyy","yyyy"],Ge),Be(["yo"],(function(e,t,n,r){var o;n._locale._eraYearOrdinalRegex&&(o=e.match(n._locale._eraYearOrdinalRegex)),n._locale.eraYearOrdinalParse?t[Ge]=n._locale.eraYearOrdinalParse(e,o):t[Ge]=parseInt(e,10)})),H(0,["gg",2],0,(function(){return this.weekYear()%100})),H(0,["GG",2],0,(function(){return this.isoWeekYear()%100})),Wo("gggg","weekYear"),Wo("ggggg","weekYear"),Wo("GGGG","isoWeekYear"),Wo("GGGGG","isoWeekYear"),re("weekYear","gg"),re("isoWeekYear","GG"),ue("weekYear",1),ue("isoWeekYear",1),Le("G",Te),Le("g",Te),Le("GG",_e,be),Le("gg",_e,be),Le("GGGG",Pe,Oe),Le("gggg",Pe,Oe),Le("GGGGG",ke,Ee),Le("ggggg",ke,Ee),He(["gggg","ggggg","GGGG","GGGGG"],(function(e,t,n,r){t[r.substr(0,2)]=fe(e)})),He(["gg","GG"],(function(e,t,n,r){t[r]=o.parseTwoDigitYear(e)})),H("Q",0,"Qo","quarter"),re("quarter","Q"),ue("quarter",7),Le("Q",ge),Be("Q",(function(e,t){t[We]=3*(fe(e)-1)})),H("D",["DD",2],"Do","date"),re("date","D"),ue("date",9),Le("D",_e),Le("DD",_e,be),Le("Do",(function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient})),Be(["D","DD"],Ve),Be("Do",(function(e,t){t[Ve]=fe(e.match(_e)[0])}));var ti=pe("Date",!0);function ni(e){var t=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==e?t:this.add(e-t,"d")}H("DDD",["DDDD",3],"DDDo","dayOfYear"),re("dayOfYear","DDD"),ue("dayOfYear",4),Le("DDD",je),Le("DDDD",we),Be(["DDD","DDDD"],(function(e,t,n){n._dayOfYear=fe(e)})),H("m",["mm",2],0,"minute"),re("minute","m"),ue("minute",14),Le("m",_e),Le("mm",_e,be),Be(["m","mm"],Ze);var ri=pe("Minutes",!1);H("s",["ss",2],0,"second"),re("second","s"),ue("second",15),Le("s",_e),Le("ss",_e,be),Be(["s","ss"],$e);var oi,ii,ai=pe("Seconds",!1);for(H("S",0,0,(function(){return~~(this.millisecond()/100)})),H(0,["SS",2],0,(function(){return~~(this.millisecond()/10)})),H(0,["SSS",3],0,"millisecond"),H(0,["SSSS",4],0,(function(){return 10*this.millisecond()})),H(0,["SSSSS",5],0,(function(){return 100*this.millisecond()})),H(0,["SSSSSS",6],0,(function(){return 1e3*this.millisecond()})),H(0,["SSSSSSS",7],0,(function(){return 1e4*this.millisecond()})),H(0,["SSSSSSSS",8],0,(function(){return 1e5*this.millisecond()})),H(0,["SSSSSSSSS",9],0,(function(){return 1e6*this.millisecond()})),re("millisecond","ms"),ue("millisecond",16),Le("S",je,ge),Le("SS",je,be),Le("SSS",je,we),oi="SSSS";oi.length<=9;oi+="S")Le(oi,Ie);function ui(e,t){t[Ke]=fe(1e3*("0."+e))}for(oi="S";oi.length<=9;oi+="S")Be(oi,ui);function ci(){return this._isUTC?"UTC":""}function si(){return this._isUTC?"Coordinated Universal Time":""}ii=pe("Milliseconds",!1),H("z",0,0,"zoneAbbr"),H("zz",0,0,"zoneName");var li=_.prototype;function fi(e){return Kn(1e3*e)}function pi(){return Kn.apply(null,arguments).parseZone()}function di(e){return e}li.add=Lr,li.calendar=zr,li.clone=Gr,li.diff=Qr,li.endOf=bo,li.format=no,li.from=ro,li.fromNow=oo,li.to=io,li.toNow=ao,li.get=ye,li.invalidAt=ko,li.isAfter=Wr,li.isBefore=Vr,li.isBetween=Yr,li.isSame=Zr,li.isSameOrAfter=$r,li.isSameOrBefore=Kr,li.isValid=jo,li.lang=co,li.locale=uo,li.localeData=so,li.max=Xn,li.min=Qn,li.parsingFlags=Po,li.set=me,li.startOf=go,li.subtract=Dr,li.toArray=_o,li.toObject=xo,li.toDate=Eo,li.toISOString=eo,li.inspect=to,"undefined"!=typeof Symbol&&null!=Symbol.for&&(li[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),li.toJSON=So,li.toString=Jr,li.unix=Oo,li.valueOf=wo,li.creationData=Io,li.eraName=Ao,li.eraNarrow=No,li.eraAbbr=Lo,li.eraYear=Do,li.year=vt,li.isLeapYear=gt,li.weekYear=Vo,li.isoWeekYear=Yo,li.quarter=li.quarters=ei,li.month=ft,li.daysInMonth=pt,li.week=li.weeks=It,li.isoWeek=li.isoWeeks=Tt,li.weeksInYear=Ko,li.weeksInWeekYear=Qo,li.isoWeeksInYear=Zo,li.isoWeeksInISOWeekYear=$o,li.date=ti,li.day=li.days=Wt,li.weekday=Vt,li.isoWeekday=Yt,li.dayOfYear=ni,li.hour=li.hours=on,li.minute=li.minutes=ri,li.second=li.seconds=ai,li.millisecond=li.milliseconds=ii,li.utcOffset=mr,li.utc=gr,li.local=br,li.parseZone=wr,li.hasAlignedHourOffset=Or,li.isDST=Er,li.isLocal=xr,li.isUtcOffset=Sr,li.isUtc=jr,li.isUTC=jr,li.zoneAbbr=ci,li.zoneName=si,li.dates=j("dates accessor is deprecated. Use date instead.",ti),li.months=j("months accessor is deprecated. Use month instead",ft),li.years=j("years accessor is deprecated. Use year instead",vt),li.zone=j("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",vr),li.isDSTShifted=j("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",_r);var hi=A.prototype;function yi(e,t,n,r){var o=bn(),i=y().set(r,t);return o[n](i,e)}function mi(e,t,n){if(f(e)&&(t=e,e=void 0),e=e||"",null!=t)return yi(e,t,n,"month");var r,o=[];for(r=0;r<12;r++)o[r]=yi(e,r,n,"month");return o}function vi(e,t,n,r){"boolean"==typeof e?(f(t)&&(n=t,t=void 0),t=t||""):(n=t=e,e=!1,f(t)&&(n=t,t=void 0),t=t||"");var o,i=bn(),a=e?i._week.dow:0,u=[];if(null!=n)return yi(t,(n+a)%7,r,"day");for(o=0;o<7;o++)u[o]=yi(t,(o+a)%7,r,"day");return u}function gi(e,t){return mi(e,t,"months")}function bi(e,t){return mi(e,t,"monthsShort")}function wi(e,t,n){return vi(e,t,n,"weekdays")}function Oi(e,t,n){return vi(e,t,n,"weekdaysShort")}function Ei(e,t,n){return vi(e,t,n,"weekdaysMin")}hi.calendar=L,hi.longDateFormat=Y,hi.invalidDate=$,hi.ordinal=X,hi.preparse=di,hi.postformat=di,hi.relativeTime=ee,hi.pastFuture=te,hi.set=R,hi.eras=To,hi.erasParse=Ro,hi.erasConvertYear=Co,hi.erasAbbrRegex=Fo,hi.erasNameRegex=Mo,hi.erasNarrowRegex=Uo,hi.months=at,hi.monthsShort=ut,hi.monthsParse=st,hi.monthsRegex=ht,hi.monthsShortRegex=dt,hi.week=St,hi.firstDayOfYear=kt,hi.firstDayOfWeek=Pt,hi.weekdays=Bt,hi.weekdaysMin=qt,hi.weekdaysShort=Ht,hi.weekdaysParse=Gt,hi.weekdaysRegex=Zt,hi.weekdaysShortRegex=$t,hi.weekdaysMinRegex=Kt,hi.isPM=nn,hi.meridiem=an,mn("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1===fe(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")}}),o.lang=j("moment.lang is deprecated. Use moment.locale instead.",mn),o.langData=j("moment.langData is deprecated. Use moment.localeData instead.",bn);var _i=Math.abs;function xi(){var e=this._data;return this._milliseconds=_i(this._milliseconds),this._days=_i(this._days),this._months=_i(this._months),e.milliseconds=_i(e.milliseconds),e.seconds=_i(e.seconds),e.minutes=_i(e.minutes),e.hours=_i(e.hours),e.months=_i(e.months),e.years=_i(e.years),this}function Si(e,t,n,r){var o=Ir(t,n);return e._milliseconds+=r*o._milliseconds,e._days+=r*o._days,e._months+=r*o._months,e._bubble()}function ji(e,t){return Si(this,e,t,1)}function Pi(e,t){return Si(this,e,t,-1)}function ki(e){return e<0?Math.floor(e):Math.ceil(e)}function Ii(){var e,t,n,r,o,i=this._milliseconds,a=this._days,u=this._months,c=this._data;return i>=0&&a>=0&&u>=0||i<=0&&a<=0&&u<=0||(i+=864e5*ki(Ri(u)+a),a=0,u=0),c.milliseconds=i%1e3,e=le(i/1e3),c.seconds=e%60,t=le(e/60),c.minutes=t%60,n=le(t/60),c.hours=n%24,a+=le(n/24),u+=o=le(Ti(a)),a-=ki(Ri(o)),r=le(u/12),u%=12,c.days=a,c.months=u,c.years=r,this}function Ti(e){return 4800*e/146097}function Ri(e){return 146097*e/4800}function Ci(e){if(!this.isValid())return NaN;var t,n,r=this._milliseconds;if("month"===(e=oe(e))||"quarter"===e||"year"===e)switch(t=this._days+r/864e5,n=this._months+Ti(t),e){case"month":return n;case"quarter":return n/3;case"year":return n/12}else switch(t=this._days+Math.round(Ri(this._months)),e){case"week":return t/7+r/6048e5;case"day":return t+r/864e5;case"hour":return 24*t+r/36e5;case"minute":return 1440*t+r/6e4;case"second":return 86400*t+r/1e3;case"millisecond":return Math.floor(864e5*t)+r;default:throw new Error("Unknown unit "+e)}}function Ai(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*fe(this._months/12):NaN}function Ni(e){return function(){return this.as(e)}}var Li=Ni("ms"),Di=Ni("s"),Mi=Ni("m"),Fi=Ni("h"),Ui=Ni("d"),Bi=Ni("w"),Hi=Ni("M"),qi=Ni("Q"),zi=Ni("y");function Gi(){return Ir(this)}function Wi(e){return e=oe(e),this.isValid()?this[e+"s"]():NaN}function Vi(e){return function(){return this.isValid()?this._data[e]:NaN}}var Yi=Vi("milliseconds"),Zi=Vi("seconds"),$i=Vi("minutes"),Ki=Vi("hours"),Qi=Vi("days"),Xi=Vi("months"),Ji=Vi("years");function ea(){return le(this.days()/7)}var ta=Math.round,na={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function ra(e,t,n,r,o){return o.relativeTime(t||1,!!n,e,r)}function oa(e,t,n,r){var o=Ir(e).abs(),i=ta(o.as("s")),a=ta(o.as("m")),u=ta(o.as("h")),c=ta(o.as("d")),s=ta(o.as("M")),l=ta(o.as("w")),f=ta(o.as("y")),p=i<=n.ss&&["s",i]||i<n.s&&["ss",i]||a<=1&&["m"]||a<n.m&&["mm",a]||u<=1&&["h"]||u<n.h&&["hh",u]||c<=1&&["d"]||c<n.d&&["dd",c];return null!=n.w&&(p=p||l<=1&&["w"]||l<n.w&&["ww",l]),(p=p||s<=1&&["M"]||s<n.M&&["MM",s]||f<=1&&["y"]||["yy",f])[2]=t,p[3]=+e>0,p[4]=r,ra.apply(null,p)}function ia(e){return void 0===e?ta:"function"==typeof e&&(ta=e,!0)}function aa(e,t){return void 0!==na[e]&&(void 0===t?na[e]:(na[e]=t,"s"===e&&(na.ss=t-1),!0))}function ua(e,t){if(!this.isValid())return this.localeData().invalidDate();var n,r,o=!1,i=na;return"object"==typeof e&&(t=e,e=!1),"boolean"==typeof e&&(o=e),"object"==typeof t&&(i=Object.assign({},na,t),null!=t.s&&null==t.ss&&(i.ss=t.s-1)),r=oa(this,!o,i,n=this.localeData()),o&&(r=n.pastFuture(+this,r)),n.postformat(r)}var ca=Math.abs;function sa(e){return(e>0)-(e<0)||+e}function la(){if(!this.isValid())return this.localeData().invalidDate();var e,t,n,r,o,i,a,u,c=ca(this._milliseconds)/1e3,s=ca(this._days),l=ca(this._months),f=this.asSeconds();return f?(e=le(c/60),t=le(e/60),c%=60,e%=60,n=le(l/12),l%=12,r=c?c.toFixed(3).replace(/\.?0+$/,""):"",o=f<0?"-":"",i=sa(this._months)!==sa(f)?"-":"",a=sa(this._days)!==sa(f)?"-":"",u=sa(this._milliseconds)!==sa(f)?"-":"",o+"P"+(n?i+n+"Y":"")+(l?i+l+"M":"")+(s?a+s+"D":"")+(t||e||c?"T":"")+(t?u+t+"H":"")+(e?u+e+"M":"")+(c?u+r+"S":"")):"P0D"}var fa=ur.prototype;return fa.isValid=ir,fa.abs=xi,fa.add=ji,fa.subtract=Pi,fa.as=Ci,fa.asMilliseconds=Li,fa.asSeconds=Di,fa.asMinutes=Mi,fa.asHours=Fi,fa.asDays=Ui,fa.asWeeks=Bi,fa.asMonths=Hi,fa.asQuarters=qi,fa.asYears=zi,fa.valueOf=Ai,fa._bubble=Ii,fa.clone=Gi,fa.get=Wi,fa.milliseconds=Yi,fa.seconds=Zi,fa.minutes=$i,fa.hours=Ki,fa.days=Qi,fa.weeks=ea,fa.months=Xi,fa.years=Ji,fa.humanize=ua,fa.toISOString=la,fa.toString=la,fa.toJSON=la,fa.locale=uo,fa.localeData=so,fa.toIsoString=j("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",la),fa.lang=co,H("X",0,0,"unix"),H("x",0,0,"valueOf"),Le("x",Te),Le("X",Ae),Be("X",(function(e,t,n){n._d=new Date(1e3*parseFloat(e))})),Be("x",(function(e,t,n){n._d=new Date(fe(e))})),o.version="2.29.4",i(Kn),o.fn=li,o.min=er,o.max=tr,o.now=nr,o.utc=y,o.unix=fi,o.months=gi,o.isDate=p,o.locale=mn,o.invalid=b,o.duration=Ir,o.isMoment=x,o.weekdays=wi,o.parseZone=pi,o.localeData=bn,o.isDuration=cr,o.monthsShort=bi,o.weekdaysMin=Ei,o.defineLocale=vn,o.updateLocale=gn,o.locales=wn,o.weekdaysShort=Oi,o.normalizeUnits=oe,o.relativeTimeRounding=ia,o.relativeTimeThreshold=aa,o.calendarFormat=qr,o.prototype=li,o.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},o}()},92366:(e,t,n)=>{"use strict";const r=n(64942),o=process.hrtime(),i=(new Date).getTime();function a(){let e=process.hrtime(o);return r(i).times(1e6).add(r(e[0]).times(1e9).plus(e[1])).toString()}e.exports=a,e.exports.microseconds=e.exports.micro=function(){return r(a()).divide(1e3).toString()}},28608:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;function o(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(e){return!1}}()?Object.assign:function(e,i){for(var a,u,c=o(e),s=1;s<arguments.length;s++){for(var l in a=Object(arguments[s]))n.call(a,l)&&(c[l]=a[l]);if(t){u=t(a);for(var f=0;f<u.length;f++)r.call(a,u[f])&&(c[u[f]]=a[u[f]])}}return c}},6967:(e,t,n)=>{var r=n(58412);e.exports=d,e.exports.parse=i,e.exports.compile=function(e,t){return u(i(e,t),t)},e.exports.tokensToFunction=u,e.exports.tokensToRegExp=p;var o=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function i(e,t){for(var n,r=[],i=0,a=0,u="",l=t&&t.delimiter||"/";null!=(n=o.exec(e));){var f=n[0],p=n[1],d=n.index;if(u+=e.slice(a,d),a=d+f.length,p)u+=p[1];else{var h=e[a],y=n[2],m=n[3],v=n[4],g=n[5],b=n[6],w=n[7];u&&(r.push(u),u="");var O=null!=y&&null!=h&&h!==y,E="+"===b||"*"===b,_="?"===b||"*"===b,x=n[2]||l,S=v||g;r.push({name:m||i++,prefix:y||"",delimiter:x,optional:_,repeat:E,partial:O,asterisk:!!w,pattern:S?s(S):w?".*":"[^"+c(x)+"]+?"})}}return a<e.length&&(u+=e.substr(a)),u&&r.push(u),r}function a(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function u(e,t){for(var n=new Array(e.length),o=0;o<e.length;o++)"object"==typeof e[o]&&(n[o]=new RegExp("^(?:"+e[o].pattern+")$",f(t)));return function(t,o){for(var i="",u=t||{},c=(o||{}).pretty?a:encodeURIComponent,s=0;s<e.length;s++){var l=e[s];if("string"!=typeof l){var f,p=u[l.name];if(null==p){if(l.optional){l.partial&&(i+=l.prefix);continue}throw new TypeError('Expected "'+l.name+'" to be defined')}if(r(p)){if(!l.repeat)throw new TypeError('Expected "'+l.name+'" to not repeat, but received `'+JSON.stringify(p)+"`");if(0===p.length){if(l.optional)continue;throw new TypeError('Expected "'+l.name+'" to not be empty')}for(var d=0;d<p.length;d++){if(f=c(p[d]),!n[s].test(f))throw new TypeError('Expected all "'+l.name+'" to match "'+l.pattern+'", but received `'+JSON.stringify(f)+"`");i+=(0===d?l.prefix:l.delimiter)+f}}else{if(f=l.asterisk?encodeURI(p).replace(/[?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})):c(p),!n[s].test(f))throw new TypeError('Expected "'+l.name+'" to match "'+l.pattern+'", but received "'+f+'"');i+=l.prefix+f}}else i+=l}return i}}function c(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function s(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function l(e,t){return e.keys=t,e}function f(e){return e&&e.sensitive?"":"i"}function p(e,t,n){r(t)||(n=t||n,t=[]);for(var o=(n=n||{}).strict,i=!1!==n.end,a="",u=0;u<e.length;u++){var s=e[u];if("string"==typeof s)a+=c(s);else{var p=c(s.prefix),d="(?:"+s.pattern+")";t.push(s),s.repeat&&(d+="(?:"+p+d+")*"),a+=d=s.optional?s.partial?p+"("+d+")?":"(?:"+p+"("+d+"))?":p+"("+d+")"}}var h=c(n.delimiter||"/"),y=a.slice(-h.length)===h;return o||(a=(y?a.slice(0,-h.length):a)+"(?:"+h+"(?=$))?"),a+=i?"$":o&&y?"":"(?="+h+"|$)",l(new RegExp("^"+a,f(n)),t)}function d(e,t,n){return r(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp?function(e,t){var n=e.source.match(/\((?!\?)/g);if(n)for(var r=0;r<n.length;r++)t.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return l(e,t)}(e,t):r(e)?function(e,t,n){for(var r=[],o=0;o<e.length;o++)r.push(d(e[o],t,n).source);return l(new RegExp("(?:"+r.join("|")+")",f(n)),t)}(e,t,n):function(e,t,n){return p(i(e,n),t,n)}(e,t,n)}},87452:function(e,t,n){var r,o;void 0===(o="function"==typeof(r=function(){"use strict";return function(e,t){var n,r,o,i,a,u,c,s,l,f,p,d,h,y,m,v,g,b,w=this,O=!1,E=!0,_=!0,x={barsSize:{top:44,bottom:"auto"},closeElClasses:["item","caption","zoom-wrap","ui","top-bar"],timeToIdle:4e3,timeToIdleOutside:1e3,loadingIndicatorDelay:1e3,addCaptionHTMLFn:function(e,t){return e.title?(t.children[0].innerHTML=e.title,!0):(t.children[0].innerHTML="",!1)},closeEl:!0,captionEl:!0,fullscreenEl:!0,zoomEl:!0,shareEl:!0,counterEl:!0,arrowEl:!0,preloaderEl:!0,tapToClose:!1,tapToToggleControls:!0,clickToCloseNonZoomable:!0,shareButtons:[{id:"facebook",label:"Share on Facebook",url:"https://www.facebook.com/sharer/sharer.php?u={{url}}"},{id:"twitter",label:"Tweet",url:"https://twitter.com/intent/tweet?text={{text}}&url={{url}}"},{id:"pinterest",label:"Pin it",url:"http://www.pinterest.com/pin/create/button/?url={{url}}&media={{image_url}}&description={{text}}"},{id:"download",label:"Download image",url:"{{raw_image_url}}",download:!0}],getImageURLForShare:function(){return e.currItem.src||""},getPageURLForShare:function(){return window.location.href},getTextForShare:function(){return e.currItem.title||""},indexIndicatorSep:" / ",fitControlsWidth:1200},S=function(e){if(v)return!0;e=e||window.event,m.timeToIdle&&m.mouseUsed&&!l&&L();for(var n,r,o=(e.target||e.srcElement).getAttribute("class")||"",i=0;i<z.length;i++)(n=z[i]).onTap&&o.indexOf("pswp__"+n.name)>-1&&(n.onTap(),r=!0);if(r){e.stopPropagation&&e.stopPropagation(),v=!0;var a=t.features.isOldAndroid?600:30;setTimeout((function(){v=!1}),a)}},j=function(){return!e.likelyTouchDevice||m.mouseUsed||screen.width>m.fitControlsWidth},P=function(e,n,r){t[(r?"add":"remove")+"Class"](e,"pswp__"+n)},k=function(){var e=1===m.getNumItemsFn();e!==y&&(P(r,"ui--one-slide",e),y=e)},I=function(){P(c,"share-modal--hidden",_)},T=function(){return(_=!_)?(t.removeClass(c,"pswp__share-modal--fade-in"),setTimeout((function(){_&&I()}),300)):(I(),setTimeout((function(){_||t.addClass(c,"pswp__share-modal--fade-in")}),30)),_||C(),!1},R=function(t){var n=(t=t||window.event).target||t.srcElement;return e.shout("shareLinkClick",t,n),!(!n.href||!n.hasAttribute("download")&&(window.open(n.href,"pswp_share","scrollbars=yes,resizable=yes,toolbar=no,location=yes,width=550,height=420,top=100,left="+(window.screen?Math.round(screen.width/2-275):100)),_||T(),1))},C=function(){for(var e,t,n,r,o="",i=0;i<m.shareButtons.length;i++)e=m.shareButtons[i],t=m.getImageURLForShare(e),n=m.getPageURLForShare(e),r=m.getTextForShare(e),o+='<a href="'+e.url.replace("{{url}}",encodeURIComponent(n)).replace("{{image_url}}",encodeURIComponent(t)).replace("{{raw_image_url}}",t).replace("{{text}}",encodeURIComponent(r))+'" target="_blank" class="pswp__share--'+e.id+'"'+(e.download?"download":"")+">"+e.label+"</a>",m.parseShareButtonOut&&(o=m.parseShareButtonOut(e,o));c.children[0].innerHTML=o,c.children[0].onclick=R},A=function(e){for(var n=0;n<m.closeElClasses.length;n++)if(t.hasClass(e,"pswp__"+m.closeElClasses[n]))return!0},N=0,L=function(){clearTimeout(b),N=0,l&&w.setIdle(!1)},D=function(e){var t=(e=e||window.event).relatedTarget||e.toElement;t&&"HTML"!==t.nodeName||(clearTimeout(b),b=setTimeout((function(){w.setIdle(!0)}),m.timeToIdleOutside))},M=function(){m.fullscreenEl&&!t.features.isOldAndroid&&(n||(n=w.getFullscreenAPI()),n?(t.bind(document,n.eventK,w.updateFullscreen),w.updateFullscreen(),t.addClass(e.template,"pswp--supports-fs")):t.removeClass(e.template,"pswp--supports-fs"))},F=function(){m.preloaderEl&&(U(!0),f("beforeChange",(function(){clearTimeout(h),h=setTimeout((function(){e.currItem&&e.currItem.loading?(!e.allowProgressiveImg()||e.currItem.img&&!e.currItem.img.naturalWidth)&&U(!1):U(!0)}),m.loadingIndicatorDelay)})),f("imageLoadComplete",(function(t,n){e.currItem===n&&U(!0)})))},U=function(e){d!==e&&(P(p,"preloader--active",!e),d=e)},B=function(e){var n=e.vGap;if(j()){var a=m.barsSize;if(m.captionEl&&"auto"===a.bottom)if(i||((i=t.createEl("pswp__caption pswp__caption--fake")).appendChild(t.createEl("pswp__caption__center")),r.insertBefore(i,o),t.addClass(r,"pswp__ui--fit")),m.addCaptionHTMLFn(e,i,!0)){var u=i.clientHeight;n.bottom=parseInt(u,10)||44}else n.bottom=a.top;else n.bottom="auto"===a.bottom?0:a.bottom;n.top=a.top}else n.top=n.bottom=0},H=function(){m.timeToIdle&&f("mouseUsed",(function(){t.bind(document,"mousemove",L),t.bind(document,"mouseout",D),g=setInterval((function(){2==++N&&w.setIdle(!0)}),m.timeToIdle/2)}))},q=function(){var e;f("onVerticalDrag",(function(e){E&&e<.95?w.hideControls():!E&&e>=.95&&w.showControls()})),f("onPinchClose",(function(t){E&&t<.9?(w.hideControls(),e=!0):e&&!E&&t>.9&&w.showControls()})),f("zoomGestureEnded",(function(){(e=!1)&&!E&&w.showControls()}))},z=[{name:"caption",option:"captionEl",onInit:function(e){o=e}},{name:"share-modal",option:"shareEl",onInit:function(e){c=e},onTap:function(){T()}},{name:"button--share",option:"shareEl",onInit:function(e){u=e},onTap:function(){T()}},{name:"button--zoom",option:"zoomEl",onTap:e.toggleDesktopZoom},{name:"counter",option:"counterEl",onInit:function(e){a=e}},{name:"button--close",option:"closeEl",onTap:e.close},{name:"button--arrow--left",option:"arrowEl",onTap:e.prev},{name:"button--arrow--right",option:"arrowEl",onTap:e.next},{name:"button--fs",option:"fullscreenEl",onTap:function(){n.isFullscreen()?n.exit():n.enter()}},{name:"preloader",option:"preloaderEl",onInit:function(e){p=e}}],G=function(){var e,n,o,i=function(r){if(r)for(var i=r.length,a=0;a<i;a++){e=r[a],n=e.className;for(var u=0;u<z.length;u++)o=z[u],n.indexOf("pswp__"+o.name)>-1&&(m[o.option]?(t.removeClass(e,"pswp__element--disabled"),o.onInit&&o.onInit(e)):t.addClass(e,"pswp__element--disabled"))}};i(r.children);var a=t.getChildByClass(r,"pswp__top-bar");a&&i(a.children)};w.init=function(){t.extend(e.options,x,!0),m=e.options,r=t.getChildByClass(e.scrollWrap,"pswp__ui"),f=e.listen,q(),f("beforeChange",w.update),f("doubleTap",(function(t){var n=e.currItem.initialZoomLevel;e.getZoomLevel()!==n?e.zoomTo(n,t,333):e.zoomTo(m.getDoubleTapZoom(!1,e.currItem),t,333)})),f("preventDragEvent",(function(e,t,n){var r=e.target||e.srcElement;r&&r.getAttribute("class")&&e.type.indexOf("mouse")>-1&&(r.getAttribute("class").indexOf("__caption")>0||/(SMALL|STRONG|EM)/i.test(r.tagName))&&(n.prevent=!1)})),f("bindEvents",(function(){t.bind(r,"pswpTap click",S),t.bind(e.scrollWrap,"pswpTap",w.onGlobalTap),e.likelyTouchDevice||t.bind(e.scrollWrap,"mouseover",w.onMouseOver)})),f("unbindEvents",(function(){_||T(),g&&clearInterval(g),t.unbind(document,"mouseout",D),t.unbind(document,"mousemove",L),t.unbind(r,"pswpTap click",S),t.unbind(e.scrollWrap,"pswpTap",w.onGlobalTap),t.unbind(e.scrollWrap,"mouseover",w.onMouseOver),n&&(t.unbind(document,n.eventK,w.updateFullscreen),n.isFullscreen()&&(m.hideAnimationDuration=0,n.exit()),n=null)})),f("destroy",(function(){m.captionEl&&(i&&r.removeChild(i),t.removeClass(o,"pswp__caption--empty")),c&&(c.children[0].onclick=null),t.removeClass(r,"pswp__ui--over-close"),t.addClass(r,"pswp__ui--hidden"),w.setIdle(!1)})),m.showAnimationDuration||t.removeClass(r,"pswp__ui--hidden"),f("initialZoomIn",(function(){m.showAnimationDuration&&t.removeClass(r,"pswp__ui--hidden")})),f("initialZoomOut",(function(){t.addClass(r,"pswp__ui--hidden")})),f("parseVerticalMargin",B),G(),m.shareEl&&u&&c&&(_=!0),k(),H(),M(),F()},w.setIdle=function(e){l=e,P(r,"ui--idle",e)},w.update=function(){E&&e.currItem?(w.updateIndexIndicator(),m.captionEl&&(m.addCaptionHTMLFn(e.currItem,o),P(o,"caption--empty",!e.currItem.title)),O=!0):O=!1,_||T(),k()},w.updateFullscreen=function(r){r&&setTimeout((function(){e.setScrollOffset(0,t.getScrollY())}),50),t[(n.isFullscreen()?"add":"remove")+"Class"](e.template,"pswp--fs")},w.updateIndexIndicator=function(){m.counterEl&&(a.innerHTML=e.getCurrentIndex()+1+m.indexIndicatorSep+m.getNumItemsFn())},w.onGlobalTap=function(n){var r=(n=n||window.event).target||n.srcElement;if(!v)if(n.detail&&"mouse"===n.detail.pointerType){if(A(r))return void e.close();t.hasClass(r,"pswp__img")&&(1===e.getZoomLevel()&&e.getZoomLevel()<=e.currItem.fitRatio?m.clickToCloseNonZoomable&&e.close():e.toggleDesktopZoom(n.detail.releasePoint))}else if(m.tapToToggleControls&&(E?w.hideControls():w.showControls()),m.tapToClose&&(t.hasClass(r,"pswp__img")||A(r)))return void e.close()},w.onMouseOver=function(e){var t=(e=e||window.event).target||e.srcElement;P(r,"ui--over-close",A(t))},w.hideControls=function(){t.addClass(r,"pswp__ui--hidden"),E=!1},w.showControls=function(){E=!0,O||w.update(),t.removeClass(r,"pswp__ui--hidden")},w.supportsFullscreen=function(){var e=document;return!!(e.exitFullscreen||e.mozCancelFullScreen||e.webkitExitFullscreen||e.msExitFullscreen)},w.getFullscreenAPI=function(){var t,n=document.documentElement,r="fullscreenchange";return n.requestFullscreen?t={enterK:"requestFullscreen",exitK:"exitFullscreen",elementK:"fullscreenElement",eventK:r}:n.mozRequestFullScreen?t={enterK:"mozRequestFullScreen",exitK:"mozCancelFullScreen",elementK:"mozFullScreenElement",eventK:"moz"+r}:n.webkitRequestFullscreen?t={enterK:"webkitRequestFullscreen",exitK:"webkitExitFullscreen",elementK:"webkitFullscreenElement",eventK:"webkit"+r}:n.msRequestFullscreen&&(t={enterK:"msRequestFullscreen",exitK:"msExitFullscreen",elementK:"msFullscreenElement",eventK:"MSFullscreenChange"}),t&&(t.enter=function(){if(s=m.closeOnScroll,m.closeOnScroll=!1,"webkitRequestFullscreen"!==this.enterK)return e.template[this.enterK]();e.template[this.enterK](Element.ALLOW_KEYBOARD_INPUT)},t.exit=function(){return m.closeOnScroll=s,document[this.exitK]()},t.isFullscreen=function(){return document[this.elementK]}),t}}})?r.call(t,n,t,e):r)||(e.exports=o)},98454:function(e,t,n){var r,o;void 0===(o="function"==typeof(r=function(){"use strict";return function(e,t,n,r){var o={features:null,bind:function(e,t,n,r){var o=(r?"remove":"add")+"EventListener";t=t.split(" ");for(var i=0;i<t.length;i++)t[i]&&e[o](t[i],n,!1)},isArray:function(e){return e instanceof Array},createEl:function(e,t){var n=document.createElement(t||"div");return e&&(n.className=e),n},getScrollY:function(){var e=window.pageYOffset;return void 0!==e?e:document.documentElement.scrollTop},unbind:function(e,t,n){o.bind(e,t,n,!0)},removeClass:function(e,t){var n=new RegExp("(\\s|^)"+t+"(\\s|$)");e.className=e.className.replace(n," ").replace(/^\s\s*/,"").replace(/\s\s*$/,"")},addClass:function(e,t){o.hasClass(e,t)||(e.className+=(e.className?" ":"")+t)},hasClass:function(e,t){return e.className&&new RegExp("(^|\\s)"+t+"(\\s|$)").test(e.className)},getChildByClass:function(e,t){for(var n=e.firstChild;n;){if(o.hasClass(n,t))return n;n=n.nextSibling}},arraySearch:function(e,t,n){for(var r=e.length;r--;)if(e[r][n]===t)return r;return-1},extend:function(e,t,n){for(var r in t)if(t.hasOwnProperty(r)){if(n&&e.hasOwnProperty(r))continue;e[r]=t[r]}},easing:{sine:{out:function(e){return Math.sin(e*(Math.PI/2))},inOut:function(e){return-(Math.cos(Math.PI*e)-1)/2}},cubic:{out:function(e){return--e*e*e+1}}},detectFeatures:function(){if(o.features)return o.features;var e=o.createEl().style,t="",n={};if(n.oldIE=document.all&&!document.addEventListener,n.touch="ontouchstart"in window,window.requestAnimationFrame&&(n.raf=window.requestAnimationFrame,n.caf=window.cancelAnimationFrame),n.pointerEvent=!!window.PointerEvent||navigator.msPointerEnabled,!n.pointerEvent){var r=navigator.userAgent;if(/iP(hone|od)/.test(navigator.platform)){var i=navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/);i&&i.length>0&&(i=parseInt(i[1],10))>=1&&i<8&&(n.isOldIOSPhone=!0)}var a=r.match(/Android\s([0-9\.]*)/),u=a?a[1]:0;(u=parseFloat(u))>=1&&(u<4.4&&(n.isOldAndroid=!0),n.androidVersion=u),n.isMobileOpera=/opera mini|opera mobi/i.test(r)}for(var c,s,l=["transform","perspective","animationName"],f=["","webkit","Moz","ms","O"],p=0;p<4;p++){t=f[p];for(var d=0;d<3;d++)c=l[d],s=t+(t?c.charAt(0).toUpperCase()+c.slice(1):c),!n[c]&&s in e&&(n[c]=s);t&&!n.raf&&(t=t.toLowerCase(),n.raf=window[t+"RequestAnimationFrame"],n.raf&&(n.caf=window[t+"CancelAnimationFrame"]||window[t+"CancelRequestAnimationFrame"]))}if(!n.raf){var h=0;n.raf=function(e){var t=(new Date).getTime(),n=Math.max(0,16-(t-h)),r=window.setTimeout((function(){e(t+n)}),n);return h=t+n,r},n.caf=function(e){clearTimeout(e)}}return n.svg=!!document.createElementNS&&!!document.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect,o.features=n,n}};o.detectFeatures(),o.features.oldIE&&(o.bind=function(e,t,n,r){t=t.split(" ");for(var o,i=(r?"detach":"attach")+"Event",a=function(){n.handleEvent.call(n)},u=0;u<t.length;u++)if(o=t[u])if("object"==typeof n&&n.handleEvent){if(r){if(!n["oldIE"+o])return!1}else n["oldIE"+o]=a;e[i]("on"+o,n["oldIE"+o])}else e[i]("on"+o,n)});var i=this,a=25,u=3,c={allowPanToNext:!0,spacing:.12,bgOpacity:1,mouseUsed:!1,loop:!0,pinchToClose:!0,closeOnScroll:!0,closeOnVerticalDrag:!0,verticalDragRange:.75,hideAnimationDuration:333,showAnimationDuration:333,showHideOpacity:!1,focus:!0,escKey:!0,arrowKeys:!0,mainScrollEndFriction:.35,panEndFriction:.35,isClickableElement:function(e){return"A"===e.tagName},getDoubleTapZoom:function(e,t){return e||t.initialZoomLevel<.7?1:1.33},maxSpreadZoom:1.33,modal:!0,scaleMode:"fit"};o.extend(c,r);var s,l,f,p,d,h,y,m,v,g,b,w,O,E,_,x,S,j,P,k,I,T,R,C,A,N,L,D,M,F,U,B,H,q,z,G,W,V,Y,Z,$,K,Q,X,J,ee,te,ne,re,oe,ie,ae,ue,ce,se,le,fe=function(){return{x:0,y:0}},pe=fe(),de=fe(),he=fe(),ye={},me=0,ve={},ge=fe(),be=0,we=!0,Oe=[],Ee={},_e=!1,xe=function(e,t){o.extend(i,t.publicMethods),Oe.push(e)},Se=function(e){var t=Jt();return e>t-1?e-t:e<0?t+e:e},je={},Pe=function(e,t){return je[e]||(je[e]=[]),je[e].push(t)},ke=function(e){var t=je[e];if(t){var n=Array.prototype.slice.call(arguments);n.shift();for(var r=0;r<t.length;r++)t[r].apply(i,n)}},Ie=function(){return(new Date).getTime()},Te=function(e){ce=e,i.bg.style.opacity=e*c.bgOpacity},Re=function(e,t,n,r,o){(!_e||o&&o!==i.currItem)&&(r/=o?o.fitRatio:i.currItem.fitRatio),e[T]=w+t+"px, "+n+"px"+O+" scale("+r+")"},Ce=function(e){re&&(e&&(g>i.currItem.fitRatio?_e||(fn(i.currItem,!1,!0),_e=!0):_e&&(fn(i.currItem),_e=!1)),Re(re,he.x,he.y,g))},Ae=function(e){e.container&&Re(e.container.style,e.initialPosition.x,e.initialPosition.y,e.initialZoomLevel,e)},Ne=function(e,t){t[T]=w+e+"px, 0px"+O},Le=function(e,t){if(!c.loop&&t){var n=p+(ge.x*me-e)/ge.x,r=Math.round(e-gt.x);(n<0&&r>0||n>=Jt()-1&&r<0)&&(e=gt.x+r*c.mainScrollEndFriction)}gt.x=e,Ne(e,d)},De=function(e,t){var n=bt[e]-ve[e];return de[e]+pe[e]+n-n*(t/b)},Me=function(e,t){e.x=t.x,e.y=t.y,t.id&&(e.id=t.id)},Fe=function(e){e.x=Math.round(e.x),e.y=Math.round(e.y)},Ue=null,Be=function(){Ue&&(o.unbind(document,"mousemove",Be),o.addClass(e,"pswp--has_mouse"),c.mouseUsed=!0,ke("mouseUsed")),Ue=setTimeout((function(){Ue=null}),100)},He=function(){o.bind(document,"keydown",i),U.transform&&o.bind(i.scrollWrap,"click",i),c.mouseUsed||o.bind(document,"mousemove",Be),o.bind(window,"resize scroll orientationchange",i),ke("bindEvents")},qe=function(){o.unbind(window,"resize scroll orientationchange",i),o.unbind(window,"scroll",v.scroll),o.unbind(document,"keydown",i),o.unbind(document,"mousemove",Be),U.transform&&o.unbind(i.scrollWrap,"click",i),Y&&o.unbind(window,y,i),clearTimeout(B),ke("unbindEvents")},ze=function(e,t){var n=un(i.currItem,ye,e);return t&&(ne=n),n},Ge=function(e){return e||(e=i.currItem),e.initialZoomLevel},We=function(e){return e||(e=i.currItem),e.w>0?c.maxSpreadZoom:1},Ve=function(e,t,n,r){return r===i.currItem.initialZoomLevel?(n[e]=i.currItem.initialPosition[e],!0):(n[e]=De(e,r),n[e]>t.min[e]?(n[e]=t.min[e],!0):n[e]<t.max[e]&&(n[e]=t.max[e],!0))},Ye=function(){if(T){var t=U.perspective&&!C;return w="translate"+(t?"3d(":"("),void(O=U.perspective?", 0px)":")")}T="left",o.addClass(e,"pswp--ie"),Ne=function(e,t){t.left=e+"px"},Ae=function(e){var t=e.fitRatio>1?1:e.fitRatio,n=e.container.style,r=t*e.w,o=t*e.h;n.width=r+"px",n.height=o+"px",n.left=e.initialPosition.x+"px",n.top=e.initialPosition.y+"px"},Ce=function(){if(re){var e=re,t=i.currItem,n=t.fitRatio>1?1:t.fitRatio,r=n*t.w,o=n*t.h;e.width=r+"px",e.height=o+"px",e.left=he.x+"px",e.top=he.y+"px"}}},Ze=function(e){var t="";c.escKey&&27===e.keyCode?t="close":c.arrowKeys&&(37===e.keyCode?t="prev":39===e.keyCode&&(t="next")),t&&(e.ctrlKey||e.altKey||e.shiftKey||e.metaKey||(e.preventDefault?e.preventDefault():e.returnValue=!1,i[t]()))},$e=function(e){e&&(K||$||oe||W)&&(e.preventDefault(),e.stopPropagation())},Ke=function(){i.setScrollOffset(0,o.getScrollY())},Qe={},Xe=0,Je=function(e){Qe[e]&&(Qe[e].raf&&N(Qe[e].raf),Xe--,delete Qe[e])},et=function(e){Qe[e]&&Je(e),Qe[e]||(Xe++,Qe[e]={})},tt=function(){for(var e in Qe)Qe.hasOwnProperty(e)&&Je(e)},nt=function(e,t,n,r,o,i,a){var u,c=Ie();et(e);var s=function(){if(Qe[e]){if((u=Ie()-c)>=r)return Je(e),i(n),void(a&&a());i((n-t)*o(u/r)+t),Qe[e].raf=A(s)}};s()},rt={shout:ke,listen:Pe,viewportSize:ye,options:c,isMainScrollAnimating:function(){return oe},getZoomLevel:function(){return g},getCurrentIndex:function(){return p},isDragging:function(){return Y},isZooming:function(){return ee},setScrollOffset:function(e,t){ve.x=e,F=ve.y=t,ke("updateScrollOffset",ve)},applyZoomPan:function(e,t,n,r){he.x=t,he.y=n,g=e,Ce(r)},init:function(){if(!s&&!l){var n;i.framework=o,i.template=e,i.bg=o.getChildByClass(e,"pswp__bg"),L=e.className,s=!0,U=o.detectFeatures(),A=U.raf,N=U.caf,T=U.transform,M=U.oldIE,i.scrollWrap=o.getChildByClass(e,"pswp__scroll-wrap"),i.container=o.getChildByClass(i.scrollWrap,"pswp__container"),d=i.container.style,i.itemHolders=x=[{el:i.container.children[0],wrap:0,index:-1},{el:i.container.children[1],wrap:0,index:-1},{el:i.container.children[2],wrap:0,index:-1}],x[0].el.style.display=x[2].el.style.display="none",Ye(),v={resize:i.updateSize,orientationchange:function(){clearTimeout(B),B=setTimeout((function(){ye.x!==i.scrollWrap.clientWidth&&i.updateSize()}),500)},scroll:Ke,keydown:Ze,click:$e};var r=U.isOldIOSPhone||U.isOldAndroid||U.isMobileOpera;for(U.animationName&&U.transform&&!r||(c.showAnimationDuration=c.hideAnimationDuration=0),n=0;n<Oe.length;n++)i["init"+Oe[n]]();t&&(i.ui=new t(i,o)).init(),ke("firstUpdate"),p=p||c.index||0,(isNaN(p)||p<0||p>=Jt())&&(p=0),i.currItem=Xt(p),(U.isOldIOSPhone||U.isOldAndroid)&&(we=!1),e.setAttribute("aria-hidden","false"),c.modal&&(we?e.style.position="fixed":(e.style.position="absolute",e.style.top=o.getScrollY()+"px")),void 0===F&&(ke("initialLayout"),F=D=o.getScrollY());var a="pswp--open ";for(c.mainClass&&(a+=c.mainClass+" "),c.showHideOpacity&&(a+="pswp--animate_opacity "),a+=C?"pswp--touch":"pswp--notouch",a+=U.animationName?" pswp--css_animation":"",a+=U.svg?" pswp--svg":"",o.addClass(e,a),i.updateSize(),h=-1,be=null,n=0;n<u;n++)Ne((n+h)*ge.x,x[n].el.style);M||o.bind(i.scrollWrap,m,i),Pe("initialZoomInEnd",(function(){i.setContent(x[0],p-1),i.setContent(x[2],p+1),x[0].el.style.display=x[2].el.style.display="block",c.focus&&e.focus(),He()})),i.setContent(x[1],p),i.updateCurrItem(),ke("afterInit"),we||(E=setInterval((function(){Xe||Y||ee||g!==i.currItem.initialZoomLevel||i.updateSize()}),1e3)),o.addClass(e,"pswp--visible")}},close:function(){s&&(s=!1,l=!0,ke("close"),qe(),en(i.currItem,null,!0,i.destroy))},destroy:function(){ke("destroy"),Zt&&clearTimeout(Zt),e.setAttribute("aria-hidden","true"),e.className=L,E&&clearInterval(E),o.unbind(i.scrollWrap,m,i),o.unbind(window,"scroll",i),xt(),tt(),je=null},panTo:function(e,t,n){n||(e>ne.min.x?e=ne.min.x:e<ne.max.x&&(e=ne.max.x),t>ne.min.y?t=ne.min.y:t<ne.max.y&&(t=ne.max.y)),he.x=e,he.y=t,Ce()},handleEvent:function(e){e=e||window.event,v[e.type]&&v[e.type](e)},goTo:function(e){var t=(e=Se(e))-p;be=t,p=e,i.currItem=Xt(p),me-=t,Le(ge.x*me),tt(),oe=!1,i.updateCurrItem()},next:function(){i.goTo(p+1)},prev:function(){i.goTo(p-1)},updateCurrZoomItem:function(e){if(e&&ke("beforeChange",0),x[1].el.children.length){var t=x[1].el.children[0];re=o.hasClass(t,"pswp__zoom-wrap")?t.style:null}else re=null;ne=i.currItem.bounds,b=g=i.currItem.initialZoomLevel,he.x=ne.center.x,he.y=ne.center.y,e&&ke("afterChange")},invalidateCurrItems:function(){_=!0;for(var e=0;e<u;e++)x[e].item&&(x[e].item.needsUpdate=!0)},updateCurrItem:function(e){if(0!==be){var t,n=Math.abs(be);if(!(e&&n<2)){i.currItem=Xt(p),_e=!1,ke("beforeChange",be),n>=u&&(h+=be+(be>0?-u:u),n=u);for(var r=0;r<n;r++)be>0?(t=x.shift(),x[u-1]=t,h++,Ne((h+2)*ge.x,t.el.style),i.setContent(t,p-n+r+1+1)):(t=x.pop(),x.unshift(t),h--,Ne(h*ge.x,t.el.style),i.setContent(t,p+n-r-1-1));if(re&&1===Math.abs(be)){var o=Xt(S);o.initialZoomLevel!==g&&(un(o,ye),fn(o),Ae(o))}be=0,i.updateCurrZoomItem(),S=p,ke("afterChange")}}},updateSize:function(t){if(!we&&c.modal){var n=o.getScrollY();if(F!==n&&(e.style.top=n+"px",F=n),!t&&Ee.x===window.innerWidth&&Ee.y===window.innerHeight)return;Ee.x=window.innerWidth,Ee.y=window.innerHeight,e.style.height=Ee.y+"px"}if(ye.x=i.scrollWrap.clientWidth,ye.y=i.scrollWrap.clientHeight,Ke(),ge.x=ye.x+Math.round(ye.x*c.spacing),ge.y=ye.y,Le(ge.x*me),ke("beforeResize"),void 0!==h){for(var r,a,s,l=0;l<u;l++)r=x[l],Ne((l+h)*ge.x,r.el.style),s=p+l-1,c.loop&&Jt()>2&&(s=Se(s)),(a=Xt(s))&&(_||a.needsUpdate||!a.bounds)?(i.cleanSlide(a),i.setContent(r,s),1===l&&(i.currItem=a,i.updateCurrZoomItem(!0)),a.needsUpdate=!1):-1===r.index&&s>=0&&i.setContent(r,s),a&&a.container&&(un(a,ye),fn(a),Ae(a));_=!1}b=g=i.currItem.initialZoomLevel,(ne=i.currItem.bounds)&&(he.x=ne.center.x,he.y=ne.center.y,Ce(!0)),ke("resize")},zoomTo:function(e,t,n,r,i){t&&(b=g,bt.x=Math.abs(t.x)-he.x,bt.y=Math.abs(t.y)-he.y,Me(de,he));var a=ze(e,!1),u={};Ve("x",a,u,e),Ve("y",a,u,e);var c=g,s={x:he.x,y:he.y};Fe(u);var l=function(t){1===t?(g=e,he.x=u.x,he.y=u.y):(g=(e-c)*t+c,he.x=(u.x-s.x)*t+s.x,he.y=(u.y-s.y)*t+s.y),i&&i(t),Ce(1===t)};n?nt("customZoomTo",0,1,n,r||o.easing.sine.inOut,l):l(1)}},ot=30,it=10,at={},ut={},ct={},st={},lt={},ft=[],pt={},dt=[],ht={},yt=0,mt=fe(),vt=0,gt=fe(),bt=fe(),wt=fe(),Ot=function(e,t){return e.x===t.x&&e.y===t.y},Et=function(e,t){return Math.abs(e.x-t.x)<a&&Math.abs(e.y-t.y)<a},_t=function(e,t){return ht.x=Math.abs(e.x-t.x),ht.y=Math.abs(e.y-t.y),Math.sqrt(ht.x*ht.x+ht.y*ht.y)},xt=function(){Q&&(N(Q),Q=null)},St=function(){Y&&(Q=A(St),Ht())},jt=function(){return!("fit"===c.scaleMode&&g===i.currItem.initialZoomLevel)},Pt=function(e,t){return!(!e||e===document)&&!(e.getAttribute("class")&&e.getAttribute("class").indexOf("pswp__scroll-wrap")>-1)&&(t(e)?e:Pt(e.parentNode,t))},kt={},It=function(e,t){return kt.prevent=!Pt(e.target,c.isClickableElement),ke("preventDragEvent",e,t,kt),kt.prevent},Tt=function(e,t){return t.x=e.pageX,t.y=e.pageY,t.id=e.identifier,t},Rt=function(e,t,n){n.x=.5*(e.x+t.x),n.y=.5*(e.y+t.y)},Ct=function(e,t,n){if(e-q>50){var r=dt.length>2?dt.shift():{};r.x=t,r.y=n,dt.push(r),q=e}},At=function(){var e=he.y-i.currItem.initialPosition.y;return 1-Math.abs(e/(ye.y/2))},Nt={},Lt={},Dt=[],Mt=function(e){for(;Dt.length>0;)Dt.pop();return R?(le=0,ft.forEach((function(e){0===le?Dt[0]=e:1===le&&(Dt[1]=e),le++}))):e.type.indexOf("touch")>-1?e.touches&&e.touches.length>0&&(Dt[0]=Tt(e.touches[0],Nt),e.touches.length>1&&(Dt[1]=Tt(e.touches[1],Lt))):(Nt.x=e.pageX,Nt.y=e.pageY,Nt.id="",Dt[0]=Nt),Dt},Ft=function(e,t){var n,r,o,a,u=he[e]+t[e],s=t[e]>0,l=gt.x+t.x,f=gt.x-pt.x;if(n=u>ne.min[e]||u<ne.max[e]?c.panEndFriction:1,u=he[e]+t[e]*n,(c.allowPanToNext||g===i.currItem.initialZoomLevel)&&(re?"h"!==ie||"x"!==e||$||(s?(u>ne.min[e]&&(n=c.panEndFriction,ne.min[e],r=ne.min[e]-de[e]),(r<=0||f<0)&&Jt()>1?(a=l,f<0&&l>pt.x&&(a=pt.x)):ne.min.x!==ne.max.x&&(o=u)):(u<ne.max[e]&&(n=c.panEndFriction,ne.max[e],r=de[e]-ne.max[e]),(r<=0||f>0)&&Jt()>1?(a=l,f>0&&l<pt.x&&(a=pt.x)):ne.min.x!==ne.max.x&&(o=u))):a=l,"x"===e))return void 0!==a&&(Le(a,!0),X=a!==pt.x),ne.min.x!==ne.max.x&&(void 0!==o?he.x=o:X||(he.x+=t.x*n)),void 0!==a;oe||X||g>i.currItem.fitRatio&&(he[e]+=t[e]*n)},Ut=function(e){if(!("mousedown"===e.type&&e.button>0))if(Qt)e.preventDefault();else if(!V||"mousedown"!==e.type){if(It(e,!0)&&e.preventDefault(),ke("pointerDown"),R){var t=o.arraySearch(ft,e.pointerId,"id");t<0&&(t=ft.length),ft[t]={x:e.pageX,y:e.pageY,id:e.pointerId}}var n=Mt(e),r=n.length;J=null,tt(),Y&&1!==r||(Y=ae=!0,o.bind(window,y,i),G=se=ue=W=X=K=Z=$=!1,ie=null,ke("firstTouchStart",n),Me(de,he),pe.x=pe.y=0,Me(st,n[0]),Me(lt,st),pt.x=ge.x*me,dt=[{x:st.x,y:st.y}],q=H=Ie(),ze(g,!0),xt(),St()),!ee&&r>1&&!oe&&!X&&(b=g,$=!1,ee=Z=!0,pe.y=pe.x=0,Me(de,he),Me(at,n[0]),Me(ut,n[1]),Rt(at,ut,wt),bt.x=Math.abs(wt.x)-he.x,bt.y=Math.abs(wt.y)-he.y,te=_t(at,ut))}},Bt=function(e){if(e.preventDefault(),R){var t=o.arraySearch(ft,e.pointerId,"id");if(t>-1){var n=ft[t];n.x=e.pageX,n.y=e.pageY}}if(Y){var r=Mt(e);if(ie||K||ee)J=r;else if(gt.x!==ge.x*me)ie="h";else{var i=Math.abs(r[0].x-st.x)-Math.abs(r[0].y-st.y);Math.abs(i)>=it&&(ie=i>0?"h":"v",J=r)}}},Ht=function(){if(J){var e=J.length;if(0!==e)if(Me(at,J[0]),ct.x=at.x-st.x,ct.y=at.y-st.y,ee&&e>1){if(st.x=at.x,st.y=at.y,!ct.x&&!ct.y&&Ot(J[1],ut))return;Me(ut,J[1]),$||($=!0,ke("zoomGestureStarted"));var t=_t(at,ut),n=Vt(t);n>i.currItem.initialZoomLevel+i.currItem.initialZoomLevel/15&&(se=!0);var r=1,o=Ge(),a=We();if(n<o)if(c.pinchToClose&&!se&&b<=i.currItem.initialZoomLevel){var u=1-(o-n)/(o/1.2);Te(u),ke("onPinchClose",u),ue=!0}else(r=(o-n)/o)>1&&(r=1),n=o-r*(o/3);else n>a&&((r=(n-a)/(6*o))>1&&(r=1),n=a+r*o);r<0&&(r=0),Rt(at,ut,mt),pe.x+=mt.x-wt.x,pe.y+=mt.y-wt.y,Me(wt,mt),he.x=De("x",n),he.y=De("y",n),G=n>g,g=n,Ce()}else{if(!ie)return;if(ae&&(ae=!1,Math.abs(ct.x)>=it&&(ct.x-=J[0].x-lt.x),Math.abs(ct.y)>=it&&(ct.y-=J[0].y-lt.y)),st.x=at.x,st.y=at.y,0===ct.x&&0===ct.y)return;if("v"===ie&&c.closeOnVerticalDrag&&!jt()){pe.y+=ct.y,he.y+=ct.y;var s=At();return W=!0,ke("onVerticalDrag",s),Te(s),void Ce()}Ct(Ie(),at.x,at.y),K=!0,ne=i.currItem.bounds,Ft("x",ct)||(Ft("y",ct),Fe(he),Ce())}}},qt=function(e){if(U.isOldAndroid){if(V&&"mouseup"===e.type)return;e.type.indexOf("touch")>-1&&(clearTimeout(V),V=setTimeout((function(){V=0}),600))}var t;if(ke("pointerUp"),It(e,!1)&&e.preventDefault(),R){var n=o.arraySearch(ft,e.pointerId,"id");if(n>-1)if(t=ft.splice(n,1)[0],navigator.msPointerEnabled){var r={4:"mouse",2:"touch",3:"pen"};t.type=r[e.pointerType],t.type||(t.type=e.pointerType||"mouse")}else t.type=e.pointerType||"mouse"}var a,u=Mt(e),s=u.length;if("mouseup"===e.type&&(s=0),2===s)return J=null,!0;1===s&&Me(lt,u[0]),0!==s||ie||oe||(t||("mouseup"===e.type?t={x:e.pageX,y:e.pageY,type:"mouse"}:e.changedTouches&&e.changedTouches[0]&&(t={x:e.changedTouches[0].pageX,y:e.changedTouches[0].pageY,type:"touch"})),ke("touchRelease",e,t));var l=-1;if(0===s&&(Y=!1,o.unbind(window,y,i),xt(),ee?l=0:-1!==vt&&(l=Ie()-vt)),vt=1===s?Ie():-1,a=-1!==l&&l<150?"zoom":"swipe",ee&&s<2&&(ee=!1,1===s&&(a="zoomPointerUp"),ke("zoomGestureEnded")),J=null,K||$||oe||W)if(tt(),z||(z=zt()),z.calculateSwipeSpeed("x"),W)if(At()<c.verticalDragRange)i.close();else{var f=he.y,p=ce;nt("verticalDrag",0,1,300,o.easing.cubic.out,(function(e){he.y=(i.currItem.initialPosition.y-f)*e+f,Te((1-p)*e+p),Ce()})),ke("onVerticalDrag",1)}else{if((X||oe)&&0===s){if(Wt(a,z))return;a="zoomPointerUp"}oe||("swipe"===a?!X&&g>i.currItem.fitRatio&&Gt(z):Yt())}},zt=function(){var e,t,n={lastFlickOffset:{},lastFlickDist:{},lastFlickSpeed:{},slowDownRatio:{},slowDownRatioReverse:{},speedDecelerationRatio:{},speedDecelerationRatioAbs:{},distanceOffset:{},backAnimDestination:{},backAnimStarted:{},calculateSwipeSpeed:function(r){dt.length>1?(e=Ie()-q+50,t=dt[dt.length-2][r]):(e=Ie()-H,t=lt[r]),n.lastFlickOffset[r]=st[r]-t,n.lastFlickDist[r]=Math.abs(n.lastFlickOffset[r]),n.lastFlickDist[r]>20?n.lastFlickSpeed[r]=n.lastFlickOffset[r]/e:n.lastFlickSpeed[r]=0,Math.abs(n.lastFlickSpeed[r])<.1&&(n.lastFlickSpeed[r]=0),n.slowDownRatio[r]=.95,n.slowDownRatioReverse[r]=1-n.slowDownRatio[r],n.speedDecelerationRatio[r]=1},calculateOverBoundsAnimOffset:function(e,t){n.backAnimStarted[e]||(he[e]>ne.min[e]?n.backAnimDestination[e]=ne.min[e]:he[e]<ne.max[e]&&(n.backAnimDestination[e]=ne.max[e]),void 0!==n.backAnimDestination[e]&&(n.slowDownRatio[e]=.7,n.slowDownRatioReverse[e]=1-n.slowDownRatio[e],n.speedDecelerationRatioAbs[e]<.05&&(n.lastFlickSpeed[e]=0,n.backAnimStarted[e]=!0,nt("bounceZoomPan"+e,he[e],n.backAnimDestination[e],t||300,o.easing.sine.out,(function(t){he[e]=t,Ce()})))))},calculateAnimOffset:function(e){n.backAnimStarted[e]||(n.speedDecelerationRatio[e]=n.speedDecelerationRatio[e]*(n.slowDownRatio[e]+n.slowDownRatioReverse[e]-n.slowDownRatioReverse[e]*n.timeDiff/10),n.speedDecelerationRatioAbs[e]=Math.abs(n.lastFlickSpeed[e]*n.speedDecelerationRatio[e]),n.distanceOffset[e]=n.lastFlickSpeed[e]*n.speedDecelerationRatio[e]*n.timeDiff,he[e]+=n.distanceOffset[e])},panAnimLoop:function(){if(Qe.zoomPan&&(Qe.zoomPan.raf=A(n.panAnimLoop),n.now=Ie(),n.timeDiff=n.now-n.lastNow,n.lastNow=n.now,n.calculateAnimOffset("x"),n.calculateAnimOffset("y"),Ce(),n.calculateOverBoundsAnimOffset("x"),n.calculateOverBoundsAnimOffset("y"),n.speedDecelerationRatioAbs.x<.05&&n.speedDecelerationRatioAbs.y<.05))return he.x=Math.round(he.x),he.y=Math.round(he.y),Ce(),void Je("zoomPan")}};return n},Gt=function(e){if(e.calculateSwipeSpeed("y"),ne=i.currItem.bounds,e.backAnimDestination={},e.backAnimStarted={},Math.abs(e.lastFlickSpeed.x)<=.05&&Math.abs(e.lastFlickSpeed.y)<=.05)return e.speedDecelerationRatioAbs.x=e.speedDecelerationRatioAbs.y=0,e.calculateOverBoundsAnimOffset("x"),e.calculateOverBoundsAnimOffset("y"),!0;et("zoomPan"),e.lastNow=Ie(),e.panAnimLoop()},Wt=function(e,t){var n,r,a;if(oe||(yt=p),"swipe"===e){var u=st.x-lt.x,s=t.lastFlickDist.x<10;u>ot&&(s||t.lastFlickOffset.x>20)?r=-1:u<-ot&&(s||t.lastFlickOffset.x<-20)&&(r=1)}r&&((p+=r)<0?(p=c.loop?Jt()-1:0,a=!0):p>=Jt()&&(p=c.loop?0:Jt()-1,a=!0),a&&!c.loop||(be+=r,me-=r,n=!0));var l,f=ge.x*me,d=Math.abs(f-gt.x);return n||f>gt.x==t.lastFlickSpeed.x>0?(l=Math.abs(t.lastFlickSpeed.x)>0?d/Math.abs(t.lastFlickSpeed.x):333,l=Math.min(l,400),l=Math.max(l,250)):l=333,yt===p&&(n=!1),oe=!0,ke("mainScrollAnimStart"),nt("mainScroll",gt.x,f,l,o.easing.cubic.out,Le,(function(){tt(),oe=!1,yt=-1,(n||yt!==p)&&i.updateCurrItem(),ke("mainScrollAnimComplete")})),n&&i.updateCurrItem(!0),n},Vt=function(e){return 1/te*e*b},Yt=function(){var e=g,t=Ge(),n=We();g<t?e=t:g>n&&(e=n);var r,a=1,u=ce;return ue&&!G&&!se&&g<t?(i.close(),!0):(ue&&(r=function(e){Te((a-u)*e+u)}),i.zoomTo(e,0,200,o.easing.cubic.out,r),!0)};xe("Gestures",{publicMethods:{initGestures:function(){var e=function(e,t,n,r,o){j=e+t,P=e+n,k=e+r,I=o?e+o:""};(R=U.pointerEvent)&&U.touch&&(U.touch=!1),R?navigator.msPointerEnabled?e("MSPointer","Down","Move","Up","Cancel"):e("pointer","down","move","up","cancel"):U.touch?(e("touch","start","move","end","cancel"),C=!0):e("mouse","down","move","up"),y=P+" "+k+" "+I,m=j,R&&!C&&(C=navigator.maxTouchPoints>1||navigator.msMaxTouchPoints>1),i.likelyTouchDevice=C,v[j]=Ut,v[P]=Bt,v[k]=qt,I&&(v[I]=v[k]),U.touch&&(m+=" mousedown",y+=" mousemove mouseup",v.mousedown=v[j],v.mousemove=v[P],v.mouseup=v[k]),C||(c.allowPanToNext=!1)}}});var Zt,$t,Kt,Qt,Xt,Jt,en=function(t,n,r,a){var u;Zt&&clearTimeout(Zt),Qt=!0,Kt=!0,t.initialLayout?(u=t.initialLayout,t.initialLayout=null):u=c.getThumbBoundsFn&&c.getThumbBoundsFn(p);var s,l,d=r?c.hideAnimationDuration:c.showAnimationDuration,h=function(){Je("initialZoom"),r?(i.template.removeAttribute("style"),i.bg.removeAttribute("style")):(Te(1),n&&(n.style.display="block"),o.addClass(e,"pswp--animated-in"),ke("initialZoom"+(r?"OutEnd":"InEnd"))),a&&a(),Qt=!1};if(!d||!u||void 0===u.x)return ke("initialZoom"+(r?"Out":"In")),g=t.initialZoomLevel,Me(he,t.initialPosition),Ce(),e.style.opacity=r?0:1,Te(1),void(d?setTimeout((function(){h()}),d):h());s=f,l=!i.currItem.src||i.currItem.loadError||c.showHideOpacity,t.miniImg&&(t.miniImg.style.webkitBackfaceVisibility="hidden"),r||(g=u.w/t.w,he.x=u.x,he.y=u.y-D,i[l?"template":"bg"].style.opacity=.001,Ce()),et("initialZoom"),r&&!s&&o.removeClass(e,"pswp--animated-in"),l&&(r?o[(s?"remove":"add")+"Class"](e,"pswp--animate_opacity"):setTimeout((function(){o.addClass(e,"pswp--animate_opacity")}),30)),Zt=setTimeout((function(){if(ke("initialZoom"+(r?"Out":"In")),r){var n=u.w/t.w,i={x:he.x,y:he.y},a=g,c=ce,f=function(t){1===t?(g=n,he.x=u.x,he.y=u.y-F):(g=(n-a)*t+a,he.x=(u.x-i.x)*t+i.x,he.y=(u.y-F-i.y)*t+i.y),Ce(),l?e.style.opacity=1-t:Te(c-t*c)};s?nt("initialZoom",0,1,d,o.easing.cubic.out,f,h):(f(1),Zt=setTimeout(h,d+20))}else g=t.initialZoomLevel,Me(he,t.initialPosition),Ce(),Te(1),l?e.style.opacity=1:Te(1),Zt=setTimeout(h,d+20)}),r?25:90)},tn={},nn=[],rn={index:0,errorMsg:'<div class="pswp__error-msg"><a href="%url%" target="_blank">The image</a> could not be loaded.</div>',forceProgressiveLoading:!1,preload:[1,1],getNumItemsFn:function(){return $t.length}},on=function(){return{center:{x:0,y:0},max:{x:0,y:0},min:{x:0,y:0}}},an=function(e,t,n){var r=e.bounds;r.center.x=Math.round((tn.x-t)/2),r.center.y=Math.round((tn.y-n)/2)+e.vGap.top,r.max.x=t>tn.x?Math.round(tn.x-t):r.center.x,r.max.y=n>tn.y?Math.round(tn.y-n)+e.vGap.top:r.center.y,r.min.x=t>tn.x?0:r.center.x,r.min.y=n>tn.y?e.vGap.top:r.center.y},un=function(e,t,n){if(e.src&&!e.loadError){var r=!n;if(r&&(e.vGap||(e.vGap={top:0,bottom:0}),ke("parseVerticalMargin",e)),tn.x=t.x,tn.y=t.y-e.vGap.top-e.vGap.bottom,r){var o=tn.x/e.w,i=tn.y/e.h;e.fitRatio=o<i?o:i;var a=c.scaleMode;"orig"===a?n=1:"fit"===a&&(n=e.fitRatio),n>1&&(n=1),e.initialZoomLevel=n,e.bounds||(e.bounds=on())}if(!n)return;return an(e,e.w*n,e.h*n),r&&n===e.initialZoomLevel&&(e.initialPosition=e.bounds.center),e.bounds}return e.w=e.h=0,e.initialZoomLevel=e.fitRatio=1,e.bounds=on(),e.initialPosition=e.bounds.center,e.bounds},cn=function(e,t,n,r,o,a){t.loadError||r&&(t.imageAppended=!0,fn(t,r,t===i.currItem&&_e),n.appendChild(r),a&&setTimeout((function(){t&&t.loaded&&t.placeholder&&(t.placeholder.style.display="none",t.placeholder=null)}),500))},sn=function(e){e.loading=!0,e.loaded=!1;var t=e.img=o.createEl("pswp__img","img"),n=function(){e.loading=!1,e.loaded=!0,e.loadComplete?e.loadComplete(e):e.img=null,t.onload=t.onerror=null,t=null};return t.onload=n,t.onerror=function(){e.loadError=!0,n()},t.src=e.src,t},ln=function(e,t){if(e.src&&e.loadError&&e.container)return t&&(e.container.innerHTML=""),e.container.innerHTML=c.errorMsg.replace("%url%",e.src),!0},fn=function(e,t,n){if(e.src){t||(t=e.container.lastChild);var r=n?e.w:Math.round(e.w*e.fitRatio),o=n?e.h:Math.round(e.h*e.fitRatio);e.placeholder&&!e.loaded&&(e.placeholder.style.width=r+"px",e.placeholder.style.height=o+"px"),t.style.width=r+"px",t.style.height=o+"px"}},pn=function(){if(nn.length){for(var e,t=0;t<nn.length;t++)(e=nn[t]).holder.index===e.index&&cn(e.index,e.item,e.baseDiv,e.img,!1,e.clearPlaceholder);nn=[]}};xe("Controller",{publicMethods:{lazyLoadItem:function(e){e=Se(e);var t=Xt(e);t&&(!t.loaded&&!t.loading||_)&&(ke("gettingData",e,t),t.src&&sn(t))},initController:function(){o.extend(c,rn,!0),i.items=$t=n,Xt=i.getItemAt,Jt=c.getNumItemsFn,c.loop,Jt()<3&&(c.loop=!1),Pe("beforeChange",(function(e){var t,n=c.preload,r=null===e||e>=0,o=Math.min(n[0],Jt()),a=Math.min(n[1],Jt());for(t=1;t<=(r?a:o);t++)i.lazyLoadItem(p+t);for(t=1;t<=(r?o:a);t++)i.lazyLoadItem(p-t)})),Pe("initialLayout",(function(){i.currItem.initialLayout=c.getThumbBoundsFn&&c.getThumbBoundsFn(p)})),Pe("mainScrollAnimComplete",pn),Pe("initialZoomInEnd",pn),Pe("destroy",(function(){for(var e,t=0;t<$t.length;t++)(e=$t[t]).container&&(e.container=null),e.placeholder&&(e.placeholder=null),e.img&&(e.img=null),e.preloader&&(e.preloader=null),e.loadError&&(e.loaded=e.loadError=!1);nn=null}))},getItemAt:function(e){return e>=0&&void 0!==$t[e]&&$t[e]},allowProgressiveImg:function(){return c.forceProgressiveLoading||!C||c.mouseUsed||screen.width>1200},setContent:function(e,t){c.loop&&(t=Se(t));var n=i.getItemAt(e.index);n&&(n.container=null);var r,a=i.getItemAt(t);if(a){ke("gettingData",t,a),e.index=t,e.item=a;var u=a.container=o.createEl("pswp__zoom-wrap");if(!a.src&&a.html&&(a.html.tagName?u.appendChild(a.html):u.innerHTML=a.html),ln(a),un(a,ye),!a.src||a.loadError||a.loaded)a.src&&!a.loadError&&((r=o.createEl("pswp__img","img")).style.opacity=1,r.src=a.src,fn(a,r),cn(t,a,u,r,!0));else{if(a.loadComplete=function(n){if(s){if(e&&e.index===t){if(ln(n,!0))return n.loadComplete=n.img=null,un(n,ye),Ae(n),void(e.index===p&&i.updateCurrZoomItem());n.imageAppended?!Qt&&n.placeholder&&(n.placeholder.style.display="none",n.placeholder=null):U.transform&&(oe||Qt)?nn.push({item:n,baseDiv:u,img:n.img,index:t,holder:e,clearPlaceholder:!0}):cn(t,n,u,n.img,oe||Qt,!0)}n.loadComplete=null,n.img=null,ke("imageLoadComplete",t,n)}},o.features.transform){var l="pswp__img pswp__img--placeholder";l+=a.msrc?"":" pswp__img--placeholder--blank";var f=o.createEl(l,a.msrc?"img":"");a.msrc&&(f.src=a.msrc),fn(a,f),u.appendChild(f),a.placeholder=f}a.loading||sn(a),i.allowProgressiveImg()&&(!Kt&&U.transform?nn.push({item:a,baseDiv:u,img:a.img,index:t,holder:e}):cn(t,a,u,a.img,!0,!0))}Kt||t!==p?Ae(a):(re=u.style,en(a,r||a.img)),e.el.innerHTML="",e.el.appendChild(u)}else e.el.innerHTML=""},cleanSlide:function(e){e.img&&(e.img.onload=e.img.onerror=null),e.loaded=e.loading=e.img=e.imageAppended=!1}}});var dn,hn,yn={},mn=function(e,t,n){var r=document.createEvent("CustomEvent"),o={origEvent:e,target:e.target,releasePoint:t,pointerType:n||"touch"};r.initCustomEvent("pswpTap",!0,!0,o),e.target.dispatchEvent(r)};xe("Tap",{publicMethods:{initTap:function(){Pe("firstTouchStart",i.onTapStart),Pe("touchRelease",i.onTapRelease),Pe("destroy",(function(){yn={},dn=null}))},onTapStart:function(e){e.length>1&&(clearTimeout(dn),dn=null)},onTapRelease:function(e,t){if(t&&!K&&!Z&&!Xe){var n=t;if(dn&&(clearTimeout(dn),dn=null,Et(n,yn)))return void ke("doubleTap",n);if("mouse"===t.type)return void mn(e,t,"mouse");if("BUTTON"===e.target.tagName.toUpperCase()||o.hasClass(e.target,"pswp__single-tap"))return void mn(e,t);Me(yn,n),dn=setTimeout((function(){mn(e,t),dn=null}),300)}}}}),xe("DesktopZoom",{publicMethods:{initDesktopZoom:function(){M||(C?Pe("mouseUsed",(function(){i.setupDesktopZoom()})):i.setupDesktopZoom(!0))},setupDesktopZoom:function(t){hn={};var n="wheel mousewheel DOMMouseScroll";Pe("bindEvents",(function(){o.bind(e,n,i.handleMouseWheel)})),Pe("unbindEvents",(function(){hn&&o.unbind(e,n,i.handleMouseWheel)})),i.mouseZoomedIn=!1;var r,a=function(){i.mouseZoomedIn&&(o.removeClass(e,"pswp--zoomed-in"),i.mouseZoomedIn=!1),g<1?o.addClass(e,"pswp--zoom-allowed"):o.removeClass(e,"pswp--zoom-allowed"),u()},u=function(){r&&(o.removeClass(e,"pswp--dragging"),r=!1)};Pe("resize",a),Pe("afterChange",a),Pe("pointerDown",(function(){i.mouseZoomedIn&&(r=!0,o.addClass(e,"pswp--dragging"))})),Pe("pointerUp",u),t||a()},handleMouseWheel:function(e){if(g<=i.currItem.fitRatio)return c.modal&&(!c.closeOnScroll||Xe||Y?e.preventDefault():T&&Math.abs(e.deltaY)>2&&(f=!0,i.close())),!0;if(e.stopPropagation(),hn.x=0,"deltaX"in e)1===e.deltaMode?(hn.x=18*e.deltaX,hn.y=18*e.deltaY):(hn.x=e.deltaX,hn.y=e.deltaY);else if("wheelDelta"in e)e.wheelDeltaX&&(hn.x=-.16*e.wheelDeltaX),e.wheelDeltaY?hn.y=-.16*e.wheelDeltaY:hn.y=-.16*e.wheelDelta;else{if(!("detail"in e))return;hn.y=e.detail}ze(g,!0);var t=he.x-hn.x,n=he.y-hn.y;(c.modal||t<=ne.min.x&&t>=ne.max.x&&n<=ne.min.y&&n>=ne.max.y)&&e.preventDefault(),i.panTo(t,n)},toggleDesktopZoom:function(t){t=t||{x:ye.x/2+ve.x,y:ye.y/2+ve.y};var n=c.getDoubleTapZoom(!0,i.currItem),r=g===n;i.mouseZoomedIn=!r,i.zoomTo(r?i.currItem.initialZoomLevel:n,t,333),o[(r?"remove":"add")+"Class"](e,"pswp--zoomed-in")}}});var vn,gn,bn,wn,On,En,_n,xn,Sn,jn,Pn,kn,In={history:!0,galleryUID:1},Tn=function(){return Pn.hash.substring(1)},Rn=function(){vn&&clearTimeout(vn),bn&&clearTimeout(bn)},Cn=function(){var e=Tn(),t={};if(e.length<5)return t;var n,r=e.split("&");for(n=0;n<r.length;n++)if(r[n]){var o=r[n].split("=");o.length<2||(t[o[0]]=o[1])}if(c.galleryPIDs){var i=t.pid;for(t.pid=0,n=0;n<$t.length;n++)if($t[n].pid===i){t.pid=n;break}}else t.pid=parseInt(t.pid,10)-1;return t.pid<0&&(t.pid=0),t},An=function(){if(bn&&clearTimeout(bn),Xe||Y)bn=setTimeout(An,500);else{wn?clearTimeout(gn):wn=!0;var e=p+1,t=Xt(p);t.hasOwnProperty("pid")&&(e=t.pid);var n=_n+"&gid="+c.galleryUID+"&pid="+e;xn||-1===Pn.hash.indexOf(n)&&(jn=!0);var r=Pn.href.split("#")[0]+"#"+n;kn?"#"+n!==window.location.hash&&history[xn?"replaceState":"pushState"]("",document.title,r):xn?Pn.replace(r):Pn.hash=n,xn=!0,gn=setTimeout((function(){wn=!1}),60)}};xe("History",{publicMethods:{initHistory:function(){if(o.extend(c,In,!0),c.history){Pn=window.location,jn=!1,Sn=!1,xn=!1,_n=Tn(),kn="pushState"in history,_n.indexOf("gid=")>-1&&(_n=(_n=_n.split("&gid=")[0]).split("?gid=")[0]),Pe("afterChange",i.updateURL),Pe("unbindEvents",(function(){o.unbind(window,"hashchange",i.onHashChange)}));var e=function(){En=!0,Sn||(jn?history.back():_n?Pn.hash=_n:kn?history.pushState("",document.title,Pn.pathname+Pn.search):Pn.hash=""),Rn()};Pe("unbindEvents",(function(){f&&e()})),Pe("destroy",(function(){En||e()})),Pe("firstUpdate",(function(){p=Cn().pid}));var t=_n.indexOf("pid=");t>-1&&"&"===(_n=_n.substring(0,t)).slice(-1)&&(_n=_n.slice(0,-1)),setTimeout((function(){s&&o.bind(window,"hashchange",i.onHashChange)}),40)}},onHashChange:function(){if(Tn()===_n)return Sn=!0,void i.close();wn||(On=!0,i.goTo(Cn().pid),On=!1)},updateURL:function(){Rn(),On||(xn?vn=setTimeout(An,800):An())}}}),o.extend(i,rt)}})?r.call(t,n,t,e):r)||(e.exports=o)},14777:e=>{!function(){const t=({_console:e,data:t,prefix:n=null})=>{const r={10:e.trace,20:e.debug,30:e.info,40:e.warn,50:e.error,60:e.error};try{const e=JSON.parse(t),{hostname:o,level:i,msg:a,name:u,pid:c,time:s,v:l}=e,f=function(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}(e,["hostname","level","msg","name","pid","time","v"]),p=`[${n?`${n}|${u}`:u}] ${a||"<no message>"}`;Object.keys(f).length?r[i](p,f):r[i](p)}catch(n){e.debug("[pino-devtools] could not write log:",t)}},n=({_WebSocket:e=WebSocket,_console:n=console,_window:r=window}={})=>{const{hostname:o,port:i}=r.location;new e(`ws://${o}:${parseInt(i,10)+1}`).addEventListener("message",(({data:e})=>{t({data:e,_console:n})}))},r=({host:e="127.0.0.1",port:n=3010,_console:r=console}={})=>{if(!e)throw new Error("You must pass `host` to `fetchBufferedLogs()`.");if(!n)throw new Error("You must pass `port` to `fetchBufferedLogs()`.");return fetch(`http://${e}:${n}/server-logs.json`).then((e=>e.json())).then((({logs:e,prefix:n})=>{e.forEach((e=>{t({_console:r,data:e,prefix:n})}))})).catch((e=>{r.debug("[pino-devtools] error while fetching the logs:",{error:e.toString()})}))};e.exports?e.exports={fetchBufferedLogs:r,readWebSocketLogs:n}:n()}()},93667:(e,t,n)=>{"use strict";var r=n(21587);function o(){}function i(){}i.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,i,a){if(a!==r){var u=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw u.name="Invariant Violation",u}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:o};return n.PropTypes=n,n}},53486:(e,t,n)=>{e.exports=n(93667)()},21587:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},744:e=>{"use strict";var t=String.prototype.replace,n=/%20/g,r="RFC1738",o="RFC3986";e.exports={default:o,formatters:{RFC1738:function(e){return t.call(e,n,"+")},RFC3986:function(e){return String(e)}},RFC1738:r,RFC3986:o}},27107:(e,t,n)=>{"use strict";var r=n(4974),o=n(15377),i=n(744);e.exports={formats:i,parse:o,stringify:r}},15377:(e,t,n)=>{"use strict";var r=n(69857),o=Object.prototype.hasOwnProperty,i=Array.isArray,a={allowDots:!1,allowPrototypes:!1,allowSparse:!1,arrayLimit:20,charset:"utf-8",charsetSentinel:!1,comma:!1,decoder:r.decode,delimiter:"&",depth:5,ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictNullHandling:!1},u=function(e){return e.replace(/&#(\d+);/g,(function(e,t){return String.fromCharCode(parseInt(t,10))}))},c=function(e,t){return e&&"string"==typeof e&&t.comma&&e.indexOf(",")>-1?e.split(","):e},s=function(e,t,n,r){if(e){var i=n.allowDots?e.replace(/\.([^.[]+)/g,"[$1]"):e,a=/(\[[^[\]]*])/g,u=n.depth>0&&/(\[[^[\]]*])/.exec(i),s=u?i.slice(0,u.index):i,l=[];if(s){if(!n.plainObjects&&o.call(Object.prototype,s)&&!n.allowPrototypes)return;l.push(s)}for(var f=0;n.depth>0&&null!==(u=a.exec(i))&&f<n.depth;){if(f+=1,!n.plainObjects&&o.call(Object.prototype,u[1].slice(1,-1))&&!n.allowPrototypes)return;l.push(u[1])}return u&&l.push("["+i.slice(u.index)+"]"),function(e,t,n,r){for(var o=r?t:c(t,n),i=e.length-1;i>=0;--i){var a,u=e[i];if("[]"===u&&n.parseArrays)a=[].concat(o);else{a=n.plainObjects?Object.create(null):{};var s="["===u.charAt(0)&&"]"===u.charAt(u.length-1)?u.slice(1,-1):u,l=parseInt(s,10);n.parseArrays||""!==s?!isNaN(l)&&u!==s&&String(l)===s&&l>=0&&n.parseArrays&&l<=n.arrayLimit?(a=[])[l]=o:"__proto__"!==s&&(a[s]=o):a={0:o}}o=a}return o}(l,t,n,r)}};e.exports=function(e,t){var n=function(e){if(!e)return a;if(null!==e.decoder&&void 0!==e.decoder&&"function"!=typeof e.decoder)throw new TypeError("Decoder has to be a function.");if(void 0!==e.charset&&"utf-8"!==e.charset&&"iso-8859-1"!==e.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var t=void 0===e.charset?a.charset:e.charset;return{allowDots:void 0===e.allowDots?a.allowDots:!!e.allowDots,allowPrototypes:"boolean"==typeof e.allowPrototypes?e.allowPrototypes:a.allowPrototypes,allowSparse:"boolean"==typeof e.allowSparse?e.allowSparse:a.allowSparse,arrayLimit:"number"==typeof e.arrayLimit?e.arrayLimit:a.arrayLimit,charset:t,charsetSentinel:"boolean"==typeof e.charsetSentinel?e.charsetSentinel:a.charsetSentinel,comma:"boolean"==typeof e.comma?e.comma:a.comma,decoder:"function"==typeof e.decoder?e.decoder:a.decoder,delimiter:"string"==typeof e.delimiter||r.isRegExp(e.delimiter)?e.delimiter:a.delimiter,depth:"number"==typeof e.depth||!1===e.depth?+e.depth:a.depth,ignoreQueryPrefix:!0===e.ignoreQueryPrefix,interpretNumericEntities:"boolean"==typeof e.interpretNumericEntities?e.interpretNumericEntities:a.interpretNumericEntities,parameterLimit:"number"==typeof e.parameterLimit?e.parameterLimit:a.parameterLimit,parseArrays:!1!==e.parseArrays,plainObjects:"boolean"==typeof e.plainObjects?e.plainObjects:a.plainObjects,strictNullHandling:"boolean"==typeof e.strictNullHandling?e.strictNullHandling:a.strictNullHandling}}(t);if(""===e||null==e)return n.plainObjects?Object.create(null):{};for(var l="string"==typeof e?function(e,t){var n,s={},l=t.ignoreQueryPrefix?e.replace(/^\?/,""):e,f=t.parameterLimit===1/0?void 0:t.parameterLimit,p=l.split(t.delimiter,f),d=-1,h=t.charset;if(t.charsetSentinel)for(n=0;n<p.length;++n)0===p[n].indexOf("utf8=")&&("utf8=%E2%9C%93"===p[n]?h="utf-8":"utf8=%26%2310003%3B"===p[n]&&(h="iso-8859-1"),d=n,n=p.length);for(n=0;n<p.length;++n)if(n!==d){var y,m,v=p[n],g=v.indexOf("]="),b=-1===g?v.indexOf("="):g+1;-1===b?(y=t.decoder(v,a.decoder,h,"key"),m=t.strictNullHandling?null:""):(y=t.decoder(v.slice(0,b),a.decoder,h,"key"),m=r.maybeMap(c(v.slice(b+1),t),(function(e){return t.decoder(e,a.decoder,h,"value")}))),m&&t.interpretNumericEntities&&"iso-8859-1"===h&&(m=u(m)),v.indexOf("[]=")>-1&&(m=i(m)?[m]:m),o.call(s,y)?s[y]=r.combine(s[y],m):s[y]=m}return s}(e,n):e,f=n.plainObjects?Object.create(null):{},p=Object.keys(l),d=0;d<p.length;++d){var h=p[d],y=s(h,l[h],n,"string"==typeof e);f=r.merge(f,y,n)}return!0===n.allowSparse?f:r.compact(f)}},4974:(e,t,n)=>{"use strict";var r=n(31059),o=n(69857),i=n(744),a=Object.prototype.hasOwnProperty,u={brackets:function(e){return e+"[]"},comma:"comma",indices:function(e,t){return e+"["+t+"]"},repeat:function(e){return e}},c=Array.isArray,s=String.prototype.split,l=Array.prototype.push,f=function(e,t){l.apply(e,c(t)?t:[t])},p=Date.prototype.toISOString,d=i.default,h={addQueryPrefix:!1,allowDots:!1,charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encoder:o.encode,encodeValuesOnly:!1,format:d,formatter:i.formatters[d],indices:!1,serializeDate:function(e){return p.call(e)},skipNulls:!1,strictNullHandling:!1},y={},m=function e(t,n,i,a,u,l,p,d,m,v,g,b,w,O,E){for(var _,x=t,S=E,j=0,P=!1;void 0!==(S=S.get(y))&&!P;){var k=S.get(t);if(j+=1,void 0!==k){if(k===j)throw new RangeError("Cyclic object value");P=!0}void 0===S.get(y)&&(j=0)}if("function"==typeof p?x=p(n,x):x instanceof Date?x=v(x):"comma"===i&&c(x)&&(x=o.maybeMap(x,(function(e){return e instanceof Date?v(e):e}))),null===x){if(a)return l&&!w?l(n,h.encoder,O,"key",g):n;x=""}if("string"==typeof(_=x)||"number"==typeof _||"boolean"==typeof _||"symbol"==typeof _||"bigint"==typeof _||o.isBuffer(x)){if(l){var I=w?n:l(n,h.encoder,O,"key",g);if("comma"===i&&w){for(var T=s.call(String(x),","),R="",C=0;C<T.length;++C)R+=(0===C?"":",")+b(l(T[C],h.encoder,O,"value",g));return[b(I)+"="+R]}return[b(I)+"="+b(l(x,h.encoder,O,"value",g))]}return[b(n)+"="+b(String(x))]}var A,N=[];if(void 0===x)return N;if("comma"===i&&c(x))A=[{value:x.length>0?x.join(",")||null:void 0}];else if(c(p))A=p;else{var L=Object.keys(x);A=d?L.sort(d):L}for(var D=0;D<A.length;++D){var M=A[D],F="object"==typeof M&&void 0!==M.value?M.value:x[M];if(!u||null!==F){var U=c(x)?"function"==typeof i?i(n,M):n:n+(m?"."+M:"["+M+"]");E.set(t,j);var B=r();B.set(y,E),f(N,e(F,U,i,a,u,l,p,d,m,v,g,b,w,O,B))}}return N};e.exports=function(e,t){var n,o=e,s=function(e){if(!e)return h;if(null!==e.encoder&&void 0!==e.encoder&&"function"!=typeof e.encoder)throw new TypeError("Encoder has to be a function.");var t=e.charset||h.charset;if(void 0!==e.charset&&"utf-8"!==e.charset&&"iso-8859-1"!==e.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var n=i.default;if(void 0!==e.format){if(!a.call(i.formatters,e.format))throw new TypeError("Unknown format option provided.");n=e.format}var r=i.formatters[n],o=h.filter;return("function"==typeof e.filter||c(e.filter))&&(o=e.filter),{addQueryPrefix:"boolean"==typeof e.addQueryPrefix?e.addQueryPrefix:h.addQueryPrefix,allowDots:void 0===e.allowDots?h.allowDots:!!e.allowDots,charset:t,charsetSentinel:"boolean"==typeof e.charsetSentinel?e.charsetSentinel:h.charsetSentinel,delimiter:void 0===e.delimiter?h.delimiter:e.delimiter,encode:"boolean"==typeof e.encode?e.encode:h.encode,encoder:"function"==typeof e.encoder?e.encoder:h.encoder,encodeValuesOnly:"boolean"==typeof e.encodeValuesOnly?e.encodeValuesOnly:h.encodeValuesOnly,filter:o,format:n,formatter:r,serializeDate:"function"==typeof e.serializeDate?e.serializeDate:h.serializeDate,skipNulls:"boolean"==typeof e.skipNulls?e.skipNulls:h.skipNulls,sort:"function"==typeof e.sort?e.sort:null,strictNullHandling:"boolean"==typeof e.strictNullHandling?e.strictNullHandling:h.strictNullHandling}}(t);"function"==typeof s.filter?o=(0,s.filter)("",o):c(s.filter)&&(n=s.filter);var l,p=[];if("object"!=typeof o||null===o)return"";l=t&&t.arrayFormat in u?t.arrayFormat:t&&"indices"in t?t.indices?"indices":"repeat":"indices";var d=u[l];n||(n=Object.keys(o)),s.sort&&n.sort(s.sort);for(var y=r(),v=0;v<n.length;++v){var g=n[v];s.skipNulls&&null===o[g]||f(p,m(o[g],g,d,s.strictNullHandling,s.skipNulls,s.encode?s.encoder:null,s.filter,s.sort,s.allowDots,s.serializeDate,s.format,s.formatter,s.encodeValuesOnly,s.charset,y))}var b=p.join(s.delimiter),w=!0===s.addQueryPrefix?"?":"";return s.charsetSentinel&&("iso-8859-1"===s.charset?w+="utf8=%26%2310003%3B&":w+="utf8=%E2%9C%93&"),b.length>0?w+b:""}},69857:(e,t,n)=>{"use strict";var r=n(744),o=Object.prototype.hasOwnProperty,i=Array.isArray,a=function(){for(var e=[],t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e}(),u=function(e,t){for(var n=t&&t.plainObjects?Object.create(null):{},r=0;r<e.length;++r)void 0!==e[r]&&(n[r]=e[r]);return n};e.exports={arrayToObject:u,assign:function(e,t){return Object.keys(t).reduce((function(e,n){return e[n]=t[n],e}),e)},combine:function(e,t){return[].concat(e,t)},compact:function(e){for(var t=[{obj:{o:e},prop:"o"}],n=[],r=0;r<t.length;++r)for(var o=t[r],a=o.obj[o.prop],u=Object.keys(a),c=0;c<u.length;++c){var s=u[c],l=a[s];"object"==typeof l&&null!==l&&-1===n.indexOf(l)&&(t.push({obj:a,prop:s}),n.push(l))}return function(e){for(;e.length>1;){var t=e.pop(),n=t.obj[t.prop];if(i(n)){for(var r=[],o=0;o<n.length;++o)void 0!==n[o]&&r.push(n[o]);t.obj[t.prop]=r}}}(t),e},decode:function(e,t,n){var r=e.replace(/\+/g," ");if("iso-8859-1"===n)return r.replace(/%[0-9a-f]{2}/gi,unescape);try{return decodeURIComponent(r)}catch(e){return r}},encode:function(e,t,n,o,i){if(0===e.length)return e;var u=e;if("symbol"==typeof e?u=Symbol.prototype.toString.call(e):"string"!=typeof e&&(u=String(e)),"iso-8859-1"===n)return escape(u).replace(/%u[0-9a-f]{4}/gi,(function(e){return"%26%23"+parseInt(e.slice(2),16)+"%3B"}));for(var c="",s=0;s<u.length;++s){var l=u.charCodeAt(s);45===l||46===l||95===l||126===l||l>=48&&l<=57||l>=65&&l<=90||l>=97&&l<=122||i===r.RFC1738&&(40===l||41===l)?c+=u.charAt(s):l<128?c+=a[l]:l<2048?c+=a[192|l>>6]+a[128|63&l]:l<55296||l>=57344?c+=a[224|l>>12]+a[128|l>>6&63]+a[128|63&l]:(s+=1,l=65536+((1023&l)<<10|1023&u.charCodeAt(s)),c+=a[240|l>>18]+a[128|l>>12&63]+a[128|l>>6&63]+a[128|63&l])}return c},isBuffer:function(e){return!(!e||"object"!=typeof e)&&!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))},isRegExp:function(e){return"[object RegExp]"===Object.prototype.toString.call(e)},maybeMap:function(e,t){if(i(e)){for(var n=[],r=0;r<e.length;r+=1)n.push(t(e[r]));return n}return t(e)},merge:function e(t,n,r){if(!n)return t;if("object"!=typeof n){if(i(t))t.push(n);else{if(!t||"object"!=typeof t)return[t,n];(r&&(r.plainObjects||r.allowPrototypes)||!o.call(Object.prototype,n))&&(t[n]=!0)}return t}if(!t||"object"!=typeof t)return[t].concat(n);var a=t;return i(t)&&!i(n)&&(a=u(t,r)),i(t)&&i(n)?(n.forEach((function(n,i){if(o.call(t,i)){var a=t[i];a&&"object"==typeof a&&n&&"object"==typeof n?t[i]=e(a,n,r):t.push(n)}else t[i]=n})),t):Object.keys(n).reduce((function(t,i){var a=n[i];return o.call(t,i)?t[i]=e(t[i],a,r):t[i]=a,t}),a)}}},1726:e=>{"use strict";function t(e,t){return Object.prototype.hasOwnProperty.call(e,t)}e.exports=function(e,n,r,o){n=n||"&",r=r||"=";var i={};if("string"!=typeof e||0===e.length)return i;var a=/\+/g;e=e.split(n);var u=1e3;o&&"number"==typeof o.maxKeys&&(u=o.maxKeys);var c=e.length;u>0&&c>u&&(c=u);for(var s=0;s<c;++s){var l,f,p,d,h=e[s].replace(a,"%20"),y=h.indexOf(r);y>=0?(l=h.substr(0,y),f=h.substr(y+1)):(l=h,f=""),p=decodeURIComponent(l),d=decodeURIComponent(f),t(i,p)?Array.isArray(i[p])?i[p].push(d):i[p]=[i[p],d]:i[p]=d}return i}},73294:e=>{"use strict";var t=function(e){switch(typeof e){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}};e.exports=function(e,n,r,o){return n=n||"&",r=r||"=",null===e&&(e=void 0),"object"==typeof e?Object.keys(e).map((function(o){var i=encodeURIComponent(t(o))+r;return Array.isArray(e[o])?e[o].map((function(e){return i+encodeURIComponent(t(e))})).join(n):i+encodeURIComponent(t(e[o]))})).join(n):o?encodeURIComponent(t(o))+r+encodeURIComponent(t(e)):""}},49122:(e,t,n)=>{"use strict";t.decode=t.parse=n(1726),t.encode=t.stringify=n(73294)},5837:e=>{"use strict";function t(e){try{return JSON.stringify(e)}catch(e){return'"[Circular]"'}}e.exports=function(e,n,r){var o=r&&r.stringify||t;if("object"==typeof e&&null!==e){var i=n.length+1;if(1===i)return e;var a=new Array(i);a[0]=o(e);for(var u=1;u<i;u++)a[u]=o(n[u]);return a.join(" ")}if("string"!=typeof e)return e;var c=n.length;if(0===c)return e;for(var s="",l=0,f=-1,p=e&&e.length||0,d=0;d<p;){if(37===e.charCodeAt(d)&&d+1<p){switch(f=f>-1?f:0,e.charCodeAt(d+1)){case 100:case 102:if(l>=c)break;if(f<d&&(s+=e.slice(f,d)),null==n[l])break;s+=Number(n[l]),f=d+=2;break;case 105:if(l>=c)break;if(f<d&&(s+=e.slice(f,d)),null==n[l])break;s+=Math.floor(Number(n[l])),f=d+=2;break;case 79:case 111:case 106:if(l>=c)break;if(f<d&&(s+=e.slice(f,d)),void 0===n[l])break;var h=typeof n[l];if("string"===h){s+="'"+n[l]+"'",f=d+2,d++;break}if("function"===h){s+=n[l].name||"<anonymous>",f=d+2,d++;break}s+=o(n[l]),f=d+2,d++;break;case 115:if(l>=c)break;f<d&&(s+=e.slice(f,d)),s+=String(n[l]),f=d+2,d++;break;case 37:f<d&&(s+=e.slice(f,d)),s+="%",f=d+2,d++,l--}++l}++d}if(-1===f)return e;f<p&&(s+=e.slice(f));return s}},57990:(e,t,n)=>{"use strict";var r=65536,o=4294967295;var i=n(62673).Buffer,a=n.g.crypto||n.g.msCrypto;a&&a.getRandomValues?e.exports=function(e,t){if(e>o)throw new RangeError("requested too many random bytes");var n=i.allocUnsafe(e);if(e>0)if(e>r)for(var u=0;u<e;u+=r)a.getRandomValues(n.slice(u,u+r));else a.getRandomValues(n);if("function"==typeof t)return process.nextTick((function(){t(null,n)}));return n}:e.exports=function(){throw new Error("Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11")}},68365:(e,t)=>{var n;!function(){"use strict";var r={}.hasOwnProperty;function o(){for(var e=[],t=0;t<arguments.length;t++){var n=arguments[t];if(n){var i=typeof n;if("string"===i||"number"===i)e.push(n);else if(Array.isArray(n)&&n.length){var a=o.apply(null,n);a&&e.push(a)}else if("object"===i)for(var u in n)r.call(n,u)&&n[u]&&e.push(u)}}return e.join(" ")}e.exports?(o.default=o,e.exports=o):void 0===(n=function(){return o}.apply(t,[]))||(e.exports=n)}()},56355:(e,t)=>{var n;!function(){"use strict";var r={}.hasOwnProperty;function o(){for(var e=[],t=0;t<arguments.length;t++){var n=arguments[t];if(n){var i=typeof n;if("string"===i||"number"===i)e.push(n);else if(Array.isArray(n)&&n.length){var a=o.apply(null,n);a&&e.push(a)}else if("object"===i)for(var u in n)r.call(n,u)&&n[u]&&e.push(u)}}return e.join(" ")}e.exports?(o.default=o,e.exports=o):void 0===(n=function(){return o}.apply(t,[]))||(e.exports=n)}()},71412:(e,t,n)=>{"use strict";t.default=void 0;var r=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!==l(e)&&"function"!=typeof e)return{default:e};var t=s();if(t&&t.has(e))return t.get(e);var n={},r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)){var i=r?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}n.default=e,t&&t.set(e,n);return n}(n(84258)),o=c(n(35577)),i=c(n(9985)),a=c(n(82107)),u=n(45778);function c(e){return e&&e.__esModule?e:{default:e}}function s(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return s=function(){return e},e}function l(e){return(l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function f(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function p(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?f(Object(n),!0).forEach((function(t){b(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):f(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function d(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function h(e,t){return!t||"object"!==l(t)&&"function"!=typeof t?y(e):t}function y(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function m(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function v(e){return(v=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function g(e,t){return(g=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function b(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var w=function(){return!0},O="suggestions-revealed",E="input-focused",_="input-changed",x="escape-pressed",S=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&g(e,t)}(l,e);var t,n,o,c,s=(t=l,function(){var e,n=v(t);if(m()){var r=v(this).constructor;e=Reflect.construct(n,arguments,r)}else e=n.apply(this,arguments);return h(this,e)});function l(e){var t,n=e.alwaysRenderSuggestions;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,l),b(y(t=s.call(this)),"onDocumentMouseDown",(function(e){t.justClickedOnSuggestionsContainer=!1;for(var n=e.detail&&e.detail.target||e.target;null!==n&&n!==document;){if(n.getAttribute&&null!==n.getAttribute("data-suggestion-index"))return;if(n===t.suggestionsContainer)return void(t.justClickedOnSuggestionsContainer=!0);n=n.parentNode}})),b(y(t),"storeAutowhateverRef",(function(e){null!==e&&(t.autowhatever=e)})),b(y(t),"onSuggestionMouseEnter",(function(e,n){var r=n.sectionIndex,o=n.itemIndex;t.updateHighlightedSuggestion(r,o),e.target===t.pressedSuggestion&&(t.justSelectedSuggestion=!0),t.justMouseEntered=!0,setTimeout((function(){t.justMouseEntered=!1}))})),b(y(t),"highlightFirstSuggestion",(function(){t.updateHighlightedSuggestion(t.props.multiSection?0:null,0)})),b(y(t),"onDocumentMouseUp",(function(){t.pressedSuggestion&&!t.justSelectedSuggestion&&t.input.focus(),t.pressedSuggestion=null})),b(y(t),"onSuggestionMouseDown",(function(e){t.justSelectedSuggestion||(t.justSelectedSuggestion=!0,t.pressedSuggestion=e.target)})),b(y(t),"onSuggestionsClearRequested",(function(){var e=t.props.onSuggestionsClearRequested;e&&e()})),b(y(t),"onSuggestionSelected",(function(e,n){var r=t.props,o=r.alwaysRenderSuggestions,i=r.onSuggestionSelected,a=r.onSuggestionsFetchRequested;i&&i(e,n);var u=t.props.shouldKeepSuggestionsOnSelect(n.suggestion);o||u?a({value:n.suggestionValue,reason:"suggestion-selected"}):t.onSuggestionsClearRequested(),t.resetHighlightedSuggestion()})),b(y(t),"onSuggestionClick",(function(e){var n=t.props,r=n.alwaysRenderSuggestions,o=n.focusInputOnSuggestionClick,i=t.getSuggestionIndices(t.findSuggestionElement(e.target)),a=i.sectionIndex,u=i.suggestionIndex,c=t.getSuggestion(a,u),s=t.props.getSuggestionValue(c);t.maybeCallOnChange(e,s,"click"),t.onSuggestionSelected(e,{suggestion:c,suggestionValue:s,suggestionIndex:u,sectionIndex:a,method:"click"});var l=t.props.shouldKeepSuggestionsOnSelect(c);r||l||t.closeSuggestions(),!0===o?t.input.focus():t.onBlur(),setTimeout((function(){t.justSelectedSuggestion=!1}))})),b(y(t),"onBlur",(function(){var e=t.props,n=e.inputProps,r=e.shouldRenderSuggestions,o=n.value,i=n.onBlur,a=t.getHighlightedSuggestion(),u=r(o,"input-blurred");t.setState({isFocused:!1,highlightedSectionIndex:null,highlightedSuggestionIndex:null,highlightedSuggestion:null,valueBeforeUpDown:null,isCollapsed:!u}),i&&i(t.blurEvent,{highlightedSuggestion:a})})),b(y(t),"onSuggestionMouseLeave",(function(e){t.resetHighlightedSuggestion(!1),t.justSelectedSuggestion&&e.target===t.pressedSuggestion&&(t.justSelectedSuggestion=!1)})),b(y(t),"onSuggestionTouchStart",(function(){t.justSelectedSuggestion=!0})),b(y(t),"onSuggestionTouchMove",(function(){t.justSelectedSuggestion=!1,t.pressedSuggestion=null,t.input.focus()})),b(y(t),"itemProps",(function(e){return{"data-section-index":e.sectionIndex,"data-suggestion-index":e.itemIndex,onMouseEnter:t.onSuggestionMouseEnter,onMouseLeave:t.onSuggestionMouseLeave,onMouseDown:t.onSuggestionMouseDown,onTouchStart:t.onSuggestionTouchStart,onTouchMove:t.onSuggestionTouchMove,onClick:t.onSuggestionClick}})),b(y(t),"renderSuggestionsContainer",(function(e){var n=e.containerProps,r=e.children;return(0,t.props.renderSuggestionsContainer)({containerProps:n,children:r,query:t.getQuery()})})),t.state={isFocused:!1,isCollapsed:!n,highlightedSectionIndex:null,highlightedSuggestionIndex:null,highlightedSuggestion:null,valueBeforeUpDown:null},t.justPressedUpDown=!1,t.justMouseEntered=!1,t.pressedSuggestion=null,t}return n=l,(o=[{key:"componentDidMount",value:function(){document.addEventListener("mousedown",this.onDocumentMouseDown),document.addEventListener("mouseup",this.onDocumentMouseUp),this.input=this.autowhatever.input,this.suggestionsContainer=this.autowhatever.itemsContainer}},{key:"UNSAFE_componentWillReceiveProps",value:function(e){var t=0===this.state.highlightedSuggestionIndex&&this.props.highlightFirstSuggestion&&!e.highlightFirstSuggestion;(0,i.default)(e.suggestions,this.props.suggestions)?e.highlightFirstSuggestion&&e.suggestions.length>0&&!1===this.justPressedUpDown&&!1===this.justMouseEntered?this.highlightFirstSuggestion():t&&this.resetHighlightedSuggestion():this.willRenderSuggestions(e,"suggestions-updated")?(this.state.isCollapsed&&!this.justSelectedSuggestion&&this.revealSuggestions(),t&&this.resetHighlightedSuggestion()):this.resetHighlightedSuggestion()}},{key:"componentDidUpdate",value:function(e,t){var n=this.props,r=n.suggestions,o=n.onSuggestionHighlighted,a=n.highlightFirstSuggestion;if(!(0,i.default)(r,e.suggestions)&&r.length>0&&a)this.highlightFirstSuggestion();else if(o){var u=this.getHighlightedSuggestion();u!=t.highlightedSuggestion&&o({suggestion:u})}}},{key:"componentWillUnmount",value:function(){document.removeEventListener("mousedown",this.onDocumentMouseDown),document.removeEventListener("mouseup",this.onDocumentMouseUp)}},{key:"updateHighlightedSuggestion",value:function(e,t,n){var r=this;this.setState((function(o){var i=o.valueBeforeUpDown;return null===t?i=null:null===i&&void 0!==n&&(i=n),{highlightedSectionIndex:e,highlightedSuggestionIndex:t,highlightedSuggestion:null===t?null:r.getSuggestion(e,t),valueBeforeUpDown:i}}))}},{key:"resetHighlightedSuggestion",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.setState((function(t){var n=t.valueBeforeUpDown;return{highlightedSectionIndex:null,highlightedSuggestionIndex:null,highlightedSuggestion:null,valueBeforeUpDown:e?null:n}}))}},{key:"revealSuggestions",value:function(){this.setState({isCollapsed:!1})}},{key:"closeSuggestions",value:function(){this.setState({highlightedSectionIndex:null,highlightedSuggestionIndex:null,highlightedSuggestion:null,valueBeforeUpDown:null,isCollapsed:!0})}},{key:"getSuggestion",value:function(e,t){var n=this.props,r=n.suggestions,o=n.multiSection,i=n.getSectionSuggestions;return o?i(r[e])[t]:r[t]}},{key:"getHighlightedSuggestion",value:function(){var e=this.state,t=e.highlightedSectionIndex,n=e.highlightedSuggestionIndex;return null===n?null:this.getSuggestion(t,n)}},{key:"getSuggestionValueByIndex",value:function(e,t){return(0,this.props.getSuggestionValue)(this.getSuggestion(e,t))}},{key:"getSuggestionIndices",value:function(e){var t=e.getAttribute("data-section-index"),n=e.getAttribute("data-suggestion-index");return{sectionIndex:"string"==typeof t?parseInt(t,10):null,suggestionIndex:parseInt(n,10)}}},{key:"findSuggestionElement",value:function(e){var t=e;do{if(t.getAttribute&&null!==t.getAttribute("data-suggestion-index"))return t;t=t.parentNode}while(null!==t);throw new Error("Couldn't find suggestion element")}},{key:"maybeCallOnChange",value:function(e,t,n){var r=this.props.inputProps,o=r.value,i=r.onChange;t!==o&&i(e,{newValue:t,method:n})}},{key:"willRenderSuggestions",value:function(e,t){var n=e.suggestions,r=e.inputProps,o=e.shouldRenderSuggestions,i=r.value;return n.length>0&&o(i,t)}},{key:"getQuery",value:function(){var e=this.props.inputProps.value,t=this.state.valueBeforeUpDown;return(null===t?e:t).trim()}},{key:"render",value:function(){var e=this,t=this.props,n=t.suggestions,o=t.renderInputComponent,i=t.onSuggestionsFetchRequested,c=t.renderSuggestion,s=t.inputProps,l=t.multiSection,f=t.renderSectionTitle,d=t.id,h=t.getSectionSuggestions,y=t.theme,m=t.getSuggestionValue,v=t.alwaysRenderSuggestions,g=t.highlightFirstSuggestion,b=t.containerProps,S=this.state,j=S.isFocused,P=S.isCollapsed,k=S.highlightedSectionIndex,I=S.highlightedSuggestionIndex,T=S.valueBeforeUpDown,R=v?w:this.props.shouldRenderSuggestions,C=s.value,A=s.onFocus,N=s.onKeyDown,L=this.willRenderSuggestions(this.props,"render"),D=v||j&&!P&&L,M=D?n:[],F=p({},s,{onFocus:function(t){if(!e.justSelectedSuggestion&&!e.justClickedOnSuggestionsContainer){var n=R(C,E);e.setState({isFocused:!0,isCollapsed:!n}),A&&A(t),n&&i({value:C,reason:E})}},onBlur:function(t){e.justClickedOnSuggestionsContainer?e.input.focus():(e.blurEvent=t,e.justSelectedSuggestion||(e.onBlur(),e.onSuggestionsClearRequested()))},onChange:function(t){var n=t.target.value,r=R(n,_);e.maybeCallOnChange(t,n,"type"),e.suggestionsContainer&&(e.suggestionsContainer.scrollTop=0),e.setState(p({},g?{}:{highlightedSectionIndex:null,highlightedSuggestionIndex:null,highlightedSuggestion:null},{valueBeforeUpDown:null,isCollapsed:!r})),r?i({value:n,reason:_}):e.onSuggestionsClearRequested()},onKeyDown:function(t,r){var o=t.keyCode;switch(o){case 40:case 38:if(P)R(C,O)&&(i({value:C,reason:O}),e.revealSuggestions(),t.preventDefault());else if(n.length>0){var a,u=r.newHighlightedSectionIndex,c=r.newHighlightedItemIndex;a=null===c?null===T?C:T:e.getSuggestionValueByIndex(u,c),e.updateHighlightedSuggestion(u,c,C),e.maybeCallOnChange(t,a,40===o?"down":"up"),t.preventDefault()}e.justPressedUpDown=!0,setTimeout((function(){e.justPressedUpDown=!1}));break;case 13:if(229===t.keyCode)break;var s=e.getHighlightedSuggestion();if(D&&!v&&e.closeSuggestions(),null!=s){t.preventDefault();var l=m(s);e.maybeCallOnChange(t,l,"enter"),e.onSuggestionSelected(t,{suggestion:s,suggestionValue:l,suggestionIndex:I,sectionIndex:k,method:"enter"}),e.justSelectedSuggestion=!0,setTimeout((function(){e.justSelectedSuggestion=!1}))}break;case 27:D&&t.preventDefault();var f=D&&!v;null===T?f||(e.maybeCallOnChange(t,"","escape"),R("",x)?i({value:"",reason:x}):e.onSuggestionsClearRequested()):e.maybeCallOnChange(t,T,"escape"),f?(e.onSuggestionsClearRequested(),e.closeSuggestions()):e.resetHighlightedSuggestion()}N&&N(t)}}),U={query:this.getQuery()};return r.default.createElement(a.default,{multiSection:l,items:M,renderInputComponent:o,renderItemsContainer:this.renderSuggestionsContainer,renderItem:c,renderItemData:U,renderSectionTitle:f,getSectionItems:h,highlightedSectionIndex:k,highlightedItemIndex:I,containerProps:b,inputProps:F,itemProps:this.itemProps,theme:(0,u.mapToAutowhateverTheme)(y),id:d,ref:this.storeAutowhateverRef})}}])&&d(n.prototype,o),c&&d(n,c),l}(r.Component);t.default=S,b(S,"propTypes",{suggestions:o.default.array.isRequired,onSuggestionsFetchRequested:function(e,t){var n=e[t];if("function"!=typeof n)throw new Error("'onSuggestionsFetchRequested' must be implemented. See: https://github.com/moroshko/react-autosuggest#onSuggestionsFetchRequestedProp")},onSuggestionsClearRequested:function(e,t){var n=e[t];if(!1===e.alwaysRenderSuggestions&&"function"!=typeof n)throw new Error("'onSuggestionsClearRequested' must be implemented. See: https://github.com/moroshko/react-autosuggest#onSuggestionsClearRequestedProp")},shouldKeepSuggestionsOnSelect:o.default.func,onSuggestionSelected:o.default.func,onSuggestionHighlighted:o.default.func,renderInputComponent:o.default.func,renderSuggestionsContainer:o.default.func,getSuggestionValue:o.default.func.isRequired,renderSuggestion:o.default.func.isRequired,inputProps:function(e,t){var n=e[t];if(!n)throw new Error("'inputProps' must be passed.");if(!Object.prototype.hasOwnProperty.call(n,"value"))throw new Error("'inputProps' must have 'value'.");if(!Object.prototype.hasOwnProperty.call(n,"onChange"))throw new Error("'inputProps' must have 'onChange'.")},shouldRenderSuggestions:o.default.func,alwaysRenderSuggestions:o.default.bool,multiSection:o.default.bool,renderSectionTitle:function(e,t){var n=e[t];if(!0===e.multiSection&&"function"!=typeof n)throw new Error("'renderSectionTitle' must be implemented. See: https://github.com/moroshko/react-autosuggest#renderSectionTitleProp")},getSectionSuggestions:function(e,t){var n=e[t];if(!0===e.multiSection&&"function"!=typeof n)throw new Error("'getSectionSuggestions' must be implemented. See: https://github.com/moroshko/react-autosuggest#getSectionSuggestionsProp")},focusInputOnSuggestionClick:o.default.bool,highlightFirstSuggestion:o.default.bool,theme:o.default.object,id:o.default.string,containerProps:o.default.object}),b(S,"defaultProps",{renderSuggestionsContainer:function(e){var t=e.containerProps,n=e.children;return r.default.createElement("div",t,n)},shouldRenderSuggestions:function(e){return e.trim().length>0},alwaysRenderSuggestions:!1,multiSection:!1,shouldKeepSuggestionsOnSelect:function(){return!1},focusInputOnSuggestionClick:!0,highlightFirstSuggestion:!1,theme:u.defaultTheme,id:"1",containerProps:{}})},82107:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!==y(e)&&"function"!=typeof e)return{default:e};var t=l();if(t&&t.has(e))return t.get(e);var n={},r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)){var i=r?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}n.default=e,t&&t.set(e,n);return n}(n(84258)),o=s(n(35577)),i=s(n(44238)),a=s(n(47311)),u=s(n(69911)),c=s(n(83860));function s(e){return e&&e.__esModule?e:{default:e}}function l(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return l=function(){return e},e}function f(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function p(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?f(Object(n),!0).forEach((function(t){E(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):f(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function d(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if("undefined"==typeof Symbol||!(Symbol.iterator in Object(e)))return;var n=[],r=!0,o=!1,i=void 0;try{for(var a,u=e[Symbol.iterator]();!(r=(a=u.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{r||null==u.return||u.return()}finally{if(o)throw i}}return n}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return h(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return h(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function h(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function y(e){return(y="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function m(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function v(e,t){return!t||"object"!==y(t)&&"function"!=typeof t?g(e):t}function g(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function b(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function w(e){return(w=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function O(e,t){return(O=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function E(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var _={},x=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&O(e,t)}(f,e);var t,n,o,s,l=(t=f,function(){var e,n=w(t);if(b()){var r=w(this).constructor;e=Reflect.construct(n,arguments,r)}else e=n.apply(this,arguments);return v(this,e)});function f(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,f),E(g(t=l.call(this,e)),"storeInputReference",(function(e){null!==e&&(t.input=e);var n=t.props.inputProps.ref;n&&("function"==typeof n?n(e):"object"===y(n)&&Object.prototype.hasOwnProperty.call(n,"current")&&(n.current=e))})),E(g(t),"storeItemsContainerReference",(function(e){null!==e&&(t.itemsContainer=e)})),E(g(t),"onHighlightedItemChange",(function(e){t.highlightedItem=e})),E(g(t),"getItemId",(function(e,n){if(null===n)return null;var r=t.props.id,o=null===e?"":"section-".concat(e);return"react-autowhatever-".concat(r,"-").concat(o,"-item-").concat(n)})),E(g(t),"onFocus",(function(e){var n=t.props.inputProps;t.setState({isInputFocused:!0}),n.onFocus&&n.onFocus(e)})),E(g(t),"onBlur",(function(e){var n=t.props.inputProps;t.setState({isInputFocused:!1}),n.onBlur&&n.onBlur(e)})),E(g(t),"onKeyDown",(function(e){var n=t.props,r=n.inputProps,o=n.highlightedSectionIndex,i=n.highlightedItemIndex,a=e.keyCode;switch(a){case 40:case 38:var u=40===a?"next":"prev",c=d(t.sectionIterator[u]([o,i]),2),s=c[0],l=c[1];r.onKeyDown(e,{newHighlightedSectionIndex:s,newHighlightedItemIndex:l});break;default:r.onKeyDown(e,{highlightedSectionIndex:o,highlightedItemIndex:i})}})),t.highlightedItem=null,t.state={isInputFocused:!1},t.setSectionsItems(e),t.setSectionIterator(e),t.setTheme(e),t}return n=f,(o=[{key:"componentDidMount",value:function(){this.ensureHighlightedItemIsVisible()}},{key:"UNSAFE_componentWillReceiveProps",value:function(e){e.items!==this.props.items&&this.setSectionsItems(e),e.items===this.props.items&&e.multiSection===this.props.multiSection||this.setSectionIterator(e),e.theme!==this.props.theme&&this.setTheme(e)}},{key:"componentDidUpdate",value:function(){this.ensureHighlightedItemIsVisible()}},{key:"setSectionsItems",value:function(e){e.multiSection&&(this.sectionsItems=e.items.map((function(t){return e.getSectionItems(t)})),this.sectionsLengths=this.sectionsItems.map((function(e){return e.length})),this.allSectionsAreEmpty=this.sectionsLengths.every((function(e){return 0===e})))}},{key:"setSectionIterator",value:function(e){this.sectionIterator=(0,i.default)({multiSection:e.multiSection,data:e.multiSection?this.sectionsLengths:e.items.length})}},{key:"setTheme",value:function(e){this.theme=(0,a.default)(e.theme)}},{key:"renderSections",value:function(){var e=this;if(this.allSectionsAreEmpty)return null;var t=this.theme,n=this.props,o=n.id,i=n.items,a=n.renderItem,s=n.renderItemData,l=n.renderSectionTitle,f=n.highlightedSectionIndex,p=n.highlightedItemIndex,d=n.itemProps;return i.map((function(n,i){var h="react-autowhatever-".concat(o,"-"),y="".concat(h,"section-").concat(i,"-"),m=0===i;return r.default.createElement("div",t("".concat(y,"container"),"sectionContainer",m&&"sectionContainerFirst"),r.default.createElement(u.default,{section:n,renderSectionTitle:l,theme:t,sectionKeyPrefix:y}),r.default.createElement(c.default,{items:e.sectionsItems[i],itemProps:d,renderItem:a,renderItemData:s,sectionIndex:i,highlightedItemIndex:f===i?p:null,onHighlightedItemChange:e.onHighlightedItemChange,getItemId:e.getItemId,theme:t,keyPrefix:h,ref:e.storeItemsListReference}))}))}},{key:"renderItems",value:function(){var e=this.props.items;if(0===e.length)return null;var t=this.theme,n=this.props,o=n.id,i=n.renderItem,a=n.renderItemData,u=n.highlightedSectionIndex,s=n.highlightedItemIndex,l=n.itemProps;return r.default.createElement(c.default,{items:e,itemProps:l,renderItem:i,renderItemData:a,highlightedItemIndex:null===u?s:null,onHighlightedItemChange:this.onHighlightedItemChange,getItemId:this.getItemId,theme:t,keyPrefix:"react-autowhatever-".concat(o,"-")})}},{key:"ensureHighlightedItemIsVisible",value:function(){var e=this.highlightedItem;if(e){var t=this.itemsContainer,n=e.offsetParent===t?e.offsetTop:e.offsetTop-t.offsetTop,r=t.scrollTop;n<r?r=n:n+e.offsetHeight>r+t.offsetHeight&&(r=n+e.offsetHeight-t.offsetHeight),r!==t.scrollTop&&(t.scrollTop=r)}}},{key:"render",value:function(){var e=this.theme,t=this.props,n=t.id,o=t.multiSection,i=t.renderInputComponent,a=t.renderItemsContainer,u=t.highlightedSectionIndex,c=t.highlightedItemIndex,s=this.state.isInputFocused,l=o?this.renderSections():this.renderItems(),f=null!==l,d=this.getItemId(u,c),h="react-autowhatever-".concat(n),y=p({role:"combobox","aria-haspopup":"listbox","aria-owns":h,"aria-expanded":f},e("react-autowhatever-".concat(n,"-container"),"container",f&&"containerOpen"),{},this.props.containerProps),m=i(p({type:"text",value:"",autoComplete:"off","aria-autocomplete":"list","aria-controls":h,"aria-activedescendant":d},e("react-autowhatever-".concat(n,"-input"),"input",f&&"inputOpen",s&&"inputFocused"),{},this.props.inputProps,{onFocus:this.onFocus,onBlur:this.onBlur,onKeyDown:this.props.inputProps.onKeyDown&&this.onKeyDown,ref:this.storeInputReference})),v=a({containerProps:p({id:h,role:"listbox"},e("react-autowhatever-".concat(n,"-items-container"),"itemsContainer",f&&"itemsContainerOpen"),{ref:this.storeItemsContainerReference}),children:l});return r.default.createElement("div",y,m,v)}}])&&m(n.prototype,o),s&&m(n,s),f}(r.Component);t.default=x,E(x,"propTypes",{id:o.default.string,multiSection:o.default.bool,renderInputComponent:o.default.func,renderItemsContainer:o.default.func,items:o.default.array.isRequired,renderItem:o.default.func,renderItemData:o.default.object,renderSectionTitle:o.default.func,getSectionItems:o.default.func,containerProps:o.default.object,inputProps:o.default.object,itemProps:o.default.oneOfType([o.default.object,o.default.func]),highlightedSectionIndex:o.default.number,highlightedItemIndex:o.default.number,theme:o.default.oneOfType([o.default.object,o.default.array])}),E(x,"defaultProps",{id:"1",multiSection:!1,renderInputComponent:function(e){return r.default.createElement("input",e)},renderItemsContainer:function(e){var t=e.containerProps,n=e.children;return r.default.createElement("div",t,n)},renderItem:function(){throw new Error("`renderItem` must be provided")},renderItemData:_,renderSectionTitle:function(){throw new Error("`renderSectionTitle` must be provided")},getSectionItems:function(){throw new Error("`getSectionItems` must be provided")},containerProps:_,inputProps:_,itemProps:_,highlightedSectionIndex:null,highlightedItemIndex:null,theme:{container:"react-autowhatever__container",containerOpen:"react-autowhatever__container--open",input:"react-autowhatever__input",inputOpen:"react-autowhatever__input--open",inputFocused:"react-autowhatever__input--focused",itemsContainer:"react-autowhatever__items-container",itemsContainerOpen:"react-autowhatever__items-container--open",itemsList:"react-autowhatever__items-list",item:"react-autowhatever__item",itemFirst:"react-autowhatever__item--first",itemHighlighted:"react-autowhatever__item--highlighted",sectionContainer:"react-autowhatever__section-container",sectionContainerFirst:"react-autowhatever__section-container--first",sectionTitle:"react-autowhatever__section-title"}})},91934:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!==c(e)&&"function"!=typeof e)return{default:e};var t=u();if(t&&t.has(e))return t.get(e);var n={},r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)){var i=r?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}n.default=e,t&&t.set(e,n);return n}(n(84258)),o=a(n(35577)),i=a(n(64563));function a(e){return e&&e.__esModule?e:{default:e}}function u(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return u=function(){return e},e}function c(e){return(c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function s(){return(s=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function f(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function p(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function d(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function h(e,t){return!t||"object"!==c(t)&&"function"!=typeof t?y(e):t}function y(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function m(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function v(e){return(v=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function g(e,t){return(g=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function b(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var w=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&g(e,t)}(c,e);var t,n,o,a,u=(t=c,function(){var e,n=v(t);if(m()){var r=v(this).constructor;e=Reflect.construct(n,arguments,r)}else e=n.apply(this,arguments);return h(this,e)});function c(){var e;p(this,c);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return b(y(e=u.call.apply(u,[this].concat(n))),"storeItemReference",(function(t){null!==t&&(e.item=t)})),b(y(e),"onMouseEnter",(function(t){var n=e.props,r=n.sectionIndex,o=n.itemIndex;e.props.onMouseEnter(t,{sectionIndex:r,itemIndex:o})})),b(y(e),"onMouseLeave",(function(t){var n=e.props,r=n.sectionIndex,o=n.itemIndex;e.props.onMouseLeave(t,{sectionIndex:r,itemIndex:o})})),b(y(e),"onMouseDown",(function(t){var n=e.props,r=n.sectionIndex,o=n.itemIndex;e.props.onMouseDown(t,{sectionIndex:r,itemIndex:o})})),b(y(e),"onClick",(function(t){var n=e.props,r=n.sectionIndex,o=n.itemIndex;e.props.onClick(t,{sectionIndex:r,itemIndex:o})})),e}return n=c,(o=[{key:"shouldComponentUpdate",value:function(e){return(0,i.default)(e,this.props,["renderItemData"])}},{key:"render",value:function(){var e=this.props,t=e.isHighlighted,n=e.item,o=e.renderItem,i=e.renderItemData,a=f(e,["isHighlighted","item","renderItem","renderItemData"]);return delete a.sectionIndex,delete a.itemIndex,"function"==typeof a.onMouseEnter&&(a.onMouseEnter=this.onMouseEnter),"function"==typeof a.onMouseLeave&&(a.onMouseLeave=this.onMouseLeave),"function"==typeof a.onMouseDown&&(a.onMouseDown=this.onMouseDown),"function"==typeof a.onClick&&(a.onClick=this.onClick),r.default.createElement("li",s({role:"option"},a,{ref:this.storeItemReference}),o(n,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){b(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({isHighlighted:t},i)))}}])&&d(n.prototype,o),a&&d(n,a),c}(r.Component);t.default=w,b(w,"propTypes",{sectionIndex:o.default.number,isHighlighted:o.default.bool.isRequired,itemIndex:o.default.number.isRequired,item:o.default.any.isRequired,renderItem:o.default.func.isRequired,renderItemData:o.default.object.isRequired,onMouseEnter:o.default.func,onMouseLeave:o.default.func,onMouseDown:o.default.func,onClick:o.default.func})},83860:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!==s(e)&&"function"!=typeof e)return{default:e};var t=c();if(t&&t.has(e))return t.get(e);var n={},r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)){var i=r?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}n.default=e,t&&t.set(e,n);return n}(n(84258)),o=u(n(35577)),i=u(n(91934)),a=u(n(64563));function u(e){return e&&e.__esModule?e:{default:e}}function c(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return c=function(){return e},e}function s(e){return(s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function l(){return(l=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}function f(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function p(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function d(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function h(e,t){return!t||"object"!==s(t)&&"function"!=typeof t?y(e):t}function y(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function m(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function v(e){return(v=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function g(e,t){return(g=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function b(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var w=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&g(e,t)}(s,e);var t,n,o,u,c=(t=s,function(){var e,n=v(t);if(m()){var r=v(this).constructor;e=Reflect.construct(n,arguments,r)}else e=n.apply(this,arguments);return h(this,e)});function s(){var e;p(this,s);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return b(y(e=c.call.apply(c,[this].concat(n))),"storeHighlightedItemReference",(function(t){e.props.onHighlightedItemChange(null===t?null:t.item)})),e}return n=s,(o=[{key:"shouldComponentUpdate",value:function(e){return(0,a.default)(e,this.props,["itemProps"])}},{key:"render",value:function(){var e=this,t=this.props,n=t.items,o=t.itemProps,a=t.renderItem,u=t.renderItemData,c=t.sectionIndex,s=t.highlightedItemIndex,p=t.getItemId,d=t.theme,h=t.keyPrefix,y=null===c?h:"".concat(h,"section-").concat(c,"-"),m="function"==typeof o;return r.default.createElement("ul",l({role:"listbox"},d("".concat(y,"items-list"),"itemsList")),n.map((function(t,n){var h=0===n,v=n===s,g="".concat(y,"item-").concat(n),w=m?o({sectionIndex:c,itemIndex:n}):o,O=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?f(Object(n),!0).forEach((function(t){b(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):f(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({id:p(c,n),"aria-selected":v},d(g,"item",h&&"itemFirst",v&&"itemHighlighted"),{},w);return v&&(O.ref=e.storeHighlightedItemReference),r.default.createElement(i.default,l({},O,{sectionIndex:c,isHighlighted:v,itemIndex:n,item:t,renderItem:a,renderItemData:u}))})))}}])&&d(n.prototype,o),u&&d(n,u),s}(r.Component);t.default=w,b(w,"propTypes",{items:o.default.array.isRequired,itemProps:o.default.oneOfType([o.default.object,o.default.func]),renderItem:o.default.func.isRequired,renderItemData:o.default.object.isRequired,sectionIndex:o.default.number,highlightedItemIndex:o.default.number,onHighlightedItemChange:o.default.func.isRequired,getItemId:o.default.func.isRequired,theme:o.default.func.isRequired,keyPrefix:o.default.string.isRequired}),b(w,"defaultProps",{sectionIndex:null})},69911:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!==c(e)&&"function"!=typeof e)return{default:e};var t=u();if(t&&t.has(e))return t.get(e);var n={},r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)){var i=r?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}n.default=e,t&&t.set(e,n);return n}(n(84258)),o=a(n(35577)),i=a(n(64563));function a(e){return e&&e.__esModule?e:{default:e}}function u(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return u=function(){return e},e}function c(e){return(c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function l(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function f(e,t){return!t||"object"!==c(t)&&"function"!=typeof t?function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e):t}function p(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function d(e){return(d=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function h(e,t){return(h=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var y,m,v,g=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&h(e,t)}(c,e);var t,n,o,a,u=(t=c,function(){var e,n=d(t);if(p()){var r=d(this).constructor;e=Reflect.construct(n,arguments,r)}else e=n.apply(this,arguments);return f(this,e)});function c(){return s(this,c),u.apply(this,arguments)}return n=c,(o=[{key:"shouldComponentUpdate",value:function(e){return(0,i.default)(e,this.props)}},{key:"render",value:function(){var e=this.props,t=e.section,n=e.renderSectionTitle,o=e.theme,i=e.sectionKeyPrefix,a=n(t);return a?r.default.createElement("div",o("".concat(i,"title"),"sectionTitle"),a):null}}])&&l(n.prototype,o),a&&l(n,a),c}(r.Component);t.default=g,y=g,m="propTypes",v={section:o.default.any.isRequired,renderSectionTitle:o.default.func.isRequired,theme:o.default.func.isRequired,sectionKeyPrefix:o.default.string.isRequired},m in y?Object.defineProperty(y,m,{value:v,enumerable:!0,configurable:!0,writable:!0}):y[m]=v},64563:(e,t)=>{"use strict";function n(e){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];if(e===t)return!1;var o=Object.keys(e),i=Object.keys(t);if(o.length!==i.length)return!0;var a,u,c={};for(a=0,u=r.length;a<u;a++)c[r[a]]=!0;for(a=0,u=o.length;a<u;a++){var s=o[a],l=e[s],f=t[s];if(l!==f){if(!c[s]||null===l||null===f||"object"!==n(l)||"object"!==n(f))return!0;var p=Object.keys(l),d=Object.keys(f);if(p.length!==d.length)return!0;for(var h=0,y=p.length;h<y;h++){var m=p[h];if(l[m]!==f[m])return!0}}}return!1}},5241:(e,t,n)=>{"use strict";e.exports=n(71412).default},45778:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.mapToAutowhateverTheme=t.defaultTheme=void 0;t.defaultTheme={container:"react-autosuggest__container",containerOpen:"react-autosuggest__container--open",input:"react-autosuggest__input",inputOpen:"react-autosuggest__input--open",inputFocused:"react-autosuggest__input--focused",suggestionsContainer:"react-autosuggest__suggestions-container",suggestionsContainerOpen:"react-autosuggest__suggestions-container--open",suggestionsList:"react-autosuggest__suggestions-list",suggestion:"react-autosuggest__suggestion",suggestionFirst:"react-autosuggest__suggestion--first",suggestionHighlighted:"react-autosuggest__suggestion--highlighted",sectionContainer:"react-autosuggest__section-container",sectionContainerFirst:"react-autosuggest__section-container--first",sectionTitle:"react-autosuggest__section-title"};t.mapToAutowhateverTheme=function(e){var t={};for(var n in e)switch(n){case"suggestionsContainer":t.itemsContainer=e[n];break;case"suggestionsContainerOpen":t.itemsContainerOpen=e[n];break;case"suggestion":t.item=e[n];break;case"suggestionFirst":t.itemFirst=e[n];break;case"suggestionHighlighted":t.itemHighlighted=e[n];break;case"suggestionsList":t.itemsList=e[n];break;default:t[n]=e[n]}return t}},88476:(e,t,n)=>{"use strict";var r=n(23970);function o(){}function i(){}i.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,i,a){if(a!==r){var u=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw u.name="Invariant Violation",u}}function t(){return e}e.isRequired=e;var n={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:o};return n.PropTypes=n,n}},35577:(e,t,n)=>{e.exports=n(88476)()},23970:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},89395:(e,t,n)=>{"use strict";var r=n(84258),o=n(28608),i=n(89019);function a(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}if(!r)throw Error(a(227));var u=new Set,c={};function s(e,t){l(e,t),l(e+"Capture",t)}function l(e,t){for(c[e]=t,e=0;e<t.length;e++)u.add(t[e])}var f=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),p=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,d=Object.prototype.hasOwnProperty,h={},y={};function m(e,t,n,r,o,i,a){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=i,this.removeEmptyString=a}var v={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){v[e]=new m(e,0,!1,e,null,!1,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var t=e[0];v[t]=new m(t,1,!1,e[1],null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){v[e]=new m(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){v[e]=new m(e,2,!1,e,null,!1,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){v[e]=new m(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((function(e){v[e]=new m(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((function(e){v[e]=new m(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((function(e){v[e]=new m(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((function(e){v[e]=new m(e,5,!1,e.toLowerCase(),null,!1,!1)}));var g=/[\-:]([a-z])/g;function b(e){return e[1].toUpperCase()}function w(e,t,n,r){var o=v.hasOwnProperty(t)?v[t]:null;(null!==o?0===o.type:!r&&(2<t.length&&("o"===t[0]||"O"===t[0])&&("n"===t[1]||"N"===t[1])))||(function(e,t,n,r){if(null==t||function(e,t,n,r){if(null!==n&&0===n.type)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return!r&&(null!==n?!n.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,t,n,r))return!0;if(r)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,n,o,r)&&(n=null),r||null===o?function(e){return!!d.call(y,e)||!d.call(h,e)&&(p.test(e)?y[e]=!0:(h[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):o.mustUseProperty?e[o.propertyName]=null===n?3!==o.type&&"":n:(t=o.attributeName,r=o.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(o=o.type)||4===o&&!0===n?"":""+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var t=e.replace(g,b);v[t]=new m(t,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var t=e.replace(g,b);v[t]=new m(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace(g,b);v[t]=new m(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){v[e]=new m(e,1,!1,e.toLowerCase(),null,!1,!1)})),v.xlinkHref=new m("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){v[e]=new m(e,1,!1,e.toLowerCase(),null,!0,!0)}));var O=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,E=60103,_=60106,x=60107,S=60108,j=60114,P=60109,k=60110,I=60112,T=60113,R=60120,C=60115,A=60116,N=60121,L=60128,D=60129,M=60130,F=60131;if("function"==typeof Symbol&&Symbol.for){var U=Symbol.for;E=U("react.element"),_=U("react.portal"),x=U("react.fragment"),S=U("react.strict_mode"),j=U("react.profiler"),P=U("react.provider"),k=U("react.context"),I=U("react.forward_ref"),T=U("react.suspense"),R=U("react.suspense_list"),C=U("react.memo"),A=U("react.lazy"),N=U("react.block"),U("react.scope"),L=U("react.opaque.id"),D=U("react.debug_trace_mode"),M=U("react.offscreen"),F=U("react.legacy_hidden")}var B,H="function"==typeof Symbol&&Symbol.iterator;function q(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=H&&e[H]||e["@@iterator"])?e:null}function z(e){if(void 0===B)try{throw Error()}catch(e){var t=e.stack.trim().match(/\n( *(at )?)/);B=t&&t[1]||""}return"\n"+B+e}var G=!1;function W(e,t){if(!e||G)return"";G=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(e){var r=e}Reflect.construct(e,[],t)}else{try{t.call()}catch(e){r=e}e.call(t.prototype)}else{try{throw Error()}catch(e){r=e}e()}}catch(e){if(e&&r&&"string"==typeof e.stack){for(var o=e.stack.split("\n"),i=r.stack.split("\n"),a=o.length-1,u=i.length-1;1<=a&&0<=u&&o[a]!==i[u];)u--;for(;1<=a&&0<=u;a--,u--)if(o[a]!==i[u]){if(1!==a||1!==u)do{if(a--,0>--u||o[a]!==i[u])return"\n"+o[a].replace(" at new "," at ")}while(1<=a&&0<=u);break}}}finally{G=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?z(e):""}function V(e){switch(e.tag){case 5:return z(e.type);case 16:return z("Lazy");case 13:return z("Suspense");case 19:return z("SuspenseList");case 0:case 2:case 15:return e=W(e.type,!1);case 11:return e=W(e.type.render,!1);case 22:return e=W(e.type._render,!1);case 1:return e=W(e.type,!0);default:return""}}function Y(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case x:return"Fragment";case _:return"Portal";case j:return"Profiler";case S:return"StrictMode";case T:return"Suspense";case R:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case k:return(e.displayName||"Context")+".Consumer";case P:return(e._context.displayName||"Context")+".Provider";case I:var t=e.render;return t=t.displayName||t.name||"",e.displayName||(""!==t?"ForwardRef("+t+")":"ForwardRef");case C:return Y(e.type);case N:return Y(e._render);case A:t=e._payload,e=e._init;try{return Y(e(t))}catch(e){}}return null}function Z(e){switch(typeof e){case"boolean":case"number":case"object":case"string":case"undefined":return e;default:return""}}function $(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function K(e){e._valueTracker||(e._valueTracker=function(e){var t=$(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var o=n.get,i=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(e){r=""+e,i.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function Q(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=$(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function X(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function J(e,t){var n=t.checked;return o({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function ee(e,t){var n=null==t.defaultValue?"":t.defaultValue,r=null!=t.checked?t.checked:t.defaultChecked;n=Z(null!=t.value?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function te(e,t){null!=(t=t.checked)&&w(e,"checked",t,!1)}function ne(e,t){te(e,t);var n=Z(t.value),r=t.type;if(null!=n)"number"===r?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if("submit"===r||"reset"===r)return void e.removeAttribute("value");t.hasOwnProperty("value")?oe(e,t.type,n):t.hasOwnProperty("defaultValue")&&oe(e,t.type,Z(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function re(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!("submit"!==r&&"reset"!==r||void 0!==t.value&&null!==t.value))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}""!==(n=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==n&&(e.name=n)}function oe(e,t,n){"number"===t&&X(e.ownerDocument)===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}function ie(e,t){return e=o({children:void 0},t),(t=function(e){var t="";return r.Children.forEach(e,(function(e){null!=e&&(t+=e)})),t}(t.children))&&(e.children=t),e}function ae(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o<n.length;o++)t["$"+n[o]]=!0;for(n=0;n<e.length;n++)o=t.hasOwnProperty("$"+e[n].value),e[n].selected!==o&&(e[n].selected=o),o&&r&&(e[n].defaultSelected=!0)}else{for(n=""+Z(n),t=null,o=0;o<e.length;o++){if(e[o].value===n)return e[o].selected=!0,void(r&&(e[o].defaultSelected=!0));null!==t||e[o].disabled||(t=e[o])}null!==t&&(t.selected=!0)}}function ue(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(a(91));return o({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function ce(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(a(92));if(Array.isArray(n)){if(!(1>=n.length))throw Error(a(93));n=n[0]}t=n}null==t&&(t=""),n=t}e._wrapperState={initialValue:Z(n)}}function se(e,t){var n=Z(t.value),r=Z(t.defaultValue);null!=n&&((n=""+n)!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=r&&(e.defaultValue=""+r)}function le(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}var fe="http://www.w3.org/1999/xhtml",pe="http://www.w3.org/2000/svg";function de(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function he(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?de(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var ye,me,ve=(me=function(e,t){if(e.namespaceURI!==pe||"innerHTML"in e)e.innerHTML=t;else{for((ye=ye||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=ye.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,n,r){MSApp.execUnsafeLocalFunction((function(){return me(e,t)}))}:me);function ge(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var be={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},we=["Webkit","ms","Moz","O"];function Oe(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||be.hasOwnProperty(e)&&be[e]?(""+t).trim():t+"px"}function Ee(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=0===n.indexOf("--"),o=Oe(n,t[n],r);"float"===n&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}Object.keys(be).forEach((function(e){we.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),be[t]=be[e]}))}));var _e=o({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function xe(e,t){if(t){if(_e[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(a(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(a(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(a(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(a(62))}}function Se(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function je(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var Pe=null,ke=null,Ie=null;function Te(e){if(e=eo(e)){if("function"!=typeof Pe)throw Error(a(280));var t=e.stateNode;t&&(t=no(t),Pe(e.stateNode,e.type,t))}}function Re(e){ke?Ie?Ie.push(e):Ie=[e]:ke=e}function Ce(){if(ke){var e=ke,t=Ie;if(Ie=ke=null,Te(e),t)for(e=0;e<t.length;e++)Te(t[e])}}function Ae(e,t){return e(t)}function Ne(e,t,n,r,o){return e(t,n,r,o)}function Le(){}var De=Ae,Me=!1,Fe=!1;function Ue(){null===ke&&null===Ie||(Le(),Ce())}function Be(e,t){var n=e.stateNode;if(null===n)return null;var r=no(n);if(null===r)return null;n=r[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(r=!r.disabled)||(r=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!r;break e;default:e=!1}if(e)return null;if(n&&"function"!=typeof n)throw Error(a(231,t,typeof n));return n}var He=!1;if(f)try{var qe={};Object.defineProperty(qe,"passive",{get:function(){He=!0}}),window.addEventListener("test",qe,qe),window.removeEventListener("test",qe,qe)}catch(me){He=!1}function ze(e,t,n,r,o,i,a,u,c){var s=Array.prototype.slice.call(arguments,3);try{t.apply(n,s)}catch(e){this.onError(e)}}var Ge=!1,We=null,Ve=!1,Ye=null,Ze={onError:function(e){Ge=!0,We=e}};function $e(e,t,n,r,o,i,a,u,c){Ge=!1,We=null,ze.apply(Ze,arguments)}function Ke(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!=(1026&(t=e).flags)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function Qe(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!==(e=e.alternate)&&(t=e.memoizedState)),null!==t)return t.dehydrated}return null}function Xe(e){if(Ke(e)!==e)throw Error(a(188))}function Je(e){if(!(e=function(e){var t=e.alternate;if(!t){if(null===(t=Ke(e)))throw Error(a(188));return t!==e?null:e}for(var n=e,r=t;;){var o=n.return;if(null===o)break;var i=o.alternate;if(null===i){if(null!==(r=o.return)){n=r;continue}break}if(o.child===i.child){for(i=o.child;i;){if(i===n)return Xe(o),e;if(i===r)return Xe(o),t;i=i.sibling}throw Error(a(188))}if(n.return!==r.return)n=o,r=i;else{for(var u=!1,c=o.child;c;){if(c===n){u=!0,n=o,r=i;break}if(c===r){u=!0,r=o,n=i;break}c=c.sibling}if(!u){for(c=i.child;c;){if(c===n){u=!0,n=i,r=o;break}if(c===r){u=!0,r=i,n=o;break}c=c.sibling}if(!u)throw Error(a(189))}}if(n.alternate!==r)throw Error(a(190))}if(3!==n.tag)throw Error(a(188));return n.stateNode.current===n?e:t}(e)))return null;for(var t=e;;){if(5===t.tag||6===t.tag)return t;if(t.child)t.child.return=t,t=t.child;else{if(t===e)break;for(;!t.sibling;){if(!t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}}return null}function et(e,t){for(var n=e.alternate;null!==t;){if(t===e||t===n)return!0;t=t.return}return!1}var tt,nt,rt,ot,it=!1,at=[],ut=null,ct=null,st=null,lt=new Map,ft=new Map,pt=[],dt="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function ht(e,t,n,r,o){return{blockedOn:e,domEventName:t,eventSystemFlags:16|n,nativeEvent:o,targetContainers:[r]}}function yt(e,t){switch(e){case"focusin":case"focusout":ut=null;break;case"dragenter":case"dragleave":ct=null;break;case"mouseover":case"mouseout":st=null;break;case"pointerover":case"pointerout":lt.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":ft.delete(t.pointerId)}}function mt(e,t,n,r,o,i){return null===e||e.nativeEvent!==i?(e=ht(t,n,r,o,i),null!==t&&(null!==(t=eo(t))&&nt(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,null!==o&&-1===t.indexOf(o)&&t.push(o),e)}function vt(e){var t=Jr(e.target);if(null!==t){var n=Ke(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=Qe(n)))return e.blockedOn=t,void ot(e.lanePriority,(function(){i.unstable_runWithPriority(e.priority,(function(){rt(n)}))}))}else if(3===t&&n.stateNode.hydrate)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function gt(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=Jt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n)return null!==(t=eo(n))&&nt(t),e.blockedOn=n,!1;t.shift()}return!0}function bt(e,t,n){gt(e)&&n.delete(t)}function wt(){for(it=!1;0<at.length;){var e=at[0];if(null!==e.blockedOn){null!==(e=eo(e.blockedOn))&&tt(e);break}for(var t=e.targetContainers;0<t.length;){var n=Jt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n){e.blockedOn=n;break}t.shift()}null===e.blockedOn&&at.shift()}null!==ut&&gt(ut)&&(ut=null),null!==ct&&gt(ct)&&(ct=null),null!==st&&gt(st)&&(st=null),lt.forEach(bt),ft.forEach(bt)}function Ot(e,t){e.blockedOn===t&&(e.blockedOn=null,it||(it=!0,i.unstable_scheduleCallback(i.unstable_NormalPriority,wt)))}function Et(e){function t(t){return Ot(t,e)}if(0<at.length){Ot(at[0],e);for(var n=1;n<at.length;n++){var r=at[n];r.blockedOn===e&&(r.blockedOn=null)}}for(null!==ut&&Ot(ut,e),null!==ct&&Ot(ct,e),null!==st&&Ot(st,e),lt.forEach(t),ft.forEach(t),n=0;n<pt.length;n++)(r=pt[n]).blockedOn===e&&(r.blockedOn=null);for(;0<pt.length&&null===(n=pt[0]).blockedOn;)vt(n),null===n.blockedOn&&pt.shift()}function _t(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var xt={animationend:_t("Animation","AnimationEnd"),animationiteration:_t("Animation","AnimationIteration"),animationstart:_t("Animation","AnimationStart"),transitionend:_t("Transition","TransitionEnd")},St={},jt={};function Pt(e){if(St[e])return St[e];if(!xt[e])return e;var t,n=xt[e];for(t in n)if(n.hasOwnProperty(t)&&t in jt)return St[e]=n[t];return e}f&&(jt=document.createElement("div").style,"AnimationEvent"in window||(delete xt.animationend.animation,delete xt.animationiteration.animation,delete xt.animationstart.animation),"TransitionEvent"in window||delete xt.transitionend.transition);var kt=Pt("animationend"),It=Pt("animationiteration"),Tt=Pt("animationstart"),Rt=Pt("transitionend"),Ct=new Map,At=new Map,Nt=["abort","abort",kt,"animationEnd",It,"animationIteration",Tt,"animationStart","canplay","canPlay","canplaythrough","canPlayThrough","durationchange","durationChange","emptied","emptied","encrypted","encrypted","ended","ended","error","error","gotpointercapture","gotPointerCapture","load","load","loadeddata","loadedData","loadedmetadata","loadedMetadata","loadstart","loadStart","lostpointercapture","lostPointerCapture","playing","playing","progress","progress","seeking","seeking","stalled","stalled","suspend","suspend","timeupdate","timeUpdate",Rt,"transitionEnd","waiting","waiting"];function Lt(e,t){for(var n=0;n<e.length;n+=2){var r=e[n],o=e[n+1];o="on"+(o[0].toUpperCase()+o.slice(1)),At.set(r,t),Ct.set(r,o),s(o,[r])}}(0,i.unstable_now)();var Dt=8;function Mt(e){if(0!=(1&e))return Dt=15,1;if(0!=(2&e))return Dt=14,2;if(0!=(4&e))return Dt=13,4;var t=24&e;return 0!==t?(Dt=12,t):0!=(32&e)?(Dt=11,32):0!==(t=192&e)?(Dt=10,t):0!=(256&e)?(Dt=9,256):0!==(t=3584&e)?(Dt=8,t):0!=(4096&e)?(Dt=7,4096):0!==(t=4186112&e)?(Dt=6,t):0!==(t=62914560&e)?(Dt=5,t):67108864&e?(Dt=4,67108864):0!=(134217728&e)?(Dt=3,134217728):0!==(t=805306368&e)?(Dt=2,t):0!=(1073741824&e)?(Dt=1,1073741824):(Dt=8,e)}function Ft(e,t){var n=e.pendingLanes;if(0===n)return Dt=0;var r=0,o=0,i=e.expiredLanes,a=e.suspendedLanes,u=e.pingedLanes;if(0!==i)r=i,o=Dt=15;else if(0!==(i=134217727&n)){var c=i&~a;0!==c?(r=Mt(c),o=Dt):0!==(u&=i)&&(r=Mt(u),o=Dt)}else 0!==(i=n&~a)?(r=Mt(i),o=Dt):0!==u&&(r=Mt(u),o=Dt);if(0===r)return 0;if(r=n&((0>(r=31-Gt(r))?0:1<<r)<<1)-1,0!==t&&t!==r&&0==(t&a)){if(Mt(t),o<=Dt)return t;Dt=o}if(0!==(t=e.entangledLanes))for(e=e.entanglements,t&=r;0<t;)o=1<<(n=31-Gt(t)),r|=e[n],t&=~o;return r}function Ut(e){return 0!==(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function Bt(e,t){switch(e){case 15:return 1;case 14:return 2;case 12:return 0===(e=Ht(24&~t))?Bt(10,t):e;case 10:return 0===(e=Ht(192&~t))?Bt(8,t):e;case 8:return 0===(e=Ht(3584&~t))&&(0===(e=Ht(4186112&~t))&&(e=512)),e;case 2:return 0===(t=Ht(805306368&~t))&&(t=268435456),t}throw Error(a(358,e))}function Ht(e){return e&-e}function qt(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function zt(e,t,n){e.pendingLanes|=t;var r=t-1;e.suspendedLanes&=r,e.pingedLanes&=r,(e=e.eventTimes)[t=31-Gt(t)]=n}var Gt=Math.clz32?Math.clz32:function(e){return 0===e?32:31-(Wt(e)/Vt|0)|0},Wt=Math.log,Vt=Math.LN2;var Yt=i.unstable_UserBlockingPriority,Zt=i.unstable_runWithPriority,$t=!0;function Kt(e,t,n,r){Me||Le();var o=Xt,i=Me;Me=!0;try{Ne(o,e,t,n,r)}finally{(Me=i)||Ue()}}function Qt(e,t,n,r){Zt(Yt,Xt.bind(null,e,t,n,r))}function Xt(e,t,n,r){var o;if($t)if((o=0==(4&t))&&0<at.length&&-1<dt.indexOf(e))e=ht(null,e,t,n,r),at.push(e);else{var i=Jt(e,t,n,r);if(null===i)o&&yt(e,r);else{if(o){if(-1<dt.indexOf(e))return e=ht(i,e,t,n,r),void at.push(e);if(function(e,t,n,r,o){switch(t){case"focusin":return ut=mt(ut,e,t,n,r,o),!0;case"dragenter":return ct=mt(ct,e,t,n,r,o),!0;case"mouseover":return st=mt(st,e,t,n,r,o),!0;case"pointerover":var i=o.pointerId;return lt.set(i,mt(lt.get(i)||null,e,t,n,r,o)),!0;case"gotpointercapture":return i=o.pointerId,ft.set(i,mt(ft.get(i)||null,e,t,n,r,o)),!0}return!1}(i,e,t,n,r))return;yt(e,r)}Cr(e,t,r,null,n)}}}function Jt(e,t,n,r){var o=je(r);if(null!==(o=Jr(o))){var i=Ke(o);if(null===i)o=null;else{var a=i.tag;if(13===a){if(null!==(o=Qe(i)))return o;o=null}else if(3===a){if(i.stateNode.hydrate)return 3===i.tag?i.stateNode.containerInfo:null;o=null}else i!==o&&(o=null)}}return Cr(e,t,r,o,n),null}var en=null,tn=null,nn=null;function rn(){if(nn)return nn;var e,t,n=tn,r=n.length,o="value"in en?en.value:en.textContent,i=o.length;for(e=0;e<r&&n[e]===o[e];e++);var a=r-e;for(t=1;t<=a&&n[r-t]===o[i-t];t++);return nn=o.slice(e,1<t?1-t:void 0)}function on(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function an(){return!0}function un(){return!1}function cn(e){function t(t,n,r,o,i){for(var a in this._reactName=t,this._targetInst=r,this.type=n,this.nativeEvent=o,this.target=i,this.currentTarget=null,e)e.hasOwnProperty(a)&&(t=e[a],this[a]=t?t(o):o[a]);return this.isDefaultPrevented=(null!=o.defaultPrevented?o.defaultPrevented:!1===o.returnValue)?an:un,this.isPropagationStopped=un,this}return o(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=an)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=an)},persist:function(){},isPersistent:an}),t}var sn,ln,fn,pn={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},dn=cn(pn),hn=o({},pn,{view:0,detail:0}),yn=cn(hn),mn=o({},hn,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:Pn,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==fn&&(fn&&"mousemove"===e.type?(sn=e.screenX-fn.screenX,ln=e.screenY-fn.screenY):ln=sn=0,fn=e),sn)},movementY:function(e){return"movementY"in e?e.movementY:ln}}),vn=cn(mn),gn=cn(o({},mn,{dataTransfer:0})),bn=cn(o({},hn,{relatedTarget:0})),wn=cn(o({},pn,{animationName:0,elapsedTime:0,pseudoElement:0})),On=cn(o({},pn,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}})),En=cn(o({},pn,{data:0})),_n={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},xn={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},Sn={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function jn(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=Sn[e])&&!!t[e]}function Pn(){return jn}var kn=cn(o({},hn,{key:function(e){if(e.key){var t=_n[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=on(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?xn[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:Pn,charCode:function(e){return"keypress"===e.type?on(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?on(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}})),In=cn(o({},mn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),Tn=cn(o({},hn,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:Pn})),Rn=cn(o({},pn,{propertyName:0,elapsedTime:0,pseudoElement:0})),Cn=cn(o({},mn,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0})),An=[9,13,27,32],Nn=f&&"CompositionEvent"in window,Ln=null;f&&"documentMode"in document&&(Ln=document.documentMode);var Dn=f&&"TextEvent"in window&&!Ln,Mn=f&&(!Nn||Ln&&8<Ln&&11>=Ln),Fn=String.fromCharCode(32),Un=!1;function Bn(e,t){switch(e){case"keyup":return-1!==An.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Hn(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var qn=!1;var zn={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Gn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!zn[e.type]:"textarea"===t}function Wn(e,t,n,r){Re(r),0<(t=Nr(t,"onChange")).length&&(n=new dn("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var Vn=null,Yn=null;function Zn(e){jr(e,0)}function $n(e){if(Q(to(e)))return e}function Kn(e,t){if("change"===e)return t}var Qn=!1;if(f){var Xn;if(f){var Jn="oninput"in document;if(!Jn){var er=document.createElement("div");er.setAttribute("oninput","return;"),Jn="function"==typeof er.oninput}Xn=Jn}else Xn=!1;Qn=Xn&&(!document.documentMode||9<document.documentMode)}function tr(){Vn&&(Vn.detachEvent("onpropertychange",nr),Yn=Vn=null)}function nr(e){if("value"===e.propertyName&&$n(Yn)){var t=[];if(Wn(t,Yn,e,je(e)),e=Zn,Me)e(t);else{Me=!0;try{Ae(e,t)}finally{Me=!1,Ue()}}}}function rr(e,t,n){"focusin"===e?(tr(),Yn=n,(Vn=t).attachEvent("onpropertychange",nr)):"focusout"===e&&tr()}function or(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return $n(Yn)}function ir(e,t){if("click"===e)return $n(t)}function ar(e,t){if("input"===e||"change"===e)return $n(t)}var ur="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},cr=Object.prototype.hasOwnProperty;function sr(e,t){if(ur(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++)if(!cr.call(t,n[r])||!ur(e[n[r]],t[n[r]]))return!1;return!0}function lr(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function fr(e,t){var n,r=lr(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=lr(r)}}function pr(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?pr(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function dr(){for(var e=window,t=X();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(e){n=!1}if(!n)break;t=X((e=t.contentWindow).document)}return t}function hr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}var yr=f&&"documentMode"in document&&11>=document.documentMode,mr=null,vr=null,gr=null,br=!1;function wr(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;br||null==mr||mr!==X(r)||("selectionStart"in(r=mr)&&hr(r)?r={start:r.selectionStart,end:r.selectionEnd}:r={anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},gr&&sr(gr,r)||(gr=r,0<(r=Nr(vr,"onSelect")).length&&(t=new dn("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=mr)))}Lt("cancel cancel click click close close contextmenu contextMenu copy copy cut cut auxclick auxClick dblclick doubleClick dragend dragEnd dragstart dragStart drop drop focusin focus focusout blur input input invalid invalid keydown keyDown keypress keyPress keyup keyUp mousedown mouseDown mouseup mouseUp paste paste pause pause play play pointercancel pointerCancel pointerdown pointerDown pointerup pointerUp ratechange rateChange reset reset seeked seeked submit submit touchcancel touchCancel touchend touchEnd touchstart touchStart volumechange volumeChange".split(" "),0),Lt("drag drag dragenter dragEnter dragexit dragExit dragleave dragLeave dragover dragOver mousemove mouseMove mouseout mouseOut mouseover mouseOver pointermove pointerMove pointerout pointerOut pointerover pointerOver scroll scroll toggle toggle touchmove touchMove wheel wheel".split(" "),1),Lt(Nt,2);for(var Or="change selectionchange textInput compositionstart compositionend compositionupdate".split(" "),Er=0;Er<Or.length;Er++)At.set(Or[Er],0);l("onMouseEnter",["mouseout","mouseover"]),l("onMouseLeave",["mouseout","mouseover"]),l("onPointerEnter",["pointerout","pointerover"]),l("onPointerLeave",["pointerout","pointerover"]),s("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),s("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),s("onBeforeInput",["compositionend","keypress","textInput","paste"]),s("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),s("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),s("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var _r="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),xr=new Set("cancel close invalid load scroll toggle".split(" ").concat(_r));function Sr(e,t,n){var r=e.type||"unknown-event";e.currentTarget=n,function(e,t,n,r,o,i,u,c,s){if($e.apply(this,arguments),Ge){if(!Ge)throw Error(a(198));var l=We;Ge=!1,We=null,Ve||(Ve=!0,Ye=l)}}(r,t,void 0,e),e.currentTarget=null}function jr(e,t){t=0!=(4&t);for(var n=0;n<e.length;n++){var r=e[n],o=r.event;r=r.listeners;e:{var i=void 0;if(t)for(var a=r.length-1;0<=a;a--){var u=r[a],c=u.instance,s=u.currentTarget;if(u=u.listener,c!==i&&o.isPropagationStopped())break e;Sr(o,u,s),i=c}else for(a=0;a<r.length;a++){if(c=(u=r[a]).instance,s=u.currentTarget,u=u.listener,c!==i&&o.isPropagationStopped())break e;Sr(o,u,s),i=c}}}if(Ve)throw e=Ye,Ve=!1,Ye=null,e}function Pr(e,t){var n=ro(t),r=e+"__bubble";n.has(r)||(Rr(t,e,2,!1),n.add(r))}var kr="_reactListening"+Math.random().toString(36).slice(2);function Ir(e){e[kr]||(e[kr]=!0,u.forEach((function(t){xr.has(t)||Tr(t,!1,e,null),Tr(t,!0,e,null)})))}function Tr(e,t,n,r){var o=4<arguments.length&&void 0!==arguments[4]?arguments[4]:0,i=n;if("selectionchange"===e&&9!==n.nodeType&&(i=n.ownerDocument),null!==r&&!t&&xr.has(e)){if("scroll"!==e)return;o|=2,i=r}var a=ro(i),u=e+"__"+(t?"capture":"bubble");a.has(u)||(t&&(o|=4),Rr(i,e,o,t),a.add(u))}function Rr(e,t,n,r){var o=At.get(t);switch(void 0===o?2:o){case 0:o=Kt;break;case 1:o=Qt;break;default:o=Xt}n=o.bind(null,t,n,e),o=void 0,!He||"touchstart"!==t&&"touchmove"!==t&&"wheel"!==t||(o=!0),r?void 0!==o?e.addEventListener(t,n,{capture:!0,passive:o}):e.addEventListener(t,n,!0):void 0!==o?e.addEventListener(t,n,{passive:o}):e.addEventListener(t,n,!1)}function Cr(e,t,n,r,o){var i=r;if(0==(1&t)&&0==(2&t)&&null!==r)e:for(;;){if(null===r)return;var a=r.tag;if(3===a||4===a){var u=r.stateNode.containerInfo;if(u===o||8===u.nodeType&&u.parentNode===o)break;if(4===a)for(a=r.return;null!==a;){var c=a.tag;if((3===c||4===c)&&((c=a.stateNode.containerInfo)===o||8===c.nodeType&&c.parentNode===o))return;a=a.return}for(;null!==u;){if(null===(a=Jr(u)))return;if(5===(c=a.tag)||6===c){r=i=a;continue e}u=u.parentNode}}r=r.return}!function(e,t,n){if(Fe)return e(t,n);Fe=!0;try{De(e,t,n)}finally{Fe=!1,Ue()}}((function(){var r=i,o=je(n),a=[];e:{var u=Ct.get(e);if(void 0!==u){var c=dn,s=e;switch(e){case"keypress":if(0===on(n))break e;case"keydown":case"keyup":c=kn;break;case"focusin":s="focus",c=bn;break;case"focusout":s="blur",c=bn;break;case"beforeblur":case"afterblur":c=bn;break;case"click":if(2===n.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":c=vn;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":c=gn;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":c=Tn;break;case kt:case It:case Tt:c=wn;break;case Rt:c=Rn;break;case"scroll":c=yn;break;case"wheel":c=Cn;break;case"copy":case"cut":case"paste":c=On;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":c=In}var l=0!=(4&t),f=!l&&"scroll"===e,p=l?null!==u?u+"Capture":null:u;l=[];for(var d,h=r;null!==h;){var y=(d=h).stateNode;if(5===d.tag&&null!==y&&(d=y,null!==p&&(null!=(y=Be(h,p))&&l.push(Ar(h,y,d)))),f)break;h=h.return}0<l.length&&(u=new c(u,s,null,n,o),a.push({event:u,listeners:l}))}}if(0==(7&t)){if(c="mouseout"===e||"pointerout"===e,(!(u="mouseover"===e||"pointerover"===e)||0!=(16&t)||!(s=n.relatedTarget||n.fromElement)||!Jr(s)&&!s[Qr])&&(c||u)&&(u=o.window===o?o:(u=o.ownerDocument)?u.defaultView||u.parentWindow:window,c?(c=r,null!==(s=(s=n.relatedTarget||n.toElement)?Jr(s):null)&&(s!==(f=Ke(s))||5!==s.tag&&6!==s.tag)&&(s=null)):(c=null,s=r),c!==s)){if(l=vn,y="onMouseLeave",p="onMouseEnter",h="mouse","pointerout"!==e&&"pointerover"!==e||(l=In,y="onPointerLeave",p="onPointerEnter",h="pointer"),f=null==c?u:to(c),d=null==s?u:to(s),(u=new l(y,h+"leave",c,n,o)).target=f,u.relatedTarget=d,y=null,Jr(o)===r&&((l=new l(p,h+"enter",s,n,o)).target=d,l.relatedTarget=f,y=l),f=y,c&&s)e:{for(p=s,h=0,d=l=c;d;d=Lr(d))h++;for(d=0,y=p;y;y=Lr(y))d++;for(;0<h-d;)l=Lr(l),h--;for(;0<d-h;)p=Lr(p),d--;for(;h--;){if(l===p||null!==p&&l===p.alternate)break e;l=Lr(l),p=Lr(p)}l=null}else l=null;null!==c&&Dr(a,u,c,l,!1),null!==s&&null!==f&&Dr(a,f,s,l,!0)}if("select"===(c=(u=r?to(r):window).nodeName&&u.nodeName.toLowerCase())||"input"===c&&"file"===u.type)var m=Kn;else if(Gn(u))if(Qn)m=ar;else{m=or;var v=rr}else(c=u.nodeName)&&"input"===c.toLowerCase()&&("checkbox"===u.type||"radio"===u.type)&&(m=ir);switch(m&&(m=m(e,r))?Wn(a,m,n,o):(v&&v(e,u,r),"focusout"===e&&(v=u._wrapperState)&&v.controlled&&"number"===u.type&&oe(u,"number",u.value)),v=r?to(r):window,e){case"focusin":(Gn(v)||"true"===v.contentEditable)&&(mr=v,vr=r,gr=null);break;case"focusout":gr=vr=mr=null;break;case"mousedown":br=!0;break;case"contextmenu":case"mouseup":case"dragend":br=!1,wr(a,n,o);break;case"selectionchange":if(yr)break;case"keydown":case"keyup":wr(a,n,o)}var g;if(Nn)e:{switch(e){case"compositionstart":var b="onCompositionStart";break e;case"compositionend":b="onCompositionEnd";break e;case"compositionupdate":b="onCompositionUpdate";break e}b=void 0}else qn?Bn(e,n)&&(b="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(b="onCompositionStart");b&&(Mn&&"ko"!==n.locale&&(qn||"onCompositionStart"!==b?"onCompositionEnd"===b&&qn&&(g=rn()):(tn="value"in(en=o)?en.value:en.textContent,qn=!0)),0<(v=Nr(r,b)).length&&(b=new En(b,e,null,n,o),a.push({event:b,listeners:v}),g?b.data=g:null!==(g=Hn(n))&&(b.data=g))),(g=Dn?function(e,t){switch(e){case"compositionend":return Hn(t);case"keypress":return 32!==t.which?null:(Un=!0,Fn);case"textInput":return(e=t.data)===Fn&&Un?null:e;default:return null}}(e,n):function(e,t){if(qn)return"compositionend"===e||!Nn&&Bn(e,t)?(e=rn(),nn=tn=en=null,qn=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return Mn&&"ko"!==t.locale?null:t.data;default:return null}}(e,n))&&(0<(r=Nr(r,"onBeforeInput")).length&&(o=new En("onBeforeInput","beforeinput",null,n,o),a.push({event:o,listeners:r}),o.data=g))}jr(a,t)}))}function Ar(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Nr(e,t){for(var n=t+"Capture",r=[];null!==e;){var o=e,i=o.stateNode;5===o.tag&&null!==i&&(o=i,null!=(i=Be(e,n))&&r.unshift(Ar(e,i,o)),null!=(i=Be(e,t))&&r.push(Ar(e,i,o))),e=e.return}return r}function Lr(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function Dr(e,t,n,r,o){for(var i=t._reactName,a=[];null!==n&&n!==r;){var u=n,c=u.alternate,s=u.stateNode;if(null!==c&&c===r)break;5===u.tag&&null!==s&&(u=s,o?null!=(c=Be(n,i))&&a.unshift(Ar(n,c,u)):o||null!=(c=Be(n,i))&&a.push(Ar(n,c,u))),n=n.return}0!==a.length&&e.push({event:t,listeners:a})}function Mr(){}var Fr=null,Ur=null;function Br(e,t){switch(e){case"button":case"input":case"select":case"textarea":return!!t.autoFocus}return!1}function Hr(e,t){return"textarea"===e||"option"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var qr="function"==typeof setTimeout?setTimeout:void 0,zr="function"==typeof clearTimeout?clearTimeout:void 0;function Gr(e){1===e.nodeType?e.textContent="":9===e.nodeType&&(null!=(e=e.body)&&(e.textContent=""))}function Wr(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break}return e}function Vr(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if("$"===n||"$!"===n||"$?"===n){if(0===t)return e;t--}else"/$"===n&&t++}e=e.previousSibling}return null}var Yr=0;var Zr=Math.random().toString(36).slice(2),$r="__reactFiber$"+Zr,Kr="__reactProps$"+Zr,Qr="__reactContainer$"+Zr,Xr="__reactEvents$"+Zr;function Jr(e){var t=e[$r];if(t)return t;for(var n=e.parentNode;n;){if(t=n[Qr]||n[$r]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=Vr(e);null!==e;){if(n=e[$r])return n;e=Vr(e)}return t}n=(e=n).parentNode}return null}function eo(e){return!(e=e[$r]||e[Qr])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function to(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(a(33))}function no(e){return e[Kr]||null}function ro(e){var t=e[Xr];return void 0===t&&(t=e[Xr]=new Set),t}var oo=[],io=-1;function ao(e){return{current:e}}function uo(e){0>io||(e.current=oo[io],oo[io]=null,io--)}function co(e,t){io++,oo[io]=e.current,e.current=t}var so={},lo=ao(so),fo=ao(!1),po=so;function ho(e,t){var n=e.type.contextTypes;if(!n)return so;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o,i={};for(o in n)i[o]=t[o];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=i),i}function yo(e){return null!=(e=e.childContextTypes)}function mo(){uo(fo),uo(lo)}function vo(e,t,n){if(lo.current!==so)throw Error(a(168));co(lo,t),co(fo,n)}function go(e,t,n){var r=e.stateNode;if(e=t.childContextTypes,"function"!=typeof r.getChildContext)return n;for(var i in r=r.getChildContext())if(!(i in e))throw Error(a(108,Y(t)||"Unknown",i));return o({},n,r)}function bo(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||so,po=lo.current,co(lo,e),co(fo,fo.current),!0}function wo(e,t,n){var r=e.stateNode;if(!r)throw Error(a(169));n?(e=go(e,t,po),r.__reactInternalMemoizedMergedChildContext=e,uo(fo),uo(lo),co(lo,e)):uo(fo),co(fo,n)}var Oo=null,Eo=null,_o=i.unstable_runWithPriority,xo=i.unstable_scheduleCallback,So=i.unstable_cancelCallback,jo=i.unstable_shouldYield,Po=i.unstable_requestPaint,ko=i.unstable_now,Io=i.unstable_getCurrentPriorityLevel,To=i.unstable_ImmediatePriority,Ro=i.unstable_UserBlockingPriority,Co=i.unstable_NormalPriority,Ao=i.unstable_LowPriority,No=i.unstable_IdlePriority,Lo={},Do=void 0!==Po?Po:function(){},Mo=null,Fo=null,Uo=!1,Bo=ko(),Ho=1e4>Bo?ko:function(){return ko()-Bo};function qo(){switch(Io()){case To:return 99;case Ro:return 98;case Co:return 97;case Ao:return 96;case No:return 95;default:throw Error(a(332))}}function zo(e){switch(e){case 99:return To;case 98:return Ro;case 97:return Co;case 96:return Ao;case 95:return No;default:throw Error(a(332))}}function Go(e,t){return e=zo(e),_o(e,t)}function Wo(e,t,n){return e=zo(e),xo(e,t,n)}function Vo(){if(null!==Fo){var e=Fo;Fo=null,So(e)}Yo()}function Yo(){if(!Uo&&null!==Mo){Uo=!0;var e=0;try{var t=Mo;Go(99,(function(){for(;e<t.length;e++){var n=t[e];do{n=n(!0)}while(null!==n)}})),Mo=null}catch(t){throw null!==Mo&&(Mo=Mo.slice(e+1)),xo(To,Vo),t}finally{Uo=!1}}}var Zo=O.ReactCurrentBatchConfig;function $o(e,t){if(e&&e.defaultProps){for(var n in t=o({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}return t}var Ko=ao(null),Qo=null,Xo=null,Jo=null;function ei(){Jo=Xo=Qo=null}function ti(e){var t=Ko.current;uo(Ko),e.type._context._currentValue=t}function ni(e,t){for(;null!==e;){var n=e.alternate;if((e.childLanes&t)===t){if(null===n||(n.childLanes&t)===t)break;n.childLanes|=t}else e.childLanes|=t,null!==n&&(n.childLanes|=t);e=e.return}}function ri(e,t){Qo=e,Jo=Xo=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!=(e.lanes&t)&&(Na=!0),e.firstContext=null)}function oi(e,t){if(Jo!==e&&!1!==t&&0!==t)if("number"==typeof t&&1073741823!==t||(Jo=e,t=1073741823),t={context:e,observedBits:t,next:null},null===Xo){if(null===Qo)throw Error(a(308));Xo=t,Qo.dependencies={lanes:0,firstContext:t,responders:null}}else Xo=Xo.next=t;return e._currentValue}var ii=!1;function ai(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null},effects:null}}function ui(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function ci(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function si(e,t){if(null!==(e=e.updateQueue)){var n=(e=e.shared).pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}}function li(e,t){var n=e.updateQueue,r=e.alternate;if(null!==r&&n===(r=r.updateQueue)){var o=null,i=null;if(null!==(n=n.firstBaseUpdate)){do{var a={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};null===i?o=i=a:i=i.next=a,n=n.next}while(null!==n);null===i?o=i=t:i=i.next=t}else o=i=t;return n={baseState:r.baseState,firstBaseUpdate:o,lastBaseUpdate:i,shared:r.shared,effects:r.effects},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function fi(e,t,n,r){var i=e.updateQueue;ii=!1;var a=i.firstBaseUpdate,u=i.lastBaseUpdate,c=i.shared.pending;if(null!==c){i.shared.pending=null;var s=c,l=s.next;s.next=null,null===u?a=l:u.next=l,u=s;var f=e.alternate;if(null!==f){var p=(f=f.updateQueue).lastBaseUpdate;p!==u&&(null===p?f.firstBaseUpdate=l:p.next=l,f.lastBaseUpdate=s)}}if(null!==a){for(p=i.baseState,u=0,f=l=s=null;;){c=a.lane;var d=a.eventTime;if((r&c)===c){null!==f&&(f=f.next={eventTime:d,lane:0,tag:a.tag,payload:a.payload,callback:a.callback,next:null});e:{var h=e,y=a;switch(c=t,d=n,y.tag){case 1:if("function"==typeof(h=y.payload)){p=h.call(d,p,c);break e}p=h;break e;case 3:h.flags=-4097&h.flags|64;case 0:if(null==(c="function"==typeof(h=y.payload)?h.call(d,p,c):h))break e;p=o({},p,c);break e;case 2:ii=!0}}null!==a.callback&&(e.flags|=32,null===(c=i.effects)?i.effects=[a]:c.push(a))}else d={eventTime:d,lane:c,tag:a.tag,payload:a.payload,callback:a.callback,next:null},null===f?(l=f=d,s=p):f=f.next=d,u|=c;if(null===(a=a.next)){if(null===(c=i.shared.pending))break;a=c.next,c.next=null,i.lastBaseUpdate=c,i.shared.pending=null}}null===f&&(s=p),i.baseState=s,i.firstBaseUpdate=l,i.lastBaseUpdate=f,Mu|=u,e.lanes=u,e.memoizedState=p}}function pi(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var r=e[t],o=r.callback;if(null!==o){if(r.callback=null,r=n,"function"!=typeof o)throw Error(a(191,o));o.call(r)}}}var di=(new r.Component).refs;function hi(e,t,n,r){n=null==(n=n(r,t=e.memoizedState))?t:o({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var yi={isMounted:function(e){return!!(e=e._reactInternals)&&Ke(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternals;var r=cc(),o=sc(e),i=ci(r,o);i.payload=t,null!=n&&(i.callback=n),si(e,i),lc(e,o,r)},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=cc(),o=sc(e),i=ci(r,o);i.tag=1,i.payload=t,null!=n&&(i.callback=n),si(e,i),lc(e,o,r)},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=cc(),r=sc(e),o=ci(n,r);o.tag=2,null!=t&&(o.callback=t),si(e,o),lc(e,r,n)}};function mi(e,t,n,r,o,i,a){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,i,a):!t.prototype||!t.prototype.isPureReactComponent||(!sr(n,r)||!sr(o,i))}function vi(e,t,n){var r=!1,o=so,i=t.contextType;return"object"==typeof i&&null!==i?i=oi(i):(o=yo(t)?po:lo.current,i=(r=null!=(r=t.contextTypes))?ho(e,o):so),t=new t(n,i),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=yi,e.stateNode=t,t._reactInternals=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=o,e.__reactInternalMemoizedMaskedChildContext=i),t}function gi(e,t,n,r){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&yi.enqueueReplaceState(t,t.state,null)}function bi(e,t,n,r){var o=e.stateNode;o.props=n,o.state=e.memoizedState,o.refs=di,ai(e);var i=t.contextType;"object"==typeof i&&null!==i?o.context=oi(i):(i=yo(t)?po:lo.current,o.context=ho(e,i)),fi(e,n,o,r),o.state=e.memoizedState,"function"==typeof(i=t.getDerivedStateFromProps)&&(hi(e,t,i,n),o.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof o.getSnapshotBeforeUpdate||"function"!=typeof o.UNSAFE_componentWillMount&&"function"!=typeof o.componentWillMount||(t=o.state,"function"==typeof o.componentWillMount&&o.componentWillMount(),"function"==typeof o.UNSAFE_componentWillMount&&o.UNSAFE_componentWillMount(),t!==o.state&&yi.enqueueReplaceState(o,o.state,null),fi(e,n,o,r),o.state=e.memoizedState),"function"==typeof o.componentDidMount&&(e.flags|=4)}var wi=Array.isArray;function Oi(e,t,n){if(null!==(e=n.ref)&&"function"!=typeof e&&"object"!=typeof e){if(n._owner){if(n=n._owner){if(1!==n.tag)throw Error(a(309));var r=n.stateNode}if(!r)throw Error(a(147,e));var o=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===o?t.ref:((t=function(e){var t=r.refs;t===di&&(t=r.refs={}),null===e?delete t[o]:t[o]=e})._stringRef=o,t)}if("string"!=typeof e)throw Error(a(284));if(!n._owner)throw Error(a(290,e))}return e}function Ei(e,t){if("textarea"!==e.type)throw Error(a(31,"[object Object]"===Object.prototype.toString.call(t)?"object with keys {"+Object.keys(t).join(", ")+"}":t))}function _i(e){function t(t,n){if(e){var r=t.lastEffect;null!==r?(r.nextEffect=n,t.lastEffect=n):t.firstEffect=t.lastEffect=n,n.nextEffect=null,n.flags=8}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function o(e,t){return(e=qc(e,t)).index=0,e.sibling=null,e}function i(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index)<n?(t.flags=2,n):r:(t.flags=2,n):n}function u(t){return e&&null===t.alternate&&(t.flags=2),t}function c(e,t,n,r){return null===t||6!==t.tag?((t=Vc(n,e.mode,r)).return=e,t):((t=o(t,n)).return=e,t)}function s(e,t,n,r){return null!==t&&t.elementType===n.type?((r=o(t,n.props)).ref=Oi(e,t,n),r.return=e,r):((r=zc(n.type,n.key,n.props,null,e.mode,r)).ref=Oi(e,t,n),r.return=e,r)}function l(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=Yc(n,e.mode,r)).return=e,t):((t=o(t,n.children||[])).return=e,t)}function f(e,t,n,r,i){return null===t||7!==t.tag?((t=Gc(n,e.mode,r,i)).return=e,t):((t=o(t,n)).return=e,t)}function p(e,t,n){if("string"==typeof t||"number"==typeof t)return(t=Vc(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case E:return(n=zc(t.type,t.key,t.props,null,e.mode,n)).ref=Oi(e,null,t),n.return=e,n;case _:return(t=Yc(t,e.mode,n)).return=e,t}if(wi(t)||q(t))return(t=Gc(t,e.mode,n,null)).return=e,t;Ei(e,t)}return null}function d(e,t,n,r){var o=null!==t?t.key:null;if("string"==typeof n||"number"==typeof n)return null!==o?null:c(e,t,""+n,r);if("object"==typeof n&&null!==n){switch(n.$$typeof){case E:return n.key===o?n.type===x?f(e,t,n.props.children,r,o):s(e,t,n,r):null;case _:return n.key===o?l(e,t,n,r):null}if(wi(n)||q(n))return null!==o?null:f(e,t,n,r,null);Ei(e,n)}return null}function h(e,t,n,r,o){if("string"==typeof r||"number"==typeof r)return c(t,e=e.get(n)||null,""+r,o);if("object"==typeof r&&null!==r){switch(r.$$typeof){case E:return e=e.get(null===r.key?n:r.key)||null,r.type===x?f(t,e,r.props.children,o,r.key):s(t,e,r,o);case _:return l(t,e=e.get(null===r.key?n:r.key)||null,r,o)}if(wi(r)||q(r))return f(t,e=e.get(n)||null,r,o,null);Ei(t,r)}return null}function y(o,a,u,c){for(var s=null,l=null,f=a,y=a=0,m=null;null!==f&&y<u.length;y++){f.index>y?(m=f,f=null):m=f.sibling;var v=d(o,f,u[y],c);if(null===v){null===f&&(f=m);break}e&&f&&null===v.alternate&&t(o,f),a=i(v,a,y),null===l?s=v:l.sibling=v,l=v,f=m}if(y===u.length)return n(o,f),s;if(null===f){for(;y<u.length;y++)null!==(f=p(o,u[y],c))&&(a=i(f,a,y),null===l?s=f:l.sibling=f,l=f);return s}for(f=r(o,f);y<u.length;y++)null!==(m=h(f,o,y,u[y],c))&&(e&&null!==m.alternate&&f.delete(null===m.key?y:m.key),a=i(m,a,y),null===l?s=m:l.sibling=m,l=m);return e&&f.forEach((function(e){return t(o,e)})),s}function m(o,u,c,s){var l=q(c);if("function"!=typeof l)throw Error(a(150));if(null==(c=l.call(c)))throw Error(a(151));for(var f=l=null,y=u,m=u=0,v=null,g=c.next();null!==y&&!g.done;m++,g=c.next()){y.index>m?(v=y,y=null):v=y.sibling;var b=d(o,y,g.value,s);if(null===b){null===y&&(y=v);break}e&&y&&null===b.alternate&&t(o,y),u=i(b,u,m),null===f?l=b:f.sibling=b,f=b,y=v}if(g.done)return n(o,y),l;if(null===y){for(;!g.done;m++,g=c.next())null!==(g=p(o,g.value,s))&&(u=i(g,u,m),null===f?l=g:f.sibling=g,f=g);return l}for(y=r(o,y);!g.done;m++,g=c.next())null!==(g=h(y,o,m,g.value,s))&&(e&&null!==g.alternate&&y.delete(null===g.key?m:g.key),u=i(g,u,m),null===f?l=g:f.sibling=g,f=g);return e&&y.forEach((function(e){return t(o,e)})),l}return function(e,r,i,c){var s="object"==typeof i&&null!==i&&i.type===x&&null===i.key;s&&(i=i.props.children);var l="object"==typeof i&&null!==i;if(l)switch(i.$$typeof){case E:e:{for(l=i.key,s=r;null!==s;){if(s.key===l){switch(s.tag){case 7:if(i.type===x){n(e,s.sibling),(r=o(s,i.props.children)).return=e,e=r;break e}break;default:if(s.elementType===i.type){n(e,s.sibling),(r=o(s,i.props)).ref=Oi(e,s,i),r.return=e,e=r;break e}}n(e,s);break}t(e,s),s=s.sibling}i.type===x?((r=Gc(i.props.children,e.mode,c,i.key)).return=e,e=r):((c=zc(i.type,i.key,i.props,null,e.mode,c)).ref=Oi(e,r,i),c.return=e,e=c)}return u(e);case _:e:{for(s=i.key;null!==r;){if(r.key===s){if(4===r.tag&&r.stateNode.containerInfo===i.containerInfo&&r.stateNode.implementation===i.implementation){n(e,r.sibling),(r=o(r,i.children||[])).return=e,e=r;break e}n(e,r);break}t(e,r),r=r.sibling}(r=Yc(i,e.mode,c)).return=e,e=r}return u(e)}if("string"==typeof i||"number"==typeof i)return i=""+i,null!==r&&6===r.tag?(n(e,r.sibling),(r=o(r,i)).return=e,e=r):(n(e,r),(r=Vc(i,e.mode,c)).return=e,e=r),u(e);if(wi(i))return y(e,r,i,c);if(q(i))return m(e,r,i,c);if(l&&Ei(e,i),void 0===i&&!s)switch(e.tag){case 1:case 22:case 0:case 11:case 15:throw Error(a(152,Y(e.type)||"Component"))}return n(e,r)}}var xi=_i(!0),Si=_i(!1),ji={},Pi=ao(ji),ki=ao(ji),Ii=ao(ji);function Ti(e){if(e===ji)throw Error(a(174));return e}function Ri(e,t){switch(co(Ii,t),co(ki,e),co(Pi,ji),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:he(null,"");break;default:t=he(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}uo(Pi),co(Pi,t)}function Ci(){uo(Pi),uo(ki),uo(Ii)}function Ai(e){Ti(Ii.current);var t=Ti(Pi.current),n=he(t,e.type);t!==n&&(co(ki,e),co(Pi,n))}function Ni(e){ki.current===e&&(uo(Pi),uo(ki))}var Li=ao(0);function Di(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||"$!"===n.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!=(64&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var Mi=null,Fi=null,Ui=!1;function Bi(e,t){var n=Bc(5,null,null,0);n.elementType="DELETED",n.type="DELETED",n.stateNode=t,n.return=e,n.flags=8,null!==e.lastEffect?(e.lastEffect.nextEffect=n,e.lastEffect=n):e.firstEffect=e.lastEffect=n}function Hi(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,!0);case 13:default:return!1}}function qi(e){if(Ui){var t=Fi;if(t){var n=t;if(!Hi(e,t)){if(!(t=Wr(n.nextSibling))||!Hi(e,t))return e.flags=-1025&e.flags|2,Ui=!1,void(Mi=e);Bi(Mi,n)}Mi=e,Fi=Wr(t.firstChild)}else e.flags=-1025&e.flags|2,Ui=!1,Mi=e}}function zi(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;Mi=e}function Gi(e){if(e!==Mi)return!1;if(!Ui)return zi(e),Ui=!0,!1;var t=e.type;if(5!==e.tag||"head"!==t&&"body"!==t&&!Hr(t,e.memoizedProps))for(t=Fi;t;)Bi(e,t),t=Wr(t.nextSibling);if(zi(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(a(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if("/$"===n){if(0===t){Fi=Wr(e.nextSibling);break e}t--}else"$"!==n&&"$!"!==n&&"$?"!==n||t++}e=e.nextSibling}Fi=null}}else Fi=Mi?Wr(e.stateNode.nextSibling):null;return!0}function Wi(){Fi=Mi=null,Ui=!1}var Vi=[];function Yi(){for(var e=0;e<Vi.length;e++)Vi[e]._workInProgressVersionPrimary=null;Vi.length=0}var Zi=O.ReactCurrentDispatcher,$i=O.ReactCurrentBatchConfig,Ki=0,Qi=null,Xi=null,Ji=null,ea=!1,ta=!1;function na(){throw Error(a(321))}function ra(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!ur(e[n],t[n]))return!1;return!0}function oa(e,t,n,r,o,i){if(Ki=i,Qi=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,Zi.current=null===e||null===e.memoizedState?Ta:Ra,e=n(r,o),ta){i=0;do{if(ta=!1,!(25>i))throw Error(a(301));i+=1,Ji=Xi=null,t.updateQueue=null,Zi.current=Ca,e=n(r,o)}while(ta)}if(Zi.current=Ia,t=null!==Xi&&null!==Xi.next,Ki=0,Ji=Xi=Qi=null,ea=!1,t)throw Error(a(300));return e}function ia(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===Ji?Qi.memoizedState=Ji=e:Ji=Ji.next=e,Ji}function aa(){if(null===Xi){var e=Qi.alternate;e=null!==e?e.memoizedState:null}else e=Xi.next;var t=null===Ji?Qi.memoizedState:Ji.next;if(null!==t)Ji=t,Xi=e;else{if(null===e)throw Error(a(310));e={memoizedState:(Xi=e).memoizedState,baseState:Xi.baseState,baseQueue:Xi.baseQueue,queue:Xi.queue,next:null},null===Ji?Qi.memoizedState=Ji=e:Ji=Ji.next=e}return Ji}function ua(e,t){return"function"==typeof t?t(e):t}function ca(e){var t=aa(),n=t.queue;if(null===n)throw Error(a(311));n.lastRenderedReducer=e;var r=Xi,o=r.baseQueue,i=n.pending;if(null!==i){if(null!==o){var u=o.next;o.next=i.next,i.next=u}r.baseQueue=o=i,n.pending=null}if(null!==o){o=o.next,r=r.baseState;var c=u=i=null,s=o;do{var l=s.lane;if((Ki&l)===l)null!==c&&(c=c.next={lane:0,action:s.action,eagerReducer:s.eagerReducer,eagerState:s.eagerState,next:null}),r=s.eagerReducer===e?s.eagerState:e(r,s.action);else{var f={lane:l,action:s.action,eagerReducer:s.eagerReducer,eagerState:s.eagerState,next:null};null===c?(u=c=f,i=r):c=c.next=f,Qi.lanes|=l,Mu|=l}s=s.next}while(null!==s&&s!==o);null===c?i=r:c.next=u,ur(r,t.memoizedState)||(Na=!0),t.memoizedState=r,t.baseState=i,t.baseQueue=c,n.lastRenderedState=r}return[t.memoizedState,n.dispatch]}function sa(e){var t=aa(),n=t.queue;if(null===n)throw Error(a(311));n.lastRenderedReducer=e;var r=n.dispatch,o=n.pending,i=t.memoizedState;if(null!==o){n.pending=null;var u=o=o.next;do{i=e(i,u.action),u=u.next}while(u!==o);ur(i,t.memoizedState)||(Na=!0),t.memoizedState=i,null===t.baseQueue&&(t.baseState=i),n.lastRenderedState=i}return[i,r]}function la(e,t,n){var r=t._getVersion;r=r(t._source);var o=t._workInProgressVersionPrimary;if(null!==o?e=o===r:(e=e.mutableReadLanes,(e=(Ki&e)===e)&&(t._workInProgressVersionPrimary=r,Vi.push(t))),e)return n(t._source);throw Vi.push(t),Error(a(350))}function fa(e,t,n,r){var o=Iu;if(null===o)throw Error(a(349));var i=t._getVersion,u=i(t._source),c=Zi.current,s=c.useState((function(){return la(o,t,n)})),l=s[1],f=s[0];s=Ji;var p=e.memoizedState,d=p.refs,h=d.getSnapshot,y=p.source;p=p.subscribe;var m=Qi;return e.memoizedState={refs:d,source:t,subscribe:r},c.useEffect((function(){d.getSnapshot=n,d.setSnapshot=l;var e=i(t._source);if(!ur(u,e)){e=n(t._source),ur(f,e)||(l(e),e=sc(m),o.mutableReadLanes|=e&o.pendingLanes),e=o.mutableReadLanes,o.entangledLanes|=e;for(var r=o.entanglements,a=e;0<a;){var c=31-Gt(a),s=1<<c;r[c]|=e,a&=~s}}}),[n,t,r]),c.useEffect((function(){return r(t._source,(function(){var e=d.getSnapshot,n=d.setSnapshot;try{n(e(t._source));var r=sc(m);o.mutableReadLanes|=r&o.pendingLanes}catch(e){n((function(){throw e}))}}))}),[t,r]),ur(h,n)&&ur(y,t)&&ur(p,r)||((e={pending:null,dispatch:null,lastRenderedReducer:ua,lastRenderedState:f}).dispatch=l=ka.bind(null,Qi,e),s.queue=e,s.baseQueue=null,f=la(o,t,n),s.memoizedState=s.baseState=f),f}function pa(e,t,n){return fa(aa(),e,t,n)}function da(e){var t=ia();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e=(e=t.queue={pending:null,dispatch:null,lastRenderedReducer:ua,lastRenderedState:e}).dispatch=ka.bind(null,Qi,e),[t.memoizedState,e]}function ha(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},null===(t=Qi.updateQueue)?(t={lastEffect:null},Qi.updateQueue=t,t.lastEffect=e.next=e):null===(n=t.lastEffect)?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e),e}function ya(e){return e={current:e},ia().memoizedState=e}function ma(){return aa().memoizedState}function va(e,t,n,r){var o=ia();Qi.flags|=e,o.memoizedState=ha(1|t,n,void 0,void 0===r?null:r)}function ga(e,t,n,r){var o=aa();r=void 0===r?null:r;var i=void 0;if(null!==Xi){var a=Xi.memoizedState;if(i=a.destroy,null!==r&&ra(r,a.deps))return void ha(t,n,i,r)}Qi.flags|=e,o.memoizedState=ha(1|t,n,i,r)}function ba(e,t){return va(516,4,e,t)}function wa(e,t){return ga(516,4,e,t)}function Oa(e,t){return ga(4,2,e,t)}function Ea(e,t){return"function"==typeof t?(e=e(),t(e),function(){t(null)}):null!=t?(e=e(),t.current=e,function(){t.current=null}):void 0}function _a(e,t,n){return n=null!=n?n.concat([e]):null,ga(4,2,Ea.bind(null,t,e),n)}function xa(){}function Sa(e,t){var n=aa();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&ra(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function ja(e,t){var n=aa();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&ra(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function Pa(e,t){var n=qo();Go(98>n?98:n,(function(){e(!0)})),Go(97<n?97:n,(function(){var n=$i.transition;$i.transition=1;try{e(!1),t()}finally{$i.transition=n}}))}function ka(e,t,n){var r=cc(),o=sc(e),i={lane:o,action:n,eagerReducer:null,eagerState:null,next:null},a=t.pending;if(null===a?i.next=i:(i.next=a.next,a.next=i),t.pending=i,a=e.alternate,e===Qi||null!==a&&a===Qi)ta=ea=!0;else{if(0===e.lanes&&(null===a||0===a.lanes)&&null!==(a=t.lastRenderedReducer))try{var u=t.lastRenderedState,c=a(u,n);if(i.eagerReducer=a,i.eagerState=c,ur(c,u))return}catch(e){}lc(e,o,r)}}var Ia={readContext:oi,useCallback:na,useContext:na,useEffect:na,useImperativeHandle:na,useLayoutEffect:na,useMemo:na,useReducer:na,useRef:na,useState:na,useDebugValue:na,useDeferredValue:na,useTransition:na,useMutableSource:na,useOpaqueIdentifier:na,unstable_isNewReconciler:!1},Ta={readContext:oi,useCallback:function(e,t){return ia().memoizedState=[e,void 0===t?null:t],e},useContext:oi,useEffect:ba,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,va(4,2,Ea.bind(null,t,e),n)},useLayoutEffect:function(e,t){return va(4,2,e,t)},useMemo:function(e,t){var n=ia();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=ia();return t=void 0!==n?n(t):t,r.memoizedState=r.baseState=t,e=(e=r.queue={pending:null,dispatch:null,lastRenderedReducer:e,lastRenderedState:t}).dispatch=ka.bind(null,Qi,e),[r.memoizedState,e]},useRef:ya,useState:da,useDebugValue:xa,useDeferredValue:function(e){var t=da(e),n=t[0],r=t[1];return ba((function(){var t=$i.transition;$i.transition=1;try{r(e)}finally{$i.transition=t}}),[e]),n},useTransition:function(){var e=da(!1),t=e[0];return ya(e=Pa.bind(null,e[1])),[e,t]},useMutableSource:function(e,t,n){var r=ia();return r.memoizedState={refs:{getSnapshot:t,setSnapshot:null},source:e,subscribe:n},fa(r,e,t,n)},useOpaqueIdentifier:function(){if(Ui){var e=!1,t=function(e){return{$$typeof:L,toString:e,valueOf:e}}((function(){throw e||(e=!0,n("r:"+(Yr++).toString(36))),Error(a(355))})),n=da(t)[1];return 0==(2&Qi.mode)&&(Qi.flags|=516,ha(5,(function(){n("r:"+(Yr++).toString(36))}),void 0,null)),t}return da(t="r:"+(Yr++).toString(36)),t},unstable_isNewReconciler:!1},Ra={readContext:oi,useCallback:Sa,useContext:oi,useEffect:wa,useImperativeHandle:_a,useLayoutEffect:Oa,useMemo:ja,useReducer:ca,useRef:ma,useState:function(){return ca(ua)},useDebugValue:xa,useDeferredValue:function(e){var t=ca(ua),n=t[0],r=t[1];return wa((function(){var t=$i.transition;$i.transition=1;try{r(e)}finally{$i.transition=t}}),[e]),n},useTransition:function(){var e=ca(ua)[0];return[ma().current,e]},useMutableSource:pa,useOpaqueIdentifier:function(){return ca(ua)[0]},unstable_isNewReconciler:!1},Ca={readContext:oi,useCallback:Sa,useContext:oi,useEffect:wa,useImperativeHandle:_a,useLayoutEffect:Oa,useMemo:ja,useReducer:sa,useRef:ma,useState:function(){return sa(ua)},useDebugValue:xa,useDeferredValue:function(e){var t=sa(ua),n=t[0],r=t[1];return wa((function(){var t=$i.transition;$i.transition=1;try{r(e)}finally{$i.transition=t}}),[e]),n},useTransition:function(){var e=sa(ua)[0];return[ma().current,e]},useMutableSource:pa,useOpaqueIdentifier:function(){return sa(ua)[0]},unstable_isNewReconciler:!1},Aa=O.ReactCurrentOwner,Na=!1;function La(e,t,n,r){t.child=null===e?Si(t,null,n,r):xi(t,e.child,n,r)}function Da(e,t,n,r,o){n=n.render;var i=t.ref;return ri(t,o),r=oa(e,t,n,r,i,o),null===e||Na?(t.flags|=1,La(e,t,r,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~o,nu(e,t,o))}function Ma(e,t,n,r,o,i){if(null===e){var a=n.type;return"function"!=typeof a||Hc(a)||void 0!==a.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=zc(n.type,null,r,t,t.mode,i)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=a,Fa(e,t,a,r,o,i))}return a=e.child,0==(o&i)&&(o=a.memoizedProps,(n=null!==(n=n.compare)?n:sr)(o,r)&&e.ref===t.ref)?nu(e,t,i):(t.flags|=1,(e=qc(a,r)).ref=t.ref,e.return=t,t.child=e)}function Fa(e,t,n,r,o,i){if(null!==e&&sr(e.memoizedProps,r)&&e.ref===t.ref){if(Na=!1,0==(i&o))return t.lanes=e.lanes,nu(e,t,i);0!=(16384&e.flags)&&(Na=!0)}return Ha(e,t,n,r,i)}function Ua(e,t,n){var r=t.pendingProps,o=r.children,i=null!==e?e.memoizedState:null;if("hidden"===r.mode||"unstable-defer-without-hiding"===r.mode)if(0==(4&t.mode))t.memoizedState={baseLanes:0},gc(t,n);else{if(0==(1073741824&n))return e=null!==i?i.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e},gc(t,e),null;t.memoizedState={baseLanes:0},gc(t,null!==i?i.baseLanes:n)}else null!==i?(r=i.baseLanes|n,t.memoizedState=null):r=n,gc(t,r);return La(e,t,o,n),t.child}function Ba(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.flags|=128)}function Ha(e,t,n,r,o){var i=yo(n)?po:lo.current;return i=ho(t,i),ri(t,o),n=oa(e,t,n,r,i,o),null===e||Na?(t.flags|=1,La(e,t,n,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~o,nu(e,t,o))}function qa(e,t,n,r,o){if(yo(n)){var i=!0;bo(t)}else i=!1;if(ri(t,o),null===t.stateNode)null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),vi(t,n,r),bi(t,n,r,o),r=!0;else if(null===e){var a=t.stateNode,u=t.memoizedProps;a.props=u;var c=a.context,s=n.contextType;"object"==typeof s&&null!==s?s=oi(s):s=ho(t,s=yo(n)?po:lo.current);var l=n.getDerivedStateFromProps,f="function"==typeof l||"function"==typeof a.getSnapshotBeforeUpdate;f||"function"!=typeof a.UNSAFE_componentWillReceiveProps&&"function"!=typeof a.componentWillReceiveProps||(u!==r||c!==s)&&gi(t,a,r,s),ii=!1;var p=t.memoizedState;a.state=p,fi(t,r,a,o),c=t.memoizedState,u!==r||p!==c||fo.current||ii?("function"==typeof l&&(hi(t,n,l,r),c=t.memoizedState),(u=ii||mi(t,n,u,r,p,c,s))?(f||"function"!=typeof a.UNSAFE_componentWillMount&&"function"!=typeof a.componentWillMount||("function"==typeof a.componentWillMount&&a.componentWillMount(),"function"==typeof a.UNSAFE_componentWillMount&&a.UNSAFE_componentWillMount()),"function"==typeof a.componentDidMount&&(t.flags|=4)):("function"==typeof a.componentDidMount&&(t.flags|=4),t.memoizedProps=r,t.memoizedState=c),a.props=r,a.state=c,a.context=s,r=u):("function"==typeof a.componentDidMount&&(t.flags|=4),r=!1)}else{a=t.stateNode,ui(e,t),u=t.memoizedProps,s=t.type===t.elementType?u:$o(t.type,u),a.props=s,f=t.pendingProps,p=a.context,"object"==typeof(c=n.contextType)&&null!==c?c=oi(c):c=ho(t,c=yo(n)?po:lo.current);var d=n.getDerivedStateFromProps;(l="function"==typeof d||"function"==typeof a.getSnapshotBeforeUpdate)||"function"!=typeof a.UNSAFE_componentWillReceiveProps&&"function"!=typeof a.componentWillReceiveProps||(u!==f||p!==c)&&gi(t,a,r,c),ii=!1,p=t.memoizedState,a.state=p,fi(t,r,a,o);var h=t.memoizedState;u!==f||p!==h||fo.current||ii?("function"==typeof d&&(hi(t,n,d,r),h=t.memoizedState),(s=ii||mi(t,n,s,r,p,h,c))?(l||"function"!=typeof a.UNSAFE_componentWillUpdate&&"function"!=typeof a.componentWillUpdate||("function"==typeof a.componentWillUpdate&&a.componentWillUpdate(r,h,c),"function"==typeof a.UNSAFE_componentWillUpdate&&a.UNSAFE_componentWillUpdate(r,h,c)),"function"==typeof a.componentDidUpdate&&(t.flags|=4),"function"==typeof a.getSnapshotBeforeUpdate&&(t.flags|=256)):("function"!=typeof a.componentDidUpdate||u===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof a.getSnapshotBeforeUpdate||u===e.memoizedProps&&p===e.memoizedState||(t.flags|=256),t.memoizedProps=r,t.memoizedState=h),a.props=r,a.state=h,a.context=c,r=s):("function"!=typeof a.componentDidUpdate||u===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof a.getSnapshotBeforeUpdate||u===e.memoizedProps&&p===e.memoizedState||(t.flags|=256),r=!1)}return za(e,t,n,r,i,o)}function za(e,t,n,r,o,i){Ba(e,t);var a=0!=(64&t.flags);if(!r&&!a)return o&&wo(t,n,!1),nu(e,t,i);r=t.stateNode,Aa.current=t;var u=a&&"function"!=typeof n.getDerivedStateFromError?null:r.render();return t.flags|=1,null!==e&&a?(t.child=xi(t,e.child,null,i),t.child=xi(t,null,u,i)):La(e,t,u,i),t.memoizedState=r.state,o&&wo(t,n,!0),t.child}function Ga(e){var t=e.stateNode;t.pendingContext?vo(0,t.pendingContext,t.pendingContext!==t.context):t.context&&vo(0,t.context,!1),Ri(e,t.containerInfo)}var Wa,Va,Ya,Za={dehydrated:null,retryLane:0};function $a(e,t,n){var r,o=t.pendingProps,i=Li.current,a=!1;return(r=0!=(64&t.flags))||(r=(null===e||null!==e.memoizedState)&&0!=(2&i)),r?(a=!0,t.flags&=-65):null!==e&&null===e.memoizedState||void 0===o.fallback||!0===o.unstable_avoidThisFallback||(i|=1),co(Li,1&i),null===e?(void 0!==o.fallback&&qi(t),e=o.children,i=o.fallback,a?(e=Ka(t,e,i,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Za,e):"number"==typeof o.unstable_expectedLoadTime?(e=Ka(t,e,i,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Za,t.lanes=33554432,e):((n=Wc({mode:"visible",children:e},t.mode,n,null)).return=t,t.child=n)):(e.memoizedState,a?(o=Xa(e,t,o.children,o.fallback,n),a=t.child,i=e.child.memoizedState,a.memoizedState=null===i?{baseLanes:n}:{baseLanes:i.baseLanes|n},a.childLanes=e.childLanes&~n,t.memoizedState=Za,o):(n=Qa(e,t,o.children,n),t.memoizedState=null,n))}function Ka(e,t,n,r){var o=e.mode,i=e.child;return t={mode:"hidden",children:t},0==(2&o)&&null!==i?(i.childLanes=0,i.pendingProps=t):i=Wc(t,o,0,null),n=Gc(n,o,r,null),i.return=e,n.return=e,i.sibling=n,e.child=i,n}function Qa(e,t,n,r){var o=e.child;return e=o.sibling,n=qc(o,{mode:"visible",children:n}),0==(2&t.mode)&&(n.lanes=r),n.return=t,n.sibling=null,null!==e&&(e.nextEffect=null,e.flags=8,t.firstEffect=t.lastEffect=e),t.child=n}function Xa(e,t,n,r,o){var i=t.mode,a=e.child;e=a.sibling;var u={mode:"hidden",children:n};return 0==(2&i)&&t.child!==a?((n=t.child).childLanes=0,n.pendingProps=u,null!==(a=n.lastEffect)?(t.firstEffect=n.firstEffect,t.lastEffect=a,a.nextEffect=null):t.firstEffect=t.lastEffect=null):n=qc(a,u),null!==e?r=qc(e,r):(r=Gc(r,i,o,null)).flags|=2,r.return=t,n.return=t,n.sibling=r,t.child=n,r}function Ja(e,t){e.lanes|=t;var n=e.alternate;null!==n&&(n.lanes|=t),ni(e.return,t)}function eu(e,t,n,r,o,i){var a=e.memoizedState;null===a?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:o,lastEffect:i}:(a.isBackwards=t,a.rendering=null,a.renderingStartTime=0,a.last=r,a.tail=n,a.tailMode=o,a.lastEffect=i)}function tu(e,t,n){var r=t.pendingProps,o=r.revealOrder,i=r.tail;if(La(e,t,r.children,n),0!=(2&(r=Li.current)))r=1&r|2,t.flags|=64;else{if(null!==e&&0!=(64&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&Ja(e,n);else if(19===e.tag)Ja(e,n);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(co(Li,r),0==(2&t.mode))t.memoizedState=null;else switch(o){case"forwards":for(n=t.child,o=null;null!==n;)null!==(e=n.alternate)&&null===Di(e)&&(o=n),n=n.sibling;null===(n=o)?(o=t.child,t.child=null):(o=n.sibling,n.sibling=null),eu(t,!1,o,n,i,t.lastEffect);break;case"backwards":for(n=null,o=t.child,t.child=null;null!==o;){if(null!==(e=o.alternate)&&null===Di(e)){t.child=o;break}e=o.sibling,o.sibling=n,n=o,o=e}eu(t,!0,n,null,i,t.lastEffect);break;case"together":eu(t,!1,null,null,void 0,t.lastEffect);break;default:t.memoizedState=null}return t.child}function nu(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),Mu|=t.lanes,0!=(n&t.childLanes)){if(null!==e&&t.child!==e.child)throw Error(a(153));if(null!==t.child){for(n=qc(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=qc(e,e.pendingProps)).return=t;n.sibling=null}return t.child}return null}function ru(e,t){if(!Ui)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function ou(e,t,n){var r=t.pendingProps;switch(t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return null;case 1:return yo(t.type)&&mo(),null;case 3:return Ci(),uo(fo),uo(lo),Yi(),(r=t.stateNode).pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),null!==e&&null!==e.child||(Gi(t)?t.flags|=4:r.hydrate||(t.flags|=256)),null;case 5:Ni(t);var i=Ti(Ii.current);if(n=t.type,null!==e&&null!=t.stateNode)Va(e,t,n,r),e.ref!==t.ref&&(t.flags|=128);else{if(!r){if(null===t.stateNode)throw Error(a(166));return null}if(e=Ti(Pi.current),Gi(t)){r=t.stateNode,n=t.type;var u=t.memoizedProps;switch(r[$r]=t,r[Kr]=u,n){case"dialog":Pr("cancel",r),Pr("close",r);break;case"iframe":case"object":case"embed":Pr("load",r);break;case"video":case"audio":for(e=0;e<_r.length;e++)Pr(_r[e],r);break;case"source":Pr("error",r);break;case"img":case"image":case"link":Pr("error",r),Pr("load",r);break;case"details":Pr("toggle",r);break;case"input":ee(r,u),Pr("invalid",r);break;case"select":r._wrapperState={wasMultiple:!!u.multiple},Pr("invalid",r);break;case"textarea":ce(r,u),Pr("invalid",r)}for(var s in xe(n,u),e=null,u)u.hasOwnProperty(s)&&(i=u[s],"children"===s?"string"==typeof i?r.textContent!==i&&(e=["children",i]):"number"==typeof i&&r.textContent!==""+i&&(e=["children",""+i]):c.hasOwnProperty(s)&&null!=i&&"onScroll"===s&&Pr("scroll",r));switch(n){case"input":K(r),re(r,u,!0);break;case"textarea":K(r),le(r);break;case"select":case"option":break;default:"function"==typeof u.onClick&&(r.onclick=Mr)}r=e,t.updateQueue=r,null!==r&&(t.flags|=4)}else{switch(s=9===i.nodeType?i:i.ownerDocument,e===fe&&(e=de(n)),e===fe?"script"===n?((e=s.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof r.is?e=s.createElement(n,{is:r.is}):(e=s.createElement(n),"select"===n&&(s=e,r.multiple?s.multiple=!0:r.size&&(s.size=r.size))):e=s.createElementNS(e,n),e[$r]=t,e[Kr]=r,Wa(e,t),t.stateNode=e,s=Se(n,r),n){case"dialog":Pr("cancel",e),Pr("close",e),i=r;break;case"iframe":case"object":case"embed":Pr("load",e),i=r;break;case"video":case"audio":for(i=0;i<_r.length;i++)Pr(_r[i],e);i=r;break;case"source":Pr("error",e),i=r;break;case"img":case"image":case"link":Pr("error",e),Pr("load",e),i=r;break;case"details":Pr("toggle",e),i=r;break;case"input":ee(e,r),i=J(e,r),Pr("invalid",e);break;case"option":i=ie(e,r);break;case"select":e._wrapperState={wasMultiple:!!r.multiple},i=o({},r,{value:void 0}),Pr("invalid",e);break;case"textarea":ce(e,r),i=ue(e,r),Pr("invalid",e);break;default:i=r}xe(n,i);var l=i;for(u in l)if(l.hasOwnProperty(u)){var f=l[u];"style"===u?Ee(e,f):"dangerouslySetInnerHTML"===u?null!=(f=f?f.__html:void 0)&&ve(e,f):"children"===u?"string"==typeof f?("textarea"!==n||""!==f)&&ge(e,f):"number"==typeof f&&ge(e,""+f):"suppressContentEditableWarning"!==u&&"suppressHydrationWarning"!==u&&"autoFocus"!==u&&(c.hasOwnProperty(u)?null!=f&&"onScroll"===u&&Pr("scroll",e):null!=f&&w(e,u,f,s))}switch(n){case"input":K(e),re(e,r,!1);break;case"textarea":K(e),le(e);break;case"option":null!=r.value&&e.setAttribute("value",""+Z(r.value));break;case"select":e.multiple=!!r.multiple,null!=(u=r.value)?ae(e,!!r.multiple,u,!1):null!=r.defaultValue&&ae(e,!!r.multiple,r.defaultValue,!0);break;default:"function"==typeof i.onClick&&(e.onclick=Mr)}Br(n,r)&&(t.flags|=4)}null!==t.ref&&(t.flags|=128)}return null;case 6:if(e&&null!=t.stateNode)Ya(0,t,e.memoizedProps,r);else{if("string"!=typeof r&&null===t.stateNode)throw Error(a(166));n=Ti(Ii.current),Ti(Pi.current),Gi(t)?(r=t.stateNode,n=t.memoizedProps,r[$r]=t,r.nodeValue!==n&&(t.flags|=4)):((r=(9===n.nodeType?n:n.ownerDocument).createTextNode(r))[$r]=t,t.stateNode=r)}return null;case 13:return uo(Li),r=t.memoizedState,0!=(64&t.flags)?(t.lanes=n,t):(r=null!==r,n=!1,null===e?void 0!==t.memoizedProps.fallback&&Gi(t):n=null!==e.memoizedState,r&&!n&&0!=(2&t.mode)&&(null===e&&!0!==t.memoizedProps.unstable_avoidThisFallback||0!=(1&Li.current)?0===Nu&&(Nu=3):(0!==Nu&&3!==Nu||(Nu=4),null===Iu||0==(134217727&Mu)&&0==(134217727&Fu)||hc(Iu,Ru))),(r||n)&&(t.flags|=4),null);case 4:return Ci(),null===e&&Ir(t.stateNode.containerInfo),null;case 10:return ti(t),null;case 17:return yo(t.type)&&mo(),null;case 19:if(uo(Li),null===(r=t.memoizedState))return null;if(u=0!=(64&t.flags),null===(s=r.rendering))if(u)ru(r,!1);else{if(0!==Nu||null!==e&&0!=(64&e.flags))for(e=t.child;null!==e;){if(null!==(s=Di(e))){for(t.flags|=64,ru(r,!1),null!==(u=s.updateQueue)&&(t.updateQueue=u,t.flags|=4),null===r.lastEffect&&(t.firstEffect=null),t.lastEffect=r.lastEffect,r=n,n=t.child;null!==n;)e=r,(u=n).flags&=2,u.nextEffect=null,u.firstEffect=null,u.lastEffect=null,null===(s=u.alternate)?(u.childLanes=0,u.lanes=e,u.child=null,u.memoizedProps=null,u.memoizedState=null,u.updateQueue=null,u.dependencies=null,u.stateNode=null):(u.childLanes=s.childLanes,u.lanes=s.lanes,u.child=s.child,u.memoizedProps=s.memoizedProps,u.memoizedState=s.memoizedState,u.updateQueue=s.updateQueue,u.type=s.type,e=s.dependencies,u.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return co(Li,1&Li.current|2),t.child}e=e.sibling}null!==r.tail&&Ho()>qu&&(t.flags|=64,u=!0,ru(r,!1),t.lanes=33554432)}else{if(!u)if(null!==(e=Di(s))){if(t.flags|=64,u=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.flags|=4),ru(r,!0),null===r.tail&&"hidden"===r.tailMode&&!s.alternate&&!Ui)return null!==(t=t.lastEffect=r.lastEffect)&&(t.nextEffect=null),null}else 2*Ho()-r.renderingStartTime>qu&&1073741824!==n&&(t.flags|=64,u=!0,ru(r,!1),t.lanes=33554432);r.isBackwards?(s.sibling=t.child,t.child=s):(null!==(n=r.last)?n.sibling=s:t.child=s,r.last=s)}return null!==r.tail?(n=r.tail,r.rendering=n,r.tail=n.sibling,r.lastEffect=t.lastEffect,r.renderingStartTime=Ho(),n.sibling=null,t=Li.current,co(Li,u?1&t|2:1&t),n):null;case 23:case 24:return bc(),null!==e&&null!==e.memoizedState!=(null!==t.memoizedState)&&"unstable-defer-without-hiding"!==r.mode&&(t.flags|=4),null}throw Error(a(156,t.tag))}function iu(e){switch(e.tag){case 1:yo(e.type)&&mo();var t=e.flags;return 4096&t?(e.flags=-4097&t|64,e):null;case 3:if(Ci(),uo(fo),uo(lo),Yi(),0!=(64&(t=e.flags)))throw Error(a(285));return e.flags=-4097&t|64,e;case 5:return Ni(e),null;case 13:return uo(Li),4096&(t=e.flags)?(e.flags=-4097&t|64,e):null;case 19:return uo(Li),null;case 4:return Ci(),null;case 10:return ti(e),null;case 23:case 24:return bc(),null;default:return null}}function au(e,t){try{var n="",r=t;do{n+=V(r),r=r.return}while(r);var o=n}catch(e){o="\nError generating stack: "+e.message+"\n"+e.stack}return{value:e,source:t,stack:o}}Wa=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},Va=function(e,t,n,r){var i=e.memoizedProps;if(i!==r){e=t.stateNode,Ti(Pi.current);var a,u=null;switch(n){case"input":i=J(e,i),r=J(e,r),u=[];break;case"option":i=ie(e,i),r=ie(e,r),u=[];break;case"select":i=o({},i,{value:void 0}),r=o({},r,{value:void 0}),u=[];break;case"textarea":i=ue(e,i),r=ue(e,r),u=[];break;default:"function"!=typeof i.onClick&&"function"==typeof r.onClick&&(e.onclick=Mr)}for(f in xe(n,r),n=null,i)if(!r.hasOwnProperty(f)&&i.hasOwnProperty(f)&&null!=i[f])if("style"===f){var s=i[f];for(a in s)s.hasOwnProperty(a)&&(n||(n={}),n[a]="")}else"dangerouslySetInnerHTML"!==f&&"children"!==f&&"suppressContentEditableWarning"!==f&&"suppressHydrationWarning"!==f&&"autoFocus"!==f&&(c.hasOwnProperty(f)?u||(u=[]):(u=u||[]).push(f,null));for(f in r){var l=r[f];if(s=null!=i?i[f]:void 0,r.hasOwnProperty(f)&&l!==s&&(null!=l||null!=s))if("style"===f)if(s){for(a in s)!s.hasOwnProperty(a)||l&&l.hasOwnProperty(a)||(n||(n={}),n[a]="");for(a in l)l.hasOwnProperty(a)&&s[a]!==l[a]&&(n||(n={}),n[a]=l[a])}else n||(u||(u=[]),u.push(f,n)),n=l;else"dangerouslySetInnerHTML"===f?(l=l?l.__html:void 0,s=s?s.__html:void 0,null!=l&&s!==l&&(u=u||[]).push(f,l)):"children"===f?"string"!=typeof l&&"number"!=typeof l||(u=u||[]).push(f,""+l):"suppressContentEditableWarning"!==f&&"suppressHydrationWarning"!==f&&(c.hasOwnProperty(f)?(null!=l&&"onScroll"===f&&Pr("scroll",e),u||s===l||(u=[])):"object"==typeof l&&null!==l&&l.$$typeof===L?l.toString():(u=u||[]).push(f,l))}n&&(u=u||[]).push("style",n);var f=u;(t.updateQueue=f)&&(t.flags|=4)}},Ya=function(e,t,n,r){n!==r&&(t.flags|=4)};var uu="function"==typeof WeakMap?WeakMap:Map;function cu(e,t,n){(n=ci(-1,n)).tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){Vu||(Vu=!0,Yu=r)},n}function su(e,t,n){(n=ci(-1,n)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var o=t.value;n.payload=function(){return r(o)}}var i=e.stateNode;return null!==i&&"function"==typeof i.componentDidCatch&&(n.callback=function(){"function"!=typeof r&&(null===Zu?Zu=new Set([this]):Zu.add(this));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:""})}),n}var lu="function"==typeof WeakSet?WeakSet:Set;function fu(e){var t=e.ref;if(null!==t)if("function"==typeof t)try{t(null)}catch(t){Dc(e,t)}else t.current=null}function pu(e,t){switch(t.tag){case 0:case 11:case 15:case 22:return;case 1:if(256&t.flags&&null!==e){var n=e.memoizedProps,r=e.memoizedState;t=(e=t.stateNode).getSnapshotBeforeUpdate(t.elementType===t.type?n:$o(t.type,n),r),e.__reactInternalSnapshotBeforeUpdate=t}return;case 3:return void(256&t.flags&&Gr(t.stateNode.containerInfo));case 5:case 6:case 4:case 17:return}throw Error(a(163))}function du(e,t,n){switch(n.tag){case 0:case 11:case 15:case 22:if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{if(3==(3&e.tag)){var r=e.create;e.destroy=r()}e=e.next}while(e!==t)}if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{var o=e;r=o.next,0!=(4&(o=o.tag))&&0!=(1&o)&&(Ac(n,e),Cc(n,e)),e=r}while(e!==t)}return;case 1:return e=n.stateNode,4&n.flags&&(null===t?e.componentDidMount():(r=n.elementType===n.type?t.memoizedProps:$o(n.type,t.memoizedProps),e.componentDidUpdate(r,t.memoizedState,e.__reactInternalSnapshotBeforeUpdate))),void(null!==(t=n.updateQueue)&&pi(n,t,e));case 3:if(null!==(t=n.updateQueue)){if(e=null,null!==n.child)switch(n.child.tag){case 5:e=n.child.stateNode;break;case 1:e=n.child.stateNode}pi(n,t,e)}return;case 5:return e=n.stateNode,void(null===t&&4&n.flags&&Br(n.type,n.memoizedProps)&&e.focus());case 6:case 4:case 12:return;case 13:return void(null===n.memoizedState&&(n=n.alternate,null!==n&&(n=n.memoizedState,null!==n&&(n=n.dehydrated,null!==n&&Et(n)))));case 19:case 17:case 20:case 21:case 23:case 24:return}throw Error(a(163))}function hu(e,t){for(var n=e;;){if(5===n.tag){var r=n.stateNode;if(t)"function"==typeof(r=r.style).setProperty?r.setProperty("display","none","important"):r.display="none";else{r=n.stateNode;var o=n.memoizedProps.style;o=null!=o&&o.hasOwnProperty("display")?o.display:null,r.style.display=Oe("display",o)}}else if(6===n.tag)n.stateNode.nodeValue=t?"":n.memoizedProps;else if((23!==n.tag&&24!==n.tag||null===n.memoizedState||n===e)&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===e)break;for(;null===n.sibling;){if(null===n.return||n.return===e)return;n=n.return}n.sibling.return=n.return,n=n.sibling}}function yu(e,t){if(Eo&&"function"==typeof Eo.onCommitFiberUnmount)try{Eo.onCommitFiberUnmount(Oo,t)}catch(e){}switch(t.tag){case 0:case 11:case 14:case 15:case 22:if(null!==(e=t.updateQueue)&&null!==(e=e.lastEffect)){var n=e=e.next;do{var r=n,o=r.destroy;if(r=r.tag,void 0!==o)if(0!=(4&r))Ac(t,n);else{r=t;try{o()}catch(e){Dc(r,e)}}n=n.next}while(n!==e)}break;case 1:if(fu(t),"function"==typeof(e=t.stateNode).componentWillUnmount)try{e.props=t.memoizedProps,e.state=t.memoizedState,e.componentWillUnmount()}catch(e){Dc(t,e)}break;case 5:fu(t);break;case 4:Ou(e,t)}}function mu(e){e.alternate=null,e.child=null,e.dependencies=null,e.firstEffect=null,e.lastEffect=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.return=null,e.updateQueue=null}function vu(e){return 5===e.tag||3===e.tag||4===e.tag}function gu(e){e:{for(var t=e.return;null!==t;){if(vu(t))break e;t=t.return}throw Error(a(160))}var n=t;switch(t=n.stateNode,n.tag){case 5:var r=!1;break;case 3:case 4:t=t.containerInfo,r=!0;break;default:throw Error(a(161))}16&n.flags&&(ge(t,""),n.flags&=-17);e:t:for(n=e;;){for(;null===n.sibling;){if(null===n.return||vu(n.return)){n=null;break e}n=n.return}for(n.sibling.return=n.return,n=n.sibling;5!==n.tag&&6!==n.tag&&18!==n.tag;){if(2&n.flags)continue t;if(null===n.child||4===n.tag)continue t;n.child.return=n,n=n.child}if(!(2&n.flags)){n=n.stateNode;break e}}r?bu(e,n,t):wu(e,n,t)}function bu(e,t,n){var r=e.tag,o=5===r||6===r;if(o)e=o?e.stateNode:e.stateNode.instance,t?8===n.nodeType?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(8===n.nodeType?(t=n.parentNode).insertBefore(e,n):(t=n).appendChild(e),null!=(n=n._reactRootContainer)||null!==t.onclick||(t.onclick=Mr));else if(4!==r&&null!==(e=e.child))for(bu(e,t,n),e=e.sibling;null!==e;)bu(e,t,n),e=e.sibling}function wu(e,t,n){var r=e.tag,o=5===r||6===r;if(o)e=o?e.stateNode:e.stateNode.instance,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==r&&null!==(e=e.child))for(wu(e,t,n),e=e.sibling;null!==e;)wu(e,t,n),e=e.sibling}function Ou(e,t){for(var n,r,o=t,i=!1;;){if(!i){i=o.return;e:for(;;){if(null===i)throw Error(a(160));switch(n=i.stateNode,i.tag){case 5:r=!1;break e;case 3:case 4:n=n.containerInfo,r=!0;break e}i=i.return}i=!0}if(5===o.tag||6===o.tag){e:for(var u=e,c=o,s=c;;)if(yu(u,s),null!==s.child&&4!==s.tag)s.child.return=s,s=s.child;else{if(s===c)break e;for(;null===s.sibling;){if(null===s.return||s.return===c)break e;s=s.return}s.sibling.return=s.return,s=s.sibling}r?(u=n,c=o.stateNode,8===u.nodeType?u.parentNode.removeChild(c):u.removeChild(c)):n.removeChild(o.stateNode)}else if(4===o.tag){if(null!==o.child){n=o.stateNode.containerInfo,r=!0,o.child.return=o,o=o.child;continue}}else if(yu(e,o),null!==o.child){o.child.return=o,o=o.child;continue}if(o===t)break;for(;null===o.sibling;){if(null===o.return||o.return===t)return;4===(o=o.return).tag&&(i=!1)}o.sibling.return=o.return,o=o.sibling}}function Eu(e,t){switch(t.tag){case 0:case 11:case 14:case 15:case 22:var n=t.updateQueue;if(null!==(n=null!==n?n.lastEffect:null)){var r=n=n.next;do{3==(3&r.tag)&&(e=r.destroy,r.destroy=void 0,void 0!==e&&e()),r=r.next}while(r!==n)}return;case 1:return;case 5:if(null!=(n=t.stateNode)){r=t.memoizedProps;var o=null!==e?e.memoizedProps:r;e=t.type;var i=t.updateQueue;if(t.updateQueue=null,null!==i){for(n[Kr]=r,"input"===e&&"radio"===r.type&&null!=r.name&&te(n,r),Se(e,o),t=Se(e,r),o=0;o<i.length;o+=2){var u=i[o],c=i[o+1];"style"===u?Ee(n,c):"dangerouslySetInnerHTML"===u?ve(n,c):"children"===u?ge(n,c):w(n,u,c,t)}switch(e){case"input":ne(n,r);break;case"textarea":se(n,r);break;case"select":e=n._wrapperState.wasMultiple,n._wrapperState.wasMultiple=!!r.multiple,null!=(i=r.value)?ae(n,!!r.multiple,i,!1):e!==!!r.multiple&&(null!=r.defaultValue?ae(n,!!r.multiple,r.defaultValue,!0):ae(n,!!r.multiple,r.multiple?[]:"",!1))}}}return;case 6:if(null===t.stateNode)throw Error(a(162));return void(t.stateNode.nodeValue=t.memoizedProps);case 3:return void((n=t.stateNode).hydrate&&(n.hydrate=!1,Et(n.containerInfo)));case 12:return;case 13:return null!==t.memoizedState&&(Hu=Ho(),hu(t.child,!0)),void _u(t);case 19:return void _u(t);case 17:return;case 23:case 24:return void hu(t,null!==t.memoizedState)}throw Error(a(163))}function _u(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new lu),t.forEach((function(t){var r=Fc.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}}function xu(e,t){return null!==e&&(null===(e=e.memoizedState)||null!==e.dehydrated)&&(null!==(t=t.memoizedState)&&null===t.dehydrated)}var Su=Math.ceil,ju=O.ReactCurrentDispatcher,Pu=O.ReactCurrentOwner,ku=0,Iu=null,Tu=null,Ru=0,Cu=0,Au=ao(0),Nu=0,Lu=null,Du=0,Mu=0,Fu=0,Uu=0,Bu=null,Hu=0,qu=1/0;function zu(){qu=Ho()+500}var Gu,Wu=null,Vu=!1,Yu=null,Zu=null,$u=!1,Ku=null,Qu=90,Xu=[],Ju=[],ec=null,tc=0,nc=null,rc=-1,oc=0,ic=0,ac=null,uc=!1;function cc(){return 0!=(48&ku)?Ho():-1!==rc?rc:rc=Ho()}function sc(e){if(0==(2&(e=e.mode)))return 1;if(0==(4&e))return 99===qo()?1:2;if(0===oc&&(oc=Du),0!==Zo.transition){0!==ic&&(ic=null!==Bu?Bu.pendingLanes:0),e=oc;var t=4186112&~ic;return 0===(t&=-t)&&(0===(t=(e=4186112&~e)&-e)&&(t=8192)),t}return e=qo(),0!=(4&ku)&&98===e?e=Bt(12,oc):e=Bt(e=function(e){switch(e){case 99:return 15;case 98:return 10;case 97:case 96:return 8;case 95:return 2;default:return 0}}(e),oc),e}function lc(e,t,n){if(50<tc)throw tc=0,nc=null,Error(a(185));if(null===(e=fc(e,t)))return null;zt(e,t,n),e===Iu&&(Fu|=t,4===Nu&&hc(e,Ru));var r=qo();1===t?0!=(8&ku)&&0==(48&ku)?yc(e):(pc(e,n),0===ku&&(zu(),Vo())):(0==(4&ku)||98!==r&&99!==r||(null===ec?ec=new Set([e]):ec.add(e)),pc(e,n)),Bu=e}function fc(e,t){e.lanes|=t;var n=e.alternate;for(null!==n&&(n.lanes|=t),n=e,e=e.return;null!==e;)e.childLanes|=t,null!==(n=e.alternate)&&(n.childLanes|=t),n=e,e=e.return;return 3===n.tag?n.stateNode:null}function pc(e,t){for(var n=e.callbackNode,r=e.suspendedLanes,o=e.pingedLanes,i=e.expirationTimes,u=e.pendingLanes;0<u;){var c=31-Gt(u),s=1<<c,l=i[c];if(-1===l){if(0==(s&r)||0!=(s&o)){l=t,Mt(s);var f=Dt;i[c]=10<=f?l+250:6<=f?l+5e3:-1}}else l<=t&&(e.expiredLanes|=s);u&=~s}if(r=Ft(e,e===Iu?Ru:0),t=Dt,0===r)null!==n&&(n!==Lo&&So(n),e.callbackNode=null,e.callbackPriority=0);else{if(null!==n){if(e.callbackPriority===t)return;n!==Lo&&So(n)}15===t?(n=yc.bind(null,e),null===Mo?(Mo=[n],Fo=xo(To,Yo)):Mo.push(n),n=Lo):14===t?n=Wo(99,yc.bind(null,e)):n=Wo(n=function(e){switch(e){case 15:case 14:return 99;case 13:case 12:case 11:case 10:return 98;case 9:case 8:case 7:case 6:case 4:case 5:return 97;case 3:case 2:case 1:return 95;case 0:return 90;default:throw Error(a(358,e))}}(t),dc.bind(null,e)),e.callbackPriority=t,e.callbackNode=n}}function dc(e){if(rc=-1,ic=oc=0,0!=(48&ku))throw Error(a(327));var t=e.callbackNode;if(Rc()&&e.callbackNode!==t)return null;var n=Ft(e,e===Iu?Ru:0);if(0===n)return null;var r=n,o=ku;ku|=16;var i=Ec();for(Iu===e&&Ru===r||(zu(),wc(e,r));;)try{Sc();break}catch(t){Oc(e,t)}if(ei(),ju.current=i,ku=o,null!==Tu?r=0:(Iu=null,Ru=0,r=Nu),0!=(Du&Fu))wc(e,0);else if(0!==r){if(2===r&&(ku|=64,e.hydrate&&(e.hydrate=!1,Gr(e.containerInfo)),0!==(n=Ut(e))&&(r=_c(e,n))),1===r)throw t=Lu,wc(e,0),hc(e,n),pc(e,Ho()),t;switch(e.finishedWork=e.current.alternate,e.finishedLanes=n,r){case 0:case 1:throw Error(a(345));case 2:kc(e);break;case 3:if(hc(e,n),(62914560&n)===n&&10<(r=Hu+500-Ho())){if(0!==Ft(e,0))break;if(((o=e.suspendedLanes)&n)!==n){cc(),e.pingedLanes|=e.suspendedLanes&o;break}e.timeoutHandle=qr(kc.bind(null,e),r);break}kc(e);break;case 4:if(hc(e,n),(4186112&n)===n)break;for(r=e.eventTimes,o=-1;0<n;){var u=31-Gt(n);i=1<<u,(u=r[u])>o&&(o=u),n&=~i}if(n=o,10<(n=(120>(n=Ho()-n)?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*Su(n/1960))-n)){e.timeoutHandle=qr(kc.bind(null,e),n);break}kc(e);break;case 5:kc(e);break;default:throw Error(a(329))}}return pc(e,Ho()),e.callbackNode===t?dc.bind(null,e):null}function hc(e,t){for(t&=~Uu,t&=~Fu,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-Gt(t),r=1<<n;e[n]=-1,t&=~r}}function yc(e){if(0!=(48&ku))throw Error(a(327));if(Rc(),e===Iu&&0!=(e.expiredLanes&Ru)){var t=Ru,n=_c(e,t);0!=(Du&Fu)&&(n=_c(e,t=Ft(e,t)))}else n=_c(e,t=Ft(e,0));if(0!==e.tag&&2===n&&(ku|=64,e.hydrate&&(e.hydrate=!1,Gr(e.containerInfo)),0!==(t=Ut(e))&&(n=_c(e,t))),1===n)throw n=Lu,wc(e,0),hc(e,t),pc(e,Ho()),n;return e.finishedWork=e.current.alternate,e.finishedLanes=t,kc(e),pc(e,Ho()),null}function mc(e,t){var n=ku;ku|=1;try{return e(t)}finally{0===(ku=n)&&(zu(),Vo())}}function vc(e,t){var n=ku;ku&=-2,ku|=8;try{return e(t)}finally{0===(ku=n)&&(zu(),Vo())}}function gc(e,t){co(Au,Cu),Cu|=t,Du|=t}function bc(){Cu=Au.current,uo(Au)}function wc(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,zr(n)),null!==Tu)for(n=Tu.return;null!==n;){var r=n;switch(r.tag){case 1:null!=(r=r.type.childContextTypes)&&mo();break;case 3:Ci(),uo(fo),uo(lo),Yi();break;case 5:Ni(r);break;case 4:Ci();break;case 13:case 19:uo(Li);break;case 10:ti(r);break;case 23:case 24:bc()}n=n.return}Iu=e,Tu=qc(e.current,null),Ru=Cu=Du=t,Nu=0,Lu=null,Uu=Fu=Mu=0}function Oc(e,t){for(;;){var n=Tu;try{if(ei(),Zi.current=Ia,ea){for(var r=Qi.memoizedState;null!==r;){var o=r.queue;null!==o&&(o.pending=null),r=r.next}ea=!1}if(Ki=0,Ji=Xi=Qi=null,ta=!1,Pu.current=null,null===n||null===n.return){Nu=1,Lu=t,Tu=null;break}e:{var i=e,a=n.return,u=n,c=t;if(t=Ru,u.flags|=2048,u.firstEffect=u.lastEffect=null,null!==c&&"object"==typeof c&&"function"==typeof c.then){var s=c;if(0==(2&u.mode)){var l=u.alternate;l?(u.updateQueue=l.updateQueue,u.memoizedState=l.memoizedState,u.lanes=l.lanes):(u.updateQueue=null,u.memoizedState=null)}var f=0!=(1&Li.current),p=a;do{var d;if(d=13===p.tag){var h=p.memoizedState;if(null!==h)d=null!==h.dehydrated;else{var y=p.memoizedProps;d=void 0!==y.fallback&&(!0!==y.unstable_avoidThisFallback||!f)}}if(d){var m=p.updateQueue;if(null===m){var v=new Set;v.add(s),p.updateQueue=v}else m.add(s);if(0==(2&p.mode)){if(p.flags|=64,u.flags|=16384,u.flags&=-2981,1===u.tag)if(null===u.alternate)u.tag=17;else{var g=ci(-1,1);g.tag=2,si(u,g)}u.lanes|=1;break e}c=void 0,u=t;var b=i.pingCache;if(null===b?(b=i.pingCache=new uu,c=new Set,b.set(s,c)):void 0===(c=b.get(s))&&(c=new Set,b.set(s,c)),!c.has(u)){c.add(u);var w=Mc.bind(null,i,s,u);s.then(w,w)}p.flags|=4096,p.lanes=t;break e}p=p.return}while(null!==p);c=Error((Y(u.type)||"A React component")+" suspended while rendering, but no fallback UI was specified.\n\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display.")}5!==Nu&&(Nu=2),c=au(c,u),p=a;do{switch(p.tag){case 3:i=c,p.flags|=4096,t&=-t,p.lanes|=t,li(p,cu(0,i,t));break e;case 1:i=c;var O=p.type,E=p.stateNode;if(0==(64&p.flags)&&("function"==typeof O.getDerivedStateFromError||null!==E&&"function"==typeof E.componentDidCatch&&(null===Zu||!Zu.has(E)))){p.flags|=4096,t&=-t,p.lanes|=t,li(p,su(p,i,t));break e}}p=p.return}while(null!==p)}Pc(n)}catch(e){t=e,Tu===n&&null!==n&&(Tu=n=n.return);continue}break}}function Ec(){var e=ju.current;return ju.current=Ia,null===e?Ia:e}function _c(e,t){var n=ku;ku|=16;var r=Ec();for(Iu===e&&Ru===t||wc(e,t);;)try{xc();break}catch(t){Oc(e,t)}if(ei(),ku=n,ju.current=r,null!==Tu)throw Error(a(261));return Iu=null,Ru=0,Nu}function xc(){for(;null!==Tu;)jc(Tu)}function Sc(){for(;null!==Tu&&!jo();)jc(Tu)}function jc(e){var t=Gu(e.alternate,e,Cu);e.memoizedProps=e.pendingProps,null===t?Pc(e):Tu=t,Pu.current=null}function Pc(e){var t=e;do{var n=t.alternate;if(e=t.return,0==(2048&t.flags)){if(null!==(n=ou(n,t,Cu)))return void(Tu=n);if(24!==(n=t).tag&&23!==n.tag||null===n.memoizedState||0!=(1073741824&Cu)||0==(4&n.mode)){for(var r=0,o=n.child;null!==o;)r|=o.lanes|o.childLanes,o=o.sibling;n.childLanes=r}null!==e&&0==(2048&e.flags)&&(null===e.firstEffect&&(e.firstEffect=t.firstEffect),null!==t.lastEffect&&(null!==e.lastEffect&&(e.lastEffect.nextEffect=t.firstEffect),e.lastEffect=t.lastEffect),1<t.flags&&(null!==e.lastEffect?e.lastEffect.nextEffect=t:e.firstEffect=t,e.lastEffect=t))}else{if(null!==(n=iu(t)))return n.flags&=2047,void(Tu=n);null!==e&&(e.firstEffect=e.lastEffect=null,e.flags|=2048)}if(null!==(t=t.sibling))return void(Tu=t);Tu=t=e}while(null!==t);0===Nu&&(Nu=5)}function kc(e){var t=qo();return Go(99,Ic.bind(null,e,t)),null}function Ic(e,t){do{Rc()}while(null!==Ku);if(0!=(48&ku))throw Error(a(327));var n=e.finishedWork;if(null===n)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(a(177));e.callbackNode=null;var r=n.lanes|n.childLanes,o=r,i=e.pendingLanes&~o;e.pendingLanes=o,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=o,e.mutableReadLanes&=o,e.entangledLanes&=o,o=e.entanglements;for(var u=e.eventTimes,c=e.expirationTimes;0<i;){var s=31-Gt(i),l=1<<s;o[s]=0,u[s]=-1,c[s]=-1,i&=~l}if(null!==ec&&0==(24&r)&&ec.has(e)&&ec.delete(e),e===Iu&&(Tu=Iu=null,Ru=0),1<n.flags?null!==n.lastEffect?(n.lastEffect.nextEffect=n,r=n.firstEffect):r=n:r=n.firstEffect,null!==r){if(o=ku,ku|=32,Pu.current=null,Fr=$t,hr(u=dr())){if("selectionStart"in u)c={start:u.selectionStart,end:u.selectionEnd};else e:if(c=(c=u.ownerDocument)&&c.defaultView||window,(l=c.getSelection&&c.getSelection())&&0!==l.rangeCount){c=l.anchorNode,i=l.anchorOffset,s=l.focusNode,l=l.focusOffset;try{c.nodeType,s.nodeType}catch(e){c=null;break e}var f=0,p=-1,d=-1,h=0,y=0,m=u,v=null;t:for(;;){for(var g;m!==c||0!==i&&3!==m.nodeType||(p=f+i),m!==s||0!==l&&3!==m.nodeType||(d=f+l),3===m.nodeType&&(f+=m.nodeValue.length),null!==(g=m.firstChild);)v=m,m=g;for(;;){if(m===u)break t;if(v===c&&++h===i&&(p=f),v===s&&++y===l&&(d=f),null!==(g=m.nextSibling))break;v=(m=v).parentNode}m=g}c=-1===p||-1===d?null:{start:p,end:d}}else c=null;c=c||{start:0,end:0}}else c=null;Ur={focusedElem:u,selectionRange:c},$t=!1,ac=null,uc=!1,Wu=r;do{try{Tc()}catch(e){if(null===Wu)throw Error(a(330));Dc(Wu,e),Wu=Wu.nextEffect}}while(null!==Wu);ac=null,Wu=r;do{try{for(u=e;null!==Wu;){var b=Wu.flags;if(16&b&&ge(Wu.stateNode,""),128&b){var w=Wu.alternate;if(null!==w){var O=w.ref;null!==O&&("function"==typeof O?O(null):O.current=null)}}switch(1038&b){case 2:gu(Wu),Wu.flags&=-3;break;case 6:gu(Wu),Wu.flags&=-3,Eu(Wu.alternate,Wu);break;case 1024:Wu.flags&=-1025;break;case 1028:Wu.flags&=-1025,Eu(Wu.alternate,Wu);break;case 4:Eu(Wu.alternate,Wu);break;case 8:Ou(u,c=Wu);var E=c.alternate;mu(c),null!==E&&mu(E)}Wu=Wu.nextEffect}}catch(e){if(null===Wu)throw Error(a(330));Dc(Wu,e),Wu=Wu.nextEffect}}while(null!==Wu);if(O=Ur,w=dr(),b=O.focusedElem,u=O.selectionRange,w!==b&&b&&b.ownerDocument&&pr(b.ownerDocument.documentElement,b)){null!==u&&hr(b)&&(w=u.start,void 0===(O=u.end)&&(O=w),"selectionStart"in b?(b.selectionStart=w,b.selectionEnd=Math.min(O,b.value.length)):(O=(w=b.ownerDocument||document)&&w.defaultView||window).getSelection&&(O=O.getSelection(),c=b.textContent.length,E=Math.min(u.start,c),u=void 0===u.end?E:Math.min(u.end,c),!O.extend&&E>u&&(c=u,u=E,E=c),c=fr(b,E),i=fr(b,u),c&&i&&(1!==O.rangeCount||O.anchorNode!==c.node||O.anchorOffset!==c.offset||O.focusNode!==i.node||O.focusOffset!==i.offset)&&((w=w.createRange()).setStart(c.node,c.offset),O.removeAllRanges(),E>u?(O.addRange(w),O.extend(i.node,i.offset)):(w.setEnd(i.node,i.offset),O.addRange(w))))),w=[];for(O=b;O=O.parentNode;)1===O.nodeType&&w.push({element:O,left:O.scrollLeft,top:O.scrollTop});for("function"==typeof b.focus&&b.focus(),b=0;b<w.length;b++)(O=w[b]).element.scrollLeft=O.left,O.element.scrollTop=O.top}$t=!!Fr,Ur=Fr=null,e.current=n,Wu=r;do{try{for(b=e;null!==Wu;){var _=Wu.flags;if(36&_&&du(b,Wu.alternate,Wu),128&_){w=void 0;var x=Wu.ref;if(null!==x){var S=Wu.stateNode;switch(Wu.tag){case 5:w=S;break;default:w=S}"function"==typeof x?x(w):x.current=w}}Wu=Wu.nextEffect}}catch(e){if(null===Wu)throw Error(a(330));Dc(Wu,e),Wu=Wu.nextEffect}}while(null!==Wu);Wu=null,Do(),ku=o}else e.current=n;if($u)$u=!1,Ku=e,Qu=t;else for(Wu=r;null!==Wu;)t=Wu.nextEffect,Wu.nextEffect=null,8&Wu.flags&&((_=Wu).sibling=null,_.stateNode=null),Wu=t;if(0===(r=e.pendingLanes)&&(Zu=null),1===r?e===nc?tc++:(tc=0,nc=e):tc=0,n=n.stateNode,Eo&&"function"==typeof Eo.onCommitFiberRoot)try{Eo.onCommitFiberRoot(Oo,n,void 0,64==(64&n.current.flags))}catch(e){}if(pc(e,Ho()),Vu)throw Vu=!1,e=Yu,Yu=null,e;return 0!=(8&ku)||Vo(),null}function Tc(){for(;null!==Wu;){var e=Wu.alternate;uc||null===ac||(0!=(8&Wu.flags)?et(Wu,ac)&&(uc=!0):13===Wu.tag&&xu(e,Wu)&&et(Wu,ac)&&(uc=!0));var t=Wu.flags;0!=(256&t)&&pu(e,Wu),0==(512&t)||$u||($u=!0,Wo(97,(function(){return Rc(),null}))),Wu=Wu.nextEffect}}function Rc(){if(90!==Qu){var e=97<Qu?97:Qu;return Qu=90,Go(e,Nc)}return!1}function Cc(e,t){Xu.push(t,e),$u||($u=!0,Wo(97,(function(){return Rc(),null})))}function Ac(e,t){Ju.push(t,e),$u||($u=!0,Wo(97,(function(){return Rc(),null})))}function Nc(){if(null===Ku)return!1;var e=Ku;if(Ku=null,0!=(48&ku))throw Error(a(331));var t=ku;ku|=32;var n=Ju;Ju=[];for(var r=0;r<n.length;r+=2){var o=n[r],i=n[r+1],u=o.destroy;if(o.destroy=void 0,"function"==typeof u)try{u()}catch(e){if(null===i)throw Error(a(330));Dc(i,e)}}for(n=Xu,Xu=[],r=0;r<n.length;r+=2){o=n[r],i=n[r+1];try{var c=o.create;o.destroy=c()}catch(e){if(null===i)throw Error(a(330));Dc(i,e)}}for(c=e.current.firstEffect;null!==c;)e=c.nextEffect,c.nextEffect=null,8&c.flags&&(c.sibling=null,c.stateNode=null),c=e;return ku=t,Vo(),!0}function Lc(e,t,n){si(e,t=cu(0,t=au(n,t),1)),t=cc(),null!==(e=fc(e,1))&&(zt(e,1,t),pc(e,t))}function Dc(e,t){if(3===e.tag)Lc(e,e,t);else for(var n=e.return;null!==n;){if(3===n.tag){Lc(n,e,t);break}if(1===n.tag){var r=n.stateNode;if("function"==typeof n.type.getDerivedStateFromError||"function"==typeof r.componentDidCatch&&(null===Zu||!Zu.has(r))){var o=su(n,e=au(t,e),1);if(si(n,o),o=cc(),null!==(n=fc(n,1)))zt(n,1,o),pc(n,o);else if("function"==typeof r.componentDidCatch&&(null===Zu||!Zu.has(r)))try{r.componentDidCatch(t,e)}catch(e){}break}}n=n.return}}function Mc(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),t=cc(),e.pingedLanes|=e.suspendedLanes&n,Iu===e&&(Ru&n)===n&&(4===Nu||3===Nu&&(62914560&Ru)===Ru&&500>Ho()-Hu?wc(e,0):Uu|=n),pc(e,t)}function Fc(e,t){var n=e.stateNode;null!==n&&n.delete(t),0===(t=0)&&(0==(2&(t=e.mode))?t=1:0==(4&t)?t=99===qo()?1:2:(0===oc&&(oc=Du),0===(t=Ht(62914560&~oc))&&(t=4194304))),n=cc(),null!==(e=fc(e,t))&&(zt(e,t,n),pc(e,n))}function Uc(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.flags=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childLanes=this.lanes=0,this.alternate=null}function Bc(e,t,n,r){return new Uc(e,t,n,r)}function Hc(e){return!(!(e=e.prototype)||!e.isReactComponent)}function qc(e,t){var n=e.alternate;return null===n?((n=Bc(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.nextEffect=null,n.firstEffect=null,n.lastEffect=null),n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function zc(e,t,n,r,o,i){var u=2;if(r=e,"function"==typeof e)Hc(e)&&(u=1);else if("string"==typeof e)u=5;else e:switch(e){case x:return Gc(n.children,o,i,t);case D:u=8,o|=16;break;case S:u=8,o|=1;break;case j:return(e=Bc(12,n,t,8|o)).elementType=j,e.type=j,e.lanes=i,e;case T:return(e=Bc(13,n,t,o)).type=T,e.elementType=T,e.lanes=i,e;case R:return(e=Bc(19,n,t,o)).elementType=R,e.lanes=i,e;case M:return Wc(n,o,i,t);case F:return(e=Bc(24,n,t,o)).elementType=F,e.lanes=i,e;default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case P:u=10;break e;case k:u=9;break e;case I:u=11;break e;case C:u=14;break e;case A:u=16,r=null;break e;case N:u=22;break e}throw Error(a(130,null==e?e:typeof e,""))}return(t=Bc(u,n,t,o)).elementType=e,t.type=r,t.lanes=i,t}function Gc(e,t,n,r){return(e=Bc(7,e,r,t)).lanes=n,e}function Wc(e,t,n,r){return(e=Bc(23,e,r,t)).elementType=M,e.lanes=n,e}function Vc(e,t,n){return(e=Bc(6,e,null,t)).lanes=n,e}function Yc(e,t,n){return(t=Bc(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Zc(e,t,n){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.pendingContext=this.context=null,this.hydrate=n,this.callbackNode=null,this.callbackPriority=0,this.eventTimes=qt(0),this.expirationTimes=qt(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=qt(0),this.mutableSourceEagerHydrationData=null}function $c(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:_,key:null==r?null:""+r,children:e,containerInfo:t,implementation:n}}function Kc(e,t,n,r){var o=t.current,i=cc(),u=sc(o);e:if(n){t:{if(Ke(n=n._reactInternals)!==n||1!==n.tag)throw Error(a(170));var c=n;do{switch(c.tag){case 3:c=c.stateNode.context;break t;case 1:if(yo(c.type)){c=c.stateNode.__reactInternalMemoizedMergedChildContext;break t}}c=c.return}while(null!==c);throw Error(a(171))}if(1===n.tag){var s=n.type;if(yo(s)){n=go(n,s,c);break e}}n=c}else n=so;return null===t.context?t.context=n:t.pendingContext=n,(t=ci(i,u)).payload={element:e},null!==(r=void 0===r?null:r)&&(t.callback=r),si(o,t),lc(o,u,i),u}function Qc(e){if(!(e=e.current).child)return null;switch(e.child.tag){case 5:default:return e.child.stateNode}}function Xc(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function Jc(e,t){Xc(e,t),(e=e.alternate)&&Xc(e,t)}function es(e,t,n){var r=null!=n&&null!=n.hydrationOptions&&n.hydrationOptions.mutableSources||null;if(n=new Zc(e,t,null!=n&&!0===n.hydrate),t=Bc(3,null,null,2===t?7:1===t?3:0),n.current=t,t.stateNode=n,ai(t),e[Qr]=n.current,Ir(8===e.nodeType?e.parentNode:e),r)for(e=0;e<r.length;e++){var o=(t=r[e])._getVersion;o=o(t._source),null==n.mutableSourceEagerHydrationData?n.mutableSourceEagerHydrationData=[t,o]:n.mutableSourceEagerHydrationData.push(t,o)}this._internalRoot=n}function ts(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function ns(e,t,n,r,o){var i=n._reactRootContainer;if(i){var a=i._internalRoot;if("function"==typeof o){var u=o;o=function(){var e=Qc(a);u.call(e)}}Kc(t,a,e,o)}else{if(i=n._reactRootContainer=function(e,t){if(t||(t=!(!(t=e?9===e.nodeType?e.documentElement:e.firstChild:null)||1!==t.nodeType||!t.hasAttribute("data-reactroot"))),!t)for(var n;n=e.lastChild;)e.removeChild(n);return new es(e,0,t?{hydrate:!0}:void 0)}(n,r),a=i._internalRoot,"function"==typeof o){var c=o;o=function(){var e=Qc(a);c.call(e)}}vc((function(){Kc(t,a,e,o)}))}return Qc(a)}function rs(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!ts(t))throw Error(a(200));return $c(e,t,null,n)}Gu=function(e,t,n){var r=t.lanes;if(null!==e)if(e.memoizedProps!==t.pendingProps||fo.current)Na=!0;else{if(0==(n&r)){switch(Na=!1,t.tag){case 3:Ga(t),Wi();break;case 5:Ai(t);break;case 1:yo(t.type)&&bo(t);break;case 4:Ri(t,t.stateNode.containerInfo);break;case 10:r=t.memoizedProps.value;var o=t.type._context;co(Ko,o._currentValue),o._currentValue=r;break;case 13:if(null!==t.memoizedState)return 0!=(n&t.child.childLanes)?$a(e,t,n):(co(Li,1&Li.current),null!==(t=nu(e,t,n))?t.sibling:null);co(Li,1&Li.current);break;case 19:if(r=0!=(n&t.childLanes),0!=(64&e.flags)){if(r)return tu(e,t,n);t.flags|=64}if(null!==(o=t.memoizedState)&&(o.rendering=null,o.tail=null,o.lastEffect=null),co(Li,Li.current),r)break;return null;case 23:case 24:return t.lanes=0,Ua(e,t,n)}return nu(e,t,n)}Na=0!=(16384&e.flags)}else Na=!1;switch(t.lanes=0,t.tag){case 2:if(r=t.type,null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,o=ho(t,lo.current),ri(t,n),o=oa(null,t,r,e,o,n),t.flags|=1,"object"==typeof o&&null!==o&&"function"==typeof o.render&&void 0===o.$$typeof){if(t.tag=1,t.memoizedState=null,t.updateQueue=null,yo(r)){var i=!0;bo(t)}else i=!1;t.memoizedState=null!==o.state&&void 0!==o.state?o.state:null,ai(t);var u=r.getDerivedStateFromProps;"function"==typeof u&&hi(t,r,u,e),o.updater=yi,t.stateNode=o,o._reactInternals=t,bi(t,r,e,n),t=za(null,t,r,!0,i,n)}else t.tag=0,La(null,t,o,n),t=t.child;return t;case 16:o=t.elementType;e:{switch(null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,o=(i=o._init)(o._payload),t.type=o,i=t.tag=function(e){if("function"==typeof e)return Hc(e)?1:0;if(null!=e){if((e=e.$$typeof)===I)return 11;if(e===C)return 14}return 2}(o),e=$o(o,e),i){case 0:t=Ha(null,t,o,e,n);break e;case 1:t=qa(null,t,o,e,n);break e;case 11:t=Da(null,t,o,e,n);break e;case 14:t=Ma(null,t,o,$o(o.type,e),r,n);break e}throw Error(a(306,o,""))}return t;case 0:return r=t.type,o=t.pendingProps,Ha(e,t,r,o=t.elementType===r?o:$o(r,o),n);case 1:return r=t.type,o=t.pendingProps,qa(e,t,r,o=t.elementType===r?o:$o(r,o),n);case 3:if(Ga(t),r=t.updateQueue,null===e||null===r)throw Error(a(282));if(r=t.pendingProps,o=null!==(o=t.memoizedState)?o.element:null,ui(e,t),fi(t,r,null,n),(r=t.memoizedState.element)===o)Wi(),t=nu(e,t,n);else{if((i=(o=t.stateNode).hydrate)&&(Fi=Wr(t.stateNode.containerInfo.firstChild),Mi=t,i=Ui=!0),i){if(null!=(e=o.mutableSourceEagerHydrationData))for(o=0;o<e.length;o+=2)(i=e[o])._workInProgressVersionPrimary=e[o+1],Vi.push(i);for(n=Si(t,null,r,n),t.child=n;n;)n.flags=-3&n.flags|1024,n=n.sibling}else La(e,t,r,n),Wi();t=t.child}return t;case 5:return Ai(t),null===e&&qi(t),r=t.type,o=t.pendingProps,i=null!==e?e.memoizedProps:null,u=o.children,Hr(r,o)?u=null:null!==i&&Hr(r,i)&&(t.flags|=16),Ba(e,t),La(e,t,u,n),t.child;case 6:return null===e&&qi(t),null;case 13:return $a(e,t,n);case 4:return Ri(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=xi(t,null,r,n):La(e,t,r,n),t.child;case 11:return r=t.type,o=t.pendingProps,Da(e,t,r,o=t.elementType===r?o:$o(r,o),n);case 7:return La(e,t,t.pendingProps,n),t.child;case 8:case 12:return La(e,t,t.pendingProps.children,n),t.child;case 10:e:{r=t.type._context,o=t.pendingProps,u=t.memoizedProps,i=o.value;var c=t.type._context;if(co(Ko,c._currentValue),c._currentValue=i,null!==u)if(c=u.value,0===(i=ur(c,i)?0:0|("function"==typeof r._calculateChangedBits?r._calculateChangedBits(c,i):1073741823))){if(u.children===o.children&&!fo.current){t=nu(e,t,n);break e}}else for(null!==(c=t.child)&&(c.return=t);null!==c;){var s=c.dependencies;if(null!==s){u=c.child;for(var l=s.firstContext;null!==l;){if(l.context===r&&0!=(l.observedBits&i)){1===c.tag&&((l=ci(-1,n&-n)).tag=2,si(c,l)),c.lanes|=n,null!==(l=c.alternate)&&(l.lanes|=n),ni(c.return,n),s.lanes|=n;break}l=l.next}}else u=10===c.tag&&c.type===t.type?null:c.child;if(null!==u)u.return=c;else for(u=c;null!==u;){if(u===t){u=null;break}if(null!==(c=u.sibling)){c.return=u.return,u=c;break}u=u.return}c=u}La(e,t,o.children,n),t=t.child}return t;case 9:return o=t.type,r=(i=t.pendingProps).children,ri(t,n),r=r(o=oi(o,i.unstable_observedBits)),t.flags|=1,La(e,t,r,n),t.child;case 14:return i=$o(o=t.type,t.pendingProps),Ma(e,t,o,i=$o(o.type,i),r,n);case 15:return Fa(e,t,t.type,t.pendingProps,r,n);case 17:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:$o(r,o),null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),t.tag=1,yo(r)?(e=!0,bo(t)):e=!1,ri(t,n),vi(t,r,o),bi(t,r,o,n),za(null,t,r,!0,e,n);case 19:return tu(e,t,n);case 23:case 24:return Ua(e,t,n)}throw Error(a(156,t.tag))},es.prototype.render=function(e){Kc(e,this._internalRoot,null,null)},es.prototype.unmount=function(){var e=this._internalRoot,t=e.containerInfo;Kc(null,e,null,(function(){t[Qr]=null}))},tt=function(e){13===e.tag&&(lc(e,4,cc()),Jc(e,4))},nt=function(e){13===e.tag&&(lc(e,67108864,cc()),Jc(e,67108864))},rt=function(e){if(13===e.tag){var t=cc(),n=sc(e);lc(e,n,t),Jc(e,n)}},ot=function(e,t){return t()},Pe=function(e,t,n){switch(t){case"input":if(ne(e,n),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var o=no(r);if(!o)throw Error(a(90));Q(r),ne(r,o)}}}break;case"textarea":se(e,n);break;case"select":null!=(t=n.value)&&ae(e,!!n.multiple,t,!1)}},Ae=mc,Ne=function(e,t,n,r,o){var i=ku;ku|=4;try{return Go(98,e.bind(null,t,n,r,o))}finally{0===(ku=i)&&(zu(),Vo())}},Le=function(){0==(49&ku)&&(function(){if(null!==ec){var e=ec;ec=null,e.forEach((function(e){e.expiredLanes|=24&e.pendingLanes,pc(e,Ho())}))}Vo()}(),Rc())},De=function(e,t){var n=ku;ku|=2;try{return e(t)}finally{0===(ku=n)&&(zu(),Vo())}};var os={Events:[eo,to,no,Re,Ce,Rc,{current:!1}]},is={findFiberByHostInstance:Jr,bundleType:0,version:"17.0.2",rendererPackageName:"react-dom"},as={bundleType:is.bundleType,version:is.version,rendererPackageName:is.rendererPackageName,rendererConfig:is.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:O.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=Je(e))?null:e.stateNode},findFiberByHostInstance:is.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var us=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!us.isDisabled&&us.supportsFiber)try{Oo=us.inject(as),Eo=us}catch(me){}}t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=os,t.createPortal=rs,t.findDOMNode=function(e){if(null==e)return null;if(1===e.nodeType)return e;var t=e._reactInternals;if(void 0===t){if("function"==typeof e.render)throw Error(a(188));throw Error(a(268,Object.keys(e)))}return e=null===(e=Je(t))?null:e.stateNode},t.flushSync=function(e,t){var n=ku;if(0!=(48&n))return e(t);ku|=1;try{if(e)return Go(99,e.bind(null,t))}finally{ku=n,Vo()}},t.hydrate=function(e,t,n){if(!ts(t))throw Error(a(200));return ns(null,e,t,!0,n)},t.render=function(e,t,n){if(!ts(t))throw Error(a(200));return ns(null,e,t,!1,n)},t.unmountComponentAtNode=function(e){if(!ts(e))throw Error(a(40));return!!e._reactRootContainer&&(vc((function(){ns(null,null,e,!1,(function(){e._reactRootContainer=null,e[Qr]=null}))})),!0)},t.unstable_batchedUpdates=mc,t.unstable_createPortal=function(e,t){return rs(e,t,2<arguments.length&&void 0!==arguments[2]?arguments[2]:null)},t.unstable_renderSubtreeIntoContainer=function(e,t,n,r){if(!ts(n))throw Error(a(200));if(null==e||void 0===e._reactInternals)throw Error(a(38));return ns(e,t,n,!1,r)},t.version="17.0.2"},14486:(e,t,n)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(e){}}(),e.exports=n(89395)},49686:(e,t)=>{"use strict";var n,r,o,i;if("object"==typeof performance&&"function"==typeof performance.now){var a=performance;t.unstable_now=function(){return a.now()}}else{var u=Date,c=u.now();t.unstable_now=function(){return u.now()-c}}if("undefined"==typeof window||"function"!=typeof MessageChannel){var s=null,l=null,f=function(){if(null!==s)try{var e=t.unstable_now();s(!0,e),s=null}catch(e){throw setTimeout(f,0),e}};n=function(e){null!==s?setTimeout(n,0,e):(s=e,setTimeout(f,0))},r=function(e,t){l=setTimeout(e,t)},o=function(){clearTimeout(l)},t.unstable_shouldYield=function(){return!1},i=t.unstable_forceFrameRate=function(){}}else{var p=window.setTimeout,d=window.clearTimeout;if("undefined"!=typeof console){window.cancelAnimationFrame;window.requestAnimationFrame}var h=!1,y=null,m=-1,v=5,g=0;t.unstable_shouldYield=function(){return t.unstable_now()>=g},i=function(){},t.unstable_forceFrameRate=function(e){0>e||125<e||(v=0<e?Math.floor(1e3/e):5)};var b=new MessageChannel,w=b.port2;b.port1.onmessage=function(){if(null!==y){var e=t.unstable_now();g=e+v;try{y(!0,e)?w.postMessage(null):(h=!1,y=null)}catch(e){throw w.postMessage(null),e}}else h=!1},n=function(e){y=e,h||(h=!0,w.postMessage(null))},r=function(e,n){m=p((function(){e(t.unstable_now())}),n)},o=function(){d(m),m=-1}}function O(e,t){var n=e.length;e.push(t);e:for(;;){var r=n-1>>>1,o=e[r];if(!(void 0!==o&&0<x(o,t)))break e;e[r]=t,e[n]=o,n=r}}function E(e){return void 0===(e=e[0])?null:e}function _(e){var t=e[0];if(void 0!==t){var n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,o=e.length;r<o;){var i=2*(r+1)-1,a=e[i],u=i+1,c=e[u];if(void 0!==a&&0>x(a,n))void 0!==c&&0>x(c,a)?(e[r]=c,e[u]=n,r=u):(e[r]=a,e[i]=n,r=i);else{if(!(void 0!==c&&0>x(c,n)))break e;e[r]=c,e[u]=n,r=u}}}return t}return null}function x(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}var S=[],j=[],P=1,k=null,I=3,T=!1,R=!1,C=!1;function A(e){for(var t=E(j);null!==t;){if(null===t.callback)_(j);else{if(!(t.startTime<=e))break;_(j),t.sortIndex=t.expirationTime,O(S,t)}t=E(j)}}function N(e){if(C=!1,A(e),!R)if(null!==E(S))R=!0,n(L);else{var t=E(j);null!==t&&r(N,t.startTime-e)}}function L(e,n){R=!1,C&&(C=!1,o()),T=!0;var i=I;try{for(A(n),k=E(S);null!==k&&(!(k.expirationTime>n)||e&&!t.unstable_shouldYield());){var a=k.callback;if("function"==typeof a){k.callback=null,I=k.priorityLevel;var u=a(k.expirationTime<=n);n=t.unstable_now(),"function"==typeof u?k.callback=u:k===E(S)&&_(S),A(n)}else _(S);k=E(S)}if(null!==k)var c=!0;else{var s=E(j);null!==s&&r(N,s.startTime-n),c=!1}return c}finally{k=null,I=i,T=!1}}var D=i;t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){R||T||(R=!0,n(L))},t.unstable_getCurrentPriorityLevel=function(){return I},t.unstable_getFirstCallbackNode=function(){return E(S)},t.unstable_next=function(e){switch(I){case 1:case 2:case 3:var t=3;break;default:t=I}var n=I;I=t;try{return e()}finally{I=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=D,t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=I;I=e;try{return t()}finally{I=n}},t.unstable_scheduleCallback=function(e,i,a){var u=t.unstable_now();switch("object"==typeof a&&null!==a?a="number"==typeof(a=a.delay)&&0<a?u+a:u:a=u,e){case 1:var c=-1;break;case 2:c=250;break;case 5:c=1073741823;break;case 4:c=1e4;break;default:c=5e3}return e={id:P++,callback:i,priorityLevel:e,startTime:a,expirationTime:c=a+c,sortIndex:-1},a>u?(e.sortIndex=a,O(j,e),null===E(S)&&e===E(j)&&(C?o():C=!0,r(N,a-u))):(e.sortIndex=c,O(S,e),R||T||(R=!0,n(L))),e},t.unstable_wrapCallback=function(e){var t=I;return function(){var n=I;I=t;try{return e.apply(this,arguments)}finally{I=n}}}},89019:(e,t,n)=>{"use strict";e.exports=n(49686)},40801:e=>{var t="undefined"!=typeof Element,n="function"==typeof Map,r="function"==typeof Set,o="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function i(e,a){if(e===a)return!0;if(e&&a&&"object"==typeof e&&"object"==typeof a){if(e.constructor!==a.constructor)return!1;var u,c,s,l;if(Array.isArray(e)){if((u=e.length)!=a.length)return!1;for(c=u;0!=c--;)if(!i(e[c],a[c]))return!1;return!0}if(n&&e instanceof Map&&a instanceof Map){if(e.size!==a.size)return!1;for(l=e.entries();!(c=l.next()).done;)if(!a.has(c.value[0]))return!1;for(l=e.entries();!(c=l.next()).done;)if(!i(c.value[1],a.get(c.value[0])))return!1;return!0}if(r&&e instanceof Set&&a instanceof Set){if(e.size!==a.size)return!1;for(l=e.entries();!(c=l.next()).done;)if(!a.has(c.value[0]))return!1;return!0}if(o&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(a)){if((u=e.length)!=a.length)return!1;for(c=u;0!=c--;)if(e[c]!==a[c])return!1;return!0}if(e.constructor===RegExp)return e.source===a.source&&e.flags===a.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===a.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===a.toString();if((u=(s=Object.keys(e)).length)!==Object.keys(a).length)return!1;for(c=u;0!=c--;)if(!Object.prototype.hasOwnProperty.call(a,s[c]))return!1;if(t&&e instanceof Element)return!1;for(c=u;0!=c--;)if(("_owner"!==s[c]&&"__v"!==s[c]&&"__o"!==s[c]||!e.$$typeof)&&!i(e[s[c]],a[s[c]]))return!1;return!0}return e!=e&&a!=a}e.exports=function(e,t){try{return i(e,t)}catch(e){if((e.message||"").match(/stack|recursion/i))return!1;throw e}}},6761:(e,t,n)=>{"use strict";var r=n(76630);function o(){}function i(){}i.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,i,a){if(a!==r){var u=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw u.name="Invariant Violation",u}}function t(){return e}e.isRequired=e;var n={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:o};return n.PropTypes=n,n}},29622:(e,t,n)=>{e.exports=n(6761)()},76630:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},1816:(e,t,n)=>{"use strict";var r,o=n(84258),i=(r=o)&&"object"==typeof r&&"default"in r?r.default:r;function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var u=!("undefined"==typeof window||!window.document||!window.document.createElement);e.exports=function(e,t,n){if("function"!=typeof e)throw new Error("Expected reducePropsToState to be a function.");if("function"!=typeof t)throw new Error("Expected handleStateChangeOnClient to be a function.");if(void 0!==n&&"function"!=typeof n)throw new Error("Expected mapStateOnServer to either be undefined or a function.");return function(r){if("function"!=typeof r)throw new Error("Expected WrappedComponent to be a React component.");var c,s=[];function l(){c=e(s.map((function(e){return e.props}))),f.canUseDOM?t(c):n&&(c=n(c))}var f=function(e){var t,n;function o(){return e.apply(this,arguments)||this}n=e,(t=o).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n,o.peek=function(){return c},o.rewind=function(){if(o.canUseDOM)throw new Error("You may only call rewind() on the server. Call peek() to read the current state.");var e=c;return c=void 0,s=[],e};var a=o.prototype;return a.UNSAFE_componentWillMount=function(){s.push(this),l()},a.componentDidUpdate=function(){l()},a.componentWillUnmount=function(){var e=s.indexOf(this);s.splice(e,1),l()},a.render=function(){return i.createElement(r,this.props)},o}(o.PureComponent);return a(f,"displayName","SideEffect("+function(e){return e.displayName||e.name||"Component"}(r)+")"),a(f,"canUseDOM",u),f}}},99173:(e,t)=>{"use strict";var n="function"==typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,o=n?Symbol.for("react.portal"):60106,i=n?Symbol.for("react.fragment"):60107,a=n?Symbol.for("react.strict_mode"):60108,u=n?Symbol.for("react.profiler"):60114,c=n?Symbol.for("react.provider"):60109,s=n?Symbol.for("react.context"):60110,l=n?Symbol.for("react.async_mode"):60111,f=n?Symbol.for("react.concurrent_mode"):60111,p=n?Symbol.for("react.forward_ref"):60112,d=n?Symbol.for("react.suspense"):60113,h=n?Symbol.for("react.suspense_list"):60120,y=n?Symbol.for("react.memo"):60115,m=n?Symbol.for("react.lazy"):60116,v=n?Symbol.for("react.block"):60121,g=n?Symbol.for("react.fundamental"):60117,b=n?Symbol.for("react.responder"):60118,w=n?Symbol.for("react.scope"):60119;function O(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case l:case f:case i:case u:case a:case d:return e;default:switch(e=e&&e.$$typeof){case s:case p:case m:case y:case c:return e;default:return t}}case o:return t}}}function E(e){return O(e)===f}t.AsyncMode=l,t.ConcurrentMode=f,t.ContextConsumer=s,t.ContextProvider=c,t.Element=r,t.ForwardRef=p,t.Fragment=i,t.Lazy=m,t.Memo=y,t.Portal=o,t.Profiler=u,t.StrictMode=a,t.Suspense=d,t.isAsyncMode=function(e){return E(e)||O(e)===l},t.isConcurrentMode=E,t.isContextConsumer=function(e){return O(e)===s},t.isContextProvider=function(e){return O(e)===c},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return O(e)===p},t.isFragment=function(e){return O(e)===i},t.isLazy=function(e){return O(e)===m},t.isMemo=function(e){return O(e)===y},t.isPortal=function(e){return O(e)===o},t.isProfiler=function(e){return O(e)===u},t.isStrictMode=function(e){return O(e)===a},t.isSuspense=function(e){return O(e)===d},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===i||e===f||e===u||e===a||e===d||e===h||"object"==typeof e&&null!==e&&(e.$$typeof===m||e.$$typeof===y||e.$$typeof===c||e.$$typeof===s||e.$$typeof===p||e.$$typeof===g||e.$$typeof===b||e.$$typeof===w||e.$$typeof===v)},t.typeOf=O},2781:(e,t,n)=>{"use strict";e.exports=n(99173)},76511:()=>{var e,t,n,r;Array.from||(Array.from=(e=Object.prototype.toString,t=function(t){return"function"==typeof t||"[object Function]"===e.call(t)},n=Math.pow(2,53)-1,r=function(e){var t=function(e){var t=Number(e);return isNaN(t)?0:0!==t&&isFinite(t)?(t>0?1:-1)*Math.floor(Math.abs(t)):t}(e);return Math.min(Math.max(t,0),n)},function(e){var n=this,o=Object(e);if(null==e)throw new TypeError("Array.from requires an array-like object - not null or undefined");var i,a=arguments.length>1?arguments[1]:void 0;if(void 0!==a){if(!t(a))throw new TypeError("Array.from: when provided, the second argument must be a function");arguments.length>2&&(i=arguments[2])}for(var u,c=r(o.length),s=t(n)?Object(new n(c)):new Array(c),l=0;l<c;)u=o[l],s[l]=a?void 0===i?a(u,l):a.call(i,u,l):u,l+=1;return s.length=c,s}))},98269:(e,t,n)=>{"use strict";var r=n(84258),o=n(53486),i=n(99890);function a(){}a.prototype=Object.create(r.Component.prototype),a.displayName="NestedStatus",a.propTypes={code:o.number.isRequired},a.prototype.render=function(){return this.props.children?r.Children.only(this.props.children):null};var u=i((function(e){var t=e[e.length-1];if(t)return t.code}),(function(e){return e}))(a),c=u.peek,s=u.rewind;u.peek=function(){return c()||200},u.rewind=function(){return s()||200},e.exports=u},26598:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Context=void 0;var o=r(n(84258));t.Context=o.default.createContext({remove:function(){},set:function(){},handleClick:function(){},open:function(){}})},55155:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.baseGalleryPropTypes=void 0;var o=r(n(53486));t.baseGalleryPropTypes={children:o.default.any,options:o.default.object,id:o.default.oneOfType([o.default.string,o.default.number])}},93694:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)},o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&o(t,e,n);return i(t,e),t},u=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n},c=this&&this.__read||function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,i=n.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.CustomGallery=void 0;var l=s(n(98454)),f=a(n(84258)),p=s(n(53486)),d=n(46930),h=n(26598),y=n(55155);t.CustomGallery=function(e){var t=e.children,n=e.layoutRef,o=e.ui,i=e.options,a=e.id,s=e.onOpen,p=(0,f.useRef)(new Map),y=(0,f.useRef)(null),m=(0,f.useCallback)((function(e,t,f){var h=f||null,y=[],m=Array.from(p.current),v=function(n,o){var i=c(n,2),a=i[0],s=i[1],l=s.width,f=s.height,p=s.title,d=s.original,m=s.thumbnail,v=s.id,g=u(s,["width","height","title","original","thumbnail","id"]);(e===a||void 0!==v&&String(v)===t)&&(h=o),y.push(r(r(r(r({},p?{title:p}:{}),{w:Number(l),h:Number(f),src:d,msrc:m,el:a.current}),void 0!==v?{pid:v}:{}),g))};p.current.size>1?m.sort((function(e,t){var n=c(e,1)[0].current,r=c(t,1)[0].current;return(0,d.sortNodes)(n,r)})).forEach(v):m.forEach(v);var g=n.current;if(g){var b=new l.default(g,o,y,r(r({index:null===h?parseInt(t,10)-1:h,getThumbBoundsFn:function(e){var t=y[e].el;return t?(0,d.getElBounds)(t):{x:0,y:0,w:0}},history:!1},void 0!==a?{galleryUID:a,history:!0}:{}),i||{}));b.init(),void 0!==s&&"function"==typeof s&&s(b)}}),[i,a,s]);(0,f.useEffect)((function(){if(void 0!==a){var e=window.location.hash.substring(1),t={};if(!(e.length<5)){for(var n=e.split("&"),r=0;r<n.length;r++)if(n[r]){var o=c(n[r].split("="),2),i=o[0],u=o[1];i&&u&&(t[i]=u)}var s=t.pid,l=t.gid;0!==p.current.size?s&&l===String(a)&&m(null,s):y.current=s}}}),[m,a]);var v=(0,f.useCallback)((function(e){p.current.delete(e)}),[]),g=(0,f.useCallback)((function(e,t){var n=t.id;if(p.current.set(e,t),y.current)if(n===y.current)m(e),y.current=null;else if(!n){var r=parseInt(y.current,10)-1,o=Array.from(p.current.keys())[r];o&&(m(o),y.current=null)}}),[m]),b=(0,f.useCallback)((function(e){m(null,null,e)}),[m]),w=(0,f.useMemo)((function(){return{remove:v,set:g,handleClick:m,open:b}}),[v,g,m,b]);return f.default.createElement(h.Context.Provider,{value:w},t)},t.CustomGallery.propTypes=r(r({},y.baseGalleryPropTypes),{layoutRef:p.default.shape({current:p.default.instanceOf("undefined"==typeof Element?function(){}:Element)}).isRequired,ui:p.default.any.isRequired})},48683:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)},o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&o(t,e,n);return i(t,e),t},u=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n},c=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Gallery=void 0;var s=c(n(87452)),l=a(n(84258)),f=n(32520),p=n(55155);t.Gallery=function(e){var t=e.children,n=e.options,o=e.id,i=e.onOpen,a=u(e,["children","options","id","onOpen"]),c=(0,l.useRef)();return l.default.createElement(f.CustomGallery,{layoutRef:c,ui:s.default,options:n,id:o,onOpen:i},t,l.default.createElement(f.DefaultLayout,r({},a,{ref:c})))},t.Gallery.propTypes=r(r({},p.baseGalleryPropTypes),f.layoutPropTypes)},46930:function(e,t,n){"use strict";var r=this&&this.__read||function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,i=n.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a},o=this&&this.__spreadArray||function(e,t,n){if(n||2===arguments.length)for(var r,o=0,i=t.length;o<i;o++)!r&&o in t||(r||(r=Array.prototype.slice.call(t,0,o)),r[o]=t[o]);return e.concat(r||Array.prototype.slice.call(t))};Object.defineProperty(t,"__esModule",{value:!0}),t.shuffle=t.sortNodes=t.getElBounds=void 0;var i=n(56777);t.getElBounds=function(e){var t=window.pageXOffset||document.documentElement.scrollLeft,n=window.pageYOffset||document.documentElement.scrollTop,r=e.getBoundingClientRect();return{x:r.left+t,y:r.top+n,w:r.width}},t.sortNodes=function(e,t){if(!(e instanceof Element))throw new i.NoRefError;return e===t?0:2&e.compareDocumentPosition(t)?1:-1},t.shuffle=function(e){for(var t,n,i=o([],r(e),!1),a=i.length;0!==a;)n=Math.floor(Math.random()*a),t=i[a-=1],i[a]=i[n],i[n]=t;return i}},32378:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.useGallery=void 0;var o=r(n(84258)),i=n(26598);t.useGallery=function(){return{open:o.default.useContext(i.Context).open}}},32520:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),o(n(31883),t),o(n(93694),t),o(n(48683),t),o(n(36033),t),o(n(75127),t),o(n(32378),t)},36033:function(e,t,n){"use strict";var r=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Item=void 0;var i=n(84258),a=o(n(53486)),u=n(26598);t.Item=function(e){var t=e.children,n=r(e,["children"]),o=(0,i.useRef)(),a=(0,i.useContext)(u.Context),c=a.remove,s=a.set,l=a.handleClick,f=(0,i.useCallback)((function(){return l(o)}),[]);return(0,i.useEffect)((function(){return s(o,n),function(){return c(o)}}),Object.values(n)),t({ref:o,open:f})},t.Item.propTypes={original:a.default.string,thumbnail:a.default.string,width:a.default.oneOfType([a.default.number,a.default.string]),height:a.default.oneOfType([a.default.number,a.default.string]),title:a.default.string,html:a.default.string,children:a.default.func.isRequired,id:a.default.oneOfType([a.default.number,a.default.string])}},56777:function(e,t){"use strict";var n,r=this&&this.__extends||(n=function(e,t){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])})(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,"__esModule",{value:!0}),t.NoRefError=void 0;var o=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.message="No valid `ref` provided.\nYou shuld use `ref` from render prop of Item component.\nExample:\n<Item>{({ ref }) => <div ref={ref}></div>}</Item>\n",t}return r(t,e),t}(Error);t.NoRefError=o},31883:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)},o=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.DefaultLayout=t.layoutDefaultProps=t.layoutPropTypes=void 0;var a=i(n(84258)),u=i(n(53486));t.layoutPropTypes={closeButtonCaption:u.default.string,shareButtonCaption:u.default.string,toggleFullscreenButtonCaption:u.default.string,zoomButtonCaption:u.default.string,prevButtonCaption:u.default.string,nextButtonCaption:u.default.string,shareButton:u.default.bool,fullscreenButton:u.default.bool,zoomButton:u.default.bool},t.layoutDefaultProps={closeButtonCaption:"Close (Esc)",shareButtonCaption:"Share",toggleFullscreenButtonCaption:"Toggle fullscreen",zoomButtonCaption:"Zoom in/out",prevButtonCaption:"Previous (arrow left)",nextButtonCaption:"Next (arrow right)",shareButton:!0,fullscreenButton:!0,zoomButton:!0},t.DefaultLayout=a.default.forwardRef((function(e,t){var n=e.closeButtonCaption,i=e.shareButtonCaption,u=e.toggleFullscreenButtonCaption,c=e.zoomButtonCaption,s=e.prevButtonCaption,l=e.nextButtonCaption,f=e.shareButton,p=e.fullscreenButton,d=e.zoomButton,h=o(e,["closeButtonCaption","shareButtonCaption","toggleFullscreenButtonCaption","zoomButtonCaption","prevButtonCaption","nextButtonCaption","shareButton","fullscreenButton","zoomButton"]);return a.default.createElement("div",r({className:"pswp",tabIndex:-1,role:"dialog","aria-hidden":"true"},h,{ref:t}),a.default.createElement("div",{className:"pswp__bg"}),a.default.createElement("div",{className:"pswp__scroll-wrap"},a.default.createElement("div",{className:"pswp__container"},a.default.createElement("div",{className:"pswp__item"}),a.default.createElement("div",{className:"pswp__item"}),a.default.createElement("div",{className:"pswp__item"})),a.default.createElement("div",{className:"pswp__ui pswp__ui--hidden"},a.default.createElement("div",{className:"pswp__top-bar"},a.default.createElement("div",{className:"pswp__counter"}),a.default.createElement("button",{type:"button",className:"pswp__button pswp__button--close",title:n}),f&&a.default.createElement("button",{type:"button",className:"pswp__button pswp__button--share",title:i}),p&&a.default.createElement("button",{type:"button",className:"pswp__button pswp__button--fs",title:u}),d&&a.default.createElement("button",{type:"button",className:"pswp__button pswp__button--zoom",title:c}),a.default.createElement("div",{className:"pswp__preloader"},a.default.createElement("div",{className:"pswp__preloader__icn"},a.default.createElement("div",{className:"pswp__preloader__cut"},a.default.createElement("div",{className:"pswp__preloader__donut"}))))),a.default.createElement("div",{className:"pswp__share-modal pswp__share-modal--hidden pswp__single-tap"},a.default.createElement("div",{className:"pswp__share-tooltip"})),a.default.createElement("button",{type:"button",className:"pswp__button pswp__button--arrow--left",title:s}),a.default.createElement("button",{type:"button",className:"pswp__button pswp__button--arrow--right",title:l}),a.default.createElement("div",{className:"pswp__caption"},a.default.createElement("div",{className:"pswp__caption__center"})))))})),t.DefaultLayout.propTypes=t.layoutPropTypes,t.DefaultLayout.defaultProps=t.layoutDefaultProps},75127:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},72466:(e,t,n)=>{"use strict";n.r(t),n.d(t,{Provider:()=>l,connect:()=>z,connectAdvanced:()=>j,createProvider:()=>s});var r=n(85854),o=n(84258),i=n(25732),a=n.n(i),u=a().shape({trySubscribe:a().func.isRequired,tryUnsubscribe:a().func.isRequired,notifyNestedSubs:a().func.isRequired,isSubscribed:a().func.isRequired}),c=a().shape({subscribe:a().func.isRequired,dispatch:a().func.isRequired,getState:a().func.isRequired});o.forwardRef;function s(e){var t;void 0===e&&(e="store");var n=e+"Subscription",i=function(t){(0,r.Z)(a,t);var i=a.prototype;function a(n,r){var o;return(o=t.call(this,n,r)||this)[e]=n.store,o}return i.getChildContext=function(){var t;return(t={})[e]=this[e],t[n]=null,t},i.render=function(){return o.Children.only(this.props.children)},a}(o.Component);return i.propTypes={store:c.isRequired,children:a().element.isRequired},i.childContextTypes=((t={})[e]=c.isRequired,t[n]=u,t),i}const l=s();var f=n(5573),p=n(30513),d=n(3812),h=n(37707),y=n.n(h),m=n(83021),v=n.n(m),g=n(2781),b=null,w={notify:function(){}};var O=function(){function e(e,t,n){this.store=e,this.parentSub=t,this.onStateChange=n,this.unsubscribe=null,this.listeners=w}var t=e.prototype;return t.addNestedSub=function(e){return this.trySubscribe(),this.listeners.subscribe(e)},t.notifyNestedSubs=function(){this.listeners.notify()},t.isSubscribed=function(){return Boolean(this.unsubscribe)},t.trySubscribe=function(){var e,t;this.unsubscribe||(this.unsubscribe=this.parentSub?this.parentSub.addNestedSub(this.onStateChange):this.store.subscribe(this.onStateChange),this.listeners=(e=[],t=[],{clear:function(){t=b,e=b},notify:function(){for(var n=e=t,r=0;r<n.length;r++)n[r]()},get:function(){return t},subscribe:function(n){var r=!0;return t===e&&(t=e.slice()),t.push(n),function(){r&&e!==b&&(r=!1,t===e&&(t=e.slice()),t.splice(t.indexOf(n),1))}}}))},t.tryUnsubscribe=function(){this.unsubscribe&&(this.unsubscribe(),this.unsubscribe=null,this.listeners.clear(),this.listeners=w)},e}(),E=void 0!==o.forwardRef,_=0,x={};function S(){}function j(e,t){var n,i;void 0===t&&(t={});var a=t,s=a.getDisplayName,l=void 0===s?function(e){return"ConnectAdvanced("+e+")"}:s,h=a.methodName,m=void 0===h?"connectAdvanced":h,b=a.renderCountProp,w=void 0===b?void 0:b,j=a.shouldHandleStateChanges,P=void 0===j||j,k=a.storeKey,I=void 0===k?"store":k,T=a.withRef,R=void 0!==T&&T,C=(0,d.Z)(a,["getDisplayName","methodName","renderCountProp","shouldHandleStateChanges","storeKey","withRef"]),A=I+"Subscription",N=_++,L=((n={})[I]=c,n[A]=u,n),D=((i={})[A]=u,i);return function(t){v()((0,g.isValidElementType)(t),"You must pass a component to the function returned by "+m+". Instead received "+JSON.stringify(t));var n=t.displayName||t.name||"Component",i=l(n),a=(0,p.Z)({},C,{getDisplayName:l,methodName:m,renderCountProp:w,shouldHandleStateChanges:P,storeKey:I,withRef:R,displayName:i,wrappedComponentName:n,WrappedComponent:t}),u=function(n){function u(e,t){var r;return(r=n.call(this,e,t)||this).version=N,r.state={},r.renderCount=0,r.store=e[I]||t[I],r.propsMode=Boolean(e[I]),r.setWrappedInstance=r.setWrappedInstance.bind((0,f.Z)((0,f.Z)(r))),v()(r.store,'Could not find "'+I+'" in either the context or props of "'+i+'". Either wrap the root component in a <Provider>, or explicitly pass "'+I+'" as a prop to "'+i+'".'),r.initSelector(),r.initSubscription(),r}(0,r.Z)(u,n);var c=u.prototype;return c.getChildContext=function(){var e,t=this.propsMode?null:this.subscription;return(e={})[A]=t||this.context[A],e},c.componentDidMount=function(){P&&(this.subscription.trySubscribe(),this.selector.run(this.props),this.selector.shouldComponentUpdate&&this.forceUpdate())},c.componentWillReceiveProps=function(e){this.selector.run(e)},c.shouldComponentUpdate=function(){return this.selector.shouldComponentUpdate},c.componentWillUnmount=function(){this.subscription&&this.subscription.tryUnsubscribe(),this.subscription=null,this.notifyNestedSubs=S,this.store=null,this.selector.run=S,this.selector.shouldComponentUpdate=!1},c.getWrappedInstance=function(){return v()(R,"To access the wrapped instance, you need to specify { withRef: true } in the options argument of the "+m+"() call."),this.wrappedInstance},c.setWrappedInstance=function(e){this.wrappedInstance=e},c.initSelector=function(){var t=e(this.store.dispatch,a);this.selector=function(e,t){var n={run:function(r){try{var o=e(t.getState(),r);(o!==n.props||n.error)&&(n.shouldComponentUpdate=!0,n.props=o,n.error=null)}catch(e){n.shouldComponentUpdate=!0,n.error=e}}};return n}(t,this.store),this.selector.run(this.props)},c.initSubscription=function(){if(P){var e=(this.propsMode?this.props:this.context)[A];this.subscription=new O(this.store,e,this.onStateChange.bind(this)),this.notifyNestedSubs=this.subscription.notifyNestedSubs.bind(this.subscription)}},c.onStateChange=function(){this.selector.run(this.props),this.selector.shouldComponentUpdate?(this.componentDidUpdate=this.notifyNestedSubsOnComponentDidUpdate,this.setState(x)):this.notifyNestedSubs()},c.notifyNestedSubsOnComponentDidUpdate=function(){this.componentDidUpdate=void 0,this.notifyNestedSubs()},c.isSubscribed=function(){return Boolean(this.subscription)&&this.subscription.isSubscribed()},c.addExtraProps=function(e){if(!(R||w||this.propsMode&&this.subscription))return e;var t=(0,p.Z)({},e);return R&&(t.ref=this.setWrappedInstance),w&&(t[w]=this.renderCount++),this.propsMode&&this.subscription&&(t[A]=this.subscription),t},c.render=function(){var e=this.selector;if(e.shouldComponentUpdate=!1,e.error)throw e.error;return(0,o.createElement)(t,this.addExtraProps(e.props))},u}(o.Component);return E&&(u.prototype.UNSAFE_componentWillReceiveProps=u.prototype.componentWillReceiveProps,delete u.prototype.componentWillReceiveProps),u.WrappedComponent=t,u.displayName=i,u.childContextTypes=D,u.contextTypes=L,u.propTypes=L,y()(u,t)}}var P=Object.prototype.hasOwnProperty;function k(e,t){return e===t?0!==e||0!==t||1/e==1/t:e!=e&&t!=t}function I(e,t){if(k(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(var o=0;o<n.length;o++)if(!P.call(t,n[o])||!k(e[n[o]],t[n[o]]))return!1;return!0}var T=n(51324);function R(e){return function(t,n){var r=e(t,n);function o(){return r}return o.dependsOnOwnProps=!1,o}}function C(e){return null!==e.dependsOnOwnProps&&void 0!==e.dependsOnOwnProps?Boolean(e.dependsOnOwnProps):1!==e.length}function A(e,t){return function(t,n){n.displayName;var r=function(e,t){return r.dependsOnOwnProps?r.mapToProps(e,t):r.mapToProps(e)};return r.dependsOnOwnProps=!0,r.mapToProps=function(t,n){r.mapToProps=e,r.dependsOnOwnProps=C(e);var o=r(t,n);return"function"==typeof o&&(r.mapToProps=o,r.dependsOnOwnProps=C(o),o=r(t,n)),o},r}}const N=[function(e){return"function"==typeof e?A(e):void 0},function(e){return e?void 0:R((function(e){return{dispatch:e}}))},function(e){return e&&"object"==typeof e?R((function(t){return(0,T.DE)(e,t)})):void 0}];const L=[function(e){return"function"==typeof e?A(e):void 0},function(e){return e?void 0:R((function(){return{}}))}];function D(e,t,n){return(0,p.Z)({},n,e,t)}const M=[function(e){return"function"==typeof e?function(e){return function(t,n){n.displayName;var r,o=n.pure,i=n.areMergedPropsEqual,a=!1;return function(t,n,u){var c=e(t,n,u);return a?o&&i(c,r)||(r=c):(a=!0,r=c),r}}}(e):void 0},function(e){return e?void 0:function(){return D}}];function F(e,t,n,r){return function(o,i){return n(e(o,i),t(r,i),i)}}function U(e,t,n,r,o){var i,a,u,c,s,l=o.areStatesEqual,f=o.areOwnPropsEqual,p=o.areStatePropsEqual,d=!1;function h(o,d){var h,y,m=!f(d,a),v=!l(o,i);return i=o,a=d,m&&v?(u=e(i,a),t.dependsOnOwnProps&&(c=t(r,a)),s=n(u,c,a)):m?(e.dependsOnOwnProps&&(u=e(i,a)),t.dependsOnOwnProps&&(c=t(r,a)),s=n(u,c,a)):v?(h=e(i,a),y=!p(h,u),u=h,y&&(s=n(u,c,a)),s):s}return function(o,l){return d?h(o,l):(u=e(i=o,a=l),c=t(r,a),s=n(u,c,a),d=!0,s)}}function B(e,t){var n=t.initMapStateToProps,r=t.initMapDispatchToProps,o=t.initMergeProps,i=(0,d.Z)(t,["initMapStateToProps","initMapDispatchToProps","initMergeProps"]),a=n(e,i),u=r(e,i),c=o(e,i);return(i.pure?U:F)(a,u,c,e,i)}function H(e,t,n){for(var r=t.length-1;r>=0;r--){var o=t[r](e);if(o)return o}return function(t,r){throw new Error("Invalid value of type "+typeof e+" for "+n+" argument when connecting component "+r.wrappedComponentName+".")}}function q(e,t){return e===t}const z=(V=(W=void 0===G?{}:G).connectHOC,Y=void 0===V?j:V,Z=W.mapStateToPropsFactories,$=void 0===Z?L:Z,K=W.mapDispatchToPropsFactories,Q=void 0===K?N:K,X=W.mergePropsFactories,J=void 0===X?M:X,ee=W.selectorFactory,te=void 0===ee?B:ee,function(e,t,n,r){void 0===r&&(r={});var o=r,i=o.pure,a=void 0===i||i,u=o.areStatesEqual,c=void 0===u?q:u,s=o.areOwnPropsEqual,l=void 0===s?I:s,f=o.areStatePropsEqual,h=void 0===f?I:f,y=o.areMergedPropsEqual,m=void 0===y?I:y,v=(0,d.Z)(o,["pure","areStatesEqual","areOwnPropsEqual","areStatePropsEqual","areMergedPropsEqual"]),g=H(e,$,"mapStateToProps"),b=H(t,Q,"mapDispatchToProps"),w=H(n,J,"mergeProps");return Y(te,(0,p.Z)({methodName:"connect",getDisplayName:function(e){return"Connect("+e+")"},shouldHandleStateChanges:Boolean(e),initMapStateToProps:g,initMapDispatchToProps:b,initMergeProps:w,pure:a,areStatesEqual:c,areOwnPropsEqual:l,areStatePropsEqual:h,areMergedPropsEqual:m},v))});var G,W,V,Y,Z,$,K,Q,X,J,ee,te},11023:(e,t,n)=>{"use strict";var r=n(631);function o(){}function i(){}i.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,i,a){if(a!==r){var u=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw u.name="Invariant Violation",u}}function t(){return e}e.isRequired=e;var n={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:o};return n.PropTypes=n,n}},25732:(e,t,n)=>{e.exports=n(11023)()},631:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},85201:(e,t,n)=>{"use strict";var r=n(8306);function o(){}function i(){}i.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,i,a){if(a!==r){var u=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw u.name="Invariant Violation",u}}function t(){return e}e.isRequired=e;var n={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:o};return n.PropTypes=n,n}},58137:(e,t,n)=>{e.exports=n(85201)()},8306:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},68597:(e,t,n)=>{"use strict";n.d(t,{Z:()=>m});var r=n(16727),o=n.n(r),i=n(83021),a=n.n(i),u=n(84258),c=n(24451),s=n.n(c),l=n(70454),f=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e};function p(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function d(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}var h=function(e){return 0===u.Children.count(e)},y=function(e){function t(){var n,r;p(this,t);for(var o=arguments.length,i=Array(o),a=0;a<o;a++)i[a]=arguments[a];return n=r=d(this,e.call.apply(e,[this].concat(i))),r.state={match:r.computeMatch(r.props,r.context.router)},d(r,n)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.getChildContext=function(){return{router:f({},this.context.router,{route:{location:this.props.location||this.context.router.route.location,match:this.state.match}})}},t.prototype.computeMatch=function(e,t){var n=e.computedMatch,r=e.location,o=e.path,i=e.strict,u=e.exact,c=e.sensitive;if(n)return n;a()(t,"You should not use <Route> or withRouter() outside a <Router>");var s=t.route,f=(r||s.location).pathname;return(0,l.Z)(f,{path:o,strict:i,exact:u,sensitive:c},s.match)},t.prototype.componentWillMount=function(){o()(!(this.props.component&&this.props.render),"You should not use <Route component> and <Route render> in the same route; <Route render> will be ignored"),o()(!(this.props.component&&this.props.children&&!h(this.props.children)),"You should not use <Route component> and <Route children> in the same route; <Route children> will be ignored"),o()(!(this.props.render&&this.props.children&&!h(this.props.children)),"You should not use <Route render> and <Route children> in the same route; <Route children> will be ignored")},t.prototype.componentWillReceiveProps=function(e,t){o()(!(e.location&&!this.props.location),'<Route> elements should not change from uncontrolled to controlled (or vice versa). You initially used no "location" prop and then provided one on a subsequent render.'),o()(!(!e.location&&this.props.location),'<Route> elements should not change from controlled to uncontrolled (or vice versa). You provided a "location" prop initially but omitted it on a subsequent render.'),this.setState({match:this.computeMatch(e,t.router)})},t.prototype.render=function(){var e=this.state.match,t=this.props,n=t.children,r=t.component,o=t.render,i=this.context.router,a=i.history,c=i.route,s=i.staticContext,l={match:e,location:this.props.location||c.location,history:a,staticContext:s};return r?e?u.createElement(r,l):null:o?e?o(l):null:"function"==typeof n?n(l):n&&!h(n)?u.Children.only(n):null},t}(u.Component);y.propTypes={computedMatch:s().object,path:s().string,exact:s().bool,strict:s().bool,sensitive:s().bool,component:s().func,render:s().func,children:s().oneOfType([s().func,s().node]),location:s().object},y.contextTypes={router:s().shape({history:s().object.isRequired,route:s().object.isRequired,staticContext:s().object})},y.childContextTypes={router:s().object.isRequired};const m=y},49950:(e,t,n)=>{"use strict";n.d(t,{Z:()=>h});var r=n(84258),o=n(24451),i=n.n(o),a=n(16727),u=n.n(a),c=n(83021),s=n.n(c),l=n(70454);function f(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function p(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}var d=function(e){function t(){return f(this,t),p(this,e.apply(this,arguments))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.componentWillMount=function(){s()(this.context.router,"You should not use <Switch> outside a <Router>")},t.prototype.componentWillReceiveProps=function(e){u()(!(e.location&&!this.props.location),'<Switch> elements should not change from uncontrolled to controlled (or vice versa). You initially used no "location" prop and then provided one on a subsequent render.'),u()(!(!e.location&&this.props.location),'<Switch> elements should not change from controlled to uncontrolled (or vice versa). You provided a "location" prop initially but omitted it on a subsequent render.')},t.prototype.render=function(){var e=this.context.router.route,t=this.props.children,n=this.props.location||e.location,o=void 0,i=void 0;return r.Children.forEach(t,(function(t){if(null==o&&r.isValidElement(t)){var a=t.props,u=a.path,c=a.exact,s=a.strict,f=a.sensitive,p=a.from,d=u||p;i=t,o=(0,l.Z)(n.pathname,{path:d,exact:c,strict:s,sensitive:f},e.match)}})),o?r.cloneElement(i,{location:n,computedMatch:o}):null},t}(r.Component);d.contextTypes={router:i().shape({route:i().object.isRequired}).isRequired},d.propTypes={children:i().node,location:i().object};const h=d},91499:(e,t,n)=>{"use strict";n.r(t),n.d(t,{MemoryRouter:()=>b,Prompt:()=>_,Redirect:()=>N,Route:()=>L.Z,Router:()=>y,StaticRouter:()=>V,Switch:()=>Y.Z,generatePath:()=>I,matchPath:()=>Z.Z,withRouter:()=>$.Z});var r=n(16727),o=n.n(r),i=n(84258),a=n(24451),u=n.n(a),c=n(90528),s=n(83021),l=n.n(s),f=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e};function p(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function d(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}var h=function(e){function t(){var n,r;p(this,t);for(var o=arguments.length,i=Array(o),a=0;a<o;a++)i[a]=arguments[a];return n=r=d(this,e.call.apply(e,[this].concat(i))),r.state={match:r.computeMatch(r.props.history.location.pathname)},d(r,n)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.getChildContext=function(){return{router:f({},this.context.router,{history:this.props.history,route:{location:this.props.history.location,match:this.state.match}})}},t.prototype.computeMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}},t.prototype.componentWillMount=function(){var e=this,t=this.props,n=t.children,r=t.history;l()(null==n||1===i.Children.count(n),"A <Router> may have only one child element"),this.unlisten=r.listen((function(){e.setState({match:e.computeMatch(r.location.pathname)})}))},t.prototype.componentWillReceiveProps=function(e){o()(this.props.history===e.history,"You cannot change <Router history>")},t.prototype.componentWillUnmount=function(){this.unlisten()},t.prototype.render=function(){var e=this.props.children;return e?i.Children.only(e):null},t}(i.Component);h.propTypes={history:u().object.isRequired,children:u().node},h.contextTypes={router:u().object},h.childContextTypes={router:u().object.isRequired};const y=h;function m(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function v(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}var g=function(e){function t(){var n,r;m(this,t);for(var o=arguments.length,i=Array(o),a=0;a<o;a++)i[a]=arguments[a];return n=r=v(this,e.call.apply(e,[this].concat(i))),r.history=(0,c.PP)(r.props),v(r,n)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.componentWillMount=function(){o()(!this.props.history,"<MemoryRouter> ignores the history prop. To use a custom history, use `import { Router }` instead of `import { MemoryRouter as Router }`.")},t.prototype.render=function(){return i.createElement(y,{history:this.history,children:this.props.children})},t}(i.Component);g.propTypes={initialEntries:u().array,initialIndex:u().number,getUserConfirmation:u().func,keyLength:u().number,children:u().node};const b=g;function w(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function O(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}var E=function(e){function t(){return w(this,t),O(this,e.apply(this,arguments))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.enable=function(e){this.unblock&&this.unblock(),this.unblock=this.context.router.history.block(e)},t.prototype.disable=function(){this.unblock&&(this.unblock(),this.unblock=null)},t.prototype.componentWillMount=function(){l()(this.context.router,"You should not use <Prompt> outside a <Router>"),this.props.when&&this.enable(this.props.message)},t.prototype.componentWillReceiveProps=function(e){e.when?this.props.when&&this.props.message===e.message||this.enable(e.message):this.disable()},t.prototype.componentWillUnmount=function(){this.disable()},t.prototype.render=function(){return null},t}(i.Component);E.propTypes={when:u().bool,message:u().oneOfType([u().func,u().string]).isRequired},E.defaultProps={when:!0},E.contextTypes={router:u().shape({history:u().shape({block:u().func.isRequired}).isRequired}).isRequired};const _=E;var x=n(6967),S=n.n(x),j={},P=0,k=function(e){var t=e,n=j[t]||(j[t]={});if(n[e])return n[e];var r=S().compile(e);return P<1e4&&(n[e]=r,P++),r};const I=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"/",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if("/"===e)return e;var n=k(e);return n(t,{pretty:!0})};var T=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e};function R(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function C(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}var A=function(e){function t(){return R(this,t),C(this,e.apply(this,arguments))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.isStatic=function(){return this.context.router&&this.context.router.staticContext},t.prototype.componentWillMount=function(){l()(this.context.router,"You should not use <Redirect> outside a <Router>"),this.isStatic()&&this.perform()},t.prototype.componentDidMount=function(){this.isStatic()||this.perform()},t.prototype.componentDidUpdate=function(e){var t=(0,c.ob)(e.to),n=(0,c.ob)(this.props.to);(0,c.Hp)(t,n)?o()(!1,"You tried to redirect to the same route you're currently on: \""+n.pathname+n.search+'"'):this.perform()},t.prototype.computeTo=function(e){var t=e.computedMatch,n=e.to;return t?"string"==typeof n?I(n,t.params):T({},n,{pathname:I(n.pathname,t.params)}):n},t.prototype.perform=function(){var e=this.context.router.history,t=this.props.push,n=this.computeTo(this.props);t?e.push(n):e.replace(n)},t.prototype.render=function(){return null},t}(i.Component);A.propTypes={computedMatch:u().object,push:u().bool,from:u().string,to:u().oneOfType([u().string,u().object]).isRequired},A.defaultProps={push:!1},A.contextTypes={router:u().shape({history:u().shape({push:u().func.isRequired,replace:u().func.isRequired}).isRequired,staticContext:u().object}).isRequired};const N=A;var L=n(68597),D=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e};function M(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function F(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}var U=function(e){return"/"===e.charAt(0)?e:"/"+e},B=function(e,t){return e?D({},t,{pathname:U(e)+t.pathname}):t},H=function(e,t){if(!e)return t;var n=U(e);return 0!==t.pathname.indexOf(n)?t:D({},t,{pathname:t.pathname.substr(n.length)})},q=function(e){return"string"==typeof e?e:(0,c.Ep)(e)},z=function(e){return function(){l()(!1,"You cannot %s with <StaticRouter>",e)}},G=function(){},W=function(e){function t(){var n,r;M(this,t);for(var o=arguments.length,i=Array(o),a=0;a<o;a++)i[a]=arguments[a];return n=r=F(this,e.call.apply(e,[this].concat(i))),r.createHref=function(e){return U(r.props.basename+q(e))},r.handlePush=function(e){var t=r.props,n=t.basename,o=t.context;o.action="PUSH",o.location=B(n,(0,c.ob)(e)),o.url=q(o.location)},r.handleReplace=function(e){var t=r.props,n=t.basename,o=t.context;o.action="REPLACE",o.location=B(n,(0,c.ob)(e)),o.url=q(o.location)},r.handleListen=function(){return G},r.handleBlock=function(){return G},F(r,n)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.getChildContext=function(){return{router:{staticContext:this.props.context}}},t.prototype.componentWillMount=function(){o()(!this.props.history,"<StaticRouter> ignores the history prop. To use a custom history, use `import { Router }` instead of `import { StaticRouter as Router }`.")},t.prototype.render=function(){var e=this.props,t=e.basename,n=(e.context,e.location),r=function(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}(e,["basename","context","location"]),o={createHref:this.createHref,action:"POP",location:H(t,(0,c.ob)(n)),push:this.handlePush,replace:this.handleReplace,go:z("go"),goBack:z("goBack"),goForward:z("goForward"),listen:this.handleListen,block:this.handleBlock};return i.createElement(y,D({},r,{history:o}))},t}(i.Component);W.propTypes={basename:u().string,context:u().object.isRequired,location:u().oneOfType([u().string,u().object])},W.defaultProps={basename:"",location:"/"},W.childContextTypes={router:u().object.isRequired};const V=W;var Y=n(49950),Z=n(70454),$=n(10153)},70454:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var r=n(6967),o=n.n(r),i={},a=0,u=function(e,t){var n=""+t.end+t.strict+t.sensitive,r=i[n]||(i[n]={});if(r[e])return r[e];var u=[],c={re:o()(e,u,t),keys:u};return a<1e4&&(r[e]=c,a++),c};const c=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2];"string"==typeof t&&(t={path:t});var r=t,o=r.path,i=r.exact,a=void 0!==i&&i,c=r.strict,s=void 0!==c&&c,l=r.sensitive,f=void 0!==l&&l;if(null==o)return n;var p=u(o,{end:a,strict:s,sensitive:f}),d=p.re,h=p.keys,y=d.exec(e);if(!y)return null;var m=y[0],v=y.slice(1),g=e===m;return a&&!g?null:{path:o,url:"/"===o&&""===m?"/":m,isExact:g,params:h.reduce((function(e,t,n){return e[t.name]=v[n],e}),{})}}},10153:(e,t,n)=>{"use strict";n.d(t,{Z:()=>l});var r=n(84258),o=n(24451),i=n.n(o),a=n(71471),u=n.n(a),c=n(68597),s=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e};const l=function(e){var t=function(t){var n=t.wrappedComponentRef,o=function(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}(t,["wrappedComponentRef"]);return r.createElement(c.Z,{children:function(t){return r.createElement(e,s({},o,t,{ref:n}))}})};return t.displayName="withRouter("+(e.displayName||e.name)+")",t.WrappedComponent=e,t.propTypes={wrappedComponentRef:i().func},u()(t,e)}},71471:e=>{"use strict";var t={childContextTypes:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},n={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},r=Object.defineProperty,o=Object.getOwnPropertyNames,i=Object.getOwnPropertySymbols,a=Object.getOwnPropertyDescriptor,u=Object.getPrototypeOf,c=u&&u(Object);e.exports=function e(s,l,f){if("string"!=typeof l){if(c){var p=u(l);p&&p!==c&&e(s,p,f)}var d=o(l);i&&(d=d.concat(i(l)));for(var h=0;h<d.length;++h){var y=d[h];if(!(t[y]||n[y]||f&&f[y])){var m=a(l,y);try{r(s,y,m)}catch(e){}}}return s}return s}},2717:(e,t,n)=>{"use strict";var r=n(45775);function o(){}function i(){}i.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,i,a){if(a!==r){var u=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw u.name="Invariant Violation",u}}function t(){return e}e.isRequired=e;var n={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:o};return n.PropTypes=n,n}},24451:(e,t,n)=>{e.exports=n(2717)()},45775:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},99890:(e,t,n)=>{"use strict";function r(e){return e&&"object"==typeof e&&"default"in e?e.default:e}var o=n(84258),i=r(o),a=r(n(44167));function u(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var c=!("undefined"==typeof window||!window.document||!window.document.createElement);e.exports=function(e,t,n){if("function"!=typeof e)throw new Error("Expected reducePropsToState to be a function.");if("function"!=typeof t)throw new Error("Expected handleStateChangeOnClient to be a function.");if(void 0!==n&&"function"!=typeof n)throw new Error("Expected mapStateOnServer to either be undefined or a function.");return function(r){if("function"!=typeof r)throw new Error("Expected WrappedComponent to be a React component.");var s,l=[];function f(){s=e(l.map((function(e){return e.props}))),p.canUseDOM?t(s):n&&(s=n(s))}var p=function(e){var t,n;function o(){return e.apply(this,arguments)||this}n=e,(t=o).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n,o.peek=function(){return s},o.rewind=function(){if(o.canUseDOM)throw new Error("You may only call rewind() on the server. Call peek() to read the current state.");var e=s;return s=void 0,l=[],e};var u=o.prototype;return u.shouldComponentUpdate=function(e){return!a(e,this.props)},u.componentWillMount=function(){l.push(this),f()},u.componentDidUpdate=function(){f()},u.componentWillUnmount=function(){var e=l.indexOf(this);l.splice(e,1),f()},u.render=function(){return i.createElement(r,this.props)},o}(o.Component);return u(p,"displayName","SideEffect("+function(e){return e.displayName||e.name||"Component"}(r)+")"),u(p,"canUseDOM",c),p}}},16039:(e,t,n)=>{"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=c(n(84258)),i=c(n(53486)),a=n(87095),u=c(n(22705));function c(e){return e&&e.__esModule?e:{default:e}}function s(){return(s=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}function l(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function f(e,t){return(f=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function p(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=h(e);if(t){var o=h(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return d(this,n)}}function d(e,t){return!t||"object"!==r(t)&&"function"!=typeof t?function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e):t}function h(e){return(h=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var y=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&f(e,t)}(c,e);var t,n,r,i=p(c);function c(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,c),(t=i.call(this,e)).state={headers:{}},t}return t=c,(n=[{key:"render",value:function(){var e=this.state.headers,t=this.props,n=t.className,r=t.forwardedRef,i="".concat(n||""," responsiveTable");return o.default.createElement(a.Provider,{value:e},o.default.createElement("table",s({"data-testid":"table"},(0,u.default)(this.props),{className:i,ref:r})))}}])&&l(t.prototype,n),r&&l(t,r),c}(o.default.Component);y.propTypes={className:i.default.string,forwardedRef:i.default.oneOfType([i.default.func,i.default.shape({current:i.default.instanceOf(n.g.Element)})])},y.defaultProps={className:void 0,forwardedRef:void 0};var m=o.default.forwardRef((function(e,t){return o.default.createElement(y,s({},e,{forwardedRef:t}))}));m.displayName=y.name;var v=m;t.default=v},92341:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=i(n(84258)),o=i(n(22705));function i(e){return e&&e.__esModule?e:{default:e}}function a(){return(a=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}var u=function(e){return r.default.createElement("tbody",a({"data-testid":"tbody"},(0,o.default)(e)))};t.default=u},95891:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=a(n(84258)),o=n(87095),i=a(n(74497));function a(e){return e&&e.__esModule?e:{default:e}}function u(){return(u=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}var c=function(e){return r.default.createElement(o.Consumer,null,(function(t){return r.default.createElement(i.default,u({},e,{headers:t}))}))};t.default=c},74497:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=a(n(84258)),o=a(n(53486)),i=a(n(22705));function a(e){return e&&e.__esModule?e:{default:e}}function u(){return(u=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}var c=function(e){var t=e.headers,n=e.children,o=e.columnKey,a=e.className,c=e.colSpan,s="".concat(a||""," pivoted");return c?r.default.createElement("td",u({"data-testid":"td"},(0,i.default)(e))):r.default.createElement("td",u({"data-testid":"td"},(0,i.default)(e),{className:s}),r.default.createElement("div",{"data-testid":"td-before",className:"tdBefore"},t[o]),null!=n?n:r.default.createElement("div",null," "))};c.propTypes={children:o.default.node,headers:o.default.shape({}),columnKey:o.default.number,className:o.default.string,colSpan:o.default.oneOfType([o.default.number,o.default.string])},c.defaultProps={children:void 0,headers:void 0,columnKey:void 0,className:void 0,colSpan:void 0};var s=c;t.default=s},20344:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=i(n(84258)),o=i(n(22705));function i(e){return e&&e.__esModule?e:{default:e}}function a(){return(a=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}var u=function(e){return r.default.createElement("th",a({"data-testid":"th"},(0,o.default)(e)))};t.default=u},10201:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=a(n(84258)),o=a(n(53486)),i=a(n(22705));function a(e){return e&&e.__esModule?e:{default:e}}function u(){return(u=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}var c=function(e){var t=e.children;return r.default.createElement("thead",u({"data-testid":"thead"},(0,i.default)(e)),r.default.cloneElement(t,{inHeader:!0}))};c.propTypes={children:o.default.node},c.defaultProps={children:void 0};var s=c;t.default=s},61333:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=a(n(84258)),o=n(87095),i=a(n(16148));function a(e){return e&&e.__esModule?e:{default:e}}function u(){return(u=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}var c=function(e){return r.default.createElement(o.Consumer,null,(function(t){return r.default.createElement(i.default,u({},e,{headers:t}))}))};t.default=c},16148:(e,t,n)=>{"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=u(n(84258)),i=u(n(53486)),a=u(n(22705));function u(e){return e&&e.__esModule?e:{default:e}}function c(){return(c=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}function s(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function l(e,t){return(l=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function f(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=d(e);if(t){var o=d(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return p(this,n)}}function p(e,t){return!t||"object"!==r(t)&&"function"!=typeof t?function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e):t}function d(e){return(d=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var h=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&l(e,t)}(u,e);var t,n,r,i=f(u);function u(e){var t;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,u),t=i.call(this,e);var n=e.headers;return n&&e.inHeader&&o.default.Children.map(e.children,(function(e,t){e&&(n[t]=e.props.children)})),t}return t=u,(n=[{key:"render",value:function(){var e=this.props.children;return o.default.createElement("tr",c({"data-testid":"tr"},(0,a.default)(this.props)),e&&o.default.Children.map(e,(function(e,t){return e&&o.default.cloneElement(e,{key:t,columnKey:t})})))}}])&&s(t.prototype,n),r&&s(t,r),u}(o.default.Component);h.propTypes={children:i.default.node,headers:i.default.shape({}),inHeader:i.default.bool},h.defaultProps={children:void 0,headers:void 0,inHeader:void 0};var y=h;t.default=y},73331:(e,t,n)=>{"use strict";Object.defineProperty(t,"iA",{enumerable:!0,get:function(){return r.default}}),Object.defineProperty(t,"p3",{enumerable:!0,get:function(){return o.default}}),Object.defineProperty(t,"Td",{enumerable:!0,get:function(){return i.default}}),Object.defineProperty(t,"Th",{enumerable:!0,get:function(){return a.default}}),Object.defineProperty(t,"hr",{enumerable:!0,get:function(){return u.default}}),Object.defineProperty(t,"Tr",{enumerable:!0,get:function(){return c.default}});var r=s(n(16039)),o=s(n(92341)),i=s(n(95891)),a=s(n(20344)),u=s(n(10201)),c=s(n(61333));function s(e){return e&&e.__esModule?e:{default:e}}},22705:(e,t)=>{"use strict";function n(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function r(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?n(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):n(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=function(e){return t=e,n=["inHeader","columnKey","headers","forwardedRef"],Object.keys(t).filter((function(e){return-1===n.indexOf(e)})).reduce((function(e,n){return r(r({},e),{},o({},n,t[n]))}),{});var t,n};t.default=i},87095:(e,t,n)=>{"use strict";var r;Object.defineProperty(t,"__esModule",{value:!0}),t.Consumer=t.Provider=void 0;var o=((r=n(84258))&&r.__esModule?r:{default:r}).default.createContext({}),i=o.Provider,a=o.Consumer;t.Consumer=a,t.Provider=i},47311:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,o=!1,i=void 0;try{for(var a,u=e[Symbol.iterator]();!(r=(a=u.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{!r&&u.return&&u.return()}finally{if(o)throw i}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")};function o(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}var i,a=n(14223),u=(i=a)&&i.__esModule?i:{default:i},c=function(e){return e};t.default=function(e){var t=Array.isArray(e)&&2===e.length?e:[e,null],n=r(t,2),i=n[0],a=n[1];return function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];var s=n.map((function(e){return i[e]})).filter(c);return"string"==typeof s[0]||"function"==typeof a?{key:e,className:a?a.apply(void 0,o(s)):s.join(" ")}:{key:e,style:u.default.apply(void 0,[{}].concat(o(s)))}}},e.exports=t.default},14223:e=>{"use strict";var t=Object.prototype.propertyIsEnumerable;function n(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}function r(e){var n=Object.getOwnPropertyNames(e);return Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(e))),n.filter((function(n){return t.call(e,n)}))}e.exports=Object.assign||function(e,t){for(var o,i,a=n(e),u=1;u<arguments.length;u++){o=arguments[u],i=r(Object(o));for(var c=0;c<i.length;c++)a[i[c]]=o[i[c]]}return a}},84982:(e,t,n)=>{"use strict";var r=n(59296);function o(){}function i(){}i.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,i,a){if(a!==r){var u=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw u.name="Invariant Violation",u}}function t(){return e}e.isRequired=e;var n={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:o};return n.PropTypes=n,n}},19115:(e,t,n)=>{e.exports=n(84982)()},59296:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},32867:(e,t,n)=>{"use strict";var r=n(28608),o=60103,i=60106;t.Fragment=60107,t.StrictMode=60108,t.Profiler=60114;var a=60109,u=60110,c=60112;t.Suspense=60113;var s=60115,l=60116;if("function"==typeof Symbol&&Symbol.for){var f=Symbol.for;o=f("react.element"),i=f("react.portal"),t.Fragment=f("react.fragment"),t.StrictMode=f("react.strict_mode"),t.Profiler=f("react.profiler"),a=f("react.provider"),u=f("react.context"),c=f("react.forward_ref"),t.Suspense=f("react.suspense"),s=f("react.memo"),l=f("react.lazy")}var p="function"==typeof Symbol&&Symbol.iterator;function d(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},y={};function m(e,t,n){this.props=e,this.context=t,this.refs=y,this.updater=n||h}function v(){}function g(e,t,n){this.props=e,this.context=t,this.refs=y,this.updater=n||h}m.prototype.isReactComponent={},m.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error(d(85));this.updater.enqueueSetState(this,e,t,"setState")},m.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},v.prototype=m.prototype;var b=g.prototype=new v;b.constructor=g,r(b,m.prototype),b.isPureReactComponent=!0;var w={current:null},O=Object.prototype.hasOwnProperty,E={key:!0,ref:!0,__self:!0,__source:!0};function _(e,t,n){var r,i={},a=null,u=null;if(null!=t)for(r in void 0!==t.ref&&(u=t.ref),void 0!==t.key&&(a=""+t.key),t)O.call(t,r)&&!E.hasOwnProperty(r)&&(i[r]=t[r]);var c=arguments.length-2;if(1===c)i.children=n;else if(1<c){for(var s=Array(c),l=0;l<c;l++)s[l]=arguments[l+2];i.children=s}if(e&&e.defaultProps)for(r in c=e.defaultProps)void 0===i[r]&&(i[r]=c[r]);return{$$typeof:o,type:e,key:a,ref:u,props:i,_owner:w.current}}function x(e){return"object"==typeof e&&null!==e&&e.$$typeof===o}var S=/\/+/g;function j(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function P(e,t,n,r,a){var u=typeof e;"undefined"!==u&&"boolean"!==u||(e=null);var c=!1;if(null===e)c=!0;else switch(u){case"string":case"number":c=!0;break;case"object":switch(e.$$typeof){case o:case i:c=!0}}if(c)return a=a(c=e),e=""===r?"."+j(c,0):r,Array.isArray(a)?(n="",null!=e&&(n=e.replace(S,"$&/")+"/"),P(a,t,n,"",(function(e){return e}))):null!=a&&(x(a)&&(a=function(e,t){return{$$typeof:o,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(a,n+(!a.key||c&&c.key===a.key?"":(""+a.key).replace(S,"$&/")+"/")+e)),t.push(a)),1;if(c=0,r=""===r?".":r+":",Array.isArray(e))for(var s=0;s<e.length;s++){var l=r+j(u=e[s],s);c+=P(u,t,n,l,a)}else if("function"==typeof(l=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=p&&e[p]||e["@@iterator"])?e:null}(e)))for(e=l.call(e),s=0;!(u=e.next()).done;)c+=P(u=u.value,t,n,l=r+j(u,s++),a);else if("object"===u)throw t=""+e,Error(d(31,"[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t));return c}function k(e,t,n){if(null==e)return e;var r=[],o=0;return P(e,r,"","",(function(e){return t.call(n,e,o++)})),r}function I(e){if(-1===e._status){var t=e._result;t=t(),e._status=0,e._result=t,t.then((function(t){0===e._status&&(t=t.default,e._status=1,e._result=t)}),(function(t){0===e._status&&(e._status=2,e._result=t)}))}if(1===e._status)return e._result;throw e._result}var T={current:null};function R(){var e=T.current;if(null===e)throw Error(d(321));return e}var C={ReactCurrentDispatcher:T,ReactCurrentBatchConfig:{transition:0},ReactCurrentOwner:w,IsSomeRendererActing:{current:!1},assign:r};t.Children={map:k,forEach:function(e,t,n){k(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return k(e,(function(){t++})),t},toArray:function(e){return k(e,(function(e){return e}))||[]},only:function(e){if(!x(e))throw Error(d(143));return e}},t.Component=m,t.PureComponent=g,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=C,t.cloneElement=function(e,t,n){if(null==e)throw Error(d(267,e));var i=r({},e.props),a=e.key,u=e.ref,c=e._owner;if(null!=t){if(void 0!==t.ref&&(u=t.ref,c=w.current),void 0!==t.key&&(a=""+t.key),e.type&&e.type.defaultProps)var s=e.type.defaultProps;for(l in t)O.call(t,l)&&!E.hasOwnProperty(l)&&(i[l]=void 0===t[l]&&void 0!==s?s[l]:t[l])}var l=arguments.length-2;if(1===l)i.children=n;else if(1<l){s=Array(l);for(var f=0;f<l;f++)s[f]=arguments[f+2];i.children=s}return{$$typeof:o,type:e.type,key:a,ref:u,props:i,_owner:c}},t.createContext=function(e,t){return void 0===t&&(t=null),(e={$$typeof:u,_calculateChangedBits:t,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:a,_context:e},e.Consumer=e},t.createElement=_,t.createFactory=function(e){var t=_.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:c,render:e}},t.isValidElement=x,t.lazy=function(e){return{$$typeof:l,_payload:{_status:-1,_result:e},_init:I}},t.memo=function(e,t){return{$$typeof:s,type:e,compare:void 0===t?null:t}},t.useCallback=function(e,t){return R().useCallback(e,t)},t.useContext=function(e,t){return R().useContext(e,t)},t.useDebugValue=function(){},t.useEffect=function(e,t){return R().useEffect(e,t)},t.useImperativeHandle=function(e,t,n){return R().useImperativeHandle(e,t,n)},t.useLayoutEffect=function(e,t){return R().useLayoutEffect(e,t)},t.useMemo=function(e,t){return R().useMemo(e,t)},t.useReducer=function(e,t,n){return R().useReducer(e,t,n)},t.useRef=function(e){return R().useRef(e)},t.useState=function(e){return R().useState(e)},t.version="17.0.2"},84258:(e,t,n)=>{"use strict";e.exports=n(32867)},13586:function(e,t,n){!function(e){"use strict";function t(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}function r(e,t){Object.defineProperty(this,"kind",{value:e,enumerable:!0}),t&&t.length&&Object.defineProperty(this,"path",{value:t,enumerable:!0})}function o(e,t,n){o.super_.call(this,"E",e),Object.defineProperty(this,"lhs",{value:t,enumerable:!0}),Object.defineProperty(this,"rhs",{value:n,enumerable:!0})}function i(e,t){i.super_.call(this,"N",e),Object.defineProperty(this,"rhs",{value:t,enumerable:!0})}function a(e,t){a.super_.call(this,"D",e),Object.defineProperty(this,"lhs",{value:t,enumerable:!0})}function u(e,t,n){u.super_.call(this,"A",e),Object.defineProperty(this,"index",{value:t,enumerable:!0}),Object.defineProperty(this,"item",{value:n,enumerable:!0})}function c(e,t,n){var r=e.slice((n||t)+1||e.length);return e.length=t<0?e.length+t:t,e.push.apply(e,r),e}function s(e){var t=void 0===e?"undefined":T(e);return"object"!==t?t:e===Math?"math":null===e?"null":Array.isArray(e)?"array":"[object Date]"===Object.prototype.toString.call(e)?"date":"function"==typeof e.toString&&/^\/.*\//.test(e.toString())?"regexp":"object"}function l(e,t,n,r,f,p,d){d=d||[];var h=(f=f||[]).slice(0);if(void 0!==p){if(r){if("function"==typeof r&&r(h,p))return;if("object"===(void 0===r?"undefined":T(r))){if(r.prefilter&&r.prefilter(h,p))return;if(r.normalize){var y=r.normalize(h,p,e,t);y&&(e=y[0],t=y[1])}}}h.push(p)}"regexp"===s(e)&&"regexp"===s(t)&&(e=e.toString(),t=t.toString());var m=void 0===e?"undefined":T(e),v=void 0===t?"undefined":T(t),g="undefined"!==m||d&&d[d.length-1].lhs&&d[d.length-1].lhs.hasOwnProperty(p),b="undefined"!==v||d&&d[d.length-1].rhs&&d[d.length-1].rhs.hasOwnProperty(p);if(!g&&b)n(new i(h,t));else if(!b&&g)n(new a(h,e));else if(s(e)!==s(t))n(new o(h,e,t));else if("date"===s(e)&&e-t!=0)n(new o(h,e,t));else if("object"===m&&null!==e&&null!==t)if(d.filter((function(t){return t.lhs===e})).length)e!==t&&n(new o(h,e,t));else{if(d.push({lhs:e,rhs:t}),Array.isArray(e)){var w;for(e.length,w=0;w<e.length;w++)w>=t.length?n(new u(h,w,new a(void 0,e[w]))):l(e[w],t[w],n,r,h,w,d);for(;w<t.length;)n(new u(h,w,new i(void 0,t[w++])))}else{var O=Object.keys(e),E=Object.keys(t);O.forEach((function(o,i){var a=E.indexOf(o);a>=0?(l(e[o],t[o],n,r,h,o,d),E=c(E,a)):l(e[o],void 0,n,r,h,o,d)})),E.forEach((function(e){l(void 0,t[e],n,r,h,e,d)}))}d.length=d.length-1}else e!==t&&("number"===m&&isNaN(e)&&isNaN(t)||n(new o(h,e,t)))}function f(e,t,n,r){return r=r||[],l(e,t,(function(e){e&&r.push(e)}),n),r.length?r:void 0}function p(e,t,n){if(n.path&&n.path.length){var r,o=e[t],i=n.path.length-1;for(r=0;r<i;r++)o=o[n.path[r]];switch(n.kind){case"A":p(o[n.path[r]],n.index,n.item);break;case"D":delete o[n.path[r]];break;case"E":case"N":o[n.path[r]]=n.rhs}}else switch(n.kind){case"A":p(e[t],n.index,n.item);break;case"D":e=c(e,t);break;case"E":case"N":e[t]=n.rhs}return e}function d(e,t,n){if(e&&t&&n&&n.kind){for(var r=e,o=-1,i=n.path?n.path.length-1:0;++o<i;)void 0===r[n.path[o]]&&(r[n.path[o]]="number"==typeof n.path[o]?[]:{}),r=r[n.path[o]];switch(n.kind){case"A":p(n.path?r[n.path[o]]:r,n.index,n.item);break;case"D":delete r[n.path[o]];break;case"E":case"N":r[n.path[o]]=n.rhs}}}function h(e,t,n){if(n.path&&n.path.length){var r,o=e[t],i=n.path.length-1;for(r=0;r<i;r++)o=o[n.path[r]];switch(n.kind){case"A":h(o[n.path[r]],n.index,n.item);break;case"D":case"E":o[n.path[r]]=n.lhs;break;case"N":delete o[n.path[r]]}}else switch(n.kind){case"A":h(e[t],n.index,n.item);break;case"D":case"E":e[t]=n.lhs;break;case"N":e=c(e,t)}return e}function y(e,t,n){if(e&&t&&n&&n.kind){var r,o,i=e;for(o=n.path.length-1,r=0;r<o;r++)void 0===i[n.path[r]]&&(i[n.path[r]]={}),i=i[n.path[r]];switch(n.kind){case"A":h(i[n.path[r]],n.index,n.item);break;case"D":case"E":i[n.path[r]]=n.lhs;break;case"N":delete i[n.path[r]]}}}function m(e,t,n){e&&t&&l(e,t,(function(r){n&&!n(e,t,r)||d(e,t,r)}))}function v(e){return"color: "+A[e].color+"; font-weight: bold"}function g(e){var t=e.kind,n=e.path,r=e.lhs,o=e.rhs,i=e.index,a=e.item;switch(t){case"E":return[n.join("."),r,"→",o];case"N":return[n.join("."),o];case"D":return[n.join(".")];case"A":return[n.join(".")+"["+i+"]",a];default:return[]}}function b(e,t,n,r){var o=f(e,t);try{r?n.groupCollapsed("diff"):n.group("diff")}catch(e){n.log("diff")}o?o.forEach((function(e){var t=e.kind,r=g(e);n.log.apply(n,["%c "+A[t].text,v(t)].concat(R(r)))})):n.log("—— no diff ——");try{n.groupEnd()}catch(e){n.log("—— diff end —— ")}}function w(e,t,n,r){switch(void 0===e?"undefined":T(e)){case"object":return"function"==typeof e[r]?e[r].apply(e,R(n)):e[r];case"function":return e(t);default:return e}}function O(e){var t=e.timestamp,n=e.duration;return function(e,r,o){var i=["action"];return i.push("%c"+String(e.type)),t&&i.push("%c@ "+r),n&&i.push("%c(in "+o.toFixed(2)+" ms)"),i.join(" ")}}function E(e,t){var n=t.logger,r=t.actionTransformer,o=t.titleFormatter,i=void 0===o?O(t):o,a=t.collapsed,u=t.colors,c=t.level,s=t.diff,l=void 0===t.titleFormatter;e.forEach((function(o,f){var p=o.started,d=o.startedTime,h=o.action,y=o.prevState,m=o.error,v=o.took,g=o.nextState,O=e[f+1];O&&(g=O.prevState,v=O.started-p);var E=r(h),_="function"==typeof a?a((function(){return g}),h,o):a,x=k(d),S=u.title?"color: "+u.title(E)+";":"",j=["color: gray; font-weight: lighter;"];j.push(S),t.timestamp&&j.push("color: gray; font-weight: lighter;"),t.duration&&j.push("color: gray; font-weight: lighter;");var P=i(E,x,v);try{_?u.title&&l?n.groupCollapsed.apply(n,["%c "+P].concat(j)):n.groupCollapsed(P):u.title&&l?n.group.apply(n,["%c "+P].concat(j)):n.group(P)}catch(e){n.log(P)}var I=w(c,E,[y],"prevState"),T=w(c,E,[E],"action"),R=w(c,E,[m,y],"error"),C=w(c,E,[g],"nextState");if(I)if(u.prevState){var A="color: "+u.prevState(y)+"; font-weight: bold";n[I]("%c prev state",A,y)}else n[I]("prev state",y);if(T)if(u.action){var N="color: "+u.action(E)+"; font-weight: bold";n[T]("%c action ",N,E)}else n[T]("action ",E);if(m&&R)if(u.error){var L="color: "+u.error(m,y)+"; font-weight: bold;";n[R]("%c error ",L,m)}else n[R]("error ",m);if(C)if(u.nextState){var D="color: "+u.nextState(g)+"; font-weight: bold";n[C]("%c next state",D,g)}else n[C]("next state",g);s&&b(y,g,n,_);try{n.groupEnd()}catch(e){n.log("—— log end ——")}}))}function _(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=Object.assign({},N,e),n=t.logger,r=t.stateTransformer,o=t.errorTransformer,i=t.predicate,a=t.logErrors,u=t.diffPredicate;if(void 0===n)return function(){return function(e){return function(t){return e(t)}}};if(e.getState&&e.dispatch)return function(){return function(e){return function(t){return e(t)}}};var c=[];return function(e){var n=e.getState;return function(e){return function(s){if("function"==typeof i&&!i(n,s))return e(s);var l={};c.push(l),l.started=I.now(),l.startedTime=new Date,l.prevState=r(n()),l.action=s;var f=void 0;if(a)try{f=e(s)}catch(e){l.error=o(e)}else f=e(s);l.took=I.now()-l.started,l.nextState=r(n());var p=t.diff&&"function"==typeof u?u(n,s):t.diff;if(E(c,Object.assign({},t,{diff:p})),c.length=0,l.error)throw l.error;return f}}}}var x,S,j=function(e,t){return new Array(t+1).join(e)},P=function(e,t){return j("0",t-e.toString().length)+e},k=function(e){return P(e.getHours(),2)+":"+P(e.getMinutes(),2)+":"+P(e.getSeconds(),2)+"."+P(e.getMilliseconds(),3)},I="undefined"!=typeof performance&&null!==performance&&"function"==typeof performance.now?performance:Date,T="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},R=function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)},C=[];x="object"===(void 0===n.g?"undefined":T(n.g))&&n.g?n.g:"undefined"!=typeof window?window:{},(S=x.DeepDiff)&&C.push((function(){void 0!==S&&x.DeepDiff===f&&(x.DeepDiff=S,S=void 0)})),t(o,r),t(i,r),t(a,r),t(u,r),Object.defineProperties(f,{diff:{value:f,enumerable:!0},observableDiff:{value:l,enumerable:!0},applyDiff:{value:m,enumerable:!0},applyChange:{value:d,enumerable:!0},revertChange:{value:y,enumerable:!0},isConflict:{value:function(){return void 0!==S},enumerable:!0},noConflict:{value:function(){return C&&(C.forEach((function(e){e()})),C=null),f},enumerable:!0}});var A={E:{color:"#2196F3",text:"CHANGED:"},N:{color:"#4CAF50",text:"ADDED:"},D:{color:"#F44336",text:"DELETED:"},A:{color:"#2196F3",text:"ARRAY:"}},N={level:"log",logger:console,logErrors:!0,collapsed:void 0,predicate:void 0,duration:!1,timestamp:!0,stateTransformer:function(e){return e},actionTransformer:function(e){return e},errorTransformer:function(e){return e},colors:{title:function(){return"inherit"},prevState:function(){return"#9E9E9E"},action:function(){return"#03A9F4"},nextState:function(){return"#4CAF50"},error:function(){return"#F20404"}},diff:!1,diffPredicate:void 0,transformer:void 0},L=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.dispatch,n=e.getState;return"function"==typeof t||"function"==typeof n?_()({dispatch:t,getState:n}):void 0};e.defaults=N,e.createLogger=_,e.logger=L,e.default=L,Object.defineProperty(e,"__esModule",{value:!0})}(t)},56325:(e,t)=>{"use strict";var n=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.gw=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=void 0,r=new Promise((function(r){n=setTimeout((function(){return r(t)}),e)}));return r[u]=function(){return clearTimeout(n)},r};var o=function(e){return"@@redux-saga/"+e},i=o("TASK"),a=o("HELPER"),u=(o("MATCH"),o("CANCEL_PROMISE")),c=o("SAGA_ACTION"),s=(o("SELF_CANCELLATION"),function(e){return function(){return e}});s(!0),s(!1);var l=Object.prototype.hasOwnProperty;function f(e,t){return p.notUndef(e)&&l.call(e,t)}var p={undef:function(e){return null==e},notUndef:function(e){return null!=e},func:function(e){return"function"==typeof e},number:function(e){return"number"==typeof e},string:function(e){return"string"==typeof e},array:Array.isArray,object:function(e){return e&&!p.array(e)&&"object"===(void 0===e?"undefined":r(e))},promise:function(e){return e&&p.func(e.then)},iterator:function(e){return e&&p.func(e.next)&&p.func(e.throw)},iterable:function(e){return e&&p.func(Symbol)?p.func(e[Symbol.iterator]):p.array(e)},task:function(e){return e&&e[i]},observable:function(e){return e&&p.func(e.subscribe)},buffer:function(e){return e&&p.func(e.isEmpty)&&p.func(e.take)&&p.func(e.put)},pattern:function(e){return e&&(p.string(e)||"symbol"===(void 0===e?"undefined":r(e))||p.func(e)||p.array(e))},channel:function(e){return e&&p.func(e.take)&&p.func(e.close)},helper:function(e){return e&&e[a]},stringableFunc:function(e){return p.func(e)&&f(e,"toString")}};function d(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=n({},e),r=new Promise((function(e,n){t.resolve=e,t.reject=n}));return t.promise=r,t}function h(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return function(){return++e}}h();var y=function(e){throw e},m=function(e){return{value:e,done:!0}};function v(e,t){}},51324:(e,t,n)=>{"use strict";function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function a(e){return"Minified Redux error #"+e+"; visit https://redux.js.org/Errors?code="+e+" for the full message or use the non-minified dev environment for full errors. "}n.d(t,{md:()=>m,DE:()=>h,UY:()=>p,qC:()=>y,MT:()=>f});var u="function"==typeof Symbol&&Symbol.observable||"@@observable",c=function(){return Math.random().toString(36).substring(7).split("").join(".")},s={INIT:"@@redux/INIT"+c(),REPLACE:"@@redux/REPLACE"+c(),PROBE_UNKNOWN_ACTION:function(){return"@@redux/PROBE_UNKNOWN_ACTION"+c()}};function l(e){if("object"!=typeof e||null===e)return!1;for(var t=e;null!==Object.getPrototypeOf(t);)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t}function f(e,t,n){var r;if("function"==typeof t&&"function"==typeof n||"function"==typeof n&&"function"==typeof arguments[3])throw new Error(a(0));if("function"==typeof t&&void 0===n&&(n=t,t=void 0),void 0!==n){if("function"!=typeof n)throw new Error(a(1));return n(f)(e,t)}if("function"!=typeof e)throw new Error(a(2));var o=e,i=t,c=[],p=c,d=!1;function h(){p===c&&(p=c.slice())}function y(){if(d)throw new Error(a(3));return i}function m(e){if("function"!=typeof e)throw new Error(a(4));if(d)throw new Error(a(5));var t=!0;return h(),p.push(e),function(){if(t){if(d)throw new Error(a(6));t=!1,h();var n=p.indexOf(e);p.splice(n,1),c=null}}}function v(e){if(!l(e))throw new Error(a(7));if(void 0===e.type)throw new Error(a(8));if(d)throw new Error(a(9));try{d=!0,i=o(i,e)}finally{d=!1}for(var t=c=p,n=0;n<t.length;n++){(0,t[n])()}return e}function g(e){if("function"!=typeof e)throw new Error(a(10));o=e,v({type:s.REPLACE})}function b(){var e,t=m;return(e={subscribe:function(e){if("object"!=typeof e||null===e)throw new Error(a(11));function n(){e.next&&e.next(y())}return n(),{unsubscribe:t(n)}}})[u]=function(){return this},e}return v({type:s.INIT}),(r={dispatch:v,subscribe:m,getState:y,replaceReducer:g})[u]=b,r}function p(e){for(var t=Object.keys(e),n={},r=0;r<t.length;r++){var o=t[r];0,"function"==typeof e[o]&&(n[o]=e[o])}var i,u=Object.keys(n);try{!function(e){Object.keys(e).forEach((function(t){var n=e[t];if(void 0===n(void 0,{type:s.INIT}))throw new Error(a(12));if(void 0===n(void 0,{type:s.PROBE_UNKNOWN_ACTION()}))throw new Error(a(13))}))}(n)}catch(e){i=e}return function(e,t){if(void 0===e&&(e={}),i)throw i;for(var r=!1,o={},c=0;c<u.length;c++){var s=u[c],l=n[s],f=e[s],p=l(f,t);if(void 0===p){t&&t.type;throw new Error(a(14))}o[s]=p,r=r||p!==f}return(r=r||u.length!==Object.keys(e).length)?o:e}}function d(e,t){return function(){return t(e.apply(this,arguments))}}function h(e,t){if("function"==typeof e)return d(e,t);if("object"!=typeof e||null===e)throw new Error(a(16));var n={};for(var r in e){var o=e[r];"function"==typeof o&&(n[r]=d(o,t))}return n}function y(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return 0===t.length?function(e){return e}:1===t.length?t[0]:t.reduce((function(e,t){return function(){return e(t.apply(void 0,arguments))}}))}function m(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return function(e){return function(){var n=e.apply(void 0,arguments),r=function(){throw new Error(a(15))},o={getState:n.getState,dispatch:function(){return r.apply(void 0,arguments)}},u=t.map((function(e){return e(o)}));return r=y.apply(void 0,u)(n.dispatch),i(i({},n),{},{dispatch:r})}}}},39425:e=>{var t=function(e){"use strict";var t,n=Object.prototype,r=n.hasOwnProperty,o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",a=o.asyncIterator||"@@asyncIterator",u=o.toStringTag||"@@toStringTag";function c(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,n){return e[t]=n}}function s(e,t,n,r){var o=t&&t.prototype instanceof m?t:m,i=Object.create(o.prototype),a=new k(r||[]);return i._invoke=function(e,t,n){var r=f;return function(o,i){if(r===d)throw new Error("Generator is already running");if(r===h){if("throw"===o)throw i;return T()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=S(a,n);if(u){if(u===y)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(r===f)throw r=h,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r=d;var c=l(e,t,n);if("normal"===c.type){if(r=n.done?h:p,c.arg===y)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r=h,n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function l(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=s;var f="suspendedStart",p="suspendedYield",d="executing",h="completed",y={};function m(){}function v(){}function g(){}var b={};b[i]=function(){return this};var w=Object.getPrototypeOf,O=w&&w(w(I([])));O&&O!==n&&r.call(O,i)&&(b=O);var E=g.prototype=m.prototype=Object.create(b);function _(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function x(e,t){function n(o,i,a,u){var c=l(e[o],e,i);if("throw"!==c.type){var s=c.arg,f=s.value;return f&&"object"==typeof f&&r.call(f,"__await")?t.resolve(f.__await).then((function(e){n("next",e,a,u)}),(function(e){n("throw",e,a,u)})):t.resolve(f).then((function(e){s.value=e,a(s)}),(function(e){return n("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,r){function i(){return new t((function(t,o){n(e,r,t,o)}))}return o=o?o.then(i,i):i()}}function S(e,n){var r=e.iterator[n.method];if(r===t){if(n.delegate=null,"throw"===n.method){if(e.iterator.return&&(n.method="return",n.arg=t,S(e,n),"throw"===n.method))return y;n.method="throw",n.arg=new TypeError("The iterator does not provide a 'throw' method")}return y}var o=l(r,e.iterator,n.arg);if("throw"===o.type)return n.method="throw",n.arg=o.arg,n.delegate=null,y;var i=o.arg;return i?i.done?(n[e.resultName]=i.value,n.next=e.nextLoc,"return"!==n.method&&(n.method="next",n.arg=t),n.delegate=null,y):i:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,y)}function j(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function P(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function k(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(j,this),this.reset(!0)}function I(e){if(e){var n=e[i];if(n)return n.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var o=-1,a=function n(){for(;++o<e.length;)if(r.call(e,o))return n.value=e[o],n.done=!1,n;return n.value=t,n.done=!0,n};return a.next=a}}return{next:T}}function T(){return{value:t,done:!0}}return v.prototype=E.constructor=g,g.constructor=v,v.displayName=c(g,u,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===v||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,g):(e.__proto__=g,c(e,u,"GeneratorFunction")),e.prototype=Object.create(E),e},e.awrap=function(e){return{__await:e}},_(x.prototype),x.prototype[a]=function(){return this},e.AsyncIterator=x,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new x(s(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},_(E),c(E,u,"Generator"),E[i]=function(){return this},E.toString=function(){return"[object Generator]"},e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=I,k.prototype={constructor:k,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=t,this.done=!1,this.delegate=null,this.method="next",this.arg=t,this.tryEntries.forEach(P),!e)for(var n in this)"t"===n.charAt(0)&&r.call(this,n)&&!isNaN(+n.slice(1))&&(this[n]=t)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var n=this;function o(r,o){return u.type="throw",u.arg=e,n.next=r,o&&(n.method="next",n.arg=t),!!o}for(var i=this.tryEntries.length-1;i>=0;--i){var a=this.tryEntries[i],u=a.completion;if("root"===a.tryLoc)return o("end");if(a.tryLoc<=this.prev){var c=r.call(a,"catchLoc"),s=r.call(a,"finallyLoc");if(c&&s){if(this.prev<a.catchLoc)return o(a.catchLoc,!0);if(this.prev<a.finallyLoc)return o(a.finallyLoc)}else if(c){if(this.prev<a.catchLoc)return o(a.catchLoc,!0)}else{if(!s)throw new Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return o(a.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,y):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),y},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),P(n),y}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;P(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,n,r){return this.delegate={iterator:I(e),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=t),y}},e}(e.exports);try{regeneratorRuntime=t}catch(e){Function("r","regeneratorRuntime = r")(t)}},62673:(e,t,n)=>{var r=n(16274),o=r.Buffer;function i(e,t){for(var n in e)t[n]=e[n]}function a(e,t,n){return o(e,t,n)}o.from&&o.alloc&&o.allocUnsafe&&o.allocUnsafeSlow?e.exports=r:(i(r,t),t.Buffer=a),a.prototype=Object.create(o.prototype),i(o,a),a.from=function(e,t,n){if("number"==typeof e)throw new TypeError("Argument must not be a number");return o(e,t,n)},a.alloc=function(e,t,n){if("number"!=typeof e)throw new TypeError("Argument must be a number");var r=o(e);return void 0!==t?"string"==typeof n?r.fill(t,n):r.fill(t):r.fill(0),r},a.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return o(e)},a.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return r.SlowBuffer(e)}},44238:e=>{"use strict";var t=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,o=!1,i=void 0;try{for(var a,u=e[Symbol.iterator]();!(r=(a=u.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{!r&&u.return&&u.return()}finally{if(o)throw i}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")};e.exports=function(e){var n=e.data,r=e.multiSection;function o(e){var o=t(e,2),i=o[0],a=o[1];return r?null===a||a===n[i]-1?null===(i=function(e){for(null===e?e=0:e++;e<n.length&&0===n[e];)e++;return e===n.length?null:e}(i))?[null,null]:[i,0]:[i,a+1]:0===n||a===n-1?[null,null]:null===a?[null,0]:[null,a+1]}return{next:o,prev:function(e){var o=t(e,2),i=o[0],a=o[1];return r?null===a||0===a?null===(i=function(e){for(null===e?e=n.length-1:e--;e>=0&&0===n[e];)e--;return-1===e?null:e}(i))?[null,null]:[i,n[i]-1]:[i,a-1]:0===n||0===a?[null,null]:null===a?[null,n-1]:[null,a-1]},isLast:function(e){return null===o(e)[1]}}}},10017:(e,t,n)=>{"use strict";var r=n(57990),o=function(){for(var e=r(16),t="",n=0;n<16;++n)t+=e[n].toString(16);return t}(),i=new RegExp('(\\\\)?"@__(F|R|D|M|S|A|U|I|B|L)-'+o+'-(\\d+)__@"',"g"),a=/\{\s*\[native code\]\s*\}/g,u=/function.*?\(/,c=/.*?=>.*?/,s=/[<>\/\u2028\u2029]/g,l=["*","async"],f={"<":"\\u003C",">":"\\u003E","/":"\\u002F","\u2028":"\\u2028","\u2029":"\\u2029"};function p(e){return f[e]}e.exports=function e(t,n){n||(n={}),"number"!=typeof n&&"string"!=typeof n||(n={space:n});var r,f=[],d=[],h=[],y=[],m=[],v=[],g=[],b=[],w=[],O=[];return n.ignoreFunction&&"function"==typeof t&&(t=void 0),void 0===t?String(t):"string"!=typeof(r=n.isJSON&&!n.space?JSON.stringify(t):JSON.stringify(t,n.isJSON?null:function(e,t){if(n.ignoreFunction&&function(e){var t=[];for(var n in e)"function"==typeof e[n]&&t.push(n);for(var r=0;r<t.length;r++)delete e[t[r]]}(t),!t&&void 0!==t)return t;var r=this[e],i=typeof r;if("object"===i){if(r instanceof RegExp)return"@__R-"+o+"-"+(d.push(r)-1)+"__@";if(r instanceof Date)return"@__D-"+o+"-"+(h.push(r)-1)+"__@";if(r instanceof Map)return"@__M-"+o+"-"+(y.push(r)-1)+"__@";if(r instanceof Set)return"@__S-"+o+"-"+(m.push(r)-1)+"__@";if(r instanceof Array&&r.filter((function(){return!0})).length!==r.length)return"@__A-"+o+"-"+(v.push(r)-1)+"__@";if(r instanceof URL)return"@__L-"+o+"-"+(O.push(r)-1)+"__@"}return"function"===i?"@__F-"+o+"-"+(f.push(r)-1)+"__@":"undefined"===i?"@__U-"+o+"-"+(g.push(r)-1)+"__@":"number"!==i||isNaN(r)||isFinite(r)?"bigint"===i?"@__B-"+o+"-"+(w.push(r)-1)+"__@":t:"@__I-"+o+"-"+(b.push(r)-1)+"__@"},n.space))?String(r):(!0!==n.unsafe&&(r=r.replace(s,p)),0===f.length&&0===d.length&&0===h.length&&0===y.length&&0===m.length&&0===v.length&&0===g.length&&0===b.length&&0===w.length&&0===O.length?r:r.replace(i,(function(t,r,o,i){return r?t:"D"===o?'new Date("'+h[i].toISOString()+'")':"R"===o?"new RegExp("+e(d[i].source)+', "'+d[i].flags+'")':"M"===o?"new Map("+e(Array.from(y[i].entries()),n)+")":"S"===o?"new Set("+e(Array.from(m[i].values()),n)+")":"A"===o?"Array.prototype.slice.call("+e(Object.assign({length:v[i].length},v[i]),n)+")":"U"===o?"undefined":"I"===o?b[i]:"B"===o?'BigInt("'+w[i]+'")':"L"===o?'new URL("'+O[i].toString()+'")':function(e){var t=e.toString();if(a.test(t))throw new TypeError("Serializing native function: "+e.name);if(u.test(t))return t;if(c.test(t))return t;var n=t.indexOf("("),r=t.substr(0,n).trim().split(" ").filter((function(e){return e.length>0}));return r.filter((function(e){return-1===l.indexOf(e)})).length>0?(r.indexOf("async")>-1?"async ":"")+"function"+(r.join("").indexOf("*")>-1?"*":"")+t.substr(n):t}(f[i])})))}},9985:e=>{"use strict";e.exports=function(e,t){if(e===t)return!0;if(!e||!t)return!1;var n=e.length;if(t.length!==n)return!1;for(var r=0;r<n;r++)if(e[r]!==t[r])return!1;return!0}},44167:e=>{e.exports=function(e,t,n,r){var o=n?n.call(r,e,t):void 0;if(void 0!==o)return!!o;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var i=Object.keys(e),a=Object.keys(t);if(i.length!==a.length)return!1;for(var u=Object.prototype.hasOwnProperty.bind(t),c=0;c<i.length;c++){var s=i[c];if(!u(s))return!1;var l=e[s],f=t[s];if(!1===(o=n?n.call(r,l,f,s):void 0)||void 0===o&&l!==f)return!1}return!0}},31059:(e,t,n)=>{"use strict";var r=n(13049),o=n(77352),i=n(50266),a=r("%TypeError%"),u=r("%WeakMap%",!0),c=r("%Map%",!0),s=o("WeakMap.prototype.get",!0),l=o("WeakMap.prototype.set",!0),f=o("WeakMap.prototype.has",!0),p=o("Map.prototype.get",!0),d=o("Map.prototype.set",!0),h=o("Map.prototype.has",!0),y=function(e,t){for(var n,r=e;null!==(n=r.next);r=n)if(n.key===t)return r.next=n.next,n.next=e.next,e.next=n,n};e.exports=function(){var e,t,n,r={assert:function(e){if(!r.has(e))throw new a("Side channel does not contain "+i(e))},get:function(r){if(u&&r&&("object"==typeof r||"function"==typeof r)){if(e)return s(e,r)}else if(c){if(t)return p(t,r)}else if(n)return function(e,t){var n=y(e,t);return n&&n.value}(n,r)},has:function(r){if(u&&r&&("object"==typeof r||"function"==typeof r)){if(e)return f(e,r)}else if(c){if(t)return h(t,r)}else if(n)return function(e,t){return!!y(e,t)}(n,r);return!1},set:function(r,o){u&&r&&("object"==typeof r||"function"==typeof r)?(e||(e=new u),l(e,r,o)):c?(t||(t=new c),d(t,r,o)):(n||(n={key:{},next:null}),function(e,t,n){var r=y(e,t);r?r.value=n:e.next={key:t,next:e.next,value:n}}(n,r,o))}};return r}},50266:(e,t,n)=>{var r="function"==typeof Map&&Map.prototype,o=Object.getOwnPropertyDescriptor&&r?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,i=r&&o&&"function"==typeof o.get?o.get:null,a=r&&Map.prototype.forEach,u="function"==typeof Set&&Set.prototype,c=Object.getOwnPropertyDescriptor&&u?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,s=u&&c&&"function"==typeof c.get?c.get:null,l=u&&Set.prototype.forEach,f="function"==typeof WeakMap&&WeakMap.prototype?WeakMap.prototype.has:null,p="function"==typeof WeakSet&&WeakSet.prototype?WeakSet.prototype.has:null,d=Boolean.prototype.valueOf,h=Object.prototype.toString,y=Function.prototype.toString,m=String.prototype.match,v="function"==typeof BigInt?BigInt.prototype.valueOf:null,g=Object.getOwnPropertySymbols,b="function"==typeof Symbol?Symbol.prototype.toString:null,w=Object.prototype.propertyIsEnumerable,O=n(69599).custom,E=O&&j(O)?O:null;function _(e,t,n){var r="double"===(n.quoteStyle||t)?'"':"'";return r+e+r}function x(e){return String(e).replace(/"/g,"&quot;")}function S(e){return"[object Array]"===I(e)}function j(e){return"[object Symbol]"===I(e)}e.exports=function e(t,n,r,o){var u=n||{};if(k(u,"quoteStyle")&&"single"!==u.quoteStyle&&"double"!==u.quoteStyle)throw new TypeError('option "quoteStyle" must be "single" or "double"');if(k(u,"maxStringLength")&&("number"==typeof u.maxStringLength?u.maxStringLength<0&&u.maxStringLength!==1/0:null!==u.maxStringLength))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var c=!k(u,"customInspect")||u.customInspect;if("boolean"!=typeof c)throw new TypeError('option "customInspect", if provided, must be `true` or `false`');if(k(u,"indent")&&null!==u.indent&&"\t"!==u.indent&&!(parseInt(u.indent,10)===u.indent&&u.indent>0))throw new TypeError('options "indent" must be "\\t", an integer > 0, or `null`');if(void 0===t)return"undefined";if(null===t)return"null";if("boolean"==typeof t)return t?"true":"false";if("string"==typeof t)return R(t,u);if("number"==typeof t)return 0===t?1/0/t>0?"0":"-0":String(t);if("bigint"==typeof t)return String(t)+"n";var h=void 0===u.depth?5:u.depth;if(void 0===r&&(r=0),r>=h&&h>0&&"object"==typeof t)return S(t)?"[Array]":"[Object]";var g=function(e,t){var n;if("\t"===e.indent)n="\t";else{if(!("number"==typeof e.indent&&e.indent>0))return null;n=Array(e.indent+1).join(" ")}return{base:n,prev:Array(t+1).join(n)}}(u,r);if(void 0===o)o=[];else if(T(o,t)>=0)return"[Circular]";function w(t,n,i){if(n&&(o=o.slice()).push(n),i){var a={depth:u.depth};return k(u,"quoteStyle")&&(a.quoteStyle=u.quoteStyle),e(t,a,r+1,o)}return e(t,u,r+1,o)}if("function"==typeof t){var O=function(e){if(e.name)return e.name;var t=m.call(y.call(e),/^function\s*([\w$]+)/);if(t)return t[1];return null}(t),P=M(t,w);return"[Function"+(O?": "+O:" (anonymous)")+"]"+(P.length>0?" { "+P.join(", ")+" }":"")}if(j(t)){var C=b.call(t);return"object"==typeof t?A(C):C}if(function(e){if(!e||"object"!=typeof e)return!1;if("undefined"!=typeof HTMLElement&&e instanceof HTMLElement)return!0;return"string"==typeof e.nodeName&&"function"==typeof e.getAttribute}(t)){for(var F="<"+String(t.nodeName).toLowerCase(),U=t.attributes||[],B=0;B<U.length;B++)F+=" "+U[B].name+"="+_(x(U[B].value),"double",u);return F+=">",t.childNodes&&t.childNodes.length&&(F+="..."),F+="</"+String(t.nodeName).toLowerCase()+">"}if(S(t)){if(0===t.length)return"[]";var H=M(t,w);return g&&!function(e){for(var t=0;t<e.length;t++)if(T(e[t],"\n")>=0)return!1;return!0}(H)?"["+D(H,g)+"]":"[ "+H.join(", ")+" ]"}if(function(e){return"[object Error]"===I(e)}(t)){var q=M(t,w);return 0===q.length?"["+String(t)+"]":"{ ["+String(t)+"] "+q.join(", ")+" }"}if("object"==typeof t&&c){if(E&&"function"==typeof t[E])return t[E]();if("function"==typeof t.inspect)return t.inspect()}if(function(e){if(!i||!e||"object"!=typeof e)return!1;try{i.call(e);try{s.call(e)}catch(e){return!0}return e instanceof Map}catch(e){}return!1}(t)){var z=[];return a.call(t,(function(e,n){z.push(w(n,t,!0)+" => "+w(e,t))})),L("Map",i.call(t),z,g)}if(function(e){if(!s||!e||"object"!=typeof e)return!1;try{s.call(e);try{i.call(e)}catch(e){return!0}return e instanceof Set}catch(e){}return!1}(t)){var G=[];return l.call(t,(function(e){G.push(w(e,t))})),L("Set",s.call(t),G,g)}if(function(e){if(!f||!e||"object"!=typeof e)return!1;try{f.call(e,f);try{p.call(e,p)}catch(e){return!0}return e instanceof WeakMap}catch(e){}return!1}(t))return N("WeakMap");if(function(e){if(!p||!e||"object"!=typeof e)return!1;try{p.call(e,p);try{f.call(e,f)}catch(e){return!0}return e instanceof WeakSet}catch(e){}return!1}(t))return N("WeakSet");if(function(e){return"[object Number]"===I(e)}(t))return A(w(Number(t)));if(function(e){return"[object BigInt]"===I(e)}(t))return A(w(v.call(t)));if(function(e){return"[object Boolean]"===I(e)}(t))return A(d.call(t));if(function(e){return"[object String]"===I(e)}(t))return A(w(String(t)));if(!function(e){return"[object Date]"===I(e)}(t)&&!function(e){return"[object RegExp]"===I(e)}(t)){var W=M(t,w);return 0===W.length?"{}":g?"{"+D(W,g)+"}":"{ "+W.join(", ")+" }"}return String(t)};var P=Object.prototype.hasOwnProperty||function(e){return e in this};function k(e,t){return P.call(e,t)}function I(e){return h.call(e)}function T(e,t){if(e.indexOf)return e.indexOf(t);for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1}function R(e,t){if(e.length>t.maxStringLength){var n=e.length-t.maxStringLength,r="... "+n+" more character"+(n>1?"s":"");return R(e.slice(0,t.maxStringLength),t)+r}return _(e.replace(/(['\\])/g,"\\$1").replace(/[\x00-\x1f]/g,C),"single",t)}function C(e){var t=e.charCodeAt(0),n={8:"b",9:"t",10:"n",12:"f",13:"r"}[t];return n?"\\"+n:"\\x"+(t<16?"0":"")+t.toString(16).toUpperCase()}function A(e){return"Object("+e+")"}function N(e){return e+" { ? }"}function L(e,t,n,r){return e+" ("+t+") {"+(r?D(n,r):n.join(", "))+"}"}function D(e,t){if(0===e.length)return"";var n="\n"+t.prev+t.base;return n+e.join(","+n)+"\n"+t.prev}function M(e,t){var n=S(e),r=[];if(n){r.length=e.length;for(var o=0;o<e.length;o++)r[o]=k(e,o)?t(e[o],e):""}for(var i in e)k(e,i)&&(n&&String(Number(i))===i&&i<e.length||(/[^\w$]/.test(i)?r.push(t(i,e)+": "+t(e[i],e)):r.push(i+": "+t(e[i],e))));if("function"==typeof g)for(var a=g(e),u=0;u<a.length;u++)w.call(e,a[u])&&r.push("["+t(a[u])+"]: "+t(e[a[u]],e));return r}},23205:function(e,t,n){e.exports=function(){"use strict";var e="function"==typeof Promise,t="object"==typeof self?self:n.g,r="undefined"!=typeof Symbol,o="undefined"!=typeof Map,i="undefined"!=typeof Set,a="undefined"!=typeof WeakMap,u="undefined"!=typeof WeakSet,c="undefined"!=typeof DataView,s=r&&void 0!==Symbol.iterator,l=r&&void 0!==Symbol.toStringTag,f=i&&"function"==typeof Set.prototype.entries,p=o&&"function"==typeof Map.prototype.entries,d=f&&Object.getPrototypeOf((new Set).entries()),h=p&&Object.getPrototypeOf((new Map).entries()),y=s&&"function"==typeof Array.prototype[Symbol.iterator],m=y&&Object.getPrototypeOf([][Symbol.iterator]()),v=s&&"function"==typeof String.prototype[Symbol.iterator],g=v&&Object.getPrototypeOf(""[Symbol.iterator]()),b=8,w=-1;function O(n){var r=typeof n;if("object"!==r)return r;if(null===n)return"null";if(n===t)return"global";if(Array.isArray(n)&&(!1===l||!(Symbol.toStringTag in n)))return"Array";if("object"==typeof window&&null!==window){if("object"==typeof window.location&&n===window.location)return"Location";if("object"==typeof window.document&&n===window.document)return"Document";if("object"==typeof window.navigator){if("object"==typeof window.navigator.mimeTypes&&n===window.navigator.mimeTypes)return"MimeTypeArray";if("object"==typeof window.navigator.plugins&&n===window.navigator.plugins)return"PluginArray"}if(("function"==typeof window.HTMLElement||"object"==typeof window.HTMLElement)&&n instanceof window.HTMLElement){if("BLOCKQUOTE"===n.tagName)return"HTMLQuoteElement";if("TD"===n.tagName)return"HTMLTableDataCellElement";if("TH"===n.tagName)return"HTMLTableHeaderCellElement"}}var s=l&&n[Symbol.toStringTag];if("string"==typeof s)return s;var f=Object.getPrototypeOf(n);return f===RegExp.prototype?"RegExp":f===Date.prototype?"Date":e&&f===Promise.prototype?"Promise":i&&f===Set.prototype?"Set":o&&f===Map.prototype?"Map":u&&f===WeakSet.prototype?"WeakSet":a&&f===WeakMap.prototype?"WeakMap":c&&f===DataView.prototype?"DataView":o&&f===h?"Map Iterator":i&&f===d?"Set Iterator":y&&f===m?"Array Iterator":v&&f===g?"String Iterator":null===f?"Object":Object.prototype.toString.call(n).slice(b,w)}return O}()},79952:function(e,t,n){var r;!function(o,i){"use strict";var a="function",u="undefined",c="object",s="string",l="model",f="name",p="type",d="vendor",h="version",y="architecture",m="console",v="mobile",g="tablet",b="smarttv",w="wearable",O="embedded",E="Amazon",_="Apple",x="ASUS",S="BlackBerry",j="Firefox",P="Google",k="Huawei",I="LG",T="Microsoft",R="Motorola",C="Opera",A="Samsung",N="Sony",L="Xiaomi",D="Zebra",M="Facebook",F=function(e){for(var t={},n=0;n<e.length;n++)t[e[n].toUpperCase()]=e[n];return t},U=function(e,t){return typeof e===s&&-1!==B(t).indexOf(B(e))},B=function(e){return e.toLowerCase()},H=function(e,t){if(typeof e===s)return e=e.replace(/^\s\s*/,"").replace(/\s\s*$/,""),typeof t===u?e:e.substring(0,255)},q=function(e,t){for(var n,r,o,u,s,l,f=0;f<t.length&&!s;){var p=t[f],d=t[f+1];for(n=r=0;n<p.length&&!s;)if(s=p[n++].exec(e))for(o=0;o<d.length;o++)l=s[++r],typeof(u=d[o])===c&&u.length>0?2===u.length?typeof u[1]==a?this[u[0]]=u[1].call(this,l):this[u[0]]=u[1]:3===u.length?typeof u[1]!==a||u[1].exec&&u[1].test?this[u[0]]=l?l.replace(u[1],u[2]):i:this[u[0]]=l?u[1].call(this,l,u[2]):i:4===u.length&&(this[u[0]]=l?u[3].call(this,l.replace(u[1],u[2])):i):this[u]=l||i;f+=2}},z=function(e,t){for(var n in t)if(typeof t[n]===c&&t[n].length>0){for(var r=0;r<t[n].length;r++)if(U(t[n][r],e))return"?"===n?i:n}else if(U(t[n],e))return"?"===n?i:n;return e},G={ME:"4.90","NT 3.11":"NT3.51","NT 4.0":"NT4.0",2e3:"NT 5.0",XP:["NT 5.1","NT 5.2"],Vista:"NT 6.0",7:"NT 6.1",8:"NT 6.2",8.1:"NT 6.3",10:["NT 6.4","NT 10.0"],RT:"ARM"},W={browser:[[/\b(?:crmo|crios)\/([\w\.]+)/i],[h,[f,"Chrome"]],[/edg(?:e|ios|a)?\/([\w\.]+)/i],[h,[f,"Edge"]],[/(opera mini)\/([-\w\.]+)/i,/(opera [mobiletab]{3,6})\b.+version\/([-\w\.]+)/i,/(opera)(?:.+version\/|[\/ ]+)([\w\.]+)/i],[f,h],[/opios[\/ ]+([\w\.]+)/i],[h,[f,"Opera Mini"]],[/\bopr\/([\w\.]+)/i],[h,[f,C]],[/(kindle)\/([\w\.]+)/i,/(lunascape|maxthon|netfront|jasmine|blazer)[\/ ]?([\w\.]*)/i,/(avant |iemobile|slim)(?:browser)?[\/ ]?([\w\.]*)/i,/(ba?idubrowser)[\/ ]?([\w\.]+)/i,/(?:ms|\()(ie) ([\w\.]+)/i,/(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale|qqbrowserlite|qq)\/([-\w\.]+)/i,/(weibo)__([\d\.]+)/i],[f,h],[/(?:\buc? ?browser|(?:juc.+)ucweb)[\/ ]?([\w\.]+)/i],[h,[f,"UCBrowser"]],[/\bqbcore\/([\w\.]+)/i],[h,[f,"WeChat(Win) Desktop"]],[/micromessenger\/([\w\.]+)/i],[h,[f,"WeChat"]],[/konqueror\/([\w\.]+)/i],[h,[f,"Konqueror"]],[/trident.+rv[: ]([\w\.]{1,9})\b.+like gecko/i],[h,[f,"IE"]],[/yabrowser\/([\w\.]+)/i],[h,[f,"Yandex"]],[/(avast|avg)\/([\w\.]+)/i],[[f,/(.+)/,"$1 Secure Browser"],h],[/\bfocus\/([\w\.]+)/i],[h,[f,"Firefox Focus"]],[/\bopt\/([\w\.]+)/i],[h,[f,"Opera Touch"]],[/coc_coc\w+\/([\w\.]+)/i],[h,[f,"Coc Coc"]],[/dolfin\/([\w\.]+)/i],[h,[f,"Dolphin"]],[/coast\/([\w\.]+)/i],[h,[f,"Opera Coast"]],[/miuibrowser\/([\w\.]+)/i],[h,[f,"MIUI Browser"]],[/fxios\/([-\w\.]+)/i],[h,[f,j]],[/\bqihu|(qi?ho?o?|360)browser/i],[[f,"360 Browser"]],[/(oculus|samsung|sailfish)browser\/([\w\.]+)/i],[[f,/(.+)/,"$1 Browser"],h],[/(comodo_dragon)\/([\w\.]+)/i],[[f,/_/g," "],h],[/(electron)\/([\w\.]+) safari/i,/(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w\.]+))/i,/m?(qqbrowser|baiduboxapp|2345Explorer)[\/ ]?([\w\.]+)/i],[f,h],[/(metasr)[\/ ]?([\w\.]+)/i,/(lbbrowser)/i],[f],[/((?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/([\w\.]+);)/i],[[f,M],h],[/safari (line)\/([\w\.]+)/i,/\b(line)\/([\w\.]+)\/iab/i,/(chromium|instagram)[\/ ]([-\w\.]+)/i],[f,h],[/\bgsa\/([\w\.]+) .*safari\//i],[h,[f,"GSA"]],[/headlesschrome(?:\/([\w\.]+)| )/i],[h,[f,"Chrome Headless"]],[/ wv\).+(chrome)\/([\w\.]+)/i],[[f,"Chrome WebView"],h],[/droid.+ version\/([\w\.]+)\b.+(?:mobile safari|safari)/i],[h,[f,"Android Browser"]],[/(chrome|omniweb|arora|[tizenoka]{5} ?browser)\/v?([\w\.]+)/i],[f,h],[/version\/([\w\.]+) .*mobile\/\w+ (safari)/i],[h,[f,"Mobile Safari"]],[/version\/([\w\.]+) .*(mobile ?safari|safari)/i],[h,f],[/webkit.+?(mobile ?safari|safari)(\/[\w\.]+)/i],[f,[h,z,{"1.0":"/8",1.2:"/1",1.3:"/3","2.0":"/412","2.0.2":"/416","2.0.3":"/417","2.0.4":"/419","?":"/"}]],[/(webkit|khtml)\/([\w\.]+)/i],[f,h],[/(navigator|netscape\d?)\/([-\w\.]+)/i],[[f,"Netscape"],h],[/mobile vr; rv:([\w\.]+)\).+firefox/i],[h,[f,"Firefox Reality"]],[/ekiohf.+(flow)\/([\w\.]+)/i,/(swiftfox)/i,/(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\/ ]?([\w\.\+]+)/i,/(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([-\w\.]+)$/i,/(firefox)\/([\w\.]+)/i,/(mozilla)\/([\w\.]+) .+rv\:.+gecko\/\d+/i,/(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i,/(links) \(([\w\.]+)/i],[f,h]],cpu:[[/(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\)]/i],[[y,"amd64"]],[/(ia32(?=;))/i],[[y,B]],[/((?:i[346]|x)86)[;\)]/i],[[y,"ia32"]],[/\b(aarch64|arm(v?8e?l?|_?64))\b/i],[[y,"arm64"]],[/\b(arm(?:v[67])?ht?n?[fl]p?)\b/i],[[y,"armhf"]],[/windows (ce|mobile); ppc;/i],[[y,"arm"]],[/((?:ppc|powerpc)(?:64)?)(?: mac|;|\))/i],[[y,/ower/,"",B]],[/(sun4\w)[;\)]/i],[[y,"sparc"]],[/((?:avr32|ia64(?=;))|68k(?=\))|\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\b|pa-risc)/i],[[y,B]]],device:[[/\b(sch-i[89]0\d|shw-m380s|sm-[pt]\w{2,4}|gt-[pn]\d{2,4}|sgh-t8[56]9|nexus 10)/i],[l,[d,A],[p,g]],[/\b((?:s[cgp]h|gt|sm)-\w+|galaxy nexus)/i,/samsung[- ]([-\w]+)/i,/sec-(sgh\w+)/i],[l,[d,A],[p,v]],[/\((ip(?:hone|od)[\w ]*);/i],[l,[d,_],[p,v]],[/\((ipad);[-\w\),; ]+apple/i,/applecoremedia\/[\w\.]+ \((ipad)/i,/\b(ipad)\d\d?,\d\d?[;\]].+ios/i],[l,[d,_],[p,g]],[/\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\d{2})\b(?!.+d\/s)/i],[l,[d,k],[p,g]],[/(?:huawei|honor)([-\w ]+)[;\)]/i,/\b(nexus 6p|\w{2,4}-[atu]?[ln][01259x][012359][an]?)\b(?!.+d\/s)/i],[l,[d,k],[p,v]],[/\b(poco[\w ]+)(?: bui|\))/i,/\b; (\w+) build\/hm\1/i,/\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i,/\b(redmi[\-_ ]?(?:note|k)?[\w_ ]+)(?: bui|\))/i,/\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\))/i],[[l,/_/g," "],[d,L],[p,v]],[/\b(mi[-_ ]?(?:pad)(?:[\w_ ]+))(?: bui|\))/i],[[l,/_/g," "],[d,L],[p,g]],[/; (\w+) bui.+ oppo/i,/\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i],[l,[d,"OPPO"],[p,v]],[/vivo (\w+)(?: bui|\))/i,/\b(v[12]\d{3}\w?[at])(?: bui|;)/i],[l,[d,"Vivo"],[p,v]],[/\b(rmx[12]\d{3})(?: bui|;|\))/i],[l,[d,"Realme"],[p,v]],[/\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\b[\w ]+build\//i,/\bmot(?:orola)?[- ](\w*)/i,/((?:moto[\w\(\) ]+|xt\d{3,4}|nexus 6)(?= bui|\)))/i],[l,[d,R],[p,v]],[/\b(mz60\d|xoom[2 ]{0,2}) build\//i],[l,[d,R],[p,g]],[/((?=lg)?[vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i],[l,[d,I],[p,g]],[/(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i,/\blg[-e;\/ ]+((?!browser|netcast|android tv)\w+)/i,/\blg-?([\d\w]+) bui/i],[l,[d,I],[p,v]],[/(ideatab[-\w ]+)/i,/lenovo ?(s[56]000[-\w]+|tab(?:[\w ]+)|yt[-\d\w]{6}|tb[-\d\w]{6})/i],[l,[d,"Lenovo"],[p,g]],[/(?:maemo|nokia).*(n900|lumia \d+)/i,/nokia[-_ ]?([-\w\.]*)/i],[[l,/_/g," "],[d,"Nokia"],[p,v]],[/(pixel c)\b/i],[l,[d,P],[p,g]],[/droid.+; (pixel[\daxl ]{0,6})(?: bui|\))/i],[l,[d,P],[p,v]],[/droid.+ ([c-g]\d{4}|so[-gl]\w+|xq-a\w[4-7][12])(?= bui|\).+chrome\/(?![1-6]{0,1}\d\.))/i],[l,[d,N],[p,v]],[/sony tablet [ps]/i,/\b(?:sony)?sgp\w+(?: bui|\))/i],[[l,"Xperia Tablet"],[d,N],[p,g]],[/ (kb2005|in20[12]5|be20[12][59])\b/i,/(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i],[l,[d,"OnePlus"],[p,v]],[/(alexa)webm/i,/(kf[a-z]{2}wi)( bui|\))/i,/(kf[a-z]+)( bui|\)).+silk\//i],[l,[d,E],[p,g]],[/((?:sd|kf)[0349hijorstuw]+)( bui|\)).+silk\//i],[[l,/(.+)/g,"Fire Phone $1"],[d,E],[p,v]],[/(playbook);[-\w\),; ]+(rim)/i],[l,d,[p,g]],[/\b((?:bb[a-f]|st[hv])100-\d)/i,/\(bb10; (\w+)/i],[l,[d,S],[p,v]],[/(?:\b|asus_)(transfo[prime ]{4,10} \w+|eeepc|slider \w+|nexus 7|padfone|p00[cj])/i],[l,[d,x],[p,g]],[/ (z[bes]6[027][012][km][ls]|zenfone \d\w?)\b/i],[l,[d,x],[p,v]],[/(nexus 9)/i],[l,[d,"HTC"],[p,g]],[/(htc)[-;_ ]{1,2}([\w ]+(?=\)| bui)|\w+)/i,/(zte)[- ]([\w ]+?)(?: bui|\/|\))/i,/(alcatel|geeksphone|nexian|panasonic|sony)[-_ ]?([-\w]*)/i],[d,[l,/_/g," "],[p,v]],[/droid.+; ([ab][1-7]-?[0178a]\d\d?)/i],[l,[d,"Acer"],[p,g]],[/droid.+; (m[1-5] note) bui/i,/\bmz-([-\w]{2,})/i],[l,[d,"Meizu"],[p,v]],[/\b(sh-?[altvz]?\d\d[a-ekm]?)/i],[l,[d,"Sharp"],[p,v]],[/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[-_ ]?([-\w]*)/i,/(hp) ([\w ]+\w)/i,/(asus)-?(\w+)/i,/(microsoft); (lumia[\w ]+)/i,/(lenovo)[-_ ]?([-\w]+)/i,/(jolla)/i,/(oppo) ?([\w ]+) bui/i],[d,l,[p,v]],[/(archos) (gamepad2?)/i,/(hp).+(touchpad(?!.+tablet)|tablet)/i,/(kindle)\/([\w\.]+)/i,/(nook)[\w ]+build\/(\w+)/i,/(dell) (strea[kpr\d ]*[\dko])/i,/(le[- ]+pan)[- ]+(\w{1,9}) bui/i,/(trinity)[- ]*(t\d{3}) bui/i,/(gigaset)[- ]+(q\w{1,9}) bui/i,/(vodafone) ([\w ]+)(?:\)| bui)/i],[d,l,[p,g]],[/(surface duo)/i],[l,[d,T],[p,g]],[/droid [\d\.]+; (fp\du?)(?: b|\))/i],[l,[d,"Fairphone"],[p,v]],[/(u304aa)/i],[l,[d,"AT&T"],[p,v]],[/\bsie-(\w*)/i],[l,[d,"Siemens"],[p,v]],[/\b(rct\w+) b/i],[l,[d,"RCA"],[p,g]],[/\b(venue[\d ]{2,7}) b/i],[l,[d,"Dell"],[p,g]],[/\b(q(?:mv|ta)\w+) b/i],[l,[d,"Verizon"],[p,g]],[/\b(?:barnes[& ]+noble |bn[rt])([\w\+ ]*) b/i],[l,[d,"Barnes & Noble"],[p,g]],[/\b(tm\d{3}\w+) b/i],[l,[d,"NuVision"],[p,g]],[/\b(k88) b/i],[l,[d,"ZTE"],[p,g]],[/\b(nx\d{3}j) b/i],[l,[d,"ZTE"],[p,v]],[/\b(gen\d{3}) b.+49h/i],[l,[d,"Swiss"],[p,v]],[/\b(zur\d{3}) b/i],[l,[d,"Swiss"],[p,g]],[/\b((zeki)?tb.*\b) b/i],[l,[d,"Zeki"],[p,g]],[/\b([yr]\d{2}) b/i,/\b(dragon[- ]+touch |dt)(\w{5}) b/i],[[d,"Dragon Touch"],l,[p,g]],[/\b(ns-?\w{0,9}) b/i],[l,[d,"Insignia"],[p,g]],[/\b((nxa|next)-?\w{0,9}) b/i],[l,[d,"NextBook"],[p,g]],[/\b(xtreme\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i],[[d,"Voice"],l,[p,v]],[/\b(lvtel\-)?(v1[12]) b/i],[[d,"LvTel"],l,[p,v]],[/\b(ph-1) /i],[l,[d,"Essential"],[p,v]],[/\b(v(100md|700na|7011|917g).*\b) b/i],[l,[d,"Envizen"],[p,g]],[/\b(trio[-\w\. ]+) b/i],[l,[d,"MachSpeed"],[p,g]],[/\btu_(1491) b/i],[l,[d,"Rotor"],[p,g]],[/(shield[\w ]+) b/i],[l,[d,"Nvidia"],[p,g]],[/(sprint) (\w+)/i],[d,l,[p,v]],[/(kin\.[onetw]{3})/i],[[l,/\./g," "],[d,T],[p,v]],[/droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i],[l,[d,D],[p,g]],[/droid.+; (ec30|ps20|tc[2-8]\d[kx])\)/i],[l,[d,D],[p,v]],[/(ouya)/i,/(nintendo) ([wids3utch]+)/i],[d,l,[p,m]],[/droid.+; (shield) bui/i],[l,[d,"Nvidia"],[p,m]],[/(playstation [345portablevi]+)/i],[l,[d,N],[p,m]],[/\b(xbox(?: one)?(?!; xbox))[\); ]/i],[l,[d,T],[p,m]],[/smart-tv.+(samsung)/i],[d,[p,b]],[/hbbtv.+maple;(\d+)/i],[[l,/^/,"SmartTV"],[d,A],[p,b]],[/(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i],[[d,I],[p,b]],[/(apple) ?tv/i],[d,[l,"Apple TV"],[p,b]],[/crkey/i],[[l,"Chromecast"],[d,P],[p,b]],[/droid.+aft(\w)( bui|\))/i],[l,[d,E],[p,b]],[/\(dtv[\);].+(aquos)/i],[l,[d,"Sharp"],[p,b]],[/\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i,/hbbtv\/\d+\.\d+\.\d+ +\([\w ]*; *(\w[^;]*);([^;]*)/i],[[d,H],[l,H],[p,b]],[/\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\b/i],[[p,b]],[/((pebble))app/i],[d,l,[p,w]],[/droid.+; (glass) \d/i],[l,[d,P],[p,w]],[/droid.+; (wt63?0{2,3})\)/i],[l,[d,D],[p,w]],[/(quest( 2)?)/i],[l,[d,M],[p,w]],[/(tesla)(?: qtcarbrowser|\/[-\w\.]+)/i],[d,[p,O]],[/droid .+?; ([^;]+?)(?: bui|\) applew).+? mobile safari/i],[l,[p,v]],[/droid .+?; ([^;]+?)(?: bui|\) applew).+?(?! mobile) safari/i],[l,[p,g]],[/\b((tablet|tab)[;\/]|focus\/\d(?!.+mobile))/i],[[p,g]],[/(phone|mobile(?:[;\/]| safari)|pda(?=.+windows ce))/i],[[p,v]],[/(android[-\w\. ]{0,9});.+buil/i],[l,[d,"Generic"]]],engine:[[/windows.+ edge\/([\w\.]+)/i],[h,[f,"EdgeHTML"]],[/webkit\/537\.36.+chrome\/(?!27)([\w\.]+)/i],[h,[f,"Blink"]],[/(presto)\/([\w\.]+)/i,/(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\/([\w\.]+)/i,/ekioh(flow)\/([\w\.]+)/i,/(khtml|tasman|links)[\/ ]\(?([\w\.]+)/i,/(icab)[\/ ]([23]\.[\d\.]+)/i],[f,h],[/rv\:([\w\.]{1,9})\b.+(gecko)/i],[h,f]],os:[[/microsoft (windows) (vista|xp)/i],[f,h],[/(windows) nt 6\.2; (arm)/i,/(windows (?:phone(?: os)?|mobile))[\/ ]?([\d\.\w ]*)/i,/(windows)[\/ ]?([ntce\d\. ]+\w)(?!.+xbox)/i],[f,[h,z,G]],[/(win(?=3|9|n)|win 9x )([nt\d\.]+)/i],[[f,"Windows"],[h,z,G]],[/ip[honead]{2,4}\b(?:.*os ([\w]+) like mac|; opera)/i,/cfnetwork\/.+darwin/i],[[h,/_/g,"."],[f,"iOS"]],[/(mac os x) ?([\w\. ]*)/i,/(macintosh|mac_powerpc\b)(?!.+haiku)/i],[[f,"Mac OS"],[h,/_/g,"."]],[/droid ([\w\.]+)\b.+(android[- ]x86)/i],[h,f],[/(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\/ ]?([\w\.]*)/i,/(blackberry)\w*\/([\w\.]*)/i,/(tizen|kaios)[\/ ]([\w\.]+)/i,/\((series40);/i],[f,h],[/\(bb(10);/i],[h,[f,S]],[/(?:symbian ?os|symbos|s60(?=;)|series60)[-\/ ]?([\w\.]*)/i],[h,[f,"Symbian"]],[/mozilla\/[\d\.]+ \((?:mobile|tablet|tv|mobile; [\w ]+); rv:.+ gecko\/([\w\.]+)/i],[h,[f,"Firefox OS"]],[/web0s;.+rt(tv)/i,/\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i],[h,[f,"webOS"]],[/crkey\/([\d\.]+)/i],[h,[f,"Chromecast"]],[/(cros) [\w]+ ([\w\.]+\w)/i],[[f,"Chromium OS"],h],[/(nintendo|playstation) ([wids345portablevuch]+)/i,/(xbox); +xbox ([^\);]+)/i,/\b(joli|palm)\b ?(?:os)?\/?([\w\.]*)/i,/(mint)[\/\(\) ]?(\w*)/i,/(mageia|vectorlinux)[; ]/i,/([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\/ ]?(?!chrom|package)([-\w\.]*)/i,/(hurd|linux) ?([\w\.]*)/i,/(gnu) ?([\w\.]*)/i,/\b([-frentopcghs]{0,5}bsd|dragonfly)[\/ ]?(?!amd|[ix346]{1,2}86)([\w\.]*)/i,/(haiku) (\w+)/i],[f,h],[/(sunos) ?([\w\.\d]*)/i],[[f,"Solaris"],h],[/((?:open)?solaris)[-\/ ]?([\w\.]*)/i,/(aix) ((\d)(?=\.|\)| )[\w\.])*/i,/\b(beos|os\/2|amigaos|morphos|openvms|fuchsia|hp-ux)/i,/(unix) ?([\w\.]*)/i],[f,h]]},V=function(e,t){if(typeof e===c&&(t=e,e=i),!(this instanceof V))return new V(e,t).getResult();var n=e||(typeof o!==u&&o.navigator&&o.navigator.userAgent?o.navigator.userAgent:""),r=t?function(e,t){var n={};for(var r in e)t[r]&&t[r].length%2==0?n[r]=t[r].concat(e[r]):n[r]=e[r];return n}(W,t):W;return this.getBrowser=function(){var e,t={};return t.name=i,t.version=i,q.call(t,n,r.browser),t.major=typeof(e=t.version)===s?e.replace(/[^\d\.]/g,"").split(".")[0]:i,t},this.getCPU=function(){var e={};return e.architecture=i,q.call(e,n,r.cpu),e},this.getDevice=function(){var e={};return e.vendor=i,e.model=i,e.type=i,q.call(e,n,r.device),e},this.getEngine=function(){var e={};return e.name=i,e.version=i,q.call(e,n,r.engine),e},this.getOS=function(){var e={};return e.name=i,e.version=i,q.call(e,n,r.os),e},this.getResult=function(){return{ua:this.getUA(),browser:this.getBrowser(),engine:this.getEngine(),os:this.getOS(),device:this.getDevice(),cpu:this.getCPU()}},this.getUA=function(){return n},this.setUA=function(e){return n=typeof e===s&&e.length>255?H(e,255):e,this},this.setUA(n),this};V.VERSION="1.0.2",V.BROWSER=F([f,h,"major"]),V.CPU=F([y]),V.DEVICE=F([l,d,p,m,v,b,g,w,O]),V.ENGINE=V.OS=F([f,h]),typeof t!==u?(e.exports&&(t=e.exports=V),t.UAParser=V):n.amdO?(r=function(){return V}.call(t,n,t,e))===i||(e.exports=r):typeof o!==u&&(o.UAParser=V);var Y=typeof o!==u&&(o.jQuery||o.Zepto);if(Y&&!Y.ua){var Z=new V;Y.ua=Z.getResult(),Y.ua.get=function(){return Z.getUA()},Y.ua.set=function(e){Z.setUA(e);var t=Z.getResult();for(var n in t)Y.ua[n]=t[n]}}}("object"==typeof window?window:this)},20714:(e,t)=>{"use strict";function n(e){return String.fromCharCode(parseInt(e.slice(1),16))}function r(e){return`%${`00${e.charCodeAt(0).toString(16)}`.slice(-2)}`}Object.defineProperty(t,"__esModule",{value:!0}),t.encode=function(e){return btoa(encodeURIComponent(e).replace(/%[0-9A-F]{2}/g,n))},t.decode=function(e){return decodeURIComponent(Array.from(atob(e),r).join(""))}},39735:(e,t,n)=>{"use strict";const r=n(20714);t.Jx=function(e){return r.decode(e.replace(/\-/g,"+").replace(/_/g,"/"))},t.cv=function(e){return r.encode(e).replace(/\//g,"_").replace(/\+/g,"-").replace(/=+$/,"")}},8191:(e,t)=>{"use strict";t.Q=function(e,t){if("string"!=typeof e)throw new TypeError("argument str must be a string");for(var r={},i=t||{},u=e.split(o),c=i.decode||n,s=0;s<u.length;s++){var l=u[s],f=l.indexOf("=");if(!(f<0)){var p=l.substr(0,f).trim(),d=l.substr(++f,l.length).trim();'"'==d[0]&&(d=d.slice(1,-1)),null==r[p]&&(r[p]=a(d,c))}}return r},t.q=function(e,t,n){var o=n||{},a=o.encode||r;if("function"!=typeof a)throw new TypeError("option encode is invalid");if(!i.test(e))throw new TypeError("argument name is invalid");var u=a(t);if(u&&!i.test(u))throw new TypeError("argument val is invalid");var c=e+"="+u;if(null!=o.maxAge){var s=o.maxAge-0;if(isNaN(s)||!isFinite(s))throw new TypeError("option maxAge is invalid");c+="; Max-Age="+Math.floor(s)}if(o.domain){if(!i.test(o.domain))throw new TypeError("option domain is invalid");c+="; Domain="+o.domain}if(o.path){if(!i.test(o.path))throw new TypeError("option path is invalid");c+="; Path="+o.path}if(o.expires){if("function"!=typeof o.expires.toUTCString)throw new TypeError("option expires is invalid");c+="; Expires="+o.expires.toUTCString()}o.httpOnly&&(c+="; HttpOnly");o.secure&&(c+="; Secure");if(o.sameSite){switch("string"==typeof o.sameSite?o.sameSite.toLowerCase():o.sameSite){case!0:c+="; SameSite=Strict";break;case"lax":c+="; SameSite=Lax";break;case"strict":c+="; SameSite=Strict";break;case"none":c+="; SameSite=None";break;default:throw new TypeError("option sameSite is invalid")}}return c};var n=decodeURIComponent,r=encodeURIComponent,o=/; */,i=/^[\u0009\u0020-\u007e\u0080-\u00ff]+$/;function a(e,t){try{return t(e)}catch(t){return e}}},19704:(e,t,n)=>{e.exports=n.p+"b4ed07ea73fd9b86f6ace81025f9c6eb.png"},424:(e,t,n)=>{e.exports=n.p+"fa9755b65373c6cee3b350e987333a6c.svg"},65117:(e,t,n)=>{e.exports=n.p+"3a8be7acd94a11760707d5374bea1f6d.svg"},2138:(e,t,n)=>{e.exports=n.p+"1b2fb62f37f1c1e59208f4993714d166.svg"},64265:function(e,t,n){var r;e=n.nmd(e),function(o){t&&t.nodeType,e&&e.nodeType;var i="object"==typeof n.g&&n.g;i.global!==i&&i.window!==i&&i.self;var a,u=2147483647,c=36,s=/^xn--/,l=/[^\x20-\x7E]/,f=/[\x2E\u3002\uFF0E\uFF61]/g,p={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},d=Math.floor,h=String.fromCharCode;function y(e){throw RangeError(p[e])}function m(e,t){for(var n=e.length,r=[];n--;)r[n]=t(e[n]);return r}function v(e,t){var n=e.split("@"),r="";return n.length>1&&(r=n[0]+"@",e=n[1]),r+m((e=e.replace(f,".")).split("."),t).join(".")}function g(e){for(var t,n,r=[],o=0,i=e.length;o<i;)(t=e.charCodeAt(o++))>=55296&&t<=56319&&o<i?56320==(64512&(n=e.charCodeAt(o++)))?r.push(((1023&t)<<10)+(1023&n)+65536):(r.push(t),o--):r.push(t);return r}function b(e){return m(e,(function(e){var t="";return e>65535&&(t+=h((e-=65536)>>>10&1023|55296),e=56320|1023&e),t+=h(e)})).join("")}function w(e,t){return e+22+75*(e<26)-((0!=t)<<5)}function O(e,t,n){var r=0;for(e=n?d(e/700):e>>1,e+=d(e/t);e>455;r+=c)e=d(e/35);return d(r+36*e/(e+38))}function E(e){var t,n,r,o,i,a,s,l,f,p,h,m=[],v=e.length,g=0,w=128,E=72;for((n=e.lastIndexOf("-"))<0&&(n=0),r=0;r<n;++r)e.charCodeAt(r)>=128&&y("not-basic"),m.push(e.charCodeAt(r));for(o=n>0?n+1:0;o<v;){for(i=g,a=1,s=c;o>=v&&y("invalid-input"),((l=(h=e.charCodeAt(o++))-48<10?h-22:h-65<26?h-65:h-97<26?h-97:c)>=c||l>d((u-g)/a))&&y("overflow"),g+=l*a,!(l<(f=s<=E?1:s>=E+26?26:s-E));s+=c)a>d(u/(p=c-f))&&y("overflow"),a*=p;E=O(g-i,t=m.length+1,0==i),d(g/t)>u-w&&y("overflow"),w+=d(g/t),g%=t,m.splice(g++,0,w)}return b(m)}function _(e){var t,n,r,o,i,a,s,l,f,p,m,v,b,E,_,x=[];for(v=(e=g(e)).length,t=128,n=0,i=72,a=0;a<v;++a)(m=e[a])<128&&x.push(h(m));for(r=o=x.length,o&&x.push("-");r<v;){for(s=u,a=0;a<v;++a)(m=e[a])>=t&&m<s&&(s=m);for(s-t>d((u-n)/(b=r+1))&&y("overflow"),n+=(s-t)*b,t=s,a=0;a<v;++a)if((m=e[a])<t&&++n>u&&y("overflow"),m==t){for(l=n,f=c;!(l<(p=f<=i?1:f>=i+26?26:f-i));f+=c)_=l-p,E=c-p,x.push(h(w(p+_%E,0))),l=d(_/E);x.push(h(w(l,0))),i=O(n,b,r==o),n=0,++r}++n,++t}return x.join("")}a={version:"1.3.2",ucs2:{decode:g,encode:b},decode:E,encode:_,toASCII:function(e){return v(e,(function(e){return l.test(e)?"xn--"+_(e):e}))},toUnicode:function(e){return v(e,(function(e){return s.test(e)?E(e.slice(4).toLowerCase()):e}))}},void 0===(r=function(){return a}.call(t,n,t,e))||(e.exports=r)}()},9989:(e,t,n)=>{"use strict";var r=n(64265),o=n(7030);function i(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}t.parse=b,t.resolve=function(e,t){return b(e,!1,!0).resolve(t)},t.resolveObject=function(e,t){return e?b(e,!1,!0).resolveObject(t):t},t.format=function(e){o.isString(e)&&(e=b(e));return e instanceof i?e.format():i.prototype.format.call(e)},t.Url=i;var a=/^([a-z0-9.+-]+:)/i,u=/:[0-9]*$/,c=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,s=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r","\n","\t"]),l=["'"].concat(s),f=["%","/","?",";","#"].concat(l),p=["/","?","#"],d=/^[+a-z0-9A-Z_-]{0,63}$/,h=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,y={javascript:!0,"javascript:":!0},m={javascript:!0,"javascript:":!0},v={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},g=n(49122);function b(e,t,n){if(e&&o.isObject(e)&&e instanceof i)return e;var r=new i;return r.parse(e,t,n),r}i.prototype.parse=function(e,t,n){if(!o.isString(e))throw new TypeError("Parameter 'url' must be a string, not "+typeof e);var i=e.indexOf("?"),u=-1!==i&&i<e.indexOf("#")?"?":"#",s=e.split(u);s[0]=s[0].replace(/\\/g,"/");var b=e=s.join(u);if(b=b.trim(),!n&&1===e.split("#").length){var w=c.exec(b);if(w)return this.path=b,this.href=b,this.pathname=w[1],w[2]?(this.search=w[2],this.query=t?g.parse(this.search.substr(1)):this.search.substr(1)):t&&(this.search="",this.query={}),this}var O=a.exec(b);if(O){var E=(O=O[0]).toLowerCase();this.protocol=E,b=b.substr(O.length)}if(n||O||b.match(/^\/\/[^@\/]+@[^@\/]+/)){var _="//"===b.substr(0,2);!_||O&&m[O]||(b=b.substr(2),this.slashes=!0)}if(!m[O]&&(_||O&&!v[O])){for(var x,S,j=-1,P=0;P<p.length;P++){-1!==(k=b.indexOf(p[P]))&&(-1===j||k<j)&&(j=k)}-1!==(S=-1===j?b.lastIndexOf("@"):b.lastIndexOf("@",j))&&(x=b.slice(0,S),b=b.slice(S+1),this.auth=decodeURIComponent(x)),j=-1;for(P=0;P<f.length;P++){var k;-1!==(k=b.indexOf(f[P]))&&(-1===j||k<j)&&(j=k)}-1===j&&(j=b.length),this.host=b.slice(0,j),b=b.slice(j),this.parseHost(),this.hostname=this.hostname||"";var I="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!I)for(var T=this.hostname.split(/\./),R=(P=0,T.length);P<R;P++){var C=T[P];if(C&&!C.match(d)){for(var A="",N=0,L=C.length;N<L;N++)C.charCodeAt(N)>127?A+="x":A+=C[N];if(!A.match(d)){var D=T.slice(0,P),M=T.slice(P+1),F=C.match(h);F&&(D.push(F[1]),M.unshift(F[2])),M.length&&(b="/"+M.join(".")+b),this.hostname=D.join(".");break}}}this.hostname.length>255?this.hostname="":this.hostname=this.hostname.toLowerCase(),I||(this.hostname=r.toASCII(this.hostname));var U=this.port?":"+this.port:"",B=this.hostname||"";this.host=B+U,this.href+=this.host,I&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==b[0]&&(b="/"+b))}if(!y[E])for(P=0,R=l.length;P<R;P++){var H=l[P];if(-1!==b.indexOf(H)){var q=encodeURIComponent(H);q===H&&(q=escape(H)),b=b.split(H).join(q)}}var z=b.indexOf("#");-1!==z&&(this.hash=b.substr(z),b=b.slice(0,z));var G=b.indexOf("?");if(-1!==G?(this.search=b.substr(G),this.query=b.substr(G+1),t&&(this.query=g.parse(this.query)),b=b.slice(0,G)):t&&(this.search="",this.query={}),b&&(this.pathname=b),v[E]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){U=this.pathname||"";var W=this.search||"";this.path=U+W}return this.href=this.format(),this},i.prototype.format=function(){var e=this.auth||"";e&&(e=(e=encodeURIComponent(e)).replace(/%3A/i,":"),e+="@");var t=this.protocol||"",n=this.pathname||"",r=this.hash||"",i=!1,a="";this.host?i=e+this.host:this.hostname&&(i=e+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(i+=":"+this.port)),this.query&&o.isObject(this.query)&&Object.keys(this.query).length&&(a=g.stringify(this.query));var u=this.search||a&&"?"+a||"";return t&&":"!==t.substr(-1)&&(t+=":"),this.slashes||(!t||v[t])&&!1!==i?(i="//"+(i||""),n&&"/"!==n.charAt(0)&&(n="/"+n)):i||(i=""),r&&"#"!==r.charAt(0)&&(r="#"+r),u&&"?"!==u.charAt(0)&&(u="?"+u),t+i+(n=n.replace(/[?#]/g,(function(e){return encodeURIComponent(e)})))+(u=u.replace("#","%23"))+r},i.prototype.resolve=function(e){return this.resolveObject(b(e,!1,!0)).format()},i.prototype.resolveObject=function(e){if(o.isString(e)){var t=new i;t.parse(e,!1,!0),e=t}for(var n=new i,r=Object.keys(this),a=0;a<r.length;a++){var u=r[a];n[u]=this[u]}if(n.hash=e.hash,""===e.href)return n.href=n.format(),n;if(e.slashes&&!e.protocol){for(var c=Object.keys(e),s=0;s<c.length;s++){var l=c[s];"protocol"!==l&&(n[l]=e[l])}return v[n.protocol]&&n.hostname&&!n.pathname&&(n.path=n.pathname="/"),n.href=n.format(),n}if(e.protocol&&e.protocol!==n.protocol){if(!v[e.protocol]){for(var f=Object.keys(e),p=0;p<f.length;p++){var d=f[p];n[d]=e[d]}return n.href=n.format(),n}if(n.protocol=e.protocol,e.host||m[e.protocol])n.pathname=e.pathname;else{for(var h=(e.pathname||"").split("/");h.length&&!(e.host=h.shift()););e.host||(e.host=""),e.hostname||(e.hostname=""),""!==h[0]&&h.unshift(""),h.length<2&&h.unshift(""),n.pathname=h.join("/")}if(n.search=e.search,n.query=e.query,n.host=e.host||"",n.auth=e.auth,n.hostname=e.hostname||e.host,n.port=e.port,n.pathname||n.search){var y=n.pathname||"",g=n.search||"";n.path=y+g}return n.slashes=n.slashes||e.slashes,n.href=n.format(),n}var b=n.pathname&&"/"===n.pathname.charAt(0),w=e.host||e.pathname&&"/"===e.pathname.charAt(0),O=w||b||n.host&&e.pathname,E=O,_=n.pathname&&n.pathname.split("/")||[],x=(h=e.pathname&&e.pathname.split("/")||[],n.protocol&&!v[n.protocol]);if(x&&(n.hostname="",n.port=null,n.host&&(""===_[0]?_[0]=n.host:_.unshift(n.host)),n.host="",e.protocol&&(e.hostname=null,e.port=null,e.host&&(""===h[0]?h[0]=e.host:h.unshift(e.host)),e.host=null),O=O&&(""===h[0]||""===_[0])),w)n.host=e.host||""===e.host?e.host:n.host,n.hostname=e.hostname||""===e.hostname?e.hostname:n.hostname,n.search=e.search,n.query=e.query,_=h;else if(h.length)_||(_=[]),_.pop(),_=_.concat(h),n.search=e.search,n.query=e.query;else if(!o.isNullOrUndefined(e.search)){if(x)n.hostname=n.host=_.shift(),(I=!!(n.host&&n.host.indexOf("@")>0)&&n.host.split("@"))&&(n.auth=I.shift(),n.host=n.hostname=I.shift());return n.search=e.search,n.query=e.query,o.isNull(n.pathname)&&o.isNull(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.href=n.format(),n}if(!_.length)return n.pathname=null,n.search?n.path="/"+n.search:n.path=null,n.href=n.format(),n;for(var S=_.slice(-1)[0],j=(n.host||e.host||_.length>1)&&("."===S||".."===S)||""===S,P=0,k=_.length;k>=0;k--)"."===(S=_[k])?_.splice(k,1):".."===S?(_.splice(k,1),P++):P&&(_.splice(k,1),P--);if(!O&&!E)for(;P--;P)_.unshift("..");!O||""===_[0]||_[0]&&"/"===_[0].charAt(0)||_.unshift(""),j&&"/"!==_.join("/").substr(-1)&&_.push("");var I,T=""===_[0]||_[0]&&"/"===_[0].charAt(0);x&&(n.hostname=n.host=T?"":_.length?_.shift():"",(I=!!(n.host&&n.host.indexOf("@")>0)&&n.host.split("@"))&&(n.auth=I.shift(),n.host=n.hostname=I.shift()));return(O=O||n.host&&_.length)&&!T&&_.unshift(""),_.length?n.pathname=_.join("/"):(n.pathname=null,n.path=null),o.isNull(n.pathname)&&o.isNull(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.auth=e.auth||n.auth,n.slashes=n.slashes||e.slashes,n.href=n.format(),n},i.prototype.parseHost=function(){var e=this.host,t=u.exec(e);t&&(":"!==(t=t[0])&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)}},7030:e=>{"use strict";e.exports={isString:function(e){return"string"==typeof e},isObject:function(e){return"object"==typeof e&&null!==e},isNull:function(e){return null===e},isNullOrUndefined:function(e){return null==e}}},16727:e=>{"use strict";var t=function(){};e.exports=t},35409:(e,t,n)=>{"use strict";n.r(t),n.d(t,{DOMException:()=>S,Headers:()=>h,Request:()=>O,Response:()=>_,fetch:()=>j});var r="undefined"!=typeof globalThis&&globalThis||"undefined"!=typeof self&&self||void 0!==r&&r,o="URLSearchParams"in r,i="Symbol"in r&&"iterator"in Symbol,a="FileReader"in r&&"Blob"in r&&function(){try{return new Blob,!0}catch(e){return!1}}(),u="FormData"in r,c="ArrayBuffer"in r;if(c)var s=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],l=ArrayBuffer.isView||function(e){return e&&s.indexOf(Object.prototype.toString.call(e))>-1};function f(e){if("string"!=typeof e&&(e=String(e)),/[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(e)||""===e)throw new TypeError('Invalid character in header field name: "'+e+'"');return e.toLowerCase()}function p(e){return"string"!=typeof e&&(e=String(e)),e}function d(e){var t={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return i&&(t[Symbol.iterator]=function(){return t}),t}function h(e){this.map={},e instanceof h?e.forEach((function(e,t){this.append(t,e)}),this):Array.isArray(e)?e.forEach((function(e){this.append(e[0],e[1])}),this):e&&Object.getOwnPropertyNames(e).forEach((function(t){this.append(t,e[t])}),this)}function y(e){if(e.bodyUsed)return Promise.reject(new TypeError("Already read"));e.bodyUsed=!0}function m(e){return new Promise((function(t,n){e.onload=function(){t(e.result)},e.onerror=function(){n(e.error)}}))}function v(e){var t=new FileReader,n=m(t);return t.readAsArrayBuffer(e),n}function g(e){if(e.slice)return e.slice(0);var t=new Uint8Array(e.byteLength);return t.set(new Uint8Array(e)),t.buffer}function b(){return this.bodyUsed=!1,this._initBody=function(e){var t;this.bodyUsed=this.bodyUsed,this._bodyInit=e,e?"string"==typeof e?this._bodyText=e:a&&Blob.prototype.isPrototypeOf(e)?this._bodyBlob=e:u&&FormData.prototype.isPrototypeOf(e)?this._bodyFormData=e:o&&URLSearchParams.prototype.isPrototypeOf(e)?this._bodyText=e.toString():c&&a&&((t=e)&&DataView.prototype.isPrototypeOf(t))?(this._bodyArrayBuffer=g(e.buffer),this._bodyInit=new Blob([this._bodyArrayBuffer])):c&&(ArrayBuffer.prototype.isPrototypeOf(e)||l(e))?this._bodyArrayBuffer=g(e):this._bodyText=e=Object.prototype.toString.call(e):this._bodyText="",this.headers.get("content-type")||("string"==typeof e?this.headers.set("content-type","text/plain;charset=UTF-8"):this._bodyBlob&&this._bodyBlob.type?this.headers.set("content-type",this._bodyBlob.type):o&&URLSearchParams.prototype.isPrototypeOf(e)&&this.headers.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"))},a&&(this.blob=function(){var e=y(this);if(e)return e;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(new Blob([this._bodyArrayBuffer]));if(this._bodyFormData)throw new Error("could not read FormData body as blob");return Promise.resolve(new Blob([this._bodyText]))},this.arrayBuffer=function(){if(this._bodyArrayBuffer){var e=y(this);return e||(ArrayBuffer.isView(this._bodyArrayBuffer)?Promise.resolve(this._bodyArrayBuffer.buffer.slice(this._bodyArrayBuffer.byteOffset,this._bodyArrayBuffer.byteOffset+this._bodyArrayBuffer.byteLength)):Promise.resolve(this._bodyArrayBuffer))}return this.blob().then(v)}),this.text=function(){var e,t,n,r=y(this);if(r)return r;if(this._bodyBlob)return e=this._bodyBlob,t=new FileReader,n=m(t),t.readAsText(e),n;if(this._bodyArrayBuffer)return Promise.resolve(function(e){for(var t=new Uint8Array(e),n=new Array(t.length),r=0;r<t.length;r++)n[r]=String.fromCharCode(t[r]);return n.join("")}(this._bodyArrayBuffer));if(this._bodyFormData)throw new Error("could not read FormData body as text");return Promise.resolve(this._bodyText)},u&&(this.formData=function(){return this.text().then(E)}),this.json=function(){return this.text().then(JSON.parse)},this}h.prototype.append=function(e,t){e=f(e),t=p(t);var n=this.map[e];this.map[e]=n?n+", "+t:t},h.prototype.delete=function(e){delete this.map[f(e)]},h.prototype.get=function(e){return e=f(e),this.has(e)?this.map[e]:null},h.prototype.has=function(e){return this.map.hasOwnProperty(f(e))},h.prototype.set=function(e,t){this.map[f(e)]=p(t)},h.prototype.forEach=function(e,t){for(var n in this.map)this.map.hasOwnProperty(n)&&e.call(t,this.map[n],n,this)},h.prototype.keys=function(){var e=[];return this.forEach((function(t,n){e.push(n)})),d(e)},h.prototype.values=function(){var e=[];return this.forEach((function(t){e.push(t)})),d(e)},h.prototype.entries=function(){var e=[];return this.forEach((function(t,n){e.push([n,t])})),d(e)},i&&(h.prototype[Symbol.iterator]=h.prototype.entries);var w=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];function O(e,t){if(!(this instanceof O))throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');var n,r,o=(t=t||{}).body;if(e instanceof O){if(e.bodyUsed)throw new TypeError("Already read");this.url=e.url,this.credentials=e.credentials,t.headers||(this.headers=new h(e.headers)),this.method=e.method,this.mode=e.mode,this.signal=e.signal,o||null==e._bodyInit||(o=e._bodyInit,e.bodyUsed=!0)}else this.url=String(e);if(this.credentials=t.credentials||this.credentials||"same-origin",!t.headers&&this.headers||(this.headers=new h(t.headers)),this.method=(n=t.method||this.method||"GET",r=n.toUpperCase(),w.indexOf(r)>-1?r:n),this.mode=t.mode||this.mode||null,this.signal=t.signal||this.signal,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&o)throw new TypeError("Body not allowed for GET or HEAD requests");if(this._initBody(o),!("GET"!==this.method&&"HEAD"!==this.method||"no-store"!==t.cache&&"no-cache"!==t.cache)){var i=/([?&])_=[^&]*/;if(i.test(this.url))this.url=this.url.replace(i,"$1_="+(new Date).getTime());else{this.url+=(/\?/.test(this.url)?"&":"?")+"_="+(new Date).getTime()}}}function E(e){var t=new FormData;return e.trim().split("&").forEach((function(e){if(e){var n=e.split("="),r=n.shift().replace(/\+/g," "),o=n.join("=").replace(/\+/g," ");t.append(decodeURIComponent(r),decodeURIComponent(o))}})),t}function _(e,t){if(!(this instanceof _))throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');t||(t={}),this.type="default",this.status=void 0===t.status?200:t.status,this.ok=this.status>=200&&this.status<300,this.statusText=void 0===t.statusText?"":""+t.statusText,this.headers=new h(t.headers),this.url=t.url||"",this._initBody(e)}O.prototype.clone=function(){return new O(this,{body:this._bodyInit})},b.call(O.prototype),b.call(_.prototype),_.prototype.clone=function(){return new _(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new h(this.headers),url:this.url})},_.error=function(){var e=new _(null,{status:0,statusText:""});return e.type="error",e};var x=[301,302,303,307,308];_.redirect=function(e,t){if(-1===x.indexOf(t))throw new RangeError("Invalid status code");return new _(null,{status:t,headers:{location:e}})};var S=r.DOMException;try{new S}catch(e){(S=function(e,t){this.message=e,this.name=t;var n=Error(e);this.stack=n.stack}).prototype=Object.create(Error.prototype),S.prototype.constructor=S}function j(e,t){return new Promise((function(n,o){var i=new O(e,t);if(i.signal&&i.signal.aborted)return o(new S("Aborted","AbortError"));var u=new XMLHttpRequest;function s(){u.abort()}u.onload=function(){var e,t,r={status:u.status,statusText:u.statusText,headers:(e=u.getAllResponseHeaders()||"",t=new h,e.replace(/\r?\n[\t ]+/g," ").split("\r").map((function(e){return 0===e.indexOf("\n")?e.substr(1,e.length):e})).forEach((function(e){var n=e.split(":"),r=n.shift().trim();if(r){var o=n.join(":").trim();t.append(r,o)}})),t)};r.url="responseURL"in u?u.responseURL:r.headers.get("X-Request-URL");var o="response"in u?u.response:u.responseText;setTimeout((function(){n(new _(o,r))}),0)},u.onerror=function(){setTimeout((function(){o(new TypeError("Network request failed"))}),0)},u.ontimeout=function(){setTimeout((function(){o(new TypeError("Network request failed"))}),0)},u.onabort=function(){setTimeout((function(){o(new S("Aborted","AbortError"))}),0)},u.open(i.method,function(e){try{return""===e&&r.location.href?r.location.href:e}catch(t){return e}}(i.url),!0),"include"===i.credentials?u.withCredentials=!0:"omit"===i.credentials&&(u.withCredentials=!1),"responseType"in u&&(a?u.responseType="blob":c&&i.headers.get("Content-Type")&&-1!==i.headers.get("Content-Type").indexOf("application/octet-stream")&&(u.responseType="arraybuffer")),!t||"object"!=typeof t.headers||t.headers instanceof h?i.headers.forEach((function(e,t){u.setRequestHeader(t,e)})):Object.getOwnPropertyNames(t.headers).forEach((function(e){u.setRequestHeader(e,p(t.headers[e]))})),i.signal&&(i.signal.addEventListener("abort",s),u.onreadystatechange=function(){4===u.readyState&&i.signal.removeEventListener("abort",s)}),u.send(void 0===i._bodyInit?null:i._bodyInit)}))}j.polyfill=!0,r.fetch||(r.fetch=j,r.Headers=h,r.Request=O,r.Response=_)},69599:()=>{},88653:(e,t,n)=>{"use strict";const r=n(5837);e.exports=a;const o=function(){function e(e){return void 0!==e&&e}try{return"undefined"!=typeof globalThis||Object.defineProperty(Object.prototype,"globalThis",{get:function(){return delete Object.prototype.globalThis,this.globalThis=this},configurable:!0}),globalThis}catch(t){return e(self)||e(window)||e(this)||{}}}().console||{},i={mapHttpRequest:h,mapHttpResponse:h,wrapRequestSerializer:y,wrapResponseSerializer:y,wrapErrorSerializer:y,req:h,res:h,err:function(e){const t={type:e.constructor.name,msg:e.message,stack:e.stack};for(const n in e)void 0===t[n]&&(t[n]=e[n]);return t}};function a(e){(e=e||{}).browser=e.browser||{};const t=e.browser.transmit;if(t&&"function"!=typeof t.send)throw Error("pino: transmit option must have a send function");const n=e.browser.write||o;e.browser.write&&(e.browser.asObject=!0);const r=e.serializers||{},i=function(e,t){if(Array.isArray(e))return e.filter((function(e){return"!stdSerializers.err"!==e}));return!0===e&&Object.keys(t)}(e.browser.serialize,r);let c=e.browser.serialize;Array.isArray(e.browser.serialize)&&e.browser.serialize.indexOf("!stdSerializers.err")>-1&&(c=!1);"function"==typeof n&&(n.error=n.fatal=n.warn=n.info=n.debug=n.trace=n),!1===e.enabled&&(e.level="silent");const f=e.level||"info",h=Object.create(n);h.log||(h.log=m),Object.defineProperty(h,"levelVal",{get:function(){return"silent"===this.level?1/0:this.levels.values[this.level]}}),Object.defineProperty(h,"level",{get:function(){return this._level},set:function(e){if("silent"!==e&&!this.levels.values[e])throw Error("unknown level "+e);this._level=e,u(y,h,"error","log"),u(y,h,"fatal","error"),u(y,h,"warn","error"),u(y,h,"info","log"),u(y,h,"debug","log"),u(y,h,"trace","log")}});const y={transmit:t,serialize:i,asObject:e.browser.asObject,levels:["error","fatal","warn","info","debug","trace"],timestamp:d(e)};return h.levels=a.levels,h.level=f,h.setMaxListeners=h.getMaxListeners=h.emit=h.addListener=h.on=h.prependListener=h.once=h.prependOnceListener=h.removeListener=h.removeAllListeners=h.listeners=h.listenerCount=h.eventNames=h.write=h.flush=m,h.serializers=r,h._serialize=i,h._stdErrSerialize=c,h.child=function(n,o){if(!n)throw new Error("missing bindings for child Pino");o=o||{},i&&n.serializers&&(o.serializers=n.serializers);const a=o.serializers;if(i&&a){var u=Object.assign({},r,a),c=!0===e.browser.serialize?Object.keys(u):i;delete n.serializers,s([n],c,u,this._stdErrSerialize)}function f(e){this._childLevel=1+(0|e._childLevel),this.error=l(e,n,"error"),this.fatal=l(e,n,"fatal"),this.warn=l(e,n,"warn"),this.info=l(e,n,"info"),this.debug=l(e,n,"debug"),this.trace=l(e,n,"trace"),u&&(this.serializers=u,this._serialize=c),t&&(this._logEvent=p([].concat(e._logEvent.bindings,n)))}return f.prototype=this,new f(this)},t&&(h._logEvent=p()),h}function u(e,t,n,r){const i=Object.getPrototypeOf(t);t[n]=t.levelVal>t.levels.values[n]?m:i[n]?i[n]:o[n]||o[r]||m,function(e,t,n){if(!e.transmit&&t[n]===m)return;t[n]=(r=t[n],function(){const i=e.timestamp(),u=new Array(arguments.length),l=Object.getPrototypeOf&&Object.getPrototypeOf(this)===o?o:this;for(var p=0;p<u.length;p++)u[p]=arguments[p];if(e.serialize&&!e.asObject&&s(u,this._serialize,this.serializers,this._stdErrSerialize),e.asObject?r.call(l,c(this,n,u,i)):r.apply(l,u),e.transmit){const r=e.transmit.level||t.level,o=a.levels.values[r],c=a.levels.values[n];if(c<o)return;f(this,{ts:i,methodLevel:n,methodValue:c,transmitLevel:r,transmitValue:a.levels.values[e.transmit.level||t.level],send:e.transmit.send,val:t.levelVal},u)}});var r}(e,t,n)}function c(e,t,n,o){e._serialize&&s(n,e._serialize,e.serializers,e._stdErrSerialize);const i=n.slice();let u=i[0];const c={};o&&(c.time=o),c.level=a.levels.values[t];let l=1+(0|e._childLevel);if(l<1&&(l=1),null!==u&&"object"==typeof u){for(;l--&&"object"==typeof i[0];)Object.assign(c,i.shift());u=i.length?r(i.shift(),i):void 0}else"string"==typeof u&&(u=r(i.shift(),i));return void 0!==u&&(c.msg=u),c}function s(e,t,n,r){for(const o in e)if(r&&e[o]instanceof Error)e[o]=a.stdSerializers.err(e[o]);else if("object"==typeof e[o]&&!Array.isArray(e[o]))for(const r in e[o])t&&t.indexOf(r)>-1&&r in n&&(e[o][r]=n[r](e[o][r]))}function l(e,t,n){return function(){const r=new Array(1+arguments.length);r[0]=t;for(var o=1;o<r.length;o++)r[o]=arguments[o-1];return e[n].apply(this,r)}}function f(e,t,n){const r=t.send,o=t.ts,i=t.methodLevel,a=t.methodValue,u=t.val,c=e._logEvent.bindings;s(n,e._serialize||Object.keys(e.serializers),e.serializers,void 0===e._stdErrSerialize||e._stdErrSerialize),e._logEvent.ts=o,e._logEvent.messages=n.filter((function(e){return-1===c.indexOf(e)})),e._logEvent.level.label=i,e._logEvent.level.value=a,r(i,e._logEvent,u),e._logEvent=p(c)}function p(e){return{ts:0,messages:[],bindings:e||[],level:{label:"",value:0}}}function d(e){return"function"==typeof e.timestamp?e.timestamp:!1===e.timestamp?v:g}function h(){return{}}function y(e){return e}function m(){}function v(){return!1}function g(){return Date.now()}a.levels={values:{fatal:60,error:50,warn:40,info:30,debug:20,trace:10},labels:{10:"trace",20:"debug",30:"info",40:"warn",50:"error",60:"fatal"}},a.stdSerializers=i,a.stdTimeFunctions=Object.assign({},{nullTime:v,epochTime:g,unixTime:function(){return Math.round(Date.now()/1e3)},isoTime:function(){return new Date(Date.now()).toISOString()}})},5573:(e,t,n)=>{"use strict";function r(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}n.d(t,{Z:()=>r})},30513:(e,t,n)=>{"use strict";function r(){return(r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}n.d(t,{Z:()=>r})},85854:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(40589);function o(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,(0,r.Z)(e,t)}},3812:(e,t,n)=>{"use strict";function r(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}n.d(t,{Z:()=>r})},40589:(e,t,n)=>{"use strict";function r(e,t){return(r=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}n.d(t,{Z:()=>r})}},i={};function a(e){var t=i[e];if(void 0!==t)return t.exports;var n=i[e]={id:e,loaded:!1,exports:{}};return o[e].call(n.exports,n,n.exports,a),n.loaded=!0,n.exports}a.m=o,a.amdO={},a.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return a.d(t,{a:t}),t},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,a.t=function(n,r){if(1&r&&(n=this(n)),8&r)return n;if("object"==typeof n&&n){if(4&r&&n.__esModule)return n;if(16&r&&"function"==typeof n.then)return n}var o=Object.create(null);a.r(o);var i={};e=e||[null,t({}),t([]),t(t)];for(var u=2&r&&n;"object"==typeof u&&!~e.indexOf(u);u=t(u))Object.getOwnPropertyNames(u).forEach((e=>i[e]=()=>n[e]));return i.default=()=>n,a.d(o,i),o},a.d=(e,t)=>{for(var n in t)a.o(t,n)&&!a.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},a.f={},a.e=e=>Promise.all(Object.keys(a.f).reduce(((t,n)=>(a.f[n](e,t),t)),[])),a.u=e=>({186:"amo-i18n-et-amo-js",339:"amo-i18n-az-amo-js",458:"amo-i18n-eu-amo-js",652:"amo-i18n-de-amo-js",673:"amo-i18n-fy_NL-amo-js",685:"amo-i18n-bn-amo-js",689:"amo-i18n-da-amo-js",929:"amo-i18n-sq-amo-js",972:"amo-i18n-fi-amo-js",1132:"amo-i18n-el-amo-js",1818:"amo-i18n-uk-amo-js",2068:"amo-i18n-nn_NO-amo-js",2580:"amo-i18n-sk-amo-js",2704:"amo-i18n-ka-amo-js",2958:"amo-i18n-ja-amo-js",3107:"amo-i18n-hr-amo-js",3130:"amo-i18n-mt-amo-js",3155:"amo-i18n-tr-amo-js",3178:"amo-i18n-es-amo-js",3197:"amo-i18n-pa_IN-amo-js",3751:"amo-i18n-bs-amo-js",3957:"amo-i18n-lv-amo-js",4402:"amo-i18n-cs-amo-js",4469:"amo-i18n-sl-amo-js",4872:"amo-i18n-zh_CN-amo-js",4960:"amo-i18n-mk-amo-js",5039:"amo-i18n-ia-amo-js",5101:"amo-i18n-mn-amo-js",5110:"amo-i18n-is-amo-js",5256:"amo-i18n-ms-amo-js",5490:"amo-i18n-ro-amo-js",5494:"amo-i18n-zh_TW-amo-js",5763:"amo-i18n-fa-amo-js",5899:"amo-i18n-ur-amo-js",6553:"amo-i18n-vi-amo-js",6737:"amo-i18n-pl-amo-js",6788:"amo-i18n-nb_NO-amo-js",6872:"amo-i18n-ru-amo-js",6897:"amo-i18n-kab-amo-js",6918:"amo-i18n-it-amo-js",7004:"amo-i18n-af-amo-js",7030:"amo-i18n-lt-amo-js",7049:"amo-i18n-dsb-amo-js",7284:"amo-i18n-sv_SE-amo-js",7352:"amo-i18n-hsb-amo-js",7496:"amo-i18n-ar-amo-js",7542:"amo-i18n-id-amo-js",7597:"amo-i18n-ga_IE-amo-js",7636:"amo-i18n-en_US-amo-js",7905:"amo-i18n-pt_PT-amo-js",7927:"amo-i18n-en_GB-amo-js",8470:"amo-i18n-fr-amo-js",8677:"amo-i18n-cak-amo-js",8865:"amo-i18n-ast-amo-js",9290:"amo-i18n-te-amo-js",9300:"amo-i18n-he-amo-js",9419:"amo-i18n-en_CA-amo-js",9628:"amo-i18n-bg-amo-js",9649:"amo-i18n-hu-amo-js",9700:"amo-i18n-pt_BR-amo-js",9814:"amo-i18n-ko-amo-js",9901:"amo-i18n-th-amo-js",9918:"amo-i18n-ca-amo-js",9988:"amo-i18n-nl-amo-js"}[e]+"-"+{186:"c4edd5ffafeafad602ff",339:"cd149e3509aa47511816",458:"3010e8ef9b6535a6e203",652:"72dd2299b65735ff870a",673:"abb93fb7af80c4520617",685:"927e4bdd8b51557c3895",689:"ffdb419d7a69730a3fca",929:"0f001770645cd1d07d42",972:"b1ecc2c0f477149a5870",1132:"2ed8524834c30496bc3b",1818:"beaffb385572dbbf6499",2068:"868767d300f1b1c9cf75",2580:"524edb3f5194ea5fc3aa",2704:"15fd59dd97b35dfa25eb",2958:"fb6020e1404aa4cf7ff0",3107:"444042a469366e8e0542",3130:"e967bd02776f556ef0b8",3155:"0147182f4e9aa118f2a2",3178:"7d3b7d42fe93066ba266",3197:"2e801117c0fe85087d08",3751:"ef19ad413f5a3c946beb",3957:"cbb2dbb2fa1d6eb53b97",4402:"3336f6cbd82e87f56e6f",4469:"5ac35ba9855d1688402c",4872:"40f4fca69bd8a96da247",4960:"5ebf299a5fbe2cc740de",5039:"303e155422b3255cff08",5101:"35983318a95ef0c4654d",5110:"e5c19ba54ec1c8eeb71f",5256:"16b76b19415a75f43848",5490:"5aad4a87a2514e8ffacd",5494:"ef9e3c8440084b95d1be",5763:"40d4569d4754da51d74c",5899:"c4c67d1400bccb6664c9",6553:"c2ea66611d5db3ef2294",6737:"31db0e331f5b4acb7aa8",6788:"f9328795b73c6b647e10",6872:"7476fa74b2800a4a2f21",6897:"8bfc9dccf70a027a90ac",6918:"adccdaa4baad4f1147c1",7004:"ea862cf8e76dedbd6df4",7030:"bbd8b538f06b55bd9920",7049:"4ca46a1527faa7c3134a",7284:"e670cb84f484d60ffd82",7352:"092aba055d7a4b534658",7496:"07fea7e3155bee9fefca",7542:"0b7e29a78482365b2852",7597:"03c35dc66ccc6de60919",7636:"409e344d91d603e3c14e",7905:"6f2eb8c371d1c907b811",7927:"a46a87652cd93b1bc79e",8470:"0820b8e54540fa427175",8677:"30346548dd8163664bab",8865:"edd5e9fa54e632b77a96",9290:"7e30f5fd1497fc58c510",9300:"39731d49c5b45d2fbe86",9419:"d838516726bdcc2d998d",9628:"d799c6b357db719198ed",9649:"6370082631668991bab6",9700:"f71a489416710abf2465",9814:"8f85fb209750f43377f5",9901:"675d83c8568f11229f4e",9918:"e062ad38948b978a49f2",9988:"dfee20c108aa4bb368b3"}[e]+".js"),a.miniCssF=e=>"amo-3d24af19c698652ec47b.css",a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),a.hmd=e=>((e=Object.create(e)).children||(e.children=[]),Object.defineProperty(e,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+e.id)}}),e),a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n={},r="mozilla-addons-frontend:",a.l=(e,t,o,i)=>{if(n[e])n[e].push(t);else{var u,c;if(void 0!==o)for(var s=document.getElementsByTagName("script"),l=0;l<s.length;l++){var f=s[l];if(f.getAttribute("src")==e||f.getAttribute("data-webpack")==r+o){u=f;break}}u||(c=!0,(u=document.createElement("script")).charset="utf-8",u.timeout=120,a.nc&&u.setAttribute("nonce",a.nc),u.setAttribute("data-webpack",r+o),u.src=e,0!==u.src.indexOf(window.location.origin+"/")&&(u.crossOrigin="anonymous"),u.integrity=a.sriHashes[i],u.crossOrigin="anonymous"),n[e]=[t];var p=(t,r)=>{u.onerror=u.onload=null,clearTimeout(d);var o=n[e];if(delete n[e],u.parentNode&&u.parentNode.removeChild(u),o&&o.forEach((e=>e(r))),t)return t(r)},d=setTimeout(p.bind(null,void 0,{type:"timeout",target:u}),12e4);u.onerror=p.bind(null,u.onerror),u.onload=p.bind(null,u.onload),c&&document.head.appendChild(u)}},a.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),a.p="/static-frontend/",a.sriHashes={186:"sha512-BinXcmSqa+EdgDwT6XTIE25GNWEGnWeTWAFnMUzUyOF5B3crT7k7/fIJBYU+hBRKcrVZaKFJvQqUpyZRYcecyg==",339:"sha512-c8ZotMBOGLFU7bPCoOQJxkCnKB1zcD/f2ItH5nVyJkoumJ7nqPR9ec+HK9GR4pLG/MAzCLHyLxpFUlOpn/81LQ==",458:"sha512-qUBSoDpfPW26paCS9Zkgw9RR7mNRiYycYaxT8qbdpdmjN0Q4ggQWsDh9OR1+/EttC1TofESM1flhQmYP4OPuOg==",652:"sha512-+d41h58bhTkkMDCiBjRXlToscXeTWc0bhZoRhbE8+FN1MMv2JgO3KKJfc0IZPKgffk8smf/7Q+lDz+iGn/Ht7A==",673:"sha512-FZrUY8VVU3cQbrAku4YZvW2IqNkwaZIJPEtZ4RlMUms/2JGXZx6uGAlxHBT2j+vMuvZkXJfNCbo4t+RbwkOMjQ==",685:"sha512-AQi+X7+GC6dn9iyFv00eiOqXMJ2P03aoQ9MuTJRLGYWOBS3wqO6A+hkhOBiiwwbyyWV5FtsF2IH1AK7OYJ7SCA==",689:"sha512-v0Bhjc/JkHY5JbTkO8ljNByU0ilXKEMdaWgepFxIvnKw0KiuWR3H31cs2ohRz0Ckz/WZhqjMJlbfoguARCmfZw==",929:"sha512-NV5ov1672NMFX9di5+YuVPbpj6w0FL5JD0j73MXw5kYOOuBDHm9q54tKungRJK4XfrM4KRbMON5NfrXidhpOeQ==",972:"sha512-6/nwFOikUyimxhsI9Bx7IL39N+dvypWMMl4voSUL0TVExPLTNvfsAuR/1foXVMjesclLIBUQMOZjgSYs8eLFLA==",1132:"sha512-RGZiEKGbXfCKxefxAV2d4VjOIJSvLKwQsVnyUDWVe193XGvI5awVBZMKdv1N+YQ8835neYqsbEGmAOszncWgVA==",1818:"sha512-hV5VxWJjKN2VN0k06H/VbRfHeLbBRh9iiOAwa9Mr7uBMCkm9qZqFwsbiaBLM4Tm6Z+ryVtsds8slYDXng/IRPA==",2068:"sha512-MwcRl6cmmDirS1flQzUJqshmSy3w1NoeZJzEIVQat/3KnuB7LwEFKMySXRBwtHoWd+ROgArSpywSbvpcQ1qoOQ==",2580:"sha512-5LDa2m1EkK3NhAgQb09id94ZZ2du6uTayRwEGGNyCHsHnTzpAF5kOhZg34HPRVyF/mtCYDRQXGotz6W7SY4oHw==",2704:"sha512-Ikh8Xcm7tNvd9RKFyQUlODCWdJunBQgnxI4HkkfT7XivH50S+YMcO0eM7bT3tJAGnskSCzK9NnsU73sce6C/9A==",2958:"sha512-BotLrzIGWJ76pLhE12QOIkRdb2YT/takKNtqep6uoN1WjIvBLSBjv1mOvuIker+qAuLR0bFlyXhN+0VoYjXnoQ==",3107:"sha512-ocrH9vV7590iy9UFHYXiK/QuDlxcSQLjb+TQXRsyI6Y/E0pzdDwX285nc/AJK6JnIPVcmnCQKAu0JhVz5nkXOA==",3130:"sha512-8pskVqLA39qntxOtMTrrvQNGYO0vhGpJzAnIugVGmINAY2YDCF4LLl1uIv4NcPD9C3SHBU7jeFr/EOzIRXBrWg==",3155:"sha512-G/6H5DNUrWPEQv3O56FbVQKoU4mTa11++vxs5RpBzWwu7ZjeV8QeuTJKm8+g1SH2xx1Pk7EVryCLyQoZjoJolg==",3178:"sha512-77YQLcsrjyE92lNLf259wlcj+7K0IscU6Jp19LjZ0eeZ5Jdswyr2ls1sV4o1WQ0LdVdaayIZ2cd0jWsvSGUZpA==",3197:"sha512-9dFMZxHh94BbzEbRZSOek585ireMUPEnF/qdzyDV7SX/ae1yqQIBNK3YPgZJfrTV8hjMxhqGJWH/shwSIg0ccA==",3751:"sha512-VX+31lUL0Wzo+dItDLxjDwiJIDZTepE3RSkglWbOI5KbYkbhDTzm3kuDoE05gdLqGzlyy3I8RjUUnMP8BKRfnA==",3957:"sha512-fUfjyh8+h+pYcBdbS4Tb2slE7YEw1pisX8XypqbLvv34ZZ1sW1O+bD96BeYf4CTJQe7g5a5ngD0C5mRUpI+2ig==",4402:"sha512-LDS1hvvqrxn/ibcMa0OIbUGEJBPGpMghjqN/hV2ups1OAc8SiDXH7OxcSXcko9KfkF6zueHMKTZmKgvacp3UuA==",4469:"sha512-s2NF+vXsT+Bag3Y+WRjyllHoVOyhSvJF64okF1dMiiioJzdBowcQfhnxXvF1sff7+vUrqpLJdo4lLWq1Av4POQ==",4872:"sha512-QMehNo5qMRyCAyiVWX2+qiVaD9nHUrUxoRv8wL5dW60M1T7VyvO5q9XX2TP8qAGlXV4UWt625zh/93ipYSm4tg==",4960:"sha512-jGQOSJ0CFSJrF7EtnbelzxafCtwfeJBKFuvyCwdxPn9ih0sapNM8EvUgqegadokut48syyJ7uBx4qQD4OQKp2g==",5039:"sha512-WD2McLKHMpNMnlHHu75iS/L2U0uH5eFNs4kEQXwCJ0/vGxgLcSFpOrPFb5q7fD43AgO/j6gmpdXjKhR/4j+FFA==",5101:"sha512-vl+2W7Mu03gO+qqVAhurfaPD3uvJZVNXRJ6neHW098+efSV15bV0VnxvqHxHqfT3TgXEuK84IKsfLk8EAWP8zw==",5110:"sha512-9VLAMcOwQwkrieHbYGdEY9roWOrseTht1fgXhmig04aif3hYaD2PazXWkrsDYEkCEiZBksJYPiAffrFf4V/c/w==",5256:"sha512-184S62wVXIIEN+uh+qmcf/p9AlTsXks+YFXAm0KX9zx03hhD/RoBlNUTw88m3DLH8VCKjJVssM/K1sKYzPjWyA==",5490:"sha512-SAZ1h52DA3s856pDQsNOJ2BXR/dFfJD9ENz/EYgpBd13erMcVSZY+ZUaHF6fi4OAmSrXQtpya9a1rLXeFy4xYg==",5494:"sha512-Vc8fLJz1Y+mRwdtnc3o1wN2+Z3DHJ9rq/cNo71JMctBvsUfYvEn8iYj9rpBPycr2yKxv+aK2mViFaEPANkC2fg==",5763:"sha512-A5RXQye+yzImrZOIl3w50r6ptGdh+aEn5SbJk4UUxl7nrZq+uadHIGJK5Y/OWWWY1IhxJQa84C4G9y3Qnm/G/g==",5899:"sha512-8CoGr+IfG+JN0KUPzjpckSJw7XG5HHCrSPVyTBSmpMFdBB9pGuaRxLaVvSEV3Qkd+9jJ3qlEwuPiBvE2eWmnkA==",6553:"sha512-uHPPfPJp7S7kuV/pL61DxGNLTHzaN7XIU8Mw5V6ryLjAaNgyV5TROYxugiHeEWD1sbzxRUNeGdrNBpP3Ft+yDg==",6737:"sha512-9aEA5DkNk0NxiwqccTI12jwLFqCIOiX6sx0Gyk3Rmbrbgb78F5Xc7xdrKpzPKrVfRh6qfOa1BF3hZ7OepOVpMQ==",6788:"sha512-OWQiL11/QDkGPJ1TuxvepFlYndP5kUVdcvJxZyeoqN3wNf3q1vPu7mo1we0QlmAunCcAk+T7cfgd4IvSbFYjcA==",6872:"sha512-xtr1Ai7uvF+7LPW5TdP/bnBLjsFrFhgGJS/OkHcx0ozOAKl3PotZspAz0XRQU5p4reoIZWmsUs1yRHsrD7B4rA==",6897:"sha512-h6+iIgGaYzo/9JRcG1BpWS8BiVne1Py9uarwCtvcqNTZFLNJbGpSXXLf5Upd4oPUO2BkjkibnEECoY9Q0HyKtA==",6918:"sha512-f60G4Me8Bppg3nobkkYOuZXV+wAYIaX9T/wdD2nlERFLGL7lxIMoSdUjc4D47Y1p6V9WYedJKkvzRBiY9TQAkA==",7004:"sha512-BLEswm1FhCKaEMgplNY+rVGNZTOCmwg/SDW0yY3t7J7cfgRbGLOymKcVUM0PEbrW01rXtzeOKBbSojne/uBmAA==",7030:"sha512-MYd6ZEe+s/+vE2WDXc7lAOBCrTDdB413FHN+4mU2Nq9+qCDxrPpNRK3C5V7s5m/t7QmUAhYRz2koqYbz1c6g5Q==",7049:"sha512-lYAQu8uWDCcPkwjQcTKj4gy/m9CpapeAR3TRGXawwDMoTGYfuczi87nAHElKJgWFt2sM227RZmHY+sG7nbeFhg==",7284:"sha512-syj2zEQd5YYWfybknV9+L9RO5KXc1ELekTBLYYUVWScJGL/PaYd/QaLUlsMP4/HP53HJ9zZGBur0E0LlVp1ROA==",7352:"sha512-rIc5cEZzH4ramnBwCOvjLC8Oq+/uEKfBaiN8Ac+VF52va0eX7sd7EPeTBfR7doWicZalYC33OXouAgBMryZwGw==",7496:"sha512-rxhUSPycNlYzpauRdVDp5NUeOmfmHjGwCGBYb0qVOSX3loWdvrn6w4leLsrb72twKrEm3POY6cPPbquarJU6Eg==",7542:"sha512-2hTnrWjcywVt82rwONYZyC95AuQaAI0Y2hyafGOHZy/ZRzxE9vE4G/jUaDdNOf2WVsgZqfRAbO4ftTvJ1FqnoQ==",7597:"sha512-5dW/XrGLc97BDB/Oh06IglMFYuJBxoEldmgb3H2HSiAv2JBHxhkonltdoCobZM0biTP4RZ/h3sukJY4+0VX6Gg==",7636:"sha512-FJg7rxO0CMsl3tppttdC+ZwjaUKQdjZUYNdhdc6TKwYp94ZSZyEQAcsBI7qoWHsV98d3Qgoklh/joaWNrEWerw==",7905:"sha512-jjY9wWibPClahBBq+7WKrGwljpeyHXk2CPhCUEibELP+/Oy5lgnPr5GB0dW7A7+mHbRpQoVVY+gNIO4gO+wPXg==",7927:"sha512-Ss0z5T1/1IjaU6pNrT1Ypc+0HsllVN0+p8csl+wRwzYsiKOz4BGUrh595AuTRtPJa7BJzo5ztDCbHRxiB/ylfw==",8470:"sha512-64u+fzCIbSqgFX1muIOptJ9JLIuf2AY83WWSEmJ//aIBaIAZDIaxEk/bXm54HezLZSo2p+Wb7DKmFWMm/NnplQ==",8677:"sha512-M0SehFwN2sXNXd70DLntTIyiAMPVBZ1996ruMZqxDa+javGFVQ4ZYEA0GHUbfNEpzc6ShAE19pc8PWvfoXGzOA==",8865:"sha512-dp0wmQr6SLB1NscpuzM9YdCIJmiqiGVN9jO2BljfvevgwEXwWUVY1wzBwmhqXZ4+G0XabLSecJOqo+Lu0y2lIg==",9290:"sha512-wo6nV438tJALMboUyC2zHno1Suau0wwD8oKtKK61HzCdvt6VqqTTbHJ963xmvZrNka0sRG8/NoVIek345VHmow==",9300:"sha512-QNsn3LPp7l+SKKhX26oW1mJdxKrjVLbRRafjELn5B6PXdsHAqiQCm/uZwNEYOdVsq9RR0BKZyrNQsfg9N5hc1A==",9419:"sha512-kH/Yx9qm9BmMxwS6LMmmOMYuCCofYG0oBBTuENh84f5S6t7DO+/jWHRgtqFq63q2o3/RXdVBvrbVWk9RCnuoyQ==",9628:"sha512-nov0NpLXSXS0lB6UYFVRleSSVwwHasilsFx02PWrp81IYiILvzdWnpKKyCJy3gNbZdigy4Xx0i1DwCfvuvo0nw==",9649:"sha512-/kBTcEMUG8Vgsc/BMGRzQHKBFCV//kFfNdC3bwJ4KFWhbgpZnzTLb1qk2FN5cfnA/6jh1DFf+IbSXsbsGI2aXw==",9700:"sha512-346KGu+qre+TNWVabgl+vj9W3tGigUNv7mKL1f95b6POGQNIlDBh9u6miYS7n6Q7Wtn2e5vPd6qZqBKnQm02Og==",9814:"sha512-S7BhUiZruYuMJez+GkGh4h1SYiaQXLnbgWF5FB/rfzNaZp4FKH8GfBL5v58udzPr4PGmtAoqVmMgl6J+QPVZ3Q==",9901:"sha512-MwvFkpvcu8/J1dTmcHdqUjfz3hgpfFUh1fjzSWUb8pquCnm2+topHsGPpsDl3J9D8wTMeNKtBrUGOej2gfNtmA==",9918:"sha512-NovZTt7c75+HPKUtoi1xXFU2dCJf6cEhb9mJuWfJZWKb8gCL0faEAE72v9XK0gsmEWaloNE0+Zu89GwKNPsGdQ==",9988:"sha512-2ahW0sRscRfEuB+JJWSy8YoBZq+AmKHWu94QM9gezUyDPBwo1kE2TVXM3ktKTBuVz6d119kAZCxG1zsMnRJiKg=="},(()=>{var e={9937:0};a.f.j=(t,n)=>{var r=a.o(e,t)?e[t]:void 0;if(0!==r)if(r)n.push(r[2]);else{var o=new Promise(((n,o)=>r=e[t]=[n,o]));n.push(r[2]=o);var i=a.p+a.u(t),u=new Error;a.l(i,(n=>{if(a.o(e,t)&&(0!==(r=e[t])&&(e[t]=void 0),r)){var o=n&&("load"===n.type?"missing":n.type),i=n&&n.target&&n.target.src;u.message="Loading chunk "+t+" failed.\n("+o+": "+i+")",u.name="ChunkLoadError",u.type=o,u.request=i,r[1](u)}}),"chunk-"+t,t)}};var t=(t,n)=>{var r,o,[i,u,c]=n,s=0;if(i.some((t=>0!==e[t]))){for(r in u)a.o(u,r)&&(a.m[r]=u[r]);if(c)c(a)}for(t&&t(n);s<i.length;s++)o=i[s],a.o(e,o)&&e[o]&&e[o][0](),e[o]=0},n=self.webpackChunkmozilla_addons_frontend=self.webpackChunkmozilla_addons_frontend||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))})(),(()=>{"use strict";a(72764),a(99627),a(12978),a(79249),a(38957),a(51913),a(20227),a(21094),a(22532),a(49564),a(67407),a(22653),a(59201),a(86781),a(92792),a(83159),a(9536),a(83386),a(88627),a(42478),a(99918),a(72145),a(87758),a(66728),a(53689),a(33529),a(21699);var e=a(29343),t=a(18647),n=a(90528),r=a(84258),o=a(14486),i=a(99133),u=a(8191);function c(e,t){void 0===t&&(t={});var n=function(e){if(e&&"j"===e[0]&&":"===e[1])return e.substr(2);return e}(e);if(function(e,t){return void 0===t&&(t=!e||"{"!==e[0]&&"["!==e[0]&&'"'!==e[0]),!t}(n,t.doNotParse))try{return JSON.parse(n)}catch(e){}return e}var s=function(){return(s=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)};const l=function(){function e(e,t){var n=this;this.changeListeners=[],this.HAS_DOCUMENT_COOKIE=!1,this.cookies=function(e,t){return"string"==typeof e?u.Q(e,t):"object"==typeof e&&null!==e?e:{}}(e,t),new Promise((function(){n.HAS_DOCUMENT_COOKIE="object"==typeof document&&"string"==typeof document.cookie})).catch((function(){}))}return e.prototype._updateBrowserValues=function(e){this.HAS_DOCUMENT_COOKIE&&(this.cookies=u.Q(document.cookie,e))},e.prototype._emitChange=function(e){for(var t=0;t<this.changeListeners.length;++t)this.changeListeners[t](e)},e.prototype.get=function(e,t,n){return void 0===t&&(t={}),this._updateBrowserValues(n),c(this.cookies[e],t)},e.prototype.getAll=function(e,t){void 0===e&&(e={}),this._updateBrowserValues(t);var n={};for(var r in this.cookies)n[r]=c(this.cookies[r],e);return n},e.prototype.set=function(e,t,n){var r;"object"==typeof t&&(t=JSON.stringify(t)),this.cookies=s(s({},this.cookies),((r={})[e]=t,r)),this.HAS_DOCUMENT_COOKIE&&(document.cookie=u.q(e,t,n)),this._emitChange({name:e,value:t,options:n})},e.prototype.remove=function(e,t){var n=t=s(s({},t),{expires:new Date(1970,1,1,0,0,1),maxAge:0});this.cookies=s({},this.cookies),delete this.cookies[e],this.HAS_DOCUMENT_COOKIE&&(document.cookie=u.q(e,"",n)),this._emitChange({name:e,value:void 0,options:t})},e.prototype.addChangeListener=function(e){this.changeListeners.push(e)},e.prototype.removeChangeListener=function(e){var t=this.changeListeners.indexOf(e);t>=0&&this.changeListeners.splice(t,1)},e}(),f=l;var p=r.createContext(new f),d=p.Provider,h=p.Consumer;var y,m=(y=function(e,t){return(y=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}y(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});const v=function(e){function t(t){var n=e.call(this,t)||this;return t.cookies?n.cookies=t.cookies:n.cookies=new l,n}return m(t,e),t.prototype.render=function(){return r.createElement(d,{value:this.cookies},this.props.children)},t}(r.Component);var g=a(72466),b=(a(82765),a(98120),a(25701),a(53486)),w=a.n(b);function O(e){return(O="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function E(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function _(e,t){return(_=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function x(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=j(e);if(t){var o=j(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return S(this,n)}}function S(e,t){if(t&&("object"===O(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function j(e){return(j=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var P=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&_(e,t)}(a,e);var t,n,o,i=x(a);function a(e,t){var n;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),(n=i.call(this,e,t)).i18n=e.i18n,n}return t=a,(n=[{key:"getChildContext",value:function(){return{i18n:this.i18n}}},{key:"render",value:function(){var e=this.props.children;return r.Children.only(e)}}])&&E(t.prototype,n),o&&E(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);P.propTypes={i18n:w().object.isRequired,children:w().element.isRequired},P.childContextTypes={i18n:w().object.isRequired};const k=function(e){var n=e._config,o=void 0===n?t.Z:n,a=e.children,u=e.history,c=e.i18n,s=e.store,l=e.cookies,f=void 0===l?null:l;return r.createElement(P,{i18n:c},r.createElement(g.Provider,{store:s,key:"provider"},r.createElement(i.xI,{history:u},r.createElement(v,{cookies:f},o.get("enableStrictMode")?r.createElement(r.StrictMode,null,a):a))))};a(36353),a(61511),a(42484),a(24450),a(45792),a(6893),a(53790),a(4356),a(38233),a(13940),a(42396),a(71772),a(4941),a(34591),a(41866),a(11253),a(28417),a(72829),a(17918),a(52906),a(31815),a(9229),a(14862),a(7283),a(75880);var I=a(67683),T=a.n(I),R=a(12321),C=a.n(R),A=a(59348),N=a.n(A),L=a(9119),D=a(2163);function M(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function F(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?M(Object(n),!0).forEach((function(t){U(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):M(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function U(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function B(e){return(B="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function H(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,o,i=[],a=!0,u=!1;try{for(n=n.call(e);!(a=(r=n.next()).done)&&(i.push(r.value),!t||i.length!==t);a=!0);}catch(e){u=!0,o=e}finally{try{a||null==n.return||n.return()}finally{if(u)throw o}}return i}(e,t)||q(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function q(e,t){if(e){if("string"==typeof e)return z(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?z(e,t):void 0}}function z(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var G=t.Z.get("defaultLang"),W=t.Z.get("langs"),V=t.Z.get("langMap"),Y=(W.concat(Object.keys(V)),t.Z.get("rtlLangs"));function Z(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:L.Z;if(e&&e.split){var r=e.split("_");if(1===r.length)t=r[0].toLowerCase();else if(2===r.length){var o=r[1];o=o.length>2?o[0].toUpperCase()+o.slice(1).toLowerCase():o.toUpperCase(),t="".concat(r[0].toLowerCase(),"-").concat(o)}else 3===r.length?t="".concat(r[0].toLowerCase(),"-").concat(r[2].toUpperCase()):n.error("Unable to map a language from locale code [".concat(e,"]"))}return t}function $(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:L.Z;if(e&&e.split){var r=e.split("-");if(1===r.length)t=r[0].toLowerCase();else if(2===r.length){var o=r[1];o=o.length>2?o[0].toUpperCase()+o.slice(1).toLowerCase():o.toUpperCase(),t="".concat(r[0].toLowerCase(),"_").concat(o)}else 3===r.length?t="".concat(r[0].toLowerCase(),"_").concat(r[2].toUpperCase()):n.error("Unable to map a locale from language code [".concat(e,"]"))}return t}function K(e){return Z($(e))}function Q(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t._langs,r=void 0===n?W:n;return r.includes(e)}function X(e){var t=K(e);return Q(t)||(t=V.hasOwnProperty(t)?V[t]:G),t}function J(e){var t=X(e);return Y.includes(t)}function ee(e){return e.replace("_","-").toLowerCase()}function te(e){return e&&e.replace&&e.trim?e.replace(/(?:\n(?:\s*))+/g," ").trim():e}var ne=function(e){var t=e._filesize,n=void 0===t?T():t,r=e._log,o=void 0===r?L.Z:r,i=e.i18n,a=e.size,u={B:i.gettext("%(localizedSize)s B"),KB:i.gettext("%(localizedSize)s KB"),MB:i.gettext("%(localizedSize)s MB"),GB:i.gettext("%(localizedSize)s GB"),TB:i.gettext("%(localizedSize)s TB")},c=H(n(a,{base:2,standard:"jedec"}).split(" "),2),s=c[0],l=c[1];if(!s||!l)return o.error('Filesize returned sizeNumber: "'.concat(s,'", sizeName: "').concat(l,'" size "').concat(a,'"')),i.formatNumber(a);var f=i.formatNumber(s),p=u[l];return p?i.sprintf(p,{localizedSize:f}):(o.error("Filesize returned unrecognized unit: ".concat(l)),f)};function re(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:C(),r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=r._Intl,i=void 0===o?"undefined"!=typeof Intl?Intl:void 0:o,a=new n(e);a.lang=t,"object"===B(i)&&Object.prototype.hasOwnProperty.call(i,"NumberFormat")?(L.Z.debug("Intl.NumberFormat exists"),a.numberFormat=new i.NumberFormat(t)):L.Z.debug("Intl.NumberFormat does NOT exist"),a.formatNumber=function(e){return void 0!==a.numberFormat?a.numberFormat.format(e):e.toLocaleString(t)},a.options&&"function"==typeof a.options._momentDefineLocale&&a.options._momentDefineLocale(),a._dcnpgettext=a.dcnpgettext,a.dcnpgettext=function(e,t,n,r,o){return a._dcnpgettext(e,t,te(n),te(r),o)};var u=ee(a.lang);return a.moment=function(){var e=N().apply(void 0,arguments);return e.locale(u),e},a}var oe=function(e,t){return"".concat(e,",").concat(t)},ie=function(e){var t=e.text,n=e.replacements;if(0===n.length)throw new Error("`replacements` should not be empty");var r=t.match(/%\(\w+\)s/g),o=(r&&r.length||0)/2;if(0===o)throw new Error("No placeholder found in `text`");if(o!==n.length)throw new Error("Expected ".concat(o," replacements but only got ").concat(n.length));var i=new RegExp(["^(.*?)",n.map((function(){return"%\\((\\w+)\\)s(.+?)%\\((\\w+)\\)s"})).join("(.*?)"),"(.*?)$"].join("")),a=t.match(i),u=n.reduce((function(e,t){var n=oe(t[0],t[1]);if(e[n])throw new Error("Duplicate key detected in `replacements`: ".concat(n));return F(F({},e),{},U({},n,t[2]))}),{});if(!a)throw new Error("`text` does not appear to be compatible with the provided replacements");a.shift();for(var c=[];a.length;){var s=a.shift();if(u[oe(s,a[1])]){var l=a.shift(),f=a.shift(),p=oe(s,f),d=u[p];c.push(d(l)),delete u[p]}else c.push(s)}if(Object.keys(u).length>0)throw new Error("Not all replacements have been used; unused keys: ".concat(Object.keys(u).join("; ")));return c},ae=(a(95581),a(92973),a(9989)),ue=a(83021),ce=a.n(ue),se=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},le="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};const fe=function(e,t,n){ce()("function"==typeof t,"A stringify function is required in order to transform query objects into search strings."),ce()("function"==typeof n,"A parse function is required in order to transform search strings into query objects.");var r=function(e){if("object"===(void 0===e?"undefined":le(e))){var n=e.search||"";return e.query&&(n=t(e.query)).length>0&&"?"!==n.charAt(0)&&(n="?"+n),se({},e,{search:n})}return e},o=function(e){var t=e.search;return se({},e,{query:t?n("?"===t.charAt(0)?t.substring(1):t):{}})};e.listen((function(t){!function(e){["length","entries","index","action"].forEach((function(t){e.hasOwnProperty(t)&&(i[t]=e[t])}))}(e)}));var i=se({},e,{listen:function(t){return e.listen((function(e,n){var r=null!=e.location;r&&(n=e.action,e=e.location);var i=o(e);r?t({location:i,action:n}):t(i,n)}))},push:function(t,n){return e.push(r(t),n)},replace:function(t,n){return e.replace(r(t),n)},createHref:function(t){return e.createHref(r(t))}});return Object.defineProperty(i,"location",{get:function(){return o(e.location)}}),i};var pe=a(27107),de=(a(1047),a(80763),a(48078),a(17066)),he=a.n(de);function ye(e){return function(e){if(Array.isArray(e))return me(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return me(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return me(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function me(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function ve(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function ge(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ve(Object(n),!0).forEach((function(t){be(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ve(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function be(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var we={af:{English:"Afrikaans",native:"Afrikaans"},ach:{English:"Acholi",native:"Acholi"},ak:{English:"Akan",native:"Akan"},"am-et":{English:"Amharic",native:"አማርኛ"},an:{English:"Aragonese",native:"aragonés"},ar:{English:"Arabic",native:"عربي"},as:{English:"Assamese",native:"অসমীয়া"},ast:{English:"Asturian",native:"Asturianu"},az:{English:"Azerbaijani",native:"Azərbaycanca"},be:{English:"Belarusian",native:"Беларуская"},bg:{English:"Bulgarian",native:"Български"},bm:{English:"Bambara",native:"Bamanankan"},"bn-BD":{English:"Bengali (Bangladesh)",native:"বাংলা (বাংলাদেশ)"},"bn-IN":{English:"Bengali (India)",native:"বাংলা (ভারত)"},bn:{English:"Bengali",native:"বাংলা"},br:{English:"Breton",native:"Brezhoneg"},brx:{English:"Bodo",native:"बर'"},bs:{English:"Bosnian",native:"Bosanski"},ca:{English:"Catalan",native:"Català"},"ca-valencia":{English:"Catalan (Valencian)",native:"Català (Valencià)"},cak:{English:"Kaqchikel",native:"Maya Kaqchikel"},cs:{English:"Czech",native:"Čeština"},csb:{English:"Kashubian",native:"Kaszëbsczi"},cy:{English:"Welsh",native:"Cymraeg"},da:{English:"Danish",native:"Dansk"},dbg:{English:"Debug Robot",native:"Ḓḗƀŭɠ Řǿƀǿŧ"},de:{English:"German",native:"Deutsch"},"de-AT":{English:"German (Austria)",native:"Deutsch (Österreich)"},"de-CH":{English:"German (Switzerland)",native:"Deutsch (Schweiz)"},"de-DE":{English:"German (Germany)",native:"Deutsch (Deutschland)"},dsb:{English:"Lower Sorbian",native:"Dolnoserbšćina"},ee:{English:"Ewe",native:"Eʋe"},el:{English:"Greek",native:"Ελληνικά"},"en-AU":{English:"English (Australian)",native:"English (Australian)"},"en-CA":{English:"English (Canadian)",native:"English (Canadian)"},"en-GB":{English:"English (British)",native:"English (British)"},"en-NZ":{English:"English (New Zealand)",native:"English (New Zealand)"},"en-US":{English:"English (US)",native:"English (US)"},"en-ZA":{English:"English (South African)",native:"English (South African)"},eo:{English:"Esperanto",native:"Esperanto"},es:{English:"Spanish",native:"Español"},"es-AR":{English:"Spanish (Argentina)",native:"Español (de Argentina)"},"es-CL":{English:"Spanish (Chile)",native:"Español (de Chile)"},"es-ES":{English:"Spanish (Spain)",native:"Español (de España)"},"es-MX":{English:"Spanish (Mexico)",native:"Español (de México)"},et:{English:"Estonian",native:"Eesti keel"},eu:{English:"Basque",native:"Euskara"},fa:{English:"Persian",native:"فارسی"},"fa-IR":{English:"Persian (Iran)",native:"(ایران) فارسی"},ff:{English:"Fulah",native:"Pulaar-Fulfulde"},fi:{English:"Finnish",native:"suomi"},"fj-FJ":{English:"Fijian",native:"Vosa vaka-Viti"},fr:{English:"French",native:"Français"},"fur-IT":{English:"Friulian",native:"Furlan"},"fy-NL":{English:"Frisian",native:"Frysk"},ga:{English:"Irish",native:"Gaeilge"},"ga-IE":{English:"Irish",native:"Gaeilge"},gd:{English:"Gaelic (Scotland)",native:"Gàidhlig"},gl:{English:"Galician",native:"Galego"},gn:{English:"Guarani (Paraguay)",native:"GuaranÍ"},gu:{English:"Gujarati",native:"ગુજરાતી"},"gu-IN":{English:"Gujarati (India)",native:"ગુજરાતી (ભારત)"},ha:{English:"Hausa",native:"Hausa"},he:{English:"Hebrew",native:"עברית"},hi:{English:"Hindi",native:"हिन्दी"},"hi-IN":{English:"Hindi (India)",native:"हिन्दी (भारत)"},hr:{English:"Croatian",native:"Hrvatski"},hsb:{English:"Upper Sorbian",native:"Hornjoserbsce"},hu:{English:"Hungarian",native:"magyar"},"hy-AM":{English:"Armenian",native:"Հայերեն"},ia:{English:"Interlingua",native:"Interlingua"},id:{English:"Indonesian",native:"Bahasa Indonesia"},ig:{English:"Igbo",native:"Igbo"},is:{English:"Icelandic",native:"íslenska"},it:{English:"Italian",native:"Italiano"},ja:{English:"Japanese",native:"日本語"},"ja-JP-mac":{English:"Japanese",native:"日本語"},ka:{English:"Georgian",native:"ქართული"},kab:{English:"Kabyle",native:"Taqbaylit"},kk:{English:"Kazakh",native:"Қазақ"},km:{English:"Khmer",native:"ខ្មែរ"},kn:{English:"Kannada",native:"ಕನ್ನಡ"},ko:{English:"Korean",native:"한국어"},kok:{English:"Konkani",native:"कोंकनी"},ku:{English:"Kurdish",native:"Kurdî"},ks:{English:"Kashmiri",native:"كشمیری"},la:{English:"Latin",native:"Latina"},lg:{English:"Luganda",native:"Luganda"},lij:{English:"Ligurian",native:"Ligure"},ln:{English:"Lingala",native:"Lingála"},lo:{English:"Lao",native:"ພາສາລາວ"},lt:{English:"Lithuanian",native:"lietuvių kalba"},lv:{English:"Latvian",native:"Latviešu"},mai:{English:"Maithili",native:"मैथिली মৈথিলী"},mg:{English:"Malagasy",native:"Malagasy"},mi:{English:"Maori (Aotearoa)",native:"Māori (Aotearoa)"},mk:{English:"Macedonian",native:"Македонски"},ml:{English:"Malayalam",native:"മലയാളം"},mn:{English:"Mongolian",native:"Монгол"},mr:{English:"Marathi",native:"मराठी"},ms:{English:"Malay",native:"Melayu"},mt:{English:"Maltese",native:"Malti"},my:{English:"Burmese",native:"မြန်မာဘာသာ"},"nb-NO":{English:"Norwegian (Bokmål)",native:"Norsk bokmål"},"ne-NP":{English:"Nepali",native:"नेपाली"},"nn-NO":{English:"Norwegian (Nynorsk)",native:"Norsk nynorsk"},nl:{English:"Dutch",native:"Nederlands"},nr:{English:"Ndebele, South",native:"isiNdebele"},nso:{English:"Northern Sotho",native:"Sepedi"},oc:{English:"Occitan",native:"occitan"},or:{English:"Oriya",native:"ଓଡ଼ିଆ"},pa:{English:"Punjabi",native:"ਪੰਜਾਬੀ"},"pa-IN":{English:"Punjabi (India)",native:"ਪੰਜਾਬੀ (ਭਾਰਤ)"},pl:{English:"Polish",native:"Polski"},"pt-BR":{English:"Portuguese (Brazilian)",native:"Português (do Brasil)"},"pt-PT":{English:"Portuguese (Portugal)",native:"Português (Europeu)"},ro:{English:"Romanian",native:"Română"},rm:{English:"Romansh",native:"rumantsch"},ru:{English:"Russian",native:"Русский"},rw:{English:"Kinyarwanda",native:"Ikinyarwanda"},sa:{English:"Sanskrit",native:"संस्कृत"},sat:{English:"Santali",native:"संताली"},sah:{English:"Sakha",native:"Сахалыы"},sco:{English:"Scots",native:"Scots"},si:{English:"Sinhala",native:"සිංහල"},sk:{English:"Slovak",native:"slovenčina"},sl:{English:"Slovenian",native:"Slovenščina"},son:{English:"Songhai",native:"Soŋay"},sq:{English:"Albanian",native:"Shqip"},sr:{English:"Serbian",native:"Српски"},"sr-Cyrl":{English:"Serbian",native:"Српски"},"sr-Latn":{English:"Serbian",native:"Srpski"},ss:{English:"Siswati",native:"siSwati"},st:{English:"Southern Sotho",native:"Sesotho"},"sv-SE":{English:"Swedish",native:"Svenska"},sw:{English:"Swahili",native:"Kiswahili"},szl:{English:"Silesian",native:"Ślōnski"},ta:{English:"Tamil",native:"தமிழ்"},"ta-IN":{English:"Tamil (India)",native:"தமிழ் (இந்தியா)"},"ta-LK":{English:"Tamil (Sri Lanka)",native:"தமிழ் (இலங்கை)"},te:{English:"Telugu",native:"తెలుగు"},th:{English:"Thai",native:"ไทย"},tl:{English:"Tagalog",native:"Tagalog"},tn:{English:"Tswana",native:"Setswana"},tr:{English:"Turkish",native:"Türkçe"},trs:{English:"Triqui",native:"Nánj nï'ïn"},ts:{English:"Tsonga",native:"Xitsonga"},tsz:{English:"Purépecha",native:"Purépecha"},"tt-RU":{English:"Tatar",native:"Tatarça"},uk:{English:"Ukrainian",native:"Українська"},ur:{English:"Urdu",native:"اُردو"},uz:{English:"Uzbek",native:"Oʻzbek tili"},ve:{English:"Venda",native:"Tshivenḓa"},vec:{English:"Venetan",native:"Vèneto"},vi:{English:"Vietnamese",native:"Tiếng Việt"},wo:{English:"Wolof",native:"Wolof"},"x-testing":{English:"Testing",native:"Ŧḗşŧīƞɠ"},xh:{English:"Xhosa",native:"isiXhosa"},yo:{English:"Yoruba",native:"Yorùbá"},"zh-CN":{English:"Chinese (Simplified)",native:"中文 (简体)"},"zh-TW":{English:"Chinese (Traditional)",native:"正體中文 (繁體)"},zu:{English:"Zulu",native:"isiZulu"}},Oe=t.Z.get("langs").reduce((function(e,t){return void 0!==we[t]?ge(ge({},e),{},be({},t,we[t])):e}),{}),Ee=[].concat(ye(Object.keys(t.Z.get("hrefLangsMap"))),ye(Object.keys(Oe).filter((function(e){return!t.Z.get("unsupportedHrefLangs").includes(e)}))));const _e=Oe;var xe=a(79952),Se=a.n(xe);function je(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Pe(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?je(Object(n),!0).forEach((function(t){ke(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):je(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function ke(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Ie="FINISH_UPDATE_USER_ACCOUNT",Te="UPDATE_USER_ACCOUNT",Re="LOG_OUT_USER",Ce="LOAD_CURRENT_USER_ACCOUNT",Ae="FETCH_USER_ACCOUNT",Ne="LOAD_USER_ACCOUNT",Le="DELETE_USER_PICTURE",De="FETCH_USER_NOTIFICATIONS",Me="LOAD_USER_NOTIFICATIONS",Fe="DELETE_USER_ACCOUNT",Ue="UNLOAD_USER_ACCOUNT",Be="UNSUBSCRIBE_NOTIFICATION",He="ABORT_UNSUBSCRIBE_NOTIFICATION",qe="FINISH_UNSUBSCRIBE_NOTIFICATION",ze={currentUserID:null,byID:{},byUsername:{},isUpdating:!1,userPageBeingViewed:{loading:!1,userId:null},isUnsubscribedFor:{},currentUserWasLoggedOut:!1,resetStateOnNextChange:!1},Ge=function(e){var t=e.errorHandlerId,n=e.userId;return ce()(t,"errorHandlerId is required"),ce()(n,"userId is required"),{type:Ae,payload:{errorHandlerId:t,userId:n}}},We=function(e){var t=e.user;return ce()(t,"user is required"),{type:Ce,payload:{user:t}}},Ve=function(e){var t=e.user;return ce()(t,"user is required"),{type:Ne,payload:{user:t}}},Ye=function(e){var t=e.userId;return ce()(t,"userId is required"),{type:Ue,payload:{userId:t}}};function Ze(){return{type:Re,payload:{}}}var $e=function(e){var t=e.errorHandlerId,n=e.userId;return ce()(t,"errorHandlerId is required"),ce()(n,"userId is required"),{type:De,payload:{errorHandlerId:t,userId:n}}},Ke=function(e){var t=e.notifications,n=e.userId;return ce()(t,"notifications is required"),ce()(n,"userId is required"),{type:Me,payload:{notifications:t,userId:n}}},Qe=function(e,t){return ce()("number"==typeof t,"userId is required"),e.byID[t]},Xe=function(e){if(!e.currentUserID)return null;var t=Qe(e,e.currentUserID);return ce()(t,"currentUserID is defined but no matching user found in users state."),t},Je=function(e){return!!e&&(e.is_addon_developer||e.is_artist)},et=function(e,t){var n=Xe(e.users);if(!n)return!1;var r=n.permissions;if(!r)return!1;if(r.includes(D.jm))return!0;if(r.includes(t))return!0;var o=r.filter((function(e){return e.endsWith(":*")})).map((function(e){return e.replace(":*","")})),i=t.split(":")[0];return o.includes(i)},tt=function(e){var t=Xe(e.users);if(!t)return!1;var n=t.permissions;return!!n&&(!!n.includes(D.jm)||(n.includes(D.Mr)||n.includes(D.mD)||n.includes(D.jy)||n.includes(D.QZ)||n.includes(D.Yp)||n.includes(D.V_)||n.includes(D.xS)||n.includes(D.lS)))},nt=function(e){var t=e.state,n=e.user;ce()(n,"user is required");var r=Qe(t,n.id)||{notifications:null};return{byID:Pe(Pe({},t.byID),{},ke({},n.id,Pe(Pe({},r),n))),byUsername:Pe(Pe({},t.byUsername),{},ke({},n.username.toLowerCase(),n.id))}},rt=function(e){var t=e.hash,n=e.notification,r=e.token;return ce()(t,"hash is required"),ce()(n,"notification is required"),ce()(r,"token is required"),{type:qe,payload:{hash:t,notification:n,token:r}}},ot=function(e){var t=e.hash,n=e.notification,r=e.token;return ce()(t,"hash is required"),ce()(n,"notification is required"),ce()(r,"token is required"),{type:He,payload:{hash:t,notification:n,token:r}}},it=function(e){var t=e.hash,n=e.notification,r=e.token;return ce()(t,"hash is required"),ce()(n,"notification is required"),ce()(r,"token is required"),"".concat(t,"-").concat(n,"-").concat(r)},at=function(e,t,n,r){return e.isUnsubscribedFor[it({hash:t,notification:n,token:r})]};const ut=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ze,n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.Z;switch(n.type){case Te:return Pe(Pe({},e),{},{isUpdating:!0});case Ie:return Pe(Pe({},e),{},{isUpdating:!1});case Ce:var o=n.payload.user;return Pe(Pe(Pe({},e),nt({state:e,user:o})),{},{currentUserID:o.id});case Ne:var a=n.payload.user;return Pe(Pe({},e),nt({state:e,user:a}));case Me:var u=n.payload,c=u.notifications,s=u.userId,l=Qe(e,s);return ce()(l,"user is required"),ce()(c,"notifications are required"),Pe(Pe({},e),{},{byID:Pe(Pe({},e.byID),{},ke({},l.id,Pe(Pe({},l),{},{notifications:c})))});case Re:return Pe(Pe({},e),{},{currentUserID:null,currentUserWasLoggedOut:!0});case Ue:var f=n.payload.userId;if(e.byID[f]){var p=e.byID[f].username;return Pe(Pe({},e),{},{currentUserID:e.currentUserID===f?null:e.currentUserID,byID:Pe(Pe({},e.byID),{},ke({},f,void 0)),byUsername:Pe(Pe({},e.byUsername),{},ke({},p,void 0))})}return e;case Be:var d=n.payload,h=d.hash,y=d.notification,m=d.token;return Pe(Pe({},e),{},{isUnsubscribedFor:Pe(Pe({},e.isUnsubscribedFor),{},ke({},it({hash:h,notification:y,token:m}),!1))});case He:var v=n.payload,g=v.hash,b=v.notification,w=v.token;return Pe(Pe({},e),{},{isUnsubscribedFor:Pe(Pe({},e.isUnsubscribedFor),{},ke({},it({hash:g,notification:b,token:w}),null))});case qe:var O=n.payload,E=O.hash,_=O.notification,x=O.token;return Pe(Pe({},e),{},{isUnsubscribedFor:Pe(Pe({},e.isUnsubscribedFor),{},ke({},it({hash:E,notification:_,token:x}),!0))});case i.nk:return r.get("server")?e:e.resetStateOnNextChange?Pe(Pe({},e),{},{resetStateOnNextChange:!1,currentUserWasLoggedOut:!1}):Pe(Pe({},e),{},{resetStateOnNextChange:!0});default:return e}};function ct(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function st(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ct(Object(n),!0).forEach((function(t){lt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ct(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function lt(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var ft="SET_AUTH_TOKEN",pt="SET_CLIENT_APP",dt="SET_LANG",ht="SET_REGION_CODE",yt="SET_REQUEST_ID",mt="SET_USER_AGENT",vt="Android",gt="iOS",bt={clientApp:"",lang:"",regionCode:null,requestId:null,token:null,userAgent:null,userAgentInfo:{browser:{},device:{},os:{}}};function wt(e){return ce()(e,"clientApp cannot be falsey"),{type:pt,payload:{clientApp:e}}}var Ot,Et;a(92124);function _t(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function xt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function St(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?xt(Object(n),!0).forEach((function(t){jt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):xt(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function jt(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Pt(e){return["__gt","__lt","__lte","__gte",""].reduce((function(t,n){return St(St({},t),{},jt({},"".concat(e).concat(n),"".concat(e).concat(n)))}),{})}var kt=St(St({app:"clientApp",appversion:"compatibleWithVersion",author:"author",category:"category",exclude_addons:"exclude_addons",guid:"guid",page:"page",page_size:"page_size",promoted:"promoted",q:"query"},Pt("ratings")),{},{sort:"sort",tag:"tag",type:"addonType"},Pt("users"));function It(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=n.config,o=void 0===r?t.Z:r,i=n.filters,a=n.userAgentInfo;if(!i)throw new Error("filters are required");if(!a)throw new Error("userAgentInfo is required");var u=St({},i);if("Firefox"===a.browser.name&&a.os.name!==gt){var c=parseInt(a.browser.version,10);c>=57&&(o.get("restrictSearchResultsToAppVersion")?(L.Z.debug((0,e.f9)(Ot||(Ot=_t(['Setting "compatibleWithVersion" to current application\n version (Firefox ',") so only relevant extensions are\n displayed."])),c)),u.compatibleWithVersion=a.browser.version):L.Z.warn((0,e.f9)(Et||(Et=_t(['restrictSearchResultsToAppVersion config set;\n not setting "compatibleWithVersion" to current application version,\n even though it\'s above 57.'])))))}return u}function Tt(e){return Object.keys(kt).reduce((function(t,n){return e&&void 0!==e[kt[n]]&&""!==e[kt[n]]?St(St({},t),{},jt({},n,e[kt[n]])):t}),{})}function Rt(e){return Object.keys(kt).reduce((function(t,n){var r=e[n];return Array.isArray(e[n])&&(L.Z.info("".concat(n," param was provided multiple times: ").concat(r)),r=e[n][0]),void 0!==r&&""!==r?St(St({},t),{},jt({},kt[n],r)):t}),{})}var Ct,At=function(e){var t=e.api,n=St({},e.filters);return!n.clientApp&&t.clientApp&&(L.Z.debug("No clientApp found in filters; using api.clientApp (".concat(t.clientApp,")")),n.clientApp=t.clientApp),n.clientApp===D.wZ&&(n.promoted=D.g$,n.addonType=D.Gz),n},Nt=function(e){var t=St({},e);return delete t.clientApp,delete t.lang,t};a(71246);function Lt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Dt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Lt(Object(n),!0).forEach((function(t){Mt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Lt(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Mt(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ft(e){var t={};return Object.keys(e).forEach((function(n){void 0!==e[n]&&(t[n]=e[n])})),t}function Ut(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=ae.parse(e,!0);return n.search=null,n.query=Ft(Dt(Dt({},n.query),t)),ae.format(n)}function Bt(e){return{utm_campaign:e.query.utm_campaign,utm_content:e.query.utm_content,utm_medium:e.query.utm_medium,utm_source:e.query.utm_source}}function Ht(e){return(Ht="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function qt(){qt=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==Ht(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}function zt(e,t,n,r,o,i,a){try{var u=e[i](a),c=u.value}catch(e){return void n(e)}u.done?t(c):Promise.resolve(c).then(r,o)}function Gt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Wt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Gt(Object(n),!0).forEach((function(t){Vt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Gt(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Vt(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Yt="".concat(t.Z.get("apiHost")).concat(t.Z.get("apiPath"));function Zt(e){var t=Wt({},e);return Object.keys(t).forEach((function(e){var n=t[e];null!=n&&""!==n||delete t[e]})),ae.format({query:t})}function $t(n){var r=n.endpoint,o=n.params,i=void 0===o?{}:o,a=n.auth,u=void 0!==a&&a,c=n.apiState,s=void 0===c?bt:c,l=n.method,f=void 0===l?"GET":l,p=n.body,d=n.credentials,h=n.errorHandler,y=n._config,m=void 0===y?t.Z:y,v=n.version,g=void 0===v?m.get("apiVersion"):v,b=n._log,w=void 0===b?L.Z:b;if(!r)return Promise.reject(new Error('endpoint URL cannot be falsy: "'.concat(r,'"')));h&&h.clear();var O="".concat(t.Z.get("apiPath")).concat(g),E=ae.parse(r,!0),_=E.pathname||"";if(E.host){if(!_.startsWith(O))return Promise.reject(new Error('Absolute URL "'.concat(r,'" has an unexpected prefix.')))}else{var x=_.startsWith("/")?"":"/";_="".concat(O).concat(x).concat(_)}var S=Zt(Wt(Wt(Wt({},E.query),i),{},{lang:s.lang})),j={headers:{},method:f.toUpperCase(),credentials:void 0,body:void 0};d&&(j.credentials="include"),p&&(p instanceof he()?(j.body=p,delete j.headers["Content-type"]):(j.body=JSON.stringify(p),j.headers["Content-type"]="application/json")),u&&s.token&&(j.headers.authorization="Session ".concat(s.token)),s.regionCode&&(j.headers["X-Country-Code"]=s.regionCode),_=_.endsWith("/")?_:"".concat(_,"/");var P="".concat(t.Z.get("apiHost")).concat(_).concat(S);return fetch(P,j).then((function(t){var n=t.headers.get("Content-Type");return"application/json"===(n=n&&n.toLowerCase())?t.json().then((function(e){return{response:t,jsonResponse:e}})):t.text().then((function(r){var o,i;return w.warn((0,e.f9)(Ct||(o=["Response from API was not JSON (was Content-Type:\n ",") %o"],i||(i=o.slice(0)),Ct=Object.freeze(Object.defineProperties(o,{raw:{value:Object.freeze(i)}}))),n),{body:r?r.substring(0,100):"[empty]",status:t.status||"[unknown]",url:t.url||"[unknown]"}),{jsonResponse:{},response:t}}))})).then((function(e){var n=e.response,r=e.jsonResponse;if(n.ok)return r;var o=function(e){var n=e.apiURL,r=e.response,o=e.jsonResponse,i="[unknown URL]";n&&(i=(i=n.replace(t.Z.get("apiHost"),"")).split("?")[0]);var a=new Error("Error calling: ".concat(i," (status: ").concat(r.status,")"));return a.response={apiURL:n,status:r.status,data:o},a}({apiURL:P,response:n,jsonResponse:r});throw h&&h.handle(o),o}),(function(e){throw h&&h.handle(e),e}))}function Kt(e){var t=e.api,n=e.showGroupedRatings,r=void 0!==n&&n,o=e.slug,i=t.clientApp,a=t.userAgentInfo.browser.version;return a||L.Z.debug("Failed to parse appversion for client app ".concat(i||"[empty]")),$t({endpoint:Ut("addons/addon/".concat(o),{app:i,appversion:a||"",show_grouped_ratings:String(r)}),auth:!0,apiState:t})}function Qt(e){var n=e._config,r=void 0===n?t.Z:n,o=e._window,i=void 0===o?"undefined"!=typeof window?window:null:o,a=e.location,u=r.get("fxaConfig"),c=Zt({config:u,to:"local"===u&&i?i.location.href:ae.format(Wt({},a))});return"".concat(Yt).concat(r.get("apiVersion"),"/accounts/login/start/").concat(c)}function Xt(e){var t=e._fixFiltersForClientApp,n=void 0===t?At:t,r=e.api,o=It({filters:n({api:r,filters:e.filters}),userAgentInfo:r.userAgentInfo});return $t({endpoint:"addons/autocomplete",params:Wt({app:r.clientApp},Tt(o)),apiState:r})}var Jt=function(){var e,t=(e=qt().mark((function e(t){var n,r,o,i,a,u,c,s,l,f=arguments;return qt().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=f.length>1&&void 0!==f[1]?f[1]:{},r=n.pageLimit,o=void 0===r?100:r,i=[],u=0,c=0,s=1;case 5:if(!(s<=o)){e.next=21;break}return e.next=8,t(a);case 8:if(l=e.sent,u||(u=l.count),c||(c=l.page_size),i=i.concat(l.results),!l.next){e.next=17;break}a=l.next,L.Z.debug('Fetching next page "'.concat(a,'"')),e.next=18;break;case 17:return e.abrupt("return",{count:u,page_size:c,results:i});case 18:s++,e.next=5;break;case 21:throw new Error("Fetched too many pages (the limit is ".concat(o,")"));case 22:case"end":return e.stop()}}),e)})),function(){var t=this,n=arguments;return new Promise((function(r,o){var i=e.apply(t,n);function a(e){zt(i,r,o,a,u,"next",e)}function u(e){zt(i,r,o,a,u,"throw",e)}a(void 0)}))});return function(e){return t.apply(this,arguments)}}(),en=function(e){if("object"!==Ht(e))throw new Error('Expected an object type, got "'.concat(Ht(e),'"'));Object.keys(e).forEach((function(e){if(void 0===_e[e])throw new Error('Unknown locale: "'.concat(e,'"'))}))},tn=a(44683);const nn=window,rn=a.n(tn)()(nn);var on=["utm_campaign","utm_content","utm_medium","utm_source","utm_term"];function an(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function un(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?an(Object(n),!0).forEach((function(t){cn(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):an(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function cn(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function sn(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function ln(e){return"/addon/".concat(e,"/")}var fn=function(e){var t=e.utm_campaign,n=void 0===t?D.Bg:t,r=e.utm_content,o=void 0===r?null:r,i=e.utm_medium,a=void 0===i?D.AT:i,u=e.utm_source,c=void 0===u?D.Pr:u,s=e.utm_term,l=void 0===s?null:s;return Zt(un(un({},sn(e,on)),{},{utm_campaign:n,utm_content:o,utm_medium:a,utm_source:c,utm_term:l}))},pn=function(e){var n=e._config,r=void 0===n?t.Z:n,o=e.locationPathname;return"".concat(r.get("baseURL")).concat(o)},dn=function(e){var n=e._config,r=void 0===n?t.Z:n,o=e.urlString,i=r.get("baseURL"),a=ae.parse(o,!0),u=o.startsWith("/")&&!o.startsWith("//"),c=ae.parse(i).host||"",s=c===a.host||o.startsWith("//".concat(c)),l=/^\/blog\//.test(a.pathname||""),f=(u||s)&&!l,p=o.startsWith("//".concat(c))?o.replace("//".concat(c),""):o.replace(i,"");return f&&!p.startsWith("/")&&(p="/".concat(p)),{isInternal:f,relativeURL:p}},hn=function(e){var t=e.utm_content;return"".concat(D.q3).concat(fn({utm_campaign:null,utm_content:t}))},yn=function(e){var t=e._checkInternalURL,n=void 0===t?dn:t,r=e.urlString;if(n({urlString:r}).isInternal){var o=ae.parse(r,!0);if(o.pathname){var i=o.pathname.split("/")[1];if(Q(i))return r.replace("".concat(i,"/"),"")}}return r};function mn(e){switch(e){case!0:case 1:case"1":case"true":return!0;default:return!1}}function vn(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:rn;return{__html:n.sanitize(e,{ALLOWED_TAGS:t})}}function gn(e){return(e||"").replace(/(\r\n|\r|\n)(?!<\/?(li|ul|ol)>)/g,"<br />")}function bn(e){return vn(gn(e),["a","abbr","acronym","b","blockquote","br","code","em","i","li","ol","strong","ul"])}function wn(e){var t=e.addon,n=e.userId;return!!(t&&t.authors&&t.authors.length&&n)&&t.authors.some((function(e){return e.id===n}))}function On(e){return Object.prototype.hasOwnProperty.call(D.Po,e)}function En(e){if(!On(e))throw new Error('"'.concat(e,'" not found in API_ADDON_TYPES_MAPPING'));return D.Po[e]}function _n(e){return Object.prototype.hasOwnProperty.call(D.LF,e)}function xn(e){if(!_n(e))throw new Error('"'.concat(e,'" not found in VISIBLE_ADDON_TYPES_MAPPING'));return D.LF[e]}var Sn,jn,Pn,kn,In,Tn=function(e){var t=e;return t.startsWith("src")||(t=t.replace(/^.*src/,"src")),t},Rn=function(e){return e.displayName||e.name||"Component"},Cn=function(e){var t=e.history,n=e._parse,r=void 0===n?pe.parse:n,o=e._stringify,i=void 0===o?pe.stringify:o;return fe(t,i,r)},An=(a(78685),function(e,t){return{name:e,value:void 0===t?-1:t,delta:0,entries:[],id:"v2-".concat(Date.now(),"-").concat(Math.floor(8999999999999*Math.random())+1e12)}}),Nn=function(e,t){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){if("first-input"===e&&!("PerformanceEventTiming"in self))return;var n=new PerformanceObserver((function(e){return e.getEntries().map(t)}));return n.observe({type:e,buffered:!0}),n}}catch(e){}},Ln=function(e,t){var n=function n(r){"pagehide"!==r.type&&"hidden"!==document.visibilityState||(e(r),t&&(removeEventListener("visibilitychange",n,!0),removeEventListener("pagehide",n,!0)))};addEventListener("visibilitychange",n,!0),addEventListener("pagehide",n,!0)},Dn=function(e){addEventListener("pageshow",(function(t){t.persisted&&e(t)}),!0)},Mn=function(e,t,n){var r;return function(o){t.value>=0&&(o||n)&&(t.delta=t.value-(r||0),(t.delta||void 0===r)&&(r=t.value,e(t)))}},Fn=-1,Un=function(){return"hidden"===document.visibilityState?0:1/0},Bn=function(){Ln((function(e){var t=e.timeStamp;Fn=t}),!0)},Hn=function(){return Fn<0&&(Fn=Un(),Bn(),Dn((function(){setTimeout((function(){Fn=Un(),Bn()}),0)}))),{get firstHiddenTime(){return Fn}}},qn=function(e,t){var n,r=Hn(),o=An("FCP"),i=function(e){"first-contentful-paint"===e.name&&(u&&u.disconnect(),e.startTime<r.firstHiddenTime&&(o.value=e.startTime,o.entries.push(e),n(!0)))},a=window.performance&&performance.getEntriesByName&&performance.getEntriesByName("first-contentful-paint")[0],u=a?null:Nn("paint",i);(a||u)&&(n=Mn(e,o,t),a&&i(a),Dn((function(r){o=An("FCP"),n=Mn(e,o,t),requestAnimationFrame((function(){requestAnimationFrame((function(){o.value=performance.now()-r.timeStamp,n(!0)}))}))})))},zn=!1,Gn=-1,Wn=function(e,t){zn||(qn((function(e){Gn=e.value})),zn=!0);var n,r=function(t){Gn>-1&&e(t)},o=An("CLS",0),i=0,a=[],u=function(e){if(!e.hadRecentInput){var t=a[0],r=a[a.length-1];i&&e.startTime-r.startTime<1e3&&e.startTime-t.startTime<5e3?(i+=e.value,a.push(e)):(i=e.value,a=[e]),i>o.value&&(o.value=i,o.entries=a,n())}},c=Nn("layout-shift",u);c&&(n=Mn(r,o,t),Ln((function(){c.takeRecords().map(u),n(!0)})),Dn((function(){i=0,Gn=-1,o=An("CLS",0),n=Mn(r,o,t)})))},Vn={passive:!0,capture:!0},Yn=new Date,Zn=function(e,t){Sn||(Sn=t,jn=e,Pn=new Date,Qn(removeEventListener),$n())},$n=function(){if(jn>=0&&jn<Pn-Yn){var e={entryType:"first-input",name:Sn.type,target:Sn.target,cancelable:Sn.cancelable,startTime:Sn.timeStamp,processingStart:Sn.timeStamp+jn};kn.forEach((function(t){t(e)})),kn=[]}},Kn=function(e){if(e.cancelable){var t=(e.timeStamp>1e12?new Date:performance.now())-e.timeStamp;"pointerdown"==e.type?function(e,t){var n=function(){Zn(e,t),o()},r=function(){o()},o=function(){removeEventListener("pointerup",n,Vn),removeEventListener("pointercancel",r,Vn)};addEventListener("pointerup",n,Vn),addEventListener("pointercancel",r,Vn)}(t,e):Zn(t,e)}},Qn=function(e){["mousedown","keydown","touchstart","pointerdown"].forEach((function(t){return e(t,Kn,Vn)}))},Xn=function(e,t){var n,r=Hn(),o=An("FID"),i=function(e){e.startTime<r.firstHiddenTime&&(o.value=e.processingStart-e.startTime,o.entries.push(e),n(!0))},a=Nn("first-input",i);n=Mn(e,o,t),a&&Ln((function(){a.takeRecords().map(i),a.disconnect()}),!0),a&&Dn((function(){var r;o=An("FID"),n=Mn(e,o,t),kn=[],jn=-1,Sn=null,Qn(addEventListener),r=i,kn.push(r),$n()}))},Jn={},er=function(e,t){var n,r=Hn(),o=An("LCP"),i=function(e){var t=e.startTime;t<r.firstHiddenTime&&(o.value=t,o.entries.push(e),n())},a=Nn("largest-contentful-paint",i);if(a){n=Mn(e,o,t);var u=function(){Jn[o.id]||(a.takeRecords().map(i),a.disconnect(),Jn[o.id]=!0,n(!0))};["keydown","click"].forEach((function(e){addEventListener(e,u,{once:!0,capture:!0})})),Ln(u,!0),Dn((function(r){o=An("LCP"),n=Mn(e,o,t),requestAnimationFrame((function(){requestAnimationFrame((function(){o.value=performance.now()-r.timeStamp,Jn[o.id]=!0,n(!0)}))}))}))}};function tr(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function nr(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?tr(Object(n),!0).forEach((function(t){rr(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):tr(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function rr(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function or(e){return(or="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function ir(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function ar(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function ur(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function cr(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e._log,n=void 0===t?L.Z:t,r=e._navigator,o=void 0===r?"undefined"!=typeof navigator?navigator:null:r,i=e._window,a=void 0===i?"undefined"!=typeof window?window:null:i;if(!o||!a)return!1;var u=o.doNotTrack||a.doNotTrack;return"1"===u&&(n.info("Do Not Track is enabled"),!0)}var sr=function(e){return{eventAction:e.action,eventCategory:e.category,eventLabel:e.label,eventValue:e.value,hitType:"event"}};function lr(e){var t;return(t={},rr(t,D.jV,D.JW),rr(t,D.Gz,D.JW),rr(t,D.d$,D.JW),rr(t,D.Yd,D.o6),t)[e]||D.HH}var fr=function(e,t){var n=D.Yd===e;switch(t){case D.H0:return n?D.jM:D.ZV;case D.lm:return n?D.i_:D.lx;case D.nl:return n?D.Oj:D.o_;case D.gQ:return n?D.Zt:D.aS;case D.VN:return n?D.z8:D.ui;default:return n?D.dJ:D.z}};const pr=new(function(){function n(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},o=r._config,i=void 0===o?t.Z:o,a=r._isDoNotTrackEnabled,u=void 0===a?cr:a,c=r._getCLS,s=void 0===c?Wn:c,l=r._getFID,f=void 0===l?Xn:l,p=r._getLCP,d=void 0===p?er:p;if(ar(this,n),"undefined"!=typeof window&&(this._log=L.Z,this.logPrefix="[GA]",this.id=i.get("trackingId"),mn(i.get("trackingEnabled"))?this.id?u()?(this.log((0,e.f9)(In||(In=ir(["Do Not Track Enabled; Google Analytics not\n loaded and tracking disabled"])))),this.trackingEnabled=!1):(this.log("Google Analytics is enabled"),this.trackingEnabled=!0):(this.log("GA Disabled because trackingId was empty"),this.trackingEnabled=!1):(this.log("GA disabled because trackingEnabled was false"),this.trackingEnabled=!1),this.logPrefix="[GA: ".concat(this.trackingEnabled?"ON":"OFF","]"),this.trackingEnabled&&(window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)},ga.l=+new Date,ga("create",this.id,"auto"),ga("set","transport","beacon"),mn(i.get("trackingSendInitPageView"))&&ga("send","pageview"),ga("set","dimension3","addons-frontend"),mn(i.get("trackingSendWebVitals"))))){this.log("trackingSendWebVitals is enabled");var h=this.sendWebVitalStats.bind(this);s(h),f(h),d(h)}}var r,o,i;return r=n,(o=[{key:"sendWebVitalStats",value:function(e){var t=e.name,n=e.delta,r=e.id;this.log("sendWebVitalStats",{name:t,delta:n,id:r}),this._ga("send","event",{eventCategory:"Web Vitals",eventAction:t,eventLabel:r,eventValue:Math.round("CLS"===t?1e3*n:n),nonInteraction:!0,transport:"beacon"})}},{key:"log",value:function(e,t){if(this._log){var n=void 0===t?"%s %s":"%s %s: %o";this._log.info(n,this.logPrefix,e,t)}}},{key:"_ga",value:function(){var e;this.trackingEnabled&&(e=window).ga.apply(e,arguments)}},{key:"sendEvent",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e._config,r=void 0===n?t.Z:n,o=e.action,i=e.category,a=e.label,u=e.sendSecondEventWithOverrides,c=e.value;if(!i)throw new Error("sendEvent: category is required");if(!o)throw new Error("sendEvent: action is required");if(r.get("server"))throw new Error("sendEvent: cannot send tracking events on the server");var s={action:o,category:i,label:a,value:c},l=sr(s);if(this._ga("send",l),this.log("sendEvent",l),"object"===or(u)){var f=sr(nr(nr({},s),u));this._ga("send",f),this.log("sendEvent",f)}}},{key:"setPage",value:function(e){if(!e)throw new Error("setPage: page is required");this._ga("set","page",e),this.log("setPage",e)}},{key:"pageView",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this._ga("send",nr({hitType:"pageview"},e)),this.log("pageView",e)}},{key:"setDimension",value:function(e){var t=e.dimension,n=e.value;ce()(t,"A dimension is required"),ce()(n,"A value is required"),this._ga("set",t,n),this.log("set",{dimension:t,value:n})}}])&&ur(r.prototype,o),i&&ur(r,i),Object.defineProperty(r,"prototype",{writable:!1}),n}());function dr(e){return(dr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var hr,yr;function mr(){mr=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==dr(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}function vr(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function gr(e,t,n,r,o,i,a){try{var u=e[i](a),c=u.value}catch(e){return void n(e)}u.done?t(c):Promise.resolve(c).then(r,o)}function br(e){return function(){var t=this,n=arguments;return new Promise((function(r,o){var i=e.apply(t,n);function a(e){gr(i,r,o,a,u,"next",e)}function u(e){gr(i,r,o,a,u,"throw",e)}a(void 0)}))}}function wr(){return(wr=br(mr().mark((function i(u){var c,s,l,f,p,d,h,y,m,v,g,b,w,O,E,_,x,S,j,P,I,T,R,C=arguments;return mr().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:if(c=C.length>1&&void 0!==C[1]?C[1]:{},s=c._config,l=void 0===s?t.Z:s,f=c._createBrowserHistory,p=void 0===f?n.lX:f,d=c._tracking,h=void 0===d?pr:d,y=c.sagas,m=void 0===y?null:y,!l.get("isDevelopment")){i.next=5;break}return v=a(14777),g=v.fetchBufferedLogs,i.next=5,g();case 5:if(t.Z.get("enableStrictMode")&&L.Z.info((0,e.f9)(hr||(hr=vr(["StrictMode is enabled, which causes double redux action\n dispatching. See: https://github.com/mozilla/addons-frontend/issues/6424"])))),b=document.getElementById("redux-store-state"),O=document.querySelector("html"),E=X(O.getAttribute("lang")),_=$(E),b)try{w=JSON.parse(b.textContent)}catch(e){L.Z.error("Could not load initial redux data")}if((x=Cn({history:p({forceRefresh:!(!w||!w.site)&&w.site.loadedPageIsAnonymous})})).listen((function(e){h.setPage(e.pathname),h.pageView({title:""})})),S=u({history:x,initialState:w}),j=S.sagaMiddleware,P=S.store,m&&j?j.run(m):L.Z.warn("sagas not found"),I={},i.prev=16,_===$(l.get("defaultLang"))){i.next=21;break}return i.next=20,a(82603)("./".concat(_,"/amo.js"));case 20:I=i.sent;case 21:i.next=26;break;case 23:i.prev=23,i.t0=i.catch(16),L.Z.info((0,e.f9)(yr||(yr=vr(['Locale not found or required for locale: "','".\n Falling back to default lang: "','"'])),_,l.get("defaultLang")));case 26:return T=re(I,E),R=function(e){(0,o.render)(r.createElement(k,{history:x,i18n:T,store:P},r.createElement(e,null)),document.getElementById("react-view"))},i.abrupt("return",{history:x,renderApp:R,store:P});case 29:case"end":return i.stop()}}),i,null,[[16,23]])})))).apply(this,arguments)}var Or,Er,_r,xr,Sr=a(29622),jr=a.n(Sr),Pr=a(1816),kr=a.n(Pr),Ir=a(40801),Tr=a.n(Ir),Rr=a(28608),Cr=a.n(Rr),Ar="bodyAttributes",Nr="htmlAttributes",Lr="titleAttributes",Dr={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title"},Mr=(Object.keys(Dr).map((function(e){return Dr[e]})),"charset"),Fr="cssText",Ur="href",Br="http-equiv",Hr="innerHTML",qr="itemprop",zr="name",Gr="property",Wr="rel",Vr="src",Yr="target",Zr={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},$r="defaultTitle",Kr="defer",Qr="encodeSpecialCharacters",Xr="onChangeClientState",Jr="titleTemplate",eo=Object.keys(Zr).reduce((function(e,t){return e[Zr[t]]=t,e}),{}),to=[Dr.NOSCRIPT,Dr.SCRIPT,Dr.STYLE],no="data-react-helmet",ro="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},oo=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},io=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),ao=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},uo=function(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n},co=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t},so=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return!1===t?String(e):String(e).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;")},lo=function(e){var t=mo(e,Dr.TITLE),n=mo(e,Jr);if(n&&t)return n.replace(/%s/g,(function(){return Array.isArray(t)?t.join(""):t}));var r=mo(e,$r);return t||r||void 0},fo=function(e){return mo(e,Xr)||function(){}},po=function(e,t){return t.filter((function(t){return void 0!==t[e]})).map((function(t){return t[e]})).reduce((function(e,t){return ao({},e,t)}),{})},ho=function(e,t){return t.filter((function(e){return void 0!==e[Dr.BASE]})).map((function(e){return e[Dr.BASE]})).reverse().reduce((function(t,n){if(!t.length)for(var r=Object.keys(n),o=0;o<r.length;o++){var i=r[o].toLowerCase();if(-1!==e.indexOf(i)&&n[i])return t.concat(n)}return t}),[])},yo=function(e,t,n){var r={};return n.filter((function(t){return!!Array.isArray(t[e])||(void 0!==t[e]&&Oo("Helmet: "+e+' should be of type "Array". Instead found type "'+ro(t[e])+'"'),!1)})).map((function(t){return t[e]})).reverse().reduce((function(e,n){var o={};n.filter((function(e){for(var n=void 0,i=Object.keys(e),a=0;a<i.length;a++){var u=i[a],c=u.toLowerCase();-1===t.indexOf(c)||n===Wr&&"canonical"===e[n].toLowerCase()||c===Wr&&"stylesheet"===e[c].toLowerCase()||(n=c),-1===t.indexOf(u)||u!==Hr&&u!==Fr&&u!==qr||(n=u)}if(!n||!e[n])return!1;var s=e[n].toLowerCase();return r[n]||(r[n]={}),o[n]||(o[n]={}),!r[n][s]&&(o[n][s]=!0,!0)})).reverse().forEach((function(t){return e.push(t)}));for(var i=Object.keys(o),a=0;a<i.length;a++){var u=i[a],c=Cr()({},r[u],o[u]);r[u]=c}return e}),[]).reverse()},mo=function(e,t){for(var n=e.length-1;n>=0;n--){var r=e[n];if(r.hasOwnProperty(t))return r[t]}return null},vo=(Or=Date.now(),function(e){var t=Date.now();t-Or>16?(Or=t,e(t)):setTimeout((function(){vo(e)}),0)}),go=function(e){return clearTimeout(e)},bo="undefined"!=typeof window?window.requestAnimationFrame&&window.requestAnimationFrame.bind(window)||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||vo:a.g.requestAnimationFrame||vo,wo="undefined"!=typeof window?window.cancelAnimationFrame||window.webkitCancelAnimationFrame||window.mozCancelAnimationFrame||go:a.g.cancelAnimationFrame||go,Oo=function(e){return console&&"function"==typeof console.warn&&void 0},Eo=null,_o=function(e,t){var n=e.baseTag,r=e.bodyAttributes,o=e.htmlAttributes,i=e.linkTags,a=e.metaTags,u=e.noscriptTags,c=e.onChangeClientState,s=e.scriptTags,l=e.styleTags,f=e.title,p=e.titleAttributes;jo(Dr.BODY,r),jo(Dr.HTML,o),So(f,p);var d={baseTag:Po(Dr.BASE,n),linkTags:Po(Dr.LINK,i),metaTags:Po(Dr.META,a),noscriptTags:Po(Dr.NOSCRIPT,u),scriptTags:Po(Dr.SCRIPT,s),styleTags:Po(Dr.STYLE,l)},h={},y={};Object.keys(d).forEach((function(e){var t=d[e],n=t.newTags,r=t.oldTags;n.length&&(h[e]=n),r.length&&(y[e]=d[e].oldTags)})),t&&t(),c(e,h,y)},xo=function(e){return Array.isArray(e)?e.join(""):e},So=function(e,t){void 0!==e&&document.title!==e&&(document.title=xo(e)),jo(Dr.TITLE,t)},jo=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var r=n.getAttribute(no),o=r?r.split(","):[],i=[].concat(o),a=Object.keys(t),u=0;u<a.length;u++){var c=a[u],s=t[c]||"";n.getAttribute(c)!==s&&n.setAttribute(c,s),-1===o.indexOf(c)&&o.push(c);var l=i.indexOf(c);-1!==l&&i.splice(l,1)}for(var f=i.length-1;f>=0;f--)n.removeAttribute(i[f]);o.length===i.length?n.removeAttribute(no):n.getAttribute(no)!==a.join(",")&&n.setAttribute(no,a.join(","))}},Po=function(e,t){var n=document.head||document.querySelector(Dr.HEAD),r=n.querySelectorAll(e+"["+"data-react-helmet]"),o=Array.prototype.slice.call(r),i=[],a=void 0;return t&&t.length&&t.forEach((function(t){var n=document.createElement(e);for(var r in t)if(t.hasOwnProperty(r))if(r===Hr)n.innerHTML=t.innerHTML;else if(r===Fr)n.styleSheet?n.styleSheet.cssText=t.cssText:n.appendChild(document.createTextNode(t.cssText));else{var u=void 0===t[r]?"":t[r];n.setAttribute(r,u)}n.setAttribute(no,"true"),o.some((function(e,t){return a=t,n.isEqualNode(e)}))?o.splice(a,1):i.push(n)})),o.forEach((function(e){return e.parentNode.removeChild(e)})),i.forEach((function(e){return n.appendChild(e)})),{oldTags:o,newTags:i}},ko=function(e){return Object.keys(e).reduce((function(t,n){var r=void 0!==e[n]?n+'="'+e[n]+'"':""+n;return t?t+" "+r:r}),"")},Io=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Object.keys(e).reduce((function(t,n){return t[Zr[n]||n]=e[n],t}),t)},To=function(e,t,n){switch(e){case Dr.TITLE:return{toComponent:function(){return e=t.title,n=t.titleAttributes,(o={key:e})[no]=!0,i=Io(n,o),[r.createElement(Dr.TITLE,i,e)];var e,n,o,i},toString:function(){return function(e,t,n,r){var o=ko(n),i=xo(t);return o?"<"+e+' data-react-helmet="true" '+o+">"+so(i,r)+"</"+e+">":"<"+e+' data-react-helmet="true">'+so(i,r)+"</"+e+">"}(e,t.title,t.titleAttributes,n)}};case Ar:case Nr:return{toComponent:function(){return Io(t)},toString:function(){return ko(t)}};default:return{toComponent:function(){return function(e,t){return t.map((function(t,n){var o,i=((o={key:n})[no]=!0,o);return Object.keys(t).forEach((function(e){var n=Zr[e]||e;if(n===Hr||n===Fr){var r=t.innerHTML||t.cssText;i.dangerouslySetInnerHTML={__html:r}}else i[n]=t[e]})),r.createElement(e,i)}))}(e,t)},toString:function(){return function(e,t,n){return t.reduce((function(t,r){var o=Object.keys(r).filter((function(e){return!(e===Hr||e===Fr)})).reduce((function(e,t){var o=void 0===r[t]?t:t+'="'+so(r[t],n)+'"';return e?e+" "+o:o}),""),i=r.innerHTML||r.cssText||"",a=-1===to.indexOf(e);return t+"<"+e+' data-react-helmet="true" '+o+(a?"/>":">"+i+"</"+e+">")}),"")}(e,t,n)}}}},Ro=function(e){var t=e.baseTag,n=e.bodyAttributes,r=e.encode,o=e.htmlAttributes,i=e.linkTags,a=e.metaTags,u=e.noscriptTags,c=e.scriptTags,s=e.styleTags,l=e.title,f=void 0===l?"":l,p=e.titleAttributes;return{base:To(Dr.BASE,t,r),bodyAttributes:To(Ar,n,r),htmlAttributes:To(Nr,o,r),link:To(Dr.LINK,i,r),meta:To(Dr.META,a,r),noscript:To(Dr.NOSCRIPT,u,r),script:To(Dr.SCRIPT,c,r),style:To(Dr.STYLE,s,r),title:To(Dr.TITLE,{title:f,titleAttributes:p},r)}},Co=kr()((function(e){return{baseTag:ho([Ur,Yr],e),bodyAttributes:po(Ar,e),defer:mo(e,Kr),encode:mo(e,Qr),htmlAttributes:po(Nr,e),linkTags:yo(Dr.LINK,[Wr,Ur],e),metaTags:yo(Dr.META,[zr,Mr,Br,Gr,qr],e),noscriptTags:yo(Dr.NOSCRIPT,[Hr],e),onChangeClientState:fo(e),scriptTags:yo(Dr.SCRIPT,[Vr,Hr],e),styleTags:yo(Dr.STYLE,[Fr],e),title:lo(e),titleAttributes:po(Lr,e)}}),(function(e){Eo&&wo(Eo),e.defer?Eo=bo((function(){_o(e,(function(){Eo=null}))})):(_o(e),Eo=null)}),Ro)((function(){return null})),Ao=(Er=Co,xr=_r=function(e){function t(){return oo(this,t),co(this,e.apply(this,arguments))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.shouldComponentUpdate=function(e){return!Tr()(this.props,e)},t.prototype.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case Dr.SCRIPT:case Dr.NOSCRIPT:return{innerHTML:t};case Dr.STYLE:return{cssText:t}}throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")},t.prototype.flattenArrayTypeChildren=function(e){var t,n=e.child,r=e.arrayTypeChildren,o=e.newChildProps,i=e.nestedChildren;return ao({},r,((t={})[n.type]=[].concat(r[n.type]||[],[ao({},o,this.mapNestedChildrenToProps(n,i))]),t))},t.prototype.mapObjectTypeChildren=function(e){var t,n,r=e.child,o=e.newProps,i=e.newChildProps,a=e.nestedChildren;switch(r.type){case Dr.TITLE:return ao({},o,((t={})[r.type]=a,t.titleAttributes=ao({},i),t));case Dr.BODY:return ao({},o,{bodyAttributes:ao({},i)});case Dr.HTML:return ao({},o,{htmlAttributes:ao({},i)})}return ao({},o,((n={})[r.type]=ao({},i),n))},t.prototype.mapArrayTypeChildrenToProps=function(e,t){var n=ao({},t);return Object.keys(e).forEach((function(t){var r;n=ao({},n,((r={})[t]=e[t],r))})),n},t.prototype.warnOnInvalidChildren=function(e,t){return!0},t.prototype.mapChildrenToProps=function(e,t){var n=this,o={};return r.Children.forEach(e,(function(e){if(e&&e.props){var r=e.props,i=r.children,a=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Object.keys(e).reduce((function(t,n){return t[eo[n]||n]=e[n],t}),t)}(uo(r,["children"]));switch(n.warnOnInvalidChildren(e,i),e.type){case Dr.LINK:case Dr.META:case Dr.NOSCRIPT:case Dr.SCRIPT:case Dr.STYLE:o=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:o,newChildProps:a,nestedChildren:i});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:a,nestedChildren:i})}}})),t=this.mapArrayTypeChildrenToProps(o,t)},t.prototype.render=function(){var e=this.props,t=e.children,n=uo(e,["children"]),o=ao({},n);return t&&(o=this.mapChildrenToProps(t,o)),r.createElement(Er,o)},io(t,null,[{key:"canUseDOM",set:function(e){Er.canUseDOM=e}}]),t}(r.Component),_r.propTypes={base:jr().object,bodyAttributes:jr().object,children:jr().oneOfType([jr().arrayOf(jr().node),jr().node]),defaultTitle:jr().string,defer:jr().bool,encodeSpecialCharacters:jr().bool,htmlAttributes:jr().object,link:jr().arrayOf(jr().object),meta:jr().arrayOf(jr().object),noscript:jr().arrayOf(jr().object),onChangeClientState:jr().func,script:jr().arrayOf(jr().object),style:jr().arrayOf(jr().object),title:jr().string,titleAttributes:jr().object,titleTemplate:jr().string},_r.defaultProps={defer:!0,encodeSpecialCharacters:!0},_r.peek=Er.peek,_r.rewind=function(){var e=Er.rewind();return e||(e=Ro({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}})),e},xr);Ao.renderStatic=Ao.rewind;const No=a(10153).Z;var Lo=a(98269),Do=a.n(Lo),Mo=a(51324);a(12578);const Fo=a(49950).Z;const Uo=a(68597).Z;var Bo=a(10166),Ho=a.n(Bo),qo=function(e){if(!e)throw new Error("context parameter is required");return{type:D.Of,payload:{context:e}}},zo=(a(94606),a(26072),"CREATE_ADDON_REVIEW"),Go="SHOW_EDIT_REVIEW_FORM",Wo="SHOW_REPLY_TO_REVIEW_FORM",Vo="FETCH_REVIEW",Yo="FETCH_REVIEW_PERMISSIONS",Zo="FETCH_REVIEWS",$o="FETCH_LATEST_USER_REVIEW",Ko="FETCH_USER_REVIEWS",Qo="FLASH_REVIEW_MESSAGE",Xo="HIDE_FLASHED_REVIEW_MESSAGE",Jo="HIDE_EDIT_REVIEW_FORM",ei="HIDE_REPLY_TO_REVIEW_FORM",ti="SET_ADDON_REVIEWS",ni="SET_INTERNAL_REVIEW",ri="SET_USER_REVIEWS",oi="SET_REVIEW",ii="SET_LATEST_REVIEW",ai="SET_REVIEW_PERMISSIONS",ui="SET_REVIEW_REPLY",ci="SET_REVIEW_WAS_FLAGGED",si="SEND_REPLY_TO_REVIEW",li="SEND_REVIEW_FLAG",fi="UPDATE_ADDON_REVIEW",pi="DELETE_ADDON_REVIEW",di="BEGIN_DELETE_ADDON_REVIEW",hi="CANCEL_DELETE_ADDON_REVIEW",yi="UNLOAD_ADDON_REVIEWS",mi="UPDATE_RATING_COUNTS";function vi(e){return{reviewAddon:{iconUrl:e.addon.icon_url,id:e.addon.id,name:e.addon.name,slug:e.addon.slug},body:e.body,created:e.created,id:e.id,isDeleted:e.is_deleted,isDeveloperReply:e.is_developer_reply,isLatest:e.is_latest,score:e.score||null,reply:e.reply?vi(e.reply):null,userId:e.user.id,userName:e.user.name,userUrl:e.user.url,versionId:e.version?e.version.id:null}}var gi=function(e){return ce()(e,"review is required"),{type:oi,payload:e}},bi=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.originalReviewId,n=e.reply;if(!t)throw new Error("The originalReviewId parameter is required");if(!n)throw new Error("The reply parameter is required");return{type:ui,payload:{originalReviewId:t,reply:n}}};function wi(e){var t=e.addonId,n=e.userId,r=e.canReplyToReviews;return ce()(t,"addonId is required"),ce()(n,"userId is required"),ce()(void 0!==r,"canReplyToReviews is required"),{type:ai,payload:{addonId:t,userId:n,canReplyToReviews:r}}}function Oi(e){var t=e.addonId,n=e.oldReview,r=e.newReview;return ce()(t,"addonId is required"),ce()(r,"newReview is required"),{type:mi,payload:{addonId:t,oldReview:n,newReview:r}}}function Ei(e){var t=e.errorHandlerId,n=e.userId,r=e.page,o=void 0===r?"1":r;return ce()(t,"errorHandlerId is required"),ce()(n,"userId is required"),{type:Ko,payload:{errorHandlerId:t,page:o,userId:n}}}var _i=function(e){var t=e.pageSize,n=e.reviewCount,r=e.reviews,o=e.userId;return ce()(t,"pageSize is required"),ce()("number"==typeof n,"reviewCount is required"),ce()(Array.isArray(r),"reviews are required and must be an array"),ce()(o,"userId is required"),{type:ri,payload:{pageSize:t,reviewCount:n,reviews:r,userId:o}}},xi=function(e){var t=e.addonSlug,n=e.page,r=e.pageSize,o=e.reviewCount,i=e.reviews,a=e.score;return ce()(t,"addonSlug is required"),ce()(n,"page is required"),ce()(r,"pageSize is required"),ce()("number"==typeof o,"reviewCount is required"),ce()(Array.isArray(i),"reviews is required and must be an array"),ce()(void 0!==a,"score is required"),{type:ti,payload:{addonSlug:t,page:n,pageSize:r,reviewCount:o,reviews:i,score:a}}},Si=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.errorHandlerId,n=e.originalReviewId,r=e.body,o=e.title;if(!t)throw new Error("The errorHandlerId parameter is required");if(!n)throw new Error("The originalReviewId parameter is required");if(!r)throw new Error("The body parameter is required");return{type:si,payload:{errorHandlerId:t,originalReviewId:n,body:r,title:o}}},ji=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.reviewId,n=e.type;if(!t)throw new Error("The reviewId parameter is required");return{type:n,payload:{reviewId:t}}},Pi=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.reviewId;return ji({type:Go,reviewId:t})},ki=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.reviewId;return ji({type:Wo,reviewId:t})},Ii=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.reviewId;return ji({type:Jo,reviewId:t})},Ti=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.reviewId;return ji({type:ei,reviewId:t})},Ri=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.errorHandlerId,n=e.note,r=e.reason,o=e.reviewId;if(!t)throw new Error("The errorHandlerId parameter is required");if(!r)throw new Error("The reason parameter is required");if(!o)throw new Error("The reviewId parameter is required");return{type:li,payload:{errorHandlerId:t,note:n,reason:r,reviewId:o}}},Ci=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.reason,n=e.reviewId;if(!t)throw new Error("The reason parameter is required");if(!n)throw new Error("The reviewId parameter is required");return{type:ci,payload:{reason:t,reviewId:n}}},Ai=function(e){var t=e.addonId,n=e.review,r=e.userId;return ce()(t,"addonId is required"),ce()(void 0!==n,"review is required"),ce()(r,"userId is required"),{type:ii,payload:{addonId:t,review:n,userId:r}}},Ni=function(e){var t=e.addonId,n=e.body,r=e.errorHandlerId,o=e.score,i=e.versionId;return ce()(t,"addonId is required"),ce()(r,"errorHandlerId is required"),ce()(o,"score is required"),ce()(i,"versionId is required"),{type:zo,payload:{addonId:t,body:n,errorHandlerId:r,score:o,versionId:i}}},Li=function(e){var t=e.body,n=e.errorHandlerId,r=e.score,o=e.reviewId;return ce()(n,"errorHandlerId is required"),ce()(o,"reviewId is required"),{type:fi,payload:{body:t,errorHandlerId:n,score:r,reviewId:o}}},Di="aborted",Mi="saved-rating",Fi="saved-review",Ui="started-save-rating",Bi="started-save-review",Hi=function(e){return ce()(e,"message is required"),{type:Qo,payload:{message:e}}},qi=function(){return{type:Xo}},zi=function(e){var t=e.addonId,n=e.errorHandlerId,r=e.isReplyToReviewId,o=e.reviewId;return ce()(t,"addonId is required"),ce()(n,"errorHandlerId is required"),ce()(o,"reviewId is required"),{type:pi,payload:{addonId:t,errorHandlerId:n,isReplyToReviewId:r,reviewId:o}}},Gi=function(e){var t=e.reviewId;return{type:di,payload:{reviewId:t}}},Wi=function(e){var t=e.reviewId;return{type:hi,payload:{reviewId:t}}},Vi=function(e){var t=e.addonId,n=e.reviewId;return{type:yi,payload:{addonId:t,reviewId:n}}},Yi=function(e,t){return ce()(t,"lang must not be empty"),e?e[t]?e[t]:e[e._default]:null};function Zi(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function $i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Zi(Object(n),!0).forEach((function(t){Ki(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Zi(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Ki(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Qi="FETCH_ADDON_INFO",Xi="LOAD_ADDON_INFO",Ji="FETCH_ADDON",ea="LOAD_ADDON",ta={byID:{},byIdInURL:{},byGUID:{},bySlug:{},infoBySlug:{},lang:"",loadingByIdInURL:{}};function na(e){var t=e.errorHandler,n=e.showGroupedRatings,r=void 0!==n&&n,o=e.slug;if(!t)throw new Error("errorHandler cannot be empty");if(!o)throw new Error("slug cannot be empty");return{type:Ji,payload:{errorHandlerId:t.id,showGroupedRatings:r,slug:o}}}function ra(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.addon,n=e.slug;return ce()(t,"addon is required"),ce()(n,"slug is required"),{type:ea,payload:{addon:t,slug:n}}}var oa=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.info,n=e.slug;return ce()(t,"info is required"),ce()(n,"slug is required"),{type:Xi,payload:{info:t,slug:n}}},ia=function(e,t){return e.map((function(e){return{h:e.image_size[1],src:e.image_url,thumbnail_h:e.thumbnail_size[1],thumbnail_src:e.thumbnail_url,thumbnail_w:e.thumbnail_size[0],title:Yi(e.caption,t),w:e.image_size[0]}}))},aa=function(e,t){return e&&e.url&&e.outgoing?{url:Yi(e.url,t),outgoing:Yi(e.outgoing,t)}:null};function ua(e,t){var n={authors:e.authors,average_daily_users:e.average_daily_users,categories:e.categories,contributions_url:e.contributions_url,created:e.created,default_locale:e.default_locale,description:Yi(e.description,t),developer_comments:Yi(e.developer_comments,t),edit_url:e.edit_url,guid:e.guid,has_eula:e.has_eula,has_privacy_policy:e.has_privacy_policy,homepage:aa(e.homepage,t),icon_url:e.icon_url,id:e.id,is_disabled:e.is_disabled,is_experimental:e.is_experimental,is_source_public:e.is_source_public,last_updated:e.last_updated,latest_unlisted_version:e.latest_unlisted_version,locale_disambiguation:e.locale_disambiguation,name:Yi(e.name,t),previews:e.previews?ia(e.previews,t):void 0,promoted:e.promoted,ratings:e.ratings,requires_payment:e.requires_payment,review_url:e.review_url,slug:e.slug,status:e.status,summary:Yi(e.summary,t),support_email:Yi(e.support_email,t),support_url:aa(e.support_url,t),tags:e.tags,target_locale:e.target_locale,type:e.type,url:e.url,weekly_downloads:e.weekly_downloads,currentVersionId:e.current_version?e.current_version.id:null,isMozillaSignedExtension:!1},r=e.current_version;return r&&(n.isMozillaSignedExtension=r.file.is_mozilla_signed_extension),n}var ca,sa=function(e,t){return e.byID["".concat(t)]||null},la=function(e,t){var n=e.byIdInURL[t];return sa(e,n)},fa=function(e,t){return"string"==typeof t&&Boolean(e.addons.loadingByIdInURL[t])},pa=function(e){var t=e.slug,n=e.state;ce()(t,"slug is required"),ce()(n,"state is required");var r=n.infoBySlug[t];return r&&r.info||null},da=function(e){var t=e.slug,n=e.state;ce()(t,"slug is required"),ce()(n,"state is required");var r=n.infoBySlug[t];return Boolean(r&&r.loading)},ha=function(e,t){return{eula:Yi(e.eula,t),privacyPolicy:Yi(e.privacy_policy,t)}};function ya(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return $i({1:0,2:0,3:0,4:0,5:0},e)}function ma(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function va(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function ba(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?va(Object(n),!0).forEach((function(t){wa(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):va(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function wa(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Oa="ADD_ADDON_TO_COLLECTION",Ea="FETCH_CURRENT_COLLECTION",_a="FETCH_USER_COLLECTIONS",xa="LOAD_CURRENT_COLLECTION",Sa="FETCH_CURRENT_COLLECTION_PAGE",ja="LOAD_CURRENT_COLLECTION_PAGE",Pa="ABORT_FETCH_CURRENT_COLLECTION",ka="ABORT_FETCH_USER_COLLECTIONS",Ia="ABORT_ADD_ADDON_TO_COLLECTION",Ta="LOAD_USER_COLLECTIONS",Ra="ADDON_ADDED_TO_COLLECTION",Ca="LOAD_COLLECTION_ADDONS",Aa="UPDATE_COLLECTION",Na="UNLOAD_COLLECTION_BY_SLUG",La="CREATE_COLLECTION",Da="BEGIN_COLLECTION_MODIFICATION",Ma="FINISH_COLLECTION_MODIFICATION",Fa="REMOVE_ADDON_FROM_COLLECTION",Ua="ADDON_REMOVED_FROM_COLLECTION",Ba="DELETE_COLLECTION",Ha="UPDATE_COLLECTION_ADDON",qa="DELETE_COLLECTION_ADDON_NOTES",za="BEGIN_EDITING_COLLECTION_DETAILS",Ga="FINISH_EDITING_COLLECTION_DETAILS",Wa={byId:{},bySlug:{},current:{id:null,loading:!1},userCollections:{},addonInCollections:{},isCollectionBeingModified:!1,hasAddonBeenAdded:!1,hasAddonBeenRemoved:!1,editingCollectionDetails:!1,lang:""},Va=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.errorHandlerId,n=e.userId;return ce()(t,"errorHandlerId is required"),ce()(n,"userId is required"),{type:_a,payload:{errorHandlerId:t,userId:n}}},Ya=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.userId;return ce()(t,"userId is required"),{type:ka,payload:{userId:t}}},Za=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.addonId,n=e.userId;return ce()(n,"userId is required"),ce()(t,"addonId is required"),{type:Ia,payload:{userId:n,addonId:t}}},$a=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.errorHandlerId,n=e.filters,r=e.slug,o=e.userId;return ce()(t,"errorHandlerId is required"),ce()(r,"slug is required"),ce()(o,"userId is required"),{type:Sa,payload:{errorHandlerId:t,filters:n,slug:r,userId:o}}},Ka=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.addonsResponse,n=e.detail;return ce()(n,"detail is required"),{type:xa,payload:{addonsResponse:t,detail:n}}},Qa=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.addonsResponse;return ce()(t,"The addonsResponse parameter is required"),{type:ja,payload:{addonsResponse:t}}},Xa=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.collections,n=e.userId;return ce()(n,"userId is required"),ce()(t,"collections are required"),{type:Ta,payload:{userId:n,collections:t}}},Ja=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.addonId,n=e.collectionId,r=e.userId;return ce()(t,"addonId is required"),ce()(r,"userId is required"),ce()(n,"collectionId is required"),{type:Ra,payload:{addonId:t,collectionId:n,userId:r}}},eu=function(){return{type:Pa}},tu=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.addonId,n=e.collectionId,r=e.editing,o=e.errorHandlerId,i=e.filters,a=e.notes,u=e.slug,c=e.userId;return ce()(t,"The addonId parameter is required"),ce()(n,"The collectionId parameter is required"),ce()(u,"The slug parameter is required"),ce()(o,"The errorHandlerId parameter is required"),ce()(c,"The userId parameter is required"),r&&ce()(i,"The filters parameter is required when editing"),{type:Oa,payload:{addonId:t,collectionId:n,editing:r,errorHandlerId:o,filters:i,notes:a,slug:u,userId:c}}},nu=function(e){if(!e)throw new Error("A slug is required");return{type:Na,payload:{slug:e}}},ru=function(){return{type:za}},ou=function(){return{type:Ga}},iu=function(e,t){return e.map((function(e){var n=e.addon,r=e.notes;return ba(ba({},ua(n,t)),{},{notes:Yi(r,t)})}))},au=function(e){if(!e)throw new Error("The collectionsState parameter is required");return e.current.id?function(e){var t=e.id,n=e.state;if(!t)throw new Error("The id parameter is required");if(!n)throw new Error("The state parameter is required");return n.byId[t]||null}({id:e.current.id,state:e}):null},uu=function(e){var t=e.addonsResponse,n=e.collection,r=e.state,o=r.byId[n.id],i=function(e){var t=e.addonsResponse,n=e.detail,r=e.lang;return{addons:t?iu(t.results,r):null,authorId:n.author.id,authorName:n.author.name,authorUsername:n.author.username,defaultLocale:n.default_locale,description:Yi(n.description,r),id:n.id,lastUpdatedDate:n.modified,name:Yi(n.name,r)||"",numberOfAddons:t?t.count:n.addon_count,pageSize:t?t.page_size:null,slug:n.slug}}({detail:n,addonsResponse:t,lang:r.lang});return!i.addons&&o&&(i.addons=o.addons,i.pageSize=o.pageSize),ba(ba({},r),{},{byId:ba(ba({},r.byId),{},wa({},i.id,i)),bySlug:ba(ba({},r.bySlug),{},wa({},i.slug,i.id))})},cu=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.addonId,n=e.loading,r=e.state,o=e.userId,i=r.addonInCollections[o],a=i&&i[t];return ba(ba({},r),{},{addonInCollections:ba(ba({},r.addonInCollections),{},wa({},o,ba(ba({},i),{},wa({},t,{collections:a?a.collections:null,loading:n}))))})},su=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.state,n=e.userId;return ba(ba({},t),{},{userCollections:ba(ba({},t.userCollections),{},wa({},n,{collections:null,loading:!1}))})},lu=function(e,t){return t&&t.collections?t.collections.reduce((function(t,n){var r=e.byId[n];return r&&t.push(r),t}),[]):null},fu=function(e){return{page:e.page,collection_sort:e.collectionSort}},pu=function(e){var t=e.authorId,n=e.collection,r=e.collectionSlug,o=t;return n&&(r=n.slug,o=n.authorId),ce()(r&&o,"Either a collection or an authorId and collectionSlug are required."),"/collections/".concat(o,"/").concat(r,"/")},du=function(e){var t=e.authorId,n=e.collection,r=e.collectionSlug,o=e._collectionUrl;return"".concat((void 0===o?pu:o)({authorId:t,collection:n,collectionSlug:r}),"edit/")},hu=function(e){var t=e.i18n;return e.name||t.gettext("(no name)")};const yu=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Wa,n=arguments.length>1?arguments[1]:void 0;switch(n.type){case Ea:return ba(ba({},t),{},{current:{id:null,loading:!0}});case Sa:var r={id:t.current.id,loading:!0},o=au(t);return ba(ba({},t),{},o?{byId:ba(ba({},t.byId),{},wa({},o.id,ba(ba({},o),{},{addons:[],numberOfAddons:null,pageSize:null}))),current:r}:{current:r});case xa:var a=n.payload,u=a.addonsResponse,c=a.detail,s=uu({addonsResponse:u,collection:c,state:t});return ba(ba({},s),{},{current:{id:c.id,loading:!1}});case ja:var l=n.payload.addonsResponse,f=au(t);if(!f)throw new Error("".concat(n.type,": a current collection does not exist"));return ba(ba({},t),{},{byId:ba(ba({},t.byId),{},wa({},f.id,ba(ba({},f),{},{addons:iu(l.results,t.lang),numberOfAddons:l.count,pageSize:l.page_size}))),current:{id:t.current.id,loading:!1}});case Ca:var p=n.payload,d=p.addons,h=p.slug,y=t.bySlug[h];if(!y)throw new Error((0,e.f9)(ca||(ca=ma(['Cannot load add-ons for collection\n "','" because the collection has not\n been loaded yet'])),h));var m=t.byId[y];return ba(ba({},t),{},{byId:ba(ba({},t.byId),{},wa({},y,ba(ba({},m),{},{addons:iu(d,t.lang)})))});case Pa:return ba(ba({},t),{},{current:{id:null,loading:!1}});case _a:var v=n.payload.userId;return ba(ba({},t),{},{userCollections:ba(ba({},t.userCollections),{},wa({},v,{collections:null,loading:!0}))});case ka:var g=n.payload.userId;return ba(ba({},t),{},{userCollections:ba(ba({},t.userCollections),{},wa({},g,{collections:null,loading:!1}))});case Ta:var b=n.payload,w=b.collections,O=b.userId,E=ba({},t);return w.forEach((function(e){E=uu({state:E,collection:e})})),ba(ba({},E),{},{userCollections:ba(ba({},t.userCollections),{},wa({},O,{collections:w.map((function(e){return e.id})),loading:!1}))});case Ra:var _=n.payload,x=_.addonId,S=_.collectionId,j=_.userId,P=t.addonInCollections,k=[];if(P[j]&&P[j][x]){var I=P[j][x].collections;I&&(k=I)}return ba(ba({},t),{},{addonInCollections:ba(ba({},t.addonInCollections),{},wa({},j,ba(ba({},t.addonInCollections[j]),{},wa({},x,{collections:k.concat([S]),loading:!1})))),hasAddonBeenAdded:!0});case Oa:var T=n.payload,R=T.addonId,C=T.userId,A=cu({addonId:R,userId:C,state:t,loading:!0});return ba(ba({},A),{},{hasAddonBeenAdded:!1});case Ia:var N=n.payload,L=N.addonId,D=N.userId,M=cu({addonId:L,userId:D,state:t,loading:!1});return ba(ba({},M),{},{hasAddonBeenAdded:!1});case Da:return ba(ba({},t),{},{isCollectionBeingModified:!0});case Ma:return ba(ba({},t),{},{isCollectionBeingModified:!1});case Na:var F=n.payload.slug,U=t.bySlug[F];return U?ba(ba({},t),{},{byId:ba(ba({},t.byId),{},wa({},U,void 0))}):t;case La:case Ba:case Aa:var B=n.payload.userId;return su({state:t,userId:B});case Fa:return ba(ba({},t),{},{hasAddonBeenRemoved:!1});case Ua:return ba(ba({},t),{},{hasAddonBeenRemoved:!0});case za:return ba(ba({},t),{},{editingCollectionDetails:!0});case Ga:return ba(ba({},t),{},{editingCollectionDetails:!1});case i.nk:return ba(ba({},t),{},{addonInCollections:{}});case dt:return ba(ba({},t),{},{lang:n.payload.lang});default:return t}};a(76047);function mu(e){return(mu="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function vu(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function gu(e,t){return(gu=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function bu(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Ou(e);if(t){var o=Ou(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return wu(this,n)}}function wu(e,t){if(t&&("object"===mu(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Ou(e){return(Ou=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}const Eu=function(){return function(e){var t=function(t){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&gu(e,t)}(u,t);var n,o,i,a=bu(u);function u(e,t){var n;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,u),(n=a.call(this,e,t)).i18n=t.i18n,n}return n=u,(o=[{key:"render",value:function(){return r.createElement(e,Object.assign({i18n:this.i18n},this.props))}}])&&vu(n.prototype,o),i&&vu(n,i),Object.defineProperty(n,"prototype",{writable:!1}),u}(r.Component);return t.contextTypes={i18n:w().object},t.displayName="Translate(".concat(Rn(e),")"),t}};function _u(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function xu(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?_u(Object(n),!0).forEach((function(t){Su(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):_u(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Su(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var ju="SET_UI_STATE",Pu={};function ku(e){return(ku="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Iu(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Tu(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Ru(e,t){return(Ru=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Cu(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Nu(e);if(t){var o=Nu(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Au(this,n)}}function Au(e,t){if(t&&("object"===ku(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Nu(e){return(Nu=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function Lu(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Du(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Lu(Object(n),!0).forEach((function(t){Mu(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Lu(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Mu(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Fu=function(e){var t=e.initialState,n=e.extractId,r=e.fileName;ce()(t,"initialState is required");return function(e,o){ce()(n,"extractId is required."),ce()(r,"fileName is required.");var i,a=function(e){var t=e.fileName,n=e.id;return ce()(t,"fileName is required"),ce()("string"==typeof n,"id must be a string"),"".concat(Tn(t),"-").concat(n)}({fileName:r,id:n(o)});return{uiState:(i={uiState:e.uiState,uiStateID:a}).uiState[i.uiStateID]||t,uiStateID:a}}},Uu=function(e,t,n){var r=t.dispatch;return Du(Du(Du(Du({},n),e),t),{},{setUIState:function(t){r(function(e){var t=e.change,n=e.id;return ce()(t,"change cannot be undefined"),ce()(n,"id cannot be undefined"),{type:ju,payload:{change:t,id:n}}}({id:e.uiStateID,change:t}))}})};const Bu=function(e){var t=e.fileName,n=e.extractId,o=e.initialState,i=e.resetOnUnmount,a=void 0!==i&&i;ce()(t,"fileName is required"),ce()(n,"extractId is required"),ce()(o,"initialState is required");var u=Fu({extractId:n,fileName:t,initialState:o});return function(e){var t=function(t){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Ru(e,t)}(s,t);var n,i,u,c=Cu(s);function s(){return Iu(this,s),c.apply(this,arguments)}return n=s,(i=[{key:"componentWillUnmount",value:function(){a&&this.props.setUIState(o)}},{key:"render",value:function(){return r.createElement(e,this.props)}}])&&Tu(n.prototype,i),u&&Tu(n,u),Object.defineProperty(n,"prototype",{writable:!1}),s}(r.Component);return t.displayName="WithUIState(".concat(Rn(e),")"),(0,g.connect)(u,void 0,Uu)(t)}};var Hu=a(97170),qu=a.n(Hu),zu=a(58137),Gu=a.n(zu),Wu=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e};function Vu(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Yu(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}var Zu=function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)},$u=function(e){function t(){var n,r;Vu(this,t);for(var o=arguments.length,i=Array(o),a=0;a<o;a++)i[a]=arguments[a];return n=r=Yu(this,e.call.apply(e,[this].concat(i))),r.handleClick=function(e){if(r.props.onClick&&r.props.onClick(e),!e.defaultPrevented&&0===e.button&&!r.props.target&&!Zu(e)){e.preventDefault();var t=r.context.router.history,n=r.props,o=n.replace,i=n.to;o?t.replace(i):t.push(i)}},Yu(r,n)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.render=function(){var e=this.props,t=(e.replace,e.to),o=e.innerRef,i=function(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}(e,["replace","to","innerRef"]);ce()(this.context.router,"You should not use <Link> outside a <Router>"),ce()(void 0!==t,'You must specify the "to" property');var a=this.context.router.history,u="string"==typeof t?(0,n.ob)(t,null,null,a.location):t,c=a.createHref(u);return r.createElement("a",Wu({},i,{onClick:this.handleClick,href:c,ref:o}))},t}(r.Component);$u.propTypes={onClick:Gu().func,target:Gu().string,replace:Gu().bool,to:Gu().oneOfType([Gu().string,Gu().object]).isRequired,innerRef:Gu().oneOfType([Gu().string,Gu().func])},$u.defaultProps={replace:!1},$u.contextTypes={router:Gu().shape({history:Gu().shape({push:Gu().func.isRequired,replace:Gu().func.isRequired,createHref:Gu().func.isRequired}).isRequired}).isRequired};const Ku=$u;function Qu(e){return(Qu="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var Xu=["alt","children","className","name"];function Ju(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function ec(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function tc(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function nc(e,t){return(nc=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function rc(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=ic(e);if(t){var o=ic(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return oc(this,n)}}function oc(e,t){if(t&&("object"===Qu(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function ic(e){return(ic=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var ac=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&nc(e,t)}(a,e);var t,n,o,i=rc(a);function a(){return ec(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e,t=this.props,n=t.alt,o=t.children,i=t.className,a=t.name,u=Ju(t,Xu);return n&&(e=r.createElement("span",{className:"visually-hidden"},n)),r.createElement("span",Object.assign({className:Ho()("Icon","Icon-".concat(a),i)},u),e,o)}}])&&tc(t.prototype,n),o&&tc(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);function uc(e){return(uc="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var cc=["clientApp","children","dispatch","external","externalDark","href","lang","prependClientApp","prependLang","to","target"];function sc(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function lc(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?sc(Object(n),!0).forEach((function(t){fc(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):sc(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function fc(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function pc(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function dc(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function hc(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function yc(e,t){return(yc=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function mc(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=gc(e);if(t){var o=gc(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return vc(this,n)}}function vc(e,t){if(t&&("object"===uc(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function gc(e){return(gc=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var bc=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&yc(e,t)}(a,e);var t,n,o,i=mc(a);function a(){return dc(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"urlPrefix",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.clientApp,n=e.lang,r=e.prependClientApp,o=e.prependLang,i=[];return o&&i.push(n),r&&i.push(t),i.length?"/".concat(i.join("/"),"/"):null}},{key:"render",value:function(){var e=this.props,t=e.clientApp,n=e.children,o=(e.dispatch,e.external),i=e.externalDark,a=e.href,u=e.lang,c=e.prependClientApp,s=e.prependLang,l=e.to,f=e.target,p=pc(e,cc),d=this.urlPrefix({clientApp:t,lang:u,prependClientApp:c,prependLang:s}),h=function(e){return d&&!e.startsWith(d)?qu().pathname(d,e):e},y=i||o,m=i?"external-dark":"external";if("string"==typeof a&&void 0!==l)throw new Error('Cannot use "href" prop and "to" prop in the same Link component');if(void 0!==l&&("string"==typeof l&&!l.startsWith("/")||l&&l.pathname&&!l.pathname.startsWith("/")))throw new Error('"to" prop cannot contain a relative path; it must start with a "/".');var v=lc(lc({},p),{},{target:f,rel:"_blank"===f?"noopener noreferrer":p.rel});if("string"==typeof a)return r.createElement("a",Object.assign({},v,{href:h(a)}),n,y?r.createElement(ac,{name:m}):null);var g=l;return"string"==typeof l?g=h(l):l&&l.pathname&&(g=lc(lc({},l),{},{pathname:h(l.pathname)})),r.createElement(Ku,Object.assign({},v,{to:g}),n,y?r.createElement(ac,{name:m}):null)}}])&&hc(t.prototype,n),o&&hc(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);bc.propTypes={children:w().node,className:w().string,clientApp:w().string.isRequired,dispatch:w().func.isRequired,external:w().bool,externalDark:w().bool,href:w().string,lang:w().string.isRequired,prependClientApp:w().bool,prependLang:w().bool,target:w().string,to:w().oneOfType([w().object,w().string])},bc.defaultProps={external:!1,externalDark:!1,prependClientApp:!0,prependLang:!0};const wc=(0,Mo.qC)((0,g.connect)((function(e){return{clientApp:e.api.clientApp,lang:e.api.lang}})))(bc);function Oc(e){return(Oc="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var Ec,_c,xc=["buttonType","children","className","href","htmlType","micro","puffy","noLink","to"];function Sc(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function jc(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Pc(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function kc(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Ic(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Tc(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Rc(e,t){return(Rc=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Cc(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Nc(e);if(t){var o=Nc(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Ac(this,n)}}function Ac(e,t){if(t&&("object"===Oc(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Nc(e){return(Nc=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Lc=["neutral","light","action","cancel","confirm","alert","none"],Dc=function(t){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Rc(e,t)}(u,t);var n,o,i,a=Cc(u);function u(){return Ic(this,u),a.apply(this,arguments)}return n=u,(o=[{key:"render",value:function(){var t=this.props,n=t.buttonType,o=t.children,i=t.className,a=t.href,u=t.htmlType,c=t.micro,s=t.puffy,l=t.noLink,f=t.to,p=kc(t,xc),d=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?jc(Object(n),!0).forEach((function(t){Pc(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):jc(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({},p);if(!Lc.includes(n))throw new Error((0,e.f9)(Ec||(Ec=Sc(['buttonType="','" supplied but that is\n not a valid button type'])),n));var h=function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return Ho().apply(void 0,["Button","Button--".concat(n),i].concat(t,[{"Button--disabled":d.disabled,"Button--micro":c,"Button--puffy":s}]))};return l?r.createElement("span",{className:h(),title:p.title},o):a||f?(a?(d.href=a,d.prependClientApp=!1,d.prependLang=!1):f&&(d.to=f),d.className=h({disabled:d.disabled}),d.disabled&&(d.onClick=function(t){t.preventDefault(),L.Z.warn((0,e.f9)(_c||(_c=Sc(["Not calling onClick() for Button link to\n "," because it is disabled"])),d.href||d.to))}),r.createElement(wc,d,o)):r.createElement("button",Object.assign({className:h(),type:u},d),o)}}])&&Tc(n.prototype,o),i&&Tc(n,i),Object.defineProperty(n,"prototype",{writable:!1}),u}(r.Component);Dc.defaultProps={buttonType:"none",disabled:!1,htmlType:"submit",micro:!1,noLink:!1,puffy:!1};var Mc=["className"];function Fc(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}const Uc=function(e){var t=e.className,n=Fc(e,Mc);return r.createElement(ac,Object.assign({},n,{className:Ho()("IconXMark",t),name:"inline-content"}),r.createElement("svg",{className:"IconXMark-svg",version:"1.1",xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink"},r.createElement("g",{className:"IconXMark-path",transform:"translate(-1.000000, -1.000000)",fill:"#0C0C0D"},r.createElement("path",{d:"M1.293,2.707 C1.03304342,2.45592553 0.928787403,2.08412211 1.02030284,1.73449268 C1.11181828,1.38486324 1.38486324,1.11181828 1.73449268,1.02030284 C2.08412211,0.928787403 2.45592553,1.03304342 2.707,1.293 L8,6.586 L13.293,1.293 C13.5440745,1.03304342 13.9158779,0.928787403 14.2655073,1.02030284 C14.6151368,1.11181828 14.8881817,1.38486324 14.9796972,1.73449268 C15.0712126,2.08412211 14.9669566,2.45592553 14.707,2.707 L9.414,8 L14.707,13.293 C15.0859722,13.6853789 15.0805524,14.3090848 14.6948186,14.6948186 C14.3090848,15.0805524 13.6853789,15.0859722 13.293,14.707 L8,9.414 L2.707,14.707 C2.31462111,15.0859722 1.69091522,15.0805524 1.30518142,14.6948186 C0.919447626,14.3090848 0.91402779,13.6853789 1.293,13.293 L6.586,8 L1.293,2.707 Z"}))))};function Bc(e){return(Bc="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Hc(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function qc(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function zc(e,t){return(zc=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Gc(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Vc(e);if(t){var o=Vc(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Wc(this,n)}}function Wc(e,t){if(t&&("object"===Bc(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Vc(e){return(Vc=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Yc="generic",Zc="genericWarning",$c="success",Kc="warningInfo",Qc=["error",Yc,Zc,"firefox",$c,Kc,"warning"],Xc=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&zc(e,t)}(a,e);var t,n,o,i=Gc(a);function a(){var e;Hc(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).onDismissNotice=function(t){e.props.setUIState({wasDismissed:!0}),e.props.onDismiss&&e.props.onDismiss(t)},e}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.actionHref,n=e.actionOnClick,o=e.actionTarget,i=e.actionText,a=e.actionTo,u=e.againstGrey20,c=e.children,s=e.className,l=e.dismissible,f=e.i18n,p=e.light,d=e.type,h=e.uiState;if(ce()(Qc.includes(d),"Unknown type: ".concat(d)),l&&h.wasDismissed)return null;var y,m={href:t||void 0,onClick:n||void 0,to:a||void 0};Object.values(m).some((function(e){return void 0!==e}))&&(ce()(i,"When specifying an action button, actionText is required"),y=r.createElement(Dc,Object.assign({className:"Notice-button",micro:!0,target:o},m),i));var v=Ho()("Notice","Notice-".concat(d),s,{"Notice-againstGrey20":u,"Notice-dismissible":l,"Notice-light":p});return r.createElement("div",{className:v},r.createElement("div",{className:"Notice-icon"}),r.createElement("div",{className:"Notice-column"},r.createElement("div",{className:"Notice-content"},r.createElement("p",{className:"Notice-text"},c),y)),l&&r.createElement("div",{className:"Notice-dismisser"},r.createElement(Dc,{className:"Notice-dismisser-button",onClick:this.onDismissNotice},r.createElement(Uc,{className:"Notice-dismisser-icon",alt:f.gettext("Dismiss this notice")}))))}}])&&qc(t.prototype,n),o&&qc(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const Jc=(0,Mo.qC)(Bu({fileName:"src/amo/components/Notice/index.js",extractId:function(e){return e.dismissible&&ce()(e.id,"When dismissible=true, the id property must be defined"),e.id||""},initialState:{wasDismissed:!1}}),Eu())(Xc);function es(e){return(es="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function ts(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function ns(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function rs(e,t){return(rs=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function os(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=as(e);if(t){var o=as(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return is(this,n)}}function is(e,t){if(t&&("object"===es(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function as(e){return(as=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var us=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&rs(e,t)}(a,e);var t,n,o,i=os(a);function a(){return ts(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e,t,n=this.props,o=n._window,i=n.code,a=n.className,u=n.i18n,c=n.messages,s=[];return c.forEach((function(e){var t=e;"object"===es(t)&&(t=JSON.stringify(t)),D.Jp.includes(i)&&(L.Z.debug("Detected ".concat(i,", replacing API message: ").concat(t)),t=u.gettext("Your session has expired")),s.push(t)})),s.length||(L.Z.debug("No messages were passed to ErrorList, code: ".concat(i)),s.push(u.gettext("An unexpected error occurred"))),D.Jp.includes(i)&&(e=function(){return o.location.reload()},t=u.gettext("Reload To Continue"),s.length>1&&L.Z.warn("The API unexpectedly returned multiple signature expired errors")),r.createElement("ul",{className:Ho()("ErrorList",a)},s.map((function(n,o){return r.createElement("li",{className:"ErrorList-item",key:"erroritem-".concat(o)},r.createElement(Jc,{type:"error",actionOnClick:e,actionText:t},n))})))}}])&&ns(t.prototype,n),o&&ns(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);us.propTypes={_window:w().object,code:w().string,className:w().string,i18n:w().object.isRequired,messages:w().array.isRequired},us.defaultProps={_window:"undefined"!=typeof window?window:{}};const cs=(0,Mo.qC)(Eu())(us);var ss;function ls(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function fs(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ls(Object(n),!0).forEach((function(t){ps(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ls(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function ps(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ds(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function hs(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}var ys=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t.id,r=t.dispatch,o=void 0===r?null:r,i=t.capturedError,a=void 0===i?null:i;ds(this,e),this.id=n,this.dispatch=o,this.capturedError=a}var t,n,o;return t=e,(n=[{key:"captureError",value:function(e){this.capturedError=e}},{key:"clear",value:function(){var e=this.createClearingAction();this.dispatch(e)}},{key:"createClearingAction",value:function(){return function(e){if(!e)throw new Error("id cannot be empty");return{type:D.kl,payload:{id:e}}}(this.id)}},{key:"hasError",value:function(){return Boolean(this.capturedError)}},{key:"renderError",value:function(){var e=this.capturedError,t=e.code,n=e.messages;return r.createElement(cs,{messages:n,code:t})}},{key:"renderErrorIfPresent",value:function(){return this.hasError()?this.renderError():null}},{key:"setDispatch",value:function(e){this.dispatch=e}},{key:"createErrorAction",value:function(e){return function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.error,n=e.id;if(!n)throw new Error("id cannot be empty");if(!t)throw new Error("error cannot be empty");return{type:D.Go,payload:{error:t,id:n}}}({error:e,id:this.id})}},{key:"addMessage",value:function(e){this.dispatchAction(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.message,n=e.id;if(!n)throw new Error("id cannot be empty");if(!t)throw new Error("message cannot be empty");return{type:D.rs,payload:{id:n,message:t}}}({id:this.id,message:e}))}},{key:"handle",value:function(e){var t=this.createErrorAction(e);this.dispatchAction(t)}},{key:"dispatchAction",value:function(e){if(!this.dispatch)throw new Error("A dispatch function has not been configured");this.dispatch(e)}}])&&hs(t.prototype,n),o&&hs(t,o),Object.defineProperty(t,"prototype",{writable:!1}),e}();function ms(t){var n=t.name,r=t.id,o=t.extractId,i=void 0===o?null:o;if(r&&i)throw new Error("You can define either `id` or `extractId` but not both.");if(i&&"function"!=typeof i)throw new Error("`extractId` must be a function taking `ownProps` as unique argument.");return function(t){return(0,Mo.qC)((0,g.connect)((function(){var t;return i||(t=r)||(t=function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).name;return"".concat(void 0===e?"":e,"-").concat(Math.random().toString(36).substr(2,9))}({name:n}),L.Z.debug("Generated error handler ID: ".concat(t))),function(r,o){var a,u;i&&(t="".concat(n,"-").concat(i(o)),L.Z.debug((0,e.f9)(ss||(a=["Generated error handler ID with extractId():\n ",""],u||(u=a.slice(0)),ss=Object.freeze(Object.defineProperties(a,{raw:{value:Object.freeze(u)}}))),t)));var c=o.errorHandler?o.errorHandler.id:t;return{error:r.errors[c],errorId:c}}}),void 0,(function(e,t,n){var r=n.errorHandler||new ys({id:e.errorId});return r.setDispatch(t.dispatch),e.error&&r.captureError(e.error),fs(fs({},n),{},{errorHandler:r})})))(t)}}var vs,gs=function(e){var t=e.fileName,n=e.extractId;if(!t)throw new Error("`fileName` parameter is required.");if("function"!=typeof n)throw new Error("`extractId` is required and must be a function.");return ms({name:Tn(t),extractId:n})};function bs(e){return(bs="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function ws(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Os(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Es(e,t){return(Es=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function _s(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Ss(e);if(t){var o=Ss(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return xs(this,n)}}function xs(e,t){if(t&&("object"===bs(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Ss(e){return(Ss=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var js=function(t){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Es(e,t)}(u,t);var n,o,i,a=_s(u);function u(){return ws(this,u),a.apply(this,arguments)}return n=u,(o=[{key:"render",value:function(){var t,n,o,i,a=this.props,u=a.children,c=a.className,s=a.footer,l=a.footerLink,f=a.footerText,p=a.isHomepageShelf,d=a.header,h=a.photonStyle;if(f&&l||l&&s||f&&s)throw new Error((0,e.f9)(vs||(o=["You can only specify exactly one of these props:\n footer, footerLink or footerText."],i||(i=o.slice(0)),vs=Object.freeze(Object.defineProperties(o,{raw:{value:Object.freeze(i)}})))));return f?(t=f,n="Card-footer-text"):l?(t=l,n="Card-footer-link"):t=s,r.createElement("section",{className:Ho()("Card",c,{"Card--photon":h,"Card--no-header":!d,"Card--no-footer":!t})},d?r.createElement("header",{className:Ho()("Card-header",{"Card-shelf-header":p})},r.createElement("div",{className:"Card-header-text"},d),p&&t?r.createElement("footer",{className:"Card-shelf-footer-in-header"},t):null):null,u?r.createElement("div",{className:"Card-contents"},u):null,t?r.createElement("footer",{className:Ho()("Card-footer",{"Card-shelf-footer":p},n)},t):null)}}])&&Os(n.prototype,o),i&&Os(n,i),Object.defineProperty(n,"prototype",{writable:!1}),u}(r.Component);js.propTypes={children:w().node,className:w().string,footer:w().node,footerLink:w().node,footerText:w().node,header:w().node,isHomepageShelf:w().bool,photonStyle:w().bool},js.defaultProps={isHomepageShelf:!1,photonStyle:!1};var Ps=["children","className"];function ks(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}const Is=function(e){var t=e.children,n=e.className,o=ks(e,Ps);return r.createElement("select",Object.assign({},o,{className:Ho()("Select",n)}),t)};function Ts(e){return(Ts="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Rs(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Cs(e,t){return(Cs=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function As(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Ls(e);if(t){var o=Ls(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Ns(this,n)}}function Ns(e,t){if(t&&("object"===Ts(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Ls(e){return(Ls=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Ds=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Cs(e,t)}(a,e);var t,n,o,i=As(a);function a(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),(t=i.call(this,e)).onSelectOption=function(e){e.preventDefault();var n=e.target.value,r=t.optionSelectHandlers[n];r?r():L.Z.warn('No handler for option: "'.concat(n,'"'))},t.optionSelectHandlers={},t}return t=a,(n=[{key:"componentDidMount",value:function(){this.loadDataIfNeeded()}},{key:"componentDidUpdate",value:function(){this.loadDataIfNeeded()}},{key:"loadDataIfNeeded",value:function(){var e=this.props,t=e.currentUserId,n=e.dispatch,r=e.errorHandler,o=e.loadingUserCollections,i=e.userCollections;r.hasError()||!t||o||i||n(Va({errorHandlerId:r.id,userId:t}))}},{key:"addToCollection",value:function(e){var t=this.props,n=t.addon,r=t.currentUserId,o=t.dispatch,i=t.errorHandler;ce()(n,"Cannot add to collection because no add-on has been loaded"),ce()(r,"Cannot add to collection because you are not signed in"),o(tu({addonId:n.id,collectionId:e.id,slug:e.slug,errorHandlerId:i.id,userId:r}))}},{key:"createOption",value:function(e){var t=e.text,n=e.key,o=e.onSelect;return o&&(this.optionSelectHandlers[n]=o),r.createElement("option",{className:"AddAddonToCollection-option",key:n,value:n},t)}},{key:"getSelectData",value:function(){var e,t=this,n=this.props,r=n.addon,o=n.clientApp,i=n.i18n,a=n.lang,u=n.loadingAddonsInCollections,c=n.loadingUserCollections,s=n.history,l=n.userCollections,f=[],p=[];return c?e=i.gettext("Loading…"):u&&(e=i.gettext("Adding…")),e?(f.push(this.createOption({text:e,key:"default"})),{disabled:!0,actionOptions:f,collectionOptions:p}):(f.push(this.createOption({text:i.gettext("Select a collection…"),key:"default"})),f.push(this.createOption({text:i.gettext("Create new collection"),key:"create-new-collection",onSelect:function(){ce()(r,"addon is required"),s.push("/".concat(a,"/").concat(o,"/collections/add/?include_addon_id=").concat(r.id))}})),l&&l.length&&l.sort((function(e,t){return e.name.localeCompare(t.name)})).forEach((function(e){p.push(t.createOption({text:hu({name:e.name,i18n:i}),key:"collection-".concat(e.id),onSelect:function(){t.addToCollection(e)}}))})),{actionOptions:f,collectionOptions:p,disabled:!1})}},{key:"render",value:function(){var e=this.props,t=e.errorHandler,n=e.i18n,o=e.addonInCollections,i=this.getSelectData(),a=i.actionOptions,u=i.collectionOptions,c=i.disabled,s=[];o&&(s=o.map((function(e){var t=n.sprintf(n.gettext("Added to %(collectionName)s"),{collectionName:hu({name:e.name,i18n:n})});return r.createElement(Jc,{type:"success",key:e.id,className:"AddAddonToCollection-added"},t)})));var l=n.gettext("Add to…");return r.createElement(js,{className:"AddAddonToCollection",header:n.gettext("Add to collection")},t.renderErrorIfPresent(),s,r.createElement(Is,{disabled:c,onChange:this.onSelectOption,className:"AddAddonToCollection-select"},a,u.length?r.createElement("optgroup",{label:l},u):null))}}])&&Rs(t.prototype,n),o&&Rs(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const Ms=(0,Mo.qC)(No,(0,g.connect)((function(e,t){var n,r,o=e.collections,i=e.users,a=Xe(i),u=a&&a.id;if(u){n=o.userCollections[u];var c=t.addon;c&&(r=o.addonInCollections[u]&&o.addonInCollections[u][c.id])}return{addonInCollections:lu(o,r),clientApp:e.api.clientApp,currentUserId:u,lang:e.api.lang,loadingAddonsInCollections:!!r&&r.loading,loadingUserCollections:!!n&&n.loading,userCollections:lu(o,n)}})),Eu(),gs({fileName:"src/amo/components/AddAddonToCollection/index.js",extractId:function(e){var t=e.addon,n=e.currentUserId;return"".concat(t?t.id:"","-").concat(n||"")}}))(Ds);a(35288);var Fs=a(2138),Us=a.n(Fs);function Bs(e){return e?e.icon_url:Us()}var Hs,qs=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.full,r=void 0===n||n;if(!e.previews.length)return null;var o=e.previews.findIndex((function(e){return 720===e.w}));o<0&&(o=0);var i=e.previews[o],a=r?"src":"thumbnail_src";return i[a]||null};var zs=function(t){var n,r,o=t.addon,i=t.installURL,a=t.version,u=i.split("?")[0],c=a.file;if(c&&c.url.startsWith(u))return c.hash;L.Z.warn((0,e.f9)(Hs||(n=['No file hash found for addon "','", installURL\n "','" (as "','")'],r||(r=n.slice(0)),Hs=Object.freeze(Object.defineProperties(n,{raw:{value:Object.freeze(r)}}))),o.slug,i,u))},Gs=function(e){var t=e.addon,n=e.clientApp,r=e.forBadging,o=void 0!==r&&r,i=null;return t&&t.promoted&&t.promoted.apps.includes(n)&&(i=t.promoted.category),o&&(i===D.B6&&(i=D.OO),D.D6.includes(i)||(i=null)),i},Ws=function(e){switch(e){case"experimental":return"experimental-badge"}return e};const Vs=function(e){var t=e.label,n=e.type;if(n&&!["experimental","requires-payment"].includes(n))throw new Error('Invalid badge type given: "'.concat(n,'"'));return r.createElement("div",{className:n?"Badge Badge-".concat(n):"Badge"},n&&r.createElement(ac,{alt:t,name:Ws(n)}),t)};var Ys={recommended:"M15.449999809265137,3.999999523162842 H4.550000190734863 C4.25,3.999999523162842 4,4.219999313354492 4,4.499999523162842 V6.999999523162842 c0,1.100000023841858 0.9800000190734863,2 2.180000066757202,2 h0.05000000074505806 a3.6700000762939453,3.6700000762939453 0 0 0 3.2200000286102295,2.9600000381469727 V13.499999523162842 h1.100000023841858 V11.959999561309814 A3.6700000762939453,3.6700000762939453 0 0 0 13.770000457763672,8.999999523162842 h0.05000000074505806 C15.020000457763672,8.999999523162842 16,8.099998950958252 16,6.999999523162842 V4.499999523162842 c0,-0.2800000011920929 -0.23999999463558197,-0.5 -0.550000011920929,-0.5 zM5.099999904632568,6.999999523162842 V4.999999523162842 h1.100000023841858 v3 c-0.6100000143051147,0 -1.100000023841858,-0.44999998807907104 -1.100000023841858,-1 zm9.819999694824219,0 c0,0.550000011920929 -0.49000000953674316,1 -1.100000023841858,1 V4.999999523162842 h1.100000023841858 v2 zM11.100000381469727,13.999999523162842 H8.899999618530273 c-2.7200000286102295,0 -2.7200000286102295,2 -2.7200000286102295,2 h7.639999866485596 s0,-2 -2.7300000190734863,-2 z",verified:"M6 14a1 1 0 0 1-.707-.293l-3-3a1 1 0 0 1 1.414-1.414l2.157 2.157 6.316-9.023a1 1 0 0 1 1.639 1.146l-7 10a1 1 0 0 1-.732.427A.863.863 0 0 1 6 14z"};const Zs=(0,Mo.qC)(Eu())((function(e){var t=e.category,n=e.className,o=e.i18n,i=e.showAlt,a=void 0!==i&&i,u=e.size,c={line:o.gettext("By Firefox"),recommended:o.gettext("Recommended"),verified:o.gettext("Verified")}[t];return r.createElement(ac,{alt:a&&c?c:void 0,className:Ho()("IconPromotedBadge",n,{"IconPromotedBadge-large":"large"===u,"IconPromotedBadge-small":"small"===u}),name:"line"===t?"line":"inline-content"},"line"!==t&&r.createElement("svg",{className:"IconPromotedBadge-svg",version:"1.1",xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink"},r.createElement("circle",{className:"IconPromotedBadge-circle-bgColor--".concat(t),cx:"50%",cy:"50%",r:"50%"}),r.createElement("g",{fillRule:"nonzero"},r.createElement("path",{className:Ho()("IconPromotedBadge-iconPath","IconPromotedBadge-iconPath--".concat(t)),d:Ys[t]}))))}));const $s=(0,Mo.qC)(Eu())((function(e){var t,n,o=e.category,i=e.i18n,a=e.onClick,u=void 0===a?null:a,c=e.size,s=hn({utm_content:"promoted-addon-badge"});switch(o){case"line":t=i.gettext("By Firefox"),n=i.gettext("Official add-on built by Mozilla Firefox. Meets security and performance standards.");break;case"recommended":t=i.gettext("Recommended"),n=i.gettext("Firefox only recommends add-ons that meet our standards for security and performance.");break;default:t=i.gettext("Verified"),n=i.gettext("This add-on has been reviewed to meet our standards for security and performance.")}return r.createElement("div",{className:Ho()("PromotedBadge","PromotedBadge--".concat(o),{"PromotedBadge-large":"large"===c,"PromotedBadge-small":"small"===c})},r.createElement("a",{className:Ho()("PromotedBadge-link","PromotedBadge-link--".concat(o)),href:s,onClick:u,rel:"noopener noreferrer",target:"_blank",title:n},r.createElement(Zs,{category:o,size:c}),r.createElement("span",{className:Ho()("PromotedBadge-label","PromotedBadge-label--".concat(o))},t)))}));function Ks(e){return(Ks="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Qs(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Xs(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Js(e,t){return(Js=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function el(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=nl(e);if(t){var o=nl(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return tl(this,n)}}function tl(e,t){if(t&&("object"===Ks(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function nl(e){return(nl=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var rl=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Js(e,t)}(a,e);var t,n,o,i=el(a);function a(){return Qs(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e._getPromotedCategory,n=e.addon,o=e.clientApp,i=e.i18n;if(!n)return null;var a=t({addon:n,clientApp:o,forBadging:!0});return r.createElement("div",{className:"AddonBadges"},a?r.createElement($s,{category:a,size:"large"}):null,n.is_experimental?r.createElement(Vs,{type:"experimental",label:i.gettext("Experimental")}):null,n.requires_payment?r.createElement(Vs,{type:"requires-payment",label:i.gettext("Some features may require payment")}):null)}}])&&Xs(t.prototype,n),o&&Xs(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);rl.defaultProps={_getPromotedCategory:Gs};const ol=(0,Mo.qC)((0,g.connect)((function(e){return{clientApp:e.api.clientApp}})),Eu())(rl);var il=a(49394),al=a.n(il);function ul(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function cl(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ul(Object(n),!0).forEach((function(t){sl(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ul(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function sl(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ll(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return fl(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return fl(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,u=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){u=!0,i=e},f:function(){try{a||null==n.return||n.return()}finally{if(u)throw i}}}}function fl(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var pl={byAddonId:{},byAddonSlug:{},byAuthorId:{},countFor:{},lang:"",loadingFor:{}},dl="FETCH_ADDONS_BY_AUTHORS",hl="LOAD_ADDONS_BY_AUTHORS",yl=function(e){var t=e.addonType,n=e.addons,r=e.authorIds,o=e.count,i=e.forAddonSlug,a=e.pageSize;return ce()(n,"A set of add-ons is required."),ce()(r,"A list of authorIds is required."),ce()("number"==typeof o,"count is required."),ce()(a,"pageSize is required."),{type:hl,payload:{addonType:t,addons:n,authorIds:r,count:o,forAddonSlug:i,pageSize:a}}},ml=function(e,t){return e.sort().join("-")+(t?"-".concat(t):"")},vl=function(e,t,n,r){ce()(t&&t.length,"At least one authorId is required.");var o=t.map((function(t){return e.byAuthorId[t]})).reduce((function(e,t){if(t){var n,r=ll(t);try{for(r.s();!(n=r.n()).done;){var o=n.value;e.includes(o)||e.push(o)}}catch(e){r.e(e)}finally{r.f()}}return e}),[]);return o.length?o.map((function(t){return e.byAddonId[t]})).filter((function(e){return!n||e.type===n})).filter((function(e){return e.slug!==r})):null};const gl=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:pl,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case dt:return cl(cl({},e),{},{lang:t.payload.lang});case dl:var n=al()(e),r=t.payload,o=r.addonType,i=r.authorIds,a=r.forAddonSlug;if(a&&(n.byAddonSlug=cl(cl({},n.byAddonSlug),{},sl({},a,void 0))),i.length){var u=vl(n,i,o);if(u){var c,s=ll(u);try{var l=function(){var e=c.value;if(e.authors){var t,r=ll(e.authors);try{for(r.s();!(t=r.n()).done;){var o=t.value;n.byAuthorId[o.id]=n.byAuthorId[o.id].filter((function(t){return t!==e.id}))}}catch(e){r.e(e)}finally{r.f()}}};for(s.s();!(c=s.n()).done;)l()}catch(e){s.e(e)}finally{s.f()}}}var f=ml(i,o);return n.loadingFor[f]=!0,n.countFor[f]=null,n;case hl:var p=al()(e),d=t.payload,h=d.addonType,y=d.addons,m=d.authorIds,v=d.count,g=d.forAddonSlug,b=d.pageSize;g&&(p.byAddonSlug=cl(cl({},p.byAddonSlug),{},sl({},g,y.slice(0,Number(b)).map((function(e){return e.id})))));var w=ml(m,h);p.countFor[w]=v,p.loadingFor[w]=!1;var O,E=y.map((function(t){return ua(t,e.lang)})),_=ll(E);try{for(_.s();!(O=_.n()).done;){var x=O.value;if(p.byAddonId[x.id]=x,x.authors){var S,j=ll(x.authors);try{for(j.s();!(S=j.n()).done;){var P=S.value;p.byAuthorId[P.id]||(p.byAuthorId[P.id]=[]),p.byAuthorId[P.id].includes(x.id)||p.byAuthorId[P.id].push(x.id)}}catch(e){j.e(e)}finally{j.f()}}}}catch(e){_.e(e)}finally{_.f()}return p;default:return e}};function bl(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function wl(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?bl(Object(n),!0).forEach((function(t){Ol(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):bl(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Ol(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var El="ABORT_FETCH_HOME_DATA",_l="FETCH_HOME_DATA",xl="LOAD_HOME_DATA",Sl={homeShelves:null,isLoading:!1,lang:"",resetStateOnNextChange:!1,resultsLoaded:!1,shelves:{}},jl=function(e){var t=e.homeShelves,n=e.shelves;return ce()(n,"shelves are required"),{type:xl,payload:{homeShelves:t,shelves:n}}},Pl=function(e,t){return e.results.map((function(e){return ua(e,t)}))},kl=function(e,t){var n=e.id,r=e.guid,o=e.homepage,i=e.name,a=e.type;return{id:n,guid:r,homepage:aa(o,t),name:Yi(i,t),type:a}},Il=function(e,t){return{url:e.url,outgoing:e.outgoing,text:Yi(e.text,t)}},Tl=function(e,t){var n=e.results,r=e.primary,o=e.secondary,i=n.map((function(e){return function(e,t){var n=e.addons.map((function(e){return ua(e,t)}));return{title:Yi(e.title,t),url:e.url,endpoint:e.endpoint,addonType:e.addon_type,footer:Il(e.footer,t),addons:n}}(e,t)})),a=null;if(null!==o&&(a={headline:Yi(o.headline,t),description:Yi(o.description,t),cta:o.cta?Il(o.cta,t):null,modules:o.modules.map((function(e){return function(e,t){return{icon:e.icon,description:Yi(e.description,t),cta:e.cta?Il(e.cta,t):null}}(e,t)}))}),null===r)return{results:i,primary:null,secondary:a};ce()(r.addon||r.external,"Either primary.addon or primary.external is required");var u={gradient:r.gradient,featuredImage:r.featured_image,description:Yi(r.description,t)};return r.addon?{results:i,primary:wl(wl({},u),{},{addon:ua(r.addon,t),external:void 0}),secondary:a}:{results:i,primary:wl(wl({},u),{},{addon:void 0,external:kl(r.external,t)}),secondary:a}};const Rl=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Sl,n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.Z;switch(n.type){case dt:return wl(wl({},e),{},{lang:n.payload.lang});case pt:return wl(wl({},Sl),{},{lang:e.lang});case El:return wl(wl({},e),{},{isLoading:!1});case _l:return wl(wl({},e),{},{isLoading:!0,resultsLoaded:!1});case xl:var o=n.payload,a=o.homeShelves,u=o.shelves;return wl(wl({},e),{},{homeShelves:a?Tl(a,e.lang):null,isLoading:!1,resultsLoaded:!0,shelves:Object.keys(u).reduce((function(t,n){var r=u[n];return wl(wl({},t),{},Ol({},n,r?Pl(r,e.lang):[]))}),{})});case i.nk:return r.get("server")?e:e.resetStateOnNextChange?wl(wl({},Sl),{},{lang:e.lang}):wl(wl({},e),{},{resetStateOnNextChange:!0});default:return e}};function Cl(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Al(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Cl(Object(n),!0).forEach((function(t){Nl(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Cl(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Nl(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Ll="GET_LANDING",Dl="LOAD_LANDING",Ml={addonType:null,category:null,recommended:{count:0,results:[]},highlyRated:{count:0,results:[]},lang:"",loading:!1,trending:{count:0,results:[]},resultsLoaded:!1};function Fl(e){var t=e.addonType,n=e.recommended,r=e.highlyRated,o=e.trending;return ce()(t,"addonType is required"),ce()(n,"recommended is required"),ce()(r,"highlyRated is required"),ce()(o,"trending is required"),{type:Dl,payload:{addonType:t,recommended:n,highlyRated:r,trending:o}}}function Ul(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Bl(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ul(Object(n),!0).forEach((function(t){Hl(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ul(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Hl(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var ql="ABORT_FETCH_RECOMMENDATIONS",zl="FETCH_RECOMMENDATIONS",Gl="LOAD_RECOMMENDATIONS",Wl={byGuid:{},lang:""},Vl=function(e){var t=e.guid;return ce()(t,"guid is required"),{type:ql,payload:{guid:t}}},Yl=function(e){var t=e.addons,n=e.fallbackReason,r=e.guid,o=e.outcome;return ce()(t,"addons is required"),ce()(r,"guid is required"),ce()(o,"outcome is required"),{type:Gl,payload:{addons:t,guid:r,outcome:o,fallbackReason:n}}};const Zl=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Wl,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case dt:return Bl(Bl({},e),{},{lang:t.payload.lang});case ql:return Bl(Bl({},e),{},{byGuid:Bl(Bl({},e.byGuid),{},Hl({},t.payload.guid,{addons:null,fallbackReason:null,loading:!1,outcome:null}))});case zl:return Bl(Bl({},e),{},{byGuid:Bl(Bl({},e.byGuid),{},Hl({},t.payload.guid,{addons:null,fallbackReason:null,loading:!0,outcome:null}))});case Gl:var n=t.payload,r=n.fallbackReason,o=n.guid,i=n.outcome,a=t.payload.addons.map((function(t){return ua(t,e.lang)}));return Bl(Bl({},e),{},{byGuid:Bl(Bl({},e.byGuid),{},Hl({},o,{addons:a,fallbackReason:r,loading:!1,outcome:i}))});default:return e}};function $l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Kl(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?$l(Object(n),!0).forEach((function(t){Ql(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):$l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Ql(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Xl="SEARCH_STARTED",Jl="SEARCH_LOADED",ef="SEARCH_ABORTED",tf={count:0,filters:null,lang:"",loading:!1,pageSize:null,results:[]};function nf(e){var t=e.errorHandlerId,n=e.filters;return ce()(t,"errorHandlerId is required"),ce()(n,"filters are required"),{type:Xl,payload:{errorHandlerId:t,filters:n}}}function rf(e){var t=e.count,n=e.pageSize,r=e.results;return ce()(r,"results are required"),{type:Jl,payload:{count:t,pageSize:n,results:r}}}function of(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return af(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return af(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,u=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){u=!0,i=e},f:function(){try{a||null==n.return||n.return()}finally{if(u)throw i}}}}function af(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function uf(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function cf(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?uf(Object(n),!0).forEach((function(t){sf(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):uf(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function sf(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var lf="FETCH_VERSION",ff="FETCH_VERSIONS",pf="LOAD_VERSIONS",df={byId:{},bySlug:{},lang:""},hf=function(e,t){var n=cf({},e.compatibility),r=n[D.So];return r&&"91.1.0"===r.min&&(n[D.So].min="91.0.0"),{compatibility:n,id:e.id,isStrictCompatibilityEnabled:Boolean(e.is_strict_compatibility_enabled),license:e.license?{isCustom:e.license.is_custom,name:Yi(e.license.name,t),text:void 0===e.license.text?void 0:Yi(e.license.text,t),url:e.license.url}:null,file:e.file,releaseNotes:Yi(e.release_notes,t),version:e.version}},yf=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.slug,n=e.versions;return ce()(t,"slug is required"),ce()(n,"versions is required"),{type:pf,payload:{slug:t,versions:n}}},mf=function(e){var t=e.id,n=e.state;return ce()(t,"id is required"),ce()(n,"state is required"),n.byId[t]||null},vf=function(e){var t=e.slug,n=e.state;ce()(t,"slug is required"),ce()(n,"state is required");var r=n.bySlug[t];return r&&r.versionIds?r.versionIds.map((function(e){var r=mf({id:e,state:n});return ce()(r,"missing version for slug ".concat(t," and versionId ").concat(e)),r})):null},gf=function(e){var t=e.slug,n=e.state;ce()(t,"slug is required"),ce()(n,"state is required");var r=n.bySlug[t];return Boolean(r&&r.loading)},bf=function(e){var t=e.i18n,n=e.state,r=e.versionId,o=mf({id:r,state:n});if(o){var i=o.file,a=t.gettext("%(application)s %(minVersion)s and later"),u=t.gettext("%(application)s %(minVersion)s to %(maxVersion)s"),c=Object.keys(o.compatibility).map((function(e){var n=o.compatibility[e],r=n.max,i=n.min;return"*"===r?t.sprintf(a,{application:e,minVersion:i}):t.sprintf(u,{application:e,maxVersion:r,minVersion:i})})).join(", ");return{compatibilityString:t.sprintf(t.gettext("Works with %(listOfApplicatonsAndVersions)s"),{listOfApplicatonsAndVersions:c}),created:i?i.created:null,filesize:i?ne({i18n:t,size:i.size}):null}}return null};const wf=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:df,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case dt:return cf(cf({},e),{},{lang:t.payload.lang});case lf:case ff:var n=t.payload.slug;return cf(cf({},e),{},{bySlug:cf(cf({},e.bySlug),{},sf({},n,{versionIds:null,loading:!0}))});case pf:var r,o=t.payload,i=o.slug,a=o.versions,u={},c=of(a);try{for(c.s();!(r=c.n()).done;){var s=r.value;u[s.id]=hf(s,e.lang)}}catch(e){c.e(e)}finally{c.f()}return cf(cf({},e),{},{byId:cf(cf({},e.byId),u),bySlug:cf(cf({},e.bySlug),{},sf({},i,{versionIds:a.map((function(e){return e.id})),loading:!1}))});case ea:t.payload.addons=[t.payload.addon];case hl:case Ca:case xa:case ja:case Gl:case Jl:var l,f=t.payload,p=f.addons,d=f.addonsResponse,h=f.results,y={},m=of(h||(d?d.results:p.results||p));try{for(m.s();!(l=m.n()).done;){var v=l.value,g=v.addon||v;if(g.current_version){var b=g.current_version,w=hf(b,e.lang);if(!b.license||!b.release_notes){var O=mf({id:b.id,state:e});O&&(w.license=w.license||O.license,w.releaseNotes=w.releaseNotes||O.releaseNotes)}y[w.id]=w}}}catch(e){m.e(e)}finally{m.f()}return cf(cf({},e),{},{byId:cf(cf({},e.byId),y)});case xl:var E=t.payload,_=E.homeShelves,x=E.shelves,S={},j=function(t){if(t.current_version){var n=t.current_version,r=hf(n,e.lang),o=n.id,i=mf({id:o,state:e});i&&(r=cf(cf({},r),{},{license:i.license,releaseNotes:i.releaseNotes})),S[o]=r}};if(_&&_.results){var P,k=of(_.results);try{for(k.s();!(P=k.n()).done;){var I,T=P.value,R=of(T.addons);try{for(R.s();!(I=R.n()).done;){var C=I.value;j(C)}}catch(e){R.e(e)}finally{R.f()}}}catch(e){k.e(e)}finally{k.f()}}for(var A=0,N=Object.keys(x);A<N.length;A++){var L=N[A];if(x[L]){var D,M=of(x[L].results);try{for(M.s();!(D=M.n()).done;){var F=D.value;j(F)}}catch(e){M.e(e)}finally{M.f()}}}return cf(cf({},e),{},{byId:cf(cf({},e.byId),S)});case Dl:for(var U=t.payload,B=U.recommended,H=U.highlyRated,q=U.trending,z={},G=0,W=[B,H,q];G<W.length;G++){var V,Y=W[G],Z=of(Y.results);try{for(Z.s();!(V=Z.n()).done;){var $=V.value;if($.current_version){var K=hf($.current_version,e.lang);z[K.id]=K}}}catch(e){Z.e(e)}finally{Z.f()}}return cf(cf({},e),{},{byId:cf(cf({},e.byId),z)});default:return e}};var Of,Ef,_f,xf=a(96521);function Sf(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function jf(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t._log,r=void 0===n?L.Z:n,o=t.addon,i=t.clientApp,a=t.currentVersion,u=null,c=null,s=!1;if(a){var l=a.compatibility[i];l&&(s=!0,u=l.max,c=l.min),s||r.warn((0,e.f9)(Of||(Of=Sf(['addon guid: "','" is incompatible with\n clientApp: "','"'])),o.guid,i))}return{supportsClientApp:s,maxVersion:u,minVersion:c}}var Pf=function(e){var t=e.userAgentInfo;return ce()(t,"userAgentInfo is required"),"Firefox"===t.browser.name},kf=function(e){return ce()(e,"userAgentInfo is required"),Pf({userAgentInfo:e})&&e.os.name===vt},If=function(e){return ce()(e,"userAgentInfo is required"),Pf({userAgentInfo:e})&&e.os.name===gt},Tf=function(e){var t=e.addon;return!!t&&t.type===D.Gz&&Gs({addon:t,clientApp:D.wZ})===D.g$};function Rf(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t._log,r=void 0===n?L.Z:n,o=t.addon,i=t.currentVersion,a=t.maxVersion,u=t.minVersion,c=t.userAgentInfo;ce()(c,"userAgentInfo is required");var s=c.browser;if(If(c))return{compatible:!1,reason:D.Px};if(!Pf({userAgentInfo:c}))return{compatible:!1,reason:D.T3};if(kf(c)&&(!Tf({addon:o})||i&&!i.compatibility[D.wZ]))return{compatible:!1,reason:D.op};if(!i||!i.file)return{compatible:!1,reason:D.YE};if(a&&1===(0,xf.mozCompare)(s.version,a)){if(i.isStrictCompatibilityEnabled)return{compatible:!1,reason:D.CK};r.info((0,e.f9)(Ef||(Ef=Sf(["maxVersion "," for add-on lower than\n browser version ",", but add-on still marked as\n compatible because we largely ignore maxVersion. See:\n https://github.com/mozilla/addons-frontend/issues/2074"])),a,s.version))}return u&&-1===(0,xf.mozCompare)(s.version,u)?("*"===u&&r.error((0,e.f9)(_f||(_f=Sf(['minVersion of "*" was passed to\n isCompatibleWithUserAgent(); bad add-on version data (browserVersion:\n ',")"])),s.version)),{compatible:!1,reason:D.VD}):{compatible:!0,reason:null}}function Cf(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.addon,n=e.clientApp,r=e.currentVersion,o=e.userAgentInfo,i=e._window,a=void 0===i?"undefined"!=typeof window?window:{}:i,u=jf({addon:t,clientApp:n,currentVersion:r}),c=u.supportsClientApp,s=u.maxVersion,l=u.minVersion,f=Rf({addon:t,currentVersion:r,maxVersion:s,minVersion:l,userAgentInfo:o,_window:a}),p=f.reason;return c||p||(p=D.YE),{compatible:f.compatible&&c,maxVersion:s,minVersion:l,reason:p}}var Af=function(e){return"/".concat(e,"/").concat(D.wZ,"/")},Nf=function(e){var t=e.clientApp,n=e.isHomePage,r=void 0!==n&&n,o=e.lang,i=e.location,a=e.userAgentInfo;ce()(a,"userAgentInfo is required");var u=a.browser,c=a.os;return If(a)||!Pf({userAgentInfo:a})?null:kf(a)&&t===D.So||kf(a)&&!r&&!i.pathname.includes("/search/")?Af(o):c.name!==vt&&"Firefox"===u.name&&t===D.wZ?"".concat(i.pathname.replace(D.wZ,D.So)).concat(i.search):null};function Lf(e){return(Lf="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Df(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Mf(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Ff(e,t){return(Ff=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Uf(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Hf(e);if(t){var o=Hf(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Bf(this,n)}}function Bf(e,t){if(t&&("object"===Lf(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Hf(e){return(Hf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var qf=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Ff(e,t)}(a,e);var t,n,o,i=Uf(a);function a(){return Df(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e._getClientCompatibility,n=e.addon,o=e.clientApp,i=e.currentVersion,a=e.i18n,u=e.userAgentInfo;if(!n)return null;var c=t({addon:n,clientApp:o,currentVersion:i,userAgentInfo:u});if(c.compatible)return null;var s=c.reason;if(ce()(s,"reason is required"),![D.CK,D.YE].includes(s))return null;var l=s===D.CK?a.gettext("This add-on is not compatible with your\n version of Firefox."):a.gettext("This add-on is not available on your platform.");return r.createElement(Jc,{type:"error",className:"AddonCompatibilityError"},r.createElement("span",{className:"AddonCompatibilityError-message",dangerouslySetInnerHTML:vn(l,["a"])}))}}])&&Mf(t.prototype,n),o&&Mf(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);qf.defaultProps={_getClientCompatibility:Cf};const zf=(0,Mo.qC)((0,g.connect)((function(e,t){var n=t.addon,r=null;return n&&n.currentVersionId&&(r=mf({id:n.currentVersionId,state:e.versions})),{clientApp:e.api.clientApp,currentVersion:r,userAgentInfo:e.api.userAgentInfo}})),Eu())(qf);var Gf=a(10017),Wf=a.n(Gf);function Vf(e){return(Vf="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Yf(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Zf(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function $f(e,t){return($f=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Kf(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Xf(e);if(t){var o=Xf(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Qf(this,n)}}function Qf(e,t){if(t&&("object"===Vf(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Xf(e){return(Xf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Jf=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&$f(e,t)}(a,e);var t,n,o,i=Kf(a);function a(){return Yf(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e._config,n=e._hrefLangs,o=e.currentURL,i=e.lang,a=e.locationPathname,u=e.queryString,c=a.split("/").slice(2).join("/"),s="/".concat(i,"/").concat(c).concat(u||""),l=t.get("hrefLangsMap"),f=!1===t.get("unsupportedHrefLangs").includes(i)&&s===o;return r.createElement(Ao,null,r.createElement("link",{rel:"canonical",href:pn({_config:t,locationPathname:s})}),f&&n.map((function(e){var n=l[e]||e,o="/".concat(n,"/").concat(c);return r.createElement("link",{href:pn({_config:t,locationPathname:"".concat(o).concat(u||"")}),hrefLang:e,key:e,rel:"alternate"})})))}}])&&Zf(t.prototype,n),o&&Zf(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.PureComponent);Jf.defaultProps={_config:t.Z,_hrefLangs:Ee};const ep=(0,Mo.qC)((0,g.connect)((function(e){var t=e.api.lang,n=e.router.location,r=n.pathname,o=n.search;return{currentURL:"".concat(r).concat(o),lang:t,locationPathname:r}})))(Jf);var tp=a(19704),np=a.n(tp);function rp(e){return(rp="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function op(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function ip(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?op(Object(n),!0).forEach((function(t){ap(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):op(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function ap(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function up(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function cp(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function sp(e,t){return(sp=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function lp(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=pp(e);if(t){var o=pp(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return fp(this,n)}}function fp(e,t){if(t&&("object"===rp(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function pp(e){return(pp=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var dp=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&sp(e,t)}(a,e);var t,n,o,i=lp(a);function a(){return up(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"getImage",value:function(){var e=this.props.image;return e||np()}},{key:"getTitle",value:function(){var e,t=this.props,n=t.clientApp,r=t.i18n,o=t.lang,i=t.title,a=t.appendDefaultTitle,u={locale:o};if(i){if(!a)return i;e=n===D.wZ?r.gettext("%(title)s – Add-ons for Firefox Android (%(locale)s)"):r.gettext("%(title)s – Add-ons for Firefox (%(locale)s)"),u=ip(ip({},u),{},{title:i})}else e=n===D.wZ?r.gettext("Add-ons for Firefox Android (%(locale)s)"):r.gettext("Add-ons for Firefox (%(locale)s)");return r.sprintf(e,u)}},{key:"renderOpenGraph",value:function(){var e=this.props,t=e._config,n=e.description,o=e.lang,i=e.locationPathname,a=e.queryString,u="".concat(pn({_config:t,locationPathname:i})).concat(a||""),c=[r.createElement("meta",{key:"og:type",property:"og:type",content:"website"}),r.createElement("meta",{key:"og:url",property:"og:url",content:u}),r.createElement("meta",{key:"og:title",property:"og:title",content:this.getTitle()}),r.createElement("meta",{key:"og:locale",property:"og:locale",content:o}),r.createElement("meta",{key:"og:image",property:"og:image",content:this.getImage()})];return n&&c.push(r.createElement("meta",{key:"og:description",property:"og:description",content:n})),c}},{key:"renderTwitter",value:function(){return this.props.withTwitterMeta?[r.createElement("meta",{key:"twitter:site",name:"twitter:site",content:"@mozamo"}),r.createElement("meta",{key:"twitter:card",name:"twitter:card",content:"summary_large_image"})]:null}},{key:"render",value:function(){var e=this.props,t=e.date,n=e.description,o=e.lastModified;return r.createElement(Ao,null,n&&r.createElement("meta",{name:"description",content:n}),t&&r.createElement("meta",{name:"date",content:t}),o&&r.createElement("meta",{name:"last-modified",content:o}),this.renderOpenGraph(),this.renderTwitter())}}])&&cp(t.prototype,n),o&&cp(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.PureComponent);dp.defaultProps={_config:t.Z,appendDefaultTitle:!0,withTwitterMeta:!1};const hp=(0,Mo.qC)((0,g.connect)((function(e){var t=e.api;return{clientApp:t.clientApp,lang:t.lang,locationPathname:e.router.location.pathname}})),Eu())(dp);function yp(e){return(yp="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function mp(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function vp(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function gp(e,t){return(gp=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function bp(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Op(e);if(t){var o=Op(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return wp(this,n)}}function wp(e,t){if(t&&("object"===yp(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Op(e){return(Op=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Ep=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&gp(e,t)}(a,e);var t,n,o,i=bp(a);function a(){return mp(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"getPageTitle",value:function(){var e=this.props,t=e.addon,n=e.clientApp,r=e.i18n,o=e.lang;ce()(t,"addon is required");var i,a={addonName:t.name,locale:o};if(n===D.wZ)switch(t.type){case D.jV:i=r.gettext("%(addonName)s – Get this Dictionary\n for 🦊 Firefox Android (%(locale)s)");break;case D.Gz:i=r.gettext("%(addonName)s – Get this Extension for\n 🦊 Firefox Android (%(locale)s)");break;case D.d$:i=r.gettext("%(addonName)s – Get this Language Pack\n for 🦊 Firefox Android (%(locale)s)");break;case D.Yd:i=r.gettext("%(addonName)s – Get this Theme for 🦊 Firefox Android (%(locale)s)");break;default:i=r.gettext("%(addonName)s – Get this Add-on for 🦊\n Firefox Android (%(locale)s)")}else switch(t.type){case D.jV:i=r.gettext("%(addonName)s – Get this Dictionary\n for 🦊 Firefox (%(locale)s)");break;case D.Gz:i=r.gettext("%(addonName)s – Get this Extension for\n 🦊 Firefox (%(locale)s)");break;case D.d$:i=r.gettext("%(addonName)s – Get this Language Pack\n for 🦊 Firefox (%(locale)s)");break;case D.Yd:i=r.gettext("%(addonName)s – Get this Theme for 🦊\n Firefox (%(locale)s)");break;default:i=r.gettext("%(addonName)s – Get this Add-on for 🦊\n Firefox (%(locale)s)")}return r.sprintf(i,a)}},{key:"getPageDescription",value:function(){var e=this.props,t=e.addon,n=e.i18n;return ce()(t,"addon is required"),n.sprintf(n.gettext("Download %(addonName)s for Firefox. %(summary)s"),{addonName:t.name,summary:t.summary})}},{key:"render",value:function(){var e=this.props,t=e._getAddonJsonLinkedData,n=e.addon,o=e.currentVersion,i=e.versionInfo;if(ce()(t,"_getAddonJsonLinkedData is required."),!n)return null;var a=i&&i.created;return r.createElement(r.Fragment,null,r.createElement(Ao,{titleTemplate:null},r.createElement("title",null,this.getPageTitle()),r.createElement("script",{type:"application/ld+json"},Wf()(t({addon:n,currentVersion:o}),{isJSON:!0}))),r.createElement(hp,{appendDefaultTitle:!1,date:n.created,description:this.getPageDescription(),image:qs(n),lastModified:a,title:this.getPageTitle(),withTwitterMeta:n.type===D.Gz}),r.createElement(ep,null))}}])&&vp(t.prototype,n),o&&vp(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);Ep.defaultProps={_getAddonJsonLinkedData:function(e){var t,n=e.addon,r=e.currentVersion,o=e.ratingThreshold,i=void 0===o?3.3:o,a=n.ratings;return a&&a.count>0&&a.average>=i&&(t={"@type":"AggregateRating",ratingCount:a.count,ratingValue:a.average}),Ft({"@context":"http://schema.org","@type":"WebApplication",name:n.name,url:n.url,image:qs(n),applicationCategory:"http://schema.org/OtherApplication",operatingSystem:"Firefox",description:n.summary,offers:{"@type":"Offer",availability:"http://schema.org/InStock",price:0,priceCurrency:"USD"},version:r?r.version:void 0,aggregateRating:t})}};const _p=(0,Mo.qC)(Eu(),(0,g.connect)((function(e,t){var n=t.addon,r=t.i18n,o=e.api,i=o.clientApp,a=o.lang,u=null,c=null;return n&&n.currentVersionId&&(u=mf({id:n.currentVersionId,state:e.versions})),u&&(c=bf({i18n:r,state:e.versions,versionId:u.id})),{clientApp:i,currentVersion:u,lang:a,versionInfo:c}})))(Ep);const xp=Eu()((function(e){var t=e.error,n=e.i18n;return t?r.createElement(Jc,{className:"AddonInstallError",type:"error"},function(e){var t=e.i18n,n=e.error;switch(ce()(t,"i18n is required"),n){case D._y:return t.gettext("Installation aborted because the add-on appears to be corrupt.");case D.DE:return t.gettext("Installation failed. Please try again.");case D.Vg:return t.gettext("Download failed. Please check your connection.");case D.pl:return t.gettext("An unexpected error occurred during installation.");case D.hY:return t.gettext("An unexpected error occurred during uninstallation.");case D.F6:default:return t.gettext("An unexpected error occurred.")}}({i18n:n,error:t})):null}));var Sp;function jp(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function Pp(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function kp(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Pp(Object(n),!0).forEach((function(t){Ip(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Pp(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Ip(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Tp(e){var t=e.addonSlug,n=e.id,r=e.location,o=e.score;ce()(t,"addonSlug is required");var i="/addon/".concat(t,"/reviews/").concat(n?"".concat(n,"/"):""),a=o?{score:String(o)}:{};return r&&(a=kp(kp({},a),Bt(r))),Ut(i,a)}var Rp={permissions:{},byAddon:{},byId:{},byUserId:{},latestUserReview:{},view:{},flashMessage:void 0,loadingForSlug:{}};var Cp=function(e,t){return e.byId[t]};function Ap(e){var t=e.addonId,n=e.userId;return"".concat(t,"-").concat(n)}var Np=function(e){var t=e.state;return e.reviews.map((function(e){var n=Cp(t,e);if(!n)throw new Error("No stored review exists for ID ".concat(e));return n}))},Lp=function(e){var t=e.state,n=e.reviews,r=kp({},t.byId);return n.forEach((function(e){if(!e.id)throw new Error("Cannot store review because review.id is falsy");r[e.id]=e})),r},Dp=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.state,n=e.reviewId,r=e.stateChange,o=kp({},r),i=t.view[n]?t.view[n].flag:{};return kp(kp({},t),{},{view:kp(kp({},t.view),{},Ip({},n,kp(kp(kp({beginningToDeleteReview:!1,deletingReview:!1,editingReview:!1,loadingReview:!1,replyingToReview:!1,submittingReply:!1},t.view[n]),o),{},{flag:kp(kp({},i),o.flag)})))})},Mp=function(e){var t=e.userId,n=e.addonId;return"user-".concat(t,"/addon-").concat(n)},Fp=function(e){var t=e.state,n=e.review,r=Cp(t,n.id),o=Boolean(r),i=o;r&&!r.body&&n.body&&(i=!1);var a=o?t.byUserId:kp(kp({},t.byUserId),{},Ip({},n.userId,void 0)),u=i?t.byAddon:kp(kp({},t.byAddon),{},Ip({},n.reviewAddon.slug,void 0));return kp(kp({},t),{},{byId:Lp({state:t,reviews:[n]}),byUserId:a,byAddon:u})},Up=function(e,t){return Boolean(e.reviews.loadingForSlug[t])};function Bp(e){return(Bp="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Hp(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function qp(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function zp(e,t){return(zp=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Gp(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Vp(e);if(t){var o=Vp(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Wp(this,n)}}function Wp(e,t){if(t&&("object"===Bp(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Vp(e){return(Vp=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Yp=[20,40,60,80,100],Zp=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&zp(e,t)}(a,e);var t,n,o,i=Gp(a);function a(){return Hp(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.className,n=e.minWidth,o=e.width,i=Math.floor(3*Math.random())+1,a=o;if(void 0===a||!Yp.includes(a)){var u=Yp.filter((function(e){return e>=n}));a=u[Math.floor(Math.random()*u.length)]}return r.createElement("span",{className:Ho()("LoadingText","LoadingText--delay-".concat(i),"LoadingText--width-".concat(a),t),role:"alert","aria-busy":"true"})}}])&&qp(t.prototype,n),o&&qp(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);Zp.defaultProps={minWidth:20};const $p=function(e){var t=e.className,n=e.metadata;return ce()(n,"The metadata property is required"),r.createElement("div",{className:Ho()("MetadataCard",t)},n.map((function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.content,n=e.title,o=arguments.length>1?arguments[1]:void 0;if(void 0===t)throw new Error("content is required");if(void 0===n)throw new Error("title is required");var i=t||""===t||0===t;return r.createElement("dl",{className:"MetadataCard-list",key:o},r.createElement("dd",{className:"MetadataCard-content"},i?t:r.createElement(Zp,null)),r.createElement("dt",{className:"MetadataCard-title"},n))})))};var Kp;a(70849);function Qp(e){return(Qp="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Xp(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Jp(e,t){return(Jp=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function ed(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=nd(e);if(t){var o=nd(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return td(this,n)}}function td(e,t){if(t&&("object"===Qp(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function nd(e){return(nd=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var rd=Object.keys({small:"",large:""}),od=function(t){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Jp(e,t)}(u,t);var n,o,i,a=ed(u);function u(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,u),(t=a.call(this,e)).onSelectRating=function(e){var n=t.props.onSelectRating;ce()(n,"onSelectRating was empty. Did you mean to set readOnly=true?"),e.preventDefault(),e.stopPropagation();var r=e.currentTarget,o=parseInt(r.value,10);L.Z.debug("Selected rating from form button: ".concat(o)),n(o)},t.renderTitle=function(e,n,r){var o=t.props.i18n;return n?e?o.sprintf(o.gettext("Rated %(rating)s out of 5"),{rating:o.formatNumber(parseFloat(e).toFixed(1))}):o.gettext("There are no ratings yet"):(ce()(r,"starRating is required when readOnly=false"),e?r===e?o.sprintf(o.gettext("Rated %(rating)s out of 5"),{rating:o.formatNumber(parseFloat(e).toFixed(1))}):o.sprintf(o.gettext("Update your rating to %(starRating)s out of 5"),{starRating:r}):o.sprintf(o.gettext("Rate this add-on %(starRating)s out of 5"),{starRating:r}))},t.onHoverStar=function(e){t.props.readOnly||t._setState({hoveringOverStar:e})},t.stopHovering=function(){t.props.readOnly||t._setState({hoveringOverStar:null})},t.state={hoveringOverStar:null},t}return n=u,(o=[{key:"_setState",value:function(e){return(this.props._setState||this.setState.bind(this))(e)}},{key:"renderRatings",value:function(){var e=this,t=this.props.readOnly,n=this.state.hoveringOverStar,o=this.props.rating||0;return[1,2,3,4,5].map((function(i){var a=i-o<=.25;null!==n&&(a=i<=n);var u=e.renderTitle(o,t,i),c=i-o>.25&&i-o<=.75,s={className:Ho()("Rating-star","Rating-rating-".concat(i),{"Rating-selected-star":a,"Rating-half-star":c}),key:"rating-".concat(i),onClick:void 0,onMouseEnter:function(){return e.onHoverStar(i)},title:u};if(t)return r.createElement("div",s);e.isLoading()||(s.onClick=e.onSelectRating);var l="Rating-rating-".concat(i,"-title");return r.createElement(r.Fragment,null,r.createElement("button",Object.assign({"aria-describedby":l,type:"button",value:i},s),r.createElement("span",{id:l,className:"visually-hidden"},u)))}))}},{key:"isLoading",value:function(){return void 0===this.props.rating}},{key:"render",value:function(){var t,n,o=this.props,i=o.className,a=o.rating,u=o.readOnly,c=o.styleSize,s=o.yellowStars;if(!c||!rd.includes(c))throw new Error((0,e.f9)(Kp||(t=["styleSize="," is not a valid\n value; possible values: ",""],n||(n=t.slice(0)),Kp=Object.freeze(Object.defineProperties(t,{raw:{value:Object.freeze(n)}}))),c||"[empty string]",rd.join(", ")));var l=u?this.renderTitle(a,u,null):null,f=Ho()("Rating","Rating--".concat(c),i,{"Rating--editable":!u,"Rating--loading":this.isLoading(),"Rating--yellowStars":s}),p={};return this.isLoading()&&(p.role="alert",p["aria-busy"]="true"),r.createElement("div",Object.assign({className:f,title:l,onMouseLeave:this.stopHovering},p),this.renderRatings(),r.createElement("span",{className:"visually-hidden"},l))}}])&&Xp(n.prototype,o),i&&Xp(n,i),Object.defineProperty(n,"prototype",{writable:!1}),u}(r.Component);od.defaultProps={className:"",readOnly:!1,styleSize:"large",yellowStars:!1};const id=(0,Mo.qC)(Eu())(od);function ad(e){return(ad="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function ud(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function cd(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function sd(e,t){return(sd=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function ld(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=pd(e);if(t){var o=pd(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return fd(this,n)}}function fd(e,t){if(t&&("object"===ad(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function pd(e){return(pd=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var dd=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&sd(e,t)}(a,e);var t,n,o,i=ld(a);function a(){return ud(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"renderBarValue",value:function(e){var t=this.props.addon;ce()(t,"addon is required");var n=0;return t.ratings&&t.ratings.count>0&&(n=Math.round(e/t.ratings.count*100)),r.createElement("div",{className:Ho()("RatingsByStar-bar","RatingsByStar-barValue","RatingsByStar-barValue--".concat(n,"pct"),{"RatingsByStar-partialBar":n<100})})}},{key:"render",value:function(){var e=this,t=this.props,n=t.addon,o=t.i18n,i=t.location,a=!n,u=function(e,t){switch(e){case"5":return t&&t>0?o.sprintf(o.ngettext("Read the 1 five-star review","Read all %(total)s five-star reviews",t),{total:o.formatNumber(t||0)}):o.gettext("There are no five-star reviews");case"4":return t&&t>0?o.sprintf(o.ngettext("Read the 1 four-star review","Read all %(total)s four-star reviews",t),{total:o.formatNumber(t||0)}):o.gettext("There are no four-star reviews");case"3":return t&&t>0?o.sprintf(o.ngettext("Read the 1 three-star review","Read all %(total)s three-star reviews",t),{total:o.formatNumber(t||0)}):o.gettext("There are no three-star reviews");case"2":return t&&t>0?o.sprintf(o.ngettext("Read the 1 two-star review","Read all %(total)s two-star reviews",t),{total:o.formatNumber(t||0)}):o.gettext("There are no two-star reviews");case"1":return t&&t>0?o.sprintf(o.ngettext("Read the 1 one-star review","Read all %(total)s one-star reviews",t),{total:o.formatNumber(t||0)}):o.gettext("There are no one-star reviews");default:return o.gettext("There are no reviews")}};return r.createElement("div",{className:"RatingsByStar"},r.createElement("div",{className:"RatingsByStar-graph"},["5","4","3","2","1"].map((function(t){var c;n&&n.ratings&&(c=n.ratings.grouped_counts[t]);var s,l=r.createElement("div",{key:t,className:"RatingsByStar-row"},r.createElement("div",{className:"RatingsByStar-star"},r.createElement(Zp,{width:100}),r.createElement(ac,{name:"star-yellow"})),r.createElement("div",{className:"RatingsByStar-barContainer"},r.createElement("div",{className:"RatingsByStar-bar RatingsByStar-barFrame"})),r.createElement("div",{className:"RatingsByStar-count"},r.createElement(Zp,{width:100}))),f=r.createElement(r.Fragment,null,r.createElement("div",{className:"RatingsByStar-star"},o.formatNumber(t),r.createElement(ac,{name:"star-yellow"})),r.createElement("div",{className:"RatingsByStar-barContainer"},r.createElement("div",{className:"RatingsByStar-bar RatingsByStar-barFrame"},void 0!==c?e.renderBarValue(c):null)),r.createElement("div",{className:"RatingsByStar-count"},o.formatNumber(c||0)));return a?l:(s=f,ce()(n,"addon was unexpectedly empty"),r.createElement(wc,{className:"RatingsByStar-row",key:t,title:u(t,c)||"",to:Tp({addonSlug:n.slug,score:t,location:i})},s))}))))}}])&&cd(t.prototype,n),o&&cd(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const hd=(0,Mo.qC)(No,Eu())(dd);function yd(e){return(yd="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function md(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function vd(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function gd(e,t){return(gd=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function bd(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Od(e);if(t){var o=Od(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return wd(this,n)}}function wd(e,t){if(t&&("object"===yd(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Od(e){return(Od=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Ed=function(e){return e?Math.round(10*e)/10:0},_d=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&gd(e,t)}(a,e);var t,n,o,i=bd(a);function a(){return md(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e,t=this.props,n=t.addon,o=t.i18n,i=t.location;n&&(e=n.ratings?n.ratings.average:null);var a,u=n&&n.ratings?n.ratings.count:null,c=n?n.average_daily_users:null,s=Ed(e||null),l="";n?c?(l=o.formatNumber(c),a=o.ngettext("User","Users",c)):a=o.gettext("No Users"):(l=null,a=o.gettext("Users"));var f,p="";n?u?(p=o.formatNumber(u),f=o.ngettext("Review","Reviews",u)):f=o.gettext("No Reviews"):(p=null,f=o.gettext("Reviews"));var d=n&&p?Tp({addonSlug:n.slug,location:i}):null,h=d?r.createElement(wc,{className:"AddonMeta-reviews-content-link",to:d},p):p,y=d?r.createElement(wc,{className:"AddonMeta-reviews-title-link",to:d},f):f;return r.createElement("div",{className:"AddonMeta"},r.createElement("h3",{className:"visually-hidden"},o.gettext("Used by")),r.createElement($p,{className:"AddonMeta-overallRating",metadata:[{content:l,title:a},{content:h,title:y},{content:r.createElement("div",{className:"AddonMeta-rating-content"},r.createElement(id,{rating:e,readOnly:!0,styleSize:"small",yellowStars:!0})),title:r.createElement("div",{className:"AddonMeta-rating-title"},u?o.sprintf(o.ngettext("%(total)s Star","%(total)s Stars",s),{total:o.formatNumber(s)}):o.gettext("Not rated yet"))}]}),r.createElement(hd,{addon:n}))}}])&&vd(t.prototype,n),o&&vd(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const xd=(0,Mo.qC)(No,Eu())(_d);var Sd=function(e){var t=e.children,n=e.className,o=e.term;return r.createElement(r.Fragment,null,r.createElement("dt",{className:"Definition-dt"},o),r.createElement("dd",{className:Ho()("Definition-dd",n)},t))};const jd=function(e){var t=e.className,n=e.children;return r.createElement("dl",{className:Ho()("DefinitionList",t)},n)};function Pd(e){return(Pd="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function kd(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Id(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Td(e,t){return(Td=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Rd(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Ad(e);if(t){var o=Ad(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Cd(this,n)}}function Cd(e,t){if(t&&("object"===Pd(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Ad(e){return(Ad=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Nd=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Td(e,t)}(a,e);var t,n,o,i=Rd(a);function a(){return kd(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.addon,n=e.hasCodeReviewPermission,o=e.hasContentReviewPermission,i=e.hasEditPermission,a=e.hasStaticThemeReviewPermission,u=e.i18n;if(null===t)return null;var c=t.type===D.Yd,s=n&&!c,l=a&&c,f=o&&!c;if(!(i||f||s||l))return null;var p=i?r.createElement("li",null,r.createElement("a",{className:"AddonAdminLinks-edit-link",href:"/developers/addon/".concat(t.slug,"/edit")},u.gettext("Edit add-on"))):null,d=i?r.createElement("li",null,r.createElement("a",{className:"AddonAdminLinks-admin-link",href:"/admin/models/addons/addon/".concat(t.id)},u.gettext("Admin add-on"))):null,h=f?r.createElement("li",null,r.createElement("a",{className:"AddonAdminLinks-contentReview-link",href:"/reviewers/review-content/".concat(t.id)},u.gettext("Content review add-on"))):null,y=c?u.gettext("Review theme"):u.gettext("Review add-on code"),m=s||l?r.createElement("li",null,r.createElement("a",{className:"AddonAdminLinks-".concat(c?"themeReview":"codeReview","-link"),href:"/reviewers/review/".concat(t.id)},y)):null;return r.createElement(jd,{className:"AddonAdminLinks"},r.createElement(Sd,{term:u.gettext("Admin Links")},r.createElement("ul",{className:"AddonAdminLinks-list"},p,d,h,m)))}}])&&Id(t.prototype,n),o&&Id(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const Ld=(0,Mo.qC)((0,g.connect)((function(e){return{hasCodeReviewPermission:et(e,D.QZ),hasContentReviewPermission:et(e,D.Mr),hasEditPermission:et(e,D.mD),hasStaticThemeReviewPermission:et(e,D.lS)}})),Eu())(Nd);function Dd(e){return(Dd="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Md(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Fd(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Ud(e,t){return(Ud=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Bd(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=qd(e);if(t){var o=qd(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Hd(this,n)}}function Hd(e,t){if(t&&("object"===Dd(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function qd(e){return(qd=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var zd=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Ud(e,t)}(a,e);var t,n,o,i=Bd(a);function a(){return Md(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.addon,n=e.i18n,o=e.currentUserID;if(null===t)return null;if(!wn({addon:t,userId:o}))return null;var i=r.createElement("li",null,r.createElement("a",{className:"AddonAuthorLinks-edit-link",href:"/developers/addon/".concat(t.slug,"/edit")},n.gettext("Edit add-on")));return r.createElement(jd,{className:"AddonAuthorLinks"},r.createElement(Sd,{term:n.gettext("Author Links")},r.createElement("ul",{className:"AddonAuthorLinks-list"},i)))}}])&&Fd(t.prototype,n),o&&Fd(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const Gd=(0,Mo.qC)((0,g.connect)((function(e){return{currentUserID:e.users.currentUserID}})),Eu())(zd);var Wd,Vd;function Yd(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function Zd(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function $d(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Zd(Object(n),!0).forEach((function(t){Kd(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Zd(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Kd(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Qd="FETCH_CATEGORIES",Xd="LOAD_CATEGORIES",Jd={categories:null,loading:!1};function eh(e){var t=e.errorHandlerId;return ce()(t,"errorHandlerId is required"),{type:Qd,payload:{errorHandlerId:t}}}function th(e){var t=e.results;return{type:Xd,payload:{results:t}}}function nh(){return t.Z.get("validClientApplications").reduce((function(e,t){return $d($d({},e),{},Kd({},t,D.Tq.reduce((function(e,t){return $d($d({},e),{},Kd({},t,[]))}),{})))}),{})}var rh=function(e){var t=e.addonType,n=e.slug;return"/".concat(xn(t),"/category/").concat(n,"/")},oh=function(e,t){return e&&e[t]?e[t].name:null},ih=function(e){var t=e.tag;return"/tag/".concat(t,"/")};function ah(e){return(ah="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function uh(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function ch(e,t){return(ch=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function sh(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=fh(e);if(t){var o=fh(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return lh(this,n)}}function lh(e,t){if(t&&("object"===ah(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function fh(e){return(fh=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var ph=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&ch(e,t)}(a,e);var t,n,o,i=sh(a);function a(e){var t;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),t=i.call(this,e);var n=e.categoriesLoading,r=e.dispatch,o=e.errorHandler,u=e.relatedCategories;return n||u||r(eh({errorHandlerId:o.id})),t}return t=a,(n=[{key:"listContent",value:function(){var e=this.props,t=e.addon,n=e.currentVersion,o=e.hasStatsPermission,i=e.i18n,a=e.location,u=e.relatedCategories,c=e.userId,s=e.versionInfo;if(!t)return this.renderDefinitions({versionLastUpdated:r.createElement(Zp,{minWidth:20}),versionLicense:r.createElement(Zp,{minWidth:20})});var l=t.homepage&&t.homepage.outgoing;l&&(l=r.createElement("li",null,r.createElement("a",{className:"AddonMoreInfo-homepage-link",href:l,title:t.homepage&&t.homepage.url},i.gettext("Homepage"))));var f=t.support_url&&t.support_url.outgoing;f&&(f=r.createElement("li",null,r.createElement("a",{className:"AddonMoreInfo-support-link",href:f,title:t.support_url&&t.support_url.url},i.gettext("Support site"))));var p=t.support_email;p=p&&/.+@.+/.test(p)?r.createElement("li",null,r.createElement("a",{className:"AddonMoreInfo-support-email",href:"mailto:".concat(p)},i.gettext("Support Email"))):null;var d=null;(wn({addon:t,userId:c})||o)&&(d=r.createElement(wc,{className:"AddonMoreInfo-stats-link",href:Ut("/addon/".concat(t.slug,"/statistics/"),Bt(a))},i.gettext("Visit stats dashboard")));var h=s&&s.created,y=n&&n.license,m=null;if(y){var v=y.isCustom?{to:Ut("/addon/".concat(t.slug,"/license/"),Bt(a))}:{href:y.url,prependClientApp:!1,prependLang:!1},g=y.name||i.gettext("Custom License");m=y.url?r.createElement(wc,Object.assign({className:"AddonMoreInfo-license-link"},v),g):r.createElement("span",{className:"AddonMoreInfo-license-name"},g)}var b=null;return[D.Gz,D.Yd].includes(t.type)&&u&&u.length>0&&(b=u.map((function(e){return r.createElement("li",{key:e.slug},r.createElement(wc,{className:"AddonMoreInfo-related-category-link",to:rh({addonType:e.type,slug:e.slug})},i.gettext(e.name)))}))),this.renderDefinitions({homepage:l,supportUrl:f,supportEmail:p,statsLink:d,version:n?n.version:null,filesize:s&&s.filesize,versionLastUpdated:h?i.sprintf(i.gettext("%(timeFromNow)s (%(date)s)"),{timeFromNow:i.moment(h).fromNow(),date:i.moment(h).format("ll")}):null,versionLicenseLink:m,privacyPolicyLink:t.has_privacy_policy?r.createElement(wc,{className:"AddonMoreInfo-privacy-policy-link",to:Ut("/addon/".concat(t.slug,"/privacy/"),Bt(a))},i.gettext("Read the privacy policy for this add-on")):null,eulaLink:t.has_eula?r.createElement(wc,{className:"AddonMoreInfo-eula-link",to:Ut("/addon/".concat(t.slug,"/eula/"),Bt(a))},i.gettext("Read the license agreement for this add-on")):null,relatedCategories:b,versionHistoryLink:r.createElement("li",null,r.createElement(wc,{className:"AddonMoreInfo-version-history-link",to:Ut("/addon/".concat(t.slug,"/versions/"),Bt(a))},i.gettext("See all versions"))),tagsLinks:t.tags.length>0?t.tags.map((function(e){return r.createElement("li",{key:e},r.createElement(wc,{className:"AddonMoreInfo-tag-link",to:Ut(ih({tag:e}),Bt(a))},e))})):null})}},{key:"renderDefinitions",value:function(e){var t=e.eulaLink,n=void 0===t?null:t,o=e.filesize,i=void 0===o?null:o,a=e.homepage,u=void 0===a?null:a,c=e.privacyPolicyLink,s=void 0===c?null:c,l=e.relatedCategories,f=void 0===l?null:l,p=e.statsLink,d=void 0===p?null:p,h=e.supportEmail,y=void 0===h?null:h,m=e.supportUrl,v=void 0===m?null:m,g=e.tagsLinks,b=void 0===g?null:g,w=e.version,O=void 0===w?null:w,E=e.versionHistoryLink,_=void 0===E?null:E,x=e.versionLastUpdated,S=e.versionLicenseLink,j=void 0===S?null:S,P=this.props,k=P.addon,I=P.i18n;return r.createElement(r.Fragment,null,r.createElement(jd,{className:"AddonMoreInfo-dl"},(u||v||y)&&r.createElement(Sd,{className:"AddonMoreInfo-links",term:I.gettext("Add-on Links")},r.createElement("ul",{className:"AddonMoreInfo-links-contents-list"},u,v,y)),O&&r.createElement(Sd,{className:"AddonMoreInfo-version",term:I.gettext("Version")},O),i&&r.createElement(Sd,{className:"AddonMoreInfo-filesize",term:I.gettext("Size")},i),x&&r.createElement(Sd,{className:"AddonMoreInfo-last-updated",term:I.gettext("Last updated")},x),f&&r.createElement(Sd,{className:"AddonMoreInfo-related-categories",term:I.gettext("Related Categories")},r.createElement("ul",{className:"AddonMoreInfo-related-categories-list"},f)),j&&r.createElement(Sd,{className:"AddonMoreInfo-license",term:I.gettext("License")},j),s&&r.createElement(Sd,{className:"AddonMoreInfo-privacy-policy",term:I.gettext("Privacy Policy")},s),n&&r.createElement(Sd,{className:"AddonMoreInfo-eula",term:I.gettext("End-User License Agreement")},n),_&&r.createElement(Sd,{className:"AddonMoreInfo-version-history",term:I.gettext("Version History")},r.createElement("ul",{className:"AddonMoreInfo-links-contents-list"},_)),d&&r.createElement(Sd,{className:"AddonMoreInfo-stats",term:I.gettext("Usage Statistics")},d),b&&r.createElement(Sd,{className:"AddonMoreInfo-tag-links",term:I.gettext("Tags")},r.createElement("ul",{className:"AddonMoreInfo-tag-links-list"},b))),r.createElement(Ld,{addon:k}),r.createElement(Gd,{addon:k}))}},{key:"render",value:function(){var e=this.props,t=e.errorHandler,n=e.i18n;return r.createElement(js,{className:"AddonMoreInfo",header:n.gettext("More information")},t.renderErrorIfPresent(),this.listContent())}}])&&uh(t.prototype,n),o&&uh(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const dh=(0,Mo.qC)(No,Eu(),(0,g.connect)((function(e,t){var n=t.addon,r=t.i18n,o=e.categories.categories,i=e.api.clientApp,a=null,u=null,c=null;if(n&&n.currentVersionId&&(a=mf({id:n.currentVersionId,state:e.versions})),a&&(c=bf({i18n:r,state:e.versions,versionId:a.id})),n&&n.categories&&n.type&&o&&i){var s=o[i][n.type];u=(n.categories[i]||[]).reduce((function(e,t){return void 0!==s[t]&&e.push(s[t]),e}),[])}return{currentVersion:a,relatedCategories:u,versionInfo:c,categoriesLoading:e.categories.loading,hasStatsPermission:et(e,D.bp),userId:e.users.currentUserID}})),ms({name:"AddonMoreInfo"}))(ph);var hh=a(87003),yh=a.n(hh),mh=a(30513),vh=a(3812);const gh=r.useLayoutEffect;const bh=function(e){var t=(0,r.useRef)(e);return gh((function(){t.current=e})),t};var wh=function(e,t){"function"!=typeof e?e.current=t:e(t)};const Oh=function(e,t){var n=(0,r.useRef)();return(0,r.useCallback)((function(r){e.current=r,n.current&&wh(n.current,null),n.current=t,t&&wh(t,r)}),[t])};var Eh={"min-height":"0","max-height":"none",height:"0",visibility:"hidden",overflow:"hidden",position:"absolute","z-index":"-1000",top:"0",right:"0"},_h=function(e){Object.keys(Eh).forEach((function(t){e.style.setProperty(t,Eh[t],"important")}))},xh=null;var Sh=function(){},jh=["borderBottomWidth","borderLeftWidth","borderRightWidth","borderTopWidth","boxSizing","fontFamily","fontSize","fontStyle","fontWeight","letterSpacing","lineHeight","paddingBottom","paddingLeft","paddingRight","paddingTop","tabSize","textIndent","textRendering","textTransform","width","wordBreak"],Ph=!!document.documentElement.currentStyle,kh=function(e,t){var n=e.cacheMeasurements,o=e.maxRows,i=e.minRows,a=e.onChange,u=void 0===a?Sh:a,c=e.onHeightChange,s=void 0===c?Sh:c,l=(0,vh.Z)(e,["cacheMeasurements","maxRows","minRows","onChange","onHeightChange"]);var f,p=void 0!==l.value,d=(0,r.useRef)(null),h=Oh(d,t),y=(0,r.useRef)(0),m=(0,r.useRef)(),v=function(){var e=d.current,t=n&&m.current?m.current:function(e){var t=window.getComputedStyle(e);if(null===t)return null;var n,r=(n=t,jh.reduce((function(e,t){return e[t]=n[t],e}),{})),o=r.boxSizing;return""===o?null:(Ph&&"border-box"===o&&(r.width=parseFloat(r.width)+parseFloat(r.borderRightWidth)+parseFloat(r.borderLeftWidth)+parseFloat(r.paddingRight)+parseFloat(r.paddingLeft)+"px"),{sizingStyle:r,paddingSize:parseFloat(r.paddingBottom)+parseFloat(r.paddingTop),borderSize:parseFloat(r.borderBottomWidth)+parseFloat(r.borderTopWidth)})}(e);if(t){m.current=t;var r=function(e,t,n,r){void 0===n&&(n=1),void 0===r&&(r=1/0),xh||((xh=document.createElement("textarea")).setAttribute("tabindex","-1"),xh.setAttribute("aria-hidden","true"),_h(xh)),null===xh.parentNode&&document.body.appendChild(xh);var o=e.paddingSize,i=e.borderSize,a=e.sizingStyle,u=a.boxSizing;Object.keys(a).forEach((function(e){var t=e;xh.style[t]=a[t]})),_h(xh),xh.value=t;var c=function(e,t){var n=e.scrollHeight;return"border-box"===t.sizingStyle.boxSizing?n+t.borderSize:n-t.paddingSize}(xh,e);xh.value="x";var s=xh.scrollHeight-o,l=s*n;"border-box"===u&&(l=l+o+i),c=Math.max(l,c);var f=s*r;return"border-box"===u&&(f=f+o+i),[c=Math.min(f,c),s]}(t,e.value||e.placeholder||"x",i,o),a=r[0],u=r[1];y.current!==a&&(y.current=a,e.style.setProperty("height",a+"px","important"),s(a,{rowHeight:u}))}};return(0,r.useLayoutEffect)(v),f=bh(v),(0,r.useLayoutEffect)((function(){var e=function(e){f.current(e)};return window.addEventListener("resize",e),function(){window.removeEventListener("resize",e)}}),[]),(0,r.createElement)("textarea",(0,mh.Z)({},l,{onChange:function(e){p||v(),u(e)},ref:h}))};const Ih=(0,r.forwardRef)(kh);var Th=a(86432),Rh=a.n(Th),Ch="src/amo/localState.js";function Ah(e){return(Ah="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Nh(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Lh(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Dh(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.localForage,n=void 0===t?Rh():t;n.config({name:"addons-frontend",version:"1.0",storeName:Tn(Ch)})}var Mh,Fh=function(){function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=n.localForage,o=void 0===r?Rh():r;Nh(this,e),this.id=t,this.localForage=o,Dh({localForage:o})}var t,n,r;return t=e,(n=[{key:"load",value:function(){var e=this;return this.localForage.getItem(this.id).then((function(e){return e||null})).catch((function(t){throw L.Z.debug('Error with localForage.getItem("'.concat(e.id,'"): ').concat(t)),t}))}},{key:"clear",value:function(){var e=this;return this.localForage.removeItem(this.id).catch((function(t){throw L.Z.debug('Error with localForage.removeItem("'.concat(e.id,'"): ').concat(t)),t}))}},{key:"save",value:function(e){var t=this;return"object"!==Ah(e)||null===e?Promise.reject(new Error("The argument to save() must be an object")):this.localForage.setItem(this.id,e).catch((function(e){throw L.Z.debug('Error with localForage.setItem("'.concat(t.id,'"): ').concat(e)),e}))}}])&&Lh(t.prototype,n),r&&Lh(t,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();function Uh(e){return(Uh="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Bh(){Bh=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==Uh(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}function Hh(e,t,n,r,o,i,a){try{var u=e[i](a),c=u.value}catch(e){return void n(e)}u.done?t(c):Promise.resolve(c).then(r,o)}function qh(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function zh(e,t){return(zh=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Gh(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Vh(e);if(t){var o=Vh(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Wh(this,n)}}function Wh(e,t){if(t&&("object"===Uh(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Vh(e){return(Vh=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Yh=function(t){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&zh(e,t)}(s,t);var n,o,i,a,u,c=Gh(s);function s(e){var t;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,s),(t=c.call(this,e)).onDelete=function(e){e.preventDefault(),ce()(t.props.onDelete,"onDelete() is not defined"),t.props.onDelete(),t.localState.clear()},t.onDismiss=function(e){var n=t.props.onDismiss;e.preventDefault(),ce()(n,"onDismiss() is required"),n(),t.setState({text:""}),t.localState.clear()},t.onSubmit=function(e){e.preventDefault(),t.props.onSubmit({event:e,text:t.state.text}),t.localState.clear()},t.persistState=t.props._debounce((function(e){t.localState.save(e)}),800,{trailing:!0}),t.onTextChange=function(e){e.preventDefault();var n={text:e.target.value};t.setState(n),t.persistState(n)};var n=e.text||"";return t.state={initialText:n,text:n},t.localState=t.createLocalState(),t}return n=s,(o=[{key:"componentDidMount",value:function(){this.checkForStoredState(),this.textarea&&this.textarea.focus()}},{key:"componentDidUpdate",value:function(e){this.props.id!==e.id&&(this.localState=this.createLocalState(),this.checkForStoredState())}},{key:"createLocalState",value:function(){var e=this.props;return(0,e._createLocalState)(e.id)}},{key:"checkForStoredState",value:(a=Bh().mark((function t(){var n;return Bh().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.localState.load();case 2:(n=t.sent)&&(L.Z.debug((0,e.f9)(Mh||(r=["Initializing DismissibleTextForm state from LocalState\n ",""],(o=void 0)||(o=r.slice(0)),Mh=Object.freeze(Object.defineProperties(r,{raw:{value:Object.freeze(o)}}))),this.localState.id),n),this.setState(n));case 4:case"end":return t.stop()}var r,o}),t,this)})),u=function(){var e=this,t=arguments;return new Promise((function(n,r){var o=a.apply(e,t);function i(e){Hh(o,n,r,i,u,"next",e)}function u(e){Hh(o,n,r,i,u,"throw",e)}i(void 0)}))},function(){return u.apply(this,arguments)})},{key:"render",value:function(){var e=this,t=this.props,n=t.className,o=t.dismissButtonText,i=t.formFooter,a=t.i18n,u=t.isSubmitting,c=t.microButtons,s=t.onDelete,l=t.onDismiss,f=t.placeholder,p=t.puffyButtons,d=t.reverseButtonOrder,h=t.submitButtonClassName,y=t.submitButtonText,m=t.submitButtonInProgressText,v=u||!this.state.text.trim()||this.state.initialText===this.state.text.trim(),g=!this.state.text.trim(),b={placeholder:f||a.gettext("Enter text."),submitButtonText:y||a.gettext("Submit"),submitButtonInProgressText:m||a.gettext("Submitting")};ce()(!(c&&p),"microButtons and puffyButtons cannot both be true; choose one");var w=l?r.createElement(Dc,{buttonType:"neutral",className:"DismissibleTextForm-dismiss",disabled:u,key:"cancel",micro:c,onClick:this.onDismiss,puffy:p,type:"cancel"},o||a.gettext("Cancel")):null,O=[s?r.createElement(Dc,{buttonType:"alert",className:"DismissibleTextForm-delete",disabled:g,key:"delete",onClick:this.onDelete,micro:c,puffy:p,type:"button"},a.gettext("Delete")):null,r.createElement(Dc,{buttonType:"action",className:Ho()("DismissibleTextForm-submit",h),disabled:v,key:"submit",onClick:this.onSubmit,micro:c,puffy:p,type:"submit"},u?b.submitButtonInProgressText:b.submitButtonText)];d&&O.reverse();var E=[w,r.createElement("span",{className:"DismissibleTextForm-delete-submit-buttons",key:"actionButtons"},O)];return d&&E.reverse(),r.createElement("form",{className:Ho()("DismissibleTextForm-form",n)},r.createElement(Ih,{disabled:u,className:"DismissibleTextForm-textarea",ref:function(t){e.textarea=t},onChange:this.onTextChange,placeholder:b.placeholder,value:this.state.text}),i&&r.createElement("div",{className:"DismissibleTextForm-formFooter"},i),r.createElement("div",{className:"DismissibleTextForm-buttons"},E))}}])&&qh(n.prototype,o),i&&qh(n,i),Object.defineProperty(n,"prototype",{writable:!1}),s}(r.Component);Yh.defaultProps={_createLocalState:function(e,t){return new Fh(e,t)},_debounce:yh(),isSubmitting:!1,microButtons:!1,puffyButtons:!1,reverseButtonOrder:!1};const Zh=(0,Mo.qC)(Eu())(Yh);var $h="src/amo/components/EditableCollectionAddon/index.js";function Kh(e){return(Kh="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Qh(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Xh(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Jh(e,t){return(Jh=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function ey(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=ny(e);if(t){var o=ny(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return ty(this,n)}}function ty(e,t){if(t&&("object"===Kh(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function ny(e){return(ny=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var ry=function(e){var t=e.addon;return"editable-collection-addon-".concat(t.id)},oy=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Jh(e,t)}(a,e);var t,n,o,i=ey(a);function a(){var e;Qh(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).onEditNote=function(t){t.preventDefault(),e.props.setUIState({editingNote:!0})},e.onDeleteNote=function(){var t=e.props,n=t.addon.id;(0,t.deleteNote)(n,t.errorHandler)},e.onDismissNoteForm=function(){e.props.setUIState({editingNote:!1})},e.onRemoveAddon=function(t){var n=e.props,r=n.addon.id,o=n.removeAddon;t.preventDefault(),t.stopPropagation(),ce()(r,"addonId is required"),o(r)},e.onSaveNote=function(t){var n=e.props,r=n.addon.id,o=n.errorHandler,i=n.saveNote;ce()(r,"addonId is required"),i(r,o,t.text)},e}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.addon,n=e.errorHandler,o=e.i18n,i=t.notes||this.props.uiState.editingNote,a=Bs(t);return r.createElement("li",{className:Ho()("EditableCollectionAddon","EditableCollectionAddon--".concat(t.type))},r.createElement("div",{className:"EditableCollectionAddon-details"},r.createElement("img",{className:"EditableCollectionAddon-icon",src:a,alt:t.name}),r.createElement("h2",{className:"EditableCollectionAddon-name"},t.name)),r.createElement("div",{className:"EditableCollectionAddon-buttons"},r.createElement("div",{className:Ho()("EditableCollectionAddon-leaveNote",{"EditableCollectionAddon-leaveNote--hidden":i})},r.createElement(Dc,{buttonType:"action",className:"EditableCollectionAddon-leaveNote-button",micro:!0,onClick:this.onEditNote},o.gettext("Leave a note"))),r.createElement(Dc,{buttonType:"alert",className:"EditableCollectionAddon-remove-button",micro:!0,name:t.id,onClick:this.onRemoveAddon},o.gettext("Remove"))),i&&r.createElement("div",{className:"EditableCollectionAddon-notes"},r.createElement("h4",{className:"EditableCollectionAddon-notes-header"},r.createElement(ac,{name:"comments-blue"}),this.props.uiState.editingNote?o.gettext("Leave a note"):o.gettext("Collector's note")),this.props.uiState.editingNote?r.createElement(r.Fragment,null,n.renderErrorIfPresent(),r.createElement(Zh,{className:"EditableCollectionAddon-notes-form",id:"".concat(Tn($h),"-").concat(ry(this.props)),microButtons:!0,onDelete:t.notes?this.onDeleteNote:null,onDismiss:this.onDismissNoteForm,onSubmit:this.onSaveNote,placeholder:o.gettext("Add a comment about this add-on."),submitButtonText:o.gettext("Save"),text:vn(t.notes||"").__html})):r.createElement("div",{className:"EditableCollectionAddon-notes-read-only"},r.createElement("span",{className:"EditableCollectionAddon-notes-content",dangerouslySetInnerHTML:vn(gn(t.notes||""),["br","a"])}),r.createElement("div",{className:"EditableCollectionAddon-notes-buttons"},r.createElement(Dc,{buttonType:"action",className:"EditableCollectionAddon-notes-edit-button",micro:!0,onClick:this.onEditNote},o.gettext("Edit"))))))}}])&&Xh(t.prototype,n),o&&Xh(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const iy=(0,Mo.qC)(Eu(),gs({fileName:$h,extractId:ry}),Bu({fileName:$h,extractId:ry,initialState:{editingNote:!1},resetOnUnmount:!0}))(oy);function ay(e){return(ay="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function uy(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function cy(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function sy(e,t){return(sy=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function ly(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=py(e);if(t){var o=py(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return fy(this,n)}}function fy(e,t){if(t&&("object"===ay(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function py(e){return(py=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var dy=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&sy(e,t)}(a,e);var t,n,o,i=ly(a);function a(){var e;uy(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).onClickAddon=function(t){var n=e.props,r=n.addon,o=n.onClick;t.stopPropagation(),r&&o&&o(r)},e.onClickResult=function(){var t=e.props,n=t.addon,r=t.addonInstallSource,o=t.clientApp,i=t.history,a=t.lang,u=t.onClick;n&&(i.push("/".concat(a,"/").concat(o).concat(e.getAddonLink(n,r))),u&&u(n))},e}return t=a,(n=[{key:"getAddonLink",value:function(e,t){var n=ln(e.slug);return t&&(n=Ut(n,{utm_source:D.Pr,utm_medium:D.AT,utm_content:t})),n}},{key:"renderResult",value:function(){var e=this.props,t=e._getPromotedCategory,n=e.addon,o=e.addonInstallSource,i=e.clientApp,a=e.i18n,u=e.onImpression,c=e.showFullSizePreview,s=e.showMetadata,l=e.showPromotedBadge,f=e.showSummary,p=e.useThemePlaceholder;n&&u&&u(n);var d=n?n.average_daily_users:null,h=Bs(n),y=r.createElement(Zp,null);n&&(y=r.createElement(wc,{className:"SearchResult-link",to:this.getAddonLink(n,o),onClick:this.onClickAddon},n.name)),n&&n.type===D.Yd&&(h=qs(n,{full:c}));var m=Ho()("SearchResult-icon-wrapper",{"SearchResult-icon-wrapper--no-theme-image":n?null===h:p}),v=null,g=n&&n.authors&&n.authors.length?n.authors:null;if(!n||g){var b=g&&g[0];v=r.createElement("h3",{className:"SearchResult-author SearchResult--meta-section"},b?b.name:r.createElement(Zp,null))}var w=null;if(f){var O={};n?O.dangerouslySetInnerHTML=vn(n.summary):O.children=r.createElement(Zp,null),w=r.createElement("p",Object.assign({className:"SearchResult-summary"},O))}var E=t({addon:n,clientApp:i,forBadging:!0});return r.createElement("div",{className:"SearchResult-wrapper"},r.createElement("div",{className:"SearchResult-result"},r.createElement("div",{className:m},n&&h||!n&&!p?r.createElement("img",{className:Ho()("SearchResult-icon",{"SearchResult-icon--loading":!n}),src:h,alt:n?"".concat(n.name):""}):r.createElement("p",{className:"SearchResult-notheme"},a.gettext("No theme preview available"))),r.createElement("div",{className:"SearchResult-contents"},r.createElement("h2",{className:"SearchResult-name"},y,l&&n&&E?r.createElement($s,{category:E,onClick:function(e){return e.stopPropagation()},size:"small"}):null),w,s?r.createElement("div",{className:"SearchResult-metadata"},r.createElement("div",{className:"SearchResult-rating"},r.createElement(id,{rating:n&&n.ratings?n.ratings.average:0,readOnly:!0,styleSize:"small"})),v):null,n&&n.notes&&r.createElement("div",{className:"SearchResult-note"},r.createElement("h4",{className:"SearchResult-note-header"},r.createElement(ac,{name:"comments-blue"}),a.gettext("Add-on note")),r.createElement("p",{className:"SearchResult-note-content",dangerouslySetInnerHTML:vn(gn(n.notes),["br"])}))),r.createElement("h3",{className:"SearchResult-users SearchResult--meta-section"},r.createElement(ac,{className:"SearchResult-users-icon",name:"user-fill"}),r.createElement("span",{className:"SearchResult-users-text"},null!=d?a.sprintf(a.ngettext("%(total)s user","%(total)s users",d),{total:a.formatNumber(d)}):r.createElement(Zp,{width:80})))))}},{key:"render",value:function(){var e=this.props,t=e.addon,n=e.useThemePlaceholder,o=this.renderResult(),i=Ho()("SearchResult",{"SearchResult--theme":t?D.Yd===t.type:n});return r.createElement("li",{onClick:this.onClickResult,className:i},o)}}])&&cy(t.prototype,n),o&&cy(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);dy.defaultProps={_getPromotedCategory:Gs,showFullSizePreview:!1,showMetadata:!0,showPromotedBadge:!0,showSummary:!0,useThemePlaceholder:!1};const hy=(0,Mo.qC)(No,(0,g.connect)((function(e){return{clientApp:e.api.clientApp,lang:e.api.lang}})),Eu())(dy);function yy(e){return(yy="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var my=["children","className"];function vy(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function gy(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function by(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function wy(e,t){return(wy=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Oy(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=_y(e);if(t){var o=_y(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Ey(this,n)}}function Ey(e,t){if(t&&("object"===yy(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function _y(e){return(_y=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var xy=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&wy(e,t)}(a,e);var t,n,o,i=Oy(a);function a(){return gy(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.children,n=e.className,o=vy(e,my);return r.createElement(js,Object.assign({},o,{className:Ho()("CardList",n),photonStyle:!0}),t)}}])&&by(t.prototype,n),o&&by(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);function Sy(e){return(Sy="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}xy.propTypes={children:w().node,className:w().string};var jy=["addonInstallSource","addons","children","className","deleteNote","editing","loading","removeAddon","saveNote","onAddonClick","onAddonImpression","placeholderCount","useThemePlaceholder","showFullSizePreview","showMetadata","showPromotedBadge","showSummary","type"];function Py(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function ky(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Iy(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Ty(e,t){return(Ty=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Ry(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Ay(e);if(t){var o=Ay(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Cy(this,n)}}function Cy(e,t){if(t&&("object"===Sy(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Ay(e){return(Ay=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Ny=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Ty(e,t)}(a,e);var t,n,o,i=Ry(a);function a(){return ky(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.addonInstallSource,n=e.addons,o=e.children,i=e.className,a=e.deleteNote,u=e.editing,c=e.loading,s=e.removeAddon,l=e.saveNote,f=e.onAddonClick,p=e.onAddonImpression,d=e.placeholderCount,h=e.useThemePlaceholder,y=e.showFullSizePreview,m=e.showMetadata,v=e.showPromotedBadge,g=e.showSummary,b=e.type,w=Py(e,jy),O=[];if(n&&n.length)n.forEach((function(e){u?(ce()(a,"deleteNote() is undefined"),ce()(s,"removeAddon() is undefined"),ce()(l,"saveNote() is undefined"),O.push(r.createElement(iy,{addon:e,deleteNote:a,key:e.slug,removeAddon:s,saveNote:l}))):O.push(r.createElement(hy,{addonInstallSource:t,addon:e,key:"".concat(e.slug,"-").concat(e.type),onClick:f,onImpression:p,showFullSizePreview:y,showMetadata:m,showPromotedBadge:v,showSummary:D.Yd!==e.type&&g}))}));else if(c)for(var E=0;E<d;E++)O.push(r.createElement(hy,{key:E,useThemePlaceholder:h}));var _=Ho()("AddonsCard",i,b&&"AddonsCard--".concat(b));return r.createElement(xy,Object.assign({},w,{className:_}),o,O.length?r.createElement("ul",{className:"AddonsCard-list"},O):null)}}])&&Iy(t.prototype,n),o&&Iy(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);function Ly(e){return(Ly="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Dy(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function My(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Fy(e,t){return(Fy=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Uy(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Hy(e);if(t){var o=Hy(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return By(this,n)}}function By(e,t){if(t&&("object"===Ly(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Hy(e){return(Hy=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}Ny.defaultProps={editing:!1,isHomepageShelf:!1,loading:!1,placeholderCount:25,showPromotedBadge:!0,useThemePlaceholder:!1};var qy=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Fy(e,t)}(a,e);var t,n,o,i=Uy(a);function a(){return Dy(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"componentDidMount",value:function(){var e=this.props,t=e.addon,n=e.recommendations,r=e.tracking;r.setDimension({dimension:"dimension4",value:"TAAR_COHORT_INCLUDED"}),r.setDimension({dimension:"dimension5",value:"TAAR-LITE-AB"}),t&&!n&&this.dispatchFetchRecommendations(t.guid)}},{key:"componentDidUpdate",value:function(e){var t=e.addon,n=e.recommendations,r=this.props,o=r.addon,i=r.recommendations,a=r.tracking,u=r.errorHandler;if(o&&(!t||t&&t.guid!==o.guid)&&this.dispatchFetchRecommendations(o.guid),i&&n!==i){var c=i.fallbackReason,s=i.loading,l=i.outcome;if(s||u.hasError())return;ce()(o,"newAddon is required"),ce()(l,"outcome is required");var f=l;c&&(f="".concat(f,"-").concat(c)),a.sendEvent({action:f,category:"AMO Addon / Recommendations Shown",label:o.guid})}}},{key:"dispatchFetchRecommendations",value:function(e){this.props.dispatch(function(e){var t=e.errorHandlerId,n=e.guid,r=e.recommended,o=void 0===r||r;return ce()(t,"errorHandlerId is required"),ce()(n,"guid is required"),{type:zl,payload:{errorHandlerId:t,guid:n,recommended:o}}}({errorHandlerId:this.props.errorHandler.id,guid:e}))}},{key:"render",value:function(){var e=this.props,t=e.className,n=e.i18n,o=e.recommendations,i=e.errorHandler;if(!o)return L.Z.debug("No recommendations, hiding the AddonRecommendations component."),null;if(i.hasError())return L.Z.debug("Error in fetching recommendations, hiding the AddonRecommendations component."),null;var a=o.addons,u=o.loading,c=o.outcome,s=Ho()("AddonRecommendations",t),l=r.createElement(Zp,{width:100});return u||(l="recommended"===c?n.gettext("Other users with this extension also installed"):n.gettext("Other popular extensions")),r.createElement(Ny,{addonInstallSource:c||"",addons:a,className:s,header:l,loading:u,placeholderCount:4,showMetadata:!0,showSummary:!1,type:"horizontal"})}}])&&My(t.prototype,n),o&&My(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);qy.defaultProps={tracking:pr};const zy=(0,Mo.qC)((0,g.connect)((function(e,t){var n=t.addon;return{recommendations:n?function(e){var t=e.guid,n=e.state;return ce()(t,"guid is required"),ce()(n,"state is required"),n.byGuid[t]||null}({guid:n.guid,state:e.recommendations}):null}})),Eu(),ms({id:"AddonRecommendations"}))(qy);const Gy=(0,Mo.qC)(Eu(),(0,g.connect)((function(e){return{isRTL:J(e.api.lang)}})))((function(e){var t=e.addon,n=e.as,o=void 0===n?"h1":n,i=e.i18n,a=e.isRTL,u=e.linkToAddon,c=void 0!==u&&u,s=e.queryParamsForAttribution,l=void 0===s?{}:s,f=[];if(t&&t.authors){var p=t.authors,d=i.gettext(","),h=a?" ".concat(d):"".concat(d," ");p.forEach((function(e,t){f.push(e.url?r.createElement(wc,{key:e.id,to:"/user/".concat(e.id,"/")},e.name):e.name),t+1<p.length&&f.push(h)}))}return r.createElement(o,{className:"AddonTitle"},t?r.createElement(r.Fragment,null,c?r.createElement(wc,{to:Ut(ln(t.slug),l)},t.name):t.name,f.length>0&&r.createElement("span",{className:"AddonTitle-author"}," ",a?r.createElement(r.Fragment,null,f," ",i.gettext("by")):r.createElement(r.Fragment,null,i.gettext("by")," ",f))):r.createElement(Zp,{width:80}))}));a(15661);var Wy=a(12569),Vy=a.n(Wy);function Yy(e){return(Yy="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Zy(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function $y(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Zy(Object(n),!0).forEach((function(t){Ky(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Zy(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Ky(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Qy(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Xy(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Jy(e,t){return(Jy=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function em(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=nm(e);if(t){var o=nm(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return tm(this,n)}}function tm(e,t){if(t&&("object"===Yy(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function nm(e){return(nm=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var rm=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Jy(e,t)}(a,e);var t,n,o,i=em(a);function a(){return Qy(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.className,n=e.currentPage,o=e.page,i=e.pageCount,a=e.pageParam,u=e.pathname,c=e.queryParams,s=e.text;ce()(void 0!==n,"The currentPage property cannot be undefined"),ce()(void 0!==u,"The pathname property cannot be undefined"),ce()(void 0!==o,"The page property cannot be undefined"),ce()(void 0!==i,"The pageCount property cannot be undefined");var l=null;if(o+1===n?l="prev":o-1===n&&(l="next"),n===o||o<1||o>i){var f=Ho()("Paginate-item",t,{"Paginate-item--current-page":n===o});return r.createElement(Dc,{buttonType:"cancel",className:f,disabled:!0,key:o},s||o)}var p=ae.parse(u,!0);return r.createElement(Dc,{buttonType:"cancel",className:Ho()("Paginate-item",t),rel:l,to:{pathname:p.pathname,query:$y($y($y({},p.query),c),{},Ky({},a,o))}},s||o)}}])&&Xy(t.prototype,n),o&&Xy(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);function om(e){return(om="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function im(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function am(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function um(e,t){return(um=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function cm(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=lm(e);if(t){var o=lm(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return sm(this,n)}}function sm(e,t){if(t&&("object"===om(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function lm(e){return(lm=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function fm(e){for(var t=e.start,n=e.end,r=[],o=t;o<=n;o++)r.push(o);return r}rm.propTypes={className:w().string,currentPage:w().number.isRequired,page:w().number.isRequired,pageCount:w().number.isRequired,pageParam:w().string,pathname:w().string.isRequired,queryParams:w().object,text:w().string},rm.defaultProps={pageParam:"page"};var pm=function(e){var t=e.count,n=e.perPage;return ce()("number"==typeof n,"perPage is required"),ce()(n>0,"A perPage value of ".concat(n," is not allowed")),Math.ceil(t/n)},dm=function(e){var t=parseInt(e,10);return Number.isNaN(t)||t<1?1:t},hm=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&um(e,t)}(a,e);var t,n,o,i=cm(a);function a(){return im(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.LinkComponent,n=e.count,o=e.currentPage,i=e.i18n,a=e.pageParam,u=e.pathname,c=e.perPage,s=e.queryParams,l=e.showPages,f=pm({count:n,perPage:c}),p=dm(o);if(ce()(void 0!==n,"The count property cannot be undefined"),ce()(void 0!==u,"The pathname property cannot be undefined"),1===f)return null;var d={LinkComponent:t,currentPage:p,pageCount:f,pathname:u,queryParams:s};return r.createElement("div",{className:"Paginate"},r.createElement("div",{className:"Paginate-links"},r.createElement(rm,Object.assign({},d,{className:"Paginate-item--previous",page:p-1,pageParam:a,text:i.gettext("Previous")})),function(e){var t=e.currentPage,n=e.pageCount,r=e.showPages;if(!r)return[];var o=dm(t),i=Math.floor(r/2),a=Math.max(1,o-i),u=Math.min(n,o+i);return fm(n<=r?{start:1,end:n}:u-o<i?{start:u-r+1,end:u}:o-a<i?{start:a,end:a+r-1}:{start:a,end:u})}({currentPage:o,pageCount:f,showPages:l}).map((function(e){return r.createElement(rm,Object.assign({},d,{key:"page-".concat(e),page:e,pageParam:a}))})),r.createElement(rm,Object.assign({},d,{className:"Paginate-item--next",page:p+1,pageParam:a,text:i.gettext("Next")}))),r.createElement("div",{className:"Paginate-page-number"},i.sprintf(i.gettext("Page %(thisPage)s of %(totalPages)s"),{thisPage:p,totalPages:pm({count:n,perPage:c})})))}}])&&am(t.prototype,n),o&&am(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);hm.defaultProps={pageParam:"page",showPages:7};const ym=(0,Mo.qC)(Eu())(hm);function mm(e){return(mm="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function vm(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function gm(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function bm(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function wm(e,t){return(wm=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Om(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=_m(e);if(t){var o=_m(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Em(this,n)}}function Em(e,t){if(t&&("object"===mm(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function _m(e){return(_m=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var xm=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&wm(e,t)}(a,e);var t,n,o,i=Om(a);function a(e){var t;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),t=i.call(this,e);var n=e.addonType,r=e.authorIds,o=e.forAddonSlug,u=e.location,c=e.pageParam,s=e.paginate;return r?(t.dispatchFetchAddonsByAuthors({addonType:n,authorIds:r,forAddonSlug:o,page:t.getCurrentPage({location:u,paginate:s,pageParam:c})}),t):Em(t)}return t=a,(n=[{key:"componentDidUpdate",value:function(e){var t=e.addonType,n=e.authorIds,r=e.forAddonSlug,o=e.location,i=this.props,a=i.addonType,u=i.authorIds,c=i.forAddonSlug,s=i.location,l=i.pageParam,f=i.paginate;if(u){var p=!!f&&o.query[l]!==s.query[l];t===a&&r===c&&Vy()(n,u)&&!p||this.dispatchFetchAddonsByAuthors({addonType:a,authorIds:u,forAddonSlug:c,page:this.getCurrentPage({location:s,paginate:f,pageParam:l})})}}},{key:"getCurrentPage",value:function(e){var t=e.location,n=e.paginate,r=e.pageParam;if(n){var o=parseInt(t.query[r],10);return Number.isNaN(o)||o<1?"1":o.toString()}}},{key:"dispatchFetchAddonsByAuthors",value:function(e){var t=e.addonType,n=e.authorIds,r=e.forAddonSlug,o=e.page,i=this.props,a=i.errorHandler,u=i.numberOfAddons,c={page:void 0,sort:void 0};i.paginate&&(ce()(o,"page is required when paginate is `true`."),c.page=o,c.sort=D.Nu),ce()(a,"errorHandler is required"),this.props.dispatch(function(e){var t=e.addonType,n=e.authorIds,r=e.errorHandlerId,o=e.forAddonSlug,i=e.page,a=e.pageSize,u=e.sort;return ce()(r,"An errorHandlerId is required"),ce()(n,"authorIds are required."),ce()(Array.isArray(n),"The authorIds parameter must be an array."),ce()(a,"pageSize is required."),{type:dl,payload:{addonType:t,authorIds:n,errorHandlerId:r,forAddonSlug:o,page:i,pageSize:a,sort:u}}}(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?vm(Object(n),!0).forEach((function(t){gm(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):vm(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({addonType:t,authorIds:n,errorHandlerId:a.id,forAddonSlug:r,page:o,pageSize:String(u)},c)))}},{key:"render",value:function(){var e=this.props,t=e.addonType,n=e.addons,o=e.authorDisplayName,i=e.authorIds,a=e.className,u=e.errorHandler,c=e.i18n,s=e.loading,l=e.numberOfAddons,f=e.paginate,p=e.showMore,d=e.showSummary,h=e.type;if(ce()(u,"errorHandler is required"),u.hasError())return u.renderError();var y=!0===s||null===s;if(!(y||n&&n.length))return null;var m=r.createElement(Zp,null);if(i)switch(t){case D.jV:m=c.ngettext(c.sprintf(c.gettext("More dictionaries by %(author)s"),{author:o}),c.gettext("More dictionaries by these translators"),i.length);break;case D.Gz:m=p?c.ngettext(c.sprintf(c.gettext("More extensions by %(author)s"),{author:o}),c.gettext("More extensions by these developers"),i.length):c.ngettext(c.sprintf(c.gettext("Extensions by %(author)s"),{author:o}),c.gettext("Extensions by these developers"),i.length);break;case D.d$:m=c.ngettext(c.sprintf(c.gettext("More language packs by %(author)s"),{author:o}),c.gettext("More language packs by these translators"),i.length);break;case D.Yd:m=p?c.ngettext(c.sprintf(c.gettext("More themes by %(author)s"),{author:o}),c.gettext("More themes by these artists"),i.length):c.ngettext(c.sprintf(c.gettext("Themes by %(author)s"),{author:o}),c.gettext("Themes by these artists"),i.length);break;default:m=c.ngettext(c.sprintf(c.gettext("More add-ons by %(author)s"),{author:o}),c.gettext("More add-ons by these developers"),i.length)}var v=Ho()("AddonsByAuthorsCard",a,{"AddonsByAuthorsCard--theme":D.Yd===t}),g=null;if(f){var b=this.props,w=b.count,O=b.location,E=b.pageParam,_=b.pathname;ce()(_,"pathname is required when paginate is `true`.");var x=this.getCurrentPage({location:O,paginate:f,pageParam:E});g=w&&w>l?r.createElement(ym,{LinkComponent:wc,count:w,currentPage:x,pageParam:E,pathname:_,perPage:l,queryParams:O.query}):null}return r.createElement(Ny,{addons:n,className:v,footer:g,header:m,loading:y,placeholderCount:l,showMetadata:!0,showSummary:d,type:h})}}])&&bm(t.prototype,n),o&&bm(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);xm.defaultProps={pageParam:"page",paginate:!1,showMore:!0,showSummary:!1,type:"horizontal"};const Sm=(0,Mo.qC)(No,(0,g.connect)((function(e,t){var n=t.addonType,r=t.authorIds,o=t.forAddonSlug,i=t.numberOfAddons,a=null,u=null;return r&&(a=(a=vl(e.addonsByAuthors,r,n,o))?a.slice(0,i):a,u=function(e,t,n){var r=ml(t,n);return void 0===e.loadingFor[r]?null:e.loadingFor[r]}(e.addonsByAuthors,r,n)),{addons:a,count:r?function(e,t,n){return e.countFor[ml(t,n)]||null}(e.addonsByAuthors,r,n):0,loading:u}})),Eu(),ms({extractId:function(e){return e.addonType||""},name:"AddonsByAuthorsCard"}))(xm);const jm=(0,Mo.qC)(Eu())((function(e){var t=e._tracking,n=void 0===t?pr:t,o=e.addon,i=e.i18n;if(!o||o&&!o.contributions_url)return null;var a,u,c=o.authors?o.authors.length:1;switch(o.type){case D.Gz:a=i.ngettext(i.gettext("Support this developer"),i.gettext("Support these developers"),c),u=i.ngettext(i.gettext("The developer of this extension asks that you help support\n its continued development by making a small contribution."),i.gettext("The developers of this extension ask that you help\n support its continued development by making a small contribution."),c);break;case D.Yd:a=i.ngettext(i.gettext("Support this artist"),i.gettext("Support these artists"),c),u=i.ngettext(i.gettext("The artist of this theme asks that you help support\n its continued creation by making a small contribution."),i.gettext("The artists of this theme ask that you help support\n its continued creation by making a small contribution."),c);break;default:a=i.ngettext(i.gettext("Support this author"),i.gettext("Support these authors"),c),u=i.ngettext(i.gettext("The author of this add-on asks that you help support\n its continued work by making a small contribution."),i.gettext("The authors of this add-on ask that you help support\n its continued work by making a small contribution."),c)}return r.createElement(js,{className:"ContributeCard",header:a},r.createElement("p",{className:"ContributeCard-content"},u),r.createElement("p",null,r.createElement(Dc,{buttonType:"action",className:"ContributeCard-button",href:o.contributions_url&&o.contributions_url.outgoing||"",title:o.contributions_url&&o.contributions_url.url,onClick:function(){n.sendEvent({action:"contribute-click",category:"AMO Addon / Contribute Button Clicks",label:o.guid})},target:"_blank",puffy:!0},r.createElement(ac,{name:"heart"}),i.gettext("Contribute now"))))}));var Pm=a(5573),km=a(85854);a(19115);const Im=r.createContext(null);function Tm(e,t){var n=Object.create(null);return e&&r.Children.map(e,(function(e){return e})).forEach((function(e){n[e.key]=function(e){return t&&(0,r.isValidElement)(e)?t(e):e}(e)})),n}function Rm(e,t,n){return null!=n[t]?n[t]:e.props[t]}function Cm(e,t,n){var o=Tm(e.children),i=function(e,t){function n(n){return n in t?t[n]:e[n]}e=e||{},t=t||{};var r,o=Object.create(null),i=[];for(var a in e)a in t?i.length&&(o[a]=i,i=[]):i.push(a);var u={};for(var c in t){if(o[c])for(r=0;r<o[c].length;r++){var s=o[c][r];u[o[c][r]]=n(s)}u[c]=n(c)}for(r=0;r<i.length;r++)u[i[r]]=n(i[r]);return u}(t,o);return Object.keys(i).forEach((function(a){var u=i[a];if((0,r.isValidElement)(u)){var c=a in t,s=a in o,l=t[a],f=(0,r.isValidElement)(l)&&!l.props.in;!s||c&&!f?s||!c||f?s&&c&&(0,r.isValidElement)(l)&&(i[a]=(0,r.cloneElement)(u,{onExited:n.bind(null,u),in:l.props.in,exit:Rm(u,"exit",e),enter:Rm(u,"enter",e)})):i[a]=(0,r.cloneElement)(u,{in:!1}):i[a]=(0,r.cloneElement)(u,{onExited:n.bind(null,u),in:!0,exit:Rm(u,"exit",e),enter:Rm(u,"enter",e)})}})),i}var Am=Object.values||function(e){return Object.keys(e).map((function(t){return e[t]}))},Nm=function(e){function t(t,n){var r,o=(r=e.call(this,t,n)||this).handleExited.bind((0,Pm.Z)(r));return r.state={contextValue:{isMounting:!0},handleExited:o,firstRender:!0},r}(0,km.Z)(t,e);var n=t.prototype;return n.componentDidMount=function(){this.mounted=!0,this.setState({contextValue:{isMounting:!1}})},n.componentWillUnmount=function(){this.mounted=!1},t.getDerivedStateFromProps=function(e,t){var n,o,i=t.children,a=t.handleExited;return{children:t.firstRender?(n=e,o=a,Tm(n.children,(function(e){return(0,r.cloneElement)(e,{onExited:o.bind(null,e),in:!0,appear:Rm(e,"appear",n),enter:Rm(e,"enter",n),exit:Rm(e,"exit",n)})}))):Cm(e,i,a),firstRender:!1}},n.handleExited=function(e,t){var n=Tm(this.props.children);e.key in n||(e.props.onExited&&e.props.onExited(t),this.mounted&&this.setState((function(t){var n=(0,mh.Z)({},t.children);return delete n[e.key],{children:n}})))},n.render=function(){var e=this.props,t=e.component,n=e.childFactory,o=(0,vh.Z)(e,["component","childFactory"]),i=this.state.contextValue,a=Am(this.state.children).map(n);return delete o.appear,delete o.enter,delete o.exit,null===t?r.createElement(Im.Provider,{value:i},a):r.createElement(Im.Provider,{value:i},r.createElement(t,o,a))},t}(r.Component);Nm.propTypes={},Nm.defaultProps={component:"div",childFactory:function(e){return e}};const Lm=Nm;function Dm(e,t){return e.replace(new RegExp("(^|\\s)"+t+"(?:\\s|$)","g"),"$1").replace(/\s+/g," ").replace(/^\s*|\s*$/g,"")}const Mm=!1;var Fm="unmounted",Um="exited",Bm="entering",Hm="entered",qm="exiting",zm=function(e){function t(t,n){var r;r=e.call(this,t,n)||this;var o,i=n&&!n.isMounting?t.enter:t.appear;return r.appearStatus=null,t.in?i?(o=Um,r.appearStatus=Bm):o=Hm:o=t.unmountOnExit||t.mountOnEnter?Fm:Um,r.state={status:o},r.nextCallback=null,r}(0,km.Z)(t,e),t.getDerivedStateFromProps=function(e,t){return e.in&&t.status===Fm?{status:Um}:null};var n=t.prototype;return n.componentDidMount=function(){this.updateStatus(!0,this.appearStatus)},n.componentDidUpdate=function(e){var t=null;if(e!==this.props){var n=this.state.status;this.props.in?n!==Bm&&n!==Hm&&(t=Bm):n!==Bm&&n!==Hm||(t=qm)}this.updateStatus(!1,t)},n.componentWillUnmount=function(){this.cancelNextCallback()},n.getTimeouts=function(){var e,t,n,r=this.props.timeout;return e=t=n=r,null!=r&&"number"!=typeof r&&(e=r.exit,t=r.enter,n=void 0!==r.appear?r.appear:t),{exit:e,enter:t,appear:n}},n.updateStatus=function(e,t){void 0===e&&(e=!1),null!==t?(this.cancelNextCallback(),t===Bm?this.performEnter(e):this.performExit()):this.props.unmountOnExit&&this.state.status===Um&&this.setState({status:Fm})},n.performEnter=function(e){var t=this,n=this.props.enter,r=this.context?this.context.isMounting:e,i=this.props.nodeRef?[r]:[o.findDOMNode(this),r],a=i[0],u=i[1],c=this.getTimeouts(),s=r?c.appear:c.enter;!e&&!n||Mm?this.safeSetState({status:Hm},(function(){t.props.onEntered(a)})):(this.props.onEnter(a,u),this.safeSetState({status:Bm},(function(){t.props.onEntering(a,u),t.onTransitionEnd(s,(function(){t.safeSetState({status:Hm},(function(){t.props.onEntered(a,u)}))}))})))},n.performExit=function(){var e=this,t=this.props.exit,n=this.getTimeouts(),r=this.props.nodeRef?void 0:o.findDOMNode(this);t&&!Mm?(this.props.onExit(r),this.safeSetState({status:qm},(function(){e.props.onExiting(r),e.onTransitionEnd(n.exit,(function(){e.safeSetState({status:Um},(function(){e.props.onExited(r)}))}))}))):this.safeSetState({status:Um},(function(){e.props.onExited(r)}))},n.cancelNextCallback=function(){null!==this.nextCallback&&(this.nextCallback.cancel(),this.nextCallback=null)},n.safeSetState=function(e,t){t=this.setNextCallback(t),this.setState(e,t)},n.setNextCallback=function(e){var t=this,n=!0;return this.nextCallback=function(r){n&&(n=!1,t.nextCallback=null,e(r))},this.nextCallback.cancel=function(){n=!1},this.nextCallback},n.onTransitionEnd=function(e,t){this.setNextCallback(t);var n=this.props.nodeRef?this.props.nodeRef.current:o.findDOMNode(this),r=null==e&&!this.props.addEndListener;if(n&&!r){if(this.props.addEndListener){var i=this.props.nodeRef?[this.nextCallback]:[n,this.nextCallback],a=i[0],u=i[1];this.props.addEndListener(a,u)}null!=e&&setTimeout(this.nextCallback,e)}else setTimeout(this.nextCallback,0)},n.render=function(){var e=this.state.status;if(e===Fm)return null;var t=this.props,n=t.children,o=(t.in,t.mountOnEnter,t.unmountOnExit,t.appear,t.enter,t.exit,t.timeout,t.addEndListener,t.onEnter,t.onEntering,t.onEntered,t.onExit,t.onExiting,t.onExited,t.nodeRef,(0,vh.Z)(t,["children","in","mountOnEnter","unmountOnExit","appear","enter","exit","timeout","addEndListener","onEnter","onEntering","onEntered","onExit","onExiting","onExited","nodeRef"]));return r.createElement(Im.Provider,{value:null},"function"==typeof n?n(e,o):r.cloneElement(r.Children.only(n),o))},t}(r.Component);function Gm(){}zm.contextType=Im,zm.propTypes={},zm.defaultProps={in:!1,mountOnEnter:!1,unmountOnExit:!1,appear:!1,enter:!0,exit:!0,onEnter:Gm,onEntering:Gm,onEntered:Gm,onExit:Gm,onExiting:Gm,onExited:Gm},zm.UNMOUNTED=Fm,zm.EXITED=Um,zm.ENTERING=Bm,zm.ENTERED=Hm,zm.EXITING=qm;const Wm=zm;var Vm=function(e,t){return e&&t&&t.split(" ").forEach((function(t){return r=t,void((n=e).classList?n.classList.remove(r):"string"==typeof n.className?n.className=Dm(n.className,r):n.setAttribute("class",Dm(n.className&&n.className.baseVal||"",r)));var n,r}))},Ym=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).appliedClasses={appear:{},enter:{},exit:{}},t.onEnter=function(e,n){var r=t.resolveArguments(e,n),o=r[0],i=r[1];t.removeClasses(o,"exit"),t.addClass(o,i?"appear":"enter","base"),t.props.onEnter&&t.props.onEnter(e,n)},t.onEntering=function(e,n){var r=t.resolveArguments(e,n),o=r[0],i=r[1]?"appear":"enter";t.addClass(o,i,"active"),t.props.onEntering&&t.props.onEntering(e,n)},t.onEntered=function(e,n){var r=t.resolveArguments(e,n),o=r[0],i=r[1]?"appear":"enter";t.removeClasses(o,i),t.addClass(o,i,"done"),t.props.onEntered&&t.props.onEntered(e,n)},t.onExit=function(e){var n=t.resolveArguments(e)[0];t.removeClasses(n,"appear"),t.removeClasses(n,"enter"),t.addClass(n,"exit","base"),t.props.onExit&&t.props.onExit(e)},t.onExiting=function(e){var n=t.resolveArguments(e)[0];t.addClass(n,"exit","active"),t.props.onExiting&&t.props.onExiting(e)},t.onExited=function(e){var n=t.resolveArguments(e)[0];t.removeClasses(n,"exit"),t.addClass(n,"exit","done"),t.props.onExited&&t.props.onExited(e)},t.resolveArguments=function(e,n){return t.props.nodeRef?[t.props.nodeRef.current,e]:[e,n]},t.getClassNames=function(e){var n=t.props.classNames,r="string"==typeof n,o=r?""+(r&&n?n+"-":"")+e:n[e];return{baseClassName:o,activeClassName:r?o+"-active":n[e+"Active"],doneClassName:r?o+"-done":n[e+"Done"]}},t}(0,km.Z)(t,e);var n=t.prototype;return n.addClass=function(e,t,n){var r=this.getClassNames(t)[n+"ClassName"],o=this.getClassNames("enter").doneClassName;"appear"===t&&"done"===n&&o&&(r+=" "+o),"active"===n&&e&&e.scrollTop,r&&(this.appliedClasses[t][n]=r,function(e,t){e&&t&&t.split(" ").forEach((function(t){return r=t,void((n=e).classList?n.classList.add(r):function(e,t){return e.classList?!!t&&e.classList.contains(t):-1!==(" "+(e.className.baseVal||e.className)+" ").indexOf(" "+t+" ")}(n,r)||("string"==typeof n.className?n.className=n.className+" "+r:n.setAttribute("class",(n.className&&n.className.baseVal||"")+" "+r)));var n,r}))}(e,r))},n.removeClasses=function(e,t){var n=this.appliedClasses[t],r=n.base,o=n.active,i=n.done;this.appliedClasses[t]={},r&&Vm(e,r),o&&Vm(e,o),i&&Vm(e,i)},n.render=function(){var e=this.props,t=(e.classNames,(0,vh.Z)(e,["classNames"]));return r.createElement(Wm,(0,mh.Z)({},t,{onEnter:this.onEnter,onEntered:this.onEntered,onEntering:this.onEntering,onExit:this.onExit,onExiting:this.onExiting,onExited:this.onExited}))},t}(r.Component);Ym.defaultProps={classNames:""},Ym.propTypes={};const Zm=Ym;function $m(e){return($m="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Km(){Km=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==$m(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}function Qm(e,t,n,r,o,i,a){try{var u=e[i](a),c=u.value}catch(e){return void n(e)}u.done?t(c):Promise.resolve(c).then(r,o)}function Xm(e){return function(){var t=this,n=arguments;return new Promise((function(r,o){var i=e.apply(t,n);function a(e){Qm(i,r,o,a,u,"next",e)}function u(e){Qm(i,r,o,a,u,"throw",e)}a(void 0)}))}}function Jm(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function ev(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function tv(e,t){return(tv=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function nv(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=ov(e);if(t){var o=ov(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return rv(this,n)}}function rv(e,t){if(t&&("object"===$m(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function ov(e){return(ov=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var iv=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&tv(e,t)}(a,e);var t,n,o,i=nv(a);function a(){var e;Jm(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).installExtension=function(){var t=Xm(Km().mark((function t(n){var r;return Km().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return r=e.props.install,n.preventDefault(),n.stopPropagation(),t.next=5,r();case 5:return t.abrupt("return",!1);case 6:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),e.uninstallAddon=function(t){var n=e.props,r=n.addon,o=n.uninstall,i=r.guid,a=r.name,u=r.type;return t.preventDefault(),t.stopPropagation(),o({guid:i,name:a,type:u}),!1},e.enableAddon=function(t){var n=e.props.enable;return t.preventDefault(),t.stopPropagation(),n(),!1},e}return t=a,(n=[{key:"showLoadingAnimation",value:function(){var e=this.props.status;return[D.iq,D.UZ,D.g,D.ZP,D.Mg].includes(e)}},{key:"getButtonText",value:function(){var e=this.props,t=e.addon,n=e.i18n,r=e.status,o=e.defaultButtonText;switch(r){case D.rr:return n.gettext("Enable");case D.Hi:case D.e_:return n.gettext("Remove");case D.g:return n.gettext("Enabling");case D.iq:return n.gettext("Disabling");case D.UZ:return n.gettext("Downloading");case D.ZP:return n.gettext("Installing");case D.Mg:return n.gettext("Uninstalling");case D.zK:default:return o||(D.Yd===t.type?n.gettext("Install Theme"):n.gettext("Add to Firefox"))}}},{key:"render",value:function(){var e=this.props,t=e.canUninstall,n=e.className,o=e.currentVersion,i=e.disabled,a=e.hasAddonManager,u=e.status,c=o&&o.file?o.file.url:void 0,s=!0===i||!c||a&&u===D.lz;ce()(void 0!==this.props.puffy,"puffy prop is required");var l={buttonType:"action",className:"AMInstallButton-button",disabled:s,href:c,onClick:a?function(e){return e.preventDefault(),e.stopPropagation(),!1}:null,puffy:this.props.puffy};s||([D.Hi,D.e_].includes(u)?(l.buttonType="neutral",l.className=Ho()(l.className,"AMInstallButton-button--uninstall"),!1===t?l.disabled=!0:l.onClick=this.uninstallAddon):u===D.rr?(l.buttonType="neutral",l.onClick=this.enableAddon,l.className=Ho()(l.className,"AMInstallButton-button--enable")):a&&(l.onClick=this.installExtension));var f={classNames:"AMInstallButton-transition",timeout:150},p=this.getButtonText();return r.createElement(Lm,{className:Ho()("AMInstallButton",n)},this.showLoadingAnimation()?r.createElement(Zm,Object.assign({key:"loading"},f),r.createElement("div",{className:Ho()("AMInstallButton-loading-button",{"AMInstallButton-loading-button--puffy":this.props.puffy}),title:p},r.createElement("div",{className:"AMInstallButton-loader"},r.createElement("div",{className:"AMInstallButton-loader-container"},r.createElement("div",{className:"AMInstallButton-loader-ball"})),r.createElement("span",{className:"visually-hidden"},p)))):r.createElement(Zm,Object.assign({key:"button"},f),r.createElement(Dc,l,p)))}}])&&ev(t.prototype,n),o&&ev(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);iv.defaultProps={_config:t.Z,_log:L.Z,_window:"undefined"!=typeof window?window:{},puffy:!0};const av=(0,Mo.qC)(Eu())(iv);var uv=a(39735);function cv(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function sv(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var lv="AMO Download Firefox",fv=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.addonId,n=D.Bg;return t&&(n="".concat(n,"-").concat(t)),n},pv=function(e){var t=e._encode,n=void 0===t?uv.cv:t,r=e._getDownloadCampaign,o=void 0===r?fv:r,i=e.addon,a=e.overrideQueryParams,u=void 0===a?{}:a;return"".concat(D.rZ).concat(fn(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?cv(Object(n),!0).forEach((function(t){sv(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):cv(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({utm_campaign:o({addonId:i&&i.id}),utm_content:i&&i.guid?"rta:".concat(n(i.guid)):"",s:"direct"},u)))};const dv=(0,Mo.qC)((0,g.connect)((function(e){return{clientApp:e.api.clientApp,userAgentInfo:e.api.userAgentInfo}})),Eu())((function(e){var t=e._encode,n=void 0===t?uv.cv:t,o=e._tracking,i=void 0===o?pr:o,a=e.addon,u=e.className,c=e.clientApp,s=e.forIncompatibleAddon,l=e.i18n,f=e.overrideQueryParams,p=void 0===f?{}:f,d=e.userAgentInfo;ce()(!Pf({userAgentInfo:d})||s,"The download button should not be rendered on Firefox unless the add-on\n is incompatible.");var h=c===D.So,y=a.type===D.Yd?l.gettext("Download Firefox and get the theme"):l.gettext("Download Firefox and get the extension");s&&(y=a.type===D.Yd?l.gettext("Download the new Firefox and get the theme"):l.gettext("Download the new Firefox and get the extension"));var m=h?y:l.gettext("Download Firefox"),v=a.type===D.Yd?l.gettext("You'll need Firefox to use this theme"):l.gettext("You'll need Firefox to use this extension");s&&(v=a.type===D.Yd?l.gettext("You need an updated version of Firefox for this theme"):l.gettext("You need an updated version of Firefox for this extension"));var g=r.createElement(Dc,{buttonType:"action",className:"GetFirefoxButton-button",href:pv({_encode:n,addon:a,overrideQueryParams:p}),onClick:function(){i.sendEvent({action:"download-firefox-click",category:lv,label:a.guid})},puffy:!0},m);return r.createElement("div",{className:Ho()("GetFirefoxButton",u)},r.createElement("div",{className:"GetFirefoxButton-callout"},r.createElement("div",{className:"GetFirefoxButton-callout-icon"}),r.createElement("div",{className:"GetFirefoxButton-callout-text"},v)),g)}));function hv(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function yv(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?hv(Object(n),!0).forEach((function(t){mv(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):hv(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function mv(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function vv(e){return{type:D.tX,payload:e}}var gv=function(e){var t=e.guid,n=e.error;return ce()(t,"guid is required"),{type:D.Rq,payload:{guid:t,error:n}}};var bv=a(77565);function wv(e){return(wv="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var Ov,Ev=["WrappedComponent","_addonManager"];function _v(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function xv(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Sv(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?xv(Object(n),!0).forEach((function(t){jv(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):xv(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function jv(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Pv(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function kv(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Iv(e,t){return(Iv=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Tv(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Cv(e);if(t){var o=Cv(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Rv(this,n)}}function Rv(e,t){if(t&&("object"===wv(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Cv(e){return(Cv=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Av=function(t){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Iv(e,t)}(u,t);var n,o,i,a=Tv(u);function u(){return Pv(this,u),a.apply(this,arguments)}return n=u,(o=[{key:"componentDidMount",value:function(){this.setCurrentStatus()}},{key:"componentDidUpdate",value:function(e){var t=e.addon?e.addon.guid:null,n=this.props.addon?this.props.addon.guid:null;n&&n!==t&&(this.props._log.info("Updating add-on status"),this.setCurrentStatus())}},{key:"setCurrentStatus",value:function(){var t=this.props,n=t._addonManager,r=t._log,o=t.addon,i=t.currentVersion,a=t.dispatch;if(!n.hasAddonManager())return r.info("No addon manager, cannot set add-on status"),Promise.resolve();if(!o)return r.debug("no addon, aborting setCurrentStatus()"),Promise.resolve();if(!i)return r.debug("no currentVersion, aborting setCurrentStatus()"),Promise.resolve();var u=o.guid,c=o.type,s=i.file;if(!s)return r.debug("no file, aborting setCurrentStatus()"),Promise.resolve();var l={guid:u,url:s.url};return r.info("Setting add-on status"),n.getAddon(u).then((function(e){var t=n.getAddonStatus({addon:e,type:c});a(vv(Sv(Sv({},l),{},{status:t,canUninstall:e.canUninstall})))}),(function(t){var n,o;r.info((0,e.f9)(Ov||(n=['Add-on "','" not found so setting status to\n UNINSTALLED; exact error: ',""],o||(o=n.slice(0)),Ov=Object.freeze(Object.defineProperties(n,{raw:{value:Object.freeze(o)}}))),u,t)),a(vv(Sv(Sv({},l),{},{status:D.un})))})).catch((function(e){r.error("Caught error from addonManager: ".concat(e)),a(vv({guid:u,status:D.Kj,error:D.F6}))}))}},{key:"enable",value:function(){var e=this.props,t=e._addonManager,n=e._log,r=e._tracking,o=e.dispatch,i=e.addon;ce()(i,"need an addon to call enable()");var a=i.guid,u=i.type;return t.enable(a).then((function(){r.sendEvent({action:lr(u),category:fr(u,D.H0),label:a})})).catch((function(e){e&&e.message===D.U4?n.info("addon.setEnabled not available. Unable to enable ".concat(a)):(n.error("Error while trying to enable ".concat(a,": %o"),e),o(vv({guid:a,status:D.Kj,error:D.F6})))}))}},{key:"install",value:function(){var e=this.props,t=e._addonManager,n=e._log,r=e._tracking,o=e.addon,i=e.currentVersion,a=e.dispatch;ce()(o,"need an addon to call install()"),ce()(i,"need a currentVersion to call install()");var u=o.guid,c=o.name,s=o.type,l=i.file;return l?new Promise((function(e){a({type:D.hi,payload:{guid:u}}),r.sendEvent({action:lr(s),category:fr(s,D.gQ),label:u}),e(l.url)})).then((function(e){var n=zs({addon:o,installURL:e,version:i});return t.install(e||"",function(e){var t=e._tracking,n=e.dispatch,r=e.guid,o=e.type;return function(e,i){if("STATE_DOWNLOADING"===e.state){var a=parseInt(100*e.progress/e.maxProgress,10);n({type:D.HR,payload:{guid:r,downloadProgress:a}})}else"onDownloadEnded"===i.type?n(vv({guid:r,status:D.ZP})):"onDownloadFailed"===i.type?i.target&&i.target.error===D._y?n(gv({guid:r,error:D._y})):(n(gv({guid:r,error:D.Vg})),t.sendEvent({action:lr(o),category:fr(o,D.nl),label:r})):"onInstallCancelled"===i.type?(n({type:D.zl,payload:{guid:r}}),t.sendEvent({action:lr(o),category:fr(o,D.lm),label:r})):"onInstallFailed"===i.type&&n(gv({guid:r,error:D.DE}))}}({_tracking:r,dispatch:a,guid:u,name:c,type:s}),{hash:n})})).then((function(){r.sendEvent({action:lr(s),category:fr(s,D.zi),label:u})})).catch((function(e){n.error("Install error: ".concat(e)),a(gv({guid:u,error:D.pl}))})):(n.debug("no file found, aborting install()."),Promise.resolve())}},{key:"uninstall",value:function(e){var t=e.guid,n=e.type,r=this.props,o=r._addonManager,i=r._log,a=r._tracking,u=r.dispatch;u(vv({guid:t,status:D.Mg}));var c=lr(n);return o.uninstall(t).then((function(){a.sendEvent({action:c,category:fr(n,D.VN),label:t})})).catch((function(e){i.error("Uninstall error: ".concat(e)),u(gv({guid:t,error:D.hY}))}))}},{key:"render",value:function(){var e=this,t=this.props,n=t.WrappedComponent,o=t._addonManager,i=_v(t,Ev),a={enable:function(){return e.enable.apply(e,arguments)},hasAddonManager:o.hasAddonManager(),install:function(){return e.install.apply(e,arguments)},setCurrentStatus:function(){return e.setCurrentStatus.apply(e,arguments)},uninstall:function(){return e.uninstall.apply(e,arguments)}};return r.createElement(n,Object.assign({},a,i))}}])&&kv(n.prototype,o),i&&kv(n,i),Object.defineProperty(n,"prototype",{writable:!1}),u}(r.Component);Av.defaultProps={_addonManager:bv,_log:L.Z,_tracking:pr};const Nv=(0,Mo.qC)(No,(function(e){Av.displayName="WithInstallHelpers(".concat(Rn(e),")");return(0,g.connect)((function(t,n){var r=n.addon;ce()(void 0!==r,"addon is required");var o=n.version;return o||(o=r&&r.currentVersionId?mf({id:r.currentVersionId,state:t.versions}):null),{WrappedComponent:e,currentVersion:o}}))(Av)}),(0,g.connect)((function(e,t){var n=t.addon,r=t.version,o=n&&e.installations[n.guid]||{},i=r||null;return n&&n.currentVersionId&&!i&&(i=mf({id:n.currentVersionId,state:e.versions})),{canUninstall:o.canUninstall,clientApp:e.api.clientApp,currentVersion:i,installStatus:o.status||D.lz,userAgentInfo:e.api.userAgentInfo}})),Eu())((function(e){var t=e._getClientCompatibility,n=void 0===t?Cf:t,o=e.addon,i=e.canUninstall,a=e.className,u=e.clientApp,c=e.currentVersion,s=e.defaultButtonText,l=e.enable,f=e.hasAddonManager,p=e.i18n,d=e.install,h=e.installStatus,y=e.puffy,m=e.setCurrentStatus,v=e.showLinkInsteadOfButton,g=e.uninstall,b=e.userAgentInfo,w=Pf({userAgentInfo:b}),O=!1,E=w,_=!w,x=!1;if(o&&w){var S=n({addon:o,currentVersion:c,clientApp:u,userAgentInfo:b});(O=S.compatible)||[D.op,D.Px,D.T3,D.CK,D.YE].includes(S.reason)||(x=!0,E=!1,_=!0)}var j=c&&c.file?c.file.url:void 0,P=!O&&j;return o&&r.createElement("div",{className:"InstallButtonWrapper"},!v&&r.createElement(r.Fragment,null,E?r.createElement(av,{addon:o,canUninstall:i,className:Ho()(a?"AMInstallButton--".concat(a):"",{"AMInstallButton--noDownloadLink":!P}),currentVersion:c,defaultButtonText:s,disabled:!O,enable:l,hasAddonManager:f,install:d,puffy:y,setCurrentStatus:m,status:h,uninstall:g}):null,_?r.createElement(dv,{addon:o,className:a?"GetFirefoxButton--".concat(a):"",forIncompatibleAddon:x}):null),P||v?r.createElement("div",{className:"InstallButtonWrapper-download"},r.createElement("a",{className:"InstallButtonWrapper-download-link",href:j},p.gettext("Download file"))):null)}));function Lv(e){return(Lv="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Dv(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Mv(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Fv(e,t){return(Fv=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Uv(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Hv(e);if(t){var o=Hv(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Bv(this,n)}}function Bv(e,t){if(t&&("object"===Lv(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Hv(e){return(Hv=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var qv=hn({utm_content:"install-warning"}),zv=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Fv(e,t)}(a,e);var t,n,o,i=Uv(a);function a(){var e;Dv(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).couldShowWarning=function(){var t=e.props,n=t._correctedLocationForPlatform,r=t._getPromotedCategory,o=t.addon,i=t.clientApp,a=t.lang,u=t.location,c=t.userAgentInfo,s=n({clientApp:i,lang:a,location:u,userAgentInfo:c}),l=r({addon:o,clientApp:i});return!s&&Pf({userAgentInfo:c})&&i===D.So&&o.type===D.Gz&&(!l||!D.W8.includes(l))},e}return t=a,(n=[{key:"render",value:function(){var e=this.props.i18n;return this.couldShowWarning()?r.createElement(Jc,{actionHref:qv,actionTarget:"_blank",actionText:e.gettext("Learn more"),className:"InstallWarning",type:Zc},e.gettext("This add-on is not actively monitored for security by Mozilla. Make sure you trust it before installing.")):null}}])&&Mv(t.prototype,n),o&&Mv(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);zv.defaultProps={_correctedLocationForPlatform:Nf,_getPromotedCategory:Gs};const Gv=(0,Mo.qC)(No,(0,g.connect)((function(e){return{clientApp:e.api.clientApp,lang:e.api.lang,userAgentInfo:e.api.userAgentInfo}})),Eu())(zv);function Wv(e){return(Wv="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Vv(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Yv(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Zv(e,t){return(Zv=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function $v(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Qv(e);if(t){var o=Qv(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Kv(this,n)}}function Kv(e,t){if(t&&("object"===Wv(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Qv(e){return(Qv=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Xv=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Zv(e,t)}(a,e);var t,n,o,i=$v(a);function a(){return Vv(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e,t=this.props,n=t.i18n,o=t.siteIsReadOnly,i=t.siteNotice,a=t.currentUserWasLoggedOut,u=[];return i&&u.push(r.createElement(Jc,{className:"SiteNotices",id:"amo-site-notice",type:"warning",key:"amo-site-notice"},r.createElement("span",{dangerouslySetInnerHTML:(e=i,vn(gn(e),["a","b","br","em","i","strong"]))}))),o&&u.push(r.createElement(Jc,{className:"SiteNotices",id:"amo-site-read-only",type:"warning",key:"amo-site-read-only"},n.gettext("Some features are temporarily disabled while we\n perform website maintenance. We'll be back to full capacity\n shortly."))),a&&u.push(r.createElement(Jc,{className:"SiteNotices",id:"user-was-logged-out",type:"warning",key:"user-was-logged-out"},n.gettext("You have been logged out."))),u}}])&&Yv(t.prototype,n),o&&Yv(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const Jv=(0,Mo.qC)((0,g.connect)((function(e){return{siteIsReadOnly:e.site.readOnly,siteNotice:e.site.notice,currentUserWasLoggedOut:e.users.currentUserWasLoggedOut}})),Eu())(Xv);const eg=function(e){var t=e.className;return r.createElement("div",{className:Ho()("AppBanner",t)},r.createElement(Jv,null))};function tg(e){return(tg="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function ng(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function rg(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function og(e,t){return(og=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function ig(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=ug(e);if(t){var o=ug(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return ag(this,n)}}function ag(e,t){if(t&&("object"===tg(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function ug(e){return(ug=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var cg=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&og(e,t)}(a,e);var t,n,o,i=ig(a);function a(){return ng(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.children,n=e.className,o=e.code,i=e.header;return ce()(t,"children is required"),ce()(i,"header is required"),ce()([400,401,404,451,500].includes(o),"a valid error code is required"),r.createElement(Do(),{code:o},r.createElement(js,{className:Ho()("Errors",n,{NotAuthorized:401===o,NotFound:404===o,UnavailableForLegalReasons:451===o,ServerError:500===o}),header:i},t))}}])&&rg(t.prototype,n),o&&rg(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);function sg(e){return(sg="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function lg(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function fg(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function pg(e,t){return(pg=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function dg(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=yg(e);if(t){var o=yg(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return hg(this,n)}}function hg(e,t){if(t&&("object"===sg(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function yg(e){return(yg=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var mg=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&pg(e,t)}(a,e);var t,n,o,i=dg(a);function a(){return lg(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"componentDidMount",value:function(){(0,this.props.dispatch)(Ze())}},{key:"render",value:function(){var e=this.props,t=e._window,n=e.i18n,o=ie({text:n.gettext("\n Login authentication has expired. %(startLink)sReload the page%(endLink)s\n to continue without authentication, or login again using the Log In\n link at the top of the page."),replacements:[["startLink","endLink",function(e){return r.createElement(wc,{className:"ReloadPageLink",onClick:function(){return t.location.reload()},href:"#",prependClientApp:!1,prependLang:!1},e)}]]});return r.createElement(cg,{code:401,header:n.gettext("Login Expired")},r.createElement("p",null,o))}}])&&fg(t.prototype,n),o&&fg(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);mg.defaultProps={_window:"undefined"!=typeof window?window:{}};const vg=(0,Mo.qC)((0,g.connect)(),Eu())(mg);function gg(e){return(gg="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function bg(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function wg(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Og(e,t){return(Og=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Eg(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=xg(e);if(t){var o=xg(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return _g(this,n)}}function _g(e,t){if(t&&("object"===gg(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function xg(e){return(xg=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Sg=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Og(e,t)}(a,e);var t,n,o,i=Eg(a);function a(){return bg(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props.i18n,t=ie({text:e.gettext("Try visiting the page later, as the theme or extension may become\n available again. Alternatively, you may be able to find what you’re\n looking for in one of the available\n %(extensionStart)sextensions%(extensionEnd)s or\n %(themeStart)sthemes%(themeEnd)s, or by asking for help on our\n %(communityStart)scommunity forums%(communityEnd)s."),replacements:[["extensionStart","extensionEnd",function(e){return r.createElement(wc,{key:"link-extensions",to:"/".concat(xn(D.Gz),"/")},e)}],["themeStart","themeEnd",function(e){return r.createElement(wc,{key:"link-themes",to:"/".concat(xn(D.Yd),"/")},e)}],["communityStart","communityEnd",function(e){return r.createElement(wc,{key:"link-community",href:"https://discourse.mozilla.org/c/add-ons",prependClientApp:!1,prependLang:!1},e)}]]});return r.createElement(cg,{code:404,header:e.gettext("Oops! We can’t find that page")},r.createElement("p",null,e.gettext("If you’ve followed a link from another site for an\n extension or theme, that item is no longer available. This could\n be because:")),r.createElement("ul",null,r.createElement("li",null,e.gettext("The developer removed it. Developers commonly do\n this because they no longer support the extension or theme, or\n have replaced it.")),r.createElement("li",null,e.gettext("Mozilla removed it. This can happen when issues\n are found during the review of the extension or theme, or the\n extension or theme has been abusing the terms and conditions\n for addons.mozilla.org. The developer has the opportunity to\n resolve the issues and make the add-on available again."))),r.createElement("p",{className:"Errors-paragraph-with-links"},t))}}])&&wg(t.prototype,n),o&&wg(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const jg=(0,Mo.qC)(Eu())(Sg);function Pg(e){return(Pg="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function kg(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Ig(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Tg(e,t){return(Tg=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Rg(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Ag(e);if(t){var o=Ag(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Cg(this,n)}}function Cg(e,t){if(t&&("object"===Pg(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Ag(e){return(Ag=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Ng=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Tg(e,t)}(a,e);var t,n,o,i=Rg(a);function a(){return kg(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props.i18n,t=ie({text:e.gettext("You may be able to find what you’re looking for in one of the available\n %(extensionStart)sextensions%(extensionEnd)s or\n %(themeStart)sthemes%(themeEnd)s, or by asking for help on our\n %(communityStart)scommunity forums%(communityEnd)s."),replacements:[["extensionStart","extensionEnd",function(e){return r.createElement(wc,{key:"link-extensions",to:"/".concat(xn(D.Gz),"/")},e)}],["themeStart","themeEnd",function(e){return r.createElement(wc,{key:"link-themes",to:"/".concat(xn(D.Yd),"/")},e)}],["communityStart","communityEnd",function(e){return r.createElement(wc,{key:"link-community",href:"https://discourse.mozilla.org/c/add-ons",prependClientApp:!1,prependLang:!1},e)}]]});return r.createElement(cg,{code:451,header:e.gettext("That page is not available in your region")},r.createElement("p",null,e.gettext("The page you tried to access is not available in your region.")),r.createElement("p",{className:"Errors-paragraph-with-links"},t))}}])&&Ig(t.prototype,n),o&&Ig(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const Lg=(0,Mo.qC)(Eu())(Ng);function Dg(e){return(Dg="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Mg(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Fg(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Ug(e,t){return(Ug=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Bg(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=qg(e);if(t){var o=qg(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Hg(this,n)}}function Hg(e,t){if(t&&("object"===Dg(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function qg(e){return(qg=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var zg=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Ug(e,t)}(a,e);var t,n,o,i=Bg(a);function a(){var e;Mg(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).onChange=function(t){t.preventDefault(),e.changeLanguage(t.target.value)},e}return t=a,(n=[{key:"changeLanguage",value:function(e){var t=this.props,n=t.currentLocale,r=t.location,o=t._window;if(n!==e){var i=function(e){var t=e.currentLocale,n=e.location,r=e.newLocale;return Ut(n.pathname.replace(new RegExp("^/".concat(t,"/")),"/".concat(r,"/")),n.query)}({currentLocale:n,location:r,newLocale:e});(o||window).location=i}}},{key:"render",value:function(){var e=this.props,t=e.currentLocale,n=e.i18n;return r.createElement("div",{className:"LanguagePicker"},r.createElement("label",{htmlFor:"lang-picker",className:"LanguagePicker-header"},n.gettext("Change language")),r.createElement("select",{className:"LanguagePicker-selector",defaultValue:t,id:"lang-picker",onChange:this.onChange},Object.keys(_e).map((function(e){return r.createElement("option",{key:e,value:e},_e[e].native)}))))}}])&&Fg(t.prototype,n),o&&Fg(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);zg.propTypes={currentLocale:w().string.isRequired,i18n:w().object.isRequired,location:w().object.isRequired,_window:w().object};const Gg=(0,Mo.qC)(No,(0,g.connect)((function(e){return{currentLocale:e.api.lang}})),Eu())(zg);function Wg(e){return(Wg="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Vg(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Yg(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Zg(e,t){return(Zg=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function $g(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Qg(e);if(t){var o=Qg(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Kg(this,n)}}function Kg(e,t){if(t&&("object"===Wg(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Qg(e){return(Qg=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Xg=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Zg(e,t)}(a,e);var t,n,o,i=$g(a);function a(){return Vg(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e._config,n=e.i18n,o=e.noLangPicker,i=n.gettext("Go to Mozilla's homepage");return r.createElement("footer",{className:"Footer"},r.createElement("div",{className:"Footer-wrapper"},r.createElement("div",{className:"Footer-mozilla-link-wrapper"},r.createElement("a",{className:"Footer-mozilla-link",href:"https://mozilla.org/",title:i},r.createElement(ac,{alt:i,className:"Footer-mozilla-logo",name:"mozilla"}))),r.createElement("section",{className:"Footer-amo-links"},r.createElement("h4",{className:"Footer-links-header"},r.createElement(wc,{href:"/"},n.gettext("Add-ons"))),r.createElement("ul",{className:"Footer-links"},r.createElement("li",null,r.createElement(wc,{to:"/about",prependClientApp:!1},n.gettext("About"))),r.createElement("li",null,r.createElement("a",{className:"Footer-blog-link",href:"/blog/"},n.gettext("Firefox Add-ons Blog"))),r.createElement("li",null,r.createElement("a",{className:"Footer-extension-workshop-link",href:"".concat(t.get("extensionWorkshopUrl"),"/").concat(fn({utm_content:"footer-link",utm_campaign:null}))},n.gettext("Extension Workshop"))),r.createElement("li",null,r.createElement(wc,{href:"/developers/",prependClientApp:!1},n.gettext("Developer Hub"))),r.createElement("li",null,r.createElement("a",{className:"Footer-developer-policies-link",href:"".concat(t.get("extensionWorkshopUrl"),"/documentation/publish/add-on-policies/").concat(fn({utm_medium:"photon-footer",utm_campaign:null}))},n.gettext("Developer Policies"))),r.createElement("li",null,r.createElement("a",{className:"Footer-community-blog-link",href:"https://blog.mozilla.com/addons".concat(fn({utm_campaign:null,utm_content:"footer-link",utm_medium:"referral"}))},n.gettext("Community Blog"))),r.createElement("li",null,r.createElement("a",{href:"https://discourse.mozilla-community.org/c/add-ons"},n.gettext("Forum"))),r.createElement("li",null,r.createElement("a",{className:"Footer-bug-report-link",href:"https://developer.mozilla.org/docs/Mozilla/Add-ons/Contact_us"},n.gettext("Report a bug"))),r.createElement("li",null,r.createElement(wc,{to:"/review_guide",prependClientApp:!1},n.gettext("Review Guide"))))),r.createElement("section",{className:"Footer-browsers-links"},r.createElement("h4",{className:"Footer-links-header"},n.gettext("Browsers")),r.createElement("ul",{className:"Footer-links"},r.createElement("li",null,r.createElement("a",{className:"Footer-desktop-link",href:"https://www.mozilla.org/firefox/new/".concat(fn({utm_content:"footer-link",utm_campaign:null}))},"Desktop")),r.createElement("li",null,r.createElement("a",{className:"Footer-mobile-link",href:"https://www.mozilla.org/firefox/mobile/".concat(fn({utm_content:"footer-link",utm_campaign:null}))},"Mobile")),r.createElement("li",null,r.createElement("a",{className:"Footer-enterprise-link",href:"https://www.mozilla.org/firefox/enterprise/".concat(fn({utm_content:"footer-link",utm_campaign:null}))},"Enterprise")))),r.createElement("section",{className:"Footer-product-links"},r.createElement("h4",{className:"Footer-links-header"},n.gettext("Products")),r.createElement("ul",{className:"Footer-links"},r.createElement("li",null,r.createElement("a",{className:"Footer-browsers-link",href:"https://www.mozilla.org/firefox/browsers/".concat(fn({utm_content:"footer-link",utm_campaign:null}))},"Browsers")),r.createElement("li",null,r.createElement("a",{className:"Footer-vpn-link",href:"https://www.mozilla.org/products/vpn/".concat(fn({utm_content:"footer-link",utm_campaign:null}),"#pricing")},"VPN")),r.createElement("li",null,r.createElement("a",{className:"Footer-relay-link",href:"https://relay.firefox.com/".concat(fn({utm_content:"footer-link",utm_campaign:null}))},"Relay")),r.createElement("li",null,r.createElement("a",{className:"Footer-monitor-link",href:"https://monitor.firefox.com/".concat(fn({utm_content:"footer-link",utm_campaign:null}))},"Monitor")),r.createElement("li",null,r.createElement("a",{className:"Footer-pocket-link",href:"https://getpocket.com".concat(fn({utm_content:"footer-link",utm_campaign:null}))},"Pocket"))),r.createElement("ul",{className:"Footer-links Footer-links-social"},r.createElement("li",{className:"Footer-link-social"},r.createElement("a",{href:"https://twitter.com/firefox"},r.createElement(ac,{name:"twitter",alt:"Twitter (@firefox)"}))),r.createElement("li",{className:"Footer-link-social"},r.createElement("a",{href:"https://www.instagram.com/firefox/"},r.createElement(ac,{name:"instagram",alt:"Instagram (Firefox)"}))),r.createElement("li",{className:"Footer-link-social"},r.createElement("a",{href:"https://www.youtube.com/firefoxchannel"},r.createElement(ac,{name:"youtube",alt:"YouTube (firefoxchannel)"}))))),r.createElement("ul",{className:"Footer-legal-links"},r.createElement("li",null,r.createElement("a",{className:"Footer-privacy-link",href:"https://www.mozilla.org/privacy/websites/"},n.gettext("Privacy"))),r.createElement("li",null,r.createElement("a",{className:"Footer-cookies-link",href:"https://www.mozilla.org/privacy/websites/"},n.gettext("Cookies"))),r.createElement("li",null,r.createElement("a",{className:"Footer-legal-link",href:"https://www.mozilla.org/about/legal/terms/mozilla/"},n.gettext("Legal")))),r.createElement("p",{className:"Footer-copyright",dangerouslySetInnerHTML:vn(n.sprintf(n.gettext("Except where otherwise %(startNotedLink)snoted%(endNotedLink)s,\n content on this site is licensed under the %(startLicenseLink)sCreative Commons\n Attribution Share-Alike License v3.0%(endLicenseLink)s or any later version."),{startNotedLink:'<a href="https://www.mozilla.org/en-US/about/legal/">',endNotedLink:"</a>",startLicenseLink:'<a href="https://creativecommons.org/licenses/by-sa/3.0/">',endLicenseLink:"</a>"}),["a"])}),!o&&r.createElement("div",{className:"Footer-language-picker"},r.createElement(Gg,null))))}}])&&Yg(t.prototype,n),o&&Yg(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);Xg.defaultProps={_config:t.Z,noLangPicker:!1};const Jg=(0,Mo.qC)(Eu())(Xg);const eb=(0,Mo.qC)((0,g.connect)((function(e){return{userAgentInfo:e.api.userAgentInfo}})),Eu())((function(e){var t=e._tracking,n=void 0===t?pr:t,o=e.i18n,i=e.userAgentInfo,a=function(){n.sendEvent({action:"download-firefox-banner-click",category:lv})};if(Pf({userAgentInfo:i}))return null;var u={utm_content:"banner-download-button"},c=ie({text:o.gettext("To use these add-ons, you'll need to %(linkStart)sdownload Firefox%(linkEnd)s"),replacements:[["linkStart","linkEnd",function(e){return r.createElement(r.Fragment,null,r.createElement("br",null),r.createElement(Dc,{buttonType:"none",className:"GetFirefoxBanner-button",href:pv({overrideQueryParams:u}),key:"GetFirefoxBanner-button",onClick:a},e))}]]});return r.createElement(Jc,{className:"GetFirefoxBanner",dismissible:!0,id:"GetFirefoxBanner-notice",onDismiss:function(){n.sendEvent({action:"download-firefox-banner-dismiss",category:"AMO Download Firefox Banner"})},type:"warning"},r.createElement("span",{className:"GetFirefoxBanner-content"},c))}));a(93857);var tb=a(5241),nb=a.n(tb);const rb=(0,Mo.qC)((0,g.connect)((function(e){return{clientApp:e.api.clientApp}})))((function(e){var t=e._getPromotedCategory,n=void 0===t?Gs:t,o=e.arrowAlt,i=e.clientApp,a=e.loading,u=e.suggestion,c=u.iconUrl,s=u.name,l=u.type,f=n({addon:u,clientApp:i,forBadging:!0});return r.createElement("p",{className:Ho()("SearchSuggestion","SearchSuggestion--".concat(l))},r.createElement("img",{alt:s,className:"SearchSuggestion-icon",src:c}),r.createElement("span",{className:"SearchSuggestion-name"},a?r.createElement(Zp,{minWidth:20}):s),f?r.createElement(Zs,{category:f,className:"SearchSuggestion-icon-promoted",showAlt:!0,size:"small"}):null,r.createElement(ac,{alt:o,className:"SearchSuggestion-icon-arrow",name:"arrow-blue"}))}));function ob(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function ib(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ob(Object(n),!0).forEach((function(t){ab(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ob(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function ab(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var ub="AUTOCOMPLETE_LOADED",cb="AUTOCOMPLETE_STARTED",sb="AUTOCOMPLETE_CANCELLED",lb={lang:"",loading:!1,suggestions:[]};function fb(){return{type:sb}}function pb(e){var t=e.results;return ce()(t,"results are required"),{type:ub,payload:{results:t}}}var db=function(e,t){return{addonId:e.id,iconUrl:Bs(e),name:Yi(e.name,t),promoted:e.promoted,type:e.type,url:e.url}};var hb;function yb(e){return(yb="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function mb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function vb(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?mb(Object(n),!0).forEach((function(t){gb(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):mb(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function gb(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function bb(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function wb(e,t){return(wb=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Ob(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=_b(e);if(t){var o=_b(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Eb(this,n)}}function Eb(e,t){if(t&&("object"===yb(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function _b(e){return(_b=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var xb=100,Sb=function(t){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&wb(e,t)}(u,t);var n,o,i,a=Ob(u);function u(t){var n;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,u),(n=a.call(this,t)).handleSuggestionsClearRequested=function(){n.setState({autocompleteIsOpen:!1}),n.props.dispatch(fb())},n.handleSuggestionsFetchRequested=function(t){var r,o,i=t.value;if(ce()(i,"It should not be possible to have a falsey value"),ce()(i.length<=xb,"It should not be possible to have a value > ".concat(xb)),i.length<2)return L.Z.debug((0,e.f9)(hb||(r=["Ignoring suggestions fetch because query\n does not meet the required length (",")"],o||(o=r.slice(0)),hb=Object.freeze(Object.defineProperties(r,{raw:{value:Object.freeze(o)}}))),2)),void n.props.dispatch(fb());var a=n.createFiltersFromQuery(i);n.setState({autocompleteIsOpen:!0}),n.dispatchAutocompleteStart({filters:a})},n.handleSearch=function(e){e.preventDefault(),n.searchInput&&n.searchInput.blur();var t=n.props.onSearch;t&&t(n.createFiltersFromQuery(n.state.searchValue.trim()))},n.handleSearchChange=function(e,t){var r=t.newValue||"";r.trim().length<=xb&&n.setState({searchValue:r})},n.handleSuggestionSelected=function(e,t){var r=t.suggestion;e.preventDefault(),n.props.loadingSuggestions?L.Z.debug("Ignoring a click on the suggestion while loading"):(n.setState({autocompleteIsOpen:!1,searchValue:""}),n.props.onSuggestionSelected(r))},n.renderSuggestion=function(e){var t=n.props,o=t.loadingSuggestions,i=t.selectSuggestionText;return r.createElement(rb,{arrowAlt:i,loading:o,suggestion:e})},n.dispatchAutocompleteStart=n.props.debounce((function(e){var t=e.filters,r=n.props;(0,r.dispatch)(function(e){var t=e.errorHandlerId,n=e.filters;return ce()(t,"errorHandlerId is required"),ce()(n,"filters are required"),{type:cb,payload:{errorHandlerId:t,filters:n}}}({errorHandlerId:r.errorHandler.id,filters:t}))}),200,{trailing:!0}),n.state={autocompleteIsOpen:!1,searchValue:n.getSearchValueFromProps(t)},n}return n=u,(o=[{key:"getSearchValueFromProps",value:function(e){var t=e.location,n=e.inputName;return t.query&&"string"==typeof t.query[n]&&t.query[n]||""}},{key:"createFiltersFromQuery",value:function(e){var t=this.props.location,n={};return t&&delete(n=Rt(t.query)).page,n.sort&&n.sort===D.wn&&delete n.sort,vb(vb({},n),{},{query:e})}},{key:"getSuggestions",value:function(){return this.props.loadingSuggestions?Array(10).fill({addonId:void 0,iconUrl:Bs(),name:this.props.i18n.gettext("Loading"),promoted:null,url:void 0}):this.props.suggestions}},{key:"render",value:function(){var e=this,t=this.props,n=t.errorHandler,o=t.i18n,i=t.inputLabelText,a=t.inputName,u=t.inputPlaceholder,c=t.showInputLabel,s=this.state.autocompleteIsOpen&&this.getSuggestions().length>0,l={className:"AutoSearchInput-query",id:"AutoSearchInput-".concat(a),maxLength:xb,minLength:2,name:a,onChange:this.handleSearchChange,placeholder:u||o.gettext("Find add-ons"),type:"search",value:this.state.searchValue};return r.createElement("div",{className:Ho()("AutoSearchInput",{"AutoSearchInput--autocompleteIsOpen":s})},n.renderErrorIfPresent(),r.createElement("label",{className:Ho()("AutoSearchInput-label",{"visually-hidden":!c}),htmlFor:l.id},i||o.gettext("Search")),r.createElement("div",{className:"AutoSearchInput-search-box"},r.createElement(ac,{className:"AutoSearchInput-icon-magnifying-glass",name:"magnifying-glass"}),r.createElement(nb(),{focusInputOnSuggestionClick:!1,getSuggestionValue:function(e){return e.name},inputProps:l,onSuggestionsClearRequested:this.handleSuggestionsClearRequested,onSuggestionsFetchRequested:this.handleSuggestionsFetchRequested,onSuggestionSelected:this.handleSuggestionSelected,ref:function(t){t&&(e.searchInput=t.input)},renderSuggestion:this.renderSuggestion,suggestions:this.getSuggestions(),theme:{suggestionContainer:"AutoSearchInput-suggestions",suggestionsList:"AutoSearchInput-suggestions-list",suggestion:"AutoSearchInput-suggestions-item",suggestionHighlighted:"AutoSearchInput-suggestions-item--highlighted"}}),r.createElement("button",{className:"AutoSearchInput-submit-button",onClick:this.handleSearch,type:"submit"},r.createElement("span",{className:"visually-hidden"},o.gettext("Search")),r.createElement(ac,{name:"arrow"}))))}}])&&bb(n.prototype,o),i&&bb(n,i),Object.defineProperty(n,"prototype",{writable:!1}),u}(r.Component);Sb.defaultProps={debounce:yh(),showInputLabel:!0};const jb=(0,Mo.qC)(No,gs({fileName:"src/amo/components/AutoSearchInput/index.js",extractId:function(e){return e.inputName}}),(0,g.connect)((function(e){return{suggestions:e.autocomplete.suggestions,loadingSuggestions:e.autocomplete.loading}})),Eu())(Sb);function Pb(e){return(Pb="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function kb(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Ib(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Tb(e,t){return(Tb=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Rb(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Ab(e);if(t){var o=Ab(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Cb(this,n)}}function Cb(e,t){if(t&&("object"===Pb(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Ab(e){return(Ab=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Nb=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Tb(e,t)}(a,e);var t,n,o,i=Rb(a);function a(){var e;kb(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).onSearch=function(t){e.props.history.push({pathname:e.baseSearchURL(),query:Tt(t)})},e.onSuggestionSelected=function(t){var n=ae.parse(t.url).pathname;n&&e.props.history.push(n)},e}return t=a,(n=[{key:"baseSearchURL",value:function(){var e=this.props,t=e.lang,n=e.clientApp,r=e.pathname;return"/".concat(t,"/").concat(n).concat(r)}},{key:"render",value:function(){var e=this.props,t=e.className,n=e.i18n,o=e.lang,i=e.clientApp,a=i===D.wZ?n.gettext("Firefox Add-ons for Android"):n.gettext("Firefox Add-ons");return r.createElement(r.Fragment,null,r.createElement(Ao,null,r.createElement("link",{title:a,rel:"search",type:"application/opensearchdescription+xml",href:"/".concat(o,"/").concat(i,"/opensearch.xml")})),r.createElement("form",{action:this.baseSearchURL(),className:Ho()("SearchForm",t),method:"GET","data-no-csrf":!0,role:"search"},r.createElement(jb,{inputName:"q",onSearch:this.onSearch,onSuggestionSelected:this.onSuggestionSelected,selectSuggestionText:n.gettext("Go to the add-on page"),showInputLabel:!1})))}}])&&Ib(t.prototype,n),o&&Ib(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const Lb=(0,Mo.qC)(No,(0,g.connect)((function(e){var t=e.api;return{lang:t.lang,clientApp:t.clientApp}})),Eu())(Nb);function Db(e,t){return(Db=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function Mb(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function Fb(e,t,n){return e===t||(e.correspondingElement?e.correspondingElement.classList.contains(n):e.classList.contains(n))}var Ub,Bb,Hb=(void 0===Ub&&(Ub=0),function(){return++Ub}),qb={},zb={},Gb=["touchstart","touchmove"];function Wb(e,t){var n=null;return-1!==Gb.indexOf(t)&&Bb&&(n={passive:!e.props.preventDefault}),n}const Vb=function(e,t){var n,i,a=e.displayName||e.name||"Component";return i=n=function(n){var i,u;function c(e){var r;return(r=n.call(this,e)||this).__outsideClickHandler=function(e){if("function"!=typeof r.__clickOutsideHandlerProp){var t=r.getInstance();if("function"!=typeof t.props.handleClickOutside){if("function"!=typeof t.handleClickOutside)throw new Error("WrappedComponent: "+a+" lacks a handleClickOutside(event) function for processing outside click events.");t.handleClickOutside(e)}else t.props.handleClickOutside(e)}else r.__clickOutsideHandlerProp(e)},r.__getComponentNode=function(){var e=r.getInstance();return t&&"function"==typeof t.setClickOutsideRef?t.setClickOutsideRef()(e):"function"==typeof e.setClickOutsideRef?e.setClickOutsideRef():(0,o.findDOMNode)(e)},r.enableOnClickOutside=function(){if("undefined"!=typeof document&&!zb[r._uid]){void 0===Bb&&(Bb=function(){if("undefined"!=typeof window&&"function"==typeof window.addEventListener){var e=!1,t=Object.defineProperty({},"passive",{get:function(){e=!0}}),n=function(){};return window.addEventListener("testPassiveEventSupport",n,t),window.removeEventListener("testPassiveEventSupport",n,t),e}}()),zb[r._uid]=!0;var e=r.props.eventTypes;e.forEach||(e=[e]),qb[r._uid]=function(e){var t;null!==r.componentNode&&(r.props.preventDefault&&e.preventDefault(),r.props.stopPropagation&&e.stopPropagation(),r.props.excludeScrollbar&&(t=e,document.documentElement.clientWidth<=t.clientX||document.documentElement.clientHeight<=t.clientY)||function(e,t,n){if(e===t)return!0;for(;e.parentNode||e.host;){if(e.parentNode&&Fb(e,t,n))return!0;e=e.parentNode||e.host}return e}(e.composed&&e.composedPath&&e.composedPath().shift()||e.target,r.componentNode,r.props.outsideClickIgnoreClass)===document&&r.__outsideClickHandler(e))},e.forEach((function(e){document.addEventListener(e,qb[r._uid],Wb(Mb(r),e))}))}},r.disableOnClickOutside=function(){delete zb[r._uid];var e=qb[r._uid];if(e&&"undefined"!=typeof document){var t=r.props.eventTypes;t.forEach||(t=[t]),t.forEach((function(t){return document.removeEventListener(t,e,Wb(Mb(r),t))})),delete qb[r._uid]}},r.getRef=function(e){return r.instanceRef=e},r._uid=Hb(),r}u=n,(i=c).prototype=Object.create(u.prototype),i.prototype.constructor=i,Db(i,u);var s=c.prototype;return s.getInstance=function(){if(e.prototype&&!e.prototype.isReactComponent)return this;var t=this.instanceRef;return t.getInstance?t.getInstance():t},s.componentDidMount=function(){if("undefined"!=typeof document&&document.createElement){var e=this.getInstance();if(t&&"function"==typeof t.handleClickOutside&&(this.__clickOutsideHandlerProp=t.handleClickOutside(e),"function"!=typeof this.__clickOutsideHandlerProp))throw new Error("WrappedComponent: "+a+" lacks a function for processing outside click events specified by the handleClickOutside config option.");this.componentNode=this.__getComponentNode(),this.props.disableOnClickOutside||this.enableOnClickOutside()}},s.componentDidUpdate=function(){this.componentNode=this.__getComponentNode()},s.componentWillUnmount=function(){this.disableOnClickOutside()},s.render=function(){var t=this.props;t.excludeScrollbar;var n=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(t,["excludeScrollbar"]);return e.prototype&&e.prototype.isReactComponent?n.ref=this.getRef:n.wrappedRef=this.getRef,n.disableOnClickOutside=this.disableOnClickOutside,n.enableOnClickOutside=this.enableOnClickOutside,(0,r.createElement)(e,n)},c}(r.Component),n.displayName="OnClickOutside("+a+")",n.defaultProps={eventTypes:["mousedown","touchstart"],excludeScrollbar:t&&t.excludeScrollbar||!1,outsideClickIgnoreClass:"ignore-react-onclickoutside",preventDefault:!1,stopPropagation:!1},n.getClass=function(){return e.getClass?e.getClass():e},i};function Yb(e){return(Yb="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var Zb;function $b(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Kb(e,t){return(Kb=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Qb(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Jb(e);if(t){var o=Jb(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Xb(this,n)}}function Xb(e,t){if(t&&("object"===Yb(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Jb(e){return(Jb=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var ew=function(t){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Kb(e,t)}(u,t);var n,o,i,a=Qb(u);function u(t){var n;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,u),(n=a.call(this,t)).handleOnClick=function(e){e.preventDefault(),n.setState((function(e){return{buttonIsActive:!e.buttonIsActive}}))},n.handleOnClickForLinks=function(t){var r,o;t.target&&"A"===t.target.tagName&&(L.Z.debug((0,e.f9)(Zb||(r=["Setting state of DropdownMenu to buttonIsActive to\n false, because a link inside the menu was clicked."],o||(o=r.slice(0)),Zb=Object.freeze(Object.defineProperties(r,{raw:{value:Object.freeze(o)}}))))),n.setState({buttonIsActive:!1}))},n.handleClickOutside=function(){n.setState({buttonIsActive:!1})},n.handleOnMouseEnter=function(){var e=n.props._window;e&&e.matchMedia("(hover)").matches&&n.setState({buttonIsActive:!0})},n.handleOnMouseLeave=function(){var e=n.props._window;e&&e.matchMedia("(hover)").matches&&n.setState({buttonIsActive:!1})},n.state={buttonIsActive:!1},n}return n=u,(o=[{key:"render",value:function(){var e=this.props,t=e.children,n=e.className,o=e.text;return r.createElement("div",{className:Ho()("DropdownMenu",n,{"DropdownMenu--active":this.state.buttonIsActive}),onClick:this.handleOnClickForLinks,onMouseEnter:this.handleOnMouseEnter,onMouseLeave:this.handleOnMouseLeave},r.createElement("button",{className:"DropdownMenu-button",onClick:this.handleOnClick,title:o,type:"button","aria-haspopup":"true"},r.createElement("span",{className:"DropdownMenu-button-text"},o),r.createElement(ac,{name:"inverted-caret"})),t&&r.createElement("ul",{className:"DropdownMenu-items","aria-hidden":!this.state.buttonIsActive,"aria-label":"submenu"},t))}}])&&$b(n.prototype,o),i&&$b(n,i),Object.defineProperty(n,"prototype",{writable:!1}),u}(r.Component);ew.defaultProps={_window:"undefined"!=typeof window?window:null};const tw=Vb(ew);function nw(e){return(nw="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}const rw=function(e){var t=e.children,n=e.className,o=e.onClick,i=e.title,a=e.detached,u=void 0!==a&&a,c=e.disabled,s=void 0!==c&&c,l="object"===nw(t),f=Ho()("DropdownMenuItem",{"DropdownMenuItem-section":!l&&!o,"DropdownMenuItem-link":l||o,"DropdownMenuItem--detached":u,"DropdownMenuItem--disabled":s},n);return r.createElement("li",{className:f},o?r.createElement("button",{disabled:s,onClick:o,title:i,type:"button"},t):t)};function ow(e){return(ow="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function iw(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function aw(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function uw(e,t){return(uw=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function cw(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=lw(e);if(t){var o=lw(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return sw(this,n)}}function sw(e,t){if(t&&("object"===ow(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function lw(e){return(lw=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var fw=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&uw(e,t)}(a,e);var t,n,o,i=cw(a);function a(){var e;iw(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).setClientApp=function(t){t.preventDefault();var n=e.props,r=n.dispatch,o=n.history,i=t.currentTarget.getAttribute("data-clientapp"),a=t.currentTarget.getAttribute("href");i&&r(wt(i)),a&&o.push(a)},e}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.className,n=e.clientApp,o=e.forBlog,i=e.i18n,a=e.viewContext;ce()(n===D.So,"SectionLinks included when clientApp is not Firefox");var u={prependClientApp:!o,prependLang:!o};return r.createElement("ul",{className:Ho()("SectionLinks",t)},r.createElement("li",null,r.createElement(wc,Object.assign({className:Ho()("SectionLinks-link","SectionLinks-link-extension",{"SectionLinks-link--active":a===D.Gz}),to:"/".concat(xn(D.Gz),"/")},u),i.gettext("Extensions"))),r.createElement("li",null,r.createElement(wc,Object.assign({className:Ho()("SectionLinks-link","SectionLinks-link-theme",{"SectionLinks-link--active":a===D.Yd}),to:"/".concat(xn(D.Yd),"/")},u),i.gettext("Themes"))),r.createElement("li",null,r.createElement(tw,{className:"SectionLinks-link SectionLinks-dropdown",text:i.gettext("More…")},r.createElement(r.Fragment,null,r.createElement(rw,{className:"SectionLinks-subheader"},i.gettext("for Firefox")),r.createElement(rw,{key:"dictionaries-and-language-packs"},r.createElement(wc,{className:Ho()("SectionLinks-dropdownlink",{"SectionLinks-dropdownlink--active":a===D.NI}),to:"/language-tools/"},i.gettext("Dictionaries & Language Packs"))),r.createElement(rw,{className:"SectionLinks-subheader"},i.gettext("Other Browser Sites")),r.createElement(rw,null,r.createElement(wc,{className:"SectionLinks-clientApp-".concat(D.wZ),"data-clientapp":D.wZ,onClick:this.setClientApp,prependClientApp:!1,to:"/".concat(D.wZ,"/")},i.gettext("Add-ons for Android")))))))}}])&&aw(t.prototype,n),o&&aw(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const pw=(0,Mo.qC)(No,(0,g.connect)((function(e){return{clientApp:e.api.clientApp,viewContext:e.viewContext.context}})),Eu())(fw);function dw(e){return(dw="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function hw(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function yw(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function mw(e,t){return(mw=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function vw(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=bw(e);if(t){var o=bw(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return gw(this,n)}}function gw(e,t){if(t&&("object"===dw(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function bw(e){return(bw=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var ww=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&mw(e,t)}(a,e);var t,n,o,i=vw(a);function a(){var e;hw(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).onClick=function(t){t.preventDefault(),t.stopPropagation();var n=e.props,r=n.api,o=n.handleLogIn,i=n.handleLogOut,a=n.location,u=n.siteUser;ce()(i,"handleLogOut() is undefined"),u?i({api:r}):o(a)},e}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.buttonType,n=e.className,o=e.i18n,i=e.logInText,a=e.logOutText,u=e.noIcon,c=e.siteIsReadOnly,s=e.siteUser,l=s?a||o.gettext("Log out"):i||o.gettext("Log in"),f=c?o.gettext("This action is currently unavailable. Please reload the\n page in a moment."):null;return r.createElement(Dc,{href:"#".concat(s?"logout":"login"),buttonType:t,className:n,disabled:c,onClick:this.onClick,title:f,micro:!0},u?null:r.createElement(ac,{name:"user-dark"}),l)}}])&&yw(t.prototype,n),o&&yw(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);ww.defaultProps={buttonType:"action",noIcon:!1};var Ow=function(e){return function(t){var n,r=t.api;return(n={api:r},$t({auth:!0,credentials:!0,endpoint:"accounts/session",method:"DELETE",apiState:n.api})).catch((function(e){L.Z.warn("Received error from the API while logging out: ".concat(e))})).then((function(){return e(Ze())}))}};const Ew=(0,Mo.qC)(No,(0,g.connect)((function(e,t){return{api:e.api,handleLogIn:t.handleLogIn||function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t._window,r=void 0===n?window:n;r.location.assign(Qt({location:e}))},siteIsReadOnly:e.site.readOnly,siteUser:Xe(e.users)}}),(function(e,t){return{handleLogOut:t.handleLogOut||Ow(e)}})),Eu())(ww);function _w(e){return(_w="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function xw(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Sw(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function jw(e,t){return(jw=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Pw(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Iw(e);if(t){var o=Iw(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return kw(this,n)}}function kw(e,t){if(t&&("object"===_w(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Iw(e){return(Iw=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Tw=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&jw(e,t)}(a,e);var t,n,o,i=Pw(a);function a(){var e;xw(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).handleLogOut=function(t){t.preventDefault(),e.props.handleLogOut({api:e.props.api})},e}return t=a,(n=[{key:"renderMenuOrAuthButton",value:function(){var e=this.props,t=e.i18n,n=e.isReviewer,o=e.loadedPageIsAnonymous,i=e.siteIsReadOnly,a=e.siteUser;return o?null:a?r.createElement(tw,{text:a.name,className:"Header-authenticate-button Header-button"},r.createElement(rw,null,t.gettext("My Account")),r.createElement(rw,null,r.createElement(wc,{className:"Header-user-menu-collections-link",to:"/collections/"},t.gettext("View My Collections"))),r.createElement(rw,null,r.createElement(wc,{className:"Header-user-menu-view-profile-link",to:a?"/user/".concat(a.id,"/"):null},t.gettext("View My Profile"))),r.createElement(rw,null,r.createElement(wc,{className:"Header-user-menu-edit-profile-link",to:a?"/users/edit":null},t.gettext("Edit My Profile"))),r.createElement(rw,null,t.gettext("Tools")),r.createElement(rw,null,r.createElement(wc,{href:"/developers/addon/submit/distribution",prependClientApp:!1},t.gettext("Submit a New Add-on"))),r.createElement(rw,null,r.createElement(wc,{href:"/developers/theme/submit",prependClientApp:!1},t.gettext("Submit a New Theme"))),r.createElement(rw,null,r.createElement(wc,{className:"Header-user-menu-developers-submissions-link",href:"/developers/addons/",prependClientApp:!1},t.gettext("Manage My Submissions"))),n&&r.createElement(rw,null,r.createElement(wc,{className:"Header-user-menu-reviewer-tools-link",href:"/reviewers/",prependClientApp:!1},t.gettext("Reviewer Tools"))),r.createElement(rw,{className:"Header-logout-button",detached:!0,disabled:i,onClick:this.handleLogOut,title:i?t.gettext("This action is currently unavailable.\n Please reload the page in a moment."):null},t.gettext("Log out"))):r.createElement(Ew,{buttonType:"none",className:"Header-authenticate-button Header-button",noIcon:!0})}},{key:"render",value:function(){var e=this.props,t=e._config,n=e.clientApp,o=e.forBlog,i=e.i18n,a=e.isAddonInstallPage,u=e.isHomePage,c=e.loadedPageIsAnonymous,s=e.location,l=e.userAgentInfo,f=r.createElement(wc,{className:"Header-title",to:"/",prependClientApp:!o,prependLang:!o},r.createElement("span",{className:"visually-hidden"},i.gettext("Firefox Browser Add-ons"))),p=Pf({userAgentInfo:l})?r.createElement(r.Fragment,null,r.createElement(wc,{className:"Header-blog-link Header-button",href:"/blog/",prependClientApp:!1,prependLang:!1},i.gettext("Firefox Add-ons Blog")),r.createElement(wc,{className:"Header-extension-workshop-link Header-button",href:"".concat(t.get("extensionWorkshopUrl"),"/").concat(fn({utm_content:"header-link",utm_campaign:null})),external:!0,prependClientApp:!1,prependLang:!1,target:"_blank",title:i.gettext("Learn how to create extensions and themes")},i.gettext("Extension Workshop")),r.createElement(wc,{className:"Header-developer-hub-link Header-button",href:"/developers/",external:!0,prependClientApp:!1,target:"_blank",title:i.gettext("Submit and manage extensions and themes")},i.gettext("Developer Hub"))):null;return r.createElement("header",{className:Ho()("Header",{"Header--loaded-page-is-anonymous":c})},a||o?null:r.createElement(eb,null),r.createElement("div",{className:"Header-wrapper"},r.createElement("div",{className:"Header-content"},u?r.createElement("h1",{className:"Header-title-wrapper"},f):f),n===D.So?r.createElement(pw,{className:"Header-SectionLinks",location:s,forBlog:o}):null,!o&&r.createElement(r.Fragment,null,r.createElement("div",{className:"Header-user-and-external-links"},p,this.renderMenuOrAuthButton()),r.createElement(Lb,{className:Ho()("Header-search-form",{"Header-search-form--desktop":n===D.So}),pathname:"/search/"}))))}}])&&Sw(t.prototype,n),o&&Sw(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);Tw.propTypes={_config:w().object,api:w().object.isRequired,clientApp:w().string.isRequired,handleLogOut:w().func.isRequired,i18n:w().object.isRequired,isAddonInstallPage:w().bool,isHomePage:w().bool,isReviewer:w().bool.isRequired,loadedPageIsAnonymous:w().bool.isRequired,location:w().object.isRequired,siteIsReadOnly:w().bool.isRequired,siteUser:w().object,userAgentInfo:w().object,forBlog:w().bool},Tw.defaultProps={_config:t.Z,forBlog:!1};const Rw=(0,Mo.qC)((0,g.connect)((function(e){return{api:e.api,clientApp:e.api.clientApp,isReviewer:tt(e),loadedPageIsAnonymous:e.site.loadedPageIsAnonymous,siteIsReadOnly:e.site.readOnly,siteUser:Xe(e.users),userAgentInfo:e.api.userAgentInfo}}),(function(e,t){return{handleLogOut:t.handleLogOut||Ow(e)}})),Eu())(Tw);function Cw(e){return(Cw="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Aw(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Nw(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Lw(e,t){return(Lw=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Dw(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Fw(e);if(t){var o=Fw(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Mw(this,n)}}function Mw(e,t){if(t&&("object"===Cw(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Fw(e){return(Fw=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Uw=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Lw(e,t)}(a,e);var t,n,o,i=Dw(a);function a(){return Aw(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e,t=this.props,n=t._correctedLocationForPlatform,o=t._isAndroidInstallable,i=t._isFirefoxForAndroid,a=t._isFirefoxForIOS,u=t.addon,c=t.className,s=t.clientApp,l=t.i18n,f=t.isHomePage,p=t.lang,d=t.location,h=t.userAgentInfo,y=n({clientApp:s,isHomePage:f,lang:p,location:d,userAgentInfo:h});return a(h)?e=l.gettext("Add-ons are not compatible with Firefox for iOS. Try installing them on Firefox for desktop."):u&&i(h)&&o({addon:u})?e=null:y===Af(p)?e=l.sprintf(l.gettext('To find add-ons compatible with Firefox for Android,\n <a href="%(newLocation)s">click here</a>.'),{newLocation:y}):u&&y?e=l.sprintf('This listing is not intended for this platform.\n <a href="%(newLocation)s">Browse add-ons for Firefox on desktop</a>.',{newLocation:y}):y&&(e=l.sprintf('To find add-ons compatible with Firefox on desktop,\n <a href="%(newLocation)s">visit our desktop site</a>.',{newLocation:y})),e?r.createElement("div",{className:Ho()("WrongPlatformWarning",c)},r.createElement(Jc,{id:"WrongPlatformWarning-Notice",type:Kc},r.createElement("span",{className:"WrongPlatformWarning-message",dangerouslySetInnerHTML:vn(e,["a"])}))):null}}])&&Nw(t.prototype,n),o&&Nw(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);Uw.defaultProps={_correctedLocationForPlatform:Nf,_isAndroidInstallable:Tf,_isFirefoxForAndroid:kf,_isFirefoxForIOS:If,isHomePage:!1};const Bw=(0,Mo.qC)(No,(0,g.connect)((function(e){return{clientApp:e.api.clientApp,lang:e.api.lang,userAgentInfo:e.api.userAgentInfo}})),Eu())(Uw);var Hw=a(37707),qw=a.n(Hw),zw=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),Gw=function(){return(Gw=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)},Ww=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n};function Vw(e){var t=e.displayName||e.name,n=function(n){function o(){var e=null!==n&&n.apply(this,arguments)||this;return e.onChange=function(){e.forceUpdate()},e}return zw(o,n),o.prototype.listen=function(){this.props.cookies.addChangeListener(this.onChange)},o.prototype.unlisten=function(e){(e||this.props.cookies).removeChangeListener(this.onChange)},o.prototype.componentDidMount=function(){this.listen()},o.prototype.componentDidUpdate=function(e){e.cookies!==this.props.cookies&&(this.unlisten(e.cookies),this.listen())},o.prototype.componentWillUnmount=function(){this.unlisten()},o.prototype.render=function(){var t=this.props,n=t.forwardedRef,o=t.cookies,i=Ww(t,["forwardedRef","cookies"]),a=o.getAll();return r.createElement(e,Gw({},i,{ref:n,cookies:o,allCookies:a}))},o.displayName="withCookies("+t+")",o.WrappedComponent=e,o}(r.Component),o=r.forwardRef((function(e,t){return r.createElement(h,null,(function(o){return r.createElement(n,Gw({cookies:o},e,{forwardedRef:t}))}))}));return o.displayName=n.displayName,o.WrappedComponent=n.WrappedComponent,qw()(o,e)}a(77653);function Yw(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Zw(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Yw(Object(n),!0).forEach((function(t){$w(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Yw(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function $w(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Kw="STORE_EXPERIMENT_VARIANT",Qw={};function Xw(e){return(Xw="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var Jw=["_getVariant","_isExperimentEnabled"];function eO(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function tO(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function nO(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function rO(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function oO(e,t){return(oO=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function iO(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=uO(e);if(t){var o=uO(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return aO(this,n)}}function aO(e,t){if(t&&("object"===Xw(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function uO(e){return(uO=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function cO(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return sO(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return sO(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,u=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){u=!0,i=e},f:function(){try{a||null==n.return||n.return()}finally{if(u)throw i}}}}function sO(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var lO="frontend_active_experiments",fO="AMO Experiment Enrollment -",pO="notInExperiment",dO=/\d{8}_amo_.+/,hO=function(e){var t=e.randomizer,n=void 0===t?Math.random:t,r=e.variants;ce()(1===r.reduce((function(e,t){return e+t.percentage}),0),"The sum of all percentages in `variants` must be 1"),ce()(r.every((function(e){return e.id.length<=50})),"Variant ids must be no more than 50 characters long");var o,i,a=n(),u=0,c=cO(r);try{for(c.s();!(i=c.n()).done;){var s=i.value;if(o=u+s.percentage,a>u&&a<=o)return s.id;u=o}}catch(e){c.e(e)}finally{c.f()}throw new Error("Unable to allocate a user to a variant")},yO=function(e){var n=e._config,r=void 0===n?t.Z:n,o=e.id;return!0===(r.get("experiments")||{})[o]},mO={maxAge:2592e3,path:"/",secure:!0},vO="show-promo",gO=function(e){var t=e.clientApp,n=e.regionCode;return t===D.wZ||!["US","DE","FR"].includes(n)},bO={id:"20210714_amo_vpn_promo",variants:[{id:vO,percentage:.05},{id:"hide-promo",percentage:.05},{id:pO,percentage:.9}],shouldExcludeUser:function(e){var t=e.state.api,n=t.clientApp,r=t.regionCode;return gO({clientApp:n,regionCode:r})}},wO=a(424),OO=a.n(wO),EO=a(65117),_O=a.n(EO);function xO(e){return(xO="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function SO(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function jO(e,t){return(jO=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function PO(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=IO(e);if(t){var o=IO(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return kO(this,n)}}function kO(e,t){if(t&&("object"===xO(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function IO(e){return(IO=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var TO="VPNPromoImpressionCount",RO="VPN Promo Banner",CO=function(e){var t=e.getItem(TO),n=parseInt(t||0,10);return ce()(!Number.isNaN(n),"A non-number was stored in ".concat(TO,": ").concat(t)),n},AO=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&jO(e,t)}(a,e);var t,n,o,i=PO(a);function a(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),(t=i.call(this,e)).onInteract=function(e){var n=t.props,r=n._tracking,o=n._localStorage,i=n.cookies,a=CO(o);r.sendEvent({action:e,category:RO,label:String(a)}),o.removeItem(TO),t.setState({dismissed:!0});var u=i.get(lO);u[bO.id]=pO,i.set(lO,u,mO)},t.onButtonClick=function(){t.onInteract("vpn-promo-banner-click")},t.onDismiss=function(){t.onInteract("vpn-promo-banner-dismiss")},t.onImpression=function(){var e=t.props,n=e._tracking,r=e._localStorage;if(t.shouldShowBanner()){var o=CO(r)+1;n.sendEvent({action:"vpn-promo-banner-impression",category:RO,label:String(o)}),r.setItem(TO,o)}},t.state={dismissed:e.variant!==vO},t}return t=a,(n=[{key:"shouldShowBanner",value:function(){var e=this.props,t=e.clientApp,n=e.regionCode;return e.variant===vO&&!this.state.dismissed&&!gO({clientApp:t,regionCode:n})}},{key:"componentDidMount",value:function(){this.onImpression()}},{key:"componentDidUpdate",value:function(e){Vy()(this.props.location,e.location)||this.onImpression()}},{key:"render",value:function(){var e=this.props,t=e.addonIdentifier,n=e.i18n;if(!this.shouldShowBanner())return null;var o=n.gettext("Save 50% with a full year subscription"),i=n.gettext("Protect your online data—and choose a VPN subscription plan that works\n for you."),a="".concat("https://www.mozilla.org/products/vpn").concat(fn({utm_campaign:"amo-vpn-promo",utm_content:t}));return r.createElement("div",{className:"VPNPromoBanner"},r.createElement("div",{className:"VPNPromoBanner-wrapper"},r.createElement("img",{alt:"Mozilla VPN",className:"VPNPromoBanner-logo",src:OO()}),r.createElement("div",{className:"VPNPromoBanner-copy"},r.createElement("strong",null,o),r.createElement("span",null,i)),r.createElement("a",{className:"VPNPromoBanner-cta",href:a,onClick:this.onButtonClick},n.gettext("Get Mozilla VPN")),r.createElement(Dc,{className:"VPNPromoBanner-dismisser-button",onClick:this.onDismiss},r.createElement("img",{alt:"",src:_O()}))))}}])&&SO(t.prototype,n),o&&SO(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);AO.defaultProps={_tracking:pr,_localStorage:"undefined"!=typeof window?window.localStorage:{}};const NO=(0,Mo.qC)(No,Eu(),Vw,(0,g.connect)((function(e,t){var n=t.match.params.slug,r=la(e.addons,n);return{addonIdentifier:r&&String(r.id)||null,clientApp:e.api.clientApp,regionCode:e.api.regionCode}})))(AO);var LO,DO,MO,FO,UO,BO;const HO=(0,Mo.qC)(No,(0,g.connect)((function(e){return{clientApp:e.api.clientApp}})),(DO=(LO={experimentConfig:bO})._config,MO=void 0===DO?t.Z:DO,FO=LO._tracking,UO=void 0===FO?pr:FO,BO=LO.experimentConfig,function(e){var t=BO.cookieConfig,n=BO.id,o=BO.shouldExcludeUser,i=BO.variants;ce()(n,"id is required"),ce()(dO.test(n),"id must match the pattern YYYYMMDD_amo_experiment_id"),ce()(n.length<=50,"id must be no more than 50 characters long"),ce()(i,"variants is required");var a=function(o){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&oO(e,t)}(l,o);var a,u,c,s=iO(l);function l(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,l),(t=s.call(this,e)).variant=t.setupExperiment(e),t}return a=l,(u=[{key:"isEnabled",value:function(){return this.props._isExperimentEnabled({_config:MO,id:n})}},{key:"readVariantFromCookie",value:function(){return this.cookieIncludesExperiment()?this.getExperimentsFromCookie()[n]:null}},{key:"setupExperiment",value:function(e){var t=e._getVariant,r=e.dispatch,o=e.isUserExcluded,a=e.storedVariants;if(!this.isEnabled())return null;var u=this.readVariantFromCookie();if(!u){var c=a[n];u=c||(o?pO:t({variants:i})),this.cookieIncludesExperiment()||c||r(function(e){var t=e.id,n=e.variant;return{type:Kw,payload:{id:t,variant:n}}}({id:n,variant:u}))}return u}},{key:"componentDidMount",value:function(){for(var e=this.variant,r=this.props,o=r._isExperimentEnabled,i=r.cookies,a=e&&!this.cookieIncludesExperiment(),u=this.getExperimentsFromCookie(),c=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?tO(Object(n),!0).forEach((function(t){nO(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):tO(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({},u),s=!1,l=0,f=Object.keys(u);l<f.length;l++){var p=f[l];o({_config:MO,id:p})||(delete c[p],s=!0)}a&&(c[n]=e,e&&UO.sendEvent({_config:MO,action:e,category:[fO,n].join(" ")})),(s||a)&&i.set(lO,c,t||mO)}},{key:"getExperimentsFromCookie",value:function(){return this.props.cookies.get(lO)||{}}},{key:"cookieIncludesExperiment",value:function(){return Object.keys(this.getExperimentsFromCookie()).includes(n)}},{key:"render",value:function(){var t=this.props,o=(t._getVariant,t._isExperimentEnabled,eO(t,Jw)),i=this.readVariantFromCookie()||this.variant,a={experimentId:n,isExperimentEnabled:this.isEnabled(),isUserInExperiment:Boolean(i&&i!==pO),variant:i};return r.createElement(e,Object.assign({},a,o))}}])&&rO(a.prototype,u),c&&rO(a,c),Object.defineProperty(a,"prototype",{writable:!1}),l}(r.Component);return a.defaultProps={_getVariant:hO,_isExperimentEnabled:yO},a.displayName="WithExperiment(".concat(Rn(e),")"),(0,Mo.qC)(Vw,(0,g.connect)((function(e){return{isUserExcluded:Boolean(o&&o({state:e})),storedVariants:e.experiments}})))(a)}))((function(e){var n,o=e._config,i=void 0===o?t.Z:o,a=e._log,u=void 0===a?L.Z:a,c=e.children,s=e.clientApp,l=e.errorHandler,f=e.isAddonInstallPage,p=void 0!==f&&f,d=e.isHomePage,h=void 0!==d&&d,y=e.location,m=e.showVPNPromo,v=void 0!==m&&m,g=e.showWrongPlatformWarning,b=void 0===g||g,w=e.variant;if(l&&l.hasError()){401===l.capturedError.responseStatusCode&&D.Jp.includes(l.capturedError.code)?n=r.createElement(vg,null):401===l.capturedError.responseStatusCode||403===l.capturedError.responseStatusCode||404===l.capturedError.responseStatusCode?n=r.createElement(jg,null):451===l.capturedError.responseStatusCode&&(n=r.createElement(Lg,null));var O="Captured API Error: ".concat(l.capturedError.messages);n?u.debug(O):u.warn(O)}return r.createElement("div",{className:"Page-amo"},v&&i.get("enableFeatureVPNPromo")&&r.createElement(NO,{variant:w}),r.createElement(Rw,{isAddonInstallPage:p,isHomePage:h,location:y}),r.createElement("div",{className:"Page-content"},r.createElement("div",{className:Ho()("Page",{"Page-not-homepage":!h,"Page-no-hero-promo":s===D.wZ})},(!h||s===D.wZ)&&r.createElement(eg,null),b&&r.createElement(Bw,{className:"Page-WrongPlatformWarning",isHomePage:h}),n||c)),r.createElement(Jg,null))}));function qO(e){return(qO="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function zO(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function GO(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function WO(e,t){return(WO=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function VO(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=ZO(e);if(t){var o=ZO(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return YO(this,n)}}function YO(e,t){if(t&&("object"===qO(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function ZO(e){return(ZO=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function $O(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function KO(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?$O(Object(n),!0).forEach((function(t){QO(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):$O(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function QO(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var XO={showAllContent:!0,readMoreExpanded:!1},JO=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&WO(e,t)}(a,e);var t,n,o,i=VO(a);function a(){var e;zO(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).onClick=function(t){t.preventDefault(),e.props.setUIState({showAllContent:!0,readMoreExpanded:!0})},e}return t=a,(n=[{key:"componentDidMount",value:function(){var e=this.props,t=e._setUIState,n=e._truncateToMaxHeight,r=e.maxHeight,o=e.setUIState,i=e.uiState;i.readMoreExpanded||n({contents:this.contents,maxHeight:r,setUIState:t||o,uiState:i})}},{key:"componentDidUpdate",value:function(e){var t=e.contentId,n=this.props,r=n._setUIState,o=n._truncateToMaxHeight,i=n.contentId,a=n.maxHeight,u=n.setUIState,c=n.uiState;i&&t!==i&&this.resetUIState(),c.readMoreExpanded||o({contents:this.contents,maxHeight:a,setUIState:r||u,uiState:c})}},{key:"resetUIState",value:function(){this.props.setUIState(KO({},XO))}},{key:"render",value:function(){var e=this,t=this.props,n=t.children,o=t.className,i=t.header,a=t.id,u=t.i18n,c=t.uiState.showAllContent;ce()(n,"The children property is required"),ce()(a,"The id property is required");var s=r.createElement("a",{"aria-label":u.gettext("Expand to read more"),className:"ShowMoreCard-expand-link",href:"#show-more",onClick:this.onClick,dangerouslySetInnerHTML:vn(u.gettext('<span class="visually-hidden">Expand to</span> Read more'),["span"])});return r.createElement(js,{className:Ho()("ShowMoreCard",o,{"ShowMoreCard--expanded":c}),header:i,footerLink:c?null:s},r.createElement("div",{className:"ShowMoreCard-contents",ref:function(t){e.contents=t}},n))}}])&&GO(t.prototype,n),o&&GO(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);JO.defaultProps={_truncateToMaxHeight:function(e){var t=e.contents,n=e.maxHeight,r=e.setUIState,o=e.uiState;t&&o.showAllContent&&t.clientHeight>=n&&r(KO(KO({},o),{},{showAllContent:!1}))},maxHeight:150};const eE=(0,Mo.qC)(Eu(),Bu({fileName:"src/amo/components/ShowMoreCard/index.js",extractId:function(e){return e.id},initialState:XO,resetOnUnmount:!0}))(JO);a(68064);function tE(e){return(tE="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function nE(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function rE(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function oE(e,t){return(oE=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function iE(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=uE(e);if(t){var o=uE(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return aE(this,n)}}function aE(e,t){if(t&&("object"===tE(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function uE(e){return(uE=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var cE=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&oE(e,t)}(a,e);var t,n,o,i=iE(a);function a(){return nE(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.type,n=e.description;return r.createElement("li",{className:"Permission"},r.createElement(ac,{name:"permission-".concat(t.replace(/\./g,"-"))}),r.createElement("span",{className:"Permission-description"},n))}}])&&rE(t.prototype,n),o&&rE(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);function sE(e){return(sE="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function lE(e){return function(e){if(Array.isArray(e))return dE(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||pE(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function fE(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=pE(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,u=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){u=!0,i=e},f:function(){try{a||null==n.return||n.return()}finally{if(u)throw i}}}}function pE(e,t){if(e){if("string"==typeof e)return dE(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?dE(e,t):void 0}}function dE(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function hE(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function yE(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function mE(e,t){return(mE=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function vE(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=bE(e);if(t){var o=bE(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return gE(this,n)}}function gE(e,t){if(t&&("object"===sE(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function bE(e){return(bE=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var wE="domainMessageType",OE="siteMessageType",EE="allUrlsMessageType",_E=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&mE(e,t)}(a,e);var t,n,o,i=vE(a);function a(){return hE(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"getPermissionString",value:function(e){var t=e.messageType,n=e.param,r=this.props.i18n;switch(t){case EE:return r.gettext("Access your data for all websites");case wE:return r.sprintf(r.gettext("Access your data for sites in the %(param)s domain"),{param:n});case OE:return r.sprintf(r.gettext("Access your data for %(param)s"),{param:n});default:throw new Error("No matching string found for messageType: ".concat(t))}}},{key:"generateHostPermissions",value:function(e){var t,n=e.permissions,o=e.messageType,i=[],a=fE(n);try{for(a.s();!(t=a.n()).done;){var u=t.value;i.push(r.createElement(cE,{type:"hostPermission",description:this.getPermissionString({messageType:o,param:u}),key:u}))}}catch(e){a.e(e)}finally{a.f()}return i}},{key:"render",value:function(){var e,t=[],n=!1,o=[],i=[],a=fE(this.props.permissions);try{for(a.s();!(e=a.n()).done;){var u=e.value;if("<all_urls>"===u){n=!0;break}if(!u.startsWith("moz-extension:")){var c=/^[a-z*]+:\/\/([^/]+)\//.exec(u);c?"*"===c[1]?n=!0:c[1].startsWith("*.")?o.push(c[1].slice(2)):i.push(c[1]):L.Z.debug('Host permission string "'.concat(u,'" appears to be invalid.'))}}}catch(e){a.e(e)}finally{a.f()}var s=lE(new Set(o)),l=lE(new Set(i));return n?t.push(r.createElement(cE,{type:"hostPermission",description:this.getPermissionString({messageType:EE}),key:"allUrls"})):(t.push.apply(t,lE(this.generateHostPermissions({permissions:s,messageType:wE}))),t.push.apply(t,lE(this.generateHostPermissions({permissions:l,messageType:OE})))),r.createElement(r.Fragment,null,t)}}])&&yE(t.prototype,n),o&&yE(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const xE=(0,Mo.qC)(Eu())(_E);function SE(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return jE(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return jE(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,u=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){u=!0,i=e},f:function(){try{a||null==n.return||n.return()}finally{if(u)throw i}}}}function jE(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function PE(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}var kE=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.i18n=t,this.permissionStrings={bookmarks:t.gettext("Read and modify bookmarks"),browserSettings:t.gettext("Read and modify browser settings"),browsingData:t.gettext("Clear recent browsing history, cookies, and related data"),clipboardRead:t.gettext("Get data from the clipboard"),clipboardWrite:t.gettext("Input data to the clipboard"),devtools:t.gettext("Extend developer tools to access your data in open tabs"),downloads:t.gettext("Download files and read and modify the browser’s download history"),"downloads.open":t.gettext("Open files downloaded to your computer"),find:t.gettext("Read the text of all open tabs"),geolocation:t.gettext("Access your location"),history:t.gettext("Access browsing history"),management:t.gettext("Monitor extension usage and manage themes"),nativeMessaging:t.gettext("Exchange messages with programs other than Firefox"),notifications:t.gettext("Display notifications to you"),pkcs11:t.gettext("Provide cryptographic authentication services"),proxy:t.gettext("Control browser proxy settings"),privacy:t.gettext("Read and modify privacy settings"),sessions:t.gettext("Access recently closed tabs"),tabs:t.gettext("Access browser tabs"),tabHide:t.gettext("Hide and show browser tabs"),topSites:t.gettext("Access browsing history"),unlimitedStorage:t.gettext("Store unlimited amount of client-side data"),webNavigation:t.gettext("Access browser activity during navigation")}}var t,n,o;return t=e,(n=[{key:"getCurrentPermissions",value:function(e){var t=e.file,n={optional:[],required:[]};return t?(n.optional=t.optional_permissions,n.required=t.permissions,n):(L.Z.debug("getCurrentPermissions() called with no file"),n)}},{key:"classifyPermission",value:function(e){var t={type:"permissions",value:e};return/^(\w+)(?:\.(\w+)(?:\.\w+)*)?$/.exec(e)||(t={type:"hosts",value:e}),t}},{key:"formatPermissions",value:function(e){var t,n=[],o={hosts:[],permissions:[]},i=SE(e);try{for(i.s();!(t=i.n()).done;){var a=t.value,u=this.classifyPermission(a),c=u.type,s=u.value;o[c].push(s)}}catch(e){i.e(e)}finally{i.f()}var l="nativeMessaging";o.permissions.includes(l)&&n.push(r.createElement(cE,{type:l,description:this.permissionStrings.nativeMessaging,key:l}));var f,p=SE(o.permissions.slice(0).sort());try{for(p.s();!(f=p.n()).done;){var d=f.value;"nativeMessaging"!==d&&this.permissionStrings[d]&&n.push(r.createElement(cE,{type:d,description:this.permissionStrings[d],key:d}))}}catch(e){p.e(e)}finally{p.f()}return o.hosts.length&&n.push(r.createElement(xE,{permissions:o.hosts})),n}}])&&PE(t.prototype,n),o&&PE(t,o),Object.defineProperty(t,"prototype",{writable:!1}),e}();function IE(e){return(IE="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function TE(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function RE(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function CE(e,t){return(CE=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function AE(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=LE(e);if(t){var o=LE(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return NE(this,n)}}function NE(e,t){if(t&&("object"===IE(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function LE(e){return(LE=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var DE=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&CE(e,t)}(a,e);var t,n,o,i=AE(a);function a(){return TE(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.version,n=e.i18n,o=new kE(n);if(!t||!t.file)return null;var i=o.getCurrentPermissions({file:t.file});if(!i.optional.length&&!i.required.length)return null;var a=o.formatPermissions(i.optional),u=o.formatPermissions(i.required);if(!a.length&&!u.length)return null;var c=r.createElement("div",{className:"PermissionsCard-header"},n.gettext("Permissions"),r.createElement(wc,{className:"PermissionsCard-learn-more",href:"https://support.mozilla.org/kb/permission-request-messages-firefox-extensions",target:"_blank",externalDark:!0,prependClientApp:!1,prependLang:!1},n.gettext("Learn more")));return r.createElement(eE,{header:c,contentId:t.id,className:"PermissionsCard",id:"AddonDescription-permissions-card",maxHeight:300},u.length?r.createElement(r.Fragment,null,r.createElement("p",{className:"PermissionsCard-subhead--required"},n.gettext("This add-on needs to:")),r.createElement("ul",{className:"PermissionsCard-list--required"},u)):null,a.length?r.createElement(r.Fragment,null,r.createElement("p",{className:"PermissionsCard-subhead--optional"},n.gettext("This add-on may also ask to:")),r.createElement("ul",{className:"PermissionsCard-list--optional"},a)):null)}}])&&RE(t.prototype,n),o&&RE(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const ME=(0,Mo.qC)(Eu())(DE);const FE=(0,Mo.qC)(Eu())((function(e){var t=e.children,n=e.className,o=e.i18n,i=e.onSelectRating,a=e.rating,u=!i;return r.createElement("div",{className:Ho()("AddonReviewManagerRating",n)},r.createElement("span",null,o.gettext("Your star rating:")),r.createElement(id,{onSelectRating:i,rating:a,readOnly:u,styleSize:"small",yellowStars:!0}),t)}));const UE=function(e){var t=e.className,n=e.hideMessage,o=e.message,i=e.type,a={className:Ho()("RatingManagerNotice-savedRating",t,{"RatingManagerNotice-savedRating-hidden":n})};return i?r.createElement(Jc,Object.assign({type:i,light:!0},a),o):r.createElement("span",a,o)};var BE="src/amo/components/AddonReviewManager/index.js";function HE(e){return(HE="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function qE(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function zE(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function GE(e,t){return(GE=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function WE(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=YE(e);if(t){var o=YE(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return VE(this,n)}}function VE(e,t){if(t&&("object"===HE(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function YE(e){return(YE=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var ZE=function(e){return e.review.id.toString()},$E=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&GE(e,t)}(a,e);var t,n,o,i=WE(a);function a(){var e;qE(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).onSubmitRating=function(t){var n=e.props,r=n.errorHandler,o=n.dispatch,i=n.review;o(Li({score:t,errorHandlerId:r.id,reviewId:i.id}))},e.onSubmitReview=function(t){var n=t.text,r=e.props,o=r.errorHandler,i=r.dispatch,a=r.review;i(Li({body:n,errorHandlerId:o.id,reviewId:a.id}))},e}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.errorHandler,n=e.i18n,o=e.onCancel,i=e.review,a=e.flashMessage,u=e.puffyButtons,c=ie({text:n.gettext("Please follow our %(linkStart)sreview guidelines%(linkEnd)s."),replacements:[["linkStart","linkEnd",function(e){return r.createElement(wc,{key:"review-guide",prependClientApp:!1,to:"/review_guide"},e)}]]}),s=r.createElement("div",null,c),l=n.gettext("Write about your experience with this add-on."),f=n.gettext("Submit review"),p=n.gettext("Submitting review");return i.body&&(f=n.gettext("Update review"),p=n.gettext("Updating review")),r.createElement("div",{className:"AddonReviewManager"},t.renderErrorIfPresent(),r.createElement(FE,{onSelectRating:this.onSubmitRating,rating:a===Ui?void 0:i.score},r.createElement(UE,{className:"AddonReviewManager-savedRating",hideMessage:a!==Ui&&a!==Mi,message:a===Ui?n.gettext("Saving"):n.gettext("Saved")})),r.createElement(Zh,{dismissButtonText:n.gettext("Cancel"),formFooter:s,id:"".concat(Tn(BE),"-").concat(ZE(this.props)),isSubmitting:a===Bi,onDismiss:o,onSubmit:this.onSubmitReview,placeholder:l,puffyButtons:u,reverseButtonOrder:!0,submitButtonText:f,submitButtonInProgressText:p,text:i.body}))}}])&&zE(t.prototype,n),o&&zE(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);$E.defaultProps={puffyButtons:!1};const KE=(0,Mo.qC)((0,g.connect)((function(e){return{flashMessage:e.reviews.flashMessage}})),gs({fileName:BE,extractId:ZE}),Eu())($E);function QE(e){return(QE="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function XE(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function JE(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function e_(e,t){return(e_=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function t_(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=r_(e);if(t){var o=r_(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return n_(this,n)}}function n_(e,t){if(t&&("object"===QE(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function r_(e){return(r_=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var o_=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&e_(e,t)}(a,e);var t,n,o,i=t_(a);function a(){var e;XE(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).onClick=function(t){var n=e.props,r=n.errorHandler,o=n.dispatch,i=n.review,a=n.reason;t.preventDefault(),o(Ri({errorHandlerId:r.id,reason:a,reviewId:i.id}))},e}return t=a,(n=[{key:"renderControls",value:function(){var e=this.props,t=e.errorHandler,n=e.flagState,o=e.buttonText,i=e.wasFlaggedText;if(n){if(n.inProgress&&!t.hasError())return r.createElement(Zp,{minWidth:60});if(n.wasFlagged)return i}return r.createElement("button",{className:"FlagReview-button",onClick:this.onClick,type:"button"},o)}},{key:"render",value:function(){var e=this.props.errorHandler;return r.createElement("div",null,e.renderErrorIfPresent(),this.renderControls())}}])&&JE(t.prototype,n),o&&JE(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const i_=(0,Mo.qC)((0,g.connect)((function(e,t){var n={};if(t.review){var r=e.reviews.view[t.review.id];r&&r.flag&&r.flag.reason===t.reason&&(n=r.flag)}return{flagState:n}})),ms({name:"FlagReview",extractId:function(e){return String(e.review.id)}}))(o_);function a_(e){return(a_="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function u_(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function c_(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function s_(e,t){return(s_=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function l_(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=p_(e);if(t){var o=p_(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return f_(this,n)}}function f_(e,t){if(t&&("object"===a_(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function p_(e){return(p_=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var d_=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&s_(e,t)}(a,e);var t,n,o,i=l_(a);function a(){return u_(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.children,n=e.className;return r.createElement("li",{className:Ho()("ListItem",n)},t)}}])&&c_(t.prototype,n),o&&c_(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);function h_(e){return(h_="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function y_(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function m_(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function v_(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?m_(Object(n),!0).forEach((function(t){y_(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):m_(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function g_(e,t){if(null==e)return{};var n,r,o=(0,vh.Z)(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function b_(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function w_(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function O_(e,t,n){return t&&w_(e.prototype,t),n&&w_(e,n),e}var E_=a(40589);function __(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&(0,E_.Z)(e,t)}function x_(e){return(x_=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function S_(e,t){return!t||"object"!==h_(t)&&"function"!=typeof t?(0,Pm.Z)(e):t}function j_(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=x_(e);if(t){var o=x_(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return S_(this,n)}}var P_=function(e){return+setTimeout(e,16)},k_=function(e){return clearTimeout(e)};function I_(e){return P_(e)}function T_(e,t){return!!e&&e.contains(t)}function R_(e){return e instanceof HTMLElement?e:o.findDOMNode(e)}"undefined"!=typeof window&&"requestAnimationFrame"in window&&(P_=function(e){return window.requestAnimationFrame(e)},k_=function(e){return window.cancelAnimationFrame(e)}),I_.cancel=k_;var C_=a(2781);function A_(e,t){"function"==typeof e?e(t):"object"===h_(e)&&e&&"current"in e&&(e.current=t)}function N_(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return function(e){t.forEach((function(t){A_(t,e)}))}}function L_(e,t,n,r){var i=o.unstable_batchedUpdates?function(e){o.unstable_batchedUpdates(n,e)}:n;return e.addEventListener&&e.addEventListener(t,i,r),{remove:function(){e.removeEventListener&&e.removeEventListener(t,i)}}}function D_(){return!("undefined"==typeof window||!window.document||!window.document.createElement)}const M_=(0,r.forwardRef)((function(e,t){var n=e.didUpdate,i=e.getContainer,a=e.children,u=(0,r.useRef)();(0,r.useImperativeHandle)(t,(function(){return{}}));var c=(0,r.useRef)(!1);return!c.current&&D_()&&(u.current=i(),c.current=!0),(0,r.useEffect)((function(){null==n||n(e)})),(0,r.useEffect)((function(){return function(){var e,t;null===(e=u.current)||void 0===e||null===(t=e.parentNode)||void 0===t||t.removeChild(u.current)}}),[]),u.current?o.createPortal(a,u.current):null}));var F_=a(56355),U_=a.n(F_);function B_(e,t,n){return n?e[0]===t[0]:e[0]===t[0]&&e[1]===t[1]}function H_(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function q_(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e)){var n=[],r=!0,o=!1,i=void 0;try{for(var a,u=e[Symbol.iterator]();!(r=(a=u.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{r||null==u.return||u.return()}finally{if(o)throw i}}return n}}(e,t)||function(e,t){if(e){if("string"==typeof e)return H_(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?H_(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var z_=a(68365),G_=a.n(z_);function W_(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit".concat(e)]="webkit".concat(t),n["Moz".concat(e)]="moz".concat(t),n["ms".concat(e)]="MS".concat(t),n["O".concat(e)]="o".concat(t.toLowerCase()),n}var V_,Y_,Z_,$_=(V_=D_(),Y_="undefined"!=typeof window?window:{},Z_={animationend:W_("Animation","AnimationEnd"),transitionend:W_("Transition","TransitionEnd")},V_&&("AnimationEvent"in Y_||delete Z_.animationend.animation,"TransitionEvent"in Y_||delete Z_.transitionend.transition),Z_),K_={};if(D_()){var Q_=document.createElement("div");K_=Q_.style}var X_={};function J_(e){if(X_[e])return X_[e];var t=$_[e];if(t)for(var n=Object.keys(t),r=n.length,o=0;o<r;o+=1){var i=n[o];if(Object.prototype.hasOwnProperty.call(t,i)&&i in K_)return X_[e]=t[i],X_[e]}return""}var ex=J_("animationend"),tx=J_("transitionend"),nx=!(!ex||!tx),rx=ex||"animationend",ox=tx||"transitionend";function ix(e,t){return e?"object"===h_(e)?e[t.replace(/-\w/g,(function(e){return e[1].toUpperCase()}))]:"".concat(e,"-").concat(t):null}var ax="none",ux="appear",cx="enter",sx="leave",lx="none",fx="prepare",px="start",dx="active",hx="end";function yx(e){var t=(0,r.useRef)(!1),n=q_((0,r.useState)(e),2),o=n[0],i=n[1];return(0,r.useEffect)((function(){return function(){t.current=!0}}),[]),[o,function(e){t.current||i(e)}]}const mx=D_()?r.useLayoutEffect:r.useEffect;var vx=[fx,px,dx,hx];function gx(e){return e===dx||e===hx}const bx=function(e,t){var n=q_(r.useState(lx),2),o=n[0],i=n[1],a=q_(function(){var e=r.useRef(null);function t(){I_.cancel(e.current)}return r.useEffect((function(){return function(){t()}}),[]),[function n(r){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;t();var i=I_((function(){o<=1?r({isCanceled:function(){return i!==e.current}}):n(r,o-1)}));e.current=i},t]}(),2),u=a[0],c=a[1];return mx((function(){if(o!==lx&&o!==hx){var e=vx.indexOf(o),n=vx[e+1],r=t(o);false===r?i(n):u((function(e){function t(){e.isCanceled()||i(n)}!0===r?t():Promise.resolve(r).then(t)}))}}),[e,o]),r.useEffect((function(){return function(){c()}}),[]),[function(){i(fx)},o]};function wx(e,t,n,o){var i=o.motionEnter,a=void 0===i||i,u=o.motionAppear,c=void 0===u||u,s=o.motionLeave,l=void 0===s||s,f=o.motionDeadline,p=o.motionLeaveImmediately,d=o.onAppearPrepare,h=o.onEnterPrepare,y=o.onLeavePrepare,m=o.onAppearStart,v=o.onEnterStart,g=o.onLeaveStart,b=o.onAppearActive,w=o.onEnterActive,O=o.onLeaveActive,E=o.onAppearEnd,_=o.onEnterEnd,x=o.onLeaveEnd,S=o.onVisibleChanged,j=q_(yx(),2),P=j[0],k=j[1],I=q_(yx(ax),2),T=I[0],R=I[1],C=q_(yx(null),2),A=C[0],N=C[1],L=(0,r.useRef)(!1),D=(0,r.useRef)(null),M=(0,r.useRef)(!1),F=(0,r.useRef)(null);function U(){return n()||F.current}var B=(0,r.useRef)(!1);function H(e){var t,n=U();e&&!e.deadline&&e.target!==n||(T===ux&&B.current?t=null==E?void 0:E(n,e):T===cx&&B.current?t=null==_?void 0:_(n,e):T===sx&&B.current&&(t=null==x?void 0:x(n,e)),!1===t||M.current||(R(ax),N(null)))}var q=q_(function(e){var t=(0,r.useRef)(),n=(0,r.useRef)(e);n.current=e;var o=r.useCallback((function(e){n.current(e)}),[]);function i(e){e&&(e.removeEventListener(ox,o),e.removeEventListener(rx,o))}return r.useEffect((function(){return function(){i(t.current)}}),[]),[function(e){t.current&&t.current!==e&&i(t.current),e&&e!==t.current&&(e.addEventListener(ox,o),e.addEventListener(rx,o),t.current=e)},i]}(H),1)[0],z=r.useMemo((function(){var e,t,n;switch(T){case"appear":return y_(e={},fx,d),y_(e,px,m),y_(e,dx,b),e;case"enter":return y_(t={},fx,h),y_(t,px,v),y_(t,dx,w),t;case"leave":return y_(n={},fx,y),y_(n,px,g),y_(n,dx,O),n;default:return{}}}),[T]),G=q_(bx(T,(function(e){if(e===fx){var t=z.prepare;return!!t&&t(U())}var n;V in z&&N((null===(n=z[V])||void 0===n?void 0:n.call(z,U(),null))||null);return V===dx&&(q(U()),f>0&&(clearTimeout(D.current),D.current=setTimeout((function(){H({deadline:!0})}),f))),true})),2),W=G[0],V=G[1],Y=gx(V);B.current=Y,mx((function(){if(k(t),e){var n,r=L.current;L.current=!0,!r&&t&&c&&(n=ux),r&&t&&a&&(n=cx),(r&&!t&&l||!r&&p&&!t&&l)&&(n=sx),n&&(R(n),W())}}),[t]),(0,r.useEffect)((function(){(T===ux&&!c||T===cx&&!a||T===sx&&!l)&&R(ax)}),[c,a,l]),(0,r.useEffect)((function(){return function(){clearTimeout(D.current),M.current=!0}}),[]),(0,r.useEffect)((function(){void 0!==P&&T===ax&&(null==S||S(P))}),[P,T]);var Z=A;return z.prepare&&V===px&&(Z=v_({transition:"none"},Z)),[T,V,Z,null!=P?P:t]}const Ox=function(e){__(n,e);var t=j_(n);function n(){return b_(this,n),t.apply(this,arguments)}return O_(n,[{key:"render",value:function(){return this.props.children}}]),n}(r.Component);const Ex=function(e){var t=e;function n(e){return!(!e.motionName||!t)}"object"===h_(e)&&(t=e.transitionSupport);var o=r.forwardRef((function(e,t){var o=e.visible,i=void 0===o||o,a=e.removeOnLeave,u=void 0===a||a,c=e.forceRender,s=e.children,l=e.motionName,f=e.leavedClassName,p=e.eventProps,d=n(e),h=(0,r.useRef)(),y=(0,r.useRef)();var m=q_(wx(d,i,(function(){try{return R_(h.current||y.current)}catch(e){return null}}),e),4),v=m[0],g=m[1],b=m[2],w=m[3],O=(0,r.useRef)(t);O.current=t;var E,_=r.useCallback((function(e){h.current=e,A_(O.current,e)}),[]),x=v_(v_({},p),{},{visible:i});if(s)if(v!==ax&&n(e)){var S,j;g===fx?j="prepare":gx(g)?j="active":g===px&&(j="start"),E=s(v_(v_({},x),{},{className:G_()(ix(l,v),(S={},y_(S,ix(l,"".concat(v,"-").concat(j)),j),y_(S,l,"string"==typeof l),S)),style:b}),_)}else E=w?s(v_({},x),_):u?c?s(v_(v_({},x),{},{style:{display:"none"}}),_):null:s(v_(v_({},x),{},{className:f}),_);else E=null;return r.createElement(Ox,{ref:y},E)}));return o.displayName="CSSMotion",o}(nx);var _x="add",xx="keep",Sx="remove",jx="removed";function Px(e){var t;return v_(v_({},t=e&&"object"===h_(e)&&"key"in e?e:{key:e}),{},{key:String(t.key)})}function kx(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return e.map(Px)}function Ix(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=[],r=0,o=t.length,i=kx(e),a=kx(t);i.forEach((function(e){for(var t=!1,i=r;i<o;i+=1){var u=a[i];if(u.key===e.key){r<i&&(n=n.concat(a.slice(r,i).map((function(e){return v_(v_({},e),{},{status:_x})}))),r=i),n.push(v_(v_({},u),{},{status:xx})),r+=1,t=!0;break}}t||n.push(v_(v_({},e),{},{status:Sx}))})),r<o&&(n=n.concat(a.slice(r).map((function(e){return v_(v_({},e),{},{status:_x})}))));var u={};n.forEach((function(e){var t=e.key;u[t]=(u[t]||0)+1}));var c=Object.keys(u).filter((function(e){return u[e]>1}));return c.forEach((function(e){(n=n.filter((function(t){var n=t.key,r=t.status;return n!==e||r!==Sx}))).forEach((function(t){t.key===e&&(t.status=xx)}))})),n}var Tx=["eventProps","visible","children","motionName","motionAppear","motionEnter","motionLeave","motionLeaveImmediately","motionDeadline","removeOnLeave","leavedClassName","onAppearStart","onAppearActive","onAppearEnd","onEnterStart","onEnterActive","onEnterEnd","onLeaveStart","onLeaveActive","onLeaveEnd"];!function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Ex,n=function(e){__(o,e);var n=j_(o);function o(){var e;return b_(this,o),(e=n.apply(this,arguments)).state={keyEntities:[]},e.removeKey=function(t){e.setState((function(e){return{keyEntities:e.keyEntities.map((function(e){return e.key!==t?e:v_(v_({},e),{},{status:jx})}))}}))},e}return O_(o,[{key:"render",value:function(){var e=this,n=this.state.keyEntities,o=this.props,i=o.component,a=o.children,u=o.onVisibleChanged,c=g_(o,["component","children","onVisibleChanged"]),s=i||r.Fragment,l={};return Tx.forEach((function(e){l[e]=c[e],delete c[e]})),delete c.keys,r.createElement(s,Object.assign({},c),n.map((function(n){var o=n.status,i=g_(n,["status"]),c=o===_x||o===xx;return r.createElement(t,Object.assign({},l,{key:i.key,visible:c,eventProps:i,onVisibleChanged:function(t){null==u||u(t,{key:i.key}),t||e.removeKey(i.key)}}),a)})))}}],[{key:"getDerivedStateFromProps",value:function(e,t){var n=e.keys,r=t.keyEntities,o=kx(n);return{keyEntities:Ix(r,o).filter((function(e){var t=r.find((function(t){var n=t.key;return e.key===n}));return!t||t.status!==jx||e.status!==Sx}))}}}]),o}(r.Component);n.defaultProps={component:"div"}}(nx);const Rx=Ex;function Cx(e){var t=e.prefixCls,n=e.motion,r=e.animation,o=e.transitionName;return n||(r?{motionName:"".concat(t,"-").concat(r)}:o?{motionName:o}:null)}function Ax(e){var t=e.prefixCls,n=e.visible,o=e.zIndex,i=e.mask,a=e.maskMotion,u=e.maskAnimation,c=e.maskTransitionName;if(!i)return null;var s={};return(a||c||u)&&(s=v_({motionAppear:!0},Cx({motion:a,prefixCls:t,transitionName:c,animation:u}))),r.createElement(Rx,(0,mh.Z)({},s,{visible:n,removeOnLeave:!0}),(function(e){var n=e.className;return r.createElement("div",{style:{zIndex:o},className:U_()("".concat(t,"-mask"),n)})}))}function Nx(e){return(Nx="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Lx(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Dx(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}var Mx,Fx={Webkit:"-webkit-",Moz:"-moz-",ms:"-ms-",O:"-o-"};function Ux(){if(void 0!==Mx)return Mx;Mx="";var e=document.createElement("p").style;for(var t in Fx)t+"Transform"in e&&(Mx=t);return Mx}function Bx(){return Ux()?"".concat(Ux(),"TransitionProperty"):"transitionProperty"}function Hx(){return Ux()?"".concat(Ux(),"Transform"):"transform"}function qx(e,t){var n=Bx();n&&(e.style[n]=t,"transitionProperty"!==n&&(e.style.transitionProperty=t))}function zx(e,t){var n=Hx();n&&(e.style[n]=t,"transform"!==n&&(e.style.transform=t))}var Gx,Wx=/matrix\((.*)\)/,Vx=/matrix3d\((.*)\)/;function Yx(e){var t=e.style.display;e.style.display="none",e.offsetHeight,e.style.display=t}function Zx(e,t,n){var r=n;if("object"!==Nx(t))return void 0!==r?("number"==typeof r&&(r="".concat(r,"px")),void(e.style[t]=r)):Gx(e,t);for(var o in t)t.hasOwnProperty(o)&&Zx(e,o,t[o])}function $x(e,t){var n=e["page".concat(t?"Y":"X","Offset")],r="scroll".concat(t?"Top":"Left");if("number"!=typeof n){var o=e.document;"number"!=typeof(n=o.documentElement[r])&&(n=o.body[r])}return n}function Kx(e){return $x(e)}function Qx(e){return $x(e,!0)}function Xx(e){var t=function(e){var t,n,r,o=e.ownerDocument,i=o.body,a=o&&o.documentElement;return n=(t=e.getBoundingClientRect()).left,r=t.top,{left:n-=a.clientLeft||i.clientLeft||0,top:r-=a.clientTop||i.clientTop||0}}(e),n=e.ownerDocument,r=n.defaultView||n.parentWindow;return t.left+=Kx(r),t.top+=Qx(r),t}function Jx(e){return null!=e&&e==e.window}function eS(e){return Jx(e)?e.document:9===e.nodeType?e:e.ownerDocument}var tS=new RegExp("^(".concat(/[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,")(?!px)[a-z%]+$"),"i"),nS=/^(top|right|bottom|left)$/;function rS(e,t){return"left"===e?t.useCssRight?"right":e:t.useCssBottom?"bottom":e}function oS(e){return"left"===e?"right":"right"===e?"left":"top"===e?"bottom":"bottom"===e?"top":void 0}function iS(e,t,n){"static"===Zx(e,"position")&&(e.style.position="relative");var r=-999,o=-999,i=rS("left",n),a=rS("top",n),u=oS(i),c=oS(a);"left"!==i&&(r=999),"top"!==a&&(o=999);var s,l="",f=Xx(e);("left"in t||"top"in t)&&(l=(s=e).style.transitionProperty||s.style[Bx()]||"",qx(e,"none")),"left"in t&&(e.style[u]="",e.style[i]="".concat(r,"px")),"top"in t&&(e.style[c]="",e.style[a]="".concat(o,"px")),Yx(e);var p=Xx(e),d={};for(var h in t)if(t.hasOwnProperty(h)){var y=rS(h,n),m="left"===h?r:o,v=f[h]-p[h];d[y]=y===h?m+v:m-v}Zx(e,d),Yx(e),("left"in t||"top"in t)&&qx(e,l);var g={};for(var b in t)if(t.hasOwnProperty(b)){var w=rS(b,n),O=t[b]-f[b];g[w]=b===w?d[w]+O:d[w]-O}Zx(e,g)}function aS(e,t){var n=Xx(e),r=function(e){var t=window.getComputedStyle(e,null),n=t.getPropertyValue("transform")||t.getPropertyValue(Hx());if(n&&"none"!==n){var r=n.replace(/[^0-9\-.,]/g,"").split(",");return{x:parseFloat(r[12]||r[4],0),y:parseFloat(r[13]||r[5],0)}}return{x:0,y:0}}(e),o={x:r.x,y:r.y};"left"in t&&(o.x=r.x+t.left-n.left),"top"in t&&(o.y=r.y+t.top-n.top),function(e,t){var n=window.getComputedStyle(e,null),r=n.getPropertyValue("transform")||n.getPropertyValue(Hx());if(r&&"none"!==r){var o,i=r.match(Wx);i?((o=(i=i[1]).split(",").map((function(e){return parseFloat(e,10)})))[4]=t.x,o[5]=t.y,zx(e,"matrix(".concat(o.join(","),")"))):((o=r.match(Vx)[1].split(",").map((function(e){return parseFloat(e,10)})))[12]=t.x,o[13]=t.y,zx(e,"matrix3d(".concat(o.join(","),")")))}else zx(e,"translateX(".concat(t.x,"px) translateY(").concat(t.y,"px) translateZ(0)"))}(e,o)}function uS(e,t){for(var n=0;n<e.length;n++)t(e[n])}function cS(e){return"border-box"===Gx(e,"boxSizing")}"undefined"!=typeof window&&(Gx=window.getComputedStyle?function(e,t,n){var r=n,o="",i=eS(e);return(r=r||i.defaultView.getComputedStyle(e,null))&&(o=r.getPropertyValue(t)||r[t]),o}:function(e,t){var n=e.currentStyle&&e.currentStyle[t];if(tS.test(n)&&!nS.test(t)){var r=e.style,o=r.left,i=e.runtimeStyle.left;e.runtimeStyle.left=e.currentStyle.left,r.left="fontSize"===t?"1em":n||0,n=r.pixelLeft+"px",r.left=o,e.runtimeStyle.left=i}return""===n?"auto":n});var sS=["margin","border","padding"];function lS(e,t,n){var r,o={},i=e.style;for(r in t)t.hasOwnProperty(r)&&(o[r]=i[r],i[r]=t[r]);for(r in n.call(e),t)t.hasOwnProperty(r)&&(i[r]=o[r])}function fS(e,t,n){var r,o,i,a=0;for(o=0;o<t.length;o++)if(r=t[o])for(i=0;i<n.length;i++){var u=void 0;u="border"===r?"".concat(r).concat(n[i],"Width"):r+n[i],a+=parseFloat(Gx(e,u))||0}return a}var pS={getParent:function(e){var t=e;do{t=11===t.nodeType&&t.host?t.host:t.parentNode}while(t&&1!==t.nodeType&&9!==t.nodeType);return t}};function dS(e,t,n){var r=n;if(Jx(e))return"width"===t?pS.viewportWidth(e):pS.viewportHeight(e);if(9===e.nodeType)return"width"===t?pS.docWidth(e):pS.docHeight(e);var o="width"===t?["Left","Right"]:["Top","Bottom"],i="width"===t?e.getBoundingClientRect().width:e.getBoundingClientRect().height,a=(Gx(e),cS(e)),u=0;(null==i||i<=0)&&(i=void 0,(null==(u=Gx(e,t))||Number(u)<0)&&(u=e.style[t]||0),u=parseFloat(u)||0),void 0===r&&(r=a?1:-1);var c=void 0!==i||a,s=i||u;return-1===r?c?s-fS(e,["border","padding"],o):u:c?1===r?s:s+(2===r?-fS(e,["border"],o):fS(e,["margin"],o)):u+fS(e,sS.slice(r),o)}uS(["Width","Height"],(function(e){pS["doc".concat(e)]=function(t){var n=t.document;return Math.max(n.documentElement["scroll".concat(e)],n.body["scroll".concat(e)],pS["viewport".concat(e)](n))},pS["viewport".concat(e)]=function(t){var n="client".concat(e),r=t.document,o=r.body,i=r.documentElement[n];return"CSS1Compat"===r.compatMode&&i||o&&o[n]||i}}));var hS={position:"absolute",visibility:"hidden",display:"block"};function yS(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var r,o=t[0];return 0!==o.offsetWidth?r=dS.apply(void 0,t):lS(o,hS,(function(){r=dS.apply(void 0,t)})),r}function mS(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e}uS(["width","height"],(function(e){var t=e.charAt(0).toUpperCase()+e.slice(1);pS["outer".concat(t)]=function(t,n){return t&&yS(t,e,n?0:1)};var n="width"===e?["Left","Right"]:["Top","Bottom"];pS[e]=function(t,r){var o=r;if(void 0===o)return t&&yS(t,e,-1);if(t){Gx(t);return cS(t)&&(o+=fS(t,["padding","border"],n)),Zx(t,e,o)}}}));var vS={getWindow:function(e){if(e&&e.document&&e.setTimeout)return e;var t=e.ownerDocument||e;return t.defaultView||t.parentWindow},getDocument:eS,offset:function(e,t,n){if(void 0===t)return Xx(e);!function(e,t,n){if(n.ignoreShake){var r=Xx(e),o=r.left.toFixed(0),i=r.top.toFixed(0),a=t.left.toFixed(0),u=t.top.toFixed(0);if(o===a&&i===u)return}n.useCssRight||n.useCssBottom?iS(e,t,n):n.useCssTransform&&Hx()in document.body.style?aS(e,t):iS(e,t,n)}(e,t,n||{})},isWindow:Jx,each:uS,css:Zx,clone:function(e){var t,n={};for(t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);if(e.overflow)for(t in e)e.hasOwnProperty(t)&&(n.overflow[t]=e.overflow[t]);return n},mix:mS,getWindowScrollLeft:function(e){return Kx(e)},getWindowScrollTop:function(e){return Qx(e)},merge:function(){for(var e={},t=0;t<arguments.length;t++)vS.mix(e,t<0||arguments.length<=t?void 0:arguments[t]);return e},viewportWidth:0,viewportHeight:0};mS(vS,pS);var gS=vS.getParent;function bS(e){if(vS.isWindow(e)||9===e.nodeType)return null;var t,n=vS.getDocument(e).body,r=vS.css(e,"position");if(!("fixed"===r||"absolute"===r))return"html"===e.nodeName.toLowerCase()?null:gS(e);for(t=gS(e);t&&t!==n&&9!==t.nodeType;t=gS(t))if("static"!==(r=vS.css(t,"position")))return t;return null}var wS=vS.getParent;function OS(e,t){for(var n={left:0,right:1/0,top:0,bottom:1/0},r=bS(e),o=vS.getDocument(e),i=o.defaultView||o.parentWindow,a=o.body,u=o.documentElement;r;){if(-1!==navigator.userAgent.indexOf("MSIE")&&0===r.clientWidth||r===a||r===u||"visible"===vS.css(r,"overflow")){if(r===a||r===u)break}else{var c=vS.offset(r);c.left+=r.clientLeft,c.top+=r.clientTop,n.top=Math.max(n.top,c.top),n.right=Math.min(n.right,c.left+r.clientWidth),n.bottom=Math.min(n.bottom,c.top+r.clientHeight),n.left=Math.max(n.left,c.left)}r=bS(r)}var s=null;vS.isWindow(e)||9===e.nodeType||(s=e.style.position,"absolute"===vS.css(e,"position")&&(e.style.position="fixed"));var l=vS.getWindowScrollLeft(i),f=vS.getWindowScrollTop(i),p=vS.viewportWidth(i),d=vS.viewportHeight(i),h=u.scrollWidth,y=u.scrollHeight,m=window.getComputedStyle(a);if("hidden"===m.overflowX&&(h=i.innerWidth),"hidden"===m.overflowY&&(y=i.innerHeight),e.style&&(e.style.position=s),t||function(e){if(vS.isWindow(e)||9===e.nodeType)return!1;var t=vS.getDocument(e).body,n=null;for(n=wS(e);n&&n!==t;n=wS(n))if("fixed"===vS.css(n,"position"))return!0;return!1}(e))n.left=Math.max(n.left,l),n.top=Math.max(n.top,f),n.right=Math.min(n.right,l+p),n.bottom=Math.min(n.bottom,f+d);else{var v=Math.max(h,l+p);n.right=Math.min(n.right,v);var g=Math.max(y,f+d);n.bottom=Math.min(n.bottom,g)}return n.top>=0&&n.left>=0&&n.bottom>n.top&&n.right>n.left?n:null}function ES(e){var t,n,r;if(vS.isWindow(e)||9===e.nodeType){var o=vS.getWindow(e);t={left:vS.getWindowScrollLeft(o),top:vS.getWindowScrollTop(o)},n=vS.viewportWidth(o),r=vS.viewportHeight(o)}else t=vS.offset(e),n=vS.outerWidth(e),r=vS.outerHeight(e);return t.width=n,t.height=r,t}function _S(e,t){var n=t.charAt(0),r=t.charAt(1),o=e.width,i=e.height,a=e.left,u=e.top;return"c"===n?u+=i/2:"b"===n&&(u+=i),"c"===r?a+=o/2:"r"===r&&(a+=o),{left:a,top:u}}function xS(e,t,n,r,o){var i=_S(t,n[1]),a=_S(e,n[0]),u=[a.left-i.left,a.top-i.top];return{left:Math.round(e.left-u[0]+r[0]-o[0]),top:Math.round(e.top-u[1]+r[1]-o[1])}}function SS(e,t,n){return e.left<n.left||e.left+t.width>n.right}function jS(e,t,n){return e.top<n.top||e.top+t.height>n.bottom}function PS(e,t,n){var r=[];return vS.each(e,(function(e){r.push(e.replace(t,(function(e){return n[e]})))})),r}function kS(e,t){return e[t]=-e[t],e}function IS(e,t){return(/%$/.test(e)?parseInt(e.substring(0,e.length-1),10)/100*t:parseInt(e,10))||0}function TS(e,t){e[0]=IS(e[0],t.width),e[1]=IS(e[1],t.height)}function RS(e,t,n,r){var o=n.points,i=n.offset||[0,0],a=n.targetOffset||[0,0],u=n.overflow,c=n.source||e;i=[].concat(i),a=[].concat(a);var s={},l=0,f=OS(c,!(!(u=u||{})||!u.alwaysByViewport)),p=ES(c);TS(i,p),TS(a,t);var d=xS(p,t,o,i,a),h=vS.merge(p,d);if(f&&(u.adjustX||u.adjustY)&&r){if(u.adjustX&&SS(d,p,f)){var y=PS(o,/[lr]/gi,{l:"r",r:"l"}),m=kS(i,0),v=kS(a,0);(function(e,t,n){return e.left>n.right||e.left+t.width<n.left})(xS(p,t,y,m,v),p,f)||(l=1,o=y,i=m,a=v)}if(u.adjustY&&jS(d,p,f)){var g=PS(o,/[tb]/gi,{t:"b",b:"t"}),b=kS(i,1),w=kS(a,1);(function(e,t,n){return e.top>n.bottom||e.top+t.height<n.top})(xS(p,t,g,b,w),p,f)||(l=1,o=g,i=b,a=w)}l&&(d=xS(p,t,o,i,a),vS.mix(h,d));var O=SS(d,p,f),E=jS(d,p,f);if(O||E){var _=o;O&&(_=PS(o,/[lr]/gi,{l:"r",r:"l"})),E&&(_=PS(o,/[tb]/gi,{t:"b",b:"t"})),o=_,i=n.offset||[0,0],a=n.targetOffset||[0,0]}s.adjustX=u.adjustX&&O,s.adjustY=u.adjustY&&E,(s.adjustX||s.adjustY)&&(h=function(e,t,n,r){var o=vS.clone(e),i={width:t.width,height:t.height};return r.adjustX&&o.left<n.left&&(o.left=n.left),r.resizeWidth&&o.left>=n.left&&o.left+i.width>n.right&&(i.width-=o.left+i.width-n.right),r.adjustX&&o.left+i.width>n.right&&(o.left=Math.max(n.right-i.width,n.left)),r.adjustY&&o.top<n.top&&(o.top=n.top),r.resizeHeight&&o.top>=n.top&&o.top+i.height>n.bottom&&(i.height-=o.top+i.height-n.bottom),r.adjustY&&o.top+i.height>n.bottom&&(o.top=Math.max(n.bottom-i.height,n.top)),vS.mix(o,i)}(d,p,f,s))}return h.width!==p.width&&vS.css(c,"width",vS.width(c)+h.width-p.width),h.height!==p.height&&vS.css(c,"height",vS.height(c)+h.height-p.height),vS.offset(c,{left:h.left,top:h.top},{useCssRight:n.useCssRight,useCssBottom:n.useCssBottom,useCssTransform:n.useCssTransform,ignoreShake:n.ignoreShake}),{points:o,offset:i,targetOffset:a,overflow:s}}function CS(e,t,n){var r=n.target||t;return RS(e,ES(r),n,!function(e,t){var n=OS(e,t),r=ES(e);return!n||r.left+r.width<=n.left||r.top+r.height<=n.top||r.left>=n.right||r.top>=n.bottom}(r,n.overflow&&n.overflow.alwaysByViewport))}function AS(e,t,n){var r,o,i=vS.getDocument(e),a=i.defaultView||i.parentWindow,u=vS.getWindowScrollLeft(a),c=vS.getWindowScrollTop(a),s=vS.viewportWidth(a),l=vS.viewportHeight(a);r="pageX"in t?t.pageX:u+t.clientX,o="pageY"in t?t.pageY:c+t.clientY;var f=r>=0&&r<=u+s&&o>=0&&o<=c+l;return RS(e,{left:r,top:o,width:0,height:0},function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Dx(n,!0).forEach((function(t){Lx(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Dx(n).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({},n,{points:[n.points[0],"cc"]}),f)}CS.__getOffsetParent=bS,CS.__getVisibleRectForElement=OS;var NS=function(){if("undefined"!=typeof Map)return Map;function e(e,t){var n=-1;return e.some((function(e,r){return e[0]===t&&(n=r,!0)})),n}return function(){function t(){this.__entries__=[]}return Object.defineProperty(t.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),t.prototype.get=function(t){var n=e(this.__entries__,t),r=this.__entries__[n];return r&&r[1]},t.prototype.set=function(t,n){var r=e(this.__entries__,t);~r?this.__entries__[r][1]=n:this.__entries__.push([t,n])},t.prototype.delete=function(t){var n=this.__entries__,r=e(n,t);~r&&n.splice(r,1)},t.prototype.has=function(t){return!!~e(this.__entries__,t)},t.prototype.clear=function(){this.__entries__.splice(0)},t.prototype.forEach=function(e,t){void 0===t&&(t=null);for(var n=0,r=this.__entries__;n<r.length;n++){var o=r[n];e.call(t,o[1],o[0])}},t}()}(),LS="undefined"!=typeof window&&"undefined"!=typeof document&&window.document===document,DS=void 0!==a.g&&a.g.Math===Math?a.g:"undefined"!=typeof self&&self.Math===Math?self:"undefined"!=typeof window&&window.Math===Math?window:Function("return this")(),MS="function"==typeof requestAnimationFrame?requestAnimationFrame.bind(DS):function(e){return setTimeout((function(){return e(Date.now())}),1e3/60)};var FS=["top","right","bottom","left","width","height","size","weight"],US="undefined"!=typeof MutationObserver,BS=function(){function e(){this.connected_=!1,this.mutationEventsAdded_=!1,this.mutationsObserver_=null,this.observers_=[],this.onTransitionEnd_=this.onTransitionEnd_.bind(this),this.refresh=function(e,t){var n=!1,r=!1,o=0;function i(){n&&(n=!1,e()),r&&u()}function a(){MS(i)}function u(){var e=Date.now();if(n){if(e-o<2)return;r=!0}else n=!0,r=!1,setTimeout(a,t);o=e}return u}(this.refresh.bind(this),20)}return e.prototype.addObserver=function(e){~this.observers_.indexOf(e)||this.observers_.push(e),this.connected_||this.connect_()},e.prototype.removeObserver=function(e){var t=this.observers_,n=t.indexOf(e);~n&&t.splice(n,1),!t.length&&this.connected_&&this.disconnect_()},e.prototype.refresh=function(){this.updateObservers_()&&this.refresh()},e.prototype.updateObservers_=function(){var e=this.observers_.filter((function(e){return e.gatherActive(),e.hasActive()}));return e.forEach((function(e){return e.broadcastActive()})),e.length>0},e.prototype.connect_=function(){LS&&!this.connected_&&(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),US?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){LS&&this.connected_&&(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(e){var t=e.propertyName,n=void 0===t?"":t;FS.some((function(e){return!!~n.indexOf(e)}))&&this.refresh()},e.getInstance=function(){return this.instance_||(this.instance_=new e),this.instance_},e.instance_=null,e}(),HS=function(e,t){for(var n=0,r=Object.keys(t);n<r.length;n++){var o=r[n];Object.defineProperty(e,o,{value:t[o],enumerable:!1,writable:!1,configurable:!0})}return e},qS=function(e){return e&&e.ownerDocument&&e.ownerDocument.defaultView||DS},zS=$S(0,0,0,0);function GS(e){return parseFloat(e)||0}function WS(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];return t.reduce((function(t,n){return t+GS(e["border-"+n+"-width"])}),0)}function VS(e){var t=e.clientWidth,n=e.clientHeight;if(!t&&!n)return zS;var r=qS(e).getComputedStyle(e),o=function(e){for(var t={},n=0,r=["top","right","bottom","left"];n<r.length;n++){var o=r[n],i=e["padding-"+o];t[o]=GS(i)}return t}(r),i=o.left+o.right,a=o.top+o.bottom,u=GS(r.width),c=GS(r.height);if("border-box"===r.boxSizing&&(Math.round(u+i)!==t&&(u-=WS(r,"left","right")+i),Math.round(c+a)!==n&&(c-=WS(r,"top","bottom")+a)),!function(e){return e===qS(e).document.documentElement}(e)){var s=Math.round(u+i)-t,l=Math.round(c+a)-n;1!==Math.abs(s)&&(u-=s),1!==Math.abs(l)&&(c-=l)}return $S(o.left,o.top,u,c)}var YS="undefined"!=typeof SVGGraphicsElement?function(e){return e instanceof qS(e).SVGGraphicsElement}:function(e){return e instanceof qS(e).SVGElement&&"function"==typeof e.getBBox};function ZS(e){return LS?YS(e)?function(e){var t=e.getBBox();return $S(0,0,t.width,t.height)}(e):VS(e):zS}function $S(e,t,n,r){return{x:e,y:t,width:n,height:r}}var KS=function(){function e(e){this.broadcastWidth=0,this.broadcastHeight=0,this.contentRect_=$S(0,0,0,0),this.target=e}return e.prototype.isActive=function(){var e=ZS(this.target);return this.contentRect_=e,e.width!==this.broadcastWidth||e.height!==this.broadcastHeight},e.prototype.broadcastRect=function(){var e=this.contentRect_;return this.broadcastWidth=e.width,this.broadcastHeight=e.height,e},e}(),QS=function(e,t){var n=function(e){var t=e.x,n=e.y,r=e.width,o=e.height,i="undefined"!=typeof DOMRectReadOnly?DOMRectReadOnly:Object,a=Object.create(i.prototype);return HS(a,{x:t,y:n,width:r,height:o,top:n,right:t+r,bottom:o+n,left:t}),a}(t);HS(this,{target:e,contentRect:n})},XS=function(){function e(e,t,n){if(this.activeObservations_=[],this.observations_=new NS,"function"!=typeof e)throw new TypeError("The callback provided as parameter 1 is not a function.");this.callback_=e,this.controller_=t,this.callbackCtx_=n}return e.prototype.observe=function(e){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if("undefined"!=typeof Element&&Element instanceof Object){if(!(e instanceof qS(e).Element))throw new TypeError('parameter 1 is not of type "Element".');var t=this.observations_;t.has(e)||(t.set(e,new KS(e)),this.controller_.addObserver(this),this.controller_.refresh())}},e.prototype.unobserve=function(e){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if("undefined"!=typeof Element&&Element instanceof Object){if(!(e instanceof qS(e).Element))throw new TypeError('parameter 1 is not of type "Element".');var t=this.observations_;t.has(e)&&(t.delete(e),t.size||this.controller_.removeObserver(this))}},e.prototype.disconnect=function(){this.clearActive(),this.observations_.clear(),this.controller_.removeObserver(this)},e.prototype.gatherActive=function(){var e=this;this.clearActive(),this.observations_.forEach((function(t){t.isActive()&&e.activeObservations_.push(t)}))},e.prototype.broadcastActive=function(){if(this.hasActive()){var e=this.callbackCtx_,t=this.activeObservations_.map((function(e){return new QS(e.target,e.broadcastRect())}));this.callback_.call(e,t,e),this.clearActive()}},e.prototype.clearActive=function(){this.activeObservations_.splice(0)},e.prototype.hasActive=function(){return this.activeObservations_.length>0},e}(),JS="undefined"!=typeof WeakMap?new WeakMap:new NS,ej=function e(t){if(!(this instanceof e))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var n=BS.getInstance(),r=new XS(t,n,this);JS.set(this,r)};["observe","unobserve","disconnect"].forEach((function(e){ej.prototype[e]=function(){var t;return(t=JS.get(this))[e].apply(t,arguments)}}));const tj=void 0!==DS.ResizeObserver?DS.ResizeObserver:ej;function nj(e,t){var n=null,r=null;var o=new tj((function(e){var o=q_(e,1)[0].target;if(document.documentElement.contains(o)){var i=o.getBoundingClientRect(),a=i.width,u=i.height,c=Math.floor(a),s=Math.floor(u);n===c&&r===s||Promise.resolve().then((function(){t({width:c,height:s})})),n=c,r=s}}));return e&&o.observe(e),function(){o.disconnect()}}function rj(e){return"function"!=typeof e?null:e()}function oj(e){return"object"===h_(e)&&e?e:null}var ij=r.forwardRef((function(e,t){var n=e.children,o=e.disabled,i=e.target,a=e.align,u=e.onAlign,c=e.monitorWindowResize,s=e.monitorBufferTime,l=void 0===s?0:s,f=r.useRef({}),p=r.useRef(),d=r.Children.only(n),h=r.useRef({});h.current.disabled=o,h.current.target=i,h.current.onAlign=u;var y=q_(function(e,t){var n=r.useRef(!1),o=r.useRef(null);function i(){window.clearTimeout(o.current)}return[function r(a){if(n.current&&!0!==a)i(),o.current=window.setTimeout((function(){n.current=!1,r()}),t);else{if(!1===e())return;n.current=!0,i(),o.current=window.setTimeout((function(){n.current=!1}),t)}},function(){n.current=!1,i()}]}((function(){var e=h.current,t=e.disabled,n=e.target,r=e.onAlign;if(!t&&n){var o,i=p.current,u=rj(n),c=oj(n);f.current.element=u,f.current.point=c;var s=document.activeElement;return u&&function(e){if(!e)return!1;if(e.offsetParent)return!0;if(e.getBBox){var t=e.getBBox();if(t.width||t.height)return!0}if(e.getBoundingClientRect){var n=e.getBoundingClientRect();if(n.width||n.height)return!0}return!1}(u)?o=CS(i,u,a):c&&(o=AS(i,c,a)),function(e,t){e!==document.activeElement&&T_(t,e)&&"function"==typeof e.focus&&e.focus()}(s,i),r&&o&&r(i,o),!0}return!1}),l),2),m=y[0],v=y[1],g=r.useRef({cancel:function(){}}),b=r.useRef({cancel:function(){}});r.useEffect((function(){var e,t,n=rj(i),r=oj(i);p.current!==b.current.element&&(b.current.cancel(),b.current.element=p.current,b.current.cancel=nj(p.current,m)),f.current.element===n&&((e=f.current.point)===(t=r)||e&&t&&("pageX"in t&&"pageY"in t?e.pageX===t.pageX&&e.pageY===t.pageY:"clientX"in t&&"clientY"in t&&e.clientX===t.clientX&&e.clientY===t.clientY))||(m(),g.current.element!==n&&(g.current.cancel(),g.current.element=n,g.current.cancel=nj(n,m)))})),r.useEffect((function(){o?v():m()}),[o]);var w=r.useRef(null);return r.useEffect((function(){c?w.current||(w.current=L_(window,"resize",m)):w.current&&(w.current.remove(),w.current=null)}),[c]),r.useEffect((function(){return function(){g.current.cancel(),b.current.cancel(),w.current&&w.current.remove(),v()}}),[]),r.useImperativeHandle(t,(function(){return{forceAlign:function(){return m(!0)}}})),r.isValidElement(d)&&(d=r.cloneElement(d,{ref:N_(d.ref,p)})),d}));ij.displayName="Align";const aj=ij;var uj=a(66534),cj=a.n(uj);function sj(e,t,n,r,o,i,a){try{var u=e[i](a),c=u.value}catch(e){return void n(e)}u.done?t(c):Promise.resolve(c).then(r,o)}function lj(e){return function(){var t=this,n=arguments;return new Promise((function(r,o){var i=e.apply(t,n);function a(e){sj(i,r,o,a,u,"next",e)}function u(e){sj(i,r,o,a,u,"throw",e)}a(void 0)}))}}var fj=["measure","align",null,"motion"];var pj=r.forwardRef((function(e,t){var n=e.visible,o=e.prefixCls,i=e.className,a=e.style,u=e.children,c=e.zIndex,s=e.stretch,l=e.destroyPopupOnHide,f=e.align,p=e.point,d=e.getRootDomNode,h=e.getClassNameFromAlign,y=e.onAlign,m=e.onMouseEnter,v=e.onMouseLeave,g=e.onMouseDown,b=e.onTouchStart,w=(0,r.useRef)(),O=(0,r.useRef)(),E=q_((0,r.useState)(),2),_=E[0],x=E[1],S=function(e){var t=q_(r.useState({width:0,height:0}),2),n=t[0],o=t[1];return[r.useMemo((function(){var t={};if(e){var r=n.width,o=n.height;-1!==e.indexOf("height")&&o?t.height=o:-1!==e.indexOf("minHeight")&&o&&(t.minHeight=o),-1!==e.indexOf("width")&&r?t.width=r:-1!==e.indexOf("minWidth")&&r&&(t.minWidth=r)}return t}),[e,n]),function(e){o({width:e.offsetWidth,height:e.offsetHeight})}]}(s),j=q_(S,2),P=j[0],k=j[1];var I=function(e,t){var n=q_((0,r.useState)(null),2),o=n[0],i=n[1],a=(0,r.useRef)(),u=(0,r.useRef)(!1);function c(e){u.current||i(e)}function s(){I_.cancel(a.current)}return(0,r.useEffect)((function(){c("measure")}),[e]),(0,r.useEffect)((function(){switch(o){case"measure":t()}o&&(a.current=I_(lj(cj().mark((function e(){var t,n;return cj().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:t=fj.indexOf(o),(n=fj[t+1])&&-1!==t&&c(n);case 3:case"end":return e.stop()}}),e)})))))}),[o]),(0,r.useEffect)((function(){return function(){u.current=!0,s()}}),[]),[o,function(e){s(),a.current=I_((function(){c((function(e){switch(o){case"align":return"motion";case"motion":return"stable"}return e})),null==e||e()}))}]}(n,(function(){s&&k(d())})),T=q_(I,2),R=T[0],C=T[1],A=(0,r.useRef)();function N(){var e;null===(e=w.current)||void 0===e||e.forceAlign()}function L(e,t){if("align"===R){var n=h(t);x(n),_!==n?Promise.resolve().then((function(){N()})):C((function(){var e;null===(e=A.current)||void 0===e||e.call(A)})),null==y||y(e,t)}}var D=v_({},Cx(e));function M(){return new Promise((function(e){A.current=e}))}["onAppearEnd","onEnterEnd","onLeaveEnd"].forEach((function(e){var t=D[e];D[e]=function(e,n){return C(),null==t?void 0:t(e,n)}})),r.useEffect((function(){D.motionName||"motion"!==R||C()}),[D.motionName,R]),r.useImperativeHandle(t,(function(){return{forceAlign:N,getElement:function(){return O.current}}}));var F=v_(v_(v_({},P),{},{zIndex:c},a),{},{opacity:"motion"!==R&&"stable"!==R&&n?0:void 0,pointerEvents:"stable"===R?void 0:"none"}),U=!0;!(null==f?void 0:f.points)||"align"!==R&&"stable"!==R||(U=!1);var B=u;return r.Children.count(u)>1&&(B=r.createElement("div",{className:"".concat(o,"-content")},u)),r.createElement(Rx,(0,mh.Z)({visible:n,ref:O,leavedClassName:"".concat(o,"-hidden")},D,{onAppearPrepare:M,onEnterPrepare:M,removeOnLeave:l}),(function(e,t){var n=e.className,a=e.style,u=U_()(o,i,_,n);return r.createElement(aj,{target:p||d,key:"popup",ref:w,monitorWindowResize:!0,disabled:U,align:f,onAlign:L},r.createElement("div",{ref:t,className:u,onMouseEnter:m,onMouseLeave:v,onMouseDown:g,onTouchStart:b,style:v_(v_({},a),F)},B))}))}));pj.displayName="PopupInner";const dj=pj;var hj=r.forwardRef((function(e,t){var n=e.prefixCls,o=e.visible,i=e.zIndex,a=e.children,u=e.mobile,c=(u=void 0===u?{}:u).popupClassName,s=u.popupStyle,l=u.popupMotion,f=void 0===l?{}:l,p=u.popupRender,d=r.useRef();r.useImperativeHandle(t,(function(){return{forceAlign:function(){},getElement:function(){return d.current}}}));var h=v_({zIndex:i},s),y=a;return r.Children.count(a)>1&&(y=r.createElement("div",{className:"".concat(n,"-content")},a)),p&&(y=p(y)),r.createElement(Rx,(0,mh.Z)({visible:o,ref:d,removeOnLeave:!0},f),(function(e,t){var o=e.className,i=e.style,a=U_()(n,c,o);return r.createElement("div",{ref:t,className:a,style:v_(v_({},i),h)},y)}))}));hj.displayName="MobilePopupInner";const yj=hj;var mj=r.forwardRef((function(e,t){var n=e.visible,o=e.mobile,i=g_(e,["visible","mobile"]),a=q_((0,r.useState)(n),2),u=a[0],c=a[1],s=q_((0,r.useState)(!1),2),l=s[0],f=s[1],p=v_(v_({},i),{},{visible:u});(0,r.useEffect)((function(){c(n),n&&o&&f(function(){if("undefined"==typeof navigator||"undefined"==typeof window)return!1;var e=navigator.userAgent||navigator.vendor||window.opera;return!(!/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(e)&&!/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(e.substr(0,4)))}())}),[n,o]);var d=l?r.createElement(yj,(0,mh.Z)({},p,{mobile:o,ref:t})):r.createElement(dj,(0,mh.Z)({},p,{ref:t}));return r.createElement("div",null,r.createElement(Ax,p),d)}));mj.displayName="Popup";const vj=mj;const gj=r.createContext(null);function bj(){}function wj(){return""}function Oj(e){return e?e.ownerDocument:window.document}var Ej=["onClick","onMouseDown","onTouchStart","onMouseEnter","onMouseLeave","onFocus","onBlur","onContextMenu"];const _j=(xj=M_,(Sj=function(e){__(n,e);var t=j_(n);function n(e){var i,a;return b_(this,n),(i=t.call(this,e)).popupRef=r.createRef(),i.triggerRef=r.createRef(),i.onMouseEnter=function(e){var t=i.props.mouseEnterDelay;i.fireEvents("onMouseEnter",e),i.delaySetPopupVisible(!0,t,t?null:e)},i.onMouseMove=function(e){i.fireEvents("onMouseMove",e),i.setPoint(e)},i.onMouseLeave=function(e){i.fireEvents("onMouseLeave",e),i.delaySetPopupVisible(!1,i.props.mouseLeaveDelay)},i.onPopupMouseEnter=function(){i.clearDelayTimer()},i.onPopupMouseLeave=function(e){var t;e.relatedTarget&&!e.relatedTarget.setTimeout&&T_(null===(t=i.popupRef.current)||void 0===t?void 0:t.getElement(),e.relatedTarget)||i.delaySetPopupVisible(!1,i.props.mouseLeaveDelay)},i.onFocus=function(e){i.fireEvents("onFocus",e),i.clearDelayTimer(),i.isFocusToShow()&&(i.focusTime=Date.now(),i.delaySetPopupVisible(!0,i.props.focusDelay))},i.onMouseDown=function(e){i.fireEvents("onMouseDown",e),i.preClickTime=Date.now()},i.onTouchStart=function(e){i.fireEvents("onTouchStart",e),i.preTouchTime=Date.now()},i.onBlur=function(e){i.fireEvents("onBlur",e),i.clearDelayTimer(),i.isBlurToHide()&&i.delaySetPopupVisible(!1,i.props.blurDelay)},i.onContextMenu=function(e){e.preventDefault(),i.fireEvents("onContextMenu",e),i.setPopupVisible(!0,e)},i.onContextMenuClose=function(){i.isContextMenuToShow()&&i.close()},i.onClick=function(e){if(i.fireEvents("onClick",e),i.focusTime){var t;if(i.preClickTime&&i.preTouchTime?t=Math.min(i.preClickTime,i.preTouchTime):i.preClickTime?t=i.preClickTime:i.preTouchTime&&(t=i.preTouchTime),Math.abs(t-i.focusTime)<20)return;i.focusTime=0}i.preClickTime=0,i.preTouchTime=0,i.isClickToShow()&&(i.isClickToHide()||i.isBlurToHide())&&e&&e.preventDefault&&e.preventDefault();var n=!i.state.popupVisible;(i.isClickToHide()&&!n||n&&i.isClickToShow())&&i.setPopupVisible(!i.state.popupVisible,e)},i.onPopupMouseDown=function(){var e;i.hasPopupMouseDown=!0,clearTimeout(i.mouseDownTimeout),i.mouseDownTimeout=window.setTimeout((function(){i.hasPopupMouseDown=!1}),0),i.context&&(e=i.context).onPopupMouseDown.apply(e,arguments)},i.onDocumentClick=function(e){if(!i.props.mask||i.props.maskClosable){var t=e.target,n=i.getRootDomNode(),r=i.getPopupDomNode();T_(n,t)||T_(r,t)||i.hasPopupMouseDown||i.close()}},i.getRootDomNode=function(){var e=i.props.getTriggerDOMNode;if(e)return e(i.triggerRef.current);try{var t=R_(i.triggerRef.current);if(t)return t}catch(e){}return o.findDOMNode((0,Pm.Z)(i))},i.getPopupClassNameFromAlign=function(e){var t=[],n=i.props,r=n.popupPlacement,o=n.builtinPlacements,a=n.prefixCls,u=n.alignPoint,c=n.getPopupClassNameFromAlign;return r&&o&&t.push(function(e,t,n,r){for(var o=n.points,i=Object.keys(e),a=0;a<i.length;a+=1){var u=i[a];if(B_(e[u].points,o,r))return"".concat(t,"-placement-").concat(u)}return""}(o,a,e,u)),c&&t.push(c(e)),t.join(" ")},i.getComponent=function(){var e=i.props,t=e.prefixCls,n=e.destroyPopupOnHide,o=e.popupClassName,a=e.onPopupAlign,u=e.popupMotion,c=e.popupAnimation,s=e.popupTransitionName,l=e.popupStyle,f=e.mask,p=e.maskAnimation,d=e.maskTransitionName,h=e.maskMotion,y=e.zIndex,m=e.popup,v=e.stretch,g=e.alignPoint,b=e.mobile,w=i.state,O=w.popupVisible,E=w.point,_=i.getPopupAlign(),x={};return i.isMouseEnterToShow()&&(x.onMouseEnter=i.onPopupMouseEnter),i.isMouseLeaveToHide()&&(x.onMouseLeave=i.onPopupMouseLeave),x.onMouseDown=i.onPopupMouseDown,x.onTouchStart=i.onPopupMouseDown,r.createElement(vj,(0,mh.Z)({prefixCls:t,destroyPopupOnHide:n,visible:O,point:g&&E,className:o,align:_,onAlign:a,animation:c,getClassNameFromAlign:i.getPopupClassNameFromAlign},x,{stretch:v,getRootDomNode:i.getRootDomNode,style:l,mask:f,zIndex:y,transitionName:s,maskAnimation:p,maskTransitionName:d,maskMotion:h,ref:i.popupRef,motion:u,mobile:b}),"function"==typeof m?m():m)},i.attachParent=function(e){I_.cancel(i.attachId);var t,n=i.props,r=n.getPopupContainer,o=n.getDocument,a=i.getRootDomNode();r?(a||0===r.length)&&(t=r(a)):t=o(i.getRootDomNode()).body,t?t.appendChild(e):i.attachId=I_((function(){i.attachParent(e)}))},i.getContainer=function(){var e=(0,i.props.getDocument)(i.getRootDomNode()).createElement("div");return e.style.position="absolute",e.style.top="0",e.style.left="0",e.style.width="100%",i.attachParent(e),e},i.setPoint=function(e){i.props.alignPoint&&e&&i.setState({point:{pageX:e.pageX,pageY:e.pageY}})},i.handlePortalUpdate=function(){i.state.prevPopupVisible!==i.state.popupVisible&&i.props.afterPopupVisibleChange(i.state.popupVisible)},a="popupVisible"in e?!!e.popupVisible:!!e.defaultPopupVisible,i.state={prevPopupVisible:a,popupVisible:a},Ej.forEach((function(e){i["fire".concat(e)]=function(t){i.fireEvents(e,t)}})),i}return O_(n,[{key:"componentDidMount",value:function(){this.componentDidUpdate()}},{key:"componentDidUpdate",value:function(){var e,t=this.props;if(this.state.popupVisible)return this.clickOutsideHandler||!this.isClickToHide()&&!this.isContextMenuToShow()||(e=t.getDocument(this.getRootDomNode()),this.clickOutsideHandler=L_(e,"mousedown",this.onDocumentClick)),this.touchOutsideHandler||(e=e||t.getDocument(this.getRootDomNode()),this.touchOutsideHandler=L_(e,"touchstart",this.onDocumentClick)),!this.contextMenuOutsideHandler1&&this.isContextMenuToShow()&&(e=e||t.getDocument(this.getRootDomNode()),this.contextMenuOutsideHandler1=L_(e,"scroll",this.onContextMenuClose)),void(!this.contextMenuOutsideHandler2&&this.isContextMenuToShow()&&(this.contextMenuOutsideHandler2=L_(window,"blur",this.onContextMenuClose)));this.clearOutsideHandler()}},{key:"componentWillUnmount",value:function(){this.clearDelayTimer(),this.clearOutsideHandler(),clearTimeout(this.mouseDownTimeout),I_.cancel(this.attachId)}},{key:"getPopupDomNode",value:function(){var e;return(null===(e=this.popupRef.current)||void 0===e?void 0:e.getElement())||null}},{key:"getPopupAlign",value:function(){var e=this.props,t=e.popupPlacement,n=e.popupAlign,r=e.builtinPlacements;return t&&r?function(e,t,n){return v_(v_({},e[t]||{}),n)}(r,t,n):n}},{key:"setPopupVisible",value:function(e,t){var n=this.props.alignPoint,r=this.state.popupVisible;this.clearDelayTimer(),r!==e&&("popupVisible"in this.props||this.setState({popupVisible:e,prevPopupVisible:r}),this.props.onPopupVisibleChange(e)),n&&t&&e&&this.setPoint(t)}},{key:"delaySetPopupVisible",value:function(e,t,n){var r=this,o=1e3*t;if(this.clearDelayTimer(),o){var i=n?{pageX:n.pageX,pageY:n.pageY}:null;this.delayTimer=window.setTimeout((function(){r.setPopupVisible(e,i),r.clearDelayTimer()}),o)}else this.setPopupVisible(e,n)}},{key:"clearDelayTimer",value:function(){this.delayTimer&&(clearTimeout(this.delayTimer),this.delayTimer=null)}},{key:"clearOutsideHandler",value:function(){this.clickOutsideHandler&&(this.clickOutsideHandler.remove(),this.clickOutsideHandler=null),this.contextMenuOutsideHandler1&&(this.contextMenuOutsideHandler1.remove(),this.contextMenuOutsideHandler1=null),this.contextMenuOutsideHandler2&&(this.contextMenuOutsideHandler2.remove(),this.contextMenuOutsideHandler2=null),this.touchOutsideHandler&&(this.touchOutsideHandler.remove(),this.touchOutsideHandler=null)}},{key:"createTwoChains",value:function(e){var t=this.props.children.props,n=this.props;return t[e]&&n[e]?this["fire".concat(e)]:t[e]||n[e]}},{key:"isClickToShow",value:function(){var e=this.props,t=e.action,n=e.showAction;return-1!==t.indexOf("click")||-1!==n.indexOf("click")}},{key:"isContextMenuToShow",value:function(){var e=this.props,t=e.action,n=e.showAction;return-1!==t.indexOf("contextMenu")||-1!==n.indexOf("contextMenu")}},{key:"isClickToHide",value:function(){var e=this.props,t=e.action,n=e.hideAction;return-1!==t.indexOf("click")||-1!==n.indexOf("click")}},{key:"isMouseEnterToShow",value:function(){var e=this.props,t=e.action,n=e.showAction;return-1!==t.indexOf("hover")||-1!==n.indexOf("mouseEnter")}},{key:"isMouseLeaveToHide",value:function(){var e=this.props,t=e.action,n=e.hideAction;return-1!==t.indexOf("hover")||-1!==n.indexOf("mouseLeave")}},{key:"isFocusToShow",value:function(){var e=this.props,t=e.action,n=e.showAction;return-1!==t.indexOf("focus")||-1!==n.indexOf("focus")}},{key:"isBlurToHide",value:function(){var e=this.props,t=e.action,n=e.hideAction;return-1!==t.indexOf("focus")||-1!==n.indexOf("blur")}},{key:"forcePopupAlign",value:function(){var e;this.state.popupVisible&&(null===(e=this.popupRef.current)||void 0===e||e.forceAlign())}},{key:"fireEvents",value:function(e,t){var n=this.props.children.props[e];n&&n(t);var r=this.props[e];r&&r(t)}},{key:"close",value:function(){this.setPopupVisible(!1)}},{key:"render",value:function(){var e=this.state.popupVisible,t=this.props,n=t.children,o=t.forceRender,i=t.alignPoint,a=t.className,u=t.autoDestroy,c=r.Children.only(n),s={key:"trigger"};this.isContextMenuToShow()?s.onContextMenu=this.onContextMenu:s.onContextMenu=this.createTwoChains("onContextMenu"),this.isClickToHide()||this.isClickToShow()?(s.onClick=this.onClick,s.onMouseDown=this.onMouseDown,s.onTouchStart=this.onTouchStart):(s.onClick=this.createTwoChains("onClick"),s.onMouseDown=this.createTwoChains("onMouseDown"),s.onTouchStart=this.createTwoChains("onTouchStart")),this.isMouseEnterToShow()?(s.onMouseEnter=this.onMouseEnter,i&&(s.onMouseMove=this.onMouseMove)):s.onMouseEnter=this.createTwoChains("onMouseEnter"),this.isMouseLeaveToHide()?s.onMouseLeave=this.onMouseLeave:s.onMouseLeave=this.createTwoChains("onMouseLeave"),this.isFocusToShow()||this.isBlurToHide()?(s.onFocus=this.onFocus,s.onBlur=this.onBlur):(s.onFocus=this.createTwoChains("onFocus"),s.onBlur=this.createTwoChains("onBlur"));var l=U_()(c&&c.props&&c.props.className,a);l&&(s.className=l);var f,p,d,h,y=v_({},s);f=c,"function"==typeof(h=(0,C_.isMemo)(f)?f.type.type:f.type)&&!(null===(p=h.prototype)||void 0===p?void 0:p.render)||"function"==typeof f&&!(null===(d=f.prototype)||void 0===d?void 0:d.render)||(y.ref=N_(this.triggerRef,c.ref));var m,v=r.cloneElement(c,y);return(e||this.popupRef.current||o)&&(m=r.createElement(xj,{key:"portal",getContainer:this.getContainer,didUpdate:this.handlePortalUpdate},this.getComponent())),!e&&u&&(m=null),r.createElement(gj.Provider,{value:{onPopupMouseDown:this.onPopupMouseDown}},v,m)}}],[{key:"getDerivedStateFromProps",value:function(e,t){var n=e.popupVisible,r={};return void 0!==n&&t.popupVisible!==n&&(r.popupVisible=n,r.prevPopupVisible=t.popupVisible),r}}]),n}(r.Component)).contextType=gj,Sj.defaultProps={prefixCls:"rc-trigger-popup",getPopupClassNameFromAlign:wj,getDocument:Oj,onPopupVisibleChange:bj,afterPopupVisibleChange:bj,onPopupAlign:bj,popupClassName:"",mouseEnterDelay:0,mouseLeaveDelay:.1,focusDelay:0,blurDelay:.15,popupStyle:{},destroyPopupOnHide:!1,popupAlign:{},defaultPopupVisible:!1,mask:!1,maskClosable:!0,action:[],showAction:[],hideAction:[],autoDestroy:!1},Sj);var xj,Sj,jj={adjustX:1,adjustY:1},Pj=[0,0],kj={left:{points:["cr","cl"],overflow:jj,offset:[-4,0],targetOffset:Pj},right:{points:["cl","cr"],overflow:jj,offset:[4,0],targetOffset:Pj},top:{points:["bc","tc"],overflow:jj,offset:[0,-4],targetOffset:Pj},bottom:{points:["tc","bc"],overflow:jj,offset:[0,4],targetOffset:Pj},topLeft:{points:["bl","tl"],overflow:jj,offset:[0,-4],targetOffset:Pj},leftTop:{points:["tr","tl"],overflow:jj,offset:[-4,0],targetOffset:Pj},topRight:{points:["br","tr"],overflow:jj,offset:[0,-4],targetOffset:Pj},rightTop:{points:["tl","tr"],overflow:jj,offset:[4,0],targetOffset:Pj},bottomRight:{points:["tr","br"],overflow:jj,offset:[0,4],targetOffset:Pj},rightBottom:{points:["bl","br"],overflow:jj,offset:[4,0],targetOffset:Pj},bottomLeft:{points:["tl","bl"],overflow:jj,offset:[0,4],targetOffset:Pj},leftBottom:{points:["br","bl"],overflow:jj,offset:[-4,0],targetOffset:Pj}};const Ij=function(e){var t=e.overlay,n=e.prefixCls,o=e.id,i=e.overlayInnerStyle;return r.createElement("div",{className:"".concat(n,"-inner"),id:o,role:"tooltip",style:i},"function"==typeof t?t():t)};var Tj=function(e,t){var n=e.overlayClassName,o=e.trigger,i=void 0===o?["hover"]:o,a=e.mouseEnterDelay,u=void 0===a?0:a,c=e.mouseLeaveDelay,s=void 0===c?.1:c,l=e.overlayStyle,f=e.prefixCls,p=void 0===f?"rc-tooltip":f,d=e.children,h=e.onVisibleChange,y=e.afterVisibleChange,m=e.transitionName,v=e.animation,g=e.motion,b=e.placement,w=void 0===b?"right":b,O=e.align,E=void 0===O?{}:O,_=e.destroyTooltipOnHide,x=void 0!==_&&_,S=e.defaultVisible,j=e.getTooltipContainer,P=e.overlayInnerStyle,k=g_(e,["overlayClassName","trigger","mouseEnterDelay","mouseLeaveDelay","overlayStyle","prefixCls","children","onVisibleChange","afterVisibleChange","transitionName","animation","motion","placement","align","destroyTooltipOnHide","defaultVisible","getTooltipContainer","overlayInnerStyle"]),I=(0,r.useRef)(null);(0,r.useImperativeHandle)(t,(function(){return I.current}));var T=v_({},k);"visible"in e&&(T.popupVisible=e.visible);var R=!1,C=!1;if("boolean"==typeof x)R=x;else if(x&&"object"===h_(x)){var A=x.keepParent;R=!0===A,C=!1===A}return r.createElement(_j,(0,mh.Z)({popupClassName:n,prefixCls:p,popup:function(){var t=e.arrowContent,n=void 0===t?null:t,o=e.overlay,i=e.id;return[r.createElement("div",{className:"".concat(p,"-arrow"),key:"arrow"},n),r.createElement(Ij,{key:"content",prefixCls:p,id:i,overlay:o,overlayInnerStyle:P})]},action:i,builtinPlacements:kj,popupPlacement:w,ref:I,popupAlign:E,getPopupContainer:j,onPopupVisibleChange:h,afterPopupVisibleChange:y,popupTransitionName:m,popupAnimation:v,popupMotion:g,defaultPopupVisible:S,destroyPopupOnHide:R,autoDestroy:C,mouseLeaveDelay:s,popupStyle:l,mouseEnterDelay:u},T),d)};const Rj=(0,r.forwardRef)(Tj);function Cj(e){return(Cj="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Aj(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Nj(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Lj(e,t){return(Lj=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Dj(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Fj(e);if(t){var o=Fj(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Mj(this,n)}}function Mj(e,t){if(t&&("object"===Cj(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Fj(e){return(Fj=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Uj=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Lj(e,t)}(a,e);var t,n,o,i=Dj(a);function a(){return Aj(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this,t=this.props,n=t.className,o=t.idPrefix,i=t.items,a=t.openerClass,u=t.openerText,c=t.openerTitle,s="".concat(o||"","TooltipMenu");return r.createElement("div",{ref:function(t){e.container=t}},r.createElement(Rj,{align:{offset:[0,6]},getTooltipContainer:function(){return e.container},destroyTooltipOnHide:!0,id:s,overlay:r.createElement("ul",{className:"TooltipMenu-list"},i),placement:"bottom",prefixCls:"TooltipMenu",trigger:["click"]},r.createElement("button",{"aria-describedby":s,className:Ho()("TooltipMenu-opener",a,n),title:c,type:"button"},u)))}}])&&Nj(t.prototype,n),o&&Nj(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);function Bj(e){return(Bj="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Hj(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function qj(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function zj(e,t){return(zj=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Gj(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Vj(e);if(t){var o=Vj(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Wj(this,n)}}function Wj(e,t){if(t&&("object"===Bj(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Vj(e){return(Vj=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Yj=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&zj(e,t)}(a,e);var t,n,o,i=Gj(a);function a(){return Hj(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e,t=this.props,n=t.i18n,o=t.isDeveloperReply,i=t.openerClass,a=t.review,u=t.siteUser,c=t.wasFlagged;return ce()(!u||u.id!==a.userId,"A user cannot flag their own review."),e=u?[r.createElement(d_,{className:"FlagReviewMenu-flag-spam-item",key:"flag-spam"},r.createElement(i_,{reason:D.uW,review:a,buttonText:n.gettext("This is spam"),wasFlaggedText:n.gettext("Flagged as spam")})),r.createElement(d_,{className:"FlagReviewMenu-flag-language-item",key:"flag-language"},r.createElement(i_,{reason:D.OC,review:a,buttonText:n.gettext("This contains inappropriate language"),wasFlaggedText:n.gettext("Flagged for inappropriate language")})),o?null:r.createElement(d_,{className:"FlagReviewMenu-flag-bug-support-item",key:"flag-bug-support"},r.createElement(i_,{reason:D.xw,review:a,buttonText:n.gettext("This is a bug report or support request"),wasFlaggedText:n.gettext("Flagged as a bug report or support request")}))]:[r.createElement(d_,{key:"login-required"},r.createElement(Ew,{noIcon:!0,logInText:o?n.gettext("Log in to flag this response"):n.gettext("Log in to flag this review")}))],r.createElement(Uj,{className:"FlagReviewMenu-menu",idPrefix:"flag-review-",items:e,openerClass:i,openerText:c?n.gettext("Flagged"):n.gettext("Flag"),openerTitle:o?n.gettext("Flag this developer response"):n.gettext("Flag this review")})}}])&&qj(t.prototype,n),o&&qj(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);Yj.defaultProps={isDeveloperReply:!1};const Zj=(0,Mo.qC)((0,g.connect)((function(e,t){var n=!1;if(t.review){var r=e.reviews.view[t.review.id];r&&r.flag&&r.flag.wasFlagged&&(n=!0)}return{wasFlagged:n,siteUser:Xe(e.users)}})),Eu())(Yj);const $j=(0,Mo.qC)(Eu())((function(e){var t=e.cancelButtonText,n=e.cancelButtonType,o=void 0===n?"cancel":n,i=e.className,a=e.confirmButtonText,u=e.confirmButtonType,c=void 0===u?"alert":u,s=e.i18n,l=e.onCancel,f=e.onConfirm,p=e.message,d=e.puffyButtons;return r.createElement("div",{className:Ho()("ConfirmationDialog",i)},p&&r.createElement("span",{className:"ConfirmationDialog-message"},p),r.createElement("div",{className:"ConfirmationDialog-buttons"},r.createElement(Dc,{buttonType:c,className:"ConfirmationDialog-confirm-button",onClick:f,puffy:d},a||s.gettext("Confirm")),r.createElement(Dc,{buttonType:o,className:"ConfirmationDialog-cancel-button",onClick:l,puffy:d},t||s.gettext("Cancel"))))}));const Kj=(0,Mo.qC)(Eu(),(0,g.connect)((function(e,t){var n=t.review,r=Xe(e.users);return{isOwner:!(!r||!n||n.userId!==r.id)}})))((function(e){var t=e.className,n=e.isOwner,o=e.readOnly,i=e.onSelectRating,a=e.review,u=e.styleSize;return r.createElement(id,{className:t,onSelectRating:i,rating:a&&a.score,readOnly:o||!1,styleSize:u,yellowStars:n})}));function Qj(e){var t=e.content,n=e.html,o=e.id;ce()(void 0!==t||void 0!==n||void 0!==o,"content or html or id is required");var i={};return t?i.children=t:i.dangerouslySetInnerHTML=n,r.createElement(eE,{id:o,contentId:o,className:Ho()("UserReview-body",{"UserReview-emptyBody":!t&&!n})},r.createElement("div",i))}const Xj=(0,Mo.qC)(Eu())((function(e){var t=e.byLine,n=e.children,o=e.controls,i=e.i18n,a=e.isReply,u=e.review,c=e.showRating,s=u&&u.id?String(u.id):"loading-text",l=Qj({content:r.createElement(Zp,null),id:s});return u&&(l=u.body?Qj({html:vn(gn(u.body),["br"]),id:s}):Qj({content:"",id:s})),r.createElement("div",{className:"UserReview"},r.createElement("div",{className:"UserReview-byLine"},u&&c?r.createElement(Kj,{styleSize:"small",review:u,readOnly:!0}):null,u&&a&&r.createElement("h4",{className:"UserReview-reply-header"},r.createElement(ac,{name:"reply-arrow"}),i.gettext("Developer response")),t),l,o,n)}));function Jj(e){return(Jj="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function eP(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function tP(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function nP(e,t){return(nP=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function rP(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=iP(e);if(t){var o=iP(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return oP(this,n)}}function oP(e,t){if(t&&("object"===Jj(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function iP(e){return(iP=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var aP=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&nP(e,t)}(a,e);var t,n,o,i=rP(a);function a(){var e;eP(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).onBeginDeleteReview=function(t){var n=e.props,r=n.dispatch,o=n.review;t.preventDefault(),ce()(o,"review is required"),r(Gi({reviewId:o.id}))},e.onCancelDeleteReview=function(t){var n=e.props,r=n.dispatch,o=n.review;t.preventDefault(),ce()(o,"review is required"),r(Wi({reviewId:o.id}))},e.onClickToDeleteReview=function(t){var n=e.props,r=n.dispatch,o=n.errorHandler,i=n.isReplyToReviewId,a=n.review;t.preventDefault(),ce()(a,"review is required"),r(zi({addonId:a.reviewAddon.id,errorHandlerId:o.id,reviewId:a.id,isReplyToReviewId:i}))},e.onClickToEditReview=function(t){var n=e.props,r=n.dispatch,o=n.isReplyToReviewId,i=n.review;t.preventDefault(),void 0!==o?r(ki({reviewId:o})):(ce()(i,"A review must be loaded."),r(Pi({reviewId:i.id})))},e.onCancelEditReview=function(){var t=e.props,n=t.dispatch,r=t.review;ce()(r,"review is required"),n(Ii({reviewId:r.id}))},e.onClickToBeginReviewReply=function(t){t.preventDefault();var n=e.props,r=n.dispatch,o=n.review;ce()(o,"Cannot show review form because no review has been loaded."),r(ki({reviewId:o.id}))},e.onDismissReviewReply=function(){var t=e.props,n=t.dispatch,r=t.review;ce()(r,"Cannot hide review form because no review has been loaded."),n(Ti({reviewId:r.id}))},e.onSubmitReviewReply=function(t){var n=e.props,r=n.dispatch,o=n.errorHandler,i=n.review;ce()(i,"The review property cannot be empty when replying to a review."),r(Si({errorHandlerId:o.id,originalReviewId:i.id,body:t.text}))},e}return t=a,(n=[{key:"isRatingOnly",value:function(){var e=this.props.review;return Boolean(e&&!e.body)}},{key:"isReply",value:function(){var e=this.props,t=e.isReplyToReviewId,n=e.review;return void 0!==t||Boolean(n&&n.isDeveloperReply)}},{key:"editPrompt",value:function(){var e=this.props.i18n;return this.isReply()?e.gettext("Edit reply"):e.gettext("Edit review")}},{key:"deletePrompt",value:function(){var e=this.props.i18n;return this.isReply()?e.gettext("Delete reply"):this.isRatingOnly()?e.gettext("Delete rating"):e.gettext("Delete review")}},{key:"confirmDeletePrompt",value:function(){var e=this.props.i18n;return this.isReply()?e.gettext("Do you really want to delete this reply?"):this.isRatingOnly()?e.gettext("Do you really want to delete this rating?"):e.gettext("Do you really want to delete this review?")}},{key:"confirmDeleteButtonText",value:function(){var e=this.props,t=e.i18n;return e.slim?this.isReply()?t.gettext("Delete reply"):this.isRatingOnly()?t.gettext("Delete rating"):t.gettext("Delete review"):t.gettext("Delete")}},{key:"cancelDeleteButtonText",value:function(){var e=this.props,t=e.i18n;return e.slim?this.isReply()?t.gettext("Keep reply"):this.isRatingOnly()?t.gettext("Keep rating"):t.gettext("Keep review"):t.gettext("Cancel")}},{key:"renderReply",value:function(){var e=this.props,t=e.addon,n=e.errorHandler,o=e.i18n,i=e.replyingToReview,a=e.review,u=e.slim,c=e.siteUserCanReply,s=e.submittingReply;if(!a||!a.reply&&!i)return null;var l=[Tn("src/amo/components/AddonReviewCard/index.js"),"addon",t?t.id.toString():"no-addon","review",a?a.id.toString():"unsaved-review"].join("-");return r.createElement("div",{className:"AddonReviewCard-reply"},i?r.createElement(Zh,{className:"AddonReviewCard-reply-form",id:l,isSubmitting:s&&!n.hasError(),onDismiss:this.onDismissReviewReply,onSubmit:this.onSubmitReviewReply,placeholder:o.gettext("Write a reply to this review."),submitButtonText:a.reply?o.gettext("Update reply"):o.gettext("Publish reply"),submitButtonInProgressText:a.reply?o.gettext("Updating reply"):o.gettext("Publishing reply"),text:a.reply&&a.reply.body}):r.createElement(uP,{addon:t,isReplyToReviewId:a.id,review:a.reply,slim:u,siteUserCanReply:c}))}},{key:"render",value:function(){var e,t=this.props,n=t.beginningToDeleteReview,o=t.className,i=t.deletingReview,a=t.editingReview,u=t.errorHandler,c=t.flaggable,s=t.hasUsersEditPermission,l=t.i18n,f=t.location,p=t.replyingToReview,d=t.review,h=t.shortByLine,y=t.showControls,m=t.showRating,v=t.siteUser,g=t.siteUserCanManageReplies,b=t.slim,w=h||this.isReply(),O=!w&&s;if(d){var E=w?l.gettext("posted %(linkStart)s%(timestamp)s%(linkEnd)s"):O?l.gettext("by %(linkUserProfileStart)s%(authorName)s%(linkUserProfileEnd)s, %(linkStart)s%(timestamp)s%(linkEnd)s"):l.gettext("by %(authorName)s, %(linkStart)s%(timestamp)s%(linkEnd)s"),_=d.reviewAddon.slug||d.reviewAddon.id;d.reviewAddon.slug||L.Z.error("The add-on for reviewId: ".concat(d.id," has an falsey slug: ").concat(d.reviewAddon.slug)),d.reviewAddon.id||L.Z.error("The add-on for reviewId: ".concat(d.id," has an falsey id: ").concat(d.reviewAddon.id));var x=[["linkStart","linkEnd",function(e){return _?r.createElement(wc,{title:l.moment(d.created).format("lll"),key:d.id,to:Tp({addonSlug:String(_),id:d.id,location:f})},e):e}]];O&&x.push(["linkUserProfileStart","linkUserProfileEnd",function(e){return r.createElement(wc,{key:"".concat(d.id,"-").concat(d.userId),to:"/user/".concat(d.userId,"/")},e)}]);var S=ie({text:l.sprintf(E,{authorName:d.userName,timestamp:l.moment(d.created).fromNow(),linkEnd:"%(linkEnd)s",linkStart:"%(linkStart)s",linkUserProfileStart:O?"%(linkUserProfileStart)s":void 0,linkUserProfileEnd:O?"%(linkUserProfileEnd)s":void 0}),replacements:x});e=r.createElement("span",{className:Ho()({"AddonReviewCard-authorByLine":!w})},S)}else e=r.createElement(Zp,null);var j=y;n&&(j=!1);var P=d&&v&&(d.userId===v.id||this.isReply()&&g),k=j?r.createElement("div",{className:"AddonReviewCard-allControls"},P?r.createElement(r.Fragment,null,!this.isRatingOnly()&&r.createElement("a",{href:"#edit",onClick:this.onClickToEditReview,className:"AddonReviewCard-edit AddonReviewCard-control"},this.editPrompt()),i&&!u.hasError()?r.createElement("span",{className:"AddonReviewCard-control AddonReviewCard-deleting"},l.gettext("Deleting…")):r.createElement(Dc,{buttonType:"neutral",className:Ho()("AddonReviewCard-control","AddonReviewCard-delete"),onClick:this.onBeginDeleteReview},this.deletePrompt())):null,!d||p||d.reply||this.isReply()||this.isRatingOnly()||!g||!v||d.userId===v.id?null:r.createElement("a",{href:"#reply",onClick:this.onClickToBeginReviewReply,className:"AddonReviewCard-begin-reply AddonReviewCard-control"},r.createElement(ac,{name:"reply-arrow"}),l.gettext("Reply to this review")),!c||this.isRatingOnly()||!d||v&&v.id===d.userId?null:r.createElement(Zj,{isDeveloperReply:this.isReply(),openerClass:"AddonReviewCard-control",review:d})):null;return r.createElement("div",{className:Ho()("AddonReviewCard",o,{"AddonReviewCard-isReply":this.isReply(),"AddonReviewCard-ratingOnly":this.isRatingOnly(),"AddonReviewCard-viewOnly":!a,"AddonReviewCard-slim":b})},r.createElement("div",{className:"AddonReviewCard-container"},u.renderErrorIfPresent(),d&&d.isDeleted&&r.createElement(Jc,{type:"error",className:"AddonReviewCard-non-public-notice"},l.gettext("This rating or review has been deleted. You are only seeing it because of elevated permissions.")),d&&a?r.createElement(KE,{onCancel:this.onCancelEditReview,puffyButtons:b,review:d}):r.createElement(Xj,{controls:k,review:d,byLine:e,showRating:Boolean(!this.isReply()&&m),isReply:this.isReply()})),n&&r.createElement($j,{className:"AddonReviewCard-confirmDeleteDialog",cancelButtonText:this.cancelDeleteButtonText(),cancelButtonType:"neutral",confirmButtonText:this.confirmDeleteButtonText(),onCancel:this.onCancelDeleteReview,onConfirm:this.onClickToDeleteReview,message:b?void 0:this.confirmDeletePrompt(),puffyButtons:b}),this.renderReply(),v&&d&&d.userId===v.id&&this.isRatingOnly()&&!n&&!a&&r.createElement(Dc,{className:"AddonReviewCard-writeReviewButton",onClick:this.onClickToEditReview,buttonType:"action",puffy:b},l.gettext("Write a review")))}}])&&tP(t.prototype,n),o&&tP(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);aP.defaultProps={flaggable:!0,shortByLine:!1,showControls:!0,showRating:!0,slim:!1};var uP=(0,Mo.qC)(No,(0,g.connect)((function(e,t){var n=!1,r=!1,o=!1,i=!1,a=!1;if(t.review){var u=e.reviews.view[t.review.id];u&&(n=u.beginningToDeleteReview,r=u.deletingReview,o=u.editingReview,i=u.replyingToReview,a=u.submittingReply)}var c=et(e,D.mD);return{beginningToDeleteReview:n,deletingReview:r,editingReview:o,hasUsersEditPermission:et(e,D.Ai),replyingToReview:i,siteUser:Xe(e.users),siteUserCanManageReplies:t.siteUserCanReply||c,submittingReply:a}})),ms({name:"AddonReviewCard",extractId:function(e){return e.review?String(e.review.id):""}}),Eu())(aP);const cP=uP;function sP(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function lP(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?sP(Object(n),!0).forEach((function(t){fP(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):sP(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function fP(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var pP="HIDE_ADDON_ABUSE_REPORT_UI",dP="LOAD_ADDON_ABUSE_REPORT",hP="SEND_ADDON_ABUSE_REPORT",yP="SHOW_ADDON_ABUSE_REPORT_UI",mP="INITIATE_ADDON_ABUSE_REPORT_VIA_FIREFOX",vP="FINISH_ADDON_ABUSE_REPORT_VIA_FIREFOX",gP={bySlug:{},loading:!1};function bP(e){var t=e.addon;return ce()(t,"addon is required"),{type:pP,payload:{addon:t}}}function wP(e){var t=e.addon,n=e.message,r=e.reporter;return ce()(t,"addon is required"),ce()(void 0!==n,"message must be defined"),ce()(void 0!==r,"reporter must be defined"),{type:dP,payload:{addon:t,message:n,reporter:r}}}function OP(e){var t=e.addonSlug,n=e.errorHandlerId,r=e.message;return ce()(t,"addonSlug is required"),ce()(n,"errorHandlerId is required"),ce()(r,"message is required"),{type:hP,payload:{addonSlug:t,errorHandlerId:n,message:r}}}function EP(e){var t=e.addon;return ce()(t,"addon is required"),{type:yP,payload:{addon:t}}}function _P(e){var t=e.addon;return ce()(t,"addon is required"),{type:mP,payload:{addon:t}}}function xP(e){return(xP="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function SP(){SP=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==xP(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}function jP(e,t,n,r,o,i,a){try{var u=e[i](a),c=u.value}catch(e){return void n(e)}u.done?t(c):Promise.resolve(c).then(r,o)}function PP(e){return function(){var t=this,n=arguments;return new Promise((function(r,o){var i=e.apply(t,n);function a(e){jP(i,r,o,a,u,"next",e)}function u(e){jP(i,r,o,a,u,"throw",e)}a(void 0)}))}}function kP(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function IP(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function TP(e,t){return(TP=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function RP(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=AP(e);if(t){var o=AP(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return CP(this,n)}}function CP(e,t){if(t&&("object"===xP(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function AP(e){return(AP=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var NP=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&TP(e,t)}(a,e);var t,n,o,i=RP(a);function a(){var e;kP(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).dismissReportUI=function(){var t=e.props,n=t.addon;(0,t.dispatch)(bP({addon:n}))},e.sendReport=function(t){var n=t.text;ce()(n.trim().length,"A report cannot be sent with no content.");var r=e.props,o=r.addon,i=r.dispatch,a=r.errorHandler;i(OP({addonSlug:o.slug,errorHandlerId:a.id,message:n}))},e.onReportButtonClick=function(){var t=PP(SP().mark((function t(n){var r,o,i,a;return SP().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(r=e.props,o=r._hasAbuseReportPanelEnabled,i=r.addon,a=r.dispatch,n.preventDefault(),!o()||![D.Gz,D.Yd].includes(i.type)){t.next=5;break}return a(_P({addon:i})),t.abrupt("return");case 5:a(EP({addon:i}));case 6:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),e}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.abuseReport,n=e.addon,o=e.errorHandler,i=e.i18n,a=e.loading;if(ce()(n,"An add-on is required"),t&&void 0!==t.message)return r.createElement("div",{className:"ReportAbuseButton ReportAbuseButton--report-sent"},r.createElement("h3",{className:"ReportAbuseButton-header"},i.gettext("You reported this add-on for abuse")),r.createElement("p",{className:"ReportAbuseButton-first-paragraph"},i.gettext("We have received your report. Thanks for letting us know about\n your concerns with this add-on.")),r.createElement("p",null,i.gettext("We can't respond to every abuse report but we'll look into\n this issue.")));var u=i.sprintf(i.gettext("If you think this add-on violates\n %(linkTagStart)sMozilla's add-on policies%(linkTagEnd)s or has\n security or privacy issues, please report these issues to Mozilla using\n this form."),{linkTagStart:'<a href="https://developer.mozilla.org/en-US/Add-ons/AMO/Policy/Reviews">',linkTagEnd:"</a>"}),c=i.gettext("Report this add-on for abuse");return r.createElement("div",{className:Ho()("ReportAbuseButton",{"ReportAbuseButton--is-expanded":t&&t.uiVisible})},r.createElement("div",{className:"ReportAbuseButton--preview"},r.createElement(Dc,{buttonType:"neutral",className:"ReportAbuseButton-show-more",disabled:a,onClick:this.onReportButtonClick,puffy:!0},c)),r.createElement("div",{className:"ReportAbuseButton--expanded"},r.createElement("h3",{className:"ReportAbuseButton-header"},c),r.createElement("p",{className:"ReportAbuseButton-first-paragraph",dangerouslySetInnerHTML:vn(u,["a"])}),r.createElement("p",null,i.gettext("Please don't use this form to report bugs or request add-on\n features; this report will be sent to Mozilla and not to the\n add-on developer.")),o.renderErrorIfPresent(),r.createElement(Zh,{id:Tn("src/amo/components/ReportAbuseButton/index.js"),isSubmitting:a,onSubmit:this.sendReport,submitButtonText:i.gettext("Send abuse report"),submitButtonInProgressText:i.gettext("Sending abuse report"),onDismiss:this.dismissReportUI,dismissButtonText:i.gettext("Dismiss"),placeholder:i.gettext("Explain how this add-on is violating our policies.")})))}}])&&IP(t.prototype,n),o&&IP(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);NP.defaultProps={_hasAbuseReportPanelEnabled:bv.hasAbuseReportPanelEnabled};const LP=(0,Mo.qC)((0,g.connect)((function(e,t){var n=t.addon;return{abuseReport:n&&e.abuse.bySlug[n.slug]?e.abuse.bySlug[n.slug]:null,loading:e.abuse.loading}})),Eu(),ms({id:"ReportAbuseButton"}))(NP);function DP(e){return(DP="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var MP;function FP(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function UP(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function BP(e,t){return(BP=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function HP(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=zP(e);if(t){var o=zP(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return qP(this,n)}}function qP(e,t){if(t&&("object"===DP(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function zP(e){return(zP=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var GP=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&BP(e,t)}(a,e);var t,n,o,i=HP(a);function a(){var e;FP(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).onSelectRating=function(t){var n=e.props,r=n.addon,o=n.dispatch,i=n.errorHandler,a=n.userReview,u=n.version;o(a?Li({errorHandlerId:i.id,score:t,reviewId:a.id}):Ni({addonId:r.id,errorHandlerId:i.id,score:t,versionId:u.id}))},e}return t=a,(n=[{key:"componentDidMount",value:function(){var e=this.props,t=e.addon,n=e.dispatch,r=e.errorHandler,o=e.userId,i=e.userReview;r.hasError()?L.Z.warn("Not loading data because of an error"):o&&void 0===i&&(L.Z.debug("Loading a saved rating (if it exists) for user ".concat(o)),n(function(e){var t=e.addonId,n=e.errorHandlerId,r=e.userId;return ce()(t,"addonId is required"),ce()(n,"errorHandlerId is required"),ce()(r,"userId is required"),{type:$o,payload:{addonId:t,errorHandlerId:n,userId:r}}}({userId:o,addonId:t.id,errorHandlerId:r.id})))}},{key:"getLogInPrompt",value:function(e){var t=e.addonType,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=n.validAddonTypes,o=void 0===r?D.Tq:r,i=this.props.i18n;switch(t){case D.jV:return i.gettext("Log in to rate this dictionary");case D.d$:return i.gettext("Log in to rate this language pack");case D.Yd:return i.gettext("Log in to rate this theme");case D.Gz:return i.gettext("Log in to rate this extension");default:var a=o.includes(t);return L.Z.warn("Using generic prompt for ".concat(a?"add-on":"unknown add-on"," type: ").concat(t)),i.gettext("Log in to rate this add-on")}}},{key:"isSignedIn",value:function(){return Boolean(this.props.userId)}},{key:"renderLogInToRate",value:function(){var e=this.props.addon;return r.createElement(Ew,{noIcon:!0,className:"RatingManager-log-in-to-rate-button",logInText:this.getLogInPrompt({addonType:e.type})})}},{key:"isMessageVisible",value:function(){var e=this.props.flashMessage;return[Ui,Mi].includes(e)}},{key:"renderUserRatingForm",value:function(){var e,t=this.props,n=t.addon,o=t.beginningToDeleteReview,i=t.deletingReview,a=t.i18n,u=t.flashMessage,c=t.userReview,s=o||i;e=c&&s?c.body?a.gettext("Are you sure you want to delete your review of %(addonName)s?"):a.gettext("Are you sure you want to delete your rating of %(addonName)s?"):a.gettext("How are you enjoying %(addonName)s?");var l=vn(a.sprintf(e,{addonName:"<b>".concat(n.name,"</b>")}),["b"]);return r.createElement("form",{action:""},r.createElement("fieldset",null,r.createElement("legend",{className:"RatingManager-legend",dangerouslySetInnerHTML:l}),r.createElement("div",{className:"RatingManager-ratingControl"},this.isSignedIn()?null:this.renderLogInToRate(),c&&s?r.createElement(FE,{className:"RatingManager-AddonReviewManagerRating",onSelectRating:void 0,rating:c.score}):r.createElement(Kj,{className:"RatingManager-UserRating",readOnly:!this.isSignedIn(),onSelectRating:this.onSelectRating,review:this.isSignedIn()?c:null})),r.createElement(UE,{className:c&&c.body?"RatingManager-savedRating-withReview":null,hideMessage:!this.isMessageVisible(),message:u===Ui?a.gettext("Saving star rating"):a.gettext("Star rating saved"),type:u===Ui?Yc:$c})))}},{key:"render",value:function(){var e=this.props,t=e.addon,n=e.editingReview,o=e.userReview,i=e.version;return ce()(t,"addon is required"),ce()(i,"version is required"),r.createElement("div",{className:"RatingManager"},!n&&this.renderUserRatingForm(),o&&r.createElement(cP,{addon:t,className:"RatingManager-AddonReviewCard",flaggable:!1,review:o,shortByLine:!0,showControls:!this.isMessageVisible(),showRating:!1,siteUserCanReply:!1,slim:!0}),r.createElement(LP,{addon:t}))}}])&&UP(t.prototype,n),o&&UP(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component),WP=Eu()(GP);const VP=(0,Mo.qC)(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.name,n=e.id;return function(e){return(0,Mo.qC)(ms({name:t,id:n}))((function(t){var n=t.errorHandler;return n.hasError()?r.createElement("div",null,n.renderError(),r.createElement(e,t)):r.createElement(e,t)}))}}({id:"RatingManager"}),(0,g.connect)((function(t,n){var r,o,i,a=t.users.currentUserID;if(a&&n.addon){var u=n.addon.id;L.Z.debug((0,e.f9)(MP||(o=['Looking for latest review of\n addonId "','" by userId "','"'],i||(i=o.slice(0)),MP=Object.freeze(Object.defineProperties(o,{raw:{value:Object.freeze(i)}}))),u,a)),r=function(e){var t=e.reviewsState,n=e.userId,r=e.addonId,o=Mp({userId:n,addonId:r}),i=t.latestUserReview[o];return null===i?null:Cp(t,i)}({reviewsState:t.reviews,userId:a,addonId:u})}var c=!1,s=!1,l=!1;if(r){var f=t.reviews.view[r.id];f&&(s=f.beginningToDeleteReview,c=f.deletingReview,l=f.editingReview)}return{beginningToDeleteReview:s,deletingReview:c,editingReview:l,flashMessage:t.reviews.flashMessage,userReview:r,userId:a}})))(WP);var YP=a(32520);function ZP(e){return(ZP="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function $P(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function KP(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function QP(e,t){return(QP=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function XP(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=ek(e);if(t){var o=ek(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return JP(this,n)}}function JP(e,t){if(t&&("object"===ZP(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function ek(e){return(ek=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var tk={closeEl:!0,captionEl:!0,fullscreenEl:!1,zoomEl:!1,shareEl:!1,counterEl:!0,arrowEl:!0,preloaderEl:!0},nk=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&QP(e,t)}(a,e);var t,n,o,i=XP(a);function a(){var e;$P(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).onOpenPhotoswipe=function(t){ce()(e.viewport,"viewport ref is required");var n=e.viewport.querySelector(".ScreenShots-list");ce()(n,"list is required"),t.listen("close",(function(){var e=t.getCurrentIndex(),r=n.children[e].getBoundingClientRect().left;n.scrollLeft+=r-n.getBoundingClientRect().left}))},e}return t=a,(n=[{key:"render",value:function(){var e=this,t=this.props.previews;return r.createElement("div",{className:"ScreenShots"},r.createElement("div",{className:"ScreenShots-viewport",ref:function(t){e.viewport=t}},r.createElement("div",{className:"ScreenShots-list"},r.createElement(YP.Gallery,{options:tk,onOpen:this.onOpenPhotoswipe},t.map((function(e){return r.createElement(YP.Item,{key:e.src,original:e.src,thumbnail:e.thumbnail_src,width:e.w,height:e.h,title:e.title},(function(t){var n=t.ref,o=t.open;return r.createElement("img",{alt:e.title,className:"ScreenShots-image",ref:n,onClick:o,src:e.thumbnail_src,width:e.thumbnail_w,height:e.thumbnail_h})}))}))))))}}])&&KP(t.prototype,n),o&&KP(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component),rk="SEND_SERVER_REDIRECT",ok={url:null,status:null},ik=function(e){var n=e.status,r=e.url,o=e._config,i=void 0===o?t.Z:o;if(!n)throw new Error("status is required");if(!r)throw new Error("url is required");return i.get("server")||L.Z.warn("sendServerRedirect() currently does nothing when run from client\n code"),{type:rk,payload:{status:n,url:r}}};const ak=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ok,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case rk:var n=t.payload;return{status:n.status,url:n.url};default:return e}};const uk=Eu()((function(e){var t=e.addon,n=e.i18n,o=e.roundedCorners;ce()(t&&D.Yd===t.type,"A ThemeImage can only be rendered for a static theme");var i=n.sprintf(n.gettext("Preview of %(title)s"),{title:t.name});return r.createElement("div",{className:Ho()("ThemeImage",{"ThemeImage--rounded-corners":o}),role:"presentation"},r.createElement("img",{alt:i,className:"ThemeImage-image",src:qs(t)}))}));function ck(e){return(ck="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function sk(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function lk(e,t){return(lk=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function fk(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=dk(e);if(t){var o=dk(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return pk(this,n)}}function pk(e,t){if(t&&("object"===ck(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function dk(e){return(dk=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var hk=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&lk(e,t)}(a,e);var t,n,o,i=fk(a);function a(e){var t;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),(t=i.call(this,e)).renderDevCommentsCard=function(){var e=t.props,n=e.addon,o=e.i18n;if(!n||!n.developer_comments)return null;var i=bn(n.developer_comments),a="Addon-developer-comments";return r.createElement(eE,{contentId:n.id,className:a,header:o.gettext("Developer comments"),id:a},r.createElement("div",{className:"Addon-developer-comments-contents",dangerouslySetInnerHTML:i}))};var n=e.addon,o=e.addonIsLoading,u=e.clientApp,c=e.dispatch,s=e.errorHandler,l=e.lang,f=e.match.params;if(!s.hasError())if(n){if(n.slug!==f.slug)return c(ik({status:301,url:"/".concat(l,"/").concat(u).concat(ln(n.slug))})),pk(t);c(qo(n.type))}else o||c(na({showGroupedRatings:!0,slug:f.slug,errorHandler:s}));return t}return t=a,(n=[{key:"componentDidUpdate",value:function(e){var t=e.addon,n=e.match.params,r=this.props,o=r.addon,i=r.addonIsLoading,a=r.dispatch,u=r.errorHandler,c=r.match.params;if(!u.hasError()){var s=t?t.type:null;o&&o.type!==s&&a(qo(o.type)),i||o&&n.slug===c.slug||a(na({showGroupedRatings:!0,slug:c.slug,errorHandler:u}))}}},{key:"headerImage",value:function(){var e=this.props,t=e.addon,n=e.i18n;if(t&&D.Yd===t.type)return r.createElement(uk,{addon:t,roundedCorners:!0});var o=t?n.sprintf(n.gettext("Preview of %(title)s"),{title:t.name}):null;return r.createElement("div",{className:"Addon-icon",key:"Addon-icon-header"},r.createElement("div",{className:"Addon-icon-wrapper"},r.createElement("img",{alt:o,className:"Addon-icon-image",src:Bs(t)})))}},{key:"renderRatingsCard",value:function(){var e,t,n=this.props,o=n.RatingManager,i=n.addon,a=n.i18n,u=n.location,c=n.currentVersion,s="footerText";if(t=i&&c?r.createElement(o,{addon:i,version:c}):r.createElement("p",{className:"Addon-no-rating-manager"},a.gettext("This add-on cannot be rated because no versions\n have been published.")),i)if(i.ratings&&i.ratings.count){var l=i.ratings.count,f=a.sprintf(a.ngettext("Read %(count)s review","Read all %(count)s reviews",l),{count:a.formatNumber(l)});s="footerLink",e=r.createElement(wc,{className:"Addon-all-reviews-link",to:Tp({addonSlug:i.slug,location:u})},f)}else e=a.gettext("No reviews yet");else e=r.createElement(Zp,{width:100});var p,d,h,y=(p={},d=s,h=r.createElement("div",{className:"Addon-read-reviews-footer"},e),d in p?Object.defineProperty(p,d,{value:h,enumerable:!0,configurable:!0,writable:!0}):p[d]=h,p);return r.createElement(js,Object.assign({header:a.gettext("Rate your experience"),className:"Addon-overall-rating"},y),t)}},{key:"renderShowMoreCard",value:function(){var e,t=this.props,n=t.addon,o=t.i18n,i={},a=!0;if(n){switch(n.type){case D.jV:e=o.gettext("About this dictionary");break;case D.Gz:e=o.gettext("About this extension");break;case D.d$:e=o.gettext("About this language pack");break;case D.Yd:e=o.gettext("About this theme");break;default:e=o.gettext("About this add-on")}var u=n.description?n.description:n.summary;if(a=u!==n.summary,!u||!u.length)return null;i.dangerouslySetInnerHTML=bn(u)}else e=r.createElement(Zp,{width:40}),i.children=r.createElement(Zp,{width:100});var c="AddonDescription";return a?r.createElement(eE,{contentId:n&&n.id,className:c,header:e,id:c},r.createElement("div",Object.assign({className:"AddonDescription-contents"},i))):null}},{key:"renderVersionReleaseNotes",value:function(){var e=this.props,t=e.addon,n=e.i18n,o=e.currentVersion;if(!t)return null;if(!o||!o.releaseNotes)return null;var i=n.sprintf(n.gettext("Release notes for %(addonVersion)s"),{addonVersion:o.version}),a=bn(o.releaseNotes),u="AddonDescription-version-notes";return r.createElement(eE,{contentId:t.id,className:u,id:u,header:i},r.createElement("div",{dangerouslySetInnerHTML:a}))}},{key:"renderAddonsByAuthorsCard",value:function(e){var t=e.isForTheme,n=this.props.addon,o=n&&D.Yd===n.type;return!n||!n.authors.length||t&&!o||!t&&o?null:r.createElement("div",null,r.createElement(Sm,{addonType:n.type,authorDisplayName:n.authors[0].name,authorIds:n.authors.map((function(e){return e.id})),className:"Addon-MoreAddonsCard",forAddonSlug:n.slug,numberOfAddons:6}))}},{key:"render",value:function(){var e=this.props,t=e.addon,n=e.addonsByAuthors,o=e.currentVersion,i=e.errorHandler,a=e.i18n,u=t&&t.type===D.Yd,c=null;i.hasError()&&(c=i.renderError());var s=t?t.type:D.Gz,l={},f=!1;if(t){var p=t.summary?t.summary:t.description;p&&p.length&&(l.dangerouslySetInnerHTML=vn(gn(p),["a","br"]),f=!0)}else l.children=r.createElement(Zp,{width:100}),f=!0;var d=t?t.previews:[],h=n?n.length:0;return r.createElement(HO,{showVPNPromo:Boolean(t&&t.type===D.Gz),errorHandler:i,isAddonInstallPage:!0,showWrongPlatformWarning:!1},r.createElement("div",{className:Ho()("Addon","Addon-".concat(s),{"Addon-theme":u,"Addon--has-more-than-0-addons":h>0,"Addon--has-more-than-3-addons":h>3}),"data-site-identifier":t?t.id:null},r.createElement(_p,{addon:t}),c,r.createElement("div",{className:"Addon-header-wrapper"},r.createElement(js,{className:"Addon-header-info-card",photonStyle:!0},r.createElement(xp,{error:this.props.installError}),r.createElement(zf,{addon:t}),t&&("public"!==t.status||t.is_disabled)?r.createElement(Jc,{type:"error",className:"Addon-non-public-notice"},a.gettext("This is not a public listing. You are only seeing it because of elevated permissions.")):null,r.createElement("header",{className:"Addon-header"},this.headerImage(),r.createElement(Gy,{addon:t}),r.createElement(ol,{addon:t}),t&&r.createElement(Gv,{addon:t}),r.createElement("div",{className:"Addon-summary-and-install-button-wrapper"},f?r.createElement("p",Object.assign({className:"Addon-summary"},l)):null,r.createElement(Nv,{addon:t})),r.createElement("h2",{className:"visually-hidden"},a.gettext("Extension Metadata"))),t?r.createElement(Bw,{addon:t,className:"Addon-WrongPlatformWarning"}):null),r.createElement(js,{className:"Addon-header-meta-and-ratings",photonStyle:!0},r.createElement(xd,{addon:t}))),r.createElement("div",{className:"Addon-details"},r.createElement("div",{className:"Addon-main-content"},this.renderAddonsByAuthorsCard({isForTheme:!0}),d.length>0&&!u?r.createElement(js,{className:"Addon-screenshots",header:a.gettext("Screenshots")},r.createElement(nk,{previews:d})):null,this.renderShowMoreCard(),this.renderDevCommentsCard(),s===D.Gz&&r.createElement(zy,{addon:t})),this.renderRatingsCard(),r.createElement(jm,{addon:t}),r.createElement(ME,{version:o}),r.createElement(dh,{addon:t}),r.createElement(Ms,{addon:t}),this.renderVersionReleaseNotes(),this.renderAddonsByAuthorsCard({isForTheme:!1}))))}}])&&sk(t.prototype,n),o&&sk(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);hk.propTypes={RatingManager:w().func,addon:w().object,addonIsLoading:w().bool,clientApp:w().string.isRequired,currentVersion:w().object,dispatch:w().func.isRequired,errorHandler:w().object.isRequired,i18n:w().object.isRequired,installError:w().string,lang:w().string.isRequired,location:w().object.isRequired,match:w().shape({params:w().object.isRequired}).isRequired,addonsByAuthors:w().array},hk.defaultProps={RatingManager:VP};const yk=(0,Mo.qC)(Eu(),(0,g.connect)((function(e,t){var n,r=t.match.params.slug,o=la(e.addons,r),i={},a=null;return o&&(n=function(e,t){var n=e.byAddonSlug[t];return n?n.map((function(t){return e.byAddonId[t]})):null}(e.addonsByAuthors,o.slug),i=e.installations[o.guid]||{},a=o.currentVersionId?mf({id:o.currentVersionId,state:e.versions}):null),{addonIsLoading:fa(e,r),addonsByAuthors:n,clientApp:e.api.clientApp,currentVersion:a,installError:i.error,lang:e.api.lang,addon:o}})),gs({fileName:"src/amo/pages/Addon/index.js",extractId:function(e){return e.match.params.slug}}))(hk);const mk=(0,Mo.qC)(No,Eu())((function(e){var t,n=e.addon,o=e.headerText,i=e.i18n,a=Bt(e.location),u=n?Ut(ln(n.slug),a):"",c=Bs(n),s=r.createElement("img",{className:"AddonSummaryCard-header-icon-image",src:c,alt:i.gettext("Add-on icon")}),l=r.createElement("div",{className:"AddonSummaryCard-header"},r.createElement("div",{className:"AddonSummaryCard-header-icon"},n?r.createElement(wc,{to:u},s):s),r.createElement("div",{className:"AddonSummaryCard-header-text"},r.createElement("h1",{className:"visually-hidden"},o),r.createElement(Gy,{addon:n,linkToAddon:!0,queryParamsForAttribution:a})));if(n&&n.ratings){var f=Ed(n.ratings.average);t=i.sprintf(i.ngettext("%(rating)s Star out of 5","%(rating)s Stars out of 5",f),{rating:i.formatNumber(f)})}return r.createElement(js,{header:l,className:"AddonSummaryCard"},r.createElement("div",{className:"AddonSummaryCard-overallRatingStars"},r.createElement(id,{rating:n&&n.ratings&&n.ratings.average,readOnly:!0,yellowStars:!0}),r.createElement("div",{className:"AddonSummaryCard-addonAverage"},n?t:r.createElement(Zp,{minWidth:20}))),r.createElement(hd,{addon:n}))}));function vk(e){return(vk="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function gk(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function bk(e,t){return(bk=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function wk(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Ek(e);if(t){var o=Ek(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Ok(this,n)}}function Ok(e,t){if(t&&("object"===vk(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Ek(e){return(Ek=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var _k="license",xk="eula",Sk="privacy",jk=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&bk(e,t)}(a,e);var t,n,o,i=wk(a);function a(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),(t=i.call(this,e)).loadDataIfNeeded(),t}return t=a,(n=[{key:"componentDidUpdate",value:function(e){this.loadDataIfNeeded(e)}},{key:"loadDataIfNeeded",value:function(e){var t=this.props,n=t.addon,r=t.addonInfo,o=t.addonInfoIsLoading,i=t.addonIsLoading,a=t.addonVersion,u=t.addonVersionIsLoading,c=t.dispatch,s=t.errorHandler,l=t.infoType,f=t.match.params.slug,p=e&&e.addon;if(s.hasError())L.Z.warn("Not loading data because of an error");else{var d=p&&p.slug!==f;if(n&&!d||i||c(na({showGroupedRatings:!0,slug:f,errorHandler:s})),l===_k){var h=a&&a.license&&void 0===a.license.text;n&&n.currentVersionId&&!u&&(!a||h||d)&&c(function(e){var t=e.errorHandlerId,n=e.slug,r=e.versionId;return ce()(t,"errorHandlerId is required"),ce()(n,"slug is required"),ce()(r,"versionId is required"),{type:lf,payload:{errorHandlerId:t,slug:n,versionId:r}}}({errorHandlerId:s.id,slug:f,versionId:n.currentVersionId}))}else r&&!d||o||c(function(e){var t=e.errorHandlerId,n=e.slug;return ce()(t,"errorHandlerId is required"),ce()(n,"slug is required"),{type:Qi,payload:{errorHandlerId:t,slug:n}}}({slug:f,errorHandlerId:s.id}))}}},{key:"render",value:function(){var e,t,n,o=this.props,i=o.addon,a=o.addonInfo,u=o.addonVersion,c=o.errorHandler,s=o.i18n,l=o.infoType,f="";switch(l){case _k:n=s.gettext("Custom License for %(addonName)s"),e=u&&u.license?null===u.license.text?"":u.license.text:null;break;case xk:n=s.gettext("End-User License Agreement for %(addonName)s"),e=a?a.eula:null;break;case Sk:n=s.gettext("Privacy policy for %(addonName)s"),e=a?a.privacyPolicy:null;break;default:n=""}return i&&(f=s.sprintf(n,{addonName:i.name})),(e||l===_k&&e)&&(t=bn(e)),r.createElement(HO,{errorHandler:c},r.createElement("div",{className:Ho()("AddonInfo","AddonInfo--".concat(l))},i&&r.createElement(Ao,null,r.createElement("title",null,f),r.createElement("meta",{name:"robots",content:"noindex, follow"})),c.renderErrorIfPresent(),r.createElement(mk,{addon:i,headerText:f}),r.createElement(js,{className:"AddonInfo-info",header:f},t?r.createElement("p",{className:"AddonInfo-info-html",dangerouslySetInnerHTML:t}):r.createElement(Zp,null))))}}])&&gk(t.prototype,n),o&&gk(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const Pk=(0,Mo.qC)((0,g.connect)((function(e,t){var n=t.match.params.slug,r=la(e.addons,n),o=null;return r&&r.currentVersionId&&(o=mf({id:r.currentVersionId,state:e.versions})),{addon:r,addonIsLoading:fa(e,n),addonInfo:pa({slug:n,state:e.addons}),addonInfoIsLoading:da({slug:n,state:e.addons}),addonVersion:o,addonVersionIsLoading:gf({slug:n,state:e.versions})}})),Eu(),gs({fileName:"src/amo/pages/AddonInfo/index.js",extractId:function(e){var t=e.infoType,n=e.match.params.slug;return"".concat(n,"-").concat(t)}}))(jk);function kk(e){return(kk="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Ik(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Tk(e,t){return(Tk=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Rk(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Ak(e);if(t){var o=Ak(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Ck(this,n)}}function Ck(e,t){if(t&&("object"===kk(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Ak(e){return(Ak=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Nk=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Tk(e,t)}(a,e);var t,n,o,i=Rk(a);function a(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),(t=i.call(this,e)).loadDataIfNeeded(),t}return t=a,(n=[{key:"componentDidUpdate",value:function(e){this.loadDataIfNeeded(e)}},{key:"loadDataIfNeeded",value:function(e){var t=this.props,n=t.dispatch,r=t.errorHandler,o=t.featuredReview,i=t.loadingReview,a=t.reviewId;r.hasError()?L.Z.warn("Not loading data because of an error"):o&&(!e||e.reviewId===a)||i||n(function(e){var t=e.errorHandlerId,n=e.reviewId;return ce()(t,"errorHandlerId is required"),ce()(n,"reviewId is required"),{type:Vo,payload:{errorHandlerId:t,reviewId:n}}}({reviewId:a,errorHandlerId:r.id}))}},{key:"render",value:function(){var e=this.props,t=e.addon,n=e.errorHandler,o=e.featuredReview,i=e.i18n,a=e.siteUserCanReply,u=o?i.sprintf(o.isDeveloperReply?i.gettext("Response by %(userName)s"):i.gettext("Review by %(userName)s"),{userName:o.userName}):null,c=n.hasError()&&404===n.capturedError.responseStatusCode?r.createElement(Do(),{code:404},r.createElement("div",{className:"FeaturedAddonReview-notfound"},i.gettext("The review was not found."))):r.createElement(cP,{addon:t,review:o,siteUserCanReply:a});return r.createElement("div",{className:"FeaturedAddonReview"},r.createElement(js,{header:u,className:"FeaturedAddonReview-card"},c))}}])&&Ik(t.prototype,n),o&&Ik(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const Lk=(0,Mo.qC)((0,g.connect)((function(e,t){var n=t.reviewId;return ce()(n,"Cannot render a FeaturedAddonReview without a reviewId"),{featuredReview:Cp(e.reviews,n),loadingReview:e.reviews.view[n]&&e.reviews.view[n].loadingReview}})),Eu(),gs({fileName:"src/amo/components/FeaturedAddonReview/index.js",extractId:function(e){return e.reviewId}}))(Nk);function Dk(e){return(Dk="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Mk(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Fk(e,t){return(Fk=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Uk(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Hk(e);if(t){var o=Hk(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Bk(this,n)}}function Bk(e,t){if(t&&("object"===Dk(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Hk(e){return(Hk=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var qk="SHOW_ALL_REVIEWS";function zk(e){return e.query.page||"1"}var Gk=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Fk(e,t)}(a,e);var t,n,o,i=Uk(a);function a(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),(t=i.call(this,e)).onSelectOption=function(e){var n=t.props,r=n.addon,o=n.clientApp,i=n.history,a=n.lang,u=n.location;ce()(r,"addon is required"),e.preventDefault();var c=e.target.value,s=Tp({addonSlug:r.slug,score:c===qk?void 0:c,location:u});i.push("/".concat(a,"/").concat(o).concat(s))},t.loadDataIfNeeded(),t}return t=a,(n=[{key:"componentDidUpdate",value:function(e){this.loadDataIfNeeded(e),this.dispatchFetchReviewPermissions()}},{key:"loadDataIfNeeded",value:function(e){var t=e&&e.addon,n=this.props,r=n.addon,o=n.addonIsLoading,i=n.areReviewsLoading,a=n.dispatch,u=n.errorHandler,c=n.location,s=n.match.params.addonSlug,l=n.reviews;u.hasError()?L.Z.warn("Not loading data because of an error"):(r?(!e||r&&t&&r.type!==t.type)&&a(qo(r.type)):o||a(na({showGroupedRatings:!0,slug:s,errorHandler:u})),i||l||a(function(e){var t=e.addonSlug,n=e.errorHandlerId,r=e.page,o=void 0===r?"1":r,i=e.score;if(!n)throw new Error("errorHandlerId cannot be empty");if(!t)throw new Error("addonSlug cannot be empty");return{type:Zo,payload:{addonSlug:t,errorHandlerId:n,page:o,score:i}}}({addonSlug:s,errorHandlerId:u.id,page:zk(c),score:c.query.score||null})))}},{key:"componentDidMount",value:function(){this.dispatchFetchReviewPermissions()}},{key:"dispatchFetchReviewPermissions",value:function(){var e,t,n,r,o=this.props,i=o.addon,a=o.checkingIfSiteUserCanReply,u=o.dispatch,c=o.errorHandler,s=o.siteUser,l=o.siteUserCanReplyToReviews;i&&s&&null===l&&!a&&!c.hasError()&&u((e={addonId:i.id,errorHandlerId:c.id,userId:s.id},t=e.errorHandlerId,n=e.addonId,r=e.userId,ce()(t,"errorHandlerId is required"),ce()(n,"addonId is required"),ce()(r,"userId is required"),{type:Yo,payload:{errorHandlerId:t,addonId:n,userId:r}}))}},{key:"getPageDescription",value:function(){var e=this.props,t=e.addon,n=e.i18n;return ce()(t,"addon is required"),n.sprintf(n.gettext("Reviews and ratings for %(addonName)s. Find out what other\n users think about %(addonName)s and add it to your Firefox Browser."),{addonName:t.name})}},{key:"filterByScoreSelector",value:function(){var e=this.props,t=e.addon,n=e.i18n,o=e.location;return r.createElement(Is,{className:"AddonReviewList-filterByScoreSelector",disabled:!t,onChange:this.onSelectOption,value:o.query.score||qk},r.createElement("option",{value:qk},n.gettext("Show all reviews")),r.createElement("option",{value:5},n.gettext("Show only five-star reviews")),r.createElement("option",{value:4},n.gettext("Show only four-star reviews")),r.createElement("option",{value:3},n.gettext("Show only three-star reviews")),r.createElement("option",{value:2},n.gettext("Show only two-star reviews")),r.createElement("option",{value:1},n.gettext("Show only one-star reviews")))}},{key:"render",value:function(){var e=this.props,t=e.addon,n=e.errorHandler,o=e.i18n,i=e.location,a=e.match.params.reviewId,u=e.pageSize,c=e.reviewCount,s=e.reviews,l=e.siteUserCanReplyToReviews,f=t?o.sprintf(o.gettext("Reviews for %(addonName)s"),{addonName:t.name}):"",p=null;p=null!==c?c>0&&o.sprintf(o.ngettext("%(total)s review","%(total)s reviews",c),{total:o.formatNumber(c)}):r.createElement(Zp,{width:40});var d=r.createElement("div",{className:"AddonReviewList-cardListHeader"},r.createElement("div",{className:"AddonReviewList-reviewCount"},p),r.createElement("div",{className:"AddonReviewList-filterByScore"},this.filterByScoreSelector())),h=(t&&t.ratings?t.ratings.count:null)||4;h>25&&(h=25);var y=s?s.filter((function(e){return e.id.toString()!==a})):Array(h).fill(null),m=t&&c&&u&&c>Number(u)?r.createElement(ym,{LinkComponent:wc,count:c,currentPage:zk(i),pathname:Tp({addonSlug:t.slug,score:i.query.score,location:i}),perPage:Number(u)}):null;return r.createElement(HO,{errorHandler:n},r.createElement("div",{className:Ho()("AddonReviewList",t&&t.type?["AddonReviewList--".concat(t.type)]:null)},t&&r.createElement(Ao,null,r.createElement("title",null,f),r.createElement("meta",{name:"description",content:this.getPageDescription()}),a&&r.createElement("meta",{name:"robots",content:"noindex, follow"})),n.renderErrorIfPresent(),r.createElement(mk,{addon:t,headerText:f}),r.createElement("div",{className:"AddonReviewList-reviews"},a&&r.createElement(Lk,{addon:t,reviewId:a,siteUserCanReply:l}),y.length?r.createElement(xy,{className:"AddonReviewList-reviews-listing",footer:m,header:d},r.createElement("ul",null,y.map((function(e,n){return r.createElement("li",{key:String(n)},r.createElement(cP,{addon:t,review:e,siteUserCanReply:l}))})))):r.createElement(js,{header:d},r.createElement("p",{className:"AddonReviewList-noReviews"},o.gettext("There are no reviews"))))))}}])&&Mk(t.prototype,n),o&&Mk(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const Wk=(0,Mo.qC)((0,g.connect)((function(e,t){var n,r,o,i,a=t.match.params.addonSlug,u=la(e.addons,a),c=function(e){var t=e.reviewsState,n=e.addonSlug,r=e.page,o=e.score;ce()(n,"addonSlug is required"),ce()(r,"page is required"),ce()(t,"reviewsState is required"),ce()(void 0!==o,"score is required");var i=t.byAddon[n];return i&&i.score===o&&i.page===r?i.data:null}({page:zk(t.location),reviewsState:e.reviews,addonSlug:a,score:t.location.query.score||null}),s=Xe(e.users),l=!1,f=null;if(u&&s){var p=(n={reviewsState:e.reviews,addonId:u.id,userId:s.id},r=n.reviewsState,o=n.addonId,i=n.userId,r.permissions[Ap({addonId:o,userId:i})]);p&&(l=p.loading,f=p.canReplyToReviews)}return{addon:u,addonIsLoading:fa(e,a),areReviewsLoading:Up(e,a),checkingIfSiteUserCanReply:l,clientApp:e.api.clientApp,lang:e.api.lang,pageSize:c?c.pageSize:null,reviewCount:c?c.reviewCount:null,reviews:c&&Np({state:e.reviews,reviews:c.reviews}),siteUserCanReplyToReviews:f,siteUser:s}})),Eu(),gs({fileName:"src/amo/pages/AddonReviewList/index.js",extractId:function(e){var t=e.location,n=e.match.params;return"".concat(n.addonSlug,"-").concat(t.query.page||"")}}))(Gk);a(90330);const Vk=(0,Mo.qC)(Eu(),(0,g.connect)((function(e,t){var n=t.addon,r=t.i18n,o=t.version,i={};return n&&(i=e.installations[n.guid]),{versionInfo:o?bf({i18n:r,state:e.versions,versionId:o.id}):null,installError:i&&i.error?i.error:null}})))((function(e){var t=e.addon,n=e.headerText,o=e.i18n,i=e.installError,a=e.version,u=e.versionInfo,c=e.isCurrentVersion;if(null===a)return r.createElement("li",{className:"AddonVersionCard"},r.createElement("div",null,n&&r.createElement("h1",{className:"AddonVersionCard-header"},n),r.createElement("h2",{className:"AddonVersionCard-noVersion"},o.gettext("No version found"))));var s=a?o.sprintf(o.gettext("Version %(versionNumber)s"),{versionNumber:a.version}):r.createElement(Zp,null),l=null;if(a){var f=a.license;if(t&&f)if(f.url){var p=f.isCustom?{to:"/addon/".concat(t.slug,"/license/")}:{href:f.url,prependClientApp:!1,prependLang:!1},d=f.name?o.sprintf(o.gettext("Source code released under %(linkStart)s%(licenseName)s%(linkEnd)s"),{licenseName:f.name,linkStart:"%(linkStart)s",linkEnd:"%(linkEnd)s"}):o.gettext("Source code released under %(linkStart)sCustom License%(linkEnd)s"),h=ie({text:d,replacements:[["linkStart","linkEnd",function(e){return r.createElement(wc,Object.assign({key:t.slug},p),e)}]]});l=r.createElement("p",{className:"AddonVersionCard-license"},h)}else l=r.createElement("p",{className:"AddonVersionCard-license"},o.sprintf(o.gettext("Source code released under %(licenseName)s"),{licenseName:f.name}))}return r.createElement("li",{className:"AddonVersionCard"},r.createElement("div",{className:"AddonVersionCard-content"},r.createElement(r.Fragment,null,n&&r.createElement("h1",{className:"AddonVersionCard-header"},n),c&&r.createElement(r.Fragment,null,r.createElement(xp,{error:i}),r.createElement(zf,{addon:t})),r.createElement("h2",{className:"AddonVersionCard-version"},s),function(){if(!a)return r.createElement(Zp,null);if(!u||!u.created||!u.filesize)return null;var e={dateReleased:o.moment(u.created).format("ll"),fileSize:u.filesize};return r.createElement("div",{className:"AddonVersionCard-fileInfo"},o.sprintf(o.gettext("Released %(dateReleased)s - %(fileSize)s"),e))}(),u&&r.createElement("div",{className:"AddonVersionCard-compatibility"},u.compatibilityString),a?r.createElement("div",{className:"AddonVersionCard-releaseNotes",dangerouslySetInnerHTML:bn(a.releaseNotes)}):r.createElement(Zp,null),l)),t&&r.createElement(Gv,{addon:t}),r.createElement(Nv,{addon:t,version:a,showLinkInsteadOfButton:!c}))}));function Yk(e){return(Yk="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Zk(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function $k(e,t){return($k=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Kk(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Xk(e);if(t){var o=Xk(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Qk(this,n)}}function Qk(e,t){if(t&&("object"===Yk(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Xk(e){return(Xk=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Jk=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&$k(e,t)}(a,e);var t,n,o,i=Kk(a);function a(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),(t=i.call(this,e)).loadDataIfNeeded(),t}return t=a,(n=[{key:"componentDidUpdate",value:function(e){this.loadDataIfNeeded(e)}},{key:"loadDataIfNeeded",value:function(e){var t=this.props,n=t.addon,r=t.addonIsLoading,o=t.areVersionsLoading,i=t.dispatch,a=t.errorHandler,u=t.versions,c=t.match.params.slug,s=e&&e.addon;if(a.hasError())L.Z.warn("Not loading data because of an error");else{var l=s&&s.slug!==c;n&&!l||r||i(na({showGroupedRatings:!0,slug:c,errorHandler:a})),o||u&&!l||i(function(e){var t=e.errorHandlerId,n=e.page,r=void 0===n?"1":n,o=e.slug;return ce()(t,"errorHandlerId is required"),ce()(o,"slug is required"),{type:ff,payload:{errorHandlerId:t,page:r,slug:o}}}({errorHandlerId:a.id,slug:c}))}}},{key:"render",value:function(){var e,t=this.props,n=t.addon,o=t.errorHandler,i=t.i18n,a=t.versions,u=[];n&&a&&(e=a.find((function(e){return e.id===n.currentVersionId}))||null,u=a.filter((function(e){return e.id!==n.currentVersionId})));var c="";return n&&a&&(c=i.sprintf(i.ngettext("%(addonName)s version history - %(total)s version","%(addonName)s version history - %(total)s versions",a.length),{addonName:n.name,total:i.formatNumber(a.length)})),r.createElement(HO,{errorHandler:o,isAddonInstallPage:!0},r.createElement("div",{className:"AddonVersions"},n&&r.createElement(Ao,null,r.createElement("title",null,c)),o.renderErrorIfPresent(),r.createElement("div",{className:"AddonVersions-wrapper"},r.createElement(mk,{addon:n,headerText:c}),r.createElement(xy,{className:"AddonVersions-versions",header:c||r.createElement(Zp,null)},r.createElement("ul",null,r.createElement("li",null,r.createElement(Jc,{type:"warning"},r.createElement("span",{className:"AddonVersions-warning-text"},i.gettext("Be careful with old versions! These versions are displayed for testing and reference purposes.")),r.createElement("span",{className:"AddonVersions-warning-text"},i.gettext("You should always use the latest version of an add-on.")))),r.createElement(Vk,{addon:n,headerText:i.gettext("Latest version"),isCurrentVersion:!0,key:"latestVersion",version:e}),u.map((function(e,t){return r.createElement(Vk,{addon:n,headerText:0===t?i.gettext("Older versions"):null,key:e.id,version:e})})))))))}}])&&Zk(t.prototype,n),o&&Zk(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const eI=(0,Mo.qC)((0,g.connect)((function(e,t){var n=t.match.params.slug,r=la(e.addons,n),o=gf({slug:n,state:e.versions});return{addon:r,addonIsLoading:fa(e,n),areVersionsLoading:o,versions:!r||o?void 0:vf({slug:n,state:e.versions})}})),Eu(),gs({fileName:"src/amo/pages/AddonVersions/index.js",extractId:function(e){var t=e.location,n=e.match.params;return"".concat(n.slug,"-").concat(t.query.page||"")}}))(Jk);function tI(e){return(tI="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function nI(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function rI(e,t){return(rI=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function oI(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=aI(e);if(t){var o=aI(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return iI(this,n)}}function iI(e,t){if(t&&("object"===tI(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function aI(e){return(aI=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var uI=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&rI(e,t)}(a,e);var t,n,o,i=oI(a);function a(e){var t;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),t=i.call(this,e);var n=e.addonType,r=e.categoriesState,o=e.dispatch,u=e.errorHandler,c=e.loading;return ce()(n,"addonType is undefined"),c||r||o(eh({errorHandlerId:u.id})),o(qo(n)),t}return t=a,(n=[{key:"componentDidUpdate",value:function(e){var t=e.addonType,n=this.props,r=n.addonType,o=n.dispatch;r&&t!==r&&o(qo(r))}},{key:"render",value:function(){var e=this.props,t=e.addonType,n=e.categoriesState,o=e.className,i=e.clientApp,a=e.errorHandler,u=e.i18n,c=e.loading;ce()(t,"addonType is undefined");var s=[];n&&n[i]&&n[i][t]&&(s=Object.values(n[i][t]));var l=Ho()("Categories",o);return a.hasError()||c||s.length?r.createElement(js,{className:l,header:u.gettext("Categories")},a.renderErrorIfPresent(),c?r.createElement("div",{className:"Categories-loading"},r.createElement("span",{className:"Categories-loading-info visually-hidden"},u.gettext("Loading categories.")),Array(8).fill(0).map((function(e,t){return r.createElement(Zp,{className:"Categories-loading-text",key:"Categories-loading-text-".concat(t)})}))):r.createElement("ul",{className:"Categories-list"},s.map((function(e,n){var o=e.name,i=e.slug;return r.createElement("li",{className:"Categories-item",key:o},r.createElement(Dc,{className:"Categories-link\n Categories--category-color-".concat(n%12+1),to:{pathname:rh({addonType:t,slug:i})}},o))})))):r.createElement(js,{className:l},r.createElement("p",{className:"Categories-none-loaded-message"},u.gettext("No categories found.")))}}])&&nI(t.prototype,n),o&&nI(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const cI=(0,Mo.qC)(ms({extractId:function(e){return e.addonType},name:"Categories"}),(0,g.connect)((function(e){return{categoriesState:e.categories.categories,clientApp:e.api.clientApp,loading:e.categories.loading}})),Eu())(uI);function sI(e){return(sI="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function lI(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function fI(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function pI(e,t){return(pI=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function dI(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=yI(e);if(t){var o=yI(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return hI(this,n)}}function hI(e,t){if(t&&("object"===sI(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function yI(e){return(yI=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var mI=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&pI(e,t)}(a,e);var t,n,o,i=dI(a);function a(){return lI(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"getPageTitle",value:function(e){var t=this.props.i18n;switch(e){case D.Gz:return t.gettext("All extension categories");case D.Yd:return t.gettext("All theme categories");default:return null}}},{key:"render",value:function(){var e=En(this.props.match.params.visibleAddonType),t=this.getPageTitle(e);return r.createElement(HO,null,r.createElement(Ao,null,r.createElement("title",null,t)),r.createElement(hp,{title:t}),r.createElement(ep,null),r.createElement(cI,{addonType:e,className:"CategoriesPage"}))}}])&&fI(t.prototype,n),o&&fI(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const vI=Eu()(mI);function gI(e){return(gI="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function bI(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function wI(e,t){return(wI=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function OI(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=_I(e);if(t){var o=_I(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return EI(this,n)}}function EI(e,t){if(t&&("object"===gI(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function _I(e){return(_I=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var xI=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&wI(e,t)}(a,e);var t,n,o,i=OI(a);function a(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),(t=i.call(this,e)).props.hasCategory&&!t.props.categoryName&&t.props.dispatch(eh({errorHandlerId:t.props.errorHandler.id})),t}return t=a,(n=[{key:"render",value:function(){var e,t=this.props,n=t.categoryName,o=t.count,i=t.filters,a=t.i18n,u=t.loadingSearch,c=i||{},s=c.addonType,l=c.query,f=c.tag;if(u)u&&l?e=a.sprintf(a.gettext('Searching for "%(query)s"'),{query:l}):u&&(e=a.gettext("Searching for add-ons"));else switch(s){case D.Gz:e=n&&l&&f?a.sprintf(a.ngettext('%(count)s extension found for "%(query)s" with tag %(tag)s in %(categoryName)s','%(count)s extensions found for "%(query)s" with tag %(tag)s in %(categoryName)s',o),{count:a.formatNumber(o),query:l,categoryName:n,tag:f}):n&&l?a.sprintf(a.ngettext('%(count)s extension found for "%(query)s" in %(categoryName)s','%(count)s extensions found for "%(query)s" in %(categoryName)s',o),{count:a.formatNumber(o),query:l,categoryName:n}):n&&f?a.sprintf(a.ngettext("%(count)s extension found with tag %(tag)s in %(categoryName)s","%(count)s extensions found with tag %(tag)s in %(categoryName)s",o),{count:a.formatNumber(o),categoryName:n,tag:f}):n?a.sprintf(a.ngettext("%(count)s extension found in %(categoryName)s","%(count)s extensions found in %(categoryName)s",o),{count:a.formatNumber(o),categoryName:n}):l&&f?a.sprintf(a.ngettext('%(count)s extension found for "%(query)s" with tag %(tag)s','%(count)s extensions found for "%(query)s" with tag %(tag)s',o),{count:a.formatNumber(o),query:l,tag:f}):l?a.sprintf(a.ngettext('%(count)s extension found for "%(query)s"','%(count)s extensions found for "%(query)s"',o),{count:a.formatNumber(o),query:l}):f?a.sprintf(a.ngettext("%(count)s extension found with tag %(tag)s","%(count)s extensions found with tag %(tag)s",o),{count:a.formatNumber(o),tag:f}):a.sprintf(a.ngettext("%(count)s extension found","%(count)s extensions found",o),{count:a.formatNumber(o)});break;case D.Yd:e=n&&l&&f?a.sprintf(a.ngettext('%(count)s theme found for "%(query)s" with tag %(tag)s in %(categoryName)s','%(count)s themes found for "%(query)s" with tag %(tag)s in %(categoryName)s',o),{count:a.formatNumber(o),query:l,categoryName:n,tag:f}):n&&l?a.sprintf(a.ngettext('%(count)s theme found for "%(query)s" in %(categoryName)s','%(count)s themes found for "%(query)s" in %(categoryName)s',o),{count:a.formatNumber(o),query:l,categoryName:n}):n&&f?a.sprintf(a.ngettext("%(count)s theme found with tag %(tag)s in %(categoryName)s","%(count)s themes found with tag %(tag)s in %(categoryName)s",o),{count:a.formatNumber(o),categoryName:n,tag:f}):n?a.sprintf(a.ngettext("%(count)s theme found in %(categoryName)s","%(count)s themes found in %(categoryName)s",o),{count:a.formatNumber(o),categoryName:n}):l&&f?a.sprintf(a.ngettext('%(count)s theme found for "%(query)s" with tag %(tag)s','%(count)s themes found for "%(query)s" with tag %(tag)s',o),{count:a.formatNumber(o),query:l,tag:f}):l?a.sprintf(a.ngettext('%(count)s theme found for "%(query)s"','%(count)s themes found for "%(query)s"',o),{count:a.formatNumber(o),query:l}):f?a.sprintf(a.ngettext("%(count)s theme found with tag %(tag)s","%(count)s themes found with tag %(tag)s",o),{count:a.formatNumber(o),tag:f}):a.sprintf(a.ngettext("%(count)s theme found","%(count)s themes found",o),{count:a.formatNumber(o)});break;default:e=l&&f?a.sprintf(a.ngettext('%(count)s result found for "%(query)s" with tag %(tag)s','%(count)s results found for "%(query)s" with tag %(tag)s',o),{count:a.formatNumber(o),query:l,tag:f}):l?a.sprintf(a.ngettext('%(count)s result found for "%(query)s"','%(count)s results found for "%(query)s"',o),{count:a.formatNumber(o),query:l}):f?a.sprintf(a.ngettext("%(count)s result found with tag %(tag)s","%(count)s results found with tag %(tag)s",o),{count:a.formatNumber(o),tag:f}):a.sprintf(a.ngettext("%(count)s result found","%(count)s results found",o),{count:a.formatNumber(o)})}return r.createElement(js,{className:"SearchContextCard"},r.createElement("h1",{className:"SearchContextCard-header"},e))}}])&&bI(t.prototype,n),o&&bI(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const SI=(0,Mo.qC)(Eu(),(0,g.connect)((function(e){var t,n=e.search,r=n.filters,o=null;if(n&&r&&r.category&&"string"==typeof r.category&&(t=r.category),t){var i=e.categories.categories,a=e.api.clientApp;if(i&&a){var u=i[a];if(u&&r&&r.addonType&&"string"==typeof r.addonType){var c=u[r.addonType];o=oh(c,t)}}}return{hasCategory:!!t,categoryName:o,count:n.count||0,filters:r,loadingSearch:n.loading}})),ms({id:"SearchContextCard"}))(xI);function jI(e){return(jI="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function PI(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function kI(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function II(e,t){return(II=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function TI(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=CI(e);if(t){var o=CI(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return RI(this,n)}}function RI(e,t){if(t&&("object"===jI(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function CI(e){return(CI=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var AI=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&II(e,t)}(a,e);var t,n,o,i=TI(a);function a(){var e;PI(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).onClick=function(t){var n=e.props.uiState;t.preventDefault(),e.props.setUIState({expanded:!n.expanded})},e}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.children,n=e.className,o=e.header,i=e.id,a=e.i18n,u=e.uiState.expanded;ce()(t,"The children property is required"),ce()(i,"The id property is required");var c=r.createElement("a",{"aria-checked":u,className:"ExpandableCard-ToggleLink",href:"#toggle-content",onClick:this.onClick,role:"switch",title:a.gettext("Toggle contents")},o,r.createElement(ac,{className:"ExpandableCard-ToggleArrow",name:"triangle-down-black"}));return r.createElement(js,{className:Ho()("ExpandableCard",n,{"ExpandableCard--expanded":u}),header:c},r.createElement("div",{className:"ExpandableCard-contents"},t))}}])&&kI(t.prototype,n),o&&kI(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const NI=(0,Mo.qC)(Eu(),Bu({fileName:"src/amo/components/ExpandableCard/index.js",extractId:function(e){return e.id},initialState:{expanded:!1}}))(AI);function LI(e){return(LI="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var DI;function MI(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function FI(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function UI(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?FI(Object(n),!0).forEach((function(t){BI(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):FI(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function BI(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function HI(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function qI(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function zI(e,t){return(zI=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function GI(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=VI(e);if(t){var o=VI(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return WI(this,n)}}function WI(e,t){if(t&&("object"===LI(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function VI(e){return(VI=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var YI="",ZI=kt.sort,$I=function(t){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&zI(e,t)}(u,t);var n,o,i,a=GI(u);function u(){var t;HI(this,u);for(var n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=a.call.apply(a,[this].concat(r))).onSelectElementChange=function(n){n.preventDefault();var r=t.props.filters,o=UI({},r),i=n.currentTarget.getAttribute("name"),a=n.currentTarget.value;if(i){if((o.category||o.tag)&&i===ZI&&a!==D.xZ?o[i]="".concat(D.xZ,",").concat(a):o[i]=a,o[i]===r[i])return L.Z.debug((0,e.f9)(DI||(DI=MI(["onSelectElementChange() called in SearchFilters but\n the filter "," did not change–not changing route."])),i)),!1;o[i]===YI&&delete o[i]}return!o.promoted&&o.sort&&o.sort===D.wn&&delete o.sort,t.doSearch(o),!1},t}return n=u,(o=[{key:"doSearch",value:function(e){var t=this.props,n=t.clientApp,r=t.lang,o=t.history,i=t.pathname,a=UI({},e);a.page&&(a.page="1"),a.category?(delete a.category,delete a.addonType):a.tag&&delete a.tag,o.push({pathname:"/".concat(r,"/").concat(n).concat(i),query:Tt(a)})}},{key:"addonTypeOptions",value:function(){var e=this.props.i18n,t=[{children:e.gettext("All"),value:YI},{children:e.gettext("Extension"),value:D.Gz}];return t.push({children:e.gettext("Theme"),value:D.Yd}),t}},{key:"sortOptions",value:function(){var e=this.props.i18n;return[{children:e.gettext("Relevance"),value:D.BH},{children:e.gettext("Recently Updated"),value:D.My},{children:e.gettext("Most Users"),value:D.Nu},{children:e.gettext("Top Rated"),value:D.kc},{children:e.gettext("Trending"),value:D.Mj}]}},{key:"promotedOptions",value:function(){var e=this.props.i18n;return[{children:e.gettext("Any"),value:YI},{children:e.gettext("Recommended"),value:D.g$},{children:e.gettext("By Firefox"),value:D.fq},{children:e.gettext("Verified"),value:D.J6},{children:e.gettext("All Reviewed"),value:D.cr}]}},{key:"render",value:function(){var e=this.props,t=e.clientApp,n=e.filters,o=e.i18n,i="SearchFilters",a=(n.sort?n.sort.split(",").filter((function(e){return e!==D.xZ})):[""])[0];return r.createElement(NI,{className:i,header:o.gettext("Filter results"),id:i},r.createElement("form",{autoComplete:"off"},r.createElement("label",{className:"SearchFilters-label",htmlFor:"SearchFilters-Sort"},o.gettext("Sort by")),r.createElement(Is,{className:"SearchFilters-Sort SearchFilters-select",id:"SearchFilters-Sort",name:ZI,onChange:this.onSelectElementChange,value:a||D.BH},this.sortOptions().map((function(e){return r.createElement("option",Object.assign({key:e.value},e))}))),!n.category&&t!==D.wZ&&r.createElement("div",null,r.createElement("label",{className:"SearchFilters-AddonType-label SearchFilters-label",htmlFor:"SearchFilters-AddonType"},o.gettext("Add-on Type")),r.createElement(Is,{className:"SearchFilters-AddonType SearchFilters-select",id:"SearchFilters-AddonType",name:"addonType",onChange:this.onSelectElementChange,value:n.addonType||YI},this.addonTypeOptions().map((function(e){return r.createElement("option",Object.assign({key:e.value},e))})))),t!==D.wZ&&r.createElement("div",null,r.createElement("label",{className:"SearchFilters-Badging-label SearchFilters-label",htmlFor:"SearchFilters-Badging"},o.gettext("Badging")),r.createElement(Is,{className:"SearchFilters-Badging SearchFilters-select",id:"SearchFilters-Badging",name:"promoted",onChange:this.onSelectElementChange,value:n.promoted||YI},this.promotedOptions().map((function(e){return r.createElement("option",Object.assign({key:e.value},e))}))))))}}])&&qI(n.prototype,o),i&&qI(n,i),Object.defineProperty(n,"prototype",{writable:!1}),u}(r.Component);const KI=(0,Mo.qC)(No,(0,g.connect)((function(e){return{clientApp:e.api.clientApp,lang:e.api.lang}})),Eu(),ms({name:"SearchFilters"}))($I);function QI(e){return(QI="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function XI(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function JI(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function eT(e,t){return(eT=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function tT(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=rT(e);if(t){var o=rT(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return nT(this,n)}}function nT(e,t){if(t&&("object"===QI(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function rT(e){return(rT=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var oT=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&eT(e,t)}(a,e);var t,n,o,i=tT(a);function a(){return XI(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e,t,n=this.props,o=n.count,i=n.filters,a=n.i18n,u=n.loading,c=n.paginator,s=n.results,l=i.query;u?e=r.createElement("div",{className:"visually-hidden"},a.gettext("Searching…")):0===o&&(t=l?a.sprintf(a.gettext('No results were found for "%(query)s".'),{query:l}):a.gettext("No results were found."));var f=i.promoted?D.Ow:D.Eb;return r.createElement("div",{className:"SearchResults"},e,r.createElement(Ny,{addonInstallSource:f,addons:s,footer:c,header:a.gettext("Search results"),loading:u,showFullSizePreview:!0},t?r.createElement("p",{className:"SearchResults-message"},t):null))}}])&&JI(t.prototype,n),o&&JI(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);oT.defaultProps={count:0,filters:{},results:[]};const iT=(0,Mo.qC)(Eu())(oT);function aT(e){return(aT="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function uT(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function cT(e,t){return(cT=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function sT(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=fT(e);if(t){var o=fT(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return lT(this,n)}}function lT(e,t){if(t&&("object"===aT(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function fT(e){return(fT=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var pT=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&cT(e,t)}(a,e);var t,n,o,i=sT(a);function a(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),(t=i.call(this,e)).dispatchSearch({newFilters:e.filters,oldFilters:e.filtersUsedForResults}),t}return t=a,(n=[{key:"componentDidUpdate",value:function(e){var t=e.filters,n=this.props.filters;this.dispatchSearch({newFilters:n,oldFilters:t})}},{key:"dispatchSearch",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.newFilters,n=e.oldFilters,r=this.props,o=r.context,i=r.dispatch,a=r.errorHandler,u=t||{},c=u.addonType;Vy()(n,t)||(i(nf({errorHandlerId:a.id,filters:u})),c&&i(qo(c))),c||o===D.cs||i(qo(D.cs))}},{key:"renderHelmet",value:function(){var e=this.props,t=e.i18n,n=e.filters,o=e.pageTitle,i=e.count,a=o;if(!a)if(a=t.gettext("Search results"),n&&n.promoted){if(n.promoted===D.g$)switch(n.addonType){case D.Gz:a=t.gettext("Recommended extensions");break;case D.Yd:a=t.gettext("Recommended themes");break;default:a=t.gettext("Recommended add-ons")}else if(n.promoted===D.fq)switch(n.addonType){case D.Gz:a=t.gettext("Extensions by Firefox");break;case D.Yd:a=t.gettext("Themes by Firefox");break;default:a=t.gettext("Add-ons by Firefox")}else if(n.promoted===D.cr)switch(n.addonType){case D.Gz:a=t.gettext("Reviewed extensions");break;case D.Yd:a=t.gettext("Reviewed themes");break;default:a=t.gettext("Reviewed add-ons")}else if(n.promoted===D.J6)switch(n.addonType){case D.Gz:a=t.gettext("Verified extensions");break;case D.Yd:a=t.gettext("Verified themes");break;default:a=t.gettext("Verified add-ons")}}else if(n&&n.sort)switch(n.sort){case D.Mj:switch(n.addonType){case D.Gz:a=t.gettext("Trending extensions");break;case D.Yd:a=t.gettext("Trending themes");break;default:a=t.gettext("Trending add-ons")}break;case D.kc:switch(n.addonType){case D.Gz:a=t.gettext("Top rated extensions");break;case D.Yd:a=t.gettext("Top rated themes");break;default:a=t.gettext("Top rated add-ons")}break;case D.Nu:switch(n.addonType){case D.Gz:a=t.gettext("Popular extensions");break;case D.Yd:a=t.gettext("Popular themes");break;default:a=t.gettext("Popular add-ons")}}else n&&n.query&&(a=t.sprintf(t.gettext('Search results for "%(query)s"'),{query:n.query}));return r.createElement(Ao,null,r.createElement("title",null,a),0===i&&r.createElement("meta",{name:"robots",content:"noindex, follow"}))}},{key:"render",value:function(){var e=this.props,t=e.LinkComponent,n=e.count,o=e.errorHandler,i=e.filters,a=e.loading,u=e.pageSize,c=e.paginationQueryParams,s=e.pathname,l=e.results;if(o.hasError()&&(L.Z.warn("Captured API Error: ".concat(o.capturedError.messages)),[400,404].includes(o.capturedError.responseStatusCode)))return r.createElement(jg,null);var f=c||Tt(i),p=i?i.page:void 0,d=n>Number(u)?r.createElement(ym,{LinkComponent:t,count:n,currentPage:p,pathname:s,perPage:Number(u),queryParams:f}):null;return r.createElement("div",{className:"Search"},this.renderHelmet(),o.renderErrorIfPresent(),r.createElement(SI,null),r.createElement(KI,{filters:i||{},pathname:s}),r.createElement(iT,{count:n,filters:i,loading:a,paginator:d,results:l}))}}])&&uT(t.prototype,n),o&&uT(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);pT.defaultProps={LinkComponent:wc,paginationQueryParams:null,pathname:"/search/"};const dT=(0,Mo.qC)((0,g.connect)((function(e){return{context:e.viewContext.context,count:e.search.count,filtersUsedForResults:e.search.filters,loading:e.search.loading,pageSize:e.search.pageSize,results:e.search.results}})),Eu(),gs({fileName:"src/amo/components/Search/index.js",extractId:function(e){return e.filters?e.filters.page:""}}))(pT);function hT(e){return(hT="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function yT(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function mT(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?yT(Object(n),!0).forEach((function(t){vT(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):yT(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function vT(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function gT(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function bT(e,t){return(bT=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function wT(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=ET(e);if(t){var o=ET(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return OT(this,n)}}function OT(e,t){if(t&&("object"===hT(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function ET(e){return(ET=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var _T=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&bT(e,t)}(a,e);var t,n,o,i=wT(a);function a(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),(t=i.call(this,e)).props.categoryName||t.props.dispatch(eh({errorHandlerId:t.props.errorHandler.id})),t}return t=a,(n=[{key:"getPageTitle",value:function(e){var t=this.props,n=t.addonType,r=t.i18n;return n===D.Yd?e?r.sprintf(r.gettext("Themes in %(categoryName)s"),{categoryName:e}):r.gettext("Themes"):e?r.sprintf(r.gettext("Extensions in %(categoryName)s"),{categoryName:e}):r.gettext("Extensions")}},{key:"render",value:function(){var e=this.props,t=e.addonType,n=e.categoryName,o=e.filters,i=e.match.params.categorySlug,a=mT(mT({},o),{},{addonType:t,category:i,sort:o.sort||D.YM});return r.createElement(HO,null,r.createElement(ep,null),r.createElement(dT,{filters:a,pageTitle:this.getPageTitle(n),paginationQueryParams:Tt(o),pathname:rh({addonType:t,slug:i})}))}}])&&gT(t.prototype,n),o&&gT(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const xT=(0,Mo.qC)((0,g.connect)((function(e,t){var n=e.router.location,r=t.match.params,o=r.categorySlug,i=null,a=En(r.visibleAddonType),u=e.categories.categories,c=e.api.clientApp;if(u&&c){var s=u[c];if(s){var l=s[a];i=oh(l,o)}}var f=Rt(n.query);return{addonType:a,categoryName:i,filters:Nt(f)}})),Eu(),gs({fileName:"src/amo/pages/CategoryPage/index.js",extractId:function(e){return e.match.params.categorySlug}}))(_T);a(99385);var ST="src/amo/components/CollectionAddAddon/index.js";function jT(e){return(jT="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function PT(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function kT(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function IT(e,t){return(IT=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function TT(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=CT(e);if(t){var o=CT(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return RT(this,n)}}function RT(e,t){if(t&&("object"===jT(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function CT(e){return(CT=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var AT="added",NT=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&IT(e,t)}(a,e);var t,n,o,i=TT(a);function a(){var e;PT(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).resetMessages=function(){e.props.setUIState({addonAction:null}),e.timeout&&e.props.clearTimeout(e.timeout)},e.onAddonSelected=function(t){var n=e.props,r=n.collection,o=n.dispatch,i=n.errorHandler,a=n.filters,u=t.addonId;ce()(u,"addonId is required"),ce()(r,"collection is required"),o(tu({addonId:u,collectionId:r.id,editing:!0,errorHandlerId:i.id,filters:a,slug:r.slug,userId:r.authorId})),e.resetMessages()},e}return t=a,(n=[{key:"componentDidUpdate",value:function(e){var t=e.hasAddonBeenAdded,n=e.hasAddonBeenRemoved,r=this.props,o=r.errorHandler,i=r.hasAddonBeenAdded,a=r.hasAddonBeenRemoved,u=r.setTimeout,c=r.setUIState,s=t!==i,l=n!==a;s&&c({addonAction:i?AT:null}),l&&c({addonAction:a?"removed":null}),(s||l)&&(i||a)&&(o.clear(),this.timeout=u(this.resetMessages,5e3))}},{key:"componentWillUnmount",value:function(){this.resetMessages()}},{key:"render",value:function(){var e=this.props,t=e.collection,n=e.errorHandler,o=e.i18n,i=e.uiState.addonAction,a=i===AT;return r.createElement(js,{className:"CollectionAddAddon"},n.hasError()?n.renderError():r.createElement(Lm,{className:"CollectionAddAddon-noticePlaceholder"},i&&r.createElement(Zm,{classNames:"CollectionAddAddon-noticePlaceholder-transition",timeout:450},r.createElement(Jc,{type:a?"success":"generic"},a?o.gettext("Added to collection"):o.gettext("Removed from collection")))),r.createElement(jb,{inputName:"collection-addon-query",inputPlaceholder:o.gettext("Find an add-on to include in this collection"),onSuggestionSelected:this.onAddonSelected,selectSuggestionText:o.gettext("Add to collection"),key:t?t.id:""}))}}])&&kT(t.prototype,n),o&&kT(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);NT.defaultProps={setTimeout:"undefined"!=typeof window?window.setTimeout.bind(window):function(){},clearTimeout:"undefined"!=typeof window?window.clearTimeout.bind(window):function(){}};var LT=function(e){var t=e.collection;return"collection".concat(t?t.id:"")};const DT=(0,Mo.qC)((0,g.connect)((function(e){return{hasAddonBeenAdded:e.collections.hasAddonBeenAdded,hasAddonBeenRemoved:e.collections.hasAddonBeenRemoved}})),Eu(),gs({fileName:ST,extractId:LT}),Bu({fileName:ST,extractId:LT,initialState:{addonAction:null}}))(NT);function MT(e){return(MT="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function FT(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function UT(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?FT(Object(n),!0).forEach((function(t){BT(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):FT(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function BT(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function HT(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function qT(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function zT(e,t){return(zT=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function GT(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=VT(e);if(t){var o=VT(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return WT(this,n)}}function WT(e,t){if(t&&("object"===MT(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function VT(e){return(VT=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var YT=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&zT(e,t)}(a,e);var t,n,o,i=GT(a);function a(){var e;HT(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).onSortSelect=function(t){var n=e.props,r=n.collection,o=n.clientApp,i=n.editing,a=n.filters,u=n.lang,c=n.history;ce()(r,"A collection is required.");var s=t.currentTarget.value,l=UT(UT({},a),{},{collectionSort:s}),f="/".concat(u,"/").concat(o).concat(i?du({collection:r}):pu({collection:r}));c.push({pathname:f,query:fu(l)})},e}return t=a,(n=[{key:"sortOptions",value:function(){var e=this.props.i18n;return[{label:e.gettext("Newest first"),value:D.Y4},{label:e.gettext("Oldest first"),value:D.pn},{label:e.gettext("Name"),value:D.eO},{label:e.gettext("Popularity"),value:D.Nx}]}},{key:"render",value:function(){var e=this.props,t=e.filters,n=e.i18n;return r.createElement("form",{className:"CollectionSort"},r.createElement("label",{className:"CollectionSort-label",htmlFor:"CollectionSort-select"},n.gettext("Sort add-ons by")),r.createElement(Is,{className:"CollectionSort-select",defaultValue:t.collectionSort,id:"CollectionSort-select",name:"sort",onChange:this.onSortSelect},this.sortOptions().map((function(e){return r.createElement("option",{key:e.value,value:e.value},e.label)}))))}}])&&qT(t.prototype,n),o&&qT(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const ZT=(0,Mo.qC)(No,(0,g.connect)((function(e){return{clientApp:e.api.clientApp,lang:e.api.lang}})),Eu())(YT);function $T(e){return($T="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function KT(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function QT(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function XT(e,t){return(XT=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function JT(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=tR(e);if(t){var o=tR(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return eR(this,n)}}function eR(e,t){if(t&&("object"===$T(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function tR(e){return(tR=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var nR=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&XT(e,t)}(a,e);var t,n,o,i=JT(a);function a(){return KT(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.collection,n=e.editing,o=e.filters;return r.createElement(js,{className:"CollectionControls"},r.createElement(ZT,{collection:t,editing:n,filters:o}))}}])&&QT(t.prototype,n),o&&QT(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);function rR(e){return(rR="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function oR(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function iR(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function aR(e,t){return(aR=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function uR(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=sR(e);if(t){var o=sR(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return cR(this,n)}}function cR(e,t){if(t&&("object"===rR(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function sR(e){return(sR=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var lR=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&aR(e,t)}(a,e);var t,n,o,i=uR(a);function a(){var e;oR(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).onEditDetails=function(t){var n=e.props.dispatch;t.preventDefault(),t.stopPropagation(),n(ru())},e}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.collection,n=e.editing,o=e.filters,i=e.hasEditPermission,a=e.i18n,u=e.showEditButton;return r.createElement("div",{className:"CollectionDetails"},r.createElement("h1",{className:"CollectionDetails-title"},t?hu({name:t.name,i18n:a}):r.createElement(Zp,null)),r.createElement("p",{className:"CollectionDetails-description"},t?t.description:r.createElement(Zp,null)),r.createElement($p,{metadata:[{content:t?t.numberOfAddons:null,title:a.gettext("Add-ons")},{content:t?t.authorName:null,title:a.gettext("Creator")},{content:t?a.moment(t.lastUpdatedDate).format("ll"):null,title:a.gettext("Last updated")}]}),t&&u&&!n&&r.createElement(Dc,{buttonType:"neutral",className:"CollectionDetails-edit-button",puffy:!0,to:{pathname:du({collection:t}),query:fu(o)}},a.gettext("Edit this collection")),t&&n&&i&&r.createElement(Dc,{buttonType:"neutral",className:"CollectionDetails-edit-details-button",puffy:!0,href:"#editdetails",onClick:this.onEditDetails},a.gettext("Edit collection details")),t&&n&&r.createElement(Dc,{buttonType:"cancel",className:"CollectionDetails-back-to-collection-button",to:{pathname:pu({collection:t}),query:fu(o)}},a.gettext("Back to collection")))}}])&&iR(t.prototype,n),o&&iR(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const fR=(0,Mo.qC)(Eu(),(0,g.connect)())(lR);var pR;function dR(e){return(dR="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function hR(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function yR(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?hR(Object(n),!0).forEach((function(t){mR(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):hR(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function mR(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function vR(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function gR(e,t){return(gR=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function bR(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=OR(e);if(t){var o=OR(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return wR(this,n)}}function wR(e,t){if(t&&("object"===dR(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function OR(e){return(OR=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var ER=function(e){return{collectionId:e.collection?e.collection.id:null,customSlug:!1,description:e.collection&&e.collection.description?e.collection.description:"",name:e.collection?e.collection.name:"",slug:e.collection?e.collection.slug:""}},_R=function(n){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&gR(e,t)}(c,n);var o,i,a,u=bR(c);function c(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,c),(t=u.call(this,e)).onCancel=function(e){var n=t.props,r=n.clientApp,o=n.creating,i=n.dispatch,a=n.history,u=n.siteLang;o&&a.push("/".concat(u,"/").concat(r,"/collections/")),e.preventDefault(),e.stopPropagation(),i(ou())},t.onSubmit=function(e){var n=t.props,r=n.collection,o=n.creating,i=n.currentUserId,a=n.dispatch,u=n.errorHandler,c=n.filters,s=n.location,l=n.siteLang;e.preventDefault(),e.stopPropagation();var f=t.state,p=f.name,d=f.slug;p=p&&p.trim(),d=d&&d.trim(),ce()(l,"The form cannot be submitted without a site language"),ce()(p,"The form cannot be submitted without a name"),ce()(d,"The form cannot be submitted without a slug");var h={description:mR({},l,t.state.description),errorHandlerId:u.id,name:mR({},l,p),slug:d};o&&i?a(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.errorHandlerId,n=e.defaultLocale,r=e.description,o=e.includeAddonId,i=e.name,a=e.slug,u=e.userId;return ce()(t,"errorHandlerId is required"),ce()(u,"userId is required"),ce()(i,"name is required when creating a collection"),ce()(a,"slug is required when creating a collection"),{type:La,payload:{errorHandlerId:t,defaultLocale:n,description:r,includeAddonId:o,name:i,slug:a,userId:u}}}(yR(yR({},h),{},{defaultLocale:l,includeAddonId:s.query.include_addon_id,userId:i}))):(ce()(r,"The form cannot be submitted without a collection"),a(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.collectionSlug,n=e.defaultLocale,r=e.description,o=e.errorHandlerId,i=e.filters,a=e.name,u=e.slug,c=e.userId;return ce()(t,"collectionSlug is required when updating"),ce()(o,"errorHandlerId is required"),ce()(i,"filters is required"),ce()(c,"userId is required"),{type:Aa,payload:{collectionSlug:t,defaultLocale:n,description:r,errorHandlerId:o,filters:i,name:a,slug:u,userId:c}}}(yR(yR({},h),{},{collectionSlug:r.slug,defaultLocale:r.defaultLocale,filters:c,userId:r.authorId}))))},t.onTextInput=function(e){e.preventDefault();var n=e.target,r=n.name,o=n.value,i=t.props.creating;if(void 0!==o){var a=o.trim();i&&"name"===r&&!t.state.customSlug?t.setState({slug:a.split(/[^A-Za-z0-9]/).filter((function(e){return""!==e})).join("-").substring(0,30),name:o}):i&&"slug"===r&&""!==a?t.setState({customSlug:!0,slug:o}):t.setState(mR({},r,o))}},t.state=ER(e),t}return o=c,a=[{key:"getDerivedStateFromProps",value:function(e,t){return e.collection&&e.collection.id!==t.collectionId?ER(e):null}}],(i=[{key:"render",value:function(){var n,o,i=this.props,a=i.collection,u=i.creating,c=i.currentUserId,s=i.errorHandler,l=i.i18n,f=i.isCollectionBeingModified,p=i.siteLang,d=this.state,h=d.description,y=d.name,m=d.slug,v=(0,e.IV)(pR||(n=["","/","/firefox/collections/\n ","/"],o||(o=n.slice(0)),pR=Object.freeze(Object.defineProperties(n,{raw:{value:Object.freeze(o)}}))),t.Z.get("apiHost"),p,a&&a.authorId||c),g=a&&a.name===y&&a.slug===m&&(a.description===h||null===a.description&&!h),b=!a&&!u||f,w=!(y&&y.trim().length),O=!(m&&m.trim().length),E=b||g||w||O,_=u?l.gettext("Create collection"):l.gettext("Save changes");return r.createElement("form",{className:"CollectionManager",onSubmit:this.onSubmit},s.renderErrorIfPresent(),r.createElement("label",{className:"CollectionManager-collectionName",htmlFor:"collectionName"},l.gettext("Collection name")),a||u?r.createElement("input",{onChange:this.onTextInput,id:"collectionName",name:"name",type:"text",value:this.state.name}):r.createElement(Zp,{minWidth:60}),r.createElement("label",{htmlFor:"collectionDescription"},l.gettext("Description")),a||u?r.createElement("textarea",{value:this.state.description,id:"collectionDescription",name:"description",onChange:this.onTextInput}):r.createElement(Zp,{minWidth:60}),r.createElement("label",{htmlFor:"collectionSlug"},l.gettext("Custom URL")),r.createElement("div",{className:"CollectionManager-slug"},r.createElement("div",{id:"collectionUrlPrefix",title:v,className:"CollectionManager-slug-url-hint"},r.createElement("div",{className:"CollectionManager-slug-url-prefix"},v,"‎")),r.createElement("input",{onChange:this.onTextInput,id:"collectionSlug",maxLength:30,name:"slug",type:"text",value:this.state.slug})),r.createElement("footer",{className:"CollectionManager-footer"},r.createElement(Dc,{buttonType:"neutral",disabled:b,onClick:this.onCancel,className:"CollectionManager-cancel",puffy:!0,type:"button"},l.gettext("Cancel")),r.createElement(Dc,{buttonType:"action",disabled:E,className:"CollectionManager-submit",type:"submit",puffy:!0},_)))}}])&&vR(o.prototype,i),a&&vR(o,a),Object.defineProperty(o,"prototype",{writable:!1}),c}(r.Component);const xR=(0,Mo.qC)(No,Eu(),gs({fileName:"src/amo/components/CollectionManager/index.js",extractId:function(e){var t=e.collection;return"collection-".concat(t?t.slug:"")}}),(0,g.connect)((function(e){var t=Xe(e.users);return{clientApp:e.api.clientApp,currentUserId:t&&t.id,isCollectionBeingModified:e.collections.isCollectionBeingModified,siteLang:e.api.lang}})))(_R);const SR=(0,Mo.qC)((0,g.connect)((function(e,n){var r=n.collection,o=Xe(e.users),i=r&&o&&r.authorId===o.id,a=!1,u=!1;if(r&&o){var c=t.Z.get("mozillaUserId");u=(a=i||r.authorId===c&&et(e,D.ut))||r.authorId===c&&r.slug===D.Sw&&et(e,D.z1)}return{editingCollectionDetails:e.collections.editingCollectionDetails,hasEditPermission:a,hasMaintainerPermission:u}})))((function(e){var t=e.collection,n=e.creating,o=e.editing,i=e.editingCollectionDetails,a=e.filters,u=e.hasEditPermission,c=e.hasMaintainerPermission;return n||i?r.createElement(xR,{collection:t,creating:n,filters:a}):r.createElement(fR,{collection:t,editing:o,filters:a,hasEditPermission:u,showEditButton:c&&!o})}));const jR=function(){return r.createElement(HO,{showWrongPlatformWarning:!1},r.createElement(jg,null))};function PR(e){return(PR="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function kR(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function IR(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function TR(e,t){return(TR=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function RR(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=AR(e);if(t){var o=AR(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return CR(this,n)}}function CR(e,t){if(t&&("object"===PR(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function AR(e){return(AR=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var NR=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&TR(e,t)}(a,e);var t,n,o,i=RR(a);function a(){var e;kR(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).onConfirm=function(t){e.props.setUIState({showConfirmation:!1}),e.props.onConfirm(t)},e.toggleConfirmation=function(t){t.preventDefault(),e.props.setUIState({showConfirmation:!e.props.uiState.showConfirmation})},e}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.buttonType,n=e.cancelButtonText,o=e.cancelButtonType,i=e.children,a=e.className,u=e.confirmButtonText,c=e.confirmButtonType,s=e.htmlType,l=e.id,f=e.message,p=e.onConfirm,d=e.puffyButtons,h=e.uiState;ce()(i,"The children property is required"),ce()(l,"The id property is required"),ce()(p,"The onConfirm property is required");var y=h.showConfirmation,m=Ho()("ConfirmButton",a,{"ConfirmButton--show-confirmation":y});return r.createElement("div",{className:m},y?r.createElement($j,{cancelButtonText:n,cancelButtonType:o,confirmButtonText:u,confirmButtonType:c,onCancel:this.toggleConfirmation,onConfirm:this.onConfirm,message:f,puffyButtons:d}):r.createElement(Dc,{buttonType:t,htmlType:s,className:"ConfirmButton-default-button",onClick:this.toggleConfirmation},i))}}])&&IR(t.prototype,n),o&&IR(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);NR.defaultProps={buttonType:"neutral"};const LR=(0,Mo.qC)(Bu({fileName:"src/amo/components/ConfirmButton/index.js",extractId:function(e){return e.id},initialState:{showConfirmation:!1},resetOnUnmount:!0}))(NR);function DR(e){return(DR="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function MR(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function FR(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?MR(Object(n),!0).forEach((function(t){UR(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):MR(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function UR(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function BR(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function HR(e,t){return(HR=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function qR(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=GR(e);if(t){var o=GR(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return zR(this,n)}}function zR(e,t){if(t&&("object"===DR(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function GR(e){return(GR=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var WR=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&HR(e,t)}(a,e);var t,n,o,i=qR(a);function a(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),(t=i.call(this,e)).onDelete=function(e){e.preventDefault();var n=t.props,r=n.dispatch,o=n.errorHandler,i=n.collection;ce()(i,"collection is required");var a=i.slug,u=i.authorId;ce()(a,"slug is required"),ce()(u,"userId is required"),r(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.errorHandlerId,n=e.slug,r=e.userId;return ce()(t,"The errorHandlerId parameter is required"),ce()(n,"The slug parameter is required"),ce()(r,"The userId parameter is required"),{type:Ba,payload:{errorHandlerId:t,slug:n,userId:r}}}({errorHandlerId:o.id,slug:a,userId:u}))},t.removeAddon=function(e){var n=t.props,r=n.collection,o=n.dispatch,i=n.errorHandler,a=n.filters,u=n.history;ce()(r,"collection is required");var c=r.slug,s=r.authorId;ce()(c,"slug is required"),ce()(s,"userId is required");var l=a.page,f=!1,p=function(e){var t=e.collection,n=e.currentPage,r=t.numberOfAddons,o=t.pageSize,i="1";if(o&&r){var a=Math.ceil((r-1)/Number(o));if(parseInt(n,10)<a)return n;i=a}return i?i.toString():"1"}({collection:r,currentPage:l});if(l!==p&&(l=p,f=!0),o(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.addonId,n=e.errorHandlerId,r=e.filters,o=e.slug,i=e.userId;return ce()(t,"The addonId parameter is required"),ce()(n,"The errorHandlerId parameter is required"),ce()(r,"The filters parameter is required"),ce()(o,"The slug parameter is required"),ce()(i,"The userId parameter is required"),{type:Fa,payload:{addonId:t,errorHandlerId:n,filters:r,slug:o,userId:i}}}({addonId:e,errorHandlerId:i.id,filters:FR(FR({},a),{},{page:l}),slug:c,userId:s})),f){var d=u.location;u.push({pathname:d.pathname,query:FR(FR({},d.query),{},{page:l})})}},t.deleteNote=function(e,n){var r=t.props,o=r.collection,i=r.dispatch,a=r.filters,u=r.lang;ce()(o,"collection is required");var c=o.slug,s=o.authorId;ce()(c,"slug is required"),ce()(s,"userId is required"),i(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.addonId,n=e.errorHandlerId,r=e.filters,o=e.lang,i=e.slug,a=e.userId;return ce()(t,"The addonId parameter is required"),ce()(n,"The errorHandlerId parameter is required"),ce()(r,"The filters parameter is required"),ce()(o,"The lang parameter is required"),ce()(i,"The slug parameter is required"),ce()(a,"The userId parameter is required"),{type:qa,payload:{addonId:t,errorHandlerId:n,filters:r,notes:wa({},o,""),slug:i,userId:a}}}({addonId:e,errorHandlerId:n.id,filters:a,lang:u,slug:c,userId:s}))},t.saveNote=function(e,n,r){var o=t.props,i=o.collection,a=o.dispatch,u=o.filters,c=o.lang;ce()(i,"collection is required");var s=i.slug,l=i.authorId;ce()(s,"slug is required"),ce()(l,"userId is required"),a(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.addonId,n=e.errorHandlerId,r=e.notes,o=e.filters,i=e.slug,a=e.userId;return ce()(t,"The addonId parameter is required"),ce()(n,"The errorHandlerId parameter is required"),ce()(null!=r,"The notes parameter is required"),ce()(o,"The filters parameter is required"),ce()(i,"The slug parameter is required"),ce()(a,"The userId parameter is required"),{type:Ha,payload:{addonId:t,errorHandlerId:n,notes:r,filters:o,slug:i,userId:a}}}({addonId:e,errorHandlerId:n.id,notes:UR({},c,r),filters:u,slug:s,userId:l}))},t.addonPlaceholderCount=3,t.maybeResetAddonPlaceholderCount(),t.loadDataIfNeeded(),t}return t=a,(n=[{key:"maybeResetAddonPlaceholderCount",value:function(){var e=this.props.collection;e&&e.addons&&e.addons.length&&(this.addonPlaceholderCount=e.addons.length)}},{key:"componentDidUpdate",value:function(e){this.loadDataIfNeeded(e),this.maybeResetAddonPlaceholderCount()}},{key:"loadDataIfNeeded",value:function(e){var t=this.props,n=t.collection,r=t.creating,o=t.errorHandler,i=t.filters,a=t.loading,u=t.location,c=t.match.params;if(o.hasError())L.Z.warn("Not loading data because of an error.");else if(!r&&!a){var s,l=!1,f=!1;if(e&&e.location&&u&&e.location.pathname!==u.pathname&&(l=!0),e&&!Vy()(e.filters,i)&&(f=!0),n&&(s=/^\d+$/.test(c.userId)?"".concat(n.authorId)===c.userId:n.authorUsername.toLowerCase()===c.userId.toLowerCase(),n.slug.toLowerCase()===c.slug.toLowerCase()&&!1!==s||(l=!0)),l||!n||c.slug===n.slug&&/^\d+$/.test(c.userId))n&&!l?n&&f&&n.numberOfAddons&&this.props.dispatch($a({errorHandlerId:o.id,filters:i,slug:c.slug,userId:Number(c.userId)})):this.props.dispatch(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.errorHandlerId,n=e.filters,r=e.slug,o=e.userId;return ce()(t,"errorHandlerId is required"),ce()(r,"slug is required"),ce()(o,"userId is required"),{type:Ea,payload:{errorHandlerId:t,filters:n,slug:r,userId:o}}}({errorHandlerId:o.id,filters:i,slug:c.slug,userId:Number(c.userId)||c.userId}));else{var p=this.props,d=p.editing,h=p.lang,y=p.clientApp,m=d?du({collection:n}):pu({collection:n});this.props.dispatch(ik({status:301,url:"/".concat(h,"/").concat(y).concat(m)}))}}}},{key:"renderDeleteButton",value:function(){var e=this.props,t=e.i18n;if(!e.isOwner)return null;var n="Collection-delete-button";return r.createElement(LR,{buttonType:"cancel",className:n,id:n,message:t.gettext("Do you really want to delete this collection?"),onConfirm:this.onDelete},t.gettext("Delete this collection"))}},{key:"renderCollection",value:function(){var e=this.props,t=e.collection,n=e.creating,o=e.editing,i=e.filters,a=e.i18n,u=e.isLoggedIn,c=e.loading;if((n||o)&&!u){var s=n?a.gettext("Log in to create a collection"):a.gettext("Log in to edit this collection");return r.createElement(js,{className:"Collection-login"},r.createElement(Ew,{noIcon:!0,logInText:s}))}var l,f=t&&t.addons||[],p=t&&t.pageSize&&t.numberOfAddons&&t.numberOfAddons>Number(t.pageSize)?r.createElement(ym,{LinkComponent:wc,count:t.numberOfAddons,currentPage:i.page,pathname:o?du({collection:t}):pu({collection:t}),perPage:Number(t.pageSize),queryParams:fu(i)}):null;return u&&(n||!c&&0===f.length)&&(l=n?a.gettext("First, create your collection. Then you can add extensions and themes."):a.gettext("Search for extensions and themes to add to your collection.")),r.createElement("div",{className:"Collection-wrapper"},r.createElement("div",{className:"Collection-detail-wrapper"},r.createElement(js,{className:"Collection-detail"},r.createElement(SR,{collection:t,creating:n,editing:o,filters:i}),this.renderDeleteButton()),!n&&r.createElement(nR,{collection:t,editing:o,filters:i})),r.createElement("div",{className:"Collection-items"},o&&r.createElement(DT,{collection:t,filters:i}),!n&&r.createElement(Ny,{addonInstallSource:D.Bz,addons:f,deleteNote:this.deleteNote,editing:o,footer:p,loading:!t||c,placeholderCount:this.addonPlaceholderCount,removeAddon:this.removeAddon,saveNote:this.saveNote,showFullSizePreview:!0}),l&&r.createElement("p",{className:"Collection-placeholder"},l)))}},{key:"getPageDescription",value:function(){var e=this.props,t=e.collection,n=e.i18n;return ce()(t,"collection is required"),n.sprintf(t.description?n.gettext("Download and create Firefox collections to keep track\n of favorite extensions and themes. Explore the\n %(collectionName)s—%(collectionDescription)s."):n.gettext("Download and create Firefox collections to keep track\n of favorite extensions and themes. Explore the %(collectionName)s."),{collectionName:hu({name:t.name,i18n:n}),collectionDescription:t.description})}},{key:"render",value:function(){var e=this.props,t=e.collection,n=e.errorHandler,o=e.i18n;return n.hasError()&&(L.Z.warn("Captured API Error: ".concat(n.capturedError.messages)),404===n.capturedError.responseStatusCode)?r.createElement(jR,null):r.createElement(HO,null,r.createElement("div",{className:"Collection"},t&&r.createElement(Ao,null,r.createElement("title",null,hu({name:t.name,i18n:o})),r.createElement("meta",{name:"description",content:this.getPageDescription()})),n.renderErrorIfPresent(),this.renderCollection()))}}])&&BR(t.prototype,n),o&&BR(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);WR.defaultProps={creating:!1,editing:!1};const VR=(0,Mo.qC)(Eu(),gs({fileName:"src/amo/pages/Collection/index.js",extractId:function(e){return[e.match.params.userId,e.match.params.slug,e.location.query.page].join("/")}}),(0,g.connect)((function(e,t){var n=e.api,r=e.collections.current.loading,o=t.creating,i=t.location,a={page:i.query.page||"1",collectionSort:i.query.collection_sort||D.Y4},u=Xe(e.users),c=o?null:au(e.collections),s=Boolean(c&&u&&c.authorId===u.id);return{clientApp:n.clientApp,collection:c,filters:a,isLoggedIn:!!u,isOwner:s,lang:n.lang,loading:r}})))(WR);const YR=function(e){return r.createElement(VR,Object.assign({},e,{editing:!0}))};a(86833);const ZR=(0,Mo.qC)(Eu())((function(e){var t,n=e.authorId,o=e.id,i=e.name,a=e.numberOfAddons,u=e.slug,c=e.i18n,s={};return null===a?s.href="":(ce()(n,"authorId is required"),ce()(u,"slug is required"),ce()(void 0!==a&&Number.isInteger(a),"numberOfAddons must be a number"),s.to="/collections/".concat(n,"/").concat(u,"/"),t=c.sprintf(c.ngettext("%(total)s add-on","%(total)s add-ons",a),{total:c.formatNumber(a)})),r.createElement("li",{className:"UserCollection",key:o},r.createElement(wc,Object.assign({className:"UserCollection-link"},s),r.createElement("h2",{className:"UserCollection-name"},null===a?r.createElement(Zp,null):hu({name:i,i18n:c})),r.createElement("p",{className:"UserCollection-number"},t||r.createElement(Zp,null))))}));function $R(e){return($R="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function KR(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function QR(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function XR(e,t){return(XR=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function JR(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=tC(e);if(t){var o=tC(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return eC(this,n)}}function eC(e,t){if(t&&("object"===$R(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function tC(e){return(tC=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var nC=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&XR(e,t)}(a,e);var t,n,o,i=JR(a);function a(){return KR(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"componentDidMount",value:function(){var e=this.props,t=e.collections,n=e.currentUserId,r=e.dispatch,o=e.errorHandler,i=e.loadingUserCollections;r(qo(D.cs)),!n||i||t||r(Va({errorHandlerId:o.id,userId:n}))}},{key:"renderCollections",value:function(){var e=this.props,t=e.i18n,n=e.collections,o=t.gettext("You do not have any collections."),i=[];if(n)n.forEach((function(e){var t=e.authorId,n=e.id,o=e.name,a=e.numberOfAddons,u=e.slug;i.push(r.createElement(ZR,{authorId:t,id:n,key:n,name:o,numberOfAddons:a,slug:u}))}));else for(var a=0;a<4;a++)i.push(r.createElement(ZR,{id:a,key:a,numberOfAddons:null}));var u=i.length?null:o;return r.createElement(xy,{className:"CollectionList-list",footer:u,header:t.gettext("My collections")},i.length&&r.createElement("ul",{className:"CollectionList-listing"},i))}},{key:"render",value:function(){var e=this.props,t=e.i18n,n=e.isLoggedIn;return r.createElement(HO,null,r.createElement("div",{className:"CollectionList"},r.createElement("div",{className:"CollectionList-wrapper"},r.createElement(js,{className:"CollectionList-info",header:t.gettext("Collections")},n?r.createElement(r.Fragment,null,r.createElement("p",{className:"CollectionList-info-text"},t.gettext("Collections make it easy to keep track of\n favorite add-ons and share your perfectly customized browser\n with others.")),r.createElement(Dc,{buttonType:"action",className:"CollectionList-create",puffy:!0,to:"/collections/add/"},t.gettext("Create a collection"))):r.createElement(Ew,{noIcon:!0,logInText:t.gettext("Log in to view your collections")})),n?this.renderCollections():null)))}}])&&QR(t.prototype,n),o&&QR(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const rC=(0,Mo.qC)((0,g.connect)((function(e){var t,n=e.collections,r=e.users,o=Xe(r),i=o&&o.id;return i&&(t=n.userCollections[i]),{currentUserId:i,isLoggedIn:!!o,loadingUserCollections:!!t&&t.loading,collections:lu(n,t)}})),Eu(),gs({fileName:"src/amo/pages/CollectionList/index.js",extractId:function(e){return e.currentUserId||""}}))(nC);function oC(e){return(oC="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function iC(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function aC(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function uC(e,t){return(uC=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function cC(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=lC(e);if(t){var o=lC(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return sC(this,n)}}function sC(e,t){if(t&&("object"===oC(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function lC(e){return(lC=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var fC=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&uC(e,t)}(a,e);var t,n,o,i=cC(a);function a(){return iC(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props.i18n;return r.createElement("section",{className:"SuggestedPages"},r.createElement("h2",null,e.gettext("Suggested Pages")),r.createElement("ul",null,r.createElement("li",null,r.createElement(wc,{to:"/".concat(xn(D.Gz),"/")},e.gettext("Browse all extensions"))),r.createElement("li",{className:"SuggestedPages-link-themes"},r.createElement(wc,{to:"/".concat(xn(D.Yd),"/")},e.gettext("Browse all themes"))),r.createElement("li",null,r.createElement(wc,{to:"/"},e.gettext("Add-ons Home Page")))))}}])&&aC(t.prototype,n),o&&aC(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const pC=(0,Mo.qC)(Eu())(fC);function dC(e){return(dC="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function hC(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function yC(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function mC(e,t){return(mC=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function vC(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=bC(e);if(t){var o=bC(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return gC(this,n)}}function gC(e,t){if(t&&("object"===dC(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function bC(e){return(bC=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var wC=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&mC(e,t)}(a,e);var t,n,o,i=vC(a);function a(){return hC(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props.i18n,t=e.sprintf(e.gettext('\n If you are signed in and think this message is an error, please\n <a href="%(url)s">file an issue</a>. Tell us where you came from\n and what you were trying to access, and we\'ll fix the issue.'),{url:"https://github.com/mozilla/addons-frontend/issues/new/"});return r.createElement(cg,{code:401,header:e.gettext("Not Authorized")},r.createElement("p",null,e.gettext("\n Sorry, but you aren't authorized to access this page. If you\n aren't signed in, try signing in using the link at the top\n of the page.")),r.createElement(pC,null),r.createElement("p",{dangerouslySetInnerHTML:vn(t,["a"])}))}}])&&yC(t.prototype,n),o&&yC(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const OC=(0,Mo.qC)(Eu())(wC);const EC=function(){return r.createElement(HO,{showWrongPlatformWarning:!1},r.createElement(OC,null))};const _C=function(){return r.createElement(HO,{showWrongPlatformWarning:!1},r.createElement(Lg,null))};function xC(e){return(xC="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function SC(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function jC(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function PC(e,t){return(PC=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function kC(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=TC(e);if(t){var o=TC(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return IC(this,n)}}function IC(e,t){if(t&&("object"===xC(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function TC(e){return(TC=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var RC=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&PC(e,t)}(a,e);var t,n,o,i=kC(a);function a(){return SC(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props.i18n,t=e.gettext('\n If you have additional information that would help us you can\n <a href="https://github.com/mozilla/addons-frontend/issues/new/">file an\n issue</a>. Tell us what steps you took that lead to the error and we\'ll\n do our best to fix it.');return r.createElement(cg,{code:500,header:e.gettext("Server Error")},r.createElement("p",null,e.gettext("\n Sorry, but there was an error with our server and we couldn't\n complete your request. We have logged this error and will\n investigate it.")),r.createElement(pC,null),r.createElement("p",{dangerouslySetInnerHTML:vn(t,["a"])}))}}])&&jC(t.prototype,n),o&&jC(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const CC=(0,Mo.qC)(Eu())(RC);const AC=function(){return r.createElement(HO,{showWrongPlatformWarning:!1},r.createElement(CC,null))};function NC(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function LC(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?NC(Object(n),!0).forEach((function(t){DC(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):NC(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function DC(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var MC="FETCH_BLOCK",FC="ABORT_FETCH_BLOCK",UC="LOAD_BLOCK",BC={blocks:{},lang:""},HC=function(e){var t=e.guid;return{type:FC,payload:{guid:t}}},qC=function(e){var t=e.block;return ce()(t,"block is required"),{type:UC,payload:{block:t}}},zC=function(e,t){return LC(LC({},e),{},{name:Yi(e.addon_name,t)})};const GC=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:BC,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case FC:return LC(LC({},e),{},{blocks:DC({},t.payload.guid,null)});case UC:var n=t.payload.block;return LC(LC({},e),{},{blocks:LC(LC({},e.blocks),{},DC({},n.guid,zC(n,e.lang)))});case dt:return LC(LC({},e),{},{lang:t.payload.lang});default:return e}};function WC(e){return(WC="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function VC(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function YC(e,t){return(YC=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function ZC(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=KC(e);if(t){var o=KC(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return $C(this,n)}}function $C(e,t){if(t&&("object"===WC(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function KC(e){return(KC=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var QC=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&YC(e,t)}(a,e);var t,n,o,i=ZC(a);function a(e){var t;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a);var n=(t=i.call(this,e)).props,r=n.block,o=n.dispatch,u=n.errorHandler,c=n.match.params.guid;return void 0===r&&o(function(e){var t=e.errorHandlerId,n=e.guid;return ce()(t,"errorHandlerId is required"),ce()(n,"guid is required"),{type:MC,payload:{errorHandlerId:t,guid:n}}}({errorHandlerId:u.id,guid:c})),t}return t=a,(n=[{key:"renderReason",value:function(){var e=this.props.block;return e&&null===e.reason?null:r.createElement("p",{className:"Block-reason"},e?vn(e.reason).__html:r.createElement(Zp,null))}},{key:"renderDateAndURL",value:function(){var e=this.props,t=e.block,n=e.i18n;if(!t)return r.createElement(Zp,null);var o=[n.sprintf(n.gettext("Blocked on %(date)s."),{date:n.moment(t.created).format("ll")})];return t.url&&o.push(" ",r.createElement("a",{key:t.url.url,href:t.url.outgoing,title:t.url.url},n.gettext("View block request")),"."),o}},{key:"renderVersions",value:function(){var e=this.props,t=e.block,n=e.i18n;return t?"0"===t.min_version&&"*"===t.max_version?n.gettext("Versions blocked: all versions."):n.sprintf(n.gettext("Versions blocked: %(min)s to %(max)s."),{min:t.min_version,max:t.max_version}):r.createElement(Zp,null)}},{key:"render",value:function(){var e=this.props,t=e.block,n=e.errorHandler,o=e.i18n;if(n.hasError())return L.Z.warn("Captured API Error: ".concat(n.capturedError.messages)),404===n.capturedError.responseStatusCode?r.createElement(jR,null):r.createElement(AC,null);var i=t&&t.name?o.sprintf(o.gettext("%(addonName)s has been blocked for your protection."),{addonName:t.name}):o.gettext("This add-on has been blocked for your protection.");return r.createElement(HO,null,r.createElement("div",{className:"Block-page"},r.createElement(Ao,null,r.createElement("title",null,i),r.createElement("meta",{name:"robots",content:"noindex, follow"})),r.createElement(js,{className:"Block-content",header:i},r.createElement("h2",null,o.gettext("Why was it blocked?")),r.createElement("p",{dangerouslySetInnerHTML:vn(o.sprintf(o.gettext("This add-on violates %(startLink)sMozilla's\n Add-on Policies%(endLink)s."),{startLink:'<a href="'.concat("https://extensionworkshop.com/documentation/publish/add-on-policies/?utm_source=addons.mozilla.org&utm_medium=referral&utm_content=blocked-addon",'">'),endLink:"</a>"}),["a"])}),this.renderReason(),r.createElement("h2",null,o.gettext("What does this mean?")),r.createElement("p",null,o.gettext("The problematic add-on or plugin will be\n automatically disabled and no longer usable.")),r.createElement("p",{dangerouslySetInnerHTML:vn(o.sprintf(o.gettext("When Mozilla becomes aware of add-ons, plugins,\n or other third-party software that seriously compromises\n Firefox security, stability, or performance and meets\n %(criteriaStartLink)scertain criteria%(criteriaEndLink)s,\n the software may be blocked from general use. For more\n information, please read %(supportStartLink)sthis support\n article%(supportEndLink)s."),{criteriaStartLink:'<a href="'.concat("https://extensionworkshop.com/documentation/publish/add-ons-blocking-process/?utm_source=addons.mozilla.org&utm_medium=referral&utm_content=blocked-addon",'">'),criteriaEndLink:"</a>",supportStartLink:'<a href="'.concat("https://support.mozilla.org/kb/add-ons-cause-issues-are-on-blocklist",'">'),supportEndLink:"</a>"}),["a"])}),r.createElement("p",{className:"Block-metadata"},this.renderVersions(),r.createElement("br",null),this.renderDateAndURL()))))}}])&&VC(t.prototype,n),o&&VC(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const XC=(0,Mo.qC)(Eu(),(0,g.connect)((function(e,t){return{block:e.blocks.blocks[t.match.params.guid]}})),gs({fileName:"src/amo/pages/Block/index.js",extractId:function(e){return e.match.params.guid}}))(QC);const JC=function(e){var t=e.alt,n=e.className,o=e.color,i=e.name;return r.createElement(ac,{alt:t,className:Ho()("CategoryIcon","CategoryIcon-".concat(o),n),name:i})};function eA(e){return(eA="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function tA(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function nA(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function rA(e,t){return(rA=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function oA(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=aA(e);if(t){var o=aA(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return iA(this,n)}}function iA(e,t){if(t&&("object"===eA(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function aA(e){return(aA=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var uA="primary-hero-click",cA="AMO Primary Hero Clicks",sA="external-link",lA="primary-hero-impression",fA="AMO Primary Hero Impressions",pA="homepage-primary-hero",dA=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&rA(e,t)}(a,e);var t,n,o,i=oA(a);function a(){var e;tA(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).makeCallToActionURL=function(){var t=e.props.shelfData;ce()(t,"The shelfData property is required");var n=t.addon,r=t.external;return n?Ut(ln(n.slug),{utm_source:D.Pr,utm_medium:D.AT,utm_content:pA}):(ce()(r,"Either an addon or an external is required"),r.homepage?Ut(r.homepage.url,{utm_source:D.Pr,utm_medium:D.AT,utm_content:pA}):null)},e.onHeroClick=function(){var t=e.props,n=t._tracking,r=t.shelfData;ce()(r,"The shelfData property is required");var o=r.addon;n.sendEvent({action:uA,category:cA,label:o?o.guid:sA})},e.onHeroImpression=function(){var t=e.props,n=t._tracking,r=t.shelfData;ce()(r,"The shelfData property is required");var o=r.addon;n.sendEvent({action:lA,category:fA,label:o?o.guid:sA})},e}return t=a,(n=[{key:"componentDidMount",value:function(){this.props.shelfData&&this.onHeroImpression()}},{key:"componentDidUpdate",value:function(e){var t=this.props.shelfData;t&&e.shelfData!==t&&this.onHeroImpression()}},{key:"render",value:function(){var e=this.props,t=e._checkInternalURL,n=e._getPromotedCategory,o=e.clientApp,i=e.i18n,a=e.errorHandler,u=e.shelfData,c=e.siteIsReadOnly,s=e.siteNotice;if(null===u)return null;var l,f,p,d,h,y=u||{},m=y.addon,v=y.description,g=y.external,b=y.featuredImage,w=y.gradient,O=!1,E=c||s?"HeroRecommendation--height-with-notice":"HeroRecommendation--height-without-notice";if(u){l="HeroRecommendation-".concat(w.start,"-").concat(w.end),L.Z.debug("className ".concat(l," generated from the API response. This should match a selector in styles.scss"));var _=this.makeCallToActionURL();if(_){var x=r.createElement("span",null," ",i.gettext("Get the extension")," "),S=t({urlString:_}).isInternal?{}:{rel:"noopener noreferrer",target:"_blank"};m?(f=m.name,p=r.createElement(wc,{className:"HeroRecommendation-link",onClick:this.onHeroClick,to:_},x)):g&&(f=g.name,p=r.createElement("a",Object.assign({className:"HeroRecommendation-link",href:_,onClick:this.onHeroClick},S),x))}}return m||g||(l="HeroRecommendation--loading",O=!0),r.createElement("section",{className:Ho()("HeroRecommendation",l,E,{"HeroRecommendation--no-image":!b&&!O})},r.createElement("div",{className:"HeroRecommendation-wrapper"},r.createElement(eg,{className:"HeroRecommendation-banner"}),r.createElement(Bw,{className:"HeroRecommendation-WrongPlatformWarning"}),a.renderErrorIfPresent(),r.createElement("div",{className:"HeroRecommendation-content"},O?r.createElement("div",{className:"HeroRecommendation-image-loading"},r.createElement(Zp,{width:100})):b&&r.createElement("div",{className:"HeroRecommendation-image-wrapper"},r.createElement("img",{className:"HeroRecommendation-image",alt:"",src:b})),r.createElement("div",{className:"HeroRecommendation-info"},(d=null,h=n({addon:m,clientApp:o,forBadging:!0}),O||(d=h===D.g$?i.gettext("RECOMMENDED"):h===D.fq?i.gettext("BY FIREFOX"):i.gettext("SPONSORED")),r.createElement("div",{className:"HeroRecommendation-title"},r.createElement("div",{className:"HeroRecommendation-title-text"},d||r.createElement(Zp,{width:20})),[D.fq,D.g$].includes(h)||O?null:r.createElement("a",{className:"HeroRecommendation-title-link",href:"".concat(hn({utm_content:pA}),"#sponsored"),rel:"noopener noreferrer",target:"_blank",title:i.gettext("Firefox only recommends extensions that meet our standards for security and performance.")},"What is this?"))),r.createElement("h2",{className:"HeroRecommendation-heading"},O?r.createElement(Zp,{width:60}):f),O?r.createElement("div",{className:"HeroRecommendation-body"},r.createElement(r.Fragment,null,r.createElement(Zp,{width:100}),r.createElement("br",null),r.createElement(Zp,{width:80}))):r.createElement("div",{className:"HeroRecommendation-body",dangerouslySetInnerHTML:bn(v)}),p))))}}])&&nA(t.prototype,n),o&&nA(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);dA.defaultProps={_checkInternalURL:dn,_getPromotedCategory:Gs,_tracking:pr};const hA=(0,Mo.qC)((0,g.connect)((function(e){return{clientApp:e.api.clientApp,siteIsReadOnly:e.site.readOnly,siteNotice:e.site.notice}})),Eu())(dA);function yA(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function mA(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?yA(Object(n),!0).forEach((function(t){vA(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):yA(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function vA(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function gA(e){return(gA="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function bA(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function wA(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function OA(e,t){return(OA=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function EA(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=xA(e);if(t){var o=xA(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return _A(this,n)}}function _A(e,t){if(t&&("object"===gA(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function xA(e){return(xA=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var SA=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&OA(e,t)}(a,e);var t,n,o,i=EA(a);function a(){return bA(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.addonInstallSource,n=e.addons,o=e.className,i=e.footerLink,a=e.footerText,u=e.header,c=e.isHomepageShelf,s=e.isTheme,l=e.loading,f=e.placeholderCount,p=null,d={},h=s?D.Pn:f;return n&&n.length>=h&&(i&&"object"===gA(i)?i.href?(d.href=i.href,d.prependClientApp=!1,d.prependLang=!1,d.target="_blank"):d.to=mA(mA({},i),{},{query:Tt(i.query)}):d.to=i,p=r.createElement(wc,d,a)),r.createElement(Ny,{addonInstallSource:t,addons:n,className:Ho()("LandingAddonsCard",o,{"LandingAddonsCard-Themes":s}),footerLink:p,header:u,isHomepageShelf:c,showPromotedBadge:!1,type:"horizontal",loading:l,placeholderCount:h,useThemePlaceholder:s})}}])&&wA(t.prototype,n),o&&wA(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);SA.defaultProps={isHomepageShelf:!1,placeholderCount:D.Db};const jA=Eu()((function(e){var t,n=e._checkInternalURL,o=void 0===n?dn:n,i=e.i18n,a=e.loading,u=e.shelves;return t=a?r.createElement("div",{className:"HomepageShelves-loading"},[1,2,3].map((function(e){return r.createElement(SA,{className:"HomepageShelves-loading-card",key:"HomepageShelves-loading-".concat(e),header:r.createElement(Zp,{width:100}),loading:!0})}))):u.map((function(e){var t,n=e.addons,a=e.addonType,u=e.endpoint,c=e.footer,s=e.title,l=e.url,f=s.replace(/\s/g,"-"),p=c.text?c.text:i.sprintf(i.gettext("See more %(categoryName)s"),{categoryName:s.toLowerCase()});switch(u){case"collections":t=D.k_;break;case"random-tag":t="".concat(D.Jt).concat(function(e){var t=ae.parse(e,!0).query;return t&&t.tag}(l));break;default:t=D.Ow}var d,h=a===D.Yd,y=h?D.Pn:D.Db,m=o({urlString:c.url});return d=m.isInternal?m.relativeURL:{href:c.url},r.createElement(SA,{addonInstallSource:t,addons:n,className:"Home-".concat(f),footerText:p,footerLink:d,header:s,isHomepageShelf:!0,isTheme:h,key:f,placeholderCount:y})})),r.createElement("div",{className:"HomepageShelves"},t)}));function PA(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function kA(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?PA(Object(n),!0).forEach((function(t){IA(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):PA(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function IA(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var TA=function(e){return Ut(e,{utm_source:D.Pr,utm_medium:D.AT,utm_content:"homepage-secondary-hero"})};const RA=function(e){var t=e._checkInternalURL,n=void 0===t?dn:t,o=e._stripLangFromAmoUrl,i=void 0===o?yn:o,a=e._tracking,u=void 0===a?pr:a,c=e.shelfData;if(null===c)return null;var s=c||{},l=s.headline,f=s.description,p=s.cta,d=c&&c.modules||Array(3).fill({}),h=function(e){u.sendEvent({action:"secondary-hero-click",category:"AMO Secondary Hero Clicks",label:i({urlString:e.currentTarget.href})})},y=function(e){var t={onClick:h};if(e){var r=n({urlString:e.url});return r.isInternal?kA(kA({},t),{},{to:TA(r.relativeURL)}):kA(kA({},t),{},{href:TA(e.url),prependClientApp:!1,prependLang:!1,target:"_blank"})}return{}},m=[];return d.forEach((function(e){m.push(r.createElement("div",{className:"SecondaryHero-module",key:e.description},e.icon?r.createElement("img",{alt:e.description,className:"SecondaryHero-module-icon",src:e.icon}):r.createElement("div",{className:"SecondaryHero-module-icon"}),r.createElement("div",{className:"SecondaryHero-module-description"},e.description||r.createElement(Zp,{width:60})),e.cta&&r.createElement(wc,Object.assign({className:"SecondaryHero-module-link"},y(e.cta)),r.createElement("span",{className:"SecondaryHero-module-linkText"},e.cta&&e.cta.text)),!e.description&&r.createElement("div",{className:"SecondaryHero-module-link"},r.createElement(Zp,{width:60}))))})),r.createElement("section",{className:"SecondaryHero"},r.createElement("div",{className:"SecondaryHero-message"},r.createElement("h2",{className:"SecondaryHero-message-headline"},l||r.createElement(r.Fragment,null,r.createElement(Zp,{width:80}),r.createElement("br",null),r.createElement(Zp,{width:60}))),r.createElement("div",{className:"SecondaryHero-message-description"},f||r.createElement(r.Fragment,null,r.createElement(Zp,{width:80}),r.createElement("br",null),r.createElement(Zp,{width:60}))),p&&r.createElement(wc,Object.assign({className:"SecondaryHero-message-link"},y(p)),r.createElement("span",{className:"SecondaryHero-message-linkText"},p.text)),!l&&r.createElement("div",{className:"SecondaryHero-message-link"},r.createElement(Zp,{width:60}))),m)};function CA(e){return(CA="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function AA(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function NA(e,t){return(NA=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function LA(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=MA(e);if(t){var o=MA(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return DA(this,n)}}function DA(e,t){if(t&&("object"===CA(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function MA(e){return(MA=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var FA=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&NA(e,t)}(a,e);var t,n,o,i=LA(a);function a(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),(t=i.call(this,e)).loadDataIfNeeded(),t}return t=a,(n=[{key:"componentDidUpdate",value:function(){this.loadDataIfNeeded()}},{key:"loadDataIfNeeded",value:function(){var e=this.props,t=e.dispatch,n=e.errorHandler,r=e.isDesktopSite,o=e.isLoading,i=e.resultsLoaded;n.hasError()||(t(qo(D.cs)),i||o||t(function(e){var t=e.errorHandlerId,n=e.isDesktopSite;return ce()(t,"errorHandlerId is required"),{type:_l,payload:{errorHandlerId:t,isDesktopSite:n}}}({errorHandlerId:n.id,isDesktopSite:r})))}},{key:"renderCuratedThemes",value:function(){var e=this.props.i18n,t=[{color:1,slug:"abstract",title:e.gettext("Abstract")},{color:2,slug:"nature",title:e.gettext("Nature")},{color:3,slug:"film-and-tv",title:e.gettext("Film & TV")},{color:4,slug:"scenery",title:e.gettext("Scenery")},{color:5,slug:"music",title:e.gettext("Music")},{color:6,slug:"seasonal",title:e.gettext("Seasonal")}];return r.createElement("ul",{className:"Home-SubjectShelf-list"},t.map((function(e){var t=e.color,n=e.slug,o=e.title;return r.createElement("li",{className:"Home-SubjectShelf-list-item",key:n},r.createElement(wc,{to:{pathname:rh({addonType:D.Yd,slug:n})},className:"Home-SubjectShelf-link"},r.createElement(JC,{name:n,color:t}),r.createElement("span",null,o)))})))}},{key:"renderHeroHeader",value:function(){var e=this.props.homeShelves;return r.createElement("div",{className:"Home-heroHeader"},r.createElement("h2",{className:"Home-heroHeader-title"},e?e.secondary.headline:r.createElement(Zp,null)),r.createElement("h3",{className:"Home-heroHeader-subtitle"},e?e.secondary.description:r.createElement(Zp,null)))}},{key:"render",value:function(){var e=this.props,t=e.errorHandler,n=e.homeShelves,o=e.i18n,i=e.isDesktopSite,a=e.resultsLoaded,u=e.shelves,c=o.gettext("Change the way Firefox looks with\n themes."),s=!1===a;return r.createElement(HO,{isHomePage:!0,showWrongPlatformWarning:!i},r.createElement("div",{className:"Home"},r.createElement(hp,{description:o.gettext("Download Firefox extensions and themes.\n They’re like apps for your browser. They can block annoying ads,\n protect passwords, change browser appearance, and more."),withTwitterMeta:!0}),r.createElement(ep,null),r.createElement("span",{className:"visually-hidden do-not-remove",dangerouslySetInnerHTML:{__html:"\x3c!-- Godzilla of browsers --\x3e"}}),!i&&t.hasError()?r.createElement("div",{className:"Home-noHeroError"},t.renderError()):null,i?r.createElement(hA,{errorHandler:t,shelfData:n?n.primary:void 0}):null,r.createElement("div",{className:"Home-content"},i?r.createElement(RA,{shelfData:n?n.secondary:void 0}):null,i?null:this.renderHeroHeader(),i?r.createElement(jA,{loading:s,shelves:n?n.results:[]}):r.createElement(SA,{addonInstallSource:D.Ow,addons:u.recommendedExtensions,className:"Home-RecommendedExtensions",header:o.gettext("Recommended extensions"),footerText:o.gettext("See more recommended extensions"),footerLink:{pathname:"/search/",query:{addonType:D.Gz,promoted:D.g$,sort:D.wn}},loading:s,placeholderCount:D.Fb}),i?r.createElement(r.Fragment,null,r.createElement(js,{className:"Home-SubjectShelf Home-CuratedThemes",header:c},r.createElement("div",{className:"Home-SubjectShelf-text-wrapper"},r.createElement("h2",{className:"Home-SubjectShelf-subheading"},c)),this.renderCuratedThemes())):null)))}}])&&AA(t.prototype,n),o&&AA(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);FA.propTypes={dispatch:w().func.isRequired,errorHandler:w().object.isRequired,homeShelves:w().object,i18n:w().object.isRequired,isDesktopSite:w().bool,isLoading:w().bool,resultsLoaded:w().bool.isRequired,shelves:w().object};const UA=(0,Mo.qC)((0,g.connect)((function(e){return{homeShelves:e.home.homeShelves,isDesktopSite:e.api.clientApp===D.So,isLoading:e.home.isLoading,resultsLoaded:e.home.resultsLoaded,shelves:e.home.shelves}})),Eu(),ms({id:"Home"}))(FA);function BA(e){return(BA="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function HA(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function qA(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function zA(e,t){return(zA=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function GA(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=VA(e);if(t){var o=VA(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return WA(this,n)}}function WA(e,t){if(t&&("object"===BA(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function VA(e){return(VA=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var YA=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&zA(e,t)}(a,e);var t,n,o,i=GA(a);function a(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),(t=i.call(this,e)).contentForType=function(e){var n,r=t.props.i18n,o=En(e);return{addonType:o,html:(HA(n={},D.Gz,{recommendedHeader:r.gettext("Recommended extensions"),recommendedFooterLink:{pathname:"/search/",query:{addonType:D.Gz,promoted:D.g$,sort:D.wn}},recommendedFooterText:r.gettext("See more recommended extensions"),trendingHeader:r.gettext("Trending extensions"),trendingFooterLink:{pathname:"/search/",query:{addonType:D.Gz,promoted:D.g$,sort:D.Mj}},trendingFooterText:r.gettext("See more trending extensions"),highlyRatedHeader:r.gettext("Top rated extensions"),highlyRatedFooterLink:{pathname:"/search/",query:{addonType:D.Gz,promoted:D.g$,sort:D.kc}},highlyRatedFooterText:r.gettext("See more top rated extensions")}),HA(n,D.Yd,{recommendedHeader:r.gettext("Recommended themes"),recommendedFooterLink:{pathname:"/search/",query:{addonType:D.Yd,promoted:D.g$,sort:D.wn}},recommendedFooterText:r.gettext("See more recommended themes"),trendingHeader:r.gettext("Trending themes"),trendingFooterLink:{pathname:"/search/",query:{addonType:D.Yd,sort:D.Mj}},trendingFooterText:r.gettext("See more trending themes"),highlyRatedHeader:r.gettext("Top rated themes"),highlyRatedFooterLink:{pathname:"/search/",query:{addonType:D.Yd,sort:D.kc}},highlyRatedFooterText:r.gettext("See more top rated themes")}),n)[o]}},t.getLandingDataIfNeeded(),t.setViewContextType(),t}return t=a,(n=[{key:"componentDidUpdate",value:function(){var e=this.props.match.params;ce()(On(e.visibleAddonType),"LandingPage should not be accessible with an invalid addonType"),this.getLandingDataIfNeeded(),this.setViewContextType()}},{key:"getLandingDataIfNeeded",value:function(){var e,t,n,r,o=this.props,i=o.addonTypeOfResults,a=o.dispatch,u=o.errorHandler,c=o.loading,s=o.match.params,l=o.resultsLoaded,f=En(s.visibleAddonType);c||u.hasError()||l&&i===f||a((e={addonType:f,errorHandlerId:u.id},t=e.addonType,n=e.category,r=e.errorHandlerId,ce()(t,"addonType is required"),ce()(r,"errorHandlerId is required"),{type:Ll,payload:{addonType:t,category:n||null,errorHandlerId:r}}))}},{key:"setViewContextType",value:function(){var e=this.props,t=e.context,n=En(e.match.params.visibleAddonType);t!==n&&this.props.dispatch(qo(n))}},{key:"renderIfNotEmpty",value:function(e,t){return 0!==e.length||this.props.loading?t:null}},{key:"getPageDescription",value:function(){var e=this.props,t=e.i18n;return En(e.match.params.visibleAddonType)===D.Yd?t.gettext("Download themes to change how Firefox looks. Tailor\n your experience to your tastes. Cute critters, evil robots, beautiful\n landscapes—thousands of options."):t.gettext("Download Firefox Extensions to add features that\n customize browsing. Protect passwords, find deals, enhance video, and\n block annoying ads with browser apps.")}},{key:"render",value:function(){var e,t,n=this.props,o=n.errorHandler,i=n.recommendedAddons,a=n.highlyRatedAddons,u=n.i18n,c=n.loading,s=n.trendingAddons,l=this.props.match.params.visibleAddonType,f=this.contentForType(l),p=f.addonType,d=f.html,h=(HA(e={},D.Yd,u.gettext("Themes")),HA(e,D.Gz,u.gettext("Extensions")),e),y=(HA(t={},D.Yd,u.gettext("Change your browser's appearance.\n Choose from thousands of themes to give Firefox the look you want.")),HA(t,D.Gz,u.gettext("Explore powerful tools and features\n to customize Firefox and make the browser all your own.")),t),m=D.Yd===p,v=h[p];return r.createElement(HO,null,r.createElement("div",{className:Ho()("LandingPage","LandingPage--".concat(p),{"LandingPage--theme":m})},r.createElement(Ao,null,r.createElement("title",null,v)),r.createElement(hp,{description:this.getPageDescription(),title:v}),r.createElement(ep,null),o.renderErrorIfPresent(),r.createElement("div",{className:"LandingPage-header"},r.createElement("h1",{className:"LandingPage-addonType-name"},h[p]),r.createElement("p",{className:"LandingPage-heading-content"},y[p])),r.createElement(cI,{addonType:p}),r.createElement(Dc,{buttonType:"light",className:"LandingPage-button",to:"/".concat(xn(p),"/categories/")},u.gettext("Explore all categories")),this.renderIfNotEmpty(i,r.createElement(SA,{addonInstallSource:D.Ow,addons:i,className:"RecommendedAddons",footerText:d.recommendedFooterText,footerLink:d.recommendedFooterLink,header:d.recommendedHeader,isTheme:m,loading:c})),this.renderIfNotEmpty(a,r.createElement(SA,{addonInstallSource:D.u,addons:a,className:"HighlyRatedAddons",footerLink:d.highlyRatedFooterLink,footerText:d.highlyRatedFooterText,header:d.highlyRatedHeader,isTheme:m,loading:c})),this.renderIfNotEmpty(s,r.createElement(SA,{addonInstallSource:D.IU,addons:s,className:"TrendingAddons",footerLink:d.trendingFooterLink,footerText:d.trendingFooterText,header:d.trendingHeader,isTheme:m,loading:c}))))}}])&&qA(t.prototype,n),o&&qA(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);YA.propTypes={addonTypeOfResults:w().string,context:w().string.isRequired,dispatch:w().func.isRequired,errorHandler:w().object.isRequired,recommendedAddons:w().array.isRequired,highlyRatedAddons:w().array.isRequired,loading:w().bool.isRequired,trendingAddons:w().array.isRequired,i18n:w().object.isRequired,match:w().shape({params:w().shape({visibleAddonType:w().string.isRequired}).isRequired}).isRequired,resultsLoaded:w().bool.isRequired};const ZA=(0,Mo.qC)((0,g.connect)((function(e){var t=e.landing,n=e.viewContext;return{addonTypeOfResults:t.addonType,context:n.context,recommendedAddons:t.recommended.results,highlyRatedAddons:t.highlyRated.results,loading:t.loading,trendingAddons:t.trending.results,resultsLoaded:t.resultsLoaded&&null===t.category}})),Eu(),ms({id:"LandingPage"}))(YA);var $A=a(73331);function KA(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function QA(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?KA(Object(n),!0).forEach((function(t){XA(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):KA(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function XA(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var JA="FETCH_LANGUAGE_TOOLS",eN="LOAD_LANGUAGE_TOOLS",tN={byID:{},lang:""},nN=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.languageTools;if(!t)throw new Error("languageTools are required");return{type:eN,payload:{languageTools:t}}},rN=function(e){var t=e.languageTools.byID;return Object.keys(t).map((function(e){return t[e]}))},oN=function(e,t){return QA(QA({},e),{},{name:Yi(e.name,t)})};function iN(e){return(iN="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function aN(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function uN(e,t){return(uN=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function cN(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=lN(e);if(t){var o=lN(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return sN(this,n)}}function sN(e,t){if(t&&("object"===iN(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function lN(e){return(lN=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var fN=Object.keys(we).map((function(e){return{english:we[e].English,locale:e,native:we[e].native}})).sort((function(e,t){return e.english.localeCompare(t.english)})),pN=fN.map((function(e){return e.locale})),dN=function(e){var t=e.languageTools;return ce()(t.length,"languageTools should not be empty"),r.createElement("ul",{className:"LanguageTools-addon-list"},t.map((function(e){return r.createElement("li",{key:e.slug},r.createElement(wc,{to:ln(e.slug)},e.name))})))},hN=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&uN(e,t)}(a,e);var t,n,o,i=cN(a);function a(e){var t;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),t=i.call(this,e);var n=e.dispatch,r=e.errorHandler,o=e.languageTools;return n(qo(D.NI)),0===o.length&&n(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).errorHandlerId;if(!e)throw new Error("errorHandlerId is required");return{type:JA,payload:{errorHandlerId:e}}}({errorHandlerId:r.id})),t}return t=a,(n=[{key:"languageToolsInYourLocale",value:function(){var e=this.props,t=e.i18n,n=e.lang,o=e.languageTools.filter((function(e){return e.target_locale===n}));return o&&o.length?r.createElement("div",{className:"LanguageTools-in-your-locale"},r.createElement("h2",{className:"LanguageTools-header"},t.gettext("Available for your locale")),r.createElement("ul",{className:"LanguageTools-in-your-locale-list"},o.map((function(e){return r.createElement("li",{className:"LanguageTools-in-your-locale-list-item",key:e.slug},r.createElement(wc,{className:"LanguageTools-in-your-locale-list-item--".concat(e.type),to:ln(e.slug)},e.name))})))):null}},{key:"render",value:function(){var e=this.props,t=e.languageTools,n=e.errorHandler,o=e.i18n,i=o.gettext("Dictionaries and Language Packs");return r.createElement(HO,null,r.createElement(js,{className:"LanguageTools",header:i},r.createElement(Ao,null,r.createElement("title",null,i)),r.createElement(hp,{description:o.gettext("Download Firefox dictionaries and language\n pack extensions. Add a new language option to your browser\n spell-checker, or change the browser's interface language."),title:i}),r.createElement(ep,null),n.renderErrorIfPresent(),r.createElement("p",null,o.gettext("Installing a dictionary add-on will add a new language\n option to your spell-checker, which checks your spelling as you\n type in Firefox.")),r.createElement("p",null,o.gettext("Language packs change your browser's interface\n language, including menu options and settings.")),this.languageToolsInYourLocale(),r.createElement("h2",{className:"LanguageTools-header"},o.gettext("All Locales")),r.createElement($A.iA,{className:"LanguageTools-table"},r.createElement($A.hr,null,r.createElement($A.Tr,{className:"LanguageTools-header-row"},r.createElement($A.Th,{className:"LanguageTools-header-cell LanguageTool-localeName"},o.gettext("Locale Name")),r.createElement($A.Th,{className:"LanguageTools-header-cell"},o.gettext("Language Packs")),r.createElement($A.Th,{className:"LanguageTools-header-cell"},o.gettext("Dictionaries")))),r.createElement($A.p3,null,t.length?fN.map((function(e){var n=t.filter((function(t){if(pN.includes(t.target_locale))return t.target_locale===e.locale;var n=new RegExp("^".concat(e.locale,"(-\\w+){0,2}$"));return t.target_locale&&n.test(t.target_locale)}));if(!n||!n.length)return null;var o=n.filter((function(e){return e.type===D.jV})),i=n.filter((function(e){return e.type===D.d$}));return r.createElement($A.Tr,{className:Ho()("LanguageTools-table-row","LanguageTools-lang-".concat(e.locale)),key:e.locale},r.createElement($A.Td,null,r.createElement("strong",null,e.english)," ",r.createElement("span",{lang:e.locale},e.native)),r.createElement($A.Td,{className:"LanguageTools-lang-".concat(e.locale,"-languagePacks")},i.length?r.createElement(dN,{languageTools:i}):null),r.createElement($A.Td,{className:"LanguageTools-lang-".concat(e.locale,"-dictionaries")},o.length?r.createElement(dN,{languageTools:o}):null))})):Array.from(Array(50)).map((function(e,t){return r.createElement($A.Tr,{key:"LoadingText-".concat(t)},r.createElement($A.Td,null,r.createElement(Zp,null)),r.createElement($A.Td,null,r.createElement(Zp,null)),r.createElement($A.Td,null,r.createElement(Zp,null)))}))))))}}])&&aN(t.prototype,n),o&&aN(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const yN=(0,Mo.qC)(ms({name:"LanguageTools"}),(0,g.connect)((function(e){return{lang:e.api.lang,languageTools:rN(e)}})),Eu())(hN);function mN(e){return(mN="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function vN(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function gN(e,t){return(gN=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function bN(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=ON(e);if(t){var o=ON(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return wN(this,n)}}function wN(e,t){if(t&&("object"===mN(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function ON(e){return(ON=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var EN=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&gN(e,t)}(a,e);var t,n,o,i=bN(a);function a(e){var t;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),t=i.call(this,e);var n=e.clientApp,r=e.dispatch,o=e.lang,u=rh({addonType:D.Gz,slug:"search-tools"});return r(ik({status:301,url:"/".concat(o,"/").concat(n).concat(u)})),t}return t=a,(n=[{key:"render",value:function(){return r.createElement(jR,null)}}])&&vN(t.prototype,n),o&&vN(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const _N=(0,Mo.qC)(Eu(),(0,g.connect)((function(e){return{clientApp:e.api.clientApp,lang:e.api.lang}})))(EN);function xN(e){return(xN="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function SN(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function jN(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function PN(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function kN(e,t){return(kN=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function IN(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=RN(e);if(t){var o=RN(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return TN(this,n)}}function TN(e,t){if(t&&("object"===xN(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function RN(e){return(RN=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var CN=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&kN(e,t)}(a,e);var t,n,o,i=IN(a);function a(e){var t;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),t=i.call(this,e);var n=e.clientApp,r=e.filters,o=e.lang,u=e.location,c="/search/",s=!1,l=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?SN(Object(n),!0).forEach((function(t){jN(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):SN(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({},r);if(l.category&&l.addonType&&_n(l.addonType)?(c=rh({addonType:l.addonType,slug:l.category}),delete l.addonType,delete l.category,l.sort===D.YM&&delete l.sort,s=!0):l.tag&&(c=ih({tag:l.tag}),delete l.tag,l.sort===D.B2&&delete l.sort,s=!0),u.query.platform&&(s=!0),u.query.atype){switch(String(u.query.atype)){case"1":l.addonType=D.Gz;break;case"3":l.addonType=D.jV;break;case"5":l.addonType=D.d$;break;default:return TN(t)}s=!0}if(s){var f=Zt(Tt(l));e.dispatch(ik({status:301,url:"/".concat(o,"/").concat(n).concat(c).concat(f)}))}return t}return t=a,(n=[{key:"render",value:function(){var e=this.props.filters;return r.createElement(HO,null,r.createElement(dT,{filters:e,paginationQueryParams:Tt(e)}))}}])&&PN(t.prototype,n),o&&PN(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const AN=(0,Mo.qC)((0,g.connect)((function(e,t){var n=Rt(t.location.query);return{filters:Nt(n),clientApp:e.api.clientApp,lang:e.api.lang}})))(CN);function NN(e){return(NN="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var LN=["location"];function DN(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function MN(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function FN(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function UN(e,t){return(UN=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function BN(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=qN(e);if(t){var o=qN(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return HN(this,n)}}function HN(e,t){if(t&&("object"===NN(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function qN(e){return(qN=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var zN=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&UN(e,t)}(a,e);var t,n,o,i=BN(a);function a(){return MN(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"computeQueryString",value:function(){var e=this.props.location,t=e.query,n=e.search,r=Number(t.page_e),o=Number(t.page_t);1===r&&(r=null),1===o&&(o=null);var i="";return r&&o?i=r>o?"?page_e=".concat(r):r<o||n.indexOf("page_e")>n.indexOf("page_t")?"?page_t=".concat(o):"?page_e=".concat(r):r?i="?page_e=".concat(r):o&&(i="?page_t=".concat(o)),i}},{key:"render",value:function(){var e=this.props,t=(e.location,DN(e,LN)),n=this.computeQueryString();return r.createElement(r.Fragment,null,r.createElement(Ao,null,r.createElement("title",null,t.title)),r.createElement(hp,Object.assign({},t,{queryString:n})),r.createElement(ep,{queryString:n}))}}])&&FN(t.prototype,n),o&&FN(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const GN=(0,g.connect)((function(e){return{location:e.router.location}}))(zN);function WN(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function VN(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?WN(Object(n),!0).forEach((function(t){YN(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):WN(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function YN(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var ZN="ABORT_USER_ABUSE_REPORT",$N="HIDE_USER_ABUSE_REPORT_UI",KN="LOAD_USER_ABUSE_REPORT",QN="SEND_USER_ABUSE_REPORT",XN="SHOW_USER_ABUSE_REPORT_UI";function JN(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.userId;return ce()(t,"userId is required"),{type:ZN,payload:{userId:t}}}function eL(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.userId;return ce()(t,"userId is required"),{type:$N,payload:{userId:t}}}function tL(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.message,n=e.reporter,r=e.userId;ce()(t,"message is required"),ce()(void 0!==n,"reporter cannot be undefined"),ce()(r,"userId is required");var o=n?n.id:null;return{type:KN,payload:{message:t,reportedByUserId:o,userId:r}}}function nL(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.errorHandlerId,n=e.message,r=e.userId;return ce()(t,"errorHandlerId is required"),ce()(n,"message is required"),ce()(r,"userId is required"),{type:QN,payload:{errorHandlerId:t,message:n,userId:r}}}function rL(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.userId;return ce()(t,"userId is required"),{type:XN,payload:{userId:t}}}var oL={byUserId:{}};function iL(e){return(iL="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function aL(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function uL(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function cL(e,t){return(cL=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function sL(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=fL(e);if(t){var o=fL(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return lL(this,n)}}function lL(e,t){if(t&&("object"===iL(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function fL(e){return(fL=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var pL=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&cL(e,t)}(a,e);var t,n,o,i=sL(a);function a(){var e;aL(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).hideReportUI=function(){var t=e.props,n=t.dispatch,r=t.user;r&&n(eL({userId:r.id}))},e.sendReport=function(t){var n=e.props,r=n.dispatch,o=n.errorHandler,i=n.user;i&&r(nL({errorHandlerId:o.id,message:t.text,userId:i.id}))},e.showReportUI=function(){var t=e.props,n=t.dispatch,r=t.user;r&&n(rL({userId:r.id}))},e}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.className,n=e.errorHandler,o=e.hasSubmitted,i=e.i18n,a=e.isSubmitting,u=e.uiVisible,c=e.user;return r.createElement("div",{className:Ho()("ReportUserAbuse",t,{"ReportUserAbuse--is-expanded":u})},n.renderErrorIfPresent(),!u&&!o&&r.createElement(Dc,{buttonType:"neutral",className:"ReportUserAbuse-show-more",disabled:!c,onClick:this.showReportUI,puffy:!0},i.gettext("Report this user for abuse")),!o&&r.createElement("div",{className:"ReportUserAbuse-form"},r.createElement("h2",{className:"ReportUserAbuse-header"},i.gettext("Report this user for abuse")),r.createElement("p",{dangerouslySetInnerHTML:vn(i.sprintf(i.gettext("If you think this user is violating\n %(linkTagStart)sMozilla's Add-on Policies%(linkTagEnd)s,\n please report this user to Mozilla."),{linkTagStart:'<a href="https://developer.mozilla.org/en-US/Add-ons/AMO/Policy/Reviews">',linkTagEnd:"</a>"}),["a"])}),r.createElement("p",null,i.gettext("Please don't use this form to report bugs or contact this\n user; your report will only be sent to Mozilla and not\n to this user.")),r.createElement(Zh,{id:"".concat(Tn("src/amo/components/ReportUserAbuse/index.js"),"-").concat(String(c&&c.id)),isSubmitting:a,onDismiss:this.hideReportUI,onSubmit:this.sendReport,placeholder:i.gettext("Explain how this user is violating our policies."),submitButtonText:i.gettext("Send abuse report"),submitButtonInProgressText:i.gettext("Sending abuse report")})),o&&r.createElement("div",{className:"ReportUserAbuse--report-sent"},r.createElement("h3",{className:"ReportUserAbuse-header"},i.gettext("You reported this user for abuse")),r.createElement("p",null,i.gettext("We have received your report. Thanks for letting us know about\n your concerns with this user.")),r.createElement("p",null,i.gettext("We can't respond to every abuse report but we'll look into\n this issue."))))}}])&&uL(t.prototype,n),o&&uL(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const dL=(0,Mo.qC)((0,g.connect)((function(e,t){var n=t.user&&e.userAbuseReports.byUserId[t.user.id]?e.userAbuseReports.byUserId[t.user.id]:{};return{hasSubmitted:n.hasSubmitted||!1,isSubmitting:n.isSubmitting||!1,uiVisible:n.uiVisible||!1}})),Eu(),ms({id:"ReportUserAbuse"}))(pL);const hL=function(e){var t=e.altText,n=e.className,o=e.preview,i=e.user,a=Ho()("UserAvatar",n),u=o&&o.length?o:null;return i&&!u&&(u=i.picture_url?i.picture_url:null),r.createElement("div",{className:a},u?r.createElement("img",{alt:t,className:"UserAvatar-image",src:u}):r.createElement(ac,{name:"anonymous-user"}))};function yL(e){return(yL="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function mL(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function vL(e,t){return(vL=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function gL(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=wL(e);if(t){var o=wL(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return bL(this,n)}}function bL(e,t){if(t&&("object"===yL(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function wL(e){return(wL=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var OL=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&vL(e,t)}(a,e);var t,n,o,i=gL(a);function a(e){var t;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),t=i.call(this,e);var n=e.clientApp,r=e.dispatch,o=e.errorHandler,u=e.isOwner,c=e.lang,s=e.location,l=e.match.params,f=e.reviews,p=e.shouldRedirect,d=e.user;return r(qo(D.cs)),p&&d?(r(ik({status:301,url:"/".concat(c,"/").concat(n,"/user/").concat(d.id,"/")})),bL(t)):o.hasError()?(L.Z.warn("Not loading data because of an error."),bL(t)):(d?u&&!f&&r(Ei({errorHandlerId:o.id,page:t.getReviewsPage(s),userId:d.id})):r(Ge({errorHandlerId:o.id,userId:l.userId})),t)}return t=a,(n=[{key:"componentDidUpdate",value:function(e){var t=e.location,n=e.match.params,r=this.props,o=r.dispatch,i=r.errorHandler,a=r.isOwner,u=r.location,c=r.match.params,s=r.reviews,l=r.user;n.userId!==c.userId?o(Ge({errorHandlerId:i.id,userId:Number(c.userId)})):!l||!a||t.query.page===u.query.page&&s||o(Ei({errorHandlerId:i.id,page:this.getReviewsPage(u),userId:l.id}))}},{key:"getUserId",value:function(){var e=this.props,t=e.match.params,n=e.user;return n?n.id:t.userId}},{key:"getURL",value:function(){return"/user/".concat(this.getUserId(),"/")}},{key:"getEditURL",value:function(){var e=this.props,t=e.currentUser,n=e.match.params;return ce()(t,"currentUser is required"),String(t.id)===n.userId?"/users/edit":"".concat(this.getURL(),"edit/")}},{key:"getReviewsPage",value:function(e){return e.query&&e.query.page||"1"}},{key:"renderReviews",value:function(){var e=this.props,t=e.location,n=e.i18n,o=e.isOwner,i=e.pageSize,a=e.reviews,u=e.reviewCount;if(!o||!a||a.length<1)return null;var c=u&&i&&u>Number(i)?r.createElement(ym,{LinkComponent:wc,count:u,currentPage:this.getReviewsPage(t),pathname:this.getURL(),perPage:Number(i),queryParams:t.query}):null;return r.createElement(xy,{className:"UserProfile-reviews",footer:c,header:n.gettext("My reviews")},r.createElement("ul",null,a.map((function(e){return r.createElement("li",{key:String(e.id)},r.createElement(cP,{review:e,shortByLine:!0,siteUserCanReply:!1}))}))))}},{key:"getMetaDescription",value:function(){var e,t=this.props,n=t.i18n,r=t.user;if(!r)return null;if(r.is_addon_developer&&r.is_artist)e=n.gettext("The profile of %(user)s, a Firefox extension\n and theme author. Find other apps by %(user)s, including average\n ratings, tenure, and the option to report issues.");else if(r.is_addon_developer)e=n.gettext("The profile of %(user)s, Firefox extension\n author. Find other extensions by %(user)s, including average ratings,\n tenure, and the option to report issues.");else{if(!r.is_artist)return null;e=n.gettext("The profile of %(user)s, Firefox theme\n author. Find other themes by %(user)s, including average ratings,\n tenure, and the option to report issues.")}return n.sprintf(e,{user:r.name})}},{key:"render",value:function(){var e,t=this.props,n=t.canAdminUser,o=t.canEditProfile,i=t.errorHandler,a=t.i18n,u=t.isOwner,c=t.user;if(i.hasError()){if(L.Z.warn("Captured API Error: ".concat(i.capturedError.messages)),404===i.capturedError.responseStatusCode)return r.createElement(jR,null);e=i.renderError()}var s=r.createElement("div",{className:"UserProfile-header"},r.createElement(hL,{className:"UserProfile-avatar",user:c,altText:a.gettext("User Avatar")}),c&&Je(c)&&r.createElement("div",{className:"UserProfile-tags"},c.is_addon_developer&&r.createElement("p",{className:"UserProfile-developer"},a.gettext("Add-ons developer"),r.createElement(ac,{name:"developer"})),c.is_artist&&r.createElement("p",{className:"UserProfile-artist"},a.gettext("Theme artist"),r.createElement(ac,{name:"artist"}))),r.createElement("h1",{className:"UserProfile-name"},c?c.name:r.createElement(Zp,null))),l=c?a.sprintf(a.gettext("User Profile for %(user)s"),{user:c.name}):a.gettext("User Profile");return r.createElement(HO,{errorHandler:i},r.createElement("div",{className:"UserProfile"},r.createElement(GN,{title:l,description:this.getMetaDescription()}),e,r.createElement("div",{className:"UserProfile-wrapper"},r.createElement(js,{className:"UserProfile-user-info",header:s},r.createElement(jd,{className:"UserProfile-dl"},c&&c.homepage?r.createElement(Sd,{className:"UserProfile-homepage",term:a.gettext("Homepage")},r.createElement("a",{href:c.homepage},a.gettext("Homepage"))):null,c&&c.location?r.createElement(Sd,{className:"UserProfile-location",term:a.gettext("Location")},c.location):null,c&&c.occupation?r.createElement(Sd,{className:"UserProfile-occupation",term:a.gettext("Occupation")},c.occupation):null,r.createElement(Sd,{className:"UserProfile-user-since",term:a.gettext("User since")},c?a.moment(c.created).format("ll"):r.createElement(Zp,null)),r.createElement(Sd,{className:"UserProfile-number-of-addons",term:a.gettext("Number of add-ons")},c?c.num_addons_listed:r.createElement(Zp,null)),r.createElement(Sd,{className:"UserProfile-rating-average",term:a.gettext("Average rating of developer’s add-ons")},c?r.createElement(id,{rating:c.average_addon_rating,readOnly:!0,styleSize:"small"}):r.createElement(Zp,null)),c&&c.biography&&c.biography.length?r.createElement(Sd,{className:"UserProfile-biography",term:a.gettext("Biography")},r.createElement("div",{dangerouslySetInnerHTML:bn(c.biography)})):null),!u&&r.createElement(dL,{className:"UserProfile-abuse-button",user:c}),o?r.createElement(Dc,{className:"UserProfile-edit-link",buttonType:"neutral",to:this.getEditURL(),puffy:!0},a.gettext("Edit profile")):null,n&&c?r.createElement(Dc,{className:"UserProfile-admin-link",buttonType:"neutral",href:"/admin/models/users/userprofile/".concat(c.id,"/"),puffy:!0},a.gettext("Admin user")):null),r.createElement("div",{className:"UserProfile-addons-and-reviews"},r.createElement(Sm,{addonType:D.Gz,authorDisplayName:c?c.name:null,authorIds:c?[c.id]:null,errorHandler:i,numberOfAddons:10,pageParam:"page_e",paginate:!0,pathname:this.getURL(),showMore:!1,showSummary:!0,type:"vertical"}),r.createElement(Sm,{addonType:D.Yd,authorDisplayName:c?c.name:null,authorIds:c?[c.id]:null,errorHandler:i,numberOfAddons:12,pageParam:"page_t",paginate:!0,pathname:this.getURL(),showMore:!1}),this.renderReviews()))))}}])&&mL(t.prototype,n),o&&mL(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const EL=(0,Mo.qC)((0,g.connect)((function(e,t){var n=t.match.params,r=e.api,o=r.clientApp,i=r.lang,a=!1,u=!1,c=null,s=!1,l=null,f=!1,p=null;if(/^\d+$/.test(n.userId)){var d=Number(n.userId);p=Qe(e.users,d)||null,s=(c=Xe(e.users))&&c.id===d,u=c&&(c.id===d||et(e,D.Ai)),a=c&&p&&et(e,D.Ai),l=function(e,t){var n=e.byUserId[t];return n?{pageSize:n.pageSize,reviewCount:n.reviewCount,reviews:Np({reviews:n.reviews,state:e})}:null}(e.reviews,d)}else{var h=n.userId;p=function(e,t){return ce()(t,"username is required"),e.byID[e.byUsername[t.toLowerCase()]]}(e.users,h),f=!0}return{canAdminUser:a,canEditProfile:u,clientApp:o,currentUser:c,isOwner:s,lang:i,pageSize:l?l.pageSize:null,reviewCount:l?l.reviewCount:null,reviews:l?l.reviews:null,shouldRedirect:f,user:p}})),Eu(),gs({fileName:"src/amo/pages/UserProfile/index.js",extractId:function(e){return e.match.params.userId}}))(OL);var _L,xL=function(e,t){switch(t){case"announcements":return e.gettext("stay up-to-date with news and events relevant to\n add-on developers (including the about:addons newsletter)");case"individual_contact":return e.gettext("Mozilla needs to contact me about my individual\n add-on");case"new_features":return e.gettext("new add-ons or Firefox features are available");case"new_review":return e.gettext("someone writes a review of my add-on");case"reply":return e.gettext("an add-on developer replies to my review");case"reviewer_reviewed":return e.gettext("my add-on is reviewed by a reviewer");case"upgrade_fail":return e.gettext("my add-on's compatibility cannot be upgraded");case"upgrade_success":return e.gettext("my add-on's compatibility is upgraded successfully");default:return null}};function SL(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function jL(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?SL(Object(n),!0).forEach((function(t){PL(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):SL(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function PL(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var kL=function(t){var n,o,i=t.enabled,a=t.label,u=t.mandatory,c=t.name,s=t.onChange;return a?r.createElement("p",{className:Ho()("UserProfileEditNotification",{"UserProfileEditNotification--disabled":u}),key:c},r.createElement("label",{htmlFor:c},r.createElement("input",{className:"UserProfileEditNotification-input",defaultChecked:i,disabled:u,id:c,name:c,onChange:s,type:"checkbox"}),r.createElement("span",{className:"UserProfileEditNotification-checkbox"}),a)):(L.Z.warn((0,e.f9)(_L||(n=['Not rendering notification "','" because there is no\n corresponding label.'],o||(o=n.slice(0)),_L=Object.freeze(Object.defineProperties(n,{raw:{value:Object.freeze(o)}}))),c)),null)};const IL=(0,Mo.qC)(Eu())((function(e){var t=e.i18n,n=e.onChange,o=e.user,i=[];if(o&&o.notifications)i=o.notifications.map((function(e){return kL(jL(jL({},e),{},{label:xL(t,e.name),onChange:n}))}));else for(var a=0;a<2;a++){var u="loading-notification-".concat(a);i.push(kL({name:u,mandatory:!0,enabled:!1,label:r.createElement(Zp,null)}))}return r.createElement("div",{className:"UserProfileEditNotifications"},i)}));function TL(e){return(TL="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function RL(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function CL(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function AL(e,t){return(AL=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function NL(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=DL(e);if(t){var o=DL(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return LL(this,n)}}function LL(e,t){if(t&&("object"===TL(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function DL(e){return(DL=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var ML=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&AL(e,t)}(a,e);var t,n,o,i=NL(a);function a(){var e;RL(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).onFocus=function(){e.props.setUIState({hasFocus:!0})},e.onBlur=function(){e.props.setUIState({hasFocus:!1})},e}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.i18n,n=e.name,o=e.onDelete,i=e.onSelect,a=e.preview,u=e.uiState,c=e.user,s=c?t.sprintf(t.gettext("Profile picture for %(name)s"),{name:c.name}):null,l="UserProfileEditPicture-delete-button";return r.createElement("section",{className:"UserProfileEditPicture"},r.createElement("label",{className:"UserProfileEdit--label",htmlFor:n},t.gettext("Profile photo")),r.createElement(hL,{altText:s,preview:a,user:c}),r.createElement("label",{className:Ho()("UserProfileEditPicture-file",{"UserProfileEditPicture-file--has-focus":u.hasFocus}),htmlFor:n},r.createElement("input",{accept:"image/png, image/jpeg",className:"UserProfileEditPicture-file-input",disabled:!c,id:n,name:n,onBlur:this.onBlur,onChange:i,onFocus:this.onFocus,type:"file"}),r.createElement(Dc,{buttonType:"action",className:"UserProfileEditPicture-select-button",disabled:!c,noLink:!0,puffy:!0},t.gettext("Choose Photo…"))),c&&c.picture_url&&r.createElement(LR,{buttonType:"cancel",className:l,htmlType:"button",id:l,message:t.gettext("Do you really want to delete this picture?"),onConfirm:o},t.gettext("Delete This Picture")))}}])&&CL(t.prototype,n),o&&CL(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const FL=(0,Mo.qC)(Eu(),Bu({extractId:function(){return""},fileName:"src/amo/components/UserProfileEditPicture/index.js",initialState:{hasFocus:!1}}))(ML);a(76511);var UL={backspace:8,del:46,delete:46,tab:9,enter:13,return:13,esc:27,space:32,pageUp:33,pageDown:34,end:35,home:36,left:37,up:38,right:39,down:40,";":186,"=":187,",":188,"-":189,".":190,"/":191,"`":192,"[":219,"\\":220,"]":221};Object.keys(UL).forEach((function(e){return UL[e.toUpperCase()]=UL[e]})),"0123456789".split("").forEach((function(e,t){return UL[e]=t+48})),"ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("").forEach((function(e,t){UL[e]=t+65,UL[e.toLowerCase()]=t+65})),[1,2,3,4,5,6,7,8,9,10,11,12].forEach((function(e,t){return UL["f"+t]=111+t}));var BL={control:"ctrl",ctrl:"ctrl",shift:"shift",meta:"meta",cmd:"meta",command:"meta",option:"alt",alt:"alt"},HL=Symbol("ALL_KEYS"),qL=Symbol("ALL_PRINTABLE_KEYS");const zL=UL;var GL=Object.keys(BL);const WL=function(e){var t=e.keySet,n=e.event,r=t.key,o=t.modifiers,i=void 0===o?[]:o,a=void 0;if(a=r===HL,r===qL)if(n.key)a=1===n.key.length;else{var u=String.fromCharCode(n.charCode);a="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ~!@#$%^&*()-_+=[]\\{}|;':\",./<>?£".indexOf(u)>=0}if(r===n.which){var c=GL.filter((function(e){return n[e+"Key"]})).sort();a=i.length===c.length&&i.every((function(e,t){return c[t]===e}))}return a};const VL=function(e){return e.map((function(e){var t={key:e};if("string"==typeof e){var n=e.toLowerCase().trim(),r=n.split(/\s?\+\s?/);t=1===r.length?{key:zL[n]}:{key:zL[r.pop()],modifiers:r.map((function(e){return BL[e]})).sort()}}return t}))};var YL=1;var ZL=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,o=!1,i=void 0;try{for(var a,u=e[Symbol.iterator]();!(r=(a=u.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{!r&&u.return&&u.return()}finally{if(o)throw i}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")};var $L=new Map,KL=new Set;function QL(e){var t=[].concat(e);t.length?(KL.delete(null),t.forEach((function(e){KL.delete(e),KL.add(e)}))):KL.add(null)}function XL(e){if(!KL.has(null)){var t=function(t){return WL({keySet:t,event:e})},n=!0,r=!1,o=void 0;try{for(var i,a=[].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}(KL)).reverse()[Symbol.iterator]();!(n=(i=a.next()).done);n=!0){var u=i.value,c=JL(u.constructor.prototype),s=!0,l=!1,f=void 0;try{for(var p,d=c[Symbol.iterator]();!(s=(p=d.next()).done);s=!0){var h=ZL(p.value,2),y=h[0],m=h[1];if(y.some(t))return{fn:m,instance:u}}}catch(e){l=!0,f=e}finally{try{!s&&d.return&&d.return()}finally{if(l)throw f}}}}catch(e){r=!0,o=e}finally{try{!n&&a.return&&a.return()}finally{if(r)throw o}}}return null}function JL(e){var t=e.__reactKeydownUUID;return $L.get(t)}function eD(e){var t=e.keys,n=e.fn,r=e.target,o=VL(t),i=r.__reactKeydownUUID;i?$L.get(i).set(o,n):(r.__reactKeydownUUID="uid-"+YL++,$L.set(r.__reactKeydownUUID,new Map([[o,n]])))}const tD={bindFocusables:function(e,t){if(document.querySelectorAll)try{var n=o.findDOMNode(e);if(n){var r=n.querySelectorAll("a[href], button, input, object, select, textarea, [tabindex]");if(r.length){Array.prototype.slice.call(r).forEach((function(n){return n.onfocus=function(n){var r=n.onfocus;return function(o){t(e),r&&r.call(n,o)}}(n)}))}}}catch(e){}},findContainerNodes:function(e){return function(t,n){try{var r=o.findDOMNode(n);r&&(r===e||r.contains(e))&&t.push({instance:n,node:r})}finally{return t}}},sortByDOMPosition:function(e,t){return 10===e.node.compareDocumentPosition(t.node)?1:-1}};var nD=!1,rD=!1;const oD={bindKeys:function(e){rD||(document.addEventListener("keydown",e),rD=!0)},unbindKeys:function(e){rD&&(document.removeEventListener("keydown",e),rD=!1)},bindClicks:function(e){nD||(document.addEventListener("click",e,!0),nD=!0)},unbindClicks:function(e){nD&&(document.removeEventListener("click",e,!0),nD=!1)}};function iD(e){var t=e.target;QL([].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}(KL)).reduce(tD.findContainerNodes(t),[]).sort(tD.sortByDOMPosition).map((function(e){return e.instance})))}function aD(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(t||uD(e)){var n=XL(e)||{},r=n.fn,o=n.instance;if(r)return r.call(o,e),!0}return!1}function uD(e){var t=e.ctrlKey,n=e.target;return t||!~["INPUT","SELECT","TEXTAREA"].indexOf(n.tagName)&&(!n.getAttribute||"textbox"!==n.getAttribute("role"))}function cD(e){QL(e),oD.bindKeys(aD),oD.bindClicks(iD),tD.bindFocusables(e,QL)}function sD(e){var t;t=e,KL.delete(t),KL.size||(oD.unbindClicks(iD),oD.unbindKeys(aD))}var lD=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},fD=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();function pD(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function dD(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function hD(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}const yD=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:HL,n=function(t){function n(e){pD(this,n);var t=dD(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,e));return t.state={event:null},t}return hD(n,t),fD(n,[{key:"componentDidMount",value:function(){cD(this)}},{key:"componentWillUnmount",value:function(){sD(this)}},{key:"handleKeyDown",value:function(e){var t=this;this.setState({event:e},(function(){return t.setState({event:null})}))}},{key:"render",value:function(){return r.createElement(e,lD({},this.props,{keydown:this.state}))}}]),n}(r.Component);return eD({keys:[].concat(t),fn:n.prototype.handleKeyDown,target:n.prototype}),n};var mD="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};function vD(e){return e&&"object"===(void 0===e?"undefined":mD(e))&&e.nativeEvent instanceof window.KeyboardEvent&&"keydown"===e.type}const gD=function(e){var t=e.target,n=e.descriptor,r=e.keys,o=n.value;if(!JL(t)){var i=t.componentDidMount,a=t.componentWillUnmount;t.componentDidMount=function(){if(cD(this),i)return i.call(this)},t.componentWillUnmount=function(){if(sD(this),a)return a.call(this)}}return eD({keys:r,target:t,fn:o}),n.value=function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];var r=t[0];if(vD(r)){if(!r.ctrlKey)return aD(r,!0)}else if(!(r&&r instanceof window.KeyboardEvent&&"keydown"===r.type))return o.call.apply(o,[this].concat(t))},n};var bD="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};function wD(){}function OD(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];var o=n[0],i=Array.isArray(o);if(i||~["string","number","symbol"].indexOf(void 0===o?"undefined":bD(o))){var a=i?o:n;return function(t,n,r){return n?e({target:t,descriptor:r,keys:a}):yD(t,a)}}var u=n[0],c=n[1];return u&&!c?yD.apply(void 0,n):wD}const ED=function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return OD.apply(void 0,[gD].concat(t))};function _D(e){return(_D="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function xD(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function SD(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function jD(e,t){return(jD=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function PD(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=ID(e);if(t){var o=ID(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return kD(this,n)}}function kD(e,t){if(t&&("object"===_D(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function ID(e){return(ID=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var TD=zL.ESC,RD=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&jD(e,t)}(a,e);var t,n,o,i=PD(a);function a(){var e;xD(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).onClickBackground=function(t){t.preventDefault(),e.props.onEscapeOverlay&&e.props.onEscapeOverlay(),e.hide()},e.hide=function(){e.props.setUIState({visible:!1})},e}return t=a,(n=[{key:"componentDidMount",value:function(){var e=this.props.visibleOnLoad;this.props.setUIState({visible:e})}},{key:"componentDidUpdate",value:function(e){var t=e.uiState,n=this.props,r=n.visibleOnLoad,o=n.keydown;o&&o.event&&this.onClickBackground(o.event),void 0!==r&&r!==t.visible&&this.props.setUIState({visible:r})}},{key:"render",value:function(){var e=this.props,t=e.children,n=e.className,o=e.id,i=e.uiState;return ce()(t,"The children property is required"),ce()(o,"The id property is required"),r.createElement("div",{className:Ho()("Overlay",n,{"Overlay--visible":i.visible})},r.createElement("div",{className:"Overlay-background",onClick:this.onClickBackground,role:"presentation"}),r.createElement("div",{className:"Overlay-contents"},t))}}])&&SD(t.prototype,n),o&&SD(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);RD.defaultProps={visibleOnLoad:!1};const CD=(0,Mo.qC)(Bu({fileName:"src/amo/components/Overlay/index.js",extractId:function(e){return e.id},initialState:{visible:!1}}),ED(TD))(RD);function AD(e){return(AD="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function ND(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function LD(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function DD(e,t){return(DD=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function MD(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=UD(e);if(t){var o=UD(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return FD(this,n)}}function FD(e,t){if(t&&("object"===AD(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function UD(e){return(UD=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var BD=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&DD(e,t)}(a,e);var t,n,o,i=MD(a);function a(){return ND(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.children,n=e.className,o=e.header,i=e.id,a=e.footerLink,u=e.footerText,c=e.visibleOnLoad;return r.createElement(CD,{onEscapeOverlay:this.props.onEscapeOverlay,id:i,visibleOnLoad:c},r.createElement(js,{className:Ho()("OverlayCard",n),header:o,footerLink:a,footerText:u},t))}}])&&LD(t.prototype,n),o&&LD(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);BD.propTypes={children:w().node,className:w().string,header:w().node,id:w().string.isRequired,footerLink:w().node,footerText:w().node,onEscapeOverlay:w().func,visibleOnLoad:w().bool},BD.defaultProps={visibleOnLoad:!1};function HD(e){return(HD="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function qD(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function zD(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?qD(Object(n),!0).forEach((function(t){GD(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):qD(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function GD(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function WD(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function VD(e,t){return(VD=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function YD(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=$D(e);if(t){var o=$D(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return ZD(this,n)}}function ZD(e,t){if(t&&("object"===HD(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function $D(e){return($D=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var KD=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&VD(e,t)}(a,e);var t,n,o,i=YD(a);function a(e){var t;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),(t=i.call(this,e)).onDeleteProfile=function(e){e.preventDefault(),t.setState({showProfileDeletionModal:!0})},t.onCancelProfileDeletion=function(e){e&&e.preventDefault(),t.setState({showProfileDeletionModal:!1})},t.onConfirmProfileDeletion=function(e){e.preventDefault();var n=t.props,r=n.clientApp,o=n.currentUser,i=n.dispatch,a=n.errorHandler,u=n.history,c=n.lang,s=n.user;ce()(o,"currentUser is required"),ce()(s,"user is required"),i(function(e){var t=e.errorHandlerId,n=e.userId;return ce()(t,"errorHandlerId is required"),ce()(n,"userId is required"),{type:Fe,payload:{errorHandlerId:t,userId:n}}}({errorHandlerId:a.id,userId:s.id})),o.id===s.id&&i(Ze()),u.push("/".concat(c,"/").concat(r))},t.onPictureLoaded=function(e){var n=e.target.result;t.setState({pictureData:n})},t.onPictureChange=function(e){e.preventDefault();var n=e.currentTarget.files;if(n&&n[0]){var r=n[0];t.loadPicture(r),t.setState({picture:r,successMessage:null})}},t.onNotificationChange=function(e){e.stopPropagation();var n=e.currentTarget,r=n.name,o=n.checked;t.setState((function(e){return{notifications:zD(zD({},e.notifications),{},GD({},r,o)),successMessage:null}}))},t.onPictureDelete=function(e){e.preventDefault();var n=t.props,r=n.dispatch,o=n.errorHandler,i=n.user;ce()(i,"user is required"),r(function(e){var t=e.errorHandlerId,n=e.userId;return{type:Le,payload:{errorHandlerId:t,userId:n}}}({errorHandlerId:o.id,userId:i.id}))},t.onFieldChange=function(e){var n;e.preventDefault();var r=e.currentTarget,o=r.name,i=r.value;t.setState((GD(n={},o,i),GD(n,"successMessage",null),n))},t.onSubmit=function(e){e.preventDefault();var n=t.props,r=n.dispatch,o=n.errorHandler,i=n.user,a=t.state,u=a.biography,c=a.displayName,s=a.homepage,l=a.location,f=a.notifications,p=a.occupation,d=a.picture,h=a.pictureData;ce()(i,"user is required"),r(function(e){var t=e.errorHandlerId,n=e.notifications,r=e.picture,o=e.pictureData,i=e.userFields,a=e.userId;return ce()(t,"errorHandlerId is required"),ce()(n,"notifications are required"),ce()(i,"userFields are required"),ce()(a,"userId is required"),ce()(void 0!==r,"picture is required"),r&&ce()(o,"pictureData is required when picture is present"),{type:Te,payload:{errorHandlerId:t,notifications:n,picture:r,pictureData:o,userFields:i,userId:a}}}({errorHandlerId:o.id,notifications:f,picture:d,pictureData:h,userFields:{biography:u,display_name:c,homepage:s,location:l,occupation:p},userId:i.id}))},t.loadPicture=function(e){var n=new FileReader;n.onload=t.onPictureLoaded,n.readAsDataURL(e)};var n=e.dispatch,r=e.errorHandler,o=e.userId,u=e.user;return t.state=zD({showProfileDeletionModal:!1,pictureData:null,successMessage:null},t.getFormValues(u)),n(qo(D.cs)),r.hasError()?(L.Z.warn("Not loading data because of an error."),ZD(t)):(!u&&o&&n(Ge({errorHandlerId:r.id,userId:o})),(!u&&o||u&&!u.notifications)&&n($e({errorHandlerId:r.id,userId:o})),t)}return t=a,(n=[{key:"componentDidUpdate",value:function(e,t){var n=e.isUpdating,r=e.user,o=e.userId,i=this.props,a=i.clientApp,u=i.currentUser,c=i.dispatch,s=i.errorHandler,l=i.i18n,f=i.isUpdating,p=i.lang,d=i.location,h=i.user,y=i.userId;if(u){if(o!==y?(!h&&y&&c(Ge({errorHandlerId:s.id,userId:y})),(!h&&y||h&&!h.notifications)&&c($e({errorHandlerId:s.id,userId:h?h.id:y})),this.setState(zD(zD({},this.getFormValues(h)),{},{pictureData:null,successMessage:null}))):r&&r.picture_url&&h&&!h.picture_url&&this.setState({picture:null,pictureData:null,successMessage:l.gettext("Picture successfully deleted")}),n&&!f&&!s.hasError()){var m=d.query.to;if(m&&"string"==typeof m&&!m.startsWith("//")){m.startsWith("/")||(m="/".concat(m));try{return void this.props._window.location.assign(m)}catch(e){L.Z.warn("Error redirecting to location: ".concat(m,": ").concat(e))}}this.props._window.location.assign("/".concat(p,"/").concat(a,"/user/").concat(y,"/"))}(!e.errorHandler.hasError()&&this.props.errorHandler.hasError()||!t.successMessage&&this.state.successMessage)&&this.props._window.scroll(0,0)}}},{key:"componentWillUnmount",value:function(){this.props.errorHandler.clear()}},{key:"getFormValues",value:function(e){var t={biography:"",displayName:"",homepage:"",location:"",notifications:{},occupation:"",picture:null};if(!e)return t;var n=e.biography,r=e.display_name,o=e.homepage,i=e.location,a=e.occupation;return zD(zD({},t),{},{biography:n,displayName:r,homepage:o,location:i,occupation:a})}},{key:"preventSubmit",value:function(){var e=this.props,t=e.user,n=e.isUpdating,r=this.state.displayName;return!t||n||!r||r&&""===r.trim()}},{key:"renderProfileAside",value:function(){var e=this.props,t=e.user,n=e.i18n,o=e.isEditingCurrentUser;return t?o?n.gettext("Tell users a bit more information about yourself. Most\n fields are optional, but they'll help other users get to know you\n better."):n.sprintf(n.gettext("Tell users a bit more information about this user.\n Most fields are optional, but they'll help other users get to know\n %(userName)s better."),{userName:t.name}):[r.createElement(Zp,{key:"profile-aside-1",width:100}),r.createElement(Zp,{key:"profile-aside-2",width:80})]}},{key:"renderBiographyLabel",value:function(){var e=this.props,t=e.user,n=e.i18n,o=e.isEditingCurrentUser;return t?o?n.gettext("Introduce yourself to the community if you like"):n.sprintf(n.gettext("Introduce %(userName)s to the community"),{userName:t.name}):r.createElement(Zp,null)}},{key:"render",value:function(){var e,t,n=this.props,o=n.currentUser,i=n.errorHandler,a=n.hasEditPermission,u=n.i18n,c=n.isEditingCurrentUser,s=n.isUpdating,l=n.user,f=n.userId;if(o){if(i.hasError()){if(L.Z.warn("Captured API Error: ".concat(i.capturedError.messages)),404===i.capturedError.responseStatusCode)return r.createElement(jR,null);t=i.renderError()}if(l&&!a)return r.createElement(jR,null)}else e=r.createElement("div",{className:"UserProfileEdit"},r.createElement(js,{className:"UserProfileEdit-authenticate"},r.createElement(Ew,{noIcon:!0,logInText:u.gettext("Log in to edit the profile")})));var p=s?u.gettext("Creating your profile…"):u.gettext("Create My Profile");l&&l.display_name&&(p=c?s?u.gettext("Updating your profile…"):u.gettext("Update My Profile"):s?u.gettext("Updating profile…"):u.gettext("Update Profile"));var d="/user/".concat(f,"/"),h="UserProfileEdit-deletion-modal";return r.createElement(HO,null,e||r.createElement("div",{className:"UserProfileEdit"},l&&r.createElement(Ao,null,r.createElement("title",null,u.sprintf(u.gettext("User Profile for %(user)s"),{user:l.name}))),r.createElement(js,{className:"UserProfileEdit-user-links"},r.createElement("ul",null,r.createElement("li",null,r.createElement(wc,{to:d},c?u.gettext("View My Profile"):u.gettext("View user's profile"))),r.createElement("li",null,c?u.gettext("Edit My Profile"):u.gettext("Edit user's profile")))),r.createElement("form",{className:"UserProfileEdit-form",onSubmit:this.onSubmit},r.createElement("div",{className:"UserProfileEdit-form-messages"},t,this.state.successMessage&&r.createElement(Jc,{type:"success"},this.state.successMessage)),r.createElement("div",null,r.createElement(js,{className:"UserProfileEdit--Card",header:c||!l?u.gettext("Account"):u.sprintf(u.gettext("Account for %(userName)s"),{userName:l.name})},r.createElement("div",null,r.createElement("label",{className:"UserProfileEdit--label",htmlFor:"email"},u.gettext("Email Address")),r.createElement("input",{className:"UserProfileEdit-email",id:"email",value:l&&l.email,disabled:!0,onChange:this.onFieldChange,title:u.gettext("Email address cannot be changed here"),type:"email"}),c&&r.createElement("p",{className:"UserProfileEdit-email--help",dangerouslySetInnerHTML:vn(u.sprintf(u.gettext("You can change your email address on\n Firefox Accounts. %(startLink)sNeed help?%(endLink)s"),{startLink:'<a href="https://support.mozilla.org/kb/change-primary-email-address-firefox-accounts">',endLink:"</a>"}),["a"])}),c&&l&&l.fxa_edit_email_url&&r.createElement("a",{href:l.fxa_edit_email_url,className:"UserProfileEdit-manage-account-link"},u.gettext("Manage Firefox Accounts…")))),r.createElement(js,{className:"UserProfileEdit--Card",header:u.gettext("Profile")},r.createElement("p",{className:"UserProfileEdit-profile-aside"},this.renderProfileAside()),r.createElement("label",{className:"UserProfileEdit--label",htmlFor:"displayName",title:u.gettext("This field is required")},u.gettext("Display Name *")),r.createElement("input",{className:"UserProfileEdit-displayName",disabled:!l,id:"displayName",name:"displayName",onChange:this.onFieldChange,value:this.state.displayName}),r.createElement("label",{className:"UserProfileEdit--label",htmlFor:"homepage"},u.gettext("Homepage")),r.createElement("input",{className:"UserProfileEdit-homepage",disabled:!l,id:"homepage",name:"homepage",onChange:this.onFieldChange,type:"url",value:this.state.homepage}),r.createElement("p",{className:"UserProfileEdit-homepage--help"},u.gettext("This URL will only be visible for users who are\n developers.")),r.createElement("label",{className:"UserProfileEdit--label",htmlFor:"location"},u.gettext("Location")),r.createElement("input",{className:"UserProfileEdit-location",disabled:!l,id:"location",name:"location",onChange:this.onFieldChange,value:this.state.location}),r.createElement("label",{className:"UserProfileEdit--label",htmlFor:"occupation"},u.gettext("Occupation")),r.createElement("input",{className:"UserProfileEdit-occupation",disabled:!l,id:"occupation",name:"occupation",onChange:this.onFieldChange,value:this.state.occupation}),r.createElement(FL,{name:"picture",onDelete:this.onPictureDelete,onSelect:this.onPictureChange,preview:this.state.pictureData,user:l})),r.createElement(js,{className:"UserProfileEdit--Card",header:u.gettext("Biography")},r.createElement("label",{className:"UserProfileEdit--label",htmlFor:"biography"},this.renderBiographyLabel()),r.createElement(Ih,{className:"UserProfileEdit-biography",disabled:!l,id:"biography",name:"biography",onChange:this.onFieldChange,value:this.state.biography||""}),r.createElement("p",{className:"UserProfileEdit-biography--help"},u.sprintf(u.gettext("Some HTML supported: %(htmlTags)s. Links are forbidden."),{htmlTags:["<abbr title>","<acronym title>","<b>","<blockquote>","<code>","<em>","<i>","<li>","<ol>","<strong>","<ul>"].join(" ")}))),r.createElement(js,{className:"UserProfileEdit--Card",header:u.gettext("Notifications")},r.createElement("p",{className:"UserProfileEdit-notifications-aside"},c?u.gettext("From time to time, Mozilla may send you email about\n upcoming releases and add-on events. Please select the\n topics you are interested in."):u.gettext("From time to time, Mozilla may send this user email\n about upcoming releases and add-on events. Please select\n the topics this user may be interested in.")),r.createElement(IL,{key:l&&l.id,onChange:this.onNotificationChange,user:l}),c&&Je(l)&&r.createElement("p",{className:"UserProfileEdit-notifications--help"},u.gettext("Mozilla reserves the right to contact you\n individually about specific concerns with your hosted\n add-ons."))),r.createElement("div",{className:"UserProfileEdit-buttons-wrapper"},r.createElement(Dc,{buttonType:"action",className:"UserProfileEdit-submit-button UserProfileEdit-button",disabled:this.preventSubmit(),puffy:!0,type:"submit"},p),r.createElement(Dc,{buttonType:"alert",className:"UserProfileEdit-button UserProfileEdit-delete-button",disabled:!l,onClick:this.onDeleteProfile,puffy:!0,type:"button"},c?u.gettext("Delete My Profile"):u.gettext("Delete Profile"))))),this.state.showProfileDeletionModal&&r.createElement(BD,{onEscapeOverlay:this.onCancelProfileDeletion,className:h,header:c?u.gettext("IMPORTANT: Deleting your Firefox Add-ons profile is irreversible."):u.gettext("IMPORTANT: Deleting this Firefox Add-ons profile is irreversible."),id:h,visibleOnLoad:!0},r.createElement("p",null,c?u.gettext("Your data will be permanently removed, including\n profile details (picture, user name, display name,\n location, home page, biography, occupation), notification\n preferences, reviews, and collections."):u.gettext("The user’s data will be permanently removed, including\n profile details (picture, user name, display name,\n location, home page, biography, occupation), notification\n preferences, reviews, and collections.")),r.createElement("p",null,c?u.gettext("If you authored any add-ons they will also be deleted,\n unless you share ownership with other authors. In that\n case, you will be removed as an author and the remaining\n authors will maintain ownership of the add-on."):u.gettext("If the user authored any add-ons they will also be\n deleted, unless ownership is shared with other authors. In\n that case, the user will be removed as an author and the\n remaining authors will maintain ownership of the add-on.")),c&&r.createElement("p",null,u.gettext("When you use this email address to log in again to\n addons.mozilla.org, your profile on Firefox Add-ons will\n not have access to any of its previous content.")),r.createElement("div",{className:"UserProfileEdit-buttons-wrapper"},r.createElement(Dc,{buttonType:"alert",className:"UserProfileEdit-button UserProfileEdit-confirm-button",onClick:this.onConfirmProfileDeletion,puffy:!0},c?u.gettext("Delete My Profile"):u.gettext("Delete Profile")),r.createElement(Dc,{buttonType:"cancel",className:"UserProfileEdit-button UserProfileEdit-cancel-button",onClick:this.onCancelProfileDeletion},u.gettext("Cancel"))))))}}])&&WD(t.prototype,n),o&&WD(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);KD.defaultProps={_window:"undefined"!=typeof window?window:{}};const QD=(0,Mo.qC)((0,g.connect)((function(e,t){var n=e.api,r=n.clientApp,o=n.lang,i=t.match.params,a=Number(i.userId),u=Xe(e.users),c=i.userId?Qe(e.users,a):u,s=Boolean(u&&c&&u.id===c.id);return u&&et(e,D.Ai)&&(s=!0),{clientApp:r,currentUser:u,hasEditPermission:s,isEditingCurrentUser:!(!u||!c)&&u.id===c.id,isUpdating:e.users.isUpdating,lang:o,user:c,userId:c?c.id:a}})),Eu(),gs({fileName:"src/amo/pages/UserProfileEdit/index.js",extractId:function(e){return e.match.params.userId}}))(KD);function XD(e){return(XD="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function JD(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function eM(e,t){return(eM=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function tM(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=rM(e);if(t){var o=rM(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return nM(this,n)}}function nM(e,t){if(t&&("object"===XD(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function rM(e){return(rM=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var oM=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&eM(e,t)}(a,e);var t,n,o,i=tM(a);function a(e){var t;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),t=i.call(this,e);var n=e.dispatch,r=e.errorHandler,o=e.match,u=e.isUnsubscribed,c=o.params,s=c.hash,l=c.notificationName,f=c.token;return void 0===u&&n(function(e){var t=e.errorHandlerId,n=e.hash,r=e.notification,o=e.token;return ce()(t,"errorHandlerId is required"),ce()(n,"hash is required"),ce()(r,"notification is required"),ce()(o,"token is required"),{type:Be,payload:{errorHandlerId:t,hash:n,notification:r,token:o}}}({errorHandlerId:r.id,hash:s,notification:l,token:f})),t}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.errorHandler,n=e.i18n,o=e.isUnsubscribed,i=e.match.params,a=i.token,u=i.notificationName,c=ie({text:n.gettext("You can edit your notification settings by %(linkStart)sediting your profile%(linkEnd)s."),replacements:[["linkStart","linkEnd",function(e){return r.createElement(wc,{key:"edit-profile",to:"/users/edit"},e)}]]});return r.createElement(HO,null,r.createElement("div",{className:"UsersUnsubscribe"},r.createElement(Ao,null,r.createElement("title",null,n.gettext("Unsubscribe"))),t.hasError()?t.renderError():r.createElement(js,{header:o?n.gettext("You are successfully unsubscribed!"):r.createElement(Zp,null)},o?r.createElement("p",{className:"UsersUnsubscribe-content-explanation",dangerouslySetInnerHTML:vn(n.sprintf(n.gettext("The email address %(strongStart)s%(email)s%(strongEnd)s\n will no longer get messages when:"),{strongStart:"<strong>",strongEnd:"</strong>",email:(0,uv.Jx)(a)}),["strong"])}):r.createElement("p",{className:"UsersUnsubscribe-content-explanation"},r.createElement(Zp,{minWidth:40})),r.createElement("blockquote",{className:"UsersUnsubscribe-content-notification"},o?xL(n,u):r.createElement(Zp,{minWidth:40})),r.createElement("p",{className:"UsersUnsubscribe-content-edit-profile"},o?c:r.createElement(Zp,null)))))}}])&&JD(t.prototype,n),o&&JD(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const iM=(0,Mo.qC)((0,g.connect)((function(e,t){var n=t.match.params,r=n.hash,o=n.notificationName,i=n.token;return{isUnsubscribed:at(e.users,r,o,i)}})),Eu(),gs({fileName:"src/amo/pages/UsersUnsubscribe/index.js",extractId:function(e){var t=e.match.params,n=t.hash,r=t.notificationName,o=t.token;return it({hash:n,notification:r,token:o})}}))(oM);function aM(e){return(aM="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function uM(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function cM(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function sM(e,t){return(sM=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function lM(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=pM(e);if(t){var o=pM(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return fM(this,n)}}function fM(e,t){if(t&&("object"===aM(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function pM(e){return(pM=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var dM=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&sM(e,t)}(a,e);var t,n,o,i=lM(a);function a(){return uM(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.i18n,n=e.status;return r.createElement(Do(),{code:n},r.createElement("div",{className:"ErrorPage NotFound"},r.createElement("h1",null,t.gettext("Page not found")),r.createElement("p",null,t.gettext("Sorry, but we can't find anything at the URL you entered.")),r.createElement("p",null,t.sprintf(t.gettext("Error code: %(status)s."),{status:n}))))}}])&&cM(t.prototype,n),o&&cM(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);dM.propTypes={i18n:w().object.isRequired,status:w().number},dM.defaultProps={status:404};const hM=(0,Mo.qC)(Eu())(dM);function yM(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=n._config,i=void 0===o?t.Z:o;if(!e)throw new TypeError("configKey cannot be empty");return function(t){return function(n){return i.get(e)?r.createElement(t,n):(L.Z.debug("config.".concat(e," was false; not rendering ").concat(Rn(t))),r.createElement(hM,null))}}}function mM(e){return(mM="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function vM(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function gM(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function bM(e,t){return(bM=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function wM(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=EM(e);if(t){var o=EM(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return OM(this,n)}}function OM(e,t){if(t&&("object"===mM(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function EM(e){return(EM=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var _M=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&bM(e,t)}(a,e);var t,n,o,i=wM(a);function a(){return vM(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){return L.Z.info("Simulating an asynchronous error"),setTimeout((function(){throw new Error("This is a simulated asynchronous error")}),50),r.createElement("p",null,"Asynchronous error simulated, check the logs")}}])&&gM(t.prototype,n),o&&gM(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const xM=(0,Mo.qC)(yM("allowErrorSimulation"))(_M);function SM(e){return(SM="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function jM(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function PM(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function kM(e,t){return(kM=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function IM(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=RM(e);if(t){var o=RM(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return TM(this,n)}}function TM(e,t){if(t&&("object"===SM(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function RM(e){return(RM=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var CM=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&kM(e,t)}(i,e);var t,n,r,o=IM(i);function i(){return jM(this,i),o.apply(this,arguments)}return t=i,(n=[{key:"render",value:function(){throw L.Z.info("Simulating a synchronous error"),new Error("This is a simulated synchronous error")}}])&&PM(t.prototype,n),r&&PM(t,r),Object.defineProperty(t,"prototype",{writable:!1}),i}(r.Component);const AM=(0,Mo.qC)(yM("allowErrorSimulation"))(CM);const NM=function(e){var t=e.title,n=e.metaDescription,o=e.children;return r.createElement(HO,{showWrongPlatformWarning:!1},r.createElement(js,{className:"StaticPage",header:t},r.createElement(Ao,null,r.createElement("title",null,t)),r.createElement(hp,{description:n,title:t}),r.createElement(ep,null),r.createElement("div",{className:"StaticPage-content"},o)))};function LM(e){return(LM="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function DM(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function MM(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function FM(e,t){return(FM=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function UM(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=HM(e);if(t){var o=HM(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return BM(this,n)}}function BM(e,t){if(t&&("object"===LM(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function HM(e){return(HM=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var qM=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&FM(e,t)}(a,e);var t,n,o,i=UM(a);function a(){return DM(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props.i18n;return r.createElement(NM,{title:e.gettext("About Firefox Add-ons"),metaDescription:e.gettext("The official Mozilla site for downloading\n Firefox extensions and themes. Add new features and change the\n browser’s appearance to customize your web experience.")},r.createElement(r.Fragment,null,r.createElement("div",{id:"about"},r.createElement("p",null,e.gettext("Addons.mozilla.org (AMO), is Mozilla's official site\n for discovering and installing add-ons for the Firefox browser.\n Add-ons help you modify and personalize your browsing experience\n by adding new features to Firefox, enhancing your interactions\n with Web content, and changing the way your browser looks.")),r.createElement("p",{dangerouslySetInnerHTML:vn(e.sprintf(e.gettext("If you are looking for add-ons for Thunderbird or SeaMonkey, please visit\n %(startTBLink)saddons.thunderbird.net%(endTBLink)s or\n %(startSMLink)saddons.thunderbird.net/seamonkey%(endSMLink)s."),{startTBLink:'<a href="https://addons.thunderbird.net/thunderbird/">',endTBLink:"</a>",startSMLink:'<a href="https://addons.thunderbird.net/seamonkey/">',endSMLink:"</a>"}),["a"])})),r.createElement("section",null,r.createElement("h2",null,e.gettext("A community of creators")),r.createElement("p",null,e.gettext("The add-ons listed here are created by\n thousands of developers and theme designers from all over the\n world, ranging from individual hobbyists to large corporations.\n Some add-ons listed on AMO have been automatically published\n and may be subject to review by a team of editors once\n publicly listed."))),r.createElement("section",null,r.createElement("h2",null,e.gettext("Get involved")),r.createElement("p",null,e.gettext("Mozilla is a non-profit champion of the Internet, we\n build Firefox to help keep it healthy, open and accessible. Add-ons\n support user choice and customization in Firefox, and you can\n contribute in the following ways:")),r.createElement("ul",null,r.createElement("li",{dangerouslySetInnerHTML:vn(e.sprintf(e.gettext("%(startLink)sMake your own add-on%(endLink)s.\n We provide free hosting and update services and can help you\n reach a large audience of users."),{startLink:'<a href="https://addons.mozilla.org/developers/">',endLink:"</a>"}),["a"])}),r.createElement("li",{dangerouslySetInnerHTML:vn(e.sprintf(e.gettext("Help improve this website. It's open source, and you\n can file bugs and submit patches. You can get started with a\n %(startGoodFirstBugLink)sgood first bug%(endGoodFirstBugLink)s\n or view all open issues for AMO’s\n %(startAddonsServerRepoLink)sserver%(endAddonsServerRepoLink)s and\n %(startAddonsFrontendRepoLink)sfrontend%(endAddonsFrontendRepoLink)s\n on Github."),{startGoodFirstBugLink:'<a href="https://github.com/search?l=&q=repo:mozilla/addons+repo:mozilla/addons-frontend+repo:mozilla/addons-linter+repo:mozilla/addons-server+label:%22contrib:+good+first+bug%22&ref=advsearch&state=open&type=Issues">',endGoodFirstBugLink:"</a>",startAddonsServerRepoLink:'<a href="https://github.com/mozilla/addons-server/issues">',endAddonsServerRepoLink:"</a>",startAddonsFrontendRepoLink:'<a href="https://github.com/mozilla/addons-frontend/issues">',endAddonsFrontendRepoLink:"</a>"}),["a"])}),r.createElement("li",{dangerouslySetInnerHTML:vn(e.sprintf(e.gettext("Want to interact with addons.mozilla.org\n (AMO) programmatically? Check out the\n %(startAddonsServerDocumentation)sAdd-ons Servers\n documentation%(endAddonsServerDocumentation)s for details\n about the APIs used by AMO and the\n %(startAddonsManager)sAdd-ons\n Manager%(endAddonsManager)s."),{startAddonsServerDocumentation:'<a href="https://addons-server.readthedocs.io/en/latest/index.html">',endAddonsServerDocumentation:"</a>",startAddonsManager:'<a href="https://blog.mozilla.org/firefox/add-ons-manager/">',endAddonsManager:"</a>"}),["a"])})),r.createElement("p",null,e.gettext("If you want to contribute but are not quite as technical, there are still ways to help:")),r.createElement("ul",null,r.createElement("li",{dangerouslySetInnerHTML:vn(e.sprintf(e.gettext("Participate in our %(startLink)sforum%(endLink)s."),{startLink:'<a href="https://discourse.mozilla-community.org/c/add-ons">',endLink:"</a>"}),["a"])}),r.createElement("li",null,e.gettext("Leave feedback for your favorite add-ons. Add-on authors are more likely\n to improve their add-ons and create new ones when they know people appreciate their\n work.")),r.createElement("li",null,e.gettext("Tell your friends and family that Firefox is a fast, secure browser\n that protects their privacy, and they can use add-ons to make it their own!"))),r.createElement("p",{dangerouslySetInnerHTML:vn(e.sprintf(e.gettext("To see more ways you can contribute to the add-on community, please visit our %(startLink)swiki%(endLink)s."),{startLink:'<a href="https://wiki.mozilla.org/Add-ons/Contribute">',endLink:"</a>"}),["a"])})),r.createElement("section",null,r.createElement("h2",{id:"reportIssue"},e.gettext("Report an issue")),r.createElement("p",{dangerouslySetInnerHTML:vn(e.sprintf(e.gettext("If you find a problem with the site, we'd love to fix it.\n Please file an %(startIssueLink)sissue%(endIssueLink)s and include as much\n detail as possible."),{startIssueLink:'<a href="https://github.com/mozilla/addons/issues/new">',endIssueLink:"</a>"}),["a"])}),r.createElement("p",{dangerouslySetInnerHTML:vn(e.sprintf(e.gettext("To report a security vulnerability for an extension, even if it is not\n hosted on this site, please file an %(startSecIssueLink)sissue%(endSecIssueLink)s\n on Bugzilla or email %(startMailLink)samo-admins@mozilla.com%(endMailLink)s.\n All security vulnerability reports are %(startLink)sconfidential%(endLink)s."),{startSecIssueLink:'<a href="https://bugzilla.mozilla.org/enter_bug.cgi?product=addons.mozilla.org&component=Add-on%20Security&maketemplate=Add-on%20Security%20Bug&bit-23=1&rep_platform=All&op_sys=All" rel="nofollow">',endSecIssueLink:"</a>",startMailLink:'<a href="mailto:amo-admins@mozilla.com">',endMailLink:"</a>",startLink:'<a href="https://www.mozilla.org/en-US/about/governance/policies/security-group/bugs/" rel="nofollow">',endLink:"</a>"}),["a"])})),r.createElement("section",null,r.createElement("h2",null,e.gettext("Get support")),r.createElement("p",{dangerouslySetInnerHTML:vn(e.sprintf(e.gettext("If you would like to learn more about how to manage add-ons in\n Firefox, or need to find general Firefox support, please visit\n %(startSUMOLink)sSupport%(endSUMOLink)s\n Mozilla. If you don't find an answer there, you can\n %(startForumLink)sask on our community forum%(endForumLink)s."),{startSUMOLink:'<a href="https://support.mozilla.org/products/firefox/manage-preferences-and-add-ons-firefox/install-and-manage-add-ons">',endSUMOLink:"</a>",startForumLink:'<a href="https://discourse.mozilla-community.org/c/add-ons">',endForumLink:"</a>"}),["a"])}),r.createElement("p",{dangerouslySetInnerHTML:vn(e.sprintf(e.gettext("%(startLink)sInformation about how to contact Mozilla's add-ons team can be found here%(endLink)s."),{startLink:'<a href="https://wiki.mozilla.org/Add-ons#Getting_in_touch">',endLink:"</a>"}),["a"])}))))}}])&&MM(t.prototype,n),o&&MM(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const zM=Eu()(qM);function GM(e){return(GM="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function WM(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function VM(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function YM(e,t){return(YM=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function ZM(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=KM(e);if(t){var o=KM(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return $M(this,n)}}function $M(e,t){if(t&&("object"===GM(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function KM(e){return(KM=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var QM=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&YM(e,t)}(a,e);var t,n,o,i=ZM(a);function a(){return WM(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props.i18n;return r.createElement(NM,{title:e.gettext("Review Guidelines"),metaDescription:e.gettext("\n Guidelines, tips, and Frequently Asked Questions to leave a review for the extensions and\n themes you’ve downloaded and used on Firefox.\n ")},r.createElement(r.Fragment,null,r.createElement("section",{id:"review-guide"},r.createElement("p",null,e.gettext("Add-on reviews are a way for you to share your opinions\n about the add-ons you’ve installed and used. Our review moderation\n team reserves the right to refuse or remove any review that does not\n comply with these guidelines.")),r.createElement("h2",null,e.gettext("Tips for writing a great review")),r.createElement("h3",null,e.gettext("Do:")),r.createElement("ul",null,r.createElement("li",null,e.gettext("Write like you are telling a friend about your experience with the add-on.")),r.createElement("li",null,e.gettext("Keep reviews concise and easy to understand.")),r.createElement("li",null,e.gettext("Give specific and helpful details. For example:"),r.createElement("ul",null,r.createElement("li",null,e.gettext("Did the add-on work as you expected it to?")),r.createElement("li",null,e.gettext("What features did you like or dislike?")),r.createElement("li",null,e.gettext("Was it useful?")),r.createElement("li",null,e.gettext("Was it easy to use?")),r.createElement("li",null,e.gettext("Will you continue to use this add-on?")))),r.createElement("li",null,e.gettext("Take a moment to read your review before submitting it to minimize typos."))),r.createElement("h3",null,e.gettext("Don't:")),r.createElement("ul",null,r.createElement("li",null,e.gettext('Submit one-word reviews such as "Great!", "wonderful," or "bad".')),r.createElement("li",null,e.gettext('Post technical issues, support requests, or feature suggestions. Use\n the available support options for each add-on, if available. You can find them in\n the "More information" section in the sidebar on the add-on\'s detail page.')),r.createElement("li",null,e.gettext("Write reviews for add-ons which you have not personally used.")),r.createElement("li",null,e.gettext("Use profanity, sexual language or language that can be construed as hateful.")),r.createElement("li",null,e.gettext("Include HTML, links, source code or code snippets. Reviews are meant to be text only.")),r.createElement("li",null,e.gettext("Make false statements, disparage add-on authors or personally insult them.")),r.createElement("li",null,e.gettext("Include your own or anyone else’s email, phone number, or other personal details.")),r.createElement("li",null,e.gettext("Post reviews for an add-on you or your organization wrote or represent.")),r.createElement("li",null,e.gettext("Criticize an add-on for something it’s intended to do. For example,\n leaving a negative review of an add-on for displaying ads or requiring data\n gathering, when that is the intended purpose of the add-on, or the add-on\n requires gathering data to function.")))),r.createElement("section",null,r.createElement("h2",null,e.gettext("Frequently Asked Questions about Reviews")),r.createElement("h3",null,e.gettext("How can I report a problematic review?")),r.createElement("p",null,e.gettext('Please report or flag any questionable reviews by clicking the\n "Report this review" and it will be submitted to the site for moderation. Our\n moderation team will use the Review Guidelines to evaluate whether or not to\n delete the review or restore it back to the site.')),r.createElement("h3",null,e.gettext("I'm an add-on author, can I respond to reviews?")),r.createElement("p",{dangerouslySetInnerHTML:vn(e.sprintf(e.gettext("Yes, add-on authors can provide a single response to a review.\n You can set up a discussion topic in our %(startLink)sforum%(endLink)s to engage in additional\n discussion or follow-up."),{startLink:'<a href="https://discourse.mozilla-community.org/c/add-ons/add-on-support">',endLink:"</a>"}),["a"])}),r.createElement("h3",null,e.gettext("I'm an add-on author, can I delete unfavorable reviews or ratings?")),r.createElement("p",null,e.gettext('In general, no. But if the review did not meet the review guidelines\n outlined above, you can click "Report this review" and have it moderated. If a review\n included a complaint that is no longer valid due to a new release of your add-on, we\n may consider deleting the review.')))))}}])&&VM(t.prototype,n),o&&VM(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const XM=Eu()(QM);function JM(e){return(JM="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function eF(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function tF(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?eF(Object(n),!0).forEach((function(t){nF(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):eF(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function nF(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function rF(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function oF(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function iF(e,t){return(iF=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function aF(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=cF(e);if(t){var o=cF(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return uF(this,n)}}function uF(e,t){if(t&&("object"===JM(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function cF(e){return(cF=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var sF=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&iF(e,t)}(a,e);var t,n,o,i=aF(a);function a(){return rF(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"getPageTitle",value:function(e){var t=this.props.i18n;return t.sprintf(t.gettext("Add-ons tagged with %(tag)s"),{tag:e})}},{key:"render",value:function(){var e=this.props,t=e.filters,n=e.match.params.tag,o=tF(tF({},t),{},{tag:n,sort:t.sort||D.B2});return r.createElement(HO,null,r.createElement(ep,null),r.createElement(dT,{filters:o,pageTitle:this.getPageTitle(n),paginationQueryParams:Tt(t),pathname:ih({tag:n})}))}}])&&oF(t.prototype,n),o&&oF(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const lF=(0,Mo.qC)((0,g.connect)((function(e){var t=Rt(e.router.location.query);return{filters:Nt(t)}})),Eu())(sF);const fF=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e._config,o=void 0===n?t.Z:n;return r.createElement(Fo,null,r.createElement(Uo,{exact:!0,path:"/:lang/about",component:zM}),r.createElement(Uo,{exact:!0,path:"/:lang/review_guide",component:XM}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/",component:UA}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/addon/:slug/",component:yk}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/blocked-addon/:guid/:versionId?/",component:XC}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/addon/:addonSlug/reviews/:reviewId",component:Wk}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/addon/:addonSlug/reviews/",component:Wk}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/addon/:slug/privacy/",component:function(e){return r.createElement(Pk,Object.assign({},e,{infoType:Sk}))}}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/addon/:slug/eula/",component:function(e){return r.createElement(Pk,Object.assign({},e,{infoType:xk}))}}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/addon/:slug/license/",component:function(e){return r.createElement(Pk,Object.assign({},e,{infoType:_k}))}}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/addon/:slug/versions/",component:eI}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/users/edit",component:QD}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/user/:userId/edit/",component:QD}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/user/:userId/",component:EL}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/collections/:userId/:slug/",component:VR}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/collections/",component:rC}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/collections/add/",component:function(e){return r.createElement(VR,Object.assign({},e,{creating:!0}))}}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/collections/:userId/:slug/edit/",component:YR}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/:visibleAddonType(extensions|themes)/categories/",component:vI}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/:visibleAddonType(extensions|themes)/category/:categorySlug/",component:xT}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/tag/:tag/",component:lF}),r.createElement(Uo,{exact:!0,path:"/:lang/android/language-tools/",component:jR}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox)/language-tools/",component:yN}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/search-tools/",component:_N}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/search/",component:AN}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/401/",component:o.get("isDevelopment")?EC:jR}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/404/",component:jR}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/451/",component:_C}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/500/",component:o.get("isDevelopment")?AC:jR}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/simulate-async-error/",component:function(){return r.createElement(HO,{showWrongPlatformWarning:!1},r.createElement(xM,null))}}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/simulate-sync-error/",component:function(){return r.createElement(HO,{showWrongPlatformWarning:!1},r.createElement(AM,null))}}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/:visibleAddonType(extensions|themes)/",component:ZA}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/users/unsubscribe/:token/:hash/:notificationName/",component:iM}),r.createElement(Uo,{component:jR}))};function pF(e){return(pF="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function dF(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function hF(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function yF(e,t){return(yF=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function mF(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=gF(e);if(t){var o=gF(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return vF(this,n)}}function vF(e,t){if(t&&("object"===pF(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function gF(e){return(gF=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var bF=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&yF(e,t)}(i,e);var t,n,r,o=mF(i);function i(){return dF(this,i),o.apply(this,arguments)}return t=i,(n=[{key:"componentDidUpdate",value:function(e){var t=this.props,n=t._window,r=t.location;!n||r.pathname===e.location.pathname&&r.search===e.location.search||n.scrollTo(0,0)}},{key:"render",value:function(){return this.props.children||null}}])&&hF(t.prototype,n),r&&hF(t,r),Object.defineProperty(t,"prototype",{writable:!1}),i}(r.Component);bF.defaultProps={_window:"undefined"!=typeof window?window:null};const wF=No(bF);function OF(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function EF(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?OF(Object(n),!0).forEach((function(t){_F(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):OF(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function _F(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var xF="LOAD_ERROR_PAGE",SF={clearOnNext:!1,error:null,hasError:!1,statusCode:null};function jF(e){return(jF="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function PF(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function kF(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function IF(e,t){return(IF=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function TF(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=CF(e);if(t){var o=CF(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return RF(this,n)}}function RF(e,t){if(t&&("object"===jF(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function CF(e){return(CF=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var AF=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&IF(e,t)}(a,e);var t,n,o,i=TF(a);function a(){return PF(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"componentDidCatch",value:function(e,t){(0,this.props.dispatch)(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).error;if(!e)throw new Error("error is required");return{type:xF,payload:{error:e}}}({error:e})),L.Z.error("Caught application error:",e,t)}},{key:"render",value:function(){var e=this.props,t=e.children,n=e.errorPage;if(n.hasError){var o=function(e){switch(e){case 401:return EC;case 404:return jR;case 500:default:return AC}}(n.statusCode);return r.createElement(o,null)}return t}}])&&kF(t.prototype,n),o&&kF(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const NF=(0,Mo.qC)((0,g.connect)((function(e){return{errorPage:e.errorPage}})))(AF);function LF(e){return(LF="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function DF(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function MF(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?DF(Object(n),!0).forEach((function(t){FF(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):DF(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function FF(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function UF(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function BF(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function HF(e,t){return(HF=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function qF(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=GF(e);if(t){var o=GF(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return zF(this,n)}}function zF(e,t){if(t&&("object"===LF(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function GF(e){return(GF=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var WF=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&HF(e,t)}(u,e);var n,o,i,a=qF(u);function u(){return UF(this,u),a.apply(this,arguments)}return n=u,(o=[{key:"componentDidMount",value:function(){var e=this.props,t=e._addChangeListeners,n=e._navigator,r=e.handleGlobalEvent,o=e.mozAddonManager,i=e.setUserAgent,a=e.userAgent;t(r,o),!a&&n&&n.userAgent&&(L.Z.info("userAgent not in state on App load; using navigator.userAgent."),i(n.userAgent))}},{key:"componentDidUpdate",value:function(){var e,n,r=this.props,o=r.clientApp,i=r.location,a=r.setClientApp,u=(e=i.pathname,{lang:(n=e.split("?")[0].replace(/^\//,"").split("/"))[0],clientApp:n[1]}).clientApp;(function(e){var n=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{})._config;return(void 0===n?t.Z:n).get("validClientApplications").includes(e)})(u)&&u!==o&&a(u)}},{key:"render",value:function(){var e=this.props,t=e.clientApp,n=e.i18n,o={locale:e.lang},i=n.sprintf(n.gettext("Add-ons for Firefox (%(locale)s)"),o),a=n.sprintf(n.gettext("%(title)s – Add-ons for Firefox (%(locale)s)"),MF(MF({},o),{},{title:"%s"}));return t===D.wZ&&(i=n.sprintf(n.gettext("Add-ons for Firefox Android (%(locale)s)"),o),a=n.sprintf(n.gettext("%(title)s – Add-ons for Firefox Android (%(locale)s)"),MF(MF({},o),{},{title:"%s"}))),r.createElement(Do(),{code:200},r.createElement(wF,null,r.createElement(Ao,{defaultTitle:i,titleTemplate:a}),r.createElement(NF,null,r.createElement(fF,null))))}}])&&BF(n.prototype,o),i&&BF(n,i),Object.defineProperty(n,"prototype",{writable:!1}),u}(r.Component);WF.defaultProps={_addChangeListeners:bv.addChangeListeners,_navigator:"undefined"!=typeof navigator?navigator:null,mozAddonManager:t.Z.get("server")?{}:navigator.mozAddonManager,userAgent:null};const VF=(0,Mo.qC)(No,(0,g.connect)((function(e){return{clientApp:e.api.clientApp,lang:e.api.lang,userAgent:e.api.userAgent}}),(function(e){return{handleGlobalEvent:function(t){e(vv(t))},setClientApp:function(t){e(wt(t))},setUserAgent:function(t){e(function(e){return{type:mt,payload:{userAgent:e}}}(t))}}})),Eu())(WF);var YF=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},ZF="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},$F=function(e){return"@@redux-saga/"+e},KF=$F("TASK"),QF=$F("HELPER"),XF=$F("MATCH"),JF=$F("CANCEL_PROMISE"),eU=$F("SAGA_ACTION"),tU=$F("SELF_CANCELLATION"),nU=function(e){return function(){return e}},rU=nU(!0),oU=function(){},iU=function(e){return e};function aU(e,t,n){if(!t(e))throw bU("error","uncaught at check",n),new Error(n)}var uU=Object.prototype.hasOwnProperty;function cU(e,t){return sU.notUndef(e)&&uU.call(e,t)}var sU={undef:function(e){return null==e},notUndef:function(e){return null!=e},func:function(e){return"function"==typeof e},number:function(e){return"number"==typeof e},string:function(e){return"string"==typeof e},array:Array.isArray,object:function(e){return e&&!sU.array(e)&&"object"===(void 0===e?"undefined":ZF(e))},promise:function(e){return e&&sU.func(e.then)},iterator:function(e){return e&&sU.func(e.next)&&sU.func(e.throw)},iterable:function(e){return e&&sU.func(Symbol)?sU.func(e[Symbol.iterator]):sU.array(e)},task:function(e){return e&&e[KF]},observable:function(e){return e&&sU.func(e.subscribe)},buffer:function(e){return e&&sU.func(e.isEmpty)&&sU.func(e.take)&&sU.func(e.put)},pattern:function(e){return e&&(sU.string(e)||"symbol"===(void 0===e?"undefined":ZF(e))||sU.func(e)||sU.array(e))},channel:function(e){return e&&sU.func(e.take)&&sU.func(e.close)},helper:function(e){return e&&e[QF]},stringableFunc:function(e){return sU.func(e)&&cU(e,"toString")}},lU=function(e,t){for(var n in t)cU(t,n)&&(e[n]=t[n])};function fU(e,t){var n=e.indexOf(t);n>=0&&e.splice(n,1)}var pU=function(e){var t=Array(e.length);for(var n in e)cU(e,n)&&(t[n]=e[n]);return t};function dU(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=YF({},e),n=new Promise((function(e,n){t.resolve=e,t.reject=n}));return t.promise=n,t}function hU(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return function(){return++e}}var yU=hU(),mU=function(e){throw e},vU=function(e){return{value:e,done:!0}};function gU(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:mU,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",r=arguments[3],o={name:n,next:e,throw:t,return:vU};return r&&(o[QF]=!0),"undefined"!=typeof Symbol&&(o[Symbol.iterator]=function(){return o}),o}function bU(e,t){}function wU(e,t){return function(){return e.apply(void 0,arguments)}}var OU=function(e,t){return e+" has been deprecated in favor of "+t+", please update your code"},EU=function(e){return new Error("\n redux-saga: Error checking hooks detected an inconsistent state. This is likely a bug\n in redux-saga code and not yours. Thanks for reporting this in the project's github repo.\n Error: "+e+"\n")},_U=function(e,t){return(e?e+".":"")+"setContext(props): argument "+t+" is not a plain object"},xU=function(e){return function(t){return e(Object.defineProperty(t,eU,{value:!0}))}},SU=$F("IO"),jU="TAKE",PU="PUT",kU="RACE",IU="CALL",TU="CPS",RU="FORK",CU="JOIN",AU="CANCEL",NU="SELECT",LU="ACTION_CHANNEL",DU="CANCELLED",MU="FLUSH",FU="GET_CONTEXT",UU="SET_CONTEXT",BU="\n(HINT: if you are getting this errors in tests, consider using createMockTask from redux-saga/utils)",HU=function(e,t){var n;return(n={})[SU]=!0,n[e]=t,n};function qU(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"*";if(arguments.length&&aU(arguments[0],sU.notUndef,"take(patternOrChannel): patternOrChannel is undefined"),sU.pattern(e))return HU(jU,{pattern:e});if(sU.channel(e))return HU(jU,{channel:e});throw new Error("take(patternOrChannel): argument "+String(e)+" is not valid channel or a valid pattern")}qU.maybe=function(){var e=qU.apply(void 0,arguments);return e.TAKE.maybe=!0,e};qU.maybe;function zU(e,t){return arguments.length>1?(aU(e,sU.notUndef,"put(channel, action): argument channel is undefined"),aU(e,sU.channel,"put(channel, action): argument "+e+" is not a valid channel"),aU(t,sU.notUndef,"put(channel, action): argument action is undefined")):(aU(e,sU.notUndef,"put(action): argument action is undefined"),t=e,e=null),HU(PU,{channel:e,action:t})}function GU(e){return HU("ALL",e)}function WU(e){return HU(kU,e)}function VU(e,t,n){aU(t,sU.notUndef,e+": argument fn is undefined");var r=null;if(sU.array(t)){var o=t;r=o[0],t=o[1]}else if(t.fn){var i=t;r=i.context,t=i.fn}return r&&sU.string(t)&&sU.func(r[t])&&(t=r[t]),aU(t,sU.func,e+": argument "+t+" is not a function"),{context:r,fn:t,args:n}}function YU(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];return HU(IU,VU("call",e,n))}function ZU(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];return HU(RU,VU("fork",e,n))}function $U(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];if(t.length>1)return GU(t.map((function(e){return $U(e)})));var r=t[0];return 1===t.length&&(aU(r,sU.notUndef,"cancel(task): argument task is undefined"),aU(r,sU.task,"cancel(task): argument "+r+" is not a valid Task object "+BU)),HU(AU,r||tU)}function KU(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];return 0===arguments.length?e=iU:(aU(e,sU.notUndef,"select(selector,[...]): argument selector is undefined"),aU(e,sU.func,"select(selector,[...]): argument "+e+" is not a function")),HU(NU,{selector:e,args:n})}zU.resolve=function(){var e=zU.apply(void 0,arguments);return e.PUT.resolve=!0,e},zU.sync=wU(zU.resolve);var QU=function(e){return function(t){return t&&t[SU]&&t[e]}},XU={take:QU(jU),put:QU(PU),all:QU("ALL"),race:QU(kU),call:QU(IU),cps:QU(TU),fork:QU(RU),join:QU(CU),cancel:QU(AU),select:QU(NU),actionChannel:QU(LU),cancelled:QU(DU),flush:QU(MU),getContext:QU(FU),setContext:QU(UU)},JU={done:!0,value:void 0},eB={};function tB(e){return sU.channel(e)?"channel":Array.isArray(e)?String(e.map((function(e){return String(e)}))):String(e)}function nB(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"iterator",r=void 0,o=t;function i(t,n){if(o===eB)return JU;if(n)throw o=eB,n;r&&r(t);var i=e[o](),a=i[0],u=i[1],c=i[2];return r=c,(o=a)===eB?JU:u}return gU(i,(function(e){return i(null,e)}),n,!0)}var rB="Channel's Buffer overflow!",oB={isEmpty:rU,put:oU,take:oU};function iB(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10,t=arguments[1],n=new Array(e),r=0,o=0,i=0,a=function(t){n[o]=t,o=(o+1)%e,r++},u=function(){if(0!=r){var t=n[i];return n[i]=null,r--,i=(i+1)%e,t}},c=function(){for(var e=[];r;)e.push(u());return e};return{isEmpty:function(){return 0==r},put:function(u){if(r<e)a(u);else{var s=void 0;switch(t){case 1:throw new Error(rB);case 3:n[o]=u,i=o=(o+1)%e;break;case 4:s=2*e,n=c(),r=n.length,o=n.length,i=0,n.length=s,e=s,a(u)}}},take:u,flush:c}}var aB=function(){return oB},uB=function(e){return iB(e,1)},cB=[],sB=0;function lB(e){try{pB(),e()}finally{dB()}}function fB(e){cB.push(e),sB||(pB(),hB())}function pB(){sB++}function dB(){sB--}function hB(){dB();for(var e=void 0;!sB&&void 0!==(e=cB.shift());)lB(e)}var yB=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},mB="@@redux-saga/CHANNEL_END",vB={type:mB},gB=function(e){return e&&e.type===mB};function bB(){var e=[];return{subscribe:function(t){return e.push(t),function(){return fU(e,t)}},emit:function(t){for(var n=e.slice(),r=0,o=n.length;r<o;r++)n[r](t)}}}var wB="invalid buffer passed to channel factory function",OB="Saga was provided with an undefined action";function EB(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:uB(),t=!1,n=[];function r(){if(t&&n.length)throw EU("Cannot have a closed channel with pending takers");if(n.length&&!e.isEmpty())throw EU("Cannot have pending takers with non empty buffer")}function o(o){if(r(),aU(o,sU.notUndef,OB),!t){if(!n.length)return e.put(o);for(var i=0;i<n.length;i++){var a=n[i];if(!a[XF]||a[XF](o))return n.splice(i,1),a(o)}}}function i(o){r(),aU(o,sU.func,"channel.take's callback must be a function"),t&&e.isEmpty()?o(vB):e.isEmpty()?(n.push(o),o.cancel=function(){return fU(n,o)}):o(e.take())}function a(n){r(),aU(n,sU.func,"channel.flush' callback must be a function"),t&&e.isEmpty()?n(vB):n(e.flush())}function u(){if(r(),!t&&(t=!0,n.length)){var e=n;n=[];for(var o=0,i=e.length;o<i;o++)e[o](vB)}}return aU(e,sU.buffer,wB),{take:i,put:o,flush:a,close:u,get __takers__(){return n},get __closed__(){return t}}}function _B(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:aB(),n=arguments[2];arguments.length>2&&aU(n,sU.func,"Invalid match function passed to eventChannel");var r=EB(t),o=function(){r.__closed__||(i&&i(),r.close())},i=e((function(e){gB(e)?o():n&&!n(e)||r.put(e)}));if(r.__closed__&&i(),!sU.func(i))throw new Error("in eventChannel: subscribe should return a function to unsubscribe");return{take:r.take,flush:r.flush,close:o}}function xB(e){var t=_B((function(t){return e((function(e){e[eU]?t(e):fB((function(){return t(e)}))}))}));return yB({},t,{take:function(e,n){arguments.length>1&&(aU(n,sU.func,"channel.take's matcher argument must be a function"),e[XF]=n),t.take(e)}})}function SB(e,t){for(var n=arguments.length,r=Array(n>2?n-2:0),o=2;o<n;o++)r[o-2]=arguments[o];var i={done:!1,value:qU(e)},a=function(e){return{done:!1,value:ZU.apply(void 0,[t].concat(r,[e]))}},u=void 0,c=function(e){return u=e};return nB({q1:function(){return["q2",i,c]},q2:function(){return u===vB?[eB]:["q1",a(u)]}},"q1","takeEvery("+tB(e)+", "+t.name+")")}function jB(e,t){for(var n=arguments.length,r=Array(n>2?n-2:0),o=2;o<n;o++)r[o-2]=arguments[o];var i={done:!1,value:qU(e)},a=function(e){return{done:!1,value:ZU.apply(void 0,[t].concat(r,[e]))}},u=function(e){return{done:!1,value:$U(e)}},c=void 0,s=void 0,l=function(e){return c=e},f=function(e){return s=e};return nB({q1:function(){return["q2",i,f]},q2:function(){return s===vB?[eB]:c?["q3",u(c)]:["q1",a(s),l]},q3:function(){return["q1",a(s),l]}},"q1","takeLatest("+tB(e)+", "+t.name+")")}var PB;function kB(e,t){for(var n=arguments.length,r=Array(n>2?n-2:0),o=2;o<n;o++)r[o-2]=arguments[o];return ZU.apply(void 0,[SB,e,t].concat(r))}function IB(e,t){for(var n=arguments.length,r=Array(n>2?n-2:0),o=2;o<n;o++)r[o-2]=arguments[o];return ZU.apply(void 0,[jB,e,t].concat(r))}function TB(t){var n,r,o=t._fixFiltersForClientApp,i=void 0===o?At:o,a=t.api,u=t.auth,c=void 0!==u&&u,s=t.filters,l=It({filters:i({api:a,filters:void 0===s?{}:s}),userAgentInfo:a.userAgentInfo});return l.sort&&l.sort===D.wn&&(l.promoted&&!l.q||(delete l.sort,L.Z.warn((0,e.f9)(PB||(n=['search api filter "sort=random" has been removed before\n calling the api to avoid an incompatibility error.'],r||(r=n.slice(0)),PB=Object.freeze(Object.defineProperties(n,{raw:{value:Object.freeze(r)}}))))))),$t({endpoint:"addons/search",params:Tt(l),apiState:a,auth:c})}function RB(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.log,r=void 0===n?L.Z:n;return new ys({id:e,dispatch:function(){return r.error("ErrorHandler cannot dispatch from a saga")}})}function CB(e){return e}function AB(e){return(AB="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function NB(){NB=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==AB(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}var LB=NB().mark(MB),DB=NB().mark(FB);function MB(e){var t,n,r,o,i,a,u,c,s,l,f,p,d,h;return NB().wrap((function(y){for(;;)switch(y.prev=y.next){case 0:return t=e.payload,n=t.addonType,r=t.authorIds,o=t.errorHandlerId,i=t.forAddonSlug,a=t.page,u=t.pageSize,c=t.sort,s=RB(o),y.next=5,zU(s.createClearingAction());case 5:return y.prev=5,y.next=8,KU(CB);case 8:return l=y.sent,f={api:l.api,filters:{addonType:n,author:r.join(","),exclude_addons:i,page:a||"1",page_size:u,sort:c||D.Mj}},y.next=12,YU(TB,f);case 12:return p=y.sent,d=p.count,h=p.results,y.next=16,zU(yl({addonType:n,addons:h,authorIds:r,count:d,forAddonSlug:i,pageSize:u}));case 16:y.next=23;break;case 18:return y.prev=18,y.t0=y.catch(5),L.Z.warn("Search for addons by authors results failed to load: ".concat(y.t0)),y.next=23,zU(s.createErrorAction(y.t0));case 23:case"end":return y.stop()}}),LB,null,[[5,18]])}function FB(){return NB().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,kB(dl,MB);case 2:case"end":return e.stop()}}),DB)}var UB=function(e){var t=e.apiState,n=e.guid;return $t({apiState:t,endpoint:"blocklist/block/".concat(n,"/")})};function BB(e){return(BB="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function HB(){HB=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==BB(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}var qB=HB().mark(GB),zB=HB().mark(WB);function GB(e){var t,n,r,o,i,a;return HB().wrap((function(u){for(;;)switch(u.prev=u.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.guid,o=RB(n),u.next=4,zU(o.createClearingAction());case 4:return u.prev=4,u.next=7,KU(CB);case 7:return i=u.sent,u.next=10,YU(UB,{apiState:i.api,guid:r});case 10:return a=u.sent,u.next=13,zU(qC({block:a}));case 13:u.next=21;break;case 15:return u.prev=15,u.t0=u.catch(4),u.next=19,zU(o.createErrorAction(u.t0));case 19:return u.next=21,zU(HC({guid:r}));case 21:case"end":return u.stop()}}),qB,null,[[4,15]])}function WB(){return HB().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,IB(MC,GB);case 2:case"end":return e.stop()}}),zB)}function VB(e){return(VB="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function YB(){YB=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==VB(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}function ZB(e,t,n,r,o,i,a){try{var u=e[i](a),c=u.value}catch(e){return void n(e)}u.done?t(c):Promise.resolve(c).then(r,o)}function $B(e){return function(){var t=this,n=arguments;return new Promise((function(r,o){var i=e.apply(t,n);function a(e){ZB(i,r,o,a,u,"next",e)}function u(e){ZB(i,r,o,a,u,"throw",e)}a(void 0)}))}}var KB=function(e){var t=e.api,n=e.slug,r=e.userId;return ce()(n,"slug is required"),ce()(r,"userId is required"),$t({auth:!0,endpoint:"accounts/account/".concat(r,"/collections/").concat(n),apiState:t})},QB=function(e){var t=e.api,n=e.filters,r=e.nextURL,o=e.slug,i=e.userId;ce()(o,"slug is required"),ce()(i,"userId is required");var a={auth:!0,endpoint:r||"accounts/account/".concat(i,"/collections/").concat(o,"/addons"),params:void 0,apiState:t};return n&&(a.params={page:n.page,sort:n.collectionSort}),$t(a)},XB=function(e){var t=e.api,n=e.nextURL,r=e.userId;return ce()(r,"userId is required"),$t({auth:!0,endpoint:n||"accounts/account/".concat(r,"/collections"),apiState:t})},JB=function(){var e=$B(YB().mark((function e(t){var n,r,o,i,a,u,c,s;return YB().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.api,r=t.userId,o=t._allPages,i=void 0===o?Jt:o,a=t._listCollections,u=void 0===a?XB:a,e.next=3,i((function(e){return u({api:n,nextURL:e,userId:r})}));case 3:return c=e.sent,s=c.results,e.abrupt("return",s);case 6:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),eH=function(e,t){var n=t.api,r=t.collectionSlug,o=void 0===r?"":r,i=t.defaultLocale,a=t.description,u=t.name,c=t.slug,s=t.userId,l=t._validateLocalizedString,f=void 0===l?en:l,p="create"===e;return ce()(n,"api is required"),ce()(s,"userId is required"),p?ce()(c,"The slug parameter is required when creating"):ce()(o,"The collectionSlug parameter is required when updating"),a&&f(a),u&&f(u),$t({auth:!0,body:{default_locale:i,description:a,name:u,slug:c},endpoint:"accounts/account/".concat(s,"/collections/").concat(p?"":o),method:p?"POST":"PATCH",apiState:n})},tH=function(e){var t=e.api,n=e.collectionSlug,r=e.defaultLocale,o=e.description,i=e.name,a=e.slug,u=e.userId,c=e._modifyCollection,s=void 0===c?eH:c,l=e._validateLocalizedString;return s("update",{api:t,collectionSlug:n,defaultLocale:r,description:o,name:i,slug:a,userId:u,_validateLocalizedString:void 0===l?en:l})},nH=function(e){var t=e.api,n=e.defaultLocale,r=e.description,o=e.name,i=e.slug,a=e.userId,u=e._modifyCollection,c=void 0===u?eH:u,s=e._validateLocalizedString;return c("create",{api:t,defaultLocale:n,description:r,name:o,slug:i,userId:a,_validateLocalizedString:void 0===s?en:s})},rH=function(e){var t=e.action,n=e.addonId,r=e.api,o=e.slug,i=e.userId;ce()(t,"The action parameter is required"),ce()(n,"The addonId parameter is required"),ce()(r,"The api parameter is required"),ce()(o,"The slug parameter is required"),ce()(i,"The userId parameter is required");var a="POST",u={addon:n,notes:e.notes},c="accounts/account/".concat(i,"/collections/").concat(o,"/addons");return"update"===t&&(a="PATCH",delete u.addon,c="".concat(c,"/").concat(n)),$t({auth:!0,body:u,endpoint:c,method:a,apiState:r})},oH=function(e){var t=e.addonId,n=e.api,r=e.slug,o=e.notes,i=e.userId,a=e._modifyCollectionAddon;return(void 0===a?rH:a)({action:"create",addonId:t,api:n,notes:o,slug:r,userId:i})},iH=function(e){var t=e.addonId,n=e.api,r=e.slug,o=e.notes,i=e.userId,a=e._modifyCollectionAddon;return(void 0===a?rH:a)({action:"update",addonId:t,api:n,notes:o,slug:r,userId:i})},aH=function(e){var t=e.addonId,n=e.api,r=e.slug,o=e.userId;return ce()(t,"The addonId parameter is required"),ce()(n,"The api parameter is required"),ce()(r,"The slug parameter is required"),ce()(o,"The userId parameter is required"),$t({auth:!0,endpoint:"accounts/account/".concat(o,"/collections/").concat(r,"/addons/").concat(t),method:"DELETE",apiState:n})},uH=function(e){var t=e.api,n=e.slug,r=e.userId;return ce()(t,"The api parameter is required"),ce()(n,"The slug parameter is required"),ce()(r,"The userId parameter is required"),$t({auth:!0,endpoint:"accounts/account/".concat(r,"/collections/").concat(n),method:"DELETE",apiState:t})};function cH(e){return(cH="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function sH(){sH=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==cH(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}var lH=sH().mark(EH),fH=sH().mark(_H),pH=sH().mark(xH),dH=sH().mark(SH),hH=sH().mark(jH),yH=sH().mark(PH),mH=sH().mark(kH),vH=sH().mark(IH),gH=sH().mark(TH);function bH(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function wH(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?bH(Object(n),!0).forEach((function(t){OH(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):bH(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function OH(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function EH(e){var t,n,r,o,i,a,u,c,s,l,f,p,d;return sH().wrap((function(h){for(;;)switch(h.prev=h.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.filters,o=t.slug,i=t.userId,a=RB(n),h.next=4,zU(a.createClearingAction());case 4:return h.prev=4,h.next=7,KU(CB);case 7:return u=h.sent,c={api:u.api,slug:o,userId:String(i)},s=wH({},c),l=wH(wH({},c),{},{filters:r}),h.next=13,GU({detail:YU(KB,s),addonsResponse:YU(QB,l)});case 13:return f=h.sent,p=f.detail,d=f.addonsResponse,h.next=18,zU(Ka({addonsResponse:d,detail:p}));case 18:h.next=27;break;case 20:return h.prev=20,h.t0=h.catch(4),L.Z.warn("Collection failed to load: ".concat(h.t0)),h.next=25,zU(a.createErrorAction(h.t0));case 25:return h.next=27,zU(eu());case 27:case"end":return h.stop()}}),lH,null,[[4,20]])}function _H(e){var t,n,r,o,i,a,u,c,s;return sH().wrap((function(l){for(;;)switch(l.prev=l.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.filters,o=t.slug,i=t.userId,a=RB(n),l.next=4,zU(a.createClearingAction());case 4:return l.prev=4,l.next=7,KU(CB);case 7:return u=l.sent,c={api:u.api,filters:r,slug:o,userId:String(i)},l.next=11,YU(QB,c);case 11:return s=l.sent,l.next=14,zU(Qa({addonsResponse:s}));case 14:l.next=23;break;case 16:return l.prev=16,l.t0=l.catch(4),L.Z.warn("Collection page failed to load: ".concat(l.t0)),l.next=21,zU(a.createErrorAction(l.t0));case 21:return l.next=23,zU(eu());case 23:case"end":return l.stop()}}),fH,null,[[4,16]])}function xH(e){var t,n,r,o,i,a,u;return sH().wrap((function(c){for(;;)switch(c.prev=c.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.userId,o=RB(n),c.next=4,zU(o.createClearingAction());case 4:return c.prev=4,c.next=7,KU(CB);case 7:return i=c.sent,a={api:i.api,userId:String(r)},c.next=11,YU(JB,a);case 11:return u=c.sent,c.next=14,zU(Xa({userId:r,collections:u}));case 14:c.next=23;break;case 16:return c.prev=16,c.t0=c.catch(4),L.Z.warn("Failed to fetch user collections: ".concat(c.t0)),c.next=21,zU(o.createErrorAction(c.t0));case 21:return c.next=23,zU(Ya({userId:r}));case 23:case"end":return c.stop()}}),pH,null,[[4,16]])}function SH(e){var t,n,r,o,i,a,u,c,s,l,f,p;return sH().wrap((function(d){for(;;)switch(d.prev=d.next){case 0:return t=e.payload,n=t.addonId,r=t.collectionId,o=t.editing,i=t.errorHandlerId,a=t.filters,u=t.notes,c=t.slug,s=t.userId,l=RB(i),d.next=4,zU(l.createClearingAction());case 4:return d.prev=4,d.next=7,KU(CB);case 7:return f=d.sent,p={addonId:n,api:f.api,slug:c,notes:u?OH({},f.api.lang,u):void 0,userId:String(s)},d.next=11,YU(oH,p);case 11:if(!o){d.next=15;break}return ce()(a,"A filters parameter is required when editing"),d.next=15,zU($a({errorHandlerId:l.id,filters:a,slug:c,userId:s}));case 15:return d.next=17,zU(Ja({addonId:n,userId:s,collectionId:r}));case 17:d.next=26;break;case 19:return d.prev=19,d.t0=d.catch(4),L.Z.warn("Failed to add add-on to collection: ".concat(d.t0)),d.next=24,zU(l.createErrorAction(d.t0));case 24:return d.next=26,zU(Za({addonId:n,userId:s}));case 26:case"end":return d.stop()}}),dH,null,[[4,19]])}function jH(e){var t,n,r,o,a,u,c,s,l,f,p,d,h,y,m,v,g,b,w,O,E,_,x,S;return sH().wrap((function(j){for(;;)switch(j.prev=j.next){case 0:return t=e.type,n=e.payload,r=t===La,o=n.defaultLocale,a=n.description,u=n.errorHandlerId,c=n.name,s=n.slug,l=n.userId,j.next=5,zU({type:Da,payload:null});case 5:return f=RB(u),j.next=8,zU(f.createClearingAction());case 8:return e.type===Aa&&(p=e.payload.collectionSlug,d=e.payload.filters),e.type===La&&(h=e.payload.includeAddonId),j.prev=10,j.next=13,KU(CB);case 13:if(y=j.sent,v={api:y.api,defaultLocale:o,description:a,userId:String(l)},!r){j.next=28;break}return ce()(c,"name cannot be empty when creating"),ce()(s,"slug cannot be empty when creating"),g=wH({name:c,slug:s},v),j.next=21,YU(nH,g);case 21:if(m=j.sent,!h){j.next=26;break}return b={addonId:h,api:y.api,slug:s,userId:String(l)},j.next=26,YU(oH,b);case 26:j.next=33;break;case 28:return ce()(p,"collectionSlug cannot be empty when updating"),w=wH({collectionSlug:p,name:c,slug:s},v),j.next=32,YU(tH,w);case 32:m=j.sent;case 33:if(O=y.api,E=O.lang,_=O.clientApp,x=m&&m.slug||s||p,ce()(x,"Both slug and collectionSlug cannot be empty"),S="/".concat(E,"/").concat(_,"/collections/").concat(l,"/").concat(x,"/edit/"),!r){j.next=46;break}if(ce()(m,"response is required when creating"),h){j.next=42;break}return j.next=42,zU(Ka({detail:m}));case 42:return j.next=44,zU((0,i.VF)(S));case 44:j.next=55;break;case 46:return ce()(d,"filters are required when updating"),j.next=49,zU((0,i.VF)({pathname:S,query:fu(d)}));case 49:if(x!==p){j.next=53;break}return j.next=53,zU(nu(x));case 53:return j.next=55,zU(ou());case 55:j.next=62;break;case 57:return j.prev=57,j.t0=j.catch(10),L.Z.warn("Failed to ".concat(t,": ").concat(j.t0)),j.next=62,zU(f.createErrorAction(j.t0));case 62:return j.prev=62,j.next=65,zU({type:Ma,payload:null});case 65:return j.finish(62);case 66:case"end":return j.stop()}}),hH,null,[[10,57,62,66]])}function PH(e){var t,n,r,o,i,a,u,c,s;return sH().wrap((function(l){for(;;)switch(l.prev=l.next){case 0:return t=e.payload,n=t.addonId,r=t.errorHandlerId,o=t.filters,i=t.slug,a=t.userId,u=RB(r),l.next=4,zU(u.createClearingAction());case 4:return l.prev=4,l.next=7,KU(CB);case 7:return c=l.sent,s={addonId:n,api:c.api,slug:i,userId:String(a)},l.next=11,YU(aH,s);case 11:return l.next=13,zU({type:Ua});case 13:return l.next=15,zU($a({errorHandlerId:u.id,filters:o,slug:i,userId:a}));case 15:l.next=22;break;case 17:return l.prev=17,l.t0=l.catch(4),L.Z.warn("Failed to remove add-on from collection: ".concat(l.t0)),l.next=22,zU(u.createErrorAction(l.t0));case 22:case"end":return l.stop()}}),yH,null,[[4,17]])}function kH(e){var t,n,r,o,a,u,c,s,l,f;return sH().wrap((function(p){for(;;)switch(p.prev=p.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.slug,o=t.userId,a=RB(n),p.next=4,zU(a.createClearingAction());case 4:return p.prev=4,p.next=7,KU(CB);case 7:return u=p.sent,c=u.api,s=c.lang,l=c.clientApp,f={api:u.api,slug:r,userId:String(o)},p.next=12,YU(uH,f);case 12:return p.next=14,zU((0,i.VF)("/".concat(s,"/").concat(l,"/collections/")));case 14:return p.next=16,zU(nu(r));case 16:p.next=23;break;case 18:return p.prev=18,p.t0=p.catch(4),L.Z.warn("Failed to delete collection: ".concat(p.t0)),p.next=23,zU(a.createErrorAction(p.t0));case 23:case"end":return p.stop()}}),mH,null,[[4,18]])}function IH(e){var t,n,r,o,i,a,u,c,s,l;return sH().wrap((function(f){for(;;)switch(f.prev=f.next){case 0:return t=e.payload,n=t.addonId,r=t.errorHandlerId,o=t.filters,i=t.notes,a=t.slug,u=t.userId,c=RB(r),f.next=4,zU(c.createClearingAction());case 4:return f.prev=4,f.next=7,KU(CB);case 7:return s=f.sent,l={addonId:n,api:s.api,notes:i,slug:a,userId:String(u)},f.next=11,YU(iH,l);case 11:return f.next=13,zU($a({errorHandlerId:c.id,filters:o,slug:a,userId:u}));case 13:f.next=20;break;case 15:return f.prev=15,f.t0=f.catch(4),L.Z.warn("Failed to update add-on in collection: ".concat(f.t0)),f.next=20,zU(c.createErrorAction(f.t0));case 20:case"end":return f.stop()}}),vH,null,[[4,15]])}function TH(){return sH().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,IB(Oa,SH);case 2:return e.next=4,IB([La,Aa],jH);case 4:return e.next=6,IB(Ba,kH);case 6:return e.next=8,IB(Ea,EH);case 8:return e.next=10,IB(Sa,_H);case 10:return e.next=12,IB(_a,xH);case 12:return e.next=14,IB(Fa,PH);case 14:return e.next=16,IB([qa,Ha],IH);case 16:case"end":return e.stop()}}),gH)}var RH=function(e){return $t({apiState:e.api,endpoint:"shelves"})};function CH(e){return(CH="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function AH(){AH=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==CH(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}var NH,LH=AH().mark(MH),DH=AH().mark(FH);function MH(e){var t,n,r,o,i,a,u,c;return AH().wrap((function(s){for(;;)switch(s.prev=s.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.isDesktopSite,o=RB(n),s.next=4,zU(o.createClearingAction());case 4:return s.next=6,KU(CB);case 6:return i=s.sent,a={api:i.api,filters:{addonType:D.Gz,page_size:String(D.Fb),promoted:D.g$,sort:D.wn}},s.prev=8,u=null,s.prev=10,s.next=13,YU(RH,{api:i.api});case 13:u=s.sent,s.next=20;break;case 16:throw s.prev=16,s.t0=s.catch(10),L.Z.warn("Home shelves failed to load: ".concat(s.t0)),s.t0;case 20:if(!r){s.next=25;break}return s.next=23,zU(jl({homeShelves:u,shelves:{}}));case 23:s.next=37;break;case 25:return s.prev=25,s.next=28,YU(TB,a);case 28:c=s.sent,s.next=35;break;case 31:throw s.prev=31,s.t1=s.catch(25),L.Z.warn("Mobile homepage add-ons failed to load: ".concat(s.t1)),s.t1;case 35:return s.next=37,zU(jl({homeShelves:u,shelves:{recommendedExtensions:c}}));case 37:s.next=45;break;case 39:return s.prev=39,s.t2=s.catch(8),s.next=43,zU(o.createErrorAction(s.t2));case 43:return s.next=45,zU({type:El});case 45:case"end":return s.stop()}}),LH,null,[[8,39],[10,16],[25,31]])}function FH(){return AH().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,IB(_l,MH);case 2:case"end":return e.stop()}}),DH)}function UH(e){return(UH="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function BH(){BH=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==UH(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}var HH=BH().mark(ZH),qH=BH().mark($H);function zH(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,o,i=[],a=!0,u=!1;try{for(n=n.call(e);!(a=(r=n.next()).done)&&(i.push(r.value),!t||i.length!==t);a=!0);}catch(e){u=!0,o=e}finally{try{a||null==n.return||n.return()}finally{if(u)throw o}}return i}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return GH(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return GH(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function GH(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function WH(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function VH(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?WH(Object(n),!0).forEach((function(t){YH(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):WH(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function YH(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ZH(t){var n,r,o,i,a,u,c,s,l,f,p,d,h,y,m,v;return BH().wrap((function(g){for(;;)switch(g.prev=g.next){case 0:return n=t.payload,r=n.addonType,o=n.category,i=n.errorHandlerId,a=RB(i),g.prev=2,g.next=5,KU(CB);case 5:return u=g.sent,c=u.api,s={addonType:r,page_size:D.Yd===r?String(D.Pn):String(D.Db),promoted:r===D.Gz?D.g$:void 0},o&&(s=VH(VH({},s),{},{category:o})),l={api:c,filters:VH(VH({},s),{},{promoted:D.g$,sort:D.wn,page:"1"})},f={api:c,filters:VH(VH({},s),{},{sort:D.kc,page:"1"})},p={api:c,filters:VH(VH({},s),{},{sort:D.Mj,page:"1"})},g.next=14,GU([YU(TB,l),YU(TB,f),YU(TB,p)]);case 14:return d=g.sent,h=zH(d,3),y=h[0],m=h[1],v=h[2],g.next=21,zU(Fl({addonType:r,recommended:y,highlyRated:m,trending:v}));case 21:g.next=28;break;case 23:return g.prev=23,g.t0=g.catch(2),L.Z.warn((0,e.f9)(NH||(b=["Failed to fetch landing page add-ons for\n addonType ",": ",""],(w=void 0)||(w=b.slice(0)),NH=Object.freeze(Object.defineProperties(b,{raw:{value:Object.freeze(w)}}))),r,g.t0)),g.next=28,zU(a.createErrorAction(g.t0));case 28:case"end":return g.stop()}var b,w}),HH,null,[[2,23]])}function $H(){return BH().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,IB(Ll,ZH);case 2:case"end":return e.stop()}}),qH)}var KH=function(e){var t=e.api,n=e.guid,r=e.recommended;return ce()(n,"A guid is required."),ce()("boolean"==typeof r,"recommended is required"),$t({apiState:t,auth:!0,endpoint:"addons/recommendations/",params:{app:t.clientApp,guid:n,recommended:r}})};function QH(e){return(QH="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function XH(){XH=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==QH(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}var JH=XH().mark(tq),eq=XH().mark(nq);function tq(e){var t,n,r,o,i,a,u,c,s,l,f;return XH().wrap((function(p){for(;;)switch(p.prev=p.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.guid,o=t.recommended,i=RB(n),p.next=4,zU(i.createClearingAction());case 4:return p.prev=4,ce()("boolean"==typeof o,"recommended is required"),p.next=8,KU(CB);case 8:return a=p.sent,u={api:a.api,guid:r,recommended:o},p.next=12,YU(KH,u);case 12:return c=p.sent,s=c.fallback_reason,l=c.outcome,f=c.results,p.next=16,zU(Yl({addons:f,fallbackReason:s,guid:r,outcome:l}));case 16:p.next=25;break;case 18:return p.prev=18,p.t0=p.catch(4),L.Z.warn("Failed to recommendations: ".concat(p.t0)),p.next=23,zU(i.createErrorAction(p.t0));case 23:return p.next=25,zU(Vl({guid:r}));case 25:case"end":return p.stop()}}),JH,null,[[4,18]])}function nq(){return XH().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,IB(zl,tq);case 2:case"end":return e.stop()}}),eq)}var rq,oq=a(56325);function iq(e){return(iq="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var aq=["addonId","score","apiState","versionId","body","reviewId"],uq=["apiState","user","addon"];function cq(){cq=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==iq(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}function sq(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function lq(e,t,n,r,o,i,a){try{var u=e[i](a),c=u.value}catch(e){return void n(e)}u.done?t(c):Promise.resolve(c).then(r,o)}function fq(e){return function(){var t=this,n=arguments;return new Promise((function(r,o){var i=e.apply(t,n);function a(e){lq(i,r,o,a,u,"next",e)}function u(e){lq(i,r,o,a,u,"throw",e)}a(void 0)}))}}function pq(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function dq(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?pq(Object(n),!0).forEach((function(t){hq(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):pq(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function hq(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function yq(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function mq(e){var t=e.addonId,n=e.score,r=e.apiState,o=e.versionId,i=e.body,a=e.reviewId,u=yq(e,aq);return new Promise((function(e){var c={addon:void 0,score:n,version:o,body:i},s="POST",l="ratings/rating";if(a)l="".concat(l,"/").concat(a),s="PATCH",c.version=void 0;else{if(!t)throw new Error("addonId is required when posting a new review");c.addon=t}e($t(dq({endpoint:l,body:c,method:s,auth:!0,apiState:r},u)))}))}var vq=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.apiState,n=e.body,r=e.errorHandler,o=e.originalReviewId;return new Promise((function(e){var i="ratings/rating/".concat(o,"/reply/");e($t({auth:!0,body:{body:n},endpoint:i,errorHandler:r,method:"POST",apiState:t}))}))};function gq(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.apiState,n=e.user,r=e.addon,o=yq(e,uq);return new Promise((function(e){if(!n&&!r)throw new Error("Either user or addon must be specified");e($t({auth:!0,endpoint:"ratings/rating",params:dq({user:n,addon:r},o),apiState:t}))}))}function bq(){return wq.apply(this,arguments)}function wq(){return(wq=fq(cq().mark((function t(){var n,r,o,i,a,u,c=arguments;return cq().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=c.length>0&&void 0!==c[0]?c[0]:{},r=n.apiState,o=n.user,i=n.addon,ce()(o,"The user parameter is required"),ce()(i,"The addon parameter is required"),t.next=5,gq({apiState:r,user:o,addon:i});case 5:if(a=t.sent,1!==(u=a.results).length){t.next=9;break}return t.abrupt("return",u[0]);case 9:if(0!==u.length){t.next=11;break}return t.abrupt("return",null);case 11:throw new Error((0,e.f9)(rq||(rq=sq(["Unexpectedly received multiple review objects:\n ",""])),u.map((function(e){return e.id}))));case 12:case"end":return t.stop()}}),t)})))).apply(this,arguments)}var Oq=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.apiState,n=e.errorHandler,r=e.note,o=e.reason,i=e.reviewId;return new Promise((function(e){if(!i)throw new Error("The reviewId parameter is required");if(!o)throw new Error("The reason parameter is required");if(o===D.eV&&!r)throw new Error("When reason is ".concat(o,", the note parameter is required"));e($t({auth:!0,body:{flag:o,note:r},endpoint:"ratings/rating/".concat(i,"/flag"),errorHandler:n,method:"POST",apiState:t}))}))},Eq=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.apiState,n=e.errorHandler,r=e.reviewId;return ce()(r,"reviewId is required"),new Promise((function(e){e($t({auth:!0,endpoint:"ratings/rating/".concat(r,"/"),errorHandler:n,method:"DELETE",apiState:t}))}))},_q=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.apiState,n=e.reviewId;return ce()(n,"reviewId is required"),new Promise((function(e){e($t({auth:!0,endpoint:"ratings/rating/".concat(n,"/"),method:"GET",apiState:t}))}))};function xq(e){return(xq="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Sq(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function jq(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Sq(Object(n),!0).forEach((function(t){Pq(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Sq(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Pq(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function kq(){kq=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==xq(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}var Iq=kq().mark(Uq),Tq=kq().mark(Bq),Rq=kq().mark(Hq),Cq=kq().mark(qq),Aq=kq().mark(zq),Nq=kq().mark(Gq),Lq=kq().mark(Wq),Dq=kq().mark(Vq),Mq=kq().mark(Yq),Fq=kq().mark(Zq);function Uq(e){var t,n,r,o,i,a,u,c,s;return kq().wrap((function(l){for(;;)switch(l.prev=l.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.addonSlug,o=t.page,i=t.score,a=RB(n),l.prev=2,l.next=5,zU(a.createClearingAction());case 5:return l.next=7,KU(CB);case 7:return u=l.sent,c={addon:r,apiState:u.api,page:o,score:i||void 0},l.next=11,YU(gq,c);case 11:return s=l.sent,l.next=14,zU(xi({addonSlug:r,page:o||"1",pageSize:s.page_size,reviewCount:s.count,reviews:s.results,score:i}));case 14:l.next=21;break;case 16:return l.prev=16,l.t0=l.catch(2),L.Z.warn("Failed to load reviews for add-on slug ".concat(r,": ").concat(l.t0)),l.next=21,zU(a.createErrorAction(l.t0));case 21:case"end":return l.stop()}}),Iq,null,[[2,16]])}function Bq(e){var t,n,r,o,i,a,u,c;return kq().wrap((function(s){for(;;)switch(s.prev=s.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.addonId,o=t.userId,i=RB(n),s.prev=2,s.next=5,zU(i.createClearingAction());case 5:return s.next=7,KU(CB);case 7:return a=s.sent,u={addon:r,apiState:a.api,show_permissions_for:o},s.next=11,YU(gq,u);case 11:return c=s.sent,ce()(void 0!==c.can_reply,"response.can_reply was unexpectedly undefined"),s.next=15,zU(wi({addonId:r,canReplyToReviews:c.can_reply,userId:o}));case 15:s.next=22;break;case 17:return s.prev=17,s.t0=s.catch(2),L.Z.warn("Failed to load review permissions for add-on ID ".concat(r,", user ID ").concat(o,": ").concat(s.t0)),s.next=22,zU(i.createErrorAction(s.t0));case 22:case"end":return s.stop()}}),Tq,null,[[2,17]])}function Hq(e){var t,n,r,o,i,a,u,c;return kq().wrap((function(s){for(;;)switch(s.prev=s.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.page,o=t.userId,i=RB(n),s.prev=2,s.next=5,KU(CB);case 5:return a=s.sent,u={apiState:a.api,page:r,user:o},s.next=9,YU(gq,u);case 9:return c=s.sent,s.next=12,zU(_i({pageSize:c.page_size,reviewCount:c.count,reviews:c.results,userId:o}));case 12:s.next=19;break;case 14:return s.prev=14,s.t0=s.catch(2),L.Z.warn("Failed to load reviews for user ID ".concat(o,": ").concat(s.t0)),s.next=19,zU(i.createErrorAction(s.t0));case 19:case"end":return s.stop()}}),Rq,null,[[2,14]])}function qq(e){var t,n,r,o,i,a,u,c;return kq().wrap((function(s){for(;;)switch(s.prev=s.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.originalReviewId,o=t.body,i=t.title,a=RB(n),s.next=4,zU(a.createClearingAction());case 4:return s.prev=4,s.next=7,KU(CB);case 7:return u=s.sent,s.next=10,YU(vq,{apiState:u.api,body:o,originalReviewId:r,title:i});case 10:return c=s.sent,s.next=13,zU(bi({originalReviewId:r,reply:c}));case 13:return s.next=15,zU(Ti({reviewId:r}));case 15:s.next=22;break;case 17:return s.prev=17,s.t0=s.catch(4),L.Z.warn("Failed to send reply to review ID ".concat(r,": ").concat(s.t0)),s.next=22,zU(a.createErrorAction(s.t0));case 22:case"end":return s.stop()}}),Cq,null,[[4,17]])}function zq(e){var t,n,r,o,i,a,u;return kq().wrap((function(c){for(;;)switch(c.prev=c.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.note,o=t.reason,i=t.reviewId,a=RB(n),c.next=4,zU(a.createClearingAction());case 4:return c.prev=4,c.next=7,KU(CB);case 7:return u=c.sent,c.next=10,YU(Oq,{apiState:u.api,note:r,reason:o,reviewId:i});case 10:return c.next=12,zU(Ci({reason:o,reviewId:i}));case 12:c.next=19;break;case 14:return c.prev=14,c.t0=c.catch(4),L.Z.warn("Failed to flag review ID ".concat(i,": ").concat(c.t0)),c.next=19,zU(a.createErrorAction(c.t0));case 19:case"end":return c.stop()}}),Aq,null,[[4,14]])}function Gq(e){var t,n,r,o,i,a,u,c,s,l,f,p,d,h,y,m,v=arguments;return kq().wrap((function(g){for(;;)switch(g.prev=g.next){case 0:return t=v.length>1&&void 0!==v[1]?v[1]:{},n=t._delay,r=void 0===n?oq.gw:n,o=e.payload,i=o.body,a=o.errorHandlerId,u=o.score,c=RB(a),s=!!u,l=!!i,g.next=7,zU(c.createClearingAction());case 7:if(!s){g.next=10;break}return g.next=10,zU(Hi(Ui));case 10:if(!l){g.next=13;break}return g.next=13,zU(Hi(Bi));case 13:return g.prev=13,g.next=16,KU(CB);case 16:return f=g.sent,p={apiState:f.api,body:i,score:u},e.type===zo?d=jq(jq({},p),{},{addonId:e.payload.addonId,versionId:e.payload.versionId}):e.type===fi&&(d=jq(jq({},p),{},{reviewId:e.payload.reviewId}),h=Cp(f.reviews,e.payload.reviewId),ce()(h,"review with ID=".concat(e.payload.reviewId," does not exist in state"))),ce()(d,"params was unexpectedly empty; action.type: ".concat(e.type)),y=d,g.next=23,YU(mq,y);case 23:return m=g.sent,g.next=26,zU(gi(m));case 26:if(!s){g.next=29;break}return g.next=29,zU(Hi(Mi));case 29:if(!l){g.next=34;break}return g.next=32,zU(Hi(Fi));case 32:return g.next=34,zU(Ii({reviewId:m.id}));case 34:if(m.is_developer_reply){g.next=39;break}return g.next=37,zU(Ai({addonId:m.addon.id,review:m,userId:m.user.id}));case 37:return g.next=39,zU(Oi({addonId:m.addon.id,oldReview:h,newReview:vi(m)}));case 39:return g.next=41,r(2e3);case 41:return g.next=43,zU(qi());case 43:g.next=52;break;case 45:return g.prev=45,g.t0=g.catch(13),L.Z.warn("Failed to create/update review with action ".concat(e.type,": ").concat(g.t0)),g.next=50,zU(c.createErrorAction(g.t0));case 50:return g.next=52,zU(Hi(Di));case 52:case"end":return g.stop()}}),Nq,null,[[13,45]])}function Wq(e){var t,n,r,o,i,a,u;return kq().wrap((function(c){for(;;)switch(c.prev=c.next){case 0:return t=e.payload,n=t.addonId,r=t.errorHandlerId,o=t.isReplyToReviewId,i=t.reviewId,a=RB(r),c.next=4,zU(a.createClearingAction());case 4:return c.prev=4,c.next=7,KU(CB);case 7:return u=c.sent,c.next=10,YU(Eq,{apiState:u.api,reviewId:i});case 10:return c.next=12,zU(Vi({addonId:n,reviewId:i}));case 12:if(!o){c.next=15;break}return c.next=15,zU(Vi({addonId:n,reviewId:o}));case 15:c.next=22;break;case 17:return c.prev=17,c.t0=c.catch(4),L.Z.warn("Failed to delete review ID ".concat(i,": ").concat(c.t0)),c.next=22,zU(a.createErrorAction(c.t0));case 22:case"end":return c.stop()}}),Lq,null,[[4,17]])}function Vq(e){var t,n,r,o,i,a,u,c,s;return kq().wrap((function(l){for(;;)switch(l.prev=l.next){case 0:return t=e.payload,n=t.addonId,r=t.errorHandlerId,o=t.userId,i=RB(r),l.next=4,zU(i.createClearingAction());case 4:return l.prev=4,l.next=7,KU(CB);case 7:return a=l.sent,u={addon:n,apiState:a.api,user:o},l.next=11,YU(bq,u);case 11:if(c=l.sent,s=function(e){return Ai({userId:o,addonId:n,review:e})},!c){l.next=20;break}return l.next=16,zU(gi(c));case 16:return l.next=18,zU(s(c));case 18:l.next=23;break;case 20:return L.Z.debug("No saved review found for userId ".concat(o,", addonId ").concat(n)),l.next=23,zU(s(null));case 23:l.next=30;break;case 25:return l.prev=25,l.t0=l.catch(4),L.Z.warn('Failed to fetchLatestUserReview for addonId "'.concat(n,'", userId "').concat(o,'": ').concat(l.t0)),l.next=30,zU(i.createErrorAction(l.t0));case 30:case"end":return l.stop()}}),Dq,null,[[4,25]])}function Yq(e){var t,n,r,o,i,a,u;return kq().wrap((function(c){for(;;)switch(c.prev=c.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.reviewId,o=RB(n),c.next=4,zU(o.createClearingAction());case 4:return c.prev=4,c.next=7,KU(CB);case 7:return i=c.sent,a={apiState:i.api,reviewId:r},c.next=11,YU(_q,a);case 11:return u=c.sent,c.next=14,zU(gi(u));case 14:c.next=21;break;case 16:return c.prev=16,c.t0=c.catch(4),L.Z.warn("Failed to get review ID ".concat(r,": ").concat(c.t0)),c.next=21,zU(o.createErrorAction(c.t0));case 21:case"end":return c.stop()}}),Mq,null,[[4,16]])}function Zq(e){return kq().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,IB($o,Vq);case 2:return t.next=4,IB(Vo,Yq);case 4:return t.next=6,IB(Yo,Bq);case 6:return t.next=8,IB(Zo,Uq);case 8:return t.next=10,IB(Ko,Hq);case 10:return t.next=12,IB(si,qq);case 12:return t.next=14,IB(li,zq);case 14:return t.next=16,IB(zo,(function(t){return Gq(t,e)}));case 16:return t.next=18,IB(fi,(function(t){return Gq(t,e)}));case 18:return t.next=20,IB(pi,Wq);case 20:case"end":return t.stop()}}),Fq)}function $q(e){var t=e.addonSlug,n=e.api;return $t({auth:!0,endpoint:"abuse/report/addon",method:"POST",body:{addon:t,message:e.message},apiState:n})}function Kq(e){var t=e.api;return $t({auth:!0,endpoint:"abuse/report/user",method:"POST",body:{message:e.message,user:e.userId.toString()},apiState:t})}function Qq(e){return(Qq="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Xq(){Xq=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==Qq(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}var Jq=Xq().mark(nz),ez=Xq().mark(rz),tz=Xq().mark(oz);function nz(e){var t,n,r,o,i,a,u,c;return Xq().wrap((function(s){for(;;)switch(s.prev=s.next){case 0:return t=e.payload,n=t.addonSlug,r=t.errorHandlerId,o=t.message,i=RB(r),s.next=4,zU(i.createClearingAction());case 4:return s.prev=4,s.next=7,KU(CB);case 7:return a=s.sent,u={addonSlug:n,api:a.api,message:o},s.next=11,YU($q,u);case 11:return c=s.sent,s.next=14,zU(wP({addon:c.addon,message:c.message,reporter:c.reporter}));case 14:s.next=21;break;case 16:return s.prev=16,s.t0=s.catch(4),L.Z.warn("Reporting add-on for abuse failed: ".concat(s.t0)),s.next=21,zU(i.createErrorAction(s.t0));case 21:case"end":return s.stop()}}),Jq,null,[[4,16]])}function rz(e){var t;return Xq().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return t=e.payload.addon,n.prev=1,n.next=4,(0,bv.reportAbuse)(t.guid);case 4:if(!n.sent){n.next=8;break}return n.next=8,zU(wP({addon:{guid:t.guid,id:t.id,slug:t.slug},message:null,reporter:null}));case 8:n.next=13;break;case 10:n.prev=10,n.t0=n.catch(1),L.Z.warn("Reporting add-on for abuse via firefox failed: ".concat(n.t0));case 13:return n.next=15,zU({type:vP});case 15:case"end":return n.stop()}}),ez,null,[[1,10]])}function oz(){return Xq().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,IB(mP,rz);case 2:return e.next=4,IB(hP,nz);case 4:case"end":return e.stop()}}),tz)}var iz=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.api,n=e.slug;return ce()(n,"slug is required"),$t({apiState:t,auth:!0,endpoint:"addons/addon/".concat(n,"/eula_policy/")})};function az(e){return(az="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function uz(){uz=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==az(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}var cz=uz().mark(fz),sz=uz().mark(pz),lz=uz().mark(dz);function fz(e){var t,n,r,o,i,a,u,c;return uz().wrap((function(s){for(;;)switch(s.prev=s.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.showGroupedRatings,o=t.slug,i=RB(n),s.next=4,zU(i.createClearingAction());case 4:return s.prev=4,s.next=7,KU(CB);case 7:return a=s.sent,u={api:a.api,showGroupedRatings:r,slug:o},s.next=11,YU(Kt,u);case 11:return c=s.sent,s.next=14,zU(ra({addon:c,slug:o}));case 14:s.next=21;break;case 16:return s.prev=16,s.t0=s.catch(4),L.Z.warn("Failed to load add-on with slug ".concat(o,": ").concat(s.t0)),s.next=21,zU(i.createErrorAction(s.t0));case 21:case"end":return s.stop()}}),cz,null,[[4,16]])}function pz(e){var t,n,r,o,i,a,u;return uz().wrap((function(c){for(;;)switch(c.prev=c.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.slug,o=RB(n),c.next=4,zU(o.createClearingAction());case 4:return c.prev=4,c.next=7,KU(CB);case 7:return i=c.sent,a={api:i.api,slug:r},c.next=11,YU(iz,a);case 11:return u=c.sent,c.next=14,zU(oa({slug:r,info:u}));case 14:c.next=21;break;case 16:return c.prev=16,c.t0=c.catch(4),L.Z.warn("Failed to fetch add-on info: ".concat(c.t0)),c.next=21,zU(o.createErrorAction(c.t0));case 21:case"end":return c.stop()}}),sz,null,[[4,16]])}function dz(){return uz().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,kB(Ji,fz);case 2:return e.next=4,IB(Qi,pz);case 4:case"end":return e.stop()}}),lz)}function hz(e){return $t({endpoint:"addons/categories",apiState:e.api})}function yz(e){return(yz="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function mz(){mz=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==yz(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}var vz=mz().mark(bz),gz=mz().mark(wz);function bz(e){var t,n,r,o,i;return mz().wrap((function(a){for(;;)switch(a.prev=a.next){case 0:return t=e.payload.errorHandlerId,n=RB(t),a.prev=2,a.next=5,KU(CB);case 5:return r=a.sent,o={api:r.api},a.next=9,YU(hz,o);case 9:return i=a.sent,a.next=12,zU(th({results:i}));case 12:a.next=19;break;case 14:return a.prev=14,a.t0=a.catch(2),L.Z.warn("Categories failed to load: ".concat(a.t0)),a.next=19,zU(n.createErrorAction(a.t0));case 19:case"end":return a.stop()}}),vz,null,[[2,14]])}function wz(){return mz().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,kB(Qd,bz);case 2:case"end":return e.stop()}}),gz)}function Oz(e){return(Oz="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Ez(){Ez=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==Oz(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}var _z=Ez().mark(Sz),xz=Ez().mark(jz);function Sz(e){var t,n,r,o,i,a,u,c,s,l;return Ez().wrap((function(f){for(;;)switch(f.prev=f.next){case 0:return t=e.payload,n=t.errorHandlerId,r=RB(n),f.next=5,zU(r.createClearingAction());case 5:return f.prev=5,o=t.filters,f.next=9,KU(CB);case 9:return i=f.sent,a={api:i.api,auth:!0,filters:o},f.next=13,YU(TB,a);case 13:return u=f.sent,c=u.count,s=u.page_size,l=u.results,f.next=17,zU(rf({count:c,pageSize:s,results:l}));case 17:f.next=26;break;case 19:return f.prev=19,f.t0=f.catch(5),L.Z.warn("Search results failed to load: ".concat(f.t0)),f.next=24,zU(r.createErrorAction(f.t0));case 24:return f.next=26,zU({type:ef});case 26:case"end":return f.stop()}}),_z,null,[[5,19]])}function jz(){return Ez().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,IB(Xl,Sz);case 2:case"end":return e.stop()}}),xz)}var Pz=function(e){var t=e.api;return ce()(t,"api state is required."),$t({endpoint:"site",apiState:t})};function kz(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Iz(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?kz(Object(n),!0).forEach((function(t){Tz(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):kz(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Tz(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Rz="FETCH_SITE_STATUS",Cz="LOAD_SITE_STATUS",Az="LOADED_PAGE_IS_ANONYMOUS",Nz={readOnly:!1,notice:null,loadedPageIsAnonymous:!1},Lz=function(e){var t=e.readOnly,n=e.notice;return{type:Cz,payload:{readOnly:t,notice:n}}};function Dz(e){return(Dz="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Mz(){Mz=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==Dz(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}var Fz=Mz().mark(Bz),Uz=Mz().mark(Hz);function Bz(){var e,t,n,r,o;return Mz().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,KU(CB);case 2:return e=i.sent,t={api:e.api},i.prev=4,i.next=7,YU(Pz,t);case 7:return n=i.sent,r=n.read_only,o=n.notice,i.next=12,zU(Lz({readOnly:r,notice:o}));case 12:i.next=17;break;case 14:i.prev=14,i.t0=i.catch(4),L.Z.error("Could not fetch site status: ".concat(i.t0));case 17:case"end":return i.stop()}}),Fz,null,[[4,14]])}function Hz(){return Mz().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,IB(Rz,Bz);case 2:case"end":return e.stop()}}),Uz)}function qz(e){return(qz="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function zz(){zz=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==qz(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}var Gz=zz().mark(Vz),Wz=zz().mark(Yz);function Vz(e){var t,n,r,o,i,a,u,c;return zz().wrap((function(s){for(;;)switch(s.prev=s.next){case 0:return t=e.payload,n=t.errorHandlerId,r=RB(n),s.next=5,zU(r.createClearingAction());case 5:return s.prev=5,o=t.filters,s.next=9,KU(CB);case 9:return i=s.sent,a={api:i.api,filters:o},s.next=13,YU(Xt,a);case 13:return u=s.sent,c=u.results,s.next=17,zU(pb({results:c}));case 17:s.next=24;break;case 19:return s.prev=19,s.t0=s.catch(5),L.Z.warn("Autcomplete results failed to load: ".concat(s.t0)),s.next=24,zU(r.createErrorAction(s.t0));case 24:case"end":return s.stop()}}),Gz,null,[[5,19]])}function Yz(){return zz().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,IB(cb,zz().mark((function e(){var t,n,r,o=arguments;return zz().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:for(t=o.length,n=new Array(t),r=0;r<t;r++)n[r]=o[r];return e.next=3,WU({fetch:YU.apply(void 0,[Vz].concat(n)),cancel:qU(sb)});case 3:case"end":return e.stop()}}),e)})));case 2:case"end":return e.stop()}}),Wz)}function Zz(e){var t=e.api;return $t({auth:!0,endpoint:"addons/language-tools",method:"GET",params:{app:t.clientApp},apiState:t})}function $z(e){return($z="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Kz(){Kz=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==$z(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}var Qz=Kz().mark(Jz),Xz=Kz().mark(eG);function Jz(e){var t,n,r,o,i;return Kz().wrap((function(a){for(;;)switch(a.prev=a.next){case 0:return t=e.payload.errorHandlerId,n=RB(t),a.next=4,zU(n.createClearingAction());case 4:return a.prev=4,a.next=7,KU(CB);case 7:return r=a.sent,o={api:r.api},a.next=11,YU(Zz,o);case 11:return i=a.sent,a.next=14,zU(nN({languageTools:i.results}));case 14:a.next=21;break;case 16:return a.prev=16,a.t0=a.catch(4),L.Z.warn("Loading Language tools failed: ".concat(a.t0)),a.next=21,zU(n.createErrorAction(a.t0));case 21:case"end":return a.stop()}}),Qz,null,[[4,16]])}function eG(){return Kz().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,IB(JA,Jz);case 2:case"end":return e.stop()}}),Xz)}function tG(e){return(tG="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function nG(){nG=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==tG(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}var rG=nG().mark(iG),oG=nG().mark(aG);function iG(e){var t,n,r,o,i,a,u,c;return nG().wrap((function(s){for(;;)switch(s.prev=s.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.message,o=t.userId,i=RB(n),s.next=4,zU(i.createClearingAction());case 4:return s.prev=4,s.next=7,KU(CB);case 7:return a=s.sent,u={api:a.api,message:r,userId:o},s.next=11,YU(Kq,u);case 11:return c=s.sent,s.next=14,zU(tL({message:c.message,reporter:c.reporter,userId:o}));case 14:s.next=23;break;case 16:return s.prev=16,s.t0=s.catch(4),L.Z.warn("Reporting user for abuse failed: ".concat(s.t0)),s.next=21,zU(i.createErrorAction(s.t0));case 21:return s.next=23,zU(JN({userId:o}));case 23:case"end":return s.stop()}}),rG,null,[[4,16]])}function aG(){return nG().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,IB(QN,iG);case 2:case"end":return e.stop()}}),oG)}var uG=["api","picture","userId"];function cG(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function sG(e){var t=e.api;return ce()(t,"api state is required."),$t({auth:!0,endpoint:"accounts/profile",apiState:t})}function lG(e){var t=e.api,n=e.picture,r=e.userId,o=cG(e,uG);ce()(t,"api state is required."),ce()(r,"userId is required.");var i=o;if(n){var a=new(he());Object.keys(o).forEach((function(e){var t=o[e];a.set(e,null===t?"":t)})),a.set("picture_upload",n),i=a}return $t({auth:!0,body:i,endpoint:"accounts/account/".concat(r),method:"PATCH",apiState:t})}function fG(e){var t=e.api,n=e.userId;return ce()(t,"api state is required."),ce()(n,"userId is required."),$t({auth:!0,endpoint:"accounts/account/".concat(n),apiState:t})}function pG(e){var t=e.api,n=e.userId;return ce()(t,"api state is required."),ce()(n,"userId is required."),$t({auth:!0,endpoint:"accounts/account/".concat(n,"/notifications"),apiState:t})}function dG(e){var t=e.api,n=e.notifications,r=e.userId;return ce()(t,"api state is required."),ce()(r,"userId is required."),ce()(n,"notifications are required."),$t({auth:!0,body:n,endpoint:"accounts/account/".concat(r,"/notifications"),method:"POST",apiState:t})}function hG(e){var t=e.api,n=e.userId;return ce()(t,"api state is required."),ce()(n,"userId is required."),$t({auth:!0,endpoint:"accounts/account/".concat(n,"/picture"),method:"DELETE",apiState:t})}function yG(e){var t=e.api,n=e.userId;return ce()(t,"api state is required."),ce()(n,"userId is required."),$t({auth:!0,credentials:!0,endpoint:"accounts/account/".concat(n),method:"DELETE",apiState:t})}function mG(e){return $t({auth:!1,apiState:e.api,endpoint:"accounts/unsubscribe",method:"POST",body:{hash:e.hash,notification:e.notification,token:e.token}})}function vG(e){return(vG="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function gG(){gG=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==vG(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}var bG=gG().mark(TG),wG=gG().mark(RG),OG=gG().mark(CG),EG=gG().mark(AG),_G=gG().mark(NG),xG=gG().mark(LG),SG=gG().mark(DG),jG=gG().mark(MG);function PG(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function kG(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?PG(Object(n),!0).forEach((function(t){IG(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):PG(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function IG(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function TG(e){var t,n,r,o,i,a,u,c;return gG().wrap((function(s){for(;;)switch(s.prev=s.next){case 0:return t=e.payload,n=t.token,s.next=4,KU(CB);case 4:return r=s.sent,o={api:kG(kG({},r.api),{},{token:n})},s.prev=6,s.next=9,YU(sG,o);case 9:return i=s.sent,s.next=12,zU(We({user:i}));case 12:return a=i.site_status,u=a.read_only,c=a.notice,s.next=15,zU(Lz({readOnly:u,notice:c}));case 15:s.next=26;break;case 17:if(s.prev=17,s.t0=s.catch(6),!s.t0.response||!s.t0.response.status||401!==s.t0.response.status){s.next=25;break}return L.Z.warn("Could not load user profile: ".concat(s.t0,", logging out user")),s.next=23,zU(Ze());case 23:s.next=26;break;case 25:throw s.t0;case 26:case"end":return s.stop()}}),bG,null,[[6,17]])}function RG(e){var t,n,r,o,i,a,u,c,s,l,f,p,d,h;return gG().wrap((function(y){for(;;)switch(y.prev=y.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.notifications,o=t.picture,i=t.pictureData,a=t.userFields,u=t.userId,c=RB(n),y.next=4,zU(c.createClearingAction());case 4:return y.prev=4,y.next=7,KU(CB);case 7:return s=y.sent,l=kG({api:s.api,picture:o,userId:u},a),y.next=11,YU(lG,l);case 11:return f=y.sent,o&&(f.picture_url=i),y.next=15,zU(Ve({user:f}));case 15:if(!Object.keys(r).length){y.next=23;break}return p={api:s.api,notifications:r,userId:u},y.next=19,YU(dG,p);case 19:return d=y.sent,void 0!==r.announcements&&-1!==(h=d.findIndex((function(e){return"announcements"===e.name})))&&(d[h].enabled=r.announcements,L.Z.debug('Optimistically set user value for "announcements" notification')),y.next=23,zU(Ke({notifications:d,userId:f.id}));case 23:y.next=30;break;case 25:return y.prev=25,y.t0=y.catch(4),L.Z.warn("Could not update user account: ".concat(y.t0)),y.next=30,zU(c.createErrorAction(y.t0));case 30:return y.prev=30,y.next=33,zU({type:Ie,payload:{}});case 33:return y.finish(30);case 34:case"end":return y.stop()}}),wG,null,[[4,25,30,34]])}function CG(e){var t,n,r,o,i,a,u;return gG().wrap((function(c){for(;;)switch(c.prev=c.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.userId,o=RB(n),c.next=4,zU(o.createClearingAction());case 4:return c.prev=4,c.next=7,KU(CB);case 7:return i=c.sent,a={api:i.api,userId:r},c.next=11,YU(fG,a);case 11:return u=c.sent,c.next=14,zU(Ve({user:u}));case 14:c.next=21;break;case 16:return c.prev=16,c.t0=c.catch(4),L.Z.warn("User account failed to load: ".concat(c.t0)),c.next=21,zU(o.createErrorAction(c.t0));case 21:case"end":return c.stop()}}),OG,null,[[4,16]])}function AG(e){var t,n,r,o,i,a,u;return gG().wrap((function(c){for(;;)switch(c.prev=c.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.userId,o=RB(n),c.next=4,zU(o.createClearingAction());case 4:return c.prev=4,c.next=7,KU(CB);case 7:return i=c.sent,a={api:i.api,userId:r},c.next=11,YU(pG,a);case 11:return u=c.sent,c.next=14,zU(Ke({notifications:u,userId:r}));case 14:c.next=21;break;case 16:return c.prev=16,c.t0=c.catch(4),L.Z.warn("User notifications failed to load: ".concat(c.t0)),c.next=21,zU(o.createErrorAction(c.t0));case 21:case"end":return c.stop()}}),EG,null,[[4,16]])}function NG(e){var t,n,r,o,i,a,u;return gG().wrap((function(c){for(;;)switch(c.prev=c.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.userId,o=RB(n),c.next=4,zU(o.createClearingAction());case 4:return c.prev=4,c.next=7,KU(CB);case 7:return i=c.sent,a={api:i.api,userId:r},c.next=11,YU(hG,a);case 11:return u=c.sent,c.next=14,zU(Ve({user:u}));case 14:c.next=21;break;case 16:return c.prev=16,c.t0=c.catch(4),L.Z.warn("Could not delete user picture: ".concat(c.t0)),c.next=21,zU(o.createErrorAction(c.t0));case 21:case"end":return c.stop()}}),_G,null,[[4,16]])}function LG(e){var t,n,r,o,i,a;return gG().wrap((function(u){for(;;)switch(u.prev=u.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.userId,o=RB(n),u.next=4,zU(o.createClearingAction());case 4:return u.prev=4,u.next=7,KU(CB);case 7:return i=u.sent,a={api:i.api,userId:r},u.next=11,YU(yG,a);case 11:return u.next=13,zU(Ye({userId:r}));case 13:u.next=20;break;case 15:return u.prev=15,u.t0=u.catch(4),L.Z.warn("Could not delete user account: ".concat(u.t0)),u.next=20,zU(o.createErrorAction(u.t0));case 20:case"end":return u.stop()}}),xG,null,[[4,15]])}function DG(e){var t,n,r,o,i,a,u,c;return gG().wrap((function(s){for(;;)switch(s.prev=s.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.hash,o=t.token,i=t.notification,a=RB(n),s.next=4,zU(a.createClearingAction());case 4:return s.prev=4,s.next=7,KU(CB);case 7:return u=s.sent,c={api:u.api,hash:r,notification:i,token:o},s.next=11,YU(mG,c);case 11:return s.next=13,zU(rt({hash:r,notification:i,token:o}));case 13:s.next=22;break;case 15:return s.prev=15,s.t0=s.catch(4),L.Z.warn("Could not unsubscribe from ".concat(i," notification: ").concat(s.t0)),s.next=20,zU(a.createErrorAction(s.t0));case 20:return s.next=22,zU(ot({hash:r,notification:i,token:o}));case 22:case"end":return s.stop()}}),SG,null,[[4,15]])}function MG(){return gG().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,IB(Fe,LG);case 2:return e.next=4,IB(Le,NG);case 4:return e.next=6,IB(Ae,CG);case 6:return e.next=8,IB(De,AG);case 8:return e.next=10,IB(ft,TG);case 10:return e.next=12,IB(Be,DG);case 12:return e.next=14,IB(Te,RG);case 14:case"end":return e.stop()}}),jG)}var FG=["api","slug"];function UG(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var BG=function(e){var t=e.api,n=e.slug,r=e.versionId;return ce()(n,"slug is required"),ce()(r,"versionId is required"),$t({apiState:t,auth:!0,endpoint:"addons/addon/".concat(n,"/versions/").concat(r,"/")})},HG=function(e){var t=e.api,n=e.slug,r=UG(e,FG);return ce()(n,"slug is required"),$t({apiState:t,auth:!0,endpoint:"addons/addon/".concat(n,"/versions/"),params:r})};function qG(e){return(qG="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function zG(){zG=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==qG(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}var GG=zG().mark(YG),WG=zG().mark(ZG),VG=zG().mark($G);function YG(e){var t,n,r,o,i,a,u,c;return zG().wrap((function(s){for(;;)switch(s.prev=s.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.slug,o=t.versionId,i=RB(n),s.next=4,zU(i.createClearingAction());case 4:return s.prev=4,s.next=7,KU(CB);case 7:return a=s.sent,u={api:a.api,slug:r,versionId:o},s.next=11,YU(BG,u);case 11:return c=s.sent,s.next=14,zU(yf({slug:r,versions:[c]}));case 14:s.next=21;break;case 16:return s.prev=16,s.t0=s.catch(4),L.Z.warn("Failed to fetch version: ".concat(s.t0)),s.next=21,zU(i.createErrorAction(s.t0));case 21:case"end":return s.stop()}}),GG,null,[[4,16]])}function ZG(e){var t,n,r,o,i,a,u,c;return zG().wrap((function(s){for(;;)switch(s.prev=s.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.page,o=t.slug,i=RB(n),s.next=4,zU(i.createClearingAction());case 4:return s.prev=4,s.next=7,KU(CB);case 7:return a=s.sent,u={api:a.api,page:r,slug:o},s.next=11,YU(HG,u);case 11:return c=s.sent,s.next=14,zU(yf({slug:o,versions:c.results}));case 14:s.next=21;break;case 16:return s.prev=16,s.t0=s.catch(4),L.Z.warn("Failed to fetch versions: ".concat(s.t0)),s.next=21,zU(i.createErrorAction(s.t0));case 21:case"end":return s.stop()}}),WG,null,[[4,16]])}function $G(){return zG().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,IB(lf,YG);case 2:return e.next=4,IB(ff,ZG);case 4:case"end":return e.stop()}}),VG)}function KG(e){return(KG="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function QG(){QG=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==KG(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}var XG=QG().mark(JG);function JG(){return QG().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,GU([ZU(oz),ZU(dz),ZU(FB),ZU(Yz),ZU(WB),ZU(wz),ZU(TH),ZU(FH),ZU($H),ZU(eG),ZU(nq),ZU(Zq),ZU(jz),ZU(Hz),ZU(aG),ZU(MG),ZU($G)]);case 2:case"end":return e.stop()}}),XG)}var eW=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},tW="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};function nW(e,t){for(var n in t){var r=t[n];r.configurable=r.enumerable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,n,r)}return e}var rW="proc first argument (Saga function result) must be an iterator",oW={toString:function(){return"@@redux-saga/CHANNEL_END"}},iW={toString:function(){return"@@redux-saga/TASK_CANCEL"}},aW=function(){return rU},uW=function(e){return"symbol"===(void 0===e?"undefined":tW(e))?function(t){return t.type===e}:function(t){return t.type===String(e)}},cW=function(e){return function(t){return e.some((function(e){return lW(e)(t)}))}},sW=function(e){return function(t){return e(t)}};function lW(e){return("*"===e?aW:sU.array(e)?cW:sU.stringableFunc(e)?uW:sU.func(e)?sW:uW)(e)}function fW(e,t,n){var r=[],o=void 0,i=!1;function a(e){c(),n(e,!0)}function u(e){r.push(e),e.cont=function(u,c){i||(fU(r,e),e.cont=oU,c?a(u):(e===t&&(o=u),r.length||(i=!0,n(o))))}}function c(){i||(i=!0,r.forEach((function(e){e.cont=oU,e.cancel()})),r=[])}return u(t),{addTask:u,cancelAll:c,abort:a,getTasks:function(){return r},taskNames:function(){return r.map((function(e){return e.name}))}}}function pW(e){var t=e.context,n=e.fn,r=e.args;if(sU.iterator(n))return n;var o,i,a=void 0,u=void 0;try{a=n.apply(t,r)}catch(e){u=e}return sU.iterator(a)?a:gU(u?function(){throw u}:(o=void 0,i={done:!1,value:a},function(e){return o?{done:!0,value:e}:(o=!0,i)}))}var dW=function(e){return{fn:e}};function hW(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(){return oU},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:oU,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:oU,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},i=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},a=arguments.length>6&&void 0!==arguments[6]?arguments[6]:0,u=arguments.length>7&&void 0!==arguments[7]?arguments[7]:"anonymous",c=arguments[8];aU(e,sU.iterator,rW);var s="[...effects]",l=wU(L,OU(s,"all("+s+")")),f=i.sagaMonitor,p=i.logger,d=i.onError,h=p||bU,y=function(e){var t=e.sagaStack;!t&&e.stack&&(t=-1!==e.stack.split("\n")[0].indexOf(e.message)?e.stack:"Error: "+e.message+"\n"+e.stack),h("error","uncaught at "+u,t||e.message||e)},m=xB(t),v=Object.create(o);_.cancel=oU;var g=z(a,u,e,c),b={name:u,cancel:O,isRunning:!0},w=fW(0,b,x);function O(){b.isRunning&&!b.isCancelled&&(b.isCancelled=!0,_(iW))}function E(){e._isRunning&&!e._isCancelled&&(e._isCancelled=!0,w.cancelAll(),x(iW))}return c&&(c.cancel=E),e._isRunning=!0,_(),g;function _(t,n){if(!b.isRunning)throw new Error("Trying to resume an already finished generator");try{var r=void 0;n?r=e.throw(t):t===iW?(b.isCancelled=!0,_.cancel(),r=sU.func(e.return)?e.return(iW):{done:!0,value:iW}):r=t===oW?sU.func(e.return)?e.return():{done:!0}:e.next(t),r.done?(b.isMainRunning=!1,b.cont&&b.cont(r.value)):S(r.value,a,"",_)}catch(e){b.isCancelled&&y(e),b.isMainRunning=!1,b.cont(e,!0)}}function x(t,n){e._isRunning=!1,m.close(),n?(t instanceof Error&&Object.defineProperty(t,"sagaStack",{value:"at "+u+" \n "+(t.sagaStack||t.stack),configurable:!0}),g.cont||(t instanceof Error&&d?d(t):y(t)),e._error=t,e._isAborted=!0,e._deferredEnd&&e._deferredEnd.reject(t)):(e._result=t,e._deferredEnd&&e._deferredEnd.resolve(t)),g.cont&&g.cont(t,n),g.joiners.forEach((function(e){return e.cb(t,n)})),g.joiners=null}function S(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",r=arguments[3],o=yU();f&&f.effectTriggered({effectId:o,parentEffectId:t,label:n,effect:e});var i=void 0;function a(e,t){i||(i=!0,r.cancel=oU,f&&(t?f.effectRejected(o,e):f.effectResolved(o,e)),r(e,t))}a.cancel=oU,r.cancel=function(){if(!i){i=!0;try{a.cancel()}catch(e){y(e)}a.cancel=oU,f&&f.effectCancelled(o)}};var c=void 0;return sU.promise(e)?j(e,a):sU.helper(e)?C(dW(e),o,a):sU.iterator(e)?P(e,o,u,a):sU.array(e)?l(e,o,a):(c=XU.take(e))?k(c,a):(c=XU.put(e))?I(c,a):(c=XU.all(e))?L(c,o,a):(c=XU.race(e))?D(c,o,a):(c=XU.call(e))?T(c,o,a):(c=XU.cps(e))?R(c,a):(c=XU.fork(e))?C(c,o,a):(c=XU.join(e))?A(c,a):(c=XU.cancel(e))?N(c,a):(c=XU.select(e))?M(c,a):(c=XU.actionChannel(e))?F(c,a):(c=XU.flush(e))?B(c,a):(c=XU.cancelled(e))?U(c,a):(c=XU.getContext(e))?H(c,a):(c=XU.setContext(e))?q(c,a):a(e)}function j(e,t){var n=e[JF];sU.func(n)?t.cancel=n:sU.func(e.abort)&&(t.cancel=function(){return e.abort()}),e.then(t,(function(e){return t(e,!0)}))}function P(e,o,a,u){hW(e,t,n,r,v,i,o,a,u)}function k(e,t){var n=e.channel,r=e.pattern,o=e.maybe;n=n||m;var i=function(e){return e instanceof Error?t(e,!0):gB(e)&&!o?t(oW):t(e)};try{n.take(i,lW(r))}catch(e){return t(e,!0)}t.cancel=i.cancel}function I(e,t){var r=e.channel,o=e.action,i=e.resolve;fB((function(){var e=void 0;try{e=(r?r.put:n)(o)}catch(e){if(r||i)return t(e,!0);y(e)}if(!i||!sU.promise(e))return t(e);j(e,t)}))}function T(e,t,n){var r=e.context,o=e.fn,i=e.args,a=void 0;try{a=o.apply(r,i)}catch(e){return n(e,!0)}return sU.promise(a)?j(a,n):sU.iterator(a)?P(a,t,o.name,n):n(a)}function R(e,t){var n=e.context,r=e.fn,o=e.args;try{var i=function(e,n){return sU.undef(e)?t(n):t(e,!0)};r.apply(n,o.concat(i)),i.cancel&&(t.cancel=function(){return i.cancel()})}catch(e){return t(e,!0)}}function C(e,o,a){var u=e.context,c=e.fn,s=e.args,l=e.detached,f=pW({context:u,fn:c,args:s});try{pB();var p=hW(f,t,n,r,v,i,o,c.name,l?null:oU);l?a(p):f._isRunning?(w.addTask(p),a(p)):f._error?w.abort(f._error):a(p)}finally{hB()}}function A(e,t){if(e.isRunning()){var n={task:g,cb:t};t.cancel=function(){return fU(e.joiners,n)},e.joiners.push(n)}else e.isAborted()?t(e.error(),!0):t(e.result())}function N(e,t){e===tU&&(e=g),e.isRunning()&&e.cancel(),t()}function L(e,t,n){var r=Object.keys(e);if(!r.length)return n(sU.array(e)?[]:{});var o=0,i=void 0,a={},u={};r.forEach((function(t){var c=function(u,c){i||(c||gB(u)||u===oW||u===iW?(n.cancel(),n(u,c)):(a[t]=u,++o===r.length&&(i=!0,n(sU.array(e)?pU(eW({},a,{length:r.length})):a))))};c.cancel=oU,u[t]=c})),n.cancel=function(){i||(i=!0,r.forEach((function(e){return u[e].cancel()})))},r.forEach((function(n){return S(e[n],t,n,u[n])}))}function D(e,t,n){var r=void 0,o=Object.keys(e),i={};o.forEach((function(t){var a=function(i,a){if(!r)if(a)n.cancel(),n(i,!0);else if(!gB(i)&&i!==oW&&i!==iW){var u;n.cancel(),r=!0;var c=((u={})[t]=i,u);n(sU.array(e)?[].slice.call(eW({},c,{length:o.length})):c)}};a.cancel=oU,i[t]=a})),n.cancel=function(){r||(r=!0,o.forEach((function(e){return i[e].cancel()})))},o.forEach((function(n){r||S(e[n],t,n,i[n])}))}function M(e,t){var n=e.selector,o=e.args;try{t(n.apply(void 0,[r()].concat(o)))}catch(e){t(e,!0)}}function F(e,n){var r=e.pattern,o=e.buffer,i=lW(r);i.pattern=r,n(_B(t,o||uB(),i))}function U(e,t){t(!!b.isCancelled)}function B(e,t){e.flush(t)}function H(e,t){t(v[e])}function q(e,t){lU(v,e),t()}function z(e,t,n,r){var o,i;return n._deferredEnd=null,(o={})[KF]=!0,o.id=e,o.name=t,"done",(i={}).done=i.done||{},i.done.get=function(){if(n._deferredEnd)return n._deferredEnd.promise;var e=dU();return n._deferredEnd=e,n._isRunning||(n._error?e.reject(n._error):e.resolve(n._result)),e.promise},o.cont=r,o.joiners=[],o.cancel=E,o.isRunning=function(){return n._isRunning},o.isCancelled=function(){return n._isCancelled},o.isAborted=function(){return n._isAborted},o.result=function(){return n._result},o.error=function(){return n._error},o.setContext=function(e){aU(e,sU.object,_U("task",e)),lU(v,e)},nW(o,i),o}}var yW="runSaga(storeInterface, saga, ...args): saga argument must be a Generator function!";function mW(e,t){for(var n=arguments.length,r=Array(n>2?n-2:0),o=2;o<n;o++)r[o-2]=arguments[o];var i=void 0;sU.iterator(e)?(i=e,e=t):(aU(t,sU.func,yW),aU(i=t.apply(void 0,r),sU.iterator,yW));var a=e,u=a.subscribe,c=a.dispatch,s=a.getState,l=a.context,f=a.sagaMonitor,p=a.logger,d=a.onError,h=yU();f&&(f.effectTriggered=f.effectTriggered||oU,f.effectResolved=f.effectResolved||oU,f.effectRejected=f.effectRejected||oU,f.effectCancelled=f.effectCancelled||oU,f.actionDispatched=f.actionDispatched||oU,f.effectTriggered({effectId:h,root:!0,parentEffectId:0,effect:{root:!0,saga:t,args:r}}));var y=hW(i,u,xU(c),s,l,{sagaMonitor:f,logger:p,onError:d},h,t.name);return f&&f.effectResolved(h,y),y}function vW(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}const gW=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.context,n=void 0===t?{}:t,r=vW(e,["context"]),o=r.sagaMonitor,i=r.logger,a=r.onError;if(sU.func(r))throw new Error("Saga middleware no longer accept Generator functions. Use sagaMiddleware.run instead");if(i&&!sU.func(i))throw new Error("`options.logger` passed to the Saga middleware is not a function!");if(a&&!sU.func(a))throw new Error("`options.onError` passed to the Saga middleware is not a function!");if(r.emitter&&!sU.func(r.emitter))throw new Error("`options.emitter` passed to the Saga middleware is not a function!");function u(e){var t=e.getState,c=e.dispatch,s=bB();return s.emit=(r.emitter||iU)(s.emit),u.run=mW.bind(null,{context:n,subscribe:s.subscribe,dispatch:c,getState:t,sagaMonitor:o,logger:i,onError:a}),function(e){return function(t){o&&o.actionDispatched&&o.actionDispatched(t);var n=e(t);return s.emit(t),n}}}return u.run=function(){throw new Error("Before running a Saga, you must mount the Saga middleware on the Store using applyMiddleware")},u.setContext=function(e){aU(e,sU.object,_U("sagaMiddleware",e)),lU(n,e)},u};var bW=a(13586);function wW(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function OW(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?wW(Object(n),!0).forEach((function(t){EW(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):wW(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function EW(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var _W={context:D.cs};function xW(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function SW(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?xW(Object(n),!0).forEach((function(t){jW(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):xW(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function jW(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function PW(e){return(PW="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function kW(e){var t={code:D.vY,messages:[]};L.Z.debug("Extracting messages from error object:",e);var n=function(e){var t=e.oldCode,n=e.newCode;L.Z.warn("Replacing error code ".concat(t," with ").concat(n))};return e&&e.response&&e.response.data&&Object.keys(e.response.data).forEach((function(r){var o=e.response.data[r];if(Array.isArray(o))o.forEach((function(e){t.messages.push(e)}));else if("code"===r)t.code=o;else if("is_disabled_by_developer"===r){if(!0===o){var i=D.e0;n({oldCode:t.code,newCode:i}),t.code=i}}else if("is_disabled_by_mozilla"===r){if(!0===o){var a=D.Uw;n({oldCode:t.code,newCode:a}),t.code=a}}else"string"==typeof o||"object"===PW(o)?t.messages.push(o):L.Z.warn('Ignoring key "'.concat(r,'": "').concat(o,'" in data of error response'))})),t.messages.length||L.Z.warn("Error object did not contain any messages: ".concat(e)),t}var IW={};function TW(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function RW(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?TW(Object(n),!0).forEach((function(t){CW(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):TW(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function CW(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var AW=function(){return function(e){return function(t){return L.Z.info("Dispatching ".concat(t.type)),e(t)}}};function NW(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e._applyMiddleware,r=void 0===n?Mo.md:n,o=e._config,i=void 0===o?t.Z:o,a=e._createLogger,u=void 0===a?bW.createLogger:a,c=e._minimalReduxLogger,s=void 0===c?AW:c,l=e._window,f=void 0===l?"undefined"!=typeof window?window:null:l,p=e.sagaMiddleware,d=void 0===p?null:p,h=e.routerMiddleware,y=void 0===h?null:h,m=i.get("isDevelopment"),v=[];return m&&(i.get("server")?v.push(s):v.push(u())),d&&v.push(d),y&&v.push(y),(0,Mo.qC)(r.apply(void 0,v),i.get("enableDevTools")&&f&&f.__REDUX_DEVTOOLS_EXTENSION__?f.__REDUX_DEVTOOLS_EXTENSION__():function(e){return e})}var LW=function(e){var t=e.history,n=e.reducers;return(0,Mo.UY)(RW(RW({},n),{},{router:(0,i.iz)(t)}))},DW={abuse:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:gP,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case pP:var n=t.payload.addon;return lP(lP({},e),{},{bySlug:lP(lP({},e.bySlug),{},fP({},n.slug,lP(lP({},e.bySlug[n.slug]),{},{uiVisible:!1})))});case dP:var r=t.payload,o=r.addon,i=r.message,a=r.reporter;return lP(lP({},e),{},{bySlug:lP(lP({},e.bySlug),{},fP({},o.slug,{message:i,reporter:a,uiVisible:!1})),loading:!1});case hP:return lP(lP({},e),{},{loading:!0});case yP:var u=t.payload.addon;return lP(lP({},e),{},{bySlug:lP(lP({},e.bySlug),{},fP({},u.slug,lP(lP({},e.bySlug[u.slug]),{},{uiVisible:!0})))});case vP:return lP(lP({},e),{},{loading:!1});default:return e}},addons:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ta,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case dt:return $i($i({},e),{},{lang:t.payload.lang});case Ji:var n=t.payload.slug;return $i($i({},e),{},{loadingByIdInURL:$i($i({},e.loadingByIdInURL),{},Ki({},n,!0))});case ea:var r=t.payload,o=r.addon,i=r.slug,a=$i({},e.byID),u=$i({},e.byGUID),c=$i({},e.bySlug),s=$i({},e.byIdInURL),l=$i({},e.loadingByIdInURL),f=ua(o,e.lang);return a["".concat(f.id)]=f,s[i]=f.id,l[i]=!1,f.slug&&(c[f.slug.toLowerCase()]=f.id),f.guid&&(u[f.guid]=f.id),$i($i({},e),{},{byID:a,byGUID:u,bySlug:c,byIdInURL:s,loadingByIdInURL:l});case yi:var p=t.payload.addonId,d=sa(e,p);return d?$i($i({},e),{},{byID:$i($i({},e.byID),{},Ki({},"".concat(p),void 0)),byGUID:$i($i({},e.byGUID),{},Ki({},d.guid,void 0)),bySlug:$i($i({},e.bySlug),{},Ki({},d.slug.toLowerCase(),void 0)),loadingByIdInURL:$i($i({},e.loadingByIdInURL),{},Ki({},d.slug,void 0))}):e;case mi:var h=t.payload,y=h.addonId,m=h.oldReview,v=h.newReview,g=sa(e,y);if(!g)return e;var b=g.ratings,w=b?b.average:0,O=b?b.count:0,E=b?b.text_count:0,_=b?$i({},b.grouped_counts):ya();m&&m.score&&_[m.score]>0&&(_[m.score]-=1),v&&v.score&&(_[v.score]+=1);var x=O;if(w&&x&&m&&m.score){var S=x-1;w=0===S?0:(w*x-m.score)/S,x=S}return w=(w*x+Number(v.score))/(x+1),m?!m.body&&v.body&&(E+=1):(O+=1,v.body&&(E+=1)),$i($i({},e),{},{byID:$i($i({},e.byID),{},Ki({},y,$i($i({},g),{},{ratings:$i($i({},b),{},{average:w,bayesian_average:w,count:O,grouped_counts:_,text_count:E})})))});case Qi:var j=t.payload.slug;return $i($i({},e),{},{infoBySlug:$i($i({},e.infoBySlug),{},Ki({},j,{info:void 0,loading:!0}))});case Xi:var P=t.payload,k=P.slug,I=P.info;return $i($i({},e),{},{infoBySlug:$i($i({},e.infoBySlug),{},Ki({},k,{info:ha(I,e.lang),loading:!1}))});default:return e}},addonsByAuthors:gl,api:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:bt,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case ft:return st(st({},e),{},{token:t.payload.token});case dt:return st(st({},e),{},{lang:t.payload.lang});case pt:return st(st({},e),{},{clientApp:t.payload.clientApp});case ht:return st(st({},e),{},{regionCode:t.payload.regionCode});case yt:return st(st({},e),{},{requestId:t.payload.requestId});case mt:var n=Se()(t.payload.userAgent),r=n.browser,o=n.device,i=n.os;return st(st({},e),{},{userAgent:t.payload.userAgent,userAgentInfo:{browser:r,device:o,os:i}});case Re:return st(st({},e),{},{token:null});default:return e}},autocomplete:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:lb,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case sb:return ib(ib({},e),{},{loading:!1,suggestions:[]});case cb:return ib(ib({},lb),{},{lang:e.lang,loading:!0});case ub:var n=t.payload,r=n.results.filter((function(e){return null!==e.name})).map((function(t){return db(t,e.lang)}));return ib(ib({},e),{},{loading:!1,suggestions:r});case dt:return ib(ib({},e),{},{lang:t.payload.lang});default:return e}},blocks:GC,categories:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Jd,n=arguments.length>1?arguments[1]:void 0;switch(n.type){case Qd:return $d($d({},Jd),{},{loading:!0});case Xd:var r=n.payload,o=nh();r.results.forEach((function(t){t&&t.application?o[t.application]?o[t.application][t.type]?o[t.application][t.type].push(t):L.Z.warn((0,e.f9)(Vd||(Vd=Yd(['add-on category for unknown add-on type\n "','" for clientApp "','" received\n from API.'])),t.type,t.type)):L.Z.warn((0,e.f9)(Wd||(Wd=Yd(['Category data for unknown clientApp\n "','" received from API.'])),t.application)):L.Z.warn("category or category.application was falsey: %o",t)}));var i={};return Object.keys(o).forEach((function(e){i[e]={},Object.keys(o[e]).forEach((function(t){i[e][t]=o[e][t].sort((function(e,t){return e.name.localeCompare(t.name)})).reduce((function(e,t){return $d($d({},e),{},Kd({},t.slug,t))}),{})}))})),{categories:i,loading:!1};default:return t}},collections:yu,errors:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:IW,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case D.kl:return SW(SW({},e),{},jW({},t.payload.id,null));case D.Go:var n=kW(t.payload.error),r=n.code,o=n.messages;return SW(SW({},e),{},jW({},t.payload.id,{code:r,messages:o,responseStatusCode:t.payload.error.response?t.payload.error.response.status:null}));case D.rs:var i=e[t.payload.id]||{messages:[]};return i.messages.push(t.payload.message),SW(SW({},e),{},jW({},t.payload.id,i));default:return e}},errorPage:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:SF,t=arguments.length>1?arguments[1]:void 0,n=t.payload;switch(t.type){case i.nk:return e.clearOnNext?SF:EF(EF({},e),{},{clearOnNext:!0});case xF:var r=500;return n.error&&n.error.response&&n.error.response.status&&(r=n.error.response.status),EF(EF({},e),{},{error:n.error,hasError:!0,statusCode:r});default:return e}},experiments:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Qw,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case Kw:var n=t.payload,r=n.id,o=n.variant;return Zw(Zw({},e),{},$w({},r,o));default:return e}},home:Rl,installations:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,n=t.type,r=t.payload;function o(t){var o=r.guid,i=e[o];if(!i)throw new Error("Cannot reduce type ".concat(n,"; no add-on with guid ").concat(o," found."));return yv(yv({},i),t)}switch(n){case D.tX:return yv(yv({},e),{},mv({},r.guid,{canUninstall:void 0===r.canUninstall||r.canUninstall,downloadProgress:0,error:r.error,guid:r.guid,needsRestart:r.needsRestart||!1,status:r.status,url:r.url}));case D.hi:return yv(yv({},e),{},mv({},r.guid,o({status:D.UZ})));case D.HR:return yv(yv({},e),{},mv({},r.guid,o({downloadProgress:r.downloadProgress})));case D.OS:return yv(yv({},e),{},mv({},r.guid,o({status:D.e_})));case D.dG:return yv(yv({},e),{},mv({},r.guid,o({status:D.un})));case D.zl:return yv(yv({},e),{},mv({},r.guid,o({downloadProgress:0,status:D.un})));case D.Rq:return yv(yv({},e),{},mv({},r.guid,o({downloadProgress:0,error:r.error,status:D.Kj})));default:return e}},landing:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Ml,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case dt:return Al(Al({},e),{},{lang:t.payload.lang});case Ll:var n=t.payload;return Al(Al({},Ml),{},{addonType:n.addonType,category:n.category||null,lang:e.lang,loading:!0,resultsLoaded:!1});case Dl:var r=t.payload,o=Al(Al({},e),{},{loading:!1,resultsLoaded:!0});return["recommended","highlyRated","trending"].forEach((function(t){r[t]&&(o[t]={count:r[t].count,results:r[t].results.map((function(t){return ua(t,e.lang)}))})})),o;default:return e}},languageTools:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:tN,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case eN:var n=QA({},e.byID);return t.payload.languageTools.forEach((function(t){n["".concat(t.id)]=oN(t,e.lang)})),QA(QA({},e),{},{byID:n});case dt:return QA(QA({},e),{},{lang:t.payload.lang});default:return e}},recommendations:Zl,redirectTo:ak,reviews:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Rp,n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=r._addReviewToState,a=void 0===o?Fp:o;switch(n.type){case di:return Dp({state:t,reviewId:n.payload.reviewId,stateChange:{beginningToDeleteReview:!0}});case hi:return Dp({state:t,reviewId:n.payload.reviewId,stateChange:{beginningToDeleteReview:!1}});case pi:return Dp({state:t,reviewId:n.payload.reviewId,stateChange:{beginningToDeleteReview:!1,deletingReview:!0}});case si:return Dp({state:t,reviewId:n.payload.originalReviewId,stateChange:{submittingReply:!0}});case Go:return Dp({state:t,reviewId:n.payload.reviewId,stateChange:{beginningToDeleteReview:!1,editingReview:!0}});case Wo:return Dp({state:t,reviewId:n.payload.reviewId,stateChange:{beginningToDeleteReview:!1,replyingToReview:!0}});case Jo:return Dp({state:t,reviewId:n.payload.reviewId,stateChange:{editingReview:!1}});case ei:return Dp({state:t,reviewId:n.payload.reviewId,stateChange:{replyingToReview:!1,submittingReply:!1}});case ii:var u=n.payload,c=u.addonId,s=u.userId,l=u.review,f=Mp({addonId:c,userId:s});if(l&&!Cp(t,l.id))throw new Error("Cannot handle SET_LATEST_REVIEW because review ".concat(l.id," has not been set"));return kp(kp({},t),{},{latestUserReview:kp(kp({},t.latestUserReview),{},Ip({},f,l?l.id:null))});case Vo:return Dp({state:t,reviewId:n.payload.reviewId,stateChange:{loadingReview:!0}});case oi:var p=n.payload,d=vi(p),h=a({state:t,review:d});return Dp({state:h,reviewId:d.id,stateChange:{loadingReview:!1}});case ni:var y=n.payload;return a({state:t,review:y});case ui:var m=n.payload.originalReviewId,v=t.byId[m];if(!v)throw new Error((0,e.f9)(Sp||(Sp=jp(["Cannot store reply to review ID\n "," because it does not exist"])),m));return kp(kp({},t),{},{byId:kp(kp({},t.byId),{},Ip({},v.id,kp(kp({},v),{},{reply:vi(n.payload.reply)})))});case li:var g=n.payload;return Dp({state:t,reviewId:g.reviewId,stateChange:{flag:{reason:g.reason,inProgress:!0,wasFlagged:!1}}});case ci:var b=n.payload;return Dp({state:t,reviewId:b.reviewId,stateChange:{flag:{reason:b.reason,inProgress:!1,wasFlagged:!0}}});case Zo:var w=n.payload.addonSlug;return kp(kp({},t),{},{loadingForSlug:kp(kp({},t.loadingForSlug),{},Ip({},w,!0))});case ti:var O=n.payload,E=O.reviews.map((function(e){return vi(e)}));return kp(kp({},t),{},{byId:Lp({state:t,reviews:E}),byAddon:kp(kp({},t.byAddon),{},Ip({},O.addonSlug,{data:{pageSize:O.pageSize,reviewCount:O.reviewCount,reviews:E.map((function(e){return e.id}))},page:O.page,score:O.score})),loadingForSlug:kp(kp({},t.loadingForSlug),{},Ip({},O.addonSlug,!1))});case ri:var _=n.payload,x=_.reviews.map((function(e){return vi(e)}));return kp(kp({},t),{},{byId:Lp({state:t,reviews:x}),byUserId:kp(kp({},t.byUserId),{},Ip({},_.userId,{pageSize:_.pageSize,reviewCount:_.reviewCount,reviews:x.map((function(e){return e.id}))}))});case Qo:var S=n.payload;return kp(kp({},t),{},{flashMessage:S.message});case Xo:return kp(kp({},t),{},{flashMessage:void 0});case yi:var j=n.payload.reviewId,P=kp(kp({},t),{},{view:kp(kp({},t.view),{},Ip({},j,void 0))}),k=t.byId[j];if(k){var I=k.reviewAddon,T=k.userId;return kp(kp({},P),{},{byAddon:kp(kp({},P.byAddon),{},Ip({},I.slug,void 0)),byId:kp(kp({},P.byId),{},Ip({},j,void 0)),byUserId:kp(kp({},P.byUserId),{},Ip({},T,void 0)),permissions:kp(kp({},P.permissions),{},Ip({},Ap({addonId:I.id,userId:T}),void 0))})}return P;case i.nk:return kp(kp({},t),{},{view:{}});case Yo:var R=n.payload,C=R.addonId,A=R.userId;return kp(kp({},t),{},{permissions:kp(kp({},t.permissions),{},Ip({},Ap({addonId:C,userId:A}),{loading:!0,canReplyToReviews:null}))});case ai:var N=n.payload,L=N.addonId,D=N.userId,M=N.canReplyToReviews;return kp(kp({},t),{},{permissions:kp(kp({},t.permissions),{},Ip({},Ap({addonId:L,userId:D}),{loading:!1,canReplyToReviews:M}))});default:return t}},search:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:tf,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case dt:return Kl(Kl({},e),{},{lang:t.payload.lang});case Xl:var n=t.payload;return Kl(Kl({},e),{},{count:0,filters:n.filters,loading:!0,results:[]});case Jl:var r=t.payload;return Kl(Kl({},e),{},{count:r.count,loading:!1,pageSize:r.pageSize,results:r.results.map((function(t){return ua(t,e.lang)}))});case ef:return Kl(Kl({},e),{},{count:0,loading:!1,results:[]});default:return e}},site:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Nz,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case Cz:return Iz(Iz({},e),{},{readOnly:t.payload.readOnly,notice:t.payload.notice});case Az:return Iz(Iz({},e),{},{loadedPageIsAnonymous:!0});default:return e}},uiState:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Pu,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case ju:var n=t.payload,r=n.change,o=n.id;return xu(xu({},e),{},Su({},o,xu(xu({},e[o]),r)));default:return e}},userAbuseReports:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:oL,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case ZN:var n=t.payload.userId;return VN(VN({},e),{},{byUserId:VN(VN({},e.byUserId),{},YN({},n,VN(VN({},e.byUserId[n]),{},{hasSubmitted:!1,isSubmitting:!1,uiVisible:!1})))});case $N:var r=t.payload.userId;return VN(VN({},e),{},{byUserId:VN(VN({},e.byUserId),{},YN({},r,VN(VN({},e.byUserId[r]),{},{uiVisible:!1})))});case KN:var o=t.payload,i=o.message,a=o.reportedByUserId,u=o.userId;return VN(VN({},e),{},{byUserId:VN(VN({},e.byUserId),{},YN({},u,{message:i,reportedByUserId:a,hasSubmitted:!0,isSubmitting:!1,uiVisible:!1}))});case QN:var c=t.payload.userId;return VN(VN({},e),{},{byUserId:VN(VN({},e.byUserId),{},YN({},c,VN(VN({},e.byUserId[c]),{},{isSubmitting:!0})))});case XN:var s=t.payload.userId;return VN(VN({},e),{},{byUserId:VN(VN({},e.byUserId),{},YN({},s,VN(VN({},e.byUserId[s]),{},{uiVisible:!0})))});default:return e}},users:ut,versions:wf,viewContext:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:_W,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case D.Of:return OW(OW({},e),{},{context:t.payload.context});default:return e}}};(function(e){return wr.apply(this,arguments)})((function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.history,r=void 0===t?(0,n.PP)():t,o=e.initialState,a=void 0===o?{}:o,u=gW(),c=(0,Mo.MT)(LW({history:r,reducers:DW}),a,NW({routerMiddleware:(0,i.zk)(r),sagaMiddleware:u}));return{sagaMiddleware:u,store:c}}),{sagas:JG}).then((function(e){e.history;var t=e.renderApp;e.store;t(VF)}))})()})();
+//# sourceMappingURL=amo-2ab44ea6e64316f1fd35.js.map \ No newline at end of file
diff --git a/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/README.md b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/README.md
new file mode 100644
index 0000000000..df2647f260
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/README.md
@@ -0,0 +1,12 @@
+## Create React Test App
+This is a fork of [Create React App](https://github.com/facebookincubator/create-react-app) that is
+being used as part of the DAMP test tool suite. Files in `src` can be modified freely.
+
+This package assumes yarn is installed.
+
+This `app` is built into `app-build/` folder which is used for the damp tests
+
+To build and copy this `app`:
+- Run `yarn` to install all the dependencies
+- Make any needed changes in the `src` or `public` folders
+- Run `yarn copy-assets` to re build the `app`
diff --git a/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/config/env.js b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/config/env.js
new file mode 100644
index 0000000000..fa42747f6a
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/config/env.js
@@ -0,0 +1,98 @@
+// @remove-on-eject-begin
+/**
+ * Copyright (c) 2015-present, Facebook, Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+// @remove-on-eject-end
+'use strict';
+
+const fs = require('fs');
+const path = require('path');
+const paths = require('./paths');
+
+// Make sure that including paths.js after env.js will read .env variables.
+delete require.cache[require.resolve('./paths')];
+
+const NODE_ENV = process.env.NODE_ENV;
+if (!NODE_ENV) {
+ throw new Error(
+ 'The NODE_ENV environment variable is required but was not specified.'
+ );
+}
+
+// https://github.com/bkeepers/dotenv#what-other-env-files-can-i-use
+var dotenvFiles = [
+ `${paths.dotenv}.${NODE_ENV}.local`,
+ `${paths.dotenv}.${NODE_ENV}`,
+ // Don't include `.env.local` for `test` environment
+ // since normally you expect tests to produce the same
+ // results for everyone
+ NODE_ENV !== 'test' && `${paths.dotenv}.local`,
+ paths.dotenv,
+].filter(Boolean);
+
+// Load environment variables from .env* files. Suppress warnings using silent
+// if this file is missing. dotenv will never modify any environment variables
+// that have already been set.
+// https://github.com/motdotla/dotenv
+dotenvFiles.forEach(dotenvFile => {
+ if (fs.existsSync(dotenvFile)) {
+ require('dotenv').config({
+ path: dotenvFile,
+ });
+ }
+});
+
+// We support resolving modules according to `NODE_PATH`.
+// This lets you use absolute paths in imports inside large monorepos:
+// https://github.com/facebookincubator/create-react-app/issues/253.
+// It works similar to `NODE_PATH` in Node itself:
+// https://nodejs.org/api/modules.html#modules_loading_from_the_global_folders
+// Note that unlike in Node, only *relative* paths from `NODE_PATH` are honored.
+// Otherwise, we risk importing Node.js core modules into an app instead of Webpack shims.
+// https://github.com/facebookincubator/create-react-app/issues/1023#issuecomment-265344421
+// We also resolve them to make sure all tools using them work consistently.
+const appDirectory = fs.realpathSync(process.cwd());
+process.env.NODE_PATH = (process.env.NODE_PATH || '')
+ .split(path.delimiter)
+ .filter(folder => folder && !path.isAbsolute(folder))
+ .map(folder => path.resolve(appDirectory, folder))
+ .join(path.delimiter);
+
+// Grab NODE_ENV and REACT_APP_* environment variables and prepare them to be
+// injected into the application via DefinePlugin in Webpack configuration.
+const REACT_APP = /^REACT_APP_/i;
+
+function getClientEnvironment(publicUrl) {
+ const raw = Object.keys(process.env)
+ .filter(key => REACT_APP.test(key))
+ .reduce(
+ (env, key) => {
+ env[key] = process.env[key];
+ return env;
+ },
+ {
+ // Useful for determining whether we’re running in production mode.
+ // Most importantly, it switches React into the correct mode.
+ NODE_ENV: process.env.NODE_ENV || 'development',
+ // Useful for resolving the correct path to static assets in `public`.
+ // For example, <img src={process.env.PUBLIC_URL + '/img/logo.png'} />.
+ // This should only be used as an escape hatch. Normally you would put
+ // images into the `src` and `import` them in code to get their paths.
+ PUBLIC_URL: publicUrl,
+ }
+ );
+ // Stringify all values so we can feed into Webpack DefinePlugin
+ const stringified = {
+ 'process.env': Object.keys(raw).reduce((env, key) => {
+ env[key] = JSON.stringify(raw[key]);
+ return env;
+ }, {}),
+ };
+
+ return { raw, stringified };
+}
+
+module.exports = getClientEnvironment;
diff --git a/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/config/paths.js b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/config/paths.js
new file mode 100644
index 0000000000..718b898bb8
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/config/paths.js
@@ -0,0 +1,118 @@
+// @remove-on-eject-begin
+/**
+ * Copyright (c) 2015-present, Facebook, Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+// @remove-on-eject-end
+'use strict';
+
+const path = require('path');
+const fs = require('fs');
+const url = require('url');
+
+// Make sure any symlinks in the project folder are resolved:
+// https://github.com/facebookincubator/create-react-app/issues/637
+const appDirectory = fs.realpathSync(process.cwd());
+const resolveApp = relativePath => path.resolve(appDirectory, relativePath);
+
+const envPublicUrl = process.env.PUBLIC_URL;
+
+function ensureSlash(path, needsSlash) {
+ const hasSlash = path.endsWith('/');
+ if (hasSlash && !needsSlash) {
+ return path.substr(path, path.length - 1);
+ } else if (!hasSlash && needsSlash) {
+ return `${path}/`;
+ } else {
+ return path;
+ }
+}
+
+const getPublicUrl = appPackageJson =>
+ envPublicUrl || require(appPackageJson).homepage;
+
+// We use `PUBLIC_URL` environment variable or "homepage" field to infer
+// "public path" at which the app is served.
+// Webpack needs to know it to put the right <script> hrefs into HTML even in
+// single-page apps that may serve index.html for nested URLs like /todos/42.
+// We can't use a relative path in HTML because we don't want to load something
+// like /todos/42/static/js/bundle.7289d.js. We have to know the root.
+function getServedPath(appPackageJson) {
+ const publicUrl = getPublicUrl(appPackageJson);
+ const servedUrl =
+ envPublicUrl || (publicUrl ? url.parse(publicUrl).pathname : '/');
+ return ensureSlash(servedUrl, true);
+}
+
+// config after eject: we're in ./config/
+module.exports = {
+ dotenv: resolveApp('.env'),
+ appBuild: resolveApp('build'),
+ appPublic: resolveApp('public'),
+ appHtml: resolveApp('public/index.html'),
+ appIndexJs: resolveApp('src/index.js'),
+ appPackageJson: resolveApp('package.json'),
+ appSrc: resolveApp('src'),
+ yarnLockFile: resolveApp('yarn.lock'),
+ testsSetup: resolveApp('src/setupTests.js'),
+ appNodeModules: resolveApp('node_modules'),
+ publicUrl: getPublicUrl(resolveApp('package.json')),
+ servedPath: getServedPath(resolveApp('package.json')),
+};
+
+// @remove-on-eject-begin
+const resolveOwn = relativePath => path.resolve(__dirname, '..', relativePath);
+
+// config before eject: we're in ./node_modules/react-scripts/config/
+module.exports = {
+ dotenv: resolveApp('.env'),
+ appPath: resolveApp('.'),
+ appBuild: resolveApp('build'),
+ appPublic: resolveApp('public'),
+ appHtml: resolveApp('public/index.html'),
+ appIndexJs: resolveApp('src/index.js'),
+ appPackageJson: resolveApp('package.json'),
+ appSrc: resolveApp('src'),
+ yarnLockFile: resolveApp('yarn.lock'),
+ testsSetup: resolveApp('src/setupTests.js'),
+ appNodeModules: resolveApp('node_modules'),
+ publicUrl: getPublicUrl(resolveApp('package.json')),
+ servedPath: getServedPath(resolveApp('package.json')),
+ // These properties only exist before ejecting:
+ ownPath: resolveOwn('.'),
+ ownNodeModules: resolveOwn('node_modules'), // This is empty on npm 3
+};
+
+const ownPackageJson = require('../package.json');
+const reactScriptsPath = resolveApp(`node_modules/${ownPackageJson.name}`);
+const reactScriptsLinked =
+ fs.existsSync(reactScriptsPath) &&
+ fs.lstatSync(reactScriptsPath).isSymbolicLink();
+
+// config before publish: we're in ./packages/react-scripts/config/
+if (
+ !reactScriptsLinked &&
+ __dirname.indexOf(path.join('packages', 'react-scripts', 'config')) !== -1
+) {
+ module.exports = {
+ dotenv: resolveOwn('template/.env'),
+ appPath: resolveApp('.'),
+ appBuild: resolveOwn('../../build'),
+ appPublic: resolveOwn('template/public'),
+ appHtml: resolveOwn('template/public/index.html'),
+ appIndexJs: resolveOwn('template/src/index.js'),
+ appPackageJson: resolveOwn('package.json'),
+ appSrc: resolveOwn('template/src'),
+ yarnLockFile: resolveOwn('template/yarn.lock'),
+ testsSetup: resolveOwn('template/src/setupTests.js'),
+ appNodeModules: resolveOwn('node_modules'),
+ publicUrl: getPublicUrl(resolveOwn('package.json')),
+ servedPath: getServedPath(resolveOwn('package.json')),
+ // These properties only exist before ejecting:
+ ownPath: resolveOwn('.'),
+ ownNodeModules: resolveOwn('node_modules'),
+ };
+}
+// @remove-on-eject-end
diff --git a/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/config/polyfills.js b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/config/polyfills.js
new file mode 100644
index 0000000000..8d97fb4ac3
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/config/polyfills.js
@@ -0,0 +1,30 @@
+// @remove-on-eject-begin
+/**
+ * Copyright (c) 2015-present, Facebook, Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+// @remove-on-eject-end
+'use strict';
+
+if (typeof Promise === 'undefined') {
+ // Rejection tracking prevents a common issue where React gets into an
+ // inconsistent state due to an error, but it gets swallowed by a Promise,
+ // and the user has no idea what causes React's erratic future behavior.
+ require('promise/lib/rejection-tracking').enable();
+ window.Promise = require('promise/lib/es6-extensions.js');
+}
+
+// fetch() polyfill for making API calls.
+require('whatwg-fetch');
+
+// Object.assign() is commonly used with React.
+// It will use the native implementation if it's present and isn't buggy.
+Object.assign = require('object-assign');
+
+// In tests, polyfill requestAnimationFrame since jsdom doesn't provide it yet.
+// We don't polyfill it in the browser--this is user's responsibility.
+if (process.env.NODE_ENV === 'test') {
+ require('raf').polyfill(global);
+}
diff --git a/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/config/webpack.config.prod.js b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/config/webpack.config.prod.js
new file mode 100644
index 0000000000..486c76cd07
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/config/webpack.config.prod.js
@@ -0,0 +1,369 @@
+// @remove-on-eject-begin
+/**
+ * Copyright (c) 2015-present, Facebook, Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+// @remove-on-eject-end
+'use strict';
+
+const autoprefixer = require('autoprefixer');
+const path = require('path');
+const webpack = require('webpack');
+const HtmlWebpackPlugin = require('html-webpack-plugin');
+const ExtractTextPlugin = require('extract-text-webpack-plugin');
+const ManifestPlugin = require('webpack-manifest-plugin');
+const InterpolateHtmlPlugin = require('react-dev-utils/InterpolateHtmlPlugin');
+const SWPrecacheWebpackPlugin = require('sw-precache-webpack-plugin');
+const eslintFormatter = require('react-dev-utils/eslintFormatter');
+const ModuleScopePlugin = require('react-dev-utils/ModuleScopePlugin');
+const paths = require('./paths');
+const getClientEnvironment = require('./env');
+
+// Webpack uses `publicPath` to determine where the app is being served from.
+// It requires a trailing slash, or the file assets will get an incorrect path.
+const publicPath = paths.servedPath;
+// Some apps do not use client-side routing with pushState.
+// For these, "homepage" can be set to "." to enable relative asset paths.
+const shouldUseRelativeAssetPaths = publicPath === './';
+// Source maps are resource heavy and can cause out of memory issue for large source files.
+const shouldUseSourceMap = process.env.GENERATE_SOURCEMAP !== 'false';
+// `publicUrl` is just like `publicPath`, but we will provide it to our app
+// as %PUBLIC_URL% in `index.html` and `process.env.PUBLIC_URL` in JavaScript.
+// Omit trailing slash as %PUBLIC_URL%/xyz looks better than %PUBLIC_URL%xyz.
+const publicUrl = publicPath.slice(0, -1);
+// Get environment variables to inject into our app.
+const env = getClientEnvironment(publicUrl);
+
+// Assert this just to be safe.
+// Development builds of React are slow and not intended for production.
+if (env.stringified['process.env'].NODE_ENV !== '"production"') {
+ throw new Error('Production builds must have NODE_ENV=production.');
+}
+
+// Note: defined here because it will be used more than once.
+const cssFilename = 'static/css/[name].[contenthash:8].css';
+
+// ExtractTextPlugin expects the build output to be flat.
+// (See https://github.com/webpack-contrib/extract-text-webpack-plugin/issues/27)
+// However, our output is structured with css, js and media folders.
+// To have this structure working with relative paths, we have to use custom options.
+const extractTextPluginOptions = shouldUseRelativeAssetPaths
+ ? // Making sure that the publicPath goes back to to build folder.
+ { publicPath: Array(cssFilename.split('/').length).join('../') }
+ : {};
+
+// This is the production configuration.
+// It compiles slowly and is focused on producing a fast and minimal bundle.
+// The development configuration is different and lives in a separate file.
+module.exports = {
+ // Don't attempt to continue if there are any errors.
+ bail: true,
+ // We generate sourcemaps in production. This is slow but gives good results.
+ // You can exclude the *.map files from the build during deployment.
+ devtool: shouldUseSourceMap ? 'source-map' : false,
+ // In production, we only want to load the polyfills and the app code.
+ entry: [require.resolve('./polyfills'), paths.appIndexJs],
+ output: {
+ // The build folder.
+ path: paths.appBuild,
+ // Generated JS file names (with nested folders).
+ // There will be one main bundle, and one file per asynchronous chunk.
+ // We don't currently advertise code splitting but Webpack supports it.
+ filename: 'static/js/[name].js',
+ chunkFilename: 'static/js/[name].chunk.js',
+ // We inferred the "public path" (such as / or /my-project) from homepage.
+ publicPath: publicPath,
+ // Point sourcemap entries to original disk location (format as URL on Windows)
+ devtoolModuleFilenameTemplate: info =>
+ path
+ .relative(paths.appSrc, info.absoluteResourcePath)
+ .replace(/\\/g, '/'),
+ },
+ resolve: {
+ // This allows you to set a fallback for where Webpack should look for modules.
+ // We placed these paths second because we want `node_modules` to "win"
+ // if there are any conflicts. This matches Node resolution mechanism.
+ // https://github.com/facebookincubator/create-react-app/issues/253
+ modules: ['node_modules', paths.appNodeModules].concat(
+ // It is guaranteed to exist because we tweak it in `env.js`
+ process.env.NODE_PATH.split(path.delimiter).filter(Boolean)
+ ),
+ // These are the reasonable defaults supported by the Node ecosystem.
+ // We also include JSX as a common component filename extension to support
+ // some tools, although we do not recommend using it, see:
+ // https://github.com/facebookincubator/create-react-app/issues/290
+ // `web` extension prefixes have been added for better support
+ // for React Native Web.
+ extensions: ['.web.js', '.mjs', '.js', '.json', '.web.jsx', '.jsx'],
+ alias: {
+ // @remove-on-eject-begin
+ // Resolve Babel runtime relative to react-scripts.
+ // It usually still works on npm 3 without this but it would be
+ // unfortunate to rely on, as react-scripts could be symlinked,
+ // and thus babel-runtime might not be resolvable from the source.
+ 'babel-runtime': path.dirname(
+ require.resolve('babel-runtime/package.json')
+ ),
+ // @remove-on-eject-end
+ // Support React Native Web
+ // https://www.smashingmagazine.com/2016/08/a-glimpse-into-the-future-with-react-native-for-web/
+ 'react-native': 'react-native-web',
+ },
+ plugins: [
+ // Prevents users from importing files from outside of src/ (or node_modules/).
+ // This often causes confusion because we only process files within src/ with babel.
+ // To fix this, we prevent you from importing files out of src/ -- if you'd like to,
+ // please link the files into your node_modules/ and let module-resolution kick in.
+ // Make sure your source files are compiled, as they will not be processed in any way.
+ new ModuleScopePlugin(paths.appSrc, [paths.appPackageJson]),
+ ],
+ },
+ module: {
+ strictExportPresence: true,
+ rules: [
+ // TODO: Disable require.ensure as it's not a standard language feature.
+ // We are waiting for https://github.com/facebookincubator/create-react-app/issues/2176.
+ // { parser: { requireEnsure: false } },
+
+ // First, run the linter.
+ // It's important to do this before Babel processes the JS.
+ {
+ test: /\.(js|jsx|mjs)$/,
+ enforce: 'pre',
+ use: [
+ {
+ options: {
+ formatter: eslintFormatter,
+ eslintPath: require.resolve('eslint'),
+ // @remove-on-eject-begin
+ // TODO: consider separate config for production,
+ // e.g. to enable no-console and no-debugger only in production.
+ baseConfig: {
+ extends: [require.resolve('eslint-config-react-app')],
+ },
+ ignore: false,
+ useEslintrc: false,
+ // @remove-on-eject-end
+ },
+ loader: require.resolve('eslint-loader'),
+ },
+ ],
+ include: paths.appSrc,
+ },
+ {
+ // "oneOf" will traverse all following loaders until one will
+ // match the requirements. When no loader matches it will fall
+ // back to the "file" loader at the end of the loader list.
+ oneOf: [
+ // "url" loader works just like "file" loader but it also embeds
+ // assets smaller than specified size as data URLs to avoid requests.
+ {
+ test: [/\.bmp$/, /\.gif$/, /\.jpe?g$/, /\.png$/],
+ loader: require.resolve('url-loader'),
+ options: {
+ limit: 10000,
+ name: 'static/media/[name].[hash:8].[ext]',
+ },
+ },
+ // Process JS with Babel.
+ {
+ test: /\.(js|jsx|mjs)$/,
+ include: paths.appSrc,
+ loader: require.resolve('babel-loader'),
+ options: {
+ // @remove-on-eject-begin
+ babelrc: false,
+ presets: [require.resolve('babel-preset-react-app')],
+ // @remove-on-eject-end
+ compact: true,
+ },
+ },
+ // The notation here is somewhat confusing.
+ // "postcss" loader applies autoprefixer to our CSS.
+ // "css" loader resolves paths in CSS and adds assets as dependencies.
+ // "style" loader normally turns CSS into JS modules injecting <style>,
+ // but unlike in development configuration, we do something different.
+ // `ExtractTextPlugin` first applies the "postcss" and "css" loaders
+ // (second argument), then grabs the result CSS and puts it into a
+ // separate file in our build process. This way we actually ship
+ // a single CSS file in production instead of JS code injecting <style>
+ // tags. If you use code splitting, however, any async bundles will still
+ // use the "style" loader inside the async code so CSS from them won't be
+ // in the main CSS file.
+ {
+ test: /\.css$/,
+ loader: ExtractTextPlugin.extract(
+ Object.assign(
+ {
+ fallback: {
+ loader: require.resolve('style-loader'),
+ options: {
+ hmr: false,
+ },
+ },
+ use: [
+ {
+ loader: require.resolve('css-loader'),
+ options: {
+ importLoaders: 1,
+ minimize: true,
+ sourceMap: shouldUseSourceMap,
+ },
+ },
+ {
+ loader: require.resolve('postcss-loader'),
+ options: {
+ // Necessary for external CSS imports to work
+ // https://github.com/facebookincubator/create-react-app/issues/2677
+ ident: 'postcss',
+ plugins: () => [
+ require('postcss-flexbugs-fixes'),
+ autoprefixer({
+ browsers: [
+ '>1%',
+ 'last 4 versions',
+ 'Firefox ESR',
+ 'not ie < 9', // React doesn't support IE8 anyway
+ ],
+ flexbox: 'no-2009',
+ }),
+ ],
+ },
+ },
+ ],
+ },
+ extractTextPluginOptions
+ )
+ ),
+ // Note: this won't work without `new ExtractTextPlugin()` in `plugins`.
+ },
+ // "file" loader makes sure assets end up in the `build` folder.
+ // When you `import` an asset, you get its filename.
+ // This loader doesn't use a "test" so it will catch all modules
+ // that fall through the other loaders.
+ {
+ loader: require.resolve('file-loader'),
+ // Exclude `js` files to keep "css" loader working as it injects
+ // it's runtime that would otherwise processed through "file" loader.
+ // Also exclude `html` and `json` extensions so they get processed
+ // by webpacks internal loaders.
+ exclude: [/\.js$/, /\.html$/, /\.json$/],
+ options: {
+ name: 'static/media/[name].[hash:8].[ext]',
+ },
+ },
+ // ** STOP ** Are you adding a new loader?
+ // Make sure to add the new loader(s) before the "file" loader.
+ ],
+ },
+ ],
+ },
+ plugins: [
+ // Makes some environment variables available in index.html.
+ // The public URL is available as %PUBLIC_URL% in index.html, e.g.:
+ // <link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico">
+ // In production, it will be an empty string unless you specify "homepage"
+ // in `package.json`, in which case it will be the pathname of that URL.
+ new InterpolateHtmlPlugin(env.raw),
+ // Generates an `index.html` file with the <script> injected.
+ new HtmlWebpackPlugin({
+ inject: false,
+ template: paths.appHtml,
+ minify: {
+ removeComments: false,
+ collapseWhitespace: false,
+ removeRedundantAttributes: false,
+ useShortDoctype: false,
+ removeEmptyAttributes: false,
+ removeStyleLinkTypeAttributes: false,
+ keepClosingSlash: true,
+ minifyJS: false,
+ minifyCSS: false,
+ minifyURLs: false,
+ },
+ }),
+ // Makes some environment variables available to the JS code, for example:
+ // if (process.env.NODE_ENV === 'production') { ... }. See `./env.js`.
+ // It is absolutely essential that NODE_ENV was set to production here.
+ // Otherwise React will be compiled in the very slow development mode.
+ new webpack.DefinePlugin(env.stringified),
+ // Minify the code.
+ new webpack.optimize.UglifyJsPlugin({
+ compress: {
+ warnings: false,
+ // Disabled because of an issue with Uglify breaking seemingly valid code:
+ // https://github.com/facebookincubator/create-react-app/issues/2376
+ // Pending further investigation:
+ // https://github.com/mishoo/UglifyJS2/issues/2011
+ comparisons: false,
+ },
+ mangle: {
+ safari10: true,
+ },
+ output: {
+ comments: false,
+ // Turned on because emoji and regex is not minified properly using default
+ // https://github.com/facebookincubator/create-react-app/issues/2488
+ ascii_only: true,
+ },
+ sourceMap: shouldUseSourceMap,
+ }),
+ // Note: this won't work without ExtractTextPlugin.extract(..) in `loaders`.
+ new ExtractTextPlugin({
+ filename: cssFilename,
+ }),
+ // Generate a manifest file which contains a mapping of all asset filenames
+ // to their corresponding output file so that tools can pick it up without
+ // having to parse `index.html`.
+ new ManifestPlugin({
+ fileName: 'asset-manifest.json',
+ }),
+ // Generate a service worker script that will precache, and keep up to date,
+ // the HTML & assets that are part of the Webpack build.
+ new SWPrecacheWebpackPlugin({
+ // By default, a cache-busting query parameter is appended to requests
+ // used to populate the caches, to ensure the responses are fresh.
+ // If a URL is already hashed by Webpack, then there is no concern
+ // about it being stale, and the cache-busting can be skipped.
+ dontCacheBustUrlsMatching: /\.\w{8}\./,
+ filename: 'service-worker.js',
+ logger(message) {
+ if (message.indexOf('Total precache size is') === 0) {
+ // This message occurs for every build and is a bit too noisy.
+ return;
+ }
+ if (message.indexOf('Skipping static resource') === 0) {
+ // This message obscures real errors so we ignore it.
+ // https://github.com/facebookincubator/create-react-app/issues/2612
+ return;
+ }
+ console.log(message);
+ },
+ minify: true,
+ // For unknown URLs, fallback to the index page
+ navigateFallback: publicUrl + '/index.html',
+ // Ignores URLs starting from /__ (useful for Firebase):
+ // https://github.com/facebookincubator/create-react-app/issues/2237#issuecomment-302693219
+ navigateFallbackWhitelist: [/^(?!\/__).*/],
+ // Don't precache sourcemaps (they're large) and build asset manifest:
+ staticFileGlobsIgnorePatterns: [/\.map$/, /asset-manifest\.json$/],
+ }),
+ // Moment.js is an extremely popular library that bundles large locale files
+ // by default due to how Webpack interprets its code. This is a practical
+ // solution that requires the user to opt into importing specific locales.
+ // https://github.com/jmblog/how-to-optimize-momentjs-with-webpack
+ // You can remove this if you don't use Moment.js:
+ new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
+ ],
+ // Some libraries import Node modules but don't use them in the browser.
+ // Tell Webpack to provide empty mocks for them so importing them works.
+ node: {
+ dgram: 'empty',
+ fs: 'empty',
+ net: 'empty',
+ tls: 'empty',
+ child_process: 'empty',
+ },
+};
diff --git a/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/package.json b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/package.json
new file mode 100644
index 0000000000..8b45d9fd66
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/package.json
@@ -0,0 +1,25 @@
+{
+ "name": "create-reate-test-app",
+ "description": "A test app forked from meta's create-react-app and modified to test sourcemap debugging scenarios",
+ "version": "0.1.0",
+ "private": true,
+ "homepage": "./",
+ "dependencies": {
+ "eslint": "^4.17.0",
+ "eslint-config-react-app": "2.0.1",
+ "eslint-loader": "1.9.0",
+ "eslint-plugin-flowtype": "2.39.1",
+ "immutable": "^3.8.2",
+ "lodash": "^4.17.5",
+ "react": "^16.2.0",
+ "react-dom": "^16.2.0",
+ "react-scripts": "1.0.17"
+ },
+ "scripts": {
+ "build": "node ./scripts/build; rm ./build/service-worker.js ./build/asset-manifest.json",
+ "clean-build": "rm -r ./build && rm -r ./node_modules",
+ "clean-old-assets": "rm -r ../app-build || true",
+ "copy-assets": "yarn clean-old-assets; yarn build; cp -r ./build ../app-build; yarn clean-build",
+ "copy-assets-windows": "yarn build; cp -r ./build ../app-build"
+ }
+}
diff --git a/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/public/README.md b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/public/README.md
new file mode 100644
index 0000000000..08dd15bf69
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/public/README.md
@@ -0,0 +1,10 @@
+## Create React Test App Build
+This is a fork of [Create React App](https://github.com/facebookincubator/create-react-app) that is
+being used as part of the DAMP test tool suite.
+
+This `app-build/` is built from the files in the `app/` folder.
+
+Note: No changes should be made directly in this folder
+
+For details on how to make changes and rebuild this app, see readme in `app/README.md`
+
diff --git a/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/public/iframe.html b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/public/iframe.html
new file mode 100644
index 0000000000..026ad25349
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/public/iframe.html
@@ -0,0 +1,149 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no">
+ <meta name="theme-color" content="#000000">
+ <!--
+ Notice the use of . in the tags above.
+ It will be replaced with the URL of the `public` folder during the build.
+ Only files inside the `public` folder can be referenced from the HTML.
+
+ Unlike "/favicon.ico" or "favicon.ico", "./favicon.ico" will
+ work correctly both with client-side routing and a non-root public URL.
+ Learn how to configure a non-root public URL by running `npm run build`.
+ -->
+ <title>React App</title>
+ <script type="text/javascript" src="./js/testfile.js?id=0"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=1"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=2"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=3"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=4"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=5"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=6"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=7"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=8"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=9"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=10"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=11"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=12"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=13"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=14"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=15"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=16"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=17"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=18"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=19"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=20"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=21"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=22"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=23"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=24"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=25"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=26"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=27"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=28"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=29"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=30"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=31"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=32"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=33"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=34"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=35"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=36"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=37"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=38"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=39"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=40"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=41"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=42"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=43"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=44"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=45"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=46"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=47"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=48"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=49"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=50"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=51"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=52"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=53"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=54"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=55"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=56"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=57"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=58"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=59"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=60"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=61"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=62"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=63"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=64"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=65"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=66"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=67"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=68"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=69"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=70"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=71"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=72"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=73"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=74"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=75"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=76"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=77"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=78"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=79"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=80"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=81"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=82"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=83"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=84"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=85"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=86"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=87"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=88"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=89"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=90"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=91"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=92"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=93"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=94"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=95"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=96"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=97"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=98"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=99"></script>
+ <script type="text/javascript" src="./js/testfile.js?id=100"></script>
+ <script type="text/javascript" src="./js/subfolder/testsubfolder.js"></script>
+ </head>
+ <body>
+ <noscript>
+ You need to enable JavaScript to run this app.
+ </noscript>
+ <div id="root"></div>
+ <!--
+ This HTML file is a template.
+ If you open it directly in the browser, you will see an empty page.
+
+ You can add webfonts, meta tags, or analytics to this file.
+ The build step will place the bundled scripts into the <body> tag.
+
+ To begin the development, run `npm start` or `yarn start`.
+ To create a production bundle, use `npm run build` or `yarn build`.
+ -->
+ <script type="text/javascript" src="./static/js/main.js"></script></body>
+
+ <script>
+ // We are using eval + sourceURL in order to prevent doing any HTTP request
+ // and speed up the test runtime.
+ for(let i = 0; i < 250; i++) {
+ eval("function evalScript() {} //# sourceURL=foo/eval-script-" + i +".js");
+ }
+ for(let i = 0; i < 250; i++) {
+ eval("function evalScript() {} //# sourceURL=foo/bar/plop/eval-script-" + i +".js");
+ }
+ </script>
+
+ <script type="text/javascript" src="./static/js/minified.js"></script></body>
+</html>
diff --git a/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/public/index.html b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/public/index.html
new file mode 100644
index 0000000000..ecb5e68d9a
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/public/index.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>iframe wrapper for the debugger custom page</title>
+ <style type="text/css">
+ html, body {
+ height: 100%;
+ width: 100%;
+ }
+ iframe {
+ border-style: none;
+ height: 100%;
+ position: absolute;
+ width: 100%;
+ }
+ </style>
+</head>
+<body>
+
+ <!-- For now we load the iframe in the same site as the damp top frame.
+ We will switch to a different-site URL (eg http://damp.iframe.com) when
+ DevTools work against remote frames. -->
+ <iframe
+ src="http://damp.top.com/tests/devtools/addon/content/pages/custom/debugger/app-build/iframe.html"
+ ></iframe>
+
+ <script>
+ // We are using eval + sourceURL in order to prevent doing any HTTP request
+ // and speed up the test runtime.
+ for(let i = 0; i < 500; i++) {
+ eval("function evalScript() {} //# sourceURL=eval/eval-script-" + i +".js");
+ }
+ </script>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/public/js/subfolder/testsubfolder.js b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/public/js/subfolder/testsubfolder.js
new file mode 100644
index 0000000000..228ebe310e
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/public/js/subfolder/testsubfolder.js
@@ -0,0 +1,5 @@
+(function () {
+ function fSubFolder() {
+ return Math.random();
+ }
+});
diff --git a/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/public/js/testfile.js b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/public/js/testfile.js
new file mode 100644
index 0000000000..b78be47b7e
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/public/js/testfile.js
@@ -0,0 +1,1001 @@
+(function () {
+ function f0() {
+ f1();
+ return Math.random();
+ }
+
+ function f1() {
+ f2();
+ return Math.random();
+ }
+
+ function f2() {
+ f3();
+ return Math.random();
+ }
+
+ function f3() {
+ f4();
+ return Math.random();
+ }
+
+ function f4() {
+ f5();
+ return Math.random();
+ }
+
+ function f5() {
+ f6();
+ return Math.random();
+ }
+
+ function f6() {
+ f7();
+ return Math.random();
+ }
+
+ function f7() {
+ f8();
+ return Math.random();
+ }
+
+ function f8() {
+ f9();
+ return Math.random();
+ }
+
+ function f9() {
+ f10();
+ return Math.random();
+ }
+
+ function f10() {
+ f11();
+ return Math.random();
+ }
+
+ function f11() {
+ f12();
+ return Math.random();
+ }
+
+ function f12() {
+ f13();
+ return Math.random();
+ }
+
+ function f13() {
+ f14();
+ return Math.random();
+ }
+
+ function f14() {
+ f15();
+ return Math.random();
+ }
+
+ function f15() {
+ f16();
+ return Math.random();
+ }
+
+ function f16() {
+ f17();
+ return Math.random();
+ }
+
+ function f17() {
+ f18();
+ return Math.random();
+ }
+
+ function f18() {
+ f19();
+ return Math.random();
+ }
+
+ function f19() {
+ f20();
+ return Math.random();
+ }
+
+ function f20() {
+ f21();
+ return Math.random();
+ }
+
+ function f21() {
+ f22();
+ return Math.random();
+ }
+
+ function f22() {
+ f23();
+ return Math.random();
+ }
+
+ function f23() {
+ f24();
+ return Math.random();
+ }
+
+ function f24() {
+ f25();
+ return Math.random();
+ }
+
+ function f25() {
+ f26();
+ return Math.random();
+ }
+
+ function f26() {
+ f27();
+ return Math.random();
+ }
+
+ function f27() {
+ f28();
+ return Math.random();
+ }
+
+ function f28() {
+ f29();
+ return Math.random();
+ }
+
+ function f29() {
+ f30();
+ return Math.random();
+ }
+
+ function f30() {
+ f31();
+ return Math.random();
+ }
+
+ function f31() {
+ f32();
+ return Math.random();
+ }
+
+ function f32() {
+ f33();
+ return Math.random();
+ }
+
+ function f33() {
+ f34();
+ return Math.random();
+ }
+
+ function f34() {
+ f35();
+ return Math.random();
+ }
+
+ function f35() {
+ f36();
+ return Math.random();
+ }
+
+ function f36() {
+ f37();
+ return Math.random();
+ }
+
+ function f37() {
+ f38();
+ return Math.random();
+ }
+
+ function f38() {
+ f39();
+ return Math.random();
+ }
+
+ function f39() {
+ f40();
+ return Math.random();
+ }
+
+ function f40() {
+ f41();
+ return Math.random();
+ }
+
+ function f41() {
+ f42();
+ return Math.random();
+ }
+
+ function f42() {
+ f43();
+ return Math.random();
+ }
+
+ function f43() {
+ f44();
+ return Math.random();
+ }
+
+ function f44() {
+ f45();
+ return Math.random();
+ }
+
+ function f45() {
+ f46();
+ return Math.random();
+ }
+
+ function f46() {
+ f47();
+ return Math.random();
+ }
+
+ function f47() {
+ f48();
+ return Math.random();
+ }
+
+ function f48() {
+ f49();
+ return Math.random();
+ }
+
+ function f49() {
+ f50();
+ return Math.random();
+ }
+
+ function f50() {
+ f51();
+ return Math.random();
+ }
+
+ function f51() {
+ f52();
+ return Math.random();
+ }
+
+ function f52() {
+ f53();
+ return Math.random();
+ }
+
+ function f53() {
+ f54();
+ return Math.random();
+ }
+
+ function f54() {
+ f55();
+ return Math.random();
+ }
+
+ function f55() {
+ f56();
+ return Math.random();
+ }
+
+ function f56() {
+ f57();
+ return Math.random();
+ }
+
+ function f57() {
+ f58();
+ return Math.random();
+ }
+
+ function f58() {
+ f59();
+ return Math.random();
+ }
+
+ function f59() {
+ f60();
+ return Math.random();
+ }
+
+ function f60() {
+ f61();
+ return Math.random();
+ }
+
+ function f61() {
+ f62();
+ return Math.random();
+ }
+
+ function f62() {
+ f63();
+ return Math.random();
+ }
+
+ function f63() {
+ f64();
+ return Math.random();
+ }
+
+ function f64() {
+ f65();
+ return Math.random();
+ }
+
+ function f65() {
+ f66();
+ return Math.random();
+ }
+
+ function f66() {
+ f67();
+ return Math.random();
+ }
+
+ function f67() {
+ f68();
+ return Math.random();
+ }
+
+ function f68() {
+ f69();
+ return Math.random();
+ }
+
+ function f69() {
+ f70();
+ return Math.random();
+ }
+
+ function f70() {
+ f71();
+ return Math.random();
+ }
+
+ function f71() {
+ f72();
+ return Math.random();
+ }
+
+ function f72() {
+ f73();
+ return Math.random();
+ }
+
+ function f73() {
+ f74();
+ return Math.random();
+ }
+
+ function f74() {
+ f75();
+ return Math.random();
+ }
+
+ function f75() {
+ f76();
+ return Math.random();
+ }
+
+ function f76() {
+ f77();
+ return Math.random();
+ }
+
+ function f77() {
+ f78();
+ return Math.random();
+ }
+
+ function f78() {
+ f79();
+ return Math.random();
+ }
+
+ function f79() {
+ f80();
+ return Math.random();
+ }
+
+ function f80() {
+ f81();
+ return Math.random();
+ }
+
+ function f81() {
+ f82();
+ return Math.random();
+ }
+
+ function f82() {
+ f83();
+ return Math.random();
+ }
+
+ function f83() {
+ f84();
+ return Math.random();
+ }
+
+ function f84() {
+ f85();
+ return Math.random();
+ }
+
+ function f85() {
+ f86();
+ return Math.random();
+ }
+
+ function f86() {
+ f87();
+ return Math.random();
+ }
+
+ function f87() {
+ f88();
+ return Math.random();
+ }
+
+ function f88() {
+ f89();
+ return Math.random();
+ }
+
+ function f89() {
+ f90();
+ return Math.random();
+ }
+
+ function f90() {
+ f91();
+ return Math.random();
+ }
+
+ function f91() {
+ f92();
+ return Math.random();
+ }
+
+ function f92() {
+ f93();
+ return Math.random();
+ }
+
+ function f93() {
+ f94();
+ return Math.random();
+ }
+
+ function f94() {
+ f95();
+ return Math.random();
+ }
+
+ function f95() {
+ f96();
+ return Math.random();
+ }
+
+ function f96() {
+ f97();
+ return Math.random();
+ }
+
+ function f97() {
+ f98();
+ return Math.random();
+ }
+
+ function f98() {
+ f99();
+ return Math.random();
+ }
+
+ function f99() {
+ f100();
+ return Math.random();
+ }
+
+
+ function f100() {
+ f101();
+ return Math.random();
+ }
+
+ function f101() {
+ f102();
+ return Math.random();
+ }
+
+ function f102() {
+ f103();
+ return Math.random();
+ }
+
+ function f103() {
+ f104();
+ return Math.random();
+ }
+
+ function f104() {
+ f105();
+ return Math.random();
+ }
+
+ function f105() {
+ f106();
+ return Math.random();
+ }
+
+ function f106() {
+ f107();
+ return Math.random();
+ }
+
+ function f107() {
+ f108();
+ return Math.random();
+ }
+
+ function f108() {
+ f109();
+ return Math.random();
+ }
+
+ function f109() {
+ f110();
+ return Math.random();
+ }
+
+ function f110() {
+ f111();
+ return Math.random();
+ }
+
+ function f111() {
+ f112();
+ return Math.random();
+ }
+
+ function f112() {
+ f113();
+ return Math.random();
+ }
+
+ function f113() {
+ f114();
+ return Math.random();
+ }
+
+ function f114() {
+ f115();
+ return Math.random();
+ }
+
+ function f115() {
+ f116();
+ return Math.random();
+ }
+
+ function f116() {
+ f117();
+ return Math.random();
+ }
+
+ function f117() {
+ f118();
+ return Math.random();
+ }
+
+ function f118() {
+ f119();
+ return Math.random();
+ }
+
+ function f119() {
+ f120();
+ return Math.random();
+ }
+
+ function f120() {
+ f121();
+ return Math.random();
+ }
+
+ function f121() {
+ f122();
+ return Math.random();
+ }
+
+ function f122() {
+ f123();
+ return Math.random();
+ }
+
+ function f123() {
+ f124();
+ return Math.random();
+ }
+
+ function f124() {
+ f125();
+ return Math.random();
+ }
+
+ function f125() {
+ f126();
+ return Math.random();
+ }
+
+ function f126() {
+ f127();
+ return Math.random();
+ }
+
+ function f127() {
+ f128();
+ return Math.random();
+ }
+
+ function f128() {
+ f129();
+ return Math.random();
+ }
+
+ function f129() {
+ f130();
+ return Math.random();
+ }
+
+ function f130() {
+ f131();
+ return Math.random();
+ }
+
+ function f131() {
+ f132();
+ return Math.random();
+ }
+
+ function f132() {
+ f133();
+ return Math.random();
+ }
+
+ function f133() {
+ f134();
+ return Math.random();
+ }
+
+ function f134() {
+ f135();
+ return Math.random();
+ }
+
+ function f135() {
+ f136();
+ return Math.random();
+ }
+
+ function f136() {
+ f137();
+ return Math.random();
+ }
+
+ function f137() {
+ f138();
+ return Math.random();
+ }
+
+ function f138() {
+ f139();
+ return Math.random();
+ }
+
+ function f139() {
+ f140();
+ return Math.random();
+ }
+
+ function f140() {
+ f141();
+ return Math.random();
+ }
+
+ function f141() {
+ f142();
+ return Math.random();
+ }
+
+ function f142() {
+ f143();
+ return Math.random();
+ }
+
+ function f143() {
+ f144();
+ return Math.random();
+ }
+
+ function f144() {
+ f145();
+ return Math.random();
+ }
+
+ function f145() {
+ f146();
+ return Math.random();
+ }
+
+ function f146() {
+ f147();
+ return Math.random();
+ }
+
+ function f147() {
+ f148();
+ return Math.random();
+ }
+
+ function f148() {
+ f149();
+ return Math.random();
+ }
+
+ function f149() {
+ f150();
+ return Math.random();
+ }
+
+ function f150() {
+ f151();
+ return Math.random();
+ }
+
+ function f151() {
+ f152();
+ return Math.random();
+ }
+
+ function f152() {
+ f153();
+ return Math.random();
+ }
+
+ function f153() {
+ f154();
+ return Math.random();
+ }
+
+ function f154() {
+ f155();
+ return Math.random();
+ }
+
+ function f155() {
+ f156();
+ return Math.random();
+ }
+
+ function f156() {
+ f157();
+ return Math.random();
+ }
+
+ function f157() {
+ f158();
+ return Math.random();
+ }
+
+ function f158() {
+ f159();
+ return Math.random();
+ }
+
+ function f159() {
+ f160();
+ return Math.random();
+ }
+
+ function f160() {
+ f161();
+ return Math.random();
+ }
+
+ function f161() {
+ f162();
+ return Math.random();
+ }
+
+ function f162() {
+ f163();
+ return Math.random();
+ }
+
+ function f163() {
+ f164();
+ return Math.random();
+ }
+
+ function f164() {
+ f165();
+ return Math.random();
+ }
+
+ function f165() {
+ f166();
+ return Math.random();
+ }
+
+ function f166() {
+ f167();
+ return Math.random();
+ }
+
+ function f167() {
+ f168();
+ return Math.random();
+ }
+
+ function f168() {
+ f169();
+ return Math.random();
+ }
+
+ function f169() {
+ f170();
+ return Math.random();
+ }
+
+ function f170() {
+ f171();
+ return Math.random();
+ }
+
+ function f171() {
+ f172();
+ return Math.random();
+ }
+
+ function f172() {
+ f173();
+ return Math.random();
+ }
+
+ function f173() {
+ f174();
+ return Math.random();
+ }
+
+ function f174() {
+ f175();
+ return Math.random();
+ }
+
+ function f175() {
+ f176();
+ return Math.random();
+ }
+
+ function f176() {
+ f177();
+ return Math.random();
+ }
+
+ function f177() {
+ f178();
+ return Math.random();
+ }
+
+ function f178() {
+ f179();
+ return Math.random();
+ }
+
+ function f179() {
+ f180();
+ return Math.random();
+ }
+
+ function f180() {
+ f181();
+ return Math.random();
+ }
+
+ function f181() {
+ f182();
+ return Math.random();
+ }
+
+ function f182() {
+ f183();
+ return Math.random();
+ }
+
+ function f183() {
+ f184();
+ return Math.random();
+ }
+
+ function f184() {
+ f185();
+ return Math.random();
+ }
+
+ function f185() {
+ f186();
+ return Math.random();
+ }
+
+ function f186() {
+ f187();
+ return Math.random();
+ }
+
+ function f187() {
+ f188();
+ return Math.random();
+ }
+
+ function f188() {
+ f189();
+ return Math.random();
+ }
+
+ function f189() {
+ f190();
+ return Math.random();
+ }
+
+ function f190() {
+ f191();
+ return Math.random();
+ }
+
+ function f191() {
+ f192();
+ return Math.random();
+ }
+
+ function f192() {
+ f193();
+ return Math.random();
+ }
+
+ function f193() {
+ f194();
+ return Math.random();
+ }
+
+ function f194() {
+ f195();
+ return Math.random();
+ }
+
+ function f195() {
+ f196();
+ return Math.random();
+ }
+
+ function f196() {
+ f197();
+ return Math.random();
+ }
+
+ function f197() {
+ f198();
+ return Math.random();
+ }
+
+ function f198() {
+ f199();
+ return Math.random();
+ }
+
+ function f199() {
+ return Math.random();
+ }
+})();
diff --git a/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/public/static/js/minified.js b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/public/static/js/minified.js
new file mode 100644
index 0000000000..0a1672b892
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/public/static/js/minified.js
@@ -0,0 +1,2 @@
+(()=>{var e,t,n,r,o={82603:(e,t,n)=>{var r={"./af/amo.js":[87761,7004],"./ar/amo.js":[85723,7496],"./ast/amo.js":[82180,8865],"./az/amo.js":[40159,339],"./bg/amo.js":[13534,9628],"./bn/amo.js":[19583,685],"./bs/amo.js":[24711,3751],"./ca/amo.js":[88233,9918],"./cak/amo.js":[41964,8677],"./cs/amo.js":[55610,4402],"./da/amo.js":[77457,689],"./de/amo.js":[22359,652],"./dsb/amo.js":[60440,7049],"./el/amo.js":[59509,1132],"./en_CA/amo.js":[71553,9419],"./en_GB/amo.js":[93778,7927],"./en_US/amo.js":[35946,7636],"./es/amo.js":[16397,3178],"./et/amo.js":[99677,186],"./eu/amo.js":[58331,458],"./fa/amo.js":[93234,5763],"./fi/amo.js":[86493,972],"./fr/amo.js":[63565,8470],"./fy_NL/amo.js":[20138,673],"./ga_IE/amo.js":[89495,7597],"./he/amo.js":[69983,9300],"./hr/amo.js":[13136,3107],"./hsb/amo.js":[59932,7352],"./hu/amo.js":[56290,9649],"./ia/amo.js":[44432,5039],"./id/amo.js":[95407,7542],"./is/amo.js":[99406,5110],"./it/amo.js":[31661,6918],"./ja/amo.js":[25800,2958],"./ka/amo.js":[3821,2704],"./kab/amo.js":[83514,6897],"./ko/amo.js":[82917,9814],"./lt/amo.js":[13907,7030],"./lv/amo.js":[2787,3957],"./mk/amo.js":[87286,4960],"./mn/amo.js":[18282,5101],"./ms/amo.js":[55497,5256],"./mt/amo.js":[30954,3130],"./nb_NO/amo.js":[78493,6788],"./nl/amo.js":[80097,9988],"./nn_NO/amo.js":[13094,2068],"./pa_IN/amo.js":[23501,3197],"./pl/amo.js":[87918,6737],"./pt_BR/amo.js":[37377,9700],"./pt_PT/amo.js":[98187,7905],"./ro/amo.js":[21598,5490],"./ru/amo.js":[8665,6872],"./sk/amo.js":[33969,2580],"./sl/amo.js":[8607,4469],"./sq/amo.js":[32785,929],"./sv_SE/amo.js":[2431,7284],"./te/amo.js":[91635,9290],"./th/amo.js":[65576,9901],"./tr/amo.js":[81986,3155],"./uk/amo.js":[98707,1818],"./ur/amo.js":[38564,5899],"./vi/amo.js":[61222,6553],"./zh_CN/amo.js":[52008,4872],"./zh_TW/amo.js":[42617,5494]};function o(e){if(!n.o(r,e))return Promise.resolve().then((()=>{var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}));var t=r[e],o=t[0];return n.e(t[1]).then((()=>n.t(o,23)))}o.keys=()=>Object.keys(r),o.id=82603,e.exports=o},66534:(e,t,n)=>{e.exports=n(39425)},17066:e=>{e.exports=window.FormData},96521:e=>{!function(){const t=(e,t)=>e===t?0:e>t?1:-1,n=(e,n)=>e?n?t(e,n):-1:n?1:0,r=(e,r)=>{let o=t(e.a,r.a);return 0!==o?o:(o=n(e.b,r.b),0!==o?o:(o=t(e.c,r.c),0!==o?o:n(e.d,r.d)))},o=e=>!e||/^0+$/.test(e.toString())?0:parseInt(e,10)||e,i=e=>{const t={a:0,b:0,c:0,d:0};if(!e)return t;if("*"===e)return t.a=1/0,t;t.a=parseInt(e,10);let n=e.indexOf(t.a.toString()[0])+1;t.a.toString().startsWith("-")&&n++;const r=e.substr(n);return"+"===r[0]?(t.a+=1,t.b="pre"):r.startsWith("pre")?(t.b="pre",t.c=o(r.substr(3))):r&&(t.b=o(r)),t.c&&(t.d=o(r.substr(t.b.toString().length+t.c.toString().length))),t},a=(e,t)=>{const n=e.split("."),o=t.split("."),a=Math.max(n.length,o.length);for(let e=0;e<a;e++){const t=i(n[e]),a=i(o[e]),u=r(t,a);if(0!==u)return u}return 0};void 0!==e.exports?e.exports={mozCompare:a,parseVersionPart:i}:"undefined"!=typeof window&&(window.mozCompare=a)}()},77565:(e,t,n)=>{"use strict";n.r(t),n.d(t,{addChangeListeners:()=>h,enable:()=>y,getAddon:()=>s,getAddonStatus:()=>u,hasAbuseReportPanelEnabled:()=>l,hasAddonManager:()=>c,install:()=>p,reportAbuse:()=>f,uninstall:()=>d});n(59201),n(86781),n(99918),n(72145),n(45792),n(6893),n(72764),n(83386),n(52906),n(66728),n(42484),n(31815),n(79249),n(38957),n(51913),n(87758),n(53689),n(9229),n(78685),n(28417);var r=n(9119),o=n(2163);function i(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return a(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return a(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){function t(t){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}((function(e){throw e})),f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,u=!0,c=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return u=e.done,e},e:function(e){function t(t){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}((function(e){c=!0,i=e})),f:function(){try{u||null==n.return||n.return()}finally{if(c)throw i}}}}function a(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function u(e){var t=e.addon,n=e.type,r=t.isActive,i=t.isEnabled,a=o.rr;return r&&i?a=o.Hi:o.Yd!==n&&!r&&i&&(a=o.zK),a}function c(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.navigator;return"undefined"!=typeof window&&"mozAddonManager"in(t||window.navigator)}function s(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=n._mozAddonManager,i=void 0===o?window.navigator.mozAddonManager:o;return i||e.exports.hasAddonManager()?i.getAddonByID(t).then((function(e){if(!e)throw new Error("Addon not found");return r.Z.debug("Add-on found",e),e})):Promise.reject(new Error("Cannot check add-on status"))}function l(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.navigator.mozAddonManager;return(e||c())&&e.abuseReportPanelEnabled||!1}function f(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t._mozAddonManager,r=void 0===n?window.navigator.mozAddonManager:n;return l(r)&&r.reportAbuse?r.reportAbuse&&r.reportAbuse(e):Promise.reject(new Error("Cannot report abuse via Firefox"))}function p(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},a=n._log,u=void 0===a?r.Z:a,c=n._mozAddonManager,s=void 0===c?window.navigator.mozAddonManager:c,l=n.hash,f=n.onIgnoredRejection,p=void 0===f?function(){}:f;return s.createInstall({url:e,hash:l}).then((function(e){var n,r=function(n){return t(e,n)},a=i(o.Nc);try{for(a.s();!(n=a.n()).done;){var c=n.value;u.info("[install] Adding listener for ".concat(c)),e.addEventListener(c,r)}}catch(e){a.e(e)}finally{a.f()}return new Promise((function(t,n){e.addEventListener("onInstallEnded",(function(){return t()})),e.addEventListener("onInstallFailed",(function(){return n()})),u.info("Events to handle the installation initialized."),e.install().catch((function(e){u.warn("Ignoring promise rejection during installation: ".concat(e)),p()}))}))}))}function d(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t._mozAddonManager,o=void 0===n?window.navigator.mozAddonManager:n;return s(e,{_mozAddonManager:o}).then((function(t){return r.Z.info("Requesting uninstall of ".concat(e)),t.uninstall()}))}function h(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},a=n._log,c=void 0===a?r.Z:a;function l(n){var r=n.id,i=n.type,a=n.needsRestart;if(c.info("Event received: %o",{type:i,id:r,needsRestart:a}),i===o.a)return s(r,{_mozAddonManager:t}).then((function(t){var n=u({addon:t});return e({guid:r,status:n,needsRestart:a,canUninstall:t.canUninstall})})).catch((function(e){c.error("Unexpected error after having received onOperationCancelled event: %o",e)}));if([o.uf,o.C$].includes(i))return e({guid:r,status:o.U9[i],needsRestart:a,canUninstall:!0});if(o.U9.hasOwnProperty(i))return s(r,{_mozAddonManager:t}).then((function(t){return e({guid:r,status:o.U9[i],needsRestart:a,canUninstall:t.canUninstall})}));throw new Error("Unknown global event: ".concat(i))}if(t&&t.addEventListener){var f,p=i(o.N8);try{for(p.s();!(f=p.n()).done;){var d=f.value;c.info('adding event listener for "'.concat(d,'"')),t.addEventListener(d,l)}}catch(e){p.e(e)}finally{p.f()}t.addEventListener(o.a,l),c.info("Global change event listeners have been initialized")}else c.info("mozAddonManager.addEventListener not available");return l}function y(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t._mozAddonManager,i=void 0===n?window.navigator.mozAddonManager:n;return s(e,{_mozAddonManager:i}).then((function(t){if(r.Z.info("Enable ".concat(e)),t.setEnabled)return t.setEnabled(!0);throw new Error(o.U4)}))}e=n.hmd(e)},18647:(e,t,n)=>{"use strict";n.d(t,{Z:()=>l});n(67407),n(72764),n(99627),n(12978),n(61511),n(79249),n(14862),n(99918),n(7283),n(83159),n(9536),n(75880),n(12578),n(59201),n(86781);var r,o=n(29343);function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){u(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function u(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function c(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function s(e,t,n){return t&&c(e.prototype,t),n&&c(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}const l=new(s((function e(t){var n=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),Object.assign(this,{has:function(e){return t.hasOwnProperty(e)},get:function(e){if(n.has(e))return t[e];throw new Error((0,o.f9)(r||(i=['Key "','" was not found in clientConfig. Check the\n key has been added to clientConfigKeys'],a||(a=i.slice(0)),r=Object.freeze(Object.defineProperties(i,{raw:{value:Object.freeze(a)}}))),e));var i,a}})})))(a(a({},{allowErrorSimulation:!1,apiHost:"https://addons.mozilla.org",apiPath:"/api/",apiVersion:"v5",baseURL:"https://addons.mozilla.org",cookieMaxAge:2592e3,cookieName:"sessionid",cookieSecure:!0,defaultLang:"en-US",enableDevTools:!1,enableFeatureVPNPromo:!0,enableRequestID:!0,enableStrictMode:!1,experiments:{"20210714_amo_vpn_promo":!1},extensionWorkshopUrl:"https://extensionworkshop.com",fxaConfig:"amo",hrefLangsMap:{"x-default":"en-US",en:"en-US",pt:"pt-PT"},isDeployed:!0,isDevelopment:!1,langMap:{"bn-BD":"bn",en:"en-US",ga:"ga-IE",pt:"pt-PT",sv:"sv-SE",zh:"zh-CN"},langs:["af","ar","ast","az","bg","bn","bs","ca","cak","cs","da","de","dsb","el","en-CA","en-GB","en-US","es","et","eu","fa","fi","fr","fy-NL","ga-IE","he","hr","hsb","hu","ia","id","is","it","ja","ka","kab","ko","lt","lv","mk","mn","ms","mt","nb-NO","nl","nn-NO","pa-IN","pl","pt-BR","pt-PT","ro","ru","sk","sl","sq","sv-SE","te","th","tr","uk","ur","vi","zh-CN","zh-TW"],loggingLevel:"info",mozillaUserId:4757633,restrictSearchResultsToAppVersion:!0,rtlLangs:["ar","fa","he","ur"],staticPath:"/static-frontend/",trackingEnabled:!0,trackingId:"UA-36116321-7",trackingSendInitPageView:!0,trackingSendWebVitals:!0,unsupportedHrefLangs:["ast","cak","dsb","hsb","kab"],validClientAppUrlExceptions:["__frontend_heartbeat__","__frontend_lbheartbeat__","__frontend_version__","__version__","about","admin","apps","blocklist","blog","contribute.json","developer_agreement","developers","editors","google1f3e37b7351799a5.html","google231a41e803e464e9.html","jsi18n","review_guide","reviewers","robots.txt","services","sitemap.xml","static-frontend","static-server","statistics","update","user-media"],validClientApplications:["android","firefox"],validLocaleUrlExceptions:["__frontend_version__","__version__","blocklist","blog","contribute.json","downloads","google1f3e37b7351799a5.html","google231a41e803e464e9.html","robots.txt","services","sitemap.xml","static-frontend","static-server","update","user-media"],validTrailingSlashUrlExceptions:["/$lang/$clientApp/user/abuse","/$lang/$clientApp/user/rmlocale","/$lang/$clientApp/users/ajax","/$lang/$clientApp/users/delete","/$lang/$clientApp/users/edit","/$lang/$clientApp/users/login","/$lang/$clientApp/users/logout","/$lang/$clientApp/users/register","/$lang/about","/$lang/review_guide"]}),{},{client:!0,server:!1}))},2163:(e,t,n)=>{"use strict";n.d(t,{AT:()=>Ot,Ai:()=>ht,B2:()=>ye,B6:()=>St,BH:()=>fe,Bg:()=>Et,Bz:()=>X,C$:()=>Je,CK:()=>G,D6:()=>kt,DE:()=>I,Db:()=>l,Eb:()=>te,F6:()=>A,Fb:()=>p,Go:()=>Oe,Gz:()=>M,H0:()=>Re,HH:()=>Q,HR:()=>Pe,Hi:()=>g,IU:()=>re,J6:()=>Rt,JW:()=>$,Jp:()=>nt,Jt:()=>oe,Kj:()=>w,LF:()=>q,Mb:()=>bt,Mg:()=>S,Mj:()=>ue,Mr:()=>ft,My:()=>pe,N8:()=>et,NI:()=>ae,Nc:()=>xe,Nu:()=>se,Nx:()=>be,OC:()=>u,OO:()=>Pt,OS:()=>ke,Of:()=>_e,Oj:()=>Ge,Ow:()=>ee,Pn:()=>f,Po:()=>H,Pr:()=>wt,Px:()=>z,QZ:()=>at,Rq:()=>Te,So:()=>L,Sw:()=>lt,T3:()=>W,Tq:()=>B,U4:()=>$e,U9:()=>Ke,UZ:()=>v,Uw:()=>ot,VD:()=>V,VN:()=>De,V_:()=>dt,Vg:()=>P,W8:()=>It,Y4:()=>ve,YE:()=>Y,YM:()=>he,Yd:()=>U,Yp:()=>pt,ZP:()=>_,ZV:()=>Me,Zt:()=>Ve,_y:()=>T,a:()=>Xe,aS:()=>We,bp:()=>ut,cr:()=>Tt,cs:()=>ie,d$:()=>F,dG:()=>Ie,dJ:()=>Be,e0:()=>rt,eO:()=>ge,eV:()=>s,e_:()=>E,fq:()=>_t,g:()=>b,g$:()=>xt,gQ:()=>Le,hY:()=>C,hi:()=>je,iC:()=>Ct,i_:()=>qe,iq:()=>m,jM:()=>Fe,jV:()=>D,jm:()=>yt,jy:()=>vt,k_:()=>J,kc:()=>ce,kl:()=>we,lS:()=>gt,lm:()=>Ae,lx:()=>He,lz:()=>j,mD:()=>it,nl:()=>Ne,o6:()=>K,o_:()=>ze,op:()=>Z,pl:()=>R,pn:()=>me,q3:()=>h,rZ:()=>d,rr:()=>y,rs:()=>Ee,tX:()=>Se,u:()=>ne,uW:()=>a,uf:()=>Qe,ui:()=>Ye,un:()=>x,ut:()=>ct,vY:()=>tt,wZ:()=>N,wn:()=>le,xS:()=>mt,xZ:()=>de,xw:()=>c,z:()=>Ue,z1:()=>st,z8:()=>Ze,zK:()=>O,zi:()=>Ce,zl:()=>k});n(17918),n(99918),n(61511),n(67407),n(79249),n(14862),n(7283),n(83159),n(9536),n(75880),n(12978);function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){i(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var a="review_flag_reason_spam",u="review_flag_reason_language",c="review_flag_reason_bug_support",s="review_flag_reason_other",l=4,f=3,p=10,d="https://www.mozilla.org/firefox/download/thanks/",h="https://support.mozilla.org/kb/add-on-badges",y="DISABLED",m="DISABLING",v="DOWNLOADING",g="ENABLED",b="ENABLING",w="ERROR",O="INACTIVE",E="INSTALLED",_="INSTALLING",x="UNINSTALLED",S="UNINSTALLING",j="UNKNOWN",P="DOWNLOAD_FAILED",k="INSTALL_CANCELLED",I="INSTALL_FAILED",T="ERROR_CORRUPT_FILE",R="FATAL_INSTALL_ERROR",C="FATAL_UNINSTALL_ERROR",A="FATAL_ERROR",N="android",L="firefox",D="dictionary",M="extension",F="language",U="statictheme",B=[D,M,F,U],H={extensions:M,themes:U},q=Object.keys(H).reduce((function(e,t){return o(o({},e),{},i({},H[t],t))}),{}),z="INCOMPATIBLE_FIREFOX_FOR_IOS",G="INCOMPATIBLE_OVER_MAX_VERSION",W="INCOMPATIBLE_NOT_FIREFOX",V="INCOMPATIBLE_UNDER_MIN_VERSION",Y="INCOMPATIBLE_UNSUPPORTED_PLATFORM",Z="INCOMPATIBLE_ANDROID_UNSUPPORTED",$="addon",K=U,Q="invalid",X="collection",J="homepage-collection-featured",ee="featured",te="search",ne="rating",re="hotness",oe="tag-shelf-",ie="VIEW_CONTEXT_HOME",ae="VIEW_CONTEXT_LANGUAGE_TOOLS",ue="hotness",ce="rating",se="users",le="random",fe="relevance",pe="updated",de="recommended",he="".concat(de,",").concat(se),ye=he,me="added",ve="-added",ge="name",be="-popularity",we="CLEAR_ERROR",Oe="SET_ERROR",Ee="SET_ERROR_MESSAGE",_e="SET_VIEW_CONTEXT",xe=["onDownloadStarted","onDownloadProgress","onDownloadEnded","onDownloadCancelled","onDownloadFailed","onInstallStarted","onInstallProgress","onInstallEnded","onInstallCancelled","onInstallFailed"],Se="INSTALL_STATE",je="START_DOWNLOAD",Pe="DOWNLOAD_PROGRESS",ke="INSTALL_COMPLETE",Ie="UNINSTALL_COMPLETE",Te="INSTALL_ERROR",Re="enable",Ce="install",Ae="install:cancelled",Ne="install:download-failed",Le="install:started",De="uninstall",Me="AMO Addon Activation",Fe="AMO Theme Activation",Ue="AMO Addon Installs",Be="AMO Theme Installs",He="AMO Addon Installs Cancelled",qe="AMO Theme Installs Cancelled",ze="AMO Addon Installs Download Failed",Ge="AMO Theme Installs Download Failed",We="AMO Addon Installs Started",Ve="AMO Theme Installs Started",Ye="AMO Addon Uninstalls",Ze="AMO Theme Uninstalls",$e="SET_ENABLE_NOT_AVAILABLE",Ke={onDisabled:y,onEnabled:g,onInstalling:_,onInstalled:E,onUninstalling:S,onUninstalled:x,onEnabling:b,onDisabling:m},Qe="onInstalling",Xe="onOperationCancelled",Je="onUninstalled",et=Object.keys(Ke),tt="ERROR_UNKNOWN",nt=["ERROR_AUTHENTICATION_EXPIRED","ERROR_DECODING_SIGNATURE","ERROR_SIGNATURE_EXPIRED"],rt="ERROR_ADDON_DISABLED_BY_DEV",ot="ERROR_ADDON_DISABLED_BY_ADMIN",it="Addons:Edit",at="Addons:Review",ut="Stats:View",ct="Admin:Curation",st="Collections:Contribute",lt="featured-personas",ft="Addons:ContentReview",pt="Addons:ReviewUnlisted",dt="Ratings:Moderate",ht="Users:Edit",yt="*:*",mt="ReviewerTools:View",vt="Addons:RecommendedReview",gt="Addons:ThemeReview",bt="amo-request-id",wt="addons.mozilla.org",Ot="referral",Et="amo-fx-cta",_t="line",xt="recommended",St="sponsored",jt="spotlight",Pt="verified",kt=[_t,xt,Pt],It=[_t,xt,St,jt,Pt],Tt="badged",Rt="".concat(St,",").concat(Pt),Ct="amo"},9119:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});n(17918),n(99918),n(36353),n(67407),n(61511),n(79249),n(14862),n(7283),n(83159),n(9536),n(75880),n(12978);var r=n(18647),o=n(2163);function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){u(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function u(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var c=null,s=null,l=null;c=n(88653),r.Z.get("enableRequestID")&&(s=n(97925)),r.Z.get("server")&&(l=n(92366));var f=c({level:r.Z.get("loggingLevel"),name:o.iC,timestamp:!l||function(){return',"time":'.concat(l())}});const p=["debug","error","fatal","info","trace","warn"].reduce((function(e,t){return a(a({},e),{},u({},t,(function(){for(var e=s&&s.get(o.Mb),n=arguments.length,r=new Array(n),i=0;i<n;i++)r[i]=arguments[i];e?f[t].apply(f,[{amo_request_id:e}].concat(r)):f[t].apply(f,r)})))}),{})},24579:(e,t)=>{"use strict";var n="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");t.encode=function(e){if(0===e)return n[0];for(var t="";e>0;)t=n[e%62]+t,e=Math.floor(e/62);return t},t.decode=function(e){var t,n,r=0,o=e.length;for(t=0;t<o;t++)n=e.charCodeAt(t),r+=(n-=n<58?48:n<91?29:87)*Math.pow(62,o-t-1);return r}},24920:(e,t)=>{"use strict";t.encode=function(e,t){let n=t.byCode;if(0===e)return n[0];for(var r="",o=t.length;e>0;)r=n[e%o]+r,e=Math.floor(e/o);return r},t.decode=function(e,t){var n,r=t.byChar,o=0,i=e.length,a=t.length;for(n=0;n<i;n++)o+=r[e[n]]*Math.pow(a,i-n-1);return o},t.indexCharset=function(e){var t,n,r={},o={},i=e.length;for(t=0;t<i;t++)n=e[t],r[t]=n,o[n]=t;return{byCode:r,byChar:o,length:i}}},1047:(e,t,n)=>{"use strict";var r=n(24579),o=n(24920),i={encode:r.encode,decode:r.decode,setCharacterSet:function(e){if(62!==e.length)throw Error("You must supply 62 characters.");var t,n,r={};for(t=0;t<e.length;t++){if(r[n=e[t]])throw Error("You must use unique characters.");r[n]=!0}e=o.indexCharset(e),i.encode=function(t){return o.encode(t,e)},i.decode=function(t){return o.decode(t,e)}}};e.exports=i},41550:(e,t)=>{"use strict";t.byteLength=function(e){var t=c(e),n=t[0],r=t[1];return 3*(n+r)/4-r},t.toByteArray=function(e){var t,n,i=c(e),a=i[0],u=i[1],s=new o(function(e,t,n){return 3*(t+n)/4-n}(0,a,u)),l=0,f=u>0?a-4:a;for(n=0;n<f;n+=4)t=r[e.charCodeAt(n)]<<18|r[e.charCodeAt(n+1)]<<12|r[e.charCodeAt(n+2)]<<6|r[e.charCodeAt(n+3)],s[l++]=t>>16&255,s[l++]=t>>8&255,s[l++]=255&t;2===u&&(t=r[e.charCodeAt(n)]<<2|r[e.charCodeAt(n+1)]>>4,s[l++]=255&t);1===u&&(t=r[e.charCodeAt(n)]<<10|r[e.charCodeAt(n+1)]<<4|r[e.charCodeAt(n+2)]>>2,s[l++]=t>>8&255,s[l++]=255&t);return s},t.fromByteArray=function(e){for(var t,r=e.length,o=r%3,i=[],a=16383,u=0,c=r-o;u<c;u+=a)i.push(s(e,u,u+a>c?c:u+a));1===o?(t=e[r-1],i.push(n[t>>2]+n[t<<4&63]+"==")):2===o&&(t=(e[r-2]<<8)+e[r-1],i.push(n[t>>10]+n[t>>4&63]+n[t<<2&63]+"="));return i.join("")};for(var n=[],r=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=0,u=i.length;a<u;++a)n[a]=i[a],r[i.charCodeAt(a)]=a;function c(e){var t=e.length;if(t%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var n=e.indexOf("=");return-1===n&&(n=t),[n,n===t?0:4-n%4]}function s(e,t,r){for(var o,i,a=[],u=t;u<r;u+=3)o=(e[u]<<16&16711680)+(e[u+1]<<8&65280)+(255&e[u+2]),a.push(n[(i=o)>>18&63]+n[i>>12&63]+n[i>>6&63]+n[63&i]);return a.join("")}r["-".charCodeAt(0)]=62,r["_".charCodeAt(0)]=63},64942:(e,t,n)=>{var r;e=n.nmd(e);var o=function(e){"use strict";var t=1e7,n=9007199254740992,r=p(n),i="0123456789abcdefghijklmnopqrstuvwxyz",a="function"==typeof BigInt;function u(e,t,n,r){return void 0===e?u[0]:void 0!==t&&(10!=+t||n)?G(e,t,n,r):$(e)}function c(e,t){this.value=e,this.sign=t,this.isSmall=!1}function s(e){this.value=e,this.sign=e<0,this.isSmall=!0}function l(e){this.value=e}function f(e){return-n<e&&e<n}function p(e){return e<1e7?[e]:e<1e14?[e%1e7,Math.floor(e/1e7)]:[e%1e7,Math.floor(e/1e7)%1e7,Math.floor(e/1e14)]}function d(e){h(e);var n=e.length;if(n<4&&T(e,r)<0)switch(n){case 0:return 0;case 1:return e[0];case 2:return e[0]+e[1]*t;default:return e[0]+(e[1]+e[2]*t)*t}return e}function h(e){for(var t=e.length;0===e[--t];);e.length=t+1}function y(e){for(var t=new Array(e),n=-1;++n<e;)t[n]=0;return t}function m(e){return e>0?Math.floor(e):Math.ceil(e)}function v(e,n){var r,o,i=e.length,a=n.length,u=new Array(i),c=0,s=t;for(o=0;o<a;o++)c=(r=e[o]+n[o]+c)>=s?1:0,u[o]=r-c*s;for(;o<i;)c=(r=e[o]+c)===s?1:0,u[o++]=r-c*s;return c>0&&u.push(c),u}function g(e,t){return e.length>=t.length?v(e,t):v(t,e)}function b(e,n){var r,o,i=e.length,a=new Array(i),u=t;for(o=0;o<i;o++)r=e[o]-u+n,n=Math.floor(r/u),a[o]=r-n*u,n+=1;for(;n>0;)a[o++]=n%u,n=Math.floor(n/u);return a}function w(e,n){var r,o,i=e.length,a=n.length,u=new Array(i),c=0,s=t;for(r=0;r<a;r++)(o=e[r]-c-n[r])<0?(o+=s,c=1):c=0,u[r]=o;for(r=a;r<i;r++){if(!((o=e[r]-c)<0)){u[r++]=o;break}o+=s,u[r]=o}for(;r<i;r++)u[r]=e[r];return h(u),u}function O(e,n,r){var o,i,a=e.length,u=new Array(a),l=-n,f=t;for(o=0;o<a;o++)i=e[o]+l,l=Math.floor(i/f),i%=f,u[o]=i<0?i+f:i;return"number"==typeof(u=d(u))?(r&&(u=-u),new s(u)):new c(u,r)}function E(e,n){var r,o,i,a,u=e.length,c=n.length,s=y(u+c),l=t;for(i=0;i<u;++i){a=e[i];for(var f=0;f<c;++f)r=a*n[f]+s[i+f],o=Math.floor(r/l),s[i+f]=r-o*l,s[i+f+1]+=o}return h(s),s}function _(e,n){var r,o,i=e.length,a=new Array(i),u=t,c=0;for(o=0;o<i;o++)r=e[o]*n+c,c=Math.floor(r/u),a[o]=r-c*u;for(;c>0;)a[o++]=c%u,c=Math.floor(c/u);return a}function x(e,t){for(var n=[];t-- >0;)n.push(0);return n.concat(e)}function S(e,t){var n=Math.max(e.length,t.length);if(n<=30)return E(e,t);n=Math.ceil(n/2);var r=e.slice(n),o=e.slice(0,n),i=t.slice(n),a=t.slice(0,n),u=S(o,a),c=S(r,i),s=S(g(o,r),g(a,i)),l=g(g(u,x(w(w(s,u),c),n)),x(c,2*n));return h(l),l}function j(e,n,r){return new c(e<t?_(n,e):E(n,p(e)),r)}function P(e){var n,r,o,i,a=e.length,u=y(a+a),c=t;for(o=0;o<a;o++){r=0-(i=e[o])*i;for(var s=o;s<a;s++)n=i*e[s]*2+u[o+s]+r,r=Math.floor(n/c),u[o+s]=n-r*c;u[o+a]=r}return h(u),u}function k(e,t){var n,r,o,i,a=e.length,u=y(a);for(o=0,n=a-1;n>=0;--n)o=(i=1e7*o+e[n])-(r=m(i/t))*t,u[n]=0|r;return[u,0|o]}function I(e,n){var r,o=$(n);if(a)return[new l(e.value/o.value),new l(e.value%o.value)];var i,f=e.value,v=o.value;if(0===v)throw new Error("Cannot divide by zero");if(e.isSmall)return o.isSmall?[new s(m(f/v)),new s(f%v)]:[u[0],e];if(o.isSmall){if(1===v)return[e,u[0]];if(-1==v)return[e.negate(),u[0]];var g=Math.abs(v);if(g<t){i=d((r=k(f,g))[0]);var b=r[1];return e.sign&&(b=-b),"number"==typeof i?(e.sign!==o.sign&&(i=-i),[new s(i),new s(b)]):[new c(i,e.sign!==o.sign),new s(b)]}v=p(g)}var O=T(f,v);if(-1===O)return[u[0],e];if(0===O)return[u[e.sign===o.sign?1:-1],u[0]];i=(r=f.length+v.length<=200?function(e,n){var r,o,i,a,u,c,s,l=e.length,f=n.length,p=t,h=y(n.length),m=n[f-1],v=Math.ceil(p/(2*m)),g=_(e,v),b=_(n,v);for(g.length<=l&&g.push(0),b.push(0),m=b[f-1],o=l-f;o>=0;o--){for(r=p-1,g[o+f]!==m&&(r=Math.floor((g[o+f]*p+g[o+f-1])/m)),i=0,a=0,c=b.length,u=0;u<c;u++)i+=r*b[u],s=Math.floor(i/p),a+=g[o+u]-(i-s*p),i=s,a<0?(g[o+u]=a+p,a=-1):(g[o+u]=a,a=0);for(;0!==a;){for(r-=1,i=0,u=0;u<c;u++)(i+=g[o+u]-p+b[u])<0?(g[o+u]=i+p,i=0):(g[o+u]=i,i=1);a+=i}h[o]=r}return g=k(g,v)[0],[d(h),d(g)]}(f,v):function(e,n){for(var r,o,i,a,u,c=e.length,s=n.length,l=[],f=[],p=t;c;)if(f.unshift(e[--c]),h(f),T(f,n)<0)l.push(0);else{i=f[(o=f.length)-1]*p+f[o-2],a=n[s-1]*p+n[s-2],o>s&&(i=(i+1)*p),r=Math.ceil(i/a);do{if(T(u=_(n,r),f)<=0)break;r--}while(r);l.push(r),f=w(f,u)}return l.reverse(),[d(l),d(f)]}(f,v))[0];var E=e.sign!==o.sign,x=r[1],S=e.sign;return"number"==typeof i?(E&&(i=-i),i=new s(i)):i=new c(i,E),"number"==typeof x?(S&&(x=-x),x=new s(x)):x=new c(x,S),[i,x]}function T(e,t){if(e.length!==t.length)return e.length>t.length?1:-1;for(var n=e.length-1;n>=0;n--)if(e[n]!==t[n])return e[n]>t[n]?1:-1;return 0}function R(e){var t=e.abs();return!t.isUnit()&&(!!(t.equals(2)||t.equals(3)||t.equals(5))||!(t.isEven()||t.isDivisibleBy(3)||t.isDivisibleBy(5))&&(!!t.lesser(49)||void 0))}function C(e,t){for(var n,r,i,a=e.prev(),u=a,c=0;u.isEven();)u=u.divide(2),c++;e:for(r=0;r<t.length;r++)if(!e.lesser(t[r])&&!(i=o(t[r]).modPow(u,e)).isUnit()&&!i.equals(a)){for(n=c-1;0!=n;n--){if((i=i.square().mod(e)).isUnit())return!1;if(i.equals(a))continue e}return!1}return!0}c.prototype=Object.create(u.prototype),s.prototype=Object.create(u.prototype),l.prototype=Object.create(u.prototype),c.prototype.add=function(e){var t=$(e);if(this.sign!==t.sign)return this.subtract(t.negate());var n=this.value,r=t.value;return t.isSmall?new c(b(n,Math.abs(r)),this.sign):new c(g(n,r),this.sign)},c.prototype.plus=c.prototype.add,s.prototype.add=function(e){var t=$(e),n=this.value;if(n<0!==t.sign)return this.subtract(t.negate());var r=t.value;if(t.isSmall){if(f(n+r))return new s(n+r);r=p(Math.abs(r))}return new c(b(r,Math.abs(n)),n<0)},s.prototype.plus=s.prototype.add,l.prototype.add=function(e){return new l(this.value+$(e).value)},l.prototype.plus=l.prototype.add,c.prototype.subtract=function(e){var t=$(e);if(this.sign!==t.sign)return this.add(t.negate());var n=this.value,r=t.value;return t.isSmall?O(n,Math.abs(r),this.sign):function(e,t,n){var r;return T(e,t)>=0?r=w(e,t):(r=w(t,e),n=!n),"number"==typeof(r=d(r))?(n&&(r=-r),new s(r)):new c(r,n)}(n,r,this.sign)},c.prototype.minus=c.prototype.subtract,s.prototype.subtract=function(e){var t=$(e),n=this.value;if(n<0!==t.sign)return this.add(t.negate());var r=t.value;return t.isSmall?new s(n-r):O(r,Math.abs(n),n>=0)},s.prototype.minus=s.prototype.subtract,l.prototype.subtract=function(e){return new l(this.value-$(e).value)},l.prototype.minus=l.prototype.subtract,c.prototype.negate=function(){return new c(this.value,!this.sign)},s.prototype.negate=function(){var e=this.sign,t=new s(-this.value);return t.sign=!e,t},l.prototype.negate=function(){return new l(-this.value)},c.prototype.abs=function(){return new c(this.value,!1)},s.prototype.abs=function(){return new s(Math.abs(this.value))},l.prototype.abs=function(){return new l(this.value>=0?this.value:-this.value)},c.prototype.multiply=function(e){var n,r,o,i=$(e),a=this.value,s=i.value,l=this.sign!==i.sign;if(i.isSmall){if(0===s)return u[0];if(1===s)return this;if(-1===s)return this.negate();if((n=Math.abs(s))<t)return new c(_(a,n),l);s=p(n)}return r=a.length,o=s.length,new c(-.012*r-.012*o+15e-6*r*o>0?S(a,s):E(a,s),l)},c.prototype.times=c.prototype.multiply,s.prototype._multiplyBySmall=function(e){return f(e.value*this.value)?new s(e.value*this.value):j(Math.abs(e.value),p(Math.abs(this.value)),this.sign!==e.sign)},c.prototype._multiplyBySmall=function(e){return 0===e.value?u[0]:1===e.value?this:-1===e.value?this.negate():j(Math.abs(e.value),this.value,this.sign!==e.sign)},s.prototype.multiply=function(e){return $(e)._multiplyBySmall(this)},s.prototype.times=s.prototype.multiply,l.prototype.multiply=function(e){return new l(this.value*$(e).value)},l.prototype.times=l.prototype.multiply,c.prototype.square=function(){return new c(P(this.value),!1)},s.prototype.square=function(){var e=this.value*this.value;return f(e)?new s(e):new c(P(p(Math.abs(this.value))),!1)},l.prototype.square=function(e){return new l(this.value*this.value)},c.prototype.divmod=function(e){var t=I(this,e);return{quotient:t[0],remainder:t[1]}},l.prototype.divmod=s.prototype.divmod=c.prototype.divmod,c.prototype.divide=function(e){return I(this,e)[0]},l.prototype.over=l.prototype.divide=function(e){return new l(this.value/$(e).value)},s.prototype.over=s.prototype.divide=c.prototype.over=c.prototype.divide,c.prototype.mod=function(e){return I(this,e)[1]},l.prototype.mod=l.prototype.remainder=function(e){return new l(this.value%$(e).value)},s.prototype.remainder=s.prototype.mod=c.prototype.remainder=c.prototype.mod,c.prototype.pow=function(e){var t,n,r,o=$(e),i=this.value,a=o.value;if(0===a)return u[1];if(0===i)return u[0];if(1===i)return u[1];if(-1===i)return o.isEven()?u[1]:u[-1];if(o.sign)return u[0];if(!o.isSmall)throw new Error("The exponent "+o.toString()+" is too large.");if(this.isSmall&&f(t=Math.pow(i,a)))return new s(m(t));for(n=this,r=u[1];!0&a&&(r=r.times(n),--a),0!==a;)a/=2,n=n.square();return r},s.prototype.pow=c.prototype.pow,l.prototype.pow=function(e){var t=$(e),n=this.value,r=t.value,o=BigInt(0),i=BigInt(1),a=BigInt(2);if(r===o)return u[1];if(n===o)return u[0];if(n===i)return u[1];if(n===BigInt(-1))return t.isEven()?u[1]:u[-1];if(t.isNegative())return new l(o);for(var c=this,s=u[1];(r&i)===i&&(s=s.times(c),--r),r!==o;)r/=a,c=c.square();return s},c.prototype.modPow=function(e,t){if(e=$(e),(t=$(t)).isZero())throw new Error("Cannot take modPow with modulus 0");var n=u[1],r=this.mod(t);for(e.isNegative()&&(e=e.multiply(u[-1]),r=r.modInv(t));e.isPositive();){if(r.isZero())return u[0];e.isOdd()&&(n=n.multiply(r).mod(t)),e=e.divide(2),r=r.square().mod(t)}return n},l.prototype.modPow=s.prototype.modPow=c.prototype.modPow,c.prototype.compareAbs=function(e){var t=$(e),n=this.value,r=t.value;return t.isSmall?1:T(n,r)},s.prototype.compareAbs=function(e){var t=$(e),n=Math.abs(this.value),r=t.value;return t.isSmall?n===(r=Math.abs(r))?0:n>r?1:-1:-1},l.prototype.compareAbs=function(e){var t=this.value,n=$(e).value;return(t=t>=0?t:-t)===(n=n>=0?n:-n)?0:t>n?1:-1},c.prototype.compare=function(e){if(e===1/0)return-1;if(e===-1/0)return 1;var t=$(e),n=this.value,r=t.value;return this.sign!==t.sign?t.sign?1:-1:t.isSmall?this.sign?-1:1:T(n,r)*(this.sign?-1:1)},c.prototype.compareTo=c.prototype.compare,s.prototype.compare=function(e){if(e===1/0)return-1;if(e===-1/0)return 1;var t=$(e),n=this.value,r=t.value;return t.isSmall?n==r?0:n>r?1:-1:n<0!==t.sign?n<0?-1:1:n<0?1:-1},s.prototype.compareTo=s.prototype.compare,l.prototype.compare=function(e){if(e===1/0)return-1;if(e===-1/0)return 1;var t=this.value,n=$(e).value;return t===n?0:t>n?1:-1},l.prototype.compareTo=l.prototype.compare,c.prototype.equals=function(e){return 0===this.compare(e)},l.prototype.eq=l.prototype.equals=s.prototype.eq=s.prototype.equals=c.prototype.eq=c.prototype.equals,c.prototype.notEquals=function(e){return 0!==this.compare(e)},l.prototype.neq=l.prototype.notEquals=s.prototype.neq=s.prototype.notEquals=c.prototype.neq=c.prototype.notEquals,c.prototype.greater=function(e){return this.compare(e)>0},l.prototype.gt=l.prototype.greater=s.prototype.gt=s.prototype.greater=c.prototype.gt=c.prototype.greater,c.prototype.lesser=function(e){return this.compare(e)<0},l.prototype.lt=l.prototype.lesser=s.prototype.lt=s.prototype.lesser=c.prototype.lt=c.prototype.lesser,c.prototype.greaterOrEquals=function(e){return this.compare(e)>=0},l.prototype.geq=l.prototype.greaterOrEquals=s.prototype.geq=s.prototype.greaterOrEquals=c.prototype.geq=c.prototype.greaterOrEquals,c.prototype.lesserOrEquals=function(e){return this.compare(e)<=0},l.prototype.leq=l.prototype.lesserOrEquals=s.prototype.leq=s.prototype.lesserOrEquals=c.prototype.leq=c.prototype.lesserOrEquals,c.prototype.isEven=function(){return 0==(1&this.value[0])},s.prototype.isEven=function(){return 0==(1&this.value)},l.prototype.isEven=function(){return(this.value&BigInt(1))===BigInt(0)},c.prototype.isOdd=function(){return 1==(1&this.value[0])},s.prototype.isOdd=function(){return 1==(1&this.value)},l.prototype.isOdd=function(){return(this.value&BigInt(1))===BigInt(1)},c.prototype.isPositive=function(){return!this.sign},s.prototype.isPositive=function(){return this.value>0},l.prototype.isPositive=s.prototype.isPositive,c.prototype.isNegative=function(){return this.sign},s.prototype.isNegative=function(){return this.value<0},l.prototype.isNegative=s.prototype.isNegative,c.prototype.isUnit=function(){return!1},s.prototype.isUnit=function(){return 1===Math.abs(this.value)},l.prototype.isUnit=function(){return this.abs().value===BigInt(1)},c.prototype.isZero=function(){return!1},s.prototype.isZero=function(){return 0===this.value},l.prototype.isZero=function(){return this.value===BigInt(0)},c.prototype.isDivisibleBy=function(e){var t=$(e);return!t.isZero()&&(!!t.isUnit()||(0===t.compareAbs(2)?this.isEven():this.mod(t).isZero()))},l.prototype.isDivisibleBy=s.prototype.isDivisibleBy=c.prototype.isDivisibleBy,c.prototype.isPrime=function(t){var n=R(this);if(n!==e)return n;var r=this.abs(),i=r.bitLength();if(i<=64)return C(r,[2,3,5,7,11,13,17,19,23,29,31,37]);for(var a=Math.log(2)*i.toJSNumber(),u=Math.ceil(!0===t?2*Math.pow(a,2):a),c=[],s=0;s<u;s++)c.push(o(s+2));return C(r,c)},l.prototype.isPrime=s.prototype.isPrime=c.prototype.isPrime,c.prototype.isProbablePrime=function(t,n){var r=R(this);if(r!==e)return r;for(var i=this.abs(),a=t===e?5:t,u=[],c=0;c<a;c++)u.push(o.randBetween(2,i.minus(2),n));return C(i,u)},l.prototype.isProbablePrime=s.prototype.isProbablePrime=c.prototype.isProbablePrime,c.prototype.modInv=function(e){for(var t,n,r,i=o.zero,a=o.one,u=$(e),c=this.abs();!c.isZero();)t=u.divide(c),n=i,r=u,i=a,u=c,a=n.subtract(t.multiply(a)),c=r.subtract(t.multiply(c));if(!u.isUnit())throw new Error(this.toString()+" and "+e.toString()+" are not co-prime");return-1===i.compare(0)&&(i=i.add(e)),this.isNegative()?i.negate():i},l.prototype.modInv=s.prototype.modInv=c.prototype.modInv,c.prototype.next=function(){var e=this.value;return this.sign?O(e,1,this.sign):new c(b(e,1),this.sign)},s.prototype.next=function(){var e=this.value;return e+1<n?new s(e+1):new c(r,!1)},l.prototype.next=function(){return new l(this.value+BigInt(1))},c.prototype.prev=function(){var e=this.value;return this.sign?new c(b(e,1),!0):O(e,1,this.sign)},s.prototype.prev=function(){var e=this.value;return e-1>-n?new s(e-1):new c(r,!0)},l.prototype.prev=function(){return new l(this.value-BigInt(1))};for(var A=[1];2*A[A.length-1]<=t;)A.push(2*A[A.length-1]);var N=A.length,L=A[N-1];function D(e){return Math.abs(e)<=t}function M(e,t,n){t=$(t);for(var r=e.isNegative(),i=t.isNegative(),a=r?e.not():e,u=i?t.not():t,c=0,s=0,l=null,f=null,p=[];!a.isZero()||!u.isZero();)c=(l=I(a,L))[1].toJSNumber(),r&&(c=L-1-c),s=(f=I(u,L))[1].toJSNumber(),i&&(s=L-1-s),a=l[0],u=f[0],p.push(n(c,s));for(var d=0!==n(r?1:0,i?1:0)?o(-1):o(0),h=p.length-1;h>=0;h-=1)d=d.multiply(L).add(o(p[h]));return d}c.prototype.shiftLeft=function(e){var t=$(e).toJSNumber();if(!D(t))throw new Error(String(t)+" is too large for shifting.");if(t<0)return this.shiftRight(-t);var n=this;if(n.isZero())return n;for(;t>=N;)n=n.multiply(L),t-=N-1;return n.multiply(A[t])},l.prototype.shiftLeft=s.prototype.shiftLeft=c.prototype.shiftLeft,c.prototype.shiftRight=function(e){var t,n=$(e).toJSNumber();if(!D(n))throw new Error(String(n)+" is too large for shifting.");if(n<0)return this.shiftLeft(-n);for(var r=this;n>=N;){if(r.isZero()||r.isNegative()&&r.isUnit())return r;r=(t=I(r,L))[1].isNegative()?t[0].prev():t[0],n-=N-1}return(t=I(r,A[n]))[1].isNegative()?t[0].prev():t[0]},l.prototype.shiftRight=s.prototype.shiftRight=c.prototype.shiftRight,c.prototype.not=function(){return this.negate().prev()},l.prototype.not=s.prototype.not=c.prototype.not,c.prototype.and=function(e){return M(this,e,(function(e,t){return e&t}))},l.prototype.and=s.prototype.and=c.prototype.and,c.prototype.or=function(e){return M(this,e,(function(e,t){return e|t}))},l.prototype.or=s.prototype.or=c.prototype.or,c.prototype.xor=function(e){return M(this,e,(function(e,t){return e^t}))},l.prototype.xor=s.prototype.xor=c.prototype.xor;var F=1<<30;function U(e){var n=e.value,r="number"==typeof n?n|F:"bigint"==typeof n?n|BigInt(F):n[0]+n[1]*t|1073758208;return r&-r}function B(e,t){if(t.compareTo(e)<=0){var n=B(e,t.square(t)),r=n.p,i=n.e,a=r.multiply(t);return a.compareTo(e)<=0?{p:a,e:2*i+1}:{p:r,e:2*i}}return{p:o(1),e:0}}function H(e,t){return e=$(e),t=$(t),e.greater(t)?e:t}function q(e,t){return e=$(e),t=$(t),e.lesser(t)?e:t}function z(e,t){if(e=$(e).abs(),t=$(t).abs(),e.equals(t))return e;if(e.isZero())return t;if(t.isZero())return e;for(var n,r,o=u[1];e.isEven()&&t.isEven();)n=q(U(e),U(t)),e=e.divide(n),t=t.divide(n),o=o.multiply(n);for(;e.isEven();)e=e.divide(U(e));do{for(;t.isEven();)t=t.divide(U(t));e.greater(t)&&(r=t,t=e,e=r),t=t.subtract(e)}while(!t.isZero());return o.isUnit()?e:e.multiply(o)}c.prototype.bitLength=function(){var e=this;return e.compareTo(o(0))<0&&(e=e.negate().subtract(o(1))),0===e.compareTo(o(0))?o(0):o(B(e,o(2)).e).add(o(1))},l.prototype.bitLength=s.prototype.bitLength=c.prototype.bitLength;var G=function(e,t,n,r){n=n||i,e=String(e),r||(e=e.toLowerCase(),n=n.toLowerCase());var o,a=e.length,u=Math.abs(t),c={};for(o=0;o<n.length;o++)c[n[o]]=o;for(o=0;o<a;o++){if("-"!==(f=e[o])&&(f in c&&c[f]>=u)){if("1"===f&&1===u)continue;throw new Error(f+" is not a valid digit in base "+t+".")}}t=$(t);var s=[],l="-"===e[0];for(o=l?1:0;o<e.length;o++){var f;if((f=e[o])in c)s.push($(c[f]));else{if("<"!==f)throw new Error(f+" is not a valid character");var p=o;do{o++}while(">"!==e[o]&&o<e.length);s.push($(e.slice(p+1,o)))}}return W(s,t,l)};function W(e,t,n){var r,o=u[0],i=u[1];for(r=e.length-1;r>=0;r--)o=o.add(e[r].times(i)),i=i.times(t);return n?o.negate():o}function V(e,t){if((t=o(t)).isZero()){if(e.isZero())return{value:[0],isNegative:!1};throw new Error("Cannot convert nonzero numbers to base 0.")}if(t.equals(-1)){if(e.isZero())return{value:[0],isNegative:!1};if(e.isNegative())return{value:[].concat.apply([],Array.apply(null,Array(-e.toJSNumber())).map(Array.prototype.valueOf,[1,0])),isNegative:!1};var n=Array.apply(null,Array(e.toJSNumber()-1)).map(Array.prototype.valueOf,[0,1]);return n.unshift([1]),{value:[].concat.apply([],n),isNegative:!1}}var r=!1;if(e.isNegative()&&t.isPositive()&&(r=!0,e=e.abs()),t.isUnit())return e.isZero()?{value:[0],isNegative:!1}:{value:Array.apply(null,Array(e.toJSNumber())).map(Number.prototype.valueOf,1),isNegative:r};for(var i,a=[],u=e;u.isNegative()||u.compareAbs(t)>=0;){i=u.divmod(t),u=i.quotient;var c=i.remainder;c.isNegative()&&(c=t.minus(c).abs(),u=u.next()),a.push(c.toJSNumber())}return a.push(u.toJSNumber()),{value:a.reverse(),isNegative:r}}function Y(e,t,n){var r=V(e,t);return(r.isNegative?"-":"")+r.value.map((function(e){return function(e,t){return e<(t=t||i).length?t[e]:"<"+e+">"}(e,n)})).join("")}function Z(e){if(f(+e)){var t=+e;if(t===m(t))return a?new l(BigInt(t)):new s(t);throw new Error("Invalid integer: "+e)}var n="-"===e[0];n&&(e=e.slice(1));var r=e.split(/e/i);if(r.length>2)throw new Error("Invalid integer: "+r.join("e"));if(2===r.length){var o=r[1];if("+"===o[0]&&(o=o.slice(1)),(o=+o)!==m(o)||!f(o))throw new Error("Invalid integer: "+o+" is not a valid exponent.");var i=r[0],u=i.indexOf(".");if(u>=0&&(o-=i.length-u-1,i=i.slice(0,u)+i.slice(u+1)),o<0)throw new Error("Cannot include negative exponent part for integers");e=i+=new Array(o+1).join("0")}if(!/^([0-9][0-9]*)$/.test(e))throw new Error("Invalid integer: "+e);if(a)return new l(BigInt(n?"-"+e:e));for(var p=[],d=e.length,y=d-7;d>0;)p.push(+e.slice(y,d)),(y-=7)<0&&(y=0),d-=7;return h(p),new c(p,n)}function $(e){return"number"==typeof e?function(e){if(a)return new l(BigInt(e));if(f(e)){if(e!==m(e))throw new Error(e+" is not an integer.");return new s(e)}return Z(e.toString())}(e):"string"==typeof e?Z(e):"bigint"==typeof e?new l(e):e}c.prototype.toArray=function(e){return V(this,e)},s.prototype.toArray=function(e){return V(this,e)},l.prototype.toArray=function(e){return V(this,e)},c.prototype.toString=function(t,n){if(t===e&&(t=10),10!==t)return Y(this,t,n);for(var r,o=this.value,i=o.length,a=String(o[--i]);--i>=0;)r=String(o[i]),a+="0000000".slice(r.length)+r;return(this.sign?"-":"")+a},s.prototype.toString=function(t,n){return t===e&&(t=10),10!=t?Y(this,t,n):String(this.value)},l.prototype.toString=s.prototype.toString,l.prototype.toJSON=c.prototype.toJSON=s.prototype.toJSON=function(){return this.toString()},c.prototype.valueOf=function(){return parseInt(this.toString(),10)},c.prototype.toJSNumber=c.prototype.valueOf,s.prototype.valueOf=function(){return this.value},s.prototype.toJSNumber=s.prototype.valueOf,l.prototype.valueOf=l.prototype.toJSNumber=function(){return parseInt(this.toString(),10)};for(var K=0;K<1e3;K++)u[K]=$(K),K>0&&(u[-K]=$(-K));return u.one=u[1],u.zero=u[0],u.minusOne=u[-1],u.max=H,u.min=q,u.gcd=z,u.lcm=function(e,t){return e=$(e).abs(),t=$(t).abs(),e.divide(z(e,t)).multiply(t)},u.isInstance=function(e){return e instanceof c||e instanceof s||e instanceof l},u.randBetween=function(e,n,r){e=$(e),n=$(n);var o=r||Math.random,i=q(e,n),a=H(e,n).subtract(i).add(1);if(a.isSmall)return i.add(Math.floor(o()*a));for(var c=V(a,t).value,s=[],l=!0,f=0;f<c.length;f++){var p=l?c[f]:t,d=m(o()*p);s.push(d),d<p&&(l=!1)}return i.add(u.fromArray(s,t,!1))},u.fromArray=function(e,t,n){return W(e.map($),$(t||10),n)},u}();e.hasOwnProperty("exports")&&(e.exports=o),void 0===(r=function(){return o}.call(t,n,t,e))||(e.exports=r)},16274:(e,t,n)=>{"use strict";var r=n(41550),o=n(21706),i="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;t.Buffer=c,t.SlowBuffer=function(e){+e!=e&&(e=0);return c.alloc(+e)},t.INSPECT_MAX_BYTES=50;var a=2147483647;function u(e){if(e>a)throw new RangeError('The value "'+e+'" is invalid for option "size"');var t=new Uint8Array(e);return Object.setPrototypeOf(t,c.prototype),t}function c(e,t,n){if("number"==typeof e){if("string"==typeof t)throw new TypeError('The "string" argument must be of type string. Received type number');return f(e)}return s(e,t,n)}function s(e,t,n){if("string"==typeof e)return function(e,t){"string"==typeof t&&""!==t||(t="utf8");if(!c.isEncoding(t))throw new TypeError("Unknown encoding: "+t);var n=0|y(e,t),r=u(n),o=r.write(e,t);o!==n&&(r=r.slice(0,o));return r}(e,t);if(ArrayBuffer.isView(e))return function(e){if(H(e,Uint8Array)){var t=new Uint8Array(e);return d(t.buffer,t.byteOffset,t.byteLength)}return p(e)}(e);if(null==e)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);if(H(e,ArrayBuffer)||e&&H(e.buffer,ArrayBuffer))return d(e,t,n);if("undefined"!=typeof SharedArrayBuffer&&(H(e,SharedArrayBuffer)||e&&H(e.buffer,SharedArrayBuffer)))return d(e,t,n);if("number"==typeof e)throw new TypeError('The "value" argument must not be of type number. Received type number');var r=e.valueOf&&e.valueOf();if(null!=r&&r!==e)return c.from(r,t,n);var o=function(e){if(c.isBuffer(e)){var t=0|h(e.length),n=u(t);return 0===n.length||e.copy(n,0,0,t),n}if(void 0!==e.length)return"number"!=typeof e.length||q(e.length)?u(0):p(e);if("Buffer"===e.type&&Array.isArray(e.data))return p(e.data)}(e);if(o)return o;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof e[Symbol.toPrimitive])return c.from(e[Symbol.toPrimitive]("string"),t,n);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e)}function l(e){if("number"!=typeof e)throw new TypeError('"size" argument must be of type number');if(e<0)throw new RangeError('The value "'+e+'" is invalid for option "size"')}function f(e){return l(e),u(e<0?0:0|h(e))}function p(e){for(var t=e.length<0?0:0|h(e.length),n=u(t),r=0;r<t;r+=1)n[r]=255&e[r];return n}function d(e,t,n){if(t<0||e.byteLength<t)throw new RangeError('"offset" is outside of buffer bounds');if(e.byteLength<t+(n||0))throw new RangeError('"length" is outside of buffer bounds');var r;return r=void 0===t&&void 0===n?new Uint8Array(e):void 0===n?new Uint8Array(e,t):new Uint8Array(e,t,n),Object.setPrototypeOf(r,c.prototype),r}function h(e){if(e>=a)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a.toString(16)+" bytes");return 0|e}function y(e,t){if(c.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||H(e,ArrayBuffer))return e.byteLength;if("string"!=typeof e)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);var n=e.length,r=arguments.length>2&&!0===arguments[2];if(!r&&0===n)return 0;for(var o=!1;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":return F(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return U(e).length;default:if(o)return r?-1:F(e).length;t=(""+t).toLowerCase(),o=!0}}function m(e,t,n){var r=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return T(this,t,n);case"utf8":case"utf-8":return j(this,t,n);case"ascii":return k(this,t,n);case"latin1":case"binary":return I(this,t,n);case"base64":return S(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return R(this,t,n);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}function v(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function g(e,t,n,r,o){if(0===e.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),q(n=+n)&&(n=o?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(o)return-1;n=e.length-1}else if(n<0){if(!o)return-1;n=0}if("string"==typeof t&&(t=c.from(t,r)),c.isBuffer(t))return 0===t.length?-1:b(e,t,n,r,o);if("number"==typeof t)return t&=255,"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):b(e,[t],n,r,o);throw new TypeError("val must be string, number or Buffer")}function b(e,t,n,r,o){var i,a=1,u=e.length,c=t.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||t.length<2)return-1;a=2,u/=2,c/=2,n/=2}function s(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(o){var l=-1;for(i=n;i<u;i++)if(s(e,i)===s(t,-1===l?0:i-l)){if(-1===l&&(l=i),i-l+1===c)return l*a}else-1!==l&&(i-=i-l),l=-1}else for(n+c>u&&(n=u-c),i=n;i>=0;i--){for(var f=!0,p=0;p<c;p++)if(s(e,i+p)!==s(t,p)){f=!1;break}if(f)return i}return-1}function w(e,t,n,r){n=Number(n)||0;var o=e.length-n;r?(r=Number(r))>o&&(r=o):r=o;var i=t.length;r>i/2&&(r=i/2);for(var a=0;a<r;++a){var u=parseInt(t.substr(2*a,2),16);if(q(u))return a;e[n+a]=u}return a}function O(e,t,n,r){return B(F(t,e.length-n),e,n,r)}function E(e,t,n,r){return B(function(e){for(var t=[],n=0;n<e.length;++n)t.push(255&e.charCodeAt(n));return t}(t),e,n,r)}function _(e,t,n,r){return B(U(t),e,n,r)}function x(e,t,n,r){return B(function(e,t){for(var n,r,o,i=[],a=0;a<e.length&&!((t-=2)<0);++a)r=(n=e.charCodeAt(a))>>8,o=n%256,i.push(o),i.push(r);return i}(t,e.length-n),e,n,r)}function S(e,t,n){return 0===t&&n===e.length?r.fromByteArray(e):r.fromByteArray(e.slice(t,n))}function j(e,t,n){n=Math.min(e.length,n);for(var r=[],o=t;o<n;){var i,a,u,c,s=e[o],l=null,f=s>239?4:s>223?3:s>191?2:1;if(o+f<=n)switch(f){case 1:s<128&&(l=s);break;case 2:128==(192&(i=e[o+1]))&&(c=(31&s)<<6|63&i)>127&&(l=c);break;case 3:i=e[o+1],a=e[o+2],128==(192&i)&&128==(192&a)&&(c=(15&s)<<12|(63&i)<<6|63&a)>2047&&(c<55296||c>57343)&&(l=c);break;case 4:i=e[o+1],a=e[o+2],u=e[o+3],128==(192&i)&&128==(192&a)&&128==(192&u)&&(c=(15&s)<<18|(63&i)<<12|(63&a)<<6|63&u)>65535&&c<1114112&&(l=c)}null===l?(l=65533,f=1):l>65535&&(l-=65536,r.push(l>>>10&1023|55296),l=56320|1023&l),r.push(l),o+=f}return function(e){var t=e.length;if(t<=P)return String.fromCharCode.apply(String,e);var n="",r=0;for(;r<t;)n+=String.fromCharCode.apply(String,e.slice(r,r+=P));return n}(r)}t.kMaxLength=a,c.TYPED_ARRAY_SUPPORT=function(){try{var e=new Uint8Array(1),t={foo:function(){return 42}};return Object.setPrototypeOf(t,Uint8Array.prototype),Object.setPrototypeOf(e,t),42===e.foo()}catch(e){return!1}}(),!c.TYPED_ARRAY_SUPPORT&&"undefined"!=typeof console&&console.error,Object.defineProperty(c.prototype,"parent",{enumerable:!0,get:function(){if(c.isBuffer(this))return this.buffer}}),Object.defineProperty(c.prototype,"offset",{enumerable:!0,get:function(){if(c.isBuffer(this))return this.byteOffset}}),c.poolSize=8192,c.from=function(e,t,n){return s(e,t,n)},Object.setPrototypeOf(c.prototype,Uint8Array.prototype),Object.setPrototypeOf(c,Uint8Array),c.alloc=function(e,t,n){return function(e,t,n){return l(e),e<=0?u(e):void 0!==t?"string"==typeof n?u(e).fill(t,n):u(e).fill(t):u(e)}(e,t,n)},c.allocUnsafe=function(e){return f(e)},c.allocUnsafeSlow=function(e){return f(e)},c.isBuffer=function(e){return null!=e&&!0===e._isBuffer&&e!==c.prototype},c.compare=function(e,t){if(H(e,Uint8Array)&&(e=c.from(e,e.offset,e.byteLength)),H(t,Uint8Array)&&(t=c.from(t,t.offset,t.byteLength)),!c.isBuffer(e)||!c.isBuffer(t))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(e===t)return 0;for(var n=e.length,r=t.length,o=0,i=Math.min(n,r);o<i;++o)if(e[o]!==t[o]){n=e[o],r=t[o];break}return n<r?-1:r<n?1:0},c.isEncoding=function(e){switch(String(e).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},c.concat=function(e,t){if(!Array.isArray(e))throw new TypeError('"list" argument must be an Array of Buffers');if(0===e.length)return c.alloc(0);var n;if(void 0===t)for(t=0,n=0;n<e.length;++n)t+=e[n].length;var r=c.allocUnsafe(t),o=0;for(n=0;n<e.length;++n){var i=e[n];if(H(i,Uint8Array))o+i.length>r.length?c.from(i).copy(r,o):Uint8Array.prototype.set.call(r,i,o);else{if(!c.isBuffer(i))throw new TypeError('"list" argument must be an Array of Buffers');i.copy(r,o)}o+=i.length}return r},c.byteLength=y,c.prototype._isBuffer=!0,c.prototype.swap16=function(){var e=this.length;if(e%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var t=0;t<e;t+=2)v(this,t,t+1);return this},c.prototype.swap32=function(){var e=this.length;if(e%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var t=0;t<e;t+=4)v(this,t,t+3),v(this,t+1,t+2);return this},c.prototype.swap64=function(){var e=this.length;if(e%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var t=0;t<e;t+=8)v(this,t,t+7),v(this,t+1,t+6),v(this,t+2,t+5),v(this,t+3,t+4);return this},c.prototype.toString=function(){var e=this.length;return 0===e?"":0===arguments.length?j(this,0,e):m.apply(this,arguments)},c.prototype.toLocaleString=c.prototype.toString,c.prototype.equals=function(e){if(!c.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e||0===c.compare(this,e)},c.prototype.inspect=function(){var e="",n=t.INSPECT_MAX_BYTES;return e=this.toString("hex",0,n).replace(/(.{2})/g,"$1 ").trim(),this.length>n&&(e+=" ... "),"<Buffer "+e+">"},i&&(c.prototype[i]=c.prototype.inspect),c.prototype.compare=function(e,t,n,r,o){if(H(e,Uint8Array)&&(e=c.from(e,e.offset,e.byteLength)),!c.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===r&&(r=0),void 0===o&&(o=this.length),t<0||n>e.length||r<0||o>this.length)throw new RangeError("out of range index");if(r>=o&&t>=n)return 0;if(r>=o)return-1;if(t>=n)return 1;if(this===e)return 0;for(var i=(o>>>=0)-(r>>>=0),a=(n>>>=0)-(t>>>=0),u=Math.min(i,a),s=this.slice(r,o),l=e.slice(t,n),f=0;f<u;++f)if(s[f]!==l[f]){i=s[f],a=l[f];break}return i<a?-1:a<i?1:0},c.prototype.includes=function(e,t,n){return-1!==this.indexOf(e,t,n)},c.prototype.indexOf=function(e,t,n){return g(this,e,t,n,!0)},c.prototype.lastIndexOf=function(e,t,n){return g(this,e,t,n,!1)},c.prototype.write=function(e,t,n,r){if(void 0===t)r="utf8",n=this.length,t=0;else if(void 0===n&&"string"==typeof t)r=t,n=this.length,t=0;else{if(!isFinite(t))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");t>>>=0,isFinite(n)?(n>>>=0,void 0===r&&(r="utf8")):(r=n,n=void 0)}var o=this.length-t;if((void 0===n||n>o)&&(n=o),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var i=!1;;)switch(r){case"hex":return w(this,e,t,n);case"utf8":case"utf-8":return O(this,e,t,n);case"ascii":case"latin1":case"binary":return E(this,e,t,n);case"base64":return _(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return x(this,e,t,n);default:if(i)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),i=!0}},c.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var P=4096;function k(e,t,n){var r="";n=Math.min(e.length,n);for(var o=t;o<n;++o)r+=String.fromCharCode(127&e[o]);return r}function I(e,t,n){var r="";n=Math.min(e.length,n);for(var o=t;o<n;++o)r+=String.fromCharCode(e[o]);return r}function T(e,t,n){var r=e.length;(!t||t<0)&&(t=0),(!n||n<0||n>r)&&(n=r);for(var o="",i=t;i<n;++i)o+=z[e[i]];return o}function R(e,t,n){for(var r=e.slice(t,n),o="",i=0;i<r.length-1;i+=2)o+=String.fromCharCode(r[i]+256*r[i+1]);return o}function C(e,t,n){if(e%1!=0||e<0)throw new RangeError("offset is not uint");if(e+t>n)throw new RangeError("Trying to access beyond buffer length")}function A(e,t,n,r,o,i){if(!c.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>o||t<i)throw new RangeError('"value" argument is out of bounds');if(n+r>e.length)throw new RangeError("Index out of range")}function N(e,t,n,r,o,i){if(n+r>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function L(e,t,n,r,i){return t=+t,n>>>=0,i||N(e,0,n,4),o.write(e,t,n,r,23,4),n+4}function D(e,t,n,r,i){return t=+t,n>>>=0,i||N(e,0,n,8),o.write(e,t,n,r,52,8),n+8}c.prototype.slice=function(e,t){var n=this.length;(e=~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),(t=void 0===t?n:~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),t<e&&(t=e);var r=this.subarray(e,t);return Object.setPrototypeOf(r,c.prototype),r},c.prototype.readUintLE=c.prototype.readUIntLE=function(e,t,n){e>>>=0,t>>>=0,n||C(e,t,this.length);for(var r=this[e],o=1,i=0;++i<t&&(o*=256);)r+=this[e+i]*o;return r},c.prototype.readUintBE=c.prototype.readUIntBE=function(e,t,n){e>>>=0,t>>>=0,n||C(e,t,this.length);for(var r=this[e+--t],o=1;t>0&&(o*=256);)r+=this[e+--t]*o;return r},c.prototype.readUint8=c.prototype.readUInt8=function(e,t){return e>>>=0,t||C(e,1,this.length),this[e]},c.prototype.readUint16LE=c.prototype.readUInt16LE=function(e,t){return e>>>=0,t||C(e,2,this.length),this[e]|this[e+1]<<8},c.prototype.readUint16BE=c.prototype.readUInt16BE=function(e,t){return e>>>=0,t||C(e,2,this.length),this[e]<<8|this[e+1]},c.prototype.readUint32LE=c.prototype.readUInt32LE=function(e,t){return e>>>=0,t||C(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},c.prototype.readUint32BE=c.prototype.readUInt32BE=function(e,t){return e>>>=0,t||C(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},c.prototype.readIntLE=function(e,t,n){e>>>=0,t>>>=0,n||C(e,t,this.length);for(var r=this[e],o=1,i=0;++i<t&&(o*=256);)r+=this[e+i]*o;return r>=(o*=128)&&(r-=Math.pow(2,8*t)),r},c.prototype.readIntBE=function(e,t,n){e>>>=0,t>>>=0,n||C(e,t,this.length);for(var r=t,o=1,i=this[e+--r];r>0&&(o*=256);)i+=this[e+--r]*o;return i>=(o*=128)&&(i-=Math.pow(2,8*t)),i},c.prototype.readInt8=function(e,t){return e>>>=0,t||C(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},c.prototype.readInt16LE=function(e,t){e>>>=0,t||C(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},c.prototype.readInt16BE=function(e,t){e>>>=0,t||C(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},c.prototype.readInt32LE=function(e,t){return e>>>=0,t||C(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},c.prototype.readInt32BE=function(e,t){return e>>>=0,t||C(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},c.prototype.readFloatLE=function(e,t){return e>>>=0,t||C(e,4,this.length),o.read(this,e,!0,23,4)},c.prototype.readFloatBE=function(e,t){return e>>>=0,t||C(e,4,this.length),o.read(this,e,!1,23,4)},c.prototype.readDoubleLE=function(e,t){return e>>>=0,t||C(e,8,this.length),o.read(this,e,!0,52,8)},c.prototype.readDoubleBE=function(e,t){return e>>>=0,t||C(e,8,this.length),o.read(this,e,!1,52,8)},c.prototype.writeUintLE=c.prototype.writeUIntLE=function(e,t,n,r){(e=+e,t>>>=0,n>>>=0,r)||A(this,e,t,n,Math.pow(2,8*n)-1,0);var o=1,i=0;for(this[t]=255&e;++i<n&&(o*=256);)this[t+i]=e/o&255;return t+n},c.prototype.writeUintBE=c.prototype.writeUIntBE=function(e,t,n,r){(e=+e,t>>>=0,n>>>=0,r)||A(this,e,t,n,Math.pow(2,8*n)-1,0);var o=n-1,i=1;for(this[t+o]=255&e;--o>=0&&(i*=256);)this[t+o]=e/i&255;return t+n},c.prototype.writeUint8=c.prototype.writeUInt8=function(e,t,n){return e=+e,t>>>=0,n||A(this,e,t,1,255,0),this[t]=255&e,t+1},c.prototype.writeUint16LE=c.prototype.writeUInt16LE=function(e,t,n){return e=+e,t>>>=0,n||A(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},c.prototype.writeUint16BE=c.prototype.writeUInt16BE=function(e,t,n){return e=+e,t>>>=0,n||A(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},c.prototype.writeUint32LE=c.prototype.writeUInt32LE=function(e,t,n){return e=+e,t>>>=0,n||A(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},c.prototype.writeUint32BE=c.prototype.writeUInt32BE=function(e,t,n){return e=+e,t>>>=0,n||A(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},c.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t>>>=0,!r){var o=Math.pow(2,8*n-1);A(this,e,t,n,o-1,-o)}var i=0,a=1,u=0;for(this[t]=255&e;++i<n&&(a*=256);)e<0&&0===u&&0!==this[t+i-1]&&(u=1),this[t+i]=(e/a>>0)-u&255;return t+n},c.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t>>>=0,!r){var o=Math.pow(2,8*n-1);A(this,e,t,n,o-1,-o)}var i=n-1,a=1,u=0;for(this[t+i]=255&e;--i>=0&&(a*=256);)e<0&&0===u&&0!==this[t+i+1]&&(u=1),this[t+i]=(e/a>>0)-u&255;return t+n},c.prototype.writeInt8=function(e,t,n){return e=+e,t>>>=0,n||A(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},c.prototype.writeInt16LE=function(e,t,n){return e=+e,t>>>=0,n||A(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},c.prototype.writeInt16BE=function(e,t,n){return e=+e,t>>>=0,n||A(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},c.prototype.writeInt32LE=function(e,t,n){return e=+e,t>>>=0,n||A(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},c.prototype.writeInt32BE=function(e,t,n){return e=+e,t>>>=0,n||A(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},c.prototype.writeFloatLE=function(e,t,n){return L(this,e,t,!0,n)},c.prototype.writeFloatBE=function(e,t,n){return L(this,e,t,!1,n)},c.prototype.writeDoubleLE=function(e,t,n){return D(this,e,t,!0,n)},c.prototype.writeDoubleBE=function(e,t,n){return D(this,e,t,!1,n)},c.prototype.copy=function(e,t,n,r){if(!c.isBuffer(e))throw new TypeError("argument should be a Buffer");if(n||(n=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),r>0&&r<n&&(r=n),r===n)return 0;if(0===e.length||0===this.length)return 0;if(t<0)throw new RangeError("targetStart out of bounds");if(n<0||n>=this.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),e.length-t<r-n&&(r=e.length-t+n);var o=r-n;return this===e&&"function"==typeof Uint8Array.prototype.copyWithin?this.copyWithin(t,n,r):Uint8Array.prototype.set.call(e,this.subarray(n,r),t),o},c.prototype.fill=function(e,t,n,r){if("string"==typeof e){if("string"==typeof t?(r=t,t=0,n=this.length):"string"==typeof n&&(r=n,n=this.length),void 0!==r&&"string"!=typeof r)throw new TypeError("encoding must be a string");if("string"==typeof r&&!c.isEncoding(r))throw new TypeError("Unknown encoding: "+r);if(1===e.length){var o=e.charCodeAt(0);("utf8"===r&&o<128||"latin1"===r)&&(e=o)}}else"number"==typeof e?e&=255:"boolean"==typeof e&&(e=Number(e));if(t<0||this.length<t||this.length<n)throw new RangeError("Out of range index");if(n<=t)return this;var i;if(t>>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"==typeof e)for(i=t;i<n;++i)this[i]=e;else{var a=c.isBuffer(e)?e:c.from(e,r),u=a.length;if(0===u)throw new TypeError('The value "'+e+'" is invalid for argument "value"');for(i=0;i<n-t;++i)this[i+t]=a[i%u]}return this};var M=/[^+/0-9A-Za-z-_]/g;function F(e,t){var n;t=t||1/0;for(var r=e.length,o=null,i=[],a=0;a<r;++a){if((n=e.charCodeAt(a))>55295&&n<57344){if(!o){if(n>56319){(t-=3)>-1&&i.push(239,191,189);continue}if(a+1===r){(t-=3)>-1&&i.push(239,191,189);continue}o=n;continue}if(n<56320){(t-=3)>-1&&i.push(239,191,189),o=n;continue}n=65536+(o-55296<<10|n-56320)}else o&&(t-=3)>-1&&i.push(239,191,189);if(o=null,n<128){if((t-=1)<0)break;i.push(n)}else if(n<2048){if((t-=2)<0)break;i.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;i.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;i.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return i}function U(e){return r.toByteArray(function(e){if((e=(e=e.split("=")[0]).trim().replace(M,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function B(e,t,n,r){for(var o=0;o<r&&!(o+n>=t.length||o>=e.length);++o)t[o+n]=e[o];return o}function H(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function q(e){return e!=e}var z=function(){for(var e="0123456789abcdef",t=new Array(256),n=0;n<16;++n)for(var r=16*n,o=0;o<16;++o)t[r+o]=e[n]+e[o];return t}()},77352:(e,t,n)=>{"use strict";var r=n(13049),o=n(89193),i=o(r("String.prototype.indexOf"));e.exports=function(e,t){var n=r(e,!!t);return"function"==typeof n&&i(e,".prototype.")>-1?o(n):n}},89193:(e,t,n)=>{"use strict";var r=n(92502),o=n(13049),i=o("%Function.prototype.apply%"),a=o("%Function.prototype.call%"),u=o("%Reflect.apply%",!0)||r.call(a,i),c=o("%Object.getOwnPropertyDescriptor%",!0),s=o("%Object.defineProperty%",!0),l=o("%Math.max%");if(s)try{s({},"a",{value:1})}catch(e){s=null}e.exports=function(e){var t=u(r,a,arguments);if(c&&s){var n=c(t,"length");n.configurable&&s(t,"length",{value:1+l(0,e.length-(arguments.length-1))})}return t};var f=function(){return u(r,i,arguments)};s?s(e.exports,"apply",{value:f}):e.exports.apply=f},10166:(e,t)=>{var n;!function(){"use strict";var r={}.hasOwnProperty;function o(){for(var e=[],t=0;t<arguments.length;t++){var n=arguments[t];if(n){var i=typeof n;if("string"===i||"number"===i)e.push(n);else if(Array.isArray(n)){if(n.length){var a=o.apply(null,n);a&&e.push(a)}}else if("object"===i)if(n.toString===Object.prototype.toString)for(var u in n)r.call(n,u)&&n[u]&&e.push(u);else e.push(n.toString())}}return e.join(" ")}e.exports?(o.default=o,e.exports=o):void 0===(n=function(){return o}.apply(t,[]))||(e.exports=n)}()},29343:(e,t,n)=>{"use strict";n.d(t,{f9:()=>b,IV:()=>w});var r,o,i=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),a=(r=["",""],o=["",""],Object.freeze(Object.defineProperties(r,{raw:{value:Object.freeze(o)}})));function u(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}const c=function(){function e(){for(var t=this,n=arguments.length,r=Array(n),o=0;o<n;o++)r[o]=arguments[o];return u(this,e),this.tag=function(e){for(var n=arguments.length,r=Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];return"function"==typeof e?t.interimTag.bind(t,e):"string"==typeof e?t.transformEndResult(e):(e=e.map(t.transformString.bind(t)),t.transformEndResult(e.reduce(t.processSubstitutions.bind(t,r))))},r.length>0&&Array.isArray(r[0])&&(r=r[0]),this.transformers=r.map((function(e){return"function"==typeof e?e():e})),this.tag}return i(e,[{key:"interimTag",value:function(e,t){for(var n=arguments.length,r=Array(n>2?n-2:0),o=2;o<n;o++)r[o-2]=arguments[o];return this.tag(a,e.apply(void 0,[t].concat(r)))}},{key:"processSubstitutions",value:function(e,t,n){var r=this.transformSubstitution(e.shift(),t);return"".concat(t,r,n)}},{key:"transformString",value:function(e){return this.transformers.reduce((function(e,t){return t.onString?t.onString(e):e}),e)}},{key:"transformSubstitution",value:function(e,t){return this.transformers.reduce((function(e,n){return n.onSubstitution?n.onSubstitution(e,t):e}),e)}},{key:"transformEndResult",value:function(e){return this.transformers.reduce((function(e,t){return t.onEndResult?t.onEndResult(e):e}),e)}}]),e}();var s={separator:"",conjunction:"",serial:!1};const l=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:s;return{onSubstitution:function(t,n){if(Array.isArray(t)){var r=t.length,o=e.separator,i=e.conjunction,a=e.serial,u=n.match(/(\n?[^\S\n]+)$/);if(t=u?t.join(o+u[1]):t.join(o+" "),i&&r>1){var c=t.lastIndexOf(o);t=t.slice(0,c)+(a?o:"")+" "+i+t.slice(c+1)}}return t}}};function f(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}const p=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"initial";return{onEndResult:function(t){if("initial"===e){var n=t.match(/^[^\S\n]*(?=\S)/gm),r=n&&Math.min.apply(Math,f(n.map((function(e){return e.length}))));if(r){var o=new RegExp("^.{"+r+"}","gm");return t.replace(o,"")}return t}if("all"===e)return t.replace(/^[^\S\n]+/gm,"");throw new Error("Unknown type: "+e)}}};const d=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return{onEndResult:function(t){if(""===e)return t.trim();if("start"===(e=e.toLowerCase())||"left"===e)return t.replace(/^\s*/,"");if("end"===e||"right"===e)return t.replace(/\s*$/,"");throw new Error("Side not supported: "+e)}}};new c(l({separator:","}),p,d);new c(l({separator:",",conjunction:"and"}),p,d);new c(l({separator:",",conjunction:"or"}),p,d);const h=function(e){return{onSubstitution:function(t,n){if(null==e||"string"!=typeof e)throw new Error("You need to specify a string character to split by.");return"string"==typeof t&&t.includes(e)&&(t=t.split(e)),t}}};var y=function(e){return null!=e&&!Number.isNaN(e)&&"boolean"!=typeof e};const m=function(){return{onSubstitution:function(e){return Array.isArray(e)?e.filter(y):y(e)?e:""}}};new c(h("\n"),m,l,p,d);const v=function(e,t){return{onSubstitution:function(n,r){if(null==e||null==t)throw new Error("replaceSubstitutionTransformer requires at least 2 arguments.");return null==n?n:n.toString().replace(e,t)}}};new c(h("\n"),l,p,d,v(/&/g,"&amp;"),v(/</g,"&lt;"),v(/>/g,"&gt;"),v(/"/g,"&quot;"),v(/'/g,"&#x27;"),v(/`/g,"&#x60;"));const g=function(e,t){return{onEndResult:function(n){if(null==e||null==t)throw new Error("replaceResultTransformer requires at least 2 arguments.");return n.replace(e,t)}}};const b=new c(g(/(?:\n(?:\s*))+/g," "),d);const w=new c(g(/(?:\n\s*)/g,""),d);new c(l({separator:","}),g(/(?:\s+)/g," "),d);new c(l({separator:",",conjunction:"or"}),g(/(?:\s+)/g," "),d);new c(l({separator:",",conjunction:"and"}),g(/(?:\s+)/g," "),d);new c(l,p,d);new c(l,g(/(?:\s+)/g," "),d);new c(p,d);new c(p("all"),d)},78695:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.__RewireAPI__=t.__ResetDependency__=t.__set__=t.__Rewire__=t.__GetDependency__=t.__get__=void 0;var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=n(84258),a=f(i),u=f(n(53486)),c=n(72466),s=n(91499),l=n(35052);function f(e){return e&&e.__esModule?e:{default:e}}var p=function(e){var t=e.getIn,n=e.toJS,r=function(e){function r(e,o){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,r);var i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(r.__proto__||Object.getPrototypeOf(r)).call(this,e));i.inTimeTravelling=!1,i.unsubscribe=o.store.subscribe((function(){var r=n(t(o.store.getState(),["router","location"])),a=r.pathname,u=r.search,c=r.hash,s=e.history.location,l=s.pathname,f=s.search,p=s.hash;l===a&&f===u&&p===c||(i.inTimeTravelling=!0,e.history.push({pathname:a,search:u,hash:c}))}));var a=function(t,n){i.inTimeTravelling?i.inTimeTravelling=!1:e.onLocationChanged(t,n)};return i.unlisten=e.history.listen(a),a(e.history.location,e.history.action),i}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(r,e),o(r,[{key:"componentWillUnmount",value:function(){this.unlisten(),this.unsubscribe()}},{key:"render",value:function(){var e=this.props,t=e.history,n=e.children;return O("React").createElement(O("Router"),{history:t},n)}}]),r}(O("Component"));r.contextTypes={store:O("PropTypes").shape({getState:O("PropTypes").func.isRequired,subscribe:O("PropTypes").func.isRequired}).isRequired},r.propTypes={history:O("PropTypes").shape({action:O("PropTypes").string.isRequired,listen:O("PropTypes").func.isRequired,location:O("PropTypes").object.isRequired,push:O("PropTypes").func.isRequired}).isRequired,location:O("PropTypes").oneOfType([O("PropTypes").object,O("PropTypes").string]).isRequired,action:O("PropTypes").string.isRequired,basename:O("PropTypes").string,children:O("PropTypes").oneOfType([O("PropTypes").func,O("PropTypes").node]),onLocationChanged:O("PropTypes").func.isRequired};return O("connect")((function(e){return{action:t(e,["router","action"]),location:t(e,["router","location"])}}),(function(e){return{onLocationChanged:function(t,n){return e(O("onLocationChanged")(t,n))}}}))(r)};function d(){try{if(n.g)return n.g}catch(e){try{if(window)return window}catch(e){return this}}}t.default=O("createConnectedRouter");var h,y=null;function m(){if(null===y){var e=d();e.__$$GLOBAL_REWIRE_NEXT_MODULE_ID__||(e.__$$GLOBAL_REWIRE_NEXT_MODULE_ID__=0),y=__$$GLOBAL_REWIRE_NEXT_MODULE_ID__++}return y}function v(){var e=d();return e.__$$GLOBAL_REWIRE_REGISTRY__||(e.__$$GLOBAL_REWIRE_REGISTRY__=Object.create(null)),__$$GLOBAL_REWIRE_REGISTRY__}function g(){var e=m(),t=v(),n=t[e];return n||(t[e]=Object.create(null),n=t[e]),n}(h=d()).__rewire_reset_all__||(h.__rewire_reset_all__=function(){h.__$$GLOBAL_REWIRE_REGISTRY__=Object.create(null)});var b="__INTENTIONAL_UNDEFINED__",w={};function O(e){var t=g();if(void 0===t[e])return function(e){switch(e){case"Component":return i.Component;case"PropTypes":return u.default;case"onLocationChanged":return l.onLocationChanged;case"connect":return c.connect;case"createConnectedRouter":return p;case"React":return a.default;case"Router":return s.Router}return}(e);var n=t[e];return n===b?void 0:n}function E(e,t){var n=g();if("object"!==(void 0===e?"undefined":r(e)))return n[e]=void 0===t?b:t,function(){_(e)};Object.keys(e).forEach((function(t){n[t]=e[t]}))}function _(e){var t=g();delete t[e],0==Object.keys(t).length&&delete v()[m]}function x(e){var t=g(),n=Object.keys(e),r={};function o(){n.forEach((function(e){t[e]=r[e]}))}return function(i){n.forEach((function(n){r[n]=t[n],t[n]=e[n]}));var a=i();return a&&"function"==typeof a.then?a.then(o).catch(o):o(),a}}!function(){function e(e,t){Object.defineProperty(w,e,{value:t,enumerable:!1,configurable:!0})}e("__get__",O),e("__GetDependency__",O),e("__Rewire__",E),e("__set__",E),e("__reset__",_),e("__ResetDependency__",_),e("__with__",x)}();var S=r(p);function j(e,t){Object.defineProperty(p,e,{value:t,enumerable:!1,configurable:!0})}"object"!==S&&"function"!==S||!Object.isExtensible(p)||(j("__get__",O),j("__GetDependency__",O),j("__Rewire__",E),j("__set__",E),j("__reset__",_),j("__ResetDependency__",_),j("__with__",x),j("__RewireAPI__",w)),t.__get__=O,t.__GetDependency__=O,t.__Rewire__=E,t.__set__=E,t.__ResetDependency__=_,t.__RewireAPI__=w},35052:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o=t.LOCATION_CHANGE="@@router/LOCATION_CHANGE",i=(t.onLocationChanged=function(e,t){return{type:w("LOCATION_CHANGE"),payload:{location:e,action:t}}},t.CALL_HISTORY_METHOD="@@router/CALL_HISTORY_METHOD"),a=function(e){return function(){for(var t=arguments.length,n=Array(t),r=0;r<t;r++)n[r]=arguments[r];return{type:w("CALL_HISTORY_METHOD"),payload:{method:e,args:n}}}},u=t.push=w("updateLocation")("push"),c=t.replace=w("updateLocation")("replace"),s=t.go=w("updateLocation")("go"),l=t.goBack=w("updateLocation")("goBack"),f=t.goForward=w("updateLocation")("goForward");t.routerActions={push:w("push"),replace:w("replace"),go:w("go"),goBack:w("goBack"),goForward:w("goForward")};function p(){try{if(n.g)return n.g}catch(e){try{if(window)return window}catch(e){return this}}}var d,h=null;function y(){if(null===h){var e=p();e.__$$GLOBAL_REWIRE_NEXT_MODULE_ID__||(e.__$$GLOBAL_REWIRE_NEXT_MODULE_ID__=0),h=__$$GLOBAL_REWIRE_NEXT_MODULE_ID__++}return h}function m(){var e=p();return e.__$$GLOBAL_REWIRE_REGISTRY__||(e.__$$GLOBAL_REWIRE_REGISTRY__=Object.create(null)),__$$GLOBAL_REWIRE_REGISTRY__}function v(){var e=y(),t=m(),n=t[e];return n||(t[e]=Object.create(null),n=t[e]),n}(d=p()).__rewire_reset_all__||(d.__rewire_reset_all__=function(){d.__$$GLOBAL_REWIRE_REGISTRY__=Object.create(null)});var g="__INTENTIONAL_UNDEFINED__",b={};function w(e){var t=v();if(void 0===t[e])return function(e){switch(e){case"LOCATION_CHANGE":return o;case"CALL_HISTORY_METHOD":return i;case"updateLocation":return a;case"push":return u;case"replace":return c;case"go":return s;case"goBack":return l;case"goForward":return f}return}(e);var n=t[e];return n===g?void 0:n}function O(e,t){var n=v();if("object"!==(void 0===e?"undefined":r(e)))return n[e]=void 0===t?g:t,function(){E(e)};Object.keys(e).forEach((function(t){n[t]=e[t]}))}function E(e){var t=v();delete t[e],0==Object.keys(t).length&&delete m()[y]}function _(e){var t=v(),n=Object.keys(e),r={};function o(){n.forEach((function(e){t[e]=r[e]}))}return function(i){n.forEach((function(n){r[n]=t[n],t[n]=e[n]}));var a=i();return a&&"function"==typeof a.then?a.then(o).catch(o):o(),a}}!function(){function e(e,t){Object.defineProperty(b,e,{value:t,enumerable:!1,configurable:!0})}e("__get__",w),e("__GetDependency__",w),e("__Rewire__",O),e("__set__",O),e("__reset__",E),e("__ResetDependency__",E),e("__with__",_)}(),t.__get__=w,t.__GetDependency__=w,t.__Rewire__=O,t.__set__=O,t.__ResetDependency__=E,t.__RewireAPI__=b,t.default=b},53214:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.__RewireAPI__=t.__ResetDependency__=t.__set__=t.__Rewire__=t.__GetDependency__=t.__get__=void 0;var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(n(35052)),a=l(n(78695)),u=l(n(66370)),c=l(n(90827)),s=l(n(92661));function l(e){return e&&e.__esModule?e:{default:e}}var f=function(e){return o({},w("actions"),w("createSelectors")(e),{ConnectedRouter:w("createConnectedRouter")(e),connectRouter:w("createConnectRouter")(e),routerMiddleware:w("routerMiddleware")})};function p(){try{if(n.g)return n.g}catch(e){try{if(window)return window}catch(e){return this}}}t.default=w("createAll");var d,h=null;function y(){if(null===h){var e=p();e.__$$GLOBAL_REWIRE_NEXT_MODULE_ID__||(e.__$$GLOBAL_REWIRE_NEXT_MODULE_ID__=0),h=__$$GLOBAL_REWIRE_NEXT_MODULE_ID__++}return h}function m(){var e=p();return e.__$$GLOBAL_REWIRE_REGISTRY__||(e.__$$GLOBAL_REWIRE_REGISTRY__=Object.create(null)),__$$GLOBAL_REWIRE_REGISTRY__}function v(){var e=y(),t=m(),n=t[e];return n||(t[e]=Object.create(null),n=t[e]),n}(d=p()).__rewire_reset_all__||(d.__rewire_reset_all__=function(){d.__$$GLOBAL_REWIRE_REGISTRY__=Object.create(null)});var g="__INTENTIONAL_UNDEFINED__",b={};function w(e){var t=v();if(void 0===t[e])return function(e){switch(e){case"actions":return function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return Object.keys(e).filter((function(e){return"__get__"!==e&&"__set__"!==e&&"__reset__"!==e&&"__with__"!==e&&"__GetDependency__"!==e&&"__Rewire__"!==e&&"__ResetDependency__"!==e&&"__RewireAPI__"!==e})).reduce((function(t,n){return t[n]=e[n],t}),{})}(i);case"createSelectors":return s.default;case"createConnectedRouter":return a.default;case"createConnectRouter":return u.default;case"routerMiddleware":return c.default;case"createAll":return f}return}(e);var n=t[e];return n===g?void 0:n}function O(e,t){var n=v();if("object"!==(void 0===e?"undefined":r(e)))return n[e]=void 0===t?g:t,function(){E(e)};Object.keys(e).forEach((function(t){n[t]=e[t]}))}function E(e){var t=v();delete t[e],0==Object.keys(t).length&&delete m()[y]}function _(e){var t=v(),n=Object.keys(e),r={};function o(){n.forEach((function(e){t[e]=r[e]}))}return function(i){n.forEach((function(n){r[n]=t[n],t[n]=e[n]}));var a=i();return a&&"function"==typeof a.then?a.then(o).catch(o):o(),a}}!function(){function e(e,t){Object.defineProperty(b,e,{value:t,enumerable:!1,configurable:!0})}e("__get__",w),e("__GetDependency__",w),e("__Rewire__",O),e("__set__",O),e("__reset__",E),e("__ResetDependency__",E),e("__with__",_)}();var x=r(f);function S(e,t){Object.defineProperty(f,e,{value:t,enumerable:!1,configurable:!0})}"object"!==x&&"function"!==x||!Object.isExtensible(f)||(S("__get__",w),S("__GetDependency__",w),S("__Rewire__",O),S("__set__",O),S("__reset__",E),S("__ResetDependency__",E),S("__with__",_),S("__RewireAPI__",b)),t.__get__=w,t.__GetDependency__=w,t.__Rewire__=O,t.__set__=O,t.__ResetDependency__=E,t.__RewireAPI__=b},99133:(e,t,n)=>{"use strict";t.zk=t.iz=t.xI=t.VF=t.nk=void 0;var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o=a(n(53214)),i=a(n(4674));function a(e){return e&&e.__esModule?e:{default:e}}var u=T("createAll")(T("plainStructure")),c=u.LOCATION_CHANGE,s=u.CALL_HISTORY_METHOD,l=u.push,f=u.replace,p=u.go,d=u.goBack,h=u.goForward,y=u.routerActions,m=u.ConnectedRouter,v=u.connectRouter,g=u.routerMiddleware,b=u.getLocation,w=u.getAction,O=u.createMatchSelector;function E(){try{if(n.g)return n.g}catch(e){try{if(window)return window}catch(e){return this}}}t.nk=c,t.VF=l,t.xI=m,t.iz=v,t.zk=g;var _,x=null;function S(){if(null===x){var e=E();e.__$$GLOBAL_REWIRE_NEXT_MODULE_ID__||(e.__$$GLOBAL_REWIRE_NEXT_MODULE_ID__=0),x=__$$GLOBAL_REWIRE_NEXT_MODULE_ID__++}return x}function j(){var e=E();return e.__$$GLOBAL_REWIRE_REGISTRY__||(e.__$$GLOBAL_REWIRE_REGISTRY__=Object.create(null)),__$$GLOBAL_REWIRE_REGISTRY__}function P(){var e=S(),t=j(),n=t[e];return n||(t[e]=Object.create(null),n=t[e]),n}(_=E()).__rewire_reset_all__||(_.__rewire_reset_all__=function(){_.__$$GLOBAL_REWIRE_REGISTRY__=Object.create(null)});var k="__INTENTIONAL_UNDEFINED__",I={};function T(e){var t=P();if(void 0===t[e])return function(e){switch(e){case"createAll":return o.default;case"plainStructure":return i.default}return}(e);var n=t[e];return n===k?void 0:n}function R(e,t){var n=P();if("object"!==(void 0===e?"undefined":r(e)))return n[e]=void 0===t?k:t,function(){C(e)};Object.keys(e).forEach((function(t){n[t]=e[t]}))}function C(e){var t=P();delete t[e],0==Object.keys(t).length&&delete j()[S]}function A(e){var t=P(),n=Object.keys(e),r={};function o(){n.forEach((function(e){t[e]=r[e]}))}return function(i){n.forEach((function(n){r[n]=t[n],t[n]=e[n]}));var a=i();return a&&"function"==typeof a.then?a.then(o).catch(o):o(),a}}!function(){function e(e,t){Object.defineProperty(I,e,{value:t,enumerable:!1,configurable:!0})}e("__get__",T),e("__GetDependency__",T),e("__Rewire__",R),e("__set__",R),e("__reset__",C),e("__ResetDependency__",C),e("__with__",A)}()},90827:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.__RewireAPI__=t.__ResetDependency__=t.__set__=t.__Rewire__=t.__GetDependency__=t.__get__=void 0;var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o=n(35052);var i=function(e){return function(t){return function(t){return function(n){if(n.type!==h("CALL_HISTORY_METHOD"))return t(n);var r=n.payload,o=r.method,i=r.args;e[o].apply(e,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}(i))}}}};function a(){try{if(n.g)return n.g}catch(e){try{if(window)return window}catch(e){return this}}}t.default=h("routerMiddleware");var u,c=null;function s(){if(null===c){var e=a();e.__$$GLOBAL_REWIRE_NEXT_MODULE_ID__||(e.__$$GLOBAL_REWIRE_NEXT_MODULE_ID__=0),c=__$$GLOBAL_REWIRE_NEXT_MODULE_ID__++}return c}function l(){var e=a();return e.__$$GLOBAL_REWIRE_REGISTRY__||(e.__$$GLOBAL_REWIRE_REGISTRY__=Object.create(null)),__$$GLOBAL_REWIRE_REGISTRY__}function f(){var e=s(),t=l(),n=t[e];return n||(t[e]=Object.create(null),n=t[e]),n}(u=a()).__rewire_reset_all__||(u.__rewire_reset_all__=function(){u.__$$GLOBAL_REWIRE_REGISTRY__=Object.create(null)});var p="__INTENTIONAL_UNDEFINED__",d={};function h(e){var t=f();if(void 0===t[e])return function(e){switch(e){case"CALL_HISTORY_METHOD":return o.CALL_HISTORY_METHOD;case"routerMiddleware":return i}return}(e);var n=t[e];return n===p?void 0:n}function y(e,t){var n=f();if("object"!==(void 0===e?"undefined":r(e)))return n[e]=void 0===t?p:t,function(){m(e)};Object.keys(e).forEach((function(t){n[t]=e[t]}))}function m(e){var t=f();delete t[e],0==Object.keys(t).length&&delete l()[s]}function v(e){var t=f(),n=Object.keys(e),r={};function o(){n.forEach((function(e){t[e]=r[e]}))}return function(i){n.forEach((function(n){r[n]=t[n],t[n]=e[n]}));var a=i();return a&&"function"==typeof a.then?a.then(o).catch(o):o(),a}}!function(){function e(e,t){Object.defineProperty(d,e,{value:t,enumerable:!1,configurable:!0})}e("__get__",h),e("__GetDependency__",h),e("__Rewire__",y),e("__set__",y),e("__reset__",m),e("__ResetDependency__",m),e("__with__",v)}();var g=r(i);function b(e,t){Object.defineProperty(i,e,{value:t,enumerable:!1,configurable:!0})}"object"!==g&&"function"!==g||!Object.isExtensible(i)||(b("__get__",h),b("__GetDependency__",h),b("__Rewire__",y),b("__set__",y),b("__reset__",m),b("__ResetDependency__",m),b("__with__",v),b("__RewireAPI__",d)),t.__get__=h,t.__GetDependency__=h,t.__Rewire__=y,t.__set__=y,t.__ResetDependency__=m,t.__RewireAPI__=d},66370:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.__RewireAPI__=t.__ResetDependency__=t.__set__=t.__Rewire__=t.__GetDependency__=t.__get__=void 0;var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o=n(35052),i=function(e){var t=e.fromJS,n=e.merge;return function(e){var r=t({location:e.location,action:e.action});return function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:r,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=t.type,i=t.payload;return o===h("LOCATION_CHANGE")?n(e,i):e}}};function a(){try{if(n.g)return n.g}catch(e){try{if(window)return window}catch(e){return this}}}t.default=h("createConnectRouter");var u,c=null;function s(){if(null===c){var e=a();e.__$$GLOBAL_REWIRE_NEXT_MODULE_ID__||(e.__$$GLOBAL_REWIRE_NEXT_MODULE_ID__=0),c=__$$GLOBAL_REWIRE_NEXT_MODULE_ID__++}return c}function l(){var e=a();return e.__$$GLOBAL_REWIRE_REGISTRY__||(e.__$$GLOBAL_REWIRE_REGISTRY__=Object.create(null)),__$$GLOBAL_REWIRE_REGISTRY__}function f(){var e=s(),t=l(),n=t[e];return n||(t[e]=Object.create(null),n=t[e]),n}(u=a()).__rewire_reset_all__||(u.__rewire_reset_all__=function(){u.__$$GLOBAL_REWIRE_REGISTRY__=Object.create(null)});var p="__INTENTIONAL_UNDEFINED__",d={};function h(e){var t=f();if(void 0===t[e])return function(e){switch(e){case"LOCATION_CHANGE":return o.LOCATION_CHANGE;case"createConnectRouter":return i}return}(e);var n=t[e];return n===p?void 0:n}function y(e,t){var n=f();if("object"!==(void 0===e?"undefined":r(e)))return n[e]=void 0===t?p:t,function(){m(e)};Object.keys(e).forEach((function(t){n[t]=e[t]}))}function m(e){var t=f();delete t[e],0==Object.keys(t).length&&delete l()[s]}function v(e){var t=f(),n=Object.keys(e),r={};function o(){n.forEach((function(e){t[e]=r[e]}))}return function(i){n.forEach((function(n){r[n]=t[n],t[n]=e[n]}));var a=i();return a&&"function"==typeof a.then?a.then(o).catch(o):o(),a}}!function(){function e(e,t){Object.defineProperty(d,e,{value:t,enumerable:!1,configurable:!0})}e("__get__",h),e("__GetDependency__",h),e("__Rewire__",y),e("__set__",y),e("__reset__",m),e("__ResetDependency__",m),e("__with__",v)}();var g=r(i);function b(e,t){Object.defineProperty(i,e,{value:t,enumerable:!1,configurable:!0})}"object"!==g&&"function"!==g||!Object.isExtensible(i)||(b("__get__",h),b("__GetDependency__",h),b("__Rewire__",y),b("__set__",y),b("__reset__",m),b("__ResetDependency__",m),b("__with__",v),b("__RewireAPI__",d)),t.__get__=h,t.__GetDependency__=h,t.__Rewire__=y,t.__set__=y,t.__ResetDependency__=m,t.__RewireAPI__=d},92661:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.__RewireAPI__=t.__ResetDependency__=t.__set__=t.__Rewire__=t.__GetDependency__=t.__get__=void 0;var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o=n(91499),i=function(e){var t=e.getIn,n=e.toJS,r=function(e){return n(t(e,["router","location"]))};return{getLocation:r,getAction:function(e){return n(t(e,["router","action"]))},createMatchSelector:function(e){var t=null,n=null;return function(o){var i=(r(o)||{}).pathname;if(i===t)return n;t=i;var a=h("matchPath")(i,e);return a&&n&&a.url===n.url||(n=a),n}}}};function a(){try{if(n.g)return n.g}catch(e){try{if(window)return window}catch(e){return this}}}t.default=h("createSelectors");var u,c=null;function s(){if(null===c){var e=a();e.__$$GLOBAL_REWIRE_NEXT_MODULE_ID__||(e.__$$GLOBAL_REWIRE_NEXT_MODULE_ID__=0),c=__$$GLOBAL_REWIRE_NEXT_MODULE_ID__++}return c}function l(){var e=a();return e.__$$GLOBAL_REWIRE_REGISTRY__||(e.__$$GLOBAL_REWIRE_REGISTRY__=Object.create(null)),__$$GLOBAL_REWIRE_REGISTRY__}function f(){var e=s(),t=l(),n=t[e];return n||(t[e]=Object.create(null),n=t[e]),n}(u=a()).__rewire_reset_all__||(u.__rewire_reset_all__=function(){u.__$$GLOBAL_REWIRE_REGISTRY__=Object.create(null)});var p="__INTENTIONAL_UNDEFINED__",d={};function h(e){var t=f();if(void 0===t[e])return function(e){switch(e){case"matchPath":return o.matchPath;case"createSelectors":return i}return}(e);var n=t[e];return n===p?void 0:n}function y(e,t){var n=f();if("object"!==(void 0===e?"undefined":r(e)))return n[e]=void 0===t?p:t,function(){m(e)};Object.keys(e).forEach((function(t){n[t]=e[t]}))}function m(e){var t=f();delete t[e],0==Object.keys(t).length&&delete l()[s]}function v(e){var t=f(),n=Object.keys(e),r={};function o(){n.forEach((function(e){t[e]=r[e]}))}return function(i){n.forEach((function(n){r[n]=t[n],t[n]=e[n]}));var a=i();return a&&"function"==typeof a.then?a.then(o).catch(o):o(),a}}!function(){function e(e,t){Object.defineProperty(d,e,{value:t,enumerable:!1,configurable:!0})}e("__get__",h),e("__GetDependency__",h),e("__Rewire__",y),e("__set__",y),e("__reset__",m),e("__ResetDependency__",m),e("__with__",v)}();var g=r(i);function b(e,t){Object.defineProperty(i,e,{value:t,enumerable:!1,configurable:!0})}"object"!==g&&"function"!==g||!Object.isExtensible(i)||(b("__get__",h),b("__GetDependency__",h),b("__Rewire__",y),b("__set__",y),b("__reset__",m),b("__ResetDependency__",m),b("__with__",v),b("__RewireAPI__",d)),t.__get__=h,t.__GetDependency__=h,t.__Rewire__=y,t.__set__=y,t.__ResetDependency__=m,t.__RewireAPI__=d},95080:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o=function(e,t){if(!e)return e;var n=t.length;if(n){for(var r=e,o=0;o<n&&r;++o)r=r[t[o]];return r}};function i(){try{if(n.g)return n.g}catch(e){try{if(window)return window}catch(e){return this}}}t.default=d("getIn");var a,u=null;function c(){if(null===u){var e=i();e.__$$GLOBAL_REWIRE_NEXT_MODULE_ID__||(e.__$$GLOBAL_REWIRE_NEXT_MODULE_ID__=0),u=__$$GLOBAL_REWIRE_NEXT_MODULE_ID__++}return u}function s(){var e=i();return e.__$$GLOBAL_REWIRE_REGISTRY__||(e.__$$GLOBAL_REWIRE_REGISTRY__=Object.create(null)),__$$GLOBAL_REWIRE_REGISTRY__}function l(){var e=c(),t=s(),n=t[e];return n||(t[e]=Object.create(null),n=t[e]),n}(a=i()).__rewire_reset_all__||(a.__rewire_reset_all__=function(){a.__$$GLOBAL_REWIRE_REGISTRY__=Object.create(null)});var f="__INTENTIONAL_UNDEFINED__",p={};function d(e){var t=l();if(void 0===t[e])return function(e){switch(e){case"getIn":return o}return}(e);var n=t[e];return n===f?void 0:n}function h(e,t){var n=l();if("object"!==(void 0===e?"undefined":r(e)))return n[e]=void 0===t?f:t,function(){y(e)};Object.keys(e).forEach((function(t){n[t]=e[t]}))}function y(e){var t=l();delete t[e],0==Object.keys(t).length&&delete s()[c]}function m(e){var t=l(),n=Object.keys(e),r={};function o(){n.forEach((function(e){t[e]=r[e]}))}return function(i){n.forEach((function(n){r[n]=t[n],t[n]=e[n]}));var a=i();return a&&"function"==typeof a.then?a.then(o).catch(o):o(),a}}!function(){function e(e,t){Object.defineProperty(p,e,{value:t,enumerable:!1,configurable:!0})}e("__get__",d),e("__GetDependency__",d),e("__Rewire__",h),e("__set__",h),e("__reset__",y),e("__ResetDependency__",y),e("__with__",m)}();var v=r(o);function g(e,t){Object.defineProperty(o,e,{value:t,enumerable:!1,configurable:!0})}"object"!==v&&"function"!==v||!Object.isExtensible(o)||(g("__get__",d),g("__GetDependency__",d),g("__Rewire__",h),g("__set__",h),g("__reset__",y),g("__ResetDependency__",y),g("__with__",m),g("__RewireAPI__",p)),t.__get__=d,t.__GetDependency__=d,t.__Rewire__=h,t.__set__=h,t.__ResetDependency__=y,t.__RewireAPI__=p},4674:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.__RewireAPI__=t.__ResetDependency__=t.__set__=t.__Rewire__=t.__GetDependency__=t.__get__=void 0;var r,o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a=n(95080),u=(r=a)&&r.__esModule?r:{default:r};var c={fromJS:function(e){return e},getIn:v("getIn"),merge:function(e,t){return i({},e,t)},toJS:function(e){return e}};function s(){try{if(n.g)return n.g}catch(e){try{if(window)return window}catch(e){return this}}}t.default=v("structure");var l,f=null;function p(){if(null===f){var e=s();e.__$$GLOBAL_REWIRE_NEXT_MODULE_ID__||(e.__$$GLOBAL_REWIRE_NEXT_MODULE_ID__=0),f=__$$GLOBAL_REWIRE_NEXT_MODULE_ID__++}return f}function d(){var e=s();return e.__$$GLOBAL_REWIRE_REGISTRY__||(e.__$$GLOBAL_REWIRE_REGISTRY__=Object.create(null)),__$$GLOBAL_REWIRE_REGISTRY__}function h(){var e=p(),t=d(),n=t[e];return n||(t[e]=Object.create(null),n=t[e]),n}(l=s()).__rewire_reset_all__||(l.__rewire_reset_all__=function(){l.__$$GLOBAL_REWIRE_REGISTRY__=Object.create(null)});var y="__INTENTIONAL_UNDEFINED__",m={};function v(e){var t=h();if(void 0===t[e])return function(e){switch(e){case"getIn":return u.default;case"structure":return c}return}(e);var n=t[e];return n===y?void 0:n}function g(e,t){var n=h();if("object"!==(void 0===e?"undefined":o(e)))return n[e]=void 0===t?y:t,function(){b(e)};Object.keys(e).forEach((function(t){n[t]=e[t]}))}function b(e){var t=h();delete t[e],0==Object.keys(t).length&&delete d()[p]}function w(e){var t=h(),n=Object.keys(e),r={};function o(){n.forEach((function(e){t[e]=r[e]}))}return function(i){n.forEach((function(n){r[n]=t[n],t[n]=e[n]}));var a=i();return a&&"function"==typeof a.then?a.then(o).catch(o):o(),a}}!function(){function e(e,t){Object.defineProperty(m,e,{value:t,enumerable:!1,configurable:!0})}e("__get__",v),e("__GetDependency__",v),e("__Rewire__",g),e("__set__",g),e("__reset__",b),e("__ResetDependency__",b),e("__with__",w)}();var O=void 0===c?"undefined":o(c);function E(e,t){Object.defineProperty(c,e,{value:t,enumerable:!1,configurable:!0})}"object"!==O&&"function"!==O||!Object.isExtensible(c)||(E("__get__",v),E("__GetDependency__",v),E("__Rewire__",g),E("__set__",g),E("__reset__",b),E("__ResetDependency__",b),E("__with__",w),E("__RewireAPI__",m)),t.__get__=v,t.__GetDependency__=v,t.__Rewire__=g,t.__set__=g,t.__ResetDependency__=b,t.__RewireAPI__=m},83089:(e,t,n)=>{var r=n(83907),o=n(89075),i=TypeError;e.exports=function(e){if(r(e))return e;throw i(o(e)+" is not a function")}},31474:(e,t,n)=>{var r=n(95386),o=n(89075),i=TypeError;e.exports=function(e){if(r(e))return e;throw i(o(e)+" is not a constructor")}},90513:(e,t,n)=>{var r=n(83907),o=String,i=TypeError;e.exports=function(e){if("object"==typeof e||r(e))return e;throw i("Can't set "+o(e)+" as a prototype")}},16693:(e,t,n)=>{var r=n(2905),o=n(63513),i=n(60342).f,a=r("unscopables"),u=Array.prototype;null==u[a]&&i(u,a,{configurable:!0,value:o(null)}),e.exports=function(e){u[a][e]=!0}},96281:(e,t,n)=>{"use strict";var r=n(42968).charAt;e.exports=function(e,t,n){return t+(n?r(e,t).length:1)}},66992:(e,t,n)=>{var r=n(18142),o=TypeError;e.exports=function(e,t){if(r(t,e))return e;throw o("Incorrect invocation")}},95665:(e,t,n)=>{var r=n(21752),o=String,i=TypeError;e.exports=function(e){if(r(e))return e;throw i(o(e)+" is not an object")}},76930:(e,t,n)=>{var r=n(82304);e.exports=r((function(){if("function"==typeof ArrayBuffer){var e=new ArrayBuffer(8);Object.isExtensible(e)&&Object.defineProperty(e,"a",{value:8})}}))},25022:(e,t,n)=>{"use strict";var r=n(55835),o=n(59470),i=n(54020);e.exports=function(e){for(var t=r(this),n=i(t),a=arguments.length,u=o(a>1?arguments[1]:void 0,n),c=a>2?arguments[2]:void 0,s=void 0===c?n:o(c,n);s>u;)t[u++]=e;return t}},66469:(e,t,n)=>{"use strict";var r=n(7189).forEach,o=n(62235)("forEach");e.exports=o?[].forEach:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}},93099:(e,t,n)=>{"use strict";var r=n(45408),o=n(12364),i=n(55835),a=n(34268),u=n(36485),c=n(95386),s=n(54020),l=n(48245),f=n(6850),p=n(85437),d=Array;e.exports=function(e){var t=i(e),n=c(this),h=arguments.length,y=h>1?arguments[1]:void 0,m=void 0!==y;m&&(y=r(y,h>2?arguments[2]:void 0));var v,g,b,w,O,E,_=p(t),x=0;if(!_||this===d&&u(_))for(v=s(t),g=n?new this(v):d(v);v>x;x++)E=m?y(t[x],x):t[x],l(g,x,E);else for(O=(w=f(t,_)).next,g=n?new this:[];!(b=o(O,w)).done;x++)E=m?a(w,y,[b.value,x],!0):b.value,l(g,x,E);return g.length=x,g}},26281:(e,t,n)=>{var r=n(79486),o=n(59470),i=n(54020),a=function(e){return function(t,n,a){var u,c=r(t),s=i(c),l=o(a,s);if(e&&n!=n){for(;s>l;)if((u=c[l++])!=u)return!0}else for(;s>l;l++)if((e||l in c)&&c[l]===n)return e||l||0;return!e&&-1}};e.exports={includes:a(!0),indexOf:a(!1)}},7189:(e,t,n)=>{var r=n(45408),o=n(50295),i=n(6237),a=n(55835),u=n(54020),c=n(86729),s=o([].push),l=function(e){var t=1==e,n=2==e,o=3==e,l=4==e,f=6==e,p=7==e,d=5==e||f;return function(h,y,m,v){for(var g,b,w=a(h),O=i(w),E=r(y,m),_=u(O),x=0,S=v||c,j=t?S(h,_):n||p?S(h,0):void 0;_>x;x++)if((d||x in O)&&(b=E(g=O[x],x,w),e))if(t)j[x]=b;else if(b)switch(e){case 3:return!0;case 5:return g;case 6:return x;case 2:s(j,g)}else switch(e){case 4:return!1;case 7:s(j,g)}return f?-1:o||l?l:j}};e.exports={forEach:l(0),map:l(1),filter:l(2),some:l(3),every:l(4),find:l(5),findIndex:l(6),filterReject:l(7)}},21392:(e,t,n)=>{var r=n(82304),o=n(2905),i=n(80773),a=o("species");e.exports=function(e){return i>=51||!r((function(){var t=[];return(t.constructor={})[a]=function(){return{foo:1}},1!==t[e](Boolean).foo}))}},62235:(e,t,n)=>{"use strict";var r=n(82304);e.exports=function(e,t){var n=[][e];return!!n&&r((function(){n.call(null,t||function(){return 1},1)}))}},5153:(e,t,n)=>{var r=n(83089),o=n(55835),i=n(6237),a=n(54020),u=TypeError,c=function(e){return function(t,n,c,s){r(n);var l=o(t),f=i(l),p=a(l),d=e?p-1:0,h=e?-1:1;if(c<2)for(;;){if(d in f){s=f[d],d+=h;break}if(d+=h,e?d<0:p<=d)throw u("Reduce of empty array with no initial value")}for(;e?d>=0:p>d;d+=h)d in f&&(s=n(s,f[d],d,l));return s}};e.exports={left:c(!1),right:c(!0)}},51069:(e,t,n)=>{var r=n(59470),o=n(54020),i=n(48245),a=Array,u=Math.max;e.exports=function(e,t,n){for(var c=o(e),s=r(t,c),l=r(void 0===n?c:n,c),f=a(u(l-s,0)),p=0;s<l;s++,p++)i(f,p,e[s]);return f.length=p,f}},52311:(e,t,n)=>{var r=n(50295);e.exports=r([].slice)},41953:(e,t,n)=>{var r=n(51069),o=Math.floor,i=function(e,t){var n=e.length,c=o(n/2);return n<8?a(e,t):u(e,i(r(e,0,c),t),i(r(e,c),t),t)},a=function(e,t){for(var n,r,o=e.length,i=1;i<o;){for(r=i,n=e[i];r&&t(e[r-1],n)>0;)e[r]=e[--r];r!==i++&&(e[r]=n)}return e},u=function(e,t,n,r){for(var o=t.length,i=n.length,a=0,u=0;a<o||u<i;)e[a+u]=a<o&&u<i?r(t[a],n[u])<=0?t[a++]:n[u++]:a<o?t[a++]:n[u++];return e};e.exports=i},91657:(e,t,n)=>{var r=n(4887),o=n(95386),i=n(21752),a=n(2905)("species"),u=Array;e.exports=function(e){var t;return r(e)&&(t=e.constructor,(o(t)&&(t===u||r(t.prototype))||i(t)&&null===(t=t[a]))&&(t=void 0)),void 0===t?u:t}},86729:(e,t,n)=>{var r=n(91657);e.exports=function(e,t){return new(r(e))(0===t?0:t)}},34268:(e,t,n)=>{var r=n(95665),o=n(87175);e.exports=function(e,t,n,i){try{return i?t(r(n)[0],n[1]):t(n)}catch(t){o(e,"throw",t)}}},83307:(e,t,n)=>{var r=n(2905)("iterator"),o=!1;try{var i=0,a={next:function(){return{done:!!i++}},return:function(){o=!0}};a[r]=function(){return this},Array.from(a,(function(){throw 2}))}catch(e){}e.exports=function(e,t){if(!t&&!o)return!1;var n=!1;try{var i={};i[r]=function(){return{next:function(){return{done:n=!0}}}},e(i)}catch(e){}return n}},47157:(e,t,n)=>{var r=n(50295),o=r({}.toString),i=r("".slice);e.exports=function(e){return i(o(e),8,-1)}},47465:(e,t,n)=>{var r=n(54172),o=n(83907),i=n(47157),a=n(2905)("toStringTag"),u=Object,c="Arguments"==i(function(){return arguments}());e.exports=r?i:function(e){var t,n,r;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=u(e),a))?n:c?i(t):"Object"==(r=i(t))&&o(t.callee)?"Arguments":r}},95862:(e,t,n)=>{var r=n(50295),o=Error,i=r("".replace),a=String(o("zxcasd").stack),u=/\n\s*at [^:]*:[^\n]*/,c=u.test(a);e.exports=function(e,t){if(c&&"string"==typeof e&&!o.prepareStackTrace)for(;t--;)e=i(e,u,"");return e}},81632:(e,t,n)=>{"use strict";var r=n(60342).f,o=n(63513),i=n(74357),a=n(45408),u=n(66992),c=n(46386),s=n(69106),l=n(53207),f=n(8370),p=n(61145).fastKey,d=n(22956),h=d.set,y=d.getterFor;e.exports={getConstructor:function(e,t,n,s){var l=e((function(e,r){u(e,d),h(e,{type:t,index:o(null),first:void 0,last:void 0,size:0}),f||(e.size=0),null!=r&&c(r,e[s],{that:e,AS_ENTRIES:n})})),d=l.prototype,m=y(t),v=function(e,t,n){var r,o,i=m(e),a=g(e,t);return a?a.value=n:(i.last=a={index:o=p(t,!0),key:t,value:n,previous:r=i.last,next:void 0,removed:!1},i.first||(i.first=a),r&&(r.next=a),f?i.size++:e.size++,"F"!==o&&(i.index[o]=a)),e},g=function(e,t){var n,r=m(e),o=p(t);if("F"!==o)return r.index[o];for(n=r.first;n;n=n.next)if(n.key==t)return n};return i(d,{clear:function(){for(var e=m(this),t=e.index,n=e.first;n;)n.removed=!0,n.previous&&(n.previous=n.previous.next=void 0),delete t[n.index],n=n.next;e.first=e.last=void 0,f?e.size=0:this.size=0},delete:function(e){var t=this,n=m(t),r=g(t,e);if(r){var o=r.next,i=r.previous;delete n.index[r.index],r.removed=!0,i&&(i.next=o),o&&(o.previous=i),n.first==r&&(n.first=o),n.last==r&&(n.last=i),f?n.size--:t.size--}return!!r},forEach:function(e){for(var t,n=m(this),r=a(e,arguments.length>1?arguments[1]:void 0);t=t?t.next:n.first;)for(r(t.value,t.key,this);t&&t.removed;)t=t.previous},has:function(e){return!!g(this,e)}}),i(d,n?{get:function(e){var t=g(this,e);return t&&t.value},set:function(e,t){return v(this,0===e?0:e,t)}}:{add:function(e){return v(this,e=0===e?0:e,e)}}),f&&r(d,"size",{get:function(){return m(this).size}}),l},setStrong:function(e,t,n){var r=t+" Iterator",o=y(t),i=y(r);s(e,t,(function(e,t){h(this,{type:r,target:e,state:o(e),kind:t,last:void 0})}),(function(){for(var e=i(this),t=e.kind,n=e.last;n&&n.removed;)n=n.previous;return e.target&&(e.last=n=n?n.next:e.state.first)?"keys"==t?{value:n.key,done:!1}:"values"==t?{value:n.value,done:!1}:{value:[n.key,n.value],done:!1}:(e.target=void 0,{value:void 0,done:!0})}),n?"entries":"values",!n,!0),l(t)}}},86535:(e,t,n)=>{"use strict";var r=n(4209),o=n(68348),i=n(50295),a=n(82136),u=n(57002),c=n(61145),s=n(46386),l=n(66992),f=n(83907),p=n(21752),d=n(82304),h=n(83307),y=n(14036),m=n(84175);e.exports=function(e,t,n){var v=-1!==e.indexOf("Map"),g=-1!==e.indexOf("Weak"),b=v?"set":"add",w=o[e],O=w&&w.prototype,E=w,_={},x=function(e){var t=i(O[e]);u(O,e,"add"==e?function(e){return t(this,0===e?0:e),this}:"delete"==e?function(e){return!(g&&!p(e))&&t(this,0===e?0:e)}:"get"==e?function(e){return g&&!p(e)?void 0:t(this,0===e?0:e)}:"has"==e?function(e){return!(g&&!p(e))&&t(this,0===e?0:e)}:function(e,n){return t(this,0===e?0:e,n),this})};if(a(e,!f(w)||!(g||O.forEach&&!d((function(){(new w).entries().next()})))))E=n.getConstructor(t,e,v,b),c.enable();else if(a(e,!0)){var S=new E,j=S[b](g?{}:-0,1)!=S,P=d((function(){S.has(1)})),k=h((function(e){new w(e)})),I=!g&&d((function(){for(var e=new w,t=5;t--;)e[b](t,t);return!e.has(-0)}));k||((E=t((function(e,t){l(e,O);var n=m(new w,e,E);return null!=t&&s(t,n[b],{that:n,AS_ENTRIES:v}),n}))).prototype=O,O.constructor=E),(P||I)&&(x("delete"),x("has"),v&&x("get")),(I||j)&&x(b),g&&O.clear&&delete O.clear}return _[e]=E,r({global:!0,constructor:!0,forced:E!=w},_),y(E,e),g||n.setStrong(E,e,v),E}},37349:(e,t,n)=>{var r=n(35920),o=n(81448),i=n(4172),a=n(60342);e.exports=function(e,t,n){for(var u=o(t),c=a.f,s=i.f,l=0;l<u.length;l++){var f=u[l];r(e,f)||n&&r(n,f)||c(e,f,s(t,f))}}},33241:(e,t,n)=>{var r=n(2905)("match");e.exports=function(e){var t=/./;try{"/./"[e](t)}catch(n){try{return t[r]=!1,"/./"[e](t)}catch(e){}}return!1}},83379:(e,t,n)=>{var r=n(82304);e.exports=!r((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}))},61807:(e,t,n)=>{"use strict";var r=n(74479).IteratorPrototype,o=n(63513),i=n(53688),a=n(14036),u=n(59451),c=function(){return this};e.exports=function(e,t,n,s){var l=t+" Iterator";return e.prototype=o(r,{next:i(+!s,n)}),a(e,l,!1,!0),u[l]=c,e}},54652:(e,t,n)=>{var r=n(8370),o=n(60342),i=n(53688);e.exports=r?function(e,t,n){return o.f(e,t,i(1,n))}:function(e,t,n){return e[t]=n,e}},53688:e=>{e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},48245:(e,t,n)=>{"use strict";var r=n(54089),o=n(60342),i=n(53688);e.exports=function(e,t,n){var a=r(t);a in e?o.f(e,a,i(0,n)):e[a]=n}},21394:(e,t,n)=>{var r=n(87915),o=n(60342);e.exports=function(e,t,n){return n.get&&r(n.get,t,{getter:!0}),n.set&&r(n.set,t,{setter:!0}),o.f(e,t,n)}},57002:(e,t,n)=>{var r=n(83907),o=n(60342),i=n(87915),a=n(76925);e.exports=function(e,t,n,u){u||(u={});var c=u.enumerable,s=void 0!==u.name?u.name:t;return r(n)&&i(n,s,u),u.global?c?e[t]=n:a(t,n):(u.unsafe?e[t]&&(c=!0):delete e[t],c?e[t]=n:o.f(e,t,{value:n,enumerable:!1,configurable:!u.nonConfigurable,writable:!u.nonWritable})),e}},74357:(e,t,n)=>{var r=n(57002);e.exports=function(e,t,n){for(var o in t)r(e,o,t[o],n);return e}},76925:(e,t,n)=>{var r=n(68348),o=Object.defineProperty;e.exports=function(e,t){try{o(r,e,{value:t,configurable:!0,writable:!0})}catch(n){r[e]=t}return t}},69106:(e,t,n)=>{"use strict";var r=n(4209),o=n(12364),i=n(80692),a=n(10140),u=n(83907),c=n(61807),s=n(78066),l=n(12398),f=n(14036),p=n(54652),d=n(57002),h=n(2905),y=n(59451),m=n(74479),v=a.PROPER,g=a.CONFIGURABLE,b=m.IteratorPrototype,w=m.BUGGY_SAFARI_ITERATORS,O=h("iterator"),E="keys",_="values",x="entries",S=function(){return this};e.exports=function(e,t,n,a,h,m,j){c(n,t,a);var P,k,I,T=function(e){if(e===h&&L)return L;if(!w&&e in A)return A[e];switch(e){case E:case _:case x:return function(){return new n(this,e)}}return function(){return new n(this)}},R=t+" Iterator",C=!1,A=e.prototype,N=A[O]||A["@@iterator"]||h&&A[h],L=!w&&N||T(h),D="Array"==t&&A.entries||N;if(D&&(P=s(D.call(new e)))!==Object.prototype&&P.next&&(i||s(P)===b||(l?l(P,b):u(P[O])||d(P,O,S)),f(P,R,!0,!0),i&&(y[R]=S)),v&&h==_&&N&&N.name!==_&&(!i&&g?p(A,"name",_):(C=!0,L=function(){return o(N,this)})),h)if(k={values:T(_),keys:m?L:T(E),entries:T(x)},j)for(I in k)(w||C||!(I in A))&&d(A,I,k[I]);else r({target:t,proto:!0,forced:w||C},k);return i&&!j||A[O]===L||d(A,O,L,{name:h}),y[t]=L,k}},87251:(e,t,n)=>{var r=n(75590),o=n(35920),i=n(43445),a=n(60342).f;e.exports=function(e){var t=r.Symbol||(r.Symbol={});o(t,e)||a(t,e,{value:i.f(e)})}},91337:(e,t,n)=>{"use strict";var r=n(89075),o=TypeError;e.exports=function(e,t){if(!delete e[t])throw o("Cannot delete property "+r(t)+" of "+r(e))}},8370:(e,t,n)=>{var r=n(82304);e.exports=!r((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},37027:(e,t,n)=>{var r=n(68348),o=n(21752),i=r.document,a=o(i)&&o(i.createElement);e.exports=function(e){return a?i.createElement(e):{}}},68539:e=>{var t=TypeError;e.exports=function(e){if(e>9007199254740991)throw t("Maximum allowed index exceeded");return e}},6917:e=>{e.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},4152:(e,t,n)=>{var r=n(37027)("span").classList,o=r&&r.constructor&&r.constructor.prototype;e.exports=o===Object.prototype?void 0:o},14855:(e,t,n)=>{var r=n(41790).match(/firefox\/(\d+)/i);e.exports=!!r&&+r[1]},55943:e=>{e.exports="object"==typeof window&&"object"!=typeof Deno},48784:(e,t,n)=>{var r=n(41790);e.exports=/MSIE|Trident/.test(r)},17007:(e,t,n)=>{var r=n(41790),o=n(68348);e.exports=/ipad|iphone|ipod/i.test(r)&&void 0!==o.Pebble},75891:(e,t,n)=>{var r=n(41790);e.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(r)},15200:(e,t,n)=>{var r=n(47157),o=n(68348);e.exports="process"==r(o.process)},55158:(e,t,n)=>{var r=n(41790);e.exports=/web0s(?!.*chrome)/i.test(r)},41790:(e,t,n)=>{var r=n(38161);e.exports=r("navigator","userAgent")||""},80773:(e,t,n)=>{var r,o,i=n(68348),a=n(41790),u=i.process,c=i.Deno,s=u&&u.versions||c&&c.version,l=s&&s.v8;l&&(o=(r=l.split("."))[0]>0&&r[0]<4?1:+(r[0]+r[1])),!o&&a&&(!(r=a.match(/Edge\/(\d+)/))||r[1]>=74)&&(r=a.match(/Chrome\/(\d+)/))&&(o=+r[1]),e.exports=o},25109:(e,t,n)=>{var r=n(41790).match(/AppleWebKit\/(\d+)\./);e.exports=!!r&&+r[1]},16534:e=>{e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},84563:(e,t,n)=>{var r=n(82304),o=n(53688);e.exports=!r((function(){var e=Error("a");return!("stack"in e)||(Object.defineProperty(e,"stack",o(1,7)),7!==e.stack)}))},90672:(e,t,n)=>{"use strict";var r=n(8370),o=n(82304),i=n(95665),a=n(63513),u=n(27966),c=Error.prototype.toString,s=o((function(){if(r){var e=a(Object.defineProperty({},"name",{get:function(){return this===e}}));if("true"!==c.call(e))return!0}return"2: 1"!==c.call({message:1,name:2})||"Error"!==c.call({})}));e.exports=s?function(){var e=i(this),t=u(e.name,"Error"),n=u(e.message);return t?n?t+": "+n:t:n}:c},4209:(e,t,n)=>{var r=n(68348),o=n(4172).f,i=n(54652),a=n(57002),u=n(76925),c=n(37349),s=n(82136);e.exports=function(e,t){var n,l,f,p,d,h=e.target,y=e.global,m=e.stat;if(n=y?r:m?r[h]||u(h,{}):(r[h]||{}).prototype)for(l in t){if(p=t[l],f=e.dontCallGetSet?(d=o(n,l))&&d.value:n[l],!s(y?l:h+(m?".":"#")+l,e.forced)&&void 0!==f){if(typeof p==typeof f)continue;c(p,f)}(e.sham||f&&f.sham)&&i(p,"sham",!0),a(n,l,p,e)}}},82304:e=>{e.exports=function(e){try{return!!e()}catch(e){return!0}}},19798:(e,t,n)=>{"use strict";n(42484);var r=n(50295),o=n(57002),i=n(64118),a=n(82304),u=n(2905),c=n(54652),s=u("species"),l=RegExp.prototype;e.exports=function(e,t,n,f){var p=u(e),d=!a((function(){var t={};return t[p]=function(){return 7},7!=""[e](t)})),h=d&&!a((function(){var t=!1,n=/a/;return"split"===e&&((n={}).constructor={},n.constructor[s]=function(){return n},n.flags="",n[p]=/./[p]),n.exec=function(){return t=!0,null},n[p](""),!t}));if(!d||!h||n){var y=r(/./[p]),m=t(p,""[e],(function(e,t,n,o,a){var u=r(e),c=t.exec;return c===i||c===l.exec?d&&!a?{done:!0,value:y(t,n,o)}:{done:!0,value:u(n,t,o)}:{done:!1}}));o(String.prototype,e,m[0]),o(l,p,m[1])}f&&c(l[p],"sham",!0)}},24367:(e,t,n)=>{var r=n(82304);e.exports=!r((function(){return Object.isExtensible(Object.preventExtensions({}))}))},89664:(e,t,n)=>{var r=n(4055),o=Function.prototype,i=o.apply,a=o.call;e.exports="object"==typeof Reflect&&Reflect.apply||(r?a.bind(i):function(){return a.apply(i,arguments)})},45408:(e,t,n)=>{var r=n(50295),o=n(83089),i=n(4055),a=r(r.bind);e.exports=function(e,t){return o(e),void 0===t?e:i?a(e,t):function(){return e.apply(t,arguments)}}},4055:(e,t,n)=>{var r=n(82304);e.exports=!r((function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")}))},1068:(e,t,n)=>{"use strict";var r=n(50295),o=n(83089),i=n(21752),a=n(35920),u=n(52311),c=n(4055),s=Function,l=r([].concat),f=r([].join),p={},d=function(e,t,n){if(!a(p,t)){for(var r=[],o=0;o<t;o++)r[o]="a["+o+"]";p[t]=s("C,a","return new C("+f(r,",")+")")}return p[t](e,n)};e.exports=c?s.bind:function(e){var t=o(this),n=t.prototype,r=u(arguments,1),a=function(){var n=l(r,u(arguments));return this instanceof a?d(t,n.length,n):t.apply(e,n)};return i(n)&&(a.prototype=n),a}},12364:(e,t,n)=>{var r=n(4055),o=Function.prototype.call;e.exports=r?o.bind(o):function(){return o.apply(o,arguments)}},10140:(e,t,n)=>{var r=n(8370),o=n(35920),i=Function.prototype,a=r&&Object.getOwnPropertyDescriptor,u=o(i,"name"),c=u&&"something"===function(){}.name,s=u&&(!r||r&&a(i,"name").configurable);e.exports={EXISTS:u,PROPER:c,CONFIGURABLE:s}},50295:(e,t,n)=>{var r=n(4055),o=Function.prototype,i=o.bind,a=o.call,u=r&&i.bind(a,a);e.exports=r?function(e){return e&&u(e)}:function(e){return e&&function(){return a.apply(e,arguments)}}},38161:(e,t,n)=>{var r=n(68348),o=n(83907),i=function(e){return o(e)?e:void 0};e.exports=function(e,t){return arguments.length<2?i(r[e]):r[e]&&r[e][t]}},85437:(e,t,n)=>{var r=n(47465),o=n(37838),i=n(59451),a=n(2905)("iterator");e.exports=function(e){if(null!=e)return o(e,a)||o(e,"@@iterator")||i[r(e)]}},6850:(e,t,n)=>{var r=n(12364),o=n(83089),i=n(95665),a=n(89075),u=n(85437),c=TypeError;e.exports=function(e,t){var n=arguments.length<2?u(e):t;if(o(n))return i(r(n,e));throw c(a(e)+" is not iterable")}},37838:(e,t,n)=>{var r=n(83089);e.exports=function(e,t){var n=e[t];return null==n?void 0:r(n)}},30585:(e,t,n)=>{var r=n(50295),o=n(55835),i=Math.floor,a=r("".charAt),u=r("".replace),c=r("".slice),s=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,l=/\$([$&'`]|\d{1,2})/g;e.exports=function(e,t,n,r,f,p){var d=n+e.length,h=r.length,y=l;return void 0!==f&&(f=o(f),y=s),u(p,y,(function(o,u){var s;switch(a(u,0)){case"$":return"$";case"&":return e;case"`":return c(t,0,n);case"'":return c(t,d);case"<":s=f[c(u,1,-1)];break;default:var l=+u;if(0===l)return o;if(l>h){var p=i(l/10);return 0===p?o:p<=h?void 0===r[p-1]?a(u,1):r[p-1]+a(u,1):o}s=r[l-1]}return void 0===s?"":s}))}},68348:(e,t,n)=>{var r=function(e){return e&&e.Math==Math&&e};e.exports=r("object"==typeof globalThis&&globalThis)||r("object"==typeof window&&window)||r("object"==typeof self&&self)||r("object"==typeof n.g&&n.g)||function(){return this}()||Function("return this")()},35920:(e,t,n)=>{var r=n(50295),o=n(55835),i=r({}.hasOwnProperty);e.exports=Object.hasOwn||function(e,t){return i(o(e),t)}},19112:e=>{e.exports={}},10917:(e,t,n)=>{var r=n(68348);e.exports=function(e,t){var n=r.console;n&&n.error&&(1==arguments.length?n.error(e):n.error(e,t))}},99146:(e,t,n)=>{var r=n(38161);e.exports=r("document","documentElement")},80124:(e,t,n)=>{var r=n(8370),o=n(82304),i=n(37027);e.exports=!r&&!o((function(){return 7!=Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a}))},6237:(e,t,n)=>{var r=n(50295),o=n(82304),i=n(47157),a=Object,u=r("".split);e.exports=o((function(){return!a("z").propertyIsEnumerable(0)}))?function(e){return"String"==i(e)?u(e,""):a(e)}:a},84175:(e,t,n)=>{var r=n(83907),o=n(21752),i=n(12398);e.exports=function(e,t,n){var a,u;return i&&r(a=t.constructor)&&a!==n&&o(u=a.prototype)&&u!==n.prototype&&i(e,u),e}},58119:(e,t,n)=>{var r=n(50295),o=n(83907),i=n(8386),a=r(Function.toString);o(i.inspectSource)||(i.inspectSource=function(e){return a(e)}),e.exports=i.inspectSource},77046:(e,t,n)=>{var r=n(21752),o=n(54652);e.exports=function(e,t){r(t)&&"cause"in t&&o(e,"cause",t.cause)}},61145:(e,t,n)=>{var r=n(4209),o=n(50295),i=n(19112),a=n(21752),u=n(35920),c=n(60342).f,s=n(13194),l=n(78698),f=n(41534),p=n(51339),d=n(24367),h=!1,y=p("meta"),m=0,v=function(e){c(e,y,{value:{objectID:"O"+m++,weakData:{}}})},g=e.exports={enable:function(){g.enable=function(){},h=!0;var e=s.f,t=o([].splice),n={};n[y]=1,e(n).length&&(s.f=function(n){for(var r=e(n),o=0,i=r.length;o<i;o++)if(r[o]===y){t(r,o,1);break}return r},r({target:"Object",stat:!0,forced:!0},{getOwnPropertyNames:l.f}))},fastKey:function(e,t){if(!a(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!u(e,y)){if(!f(e))return"F";if(!t)return"E";v(e)}return e[y].objectID},getWeakData:function(e,t){if(!u(e,y)){if(!f(e))return!0;if(!t)return!1;v(e)}return e[y].weakData},onFreeze:function(e){return d&&h&&f(e)&&!u(e,y)&&v(e),e}};i[y]=!0},22956:(e,t,n)=>{var r,o,i,a=n(11200),u=n(68348),c=n(50295),s=n(21752),l=n(54652),f=n(35920),p=n(8386),d=n(95235),h=n(19112),y="Object already initialized",m=u.TypeError,v=u.WeakMap;if(a||p.state){var g=p.state||(p.state=new v),b=c(g.get),w=c(g.has),O=c(g.set);r=function(e,t){if(w(g,e))throw new m(y);return t.facade=e,O(g,e,t),t},o=function(e){return b(g,e)||{}},i=function(e){return w(g,e)}}else{var E=d("state");h[E]=!0,r=function(e,t){if(f(e,E))throw new m(y);return t.facade=e,l(e,E,t),t},o=function(e){return f(e,E)?e[E]:{}},i=function(e){return f(e,E)}}e.exports={set:r,get:o,has:i,enforce:function(e){return i(e)?o(e):r(e,{})},getterFor:function(e){return function(t){var n;if(!s(t)||(n=o(t)).type!==e)throw m("Incompatible receiver, "+e+" required");return n}}}},36485:(e,t,n)=>{var r=n(2905),o=n(59451),i=r("iterator"),a=Array.prototype;e.exports=function(e){return void 0!==e&&(o.Array===e||a[i]===e)}},4887:(e,t,n)=>{var r=n(47157);e.exports=Array.isArray||function(e){return"Array"==r(e)}},83907:e=>{e.exports=function(e){return"function"==typeof e}},95386:(e,t,n)=>{var r=n(50295),o=n(82304),i=n(83907),a=n(47465),u=n(38161),c=n(58119),s=function(){},l=[],f=u("Reflect","construct"),p=/^\s*(?:class|function)\b/,d=r(p.exec),h=!p.exec(s),y=function(e){if(!i(e))return!1;try{return f(s,l,e),!0}catch(e){return!1}},m=function(e){if(!i(e))return!1;switch(a(e)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return h||!!d(p,c(e))}catch(e){return!0}};m.sham=!0,e.exports=!f||o((function(){var e;return y(y.call)||!y(Object)||!y((function(){e=!0}))||e}))?m:y},82136:(e,t,n)=>{var r=n(82304),o=n(83907),i=/#|\.prototype\./,a=function(e,t){var n=c[u(e)];return n==l||n!=s&&(o(t)?r(t):!!t)},u=a.normalize=function(e){return String(e).replace(i,".").toLowerCase()},c=a.data={},s=a.NATIVE="N",l=a.POLYFILL="P";e.exports=a},37086:(e,t,n)=>{var r=n(21752),o=Math.floor;e.exports=Number.isInteger||function(e){return!r(e)&&isFinite(e)&&o(e)===e}},21752:(e,t,n)=>{var r=n(83907);e.exports=function(e){return"object"==typeof e?null!==e:r(e)}},80692:e=>{e.exports=!1},12810:(e,t,n)=>{var r=n(21752),o=n(47157),i=n(2905)("match");e.exports=function(e){var t;return r(e)&&(void 0!==(t=e[i])?!!t:"RegExp"==o(e))}},33758:(e,t,n)=>{var r=n(38161),o=n(83907),i=n(18142),a=n(14386),u=Object;e.exports=a?function(e){return"symbol"==typeof e}:function(e){var t=r("Symbol");return o(t)&&i(t.prototype,u(e))}},46386:(e,t,n)=>{var r=n(45408),o=n(12364),i=n(95665),a=n(89075),u=n(36485),c=n(54020),s=n(18142),l=n(6850),f=n(85437),p=n(87175),d=TypeError,h=function(e,t){this.stopped=e,this.result=t},y=h.prototype;e.exports=function(e,t,n){var m,v,g,b,w,O,E,_=n&&n.that,x=!(!n||!n.AS_ENTRIES),S=!(!n||!n.IS_ITERATOR),j=!(!n||!n.INTERRUPTED),P=r(t,_),k=function(e){return m&&p(m,"normal",e),new h(!0,e)},I=function(e){return x?(i(e),j?P(e[0],e[1],k):P(e[0],e[1])):j?P(e,k):P(e)};if(S)m=e;else{if(!(v=f(e)))throw d(a(e)+" is not iterable");if(u(v)){for(g=0,b=c(e);b>g;g++)if((w=I(e[g]))&&s(y,w))return w;return new h(!1)}m=l(e,v)}for(O=m.next;!(E=o(O,m)).done;){try{w=I(E.value)}catch(e){p(m,"throw",e)}if("object"==typeof w&&w&&s(y,w))return w}return new h(!1)}},87175:(e,t,n)=>{var r=n(12364),o=n(95665),i=n(37838);e.exports=function(e,t,n){var a,u;o(e);try{if(!(a=i(e,"return"))){if("throw"===t)throw n;return n}a=r(a,e)}catch(e){u=!0,a=e}if("throw"===t)throw n;if(u)throw a;return o(a),n}},74479:(e,t,n)=>{"use strict";var r,o,i,a=n(82304),u=n(83907),c=n(63513),s=n(78066),l=n(57002),f=n(2905),p=n(80692),d=f("iterator"),h=!1;[].keys&&("next"in(i=[].keys())?(o=s(s(i)))!==Object.prototype&&(r=o):h=!0),null==r||a((function(){var e={};return r[d].call(e)!==e}))?r={}:p&&(r=c(r)),u(r[d])||l(r,d,(function(){return this})),e.exports={IteratorPrototype:r,BUGGY_SAFARI_ITERATORS:h}},59451:e=>{e.exports={}},54020:(e,t,n)=>{var r=n(36350);e.exports=function(e){return r(e.length)}},87915:(e,t,n)=>{var r=n(82304),o=n(83907),i=n(35920),a=n(8370),u=n(10140).CONFIGURABLE,c=n(58119),s=n(22956),l=s.enforce,f=s.get,p=Object.defineProperty,d=a&&!r((function(){return 8!==p((function(){}),"length",{value:8}).length})),h=String(String).split("String"),y=e.exports=function(e,t,n){"Symbol("===String(t).slice(0,7)&&(t="["+String(t).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),n&&n.getter&&(t="get "+t),n&&n.setter&&(t="set "+t),(!i(e,"name")||u&&e.name!==t)&&p(e,"name",{value:t,configurable:!0}),d&&n&&i(n,"arity")&&e.length!==n.arity&&p(e,"length",{value:n.arity});try{n&&i(n,"constructor")&&n.constructor?a&&p(e,"prototype",{writable:!1}):e.prototype&&(e.prototype=void 0)}catch(e){}var r=l(e);return i(r,"source")||(r.source=h.join("string"==typeof t?t:"")),e};Function.prototype.toString=y((function(){return o(this)&&f(this).source||c(this)}),"toString")},7688:e=>{var t=Math.ceil,n=Math.floor;e.exports=Math.trunc||function(e){var r=+e;return(r>0?n:t)(r)}},21029:(e,t,n)=>{var r,o,i,a,u,c,s,l,f=n(68348),p=n(45408),d=n(4172).f,h=n(36585).set,y=n(75891),m=n(17007),v=n(55158),g=n(15200),b=f.MutationObserver||f.WebKitMutationObserver,w=f.document,O=f.process,E=f.Promise,_=d(f,"queueMicrotask"),x=_&&_.value;x||(r=function(){var e,t;for(g&&(e=O.domain)&&e.exit();o;){t=o.fn,o=o.next;try{t()}catch(e){throw o?a():i=void 0,e}}i=void 0,e&&e.enter()},y||g||v||!b||!w?!m&&E&&E.resolve?((s=E.resolve(void 0)).constructor=E,l=p(s.then,s),a=function(){l(r)}):g?a=function(){O.nextTick(r)}:(h=p(h,f),a=function(){h(r)}):(u=!0,c=w.createTextNode(""),new b(r).observe(c,{characterData:!0}),a=function(){c.data=u=!u})),e.exports=x||function(e){var t={fn:e,next:void 0};i&&(i.next=t),o||(o=t,a()),i=t}},75698:(e,t,n)=>{var r=n(37201);e.exports=r&&!!Symbol.for&&!!Symbol.keyFor},37201:(e,t,n)=>{var r=n(80773),o=n(82304);e.exports=!!Object.getOwnPropertySymbols&&!o((function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&r&&r<41}))},11200:(e,t,n)=>{var r=n(68348),o=n(83907),i=n(58119),a=r.WeakMap;e.exports=o(a)&&/native code/.test(i(a))},63223:(e,t,n)=>{"use strict";var r=n(83089),o=function(e){var t,n;this.promise=new e((function(e,r){if(void 0!==t||void 0!==n)throw TypeError("Bad Promise constructor");t=e,n=r})),this.resolve=r(t),this.reject=r(n)};e.exports.f=function(e){return new o(e)}},27966:(e,t,n)=>{var r=n(43974);e.exports=function(e,t){return void 0===e?arguments.length<2?"":t:r(e)}},9397:(e,t,n)=>{var r=n(12810),o=TypeError;e.exports=function(e){if(r(e))throw o("The method doesn't accept regular expressions");return e}},10634:(e,t,n)=>{var r=n(68348),o=n(82304),i=n(50295),a=n(43974),u=n(16221).trim,c=n(56346),s=i("".charAt),l=r.parseFloat,f=r.Symbol,p=f&&f.iterator,d=1/l(c+"-0")!=-1/0||p&&!o((function(){l(Object(p))}));e.exports=d?function(e){var t=u(a(e)),n=l(t);return 0===n&&"-"==s(t,0)?-0:n}:l},49268:(e,t,n)=>{var r=n(68348),o=n(82304),i=n(50295),a=n(43974),u=n(16221).trim,c=n(56346),s=r.parseInt,l=r.Symbol,f=l&&l.iterator,p=/^[+-]?0x/i,d=i(p.exec),h=8!==s(c+"08")||22!==s(c+"0x16")||f&&!o((function(){s(Object(f))}));e.exports=h?function(e,t){var n=u(a(e));return s(n,t>>>0||(d(p,n)?16:10))}:s},70194:(e,t,n)=>{"use strict";var r=n(8370),o=n(50295),i=n(12364),a=n(82304),u=n(89361),c=n(19849),s=n(12922),l=n(55835),f=n(6237),p=Object.assign,d=Object.defineProperty,h=o([].concat);e.exports=!p||a((function(){if(r&&1!==p({b:1},p(d({},"a",{enumerable:!0,get:function(){d(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},n=Symbol(),o="abcdefghijklmnopqrst";return e[n]=7,o.split("").forEach((function(e){t[e]=e})),7!=p({},e)[n]||u(p({},t)).join("")!=o}))?function(e,t){for(var n=l(e),o=arguments.length,a=1,p=c.f,d=s.f;o>a;)for(var y,m=f(arguments[a++]),v=p?h(u(m),p(m)):u(m),g=v.length,b=0;g>b;)y=v[b++],r&&!i(d,m,y)||(n[y]=m[y]);return n}:p},63513:(e,t,n)=>{var r,o=n(95665),i=n(81040),a=n(16534),u=n(19112),c=n(99146),s=n(37027),l=n(95235),f=l("IE_PROTO"),p=function(){},d=function(e){return"<script>"+e+"</"+"script>"},h=function(e){e.write(d("")),e.close();var t=e.parentWindow.Object;return e=null,t},y=function(){try{r=new ActiveXObject("htmlfile")}catch(e){}var e,t;y="undefined"!=typeof document?document.domain&&r?h(r):((t=s("iframe")).style.display="none",c.appendChild(t),t.src=String("javascript:"),(e=t.contentWindow.document).open(),e.write(d("document.F=Object")),e.close(),e.F):h(r);for(var n=a.length;n--;)delete y.prototype[a[n]];return y()};u[f]=!0,e.exports=Object.create||function(e,t){var n;return null!==e?(p.prototype=o(e),n=new p,p.prototype=null,n[f]=e):n=y(),void 0===t?n:i.f(n,t)}},81040:(e,t,n)=>{var r=n(8370),o=n(53850),i=n(60342),a=n(95665),u=n(79486),c=n(89361);t.f=r&&!o?Object.defineProperties:function(e,t){a(e);for(var n,r=u(t),o=c(t),s=o.length,l=0;s>l;)i.f(e,n=o[l++],r[n]);return e}},60342:(e,t,n)=>{var r=n(8370),o=n(80124),i=n(53850),a=n(95665),u=n(54089),c=TypeError,s=Object.defineProperty,l=Object.getOwnPropertyDescriptor,f="enumerable",p="configurable",d="writable";t.f=r?i?function(e,t,n){if(a(e),t=u(t),a(n),"function"==typeof e&&"prototype"===t&&"value"in n&&d in n&&!n.writable){var r=l(e,t);r&&r.writable&&(e[t]=n.value,n={configurable:p in n?n.configurable:r.configurable,enumerable:f in n?n.enumerable:r.enumerable,writable:!1})}return s(e,t,n)}:s:function(e,t,n){if(a(e),t=u(t),a(n),o)try{return s(e,t,n)}catch(e){}if("get"in n||"set"in n)throw c("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},4172:(e,t,n)=>{var r=n(8370),o=n(12364),i=n(12922),a=n(53688),u=n(79486),c=n(54089),s=n(35920),l=n(80124),f=Object.getOwnPropertyDescriptor;t.f=r?f:function(e,t){if(e=u(e),t=c(t),l)try{return f(e,t)}catch(e){}if(s(e,t))return a(!o(i.f,e,t),e[t])}},78698:(e,t,n)=>{var r=n(47157),o=n(79486),i=n(13194).f,a=n(51069),u="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];e.exports.f=function(e){return u&&"Window"==r(e)?function(e){try{return i(e)}catch(e){return a(u)}}(e):i(o(e))}},13194:(e,t,n)=>{var r=n(11704),o=n(16534).concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return r(e,o)}},19849:(e,t)=>{t.f=Object.getOwnPropertySymbols},78066:(e,t,n)=>{var r=n(35920),o=n(83907),i=n(55835),a=n(95235),u=n(83379),c=a("IE_PROTO"),s=Object,l=s.prototype;e.exports=u?s.getPrototypeOf:function(e){var t=i(e);if(r(t,c))return t[c];var n=t.constructor;return o(n)&&t instanceof n?n.prototype:t instanceof s?l:null}},41534:(e,t,n)=>{var r=n(82304),o=n(21752),i=n(47157),a=n(76930),u=Object.isExtensible,c=r((function(){u(1)}));e.exports=c||a?function(e){return!!o(e)&&((!a||"ArrayBuffer"!=i(e))&&(!u||u(e)))}:u},18142:(e,t,n)=>{var r=n(50295);e.exports=r({}.isPrototypeOf)},11704:(e,t,n)=>{var r=n(50295),o=n(35920),i=n(79486),a=n(26281).indexOf,u=n(19112),c=r([].push);e.exports=function(e,t){var n,r=i(e),s=0,l=[];for(n in r)!o(u,n)&&o(r,n)&&c(l,n);for(;t.length>s;)o(r,n=t[s++])&&(~a(l,n)||c(l,n));return l}},89361:(e,t,n)=>{var r=n(11704),o=n(16534);e.exports=Object.keys||function(e){return r(e,o)}},12922:(e,t)=>{"use strict";var n={}.propertyIsEnumerable,r=Object.getOwnPropertyDescriptor,o=r&&!n.call({1:2},1);t.f=o?function(e){var t=r(this,e);return!!t&&t.enumerable}:n},12398:(e,t,n)=>{var r=n(50295),o=n(95665),i=n(90513);e.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,n={};try{(e=r(Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set))(n,[]),t=n instanceof Array}catch(e){}return function(n,r){return o(n),i(r),t?e(n,r):n.__proto__=r,n}}():void 0)},64307:(e,t,n)=>{var r=n(8370),o=n(50295),i=n(89361),a=n(79486),u=o(n(12922).f),c=o([].push),s=function(e){return function(t){for(var n,o=a(t),s=i(o),l=s.length,f=0,p=[];l>f;)n=s[f++],r&&!u(o,n)||c(p,e?[n,o[n]]:o[n]);return p}};e.exports={entries:s(!0),values:s(!1)}},51431:(e,t,n)=>{"use strict";var r=n(54172),o=n(47465);e.exports=r?{}.toString:function(){return"[object "+o(this)+"]"}},29786:(e,t,n)=>{var r=n(12364),o=n(83907),i=n(21752),a=TypeError;e.exports=function(e,t){var n,u;if("string"===t&&o(n=e.toString)&&!i(u=r(n,e)))return u;if(o(n=e.valueOf)&&!i(u=r(n,e)))return u;if("string"!==t&&o(n=e.toString)&&!i(u=r(n,e)))return u;throw a("Can't convert object to primitive value")}},81448:(e,t,n)=>{var r=n(38161),o=n(50295),i=n(13194),a=n(19849),u=n(95665),c=o([].concat);e.exports=r("Reflect","ownKeys")||function(e){var t=i.f(u(e)),n=a.f;return n?c(t,n(e)):t}},75590:(e,t,n)=>{var r=n(68348);e.exports=r},88481:e=>{e.exports=function(e){try{return{error:!1,value:e()}}catch(e){return{error:!0,value:e}}}},31240:(e,t,n)=>{var r=n(68348),o=n(36576),i=n(83907),a=n(82136),u=n(58119),c=n(2905),s=n(55943),l=n(80692),f=n(80773),p=o&&o.prototype,d=c("species"),h=!1,y=i(r.PromiseRejectionEvent),m=a("Promise",(function(){var e=u(o),t=e!==String(o);if(!t&&66===f)return!0;if(l&&(!p.catch||!p.finally))return!0;if(f>=51&&/native code/.test(e))return!1;var n=new o((function(e){e(1)})),r=function(e){e((function(){}),(function(){}))};return(n.constructor={})[d]=r,!(h=n.then((function(){}))instanceof r)||!t&&s&&!y}));e.exports={CONSTRUCTOR:m,REJECTION_EVENT:y,SUBCLASSING:h}},36576:(e,t,n)=>{var r=n(68348);e.exports=r.Promise},26750:(e,t,n)=>{var r=n(95665),o=n(21752),i=n(63223);e.exports=function(e,t){if(r(e),o(t)&&t.constructor===e)return t;var n=i.f(e);return(0,n.resolve)(t),n.promise}},69700:(e,t,n)=>{var r=n(36576),o=n(83307),i=n(31240).CONSTRUCTOR;e.exports=i||!o((function(e){r.all(e).then(void 0,(function(){}))}))},97487:(e,t,n)=>{var r=n(60342).f;e.exports=function(e,t,n){n in e||r(e,n,{configurable:!0,get:function(){return t[n]},set:function(e){t[n]=e}})}},55149:e=>{var t=function(){this.head=null,this.tail=null};t.prototype={add:function(e){var t={item:e,next:null};this.head?this.tail.next=t:this.head=t,this.tail=t},get:function(){var e=this.head;if(e)return this.head=e.next,this.tail===e&&(this.tail=null),e.item}},e.exports=t},90123:(e,t,n)=>{var r=n(12364),o=n(95665),i=n(83907),a=n(47157),u=n(64118),c=TypeError;e.exports=function(e,t){var n=e.exec;if(i(n)){var s=r(n,e,t);return null!==s&&o(s),s}if("RegExp"===a(e))return r(u,e,t);throw c("RegExp#exec called on incompatible receiver")}},64118:(e,t,n)=>{"use strict";var r,o,i=n(12364),a=n(50295),u=n(43974),c=n(12098),s=n(7588),l=n(54365),f=n(63513),p=n(22956).get,d=n(53937),h=n(41085),y=l("native-string-replace",String.prototype.replace),m=RegExp.prototype.exec,v=m,g=a("".charAt),b=a("".indexOf),w=a("".replace),O=a("".slice),E=(o=/b*/g,i(m,r=/a/,"a"),i(m,o,"a"),0!==r.lastIndex||0!==o.lastIndex),_=s.BROKEN_CARET,x=void 0!==/()??/.exec("")[1];(E||x||_||d||h)&&(v=function(e){var t,n,r,o,a,s,l,d=this,h=p(d),S=u(e),j=h.raw;if(j)return j.lastIndex=d.lastIndex,t=i(v,j,S),d.lastIndex=j.lastIndex,t;var P=h.groups,k=_&&d.sticky,I=i(c,d),T=d.source,R=0,C=S;if(k&&(I=w(I,"y",""),-1===b(I,"g")&&(I+="g"),C=O(S,d.lastIndex),d.lastIndex>0&&(!d.multiline||d.multiline&&"\n"!==g(S,d.lastIndex-1))&&(T="(?: "+T+")",C=" "+C,R++),n=new RegExp("^(?:"+T+")",I)),x&&(n=new RegExp("^"+T+"$(?!\\s)",I)),E&&(r=d.lastIndex),o=i(m,k?n:d,C),k?o?(o.input=O(o.input,R),o[0]=O(o[0],R),o.index=d.lastIndex,d.lastIndex+=o[0].length):d.lastIndex=0:E&&o&&(d.lastIndex=d.global?o.index+o[0].length:r),x&&o&&o.length>1&&i(y,o[0],n,(function(){for(a=1;a<arguments.length-2;a++)void 0===arguments[a]&&(o[a]=void 0)})),o&&P)for(o.groups=s=f(null),a=0;a<P.length;a++)s[(l=P[a])[0]]=o[l[1]];return o}),e.exports=v},12098:(e,t,n)=>{"use strict";var r=n(95665);e.exports=function(){var e=r(this),t="";return e.hasIndices&&(t+="d"),e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.dotAll&&(t+="s"),e.unicode&&(t+="u"),e.unicodeSets&&(t+="v"),e.sticky&&(t+="y"),t}},17350:(e,t,n)=>{var r=n(12364),o=n(35920),i=n(18142),a=n(12098),u=RegExp.prototype;e.exports=function(e){var t=e.flags;return void 0!==t||"flags"in u||o(e,"flags")||!i(u,e)?t:r(a,e)}},7588:(e,t,n)=>{var r=n(82304),o=n(68348).RegExp,i=r((function(){var e=o("a","y");return e.lastIndex=2,null!=e.exec("abcd")})),a=i||r((function(){return!o("a","y").sticky})),u=i||r((function(){var e=o("^r","gy");return e.lastIndex=2,null!=e.exec("str")}));e.exports={BROKEN_CARET:u,MISSED_STICKY:a,UNSUPPORTED_Y:i}},53937:(e,t,n)=>{var r=n(82304),o=n(68348).RegExp;e.exports=r((function(){var e=o(".","s");return!(e.dotAll&&e.exec("\n")&&"s"===e.flags)}))},41085:(e,t,n)=>{var r=n(82304),o=n(68348).RegExp;e.exports=r((function(){var e=o("(?<a>b)","g");return"b"!==e.exec("b").groups.a||"bc"!=="b".replace(e,"$<a>c")}))},21132:e=>{var t=TypeError;e.exports=function(e){if(null==e)throw t("Can't call method on "+e);return e}},19300:e=>{e.exports=Object.is||function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t}},65387:(e,t,n)=>{var r=n(68348),o=n(89664),i=n(83907),a=n(41790),u=n(52311),c=n(57167),s=/MSIE .\./.test(a),l=r.Function,f=function(e){return s?function(t,n){var r=c(arguments.length,1)>2,a=i(t)?t:l(t),s=r?u(arguments,2):void 0;return e(r?function(){o(a,this,s)}:a,n)}:e};e.exports={setTimeout:f(r.setTimeout),setInterval:f(r.setInterval)}},53207:(e,t,n)=>{"use strict";var r=n(38161),o=n(60342),i=n(2905),a=n(8370),u=i("species");e.exports=function(e){var t=r(e),n=o.f;a&&t&&!t[u]&&n(t,u,{configurable:!0,get:function(){return this}})}},14036:(e,t,n)=>{var r=n(60342).f,o=n(35920),i=n(2905)("toStringTag");e.exports=function(e,t,n){e&&!n&&(e=e.prototype),e&&!o(e,i)&&r(e,i,{configurable:!0,value:t})}},95235:(e,t,n)=>{var r=n(54365),o=n(51339),i=r("keys");e.exports=function(e){return i[e]||(i[e]=o(e))}},8386:(e,t,n)=>{var r=n(68348),o=n(76925),i="__core-js_shared__",a=r[i]||o(i,{});e.exports=a},54365:(e,t,n)=>{var r=n(80692),o=n(8386);(e.exports=function(e,t){return o[e]||(o[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.23.1",mode:r?"pure":"global",copyright:"© 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.23.1/LICENSE",source:"https://github.com/zloirock/core-js"})},18062:(e,t,n)=>{var r=n(95665),o=n(31474),i=n(2905)("species");e.exports=function(e,t){var n,a=r(e).constructor;return void 0===a||null==(n=r(a)[i])?t:o(n)}},42968:(e,t,n)=>{var r=n(50295),o=n(89345),i=n(43974),a=n(21132),u=r("".charAt),c=r("".charCodeAt),s=r("".slice),l=function(e){return function(t,n){var r,l,f=i(a(t)),p=o(n),d=f.length;return p<0||p>=d?e?"":void 0:(r=c(f,p))<55296||r>56319||p+1===d||(l=c(f,p+1))<56320||l>57343?e?u(f,p):r:e?s(f,p,p+2):l-56320+(r-55296<<10)+65536}};e.exports={codeAt:l(!1),charAt:l(!0)}},98816:(e,t,n)=>{"use strict";var r=n(89345),o=n(43974),i=n(21132),a=RangeError;e.exports=function(e){var t=o(i(this)),n="",u=r(e);if(u<0||u==1/0)throw a("Wrong number of repetitions");for(;u>0;(u>>>=1)&&(t+=t))1&u&&(n+=t);return n}},21225:(e,t,n)=>{var r=n(10140).PROPER,o=n(82304),i=n(56346);e.exports=function(e){return o((function(){return!!i[e]()||"​…᠎"!=="​…᠎"[e]()||r&&i[e].name!==e}))}},16221:(e,t,n)=>{var r=n(50295),o=n(21132),i=n(43974),a=n(56346),u=r("".replace),c="["+a+"]",s=RegExp("^"+c+c+"*"),l=RegExp(c+c+"*$"),f=function(e){return function(t){var n=i(o(t));return 1&e&&(n=u(n,s,"")),2&e&&(n=u(n,l,"")),n}};e.exports={start:f(1),end:f(2),trim:f(3)}},50205:(e,t,n)=>{var r=n(12364),o=n(38161),i=n(2905),a=n(57002);e.exports=function(){var e=o("Symbol"),t=e&&e.prototype,n=t&&t.valueOf,u=i("toPrimitive");t&&!t[u]&&a(t,u,(function(e){return r(n,this)}),{arity:1})}},36585:(e,t,n)=>{var r,o,i,a,u=n(68348),c=n(89664),s=n(45408),l=n(83907),f=n(35920),p=n(82304),d=n(99146),h=n(52311),y=n(37027),m=n(57167),v=n(75891),g=n(15200),b=u.setImmediate,w=u.clearImmediate,O=u.process,E=u.Dispatch,_=u.Function,x=u.MessageChannel,S=u.String,j=0,P={},k="onreadystatechange";try{r=u.location}catch(e){}var I=function(e){if(f(P,e)){var t=P[e];delete P[e],t()}},T=function(e){return function(){I(e)}},R=function(e){I(e.data)},C=function(e){u.postMessage(S(e),r.protocol+"//"+r.host)};b&&w||(b=function(e){m(arguments.length,1);var t=l(e)?e:_(e),n=h(arguments,1);return P[++j]=function(){c(t,void 0,n)},o(j),j},w=function(e){delete P[e]},g?o=function(e){O.nextTick(T(e))}:E&&E.now?o=function(e){E.now(T(e))}:x&&!v?(a=(i=new x).port2,i.port1.onmessage=R,o=s(a.postMessage,a)):u.addEventListener&&l(u.postMessage)&&!u.importScripts&&r&&"file:"!==r.protocol&&!p(C)?(o=C,u.addEventListener("message",R,!1)):o=k in y("script")?function(e){d.appendChild(y("script")).onreadystatechange=function(){d.removeChild(this),I(e)}}:function(e){setTimeout(T(e),0)}),e.exports={set:b,clear:w}},90364:(e,t,n)=>{var r=n(50295);e.exports=r(1..valueOf)},59470:(e,t,n)=>{var r=n(89345),o=Math.max,i=Math.min;e.exports=function(e,t){var n=r(e);return n<0?o(n+t,0):i(n,t)}},79486:(e,t,n)=>{var r=n(6237),o=n(21132);e.exports=function(e){return r(o(e))}},89345:(e,t,n)=>{var r=n(7688);e.exports=function(e){var t=+e;return t!=t||0===t?0:r(t)}},36350:(e,t,n)=>{var r=n(89345),o=Math.min;e.exports=function(e){return e>0?o(r(e),9007199254740991):0}},55835:(e,t,n)=>{var r=n(21132),o=Object;e.exports=function(e){return o(r(e))}},4420:(e,t,n)=>{var r=n(12364),o=n(21752),i=n(33758),a=n(37838),u=n(29786),c=n(2905),s=TypeError,l=c("toPrimitive");e.exports=function(e,t){if(!o(e)||i(e))return e;var n,c=a(e,l);if(c){if(void 0===t&&(t="default"),n=r(c,e,t),!o(n)||i(n))return n;throw s("Can't convert object to primitive value")}return void 0===t&&(t="number"),u(e,t)}},54089:(e,t,n)=>{var r=n(4420),o=n(33758);e.exports=function(e){var t=r(e,"string");return o(t)?t:t+""}},54172:(e,t,n)=>{var r={};r[n(2905)("toStringTag")]="z",e.exports="[object z]"===String(r)},43974:(e,t,n)=>{var r=n(47465),o=String;e.exports=function(e){if("Symbol"===r(e))throw TypeError("Cannot convert a Symbol value to a string");return o(e)}},89075:e=>{var t=String;e.exports=function(e){try{return t(e)}catch(e){return"Object"}}},51339:(e,t,n)=>{var r=n(50295),o=0,i=Math.random(),a=r(1..toString);e.exports=function(e){return"Symbol("+(void 0===e?"":e)+")_"+a(++o+i,36)}},14386:(e,t,n)=>{var r=n(37201);e.exports=r&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},53850:(e,t,n)=>{var r=n(8370),o=n(82304);e.exports=r&&o((function(){return 42!=Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype}))},57167:e=>{var t=TypeError;e.exports=function(e,n){if(e<n)throw t("Not enough arguments");return e}},43445:(e,t,n)=>{var r=n(2905);t.f=r},2905:(e,t,n)=>{var r=n(68348),o=n(54365),i=n(35920),a=n(51339),u=n(37201),c=n(14386),s=o("wks"),l=r.Symbol,f=l&&l.for,p=c?l:l&&l.withoutSetter||a;e.exports=function(e){if(!i(s,e)||!u&&"string"!=typeof s[e]){var t="Symbol."+e;u&&i(l,e)?s[e]=l[e]:s[e]=c&&f?f(t):p(t)}return s[e]}},56346:e=>{e.exports="\t\n\v\f\r                 \u2028\u2029\ufeff"},58113:(e,t,n)=>{"use strict";var r=n(38161),o=n(35920),i=n(54652),a=n(18142),u=n(12398),c=n(37349),s=n(97487),l=n(84175),f=n(27966),p=n(77046),d=n(95862),h=n(84563),y=n(8370),m=n(80692);e.exports=function(e,t,n,v){var g="stackTraceLimit",b=v?2:1,w=e.split("."),O=w[w.length-1],E=r.apply(null,w);if(E){var _=E.prototype;if(!m&&o(_,"cause")&&delete _.cause,!n)return E;var x=r("Error"),S=t((function(e,t){var n=f(v?t:e,void 0),r=v?new E(e):new E;return void 0!==n&&i(r,"message",n),h&&i(r,"stack",d(r.stack,2)),this&&a(_,this)&&l(r,this,S),arguments.length>b&&p(r,arguments[b]),r}));if(S.prototype=_,"Error"!==O?u?u(S,x):c(S,x,{name:!0}):y&&g in E&&(s(S,E,g),s(S,E,"prepareStackTrace")),c(S,E),!m)try{_.name!==O&&i(_,"name",O),_.constructor=S}catch(e){}return S}}},36353:(e,t,n)=>{"use strict";var r=n(4209),o=n(82304),i=n(4887),a=n(21752),u=n(55835),c=n(54020),s=n(68539),l=n(48245),f=n(86729),p=n(21392),d=n(2905),h=n(80773),y=d("isConcatSpreadable"),m=h>=51||!o((function(){var e=[];return e[y]=!1,e.concat()[0]!==e})),v=p("concat"),g=function(e){if(!a(e))return!1;var t=e[y];return void 0!==t?!!t:i(e)};r({target:"Array",proto:!0,arity:1,forced:!m||!v},{concat:function(e){var t,n,r,o,i,a=u(this),p=f(a,0),d=0;for(t=-1,r=arguments.length;t<r;t++)if(g(i=-1===t?a:arguments[t]))for(o=c(i),s(d+o),n=0;n<o;n++,d++)n in i&&l(p,d,i[n]);else s(d+1),l(p,d++,i);return p.length=d,p}})},77653:(e,t,n)=>{"use strict";var r=n(4209),o=n(7189).every;r({target:"Array",proto:!0,forced:!n(62235)("every")},{every:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}})},93857:(e,t,n)=>{var r=n(4209),o=n(25022),i=n(16693);r({target:"Array",proto:!0},{fill:o}),i("fill")},14862:(e,t,n)=>{"use strict";var r=n(4209),o=n(7189).filter;r({target:"Array",proto:!0,forced:!n(21392)("filter")},{filter:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}})},35288:(e,t,n)=>{"use strict";var r=n(4209),o=n(7189).findIndex,i=n(16693),a="findIndex",u=!0;a in[]&&Array(1).findIndex((function(){u=!1})),r({target:"Array",proto:!0,forced:u},{findIndex:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),i(a)},90330:(e,t,n)=>{"use strict";var r=n(4209),o=n(7189).find,i=n(16693),a="find",u=!0;a in[]&&Array(1).find((function(){u=!1})),r({target:"Array",proto:!0,forced:u},{find:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),i(a)},83159:(e,t,n)=>{"use strict";var r=n(4209),o=n(66469);r({target:"Array",proto:!0,forced:[].forEach!=o},{forEach:o})},52906:(e,t,n)=>{var r=n(4209),o=n(93099);r({target:"Array",stat:!0,forced:!n(83307)((function(e){Array.from(e)}))},{from:o})},45792:(e,t,n)=>{"use strict";var r=n(4209),o=n(26281).includes,i=n(82304),a=n(16693);r({target:"Array",proto:!0,forced:i((function(){return!Array(1).includes()}))},{includes:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),a("includes")},4356:(e,t,n)=>{"use strict";var r=n(4209),o=n(50295),i=n(26281).indexOf,a=n(62235),u=o([].indexOf),c=!!u&&1/u([1],1,-0)<0,s=a("indexOf");r({target:"Array",proto:!0,forced:c||!s},{indexOf:function(e){var t=arguments.length>1?arguments[1]:void 0;return c?u(this,e,t)||0:i(this,e,t)}})},9229:(e,t,n)=>{n(4209)({target:"Array",stat:!0},{isArray:n(4887)})},87758:(e,t,n)=>{"use strict";var r=n(79486),o=n(16693),i=n(59451),a=n(22956),u=n(60342).f,c=n(69106),s=n(80692),l=n(8370),f="Array Iterator",p=a.set,d=a.getterFor(f);e.exports=c(Array,"Array",(function(e,t){p(this,{type:f,target:r(e),index:0,kind:t})}),(function(){var e=d(this),t=e.target,n=e.kind,r=e.index++;return!t||r>=t.length?(e.target=void 0,{value:void 0,done:!0}):"keys"==n?{value:r,done:!1}:"values"==n?{value:t[r],done:!1}:{value:[r,t[r]],done:!1}}),"values");var h=i.Arguments=i.Array;if(o("keys"),o("values"),o("entries"),!s&&l&&"values"!==h.name)try{u(h,"name",{value:"values"})}catch(e){}},72829:(e,t,n)=>{"use strict";var r=n(4209),o=n(50295),i=n(6237),a=n(79486),u=n(62235),c=o([].join),s=i!=Object,l=u("join",",");r({target:"Array",proto:!0,forced:s||!l},{join:function(e){return c(a(this),void 0===e?",":e)}})},53790:(e,t,n)=>{"use strict";var r=n(4209),o=n(7189).map;r({target:"Array",proto:!0,forced:!n(21392)("map")},{map:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}})},17918:(e,t,n)=>{"use strict";var r=n(4209),o=n(5153).left,i=n(62235),a=n(80773),u=n(15200);r({target:"Array",proto:!0,forced:!i("reduce")||!u&&a>79&&a<83},{reduce:function(e){var t=arguments.length;return o(this,e,t,t>1?arguments[1]:void 0)}})},42478:(e,t,n)=>{"use strict";var r=n(4209),o=n(50295),i=n(4887),a=o([].reverse),u=[1,2];r({target:"Array",proto:!0,forced:String(u)===String(u.reverse())},{reverse:function(){return i(this)&&(this.length=this.length),a(this)}})},72764:(e,t,n)=>{"use strict";var r=n(4209),o=n(4887),i=n(95386),a=n(21752),u=n(59470),c=n(54020),s=n(79486),l=n(48245),f=n(2905),p=n(21392),d=n(52311),h=p("slice"),y=f("species"),m=Array,v=Math.max;r({target:"Array",proto:!0,forced:!h},{slice:function(e,t){var n,r,f,p=s(this),h=c(p),g=u(e,h),b=u(void 0===t?h:t,h);if(o(p)&&(n=p.constructor,(i(n)&&(n===m||o(n.prototype))||a(n)&&null===(n=n[y]))&&(n=void 0),n===m||void 0===n))return d(p,g,b);for(r=new(void 0===n?m:n)(v(b-g,0)),f=0;g<b;g++,f++)g in p&&l(r,f,p[g]);return r.length=f,r}})},92973:(e,t,n)=>{"use strict";var r=n(4209),o=n(7189).some;r({target:"Array",proto:!0,forced:!n(62235)("some")},{some:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}})},42396:(e,t,n)=>{"use strict";var r=n(4209),o=n(50295),i=n(83089),a=n(55835),u=n(54020),c=n(91337),s=n(43974),l=n(82304),f=n(41953),p=n(62235),d=n(14855),h=n(48784),y=n(80773),m=n(25109),v=[],g=o(v.sort),b=o(v.push),w=l((function(){v.sort(void 0)})),O=l((function(){v.sort(null)})),E=p("sort"),_=!l((function(){if(y)return y<70;if(!(d&&d>3)){if(h)return!0;if(m)return m<603;var e,t,n,r,o="";for(e=65;e<76;e++){switch(t=String.fromCharCode(e),e){case 66:case 69:case 70:case 72:n=3;break;case 68:case 71:n=4;break;default:n=2}for(r=0;r<47;r++)v.push({k:t+r,v:n})}for(v.sort((function(e,t){return t.v-e.v})),r=0;r<v.length;r++)t=v[r].k.charAt(0),o.charAt(o.length-1)!==t&&(o+=t);return"DGBEFHACIJK"!==o}}));r({target:"Array",proto:!0,forced:w||!O||!E||!_},{sort:function(e){void 0!==e&&i(e);var t=a(this);if(_)return void 0===e?g(t):g(t,e);var n,r,o=[],l=u(t);for(r=0;r<l;r++)r in t&&b(o,t[r]);for(f(o,function(e){return function(t,n){return void 0===n?-1:void 0===t?1:void 0!==e?+e(t,n)||0:s(t)>s(n)?1:-1}}(e)),n=o.length,r=0;r<n;)t[r]=o[r++];for(;r<l;)c(t,r++);return t}})},78685:(e,t,n)=>{var r=n(50295),o=n(57002),i=Date.prototype,a="Invalid Date",u="toString",c=r(i.toString),s=r(i.getTime);String(new Date(NaN))!=a&&o(i,u,(function(){var e=s(this);return e==e?c(this):a}))},59201:(e,t,n)=>{var r=n(4209),o=n(68348),i=n(89664),a=n(58113),u="WebAssembly",c=o.WebAssembly,s=7!==Error("e",{cause:7}).cause,l=function(e,t){var n={};n[e]=a(e,t,s),r({global:!0,constructor:!0,arity:1,forced:s},n)},f=function(e,t){if(c&&c[e]){var n={};n[e]=a("WebAssembly."+e,t,s),r({target:u,stat:!0,constructor:!0,arity:1,forced:s},n)}};l("Error",(function(e){return function(t){return i(e,this,arguments)}})),l("EvalError",(function(e){return function(t){return i(e,this,arguments)}})),l("RangeError",(function(e){return function(t){return i(e,this,arguments)}})),l("ReferenceError",(function(e){return function(t){return i(e,this,arguments)}})),l("SyntaxError",(function(e){return function(t){return i(e,this,arguments)}})),l("TypeError",(function(e){return function(t){return i(e,this,arguments)}})),l("URIError",(function(e){return function(t){return i(e,this,arguments)}})),f("CompileError",(function(e){return function(t){return i(e,this,arguments)}})),f("LinkError",(function(e){return function(t){return i(e,this,arguments)}})),f("RuntimeError",(function(e){return function(t){return i(e,this,arguments)}}))},86781:(e,t,n)=>{var r=n(57002),o=n(90672),i=Error.prototype;i.toString!==o&&r(i,"toString",o)},82765:(e,t,n)=>{var r=n(4209),o=n(1068);r({target:"Function",proto:!0,forced:Function.bind!==o},{bind:o})},83386:(e,t,n)=>{var r=n(8370),o=n(10140).EXISTS,i=n(50295),a=n(60342).f,u=Function.prototype,c=i(u.toString),s=/function\b(?:\s|\/\*[\S\s]*?\*\/|\/\/[^\n\r]*[\n\r]+)*([^\s(/]*)/,l=i(s.exec);r&&!o&&a(u,"name",{configurable:!0,get:function(){try{return l(s,c(this))[1]}catch(e){return""}}})},80763:(e,t,n)=>{var r=n(4209),o=n(38161),i=n(89664),a=n(12364),u=n(50295),c=n(82304),s=n(4887),l=n(83907),f=n(21752),p=n(33758),d=n(52311),h=n(37201),y=o("JSON","stringify"),m=u(/./.exec),v=u("".charAt),g=u("".charCodeAt),b=u("".replace),w=u(1..toString),O=/[\uD800-\uDFFF]/g,E=/^[\uD800-\uDBFF]$/,_=/^[\uDC00-\uDFFF]$/,x=!h||c((function(){var e=o("Symbol")();return"[null]"!=y([e])||"{}"!=y({a:e})||"{}"!=y(Object(e))})),S=c((function(){return'"\\udf06\\ud834"'!==y("\udf06\ud834")||'"\\udead"'!==y("\udead")})),j=function(e,t){var n=d(arguments),r=t;if((f(t)||void 0!==e)&&!p(e))return s(t)||(t=function(e,t){if(l(r)&&(t=a(r,this,e,t)),!p(t))return t}),n[1]=t,i(y,null,n)},P=function(e,t,n){var r=v(n,t-1),o=v(n,t+1);return m(E,e)&&!m(_,o)||m(_,e)&&!m(E,r)?"\\u"+w(g(e,0),16):e};y&&r({target:"JSON",stat:!0,arity:3,forced:x||S},{stringify:function(e,t,n){var r=d(arguments),o=i(x?j:y,null,r);return S&&"string"==typeof o?b(o,O,P):o}})},22532:(e,t,n)=>{var r=n(68348);n(14036)(r.JSON,"JSON",!0)},49564:(e,t,n)=>{n(14036)(Math,"Math",!0)},26072:(e,t,n)=>{"use strict";var r=n(8370),o=n(68348),i=n(50295),a=n(82136),u=n(57002),c=n(35920),s=n(84175),l=n(18142),f=n(33758),p=n(4420),d=n(82304),h=n(13194).f,y=n(4172).f,m=n(60342).f,v=n(90364),g=n(16221).trim,b="Number",w=o.Number,O=w.prototype,E=o.TypeError,_=i("".slice),x=i("".charCodeAt),S=function(e){var t=p(e,"number");return"bigint"==typeof t?t:j(t)},j=function(e){var t,n,r,o,i,a,u,c,s=p(e,"number");if(f(s))throw E("Cannot convert a Symbol value to a number");if("string"==typeof s&&s.length>2)if(s=g(s),43===(t=x(s,0))||45===t){if(88===(n=x(s,2))||120===n)return NaN}else if(48===t){switch(x(s,1)){case 66:case 98:r=2,o=49;break;case 79:case 111:r=8,o=55;break;default:return+s}for(a=(i=_(s,2)).length,u=0;u<a;u++)if((c=x(i,u))<48||c>o)return NaN;return parseInt(i,r)}return+s};if(a(b,!w(" 0o1")||!w("0b1")||w("+0x1"))){for(var P,k=function(e){var t=arguments.length<1?0:w(S(e)),n=this;return l(O,n)&&d((function(){v(n)}))?s(Object(t),n,k):t},I=r?h(w):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,fromString,range".split(","),T=0;I.length>T;T++)c(w,P=I[T])&&!c(k,P)&&m(k,P,y(w,P));k.prototype=O,O.constructor=k,u(o,b,k,{constructor:!0})}},86833:(e,t,n)=>{n(4209)({target:"Number",stat:!0},{isInteger:n(37086)})},15661:(e,t,n)=>{n(4209)({target:"Number",stat:!0},{isNaN:function(e){return e!=e}})},70849:(e,t,n)=>{"use strict";var r=n(4209),o=n(50295),i=n(89345),a=n(90364),u=n(98816),c=n(82304),s=RangeError,l=String,f=Math.floor,p=o(u),d=o("".slice),h=o(1..toFixed),y=function(e,t,n){return 0===t?n:t%2==1?y(e,t-1,n*e):y(e*e,t/2,n)},m=function(e,t,n){for(var r=-1,o=n;++r<6;)o+=t*e[r],e[r]=o%1e7,o=f(o/1e7)},v=function(e,t){for(var n=6,r=0;--n>=0;)r+=e[n],e[n]=f(r/t),r=r%t*1e7},g=function(e){for(var t=6,n="";--t>=0;)if(""!==n||0===t||0!==e[t]){var r=l(e[t]);n=""===n?r:n+p("0",7-r.length)+r}return n};r({target:"Number",proto:!0,forced:c((function(){return"0.000"!==h(8e-5,3)||"1"!==h(.9,0)||"1.25"!==h(1.255,2)||"1000000000000000128"!==h(0xde0b6b3a7640080,0)}))||!c((function(){h({})}))},{toFixed:function(e){var t,n,r,o,u=a(this),c=i(e),f=[0,0,0,0,0,0],h="",b="0";if(c<0||c>20)throw s("Incorrect fraction digits");if(u!=u)return"NaN";if(u<=-1e21||u>=1e21)return l(u);if(u<0&&(h="-",u=-u),u>1e-21)if(n=(t=function(e){for(var t=0,n=e;n>=4096;)t+=12,n/=4096;for(;n>=2;)t+=1,n/=2;return t}(u*y(2,69,1))-69)<0?u*y(2,-t,1):u/y(2,t,1),n*=4503599627370496,(t=52-t)>0){for(m(f,0,n),r=c;r>=7;)m(f,1e7,0),r-=7;for(m(f,y(10,r,1),0),r=t-1;r>=23;)v(f,1<<23),r-=23;v(f,1<<r),m(f,1,1),v(f,2),b=g(f)}else m(f,0,n),m(f,1<<-t,0),b=g(f)+p("0",c);return b=c>0?h+((o=b.length)<=c?"0."+p("0",c-o)+b:d(b,0,o-c)+"."+d(b,o-c)):h+b}})},12578:(e,t,n)=>{var r=n(4209),o=n(70194);r({target:"Object",stat:!0,arity:2,forced:Object.assign!==o},{assign:o})},22653:(e,t,n)=>{n(4209)({target:"Object",stat:!0,sham:!n(8370)},{create:n(63513)})},12978:(e,t,n)=>{var r=n(4209),o=n(8370),i=n(81040).f;r({target:"Object",stat:!0,forced:Object.defineProperties!==i,sham:!o},{defineProperties:i})},67407:(e,t,n)=>{var r=n(4209),o=n(8370),i=n(60342).f;r({target:"Object",stat:!0,forced:Object.defineProperty!==i,sham:!o},{defineProperty:i})},99627:(e,t,n)=>{var r=n(4209),o=n(24367),i=n(82304),a=n(21752),u=n(61145).onFreeze,c=Object.freeze;r({target:"Object",stat:!0,forced:i((function(){c(1)})),sham:!o},{freeze:function(e){return c&&a(e)?c(u(e)):e}})},7283:(e,t,n)=>{var r=n(4209),o=n(82304),i=n(79486),a=n(4172).f,u=n(8370),c=o((function(){a(1)}));r({target:"Object",stat:!0,forced:!u||c,sham:!u},{getOwnPropertyDescriptor:function(e,t){return a(i(e),t)}})},75880:(e,t,n)=>{var r=n(4209),o=n(8370),i=n(81448),a=n(79486),u=n(4172),c=n(48245);r({target:"Object",stat:!0,sham:!o},{getOwnPropertyDescriptors:function(e){for(var t,n,r=a(e),o=u.f,s=i(r),l={},f=0;s.length>f;)void 0!==(n=o(r,t=s[f++]))&&c(l,t,n);return l}})},18412:(e,t,n)=>{var r=n(4209),o=n(37201),i=n(82304),a=n(19849),u=n(55835);r({target:"Object",stat:!0,forced:!o||i((function(){a.f(1)}))},{getOwnPropertySymbols:function(e){var t=a.f;return t?t(u(e)):[]}})},92792:(e,t,n)=>{var r=n(4209),o=n(82304),i=n(55835),a=n(78066),u=n(83379);r({target:"Object",stat:!0,forced:o((function(){a(1)})),sham:!u},{getPrototypeOf:function(e){return a(i(e))}})},61511:(e,t,n)=>{var r=n(4209),o=n(55835),i=n(89361);r({target:"Object",stat:!0,forced:n(82304)((function(){i(1)}))},{keys:function(e){return i(o(e))}})},88627:(e,t,n)=>{n(4209)({target:"Object",stat:!0},{setPrototypeOf:n(12398)})},99918:(e,t,n)=>{var r=n(54172),o=n(57002),i=n(51431);r||o(Object.prototype,"toString",i,{unsafe:!0})},94606:(e,t,n)=>{var r=n(4209),o=n(64307).values;r({target:"Object",stat:!0},{values:function(e){return o(e)}})},13940:(e,t,n)=>{var r=n(4209),o=n(10634);r({global:!0,forced:parseFloat!=o},{parseFloat:o})},92124:(e,t,n)=>{var r=n(4209),o=n(49268);r({global:!0,forced:parseInt!=o},{parseInt:o})},9206:(e,t,n)=>{"use strict";var r=n(4209),o=n(12364),i=n(83089),a=n(63223),u=n(88481),c=n(46386);r({target:"Promise",stat:!0,forced:n(69700)},{all:function(e){var t=this,n=a.f(t),r=n.resolve,s=n.reject,l=u((function(){var n=i(t.resolve),a=[],u=0,l=1;c(e,(function(e){var i=u++,c=!1;l++,o(n,t,e).then((function(e){c||(c=!0,a[i]=e,--l||r(a))}),s)})),--l||r(a)}));return l.error&&s(l.value),n.promise}})},5665:(e,t,n)=>{"use strict";var r=n(4209),o=n(80692),i=n(31240).CONSTRUCTOR,a=n(36576),u=n(38161),c=n(83907),s=n(57002),l=a&&a.prototype;if(r({target:"Promise",proto:!0,forced:i,real:!0},{catch:function(e){return this.then(void 0,e)}}),!o&&c(a)){var f=u("Promise").prototype.catch;l.catch!==f&&s(l,"catch",f,{unsafe:!0})}},63692:(e,t,n)=>{"use strict";var r,o,i,a=n(4209),u=n(80692),c=n(15200),s=n(68348),l=n(12364),f=n(57002),p=n(12398),d=n(14036),h=n(53207),y=n(83089),m=n(83907),v=n(21752),g=n(66992),b=n(18062),w=n(36585).set,O=n(21029),E=n(10917),_=n(88481),x=n(55149),S=n(22956),j=n(36576),P=n(31240),k=n(63223),I="Promise",T=P.CONSTRUCTOR,R=P.REJECTION_EVENT,C=P.SUBCLASSING,A=S.getterFor(I),N=S.set,L=j&&j.prototype,D=j,M=L,F=s.TypeError,U=s.document,B=s.process,H=k.f,q=H,z=!!(U&&U.createEvent&&s.dispatchEvent),G="unhandledrejection",W=function(e){var t;return!(!v(e)||!m(t=e.then))&&t},V=function(e,t){var n,r,o,i=t.value,a=1==t.state,u=a?e.ok:e.fail,c=e.resolve,s=e.reject,f=e.domain;try{u?(a||(2===t.rejection&&Q(t),t.rejection=1),!0===u?n=i:(f&&f.enter(),n=u(i),f&&(f.exit(),o=!0)),n===e.promise?s(F("Promise-chain cycle")):(r=W(n))?l(r,n,c,s):c(n)):s(i)}catch(e){f&&!o&&f.exit(),s(e)}},Y=function(e,t){e.notified||(e.notified=!0,O((function(){for(var n,r=e.reactions;n=r.get();)V(n,e);e.notified=!1,t&&!e.rejection&&$(e)})))},Z=function(e,t,n){var r,o;z?((r=U.createEvent("Event")).promise=t,r.reason=n,r.initEvent(e,!1,!0),s.dispatchEvent(r)):r={promise:t,reason:n},!R&&(o=s["on"+e])?o(r):e===G&&E("Unhandled promise rejection",n)},$=function(e){l(w,s,(function(){var t,n=e.facade,r=e.value;if(K(e)&&(t=_((function(){c?B.emit("unhandledRejection",r,n):Z(G,n,r)})),e.rejection=c||K(e)?2:1,t.error))throw t.value}))},K=function(e){return 1!==e.rejection&&!e.parent},Q=function(e){l(w,s,(function(){var t=e.facade;c?B.emit("rejectionHandled",t):Z("rejectionhandled",t,e.value)}))},X=function(e,t,n){return function(r){e(t,r,n)}},J=function(e,t,n){e.done||(e.done=!0,n&&(e=n),e.value=t,e.state=2,Y(e,!0))},ee=function(e,t,n){if(!e.done){e.done=!0,n&&(e=n);try{if(e.facade===t)throw F("Promise can't be resolved itself");var r=W(t);r?O((function(){var n={done:!1};try{l(r,t,X(ee,n,e),X(J,n,e))}catch(t){J(n,t,e)}})):(e.value=t,e.state=1,Y(e,!1))}catch(t){J({done:!1},t,e)}}};if(T&&(M=(D=function(e){g(this,M),y(e),l(r,this);var t=A(this);try{e(X(ee,t),X(J,t))}catch(e){J(t,e)}}).prototype,(r=function(e){N(this,{type:I,done:!1,notified:!1,parent:!1,reactions:new x,rejection:!1,state:0,value:void 0})}).prototype=f(M,"then",(function(e,t){var n=A(this),r=H(b(this,D));return n.parent=!0,r.ok=!m(e)||e,r.fail=m(t)&&t,r.domain=c?B.domain:void 0,0==n.state?n.reactions.add(r):O((function(){V(r,n)})),r.promise})),o=function(){var e=new r,t=A(e);this.promise=e,this.resolve=X(ee,t),this.reject=X(J,t)},k.f=H=function(e){return e===D||undefined===e?new o(e):q(e)},!u&&m(j)&&L!==Object.prototype)){i=L.then,C||f(L,"then",(function(e,t){var n=this;return new D((function(e,t){l(i,n,e,t)})).then(e,t)}),{unsafe:!0});try{delete L.constructor}catch(e){}p&&p(L,M)}a({global:!0,constructor:!0,wrap:!0,forced:T},{Promise:D}),d(D,I,!1,!0),h(I)},72145:(e,t,n)=>{n(63692),n(9206),n(5665),n(8147),n(97120),n(55754)},8147:(e,t,n)=>{"use strict";var r=n(4209),o=n(12364),i=n(83089),a=n(63223),u=n(88481),c=n(46386);r({target:"Promise",stat:!0,forced:n(69700)},{race:function(e){var t=this,n=a.f(t),r=n.reject,s=u((function(){var a=i(t.resolve);c(e,(function(e){o(a,t,e).then(n.resolve,r)}))}));return s.error&&r(s.value),n.promise}})},97120:(e,t,n)=>{"use strict";var r=n(4209),o=n(12364),i=n(63223);r({target:"Promise",stat:!0,forced:n(31240).CONSTRUCTOR},{reject:function(e){var t=i.f(this);return o(t.reject,void 0,e),t.promise}})},55754:(e,t,n)=>{"use strict";var r=n(4209),o=n(38161),i=n(80692),a=n(36576),u=n(31240).CONSTRUCTOR,c=n(26750),s=o("Promise"),l=i&&!u;r({target:"Promise",stat:!0,forced:i||u},{resolve:function(e){return c(l&&this===s?a:this,e)}})},25701:(e,t,n)=>{var r=n(4209),o=n(38161),i=n(89664),a=n(1068),u=n(31474),c=n(95665),s=n(21752),l=n(63513),f=n(82304),p=o("Reflect","construct"),d=Object.prototype,h=[].push,y=f((function(){function e(){}return!(p((function(){}),[],e)instanceof e)})),m=!f((function(){p((function(){}))})),v=y||m;r({target:"Reflect",stat:!0,forced:v,sham:v},{construct:function(e,t){u(e),c(t);var n=arguments.length<3?e:u(arguments[2]);if(m&&!y)return p(e,t,n);if(e==n){switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3])}var r=[null];return i(h,r,t),new(i(a,e,r))}var o=n.prototype,f=l(s(o)?o:d),v=i(e,f,t);return s(v)?v:f}})},98120:(e,t,n)=>{var r=n(4209),o=n(68348),i=n(14036);r({global:!0},{Reflect:{}}),i(o.Reflect,"Reflect",!0)},34591:(e,t,n)=>{var r=n(8370),o=n(68348),i=n(50295),a=n(82136),u=n(84175),c=n(54652),s=n(13194).f,l=n(18142),f=n(12810),p=n(43974),d=n(17350),h=n(7588),y=n(97487),m=n(57002),v=n(82304),g=n(35920),b=n(22956).enforce,w=n(53207),O=n(2905),E=n(53937),_=n(41085),x=O("match"),S=o.RegExp,j=S.prototype,P=o.SyntaxError,k=i(j.exec),I=i("".charAt),T=i("".replace),R=i("".indexOf),C=i("".slice),A=/^\?<[^\s\d!#%&*+<=>@^][^\s!#%&*+<=>@^]*>/,N=/a/g,L=/a/g,D=new S(N)!==N,M=h.MISSED_STICKY,F=h.UNSUPPORTED_Y,U=r&&(!D||M||E||_||v((function(){return L[x]=!1,S(N)!=N||S(L)==L||"/a/i"!=S(N,"i")})));if(a("RegExp",U)){for(var B=function(e,t){var n,r,o,i,a,s,h=l(j,this),y=f(e),m=void 0===t,v=[],w=e;if(!h&&y&&m&&e.constructor===B)return e;if((y||l(j,e))&&(e=e.source,m&&(t=d(w))),e=void 0===e?"":p(e),t=void 0===t?"":p(t),w=e,E&&"dotAll"in N&&(r=!!t&&R(t,"s")>-1)&&(t=T(t,/s/g,"")),n=t,M&&"sticky"in N&&(o=!!t&&R(t,"y")>-1)&&F&&(t=T(t,/y/g,"")),_&&(e=(i=function(e){for(var t,n=e.length,r=0,o="",i=[],a={},u=!1,c=!1,s=0,l="";r<=n;r++){if("\\"===(t=I(e,r)))t+=I(e,++r);else if("]"===t)u=!1;else if(!u)switch(!0){case"["===t:u=!0;break;case"("===t:k(A,C(e,r+1))&&(r+=2,c=!0),o+=t,s++;continue;case">"===t&&c:if(""===l||g(a,l))throw new P("Invalid capture group name");a[l]=!0,i[i.length]=[l,s],c=!1,l="";continue}c?l+=t:o+=t}return[o,i]}(e))[0],v=i[1]),a=u(S(e,t),h?this:j,B),(r||o||v.length)&&(s=b(a),r&&(s.dotAll=!0,s.raw=B(function(e){for(var t,n=e.length,r=0,o="",i=!1;r<=n;r++)"\\"!==(t=I(e,r))?i||"."!==t?("["===t?i=!0:"]"===t&&(i=!1),o+=t):o+="[\\s\\S]":o+=t+I(e,++r);return o}(e),n)),o&&(s.sticky=!0),v.length&&(s.groups=v)),e!==w)try{c(a,"source",""===w?"(?:)":w)}catch(e){}return a},H=s(S),q=0;H.length>q;)y(B,S,H[q++]);j.constructor=B,B.prototype=j,m(o,"RegExp",B,{constructor:!0})}w("RegExp")},41866:(e,t,n)=>{var r=n(8370),o=n(53937),i=n(47157),a=n(21394),u=n(22956).get,c=RegExp.prototype,s=TypeError;r&&o&&a(c,"dotAll",{configurable:!0,get:function(){if(this!==c){if("RegExp"===i(this))return!!u(this).dotAll;throw s("Incompatible receiver, RegExp required")}}})},42484:(e,t,n)=>{"use strict";var r=n(4209),o=n(64118);r({target:"RegExp",proto:!0,forced:/./.exec!==o},{exec:o})},11253:(e,t,n)=>{var r=n(8370),o=n(7588).MISSED_STICKY,i=n(47157),a=n(21394),u=n(22956).get,c=RegExp.prototype,s=TypeError;r&&o&&a(c,"sticky",{configurable:!0,get:function(){if(this!==c){if("RegExp"===i(this))return!!u(this).sticky;throw s("Incompatible receiver, RegExp required")}}})},31815:(e,t,n)=>{"use strict";n(42484);var r,o,i=n(4209),a=n(12364),u=n(50295),c=n(83907),s=n(21752),l=(r=!1,(o=/[ac]/).exec=function(){return r=!0,/./.exec.apply(this,arguments)},!0===o.test("abc")&&r),f=TypeError,p=u(/./.test);i({target:"RegExp",proto:!0,forced:!l},{test:function(e){var t=this.exec;if(!c(t))return p(this,e);var n=a(t,this,e);if(null!==n&&!s(n))throw new f("RegExp exec method returned something other than an Object or null");return!!n}})},28417:(e,t,n)=>{"use strict";var r=n(10140).PROPER,o=n(57002),i=n(95665),a=n(43974),u=n(82304),c=n(17350),s="toString",l=RegExp.prototype.toString,f=u((function(){return"/a/b"!=l.call({source:"a",flags:"b"})})),p=r&&l.name!=s;(f||p)&&o(RegExp.prototype,s,(function(){var e=i(this);return"/"+a(e.source)+"/"+a(c(e))}),{unsafe:!0})},86330:(e,t,n)=>{"use strict";n(86535)("Set",(function(e){return function(){return e(this,arguments.length?arguments[0]:void 0)}}),n(81632))},68064:(e,t,n)=>{n(86330)},48078:(e,t,n)=>{"use strict";var r,o=n(4209),i=n(50295),a=n(4172).f,u=n(36350),c=n(43974),s=n(9397),l=n(21132),f=n(33241),p=n(80692),d=i("".endsWith),h=i("".slice),y=Math.min,m=f("endsWith");o({target:"String",proto:!0,forced:!!(p||m||(r=a(String.prototype,"endsWith"),!r||r.writable))&&!m},{endsWith:function(e){var t=c(l(this));s(e);var n=arguments.length>1?arguments[1]:void 0,r=t.length,o=void 0===n?r:y(u(n),r),i=c(e);return d?d(t,i,o):h(t,o-i.length,o)===i}})},6893:(e,t,n)=>{"use strict";var r=n(4209),o=n(50295),i=n(9397),a=n(21132),u=n(43974),c=n(33241),s=o("".indexOf);r({target:"String",proto:!0,forced:!c("includes")},{includes:function(e){return!!~s(u(a(this)),u(i(e)),arguments.length>1?arguments[1]:void 0)}})},66728:(e,t,n)=>{"use strict";var r=n(42968).charAt,o=n(43974),i=n(22956),a=n(69106),u="String Iterator",c=i.set,s=i.getterFor(u);a(String,"String",(function(e){c(this,{type:u,string:o(e),index:0})}),(function(){var e,t=s(this),n=t.string,o=t.index;return o>=n.length?{value:void 0,done:!0}:(e=r(n,o),t.index+=e.length,{value:e,done:!1})}))},4941:(e,t,n)=>{"use strict";var r=n(12364),o=n(19798),i=n(95665),a=n(36350),u=n(43974),c=n(21132),s=n(37838),l=n(96281),f=n(90123);o("match",(function(e,t,n){return[function(t){var n=c(this),o=null==t?void 0:s(t,e);return o?r(o,t,n):new RegExp(t)[e](u(n))},function(e){var r=i(this),o=u(e),c=n(t,r,o);if(c.done)return c.value;if(!r.global)return f(r,o);var s=r.unicode;r.lastIndex=0;for(var p,d=[],h=0;null!==(p=f(r,o));){var y=u(p[0]);d[h]=y,""===y&&(r.lastIndex=l(o,a(r.lastIndex),s)),h++}return 0===h?null:d}]}))},71772:(e,t,n)=>{"use strict";var r=n(89664),o=n(12364),i=n(50295),a=n(19798),u=n(82304),c=n(95665),s=n(83907),l=n(89345),f=n(36350),p=n(43974),d=n(21132),h=n(96281),y=n(37838),m=n(30585),v=n(90123),g=n(2905)("replace"),b=Math.max,w=Math.min,O=i([].concat),E=i([].push),_=i("".indexOf),x=i("".slice),S="$0"==="a".replace(/./,"$0"),j=!!/./[g]&&""===/./[g]("a","$0");a("replace",(function(e,t,n){var i=j?"$":"$0";return[function(e,n){var r=d(this),i=null==e?void 0:y(e,g);return i?o(i,e,r,n):o(t,p(r),e,n)},function(e,o){var a=c(this),u=p(e);if("string"==typeof o&&-1===_(o,i)&&-1===_(o,"$<")){var d=n(t,a,u,o);if(d.done)return d.value}var y=s(o);y||(o=p(o));var g=a.global;if(g){var S=a.unicode;a.lastIndex=0}for(var j=[];;){var P=v(a,u);if(null===P)break;if(E(j,P),!g)break;""===p(P[0])&&(a.lastIndex=h(u,f(a.lastIndex),S))}for(var k,I="",T=0,R=0;R<j.length;R++){for(var C=p((P=j[R])[0]),A=b(w(l(P.index),u.length),0),N=[],L=1;L<P.length;L++)E(N,void 0===(k=P[L])?k:String(k));var D=P.groups;if(y){var M=O([C],N,A,u);void 0!==D&&E(M,D);var F=p(r(o,void 0,M))}else F=m(C,u,A,N,D,o);A>=T&&(I+=x(u,T,A)+F,T=A+C.length)}return I+x(u,T)}]}),!!u((function(){var e=/./;return e.exec=function(){var e=[];return e.groups={a:"7"},e},"7"!=="".replace(e,"$<a>")}))||!S||j)},71246:(e,t,n)=>{"use strict";var r=n(12364),o=n(19798),i=n(95665),a=n(21132),u=n(19300),c=n(43974),s=n(37838),l=n(90123);o("search",(function(e,t,n){return[function(t){var n=a(this),o=null==t?void 0:s(t,e);return o?r(o,t,n):new RegExp(t)[e](c(n))},function(e){var r=i(this),o=c(e),a=n(t,r,o);if(a.done)return a.value;var s=r.lastIndex;u(s,0)||(r.lastIndex=0);var f=l(r,o);return u(r.lastIndex,s)||(r.lastIndex=s),null===f?-1:f.index}]}))},24450:(e,t,n)=>{"use strict";var r=n(89664),o=n(12364),i=n(50295),a=n(19798),u=n(12810),c=n(95665),s=n(21132),l=n(18062),f=n(96281),p=n(36350),d=n(43974),h=n(37838),y=n(51069),m=n(90123),v=n(64118),g=n(7588),b=n(82304),w=g.UNSUPPORTED_Y,O=4294967295,E=Math.min,_=[].push,x=i(/./.exec),S=i(_),j=i("".slice);a("split",(function(e,t,n){var i;return i="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(e,n){var i=d(s(this)),a=void 0===n?O:n>>>0;if(0===a)return[];if(void 0===e)return[i];if(!u(e))return o(t,i,e,a);for(var c,l,f,p=[],h=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),m=0,g=new RegExp(e.source,h+"g");(c=o(v,g,i))&&!((l=g.lastIndex)>m&&(S(p,j(i,m,c.index)),c.length>1&&c.index<i.length&&r(_,p,y(c,1)),f=c[0].length,m=l,p.length>=a));)g.lastIndex===c.index&&g.lastIndex++;return m===i.length?!f&&x(g,"")||S(p,""):S(p,j(i,m)),p.length>a?y(p,0,a):p}:"0".split(void 0,0).length?function(e,n){return void 0===e&&0===n?[]:o(t,this,e,n)}:t,[function(t,n){var r=s(this),a=null==t?void 0:h(t,e);return a?o(a,t,r,n):o(i,d(r),t,n)},function(e,r){var o=c(this),a=d(e),u=n(i,o,a,r,i!==t);if(u.done)return u.value;var s=l(o,RegExp),h=o.unicode,y=(o.ignoreCase?"i":"")+(o.multiline?"m":"")+(o.unicode?"u":"")+(w?"g":"y"),v=new s(w?"^(?:"+o.source+")":o,y),g=void 0===r?O:r>>>0;if(0===g)return[];if(0===a.length)return null===m(v,a)?[a]:[];for(var b=0,_=0,x=[];_<a.length;){v.lastIndex=w?0:_;var P,k=m(v,w?j(a,_):a);if(null===k||(P=E(p(v.lastIndex+(w?_:0)),a.length))===b)_=f(a,_,h);else{if(S(x,j(a,b,_)),x.length===g)return x;for(var I=1;I<=k.length-1;I++)if(S(x,k[I]),x.length===g)return x;_=b=P}}return S(x,j(a,b)),x}]}),!!b((function(){var e=/(?:)/,t=e.exec;e.exec=function(){return t.apply(this,arguments)};var n="ab".split(e);return 2!==n.length||"a"!==n[0]||"b"!==n[1]})),w)},95581:(e,t,n)=>{"use strict";var r,o=n(4209),i=n(50295),a=n(4172).f,u=n(36350),c=n(43974),s=n(9397),l=n(21132),f=n(33241),p=n(80692),d=i("".startsWith),h=i("".slice),y=Math.min,m=f("startsWith");o({target:"String",proto:!0,forced:!!(p||m||(r=a(String.prototype,"startsWith"),!r||r.writable))&&!m},{startsWith:function(e){var t=c(l(this));s(e);var n=u(y(arguments.length>1?arguments[1]:void 0,t.length)),r=c(e);return d?d(t,r,n):h(t,n,n+r.length)===r}})},76047:(e,t,n)=>{"use strict";var r=n(4209),o=n(50295),i=n(21132),a=n(89345),u=n(43974),c=o("".slice),s=Math.max,l=Math.min;r({target:"String",proto:!0,forced:!"".substr||"b"!=="ab".substr(-1)},{substr:function(e,t){var n,r,o=u(i(this)),f=o.length,p=a(e);return p===1/0&&(p=0),p<0&&(p=s(f+p,0)),(n=void 0===t?f:a(t))<=0||n===1/0||p>=(r=l(p+n,f))?"":c(o,p,r)}})},38233:(e,t,n)=>{"use strict";var r=n(4209),o=n(16221).trim;r({target:"String",proto:!0,forced:n(21225)("trim")},{trim:function(){return o(this)}})},20227:(e,t,n)=>{n(87251)("asyncIterator")},29283:(e,t,n)=>{"use strict";var r=n(4209),o=n(68348),i=n(12364),a=n(50295),u=n(80692),c=n(8370),s=n(37201),l=n(82304),f=n(35920),p=n(18142),d=n(95665),h=n(79486),y=n(54089),m=n(43974),v=n(53688),g=n(63513),b=n(89361),w=n(13194),O=n(78698),E=n(19849),_=n(4172),x=n(60342),S=n(81040),j=n(12922),P=n(57002),k=n(54365),I=n(95235),T=n(19112),R=n(51339),C=n(2905),A=n(43445),N=n(87251),L=n(50205),D=n(14036),M=n(22956),F=n(7189).forEach,U=I("hidden"),B="Symbol",H=M.set,q=M.getterFor(B),z=Object.prototype,G=o.Symbol,W=G&&G.prototype,V=o.TypeError,Y=o.QObject,Z=_.f,$=x.f,K=O.f,Q=j.f,X=a([].push),J=k("symbols"),ee=k("op-symbols"),te=k("wks"),ne=!Y||!Y.prototype||!Y.prototype.findChild,re=c&&l((function(){return 7!=g($({},"a",{get:function(){return $(this,"a",{value:7}).a}})).a}))?function(e,t,n){var r=Z(z,t);r&&delete z[t],$(e,t,n),r&&e!==z&&$(z,t,r)}:$,oe=function(e,t){var n=J[e]=g(W);return H(n,{type:B,tag:e,description:t}),c||(n.description=t),n},ie=function(e,t,n){e===z&&ie(ee,t,n),d(e);var r=y(t);return d(n),f(J,r)?(n.enumerable?(f(e,U)&&e[U][r]&&(e[U][r]=!1),n=g(n,{enumerable:v(0,!1)})):(f(e,U)||$(e,U,v(1,{})),e[U][r]=!0),re(e,r,n)):$(e,r,n)},ae=function(e,t){d(e);var n=h(t),r=b(n).concat(le(n));return F(r,(function(t){c&&!i(ue,n,t)||ie(e,t,n[t])})),e},ue=function(e){var t=y(e),n=i(Q,this,t);return!(this===z&&f(J,t)&&!f(ee,t))&&(!(n||!f(this,t)||!f(J,t)||f(this,U)&&this[U][t])||n)},ce=function(e,t){var n=h(e),r=y(t);if(n!==z||!f(J,r)||f(ee,r)){var o=Z(n,r);return!o||!f(J,r)||f(n,U)&&n[U][r]||(o.enumerable=!0),o}},se=function(e){var t=K(h(e)),n=[];return F(t,(function(e){f(J,e)||f(T,e)||X(n,e)})),n},le=function(e){var t=e===z,n=K(t?ee:h(e)),r=[];return F(n,(function(e){!f(J,e)||t&&!f(z,e)||X(r,J[e])})),r};s||(P(W=(G=function(){if(p(W,this))throw V("Symbol is not a constructor");var e=arguments.length&&void 0!==arguments[0]?m(arguments[0]):void 0,t=R(e),n=function(e){this===z&&i(n,ee,e),f(this,U)&&f(this[U],t)&&(this[U][t]=!1),re(this,t,v(1,e))};return c&&ne&&re(z,t,{configurable:!0,set:n}),oe(t,e)}).prototype,"toString",(function(){return q(this).tag})),P(G,"withoutSetter",(function(e){return oe(R(e),e)})),j.f=ue,x.f=ie,S.f=ae,_.f=ce,w.f=O.f=se,E.f=le,A.f=function(e){return oe(C(e),e)},c&&($(W,"description",{configurable:!0,get:function(){return q(this).description}}),u||P(z,"propertyIsEnumerable",ue,{unsafe:!0}))),r({global:!0,constructor:!0,wrap:!0,forced:!s,sham:!s},{Symbol:G}),F(b(te),(function(e){N(e)})),r({target:B,stat:!0,forced:!s},{useSetter:function(){ne=!0},useSimple:function(){ne=!1}}),r({target:"Object",stat:!0,forced:!s,sham:!c},{create:function(e,t){return void 0===t?g(e):ae(g(e),t)},defineProperty:ie,defineProperties:ae,getOwnPropertyDescriptor:ce}),r({target:"Object",stat:!0,forced:!s},{getOwnPropertyNames:se}),L(),D(G,B),T[U]=!0},38957:(e,t,n)=>{"use strict";var r=n(4209),o=n(8370),i=n(68348),a=n(50295),u=n(35920),c=n(83907),s=n(18142),l=n(43974),f=n(60342).f,p=n(37349),d=i.Symbol,h=d&&d.prototype;if(o&&c(d)&&(!("description"in h)||void 0!==d().description)){var y={},m=function(){var e=arguments.length<1||void 0===arguments[0]?void 0:l(arguments[0]),t=s(h,this)?new d(e):void 0===e?d():d(e);return""===e&&(y[t]=!0),t};p(m,d),m.prototype=h,h.constructor=m;var v="Symbol(test)"==String(d("test")),g=a(h.toString),b=a(h.valueOf),w=/^Symbol\((.*)\)[^)]+$/,O=a("".replace),E=a("".slice);f(h,"description",{configurable:!0,get:function(){var e=b(this),t=g(e);if(u(y,e))return"";var n=v?E(t,7,-1):O(t,w,"$1");return""===n?void 0:n}}),r({global:!0,constructor:!0,forced:!0},{Symbol:m})}},48959:(e,t,n)=>{var r=n(4209),o=n(38161),i=n(35920),a=n(43974),u=n(54365),c=n(75698),s=u("string-to-symbol-registry"),l=u("symbol-to-string-registry");r({target:"Symbol",stat:!0,forced:!c},{for:function(e){var t=a(e);if(i(s,t))return s[t];var n=o("Symbol")(t);return s[t]=n,l[n]=t,n}})},51913:(e,t,n)=>{n(87251)("iterator")},79249:(e,t,n)=>{n(29283),n(48959),n(6935),n(80763),n(18412)},6935:(e,t,n)=>{var r=n(4209),o=n(35920),i=n(33758),a=n(89075),u=n(54365),c=n(75698),s=u("symbol-to-string-registry");r({target:"Symbol",stat:!0,forced:!c},{keyFor:function(e){if(!i(e))throw TypeError(a(e)+" is not a symbol");if(o(s,e))return s[e]}})},21094:(e,t,n)=>{var r=n(38161),o=n(87251),i=n(14036);o("toStringTag"),i(r("Symbol"),"Symbol")},9536:(e,t,n)=>{var r=n(68348),o=n(6917),i=n(4152),a=n(66469),u=n(54652),c=function(e){if(e&&e.forEach!==a)try{u(e,"forEach",a)}catch(t){e.forEach=a}};for(var s in o)o[s]&&c(r[s]&&r[s].prototype);c(i)},53689:(e,t,n)=>{var r=n(68348),o=n(6917),i=n(4152),a=n(87758),u=n(54652),c=n(2905),s=c("iterator"),l=c("toStringTag"),f=a.values,p=function(e,t){if(e){if(e[s]!==f)try{u(e,s,f)}catch(t){e[s]=f}if(e[l]||u(e,l,t),o[t])for(var n in a)if(e[n]!==a[n])try{u(e,n,a[n])}catch(t){e[n]=a[n]}}};for(var d in o)p(r[d]&&r[d].prototype,d);p(i,"DOMTokenList")},59694:(e,t,n)=>{var r=n(4209),o=n(68348),i=n(65387).setInterval;r({global:!0,bind:!0,forced:o.setInterval!==i},{setInterval:i})},14187:(e,t,n)=>{var r=n(4209),o=n(68348),i=n(65387).setTimeout;r({global:!0,bind:!0,forced:o.setTimeout!==i},{setTimeout:i})},99385:(e,t,n)=>{n(59694),n(14187)},12569:(e,t,n)=>{"use strict";var r=n(23205);function o(){this._key="chai/deep-eql__"+Math.random()+Date.now()}o.prototype={get:function(e){return e[this._key]},set:function(e,t){Object.isExtensible(e)&&Object.defineProperty(e,this._key,{value:t,configurable:!0})}};var i="function"==typeof WeakMap?WeakMap:o;function a(e,t,n){if(!n||g(e)||g(t))return null;var r=n.get(e);if(r){var o=r.get(t);if("boolean"==typeof o)return o}return null}function u(e,t,n,r){if(n&&!g(e)&&!g(t)){var o=n.get(e);o?o.set(t,r):((o=new i).set(t,r),n.set(e,o))}}function c(e,t,n){if(n&&n.comparator)return l(e,t,n);var r=s(e,t);return null!==r?r:l(e,t,n)}function s(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t||!g(e)&&!g(t)&&null}function l(e,t,n){(n=n||{}).memoize=!1!==n.memoize&&(n.memoize||new i);var o=n&&n.comparator,l=a(e,t,n.memoize);if(null!==l)return l;var g=a(t,e,n.memoize);if(null!==g)return g;if(o){var b=o(e,t);if(!1===b||!0===b)return u(e,t,n.memoize,b),b;var w=s(e,t);if(null!==w)return w}var O=r(e);if(O!==r(t))return u(e,t,n.memoize,!1),!1;u(e,t,n.memoize,!0);var E=function(e,t,n,r){switch(n){case"String":case"Number":case"Boolean":case"Date":return c(e.valueOf(),t.valueOf());case"Promise":case"Symbol":case"function":case"WeakMap":case"WeakSet":return e===t;case"Error":return v(e,t,["name","message","code"],r);case"Arguments":case"Int8Array":case"Uint8Array":case"Uint8ClampedArray":case"Int16Array":case"Uint16Array":case"Int32Array":case"Uint32Array":case"Float32Array":case"Float64Array":case"Array":return p(e,t,r);case"RegExp":return function(e,t){return e.toString()===t.toString()}(e,t);case"Generator":return function(e,t,n){return p(h(e),h(t),n)}(e,t,r);case"DataView":return p(new Uint8Array(e.buffer),new Uint8Array(t.buffer),r);case"ArrayBuffer":return p(new Uint8Array(e),new Uint8Array(t),r);case"Set":case"Map":return f(e,t,r);default:return function(e,t,n){var r=y(e),o=y(t),i=m(e),a=m(t);i&&(r=r.concat(i));a&&(o=o.concat(a));if(r.length&&r.length===o.length)return r.sort(),o.sort(),!1!==p(r,o)&&v(e,t,r,n);var u=d(e),c=d(t);if(u.length&&u.length===c.length)return u.sort(),c.sort(),p(u,c,n);if(0===r.length&&0===u.length&&0===o.length&&0===c.length)return!0;return!1}(e,t,r)}}(e,t,O,n);return u(e,t,n.memoize,E),E}function f(e,t,n){if(e.size!==t.size)return!1;if(0===e.size)return!0;var r=[],o=[];return e.forEach((function(e,t){r.push([e,t])})),t.forEach((function(e,t){o.push([e,t])})),p(r.sort(),o.sort(),n)}function p(e,t,n){var r=e.length;if(r!==t.length)return!1;if(0===r)return!0;for(var o=-1;++o<r;)if(!1===c(e[o],t[o],n))return!1;return!0}function d(e){if(function(e){return"undefined"!=typeof Symbol&&"object"==typeof e&&void 0!==Symbol.iterator&&"function"==typeof e[Symbol.iterator]}(e))try{return h(e[Symbol.iterator]())}catch(e){return[]}return[]}function h(e){for(var t=e.next(),n=[t.value];!1===t.done;)t=e.next(),n.push(t.value);return n}function y(e){var t=[];for(var n in e)t.push(n);return t}function m(e){return Object.getOwnPropertySymbols(e)}function v(e,t,n,r){var o=n.length;if(0===o)return!0;for(var i=0;i<o;i+=1)if(!1===c(e[n[i]],t[n[i]],r))return!1;return!0}function g(e){return null===e||"object"!=typeof e}e.exports=c,e.exports.MemoizeMap=i},49394:function(e,t,n){e.exports=function(){"use strict";var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:"undefined"!=typeof self?self:{};function t(e,t){return e(t={exports:{}},t.exports),t.exports}var r=t((function(t,n){!function(e,n){t.exports=n()}(0,(function(){var t="function"==typeof Promise,n="object"==typeof self?self:e,r="undefined"!=typeof Symbol,o="undefined"!=typeof Map,i="undefined"!=typeof Set,a="undefined"!=typeof WeakMap,u="undefined"!=typeof WeakSet,c="undefined"!=typeof DataView,s=r&&void 0!==Symbol.iterator,l=r&&void 0!==Symbol.toStringTag,f=i&&"function"==typeof Set.prototype.entries,p=o&&"function"==typeof Map.prototype.entries,d=f&&Object.getPrototypeOf((new Set).entries()),h=p&&Object.getPrototypeOf((new Map).entries()),y=s&&"function"==typeof Array.prototype[Symbol.iterator],m=y&&Object.getPrototypeOf([][Symbol.iterator]()),v=s&&"function"==typeof String.prototype[Symbol.iterator],g=v&&Object.getPrototypeOf(""[Symbol.iterator]()),b=8,w=-1;function O(e){var r=typeof e;if("object"!==r)return r;if(null===e)return"null";if(e===n)return"global";if(Array.isArray(e)&&(!1===l||!(Symbol.toStringTag in e)))return"Array";if("object"==typeof window&&null!==window){if("object"==typeof window.location&&e===window.location)return"Location";if("object"==typeof window.document&&e===window.document)return"Document";if("object"==typeof window.navigator){if("object"==typeof window.navigator.mimeTypes&&e===window.navigator.mimeTypes)return"MimeTypeArray";if("object"==typeof window.navigator.plugins&&e===window.navigator.plugins)return"PluginArray"}if(("function"==typeof window.HTMLElement||"object"==typeof window.HTMLElement)&&e instanceof window.HTMLElement){if("BLOCKQUOTE"===e.tagName)return"HTMLQuoteElement";if("TD"===e.tagName)return"HTMLTableDataCellElement";if("TH"===e.tagName)return"HTMLTableHeaderCellElement"}}var s=l&&e[Symbol.toStringTag];if("string"==typeof s)return s;var f=Object.getPrototypeOf(e);return f===RegExp.prototype?"RegExp":f===Date.prototype?"Date":t&&f===Promise.prototype?"Promise":i&&f===Set.prototype?"Set":o&&f===Map.prototype?"Map":u&&f===WeakSet.prototype?"WeakSet":a&&f===WeakMap.prototype?"WeakMap":c&&f===DataView.prototype?"DataView":o&&f===h?"Map Iterator":i&&f===d?"Set Iterator":y&&f===m?"Array Iterator":v&&f===g?"String Iterator":null===f?"Object":Object.prototype.toString.call(e).slice(b,w)}return O}))}));const o="undefined"!=typeof Buffer,i=o&&void 0!==Buffer.from,a=o?function(e){return Buffer.isBuffer(e)}:function(){return!1},u=i?function(e){return Buffer.from(e)}:o?function(e){return new Buffer(e)}:function(e){return e};function c(e){return a(e)?"Buffer":r(e)}const s=new Set(["Arguments","Array","Map","Object","Set"]);function l(e,t,n=null){switch(n||c(e)){case"Arguments":case"Array":case"Object":return e[t];case"Map":return e.get(t);case"Set":return t}}function f(e){return s.has(e)}function p(e,t,n,r=null){switch(r||c(e)){case"Arguments":case"Array":case"Object":e[t]=n;break;case"Map":e.set(t,n);break;case"Set":e.add(n)}return e}const d="undefined"!=typeof globalThis&&null!==globalThis&&globalThis.Object===Object&&globalThis,h=void 0!==n.g&&null!==n.g&&n.g.Object===Object&&n.g,y="undefined"!=typeof self&&null!==self&&self.Object===Object&&self,m=d||h||y||Function("return this")();function v(e){return e.slice(0)}function g(e){return new Boolean(e.valueOf())}function b(e){return new DataView(e.buffer)}function w(e){return u(e)}function O(e){return new Date(e.getTime())}function E(e){return new Number(e)}function _(e){return new RegExp(e.source,e.flags)}function x(e){return new String(e)}function S(e,t){return m[t].from?m[t].from(e):new m[t](e)}function j(e){return e}function P(){return[]}function k(){return new Map}function I(){return{}}function T(){return new Set}var R=new Map([["ArrayBuffer",v],["Boolean",g],["Buffer",w],["DataView",b],["Date",O],["Number",E],["RegExp",_],["String",x],["Float32Array",S],["Float64Array",S],["Int16Array",S],["Int32Array",S],["Int8Array",S],["Uint16Array",S],["Uint32Array",S],["Uint8Array",S],["Uint8ClampedArray",S],["Array Iterator",j],["Map Iterator",j],["Promise",j],["Set Iterator",j],["String Iterator",j],["function",j],["global",j],["WeakMap",j],["WeakSet",j],["boolean",j],["null",j],["number",j],["string",j],["symbol",j],["undefined",j],["Arguments",P],["Array",P],["Map",k],["Object",I],["Set",T]]);function C(){}function A(e,t=null,n=C){2===arguments.length&&"function"==typeof t&&(n=t,t=null);const r=t||c(e),o=R.get(r);if("Object"===r){const t=n(e,r);if(void 0!==t)return t}return o?o(e,r):e}function N(e,t={}){"function"==typeof t&&(t={customizer:t});const{customizer:n}=t,r=c(e);if(!f(r))return L(e,null,null,null);const o=A(e,r,n);return L(e,o,new WeakMap([[e,o]]),new WeakSet([e]))}function L(e,t,n,r,o){const i=c(e),a=A(e,i);if(!f(i))return a;let u;switch(i){case"Arguments":case"Array":u=Object.keys(e);break;case"Object":u=Object.keys(e),u.push(...Object.getOwnPropertySymbols(e));break;case"Map":case"Set":u=e.keys()}for(let o of u){const a=l(e,o,i);if(r.has(a))p(t,o,n.get(a),i);else{const e=c(a),u=A(a,e);f(e)&&(n.set(a,u),r.add(a)),p(t,o,L(a,u,n,r),i)}}return t}return N}()},44683:function(e){e.exports=function(){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(t)}function t(e,n){return(t=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,n)}function n(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}function r(e,o,i){return(r=n()?Reflect.construct:function(e,n,r){var o=[null];o.push.apply(o,n);var i=new(Function.bind.apply(e,o));return r&&t(i,r.prototype),i}).apply(null,arguments)}function o(e){return i(e)||a(e)||u(e)||s()}function i(e){if(Array.isArray(e))return c(e)}function a(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}function u(e,t){if(e){if("string"==typeof e)return c(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?c(e,t):void 0}}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function s(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var l=Object.hasOwnProperty,f=Object.setPrototypeOf,p=Object.isFrozen,d=Object.getPrototypeOf,h=Object.getOwnPropertyDescriptor,y=Object.freeze,m=Object.seal,v=Object.create,g="undefined"!=typeof Reflect&&Reflect,b=g.apply,w=g.construct;b||(b=function(e,t,n){return e.apply(t,n)}),y||(y=function(e){return e}),m||(m=function(e){return e}),w||(w=function(e,t){return r(e,o(t))});var O=R(Array.prototype.forEach),E=R(Array.prototype.pop),_=R(Array.prototype.push),x=R(String.prototype.toLowerCase),S=R(String.prototype.match),j=R(String.prototype.replace),P=R(String.prototype.indexOf),k=R(String.prototype.trim),I=R(RegExp.prototype.test),T=C(TypeError);function R(e){return function(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];return b(e,t,r)}}function C(e){return function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return w(e,n)}}function A(e,t){f&&f(e,null);for(var n=t.length;n--;){var r=t[n];if("string"==typeof r){var o=x(r);o!==r&&(p(t)||(t[n]=o),r=o)}e[r]=!0}return e}function N(e){var t,n=v(null);for(t in e)b(l,e,[t])&&(n[t]=e[t]);return n}function L(e,t){for(;null!==e;){var n=h(e,t);if(n){if(n.get)return R(n.get);if("function"==typeof n.value)return R(n.value)}e=d(e)}function r(e){return null}return r}var D=y(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),M=y(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),F=y(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),U=y(["animate","color-profile","cursor","discard","fedropshadow","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),B=y(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover"]),H=y(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),q=y(["#text"]),z=y(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","xmlns","slot"]),G=y(["accent-height","accumulate","additive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),W=y(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),V=y(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),Y=m(/\{\{[\w\W]*|[\w\W]*\}\}/gm),Z=m(/<%[\w\W]*|[\w\W]*%>/gm),$=m(/^data-[\-\w.\u00B7-\uFFFF]/),K=m(/^aria-[\-\w]+$/),Q=m(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),X=m(/^(?:\w+script|data):/i),J=m(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),ee=m(/^html$/i),te=function(){return"undefined"==typeof window?null:window},ne=function(t,n){if("object"!==e(t)||"function"!=typeof t.createPolicy)return null;var r=null,o="data-tt-policy-suffix";n.currentScript&&n.currentScript.hasAttribute(o)&&(r=n.currentScript.getAttribute(o));var i="dompurify"+(r?"#"+r:"");try{return t.createPolicy(i,{createHTML:function(e){return e}})}catch(e){return null}};function re(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:te(),n=function(e){return re(e)};if(n.version="2.3.8",n.removed=[],!t||!t.document||9!==t.document.nodeType)return n.isSupported=!1,n;var r=t.document,i=t.document,a=t.DocumentFragment,u=t.HTMLTemplateElement,c=t.Node,s=t.Element,l=t.NodeFilter,f=t.NamedNodeMap,p=void 0===f?t.NamedNodeMap||t.MozNamedAttrMap:f,d=t.HTMLFormElement,h=t.DOMParser,m=t.trustedTypes,v=s.prototype,g=L(v,"cloneNode"),b=L(v,"nextSibling"),w=L(v,"childNodes"),R=L(v,"parentNode");if("function"==typeof u){var C=i.createElement("template");C.content&&C.content.ownerDocument&&(i=C.content.ownerDocument)}var oe=ne(m,r),ie=oe?oe.createHTML(""):"",ae=i,ue=ae.implementation,ce=ae.createNodeIterator,se=ae.createDocumentFragment,le=ae.getElementsByTagName,fe=r.importNode,pe={};try{pe=N(i).documentMode?i.documentMode:{}}catch(e){}var de={};n.isSupported="function"==typeof R&&ue&&void 0!==ue.createHTMLDocument&&9!==pe;var he,ye,me=Y,ve=Z,ge=$,be=K,we=X,Oe=J,Ee=Q,_e=null,xe=A({},[].concat(o(D),o(M),o(F),o(B),o(q))),Se=null,je=A({},[].concat(o(z),o(G),o(W),o(V))),Pe=Object.seal(Object.create(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),ke=null,Ie=null,Te=!0,Re=!0,Ce=!1,Ae=!1,Ne=!1,Le=!1,De=!1,Me=!1,Fe=!1,Ue=!1,Be=!0,He=!0,qe=!1,ze={},Ge=null,We=A({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),Ve=null,Ye=A({},["audio","video","img","source","image","track"]),Ze=null,$e=A({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Ke="http://www.w3.org/1998/Math/MathML",Qe="http://www.w3.org/2000/svg",Xe="http://www.w3.org/1999/xhtml",Je=Xe,et=!1,tt=["application/xhtml+xml","text/html"],nt="text/html",rt=null,ot=i.createElement("form"),it=function(e){return e instanceof RegExp||e instanceof Function},at=function(t){rt&&rt===t||(t&&"object"===e(t)||(t={}),t=N(t),_e="ALLOWED_TAGS"in t?A({},t.ALLOWED_TAGS):xe,Se="ALLOWED_ATTR"in t?A({},t.ALLOWED_ATTR):je,Ze="ADD_URI_SAFE_ATTR"in t?A(N($e),t.ADD_URI_SAFE_ATTR):$e,Ve="ADD_DATA_URI_TAGS"in t?A(N(Ye),t.ADD_DATA_URI_TAGS):Ye,Ge="FORBID_CONTENTS"in t?A({},t.FORBID_CONTENTS):We,ke="FORBID_TAGS"in t?A({},t.FORBID_TAGS):{},Ie="FORBID_ATTR"in t?A({},t.FORBID_ATTR):{},ze="USE_PROFILES"in t&&t.USE_PROFILES,Te=!1!==t.ALLOW_ARIA_ATTR,Re=!1!==t.ALLOW_DATA_ATTR,Ce=t.ALLOW_UNKNOWN_PROTOCOLS||!1,Ae=t.SAFE_FOR_TEMPLATES||!1,Ne=t.WHOLE_DOCUMENT||!1,Me=t.RETURN_DOM||!1,Fe=t.RETURN_DOM_FRAGMENT||!1,Ue=t.RETURN_TRUSTED_TYPE||!1,De=t.FORCE_BODY||!1,Be=!1!==t.SANITIZE_DOM,He=!1!==t.KEEP_CONTENT,qe=t.IN_PLACE||!1,Ee=t.ALLOWED_URI_REGEXP||Ee,Je=t.NAMESPACE||Xe,t.CUSTOM_ELEMENT_HANDLING&&it(t.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(Pe.tagNameCheck=t.CUSTOM_ELEMENT_HANDLING.tagNameCheck),t.CUSTOM_ELEMENT_HANDLING&&it(t.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(Pe.attributeNameCheck=t.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),t.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof t.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(Pe.allowCustomizedBuiltInElements=t.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),he=he=-1===tt.indexOf(t.PARSER_MEDIA_TYPE)?nt:t.PARSER_MEDIA_TYPE,ye="application/xhtml+xml"===he?function(e){return e}:x,Ae&&(Re=!1),Fe&&(Me=!0),ze&&(_e=A({},o(q)),Se=[],!0===ze.html&&(A(_e,D),A(Se,z)),!0===ze.svg&&(A(_e,M),A(Se,G),A(Se,V)),!0===ze.svgFilters&&(A(_e,F),A(Se,G),A(Se,V)),!0===ze.mathMl&&(A(_e,B),A(Se,W),A(Se,V))),t.ADD_TAGS&&(_e===xe&&(_e=N(_e)),A(_e,t.ADD_TAGS)),t.ADD_ATTR&&(Se===je&&(Se=N(Se)),A(Se,t.ADD_ATTR)),t.ADD_URI_SAFE_ATTR&&A(Ze,t.ADD_URI_SAFE_ATTR),t.FORBID_CONTENTS&&(Ge===We&&(Ge=N(Ge)),A(Ge,t.FORBID_CONTENTS)),He&&(_e["#text"]=!0),Ne&&A(_e,["html","head","body"]),_e.table&&(A(_e,["tbody"]),delete ke.tbody),y&&y(t),rt=t)},ut=A({},["mi","mo","mn","ms","mtext"]),ct=A({},["foreignobject","desc","title","annotation-xml"]),st=A({},["title","style","font","a","script"]),lt=A({},M);A(lt,F),A(lt,U);var ft=A({},B);A(ft,H);var pt=function(e){var t=R(e);t&&t.tagName||(t={namespaceURI:Xe,tagName:"template"});var n=x(e.tagName),r=x(t.tagName);return e.namespaceURI===Qe?t.namespaceURI===Xe?"svg"===n:t.namespaceURI===Ke?"svg"===n&&("annotation-xml"===r||ut[r]):Boolean(lt[n]):e.namespaceURI===Ke?t.namespaceURI===Xe?"math"===n:t.namespaceURI===Qe?"math"===n&&ct[r]:Boolean(ft[n]):e.namespaceURI===Xe&&!(t.namespaceURI===Qe&&!ct[r])&&!(t.namespaceURI===Ke&&!ut[r])&&!ft[n]&&(st[n]||!lt[n])},dt=function(e){_(n.removed,{element:e});try{e.parentNode.removeChild(e)}catch(t){try{e.outerHTML=ie}catch(t){e.remove()}}},ht=function(e,t){try{_(n.removed,{attribute:t.getAttributeNode(e),from:t})}catch(e){_(n.removed,{attribute:null,from:t})}if(t.removeAttribute(e),"is"===e&&!Se[e])if(Me||Fe)try{dt(t)}catch(e){}else try{t.setAttribute(e,"")}catch(e){}},yt=function(e){var t,n;if(De)e="<remove></remove>"+e;else{var r=S(e,/^[\r\n\t ]+/);n=r&&r[0]}"application/xhtml+xml"===he&&(e='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+e+"</body></html>");var o=oe?oe.createHTML(e):e;if(Je===Xe)try{t=(new h).parseFromString(o,he)}catch(e){}if(!t||!t.documentElement){t=ue.createDocument(Je,"template",null);try{t.documentElement.innerHTML=et?"":o}catch(e){}}var a=t.body||t.documentElement;return e&&n&&a.insertBefore(i.createTextNode(n),a.childNodes[0]||null),Je===Xe?le.call(t,Ne?"html":"body")[0]:Ne?t.documentElement:a},mt=function(e){return ce.call(e.ownerDocument||e,e,l.SHOW_ELEMENT|l.SHOW_COMMENT|l.SHOW_TEXT,null,!1)},vt=function(e){return e instanceof d&&("string"!=typeof e.nodeName||"string"!=typeof e.textContent||"function"!=typeof e.removeChild||!(e.attributes instanceof p)||"function"!=typeof e.removeAttribute||"function"!=typeof e.setAttribute||"string"!=typeof e.namespaceURI||"function"!=typeof e.insertBefore)},gt=function(t){return"object"===e(c)?t instanceof c:t&&"object"===e(t)&&"number"==typeof t.nodeType&&"string"==typeof t.nodeName},bt=function(e,t,r){de[e]&&O(de[e],(function(e){e.call(n,t,r,rt)}))},wt=function(e){var t;if(bt("beforeSanitizeElements",e,null),vt(e))return dt(e),!0;if(I(/[\u0080-\uFFFF]/,e.nodeName))return dt(e),!0;var r=ye(e.nodeName);if(bt("uponSanitizeElement",e,{tagName:r,allowedTags:_e}),e.hasChildNodes()&&!gt(e.firstElementChild)&&(!gt(e.content)||!gt(e.content.firstElementChild))&&I(/<[/\w]/g,e.innerHTML)&&I(/<[/\w]/g,e.textContent))return dt(e),!0;if("select"===r&&I(/<template/i,e.innerHTML))return dt(e),!0;if(!_e[r]||ke[r]){if(!ke[r]&&Et(r)){if(Pe.tagNameCheck instanceof RegExp&&I(Pe.tagNameCheck,r))return!1;if(Pe.tagNameCheck instanceof Function&&Pe.tagNameCheck(r))return!1}if(He&&!Ge[r]){var o=R(e)||e.parentNode,i=w(e)||e.childNodes;if(i&&o)for(var a=i.length-1;a>=0;--a)o.insertBefore(g(i[a],!0),b(e))}return dt(e),!0}return e instanceof s&&!pt(e)?(dt(e),!0):"noscript"!==r&&"noembed"!==r||!I(/<\/no(script|embed)/i,e.innerHTML)?(Ae&&3===e.nodeType&&(t=e.textContent,t=j(t,me," "),t=j(t,ve," "),e.textContent!==t&&(_(n.removed,{element:e.cloneNode()}),e.textContent=t)),bt("afterSanitizeElements",e,null),!1):(dt(e),!0)},Ot=function(e,t,n){if(Be&&("id"===t||"name"===t)&&(n in i||n in ot))return!1;if(Re&&!Ie[t]&&I(ge,t));else if(Te&&I(be,t));else if(!Se[t]||Ie[t]){if(!(Et(e)&&(Pe.tagNameCheck instanceof RegExp&&I(Pe.tagNameCheck,e)||Pe.tagNameCheck instanceof Function&&Pe.tagNameCheck(e))&&(Pe.attributeNameCheck instanceof RegExp&&I(Pe.attributeNameCheck,t)||Pe.attributeNameCheck instanceof Function&&Pe.attributeNameCheck(t))||"is"===t&&Pe.allowCustomizedBuiltInElements&&(Pe.tagNameCheck instanceof RegExp&&I(Pe.tagNameCheck,n)||Pe.tagNameCheck instanceof Function&&Pe.tagNameCheck(n))))return!1}else if(Ze[t]);else if(I(Ee,j(n,Oe,"")));else if("src"!==t&&"xlink:href"!==t&&"href"!==t||"script"===e||0!==P(n,"data:")||!Ve[e])if(Ce&&!I(we,j(n,Oe,"")));else if(n)return!1;return!0},Et=function(e){return e.indexOf("-")>0},_t=function(e){var t,r,o,i;bt("beforeSanitizeAttributes",e,null);var a=e.attributes;if(a){var u={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:Se};for(i=a.length;i--;){var c=t=a[i],s=c.name,l=c.namespaceURI;if(r="value"===s?t.value:k(t.value),o=ye(s),u.attrName=o,u.attrValue=r,u.keepAttr=!0,u.forceKeepAttr=void 0,bt("uponSanitizeAttribute",e,u),r=u.attrValue,!u.forceKeepAttr&&(ht(s,e),u.keepAttr))if(I(/\/>/i,r))ht(s,e);else{Ae&&(r=j(r,me," "),r=j(r,ve," "));var f=ye(e.nodeName);if(Ot(f,o,r))try{l?e.setAttributeNS(l,s,r):e.setAttribute(s,r),E(n.removed)}catch(e){}}}bt("afterSanitizeAttributes",e,null)}},xt=function e(t){var n,r=mt(t);for(bt("beforeSanitizeShadowDOM",t,null);n=r.nextNode();)bt("uponSanitizeShadowNode",n,null),wt(n)||(n.content instanceof a&&e(n.content),_t(n));bt("afterSanitizeShadowDOM",t,null)};return n.sanitize=function(o,i){var u,s,l,f,p;if((et=!o)&&(o="\x3c!--\x3e"),"string"!=typeof o&&!gt(o)){if("function"!=typeof o.toString)throw T("toString is not a function");if("string"!=typeof(o=o.toString()))throw T("dirty is not a string, aborting")}if(!n.isSupported){if("object"===e(t.toStaticHTML)||"function"==typeof t.toStaticHTML){if("string"==typeof o)return t.toStaticHTML(o);if(gt(o))return t.toStaticHTML(o.outerHTML)}return o}if(Le||at(i),n.removed=[],"string"==typeof o&&(qe=!1),qe){if(o.nodeName){var d=ye(o.nodeName);if(!_e[d]||ke[d])throw T("root node is forbidden and cannot be sanitized in-place")}}else if(o instanceof c)1===(s=(u=yt("\x3c!----\x3e")).ownerDocument.importNode(o,!0)).nodeType&&"BODY"===s.nodeName||"HTML"===s.nodeName?u=s:u.appendChild(s);else{if(!Me&&!Ae&&!Ne&&-1===o.indexOf("<"))return oe&&Ue?oe.createHTML(o):o;if(!(u=yt(o)))return Me?null:Ue?ie:""}u&&De&&dt(u.firstChild);for(var h=mt(qe?o:u);l=h.nextNode();)3===l.nodeType&&l===f||wt(l)||(l.content instanceof a&&xt(l.content),_t(l),f=l);if(f=null,qe)return o;if(Me){if(Fe)for(p=se.call(u.ownerDocument);u.firstChild;)p.appendChild(u.firstChild);else p=u;return Se.shadowroot&&(p=fe.call(r,p,!0)),p}var y=Ne?u.outerHTML:u.innerHTML;return Ne&&_e["!doctype"]&&u.ownerDocument&&u.ownerDocument.doctype&&u.ownerDocument.doctype.name&&I(ee,u.ownerDocument.doctype.name)&&(y="<!DOCTYPE "+u.ownerDocument.doctype.name+">\n"+y),Ae&&(y=j(y,me," "),y=j(y,ve," ")),oe&&Ue?oe.createHTML(y):y},n.setConfig=function(e){at(e),Le=!0},n.clearConfig=function(){rt=null,Le=!1},n.isValidAttribute=function(e,t,n){rt||at({});var r=ye(e),o=ye(t);return Ot(r,o,n)},n.addHook=function(e,t){"function"==typeof t&&(de[e]=de[e]||[],_(de[e],t))},n.removeHook=function(e){if(de[e])return E(de[e])},n.removeHooks=function(e){de[e]&&(de[e]=[])},n.removeAllHooks=function(){de={}},n}return re()}()},97925:e=>{e.exports={middleware:function(e,t,n){throw new Error("`middleware` cannot be called from the browser code.")},get:function(){return null},set:function(e,t){},ns:null}},67683:function(e){e.exports=function(){"use strict";var e=/^(b|B)$/,t={iec:{bits:["bit","Kibit","Mibit","Gibit","Tibit","Pibit","Eibit","Zibit","Yibit"],bytes:["B","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"]},jedec:{bits:["bit","Kbit","Mbit","Gbit","Tbit","Pbit","Ebit","Zbit","Ybit"],bytes:["B","KB","MB","GB","TB","PB","EB","ZB","YB"]}},n={iec:["","kibi","mebi","gibi","tebi","pebi","exbi","zebi","yobi"],jedec:["","kilo","mega","giga","tera","peta","exa","zetta","yotta"]},r={floor:Math.floor,ceil:Math.ceil};function o(o){var i,a,u,c,s,l,f,p,d,h,y,m,v,g,b,w,O,E,_,x,S,j=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},P=[],k=0;if(isNaN(o))throw new TypeError("Invalid number");if(u=!0===j.bits,b=!0===j.unix,m=!0===j.pad,a=j.base||10,v=void 0!==j.round?j.round:b?1:2,f=void 0!==j.locale?j.locale:"",p=j.localeOptions||{},w=void 0!==j.separator?j.separator:"",O=void 0!==j.spacer?j.spacer:b?"":" ",_=j.symbols||{},E=2===a?j.standard||"iec":"jedec",y=j.output||"string",s=!0===j.fullform,l=j.fullforms instanceof Array?j.fullforms:[],i=void 0!==j.exponent?j.exponent:-1,x=r[j.roundingMethod]||Math.round,d=(h=Number(o))<0,c=a>2?1e3:1024,S=!1===isNaN(j.precision)?parseInt(j.precision,10):0,d&&(h=-h),(-1===i||isNaN(i))&&(i=Math.floor(Math.log(h)/Math.log(c)))<0&&(i=0),i>8&&(S>0&&(S+=8-i),i=8),"exponent"===y)return i;if(0===h)P[0]=0,g=P[1]=b?"":t[E][u?"bits":"bytes"][i];else{k=h/(2===a?Math.pow(2,10*i):Math.pow(1e3,i)),u&&(k*=8)>=c&&i<8&&(k/=c,i++);var I=Math.pow(10,i>0?v:0);P[0]=x(k*I)/I,P[0]===c&&i<8&&void 0===j.exponent&&(P[0]=1,i++),g=P[1]=10===a&&1===i?u?"kbit":"kB":t[E][u?"bits":"bytes"][i],b&&(P[1]=P[1].charAt(0),e.test(P[1])&&(P[0]=Math.floor(P[0]),P[1]=""))}if(d&&(P[0]=-P[0]),S>0&&(P[0]=P[0].toPrecision(S)),P[1]=_[P[1]]||P[1],!0===f?P[0]=P[0].toLocaleString():f.length>0?P[0]=P[0].toLocaleString(f,p):w.length>0&&(P[0]=P[0].toString().replace(".",w)),m&&!1===Number.isInteger(P[0])&&v>0){var T=w||".",R=P[0].toString().split(T),C=R[1]||"",A=C.length,N=v-A;P[0]="".concat(R[0]).concat(T).concat(C.padEnd(A+N,"0"))}return s&&(P[1]=l[i]?l[i]:n[E][i]+(u?"bit":"byte")+(1===P[0]?"":"s")),"array"===y?P:"object"===y?{value:P[0],symbol:P[1],exponent:i,unit:g}:P.join(O)}return o.partial=function(e){return function(t){return o(t,e)}},o}()},21699:function(){!function(){"use strict";function e(e){var t=!0,n=!1,r=null,o={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,"datetime-local":!0};function i(e){return!!(e&&e!==document&&"HTML"!==e.nodeName&&"BODY"!==e.nodeName&&"classList"in e&&"contains"in e.classList)}function a(e){var t=e.type,n=e.tagName;return!("INPUT"!==n||!o[t]||e.readOnly)||"TEXTAREA"===n&&!e.readOnly||!!e.isContentEditable}function u(e){e.classList.contains("focus-visible")||(e.classList.add("focus-visible"),e.setAttribute("data-focus-visible-added",""))}function c(e){e.hasAttribute("data-focus-visible-added")&&(e.classList.remove("focus-visible"),e.removeAttribute("data-focus-visible-added"))}function s(n){n.metaKey||n.altKey||n.ctrlKey||(i(e.activeElement)&&u(e.activeElement),t=!0)}function l(e){t=!1}function f(e){i(e.target)&&(t||a(e.target))&&u(e.target)}function p(e){i(e.target)&&(e.target.classList.contains("focus-visible")||e.target.hasAttribute("data-focus-visible-added"))&&(n=!0,window.clearTimeout(r),r=window.setTimeout((function(){n=!1}),100),c(e.target))}function d(e){"hidden"===document.visibilityState&&(n&&(t=!0),h())}function h(){document.addEventListener("mousemove",m),document.addEventListener("mousedown",m),document.addEventListener("mouseup",m),document.addEventListener("pointermove",m),document.addEventListener("pointerdown",m),document.addEventListener("pointerup",m),document.addEventListener("touchmove",m),document.addEventListener("touchstart",m),document.addEventListener("touchend",m)}function y(){document.removeEventListener("mousemove",m),document.removeEventListener("mousedown",m),document.removeEventListener("mouseup",m),document.removeEventListener("pointermove",m),document.removeEventListener("pointerdown",m),document.removeEventListener("pointerup",m),document.removeEventListener("touchmove",m),document.removeEventListener("touchstart",m),document.removeEventListener("touchend",m)}function m(e){e.target.nodeName&&"html"===e.target.nodeName.toLowerCase()||(t=!1,y())}document.addEventListener("keydown",s,!0),document.addEventListener("mousedown",l,!0),document.addEventListener("pointerdown",l,!0),document.addEventListener("touchstart",l,!0),document.addEventListener("visibilitychange",d,!0),h(),e.addEventListener("focus",f,!0),e.addEventListener("blur",p,!0),e.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&e.host?e.host.setAttribute("data-js-focus-visible",""):e.nodeType===Node.DOCUMENT_NODE&&(document.documentElement.classList.add("js-focus-visible"),document.documentElement.setAttribute("data-js-focus-visible",""))}if("undefined"!=typeof window&&"undefined"!=typeof document){var t;window.applyFocusVisiblePolyfill=e;try{t=new CustomEvent("focus-visible-polyfill-ready")}catch(e){(t=document.createEvent("CustomEvent")).initCustomEvent("focus-visible-polyfill-ready",!1,!1,{})}window.dispatchEvent(t)}"undefined"!=typeof document&&e(document)}()},59757:e=>{"use strict";var t="Function.prototype.bind called on incompatible ",n=Array.prototype.slice,r=Object.prototype.toString,o="[object Function]";e.exports=function(e){var i=this;if("function"!=typeof i||r.call(i)!==o)throw new TypeError(t+i);for(var a,u=n.call(arguments,1),c=function(){if(this instanceof a){var t=i.apply(this,u.concat(n.call(arguments)));return Object(t)===t?t:this}return i.apply(e,u.concat(n.call(arguments)))},s=Math.max(0,i.length-u.length),l=[],f=0;f<s;f++)l.push("$"+f);if(a=Function("binder","return function ("+l.join(",")+"){ return binder.apply(this,arguments); }")(c),i.prototype){var p=function(){};p.prototype=i.prototype,a.prototype=new p,p.prototype=null}return a}},92502:(e,t,n)=>{"use strict";var r=n(59757);e.exports=Function.prototype.bind||r},13049:(e,t,n)=>{"use strict";var r,o=SyntaxError,i=Function,a=TypeError,u=function(e){try{return i('"use strict"; return ('+e+").constructor;")()}catch(e){}},c=Object.getOwnPropertyDescriptor;if(c)try{c({},"")}catch(e){c=null}var s=function(){throw new a},l=c?function(){try{return s}catch(e){try{return c(arguments,"callee").get}catch(e){return s}}}():s,f=n(14844)(),p=Object.getPrototypeOf||function(e){return e.__proto__},d={},h="undefined"==typeof Uint8Array?r:p(Uint8Array),y={"%AggregateError%":"undefined"==typeof AggregateError?r:AggregateError,"%Array%":Array,"%ArrayBuffer%":"undefined"==typeof ArrayBuffer?r:ArrayBuffer,"%ArrayIteratorPrototype%":f?p([][Symbol.iterator]()):r,"%AsyncFromSyncIteratorPrototype%":r,"%AsyncFunction%":d,"%AsyncGenerator%":d,"%AsyncGeneratorFunction%":d,"%AsyncIteratorPrototype%":d,"%Atomics%":"undefined"==typeof Atomics?r:Atomics,"%BigInt%":"undefined"==typeof BigInt?r:BigInt,"%Boolean%":Boolean,"%DataView%":"undefined"==typeof DataView?r:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":Error,"%eval%":eval,"%EvalError%":EvalError,"%Float32Array%":"undefined"==typeof Float32Array?r:Float32Array,"%Float64Array%":"undefined"==typeof Float64Array?r:Float64Array,"%FinalizationRegistry%":"undefined"==typeof FinalizationRegistry?r:FinalizationRegistry,"%Function%":i,"%GeneratorFunction%":d,"%Int8Array%":"undefined"==typeof Int8Array?r:Int8Array,"%Int16Array%":"undefined"==typeof Int16Array?r:Int16Array,"%Int32Array%":"undefined"==typeof Int32Array?r:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":f?p(p([][Symbol.iterator]())):r,"%JSON%":"object"==typeof JSON?JSON:r,"%Map%":"undefined"==typeof Map?r:Map,"%MapIteratorPrototype%":"undefined"!=typeof Map&&f?p((new Map)[Symbol.iterator]()):r,"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":"undefined"==typeof Promise?r:Promise,"%Proxy%":"undefined"==typeof Proxy?r:Proxy,"%RangeError%":RangeError,"%ReferenceError%":ReferenceError,"%Reflect%":"undefined"==typeof Reflect?r:Reflect,"%RegExp%":RegExp,"%Set%":"undefined"==typeof Set?r:Set,"%SetIteratorPrototype%":"undefined"!=typeof Set&&f?p((new Set)[Symbol.iterator]()):r,"%SharedArrayBuffer%":"undefined"==typeof SharedArrayBuffer?r:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":f?p(""[Symbol.iterator]()):r,"%Symbol%":f?Symbol:r,"%SyntaxError%":o,"%ThrowTypeError%":l,"%TypedArray%":h,"%TypeError%":a,"%Uint8Array%":"undefined"==typeof Uint8Array?r:Uint8Array,"%Uint8ClampedArray%":"undefined"==typeof Uint8ClampedArray?r:Uint8ClampedArray,"%Uint16Array%":"undefined"==typeof Uint16Array?r:Uint16Array,"%Uint32Array%":"undefined"==typeof Uint32Array?r:Uint32Array,"%URIError%":URIError,"%WeakMap%":"undefined"==typeof WeakMap?r:WeakMap,"%WeakRef%":"undefined"==typeof WeakRef?r:WeakRef,"%WeakSet%":"undefined"==typeof WeakSet?r:WeakSet},m=function e(t){var n;if("%AsyncFunction%"===t)n=u("async function () {}");else if("%GeneratorFunction%"===t)n=u("function* () {}");else if("%AsyncGeneratorFunction%"===t)n=u("async function* () {}");else if("%AsyncGenerator%"===t){var r=e("%AsyncGeneratorFunction%");r&&(n=r.prototype)}else if("%AsyncIteratorPrototype%"===t){var o=e("%AsyncGenerator%");o&&(n=p(o.prototype))}return y[t]=n,n},v={"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},g=n(92502),b=n(66670),w=g.call(Function.call,Array.prototype.concat),O=g.call(Function.apply,Array.prototype.splice),E=g.call(Function.call,String.prototype.replace),_=g.call(Function.call,String.prototype.slice),x=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,S=/\\(\\)?/g,j=function(e){var t=_(e,0,1),n=_(e,-1);if("%"===t&&"%"!==n)throw new o("invalid intrinsic syntax, expected closing `%`");if("%"===n&&"%"!==t)throw new o("invalid intrinsic syntax, expected opening `%`");var r=[];return E(e,x,(function(e,t,n,o){r[r.length]=n?E(o,S,"$1"):t||e})),r},P=function(e,t){var n,r=e;if(b(v,r)&&(r="%"+(n=v[r])[0]+"%"),b(y,r)){var i=y[r];if(i===d&&(i=m(r)),void 0===i&&!t)throw new a("intrinsic "+e+" exists, but is not available. Please file an issue!");return{alias:n,name:r,value:i}}throw new o("intrinsic "+e+" does not exist!")};e.exports=function(e,t){if("string"!=typeof e||0===e.length)throw new a("intrinsic name must be a non-empty string");if(arguments.length>1&&"boolean"!=typeof t)throw new a('"allowMissing" argument must be a boolean');var n=j(e),r=n.length>0?n[0]:"",i=P("%"+r+"%",t),u=i.name,s=i.value,l=!1,f=i.alias;f&&(r=f[0],O(n,w([0,1],f)));for(var p=1,d=!0;p<n.length;p+=1){var h=n[p],m=_(h,0,1),v=_(h,-1);if(('"'===m||"'"===m||"`"===m||'"'===v||"'"===v||"`"===v)&&m!==v)throw new o("property names with quotes must have matching quotes");if("constructor"!==h&&d||(l=!0),b(y,u="%"+(r+="."+h)+"%"))s=y[u];else if(null!=s){if(!(h in s)){if(!t)throw new a("base intrinsic for "+e+" exists, but the property is not available.");return}if(c&&p+1>=n.length){var g=c(s,h);s=(d=!!g)&&"get"in g&&!("originalValue"in g.get)?g.get:s[h]}else d=b(s,h),s=s[h];d&&!l&&(y[u]=s)}}return s}},14844:(e,t,n)=>{"use strict";var r="undefined"!=typeof Symbol&&Symbol,o=n(10635);e.exports=function(){return"function"==typeof r&&("function"==typeof Symbol&&("symbol"==typeof r("foo")&&("symbol"==typeof Symbol("bar")&&o())))}},10635:e=>{"use strict";e.exports=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var e={},t=Symbol("test"),n=Object(t);if("string"==typeof t)return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;if("[object Symbol]"!==Object.prototype.toString.call(n))return!1;for(t in e[t]=42,e)return!1;if("function"==typeof Object.keys&&0!==Object.keys(e).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var r=Object.getOwnPropertySymbols(e);if(1!==r.length||r[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var o=Object.getOwnPropertyDescriptor(e,t);if(42!==o.value||!0!==o.enumerable)return!1}return!0}},66670:(e,t,n)=>{"use strict";var r=n(92502);e.exports=r.call(Function.call,Object.prototype.hasOwnProperty)},90528:(e,t,n)=>{"use strict";n.d(t,{lX:()=>_,ob:()=>y,PP:()=>S,Ep:()=>h,Hp:()=>m});var r=n(30513);function o(e){return"/"===e.charAt(0)}function i(e,t){for(var n=t,r=n+1,o=e.length;r<o;n+=1,r+=1)e[n]=e[r];e.pop()}const a=function(e,t){void 0===t&&(t="");var n,r=e&&e.split("/")||[],a=t&&t.split("/")||[],u=e&&o(e),c=t&&o(t),s=u||c;if(e&&o(e)?a=r:r.length&&(a.pop(),a=a.concat(r)),!a.length)return"/";if(a.length){var l=a[a.length-1];n="."===l||".."===l||""===l}else n=!1;for(var f=0,p=a.length;p>=0;p--){var d=a[p];"."===d?i(a,p):".."===d?(i(a,p),f++):f&&(i(a,p),f--)}if(!s)for(;f--;f)a.unshift("..");!s||""===a[0]||a[0]&&o(a[0])||a.unshift("");var h=a.join("/");return n&&"/"!==h.substr(-1)&&(h+="/"),h};function u(e){return e.valueOf?e.valueOf():Object.prototype.valueOf.call(e)}const c=function e(t,n){if(t===n)return!0;if(null==t||null==n)return!1;if(Array.isArray(t))return Array.isArray(n)&&t.length===n.length&&t.every((function(t,r){return e(t,n[r])}));if("object"==typeof t||"object"==typeof n){var r=u(t),o=u(n);return r!==t||o!==n?e(r,o):Object.keys(Object.assign({},t,n)).every((function(r){return e(t[r],n[r])}))}return!1};var s="Invariant failed";const l=function(e,t){if(!e)throw new Error(s)};function f(e){return"/"===e.charAt(0)?e:"/"+e}function p(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function h(e){var t=e.pathname,n=e.search,r=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(o+="#"===r.charAt(0)?r:"#"+r),o}function y(e,t,n,o){var i;"string"==typeof e?(i=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var i=t.indexOf("?");return-1!==i&&(n=t.substr(i),t=t.substr(0,i)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e)).state=t:(void 0===(i=(0,r.Z)({},e)).pathname&&(i.pathname=""),i.search?"?"!==i.search.charAt(0)&&(i.search="?"+i.search):i.search="",i.hash?"#"!==i.hash.charAt(0)&&(i.hash="#"+i.hash):i.hash="",void 0!==t&&void 0===i.state&&(i.state=t));try{i.pathname=decodeURI(i.pathname)}catch(e){throw e instanceof URIError?new URIError('Pathname "'+i.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):e}return n&&(i.key=n),o?i.pathname?"/"!==i.pathname.charAt(0)&&(i.pathname=a(i.pathname,o.pathname)):i.pathname=o.pathname:i.pathname||(i.pathname="/"),i}function m(e,t){return e.pathname===t.pathname&&e.search===t.search&&e.hash===t.hash&&e.key===t.key&&c(e.state,t.state)}function v(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,o){if(null!=e){var i="function"==typeof e?e(t,n):e;"string"==typeof i?"function"==typeof r?r(i,o):o(!0):o(!1!==i)}else o(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];t.forEach((function(e){return e.apply(void 0,n)}))}}}var g=!("undefined"==typeof window||!window.document||!window.document.createElement);function b(e,t){t(window.confirm(e))}var w="popstate",O="hashchange";function E(){try{return window.history.state||{}}catch(e){return{}}}function _(e){void 0===e&&(e={}),g||l(!1);var t,n=window.history,o=(-1===(t=window.navigator.userAgent).indexOf("Android 2.")&&-1===t.indexOf("Android 4.0")||-1===t.indexOf("Mobile Safari")||-1!==t.indexOf("Chrome")||-1!==t.indexOf("Windows Phone"))&&window.history&&"pushState"in window.history,i=!(-1===window.navigator.userAgent.indexOf("Trident")),a=e,u=a.forceRefresh,c=void 0!==u&&u,s=a.getUserConfirmation,m=void 0===s?b:s,_=a.keyLength,x=void 0===_?6:_,S=e.basename?d(f(e.basename)):"";function j(e){var t=e||{},n=t.key,r=t.state,o=window.location,i=o.pathname+o.search+o.hash;return S&&(i=p(i,S)),y(i,r,n)}function P(){return Math.random().toString(36).substr(2,x)}var k=v();function I(e){(0,r.Z)(H,e),H.length=n.length,k.notifyListeners(H.location,H.action)}function T(e){(function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")})(e)||A(j(e.state))}function R(){A(j(E()))}var C=!1;function A(e){if(C)C=!1,I();else{k.confirmTransitionTo(e,"POP",m,(function(t){t?I({action:"POP",location:e}):function(e){var t=H.location,n=L.indexOf(t.key);-1===n&&(n=0);var r=L.indexOf(e.key);-1===r&&(r=0);var o=n-r;o&&(C=!0,M(o))}(e)}))}}var N=j(E()),L=[N.key];function D(e){return S+h(e)}function M(e){n.go(e)}var F=0;function U(e){1===(F+=e)&&1===e?(window.addEventListener(w,T),i&&window.addEventListener(O,R)):0===F&&(window.removeEventListener(w,T),i&&window.removeEventListener(O,R))}var B=!1;var H={length:n.length,action:"POP",location:N,createHref:D,push:function(e,t){var r="PUSH",i=y(e,t,P(),H.location);k.confirmTransitionTo(i,r,m,(function(e){if(e){var t=D(i),a=i.key,u=i.state;if(o)if(n.pushState({key:a,state:u},null,t),c)window.location.href=t;else{var s=L.indexOf(H.location.key),l=L.slice(0,s+1);l.push(i.key),L=l,I({action:r,location:i})}else window.location.href=t}}))},replace:function(e,t){var r="REPLACE",i=y(e,t,P(),H.location);k.confirmTransitionTo(i,r,m,(function(e){if(e){var t=D(i),a=i.key,u=i.state;if(o)if(n.replaceState({key:a,state:u},null,t),c)window.location.replace(t);else{var s=L.indexOf(H.location.key);-1!==s&&(L[s]=i.key),I({action:r,location:i})}else window.location.replace(t)}}))},go:M,goBack:function(){M(-1)},goForward:function(){M(1)},block:function(e){void 0===e&&(e=!1);var t=k.setPrompt(e);return B||(U(1),B=!0),function(){return B&&(B=!1,U(-1)),t()}},listen:function(e){var t=k.appendListener(e);return U(1),function(){U(-1),t()}}};return H}function x(e,t,n){return Math.min(Math.max(e,t),n)}function S(e){void 0===e&&(e={});var t=e,n=t.getUserConfirmation,o=t.initialEntries,i=void 0===o?["/"]:o,a=t.initialIndex,u=void 0===a?0:a,c=t.keyLength,s=void 0===c?6:c,l=v();function f(e){(0,r.Z)(w,e),w.length=w.entries.length,l.notifyListeners(w.location,w.action)}function p(){return Math.random().toString(36).substr(2,s)}var d=x(u,0,i.length-1),m=i.map((function(e){return y(e,void 0,"string"==typeof e?p():e.key||p())})),g=h;function b(e){var t=x(w.index+e,0,w.entries.length-1),r=w.entries[t];l.confirmTransitionTo(r,"POP",n,(function(e){e?f({action:"POP",location:r,index:t}):f()}))}var w={length:m.length,action:"POP",location:m[d],index:d,entries:m,createHref:g,push:function(e,t){var r="PUSH",o=y(e,t,p(),w.location);l.confirmTransitionTo(o,r,n,(function(e){if(e){var t=w.index+1,n=w.entries.slice(0);n.length>t?n.splice(t,n.length-t,o):n.push(o),f({action:r,location:o,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",o=y(e,t,p(),w.location);l.confirmTransitionTo(o,r,n,(function(e){e&&(w.entries[w.index]=o,f({action:r,location:o}))}))},go:b,goBack:function(){b(-1)},goForward:function(){b(1)},canGo:function(e){var t=w.index+e;return t>=0&&t<w.entries.length},block:function(e){return void 0===e&&(e=!1),l.setPrompt(e)},listen:function(e){return l.appendListener(e)}};return w}},37707:(e,t,n)=>{"use strict";var r=n(2781),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},i={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},a={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},u={};function c(e){return r.isMemo(e)?a:u[e.$$typeof]||o}u[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},u[r.Memo]=a;var s=Object.defineProperty,l=Object.getOwnPropertyNames,f=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,d=Object.getPrototypeOf,h=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(h){var o=d(n);o&&o!==h&&e(t,o,r)}var a=l(n);f&&(a=a.concat(f(n)));for(var u=c(t),y=c(n),m=0;m<a.length;++m){var v=a[m];if(!(i[v]||r&&r[v]||y&&y[v]||u&&u[v])){var g=p(n,v);try{s(t,v,g)}catch(e){}}}}return t}},21706:(e,t)=>{t.read=function(e,t,n,r,o){var i,a,u=8*o-r-1,c=(1<<u)-1,s=c>>1,l=-7,f=n?o-1:0,p=n?-1:1,d=e[t+f];for(f+=p,i=d&(1<<-l)-1,d>>=-l,l+=u;l>0;i=256*i+e[t+f],f+=p,l-=8);for(a=i&(1<<-l)-1,i>>=-l,l+=r;l>0;a=256*a+e[t+f],f+=p,l-=8);if(0===i)i=1-s;else{if(i===c)return a?NaN:1/0*(d?-1:1);a+=Math.pow(2,r),i-=s}return(d?-1:1)*a*Math.pow(2,i-r)},t.write=function(e,t,n,r,o,i){var a,u,c,s=8*i-o-1,l=(1<<s)-1,f=l>>1,p=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,d=r?0:i-1,h=r?1:-1,y=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(u=isNaN(t)?1:0,a=l):(a=Math.floor(Math.log(t)/Math.LN2),t*(c=Math.pow(2,-a))<1&&(a--,c*=2),(t+=a+f>=1?p/c:p*Math.pow(2,1-f))*c>=2&&(a++,c/=2),a+f>=l?(u=0,a=l):a+f>=1?(u=(t*c-1)*Math.pow(2,o),a+=f):(u=t*Math.pow(2,f-1)*Math.pow(2,o),a=0));o>=8;e[n+d]=255&u,d+=h,u/=256,o-=8);for(a=a<<o|u,s+=o;s>0;e[n+d]=255&a,d+=h,a/=256,s-=8);e[n+d-h]|=128*y}},83021:e=>{"use strict";e.exports=function(e,t,n,r,o,i,a,u){if(!e){var c;if(void 0===t)c=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var s=[n,r,o,i,a,u],l=0;(c=new Error(t.replace(/%s/g,(function(){return s[l++]})))).name="Invariant Violation"}throw c.framesToPop=1,c}}},58412:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},33529:(e,t,n)=>{n(35409),e.exports=self.fetch.bind(self)},12321:function(e,t){!function(n,r){var o=Array.prototype,i=Object.prototype,a=o.slice,u=i.hasOwnProperty,c=o.forEach,s={},l={forEach:function(e,t,n){var r,o,i;if(null!==e)if(c&&e.forEach===c)e.forEach(t,n);else if(e.length===+e.length){for(r=0,o=e.length;r<o;r++)if(r in e&&t.call(n,e[r],r,e)===s)return}else for(i in e)if(u.call(e,i)&&t.call(n,e[i],i,e)===s)return},extend:function(e){return this.forEach(a.call(arguments,1),(function(t){for(var n in t)e[n]=t[n]})),e}},f=function(e){if(this.defaults={locale_data:{messages:{"":{domain:"messages",lang:"en",plural_forms:"nplurals=2; plural=(n != 1);"}}},domain:"messages",debug:!1},this.options=l.extend({},this.defaults,e),this.textdomain(this.options.domain),e.domain&&!this.options.locale_data[this.options.domain])throw new Error("Text domain set to non-existent domain: `"+e.domain+"`")};function p(e){return f.PF.compile(e||"nplurals=2; plural=(n != 1);")}function d(e,t){this._key=e,this._i18n=t}f.context_delimiter=String.fromCharCode(4),l.extend(d.prototype,{onDomain:function(e){return this._domain=e,this},withContext:function(e){return this._context=e,this},ifPlural:function(e,t){return this._val=e,this._pkey=t,this},fetch:function(e){return"[object Array]"!={}.toString.call(e)&&(e=[].slice.call(arguments,0)),(e&&e.length?f.sprintf:function(e){return e})(this._i18n.dcnpgettext(this._domain,this._context,this._key,this._pkey,this._val),e)}}),l.extend(f.prototype,{translate:function(e){return new d(e,this)},textdomain:function(e){if(!e)return this._textdomain;this._textdomain=e},gettext:function(e){return this.dcnpgettext.call(this,r,r,e)},dgettext:function(e,t){return this.dcnpgettext.call(this,e,r,t)},dcgettext:function(e,t){return this.dcnpgettext.call(this,e,r,t)},ngettext:function(e,t,n){return this.dcnpgettext.call(this,r,r,e,t,n)},dngettext:function(e,t,n,o){return this.dcnpgettext.call(this,e,r,t,n,o)},dcngettext:function(e,t,n,o){return this.dcnpgettext.call(this,e,r,t,n,o)},pgettext:function(e,t){return this.dcnpgettext.call(this,r,e,t)},dpgettext:function(e,t,n){return this.dcnpgettext.call(this,e,t,n)},dcpgettext:function(e,t,n){return this.dcnpgettext.call(this,e,t,n)},npgettext:function(e,t,n,o){return this.dcnpgettext.call(this,r,e,t,n,o)},dnpgettext:function(e,t,n,r,o){return this.dcnpgettext.call(this,e,t,n,r,o)},dcnpgettext:function(e,t,n,r,o){var i;if(r=r||n,e=e||this._textdomain,!this.options)return(i=new f).dcnpgettext.call(i,void 0,void 0,n,r,o);if(!this.options.locale_data)throw new Error("No locale data provided.");if(!this.options.locale_data[e])throw new Error("Domain `"+e+"` was not found.");if(!this.options.locale_data[e][""])throw new Error("No locale meta information provided.");if(!n)throw new Error("No translation key found.");var a,u,c,s=t?t+f.context_delimiter+n:n,l=this.options.locale_data,d=l[e],h=(l.messages||this.defaults.locale_data.messages)[""],y=d[""].plural_forms||d[""]["Plural-Forms"]||d[""]["plural-forms"]||h.plural_forms||h["Plural-Forms"]||h["plural-forms"];if(void 0===o)c=0;else{if("number"!=typeof o&&(o=parseInt(o,10),isNaN(o)))throw new Error("The number that was passed in is not a number.");c=p(y)(o)}if(!d)throw new Error("No domain named `"+e+"` could be found.");return!(a=d[s])||c>a.length?(this.options.missing_key_callback&&this.options.missing_key_callback(s,e),u=[n,r],this.options.debug,u[p()(o)]):(u=a[c])||(u=[n,r])[p()(o)]}});var h,y,m=function(){function e(e){return Object.prototype.toString.call(e).slice(8,-1).toLowerCase()}function t(e,t){for(var n=[];t>0;n[--t]=e);return n.join("")}var n=function(){return n.cache.hasOwnProperty(arguments[0])||(n.cache[arguments[0]]=n.parse(arguments[0])),n.format.call(null,n.cache[arguments[0]],arguments)};return n.format=function(n,r){var o,i,a,u,c,s,l,f=1,p=n.length,d="",h=[];for(i=0;i<p;i++)if("string"===(d=e(n[i])))h.push(n[i]);else if("array"===d){if((u=n[i])[2])for(o=r[f],a=0;a<u[2].length;a++){if(!o.hasOwnProperty(u[2][a]))throw m('[sprintf] property "%s" does not exist',u[2][a]);o=o[u[2][a]]}else o=u[1]?r[u[1]]:r[f++];if(/[^s]/.test(u[8])&&"number"!=e(o))throw m("[sprintf] expecting number but found %s",e(o));switch(null==o&&(o=""),u[8]){case"b":o=o.toString(2);break;case"c":o=String.fromCharCode(o);break;case"d":o=parseInt(o,10);break;case"e":o=u[7]?o.toExponential(u[7]):o.toExponential();break;case"f":o=u[7]?parseFloat(o).toFixed(u[7]):parseFloat(o);break;case"o":o=o.toString(8);break;case"s":o=(o=String(o))&&u[7]?o.substring(0,u[7]):o;break;case"u":o=Math.abs(o);break;case"x":o=o.toString(16);break;case"X":o=o.toString(16).toUpperCase()}o=/[def]/.test(u[8])&&u[3]&&o>=0?"+"+o:o,s=u[4]?"0"==u[4]?"0":u[4].charAt(1):" ",l=u[6]-String(o).length,c=u[6]?t(s,l):"",h.push(u[5]?o+c:c+o)}return h.join("")},n.cache={},n.parse=function(e){for(var t=e,n=[],r=[],o=0;t;){if(null!==(n=/^[^\x25]+/.exec(t)))r.push(n[0]);else if(null!==(n=/^\x25{2}/.exec(t)))r.push("%");else{if(null===(n=/^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(t)))throw"[sprintf] huh?";if(n[2]){o|=1;var i=[],a=n[2],u=[];if(null===(u=/^([a-z_][a-z_\d]*)/i.exec(a)))throw"[sprintf] huh?";for(i.push(u[1]);""!==(a=a.substring(u[0].length));)if(null!==(u=/^\.([a-z_][a-z_\d]*)/i.exec(a)))i.push(u[1]);else{if(null===(u=/^\[(\d+)\]/.exec(a)))throw"[sprintf] huh?";i.push(u[1])}n[2]=i}else o|=2;if(3===o)throw"[sprintf] mixing positional and named placeholders is not (yet) supported";r.push(n)}t=t.substring(n[0].length)}return r},n}(),v=function(e,t){return t.unshift(e),m.apply(null,t)};f.parse_plural=function(e,t){return e=e.replace(/n/g,t),f.parse_expression(e)},f.sprintf=function(e,t){return"[object Array]"=={}.toString.call(t)?v(e,[].slice.call(t)):m.apply(this,[].slice.call(arguments))},f.prototype.sprintf=function(){return f.sprintf.apply(this,arguments)},(f.PF={}).parse=function(e){var t=f.PF.extractPluralExpr(e);return f.PF.parser.parse.call(f.PF.parser,t)},f.PF.compile=function(e){var t=f.PF.parse(e);return function(e){return!0===(n=f.PF.interpreter(t)(e))?1:n||0;var n}},f.PF.interpreter=function(e){return function(t){switch(e.type){case"GROUP":return f.PF.interpreter(e.expr)(t);case"TERNARY":return f.PF.interpreter(e.expr)(t)?f.PF.interpreter(e.truthy)(t):f.PF.interpreter(e.falsey)(t);case"OR":return f.PF.interpreter(e.left)(t)||f.PF.interpreter(e.right)(t);case"AND":return f.PF.interpreter(e.left)(t)&&f.PF.interpreter(e.right)(t);case"LT":return f.PF.interpreter(e.left)(t)<f.PF.interpreter(e.right)(t);case"GT":return f.PF.interpreter(e.left)(t)>f.PF.interpreter(e.right)(t);case"LTE":return f.PF.interpreter(e.left)(t)<=f.PF.interpreter(e.right)(t);case"GTE":return f.PF.interpreter(e.left)(t)>=f.PF.interpreter(e.right)(t);case"EQ":return f.PF.interpreter(e.left)(t)==f.PF.interpreter(e.right)(t);case"NEQ":return f.PF.interpreter(e.left)(t)!=f.PF.interpreter(e.right)(t);case"MOD":return f.PF.interpreter(e.left)(t)%f.PF.interpreter(e.right)(t);case"VAR":return t;case"NUM":return e.val;default:throw new Error("Invalid Token found.")}}},f.PF.extractPluralExpr=function(e){e=e.replace(/^\s\s*/,"").replace(/\s\s*$/,""),/;\s*$/.test(e)||(e=e.concat(";"));var t,n=/nplurals\=(\d+);/,r=e.match(n);if(!(r.length>1))throw new Error("nplurals not found in plural_forms string: "+e);if(r[1],!((t=(e=e.replace(n,"")).match(/plural\=(.*);/))&&t.length>1))throw new Error("`plural` expression not found: "+e);return t[1]},f.PF.parser=(h={trace:function(){},yy:{},symbols_:{error:2,expressions:3,e:4,EOF:5,"?":6,":":7,"||":8,"&&":9,"<":10,"<=":11,">":12,">=":13,"!=":14,"==":15,"%":16,"(":17,")":18,n:19,NUMBER:20,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",6:"?",7:":",8:"||",9:"&&",10:"<",11:"<=",12:">",13:">=",14:"!=",15:"==",16:"%",17:"(",18:")",19:"n",20:"NUMBER"},productions_:[0,[3,2],[4,5],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,1],[4,1]],performAction:function(e,t,n,r,o,i,a){var u=i.length-1;switch(o){case 1:return{type:"GROUP",expr:i[u-1]};case 2:this.$={type:"TERNARY",expr:i[u-4],truthy:i[u-2],falsey:i[u]};break;case 3:this.$={type:"OR",left:i[u-2],right:i[u]};break;case 4:this.$={type:"AND",left:i[u-2],right:i[u]};break;case 5:this.$={type:"LT",left:i[u-2],right:i[u]};break;case 6:this.$={type:"LTE",left:i[u-2],right:i[u]};break;case 7:this.$={type:"GT",left:i[u-2],right:i[u]};break;case 8:this.$={type:"GTE",left:i[u-2],right:i[u]};break;case 9:this.$={type:"NEQ",left:i[u-2],right:i[u]};break;case 10:this.$={type:"EQ",left:i[u-2],right:i[u]};break;case 11:this.$={type:"MOD",left:i[u-2],right:i[u]};break;case 12:this.$={type:"GROUP",expr:i[u-1]};break;case 13:this.$={type:"VAR"};break;case 14:this.$={type:"NUM",val:Number(e)}}},table:[{3:1,4:2,17:[1,3],19:[1,4],20:[1,5]},{1:[3]},{5:[1,6],6:[1,7],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16]},{4:17,17:[1,3],19:[1,4],20:[1,5]},{5:[2,13],6:[2,13],7:[2,13],8:[2,13],9:[2,13],10:[2,13],11:[2,13],12:[2,13],13:[2,13],14:[2,13],15:[2,13],16:[2,13],18:[2,13]},{5:[2,14],6:[2,14],7:[2,14],8:[2,14],9:[2,14],10:[2,14],11:[2,14],12:[2,14],13:[2,14],14:[2,14],15:[2,14],16:[2,14],18:[2,14]},{1:[2,1]},{4:18,17:[1,3],19:[1,4],20:[1,5]},{4:19,17:[1,3],19:[1,4],20:[1,5]},{4:20,17:[1,3],19:[1,4],20:[1,5]},{4:21,17:[1,3],19:[1,4],20:[1,5]},{4:22,17:[1,3],19:[1,4],20:[1,5]},{4:23,17:[1,3],19:[1,4],20:[1,5]},{4:24,17:[1,3],19:[1,4],20:[1,5]},{4:25,17:[1,3],19:[1,4],20:[1,5]},{4:26,17:[1,3],19:[1,4],20:[1,5]},{4:27,17:[1,3],19:[1,4],20:[1,5]},{6:[1,7],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[1,28]},{6:[1,7],7:[1,29],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16]},{5:[2,3],6:[2,3],7:[2,3],8:[2,3],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[2,3]},{5:[2,4],6:[2,4],7:[2,4],8:[2,4],9:[2,4],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[2,4]},{5:[2,5],6:[2,5],7:[2,5],8:[2,5],9:[2,5],10:[2,5],11:[2,5],12:[2,5],13:[2,5],14:[2,5],15:[2,5],16:[1,16],18:[2,5]},{5:[2,6],6:[2,6],7:[2,6],8:[2,6],9:[2,6],10:[2,6],11:[2,6],12:[2,6],13:[2,6],14:[2,6],15:[2,6],16:[1,16],18:[2,6]},{5:[2,7],6:[2,7],7:[2,7],8:[2,7],9:[2,7],10:[2,7],11:[2,7],12:[2,7],13:[2,7],14:[2,7],15:[2,7],16:[1,16],18:[2,7]},{5:[2,8],6:[2,8],7:[2,8],8:[2,8],9:[2,8],10:[2,8],11:[2,8],12:[2,8],13:[2,8],14:[2,8],15:[2,8],16:[1,16],18:[2,8]},{5:[2,9],6:[2,9],7:[2,9],8:[2,9],9:[2,9],10:[2,9],11:[2,9],12:[2,9],13:[2,9],14:[2,9],15:[2,9],16:[1,16],18:[2,9]},{5:[2,10],6:[2,10],7:[2,10],8:[2,10],9:[2,10],10:[2,10],11:[2,10],12:[2,10],13:[2,10],14:[2,10],15:[2,10],16:[1,16],18:[2,10]},{5:[2,11],6:[2,11],7:[2,11],8:[2,11],9:[2,11],10:[2,11],11:[2,11],12:[2,11],13:[2,11],14:[2,11],15:[2,11],16:[2,11],18:[2,11]},{5:[2,12],6:[2,12],7:[2,12],8:[2,12],9:[2,12],10:[2,12],11:[2,12],12:[2,12],13:[2,12],14:[2,12],15:[2,12],16:[2,12],18:[2,12]},{4:30,17:[1,3],19:[1,4],20:[1,5]},{5:[2,2],6:[1,7],7:[2,2],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[2,2]}],defaultActions:{6:[2,1]},parseError:function(e,t){throw new Error(e)},parse:function(e){var t=this,n=[0],r=[null],o=[],i=this.table,a="",u=0,c=0,s=0;this.lexer.setInput(e),this.lexer.yy=this.yy,this.yy.lexer=this.lexer,void 0===this.lexer.yylloc&&(this.lexer.yylloc={});var l=this.lexer.yylloc;function f(){var e;return"number"!=typeof(e=t.lexer.lex()||1)&&(e=t.symbols_[e]||e),e}o.push(l),"function"==typeof this.yy.parseError&&(this.parseError=this.yy.parseError);for(var p,d,h,y,m,v,g,b,w,O,E={};;){if(h=n[n.length-1],this.defaultActions[h]?y=this.defaultActions[h]:(null==p&&(p=f()),y=i[h]&&i[h][p]),void 0===y||!y.length||!y[0]){if(!s){for(v in w=[],i[h])this.terminals_[v]&&v>2&&w.push("'"+this.terminals_[v]+"'");var _="";_=this.lexer.showPosition?"Parse error on line "+(u+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+w.join(", ")+", got '"+this.terminals_[p]+"'":"Parse error on line "+(u+1)+": Unexpected "+(1==p?"end of input":"'"+(this.terminals_[p]||p)+"'"),this.parseError(_,{text:this.lexer.match,token:this.terminals_[p]||p,line:this.lexer.yylineno,loc:l,expected:w})}if(3==s){if(1==p)throw new Error(_||"Parsing halted.");c=this.lexer.yyleng,a=this.lexer.yytext,u=this.lexer.yylineno,l=this.lexer.yylloc,p=f()}for(;!(2..toString()in i[h]);){if(0==h)throw new Error(_||"Parsing halted.");O=1,n.length=n.length-2*O,r.length=r.length-O,o.length=o.length-O,h=n[n.length-1]}d=p,p=2,y=i[h=n[n.length-1]]&&i[h][2],s=3}if(y[0]instanceof Array&&y.length>1)throw new Error("Parse Error: multiple actions possible at state: "+h+", token: "+p);switch(y[0]){case 1:n.push(p),r.push(this.lexer.yytext),o.push(this.lexer.yylloc),n.push(y[1]),p=null,d?(p=d,d=null):(c=this.lexer.yyleng,a=this.lexer.yytext,u=this.lexer.yylineno,l=this.lexer.yylloc,s>0&&s--);break;case 2:if(g=this.productions_[y[1]][1],E.$=r[r.length-g],E._$={first_line:o[o.length-(g||1)].first_line,last_line:o[o.length-1].last_line,first_column:o[o.length-(g||1)].first_column,last_column:o[o.length-1].last_column},void 0!==(m=this.performAction.call(E,a,c,u,this.yy,y[1],r,o)))return m;g&&(n=n.slice(0,-1*g*2),r=r.slice(0,-1*g),o=o.slice(0,-1*g)),n.push(this.productions_[y[1]][0]),r.push(E.$),o.push(E._$),b=i[n[n.length-2]][n[n.length-1]],n.push(b);break;case 3:return!0}}return!0}},y=function(){var e={EOF:1,parseError:function(e,t){if(!this.yy.parseError)throw new Error(e);this.yy.parseError(e,t)},setInput:function(e){return this._input=e,this._more=this._less=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.match+=e,this.matched+=e,e.match(/\n/)&&this.yylineno++,this._input=this._input.slice(1),e},unput:function(e){return this._input=e+this._input,this},more:function(){return this._more=!0,this},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},next:function(){if(this.done)return this.EOF;var e,t;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var n=this._currentRules(),r=0;r<n.length;r++)if(e=this._input.match(this.rules[n[r]]))return(t=e[0].match(/\n.*/g))&&(this.yylineno+=t.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:t?t[t.length-1].length-1:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this._more=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],this.performAction.call(this,this.yy,this,n[r],this.conditionStack[this.conditionStack.length-1])||void 0;if(""===this._input)return this.EOF;this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return void 0!==e?e:this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.pop()},_currentRules:function(){return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules},topState:function(){return this.conditionStack[this.conditionStack.length-2]},pushState:function(e){this.begin(e)},performAction:function(e,t,n,r){switch(n){case 0:break;case 1:return 20;case 2:return 19;case 3:return 8;case 4:return 9;case 5:return 6;case 6:return 7;case 7:return 11;case 8:return 13;case 9:return 10;case 10:return 12;case 11:return 14;case 12:return 15;case 13:return 16;case 14:return 17;case 15:return 18;case 16:return 5;case 17:return"INVALID"}},rules:[/^\s+/,/^[0-9]+(\.[0-9]+)?\b/,/^n\b/,/^\|\|/,/^&&/,/^\?/,/^:/,/^<=/,/^>=/,/^</,/^>/,/^!=/,/^==/,/^%/,/^\(/,/^\)/,/^$/,/^./],conditions:{INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],inclusive:!0}}};return e}(),h.lexer=y,h),e.exports&&(t=e.exports=f),t.Jed=f}()},97170:e=>{"use strict";function t(e){return null!=e}e.exports={pathname:function(){for(var e=arguments.length,n=new Array(e);e--;)n[e]=arguments[e];return n.filter(t).join("/").replace(/\/+/g,"/")},hostname:function(){for(var e=arguments.length,n=new Array(e);e--;)n[e]=arguments[e];return n.filter(t).join(".").replace(/^\./,"").replace(/\.+/g,".")},query:function(){for(var e=arguments.length,n=new Array(e);e--;)n[e]=arguments[e];return n.filter(t).join("&").replace(/^&/,"").replace(/&+/g,"&")}}},86432:(e,t,n)=>{e.exports=function e(t,n,r){function o(a,u){if(!n[a]){if(!t[a]){if(i)return i(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var s=n[a]={exports:{}};t[a][0].call(s.exports,(function(e){var n=t[a][1][e];return o(n||e)}),s,s.exports,e,t,n,r)}return n[a].exports}for(var i=void 0,a=0;a<r.length;a++)o(r[a]);return o}({1:[function(e,t,r){(function(e){"use strict";var n,r,o=e.MutationObserver||e.WebKitMutationObserver;if(o){var i=0,a=new o(l),u=e.document.createTextNode("");a.observe(u,{characterData:!0}),n=function(){u.data=i=++i%2}}else if(e.setImmediate||void 0===e.MessageChannel)n="document"in e&&"onreadystatechange"in e.document.createElement("script")?function(){var t=e.document.createElement("script");t.onreadystatechange=function(){l(),t.onreadystatechange=null,t.parentNode.removeChild(t),t=null},e.document.documentElement.appendChild(t)}:function(){setTimeout(l,0)};else{var c=new e.MessageChannel;c.port1.onmessage=l,n=function(){c.port2.postMessage(0)}}var s=[];function l(){var e,t;r=!0;for(var n=s.length;n;){for(t=s,s=[],e=-1;++e<n;)t[e]();n=s.length}r=!1}function f(e){1!==s.push(e)||r||n()}t.exports=f}).call(this,void 0!==n.g?n.g:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],2:[function(e,t,n){"use strict";var r=e(1);function o(){}var i={},a=["REJECTED"],u=["FULFILLED"],c=["PENDING"];function s(e){if("function"!=typeof e)throw new TypeError("resolver must be a function");this.state=c,this.queue=[],this.outcome=void 0,e!==o&&d(this,e)}function l(e,t,n){this.promise=e,"function"==typeof t&&(this.onFulfilled=t,this.callFulfilled=this.otherCallFulfilled),"function"==typeof n&&(this.onRejected=n,this.callRejected=this.otherCallRejected)}function f(e,t,n){r((function(){var r;try{r=t(n)}catch(t){return i.reject(e,t)}r===e?i.reject(e,new TypeError("Cannot resolve promise with itself")):i.resolve(e,r)}))}function p(e){var t=e&&e.then;if(e&&("object"==typeof e||"function"==typeof e)&&"function"==typeof t)return function(){t.apply(e,arguments)}}function d(e,t){var n=!1;function r(t){n||(n=!0,i.reject(e,t))}function o(t){n||(n=!0,i.resolve(e,t))}function a(){t(o,r)}var u=h(a);"error"===u.status&&r(u.value)}function h(e,t){var n={};try{n.value=e(t),n.status="success"}catch(e){n.status="error",n.value=e}return n}function y(e){return e instanceof this?e:i.resolve(new this(o),e)}function m(e){var t=new this(o);return i.reject(t,e)}function v(e){var t=this;if("[object Array]"!==Object.prototype.toString.call(e))return this.reject(new TypeError("must be an array"));var n=e.length,r=!1;if(!n)return this.resolve([]);for(var a=new Array(n),u=0,c=-1,s=new this(o);++c<n;)l(e[c],c);return s;function l(e,o){function c(e){a[o]=e,++u!==n||r||(r=!0,i.resolve(s,a))}t.resolve(e).then(c,(function(e){r||(r=!0,i.reject(s,e))}))}}function g(e){var t=this;if("[object Array]"!==Object.prototype.toString.call(e))return this.reject(new TypeError("must be an array"));var n=e.length,r=!1;if(!n)return this.resolve([]);for(var a=-1,u=new this(o);++a<n;)c(e[a]);return u;function c(e){t.resolve(e).then((function(e){r||(r=!0,i.resolve(u,e))}),(function(e){r||(r=!0,i.reject(u,e))}))}}t.exports=s,s.prototype.catch=function(e){return this.then(null,e)},s.prototype.then=function(e,t){if("function"!=typeof e&&this.state===u||"function"!=typeof t&&this.state===a)return this;var n=new this.constructor(o);return this.state!==c?f(n,this.state===u?e:t,this.outcome):this.queue.push(new l(n,e,t)),n},l.prototype.callFulfilled=function(e){i.resolve(this.promise,e)},l.prototype.otherCallFulfilled=function(e){f(this.promise,this.onFulfilled,e)},l.prototype.callRejected=function(e){i.reject(this.promise,e)},l.prototype.otherCallRejected=function(e){f(this.promise,this.onRejected,e)},i.resolve=function(e,t){var n=h(p,t);if("error"===n.status)return i.reject(e,n.value);var r=n.value;if(r)d(e,r);else{e.state=u,e.outcome=t;for(var o=-1,a=e.queue.length;++o<a;)e.queue[o].callFulfilled(t)}return e},i.reject=function(e,t){e.state=a,e.outcome=t;for(var n=-1,r=e.queue.length;++n<r;)e.queue[n].callRejected(t);return e},s.resolve=y,s.reject=m,s.all=v,s.race=g},{1:1}],3:[function(e,t,r){(function(t){"use strict";"function"!=typeof t.Promise&&(t.Promise=e(2))}).call(this,void 0!==n.g?n.g:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{2:2}],4:[function(e,t,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(){try{if("undefined"!=typeof indexedDB)return indexedDB;if("undefined"!=typeof webkitIndexedDB)return webkitIndexedDB;if("undefined"!=typeof mozIndexedDB)return mozIndexedDB;if("undefined"!=typeof OIndexedDB)return OIndexedDB;if("undefined"!=typeof msIndexedDB)return msIndexedDB}catch(e){return}}var a=i();function u(){try{if(!a||!a.open)return!1;var e="undefined"!=typeof openDatabase&&/(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent)&&!/Chrome/.test(navigator.userAgent)&&!/BlackBerry/.test(navigator.platform),t="function"==typeof fetch&&-1!==fetch.toString().indexOf("[native code");return(!e||t)&&"undefined"!=typeof indexedDB&&"undefined"!=typeof IDBKeyRange}catch(e){return!1}}function c(e,t){e=e||[],t=t||{};try{return new Blob(e,t)}catch(o){if("TypeError"!==o.name)throw o;for(var n=new("undefined"!=typeof BlobBuilder?BlobBuilder:"undefined"!=typeof MSBlobBuilder?MSBlobBuilder:"undefined"!=typeof MozBlobBuilder?MozBlobBuilder:WebKitBlobBuilder),r=0;r<e.length;r+=1)n.append(e[r]);return n.getBlob(t.type)}}"undefined"==typeof Promise&&e(3);var s=Promise;function l(e,t){t&&e.then((function(e){t(null,e)}),(function(e){t(e)}))}function f(e,t,n){"function"==typeof t&&e.then(t),"function"==typeof n&&e.catch(n)}function p(e){return"string"!=typeof e&&(e=String(e)),e}function d(){if(arguments.length&&"function"==typeof arguments[arguments.length-1])return arguments[arguments.length-1]}var h="local-forage-detect-blob-support",y=void 0,m={},v=Object.prototype.toString,g="readonly",b="readwrite";function w(e){for(var t=e.length,n=new ArrayBuffer(t),r=new Uint8Array(n),o=0;o<t;o++)r[o]=e.charCodeAt(o);return n}function O(e){return new s((function(t){var n=e.transaction(h,b),r=c([""]);n.objectStore(h).put(r,"key"),n.onabort=function(e){e.preventDefault(),e.stopPropagation(),t(!1)},n.oncomplete=function(){var e=navigator.userAgent.match(/Chrome\/(\d+)/),n=navigator.userAgent.match(/Edge\//);t(n||!e||parseInt(e[1],10)>=43)}})).catch((function(){return!1}))}function E(e){return"boolean"==typeof y?s.resolve(y):O(e).then((function(e){return y=e}))}function _(e){var t=m[e.name],n={};n.promise=new s((function(e,t){n.resolve=e,n.reject=t})),t.deferredOperations.push(n),t.dbReady?t.dbReady=t.dbReady.then((function(){return n.promise})):t.dbReady=n.promise}function x(e){var t=m[e.name].deferredOperations.pop();if(t)return t.resolve(),t.promise}function S(e,t){var n=m[e.name].deferredOperations.pop();if(n)return n.reject(t),n.promise}function j(e,t){return new s((function(n,r){if(m[e.name]=m[e.name]||D(),e.db){if(!t)return n(e.db);_(e),e.db.close()}var o=[e.name];t&&o.push(e.version);var i=a.open.apply(a,o);t&&(i.onupgradeneeded=function(t){var n=i.result;try{n.createObjectStore(e.storeName),t.oldVersion<=1&&n.createObjectStore(h)}catch(e){if("ConstraintError"!==e.name)throw e}}),i.onerror=function(e){e.preventDefault(),r(i.error)},i.onsuccess=function(){var t=i.result;t.onversionchange=function(e){e.target.close()},n(t),x(e)}}))}function P(e){return j(e,!1)}function k(e){return j(e,!0)}function I(e,t){if(!e.db)return!0;var n=!e.db.objectStoreNames.contains(e.storeName),r=e.version<e.db.version,o=e.version>e.db.version;if(r&&(e.version,e.version=e.db.version),o||n){if(n){var i=e.db.version+1;i>e.version&&(e.version=i)}return!0}return!1}function T(e){return new s((function(t,n){var r=new FileReader;r.onerror=n,r.onloadend=function(n){var r=btoa(n.target.result||"");t({__local_forage_encoded_blob:!0,data:r,type:e.type})},r.readAsBinaryString(e)}))}function R(e){return c([w(atob(e.data))],{type:e.type})}function C(e){return e&&e.__local_forage_encoded_blob}function A(e){var t=this,n=t._initReady().then((function(){var e=m[t._dbInfo.name];if(e&&e.dbReady)return e.dbReady}));return f(n,e,e),n}function N(e){_(e);for(var t=m[e.name],n=t.forages,r=0;r<n.length;r++){var o=n[r];o._dbInfo.db&&(o._dbInfo.db.close(),o._dbInfo.db=null)}return e.db=null,P(e).then((function(t){return e.db=t,I(e)?k(e):t})).then((function(r){e.db=t.db=r;for(var o=0;o<n.length;o++)n[o]._dbInfo.db=r})).catch((function(t){throw S(e,t),t}))}function L(e,t,n,r){void 0===r&&(r=1);try{var o=e.db.transaction(e.storeName,t);n(null,o)}catch(o){if(r>0&&(!e.db||"InvalidStateError"===o.name||"NotFoundError"===o.name))return s.resolve().then((function(){if(!e.db||"NotFoundError"===o.name&&!e.db.objectStoreNames.contains(e.storeName)&&e.version<=e.db.version)return e.db&&(e.version=e.db.version+1),k(e)})).then((function(){return N(e).then((function(){L(e,t,n,r-1)}))})).catch(n);n(o)}}function D(){return{forages:[],db:null,dbReady:null,deferredOperations:[]}}function M(e){var t=this,n={db:null};if(e)for(var r in e)n[r]=e[r];var o=m[n.name];o||(o=D(),m[n.name]=o),o.forages.push(t),t._initReady||(t._initReady=t.ready,t.ready=A);var i=[];function a(){return s.resolve()}for(var u=0;u<o.forages.length;u++){var c=o.forages[u];c!==t&&i.push(c._initReady().catch(a))}var l=o.forages.slice(0);return s.all(i).then((function(){return n.db=o.db,P(n)})).then((function(e){return n.db=e,I(n,t._defaultConfig.version)?k(n):e})).then((function(e){n.db=o.db=e,t._dbInfo=n;for(var r=0;r<l.length;r++){var i=l[r];i!==t&&(i._dbInfo.db=n.db,i._dbInfo.version=n.version)}}))}function F(e,t){var n=this;e=p(e);var r=new s((function(t,r){n.ready().then((function(){L(n._dbInfo,g,(function(o,i){if(o)return r(o);try{var a=i.objectStore(n._dbInfo.storeName).get(e);a.onsuccess=function(){var e=a.result;void 0===e&&(e=null),C(e)&&(e=R(e)),t(e)},a.onerror=function(){r(a.error)}}catch(e){r(e)}}))})).catch(r)}));return l(r,t),r}function U(e,t){var n=this,r=new s((function(t,r){n.ready().then((function(){L(n._dbInfo,g,(function(o,i){if(o)return r(o);try{var a=i.objectStore(n._dbInfo.storeName).openCursor(),u=1;a.onsuccess=function(){var n=a.result;if(n){var r=n.value;C(r)&&(r=R(r));var o=e(r,n.key,u++);void 0!==o?t(o):n.continue()}else t()},a.onerror=function(){r(a.error)}}catch(e){r(e)}}))})).catch(r)}));return l(r,t),r}function B(e,t,n){var r=this;e=p(e);var o=new s((function(n,o){var i;r.ready().then((function(){return i=r._dbInfo,"[object Blob]"===v.call(t)?E(i.db).then((function(e){return e?t:T(t)})):t})).then((function(t){L(r._dbInfo,b,(function(i,a){if(i)return o(i);try{var u=a.objectStore(r._dbInfo.storeName);null===t&&(t=void 0);var c=u.put(t,e);a.oncomplete=function(){void 0===t&&(t=null),n(t)},a.onabort=a.onerror=function(){var e=c.error?c.error:c.transaction.error;o(e)}}catch(e){o(e)}}))})).catch(o)}));return l(o,n),o}function H(e,t){var n=this;e=p(e);var r=new s((function(t,r){n.ready().then((function(){L(n._dbInfo,b,(function(o,i){if(o)return r(o);try{var a=i.objectStore(n._dbInfo.storeName).delete(e);i.oncomplete=function(){t()},i.onerror=function(){r(a.error)},i.onabort=function(){var e=a.error?a.error:a.transaction.error;r(e)}}catch(e){r(e)}}))})).catch(r)}));return l(r,t),r}function q(e){var t=this,n=new s((function(e,n){t.ready().then((function(){L(t._dbInfo,b,(function(r,o){if(r)return n(r);try{var i=o.objectStore(t._dbInfo.storeName).clear();o.oncomplete=function(){e()},o.onabort=o.onerror=function(){var e=i.error?i.error:i.transaction.error;n(e)}}catch(e){n(e)}}))})).catch(n)}));return l(n,e),n}function z(e){var t=this,n=new s((function(e,n){t.ready().then((function(){L(t._dbInfo,g,(function(r,o){if(r)return n(r);try{var i=o.objectStore(t._dbInfo.storeName).count();i.onsuccess=function(){e(i.result)},i.onerror=function(){n(i.error)}}catch(e){n(e)}}))})).catch(n)}));return l(n,e),n}function G(e,t){var n=this,r=new s((function(t,r){e<0?t(null):n.ready().then((function(){L(n._dbInfo,g,(function(o,i){if(o)return r(o);try{var a=i.objectStore(n._dbInfo.storeName),u=!1,c=a.openKeyCursor();c.onsuccess=function(){var n=c.result;n?0===e||u?t(n.key):(u=!0,n.advance(e)):t(null)},c.onerror=function(){r(c.error)}}catch(e){r(e)}}))})).catch(r)}));return l(r,t),r}function W(e){var t=this,n=new s((function(e,n){t.ready().then((function(){L(t._dbInfo,g,(function(r,o){if(r)return n(r);try{var i=o.objectStore(t._dbInfo.storeName).openKeyCursor(),a=[];i.onsuccess=function(){var t=i.result;t?(a.push(t.key),t.continue()):e(a)},i.onerror=function(){n(i.error)}}catch(e){n(e)}}))})).catch(n)}));return l(n,e),n}function V(e,t){t=d.apply(this,arguments);var n=this.config();(e="function"!=typeof e&&e||{}).name||(e.name=e.name||n.name,e.storeName=e.storeName||n.storeName);var r,o=this;if(e.name){var i=e.name===n.name&&o._dbInfo.db?s.resolve(o._dbInfo.db):P(e).then((function(t){var n=m[e.name],r=n.forages;n.db=t;for(var o=0;o<r.length;o++)r[o]._dbInfo.db=t;return t}));r=e.storeName?i.then((function(t){if(t.objectStoreNames.contains(e.storeName)){var n=t.version+1;_(e);var r=m[e.name],o=r.forages;t.close();for(var i=0;i<o.length;i++){var u=o[i];u._dbInfo.db=null,u._dbInfo.version=n}return new s((function(t,r){var o=a.open(e.name,n);o.onerror=function(e){o.result.close(),r(e)},o.onupgradeneeded=function(){o.result.deleteObjectStore(e.storeName)},o.onsuccess=function(){var e=o.result;e.close(),t(e)}})).then((function(e){r.db=e;for(var t=0;t<o.length;t++){var n=o[t];n._dbInfo.db=e,x(n._dbInfo)}})).catch((function(t){throw(S(e,t)||s.resolve()).catch((function(){})),t}))}})):i.then((function(t){_(e);var n=m[e.name],r=n.forages;t.close();for(var o=0;o<r.length;o++)r[o]._dbInfo.db=null;return new s((function(t,n){var r=a.deleteDatabase(e.name);r.onerror=function(){var e=r.result;e&&e.close(),n(r.error)},r.onblocked=function(){},r.onsuccess=function(){var e=r.result;e&&e.close(),t(e)}})).then((function(e){n.db=e;for(var t=0;t<r.length;t++)x(r[t]._dbInfo)})).catch((function(t){throw(S(e,t)||s.resolve()).catch((function(){})),t}))}))}else r=s.reject("Invalid arguments");return l(r,t),r}var Y={_driver:"asyncStorage",_initStorage:M,_support:u(),iterate:U,getItem:F,setItem:B,removeItem:H,clear:q,length:z,key:G,keys:W,dropInstance:V};function Z(){return"function"==typeof openDatabase}var $="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",K="~~local_forage_type~",Q=/^~~local_forage_type~([^~]+)~/,X="__lfsc__:",J=X.length,ee="arbf",te="blob",ne="si08",re="ui08",oe="uic8",ie="si16",ae="si32",ue="ur16",ce="ui32",se="fl32",le="fl64",fe=J+ee.length,pe=Object.prototype.toString;function de(e){var t,n,r,o,i,a=.75*e.length,u=e.length,c=0;"="===e[e.length-1]&&(a--,"="===e[e.length-2]&&a--);var s=new ArrayBuffer(a),l=new Uint8Array(s);for(t=0;t<u;t+=4)n=$.indexOf(e[t]),r=$.indexOf(e[t+1]),o=$.indexOf(e[t+2]),i=$.indexOf(e[t+3]),l[c++]=n<<2|r>>4,l[c++]=(15&r)<<4|o>>2,l[c++]=(3&o)<<6|63&i;return s}function he(e){var t,n=new Uint8Array(e),r="";for(t=0;t<n.length;t+=3)r+=$[n[t]>>2],r+=$[(3&n[t])<<4|n[t+1]>>4],r+=$[(15&n[t+1])<<2|n[t+2]>>6],r+=$[63&n[t+2]];return n.length%3==2?r=r.substring(0,r.length-1)+"=":n.length%3==1&&(r=r.substring(0,r.length-2)+"=="),r}function ye(e,t){var n="";if(e&&(n=pe.call(e)),e&&("[object ArrayBuffer]"===n||e.buffer&&"[object ArrayBuffer]"===pe.call(e.buffer))){var r,o=X;e instanceof ArrayBuffer?(r=e,o+=ee):(r=e.buffer,"[object Int8Array]"===n?o+=ne:"[object Uint8Array]"===n?o+=re:"[object Uint8ClampedArray]"===n?o+=oe:"[object Int16Array]"===n?o+=ie:"[object Uint16Array]"===n?o+=ue:"[object Int32Array]"===n?o+=ae:"[object Uint32Array]"===n?o+=ce:"[object Float32Array]"===n?o+=se:"[object Float64Array]"===n?o+=le:t(new Error("Failed to get type for BinaryArray"))),t(o+he(r))}else if("[object Blob]"===n){var i=new FileReader;i.onload=function(){var n=K+e.type+"~"+he(this.result);t(X+te+n)},i.readAsArrayBuffer(e)}else try{t(JSON.stringify(e))}catch(e){t(null,e)}}function me(e){if(e.substring(0,J)!==X)return JSON.parse(e);var t,n=e.substring(fe),r=e.substring(J,fe);if(r===te&&Q.test(n)){var o=n.match(Q);t=o[1],n=n.substring(o[0].length)}var i=de(n);switch(r){case ee:return i;case te:return c([i],{type:t});case ne:return new Int8Array(i);case re:return new Uint8Array(i);case oe:return new Uint8ClampedArray(i);case ie:return new Int16Array(i);case ue:return new Uint16Array(i);case ae:return new Int32Array(i);case ce:return new Uint32Array(i);case se:return new Float32Array(i);case le:return new Float64Array(i);default:throw new Error("Unkown type: "+r)}}var ve={serialize:ye,deserialize:me,stringToBuffer:de,bufferToString:he};function ge(e,t,n,r){e.executeSql("CREATE TABLE IF NOT EXISTS "+t.storeName+" (id INTEGER PRIMARY KEY, key unique, value)",[],n,r)}function be(e){var t=this,n={db:null};if(e)for(var r in e)n[r]="string"!=typeof e[r]?e[r].toString():e[r];var o=new s((function(e,r){try{n.db=openDatabase(n.name,String(n.version),n.description,n.size)}catch(e){return r(e)}n.db.transaction((function(o){ge(o,n,(function(){t._dbInfo=n,e()}),(function(e,t){r(t)}))}),r)}));return n.serializer=ve,o}function we(e,t,n,r,o,i){e.executeSql(n,r,o,(function(e,a){a.code===a.SYNTAX_ERR?e.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name = ?",[t.storeName],(function(e,u){u.rows.length?i(e,a):ge(e,t,(function(){e.executeSql(n,r,o,i)}),i)}),i):i(e,a)}),i)}function Oe(e,t){var n=this;e=p(e);var r=new s((function(t,r){n.ready().then((function(){var o=n._dbInfo;o.db.transaction((function(n){we(n,o,"SELECT * FROM "+o.storeName+" WHERE key = ? LIMIT 1",[e],(function(e,n){var r=n.rows.length?n.rows.item(0).value:null;r&&(r=o.serializer.deserialize(r)),t(r)}),(function(e,t){r(t)}))}))})).catch(r)}));return l(r,t),r}function Ee(e,t){var n=this,r=new s((function(t,r){n.ready().then((function(){var o=n._dbInfo;o.db.transaction((function(n){we(n,o,"SELECT * FROM "+o.storeName,[],(function(n,r){for(var i=r.rows,a=i.length,u=0;u<a;u++){var c=i.item(u),s=c.value;if(s&&(s=o.serializer.deserialize(s)),void 0!==(s=e(s,c.key,u+1)))return void t(s)}t()}),(function(e,t){r(t)}))}))})).catch(r)}));return l(r,t),r}function _e(e,t,n,r){var o=this;e=p(e);var i=new s((function(i,a){o.ready().then((function(){void 0===t&&(t=null);var u=t,c=o._dbInfo;c.serializer.serialize(t,(function(t,s){s?a(s):c.db.transaction((function(n){we(n,c,"INSERT OR REPLACE INTO "+c.storeName+" (key, value) VALUES (?, ?)",[e,t],(function(){i(u)}),(function(e,t){a(t)}))}),(function(t){if(t.code===t.QUOTA_ERR){if(r>0)return void i(_e.apply(o,[e,u,n,r-1]));a(t)}}))}))})).catch(a)}));return l(i,n),i}function xe(e,t,n){return _e.apply(this,[e,t,n,1])}function Se(e,t){var n=this;e=p(e);var r=new s((function(t,r){n.ready().then((function(){var o=n._dbInfo;o.db.transaction((function(n){we(n,o,"DELETE FROM "+o.storeName+" WHERE key = ?",[e],(function(){t()}),(function(e,t){r(t)}))}))})).catch(r)}));return l(r,t),r}function je(e){var t=this,n=new s((function(e,n){t.ready().then((function(){var r=t._dbInfo;r.db.transaction((function(t){we(t,r,"DELETE FROM "+r.storeName,[],(function(){e()}),(function(e,t){n(t)}))}))})).catch(n)}));return l(n,e),n}function Pe(e){var t=this,n=new s((function(e,n){t.ready().then((function(){var r=t._dbInfo;r.db.transaction((function(t){we(t,r,"SELECT COUNT(key) as c FROM "+r.storeName,[],(function(t,n){var r=n.rows.item(0).c;e(r)}),(function(e,t){n(t)}))}))})).catch(n)}));return l(n,e),n}function ke(e,t){var n=this,r=new s((function(t,r){n.ready().then((function(){var o=n._dbInfo;o.db.transaction((function(n){we(n,o,"SELECT key FROM "+o.storeName+" WHERE id = ? LIMIT 1",[e+1],(function(e,n){var r=n.rows.length?n.rows.item(0).key:null;t(r)}),(function(e,t){r(t)}))}))})).catch(r)}));return l(r,t),r}function Ie(e){var t=this,n=new s((function(e,n){t.ready().then((function(){var r=t._dbInfo;r.db.transaction((function(t){we(t,r,"SELECT key FROM "+r.storeName,[],(function(t,n){for(var r=[],o=0;o<n.rows.length;o++)r.push(n.rows.item(o).key);e(r)}),(function(e,t){n(t)}))}))})).catch(n)}));return l(n,e),n}function Te(e){return new s((function(t,n){e.transaction((function(r){r.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'",[],(function(n,r){for(var o=[],i=0;i<r.rows.length;i++)o.push(r.rows.item(i).name);t({db:e,storeNames:o})}),(function(e,t){n(t)}))}),(function(e){n(e)}))}))}function Re(e,t){t=d.apply(this,arguments);var n=this.config();(e="function"!=typeof e&&e||{}).name||(e.name=e.name||n.name,e.storeName=e.storeName||n.storeName);var r,o=this;return l(r=e.name?new s((function(t){var r;r=e.name===n.name?o._dbInfo.db:openDatabase(e.name,"","",0),e.storeName?t({db:r,storeNames:[e.storeName]}):t(Te(r))})).then((function(e){return new s((function(t,n){e.db.transaction((function(r){function o(e){return new s((function(t,n){r.executeSql("DROP TABLE IF EXISTS "+e,[],(function(){t()}),(function(e,t){n(t)}))}))}for(var i=[],a=0,u=e.storeNames.length;a<u;a++)i.push(o(e.storeNames[a]));s.all(i).then((function(){t()})).catch((function(e){n(e)}))}),(function(e){n(e)}))}))})):s.reject("Invalid arguments"),t),r}var Ce={_driver:"webSQLStorage",_initStorage:be,_support:Z(),iterate:Ee,getItem:Oe,setItem:xe,removeItem:Se,clear:je,length:Pe,key:ke,keys:Ie,dropInstance:Re};function Ae(){try{return"undefined"!=typeof localStorage&&"setItem"in localStorage&&!!localStorage.setItem}catch(e){return!1}}function Ne(e,t){var n=e.name+"/";return e.storeName!==t.storeName&&(n+=e.storeName+"/"),n}function Le(){var e="_localforage_support_test";try{return localStorage.setItem(e,!0),localStorage.removeItem(e),!1}catch(e){return!0}}function De(){return!Le()||localStorage.length>0}function Me(e){var t=this,n={};if(e)for(var r in e)n[r]=e[r];return n.keyPrefix=Ne(e,t._defaultConfig),De()?(t._dbInfo=n,n.serializer=ve,s.resolve()):s.reject()}function Fe(e){var t=this,n=t.ready().then((function(){for(var e=t._dbInfo.keyPrefix,n=localStorage.length-1;n>=0;n--){var r=localStorage.key(n);0===r.indexOf(e)&&localStorage.removeItem(r)}}));return l(n,e),n}function Ue(e,t){var n=this;e=p(e);var r=n.ready().then((function(){var t=n._dbInfo,r=localStorage.getItem(t.keyPrefix+e);return r&&(r=t.serializer.deserialize(r)),r}));return l(r,t),r}function Be(e,t){var n=this,r=n.ready().then((function(){for(var t=n._dbInfo,r=t.keyPrefix,o=r.length,i=localStorage.length,a=1,u=0;u<i;u++){var c=localStorage.key(u);if(0===c.indexOf(r)){var s=localStorage.getItem(c);if(s&&(s=t.serializer.deserialize(s)),void 0!==(s=e(s,c.substring(o),a++)))return s}}}));return l(r,t),r}function He(e,t){var n=this,r=n.ready().then((function(){var t,r=n._dbInfo;try{t=localStorage.key(e)}catch(e){t=null}return t&&(t=t.substring(r.keyPrefix.length)),t}));return l(r,t),r}function qe(e){var t=this,n=t.ready().then((function(){for(var e=t._dbInfo,n=localStorage.length,r=[],o=0;o<n;o++){var i=localStorage.key(o);0===i.indexOf(e.keyPrefix)&&r.push(i.substring(e.keyPrefix.length))}return r}));return l(n,e),n}function ze(e){var t=this.keys().then((function(e){return e.length}));return l(t,e),t}function Ge(e,t){var n=this;e=p(e);var r=n.ready().then((function(){var t=n._dbInfo;localStorage.removeItem(t.keyPrefix+e)}));return l(r,t),r}function We(e,t,n){var r=this;e=p(e);var o=r.ready().then((function(){void 0===t&&(t=null);var n=t;return new s((function(o,i){var a=r._dbInfo;a.serializer.serialize(t,(function(t,r){if(r)i(r);else try{localStorage.setItem(a.keyPrefix+e,t),o(n)}catch(e){"QuotaExceededError"!==e.name&&"NS_ERROR_DOM_QUOTA_REACHED"!==e.name||i(e),i(e)}}))}))}));return l(o,n),o}function Ve(e,t){if(t=d.apply(this,arguments),!(e="function"!=typeof e&&e||{}).name){var n=this.config();e.name=e.name||n.name,e.storeName=e.storeName||n.storeName}var r,o=this;return l(r=e.name?new s((function(t){e.storeName?t(Ne(e,o._defaultConfig)):t(e.name+"/")})).then((function(e){for(var t=localStorage.length-1;t>=0;t--){var n=localStorage.key(t);0===n.indexOf(e)&&localStorage.removeItem(n)}})):s.reject("Invalid arguments"),t),r}var Ye={_driver:"localStorageWrapper",_initStorage:Me,_support:Ae(),iterate:Be,getItem:Ue,setItem:We,removeItem:Ge,clear:Fe,length:ze,key:He,keys:qe,dropInstance:Ve},Ze=function(e,t){return e===t||"number"==typeof e&&"number"==typeof t&&isNaN(e)&&isNaN(t)},$e=function(e,t){for(var n=e.length,r=0;r<n;){if(Ze(e[r],t))return!0;r++}return!1},Ke=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)},Qe={},Xe={},Je={INDEXEDDB:Y,WEBSQL:Ce,LOCALSTORAGE:Ye},et=[Je.INDEXEDDB._driver,Je.WEBSQL._driver,Je.LOCALSTORAGE._driver],tt=["dropInstance"],nt=["clear","getItem","iterate","key","keys","length","removeItem","setItem"].concat(tt),rt={description:"",driver:et.slice(),name:"localforage",size:4980736,storeName:"keyvaluepairs",version:1};function ot(e,t){e[t]=function(){var n=arguments;return e.ready().then((function(){return e[t].apply(e,n)}))}}function it(){for(var e=1;e<arguments.length;e++){var t=arguments[e];if(t)for(var n in t)t.hasOwnProperty(n)&&(Ke(t[n])?arguments[0][n]=t[n].slice():arguments[0][n]=t[n])}return arguments[0]}var at=new(function(){function e(t){for(var n in o(this,e),Je)if(Je.hasOwnProperty(n)){var r=Je[n],i=r._driver;this[n]=i,Qe[i]||this.defineDriver(r)}this._defaultConfig=it({},rt),this._config=it({},this._defaultConfig,t),this._driverSet=null,this._initDriver=null,this._ready=!1,this._dbInfo=null,this._wrapLibraryMethodsWithReady(),this.setDriver(this._config.driver).catch((function(){}))}return e.prototype.config=function(e){if("object"===(void 0===e?"undefined":r(e))){if(this._ready)return new Error("Can't call config() after localforage has been used.");for(var t in e){if("storeName"===t&&(e[t]=e[t].replace(/\W/g,"_")),"version"===t&&"number"!=typeof e[t])return new Error("Database version must be a number.");this._config[t]=e[t]}return!("driver"in e)||!e.driver||this.setDriver(this._config.driver)}return"string"==typeof e?this._config[e]:this._config},e.prototype.defineDriver=function(e,t,n){var r=new s((function(t,n){try{var r=e._driver,o=new Error("Custom driver not compliant; see https://mozilla.github.io/localForage/#definedriver");if(!e._driver)return void n(o);for(var i=nt.concat("_initStorage"),a=0,u=i.length;a<u;a++){var c=i[a];if((!$e(tt,c)||e[c])&&"function"!=typeof e[c])return void n(o)}!function(){for(var t=function(e){return function(){var t=new Error("Method "+e+" is not implemented by the current driver"),n=s.reject(t);return l(n,arguments[arguments.length-1]),n}},n=0,r=tt.length;n<r;n++){var o=tt[n];e[o]||(e[o]=t(o))}}();var f=function(n){Qe[r],Qe[r]=e,Xe[r]=n,t()};"_support"in e?e._support&&"function"==typeof e._support?e._support().then(f,n):f(!!e._support):f(!0)}catch(e){n(e)}}));return f(r,t,n),r},e.prototype.driver=function(){return this._driver||null},e.prototype.getDriver=function(e,t,n){var r=Qe[e]?s.resolve(Qe[e]):s.reject(new Error("Driver not found."));return f(r,t,n),r},e.prototype.getSerializer=function(e){var t=s.resolve(ve);return f(t,e),t},e.prototype.ready=function(e){var t=this,n=t._driverSet.then((function(){return null===t._ready&&(t._ready=t._initDriver()),t._ready}));return f(n,e,e),n},e.prototype.setDriver=function(e,t,n){var r=this;Ke(e)||(e=[e]);var o=this._getSupportedDrivers(e);function i(){r._config.driver=r.driver()}function a(e){return r._extend(e),i(),r._ready=r._initStorage(r._config),r._ready}function u(e){return function(){var t=0;function n(){for(;t<e.length;){var o=e[t];return t++,r._dbInfo=null,r._ready=null,r.getDriver(o).then(a).catch(n)}i();var u=new Error("No available storage method found.");return r._driverSet=s.reject(u),r._driverSet}return n()}}var c=null!==this._driverSet?this._driverSet.catch((function(){return s.resolve()})):s.resolve();return this._driverSet=c.then((function(){var e=o[0];return r._dbInfo=null,r._ready=null,r.getDriver(e).then((function(e){r._driver=e._driver,i(),r._wrapLibraryMethodsWithReady(),r._initDriver=u(o)}))})).catch((function(){i();var e=new Error("No available storage method found.");return r._driverSet=s.reject(e),r._driverSet})),f(this._driverSet,t,n),this._driverSet},e.prototype.supports=function(e){return!!Xe[e]},e.prototype._extend=function(e){it(this,e)},e.prototype._getSupportedDrivers=function(e){for(var t=[],n=0,r=e.length;n<r;n++){var o=e[n];this.supports(o)&&t.push(o)}return t},e.prototype._wrapLibraryMethodsWithReady=function(){for(var e=0,t=nt.length;e<t;e++)ot(this,nt[e])},e.prototype.createInstance=function(t){return new e(t)},e}());t.exports=at},{3:3}]},{},[4])(4)},87003:(e,t,n)=>{var r=/^\s+|\s+$/g,o=/^[-+]0x[0-9a-f]+$/i,i=/^0b[01]+$/i,a=/^0o[0-7]+$/i,u=parseInt,c="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,s="object"==typeof self&&self&&self.Object===Object&&self,l=c||s||Function("return this")(),f=Object.prototype.toString,p=Math.max,d=Math.min,h=function(){return l.Date.now()};function y(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function m(e){if("number"==typeof e)return e;if(function(e){return"symbol"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&"[object Symbol]"==f.call(e)}(e))return NaN;if(y(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=y(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(r,"");var n=i.test(e);return n||a.test(e)?u(e.slice(2),n?2:8):o.test(e)?NaN:+e}e.exports=function(e,t,n){var r,o,i,a,u,c,s=0,l=!1,f=!1,v=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function g(t){var n=r,i=o;return r=o=void 0,s=t,a=e.apply(i,n)}function b(e){return s=e,u=setTimeout(O,t),l?g(e):a}function w(e){var n=e-c;return void 0===c||n>=t||n<0||f&&e-s>=i}function O(){var e=h();if(w(e))return E(e);u=setTimeout(O,function(e){var n=t-(e-c);return f?d(n,i-(e-s)):n}(e))}function E(e){return u=void 0,v&&r?g(e):(r=o=void 0,a)}function _(){var e=h(),n=w(e);if(r=arguments,o=this,c=e,n){if(void 0===u)return b(c);if(f)return u=setTimeout(O,t),g(c)}return void 0===u&&(u=setTimeout(O,t)),a}return t=m(t)||0,y(n)&&(l=!!n.leading,i=(f="maxWait"in n)?p(m(n.maxWait)||0,t):i,v="trailing"in n?!!n.trailing:v),_.cancel=function(){void 0!==u&&clearTimeout(u),s=0,r=c=o=u=void 0},_.flush=function(){return void 0===u?a:E(h())},_}},8617:e=>{function t(e){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}t.keys=()=>[],t.resolve=t,t.id=8617,e.exports=t},59348:function(e,t,n){(e=n.nmd(e)).exports=function(){"use strict";var t,r;function o(){return t.apply(null,arguments)}function i(e){t=e}function a(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function u(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function c(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function s(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;var t;for(t in e)if(c(e,t))return!1;return!0}function l(e){return void 0===e}function f(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function p(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function d(e,t){var n,r=[],o=e.length;for(n=0;n<o;++n)r.push(t(e[n],n));return r}function h(e,t){for(var n in t)c(t,n)&&(e[n]=t[n]);return c(t,"toString")&&(e.toString=t.toString),c(t,"valueOf")&&(e.valueOf=t.valueOf),e}function y(e,t,n,r){return $n(e,t,n,r,!0).utc()}function m(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}}function v(e){return null==e._pf&&(e._pf=m()),e._pf}function g(e){if(null==e._isValid){var t=v(e),n=r.call(t.parsedDateParts,(function(e){return null!=e})),o=!isNaN(e._d.getTime())&&t.overflow<0&&!t.empty&&!t.invalidEra&&!t.invalidMonth&&!t.invalidWeekday&&!t.weekdayMismatch&&!t.nullInput&&!t.invalidFormat&&!t.userInvalidated&&(!t.meridiem||t.meridiem&&n);if(e._strict&&(o=o&&0===t.charsLeftOver&&0===t.unusedTokens.length&&void 0===t.bigHour),null!=Object.isFrozen&&Object.isFrozen(e))return o;e._isValid=o}return e._isValid}function b(e){var t=y(NaN);return null!=e?h(v(t),e):v(t).userInvalidated=!0,t}r=Array.prototype.some?Array.prototype.some:function(e){var t,n=Object(this),r=n.length>>>0;for(t=0;t<r;t++)if(t in n&&e.call(this,n[t],t,n))return!0;return!1};var w=o.momentProperties=[],O=!1;function E(e,t){var n,r,o,i=w.length;if(l(t._isAMomentObject)||(e._isAMomentObject=t._isAMomentObject),l(t._i)||(e._i=t._i),l(t._f)||(e._f=t._f),l(t._l)||(e._l=t._l),l(t._strict)||(e._strict=t._strict),l(t._tzm)||(e._tzm=t._tzm),l(t._isUTC)||(e._isUTC=t._isUTC),l(t._offset)||(e._offset=t._offset),l(t._pf)||(e._pf=v(t)),l(t._locale)||(e._locale=t._locale),i>0)for(n=0;n<i;n++)l(o=t[r=w[n]])||(e[r]=o);return e}function _(e){E(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===O&&(O=!0,o.updateOffset(this),O=!1)}function x(e){return e instanceof _||null!=e&&null!=e._isAMomentObject}function S(e){!1===o.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn}function j(e,t){var n=!0;return h((function(){if(null!=o.deprecationHandler&&o.deprecationHandler(null,e),n){var r,i,a,u=[],s=arguments.length;for(i=0;i<s;i++){if(r="","object"==typeof arguments[i]){for(a in r+="\n["+i+"] ",arguments[0])c(arguments[0],a)&&(r+=a+": "+arguments[0][a]+", ");r=r.slice(0,-2)}else r=arguments[i];u.push(r)}S(e+"\nArguments: "+Array.prototype.slice.call(u).join("")+"\n"+(new Error).stack),n=!1}return t.apply(this,arguments)}),t)}var P,k={};function I(e,t){null!=o.deprecationHandler&&o.deprecationHandler(e,t),k[e]||(S(t),k[e]=!0)}function T(e){return"undefined"!=typeof Function&&e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}function R(e){var t,n;for(n in e)c(e,n)&&(T(t=e[n])?this[n]=t:this["_"+n]=t);this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)}function C(e,t){var n,r=h({},e);for(n in t)c(t,n)&&(u(e[n])&&u(t[n])?(r[n]={},h(r[n],e[n]),h(r[n],t[n])):null!=t[n]?r[n]=t[n]:delete r[n]);for(n in e)c(e,n)&&!c(t,n)&&u(e[n])&&(r[n]=h({},r[n]));return r}function A(e){null!=e&&this.set(e)}o.suppressDeprecationWarnings=!1,o.deprecationHandler=null,P=Object.keys?Object.keys:function(e){var t,n=[];for(t in e)c(e,t)&&n.push(t);return n};var N={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"};function L(e,t,n){var r=this._calendar[e]||this._calendar.sameElse;return T(r)?r.call(t,n):r}function D(e,t,n){var r=""+Math.abs(e),o=t-r.length;return(e>=0?n?"+":"":"-")+Math.pow(10,Math.max(0,o)).toString().substr(1)+r}var M=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,F=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,U={},B={};function H(e,t,n,r){var o=r;"string"==typeof r&&(o=function(){return this[r]()}),e&&(B[e]=o),t&&(B[t[0]]=function(){return D(o.apply(this,arguments),t[1],t[2])}),n&&(B[n]=function(){return this.localeData().ordinal(o.apply(this,arguments),e)})}function q(e){return e.match(/\[[\s\S]/)?e.replace(/^\[|\]$/g,""):e.replace(/\\/g,"")}function z(e){var t,n,r=e.match(M);for(t=0,n=r.length;t<n;t++)B[r[t]]?r[t]=B[r[t]]:r[t]=q(r[t]);return function(t){var o,i="";for(o=0;o<n;o++)i+=T(r[o])?r[o].call(t,e):r[o];return i}}function G(e,t){return e.isValid()?(t=W(t,e.localeData()),U[t]=U[t]||z(t),U[t](e)):e.localeData().invalidDate()}function W(e,t){var n=5;function r(e){return t.longDateFormat(e)||e}for(F.lastIndex=0;n>=0&&F.test(e);)e=e.replace(F,r),F.lastIndex=0,n-=1;return e}var V={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};function Y(e){var t=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];return t||!n?t:(this._longDateFormat[e]=n.match(M).map((function(e){return"MMMM"===e||"MM"===e||"DD"===e||"dddd"===e?e.slice(1):e})).join(""),this._longDateFormat[e])}var Z="Invalid date";function $(){return this._invalidDate}var K="%d",Q=/\d{1,2}/;function X(e){return this._ordinal.replace("%d",e)}var J={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function ee(e,t,n,r){var o=this._relativeTime[n];return T(o)?o(e,t,n,r):o.replace(/%d/i,e)}function te(e,t){var n=this._relativeTime[e>0?"future":"past"];return T(n)?n(t):n.replace(/%s/i,t)}var ne={};function re(e,t){var n=e.toLowerCase();ne[n]=ne[n+"s"]=ne[t]=e}function oe(e){return"string"==typeof e?ne[e]||ne[e.toLowerCase()]:void 0}function ie(e){var t,n,r={};for(n in e)c(e,n)&&(t=oe(n))&&(r[t]=e[n]);return r}var ae={};function ue(e,t){ae[e]=t}function ce(e){var t,n=[];for(t in e)c(e,t)&&n.push({unit:t,priority:ae[t]});return n.sort((function(e,t){return e.priority-t.priority})),n}function se(e){return e%4==0&&e%100!=0||e%400==0}function le(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function fe(e){var t=+e,n=0;return 0!==t&&isFinite(t)&&(n=le(t)),n}function pe(e,t){return function(n){return null!=n?(he(this,e,n),o.updateOffset(this,t),this):de(this,e)}}function de(e,t){return e.isValid()?e._d["get"+(e._isUTC?"UTC":"")+t]():NaN}function he(e,t,n){e.isValid()&&!isNaN(n)&&("FullYear"===t&&se(e.year())&&1===e.month()&&29===e.date()?(n=fe(n),e._d["set"+(e._isUTC?"UTC":"")+t](n,e.month(),et(n,e.month()))):e._d["set"+(e._isUTC?"UTC":"")+t](n))}function ye(e){return T(this[e=oe(e)])?this[e]():this}function me(e,t){if("object"==typeof e){var n,r=ce(e=ie(e)),o=r.length;for(n=0;n<o;n++)this[r[n].unit](e[r[n].unit])}else if(T(this[e=oe(e)]))return this[e](t);return this}var ve,ge=/\d/,be=/\d\d/,we=/\d{3}/,Oe=/\d{4}/,Ee=/[+-]?\d{6}/,_e=/\d\d?/,xe=/\d\d\d\d?/,Se=/\d\d\d\d\d\d?/,je=/\d{1,3}/,Pe=/\d{1,4}/,ke=/[+-]?\d{1,6}/,Ie=/\d+/,Te=/[+-]?\d+/,Re=/Z|[+-]\d\d:?\d\d/gi,Ce=/Z|[+-]\d\d(?::?\d\d)?/gi,Ae=/[+-]?\d+(\.\d{1,3})?/,Ne=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i;function Le(e,t,n){ve[e]=T(t)?t:function(e,r){return e&&n?n:t}}function De(e,t){return c(ve,e)?ve[e](t._strict,t._locale):new RegExp(Me(e))}function Me(e){return Fe(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,(function(e,t,n,r,o){return t||n||r||o})))}function Fe(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}ve={};var Ue={};function Be(e,t){var n,r,o=t;for("string"==typeof e&&(e=[e]),f(t)&&(o=function(e,n){n[t]=fe(e)}),r=e.length,n=0;n<r;n++)Ue[e[n]]=o}function He(e,t){Be(e,(function(e,n,r,o){r._w=r._w||{},t(e,r._w,r,o)}))}function qe(e,t,n){null!=t&&c(Ue,e)&&Ue[e](t,n._a,n,e)}var ze,Ge=0,We=1,Ve=2,Ye=3,Ze=4,$e=5,Ke=6,Qe=7,Xe=8;function Je(e,t){return(e%t+t)%t}function et(e,t){if(isNaN(e)||isNaN(t))return NaN;var n=Je(t,12);return e+=(t-n)/12,1===n?se(e)?29:28:31-n%7%2}ze=Array.prototype.indexOf?Array.prototype.indexOf:function(e){var t;for(t=0;t<this.length;++t)if(this[t]===e)return t;return-1},H("M",["MM",2],"Mo",(function(){return this.month()+1})),H("MMM",0,0,(function(e){return this.localeData().monthsShort(this,e)})),H("MMMM",0,0,(function(e){return this.localeData().months(this,e)})),re("month","M"),ue("month",8),Le("M",_e),Le("MM",_e,be),Le("MMM",(function(e,t){return t.monthsShortRegex(e)})),Le("MMMM",(function(e,t){return t.monthsRegex(e)})),Be(["M","MM"],(function(e,t){t[We]=fe(e)-1})),Be(["MMM","MMMM"],(function(e,t,n,r){var o=n._locale.monthsParse(e,r,n._strict);null!=o?t[We]=o:v(n).invalidMonth=e}));var tt="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),nt="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),rt=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,ot=Ne,it=Ne;function at(e,t){return e?a(this._months)?this._months[e.month()]:this._months[(this._months.isFormat||rt).test(t)?"format":"standalone"][e.month()]:a(this._months)?this._months:this._months.standalone}function ut(e,t){return e?a(this._monthsShort)?this._monthsShort[e.month()]:this._monthsShort[rt.test(t)?"format":"standalone"][e.month()]:a(this._monthsShort)?this._monthsShort:this._monthsShort.standalone}function ct(e,t,n){var r,o,i,a=e.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],r=0;r<12;++r)i=y([2e3,r]),this._shortMonthsParse[r]=this.monthsShort(i,"").toLocaleLowerCase(),this._longMonthsParse[r]=this.months(i,"").toLocaleLowerCase();return n?"MMM"===t?-1!==(o=ze.call(this._shortMonthsParse,a))?o:null:-1!==(o=ze.call(this._longMonthsParse,a))?o:null:"MMM"===t?-1!==(o=ze.call(this._shortMonthsParse,a))||-1!==(o=ze.call(this._longMonthsParse,a))?o:null:-1!==(o=ze.call(this._longMonthsParse,a))||-1!==(o=ze.call(this._shortMonthsParse,a))?o:null}function st(e,t,n){var r,o,i;if(this._monthsParseExact)return ct.call(this,e,t,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),r=0;r<12;r++){if(o=y([2e3,r]),n&&!this._longMonthsParse[r]&&(this._longMonthsParse[r]=new RegExp("^"+this.months(o,"").replace(".","")+"$","i"),this._shortMonthsParse[r]=new RegExp("^"+this.monthsShort(o,"").replace(".","")+"$","i")),n||this._monthsParse[r]||(i="^"+this.months(o,"")+"|^"+this.monthsShort(o,""),this._monthsParse[r]=new RegExp(i.replace(".",""),"i")),n&&"MMMM"===t&&this._longMonthsParse[r].test(e))return r;if(n&&"MMM"===t&&this._shortMonthsParse[r].test(e))return r;if(!n&&this._monthsParse[r].test(e))return r}}function lt(e,t){var n;if(!e.isValid())return e;if("string"==typeof t)if(/^\d+$/.test(t))t=fe(t);else if(!f(t=e.localeData().monthsParse(t)))return e;return n=Math.min(e.date(),et(e.year(),t)),e._d["set"+(e._isUTC?"UTC":"")+"Month"](t,n),e}function ft(e){return null!=e?(lt(this,e),o.updateOffset(this,!0),this):de(this,"Month")}function pt(){return et(this.year(),this.month())}function dt(e){return this._monthsParseExact?(c(this,"_monthsRegex")||yt.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(c(this,"_monthsShortRegex")||(this._monthsShortRegex=ot),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)}function ht(e){return this._monthsParseExact?(c(this,"_monthsRegex")||yt.call(this),e?this._monthsStrictRegex:this._monthsRegex):(c(this,"_monthsRegex")||(this._monthsRegex=it),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)}function yt(){function e(e,t){return t.length-e.length}var t,n,r=[],o=[],i=[];for(t=0;t<12;t++)n=y([2e3,t]),r.push(this.monthsShort(n,"")),o.push(this.months(n,"")),i.push(this.months(n,"")),i.push(this.monthsShort(n,""));for(r.sort(e),o.sort(e),i.sort(e),t=0;t<12;t++)r[t]=Fe(r[t]),o[t]=Fe(o[t]);for(t=0;t<24;t++)i[t]=Fe(i[t]);this._monthsRegex=new RegExp("^("+i.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+o.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+r.join("|")+")","i")}function mt(e){return se(e)?366:365}H("Y",0,0,(function(){var e=this.year();return e<=9999?D(e,4):"+"+e})),H(0,["YY",2],0,(function(){return this.year()%100})),H(0,["YYYY",4],0,"year"),H(0,["YYYYY",5],0,"year"),H(0,["YYYYYY",6,!0],0,"year"),re("year","y"),ue("year",1),Le("Y",Te),Le("YY",_e,be),Le("YYYY",Pe,Oe),Le("YYYYY",ke,Ee),Le("YYYYYY",ke,Ee),Be(["YYYYY","YYYYYY"],Ge),Be("YYYY",(function(e,t){t[Ge]=2===e.length?o.parseTwoDigitYear(e):fe(e)})),Be("YY",(function(e,t){t[Ge]=o.parseTwoDigitYear(e)})),Be("Y",(function(e,t){t[Ge]=parseInt(e,10)})),o.parseTwoDigitYear=function(e){return fe(e)+(fe(e)>68?1900:2e3)};var vt=pe("FullYear",!0);function gt(){return se(this.year())}function bt(e,t,n,r,o,i,a){var u;return e<100&&e>=0?(u=new Date(e+400,t,n,r,o,i,a),isFinite(u.getFullYear())&&u.setFullYear(e)):u=new Date(e,t,n,r,o,i,a),u}function wt(e){var t,n;return e<100&&e>=0?((n=Array.prototype.slice.call(arguments))[0]=e+400,t=new Date(Date.UTC.apply(null,n)),isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e)):t=new Date(Date.UTC.apply(null,arguments)),t}function Ot(e,t,n){var r=7+t-n;return-(7+wt(e,0,r).getUTCDay()-t)%7+r-1}function Et(e,t,n,r,o){var i,a,u=1+7*(t-1)+(7+n-r)%7+Ot(e,r,o);return u<=0?a=mt(i=e-1)+u:u>mt(e)?(i=e+1,a=u-mt(e)):(i=e,a=u),{year:i,dayOfYear:a}}function _t(e,t,n){var r,o,i=Ot(e.year(),t,n),a=Math.floor((e.dayOfYear()-i-1)/7)+1;return a<1?r=a+xt(o=e.year()-1,t,n):a>xt(e.year(),t,n)?(r=a-xt(e.year(),t,n),o=e.year()+1):(o=e.year(),r=a),{week:r,year:o}}function xt(e,t,n){var r=Ot(e,t,n),o=Ot(e+1,t,n);return(mt(e)-r+o)/7}function St(e){return _t(e,this._week.dow,this._week.doy).week}H("w",["ww",2],"wo","week"),H("W",["WW",2],"Wo","isoWeek"),re("week","w"),re("isoWeek","W"),ue("week",5),ue("isoWeek",5),Le("w",_e),Le("ww",_e,be),Le("W",_e),Le("WW",_e,be),He(["w","ww","W","WW"],(function(e,t,n,r){t[r.substr(0,1)]=fe(e)}));var jt={dow:0,doy:6};function Pt(){return this._week.dow}function kt(){return this._week.doy}function It(e){var t=this.localeData().week(this);return null==e?t:this.add(7*(e-t),"d")}function Tt(e){var t=_t(this,1,4).week;return null==e?t:this.add(7*(e-t),"d")}function Rt(e,t){return"string"!=typeof e?e:isNaN(e)?"number"==typeof(e=t.weekdaysParse(e))?e:null:parseInt(e,10)}function Ct(e,t){return"string"==typeof e?t.weekdaysParse(e)%7||7:isNaN(e)?null:e}function At(e,t){return e.slice(t,7).concat(e.slice(0,t))}H("d",0,"do","day"),H("dd",0,0,(function(e){return this.localeData().weekdaysMin(this,e)})),H("ddd",0,0,(function(e){return this.localeData().weekdaysShort(this,e)})),H("dddd",0,0,(function(e){return this.localeData().weekdays(this,e)})),H("e",0,0,"weekday"),H("E",0,0,"isoWeekday"),re("day","d"),re("weekday","e"),re("isoWeekday","E"),ue("day",11),ue("weekday",11),ue("isoWeekday",11),Le("d",_e),Le("e",_e),Le("E",_e),Le("dd",(function(e,t){return t.weekdaysMinRegex(e)})),Le("ddd",(function(e,t){return t.weekdaysShortRegex(e)})),Le("dddd",(function(e,t){return t.weekdaysRegex(e)})),He(["dd","ddd","dddd"],(function(e,t,n,r){var o=n._locale.weekdaysParse(e,r,n._strict);null!=o?t.d=o:v(n).invalidWeekday=e})),He(["d","e","E"],(function(e,t,n,r){t[r]=fe(e)}));var Nt="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Lt="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Dt="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Mt=Ne,Ft=Ne,Ut=Ne;function Bt(e,t){var n=a(this._weekdays)?this._weekdays:this._weekdays[e&&!0!==e&&this._weekdays.isFormat.test(t)?"format":"standalone"];return!0===e?At(n,this._week.dow):e?n[e.day()]:n}function Ht(e){return!0===e?At(this._weekdaysShort,this._week.dow):e?this._weekdaysShort[e.day()]:this._weekdaysShort}function qt(e){return!0===e?At(this._weekdaysMin,this._week.dow):e?this._weekdaysMin[e.day()]:this._weekdaysMin}function zt(e,t,n){var r,o,i,a=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],r=0;r<7;++r)i=y([2e3,1]).day(r),this._minWeekdaysParse[r]=this.weekdaysMin(i,"").toLocaleLowerCase(),this._shortWeekdaysParse[r]=this.weekdaysShort(i,"").toLocaleLowerCase(),this._weekdaysParse[r]=this.weekdays(i,"").toLocaleLowerCase();return n?"dddd"===t?-1!==(o=ze.call(this._weekdaysParse,a))?o:null:"ddd"===t?-1!==(o=ze.call(this._shortWeekdaysParse,a))?o:null:-1!==(o=ze.call(this._minWeekdaysParse,a))?o:null:"dddd"===t?-1!==(o=ze.call(this._weekdaysParse,a))||-1!==(o=ze.call(this._shortWeekdaysParse,a))||-1!==(o=ze.call(this._minWeekdaysParse,a))?o:null:"ddd"===t?-1!==(o=ze.call(this._shortWeekdaysParse,a))||-1!==(o=ze.call(this._weekdaysParse,a))||-1!==(o=ze.call(this._minWeekdaysParse,a))?o:null:-1!==(o=ze.call(this._minWeekdaysParse,a))||-1!==(o=ze.call(this._weekdaysParse,a))||-1!==(o=ze.call(this._shortWeekdaysParse,a))?o:null}function Gt(e,t,n){var r,o,i;if(this._weekdaysParseExact)return zt.call(this,e,t,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),r=0;r<7;r++){if(o=y([2e3,1]).day(r),n&&!this._fullWeekdaysParse[r]&&(this._fullWeekdaysParse[r]=new RegExp("^"+this.weekdays(o,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[r]=new RegExp("^"+this.weekdaysShort(o,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[r]=new RegExp("^"+this.weekdaysMin(o,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[r]||(i="^"+this.weekdays(o,"")+"|^"+this.weekdaysShort(o,"")+"|^"+this.weekdaysMin(o,""),this._weekdaysParse[r]=new RegExp(i.replace(".",""),"i")),n&&"dddd"===t&&this._fullWeekdaysParse[r].test(e))return r;if(n&&"ddd"===t&&this._shortWeekdaysParse[r].test(e))return r;if(n&&"dd"===t&&this._minWeekdaysParse[r].test(e))return r;if(!n&&this._weekdaysParse[r].test(e))return r}}function Wt(e){if(!this.isValid())return null!=e?this:NaN;var t=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=e?(e=Rt(e,this.localeData()),this.add(e-t,"d")):t}function Vt(e){if(!this.isValid())return null!=e?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return null==e?t:this.add(e-t,"d")}function Yt(e){if(!this.isValid())return null!=e?this:NaN;if(null!=e){var t=Ct(e,this.localeData());return this.day(this.day()%7?t:t-7)}return this.day()||7}function Zt(e){return this._weekdaysParseExact?(c(this,"_weekdaysRegex")||Qt.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(c(this,"_weekdaysRegex")||(this._weekdaysRegex=Mt),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)}function $t(e){return this._weekdaysParseExact?(c(this,"_weekdaysRegex")||Qt.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(c(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Ft),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Kt(e){return this._weekdaysParseExact?(c(this,"_weekdaysRegex")||Qt.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(c(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Ut),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Qt(){function e(e,t){return t.length-e.length}var t,n,r,o,i,a=[],u=[],c=[],s=[];for(t=0;t<7;t++)n=y([2e3,1]).day(t),r=Fe(this.weekdaysMin(n,"")),o=Fe(this.weekdaysShort(n,"")),i=Fe(this.weekdays(n,"")),a.push(r),u.push(o),c.push(i),s.push(r),s.push(o),s.push(i);a.sort(e),u.sort(e),c.sort(e),s.sort(e),this._weekdaysRegex=new RegExp("^("+s.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+c.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+a.join("|")+")","i")}function Xt(){return this.hours()%12||12}function Jt(){return this.hours()||24}function en(e,t){H(e,0,0,(function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)}))}function tn(e,t){return t._meridiemParse}function nn(e){return"p"===(e+"").toLowerCase().charAt(0)}H("H",["HH",2],0,"hour"),H("h",["hh",2],0,Xt),H("k",["kk",2],0,Jt),H("hmm",0,0,(function(){return""+Xt.apply(this)+D(this.minutes(),2)})),H("hmmss",0,0,(function(){return""+Xt.apply(this)+D(this.minutes(),2)+D(this.seconds(),2)})),H("Hmm",0,0,(function(){return""+this.hours()+D(this.minutes(),2)})),H("Hmmss",0,0,(function(){return""+this.hours()+D(this.minutes(),2)+D(this.seconds(),2)})),en("a",!0),en("A",!1),re("hour","h"),ue("hour",13),Le("a",tn),Le("A",tn),Le("H",_e),Le("h",_e),Le("k",_e),Le("HH",_e,be),Le("hh",_e,be),Le("kk",_e,be),Le("hmm",xe),Le("hmmss",Se),Le("Hmm",xe),Le("Hmmss",Se),Be(["H","HH"],Ye),Be(["k","kk"],(function(e,t,n){var r=fe(e);t[Ye]=24===r?0:r})),Be(["a","A"],(function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e})),Be(["h","hh"],(function(e,t,n){t[Ye]=fe(e),v(n).bigHour=!0})),Be("hmm",(function(e,t,n){var r=e.length-2;t[Ye]=fe(e.substr(0,r)),t[Ze]=fe(e.substr(r)),v(n).bigHour=!0})),Be("hmmss",(function(e,t,n){var r=e.length-4,o=e.length-2;t[Ye]=fe(e.substr(0,r)),t[Ze]=fe(e.substr(r,2)),t[$e]=fe(e.substr(o)),v(n).bigHour=!0})),Be("Hmm",(function(e,t,n){var r=e.length-2;t[Ye]=fe(e.substr(0,r)),t[Ze]=fe(e.substr(r))})),Be("Hmmss",(function(e,t,n){var r=e.length-4,o=e.length-2;t[Ye]=fe(e.substr(0,r)),t[Ze]=fe(e.substr(r,2)),t[$e]=fe(e.substr(o))}));var rn=/[ap]\.?m?\.?/i,on=pe("Hours",!0);function an(e,t,n){return e>11?n?"pm":"PM":n?"am":"AM"}var un,cn={calendar:N,longDateFormat:V,invalidDate:Z,ordinal:K,dayOfMonthOrdinalParse:Q,relativeTime:J,months:tt,monthsShort:nt,week:jt,weekdays:Nt,weekdaysMin:Dt,weekdaysShort:Lt,meridiemParse:rn},sn={},ln={};function fn(e,t){var n,r=Math.min(e.length,t.length);for(n=0;n<r;n+=1)if(e[n]!==t[n])return n;return r}function pn(e){return e?e.toLowerCase().replace("_","-"):e}function dn(e){for(var t,n,r,o,i=0;i<e.length;){for(t=(o=pn(e[i]).split("-")).length,n=(n=pn(e[i+1]))?n.split("-"):null;t>0;){if(r=yn(o.slice(0,t).join("-")))return r;if(n&&n.length>=t&&fn(o,n)>=t-1)break;t--}i++}return un}function hn(e){return null!=e.match("^[^/\\\\]*$")}function yn(t){var r=null;if(void 0===sn[t]&&e&&e.exports&&hn(t))try{r=un._abbr,n(8617)("./"+t),mn(r)}catch(e){sn[t]=null}return sn[t]}function mn(e,t){var n;return e&&((n=l(t)?bn(e):vn(e,t))?un=n:"undefined"!=typeof console&&console.warn),un._abbr}function vn(e,t){if(null!==t){var n,r=cn;if(t.abbr=e,null!=sn[e])I("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),r=sn[e]._config;else if(null!=t.parentLocale)if(null!=sn[t.parentLocale])r=sn[t.parentLocale]._config;else{if(null==(n=yn(t.parentLocale)))return ln[t.parentLocale]||(ln[t.parentLocale]=[]),ln[t.parentLocale].push({name:e,config:t}),null;r=n._config}return sn[e]=new A(C(r,t)),ln[e]&&ln[e].forEach((function(e){vn(e.name,e.config)})),mn(e),sn[e]}return delete sn[e],null}function gn(e,t){if(null!=t){var n,r,o=cn;null!=sn[e]&&null!=sn[e].parentLocale?sn[e].set(C(sn[e]._config,t)):(null!=(r=yn(e))&&(o=r._config),t=C(o,t),null==r&&(t.abbr=e),(n=new A(t)).parentLocale=sn[e],sn[e]=n),mn(e)}else null!=sn[e]&&(null!=sn[e].parentLocale?(sn[e]=sn[e].parentLocale,e===mn()&&mn(e)):null!=sn[e]&&delete sn[e]);return sn[e]}function bn(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return un;if(!a(e)){if(t=yn(e))return t;e=[e]}return dn(e)}function wn(){return P(sn)}function On(e){var t,n=e._a;return n&&-2===v(e).overflow&&(t=n[We]<0||n[We]>11?We:n[Ve]<1||n[Ve]>et(n[Ge],n[We])?Ve:n[Ye]<0||n[Ye]>24||24===n[Ye]&&(0!==n[Ze]||0!==n[$e]||0!==n[Ke])?Ye:n[Ze]<0||n[Ze]>59?Ze:n[$e]<0||n[$e]>59?$e:n[Ke]<0||n[Ke]>999?Ke:-1,v(e)._overflowDayOfYear&&(t<Ge||t>Ve)&&(t=Ve),v(e)._overflowWeeks&&-1===t&&(t=Qe),v(e)._overflowWeekday&&-1===t&&(t=Xe),v(e).overflow=t),e}var En=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,_n=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,xn=/Z|[+-]\d\d(?::?\d\d)?/,Sn=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],jn=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Pn=/^\/?Date\((-?\d+)/i,kn=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,In={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function Tn(e){var t,n,r,o,i,a,u=e._i,c=En.exec(u)||_n.exec(u),s=Sn.length,l=jn.length;if(c){for(v(e).iso=!0,t=0,n=s;t<n;t++)if(Sn[t][1].exec(c[1])){o=Sn[t][0],r=!1!==Sn[t][2];break}if(null==o)return void(e._isValid=!1);if(c[3]){for(t=0,n=l;t<n;t++)if(jn[t][1].exec(c[3])){i=(c[2]||" ")+jn[t][0];break}if(null==i)return void(e._isValid=!1)}if(!r&&null!=i)return void(e._isValid=!1);if(c[4]){if(!xn.exec(c[4]))return void(e._isValid=!1);a="Z"}e._f=o+(i||"")+(a||""),qn(e)}else e._isValid=!1}function Rn(e,t,n,r,o,i){var a=[Cn(e),nt.indexOf(t),parseInt(n,10),parseInt(r,10),parseInt(o,10)];return i&&a.push(parseInt(i,10)),a}function Cn(e){var t=parseInt(e,10);return t<=49?2e3+t:t<=999?1900+t:t}function An(e){return e.replace(/\([^()]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,"")}function Nn(e,t,n){return!e||Lt.indexOf(e)===new Date(t[0],t[1],t[2]).getDay()||(v(n).weekdayMismatch=!0,n._isValid=!1,!1)}function Ln(e,t,n){if(e)return In[e];if(t)return 0;var r=parseInt(n,10),o=r%100;return(r-o)/100*60+o}function Dn(e){var t,n=kn.exec(An(e._i));if(n){if(t=Rn(n[4],n[3],n[2],n[5],n[6],n[7]),!Nn(n[1],t,e))return;e._a=t,e._tzm=Ln(n[8],n[9],n[10]),e._d=wt.apply(null,e._a),e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),v(e).rfc2822=!0}else e._isValid=!1}function Mn(e){var t=Pn.exec(e._i);null===t?(Tn(e),!1===e._isValid&&(delete e._isValid,Dn(e),!1===e._isValid&&(delete e._isValid,e._strict?e._isValid=!1:o.createFromInputFallback(e)))):e._d=new Date(+t[1])}function Fn(e,t,n){return null!=e?e:null!=t?t:n}function Un(e){var t=new Date(o.now());return e._useUTC?[t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate()]:[t.getFullYear(),t.getMonth(),t.getDate()]}function Bn(e){var t,n,r,o,i,a=[];if(!e._d){for(r=Un(e),e._w&&null==e._a[Ve]&&null==e._a[We]&&Hn(e),null!=e._dayOfYear&&(i=Fn(e._a[Ge],r[Ge]),(e._dayOfYear>mt(i)||0===e._dayOfYear)&&(v(e)._overflowDayOfYear=!0),n=wt(i,0,e._dayOfYear),e._a[We]=n.getUTCMonth(),e._a[Ve]=n.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=a[t]=r[t];for(;t<7;t++)e._a[t]=a[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[Ye]&&0===e._a[Ze]&&0===e._a[$e]&&0===e._a[Ke]&&(e._nextDay=!0,e._a[Ye]=0),e._d=(e._useUTC?wt:bt).apply(null,a),o=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[Ye]=24),e._w&&void 0!==e._w.d&&e._w.d!==o&&(v(e).weekdayMismatch=!0)}}function Hn(e){var t,n,r,o,i,a,u,c,s;null!=(t=e._w).GG||null!=t.W||null!=t.E?(i=1,a=4,n=Fn(t.GG,e._a[Ge],_t(Kn(),1,4).year),r=Fn(t.W,1),((o=Fn(t.E,1))<1||o>7)&&(c=!0)):(i=e._locale._week.dow,a=e._locale._week.doy,s=_t(Kn(),i,a),n=Fn(t.gg,e._a[Ge],s.year),r=Fn(t.w,s.week),null!=t.d?((o=t.d)<0||o>6)&&(c=!0):null!=t.e?(o=t.e+i,(t.e<0||t.e>6)&&(c=!0)):o=i),r<1||r>xt(n,i,a)?v(e)._overflowWeeks=!0:null!=c?v(e)._overflowWeekday=!0:(u=Et(n,r,o,i,a),e._a[Ge]=u.year,e._dayOfYear=u.dayOfYear)}function qn(e){if(e._f!==o.ISO_8601)if(e._f!==o.RFC_2822){e._a=[],v(e).empty=!0;var t,n,r,i,a,u,c,s=""+e._i,l=s.length,f=0;for(c=(r=W(e._f,e._locale).match(M)||[]).length,t=0;t<c;t++)i=r[t],(n=(s.match(De(i,e))||[])[0])&&((a=s.substr(0,s.indexOf(n))).length>0&&v(e).unusedInput.push(a),s=s.slice(s.indexOf(n)+n.length),f+=n.length),B[i]?(n?v(e).empty=!1:v(e).unusedTokens.push(i),qe(i,n,e)):e._strict&&!n&&v(e).unusedTokens.push(i);v(e).charsLeftOver=l-f,s.length>0&&v(e).unusedInput.push(s),e._a[Ye]<=12&&!0===v(e).bigHour&&e._a[Ye]>0&&(v(e).bigHour=void 0),v(e).parsedDateParts=e._a.slice(0),v(e).meridiem=e._meridiem,e._a[Ye]=zn(e._locale,e._a[Ye],e._meridiem),null!==(u=v(e).era)&&(e._a[Ge]=e._locale.erasConvertYear(u,e._a[Ge])),Bn(e),On(e)}else Dn(e);else Tn(e)}function zn(e,t,n){var r;return null==n?t:null!=e.meridiemHour?e.meridiemHour(t,n):null!=e.isPM?((r=e.isPM(n))&&t<12&&(t+=12),r||12!==t||(t=0),t):t}function Gn(e){var t,n,r,o,i,a,u=!1,c=e._f.length;if(0===c)return v(e).invalidFormat=!0,void(e._d=new Date(NaN));for(o=0;o<c;o++)i=0,a=!1,t=E({},e),null!=e._useUTC&&(t._useUTC=e._useUTC),t._f=e._f[o],qn(t),g(t)&&(a=!0),i+=v(t).charsLeftOver,i+=10*v(t).unusedTokens.length,v(t).score=i,u?i<r&&(r=i,n=t):(null==r||i<r||a)&&(r=i,n=t,a&&(u=!0));h(e,n||t)}function Wn(e){if(!e._d){var t=ie(e._i),n=void 0===t.day?t.date:t.day;e._a=d([t.year,t.month,n,t.hour,t.minute,t.second,t.millisecond],(function(e){return e&&parseInt(e,10)})),Bn(e)}}function Vn(e){var t=new _(On(Yn(e)));return t._nextDay&&(t.add(1,"d"),t._nextDay=void 0),t}function Yn(e){var t=e._i,n=e._f;return e._locale=e._locale||bn(e._l),null===t||void 0===n&&""===t?b({nullInput:!0}):("string"==typeof t&&(e._i=t=e._locale.preparse(t)),x(t)?new _(On(t)):(p(t)?e._d=t:a(n)?Gn(e):n?qn(e):Zn(e),g(e)||(e._d=null),e))}function Zn(e){var t=e._i;l(t)?e._d=new Date(o.now()):p(t)?e._d=new Date(t.valueOf()):"string"==typeof t?Mn(e):a(t)?(e._a=d(t.slice(0),(function(e){return parseInt(e,10)})),Bn(e)):u(t)?Wn(e):f(t)?e._d=new Date(t):o.createFromInputFallback(e)}function $n(e,t,n,r,o){var i={};return!0!==t&&!1!==t||(r=t,t=void 0),!0!==n&&!1!==n||(r=n,n=void 0),(u(e)&&s(e)||a(e)&&0===e.length)&&(e=void 0),i._isAMomentObject=!0,i._useUTC=i._isUTC=o,i._l=n,i._i=e,i._f=t,i._strict=r,Vn(i)}function Kn(e,t,n,r){return $n(e,t,n,r,!1)}o.createFromInputFallback=j("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",(function(e){e._d=new Date(e._i+(e._useUTC?" UTC":""))})),o.ISO_8601=function(){},o.RFC_2822=function(){};var Qn=j("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var e=Kn.apply(null,arguments);return this.isValid()&&e.isValid()?e<this?this:e:b()})),Xn=j("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var e=Kn.apply(null,arguments);return this.isValid()&&e.isValid()?e>this?this:e:b()}));function Jn(e,t){var n,r;if(1===t.length&&a(t[0])&&(t=t[0]),!t.length)return Kn();for(n=t[0],r=1;r<t.length;++r)t[r].isValid()&&!t[r][e](n)||(n=t[r]);return n}function er(){return Jn("isBefore",[].slice.call(arguments,0))}function tr(){return Jn("isAfter",[].slice.call(arguments,0))}var nr=function(){return Date.now?Date.now():+new Date},rr=["year","quarter","month","week","day","hour","minute","second","millisecond"];function or(e){var t,n,r=!1,o=rr.length;for(t in e)if(c(e,t)&&(-1===ze.call(rr,t)||null!=e[t]&&isNaN(e[t])))return!1;for(n=0;n<o;++n)if(e[rr[n]]){if(r)return!1;parseFloat(e[rr[n]])!==fe(e[rr[n]])&&(r=!0)}return!0}function ir(){return this._isValid}function ar(){return Ir(NaN)}function ur(e){var t=ie(e),n=t.year||0,r=t.quarter||0,o=t.month||0,i=t.week||t.isoWeek||0,a=t.day||0,u=t.hour||0,c=t.minute||0,s=t.second||0,l=t.millisecond||0;this._isValid=or(t),this._milliseconds=+l+1e3*s+6e4*c+1e3*u*60*60,this._days=+a+7*i,this._months=+o+3*r+12*n,this._data={},this._locale=bn(),this._bubble()}function cr(e){return e instanceof ur}function sr(e){return e<0?-1*Math.round(-1*e):Math.round(e)}function lr(e,t,n){var r,o=Math.min(e.length,t.length),i=Math.abs(e.length-t.length),a=0;for(r=0;r<o;r++)(n&&e[r]!==t[r]||!n&&fe(e[r])!==fe(t[r]))&&a++;return a+i}function fr(e,t){H(e,0,0,(function(){var e=this.utcOffset(),n="+";return e<0&&(e=-e,n="-"),n+D(~~(e/60),2)+t+D(~~e%60,2)}))}fr("Z",":"),fr("ZZ",""),Le("Z",Ce),Le("ZZ",Ce),Be(["Z","ZZ"],(function(e,t,n){n._useUTC=!0,n._tzm=dr(Ce,e)}));var pr=/([\+\-]|\d\d)/gi;function dr(e,t){var n,r,o=(t||"").match(e);return null===o?null:0===(r=60*(n=((o[o.length-1]||[])+"").match(pr)||["-",0,0])[1]+fe(n[2]))?0:"+"===n[0]?r:-r}function hr(e,t){var n,r;return t._isUTC?(n=t.clone(),r=(x(e)||p(e)?e.valueOf():Kn(e).valueOf())-n.valueOf(),n._d.setTime(n._d.valueOf()+r),o.updateOffset(n,!1),n):Kn(e).local()}function yr(e){return-Math.round(e._d.getTimezoneOffset())}function mr(e,t,n){var r,i=this._offset||0;if(!this.isValid())return null!=e?this:NaN;if(null!=e){if("string"==typeof e){if(null===(e=dr(Ce,e)))return this}else Math.abs(e)<16&&!n&&(e*=60);return!this._isUTC&&t&&(r=yr(this)),this._offset=e,this._isUTC=!0,null!=r&&this.add(r,"m"),i!==e&&(!t||this._changeInProgress?Nr(this,Ir(e-i,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,o.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?i:yr(this)}function vr(e,t){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()}function gr(e){return this.utcOffset(0,e)}function br(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(yr(this),"m")),this}function wr(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var e=dr(Re,this._i);null!=e?this.utcOffset(e):this.utcOffset(0,!0)}return this}function Or(e){return!!this.isValid()&&(e=e?Kn(e).utcOffset():0,(this.utcOffset()-e)%60==0)}function Er(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function _r(){if(!l(this._isDSTShifted))return this._isDSTShifted;var e,t={};return E(t,this),(t=Yn(t))._a?(e=t._isUTC?y(t._a):Kn(t._a),this._isDSTShifted=this.isValid()&&lr(t._a,e.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}function xr(){return!!this.isValid()&&!this._isUTC}function Sr(){return!!this.isValid()&&this._isUTC}function jr(){return!!this.isValid()&&this._isUTC&&0===this._offset}o.updateOffset=function(){};var Pr=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,kr=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Ir(e,t){var n,r,o,i=e,a=null;return cr(e)?i={ms:e._milliseconds,d:e._days,M:e._months}:f(e)||!isNaN(+e)?(i={},t?i[t]=+e:i.milliseconds=+e):(a=Pr.exec(e))?(n="-"===a[1]?-1:1,i={y:0,d:fe(a[Ve])*n,h:fe(a[Ye])*n,m:fe(a[Ze])*n,s:fe(a[$e])*n,ms:fe(sr(1e3*a[Ke]))*n}):(a=kr.exec(e))?(n="-"===a[1]?-1:1,i={y:Tr(a[2],n),M:Tr(a[3],n),w:Tr(a[4],n),d:Tr(a[5],n),h:Tr(a[6],n),m:Tr(a[7],n),s:Tr(a[8],n)}):null==i?i={}:"object"==typeof i&&("from"in i||"to"in i)&&(o=Cr(Kn(i.from),Kn(i.to)),(i={}).ms=o.milliseconds,i.M=o.months),r=new ur(i),cr(e)&&c(e,"_locale")&&(r._locale=e._locale),cr(e)&&c(e,"_isValid")&&(r._isValid=e._isValid),r}function Tr(e,t){var n=e&&parseFloat(e.replace(",","."));return(isNaN(n)?0:n)*t}function Rr(e,t){var n={};return n.months=t.month()-e.month()+12*(t.year()-e.year()),e.clone().add(n.months,"M").isAfter(t)&&--n.months,n.milliseconds=+t-+e.clone().add(n.months,"M"),n}function Cr(e,t){var n;return e.isValid()&&t.isValid()?(t=hr(t,e),e.isBefore(t)?n=Rr(e,t):((n=Rr(t,e)).milliseconds=-n.milliseconds,n.months=-n.months),n):{milliseconds:0,months:0}}function Ar(e,t){return function(n,r){var o;return null===r||isNaN(+r)||(I(t,"moment()."+t+"(period, number) is deprecated. Please use moment()."+t+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),o=n,n=r,r=o),Nr(this,Ir(n,r),e),this}}function Nr(e,t,n,r){var i=t._milliseconds,a=sr(t._days),u=sr(t._months);e.isValid()&&(r=null==r||r,u&&lt(e,de(e,"Month")+u*n),a&&he(e,"Date",de(e,"Date")+a*n),i&&e._d.setTime(e._d.valueOf()+i*n),r&&o.updateOffset(e,a||u))}Ir.fn=ur.prototype,Ir.invalid=ar;var Lr=Ar(1,"add"),Dr=Ar(-1,"subtract");function Mr(e){return"string"==typeof e||e instanceof String}function Fr(e){return x(e)||p(e)||Mr(e)||f(e)||Br(e)||Ur(e)||null==e}function Ur(e){var t,n,r=u(e)&&!s(e),o=!1,i=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],a=i.length;for(t=0;t<a;t+=1)n=i[t],o=o||c(e,n);return r&&o}function Br(e){var t=a(e),n=!1;return t&&(n=0===e.filter((function(t){return!f(t)&&Mr(e)})).length),t&&n}function Hr(e){var t,n,r=u(e)&&!s(e),o=!1,i=["sameDay","nextDay","lastDay","nextWeek","lastWeek","sameElse"];for(t=0;t<i.length;t+=1)n=i[t],o=o||c(e,n);return r&&o}function qr(e,t){var n=e.diff(t,"days",!0);return n<-6?"sameElse":n<-1?"lastWeek":n<0?"lastDay":n<1?"sameDay":n<2?"nextDay":n<7?"nextWeek":"sameElse"}function zr(e,t){1===arguments.length&&(arguments[0]?Fr(arguments[0])?(e=arguments[0],t=void 0):Hr(arguments[0])&&(t=arguments[0],e=void 0):(e=void 0,t=void 0));var n=e||Kn(),r=hr(n,this).startOf("day"),i=o.calendarFormat(this,r)||"sameElse",a=t&&(T(t[i])?t[i].call(this,n):t[i]);return this.format(a||this.localeData().calendar(i,this,Kn(n)))}function Gr(){return new _(this)}function Wr(e,t){var n=x(e)?e:Kn(e);return!(!this.isValid()||!n.isValid())&&("millisecond"===(t=oe(t)||"millisecond")?this.valueOf()>n.valueOf():n.valueOf()<this.clone().startOf(t).valueOf())}function Vr(e,t){var n=x(e)?e:Kn(e);return!(!this.isValid()||!n.isValid())&&("millisecond"===(t=oe(t)||"millisecond")?this.valueOf()<n.valueOf():this.clone().endOf(t).valueOf()<n.valueOf())}function Yr(e,t,n,r){var o=x(e)?e:Kn(e),i=x(t)?t:Kn(t);return!!(this.isValid()&&o.isValid()&&i.isValid())&&("("===(r=r||"()")[0]?this.isAfter(o,n):!this.isBefore(o,n))&&(")"===r[1]?this.isBefore(i,n):!this.isAfter(i,n))}function Zr(e,t){var n,r=x(e)?e:Kn(e);return!(!this.isValid()||!r.isValid())&&("millisecond"===(t=oe(t)||"millisecond")?this.valueOf()===r.valueOf():(n=r.valueOf(),this.clone().startOf(t).valueOf()<=n&&n<=this.clone().endOf(t).valueOf()))}function $r(e,t){return this.isSame(e,t)||this.isAfter(e,t)}function Kr(e,t){return this.isSame(e,t)||this.isBefore(e,t)}function Qr(e,t,n){var r,o,i;if(!this.isValid())return NaN;if(!(r=hr(e,this)).isValid())return NaN;switch(o=6e4*(r.utcOffset()-this.utcOffset()),t=oe(t)){case"year":i=Xr(this,r)/12;break;case"month":i=Xr(this,r);break;case"quarter":i=Xr(this,r)/3;break;case"second":i=(this-r)/1e3;break;case"minute":i=(this-r)/6e4;break;case"hour":i=(this-r)/36e5;break;case"day":i=(this-r-o)/864e5;break;case"week":i=(this-r-o)/6048e5;break;default:i=this-r}return n?i:le(i)}function Xr(e,t){if(e.date()<t.date())return-Xr(t,e);var n=12*(t.year()-e.year())+(t.month()-e.month()),r=e.clone().add(n,"months");return-(n+(t-r<0?(t-r)/(r-e.clone().add(n-1,"months")):(t-r)/(e.clone().add(n+1,"months")-r)))||0}function Jr(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function eo(e){if(!this.isValid())return null;var t=!0!==e,n=t?this.clone().utc():this;return n.year()<0||n.year()>9999?G(n,t?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):T(Date.prototype.toISOString)?t?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",G(n,"Z")):G(n,t?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")}function to(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var e,t,n,r,o="moment",i="";return this.isLocal()||(o=0===this.utcOffset()?"moment.utc":"moment.parseZone",i="Z"),e="["+o+'("]',t=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",n="-MM-DD[T]HH:mm:ss.SSS",r=i+'[")]',this.format(e+t+n+r)}function no(e){e||(e=this.isUtc()?o.defaultFormatUtc:o.defaultFormat);var t=G(this,e);return this.localeData().postformat(t)}function ro(e,t){return this.isValid()&&(x(e)&&e.isValid()||Kn(e).isValid())?Ir({to:this,from:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()}function oo(e){return this.from(Kn(),e)}function io(e,t){return this.isValid()&&(x(e)&&e.isValid()||Kn(e).isValid())?Ir({from:this,to:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()}function ao(e){return this.to(Kn(),e)}function uo(e){var t;return void 0===e?this._locale._abbr:(null!=(t=bn(e))&&(this._locale=t),this)}o.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",o.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var co=j("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",(function(e){return void 0===e?this.localeData():this.locale(e)}));function so(){return this._locale}var lo=1e3,fo=60*lo,po=60*fo,ho=3506328*po;function yo(e,t){return(e%t+t)%t}function mo(e,t,n){return e<100&&e>=0?new Date(e+400,t,n)-ho:new Date(e,t,n).valueOf()}function vo(e,t,n){return e<100&&e>=0?Date.UTC(e+400,t,n)-ho:Date.UTC(e,t,n)}function go(e){var t,n;if(void 0===(e=oe(e))||"millisecond"===e||!this.isValid())return this;switch(n=this._isUTC?vo:mo,e){case"year":t=n(this.year(),0,1);break;case"quarter":t=n(this.year(),this.month()-this.month()%3,1);break;case"month":t=n(this.year(),this.month(),1);break;case"week":t=n(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":t=n(this.year(),this.month(),this.date());break;case"hour":t=this._d.valueOf(),t-=yo(t+(this._isUTC?0:this.utcOffset()*fo),po);break;case"minute":t=this._d.valueOf(),t-=yo(t,fo);break;case"second":t=this._d.valueOf(),t-=yo(t,lo)}return this._d.setTime(t),o.updateOffset(this,!0),this}function bo(e){var t,n;if(void 0===(e=oe(e))||"millisecond"===e||!this.isValid())return this;switch(n=this._isUTC?vo:mo,e){case"year":t=n(this.year()+1,0,1)-1;break;case"quarter":t=n(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":t=n(this.year(),this.month()+1,1)-1;break;case"week":t=n(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":t=n(this.year(),this.month(),this.date()+1)-1;break;case"hour":t=this._d.valueOf(),t+=po-yo(t+(this._isUTC?0:this.utcOffset()*fo),po)-1;break;case"minute":t=this._d.valueOf(),t+=fo-yo(t,fo)-1;break;case"second":t=this._d.valueOf(),t+=lo-yo(t,lo)-1}return this._d.setTime(t),o.updateOffset(this,!0),this}function wo(){return this._d.valueOf()-6e4*(this._offset||0)}function Oo(){return Math.floor(this.valueOf()/1e3)}function Eo(){return new Date(this.valueOf())}function _o(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()]}function xo(){var e=this;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}}function So(){return this.isValid()?this.toISOString():null}function jo(){return g(this)}function Po(){return h({},v(this))}function ko(){return v(this).overflow}function Io(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function To(e,t){var n,r,i,a=this._eras||bn("en")._eras;for(n=0,r=a.length;n<r;++n){switch(typeof a[n].since){case"string":i=o(a[n].since).startOf("day"),a[n].since=i.valueOf()}switch(typeof a[n].until){case"undefined":a[n].until=1/0;break;case"string":i=o(a[n].until).startOf("day").valueOf(),a[n].until=i.valueOf()}}return a}function Ro(e,t,n){var r,o,i,a,u,c=this.eras();for(e=e.toUpperCase(),r=0,o=c.length;r<o;++r)if(i=c[r].name.toUpperCase(),a=c[r].abbr.toUpperCase(),u=c[r].narrow.toUpperCase(),n)switch(t){case"N":case"NN":case"NNN":if(a===e)return c[r];break;case"NNNN":if(i===e)return c[r];break;case"NNNNN":if(u===e)return c[r]}else if([i,a,u].indexOf(e)>=0)return c[r]}function Co(e,t){var n=e.since<=e.until?1:-1;return void 0===t?o(e.since).year():o(e.since).year()+(t-e.offset)*n}function Ao(){var e,t,n,r=this.localeData().eras();for(e=0,t=r.length;e<t;++e){if(n=this.clone().startOf("day").valueOf(),r[e].since<=n&&n<=r[e].until)return r[e].name;if(r[e].until<=n&&n<=r[e].since)return r[e].name}return""}function No(){var e,t,n,r=this.localeData().eras();for(e=0,t=r.length;e<t;++e){if(n=this.clone().startOf("day").valueOf(),r[e].since<=n&&n<=r[e].until)return r[e].narrow;if(r[e].until<=n&&n<=r[e].since)return r[e].narrow}return""}function Lo(){var e,t,n,r=this.localeData().eras();for(e=0,t=r.length;e<t;++e){if(n=this.clone().startOf("day").valueOf(),r[e].since<=n&&n<=r[e].until)return r[e].abbr;if(r[e].until<=n&&n<=r[e].since)return r[e].abbr}return""}function Do(){var e,t,n,r,i=this.localeData().eras();for(e=0,t=i.length;e<t;++e)if(n=i[e].since<=i[e].until?1:-1,r=this.clone().startOf("day").valueOf(),i[e].since<=r&&r<=i[e].until||i[e].until<=r&&r<=i[e].since)return(this.year()-o(i[e].since).year())*n+i[e].offset;return this.year()}function Mo(e){return c(this,"_erasNameRegex")||Go.call(this),e?this._erasNameRegex:this._erasRegex}function Fo(e){return c(this,"_erasAbbrRegex")||Go.call(this),e?this._erasAbbrRegex:this._erasRegex}function Uo(e){return c(this,"_erasNarrowRegex")||Go.call(this),e?this._erasNarrowRegex:this._erasRegex}function Bo(e,t){return t.erasAbbrRegex(e)}function Ho(e,t){return t.erasNameRegex(e)}function qo(e,t){return t.erasNarrowRegex(e)}function zo(e,t){return t._eraYearOrdinalRegex||Ie}function Go(){var e,t,n=[],r=[],o=[],i=[],a=this.eras();for(e=0,t=a.length;e<t;++e)r.push(Fe(a[e].name)),n.push(Fe(a[e].abbr)),o.push(Fe(a[e].narrow)),i.push(Fe(a[e].name)),i.push(Fe(a[e].abbr)),i.push(Fe(a[e].narrow));this._erasRegex=new RegExp("^("+i.join("|")+")","i"),this._erasNameRegex=new RegExp("^("+r.join("|")+")","i"),this._erasAbbrRegex=new RegExp("^("+n.join("|")+")","i"),this._erasNarrowRegex=new RegExp("^("+o.join("|")+")","i")}function Wo(e,t){H(0,[e,e.length],0,t)}function Vo(e){return Xo.call(this,e,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)}function Yo(e){return Xo.call(this,e,this.isoWeek(),this.isoWeekday(),1,4)}function Zo(){return xt(this.year(),1,4)}function $o(){return xt(this.isoWeekYear(),1,4)}function Ko(){var e=this.localeData()._week;return xt(this.year(),e.dow,e.doy)}function Qo(){var e=this.localeData()._week;return xt(this.weekYear(),e.dow,e.doy)}function Xo(e,t,n,r,o){var i;return null==e?_t(this,r,o).year:(t>(i=xt(e,r,o))&&(t=i),Jo.call(this,e,t,n,r,o))}function Jo(e,t,n,r,o){var i=Et(e,t,n,r,o),a=wt(i.year,0,i.dayOfYear);return this.year(a.getUTCFullYear()),this.month(a.getUTCMonth()),this.date(a.getUTCDate()),this}function ei(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)}H("N",0,0,"eraAbbr"),H("NN",0,0,"eraAbbr"),H("NNN",0,0,"eraAbbr"),H("NNNN",0,0,"eraName"),H("NNNNN",0,0,"eraNarrow"),H("y",["y",1],"yo","eraYear"),H("y",["yy",2],0,"eraYear"),H("y",["yyy",3],0,"eraYear"),H("y",["yyyy",4],0,"eraYear"),Le("N",Bo),Le("NN",Bo),Le("NNN",Bo),Le("NNNN",Ho),Le("NNNNN",qo),Be(["N","NN","NNN","NNNN","NNNNN"],(function(e,t,n,r){var o=n._locale.erasParse(e,r,n._strict);o?v(n).era=o:v(n).invalidEra=e})),Le("y",Ie),Le("yy",Ie),Le("yyy",Ie),Le("yyyy",Ie),Le("yo",zo),Be(["y","yy","yyy","yyyy"],Ge),Be(["yo"],(function(e,t,n,r){var o;n._locale._eraYearOrdinalRegex&&(o=e.match(n._locale._eraYearOrdinalRegex)),n._locale.eraYearOrdinalParse?t[Ge]=n._locale.eraYearOrdinalParse(e,o):t[Ge]=parseInt(e,10)})),H(0,["gg",2],0,(function(){return this.weekYear()%100})),H(0,["GG",2],0,(function(){return this.isoWeekYear()%100})),Wo("gggg","weekYear"),Wo("ggggg","weekYear"),Wo("GGGG","isoWeekYear"),Wo("GGGGG","isoWeekYear"),re("weekYear","gg"),re("isoWeekYear","GG"),ue("weekYear",1),ue("isoWeekYear",1),Le("G",Te),Le("g",Te),Le("GG",_e,be),Le("gg",_e,be),Le("GGGG",Pe,Oe),Le("gggg",Pe,Oe),Le("GGGGG",ke,Ee),Le("ggggg",ke,Ee),He(["gggg","ggggg","GGGG","GGGGG"],(function(e,t,n,r){t[r.substr(0,2)]=fe(e)})),He(["gg","GG"],(function(e,t,n,r){t[r]=o.parseTwoDigitYear(e)})),H("Q",0,"Qo","quarter"),re("quarter","Q"),ue("quarter",7),Le("Q",ge),Be("Q",(function(e,t){t[We]=3*(fe(e)-1)})),H("D",["DD",2],"Do","date"),re("date","D"),ue("date",9),Le("D",_e),Le("DD",_e,be),Le("Do",(function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient})),Be(["D","DD"],Ve),Be("Do",(function(e,t){t[Ve]=fe(e.match(_e)[0])}));var ti=pe("Date",!0);function ni(e){var t=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==e?t:this.add(e-t,"d")}H("DDD",["DDDD",3],"DDDo","dayOfYear"),re("dayOfYear","DDD"),ue("dayOfYear",4),Le("DDD",je),Le("DDDD",we),Be(["DDD","DDDD"],(function(e,t,n){n._dayOfYear=fe(e)})),H("m",["mm",2],0,"minute"),re("minute","m"),ue("minute",14),Le("m",_e),Le("mm",_e,be),Be(["m","mm"],Ze);var ri=pe("Minutes",!1);H("s",["ss",2],0,"second"),re("second","s"),ue("second",15),Le("s",_e),Le("ss",_e,be),Be(["s","ss"],$e);var oi,ii,ai=pe("Seconds",!1);for(H("S",0,0,(function(){return~~(this.millisecond()/100)})),H(0,["SS",2],0,(function(){return~~(this.millisecond()/10)})),H(0,["SSS",3],0,"millisecond"),H(0,["SSSS",4],0,(function(){return 10*this.millisecond()})),H(0,["SSSSS",5],0,(function(){return 100*this.millisecond()})),H(0,["SSSSSS",6],0,(function(){return 1e3*this.millisecond()})),H(0,["SSSSSSS",7],0,(function(){return 1e4*this.millisecond()})),H(0,["SSSSSSSS",8],0,(function(){return 1e5*this.millisecond()})),H(0,["SSSSSSSSS",9],0,(function(){return 1e6*this.millisecond()})),re("millisecond","ms"),ue("millisecond",16),Le("S",je,ge),Le("SS",je,be),Le("SSS",je,we),oi="SSSS";oi.length<=9;oi+="S")Le(oi,Ie);function ui(e,t){t[Ke]=fe(1e3*("0."+e))}for(oi="S";oi.length<=9;oi+="S")Be(oi,ui);function ci(){return this._isUTC?"UTC":""}function si(){return this._isUTC?"Coordinated Universal Time":""}ii=pe("Milliseconds",!1),H("z",0,0,"zoneAbbr"),H("zz",0,0,"zoneName");var li=_.prototype;function fi(e){return Kn(1e3*e)}function pi(){return Kn.apply(null,arguments).parseZone()}function di(e){return e}li.add=Lr,li.calendar=zr,li.clone=Gr,li.diff=Qr,li.endOf=bo,li.format=no,li.from=ro,li.fromNow=oo,li.to=io,li.toNow=ao,li.get=ye,li.invalidAt=ko,li.isAfter=Wr,li.isBefore=Vr,li.isBetween=Yr,li.isSame=Zr,li.isSameOrAfter=$r,li.isSameOrBefore=Kr,li.isValid=jo,li.lang=co,li.locale=uo,li.localeData=so,li.max=Xn,li.min=Qn,li.parsingFlags=Po,li.set=me,li.startOf=go,li.subtract=Dr,li.toArray=_o,li.toObject=xo,li.toDate=Eo,li.toISOString=eo,li.inspect=to,"undefined"!=typeof Symbol&&null!=Symbol.for&&(li[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),li.toJSON=So,li.toString=Jr,li.unix=Oo,li.valueOf=wo,li.creationData=Io,li.eraName=Ao,li.eraNarrow=No,li.eraAbbr=Lo,li.eraYear=Do,li.year=vt,li.isLeapYear=gt,li.weekYear=Vo,li.isoWeekYear=Yo,li.quarter=li.quarters=ei,li.month=ft,li.daysInMonth=pt,li.week=li.weeks=It,li.isoWeek=li.isoWeeks=Tt,li.weeksInYear=Ko,li.weeksInWeekYear=Qo,li.isoWeeksInYear=Zo,li.isoWeeksInISOWeekYear=$o,li.date=ti,li.day=li.days=Wt,li.weekday=Vt,li.isoWeekday=Yt,li.dayOfYear=ni,li.hour=li.hours=on,li.minute=li.minutes=ri,li.second=li.seconds=ai,li.millisecond=li.milliseconds=ii,li.utcOffset=mr,li.utc=gr,li.local=br,li.parseZone=wr,li.hasAlignedHourOffset=Or,li.isDST=Er,li.isLocal=xr,li.isUtcOffset=Sr,li.isUtc=jr,li.isUTC=jr,li.zoneAbbr=ci,li.zoneName=si,li.dates=j("dates accessor is deprecated. Use date instead.",ti),li.months=j("months accessor is deprecated. Use month instead",ft),li.years=j("years accessor is deprecated. Use year instead",vt),li.zone=j("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",vr),li.isDSTShifted=j("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",_r);var hi=A.prototype;function yi(e,t,n,r){var o=bn(),i=y().set(r,t);return o[n](i,e)}function mi(e,t,n){if(f(e)&&(t=e,e=void 0),e=e||"",null!=t)return yi(e,t,n,"month");var r,o=[];for(r=0;r<12;r++)o[r]=yi(e,r,n,"month");return o}function vi(e,t,n,r){"boolean"==typeof e?(f(t)&&(n=t,t=void 0),t=t||""):(n=t=e,e=!1,f(t)&&(n=t,t=void 0),t=t||"");var o,i=bn(),a=e?i._week.dow:0,u=[];if(null!=n)return yi(t,(n+a)%7,r,"day");for(o=0;o<7;o++)u[o]=yi(t,(o+a)%7,r,"day");return u}function gi(e,t){return mi(e,t,"months")}function bi(e,t){return mi(e,t,"monthsShort")}function wi(e,t,n){return vi(e,t,n,"weekdays")}function Oi(e,t,n){return vi(e,t,n,"weekdaysShort")}function Ei(e,t,n){return vi(e,t,n,"weekdaysMin")}hi.calendar=L,hi.longDateFormat=Y,hi.invalidDate=$,hi.ordinal=X,hi.preparse=di,hi.postformat=di,hi.relativeTime=ee,hi.pastFuture=te,hi.set=R,hi.eras=To,hi.erasParse=Ro,hi.erasConvertYear=Co,hi.erasAbbrRegex=Fo,hi.erasNameRegex=Mo,hi.erasNarrowRegex=Uo,hi.months=at,hi.monthsShort=ut,hi.monthsParse=st,hi.monthsRegex=ht,hi.monthsShortRegex=dt,hi.week=St,hi.firstDayOfYear=kt,hi.firstDayOfWeek=Pt,hi.weekdays=Bt,hi.weekdaysMin=qt,hi.weekdaysShort=Ht,hi.weekdaysParse=Gt,hi.weekdaysRegex=Zt,hi.weekdaysShortRegex=$t,hi.weekdaysMinRegex=Kt,hi.isPM=nn,hi.meridiem=an,mn("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1===fe(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")}}),o.lang=j("moment.lang is deprecated. Use moment.locale instead.",mn),o.langData=j("moment.langData is deprecated. Use moment.localeData instead.",bn);var _i=Math.abs;function xi(){var e=this._data;return this._milliseconds=_i(this._milliseconds),this._days=_i(this._days),this._months=_i(this._months),e.milliseconds=_i(e.milliseconds),e.seconds=_i(e.seconds),e.minutes=_i(e.minutes),e.hours=_i(e.hours),e.months=_i(e.months),e.years=_i(e.years),this}function Si(e,t,n,r){var o=Ir(t,n);return e._milliseconds+=r*o._milliseconds,e._days+=r*o._days,e._months+=r*o._months,e._bubble()}function ji(e,t){return Si(this,e,t,1)}function Pi(e,t){return Si(this,e,t,-1)}function ki(e){return e<0?Math.floor(e):Math.ceil(e)}function Ii(){var e,t,n,r,o,i=this._milliseconds,a=this._days,u=this._months,c=this._data;return i>=0&&a>=0&&u>=0||i<=0&&a<=0&&u<=0||(i+=864e5*ki(Ri(u)+a),a=0,u=0),c.milliseconds=i%1e3,e=le(i/1e3),c.seconds=e%60,t=le(e/60),c.minutes=t%60,n=le(t/60),c.hours=n%24,a+=le(n/24),u+=o=le(Ti(a)),a-=ki(Ri(o)),r=le(u/12),u%=12,c.days=a,c.months=u,c.years=r,this}function Ti(e){return 4800*e/146097}function Ri(e){return 146097*e/4800}function Ci(e){if(!this.isValid())return NaN;var t,n,r=this._milliseconds;if("month"===(e=oe(e))||"quarter"===e||"year"===e)switch(t=this._days+r/864e5,n=this._months+Ti(t),e){case"month":return n;case"quarter":return n/3;case"year":return n/12}else switch(t=this._days+Math.round(Ri(this._months)),e){case"week":return t/7+r/6048e5;case"day":return t+r/864e5;case"hour":return 24*t+r/36e5;case"minute":return 1440*t+r/6e4;case"second":return 86400*t+r/1e3;case"millisecond":return Math.floor(864e5*t)+r;default:throw new Error("Unknown unit "+e)}}function Ai(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*fe(this._months/12):NaN}function Ni(e){return function(){return this.as(e)}}var Li=Ni("ms"),Di=Ni("s"),Mi=Ni("m"),Fi=Ni("h"),Ui=Ni("d"),Bi=Ni("w"),Hi=Ni("M"),qi=Ni("Q"),zi=Ni("y");function Gi(){return Ir(this)}function Wi(e){return e=oe(e),this.isValid()?this[e+"s"]():NaN}function Vi(e){return function(){return this.isValid()?this._data[e]:NaN}}var Yi=Vi("milliseconds"),Zi=Vi("seconds"),$i=Vi("minutes"),Ki=Vi("hours"),Qi=Vi("days"),Xi=Vi("months"),Ji=Vi("years");function ea(){return le(this.days()/7)}var ta=Math.round,na={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function ra(e,t,n,r,o){return o.relativeTime(t||1,!!n,e,r)}function oa(e,t,n,r){var o=Ir(e).abs(),i=ta(o.as("s")),a=ta(o.as("m")),u=ta(o.as("h")),c=ta(o.as("d")),s=ta(o.as("M")),l=ta(o.as("w")),f=ta(o.as("y")),p=i<=n.ss&&["s",i]||i<n.s&&["ss",i]||a<=1&&["m"]||a<n.m&&["mm",a]||u<=1&&["h"]||u<n.h&&["hh",u]||c<=1&&["d"]||c<n.d&&["dd",c];return null!=n.w&&(p=p||l<=1&&["w"]||l<n.w&&["ww",l]),(p=p||s<=1&&["M"]||s<n.M&&["MM",s]||f<=1&&["y"]||["yy",f])[2]=t,p[3]=+e>0,p[4]=r,ra.apply(null,p)}function ia(e){return void 0===e?ta:"function"==typeof e&&(ta=e,!0)}function aa(e,t){return void 0!==na[e]&&(void 0===t?na[e]:(na[e]=t,"s"===e&&(na.ss=t-1),!0))}function ua(e,t){if(!this.isValid())return this.localeData().invalidDate();var n,r,o=!1,i=na;return"object"==typeof e&&(t=e,e=!1),"boolean"==typeof e&&(o=e),"object"==typeof t&&(i=Object.assign({},na,t),null!=t.s&&null==t.ss&&(i.ss=t.s-1)),r=oa(this,!o,i,n=this.localeData()),o&&(r=n.pastFuture(+this,r)),n.postformat(r)}var ca=Math.abs;function sa(e){return(e>0)-(e<0)||+e}function la(){if(!this.isValid())return this.localeData().invalidDate();var e,t,n,r,o,i,a,u,c=ca(this._milliseconds)/1e3,s=ca(this._days),l=ca(this._months),f=this.asSeconds();return f?(e=le(c/60),t=le(e/60),c%=60,e%=60,n=le(l/12),l%=12,r=c?c.toFixed(3).replace(/\.?0+$/,""):"",o=f<0?"-":"",i=sa(this._months)!==sa(f)?"-":"",a=sa(this._days)!==sa(f)?"-":"",u=sa(this._milliseconds)!==sa(f)?"-":"",o+"P"+(n?i+n+"Y":"")+(l?i+l+"M":"")+(s?a+s+"D":"")+(t||e||c?"T":"")+(t?u+t+"H":"")+(e?u+e+"M":"")+(c?u+r+"S":"")):"P0D"}var fa=ur.prototype;return fa.isValid=ir,fa.abs=xi,fa.add=ji,fa.subtract=Pi,fa.as=Ci,fa.asMilliseconds=Li,fa.asSeconds=Di,fa.asMinutes=Mi,fa.asHours=Fi,fa.asDays=Ui,fa.asWeeks=Bi,fa.asMonths=Hi,fa.asQuarters=qi,fa.asYears=zi,fa.valueOf=Ai,fa._bubble=Ii,fa.clone=Gi,fa.get=Wi,fa.milliseconds=Yi,fa.seconds=Zi,fa.minutes=$i,fa.hours=Ki,fa.days=Qi,fa.weeks=ea,fa.months=Xi,fa.years=Ji,fa.humanize=ua,fa.toISOString=la,fa.toString=la,fa.toJSON=la,fa.locale=uo,fa.localeData=so,fa.toIsoString=j("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",la),fa.lang=co,H("X",0,0,"unix"),H("x",0,0,"valueOf"),Le("x",Te),Le("X",Ae),Be("X",(function(e,t,n){n._d=new Date(1e3*parseFloat(e))})),Be("x",(function(e,t,n){n._d=new Date(fe(e))})),o.version="2.29.4",i(Kn),o.fn=li,o.min=er,o.max=tr,o.now=nr,o.utc=y,o.unix=fi,o.months=gi,o.isDate=p,o.locale=mn,o.invalid=b,o.duration=Ir,o.isMoment=x,o.weekdays=wi,o.parseZone=pi,o.localeData=bn,o.isDuration=cr,o.monthsShort=bi,o.weekdaysMin=Ei,o.defineLocale=vn,o.updateLocale=gn,o.locales=wn,o.weekdaysShort=Oi,o.normalizeUnits=oe,o.relativeTimeRounding=ia,o.relativeTimeThreshold=aa,o.calendarFormat=qr,o.prototype=li,o.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},o}()},92366:(e,t,n)=>{"use strict";const r=n(64942),o=process.hrtime(),i=(new Date).getTime();function a(){let e=process.hrtime(o);return r(i).times(1e6).add(r(e[0]).times(1e9).plus(e[1])).toString()}e.exports=a,e.exports.microseconds=e.exports.micro=function(){return r(a()).divide(1e3).toString()}},28608:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;function o(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(e){return!1}}()?Object.assign:function(e,i){for(var a,u,c=o(e),s=1;s<arguments.length;s++){for(var l in a=Object(arguments[s]))n.call(a,l)&&(c[l]=a[l]);if(t){u=t(a);for(var f=0;f<u.length;f++)r.call(a,u[f])&&(c[u[f]]=a[u[f]])}}return c}},6967:(e,t,n)=>{var r=n(58412);e.exports=d,e.exports.parse=i,e.exports.compile=function(e,t){return u(i(e,t),t)},e.exports.tokensToFunction=u,e.exports.tokensToRegExp=p;var o=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function i(e,t){for(var n,r=[],i=0,a=0,u="",l=t&&t.delimiter||"/";null!=(n=o.exec(e));){var f=n[0],p=n[1],d=n.index;if(u+=e.slice(a,d),a=d+f.length,p)u+=p[1];else{var h=e[a],y=n[2],m=n[3],v=n[4],g=n[5],b=n[6],w=n[7];u&&(r.push(u),u="");var O=null!=y&&null!=h&&h!==y,E="+"===b||"*"===b,_="?"===b||"*"===b,x=n[2]||l,S=v||g;r.push({name:m||i++,prefix:y||"",delimiter:x,optional:_,repeat:E,partial:O,asterisk:!!w,pattern:S?s(S):w?".*":"[^"+c(x)+"]+?"})}}return a<e.length&&(u+=e.substr(a)),u&&r.push(u),r}function a(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function u(e,t){for(var n=new Array(e.length),o=0;o<e.length;o++)"object"==typeof e[o]&&(n[o]=new RegExp("^(?:"+e[o].pattern+")$",f(t)));return function(t,o){for(var i="",u=t||{},c=(o||{}).pretty?a:encodeURIComponent,s=0;s<e.length;s++){var l=e[s];if("string"!=typeof l){var f,p=u[l.name];if(null==p){if(l.optional){l.partial&&(i+=l.prefix);continue}throw new TypeError('Expected "'+l.name+'" to be defined')}if(r(p)){if(!l.repeat)throw new TypeError('Expected "'+l.name+'" to not repeat, but received `'+JSON.stringify(p)+"`");if(0===p.length){if(l.optional)continue;throw new TypeError('Expected "'+l.name+'" to not be empty')}for(var d=0;d<p.length;d++){if(f=c(p[d]),!n[s].test(f))throw new TypeError('Expected all "'+l.name+'" to match "'+l.pattern+'", but received `'+JSON.stringify(f)+"`");i+=(0===d?l.prefix:l.delimiter)+f}}else{if(f=l.asterisk?encodeURI(p).replace(/[?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})):c(p),!n[s].test(f))throw new TypeError('Expected "'+l.name+'" to match "'+l.pattern+'", but received "'+f+'"');i+=l.prefix+f}}else i+=l}return i}}function c(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function s(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function l(e,t){return e.keys=t,e}function f(e){return e&&e.sensitive?"":"i"}function p(e,t,n){r(t)||(n=t||n,t=[]);for(var o=(n=n||{}).strict,i=!1!==n.end,a="",u=0;u<e.length;u++){var s=e[u];if("string"==typeof s)a+=c(s);else{var p=c(s.prefix),d="(?:"+s.pattern+")";t.push(s),s.repeat&&(d+="(?:"+p+d+")*"),a+=d=s.optional?s.partial?p+"("+d+")?":"(?:"+p+"("+d+"))?":p+"("+d+")"}}var h=c(n.delimiter||"/"),y=a.slice(-h.length)===h;return o||(a=(y?a.slice(0,-h.length):a)+"(?:"+h+"(?=$))?"),a+=i?"$":o&&y?"":"(?="+h+"|$)",l(new RegExp("^"+a,f(n)),t)}function d(e,t,n){return r(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp?function(e,t){var n=e.source.match(/\((?!\?)/g);if(n)for(var r=0;r<n.length;r++)t.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return l(e,t)}(e,t):r(e)?function(e,t,n){for(var r=[],o=0;o<e.length;o++)r.push(d(e[o],t,n).source);return l(new RegExp("(?:"+r.join("|")+")",f(n)),t)}(e,t,n):function(e,t,n){return p(i(e,n),t,n)}(e,t,n)}},87452:function(e,t,n){var r,o;void 0===(o="function"==typeof(r=function(){"use strict";return function(e,t){var n,r,o,i,a,u,c,s,l,f,p,d,h,y,m,v,g,b,w=this,O=!1,E=!0,_=!0,x={barsSize:{top:44,bottom:"auto"},closeElClasses:["item","caption","zoom-wrap","ui","top-bar"],timeToIdle:4e3,timeToIdleOutside:1e3,loadingIndicatorDelay:1e3,addCaptionHTMLFn:function(e,t){return e.title?(t.children[0].innerHTML=e.title,!0):(t.children[0].innerHTML="",!1)},closeEl:!0,captionEl:!0,fullscreenEl:!0,zoomEl:!0,shareEl:!0,counterEl:!0,arrowEl:!0,preloaderEl:!0,tapToClose:!1,tapToToggleControls:!0,clickToCloseNonZoomable:!0,shareButtons:[{id:"facebook",label:"Share on Facebook",url:"https://www.facebook.com/sharer/sharer.php?u={{url}}"},{id:"twitter",label:"Tweet",url:"https://twitter.com/intent/tweet?text={{text}}&url={{url}}"},{id:"pinterest",label:"Pin it",url:"http://www.pinterest.com/pin/create/button/?url={{url}}&media={{image_url}}&description={{text}}"},{id:"download",label:"Download image",url:"{{raw_image_url}}",download:!0}],getImageURLForShare:function(){return e.currItem.src||""},getPageURLForShare:function(){return window.location.href},getTextForShare:function(){return e.currItem.title||""},indexIndicatorSep:" / ",fitControlsWidth:1200},S=function(e){if(v)return!0;e=e||window.event,m.timeToIdle&&m.mouseUsed&&!l&&L();for(var n,r,o=(e.target||e.srcElement).getAttribute("class")||"",i=0;i<z.length;i++)(n=z[i]).onTap&&o.indexOf("pswp__"+n.name)>-1&&(n.onTap(),r=!0);if(r){e.stopPropagation&&e.stopPropagation(),v=!0;var a=t.features.isOldAndroid?600:30;setTimeout((function(){v=!1}),a)}},j=function(){return!e.likelyTouchDevice||m.mouseUsed||screen.width>m.fitControlsWidth},P=function(e,n,r){t[(r?"add":"remove")+"Class"](e,"pswp__"+n)},k=function(){var e=1===m.getNumItemsFn();e!==y&&(P(r,"ui--one-slide",e),y=e)},I=function(){P(c,"share-modal--hidden",_)},T=function(){return(_=!_)?(t.removeClass(c,"pswp__share-modal--fade-in"),setTimeout((function(){_&&I()}),300)):(I(),setTimeout((function(){_||t.addClass(c,"pswp__share-modal--fade-in")}),30)),_||C(),!1},R=function(t){var n=(t=t||window.event).target||t.srcElement;return e.shout("shareLinkClick",t,n),!(!n.href||!n.hasAttribute("download")&&(window.open(n.href,"pswp_share","scrollbars=yes,resizable=yes,toolbar=no,location=yes,width=550,height=420,top=100,left="+(window.screen?Math.round(screen.width/2-275):100)),_||T(),1))},C=function(){for(var e,t,n,r,o="",i=0;i<m.shareButtons.length;i++)e=m.shareButtons[i],t=m.getImageURLForShare(e),n=m.getPageURLForShare(e),r=m.getTextForShare(e),o+='<a href="'+e.url.replace("{{url}}",encodeURIComponent(n)).replace("{{image_url}}",encodeURIComponent(t)).replace("{{raw_image_url}}",t).replace("{{text}}",encodeURIComponent(r))+'" target="_blank" class="pswp__share--'+e.id+'"'+(e.download?"download":"")+">"+e.label+"</a>",m.parseShareButtonOut&&(o=m.parseShareButtonOut(e,o));c.children[0].innerHTML=o,c.children[0].onclick=R},A=function(e){for(var n=0;n<m.closeElClasses.length;n++)if(t.hasClass(e,"pswp__"+m.closeElClasses[n]))return!0},N=0,L=function(){clearTimeout(b),N=0,l&&w.setIdle(!1)},D=function(e){var t=(e=e||window.event).relatedTarget||e.toElement;t&&"HTML"!==t.nodeName||(clearTimeout(b),b=setTimeout((function(){w.setIdle(!0)}),m.timeToIdleOutside))},M=function(){m.fullscreenEl&&!t.features.isOldAndroid&&(n||(n=w.getFullscreenAPI()),n?(t.bind(document,n.eventK,w.updateFullscreen),w.updateFullscreen(),t.addClass(e.template,"pswp--supports-fs")):t.removeClass(e.template,"pswp--supports-fs"))},F=function(){m.preloaderEl&&(U(!0),f("beforeChange",(function(){clearTimeout(h),h=setTimeout((function(){e.currItem&&e.currItem.loading?(!e.allowProgressiveImg()||e.currItem.img&&!e.currItem.img.naturalWidth)&&U(!1):U(!0)}),m.loadingIndicatorDelay)})),f("imageLoadComplete",(function(t,n){e.currItem===n&&U(!0)})))},U=function(e){d!==e&&(P(p,"preloader--active",!e),d=e)},B=function(e){var n=e.vGap;if(j()){var a=m.barsSize;if(m.captionEl&&"auto"===a.bottom)if(i||((i=t.createEl("pswp__caption pswp__caption--fake")).appendChild(t.createEl("pswp__caption__center")),r.insertBefore(i,o),t.addClass(r,"pswp__ui--fit")),m.addCaptionHTMLFn(e,i,!0)){var u=i.clientHeight;n.bottom=parseInt(u,10)||44}else n.bottom=a.top;else n.bottom="auto"===a.bottom?0:a.bottom;n.top=a.top}else n.top=n.bottom=0},H=function(){m.timeToIdle&&f("mouseUsed",(function(){t.bind(document,"mousemove",L),t.bind(document,"mouseout",D),g=setInterval((function(){2==++N&&w.setIdle(!0)}),m.timeToIdle/2)}))},q=function(){var e;f("onVerticalDrag",(function(e){E&&e<.95?w.hideControls():!E&&e>=.95&&w.showControls()})),f("onPinchClose",(function(t){E&&t<.9?(w.hideControls(),e=!0):e&&!E&&t>.9&&w.showControls()})),f("zoomGestureEnded",(function(){(e=!1)&&!E&&w.showControls()}))},z=[{name:"caption",option:"captionEl",onInit:function(e){o=e}},{name:"share-modal",option:"shareEl",onInit:function(e){c=e},onTap:function(){T()}},{name:"button--share",option:"shareEl",onInit:function(e){u=e},onTap:function(){T()}},{name:"button--zoom",option:"zoomEl",onTap:e.toggleDesktopZoom},{name:"counter",option:"counterEl",onInit:function(e){a=e}},{name:"button--close",option:"closeEl",onTap:e.close},{name:"button--arrow--left",option:"arrowEl",onTap:e.prev},{name:"button--arrow--right",option:"arrowEl",onTap:e.next},{name:"button--fs",option:"fullscreenEl",onTap:function(){n.isFullscreen()?n.exit():n.enter()}},{name:"preloader",option:"preloaderEl",onInit:function(e){p=e}}],G=function(){var e,n,o,i=function(r){if(r)for(var i=r.length,a=0;a<i;a++){e=r[a],n=e.className;for(var u=0;u<z.length;u++)o=z[u],n.indexOf("pswp__"+o.name)>-1&&(m[o.option]?(t.removeClass(e,"pswp__element--disabled"),o.onInit&&o.onInit(e)):t.addClass(e,"pswp__element--disabled"))}};i(r.children);var a=t.getChildByClass(r,"pswp__top-bar");a&&i(a.children)};w.init=function(){t.extend(e.options,x,!0),m=e.options,r=t.getChildByClass(e.scrollWrap,"pswp__ui"),f=e.listen,q(),f("beforeChange",w.update),f("doubleTap",(function(t){var n=e.currItem.initialZoomLevel;e.getZoomLevel()!==n?e.zoomTo(n,t,333):e.zoomTo(m.getDoubleTapZoom(!1,e.currItem),t,333)})),f("preventDragEvent",(function(e,t,n){var r=e.target||e.srcElement;r&&r.getAttribute("class")&&e.type.indexOf("mouse")>-1&&(r.getAttribute("class").indexOf("__caption")>0||/(SMALL|STRONG|EM)/i.test(r.tagName))&&(n.prevent=!1)})),f("bindEvents",(function(){t.bind(r,"pswpTap click",S),t.bind(e.scrollWrap,"pswpTap",w.onGlobalTap),e.likelyTouchDevice||t.bind(e.scrollWrap,"mouseover",w.onMouseOver)})),f("unbindEvents",(function(){_||T(),g&&clearInterval(g),t.unbind(document,"mouseout",D),t.unbind(document,"mousemove",L),t.unbind(r,"pswpTap click",S),t.unbind(e.scrollWrap,"pswpTap",w.onGlobalTap),t.unbind(e.scrollWrap,"mouseover",w.onMouseOver),n&&(t.unbind(document,n.eventK,w.updateFullscreen),n.isFullscreen()&&(m.hideAnimationDuration=0,n.exit()),n=null)})),f("destroy",(function(){m.captionEl&&(i&&r.removeChild(i),t.removeClass(o,"pswp__caption--empty")),c&&(c.children[0].onclick=null),t.removeClass(r,"pswp__ui--over-close"),t.addClass(r,"pswp__ui--hidden"),w.setIdle(!1)})),m.showAnimationDuration||t.removeClass(r,"pswp__ui--hidden"),f("initialZoomIn",(function(){m.showAnimationDuration&&t.removeClass(r,"pswp__ui--hidden")})),f("initialZoomOut",(function(){t.addClass(r,"pswp__ui--hidden")})),f("parseVerticalMargin",B),G(),m.shareEl&&u&&c&&(_=!0),k(),H(),M(),F()},w.setIdle=function(e){l=e,P(r,"ui--idle",e)},w.update=function(){E&&e.currItem?(w.updateIndexIndicator(),m.captionEl&&(m.addCaptionHTMLFn(e.currItem,o),P(o,"caption--empty",!e.currItem.title)),O=!0):O=!1,_||T(),k()},w.updateFullscreen=function(r){r&&setTimeout((function(){e.setScrollOffset(0,t.getScrollY())}),50),t[(n.isFullscreen()?"add":"remove")+"Class"](e.template,"pswp--fs")},w.updateIndexIndicator=function(){m.counterEl&&(a.innerHTML=e.getCurrentIndex()+1+m.indexIndicatorSep+m.getNumItemsFn())},w.onGlobalTap=function(n){var r=(n=n||window.event).target||n.srcElement;if(!v)if(n.detail&&"mouse"===n.detail.pointerType){if(A(r))return void e.close();t.hasClass(r,"pswp__img")&&(1===e.getZoomLevel()&&e.getZoomLevel()<=e.currItem.fitRatio?m.clickToCloseNonZoomable&&e.close():e.toggleDesktopZoom(n.detail.releasePoint))}else if(m.tapToToggleControls&&(E?w.hideControls():w.showControls()),m.tapToClose&&(t.hasClass(r,"pswp__img")||A(r)))return void e.close()},w.onMouseOver=function(e){var t=(e=e||window.event).target||e.srcElement;P(r,"ui--over-close",A(t))},w.hideControls=function(){t.addClass(r,"pswp__ui--hidden"),E=!1},w.showControls=function(){E=!0,O||w.update(),t.removeClass(r,"pswp__ui--hidden")},w.supportsFullscreen=function(){var e=document;return!!(e.exitFullscreen||e.mozCancelFullScreen||e.webkitExitFullscreen||e.msExitFullscreen)},w.getFullscreenAPI=function(){var t,n=document.documentElement,r="fullscreenchange";return n.requestFullscreen?t={enterK:"requestFullscreen",exitK:"exitFullscreen",elementK:"fullscreenElement",eventK:r}:n.mozRequestFullScreen?t={enterK:"mozRequestFullScreen",exitK:"mozCancelFullScreen",elementK:"mozFullScreenElement",eventK:"moz"+r}:n.webkitRequestFullscreen?t={enterK:"webkitRequestFullscreen",exitK:"webkitExitFullscreen",elementK:"webkitFullscreenElement",eventK:"webkit"+r}:n.msRequestFullscreen&&(t={enterK:"msRequestFullscreen",exitK:"msExitFullscreen",elementK:"msFullscreenElement",eventK:"MSFullscreenChange"}),t&&(t.enter=function(){if(s=m.closeOnScroll,m.closeOnScroll=!1,"webkitRequestFullscreen"!==this.enterK)return e.template[this.enterK]();e.template[this.enterK](Element.ALLOW_KEYBOARD_INPUT)},t.exit=function(){return m.closeOnScroll=s,document[this.exitK]()},t.isFullscreen=function(){return document[this.elementK]}),t}}})?r.call(t,n,t,e):r)||(e.exports=o)},98454:function(e,t,n){var r,o;void 0===(o="function"==typeof(r=function(){"use strict";return function(e,t,n,r){var o={features:null,bind:function(e,t,n,r){var o=(r?"remove":"add")+"EventListener";t=t.split(" ");for(var i=0;i<t.length;i++)t[i]&&e[o](t[i],n,!1)},isArray:function(e){return e instanceof Array},createEl:function(e,t){var n=document.createElement(t||"div");return e&&(n.className=e),n},getScrollY:function(){var e=window.pageYOffset;return void 0!==e?e:document.documentElement.scrollTop},unbind:function(e,t,n){o.bind(e,t,n,!0)},removeClass:function(e,t){var n=new RegExp("(\\s|^)"+t+"(\\s|$)");e.className=e.className.replace(n," ").replace(/^\s\s*/,"").replace(/\s\s*$/,"")},addClass:function(e,t){o.hasClass(e,t)||(e.className+=(e.className?" ":"")+t)},hasClass:function(e,t){return e.className&&new RegExp("(^|\\s)"+t+"(\\s|$)").test(e.className)},getChildByClass:function(e,t){for(var n=e.firstChild;n;){if(o.hasClass(n,t))return n;n=n.nextSibling}},arraySearch:function(e,t,n){for(var r=e.length;r--;)if(e[r][n]===t)return r;return-1},extend:function(e,t,n){for(var r in t)if(t.hasOwnProperty(r)){if(n&&e.hasOwnProperty(r))continue;e[r]=t[r]}},easing:{sine:{out:function(e){return Math.sin(e*(Math.PI/2))},inOut:function(e){return-(Math.cos(Math.PI*e)-1)/2}},cubic:{out:function(e){return--e*e*e+1}}},detectFeatures:function(){if(o.features)return o.features;var e=o.createEl().style,t="",n={};if(n.oldIE=document.all&&!document.addEventListener,n.touch="ontouchstart"in window,window.requestAnimationFrame&&(n.raf=window.requestAnimationFrame,n.caf=window.cancelAnimationFrame),n.pointerEvent=!!window.PointerEvent||navigator.msPointerEnabled,!n.pointerEvent){var r=navigator.userAgent;if(/iP(hone|od)/.test(navigator.platform)){var i=navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/);i&&i.length>0&&(i=parseInt(i[1],10))>=1&&i<8&&(n.isOldIOSPhone=!0)}var a=r.match(/Android\s([0-9\.]*)/),u=a?a[1]:0;(u=parseFloat(u))>=1&&(u<4.4&&(n.isOldAndroid=!0),n.androidVersion=u),n.isMobileOpera=/opera mini|opera mobi/i.test(r)}for(var c,s,l=["transform","perspective","animationName"],f=["","webkit","Moz","ms","O"],p=0;p<4;p++){t=f[p];for(var d=0;d<3;d++)c=l[d],s=t+(t?c.charAt(0).toUpperCase()+c.slice(1):c),!n[c]&&s in e&&(n[c]=s);t&&!n.raf&&(t=t.toLowerCase(),n.raf=window[t+"RequestAnimationFrame"],n.raf&&(n.caf=window[t+"CancelAnimationFrame"]||window[t+"CancelRequestAnimationFrame"]))}if(!n.raf){var h=0;n.raf=function(e){var t=(new Date).getTime(),n=Math.max(0,16-(t-h)),r=window.setTimeout((function(){e(t+n)}),n);return h=t+n,r},n.caf=function(e){clearTimeout(e)}}return n.svg=!!document.createElementNS&&!!document.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect,o.features=n,n}};o.detectFeatures(),o.features.oldIE&&(o.bind=function(e,t,n,r){t=t.split(" ");for(var o,i=(r?"detach":"attach")+"Event",a=function(){n.handleEvent.call(n)},u=0;u<t.length;u++)if(o=t[u])if("object"==typeof n&&n.handleEvent){if(r){if(!n["oldIE"+o])return!1}else n["oldIE"+o]=a;e[i]("on"+o,n["oldIE"+o])}else e[i]("on"+o,n)});var i=this,a=25,u=3,c={allowPanToNext:!0,spacing:.12,bgOpacity:1,mouseUsed:!1,loop:!0,pinchToClose:!0,closeOnScroll:!0,closeOnVerticalDrag:!0,verticalDragRange:.75,hideAnimationDuration:333,showAnimationDuration:333,showHideOpacity:!1,focus:!0,escKey:!0,arrowKeys:!0,mainScrollEndFriction:.35,panEndFriction:.35,isClickableElement:function(e){return"A"===e.tagName},getDoubleTapZoom:function(e,t){return e||t.initialZoomLevel<.7?1:1.33},maxSpreadZoom:1.33,modal:!0,scaleMode:"fit"};o.extend(c,r);var s,l,f,p,d,h,y,m,v,g,b,w,O,E,_,x,S,j,P,k,I,T,R,C,A,N,L,D,M,F,U,B,H,q,z,G,W,V,Y,Z,$,K,Q,X,J,ee,te,ne,re,oe,ie,ae,ue,ce,se,le,fe=function(){return{x:0,y:0}},pe=fe(),de=fe(),he=fe(),ye={},me=0,ve={},ge=fe(),be=0,we=!0,Oe=[],Ee={},_e=!1,xe=function(e,t){o.extend(i,t.publicMethods),Oe.push(e)},Se=function(e){var t=Jt();return e>t-1?e-t:e<0?t+e:e},je={},Pe=function(e,t){return je[e]||(je[e]=[]),je[e].push(t)},ke=function(e){var t=je[e];if(t){var n=Array.prototype.slice.call(arguments);n.shift();for(var r=0;r<t.length;r++)t[r].apply(i,n)}},Ie=function(){return(new Date).getTime()},Te=function(e){ce=e,i.bg.style.opacity=e*c.bgOpacity},Re=function(e,t,n,r,o){(!_e||o&&o!==i.currItem)&&(r/=o?o.fitRatio:i.currItem.fitRatio),e[T]=w+t+"px, "+n+"px"+O+" scale("+r+")"},Ce=function(e){re&&(e&&(g>i.currItem.fitRatio?_e||(fn(i.currItem,!1,!0),_e=!0):_e&&(fn(i.currItem),_e=!1)),Re(re,he.x,he.y,g))},Ae=function(e){e.container&&Re(e.container.style,e.initialPosition.x,e.initialPosition.y,e.initialZoomLevel,e)},Ne=function(e,t){t[T]=w+e+"px, 0px"+O},Le=function(e,t){if(!c.loop&&t){var n=p+(ge.x*me-e)/ge.x,r=Math.round(e-gt.x);(n<0&&r>0||n>=Jt()-1&&r<0)&&(e=gt.x+r*c.mainScrollEndFriction)}gt.x=e,Ne(e,d)},De=function(e,t){var n=bt[e]-ve[e];return de[e]+pe[e]+n-n*(t/b)},Me=function(e,t){e.x=t.x,e.y=t.y,t.id&&(e.id=t.id)},Fe=function(e){e.x=Math.round(e.x),e.y=Math.round(e.y)},Ue=null,Be=function(){Ue&&(o.unbind(document,"mousemove",Be),o.addClass(e,"pswp--has_mouse"),c.mouseUsed=!0,ke("mouseUsed")),Ue=setTimeout((function(){Ue=null}),100)},He=function(){o.bind(document,"keydown",i),U.transform&&o.bind(i.scrollWrap,"click",i),c.mouseUsed||o.bind(document,"mousemove",Be),o.bind(window,"resize scroll orientationchange",i),ke("bindEvents")},qe=function(){o.unbind(window,"resize scroll orientationchange",i),o.unbind(window,"scroll",v.scroll),o.unbind(document,"keydown",i),o.unbind(document,"mousemove",Be),U.transform&&o.unbind(i.scrollWrap,"click",i),Y&&o.unbind(window,y,i),clearTimeout(B),ke("unbindEvents")},ze=function(e,t){var n=un(i.currItem,ye,e);return t&&(ne=n),n},Ge=function(e){return e||(e=i.currItem),e.initialZoomLevel},We=function(e){return e||(e=i.currItem),e.w>0?c.maxSpreadZoom:1},Ve=function(e,t,n,r){return r===i.currItem.initialZoomLevel?(n[e]=i.currItem.initialPosition[e],!0):(n[e]=De(e,r),n[e]>t.min[e]?(n[e]=t.min[e],!0):n[e]<t.max[e]&&(n[e]=t.max[e],!0))},Ye=function(){if(T){var t=U.perspective&&!C;return w="translate"+(t?"3d(":"("),void(O=U.perspective?", 0px)":")")}T="left",o.addClass(e,"pswp--ie"),Ne=function(e,t){t.left=e+"px"},Ae=function(e){var t=e.fitRatio>1?1:e.fitRatio,n=e.container.style,r=t*e.w,o=t*e.h;n.width=r+"px",n.height=o+"px",n.left=e.initialPosition.x+"px",n.top=e.initialPosition.y+"px"},Ce=function(){if(re){var e=re,t=i.currItem,n=t.fitRatio>1?1:t.fitRatio,r=n*t.w,o=n*t.h;e.width=r+"px",e.height=o+"px",e.left=he.x+"px",e.top=he.y+"px"}}},Ze=function(e){var t="";c.escKey&&27===e.keyCode?t="close":c.arrowKeys&&(37===e.keyCode?t="prev":39===e.keyCode&&(t="next")),t&&(e.ctrlKey||e.altKey||e.shiftKey||e.metaKey||(e.preventDefault?e.preventDefault():e.returnValue=!1,i[t]()))},$e=function(e){e&&(K||$||oe||W)&&(e.preventDefault(),e.stopPropagation())},Ke=function(){i.setScrollOffset(0,o.getScrollY())},Qe={},Xe=0,Je=function(e){Qe[e]&&(Qe[e].raf&&N(Qe[e].raf),Xe--,delete Qe[e])},et=function(e){Qe[e]&&Je(e),Qe[e]||(Xe++,Qe[e]={})},tt=function(){for(var e in Qe)Qe.hasOwnProperty(e)&&Je(e)},nt=function(e,t,n,r,o,i,a){var u,c=Ie();et(e);var s=function(){if(Qe[e]){if((u=Ie()-c)>=r)return Je(e),i(n),void(a&&a());i((n-t)*o(u/r)+t),Qe[e].raf=A(s)}};s()},rt={shout:ke,listen:Pe,viewportSize:ye,options:c,isMainScrollAnimating:function(){return oe},getZoomLevel:function(){return g},getCurrentIndex:function(){return p},isDragging:function(){return Y},isZooming:function(){return ee},setScrollOffset:function(e,t){ve.x=e,F=ve.y=t,ke("updateScrollOffset",ve)},applyZoomPan:function(e,t,n,r){he.x=t,he.y=n,g=e,Ce(r)},init:function(){if(!s&&!l){var n;i.framework=o,i.template=e,i.bg=o.getChildByClass(e,"pswp__bg"),L=e.className,s=!0,U=o.detectFeatures(),A=U.raf,N=U.caf,T=U.transform,M=U.oldIE,i.scrollWrap=o.getChildByClass(e,"pswp__scroll-wrap"),i.container=o.getChildByClass(i.scrollWrap,"pswp__container"),d=i.container.style,i.itemHolders=x=[{el:i.container.children[0],wrap:0,index:-1},{el:i.container.children[1],wrap:0,index:-1},{el:i.container.children[2],wrap:0,index:-1}],x[0].el.style.display=x[2].el.style.display="none",Ye(),v={resize:i.updateSize,orientationchange:function(){clearTimeout(B),B=setTimeout((function(){ye.x!==i.scrollWrap.clientWidth&&i.updateSize()}),500)},scroll:Ke,keydown:Ze,click:$e};var r=U.isOldIOSPhone||U.isOldAndroid||U.isMobileOpera;for(U.animationName&&U.transform&&!r||(c.showAnimationDuration=c.hideAnimationDuration=0),n=0;n<Oe.length;n++)i["init"+Oe[n]]();t&&(i.ui=new t(i,o)).init(),ke("firstUpdate"),p=p||c.index||0,(isNaN(p)||p<0||p>=Jt())&&(p=0),i.currItem=Xt(p),(U.isOldIOSPhone||U.isOldAndroid)&&(we=!1),e.setAttribute("aria-hidden","false"),c.modal&&(we?e.style.position="fixed":(e.style.position="absolute",e.style.top=o.getScrollY()+"px")),void 0===F&&(ke("initialLayout"),F=D=o.getScrollY());var a="pswp--open ";for(c.mainClass&&(a+=c.mainClass+" "),c.showHideOpacity&&(a+="pswp--animate_opacity "),a+=C?"pswp--touch":"pswp--notouch",a+=U.animationName?" pswp--css_animation":"",a+=U.svg?" pswp--svg":"",o.addClass(e,a),i.updateSize(),h=-1,be=null,n=0;n<u;n++)Ne((n+h)*ge.x,x[n].el.style);M||o.bind(i.scrollWrap,m,i),Pe("initialZoomInEnd",(function(){i.setContent(x[0],p-1),i.setContent(x[2],p+1),x[0].el.style.display=x[2].el.style.display="block",c.focus&&e.focus(),He()})),i.setContent(x[1],p),i.updateCurrItem(),ke("afterInit"),we||(E=setInterval((function(){Xe||Y||ee||g!==i.currItem.initialZoomLevel||i.updateSize()}),1e3)),o.addClass(e,"pswp--visible")}},close:function(){s&&(s=!1,l=!0,ke("close"),qe(),en(i.currItem,null,!0,i.destroy))},destroy:function(){ke("destroy"),Zt&&clearTimeout(Zt),e.setAttribute("aria-hidden","true"),e.className=L,E&&clearInterval(E),o.unbind(i.scrollWrap,m,i),o.unbind(window,"scroll",i),xt(),tt(),je=null},panTo:function(e,t,n){n||(e>ne.min.x?e=ne.min.x:e<ne.max.x&&(e=ne.max.x),t>ne.min.y?t=ne.min.y:t<ne.max.y&&(t=ne.max.y)),he.x=e,he.y=t,Ce()},handleEvent:function(e){e=e||window.event,v[e.type]&&v[e.type](e)},goTo:function(e){var t=(e=Se(e))-p;be=t,p=e,i.currItem=Xt(p),me-=t,Le(ge.x*me),tt(),oe=!1,i.updateCurrItem()},next:function(){i.goTo(p+1)},prev:function(){i.goTo(p-1)},updateCurrZoomItem:function(e){if(e&&ke("beforeChange",0),x[1].el.children.length){var t=x[1].el.children[0];re=o.hasClass(t,"pswp__zoom-wrap")?t.style:null}else re=null;ne=i.currItem.bounds,b=g=i.currItem.initialZoomLevel,he.x=ne.center.x,he.y=ne.center.y,e&&ke("afterChange")},invalidateCurrItems:function(){_=!0;for(var e=0;e<u;e++)x[e].item&&(x[e].item.needsUpdate=!0)},updateCurrItem:function(e){if(0!==be){var t,n=Math.abs(be);if(!(e&&n<2)){i.currItem=Xt(p),_e=!1,ke("beforeChange",be),n>=u&&(h+=be+(be>0?-u:u),n=u);for(var r=0;r<n;r++)be>0?(t=x.shift(),x[u-1]=t,h++,Ne((h+2)*ge.x,t.el.style),i.setContent(t,p-n+r+1+1)):(t=x.pop(),x.unshift(t),h--,Ne(h*ge.x,t.el.style),i.setContent(t,p+n-r-1-1));if(re&&1===Math.abs(be)){var o=Xt(S);o.initialZoomLevel!==g&&(un(o,ye),fn(o),Ae(o))}be=0,i.updateCurrZoomItem(),S=p,ke("afterChange")}}},updateSize:function(t){if(!we&&c.modal){var n=o.getScrollY();if(F!==n&&(e.style.top=n+"px",F=n),!t&&Ee.x===window.innerWidth&&Ee.y===window.innerHeight)return;Ee.x=window.innerWidth,Ee.y=window.innerHeight,e.style.height=Ee.y+"px"}if(ye.x=i.scrollWrap.clientWidth,ye.y=i.scrollWrap.clientHeight,Ke(),ge.x=ye.x+Math.round(ye.x*c.spacing),ge.y=ye.y,Le(ge.x*me),ke("beforeResize"),void 0!==h){for(var r,a,s,l=0;l<u;l++)r=x[l],Ne((l+h)*ge.x,r.el.style),s=p+l-1,c.loop&&Jt()>2&&(s=Se(s)),(a=Xt(s))&&(_||a.needsUpdate||!a.bounds)?(i.cleanSlide(a),i.setContent(r,s),1===l&&(i.currItem=a,i.updateCurrZoomItem(!0)),a.needsUpdate=!1):-1===r.index&&s>=0&&i.setContent(r,s),a&&a.container&&(un(a,ye),fn(a),Ae(a));_=!1}b=g=i.currItem.initialZoomLevel,(ne=i.currItem.bounds)&&(he.x=ne.center.x,he.y=ne.center.y,Ce(!0)),ke("resize")},zoomTo:function(e,t,n,r,i){t&&(b=g,bt.x=Math.abs(t.x)-he.x,bt.y=Math.abs(t.y)-he.y,Me(de,he));var a=ze(e,!1),u={};Ve("x",a,u,e),Ve("y",a,u,e);var c=g,s={x:he.x,y:he.y};Fe(u);var l=function(t){1===t?(g=e,he.x=u.x,he.y=u.y):(g=(e-c)*t+c,he.x=(u.x-s.x)*t+s.x,he.y=(u.y-s.y)*t+s.y),i&&i(t),Ce(1===t)};n?nt("customZoomTo",0,1,n,r||o.easing.sine.inOut,l):l(1)}},ot=30,it=10,at={},ut={},ct={},st={},lt={},ft=[],pt={},dt=[],ht={},yt=0,mt=fe(),vt=0,gt=fe(),bt=fe(),wt=fe(),Ot=function(e,t){return e.x===t.x&&e.y===t.y},Et=function(e,t){return Math.abs(e.x-t.x)<a&&Math.abs(e.y-t.y)<a},_t=function(e,t){return ht.x=Math.abs(e.x-t.x),ht.y=Math.abs(e.y-t.y),Math.sqrt(ht.x*ht.x+ht.y*ht.y)},xt=function(){Q&&(N(Q),Q=null)},St=function(){Y&&(Q=A(St),Ht())},jt=function(){return!("fit"===c.scaleMode&&g===i.currItem.initialZoomLevel)},Pt=function(e,t){return!(!e||e===document)&&!(e.getAttribute("class")&&e.getAttribute("class").indexOf("pswp__scroll-wrap")>-1)&&(t(e)?e:Pt(e.parentNode,t))},kt={},It=function(e,t){return kt.prevent=!Pt(e.target,c.isClickableElement),ke("preventDragEvent",e,t,kt),kt.prevent},Tt=function(e,t){return t.x=e.pageX,t.y=e.pageY,t.id=e.identifier,t},Rt=function(e,t,n){n.x=.5*(e.x+t.x),n.y=.5*(e.y+t.y)},Ct=function(e,t,n){if(e-q>50){var r=dt.length>2?dt.shift():{};r.x=t,r.y=n,dt.push(r),q=e}},At=function(){var e=he.y-i.currItem.initialPosition.y;return 1-Math.abs(e/(ye.y/2))},Nt={},Lt={},Dt=[],Mt=function(e){for(;Dt.length>0;)Dt.pop();return R?(le=0,ft.forEach((function(e){0===le?Dt[0]=e:1===le&&(Dt[1]=e),le++}))):e.type.indexOf("touch")>-1?e.touches&&e.touches.length>0&&(Dt[0]=Tt(e.touches[0],Nt),e.touches.length>1&&(Dt[1]=Tt(e.touches[1],Lt))):(Nt.x=e.pageX,Nt.y=e.pageY,Nt.id="",Dt[0]=Nt),Dt},Ft=function(e,t){var n,r,o,a,u=he[e]+t[e],s=t[e]>0,l=gt.x+t.x,f=gt.x-pt.x;if(n=u>ne.min[e]||u<ne.max[e]?c.panEndFriction:1,u=he[e]+t[e]*n,(c.allowPanToNext||g===i.currItem.initialZoomLevel)&&(re?"h"!==ie||"x"!==e||$||(s?(u>ne.min[e]&&(n=c.panEndFriction,ne.min[e],r=ne.min[e]-de[e]),(r<=0||f<0)&&Jt()>1?(a=l,f<0&&l>pt.x&&(a=pt.x)):ne.min.x!==ne.max.x&&(o=u)):(u<ne.max[e]&&(n=c.panEndFriction,ne.max[e],r=de[e]-ne.max[e]),(r<=0||f>0)&&Jt()>1?(a=l,f>0&&l<pt.x&&(a=pt.x)):ne.min.x!==ne.max.x&&(o=u))):a=l,"x"===e))return void 0!==a&&(Le(a,!0),X=a!==pt.x),ne.min.x!==ne.max.x&&(void 0!==o?he.x=o:X||(he.x+=t.x*n)),void 0!==a;oe||X||g>i.currItem.fitRatio&&(he[e]+=t[e]*n)},Ut=function(e){if(!("mousedown"===e.type&&e.button>0))if(Qt)e.preventDefault();else if(!V||"mousedown"!==e.type){if(It(e,!0)&&e.preventDefault(),ke("pointerDown"),R){var t=o.arraySearch(ft,e.pointerId,"id");t<0&&(t=ft.length),ft[t]={x:e.pageX,y:e.pageY,id:e.pointerId}}var n=Mt(e),r=n.length;J=null,tt(),Y&&1!==r||(Y=ae=!0,o.bind(window,y,i),G=se=ue=W=X=K=Z=$=!1,ie=null,ke("firstTouchStart",n),Me(de,he),pe.x=pe.y=0,Me(st,n[0]),Me(lt,st),pt.x=ge.x*me,dt=[{x:st.x,y:st.y}],q=H=Ie(),ze(g,!0),xt(),St()),!ee&&r>1&&!oe&&!X&&(b=g,$=!1,ee=Z=!0,pe.y=pe.x=0,Me(de,he),Me(at,n[0]),Me(ut,n[1]),Rt(at,ut,wt),bt.x=Math.abs(wt.x)-he.x,bt.y=Math.abs(wt.y)-he.y,te=_t(at,ut))}},Bt=function(e){if(e.preventDefault(),R){var t=o.arraySearch(ft,e.pointerId,"id");if(t>-1){var n=ft[t];n.x=e.pageX,n.y=e.pageY}}if(Y){var r=Mt(e);if(ie||K||ee)J=r;else if(gt.x!==ge.x*me)ie="h";else{var i=Math.abs(r[0].x-st.x)-Math.abs(r[0].y-st.y);Math.abs(i)>=it&&(ie=i>0?"h":"v",J=r)}}},Ht=function(){if(J){var e=J.length;if(0!==e)if(Me(at,J[0]),ct.x=at.x-st.x,ct.y=at.y-st.y,ee&&e>1){if(st.x=at.x,st.y=at.y,!ct.x&&!ct.y&&Ot(J[1],ut))return;Me(ut,J[1]),$||($=!0,ke("zoomGestureStarted"));var t=_t(at,ut),n=Vt(t);n>i.currItem.initialZoomLevel+i.currItem.initialZoomLevel/15&&(se=!0);var r=1,o=Ge(),a=We();if(n<o)if(c.pinchToClose&&!se&&b<=i.currItem.initialZoomLevel){var u=1-(o-n)/(o/1.2);Te(u),ke("onPinchClose",u),ue=!0}else(r=(o-n)/o)>1&&(r=1),n=o-r*(o/3);else n>a&&((r=(n-a)/(6*o))>1&&(r=1),n=a+r*o);r<0&&(r=0),Rt(at,ut,mt),pe.x+=mt.x-wt.x,pe.y+=mt.y-wt.y,Me(wt,mt),he.x=De("x",n),he.y=De("y",n),G=n>g,g=n,Ce()}else{if(!ie)return;if(ae&&(ae=!1,Math.abs(ct.x)>=it&&(ct.x-=J[0].x-lt.x),Math.abs(ct.y)>=it&&(ct.y-=J[0].y-lt.y)),st.x=at.x,st.y=at.y,0===ct.x&&0===ct.y)return;if("v"===ie&&c.closeOnVerticalDrag&&!jt()){pe.y+=ct.y,he.y+=ct.y;var s=At();return W=!0,ke("onVerticalDrag",s),Te(s),void Ce()}Ct(Ie(),at.x,at.y),K=!0,ne=i.currItem.bounds,Ft("x",ct)||(Ft("y",ct),Fe(he),Ce())}}},qt=function(e){if(U.isOldAndroid){if(V&&"mouseup"===e.type)return;e.type.indexOf("touch")>-1&&(clearTimeout(V),V=setTimeout((function(){V=0}),600))}var t;if(ke("pointerUp"),It(e,!1)&&e.preventDefault(),R){var n=o.arraySearch(ft,e.pointerId,"id");if(n>-1)if(t=ft.splice(n,1)[0],navigator.msPointerEnabled){var r={4:"mouse",2:"touch",3:"pen"};t.type=r[e.pointerType],t.type||(t.type=e.pointerType||"mouse")}else t.type=e.pointerType||"mouse"}var a,u=Mt(e),s=u.length;if("mouseup"===e.type&&(s=0),2===s)return J=null,!0;1===s&&Me(lt,u[0]),0!==s||ie||oe||(t||("mouseup"===e.type?t={x:e.pageX,y:e.pageY,type:"mouse"}:e.changedTouches&&e.changedTouches[0]&&(t={x:e.changedTouches[0].pageX,y:e.changedTouches[0].pageY,type:"touch"})),ke("touchRelease",e,t));var l=-1;if(0===s&&(Y=!1,o.unbind(window,y,i),xt(),ee?l=0:-1!==vt&&(l=Ie()-vt)),vt=1===s?Ie():-1,a=-1!==l&&l<150?"zoom":"swipe",ee&&s<2&&(ee=!1,1===s&&(a="zoomPointerUp"),ke("zoomGestureEnded")),J=null,K||$||oe||W)if(tt(),z||(z=zt()),z.calculateSwipeSpeed("x"),W)if(At()<c.verticalDragRange)i.close();else{var f=he.y,p=ce;nt("verticalDrag",0,1,300,o.easing.cubic.out,(function(e){he.y=(i.currItem.initialPosition.y-f)*e+f,Te((1-p)*e+p),Ce()})),ke("onVerticalDrag",1)}else{if((X||oe)&&0===s){if(Wt(a,z))return;a="zoomPointerUp"}oe||("swipe"===a?!X&&g>i.currItem.fitRatio&&Gt(z):Yt())}},zt=function(){var e,t,n={lastFlickOffset:{},lastFlickDist:{},lastFlickSpeed:{},slowDownRatio:{},slowDownRatioReverse:{},speedDecelerationRatio:{},speedDecelerationRatioAbs:{},distanceOffset:{},backAnimDestination:{},backAnimStarted:{},calculateSwipeSpeed:function(r){dt.length>1?(e=Ie()-q+50,t=dt[dt.length-2][r]):(e=Ie()-H,t=lt[r]),n.lastFlickOffset[r]=st[r]-t,n.lastFlickDist[r]=Math.abs(n.lastFlickOffset[r]),n.lastFlickDist[r]>20?n.lastFlickSpeed[r]=n.lastFlickOffset[r]/e:n.lastFlickSpeed[r]=0,Math.abs(n.lastFlickSpeed[r])<.1&&(n.lastFlickSpeed[r]=0),n.slowDownRatio[r]=.95,n.slowDownRatioReverse[r]=1-n.slowDownRatio[r],n.speedDecelerationRatio[r]=1},calculateOverBoundsAnimOffset:function(e,t){n.backAnimStarted[e]||(he[e]>ne.min[e]?n.backAnimDestination[e]=ne.min[e]:he[e]<ne.max[e]&&(n.backAnimDestination[e]=ne.max[e]),void 0!==n.backAnimDestination[e]&&(n.slowDownRatio[e]=.7,n.slowDownRatioReverse[e]=1-n.slowDownRatio[e],n.speedDecelerationRatioAbs[e]<.05&&(n.lastFlickSpeed[e]=0,n.backAnimStarted[e]=!0,nt("bounceZoomPan"+e,he[e],n.backAnimDestination[e],t||300,o.easing.sine.out,(function(t){he[e]=t,Ce()})))))},calculateAnimOffset:function(e){n.backAnimStarted[e]||(n.speedDecelerationRatio[e]=n.speedDecelerationRatio[e]*(n.slowDownRatio[e]+n.slowDownRatioReverse[e]-n.slowDownRatioReverse[e]*n.timeDiff/10),n.speedDecelerationRatioAbs[e]=Math.abs(n.lastFlickSpeed[e]*n.speedDecelerationRatio[e]),n.distanceOffset[e]=n.lastFlickSpeed[e]*n.speedDecelerationRatio[e]*n.timeDiff,he[e]+=n.distanceOffset[e])},panAnimLoop:function(){if(Qe.zoomPan&&(Qe.zoomPan.raf=A(n.panAnimLoop),n.now=Ie(),n.timeDiff=n.now-n.lastNow,n.lastNow=n.now,n.calculateAnimOffset("x"),n.calculateAnimOffset("y"),Ce(),n.calculateOverBoundsAnimOffset("x"),n.calculateOverBoundsAnimOffset("y"),n.speedDecelerationRatioAbs.x<.05&&n.speedDecelerationRatioAbs.y<.05))return he.x=Math.round(he.x),he.y=Math.round(he.y),Ce(),void Je("zoomPan")}};return n},Gt=function(e){if(e.calculateSwipeSpeed("y"),ne=i.currItem.bounds,e.backAnimDestination={},e.backAnimStarted={},Math.abs(e.lastFlickSpeed.x)<=.05&&Math.abs(e.lastFlickSpeed.y)<=.05)return e.speedDecelerationRatioAbs.x=e.speedDecelerationRatioAbs.y=0,e.calculateOverBoundsAnimOffset("x"),e.calculateOverBoundsAnimOffset("y"),!0;et("zoomPan"),e.lastNow=Ie(),e.panAnimLoop()},Wt=function(e,t){var n,r,a;if(oe||(yt=p),"swipe"===e){var u=st.x-lt.x,s=t.lastFlickDist.x<10;u>ot&&(s||t.lastFlickOffset.x>20)?r=-1:u<-ot&&(s||t.lastFlickOffset.x<-20)&&(r=1)}r&&((p+=r)<0?(p=c.loop?Jt()-1:0,a=!0):p>=Jt()&&(p=c.loop?0:Jt()-1,a=!0),a&&!c.loop||(be+=r,me-=r,n=!0));var l,f=ge.x*me,d=Math.abs(f-gt.x);return n||f>gt.x==t.lastFlickSpeed.x>0?(l=Math.abs(t.lastFlickSpeed.x)>0?d/Math.abs(t.lastFlickSpeed.x):333,l=Math.min(l,400),l=Math.max(l,250)):l=333,yt===p&&(n=!1),oe=!0,ke("mainScrollAnimStart"),nt("mainScroll",gt.x,f,l,o.easing.cubic.out,Le,(function(){tt(),oe=!1,yt=-1,(n||yt!==p)&&i.updateCurrItem(),ke("mainScrollAnimComplete")})),n&&i.updateCurrItem(!0),n},Vt=function(e){return 1/te*e*b},Yt=function(){var e=g,t=Ge(),n=We();g<t?e=t:g>n&&(e=n);var r,a=1,u=ce;return ue&&!G&&!se&&g<t?(i.close(),!0):(ue&&(r=function(e){Te((a-u)*e+u)}),i.zoomTo(e,0,200,o.easing.cubic.out,r),!0)};xe("Gestures",{publicMethods:{initGestures:function(){var e=function(e,t,n,r,o){j=e+t,P=e+n,k=e+r,I=o?e+o:""};(R=U.pointerEvent)&&U.touch&&(U.touch=!1),R?navigator.msPointerEnabled?e("MSPointer","Down","Move","Up","Cancel"):e("pointer","down","move","up","cancel"):U.touch?(e("touch","start","move","end","cancel"),C=!0):e("mouse","down","move","up"),y=P+" "+k+" "+I,m=j,R&&!C&&(C=navigator.maxTouchPoints>1||navigator.msMaxTouchPoints>1),i.likelyTouchDevice=C,v[j]=Ut,v[P]=Bt,v[k]=qt,I&&(v[I]=v[k]),U.touch&&(m+=" mousedown",y+=" mousemove mouseup",v.mousedown=v[j],v.mousemove=v[P],v.mouseup=v[k]),C||(c.allowPanToNext=!1)}}});var Zt,$t,Kt,Qt,Xt,Jt,en=function(t,n,r,a){var u;Zt&&clearTimeout(Zt),Qt=!0,Kt=!0,t.initialLayout?(u=t.initialLayout,t.initialLayout=null):u=c.getThumbBoundsFn&&c.getThumbBoundsFn(p);var s,l,d=r?c.hideAnimationDuration:c.showAnimationDuration,h=function(){Je("initialZoom"),r?(i.template.removeAttribute("style"),i.bg.removeAttribute("style")):(Te(1),n&&(n.style.display="block"),o.addClass(e,"pswp--animated-in"),ke("initialZoom"+(r?"OutEnd":"InEnd"))),a&&a(),Qt=!1};if(!d||!u||void 0===u.x)return ke("initialZoom"+(r?"Out":"In")),g=t.initialZoomLevel,Me(he,t.initialPosition),Ce(),e.style.opacity=r?0:1,Te(1),void(d?setTimeout((function(){h()}),d):h());s=f,l=!i.currItem.src||i.currItem.loadError||c.showHideOpacity,t.miniImg&&(t.miniImg.style.webkitBackfaceVisibility="hidden"),r||(g=u.w/t.w,he.x=u.x,he.y=u.y-D,i[l?"template":"bg"].style.opacity=.001,Ce()),et("initialZoom"),r&&!s&&o.removeClass(e,"pswp--animated-in"),l&&(r?o[(s?"remove":"add")+"Class"](e,"pswp--animate_opacity"):setTimeout((function(){o.addClass(e,"pswp--animate_opacity")}),30)),Zt=setTimeout((function(){if(ke("initialZoom"+(r?"Out":"In")),r){var n=u.w/t.w,i={x:he.x,y:he.y},a=g,c=ce,f=function(t){1===t?(g=n,he.x=u.x,he.y=u.y-F):(g=(n-a)*t+a,he.x=(u.x-i.x)*t+i.x,he.y=(u.y-F-i.y)*t+i.y),Ce(),l?e.style.opacity=1-t:Te(c-t*c)};s?nt("initialZoom",0,1,d,o.easing.cubic.out,f,h):(f(1),Zt=setTimeout(h,d+20))}else g=t.initialZoomLevel,Me(he,t.initialPosition),Ce(),Te(1),l?e.style.opacity=1:Te(1),Zt=setTimeout(h,d+20)}),r?25:90)},tn={},nn=[],rn={index:0,errorMsg:'<div class="pswp__error-msg"><a href="%url%" target="_blank">The image</a> could not be loaded.</div>',forceProgressiveLoading:!1,preload:[1,1],getNumItemsFn:function(){return $t.length}},on=function(){return{center:{x:0,y:0},max:{x:0,y:0},min:{x:0,y:0}}},an=function(e,t,n){var r=e.bounds;r.center.x=Math.round((tn.x-t)/2),r.center.y=Math.round((tn.y-n)/2)+e.vGap.top,r.max.x=t>tn.x?Math.round(tn.x-t):r.center.x,r.max.y=n>tn.y?Math.round(tn.y-n)+e.vGap.top:r.center.y,r.min.x=t>tn.x?0:r.center.x,r.min.y=n>tn.y?e.vGap.top:r.center.y},un=function(e,t,n){if(e.src&&!e.loadError){var r=!n;if(r&&(e.vGap||(e.vGap={top:0,bottom:0}),ke("parseVerticalMargin",e)),tn.x=t.x,tn.y=t.y-e.vGap.top-e.vGap.bottom,r){var o=tn.x/e.w,i=tn.y/e.h;e.fitRatio=o<i?o:i;var a=c.scaleMode;"orig"===a?n=1:"fit"===a&&(n=e.fitRatio),n>1&&(n=1),e.initialZoomLevel=n,e.bounds||(e.bounds=on())}if(!n)return;return an(e,e.w*n,e.h*n),r&&n===e.initialZoomLevel&&(e.initialPosition=e.bounds.center),e.bounds}return e.w=e.h=0,e.initialZoomLevel=e.fitRatio=1,e.bounds=on(),e.initialPosition=e.bounds.center,e.bounds},cn=function(e,t,n,r,o,a){t.loadError||r&&(t.imageAppended=!0,fn(t,r,t===i.currItem&&_e),n.appendChild(r),a&&setTimeout((function(){t&&t.loaded&&t.placeholder&&(t.placeholder.style.display="none",t.placeholder=null)}),500))},sn=function(e){e.loading=!0,e.loaded=!1;var t=e.img=o.createEl("pswp__img","img"),n=function(){e.loading=!1,e.loaded=!0,e.loadComplete?e.loadComplete(e):e.img=null,t.onload=t.onerror=null,t=null};return t.onload=n,t.onerror=function(){e.loadError=!0,n()},t.src=e.src,t},ln=function(e,t){if(e.src&&e.loadError&&e.container)return t&&(e.container.innerHTML=""),e.container.innerHTML=c.errorMsg.replace("%url%",e.src),!0},fn=function(e,t,n){if(e.src){t||(t=e.container.lastChild);var r=n?e.w:Math.round(e.w*e.fitRatio),o=n?e.h:Math.round(e.h*e.fitRatio);e.placeholder&&!e.loaded&&(e.placeholder.style.width=r+"px",e.placeholder.style.height=o+"px"),t.style.width=r+"px",t.style.height=o+"px"}},pn=function(){if(nn.length){for(var e,t=0;t<nn.length;t++)(e=nn[t]).holder.index===e.index&&cn(e.index,e.item,e.baseDiv,e.img,!1,e.clearPlaceholder);nn=[]}};xe("Controller",{publicMethods:{lazyLoadItem:function(e){e=Se(e);var t=Xt(e);t&&(!t.loaded&&!t.loading||_)&&(ke("gettingData",e,t),t.src&&sn(t))},initController:function(){o.extend(c,rn,!0),i.items=$t=n,Xt=i.getItemAt,Jt=c.getNumItemsFn,c.loop,Jt()<3&&(c.loop=!1),Pe("beforeChange",(function(e){var t,n=c.preload,r=null===e||e>=0,o=Math.min(n[0],Jt()),a=Math.min(n[1],Jt());for(t=1;t<=(r?a:o);t++)i.lazyLoadItem(p+t);for(t=1;t<=(r?o:a);t++)i.lazyLoadItem(p-t)})),Pe("initialLayout",(function(){i.currItem.initialLayout=c.getThumbBoundsFn&&c.getThumbBoundsFn(p)})),Pe("mainScrollAnimComplete",pn),Pe("initialZoomInEnd",pn),Pe("destroy",(function(){for(var e,t=0;t<$t.length;t++)(e=$t[t]).container&&(e.container=null),e.placeholder&&(e.placeholder=null),e.img&&(e.img=null),e.preloader&&(e.preloader=null),e.loadError&&(e.loaded=e.loadError=!1);nn=null}))},getItemAt:function(e){return e>=0&&void 0!==$t[e]&&$t[e]},allowProgressiveImg:function(){return c.forceProgressiveLoading||!C||c.mouseUsed||screen.width>1200},setContent:function(e,t){c.loop&&(t=Se(t));var n=i.getItemAt(e.index);n&&(n.container=null);var r,a=i.getItemAt(t);if(a){ke("gettingData",t,a),e.index=t,e.item=a;var u=a.container=o.createEl("pswp__zoom-wrap");if(!a.src&&a.html&&(a.html.tagName?u.appendChild(a.html):u.innerHTML=a.html),ln(a),un(a,ye),!a.src||a.loadError||a.loaded)a.src&&!a.loadError&&((r=o.createEl("pswp__img","img")).style.opacity=1,r.src=a.src,fn(a,r),cn(t,a,u,r,!0));else{if(a.loadComplete=function(n){if(s){if(e&&e.index===t){if(ln(n,!0))return n.loadComplete=n.img=null,un(n,ye),Ae(n),void(e.index===p&&i.updateCurrZoomItem());n.imageAppended?!Qt&&n.placeholder&&(n.placeholder.style.display="none",n.placeholder=null):U.transform&&(oe||Qt)?nn.push({item:n,baseDiv:u,img:n.img,index:t,holder:e,clearPlaceholder:!0}):cn(t,n,u,n.img,oe||Qt,!0)}n.loadComplete=null,n.img=null,ke("imageLoadComplete",t,n)}},o.features.transform){var l="pswp__img pswp__img--placeholder";l+=a.msrc?"":" pswp__img--placeholder--blank";var f=o.createEl(l,a.msrc?"img":"");a.msrc&&(f.src=a.msrc),fn(a,f),u.appendChild(f),a.placeholder=f}a.loading||sn(a),i.allowProgressiveImg()&&(!Kt&&U.transform?nn.push({item:a,baseDiv:u,img:a.img,index:t,holder:e}):cn(t,a,u,a.img,!0,!0))}Kt||t!==p?Ae(a):(re=u.style,en(a,r||a.img)),e.el.innerHTML="",e.el.appendChild(u)}else e.el.innerHTML=""},cleanSlide:function(e){e.img&&(e.img.onload=e.img.onerror=null),e.loaded=e.loading=e.img=e.imageAppended=!1}}});var dn,hn,yn={},mn=function(e,t,n){var r=document.createEvent("CustomEvent"),o={origEvent:e,target:e.target,releasePoint:t,pointerType:n||"touch"};r.initCustomEvent("pswpTap",!0,!0,o),e.target.dispatchEvent(r)};xe("Tap",{publicMethods:{initTap:function(){Pe("firstTouchStart",i.onTapStart),Pe("touchRelease",i.onTapRelease),Pe("destroy",(function(){yn={},dn=null}))},onTapStart:function(e){e.length>1&&(clearTimeout(dn),dn=null)},onTapRelease:function(e,t){if(t&&!K&&!Z&&!Xe){var n=t;if(dn&&(clearTimeout(dn),dn=null,Et(n,yn)))return void ke("doubleTap",n);if("mouse"===t.type)return void mn(e,t,"mouse");if("BUTTON"===e.target.tagName.toUpperCase()||o.hasClass(e.target,"pswp__single-tap"))return void mn(e,t);Me(yn,n),dn=setTimeout((function(){mn(e,t),dn=null}),300)}}}}),xe("DesktopZoom",{publicMethods:{initDesktopZoom:function(){M||(C?Pe("mouseUsed",(function(){i.setupDesktopZoom()})):i.setupDesktopZoom(!0))},setupDesktopZoom:function(t){hn={};var n="wheel mousewheel DOMMouseScroll";Pe("bindEvents",(function(){o.bind(e,n,i.handleMouseWheel)})),Pe("unbindEvents",(function(){hn&&o.unbind(e,n,i.handleMouseWheel)})),i.mouseZoomedIn=!1;var r,a=function(){i.mouseZoomedIn&&(o.removeClass(e,"pswp--zoomed-in"),i.mouseZoomedIn=!1),g<1?o.addClass(e,"pswp--zoom-allowed"):o.removeClass(e,"pswp--zoom-allowed"),u()},u=function(){r&&(o.removeClass(e,"pswp--dragging"),r=!1)};Pe("resize",a),Pe("afterChange",a),Pe("pointerDown",(function(){i.mouseZoomedIn&&(r=!0,o.addClass(e,"pswp--dragging"))})),Pe("pointerUp",u),t||a()},handleMouseWheel:function(e){if(g<=i.currItem.fitRatio)return c.modal&&(!c.closeOnScroll||Xe||Y?e.preventDefault():T&&Math.abs(e.deltaY)>2&&(f=!0,i.close())),!0;if(e.stopPropagation(),hn.x=0,"deltaX"in e)1===e.deltaMode?(hn.x=18*e.deltaX,hn.y=18*e.deltaY):(hn.x=e.deltaX,hn.y=e.deltaY);else if("wheelDelta"in e)e.wheelDeltaX&&(hn.x=-.16*e.wheelDeltaX),e.wheelDeltaY?hn.y=-.16*e.wheelDeltaY:hn.y=-.16*e.wheelDelta;else{if(!("detail"in e))return;hn.y=e.detail}ze(g,!0);var t=he.x-hn.x,n=he.y-hn.y;(c.modal||t<=ne.min.x&&t>=ne.max.x&&n<=ne.min.y&&n>=ne.max.y)&&e.preventDefault(),i.panTo(t,n)},toggleDesktopZoom:function(t){t=t||{x:ye.x/2+ve.x,y:ye.y/2+ve.y};var n=c.getDoubleTapZoom(!0,i.currItem),r=g===n;i.mouseZoomedIn=!r,i.zoomTo(r?i.currItem.initialZoomLevel:n,t,333),o[(r?"remove":"add")+"Class"](e,"pswp--zoomed-in")}}});var vn,gn,bn,wn,On,En,_n,xn,Sn,jn,Pn,kn,In={history:!0,galleryUID:1},Tn=function(){return Pn.hash.substring(1)},Rn=function(){vn&&clearTimeout(vn),bn&&clearTimeout(bn)},Cn=function(){var e=Tn(),t={};if(e.length<5)return t;var n,r=e.split("&");for(n=0;n<r.length;n++)if(r[n]){var o=r[n].split("=");o.length<2||(t[o[0]]=o[1])}if(c.galleryPIDs){var i=t.pid;for(t.pid=0,n=0;n<$t.length;n++)if($t[n].pid===i){t.pid=n;break}}else t.pid=parseInt(t.pid,10)-1;return t.pid<0&&(t.pid=0),t},An=function(){if(bn&&clearTimeout(bn),Xe||Y)bn=setTimeout(An,500);else{wn?clearTimeout(gn):wn=!0;var e=p+1,t=Xt(p);t.hasOwnProperty("pid")&&(e=t.pid);var n=_n+"&gid="+c.galleryUID+"&pid="+e;xn||-1===Pn.hash.indexOf(n)&&(jn=!0);var r=Pn.href.split("#")[0]+"#"+n;kn?"#"+n!==window.location.hash&&history[xn?"replaceState":"pushState"]("",document.title,r):xn?Pn.replace(r):Pn.hash=n,xn=!0,gn=setTimeout((function(){wn=!1}),60)}};xe("History",{publicMethods:{initHistory:function(){if(o.extend(c,In,!0),c.history){Pn=window.location,jn=!1,Sn=!1,xn=!1,_n=Tn(),kn="pushState"in history,_n.indexOf("gid=")>-1&&(_n=(_n=_n.split("&gid=")[0]).split("?gid=")[0]),Pe("afterChange",i.updateURL),Pe("unbindEvents",(function(){o.unbind(window,"hashchange",i.onHashChange)}));var e=function(){En=!0,Sn||(jn?history.back():_n?Pn.hash=_n:kn?history.pushState("",document.title,Pn.pathname+Pn.search):Pn.hash=""),Rn()};Pe("unbindEvents",(function(){f&&e()})),Pe("destroy",(function(){En||e()})),Pe("firstUpdate",(function(){p=Cn().pid}));var t=_n.indexOf("pid=");t>-1&&"&"===(_n=_n.substring(0,t)).slice(-1)&&(_n=_n.slice(0,-1)),setTimeout((function(){s&&o.bind(window,"hashchange",i.onHashChange)}),40)}},onHashChange:function(){if(Tn()===_n)return Sn=!0,void i.close();wn||(On=!0,i.goTo(Cn().pid),On=!1)},updateURL:function(){Rn(),On||(xn?vn=setTimeout(An,800):An())}}}),o.extend(i,rt)}})?r.call(t,n,t,e):r)||(e.exports=o)},14777:e=>{!function(){const t=({_console:e,data:t,prefix:n=null})=>{const r={10:e.trace,20:e.debug,30:e.info,40:e.warn,50:e.error,60:e.error};try{const e=JSON.parse(t),{hostname:o,level:i,msg:a,name:u,pid:c,time:s,v:l}=e,f=function(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}(e,["hostname","level","msg","name","pid","time","v"]),p=`[${n?`${n}|${u}`:u}] ${a||"<no message>"}`;Object.keys(f).length?r[i](p,f):r[i](p)}catch(n){e.debug("[pino-devtools] could not write log:",t)}},n=({_WebSocket:e=WebSocket,_console:n=console,_window:r=window}={})=>{const{hostname:o,port:i}=r.location;new e(`ws://${o}:${parseInt(i,10)+1}`).addEventListener("message",(({data:e})=>{t({data:e,_console:n})}))},r=({host:e="127.0.0.1",port:n=3010,_console:r=console}={})=>{if(!e)throw new Error("You must pass `host` to `fetchBufferedLogs()`.");if(!n)throw new Error("You must pass `port` to `fetchBufferedLogs()`.");return fetch(`http://${e}:${n}/server-logs.json`).then((e=>e.json())).then((({logs:e,prefix:n})=>{e.forEach((e=>{t({_console:r,data:e,prefix:n})}))})).catch((e=>{r.debug("[pino-devtools] error while fetching the logs:",{error:e.toString()})}))};e.exports?e.exports={fetchBufferedLogs:r,readWebSocketLogs:n}:n()}()},93667:(e,t,n)=>{"use strict";var r=n(21587);function o(){}function i(){}i.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,i,a){if(a!==r){var u=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw u.name="Invariant Violation",u}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:o};return n.PropTypes=n,n}},53486:(e,t,n)=>{e.exports=n(93667)()},21587:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},744:e=>{"use strict";var t=String.prototype.replace,n=/%20/g,r="RFC1738",o="RFC3986";e.exports={default:o,formatters:{RFC1738:function(e){return t.call(e,n,"+")},RFC3986:function(e){return String(e)}},RFC1738:r,RFC3986:o}},27107:(e,t,n)=>{"use strict";var r=n(4974),o=n(15377),i=n(744);e.exports={formats:i,parse:o,stringify:r}},15377:(e,t,n)=>{"use strict";var r=n(69857),o=Object.prototype.hasOwnProperty,i=Array.isArray,a={allowDots:!1,allowPrototypes:!1,allowSparse:!1,arrayLimit:20,charset:"utf-8",charsetSentinel:!1,comma:!1,decoder:r.decode,delimiter:"&",depth:5,ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictNullHandling:!1},u=function(e){return e.replace(/&#(\d+);/g,(function(e,t){return String.fromCharCode(parseInt(t,10))}))},c=function(e,t){return e&&"string"==typeof e&&t.comma&&e.indexOf(",")>-1?e.split(","):e},s=function(e,t,n,r){if(e){var i=n.allowDots?e.replace(/\.([^.[]+)/g,"[$1]"):e,a=/(\[[^[\]]*])/g,u=n.depth>0&&/(\[[^[\]]*])/.exec(i),s=u?i.slice(0,u.index):i,l=[];if(s){if(!n.plainObjects&&o.call(Object.prototype,s)&&!n.allowPrototypes)return;l.push(s)}for(var f=0;n.depth>0&&null!==(u=a.exec(i))&&f<n.depth;){if(f+=1,!n.plainObjects&&o.call(Object.prototype,u[1].slice(1,-1))&&!n.allowPrototypes)return;l.push(u[1])}return u&&l.push("["+i.slice(u.index)+"]"),function(e,t,n,r){for(var o=r?t:c(t,n),i=e.length-1;i>=0;--i){var a,u=e[i];if("[]"===u&&n.parseArrays)a=[].concat(o);else{a=n.plainObjects?Object.create(null):{};var s="["===u.charAt(0)&&"]"===u.charAt(u.length-1)?u.slice(1,-1):u,l=parseInt(s,10);n.parseArrays||""!==s?!isNaN(l)&&u!==s&&String(l)===s&&l>=0&&n.parseArrays&&l<=n.arrayLimit?(a=[])[l]=o:"__proto__"!==s&&(a[s]=o):a={0:o}}o=a}return o}(l,t,n,r)}};e.exports=function(e,t){var n=function(e){if(!e)return a;if(null!==e.decoder&&void 0!==e.decoder&&"function"!=typeof e.decoder)throw new TypeError("Decoder has to be a function.");if(void 0!==e.charset&&"utf-8"!==e.charset&&"iso-8859-1"!==e.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var t=void 0===e.charset?a.charset:e.charset;return{allowDots:void 0===e.allowDots?a.allowDots:!!e.allowDots,allowPrototypes:"boolean"==typeof e.allowPrototypes?e.allowPrototypes:a.allowPrototypes,allowSparse:"boolean"==typeof e.allowSparse?e.allowSparse:a.allowSparse,arrayLimit:"number"==typeof e.arrayLimit?e.arrayLimit:a.arrayLimit,charset:t,charsetSentinel:"boolean"==typeof e.charsetSentinel?e.charsetSentinel:a.charsetSentinel,comma:"boolean"==typeof e.comma?e.comma:a.comma,decoder:"function"==typeof e.decoder?e.decoder:a.decoder,delimiter:"string"==typeof e.delimiter||r.isRegExp(e.delimiter)?e.delimiter:a.delimiter,depth:"number"==typeof e.depth||!1===e.depth?+e.depth:a.depth,ignoreQueryPrefix:!0===e.ignoreQueryPrefix,interpretNumericEntities:"boolean"==typeof e.interpretNumericEntities?e.interpretNumericEntities:a.interpretNumericEntities,parameterLimit:"number"==typeof e.parameterLimit?e.parameterLimit:a.parameterLimit,parseArrays:!1!==e.parseArrays,plainObjects:"boolean"==typeof e.plainObjects?e.plainObjects:a.plainObjects,strictNullHandling:"boolean"==typeof e.strictNullHandling?e.strictNullHandling:a.strictNullHandling}}(t);if(""===e||null==e)return n.plainObjects?Object.create(null):{};for(var l="string"==typeof e?function(e,t){var n,s={},l=t.ignoreQueryPrefix?e.replace(/^\?/,""):e,f=t.parameterLimit===1/0?void 0:t.parameterLimit,p=l.split(t.delimiter,f),d=-1,h=t.charset;if(t.charsetSentinel)for(n=0;n<p.length;++n)0===p[n].indexOf("utf8=")&&("utf8=%E2%9C%93"===p[n]?h="utf-8":"utf8=%26%2310003%3B"===p[n]&&(h="iso-8859-1"),d=n,n=p.length);for(n=0;n<p.length;++n)if(n!==d){var y,m,v=p[n],g=v.indexOf("]="),b=-1===g?v.indexOf("="):g+1;-1===b?(y=t.decoder(v,a.decoder,h,"key"),m=t.strictNullHandling?null:""):(y=t.decoder(v.slice(0,b),a.decoder,h,"key"),m=r.maybeMap(c(v.slice(b+1),t),(function(e){return t.decoder(e,a.decoder,h,"value")}))),m&&t.interpretNumericEntities&&"iso-8859-1"===h&&(m=u(m)),v.indexOf("[]=")>-1&&(m=i(m)?[m]:m),o.call(s,y)?s[y]=r.combine(s[y],m):s[y]=m}return s}(e,n):e,f=n.plainObjects?Object.create(null):{},p=Object.keys(l),d=0;d<p.length;++d){var h=p[d],y=s(h,l[h],n,"string"==typeof e);f=r.merge(f,y,n)}return!0===n.allowSparse?f:r.compact(f)}},4974:(e,t,n)=>{"use strict";var r=n(31059),o=n(69857),i=n(744),a=Object.prototype.hasOwnProperty,u={brackets:function(e){return e+"[]"},comma:"comma",indices:function(e,t){return e+"["+t+"]"},repeat:function(e){return e}},c=Array.isArray,s=String.prototype.split,l=Array.prototype.push,f=function(e,t){l.apply(e,c(t)?t:[t])},p=Date.prototype.toISOString,d=i.default,h={addQueryPrefix:!1,allowDots:!1,charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encoder:o.encode,encodeValuesOnly:!1,format:d,formatter:i.formatters[d],indices:!1,serializeDate:function(e){return p.call(e)},skipNulls:!1,strictNullHandling:!1},y={},m=function e(t,n,i,a,u,l,p,d,m,v,g,b,w,O,E){for(var _,x=t,S=E,j=0,P=!1;void 0!==(S=S.get(y))&&!P;){var k=S.get(t);if(j+=1,void 0!==k){if(k===j)throw new RangeError("Cyclic object value");P=!0}void 0===S.get(y)&&(j=0)}if("function"==typeof p?x=p(n,x):x instanceof Date?x=v(x):"comma"===i&&c(x)&&(x=o.maybeMap(x,(function(e){return e instanceof Date?v(e):e}))),null===x){if(a)return l&&!w?l(n,h.encoder,O,"key",g):n;x=""}if("string"==typeof(_=x)||"number"==typeof _||"boolean"==typeof _||"symbol"==typeof _||"bigint"==typeof _||o.isBuffer(x)){if(l){var I=w?n:l(n,h.encoder,O,"key",g);if("comma"===i&&w){for(var T=s.call(String(x),","),R="",C=0;C<T.length;++C)R+=(0===C?"":",")+b(l(T[C],h.encoder,O,"value",g));return[b(I)+"="+R]}return[b(I)+"="+b(l(x,h.encoder,O,"value",g))]}return[b(n)+"="+b(String(x))]}var A,N=[];if(void 0===x)return N;if("comma"===i&&c(x))A=[{value:x.length>0?x.join(",")||null:void 0}];else if(c(p))A=p;else{var L=Object.keys(x);A=d?L.sort(d):L}for(var D=0;D<A.length;++D){var M=A[D],F="object"==typeof M&&void 0!==M.value?M.value:x[M];if(!u||null!==F){var U=c(x)?"function"==typeof i?i(n,M):n:n+(m?"."+M:"["+M+"]");E.set(t,j);var B=r();B.set(y,E),f(N,e(F,U,i,a,u,l,p,d,m,v,g,b,w,O,B))}}return N};e.exports=function(e,t){var n,o=e,s=function(e){if(!e)return h;if(null!==e.encoder&&void 0!==e.encoder&&"function"!=typeof e.encoder)throw new TypeError("Encoder has to be a function.");var t=e.charset||h.charset;if(void 0!==e.charset&&"utf-8"!==e.charset&&"iso-8859-1"!==e.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var n=i.default;if(void 0!==e.format){if(!a.call(i.formatters,e.format))throw new TypeError("Unknown format option provided.");n=e.format}var r=i.formatters[n],o=h.filter;return("function"==typeof e.filter||c(e.filter))&&(o=e.filter),{addQueryPrefix:"boolean"==typeof e.addQueryPrefix?e.addQueryPrefix:h.addQueryPrefix,allowDots:void 0===e.allowDots?h.allowDots:!!e.allowDots,charset:t,charsetSentinel:"boolean"==typeof e.charsetSentinel?e.charsetSentinel:h.charsetSentinel,delimiter:void 0===e.delimiter?h.delimiter:e.delimiter,encode:"boolean"==typeof e.encode?e.encode:h.encode,encoder:"function"==typeof e.encoder?e.encoder:h.encoder,encodeValuesOnly:"boolean"==typeof e.encodeValuesOnly?e.encodeValuesOnly:h.encodeValuesOnly,filter:o,format:n,formatter:r,serializeDate:"function"==typeof e.serializeDate?e.serializeDate:h.serializeDate,skipNulls:"boolean"==typeof e.skipNulls?e.skipNulls:h.skipNulls,sort:"function"==typeof e.sort?e.sort:null,strictNullHandling:"boolean"==typeof e.strictNullHandling?e.strictNullHandling:h.strictNullHandling}}(t);"function"==typeof s.filter?o=(0,s.filter)("",o):c(s.filter)&&(n=s.filter);var l,p=[];if("object"!=typeof o||null===o)return"";l=t&&t.arrayFormat in u?t.arrayFormat:t&&"indices"in t?t.indices?"indices":"repeat":"indices";var d=u[l];n||(n=Object.keys(o)),s.sort&&n.sort(s.sort);for(var y=r(),v=0;v<n.length;++v){var g=n[v];s.skipNulls&&null===o[g]||f(p,m(o[g],g,d,s.strictNullHandling,s.skipNulls,s.encode?s.encoder:null,s.filter,s.sort,s.allowDots,s.serializeDate,s.format,s.formatter,s.encodeValuesOnly,s.charset,y))}var b=p.join(s.delimiter),w=!0===s.addQueryPrefix?"?":"";return s.charsetSentinel&&("iso-8859-1"===s.charset?w+="utf8=%26%2310003%3B&":w+="utf8=%E2%9C%93&"),b.length>0?w+b:""}},69857:(e,t,n)=>{"use strict";var r=n(744),o=Object.prototype.hasOwnProperty,i=Array.isArray,a=function(){for(var e=[],t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e}(),u=function(e,t){for(var n=t&&t.plainObjects?Object.create(null):{},r=0;r<e.length;++r)void 0!==e[r]&&(n[r]=e[r]);return n};e.exports={arrayToObject:u,assign:function(e,t){return Object.keys(t).reduce((function(e,n){return e[n]=t[n],e}),e)},combine:function(e,t){return[].concat(e,t)},compact:function(e){for(var t=[{obj:{o:e},prop:"o"}],n=[],r=0;r<t.length;++r)for(var o=t[r],a=o.obj[o.prop],u=Object.keys(a),c=0;c<u.length;++c){var s=u[c],l=a[s];"object"==typeof l&&null!==l&&-1===n.indexOf(l)&&(t.push({obj:a,prop:s}),n.push(l))}return function(e){for(;e.length>1;){var t=e.pop(),n=t.obj[t.prop];if(i(n)){for(var r=[],o=0;o<n.length;++o)void 0!==n[o]&&r.push(n[o]);t.obj[t.prop]=r}}}(t),e},decode:function(e,t,n){var r=e.replace(/\+/g," ");if("iso-8859-1"===n)return r.replace(/%[0-9a-f]{2}/gi,unescape);try{return decodeURIComponent(r)}catch(e){return r}},encode:function(e,t,n,o,i){if(0===e.length)return e;var u=e;if("symbol"==typeof e?u=Symbol.prototype.toString.call(e):"string"!=typeof e&&(u=String(e)),"iso-8859-1"===n)return escape(u).replace(/%u[0-9a-f]{4}/gi,(function(e){return"%26%23"+parseInt(e.slice(2),16)+"%3B"}));for(var c="",s=0;s<u.length;++s){var l=u.charCodeAt(s);45===l||46===l||95===l||126===l||l>=48&&l<=57||l>=65&&l<=90||l>=97&&l<=122||i===r.RFC1738&&(40===l||41===l)?c+=u.charAt(s):l<128?c+=a[l]:l<2048?c+=a[192|l>>6]+a[128|63&l]:l<55296||l>=57344?c+=a[224|l>>12]+a[128|l>>6&63]+a[128|63&l]:(s+=1,l=65536+((1023&l)<<10|1023&u.charCodeAt(s)),c+=a[240|l>>18]+a[128|l>>12&63]+a[128|l>>6&63]+a[128|63&l])}return c},isBuffer:function(e){return!(!e||"object"!=typeof e)&&!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))},isRegExp:function(e){return"[object RegExp]"===Object.prototype.toString.call(e)},maybeMap:function(e,t){if(i(e)){for(var n=[],r=0;r<e.length;r+=1)n.push(t(e[r]));return n}return t(e)},merge:function e(t,n,r){if(!n)return t;if("object"!=typeof n){if(i(t))t.push(n);else{if(!t||"object"!=typeof t)return[t,n];(r&&(r.plainObjects||r.allowPrototypes)||!o.call(Object.prototype,n))&&(t[n]=!0)}return t}if(!t||"object"!=typeof t)return[t].concat(n);var a=t;return i(t)&&!i(n)&&(a=u(t,r)),i(t)&&i(n)?(n.forEach((function(n,i){if(o.call(t,i)){var a=t[i];a&&"object"==typeof a&&n&&"object"==typeof n?t[i]=e(a,n,r):t.push(n)}else t[i]=n})),t):Object.keys(n).reduce((function(t,i){var a=n[i];return o.call(t,i)?t[i]=e(t[i],a,r):t[i]=a,t}),a)}}},1726:e=>{"use strict";function t(e,t){return Object.prototype.hasOwnProperty.call(e,t)}e.exports=function(e,n,r,o){n=n||"&",r=r||"=";var i={};if("string"!=typeof e||0===e.length)return i;var a=/\+/g;e=e.split(n);var u=1e3;o&&"number"==typeof o.maxKeys&&(u=o.maxKeys);var c=e.length;u>0&&c>u&&(c=u);for(var s=0;s<c;++s){var l,f,p,d,h=e[s].replace(a,"%20"),y=h.indexOf(r);y>=0?(l=h.substr(0,y),f=h.substr(y+1)):(l=h,f=""),p=decodeURIComponent(l),d=decodeURIComponent(f),t(i,p)?Array.isArray(i[p])?i[p].push(d):i[p]=[i[p],d]:i[p]=d}return i}},73294:e=>{"use strict";var t=function(e){switch(typeof e){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}};e.exports=function(e,n,r,o){return n=n||"&",r=r||"=",null===e&&(e=void 0),"object"==typeof e?Object.keys(e).map((function(o){var i=encodeURIComponent(t(o))+r;return Array.isArray(e[o])?e[o].map((function(e){return i+encodeURIComponent(t(e))})).join(n):i+encodeURIComponent(t(e[o]))})).join(n):o?encodeURIComponent(t(o))+r+encodeURIComponent(t(e)):""}},49122:(e,t,n)=>{"use strict";t.decode=t.parse=n(1726),t.encode=t.stringify=n(73294)},5837:e=>{"use strict";function t(e){try{return JSON.stringify(e)}catch(e){return'"[Circular]"'}}e.exports=function(e,n,r){var o=r&&r.stringify||t;if("object"==typeof e&&null!==e){var i=n.length+1;if(1===i)return e;var a=new Array(i);a[0]=o(e);for(var u=1;u<i;u++)a[u]=o(n[u]);return a.join(" ")}if("string"!=typeof e)return e;var c=n.length;if(0===c)return e;for(var s="",l=0,f=-1,p=e&&e.length||0,d=0;d<p;){if(37===e.charCodeAt(d)&&d+1<p){switch(f=f>-1?f:0,e.charCodeAt(d+1)){case 100:case 102:if(l>=c)break;if(f<d&&(s+=e.slice(f,d)),null==n[l])break;s+=Number(n[l]),f=d+=2;break;case 105:if(l>=c)break;if(f<d&&(s+=e.slice(f,d)),null==n[l])break;s+=Math.floor(Number(n[l])),f=d+=2;break;case 79:case 111:case 106:if(l>=c)break;if(f<d&&(s+=e.slice(f,d)),void 0===n[l])break;var h=typeof n[l];if("string"===h){s+="'"+n[l]+"'",f=d+2,d++;break}if("function"===h){s+=n[l].name||"<anonymous>",f=d+2,d++;break}s+=o(n[l]),f=d+2,d++;break;case 115:if(l>=c)break;f<d&&(s+=e.slice(f,d)),s+=String(n[l]),f=d+2,d++;break;case 37:f<d&&(s+=e.slice(f,d)),s+="%",f=d+2,d++,l--}++l}++d}if(-1===f)return e;f<p&&(s+=e.slice(f));return s}},57990:(e,t,n)=>{"use strict";var r=65536,o=4294967295;var i=n(62673).Buffer,a=n.g.crypto||n.g.msCrypto;a&&a.getRandomValues?e.exports=function(e,t){if(e>o)throw new RangeError("requested too many random bytes");var n=i.allocUnsafe(e);if(e>0)if(e>r)for(var u=0;u<e;u+=r)a.getRandomValues(n.slice(u,u+r));else a.getRandomValues(n);if("function"==typeof t)return process.nextTick((function(){t(null,n)}));return n}:e.exports=function(){throw new Error("Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11")}},68365:(e,t)=>{var n;!function(){"use strict";var r={}.hasOwnProperty;function o(){for(var e=[],t=0;t<arguments.length;t++){var n=arguments[t];if(n){var i=typeof n;if("string"===i||"number"===i)e.push(n);else if(Array.isArray(n)&&n.length){var a=o.apply(null,n);a&&e.push(a)}else if("object"===i)for(var u in n)r.call(n,u)&&n[u]&&e.push(u)}}return e.join(" ")}e.exports?(o.default=o,e.exports=o):void 0===(n=function(){return o}.apply(t,[]))||(e.exports=n)}()},56355:(e,t)=>{var n;!function(){"use strict";var r={}.hasOwnProperty;function o(){for(var e=[],t=0;t<arguments.length;t++){var n=arguments[t];if(n){var i=typeof n;if("string"===i||"number"===i)e.push(n);else if(Array.isArray(n)&&n.length){var a=o.apply(null,n);a&&e.push(a)}else if("object"===i)for(var u in n)r.call(n,u)&&n[u]&&e.push(u)}}return e.join(" ")}e.exports?(o.default=o,e.exports=o):void 0===(n=function(){return o}.apply(t,[]))||(e.exports=n)}()},71412:(e,t,n)=>{"use strict";t.default=void 0;var r=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!==l(e)&&"function"!=typeof e)return{default:e};var t=s();if(t&&t.has(e))return t.get(e);var n={},r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)){var i=r?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}n.default=e,t&&t.set(e,n);return n}(n(84258)),o=c(n(35577)),i=c(n(9985)),a=c(n(82107)),u=n(45778);function c(e){return e&&e.__esModule?e:{default:e}}function s(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return s=function(){return e},e}function l(e){return(l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function f(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function p(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?f(Object(n),!0).forEach((function(t){b(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):f(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function d(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function h(e,t){return!t||"object"!==l(t)&&"function"!=typeof t?y(e):t}function y(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function m(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function v(e){return(v=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function g(e,t){return(g=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function b(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var w=function(){return!0},O="suggestions-revealed",E="input-focused",_="input-changed",x="escape-pressed",S=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&g(e,t)}(l,e);var t,n,o,c,s=(t=l,function(){var e,n=v(t);if(m()){var r=v(this).constructor;e=Reflect.construct(n,arguments,r)}else e=n.apply(this,arguments);return h(this,e)});function l(e){var t,n=e.alwaysRenderSuggestions;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,l),b(y(t=s.call(this)),"onDocumentMouseDown",(function(e){t.justClickedOnSuggestionsContainer=!1;for(var n=e.detail&&e.detail.target||e.target;null!==n&&n!==document;){if(n.getAttribute&&null!==n.getAttribute("data-suggestion-index"))return;if(n===t.suggestionsContainer)return void(t.justClickedOnSuggestionsContainer=!0);n=n.parentNode}})),b(y(t),"storeAutowhateverRef",(function(e){null!==e&&(t.autowhatever=e)})),b(y(t),"onSuggestionMouseEnter",(function(e,n){var r=n.sectionIndex,o=n.itemIndex;t.updateHighlightedSuggestion(r,o),e.target===t.pressedSuggestion&&(t.justSelectedSuggestion=!0),t.justMouseEntered=!0,setTimeout((function(){t.justMouseEntered=!1}))})),b(y(t),"highlightFirstSuggestion",(function(){t.updateHighlightedSuggestion(t.props.multiSection?0:null,0)})),b(y(t),"onDocumentMouseUp",(function(){t.pressedSuggestion&&!t.justSelectedSuggestion&&t.input.focus(),t.pressedSuggestion=null})),b(y(t),"onSuggestionMouseDown",(function(e){t.justSelectedSuggestion||(t.justSelectedSuggestion=!0,t.pressedSuggestion=e.target)})),b(y(t),"onSuggestionsClearRequested",(function(){var e=t.props.onSuggestionsClearRequested;e&&e()})),b(y(t),"onSuggestionSelected",(function(e,n){var r=t.props,o=r.alwaysRenderSuggestions,i=r.onSuggestionSelected,a=r.onSuggestionsFetchRequested;i&&i(e,n);var u=t.props.shouldKeepSuggestionsOnSelect(n.suggestion);o||u?a({value:n.suggestionValue,reason:"suggestion-selected"}):t.onSuggestionsClearRequested(),t.resetHighlightedSuggestion()})),b(y(t),"onSuggestionClick",(function(e){var n=t.props,r=n.alwaysRenderSuggestions,o=n.focusInputOnSuggestionClick,i=t.getSuggestionIndices(t.findSuggestionElement(e.target)),a=i.sectionIndex,u=i.suggestionIndex,c=t.getSuggestion(a,u),s=t.props.getSuggestionValue(c);t.maybeCallOnChange(e,s,"click"),t.onSuggestionSelected(e,{suggestion:c,suggestionValue:s,suggestionIndex:u,sectionIndex:a,method:"click"});var l=t.props.shouldKeepSuggestionsOnSelect(c);r||l||t.closeSuggestions(),!0===o?t.input.focus():t.onBlur(),setTimeout((function(){t.justSelectedSuggestion=!1}))})),b(y(t),"onBlur",(function(){var e=t.props,n=e.inputProps,r=e.shouldRenderSuggestions,o=n.value,i=n.onBlur,a=t.getHighlightedSuggestion(),u=r(o,"input-blurred");t.setState({isFocused:!1,highlightedSectionIndex:null,highlightedSuggestionIndex:null,highlightedSuggestion:null,valueBeforeUpDown:null,isCollapsed:!u}),i&&i(t.blurEvent,{highlightedSuggestion:a})})),b(y(t),"onSuggestionMouseLeave",(function(e){t.resetHighlightedSuggestion(!1),t.justSelectedSuggestion&&e.target===t.pressedSuggestion&&(t.justSelectedSuggestion=!1)})),b(y(t),"onSuggestionTouchStart",(function(){t.justSelectedSuggestion=!0})),b(y(t),"onSuggestionTouchMove",(function(){t.justSelectedSuggestion=!1,t.pressedSuggestion=null,t.input.focus()})),b(y(t),"itemProps",(function(e){return{"data-section-index":e.sectionIndex,"data-suggestion-index":e.itemIndex,onMouseEnter:t.onSuggestionMouseEnter,onMouseLeave:t.onSuggestionMouseLeave,onMouseDown:t.onSuggestionMouseDown,onTouchStart:t.onSuggestionTouchStart,onTouchMove:t.onSuggestionTouchMove,onClick:t.onSuggestionClick}})),b(y(t),"renderSuggestionsContainer",(function(e){var n=e.containerProps,r=e.children;return(0,t.props.renderSuggestionsContainer)({containerProps:n,children:r,query:t.getQuery()})})),t.state={isFocused:!1,isCollapsed:!n,highlightedSectionIndex:null,highlightedSuggestionIndex:null,highlightedSuggestion:null,valueBeforeUpDown:null},t.justPressedUpDown=!1,t.justMouseEntered=!1,t.pressedSuggestion=null,t}return n=l,(o=[{key:"componentDidMount",value:function(){document.addEventListener("mousedown",this.onDocumentMouseDown),document.addEventListener("mouseup",this.onDocumentMouseUp),this.input=this.autowhatever.input,this.suggestionsContainer=this.autowhatever.itemsContainer}},{key:"UNSAFE_componentWillReceiveProps",value:function(e){var t=0===this.state.highlightedSuggestionIndex&&this.props.highlightFirstSuggestion&&!e.highlightFirstSuggestion;(0,i.default)(e.suggestions,this.props.suggestions)?e.highlightFirstSuggestion&&e.suggestions.length>0&&!1===this.justPressedUpDown&&!1===this.justMouseEntered?this.highlightFirstSuggestion():t&&this.resetHighlightedSuggestion():this.willRenderSuggestions(e,"suggestions-updated")?(this.state.isCollapsed&&!this.justSelectedSuggestion&&this.revealSuggestions(),t&&this.resetHighlightedSuggestion()):this.resetHighlightedSuggestion()}},{key:"componentDidUpdate",value:function(e,t){var n=this.props,r=n.suggestions,o=n.onSuggestionHighlighted,a=n.highlightFirstSuggestion;if(!(0,i.default)(r,e.suggestions)&&r.length>0&&a)this.highlightFirstSuggestion();else if(o){var u=this.getHighlightedSuggestion();u!=t.highlightedSuggestion&&o({suggestion:u})}}},{key:"componentWillUnmount",value:function(){document.removeEventListener("mousedown",this.onDocumentMouseDown),document.removeEventListener("mouseup",this.onDocumentMouseUp)}},{key:"updateHighlightedSuggestion",value:function(e,t,n){var r=this;this.setState((function(o){var i=o.valueBeforeUpDown;return null===t?i=null:null===i&&void 0!==n&&(i=n),{highlightedSectionIndex:e,highlightedSuggestionIndex:t,highlightedSuggestion:null===t?null:r.getSuggestion(e,t),valueBeforeUpDown:i}}))}},{key:"resetHighlightedSuggestion",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.setState((function(t){var n=t.valueBeforeUpDown;return{highlightedSectionIndex:null,highlightedSuggestionIndex:null,highlightedSuggestion:null,valueBeforeUpDown:e?null:n}}))}},{key:"revealSuggestions",value:function(){this.setState({isCollapsed:!1})}},{key:"closeSuggestions",value:function(){this.setState({highlightedSectionIndex:null,highlightedSuggestionIndex:null,highlightedSuggestion:null,valueBeforeUpDown:null,isCollapsed:!0})}},{key:"getSuggestion",value:function(e,t){var n=this.props,r=n.suggestions,o=n.multiSection,i=n.getSectionSuggestions;return o?i(r[e])[t]:r[t]}},{key:"getHighlightedSuggestion",value:function(){var e=this.state,t=e.highlightedSectionIndex,n=e.highlightedSuggestionIndex;return null===n?null:this.getSuggestion(t,n)}},{key:"getSuggestionValueByIndex",value:function(e,t){return(0,this.props.getSuggestionValue)(this.getSuggestion(e,t))}},{key:"getSuggestionIndices",value:function(e){var t=e.getAttribute("data-section-index"),n=e.getAttribute("data-suggestion-index");return{sectionIndex:"string"==typeof t?parseInt(t,10):null,suggestionIndex:parseInt(n,10)}}},{key:"findSuggestionElement",value:function(e){var t=e;do{if(t.getAttribute&&null!==t.getAttribute("data-suggestion-index"))return t;t=t.parentNode}while(null!==t);throw new Error("Couldn't find suggestion element")}},{key:"maybeCallOnChange",value:function(e,t,n){var r=this.props.inputProps,o=r.value,i=r.onChange;t!==o&&i(e,{newValue:t,method:n})}},{key:"willRenderSuggestions",value:function(e,t){var n=e.suggestions,r=e.inputProps,o=e.shouldRenderSuggestions,i=r.value;return n.length>0&&o(i,t)}},{key:"getQuery",value:function(){var e=this.props.inputProps.value,t=this.state.valueBeforeUpDown;return(null===t?e:t).trim()}},{key:"render",value:function(){var e=this,t=this.props,n=t.suggestions,o=t.renderInputComponent,i=t.onSuggestionsFetchRequested,c=t.renderSuggestion,s=t.inputProps,l=t.multiSection,f=t.renderSectionTitle,d=t.id,h=t.getSectionSuggestions,y=t.theme,m=t.getSuggestionValue,v=t.alwaysRenderSuggestions,g=t.highlightFirstSuggestion,b=t.containerProps,S=this.state,j=S.isFocused,P=S.isCollapsed,k=S.highlightedSectionIndex,I=S.highlightedSuggestionIndex,T=S.valueBeforeUpDown,R=v?w:this.props.shouldRenderSuggestions,C=s.value,A=s.onFocus,N=s.onKeyDown,L=this.willRenderSuggestions(this.props,"render"),D=v||j&&!P&&L,M=D?n:[],F=p({},s,{onFocus:function(t){if(!e.justSelectedSuggestion&&!e.justClickedOnSuggestionsContainer){var n=R(C,E);e.setState({isFocused:!0,isCollapsed:!n}),A&&A(t),n&&i({value:C,reason:E})}},onBlur:function(t){e.justClickedOnSuggestionsContainer?e.input.focus():(e.blurEvent=t,e.justSelectedSuggestion||(e.onBlur(),e.onSuggestionsClearRequested()))},onChange:function(t){var n=t.target.value,r=R(n,_);e.maybeCallOnChange(t,n,"type"),e.suggestionsContainer&&(e.suggestionsContainer.scrollTop=0),e.setState(p({},g?{}:{highlightedSectionIndex:null,highlightedSuggestionIndex:null,highlightedSuggestion:null},{valueBeforeUpDown:null,isCollapsed:!r})),r?i({value:n,reason:_}):e.onSuggestionsClearRequested()},onKeyDown:function(t,r){var o=t.keyCode;switch(o){case 40:case 38:if(P)R(C,O)&&(i({value:C,reason:O}),e.revealSuggestions(),t.preventDefault());else if(n.length>0){var a,u=r.newHighlightedSectionIndex,c=r.newHighlightedItemIndex;a=null===c?null===T?C:T:e.getSuggestionValueByIndex(u,c),e.updateHighlightedSuggestion(u,c,C),e.maybeCallOnChange(t,a,40===o?"down":"up"),t.preventDefault()}e.justPressedUpDown=!0,setTimeout((function(){e.justPressedUpDown=!1}));break;case 13:if(229===t.keyCode)break;var s=e.getHighlightedSuggestion();if(D&&!v&&e.closeSuggestions(),null!=s){t.preventDefault();var l=m(s);e.maybeCallOnChange(t,l,"enter"),e.onSuggestionSelected(t,{suggestion:s,suggestionValue:l,suggestionIndex:I,sectionIndex:k,method:"enter"}),e.justSelectedSuggestion=!0,setTimeout((function(){e.justSelectedSuggestion=!1}))}break;case 27:D&&t.preventDefault();var f=D&&!v;null===T?f||(e.maybeCallOnChange(t,"","escape"),R("",x)?i({value:"",reason:x}):e.onSuggestionsClearRequested()):e.maybeCallOnChange(t,T,"escape"),f?(e.onSuggestionsClearRequested(),e.closeSuggestions()):e.resetHighlightedSuggestion()}N&&N(t)}}),U={query:this.getQuery()};return r.default.createElement(a.default,{multiSection:l,items:M,renderInputComponent:o,renderItemsContainer:this.renderSuggestionsContainer,renderItem:c,renderItemData:U,renderSectionTitle:f,getSectionItems:h,highlightedSectionIndex:k,highlightedItemIndex:I,containerProps:b,inputProps:F,itemProps:this.itemProps,theme:(0,u.mapToAutowhateverTheme)(y),id:d,ref:this.storeAutowhateverRef})}}])&&d(n.prototype,o),c&&d(n,c),l}(r.Component);t.default=S,b(S,"propTypes",{suggestions:o.default.array.isRequired,onSuggestionsFetchRequested:function(e,t){var n=e[t];if("function"!=typeof n)throw new Error("'onSuggestionsFetchRequested' must be implemented. See: https://github.com/moroshko/react-autosuggest#onSuggestionsFetchRequestedProp")},onSuggestionsClearRequested:function(e,t){var n=e[t];if(!1===e.alwaysRenderSuggestions&&"function"!=typeof n)throw new Error("'onSuggestionsClearRequested' must be implemented. See: https://github.com/moroshko/react-autosuggest#onSuggestionsClearRequestedProp")},shouldKeepSuggestionsOnSelect:o.default.func,onSuggestionSelected:o.default.func,onSuggestionHighlighted:o.default.func,renderInputComponent:o.default.func,renderSuggestionsContainer:o.default.func,getSuggestionValue:o.default.func.isRequired,renderSuggestion:o.default.func.isRequired,inputProps:function(e,t){var n=e[t];if(!n)throw new Error("'inputProps' must be passed.");if(!Object.prototype.hasOwnProperty.call(n,"value"))throw new Error("'inputProps' must have 'value'.");if(!Object.prototype.hasOwnProperty.call(n,"onChange"))throw new Error("'inputProps' must have 'onChange'.")},shouldRenderSuggestions:o.default.func,alwaysRenderSuggestions:o.default.bool,multiSection:o.default.bool,renderSectionTitle:function(e,t){var n=e[t];if(!0===e.multiSection&&"function"!=typeof n)throw new Error("'renderSectionTitle' must be implemented. See: https://github.com/moroshko/react-autosuggest#renderSectionTitleProp")},getSectionSuggestions:function(e,t){var n=e[t];if(!0===e.multiSection&&"function"!=typeof n)throw new Error("'getSectionSuggestions' must be implemented. See: https://github.com/moroshko/react-autosuggest#getSectionSuggestionsProp")},focusInputOnSuggestionClick:o.default.bool,highlightFirstSuggestion:o.default.bool,theme:o.default.object,id:o.default.string,containerProps:o.default.object}),b(S,"defaultProps",{renderSuggestionsContainer:function(e){var t=e.containerProps,n=e.children;return r.default.createElement("div",t,n)},shouldRenderSuggestions:function(e){return e.trim().length>0},alwaysRenderSuggestions:!1,multiSection:!1,shouldKeepSuggestionsOnSelect:function(){return!1},focusInputOnSuggestionClick:!0,highlightFirstSuggestion:!1,theme:u.defaultTheme,id:"1",containerProps:{}})},82107:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!==y(e)&&"function"!=typeof e)return{default:e};var t=l();if(t&&t.has(e))return t.get(e);var n={},r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)){var i=r?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}n.default=e,t&&t.set(e,n);return n}(n(84258)),o=s(n(35577)),i=s(n(44238)),a=s(n(47311)),u=s(n(69911)),c=s(n(83860));function s(e){return e&&e.__esModule?e:{default:e}}function l(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return l=function(){return e},e}function f(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function p(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?f(Object(n),!0).forEach((function(t){E(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):f(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function d(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if("undefined"==typeof Symbol||!(Symbol.iterator in Object(e)))return;var n=[],r=!0,o=!1,i=void 0;try{for(var a,u=e[Symbol.iterator]();!(r=(a=u.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{r||null==u.return||u.return()}finally{if(o)throw i}}return n}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return h(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return h(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function h(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function y(e){return(y="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function m(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function v(e,t){return!t||"object"!==y(t)&&"function"!=typeof t?g(e):t}function g(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function b(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function w(e){return(w=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function O(e,t){return(O=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function E(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var _={},x=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&O(e,t)}(f,e);var t,n,o,s,l=(t=f,function(){var e,n=w(t);if(b()){var r=w(this).constructor;e=Reflect.construct(n,arguments,r)}else e=n.apply(this,arguments);return v(this,e)});function f(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,f),E(g(t=l.call(this,e)),"storeInputReference",(function(e){null!==e&&(t.input=e);var n=t.props.inputProps.ref;n&&("function"==typeof n?n(e):"object"===y(n)&&Object.prototype.hasOwnProperty.call(n,"current")&&(n.current=e))})),E(g(t),"storeItemsContainerReference",(function(e){null!==e&&(t.itemsContainer=e)})),E(g(t),"onHighlightedItemChange",(function(e){t.highlightedItem=e})),E(g(t),"getItemId",(function(e,n){if(null===n)return null;var r=t.props.id,o=null===e?"":"section-".concat(e);return"react-autowhatever-".concat(r,"-").concat(o,"-item-").concat(n)})),E(g(t),"onFocus",(function(e){var n=t.props.inputProps;t.setState({isInputFocused:!0}),n.onFocus&&n.onFocus(e)})),E(g(t),"onBlur",(function(e){var n=t.props.inputProps;t.setState({isInputFocused:!1}),n.onBlur&&n.onBlur(e)})),E(g(t),"onKeyDown",(function(e){var n=t.props,r=n.inputProps,o=n.highlightedSectionIndex,i=n.highlightedItemIndex,a=e.keyCode;switch(a){case 40:case 38:var u=40===a?"next":"prev",c=d(t.sectionIterator[u]([o,i]),2),s=c[0],l=c[1];r.onKeyDown(e,{newHighlightedSectionIndex:s,newHighlightedItemIndex:l});break;default:r.onKeyDown(e,{highlightedSectionIndex:o,highlightedItemIndex:i})}})),t.highlightedItem=null,t.state={isInputFocused:!1},t.setSectionsItems(e),t.setSectionIterator(e),t.setTheme(e),t}return n=f,(o=[{key:"componentDidMount",value:function(){this.ensureHighlightedItemIsVisible()}},{key:"UNSAFE_componentWillReceiveProps",value:function(e){e.items!==this.props.items&&this.setSectionsItems(e),e.items===this.props.items&&e.multiSection===this.props.multiSection||this.setSectionIterator(e),e.theme!==this.props.theme&&this.setTheme(e)}},{key:"componentDidUpdate",value:function(){this.ensureHighlightedItemIsVisible()}},{key:"setSectionsItems",value:function(e){e.multiSection&&(this.sectionsItems=e.items.map((function(t){return e.getSectionItems(t)})),this.sectionsLengths=this.sectionsItems.map((function(e){return e.length})),this.allSectionsAreEmpty=this.sectionsLengths.every((function(e){return 0===e})))}},{key:"setSectionIterator",value:function(e){this.sectionIterator=(0,i.default)({multiSection:e.multiSection,data:e.multiSection?this.sectionsLengths:e.items.length})}},{key:"setTheme",value:function(e){this.theme=(0,a.default)(e.theme)}},{key:"renderSections",value:function(){var e=this;if(this.allSectionsAreEmpty)return null;var t=this.theme,n=this.props,o=n.id,i=n.items,a=n.renderItem,s=n.renderItemData,l=n.renderSectionTitle,f=n.highlightedSectionIndex,p=n.highlightedItemIndex,d=n.itemProps;return i.map((function(n,i){var h="react-autowhatever-".concat(o,"-"),y="".concat(h,"section-").concat(i,"-"),m=0===i;return r.default.createElement("div",t("".concat(y,"container"),"sectionContainer",m&&"sectionContainerFirst"),r.default.createElement(u.default,{section:n,renderSectionTitle:l,theme:t,sectionKeyPrefix:y}),r.default.createElement(c.default,{items:e.sectionsItems[i],itemProps:d,renderItem:a,renderItemData:s,sectionIndex:i,highlightedItemIndex:f===i?p:null,onHighlightedItemChange:e.onHighlightedItemChange,getItemId:e.getItemId,theme:t,keyPrefix:h,ref:e.storeItemsListReference}))}))}},{key:"renderItems",value:function(){var e=this.props.items;if(0===e.length)return null;var t=this.theme,n=this.props,o=n.id,i=n.renderItem,a=n.renderItemData,u=n.highlightedSectionIndex,s=n.highlightedItemIndex,l=n.itemProps;return r.default.createElement(c.default,{items:e,itemProps:l,renderItem:i,renderItemData:a,highlightedItemIndex:null===u?s:null,onHighlightedItemChange:this.onHighlightedItemChange,getItemId:this.getItemId,theme:t,keyPrefix:"react-autowhatever-".concat(o,"-")})}},{key:"ensureHighlightedItemIsVisible",value:function(){var e=this.highlightedItem;if(e){var t=this.itemsContainer,n=e.offsetParent===t?e.offsetTop:e.offsetTop-t.offsetTop,r=t.scrollTop;n<r?r=n:n+e.offsetHeight>r+t.offsetHeight&&(r=n+e.offsetHeight-t.offsetHeight),r!==t.scrollTop&&(t.scrollTop=r)}}},{key:"render",value:function(){var e=this.theme,t=this.props,n=t.id,o=t.multiSection,i=t.renderInputComponent,a=t.renderItemsContainer,u=t.highlightedSectionIndex,c=t.highlightedItemIndex,s=this.state.isInputFocused,l=o?this.renderSections():this.renderItems(),f=null!==l,d=this.getItemId(u,c),h="react-autowhatever-".concat(n),y=p({role:"combobox","aria-haspopup":"listbox","aria-owns":h,"aria-expanded":f},e("react-autowhatever-".concat(n,"-container"),"container",f&&"containerOpen"),{},this.props.containerProps),m=i(p({type:"text",value:"",autoComplete:"off","aria-autocomplete":"list","aria-controls":h,"aria-activedescendant":d},e("react-autowhatever-".concat(n,"-input"),"input",f&&"inputOpen",s&&"inputFocused"),{},this.props.inputProps,{onFocus:this.onFocus,onBlur:this.onBlur,onKeyDown:this.props.inputProps.onKeyDown&&this.onKeyDown,ref:this.storeInputReference})),v=a({containerProps:p({id:h,role:"listbox"},e("react-autowhatever-".concat(n,"-items-container"),"itemsContainer",f&&"itemsContainerOpen"),{ref:this.storeItemsContainerReference}),children:l});return r.default.createElement("div",y,m,v)}}])&&m(n.prototype,o),s&&m(n,s),f}(r.Component);t.default=x,E(x,"propTypes",{id:o.default.string,multiSection:o.default.bool,renderInputComponent:o.default.func,renderItemsContainer:o.default.func,items:o.default.array.isRequired,renderItem:o.default.func,renderItemData:o.default.object,renderSectionTitle:o.default.func,getSectionItems:o.default.func,containerProps:o.default.object,inputProps:o.default.object,itemProps:o.default.oneOfType([o.default.object,o.default.func]),highlightedSectionIndex:o.default.number,highlightedItemIndex:o.default.number,theme:o.default.oneOfType([o.default.object,o.default.array])}),E(x,"defaultProps",{id:"1",multiSection:!1,renderInputComponent:function(e){return r.default.createElement("input",e)},renderItemsContainer:function(e){var t=e.containerProps,n=e.children;return r.default.createElement("div",t,n)},renderItem:function(){throw new Error("`renderItem` must be provided")},renderItemData:_,renderSectionTitle:function(){throw new Error("`renderSectionTitle` must be provided")},getSectionItems:function(){throw new Error("`getSectionItems` must be provided")},containerProps:_,inputProps:_,itemProps:_,highlightedSectionIndex:null,highlightedItemIndex:null,theme:{container:"react-autowhatever__container",containerOpen:"react-autowhatever__container--open",input:"react-autowhatever__input",inputOpen:"react-autowhatever__input--open",inputFocused:"react-autowhatever__input--focused",itemsContainer:"react-autowhatever__items-container",itemsContainerOpen:"react-autowhatever__items-container--open",itemsList:"react-autowhatever__items-list",item:"react-autowhatever__item",itemFirst:"react-autowhatever__item--first",itemHighlighted:"react-autowhatever__item--highlighted",sectionContainer:"react-autowhatever__section-container",sectionContainerFirst:"react-autowhatever__section-container--first",sectionTitle:"react-autowhatever__section-title"}})},91934:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!==c(e)&&"function"!=typeof e)return{default:e};var t=u();if(t&&t.has(e))return t.get(e);var n={},r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)){var i=r?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}n.default=e,t&&t.set(e,n);return n}(n(84258)),o=a(n(35577)),i=a(n(64563));function a(e){return e&&e.__esModule?e:{default:e}}function u(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return u=function(){return e},e}function c(e){return(c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function s(){return(s=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function f(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function p(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function d(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function h(e,t){return!t||"object"!==c(t)&&"function"!=typeof t?y(e):t}function y(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function m(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function v(e){return(v=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function g(e,t){return(g=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function b(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var w=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&g(e,t)}(c,e);var t,n,o,a,u=(t=c,function(){var e,n=v(t);if(m()){var r=v(this).constructor;e=Reflect.construct(n,arguments,r)}else e=n.apply(this,arguments);return h(this,e)});function c(){var e;p(this,c);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return b(y(e=u.call.apply(u,[this].concat(n))),"storeItemReference",(function(t){null!==t&&(e.item=t)})),b(y(e),"onMouseEnter",(function(t){var n=e.props,r=n.sectionIndex,o=n.itemIndex;e.props.onMouseEnter(t,{sectionIndex:r,itemIndex:o})})),b(y(e),"onMouseLeave",(function(t){var n=e.props,r=n.sectionIndex,o=n.itemIndex;e.props.onMouseLeave(t,{sectionIndex:r,itemIndex:o})})),b(y(e),"onMouseDown",(function(t){var n=e.props,r=n.sectionIndex,o=n.itemIndex;e.props.onMouseDown(t,{sectionIndex:r,itemIndex:o})})),b(y(e),"onClick",(function(t){var n=e.props,r=n.sectionIndex,o=n.itemIndex;e.props.onClick(t,{sectionIndex:r,itemIndex:o})})),e}return n=c,(o=[{key:"shouldComponentUpdate",value:function(e){return(0,i.default)(e,this.props,["renderItemData"])}},{key:"render",value:function(){var e=this.props,t=e.isHighlighted,n=e.item,o=e.renderItem,i=e.renderItemData,a=f(e,["isHighlighted","item","renderItem","renderItemData"]);return delete a.sectionIndex,delete a.itemIndex,"function"==typeof a.onMouseEnter&&(a.onMouseEnter=this.onMouseEnter),"function"==typeof a.onMouseLeave&&(a.onMouseLeave=this.onMouseLeave),"function"==typeof a.onMouseDown&&(a.onMouseDown=this.onMouseDown),"function"==typeof a.onClick&&(a.onClick=this.onClick),r.default.createElement("li",s({role:"option"},a,{ref:this.storeItemReference}),o(n,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){b(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({isHighlighted:t},i)))}}])&&d(n.prototype,o),a&&d(n,a),c}(r.Component);t.default=w,b(w,"propTypes",{sectionIndex:o.default.number,isHighlighted:o.default.bool.isRequired,itemIndex:o.default.number.isRequired,item:o.default.any.isRequired,renderItem:o.default.func.isRequired,renderItemData:o.default.object.isRequired,onMouseEnter:o.default.func,onMouseLeave:o.default.func,onMouseDown:o.default.func,onClick:o.default.func})},83860:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!==s(e)&&"function"!=typeof e)return{default:e};var t=c();if(t&&t.has(e))return t.get(e);var n={},r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)){var i=r?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}n.default=e,t&&t.set(e,n);return n}(n(84258)),o=u(n(35577)),i=u(n(91934)),a=u(n(64563));function u(e){return e&&e.__esModule?e:{default:e}}function c(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return c=function(){return e},e}function s(e){return(s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function l(){return(l=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}function f(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function p(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function d(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function h(e,t){return!t||"object"!==s(t)&&"function"!=typeof t?y(e):t}function y(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function m(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function v(e){return(v=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function g(e,t){return(g=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function b(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var w=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&g(e,t)}(s,e);var t,n,o,u,c=(t=s,function(){var e,n=v(t);if(m()){var r=v(this).constructor;e=Reflect.construct(n,arguments,r)}else e=n.apply(this,arguments);return h(this,e)});function s(){var e;p(this,s);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return b(y(e=c.call.apply(c,[this].concat(n))),"storeHighlightedItemReference",(function(t){e.props.onHighlightedItemChange(null===t?null:t.item)})),e}return n=s,(o=[{key:"shouldComponentUpdate",value:function(e){return(0,a.default)(e,this.props,["itemProps"])}},{key:"render",value:function(){var e=this,t=this.props,n=t.items,o=t.itemProps,a=t.renderItem,u=t.renderItemData,c=t.sectionIndex,s=t.highlightedItemIndex,p=t.getItemId,d=t.theme,h=t.keyPrefix,y=null===c?h:"".concat(h,"section-").concat(c,"-"),m="function"==typeof o;return r.default.createElement("ul",l({role:"listbox"},d("".concat(y,"items-list"),"itemsList")),n.map((function(t,n){var h=0===n,v=n===s,g="".concat(y,"item-").concat(n),w=m?o({sectionIndex:c,itemIndex:n}):o,O=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?f(Object(n),!0).forEach((function(t){b(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):f(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({id:p(c,n),"aria-selected":v},d(g,"item",h&&"itemFirst",v&&"itemHighlighted"),{},w);return v&&(O.ref=e.storeHighlightedItemReference),r.default.createElement(i.default,l({},O,{sectionIndex:c,isHighlighted:v,itemIndex:n,item:t,renderItem:a,renderItemData:u}))})))}}])&&d(n.prototype,o),u&&d(n,u),s}(r.Component);t.default=w,b(w,"propTypes",{items:o.default.array.isRequired,itemProps:o.default.oneOfType([o.default.object,o.default.func]),renderItem:o.default.func.isRequired,renderItemData:o.default.object.isRequired,sectionIndex:o.default.number,highlightedItemIndex:o.default.number,onHighlightedItemChange:o.default.func.isRequired,getItemId:o.default.func.isRequired,theme:o.default.func.isRequired,keyPrefix:o.default.string.isRequired}),b(w,"defaultProps",{sectionIndex:null})},69911:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!==c(e)&&"function"!=typeof e)return{default:e};var t=u();if(t&&t.has(e))return t.get(e);var n={},r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)){var i=r?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}n.default=e,t&&t.set(e,n);return n}(n(84258)),o=a(n(35577)),i=a(n(64563));function a(e){return e&&e.__esModule?e:{default:e}}function u(){if("function"!=typeof WeakMap)return null;var e=new WeakMap;return u=function(){return e},e}function c(e){return(c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function l(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function f(e,t){return!t||"object"!==c(t)&&"function"!=typeof t?function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e):t}function p(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function d(e){return(d=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function h(e,t){return(h=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}var y,m,v,g=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&h(e,t)}(c,e);var t,n,o,a,u=(t=c,function(){var e,n=d(t);if(p()){var r=d(this).constructor;e=Reflect.construct(n,arguments,r)}else e=n.apply(this,arguments);return f(this,e)});function c(){return s(this,c),u.apply(this,arguments)}return n=c,(o=[{key:"shouldComponentUpdate",value:function(e){return(0,i.default)(e,this.props)}},{key:"render",value:function(){var e=this.props,t=e.section,n=e.renderSectionTitle,o=e.theme,i=e.sectionKeyPrefix,a=n(t);return a?r.default.createElement("div",o("".concat(i,"title"),"sectionTitle"),a):null}}])&&l(n.prototype,o),a&&l(n,a),c}(r.Component);t.default=g,y=g,m="propTypes",v={section:o.default.any.isRequired,renderSectionTitle:o.default.func.isRequired,theme:o.default.func.isRequired,sectionKeyPrefix:o.default.string.isRequired},m in y?Object.defineProperty(y,m,{value:v,enumerable:!0,configurable:!0,writable:!0}):y[m]=v},64563:(e,t)=>{"use strict";function n(e){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];if(e===t)return!1;var o=Object.keys(e),i=Object.keys(t);if(o.length!==i.length)return!0;var a,u,c={};for(a=0,u=r.length;a<u;a++)c[r[a]]=!0;for(a=0,u=o.length;a<u;a++){var s=o[a],l=e[s],f=t[s];if(l!==f){if(!c[s]||null===l||null===f||"object"!==n(l)||"object"!==n(f))return!0;var p=Object.keys(l),d=Object.keys(f);if(p.length!==d.length)return!0;for(var h=0,y=p.length;h<y;h++){var m=p[h];if(l[m]!==f[m])return!0}}}return!1}},5241:(e,t,n)=>{"use strict";e.exports=n(71412).default},45778:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.mapToAutowhateverTheme=t.defaultTheme=void 0;t.defaultTheme={container:"react-autosuggest__container",containerOpen:"react-autosuggest__container--open",input:"react-autosuggest__input",inputOpen:"react-autosuggest__input--open",inputFocused:"react-autosuggest__input--focused",suggestionsContainer:"react-autosuggest__suggestions-container",suggestionsContainerOpen:"react-autosuggest__suggestions-container--open",suggestionsList:"react-autosuggest__suggestions-list",suggestion:"react-autosuggest__suggestion",suggestionFirst:"react-autosuggest__suggestion--first",suggestionHighlighted:"react-autosuggest__suggestion--highlighted",sectionContainer:"react-autosuggest__section-container",sectionContainerFirst:"react-autosuggest__section-container--first",sectionTitle:"react-autosuggest__section-title"};t.mapToAutowhateverTheme=function(e){var t={};for(var n in e)switch(n){case"suggestionsContainer":t.itemsContainer=e[n];break;case"suggestionsContainerOpen":t.itemsContainerOpen=e[n];break;case"suggestion":t.item=e[n];break;case"suggestionFirst":t.itemFirst=e[n];break;case"suggestionHighlighted":t.itemHighlighted=e[n];break;case"suggestionsList":t.itemsList=e[n];break;default:t[n]=e[n]}return t}},88476:(e,t,n)=>{"use strict";var r=n(23970);function o(){}function i(){}i.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,i,a){if(a!==r){var u=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw u.name="Invariant Violation",u}}function t(){return e}e.isRequired=e;var n={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:o};return n.PropTypes=n,n}},35577:(e,t,n)=>{e.exports=n(88476)()},23970:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},89395:(e,t,n)=>{"use strict";var r=n(84258),o=n(28608),i=n(89019);function a(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}if(!r)throw Error(a(227));var u=new Set,c={};function s(e,t){l(e,t),l(e+"Capture",t)}function l(e,t){for(c[e]=t,e=0;e<t.length;e++)u.add(t[e])}var f=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),p=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,d=Object.prototype.hasOwnProperty,h={},y={};function m(e,t,n,r,o,i,a){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=i,this.removeEmptyString=a}var v={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){v[e]=new m(e,0,!1,e,null,!1,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var t=e[0];v[t]=new m(t,1,!1,e[1],null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){v[e]=new m(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){v[e]=new m(e,2,!1,e,null,!1,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){v[e]=new m(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((function(e){v[e]=new m(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((function(e){v[e]=new m(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((function(e){v[e]=new m(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((function(e){v[e]=new m(e,5,!1,e.toLowerCase(),null,!1,!1)}));var g=/[\-:]([a-z])/g;function b(e){return e[1].toUpperCase()}function w(e,t,n,r){var o=v.hasOwnProperty(t)?v[t]:null;(null!==o?0===o.type:!r&&(2<t.length&&("o"===t[0]||"O"===t[0])&&("n"===t[1]||"N"===t[1])))||(function(e,t,n,r){if(null==t||function(e,t,n,r){if(null!==n&&0===n.type)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return!r&&(null!==n?!n.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,t,n,r))return!0;if(r)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,n,o,r)&&(n=null),r||null===o?function(e){return!!d.call(y,e)||!d.call(h,e)&&(p.test(e)?y[e]=!0:(h[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):o.mustUseProperty?e[o.propertyName]=null===n?3!==o.type&&"":n:(t=o.attributeName,r=o.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(o=o.type)||4===o&&!0===n?"":""+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var t=e.replace(g,b);v[t]=new m(t,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var t=e.replace(g,b);v[t]=new m(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace(g,b);v[t]=new m(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){v[e]=new m(e,1,!1,e.toLowerCase(),null,!1,!1)})),v.xlinkHref=new m("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){v[e]=new m(e,1,!1,e.toLowerCase(),null,!0,!0)}));var O=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,E=60103,_=60106,x=60107,S=60108,j=60114,P=60109,k=60110,I=60112,T=60113,R=60120,C=60115,A=60116,N=60121,L=60128,D=60129,M=60130,F=60131;if("function"==typeof Symbol&&Symbol.for){var U=Symbol.for;E=U("react.element"),_=U("react.portal"),x=U("react.fragment"),S=U("react.strict_mode"),j=U("react.profiler"),P=U("react.provider"),k=U("react.context"),I=U("react.forward_ref"),T=U("react.suspense"),R=U("react.suspense_list"),C=U("react.memo"),A=U("react.lazy"),N=U("react.block"),U("react.scope"),L=U("react.opaque.id"),D=U("react.debug_trace_mode"),M=U("react.offscreen"),F=U("react.legacy_hidden")}var B,H="function"==typeof Symbol&&Symbol.iterator;function q(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=H&&e[H]||e["@@iterator"])?e:null}function z(e){if(void 0===B)try{throw Error()}catch(e){var t=e.stack.trim().match(/\n( *(at )?)/);B=t&&t[1]||""}return"\n"+B+e}var G=!1;function W(e,t){if(!e||G)return"";G=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(e){var r=e}Reflect.construct(e,[],t)}else{try{t.call()}catch(e){r=e}e.call(t.prototype)}else{try{throw Error()}catch(e){r=e}e()}}catch(e){if(e&&r&&"string"==typeof e.stack){for(var o=e.stack.split("\n"),i=r.stack.split("\n"),a=o.length-1,u=i.length-1;1<=a&&0<=u&&o[a]!==i[u];)u--;for(;1<=a&&0<=u;a--,u--)if(o[a]!==i[u]){if(1!==a||1!==u)do{if(a--,0>--u||o[a]!==i[u])return"\n"+o[a].replace(" at new "," at ")}while(1<=a&&0<=u);break}}}finally{G=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?z(e):""}function V(e){switch(e.tag){case 5:return z(e.type);case 16:return z("Lazy");case 13:return z("Suspense");case 19:return z("SuspenseList");case 0:case 2:case 15:return e=W(e.type,!1);case 11:return e=W(e.type.render,!1);case 22:return e=W(e.type._render,!1);case 1:return e=W(e.type,!0);default:return""}}function Y(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case x:return"Fragment";case _:return"Portal";case j:return"Profiler";case S:return"StrictMode";case T:return"Suspense";case R:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case k:return(e.displayName||"Context")+".Consumer";case P:return(e._context.displayName||"Context")+".Provider";case I:var t=e.render;return t=t.displayName||t.name||"",e.displayName||(""!==t?"ForwardRef("+t+")":"ForwardRef");case C:return Y(e.type);case N:return Y(e._render);case A:t=e._payload,e=e._init;try{return Y(e(t))}catch(e){}}return null}function Z(e){switch(typeof e){case"boolean":case"number":case"object":case"string":case"undefined":return e;default:return""}}function $(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function K(e){e._valueTracker||(e._valueTracker=function(e){var t=$(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var o=n.get,i=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(e){r=""+e,i.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function Q(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=$(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function X(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function J(e,t){var n=t.checked;return o({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function ee(e,t){var n=null==t.defaultValue?"":t.defaultValue,r=null!=t.checked?t.checked:t.defaultChecked;n=Z(null!=t.value?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function te(e,t){null!=(t=t.checked)&&w(e,"checked",t,!1)}function ne(e,t){te(e,t);var n=Z(t.value),r=t.type;if(null!=n)"number"===r?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if("submit"===r||"reset"===r)return void e.removeAttribute("value");t.hasOwnProperty("value")?oe(e,t.type,n):t.hasOwnProperty("defaultValue")&&oe(e,t.type,Z(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function re(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!("submit"!==r&&"reset"!==r||void 0!==t.value&&null!==t.value))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}""!==(n=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==n&&(e.name=n)}function oe(e,t,n){"number"===t&&X(e.ownerDocument)===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}function ie(e,t){return e=o({children:void 0},t),(t=function(e){var t="";return r.Children.forEach(e,(function(e){null!=e&&(t+=e)})),t}(t.children))&&(e.children=t),e}function ae(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o<n.length;o++)t["$"+n[o]]=!0;for(n=0;n<e.length;n++)o=t.hasOwnProperty("$"+e[n].value),e[n].selected!==o&&(e[n].selected=o),o&&r&&(e[n].defaultSelected=!0)}else{for(n=""+Z(n),t=null,o=0;o<e.length;o++){if(e[o].value===n)return e[o].selected=!0,void(r&&(e[o].defaultSelected=!0));null!==t||e[o].disabled||(t=e[o])}null!==t&&(t.selected=!0)}}function ue(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(a(91));return o({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function ce(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(a(92));if(Array.isArray(n)){if(!(1>=n.length))throw Error(a(93));n=n[0]}t=n}null==t&&(t=""),n=t}e._wrapperState={initialValue:Z(n)}}function se(e,t){var n=Z(t.value),r=Z(t.defaultValue);null!=n&&((n=""+n)!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=r&&(e.defaultValue=""+r)}function le(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}var fe="http://www.w3.org/1999/xhtml",pe="http://www.w3.org/2000/svg";function de(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function he(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?de(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var ye,me,ve=(me=function(e,t){if(e.namespaceURI!==pe||"innerHTML"in e)e.innerHTML=t;else{for((ye=ye||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=ye.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,n,r){MSApp.execUnsafeLocalFunction((function(){return me(e,t)}))}:me);function ge(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var be={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},we=["Webkit","ms","Moz","O"];function Oe(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||be.hasOwnProperty(e)&&be[e]?(""+t).trim():t+"px"}function Ee(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=0===n.indexOf("--"),o=Oe(n,t[n],r);"float"===n&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}Object.keys(be).forEach((function(e){we.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),be[t]=be[e]}))}));var _e=o({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function xe(e,t){if(t){if(_e[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(a(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(a(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(a(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(a(62))}}function Se(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function je(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var Pe=null,ke=null,Ie=null;function Te(e){if(e=eo(e)){if("function"!=typeof Pe)throw Error(a(280));var t=e.stateNode;t&&(t=no(t),Pe(e.stateNode,e.type,t))}}function Re(e){ke?Ie?Ie.push(e):Ie=[e]:ke=e}function Ce(){if(ke){var e=ke,t=Ie;if(Ie=ke=null,Te(e),t)for(e=0;e<t.length;e++)Te(t[e])}}function Ae(e,t){return e(t)}function Ne(e,t,n,r,o){return e(t,n,r,o)}function Le(){}var De=Ae,Me=!1,Fe=!1;function Ue(){null===ke&&null===Ie||(Le(),Ce())}function Be(e,t){var n=e.stateNode;if(null===n)return null;var r=no(n);if(null===r)return null;n=r[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(r=!r.disabled)||(r=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!r;break e;default:e=!1}if(e)return null;if(n&&"function"!=typeof n)throw Error(a(231,t,typeof n));return n}var He=!1;if(f)try{var qe={};Object.defineProperty(qe,"passive",{get:function(){He=!0}}),window.addEventListener("test",qe,qe),window.removeEventListener("test",qe,qe)}catch(me){He=!1}function ze(e,t,n,r,o,i,a,u,c){var s=Array.prototype.slice.call(arguments,3);try{t.apply(n,s)}catch(e){this.onError(e)}}var Ge=!1,We=null,Ve=!1,Ye=null,Ze={onError:function(e){Ge=!0,We=e}};function $e(e,t,n,r,o,i,a,u,c){Ge=!1,We=null,ze.apply(Ze,arguments)}function Ke(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!=(1026&(t=e).flags)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function Qe(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!==(e=e.alternate)&&(t=e.memoizedState)),null!==t)return t.dehydrated}return null}function Xe(e){if(Ke(e)!==e)throw Error(a(188))}function Je(e){if(!(e=function(e){var t=e.alternate;if(!t){if(null===(t=Ke(e)))throw Error(a(188));return t!==e?null:e}for(var n=e,r=t;;){var o=n.return;if(null===o)break;var i=o.alternate;if(null===i){if(null!==(r=o.return)){n=r;continue}break}if(o.child===i.child){for(i=o.child;i;){if(i===n)return Xe(o),e;if(i===r)return Xe(o),t;i=i.sibling}throw Error(a(188))}if(n.return!==r.return)n=o,r=i;else{for(var u=!1,c=o.child;c;){if(c===n){u=!0,n=o,r=i;break}if(c===r){u=!0,r=o,n=i;break}c=c.sibling}if(!u){for(c=i.child;c;){if(c===n){u=!0,n=i,r=o;break}if(c===r){u=!0,r=i,n=o;break}c=c.sibling}if(!u)throw Error(a(189))}}if(n.alternate!==r)throw Error(a(190))}if(3!==n.tag)throw Error(a(188));return n.stateNode.current===n?e:t}(e)))return null;for(var t=e;;){if(5===t.tag||6===t.tag)return t;if(t.child)t.child.return=t,t=t.child;else{if(t===e)break;for(;!t.sibling;){if(!t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}}return null}function et(e,t){for(var n=e.alternate;null!==t;){if(t===e||t===n)return!0;t=t.return}return!1}var tt,nt,rt,ot,it=!1,at=[],ut=null,ct=null,st=null,lt=new Map,ft=new Map,pt=[],dt="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function ht(e,t,n,r,o){return{blockedOn:e,domEventName:t,eventSystemFlags:16|n,nativeEvent:o,targetContainers:[r]}}function yt(e,t){switch(e){case"focusin":case"focusout":ut=null;break;case"dragenter":case"dragleave":ct=null;break;case"mouseover":case"mouseout":st=null;break;case"pointerover":case"pointerout":lt.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":ft.delete(t.pointerId)}}function mt(e,t,n,r,o,i){return null===e||e.nativeEvent!==i?(e=ht(t,n,r,o,i),null!==t&&(null!==(t=eo(t))&&nt(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,null!==o&&-1===t.indexOf(o)&&t.push(o),e)}function vt(e){var t=Jr(e.target);if(null!==t){var n=Ke(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=Qe(n)))return e.blockedOn=t,void ot(e.lanePriority,(function(){i.unstable_runWithPriority(e.priority,(function(){rt(n)}))}))}else if(3===t&&n.stateNode.hydrate)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function gt(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=Jt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n)return null!==(t=eo(n))&&nt(t),e.blockedOn=n,!1;t.shift()}return!0}function bt(e,t,n){gt(e)&&n.delete(t)}function wt(){for(it=!1;0<at.length;){var e=at[0];if(null!==e.blockedOn){null!==(e=eo(e.blockedOn))&&tt(e);break}for(var t=e.targetContainers;0<t.length;){var n=Jt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n){e.blockedOn=n;break}t.shift()}null===e.blockedOn&&at.shift()}null!==ut&&gt(ut)&&(ut=null),null!==ct&&gt(ct)&&(ct=null),null!==st&&gt(st)&&(st=null),lt.forEach(bt),ft.forEach(bt)}function Ot(e,t){e.blockedOn===t&&(e.blockedOn=null,it||(it=!0,i.unstable_scheduleCallback(i.unstable_NormalPriority,wt)))}function Et(e){function t(t){return Ot(t,e)}if(0<at.length){Ot(at[0],e);for(var n=1;n<at.length;n++){var r=at[n];r.blockedOn===e&&(r.blockedOn=null)}}for(null!==ut&&Ot(ut,e),null!==ct&&Ot(ct,e),null!==st&&Ot(st,e),lt.forEach(t),ft.forEach(t),n=0;n<pt.length;n++)(r=pt[n]).blockedOn===e&&(r.blockedOn=null);for(;0<pt.length&&null===(n=pt[0]).blockedOn;)vt(n),null===n.blockedOn&&pt.shift()}function _t(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var xt={animationend:_t("Animation","AnimationEnd"),animationiteration:_t("Animation","AnimationIteration"),animationstart:_t("Animation","AnimationStart"),transitionend:_t("Transition","TransitionEnd")},St={},jt={};function Pt(e){if(St[e])return St[e];if(!xt[e])return e;var t,n=xt[e];for(t in n)if(n.hasOwnProperty(t)&&t in jt)return St[e]=n[t];return e}f&&(jt=document.createElement("div").style,"AnimationEvent"in window||(delete xt.animationend.animation,delete xt.animationiteration.animation,delete xt.animationstart.animation),"TransitionEvent"in window||delete xt.transitionend.transition);var kt=Pt("animationend"),It=Pt("animationiteration"),Tt=Pt("animationstart"),Rt=Pt("transitionend"),Ct=new Map,At=new Map,Nt=["abort","abort",kt,"animationEnd",It,"animationIteration",Tt,"animationStart","canplay","canPlay","canplaythrough","canPlayThrough","durationchange","durationChange","emptied","emptied","encrypted","encrypted","ended","ended","error","error","gotpointercapture","gotPointerCapture","load","load","loadeddata","loadedData","loadedmetadata","loadedMetadata","loadstart","loadStart","lostpointercapture","lostPointerCapture","playing","playing","progress","progress","seeking","seeking","stalled","stalled","suspend","suspend","timeupdate","timeUpdate",Rt,"transitionEnd","waiting","waiting"];function Lt(e,t){for(var n=0;n<e.length;n+=2){var r=e[n],o=e[n+1];o="on"+(o[0].toUpperCase()+o.slice(1)),At.set(r,t),Ct.set(r,o),s(o,[r])}}(0,i.unstable_now)();var Dt=8;function Mt(e){if(0!=(1&e))return Dt=15,1;if(0!=(2&e))return Dt=14,2;if(0!=(4&e))return Dt=13,4;var t=24&e;return 0!==t?(Dt=12,t):0!=(32&e)?(Dt=11,32):0!==(t=192&e)?(Dt=10,t):0!=(256&e)?(Dt=9,256):0!==(t=3584&e)?(Dt=8,t):0!=(4096&e)?(Dt=7,4096):0!==(t=4186112&e)?(Dt=6,t):0!==(t=62914560&e)?(Dt=5,t):67108864&e?(Dt=4,67108864):0!=(134217728&e)?(Dt=3,134217728):0!==(t=805306368&e)?(Dt=2,t):0!=(1073741824&e)?(Dt=1,1073741824):(Dt=8,e)}function Ft(e,t){var n=e.pendingLanes;if(0===n)return Dt=0;var r=0,o=0,i=e.expiredLanes,a=e.suspendedLanes,u=e.pingedLanes;if(0!==i)r=i,o=Dt=15;else if(0!==(i=134217727&n)){var c=i&~a;0!==c?(r=Mt(c),o=Dt):0!==(u&=i)&&(r=Mt(u),o=Dt)}else 0!==(i=n&~a)?(r=Mt(i),o=Dt):0!==u&&(r=Mt(u),o=Dt);if(0===r)return 0;if(r=n&((0>(r=31-Gt(r))?0:1<<r)<<1)-1,0!==t&&t!==r&&0==(t&a)){if(Mt(t),o<=Dt)return t;Dt=o}if(0!==(t=e.entangledLanes))for(e=e.entanglements,t&=r;0<t;)o=1<<(n=31-Gt(t)),r|=e[n],t&=~o;return r}function Ut(e){return 0!==(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function Bt(e,t){switch(e){case 15:return 1;case 14:return 2;case 12:return 0===(e=Ht(24&~t))?Bt(10,t):e;case 10:return 0===(e=Ht(192&~t))?Bt(8,t):e;case 8:return 0===(e=Ht(3584&~t))&&(0===(e=Ht(4186112&~t))&&(e=512)),e;case 2:return 0===(t=Ht(805306368&~t))&&(t=268435456),t}throw Error(a(358,e))}function Ht(e){return e&-e}function qt(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function zt(e,t,n){e.pendingLanes|=t;var r=t-1;e.suspendedLanes&=r,e.pingedLanes&=r,(e=e.eventTimes)[t=31-Gt(t)]=n}var Gt=Math.clz32?Math.clz32:function(e){return 0===e?32:31-(Wt(e)/Vt|0)|0},Wt=Math.log,Vt=Math.LN2;var Yt=i.unstable_UserBlockingPriority,Zt=i.unstable_runWithPriority,$t=!0;function Kt(e,t,n,r){Me||Le();var o=Xt,i=Me;Me=!0;try{Ne(o,e,t,n,r)}finally{(Me=i)||Ue()}}function Qt(e,t,n,r){Zt(Yt,Xt.bind(null,e,t,n,r))}function Xt(e,t,n,r){var o;if($t)if((o=0==(4&t))&&0<at.length&&-1<dt.indexOf(e))e=ht(null,e,t,n,r),at.push(e);else{var i=Jt(e,t,n,r);if(null===i)o&&yt(e,r);else{if(o){if(-1<dt.indexOf(e))return e=ht(i,e,t,n,r),void at.push(e);if(function(e,t,n,r,o){switch(t){case"focusin":return ut=mt(ut,e,t,n,r,o),!0;case"dragenter":return ct=mt(ct,e,t,n,r,o),!0;case"mouseover":return st=mt(st,e,t,n,r,o),!0;case"pointerover":var i=o.pointerId;return lt.set(i,mt(lt.get(i)||null,e,t,n,r,o)),!0;case"gotpointercapture":return i=o.pointerId,ft.set(i,mt(ft.get(i)||null,e,t,n,r,o)),!0}return!1}(i,e,t,n,r))return;yt(e,r)}Cr(e,t,r,null,n)}}}function Jt(e,t,n,r){var o=je(r);if(null!==(o=Jr(o))){var i=Ke(o);if(null===i)o=null;else{var a=i.tag;if(13===a){if(null!==(o=Qe(i)))return o;o=null}else if(3===a){if(i.stateNode.hydrate)return 3===i.tag?i.stateNode.containerInfo:null;o=null}else i!==o&&(o=null)}}return Cr(e,t,r,o,n),null}var en=null,tn=null,nn=null;function rn(){if(nn)return nn;var e,t,n=tn,r=n.length,o="value"in en?en.value:en.textContent,i=o.length;for(e=0;e<r&&n[e]===o[e];e++);var a=r-e;for(t=1;t<=a&&n[r-t]===o[i-t];t++);return nn=o.slice(e,1<t?1-t:void 0)}function on(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function an(){return!0}function un(){return!1}function cn(e){function t(t,n,r,o,i){for(var a in this._reactName=t,this._targetInst=r,this.type=n,this.nativeEvent=o,this.target=i,this.currentTarget=null,e)e.hasOwnProperty(a)&&(t=e[a],this[a]=t?t(o):o[a]);return this.isDefaultPrevented=(null!=o.defaultPrevented?o.defaultPrevented:!1===o.returnValue)?an:un,this.isPropagationStopped=un,this}return o(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=an)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=an)},persist:function(){},isPersistent:an}),t}var sn,ln,fn,pn={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},dn=cn(pn),hn=o({},pn,{view:0,detail:0}),yn=cn(hn),mn=o({},hn,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:Pn,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==fn&&(fn&&"mousemove"===e.type?(sn=e.screenX-fn.screenX,ln=e.screenY-fn.screenY):ln=sn=0,fn=e),sn)},movementY:function(e){return"movementY"in e?e.movementY:ln}}),vn=cn(mn),gn=cn(o({},mn,{dataTransfer:0})),bn=cn(o({},hn,{relatedTarget:0})),wn=cn(o({},pn,{animationName:0,elapsedTime:0,pseudoElement:0})),On=cn(o({},pn,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}})),En=cn(o({},pn,{data:0})),_n={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},xn={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},Sn={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function jn(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=Sn[e])&&!!t[e]}function Pn(){return jn}var kn=cn(o({},hn,{key:function(e){if(e.key){var t=_n[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=on(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?xn[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:Pn,charCode:function(e){return"keypress"===e.type?on(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?on(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}})),In=cn(o({},mn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),Tn=cn(o({},hn,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:Pn})),Rn=cn(o({},pn,{propertyName:0,elapsedTime:0,pseudoElement:0})),Cn=cn(o({},mn,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0})),An=[9,13,27,32],Nn=f&&"CompositionEvent"in window,Ln=null;f&&"documentMode"in document&&(Ln=document.documentMode);var Dn=f&&"TextEvent"in window&&!Ln,Mn=f&&(!Nn||Ln&&8<Ln&&11>=Ln),Fn=String.fromCharCode(32),Un=!1;function Bn(e,t){switch(e){case"keyup":return-1!==An.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Hn(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var qn=!1;var zn={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Gn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!zn[e.type]:"textarea"===t}function Wn(e,t,n,r){Re(r),0<(t=Nr(t,"onChange")).length&&(n=new dn("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var Vn=null,Yn=null;function Zn(e){jr(e,0)}function $n(e){if(Q(to(e)))return e}function Kn(e,t){if("change"===e)return t}var Qn=!1;if(f){var Xn;if(f){var Jn="oninput"in document;if(!Jn){var er=document.createElement("div");er.setAttribute("oninput","return;"),Jn="function"==typeof er.oninput}Xn=Jn}else Xn=!1;Qn=Xn&&(!document.documentMode||9<document.documentMode)}function tr(){Vn&&(Vn.detachEvent("onpropertychange",nr),Yn=Vn=null)}function nr(e){if("value"===e.propertyName&&$n(Yn)){var t=[];if(Wn(t,Yn,e,je(e)),e=Zn,Me)e(t);else{Me=!0;try{Ae(e,t)}finally{Me=!1,Ue()}}}}function rr(e,t,n){"focusin"===e?(tr(),Yn=n,(Vn=t).attachEvent("onpropertychange",nr)):"focusout"===e&&tr()}function or(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return $n(Yn)}function ir(e,t){if("click"===e)return $n(t)}function ar(e,t){if("input"===e||"change"===e)return $n(t)}var ur="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},cr=Object.prototype.hasOwnProperty;function sr(e,t){if(ur(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++)if(!cr.call(t,n[r])||!ur(e[n[r]],t[n[r]]))return!1;return!0}function lr(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function fr(e,t){var n,r=lr(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=lr(r)}}function pr(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?pr(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function dr(){for(var e=window,t=X();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(e){n=!1}if(!n)break;t=X((e=t.contentWindow).document)}return t}function hr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}var yr=f&&"documentMode"in document&&11>=document.documentMode,mr=null,vr=null,gr=null,br=!1;function wr(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;br||null==mr||mr!==X(r)||("selectionStart"in(r=mr)&&hr(r)?r={start:r.selectionStart,end:r.selectionEnd}:r={anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},gr&&sr(gr,r)||(gr=r,0<(r=Nr(vr,"onSelect")).length&&(t=new dn("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=mr)))}Lt("cancel cancel click click close close contextmenu contextMenu copy copy cut cut auxclick auxClick dblclick doubleClick dragend dragEnd dragstart dragStart drop drop focusin focus focusout blur input input invalid invalid keydown keyDown keypress keyPress keyup keyUp mousedown mouseDown mouseup mouseUp paste paste pause pause play play pointercancel pointerCancel pointerdown pointerDown pointerup pointerUp ratechange rateChange reset reset seeked seeked submit submit touchcancel touchCancel touchend touchEnd touchstart touchStart volumechange volumeChange".split(" "),0),Lt("drag drag dragenter dragEnter dragexit dragExit dragleave dragLeave dragover dragOver mousemove mouseMove mouseout mouseOut mouseover mouseOver pointermove pointerMove pointerout pointerOut pointerover pointerOver scroll scroll toggle toggle touchmove touchMove wheel wheel".split(" "),1),Lt(Nt,2);for(var Or="change selectionchange textInput compositionstart compositionend compositionupdate".split(" "),Er=0;Er<Or.length;Er++)At.set(Or[Er],0);l("onMouseEnter",["mouseout","mouseover"]),l("onMouseLeave",["mouseout","mouseover"]),l("onPointerEnter",["pointerout","pointerover"]),l("onPointerLeave",["pointerout","pointerover"]),s("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),s("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),s("onBeforeInput",["compositionend","keypress","textInput","paste"]),s("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),s("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),s("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var _r="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),xr=new Set("cancel close invalid load scroll toggle".split(" ").concat(_r));function Sr(e,t,n){var r=e.type||"unknown-event";e.currentTarget=n,function(e,t,n,r,o,i,u,c,s){if($e.apply(this,arguments),Ge){if(!Ge)throw Error(a(198));var l=We;Ge=!1,We=null,Ve||(Ve=!0,Ye=l)}}(r,t,void 0,e),e.currentTarget=null}function jr(e,t){t=0!=(4&t);for(var n=0;n<e.length;n++){var r=e[n],o=r.event;r=r.listeners;e:{var i=void 0;if(t)for(var a=r.length-1;0<=a;a--){var u=r[a],c=u.instance,s=u.currentTarget;if(u=u.listener,c!==i&&o.isPropagationStopped())break e;Sr(o,u,s),i=c}else for(a=0;a<r.length;a++){if(c=(u=r[a]).instance,s=u.currentTarget,u=u.listener,c!==i&&o.isPropagationStopped())break e;Sr(o,u,s),i=c}}}if(Ve)throw e=Ye,Ve=!1,Ye=null,e}function Pr(e,t){var n=ro(t),r=e+"__bubble";n.has(r)||(Rr(t,e,2,!1),n.add(r))}var kr="_reactListening"+Math.random().toString(36).slice(2);function Ir(e){e[kr]||(e[kr]=!0,u.forEach((function(t){xr.has(t)||Tr(t,!1,e,null),Tr(t,!0,e,null)})))}function Tr(e,t,n,r){var o=4<arguments.length&&void 0!==arguments[4]?arguments[4]:0,i=n;if("selectionchange"===e&&9!==n.nodeType&&(i=n.ownerDocument),null!==r&&!t&&xr.has(e)){if("scroll"!==e)return;o|=2,i=r}var a=ro(i),u=e+"__"+(t?"capture":"bubble");a.has(u)||(t&&(o|=4),Rr(i,e,o,t),a.add(u))}function Rr(e,t,n,r){var o=At.get(t);switch(void 0===o?2:o){case 0:o=Kt;break;case 1:o=Qt;break;default:o=Xt}n=o.bind(null,t,n,e),o=void 0,!He||"touchstart"!==t&&"touchmove"!==t&&"wheel"!==t||(o=!0),r?void 0!==o?e.addEventListener(t,n,{capture:!0,passive:o}):e.addEventListener(t,n,!0):void 0!==o?e.addEventListener(t,n,{passive:o}):e.addEventListener(t,n,!1)}function Cr(e,t,n,r,o){var i=r;if(0==(1&t)&&0==(2&t)&&null!==r)e:for(;;){if(null===r)return;var a=r.tag;if(3===a||4===a){var u=r.stateNode.containerInfo;if(u===o||8===u.nodeType&&u.parentNode===o)break;if(4===a)for(a=r.return;null!==a;){var c=a.tag;if((3===c||4===c)&&((c=a.stateNode.containerInfo)===o||8===c.nodeType&&c.parentNode===o))return;a=a.return}for(;null!==u;){if(null===(a=Jr(u)))return;if(5===(c=a.tag)||6===c){r=i=a;continue e}u=u.parentNode}}r=r.return}!function(e,t,n){if(Fe)return e(t,n);Fe=!0;try{De(e,t,n)}finally{Fe=!1,Ue()}}((function(){var r=i,o=je(n),a=[];e:{var u=Ct.get(e);if(void 0!==u){var c=dn,s=e;switch(e){case"keypress":if(0===on(n))break e;case"keydown":case"keyup":c=kn;break;case"focusin":s="focus",c=bn;break;case"focusout":s="blur",c=bn;break;case"beforeblur":case"afterblur":c=bn;break;case"click":if(2===n.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":c=vn;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":c=gn;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":c=Tn;break;case kt:case It:case Tt:c=wn;break;case Rt:c=Rn;break;case"scroll":c=yn;break;case"wheel":c=Cn;break;case"copy":case"cut":case"paste":c=On;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":c=In}var l=0!=(4&t),f=!l&&"scroll"===e,p=l?null!==u?u+"Capture":null:u;l=[];for(var d,h=r;null!==h;){var y=(d=h).stateNode;if(5===d.tag&&null!==y&&(d=y,null!==p&&(null!=(y=Be(h,p))&&l.push(Ar(h,y,d)))),f)break;h=h.return}0<l.length&&(u=new c(u,s,null,n,o),a.push({event:u,listeners:l}))}}if(0==(7&t)){if(c="mouseout"===e||"pointerout"===e,(!(u="mouseover"===e||"pointerover"===e)||0!=(16&t)||!(s=n.relatedTarget||n.fromElement)||!Jr(s)&&!s[Qr])&&(c||u)&&(u=o.window===o?o:(u=o.ownerDocument)?u.defaultView||u.parentWindow:window,c?(c=r,null!==(s=(s=n.relatedTarget||n.toElement)?Jr(s):null)&&(s!==(f=Ke(s))||5!==s.tag&&6!==s.tag)&&(s=null)):(c=null,s=r),c!==s)){if(l=vn,y="onMouseLeave",p="onMouseEnter",h="mouse","pointerout"!==e&&"pointerover"!==e||(l=In,y="onPointerLeave",p="onPointerEnter",h="pointer"),f=null==c?u:to(c),d=null==s?u:to(s),(u=new l(y,h+"leave",c,n,o)).target=f,u.relatedTarget=d,y=null,Jr(o)===r&&((l=new l(p,h+"enter",s,n,o)).target=d,l.relatedTarget=f,y=l),f=y,c&&s)e:{for(p=s,h=0,d=l=c;d;d=Lr(d))h++;for(d=0,y=p;y;y=Lr(y))d++;for(;0<h-d;)l=Lr(l),h--;for(;0<d-h;)p=Lr(p),d--;for(;h--;){if(l===p||null!==p&&l===p.alternate)break e;l=Lr(l),p=Lr(p)}l=null}else l=null;null!==c&&Dr(a,u,c,l,!1),null!==s&&null!==f&&Dr(a,f,s,l,!0)}if("select"===(c=(u=r?to(r):window).nodeName&&u.nodeName.toLowerCase())||"input"===c&&"file"===u.type)var m=Kn;else if(Gn(u))if(Qn)m=ar;else{m=or;var v=rr}else(c=u.nodeName)&&"input"===c.toLowerCase()&&("checkbox"===u.type||"radio"===u.type)&&(m=ir);switch(m&&(m=m(e,r))?Wn(a,m,n,o):(v&&v(e,u,r),"focusout"===e&&(v=u._wrapperState)&&v.controlled&&"number"===u.type&&oe(u,"number",u.value)),v=r?to(r):window,e){case"focusin":(Gn(v)||"true"===v.contentEditable)&&(mr=v,vr=r,gr=null);break;case"focusout":gr=vr=mr=null;break;case"mousedown":br=!0;break;case"contextmenu":case"mouseup":case"dragend":br=!1,wr(a,n,o);break;case"selectionchange":if(yr)break;case"keydown":case"keyup":wr(a,n,o)}var g;if(Nn)e:{switch(e){case"compositionstart":var b="onCompositionStart";break e;case"compositionend":b="onCompositionEnd";break e;case"compositionupdate":b="onCompositionUpdate";break e}b=void 0}else qn?Bn(e,n)&&(b="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(b="onCompositionStart");b&&(Mn&&"ko"!==n.locale&&(qn||"onCompositionStart"!==b?"onCompositionEnd"===b&&qn&&(g=rn()):(tn="value"in(en=o)?en.value:en.textContent,qn=!0)),0<(v=Nr(r,b)).length&&(b=new En(b,e,null,n,o),a.push({event:b,listeners:v}),g?b.data=g:null!==(g=Hn(n))&&(b.data=g))),(g=Dn?function(e,t){switch(e){case"compositionend":return Hn(t);case"keypress":return 32!==t.which?null:(Un=!0,Fn);case"textInput":return(e=t.data)===Fn&&Un?null:e;default:return null}}(e,n):function(e,t){if(qn)return"compositionend"===e||!Nn&&Bn(e,t)?(e=rn(),nn=tn=en=null,qn=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return Mn&&"ko"!==t.locale?null:t.data;default:return null}}(e,n))&&(0<(r=Nr(r,"onBeforeInput")).length&&(o=new En("onBeforeInput","beforeinput",null,n,o),a.push({event:o,listeners:r}),o.data=g))}jr(a,t)}))}function Ar(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Nr(e,t){for(var n=t+"Capture",r=[];null!==e;){var o=e,i=o.stateNode;5===o.tag&&null!==i&&(o=i,null!=(i=Be(e,n))&&r.unshift(Ar(e,i,o)),null!=(i=Be(e,t))&&r.push(Ar(e,i,o))),e=e.return}return r}function Lr(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function Dr(e,t,n,r,o){for(var i=t._reactName,a=[];null!==n&&n!==r;){var u=n,c=u.alternate,s=u.stateNode;if(null!==c&&c===r)break;5===u.tag&&null!==s&&(u=s,o?null!=(c=Be(n,i))&&a.unshift(Ar(n,c,u)):o||null!=(c=Be(n,i))&&a.push(Ar(n,c,u))),n=n.return}0!==a.length&&e.push({event:t,listeners:a})}function Mr(){}var Fr=null,Ur=null;function Br(e,t){switch(e){case"button":case"input":case"select":case"textarea":return!!t.autoFocus}return!1}function Hr(e,t){return"textarea"===e||"option"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var qr="function"==typeof setTimeout?setTimeout:void 0,zr="function"==typeof clearTimeout?clearTimeout:void 0;function Gr(e){1===e.nodeType?e.textContent="":9===e.nodeType&&(null!=(e=e.body)&&(e.textContent=""))}function Wr(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break}return e}function Vr(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if("$"===n||"$!"===n||"$?"===n){if(0===t)return e;t--}else"/$"===n&&t++}e=e.previousSibling}return null}var Yr=0;var Zr=Math.random().toString(36).slice(2),$r="__reactFiber$"+Zr,Kr="__reactProps$"+Zr,Qr="__reactContainer$"+Zr,Xr="__reactEvents$"+Zr;function Jr(e){var t=e[$r];if(t)return t;for(var n=e.parentNode;n;){if(t=n[Qr]||n[$r]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=Vr(e);null!==e;){if(n=e[$r])return n;e=Vr(e)}return t}n=(e=n).parentNode}return null}function eo(e){return!(e=e[$r]||e[Qr])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function to(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(a(33))}function no(e){return e[Kr]||null}function ro(e){var t=e[Xr];return void 0===t&&(t=e[Xr]=new Set),t}var oo=[],io=-1;function ao(e){return{current:e}}function uo(e){0>io||(e.current=oo[io],oo[io]=null,io--)}function co(e,t){io++,oo[io]=e.current,e.current=t}var so={},lo=ao(so),fo=ao(!1),po=so;function ho(e,t){var n=e.type.contextTypes;if(!n)return so;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o,i={};for(o in n)i[o]=t[o];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=i),i}function yo(e){return null!=(e=e.childContextTypes)}function mo(){uo(fo),uo(lo)}function vo(e,t,n){if(lo.current!==so)throw Error(a(168));co(lo,t),co(fo,n)}function go(e,t,n){var r=e.stateNode;if(e=t.childContextTypes,"function"!=typeof r.getChildContext)return n;for(var i in r=r.getChildContext())if(!(i in e))throw Error(a(108,Y(t)||"Unknown",i));return o({},n,r)}function bo(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||so,po=lo.current,co(lo,e),co(fo,fo.current),!0}function wo(e,t,n){var r=e.stateNode;if(!r)throw Error(a(169));n?(e=go(e,t,po),r.__reactInternalMemoizedMergedChildContext=e,uo(fo),uo(lo),co(lo,e)):uo(fo),co(fo,n)}var Oo=null,Eo=null,_o=i.unstable_runWithPriority,xo=i.unstable_scheduleCallback,So=i.unstable_cancelCallback,jo=i.unstable_shouldYield,Po=i.unstable_requestPaint,ko=i.unstable_now,Io=i.unstable_getCurrentPriorityLevel,To=i.unstable_ImmediatePriority,Ro=i.unstable_UserBlockingPriority,Co=i.unstable_NormalPriority,Ao=i.unstable_LowPriority,No=i.unstable_IdlePriority,Lo={},Do=void 0!==Po?Po:function(){},Mo=null,Fo=null,Uo=!1,Bo=ko(),Ho=1e4>Bo?ko:function(){return ko()-Bo};function qo(){switch(Io()){case To:return 99;case Ro:return 98;case Co:return 97;case Ao:return 96;case No:return 95;default:throw Error(a(332))}}function zo(e){switch(e){case 99:return To;case 98:return Ro;case 97:return Co;case 96:return Ao;case 95:return No;default:throw Error(a(332))}}function Go(e,t){return e=zo(e),_o(e,t)}function Wo(e,t,n){return e=zo(e),xo(e,t,n)}function Vo(){if(null!==Fo){var e=Fo;Fo=null,So(e)}Yo()}function Yo(){if(!Uo&&null!==Mo){Uo=!0;var e=0;try{var t=Mo;Go(99,(function(){for(;e<t.length;e++){var n=t[e];do{n=n(!0)}while(null!==n)}})),Mo=null}catch(t){throw null!==Mo&&(Mo=Mo.slice(e+1)),xo(To,Vo),t}finally{Uo=!1}}}var Zo=O.ReactCurrentBatchConfig;function $o(e,t){if(e&&e.defaultProps){for(var n in t=o({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}return t}var Ko=ao(null),Qo=null,Xo=null,Jo=null;function ei(){Jo=Xo=Qo=null}function ti(e){var t=Ko.current;uo(Ko),e.type._context._currentValue=t}function ni(e,t){for(;null!==e;){var n=e.alternate;if((e.childLanes&t)===t){if(null===n||(n.childLanes&t)===t)break;n.childLanes|=t}else e.childLanes|=t,null!==n&&(n.childLanes|=t);e=e.return}}function ri(e,t){Qo=e,Jo=Xo=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!=(e.lanes&t)&&(Na=!0),e.firstContext=null)}function oi(e,t){if(Jo!==e&&!1!==t&&0!==t)if("number"==typeof t&&1073741823!==t||(Jo=e,t=1073741823),t={context:e,observedBits:t,next:null},null===Xo){if(null===Qo)throw Error(a(308));Xo=t,Qo.dependencies={lanes:0,firstContext:t,responders:null}}else Xo=Xo.next=t;return e._currentValue}var ii=!1;function ai(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null},effects:null}}function ui(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function ci(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function si(e,t){if(null!==(e=e.updateQueue)){var n=(e=e.shared).pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}}function li(e,t){var n=e.updateQueue,r=e.alternate;if(null!==r&&n===(r=r.updateQueue)){var o=null,i=null;if(null!==(n=n.firstBaseUpdate)){do{var a={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};null===i?o=i=a:i=i.next=a,n=n.next}while(null!==n);null===i?o=i=t:i=i.next=t}else o=i=t;return n={baseState:r.baseState,firstBaseUpdate:o,lastBaseUpdate:i,shared:r.shared,effects:r.effects},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function fi(e,t,n,r){var i=e.updateQueue;ii=!1;var a=i.firstBaseUpdate,u=i.lastBaseUpdate,c=i.shared.pending;if(null!==c){i.shared.pending=null;var s=c,l=s.next;s.next=null,null===u?a=l:u.next=l,u=s;var f=e.alternate;if(null!==f){var p=(f=f.updateQueue).lastBaseUpdate;p!==u&&(null===p?f.firstBaseUpdate=l:p.next=l,f.lastBaseUpdate=s)}}if(null!==a){for(p=i.baseState,u=0,f=l=s=null;;){c=a.lane;var d=a.eventTime;if((r&c)===c){null!==f&&(f=f.next={eventTime:d,lane:0,tag:a.tag,payload:a.payload,callback:a.callback,next:null});e:{var h=e,y=a;switch(c=t,d=n,y.tag){case 1:if("function"==typeof(h=y.payload)){p=h.call(d,p,c);break e}p=h;break e;case 3:h.flags=-4097&h.flags|64;case 0:if(null==(c="function"==typeof(h=y.payload)?h.call(d,p,c):h))break e;p=o({},p,c);break e;case 2:ii=!0}}null!==a.callback&&(e.flags|=32,null===(c=i.effects)?i.effects=[a]:c.push(a))}else d={eventTime:d,lane:c,tag:a.tag,payload:a.payload,callback:a.callback,next:null},null===f?(l=f=d,s=p):f=f.next=d,u|=c;if(null===(a=a.next)){if(null===(c=i.shared.pending))break;a=c.next,c.next=null,i.lastBaseUpdate=c,i.shared.pending=null}}null===f&&(s=p),i.baseState=s,i.firstBaseUpdate=l,i.lastBaseUpdate=f,Mu|=u,e.lanes=u,e.memoizedState=p}}function pi(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var r=e[t],o=r.callback;if(null!==o){if(r.callback=null,r=n,"function"!=typeof o)throw Error(a(191,o));o.call(r)}}}var di=(new r.Component).refs;function hi(e,t,n,r){n=null==(n=n(r,t=e.memoizedState))?t:o({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var yi={isMounted:function(e){return!!(e=e._reactInternals)&&Ke(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternals;var r=cc(),o=sc(e),i=ci(r,o);i.payload=t,null!=n&&(i.callback=n),si(e,i),lc(e,o,r)},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=cc(),o=sc(e),i=ci(r,o);i.tag=1,i.payload=t,null!=n&&(i.callback=n),si(e,i),lc(e,o,r)},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=cc(),r=sc(e),o=ci(n,r);o.tag=2,null!=t&&(o.callback=t),si(e,o),lc(e,r,n)}};function mi(e,t,n,r,o,i,a){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,i,a):!t.prototype||!t.prototype.isPureReactComponent||(!sr(n,r)||!sr(o,i))}function vi(e,t,n){var r=!1,o=so,i=t.contextType;return"object"==typeof i&&null!==i?i=oi(i):(o=yo(t)?po:lo.current,i=(r=null!=(r=t.contextTypes))?ho(e,o):so),t=new t(n,i),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=yi,e.stateNode=t,t._reactInternals=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=o,e.__reactInternalMemoizedMaskedChildContext=i),t}function gi(e,t,n,r){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&yi.enqueueReplaceState(t,t.state,null)}function bi(e,t,n,r){var o=e.stateNode;o.props=n,o.state=e.memoizedState,o.refs=di,ai(e);var i=t.contextType;"object"==typeof i&&null!==i?o.context=oi(i):(i=yo(t)?po:lo.current,o.context=ho(e,i)),fi(e,n,o,r),o.state=e.memoizedState,"function"==typeof(i=t.getDerivedStateFromProps)&&(hi(e,t,i,n),o.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof o.getSnapshotBeforeUpdate||"function"!=typeof o.UNSAFE_componentWillMount&&"function"!=typeof o.componentWillMount||(t=o.state,"function"==typeof o.componentWillMount&&o.componentWillMount(),"function"==typeof o.UNSAFE_componentWillMount&&o.UNSAFE_componentWillMount(),t!==o.state&&yi.enqueueReplaceState(o,o.state,null),fi(e,n,o,r),o.state=e.memoizedState),"function"==typeof o.componentDidMount&&(e.flags|=4)}var wi=Array.isArray;function Oi(e,t,n){if(null!==(e=n.ref)&&"function"!=typeof e&&"object"!=typeof e){if(n._owner){if(n=n._owner){if(1!==n.tag)throw Error(a(309));var r=n.stateNode}if(!r)throw Error(a(147,e));var o=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===o?t.ref:((t=function(e){var t=r.refs;t===di&&(t=r.refs={}),null===e?delete t[o]:t[o]=e})._stringRef=o,t)}if("string"!=typeof e)throw Error(a(284));if(!n._owner)throw Error(a(290,e))}return e}function Ei(e,t){if("textarea"!==e.type)throw Error(a(31,"[object Object]"===Object.prototype.toString.call(t)?"object with keys {"+Object.keys(t).join(", ")+"}":t))}function _i(e){function t(t,n){if(e){var r=t.lastEffect;null!==r?(r.nextEffect=n,t.lastEffect=n):t.firstEffect=t.lastEffect=n,n.nextEffect=null,n.flags=8}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function o(e,t){return(e=qc(e,t)).index=0,e.sibling=null,e}function i(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index)<n?(t.flags=2,n):r:(t.flags=2,n):n}function u(t){return e&&null===t.alternate&&(t.flags=2),t}function c(e,t,n,r){return null===t||6!==t.tag?((t=Vc(n,e.mode,r)).return=e,t):((t=o(t,n)).return=e,t)}function s(e,t,n,r){return null!==t&&t.elementType===n.type?((r=o(t,n.props)).ref=Oi(e,t,n),r.return=e,r):((r=zc(n.type,n.key,n.props,null,e.mode,r)).ref=Oi(e,t,n),r.return=e,r)}function l(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=Yc(n,e.mode,r)).return=e,t):((t=o(t,n.children||[])).return=e,t)}function f(e,t,n,r,i){return null===t||7!==t.tag?((t=Gc(n,e.mode,r,i)).return=e,t):((t=o(t,n)).return=e,t)}function p(e,t,n){if("string"==typeof t||"number"==typeof t)return(t=Vc(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case E:return(n=zc(t.type,t.key,t.props,null,e.mode,n)).ref=Oi(e,null,t),n.return=e,n;case _:return(t=Yc(t,e.mode,n)).return=e,t}if(wi(t)||q(t))return(t=Gc(t,e.mode,n,null)).return=e,t;Ei(e,t)}return null}function d(e,t,n,r){var o=null!==t?t.key:null;if("string"==typeof n||"number"==typeof n)return null!==o?null:c(e,t,""+n,r);if("object"==typeof n&&null!==n){switch(n.$$typeof){case E:return n.key===o?n.type===x?f(e,t,n.props.children,r,o):s(e,t,n,r):null;case _:return n.key===o?l(e,t,n,r):null}if(wi(n)||q(n))return null!==o?null:f(e,t,n,r,null);Ei(e,n)}return null}function h(e,t,n,r,o){if("string"==typeof r||"number"==typeof r)return c(t,e=e.get(n)||null,""+r,o);if("object"==typeof r&&null!==r){switch(r.$$typeof){case E:return e=e.get(null===r.key?n:r.key)||null,r.type===x?f(t,e,r.props.children,o,r.key):s(t,e,r,o);case _:return l(t,e=e.get(null===r.key?n:r.key)||null,r,o)}if(wi(r)||q(r))return f(t,e=e.get(n)||null,r,o,null);Ei(t,r)}return null}function y(o,a,u,c){for(var s=null,l=null,f=a,y=a=0,m=null;null!==f&&y<u.length;y++){f.index>y?(m=f,f=null):m=f.sibling;var v=d(o,f,u[y],c);if(null===v){null===f&&(f=m);break}e&&f&&null===v.alternate&&t(o,f),a=i(v,a,y),null===l?s=v:l.sibling=v,l=v,f=m}if(y===u.length)return n(o,f),s;if(null===f){for(;y<u.length;y++)null!==(f=p(o,u[y],c))&&(a=i(f,a,y),null===l?s=f:l.sibling=f,l=f);return s}for(f=r(o,f);y<u.length;y++)null!==(m=h(f,o,y,u[y],c))&&(e&&null!==m.alternate&&f.delete(null===m.key?y:m.key),a=i(m,a,y),null===l?s=m:l.sibling=m,l=m);return e&&f.forEach((function(e){return t(o,e)})),s}function m(o,u,c,s){var l=q(c);if("function"!=typeof l)throw Error(a(150));if(null==(c=l.call(c)))throw Error(a(151));for(var f=l=null,y=u,m=u=0,v=null,g=c.next();null!==y&&!g.done;m++,g=c.next()){y.index>m?(v=y,y=null):v=y.sibling;var b=d(o,y,g.value,s);if(null===b){null===y&&(y=v);break}e&&y&&null===b.alternate&&t(o,y),u=i(b,u,m),null===f?l=b:f.sibling=b,f=b,y=v}if(g.done)return n(o,y),l;if(null===y){for(;!g.done;m++,g=c.next())null!==(g=p(o,g.value,s))&&(u=i(g,u,m),null===f?l=g:f.sibling=g,f=g);return l}for(y=r(o,y);!g.done;m++,g=c.next())null!==(g=h(y,o,m,g.value,s))&&(e&&null!==g.alternate&&y.delete(null===g.key?m:g.key),u=i(g,u,m),null===f?l=g:f.sibling=g,f=g);return e&&y.forEach((function(e){return t(o,e)})),l}return function(e,r,i,c){var s="object"==typeof i&&null!==i&&i.type===x&&null===i.key;s&&(i=i.props.children);var l="object"==typeof i&&null!==i;if(l)switch(i.$$typeof){case E:e:{for(l=i.key,s=r;null!==s;){if(s.key===l){switch(s.tag){case 7:if(i.type===x){n(e,s.sibling),(r=o(s,i.props.children)).return=e,e=r;break e}break;default:if(s.elementType===i.type){n(e,s.sibling),(r=o(s,i.props)).ref=Oi(e,s,i),r.return=e,e=r;break e}}n(e,s);break}t(e,s),s=s.sibling}i.type===x?((r=Gc(i.props.children,e.mode,c,i.key)).return=e,e=r):((c=zc(i.type,i.key,i.props,null,e.mode,c)).ref=Oi(e,r,i),c.return=e,e=c)}return u(e);case _:e:{for(s=i.key;null!==r;){if(r.key===s){if(4===r.tag&&r.stateNode.containerInfo===i.containerInfo&&r.stateNode.implementation===i.implementation){n(e,r.sibling),(r=o(r,i.children||[])).return=e,e=r;break e}n(e,r);break}t(e,r),r=r.sibling}(r=Yc(i,e.mode,c)).return=e,e=r}return u(e)}if("string"==typeof i||"number"==typeof i)return i=""+i,null!==r&&6===r.tag?(n(e,r.sibling),(r=o(r,i)).return=e,e=r):(n(e,r),(r=Vc(i,e.mode,c)).return=e,e=r),u(e);if(wi(i))return y(e,r,i,c);if(q(i))return m(e,r,i,c);if(l&&Ei(e,i),void 0===i&&!s)switch(e.tag){case 1:case 22:case 0:case 11:case 15:throw Error(a(152,Y(e.type)||"Component"))}return n(e,r)}}var xi=_i(!0),Si=_i(!1),ji={},Pi=ao(ji),ki=ao(ji),Ii=ao(ji);function Ti(e){if(e===ji)throw Error(a(174));return e}function Ri(e,t){switch(co(Ii,t),co(ki,e),co(Pi,ji),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:he(null,"");break;default:t=he(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}uo(Pi),co(Pi,t)}function Ci(){uo(Pi),uo(ki),uo(Ii)}function Ai(e){Ti(Ii.current);var t=Ti(Pi.current),n=he(t,e.type);t!==n&&(co(ki,e),co(Pi,n))}function Ni(e){ki.current===e&&(uo(Pi),uo(ki))}var Li=ao(0);function Di(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||"$!"===n.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!=(64&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var Mi=null,Fi=null,Ui=!1;function Bi(e,t){var n=Bc(5,null,null,0);n.elementType="DELETED",n.type="DELETED",n.stateNode=t,n.return=e,n.flags=8,null!==e.lastEffect?(e.lastEffect.nextEffect=n,e.lastEffect=n):e.firstEffect=e.lastEffect=n}function Hi(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,!0);case 13:default:return!1}}function qi(e){if(Ui){var t=Fi;if(t){var n=t;if(!Hi(e,t)){if(!(t=Wr(n.nextSibling))||!Hi(e,t))return e.flags=-1025&e.flags|2,Ui=!1,void(Mi=e);Bi(Mi,n)}Mi=e,Fi=Wr(t.firstChild)}else e.flags=-1025&e.flags|2,Ui=!1,Mi=e}}function zi(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;Mi=e}function Gi(e){if(e!==Mi)return!1;if(!Ui)return zi(e),Ui=!0,!1;var t=e.type;if(5!==e.tag||"head"!==t&&"body"!==t&&!Hr(t,e.memoizedProps))for(t=Fi;t;)Bi(e,t),t=Wr(t.nextSibling);if(zi(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(a(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if("/$"===n){if(0===t){Fi=Wr(e.nextSibling);break e}t--}else"$"!==n&&"$!"!==n&&"$?"!==n||t++}e=e.nextSibling}Fi=null}}else Fi=Mi?Wr(e.stateNode.nextSibling):null;return!0}function Wi(){Fi=Mi=null,Ui=!1}var Vi=[];function Yi(){for(var e=0;e<Vi.length;e++)Vi[e]._workInProgressVersionPrimary=null;Vi.length=0}var Zi=O.ReactCurrentDispatcher,$i=O.ReactCurrentBatchConfig,Ki=0,Qi=null,Xi=null,Ji=null,ea=!1,ta=!1;function na(){throw Error(a(321))}function ra(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!ur(e[n],t[n]))return!1;return!0}function oa(e,t,n,r,o,i){if(Ki=i,Qi=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,Zi.current=null===e||null===e.memoizedState?Ta:Ra,e=n(r,o),ta){i=0;do{if(ta=!1,!(25>i))throw Error(a(301));i+=1,Ji=Xi=null,t.updateQueue=null,Zi.current=Ca,e=n(r,o)}while(ta)}if(Zi.current=Ia,t=null!==Xi&&null!==Xi.next,Ki=0,Ji=Xi=Qi=null,ea=!1,t)throw Error(a(300));return e}function ia(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===Ji?Qi.memoizedState=Ji=e:Ji=Ji.next=e,Ji}function aa(){if(null===Xi){var e=Qi.alternate;e=null!==e?e.memoizedState:null}else e=Xi.next;var t=null===Ji?Qi.memoizedState:Ji.next;if(null!==t)Ji=t,Xi=e;else{if(null===e)throw Error(a(310));e={memoizedState:(Xi=e).memoizedState,baseState:Xi.baseState,baseQueue:Xi.baseQueue,queue:Xi.queue,next:null},null===Ji?Qi.memoizedState=Ji=e:Ji=Ji.next=e}return Ji}function ua(e,t){return"function"==typeof t?t(e):t}function ca(e){var t=aa(),n=t.queue;if(null===n)throw Error(a(311));n.lastRenderedReducer=e;var r=Xi,o=r.baseQueue,i=n.pending;if(null!==i){if(null!==o){var u=o.next;o.next=i.next,i.next=u}r.baseQueue=o=i,n.pending=null}if(null!==o){o=o.next,r=r.baseState;var c=u=i=null,s=o;do{var l=s.lane;if((Ki&l)===l)null!==c&&(c=c.next={lane:0,action:s.action,eagerReducer:s.eagerReducer,eagerState:s.eagerState,next:null}),r=s.eagerReducer===e?s.eagerState:e(r,s.action);else{var f={lane:l,action:s.action,eagerReducer:s.eagerReducer,eagerState:s.eagerState,next:null};null===c?(u=c=f,i=r):c=c.next=f,Qi.lanes|=l,Mu|=l}s=s.next}while(null!==s&&s!==o);null===c?i=r:c.next=u,ur(r,t.memoizedState)||(Na=!0),t.memoizedState=r,t.baseState=i,t.baseQueue=c,n.lastRenderedState=r}return[t.memoizedState,n.dispatch]}function sa(e){var t=aa(),n=t.queue;if(null===n)throw Error(a(311));n.lastRenderedReducer=e;var r=n.dispatch,o=n.pending,i=t.memoizedState;if(null!==o){n.pending=null;var u=o=o.next;do{i=e(i,u.action),u=u.next}while(u!==o);ur(i,t.memoizedState)||(Na=!0),t.memoizedState=i,null===t.baseQueue&&(t.baseState=i),n.lastRenderedState=i}return[i,r]}function la(e,t,n){var r=t._getVersion;r=r(t._source);var o=t._workInProgressVersionPrimary;if(null!==o?e=o===r:(e=e.mutableReadLanes,(e=(Ki&e)===e)&&(t._workInProgressVersionPrimary=r,Vi.push(t))),e)return n(t._source);throw Vi.push(t),Error(a(350))}function fa(e,t,n,r){var o=Iu;if(null===o)throw Error(a(349));var i=t._getVersion,u=i(t._source),c=Zi.current,s=c.useState((function(){return la(o,t,n)})),l=s[1],f=s[0];s=Ji;var p=e.memoizedState,d=p.refs,h=d.getSnapshot,y=p.source;p=p.subscribe;var m=Qi;return e.memoizedState={refs:d,source:t,subscribe:r},c.useEffect((function(){d.getSnapshot=n,d.setSnapshot=l;var e=i(t._source);if(!ur(u,e)){e=n(t._source),ur(f,e)||(l(e),e=sc(m),o.mutableReadLanes|=e&o.pendingLanes),e=o.mutableReadLanes,o.entangledLanes|=e;for(var r=o.entanglements,a=e;0<a;){var c=31-Gt(a),s=1<<c;r[c]|=e,a&=~s}}}),[n,t,r]),c.useEffect((function(){return r(t._source,(function(){var e=d.getSnapshot,n=d.setSnapshot;try{n(e(t._source));var r=sc(m);o.mutableReadLanes|=r&o.pendingLanes}catch(e){n((function(){throw e}))}}))}),[t,r]),ur(h,n)&&ur(y,t)&&ur(p,r)||((e={pending:null,dispatch:null,lastRenderedReducer:ua,lastRenderedState:f}).dispatch=l=ka.bind(null,Qi,e),s.queue=e,s.baseQueue=null,f=la(o,t,n),s.memoizedState=s.baseState=f),f}function pa(e,t,n){return fa(aa(),e,t,n)}function da(e){var t=ia();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e=(e=t.queue={pending:null,dispatch:null,lastRenderedReducer:ua,lastRenderedState:e}).dispatch=ka.bind(null,Qi,e),[t.memoizedState,e]}function ha(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},null===(t=Qi.updateQueue)?(t={lastEffect:null},Qi.updateQueue=t,t.lastEffect=e.next=e):null===(n=t.lastEffect)?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e),e}function ya(e){return e={current:e},ia().memoizedState=e}function ma(){return aa().memoizedState}function va(e,t,n,r){var o=ia();Qi.flags|=e,o.memoizedState=ha(1|t,n,void 0,void 0===r?null:r)}function ga(e,t,n,r){var o=aa();r=void 0===r?null:r;var i=void 0;if(null!==Xi){var a=Xi.memoizedState;if(i=a.destroy,null!==r&&ra(r,a.deps))return void ha(t,n,i,r)}Qi.flags|=e,o.memoizedState=ha(1|t,n,i,r)}function ba(e,t){return va(516,4,e,t)}function wa(e,t){return ga(516,4,e,t)}function Oa(e,t){return ga(4,2,e,t)}function Ea(e,t){return"function"==typeof t?(e=e(),t(e),function(){t(null)}):null!=t?(e=e(),t.current=e,function(){t.current=null}):void 0}function _a(e,t,n){return n=null!=n?n.concat([e]):null,ga(4,2,Ea.bind(null,t,e),n)}function xa(){}function Sa(e,t){var n=aa();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&ra(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function ja(e,t){var n=aa();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&ra(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function Pa(e,t){var n=qo();Go(98>n?98:n,(function(){e(!0)})),Go(97<n?97:n,(function(){var n=$i.transition;$i.transition=1;try{e(!1),t()}finally{$i.transition=n}}))}function ka(e,t,n){var r=cc(),o=sc(e),i={lane:o,action:n,eagerReducer:null,eagerState:null,next:null},a=t.pending;if(null===a?i.next=i:(i.next=a.next,a.next=i),t.pending=i,a=e.alternate,e===Qi||null!==a&&a===Qi)ta=ea=!0;else{if(0===e.lanes&&(null===a||0===a.lanes)&&null!==(a=t.lastRenderedReducer))try{var u=t.lastRenderedState,c=a(u,n);if(i.eagerReducer=a,i.eagerState=c,ur(c,u))return}catch(e){}lc(e,o,r)}}var Ia={readContext:oi,useCallback:na,useContext:na,useEffect:na,useImperativeHandle:na,useLayoutEffect:na,useMemo:na,useReducer:na,useRef:na,useState:na,useDebugValue:na,useDeferredValue:na,useTransition:na,useMutableSource:na,useOpaqueIdentifier:na,unstable_isNewReconciler:!1},Ta={readContext:oi,useCallback:function(e,t){return ia().memoizedState=[e,void 0===t?null:t],e},useContext:oi,useEffect:ba,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,va(4,2,Ea.bind(null,t,e),n)},useLayoutEffect:function(e,t){return va(4,2,e,t)},useMemo:function(e,t){var n=ia();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=ia();return t=void 0!==n?n(t):t,r.memoizedState=r.baseState=t,e=(e=r.queue={pending:null,dispatch:null,lastRenderedReducer:e,lastRenderedState:t}).dispatch=ka.bind(null,Qi,e),[r.memoizedState,e]},useRef:ya,useState:da,useDebugValue:xa,useDeferredValue:function(e){var t=da(e),n=t[0],r=t[1];return ba((function(){var t=$i.transition;$i.transition=1;try{r(e)}finally{$i.transition=t}}),[e]),n},useTransition:function(){var e=da(!1),t=e[0];return ya(e=Pa.bind(null,e[1])),[e,t]},useMutableSource:function(e,t,n){var r=ia();return r.memoizedState={refs:{getSnapshot:t,setSnapshot:null},source:e,subscribe:n},fa(r,e,t,n)},useOpaqueIdentifier:function(){if(Ui){var e=!1,t=function(e){return{$$typeof:L,toString:e,valueOf:e}}((function(){throw e||(e=!0,n("r:"+(Yr++).toString(36))),Error(a(355))})),n=da(t)[1];return 0==(2&Qi.mode)&&(Qi.flags|=516,ha(5,(function(){n("r:"+(Yr++).toString(36))}),void 0,null)),t}return da(t="r:"+(Yr++).toString(36)),t},unstable_isNewReconciler:!1},Ra={readContext:oi,useCallback:Sa,useContext:oi,useEffect:wa,useImperativeHandle:_a,useLayoutEffect:Oa,useMemo:ja,useReducer:ca,useRef:ma,useState:function(){return ca(ua)},useDebugValue:xa,useDeferredValue:function(e){var t=ca(ua),n=t[0],r=t[1];return wa((function(){var t=$i.transition;$i.transition=1;try{r(e)}finally{$i.transition=t}}),[e]),n},useTransition:function(){var e=ca(ua)[0];return[ma().current,e]},useMutableSource:pa,useOpaqueIdentifier:function(){return ca(ua)[0]},unstable_isNewReconciler:!1},Ca={readContext:oi,useCallback:Sa,useContext:oi,useEffect:wa,useImperativeHandle:_a,useLayoutEffect:Oa,useMemo:ja,useReducer:sa,useRef:ma,useState:function(){return sa(ua)},useDebugValue:xa,useDeferredValue:function(e){var t=sa(ua),n=t[0],r=t[1];return wa((function(){var t=$i.transition;$i.transition=1;try{r(e)}finally{$i.transition=t}}),[e]),n},useTransition:function(){var e=sa(ua)[0];return[ma().current,e]},useMutableSource:pa,useOpaqueIdentifier:function(){return sa(ua)[0]},unstable_isNewReconciler:!1},Aa=O.ReactCurrentOwner,Na=!1;function La(e,t,n,r){t.child=null===e?Si(t,null,n,r):xi(t,e.child,n,r)}function Da(e,t,n,r,o){n=n.render;var i=t.ref;return ri(t,o),r=oa(e,t,n,r,i,o),null===e||Na?(t.flags|=1,La(e,t,r,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~o,nu(e,t,o))}function Ma(e,t,n,r,o,i){if(null===e){var a=n.type;return"function"!=typeof a||Hc(a)||void 0!==a.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=zc(n.type,null,r,t,t.mode,i)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=a,Fa(e,t,a,r,o,i))}return a=e.child,0==(o&i)&&(o=a.memoizedProps,(n=null!==(n=n.compare)?n:sr)(o,r)&&e.ref===t.ref)?nu(e,t,i):(t.flags|=1,(e=qc(a,r)).ref=t.ref,e.return=t,t.child=e)}function Fa(e,t,n,r,o,i){if(null!==e&&sr(e.memoizedProps,r)&&e.ref===t.ref){if(Na=!1,0==(i&o))return t.lanes=e.lanes,nu(e,t,i);0!=(16384&e.flags)&&(Na=!0)}return Ha(e,t,n,r,i)}function Ua(e,t,n){var r=t.pendingProps,o=r.children,i=null!==e?e.memoizedState:null;if("hidden"===r.mode||"unstable-defer-without-hiding"===r.mode)if(0==(4&t.mode))t.memoizedState={baseLanes:0},gc(t,n);else{if(0==(1073741824&n))return e=null!==i?i.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e},gc(t,e),null;t.memoizedState={baseLanes:0},gc(t,null!==i?i.baseLanes:n)}else null!==i?(r=i.baseLanes|n,t.memoizedState=null):r=n,gc(t,r);return La(e,t,o,n),t.child}function Ba(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.flags|=128)}function Ha(e,t,n,r,o){var i=yo(n)?po:lo.current;return i=ho(t,i),ri(t,o),n=oa(e,t,n,r,i,o),null===e||Na?(t.flags|=1,La(e,t,n,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~o,nu(e,t,o))}function qa(e,t,n,r,o){if(yo(n)){var i=!0;bo(t)}else i=!1;if(ri(t,o),null===t.stateNode)null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),vi(t,n,r),bi(t,n,r,o),r=!0;else if(null===e){var a=t.stateNode,u=t.memoizedProps;a.props=u;var c=a.context,s=n.contextType;"object"==typeof s&&null!==s?s=oi(s):s=ho(t,s=yo(n)?po:lo.current);var l=n.getDerivedStateFromProps,f="function"==typeof l||"function"==typeof a.getSnapshotBeforeUpdate;f||"function"!=typeof a.UNSAFE_componentWillReceiveProps&&"function"!=typeof a.componentWillReceiveProps||(u!==r||c!==s)&&gi(t,a,r,s),ii=!1;var p=t.memoizedState;a.state=p,fi(t,r,a,o),c=t.memoizedState,u!==r||p!==c||fo.current||ii?("function"==typeof l&&(hi(t,n,l,r),c=t.memoizedState),(u=ii||mi(t,n,u,r,p,c,s))?(f||"function"!=typeof a.UNSAFE_componentWillMount&&"function"!=typeof a.componentWillMount||("function"==typeof a.componentWillMount&&a.componentWillMount(),"function"==typeof a.UNSAFE_componentWillMount&&a.UNSAFE_componentWillMount()),"function"==typeof a.componentDidMount&&(t.flags|=4)):("function"==typeof a.componentDidMount&&(t.flags|=4),t.memoizedProps=r,t.memoizedState=c),a.props=r,a.state=c,a.context=s,r=u):("function"==typeof a.componentDidMount&&(t.flags|=4),r=!1)}else{a=t.stateNode,ui(e,t),u=t.memoizedProps,s=t.type===t.elementType?u:$o(t.type,u),a.props=s,f=t.pendingProps,p=a.context,"object"==typeof(c=n.contextType)&&null!==c?c=oi(c):c=ho(t,c=yo(n)?po:lo.current);var d=n.getDerivedStateFromProps;(l="function"==typeof d||"function"==typeof a.getSnapshotBeforeUpdate)||"function"!=typeof a.UNSAFE_componentWillReceiveProps&&"function"!=typeof a.componentWillReceiveProps||(u!==f||p!==c)&&gi(t,a,r,c),ii=!1,p=t.memoizedState,a.state=p,fi(t,r,a,o);var h=t.memoizedState;u!==f||p!==h||fo.current||ii?("function"==typeof d&&(hi(t,n,d,r),h=t.memoizedState),(s=ii||mi(t,n,s,r,p,h,c))?(l||"function"!=typeof a.UNSAFE_componentWillUpdate&&"function"!=typeof a.componentWillUpdate||("function"==typeof a.componentWillUpdate&&a.componentWillUpdate(r,h,c),"function"==typeof a.UNSAFE_componentWillUpdate&&a.UNSAFE_componentWillUpdate(r,h,c)),"function"==typeof a.componentDidUpdate&&(t.flags|=4),"function"==typeof a.getSnapshotBeforeUpdate&&(t.flags|=256)):("function"!=typeof a.componentDidUpdate||u===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof a.getSnapshotBeforeUpdate||u===e.memoizedProps&&p===e.memoizedState||(t.flags|=256),t.memoizedProps=r,t.memoizedState=h),a.props=r,a.state=h,a.context=c,r=s):("function"!=typeof a.componentDidUpdate||u===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof a.getSnapshotBeforeUpdate||u===e.memoizedProps&&p===e.memoizedState||(t.flags|=256),r=!1)}return za(e,t,n,r,i,o)}function za(e,t,n,r,o,i){Ba(e,t);var a=0!=(64&t.flags);if(!r&&!a)return o&&wo(t,n,!1),nu(e,t,i);r=t.stateNode,Aa.current=t;var u=a&&"function"!=typeof n.getDerivedStateFromError?null:r.render();return t.flags|=1,null!==e&&a?(t.child=xi(t,e.child,null,i),t.child=xi(t,null,u,i)):La(e,t,u,i),t.memoizedState=r.state,o&&wo(t,n,!0),t.child}function Ga(e){var t=e.stateNode;t.pendingContext?vo(0,t.pendingContext,t.pendingContext!==t.context):t.context&&vo(0,t.context,!1),Ri(e,t.containerInfo)}var Wa,Va,Ya,Za={dehydrated:null,retryLane:0};function $a(e,t,n){var r,o=t.pendingProps,i=Li.current,a=!1;return(r=0!=(64&t.flags))||(r=(null===e||null!==e.memoizedState)&&0!=(2&i)),r?(a=!0,t.flags&=-65):null!==e&&null===e.memoizedState||void 0===o.fallback||!0===o.unstable_avoidThisFallback||(i|=1),co(Li,1&i),null===e?(void 0!==o.fallback&&qi(t),e=o.children,i=o.fallback,a?(e=Ka(t,e,i,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Za,e):"number"==typeof o.unstable_expectedLoadTime?(e=Ka(t,e,i,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Za,t.lanes=33554432,e):((n=Wc({mode:"visible",children:e},t.mode,n,null)).return=t,t.child=n)):(e.memoizedState,a?(o=Xa(e,t,o.children,o.fallback,n),a=t.child,i=e.child.memoizedState,a.memoizedState=null===i?{baseLanes:n}:{baseLanes:i.baseLanes|n},a.childLanes=e.childLanes&~n,t.memoizedState=Za,o):(n=Qa(e,t,o.children,n),t.memoizedState=null,n))}function Ka(e,t,n,r){var o=e.mode,i=e.child;return t={mode:"hidden",children:t},0==(2&o)&&null!==i?(i.childLanes=0,i.pendingProps=t):i=Wc(t,o,0,null),n=Gc(n,o,r,null),i.return=e,n.return=e,i.sibling=n,e.child=i,n}function Qa(e,t,n,r){var o=e.child;return e=o.sibling,n=qc(o,{mode:"visible",children:n}),0==(2&t.mode)&&(n.lanes=r),n.return=t,n.sibling=null,null!==e&&(e.nextEffect=null,e.flags=8,t.firstEffect=t.lastEffect=e),t.child=n}function Xa(e,t,n,r,o){var i=t.mode,a=e.child;e=a.sibling;var u={mode:"hidden",children:n};return 0==(2&i)&&t.child!==a?((n=t.child).childLanes=0,n.pendingProps=u,null!==(a=n.lastEffect)?(t.firstEffect=n.firstEffect,t.lastEffect=a,a.nextEffect=null):t.firstEffect=t.lastEffect=null):n=qc(a,u),null!==e?r=qc(e,r):(r=Gc(r,i,o,null)).flags|=2,r.return=t,n.return=t,n.sibling=r,t.child=n,r}function Ja(e,t){e.lanes|=t;var n=e.alternate;null!==n&&(n.lanes|=t),ni(e.return,t)}function eu(e,t,n,r,o,i){var a=e.memoizedState;null===a?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:o,lastEffect:i}:(a.isBackwards=t,a.rendering=null,a.renderingStartTime=0,a.last=r,a.tail=n,a.tailMode=o,a.lastEffect=i)}function tu(e,t,n){var r=t.pendingProps,o=r.revealOrder,i=r.tail;if(La(e,t,r.children,n),0!=(2&(r=Li.current)))r=1&r|2,t.flags|=64;else{if(null!==e&&0!=(64&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&Ja(e,n);else if(19===e.tag)Ja(e,n);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(co(Li,r),0==(2&t.mode))t.memoizedState=null;else switch(o){case"forwards":for(n=t.child,o=null;null!==n;)null!==(e=n.alternate)&&null===Di(e)&&(o=n),n=n.sibling;null===(n=o)?(o=t.child,t.child=null):(o=n.sibling,n.sibling=null),eu(t,!1,o,n,i,t.lastEffect);break;case"backwards":for(n=null,o=t.child,t.child=null;null!==o;){if(null!==(e=o.alternate)&&null===Di(e)){t.child=o;break}e=o.sibling,o.sibling=n,n=o,o=e}eu(t,!0,n,null,i,t.lastEffect);break;case"together":eu(t,!1,null,null,void 0,t.lastEffect);break;default:t.memoizedState=null}return t.child}function nu(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),Mu|=t.lanes,0!=(n&t.childLanes)){if(null!==e&&t.child!==e.child)throw Error(a(153));if(null!==t.child){for(n=qc(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=qc(e,e.pendingProps)).return=t;n.sibling=null}return t.child}return null}function ru(e,t){if(!Ui)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function ou(e,t,n){var r=t.pendingProps;switch(t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return null;case 1:return yo(t.type)&&mo(),null;case 3:return Ci(),uo(fo),uo(lo),Yi(),(r=t.stateNode).pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),null!==e&&null!==e.child||(Gi(t)?t.flags|=4:r.hydrate||(t.flags|=256)),null;case 5:Ni(t);var i=Ti(Ii.current);if(n=t.type,null!==e&&null!=t.stateNode)Va(e,t,n,r),e.ref!==t.ref&&(t.flags|=128);else{if(!r){if(null===t.stateNode)throw Error(a(166));return null}if(e=Ti(Pi.current),Gi(t)){r=t.stateNode,n=t.type;var u=t.memoizedProps;switch(r[$r]=t,r[Kr]=u,n){case"dialog":Pr("cancel",r),Pr("close",r);break;case"iframe":case"object":case"embed":Pr("load",r);break;case"video":case"audio":for(e=0;e<_r.length;e++)Pr(_r[e],r);break;case"source":Pr("error",r);break;case"img":case"image":case"link":Pr("error",r),Pr("load",r);break;case"details":Pr("toggle",r);break;case"input":ee(r,u),Pr("invalid",r);break;case"select":r._wrapperState={wasMultiple:!!u.multiple},Pr("invalid",r);break;case"textarea":ce(r,u),Pr("invalid",r)}for(var s in xe(n,u),e=null,u)u.hasOwnProperty(s)&&(i=u[s],"children"===s?"string"==typeof i?r.textContent!==i&&(e=["children",i]):"number"==typeof i&&r.textContent!==""+i&&(e=["children",""+i]):c.hasOwnProperty(s)&&null!=i&&"onScroll"===s&&Pr("scroll",r));switch(n){case"input":K(r),re(r,u,!0);break;case"textarea":K(r),le(r);break;case"select":case"option":break;default:"function"==typeof u.onClick&&(r.onclick=Mr)}r=e,t.updateQueue=r,null!==r&&(t.flags|=4)}else{switch(s=9===i.nodeType?i:i.ownerDocument,e===fe&&(e=de(n)),e===fe?"script"===n?((e=s.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof r.is?e=s.createElement(n,{is:r.is}):(e=s.createElement(n),"select"===n&&(s=e,r.multiple?s.multiple=!0:r.size&&(s.size=r.size))):e=s.createElementNS(e,n),e[$r]=t,e[Kr]=r,Wa(e,t),t.stateNode=e,s=Se(n,r),n){case"dialog":Pr("cancel",e),Pr("close",e),i=r;break;case"iframe":case"object":case"embed":Pr("load",e),i=r;break;case"video":case"audio":for(i=0;i<_r.length;i++)Pr(_r[i],e);i=r;break;case"source":Pr("error",e),i=r;break;case"img":case"image":case"link":Pr("error",e),Pr("load",e),i=r;break;case"details":Pr("toggle",e),i=r;break;case"input":ee(e,r),i=J(e,r),Pr("invalid",e);break;case"option":i=ie(e,r);break;case"select":e._wrapperState={wasMultiple:!!r.multiple},i=o({},r,{value:void 0}),Pr("invalid",e);break;case"textarea":ce(e,r),i=ue(e,r),Pr("invalid",e);break;default:i=r}xe(n,i);var l=i;for(u in l)if(l.hasOwnProperty(u)){var f=l[u];"style"===u?Ee(e,f):"dangerouslySetInnerHTML"===u?null!=(f=f?f.__html:void 0)&&ve(e,f):"children"===u?"string"==typeof f?("textarea"!==n||""!==f)&&ge(e,f):"number"==typeof f&&ge(e,""+f):"suppressContentEditableWarning"!==u&&"suppressHydrationWarning"!==u&&"autoFocus"!==u&&(c.hasOwnProperty(u)?null!=f&&"onScroll"===u&&Pr("scroll",e):null!=f&&w(e,u,f,s))}switch(n){case"input":K(e),re(e,r,!1);break;case"textarea":K(e),le(e);break;case"option":null!=r.value&&e.setAttribute("value",""+Z(r.value));break;case"select":e.multiple=!!r.multiple,null!=(u=r.value)?ae(e,!!r.multiple,u,!1):null!=r.defaultValue&&ae(e,!!r.multiple,r.defaultValue,!0);break;default:"function"==typeof i.onClick&&(e.onclick=Mr)}Br(n,r)&&(t.flags|=4)}null!==t.ref&&(t.flags|=128)}return null;case 6:if(e&&null!=t.stateNode)Ya(0,t,e.memoizedProps,r);else{if("string"!=typeof r&&null===t.stateNode)throw Error(a(166));n=Ti(Ii.current),Ti(Pi.current),Gi(t)?(r=t.stateNode,n=t.memoizedProps,r[$r]=t,r.nodeValue!==n&&(t.flags|=4)):((r=(9===n.nodeType?n:n.ownerDocument).createTextNode(r))[$r]=t,t.stateNode=r)}return null;case 13:return uo(Li),r=t.memoizedState,0!=(64&t.flags)?(t.lanes=n,t):(r=null!==r,n=!1,null===e?void 0!==t.memoizedProps.fallback&&Gi(t):n=null!==e.memoizedState,r&&!n&&0!=(2&t.mode)&&(null===e&&!0!==t.memoizedProps.unstable_avoidThisFallback||0!=(1&Li.current)?0===Nu&&(Nu=3):(0!==Nu&&3!==Nu||(Nu=4),null===Iu||0==(134217727&Mu)&&0==(134217727&Fu)||hc(Iu,Ru))),(r||n)&&(t.flags|=4),null);case 4:return Ci(),null===e&&Ir(t.stateNode.containerInfo),null;case 10:return ti(t),null;case 17:return yo(t.type)&&mo(),null;case 19:if(uo(Li),null===(r=t.memoizedState))return null;if(u=0!=(64&t.flags),null===(s=r.rendering))if(u)ru(r,!1);else{if(0!==Nu||null!==e&&0!=(64&e.flags))for(e=t.child;null!==e;){if(null!==(s=Di(e))){for(t.flags|=64,ru(r,!1),null!==(u=s.updateQueue)&&(t.updateQueue=u,t.flags|=4),null===r.lastEffect&&(t.firstEffect=null),t.lastEffect=r.lastEffect,r=n,n=t.child;null!==n;)e=r,(u=n).flags&=2,u.nextEffect=null,u.firstEffect=null,u.lastEffect=null,null===(s=u.alternate)?(u.childLanes=0,u.lanes=e,u.child=null,u.memoizedProps=null,u.memoizedState=null,u.updateQueue=null,u.dependencies=null,u.stateNode=null):(u.childLanes=s.childLanes,u.lanes=s.lanes,u.child=s.child,u.memoizedProps=s.memoizedProps,u.memoizedState=s.memoizedState,u.updateQueue=s.updateQueue,u.type=s.type,e=s.dependencies,u.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return co(Li,1&Li.current|2),t.child}e=e.sibling}null!==r.tail&&Ho()>qu&&(t.flags|=64,u=!0,ru(r,!1),t.lanes=33554432)}else{if(!u)if(null!==(e=Di(s))){if(t.flags|=64,u=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.flags|=4),ru(r,!0),null===r.tail&&"hidden"===r.tailMode&&!s.alternate&&!Ui)return null!==(t=t.lastEffect=r.lastEffect)&&(t.nextEffect=null),null}else 2*Ho()-r.renderingStartTime>qu&&1073741824!==n&&(t.flags|=64,u=!0,ru(r,!1),t.lanes=33554432);r.isBackwards?(s.sibling=t.child,t.child=s):(null!==(n=r.last)?n.sibling=s:t.child=s,r.last=s)}return null!==r.tail?(n=r.tail,r.rendering=n,r.tail=n.sibling,r.lastEffect=t.lastEffect,r.renderingStartTime=Ho(),n.sibling=null,t=Li.current,co(Li,u?1&t|2:1&t),n):null;case 23:case 24:return bc(),null!==e&&null!==e.memoizedState!=(null!==t.memoizedState)&&"unstable-defer-without-hiding"!==r.mode&&(t.flags|=4),null}throw Error(a(156,t.tag))}function iu(e){switch(e.tag){case 1:yo(e.type)&&mo();var t=e.flags;return 4096&t?(e.flags=-4097&t|64,e):null;case 3:if(Ci(),uo(fo),uo(lo),Yi(),0!=(64&(t=e.flags)))throw Error(a(285));return e.flags=-4097&t|64,e;case 5:return Ni(e),null;case 13:return uo(Li),4096&(t=e.flags)?(e.flags=-4097&t|64,e):null;case 19:return uo(Li),null;case 4:return Ci(),null;case 10:return ti(e),null;case 23:case 24:return bc(),null;default:return null}}function au(e,t){try{var n="",r=t;do{n+=V(r),r=r.return}while(r);var o=n}catch(e){o="\nError generating stack: "+e.message+"\n"+e.stack}return{value:e,source:t,stack:o}}Wa=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},Va=function(e,t,n,r){var i=e.memoizedProps;if(i!==r){e=t.stateNode,Ti(Pi.current);var a,u=null;switch(n){case"input":i=J(e,i),r=J(e,r),u=[];break;case"option":i=ie(e,i),r=ie(e,r),u=[];break;case"select":i=o({},i,{value:void 0}),r=o({},r,{value:void 0}),u=[];break;case"textarea":i=ue(e,i),r=ue(e,r),u=[];break;default:"function"!=typeof i.onClick&&"function"==typeof r.onClick&&(e.onclick=Mr)}for(f in xe(n,r),n=null,i)if(!r.hasOwnProperty(f)&&i.hasOwnProperty(f)&&null!=i[f])if("style"===f){var s=i[f];for(a in s)s.hasOwnProperty(a)&&(n||(n={}),n[a]="")}else"dangerouslySetInnerHTML"!==f&&"children"!==f&&"suppressContentEditableWarning"!==f&&"suppressHydrationWarning"!==f&&"autoFocus"!==f&&(c.hasOwnProperty(f)?u||(u=[]):(u=u||[]).push(f,null));for(f in r){var l=r[f];if(s=null!=i?i[f]:void 0,r.hasOwnProperty(f)&&l!==s&&(null!=l||null!=s))if("style"===f)if(s){for(a in s)!s.hasOwnProperty(a)||l&&l.hasOwnProperty(a)||(n||(n={}),n[a]="");for(a in l)l.hasOwnProperty(a)&&s[a]!==l[a]&&(n||(n={}),n[a]=l[a])}else n||(u||(u=[]),u.push(f,n)),n=l;else"dangerouslySetInnerHTML"===f?(l=l?l.__html:void 0,s=s?s.__html:void 0,null!=l&&s!==l&&(u=u||[]).push(f,l)):"children"===f?"string"!=typeof l&&"number"!=typeof l||(u=u||[]).push(f,""+l):"suppressContentEditableWarning"!==f&&"suppressHydrationWarning"!==f&&(c.hasOwnProperty(f)?(null!=l&&"onScroll"===f&&Pr("scroll",e),u||s===l||(u=[])):"object"==typeof l&&null!==l&&l.$$typeof===L?l.toString():(u=u||[]).push(f,l))}n&&(u=u||[]).push("style",n);var f=u;(t.updateQueue=f)&&(t.flags|=4)}},Ya=function(e,t,n,r){n!==r&&(t.flags|=4)};var uu="function"==typeof WeakMap?WeakMap:Map;function cu(e,t,n){(n=ci(-1,n)).tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){Vu||(Vu=!0,Yu=r)},n}function su(e,t,n){(n=ci(-1,n)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var o=t.value;n.payload=function(){return r(o)}}var i=e.stateNode;return null!==i&&"function"==typeof i.componentDidCatch&&(n.callback=function(){"function"!=typeof r&&(null===Zu?Zu=new Set([this]):Zu.add(this));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:""})}),n}var lu="function"==typeof WeakSet?WeakSet:Set;function fu(e){var t=e.ref;if(null!==t)if("function"==typeof t)try{t(null)}catch(t){Dc(e,t)}else t.current=null}function pu(e,t){switch(t.tag){case 0:case 11:case 15:case 22:return;case 1:if(256&t.flags&&null!==e){var n=e.memoizedProps,r=e.memoizedState;t=(e=t.stateNode).getSnapshotBeforeUpdate(t.elementType===t.type?n:$o(t.type,n),r),e.__reactInternalSnapshotBeforeUpdate=t}return;case 3:return void(256&t.flags&&Gr(t.stateNode.containerInfo));case 5:case 6:case 4:case 17:return}throw Error(a(163))}function du(e,t,n){switch(n.tag){case 0:case 11:case 15:case 22:if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{if(3==(3&e.tag)){var r=e.create;e.destroy=r()}e=e.next}while(e!==t)}if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{var o=e;r=o.next,0!=(4&(o=o.tag))&&0!=(1&o)&&(Ac(n,e),Cc(n,e)),e=r}while(e!==t)}return;case 1:return e=n.stateNode,4&n.flags&&(null===t?e.componentDidMount():(r=n.elementType===n.type?t.memoizedProps:$o(n.type,t.memoizedProps),e.componentDidUpdate(r,t.memoizedState,e.__reactInternalSnapshotBeforeUpdate))),void(null!==(t=n.updateQueue)&&pi(n,t,e));case 3:if(null!==(t=n.updateQueue)){if(e=null,null!==n.child)switch(n.child.tag){case 5:e=n.child.stateNode;break;case 1:e=n.child.stateNode}pi(n,t,e)}return;case 5:return e=n.stateNode,void(null===t&&4&n.flags&&Br(n.type,n.memoizedProps)&&e.focus());case 6:case 4:case 12:return;case 13:return void(null===n.memoizedState&&(n=n.alternate,null!==n&&(n=n.memoizedState,null!==n&&(n=n.dehydrated,null!==n&&Et(n)))));case 19:case 17:case 20:case 21:case 23:case 24:return}throw Error(a(163))}function hu(e,t){for(var n=e;;){if(5===n.tag){var r=n.stateNode;if(t)"function"==typeof(r=r.style).setProperty?r.setProperty("display","none","important"):r.display="none";else{r=n.stateNode;var o=n.memoizedProps.style;o=null!=o&&o.hasOwnProperty("display")?o.display:null,r.style.display=Oe("display",o)}}else if(6===n.tag)n.stateNode.nodeValue=t?"":n.memoizedProps;else if((23!==n.tag&&24!==n.tag||null===n.memoizedState||n===e)&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===e)break;for(;null===n.sibling;){if(null===n.return||n.return===e)return;n=n.return}n.sibling.return=n.return,n=n.sibling}}function yu(e,t){if(Eo&&"function"==typeof Eo.onCommitFiberUnmount)try{Eo.onCommitFiberUnmount(Oo,t)}catch(e){}switch(t.tag){case 0:case 11:case 14:case 15:case 22:if(null!==(e=t.updateQueue)&&null!==(e=e.lastEffect)){var n=e=e.next;do{var r=n,o=r.destroy;if(r=r.tag,void 0!==o)if(0!=(4&r))Ac(t,n);else{r=t;try{o()}catch(e){Dc(r,e)}}n=n.next}while(n!==e)}break;case 1:if(fu(t),"function"==typeof(e=t.stateNode).componentWillUnmount)try{e.props=t.memoizedProps,e.state=t.memoizedState,e.componentWillUnmount()}catch(e){Dc(t,e)}break;case 5:fu(t);break;case 4:Ou(e,t)}}function mu(e){e.alternate=null,e.child=null,e.dependencies=null,e.firstEffect=null,e.lastEffect=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.return=null,e.updateQueue=null}function vu(e){return 5===e.tag||3===e.tag||4===e.tag}function gu(e){e:{for(var t=e.return;null!==t;){if(vu(t))break e;t=t.return}throw Error(a(160))}var n=t;switch(t=n.stateNode,n.tag){case 5:var r=!1;break;case 3:case 4:t=t.containerInfo,r=!0;break;default:throw Error(a(161))}16&n.flags&&(ge(t,""),n.flags&=-17);e:t:for(n=e;;){for(;null===n.sibling;){if(null===n.return||vu(n.return)){n=null;break e}n=n.return}for(n.sibling.return=n.return,n=n.sibling;5!==n.tag&&6!==n.tag&&18!==n.tag;){if(2&n.flags)continue t;if(null===n.child||4===n.tag)continue t;n.child.return=n,n=n.child}if(!(2&n.flags)){n=n.stateNode;break e}}r?bu(e,n,t):wu(e,n,t)}function bu(e,t,n){var r=e.tag,o=5===r||6===r;if(o)e=o?e.stateNode:e.stateNode.instance,t?8===n.nodeType?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(8===n.nodeType?(t=n.parentNode).insertBefore(e,n):(t=n).appendChild(e),null!=(n=n._reactRootContainer)||null!==t.onclick||(t.onclick=Mr));else if(4!==r&&null!==(e=e.child))for(bu(e,t,n),e=e.sibling;null!==e;)bu(e,t,n),e=e.sibling}function wu(e,t,n){var r=e.tag,o=5===r||6===r;if(o)e=o?e.stateNode:e.stateNode.instance,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==r&&null!==(e=e.child))for(wu(e,t,n),e=e.sibling;null!==e;)wu(e,t,n),e=e.sibling}function Ou(e,t){for(var n,r,o=t,i=!1;;){if(!i){i=o.return;e:for(;;){if(null===i)throw Error(a(160));switch(n=i.stateNode,i.tag){case 5:r=!1;break e;case 3:case 4:n=n.containerInfo,r=!0;break e}i=i.return}i=!0}if(5===o.tag||6===o.tag){e:for(var u=e,c=o,s=c;;)if(yu(u,s),null!==s.child&&4!==s.tag)s.child.return=s,s=s.child;else{if(s===c)break e;for(;null===s.sibling;){if(null===s.return||s.return===c)break e;s=s.return}s.sibling.return=s.return,s=s.sibling}r?(u=n,c=o.stateNode,8===u.nodeType?u.parentNode.removeChild(c):u.removeChild(c)):n.removeChild(o.stateNode)}else if(4===o.tag){if(null!==o.child){n=o.stateNode.containerInfo,r=!0,o.child.return=o,o=o.child;continue}}else if(yu(e,o),null!==o.child){o.child.return=o,o=o.child;continue}if(o===t)break;for(;null===o.sibling;){if(null===o.return||o.return===t)return;4===(o=o.return).tag&&(i=!1)}o.sibling.return=o.return,o=o.sibling}}function Eu(e,t){switch(t.tag){case 0:case 11:case 14:case 15:case 22:var n=t.updateQueue;if(null!==(n=null!==n?n.lastEffect:null)){var r=n=n.next;do{3==(3&r.tag)&&(e=r.destroy,r.destroy=void 0,void 0!==e&&e()),r=r.next}while(r!==n)}return;case 1:return;case 5:if(null!=(n=t.stateNode)){r=t.memoizedProps;var o=null!==e?e.memoizedProps:r;e=t.type;var i=t.updateQueue;if(t.updateQueue=null,null!==i){for(n[Kr]=r,"input"===e&&"radio"===r.type&&null!=r.name&&te(n,r),Se(e,o),t=Se(e,r),o=0;o<i.length;o+=2){var u=i[o],c=i[o+1];"style"===u?Ee(n,c):"dangerouslySetInnerHTML"===u?ve(n,c):"children"===u?ge(n,c):w(n,u,c,t)}switch(e){case"input":ne(n,r);break;case"textarea":se(n,r);break;case"select":e=n._wrapperState.wasMultiple,n._wrapperState.wasMultiple=!!r.multiple,null!=(i=r.value)?ae(n,!!r.multiple,i,!1):e!==!!r.multiple&&(null!=r.defaultValue?ae(n,!!r.multiple,r.defaultValue,!0):ae(n,!!r.multiple,r.multiple?[]:"",!1))}}}return;case 6:if(null===t.stateNode)throw Error(a(162));return void(t.stateNode.nodeValue=t.memoizedProps);case 3:return void((n=t.stateNode).hydrate&&(n.hydrate=!1,Et(n.containerInfo)));case 12:return;case 13:return null!==t.memoizedState&&(Hu=Ho(),hu(t.child,!0)),void _u(t);case 19:return void _u(t);case 17:return;case 23:case 24:return void hu(t,null!==t.memoizedState)}throw Error(a(163))}function _u(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new lu),t.forEach((function(t){var r=Fc.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}}function xu(e,t){return null!==e&&(null===(e=e.memoizedState)||null!==e.dehydrated)&&(null!==(t=t.memoizedState)&&null===t.dehydrated)}var Su=Math.ceil,ju=O.ReactCurrentDispatcher,Pu=O.ReactCurrentOwner,ku=0,Iu=null,Tu=null,Ru=0,Cu=0,Au=ao(0),Nu=0,Lu=null,Du=0,Mu=0,Fu=0,Uu=0,Bu=null,Hu=0,qu=1/0;function zu(){qu=Ho()+500}var Gu,Wu=null,Vu=!1,Yu=null,Zu=null,$u=!1,Ku=null,Qu=90,Xu=[],Ju=[],ec=null,tc=0,nc=null,rc=-1,oc=0,ic=0,ac=null,uc=!1;function cc(){return 0!=(48&ku)?Ho():-1!==rc?rc:rc=Ho()}function sc(e){if(0==(2&(e=e.mode)))return 1;if(0==(4&e))return 99===qo()?1:2;if(0===oc&&(oc=Du),0!==Zo.transition){0!==ic&&(ic=null!==Bu?Bu.pendingLanes:0),e=oc;var t=4186112&~ic;return 0===(t&=-t)&&(0===(t=(e=4186112&~e)&-e)&&(t=8192)),t}return e=qo(),0!=(4&ku)&&98===e?e=Bt(12,oc):e=Bt(e=function(e){switch(e){case 99:return 15;case 98:return 10;case 97:case 96:return 8;case 95:return 2;default:return 0}}(e),oc),e}function lc(e,t,n){if(50<tc)throw tc=0,nc=null,Error(a(185));if(null===(e=fc(e,t)))return null;zt(e,t,n),e===Iu&&(Fu|=t,4===Nu&&hc(e,Ru));var r=qo();1===t?0!=(8&ku)&&0==(48&ku)?yc(e):(pc(e,n),0===ku&&(zu(),Vo())):(0==(4&ku)||98!==r&&99!==r||(null===ec?ec=new Set([e]):ec.add(e)),pc(e,n)),Bu=e}function fc(e,t){e.lanes|=t;var n=e.alternate;for(null!==n&&(n.lanes|=t),n=e,e=e.return;null!==e;)e.childLanes|=t,null!==(n=e.alternate)&&(n.childLanes|=t),n=e,e=e.return;return 3===n.tag?n.stateNode:null}function pc(e,t){for(var n=e.callbackNode,r=e.suspendedLanes,o=e.pingedLanes,i=e.expirationTimes,u=e.pendingLanes;0<u;){var c=31-Gt(u),s=1<<c,l=i[c];if(-1===l){if(0==(s&r)||0!=(s&o)){l=t,Mt(s);var f=Dt;i[c]=10<=f?l+250:6<=f?l+5e3:-1}}else l<=t&&(e.expiredLanes|=s);u&=~s}if(r=Ft(e,e===Iu?Ru:0),t=Dt,0===r)null!==n&&(n!==Lo&&So(n),e.callbackNode=null,e.callbackPriority=0);else{if(null!==n){if(e.callbackPriority===t)return;n!==Lo&&So(n)}15===t?(n=yc.bind(null,e),null===Mo?(Mo=[n],Fo=xo(To,Yo)):Mo.push(n),n=Lo):14===t?n=Wo(99,yc.bind(null,e)):n=Wo(n=function(e){switch(e){case 15:case 14:return 99;case 13:case 12:case 11:case 10:return 98;case 9:case 8:case 7:case 6:case 4:case 5:return 97;case 3:case 2:case 1:return 95;case 0:return 90;default:throw Error(a(358,e))}}(t),dc.bind(null,e)),e.callbackPriority=t,e.callbackNode=n}}function dc(e){if(rc=-1,ic=oc=0,0!=(48&ku))throw Error(a(327));var t=e.callbackNode;if(Rc()&&e.callbackNode!==t)return null;var n=Ft(e,e===Iu?Ru:0);if(0===n)return null;var r=n,o=ku;ku|=16;var i=Ec();for(Iu===e&&Ru===r||(zu(),wc(e,r));;)try{Sc();break}catch(t){Oc(e,t)}if(ei(),ju.current=i,ku=o,null!==Tu?r=0:(Iu=null,Ru=0,r=Nu),0!=(Du&Fu))wc(e,0);else if(0!==r){if(2===r&&(ku|=64,e.hydrate&&(e.hydrate=!1,Gr(e.containerInfo)),0!==(n=Ut(e))&&(r=_c(e,n))),1===r)throw t=Lu,wc(e,0),hc(e,n),pc(e,Ho()),t;switch(e.finishedWork=e.current.alternate,e.finishedLanes=n,r){case 0:case 1:throw Error(a(345));case 2:kc(e);break;case 3:if(hc(e,n),(62914560&n)===n&&10<(r=Hu+500-Ho())){if(0!==Ft(e,0))break;if(((o=e.suspendedLanes)&n)!==n){cc(),e.pingedLanes|=e.suspendedLanes&o;break}e.timeoutHandle=qr(kc.bind(null,e),r);break}kc(e);break;case 4:if(hc(e,n),(4186112&n)===n)break;for(r=e.eventTimes,o=-1;0<n;){var u=31-Gt(n);i=1<<u,(u=r[u])>o&&(o=u),n&=~i}if(n=o,10<(n=(120>(n=Ho()-n)?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*Su(n/1960))-n)){e.timeoutHandle=qr(kc.bind(null,e),n);break}kc(e);break;case 5:kc(e);break;default:throw Error(a(329))}}return pc(e,Ho()),e.callbackNode===t?dc.bind(null,e):null}function hc(e,t){for(t&=~Uu,t&=~Fu,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-Gt(t),r=1<<n;e[n]=-1,t&=~r}}function yc(e){if(0!=(48&ku))throw Error(a(327));if(Rc(),e===Iu&&0!=(e.expiredLanes&Ru)){var t=Ru,n=_c(e,t);0!=(Du&Fu)&&(n=_c(e,t=Ft(e,t)))}else n=_c(e,t=Ft(e,0));if(0!==e.tag&&2===n&&(ku|=64,e.hydrate&&(e.hydrate=!1,Gr(e.containerInfo)),0!==(t=Ut(e))&&(n=_c(e,t))),1===n)throw n=Lu,wc(e,0),hc(e,t),pc(e,Ho()),n;return e.finishedWork=e.current.alternate,e.finishedLanes=t,kc(e),pc(e,Ho()),null}function mc(e,t){var n=ku;ku|=1;try{return e(t)}finally{0===(ku=n)&&(zu(),Vo())}}function vc(e,t){var n=ku;ku&=-2,ku|=8;try{return e(t)}finally{0===(ku=n)&&(zu(),Vo())}}function gc(e,t){co(Au,Cu),Cu|=t,Du|=t}function bc(){Cu=Au.current,uo(Au)}function wc(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,zr(n)),null!==Tu)for(n=Tu.return;null!==n;){var r=n;switch(r.tag){case 1:null!=(r=r.type.childContextTypes)&&mo();break;case 3:Ci(),uo(fo),uo(lo),Yi();break;case 5:Ni(r);break;case 4:Ci();break;case 13:case 19:uo(Li);break;case 10:ti(r);break;case 23:case 24:bc()}n=n.return}Iu=e,Tu=qc(e.current,null),Ru=Cu=Du=t,Nu=0,Lu=null,Uu=Fu=Mu=0}function Oc(e,t){for(;;){var n=Tu;try{if(ei(),Zi.current=Ia,ea){for(var r=Qi.memoizedState;null!==r;){var o=r.queue;null!==o&&(o.pending=null),r=r.next}ea=!1}if(Ki=0,Ji=Xi=Qi=null,ta=!1,Pu.current=null,null===n||null===n.return){Nu=1,Lu=t,Tu=null;break}e:{var i=e,a=n.return,u=n,c=t;if(t=Ru,u.flags|=2048,u.firstEffect=u.lastEffect=null,null!==c&&"object"==typeof c&&"function"==typeof c.then){var s=c;if(0==(2&u.mode)){var l=u.alternate;l?(u.updateQueue=l.updateQueue,u.memoizedState=l.memoizedState,u.lanes=l.lanes):(u.updateQueue=null,u.memoizedState=null)}var f=0!=(1&Li.current),p=a;do{var d;if(d=13===p.tag){var h=p.memoizedState;if(null!==h)d=null!==h.dehydrated;else{var y=p.memoizedProps;d=void 0!==y.fallback&&(!0!==y.unstable_avoidThisFallback||!f)}}if(d){var m=p.updateQueue;if(null===m){var v=new Set;v.add(s),p.updateQueue=v}else m.add(s);if(0==(2&p.mode)){if(p.flags|=64,u.flags|=16384,u.flags&=-2981,1===u.tag)if(null===u.alternate)u.tag=17;else{var g=ci(-1,1);g.tag=2,si(u,g)}u.lanes|=1;break e}c=void 0,u=t;var b=i.pingCache;if(null===b?(b=i.pingCache=new uu,c=new Set,b.set(s,c)):void 0===(c=b.get(s))&&(c=new Set,b.set(s,c)),!c.has(u)){c.add(u);var w=Mc.bind(null,i,s,u);s.then(w,w)}p.flags|=4096,p.lanes=t;break e}p=p.return}while(null!==p);c=Error((Y(u.type)||"A React component")+" suspended while rendering, but no fallback UI was specified.\n\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display.")}5!==Nu&&(Nu=2),c=au(c,u),p=a;do{switch(p.tag){case 3:i=c,p.flags|=4096,t&=-t,p.lanes|=t,li(p,cu(0,i,t));break e;case 1:i=c;var O=p.type,E=p.stateNode;if(0==(64&p.flags)&&("function"==typeof O.getDerivedStateFromError||null!==E&&"function"==typeof E.componentDidCatch&&(null===Zu||!Zu.has(E)))){p.flags|=4096,t&=-t,p.lanes|=t,li(p,su(p,i,t));break e}}p=p.return}while(null!==p)}Pc(n)}catch(e){t=e,Tu===n&&null!==n&&(Tu=n=n.return);continue}break}}function Ec(){var e=ju.current;return ju.current=Ia,null===e?Ia:e}function _c(e,t){var n=ku;ku|=16;var r=Ec();for(Iu===e&&Ru===t||wc(e,t);;)try{xc();break}catch(t){Oc(e,t)}if(ei(),ku=n,ju.current=r,null!==Tu)throw Error(a(261));return Iu=null,Ru=0,Nu}function xc(){for(;null!==Tu;)jc(Tu)}function Sc(){for(;null!==Tu&&!jo();)jc(Tu)}function jc(e){var t=Gu(e.alternate,e,Cu);e.memoizedProps=e.pendingProps,null===t?Pc(e):Tu=t,Pu.current=null}function Pc(e){var t=e;do{var n=t.alternate;if(e=t.return,0==(2048&t.flags)){if(null!==(n=ou(n,t,Cu)))return void(Tu=n);if(24!==(n=t).tag&&23!==n.tag||null===n.memoizedState||0!=(1073741824&Cu)||0==(4&n.mode)){for(var r=0,o=n.child;null!==o;)r|=o.lanes|o.childLanes,o=o.sibling;n.childLanes=r}null!==e&&0==(2048&e.flags)&&(null===e.firstEffect&&(e.firstEffect=t.firstEffect),null!==t.lastEffect&&(null!==e.lastEffect&&(e.lastEffect.nextEffect=t.firstEffect),e.lastEffect=t.lastEffect),1<t.flags&&(null!==e.lastEffect?e.lastEffect.nextEffect=t:e.firstEffect=t,e.lastEffect=t))}else{if(null!==(n=iu(t)))return n.flags&=2047,void(Tu=n);null!==e&&(e.firstEffect=e.lastEffect=null,e.flags|=2048)}if(null!==(t=t.sibling))return void(Tu=t);Tu=t=e}while(null!==t);0===Nu&&(Nu=5)}function kc(e){var t=qo();return Go(99,Ic.bind(null,e,t)),null}function Ic(e,t){do{Rc()}while(null!==Ku);if(0!=(48&ku))throw Error(a(327));var n=e.finishedWork;if(null===n)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(a(177));e.callbackNode=null;var r=n.lanes|n.childLanes,o=r,i=e.pendingLanes&~o;e.pendingLanes=o,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=o,e.mutableReadLanes&=o,e.entangledLanes&=o,o=e.entanglements;for(var u=e.eventTimes,c=e.expirationTimes;0<i;){var s=31-Gt(i),l=1<<s;o[s]=0,u[s]=-1,c[s]=-1,i&=~l}if(null!==ec&&0==(24&r)&&ec.has(e)&&ec.delete(e),e===Iu&&(Tu=Iu=null,Ru=0),1<n.flags?null!==n.lastEffect?(n.lastEffect.nextEffect=n,r=n.firstEffect):r=n:r=n.firstEffect,null!==r){if(o=ku,ku|=32,Pu.current=null,Fr=$t,hr(u=dr())){if("selectionStart"in u)c={start:u.selectionStart,end:u.selectionEnd};else e:if(c=(c=u.ownerDocument)&&c.defaultView||window,(l=c.getSelection&&c.getSelection())&&0!==l.rangeCount){c=l.anchorNode,i=l.anchorOffset,s=l.focusNode,l=l.focusOffset;try{c.nodeType,s.nodeType}catch(e){c=null;break e}var f=0,p=-1,d=-1,h=0,y=0,m=u,v=null;t:for(;;){for(var g;m!==c||0!==i&&3!==m.nodeType||(p=f+i),m!==s||0!==l&&3!==m.nodeType||(d=f+l),3===m.nodeType&&(f+=m.nodeValue.length),null!==(g=m.firstChild);)v=m,m=g;for(;;){if(m===u)break t;if(v===c&&++h===i&&(p=f),v===s&&++y===l&&(d=f),null!==(g=m.nextSibling))break;v=(m=v).parentNode}m=g}c=-1===p||-1===d?null:{start:p,end:d}}else c=null;c=c||{start:0,end:0}}else c=null;Ur={focusedElem:u,selectionRange:c},$t=!1,ac=null,uc=!1,Wu=r;do{try{Tc()}catch(e){if(null===Wu)throw Error(a(330));Dc(Wu,e),Wu=Wu.nextEffect}}while(null!==Wu);ac=null,Wu=r;do{try{for(u=e;null!==Wu;){var b=Wu.flags;if(16&b&&ge(Wu.stateNode,""),128&b){var w=Wu.alternate;if(null!==w){var O=w.ref;null!==O&&("function"==typeof O?O(null):O.current=null)}}switch(1038&b){case 2:gu(Wu),Wu.flags&=-3;break;case 6:gu(Wu),Wu.flags&=-3,Eu(Wu.alternate,Wu);break;case 1024:Wu.flags&=-1025;break;case 1028:Wu.flags&=-1025,Eu(Wu.alternate,Wu);break;case 4:Eu(Wu.alternate,Wu);break;case 8:Ou(u,c=Wu);var E=c.alternate;mu(c),null!==E&&mu(E)}Wu=Wu.nextEffect}}catch(e){if(null===Wu)throw Error(a(330));Dc(Wu,e),Wu=Wu.nextEffect}}while(null!==Wu);if(O=Ur,w=dr(),b=O.focusedElem,u=O.selectionRange,w!==b&&b&&b.ownerDocument&&pr(b.ownerDocument.documentElement,b)){null!==u&&hr(b)&&(w=u.start,void 0===(O=u.end)&&(O=w),"selectionStart"in b?(b.selectionStart=w,b.selectionEnd=Math.min(O,b.value.length)):(O=(w=b.ownerDocument||document)&&w.defaultView||window).getSelection&&(O=O.getSelection(),c=b.textContent.length,E=Math.min(u.start,c),u=void 0===u.end?E:Math.min(u.end,c),!O.extend&&E>u&&(c=u,u=E,E=c),c=fr(b,E),i=fr(b,u),c&&i&&(1!==O.rangeCount||O.anchorNode!==c.node||O.anchorOffset!==c.offset||O.focusNode!==i.node||O.focusOffset!==i.offset)&&((w=w.createRange()).setStart(c.node,c.offset),O.removeAllRanges(),E>u?(O.addRange(w),O.extend(i.node,i.offset)):(w.setEnd(i.node,i.offset),O.addRange(w))))),w=[];for(O=b;O=O.parentNode;)1===O.nodeType&&w.push({element:O,left:O.scrollLeft,top:O.scrollTop});for("function"==typeof b.focus&&b.focus(),b=0;b<w.length;b++)(O=w[b]).element.scrollLeft=O.left,O.element.scrollTop=O.top}$t=!!Fr,Ur=Fr=null,e.current=n,Wu=r;do{try{for(b=e;null!==Wu;){var _=Wu.flags;if(36&_&&du(b,Wu.alternate,Wu),128&_){w=void 0;var x=Wu.ref;if(null!==x){var S=Wu.stateNode;switch(Wu.tag){case 5:w=S;break;default:w=S}"function"==typeof x?x(w):x.current=w}}Wu=Wu.nextEffect}}catch(e){if(null===Wu)throw Error(a(330));Dc(Wu,e),Wu=Wu.nextEffect}}while(null!==Wu);Wu=null,Do(),ku=o}else e.current=n;if($u)$u=!1,Ku=e,Qu=t;else for(Wu=r;null!==Wu;)t=Wu.nextEffect,Wu.nextEffect=null,8&Wu.flags&&((_=Wu).sibling=null,_.stateNode=null),Wu=t;if(0===(r=e.pendingLanes)&&(Zu=null),1===r?e===nc?tc++:(tc=0,nc=e):tc=0,n=n.stateNode,Eo&&"function"==typeof Eo.onCommitFiberRoot)try{Eo.onCommitFiberRoot(Oo,n,void 0,64==(64&n.current.flags))}catch(e){}if(pc(e,Ho()),Vu)throw Vu=!1,e=Yu,Yu=null,e;return 0!=(8&ku)||Vo(),null}function Tc(){for(;null!==Wu;){var e=Wu.alternate;uc||null===ac||(0!=(8&Wu.flags)?et(Wu,ac)&&(uc=!0):13===Wu.tag&&xu(e,Wu)&&et(Wu,ac)&&(uc=!0));var t=Wu.flags;0!=(256&t)&&pu(e,Wu),0==(512&t)||$u||($u=!0,Wo(97,(function(){return Rc(),null}))),Wu=Wu.nextEffect}}function Rc(){if(90!==Qu){var e=97<Qu?97:Qu;return Qu=90,Go(e,Nc)}return!1}function Cc(e,t){Xu.push(t,e),$u||($u=!0,Wo(97,(function(){return Rc(),null})))}function Ac(e,t){Ju.push(t,e),$u||($u=!0,Wo(97,(function(){return Rc(),null})))}function Nc(){if(null===Ku)return!1;var e=Ku;if(Ku=null,0!=(48&ku))throw Error(a(331));var t=ku;ku|=32;var n=Ju;Ju=[];for(var r=0;r<n.length;r+=2){var o=n[r],i=n[r+1],u=o.destroy;if(o.destroy=void 0,"function"==typeof u)try{u()}catch(e){if(null===i)throw Error(a(330));Dc(i,e)}}for(n=Xu,Xu=[],r=0;r<n.length;r+=2){o=n[r],i=n[r+1];try{var c=o.create;o.destroy=c()}catch(e){if(null===i)throw Error(a(330));Dc(i,e)}}for(c=e.current.firstEffect;null!==c;)e=c.nextEffect,c.nextEffect=null,8&c.flags&&(c.sibling=null,c.stateNode=null),c=e;return ku=t,Vo(),!0}function Lc(e,t,n){si(e,t=cu(0,t=au(n,t),1)),t=cc(),null!==(e=fc(e,1))&&(zt(e,1,t),pc(e,t))}function Dc(e,t){if(3===e.tag)Lc(e,e,t);else for(var n=e.return;null!==n;){if(3===n.tag){Lc(n,e,t);break}if(1===n.tag){var r=n.stateNode;if("function"==typeof n.type.getDerivedStateFromError||"function"==typeof r.componentDidCatch&&(null===Zu||!Zu.has(r))){var o=su(n,e=au(t,e),1);if(si(n,o),o=cc(),null!==(n=fc(n,1)))zt(n,1,o),pc(n,o);else if("function"==typeof r.componentDidCatch&&(null===Zu||!Zu.has(r)))try{r.componentDidCatch(t,e)}catch(e){}break}}n=n.return}}function Mc(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),t=cc(),e.pingedLanes|=e.suspendedLanes&n,Iu===e&&(Ru&n)===n&&(4===Nu||3===Nu&&(62914560&Ru)===Ru&&500>Ho()-Hu?wc(e,0):Uu|=n),pc(e,t)}function Fc(e,t){var n=e.stateNode;null!==n&&n.delete(t),0===(t=0)&&(0==(2&(t=e.mode))?t=1:0==(4&t)?t=99===qo()?1:2:(0===oc&&(oc=Du),0===(t=Ht(62914560&~oc))&&(t=4194304))),n=cc(),null!==(e=fc(e,t))&&(zt(e,t,n),pc(e,n))}function Uc(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.flags=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childLanes=this.lanes=0,this.alternate=null}function Bc(e,t,n,r){return new Uc(e,t,n,r)}function Hc(e){return!(!(e=e.prototype)||!e.isReactComponent)}function qc(e,t){var n=e.alternate;return null===n?((n=Bc(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.nextEffect=null,n.firstEffect=null,n.lastEffect=null),n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function zc(e,t,n,r,o,i){var u=2;if(r=e,"function"==typeof e)Hc(e)&&(u=1);else if("string"==typeof e)u=5;else e:switch(e){case x:return Gc(n.children,o,i,t);case D:u=8,o|=16;break;case S:u=8,o|=1;break;case j:return(e=Bc(12,n,t,8|o)).elementType=j,e.type=j,e.lanes=i,e;case T:return(e=Bc(13,n,t,o)).type=T,e.elementType=T,e.lanes=i,e;case R:return(e=Bc(19,n,t,o)).elementType=R,e.lanes=i,e;case M:return Wc(n,o,i,t);case F:return(e=Bc(24,n,t,o)).elementType=F,e.lanes=i,e;default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case P:u=10;break e;case k:u=9;break e;case I:u=11;break e;case C:u=14;break e;case A:u=16,r=null;break e;case N:u=22;break e}throw Error(a(130,null==e?e:typeof e,""))}return(t=Bc(u,n,t,o)).elementType=e,t.type=r,t.lanes=i,t}function Gc(e,t,n,r){return(e=Bc(7,e,r,t)).lanes=n,e}function Wc(e,t,n,r){return(e=Bc(23,e,r,t)).elementType=M,e.lanes=n,e}function Vc(e,t,n){return(e=Bc(6,e,null,t)).lanes=n,e}function Yc(e,t,n){return(t=Bc(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Zc(e,t,n){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.pendingContext=this.context=null,this.hydrate=n,this.callbackNode=null,this.callbackPriority=0,this.eventTimes=qt(0),this.expirationTimes=qt(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=qt(0),this.mutableSourceEagerHydrationData=null}function $c(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:_,key:null==r?null:""+r,children:e,containerInfo:t,implementation:n}}function Kc(e,t,n,r){var o=t.current,i=cc(),u=sc(o);e:if(n){t:{if(Ke(n=n._reactInternals)!==n||1!==n.tag)throw Error(a(170));var c=n;do{switch(c.tag){case 3:c=c.stateNode.context;break t;case 1:if(yo(c.type)){c=c.stateNode.__reactInternalMemoizedMergedChildContext;break t}}c=c.return}while(null!==c);throw Error(a(171))}if(1===n.tag){var s=n.type;if(yo(s)){n=go(n,s,c);break e}}n=c}else n=so;return null===t.context?t.context=n:t.pendingContext=n,(t=ci(i,u)).payload={element:e},null!==(r=void 0===r?null:r)&&(t.callback=r),si(o,t),lc(o,u,i),u}function Qc(e){if(!(e=e.current).child)return null;switch(e.child.tag){case 5:default:return e.child.stateNode}}function Xc(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function Jc(e,t){Xc(e,t),(e=e.alternate)&&Xc(e,t)}function es(e,t,n){var r=null!=n&&null!=n.hydrationOptions&&n.hydrationOptions.mutableSources||null;if(n=new Zc(e,t,null!=n&&!0===n.hydrate),t=Bc(3,null,null,2===t?7:1===t?3:0),n.current=t,t.stateNode=n,ai(t),e[Qr]=n.current,Ir(8===e.nodeType?e.parentNode:e),r)for(e=0;e<r.length;e++){var o=(t=r[e])._getVersion;o=o(t._source),null==n.mutableSourceEagerHydrationData?n.mutableSourceEagerHydrationData=[t,o]:n.mutableSourceEagerHydrationData.push(t,o)}this._internalRoot=n}function ts(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function ns(e,t,n,r,o){var i=n._reactRootContainer;if(i){var a=i._internalRoot;if("function"==typeof o){var u=o;o=function(){var e=Qc(a);u.call(e)}}Kc(t,a,e,o)}else{if(i=n._reactRootContainer=function(e,t){if(t||(t=!(!(t=e?9===e.nodeType?e.documentElement:e.firstChild:null)||1!==t.nodeType||!t.hasAttribute("data-reactroot"))),!t)for(var n;n=e.lastChild;)e.removeChild(n);return new es(e,0,t?{hydrate:!0}:void 0)}(n,r),a=i._internalRoot,"function"==typeof o){var c=o;o=function(){var e=Qc(a);c.call(e)}}vc((function(){Kc(t,a,e,o)}))}return Qc(a)}function rs(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!ts(t))throw Error(a(200));return $c(e,t,null,n)}Gu=function(e,t,n){var r=t.lanes;if(null!==e)if(e.memoizedProps!==t.pendingProps||fo.current)Na=!0;else{if(0==(n&r)){switch(Na=!1,t.tag){case 3:Ga(t),Wi();break;case 5:Ai(t);break;case 1:yo(t.type)&&bo(t);break;case 4:Ri(t,t.stateNode.containerInfo);break;case 10:r=t.memoizedProps.value;var o=t.type._context;co(Ko,o._currentValue),o._currentValue=r;break;case 13:if(null!==t.memoizedState)return 0!=(n&t.child.childLanes)?$a(e,t,n):(co(Li,1&Li.current),null!==(t=nu(e,t,n))?t.sibling:null);co(Li,1&Li.current);break;case 19:if(r=0!=(n&t.childLanes),0!=(64&e.flags)){if(r)return tu(e,t,n);t.flags|=64}if(null!==(o=t.memoizedState)&&(o.rendering=null,o.tail=null,o.lastEffect=null),co(Li,Li.current),r)break;return null;case 23:case 24:return t.lanes=0,Ua(e,t,n)}return nu(e,t,n)}Na=0!=(16384&e.flags)}else Na=!1;switch(t.lanes=0,t.tag){case 2:if(r=t.type,null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,o=ho(t,lo.current),ri(t,n),o=oa(null,t,r,e,o,n),t.flags|=1,"object"==typeof o&&null!==o&&"function"==typeof o.render&&void 0===o.$$typeof){if(t.tag=1,t.memoizedState=null,t.updateQueue=null,yo(r)){var i=!0;bo(t)}else i=!1;t.memoizedState=null!==o.state&&void 0!==o.state?o.state:null,ai(t);var u=r.getDerivedStateFromProps;"function"==typeof u&&hi(t,r,u,e),o.updater=yi,t.stateNode=o,o._reactInternals=t,bi(t,r,e,n),t=za(null,t,r,!0,i,n)}else t.tag=0,La(null,t,o,n),t=t.child;return t;case 16:o=t.elementType;e:{switch(null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,o=(i=o._init)(o._payload),t.type=o,i=t.tag=function(e){if("function"==typeof e)return Hc(e)?1:0;if(null!=e){if((e=e.$$typeof)===I)return 11;if(e===C)return 14}return 2}(o),e=$o(o,e),i){case 0:t=Ha(null,t,o,e,n);break e;case 1:t=qa(null,t,o,e,n);break e;case 11:t=Da(null,t,o,e,n);break e;case 14:t=Ma(null,t,o,$o(o.type,e),r,n);break e}throw Error(a(306,o,""))}return t;case 0:return r=t.type,o=t.pendingProps,Ha(e,t,r,o=t.elementType===r?o:$o(r,o),n);case 1:return r=t.type,o=t.pendingProps,qa(e,t,r,o=t.elementType===r?o:$o(r,o),n);case 3:if(Ga(t),r=t.updateQueue,null===e||null===r)throw Error(a(282));if(r=t.pendingProps,o=null!==(o=t.memoizedState)?o.element:null,ui(e,t),fi(t,r,null,n),(r=t.memoizedState.element)===o)Wi(),t=nu(e,t,n);else{if((i=(o=t.stateNode).hydrate)&&(Fi=Wr(t.stateNode.containerInfo.firstChild),Mi=t,i=Ui=!0),i){if(null!=(e=o.mutableSourceEagerHydrationData))for(o=0;o<e.length;o+=2)(i=e[o])._workInProgressVersionPrimary=e[o+1],Vi.push(i);for(n=Si(t,null,r,n),t.child=n;n;)n.flags=-3&n.flags|1024,n=n.sibling}else La(e,t,r,n),Wi();t=t.child}return t;case 5:return Ai(t),null===e&&qi(t),r=t.type,o=t.pendingProps,i=null!==e?e.memoizedProps:null,u=o.children,Hr(r,o)?u=null:null!==i&&Hr(r,i)&&(t.flags|=16),Ba(e,t),La(e,t,u,n),t.child;case 6:return null===e&&qi(t),null;case 13:return $a(e,t,n);case 4:return Ri(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=xi(t,null,r,n):La(e,t,r,n),t.child;case 11:return r=t.type,o=t.pendingProps,Da(e,t,r,o=t.elementType===r?o:$o(r,o),n);case 7:return La(e,t,t.pendingProps,n),t.child;case 8:case 12:return La(e,t,t.pendingProps.children,n),t.child;case 10:e:{r=t.type._context,o=t.pendingProps,u=t.memoizedProps,i=o.value;var c=t.type._context;if(co(Ko,c._currentValue),c._currentValue=i,null!==u)if(c=u.value,0===(i=ur(c,i)?0:0|("function"==typeof r._calculateChangedBits?r._calculateChangedBits(c,i):1073741823))){if(u.children===o.children&&!fo.current){t=nu(e,t,n);break e}}else for(null!==(c=t.child)&&(c.return=t);null!==c;){var s=c.dependencies;if(null!==s){u=c.child;for(var l=s.firstContext;null!==l;){if(l.context===r&&0!=(l.observedBits&i)){1===c.tag&&((l=ci(-1,n&-n)).tag=2,si(c,l)),c.lanes|=n,null!==(l=c.alternate)&&(l.lanes|=n),ni(c.return,n),s.lanes|=n;break}l=l.next}}else u=10===c.tag&&c.type===t.type?null:c.child;if(null!==u)u.return=c;else for(u=c;null!==u;){if(u===t){u=null;break}if(null!==(c=u.sibling)){c.return=u.return,u=c;break}u=u.return}c=u}La(e,t,o.children,n),t=t.child}return t;case 9:return o=t.type,r=(i=t.pendingProps).children,ri(t,n),r=r(o=oi(o,i.unstable_observedBits)),t.flags|=1,La(e,t,r,n),t.child;case 14:return i=$o(o=t.type,t.pendingProps),Ma(e,t,o,i=$o(o.type,i),r,n);case 15:return Fa(e,t,t.type,t.pendingProps,r,n);case 17:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:$o(r,o),null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),t.tag=1,yo(r)?(e=!0,bo(t)):e=!1,ri(t,n),vi(t,r,o),bi(t,r,o,n),za(null,t,r,!0,e,n);case 19:return tu(e,t,n);case 23:case 24:return Ua(e,t,n)}throw Error(a(156,t.tag))},es.prototype.render=function(e){Kc(e,this._internalRoot,null,null)},es.prototype.unmount=function(){var e=this._internalRoot,t=e.containerInfo;Kc(null,e,null,(function(){t[Qr]=null}))},tt=function(e){13===e.tag&&(lc(e,4,cc()),Jc(e,4))},nt=function(e){13===e.tag&&(lc(e,67108864,cc()),Jc(e,67108864))},rt=function(e){if(13===e.tag){var t=cc(),n=sc(e);lc(e,n,t),Jc(e,n)}},ot=function(e,t){return t()},Pe=function(e,t,n){switch(t){case"input":if(ne(e,n),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var o=no(r);if(!o)throw Error(a(90));Q(r),ne(r,o)}}}break;case"textarea":se(e,n);break;case"select":null!=(t=n.value)&&ae(e,!!n.multiple,t,!1)}},Ae=mc,Ne=function(e,t,n,r,o){var i=ku;ku|=4;try{return Go(98,e.bind(null,t,n,r,o))}finally{0===(ku=i)&&(zu(),Vo())}},Le=function(){0==(49&ku)&&(function(){if(null!==ec){var e=ec;ec=null,e.forEach((function(e){e.expiredLanes|=24&e.pendingLanes,pc(e,Ho())}))}Vo()}(),Rc())},De=function(e,t){var n=ku;ku|=2;try{return e(t)}finally{0===(ku=n)&&(zu(),Vo())}};var os={Events:[eo,to,no,Re,Ce,Rc,{current:!1}]},is={findFiberByHostInstance:Jr,bundleType:0,version:"17.0.2",rendererPackageName:"react-dom"},as={bundleType:is.bundleType,version:is.version,rendererPackageName:is.rendererPackageName,rendererConfig:is.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:O.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=Je(e))?null:e.stateNode},findFiberByHostInstance:is.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var us=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!us.isDisabled&&us.supportsFiber)try{Oo=us.inject(as),Eo=us}catch(me){}}t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=os,t.createPortal=rs,t.findDOMNode=function(e){if(null==e)return null;if(1===e.nodeType)return e;var t=e._reactInternals;if(void 0===t){if("function"==typeof e.render)throw Error(a(188));throw Error(a(268,Object.keys(e)))}return e=null===(e=Je(t))?null:e.stateNode},t.flushSync=function(e,t){var n=ku;if(0!=(48&n))return e(t);ku|=1;try{if(e)return Go(99,e.bind(null,t))}finally{ku=n,Vo()}},t.hydrate=function(e,t,n){if(!ts(t))throw Error(a(200));return ns(null,e,t,!0,n)},t.render=function(e,t,n){if(!ts(t))throw Error(a(200));return ns(null,e,t,!1,n)},t.unmountComponentAtNode=function(e){if(!ts(e))throw Error(a(40));return!!e._reactRootContainer&&(vc((function(){ns(null,null,e,!1,(function(){e._reactRootContainer=null,e[Qr]=null}))})),!0)},t.unstable_batchedUpdates=mc,t.unstable_createPortal=function(e,t){return rs(e,t,2<arguments.length&&void 0!==arguments[2]?arguments[2]:null)},t.unstable_renderSubtreeIntoContainer=function(e,t,n,r){if(!ts(n))throw Error(a(200));if(null==e||void 0===e._reactInternals)throw Error(a(38));return ns(e,t,n,!1,r)},t.version="17.0.2"},14486:(e,t,n)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(e){}}(),e.exports=n(89395)},49686:(e,t)=>{"use strict";var n,r,o,i;if("object"==typeof performance&&"function"==typeof performance.now){var a=performance;t.unstable_now=function(){return a.now()}}else{var u=Date,c=u.now();t.unstable_now=function(){return u.now()-c}}if("undefined"==typeof window||"function"!=typeof MessageChannel){var s=null,l=null,f=function(){if(null!==s)try{var e=t.unstable_now();s(!0,e),s=null}catch(e){throw setTimeout(f,0),e}};n=function(e){null!==s?setTimeout(n,0,e):(s=e,setTimeout(f,0))},r=function(e,t){l=setTimeout(e,t)},o=function(){clearTimeout(l)},t.unstable_shouldYield=function(){return!1},i=t.unstable_forceFrameRate=function(){}}else{var p=window.setTimeout,d=window.clearTimeout;if("undefined"!=typeof console){window.cancelAnimationFrame;window.requestAnimationFrame}var h=!1,y=null,m=-1,v=5,g=0;t.unstable_shouldYield=function(){return t.unstable_now()>=g},i=function(){},t.unstable_forceFrameRate=function(e){0>e||125<e||(v=0<e?Math.floor(1e3/e):5)};var b=new MessageChannel,w=b.port2;b.port1.onmessage=function(){if(null!==y){var e=t.unstable_now();g=e+v;try{y(!0,e)?w.postMessage(null):(h=!1,y=null)}catch(e){throw w.postMessage(null),e}}else h=!1},n=function(e){y=e,h||(h=!0,w.postMessage(null))},r=function(e,n){m=p((function(){e(t.unstable_now())}),n)},o=function(){d(m),m=-1}}function O(e,t){var n=e.length;e.push(t);e:for(;;){var r=n-1>>>1,o=e[r];if(!(void 0!==o&&0<x(o,t)))break e;e[r]=t,e[n]=o,n=r}}function E(e){return void 0===(e=e[0])?null:e}function _(e){var t=e[0];if(void 0!==t){var n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,o=e.length;r<o;){var i=2*(r+1)-1,a=e[i],u=i+1,c=e[u];if(void 0!==a&&0>x(a,n))void 0!==c&&0>x(c,a)?(e[r]=c,e[u]=n,r=u):(e[r]=a,e[i]=n,r=i);else{if(!(void 0!==c&&0>x(c,n)))break e;e[r]=c,e[u]=n,r=u}}}return t}return null}function x(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}var S=[],j=[],P=1,k=null,I=3,T=!1,R=!1,C=!1;function A(e){for(var t=E(j);null!==t;){if(null===t.callback)_(j);else{if(!(t.startTime<=e))break;_(j),t.sortIndex=t.expirationTime,O(S,t)}t=E(j)}}function N(e){if(C=!1,A(e),!R)if(null!==E(S))R=!0,n(L);else{var t=E(j);null!==t&&r(N,t.startTime-e)}}function L(e,n){R=!1,C&&(C=!1,o()),T=!0;var i=I;try{for(A(n),k=E(S);null!==k&&(!(k.expirationTime>n)||e&&!t.unstable_shouldYield());){var a=k.callback;if("function"==typeof a){k.callback=null,I=k.priorityLevel;var u=a(k.expirationTime<=n);n=t.unstable_now(),"function"==typeof u?k.callback=u:k===E(S)&&_(S),A(n)}else _(S);k=E(S)}if(null!==k)var c=!0;else{var s=E(j);null!==s&&r(N,s.startTime-n),c=!1}return c}finally{k=null,I=i,T=!1}}var D=i;t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){R||T||(R=!0,n(L))},t.unstable_getCurrentPriorityLevel=function(){return I},t.unstable_getFirstCallbackNode=function(){return E(S)},t.unstable_next=function(e){switch(I){case 1:case 2:case 3:var t=3;break;default:t=I}var n=I;I=t;try{return e()}finally{I=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=D,t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=I;I=e;try{return t()}finally{I=n}},t.unstable_scheduleCallback=function(e,i,a){var u=t.unstable_now();switch("object"==typeof a&&null!==a?a="number"==typeof(a=a.delay)&&0<a?u+a:u:a=u,e){case 1:var c=-1;break;case 2:c=250;break;case 5:c=1073741823;break;case 4:c=1e4;break;default:c=5e3}return e={id:P++,callback:i,priorityLevel:e,startTime:a,expirationTime:c=a+c,sortIndex:-1},a>u?(e.sortIndex=a,O(j,e),null===E(S)&&e===E(j)&&(C?o():C=!0,r(N,a-u))):(e.sortIndex=c,O(S,e),R||T||(R=!0,n(L))),e},t.unstable_wrapCallback=function(e){var t=I;return function(){var n=I;I=t;try{return e.apply(this,arguments)}finally{I=n}}}},89019:(e,t,n)=>{"use strict";e.exports=n(49686)},40801:e=>{var t="undefined"!=typeof Element,n="function"==typeof Map,r="function"==typeof Set,o="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function i(e,a){if(e===a)return!0;if(e&&a&&"object"==typeof e&&"object"==typeof a){if(e.constructor!==a.constructor)return!1;var u,c,s,l;if(Array.isArray(e)){if((u=e.length)!=a.length)return!1;for(c=u;0!=c--;)if(!i(e[c],a[c]))return!1;return!0}if(n&&e instanceof Map&&a instanceof Map){if(e.size!==a.size)return!1;for(l=e.entries();!(c=l.next()).done;)if(!a.has(c.value[0]))return!1;for(l=e.entries();!(c=l.next()).done;)if(!i(c.value[1],a.get(c.value[0])))return!1;return!0}if(r&&e instanceof Set&&a instanceof Set){if(e.size!==a.size)return!1;for(l=e.entries();!(c=l.next()).done;)if(!a.has(c.value[0]))return!1;return!0}if(o&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(a)){if((u=e.length)!=a.length)return!1;for(c=u;0!=c--;)if(e[c]!==a[c])return!1;return!0}if(e.constructor===RegExp)return e.source===a.source&&e.flags===a.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===a.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===a.toString();if((u=(s=Object.keys(e)).length)!==Object.keys(a).length)return!1;for(c=u;0!=c--;)if(!Object.prototype.hasOwnProperty.call(a,s[c]))return!1;if(t&&e instanceof Element)return!1;for(c=u;0!=c--;)if(("_owner"!==s[c]&&"__v"!==s[c]&&"__o"!==s[c]||!e.$$typeof)&&!i(e[s[c]],a[s[c]]))return!1;return!0}return e!=e&&a!=a}e.exports=function(e,t){try{return i(e,t)}catch(e){if((e.message||"").match(/stack|recursion/i))return!1;throw e}}},6761:(e,t,n)=>{"use strict";var r=n(76630);function o(){}function i(){}i.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,i,a){if(a!==r){var u=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw u.name="Invariant Violation",u}}function t(){return e}e.isRequired=e;var n={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:o};return n.PropTypes=n,n}},29622:(e,t,n)=>{e.exports=n(6761)()},76630:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},1816:(e,t,n)=>{"use strict";var r,o=n(84258),i=(r=o)&&"object"==typeof r&&"default"in r?r.default:r;function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var u=!("undefined"==typeof window||!window.document||!window.document.createElement);e.exports=function(e,t,n){if("function"!=typeof e)throw new Error("Expected reducePropsToState to be a function.");if("function"!=typeof t)throw new Error("Expected handleStateChangeOnClient to be a function.");if(void 0!==n&&"function"!=typeof n)throw new Error("Expected mapStateOnServer to either be undefined or a function.");return function(r){if("function"!=typeof r)throw new Error("Expected WrappedComponent to be a React component.");var c,s=[];function l(){c=e(s.map((function(e){return e.props}))),f.canUseDOM?t(c):n&&(c=n(c))}var f=function(e){var t,n;function o(){return e.apply(this,arguments)||this}n=e,(t=o).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n,o.peek=function(){return c},o.rewind=function(){if(o.canUseDOM)throw new Error("You may only call rewind() on the server. Call peek() to read the current state.");var e=c;return c=void 0,s=[],e};var a=o.prototype;return a.UNSAFE_componentWillMount=function(){s.push(this),l()},a.componentDidUpdate=function(){l()},a.componentWillUnmount=function(){var e=s.indexOf(this);s.splice(e,1),l()},a.render=function(){return i.createElement(r,this.props)},o}(o.PureComponent);return a(f,"displayName","SideEffect("+function(e){return e.displayName||e.name||"Component"}(r)+")"),a(f,"canUseDOM",u),f}}},99173:(e,t)=>{"use strict";var n="function"==typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,o=n?Symbol.for("react.portal"):60106,i=n?Symbol.for("react.fragment"):60107,a=n?Symbol.for("react.strict_mode"):60108,u=n?Symbol.for("react.profiler"):60114,c=n?Symbol.for("react.provider"):60109,s=n?Symbol.for("react.context"):60110,l=n?Symbol.for("react.async_mode"):60111,f=n?Symbol.for("react.concurrent_mode"):60111,p=n?Symbol.for("react.forward_ref"):60112,d=n?Symbol.for("react.suspense"):60113,h=n?Symbol.for("react.suspense_list"):60120,y=n?Symbol.for("react.memo"):60115,m=n?Symbol.for("react.lazy"):60116,v=n?Symbol.for("react.block"):60121,g=n?Symbol.for("react.fundamental"):60117,b=n?Symbol.for("react.responder"):60118,w=n?Symbol.for("react.scope"):60119;function O(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case l:case f:case i:case u:case a:case d:return e;default:switch(e=e&&e.$$typeof){case s:case p:case m:case y:case c:return e;default:return t}}case o:return t}}}function E(e){return O(e)===f}t.AsyncMode=l,t.ConcurrentMode=f,t.ContextConsumer=s,t.ContextProvider=c,t.Element=r,t.ForwardRef=p,t.Fragment=i,t.Lazy=m,t.Memo=y,t.Portal=o,t.Profiler=u,t.StrictMode=a,t.Suspense=d,t.isAsyncMode=function(e){return E(e)||O(e)===l},t.isConcurrentMode=E,t.isContextConsumer=function(e){return O(e)===s},t.isContextProvider=function(e){return O(e)===c},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return O(e)===p},t.isFragment=function(e){return O(e)===i},t.isLazy=function(e){return O(e)===m},t.isMemo=function(e){return O(e)===y},t.isPortal=function(e){return O(e)===o},t.isProfiler=function(e){return O(e)===u},t.isStrictMode=function(e){return O(e)===a},t.isSuspense=function(e){return O(e)===d},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===i||e===f||e===u||e===a||e===d||e===h||"object"==typeof e&&null!==e&&(e.$$typeof===m||e.$$typeof===y||e.$$typeof===c||e.$$typeof===s||e.$$typeof===p||e.$$typeof===g||e.$$typeof===b||e.$$typeof===w||e.$$typeof===v)},t.typeOf=O},2781:(e,t,n)=>{"use strict";e.exports=n(99173)},76511:()=>{var e,t,n,r;Array.from||(Array.from=(e=Object.prototype.toString,t=function(t){return"function"==typeof t||"[object Function]"===e.call(t)},n=Math.pow(2,53)-1,r=function(e){var t=function(e){var t=Number(e);return isNaN(t)?0:0!==t&&isFinite(t)?(t>0?1:-1)*Math.floor(Math.abs(t)):t}(e);return Math.min(Math.max(t,0),n)},function(e){var n=this,o=Object(e);if(null==e)throw new TypeError("Array.from requires an array-like object - not null or undefined");var i,a=arguments.length>1?arguments[1]:void 0;if(void 0!==a){if(!t(a))throw new TypeError("Array.from: when provided, the second argument must be a function");arguments.length>2&&(i=arguments[2])}for(var u,c=r(o.length),s=t(n)?Object(new n(c)):new Array(c),l=0;l<c;)u=o[l],s[l]=a?void 0===i?a(u,l):a.call(i,u,l):u,l+=1;return s.length=c,s}))},98269:(e,t,n)=>{"use strict";var r=n(84258),o=n(53486),i=n(99890);function a(){}a.prototype=Object.create(r.Component.prototype),a.displayName="NestedStatus",a.propTypes={code:o.number.isRequired},a.prototype.render=function(){return this.props.children?r.Children.only(this.props.children):null};var u=i((function(e){var t=e[e.length-1];if(t)return t.code}),(function(e){return e}))(a),c=u.peek,s=u.rewind;u.peek=function(){return c()||200},u.rewind=function(){return s()||200},e.exports=u},26598:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Context=void 0;var o=r(n(84258));t.Context=o.default.createContext({remove:function(){},set:function(){},handleClick:function(){},open:function(){}})},55155:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.baseGalleryPropTypes=void 0;var o=r(n(53486));t.baseGalleryPropTypes={children:o.default.any,options:o.default.object,id:o.default.oneOfType([o.default.string,o.default.number])}},93694:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)},o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&o(t,e,n);return i(t,e),t},u=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n},c=this&&this.__read||function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,i=n.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.CustomGallery=void 0;var l=s(n(98454)),f=a(n(84258)),p=s(n(53486)),d=n(46930),h=n(26598),y=n(55155);t.CustomGallery=function(e){var t=e.children,n=e.layoutRef,o=e.ui,i=e.options,a=e.id,s=e.onOpen,p=(0,f.useRef)(new Map),y=(0,f.useRef)(null),m=(0,f.useCallback)((function(e,t,f){var h=f||null,y=[],m=Array.from(p.current),v=function(n,o){var i=c(n,2),a=i[0],s=i[1],l=s.width,f=s.height,p=s.title,d=s.original,m=s.thumbnail,v=s.id,g=u(s,["width","height","title","original","thumbnail","id"]);(e===a||void 0!==v&&String(v)===t)&&(h=o),y.push(r(r(r(r({},p?{title:p}:{}),{w:Number(l),h:Number(f),src:d,msrc:m,el:a.current}),void 0!==v?{pid:v}:{}),g))};p.current.size>1?m.sort((function(e,t){var n=c(e,1)[0].current,r=c(t,1)[0].current;return(0,d.sortNodes)(n,r)})).forEach(v):m.forEach(v);var g=n.current;if(g){var b=new l.default(g,o,y,r(r({index:null===h?parseInt(t,10)-1:h,getThumbBoundsFn:function(e){var t=y[e].el;return t?(0,d.getElBounds)(t):{x:0,y:0,w:0}},history:!1},void 0!==a?{galleryUID:a,history:!0}:{}),i||{}));b.init(),void 0!==s&&"function"==typeof s&&s(b)}}),[i,a,s]);(0,f.useEffect)((function(){if(void 0!==a){var e=window.location.hash.substring(1),t={};if(!(e.length<5)){for(var n=e.split("&"),r=0;r<n.length;r++)if(n[r]){var o=c(n[r].split("="),2),i=o[0],u=o[1];i&&u&&(t[i]=u)}var s=t.pid,l=t.gid;0!==p.current.size?s&&l===String(a)&&m(null,s):y.current=s}}}),[m,a]);var v=(0,f.useCallback)((function(e){p.current.delete(e)}),[]),g=(0,f.useCallback)((function(e,t){var n=t.id;if(p.current.set(e,t),y.current)if(n===y.current)m(e),y.current=null;else if(!n){var r=parseInt(y.current,10)-1,o=Array.from(p.current.keys())[r];o&&(m(o),y.current=null)}}),[m]),b=(0,f.useCallback)((function(e){m(null,null,e)}),[m]),w=(0,f.useMemo)((function(){return{remove:v,set:g,handleClick:m,open:b}}),[v,g,m,b]);return f.default.createElement(h.Context.Provider,{value:w},t)},t.CustomGallery.propTypes=r(r({},y.baseGalleryPropTypes),{layoutRef:p.default.shape({current:p.default.instanceOf("undefined"==typeof Element?function(){}:Element)}).isRequired,ui:p.default.any.isRequired})},48683:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)},o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&o(t,e,n);return i(t,e),t},u=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n},c=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Gallery=void 0;var s=c(n(87452)),l=a(n(84258)),f=n(32520),p=n(55155);t.Gallery=function(e){var t=e.children,n=e.options,o=e.id,i=e.onOpen,a=u(e,["children","options","id","onOpen"]),c=(0,l.useRef)();return l.default.createElement(f.CustomGallery,{layoutRef:c,ui:s.default,options:n,id:o,onOpen:i},t,l.default.createElement(f.DefaultLayout,r({},a,{ref:c})))},t.Gallery.propTypes=r(r({},p.baseGalleryPropTypes),f.layoutPropTypes)},46930:function(e,t,n){"use strict";var r=this&&this.__read||function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,i=n.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a},o=this&&this.__spreadArray||function(e,t,n){if(n||2===arguments.length)for(var r,o=0,i=t.length;o<i;o++)!r&&o in t||(r||(r=Array.prototype.slice.call(t,0,o)),r[o]=t[o]);return e.concat(r||Array.prototype.slice.call(t))};Object.defineProperty(t,"__esModule",{value:!0}),t.shuffle=t.sortNodes=t.getElBounds=void 0;var i=n(56777);t.getElBounds=function(e){var t=window.pageXOffset||document.documentElement.scrollLeft,n=window.pageYOffset||document.documentElement.scrollTop,r=e.getBoundingClientRect();return{x:r.left+t,y:r.top+n,w:r.width}},t.sortNodes=function(e,t){if(!(e instanceof Element))throw new i.NoRefError;return e===t?0:2&e.compareDocumentPosition(t)?1:-1},t.shuffle=function(e){for(var t,n,i=o([],r(e),!1),a=i.length;0!==a;)n=Math.floor(Math.random()*a),t=i[a-=1],i[a]=i[n],i[n]=t;return i}},32378:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.useGallery=void 0;var o=r(n(84258)),i=n(26598);t.useGallery=function(){return{open:o.default.useContext(i.Context).open}}},32520:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),o(n(31883),t),o(n(93694),t),o(n(48683),t),o(n(36033),t),o(n(75127),t),o(n(32378),t)},36033:function(e,t,n){"use strict";var r=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Item=void 0;var i=n(84258),a=o(n(53486)),u=n(26598);t.Item=function(e){var t=e.children,n=r(e,["children"]),o=(0,i.useRef)(),a=(0,i.useContext)(u.Context),c=a.remove,s=a.set,l=a.handleClick,f=(0,i.useCallback)((function(){return l(o)}),[]);return(0,i.useEffect)((function(){return s(o,n),function(){return c(o)}}),Object.values(n)),t({ref:o,open:f})},t.Item.propTypes={original:a.default.string,thumbnail:a.default.string,width:a.default.oneOfType([a.default.number,a.default.string]),height:a.default.oneOfType([a.default.number,a.default.string]),title:a.default.string,html:a.default.string,children:a.default.func.isRequired,id:a.default.oneOfType([a.default.number,a.default.string])}},56777:function(e,t){"use strict";var n,r=this&&this.__extends||(n=function(e,t){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])})(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,"__esModule",{value:!0}),t.NoRefError=void 0;var o=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.message="No valid `ref` provided.\nYou shuld use `ref` from render prop of Item component.\nExample:\n<Item>{({ ref }) => <div ref={ref}></div>}</Item>\n",t}return r(t,e),t}(Error);t.NoRefError=o},31883:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)},o=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.DefaultLayout=t.layoutDefaultProps=t.layoutPropTypes=void 0;var a=i(n(84258)),u=i(n(53486));t.layoutPropTypes={closeButtonCaption:u.default.string,shareButtonCaption:u.default.string,toggleFullscreenButtonCaption:u.default.string,zoomButtonCaption:u.default.string,prevButtonCaption:u.default.string,nextButtonCaption:u.default.string,shareButton:u.default.bool,fullscreenButton:u.default.bool,zoomButton:u.default.bool},t.layoutDefaultProps={closeButtonCaption:"Close (Esc)",shareButtonCaption:"Share",toggleFullscreenButtonCaption:"Toggle fullscreen",zoomButtonCaption:"Zoom in/out",prevButtonCaption:"Previous (arrow left)",nextButtonCaption:"Next (arrow right)",shareButton:!0,fullscreenButton:!0,zoomButton:!0},t.DefaultLayout=a.default.forwardRef((function(e,t){var n=e.closeButtonCaption,i=e.shareButtonCaption,u=e.toggleFullscreenButtonCaption,c=e.zoomButtonCaption,s=e.prevButtonCaption,l=e.nextButtonCaption,f=e.shareButton,p=e.fullscreenButton,d=e.zoomButton,h=o(e,["closeButtonCaption","shareButtonCaption","toggleFullscreenButtonCaption","zoomButtonCaption","prevButtonCaption","nextButtonCaption","shareButton","fullscreenButton","zoomButton"]);return a.default.createElement("div",r({className:"pswp",tabIndex:-1,role:"dialog","aria-hidden":"true"},h,{ref:t}),a.default.createElement("div",{className:"pswp__bg"}),a.default.createElement("div",{className:"pswp__scroll-wrap"},a.default.createElement("div",{className:"pswp__container"},a.default.createElement("div",{className:"pswp__item"}),a.default.createElement("div",{className:"pswp__item"}),a.default.createElement("div",{className:"pswp__item"})),a.default.createElement("div",{className:"pswp__ui pswp__ui--hidden"},a.default.createElement("div",{className:"pswp__top-bar"},a.default.createElement("div",{className:"pswp__counter"}),a.default.createElement("button",{type:"button",className:"pswp__button pswp__button--close",title:n}),f&&a.default.createElement("button",{type:"button",className:"pswp__button pswp__button--share",title:i}),p&&a.default.createElement("button",{type:"button",className:"pswp__button pswp__button--fs",title:u}),d&&a.default.createElement("button",{type:"button",className:"pswp__button pswp__button--zoom",title:c}),a.default.createElement("div",{className:"pswp__preloader"},a.default.createElement("div",{className:"pswp__preloader__icn"},a.default.createElement("div",{className:"pswp__preloader__cut"},a.default.createElement("div",{className:"pswp__preloader__donut"}))))),a.default.createElement("div",{className:"pswp__share-modal pswp__share-modal--hidden pswp__single-tap"},a.default.createElement("div",{className:"pswp__share-tooltip"})),a.default.createElement("button",{type:"button",className:"pswp__button pswp__button--arrow--left",title:s}),a.default.createElement("button",{type:"button",className:"pswp__button pswp__button--arrow--right",title:l}),a.default.createElement("div",{className:"pswp__caption"},a.default.createElement("div",{className:"pswp__caption__center"})))))})),t.DefaultLayout.propTypes=t.layoutPropTypes,t.DefaultLayout.defaultProps=t.layoutDefaultProps},75127:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},72466:(e,t,n)=>{"use strict";n.r(t),n.d(t,{Provider:()=>l,connect:()=>z,connectAdvanced:()=>j,createProvider:()=>s});var r=n(85854),o=n(84258),i=n(25732),a=n.n(i),u=a().shape({trySubscribe:a().func.isRequired,tryUnsubscribe:a().func.isRequired,notifyNestedSubs:a().func.isRequired,isSubscribed:a().func.isRequired}),c=a().shape({subscribe:a().func.isRequired,dispatch:a().func.isRequired,getState:a().func.isRequired});o.forwardRef;function s(e){var t;void 0===e&&(e="store");var n=e+"Subscription",i=function(t){(0,r.Z)(a,t);var i=a.prototype;function a(n,r){var o;return(o=t.call(this,n,r)||this)[e]=n.store,o}return i.getChildContext=function(){var t;return(t={})[e]=this[e],t[n]=null,t},i.render=function(){return o.Children.only(this.props.children)},a}(o.Component);return i.propTypes={store:c.isRequired,children:a().element.isRequired},i.childContextTypes=((t={})[e]=c.isRequired,t[n]=u,t),i}const l=s();var f=n(5573),p=n(30513),d=n(3812),h=n(37707),y=n.n(h),m=n(83021),v=n.n(m),g=n(2781),b=null,w={notify:function(){}};var O=function(){function e(e,t,n){this.store=e,this.parentSub=t,this.onStateChange=n,this.unsubscribe=null,this.listeners=w}var t=e.prototype;return t.addNestedSub=function(e){return this.trySubscribe(),this.listeners.subscribe(e)},t.notifyNestedSubs=function(){this.listeners.notify()},t.isSubscribed=function(){return Boolean(this.unsubscribe)},t.trySubscribe=function(){var e,t;this.unsubscribe||(this.unsubscribe=this.parentSub?this.parentSub.addNestedSub(this.onStateChange):this.store.subscribe(this.onStateChange),this.listeners=(e=[],t=[],{clear:function(){t=b,e=b},notify:function(){for(var n=e=t,r=0;r<n.length;r++)n[r]()},get:function(){return t},subscribe:function(n){var r=!0;return t===e&&(t=e.slice()),t.push(n),function(){r&&e!==b&&(r=!1,t===e&&(t=e.slice()),t.splice(t.indexOf(n),1))}}}))},t.tryUnsubscribe=function(){this.unsubscribe&&(this.unsubscribe(),this.unsubscribe=null,this.listeners.clear(),this.listeners=w)},e}(),E=void 0!==o.forwardRef,_=0,x={};function S(){}function j(e,t){var n,i;void 0===t&&(t={});var a=t,s=a.getDisplayName,l=void 0===s?function(e){return"ConnectAdvanced("+e+")"}:s,h=a.methodName,m=void 0===h?"connectAdvanced":h,b=a.renderCountProp,w=void 0===b?void 0:b,j=a.shouldHandleStateChanges,P=void 0===j||j,k=a.storeKey,I=void 0===k?"store":k,T=a.withRef,R=void 0!==T&&T,C=(0,d.Z)(a,["getDisplayName","methodName","renderCountProp","shouldHandleStateChanges","storeKey","withRef"]),A=I+"Subscription",N=_++,L=((n={})[I]=c,n[A]=u,n),D=((i={})[A]=u,i);return function(t){v()((0,g.isValidElementType)(t),"You must pass a component to the function returned by "+m+". Instead received "+JSON.stringify(t));var n=t.displayName||t.name||"Component",i=l(n),a=(0,p.Z)({},C,{getDisplayName:l,methodName:m,renderCountProp:w,shouldHandleStateChanges:P,storeKey:I,withRef:R,displayName:i,wrappedComponentName:n,WrappedComponent:t}),u=function(n){function u(e,t){var r;return(r=n.call(this,e,t)||this).version=N,r.state={},r.renderCount=0,r.store=e[I]||t[I],r.propsMode=Boolean(e[I]),r.setWrappedInstance=r.setWrappedInstance.bind((0,f.Z)((0,f.Z)(r))),v()(r.store,'Could not find "'+I+'" in either the context or props of "'+i+'". Either wrap the root component in a <Provider>, or explicitly pass "'+I+'" as a prop to "'+i+'".'),r.initSelector(),r.initSubscription(),r}(0,r.Z)(u,n);var c=u.prototype;return c.getChildContext=function(){var e,t=this.propsMode?null:this.subscription;return(e={})[A]=t||this.context[A],e},c.componentDidMount=function(){P&&(this.subscription.trySubscribe(),this.selector.run(this.props),this.selector.shouldComponentUpdate&&this.forceUpdate())},c.componentWillReceiveProps=function(e){this.selector.run(e)},c.shouldComponentUpdate=function(){return this.selector.shouldComponentUpdate},c.componentWillUnmount=function(){this.subscription&&this.subscription.tryUnsubscribe(),this.subscription=null,this.notifyNestedSubs=S,this.store=null,this.selector.run=S,this.selector.shouldComponentUpdate=!1},c.getWrappedInstance=function(){return v()(R,"To access the wrapped instance, you need to specify { withRef: true } in the options argument of the "+m+"() call."),this.wrappedInstance},c.setWrappedInstance=function(e){this.wrappedInstance=e},c.initSelector=function(){var t=e(this.store.dispatch,a);this.selector=function(e,t){var n={run:function(r){try{var o=e(t.getState(),r);(o!==n.props||n.error)&&(n.shouldComponentUpdate=!0,n.props=o,n.error=null)}catch(e){n.shouldComponentUpdate=!0,n.error=e}}};return n}(t,this.store),this.selector.run(this.props)},c.initSubscription=function(){if(P){var e=(this.propsMode?this.props:this.context)[A];this.subscription=new O(this.store,e,this.onStateChange.bind(this)),this.notifyNestedSubs=this.subscription.notifyNestedSubs.bind(this.subscription)}},c.onStateChange=function(){this.selector.run(this.props),this.selector.shouldComponentUpdate?(this.componentDidUpdate=this.notifyNestedSubsOnComponentDidUpdate,this.setState(x)):this.notifyNestedSubs()},c.notifyNestedSubsOnComponentDidUpdate=function(){this.componentDidUpdate=void 0,this.notifyNestedSubs()},c.isSubscribed=function(){return Boolean(this.subscription)&&this.subscription.isSubscribed()},c.addExtraProps=function(e){if(!(R||w||this.propsMode&&this.subscription))return e;var t=(0,p.Z)({},e);return R&&(t.ref=this.setWrappedInstance),w&&(t[w]=this.renderCount++),this.propsMode&&this.subscription&&(t[A]=this.subscription),t},c.render=function(){var e=this.selector;if(e.shouldComponentUpdate=!1,e.error)throw e.error;return(0,o.createElement)(t,this.addExtraProps(e.props))},u}(o.Component);return E&&(u.prototype.UNSAFE_componentWillReceiveProps=u.prototype.componentWillReceiveProps,delete u.prototype.componentWillReceiveProps),u.WrappedComponent=t,u.displayName=i,u.childContextTypes=D,u.contextTypes=L,u.propTypes=L,y()(u,t)}}var P=Object.prototype.hasOwnProperty;function k(e,t){return e===t?0!==e||0!==t||1/e==1/t:e!=e&&t!=t}function I(e,t){if(k(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(var o=0;o<n.length;o++)if(!P.call(t,n[o])||!k(e[n[o]],t[n[o]]))return!1;return!0}var T=n(51324);function R(e){return function(t,n){var r=e(t,n);function o(){return r}return o.dependsOnOwnProps=!1,o}}function C(e){return null!==e.dependsOnOwnProps&&void 0!==e.dependsOnOwnProps?Boolean(e.dependsOnOwnProps):1!==e.length}function A(e,t){return function(t,n){n.displayName;var r=function(e,t){return r.dependsOnOwnProps?r.mapToProps(e,t):r.mapToProps(e)};return r.dependsOnOwnProps=!0,r.mapToProps=function(t,n){r.mapToProps=e,r.dependsOnOwnProps=C(e);var o=r(t,n);return"function"==typeof o&&(r.mapToProps=o,r.dependsOnOwnProps=C(o),o=r(t,n)),o},r}}const N=[function(e){return"function"==typeof e?A(e):void 0},function(e){return e?void 0:R((function(e){return{dispatch:e}}))},function(e){return e&&"object"==typeof e?R((function(t){return(0,T.DE)(e,t)})):void 0}];const L=[function(e){return"function"==typeof e?A(e):void 0},function(e){return e?void 0:R((function(){return{}}))}];function D(e,t,n){return(0,p.Z)({},n,e,t)}const M=[function(e){return"function"==typeof e?function(e){return function(t,n){n.displayName;var r,o=n.pure,i=n.areMergedPropsEqual,a=!1;return function(t,n,u){var c=e(t,n,u);return a?o&&i(c,r)||(r=c):(a=!0,r=c),r}}}(e):void 0},function(e){return e?void 0:function(){return D}}];function F(e,t,n,r){return function(o,i){return n(e(o,i),t(r,i),i)}}function U(e,t,n,r,o){var i,a,u,c,s,l=o.areStatesEqual,f=o.areOwnPropsEqual,p=o.areStatePropsEqual,d=!1;function h(o,d){var h,y,m=!f(d,a),v=!l(o,i);return i=o,a=d,m&&v?(u=e(i,a),t.dependsOnOwnProps&&(c=t(r,a)),s=n(u,c,a)):m?(e.dependsOnOwnProps&&(u=e(i,a)),t.dependsOnOwnProps&&(c=t(r,a)),s=n(u,c,a)):v?(h=e(i,a),y=!p(h,u),u=h,y&&(s=n(u,c,a)),s):s}return function(o,l){return d?h(o,l):(u=e(i=o,a=l),c=t(r,a),s=n(u,c,a),d=!0,s)}}function B(e,t){var n=t.initMapStateToProps,r=t.initMapDispatchToProps,o=t.initMergeProps,i=(0,d.Z)(t,["initMapStateToProps","initMapDispatchToProps","initMergeProps"]),a=n(e,i),u=r(e,i),c=o(e,i);return(i.pure?U:F)(a,u,c,e,i)}function H(e,t,n){for(var r=t.length-1;r>=0;r--){var o=t[r](e);if(o)return o}return function(t,r){throw new Error("Invalid value of type "+typeof e+" for "+n+" argument when connecting component "+r.wrappedComponentName+".")}}function q(e,t){return e===t}const z=(V=(W=void 0===G?{}:G).connectHOC,Y=void 0===V?j:V,Z=W.mapStateToPropsFactories,$=void 0===Z?L:Z,K=W.mapDispatchToPropsFactories,Q=void 0===K?N:K,X=W.mergePropsFactories,J=void 0===X?M:X,ee=W.selectorFactory,te=void 0===ee?B:ee,function(e,t,n,r){void 0===r&&(r={});var o=r,i=o.pure,a=void 0===i||i,u=o.areStatesEqual,c=void 0===u?q:u,s=o.areOwnPropsEqual,l=void 0===s?I:s,f=o.areStatePropsEqual,h=void 0===f?I:f,y=o.areMergedPropsEqual,m=void 0===y?I:y,v=(0,d.Z)(o,["pure","areStatesEqual","areOwnPropsEqual","areStatePropsEqual","areMergedPropsEqual"]),g=H(e,$,"mapStateToProps"),b=H(t,Q,"mapDispatchToProps"),w=H(n,J,"mergeProps");return Y(te,(0,p.Z)({methodName:"connect",getDisplayName:function(e){return"Connect("+e+")"},shouldHandleStateChanges:Boolean(e),initMapStateToProps:g,initMapDispatchToProps:b,initMergeProps:w,pure:a,areStatesEqual:c,areOwnPropsEqual:l,areStatePropsEqual:h,areMergedPropsEqual:m},v))});var G,W,V,Y,Z,$,K,Q,X,J,ee,te},11023:(e,t,n)=>{"use strict";var r=n(631);function o(){}function i(){}i.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,i,a){if(a!==r){var u=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw u.name="Invariant Violation",u}}function t(){return e}e.isRequired=e;var n={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:o};return n.PropTypes=n,n}},25732:(e,t,n)=>{e.exports=n(11023)()},631:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},85201:(e,t,n)=>{"use strict";var r=n(8306);function o(){}function i(){}i.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,i,a){if(a!==r){var u=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw u.name="Invariant Violation",u}}function t(){return e}e.isRequired=e;var n={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:o};return n.PropTypes=n,n}},58137:(e,t,n)=>{e.exports=n(85201)()},8306:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},68597:(e,t,n)=>{"use strict";n.d(t,{Z:()=>m});var r=n(16727),o=n.n(r),i=n(83021),a=n.n(i),u=n(84258),c=n(24451),s=n.n(c),l=n(70454),f=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e};function p(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function d(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}var h=function(e){return 0===u.Children.count(e)},y=function(e){function t(){var n,r;p(this,t);for(var o=arguments.length,i=Array(o),a=0;a<o;a++)i[a]=arguments[a];return n=r=d(this,e.call.apply(e,[this].concat(i))),r.state={match:r.computeMatch(r.props,r.context.router)},d(r,n)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.getChildContext=function(){return{router:f({},this.context.router,{route:{location:this.props.location||this.context.router.route.location,match:this.state.match}})}},t.prototype.computeMatch=function(e,t){var n=e.computedMatch,r=e.location,o=e.path,i=e.strict,u=e.exact,c=e.sensitive;if(n)return n;a()(t,"You should not use <Route> or withRouter() outside a <Router>");var s=t.route,f=(r||s.location).pathname;return(0,l.Z)(f,{path:o,strict:i,exact:u,sensitive:c},s.match)},t.prototype.componentWillMount=function(){o()(!(this.props.component&&this.props.render),"You should not use <Route component> and <Route render> in the same route; <Route render> will be ignored"),o()(!(this.props.component&&this.props.children&&!h(this.props.children)),"You should not use <Route component> and <Route children> in the same route; <Route children> will be ignored"),o()(!(this.props.render&&this.props.children&&!h(this.props.children)),"You should not use <Route render> and <Route children> in the same route; <Route children> will be ignored")},t.prototype.componentWillReceiveProps=function(e,t){o()(!(e.location&&!this.props.location),'<Route> elements should not change from uncontrolled to controlled (or vice versa). You initially used no "location" prop and then provided one on a subsequent render.'),o()(!(!e.location&&this.props.location),'<Route> elements should not change from controlled to uncontrolled (or vice versa). You provided a "location" prop initially but omitted it on a subsequent render.'),this.setState({match:this.computeMatch(e,t.router)})},t.prototype.render=function(){var e=this.state.match,t=this.props,n=t.children,r=t.component,o=t.render,i=this.context.router,a=i.history,c=i.route,s=i.staticContext,l={match:e,location:this.props.location||c.location,history:a,staticContext:s};return r?e?u.createElement(r,l):null:o?e?o(l):null:"function"==typeof n?n(l):n&&!h(n)?u.Children.only(n):null},t}(u.Component);y.propTypes={computedMatch:s().object,path:s().string,exact:s().bool,strict:s().bool,sensitive:s().bool,component:s().func,render:s().func,children:s().oneOfType([s().func,s().node]),location:s().object},y.contextTypes={router:s().shape({history:s().object.isRequired,route:s().object.isRequired,staticContext:s().object})},y.childContextTypes={router:s().object.isRequired};const m=y},49950:(e,t,n)=>{"use strict";n.d(t,{Z:()=>h});var r=n(84258),o=n(24451),i=n.n(o),a=n(16727),u=n.n(a),c=n(83021),s=n.n(c),l=n(70454);function f(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function p(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}var d=function(e){function t(){return f(this,t),p(this,e.apply(this,arguments))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.componentWillMount=function(){s()(this.context.router,"You should not use <Switch> outside a <Router>")},t.prototype.componentWillReceiveProps=function(e){u()(!(e.location&&!this.props.location),'<Switch> elements should not change from uncontrolled to controlled (or vice versa). You initially used no "location" prop and then provided one on a subsequent render.'),u()(!(!e.location&&this.props.location),'<Switch> elements should not change from controlled to uncontrolled (or vice versa). You provided a "location" prop initially but omitted it on a subsequent render.')},t.prototype.render=function(){var e=this.context.router.route,t=this.props.children,n=this.props.location||e.location,o=void 0,i=void 0;return r.Children.forEach(t,(function(t){if(null==o&&r.isValidElement(t)){var a=t.props,u=a.path,c=a.exact,s=a.strict,f=a.sensitive,p=a.from,d=u||p;i=t,o=(0,l.Z)(n.pathname,{path:d,exact:c,strict:s,sensitive:f},e.match)}})),o?r.cloneElement(i,{location:n,computedMatch:o}):null},t}(r.Component);d.contextTypes={router:i().shape({route:i().object.isRequired}).isRequired},d.propTypes={children:i().node,location:i().object};const h=d},91499:(e,t,n)=>{"use strict";n.r(t),n.d(t,{MemoryRouter:()=>b,Prompt:()=>_,Redirect:()=>N,Route:()=>L.Z,Router:()=>y,StaticRouter:()=>V,Switch:()=>Y.Z,generatePath:()=>I,matchPath:()=>Z.Z,withRouter:()=>$.Z});var r=n(16727),o=n.n(r),i=n(84258),a=n(24451),u=n.n(a),c=n(90528),s=n(83021),l=n.n(s),f=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e};function p(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function d(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}var h=function(e){function t(){var n,r;p(this,t);for(var o=arguments.length,i=Array(o),a=0;a<o;a++)i[a]=arguments[a];return n=r=d(this,e.call.apply(e,[this].concat(i))),r.state={match:r.computeMatch(r.props.history.location.pathname)},d(r,n)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.getChildContext=function(){return{router:f({},this.context.router,{history:this.props.history,route:{location:this.props.history.location,match:this.state.match}})}},t.prototype.computeMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}},t.prototype.componentWillMount=function(){var e=this,t=this.props,n=t.children,r=t.history;l()(null==n||1===i.Children.count(n),"A <Router> may have only one child element"),this.unlisten=r.listen((function(){e.setState({match:e.computeMatch(r.location.pathname)})}))},t.prototype.componentWillReceiveProps=function(e){o()(this.props.history===e.history,"You cannot change <Router history>")},t.prototype.componentWillUnmount=function(){this.unlisten()},t.prototype.render=function(){var e=this.props.children;return e?i.Children.only(e):null},t}(i.Component);h.propTypes={history:u().object.isRequired,children:u().node},h.contextTypes={router:u().object},h.childContextTypes={router:u().object.isRequired};const y=h;function m(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function v(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}var g=function(e){function t(){var n,r;m(this,t);for(var o=arguments.length,i=Array(o),a=0;a<o;a++)i[a]=arguments[a];return n=r=v(this,e.call.apply(e,[this].concat(i))),r.history=(0,c.PP)(r.props),v(r,n)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.componentWillMount=function(){o()(!this.props.history,"<MemoryRouter> ignores the history prop. To use a custom history, use `import { Router }` instead of `import { MemoryRouter as Router }`.")},t.prototype.render=function(){return i.createElement(y,{history:this.history,children:this.props.children})},t}(i.Component);g.propTypes={initialEntries:u().array,initialIndex:u().number,getUserConfirmation:u().func,keyLength:u().number,children:u().node};const b=g;function w(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function O(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}var E=function(e){function t(){return w(this,t),O(this,e.apply(this,arguments))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.enable=function(e){this.unblock&&this.unblock(),this.unblock=this.context.router.history.block(e)},t.prototype.disable=function(){this.unblock&&(this.unblock(),this.unblock=null)},t.prototype.componentWillMount=function(){l()(this.context.router,"You should not use <Prompt> outside a <Router>"),this.props.when&&this.enable(this.props.message)},t.prototype.componentWillReceiveProps=function(e){e.when?this.props.when&&this.props.message===e.message||this.enable(e.message):this.disable()},t.prototype.componentWillUnmount=function(){this.disable()},t.prototype.render=function(){return null},t}(i.Component);E.propTypes={when:u().bool,message:u().oneOfType([u().func,u().string]).isRequired},E.defaultProps={when:!0},E.contextTypes={router:u().shape({history:u().shape({block:u().func.isRequired}).isRequired}).isRequired};const _=E;var x=n(6967),S=n.n(x),j={},P=0,k=function(e){var t=e,n=j[t]||(j[t]={});if(n[e])return n[e];var r=S().compile(e);return P<1e4&&(n[e]=r,P++),r};const I=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"/",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if("/"===e)return e;var n=k(e);return n(t,{pretty:!0})};var T=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e};function R(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function C(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}var A=function(e){function t(){return R(this,t),C(this,e.apply(this,arguments))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.isStatic=function(){return this.context.router&&this.context.router.staticContext},t.prototype.componentWillMount=function(){l()(this.context.router,"You should not use <Redirect> outside a <Router>"),this.isStatic()&&this.perform()},t.prototype.componentDidMount=function(){this.isStatic()||this.perform()},t.prototype.componentDidUpdate=function(e){var t=(0,c.ob)(e.to),n=(0,c.ob)(this.props.to);(0,c.Hp)(t,n)?o()(!1,"You tried to redirect to the same route you're currently on: \""+n.pathname+n.search+'"'):this.perform()},t.prototype.computeTo=function(e){var t=e.computedMatch,n=e.to;return t?"string"==typeof n?I(n,t.params):T({},n,{pathname:I(n.pathname,t.params)}):n},t.prototype.perform=function(){var e=this.context.router.history,t=this.props.push,n=this.computeTo(this.props);t?e.push(n):e.replace(n)},t.prototype.render=function(){return null},t}(i.Component);A.propTypes={computedMatch:u().object,push:u().bool,from:u().string,to:u().oneOfType([u().string,u().object]).isRequired},A.defaultProps={push:!1},A.contextTypes={router:u().shape({history:u().shape({push:u().func.isRequired,replace:u().func.isRequired}).isRequired,staticContext:u().object}).isRequired};const N=A;var L=n(68597),D=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e};function M(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function F(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}var U=function(e){return"/"===e.charAt(0)?e:"/"+e},B=function(e,t){return e?D({},t,{pathname:U(e)+t.pathname}):t},H=function(e,t){if(!e)return t;var n=U(e);return 0!==t.pathname.indexOf(n)?t:D({},t,{pathname:t.pathname.substr(n.length)})},q=function(e){return"string"==typeof e?e:(0,c.Ep)(e)},z=function(e){return function(){l()(!1,"You cannot %s with <StaticRouter>",e)}},G=function(){},W=function(e){function t(){var n,r;M(this,t);for(var o=arguments.length,i=Array(o),a=0;a<o;a++)i[a]=arguments[a];return n=r=F(this,e.call.apply(e,[this].concat(i))),r.createHref=function(e){return U(r.props.basename+q(e))},r.handlePush=function(e){var t=r.props,n=t.basename,o=t.context;o.action="PUSH",o.location=B(n,(0,c.ob)(e)),o.url=q(o.location)},r.handleReplace=function(e){var t=r.props,n=t.basename,o=t.context;o.action="REPLACE",o.location=B(n,(0,c.ob)(e)),o.url=q(o.location)},r.handleListen=function(){return G},r.handleBlock=function(){return G},F(r,n)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.getChildContext=function(){return{router:{staticContext:this.props.context}}},t.prototype.componentWillMount=function(){o()(!this.props.history,"<StaticRouter> ignores the history prop. To use a custom history, use `import { Router }` instead of `import { StaticRouter as Router }`.")},t.prototype.render=function(){var e=this.props,t=e.basename,n=(e.context,e.location),r=function(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}(e,["basename","context","location"]),o={createHref:this.createHref,action:"POP",location:H(t,(0,c.ob)(n)),push:this.handlePush,replace:this.handleReplace,go:z("go"),goBack:z("goBack"),goForward:z("goForward"),listen:this.handleListen,block:this.handleBlock};return i.createElement(y,D({},r,{history:o}))},t}(i.Component);W.propTypes={basename:u().string,context:u().object.isRequired,location:u().oneOfType([u().string,u().object])},W.defaultProps={basename:"",location:"/"},W.childContextTypes={router:u().object.isRequired};const V=W;var Y=n(49950),Z=n(70454),$=n(10153)},70454:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var r=n(6967),o=n.n(r),i={},a=0,u=function(e,t){var n=""+t.end+t.strict+t.sensitive,r=i[n]||(i[n]={});if(r[e])return r[e];var u=[],c={re:o()(e,u,t),keys:u};return a<1e4&&(r[e]=c,a++),c};const c=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2];"string"==typeof t&&(t={path:t});var r=t,o=r.path,i=r.exact,a=void 0!==i&&i,c=r.strict,s=void 0!==c&&c,l=r.sensitive,f=void 0!==l&&l;if(null==o)return n;var p=u(o,{end:a,strict:s,sensitive:f}),d=p.re,h=p.keys,y=d.exec(e);if(!y)return null;var m=y[0],v=y.slice(1),g=e===m;return a&&!g?null:{path:o,url:"/"===o&&""===m?"/":m,isExact:g,params:h.reduce((function(e,t,n){return e[t.name]=v[n],e}),{})}}},10153:(e,t,n)=>{"use strict";n.d(t,{Z:()=>l});var r=n(84258),o=n(24451),i=n.n(o),a=n(71471),u=n.n(a),c=n(68597),s=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e};const l=function(e){var t=function(t){var n=t.wrappedComponentRef,o=function(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}(t,["wrappedComponentRef"]);return r.createElement(c.Z,{children:function(t){return r.createElement(e,s({},o,t,{ref:n}))}})};return t.displayName="withRouter("+(e.displayName||e.name)+")",t.WrappedComponent=e,t.propTypes={wrappedComponentRef:i().func},u()(t,e)}},71471:e=>{"use strict";var t={childContextTypes:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},n={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},r=Object.defineProperty,o=Object.getOwnPropertyNames,i=Object.getOwnPropertySymbols,a=Object.getOwnPropertyDescriptor,u=Object.getPrototypeOf,c=u&&u(Object);e.exports=function e(s,l,f){if("string"!=typeof l){if(c){var p=u(l);p&&p!==c&&e(s,p,f)}var d=o(l);i&&(d=d.concat(i(l)));for(var h=0;h<d.length;++h){var y=d[h];if(!(t[y]||n[y]||f&&f[y])){var m=a(l,y);try{r(s,y,m)}catch(e){}}}return s}return s}},2717:(e,t,n)=>{"use strict";var r=n(45775);function o(){}function i(){}i.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,i,a){if(a!==r){var u=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw u.name="Invariant Violation",u}}function t(){return e}e.isRequired=e;var n={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:o};return n.PropTypes=n,n}},24451:(e,t,n)=>{e.exports=n(2717)()},45775:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},99890:(e,t,n)=>{"use strict";function r(e){return e&&"object"==typeof e&&"default"in e?e.default:e}var o=n(84258),i=r(o),a=r(n(44167));function u(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var c=!("undefined"==typeof window||!window.document||!window.document.createElement);e.exports=function(e,t,n){if("function"!=typeof e)throw new Error("Expected reducePropsToState to be a function.");if("function"!=typeof t)throw new Error("Expected handleStateChangeOnClient to be a function.");if(void 0!==n&&"function"!=typeof n)throw new Error("Expected mapStateOnServer to either be undefined or a function.");return function(r){if("function"!=typeof r)throw new Error("Expected WrappedComponent to be a React component.");var s,l=[];function f(){s=e(l.map((function(e){return e.props}))),p.canUseDOM?t(s):n&&(s=n(s))}var p=function(e){var t,n;function o(){return e.apply(this,arguments)||this}n=e,(t=o).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n,o.peek=function(){return s},o.rewind=function(){if(o.canUseDOM)throw new Error("You may only call rewind() on the server. Call peek() to read the current state.");var e=s;return s=void 0,l=[],e};var u=o.prototype;return u.shouldComponentUpdate=function(e){return!a(e,this.props)},u.componentWillMount=function(){l.push(this),f()},u.componentDidUpdate=function(){f()},u.componentWillUnmount=function(){var e=l.indexOf(this);l.splice(e,1),f()},u.render=function(){return i.createElement(r,this.props)},o}(o.Component);return u(p,"displayName","SideEffect("+function(e){return e.displayName||e.name||"Component"}(r)+")"),u(p,"canUseDOM",c),p}}},16039:(e,t,n)=>{"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=c(n(84258)),i=c(n(53486)),a=n(87095),u=c(n(22705));function c(e){return e&&e.__esModule?e:{default:e}}function s(){return(s=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}function l(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function f(e,t){return(f=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function p(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=h(e);if(t){var o=h(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return d(this,n)}}function d(e,t){return!t||"object"!==r(t)&&"function"!=typeof t?function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e):t}function h(e){return(h=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var y=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&f(e,t)}(c,e);var t,n,r,i=p(c);function c(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,c),(t=i.call(this,e)).state={headers:{}},t}return t=c,(n=[{key:"render",value:function(){var e=this.state.headers,t=this.props,n=t.className,r=t.forwardedRef,i="".concat(n||""," responsiveTable");return o.default.createElement(a.Provider,{value:e},o.default.createElement("table",s({"data-testid":"table"},(0,u.default)(this.props),{className:i,ref:r})))}}])&&l(t.prototype,n),r&&l(t,r),c}(o.default.Component);y.propTypes={className:i.default.string,forwardedRef:i.default.oneOfType([i.default.func,i.default.shape({current:i.default.instanceOf(n.g.Element)})])},y.defaultProps={className:void 0,forwardedRef:void 0};var m=o.default.forwardRef((function(e,t){return o.default.createElement(y,s({},e,{forwardedRef:t}))}));m.displayName=y.name;var v=m;t.default=v},92341:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=i(n(84258)),o=i(n(22705));function i(e){return e&&e.__esModule?e:{default:e}}function a(){return(a=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}var u=function(e){return r.default.createElement("tbody",a({"data-testid":"tbody"},(0,o.default)(e)))};t.default=u},95891:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=a(n(84258)),o=n(87095),i=a(n(74497));function a(e){return e&&e.__esModule?e:{default:e}}function u(){return(u=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}var c=function(e){return r.default.createElement(o.Consumer,null,(function(t){return r.default.createElement(i.default,u({},e,{headers:t}))}))};t.default=c},74497:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=a(n(84258)),o=a(n(53486)),i=a(n(22705));function a(e){return e&&e.__esModule?e:{default:e}}function u(){return(u=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}var c=function(e){var t=e.headers,n=e.children,o=e.columnKey,a=e.className,c=e.colSpan,s="".concat(a||""," pivoted");return c?r.default.createElement("td",u({"data-testid":"td"},(0,i.default)(e))):r.default.createElement("td",u({"data-testid":"td"},(0,i.default)(e),{className:s}),r.default.createElement("div",{"data-testid":"td-before",className:"tdBefore"},t[o]),null!=n?n:r.default.createElement("div",null," "))};c.propTypes={children:o.default.node,headers:o.default.shape({}),columnKey:o.default.number,className:o.default.string,colSpan:o.default.oneOfType([o.default.number,o.default.string])},c.defaultProps={children:void 0,headers:void 0,columnKey:void 0,className:void 0,colSpan:void 0};var s=c;t.default=s},20344:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=i(n(84258)),o=i(n(22705));function i(e){return e&&e.__esModule?e:{default:e}}function a(){return(a=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}var u=function(e){return r.default.createElement("th",a({"data-testid":"th"},(0,o.default)(e)))};t.default=u},10201:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=a(n(84258)),o=a(n(53486)),i=a(n(22705));function a(e){return e&&e.__esModule?e:{default:e}}function u(){return(u=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}var c=function(e){var t=e.children;return r.default.createElement("thead",u({"data-testid":"thead"},(0,i.default)(e)),r.default.cloneElement(t,{inHeader:!0}))};c.propTypes={children:o.default.node},c.defaultProps={children:void 0};var s=c;t.default=s},61333:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=a(n(84258)),o=n(87095),i=a(n(16148));function a(e){return e&&e.__esModule?e:{default:e}}function u(){return(u=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}var c=function(e){return r.default.createElement(o.Consumer,null,(function(t){return r.default.createElement(i.default,u({},e,{headers:t}))}))};t.default=c},16148:(e,t,n)=>{"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=u(n(84258)),i=u(n(53486)),a=u(n(22705));function u(e){return e&&e.__esModule?e:{default:e}}function c(){return(c=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}function s(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function l(e,t){return(l=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function f(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=d(e);if(t){var o=d(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return p(this,n)}}function p(e,t){return!t||"object"!==r(t)&&"function"!=typeof t?function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e):t}function d(e){return(d=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var h=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&l(e,t)}(u,e);var t,n,r,i=f(u);function u(e){var t;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,u),t=i.call(this,e);var n=e.headers;return n&&e.inHeader&&o.default.Children.map(e.children,(function(e,t){e&&(n[t]=e.props.children)})),t}return t=u,(n=[{key:"render",value:function(){var e=this.props.children;return o.default.createElement("tr",c({"data-testid":"tr"},(0,a.default)(this.props)),e&&o.default.Children.map(e,(function(e,t){return e&&o.default.cloneElement(e,{key:t,columnKey:t})})))}}])&&s(t.prototype,n),r&&s(t,r),u}(o.default.Component);h.propTypes={children:i.default.node,headers:i.default.shape({}),inHeader:i.default.bool},h.defaultProps={children:void 0,headers:void 0,inHeader:void 0};var y=h;t.default=y},73331:(e,t,n)=>{"use strict";Object.defineProperty(t,"iA",{enumerable:!0,get:function(){return r.default}}),Object.defineProperty(t,"p3",{enumerable:!0,get:function(){return o.default}}),Object.defineProperty(t,"Td",{enumerable:!0,get:function(){return i.default}}),Object.defineProperty(t,"Th",{enumerable:!0,get:function(){return a.default}}),Object.defineProperty(t,"hr",{enumerable:!0,get:function(){return u.default}}),Object.defineProperty(t,"Tr",{enumerable:!0,get:function(){return c.default}});var r=s(n(16039)),o=s(n(92341)),i=s(n(95891)),a=s(n(20344)),u=s(n(10201)),c=s(n(61333));function s(e){return e&&e.__esModule?e:{default:e}}},22705:(e,t)=>{"use strict";function n(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function r(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?n(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):n(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=function(e){return t=e,n=["inHeader","columnKey","headers","forwardedRef"],Object.keys(t).filter((function(e){return-1===n.indexOf(e)})).reduce((function(e,n){return r(r({},e),{},o({},n,t[n]))}),{});var t,n};t.default=i},87095:(e,t,n)=>{"use strict";var r;Object.defineProperty(t,"__esModule",{value:!0}),t.Consumer=t.Provider=void 0;var o=((r=n(84258))&&r.__esModule?r:{default:r}).default.createContext({}),i=o.Provider,a=o.Consumer;t.Consumer=a,t.Provider=i},47311:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,o=!1,i=void 0;try{for(var a,u=e[Symbol.iterator]();!(r=(a=u.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{!r&&u.return&&u.return()}finally{if(o)throw i}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")};function o(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}var i,a=n(14223),u=(i=a)&&i.__esModule?i:{default:i},c=function(e){return e};t.default=function(e){var t=Array.isArray(e)&&2===e.length?e:[e,null],n=r(t,2),i=n[0],a=n[1];return function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];var s=n.map((function(e){return i[e]})).filter(c);return"string"==typeof s[0]||"function"==typeof a?{key:e,className:a?a.apply(void 0,o(s)):s.join(" ")}:{key:e,style:u.default.apply(void 0,[{}].concat(o(s)))}}},e.exports=t.default},14223:e=>{"use strict";var t=Object.prototype.propertyIsEnumerable;function n(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}function r(e){var n=Object.getOwnPropertyNames(e);return Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(e))),n.filter((function(n){return t.call(e,n)}))}e.exports=Object.assign||function(e,t){for(var o,i,a=n(e),u=1;u<arguments.length;u++){o=arguments[u],i=r(Object(o));for(var c=0;c<i.length;c++)a[i[c]]=o[i[c]]}return a}},84982:(e,t,n)=>{"use strict";var r=n(59296);function o(){}function i(){}i.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,i,a){if(a!==r){var u=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw u.name="Invariant Violation",u}}function t(){return e}e.isRequired=e;var n={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:o};return n.PropTypes=n,n}},19115:(e,t,n)=>{e.exports=n(84982)()},59296:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},32867:(e,t,n)=>{"use strict";var r=n(28608),o=60103,i=60106;t.Fragment=60107,t.StrictMode=60108,t.Profiler=60114;var a=60109,u=60110,c=60112;t.Suspense=60113;var s=60115,l=60116;if("function"==typeof Symbol&&Symbol.for){var f=Symbol.for;o=f("react.element"),i=f("react.portal"),t.Fragment=f("react.fragment"),t.StrictMode=f("react.strict_mode"),t.Profiler=f("react.profiler"),a=f("react.provider"),u=f("react.context"),c=f("react.forward_ref"),t.Suspense=f("react.suspense"),s=f("react.memo"),l=f("react.lazy")}var p="function"==typeof Symbol&&Symbol.iterator;function d(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},y={};function m(e,t,n){this.props=e,this.context=t,this.refs=y,this.updater=n||h}function v(){}function g(e,t,n){this.props=e,this.context=t,this.refs=y,this.updater=n||h}m.prototype.isReactComponent={},m.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error(d(85));this.updater.enqueueSetState(this,e,t,"setState")},m.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},v.prototype=m.prototype;var b=g.prototype=new v;b.constructor=g,r(b,m.prototype),b.isPureReactComponent=!0;var w={current:null},O=Object.prototype.hasOwnProperty,E={key:!0,ref:!0,__self:!0,__source:!0};function _(e,t,n){var r,i={},a=null,u=null;if(null!=t)for(r in void 0!==t.ref&&(u=t.ref),void 0!==t.key&&(a=""+t.key),t)O.call(t,r)&&!E.hasOwnProperty(r)&&(i[r]=t[r]);var c=arguments.length-2;if(1===c)i.children=n;else if(1<c){for(var s=Array(c),l=0;l<c;l++)s[l]=arguments[l+2];i.children=s}if(e&&e.defaultProps)for(r in c=e.defaultProps)void 0===i[r]&&(i[r]=c[r]);return{$$typeof:o,type:e,key:a,ref:u,props:i,_owner:w.current}}function x(e){return"object"==typeof e&&null!==e&&e.$$typeof===o}var S=/\/+/g;function j(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function P(e,t,n,r,a){var u=typeof e;"undefined"!==u&&"boolean"!==u||(e=null);var c=!1;if(null===e)c=!0;else switch(u){case"string":case"number":c=!0;break;case"object":switch(e.$$typeof){case o:case i:c=!0}}if(c)return a=a(c=e),e=""===r?"."+j(c,0):r,Array.isArray(a)?(n="",null!=e&&(n=e.replace(S,"$&/")+"/"),P(a,t,n,"",(function(e){return e}))):null!=a&&(x(a)&&(a=function(e,t){return{$$typeof:o,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(a,n+(!a.key||c&&c.key===a.key?"":(""+a.key).replace(S,"$&/")+"/")+e)),t.push(a)),1;if(c=0,r=""===r?".":r+":",Array.isArray(e))for(var s=0;s<e.length;s++){var l=r+j(u=e[s],s);c+=P(u,t,n,l,a)}else if("function"==typeof(l=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=p&&e[p]||e["@@iterator"])?e:null}(e)))for(e=l.call(e),s=0;!(u=e.next()).done;)c+=P(u=u.value,t,n,l=r+j(u,s++),a);else if("object"===u)throw t=""+e,Error(d(31,"[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t));return c}function k(e,t,n){if(null==e)return e;var r=[],o=0;return P(e,r,"","",(function(e){return t.call(n,e,o++)})),r}function I(e){if(-1===e._status){var t=e._result;t=t(),e._status=0,e._result=t,t.then((function(t){0===e._status&&(t=t.default,e._status=1,e._result=t)}),(function(t){0===e._status&&(e._status=2,e._result=t)}))}if(1===e._status)return e._result;throw e._result}var T={current:null};function R(){var e=T.current;if(null===e)throw Error(d(321));return e}var C={ReactCurrentDispatcher:T,ReactCurrentBatchConfig:{transition:0},ReactCurrentOwner:w,IsSomeRendererActing:{current:!1},assign:r};t.Children={map:k,forEach:function(e,t,n){k(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return k(e,(function(){t++})),t},toArray:function(e){return k(e,(function(e){return e}))||[]},only:function(e){if(!x(e))throw Error(d(143));return e}},t.Component=m,t.PureComponent=g,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=C,t.cloneElement=function(e,t,n){if(null==e)throw Error(d(267,e));var i=r({},e.props),a=e.key,u=e.ref,c=e._owner;if(null!=t){if(void 0!==t.ref&&(u=t.ref,c=w.current),void 0!==t.key&&(a=""+t.key),e.type&&e.type.defaultProps)var s=e.type.defaultProps;for(l in t)O.call(t,l)&&!E.hasOwnProperty(l)&&(i[l]=void 0===t[l]&&void 0!==s?s[l]:t[l])}var l=arguments.length-2;if(1===l)i.children=n;else if(1<l){s=Array(l);for(var f=0;f<l;f++)s[f]=arguments[f+2];i.children=s}return{$$typeof:o,type:e.type,key:a,ref:u,props:i,_owner:c}},t.createContext=function(e,t){return void 0===t&&(t=null),(e={$$typeof:u,_calculateChangedBits:t,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:a,_context:e},e.Consumer=e},t.createElement=_,t.createFactory=function(e){var t=_.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:c,render:e}},t.isValidElement=x,t.lazy=function(e){return{$$typeof:l,_payload:{_status:-1,_result:e},_init:I}},t.memo=function(e,t){return{$$typeof:s,type:e,compare:void 0===t?null:t}},t.useCallback=function(e,t){return R().useCallback(e,t)},t.useContext=function(e,t){return R().useContext(e,t)},t.useDebugValue=function(){},t.useEffect=function(e,t){return R().useEffect(e,t)},t.useImperativeHandle=function(e,t,n){return R().useImperativeHandle(e,t,n)},t.useLayoutEffect=function(e,t){return R().useLayoutEffect(e,t)},t.useMemo=function(e,t){return R().useMemo(e,t)},t.useReducer=function(e,t,n){return R().useReducer(e,t,n)},t.useRef=function(e){return R().useRef(e)},t.useState=function(e){return R().useState(e)},t.version="17.0.2"},84258:(e,t,n)=>{"use strict";e.exports=n(32867)},13586:function(e,t,n){!function(e){"use strict";function t(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}function r(e,t){Object.defineProperty(this,"kind",{value:e,enumerable:!0}),t&&t.length&&Object.defineProperty(this,"path",{value:t,enumerable:!0})}function o(e,t,n){o.super_.call(this,"E",e),Object.defineProperty(this,"lhs",{value:t,enumerable:!0}),Object.defineProperty(this,"rhs",{value:n,enumerable:!0})}function i(e,t){i.super_.call(this,"N",e),Object.defineProperty(this,"rhs",{value:t,enumerable:!0})}function a(e,t){a.super_.call(this,"D",e),Object.defineProperty(this,"lhs",{value:t,enumerable:!0})}function u(e,t,n){u.super_.call(this,"A",e),Object.defineProperty(this,"index",{value:t,enumerable:!0}),Object.defineProperty(this,"item",{value:n,enumerable:!0})}function c(e,t,n){var r=e.slice((n||t)+1||e.length);return e.length=t<0?e.length+t:t,e.push.apply(e,r),e}function s(e){var t=void 0===e?"undefined":T(e);return"object"!==t?t:e===Math?"math":null===e?"null":Array.isArray(e)?"array":"[object Date]"===Object.prototype.toString.call(e)?"date":"function"==typeof e.toString&&/^\/.*\//.test(e.toString())?"regexp":"object"}function l(e,t,n,r,f,p,d){d=d||[];var h=(f=f||[]).slice(0);if(void 0!==p){if(r){if("function"==typeof r&&r(h,p))return;if("object"===(void 0===r?"undefined":T(r))){if(r.prefilter&&r.prefilter(h,p))return;if(r.normalize){var y=r.normalize(h,p,e,t);y&&(e=y[0],t=y[1])}}}h.push(p)}"regexp"===s(e)&&"regexp"===s(t)&&(e=e.toString(),t=t.toString());var m=void 0===e?"undefined":T(e),v=void 0===t?"undefined":T(t),g="undefined"!==m||d&&d[d.length-1].lhs&&d[d.length-1].lhs.hasOwnProperty(p),b="undefined"!==v||d&&d[d.length-1].rhs&&d[d.length-1].rhs.hasOwnProperty(p);if(!g&&b)n(new i(h,t));else if(!b&&g)n(new a(h,e));else if(s(e)!==s(t))n(new o(h,e,t));else if("date"===s(e)&&e-t!=0)n(new o(h,e,t));else if("object"===m&&null!==e&&null!==t)if(d.filter((function(t){return t.lhs===e})).length)e!==t&&n(new o(h,e,t));else{if(d.push({lhs:e,rhs:t}),Array.isArray(e)){var w;for(e.length,w=0;w<e.length;w++)w>=t.length?n(new u(h,w,new a(void 0,e[w]))):l(e[w],t[w],n,r,h,w,d);for(;w<t.length;)n(new u(h,w,new i(void 0,t[w++])))}else{var O=Object.keys(e),E=Object.keys(t);O.forEach((function(o,i){var a=E.indexOf(o);a>=0?(l(e[o],t[o],n,r,h,o,d),E=c(E,a)):l(e[o],void 0,n,r,h,o,d)})),E.forEach((function(e){l(void 0,t[e],n,r,h,e,d)}))}d.length=d.length-1}else e!==t&&("number"===m&&isNaN(e)&&isNaN(t)||n(new o(h,e,t)))}function f(e,t,n,r){return r=r||[],l(e,t,(function(e){e&&r.push(e)}),n),r.length?r:void 0}function p(e,t,n){if(n.path&&n.path.length){var r,o=e[t],i=n.path.length-1;for(r=0;r<i;r++)o=o[n.path[r]];switch(n.kind){case"A":p(o[n.path[r]],n.index,n.item);break;case"D":delete o[n.path[r]];break;case"E":case"N":o[n.path[r]]=n.rhs}}else switch(n.kind){case"A":p(e[t],n.index,n.item);break;case"D":e=c(e,t);break;case"E":case"N":e[t]=n.rhs}return e}function d(e,t,n){if(e&&t&&n&&n.kind){for(var r=e,o=-1,i=n.path?n.path.length-1:0;++o<i;)void 0===r[n.path[o]]&&(r[n.path[o]]="number"==typeof n.path[o]?[]:{}),r=r[n.path[o]];switch(n.kind){case"A":p(n.path?r[n.path[o]]:r,n.index,n.item);break;case"D":delete r[n.path[o]];break;case"E":case"N":r[n.path[o]]=n.rhs}}}function h(e,t,n){if(n.path&&n.path.length){var r,o=e[t],i=n.path.length-1;for(r=0;r<i;r++)o=o[n.path[r]];switch(n.kind){case"A":h(o[n.path[r]],n.index,n.item);break;case"D":case"E":o[n.path[r]]=n.lhs;break;case"N":delete o[n.path[r]]}}else switch(n.kind){case"A":h(e[t],n.index,n.item);break;case"D":case"E":e[t]=n.lhs;break;case"N":e=c(e,t)}return e}function y(e,t,n){if(e&&t&&n&&n.kind){var r,o,i=e;for(o=n.path.length-1,r=0;r<o;r++)void 0===i[n.path[r]]&&(i[n.path[r]]={}),i=i[n.path[r]];switch(n.kind){case"A":h(i[n.path[r]],n.index,n.item);break;case"D":case"E":i[n.path[r]]=n.lhs;break;case"N":delete i[n.path[r]]}}}function m(e,t,n){e&&t&&l(e,t,(function(r){n&&!n(e,t,r)||d(e,t,r)}))}function v(e){return"color: "+A[e].color+"; font-weight: bold"}function g(e){var t=e.kind,n=e.path,r=e.lhs,o=e.rhs,i=e.index,a=e.item;switch(t){case"E":return[n.join("."),r,"→",o];case"N":return[n.join("."),o];case"D":return[n.join(".")];case"A":return[n.join(".")+"["+i+"]",a];default:return[]}}function b(e,t,n,r){var o=f(e,t);try{r?n.groupCollapsed("diff"):n.group("diff")}catch(e){n.log("diff")}o?o.forEach((function(e){var t=e.kind,r=g(e);n.log.apply(n,["%c "+A[t].text,v(t)].concat(R(r)))})):n.log("—— no diff ——");try{n.groupEnd()}catch(e){n.log("—— diff end —— ")}}function w(e,t,n,r){switch(void 0===e?"undefined":T(e)){case"object":return"function"==typeof e[r]?e[r].apply(e,R(n)):e[r];case"function":return e(t);default:return e}}function O(e){var t=e.timestamp,n=e.duration;return function(e,r,o){var i=["action"];return i.push("%c"+String(e.type)),t&&i.push("%c@ "+r),n&&i.push("%c(in "+o.toFixed(2)+" ms)"),i.join(" ")}}function E(e,t){var n=t.logger,r=t.actionTransformer,o=t.titleFormatter,i=void 0===o?O(t):o,a=t.collapsed,u=t.colors,c=t.level,s=t.diff,l=void 0===t.titleFormatter;e.forEach((function(o,f){var p=o.started,d=o.startedTime,h=o.action,y=o.prevState,m=o.error,v=o.took,g=o.nextState,O=e[f+1];O&&(g=O.prevState,v=O.started-p);var E=r(h),_="function"==typeof a?a((function(){return g}),h,o):a,x=k(d),S=u.title?"color: "+u.title(E)+";":"",j=["color: gray; font-weight: lighter;"];j.push(S),t.timestamp&&j.push("color: gray; font-weight: lighter;"),t.duration&&j.push("color: gray; font-weight: lighter;");var P=i(E,x,v);try{_?u.title&&l?n.groupCollapsed.apply(n,["%c "+P].concat(j)):n.groupCollapsed(P):u.title&&l?n.group.apply(n,["%c "+P].concat(j)):n.group(P)}catch(e){n.log(P)}var I=w(c,E,[y],"prevState"),T=w(c,E,[E],"action"),R=w(c,E,[m,y],"error"),C=w(c,E,[g],"nextState");if(I)if(u.prevState){var A="color: "+u.prevState(y)+"; font-weight: bold";n[I]("%c prev state",A,y)}else n[I]("prev state",y);if(T)if(u.action){var N="color: "+u.action(E)+"; font-weight: bold";n[T]("%c action ",N,E)}else n[T]("action ",E);if(m&&R)if(u.error){var L="color: "+u.error(m,y)+"; font-weight: bold;";n[R]("%c error ",L,m)}else n[R]("error ",m);if(C)if(u.nextState){var D="color: "+u.nextState(g)+"; font-weight: bold";n[C]("%c next state",D,g)}else n[C]("next state",g);s&&b(y,g,n,_);try{n.groupEnd()}catch(e){n.log("—— log end ——")}}))}function _(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=Object.assign({},N,e),n=t.logger,r=t.stateTransformer,o=t.errorTransformer,i=t.predicate,a=t.logErrors,u=t.diffPredicate;if(void 0===n)return function(){return function(e){return function(t){return e(t)}}};if(e.getState&&e.dispatch)return function(){return function(e){return function(t){return e(t)}}};var c=[];return function(e){var n=e.getState;return function(e){return function(s){if("function"==typeof i&&!i(n,s))return e(s);var l={};c.push(l),l.started=I.now(),l.startedTime=new Date,l.prevState=r(n()),l.action=s;var f=void 0;if(a)try{f=e(s)}catch(e){l.error=o(e)}else f=e(s);l.took=I.now()-l.started,l.nextState=r(n());var p=t.diff&&"function"==typeof u?u(n,s):t.diff;if(E(c,Object.assign({},t,{diff:p})),c.length=0,l.error)throw l.error;return f}}}}var x,S,j=function(e,t){return new Array(t+1).join(e)},P=function(e,t){return j("0",t-e.toString().length)+e},k=function(e){return P(e.getHours(),2)+":"+P(e.getMinutes(),2)+":"+P(e.getSeconds(),2)+"."+P(e.getMilliseconds(),3)},I="undefined"!=typeof performance&&null!==performance&&"function"==typeof performance.now?performance:Date,T="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},R=function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)},C=[];x="object"===(void 0===n.g?"undefined":T(n.g))&&n.g?n.g:"undefined"!=typeof window?window:{},(S=x.DeepDiff)&&C.push((function(){void 0!==S&&x.DeepDiff===f&&(x.DeepDiff=S,S=void 0)})),t(o,r),t(i,r),t(a,r),t(u,r),Object.defineProperties(f,{diff:{value:f,enumerable:!0},observableDiff:{value:l,enumerable:!0},applyDiff:{value:m,enumerable:!0},applyChange:{value:d,enumerable:!0},revertChange:{value:y,enumerable:!0},isConflict:{value:function(){return void 0!==S},enumerable:!0},noConflict:{value:function(){return C&&(C.forEach((function(e){e()})),C=null),f},enumerable:!0}});var A={E:{color:"#2196F3",text:"CHANGED:"},N:{color:"#4CAF50",text:"ADDED:"},D:{color:"#F44336",text:"DELETED:"},A:{color:"#2196F3",text:"ARRAY:"}},N={level:"log",logger:console,logErrors:!0,collapsed:void 0,predicate:void 0,duration:!1,timestamp:!0,stateTransformer:function(e){return e},actionTransformer:function(e){return e},errorTransformer:function(e){return e},colors:{title:function(){return"inherit"},prevState:function(){return"#9E9E9E"},action:function(){return"#03A9F4"},nextState:function(){return"#4CAF50"},error:function(){return"#F20404"}},diff:!1,diffPredicate:void 0,transformer:void 0},L=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.dispatch,n=e.getState;return"function"==typeof t||"function"==typeof n?_()({dispatch:t,getState:n}):void 0};e.defaults=N,e.createLogger=_,e.logger=L,e.default=L,Object.defineProperty(e,"__esModule",{value:!0})}(t)},56325:(e,t)=>{"use strict";var n=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.gw=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=void 0,r=new Promise((function(r){n=setTimeout((function(){return r(t)}),e)}));return r[u]=function(){return clearTimeout(n)},r};var o=function(e){return"@@redux-saga/"+e},i=o("TASK"),a=o("HELPER"),u=(o("MATCH"),o("CANCEL_PROMISE")),c=o("SAGA_ACTION"),s=(o("SELF_CANCELLATION"),function(e){return function(){return e}});s(!0),s(!1);var l=Object.prototype.hasOwnProperty;function f(e,t){return p.notUndef(e)&&l.call(e,t)}var p={undef:function(e){return null==e},notUndef:function(e){return null!=e},func:function(e){return"function"==typeof e},number:function(e){return"number"==typeof e},string:function(e){return"string"==typeof e},array:Array.isArray,object:function(e){return e&&!p.array(e)&&"object"===(void 0===e?"undefined":r(e))},promise:function(e){return e&&p.func(e.then)},iterator:function(e){return e&&p.func(e.next)&&p.func(e.throw)},iterable:function(e){return e&&p.func(Symbol)?p.func(e[Symbol.iterator]):p.array(e)},task:function(e){return e&&e[i]},observable:function(e){return e&&p.func(e.subscribe)},buffer:function(e){return e&&p.func(e.isEmpty)&&p.func(e.take)&&p.func(e.put)},pattern:function(e){return e&&(p.string(e)||"symbol"===(void 0===e?"undefined":r(e))||p.func(e)||p.array(e))},channel:function(e){return e&&p.func(e.take)&&p.func(e.close)},helper:function(e){return e&&e[a]},stringableFunc:function(e){return p.func(e)&&f(e,"toString")}};function d(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=n({},e),r=new Promise((function(e,n){t.resolve=e,t.reject=n}));return t.promise=r,t}function h(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return function(){return++e}}h();var y=function(e){throw e},m=function(e){return{value:e,done:!0}};function v(e,t){}},51324:(e,t,n)=>{"use strict";function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function a(e){return"Minified Redux error #"+e+"; visit https://redux.js.org/Errors?code="+e+" for the full message or use the non-minified dev environment for full errors. "}n.d(t,{md:()=>m,DE:()=>h,UY:()=>p,qC:()=>y,MT:()=>f});var u="function"==typeof Symbol&&Symbol.observable||"@@observable",c=function(){return Math.random().toString(36).substring(7).split("").join(".")},s={INIT:"@@redux/INIT"+c(),REPLACE:"@@redux/REPLACE"+c(),PROBE_UNKNOWN_ACTION:function(){return"@@redux/PROBE_UNKNOWN_ACTION"+c()}};function l(e){if("object"!=typeof e||null===e)return!1;for(var t=e;null!==Object.getPrototypeOf(t);)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t}function f(e,t,n){var r;if("function"==typeof t&&"function"==typeof n||"function"==typeof n&&"function"==typeof arguments[3])throw new Error(a(0));if("function"==typeof t&&void 0===n&&(n=t,t=void 0),void 0!==n){if("function"!=typeof n)throw new Error(a(1));return n(f)(e,t)}if("function"!=typeof e)throw new Error(a(2));var o=e,i=t,c=[],p=c,d=!1;function h(){p===c&&(p=c.slice())}function y(){if(d)throw new Error(a(3));return i}function m(e){if("function"!=typeof e)throw new Error(a(4));if(d)throw new Error(a(5));var t=!0;return h(),p.push(e),function(){if(t){if(d)throw new Error(a(6));t=!1,h();var n=p.indexOf(e);p.splice(n,1),c=null}}}function v(e){if(!l(e))throw new Error(a(7));if(void 0===e.type)throw new Error(a(8));if(d)throw new Error(a(9));try{d=!0,i=o(i,e)}finally{d=!1}for(var t=c=p,n=0;n<t.length;n++){(0,t[n])()}return e}function g(e){if("function"!=typeof e)throw new Error(a(10));o=e,v({type:s.REPLACE})}function b(){var e,t=m;return(e={subscribe:function(e){if("object"!=typeof e||null===e)throw new Error(a(11));function n(){e.next&&e.next(y())}return n(),{unsubscribe:t(n)}}})[u]=function(){return this},e}return v({type:s.INIT}),(r={dispatch:v,subscribe:m,getState:y,replaceReducer:g})[u]=b,r}function p(e){for(var t=Object.keys(e),n={},r=0;r<t.length;r++){var o=t[r];0,"function"==typeof e[o]&&(n[o]=e[o])}var i,u=Object.keys(n);try{!function(e){Object.keys(e).forEach((function(t){var n=e[t];if(void 0===n(void 0,{type:s.INIT}))throw new Error(a(12));if(void 0===n(void 0,{type:s.PROBE_UNKNOWN_ACTION()}))throw new Error(a(13))}))}(n)}catch(e){i=e}return function(e,t){if(void 0===e&&(e={}),i)throw i;for(var r=!1,o={},c=0;c<u.length;c++){var s=u[c],l=n[s],f=e[s],p=l(f,t);if(void 0===p){t&&t.type;throw new Error(a(14))}o[s]=p,r=r||p!==f}return(r=r||u.length!==Object.keys(e).length)?o:e}}function d(e,t){return function(){return t(e.apply(this,arguments))}}function h(e,t){if("function"==typeof e)return d(e,t);if("object"!=typeof e||null===e)throw new Error(a(16));var n={};for(var r in e){var o=e[r];"function"==typeof o&&(n[r]=d(o,t))}return n}function y(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return 0===t.length?function(e){return e}:1===t.length?t[0]:t.reduce((function(e,t){return function(){return e(t.apply(void 0,arguments))}}))}function m(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return function(e){return function(){var n=e.apply(void 0,arguments),r=function(){throw new Error(a(15))},o={getState:n.getState,dispatch:function(){return r.apply(void 0,arguments)}},u=t.map((function(e){return e(o)}));return r=y.apply(void 0,u)(n.dispatch),i(i({},n),{},{dispatch:r})}}}},39425:e=>{var t=function(e){"use strict";var t,n=Object.prototype,r=n.hasOwnProperty,o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",a=o.asyncIterator||"@@asyncIterator",u=o.toStringTag||"@@toStringTag";function c(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,n){return e[t]=n}}function s(e,t,n,r){var o=t&&t.prototype instanceof m?t:m,i=Object.create(o.prototype),a=new k(r||[]);return i._invoke=function(e,t,n){var r=f;return function(o,i){if(r===d)throw new Error("Generator is already running");if(r===h){if("throw"===o)throw i;return T()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=S(a,n);if(u){if(u===y)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(r===f)throw r=h,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r=d;var c=l(e,t,n);if("normal"===c.type){if(r=n.done?h:p,c.arg===y)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r=h,n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function l(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=s;var f="suspendedStart",p="suspendedYield",d="executing",h="completed",y={};function m(){}function v(){}function g(){}var b={};b[i]=function(){return this};var w=Object.getPrototypeOf,O=w&&w(w(I([])));O&&O!==n&&r.call(O,i)&&(b=O);var E=g.prototype=m.prototype=Object.create(b);function _(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function x(e,t){function n(o,i,a,u){var c=l(e[o],e,i);if("throw"!==c.type){var s=c.arg,f=s.value;return f&&"object"==typeof f&&r.call(f,"__await")?t.resolve(f.__await).then((function(e){n("next",e,a,u)}),(function(e){n("throw",e,a,u)})):t.resolve(f).then((function(e){s.value=e,a(s)}),(function(e){return n("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,r){function i(){return new t((function(t,o){n(e,r,t,o)}))}return o=o?o.then(i,i):i()}}function S(e,n){var r=e.iterator[n.method];if(r===t){if(n.delegate=null,"throw"===n.method){if(e.iterator.return&&(n.method="return",n.arg=t,S(e,n),"throw"===n.method))return y;n.method="throw",n.arg=new TypeError("The iterator does not provide a 'throw' method")}return y}var o=l(r,e.iterator,n.arg);if("throw"===o.type)return n.method="throw",n.arg=o.arg,n.delegate=null,y;var i=o.arg;return i?i.done?(n[e.resultName]=i.value,n.next=e.nextLoc,"return"!==n.method&&(n.method="next",n.arg=t),n.delegate=null,y):i:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,y)}function j(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function P(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function k(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(j,this),this.reset(!0)}function I(e){if(e){var n=e[i];if(n)return n.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var o=-1,a=function n(){for(;++o<e.length;)if(r.call(e,o))return n.value=e[o],n.done=!1,n;return n.value=t,n.done=!0,n};return a.next=a}}return{next:T}}function T(){return{value:t,done:!0}}return v.prototype=E.constructor=g,g.constructor=v,v.displayName=c(g,u,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===v||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,g):(e.__proto__=g,c(e,u,"GeneratorFunction")),e.prototype=Object.create(E),e},e.awrap=function(e){return{__await:e}},_(x.prototype),x.prototype[a]=function(){return this},e.AsyncIterator=x,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new x(s(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},_(E),c(E,u,"Generator"),E[i]=function(){return this},E.toString=function(){return"[object Generator]"},e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=I,k.prototype={constructor:k,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=t,this.done=!1,this.delegate=null,this.method="next",this.arg=t,this.tryEntries.forEach(P),!e)for(var n in this)"t"===n.charAt(0)&&r.call(this,n)&&!isNaN(+n.slice(1))&&(this[n]=t)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var n=this;function o(r,o){return u.type="throw",u.arg=e,n.next=r,o&&(n.method="next",n.arg=t),!!o}for(var i=this.tryEntries.length-1;i>=0;--i){var a=this.tryEntries[i],u=a.completion;if("root"===a.tryLoc)return o("end");if(a.tryLoc<=this.prev){var c=r.call(a,"catchLoc"),s=r.call(a,"finallyLoc");if(c&&s){if(this.prev<a.catchLoc)return o(a.catchLoc,!0);if(this.prev<a.finallyLoc)return o(a.finallyLoc)}else if(c){if(this.prev<a.catchLoc)return o(a.catchLoc,!0)}else{if(!s)throw new Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return o(a.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,y):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),y},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),P(n),y}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;P(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,n,r){return this.delegate={iterator:I(e),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=t),y}},e}(e.exports);try{regeneratorRuntime=t}catch(e){Function("r","regeneratorRuntime = r")(t)}},62673:(e,t,n)=>{var r=n(16274),o=r.Buffer;function i(e,t){for(var n in e)t[n]=e[n]}function a(e,t,n){return o(e,t,n)}o.from&&o.alloc&&o.allocUnsafe&&o.allocUnsafeSlow?e.exports=r:(i(r,t),t.Buffer=a),a.prototype=Object.create(o.prototype),i(o,a),a.from=function(e,t,n){if("number"==typeof e)throw new TypeError("Argument must not be a number");return o(e,t,n)},a.alloc=function(e,t,n){if("number"!=typeof e)throw new TypeError("Argument must be a number");var r=o(e);return void 0!==t?"string"==typeof n?r.fill(t,n):r.fill(t):r.fill(0),r},a.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return o(e)},a.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return r.SlowBuffer(e)}},44238:e=>{"use strict";var t=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,o=!1,i=void 0;try{for(var a,u=e[Symbol.iterator]();!(r=(a=u.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{!r&&u.return&&u.return()}finally{if(o)throw i}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")};e.exports=function(e){var n=e.data,r=e.multiSection;function o(e){var o=t(e,2),i=o[0],a=o[1];return r?null===a||a===n[i]-1?null===(i=function(e){for(null===e?e=0:e++;e<n.length&&0===n[e];)e++;return e===n.length?null:e}(i))?[null,null]:[i,0]:[i,a+1]:0===n||a===n-1?[null,null]:null===a?[null,0]:[null,a+1]}return{next:o,prev:function(e){var o=t(e,2),i=o[0],a=o[1];return r?null===a||0===a?null===(i=function(e){for(null===e?e=n.length-1:e--;e>=0&&0===n[e];)e--;return-1===e?null:e}(i))?[null,null]:[i,n[i]-1]:[i,a-1]:0===n||0===a?[null,null]:null===a?[null,n-1]:[null,a-1]},isLast:function(e){return null===o(e)[1]}}}},10017:(e,t,n)=>{"use strict";var r=n(57990),o=function(){for(var e=r(16),t="",n=0;n<16;++n)t+=e[n].toString(16);return t}(),i=new RegExp('(\\\\)?"@__(F|R|D|M|S|A|U|I|B|L)-'+o+'-(\\d+)__@"',"g"),a=/\{\s*\[native code\]\s*\}/g,u=/function.*?\(/,c=/.*?=>.*?/,s=/[<>\/\u2028\u2029]/g,l=["*","async"],f={"<":"\\u003C",">":"\\u003E","/":"\\u002F","\u2028":"\\u2028","\u2029":"\\u2029"};function p(e){return f[e]}e.exports=function e(t,n){n||(n={}),"number"!=typeof n&&"string"!=typeof n||(n={space:n});var r,f=[],d=[],h=[],y=[],m=[],v=[],g=[],b=[],w=[],O=[];return n.ignoreFunction&&"function"==typeof t&&(t=void 0),void 0===t?String(t):"string"!=typeof(r=n.isJSON&&!n.space?JSON.stringify(t):JSON.stringify(t,n.isJSON?null:function(e,t){if(n.ignoreFunction&&function(e){var t=[];for(var n in e)"function"==typeof e[n]&&t.push(n);for(var r=0;r<t.length;r++)delete e[t[r]]}(t),!t&&void 0!==t)return t;var r=this[e],i=typeof r;if("object"===i){if(r instanceof RegExp)return"@__R-"+o+"-"+(d.push(r)-1)+"__@";if(r instanceof Date)return"@__D-"+o+"-"+(h.push(r)-1)+"__@";if(r instanceof Map)return"@__M-"+o+"-"+(y.push(r)-1)+"__@";if(r instanceof Set)return"@__S-"+o+"-"+(m.push(r)-1)+"__@";if(r instanceof Array&&r.filter((function(){return!0})).length!==r.length)return"@__A-"+o+"-"+(v.push(r)-1)+"__@";if(r instanceof URL)return"@__L-"+o+"-"+(O.push(r)-1)+"__@"}return"function"===i?"@__F-"+o+"-"+(f.push(r)-1)+"__@":"undefined"===i?"@__U-"+o+"-"+(g.push(r)-1)+"__@":"number"!==i||isNaN(r)||isFinite(r)?"bigint"===i?"@__B-"+o+"-"+(w.push(r)-1)+"__@":t:"@__I-"+o+"-"+(b.push(r)-1)+"__@"},n.space))?String(r):(!0!==n.unsafe&&(r=r.replace(s,p)),0===f.length&&0===d.length&&0===h.length&&0===y.length&&0===m.length&&0===v.length&&0===g.length&&0===b.length&&0===w.length&&0===O.length?r:r.replace(i,(function(t,r,o,i){return r?t:"D"===o?'new Date("'+h[i].toISOString()+'")':"R"===o?"new RegExp("+e(d[i].source)+', "'+d[i].flags+'")':"M"===o?"new Map("+e(Array.from(y[i].entries()),n)+")":"S"===o?"new Set("+e(Array.from(m[i].values()),n)+")":"A"===o?"Array.prototype.slice.call("+e(Object.assign({length:v[i].length},v[i]),n)+")":"U"===o?"undefined":"I"===o?b[i]:"B"===o?'BigInt("'+w[i]+'")':"L"===o?'new URL("'+O[i].toString()+'")':function(e){var t=e.toString();if(a.test(t))throw new TypeError("Serializing native function: "+e.name);if(u.test(t))return t;if(c.test(t))return t;var n=t.indexOf("("),r=t.substr(0,n).trim().split(" ").filter((function(e){return e.length>0}));return r.filter((function(e){return-1===l.indexOf(e)})).length>0?(r.indexOf("async")>-1?"async ":"")+"function"+(r.join("").indexOf("*")>-1?"*":"")+t.substr(n):t}(f[i])})))}},9985:e=>{"use strict";e.exports=function(e,t){if(e===t)return!0;if(!e||!t)return!1;var n=e.length;if(t.length!==n)return!1;for(var r=0;r<n;r++)if(e[r]!==t[r])return!1;return!0}},44167:e=>{e.exports=function(e,t,n,r){var o=n?n.call(r,e,t):void 0;if(void 0!==o)return!!o;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var i=Object.keys(e),a=Object.keys(t);if(i.length!==a.length)return!1;for(var u=Object.prototype.hasOwnProperty.bind(t),c=0;c<i.length;c++){var s=i[c];if(!u(s))return!1;var l=e[s],f=t[s];if(!1===(o=n?n.call(r,l,f,s):void 0)||void 0===o&&l!==f)return!1}return!0}},31059:(e,t,n)=>{"use strict";var r=n(13049),o=n(77352),i=n(50266),a=r("%TypeError%"),u=r("%WeakMap%",!0),c=r("%Map%",!0),s=o("WeakMap.prototype.get",!0),l=o("WeakMap.prototype.set",!0),f=o("WeakMap.prototype.has",!0),p=o("Map.prototype.get",!0),d=o("Map.prototype.set",!0),h=o("Map.prototype.has",!0),y=function(e,t){for(var n,r=e;null!==(n=r.next);r=n)if(n.key===t)return r.next=n.next,n.next=e.next,e.next=n,n};e.exports=function(){var e,t,n,r={assert:function(e){if(!r.has(e))throw new a("Side channel does not contain "+i(e))},get:function(r){if(u&&r&&("object"==typeof r||"function"==typeof r)){if(e)return s(e,r)}else if(c){if(t)return p(t,r)}else if(n)return function(e,t){var n=y(e,t);return n&&n.value}(n,r)},has:function(r){if(u&&r&&("object"==typeof r||"function"==typeof r)){if(e)return f(e,r)}else if(c){if(t)return h(t,r)}else if(n)return function(e,t){return!!y(e,t)}(n,r);return!1},set:function(r,o){u&&r&&("object"==typeof r||"function"==typeof r)?(e||(e=new u),l(e,r,o)):c?(t||(t=new c),d(t,r,o)):(n||(n={key:{},next:null}),function(e,t,n){var r=y(e,t);r?r.value=n:e.next={key:t,next:e.next,value:n}}(n,r,o))}};return r}},50266:(e,t,n)=>{var r="function"==typeof Map&&Map.prototype,o=Object.getOwnPropertyDescriptor&&r?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,i=r&&o&&"function"==typeof o.get?o.get:null,a=r&&Map.prototype.forEach,u="function"==typeof Set&&Set.prototype,c=Object.getOwnPropertyDescriptor&&u?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,s=u&&c&&"function"==typeof c.get?c.get:null,l=u&&Set.prototype.forEach,f="function"==typeof WeakMap&&WeakMap.prototype?WeakMap.prototype.has:null,p="function"==typeof WeakSet&&WeakSet.prototype?WeakSet.prototype.has:null,d=Boolean.prototype.valueOf,h=Object.prototype.toString,y=Function.prototype.toString,m=String.prototype.match,v="function"==typeof BigInt?BigInt.prototype.valueOf:null,g=Object.getOwnPropertySymbols,b="function"==typeof Symbol?Symbol.prototype.toString:null,w=Object.prototype.propertyIsEnumerable,O=n(69599).custom,E=O&&j(O)?O:null;function _(e,t,n){var r="double"===(n.quoteStyle||t)?'"':"'";return r+e+r}function x(e){return String(e).replace(/"/g,"&quot;")}function S(e){return"[object Array]"===I(e)}function j(e){return"[object Symbol]"===I(e)}e.exports=function e(t,n,r,o){var u=n||{};if(k(u,"quoteStyle")&&"single"!==u.quoteStyle&&"double"!==u.quoteStyle)throw new TypeError('option "quoteStyle" must be "single" or "double"');if(k(u,"maxStringLength")&&("number"==typeof u.maxStringLength?u.maxStringLength<0&&u.maxStringLength!==1/0:null!==u.maxStringLength))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var c=!k(u,"customInspect")||u.customInspect;if("boolean"!=typeof c)throw new TypeError('option "customInspect", if provided, must be `true` or `false`');if(k(u,"indent")&&null!==u.indent&&"\t"!==u.indent&&!(parseInt(u.indent,10)===u.indent&&u.indent>0))throw new TypeError('options "indent" must be "\\t", an integer > 0, or `null`');if(void 0===t)return"undefined";if(null===t)return"null";if("boolean"==typeof t)return t?"true":"false";if("string"==typeof t)return R(t,u);if("number"==typeof t)return 0===t?1/0/t>0?"0":"-0":String(t);if("bigint"==typeof t)return String(t)+"n";var h=void 0===u.depth?5:u.depth;if(void 0===r&&(r=0),r>=h&&h>0&&"object"==typeof t)return S(t)?"[Array]":"[Object]";var g=function(e,t){var n;if("\t"===e.indent)n="\t";else{if(!("number"==typeof e.indent&&e.indent>0))return null;n=Array(e.indent+1).join(" ")}return{base:n,prev:Array(t+1).join(n)}}(u,r);if(void 0===o)o=[];else if(T(o,t)>=0)return"[Circular]";function w(t,n,i){if(n&&(o=o.slice()).push(n),i){var a={depth:u.depth};return k(u,"quoteStyle")&&(a.quoteStyle=u.quoteStyle),e(t,a,r+1,o)}return e(t,u,r+1,o)}if("function"==typeof t){var O=function(e){if(e.name)return e.name;var t=m.call(y.call(e),/^function\s*([\w$]+)/);if(t)return t[1];return null}(t),P=M(t,w);return"[Function"+(O?": "+O:" (anonymous)")+"]"+(P.length>0?" { "+P.join(", ")+" }":"")}if(j(t)){var C=b.call(t);return"object"==typeof t?A(C):C}if(function(e){if(!e||"object"!=typeof e)return!1;if("undefined"!=typeof HTMLElement&&e instanceof HTMLElement)return!0;return"string"==typeof e.nodeName&&"function"==typeof e.getAttribute}(t)){for(var F="<"+String(t.nodeName).toLowerCase(),U=t.attributes||[],B=0;B<U.length;B++)F+=" "+U[B].name+"="+_(x(U[B].value),"double",u);return F+=">",t.childNodes&&t.childNodes.length&&(F+="..."),F+="</"+String(t.nodeName).toLowerCase()+">"}if(S(t)){if(0===t.length)return"[]";var H=M(t,w);return g&&!function(e){for(var t=0;t<e.length;t++)if(T(e[t],"\n")>=0)return!1;return!0}(H)?"["+D(H,g)+"]":"[ "+H.join(", ")+" ]"}if(function(e){return"[object Error]"===I(e)}(t)){var q=M(t,w);return 0===q.length?"["+String(t)+"]":"{ ["+String(t)+"] "+q.join(", ")+" }"}if("object"==typeof t&&c){if(E&&"function"==typeof t[E])return t[E]();if("function"==typeof t.inspect)return t.inspect()}if(function(e){if(!i||!e||"object"!=typeof e)return!1;try{i.call(e);try{s.call(e)}catch(e){return!0}return e instanceof Map}catch(e){}return!1}(t)){var z=[];return a.call(t,(function(e,n){z.push(w(n,t,!0)+" => "+w(e,t))})),L("Map",i.call(t),z,g)}if(function(e){if(!s||!e||"object"!=typeof e)return!1;try{s.call(e);try{i.call(e)}catch(e){return!0}return e instanceof Set}catch(e){}return!1}(t)){var G=[];return l.call(t,(function(e){G.push(w(e,t))})),L("Set",s.call(t),G,g)}if(function(e){if(!f||!e||"object"!=typeof e)return!1;try{f.call(e,f);try{p.call(e,p)}catch(e){return!0}return e instanceof WeakMap}catch(e){}return!1}(t))return N("WeakMap");if(function(e){if(!p||!e||"object"!=typeof e)return!1;try{p.call(e,p);try{f.call(e,f)}catch(e){return!0}return e instanceof WeakSet}catch(e){}return!1}(t))return N("WeakSet");if(function(e){return"[object Number]"===I(e)}(t))return A(w(Number(t)));if(function(e){return"[object BigInt]"===I(e)}(t))return A(w(v.call(t)));if(function(e){return"[object Boolean]"===I(e)}(t))return A(d.call(t));if(function(e){return"[object String]"===I(e)}(t))return A(w(String(t)));if(!function(e){return"[object Date]"===I(e)}(t)&&!function(e){return"[object RegExp]"===I(e)}(t)){var W=M(t,w);return 0===W.length?"{}":g?"{"+D(W,g)+"}":"{ "+W.join(", ")+" }"}return String(t)};var P=Object.prototype.hasOwnProperty||function(e){return e in this};function k(e,t){return P.call(e,t)}function I(e){return h.call(e)}function T(e,t){if(e.indexOf)return e.indexOf(t);for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1}function R(e,t){if(e.length>t.maxStringLength){var n=e.length-t.maxStringLength,r="... "+n+" more character"+(n>1?"s":"");return R(e.slice(0,t.maxStringLength),t)+r}return _(e.replace(/(['\\])/g,"\\$1").replace(/[\x00-\x1f]/g,C),"single",t)}function C(e){var t=e.charCodeAt(0),n={8:"b",9:"t",10:"n",12:"f",13:"r"}[t];return n?"\\"+n:"\\x"+(t<16?"0":"")+t.toString(16).toUpperCase()}function A(e){return"Object("+e+")"}function N(e){return e+" { ? }"}function L(e,t,n,r){return e+" ("+t+") {"+(r?D(n,r):n.join(", "))+"}"}function D(e,t){if(0===e.length)return"";var n="\n"+t.prev+t.base;return n+e.join(","+n)+"\n"+t.prev}function M(e,t){var n=S(e),r=[];if(n){r.length=e.length;for(var o=0;o<e.length;o++)r[o]=k(e,o)?t(e[o],e):""}for(var i in e)k(e,i)&&(n&&String(Number(i))===i&&i<e.length||(/[^\w$]/.test(i)?r.push(t(i,e)+": "+t(e[i],e)):r.push(i+": "+t(e[i],e))));if("function"==typeof g)for(var a=g(e),u=0;u<a.length;u++)w.call(e,a[u])&&r.push("["+t(a[u])+"]: "+t(e[a[u]],e));return r}},23205:function(e,t,n){e.exports=function(){"use strict";var e="function"==typeof Promise,t="object"==typeof self?self:n.g,r="undefined"!=typeof Symbol,o="undefined"!=typeof Map,i="undefined"!=typeof Set,a="undefined"!=typeof WeakMap,u="undefined"!=typeof WeakSet,c="undefined"!=typeof DataView,s=r&&void 0!==Symbol.iterator,l=r&&void 0!==Symbol.toStringTag,f=i&&"function"==typeof Set.prototype.entries,p=o&&"function"==typeof Map.prototype.entries,d=f&&Object.getPrototypeOf((new Set).entries()),h=p&&Object.getPrototypeOf((new Map).entries()),y=s&&"function"==typeof Array.prototype[Symbol.iterator],m=y&&Object.getPrototypeOf([][Symbol.iterator]()),v=s&&"function"==typeof String.prototype[Symbol.iterator],g=v&&Object.getPrototypeOf(""[Symbol.iterator]()),b=8,w=-1;function O(n){var r=typeof n;if("object"!==r)return r;if(null===n)return"null";if(n===t)return"global";if(Array.isArray(n)&&(!1===l||!(Symbol.toStringTag in n)))return"Array";if("object"==typeof window&&null!==window){if("object"==typeof window.location&&n===window.location)return"Location";if("object"==typeof window.document&&n===window.document)return"Document";if("object"==typeof window.navigator){if("object"==typeof window.navigator.mimeTypes&&n===window.navigator.mimeTypes)return"MimeTypeArray";if("object"==typeof window.navigator.plugins&&n===window.navigator.plugins)return"PluginArray"}if(("function"==typeof window.HTMLElement||"object"==typeof window.HTMLElement)&&n instanceof window.HTMLElement){if("BLOCKQUOTE"===n.tagName)return"HTMLQuoteElement";if("TD"===n.tagName)return"HTMLTableDataCellElement";if("TH"===n.tagName)return"HTMLTableHeaderCellElement"}}var s=l&&n[Symbol.toStringTag];if("string"==typeof s)return s;var f=Object.getPrototypeOf(n);return f===RegExp.prototype?"RegExp":f===Date.prototype?"Date":e&&f===Promise.prototype?"Promise":i&&f===Set.prototype?"Set":o&&f===Map.prototype?"Map":u&&f===WeakSet.prototype?"WeakSet":a&&f===WeakMap.prototype?"WeakMap":c&&f===DataView.prototype?"DataView":o&&f===h?"Map Iterator":i&&f===d?"Set Iterator":y&&f===m?"Array Iterator":v&&f===g?"String Iterator":null===f?"Object":Object.prototype.toString.call(n).slice(b,w)}return O}()},79952:function(e,t,n){var r;!function(o,i){"use strict";var a="function",u="undefined",c="object",s="string",l="model",f="name",p="type",d="vendor",h="version",y="architecture",m="console",v="mobile",g="tablet",b="smarttv",w="wearable",O="embedded",E="Amazon",_="Apple",x="ASUS",S="BlackBerry",j="Firefox",P="Google",k="Huawei",I="LG",T="Microsoft",R="Motorola",C="Opera",A="Samsung",N="Sony",L="Xiaomi",D="Zebra",M="Facebook",F=function(e){for(var t={},n=0;n<e.length;n++)t[e[n].toUpperCase()]=e[n];return t},U=function(e,t){return typeof e===s&&-1!==B(t).indexOf(B(e))},B=function(e){return e.toLowerCase()},H=function(e,t){if(typeof e===s)return e=e.replace(/^\s\s*/,"").replace(/\s\s*$/,""),typeof t===u?e:e.substring(0,255)},q=function(e,t){for(var n,r,o,u,s,l,f=0;f<t.length&&!s;){var p=t[f],d=t[f+1];for(n=r=0;n<p.length&&!s;)if(s=p[n++].exec(e))for(o=0;o<d.length;o++)l=s[++r],typeof(u=d[o])===c&&u.length>0?2===u.length?typeof u[1]==a?this[u[0]]=u[1].call(this,l):this[u[0]]=u[1]:3===u.length?typeof u[1]!==a||u[1].exec&&u[1].test?this[u[0]]=l?l.replace(u[1],u[2]):i:this[u[0]]=l?u[1].call(this,l,u[2]):i:4===u.length&&(this[u[0]]=l?u[3].call(this,l.replace(u[1],u[2])):i):this[u]=l||i;f+=2}},z=function(e,t){for(var n in t)if(typeof t[n]===c&&t[n].length>0){for(var r=0;r<t[n].length;r++)if(U(t[n][r],e))return"?"===n?i:n}else if(U(t[n],e))return"?"===n?i:n;return e},G={ME:"4.90","NT 3.11":"NT3.51","NT 4.0":"NT4.0",2e3:"NT 5.0",XP:["NT 5.1","NT 5.2"],Vista:"NT 6.0",7:"NT 6.1",8:"NT 6.2",8.1:"NT 6.3",10:["NT 6.4","NT 10.0"],RT:"ARM"},W={browser:[[/\b(?:crmo|crios)\/([\w\.]+)/i],[h,[f,"Chrome"]],[/edg(?:e|ios|a)?\/([\w\.]+)/i],[h,[f,"Edge"]],[/(opera mini)\/([-\w\.]+)/i,/(opera [mobiletab]{3,6})\b.+version\/([-\w\.]+)/i,/(opera)(?:.+version\/|[\/ ]+)([\w\.]+)/i],[f,h],[/opios[\/ ]+([\w\.]+)/i],[h,[f,"Opera Mini"]],[/\bopr\/([\w\.]+)/i],[h,[f,C]],[/(kindle)\/([\w\.]+)/i,/(lunascape|maxthon|netfront|jasmine|blazer)[\/ ]?([\w\.]*)/i,/(avant |iemobile|slim)(?:browser)?[\/ ]?([\w\.]*)/i,/(ba?idubrowser)[\/ ]?([\w\.]+)/i,/(?:ms|\()(ie) ([\w\.]+)/i,/(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale|qqbrowserlite|qq)\/([-\w\.]+)/i,/(weibo)__([\d\.]+)/i],[f,h],[/(?:\buc? ?browser|(?:juc.+)ucweb)[\/ ]?([\w\.]+)/i],[h,[f,"UCBrowser"]],[/\bqbcore\/([\w\.]+)/i],[h,[f,"WeChat(Win) Desktop"]],[/micromessenger\/([\w\.]+)/i],[h,[f,"WeChat"]],[/konqueror\/([\w\.]+)/i],[h,[f,"Konqueror"]],[/trident.+rv[: ]([\w\.]{1,9})\b.+like gecko/i],[h,[f,"IE"]],[/yabrowser\/([\w\.]+)/i],[h,[f,"Yandex"]],[/(avast|avg)\/([\w\.]+)/i],[[f,/(.+)/,"$1 Secure Browser"],h],[/\bfocus\/([\w\.]+)/i],[h,[f,"Firefox Focus"]],[/\bopt\/([\w\.]+)/i],[h,[f,"Opera Touch"]],[/coc_coc\w+\/([\w\.]+)/i],[h,[f,"Coc Coc"]],[/dolfin\/([\w\.]+)/i],[h,[f,"Dolphin"]],[/coast\/([\w\.]+)/i],[h,[f,"Opera Coast"]],[/miuibrowser\/([\w\.]+)/i],[h,[f,"MIUI Browser"]],[/fxios\/([-\w\.]+)/i],[h,[f,j]],[/\bqihu|(qi?ho?o?|360)browser/i],[[f,"360 Browser"]],[/(oculus|samsung|sailfish)browser\/([\w\.]+)/i],[[f,/(.+)/,"$1 Browser"],h],[/(comodo_dragon)\/([\w\.]+)/i],[[f,/_/g," "],h],[/(electron)\/([\w\.]+) safari/i,/(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w\.]+))/i,/m?(qqbrowser|baiduboxapp|2345Explorer)[\/ ]?([\w\.]+)/i],[f,h],[/(metasr)[\/ ]?([\w\.]+)/i,/(lbbrowser)/i],[f],[/((?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/([\w\.]+);)/i],[[f,M],h],[/safari (line)\/([\w\.]+)/i,/\b(line)\/([\w\.]+)\/iab/i,/(chromium|instagram)[\/ ]([-\w\.]+)/i],[f,h],[/\bgsa\/([\w\.]+) .*safari\//i],[h,[f,"GSA"]],[/headlesschrome(?:\/([\w\.]+)| )/i],[h,[f,"Chrome Headless"]],[/ wv\).+(chrome)\/([\w\.]+)/i],[[f,"Chrome WebView"],h],[/droid.+ version\/([\w\.]+)\b.+(?:mobile safari|safari)/i],[h,[f,"Android Browser"]],[/(chrome|omniweb|arora|[tizenoka]{5} ?browser)\/v?([\w\.]+)/i],[f,h],[/version\/([\w\.]+) .*mobile\/\w+ (safari)/i],[h,[f,"Mobile Safari"]],[/version\/([\w\.]+) .*(mobile ?safari|safari)/i],[h,f],[/webkit.+?(mobile ?safari|safari)(\/[\w\.]+)/i],[f,[h,z,{"1.0":"/8",1.2:"/1",1.3:"/3","2.0":"/412","2.0.2":"/416","2.0.3":"/417","2.0.4":"/419","?":"/"}]],[/(webkit|khtml)\/([\w\.]+)/i],[f,h],[/(navigator|netscape\d?)\/([-\w\.]+)/i],[[f,"Netscape"],h],[/mobile vr; rv:([\w\.]+)\).+firefox/i],[h,[f,"Firefox Reality"]],[/ekiohf.+(flow)\/([\w\.]+)/i,/(swiftfox)/i,/(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\/ ]?([\w\.\+]+)/i,/(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([-\w\.]+)$/i,/(firefox)\/([\w\.]+)/i,/(mozilla)\/([\w\.]+) .+rv\:.+gecko\/\d+/i,/(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i,/(links) \(([\w\.]+)/i],[f,h]],cpu:[[/(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\)]/i],[[y,"amd64"]],[/(ia32(?=;))/i],[[y,B]],[/((?:i[346]|x)86)[;\)]/i],[[y,"ia32"]],[/\b(aarch64|arm(v?8e?l?|_?64))\b/i],[[y,"arm64"]],[/\b(arm(?:v[67])?ht?n?[fl]p?)\b/i],[[y,"armhf"]],[/windows (ce|mobile); ppc;/i],[[y,"arm"]],[/((?:ppc|powerpc)(?:64)?)(?: mac|;|\))/i],[[y,/ower/,"",B]],[/(sun4\w)[;\)]/i],[[y,"sparc"]],[/((?:avr32|ia64(?=;))|68k(?=\))|\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\b|pa-risc)/i],[[y,B]]],device:[[/\b(sch-i[89]0\d|shw-m380s|sm-[pt]\w{2,4}|gt-[pn]\d{2,4}|sgh-t8[56]9|nexus 10)/i],[l,[d,A],[p,g]],[/\b((?:s[cgp]h|gt|sm)-\w+|galaxy nexus)/i,/samsung[- ]([-\w]+)/i,/sec-(sgh\w+)/i],[l,[d,A],[p,v]],[/\((ip(?:hone|od)[\w ]*);/i],[l,[d,_],[p,v]],[/\((ipad);[-\w\),; ]+apple/i,/applecoremedia\/[\w\.]+ \((ipad)/i,/\b(ipad)\d\d?,\d\d?[;\]].+ios/i],[l,[d,_],[p,g]],[/\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\d{2})\b(?!.+d\/s)/i],[l,[d,k],[p,g]],[/(?:huawei|honor)([-\w ]+)[;\)]/i,/\b(nexus 6p|\w{2,4}-[atu]?[ln][01259x][012359][an]?)\b(?!.+d\/s)/i],[l,[d,k],[p,v]],[/\b(poco[\w ]+)(?: bui|\))/i,/\b; (\w+) build\/hm\1/i,/\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i,/\b(redmi[\-_ ]?(?:note|k)?[\w_ ]+)(?: bui|\))/i,/\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\))/i],[[l,/_/g," "],[d,L],[p,v]],[/\b(mi[-_ ]?(?:pad)(?:[\w_ ]+))(?: bui|\))/i],[[l,/_/g," "],[d,L],[p,g]],[/; (\w+) bui.+ oppo/i,/\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i],[l,[d,"OPPO"],[p,v]],[/vivo (\w+)(?: bui|\))/i,/\b(v[12]\d{3}\w?[at])(?: bui|;)/i],[l,[d,"Vivo"],[p,v]],[/\b(rmx[12]\d{3})(?: bui|;|\))/i],[l,[d,"Realme"],[p,v]],[/\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\b[\w ]+build\//i,/\bmot(?:orola)?[- ](\w*)/i,/((?:moto[\w\(\) ]+|xt\d{3,4}|nexus 6)(?= bui|\)))/i],[l,[d,R],[p,v]],[/\b(mz60\d|xoom[2 ]{0,2}) build\//i],[l,[d,R],[p,g]],[/((?=lg)?[vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i],[l,[d,I],[p,g]],[/(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i,/\blg[-e;\/ ]+((?!browser|netcast|android tv)\w+)/i,/\blg-?([\d\w]+) bui/i],[l,[d,I],[p,v]],[/(ideatab[-\w ]+)/i,/lenovo ?(s[56]000[-\w]+|tab(?:[\w ]+)|yt[-\d\w]{6}|tb[-\d\w]{6})/i],[l,[d,"Lenovo"],[p,g]],[/(?:maemo|nokia).*(n900|lumia \d+)/i,/nokia[-_ ]?([-\w\.]*)/i],[[l,/_/g," "],[d,"Nokia"],[p,v]],[/(pixel c)\b/i],[l,[d,P],[p,g]],[/droid.+; (pixel[\daxl ]{0,6})(?: bui|\))/i],[l,[d,P],[p,v]],[/droid.+ ([c-g]\d{4}|so[-gl]\w+|xq-a\w[4-7][12])(?= bui|\).+chrome\/(?![1-6]{0,1}\d\.))/i],[l,[d,N],[p,v]],[/sony tablet [ps]/i,/\b(?:sony)?sgp\w+(?: bui|\))/i],[[l,"Xperia Tablet"],[d,N],[p,g]],[/ (kb2005|in20[12]5|be20[12][59])\b/i,/(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i],[l,[d,"OnePlus"],[p,v]],[/(alexa)webm/i,/(kf[a-z]{2}wi)( bui|\))/i,/(kf[a-z]+)( bui|\)).+silk\//i],[l,[d,E],[p,g]],[/((?:sd|kf)[0349hijorstuw]+)( bui|\)).+silk\//i],[[l,/(.+)/g,"Fire Phone $1"],[d,E],[p,v]],[/(playbook);[-\w\),; ]+(rim)/i],[l,d,[p,g]],[/\b((?:bb[a-f]|st[hv])100-\d)/i,/\(bb10; (\w+)/i],[l,[d,S],[p,v]],[/(?:\b|asus_)(transfo[prime ]{4,10} \w+|eeepc|slider \w+|nexus 7|padfone|p00[cj])/i],[l,[d,x],[p,g]],[/ (z[bes]6[027][012][km][ls]|zenfone \d\w?)\b/i],[l,[d,x],[p,v]],[/(nexus 9)/i],[l,[d,"HTC"],[p,g]],[/(htc)[-;_ ]{1,2}([\w ]+(?=\)| bui)|\w+)/i,/(zte)[- ]([\w ]+?)(?: bui|\/|\))/i,/(alcatel|geeksphone|nexian|panasonic|sony)[-_ ]?([-\w]*)/i],[d,[l,/_/g," "],[p,v]],[/droid.+; ([ab][1-7]-?[0178a]\d\d?)/i],[l,[d,"Acer"],[p,g]],[/droid.+; (m[1-5] note) bui/i,/\bmz-([-\w]{2,})/i],[l,[d,"Meizu"],[p,v]],[/\b(sh-?[altvz]?\d\d[a-ekm]?)/i],[l,[d,"Sharp"],[p,v]],[/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[-_ ]?([-\w]*)/i,/(hp) ([\w ]+\w)/i,/(asus)-?(\w+)/i,/(microsoft); (lumia[\w ]+)/i,/(lenovo)[-_ ]?([-\w]+)/i,/(jolla)/i,/(oppo) ?([\w ]+) bui/i],[d,l,[p,v]],[/(archos) (gamepad2?)/i,/(hp).+(touchpad(?!.+tablet)|tablet)/i,/(kindle)\/([\w\.]+)/i,/(nook)[\w ]+build\/(\w+)/i,/(dell) (strea[kpr\d ]*[\dko])/i,/(le[- ]+pan)[- ]+(\w{1,9}) bui/i,/(trinity)[- ]*(t\d{3}) bui/i,/(gigaset)[- ]+(q\w{1,9}) bui/i,/(vodafone) ([\w ]+)(?:\)| bui)/i],[d,l,[p,g]],[/(surface duo)/i],[l,[d,T],[p,g]],[/droid [\d\.]+; (fp\du?)(?: b|\))/i],[l,[d,"Fairphone"],[p,v]],[/(u304aa)/i],[l,[d,"AT&T"],[p,v]],[/\bsie-(\w*)/i],[l,[d,"Siemens"],[p,v]],[/\b(rct\w+) b/i],[l,[d,"RCA"],[p,g]],[/\b(venue[\d ]{2,7}) b/i],[l,[d,"Dell"],[p,g]],[/\b(q(?:mv|ta)\w+) b/i],[l,[d,"Verizon"],[p,g]],[/\b(?:barnes[& ]+noble |bn[rt])([\w\+ ]*) b/i],[l,[d,"Barnes & Noble"],[p,g]],[/\b(tm\d{3}\w+) b/i],[l,[d,"NuVision"],[p,g]],[/\b(k88) b/i],[l,[d,"ZTE"],[p,g]],[/\b(nx\d{3}j) b/i],[l,[d,"ZTE"],[p,v]],[/\b(gen\d{3}) b.+49h/i],[l,[d,"Swiss"],[p,v]],[/\b(zur\d{3}) b/i],[l,[d,"Swiss"],[p,g]],[/\b((zeki)?tb.*\b) b/i],[l,[d,"Zeki"],[p,g]],[/\b([yr]\d{2}) b/i,/\b(dragon[- ]+touch |dt)(\w{5}) b/i],[[d,"Dragon Touch"],l,[p,g]],[/\b(ns-?\w{0,9}) b/i],[l,[d,"Insignia"],[p,g]],[/\b((nxa|next)-?\w{0,9}) b/i],[l,[d,"NextBook"],[p,g]],[/\b(xtreme\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i],[[d,"Voice"],l,[p,v]],[/\b(lvtel\-)?(v1[12]) b/i],[[d,"LvTel"],l,[p,v]],[/\b(ph-1) /i],[l,[d,"Essential"],[p,v]],[/\b(v(100md|700na|7011|917g).*\b) b/i],[l,[d,"Envizen"],[p,g]],[/\b(trio[-\w\. ]+) b/i],[l,[d,"MachSpeed"],[p,g]],[/\btu_(1491) b/i],[l,[d,"Rotor"],[p,g]],[/(shield[\w ]+) b/i],[l,[d,"Nvidia"],[p,g]],[/(sprint) (\w+)/i],[d,l,[p,v]],[/(kin\.[onetw]{3})/i],[[l,/\./g," "],[d,T],[p,v]],[/droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i],[l,[d,D],[p,g]],[/droid.+; (ec30|ps20|tc[2-8]\d[kx])\)/i],[l,[d,D],[p,v]],[/(ouya)/i,/(nintendo) ([wids3utch]+)/i],[d,l,[p,m]],[/droid.+; (shield) bui/i],[l,[d,"Nvidia"],[p,m]],[/(playstation [345portablevi]+)/i],[l,[d,N],[p,m]],[/\b(xbox(?: one)?(?!; xbox))[\); ]/i],[l,[d,T],[p,m]],[/smart-tv.+(samsung)/i],[d,[p,b]],[/hbbtv.+maple;(\d+)/i],[[l,/^/,"SmartTV"],[d,A],[p,b]],[/(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i],[[d,I],[p,b]],[/(apple) ?tv/i],[d,[l,"Apple TV"],[p,b]],[/crkey/i],[[l,"Chromecast"],[d,P],[p,b]],[/droid.+aft(\w)( bui|\))/i],[l,[d,E],[p,b]],[/\(dtv[\);].+(aquos)/i],[l,[d,"Sharp"],[p,b]],[/\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i,/hbbtv\/\d+\.\d+\.\d+ +\([\w ]*; *(\w[^;]*);([^;]*)/i],[[d,H],[l,H],[p,b]],[/\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\b/i],[[p,b]],[/((pebble))app/i],[d,l,[p,w]],[/droid.+; (glass) \d/i],[l,[d,P],[p,w]],[/droid.+; (wt63?0{2,3})\)/i],[l,[d,D],[p,w]],[/(quest( 2)?)/i],[l,[d,M],[p,w]],[/(tesla)(?: qtcarbrowser|\/[-\w\.]+)/i],[d,[p,O]],[/droid .+?; ([^;]+?)(?: bui|\) applew).+? mobile safari/i],[l,[p,v]],[/droid .+?; ([^;]+?)(?: bui|\) applew).+?(?! mobile) safari/i],[l,[p,g]],[/\b((tablet|tab)[;\/]|focus\/\d(?!.+mobile))/i],[[p,g]],[/(phone|mobile(?:[;\/]| safari)|pda(?=.+windows ce))/i],[[p,v]],[/(android[-\w\. ]{0,9});.+buil/i],[l,[d,"Generic"]]],engine:[[/windows.+ edge\/([\w\.]+)/i],[h,[f,"EdgeHTML"]],[/webkit\/537\.36.+chrome\/(?!27)([\w\.]+)/i],[h,[f,"Blink"]],[/(presto)\/([\w\.]+)/i,/(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\/([\w\.]+)/i,/ekioh(flow)\/([\w\.]+)/i,/(khtml|tasman|links)[\/ ]\(?([\w\.]+)/i,/(icab)[\/ ]([23]\.[\d\.]+)/i],[f,h],[/rv\:([\w\.]{1,9})\b.+(gecko)/i],[h,f]],os:[[/microsoft (windows) (vista|xp)/i],[f,h],[/(windows) nt 6\.2; (arm)/i,/(windows (?:phone(?: os)?|mobile))[\/ ]?([\d\.\w ]*)/i,/(windows)[\/ ]?([ntce\d\. ]+\w)(?!.+xbox)/i],[f,[h,z,G]],[/(win(?=3|9|n)|win 9x )([nt\d\.]+)/i],[[f,"Windows"],[h,z,G]],[/ip[honead]{2,4}\b(?:.*os ([\w]+) like mac|; opera)/i,/cfnetwork\/.+darwin/i],[[h,/_/g,"."],[f,"iOS"]],[/(mac os x) ?([\w\. ]*)/i,/(macintosh|mac_powerpc\b)(?!.+haiku)/i],[[f,"Mac OS"],[h,/_/g,"."]],[/droid ([\w\.]+)\b.+(android[- ]x86)/i],[h,f],[/(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\/ ]?([\w\.]*)/i,/(blackberry)\w*\/([\w\.]*)/i,/(tizen|kaios)[\/ ]([\w\.]+)/i,/\((series40);/i],[f,h],[/\(bb(10);/i],[h,[f,S]],[/(?:symbian ?os|symbos|s60(?=;)|series60)[-\/ ]?([\w\.]*)/i],[h,[f,"Symbian"]],[/mozilla\/[\d\.]+ \((?:mobile|tablet|tv|mobile; [\w ]+); rv:.+ gecko\/([\w\.]+)/i],[h,[f,"Firefox OS"]],[/web0s;.+rt(tv)/i,/\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i],[h,[f,"webOS"]],[/crkey\/([\d\.]+)/i],[h,[f,"Chromecast"]],[/(cros) [\w]+ ([\w\.]+\w)/i],[[f,"Chromium OS"],h],[/(nintendo|playstation) ([wids345portablevuch]+)/i,/(xbox); +xbox ([^\);]+)/i,/\b(joli|palm)\b ?(?:os)?\/?([\w\.]*)/i,/(mint)[\/\(\) ]?(\w*)/i,/(mageia|vectorlinux)[; ]/i,/([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\/ ]?(?!chrom|package)([-\w\.]*)/i,/(hurd|linux) ?([\w\.]*)/i,/(gnu) ?([\w\.]*)/i,/\b([-frentopcghs]{0,5}bsd|dragonfly)[\/ ]?(?!amd|[ix346]{1,2}86)([\w\.]*)/i,/(haiku) (\w+)/i],[f,h],[/(sunos) ?([\w\.\d]*)/i],[[f,"Solaris"],h],[/((?:open)?solaris)[-\/ ]?([\w\.]*)/i,/(aix) ((\d)(?=\.|\)| )[\w\.])*/i,/\b(beos|os\/2|amigaos|morphos|openvms|fuchsia|hp-ux)/i,/(unix) ?([\w\.]*)/i],[f,h]]},V=function(e,t){if(typeof e===c&&(t=e,e=i),!(this instanceof V))return new V(e,t).getResult();var n=e||(typeof o!==u&&o.navigator&&o.navigator.userAgent?o.navigator.userAgent:""),r=t?function(e,t){var n={};for(var r in e)t[r]&&t[r].length%2==0?n[r]=t[r].concat(e[r]):n[r]=e[r];return n}(W,t):W;return this.getBrowser=function(){var e,t={};return t.name=i,t.version=i,q.call(t,n,r.browser),t.major=typeof(e=t.version)===s?e.replace(/[^\d\.]/g,"").split(".")[0]:i,t},this.getCPU=function(){var e={};return e.architecture=i,q.call(e,n,r.cpu),e},this.getDevice=function(){var e={};return e.vendor=i,e.model=i,e.type=i,q.call(e,n,r.device),e},this.getEngine=function(){var e={};return e.name=i,e.version=i,q.call(e,n,r.engine),e},this.getOS=function(){var e={};return e.name=i,e.version=i,q.call(e,n,r.os),e},this.getResult=function(){return{ua:this.getUA(),browser:this.getBrowser(),engine:this.getEngine(),os:this.getOS(),device:this.getDevice(),cpu:this.getCPU()}},this.getUA=function(){return n},this.setUA=function(e){return n=typeof e===s&&e.length>255?H(e,255):e,this},this.setUA(n),this};V.VERSION="1.0.2",V.BROWSER=F([f,h,"major"]),V.CPU=F([y]),V.DEVICE=F([l,d,p,m,v,b,g,w,O]),V.ENGINE=V.OS=F([f,h]),typeof t!==u?(e.exports&&(t=e.exports=V),t.UAParser=V):n.amdO?(r=function(){return V}.call(t,n,t,e))===i||(e.exports=r):typeof o!==u&&(o.UAParser=V);var Y=typeof o!==u&&(o.jQuery||o.Zepto);if(Y&&!Y.ua){var Z=new V;Y.ua=Z.getResult(),Y.ua.get=function(){return Z.getUA()},Y.ua.set=function(e){Z.setUA(e);var t=Z.getResult();for(var n in t)Y.ua[n]=t[n]}}}("object"==typeof window?window:this)},20714:(e,t)=>{"use strict";function n(e){return String.fromCharCode(parseInt(e.slice(1),16))}function r(e){return`%${`00${e.charCodeAt(0).toString(16)}`.slice(-2)}`}Object.defineProperty(t,"__esModule",{value:!0}),t.encode=function(e){return btoa(encodeURIComponent(e).replace(/%[0-9A-F]{2}/g,n))},t.decode=function(e){return decodeURIComponent(Array.from(atob(e),r).join(""))}},39735:(e,t,n)=>{"use strict";const r=n(20714);t.Jx=function(e){return r.decode(e.replace(/\-/g,"+").replace(/_/g,"/"))},t.cv=function(e){return r.encode(e).replace(/\//g,"_").replace(/\+/g,"-").replace(/=+$/,"")}},8191:(e,t)=>{"use strict";t.Q=function(e,t){if("string"!=typeof e)throw new TypeError("argument str must be a string");for(var r={},i=t||{},u=e.split(o),c=i.decode||n,s=0;s<u.length;s++){var l=u[s],f=l.indexOf("=");if(!(f<0)){var p=l.substr(0,f).trim(),d=l.substr(++f,l.length).trim();'"'==d[0]&&(d=d.slice(1,-1)),null==r[p]&&(r[p]=a(d,c))}}return r},t.q=function(e,t,n){var o=n||{},a=o.encode||r;if("function"!=typeof a)throw new TypeError("option encode is invalid");if(!i.test(e))throw new TypeError("argument name is invalid");var u=a(t);if(u&&!i.test(u))throw new TypeError("argument val is invalid");var c=e+"="+u;if(null!=o.maxAge){var s=o.maxAge-0;if(isNaN(s)||!isFinite(s))throw new TypeError("option maxAge is invalid");c+="; Max-Age="+Math.floor(s)}if(o.domain){if(!i.test(o.domain))throw new TypeError("option domain is invalid");c+="; Domain="+o.domain}if(o.path){if(!i.test(o.path))throw new TypeError("option path is invalid");c+="; Path="+o.path}if(o.expires){if("function"!=typeof o.expires.toUTCString)throw new TypeError("option expires is invalid");c+="; Expires="+o.expires.toUTCString()}o.httpOnly&&(c+="; HttpOnly");o.secure&&(c+="; Secure");if(o.sameSite){switch("string"==typeof o.sameSite?o.sameSite.toLowerCase():o.sameSite){case!0:c+="; SameSite=Strict";break;case"lax":c+="; SameSite=Lax";break;case"strict":c+="; SameSite=Strict";break;case"none":c+="; SameSite=None";break;default:throw new TypeError("option sameSite is invalid")}}return c};var n=decodeURIComponent,r=encodeURIComponent,o=/; */,i=/^[\u0009\u0020-\u007e\u0080-\u00ff]+$/;function a(e,t){try{return t(e)}catch(t){return e}}},19704:(e,t,n)=>{e.exports=n.p+"b4ed07ea73fd9b86f6ace81025f9c6eb.png"},424:(e,t,n)=>{e.exports=n.p+"fa9755b65373c6cee3b350e987333a6c.svg"},65117:(e,t,n)=>{e.exports=n.p+"3a8be7acd94a11760707d5374bea1f6d.svg"},2138:(e,t,n)=>{e.exports=n.p+"1b2fb62f37f1c1e59208f4993714d166.svg"},64265:function(e,t,n){var r;e=n.nmd(e),function(o){t&&t.nodeType,e&&e.nodeType;var i="object"==typeof n.g&&n.g;i.global!==i&&i.window!==i&&i.self;var a,u=2147483647,c=36,s=/^xn--/,l=/[^\x20-\x7E]/,f=/[\x2E\u3002\uFF0E\uFF61]/g,p={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},d=Math.floor,h=String.fromCharCode;function y(e){throw RangeError(p[e])}function m(e,t){for(var n=e.length,r=[];n--;)r[n]=t(e[n]);return r}function v(e,t){var n=e.split("@"),r="";return n.length>1&&(r=n[0]+"@",e=n[1]),r+m((e=e.replace(f,".")).split("."),t).join(".")}function g(e){for(var t,n,r=[],o=0,i=e.length;o<i;)(t=e.charCodeAt(o++))>=55296&&t<=56319&&o<i?56320==(64512&(n=e.charCodeAt(o++)))?r.push(((1023&t)<<10)+(1023&n)+65536):(r.push(t),o--):r.push(t);return r}function b(e){return m(e,(function(e){var t="";return e>65535&&(t+=h((e-=65536)>>>10&1023|55296),e=56320|1023&e),t+=h(e)})).join("")}function w(e,t){return e+22+75*(e<26)-((0!=t)<<5)}function O(e,t,n){var r=0;for(e=n?d(e/700):e>>1,e+=d(e/t);e>455;r+=c)e=d(e/35);return d(r+36*e/(e+38))}function E(e){var t,n,r,o,i,a,s,l,f,p,h,m=[],v=e.length,g=0,w=128,E=72;for((n=e.lastIndexOf("-"))<0&&(n=0),r=0;r<n;++r)e.charCodeAt(r)>=128&&y("not-basic"),m.push(e.charCodeAt(r));for(o=n>0?n+1:0;o<v;){for(i=g,a=1,s=c;o>=v&&y("invalid-input"),((l=(h=e.charCodeAt(o++))-48<10?h-22:h-65<26?h-65:h-97<26?h-97:c)>=c||l>d((u-g)/a))&&y("overflow"),g+=l*a,!(l<(f=s<=E?1:s>=E+26?26:s-E));s+=c)a>d(u/(p=c-f))&&y("overflow"),a*=p;E=O(g-i,t=m.length+1,0==i),d(g/t)>u-w&&y("overflow"),w+=d(g/t),g%=t,m.splice(g++,0,w)}return b(m)}function _(e){var t,n,r,o,i,a,s,l,f,p,m,v,b,E,_,x=[];for(v=(e=g(e)).length,t=128,n=0,i=72,a=0;a<v;++a)(m=e[a])<128&&x.push(h(m));for(r=o=x.length,o&&x.push("-");r<v;){for(s=u,a=0;a<v;++a)(m=e[a])>=t&&m<s&&(s=m);for(s-t>d((u-n)/(b=r+1))&&y("overflow"),n+=(s-t)*b,t=s,a=0;a<v;++a)if((m=e[a])<t&&++n>u&&y("overflow"),m==t){for(l=n,f=c;!(l<(p=f<=i?1:f>=i+26?26:f-i));f+=c)_=l-p,E=c-p,x.push(h(w(p+_%E,0))),l=d(_/E);x.push(h(w(l,0))),i=O(n,b,r==o),n=0,++r}++n,++t}return x.join("")}a={version:"1.3.2",ucs2:{decode:g,encode:b},decode:E,encode:_,toASCII:function(e){return v(e,(function(e){return l.test(e)?"xn--"+_(e):e}))},toUnicode:function(e){return v(e,(function(e){return s.test(e)?E(e.slice(4).toLowerCase()):e}))}},void 0===(r=function(){return a}.call(t,n,t,e))||(e.exports=r)}()},9989:(e,t,n)=>{"use strict";var r=n(64265),o=n(7030);function i(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}t.parse=b,t.resolve=function(e,t){return b(e,!1,!0).resolve(t)},t.resolveObject=function(e,t){return e?b(e,!1,!0).resolveObject(t):t},t.format=function(e){o.isString(e)&&(e=b(e));return e instanceof i?e.format():i.prototype.format.call(e)},t.Url=i;var a=/^([a-z0-9.+-]+:)/i,u=/:[0-9]*$/,c=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,s=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r","\n","\t"]),l=["'"].concat(s),f=["%","/","?",";","#"].concat(l),p=["/","?","#"],d=/^[+a-z0-9A-Z_-]{0,63}$/,h=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,y={javascript:!0,"javascript:":!0},m={javascript:!0,"javascript:":!0},v={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},g=n(49122);function b(e,t,n){if(e&&o.isObject(e)&&e instanceof i)return e;var r=new i;return r.parse(e,t,n),r}i.prototype.parse=function(e,t,n){if(!o.isString(e))throw new TypeError("Parameter 'url' must be a string, not "+typeof e);var i=e.indexOf("?"),u=-1!==i&&i<e.indexOf("#")?"?":"#",s=e.split(u);s[0]=s[0].replace(/\\/g,"/");var b=e=s.join(u);if(b=b.trim(),!n&&1===e.split("#").length){var w=c.exec(b);if(w)return this.path=b,this.href=b,this.pathname=w[1],w[2]?(this.search=w[2],this.query=t?g.parse(this.search.substr(1)):this.search.substr(1)):t&&(this.search="",this.query={}),this}var O=a.exec(b);if(O){var E=(O=O[0]).toLowerCase();this.protocol=E,b=b.substr(O.length)}if(n||O||b.match(/^\/\/[^@\/]+@[^@\/]+/)){var _="//"===b.substr(0,2);!_||O&&m[O]||(b=b.substr(2),this.slashes=!0)}if(!m[O]&&(_||O&&!v[O])){for(var x,S,j=-1,P=0;P<p.length;P++){-1!==(k=b.indexOf(p[P]))&&(-1===j||k<j)&&(j=k)}-1!==(S=-1===j?b.lastIndexOf("@"):b.lastIndexOf("@",j))&&(x=b.slice(0,S),b=b.slice(S+1),this.auth=decodeURIComponent(x)),j=-1;for(P=0;P<f.length;P++){var k;-1!==(k=b.indexOf(f[P]))&&(-1===j||k<j)&&(j=k)}-1===j&&(j=b.length),this.host=b.slice(0,j),b=b.slice(j),this.parseHost(),this.hostname=this.hostname||"";var I="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!I)for(var T=this.hostname.split(/\./),R=(P=0,T.length);P<R;P++){var C=T[P];if(C&&!C.match(d)){for(var A="",N=0,L=C.length;N<L;N++)C.charCodeAt(N)>127?A+="x":A+=C[N];if(!A.match(d)){var D=T.slice(0,P),M=T.slice(P+1),F=C.match(h);F&&(D.push(F[1]),M.unshift(F[2])),M.length&&(b="/"+M.join(".")+b),this.hostname=D.join(".");break}}}this.hostname.length>255?this.hostname="":this.hostname=this.hostname.toLowerCase(),I||(this.hostname=r.toASCII(this.hostname));var U=this.port?":"+this.port:"",B=this.hostname||"";this.host=B+U,this.href+=this.host,I&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==b[0]&&(b="/"+b))}if(!y[E])for(P=0,R=l.length;P<R;P++){var H=l[P];if(-1!==b.indexOf(H)){var q=encodeURIComponent(H);q===H&&(q=escape(H)),b=b.split(H).join(q)}}var z=b.indexOf("#");-1!==z&&(this.hash=b.substr(z),b=b.slice(0,z));var G=b.indexOf("?");if(-1!==G?(this.search=b.substr(G),this.query=b.substr(G+1),t&&(this.query=g.parse(this.query)),b=b.slice(0,G)):t&&(this.search="",this.query={}),b&&(this.pathname=b),v[E]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){U=this.pathname||"";var W=this.search||"";this.path=U+W}return this.href=this.format(),this},i.prototype.format=function(){var e=this.auth||"";e&&(e=(e=encodeURIComponent(e)).replace(/%3A/i,":"),e+="@");var t=this.protocol||"",n=this.pathname||"",r=this.hash||"",i=!1,a="";this.host?i=e+this.host:this.hostname&&(i=e+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(i+=":"+this.port)),this.query&&o.isObject(this.query)&&Object.keys(this.query).length&&(a=g.stringify(this.query));var u=this.search||a&&"?"+a||"";return t&&":"!==t.substr(-1)&&(t+=":"),this.slashes||(!t||v[t])&&!1!==i?(i="//"+(i||""),n&&"/"!==n.charAt(0)&&(n="/"+n)):i||(i=""),r&&"#"!==r.charAt(0)&&(r="#"+r),u&&"?"!==u.charAt(0)&&(u="?"+u),t+i+(n=n.replace(/[?#]/g,(function(e){return encodeURIComponent(e)})))+(u=u.replace("#","%23"))+r},i.prototype.resolve=function(e){return this.resolveObject(b(e,!1,!0)).format()},i.prototype.resolveObject=function(e){if(o.isString(e)){var t=new i;t.parse(e,!1,!0),e=t}for(var n=new i,r=Object.keys(this),a=0;a<r.length;a++){var u=r[a];n[u]=this[u]}if(n.hash=e.hash,""===e.href)return n.href=n.format(),n;if(e.slashes&&!e.protocol){for(var c=Object.keys(e),s=0;s<c.length;s++){var l=c[s];"protocol"!==l&&(n[l]=e[l])}return v[n.protocol]&&n.hostname&&!n.pathname&&(n.path=n.pathname="/"),n.href=n.format(),n}if(e.protocol&&e.protocol!==n.protocol){if(!v[e.protocol]){for(var f=Object.keys(e),p=0;p<f.length;p++){var d=f[p];n[d]=e[d]}return n.href=n.format(),n}if(n.protocol=e.protocol,e.host||m[e.protocol])n.pathname=e.pathname;else{for(var h=(e.pathname||"").split("/");h.length&&!(e.host=h.shift()););e.host||(e.host=""),e.hostname||(e.hostname=""),""!==h[0]&&h.unshift(""),h.length<2&&h.unshift(""),n.pathname=h.join("/")}if(n.search=e.search,n.query=e.query,n.host=e.host||"",n.auth=e.auth,n.hostname=e.hostname||e.host,n.port=e.port,n.pathname||n.search){var y=n.pathname||"",g=n.search||"";n.path=y+g}return n.slashes=n.slashes||e.slashes,n.href=n.format(),n}var b=n.pathname&&"/"===n.pathname.charAt(0),w=e.host||e.pathname&&"/"===e.pathname.charAt(0),O=w||b||n.host&&e.pathname,E=O,_=n.pathname&&n.pathname.split("/")||[],x=(h=e.pathname&&e.pathname.split("/")||[],n.protocol&&!v[n.protocol]);if(x&&(n.hostname="",n.port=null,n.host&&(""===_[0]?_[0]=n.host:_.unshift(n.host)),n.host="",e.protocol&&(e.hostname=null,e.port=null,e.host&&(""===h[0]?h[0]=e.host:h.unshift(e.host)),e.host=null),O=O&&(""===h[0]||""===_[0])),w)n.host=e.host||""===e.host?e.host:n.host,n.hostname=e.hostname||""===e.hostname?e.hostname:n.hostname,n.search=e.search,n.query=e.query,_=h;else if(h.length)_||(_=[]),_.pop(),_=_.concat(h),n.search=e.search,n.query=e.query;else if(!o.isNullOrUndefined(e.search)){if(x)n.hostname=n.host=_.shift(),(I=!!(n.host&&n.host.indexOf("@")>0)&&n.host.split("@"))&&(n.auth=I.shift(),n.host=n.hostname=I.shift());return n.search=e.search,n.query=e.query,o.isNull(n.pathname)&&o.isNull(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.href=n.format(),n}if(!_.length)return n.pathname=null,n.search?n.path="/"+n.search:n.path=null,n.href=n.format(),n;for(var S=_.slice(-1)[0],j=(n.host||e.host||_.length>1)&&("."===S||".."===S)||""===S,P=0,k=_.length;k>=0;k--)"."===(S=_[k])?_.splice(k,1):".."===S?(_.splice(k,1),P++):P&&(_.splice(k,1),P--);if(!O&&!E)for(;P--;P)_.unshift("..");!O||""===_[0]||_[0]&&"/"===_[0].charAt(0)||_.unshift(""),j&&"/"!==_.join("/").substr(-1)&&_.push("");var I,T=""===_[0]||_[0]&&"/"===_[0].charAt(0);x&&(n.hostname=n.host=T?"":_.length?_.shift():"",(I=!!(n.host&&n.host.indexOf("@")>0)&&n.host.split("@"))&&(n.auth=I.shift(),n.host=n.hostname=I.shift()));return(O=O||n.host&&_.length)&&!T&&_.unshift(""),_.length?n.pathname=_.join("/"):(n.pathname=null,n.path=null),o.isNull(n.pathname)&&o.isNull(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.auth=e.auth||n.auth,n.slashes=n.slashes||e.slashes,n.href=n.format(),n},i.prototype.parseHost=function(){var e=this.host,t=u.exec(e);t&&(":"!==(t=t[0])&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)}},7030:e=>{"use strict";e.exports={isString:function(e){return"string"==typeof e},isObject:function(e){return"object"==typeof e&&null!==e},isNull:function(e){return null===e},isNullOrUndefined:function(e){return null==e}}},16727:e=>{"use strict";var t=function(){};e.exports=t},35409:(e,t,n)=>{"use strict";n.r(t),n.d(t,{DOMException:()=>S,Headers:()=>h,Request:()=>O,Response:()=>_,fetch:()=>j});var r="undefined"!=typeof globalThis&&globalThis||"undefined"!=typeof self&&self||void 0!==r&&r,o="URLSearchParams"in r,i="Symbol"in r&&"iterator"in Symbol,a="FileReader"in r&&"Blob"in r&&function(){try{return new Blob,!0}catch(e){return!1}}(),u="FormData"in r,c="ArrayBuffer"in r;if(c)var s=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],l=ArrayBuffer.isView||function(e){return e&&s.indexOf(Object.prototype.toString.call(e))>-1};function f(e){if("string"!=typeof e&&(e=String(e)),/[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(e)||""===e)throw new TypeError('Invalid character in header field name: "'+e+'"');return e.toLowerCase()}function p(e){return"string"!=typeof e&&(e=String(e)),e}function d(e){var t={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return i&&(t[Symbol.iterator]=function(){return t}),t}function h(e){this.map={},e instanceof h?e.forEach((function(e,t){this.append(t,e)}),this):Array.isArray(e)?e.forEach((function(e){this.append(e[0],e[1])}),this):e&&Object.getOwnPropertyNames(e).forEach((function(t){this.append(t,e[t])}),this)}function y(e){if(e.bodyUsed)return Promise.reject(new TypeError("Already read"));e.bodyUsed=!0}function m(e){return new Promise((function(t,n){e.onload=function(){t(e.result)},e.onerror=function(){n(e.error)}}))}function v(e){var t=new FileReader,n=m(t);return t.readAsArrayBuffer(e),n}function g(e){if(e.slice)return e.slice(0);var t=new Uint8Array(e.byteLength);return t.set(new Uint8Array(e)),t.buffer}function b(){return this.bodyUsed=!1,this._initBody=function(e){var t;this.bodyUsed=this.bodyUsed,this._bodyInit=e,e?"string"==typeof e?this._bodyText=e:a&&Blob.prototype.isPrototypeOf(e)?this._bodyBlob=e:u&&FormData.prototype.isPrototypeOf(e)?this._bodyFormData=e:o&&URLSearchParams.prototype.isPrototypeOf(e)?this._bodyText=e.toString():c&&a&&((t=e)&&DataView.prototype.isPrototypeOf(t))?(this._bodyArrayBuffer=g(e.buffer),this._bodyInit=new Blob([this._bodyArrayBuffer])):c&&(ArrayBuffer.prototype.isPrototypeOf(e)||l(e))?this._bodyArrayBuffer=g(e):this._bodyText=e=Object.prototype.toString.call(e):this._bodyText="",this.headers.get("content-type")||("string"==typeof e?this.headers.set("content-type","text/plain;charset=UTF-8"):this._bodyBlob&&this._bodyBlob.type?this.headers.set("content-type",this._bodyBlob.type):o&&URLSearchParams.prototype.isPrototypeOf(e)&&this.headers.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"))},a&&(this.blob=function(){var e=y(this);if(e)return e;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(new Blob([this._bodyArrayBuffer]));if(this._bodyFormData)throw new Error("could not read FormData body as blob");return Promise.resolve(new Blob([this._bodyText]))},this.arrayBuffer=function(){if(this._bodyArrayBuffer){var e=y(this);return e||(ArrayBuffer.isView(this._bodyArrayBuffer)?Promise.resolve(this._bodyArrayBuffer.buffer.slice(this._bodyArrayBuffer.byteOffset,this._bodyArrayBuffer.byteOffset+this._bodyArrayBuffer.byteLength)):Promise.resolve(this._bodyArrayBuffer))}return this.blob().then(v)}),this.text=function(){var e,t,n,r=y(this);if(r)return r;if(this._bodyBlob)return e=this._bodyBlob,t=new FileReader,n=m(t),t.readAsText(e),n;if(this._bodyArrayBuffer)return Promise.resolve(function(e){for(var t=new Uint8Array(e),n=new Array(t.length),r=0;r<t.length;r++)n[r]=String.fromCharCode(t[r]);return n.join("")}(this._bodyArrayBuffer));if(this._bodyFormData)throw new Error("could not read FormData body as text");return Promise.resolve(this._bodyText)},u&&(this.formData=function(){return this.text().then(E)}),this.json=function(){return this.text().then(JSON.parse)},this}h.prototype.append=function(e,t){e=f(e),t=p(t);var n=this.map[e];this.map[e]=n?n+", "+t:t},h.prototype.delete=function(e){delete this.map[f(e)]},h.prototype.get=function(e){return e=f(e),this.has(e)?this.map[e]:null},h.prototype.has=function(e){return this.map.hasOwnProperty(f(e))},h.prototype.set=function(e,t){this.map[f(e)]=p(t)},h.prototype.forEach=function(e,t){for(var n in this.map)this.map.hasOwnProperty(n)&&e.call(t,this.map[n],n,this)},h.prototype.keys=function(){var e=[];return this.forEach((function(t,n){e.push(n)})),d(e)},h.prototype.values=function(){var e=[];return this.forEach((function(t){e.push(t)})),d(e)},h.prototype.entries=function(){var e=[];return this.forEach((function(t,n){e.push([n,t])})),d(e)},i&&(h.prototype[Symbol.iterator]=h.prototype.entries);var w=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];function O(e,t){if(!(this instanceof O))throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');var n,r,o=(t=t||{}).body;if(e instanceof O){if(e.bodyUsed)throw new TypeError("Already read");this.url=e.url,this.credentials=e.credentials,t.headers||(this.headers=new h(e.headers)),this.method=e.method,this.mode=e.mode,this.signal=e.signal,o||null==e._bodyInit||(o=e._bodyInit,e.bodyUsed=!0)}else this.url=String(e);if(this.credentials=t.credentials||this.credentials||"same-origin",!t.headers&&this.headers||(this.headers=new h(t.headers)),this.method=(n=t.method||this.method||"GET",r=n.toUpperCase(),w.indexOf(r)>-1?r:n),this.mode=t.mode||this.mode||null,this.signal=t.signal||this.signal,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&o)throw new TypeError("Body not allowed for GET or HEAD requests");if(this._initBody(o),!("GET"!==this.method&&"HEAD"!==this.method||"no-store"!==t.cache&&"no-cache"!==t.cache)){var i=/([?&])_=[^&]*/;if(i.test(this.url))this.url=this.url.replace(i,"$1_="+(new Date).getTime());else{this.url+=(/\?/.test(this.url)?"&":"?")+"_="+(new Date).getTime()}}}function E(e){var t=new FormData;return e.trim().split("&").forEach((function(e){if(e){var n=e.split("="),r=n.shift().replace(/\+/g," "),o=n.join("=").replace(/\+/g," ");t.append(decodeURIComponent(r),decodeURIComponent(o))}})),t}function _(e,t){if(!(this instanceof _))throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');t||(t={}),this.type="default",this.status=void 0===t.status?200:t.status,this.ok=this.status>=200&&this.status<300,this.statusText=void 0===t.statusText?"":""+t.statusText,this.headers=new h(t.headers),this.url=t.url||"",this._initBody(e)}O.prototype.clone=function(){return new O(this,{body:this._bodyInit})},b.call(O.prototype),b.call(_.prototype),_.prototype.clone=function(){return new _(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new h(this.headers),url:this.url})},_.error=function(){var e=new _(null,{status:0,statusText:""});return e.type="error",e};var x=[301,302,303,307,308];_.redirect=function(e,t){if(-1===x.indexOf(t))throw new RangeError("Invalid status code");return new _(null,{status:t,headers:{location:e}})};var S=r.DOMException;try{new S}catch(e){(S=function(e,t){this.message=e,this.name=t;var n=Error(e);this.stack=n.stack}).prototype=Object.create(Error.prototype),S.prototype.constructor=S}function j(e,t){return new Promise((function(n,o){var i=new O(e,t);if(i.signal&&i.signal.aborted)return o(new S("Aborted","AbortError"));var u=new XMLHttpRequest;function s(){u.abort()}u.onload=function(){var e,t,r={status:u.status,statusText:u.statusText,headers:(e=u.getAllResponseHeaders()||"",t=new h,e.replace(/\r?\n[\t ]+/g," ").split("\r").map((function(e){return 0===e.indexOf("\n")?e.substr(1,e.length):e})).forEach((function(e){var n=e.split(":"),r=n.shift().trim();if(r){var o=n.join(":").trim();t.append(r,o)}})),t)};r.url="responseURL"in u?u.responseURL:r.headers.get("X-Request-URL");var o="response"in u?u.response:u.responseText;setTimeout((function(){n(new _(o,r))}),0)},u.onerror=function(){setTimeout((function(){o(new TypeError("Network request failed"))}),0)},u.ontimeout=function(){setTimeout((function(){o(new TypeError("Network request failed"))}),0)},u.onabort=function(){setTimeout((function(){o(new S("Aborted","AbortError"))}),0)},u.open(i.method,function(e){try{return""===e&&r.location.href?r.location.href:e}catch(t){return e}}(i.url),!0),"include"===i.credentials?u.withCredentials=!0:"omit"===i.credentials&&(u.withCredentials=!1),"responseType"in u&&(a?u.responseType="blob":c&&i.headers.get("Content-Type")&&-1!==i.headers.get("Content-Type").indexOf("application/octet-stream")&&(u.responseType="arraybuffer")),!t||"object"!=typeof t.headers||t.headers instanceof h?i.headers.forEach((function(e,t){u.setRequestHeader(t,e)})):Object.getOwnPropertyNames(t.headers).forEach((function(e){u.setRequestHeader(e,p(t.headers[e]))})),i.signal&&(i.signal.addEventListener("abort",s),u.onreadystatechange=function(){4===u.readyState&&i.signal.removeEventListener("abort",s)}),u.send(void 0===i._bodyInit?null:i._bodyInit)}))}j.polyfill=!0,r.fetch||(r.fetch=j,r.Headers=h,r.Request=O,r.Response=_)},69599:()=>{},88653:(e,t,n)=>{"use strict";const r=n(5837);e.exports=a;const o=function(){function e(e){return void 0!==e&&e}try{return"undefined"!=typeof globalThis||Object.defineProperty(Object.prototype,"globalThis",{get:function(){return delete Object.prototype.globalThis,this.globalThis=this},configurable:!0}),globalThis}catch(t){return e(self)||e(window)||e(this)||{}}}().console||{},i={mapHttpRequest:h,mapHttpResponse:h,wrapRequestSerializer:y,wrapResponseSerializer:y,wrapErrorSerializer:y,req:h,res:h,err:function(e){const t={type:e.constructor.name,msg:e.message,stack:e.stack};for(const n in e)void 0===t[n]&&(t[n]=e[n]);return t}};function a(e){(e=e||{}).browser=e.browser||{};const t=e.browser.transmit;if(t&&"function"!=typeof t.send)throw Error("pino: transmit option must have a send function");const n=e.browser.write||o;e.browser.write&&(e.browser.asObject=!0);const r=e.serializers||{},i=function(e,t){if(Array.isArray(e))return e.filter((function(e){return"!stdSerializers.err"!==e}));return!0===e&&Object.keys(t)}(e.browser.serialize,r);let c=e.browser.serialize;Array.isArray(e.browser.serialize)&&e.browser.serialize.indexOf("!stdSerializers.err")>-1&&(c=!1);"function"==typeof n&&(n.error=n.fatal=n.warn=n.info=n.debug=n.trace=n),!1===e.enabled&&(e.level="silent");const f=e.level||"info",h=Object.create(n);h.log||(h.log=m),Object.defineProperty(h,"levelVal",{get:function(){return"silent"===this.level?1/0:this.levels.values[this.level]}}),Object.defineProperty(h,"level",{get:function(){return this._level},set:function(e){if("silent"!==e&&!this.levels.values[e])throw Error("unknown level "+e);this._level=e,u(y,h,"error","log"),u(y,h,"fatal","error"),u(y,h,"warn","error"),u(y,h,"info","log"),u(y,h,"debug","log"),u(y,h,"trace","log")}});const y={transmit:t,serialize:i,asObject:e.browser.asObject,levels:["error","fatal","warn","info","debug","trace"],timestamp:d(e)};return h.levels=a.levels,h.level=f,h.setMaxListeners=h.getMaxListeners=h.emit=h.addListener=h.on=h.prependListener=h.once=h.prependOnceListener=h.removeListener=h.removeAllListeners=h.listeners=h.listenerCount=h.eventNames=h.write=h.flush=m,h.serializers=r,h._serialize=i,h._stdErrSerialize=c,h.child=function(n,o){if(!n)throw new Error("missing bindings for child Pino");o=o||{},i&&n.serializers&&(o.serializers=n.serializers);const a=o.serializers;if(i&&a){var u=Object.assign({},r,a),c=!0===e.browser.serialize?Object.keys(u):i;delete n.serializers,s([n],c,u,this._stdErrSerialize)}function f(e){this._childLevel=1+(0|e._childLevel),this.error=l(e,n,"error"),this.fatal=l(e,n,"fatal"),this.warn=l(e,n,"warn"),this.info=l(e,n,"info"),this.debug=l(e,n,"debug"),this.trace=l(e,n,"trace"),u&&(this.serializers=u,this._serialize=c),t&&(this._logEvent=p([].concat(e._logEvent.bindings,n)))}return f.prototype=this,new f(this)},t&&(h._logEvent=p()),h}function u(e,t,n,r){const i=Object.getPrototypeOf(t);t[n]=t.levelVal>t.levels.values[n]?m:i[n]?i[n]:o[n]||o[r]||m,function(e,t,n){if(!e.transmit&&t[n]===m)return;t[n]=(r=t[n],function(){const i=e.timestamp(),u=new Array(arguments.length),l=Object.getPrototypeOf&&Object.getPrototypeOf(this)===o?o:this;for(var p=0;p<u.length;p++)u[p]=arguments[p];if(e.serialize&&!e.asObject&&s(u,this._serialize,this.serializers,this._stdErrSerialize),e.asObject?r.call(l,c(this,n,u,i)):r.apply(l,u),e.transmit){const r=e.transmit.level||t.level,o=a.levels.values[r],c=a.levels.values[n];if(c<o)return;f(this,{ts:i,methodLevel:n,methodValue:c,transmitLevel:r,transmitValue:a.levels.values[e.transmit.level||t.level],send:e.transmit.send,val:t.levelVal},u)}});var r}(e,t,n)}function c(e,t,n,o){e._serialize&&s(n,e._serialize,e.serializers,e._stdErrSerialize);const i=n.slice();let u=i[0];const c={};o&&(c.time=o),c.level=a.levels.values[t];let l=1+(0|e._childLevel);if(l<1&&(l=1),null!==u&&"object"==typeof u){for(;l--&&"object"==typeof i[0];)Object.assign(c,i.shift());u=i.length?r(i.shift(),i):void 0}else"string"==typeof u&&(u=r(i.shift(),i));return void 0!==u&&(c.msg=u),c}function s(e,t,n,r){for(const o in e)if(r&&e[o]instanceof Error)e[o]=a.stdSerializers.err(e[o]);else if("object"==typeof e[o]&&!Array.isArray(e[o]))for(const r in e[o])t&&t.indexOf(r)>-1&&r in n&&(e[o][r]=n[r](e[o][r]))}function l(e,t,n){return function(){const r=new Array(1+arguments.length);r[0]=t;for(var o=1;o<r.length;o++)r[o]=arguments[o-1];return e[n].apply(this,r)}}function f(e,t,n){const r=t.send,o=t.ts,i=t.methodLevel,a=t.methodValue,u=t.val,c=e._logEvent.bindings;s(n,e._serialize||Object.keys(e.serializers),e.serializers,void 0===e._stdErrSerialize||e._stdErrSerialize),e._logEvent.ts=o,e._logEvent.messages=n.filter((function(e){return-1===c.indexOf(e)})),e._logEvent.level.label=i,e._logEvent.level.value=a,r(i,e._logEvent,u),e._logEvent=p(c)}function p(e){return{ts:0,messages:[],bindings:e||[],level:{label:"",value:0}}}function d(e){return"function"==typeof e.timestamp?e.timestamp:!1===e.timestamp?v:g}function h(){return{}}function y(e){return e}function m(){}function v(){return!1}function g(){return Date.now()}a.levels={values:{fatal:60,error:50,warn:40,info:30,debug:20,trace:10},labels:{10:"trace",20:"debug",30:"info",40:"warn",50:"error",60:"fatal"}},a.stdSerializers=i,a.stdTimeFunctions=Object.assign({},{nullTime:v,epochTime:g,unixTime:function(){return Math.round(Date.now()/1e3)},isoTime:function(){return new Date(Date.now()).toISOString()}})},5573:(e,t,n)=>{"use strict";function r(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}n.d(t,{Z:()=>r})},30513:(e,t,n)=>{"use strict";function r(){return(r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}n.d(t,{Z:()=>r})},85854:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(40589);function o(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,(0,r.Z)(e,t)}},3812:(e,t,n)=>{"use strict";function r(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}n.d(t,{Z:()=>r})},40589:(e,t,n)=>{"use strict";function r(e,t){return(r=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}n.d(t,{Z:()=>r})}},i={};function a(e){var t=i[e];if(void 0!==t)return t.exports;var n=i[e]={id:e,loaded:!1,exports:{}};return o[e].call(n.exports,n,n.exports,a),n.loaded=!0,n.exports}a.m=o,a.amdO={},a.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return a.d(t,{a:t}),t},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,a.t=function(n,r){if(1&r&&(n=this(n)),8&r)return n;if("object"==typeof n&&n){if(4&r&&n.__esModule)return n;if(16&r&&"function"==typeof n.then)return n}var o=Object.create(null);a.r(o);var i={};e=e||[null,t({}),t([]),t(t)];for(var u=2&r&&n;"object"==typeof u&&!~e.indexOf(u);u=t(u))Object.getOwnPropertyNames(u).forEach((e=>i[e]=()=>n[e]));return i.default=()=>n,a.d(o,i),o},a.d=(e,t)=>{for(var n in t)a.o(t,n)&&!a.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},a.f={},a.e=e=>Promise.all(Object.keys(a.f).reduce(((t,n)=>(a.f[n](e,t),t)),[])),a.u=e=>({186:"amo-i18n-et-amo-js",339:"amo-i18n-az-amo-js",458:"amo-i18n-eu-amo-js",652:"amo-i18n-de-amo-js",673:"amo-i18n-fy_NL-amo-js",685:"amo-i18n-bn-amo-js",689:"amo-i18n-da-amo-js",929:"amo-i18n-sq-amo-js",972:"amo-i18n-fi-amo-js",1132:"amo-i18n-el-amo-js",1818:"amo-i18n-uk-amo-js",2068:"amo-i18n-nn_NO-amo-js",2580:"amo-i18n-sk-amo-js",2704:"amo-i18n-ka-amo-js",2958:"amo-i18n-ja-amo-js",3107:"amo-i18n-hr-amo-js",3130:"amo-i18n-mt-amo-js",3155:"amo-i18n-tr-amo-js",3178:"amo-i18n-es-amo-js",3197:"amo-i18n-pa_IN-amo-js",3751:"amo-i18n-bs-amo-js",3957:"amo-i18n-lv-amo-js",4402:"amo-i18n-cs-amo-js",4469:"amo-i18n-sl-amo-js",4872:"amo-i18n-zh_CN-amo-js",4960:"amo-i18n-mk-amo-js",5039:"amo-i18n-ia-amo-js",5101:"amo-i18n-mn-amo-js",5110:"amo-i18n-is-amo-js",5256:"amo-i18n-ms-amo-js",5490:"amo-i18n-ro-amo-js",5494:"amo-i18n-zh_TW-amo-js",5763:"amo-i18n-fa-amo-js",5899:"amo-i18n-ur-amo-js",6553:"amo-i18n-vi-amo-js",6737:"amo-i18n-pl-amo-js",6788:"amo-i18n-nb_NO-amo-js",6872:"amo-i18n-ru-amo-js",6897:"amo-i18n-kab-amo-js",6918:"amo-i18n-it-amo-js",7004:"amo-i18n-af-amo-js",7030:"amo-i18n-lt-amo-js",7049:"amo-i18n-dsb-amo-js",7284:"amo-i18n-sv_SE-amo-js",7352:"amo-i18n-hsb-amo-js",7496:"amo-i18n-ar-amo-js",7542:"amo-i18n-id-amo-js",7597:"amo-i18n-ga_IE-amo-js",7636:"amo-i18n-en_US-amo-js",7905:"amo-i18n-pt_PT-amo-js",7927:"amo-i18n-en_GB-amo-js",8470:"amo-i18n-fr-amo-js",8677:"amo-i18n-cak-amo-js",8865:"amo-i18n-ast-amo-js",9290:"amo-i18n-te-amo-js",9300:"amo-i18n-he-amo-js",9419:"amo-i18n-en_CA-amo-js",9628:"amo-i18n-bg-amo-js",9649:"amo-i18n-hu-amo-js",9700:"amo-i18n-pt_BR-amo-js",9814:"amo-i18n-ko-amo-js",9901:"amo-i18n-th-amo-js",9918:"amo-i18n-ca-amo-js",9988:"amo-i18n-nl-amo-js"}[e]+"-"+{186:"c4edd5ffafeafad602ff",339:"cd149e3509aa47511816",458:"3010e8ef9b6535a6e203",652:"72dd2299b65735ff870a",673:"abb93fb7af80c4520617",685:"927e4bdd8b51557c3895",689:"ffdb419d7a69730a3fca",929:"0f001770645cd1d07d42",972:"b1ecc2c0f477149a5870",1132:"2ed8524834c30496bc3b",1818:"beaffb385572dbbf6499",2068:"868767d300f1b1c9cf75",2580:"524edb3f5194ea5fc3aa",2704:"15fd59dd97b35dfa25eb",2958:"fb6020e1404aa4cf7ff0",3107:"444042a469366e8e0542",3130:"e967bd02776f556ef0b8",3155:"0147182f4e9aa118f2a2",3178:"7d3b7d42fe93066ba266",3197:"2e801117c0fe85087d08",3751:"ef19ad413f5a3c946beb",3957:"cbb2dbb2fa1d6eb53b97",4402:"3336f6cbd82e87f56e6f",4469:"5ac35ba9855d1688402c",4872:"40f4fca69bd8a96da247",4960:"5ebf299a5fbe2cc740de",5039:"303e155422b3255cff08",5101:"35983318a95ef0c4654d",5110:"e5c19ba54ec1c8eeb71f",5256:"16b76b19415a75f43848",5490:"5aad4a87a2514e8ffacd",5494:"ef9e3c8440084b95d1be",5763:"40d4569d4754da51d74c",5899:"c4c67d1400bccb6664c9",6553:"c2ea66611d5db3ef2294",6737:"31db0e331f5b4acb7aa8",6788:"f9328795b73c6b647e10",6872:"7476fa74b2800a4a2f21",6897:"8bfc9dccf70a027a90ac",6918:"adccdaa4baad4f1147c1",7004:"ea862cf8e76dedbd6df4",7030:"bbd8b538f06b55bd9920",7049:"4ca46a1527faa7c3134a",7284:"e670cb84f484d60ffd82",7352:"092aba055d7a4b534658",7496:"07fea7e3155bee9fefca",7542:"0b7e29a78482365b2852",7597:"03c35dc66ccc6de60919",7636:"409e344d91d603e3c14e",7905:"6f2eb8c371d1c907b811",7927:"a46a87652cd93b1bc79e",8470:"0820b8e54540fa427175",8677:"30346548dd8163664bab",8865:"edd5e9fa54e632b77a96",9290:"7e30f5fd1497fc58c510",9300:"39731d49c5b45d2fbe86",9419:"d838516726bdcc2d998d",9628:"d799c6b357db719198ed",9649:"6370082631668991bab6",9700:"f71a489416710abf2465",9814:"8f85fb209750f43377f5",9901:"675d83c8568f11229f4e",9918:"e062ad38948b978a49f2",9988:"dfee20c108aa4bb368b3"}[e]+".js"),a.miniCssF=e=>"amo-3d24af19c698652ec47b.css",a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),a.hmd=e=>((e=Object.create(e)).children||(e.children=[]),Object.defineProperty(e,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+e.id)}}),e),a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n={},r="mozilla-addons-frontend:",a.l=(e,t,o,i)=>{if(n[e])n[e].push(t);else{var u,c;if(void 0!==o)for(var s=document.getElementsByTagName("script"),l=0;l<s.length;l++){var f=s[l];if(f.getAttribute("src")==e||f.getAttribute("data-webpack")==r+o){u=f;break}}u||(c=!0,(u=document.createElement("script")).charset="utf-8",u.timeout=120,a.nc&&u.setAttribute("nonce",a.nc),u.setAttribute("data-webpack",r+o),u.src=e,0!==u.src.indexOf(window.location.origin+"/")&&(u.crossOrigin="anonymous"),u.integrity=a.sriHashes[i],u.crossOrigin="anonymous"),n[e]=[t];var p=(t,r)=>{u.onerror=u.onload=null,clearTimeout(d);var o=n[e];if(delete n[e],u.parentNode&&u.parentNode.removeChild(u),o&&o.forEach((e=>e(r))),t)return t(r)},d=setTimeout(p.bind(null,void 0,{type:"timeout",target:u}),12e4);u.onerror=p.bind(null,u.onerror),u.onload=p.bind(null,u.onload),c&&document.head.appendChild(u)}},a.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),a.p="/static-frontend/",a.sriHashes={186:"sha512-BinXcmSqa+EdgDwT6XTIE25GNWEGnWeTWAFnMUzUyOF5B3crT7k7/fIJBYU+hBRKcrVZaKFJvQqUpyZRYcecyg==",339:"sha512-c8ZotMBOGLFU7bPCoOQJxkCnKB1zcD/f2ItH5nVyJkoumJ7nqPR9ec+HK9GR4pLG/MAzCLHyLxpFUlOpn/81LQ==",458:"sha512-qUBSoDpfPW26paCS9Zkgw9RR7mNRiYycYaxT8qbdpdmjN0Q4ggQWsDh9OR1+/EttC1TofESM1flhQmYP4OPuOg==",652:"sha512-+d41h58bhTkkMDCiBjRXlToscXeTWc0bhZoRhbE8+FN1MMv2JgO3KKJfc0IZPKgffk8smf/7Q+lDz+iGn/Ht7A==",673:"sha512-FZrUY8VVU3cQbrAku4YZvW2IqNkwaZIJPEtZ4RlMUms/2JGXZx6uGAlxHBT2j+vMuvZkXJfNCbo4t+RbwkOMjQ==",685:"sha512-AQi+X7+GC6dn9iyFv00eiOqXMJ2P03aoQ9MuTJRLGYWOBS3wqO6A+hkhOBiiwwbyyWV5FtsF2IH1AK7OYJ7SCA==",689:"sha512-v0Bhjc/JkHY5JbTkO8ljNByU0ilXKEMdaWgepFxIvnKw0KiuWR3H31cs2ohRz0Ckz/WZhqjMJlbfoguARCmfZw==",929:"sha512-NV5ov1672NMFX9di5+YuVPbpj6w0FL5JD0j73MXw5kYOOuBDHm9q54tKungRJK4XfrM4KRbMON5NfrXidhpOeQ==",972:"sha512-6/nwFOikUyimxhsI9Bx7IL39N+dvypWMMl4voSUL0TVExPLTNvfsAuR/1foXVMjesclLIBUQMOZjgSYs8eLFLA==",1132:"sha512-RGZiEKGbXfCKxefxAV2d4VjOIJSvLKwQsVnyUDWVe193XGvI5awVBZMKdv1N+YQ8835neYqsbEGmAOszncWgVA==",1818:"sha512-hV5VxWJjKN2VN0k06H/VbRfHeLbBRh9iiOAwa9Mr7uBMCkm9qZqFwsbiaBLM4Tm6Z+ryVtsds8slYDXng/IRPA==",2068:"sha512-MwcRl6cmmDirS1flQzUJqshmSy3w1NoeZJzEIVQat/3KnuB7LwEFKMySXRBwtHoWd+ROgArSpywSbvpcQ1qoOQ==",2580:"sha512-5LDa2m1EkK3NhAgQb09id94ZZ2du6uTayRwEGGNyCHsHnTzpAF5kOhZg34HPRVyF/mtCYDRQXGotz6W7SY4oHw==",2704:"sha512-Ikh8Xcm7tNvd9RKFyQUlODCWdJunBQgnxI4HkkfT7XivH50S+YMcO0eM7bT3tJAGnskSCzK9NnsU73sce6C/9A==",2958:"sha512-BotLrzIGWJ76pLhE12QOIkRdb2YT/takKNtqep6uoN1WjIvBLSBjv1mOvuIker+qAuLR0bFlyXhN+0VoYjXnoQ==",3107:"sha512-ocrH9vV7590iy9UFHYXiK/QuDlxcSQLjb+TQXRsyI6Y/E0pzdDwX285nc/AJK6JnIPVcmnCQKAu0JhVz5nkXOA==",3130:"sha512-8pskVqLA39qntxOtMTrrvQNGYO0vhGpJzAnIugVGmINAY2YDCF4LLl1uIv4NcPD9C3SHBU7jeFr/EOzIRXBrWg==",3155:"sha512-G/6H5DNUrWPEQv3O56FbVQKoU4mTa11++vxs5RpBzWwu7ZjeV8QeuTJKm8+g1SH2xx1Pk7EVryCLyQoZjoJolg==",3178:"sha512-77YQLcsrjyE92lNLf259wlcj+7K0IscU6Jp19LjZ0eeZ5Jdswyr2ls1sV4o1WQ0LdVdaayIZ2cd0jWsvSGUZpA==",3197:"sha512-9dFMZxHh94BbzEbRZSOek585ireMUPEnF/qdzyDV7SX/ae1yqQIBNK3YPgZJfrTV8hjMxhqGJWH/shwSIg0ccA==",3751:"sha512-VX+31lUL0Wzo+dItDLxjDwiJIDZTepE3RSkglWbOI5KbYkbhDTzm3kuDoE05gdLqGzlyy3I8RjUUnMP8BKRfnA==",3957:"sha512-fUfjyh8+h+pYcBdbS4Tb2slE7YEw1pisX8XypqbLvv34ZZ1sW1O+bD96BeYf4CTJQe7g5a5ngD0C5mRUpI+2ig==",4402:"sha512-LDS1hvvqrxn/ibcMa0OIbUGEJBPGpMghjqN/hV2ups1OAc8SiDXH7OxcSXcko9KfkF6zueHMKTZmKgvacp3UuA==",4469:"sha512-s2NF+vXsT+Bag3Y+WRjyllHoVOyhSvJF64okF1dMiiioJzdBowcQfhnxXvF1sff7+vUrqpLJdo4lLWq1Av4POQ==",4872:"sha512-QMehNo5qMRyCAyiVWX2+qiVaD9nHUrUxoRv8wL5dW60M1T7VyvO5q9XX2TP8qAGlXV4UWt625zh/93ipYSm4tg==",4960:"sha512-jGQOSJ0CFSJrF7EtnbelzxafCtwfeJBKFuvyCwdxPn9ih0sapNM8EvUgqegadokut48syyJ7uBx4qQD4OQKp2g==",5039:"sha512-WD2McLKHMpNMnlHHu75iS/L2U0uH5eFNs4kEQXwCJ0/vGxgLcSFpOrPFb5q7fD43AgO/j6gmpdXjKhR/4j+FFA==",5101:"sha512-vl+2W7Mu03gO+qqVAhurfaPD3uvJZVNXRJ6neHW098+efSV15bV0VnxvqHxHqfT3TgXEuK84IKsfLk8EAWP8zw==",5110:"sha512-9VLAMcOwQwkrieHbYGdEY9roWOrseTht1fgXhmig04aif3hYaD2PazXWkrsDYEkCEiZBksJYPiAffrFf4V/c/w==",5256:"sha512-184S62wVXIIEN+uh+qmcf/p9AlTsXks+YFXAm0KX9zx03hhD/RoBlNUTw88m3DLH8VCKjJVssM/K1sKYzPjWyA==",5490:"sha512-SAZ1h52DA3s856pDQsNOJ2BXR/dFfJD9ENz/EYgpBd13erMcVSZY+ZUaHF6fi4OAmSrXQtpya9a1rLXeFy4xYg==",5494:"sha512-Vc8fLJz1Y+mRwdtnc3o1wN2+Z3DHJ9rq/cNo71JMctBvsUfYvEn8iYj9rpBPycr2yKxv+aK2mViFaEPANkC2fg==",5763:"sha512-A5RXQye+yzImrZOIl3w50r6ptGdh+aEn5SbJk4UUxl7nrZq+uadHIGJK5Y/OWWWY1IhxJQa84C4G9y3Qnm/G/g==",5899:"sha512-8CoGr+IfG+JN0KUPzjpckSJw7XG5HHCrSPVyTBSmpMFdBB9pGuaRxLaVvSEV3Qkd+9jJ3qlEwuPiBvE2eWmnkA==",6553:"sha512-uHPPfPJp7S7kuV/pL61DxGNLTHzaN7XIU8Mw5V6ryLjAaNgyV5TROYxugiHeEWD1sbzxRUNeGdrNBpP3Ft+yDg==",6737:"sha512-9aEA5DkNk0NxiwqccTI12jwLFqCIOiX6sx0Gyk3Rmbrbgb78F5Xc7xdrKpzPKrVfRh6qfOa1BF3hZ7OepOVpMQ==",6788:"sha512-OWQiL11/QDkGPJ1TuxvepFlYndP5kUVdcvJxZyeoqN3wNf3q1vPu7mo1we0QlmAunCcAk+T7cfgd4IvSbFYjcA==",6872:"sha512-xtr1Ai7uvF+7LPW5TdP/bnBLjsFrFhgGJS/OkHcx0ozOAKl3PotZspAz0XRQU5p4reoIZWmsUs1yRHsrD7B4rA==",6897:"sha512-h6+iIgGaYzo/9JRcG1BpWS8BiVne1Py9uarwCtvcqNTZFLNJbGpSXXLf5Upd4oPUO2BkjkibnEECoY9Q0HyKtA==",6918:"sha512-f60G4Me8Bppg3nobkkYOuZXV+wAYIaX9T/wdD2nlERFLGL7lxIMoSdUjc4D47Y1p6V9WYedJKkvzRBiY9TQAkA==",7004:"sha512-BLEswm1FhCKaEMgplNY+rVGNZTOCmwg/SDW0yY3t7J7cfgRbGLOymKcVUM0PEbrW01rXtzeOKBbSojne/uBmAA==",7030:"sha512-MYd6ZEe+s/+vE2WDXc7lAOBCrTDdB413FHN+4mU2Nq9+qCDxrPpNRK3C5V7s5m/t7QmUAhYRz2koqYbz1c6g5Q==",7049:"sha512-lYAQu8uWDCcPkwjQcTKj4gy/m9CpapeAR3TRGXawwDMoTGYfuczi87nAHElKJgWFt2sM227RZmHY+sG7nbeFhg==",7284:"sha512-syj2zEQd5YYWfybknV9+L9RO5KXc1ELekTBLYYUVWScJGL/PaYd/QaLUlsMP4/HP53HJ9zZGBur0E0LlVp1ROA==",7352:"sha512-rIc5cEZzH4ramnBwCOvjLC8Oq+/uEKfBaiN8Ac+VF52va0eX7sd7EPeTBfR7doWicZalYC33OXouAgBMryZwGw==",7496:"sha512-rxhUSPycNlYzpauRdVDp5NUeOmfmHjGwCGBYb0qVOSX3loWdvrn6w4leLsrb72twKrEm3POY6cPPbquarJU6Eg==",7542:"sha512-2hTnrWjcywVt82rwONYZyC95AuQaAI0Y2hyafGOHZy/ZRzxE9vE4G/jUaDdNOf2WVsgZqfRAbO4ftTvJ1FqnoQ==",7597:"sha512-5dW/XrGLc97BDB/Oh06IglMFYuJBxoEldmgb3H2HSiAv2JBHxhkonltdoCobZM0biTP4RZ/h3sukJY4+0VX6Gg==",7636:"sha512-FJg7rxO0CMsl3tppttdC+ZwjaUKQdjZUYNdhdc6TKwYp94ZSZyEQAcsBI7qoWHsV98d3Qgoklh/joaWNrEWerw==",7905:"sha512-jjY9wWibPClahBBq+7WKrGwljpeyHXk2CPhCUEibELP+/Oy5lgnPr5GB0dW7A7+mHbRpQoVVY+gNIO4gO+wPXg==",7927:"sha512-Ss0z5T1/1IjaU6pNrT1Ypc+0HsllVN0+p8csl+wRwzYsiKOz4BGUrh595AuTRtPJa7BJzo5ztDCbHRxiB/ylfw==",8470:"sha512-64u+fzCIbSqgFX1muIOptJ9JLIuf2AY83WWSEmJ//aIBaIAZDIaxEk/bXm54HezLZSo2p+Wb7DKmFWMm/NnplQ==",8677:"sha512-M0SehFwN2sXNXd70DLntTIyiAMPVBZ1996ruMZqxDa+javGFVQ4ZYEA0GHUbfNEpzc6ShAE19pc8PWvfoXGzOA==",8865:"sha512-dp0wmQr6SLB1NscpuzM9YdCIJmiqiGVN9jO2BljfvevgwEXwWUVY1wzBwmhqXZ4+G0XabLSecJOqo+Lu0y2lIg==",9290:"sha512-wo6nV438tJALMboUyC2zHno1Suau0wwD8oKtKK61HzCdvt6VqqTTbHJ963xmvZrNka0sRG8/NoVIek345VHmow==",9300:"sha512-QNsn3LPp7l+SKKhX26oW1mJdxKrjVLbRRafjELn5B6PXdsHAqiQCm/uZwNEYOdVsq9RR0BKZyrNQsfg9N5hc1A==",9419:"sha512-kH/Yx9qm9BmMxwS6LMmmOMYuCCofYG0oBBTuENh84f5S6t7DO+/jWHRgtqFq63q2o3/RXdVBvrbVWk9RCnuoyQ==",9628:"sha512-nov0NpLXSXS0lB6UYFVRleSSVwwHasilsFx02PWrp81IYiILvzdWnpKKyCJy3gNbZdigy4Xx0i1DwCfvuvo0nw==",9649:"sha512-/kBTcEMUG8Vgsc/BMGRzQHKBFCV//kFfNdC3bwJ4KFWhbgpZnzTLb1qk2FN5cfnA/6jh1DFf+IbSXsbsGI2aXw==",9700:"sha512-346KGu+qre+TNWVabgl+vj9W3tGigUNv7mKL1f95b6POGQNIlDBh9u6miYS7n6Q7Wtn2e5vPd6qZqBKnQm02Og==",9814:"sha512-S7BhUiZruYuMJez+GkGh4h1SYiaQXLnbgWF5FB/rfzNaZp4FKH8GfBL5v58udzPr4PGmtAoqVmMgl6J+QPVZ3Q==",9901:"sha512-MwvFkpvcu8/J1dTmcHdqUjfz3hgpfFUh1fjzSWUb8pquCnm2+topHsGPpsDl3J9D8wTMeNKtBrUGOej2gfNtmA==",9918:"sha512-NovZTt7c75+HPKUtoi1xXFU2dCJf6cEhb9mJuWfJZWKb8gCL0faEAE72v9XK0gsmEWaloNE0+Zu89GwKNPsGdQ==",9988:"sha512-2ahW0sRscRfEuB+JJWSy8YoBZq+AmKHWu94QM9gezUyDPBwo1kE2TVXM3ktKTBuVz6d119kAZCxG1zsMnRJiKg=="},(()=>{var e={9937:0};a.f.j=(t,n)=>{var r=a.o(e,t)?e[t]:void 0;if(0!==r)if(r)n.push(r[2]);else{var o=new Promise(((n,o)=>r=e[t]=[n,o]));n.push(r[2]=o);var i=a.p+a.u(t),u=new Error;a.l(i,(n=>{if(a.o(e,t)&&(0!==(r=e[t])&&(e[t]=void 0),r)){var o=n&&("load"===n.type?"missing":n.type),i=n&&n.target&&n.target.src;u.message="Loading chunk "+t+" failed.\n("+o+": "+i+")",u.name="ChunkLoadError",u.type=o,u.request=i,r[1](u)}}),"chunk-"+t,t)}};var t=(t,n)=>{var r,o,[i,u,c]=n,s=0;if(i.some((t=>0!==e[t]))){for(r in u)a.o(u,r)&&(a.m[r]=u[r]);if(c)c(a)}for(t&&t(n);s<i.length;s++)o=i[s],a.o(e,o)&&e[o]&&e[o][0](),e[o]=0},n=self.webpackChunkmozilla_addons_frontend=self.webpackChunkmozilla_addons_frontend||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))})(),(()=>{"use strict";a(72764),a(99627),a(12978),a(79249),a(38957),a(51913),a(20227),a(21094),a(22532),a(49564),a(67407),a(22653),a(59201),a(86781),a(92792),a(83159),a(9536),a(83386),a(88627),a(42478),a(99918),a(72145),a(87758),a(66728),a(53689),a(33529),a(21699);var e=a(29343),t=a(18647),n=a(90528),r=a(84258),o=a(14486),i=a(99133),u=a(8191);function c(e,t){void 0===t&&(t={});var n=function(e){if(e&&"j"===e[0]&&":"===e[1])return e.substr(2);return e}(e);if(function(e,t){return void 0===t&&(t=!e||"{"!==e[0]&&"["!==e[0]&&'"'!==e[0]),!t}(n,t.doNotParse))try{return JSON.parse(n)}catch(e){}return e}var s=function(){return(s=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)};const l=function(){function e(e,t){var n=this;this.changeListeners=[],this.HAS_DOCUMENT_COOKIE=!1,this.cookies=function(e,t){return"string"==typeof e?u.Q(e,t):"object"==typeof e&&null!==e?e:{}}(e,t),new Promise((function(){n.HAS_DOCUMENT_COOKIE="object"==typeof document&&"string"==typeof document.cookie})).catch((function(){}))}return e.prototype._updateBrowserValues=function(e){this.HAS_DOCUMENT_COOKIE&&(this.cookies=u.Q(document.cookie,e))},e.prototype._emitChange=function(e){for(var t=0;t<this.changeListeners.length;++t)this.changeListeners[t](e)},e.prototype.get=function(e,t,n){return void 0===t&&(t={}),this._updateBrowserValues(n),c(this.cookies[e],t)},e.prototype.getAll=function(e,t){void 0===e&&(e={}),this._updateBrowserValues(t);var n={};for(var r in this.cookies)n[r]=c(this.cookies[r],e);return n},e.prototype.set=function(e,t,n){var r;"object"==typeof t&&(t=JSON.stringify(t)),this.cookies=s(s({},this.cookies),((r={})[e]=t,r)),this.HAS_DOCUMENT_COOKIE&&(document.cookie=u.q(e,t,n)),this._emitChange({name:e,value:t,options:n})},e.prototype.remove=function(e,t){var n=t=s(s({},t),{expires:new Date(1970,1,1,0,0,1),maxAge:0});this.cookies=s({},this.cookies),delete this.cookies[e],this.HAS_DOCUMENT_COOKIE&&(document.cookie=u.q(e,"",n)),this._emitChange({name:e,value:void 0,options:t})},e.prototype.addChangeListener=function(e){this.changeListeners.push(e)},e.prototype.removeChangeListener=function(e){var t=this.changeListeners.indexOf(e);t>=0&&this.changeListeners.splice(t,1)},e}(),f=l;var p=r.createContext(new f),d=p.Provider,h=p.Consumer;var y,m=(y=function(e,t){return(y=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}y(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});const v=function(e){function t(t){var n=e.call(this,t)||this;return t.cookies?n.cookies=t.cookies:n.cookies=new l,n}return m(t,e),t.prototype.render=function(){return r.createElement(d,{value:this.cookies},this.props.children)},t}(r.Component);var g=a(72466),b=(a(82765),a(98120),a(25701),a(53486)),w=a.n(b);function O(e){return(O="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function E(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function _(e,t){return(_=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function x(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=j(e);if(t){var o=j(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return S(this,n)}}function S(e,t){if(t&&("object"===O(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function j(e){return(j=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var P=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&_(e,t)}(a,e);var t,n,o,i=x(a);function a(e,t){var n;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),(n=i.call(this,e,t)).i18n=e.i18n,n}return t=a,(n=[{key:"getChildContext",value:function(){return{i18n:this.i18n}}},{key:"render",value:function(){var e=this.props.children;return r.Children.only(e)}}])&&E(t.prototype,n),o&&E(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);P.propTypes={i18n:w().object.isRequired,children:w().element.isRequired},P.childContextTypes={i18n:w().object.isRequired};const k=function(e){var n=e._config,o=void 0===n?t.Z:n,a=e.children,u=e.history,c=e.i18n,s=e.store,l=e.cookies,f=void 0===l?null:l;return r.createElement(P,{i18n:c},r.createElement(g.Provider,{store:s,key:"provider"},r.createElement(i.xI,{history:u},r.createElement(v,{cookies:f},o.get("enableStrictMode")?r.createElement(r.StrictMode,null,a):a))))};a(36353),a(61511),a(42484),a(24450),a(45792),a(6893),a(53790),a(4356),a(38233),a(13940),a(42396),a(71772),a(4941),a(34591),a(41866),a(11253),a(28417),a(72829),a(17918),a(52906),a(31815),a(9229),a(14862),a(7283),a(75880);var I=a(67683),T=a.n(I),R=a(12321),C=a.n(R),A=a(59348),N=a.n(A),L=a(9119),D=a(2163);function M(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function F(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?M(Object(n),!0).forEach((function(t){U(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):M(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function U(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function B(e){return(B="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function H(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,o,i=[],a=!0,u=!1;try{for(n=n.call(e);!(a=(r=n.next()).done)&&(i.push(r.value),!t||i.length!==t);a=!0);}catch(e){u=!0,o=e}finally{try{a||null==n.return||n.return()}finally{if(u)throw o}}return i}(e,t)||q(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function q(e,t){if(e){if("string"==typeof e)return z(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?z(e,t):void 0}}function z(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var G=t.Z.get("defaultLang"),W=t.Z.get("langs"),V=t.Z.get("langMap"),Y=(W.concat(Object.keys(V)),t.Z.get("rtlLangs"));function Z(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:L.Z;if(e&&e.split){var r=e.split("_");if(1===r.length)t=r[0].toLowerCase();else if(2===r.length){var o=r[1];o=o.length>2?o[0].toUpperCase()+o.slice(1).toLowerCase():o.toUpperCase(),t="".concat(r[0].toLowerCase(),"-").concat(o)}else 3===r.length?t="".concat(r[0].toLowerCase(),"-").concat(r[2].toUpperCase()):n.error("Unable to map a language from locale code [".concat(e,"]"))}return t}function $(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:L.Z;if(e&&e.split){var r=e.split("-");if(1===r.length)t=r[0].toLowerCase();else if(2===r.length){var o=r[1];o=o.length>2?o[0].toUpperCase()+o.slice(1).toLowerCase():o.toUpperCase(),t="".concat(r[0].toLowerCase(),"_").concat(o)}else 3===r.length?t="".concat(r[0].toLowerCase(),"_").concat(r[2].toUpperCase()):n.error("Unable to map a locale from language code [".concat(e,"]"))}return t}function K(e){return Z($(e))}function Q(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t._langs,r=void 0===n?W:n;return r.includes(e)}function X(e){var t=K(e);return Q(t)||(t=V.hasOwnProperty(t)?V[t]:G),t}function J(e){var t=X(e);return Y.includes(t)}function ee(e){return e.replace("_","-").toLowerCase()}function te(e){return e&&e.replace&&e.trim?e.replace(/(?:\n(?:\s*))+/g," ").trim():e}var ne=function(e){var t=e._filesize,n=void 0===t?T():t,r=e._log,o=void 0===r?L.Z:r,i=e.i18n,a=e.size,u={B:i.gettext("%(localizedSize)s B"),KB:i.gettext("%(localizedSize)s KB"),MB:i.gettext("%(localizedSize)s MB"),GB:i.gettext("%(localizedSize)s GB"),TB:i.gettext("%(localizedSize)s TB")},c=H(n(a,{base:2,standard:"jedec"}).split(" "),2),s=c[0],l=c[1];if(!s||!l)return o.error('Filesize returned sizeNumber: "'.concat(s,'", sizeName: "').concat(l,'" size "').concat(a,'"')),i.formatNumber(a);var f=i.formatNumber(s),p=u[l];return p?i.sprintf(p,{localizedSize:f}):(o.error("Filesize returned unrecognized unit: ".concat(l)),f)};function re(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:C(),r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=r._Intl,i=void 0===o?"undefined"!=typeof Intl?Intl:void 0:o,a=new n(e);a.lang=t,"object"===B(i)&&Object.prototype.hasOwnProperty.call(i,"NumberFormat")?(L.Z.debug("Intl.NumberFormat exists"),a.numberFormat=new i.NumberFormat(t)):L.Z.debug("Intl.NumberFormat does NOT exist"),a.formatNumber=function(e){return void 0!==a.numberFormat?a.numberFormat.format(e):e.toLocaleString(t)},a.options&&"function"==typeof a.options._momentDefineLocale&&a.options._momentDefineLocale(),a._dcnpgettext=a.dcnpgettext,a.dcnpgettext=function(e,t,n,r,o){return a._dcnpgettext(e,t,te(n),te(r),o)};var u=ee(a.lang);return a.moment=function(){var e=N().apply(void 0,arguments);return e.locale(u),e},a}var oe=function(e,t){return"".concat(e,",").concat(t)},ie=function(e){var t=e.text,n=e.replacements;if(0===n.length)throw new Error("`replacements` should not be empty");var r=t.match(/%\(\w+\)s/g),o=(r&&r.length||0)/2;if(0===o)throw new Error("No placeholder found in `text`");if(o!==n.length)throw new Error("Expected ".concat(o," replacements but only got ").concat(n.length));var i=new RegExp(["^(.*?)",n.map((function(){return"%\\((\\w+)\\)s(.+?)%\\((\\w+)\\)s"})).join("(.*?)"),"(.*?)$"].join("")),a=t.match(i),u=n.reduce((function(e,t){var n=oe(t[0],t[1]);if(e[n])throw new Error("Duplicate key detected in `replacements`: ".concat(n));return F(F({},e),{},U({},n,t[2]))}),{});if(!a)throw new Error("`text` does not appear to be compatible with the provided replacements");a.shift();for(var c=[];a.length;){var s=a.shift();if(u[oe(s,a[1])]){var l=a.shift(),f=a.shift(),p=oe(s,f),d=u[p];c.push(d(l)),delete u[p]}else c.push(s)}if(Object.keys(u).length>0)throw new Error("Not all replacements have been used; unused keys: ".concat(Object.keys(u).join("; ")));return c},ae=(a(95581),a(92973),a(9989)),ue=a(83021),ce=a.n(ue),se=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},le="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};const fe=function(e,t,n){ce()("function"==typeof t,"A stringify function is required in order to transform query objects into search strings."),ce()("function"==typeof n,"A parse function is required in order to transform search strings into query objects.");var r=function(e){if("object"===(void 0===e?"undefined":le(e))){var n=e.search||"";return e.query&&(n=t(e.query)).length>0&&"?"!==n.charAt(0)&&(n="?"+n),se({},e,{search:n})}return e},o=function(e){var t=e.search;return se({},e,{query:t?n("?"===t.charAt(0)?t.substring(1):t):{}})};e.listen((function(t){!function(e){["length","entries","index","action"].forEach((function(t){e.hasOwnProperty(t)&&(i[t]=e[t])}))}(e)}));var i=se({},e,{listen:function(t){return e.listen((function(e,n){var r=null!=e.location;r&&(n=e.action,e=e.location);var i=o(e);r?t({location:i,action:n}):t(i,n)}))},push:function(t,n){return e.push(r(t),n)},replace:function(t,n){return e.replace(r(t),n)},createHref:function(t){return e.createHref(r(t))}});return Object.defineProperty(i,"location",{get:function(){return o(e.location)}}),i};var pe=a(27107),de=(a(1047),a(80763),a(48078),a(17066)),he=a.n(de);function ye(e){return function(e){if(Array.isArray(e))return me(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return me(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return me(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function me(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function ve(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function ge(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ve(Object(n),!0).forEach((function(t){be(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ve(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function be(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var we={af:{English:"Afrikaans",native:"Afrikaans"},ach:{English:"Acholi",native:"Acholi"},ak:{English:"Akan",native:"Akan"},"am-et":{English:"Amharic",native:"አማርኛ"},an:{English:"Aragonese",native:"aragonés"},ar:{English:"Arabic",native:"عربي"},as:{English:"Assamese",native:"অসমীয়া"},ast:{English:"Asturian",native:"Asturianu"},az:{English:"Azerbaijani",native:"Azərbaycanca"},be:{English:"Belarusian",native:"Беларуская"},bg:{English:"Bulgarian",native:"Български"},bm:{English:"Bambara",native:"Bamanankan"},"bn-BD":{English:"Bengali (Bangladesh)",native:"বাংলা (বাংলাদেশ)"},"bn-IN":{English:"Bengali (India)",native:"বাংলা (ভারত)"},bn:{English:"Bengali",native:"বাংলা"},br:{English:"Breton",native:"Brezhoneg"},brx:{English:"Bodo",native:"बर'"},bs:{English:"Bosnian",native:"Bosanski"},ca:{English:"Catalan",native:"Català"},"ca-valencia":{English:"Catalan (Valencian)",native:"Català (Valencià)"},cak:{English:"Kaqchikel",native:"Maya Kaqchikel"},cs:{English:"Czech",native:"Čeština"},csb:{English:"Kashubian",native:"Kaszëbsczi"},cy:{English:"Welsh",native:"Cymraeg"},da:{English:"Danish",native:"Dansk"},dbg:{English:"Debug Robot",native:"Ḓḗƀŭɠ Řǿƀǿŧ"},de:{English:"German",native:"Deutsch"},"de-AT":{English:"German (Austria)",native:"Deutsch (Österreich)"},"de-CH":{English:"German (Switzerland)",native:"Deutsch (Schweiz)"},"de-DE":{English:"German (Germany)",native:"Deutsch (Deutschland)"},dsb:{English:"Lower Sorbian",native:"Dolnoserbšćina"},ee:{English:"Ewe",native:"Eʋe"},el:{English:"Greek",native:"Ελληνικά"},"en-AU":{English:"English (Australian)",native:"English (Australian)"},"en-CA":{English:"English (Canadian)",native:"English (Canadian)"},"en-GB":{English:"English (British)",native:"English (British)"},"en-NZ":{English:"English (New Zealand)",native:"English (New Zealand)"},"en-US":{English:"English (US)",native:"English (US)"},"en-ZA":{English:"English (South African)",native:"English (South African)"},eo:{English:"Esperanto",native:"Esperanto"},es:{English:"Spanish",native:"Español"},"es-AR":{English:"Spanish (Argentina)",native:"Español (de Argentina)"},"es-CL":{English:"Spanish (Chile)",native:"Español (de Chile)"},"es-ES":{English:"Spanish (Spain)",native:"Español (de España)"},"es-MX":{English:"Spanish (Mexico)",native:"Español (de México)"},et:{English:"Estonian",native:"Eesti keel"},eu:{English:"Basque",native:"Euskara"},fa:{English:"Persian",native:"فارسی"},"fa-IR":{English:"Persian (Iran)",native:"(ایران) فارسی"},ff:{English:"Fulah",native:"Pulaar-Fulfulde"},fi:{English:"Finnish",native:"suomi"},"fj-FJ":{English:"Fijian",native:"Vosa vaka-Viti"},fr:{English:"French",native:"Français"},"fur-IT":{English:"Friulian",native:"Furlan"},"fy-NL":{English:"Frisian",native:"Frysk"},ga:{English:"Irish",native:"Gaeilge"},"ga-IE":{English:"Irish",native:"Gaeilge"},gd:{English:"Gaelic (Scotland)",native:"Gàidhlig"},gl:{English:"Galician",native:"Galego"},gn:{English:"Guarani (Paraguay)",native:"GuaranÍ"},gu:{English:"Gujarati",native:"ગુજરાતી"},"gu-IN":{English:"Gujarati (India)",native:"ગુજરાતી (ભારત)"},ha:{English:"Hausa",native:"Hausa"},he:{English:"Hebrew",native:"עברית"},hi:{English:"Hindi",native:"हिन्दी"},"hi-IN":{English:"Hindi (India)",native:"हिन्दी (भारत)"},hr:{English:"Croatian",native:"Hrvatski"},hsb:{English:"Upper Sorbian",native:"Hornjoserbsce"},hu:{English:"Hungarian",native:"magyar"},"hy-AM":{English:"Armenian",native:"Հայերեն"},ia:{English:"Interlingua",native:"Interlingua"},id:{English:"Indonesian",native:"Bahasa Indonesia"},ig:{English:"Igbo",native:"Igbo"},is:{English:"Icelandic",native:"íslenska"},it:{English:"Italian",native:"Italiano"},ja:{English:"Japanese",native:"日本語"},"ja-JP-mac":{English:"Japanese",native:"日本語"},ka:{English:"Georgian",native:"ქართული"},kab:{English:"Kabyle",native:"Taqbaylit"},kk:{English:"Kazakh",native:"Қазақ"},km:{English:"Khmer",native:"ខ្មែរ"},kn:{English:"Kannada",native:"ಕನ್ನಡ"},ko:{English:"Korean",native:"한국어"},kok:{English:"Konkani",native:"कोंकनी"},ku:{English:"Kurdish",native:"Kurdî"},ks:{English:"Kashmiri",native:"كشمیری"},la:{English:"Latin",native:"Latina"},lg:{English:"Luganda",native:"Luganda"},lij:{English:"Ligurian",native:"Ligure"},ln:{English:"Lingala",native:"Lingála"},lo:{English:"Lao",native:"ພາສາລາວ"},lt:{English:"Lithuanian",native:"lietuvių kalba"},lv:{English:"Latvian",native:"Latviešu"},mai:{English:"Maithili",native:"मैथिली মৈথিলী"},mg:{English:"Malagasy",native:"Malagasy"},mi:{English:"Maori (Aotearoa)",native:"Māori (Aotearoa)"},mk:{English:"Macedonian",native:"Македонски"},ml:{English:"Malayalam",native:"മലയാളം"},mn:{English:"Mongolian",native:"Монгол"},mr:{English:"Marathi",native:"मराठी"},ms:{English:"Malay",native:"Melayu"},mt:{English:"Maltese",native:"Malti"},my:{English:"Burmese",native:"မြန်မာဘာသာ"},"nb-NO":{English:"Norwegian (Bokmål)",native:"Norsk bokmål"},"ne-NP":{English:"Nepali",native:"नेपाली"},"nn-NO":{English:"Norwegian (Nynorsk)",native:"Norsk nynorsk"},nl:{English:"Dutch",native:"Nederlands"},nr:{English:"Ndebele, South",native:"isiNdebele"},nso:{English:"Northern Sotho",native:"Sepedi"},oc:{English:"Occitan",native:"occitan"},or:{English:"Oriya",native:"ଓଡ଼ିଆ"},pa:{English:"Punjabi",native:"ਪੰਜਾਬੀ"},"pa-IN":{English:"Punjabi (India)",native:"ਪੰਜਾਬੀ (ਭਾਰਤ)"},pl:{English:"Polish",native:"Polski"},"pt-BR":{English:"Portuguese (Brazilian)",native:"Português (do Brasil)"},"pt-PT":{English:"Portuguese (Portugal)",native:"Português (Europeu)"},ro:{English:"Romanian",native:"Română"},rm:{English:"Romansh",native:"rumantsch"},ru:{English:"Russian",native:"Русский"},rw:{English:"Kinyarwanda",native:"Ikinyarwanda"},sa:{English:"Sanskrit",native:"संस्कृत"},sat:{English:"Santali",native:"संताली"},sah:{English:"Sakha",native:"Сахалыы"},sco:{English:"Scots",native:"Scots"},si:{English:"Sinhala",native:"සිංහල"},sk:{English:"Slovak",native:"slovenčina"},sl:{English:"Slovenian",native:"Slovenščina"},son:{English:"Songhai",native:"Soŋay"},sq:{English:"Albanian",native:"Shqip"},sr:{English:"Serbian",native:"Српски"},"sr-Cyrl":{English:"Serbian",native:"Српски"},"sr-Latn":{English:"Serbian",native:"Srpski"},ss:{English:"Siswati",native:"siSwati"},st:{English:"Southern Sotho",native:"Sesotho"},"sv-SE":{English:"Swedish",native:"Svenska"},sw:{English:"Swahili",native:"Kiswahili"},szl:{English:"Silesian",native:"Ślōnski"},ta:{English:"Tamil",native:"தமிழ்"},"ta-IN":{English:"Tamil (India)",native:"தமிழ் (இந்தியா)"},"ta-LK":{English:"Tamil (Sri Lanka)",native:"தமிழ் (இலங்கை)"},te:{English:"Telugu",native:"తెలుగు"},th:{English:"Thai",native:"ไทย"},tl:{English:"Tagalog",native:"Tagalog"},tn:{English:"Tswana",native:"Setswana"},tr:{English:"Turkish",native:"Türkçe"},trs:{English:"Triqui",native:"Nánj nï'ïn"},ts:{English:"Tsonga",native:"Xitsonga"},tsz:{English:"Purépecha",native:"Purépecha"},"tt-RU":{English:"Tatar",native:"Tatarça"},uk:{English:"Ukrainian",native:"Українська"},ur:{English:"Urdu",native:"اُردو"},uz:{English:"Uzbek",native:"Oʻzbek tili"},ve:{English:"Venda",native:"Tshivenḓa"},vec:{English:"Venetan",native:"Vèneto"},vi:{English:"Vietnamese",native:"Tiếng Việt"},wo:{English:"Wolof",native:"Wolof"},"x-testing":{English:"Testing",native:"Ŧḗşŧīƞɠ"},xh:{English:"Xhosa",native:"isiXhosa"},yo:{English:"Yoruba",native:"Yorùbá"},"zh-CN":{English:"Chinese (Simplified)",native:"中文 (简体)"},"zh-TW":{English:"Chinese (Traditional)",native:"正體中文 (繁體)"},zu:{English:"Zulu",native:"isiZulu"}},Oe=t.Z.get("langs").reduce((function(e,t){return void 0!==we[t]?ge(ge({},e),{},be({},t,we[t])):e}),{}),Ee=[].concat(ye(Object.keys(t.Z.get("hrefLangsMap"))),ye(Object.keys(Oe).filter((function(e){return!t.Z.get("unsupportedHrefLangs").includes(e)}))));const _e=Oe;var xe=a(79952),Se=a.n(xe);function je(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Pe(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?je(Object(n),!0).forEach((function(t){ke(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):je(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function ke(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Ie="FINISH_UPDATE_USER_ACCOUNT",Te="UPDATE_USER_ACCOUNT",Re="LOG_OUT_USER",Ce="LOAD_CURRENT_USER_ACCOUNT",Ae="FETCH_USER_ACCOUNT",Ne="LOAD_USER_ACCOUNT",Le="DELETE_USER_PICTURE",De="FETCH_USER_NOTIFICATIONS",Me="LOAD_USER_NOTIFICATIONS",Fe="DELETE_USER_ACCOUNT",Ue="UNLOAD_USER_ACCOUNT",Be="UNSUBSCRIBE_NOTIFICATION",He="ABORT_UNSUBSCRIBE_NOTIFICATION",qe="FINISH_UNSUBSCRIBE_NOTIFICATION",ze={currentUserID:null,byID:{},byUsername:{},isUpdating:!1,userPageBeingViewed:{loading:!1,userId:null},isUnsubscribedFor:{},currentUserWasLoggedOut:!1,resetStateOnNextChange:!1},Ge=function(e){var t=e.errorHandlerId,n=e.userId;return ce()(t,"errorHandlerId is required"),ce()(n,"userId is required"),{type:Ae,payload:{errorHandlerId:t,userId:n}}},We=function(e){var t=e.user;return ce()(t,"user is required"),{type:Ce,payload:{user:t}}},Ve=function(e){var t=e.user;return ce()(t,"user is required"),{type:Ne,payload:{user:t}}},Ye=function(e){var t=e.userId;return ce()(t,"userId is required"),{type:Ue,payload:{userId:t}}};function Ze(){return{type:Re,payload:{}}}var $e=function(e){var t=e.errorHandlerId,n=e.userId;return ce()(t,"errorHandlerId is required"),ce()(n,"userId is required"),{type:De,payload:{errorHandlerId:t,userId:n}}},Ke=function(e){var t=e.notifications,n=e.userId;return ce()(t,"notifications is required"),ce()(n,"userId is required"),{type:Me,payload:{notifications:t,userId:n}}},Qe=function(e,t){return ce()("number"==typeof t,"userId is required"),e.byID[t]},Xe=function(e){if(!e.currentUserID)return null;var t=Qe(e,e.currentUserID);return ce()(t,"currentUserID is defined but no matching user found in users state."),t},Je=function(e){return!!e&&(e.is_addon_developer||e.is_artist)},et=function(e,t){var n=Xe(e.users);if(!n)return!1;var r=n.permissions;if(!r)return!1;if(r.includes(D.jm))return!0;if(r.includes(t))return!0;var o=r.filter((function(e){return e.endsWith(":*")})).map((function(e){return e.replace(":*","")})),i=t.split(":")[0];return o.includes(i)},tt=function(e){var t=Xe(e.users);if(!t)return!1;var n=t.permissions;return!!n&&(!!n.includes(D.jm)||(n.includes(D.Mr)||n.includes(D.mD)||n.includes(D.jy)||n.includes(D.QZ)||n.includes(D.Yp)||n.includes(D.V_)||n.includes(D.xS)||n.includes(D.lS)))},nt=function(e){var t=e.state,n=e.user;ce()(n,"user is required");var r=Qe(t,n.id)||{notifications:null};return{byID:Pe(Pe({},t.byID),{},ke({},n.id,Pe(Pe({},r),n))),byUsername:Pe(Pe({},t.byUsername),{},ke({},n.username.toLowerCase(),n.id))}},rt=function(e){var t=e.hash,n=e.notification,r=e.token;return ce()(t,"hash is required"),ce()(n,"notification is required"),ce()(r,"token is required"),{type:qe,payload:{hash:t,notification:n,token:r}}},ot=function(e){var t=e.hash,n=e.notification,r=e.token;return ce()(t,"hash is required"),ce()(n,"notification is required"),ce()(r,"token is required"),{type:He,payload:{hash:t,notification:n,token:r}}},it=function(e){var t=e.hash,n=e.notification,r=e.token;return ce()(t,"hash is required"),ce()(n,"notification is required"),ce()(r,"token is required"),"".concat(t,"-").concat(n,"-").concat(r)},at=function(e,t,n,r){return e.isUnsubscribedFor[it({hash:t,notification:n,token:r})]};const ut=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ze,n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.Z;switch(n.type){case Te:return Pe(Pe({},e),{},{isUpdating:!0});case Ie:return Pe(Pe({},e),{},{isUpdating:!1});case Ce:var o=n.payload.user;return Pe(Pe(Pe({},e),nt({state:e,user:o})),{},{currentUserID:o.id});case Ne:var a=n.payload.user;return Pe(Pe({},e),nt({state:e,user:a}));case Me:var u=n.payload,c=u.notifications,s=u.userId,l=Qe(e,s);return ce()(l,"user is required"),ce()(c,"notifications are required"),Pe(Pe({},e),{},{byID:Pe(Pe({},e.byID),{},ke({},l.id,Pe(Pe({},l),{},{notifications:c})))});case Re:return Pe(Pe({},e),{},{currentUserID:null,currentUserWasLoggedOut:!0});case Ue:var f=n.payload.userId;if(e.byID[f]){var p=e.byID[f].username;return Pe(Pe({},e),{},{currentUserID:e.currentUserID===f?null:e.currentUserID,byID:Pe(Pe({},e.byID),{},ke({},f,void 0)),byUsername:Pe(Pe({},e.byUsername),{},ke({},p,void 0))})}return e;case Be:var d=n.payload,h=d.hash,y=d.notification,m=d.token;return Pe(Pe({},e),{},{isUnsubscribedFor:Pe(Pe({},e.isUnsubscribedFor),{},ke({},it({hash:h,notification:y,token:m}),!1))});case He:var v=n.payload,g=v.hash,b=v.notification,w=v.token;return Pe(Pe({},e),{},{isUnsubscribedFor:Pe(Pe({},e.isUnsubscribedFor),{},ke({},it({hash:g,notification:b,token:w}),null))});case qe:var O=n.payload,E=O.hash,_=O.notification,x=O.token;return Pe(Pe({},e),{},{isUnsubscribedFor:Pe(Pe({},e.isUnsubscribedFor),{},ke({},it({hash:E,notification:_,token:x}),!0))});case i.nk:return r.get("server")?e:e.resetStateOnNextChange?Pe(Pe({},e),{},{resetStateOnNextChange:!1,currentUserWasLoggedOut:!1}):Pe(Pe({},e),{},{resetStateOnNextChange:!0});default:return e}};function ct(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function st(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ct(Object(n),!0).forEach((function(t){lt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ct(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function lt(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var ft="SET_AUTH_TOKEN",pt="SET_CLIENT_APP",dt="SET_LANG",ht="SET_REGION_CODE",yt="SET_REQUEST_ID",mt="SET_USER_AGENT",vt="Android",gt="iOS",bt={clientApp:"",lang:"",regionCode:null,requestId:null,token:null,userAgent:null,userAgentInfo:{browser:{},device:{},os:{}}};function wt(e){return ce()(e,"clientApp cannot be falsey"),{type:pt,payload:{clientApp:e}}}var Ot,Et;a(92124);function _t(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function xt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function St(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?xt(Object(n),!0).forEach((function(t){jt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):xt(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function jt(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Pt(e){return["__gt","__lt","__lte","__gte",""].reduce((function(t,n){return St(St({},t),{},jt({},"".concat(e).concat(n),"".concat(e).concat(n)))}),{})}var kt=St(St({app:"clientApp",appversion:"compatibleWithVersion",author:"author",category:"category",exclude_addons:"exclude_addons",guid:"guid",page:"page",page_size:"page_size",promoted:"promoted",q:"query"},Pt("ratings")),{},{sort:"sort",tag:"tag",type:"addonType"},Pt("users"));function It(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=n.config,o=void 0===r?t.Z:r,i=n.filters,a=n.userAgentInfo;if(!i)throw new Error("filters are required");if(!a)throw new Error("userAgentInfo is required");var u=St({},i);if("Firefox"===a.browser.name&&a.os.name!==gt){var c=parseInt(a.browser.version,10);c>=57&&(o.get("restrictSearchResultsToAppVersion")?(L.Z.debug((0,e.f9)(Ot||(Ot=_t(['Setting "compatibleWithVersion" to current application\n version (Firefox ',") so only relevant extensions are\n displayed."])),c)),u.compatibleWithVersion=a.browser.version):L.Z.warn((0,e.f9)(Et||(Et=_t(['restrictSearchResultsToAppVersion config set;\n not setting "compatibleWithVersion" to current application version,\n even though it\'s above 57.'])))))}return u}function Tt(e){return Object.keys(kt).reduce((function(t,n){return e&&void 0!==e[kt[n]]&&""!==e[kt[n]]?St(St({},t),{},jt({},n,e[kt[n]])):t}),{})}function Rt(e){return Object.keys(kt).reduce((function(t,n){var r=e[n];return Array.isArray(e[n])&&(L.Z.info("".concat(n," param was provided multiple times: ").concat(r)),r=e[n][0]),void 0!==r&&""!==r?St(St({},t),{},jt({},kt[n],r)):t}),{})}var Ct,At=function(e){var t=e.api,n=St({},e.filters);return!n.clientApp&&t.clientApp&&(L.Z.debug("No clientApp found in filters; using api.clientApp (".concat(t.clientApp,")")),n.clientApp=t.clientApp),n.clientApp===D.wZ&&(n.promoted=D.g$,n.addonType=D.Gz),n},Nt=function(e){var t=St({},e);return delete t.clientApp,delete t.lang,t};a(71246);function Lt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Dt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Lt(Object(n),!0).forEach((function(t){Mt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Lt(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Mt(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ft(e){var t={};return Object.keys(e).forEach((function(n){void 0!==e[n]&&(t[n]=e[n])})),t}function Ut(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=ae.parse(e,!0);return n.search=null,n.query=Ft(Dt(Dt({},n.query),t)),ae.format(n)}function Bt(e){return{utm_campaign:e.query.utm_campaign,utm_content:e.query.utm_content,utm_medium:e.query.utm_medium,utm_source:e.query.utm_source}}function Ht(e){return(Ht="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function qt(){qt=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==Ht(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}function zt(e,t,n,r,o,i,a){try{var u=e[i](a),c=u.value}catch(e){return void n(e)}u.done?t(c):Promise.resolve(c).then(r,o)}function Gt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Wt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Gt(Object(n),!0).forEach((function(t){Vt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Gt(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Vt(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Yt="".concat(t.Z.get("apiHost")).concat(t.Z.get("apiPath"));function Zt(e){var t=Wt({},e);return Object.keys(t).forEach((function(e){var n=t[e];null!=n&&""!==n||delete t[e]})),ae.format({query:t})}function $t(n){var r=n.endpoint,o=n.params,i=void 0===o?{}:o,a=n.auth,u=void 0!==a&&a,c=n.apiState,s=void 0===c?bt:c,l=n.method,f=void 0===l?"GET":l,p=n.body,d=n.credentials,h=n.errorHandler,y=n._config,m=void 0===y?t.Z:y,v=n.version,g=void 0===v?m.get("apiVersion"):v,b=n._log,w=void 0===b?L.Z:b;if(!r)return Promise.reject(new Error('endpoint URL cannot be falsy: "'.concat(r,'"')));h&&h.clear();var O="".concat(t.Z.get("apiPath")).concat(g),E=ae.parse(r,!0),_=E.pathname||"";if(E.host){if(!_.startsWith(O))return Promise.reject(new Error('Absolute URL "'.concat(r,'" has an unexpected prefix.')))}else{var x=_.startsWith("/")?"":"/";_="".concat(O).concat(x).concat(_)}var S=Zt(Wt(Wt(Wt({},E.query),i),{},{lang:s.lang})),j={headers:{},method:f.toUpperCase(),credentials:void 0,body:void 0};d&&(j.credentials="include"),p&&(p instanceof he()?(j.body=p,delete j.headers["Content-type"]):(j.body=JSON.stringify(p),j.headers["Content-type"]="application/json")),u&&s.token&&(j.headers.authorization="Session ".concat(s.token)),s.regionCode&&(j.headers["X-Country-Code"]=s.regionCode),_=_.endsWith("/")?_:"".concat(_,"/");var P="".concat(t.Z.get("apiHost")).concat(_).concat(S);return fetch(P,j).then((function(t){var n=t.headers.get("Content-Type");return"application/json"===(n=n&&n.toLowerCase())?t.json().then((function(e){return{response:t,jsonResponse:e}})):t.text().then((function(r){var o,i;return w.warn((0,e.f9)(Ct||(o=["Response from API was not JSON (was Content-Type:\n ",") %o"],i||(i=o.slice(0)),Ct=Object.freeze(Object.defineProperties(o,{raw:{value:Object.freeze(i)}}))),n),{body:r?r.substring(0,100):"[empty]",status:t.status||"[unknown]",url:t.url||"[unknown]"}),{jsonResponse:{},response:t}}))})).then((function(e){var n=e.response,r=e.jsonResponse;if(n.ok)return r;var o=function(e){var n=e.apiURL,r=e.response,o=e.jsonResponse,i="[unknown URL]";n&&(i=(i=n.replace(t.Z.get("apiHost"),"")).split("?")[0]);var a=new Error("Error calling: ".concat(i," (status: ").concat(r.status,")"));return a.response={apiURL:n,status:r.status,data:o},a}({apiURL:P,response:n,jsonResponse:r});throw h&&h.handle(o),o}),(function(e){throw h&&h.handle(e),e}))}function Kt(e){var t=e.api,n=e.showGroupedRatings,r=void 0!==n&&n,o=e.slug,i=t.clientApp,a=t.userAgentInfo.browser.version;return a||L.Z.debug("Failed to parse appversion for client app ".concat(i||"[empty]")),$t({endpoint:Ut("addons/addon/".concat(o),{app:i,appversion:a||"",show_grouped_ratings:String(r)}),auth:!0,apiState:t})}function Qt(e){var n=e._config,r=void 0===n?t.Z:n,o=e._window,i=void 0===o?"undefined"!=typeof window?window:null:o,a=e.location,u=r.get("fxaConfig"),c=Zt({config:u,to:"local"===u&&i?i.location.href:ae.format(Wt({},a))});return"".concat(Yt).concat(r.get("apiVersion"),"/accounts/login/start/").concat(c)}function Xt(e){var t=e._fixFiltersForClientApp,n=void 0===t?At:t,r=e.api,o=It({filters:n({api:r,filters:e.filters}),userAgentInfo:r.userAgentInfo});return $t({endpoint:"addons/autocomplete",params:Wt({app:r.clientApp},Tt(o)),apiState:r})}var Jt=function(){var e,t=(e=qt().mark((function e(t){var n,r,o,i,a,u,c,s,l,f=arguments;return qt().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=f.length>1&&void 0!==f[1]?f[1]:{},r=n.pageLimit,o=void 0===r?100:r,i=[],u=0,c=0,s=1;case 5:if(!(s<=o)){e.next=21;break}return e.next=8,t(a);case 8:if(l=e.sent,u||(u=l.count),c||(c=l.page_size),i=i.concat(l.results),!l.next){e.next=17;break}a=l.next,L.Z.debug('Fetching next page "'.concat(a,'"')),e.next=18;break;case 17:return e.abrupt("return",{count:u,page_size:c,results:i});case 18:s++,e.next=5;break;case 21:throw new Error("Fetched too many pages (the limit is ".concat(o,")"));case 22:case"end":return e.stop()}}),e)})),function(){var t=this,n=arguments;return new Promise((function(r,o){var i=e.apply(t,n);function a(e){zt(i,r,o,a,u,"next",e)}function u(e){zt(i,r,o,a,u,"throw",e)}a(void 0)}))});return function(e){return t.apply(this,arguments)}}(),en=function(e){if("object"!==Ht(e))throw new Error('Expected an object type, got "'.concat(Ht(e),'"'));Object.keys(e).forEach((function(e){if(void 0===_e[e])throw new Error('Unknown locale: "'.concat(e,'"'))}))},tn=a(44683);const nn=window,rn=a.n(tn)()(nn);var on=["utm_campaign","utm_content","utm_medium","utm_source","utm_term"];function an(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function un(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?an(Object(n),!0).forEach((function(t){cn(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):an(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function cn(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function sn(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function ln(e){return"/addon/".concat(e,"/")}var fn=function(e){var t=e.utm_campaign,n=void 0===t?D.Bg:t,r=e.utm_content,o=void 0===r?null:r,i=e.utm_medium,a=void 0===i?D.AT:i,u=e.utm_source,c=void 0===u?D.Pr:u,s=e.utm_term,l=void 0===s?null:s;return Zt(un(un({},sn(e,on)),{},{utm_campaign:n,utm_content:o,utm_medium:a,utm_source:c,utm_term:l}))},pn=function(e){var n=e._config,r=void 0===n?t.Z:n,o=e.locationPathname;return"".concat(r.get("baseURL")).concat(o)},dn=function(e){var n=e._config,r=void 0===n?t.Z:n,o=e.urlString,i=r.get("baseURL"),a=ae.parse(o,!0),u=o.startsWith("/")&&!o.startsWith("//"),c=ae.parse(i).host||"",s=c===a.host||o.startsWith("//".concat(c)),l=/^\/blog\//.test(a.pathname||""),f=(u||s)&&!l,p=o.startsWith("//".concat(c))?o.replace("//".concat(c),""):o.replace(i,"");return f&&!p.startsWith("/")&&(p="/".concat(p)),{isInternal:f,relativeURL:p}},hn=function(e){var t=e.utm_content;return"".concat(D.q3).concat(fn({utm_campaign:null,utm_content:t}))},yn=function(e){var t=e._checkInternalURL,n=void 0===t?dn:t,r=e.urlString;if(n({urlString:r}).isInternal){var o=ae.parse(r,!0);if(o.pathname){var i=o.pathname.split("/")[1];if(Q(i))return r.replace("".concat(i,"/"),"")}}return r};function mn(e){switch(e){case!0:case 1:case"1":case"true":return!0;default:return!1}}function vn(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:rn;return{__html:n.sanitize(e,{ALLOWED_TAGS:t})}}function gn(e){return(e||"").replace(/(\r\n|\r|\n)(?!<\/?(li|ul|ol)>)/g,"<br />")}function bn(e){return vn(gn(e),["a","abbr","acronym","b","blockquote","br","code","em","i","li","ol","strong","ul"])}function wn(e){var t=e.addon,n=e.userId;return!!(t&&t.authors&&t.authors.length&&n)&&t.authors.some((function(e){return e.id===n}))}function On(e){return Object.prototype.hasOwnProperty.call(D.Po,e)}function En(e){if(!On(e))throw new Error('"'.concat(e,'" not found in API_ADDON_TYPES_MAPPING'));return D.Po[e]}function _n(e){return Object.prototype.hasOwnProperty.call(D.LF,e)}function xn(e){if(!_n(e))throw new Error('"'.concat(e,'" not found in VISIBLE_ADDON_TYPES_MAPPING'));return D.LF[e]}var Sn,jn,Pn,kn,In,Tn=function(e){var t=e;return t.startsWith("src")||(t=t.replace(/^.*src/,"src")),t},Rn=function(e){return e.displayName||e.name||"Component"},Cn=function(e){var t=e.history,n=e._parse,r=void 0===n?pe.parse:n,o=e._stringify,i=void 0===o?pe.stringify:o;return fe(t,i,r)},An=(a(78685),function(e,t){return{name:e,value:void 0===t?-1:t,delta:0,entries:[],id:"v2-".concat(Date.now(),"-").concat(Math.floor(8999999999999*Math.random())+1e12)}}),Nn=function(e,t){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){if("first-input"===e&&!("PerformanceEventTiming"in self))return;var n=new PerformanceObserver((function(e){return e.getEntries().map(t)}));return n.observe({type:e,buffered:!0}),n}}catch(e){}},Ln=function(e,t){var n=function n(r){"pagehide"!==r.type&&"hidden"!==document.visibilityState||(e(r),t&&(removeEventListener("visibilitychange",n,!0),removeEventListener("pagehide",n,!0)))};addEventListener("visibilitychange",n,!0),addEventListener("pagehide",n,!0)},Dn=function(e){addEventListener("pageshow",(function(t){t.persisted&&e(t)}),!0)},Mn=function(e,t,n){var r;return function(o){t.value>=0&&(o||n)&&(t.delta=t.value-(r||0),(t.delta||void 0===r)&&(r=t.value,e(t)))}},Fn=-1,Un=function(){return"hidden"===document.visibilityState?0:1/0},Bn=function(){Ln((function(e){var t=e.timeStamp;Fn=t}),!0)},Hn=function(){return Fn<0&&(Fn=Un(),Bn(),Dn((function(){setTimeout((function(){Fn=Un(),Bn()}),0)}))),{get firstHiddenTime(){return Fn}}},qn=function(e,t){var n,r=Hn(),o=An("FCP"),i=function(e){"first-contentful-paint"===e.name&&(u&&u.disconnect(),e.startTime<r.firstHiddenTime&&(o.value=e.startTime,o.entries.push(e),n(!0)))},a=window.performance&&performance.getEntriesByName&&performance.getEntriesByName("first-contentful-paint")[0],u=a?null:Nn("paint",i);(a||u)&&(n=Mn(e,o,t),a&&i(a),Dn((function(r){o=An("FCP"),n=Mn(e,o,t),requestAnimationFrame((function(){requestAnimationFrame((function(){o.value=performance.now()-r.timeStamp,n(!0)}))}))})))},zn=!1,Gn=-1,Wn=function(e,t){zn||(qn((function(e){Gn=e.value})),zn=!0);var n,r=function(t){Gn>-1&&e(t)},o=An("CLS",0),i=0,a=[],u=function(e){if(!e.hadRecentInput){var t=a[0],r=a[a.length-1];i&&e.startTime-r.startTime<1e3&&e.startTime-t.startTime<5e3?(i+=e.value,a.push(e)):(i=e.value,a=[e]),i>o.value&&(o.value=i,o.entries=a,n())}},c=Nn("layout-shift",u);c&&(n=Mn(r,o,t),Ln((function(){c.takeRecords().map(u),n(!0)})),Dn((function(){i=0,Gn=-1,o=An("CLS",0),n=Mn(r,o,t)})))},Vn={passive:!0,capture:!0},Yn=new Date,Zn=function(e,t){Sn||(Sn=t,jn=e,Pn=new Date,Qn(removeEventListener),$n())},$n=function(){if(jn>=0&&jn<Pn-Yn){var e={entryType:"first-input",name:Sn.type,target:Sn.target,cancelable:Sn.cancelable,startTime:Sn.timeStamp,processingStart:Sn.timeStamp+jn};kn.forEach((function(t){t(e)})),kn=[]}},Kn=function(e){if(e.cancelable){var t=(e.timeStamp>1e12?new Date:performance.now())-e.timeStamp;"pointerdown"==e.type?function(e,t){var n=function(){Zn(e,t),o()},r=function(){o()},o=function(){removeEventListener("pointerup",n,Vn),removeEventListener("pointercancel",r,Vn)};addEventListener("pointerup",n,Vn),addEventListener("pointercancel",r,Vn)}(t,e):Zn(t,e)}},Qn=function(e){["mousedown","keydown","touchstart","pointerdown"].forEach((function(t){return e(t,Kn,Vn)}))},Xn=function(e,t){var n,r=Hn(),o=An("FID"),i=function(e){e.startTime<r.firstHiddenTime&&(o.value=e.processingStart-e.startTime,o.entries.push(e),n(!0))},a=Nn("first-input",i);n=Mn(e,o,t),a&&Ln((function(){a.takeRecords().map(i),a.disconnect()}),!0),a&&Dn((function(){var r;o=An("FID"),n=Mn(e,o,t),kn=[],jn=-1,Sn=null,Qn(addEventListener),r=i,kn.push(r),$n()}))},Jn={},er=function(e,t){var n,r=Hn(),o=An("LCP"),i=function(e){var t=e.startTime;t<r.firstHiddenTime&&(o.value=t,o.entries.push(e),n())},a=Nn("largest-contentful-paint",i);if(a){n=Mn(e,o,t);var u=function(){Jn[o.id]||(a.takeRecords().map(i),a.disconnect(),Jn[o.id]=!0,n(!0))};["keydown","click"].forEach((function(e){addEventListener(e,u,{once:!0,capture:!0})})),Ln(u,!0),Dn((function(r){o=An("LCP"),n=Mn(e,o,t),requestAnimationFrame((function(){requestAnimationFrame((function(){o.value=performance.now()-r.timeStamp,Jn[o.id]=!0,n(!0)}))}))}))}};function tr(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function nr(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?tr(Object(n),!0).forEach((function(t){rr(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):tr(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function rr(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function or(e){return(or="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function ir(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function ar(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function ur(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function cr(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e._log,n=void 0===t?L.Z:t,r=e._navigator,o=void 0===r?"undefined"!=typeof navigator?navigator:null:r,i=e._window,a=void 0===i?"undefined"!=typeof window?window:null:i;if(!o||!a)return!1;var u=o.doNotTrack||a.doNotTrack;return"1"===u&&(n.info("Do Not Track is enabled"),!0)}var sr=function(e){return{eventAction:e.action,eventCategory:e.category,eventLabel:e.label,eventValue:e.value,hitType:"event"}};function lr(e){var t;return(t={},rr(t,D.jV,D.JW),rr(t,D.Gz,D.JW),rr(t,D.d$,D.JW),rr(t,D.Yd,D.o6),t)[e]||D.HH}var fr=function(e,t){var n=D.Yd===e;switch(t){case D.H0:return n?D.jM:D.ZV;case D.lm:return n?D.i_:D.lx;case D.nl:return n?D.Oj:D.o_;case D.gQ:return n?D.Zt:D.aS;case D.VN:return n?D.z8:D.ui;default:return n?D.dJ:D.z}};const pr=new(function(){function n(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},o=r._config,i=void 0===o?t.Z:o,a=r._isDoNotTrackEnabled,u=void 0===a?cr:a,c=r._getCLS,s=void 0===c?Wn:c,l=r._getFID,f=void 0===l?Xn:l,p=r._getLCP,d=void 0===p?er:p;if(ar(this,n),"undefined"!=typeof window&&(this._log=L.Z,this.logPrefix="[GA]",this.id=i.get("trackingId"),mn(i.get("trackingEnabled"))?this.id?u()?(this.log((0,e.f9)(In||(In=ir(["Do Not Track Enabled; Google Analytics not\n loaded and tracking disabled"])))),this.trackingEnabled=!1):(this.log("Google Analytics is enabled"),this.trackingEnabled=!0):(this.log("GA Disabled because trackingId was empty"),this.trackingEnabled=!1):(this.log("GA disabled because trackingEnabled was false"),this.trackingEnabled=!1),this.logPrefix="[GA: ".concat(this.trackingEnabled?"ON":"OFF","]"),this.trackingEnabled&&(window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)},ga.l=+new Date,ga("create",this.id,"auto"),ga("set","transport","beacon"),mn(i.get("trackingSendInitPageView"))&&ga("send","pageview"),ga("set","dimension3","addons-frontend"),mn(i.get("trackingSendWebVitals"))))){this.log("trackingSendWebVitals is enabled");var h=this.sendWebVitalStats.bind(this);s(h),f(h),d(h)}}var r,o,i;return r=n,(o=[{key:"sendWebVitalStats",value:function(e){var t=e.name,n=e.delta,r=e.id;this.log("sendWebVitalStats",{name:t,delta:n,id:r}),this._ga("send","event",{eventCategory:"Web Vitals",eventAction:t,eventLabel:r,eventValue:Math.round("CLS"===t?1e3*n:n),nonInteraction:!0,transport:"beacon"})}},{key:"log",value:function(e,t){if(this._log){var n=void 0===t?"%s %s":"%s %s: %o";this._log.info(n,this.logPrefix,e,t)}}},{key:"_ga",value:function(){var e;this.trackingEnabled&&(e=window).ga.apply(e,arguments)}},{key:"sendEvent",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e._config,r=void 0===n?t.Z:n,o=e.action,i=e.category,a=e.label,u=e.sendSecondEventWithOverrides,c=e.value;if(!i)throw new Error("sendEvent: category is required");if(!o)throw new Error("sendEvent: action is required");if(r.get("server"))throw new Error("sendEvent: cannot send tracking events on the server");var s={action:o,category:i,label:a,value:c},l=sr(s);if(this._ga("send",l),this.log("sendEvent",l),"object"===or(u)){var f=sr(nr(nr({},s),u));this._ga("send",f),this.log("sendEvent",f)}}},{key:"setPage",value:function(e){if(!e)throw new Error("setPage: page is required");this._ga("set","page",e),this.log("setPage",e)}},{key:"pageView",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this._ga("send",nr({hitType:"pageview"},e)),this.log("pageView",e)}},{key:"setDimension",value:function(e){var t=e.dimension,n=e.value;ce()(t,"A dimension is required"),ce()(n,"A value is required"),this._ga("set",t,n),this.log("set",{dimension:t,value:n})}}])&&ur(r.prototype,o),i&&ur(r,i),Object.defineProperty(r,"prototype",{writable:!1}),n}());function dr(e){return(dr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var hr,yr;function mr(){mr=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==dr(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}function vr(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function gr(e,t,n,r,o,i,a){try{var u=e[i](a),c=u.value}catch(e){return void n(e)}u.done?t(c):Promise.resolve(c).then(r,o)}function br(e){return function(){var t=this,n=arguments;return new Promise((function(r,o){var i=e.apply(t,n);function a(e){gr(i,r,o,a,u,"next",e)}function u(e){gr(i,r,o,a,u,"throw",e)}a(void 0)}))}}function wr(){return(wr=br(mr().mark((function i(u){var c,s,l,f,p,d,h,y,m,v,g,b,w,O,E,_,x,S,j,P,I,T,R,C=arguments;return mr().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:if(c=C.length>1&&void 0!==C[1]?C[1]:{},s=c._config,l=void 0===s?t.Z:s,f=c._createBrowserHistory,p=void 0===f?n.lX:f,d=c._tracking,h=void 0===d?pr:d,y=c.sagas,m=void 0===y?null:y,!l.get("isDevelopment")){i.next=5;break}return v=a(14777),g=v.fetchBufferedLogs,i.next=5,g();case 5:if(t.Z.get("enableStrictMode")&&L.Z.info((0,e.f9)(hr||(hr=vr(["StrictMode is enabled, which causes double redux action\n dispatching. See: https://github.com/mozilla/addons-frontend/issues/6424"])))),b=document.getElementById("redux-store-state"),O=document.querySelector("html"),E=X(O.getAttribute("lang")),_=$(E),b)try{w=JSON.parse(b.textContent)}catch(e){L.Z.error("Could not load initial redux data")}if((x=Cn({history:p({forceRefresh:!(!w||!w.site)&&w.site.loadedPageIsAnonymous})})).listen((function(e){h.setPage(e.pathname),h.pageView({title:""})})),S=u({history:x,initialState:w}),j=S.sagaMiddleware,P=S.store,m&&j?j.run(m):L.Z.warn("sagas not found"),I={},i.prev=16,_===$(l.get("defaultLang"))){i.next=21;break}return i.next=20,a(82603)("./".concat(_,"/amo.js"));case 20:I=i.sent;case 21:i.next=26;break;case 23:i.prev=23,i.t0=i.catch(16),L.Z.info((0,e.f9)(yr||(yr=vr(['Locale not found or required for locale: "','".\n Falling back to default lang: "','"'])),_,l.get("defaultLang")));case 26:return T=re(I,E),R=function(e){(0,o.render)(r.createElement(k,{history:x,i18n:T,store:P},r.createElement(e,null)),document.getElementById("react-view"))},i.abrupt("return",{history:x,renderApp:R,store:P});case 29:case"end":return i.stop()}}),i,null,[[16,23]])})))).apply(this,arguments)}var Or,Er,_r,xr,Sr=a(29622),jr=a.n(Sr),Pr=a(1816),kr=a.n(Pr),Ir=a(40801),Tr=a.n(Ir),Rr=a(28608),Cr=a.n(Rr),Ar="bodyAttributes",Nr="htmlAttributes",Lr="titleAttributes",Dr={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title"},Mr=(Object.keys(Dr).map((function(e){return Dr[e]})),"charset"),Fr="cssText",Ur="href",Br="http-equiv",Hr="innerHTML",qr="itemprop",zr="name",Gr="property",Wr="rel",Vr="src",Yr="target",Zr={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},$r="defaultTitle",Kr="defer",Qr="encodeSpecialCharacters",Xr="onChangeClientState",Jr="titleTemplate",eo=Object.keys(Zr).reduce((function(e,t){return e[Zr[t]]=t,e}),{}),to=[Dr.NOSCRIPT,Dr.SCRIPT,Dr.STYLE],no="data-react-helmet",ro="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},oo=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},io=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),ao=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},uo=function(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n},co=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t},so=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return!1===t?String(e):String(e).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;")},lo=function(e){var t=mo(e,Dr.TITLE),n=mo(e,Jr);if(n&&t)return n.replace(/%s/g,(function(){return Array.isArray(t)?t.join(""):t}));var r=mo(e,$r);return t||r||void 0},fo=function(e){return mo(e,Xr)||function(){}},po=function(e,t){return t.filter((function(t){return void 0!==t[e]})).map((function(t){return t[e]})).reduce((function(e,t){return ao({},e,t)}),{})},ho=function(e,t){return t.filter((function(e){return void 0!==e[Dr.BASE]})).map((function(e){return e[Dr.BASE]})).reverse().reduce((function(t,n){if(!t.length)for(var r=Object.keys(n),o=0;o<r.length;o++){var i=r[o].toLowerCase();if(-1!==e.indexOf(i)&&n[i])return t.concat(n)}return t}),[])},yo=function(e,t,n){var r={};return n.filter((function(t){return!!Array.isArray(t[e])||(void 0!==t[e]&&Oo("Helmet: "+e+' should be of type "Array". Instead found type "'+ro(t[e])+'"'),!1)})).map((function(t){return t[e]})).reverse().reduce((function(e,n){var o={};n.filter((function(e){for(var n=void 0,i=Object.keys(e),a=0;a<i.length;a++){var u=i[a],c=u.toLowerCase();-1===t.indexOf(c)||n===Wr&&"canonical"===e[n].toLowerCase()||c===Wr&&"stylesheet"===e[c].toLowerCase()||(n=c),-1===t.indexOf(u)||u!==Hr&&u!==Fr&&u!==qr||(n=u)}if(!n||!e[n])return!1;var s=e[n].toLowerCase();return r[n]||(r[n]={}),o[n]||(o[n]={}),!r[n][s]&&(o[n][s]=!0,!0)})).reverse().forEach((function(t){return e.push(t)}));for(var i=Object.keys(o),a=0;a<i.length;a++){var u=i[a],c=Cr()({},r[u],o[u]);r[u]=c}return e}),[]).reverse()},mo=function(e,t){for(var n=e.length-1;n>=0;n--){var r=e[n];if(r.hasOwnProperty(t))return r[t]}return null},vo=(Or=Date.now(),function(e){var t=Date.now();t-Or>16?(Or=t,e(t)):setTimeout((function(){vo(e)}),0)}),go=function(e){return clearTimeout(e)},bo="undefined"!=typeof window?window.requestAnimationFrame&&window.requestAnimationFrame.bind(window)||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||vo:a.g.requestAnimationFrame||vo,wo="undefined"!=typeof window?window.cancelAnimationFrame||window.webkitCancelAnimationFrame||window.mozCancelAnimationFrame||go:a.g.cancelAnimationFrame||go,Oo=function(e){return console&&"function"==typeof console.warn&&void 0},Eo=null,_o=function(e,t){var n=e.baseTag,r=e.bodyAttributes,o=e.htmlAttributes,i=e.linkTags,a=e.metaTags,u=e.noscriptTags,c=e.onChangeClientState,s=e.scriptTags,l=e.styleTags,f=e.title,p=e.titleAttributes;jo(Dr.BODY,r),jo(Dr.HTML,o),So(f,p);var d={baseTag:Po(Dr.BASE,n),linkTags:Po(Dr.LINK,i),metaTags:Po(Dr.META,a),noscriptTags:Po(Dr.NOSCRIPT,u),scriptTags:Po(Dr.SCRIPT,s),styleTags:Po(Dr.STYLE,l)},h={},y={};Object.keys(d).forEach((function(e){var t=d[e],n=t.newTags,r=t.oldTags;n.length&&(h[e]=n),r.length&&(y[e]=d[e].oldTags)})),t&&t(),c(e,h,y)},xo=function(e){return Array.isArray(e)?e.join(""):e},So=function(e,t){void 0!==e&&document.title!==e&&(document.title=xo(e)),jo(Dr.TITLE,t)},jo=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var r=n.getAttribute(no),o=r?r.split(","):[],i=[].concat(o),a=Object.keys(t),u=0;u<a.length;u++){var c=a[u],s=t[c]||"";n.getAttribute(c)!==s&&n.setAttribute(c,s),-1===o.indexOf(c)&&o.push(c);var l=i.indexOf(c);-1!==l&&i.splice(l,1)}for(var f=i.length-1;f>=0;f--)n.removeAttribute(i[f]);o.length===i.length?n.removeAttribute(no):n.getAttribute(no)!==a.join(",")&&n.setAttribute(no,a.join(","))}},Po=function(e,t){var n=document.head||document.querySelector(Dr.HEAD),r=n.querySelectorAll(e+"["+"data-react-helmet]"),o=Array.prototype.slice.call(r),i=[],a=void 0;return t&&t.length&&t.forEach((function(t){var n=document.createElement(e);for(var r in t)if(t.hasOwnProperty(r))if(r===Hr)n.innerHTML=t.innerHTML;else if(r===Fr)n.styleSheet?n.styleSheet.cssText=t.cssText:n.appendChild(document.createTextNode(t.cssText));else{var u=void 0===t[r]?"":t[r];n.setAttribute(r,u)}n.setAttribute(no,"true"),o.some((function(e,t){return a=t,n.isEqualNode(e)}))?o.splice(a,1):i.push(n)})),o.forEach((function(e){return e.parentNode.removeChild(e)})),i.forEach((function(e){return n.appendChild(e)})),{oldTags:o,newTags:i}},ko=function(e){return Object.keys(e).reduce((function(t,n){var r=void 0!==e[n]?n+'="'+e[n]+'"':""+n;return t?t+" "+r:r}),"")},Io=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Object.keys(e).reduce((function(t,n){return t[Zr[n]||n]=e[n],t}),t)},To=function(e,t,n){switch(e){case Dr.TITLE:return{toComponent:function(){return e=t.title,n=t.titleAttributes,(o={key:e})[no]=!0,i=Io(n,o),[r.createElement(Dr.TITLE,i,e)];var e,n,o,i},toString:function(){return function(e,t,n,r){var o=ko(n),i=xo(t);return o?"<"+e+' data-react-helmet="true" '+o+">"+so(i,r)+"</"+e+">":"<"+e+' data-react-helmet="true">'+so(i,r)+"</"+e+">"}(e,t.title,t.titleAttributes,n)}};case Ar:case Nr:return{toComponent:function(){return Io(t)},toString:function(){return ko(t)}};default:return{toComponent:function(){return function(e,t){return t.map((function(t,n){var o,i=((o={key:n})[no]=!0,o);return Object.keys(t).forEach((function(e){var n=Zr[e]||e;if(n===Hr||n===Fr){var r=t.innerHTML||t.cssText;i.dangerouslySetInnerHTML={__html:r}}else i[n]=t[e]})),r.createElement(e,i)}))}(e,t)},toString:function(){return function(e,t,n){return t.reduce((function(t,r){var o=Object.keys(r).filter((function(e){return!(e===Hr||e===Fr)})).reduce((function(e,t){var o=void 0===r[t]?t:t+'="'+so(r[t],n)+'"';return e?e+" "+o:o}),""),i=r.innerHTML||r.cssText||"",a=-1===to.indexOf(e);return t+"<"+e+' data-react-helmet="true" '+o+(a?"/>":">"+i+"</"+e+">")}),"")}(e,t,n)}}}},Ro=function(e){var t=e.baseTag,n=e.bodyAttributes,r=e.encode,o=e.htmlAttributes,i=e.linkTags,a=e.metaTags,u=e.noscriptTags,c=e.scriptTags,s=e.styleTags,l=e.title,f=void 0===l?"":l,p=e.titleAttributes;return{base:To(Dr.BASE,t,r),bodyAttributes:To(Ar,n,r),htmlAttributes:To(Nr,o,r),link:To(Dr.LINK,i,r),meta:To(Dr.META,a,r),noscript:To(Dr.NOSCRIPT,u,r),script:To(Dr.SCRIPT,c,r),style:To(Dr.STYLE,s,r),title:To(Dr.TITLE,{title:f,titleAttributes:p},r)}},Co=kr()((function(e){return{baseTag:ho([Ur,Yr],e),bodyAttributes:po(Ar,e),defer:mo(e,Kr),encode:mo(e,Qr),htmlAttributes:po(Nr,e),linkTags:yo(Dr.LINK,[Wr,Ur],e),metaTags:yo(Dr.META,[zr,Mr,Br,Gr,qr],e),noscriptTags:yo(Dr.NOSCRIPT,[Hr],e),onChangeClientState:fo(e),scriptTags:yo(Dr.SCRIPT,[Vr,Hr],e),styleTags:yo(Dr.STYLE,[Fr],e),title:lo(e),titleAttributes:po(Lr,e)}}),(function(e){Eo&&wo(Eo),e.defer?Eo=bo((function(){_o(e,(function(){Eo=null}))})):(_o(e),Eo=null)}),Ro)((function(){return null})),Ao=(Er=Co,xr=_r=function(e){function t(){return oo(this,t),co(this,e.apply(this,arguments))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.shouldComponentUpdate=function(e){return!Tr()(this.props,e)},t.prototype.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case Dr.SCRIPT:case Dr.NOSCRIPT:return{innerHTML:t};case Dr.STYLE:return{cssText:t}}throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")},t.prototype.flattenArrayTypeChildren=function(e){var t,n=e.child,r=e.arrayTypeChildren,o=e.newChildProps,i=e.nestedChildren;return ao({},r,((t={})[n.type]=[].concat(r[n.type]||[],[ao({},o,this.mapNestedChildrenToProps(n,i))]),t))},t.prototype.mapObjectTypeChildren=function(e){var t,n,r=e.child,o=e.newProps,i=e.newChildProps,a=e.nestedChildren;switch(r.type){case Dr.TITLE:return ao({},o,((t={})[r.type]=a,t.titleAttributes=ao({},i),t));case Dr.BODY:return ao({},o,{bodyAttributes:ao({},i)});case Dr.HTML:return ao({},o,{htmlAttributes:ao({},i)})}return ao({},o,((n={})[r.type]=ao({},i),n))},t.prototype.mapArrayTypeChildrenToProps=function(e,t){var n=ao({},t);return Object.keys(e).forEach((function(t){var r;n=ao({},n,((r={})[t]=e[t],r))})),n},t.prototype.warnOnInvalidChildren=function(e,t){return!0},t.prototype.mapChildrenToProps=function(e,t){var n=this,o={};return r.Children.forEach(e,(function(e){if(e&&e.props){var r=e.props,i=r.children,a=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Object.keys(e).reduce((function(t,n){return t[eo[n]||n]=e[n],t}),t)}(uo(r,["children"]));switch(n.warnOnInvalidChildren(e,i),e.type){case Dr.LINK:case Dr.META:case Dr.NOSCRIPT:case Dr.SCRIPT:case Dr.STYLE:o=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:o,newChildProps:a,nestedChildren:i});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:a,nestedChildren:i})}}})),t=this.mapArrayTypeChildrenToProps(o,t)},t.prototype.render=function(){var e=this.props,t=e.children,n=uo(e,["children"]),o=ao({},n);return t&&(o=this.mapChildrenToProps(t,o)),r.createElement(Er,o)},io(t,null,[{key:"canUseDOM",set:function(e){Er.canUseDOM=e}}]),t}(r.Component),_r.propTypes={base:jr().object,bodyAttributes:jr().object,children:jr().oneOfType([jr().arrayOf(jr().node),jr().node]),defaultTitle:jr().string,defer:jr().bool,encodeSpecialCharacters:jr().bool,htmlAttributes:jr().object,link:jr().arrayOf(jr().object),meta:jr().arrayOf(jr().object),noscript:jr().arrayOf(jr().object),onChangeClientState:jr().func,script:jr().arrayOf(jr().object),style:jr().arrayOf(jr().object),title:jr().string,titleAttributes:jr().object,titleTemplate:jr().string},_r.defaultProps={defer:!0,encodeSpecialCharacters:!0},_r.peek=Er.peek,_r.rewind=function(){var e=Er.rewind();return e||(e=Ro({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}})),e},xr);Ao.renderStatic=Ao.rewind;const No=a(10153).Z;var Lo=a(98269),Do=a.n(Lo),Mo=a(51324);a(12578);const Fo=a(49950).Z;const Uo=a(68597).Z;var Bo=a(10166),Ho=a.n(Bo),qo=function(e){if(!e)throw new Error("context parameter is required");return{type:D.Of,payload:{context:e}}},zo=(a(94606),a(26072),"CREATE_ADDON_REVIEW"),Go="SHOW_EDIT_REVIEW_FORM",Wo="SHOW_REPLY_TO_REVIEW_FORM",Vo="FETCH_REVIEW",Yo="FETCH_REVIEW_PERMISSIONS",Zo="FETCH_REVIEWS",$o="FETCH_LATEST_USER_REVIEW",Ko="FETCH_USER_REVIEWS",Qo="FLASH_REVIEW_MESSAGE",Xo="HIDE_FLASHED_REVIEW_MESSAGE",Jo="HIDE_EDIT_REVIEW_FORM",ei="HIDE_REPLY_TO_REVIEW_FORM",ti="SET_ADDON_REVIEWS",ni="SET_INTERNAL_REVIEW",ri="SET_USER_REVIEWS",oi="SET_REVIEW",ii="SET_LATEST_REVIEW",ai="SET_REVIEW_PERMISSIONS",ui="SET_REVIEW_REPLY",ci="SET_REVIEW_WAS_FLAGGED",si="SEND_REPLY_TO_REVIEW",li="SEND_REVIEW_FLAG",fi="UPDATE_ADDON_REVIEW",pi="DELETE_ADDON_REVIEW",di="BEGIN_DELETE_ADDON_REVIEW",hi="CANCEL_DELETE_ADDON_REVIEW",yi="UNLOAD_ADDON_REVIEWS",mi="UPDATE_RATING_COUNTS";function vi(e){return{reviewAddon:{iconUrl:e.addon.icon_url,id:e.addon.id,name:e.addon.name,slug:e.addon.slug},body:e.body,created:e.created,id:e.id,isDeleted:e.is_deleted,isDeveloperReply:e.is_developer_reply,isLatest:e.is_latest,score:e.score||null,reply:e.reply?vi(e.reply):null,userId:e.user.id,userName:e.user.name,userUrl:e.user.url,versionId:e.version?e.version.id:null}}var gi=function(e){return ce()(e,"review is required"),{type:oi,payload:e}},bi=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.originalReviewId,n=e.reply;if(!t)throw new Error("The originalReviewId parameter is required");if(!n)throw new Error("The reply parameter is required");return{type:ui,payload:{originalReviewId:t,reply:n}}};function wi(e){var t=e.addonId,n=e.userId,r=e.canReplyToReviews;return ce()(t,"addonId is required"),ce()(n,"userId is required"),ce()(void 0!==r,"canReplyToReviews is required"),{type:ai,payload:{addonId:t,userId:n,canReplyToReviews:r}}}function Oi(e){var t=e.addonId,n=e.oldReview,r=e.newReview;return ce()(t,"addonId is required"),ce()(r,"newReview is required"),{type:mi,payload:{addonId:t,oldReview:n,newReview:r}}}function Ei(e){var t=e.errorHandlerId,n=e.userId,r=e.page,o=void 0===r?"1":r;return ce()(t,"errorHandlerId is required"),ce()(n,"userId is required"),{type:Ko,payload:{errorHandlerId:t,page:o,userId:n}}}var _i=function(e){var t=e.pageSize,n=e.reviewCount,r=e.reviews,o=e.userId;return ce()(t,"pageSize is required"),ce()("number"==typeof n,"reviewCount is required"),ce()(Array.isArray(r),"reviews are required and must be an array"),ce()(o,"userId is required"),{type:ri,payload:{pageSize:t,reviewCount:n,reviews:r,userId:o}}},xi=function(e){var t=e.addonSlug,n=e.page,r=e.pageSize,o=e.reviewCount,i=e.reviews,a=e.score;return ce()(t,"addonSlug is required"),ce()(n,"page is required"),ce()(r,"pageSize is required"),ce()("number"==typeof o,"reviewCount is required"),ce()(Array.isArray(i),"reviews is required and must be an array"),ce()(void 0!==a,"score is required"),{type:ti,payload:{addonSlug:t,page:n,pageSize:r,reviewCount:o,reviews:i,score:a}}},Si=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.errorHandlerId,n=e.originalReviewId,r=e.body,o=e.title;if(!t)throw new Error("The errorHandlerId parameter is required");if(!n)throw new Error("The originalReviewId parameter is required");if(!r)throw new Error("The body parameter is required");return{type:si,payload:{errorHandlerId:t,originalReviewId:n,body:r,title:o}}},ji=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.reviewId,n=e.type;if(!t)throw new Error("The reviewId parameter is required");return{type:n,payload:{reviewId:t}}},Pi=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.reviewId;return ji({type:Go,reviewId:t})},ki=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.reviewId;return ji({type:Wo,reviewId:t})},Ii=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.reviewId;return ji({type:Jo,reviewId:t})},Ti=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.reviewId;return ji({type:ei,reviewId:t})},Ri=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.errorHandlerId,n=e.note,r=e.reason,o=e.reviewId;if(!t)throw new Error("The errorHandlerId parameter is required");if(!r)throw new Error("The reason parameter is required");if(!o)throw new Error("The reviewId parameter is required");return{type:li,payload:{errorHandlerId:t,note:n,reason:r,reviewId:o}}},Ci=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.reason,n=e.reviewId;if(!t)throw new Error("The reason parameter is required");if(!n)throw new Error("The reviewId parameter is required");return{type:ci,payload:{reason:t,reviewId:n}}},Ai=function(e){var t=e.addonId,n=e.review,r=e.userId;return ce()(t,"addonId is required"),ce()(void 0!==n,"review is required"),ce()(r,"userId is required"),{type:ii,payload:{addonId:t,review:n,userId:r}}},Ni=function(e){var t=e.addonId,n=e.body,r=e.errorHandlerId,o=e.score,i=e.versionId;return ce()(t,"addonId is required"),ce()(r,"errorHandlerId is required"),ce()(o,"score is required"),ce()(i,"versionId is required"),{type:zo,payload:{addonId:t,body:n,errorHandlerId:r,score:o,versionId:i}}},Li=function(e){var t=e.body,n=e.errorHandlerId,r=e.score,o=e.reviewId;return ce()(n,"errorHandlerId is required"),ce()(o,"reviewId is required"),{type:fi,payload:{body:t,errorHandlerId:n,score:r,reviewId:o}}},Di="aborted",Mi="saved-rating",Fi="saved-review",Ui="started-save-rating",Bi="started-save-review",Hi=function(e){return ce()(e,"message is required"),{type:Qo,payload:{message:e}}},qi=function(){return{type:Xo}},zi=function(e){var t=e.addonId,n=e.errorHandlerId,r=e.isReplyToReviewId,o=e.reviewId;return ce()(t,"addonId is required"),ce()(n,"errorHandlerId is required"),ce()(o,"reviewId is required"),{type:pi,payload:{addonId:t,errorHandlerId:n,isReplyToReviewId:r,reviewId:o}}},Gi=function(e){var t=e.reviewId;return{type:di,payload:{reviewId:t}}},Wi=function(e){var t=e.reviewId;return{type:hi,payload:{reviewId:t}}},Vi=function(e){var t=e.addonId,n=e.reviewId;return{type:yi,payload:{addonId:t,reviewId:n}}},Yi=function(e,t){return ce()(t,"lang must not be empty"),e?e[t]?e[t]:e[e._default]:null};function Zi(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function $i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Zi(Object(n),!0).forEach((function(t){Ki(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Zi(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Ki(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Qi="FETCH_ADDON_INFO",Xi="LOAD_ADDON_INFO",Ji="FETCH_ADDON",ea="LOAD_ADDON",ta={byID:{},byIdInURL:{},byGUID:{},bySlug:{},infoBySlug:{},lang:"",loadingByIdInURL:{}};function na(e){var t=e.errorHandler,n=e.showGroupedRatings,r=void 0!==n&&n,o=e.slug;if(!t)throw new Error("errorHandler cannot be empty");if(!o)throw new Error("slug cannot be empty");return{type:Ji,payload:{errorHandlerId:t.id,showGroupedRatings:r,slug:o}}}function ra(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.addon,n=e.slug;return ce()(t,"addon is required"),ce()(n,"slug is required"),{type:ea,payload:{addon:t,slug:n}}}var oa=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.info,n=e.slug;return ce()(t,"info is required"),ce()(n,"slug is required"),{type:Xi,payload:{info:t,slug:n}}},ia=function(e,t){return e.map((function(e){return{h:e.image_size[1],src:e.image_url,thumbnail_h:e.thumbnail_size[1],thumbnail_src:e.thumbnail_url,thumbnail_w:e.thumbnail_size[0],title:Yi(e.caption,t),w:e.image_size[0]}}))},aa=function(e,t){return e&&e.url&&e.outgoing?{url:Yi(e.url,t),outgoing:Yi(e.outgoing,t)}:null};function ua(e,t){var n={authors:e.authors,average_daily_users:e.average_daily_users,categories:e.categories,contributions_url:e.contributions_url,created:e.created,default_locale:e.default_locale,description:Yi(e.description,t),developer_comments:Yi(e.developer_comments,t),edit_url:e.edit_url,guid:e.guid,has_eula:e.has_eula,has_privacy_policy:e.has_privacy_policy,homepage:aa(e.homepage,t),icon_url:e.icon_url,id:e.id,is_disabled:e.is_disabled,is_experimental:e.is_experimental,is_source_public:e.is_source_public,last_updated:e.last_updated,latest_unlisted_version:e.latest_unlisted_version,locale_disambiguation:e.locale_disambiguation,name:Yi(e.name,t),previews:e.previews?ia(e.previews,t):void 0,promoted:e.promoted,ratings:e.ratings,requires_payment:e.requires_payment,review_url:e.review_url,slug:e.slug,status:e.status,summary:Yi(e.summary,t),support_email:Yi(e.support_email,t),support_url:aa(e.support_url,t),tags:e.tags,target_locale:e.target_locale,type:e.type,url:e.url,weekly_downloads:e.weekly_downloads,currentVersionId:e.current_version?e.current_version.id:null,isMozillaSignedExtension:!1},r=e.current_version;return r&&(n.isMozillaSignedExtension=r.file.is_mozilla_signed_extension),n}var ca,sa=function(e,t){return e.byID["".concat(t)]||null},la=function(e,t){var n=e.byIdInURL[t];return sa(e,n)},fa=function(e,t){return"string"==typeof t&&Boolean(e.addons.loadingByIdInURL[t])},pa=function(e){var t=e.slug,n=e.state;ce()(t,"slug is required"),ce()(n,"state is required");var r=n.infoBySlug[t];return r&&r.info||null},da=function(e){var t=e.slug,n=e.state;ce()(t,"slug is required"),ce()(n,"state is required");var r=n.infoBySlug[t];return Boolean(r&&r.loading)},ha=function(e,t){return{eula:Yi(e.eula,t),privacyPolicy:Yi(e.privacy_policy,t)}};function ya(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return $i({1:0,2:0,3:0,4:0,5:0},e)}function ma(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function va(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function ba(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?va(Object(n),!0).forEach((function(t){wa(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):va(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function wa(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Oa="ADD_ADDON_TO_COLLECTION",Ea="FETCH_CURRENT_COLLECTION",_a="FETCH_USER_COLLECTIONS",xa="LOAD_CURRENT_COLLECTION",Sa="FETCH_CURRENT_COLLECTION_PAGE",ja="LOAD_CURRENT_COLLECTION_PAGE",Pa="ABORT_FETCH_CURRENT_COLLECTION",ka="ABORT_FETCH_USER_COLLECTIONS",Ia="ABORT_ADD_ADDON_TO_COLLECTION",Ta="LOAD_USER_COLLECTIONS",Ra="ADDON_ADDED_TO_COLLECTION",Ca="LOAD_COLLECTION_ADDONS",Aa="UPDATE_COLLECTION",Na="UNLOAD_COLLECTION_BY_SLUG",La="CREATE_COLLECTION",Da="BEGIN_COLLECTION_MODIFICATION",Ma="FINISH_COLLECTION_MODIFICATION",Fa="REMOVE_ADDON_FROM_COLLECTION",Ua="ADDON_REMOVED_FROM_COLLECTION",Ba="DELETE_COLLECTION",Ha="UPDATE_COLLECTION_ADDON",qa="DELETE_COLLECTION_ADDON_NOTES",za="BEGIN_EDITING_COLLECTION_DETAILS",Ga="FINISH_EDITING_COLLECTION_DETAILS",Wa={byId:{},bySlug:{},current:{id:null,loading:!1},userCollections:{},addonInCollections:{},isCollectionBeingModified:!1,hasAddonBeenAdded:!1,hasAddonBeenRemoved:!1,editingCollectionDetails:!1,lang:""},Va=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.errorHandlerId,n=e.userId;return ce()(t,"errorHandlerId is required"),ce()(n,"userId is required"),{type:_a,payload:{errorHandlerId:t,userId:n}}},Ya=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.userId;return ce()(t,"userId is required"),{type:ka,payload:{userId:t}}},Za=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.addonId,n=e.userId;return ce()(n,"userId is required"),ce()(t,"addonId is required"),{type:Ia,payload:{userId:n,addonId:t}}},$a=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.errorHandlerId,n=e.filters,r=e.slug,o=e.userId;return ce()(t,"errorHandlerId is required"),ce()(r,"slug is required"),ce()(o,"userId is required"),{type:Sa,payload:{errorHandlerId:t,filters:n,slug:r,userId:o}}},Ka=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.addonsResponse,n=e.detail;return ce()(n,"detail is required"),{type:xa,payload:{addonsResponse:t,detail:n}}},Qa=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.addonsResponse;return ce()(t,"The addonsResponse parameter is required"),{type:ja,payload:{addonsResponse:t}}},Xa=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.collections,n=e.userId;return ce()(n,"userId is required"),ce()(t,"collections are required"),{type:Ta,payload:{userId:n,collections:t}}},Ja=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.addonId,n=e.collectionId,r=e.userId;return ce()(t,"addonId is required"),ce()(r,"userId is required"),ce()(n,"collectionId is required"),{type:Ra,payload:{addonId:t,collectionId:n,userId:r}}},eu=function(){return{type:Pa}},tu=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.addonId,n=e.collectionId,r=e.editing,o=e.errorHandlerId,i=e.filters,a=e.notes,u=e.slug,c=e.userId;return ce()(t,"The addonId parameter is required"),ce()(n,"The collectionId parameter is required"),ce()(u,"The slug parameter is required"),ce()(o,"The errorHandlerId parameter is required"),ce()(c,"The userId parameter is required"),r&&ce()(i,"The filters parameter is required when editing"),{type:Oa,payload:{addonId:t,collectionId:n,editing:r,errorHandlerId:o,filters:i,notes:a,slug:u,userId:c}}},nu=function(e){if(!e)throw new Error("A slug is required");return{type:Na,payload:{slug:e}}},ru=function(){return{type:za}},ou=function(){return{type:Ga}},iu=function(e,t){return e.map((function(e){var n=e.addon,r=e.notes;return ba(ba({},ua(n,t)),{},{notes:Yi(r,t)})}))},au=function(e){if(!e)throw new Error("The collectionsState parameter is required");return e.current.id?function(e){var t=e.id,n=e.state;if(!t)throw new Error("The id parameter is required");if(!n)throw new Error("The state parameter is required");return n.byId[t]||null}({id:e.current.id,state:e}):null},uu=function(e){var t=e.addonsResponse,n=e.collection,r=e.state,o=r.byId[n.id],i=function(e){var t=e.addonsResponse,n=e.detail,r=e.lang;return{addons:t?iu(t.results,r):null,authorId:n.author.id,authorName:n.author.name,authorUsername:n.author.username,defaultLocale:n.default_locale,description:Yi(n.description,r),id:n.id,lastUpdatedDate:n.modified,name:Yi(n.name,r)||"",numberOfAddons:t?t.count:n.addon_count,pageSize:t?t.page_size:null,slug:n.slug}}({detail:n,addonsResponse:t,lang:r.lang});return!i.addons&&o&&(i.addons=o.addons,i.pageSize=o.pageSize),ba(ba({},r),{},{byId:ba(ba({},r.byId),{},wa({},i.id,i)),bySlug:ba(ba({},r.bySlug),{},wa({},i.slug,i.id))})},cu=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.addonId,n=e.loading,r=e.state,o=e.userId,i=r.addonInCollections[o],a=i&&i[t];return ba(ba({},r),{},{addonInCollections:ba(ba({},r.addonInCollections),{},wa({},o,ba(ba({},i),{},wa({},t,{collections:a?a.collections:null,loading:n}))))})},su=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.state,n=e.userId;return ba(ba({},t),{},{userCollections:ba(ba({},t.userCollections),{},wa({},n,{collections:null,loading:!1}))})},lu=function(e,t){return t&&t.collections?t.collections.reduce((function(t,n){var r=e.byId[n];return r&&t.push(r),t}),[]):null},fu=function(e){return{page:e.page,collection_sort:e.collectionSort}},pu=function(e){var t=e.authorId,n=e.collection,r=e.collectionSlug,o=t;return n&&(r=n.slug,o=n.authorId),ce()(r&&o,"Either a collection or an authorId and collectionSlug are required."),"/collections/".concat(o,"/").concat(r,"/")},du=function(e){var t=e.authorId,n=e.collection,r=e.collectionSlug,o=e._collectionUrl;return"".concat((void 0===o?pu:o)({authorId:t,collection:n,collectionSlug:r}),"edit/")},hu=function(e){var t=e.i18n;return e.name||t.gettext("(no name)")};const yu=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Wa,n=arguments.length>1?arguments[1]:void 0;switch(n.type){case Ea:return ba(ba({},t),{},{current:{id:null,loading:!0}});case Sa:var r={id:t.current.id,loading:!0},o=au(t);return ba(ba({},t),{},o?{byId:ba(ba({},t.byId),{},wa({},o.id,ba(ba({},o),{},{addons:[],numberOfAddons:null,pageSize:null}))),current:r}:{current:r});case xa:var a=n.payload,u=a.addonsResponse,c=a.detail,s=uu({addonsResponse:u,collection:c,state:t});return ba(ba({},s),{},{current:{id:c.id,loading:!1}});case ja:var l=n.payload.addonsResponse,f=au(t);if(!f)throw new Error("".concat(n.type,": a current collection does not exist"));return ba(ba({},t),{},{byId:ba(ba({},t.byId),{},wa({},f.id,ba(ba({},f),{},{addons:iu(l.results,t.lang),numberOfAddons:l.count,pageSize:l.page_size}))),current:{id:t.current.id,loading:!1}});case Ca:var p=n.payload,d=p.addons,h=p.slug,y=t.bySlug[h];if(!y)throw new Error((0,e.f9)(ca||(ca=ma(['Cannot load add-ons for collection\n "','" because the collection has not\n been loaded yet'])),h));var m=t.byId[y];return ba(ba({},t),{},{byId:ba(ba({},t.byId),{},wa({},y,ba(ba({},m),{},{addons:iu(d,t.lang)})))});case Pa:return ba(ba({},t),{},{current:{id:null,loading:!1}});case _a:var v=n.payload.userId;return ba(ba({},t),{},{userCollections:ba(ba({},t.userCollections),{},wa({},v,{collections:null,loading:!0}))});case ka:var g=n.payload.userId;return ba(ba({},t),{},{userCollections:ba(ba({},t.userCollections),{},wa({},g,{collections:null,loading:!1}))});case Ta:var b=n.payload,w=b.collections,O=b.userId,E=ba({},t);return w.forEach((function(e){E=uu({state:E,collection:e})})),ba(ba({},E),{},{userCollections:ba(ba({},t.userCollections),{},wa({},O,{collections:w.map((function(e){return e.id})),loading:!1}))});case Ra:var _=n.payload,x=_.addonId,S=_.collectionId,j=_.userId,P=t.addonInCollections,k=[];if(P[j]&&P[j][x]){var I=P[j][x].collections;I&&(k=I)}return ba(ba({},t),{},{addonInCollections:ba(ba({},t.addonInCollections),{},wa({},j,ba(ba({},t.addonInCollections[j]),{},wa({},x,{collections:k.concat([S]),loading:!1})))),hasAddonBeenAdded:!0});case Oa:var T=n.payload,R=T.addonId,C=T.userId,A=cu({addonId:R,userId:C,state:t,loading:!0});return ba(ba({},A),{},{hasAddonBeenAdded:!1});case Ia:var N=n.payload,L=N.addonId,D=N.userId,M=cu({addonId:L,userId:D,state:t,loading:!1});return ba(ba({},M),{},{hasAddonBeenAdded:!1});case Da:return ba(ba({},t),{},{isCollectionBeingModified:!0});case Ma:return ba(ba({},t),{},{isCollectionBeingModified:!1});case Na:var F=n.payload.slug,U=t.bySlug[F];return U?ba(ba({},t),{},{byId:ba(ba({},t.byId),{},wa({},U,void 0))}):t;case La:case Ba:case Aa:var B=n.payload.userId;return su({state:t,userId:B});case Fa:return ba(ba({},t),{},{hasAddonBeenRemoved:!1});case Ua:return ba(ba({},t),{},{hasAddonBeenRemoved:!0});case za:return ba(ba({},t),{},{editingCollectionDetails:!0});case Ga:return ba(ba({},t),{},{editingCollectionDetails:!1});case i.nk:return ba(ba({},t),{},{addonInCollections:{}});case dt:return ba(ba({},t),{},{lang:n.payload.lang});default:return t}};a(76047);function mu(e){return(mu="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function vu(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function gu(e,t){return(gu=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function bu(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Ou(e);if(t){var o=Ou(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return wu(this,n)}}function wu(e,t){if(t&&("object"===mu(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Ou(e){return(Ou=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}const Eu=function(){return function(e){var t=function(t){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&gu(e,t)}(u,t);var n,o,i,a=bu(u);function u(e,t){var n;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,u),(n=a.call(this,e,t)).i18n=t.i18n,n}return n=u,(o=[{key:"render",value:function(){return r.createElement(e,Object.assign({i18n:this.i18n},this.props))}}])&&vu(n.prototype,o),i&&vu(n,i),Object.defineProperty(n,"prototype",{writable:!1}),u}(r.Component);return t.contextTypes={i18n:w().object},t.displayName="Translate(".concat(Rn(e),")"),t}};function _u(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function xu(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?_u(Object(n),!0).forEach((function(t){Su(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):_u(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Su(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var ju="SET_UI_STATE",Pu={};function ku(e){return(ku="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Iu(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Tu(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Ru(e,t){return(Ru=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Cu(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Nu(e);if(t){var o=Nu(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Au(this,n)}}function Au(e,t){if(t&&("object"===ku(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Nu(e){return(Nu=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function Lu(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Du(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Lu(Object(n),!0).forEach((function(t){Mu(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Lu(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Mu(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Fu=function(e){var t=e.initialState,n=e.extractId,r=e.fileName;ce()(t,"initialState is required");return function(e,o){ce()(n,"extractId is required."),ce()(r,"fileName is required.");var i,a=function(e){var t=e.fileName,n=e.id;return ce()(t,"fileName is required"),ce()("string"==typeof n,"id must be a string"),"".concat(Tn(t),"-").concat(n)}({fileName:r,id:n(o)});return{uiState:(i={uiState:e.uiState,uiStateID:a}).uiState[i.uiStateID]||t,uiStateID:a}}},Uu=function(e,t,n){var r=t.dispatch;return Du(Du(Du(Du({},n),e),t),{},{setUIState:function(t){r(function(e){var t=e.change,n=e.id;return ce()(t,"change cannot be undefined"),ce()(n,"id cannot be undefined"),{type:ju,payload:{change:t,id:n}}}({id:e.uiStateID,change:t}))}})};const Bu=function(e){var t=e.fileName,n=e.extractId,o=e.initialState,i=e.resetOnUnmount,a=void 0!==i&&i;ce()(t,"fileName is required"),ce()(n,"extractId is required"),ce()(o,"initialState is required");var u=Fu({extractId:n,fileName:t,initialState:o});return function(e){var t=function(t){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Ru(e,t)}(s,t);var n,i,u,c=Cu(s);function s(){return Iu(this,s),c.apply(this,arguments)}return n=s,(i=[{key:"componentWillUnmount",value:function(){a&&this.props.setUIState(o)}},{key:"render",value:function(){return r.createElement(e,this.props)}}])&&Tu(n.prototype,i),u&&Tu(n,u),Object.defineProperty(n,"prototype",{writable:!1}),s}(r.Component);return t.displayName="WithUIState(".concat(Rn(e),")"),(0,g.connect)(u,void 0,Uu)(t)}};var Hu=a(97170),qu=a.n(Hu),zu=a(58137),Gu=a.n(zu),Wu=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e};function Vu(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Yu(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}var Zu=function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)},$u=function(e){function t(){var n,r;Vu(this,t);for(var o=arguments.length,i=Array(o),a=0;a<o;a++)i[a]=arguments[a];return n=r=Yu(this,e.call.apply(e,[this].concat(i))),r.handleClick=function(e){if(r.props.onClick&&r.props.onClick(e),!e.defaultPrevented&&0===e.button&&!r.props.target&&!Zu(e)){e.preventDefault();var t=r.context.router.history,n=r.props,o=n.replace,i=n.to;o?t.replace(i):t.push(i)}},Yu(r,n)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.render=function(){var e=this.props,t=(e.replace,e.to),o=e.innerRef,i=function(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}(e,["replace","to","innerRef"]);ce()(this.context.router,"You should not use <Link> outside a <Router>"),ce()(void 0!==t,'You must specify the "to" property');var a=this.context.router.history,u="string"==typeof t?(0,n.ob)(t,null,null,a.location):t,c=a.createHref(u);return r.createElement("a",Wu({},i,{onClick:this.handleClick,href:c,ref:o}))},t}(r.Component);$u.propTypes={onClick:Gu().func,target:Gu().string,replace:Gu().bool,to:Gu().oneOfType([Gu().string,Gu().object]).isRequired,innerRef:Gu().oneOfType([Gu().string,Gu().func])},$u.defaultProps={replace:!1},$u.contextTypes={router:Gu().shape({history:Gu().shape({push:Gu().func.isRequired,replace:Gu().func.isRequired,createHref:Gu().func.isRequired}).isRequired}).isRequired};const Ku=$u;function Qu(e){return(Qu="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var Xu=["alt","children","className","name"];function Ju(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function ec(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function tc(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function nc(e,t){return(nc=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function rc(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=ic(e);if(t){var o=ic(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return oc(this,n)}}function oc(e,t){if(t&&("object"===Qu(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function ic(e){return(ic=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var ac=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&nc(e,t)}(a,e);var t,n,o,i=rc(a);function a(){return ec(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e,t=this.props,n=t.alt,o=t.children,i=t.className,a=t.name,u=Ju(t,Xu);return n&&(e=r.createElement("span",{className:"visually-hidden"},n)),r.createElement("span",Object.assign({className:Ho()("Icon","Icon-".concat(a),i)},u),e,o)}}])&&tc(t.prototype,n),o&&tc(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);function uc(e){return(uc="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var cc=["clientApp","children","dispatch","external","externalDark","href","lang","prependClientApp","prependLang","to","target"];function sc(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function lc(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?sc(Object(n),!0).forEach((function(t){fc(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):sc(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function fc(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function pc(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function dc(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function hc(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function yc(e,t){return(yc=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function mc(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=gc(e);if(t){var o=gc(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return vc(this,n)}}function vc(e,t){if(t&&("object"===uc(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function gc(e){return(gc=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var bc=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&yc(e,t)}(a,e);var t,n,o,i=mc(a);function a(){return dc(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"urlPrefix",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.clientApp,n=e.lang,r=e.prependClientApp,o=e.prependLang,i=[];return o&&i.push(n),r&&i.push(t),i.length?"/".concat(i.join("/"),"/"):null}},{key:"render",value:function(){var e=this.props,t=e.clientApp,n=e.children,o=(e.dispatch,e.external),i=e.externalDark,a=e.href,u=e.lang,c=e.prependClientApp,s=e.prependLang,l=e.to,f=e.target,p=pc(e,cc),d=this.urlPrefix({clientApp:t,lang:u,prependClientApp:c,prependLang:s}),h=function(e){return d&&!e.startsWith(d)?qu().pathname(d,e):e},y=i||o,m=i?"external-dark":"external";if("string"==typeof a&&void 0!==l)throw new Error('Cannot use "href" prop and "to" prop in the same Link component');if(void 0!==l&&("string"==typeof l&&!l.startsWith("/")||l&&l.pathname&&!l.pathname.startsWith("/")))throw new Error('"to" prop cannot contain a relative path; it must start with a "/".');var v=lc(lc({},p),{},{target:f,rel:"_blank"===f?"noopener noreferrer":p.rel});if("string"==typeof a)return r.createElement("a",Object.assign({},v,{href:h(a)}),n,y?r.createElement(ac,{name:m}):null);var g=l;return"string"==typeof l?g=h(l):l&&l.pathname&&(g=lc(lc({},l),{},{pathname:h(l.pathname)})),r.createElement(Ku,Object.assign({},v,{to:g}),n,y?r.createElement(ac,{name:m}):null)}}])&&hc(t.prototype,n),o&&hc(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);bc.propTypes={children:w().node,className:w().string,clientApp:w().string.isRequired,dispatch:w().func.isRequired,external:w().bool,externalDark:w().bool,href:w().string,lang:w().string.isRequired,prependClientApp:w().bool,prependLang:w().bool,target:w().string,to:w().oneOfType([w().object,w().string])},bc.defaultProps={external:!1,externalDark:!1,prependClientApp:!0,prependLang:!0};const wc=(0,Mo.qC)((0,g.connect)((function(e){return{clientApp:e.api.clientApp,lang:e.api.lang}})))(bc);function Oc(e){return(Oc="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var Ec,_c,xc=["buttonType","children","className","href","htmlType","micro","puffy","noLink","to"];function Sc(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function jc(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Pc(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function kc(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Ic(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Tc(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Rc(e,t){return(Rc=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Cc(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Nc(e);if(t){var o=Nc(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Ac(this,n)}}function Ac(e,t){if(t&&("object"===Oc(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Nc(e){return(Nc=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Lc=["neutral","light","action","cancel","confirm","alert","none"],Dc=function(t){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Rc(e,t)}(u,t);var n,o,i,a=Cc(u);function u(){return Ic(this,u),a.apply(this,arguments)}return n=u,(o=[{key:"render",value:function(){var t=this.props,n=t.buttonType,o=t.children,i=t.className,a=t.href,u=t.htmlType,c=t.micro,s=t.puffy,l=t.noLink,f=t.to,p=kc(t,xc),d=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?jc(Object(n),!0).forEach((function(t){Pc(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):jc(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({},p);if(!Lc.includes(n))throw new Error((0,e.f9)(Ec||(Ec=Sc(['buttonType="','" supplied but that is\n not a valid button type'])),n));var h=function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return Ho().apply(void 0,["Button","Button--".concat(n),i].concat(t,[{"Button--disabled":d.disabled,"Button--micro":c,"Button--puffy":s}]))};return l?r.createElement("span",{className:h(),title:p.title},o):a||f?(a?(d.href=a,d.prependClientApp=!1,d.prependLang=!1):f&&(d.to=f),d.className=h({disabled:d.disabled}),d.disabled&&(d.onClick=function(t){t.preventDefault(),L.Z.warn((0,e.f9)(_c||(_c=Sc(["Not calling onClick() for Button link to\n "," because it is disabled"])),d.href||d.to))}),r.createElement(wc,d,o)):r.createElement("button",Object.assign({className:h(),type:u},d),o)}}])&&Tc(n.prototype,o),i&&Tc(n,i),Object.defineProperty(n,"prototype",{writable:!1}),u}(r.Component);Dc.defaultProps={buttonType:"none",disabled:!1,htmlType:"submit",micro:!1,noLink:!1,puffy:!1};var Mc=["className"];function Fc(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}const Uc=function(e){var t=e.className,n=Fc(e,Mc);return r.createElement(ac,Object.assign({},n,{className:Ho()("IconXMark",t),name:"inline-content"}),r.createElement("svg",{className:"IconXMark-svg",version:"1.1",xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink"},r.createElement("g",{className:"IconXMark-path",transform:"translate(-1.000000, -1.000000)",fill:"#0C0C0D"},r.createElement("path",{d:"M1.293,2.707 C1.03304342,2.45592553 0.928787403,2.08412211 1.02030284,1.73449268 C1.11181828,1.38486324 1.38486324,1.11181828 1.73449268,1.02030284 C2.08412211,0.928787403 2.45592553,1.03304342 2.707,1.293 L8,6.586 L13.293,1.293 C13.5440745,1.03304342 13.9158779,0.928787403 14.2655073,1.02030284 C14.6151368,1.11181828 14.8881817,1.38486324 14.9796972,1.73449268 C15.0712126,2.08412211 14.9669566,2.45592553 14.707,2.707 L9.414,8 L14.707,13.293 C15.0859722,13.6853789 15.0805524,14.3090848 14.6948186,14.6948186 C14.3090848,15.0805524 13.6853789,15.0859722 13.293,14.707 L8,9.414 L2.707,14.707 C2.31462111,15.0859722 1.69091522,15.0805524 1.30518142,14.6948186 C0.919447626,14.3090848 0.91402779,13.6853789 1.293,13.293 L6.586,8 L1.293,2.707 Z"}))))};function Bc(e){return(Bc="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Hc(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function qc(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function zc(e,t){return(zc=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Gc(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Vc(e);if(t){var o=Vc(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Wc(this,n)}}function Wc(e,t){if(t&&("object"===Bc(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Vc(e){return(Vc=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Yc="generic",Zc="genericWarning",$c="success",Kc="warningInfo",Qc=["error",Yc,Zc,"firefox",$c,Kc,"warning"],Xc=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&zc(e,t)}(a,e);var t,n,o,i=Gc(a);function a(){var e;Hc(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).onDismissNotice=function(t){e.props.setUIState({wasDismissed:!0}),e.props.onDismiss&&e.props.onDismiss(t)},e}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.actionHref,n=e.actionOnClick,o=e.actionTarget,i=e.actionText,a=e.actionTo,u=e.againstGrey20,c=e.children,s=e.className,l=e.dismissible,f=e.i18n,p=e.light,d=e.type,h=e.uiState;if(ce()(Qc.includes(d),"Unknown type: ".concat(d)),l&&h.wasDismissed)return null;var y,m={href:t||void 0,onClick:n||void 0,to:a||void 0};Object.values(m).some((function(e){return void 0!==e}))&&(ce()(i,"When specifying an action button, actionText is required"),y=r.createElement(Dc,Object.assign({className:"Notice-button",micro:!0,target:o},m),i));var v=Ho()("Notice","Notice-".concat(d),s,{"Notice-againstGrey20":u,"Notice-dismissible":l,"Notice-light":p});return r.createElement("div",{className:v},r.createElement("div",{className:"Notice-icon"}),r.createElement("div",{className:"Notice-column"},r.createElement("div",{className:"Notice-content"},r.createElement("p",{className:"Notice-text"},c),y)),l&&r.createElement("div",{className:"Notice-dismisser"},r.createElement(Dc,{className:"Notice-dismisser-button",onClick:this.onDismissNotice},r.createElement(Uc,{className:"Notice-dismisser-icon",alt:f.gettext("Dismiss this notice")}))))}}])&&qc(t.prototype,n),o&&qc(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const Jc=(0,Mo.qC)(Bu({fileName:"src/amo/components/Notice/index.js",extractId:function(e){return e.dismissible&&ce()(e.id,"When dismissible=true, the id property must be defined"),e.id||""},initialState:{wasDismissed:!1}}),Eu())(Xc);function es(e){return(es="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function ts(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function ns(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function rs(e,t){return(rs=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function os(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=as(e);if(t){var o=as(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return is(this,n)}}function is(e,t){if(t&&("object"===es(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function as(e){return(as=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var us=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&rs(e,t)}(a,e);var t,n,o,i=os(a);function a(){return ts(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e,t,n=this.props,o=n._window,i=n.code,a=n.className,u=n.i18n,c=n.messages,s=[];return c.forEach((function(e){var t=e;"object"===es(t)&&(t=JSON.stringify(t)),D.Jp.includes(i)&&(L.Z.debug("Detected ".concat(i,", replacing API message: ").concat(t)),t=u.gettext("Your session has expired")),s.push(t)})),s.length||(L.Z.debug("No messages were passed to ErrorList, code: ".concat(i)),s.push(u.gettext("An unexpected error occurred"))),D.Jp.includes(i)&&(e=function(){return o.location.reload()},t=u.gettext("Reload To Continue"),s.length>1&&L.Z.warn("The API unexpectedly returned multiple signature expired errors")),r.createElement("ul",{className:Ho()("ErrorList",a)},s.map((function(n,o){return r.createElement("li",{className:"ErrorList-item",key:"erroritem-".concat(o)},r.createElement(Jc,{type:"error",actionOnClick:e,actionText:t},n))})))}}])&&ns(t.prototype,n),o&&ns(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);us.propTypes={_window:w().object,code:w().string,className:w().string,i18n:w().object.isRequired,messages:w().array.isRequired},us.defaultProps={_window:"undefined"!=typeof window?window:{}};const cs=(0,Mo.qC)(Eu())(us);var ss;function ls(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function fs(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ls(Object(n),!0).forEach((function(t){ps(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ls(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function ps(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ds(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function hs(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}var ys=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t.id,r=t.dispatch,o=void 0===r?null:r,i=t.capturedError,a=void 0===i?null:i;ds(this,e),this.id=n,this.dispatch=o,this.capturedError=a}var t,n,o;return t=e,(n=[{key:"captureError",value:function(e){this.capturedError=e}},{key:"clear",value:function(){var e=this.createClearingAction();this.dispatch(e)}},{key:"createClearingAction",value:function(){return function(e){if(!e)throw new Error("id cannot be empty");return{type:D.kl,payload:{id:e}}}(this.id)}},{key:"hasError",value:function(){return Boolean(this.capturedError)}},{key:"renderError",value:function(){var e=this.capturedError,t=e.code,n=e.messages;return r.createElement(cs,{messages:n,code:t})}},{key:"renderErrorIfPresent",value:function(){return this.hasError()?this.renderError():null}},{key:"setDispatch",value:function(e){this.dispatch=e}},{key:"createErrorAction",value:function(e){return function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.error,n=e.id;if(!n)throw new Error("id cannot be empty");if(!t)throw new Error("error cannot be empty");return{type:D.Go,payload:{error:t,id:n}}}({error:e,id:this.id})}},{key:"addMessage",value:function(e){this.dispatchAction(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.message,n=e.id;if(!n)throw new Error("id cannot be empty");if(!t)throw new Error("message cannot be empty");return{type:D.rs,payload:{id:n,message:t}}}({id:this.id,message:e}))}},{key:"handle",value:function(e){var t=this.createErrorAction(e);this.dispatchAction(t)}},{key:"dispatchAction",value:function(e){if(!this.dispatch)throw new Error("A dispatch function has not been configured");this.dispatch(e)}}])&&hs(t.prototype,n),o&&hs(t,o),Object.defineProperty(t,"prototype",{writable:!1}),e}();function ms(t){var n=t.name,r=t.id,o=t.extractId,i=void 0===o?null:o;if(r&&i)throw new Error("You can define either `id` or `extractId` but not both.");if(i&&"function"!=typeof i)throw new Error("`extractId` must be a function taking `ownProps` as unique argument.");return function(t){return(0,Mo.qC)((0,g.connect)((function(){var t;return i||(t=r)||(t=function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).name;return"".concat(void 0===e?"":e,"-").concat(Math.random().toString(36).substr(2,9))}({name:n}),L.Z.debug("Generated error handler ID: ".concat(t))),function(r,o){var a,u;i&&(t="".concat(n,"-").concat(i(o)),L.Z.debug((0,e.f9)(ss||(a=["Generated error handler ID with extractId():\n ",""],u||(u=a.slice(0)),ss=Object.freeze(Object.defineProperties(a,{raw:{value:Object.freeze(u)}}))),t)));var c=o.errorHandler?o.errorHandler.id:t;return{error:r.errors[c],errorId:c}}}),void 0,(function(e,t,n){var r=n.errorHandler||new ys({id:e.errorId});return r.setDispatch(t.dispatch),e.error&&r.captureError(e.error),fs(fs({},n),{},{errorHandler:r})})))(t)}}var vs,gs=function(e){var t=e.fileName,n=e.extractId;if(!t)throw new Error("`fileName` parameter is required.");if("function"!=typeof n)throw new Error("`extractId` is required and must be a function.");return ms({name:Tn(t),extractId:n})};function bs(e){return(bs="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function ws(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Os(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Es(e,t){return(Es=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function _s(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Ss(e);if(t){var o=Ss(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return xs(this,n)}}function xs(e,t){if(t&&("object"===bs(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Ss(e){return(Ss=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var js=function(t){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Es(e,t)}(u,t);var n,o,i,a=_s(u);function u(){return ws(this,u),a.apply(this,arguments)}return n=u,(o=[{key:"render",value:function(){var t,n,o,i,a=this.props,u=a.children,c=a.className,s=a.footer,l=a.footerLink,f=a.footerText,p=a.isHomepageShelf,d=a.header,h=a.photonStyle;if(f&&l||l&&s||f&&s)throw new Error((0,e.f9)(vs||(o=["You can only specify exactly one of these props:\n footer, footerLink or footerText."],i||(i=o.slice(0)),vs=Object.freeze(Object.defineProperties(o,{raw:{value:Object.freeze(i)}})))));return f?(t=f,n="Card-footer-text"):l?(t=l,n="Card-footer-link"):t=s,r.createElement("section",{className:Ho()("Card",c,{"Card--photon":h,"Card--no-header":!d,"Card--no-footer":!t})},d?r.createElement("header",{className:Ho()("Card-header",{"Card-shelf-header":p})},r.createElement("div",{className:"Card-header-text"},d),p&&t?r.createElement("footer",{className:"Card-shelf-footer-in-header"},t):null):null,u?r.createElement("div",{className:"Card-contents"},u):null,t?r.createElement("footer",{className:Ho()("Card-footer",{"Card-shelf-footer":p},n)},t):null)}}])&&Os(n.prototype,o),i&&Os(n,i),Object.defineProperty(n,"prototype",{writable:!1}),u}(r.Component);js.propTypes={children:w().node,className:w().string,footer:w().node,footerLink:w().node,footerText:w().node,header:w().node,isHomepageShelf:w().bool,photonStyle:w().bool},js.defaultProps={isHomepageShelf:!1,photonStyle:!1};var Ps=["children","className"];function ks(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}const Is=function(e){var t=e.children,n=e.className,o=ks(e,Ps);return r.createElement("select",Object.assign({},o,{className:Ho()("Select",n)}),t)};function Ts(e){return(Ts="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Rs(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Cs(e,t){return(Cs=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function As(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Ls(e);if(t){var o=Ls(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Ns(this,n)}}function Ns(e,t){if(t&&("object"===Ts(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Ls(e){return(Ls=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Ds=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Cs(e,t)}(a,e);var t,n,o,i=As(a);function a(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),(t=i.call(this,e)).onSelectOption=function(e){e.preventDefault();var n=e.target.value,r=t.optionSelectHandlers[n];r?r():L.Z.warn('No handler for option: "'.concat(n,'"'))},t.optionSelectHandlers={},t}return t=a,(n=[{key:"componentDidMount",value:function(){this.loadDataIfNeeded()}},{key:"componentDidUpdate",value:function(){this.loadDataIfNeeded()}},{key:"loadDataIfNeeded",value:function(){var e=this.props,t=e.currentUserId,n=e.dispatch,r=e.errorHandler,o=e.loadingUserCollections,i=e.userCollections;r.hasError()||!t||o||i||n(Va({errorHandlerId:r.id,userId:t}))}},{key:"addToCollection",value:function(e){var t=this.props,n=t.addon,r=t.currentUserId,o=t.dispatch,i=t.errorHandler;ce()(n,"Cannot add to collection because no add-on has been loaded"),ce()(r,"Cannot add to collection because you are not signed in"),o(tu({addonId:n.id,collectionId:e.id,slug:e.slug,errorHandlerId:i.id,userId:r}))}},{key:"createOption",value:function(e){var t=e.text,n=e.key,o=e.onSelect;return o&&(this.optionSelectHandlers[n]=o),r.createElement("option",{className:"AddAddonToCollection-option",key:n,value:n},t)}},{key:"getSelectData",value:function(){var e,t=this,n=this.props,r=n.addon,o=n.clientApp,i=n.i18n,a=n.lang,u=n.loadingAddonsInCollections,c=n.loadingUserCollections,s=n.history,l=n.userCollections,f=[],p=[];return c?e=i.gettext("Loading…"):u&&(e=i.gettext("Adding…")),e?(f.push(this.createOption({text:e,key:"default"})),{disabled:!0,actionOptions:f,collectionOptions:p}):(f.push(this.createOption({text:i.gettext("Select a collection…"),key:"default"})),f.push(this.createOption({text:i.gettext("Create new collection"),key:"create-new-collection",onSelect:function(){ce()(r,"addon is required"),s.push("/".concat(a,"/").concat(o,"/collections/add/?include_addon_id=").concat(r.id))}})),l&&l.length&&l.sort((function(e,t){return e.name.localeCompare(t.name)})).forEach((function(e){p.push(t.createOption({text:hu({name:e.name,i18n:i}),key:"collection-".concat(e.id),onSelect:function(){t.addToCollection(e)}}))})),{actionOptions:f,collectionOptions:p,disabled:!1})}},{key:"render",value:function(){var e=this.props,t=e.errorHandler,n=e.i18n,o=e.addonInCollections,i=this.getSelectData(),a=i.actionOptions,u=i.collectionOptions,c=i.disabled,s=[];o&&(s=o.map((function(e){var t=n.sprintf(n.gettext("Added to %(collectionName)s"),{collectionName:hu({name:e.name,i18n:n})});return r.createElement(Jc,{type:"success",key:e.id,className:"AddAddonToCollection-added"},t)})));var l=n.gettext("Add to…");return r.createElement(js,{className:"AddAddonToCollection",header:n.gettext("Add to collection")},t.renderErrorIfPresent(),s,r.createElement(Is,{disabled:c,onChange:this.onSelectOption,className:"AddAddonToCollection-select"},a,u.length?r.createElement("optgroup",{label:l},u):null))}}])&&Rs(t.prototype,n),o&&Rs(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const Ms=(0,Mo.qC)(No,(0,g.connect)((function(e,t){var n,r,o=e.collections,i=e.users,a=Xe(i),u=a&&a.id;if(u){n=o.userCollections[u];var c=t.addon;c&&(r=o.addonInCollections[u]&&o.addonInCollections[u][c.id])}return{addonInCollections:lu(o,r),clientApp:e.api.clientApp,currentUserId:u,lang:e.api.lang,loadingAddonsInCollections:!!r&&r.loading,loadingUserCollections:!!n&&n.loading,userCollections:lu(o,n)}})),Eu(),gs({fileName:"src/amo/components/AddAddonToCollection/index.js",extractId:function(e){var t=e.addon,n=e.currentUserId;return"".concat(t?t.id:"","-").concat(n||"")}}))(Ds);a(35288);var Fs=a(2138),Us=a.n(Fs);function Bs(e){return e?e.icon_url:Us()}var Hs,qs=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.full,r=void 0===n||n;if(!e.previews.length)return null;var o=e.previews.findIndex((function(e){return 720===e.w}));o<0&&(o=0);var i=e.previews[o],a=r?"src":"thumbnail_src";return i[a]||null};var zs=function(t){var n,r,o=t.addon,i=t.installURL,a=t.version,u=i.split("?")[0],c=a.file;if(c&&c.url.startsWith(u))return c.hash;L.Z.warn((0,e.f9)(Hs||(n=['No file hash found for addon "','", installURL\n "','" (as "','")'],r||(r=n.slice(0)),Hs=Object.freeze(Object.defineProperties(n,{raw:{value:Object.freeze(r)}}))),o.slug,i,u))},Gs=function(e){var t=e.addon,n=e.clientApp,r=e.forBadging,o=void 0!==r&&r,i=null;return t&&t.promoted&&t.promoted.apps.includes(n)&&(i=t.promoted.category),o&&(i===D.B6&&(i=D.OO),D.D6.includes(i)||(i=null)),i},Ws=function(e){switch(e){case"experimental":return"experimental-badge"}return e};const Vs=function(e){var t=e.label,n=e.type;if(n&&!["experimental","requires-payment"].includes(n))throw new Error('Invalid badge type given: "'.concat(n,'"'));return r.createElement("div",{className:n?"Badge Badge-".concat(n):"Badge"},n&&r.createElement(ac,{alt:t,name:Ws(n)}),t)};var Ys={recommended:"M15.449999809265137,3.999999523162842 H4.550000190734863 C4.25,3.999999523162842 4,4.219999313354492 4,4.499999523162842 V6.999999523162842 c0,1.100000023841858 0.9800000190734863,2 2.180000066757202,2 h0.05000000074505806 a3.6700000762939453,3.6700000762939453 0 0 0 3.2200000286102295,2.9600000381469727 V13.499999523162842 h1.100000023841858 V11.959999561309814 A3.6700000762939453,3.6700000762939453 0 0 0 13.770000457763672,8.999999523162842 h0.05000000074505806 C15.020000457763672,8.999999523162842 16,8.099998950958252 16,6.999999523162842 V4.499999523162842 c0,-0.2800000011920929 -0.23999999463558197,-0.5 -0.550000011920929,-0.5 zM5.099999904632568,6.999999523162842 V4.999999523162842 h1.100000023841858 v3 c-0.6100000143051147,0 -1.100000023841858,-0.44999998807907104 -1.100000023841858,-1 zm9.819999694824219,0 c0,0.550000011920929 -0.49000000953674316,1 -1.100000023841858,1 V4.999999523162842 h1.100000023841858 v2 zM11.100000381469727,13.999999523162842 H8.899999618530273 c-2.7200000286102295,0 -2.7200000286102295,2 -2.7200000286102295,2 h7.639999866485596 s0,-2 -2.7300000190734863,-2 z",verified:"M6 14a1 1 0 0 1-.707-.293l-3-3a1 1 0 0 1 1.414-1.414l2.157 2.157 6.316-9.023a1 1 0 0 1 1.639 1.146l-7 10a1 1 0 0 1-.732.427A.863.863 0 0 1 6 14z"};const Zs=(0,Mo.qC)(Eu())((function(e){var t=e.category,n=e.className,o=e.i18n,i=e.showAlt,a=void 0!==i&&i,u=e.size,c={line:o.gettext("By Firefox"),recommended:o.gettext("Recommended"),verified:o.gettext("Verified")}[t];return r.createElement(ac,{alt:a&&c?c:void 0,className:Ho()("IconPromotedBadge",n,{"IconPromotedBadge-large":"large"===u,"IconPromotedBadge-small":"small"===u}),name:"line"===t?"line":"inline-content"},"line"!==t&&r.createElement("svg",{className:"IconPromotedBadge-svg",version:"1.1",xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink"},r.createElement("circle",{className:"IconPromotedBadge-circle-bgColor--".concat(t),cx:"50%",cy:"50%",r:"50%"}),r.createElement("g",{fillRule:"nonzero"},r.createElement("path",{className:Ho()("IconPromotedBadge-iconPath","IconPromotedBadge-iconPath--".concat(t)),d:Ys[t]}))))}));const $s=(0,Mo.qC)(Eu())((function(e){var t,n,o=e.category,i=e.i18n,a=e.onClick,u=void 0===a?null:a,c=e.size,s=hn({utm_content:"promoted-addon-badge"});switch(o){case"line":t=i.gettext("By Firefox"),n=i.gettext("Official add-on built by Mozilla Firefox. Meets security and performance standards.");break;case"recommended":t=i.gettext("Recommended"),n=i.gettext("Firefox only recommends add-ons that meet our standards for security and performance.");break;default:t=i.gettext("Verified"),n=i.gettext("This add-on has been reviewed to meet our standards for security and performance.")}return r.createElement("div",{className:Ho()("PromotedBadge","PromotedBadge--".concat(o),{"PromotedBadge-large":"large"===c,"PromotedBadge-small":"small"===c})},r.createElement("a",{className:Ho()("PromotedBadge-link","PromotedBadge-link--".concat(o)),href:s,onClick:u,rel:"noopener noreferrer",target:"_blank",title:n},r.createElement(Zs,{category:o,size:c}),r.createElement("span",{className:Ho()("PromotedBadge-label","PromotedBadge-label--".concat(o))},t)))}));function Ks(e){return(Ks="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Qs(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Xs(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Js(e,t){return(Js=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function el(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=nl(e);if(t){var o=nl(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return tl(this,n)}}function tl(e,t){if(t&&("object"===Ks(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function nl(e){return(nl=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var rl=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Js(e,t)}(a,e);var t,n,o,i=el(a);function a(){return Qs(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e._getPromotedCategory,n=e.addon,o=e.clientApp,i=e.i18n;if(!n)return null;var a=t({addon:n,clientApp:o,forBadging:!0});return r.createElement("div",{className:"AddonBadges"},a?r.createElement($s,{category:a,size:"large"}):null,n.is_experimental?r.createElement(Vs,{type:"experimental",label:i.gettext("Experimental")}):null,n.requires_payment?r.createElement(Vs,{type:"requires-payment",label:i.gettext("Some features may require payment")}):null)}}])&&Xs(t.prototype,n),o&&Xs(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);rl.defaultProps={_getPromotedCategory:Gs};const ol=(0,Mo.qC)((0,g.connect)((function(e){return{clientApp:e.api.clientApp}})),Eu())(rl);var il=a(49394),al=a.n(il);function ul(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function cl(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ul(Object(n),!0).forEach((function(t){sl(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ul(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function sl(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ll(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return fl(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return fl(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,u=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){u=!0,i=e},f:function(){try{a||null==n.return||n.return()}finally{if(u)throw i}}}}function fl(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var pl={byAddonId:{},byAddonSlug:{},byAuthorId:{},countFor:{},lang:"",loadingFor:{}},dl="FETCH_ADDONS_BY_AUTHORS",hl="LOAD_ADDONS_BY_AUTHORS",yl=function(e){var t=e.addonType,n=e.addons,r=e.authorIds,o=e.count,i=e.forAddonSlug,a=e.pageSize;return ce()(n,"A set of add-ons is required."),ce()(r,"A list of authorIds is required."),ce()("number"==typeof o,"count is required."),ce()(a,"pageSize is required."),{type:hl,payload:{addonType:t,addons:n,authorIds:r,count:o,forAddonSlug:i,pageSize:a}}},ml=function(e,t){return e.sort().join("-")+(t?"-".concat(t):"")},vl=function(e,t,n,r){ce()(t&&t.length,"At least one authorId is required.");var o=t.map((function(t){return e.byAuthorId[t]})).reduce((function(e,t){if(t){var n,r=ll(t);try{for(r.s();!(n=r.n()).done;){var o=n.value;e.includes(o)||e.push(o)}}catch(e){r.e(e)}finally{r.f()}}return e}),[]);return o.length?o.map((function(t){return e.byAddonId[t]})).filter((function(e){return!n||e.type===n})).filter((function(e){return e.slug!==r})):null};const gl=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:pl,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case dt:return cl(cl({},e),{},{lang:t.payload.lang});case dl:var n=al()(e),r=t.payload,o=r.addonType,i=r.authorIds,a=r.forAddonSlug;if(a&&(n.byAddonSlug=cl(cl({},n.byAddonSlug),{},sl({},a,void 0))),i.length){var u=vl(n,i,o);if(u){var c,s=ll(u);try{var l=function(){var e=c.value;if(e.authors){var t,r=ll(e.authors);try{for(r.s();!(t=r.n()).done;){var o=t.value;n.byAuthorId[o.id]=n.byAuthorId[o.id].filter((function(t){return t!==e.id}))}}catch(e){r.e(e)}finally{r.f()}}};for(s.s();!(c=s.n()).done;)l()}catch(e){s.e(e)}finally{s.f()}}}var f=ml(i,o);return n.loadingFor[f]=!0,n.countFor[f]=null,n;case hl:var p=al()(e),d=t.payload,h=d.addonType,y=d.addons,m=d.authorIds,v=d.count,g=d.forAddonSlug,b=d.pageSize;g&&(p.byAddonSlug=cl(cl({},p.byAddonSlug),{},sl({},g,y.slice(0,Number(b)).map((function(e){return e.id})))));var w=ml(m,h);p.countFor[w]=v,p.loadingFor[w]=!1;var O,E=y.map((function(t){return ua(t,e.lang)})),_=ll(E);try{for(_.s();!(O=_.n()).done;){var x=O.value;if(p.byAddonId[x.id]=x,x.authors){var S,j=ll(x.authors);try{for(j.s();!(S=j.n()).done;){var P=S.value;p.byAuthorId[P.id]||(p.byAuthorId[P.id]=[]),p.byAuthorId[P.id].includes(x.id)||p.byAuthorId[P.id].push(x.id)}}catch(e){j.e(e)}finally{j.f()}}}}catch(e){_.e(e)}finally{_.f()}return p;default:return e}};function bl(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function wl(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?bl(Object(n),!0).forEach((function(t){Ol(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):bl(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Ol(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var El="ABORT_FETCH_HOME_DATA",_l="FETCH_HOME_DATA",xl="LOAD_HOME_DATA",Sl={homeShelves:null,isLoading:!1,lang:"",resetStateOnNextChange:!1,resultsLoaded:!1,shelves:{}},jl=function(e){var t=e.homeShelves,n=e.shelves;return ce()(n,"shelves are required"),{type:xl,payload:{homeShelves:t,shelves:n}}},Pl=function(e,t){return e.results.map((function(e){return ua(e,t)}))},kl=function(e,t){var n=e.id,r=e.guid,o=e.homepage,i=e.name,a=e.type;return{id:n,guid:r,homepage:aa(o,t),name:Yi(i,t),type:a}},Il=function(e,t){return{url:e.url,outgoing:e.outgoing,text:Yi(e.text,t)}},Tl=function(e,t){var n=e.results,r=e.primary,o=e.secondary,i=n.map((function(e){return function(e,t){var n=e.addons.map((function(e){return ua(e,t)}));return{title:Yi(e.title,t),url:e.url,endpoint:e.endpoint,addonType:e.addon_type,footer:Il(e.footer,t),addons:n}}(e,t)})),a=null;if(null!==o&&(a={headline:Yi(o.headline,t),description:Yi(o.description,t),cta:o.cta?Il(o.cta,t):null,modules:o.modules.map((function(e){return function(e,t){return{icon:e.icon,description:Yi(e.description,t),cta:e.cta?Il(e.cta,t):null}}(e,t)}))}),null===r)return{results:i,primary:null,secondary:a};ce()(r.addon||r.external,"Either primary.addon or primary.external is required");var u={gradient:r.gradient,featuredImage:r.featured_image,description:Yi(r.description,t)};return r.addon?{results:i,primary:wl(wl({},u),{},{addon:ua(r.addon,t),external:void 0}),secondary:a}:{results:i,primary:wl(wl({},u),{},{addon:void 0,external:kl(r.external,t)}),secondary:a}};const Rl=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Sl,n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.Z;switch(n.type){case dt:return wl(wl({},e),{},{lang:n.payload.lang});case pt:return wl(wl({},Sl),{},{lang:e.lang});case El:return wl(wl({},e),{},{isLoading:!1});case _l:return wl(wl({},e),{},{isLoading:!0,resultsLoaded:!1});case xl:var o=n.payload,a=o.homeShelves,u=o.shelves;return wl(wl({},e),{},{homeShelves:a?Tl(a,e.lang):null,isLoading:!1,resultsLoaded:!0,shelves:Object.keys(u).reduce((function(t,n){var r=u[n];return wl(wl({},t),{},Ol({},n,r?Pl(r,e.lang):[]))}),{})});case i.nk:return r.get("server")?e:e.resetStateOnNextChange?wl(wl({},Sl),{},{lang:e.lang}):wl(wl({},e),{},{resetStateOnNextChange:!0});default:return e}};function Cl(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Al(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Cl(Object(n),!0).forEach((function(t){Nl(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Cl(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Nl(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Ll="GET_LANDING",Dl="LOAD_LANDING",Ml={addonType:null,category:null,recommended:{count:0,results:[]},highlyRated:{count:0,results:[]},lang:"",loading:!1,trending:{count:0,results:[]},resultsLoaded:!1};function Fl(e){var t=e.addonType,n=e.recommended,r=e.highlyRated,o=e.trending;return ce()(t,"addonType is required"),ce()(n,"recommended is required"),ce()(r,"highlyRated is required"),ce()(o,"trending is required"),{type:Dl,payload:{addonType:t,recommended:n,highlyRated:r,trending:o}}}function Ul(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Bl(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ul(Object(n),!0).forEach((function(t){Hl(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ul(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Hl(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var ql="ABORT_FETCH_RECOMMENDATIONS",zl="FETCH_RECOMMENDATIONS",Gl="LOAD_RECOMMENDATIONS",Wl={byGuid:{},lang:""},Vl=function(e){var t=e.guid;return ce()(t,"guid is required"),{type:ql,payload:{guid:t}}},Yl=function(e){var t=e.addons,n=e.fallbackReason,r=e.guid,o=e.outcome;return ce()(t,"addons is required"),ce()(r,"guid is required"),ce()(o,"outcome is required"),{type:Gl,payload:{addons:t,guid:r,outcome:o,fallbackReason:n}}};const Zl=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Wl,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case dt:return Bl(Bl({},e),{},{lang:t.payload.lang});case ql:return Bl(Bl({},e),{},{byGuid:Bl(Bl({},e.byGuid),{},Hl({},t.payload.guid,{addons:null,fallbackReason:null,loading:!1,outcome:null}))});case zl:return Bl(Bl({},e),{},{byGuid:Bl(Bl({},e.byGuid),{},Hl({},t.payload.guid,{addons:null,fallbackReason:null,loading:!0,outcome:null}))});case Gl:var n=t.payload,r=n.fallbackReason,o=n.guid,i=n.outcome,a=t.payload.addons.map((function(t){return ua(t,e.lang)}));return Bl(Bl({},e),{},{byGuid:Bl(Bl({},e.byGuid),{},Hl({},o,{addons:a,fallbackReason:r,loading:!1,outcome:i}))});default:return e}};function $l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Kl(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?$l(Object(n),!0).forEach((function(t){Ql(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):$l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Ql(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Xl="SEARCH_STARTED",Jl="SEARCH_LOADED",ef="SEARCH_ABORTED",tf={count:0,filters:null,lang:"",loading:!1,pageSize:null,results:[]};function nf(e){var t=e.errorHandlerId,n=e.filters;return ce()(t,"errorHandlerId is required"),ce()(n,"filters are required"),{type:Xl,payload:{errorHandlerId:t,filters:n}}}function rf(e){var t=e.count,n=e.pageSize,r=e.results;return ce()(r,"results are required"),{type:Jl,payload:{count:t,pageSize:n,results:r}}}function of(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return af(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return af(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,u=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){u=!0,i=e},f:function(){try{a||null==n.return||n.return()}finally{if(u)throw i}}}}function af(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function uf(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function cf(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?uf(Object(n),!0).forEach((function(t){sf(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):uf(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function sf(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var lf="FETCH_VERSION",ff="FETCH_VERSIONS",pf="LOAD_VERSIONS",df={byId:{},bySlug:{},lang:""},hf=function(e,t){var n=cf({},e.compatibility),r=n[D.So];return r&&"91.1.0"===r.min&&(n[D.So].min="91.0.0"),{compatibility:n,id:e.id,isStrictCompatibilityEnabled:Boolean(e.is_strict_compatibility_enabled),license:e.license?{isCustom:e.license.is_custom,name:Yi(e.license.name,t),text:void 0===e.license.text?void 0:Yi(e.license.text,t),url:e.license.url}:null,file:e.file,releaseNotes:Yi(e.release_notes,t),version:e.version}},yf=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.slug,n=e.versions;return ce()(t,"slug is required"),ce()(n,"versions is required"),{type:pf,payload:{slug:t,versions:n}}},mf=function(e){var t=e.id,n=e.state;return ce()(t,"id is required"),ce()(n,"state is required"),n.byId[t]||null},vf=function(e){var t=e.slug,n=e.state;ce()(t,"slug is required"),ce()(n,"state is required");var r=n.bySlug[t];return r&&r.versionIds?r.versionIds.map((function(e){var r=mf({id:e,state:n});return ce()(r,"missing version for slug ".concat(t," and versionId ").concat(e)),r})):null},gf=function(e){var t=e.slug,n=e.state;ce()(t,"slug is required"),ce()(n,"state is required");var r=n.bySlug[t];return Boolean(r&&r.loading)},bf=function(e){var t=e.i18n,n=e.state,r=e.versionId,o=mf({id:r,state:n});if(o){var i=o.file,a=t.gettext("%(application)s %(minVersion)s and later"),u=t.gettext("%(application)s %(minVersion)s to %(maxVersion)s"),c=Object.keys(o.compatibility).map((function(e){var n=o.compatibility[e],r=n.max,i=n.min;return"*"===r?t.sprintf(a,{application:e,minVersion:i}):t.sprintf(u,{application:e,maxVersion:r,minVersion:i})})).join(", ");return{compatibilityString:t.sprintf(t.gettext("Works with %(listOfApplicatonsAndVersions)s"),{listOfApplicatonsAndVersions:c}),created:i?i.created:null,filesize:i?ne({i18n:t,size:i.size}):null}}return null};const wf=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:df,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case dt:return cf(cf({},e),{},{lang:t.payload.lang});case lf:case ff:var n=t.payload.slug;return cf(cf({},e),{},{bySlug:cf(cf({},e.bySlug),{},sf({},n,{versionIds:null,loading:!0}))});case pf:var r,o=t.payload,i=o.slug,a=o.versions,u={},c=of(a);try{for(c.s();!(r=c.n()).done;){var s=r.value;u[s.id]=hf(s,e.lang)}}catch(e){c.e(e)}finally{c.f()}return cf(cf({},e),{},{byId:cf(cf({},e.byId),u),bySlug:cf(cf({},e.bySlug),{},sf({},i,{versionIds:a.map((function(e){return e.id})),loading:!1}))});case ea:t.payload.addons=[t.payload.addon];case hl:case Ca:case xa:case ja:case Gl:case Jl:var l,f=t.payload,p=f.addons,d=f.addonsResponse,h=f.results,y={},m=of(h||(d?d.results:p.results||p));try{for(m.s();!(l=m.n()).done;){var v=l.value,g=v.addon||v;if(g.current_version){var b=g.current_version,w=hf(b,e.lang);if(!b.license||!b.release_notes){var O=mf({id:b.id,state:e});O&&(w.license=w.license||O.license,w.releaseNotes=w.releaseNotes||O.releaseNotes)}y[w.id]=w}}}catch(e){m.e(e)}finally{m.f()}return cf(cf({},e),{},{byId:cf(cf({},e.byId),y)});case xl:var E=t.payload,_=E.homeShelves,x=E.shelves,S={},j=function(t){if(t.current_version){var n=t.current_version,r=hf(n,e.lang),o=n.id,i=mf({id:o,state:e});i&&(r=cf(cf({},r),{},{license:i.license,releaseNotes:i.releaseNotes})),S[o]=r}};if(_&&_.results){var P,k=of(_.results);try{for(k.s();!(P=k.n()).done;){var I,T=P.value,R=of(T.addons);try{for(R.s();!(I=R.n()).done;){var C=I.value;j(C)}}catch(e){R.e(e)}finally{R.f()}}}catch(e){k.e(e)}finally{k.f()}}for(var A=0,N=Object.keys(x);A<N.length;A++){var L=N[A];if(x[L]){var D,M=of(x[L].results);try{for(M.s();!(D=M.n()).done;){var F=D.value;j(F)}}catch(e){M.e(e)}finally{M.f()}}}return cf(cf({},e),{},{byId:cf(cf({},e.byId),S)});case Dl:for(var U=t.payload,B=U.recommended,H=U.highlyRated,q=U.trending,z={},G=0,W=[B,H,q];G<W.length;G++){var V,Y=W[G],Z=of(Y.results);try{for(Z.s();!(V=Z.n()).done;){var $=V.value;if($.current_version){var K=hf($.current_version,e.lang);z[K.id]=K}}}catch(e){Z.e(e)}finally{Z.f()}}return cf(cf({},e),{},{byId:cf(cf({},e.byId),z)});default:return e}};var Of,Ef,_f,xf=a(96521);function Sf(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function jf(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t._log,r=void 0===n?L.Z:n,o=t.addon,i=t.clientApp,a=t.currentVersion,u=null,c=null,s=!1;if(a){var l=a.compatibility[i];l&&(s=!0,u=l.max,c=l.min),s||r.warn((0,e.f9)(Of||(Of=Sf(['addon guid: "','" is incompatible with\n clientApp: "','"'])),o.guid,i))}return{supportsClientApp:s,maxVersion:u,minVersion:c}}var Pf=function(e){var t=e.userAgentInfo;return ce()(t,"userAgentInfo is required"),"Firefox"===t.browser.name},kf=function(e){return ce()(e,"userAgentInfo is required"),Pf({userAgentInfo:e})&&e.os.name===vt},If=function(e){return ce()(e,"userAgentInfo is required"),Pf({userAgentInfo:e})&&e.os.name===gt},Tf=function(e){var t=e.addon;return!!t&&t.type===D.Gz&&Gs({addon:t,clientApp:D.wZ})===D.g$};function Rf(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t._log,r=void 0===n?L.Z:n,o=t.addon,i=t.currentVersion,a=t.maxVersion,u=t.minVersion,c=t.userAgentInfo;ce()(c,"userAgentInfo is required");var s=c.browser;if(If(c))return{compatible:!1,reason:D.Px};if(!Pf({userAgentInfo:c}))return{compatible:!1,reason:D.T3};if(kf(c)&&(!Tf({addon:o})||i&&!i.compatibility[D.wZ]))return{compatible:!1,reason:D.op};if(!i||!i.file)return{compatible:!1,reason:D.YE};if(a&&1===(0,xf.mozCompare)(s.version,a)){if(i.isStrictCompatibilityEnabled)return{compatible:!1,reason:D.CK};r.info((0,e.f9)(Ef||(Ef=Sf(["maxVersion "," for add-on lower than\n browser version ",", but add-on still marked as\n compatible because we largely ignore maxVersion. See:\n https://github.com/mozilla/addons-frontend/issues/2074"])),a,s.version))}return u&&-1===(0,xf.mozCompare)(s.version,u)?("*"===u&&r.error((0,e.f9)(_f||(_f=Sf(['minVersion of "*" was passed to\n isCompatibleWithUserAgent(); bad add-on version data (browserVersion:\n ',")"])),s.version)),{compatible:!1,reason:D.VD}):{compatible:!0,reason:null}}function Cf(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.addon,n=e.clientApp,r=e.currentVersion,o=e.userAgentInfo,i=e._window,a=void 0===i?"undefined"!=typeof window?window:{}:i,u=jf({addon:t,clientApp:n,currentVersion:r}),c=u.supportsClientApp,s=u.maxVersion,l=u.minVersion,f=Rf({addon:t,currentVersion:r,maxVersion:s,minVersion:l,userAgentInfo:o,_window:a}),p=f.reason;return c||p||(p=D.YE),{compatible:f.compatible&&c,maxVersion:s,minVersion:l,reason:p}}var Af=function(e){return"/".concat(e,"/").concat(D.wZ,"/")},Nf=function(e){var t=e.clientApp,n=e.isHomePage,r=void 0!==n&&n,o=e.lang,i=e.location,a=e.userAgentInfo;ce()(a,"userAgentInfo is required");var u=a.browser,c=a.os;return If(a)||!Pf({userAgentInfo:a})?null:kf(a)&&t===D.So||kf(a)&&!r&&!i.pathname.includes("/search/")?Af(o):c.name!==vt&&"Firefox"===u.name&&t===D.wZ?"".concat(i.pathname.replace(D.wZ,D.So)).concat(i.search):null};function Lf(e){return(Lf="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Df(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Mf(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Ff(e,t){return(Ff=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Uf(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Hf(e);if(t){var o=Hf(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Bf(this,n)}}function Bf(e,t){if(t&&("object"===Lf(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Hf(e){return(Hf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var qf=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Ff(e,t)}(a,e);var t,n,o,i=Uf(a);function a(){return Df(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e._getClientCompatibility,n=e.addon,o=e.clientApp,i=e.currentVersion,a=e.i18n,u=e.userAgentInfo;if(!n)return null;var c=t({addon:n,clientApp:o,currentVersion:i,userAgentInfo:u});if(c.compatible)return null;var s=c.reason;if(ce()(s,"reason is required"),![D.CK,D.YE].includes(s))return null;var l=s===D.CK?a.gettext("This add-on is not compatible with your\n version of Firefox."):a.gettext("This add-on is not available on your platform.");return r.createElement(Jc,{type:"error",className:"AddonCompatibilityError"},r.createElement("span",{className:"AddonCompatibilityError-message",dangerouslySetInnerHTML:vn(l,["a"])}))}}])&&Mf(t.prototype,n),o&&Mf(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);qf.defaultProps={_getClientCompatibility:Cf};const zf=(0,Mo.qC)((0,g.connect)((function(e,t){var n=t.addon,r=null;return n&&n.currentVersionId&&(r=mf({id:n.currentVersionId,state:e.versions})),{clientApp:e.api.clientApp,currentVersion:r,userAgentInfo:e.api.userAgentInfo}})),Eu())(qf);var Gf=a(10017),Wf=a.n(Gf);function Vf(e){return(Vf="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Yf(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Zf(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function $f(e,t){return($f=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Kf(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Xf(e);if(t){var o=Xf(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Qf(this,n)}}function Qf(e,t){if(t&&("object"===Vf(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Xf(e){return(Xf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Jf=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&$f(e,t)}(a,e);var t,n,o,i=Kf(a);function a(){return Yf(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e._config,n=e._hrefLangs,o=e.currentURL,i=e.lang,a=e.locationPathname,u=e.queryString,c=a.split("/").slice(2).join("/"),s="/".concat(i,"/").concat(c).concat(u||""),l=t.get("hrefLangsMap"),f=!1===t.get("unsupportedHrefLangs").includes(i)&&s===o;return r.createElement(Ao,null,r.createElement("link",{rel:"canonical",href:pn({_config:t,locationPathname:s})}),f&&n.map((function(e){var n=l[e]||e,o="/".concat(n,"/").concat(c);return r.createElement("link",{href:pn({_config:t,locationPathname:"".concat(o).concat(u||"")}),hrefLang:e,key:e,rel:"alternate"})})))}}])&&Zf(t.prototype,n),o&&Zf(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.PureComponent);Jf.defaultProps={_config:t.Z,_hrefLangs:Ee};const ep=(0,Mo.qC)((0,g.connect)((function(e){var t=e.api.lang,n=e.router.location,r=n.pathname,o=n.search;return{currentURL:"".concat(r).concat(o),lang:t,locationPathname:r}})))(Jf);var tp=a(19704),np=a.n(tp);function rp(e){return(rp="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function op(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function ip(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?op(Object(n),!0).forEach((function(t){ap(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):op(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function ap(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function up(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function cp(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function sp(e,t){return(sp=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function lp(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=pp(e);if(t){var o=pp(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return fp(this,n)}}function fp(e,t){if(t&&("object"===rp(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function pp(e){return(pp=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var dp=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&sp(e,t)}(a,e);var t,n,o,i=lp(a);function a(){return up(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"getImage",value:function(){var e=this.props.image;return e||np()}},{key:"getTitle",value:function(){var e,t=this.props,n=t.clientApp,r=t.i18n,o=t.lang,i=t.title,a=t.appendDefaultTitle,u={locale:o};if(i){if(!a)return i;e=n===D.wZ?r.gettext("%(title)s – Add-ons for Firefox Android (%(locale)s)"):r.gettext("%(title)s – Add-ons for Firefox (%(locale)s)"),u=ip(ip({},u),{},{title:i})}else e=n===D.wZ?r.gettext("Add-ons for Firefox Android (%(locale)s)"):r.gettext("Add-ons for Firefox (%(locale)s)");return r.sprintf(e,u)}},{key:"renderOpenGraph",value:function(){var e=this.props,t=e._config,n=e.description,o=e.lang,i=e.locationPathname,a=e.queryString,u="".concat(pn({_config:t,locationPathname:i})).concat(a||""),c=[r.createElement("meta",{key:"og:type",property:"og:type",content:"website"}),r.createElement("meta",{key:"og:url",property:"og:url",content:u}),r.createElement("meta",{key:"og:title",property:"og:title",content:this.getTitle()}),r.createElement("meta",{key:"og:locale",property:"og:locale",content:o}),r.createElement("meta",{key:"og:image",property:"og:image",content:this.getImage()})];return n&&c.push(r.createElement("meta",{key:"og:description",property:"og:description",content:n})),c}},{key:"renderTwitter",value:function(){return this.props.withTwitterMeta?[r.createElement("meta",{key:"twitter:site",name:"twitter:site",content:"@mozamo"}),r.createElement("meta",{key:"twitter:card",name:"twitter:card",content:"summary_large_image"})]:null}},{key:"render",value:function(){var e=this.props,t=e.date,n=e.description,o=e.lastModified;return r.createElement(Ao,null,n&&r.createElement("meta",{name:"description",content:n}),t&&r.createElement("meta",{name:"date",content:t}),o&&r.createElement("meta",{name:"last-modified",content:o}),this.renderOpenGraph(),this.renderTwitter())}}])&&cp(t.prototype,n),o&&cp(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.PureComponent);dp.defaultProps={_config:t.Z,appendDefaultTitle:!0,withTwitterMeta:!1};const hp=(0,Mo.qC)((0,g.connect)((function(e){var t=e.api;return{clientApp:t.clientApp,lang:t.lang,locationPathname:e.router.location.pathname}})),Eu())(dp);function yp(e){return(yp="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function mp(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function vp(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function gp(e,t){return(gp=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function bp(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Op(e);if(t){var o=Op(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return wp(this,n)}}function wp(e,t){if(t&&("object"===yp(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Op(e){return(Op=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Ep=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&gp(e,t)}(a,e);var t,n,o,i=bp(a);function a(){return mp(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"getPageTitle",value:function(){var e=this.props,t=e.addon,n=e.clientApp,r=e.i18n,o=e.lang;ce()(t,"addon is required");var i,a={addonName:t.name,locale:o};if(n===D.wZ)switch(t.type){case D.jV:i=r.gettext("%(addonName)s – Get this Dictionary\n for 🦊 Firefox Android (%(locale)s)");break;case D.Gz:i=r.gettext("%(addonName)s – Get this Extension for\n 🦊 Firefox Android (%(locale)s)");break;case D.d$:i=r.gettext("%(addonName)s – Get this Language Pack\n for 🦊 Firefox Android (%(locale)s)");break;case D.Yd:i=r.gettext("%(addonName)s – Get this Theme for 🦊 Firefox Android (%(locale)s)");break;default:i=r.gettext("%(addonName)s – Get this Add-on for 🦊\n Firefox Android (%(locale)s)")}else switch(t.type){case D.jV:i=r.gettext("%(addonName)s – Get this Dictionary\n for 🦊 Firefox (%(locale)s)");break;case D.Gz:i=r.gettext("%(addonName)s – Get this Extension for\n 🦊 Firefox (%(locale)s)");break;case D.d$:i=r.gettext("%(addonName)s – Get this Language Pack\n for 🦊 Firefox (%(locale)s)");break;case D.Yd:i=r.gettext("%(addonName)s – Get this Theme for 🦊\n Firefox (%(locale)s)");break;default:i=r.gettext("%(addonName)s – Get this Add-on for 🦊\n Firefox (%(locale)s)")}return r.sprintf(i,a)}},{key:"getPageDescription",value:function(){var e=this.props,t=e.addon,n=e.i18n;return ce()(t,"addon is required"),n.sprintf(n.gettext("Download %(addonName)s for Firefox. %(summary)s"),{addonName:t.name,summary:t.summary})}},{key:"render",value:function(){var e=this.props,t=e._getAddonJsonLinkedData,n=e.addon,o=e.currentVersion,i=e.versionInfo;if(ce()(t,"_getAddonJsonLinkedData is required."),!n)return null;var a=i&&i.created;return r.createElement(r.Fragment,null,r.createElement(Ao,{titleTemplate:null},r.createElement("title",null,this.getPageTitle()),r.createElement("script",{type:"application/ld+json"},Wf()(t({addon:n,currentVersion:o}),{isJSON:!0}))),r.createElement(hp,{appendDefaultTitle:!1,date:n.created,description:this.getPageDescription(),image:qs(n),lastModified:a,title:this.getPageTitle(),withTwitterMeta:n.type===D.Gz}),r.createElement(ep,null))}}])&&vp(t.prototype,n),o&&vp(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);Ep.defaultProps={_getAddonJsonLinkedData:function(e){var t,n=e.addon,r=e.currentVersion,o=e.ratingThreshold,i=void 0===o?3.3:o,a=n.ratings;return a&&a.count>0&&a.average>=i&&(t={"@type":"AggregateRating",ratingCount:a.count,ratingValue:a.average}),Ft({"@context":"http://schema.org","@type":"WebApplication",name:n.name,url:n.url,image:qs(n),applicationCategory:"http://schema.org/OtherApplication",operatingSystem:"Firefox",description:n.summary,offers:{"@type":"Offer",availability:"http://schema.org/InStock",price:0,priceCurrency:"USD"},version:r?r.version:void 0,aggregateRating:t})}};const _p=(0,Mo.qC)(Eu(),(0,g.connect)((function(e,t){var n=t.addon,r=t.i18n,o=e.api,i=o.clientApp,a=o.lang,u=null,c=null;return n&&n.currentVersionId&&(u=mf({id:n.currentVersionId,state:e.versions})),u&&(c=bf({i18n:r,state:e.versions,versionId:u.id})),{clientApp:i,currentVersion:u,lang:a,versionInfo:c}})))(Ep);const xp=Eu()((function(e){var t=e.error,n=e.i18n;return t?r.createElement(Jc,{className:"AddonInstallError",type:"error"},function(e){var t=e.i18n,n=e.error;switch(ce()(t,"i18n is required"),n){case D._y:return t.gettext("Installation aborted because the add-on appears to be corrupt.");case D.DE:return t.gettext("Installation failed. Please try again.");case D.Vg:return t.gettext("Download failed. Please check your connection.");case D.pl:return t.gettext("An unexpected error occurred during installation.");case D.hY:return t.gettext("An unexpected error occurred during uninstallation.");case D.F6:default:return t.gettext("An unexpected error occurred.")}}({i18n:n,error:t})):null}));var Sp;function jp(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function Pp(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function kp(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Pp(Object(n),!0).forEach((function(t){Ip(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Pp(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Ip(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Tp(e){var t=e.addonSlug,n=e.id,r=e.location,o=e.score;ce()(t,"addonSlug is required");var i="/addon/".concat(t,"/reviews/").concat(n?"".concat(n,"/"):""),a=o?{score:String(o)}:{};return r&&(a=kp(kp({},a),Bt(r))),Ut(i,a)}var Rp={permissions:{},byAddon:{},byId:{},byUserId:{},latestUserReview:{},view:{},flashMessage:void 0,loadingForSlug:{}};var Cp=function(e,t){return e.byId[t]};function Ap(e){var t=e.addonId,n=e.userId;return"".concat(t,"-").concat(n)}var Np=function(e){var t=e.state;return e.reviews.map((function(e){var n=Cp(t,e);if(!n)throw new Error("No stored review exists for ID ".concat(e));return n}))},Lp=function(e){var t=e.state,n=e.reviews,r=kp({},t.byId);return n.forEach((function(e){if(!e.id)throw new Error("Cannot store review because review.id is falsy");r[e.id]=e})),r},Dp=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.state,n=e.reviewId,r=e.stateChange,o=kp({},r),i=t.view[n]?t.view[n].flag:{};return kp(kp({},t),{},{view:kp(kp({},t.view),{},Ip({},n,kp(kp(kp({beginningToDeleteReview:!1,deletingReview:!1,editingReview:!1,loadingReview:!1,replyingToReview:!1,submittingReply:!1},t.view[n]),o),{},{flag:kp(kp({},i),o.flag)})))})},Mp=function(e){var t=e.userId,n=e.addonId;return"user-".concat(t,"/addon-").concat(n)},Fp=function(e){var t=e.state,n=e.review,r=Cp(t,n.id),o=Boolean(r),i=o;r&&!r.body&&n.body&&(i=!1);var a=o?t.byUserId:kp(kp({},t.byUserId),{},Ip({},n.userId,void 0)),u=i?t.byAddon:kp(kp({},t.byAddon),{},Ip({},n.reviewAddon.slug,void 0));return kp(kp({},t),{},{byId:Lp({state:t,reviews:[n]}),byUserId:a,byAddon:u})},Up=function(e,t){return Boolean(e.reviews.loadingForSlug[t])};function Bp(e){return(Bp="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Hp(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function qp(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function zp(e,t){return(zp=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Gp(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Vp(e);if(t){var o=Vp(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Wp(this,n)}}function Wp(e,t){if(t&&("object"===Bp(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Vp(e){return(Vp=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Yp=[20,40,60,80,100],Zp=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&zp(e,t)}(a,e);var t,n,o,i=Gp(a);function a(){return Hp(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.className,n=e.minWidth,o=e.width,i=Math.floor(3*Math.random())+1,a=o;if(void 0===a||!Yp.includes(a)){var u=Yp.filter((function(e){return e>=n}));a=u[Math.floor(Math.random()*u.length)]}return r.createElement("span",{className:Ho()("LoadingText","LoadingText--delay-".concat(i),"LoadingText--width-".concat(a),t),role:"alert","aria-busy":"true"})}}])&&qp(t.prototype,n),o&&qp(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);Zp.defaultProps={minWidth:20};const $p=function(e){var t=e.className,n=e.metadata;return ce()(n,"The metadata property is required"),r.createElement("div",{className:Ho()("MetadataCard",t)},n.map((function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.content,n=e.title,o=arguments.length>1?arguments[1]:void 0;if(void 0===t)throw new Error("content is required");if(void 0===n)throw new Error("title is required");var i=t||""===t||0===t;return r.createElement("dl",{className:"MetadataCard-list",key:o},r.createElement("dd",{className:"MetadataCard-content"},i?t:r.createElement(Zp,null)),r.createElement("dt",{className:"MetadataCard-title"},n))})))};var Kp;a(70849);function Qp(e){return(Qp="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Xp(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Jp(e,t){return(Jp=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function ed(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=nd(e);if(t){var o=nd(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return td(this,n)}}function td(e,t){if(t&&("object"===Qp(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function nd(e){return(nd=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var rd=Object.keys({small:"",large:""}),od=function(t){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Jp(e,t)}(u,t);var n,o,i,a=ed(u);function u(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,u),(t=a.call(this,e)).onSelectRating=function(e){var n=t.props.onSelectRating;ce()(n,"onSelectRating was empty. Did you mean to set readOnly=true?"),e.preventDefault(),e.stopPropagation();var r=e.currentTarget,o=parseInt(r.value,10);L.Z.debug("Selected rating from form button: ".concat(o)),n(o)},t.renderTitle=function(e,n,r){var o=t.props.i18n;return n?e?o.sprintf(o.gettext("Rated %(rating)s out of 5"),{rating:o.formatNumber(parseFloat(e).toFixed(1))}):o.gettext("There are no ratings yet"):(ce()(r,"starRating is required when readOnly=false"),e?r===e?o.sprintf(o.gettext("Rated %(rating)s out of 5"),{rating:o.formatNumber(parseFloat(e).toFixed(1))}):o.sprintf(o.gettext("Update your rating to %(starRating)s out of 5"),{starRating:r}):o.sprintf(o.gettext("Rate this add-on %(starRating)s out of 5"),{starRating:r}))},t.onHoverStar=function(e){t.props.readOnly||t._setState({hoveringOverStar:e})},t.stopHovering=function(){t.props.readOnly||t._setState({hoveringOverStar:null})},t.state={hoveringOverStar:null},t}return n=u,(o=[{key:"_setState",value:function(e){return(this.props._setState||this.setState.bind(this))(e)}},{key:"renderRatings",value:function(){var e=this,t=this.props.readOnly,n=this.state.hoveringOverStar,o=this.props.rating||0;return[1,2,3,4,5].map((function(i){var a=i-o<=.25;null!==n&&(a=i<=n);var u=e.renderTitle(o,t,i),c=i-o>.25&&i-o<=.75,s={className:Ho()("Rating-star","Rating-rating-".concat(i),{"Rating-selected-star":a,"Rating-half-star":c}),key:"rating-".concat(i),onClick:void 0,onMouseEnter:function(){return e.onHoverStar(i)},title:u};if(t)return r.createElement("div",s);e.isLoading()||(s.onClick=e.onSelectRating);var l="Rating-rating-".concat(i,"-title");return r.createElement(r.Fragment,null,r.createElement("button",Object.assign({"aria-describedby":l,type:"button",value:i},s),r.createElement("span",{id:l,className:"visually-hidden"},u)))}))}},{key:"isLoading",value:function(){return void 0===this.props.rating}},{key:"render",value:function(){var t,n,o=this.props,i=o.className,a=o.rating,u=o.readOnly,c=o.styleSize,s=o.yellowStars;if(!c||!rd.includes(c))throw new Error((0,e.f9)(Kp||(t=["styleSize="," is not a valid\n value; possible values: ",""],n||(n=t.slice(0)),Kp=Object.freeze(Object.defineProperties(t,{raw:{value:Object.freeze(n)}}))),c||"[empty string]",rd.join(", ")));var l=u?this.renderTitle(a,u,null):null,f=Ho()("Rating","Rating--".concat(c),i,{"Rating--editable":!u,"Rating--loading":this.isLoading(),"Rating--yellowStars":s}),p={};return this.isLoading()&&(p.role="alert",p["aria-busy"]="true"),r.createElement("div",Object.assign({className:f,title:l,onMouseLeave:this.stopHovering},p),this.renderRatings(),r.createElement("span",{className:"visually-hidden"},l))}}])&&Xp(n.prototype,o),i&&Xp(n,i),Object.defineProperty(n,"prototype",{writable:!1}),u}(r.Component);od.defaultProps={className:"",readOnly:!1,styleSize:"large",yellowStars:!1};const id=(0,Mo.qC)(Eu())(od);function ad(e){return(ad="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function ud(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function cd(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function sd(e,t){return(sd=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function ld(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=pd(e);if(t){var o=pd(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return fd(this,n)}}function fd(e,t){if(t&&("object"===ad(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function pd(e){return(pd=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var dd=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&sd(e,t)}(a,e);var t,n,o,i=ld(a);function a(){return ud(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"renderBarValue",value:function(e){var t=this.props.addon;ce()(t,"addon is required");var n=0;return t.ratings&&t.ratings.count>0&&(n=Math.round(e/t.ratings.count*100)),r.createElement("div",{className:Ho()("RatingsByStar-bar","RatingsByStar-barValue","RatingsByStar-barValue--".concat(n,"pct"),{"RatingsByStar-partialBar":n<100})})}},{key:"render",value:function(){var e=this,t=this.props,n=t.addon,o=t.i18n,i=t.location,a=!n,u=function(e,t){switch(e){case"5":return t&&t>0?o.sprintf(o.ngettext("Read the 1 five-star review","Read all %(total)s five-star reviews",t),{total:o.formatNumber(t||0)}):o.gettext("There are no five-star reviews");case"4":return t&&t>0?o.sprintf(o.ngettext("Read the 1 four-star review","Read all %(total)s four-star reviews",t),{total:o.formatNumber(t||0)}):o.gettext("There are no four-star reviews");case"3":return t&&t>0?o.sprintf(o.ngettext("Read the 1 three-star review","Read all %(total)s three-star reviews",t),{total:o.formatNumber(t||0)}):o.gettext("There are no three-star reviews");case"2":return t&&t>0?o.sprintf(o.ngettext("Read the 1 two-star review","Read all %(total)s two-star reviews",t),{total:o.formatNumber(t||0)}):o.gettext("There are no two-star reviews");case"1":return t&&t>0?o.sprintf(o.ngettext("Read the 1 one-star review","Read all %(total)s one-star reviews",t),{total:o.formatNumber(t||0)}):o.gettext("There are no one-star reviews");default:return o.gettext("There are no reviews")}};return r.createElement("div",{className:"RatingsByStar"},r.createElement("div",{className:"RatingsByStar-graph"},["5","4","3","2","1"].map((function(t){var c;n&&n.ratings&&(c=n.ratings.grouped_counts[t]);var s,l=r.createElement("div",{key:t,className:"RatingsByStar-row"},r.createElement("div",{className:"RatingsByStar-star"},r.createElement(Zp,{width:100}),r.createElement(ac,{name:"star-yellow"})),r.createElement("div",{className:"RatingsByStar-barContainer"},r.createElement("div",{className:"RatingsByStar-bar RatingsByStar-barFrame"})),r.createElement("div",{className:"RatingsByStar-count"},r.createElement(Zp,{width:100}))),f=r.createElement(r.Fragment,null,r.createElement("div",{className:"RatingsByStar-star"},o.formatNumber(t),r.createElement(ac,{name:"star-yellow"})),r.createElement("div",{className:"RatingsByStar-barContainer"},r.createElement("div",{className:"RatingsByStar-bar RatingsByStar-barFrame"},void 0!==c?e.renderBarValue(c):null)),r.createElement("div",{className:"RatingsByStar-count"},o.formatNumber(c||0)));return a?l:(s=f,ce()(n,"addon was unexpectedly empty"),r.createElement(wc,{className:"RatingsByStar-row",key:t,title:u(t,c)||"",to:Tp({addonSlug:n.slug,score:t,location:i})},s))}))))}}])&&cd(t.prototype,n),o&&cd(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const hd=(0,Mo.qC)(No,Eu())(dd);function yd(e){return(yd="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function md(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function vd(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function gd(e,t){return(gd=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function bd(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Od(e);if(t){var o=Od(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return wd(this,n)}}function wd(e,t){if(t&&("object"===yd(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Od(e){return(Od=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Ed=function(e){return e?Math.round(10*e)/10:0},_d=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&gd(e,t)}(a,e);var t,n,o,i=bd(a);function a(){return md(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e,t=this.props,n=t.addon,o=t.i18n,i=t.location;n&&(e=n.ratings?n.ratings.average:null);var a,u=n&&n.ratings?n.ratings.count:null,c=n?n.average_daily_users:null,s=Ed(e||null),l="";n?c?(l=o.formatNumber(c),a=o.ngettext("User","Users",c)):a=o.gettext("No Users"):(l=null,a=o.gettext("Users"));var f,p="";n?u?(p=o.formatNumber(u),f=o.ngettext("Review","Reviews",u)):f=o.gettext("No Reviews"):(p=null,f=o.gettext("Reviews"));var d=n&&p?Tp({addonSlug:n.slug,location:i}):null,h=d?r.createElement(wc,{className:"AddonMeta-reviews-content-link",to:d},p):p,y=d?r.createElement(wc,{className:"AddonMeta-reviews-title-link",to:d},f):f;return r.createElement("div",{className:"AddonMeta"},r.createElement("h3",{className:"visually-hidden"},o.gettext("Used by")),r.createElement($p,{className:"AddonMeta-overallRating",metadata:[{content:l,title:a},{content:h,title:y},{content:r.createElement("div",{className:"AddonMeta-rating-content"},r.createElement(id,{rating:e,readOnly:!0,styleSize:"small",yellowStars:!0})),title:r.createElement("div",{className:"AddonMeta-rating-title"},u?o.sprintf(o.ngettext("%(total)s Star","%(total)s Stars",s),{total:o.formatNumber(s)}):o.gettext("Not rated yet"))}]}),r.createElement(hd,{addon:n}))}}])&&vd(t.prototype,n),o&&vd(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const xd=(0,Mo.qC)(No,Eu())(_d);var Sd=function(e){var t=e.children,n=e.className,o=e.term;return r.createElement(r.Fragment,null,r.createElement("dt",{className:"Definition-dt"},o),r.createElement("dd",{className:Ho()("Definition-dd",n)},t))};const jd=function(e){var t=e.className,n=e.children;return r.createElement("dl",{className:Ho()("DefinitionList",t)},n)};function Pd(e){return(Pd="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function kd(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Id(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Td(e,t){return(Td=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Rd(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Ad(e);if(t){var o=Ad(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Cd(this,n)}}function Cd(e,t){if(t&&("object"===Pd(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Ad(e){return(Ad=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Nd=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Td(e,t)}(a,e);var t,n,o,i=Rd(a);function a(){return kd(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.addon,n=e.hasCodeReviewPermission,o=e.hasContentReviewPermission,i=e.hasEditPermission,a=e.hasStaticThemeReviewPermission,u=e.i18n;if(null===t)return null;var c=t.type===D.Yd,s=n&&!c,l=a&&c,f=o&&!c;if(!(i||f||s||l))return null;var p=i?r.createElement("li",null,r.createElement("a",{className:"AddonAdminLinks-edit-link",href:"/developers/addon/".concat(t.slug,"/edit")},u.gettext("Edit add-on"))):null,d=i?r.createElement("li",null,r.createElement("a",{className:"AddonAdminLinks-admin-link",href:"/admin/models/addons/addon/".concat(t.id)},u.gettext("Admin add-on"))):null,h=f?r.createElement("li",null,r.createElement("a",{className:"AddonAdminLinks-contentReview-link",href:"/reviewers/review-content/".concat(t.id)},u.gettext("Content review add-on"))):null,y=c?u.gettext("Review theme"):u.gettext("Review add-on code"),m=s||l?r.createElement("li",null,r.createElement("a",{className:"AddonAdminLinks-".concat(c?"themeReview":"codeReview","-link"),href:"/reviewers/review/".concat(t.id)},y)):null;return r.createElement(jd,{className:"AddonAdminLinks"},r.createElement(Sd,{term:u.gettext("Admin Links")},r.createElement("ul",{className:"AddonAdminLinks-list"},p,d,h,m)))}}])&&Id(t.prototype,n),o&&Id(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const Ld=(0,Mo.qC)((0,g.connect)((function(e){return{hasCodeReviewPermission:et(e,D.QZ),hasContentReviewPermission:et(e,D.Mr),hasEditPermission:et(e,D.mD),hasStaticThemeReviewPermission:et(e,D.lS)}})),Eu())(Nd);function Dd(e){return(Dd="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Md(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Fd(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Ud(e,t){return(Ud=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Bd(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=qd(e);if(t){var o=qd(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Hd(this,n)}}function Hd(e,t){if(t&&("object"===Dd(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function qd(e){return(qd=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var zd=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Ud(e,t)}(a,e);var t,n,o,i=Bd(a);function a(){return Md(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.addon,n=e.i18n,o=e.currentUserID;if(null===t)return null;if(!wn({addon:t,userId:o}))return null;var i=r.createElement("li",null,r.createElement("a",{className:"AddonAuthorLinks-edit-link",href:"/developers/addon/".concat(t.slug,"/edit")},n.gettext("Edit add-on")));return r.createElement(jd,{className:"AddonAuthorLinks"},r.createElement(Sd,{term:n.gettext("Author Links")},r.createElement("ul",{className:"AddonAuthorLinks-list"},i)))}}])&&Fd(t.prototype,n),o&&Fd(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const Gd=(0,Mo.qC)((0,g.connect)((function(e){return{currentUserID:e.users.currentUserID}})),Eu())(zd);var Wd,Vd;function Yd(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function Zd(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function $d(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Zd(Object(n),!0).forEach((function(t){Kd(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Zd(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Kd(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Qd="FETCH_CATEGORIES",Xd="LOAD_CATEGORIES",Jd={categories:null,loading:!1};function eh(e){var t=e.errorHandlerId;return ce()(t,"errorHandlerId is required"),{type:Qd,payload:{errorHandlerId:t}}}function th(e){var t=e.results;return{type:Xd,payload:{results:t}}}function nh(){return t.Z.get("validClientApplications").reduce((function(e,t){return $d($d({},e),{},Kd({},t,D.Tq.reduce((function(e,t){return $d($d({},e),{},Kd({},t,[]))}),{})))}),{})}var rh=function(e){var t=e.addonType,n=e.slug;return"/".concat(xn(t),"/category/").concat(n,"/")},oh=function(e,t){return e&&e[t]?e[t].name:null},ih=function(e){var t=e.tag;return"/tag/".concat(t,"/")};function ah(e){return(ah="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function uh(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function ch(e,t){return(ch=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function sh(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=fh(e);if(t){var o=fh(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return lh(this,n)}}function lh(e,t){if(t&&("object"===ah(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function fh(e){return(fh=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var ph=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&ch(e,t)}(a,e);var t,n,o,i=sh(a);function a(e){var t;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),t=i.call(this,e);var n=e.categoriesLoading,r=e.dispatch,o=e.errorHandler,u=e.relatedCategories;return n||u||r(eh({errorHandlerId:o.id})),t}return t=a,(n=[{key:"listContent",value:function(){var e=this.props,t=e.addon,n=e.currentVersion,o=e.hasStatsPermission,i=e.i18n,a=e.location,u=e.relatedCategories,c=e.userId,s=e.versionInfo;if(!t)return this.renderDefinitions({versionLastUpdated:r.createElement(Zp,{minWidth:20}),versionLicense:r.createElement(Zp,{minWidth:20})});var l=t.homepage&&t.homepage.outgoing;l&&(l=r.createElement("li",null,r.createElement("a",{className:"AddonMoreInfo-homepage-link",href:l,title:t.homepage&&t.homepage.url},i.gettext("Homepage"))));var f=t.support_url&&t.support_url.outgoing;f&&(f=r.createElement("li",null,r.createElement("a",{className:"AddonMoreInfo-support-link",href:f,title:t.support_url&&t.support_url.url},i.gettext("Support site"))));var p=t.support_email;p=p&&/.+@.+/.test(p)?r.createElement("li",null,r.createElement("a",{className:"AddonMoreInfo-support-email",href:"mailto:".concat(p)},i.gettext("Support Email"))):null;var d=null;(wn({addon:t,userId:c})||o)&&(d=r.createElement(wc,{className:"AddonMoreInfo-stats-link",href:Ut("/addon/".concat(t.slug,"/statistics/"),Bt(a))},i.gettext("Visit stats dashboard")));var h=s&&s.created,y=n&&n.license,m=null;if(y){var v=y.isCustom?{to:Ut("/addon/".concat(t.slug,"/license/"),Bt(a))}:{href:y.url,prependClientApp:!1,prependLang:!1},g=y.name||i.gettext("Custom License");m=y.url?r.createElement(wc,Object.assign({className:"AddonMoreInfo-license-link"},v),g):r.createElement("span",{className:"AddonMoreInfo-license-name"},g)}var b=null;return[D.Gz,D.Yd].includes(t.type)&&u&&u.length>0&&(b=u.map((function(e){return r.createElement("li",{key:e.slug},r.createElement(wc,{className:"AddonMoreInfo-related-category-link",to:rh({addonType:e.type,slug:e.slug})},i.gettext(e.name)))}))),this.renderDefinitions({homepage:l,supportUrl:f,supportEmail:p,statsLink:d,version:n?n.version:null,filesize:s&&s.filesize,versionLastUpdated:h?i.sprintf(i.gettext("%(timeFromNow)s (%(date)s)"),{timeFromNow:i.moment(h).fromNow(),date:i.moment(h).format("ll")}):null,versionLicenseLink:m,privacyPolicyLink:t.has_privacy_policy?r.createElement(wc,{className:"AddonMoreInfo-privacy-policy-link",to:Ut("/addon/".concat(t.slug,"/privacy/"),Bt(a))},i.gettext("Read the privacy policy for this add-on")):null,eulaLink:t.has_eula?r.createElement(wc,{className:"AddonMoreInfo-eula-link",to:Ut("/addon/".concat(t.slug,"/eula/"),Bt(a))},i.gettext("Read the license agreement for this add-on")):null,relatedCategories:b,versionHistoryLink:r.createElement("li",null,r.createElement(wc,{className:"AddonMoreInfo-version-history-link",to:Ut("/addon/".concat(t.slug,"/versions/"),Bt(a))},i.gettext("See all versions"))),tagsLinks:t.tags.length>0?t.tags.map((function(e){return r.createElement("li",{key:e},r.createElement(wc,{className:"AddonMoreInfo-tag-link",to:Ut(ih({tag:e}),Bt(a))},e))})):null})}},{key:"renderDefinitions",value:function(e){var t=e.eulaLink,n=void 0===t?null:t,o=e.filesize,i=void 0===o?null:o,a=e.homepage,u=void 0===a?null:a,c=e.privacyPolicyLink,s=void 0===c?null:c,l=e.relatedCategories,f=void 0===l?null:l,p=e.statsLink,d=void 0===p?null:p,h=e.supportEmail,y=void 0===h?null:h,m=e.supportUrl,v=void 0===m?null:m,g=e.tagsLinks,b=void 0===g?null:g,w=e.version,O=void 0===w?null:w,E=e.versionHistoryLink,_=void 0===E?null:E,x=e.versionLastUpdated,S=e.versionLicenseLink,j=void 0===S?null:S,P=this.props,k=P.addon,I=P.i18n;return r.createElement(r.Fragment,null,r.createElement(jd,{className:"AddonMoreInfo-dl"},(u||v||y)&&r.createElement(Sd,{className:"AddonMoreInfo-links",term:I.gettext("Add-on Links")},r.createElement("ul",{className:"AddonMoreInfo-links-contents-list"},u,v,y)),O&&r.createElement(Sd,{className:"AddonMoreInfo-version",term:I.gettext("Version")},O),i&&r.createElement(Sd,{className:"AddonMoreInfo-filesize",term:I.gettext("Size")},i),x&&r.createElement(Sd,{className:"AddonMoreInfo-last-updated",term:I.gettext("Last updated")},x),f&&r.createElement(Sd,{className:"AddonMoreInfo-related-categories",term:I.gettext("Related Categories")},r.createElement("ul",{className:"AddonMoreInfo-related-categories-list"},f)),j&&r.createElement(Sd,{className:"AddonMoreInfo-license",term:I.gettext("License")},j),s&&r.createElement(Sd,{className:"AddonMoreInfo-privacy-policy",term:I.gettext("Privacy Policy")},s),n&&r.createElement(Sd,{className:"AddonMoreInfo-eula",term:I.gettext("End-User License Agreement")},n),_&&r.createElement(Sd,{className:"AddonMoreInfo-version-history",term:I.gettext("Version History")},r.createElement("ul",{className:"AddonMoreInfo-links-contents-list"},_)),d&&r.createElement(Sd,{className:"AddonMoreInfo-stats",term:I.gettext("Usage Statistics")},d),b&&r.createElement(Sd,{className:"AddonMoreInfo-tag-links",term:I.gettext("Tags")},r.createElement("ul",{className:"AddonMoreInfo-tag-links-list"},b))),r.createElement(Ld,{addon:k}),r.createElement(Gd,{addon:k}))}},{key:"render",value:function(){var e=this.props,t=e.errorHandler,n=e.i18n;return r.createElement(js,{className:"AddonMoreInfo",header:n.gettext("More information")},t.renderErrorIfPresent(),this.listContent())}}])&&uh(t.prototype,n),o&&uh(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const dh=(0,Mo.qC)(No,Eu(),(0,g.connect)((function(e,t){var n=t.addon,r=t.i18n,o=e.categories.categories,i=e.api.clientApp,a=null,u=null,c=null;if(n&&n.currentVersionId&&(a=mf({id:n.currentVersionId,state:e.versions})),a&&(c=bf({i18n:r,state:e.versions,versionId:a.id})),n&&n.categories&&n.type&&o&&i){var s=o[i][n.type];u=(n.categories[i]||[]).reduce((function(e,t){return void 0!==s[t]&&e.push(s[t]),e}),[])}return{currentVersion:a,relatedCategories:u,versionInfo:c,categoriesLoading:e.categories.loading,hasStatsPermission:et(e,D.bp),userId:e.users.currentUserID}})),ms({name:"AddonMoreInfo"}))(ph);var hh=a(87003),yh=a.n(hh),mh=a(30513),vh=a(3812);const gh=r.useLayoutEffect;const bh=function(e){var t=(0,r.useRef)(e);return gh((function(){t.current=e})),t};var wh=function(e,t){"function"!=typeof e?e.current=t:e(t)};const Oh=function(e,t){var n=(0,r.useRef)();return(0,r.useCallback)((function(r){e.current=r,n.current&&wh(n.current,null),n.current=t,t&&wh(t,r)}),[t])};var Eh={"min-height":"0","max-height":"none",height:"0",visibility:"hidden",overflow:"hidden",position:"absolute","z-index":"-1000",top:"0",right:"0"},_h=function(e){Object.keys(Eh).forEach((function(t){e.style.setProperty(t,Eh[t],"important")}))},xh=null;var Sh=function(){},jh=["borderBottomWidth","borderLeftWidth","borderRightWidth","borderTopWidth","boxSizing","fontFamily","fontSize","fontStyle","fontWeight","letterSpacing","lineHeight","paddingBottom","paddingLeft","paddingRight","paddingTop","tabSize","textIndent","textRendering","textTransform","width","wordBreak"],Ph=!!document.documentElement.currentStyle,kh=function(e,t){var n=e.cacheMeasurements,o=e.maxRows,i=e.minRows,a=e.onChange,u=void 0===a?Sh:a,c=e.onHeightChange,s=void 0===c?Sh:c,l=(0,vh.Z)(e,["cacheMeasurements","maxRows","minRows","onChange","onHeightChange"]);var f,p=void 0!==l.value,d=(0,r.useRef)(null),h=Oh(d,t),y=(0,r.useRef)(0),m=(0,r.useRef)(),v=function(){var e=d.current,t=n&&m.current?m.current:function(e){var t=window.getComputedStyle(e);if(null===t)return null;var n,r=(n=t,jh.reduce((function(e,t){return e[t]=n[t],e}),{})),o=r.boxSizing;return""===o?null:(Ph&&"border-box"===o&&(r.width=parseFloat(r.width)+parseFloat(r.borderRightWidth)+parseFloat(r.borderLeftWidth)+parseFloat(r.paddingRight)+parseFloat(r.paddingLeft)+"px"),{sizingStyle:r,paddingSize:parseFloat(r.paddingBottom)+parseFloat(r.paddingTop),borderSize:parseFloat(r.borderBottomWidth)+parseFloat(r.borderTopWidth)})}(e);if(t){m.current=t;var r=function(e,t,n,r){void 0===n&&(n=1),void 0===r&&(r=1/0),xh||((xh=document.createElement("textarea")).setAttribute("tabindex","-1"),xh.setAttribute("aria-hidden","true"),_h(xh)),null===xh.parentNode&&document.body.appendChild(xh);var o=e.paddingSize,i=e.borderSize,a=e.sizingStyle,u=a.boxSizing;Object.keys(a).forEach((function(e){var t=e;xh.style[t]=a[t]})),_h(xh),xh.value=t;var c=function(e,t){var n=e.scrollHeight;return"border-box"===t.sizingStyle.boxSizing?n+t.borderSize:n-t.paddingSize}(xh,e);xh.value="x";var s=xh.scrollHeight-o,l=s*n;"border-box"===u&&(l=l+o+i),c=Math.max(l,c);var f=s*r;return"border-box"===u&&(f=f+o+i),[c=Math.min(f,c),s]}(t,e.value||e.placeholder||"x",i,o),a=r[0],u=r[1];y.current!==a&&(y.current=a,e.style.setProperty("height",a+"px","important"),s(a,{rowHeight:u}))}};return(0,r.useLayoutEffect)(v),f=bh(v),(0,r.useLayoutEffect)((function(){var e=function(e){f.current(e)};return window.addEventListener("resize",e),function(){window.removeEventListener("resize",e)}}),[]),(0,r.createElement)("textarea",(0,mh.Z)({},l,{onChange:function(e){p||v(),u(e)},ref:h}))};const Ih=(0,r.forwardRef)(kh);var Th=a(86432),Rh=a.n(Th),Ch="src/amo/localState.js";function Ah(e){return(Ah="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Nh(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Lh(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Dh(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.localForage,n=void 0===t?Rh():t;n.config({name:"addons-frontend",version:"1.0",storeName:Tn(Ch)})}var Mh,Fh=function(){function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=n.localForage,o=void 0===r?Rh():r;Nh(this,e),this.id=t,this.localForage=o,Dh({localForage:o})}var t,n,r;return t=e,(n=[{key:"load",value:function(){var e=this;return this.localForage.getItem(this.id).then((function(e){return e||null})).catch((function(t){throw L.Z.debug('Error with localForage.getItem("'.concat(e.id,'"): ').concat(t)),t}))}},{key:"clear",value:function(){var e=this;return this.localForage.removeItem(this.id).catch((function(t){throw L.Z.debug('Error with localForage.removeItem("'.concat(e.id,'"): ').concat(t)),t}))}},{key:"save",value:function(e){var t=this;return"object"!==Ah(e)||null===e?Promise.reject(new Error("The argument to save() must be an object")):this.localForage.setItem(this.id,e).catch((function(e){throw L.Z.debug('Error with localForage.setItem("'.concat(t.id,'"): ').concat(e)),e}))}}])&&Lh(t.prototype,n),r&&Lh(t,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();function Uh(e){return(Uh="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Bh(){Bh=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==Uh(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}function Hh(e,t,n,r,o,i,a){try{var u=e[i](a),c=u.value}catch(e){return void n(e)}u.done?t(c):Promise.resolve(c).then(r,o)}function qh(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function zh(e,t){return(zh=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Gh(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Vh(e);if(t){var o=Vh(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Wh(this,n)}}function Wh(e,t){if(t&&("object"===Uh(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Vh(e){return(Vh=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Yh=function(t){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&zh(e,t)}(s,t);var n,o,i,a,u,c=Gh(s);function s(e){var t;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,s),(t=c.call(this,e)).onDelete=function(e){e.preventDefault(),ce()(t.props.onDelete,"onDelete() is not defined"),t.props.onDelete(),t.localState.clear()},t.onDismiss=function(e){var n=t.props.onDismiss;e.preventDefault(),ce()(n,"onDismiss() is required"),n(),t.setState({text:""}),t.localState.clear()},t.onSubmit=function(e){e.preventDefault(),t.props.onSubmit({event:e,text:t.state.text}),t.localState.clear()},t.persistState=t.props._debounce((function(e){t.localState.save(e)}),800,{trailing:!0}),t.onTextChange=function(e){e.preventDefault();var n={text:e.target.value};t.setState(n),t.persistState(n)};var n=e.text||"";return t.state={initialText:n,text:n},t.localState=t.createLocalState(),t}return n=s,(o=[{key:"componentDidMount",value:function(){this.checkForStoredState(),this.textarea&&this.textarea.focus()}},{key:"componentDidUpdate",value:function(e){this.props.id!==e.id&&(this.localState=this.createLocalState(),this.checkForStoredState())}},{key:"createLocalState",value:function(){var e=this.props;return(0,e._createLocalState)(e.id)}},{key:"checkForStoredState",value:(a=Bh().mark((function t(){var n;return Bh().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.localState.load();case 2:(n=t.sent)&&(L.Z.debug((0,e.f9)(Mh||(r=["Initializing DismissibleTextForm state from LocalState\n ",""],(o=void 0)||(o=r.slice(0)),Mh=Object.freeze(Object.defineProperties(r,{raw:{value:Object.freeze(o)}}))),this.localState.id),n),this.setState(n));case 4:case"end":return t.stop()}var r,o}),t,this)})),u=function(){var e=this,t=arguments;return new Promise((function(n,r){var o=a.apply(e,t);function i(e){Hh(o,n,r,i,u,"next",e)}function u(e){Hh(o,n,r,i,u,"throw",e)}i(void 0)}))},function(){return u.apply(this,arguments)})},{key:"render",value:function(){var e=this,t=this.props,n=t.className,o=t.dismissButtonText,i=t.formFooter,a=t.i18n,u=t.isSubmitting,c=t.microButtons,s=t.onDelete,l=t.onDismiss,f=t.placeholder,p=t.puffyButtons,d=t.reverseButtonOrder,h=t.submitButtonClassName,y=t.submitButtonText,m=t.submitButtonInProgressText,v=u||!this.state.text.trim()||this.state.initialText===this.state.text.trim(),g=!this.state.text.trim(),b={placeholder:f||a.gettext("Enter text."),submitButtonText:y||a.gettext("Submit"),submitButtonInProgressText:m||a.gettext("Submitting")};ce()(!(c&&p),"microButtons and puffyButtons cannot both be true; choose one");var w=l?r.createElement(Dc,{buttonType:"neutral",className:"DismissibleTextForm-dismiss",disabled:u,key:"cancel",micro:c,onClick:this.onDismiss,puffy:p,type:"cancel"},o||a.gettext("Cancel")):null,O=[s?r.createElement(Dc,{buttonType:"alert",className:"DismissibleTextForm-delete",disabled:g,key:"delete",onClick:this.onDelete,micro:c,puffy:p,type:"button"},a.gettext("Delete")):null,r.createElement(Dc,{buttonType:"action",className:Ho()("DismissibleTextForm-submit",h),disabled:v,key:"submit",onClick:this.onSubmit,micro:c,puffy:p,type:"submit"},u?b.submitButtonInProgressText:b.submitButtonText)];d&&O.reverse();var E=[w,r.createElement("span",{className:"DismissibleTextForm-delete-submit-buttons",key:"actionButtons"},O)];return d&&E.reverse(),r.createElement("form",{className:Ho()("DismissibleTextForm-form",n)},r.createElement(Ih,{disabled:u,className:"DismissibleTextForm-textarea",ref:function(t){e.textarea=t},onChange:this.onTextChange,placeholder:b.placeholder,value:this.state.text}),i&&r.createElement("div",{className:"DismissibleTextForm-formFooter"},i),r.createElement("div",{className:"DismissibleTextForm-buttons"},E))}}])&&qh(n.prototype,o),i&&qh(n,i),Object.defineProperty(n,"prototype",{writable:!1}),s}(r.Component);Yh.defaultProps={_createLocalState:function(e,t){return new Fh(e,t)},_debounce:yh(),isSubmitting:!1,microButtons:!1,puffyButtons:!1,reverseButtonOrder:!1};const Zh=(0,Mo.qC)(Eu())(Yh);var $h="src/amo/components/EditableCollectionAddon/index.js";function Kh(e){return(Kh="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Qh(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Xh(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Jh(e,t){return(Jh=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function ey(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=ny(e);if(t){var o=ny(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return ty(this,n)}}function ty(e,t){if(t&&("object"===Kh(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function ny(e){return(ny=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var ry=function(e){var t=e.addon;return"editable-collection-addon-".concat(t.id)},oy=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Jh(e,t)}(a,e);var t,n,o,i=ey(a);function a(){var e;Qh(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).onEditNote=function(t){t.preventDefault(),e.props.setUIState({editingNote:!0})},e.onDeleteNote=function(){var t=e.props,n=t.addon.id;(0,t.deleteNote)(n,t.errorHandler)},e.onDismissNoteForm=function(){e.props.setUIState({editingNote:!1})},e.onRemoveAddon=function(t){var n=e.props,r=n.addon.id,o=n.removeAddon;t.preventDefault(),t.stopPropagation(),ce()(r,"addonId is required"),o(r)},e.onSaveNote=function(t){var n=e.props,r=n.addon.id,o=n.errorHandler,i=n.saveNote;ce()(r,"addonId is required"),i(r,o,t.text)},e}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.addon,n=e.errorHandler,o=e.i18n,i=t.notes||this.props.uiState.editingNote,a=Bs(t);return r.createElement("li",{className:Ho()("EditableCollectionAddon","EditableCollectionAddon--".concat(t.type))},r.createElement("div",{className:"EditableCollectionAddon-details"},r.createElement("img",{className:"EditableCollectionAddon-icon",src:a,alt:t.name}),r.createElement("h2",{className:"EditableCollectionAddon-name"},t.name)),r.createElement("div",{className:"EditableCollectionAddon-buttons"},r.createElement("div",{className:Ho()("EditableCollectionAddon-leaveNote",{"EditableCollectionAddon-leaveNote--hidden":i})},r.createElement(Dc,{buttonType:"action",className:"EditableCollectionAddon-leaveNote-button",micro:!0,onClick:this.onEditNote},o.gettext("Leave a note"))),r.createElement(Dc,{buttonType:"alert",className:"EditableCollectionAddon-remove-button",micro:!0,name:t.id,onClick:this.onRemoveAddon},o.gettext("Remove"))),i&&r.createElement("div",{className:"EditableCollectionAddon-notes"},r.createElement("h4",{className:"EditableCollectionAddon-notes-header"},r.createElement(ac,{name:"comments-blue"}),this.props.uiState.editingNote?o.gettext("Leave a note"):o.gettext("Collector's note")),this.props.uiState.editingNote?r.createElement(r.Fragment,null,n.renderErrorIfPresent(),r.createElement(Zh,{className:"EditableCollectionAddon-notes-form",id:"".concat(Tn($h),"-").concat(ry(this.props)),microButtons:!0,onDelete:t.notes?this.onDeleteNote:null,onDismiss:this.onDismissNoteForm,onSubmit:this.onSaveNote,placeholder:o.gettext("Add a comment about this add-on."),submitButtonText:o.gettext("Save"),text:vn(t.notes||"").__html})):r.createElement("div",{className:"EditableCollectionAddon-notes-read-only"},r.createElement("span",{className:"EditableCollectionAddon-notes-content",dangerouslySetInnerHTML:vn(gn(t.notes||""),["br","a"])}),r.createElement("div",{className:"EditableCollectionAddon-notes-buttons"},r.createElement(Dc,{buttonType:"action",className:"EditableCollectionAddon-notes-edit-button",micro:!0,onClick:this.onEditNote},o.gettext("Edit"))))))}}])&&Xh(t.prototype,n),o&&Xh(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const iy=(0,Mo.qC)(Eu(),gs({fileName:$h,extractId:ry}),Bu({fileName:$h,extractId:ry,initialState:{editingNote:!1},resetOnUnmount:!0}))(oy);function ay(e){return(ay="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function uy(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function cy(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function sy(e,t){return(sy=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function ly(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=py(e);if(t){var o=py(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return fy(this,n)}}function fy(e,t){if(t&&("object"===ay(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function py(e){return(py=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var dy=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&sy(e,t)}(a,e);var t,n,o,i=ly(a);function a(){var e;uy(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).onClickAddon=function(t){var n=e.props,r=n.addon,o=n.onClick;t.stopPropagation(),r&&o&&o(r)},e.onClickResult=function(){var t=e.props,n=t.addon,r=t.addonInstallSource,o=t.clientApp,i=t.history,a=t.lang,u=t.onClick;n&&(i.push("/".concat(a,"/").concat(o).concat(e.getAddonLink(n,r))),u&&u(n))},e}return t=a,(n=[{key:"getAddonLink",value:function(e,t){var n=ln(e.slug);return t&&(n=Ut(n,{utm_source:D.Pr,utm_medium:D.AT,utm_content:t})),n}},{key:"renderResult",value:function(){var e=this.props,t=e._getPromotedCategory,n=e.addon,o=e.addonInstallSource,i=e.clientApp,a=e.i18n,u=e.onImpression,c=e.showFullSizePreview,s=e.showMetadata,l=e.showPromotedBadge,f=e.showSummary,p=e.useThemePlaceholder;n&&u&&u(n);var d=n?n.average_daily_users:null,h=Bs(n),y=r.createElement(Zp,null);n&&(y=r.createElement(wc,{className:"SearchResult-link",to:this.getAddonLink(n,o),onClick:this.onClickAddon},n.name)),n&&n.type===D.Yd&&(h=qs(n,{full:c}));var m=Ho()("SearchResult-icon-wrapper",{"SearchResult-icon-wrapper--no-theme-image":n?null===h:p}),v=null,g=n&&n.authors&&n.authors.length?n.authors:null;if(!n||g){var b=g&&g[0];v=r.createElement("h3",{className:"SearchResult-author SearchResult--meta-section"},b?b.name:r.createElement(Zp,null))}var w=null;if(f){var O={};n?O.dangerouslySetInnerHTML=vn(n.summary):O.children=r.createElement(Zp,null),w=r.createElement("p",Object.assign({className:"SearchResult-summary"},O))}var E=t({addon:n,clientApp:i,forBadging:!0});return r.createElement("div",{className:"SearchResult-wrapper"},r.createElement("div",{className:"SearchResult-result"},r.createElement("div",{className:m},n&&h||!n&&!p?r.createElement("img",{className:Ho()("SearchResult-icon",{"SearchResult-icon--loading":!n}),src:h,alt:n?"".concat(n.name):""}):r.createElement("p",{className:"SearchResult-notheme"},a.gettext("No theme preview available"))),r.createElement("div",{className:"SearchResult-contents"},r.createElement("h2",{className:"SearchResult-name"},y,l&&n&&E?r.createElement($s,{category:E,onClick:function(e){return e.stopPropagation()},size:"small"}):null),w,s?r.createElement("div",{className:"SearchResult-metadata"},r.createElement("div",{className:"SearchResult-rating"},r.createElement(id,{rating:n&&n.ratings?n.ratings.average:0,readOnly:!0,styleSize:"small"})),v):null,n&&n.notes&&r.createElement("div",{className:"SearchResult-note"},r.createElement("h4",{className:"SearchResult-note-header"},r.createElement(ac,{name:"comments-blue"}),a.gettext("Add-on note")),r.createElement("p",{className:"SearchResult-note-content",dangerouslySetInnerHTML:vn(gn(n.notes),["br"])}))),r.createElement("h3",{className:"SearchResult-users SearchResult--meta-section"},r.createElement(ac,{className:"SearchResult-users-icon",name:"user-fill"}),r.createElement("span",{className:"SearchResult-users-text"},null!=d?a.sprintf(a.ngettext("%(total)s user","%(total)s users",d),{total:a.formatNumber(d)}):r.createElement(Zp,{width:80})))))}},{key:"render",value:function(){var e=this.props,t=e.addon,n=e.useThemePlaceholder,o=this.renderResult(),i=Ho()("SearchResult",{"SearchResult--theme":t?D.Yd===t.type:n});return r.createElement("li",{onClick:this.onClickResult,className:i},o)}}])&&cy(t.prototype,n),o&&cy(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);dy.defaultProps={_getPromotedCategory:Gs,showFullSizePreview:!1,showMetadata:!0,showPromotedBadge:!0,showSummary:!0,useThemePlaceholder:!1};const hy=(0,Mo.qC)(No,(0,g.connect)((function(e){return{clientApp:e.api.clientApp,lang:e.api.lang}})),Eu())(dy);function yy(e){return(yy="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var my=["children","className"];function vy(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function gy(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function by(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function wy(e,t){return(wy=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Oy(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=_y(e);if(t){var o=_y(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Ey(this,n)}}function Ey(e,t){if(t&&("object"===yy(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function _y(e){return(_y=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var xy=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&wy(e,t)}(a,e);var t,n,o,i=Oy(a);function a(){return gy(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.children,n=e.className,o=vy(e,my);return r.createElement(js,Object.assign({},o,{className:Ho()("CardList",n),photonStyle:!0}),t)}}])&&by(t.prototype,n),o&&by(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);function Sy(e){return(Sy="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}xy.propTypes={children:w().node,className:w().string};var jy=["addonInstallSource","addons","children","className","deleteNote","editing","loading","removeAddon","saveNote","onAddonClick","onAddonImpression","placeholderCount","useThemePlaceholder","showFullSizePreview","showMetadata","showPromotedBadge","showSummary","type"];function Py(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function ky(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Iy(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Ty(e,t){return(Ty=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Ry(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Ay(e);if(t){var o=Ay(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Cy(this,n)}}function Cy(e,t){if(t&&("object"===Sy(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Ay(e){return(Ay=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Ny=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Ty(e,t)}(a,e);var t,n,o,i=Ry(a);function a(){return ky(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.addonInstallSource,n=e.addons,o=e.children,i=e.className,a=e.deleteNote,u=e.editing,c=e.loading,s=e.removeAddon,l=e.saveNote,f=e.onAddonClick,p=e.onAddonImpression,d=e.placeholderCount,h=e.useThemePlaceholder,y=e.showFullSizePreview,m=e.showMetadata,v=e.showPromotedBadge,g=e.showSummary,b=e.type,w=Py(e,jy),O=[];if(n&&n.length)n.forEach((function(e){u?(ce()(a,"deleteNote() is undefined"),ce()(s,"removeAddon() is undefined"),ce()(l,"saveNote() is undefined"),O.push(r.createElement(iy,{addon:e,deleteNote:a,key:e.slug,removeAddon:s,saveNote:l}))):O.push(r.createElement(hy,{addonInstallSource:t,addon:e,key:"".concat(e.slug,"-").concat(e.type),onClick:f,onImpression:p,showFullSizePreview:y,showMetadata:m,showPromotedBadge:v,showSummary:D.Yd!==e.type&&g}))}));else if(c)for(var E=0;E<d;E++)O.push(r.createElement(hy,{key:E,useThemePlaceholder:h}));var _=Ho()("AddonsCard",i,b&&"AddonsCard--".concat(b));return r.createElement(xy,Object.assign({},w,{className:_}),o,O.length?r.createElement("ul",{className:"AddonsCard-list"},O):null)}}])&&Iy(t.prototype,n),o&&Iy(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);function Ly(e){return(Ly="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Dy(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function My(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Fy(e,t){return(Fy=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Uy(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Hy(e);if(t){var o=Hy(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return By(this,n)}}function By(e,t){if(t&&("object"===Ly(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Hy(e){return(Hy=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}Ny.defaultProps={editing:!1,isHomepageShelf:!1,loading:!1,placeholderCount:25,showPromotedBadge:!0,useThemePlaceholder:!1};var qy=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Fy(e,t)}(a,e);var t,n,o,i=Uy(a);function a(){return Dy(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"componentDidMount",value:function(){var e=this.props,t=e.addon,n=e.recommendations,r=e.tracking;r.setDimension({dimension:"dimension4",value:"TAAR_COHORT_INCLUDED"}),r.setDimension({dimension:"dimension5",value:"TAAR-LITE-AB"}),t&&!n&&this.dispatchFetchRecommendations(t.guid)}},{key:"componentDidUpdate",value:function(e){var t=e.addon,n=e.recommendations,r=this.props,o=r.addon,i=r.recommendations,a=r.tracking,u=r.errorHandler;if(o&&(!t||t&&t.guid!==o.guid)&&this.dispatchFetchRecommendations(o.guid),i&&n!==i){var c=i.fallbackReason,s=i.loading,l=i.outcome;if(s||u.hasError())return;ce()(o,"newAddon is required"),ce()(l,"outcome is required");var f=l;c&&(f="".concat(f,"-").concat(c)),a.sendEvent({action:f,category:"AMO Addon / Recommendations Shown",label:o.guid})}}},{key:"dispatchFetchRecommendations",value:function(e){this.props.dispatch(function(e){var t=e.errorHandlerId,n=e.guid,r=e.recommended,o=void 0===r||r;return ce()(t,"errorHandlerId is required"),ce()(n,"guid is required"),{type:zl,payload:{errorHandlerId:t,guid:n,recommended:o}}}({errorHandlerId:this.props.errorHandler.id,guid:e}))}},{key:"render",value:function(){var e=this.props,t=e.className,n=e.i18n,o=e.recommendations,i=e.errorHandler;if(!o)return L.Z.debug("No recommendations, hiding the AddonRecommendations component."),null;if(i.hasError())return L.Z.debug("Error in fetching recommendations, hiding the AddonRecommendations component."),null;var a=o.addons,u=o.loading,c=o.outcome,s=Ho()("AddonRecommendations",t),l=r.createElement(Zp,{width:100});return u||(l="recommended"===c?n.gettext("Other users with this extension also installed"):n.gettext("Other popular extensions")),r.createElement(Ny,{addonInstallSource:c||"",addons:a,className:s,header:l,loading:u,placeholderCount:4,showMetadata:!0,showSummary:!1,type:"horizontal"})}}])&&My(t.prototype,n),o&&My(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);qy.defaultProps={tracking:pr};const zy=(0,Mo.qC)((0,g.connect)((function(e,t){var n=t.addon;return{recommendations:n?function(e){var t=e.guid,n=e.state;return ce()(t,"guid is required"),ce()(n,"state is required"),n.byGuid[t]||null}({guid:n.guid,state:e.recommendations}):null}})),Eu(),ms({id:"AddonRecommendations"}))(qy);const Gy=(0,Mo.qC)(Eu(),(0,g.connect)((function(e){return{isRTL:J(e.api.lang)}})))((function(e){var t=e.addon,n=e.as,o=void 0===n?"h1":n,i=e.i18n,a=e.isRTL,u=e.linkToAddon,c=void 0!==u&&u,s=e.queryParamsForAttribution,l=void 0===s?{}:s,f=[];if(t&&t.authors){var p=t.authors,d=i.gettext(","),h=a?" ".concat(d):"".concat(d," ");p.forEach((function(e,t){f.push(e.url?r.createElement(wc,{key:e.id,to:"/user/".concat(e.id,"/")},e.name):e.name),t+1<p.length&&f.push(h)}))}return r.createElement(o,{className:"AddonTitle"},t?r.createElement(r.Fragment,null,c?r.createElement(wc,{to:Ut(ln(t.slug),l)},t.name):t.name,f.length>0&&r.createElement("span",{className:"AddonTitle-author"}," ",a?r.createElement(r.Fragment,null,f," ",i.gettext("by")):r.createElement(r.Fragment,null,i.gettext("by")," ",f))):r.createElement(Zp,{width:80}))}));a(15661);var Wy=a(12569),Vy=a.n(Wy);function Yy(e){return(Yy="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Zy(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function $y(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Zy(Object(n),!0).forEach((function(t){Ky(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Zy(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Ky(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Qy(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Xy(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Jy(e,t){return(Jy=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function em(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=nm(e);if(t){var o=nm(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return tm(this,n)}}function tm(e,t){if(t&&("object"===Yy(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function nm(e){return(nm=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var rm=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Jy(e,t)}(a,e);var t,n,o,i=em(a);function a(){return Qy(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.className,n=e.currentPage,o=e.page,i=e.pageCount,a=e.pageParam,u=e.pathname,c=e.queryParams,s=e.text;ce()(void 0!==n,"The currentPage property cannot be undefined"),ce()(void 0!==u,"The pathname property cannot be undefined"),ce()(void 0!==o,"The page property cannot be undefined"),ce()(void 0!==i,"The pageCount property cannot be undefined");var l=null;if(o+1===n?l="prev":o-1===n&&(l="next"),n===o||o<1||o>i){var f=Ho()("Paginate-item",t,{"Paginate-item--current-page":n===o});return r.createElement(Dc,{buttonType:"cancel",className:f,disabled:!0,key:o},s||o)}var p=ae.parse(u,!0);return r.createElement(Dc,{buttonType:"cancel",className:Ho()("Paginate-item",t),rel:l,to:{pathname:p.pathname,query:$y($y($y({},p.query),c),{},Ky({},a,o))}},s||o)}}])&&Xy(t.prototype,n),o&&Xy(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);function om(e){return(om="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function im(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function am(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function um(e,t){return(um=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function cm(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=lm(e);if(t){var o=lm(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return sm(this,n)}}function sm(e,t){if(t&&("object"===om(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function lm(e){return(lm=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function fm(e){for(var t=e.start,n=e.end,r=[],o=t;o<=n;o++)r.push(o);return r}rm.propTypes={className:w().string,currentPage:w().number.isRequired,page:w().number.isRequired,pageCount:w().number.isRequired,pageParam:w().string,pathname:w().string.isRequired,queryParams:w().object,text:w().string},rm.defaultProps={pageParam:"page"};var pm=function(e){var t=e.count,n=e.perPage;return ce()("number"==typeof n,"perPage is required"),ce()(n>0,"A perPage value of ".concat(n," is not allowed")),Math.ceil(t/n)},dm=function(e){var t=parseInt(e,10);return Number.isNaN(t)||t<1?1:t},hm=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&um(e,t)}(a,e);var t,n,o,i=cm(a);function a(){return im(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.LinkComponent,n=e.count,o=e.currentPage,i=e.i18n,a=e.pageParam,u=e.pathname,c=e.perPage,s=e.queryParams,l=e.showPages,f=pm({count:n,perPage:c}),p=dm(o);if(ce()(void 0!==n,"The count property cannot be undefined"),ce()(void 0!==u,"The pathname property cannot be undefined"),1===f)return null;var d={LinkComponent:t,currentPage:p,pageCount:f,pathname:u,queryParams:s};return r.createElement("div",{className:"Paginate"},r.createElement("div",{className:"Paginate-links"},r.createElement(rm,Object.assign({},d,{className:"Paginate-item--previous",page:p-1,pageParam:a,text:i.gettext("Previous")})),function(e){var t=e.currentPage,n=e.pageCount,r=e.showPages;if(!r)return[];var o=dm(t),i=Math.floor(r/2),a=Math.max(1,o-i),u=Math.min(n,o+i);return fm(n<=r?{start:1,end:n}:u-o<i?{start:u-r+1,end:u}:o-a<i?{start:a,end:a+r-1}:{start:a,end:u})}({currentPage:o,pageCount:f,showPages:l}).map((function(e){return r.createElement(rm,Object.assign({},d,{key:"page-".concat(e),page:e,pageParam:a}))})),r.createElement(rm,Object.assign({},d,{className:"Paginate-item--next",page:p+1,pageParam:a,text:i.gettext("Next")}))),r.createElement("div",{className:"Paginate-page-number"},i.sprintf(i.gettext("Page %(thisPage)s of %(totalPages)s"),{thisPage:p,totalPages:pm({count:n,perPage:c})})))}}])&&am(t.prototype,n),o&&am(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);hm.defaultProps={pageParam:"page",showPages:7};const ym=(0,Mo.qC)(Eu())(hm);function mm(e){return(mm="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function vm(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function gm(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function bm(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function wm(e,t){return(wm=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Om(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=_m(e);if(t){var o=_m(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Em(this,n)}}function Em(e,t){if(t&&("object"===mm(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function _m(e){return(_m=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var xm=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&wm(e,t)}(a,e);var t,n,o,i=Om(a);function a(e){var t;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),t=i.call(this,e);var n=e.addonType,r=e.authorIds,o=e.forAddonSlug,u=e.location,c=e.pageParam,s=e.paginate;return r?(t.dispatchFetchAddonsByAuthors({addonType:n,authorIds:r,forAddonSlug:o,page:t.getCurrentPage({location:u,paginate:s,pageParam:c})}),t):Em(t)}return t=a,(n=[{key:"componentDidUpdate",value:function(e){var t=e.addonType,n=e.authorIds,r=e.forAddonSlug,o=e.location,i=this.props,a=i.addonType,u=i.authorIds,c=i.forAddonSlug,s=i.location,l=i.pageParam,f=i.paginate;if(u){var p=!!f&&o.query[l]!==s.query[l];t===a&&r===c&&Vy()(n,u)&&!p||this.dispatchFetchAddonsByAuthors({addonType:a,authorIds:u,forAddonSlug:c,page:this.getCurrentPage({location:s,paginate:f,pageParam:l})})}}},{key:"getCurrentPage",value:function(e){var t=e.location,n=e.paginate,r=e.pageParam;if(n){var o=parseInt(t.query[r],10);return Number.isNaN(o)||o<1?"1":o.toString()}}},{key:"dispatchFetchAddonsByAuthors",value:function(e){var t=e.addonType,n=e.authorIds,r=e.forAddonSlug,o=e.page,i=this.props,a=i.errorHandler,u=i.numberOfAddons,c={page:void 0,sort:void 0};i.paginate&&(ce()(o,"page is required when paginate is `true`."),c.page=o,c.sort=D.Nu),ce()(a,"errorHandler is required"),this.props.dispatch(function(e){var t=e.addonType,n=e.authorIds,r=e.errorHandlerId,o=e.forAddonSlug,i=e.page,a=e.pageSize,u=e.sort;return ce()(r,"An errorHandlerId is required"),ce()(n,"authorIds are required."),ce()(Array.isArray(n),"The authorIds parameter must be an array."),ce()(a,"pageSize is required."),{type:dl,payload:{addonType:t,authorIds:n,errorHandlerId:r,forAddonSlug:o,page:i,pageSize:a,sort:u}}}(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?vm(Object(n),!0).forEach((function(t){gm(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):vm(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({addonType:t,authorIds:n,errorHandlerId:a.id,forAddonSlug:r,page:o,pageSize:String(u)},c)))}},{key:"render",value:function(){var e=this.props,t=e.addonType,n=e.addons,o=e.authorDisplayName,i=e.authorIds,a=e.className,u=e.errorHandler,c=e.i18n,s=e.loading,l=e.numberOfAddons,f=e.paginate,p=e.showMore,d=e.showSummary,h=e.type;if(ce()(u,"errorHandler is required"),u.hasError())return u.renderError();var y=!0===s||null===s;if(!(y||n&&n.length))return null;var m=r.createElement(Zp,null);if(i)switch(t){case D.jV:m=c.ngettext(c.sprintf(c.gettext("More dictionaries by %(author)s"),{author:o}),c.gettext("More dictionaries by these translators"),i.length);break;case D.Gz:m=p?c.ngettext(c.sprintf(c.gettext("More extensions by %(author)s"),{author:o}),c.gettext("More extensions by these developers"),i.length):c.ngettext(c.sprintf(c.gettext("Extensions by %(author)s"),{author:o}),c.gettext("Extensions by these developers"),i.length);break;case D.d$:m=c.ngettext(c.sprintf(c.gettext("More language packs by %(author)s"),{author:o}),c.gettext("More language packs by these translators"),i.length);break;case D.Yd:m=p?c.ngettext(c.sprintf(c.gettext("More themes by %(author)s"),{author:o}),c.gettext("More themes by these artists"),i.length):c.ngettext(c.sprintf(c.gettext("Themes by %(author)s"),{author:o}),c.gettext("Themes by these artists"),i.length);break;default:m=c.ngettext(c.sprintf(c.gettext("More add-ons by %(author)s"),{author:o}),c.gettext("More add-ons by these developers"),i.length)}var v=Ho()("AddonsByAuthorsCard",a,{"AddonsByAuthorsCard--theme":D.Yd===t}),g=null;if(f){var b=this.props,w=b.count,O=b.location,E=b.pageParam,_=b.pathname;ce()(_,"pathname is required when paginate is `true`.");var x=this.getCurrentPage({location:O,paginate:f,pageParam:E});g=w&&w>l?r.createElement(ym,{LinkComponent:wc,count:w,currentPage:x,pageParam:E,pathname:_,perPage:l,queryParams:O.query}):null}return r.createElement(Ny,{addons:n,className:v,footer:g,header:m,loading:y,placeholderCount:l,showMetadata:!0,showSummary:d,type:h})}}])&&bm(t.prototype,n),o&&bm(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);xm.defaultProps={pageParam:"page",paginate:!1,showMore:!0,showSummary:!1,type:"horizontal"};const Sm=(0,Mo.qC)(No,(0,g.connect)((function(e,t){var n=t.addonType,r=t.authorIds,o=t.forAddonSlug,i=t.numberOfAddons,a=null,u=null;return r&&(a=(a=vl(e.addonsByAuthors,r,n,o))?a.slice(0,i):a,u=function(e,t,n){var r=ml(t,n);return void 0===e.loadingFor[r]?null:e.loadingFor[r]}(e.addonsByAuthors,r,n)),{addons:a,count:r?function(e,t,n){return e.countFor[ml(t,n)]||null}(e.addonsByAuthors,r,n):0,loading:u}})),Eu(),ms({extractId:function(e){return e.addonType||""},name:"AddonsByAuthorsCard"}))(xm);const jm=(0,Mo.qC)(Eu())((function(e){var t=e._tracking,n=void 0===t?pr:t,o=e.addon,i=e.i18n;if(!o||o&&!o.contributions_url)return null;var a,u,c=o.authors?o.authors.length:1;switch(o.type){case D.Gz:a=i.ngettext(i.gettext("Support this developer"),i.gettext("Support these developers"),c),u=i.ngettext(i.gettext("The developer of this extension asks that you help support\n its continued development by making a small contribution."),i.gettext("The developers of this extension ask that you help\n support its continued development by making a small contribution."),c);break;case D.Yd:a=i.ngettext(i.gettext("Support this artist"),i.gettext("Support these artists"),c),u=i.ngettext(i.gettext("The artist of this theme asks that you help support\n its continued creation by making a small contribution."),i.gettext("The artists of this theme ask that you help support\n its continued creation by making a small contribution."),c);break;default:a=i.ngettext(i.gettext("Support this author"),i.gettext("Support these authors"),c),u=i.ngettext(i.gettext("The author of this add-on asks that you help support\n its continued work by making a small contribution."),i.gettext("The authors of this add-on ask that you help support\n its continued work by making a small contribution."),c)}return r.createElement(js,{className:"ContributeCard",header:a},r.createElement("p",{className:"ContributeCard-content"},u),r.createElement("p",null,r.createElement(Dc,{buttonType:"action",className:"ContributeCard-button",href:o.contributions_url&&o.contributions_url.outgoing||"",title:o.contributions_url&&o.contributions_url.url,onClick:function(){n.sendEvent({action:"contribute-click",category:"AMO Addon / Contribute Button Clicks",label:o.guid})},target:"_blank",puffy:!0},r.createElement(ac,{name:"heart"}),i.gettext("Contribute now"))))}));var Pm=a(5573),km=a(85854);a(19115);const Im=r.createContext(null);function Tm(e,t){var n=Object.create(null);return e&&r.Children.map(e,(function(e){return e})).forEach((function(e){n[e.key]=function(e){return t&&(0,r.isValidElement)(e)?t(e):e}(e)})),n}function Rm(e,t,n){return null!=n[t]?n[t]:e.props[t]}function Cm(e,t,n){var o=Tm(e.children),i=function(e,t){function n(n){return n in t?t[n]:e[n]}e=e||{},t=t||{};var r,o=Object.create(null),i=[];for(var a in e)a in t?i.length&&(o[a]=i,i=[]):i.push(a);var u={};for(var c in t){if(o[c])for(r=0;r<o[c].length;r++){var s=o[c][r];u[o[c][r]]=n(s)}u[c]=n(c)}for(r=0;r<i.length;r++)u[i[r]]=n(i[r]);return u}(t,o);return Object.keys(i).forEach((function(a){var u=i[a];if((0,r.isValidElement)(u)){var c=a in t,s=a in o,l=t[a],f=(0,r.isValidElement)(l)&&!l.props.in;!s||c&&!f?s||!c||f?s&&c&&(0,r.isValidElement)(l)&&(i[a]=(0,r.cloneElement)(u,{onExited:n.bind(null,u),in:l.props.in,exit:Rm(u,"exit",e),enter:Rm(u,"enter",e)})):i[a]=(0,r.cloneElement)(u,{in:!1}):i[a]=(0,r.cloneElement)(u,{onExited:n.bind(null,u),in:!0,exit:Rm(u,"exit",e),enter:Rm(u,"enter",e)})}})),i}var Am=Object.values||function(e){return Object.keys(e).map((function(t){return e[t]}))},Nm=function(e){function t(t,n){var r,o=(r=e.call(this,t,n)||this).handleExited.bind((0,Pm.Z)(r));return r.state={contextValue:{isMounting:!0},handleExited:o,firstRender:!0},r}(0,km.Z)(t,e);var n=t.prototype;return n.componentDidMount=function(){this.mounted=!0,this.setState({contextValue:{isMounting:!1}})},n.componentWillUnmount=function(){this.mounted=!1},t.getDerivedStateFromProps=function(e,t){var n,o,i=t.children,a=t.handleExited;return{children:t.firstRender?(n=e,o=a,Tm(n.children,(function(e){return(0,r.cloneElement)(e,{onExited:o.bind(null,e),in:!0,appear:Rm(e,"appear",n),enter:Rm(e,"enter",n),exit:Rm(e,"exit",n)})}))):Cm(e,i,a),firstRender:!1}},n.handleExited=function(e,t){var n=Tm(this.props.children);e.key in n||(e.props.onExited&&e.props.onExited(t),this.mounted&&this.setState((function(t){var n=(0,mh.Z)({},t.children);return delete n[e.key],{children:n}})))},n.render=function(){var e=this.props,t=e.component,n=e.childFactory,o=(0,vh.Z)(e,["component","childFactory"]),i=this.state.contextValue,a=Am(this.state.children).map(n);return delete o.appear,delete o.enter,delete o.exit,null===t?r.createElement(Im.Provider,{value:i},a):r.createElement(Im.Provider,{value:i},r.createElement(t,o,a))},t}(r.Component);Nm.propTypes={},Nm.defaultProps={component:"div",childFactory:function(e){return e}};const Lm=Nm;function Dm(e,t){return e.replace(new RegExp("(^|\\s)"+t+"(?:\\s|$)","g"),"$1").replace(/\s+/g," ").replace(/^\s*|\s*$/g,"")}const Mm=!1;var Fm="unmounted",Um="exited",Bm="entering",Hm="entered",qm="exiting",zm=function(e){function t(t,n){var r;r=e.call(this,t,n)||this;var o,i=n&&!n.isMounting?t.enter:t.appear;return r.appearStatus=null,t.in?i?(o=Um,r.appearStatus=Bm):o=Hm:o=t.unmountOnExit||t.mountOnEnter?Fm:Um,r.state={status:o},r.nextCallback=null,r}(0,km.Z)(t,e),t.getDerivedStateFromProps=function(e,t){return e.in&&t.status===Fm?{status:Um}:null};var n=t.prototype;return n.componentDidMount=function(){this.updateStatus(!0,this.appearStatus)},n.componentDidUpdate=function(e){var t=null;if(e!==this.props){var n=this.state.status;this.props.in?n!==Bm&&n!==Hm&&(t=Bm):n!==Bm&&n!==Hm||(t=qm)}this.updateStatus(!1,t)},n.componentWillUnmount=function(){this.cancelNextCallback()},n.getTimeouts=function(){var e,t,n,r=this.props.timeout;return e=t=n=r,null!=r&&"number"!=typeof r&&(e=r.exit,t=r.enter,n=void 0!==r.appear?r.appear:t),{exit:e,enter:t,appear:n}},n.updateStatus=function(e,t){void 0===e&&(e=!1),null!==t?(this.cancelNextCallback(),t===Bm?this.performEnter(e):this.performExit()):this.props.unmountOnExit&&this.state.status===Um&&this.setState({status:Fm})},n.performEnter=function(e){var t=this,n=this.props.enter,r=this.context?this.context.isMounting:e,i=this.props.nodeRef?[r]:[o.findDOMNode(this),r],a=i[0],u=i[1],c=this.getTimeouts(),s=r?c.appear:c.enter;!e&&!n||Mm?this.safeSetState({status:Hm},(function(){t.props.onEntered(a)})):(this.props.onEnter(a,u),this.safeSetState({status:Bm},(function(){t.props.onEntering(a,u),t.onTransitionEnd(s,(function(){t.safeSetState({status:Hm},(function(){t.props.onEntered(a,u)}))}))})))},n.performExit=function(){var e=this,t=this.props.exit,n=this.getTimeouts(),r=this.props.nodeRef?void 0:o.findDOMNode(this);t&&!Mm?(this.props.onExit(r),this.safeSetState({status:qm},(function(){e.props.onExiting(r),e.onTransitionEnd(n.exit,(function(){e.safeSetState({status:Um},(function(){e.props.onExited(r)}))}))}))):this.safeSetState({status:Um},(function(){e.props.onExited(r)}))},n.cancelNextCallback=function(){null!==this.nextCallback&&(this.nextCallback.cancel(),this.nextCallback=null)},n.safeSetState=function(e,t){t=this.setNextCallback(t),this.setState(e,t)},n.setNextCallback=function(e){var t=this,n=!0;return this.nextCallback=function(r){n&&(n=!1,t.nextCallback=null,e(r))},this.nextCallback.cancel=function(){n=!1},this.nextCallback},n.onTransitionEnd=function(e,t){this.setNextCallback(t);var n=this.props.nodeRef?this.props.nodeRef.current:o.findDOMNode(this),r=null==e&&!this.props.addEndListener;if(n&&!r){if(this.props.addEndListener){var i=this.props.nodeRef?[this.nextCallback]:[n,this.nextCallback],a=i[0],u=i[1];this.props.addEndListener(a,u)}null!=e&&setTimeout(this.nextCallback,e)}else setTimeout(this.nextCallback,0)},n.render=function(){var e=this.state.status;if(e===Fm)return null;var t=this.props,n=t.children,o=(t.in,t.mountOnEnter,t.unmountOnExit,t.appear,t.enter,t.exit,t.timeout,t.addEndListener,t.onEnter,t.onEntering,t.onEntered,t.onExit,t.onExiting,t.onExited,t.nodeRef,(0,vh.Z)(t,["children","in","mountOnEnter","unmountOnExit","appear","enter","exit","timeout","addEndListener","onEnter","onEntering","onEntered","onExit","onExiting","onExited","nodeRef"]));return r.createElement(Im.Provider,{value:null},"function"==typeof n?n(e,o):r.cloneElement(r.Children.only(n),o))},t}(r.Component);function Gm(){}zm.contextType=Im,zm.propTypes={},zm.defaultProps={in:!1,mountOnEnter:!1,unmountOnExit:!1,appear:!1,enter:!0,exit:!0,onEnter:Gm,onEntering:Gm,onEntered:Gm,onExit:Gm,onExiting:Gm,onExited:Gm},zm.UNMOUNTED=Fm,zm.EXITED=Um,zm.ENTERING=Bm,zm.ENTERED=Hm,zm.EXITING=qm;const Wm=zm;var Vm=function(e,t){return e&&t&&t.split(" ").forEach((function(t){return r=t,void((n=e).classList?n.classList.remove(r):"string"==typeof n.className?n.className=Dm(n.className,r):n.setAttribute("class",Dm(n.className&&n.className.baseVal||"",r)));var n,r}))},Ym=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).appliedClasses={appear:{},enter:{},exit:{}},t.onEnter=function(e,n){var r=t.resolveArguments(e,n),o=r[0],i=r[1];t.removeClasses(o,"exit"),t.addClass(o,i?"appear":"enter","base"),t.props.onEnter&&t.props.onEnter(e,n)},t.onEntering=function(e,n){var r=t.resolveArguments(e,n),o=r[0],i=r[1]?"appear":"enter";t.addClass(o,i,"active"),t.props.onEntering&&t.props.onEntering(e,n)},t.onEntered=function(e,n){var r=t.resolveArguments(e,n),o=r[0],i=r[1]?"appear":"enter";t.removeClasses(o,i),t.addClass(o,i,"done"),t.props.onEntered&&t.props.onEntered(e,n)},t.onExit=function(e){var n=t.resolveArguments(e)[0];t.removeClasses(n,"appear"),t.removeClasses(n,"enter"),t.addClass(n,"exit","base"),t.props.onExit&&t.props.onExit(e)},t.onExiting=function(e){var n=t.resolveArguments(e)[0];t.addClass(n,"exit","active"),t.props.onExiting&&t.props.onExiting(e)},t.onExited=function(e){var n=t.resolveArguments(e)[0];t.removeClasses(n,"exit"),t.addClass(n,"exit","done"),t.props.onExited&&t.props.onExited(e)},t.resolveArguments=function(e,n){return t.props.nodeRef?[t.props.nodeRef.current,e]:[e,n]},t.getClassNames=function(e){var n=t.props.classNames,r="string"==typeof n,o=r?""+(r&&n?n+"-":"")+e:n[e];return{baseClassName:o,activeClassName:r?o+"-active":n[e+"Active"],doneClassName:r?o+"-done":n[e+"Done"]}},t}(0,km.Z)(t,e);var n=t.prototype;return n.addClass=function(e,t,n){var r=this.getClassNames(t)[n+"ClassName"],o=this.getClassNames("enter").doneClassName;"appear"===t&&"done"===n&&o&&(r+=" "+o),"active"===n&&e&&e.scrollTop,r&&(this.appliedClasses[t][n]=r,function(e,t){e&&t&&t.split(" ").forEach((function(t){return r=t,void((n=e).classList?n.classList.add(r):function(e,t){return e.classList?!!t&&e.classList.contains(t):-1!==(" "+(e.className.baseVal||e.className)+" ").indexOf(" "+t+" ")}(n,r)||("string"==typeof n.className?n.className=n.className+" "+r:n.setAttribute("class",(n.className&&n.className.baseVal||"")+" "+r)));var n,r}))}(e,r))},n.removeClasses=function(e,t){var n=this.appliedClasses[t],r=n.base,o=n.active,i=n.done;this.appliedClasses[t]={},r&&Vm(e,r),o&&Vm(e,o),i&&Vm(e,i)},n.render=function(){var e=this.props,t=(e.classNames,(0,vh.Z)(e,["classNames"]));return r.createElement(Wm,(0,mh.Z)({},t,{onEnter:this.onEnter,onEntered:this.onEntered,onEntering:this.onEntering,onExit:this.onExit,onExiting:this.onExiting,onExited:this.onExited}))},t}(r.Component);Ym.defaultProps={classNames:""},Ym.propTypes={};const Zm=Ym;function $m(e){return($m="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Km(){Km=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==$m(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}function Qm(e,t,n,r,o,i,a){try{var u=e[i](a),c=u.value}catch(e){return void n(e)}u.done?t(c):Promise.resolve(c).then(r,o)}function Xm(e){return function(){var t=this,n=arguments;return new Promise((function(r,o){var i=e.apply(t,n);function a(e){Qm(i,r,o,a,u,"next",e)}function u(e){Qm(i,r,o,a,u,"throw",e)}a(void 0)}))}}function Jm(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function ev(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function tv(e,t){return(tv=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function nv(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=ov(e);if(t){var o=ov(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return rv(this,n)}}function rv(e,t){if(t&&("object"===$m(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function ov(e){return(ov=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var iv=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&tv(e,t)}(a,e);var t,n,o,i=nv(a);function a(){var e;Jm(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).installExtension=function(){var t=Xm(Km().mark((function t(n){var r;return Km().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return r=e.props.install,n.preventDefault(),n.stopPropagation(),t.next=5,r();case 5:return t.abrupt("return",!1);case 6:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),e.uninstallAddon=function(t){var n=e.props,r=n.addon,o=n.uninstall,i=r.guid,a=r.name,u=r.type;return t.preventDefault(),t.stopPropagation(),o({guid:i,name:a,type:u}),!1},e.enableAddon=function(t){var n=e.props.enable;return t.preventDefault(),t.stopPropagation(),n(),!1},e}return t=a,(n=[{key:"showLoadingAnimation",value:function(){var e=this.props.status;return[D.iq,D.UZ,D.g,D.ZP,D.Mg].includes(e)}},{key:"getButtonText",value:function(){var e=this.props,t=e.addon,n=e.i18n,r=e.status,o=e.defaultButtonText;switch(r){case D.rr:return n.gettext("Enable");case D.Hi:case D.e_:return n.gettext("Remove");case D.g:return n.gettext("Enabling");case D.iq:return n.gettext("Disabling");case D.UZ:return n.gettext("Downloading");case D.ZP:return n.gettext("Installing");case D.Mg:return n.gettext("Uninstalling");case D.zK:default:return o||(D.Yd===t.type?n.gettext("Install Theme"):n.gettext("Add to Firefox"))}}},{key:"render",value:function(){var e=this.props,t=e.canUninstall,n=e.className,o=e.currentVersion,i=e.disabled,a=e.hasAddonManager,u=e.status,c=o&&o.file?o.file.url:void 0,s=!0===i||!c||a&&u===D.lz;ce()(void 0!==this.props.puffy,"puffy prop is required");var l={buttonType:"action",className:"AMInstallButton-button",disabled:s,href:c,onClick:a?function(e){return e.preventDefault(),e.stopPropagation(),!1}:null,puffy:this.props.puffy};s||([D.Hi,D.e_].includes(u)?(l.buttonType="neutral",l.className=Ho()(l.className,"AMInstallButton-button--uninstall"),!1===t?l.disabled=!0:l.onClick=this.uninstallAddon):u===D.rr?(l.buttonType="neutral",l.onClick=this.enableAddon,l.className=Ho()(l.className,"AMInstallButton-button--enable")):a&&(l.onClick=this.installExtension));var f={classNames:"AMInstallButton-transition",timeout:150},p=this.getButtonText();return r.createElement(Lm,{className:Ho()("AMInstallButton",n)},this.showLoadingAnimation()?r.createElement(Zm,Object.assign({key:"loading"},f),r.createElement("div",{className:Ho()("AMInstallButton-loading-button",{"AMInstallButton-loading-button--puffy":this.props.puffy}),title:p},r.createElement("div",{className:"AMInstallButton-loader"},r.createElement("div",{className:"AMInstallButton-loader-container"},r.createElement("div",{className:"AMInstallButton-loader-ball"})),r.createElement("span",{className:"visually-hidden"},p)))):r.createElement(Zm,Object.assign({key:"button"},f),r.createElement(Dc,l,p)))}}])&&ev(t.prototype,n),o&&ev(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);iv.defaultProps={_config:t.Z,_log:L.Z,_window:"undefined"!=typeof window?window:{},puffy:!0};const av=(0,Mo.qC)(Eu())(iv);var uv=a(39735);function cv(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function sv(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var lv="AMO Download Firefox",fv=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.addonId,n=D.Bg;return t&&(n="".concat(n,"-").concat(t)),n},pv=function(e){var t=e._encode,n=void 0===t?uv.cv:t,r=e._getDownloadCampaign,o=void 0===r?fv:r,i=e.addon,a=e.overrideQueryParams,u=void 0===a?{}:a;return"".concat(D.rZ).concat(fn(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?cv(Object(n),!0).forEach((function(t){sv(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):cv(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({utm_campaign:o({addonId:i&&i.id}),utm_content:i&&i.guid?"rta:".concat(n(i.guid)):"",s:"direct"},u)))};const dv=(0,Mo.qC)((0,g.connect)((function(e){return{clientApp:e.api.clientApp,userAgentInfo:e.api.userAgentInfo}})),Eu())((function(e){var t=e._encode,n=void 0===t?uv.cv:t,o=e._tracking,i=void 0===o?pr:o,a=e.addon,u=e.className,c=e.clientApp,s=e.forIncompatibleAddon,l=e.i18n,f=e.overrideQueryParams,p=void 0===f?{}:f,d=e.userAgentInfo;ce()(!Pf({userAgentInfo:d})||s,"The download button should not be rendered on Firefox unless the add-on\n is incompatible.");var h=c===D.So,y=a.type===D.Yd?l.gettext("Download Firefox and get the theme"):l.gettext("Download Firefox and get the extension");s&&(y=a.type===D.Yd?l.gettext("Download the new Firefox and get the theme"):l.gettext("Download the new Firefox and get the extension"));var m=h?y:l.gettext("Download Firefox"),v=a.type===D.Yd?l.gettext("You'll need Firefox to use this theme"):l.gettext("You'll need Firefox to use this extension");s&&(v=a.type===D.Yd?l.gettext("You need an updated version of Firefox for this theme"):l.gettext("You need an updated version of Firefox for this extension"));var g=r.createElement(Dc,{buttonType:"action",className:"GetFirefoxButton-button",href:pv({_encode:n,addon:a,overrideQueryParams:p}),onClick:function(){i.sendEvent({action:"download-firefox-click",category:lv,label:a.guid})},puffy:!0},m);return r.createElement("div",{className:Ho()("GetFirefoxButton",u)},r.createElement("div",{className:"GetFirefoxButton-callout"},r.createElement("div",{className:"GetFirefoxButton-callout-icon"}),r.createElement("div",{className:"GetFirefoxButton-callout-text"},v)),g)}));function hv(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function yv(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?hv(Object(n),!0).forEach((function(t){mv(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):hv(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function mv(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function vv(e){return{type:D.tX,payload:e}}var gv=function(e){var t=e.guid,n=e.error;return ce()(t,"guid is required"),{type:D.Rq,payload:{guid:t,error:n}}};var bv=a(77565);function wv(e){return(wv="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var Ov,Ev=["WrappedComponent","_addonManager"];function _v(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function xv(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Sv(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?xv(Object(n),!0).forEach((function(t){jv(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):xv(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function jv(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Pv(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function kv(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Iv(e,t){return(Iv=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Tv(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Cv(e);if(t){var o=Cv(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Rv(this,n)}}function Rv(e,t){if(t&&("object"===wv(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Cv(e){return(Cv=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Av=function(t){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Iv(e,t)}(u,t);var n,o,i,a=Tv(u);function u(){return Pv(this,u),a.apply(this,arguments)}return n=u,(o=[{key:"componentDidMount",value:function(){this.setCurrentStatus()}},{key:"componentDidUpdate",value:function(e){var t=e.addon?e.addon.guid:null,n=this.props.addon?this.props.addon.guid:null;n&&n!==t&&(this.props._log.info("Updating add-on status"),this.setCurrentStatus())}},{key:"setCurrentStatus",value:function(){var t=this.props,n=t._addonManager,r=t._log,o=t.addon,i=t.currentVersion,a=t.dispatch;if(!n.hasAddonManager())return r.info("No addon manager, cannot set add-on status"),Promise.resolve();if(!o)return r.debug("no addon, aborting setCurrentStatus()"),Promise.resolve();if(!i)return r.debug("no currentVersion, aborting setCurrentStatus()"),Promise.resolve();var u=o.guid,c=o.type,s=i.file;if(!s)return r.debug("no file, aborting setCurrentStatus()"),Promise.resolve();var l={guid:u,url:s.url};return r.info("Setting add-on status"),n.getAddon(u).then((function(e){var t=n.getAddonStatus({addon:e,type:c});a(vv(Sv(Sv({},l),{},{status:t,canUninstall:e.canUninstall})))}),(function(t){var n,o;r.info((0,e.f9)(Ov||(n=['Add-on "','" not found so setting status to\n UNINSTALLED; exact error: ',""],o||(o=n.slice(0)),Ov=Object.freeze(Object.defineProperties(n,{raw:{value:Object.freeze(o)}}))),u,t)),a(vv(Sv(Sv({},l),{},{status:D.un})))})).catch((function(e){r.error("Caught error from addonManager: ".concat(e)),a(vv({guid:u,status:D.Kj,error:D.F6}))}))}},{key:"enable",value:function(){var e=this.props,t=e._addonManager,n=e._log,r=e._tracking,o=e.dispatch,i=e.addon;ce()(i,"need an addon to call enable()");var a=i.guid,u=i.type;return t.enable(a).then((function(){r.sendEvent({action:lr(u),category:fr(u,D.H0),label:a})})).catch((function(e){e&&e.message===D.U4?n.info("addon.setEnabled not available. Unable to enable ".concat(a)):(n.error("Error while trying to enable ".concat(a,": %o"),e),o(vv({guid:a,status:D.Kj,error:D.F6})))}))}},{key:"install",value:function(){var e=this.props,t=e._addonManager,n=e._log,r=e._tracking,o=e.addon,i=e.currentVersion,a=e.dispatch;ce()(o,"need an addon to call install()"),ce()(i,"need a currentVersion to call install()");var u=o.guid,c=o.name,s=o.type,l=i.file;return l?new Promise((function(e){a({type:D.hi,payload:{guid:u}}),r.sendEvent({action:lr(s),category:fr(s,D.gQ),label:u}),e(l.url)})).then((function(e){var n=zs({addon:o,installURL:e,version:i});return t.install(e||"",function(e){var t=e._tracking,n=e.dispatch,r=e.guid,o=e.type;return function(e,i){if("STATE_DOWNLOADING"===e.state){var a=parseInt(100*e.progress/e.maxProgress,10);n({type:D.HR,payload:{guid:r,downloadProgress:a}})}else"onDownloadEnded"===i.type?n(vv({guid:r,status:D.ZP})):"onDownloadFailed"===i.type?i.target&&i.target.error===D._y?n(gv({guid:r,error:D._y})):(n(gv({guid:r,error:D.Vg})),t.sendEvent({action:lr(o),category:fr(o,D.nl),label:r})):"onInstallCancelled"===i.type?(n({type:D.zl,payload:{guid:r}}),t.sendEvent({action:lr(o),category:fr(o,D.lm),label:r})):"onInstallFailed"===i.type&&n(gv({guid:r,error:D.DE}))}}({_tracking:r,dispatch:a,guid:u,name:c,type:s}),{hash:n})})).then((function(){r.sendEvent({action:lr(s),category:fr(s,D.zi),label:u})})).catch((function(e){n.error("Install error: ".concat(e)),a(gv({guid:u,error:D.pl}))})):(n.debug("no file found, aborting install()."),Promise.resolve())}},{key:"uninstall",value:function(e){var t=e.guid,n=e.type,r=this.props,o=r._addonManager,i=r._log,a=r._tracking,u=r.dispatch;u(vv({guid:t,status:D.Mg}));var c=lr(n);return o.uninstall(t).then((function(){a.sendEvent({action:c,category:fr(n,D.VN),label:t})})).catch((function(e){i.error("Uninstall error: ".concat(e)),u(gv({guid:t,error:D.hY}))}))}},{key:"render",value:function(){var e=this,t=this.props,n=t.WrappedComponent,o=t._addonManager,i=_v(t,Ev),a={enable:function(){return e.enable.apply(e,arguments)},hasAddonManager:o.hasAddonManager(),install:function(){return e.install.apply(e,arguments)},setCurrentStatus:function(){return e.setCurrentStatus.apply(e,arguments)},uninstall:function(){return e.uninstall.apply(e,arguments)}};return r.createElement(n,Object.assign({},a,i))}}])&&kv(n.prototype,o),i&&kv(n,i),Object.defineProperty(n,"prototype",{writable:!1}),u}(r.Component);Av.defaultProps={_addonManager:bv,_log:L.Z,_tracking:pr};const Nv=(0,Mo.qC)(No,(function(e){Av.displayName="WithInstallHelpers(".concat(Rn(e),")");return(0,g.connect)((function(t,n){var r=n.addon;ce()(void 0!==r,"addon is required");var o=n.version;return o||(o=r&&r.currentVersionId?mf({id:r.currentVersionId,state:t.versions}):null),{WrappedComponent:e,currentVersion:o}}))(Av)}),(0,g.connect)((function(e,t){var n=t.addon,r=t.version,o=n&&e.installations[n.guid]||{},i=r||null;return n&&n.currentVersionId&&!i&&(i=mf({id:n.currentVersionId,state:e.versions})),{canUninstall:o.canUninstall,clientApp:e.api.clientApp,currentVersion:i,installStatus:o.status||D.lz,userAgentInfo:e.api.userAgentInfo}})),Eu())((function(e){var t=e._getClientCompatibility,n=void 0===t?Cf:t,o=e.addon,i=e.canUninstall,a=e.className,u=e.clientApp,c=e.currentVersion,s=e.defaultButtonText,l=e.enable,f=e.hasAddonManager,p=e.i18n,d=e.install,h=e.installStatus,y=e.puffy,m=e.setCurrentStatus,v=e.showLinkInsteadOfButton,g=e.uninstall,b=e.userAgentInfo,w=Pf({userAgentInfo:b}),O=!1,E=w,_=!w,x=!1;if(o&&w){var S=n({addon:o,currentVersion:c,clientApp:u,userAgentInfo:b});(O=S.compatible)||[D.op,D.Px,D.T3,D.CK,D.YE].includes(S.reason)||(x=!0,E=!1,_=!0)}var j=c&&c.file?c.file.url:void 0,P=!O&&j;return o&&r.createElement("div",{className:"InstallButtonWrapper"},!v&&r.createElement(r.Fragment,null,E?r.createElement(av,{addon:o,canUninstall:i,className:Ho()(a?"AMInstallButton--".concat(a):"",{"AMInstallButton--noDownloadLink":!P}),currentVersion:c,defaultButtonText:s,disabled:!O,enable:l,hasAddonManager:f,install:d,puffy:y,setCurrentStatus:m,status:h,uninstall:g}):null,_?r.createElement(dv,{addon:o,className:a?"GetFirefoxButton--".concat(a):"",forIncompatibleAddon:x}):null),P||v?r.createElement("div",{className:"InstallButtonWrapper-download"},r.createElement("a",{className:"InstallButtonWrapper-download-link",href:j},p.gettext("Download file"))):null)}));function Lv(e){return(Lv="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Dv(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Mv(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Fv(e,t){return(Fv=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Uv(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Hv(e);if(t){var o=Hv(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Bv(this,n)}}function Bv(e,t){if(t&&("object"===Lv(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Hv(e){return(Hv=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var qv=hn({utm_content:"install-warning"}),zv=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Fv(e,t)}(a,e);var t,n,o,i=Uv(a);function a(){var e;Dv(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).couldShowWarning=function(){var t=e.props,n=t._correctedLocationForPlatform,r=t._getPromotedCategory,o=t.addon,i=t.clientApp,a=t.lang,u=t.location,c=t.userAgentInfo,s=n({clientApp:i,lang:a,location:u,userAgentInfo:c}),l=r({addon:o,clientApp:i});return!s&&Pf({userAgentInfo:c})&&i===D.So&&o.type===D.Gz&&(!l||!D.W8.includes(l))},e}return t=a,(n=[{key:"render",value:function(){var e=this.props.i18n;return this.couldShowWarning()?r.createElement(Jc,{actionHref:qv,actionTarget:"_blank",actionText:e.gettext("Learn more"),className:"InstallWarning",type:Zc},e.gettext("This add-on is not actively monitored for security by Mozilla. Make sure you trust it before installing.")):null}}])&&Mv(t.prototype,n),o&&Mv(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);zv.defaultProps={_correctedLocationForPlatform:Nf,_getPromotedCategory:Gs};const Gv=(0,Mo.qC)(No,(0,g.connect)((function(e){return{clientApp:e.api.clientApp,lang:e.api.lang,userAgentInfo:e.api.userAgentInfo}})),Eu())(zv);function Wv(e){return(Wv="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Vv(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Yv(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Zv(e,t){return(Zv=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function $v(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Qv(e);if(t){var o=Qv(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Kv(this,n)}}function Kv(e,t){if(t&&("object"===Wv(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Qv(e){return(Qv=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Xv=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Zv(e,t)}(a,e);var t,n,o,i=$v(a);function a(){return Vv(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e,t=this.props,n=t.i18n,o=t.siteIsReadOnly,i=t.siteNotice,a=t.currentUserWasLoggedOut,u=[];return i&&u.push(r.createElement(Jc,{className:"SiteNotices",id:"amo-site-notice",type:"warning",key:"amo-site-notice"},r.createElement("span",{dangerouslySetInnerHTML:(e=i,vn(gn(e),["a","b","br","em","i","strong"]))}))),o&&u.push(r.createElement(Jc,{className:"SiteNotices",id:"amo-site-read-only",type:"warning",key:"amo-site-read-only"},n.gettext("Some features are temporarily disabled while we\n perform website maintenance. We'll be back to full capacity\n shortly."))),a&&u.push(r.createElement(Jc,{className:"SiteNotices",id:"user-was-logged-out",type:"warning",key:"user-was-logged-out"},n.gettext("You have been logged out."))),u}}])&&Yv(t.prototype,n),o&&Yv(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const Jv=(0,Mo.qC)((0,g.connect)((function(e){return{siteIsReadOnly:e.site.readOnly,siteNotice:e.site.notice,currentUserWasLoggedOut:e.users.currentUserWasLoggedOut}})),Eu())(Xv);const eg=function(e){var t=e.className;return r.createElement("div",{className:Ho()("AppBanner",t)},r.createElement(Jv,null))};function tg(e){return(tg="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function ng(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function rg(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function og(e,t){return(og=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function ig(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=ug(e);if(t){var o=ug(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return ag(this,n)}}function ag(e,t){if(t&&("object"===tg(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function ug(e){return(ug=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var cg=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&og(e,t)}(a,e);var t,n,o,i=ig(a);function a(){return ng(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.children,n=e.className,o=e.code,i=e.header;return ce()(t,"children is required"),ce()(i,"header is required"),ce()([400,401,404,451,500].includes(o),"a valid error code is required"),r.createElement(Do(),{code:o},r.createElement(js,{className:Ho()("Errors",n,{NotAuthorized:401===o,NotFound:404===o,UnavailableForLegalReasons:451===o,ServerError:500===o}),header:i},t))}}])&&rg(t.prototype,n),o&&rg(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);function sg(e){return(sg="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function lg(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function fg(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function pg(e,t){return(pg=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function dg(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=yg(e);if(t){var o=yg(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return hg(this,n)}}function hg(e,t){if(t&&("object"===sg(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function yg(e){return(yg=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var mg=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&pg(e,t)}(a,e);var t,n,o,i=dg(a);function a(){return lg(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"componentDidMount",value:function(){(0,this.props.dispatch)(Ze())}},{key:"render",value:function(){var e=this.props,t=e._window,n=e.i18n,o=ie({text:n.gettext("\n Login authentication has expired. %(startLink)sReload the page%(endLink)s\n to continue without authentication, or login again using the Log In\n link at the top of the page."),replacements:[["startLink","endLink",function(e){return r.createElement(wc,{className:"ReloadPageLink",onClick:function(){return t.location.reload()},href:"#",prependClientApp:!1,prependLang:!1},e)}]]});return r.createElement(cg,{code:401,header:n.gettext("Login Expired")},r.createElement("p",null,o))}}])&&fg(t.prototype,n),o&&fg(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);mg.defaultProps={_window:"undefined"!=typeof window?window:{}};const vg=(0,Mo.qC)((0,g.connect)(),Eu())(mg);function gg(e){return(gg="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function bg(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function wg(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Og(e,t){return(Og=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Eg(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=xg(e);if(t){var o=xg(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return _g(this,n)}}function _g(e,t){if(t&&("object"===gg(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function xg(e){return(xg=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Sg=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Og(e,t)}(a,e);var t,n,o,i=Eg(a);function a(){return bg(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props.i18n,t=ie({text:e.gettext("Try visiting the page later, as the theme or extension may become\n available again. Alternatively, you may be able to find what you’re\n looking for in one of the available\n %(extensionStart)sextensions%(extensionEnd)s or\n %(themeStart)sthemes%(themeEnd)s, or by asking for help on our\n %(communityStart)scommunity forums%(communityEnd)s."),replacements:[["extensionStart","extensionEnd",function(e){return r.createElement(wc,{key:"link-extensions",to:"/".concat(xn(D.Gz),"/")},e)}],["themeStart","themeEnd",function(e){return r.createElement(wc,{key:"link-themes",to:"/".concat(xn(D.Yd),"/")},e)}],["communityStart","communityEnd",function(e){return r.createElement(wc,{key:"link-community",href:"https://discourse.mozilla.org/c/add-ons",prependClientApp:!1,prependLang:!1},e)}]]});return r.createElement(cg,{code:404,header:e.gettext("Oops! We can’t find that page")},r.createElement("p",null,e.gettext("If you’ve followed a link from another site for an\n extension or theme, that item is no longer available. This could\n be because:")),r.createElement("ul",null,r.createElement("li",null,e.gettext("The developer removed it. Developers commonly do\n this because they no longer support the extension or theme, or\n have replaced it.")),r.createElement("li",null,e.gettext("Mozilla removed it. This can happen when issues\n are found during the review of the extension or theme, or the\n extension or theme has been abusing the terms and conditions\n for addons.mozilla.org. The developer has the opportunity to\n resolve the issues and make the add-on available again."))),r.createElement("p",{className:"Errors-paragraph-with-links"},t))}}])&&wg(t.prototype,n),o&&wg(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const jg=(0,Mo.qC)(Eu())(Sg);function Pg(e){return(Pg="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function kg(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Ig(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Tg(e,t){return(Tg=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Rg(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Ag(e);if(t){var o=Ag(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Cg(this,n)}}function Cg(e,t){if(t&&("object"===Pg(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Ag(e){return(Ag=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Ng=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Tg(e,t)}(a,e);var t,n,o,i=Rg(a);function a(){return kg(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props.i18n,t=ie({text:e.gettext("You may be able to find what you’re looking for in one of the available\n %(extensionStart)sextensions%(extensionEnd)s or\n %(themeStart)sthemes%(themeEnd)s, or by asking for help on our\n %(communityStart)scommunity forums%(communityEnd)s."),replacements:[["extensionStart","extensionEnd",function(e){return r.createElement(wc,{key:"link-extensions",to:"/".concat(xn(D.Gz),"/")},e)}],["themeStart","themeEnd",function(e){return r.createElement(wc,{key:"link-themes",to:"/".concat(xn(D.Yd),"/")},e)}],["communityStart","communityEnd",function(e){return r.createElement(wc,{key:"link-community",href:"https://discourse.mozilla.org/c/add-ons",prependClientApp:!1,prependLang:!1},e)}]]});return r.createElement(cg,{code:451,header:e.gettext("That page is not available in your region")},r.createElement("p",null,e.gettext("The page you tried to access is not available in your region.")),r.createElement("p",{className:"Errors-paragraph-with-links"},t))}}])&&Ig(t.prototype,n),o&&Ig(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const Lg=(0,Mo.qC)(Eu())(Ng);function Dg(e){return(Dg="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Mg(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Fg(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Ug(e,t){return(Ug=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Bg(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=qg(e);if(t){var o=qg(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Hg(this,n)}}function Hg(e,t){if(t&&("object"===Dg(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function qg(e){return(qg=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var zg=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Ug(e,t)}(a,e);var t,n,o,i=Bg(a);function a(){var e;Mg(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).onChange=function(t){t.preventDefault(),e.changeLanguage(t.target.value)},e}return t=a,(n=[{key:"changeLanguage",value:function(e){var t=this.props,n=t.currentLocale,r=t.location,o=t._window;if(n!==e){var i=function(e){var t=e.currentLocale,n=e.location,r=e.newLocale;return Ut(n.pathname.replace(new RegExp("^/".concat(t,"/")),"/".concat(r,"/")),n.query)}({currentLocale:n,location:r,newLocale:e});(o||window).location=i}}},{key:"render",value:function(){var e=this.props,t=e.currentLocale,n=e.i18n;return r.createElement("div",{className:"LanguagePicker"},r.createElement("label",{htmlFor:"lang-picker",className:"LanguagePicker-header"},n.gettext("Change language")),r.createElement("select",{className:"LanguagePicker-selector",defaultValue:t,id:"lang-picker",onChange:this.onChange},Object.keys(_e).map((function(e){return r.createElement("option",{key:e,value:e},_e[e].native)}))))}}])&&Fg(t.prototype,n),o&&Fg(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);zg.propTypes={currentLocale:w().string.isRequired,i18n:w().object.isRequired,location:w().object.isRequired,_window:w().object};const Gg=(0,Mo.qC)(No,(0,g.connect)((function(e){return{currentLocale:e.api.lang}})),Eu())(zg);function Wg(e){return(Wg="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Vg(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Yg(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Zg(e,t){return(Zg=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function $g(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Qg(e);if(t){var o=Qg(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Kg(this,n)}}function Kg(e,t){if(t&&("object"===Wg(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Qg(e){return(Qg=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Xg=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Zg(e,t)}(a,e);var t,n,o,i=$g(a);function a(){return Vg(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e._config,n=e.i18n,o=e.noLangPicker,i=n.gettext("Go to Mozilla's homepage");return r.createElement("footer",{className:"Footer"},r.createElement("div",{className:"Footer-wrapper"},r.createElement("div",{className:"Footer-mozilla-link-wrapper"},r.createElement("a",{className:"Footer-mozilla-link",href:"https://mozilla.org/",title:i},r.createElement(ac,{alt:i,className:"Footer-mozilla-logo",name:"mozilla"}))),r.createElement("section",{className:"Footer-amo-links"},r.createElement("h4",{className:"Footer-links-header"},r.createElement(wc,{href:"/"},n.gettext("Add-ons"))),r.createElement("ul",{className:"Footer-links"},r.createElement("li",null,r.createElement(wc,{to:"/about",prependClientApp:!1},n.gettext("About"))),r.createElement("li",null,r.createElement("a",{className:"Footer-blog-link",href:"/blog/"},n.gettext("Firefox Add-ons Blog"))),r.createElement("li",null,r.createElement("a",{className:"Footer-extension-workshop-link",href:"".concat(t.get("extensionWorkshopUrl"),"/").concat(fn({utm_content:"footer-link",utm_campaign:null}))},n.gettext("Extension Workshop"))),r.createElement("li",null,r.createElement(wc,{href:"/developers/",prependClientApp:!1},n.gettext("Developer Hub"))),r.createElement("li",null,r.createElement("a",{className:"Footer-developer-policies-link",href:"".concat(t.get("extensionWorkshopUrl"),"/documentation/publish/add-on-policies/").concat(fn({utm_medium:"photon-footer",utm_campaign:null}))},n.gettext("Developer Policies"))),r.createElement("li",null,r.createElement("a",{className:"Footer-community-blog-link",href:"https://blog.mozilla.com/addons".concat(fn({utm_campaign:null,utm_content:"footer-link",utm_medium:"referral"}))},n.gettext("Community Blog"))),r.createElement("li",null,r.createElement("a",{href:"https://discourse.mozilla-community.org/c/add-ons"},n.gettext("Forum"))),r.createElement("li",null,r.createElement("a",{className:"Footer-bug-report-link",href:"https://developer.mozilla.org/docs/Mozilla/Add-ons/Contact_us"},n.gettext("Report a bug"))),r.createElement("li",null,r.createElement(wc,{to:"/review_guide",prependClientApp:!1},n.gettext("Review Guide"))))),r.createElement("section",{className:"Footer-browsers-links"},r.createElement("h4",{className:"Footer-links-header"},n.gettext("Browsers")),r.createElement("ul",{className:"Footer-links"},r.createElement("li",null,r.createElement("a",{className:"Footer-desktop-link",href:"https://www.mozilla.org/firefox/new/".concat(fn({utm_content:"footer-link",utm_campaign:null}))},"Desktop")),r.createElement("li",null,r.createElement("a",{className:"Footer-mobile-link",href:"https://www.mozilla.org/firefox/mobile/".concat(fn({utm_content:"footer-link",utm_campaign:null}))},"Mobile")),r.createElement("li",null,r.createElement("a",{className:"Footer-enterprise-link",href:"https://www.mozilla.org/firefox/enterprise/".concat(fn({utm_content:"footer-link",utm_campaign:null}))},"Enterprise")))),r.createElement("section",{className:"Footer-product-links"},r.createElement("h4",{className:"Footer-links-header"},n.gettext("Products")),r.createElement("ul",{className:"Footer-links"},r.createElement("li",null,r.createElement("a",{className:"Footer-browsers-link",href:"https://www.mozilla.org/firefox/browsers/".concat(fn({utm_content:"footer-link",utm_campaign:null}))},"Browsers")),r.createElement("li",null,r.createElement("a",{className:"Footer-vpn-link",href:"https://www.mozilla.org/products/vpn/".concat(fn({utm_content:"footer-link",utm_campaign:null}),"#pricing")},"VPN")),r.createElement("li",null,r.createElement("a",{className:"Footer-relay-link",href:"https://relay.firefox.com/".concat(fn({utm_content:"footer-link",utm_campaign:null}))},"Relay")),r.createElement("li",null,r.createElement("a",{className:"Footer-monitor-link",href:"https://monitor.firefox.com/".concat(fn({utm_content:"footer-link",utm_campaign:null}))},"Monitor")),r.createElement("li",null,r.createElement("a",{className:"Footer-pocket-link",href:"https://getpocket.com".concat(fn({utm_content:"footer-link",utm_campaign:null}))},"Pocket"))),r.createElement("ul",{className:"Footer-links Footer-links-social"},r.createElement("li",{className:"Footer-link-social"},r.createElement("a",{href:"https://twitter.com/firefox"},r.createElement(ac,{name:"twitter",alt:"Twitter (@firefox)"}))),r.createElement("li",{className:"Footer-link-social"},r.createElement("a",{href:"https://www.instagram.com/firefox/"},r.createElement(ac,{name:"instagram",alt:"Instagram (Firefox)"}))),r.createElement("li",{className:"Footer-link-social"},r.createElement("a",{href:"https://www.youtube.com/firefoxchannel"},r.createElement(ac,{name:"youtube",alt:"YouTube (firefoxchannel)"}))))),r.createElement("ul",{className:"Footer-legal-links"},r.createElement("li",null,r.createElement("a",{className:"Footer-privacy-link",href:"https://www.mozilla.org/privacy/websites/"},n.gettext("Privacy"))),r.createElement("li",null,r.createElement("a",{className:"Footer-cookies-link",href:"https://www.mozilla.org/privacy/websites/"},n.gettext("Cookies"))),r.createElement("li",null,r.createElement("a",{className:"Footer-legal-link",href:"https://www.mozilla.org/about/legal/terms/mozilla/"},n.gettext("Legal")))),r.createElement("p",{className:"Footer-copyright",dangerouslySetInnerHTML:vn(n.sprintf(n.gettext("Except where otherwise %(startNotedLink)snoted%(endNotedLink)s,\n content on this site is licensed under the %(startLicenseLink)sCreative Commons\n Attribution Share-Alike License v3.0%(endLicenseLink)s or any later version."),{startNotedLink:'<a href="https://www.mozilla.org/en-US/about/legal/">',endNotedLink:"</a>",startLicenseLink:'<a href="https://creativecommons.org/licenses/by-sa/3.0/">',endLicenseLink:"</a>"}),["a"])}),!o&&r.createElement("div",{className:"Footer-language-picker"},r.createElement(Gg,null))))}}])&&Yg(t.prototype,n),o&&Yg(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);Xg.defaultProps={_config:t.Z,noLangPicker:!1};const Jg=(0,Mo.qC)(Eu())(Xg);const eb=(0,Mo.qC)((0,g.connect)((function(e){return{userAgentInfo:e.api.userAgentInfo}})),Eu())((function(e){var t=e._tracking,n=void 0===t?pr:t,o=e.i18n,i=e.userAgentInfo,a=function(){n.sendEvent({action:"download-firefox-banner-click",category:lv})};if(Pf({userAgentInfo:i}))return null;var u={utm_content:"banner-download-button"},c=ie({text:o.gettext("To use these add-ons, you'll need to %(linkStart)sdownload Firefox%(linkEnd)s"),replacements:[["linkStart","linkEnd",function(e){return r.createElement(r.Fragment,null,r.createElement("br",null),r.createElement(Dc,{buttonType:"none",className:"GetFirefoxBanner-button",href:pv({overrideQueryParams:u}),key:"GetFirefoxBanner-button",onClick:a},e))}]]});return r.createElement(Jc,{className:"GetFirefoxBanner",dismissible:!0,id:"GetFirefoxBanner-notice",onDismiss:function(){n.sendEvent({action:"download-firefox-banner-dismiss",category:"AMO Download Firefox Banner"})},type:"warning"},r.createElement("span",{className:"GetFirefoxBanner-content"},c))}));a(93857);var tb=a(5241),nb=a.n(tb);const rb=(0,Mo.qC)((0,g.connect)((function(e){return{clientApp:e.api.clientApp}})))((function(e){var t=e._getPromotedCategory,n=void 0===t?Gs:t,o=e.arrowAlt,i=e.clientApp,a=e.loading,u=e.suggestion,c=u.iconUrl,s=u.name,l=u.type,f=n({addon:u,clientApp:i,forBadging:!0});return r.createElement("p",{className:Ho()("SearchSuggestion","SearchSuggestion--".concat(l))},r.createElement("img",{alt:s,className:"SearchSuggestion-icon",src:c}),r.createElement("span",{className:"SearchSuggestion-name"},a?r.createElement(Zp,{minWidth:20}):s),f?r.createElement(Zs,{category:f,className:"SearchSuggestion-icon-promoted",showAlt:!0,size:"small"}):null,r.createElement(ac,{alt:o,className:"SearchSuggestion-icon-arrow",name:"arrow-blue"}))}));function ob(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function ib(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ob(Object(n),!0).forEach((function(t){ab(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ob(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function ab(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var ub="AUTOCOMPLETE_LOADED",cb="AUTOCOMPLETE_STARTED",sb="AUTOCOMPLETE_CANCELLED",lb={lang:"",loading:!1,suggestions:[]};function fb(){return{type:sb}}function pb(e){var t=e.results;return ce()(t,"results are required"),{type:ub,payload:{results:t}}}var db=function(e,t){return{addonId:e.id,iconUrl:Bs(e),name:Yi(e.name,t),promoted:e.promoted,type:e.type,url:e.url}};var hb;function yb(e){return(yb="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function mb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function vb(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?mb(Object(n),!0).forEach((function(t){gb(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):mb(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function gb(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function bb(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function wb(e,t){return(wb=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Ob(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=_b(e);if(t){var o=_b(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Eb(this,n)}}function Eb(e,t){if(t&&("object"===yb(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function _b(e){return(_b=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var xb=100,Sb=function(t){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&wb(e,t)}(u,t);var n,o,i,a=Ob(u);function u(t){var n;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,u),(n=a.call(this,t)).handleSuggestionsClearRequested=function(){n.setState({autocompleteIsOpen:!1}),n.props.dispatch(fb())},n.handleSuggestionsFetchRequested=function(t){var r,o,i=t.value;if(ce()(i,"It should not be possible to have a falsey value"),ce()(i.length<=xb,"It should not be possible to have a value > ".concat(xb)),i.length<2)return L.Z.debug((0,e.f9)(hb||(r=["Ignoring suggestions fetch because query\n does not meet the required length (",")"],o||(o=r.slice(0)),hb=Object.freeze(Object.defineProperties(r,{raw:{value:Object.freeze(o)}}))),2)),void n.props.dispatch(fb());var a=n.createFiltersFromQuery(i);n.setState({autocompleteIsOpen:!0}),n.dispatchAutocompleteStart({filters:a})},n.handleSearch=function(e){e.preventDefault(),n.searchInput&&n.searchInput.blur();var t=n.props.onSearch;t&&t(n.createFiltersFromQuery(n.state.searchValue.trim()))},n.handleSearchChange=function(e,t){var r=t.newValue||"";r.trim().length<=xb&&n.setState({searchValue:r})},n.handleSuggestionSelected=function(e,t){var r=t.suggestion;e.preventDefault(),n.props.loadingSuggestions?L.Z.debug("Ignoring a click on the suggestion while loading"):(n.setState({autocompleteIsOpen:!1,searchValue:""}),n.props.onSuggestionSelected(r))},n.renderSuggestion=function(e){var t=n.props,o=t.loadingSuggestions,i=t.selectSuggestionText;return r.createElement(rb,{arrowAlt:i,loading:o,suggestion:e})},n.dispatchAutocompleteStart=n.props.debounce((function(e){var t=e.filters,r=n.props;(0,r.dispatch)(function(e){var t=e.errorHandlerId,n=e.filters;return ce()(t,"errorHandlerId is required"),ce()(n,"filters are required"),{type:cb,payload:{errorHandlerId:t,filters:n}}}({errorHandlerId:r.errorHandler.id,filters:t}))}),200,{trailing:!0}),n.state={autocompleteIsOpen:!1,searchValue:n.getSearchValueFromProps(t)},n}return n=u,(o=[{key:"getSearchValueFromProps",value:function(e){var t=e.location,n=e.inputName;return t.query&&"string"==typeof t.query[n]&&t.query[n]||""}},{key:"createFiltersFromQuery",value:function(e){var t=this.props.location,n={};return t&&delete(n=Rt(t.query)).page,n.sort&&n.sort===D.wn&&delete n.sort,vb(vb({},n),{},{query:e})}},{key:"getSuggestions",value:function(){return this.props.loadingSuggestions?Array(10).fill({addonId:void 0,iconUrl:Bs(),name:this.props.i18n.gettext("Loading"),promoted:null,url:void 0}):this.props.suggestions}},{key:"render",value:function(){var e=this,t=this.props,n=t.errorHandler,o=t.i18n,i=t.inputLabelText,a=t.inputName,u=t.inputPlaceholder,c=t.showInputLabel,s=this.state.autocompleteIsOpen&&this.getSuggestions().length>0,l={className:"AutoSearchInput-query",id:"AutoSearchInput-".concat(a),maxLength:xb,minLength:2,name:a,onChange:this.handleSearchChange,placeholder:u||o.gettext("Find add-ons"),type:"search",value:this.state.searchValue};return r.createElement("div",{className:Ho()("AutoSearchInput",{"AutoSearchInput--autocompleteIsOpen":s})},n.renderErrorIfPresent(),r.createElement("label",{className:Ho()("AutoSearchInput-label",{"visually-hidden":!c}),htmlFor:l.id},i||o.gettext("Search")),r.createElement("div",{className:"AutoSearchInput-search-box"},r.createElement(ac,{className:"AutoSearchInput-icon-magnifying-glass",name:"magnifying-glass"}),r.createElement(nb(),{focusInputOnSuggestionClick:!1,getSuggestionValue:function(e){return e.name},inputProps:l,onSuggestionsClearRequested:this.handleSuggestionsClearRequested,onSuggestionsFetchRequested:this.handleSuggestionsFetchRequested,onSuggestionSelected:this.handleSuggestionSelected,ref:function(t){t&&(e.searchInput=t.input)},renderSuggestion:this.renderSuggestion,suggestions:this.getSuggestions(),theme:{suggestionContainer:"AutoSearchInput-suggestions",suggestionsList:"AutoSearchInput-suggestions-list",suggestion:"AutoSearchInput-suggestions-item",suggestionHighlighted:"AutoSearchInput-suggestions-item--highlighted"}}),r.createElement("button",{className:"AutoSearchInput-submit-button",onClick:this.handleSearch,type:"submit"},r.createElement("span",{className:"visually-hidden"},o.gettext("Search")),r.createElement(ac,{name:"arrow"}))))}}])&&bb(n.prototype,o),i&&bb(n,i),Object.defineProperty(n,"prototype",{writable:!1}),u}(r.Component);Sb.defaultProps={debounce:yh(),showInputLabel:!0};const jb=(0,Mo.qC)(No,gs({fileName:"src/amo/components/AutoSearchInput/index.js",extractId:function(e){return e.inputName}}),(0,g.connect)((function(e){return{suggestions:e.autocomplete.suggestions,loadingSuggestions:e.autocomplete.loading}})),Eu())(Sb);function Pb(e){return(Pb="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function kb(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Ib(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Tb(e,t){return(Tb=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Rb(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Ab(e);if(t){var o=Ab(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Cb(this,n)}}function Cb(e,t){if(t&&("object"===Pb(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Ab(e){return(Ab=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Nb=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Tb(e,t)}(a,e);var t,n,o,i=Rb(a);function a(){var e;kb(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).onSearch=function(t){e.props.history.push({pathname:e.baseSearchURL(),query:Tt(t)})},e.onSuggestionSelected=function(t){var n=ae.parse(t.url).pathname;n&&e.props.history.push(n)},e}return t=a,(n=[{key:"baseSearchURL",value:function(){var e=this.props,t=e.lang,n=e.clientApp,r=e.pathname;return"/".concat(t,"/").concat(n).concat(r)}},{key:"render",value:function(){var e=this.props,t=e.className,n=e.i18n,o=e.lang,i=e.clientApp,a=i===D.wZ?n.gettext("Firefox Add-ons for Android"):n.gettext("Firefox Add-ons");return r.createElement(r.Fragment,null,r.createElement(Ao,null,r.createElement("link",{title:a,rel:"search",type:"application/opensearchdescription+xml",href:"/".concat(o,"/").concat(i,"/opensearch.xml")})),r.createElement("form",{action:this.baseSearchURL(),className:Ho()("SearchForm",t),method:"GET","data-no-csrf":!0,role:"search"},r.createElement(jb,{inputName:"q",onSearch:this.onSearch,onSuggestionSelected:this.onSuggestionSelected,selectSuggestionText:n.gettext("Go to the add-on page"),showInputLabel:!1})))}}])&&Ib(t.prototype,n),o&&Ib(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const Lb=(0,Mo.qC)(No,(0,g.connect)((function(e){var t=e.api;return{lang:t.lang,clientApp:t.clientApp}})),Eu())(Nb);function Db(e,t){return(Db=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function Mb(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function Fb(e,t,n){return e===t||(e.correspondingElement?e.correspondingElement.classList.contains(n):e.classList.contains(n))}var Ub,Bb,Hb=(void 0===Ub&&(Ub=0),function(){return++Ub}),qb={},zb={},Gb=["touchstart","touchmove"];function Wb(e,t){var n=null;return-1!==Gb.indexOf(t)&&Bb&&(n={passive:!e.props.preventDefault}),n}const Vb=function(e,t){var n,i,a=e.displayName||e.name||"Component";return i=n=function(n){var i,u;function c(e){var r;return(r=n.call(this,e)||this).__outsideClickHandler=function(e){if("function"!=typeof r.__clickOutsideHandlerProp){var t=r.getInstance();if("function"!=typeof t.props.handleClickOutside){if("function"!=typeof t.handleClickOutside)throw new Error("WrappedComponent: "+a+" lacks a handleClickOutside(event) function for processing outside click events.");t.handleClickOutside(e)}else t.props.handleClickOutside(e)}else r.__clickOutsideHandlerProp(e)},r.__getComponentNode=function(){var e=r.getInstance();return t&&"function"==typeof t.setClickOutsideRef?t.setClickOutsideRef()(e):"function"==typeof e.setClickOutsideRef?e.setClickOutsideRef():(0,o.findDOMNode)(e)},r.enableOnClickOutside=function(){if("undefined"!=typeof document&&!zb[r._uid]){void 0===Bb&&(Bb=function(){if("undefined"!=typeof window&&"function"==typeof window.addEventListener){var e=!1,t=Object.defineProperty({},"passive",{get:function(){e=!0}}),n=function(){};return window.addEventListener("testPassiveEventSupport",n,t),window.removeEventListener("testPassiveEventSupport",n,t),e}}()),zb[r._uid]=!0;var e=r.props.eventTypes;e.forEach||(e=[e]),qb[r._uid]=function(e){var t;null!==r.componentNode&&(r.props.preventDefault&&e.preventDefault(),r.props.stopPropagation&&e.stopPropagation(),r.props.excludeScrollbar&&(t=e,document.documentElement.clientWidth<=t.clientX||document.documentElement.clientHeight<=t.clientY)||function(e,t,n){if(e===t)return!0;for(;e.parentNode||e.host;){if(e.parentNode&&Fb(e,t,n))return!0;e=e.parentNode||e.host}return e}(e.composed&&e.composedPath&&e.composedPath().shift()||e.target,r.componentNode,r.props.outsideClickIgnoreClass)===document&&r.__outsideClickHandler(e))},e.forEach((function(e){document.addEventListener(e,qb[r._uid],Wb(Mb(r),e))}))}},r.disableOnClickOutside=function(){delete zb[r._uid];var e=qb[r._uid];if(e&&"undefined"!=typeof document){var t=r.props.eventTypes;t.forEach||(t=[t]),t.forEach((function(t){return document.removeEventListener(t,e,Wb(Mb(r),t))})),delete qb[r._uid]}},r.getRef=function(e){return r.instanceRef=e},r._uid=Hb(),r}u=n,(i=c).prototype=Object.create(u.prototype),i.prototype.constructor=i,Db(i,u);var s=c.prototype;return s.getInstance=function(){if(e.prototype&&!e.prototype.isReactComponent)return this;var t=this.instanceRef;return t.getInstance?t.getInstance():t},s.componentDidMount=function(){if("undefined"!=typeof document&&document.createElement){var e=this.getInstance();if(t&&"function"==typeof t.handleClickOutside&&(this.__clickOutsideHandlerProp=t.handleClickOutside(e),"function"!=typeof this.__clickOutsideHandlerProp))throw new Error("WrappedComponent: "+a+" lacks a function for processing outside click events specified by the handleClickOutside config option.");this.componentNode=this.__getComponentNode(),this.props.disableOnClickOutside||this.enableOnClickOutside()}},s.componentDidUpdate=function(){this.componentNode=this.__getComponentNode()},s.componentWillUnmount=function(){this.disableOnClickOutside()},s.render=function(){var t=this.props;t.excludeScrollbar;var n=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(t,["excludeScrollbar"]);return e.prototype&&e.prototype.isReactComponent?n.ref=this.getRef:n.wrappedRef=this.getRef,n.disableOnClickOutside=this.disableOnClickOutside,n.enableOnClickOutside=this.enableOnClickOutside,(0,r.createElement)(e,n)},c}(r.Component),n.displayName="OnClickOutside("+a+")",n.defaultProps={eventTypes:["mousedown","touchstart"],excludeScrollbar:t&&t.excludeScrollbar||!1,outsideClickIgnoreClass:"ignore-react-onclickoutside",preventDefault:!1,stopPropagation:!1},n.getClass=function(){return e.getClass?e.getClass():e},i};function Yb(e){return(Yb="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var Zb;function $b(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Kb(e,t){return(Kb=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Qb(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Jb(e);if(t){var o=Jb(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Xb(this,n)}}function Xb(e,t){if(t&&("object"===Yb(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Jb(e){return(Jb=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var ew=function(t){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Kb(e,t)}(u,t);var n,o,i,a=Qb(u);function u(t){var n;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,u),(n=a.call(this,t)).handleOnClick=function(e){e.preventDefault(),n.setState((function(e){return{buttonIsActive:!e.buttonIsActive}}))},n.handleOnClickForLinks=function(t){var r,o;t.target&&"A"===t.target.tagName&&(L.Z.debug((0,e.f9)(Zb||(r=["Setting state of DropdownMenu to buttonIsActive to\n false, because a link inside the menu was clicked."],o||(o=r.slice(0)),Zb=Object.freeze(Object.defineProperties(r,{raw:{value:Object.freeze(o)}}))))),n.setState({buttonIsActive:!1}))},n.handleClickOutside=function(){n.setState({buttonIsActive:!1})},n.handleOnMouseEnter=function(){var e=n.props._window;e&&e.matchMedia("(hover)").matches&&n.setState({buttonIsActive:!0})},n.handleOnMouseLeave=function(){var e=n.props._window;e&&e.matchMedia("(hover)").matches&&n.setState({buttonIsActive:!1})},n.state={buttonIsActive:!1},n}return n=u,(o=[{key:"render",value:function(){var e=this.props,t=e.children,n=e.className,o=e.text;return r.createElement("div",{className:Ho()("DropdownMenu",n,{"DropdownMenu--active":this.state.buttonIsActive}),onClick:this.handleOnClickForLinks,onMouseEnter:this.handleOnMouseEnter,onMouseLeave:this.handleOnMouseLeave},r.createElement("button",{className:"DropdownMenu-button",onClick:this.handleOnClick,title:o,type:"button","aria-haspopup":"true"},r.createElement("span",{className:"DropdownMenu-button-text"},o),r.createElement(ac,{name:"inverted-caret"})),t&&r.createElement("ul",{className:"DropdownMenu-items","aria-hidden":!this.state.buttonIsActive,"aria-label":"submenu"},t))}}])&&$b(n.prototype,o),i&&$b(n,i),Object.defineProperty(n,"prototype",{writable:!1}),u}(r.Component);ew.defaultProps={_window:"undefined"!=typeof window?window:null};const tw=Vb(ew);function nw(e){return(nw="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}const rw=function(e){var t=e.children,n=e.className,o=e.onClick,i=e.title,a=e.detached,u=void 0!==a&&a,c=e.disabled,s=void 0!==c&&c,l="object"===nw(t),f=Ho()("DropdownMenuItem",{"DropdownMenuItem-section":!l&&!o,"DropdownMenuItem-link":l||o,"DropdownMenuItem--detached":u,"DropdownMenuItem--disabled":s},n);return r.createElement("li",{className:f},o?r.createElement("button",{disabled:s,onClick:o,title:i,type:"button"},t):t)};function ow(e){return(ow="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function iw(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function aw(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function uw(e,t){return(uw=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function cw(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=lw(e);if(t){var o=lw(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return sw(this,n)}}function sw(e,t){if(t&&("object"===ow(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function lw(e){return(lw=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var fw=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&uw(e,t)}(a,e);var t,n,o,i=cw(a);function a(){var e;iw(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).setClientApp=function(t){t.preventDefault();var n=e.props,r=n.dispatch,o=n.history,i=t.currentTarget.getAttribute("data-clientapp"),a=t.currentTarget.getAttribute("href");i&&r(wt(i)),a&&o.push(a)},e}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.className,n=e.clientApp,o=e.forBlog,i=e.i18n,a=e.viewContext;ce()(n===D.So,"SectionLinks included when clientApp is not Firefox");var u={prependClientApp:!o,prependLang:!o};return r.createElement("ul",{className:Ho()("SectionLinks",t)},r.createElement("li",null,r.createElement(wc,Object.assign({className:Ho()("SectionLinks-link","SectionLinks-link-extension",{"SectionLinks-link--active":a===D.Gz}),to:"/".concat(xn(D.Gz),"/")},u),i.gettext("Extensions"))),r.createElement("li",null,r.createElement(wc,Object.assign({className:Ho()("SectionLinks-link","SectionLinks-link-theme",{"SectionLinks-link--active":a===D.Yd}),to:"/".concat(xn(D.Yd),"/")},u),i.gettext("Themes"))),r.createElement("li",null,r.createElement(tw,{className:"SectionLinks-link SectionLinks-dropdown",text:i.gettext("More…")},r.createElement(r.Fragment,null,r.createElement(rw,{className:"SectionLinks-subheader"},i.gettext("for Firefox")),r.createElement(rw,{key:"dictionaries-and-language-packs"},r.createElement(wc,{className:Ho()("SectionLinks-dropdownlink",{"SectionLinks-dropdownlink--active":a===D.NI}),to:"/language-tools/"},i.gettext("Dictionaries & Language Packs"))),r.createElement(rw,{className:"SectionLinks-subheader"},i.gettext("Other Browser Sites")),r.createElement(rw,null,r.createElement(wc,{className:"SectionLinks-clientApp-".concat(D.wZ),"data-clientapp":D.wZ,onClick:this.setClientApp,prependClientApp:!1,to:"/".concat(D.wZ,"/")},i.gettext("Add-ons for Android")))))))}}])&&aw(t.prototype,n),o&&aw(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const pw=(0,Mo.qC)(No,(0,g.connect)((function(e){return{clientApp:e.api.clientApp,viewContext:e.viewContext.context}})),Eu())(fw);function dw(e){return(dw="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function hw(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function yw(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function mw(e,t){return(mw=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function vw(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=bw(e);if(t){var o=bw(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return gw(this,n)}}function gw(e,t){if(t&&("object"===dw(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function bw(e){return(bw=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var ww=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&mw(e,t)}(a,e);var t,n,o,i=vw(a);function a(){var e;hw(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).onClick=function(t){t.preventDefault(),t.stopPropagation();var n=e.props,r=n.api,o=n.handleLogIn,i=n.handleLogOut,a=n.location,u=n.siteUser;ce()(i,"handleLogOut() is undefined"),u?i({api:r}):o(a)},e}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.buttonType,n=e.className,o=e.i18n,i=e.logInText,a=e.logOutText,u=e.noIcon,c=e.siteIsReadOnly,s=e.siteUser,l=s?a||o.gettext("Log out"):i||o.gettext("Log in"),f=c?o.gettext("This action is currently unavailable. Please reload the\n page in a moment."):null;return r.createElement(Dc,{href:"#".concat(s?"logout":"login"),buttonType:t,className:n,disabled:c,onClick:this.onClick,title:f,micro:!0},u?null:r.createElement(ac,{name:"user-dark"}),l)}}])&&yw(t.prototype,n),o&&yw(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);ww.defaultProps={buttonType:"action",noIcon:!1};var Ow=function(e){return function(t){var n,r=t.api;return(n={api:r},$t({auth:!0,credentials:!0,endpoint:"accounts/session",method:"DELETE",apiState:n.api})).catch((function(e){L.Z.warn("Received error from the API while logging out: ".concat(e))})).then((function(){return e(Ze())}))}};const Ew=(0,Mo.qC)(No,(0,g.connect)((function(e,t){return{api:e.api,handleLogIn:t.handleLogIn||function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t._window,r=void 0===n?window:n;r.location.assign(Qt({location:e}))},siteIsReadOnly:e.site.readOnly,siteUser:Xe(e.users)}}),(function(e,t){return{handleLogOut:t.handleLogOut||Ow(e)}})),Eu())(ww);function _w(e){return(_w="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function xw(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Sw(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function jw(e,t){return(jw=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Pw(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Iw(e);if(t){var o=Iw(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return kw(this,n)}}function kw(e,t){if(t&&("object"===_w(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Iw(e){return(Iw=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Tw=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&jw(e,t)}(a,e);var t,n,o,i=Pw(a);function a(){var e;xw(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).handleLogOut=function(t){t.preventDefault(),e.props.handleLogOut({api:e.props.api})},e}return t=a,(n=[{key:"renderMenuOrAuthButton",value:function(){var e=this.props,t=e.i18n,n=e.isReviewer,o=e.loadedPageIsAnonymous,i=e.siteIsReadOnly,a=e.siteUser;return o?null:a?r.createElement(tw,{text:a.name,className:"Header-authenticate-button Header-button"},r.createElement(rw,null,t.gettext("My Account")),r.createElement(rw,null,r.createElement(wc,{className:"Header-user-menu-collections-link",to:"/collections/"},t.gettext("View My Collections"))),r.createElement(rw,null,r.createElement(wc,{className:"Header-user-menu-view-profile-link",to:a?"/user/".concat(a.id,"/"):null},t.gettext("View My Profile"))),r.createElement(rw,null,r.createElement(wc,{className:"Header-user-menu-edit-profile-link",to:a?"/users/edit":null},t.gettext("Edit My Profile"))),r.createElement(rw,null,t.gettext("Tools")),r.createElement(rw,null,r.createElement(wc,{href:"/developers/addon/submit/distribution",prependClientApp:!1},t.gettext("Submit a New Add-on"))),r.createElement(rw,null,r.createElement(wc,{href:"/developers/theme/submit",prependClientApp:!1},t.gettext("Submit a New Theme"))),r.createElement(rw,null,r.createElement(wc,{className:"Header-user-menu-developers-submissions-link",href:"/developers/addons/",prependClientApp:!1},t.gettext("Manage My Submissions"))),n&&r.createElement(rw,null,r.createElement(wc,{className:"Header-user-menu-reviewer-tools-link",href:"/reviewers/",prependClientApp:!1},t.gettext("Reviewer Tools"))),r.createElement(rw,{className:"Header-logout-button",detached:!0,disabled:i,onClick:this.handleLogOut,title:i?t.gettext("This action is currently unavailable.\n Please reload the page in a moment."):null},t.gettext("Log out"))):r.createElement(Ew,{buttonType:"none",className:"Header-authenticate-button Header-button",noIcon:!0})}},{key:"render",value:function(){var e=this.props,t=e._config,n=e.clientApp,o=e.forBlog,i=e.i18n,a=e.isAddonInstallPage,u=e.isHomePage,c=e.loadedPageIsAnonymous,s=e.location,l=e.userAgentInfo,f=r.createElement(wc,{className:"Header-title",to:"/",prependClientApp:!o,prependLang:!o},r.createElement("span",{className:"visually-hidden"},i.gettext("Firefox Browser Add-ons"))),p=Pf({userAgentInfo:l})?r.createElement(r.Fragment,null,r.createElement(wc,{className:"Header-blog-link Header-button",href:"/blog/",prependClientApp:!1,prependLang:!1},i.gettext("Firefox Add-ons Blog")),r.createElement(wc,{className:"Header-extension-workshop-link Header-button",href:"".concat(t.get("extensionWorkshopUrl"),"/").concat(fn({utm_content:"header-link",utm_campaign:null})),external:!0,prependClientApp:!1,prependLang:!1,target:"_blank",title:i.gettext("Learn how to create extensions and themes")},i.gettext("Extension Workshop")),r.createElement(wc,{className:"Header-developer-hub-link Header-button",href:"/developers/",external:!0,prependClientApp:!1,target:"_blank",title:i.gettext("Submit and manage extensions and themes")},i.gettext("Developer Hub"))):null;return r.createElement("header",{className:Ho()("Header",{"Header--loaded-page-is-anonymous":c})},a||o?null:r.createElement(eb,null),r.createElement("div",{className:"Header-wrapper"},r.createElement("div",{className:"Header-content"},u?r.createElement("h1",{className:"Header-title-wrapper"},f):f),n===D.So?r.createElement(pw,{className:"Header-SectionLinks",location:s,forBlog:o}):null,!o&&r.createElement(r.Fragment,null,r.createElement("div",{className:"Header-user-and-external-links"},p,this.renderMenuOrAuthButton()),r.createElement(Lb,{className:Ho()("Header-search-form",{"Header-search-form--desktop":n===D.So}),pathname:"/search/"}))))}}])&&Sw(t.prototype,n),o&&Sw(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);Tw.propTypes={_config:w().object,api:w().object.isRequired,clientApp:w().string.isRequired,handleLogOut:w().func.isRequired,i18n:w().object.isRequired,isAddonInstallPage:w().bool,isHomePage:w().bool,isReviewer:w().bool.isRequired,loadedPageIsAnonymous:w().bool.isRequired,location:w().object.isRequired,siteIsReadOnly:w().bool.isRequired,siteUser:w().object,userAgentInfo:w().object,forBlog:w().bool},Tw.defaultProps={_config:t.Z,forBlog:!1};const Rw=(0,Mo.qC)((0,g.connect)((function(e){return{api:e.api,clientApp:e.api.clientApp,isReviewer:tt(e),loadedPageIsAnonymous:e.site.loadedPageIsAnonymous,siteIsReadOnly:e.site.readOnly,siteUser:Xe(e.users),userAgentInfo:e.api.userAgentInfo}}),(function(e,t){return{handleLogOut:t.handleLogOut||Ow(e)}})),Eu())(Tw);function Cw(e){return(Cw="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Aw(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Nw(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Lw(e,t){return(Lw=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Dw(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Fw(e);if(t){var o=Fw(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Mw(this,n)}}function Mw(e,t){if(t&&("object"===Cw(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Fw(e){return(Fw=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Uw=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Lw(e,t)}(a,e);var t,n,o,i=Dw(a);function a(){return Aw(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e,t=this.props,n=t._correctedLocationForPlatform,o=t._isAndroidInstallable,i=t._isFirefoxForAndroid,a=t._isFirefoxForIOS,u=t.addon,c=t.className,s=t.clientApp,l=t.i18n,f=t.isHomePage,p=t.lang,d=t.location,h=t.userAgentInfo,y=n({clientApp:s,isHomePage:f,lang:p,location:d,userAgentInfo:h});return a(h)?e=l.gettext("Add-ons are not compatible with Firefox for iOS. Try installing them on Firefox for desktop."):u&&i(h)&&o({addon:u})?e=null:y===Af(p)?e=l.sprintf(l.gettext('To find add-ons compatible with Firefox for Android,\n <a href="%(newLocation)s">click here</a>.'),{newLocation:y}):u&&y?e=l.sprintf('This listing is not intended for this platform.\n <a href="%(newLocation)s">Browse add-ons for Firefox on desktop</a>.',{newLocation:y}):y&&(e=l.sprintf('To find add-ons compatible with Firefox on desktop,\n <a href="%(newLocation)s">visit our desktop site</a>.',{newLocation:y})),e?r.createElement("div",{className:Ho()("WrongPlatformWarning",c)},r.createElement(Jc,{id:"WrongPlatformWarning-Notice",type:Kc},r.createElement("span",{className:"WrongPlatformWarning-message",dangerouslySetInnerHTML:vn(e,["a"])}))):null}}])&&Nw(t.prototype,n),o&&Nw(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);Uw.defaultProps={_correctedLocationForPlatform:Nf,_isAndroidInstallable:Tf,_isFirefoxForAndroid:kf,_isFirefoxForIOS:If,isHomePage:!1};const Bw=(0,Mo.qC)(No,(0,g.connect)((function(e){return{clientApp:e.api.clientApp,lang:e.api.lang,userAgentInfo:e.api.userAgentInfo}})),Eu())(Uw);var Hw=a(37707),qw=a.n(Hw),zw=function(){var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(t,n)};return function(t,n){function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),Gw=function(){return(Gw=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)},Ww=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n};function Vw(e){var t=e.displayName||e.name,n=function(n){function o(){var e=null!==n&&n.apply(this,arguments)||this;return e.onChange=function(){e.forceUpdate()},e}return zw(o,n),o.prototype.listen=function(){this.props.cookies.addChangeListener(this.onChange)},o.prototype.unlisten=function(e){(e||this.props.cookies).removeChangeListener(this.onChange)},o.prototype.componentDidMount=function(){this.listen()},o.prototype.componentDidUpdate=function(e){e.cookies!==this.props.cookies&&(this.unlisten(e.cookies),this.listen())},o.prototype.componentWillUnmount=function(){this.unlisten()},o.prototype.render=function(){var t=this.props,n=t.forwardedRef,o=t.cookies,i=Ww(t,["forwardedRef","cookies"]),a=o.getAll();return r.createElement(e,Gw({},i,{ref:n,cookies:o,allCookies:a}))},o.displayName="withCookies("+t+")",o.WrappedComponent=e,o}(r.Component),o=r.forwardRef((function(e,t){return r.createElement(h,null,(function(o){return r.createElement(n,Gw({cookies:o},e,{forwardedRef:t}))}))}));return o.displayName=n.displayName,o.WrappedComponent=n.WrappedComponent,qw()(o,e)}a(77653);function Yw(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Zw(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Yw(Object(n),!0).forEach((function(t){$w(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Yw(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function $w(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Kw="STORE_EXPERIMENT_VARIANT",Qw={};function Xw(e){return(Xw="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var Jw=["_getVariant","_isExperimentEnabled"];function eO(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function tO(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function nO(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function rO(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function oO(e,t){return(oO=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function iO(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=uO(e);if(t){var o=uO(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return aO(this,n)}}function aO(e,t){if(t&&("object"===Xw(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function uO(e){return(uO=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function cO(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return sO(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return sO(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,u=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){u=!0,i=e},f:function(){try{a||null==n.return||n.return()}finally{if(u)throw i}}}}function sO(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var lO="frontend_active_experiments",fO="AMO Experiment Enrollment -",pO="notInExperiment",dO=/\d{8}_amo_.+/,hO=function(e){var t=e.randomizer,n=void 0===t?Math.random:t,r=e.variants;ce()(1===r.reduce((function(e,t){return e+t.percentage}),0),"The sum of all percentages in `variants` must be 1"),ce()(r.every((function(e){return e.id.length<=50})),"Variant ids must be no more than 50 characters long");var o,i,a=n(),u=0,c=cO(r);try{for(c.s();!(i=c.n()).done;){var s=i.value;if(o=u+s.percentage,a>u&&a<=o)return s.id;u=o}}catch(e){c.e(e)}finally{c.f()}throw new Error("Unable to allocate a user to a variant")},yO=function(e){var n=e._config,r=void 0===n?t.Z:n,o=e.id;return!0===(r.get("experiments")||{})[o]},mO={maxAge:2592e3,path:"/",secure:!0},vO="show-promo",gO=function(e){var t=e.clientApp,n=e.regionCode;return t===D.wZ||!["US","DE","FR"].includes(n)},bO={id:"20210714_amo_vpn_promo",variants:[{id:vO,percentage:.05},{id:"hide-promo",percentage:.05},{id:pO,percentage:.9}],shouldExcludeUser:function(e){var t=e.state.api,n=t.clientApp,r=t.regionCode;return gO({clientApp:n,regionCode:r})}},wO=a(424),OO=a.n(wO),EO=a(65117),_O=a.n(EO);function xO(e){return(xO="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function SO(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function jO(e,t){return(jO=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function PO(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=IO(e);if(t){var o=IO(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return kO(this,n)}}function kO(e,t){if(t&&("object"===xO(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function IO(e){return(IO=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var TO="VPNPromoImpressionCount",RO="VPN Promo Banner",CO=function(e){var t=e.getItem(TO),n=parseInt(t||0,10);return ce()(!Number.isNaN(n),"A non-number was stored in ".concat(TO,": ").concat(t)),n},AO=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&jO(e,t)}(a,e);var t,n,o,i=PO(a);function a(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),(t=i.call(this,e)).onInteract=function(e){var n=t.props,r=n._tracking,o=n._localStorage,i=n.cookies,a=CO(o);r.sendEvent({action:e,category:RO,label:String(a)}),o.removeItem(TO),t.setState({dismissed:!0});var u=i.get(lO);u[bO.id]=pO,i.set(lO,u,mO)},t.onButtonClick=function(){t.onInteract("vpn-promo-banner-click")},t.onDismiss=function(){t.onInteract("vpn-promo-banner-dismiss")},t.onImpression=function(){var e=t.props,n=e._tracking,r=e._localStorage;if(t.shouldShowBanner()){var o=CO(r)+1;n.sendEvent({action:"vpn-promo-banner-impression",category:RO,label:String(o)}),r.setItem(TO,o)}},t.state={dismissed:e.variant!==vO},t}return t=a,(n=[{key:"shouldShowBanner",value:function(){var e=this.props,t=e.clientApp,n=e.regionCode;return e.variant===vO&&!this.state.dismissed&&!gO({clientApp:t,regionCode:n})}},{key:"componentDidMount",value:function(){this.onImpression()}},{key:"componentDidUpdate",value:function(e){Vy()(this.props.location,e.location)||this.onImpression()}},{key:"render",value:function(){var e=this.props,t=e.addonIdentifier,n=e.i18n;if(!this.shouldShowBanner())return null;var o=n.gettext("Save 50% with a full year subscription"),i=n.gettext("Protect your online data—and choose a VPN subscription plan that works\n for you."),a="".concat("https://www.mozilla.org/products/vpn").concat(fn({utm_campaign:"amo-vpn-promo",utm_content:t}));return r.createElement("div",{className:"VPNPromoBanner"},r.createElement("div",{className:"VPNPromoBanner-wrapper"},r.createElement("img",{alt:"Mozilla VPN",className:"VPNPromoBanner-logo",src:OO()}),r.createElement("div",{className:"VPNPromoBanner-copy"},r.createElement("strong",null,o),r.createElement("span",null,i)),r.createElement("a",{className:"VPNPromoBanner-cta",href:a,onClick:this.onButtonClick},n.gettext("Get Mozilla VPN")),r.createElement(Dc,{className:"VPNPromoBanner-dismisser-button",onClick:this.onDismiss},r.createElement("img",{alt:"",src:_O()}))))}}])&&SO(t.prototype,n),o&&SO(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);AO.defaultProps={_tracking:pr,_localStorage:"undefined"!=typeof window?window.localStorage:{}};const NO=(0,Mo.qC)(No,Eu(),Vw,(0,g.connect)((function(e,t){var n=t.match.params.slug,r=la(e.addons,n);return{addonIdentifier:r&&String(r.id)||null,clientApp:e.api.clientApp,regionCode:e.api.regionCode}})))(AO);var LO,DO,MO,FO,UO,BO;const HO=(0,Mo.qC)(No,(0,g.connect)((function(e){return{clientApp:e.api.clientApp}})),(DO=(LO={experimentConfig:bO})._config,MO=void 0===DO?t.Z:DO,FO=LO._tracking,UO=void 0===FO?pr:FO,BO=LO.experimentConfig,function(e){var t=BO.cookieConfig,n=BO.id,o=BO.shouldExcludeUser,i=BO.variants;ce()(n,"id is required"),ce()(dO.test(n),"id must match the pattern YYYYMMDD_amo_experiment_id"),ce()(n.length<=50,"id must be no more than 50 characters long"),ce()(i,"variants is required");var a=function(o){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&oO(e,t)}(l,o);var a,u,c,s=iO(l);function l(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,l),(t=s.call(this,e)).variant=t.setupExperiment(e),t}return a=l,(u=[{key:"isEnabled",value:function(){return this.props._isExperimentEnabled({_config:MO,id:n})}},{key:"readVariantFromCookie",value:function(){return this.cookieIncludesExperiment()?this.getExperimentsFromCookie()[n]:null}},{key:"setupExperiment",value:function(e){var t=e._getVariant,r=e.dispatch,o=e.isUserExcluded,a=e.storedVariants;if(!this.isEnabled())return null;var u=this.readVariantFromCookie();if(!u){var c=a[n];u=c||(o?pO:t({variants:i})),this.cookieIncludesExperiment()||c||r(function(e){var t=e.id,n=e.variant;return{type:Kw,payload:{id:t,variant:n}}}({id:n,variant:u}))}return u}},{key:"componentDidMount",value:function(){for(var e=this.variant,r=this.props,o=r._isExperimentEnabled,i=r.cookies,a=e&&!this.cookieIncludesExperiment(),u=this.getExperimentsFromCookie(),c=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?tO(Object(n),!0).forEach((function(t){nO(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):tO(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({},u),s=!1,l=0,f=Object.keys(u);l<f.length;l++){var p=f[l];o({_config:MO,id:p})||(delete c[p],s=!0)}a&&(c[n]=e,e&&UO.sendEvent({_config:MO,action:e,category:[fO,n].join(" ")})),(s||a)&&i.set(lO,c,t||mO)}},{key:"getExperimentsFromCookie",value:function(){return this.props.cookies.get(lO)||{}}},{key:"cookieIncludesExperiment",value:function(){return Object.keys(this.getExperimentsFromCookie()).includes(n)}},{key:"render",value:function(){var t=this.props,o=(t._getVariant,t._isExperimentEnabled,eO(t,Jw)),i=this.readVariantFromCookie()||this.variant,a={experimentId:n,isExperimentEnabled:this.isEnabled(),isUserInExperiment:Boolean(i&&i!==pO),variant:i};return r.createElement(e,Object.assign({},a,o))}}])&&rO(a.prototype,u),c&&rO(a,c),Object.defineProperty(a,"prototype",{writable:!1}),l}(r.Component);return a.defaultProps={_getVariant:hO,_isExperimentEnabled:yO},a.displayName="WithExperiment(".concat(Rn(e),")"),(0,Mo.qC)(Vw,(0,g.connect)((function(e){return{isUserExcluded:Boolean(o&&o({state:e})),storedVariants:e.experiments}})))(a)}))((function(e){var n,o=e._config,i=void 0===o?t.Z:o,a=e._log,u=void 0===a?L.Z:a,c=e.children,s=e.clientApp,l=e.errorHandler,f=e.isAddonInstallPage,p=void 0!==f&&f,d=e.isHomePage,h=void 0!==d&&d,y=e.location,m=e.showVPNPromo,v=void 0!==m&&m,g=e.showWrongPlatformWarning,b=void 0===g||g,w=e.variant;if(l&&l.hasError()){401===l.capturedError.responseStatusCode&&D.Jp.includes(l.capturedError.code)?n=r.createElement(vg,null):401===l.capturedError.responseStatusCode||403===l.capturedError.responseStatusCode||404===l.capturedError.responseStatusCode?n=r.createElement(jg,null):451===l.capturedError.responseStatusCode&&(n=r.createElement(Lg,null));var O="Captured API Error: ".concat(l.capturedError.messages);n?u.debug(O):u.warn(O)}return r.createElement("div",{className:"Page-amo"},v&&i.get("enableFeatureVPNPromo")&&r.createElement(NO,{variant:w}),r.createElement(Rw,{isAddonInstallPage:p,isHomePage:h,location:y}),r.createElement("div",{className:"Page-content"},r.createElement("div",{className:Ho()("Page",{"Page-not-homepage":!h,"Page-no-hero-promo":s===D.wZ})},(!h||s===D.wZ)&&r.createElement(eg,null),b&&r.createElement(Bw,{className:"Page-WrongPlatformWarning",isHomePage:h}),n||c)),r.createElement(Jg,null))}));function qO(e){return(qO="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function zO(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function GO(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function WO(e,t){return(WO=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function VO(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=ZO(e);if(t){var o=ZO(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return YO(this,n)}}function YO(e,t){if(t&&("object"===qO(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function ZO(e){return(ZO=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function $O(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function KO(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?$O(Object(n),!0).forEach((function(t){QO(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):$O(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function QO(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var XO={showAllContent:!0,readMoreExpanded:!1},JO=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&WO(e,t)}(a,e);var t,n,o,i=VO(a);function a(){var e;zO(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).onClick=function(t){t.preventDefault(),e.props.setUIState({showAllContent:!0,readMoreExpanded:!0})},e}return t=a,(n=[{key:"componentDidMount",value:function(){var e=this.props,t=e._setUIState,n=e._truncateToMaxHeight,r=e.maxHeight,o=e.setUIState,i=e.uiState;i.readMoreExpanded||n({contents:this.contents,maxHeight:r,setUIState:t||o,uiState:i})}},{key:"componentDidUpdate",value:function(e){var t=e.contentId,n=this.props,r=n._setUIState,o=n._truncateToMaxHeight,i=n.contentId,a=n.maxHeight,u=n.setUIState,c=n.uiState;i&&t!==i&&this.resetUIState(),c.readMoreExpanded||o({contents:this.contents,maxHeight:a,setUIState:r||u,uiState:c})}},{key:"resetUIState",value:function(){this.props.setUIState(KO({},XO))}},{key:"render",value:function(){var e=this,t=this.props,n=t.children,o=t.className,i=t.header,a=t.id,u=t.i18n,c=t.uiState.showAllContent;ce()(n,"The children property is required"),ce()(a,"The id property is required");var s=r.createElement("a",{"aria-label":u.gettext("Expand to read more"),className:"ShowMoreCard-expand-link",href:"#show-more",onClick:this.onClick,dangerouslySetInnerHTML:vn(u.gettext('<span class="visually-hidden">Expand to</span> Read more'),["span"])});return r.createElement(js,{className:Ho()("ShowMoreCard",o,{"ShowMoreCard--expanded":c}),header:i,footerLink:c?null:s},r.createElement("div",{className:"ShowMoreCard-contents",ref:function(t){e.contents=t}},n))}}])&&GO(t.prototype,n),o&&GO(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);JO.defaultProps={_truncateToMaxHeight:function(e){var t=e.contents,n=e.maxHeight,r=e.setUIState,o=e.uiState;t&&o.showAllContent&&t.clientHeight>=n&&r(KO(KO({},o),{},{showAllContent:!1}))},maxHeight:150};const eE=(0,Mo.qC)(Eu(),Bu({fileName:"src/amo/components/ShowMoreCard/index.js",extractId:function(e){return e.id},initialState:XO,resetOnUnmount:!0}))(JO);a(68064);function tE(e){return(tE="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function nE(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function rE(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function oE(e,t){return(oE=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function iE(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=uE(e);if(t){var o=uE(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return aE(this,n)}}function aE(e,t){if(t&&("object"===tE(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function uE(e){return(uE=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var cE=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&oE(e,t)}(a,e);var t,n,o,i=iE(a);function a(){return nE(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.type,n=e.description;return r.createElement("li",{className:"Permission"},r.createElement(ac,{name:"permission-".concat(t.replace(/\./g,"-"))}),r.createElement("span",{className:"Permission-description"},n))}}])&&rE(t.prototype,n),o&&rE(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);function sE(e){return(sE="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function lE(e){return function(e){if(Array.isArray(e))return dE(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||pE(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function fE(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=pE(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,u=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){u=!0,i=e},f:function(){try{a||null==n.return||n.return()}finally{if(u)throw i}}}}function pE(e,t){if(e){if("string"==typeof e)return dE(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?dE(e,t):void 0}}function dE(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function hE(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function yE(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function mE(e,t){return(mE=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function vE(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=bE(e);if(t){var o=bE(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return gE(this,n)}}function gE(e,t){if(t&&("object"===sE(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function bE(e){return(bE=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var wE="domainMessageType",OE="siteMessageType",EE="allUrlsMessageType",_E=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&mE(e,t)}(a,e);var t,n,o,i=vE(a);function a(){return hE(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"getPermissionString",value:function(e){var t=e.messageType,n=e.param,r=this.props.i18n;switch(t){case EE:return r.gettext("Access your data for all websites");case wE:return r.sprintf(r.gettext("Access your data for sites in the %(param)s domain"),{param:n});case OE:return r.sprintf(r.gettext("Access your data for %(param)s"),{param:n});default:throw new Error("No matching string found for messageType: ".concat(t))}}},{key:"generateHostPermissions",value:function(e){var t,n=e.permissions,o=e.messageType,i=[],a=fE(n);try{for(a.s();!(t=a.n()).done;){var u=t.value;i.push(r.createElement(cE,{type:"hostPermission",description:this.getPermissionString({messageType:o,param:u}),key:u}))}}catch(e){a.e(e)}finally{a.f()}return i}},{key:"render",value:function(){var e,t=[],n=!1,o=[],i=[],a=fE(this.props.permissions);try{for(a.s();!(e=a.n()).done;){var u=e.value;if("<all_urls>"===u){n=!0;break}if(!u.startsWith("moz-extension:")){var c=/^[a-z*]+:\/\/([^/]+)\//.exec(u);c?"*"===c[1]?n=!0:c[1].startsWith("*.")?o.push(c[1].slice(2)):i.push(c[1]):L.Z.debug('Host permission string "'.concat(u,'" appears to be invalid.'))}}}catch(e){a.e(e)}finally{a.f()}var s=lE(new Set(o)),l=lE(new Set(i));return n?t.push(r.createElement(cE,{type:"hostPermission",description:this.getPermissionString({messageType:EE}),key:"allUrls"})):(t.push.apply(t,lE(this.generateHostPermissions({permissions:s,messageType:wE}))),t.push.apply(t,lE(this.generateHostPermissions({permissions:l,messageType:OE})))),r.createElement(r.Fragment,null,t)}}])&&yE(t.prototype,n),o&&yE(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const xE=(0,Mo.qC)(Eu())(_E);function SE(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return jE(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return jE(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,u=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){u=!0,i=e},f:function(){try{a||null==n.return||n.return()}finally{if(u)throw i}}}}function jE(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function PE(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}var kE=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.i18n=t,this.permissionStrings={bookmarks:t.gettext("Read and modify bookmarks"),browserSettings:t.gettext("Read and modify browser settings"),browsingData:t.gettext("Clear recent browsing history, cookies, and related data"),clipboardRead:t.gettext("Get data from the clipboard"),clipboardWrite:t.gettext("Input data to the clipboard"),devtools:t.gettext("Extend developer tools to access your data in open tabs"),downloads:t.gettext("Download files and read and modify the browser’s download history"),"downloads.open":t.gettext("Open files downloaded to your computer"),find:t.gettext("Read the text of all open tabs"),geolocation:t.gettext("Access your location"),history:t.gettext("Access browsing history"),management:t.gettext("Monitor extension usage and manage themes"),nativeMessaging:t.gettext("Exchange messages with programs other than Firefox"),notifications:t.gettext("Display notifications to you"),pkcs11:t.gettext("Provide cryptographic authentication services"),proxy:t.gettext("Control browser proxy settings"),privacy:t.gettext("Read and modify privacy settings"),sessions:t.gettext("Access recently closed tabs"),tabs:t.gettext("Access browser tabs"),tabHide:t.gettext("Hide and show browser tabs"),topSites:t.gettext("Access browsing history"),unlimitedStorage:t.gettext("Store unlimited amount of client-side data"),webNavigation:t.gettext("Access browser activity during navigation")}}var t,n,o;return t=e,(n=[{key:"getCurrentPermissions",value:function(e){var t=e.file,n={optional:[],required:[]};return t?(n.optional=t.optional_permissions,n.required=t.permissions,n):(L.Z.debug("getCurrentPermissions() called with no file"),n)}},{key:"classifyPermission",value:function(e){var t={type:"permissions",value:e};return/^(\w+)(?:\.(\w+)(?:\.\w+)*)?$/.exec(e)||(t={type:"hosts",value:e}),t}},{key:"formatPermissions",value:function(e){var t,n=[],o={hosts:[],permissions:[]},i=SE(e);try{for(i.s();!(t=i.n()).done;){var a=t.value,u=this.classifyPermission(a),c=u.type,s=u.value;o[c].push(s)}}catch(e){i.e(e)}finally{i.f()}var l="nativeMessaging";o.permissions.includes(l)&&n.push(r.createElement(cE,{type:l,description:this.permissionStrings.nativeMessaging,key:l}));var f,p=SE(o.permissions.slice(0).sort());try{for(p.s();!(f=p.n()).done;){var d=f.value;"nativeMessaging"!==d&&this.permissionStrings[d]&&n.push(r.createElement(cE,{type:d,description:this.permissionStrings[d],key:d}))}}catch(e){p.e(e)}finally{p.f()}return o.hosts.length&&n.push(r.createElement(xE,{permissions:o.hosts})),n}}])&&PE(t.prototype,n),o&&PE(t,o),Object.defineProperty(t,"prototype",{writable:!1}),e}();function IE(e){return(IE="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function TE(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function RE(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function CE(e,t){return(CE=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function AE(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=LE(e);if(t){var o=LE(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return NE(this,n)}}function NE(e,t){if(t&&("object"===IE(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function LE(e){return(LE=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var DE=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&CE(e,t)}(a,e);var t,n,o,i=AE(a);function a(){return TE(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.version,n=e.i18n,o=new kE(n);if(!t||!t.file)return null;var i=o.getCurrentPermissions({file:t.file});if(!i.optional.length&&!i.required.length)return null;var a=o.formatPermissions(i.optional),u=o.formatPermissions(i.required);if(!a.length&&!u.length)return null;var c=r.createElement("div",{className:"PermissionsCard-header"},n.gettext("Permissions"),r.createElement(wc,{className:"PermissionsCard-learn-more",href:"https://support.mozilla.org/kb/permission-request-messages-firefox-extensions",target:"_blank",externalDark:!0,prependClientApp:!1,prependLang:!1},n.gettext("Learn more")));return r.createElement(eE,{header:c,contentId:t.id,className:"PermissionsCard",id:"AddonDescription-permissions-card",maxHeight:300},u.length?r.createElement(r.Fragment,null,r.createElement("p",{className:"PermissionsCard-subhead--required"},n.gettext("This add-on needs to:")),r.createElement("ul",{className:"PermissionsCard-list--required"},u)):null,a.length?r.createElement(r.Fragment,null,r.createElement("p",{className:"PermissionsCard-subhead--optional"},n.gettext("This add-on may also ask to:")),r.createElement("ul",{className:"PermissionsCard-list--optional"},a)):null)}}])&&RE(t.prototype,n),o&&RE(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const ME=(0,Mo.qC)(Eu())(DE);const FE=(0,Mo.qC)(Eu())((function(e){var t=e.children,n=e.className,o=e.i18n,i=e.onSelectRating,a=e.rating,u=!i;return r.createElement("div",{className:Ho()("AddonReviewManagerRating",n)},r.createElement("span",null,o.gettext("Your star rating:")),r.createElement(id,{onSelectRating:i,rating:a,readOnly:u,styleSize:"small",yellowStars:!0}),t)}));const UE=function(e){var t=e.className,n=e.hideMessage,o=e.message,i=e.type,a={className:Ho()("RatingManagerNotice-savedRating",t,{"RatingManagerNotice-savedRating-hidden":n})};return i?r.createElement(Jc,Object.assign({type:i,light:!0},a),o):r.createElement("span",a,o)};var BE="src/amo/components/AddonReviewManager/index.js";function HE(e){return(HE="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function qE(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function zE(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function GE(e,t){return(GE=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function WE(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=YE(e);if(t){var o=YE(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return VE(this,n)}}function VE(e,t){if(t&&("object"===HE(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function YE(e){return(YE=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var ZE=function(e){return e.review.id.toString()},$E=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&GE(e,t)}(a,e);var t,n,o,i=WE(a);function a(){var e;qE(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).onSubmitRating=function(t){var n=e.props,r=n.errorHandler,o=n.dispatch,i=n.review;o(Li({score:t,errorHandlerId:r.id,reviewId:i.id}))},e.onSubmitReview=function(t){var n=t.text,r=e.props,o=r.errorHandler,i=r.dispatch,a=r.review;i(Li({body:n,errorHandlerId:o.id,reviewId:a.id}))},e}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.errorHandler,n=e.i18n,o=e.onCancel,i=e.review,a=e.flashMessage,u=e.puffyButtons,c=ie({text:n.gettext("Please follow our %(linkStart)sreview guidelines%(linkEnd)s."),replacements:[["linkStart","linkEnd",function(e){return r.createElement(wc,{key:"review-guide",prependClientApp:!1,to:"/review_guide"},e)}]]}),s=r.createElement("div",null,c),l=n.gettext("Write about your experience with this add-on."),f=n.gettext("Submit review"),p=n.gettext("Submitting review");return i.body&&(f=n.gettext("Update review"),p=n.gettext("Updating review")),r.createElement("div",{className:"AddonReviewManager"},t.renderErrorIfPresent(),r.createElement(FE,{onSelectRating:this.onSubmitRating,rating:a===Ui?void 0:i.score},r.createElement(UE,{className:"AddonReviewManager-savedRating",hideMessage:a!==Ui&&a!==Mi,message:a===Ui?n.gettext("Saving"):n.gettext("Saved")})),r.createElement(Zh,{dismissButtonText:n.gettext("Cancel"),formFooter:s,id:"".concat(Tn(BE),"-").concat(ZE(this.props)),isSubmitting:a===Bi,onDismiss:o,onSubmit:this.onSubmitReview,placeholder:l,puffyButtons:u,reverseButtonOrder:!0,submitButtonText:f,submitButtonInProgressText:p,text:i.body}))}}])&&zE(t.prototype,n),o&&zE(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);$E.defaultProps={puffyButtons:!1};const KE=(0,Mo.qC)((0,g.connect)((function(e){return{flashMessage:e.reviews.flashMessage}})),gs({fileName:BE,extractId:ZE}),Eu())($E);function QE(e){return(QE="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function XE(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function JE(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function e_(e,t){return(e_=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function t_(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=r_(e);if(t){var o=r_(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return n_(this,n)}}function n_(e,t){if(t&&("object"===QE(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function r_(e){return(r_=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var o_=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&e_(e,t)}(a,e);var t,n,o,i=t_(a);function a(){var e;XE(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).onClick=function(t){var n=e.props,r=n.errorHandler,o=n.dispatch,i=n.review,a=n.reason;t.preventDefault(),o(Ri({errorHandlerId:r.id,reason:a,reviewId:i.id}))},e}return t=a,(n=[{key:"renderControls",value:function(){var e=this.props,t=e.errorHandler,n=e.flagState,o=e.buttonText,i=e.wasFlaggedText;if(n){if(n.inProgress&&!t.hasError())return r.createElement(Zp,{minWidth:60});if(n.wasFlagged)return i}return r.createElement("button",{className:"FlagReview-button",onClick:this.onClick,type:"button"},o)}},{key:"render",value:function(){var e=this.props.errorHandler;return r.createElement("div",null,e.renderErrorIfPresent(),this.renderControls())}}])&&JE(t.prototype,n),o&&JE(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const i_=(0,Mo.qC)((0,g.connect)((function(e,t){var n={};if(t.review){var r=e.reviews.view[t.review.id];r&&r.flag&&r.flag.reason===t.reason&&(n=r.flag)}return{flagState:n}})),ms({name:"FlagReview",extractId:function(e){return String(e.review.id)}}))(o_);function a_(e){return(a_="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function u_(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function c_(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function s_(e,t){return(s_=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function l_(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=p_(e);if(t){var o=p_(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return f_(this,n)}}function f_(e,t){if(t&&("object"===a_(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function p_(e){return(p_=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var d_=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&s_(e,t)}(a,e);var t,n,o,i=l_(a);function a(){return u_(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.children,n=e.className;return r.createElement("li",{className:Ho()("ListItem",n)},t)}}])&&c_(t.prototype,n),o&&c_(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);function h_(e){return(h_="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function y_(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function m_(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function v_(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?m_(Object(n),!0).forEach((function(t){y_(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):m_(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function g_(e,t){if(null==e)return{};var n,r,o=(0,vh.Z)(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function b_(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function w_(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function O_(e,t,n){return t&&w_(e.prototype,t),n&&w_(e,n),e}var E_=a(40589);function __(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&(0,E_.Z)(e,t)}function x_(e){return(x_=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function S_(e,t){return!t||"object"!==h_(t)&&"function"!=typeof t?(0,Pm.Z)(e):t}function j_(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=x_(e);if(t){var o=x_(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return S_(this,n)}}var P_=function(e){return+setTimeout(e,16)},k_=function(e){return clearTimeout(e)};function I_(e){return P_(e)}function T_(e,t){return!!e&&e.contains(t)}function R_(e){return e instanceof HTMLElement?e:o.findDOMNode(e)}"undefined"!=typeof window&&"requestAnimationFrame"in window&&(P_=function(e){return window.requestAnimationFrame(e)},k_=function(e){return window.cancelAnimationFrame(e)}),I_.cancel=k_;var C_=a(2781);function A_(e,t){"function"==typeof e?e(t):"object"===h_(e)&&e&&"current"in e&&(e.current=t)}function N_(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return function(e){t.forEach((function(t){A_(t,e)}))}}function L_(e,t,n,r){var i=o.unstable_batchedUpdates?function(e){o.unstable_batchedUpdates(n,e)}:n;return e.addEventListener&&e.addEventListener(t,i,r),{remove:function(){e.removeEventListener&&e.removeEventListener(t,i)}}}function D_(){return!("undefined"==typeof window||!window.document||!window.document.createElement)}const M_=(0,r.forwardRef)((function(e,t){var n=e.didUpdate,i=e.getContainer,a=e.children,u=(0,r.useRef)();(0,r.useImperativeHandle)(t,(function(){return{}}));var c=(0,r.useRef)(!1);return!c.current&&D_()&&(u.current=i(),c.current=!0),(0,r.useEffect)((function(){null==n||n(e)})),(0,r.useEffect)((function(){return function(){var e,t;null===(e=u.current)||void 0===e||null===(t=e.parentNode)||void 0===t||t.removeChild(u.current)}}),[]),u.current?o.createPortal(a,u.current):null}));var F_=a(56355),U_=a.n(F_);function B_(e,t,n){return n?e[0]===t[0]:e[0]===t[0]&&e[1]===t[1]}function H_(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function q_(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e)){var n=[],r=!0,o=!1,i=void 0;try{for(var a,u=e[Symbol.iterator]();!(r=(a=u.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{r||null==u.return||u.return()}finally{if(o)throw i}}return n}}(e,t)||function(e,t){if(e){if("string"==typeof e)return H_(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?H_(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var z_=a(68365),G_=a.n(z_);function W_(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit".concat(e)]="webkit".concat(t),n["Moz".concat(e)]="moz".concat(t),n["ms".concat(e)]="MS".concat(t),n["O".concat(e)]="o".concat(t.toLowerCase()),n}var V_,Y_,Z_,$_=(V_=D_(),Y_="undefined"!=typeof window?window:{},Z_={animationend:W_("Animation","AnimationEnd"),transitionend:W_("Transition","TransitionEnd")},V_&&("AnimationEvent"in Y_||delete Z_.animationend.animation,"TransitionEvent"in Y_||delete Z_.transitionend.transition),Z_),K_={};if(D_()){var Q_=document.createElement("div");K_=Q_.style}var X_={};function J_(e){if(X_[e])return X_[e];var t=$_[e];if(t)for(var n=Object.keys(t),r=n.length,o=0;o<r;o+=1){var i=n[o];if(Object.prototype.hasOwnProperty.call(t,i)&&i in K_)return X_[e]=t[i],X_[e]}return""}var ex=J_("animationend"),tx=J_("transitionend"),nx=!(!ex||!tx),rx=ex||"animationend",ox=tx||"transitionend";function ix(e,t){return e?"object"===h_(e)?e[t.replace(/-\w/g,(function(e){return e[1].toUpperCase()}))]:"".concat(e,"-").concat(t):null}var ax="none",ux="appear",cx="enter",sx="leave",lx="none",fx="prepare",px="start",dx="active",hx="end";function yx(e){var t=(0,r.useRef)(!1),n=q_((0,r.useState)(e),2),o=n[0],i=n[1];return(0,r.useEffect)((function(){return function(){t.current=!0}}),[]),[o,function(e){t.current||i(e)}]}const mx=D_()?r.useLayoutEffect:r.useEffect;var vx=[fx,px,dx,hx];function gx(e){return e===dx||e===hx}const bx=function(e,t){var n=q_(r.useState(lx),2),o=n[0],i=n[1],a=q_(function(){var e=r.useRef(null);function t(){I_.cancel(e.current)}return r.useEffect((function(){return function(){t()}}),[]),[function n(r){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;t();var i=I_((function(){o<=1?r({isCanceled:function(){return i!==e.current}}):n(r,o-1)}));e.current=i},t]}(),2),u=a[0],c=a[1];return mx((function(){if(o!==lx&&o!==hx){var e=vx.indexOf(o),n=vx[e+1],r=t(o);false===r?i(n):u((function(e){function t(){e.isCanceled()||i(n)}!0===r?t():Promise.resolve(r).then(t)}))}}),[e,o]),r.useEffect((function(){return function(){c()}}),[]),[function(){i(fx)},o]};function wx(e,t,n,o){var i=o.motionEnter,a=void 0===i||i,u=o.motionAppear,c=void 0===u||u,s=o.motionLeave,l=void 0===s||s,f=o.motionDeadline,p=o.motionLeaveImmediately,d=o.onAppearPrepare,h=o.onEnterPrepare,y=o.onLeavePrepare,m=o.onAppearStart,v=o.onEnterStart,g=o.onLeaveStart,b=o.onAppearActive,w=o.onEnterActive,O=o.onLeaveActive,E=o.onAppearEnd,_=o.onEnterEnd,x=o.onLeaveEnd,S=o.onVisibleChanged,j=q_(yx(),2),P=j[0],k=j[1],I=q_(yx(ax),2),T=I[0],R=I[1],C=q_(yx(null),2),A=C[0],N=C[1],L=(0,r.useRef)(!1),D=(0,r.useRef)(null),M=(0,r.useRef)(!1),F=(0,r.useRef)(null);function U(){return n()||F.current}var B=(0,r.useRef)(!1);function H(e){var t,n=U();e&&!e.deadline&&e.target!==n||(T===ux&&B.current?t=null==E?void 0:E(n,e):T===cx&&B.current?t=null==_?void 0:_(n,e):T===sx&&B.current&&(t=null==x?void 0:x(n,e)),!1===t||M.current||(R(ax),N(null)))}var q=q_(function(e){var t=(0,r.useRef)(),n=(0,r.useRef)(e);n.current=e;var o=r.useCallback((function(e){n.current(e)}),[]);function i(e){e&&(e.removeEventListener(ox,o),e.removeEventListener(rx,o))}return r.useEffect((function(){return function(){i(t.current)}}),[]),[function(e){t.current&&t.current!==e&&i(t.current),e&&e!==t.current&&(e.addEventListener(ox,o),e.addEventListener(rx,o),t.current=e)},i]}(H),1)[0],z=r.useMemo((function(){var e,t,n;switch(T){case"appear":return y_(e={},fx,d),y_(e,px,m),y_(e,dx,b),e;case"enter":return y_(t={},fx,h),y_(t,px,v),y_(t,dx,w),t;case"leave":return y_(n={},fx,y),y_(n,px,g),y_(n,dx,O),n;default:return{}}}),[T]),G=q_(bx(T,(function(e){if(e===fx){var t=z.prepare;return!!t&&t(U())}var n;V in z&&N((null===(n=z[V])||void 0===n?void 0:n.call(z,U(),null))||null);return V===dx&&(q(U()),f>0&&(clearTimeout(D.current),D.current=setTimeout((function(){H({deadline:!0})}),f))),true})),2),W=G[0],V=G[1],Y=gx(V);B.current=Y,mx((function(){if(k(t),e){var n,r=L.current;L.current=!0,!r&&t&&c&&(n=ux),r&&t&&a&&(n=cx),(r&&!t&&l||!r&&p&&!t&&l)&&(n=sx),n&&(R(n),W())}}),[t]),(0,r.useEffect)((function(){(T===ux&&!c||T===cx&&!a||T===sx&&!l)&&R(ax)}),[c,a,l]),(0,r.useEffect)((function(){return function(){clearTimeout(D.current),M.current=!0}}),[]),(0,r.useEffect)((function(){void 0!==P&&T===ax&&(null==S||S(P))}),[P,T]);var Z=A;return z.prepare&&V===px&&(Z=v_({transition:"none"},Z)),[T,V,Z,null!=P?P:t]}const Ox=function(e){__(n,e);var t=j_(n);function n(){return b_(this,n),t.apply(this,arguments)}return O_(n,[{key:"render",value:function(){return this.props.children}}]),n}(r.Component);const Ex=function(e){var t=e;function n(e){return!(!e.motionName||!t)}"object"===h_(e)&&(t=e.transitionSupport);var o=r.forwardRef((function(e,t){var o=e.visible,i=void 0===o||o,a=e.removeOnLeave,u=void 0===a||a,c=e.forceRender,s=e.children,l=e.motionName,f=e.leavedClassName,p=e.eventProps,d=n(e),h=(0,r.useRef)(),y=(0,r.useRef)();var m=q_(wx(d,i,(function(){try{return R_(h.current||y.current)}catch(e){return null}}),e),4),v=m[0],g=m[1],b=m[2],w=m[3],O=(0,r.useRef)(t);O.current=t;var E,_=r.useCallback((function(e){h.current=e,A_(O.current,e)}),[]),x=v_(v_({},p),{},{visible:i});if(s)if(v!==ax&&n(e)){var S,j;g===fx?j="prepare":gx(g)?j="active":g===px&&(j="start"),E=s(v_(v_({},x),{},{className:G_()(ix(l,v),(S={},y_(S,ix(l,"".concat(v,"-").concat(j)),j),y_(S,l,"string"==typeof l),S)),style:b}),_)}else E=w?s(v_({},x),_):u?c?s(v_(v_({},x),{},{style:{display:"none"}}),_):null:s(v_(v_({},x),{},{className:f}),_);else E=null;return r.createElement(Ox,{ref:y},E)}));return o.displayName="CSSMotion",o}(nx);var _x="add",xx="keep",Sx="remove",jx="removed";function Px(e){var t;return v_(v_({},t=e&&"object"===h_(e)&&"key"in e?e:{key:e}),{},{key:String(t.key)})}function kx(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return e.map(Px)}function Ix(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=[],r=0,o=t.length,i=kx(e),a=kx(t);i.forEach((function(e){for(var t=!1,i=r;i<o;i+=1){var u=a[i];if(u.key===e.key){r<i&&(n=n.concat(a.slice(r,i).map((function(e){return v_(v_({},e),{},{status:_x})}))),r=i),n.push(v_(v_({},u),{},{status:xx})),r+=1,t=!0;break}}t||n.push(v_(v_({},e),{},{status:Sx}))})),r<o&&(n=n.concat(a.slice(r).map((function(e){return v_(v_({},e),{},{status:_x})}))));var u={};n.forEach((function(e){var t=e.key;u[t]=(u[t]||0)+1}));var c=Object.keys(u).filter((function(e){return u[e]>1}));return c.forEach((function(e){(n=n.filter((function(t){var n=t.key,r=t.status;return n!==e||r!==Sx}))).forEach((function(t){t.key===e&&(t.status=xx)}))})),n}var Tx=["eventProps","visible","children","motionName","motionAppear","motionEnter","motionLeave","motionLeaveImmediately","motionDeadline","removeOnLeave","leavedClassName","onAppearStart","onAppearActive","onAppearEnd","onEnterStart","onEnterActive","onEnterEnd","onLeaveStart","onLeaveActive","onLeaveEnd"];!function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Ex,n=function(e){__(o,e);var n=j_(o);function o(){var e;return b_(this,o),(e=n.apply(this,arguments)).state={keyEntities:[]},e.removeKey=function(t){e.setState((function(e){return{keyEntities:e.keyEntities.map((function(e){return e.key!==t?e:v_(v_({},e),{},{status:jx})}))}}))},e}return O_(o,[{key:"render",value:function(){var e=this,n=this.state.keyEntities,o=this.props,i=o.component,a=o.children,u=o.onVisibleChanged,c=g_(o,["component","children","onVisibleChanged"]),s=i||r.Fragment,l={};return Tx.forEach((function(e){l[e]=c[e],delete c[e]})),delete c.keys,r.createElement(s,Object.assign({},c),n.map((function(n){var o=n.status,i=g_(n,["status"]),c=o===_x||o===xx;return r.createElement(t,Object.assign({},l,{key:i.key,visible:c,eventProps:i,onVisibleChanged:function(t){null==u||u(t,{key:i.key}),t||e.removeKey(i.key)}}),a)})))}}],[{key:"getDerivedStateFromProps",value:function(e,t){var n=e.keys,r=t.keyEntities,o=kx(n);return{keyEntities:Ix(r,o).filter((function(e){var t=r.find((function(t){var n=t.key;return e.key===n}));return!t||t.status!==jx||e.status!==Sx}))}}}]),o}(r.Component);n.defaultProps={component:"div"}}(nx);const Rx=Ex;function Cx(e){var t=e.prefixCls,n=e.motion,r=e.animation,o=e.transitionName;return n||(r?{motionName:"".concat(t,"-").concat(r)}:o?{motionName:o}:null)}function Ax(e){var t=e.prefixCls,n=e.visible,o=e.zIndex,i=e.mask,a=e.maskMotion,u=e.maskAnimation,c=e.maskTransitionName;if(!i)return null;var s={};return(a||c||u)&&(s=v_({motionAppear:!0},Cx({motion:a,prefixCls:t,transitionName:c,animation:u}))),r.createElement(Rx,(0,mh.Z)({},s,{visible:n,removeOnLeave:!0}),(function(e){var n=e.className;return r.createElement("div",{style:{zIndex:o},className:U_()("".concat(t,"-mask"),n)})}))}function Nx(e){return(Nx="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Lx(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Dx(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}var Mx,Fx={Webkit:"-webkit-",Moz:"-moz-",ms:"-ms-",O:"-o-"};function Ux(){if(void 0!==Mx)return Mx;Mx="";var e=document.createElement("p").style;for(var t in Fx)t+"Transform"in e&&(Mx=t);return Mx}function Bx(){return Ux()?"".concat(Ux(),"TransitionProperty"):"transitionProperty"}function Hx(){return Ux()?"".concat(Ux(),"Transform"):"transform"}function qx(e,t){var n=Bx();n&&(e.style[n]=t,"transitionProperty"!==n&&(e.style.transitionProperty=t))}function zx(e,t){var n=Hx();n&&(e.style[n]=t,"transform"!==n&&(e.style.transform=t))}var Gx,Wx=/matrix\((.*)\)/,Vx=/matrix3d\((.*)\)/;function Yx(e){var t=e.style.display;e.style.display="none",e.offsetHeight,e.style.display=t}function Zx(e,t,n){var r=n;if("object"!==Nx(t))return void 0!==r?("number"==typeof r&&(r="".concat(r,"px")),void(e.style[t]=r)):Gx(e,t);for(var o in t)t.hasOwnProperty(o)&&Zx(e,o,t[o])}function $x(e,t){var n=e["page".concat(t?"Y":"X","Offset")],r="scroll".concat(t?"Top":"Left");if("number"!=typeof n){var o=e.document;"number"!=typeof(n=o.documentElement[r])&&(n=o.body[r])}return n}function Kx(e){return $x(e)}function Qx(e){return $x(e,!0)}function Xx(e){var t=function(e){var t,n,r,o=e.ownerDocument,i=o.body,a=o&&o.documentElement;return n=(t=e.getBoundingClientRect()).left,r=t.top,{left:n-=a.clientLeft||i.clientLeft||0,top:r-=a.clientTop||i.clientTop||0}}(e),n=e.ownerDocument,r=n.defaultView||n.parentWindow;return t.left+=Kx(r),t.top+=Qx(r),t}function Jx(e){return null!=e&&e==e.window}function eS(e){return Jx(e)?e.document:9===e.nodeType?e:e.ownerDocument}var tS=new RegExp("^(".concat(/[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,")(?!px)[a-z%]+$"),"i"),nS=/^(top|right|bottom|left)$/;function rS(e,t){return"left"===e?t.useCssRight?"right":e:t.useCssBottom?"bottom":e}function oS(e){return"left"===e?"right":"right"===e?"left":"top"===e?"bottom":"bottom"===e?"top":void 0}function iS(e,t,n){"static"===Zx(e,"position")&&(e.style.position="relative");var r=-999,o=-999,i=rS("left",n),a=rS("top",n),u=oS(i),c=oS(a);"left"!==i&&(r=999),"top"!==a&&(o=999);var s,l="",f=Xx(e);("left"in t||"top"in t)&&(l=(s=e).style.transitionProperty||s.style[Bx()]||"",qx(e,"none")),"left"in t&&(e.style[u]="",e.style[i]="".concat(r,"px")),"top"in t&&(e.style[c]="",e.style[a]="".concat(o,"px")),Yx(e);var p=Xx(e),d={};for(var h in t)if(t.hasOwnProperty(h)){var y=rS(h,n),m="left"===h?r:o,v=f[h]-p[h];d[y]=y===h?m+v:m-v}Zx(e,d),Yx(e),("left"in t||"top"in t)&&qx(e,l);var g={};for(var b in t)if(t.hasOwnProperty(b)){var w=rS(b,n),O=t[b]-f[b];g[w]=b===w?d[w]+O:d[w]-O}Zx(e,g)}function aS(e,t){var n=Xx(e),r=function(e){var t=window.getComputedStyle(e,null),n=t.getPropertyValue("transform")||t.getPropertyValue(Hx());if(n&&"none"!==n){var r=n.replace(/[^0-9\-.,]/g,"").split(",");return{x:parseFloat(r[12]||r[4],0),y:parseFloat(r[13]||r[5],0)}}return{x:0,y:0}}(e),o={x:r.x,y:r.y};"left"in t&&(o.x=r.x+t.left-n.left),"top"in t&&(o.y=r.y+t.top-n.top),function(e,t){var n=window.getComputedStyle(e,null),r=n.getPropertyValue("transform")||n.getPropertyValue(Hx());if(r&&"none"!==r){var o,i=r.match(Wx);i?((o=(i=i[1]).split(",").map((function(e){return parseFloat(e,10)})))[4]=t.x,o[5]=t.y,zx(e,"matrix(".concat(o.join(","),")"))):((o=r.match(Vx)[1].split(",").map((function(e){return parseFloat(e,10)})))[12]=t.x,o[13]=t.y,zx(e,"matrix3d(".concat(o.join(","),")")))}else zx(e,"translateX(".concat(t.x,"px) translateY(").concat(t.y,"px) translateZ(0)"))}(e,o)}function uS(e,t){for(var n=0;n<e.length;n++)t(e[n])}function cS(e){return"border-box"===Gx(e,"boxSizing")}"undefined"!=typeof window&&(Gx=window.getComputedStyle?function(e,t,n){var r=n,o="",i=eS(e);return(r=r||i.defaultView.getComputedStyle(e,null))&&(o=r.getPropertyValue(t)||r[t]),o}:function(e,t){var n=e.currentStyle&&e.currentStyle[t];if(tS.test(n)&&!nS.test(t)){var r=e.style,o=r.left,i=e.runtimeStyle.left;e.runtimeStyle.left=e.currentStyle.left,r.left="fontSize"===t?"1em":n||0,n=r.pixelLeft+"px",r.left=o,e.runtimeStyle.left=i}return""===n?"auto":n});var sS=["margin","border","padding"];function lS(e,t,n){var r,o={},i=e.style;for(r in t)t.hasOwnProperty(r)&&(o[r]=i[r],i[r]=t[r]);for(r in n.call(e),t)t.hasOwnProperty(r)&&(i[r]=o[r])}function fS(e,t,n){var r,o,i,a=0;for(o=0;o<t.length;o++)if(r=t[o])for(i=0;i<n.length;i++){var u=void 0;u="border"===r?"".concat(r).concat(n[i],"Width"):r+n[i],a+=parseFloat(Gx(e,u))||0}return a}var pS={getParent:function(e){var t=e;do{t=11===t.nodeType&&t.host?t.host:t.parentNode}while(t&&1!==t.nodeType&&9!==t.nodeType);return t}};function dS(e,t,n){var r=n;if(Jx(e))return"width"===t?pS.viewportWidth(e):pS.viewportHeight(e);if(9===e.nodeType)return"width"===t?pS.docWidth(e):pS.docHeight(e);var o="width"===t?["Left","Right"]:["Top","Bottom"],i="width"===t?e.getBoundingClientRect().width:e.getBoundingClientRect().height,a=(Gx(e),cS(e)),u=0;(null==i||i<=0)&&(i=void 0,(null==(u=Gx(e,t))||Number(u)<0)&&(u=e.style[t]||0),u=parseFloat(u)||0),void 0===r&&(r=a?1:-1);var c=void 0!==i||a,s=i||u;return-1===r?c?s-fS(e,["border","padding"],o):u:c?1===r?s:s+(2===r?-fS(e,["border"],o):fS(e,["margin"],o)):u+fS(e,sS.slice(r),o)}uS(["Width","Height"],(function(e){pS["doc".concat(e)]=function(t){var n=t.document;return Math.max(n.documentElement["scroll".concat(e)],n.body["scroll".concat(e)],pS["viewport".concat(e)](n))},pS["viewport".concat(e)]=function(t){var n="client".concat(e),r=t.document,o=r.body,i=r.documentElement[n];return"CSS1Compat"===r.compatMode&&i||o&&o[n]||i}}));var hS={position:"absolute",visibility:"hidden",display:"block"};function yS(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var r,o=t[0];return 0!==o.offsetWidth?r=dS.apply(void 0,t):lS(o,hS,(function(){r=dS.apply(void 0,t)})),r}function mS(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e}uS(["width","height"],(function(e){var t=e.charAt(0).toUpperCase()+e.slice(1);pS["outer".concat(t)]=function(t,n){return t&&yS(t,e,n?0:1)};var n="width"===e?["Left","Right"]:["Top","Bottom"];pS[e]=function(t,r){var o=r;if(void 0===o)return t&&yS(t,e,-1);if(t){Gx(t);return cS(t)&&(o+=fS(t,["padding","border"],n)),Zx(t,e,o)}}}));var vS={getWindow:function(e){if(e&&e.document&&e.setTimeout)return e;var t=e.ownerDocument||e;return t.defaultView||t.parentWindow},getDocument:eS,offset:function(e,t,n){if(void 0===t)return Xx(e);!function(e,t,n){if(n.ignoreShake){var r=Xx(e),o=r.left.toFixed(0),i=r.top.toFixed(0),a=t.left.toFixed(0),u=t.top.toFixed(0);if(o===a&&i===u)return}n.useCssRight||n.useCssBottom?iS(e,t,n):n.useCssTransform&&Hx()in document.body.style?aS(e,t):iS(e,t,n)}(e,t,n||{})},isWindow:Jx,each:uS,css:Zx,clone:function(e){var t,n={};for(t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);if(e.overflow)for(t in e)e.hasOwnProperty(t)&&(n.overflow[t]=e.overflow[t]);return n},mix:mS,getWindowScrollLeft:function(e){return Kx(e)},getWindowScrollTop:function(e){return Qx(e)},merge:function(){for(var e={},t=0;t<arguments.length;t++)vS.mix(e,t<0||arguments.length<=t?void 0:arguments[t]);return e},viewportWidth:0,viewportHeight:0};mS(vS,pS);var gS=vS.getParent;function bS(e){if(vS.isWindow(e)||9===e.nodeType)return null;var t,n=vS.getDocument(e).body,r=vS.css(e,"position");if(!("fixed"===r||"absolute"===r))return"html"===e.nodeName.toLowerCase()?null:gS(e);for(t=gS(e);t&&t!==n&&9!==t.nodeType;t=gS(t))if("static"!==(r=vS.css(t,"position")))return t;return null}var wS=vS.getParent;function OS(e,t){for(var n={left:0,right:1/0,top:0,bottom:1/0},r=bS(e),o=vS.getDocument(e),i=o.defaultView||o.parentWindow,a=o.body,u=o.documentElement;r;){if(-1!==navigator.userAgent.indexOf("MSIE")&&0===r.clientWidth||r===a||r===u||"visible"===vS.css(r,"overflow")){if(r===a||r===u)break}else{var c=vS.offset(r);c.left+=r.clientLeft,c.top+=r.clientTop,n.top=Math.max(n.top,c.top),n.right=Math.min(n.right,c.left+r.clientWidth),n.bottom=Math.min(n.bottom,c.top+r.clientHeight),n.left=Math.max(n.left,c.left)}r=bS(r)}var s=null;vS.isWindow(e)||9===e.nodeType||(s=e.style.position,"absolute"===vS.css(e,"position")&&(e.style.position="fixed"));var l=vS.getWindowScrollLeft(i),f=vS.getWindowScrollTop(i),p=vS.viewportWidth(i),d=vS.viewportHeight(i),h=u.scrollWidth,y=u.scrollHeight,m=window.getComputedStyle(a);if("hidden"===m.overflowX&&(h=i.innerWidth),"hidden"===m.overflowY&&(y=i.innerHeight),e.style&&(e.style.position=s),t||function(e){if(vS.isWindow(e)||9===e.nodeType)return!1;var t=vS.getDocument(e).body,n=null;for(n=wS(e);n&&n!==t;n=wS(n))if("fixed"===vS.css(n,"position"))return!0;return!1}(e))n.left=Math.max(n.left,l),n.top=Math.max(n.top,f),n.right=Math.min(n.right,l+p),n.bottom=Math.min(n.bottom,f+d);else{var v=Math.max(h,l+p);n.right=Math.min(n.right,v);var g=Math.max(y,f+d);n.bottom=Math.min(n.bottom,g)}return n.top>=0&&n.left>=0&&n.bottom>n.top&&n.right>n.left?n:null}function ES(e){var t,n,r;if(vS.isWindow(e)||9===e.nodeType){var o=vS.getWindow(e);t={left:vS.getWindowScrollLeft(o),top:vS.getWindowScrollTop(o)},n=vS.viewportWidth(o),r=vS.viewportHeight(o)}else t=vS.offset(e),n=vS.outerWidth(e),r=vS.outerHeight(e);return t.width=n,t.height=r,t}function _S(e,t){var n=t.charAt(0),r=t.charAt(1),o=e.width,i=e.height,a=e.left,u=e.top;return"c"===n?u+=i/2:"b"===n&&(u+=i),"c"===r?a+=o/2:"r"===r&&(a+=o),{left:a,top:u}}function xS(e,t,n,r,o){var i=_S(t,n[1]),a=_S(e,n[0]),u=[a.left-i.left,a.top-i.top];return{left:Math.round(e.left-u[0]+r[0]-o[0]),top:Math.round(e.top-u[1]+r[1]-o[1])}}function SS(e,t,n){return e.left<n.left||e.left+t.width>n.right}function jS(e,t,n){return e.top<n.top||e.top+t.height>n.bottom}function PS(e,t,n){var r=[];return vS.each(e,(function(e){r.push(e.replace(t,(function(e){return n[e]})))})),r}function kS(e,t){return e[t]=-e[t],e}function IS(e,t){return(/%$/.test(e)?parseInt(e.substring(0,e.length-1),10)/100*t:parseInt(e,10))||0}function TS(e,t){e[0]=IS(e[0],t.width),e[1]=IS(e[1],t.height)}function RS(e,t,n,r){var o=n.points,i=n.offset||[0,0],a=n.targetOffset||[0,0],u=n.overflow,c=n.source||e;i=[].concat(i),a=[].concat(a);var s={},l=0,f=OS(c,!(!(u=u||{})||!u.alwaysByViewport)),p=ES(c);TS(i,p),TS(a,t);var d=xS(p,t,o,i,a),h=vS.merge(p,d);if(f&&(u.adjustX||u.adjustY)&&r){if(u.adjustX&&SS(d,p,f)){var y=PS(o,/[lr]/gi,{l:"r",r:"l"}),m=kS(i,0),v=kS(a,0);(function(e,t,n){return e.left>n.right||e.left+t.width<n.left})(xS(p,t,y,m,v),p,f)||(l=1,o=y,i=m,a=v)}if(u.adjustY&&jS(d,p,f)){var g=PS(o,/[tb]/gi,{t:"b",b:"t"}),b=kS(i,1),w=kS(a,1);(function(e,t,n){return e.top>n.bottom||e.top+t.height<n.top})(xS(p,t,g,b,w),p,f)||(l=1,o=g,i=b,a=w)}l&&(d=xS(p,t,o,i,a),vS.mix(h,d));var O=SS(d,p,f),E=jS(d,p,f);if(O||E){var _=o;O&&(_=PS(o,/[lr]/gi,{l:"r",r:"l"})),E&&(_=PS(o,/[tb]/gi,{t:"b",b:"t"})),o=_,i=n.offset||[0,0],a=n.targetOffset||[0,0]}s.adjustX=u.adjustX&&O,s.adjustY=u.adjustY&&E,(s.adjustX||s.adjustY)&&(h=function(e,t,n,r){var o=vS.clone(e),i={width:t.width,height:t.height};return r.adjustX&&o.left<n.left&&(o.left=n.left),r.resizeWidth&&o.left>=n.left&&o.left+i.width>n.right&&(i.width-=o.left+i.width-n.right),r.adjustX&&o.left+i.width>n.right&&(o.left=Math.max(n.right-i.width,n.left)),r.adjustY&&o.top<n.top&&(o.top=n.top),r.resizeHeight&&o.top>=n.top&&o.top+i.height>n.bottom&&(i.height-=o.top+i.height-n.bottom),r.adjustY&&o.top+i.height>n.bottom&&(o.top=Math.max(n.bottom-i.height,n.top)),vS.mix(o,i)}(d,p,f,s))}return h.width!==p.width&&vS.css(c,"width",vS.width(c)+h.width-p.width),h.height!==p.height&&vS.css(c,"height",vS.height(c)+h.height-p.height),vS.offset(c,{left:h.left,top:h.top},{useCssRight:n.useCssRight,useCssBottom:n.useCssBottom,useCssTransform:n.useCssTransform,ignoreShake:n.ignoreShake}),{points:o,offset:i,targetOffset:a,overflow:s}}function CS(e,t,n){var r=n.target||t;return RS(e,ES(r),n,!function(e,t){var n=OS(e,t),r=ES(e);return!n||r.left+r.width<=n.left||r.top+r.height<=n.top||r.left>=n.right||r.top>=n.bottom}(r,n.overflow&&n.overflow.alwaysByViewport))}function AS(e,t,n){var r,o,i=vS.getDocument(e),a=i.defaultView||i.parentWindow,u=vS.getWindowScrollLeft(a),c=vS.getWindowScrollTop(a),s=vS.viewportWidth(a),l=vS.viewportHeight(a);r="pageX"in t?t.pageX:u+t.clientX,o="pageY"in t?t.pageY:c+t.clientY;var f=r>=0&&r<=u+s&&o>=0&&o<=c+l;return RS(e,{left:r,top:o,width:0,height:0},function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Dx(n,!0).forEach((function(t){Lx(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Dx(n).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({},n,{points:[n.points[0],"cc"]}),f)}CS.__getOffsetParent=bS,CS.__getVisibleRectForElement=OS;var NS=function(){if("undefined"!=typeof Map)return Map;function e(e,t){var n=-1;return e.some((function(e,r){return e[0]===t&&(n=r,!0)})),n}return function(){function t(){this.__entries__=[]}return Object.defineProperty(t.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),t.prototype.get=function(t){var n=e(this.__entries__,t),r=this.__entries__[n];return r&&r[1]},t.prototype.set=function(t,n){var r=e(this.__entries__,t);~r?this.__entries__[r][1]=n:this.__entries__.push([t,n])},t.prototype.delete=function(t){var n=this.__entries__,r=e(n,t);~r&&n.splice(r,1)},t.prototype.has=function(t){return!!~e(this.__entries__,t)},t.prototype.clear=function(){this.__entries__.splice(0)},t.prototype.forEach=function(e,t){void 0===t&&(t=null);for(var n=0,r=this.__entries__;n<r.length;n++){var o=r[n];e.call(t,o[1],o[0])}},t}()}(),LS="undefined"!=typeof window&&"undefined"!=typeof document&&window.document===document,DS=void 0!==a.g&&a.g.Math===Math?a.g:"undefined"!=typeof self&&self.Math===Math?self:"undefined"!=typeof window&&window.Math===Math?window:Function("return this")(),MS="function"==typeof requestAnimationFrame?requestAnimationFrame.bind(DS):function(e){return setTimeout((function(){return e(Date.now())}),1e3/60)};var FS=["top","right","bottom","left","width","height","size","weight"],US="undefined"!=typeof MutationObserver,BS=function(){function e(){this.connected_=!1,this.mutationEventsAdded_=!1,this.mutationsObserver_=null,this.observers_=[],this.onTransitionEnd_=this.onTransitionEnd_.bind(this),this.refresh=function(e,t){var n=!1,r=!1,o=0;function i(){n&&(n=!1,e()),r&&u()}function a(){MS(i)}function u(){var e=Date.now();if(n){if(e-o<2)return;r=!0}else n=!0,r=!1,setTimeout(a,t);o=e}return u}(this.refresh.bind(this),20)}return e.prototype.addObserver=function(e){~this.observers_.indexOf(e)||this.observers_.push(e),this.connected_||this.connect_()},e.prototype.removeObserver=function(e){var t=this.observers_,n=t.indexOf(e);~n&&t.splice(n,1),!t.length&&this.connected_&&this.disconnect_()},e.prototype.refresh=function(){this.updateObservers_()&&this.refresh()},e.prototype.updateObservers_=function(){var e=this.observers_.filter((function(e){return e.gatherActive(),e.hasActive()}));return e.forEach((function(e){return e.broadcastActive()})),e.length>0},e.prototype.connect_=function(){LS&&!this.connected_&&(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),US?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){LS&&this.connected_&&(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(e){var t=e.propertyName,n=void 0===t?"":t;FS.some((function(e){return!!~n.indexOf(e)}))&&this.refresh()},e.getInstance=function(){return this.instance_||(this.instance_=new e),this.instance_},e.instance_=null,e}(),HS=function(e,t){for(var n=0,r=Object.keys(t);n<r.length;n++){var o=r[n];Object.defineProperty(e,o,{value:t[o],enumerable:!1,writable:!1,configurable:!0})}return e},qS=function(e){return e&&e.ownerDocument&&e.ownerDocument.defaultView||DS},zS=$S(0,0,0,0);function GS(e){return parseFloat(e)||0}function WS(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];return t.reduce((function(t,n){return t+GS(e["border-"+n+"-width"])}),0)}function VS(e){var t=e.clientWidth,n=e.clientHeight;if(!t&&!n)return zS;var r=qS(e).getComputedStyle(e),o=function(e){for(var t={},n=0,r=["top","right","bottom","left"];n<r.length;n++){var o=r[n],i=e["padding-"+o];t[o]=GS(i)}return t}(r),i=o.left+o.right,a=o.top+o.bottom,u=GS(r.width),c=GS(r.height);if("border-box"===r.boxSizing&&(Math.round(u+i)!==t&&(u-=WS(r,"left","right")+i),Math.round(c+a)!==n&&(c-=WS(r,"top","bottom")+a)),!function(e){return e===qS(e).document.documentElement}(e)){var s=Math.round(u+i)-t,l=Math.round(c+a)-n;1!==Math.abs(s)&&(u-=s),1!==Math.abs(l)&&(c-=l)}return $S(o.left,o.top,u,c)}var YS="undefined"!=typeof SVGGraphicsElement?function(e){return e instanceof qS(e).SVGGraphicsElement}:function(e){return e instanceof qS(e).SVGElement&&"function"==typeof e.getBBox};function ZS(e){return LS?YS(e)?function(e){var t=e.getBBox();return $S(0,0,t.width,t.height)}(e):VS(e):zS}function $S(e,t,n,r){return{x:e,y:t,width:n,height:r}}var KS=function(){function e(e){this.broadcastWidth=0,this.broadcastHeight=0,this.contentRect_=$S(0,0,0,0),this.target=e}return e.prototype.isActive=function(){var e=ZS(this.target);return this.contentRect_=e,e.width!==this.broadcastWidth||e.height!==this.broadcastHeight},e.prototype.broadcastRect=function(){var e=this.contentRect_;return this.broadcastWidth=e.width,this.broadcastHeight=e.height,e},e}(),QS=function(e,t){var n=function(e){var t=e.x,n=e.y,r=e.width,o=e.height,i="undefined"!=typeof DOMRectReadOnly?DOMRectReadOnly:Object,a=Object.create(i.prototype);return HS(a,{x:t,y:n,width:r,height:o,top:n,right:t+r,bottom:o+n,left:t}),a}(t);HS(this,{target:e,contentRect:n})},XS=function(){function e(e,t,n){if(this.activeObservations_=[],this.observations_=new NS,"function"!=typeof e)throw new TypeError("The callback provided as parameter 1 is not a function.");this.callback_=e,this.controller_=t,this.callbackCtx_=n}return e.prototype.observe=function(e){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if("undefined"!=typeof Element&&Element instanceof Object){if(!(e instanceof qS(e).Element))throw new TypeError('parameter 1 is not of type "Element".');var t=this.observations_;t.has(e)||(t.set(e,new KS(e)),this.controller_.addObserver(this),this.controller_.refresh())}},e.prototype.unobserve=function(e){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if("undefined"!=typeof Element&&Element instanceof Object){if(!(e instanceof qS(e).Element))throw new TypeError('parameter 1 is not of type "Element".');var t=this.observations_;t.has(e)&&(t.delete(e),t.size||this.controller_.removeObserver(this))}},e.prototype.disconnect=function(){this.clearActive(),this.observations_.clear(),this.controller_.removeObserver(this)},e.prototype.gatherActive=function(){var e=this;this.clearActive(),this.observations_.forEach((function(t){t.isActive()&&e.activeObservations_.push(t)}))},e.prototype.broadcastActive=function(){if(this.hasActive()){var e=this.callbackCtx_,t=this.activeObservations_.map((function(e){return new QS(e.target,e.broadcastRect())}));this.callback_.call(e,t,e),this.clearActive()}},e.prototype.clearActive=function(){this.activeObservations_.splice(0)},e.prototype.hasActive=function(){return this.activeObservations_.length>0},e}(),JS="undefined"!=typeof WeakMap?new WeakMap:new NS,ej=function e(t){if(!(this instanceof e))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var n=BS.getInstance(),r=new XS(t,n,this);JS.set(this,r)};["observe","unobserve","disconnect"].forEach((function(e){ej.prototype[e]=function(){var t;return(t=JS.get(this))[e].apply(t,arguments)}}));const tj=void 0!==DS.ResizeObserver?DS.ResizeObserver:ej;function nj(e,t){var n=null,r=null;var o=new tj((function(e){var o=q_(e,1)[0].target;if(document.documentElement.contains(o)){var i=o.getBoundingClientRect(),a=i.width,u=i.height,c=Math.floor(a),s=Math.floor(u);n===c&&r===s||Promise.resolve().then((function(){t({width:c,height:s})})),n=c,r=s}}));return e&&o.observe(e),function(){o.disconnect()}}function rj(e){return"function"!=typeof e?null:e()}function oj(e){return"object"===h_(e)&&e?e:null}var ij=r.forwardRef((function(e,t){var n=e.children,o=e.disabled,i=e.target,a=e.align,u=e.onAlign,c=e.monitorWindowResize,s=e.monitorBufferTime,l=void 0===s?0:s,f=r.useRef({}),p=r.useRef(),d=r.Children.only(n),h=r.useRef({});h.current.disabled=o,h.current.target=i,h.current.onAlign=u;var y=q_(function(e,t){var n=r.useRef(!1),o=r.useRef(null);function i(){window.clearTimeout(o.current)}return[function r(a){if(n.current&&!0!==a)i(),o.current=window.setTimeout((function(){n.current=!1,r()}),t);else{if(!1===e())return;n.current=!0,i(),o.current=window.setTimeout((function(){n.current=!1}),t)}},function(){n.current=!1,i()}]}((function(){var e=h.current,t=e.disabled,n=e.target,r=e.onAlign;if(!t&&n){var o,i=p.current,u=rj(n),c=oj(n);f.current.element=u,f.current.point=c;var s=document.activeElement;return u&&function(e){if(!e)return!1;if(e.offsetParent)return!0;if(e.getBBox){var t=e.getBBox();if(t.width||t.height)return!0}if(e.getBoundingClientRect){var n=e.getBoundingClientRect();if(n.width||n.height)return!0}return!1}(u)?o=CS(i,u,a):c&&(o=AS(i,c,a)),function(e,t){e!==document.activeElement&&T_(t,e)&&"function"==typeof e.focus&&e.focus()}(s,i),r&&o&&r(i,o),!0}return!1}),l),2),m=y[0],v=y[1],g=r.useRef({cancel:function(){}}),b=r.useRef({cancel:function(){}});r.useEffect((function(){var e,t,n=rj(i),r=oj(i);p.current!==b.current.element&&(b.current.cancel(),b.current.element=p.current,b.current.cancel=nj(p.current,m)),f.current.element===n&&((e=f.current.point)===(t=r)||e&&t&&("pageX"in t&&"pageY"in t?e.pageX===t.pageX&&e.pageY===t.pageY:"clientX"in t&&"clientY"in t&&e.clientX===t.clientX&&e.clientY===t.clientY))||(m(),g.current.element!==n&&(g.current.cancel(),g.current.element=n,g.current.cancel=nj(n,m)))})),r.useEffect((function(){o?v():m()}),[o]);var w=r.useRef(null);return r.useEffect((function(){c?w.current||(w.current=L_(window,"resize",m)):w.current&&(w.current.remove(),w.current=null)}),[c]),r.useEffect((function(){return function(){g.current.cancel(),b.current.cancel(),w.current&&w.current.remove(),v()}}),[]),r.useImperativeHandle(t,(function(){return{forceAlign:function(){return m(!0)}}})),r.isValidElement(d)&&(d=r.cloneElement(d,{ref:N_(d.ref,p)})),d}));ij.displayName="Align";const aj=ij;var uj=a(66534),cj=a.n(uj);function sj(e,t,n,r,o,i,a){try{var u=e[i](a),c=u.value}catch(e){return void n(e)}u.done?t(c):Promise.resolve(c).then(r,o)}function lj(e){return function(){var t=this,n=arguments;return new Promise((function(r,o){var i=e.apply(t,n);function a(e){sj(i,r,o,a,u,"next",e)}function u(e){sj(i,r,o,a,u,"throw",e)}a(void 0)}))}}var fj=["measure","align",null,"motion"];var pj=r.forwardRef((function(e,t){var n=e.visible,o=e.prefixCls,i=e.className,a=e.style,u=e.children,c=e.zIndex,s=e.stretch,l=e.destroyPopupOnHide,f=e.align,p=e.point,d=e.getRootDomNode,h=e.getClassNameFromAlign,y=e.onAlign,m=e.onMouseEnter,v=e.onMouseLeave,g=e.onMouseDown,b=e.onTouchStart,w=(0,r.useRef)(),O=(0,r.useRef)(),E=q_((0,r.useState)(),2),_=E[0],x=E[1],S=function(e){var t=q_(r.useState({width:0,height:0}),2),n=t[0],o=t[1];return[r.useMemo((function(){var t={};if(e){var r=n.width,o=n.height;-1!==e.indexOf("height")&&o?t.height=o:-1!==e.indexOf("minHeight")&&o&&(t.minHeight=o),-1!==e.indexOf("width")&&r?t.width=r:-1!==e.indexOf("minWidth")&&r&&(t.minWidth=r)}return t}),[e,n]),function(e){o({width:e.offsetWidth,height:e.offsetHeight})}]}(s),j=q_(S,2),P=j[0],k=j[1];var I=function(e,t){var n=q_((0,r.useState)(null),2),o=n[0],i=n[1],a=(0,r.useRef)(),u=(0,r.useRef)(!1);function c(e){u.current||i(e)}function s(){I_.cancel(a.current)}return(0,r.useEffect)((function(){c("measure")}),[e]),(0,r.useEffect)((function(){switch(o){case"measure":t()}o&&(a.current=I_(lj(cj().mark((function e(){var t,n;return cj().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:t=fj.indexOf(o),(n=fj[t+1])&&-1!==t&&c(n);case 3:case"end":return e.stop()}}),e)})))))}),[o]),(0,r.useEffect)((function(){return function(){u.current=!0,s()}}),[]),[o,function(e){s(),a.current=I_((function(){c((function(e){switch(o){case"align":return"motion";case"motion":return"stable"}return e})),null==e||e()}))}]}(n,(function(){s&&k(d())})),T=q_(I,2),R=T[0],C=T[1],A=(0,r.useRef)();function N(){var e;null===(e=w.current)||void 0===e||e.forceAlign()}function L(e,t){if("align"===R){var n=h(t);x(n),_!==n?Promise.resolve().then((function(){N()})):C((function(){var e;null===(e=A.current)||void 0===e||e.call(A)})),null==y||y(e,t)}}var D=v_({},Cx(e));function M(){return new Promise((function(e){A.current=e}))}["onAppearEnd","onEnterEnd","onLeaveEnd"].forEach((function(e){var t=D[e];D[e]=function(e,n){return C(),null==t?void 0:t(e,n)}})),r.useEffect((function(){D.motionName||"motion"!==R||C()}),[D.motionName,R]),r.useImperativeHandle(t,(function(){return{forceAlign:N,getElement:function(){return O.current}}}));var F=v_(v_(v_({},P),{},{zIndex:c},a),{},{opacity:"motion"!==R&&"stable"!==R&&n?0:void 0,pointerEvents:"stable"===R?void 0:"none"}),U=!0;!(null==f?void 0:f.points)||"align"!==R&&"stable"!==R||(U=!1);var B=u;return r.Children.count(u)>1&&(B=r.createElement("div",{className:"".concat(o,"-content")},u)),r.createElement(Rx,(0,mh.Z)({visible:n,ref:O,leavedClassName:"".concat(o,"-hidden")},D,{onAppearPrepare:M,onEnterPrepare:M,removeOnLeave:l}),(function(e,t){var n=e.className,a=e.style,u=U_()(o,i,_,n);return r.createElement(aj,{target:p||d,key:"popup",ref:w,monitorWindowResize:!0,disabled:U,align:f,onAlign:L},r.createElement("div",{ref:t,className:u,onMouseEnter:m,onMouseLeave:v,onMouseDown:g,onTouchStart:b,style:v_(v_({},a),F)},B))}))}));pj.displayName="PopupInner";const dj=pj;var hj=r.forwardRef((function(e,t){var n=e.prefixCls,o=e.visible,i=e.zIndex,a=e.children,u=e.mobile,c=(u=void 0===u?{}:u).popupClassName,s=u.popupStyle,l=u.popupMotion,f=void 0===l?{}:l,p=u.popupRender,d=r.useRef();r.useImperativeHandle(t,(function(){return{forceAlign:function(){},getElement:function(){return d.current}}}));var h=v_({zIndex:i},s),y=a;return r.Children.count(a)>1&&(y=r.createElement("div",{className:"".concat(n,"-content")},a)),p&&(y=p(y)),r.createElement(Rx,(0,mh.Z)({visible:o,ref:d,removeOnLeave:!0},f),(function(e,t){var o=e.className,i=e.style,a=U_()(n,c,o);return r.createElement("div",{ref:t,className:a,style:v_(v_({},i),h)},y)}))}));hj.displayName="MobilePopupInner";const yj=hj;var mj=r.forwardRef((function(e,t){var n=e.visible,o=e.mobile,i=g_(e,["visible","mobile"]),a=q_((0,r.useState)(n),2),u=a[0],c=a[1],s=q_((0,r.useState)(!1),2),l=s[0],f=s[1],p=v_(v_({},i),{},{visible:u});(0,r.useEffect)((function(){c(n),n&&o&&f(function(){if("undefined"==typeof navigator||"undefined"==typeof window)return!1;var e=navigator.userAgent||navigator.vendor||window.opera;return!(!/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(e)&&!/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(e.substr(0,4)))}())}),[n,o]);var d=l?r.createElement(yj,(0,mh.Z)({},p,{mobile:o,ref:t})):r.createElement(dj,(0,mh.Z)({},p,{ref:t}));return r.createElement("div",null,r.createElement(Ax,p),d)}));mj.displayName="Popup";const vj=mj;const gj=r.createContext(null);function bj(){}function wj(){return""}function Oj(e){return e?e.ownerDocument:window.document}var Ej=["onClick","onMouseDown","onTouchStart","onMouseEnter","onMouseLeave","onFocus","onBlur","onContextMenu"];const _j=(xj=M_,(Sj=function(e){__(n,e);var t=j_(n);function n(e){var i,a;return b_(this,n),(i=t.call(this,e)).popupRef=r.createRef(),i.triggerRef=r.createRef(),i.onMouseEnter=function(e){var t=i.props.mouseEnterDelay;i.fireEvents("onMouseEnter",e),i.delaySetPopupVisible(!0,t,t?null:e)},i.onMouseMove=function(e){i.fireEvents("onMouseMove",e),i.setPoint(e)},i.onMouseLeave=function(e){i.fireEvents("onMouseLeave",e),i.delaySetPopupVisible(!1,i.props.mouseLeaveDelay)},i.onPopupMouseEnter=function(){i.clearDelayTimer()},i.onPopupMouseLeave=function(e){var t;e.relatedTarget&&!e.relatedTarget.setTimeout&&T_(null===(t=i.popupRef.current)||void 0===t?void 0:t.getElement(),e.relatedTarget)||i.delaySetPopupVisible(!1,i.props.mouseLeaveDelay)},i.onFocus=function(e){i.fireEvents("onFocus",e),i.clearDelayTimer(),i.isFocusToShow()&&(i.focusTime=Date.now(),i.delaySetPopupVisible(!0,i.props.focusDelay))},i.onMouseDown=function(e){i.fireEvents("onMouseDown",e),i.preClickTime=Date.now()},i.onTouchStart=function(e){i.fireEvents("onTouchStart",e),i.preTouchTime=Date.now()},i.onBlur=function(e){i.fireEvents("onBlur",e),i.clearDelayTimer(),i.isBlurToHide()&&i.delaySetPopupVisible(!1,i.props.blurDelay)},i.onContextMenu=function(e){e.preventDefault(),i.fireEvents("onContextMenu",e),i.setPopupVisible(!0,e)},i.onContextMenuClose=function(){i.isContextMenuToShow()&&i.close()},i.onClick=function(e){if(i.fireEvents("onClick",e),i.focusTime){var t;if(i.preClickTime&&i.preTouchTime?t=Math.min(i.preClickTime,i.preTouchTime):i.preClickTime?t=i.preClickTime:i.preTouchTime&&(t=i.preTouchTime),Math.abs(t-i.focusTime)<20)return;i.focusTime=0}i.preClickTime=0,i.preTouchTime=0,i.isClickToShow()&&(i.isClickToHide()||i.isBlurToHide())&&e&&e.preventDefault&&e.preventDefault();var n=!i.state.popupVisible;(i.isClickToHide()&&!n||n&&i.isClickToShow())&&i.setPopupVisible(!i.state.popupVisible,e)},i.onPopupMouseDown=function(){var e;i.hasPopupMouseDown=!0,clearTimeout(i.mouseDownTimeout),i.mouseDownTimeout=window.setTimeout((function(){i.hasPopupMouseDown=!1}),0),i.context&&(e=i.context).onPopupMouseDown.apply(e,arguments)},i.onDocumentClick=function(e){if(!i.props.mask||i.props.maskClosable){var t=e.target,n=i.getRootDomNode(),r=i.getPopupDomNode();T_(n,t)||T_(r,t)||i.hasPopupMouseDown||i.close()}},i.getRootDomNode=function(){var e=i.props.getTriggerDOMNode;if(e)return e(i.triggerRef.current);try{var t=R_(i.triggerRef.current);if(t)return t}catch(e){}return o.findDOMNode((0,Pm.Z)(i))},i.getPopupClassNameFromAlign=function(e){var t=[],n=i.props,r=n.popupPlacement,o=n.builtinPlacements,a=n.prefixCls,u=n.alignPoint,c=n.getPopupClassNameFromAlign;return r&&o&&t.push(function(e,t,n,r){for(var o=n.points,i=Object.keys(e),a=0;a<i.length;a+=1){var u=i[a];if(B_(e[u].points,o,r))return"".concat(t,"-placement-").concat(u)}return""}(o,a,e,u)),c&&t.push(c(e)),t.join(" ")},i.getComponent=function(){var e=i.props,t=e.prefixCls,n=e.destroyPopupOnHide,o=e.popupClassName,a=e.onPopupAlign,u=e.popupMotion,c=e.popupAnimation,s=e.popupTransitionName,l=e.popupStyle,f=e.mask,p=e.maskAnimation,d=e.maskTransitionName,h=e.maskMotion,y=e.zIndex,m=e.popup,v=e.stretch,g=e.alignPoint,b=e.mobile,w=i.state,O=w.popupVisible,E=w.point,_=i.getPopupAlign(),x={};return i.isMouseEnterToShow()&&(x.onMouseEnter=i.onPopupMouseEnter),i.isMouseLeaveToHide()&&(x.onMouseLeave=i.onPopupMouseLeave),x.onMouseDown=i.onPopupMouseDown,x.onTouchStart=i.onPopupMouseDown,r.createElement(vj,(0,mh.Z)({prefixCls:t,destroyPopupOnHide:n,visible:O,point:g&&E,className:o,align:_,onAlign:a,animation:c,getClassNameFromAlign:i.getPopupClassNameFromAlign},x,{stretch:v,getRootDomNode:i.getRootDomNode,style:l,mask:f,zIndex:y,transitionName:s,maskAnimation:p,maskTransitionName:d,maskMotion:h,ref:i.popupRef,motion:u,mobile:b}),"function"==typeof m?m():m)},i.attachParent=function(e){I_.cancel(i.attachId);var t,n=i.props,r=n.getPopupContainer,o=n.getDocument,a=i.getRootDomNode();r?(a||0===r.length)&&(t=r(a)):t=o(i.getRootDomNode()).body,t?t.appendChild(e):i.attachId=I_((function(){i.attachParent(e)}))},i.getContainer=function(){var e=(0,i.props.getDocument)(i.getRootDomNode()).createElement("div");return e.style.position="absolute",e.style.top="0",e.style.left="0",e.style.width="100%",i.attachParent(e),e},i.setPoint=function(e){i.props.alignPoint&&e&&i.setState({point:{pageX:e.pageX,pageY:e.pageY}})},i.handlePortalUpdate=function(){i.state.prevPopupVisible!==i.state.popupVisible&&i.props.afterPopupVisibleChange(i.state.popupVisible)},a="popupVisible"in e?!!e.popupVisible:!!e.defaultPopupVisible,i.state={prevPopupVisible:a,popupVisible:a},Ej.forEach((function(e){i["fire".concat(e)]=function(t){i.fireEvents(e,t)}})),i}return O_(n,[{key:"componentDidMount",value:function(){this.componentDidUpdate()}},{key:"componentDidUpdate",value:function(){var e,t=this.props;if(this.state.popupVisible)return this.clickOutsideHandler||!this.isClickToHide()&&!this.isContextMenuToShow()||(e=t.getDocument(this.getRootDomNode()),this.clickOutsideHandler=L_(e,"mousedown",this.onDocumentClick)),this.touchOutsideHandler||(e=e||t.getDocument(this.getRootDomNode()),this.touchOutsideHandler=L_(e,"touchstart",this.onDocumentClick)),!this.contextMenuOutsideHandler1&&this.isContextMenuToShow()&&(e=e||t.getDocument(this.getRootDomNode()),this.contextMenuOutsideHandler1=L_(e,"scroll",this.onContextMenuClose)),void(!this.contextMenuOutsideHandler2&&this.isContextMenuToShow()&&(this.contextMenuOutsideHandler2=L_(window,"blur",this.onContextMenuClose)));this.clearOutsideHandler()}},{key:"componentWillUnmount",value:function(){this.clearDelayTimer(),this.clearOutsideHandler(),clearTimeout(this.mouseDownTimeout),I_.cancel(this.attachId)}},{key:"getPopupDomNode",value:function(){var e;return(null===(e=this.popupRef.current)||void 0===e?void 0:e.getElement())||null}},{key:"getPopupAlign",value:function(){var e=this.props,t=e.popupPlacement,n=e.popupAlign,r=e.builtinPlacements;return t&&r?function(e,t,n){return v_(v_({},e[t]||{}),n)}(r,t,n):n}},{key:"setPopupVisible",value:function(e,t){var n=this.props.alignPoint,r=this.state.popupVisible;this.clearDelayTimer(),r!==e&&("popupVisible"in this.props||this.setState({popupVisible:e,prevPopupVisible:r}),this.props.onPopupVisibleChange(e)),n&&t&&e&&this.setPoint(t)}},{key:"delaySetPopupVisible",value:function(e,t,n){var r=this,o=1e3*t;if(this.clearDelayTimer(),o){var i=n?{pageX:n.pageX,pageY:n.pageY}:null;this.delayTimer=window.setTimeout((function(){r.setPopupVisible(e,i),r.clearDelayTimer()}),o)}else this.setPopupVisible(e,n)}},{key:"clearDelayTimer",value:function(){this.delayTimer&&(clearTimeout(this.delayTimer),this.delayTimer=null)}},{key:"clearOutsideHandler",value:function(){this.clickOutsideHandler&&(this.clickOutsideHandler.remove(),this.clickOutsideHandler=null),this.contextMenuOutsideHandler1&&(this.contextMenuOutsideHandler1.remove(),this.contextMenuOutsideHandler1=null),this.contextMenuOutsideHandler2&&(this.contextMenuOutsideHandler2.remove(),this.contextMenuOutsideHandler2=null),this.touchOutsideHandler&&(this.touchOutsideHandler.remove(),this.touchOutsideHandler=null)}},{key:"createTwoChains",value:function(e){var t=this.props.children.props,n=this.props;return t[e]&&n[e]?this["fire".concat(e)]:t[e]||n[e]}},{key:"isClickToShow",value:function(){var e=this.props,t=e.action,n=e.showAction;return-1!==t.indexOf("click")||-1!==n.indexOf("click")}},{key:"isContextMenuToShow",value:function(){var e=this.props,t=e.action,n=e.showAction;return-1!==t.indexOf("contextMenu")||-1!==n.indexOf("contextMenu")}},{key:"isClickToHide",value:function(){var e=this.props,t=e.action,n=e.hideAction;return-1!==t.indexOf("click")||-1!==n.indexOf("click")}},{key:"isMouseEnterToShow",value:function(){var e=this.props,t=e.action,n=e.showAction;return-1!==t.indexOf("hover")||-1!==n.indexOf("mouseEnter")}},{key:"isMouseLeaveToHide",value:function(){var e=this.props,t=e.action,n=e.hideAction;return-1!==t.indexOf("hover")||-1!==n.indexOf("mouseLeave")}},{key:"isFocusToShow",value:function(){var e=this.props,t=e.action,n=e.showAction;return-1!==t.indexOf("focus")||-1!==n.indexOf("focus")}},{key:"isBlurToHide",value:function(){var e=this.props,t=e.action,n=e.hideAction;return-1!==t.indexOf("focus")||-1!==n.indexOf("blur")}},{key:"forcePopupAlign",value:function(){var e;this.state.popupVisible&&(null===(e=this.popupRef.current)||void 0===e||e.forceAlign())}},{key:"fireEvents",value:function(e,t){var n=this.props.children.props[e];n&&n(t);var r=this.props[e];r&&r(t)}},{key:"close",value:function(){this.setPopupVisible(!1)}},{key:"render",value:function(){var e=this.state.popupVisible,t=this.props,n=t.children,o=t.forceRender,i=t.alignPoint,a=t.className,u=t.autoDestroy,c=r.Children.only(n),s={key:"trigger"};this.isContextMenuToShow()?s.onContextMenu=this.onContextMenu:s.onContextMenu=this.createTwoChains("onContextMenu"),this.isClickToHide()||this.isClickToShow()?(s.onClick=this.onClick,s.onMouseDown=this.onMouseDown,s.onTouchStart=this.onTouchStart):(s.onClick=this.createTwoChains("onClick"),s.onMouseDown=this.createTwoChains("onMouseDown"),s.onTouchStart=this.createTwoChains("onTouchStart")),this.isMouseEnterToShow()?(s.onMouseEnter=this.onMouseEnter,i&&(s.onMouseMove=this.onMouseMove)):s.onMouseEnter=this.createTwoChains("onMouseEnter"),this.isMouseLeaveToHide()?s.onMouseLeave=this.onMouseLeave:s.onMouseLeave=this.createTwoChains("onMouseLeave"),this.isFocusToShow()||this.isBlurToHide()?(s.onFocus=this.onFocus,s.onBlur=this.onBlur):(s.onFocus=this.createTwoChains("onFocus"),s.onBlur=this.createTwoChains("onBlur"));var l=U_()(c&&c.props&&c.props.className,a);l&&(s.className=l);var f,p,d,h,y=v_({},s);f=c,"function"==typeof(h=(0,C_.isMemo)(f)?f.type.type:f.type)&&!(null===(p=h.prototype)||void 0===p?void 0:p.render)||"function"==typeof f&&!(null===(d=f.prototype)||void 0===d?void 0:d.render)||(y.ref=N_(this.triggerRef,c.ref));var m,v=r.cloneElement(c,y);return(e||this.popupRef.current||o)&&(m=r.createElement(xj,{key:"portal",getContainer:this.getContainer,didUpdate:this.handlePortalUpdate},this.getComponent())),!e&&u&&(m=null),r.createElement(gj.Provider,{value:{onPopupMouseDown:this.onPopupMouseDown}},v,m)}}],[{key:"getDerivedStateFromProps",value:function(e,t){var n=e.popupVisible,r={};return void 0!==n&&t.popupVisible!==n&&(r.popupVisible=n,r.prevPopupVisible=t.popupVisible),r}}]),n}(r.Component)).contextType=gj,Sj.defaultProps={prefixCls:"rc-trigger-popup",getPopupClassNameFromAlign:wj,getDocument:Oj,onPopupVisibleChange:bj,afterPopupVisibleChange:bj,onPopupAlign:bj,popupClassName:"",mouseEnterDelay:0,mouseLeaveDelay:.1,focusDelay:0,blurDelay:.15,popupStyle:{},destroyPopupOnHide:!1,popupAlign:{},defaultPopupVisible:!1,mask:!1,maskClosable:!0,action:[],showAction:[],hideAction:[],autoDestroy:!1},Sj);var xj,Sj,jj={adjustX:1,adjustY:1},Pj=[0,0],kj={left:{points:["cr","cl"],overflow:jj,offset:[-4,0],targetOffset:Pj},right:{points:["cl","cr"],overflow:jj,offset:[4,0],targetOffset:Pj},top:{points:["bc","tc"],overflow:jj,offset:[0,-4],targetOffset:Pj},bottom:{points:["tc","bc"],overflow:jj,offset:[0,4],targetOffset:Pj},topLeft:{points:["bl","tl"],overflow:jj,offset:[0,-4],targetOffset:Pj},leftTop:{points:["tr","tl"],overflow:jj,offset:[-4,0],targetOffset:Pj},topRight:{points:["br","tr"],overflow:jj,offset:[0,-4],targetOffset:Pj},rightTop:{points:["tl","tr"],overflow:jj,offset:[4,0],targetOffset:Pj},bottomRight:{points:["tr","br"],overflow:jj,offset:[0,4],targetOffset:Pj},rightBottom:{points:["bl","br"],overflow:jj,offset:[4,0],targetOffset:Pj},bottomLeft:{points:["tl","bl"],overflow:jj,offset:[0,4],targetOffset:Pj},leftBottom:{points:["br","bl"],overflow:jj,offset:[-4,0],targetOffset:Pj}};const Ij=function(e){var t=e.overlay,n=e.prefixCls,o=e.id,i=e.overlayInnerStyle;return r.createElement("div",{className:"".concat(n,"-inner"),id:o,role:"tooltip",style:i},"function"==typeof t?t():t)};var Tj=function(e,t){var n=e.overlayClassName,o=e.trigger,i=void 0===o?["hover"]:o,a=e.mouseEnterDelay,u=void 0===a?0:a,c=e.mouseLeaveDelay,s=void 0===c?.1:c,l=e.overlayStyle,f=e.prefixCls,p=void 0===f?"rc-tooltip":f,d=e.children,h=e.onVisibleChange,y=e.afterVisibleChange,m=e.transitionName,v=e.animation,g=e.motion,b=e.placement,w=void 0===b?"right":b,O=e.align,E=void 0===O?{}:O,_=e.destroyTooltipOnHide,x=void 0!==_&&_,S=e.defaultVisible,j=e.getTooltipContainer,P=e.overlayInnerStyle,k=g_(e,["overlayClassName","trigger","mouseEnterDelay","mouseLeaveDelay","overlayStyle","prefixCls","children","onVisibleChange","afterVisibleChange","transitionName","animation","motion","placement","align","destroyTooltipOnHide","defaultVisible","getTooltipContainer","overlayInnerStyle"]),I=(0,r.useRef)(null);(0,r.useImperativeHandle)(t,(function(){return I.current}));var T=v_({},k);"visible"in e&&(T.popupVisible=e.visible);var R=!1,C=!1;if("boolean"==typeof x)R=x;else if(x&&"object"===h_(x)){var A=x.keepParent;R=!0===A,C=!1===A}return r.createElement(_j,(0,mh.Z)({popupClassName:n,prefixCls:p,popup:function(){var t=e.arrowContent,n=void 0===t?null:t,o=e.overlay,i=e.id;return[r.createElement("div",{className:"".concat(p,"-arrow"),key:"arrow"},n),r.createElement(Ij,{key:"content",prefixCls:p,id:i,overlay:o,overlayInnerStyle:P})]},action:i,builtinPlacements:kj,popupPlacement:w,ref:I,popupAlign:E,getPopupContainer:j,onPopupVisibleChange:h,afterPopupVisibleChange:y,popupTransitionName:m,popupAnimation:v,popupMotion:g,defaultPopupVisible:S,destroyPopupOnHide:R,autoDestroy:C,mouseLeaveDelay:s,popupStyle:l,mouseEnterDelay:u},T),d)};const Rj=(0,r.forwardRef)(Tj);function Cj(e){return(Cj="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Aj(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Nj(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Lj(e,t){return(Lj=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Dj(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Fj(e);if(t){var o=Fj(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Mj(this,n)}}function Mj(e,t){if(t&&("object"===Cj(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Fj(e){return(Fj=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Uj=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Lj(e,t)}(a,e);var t,n,o,i=Dj(a);function a(){return Aj(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this,t=this.props,n=t.className,o=t.idPrefix,i=t.items,a=t.openerClass,u=t.openerText,c=t.openerTitle,s="".concat(o||"","TooltipMenu");return r.createElement("div",{ref:function(t){e.container=t}},r.createElement(Rj,{align:{offset:[0,6]},getTooltipContainer:function(){return e.container},destroyTooltipOnHide:!0,id:s,overlay:r.createElement("ul",{className:"TooltipMenu-list"},i),placement:"bottom",prefixCls:"TooltipMenu",trigger:["click"]},r.createElement("button",{"aria-describedby":s,className:Ho()("TooltipMenu-opener",a,n),title:c,type:"button"},u)))}}])&&Nj(t.prototype,n),o&&Nj(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);function Bj(e){return(Bj="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Hj(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function qj(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function zj(e,t){return(zj=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Gj(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Vj(e);if(t){var o=Vj(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Wj(this,n)}}function Wj(e,t){if(t&&("object"===Bj(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Vj(e){return(Vj=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Yj=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&zj(e,t)}(a,e);var t,n,o,i=Gj(a);function a(){return Hj(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e,t=this.props,n=t.i18n,o=t.isDeveloperReply,i=t.openerClass,a=t.review,u=t.siteUser,c=t.wasFlagged;return ce()(!u||u.id!==a.userId,"A user cannot flag their own review."),e=u?[r.createElement(d_,{className:"FlagReviewMenu-flag-spam-item",key:"flag-spam"},r.createElement(i_,{reason:D.uW,review:a,buttonText:n.gettext("This is spam"),wasFlaggedText:n.gettext("Flagged as spam")})),r.createElement(d_,{className:"FlagReviewMenu-flag-language-item",key:"flag-language"},r.createElement(i_,{reason:D.OC,review:a,buttonText:n.gettext("This contains inappropriate language"),wasFlaggedText:n.gettext("Flagged for inappropriate language")})),o?null:r.createElement(d_,{className:"FlagReviewMenu-flag-bug-support-item",key:"flag-bug-support"},r.createElement(i_,{reason:D.xw,review:a,buttonText:n.gettext("This is a bug report or support request"),wasFlaggedText:n.gettext("Flagged as a bug report or support request")}))]:[r.createElement(d_,{key:"login-required"},r.createElement(Ew,{noIcon:!0,logInText:o?n.gettext("Log in to flag this response"):n.gettext("Log in to flag this review")}))],r.createElement(Uj,{className:"FlagReviewMenu-menu",idPrefix:"flag-review-",items:e,openerClass:i,openerText:c?n.gettext("Flagged"):n.gettext("Flag"),openerTitle:o?n.gettext("Flag this developer response"):n.gettext("Flag this review")})}}])&&qj(t.prototype,n),o&&qj(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);Yj.defaultProps={isDeveloperReply:!1};const Zj=(0,Mo.qC)((0,g.connect)((function(e,t){var n=!1;if(t.review){var r=e.reviews.view[t.review.id];r&&r.flag&&r.flag.wasFlagged&&(n=!0)}return{wasFlagged:n,siteUser:Xe(e.users)}})),Eu())(Yj);const $j=(0,Mo.qC)(Eu())((function(e){var t=e.cancelButtonText,n=e.cancelButtonType,o=void 0===n?"cancel":n,i=e.className,a=e.confirmButtonText,u=e.confirmButtonType,c=void 0===u?"alert":u,s=e.i18n,l=e.onCancel,f=e.onConfirm,p=e.message,d=e.puffyButtons;return r.createElement("div",{className:Ho()("ConfirmationDialog",i)},p&&r.createElement("span",{className:"ConfirmationDialog-message"},p),r.createElement("div",{className:"ConfirmationDialog-buttons"},r.createElement(Dc,{buttonType:c,className:"ConfirmationDialog-confirm-button",onClick:f,puffy:d},a||s.gettext("Confirm")),r.createElement(Dc,{buttonType:o,className:"ConfirmationDialog-cancel-button",onClick:l,puffy:d},t||s.gettext("Cancel"))))}));const Kj=(0,Mo.qC)(Eu(),(0,g.connect)((function(e,t){var n=t.review,r=Xe(e.users);return{isOwner:!(!r||!n||n.userId!==r.id)}})))((function(e){var t=e.className,n=e.isOwner,o=e.readOnly,i=e.onSelectRating,a=e.review,u=e.styleSize;return r.createElement(id,{className:t,onSelectRating:i,rating:a&&a.score,readOnly:o||!1,styleSize:u,yellowStars:n})}));function Qj(e){var t=e.content,n=e.html,o=e.id;ce()(void 0!==t||void 0!==n||void 0!==o,"content or html or id is required");var i={};return t?i.children=t:i.dangerouslySetInnerHTML=n,r.createElement(eE,{id:o,contentId:o,className:Ho()("UserReview-body",{"UserReview-emptyBody":!t&&!n})},r.createElement("div",i))}const Xj=(0,Mo.qC)(Eu())((function(e){var t=e.byLine,n=e.children,o=e.controls,i=e.i18n,a=e.isReply,u=e.review,c=e.showRating,s=u&&u.id?String(u.id):"loading-text",l=Qj({content:r.createElement(Zp,null),id:s});return u&&(l=u.body?Qj({html:vn(gn(u.body),["br"]),id:s}):Qj({content:"",id:s})),r.createElement("div",{className:"UserReview"},r.createElement("div",{className:"UserReview-byLine"},u&&c?r.createElement(Kj,{styleSize:"small",review:u,readOnly:!0}):null,u&&a&&r.createElement("h4",{className:"UserReview-reply-header"},r.createElement(ac,{name:"reply-arrow"}),i.gettext("Developer response")),t),l,o,n)}));function Jj(e){return(Jj="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function eP(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function tP(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function nP(e,t){return(nP=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function rP(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=iP(e);if(t){var o=iP(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return oP(this,n)}}function oP(e,t){if(t&&("object"===Jj(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function iP(e){return(iP=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var aP=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&nP(e,t)}(a,e);var t,n,o,i=rP(a);function a(){var e;eP(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).onBeginDeleteReview=function(t){var n=e.props,r=n.dispatch,o=n.review;t.preventDefault(),ce()(o,"review is required"),r(Gi({reviewId:o.id}))},e.onCancelDeleteReview=function(t){var n=e.props,r=n.dispatch,o=n.review;t.preventDefault(),ce()(o,"review is required"),r(Wi({reviewId:o.id}))},e.onClickToDeleteReview=function(t){var n=e.props,r=n.dispatch,o=n.errorHandler,i=n.isReplyToReviewId,a=n.review;t.preventDefault(),ce()(a,"review is required"),r(zi({addonId:a.reviewAddon.id,errorHandlerId:o.id,reviewId:a.id,isReplyToReviewId:i}))},e.onClickToEditReview=function(t){var n=e.props,r=n.dispatch,o=n.isReplyToReviewId,i=n.review;t.preventDefault(),void 0!==o?r(ki({reviewId:o})):(ce()(i,"A review must be loaded."),r(Pi({reviewId:i.id})))},e.onCancelEditReview=function(){var t=e.props,n=t.dispatch,r=t.review;ce()(r,"review is required"),n(Ii({reviewId:r.id}))},e.onClickToBeginReviewReply=function(t){t.preventDefault();var n=e.props,r=n.dispatch,o=n.review;ce()(o,"Cannot show review form because no review has been loaded."),r(ki({reviewId:o.id}))},e.onDismissReviewReply=function(){var t=e.props,n=t.dispatch,r=t.review;ce()(r,"Cannot hide review form because no review has been loaded."),n(Ti({reviewId:r.id}))},e.onSubmitReviewReply=function(t){var n=e.props,r=n.dispatch,o=n.errorHandler,i=n.review;ce()(i,"The review property cannot be empty when replying to a review."),r(Si({errorHandlerId:o.id,originalReviewId:i.id,body:t.text}))},e}return t=a,(n=[{key:"isRatingOnly",value:function(){var e=this.props.review;return Boolean(e&&!e.body)}},{key:"isReply",value:function(){var e=this.props,t=e.isReplyToReviewId,n=e.review;return void 0!==t||Boolean(n&&n.isDeveloperReply)}},{key:"editPrompt",value:function(){var e=this.props.i18n;return this.isReply()?e.gettext("Edit reply"):e.gettext("Edit review")}},{key:"deletePrompt",value:function(){var e=this.props.i18n;return this.isReply()?e.gettext("Delete reply"):this.isRatingOnly()?e.gettext("Delete rating"):e.gettext("Delete review")}},{key:"confirmDeletePrompt",value:function(){var e=this.props.i18n;return this.isReply()?e.gettext("Do you really want to delete this reply?"):this.isRatingOnly()?e.gettext("Do you really want to delete this rating?"):e.gettext("Do you really want to delete this review?")}},{key:"confirmDeleteButtonText",value:function(){var e=this.props,t=e.i18n;return e.slim?this.isReply()?t.gettext("Delete reply"):this.isRatingOnly()?t.gettext("Delete rating"):t.gettext("Delete review"):t.gettext("Delete")}},{key:"cancelDeleteButtonText",value:function(){var e=this.props,t=e.i18n;return e.slim?this.isReply()?t.gettext("Keep reply"):this.isRatingOnly()?t.gettext("Keep rating"):t.gettext("Keep review"):t.gettext("Cancel")}},{key:"renderReply",value:function(){var e=this.props,t=e.addon,n=e.errorHandler,o=e.i18n,i=e.replyingToReview,a=e.review,u=e.slim,c=e.siteUserCanReply,s=e.submittingReply;if(!a||!a.reply&&!i)return null;var l=[Tn("src/amo/components/AddonReviewCard/index.js"),"addon",t?t.id.toString():"no-addon","review",a?a.id.toString():"unsaved-review"].join("-");return r.createElement("div",{className:"AddonReviewCard-reply"},i?r.createElement(Zh,{className:"AddonReviewCard-reply-form",id:l,isSubmitting:s&&!n.hasError(),onDismiss:this.onDismissReviewReply,onSubmit:this.onSubmitReviewReply,placeholder:o.gettext("Write a reply to this review."),submitButtonText:a.reply?o.gettext("Update reply"):o.gettext("Publish reply"),submitButtonInProgressText:a.reply?o.gettext("Updating reply"):o.gettext("Publishing reply"),text:a.reply&&a.reply.body}):r.createElement(uP,{addon:t,isReplyToReviewId:a.id,review:a.reply,slim:u,siteUserCanReply:c}))}},{key:"render",value:function(){var e,t=this.props,n=t.beginningToDeleteReview,o=t.className,i=t.deletingReview,a=t.editingReview,u=t.errorHandler,c=t.flaggable,s=t.hasUsersEditPermission,l=t.i18n,f=t.location,p=t.replyingToReview,d=t.review,h=t.shortByLine,y=t.showControls,m=t.showRating,v=t.siteUser,g=t.siteUserCanManageReplies,b=t.slim,w=h||this.isReply(),O=!w&&s;if(d){var E=w?l.gettext("posted %(linkStart)s%(timestamp)s%(linkEnd)s"):O?l.gettext("by %(linkUserProfileStart)s%(authorName)s%(linkUserProfileEnd)s, %(linkStart)s%(timestamp)s%(linkEnd)s"):l.gettext("by %(authorName)s, %(linkStart)s%(timestamp)s%(linkEnd)s"),_=d.reviewAddon.slug||d.reviewAddon.id;d.reviewAddon.slug||L.Z.error("The add-on for reviewId: ".concat(d.id," has an falsey slug: ").concat(d.reviewAddon.slug)),d.reviewAddon.id||L.Z.error("The add-on for reviewId: ".concat(d.id," has an falsey id: ").concat(d.reviewAddon.id));var x=[["linkStart","linkEnd",function(e){return _?r.createElement(wc,{title:l.moment(d.created).format("lll"),key:d.id,to:Tp({addonSlug:String(_),id:d.id,location:f})},e):e}]];O&&x.push(["linkUserProfileStart","linkUserProfileEnd",function(e){return r.createElement(wc,{key:"".concat(d.id,"-").concat(d.userId),to:"/user/".concat(d.userId,"/")},e)}]);var S=ie({text:l.sprintf(E,{authorName:d.userName,timestamp:l.moment(d.created).fromNow(),linkEnd:"%(linkEnd)s",linkStart:"%(linkStart)s",linkUserProfileStart:O?"%(linkUserProfileStart)s":void 0,linkUserProfileEnd:O?"%(linkUserProfileEnd)s":void 0}),replacements:x});e=r.createElement("span",{className:Ho()({"AddonReviewCard-authorByLine":!w})},S)}else e=r.createElement(Zp,null);var j=y;n&&(j=!1);var P=d&&v&&(d.userId===v.id||this.isReply()&&g),k=j?r.createElement("div",{className:"AddonReviewCard-allControls"},P?r.createElement(r.Fragment,null,!this.isRatingOnly()&&r.createElement("a",{href:"#edit",onClick:this.onClickToEditReview,className:"AddonReviewCard-edit AddonReviewCard-control"},this.editPrompt()),i&&!u.hasError()?r.createElement("span",{className:"AddonReviewCard-control AddonReviewCard-deleting"},l.gettext("Deleting…")):r.createElement(Dc,{buttonType:"neutral",className:Ho()("AddonReviewCard-control","AddonReviewCard-delete"),onClick:this.onBeginDeleteReview},this.deletePrompt())):null,!d||p||d.reply||this.isReply()||this.isRatingOnly()||!g||!v||d.userId===v.id?null:r.createElement("a",{href:"#reply",onClick:this.onClickToBeginReviewReply,className:"AddonReviewCard-begin-reply AddonReviewCard-control"},r.createElement(ac,{name:"reply-arrow"}),l.gettext("Reply to this review")),!c||this.isRatingOnly()||!d||v&&v.id===d.userId?null:r.createElement(Zj,{isDeveloperReply:this.isReply(),openerClass:"AddonReviewCard-control",review:d})):null;return r.createElement("div",{className:Ho()("AddonReviewCard",o,{"AddonReviewCard-isReply":this.isReply(),"AddonReviewCard-ratingOnly":this.isRatingOnly(),"AddonReviewCard-viewOnly":!a,"AddonReviewCard-slim":b})},r.createElement("div",{className:"AddonReviewCard-container"},u.renderErrorIfPresent(),d&&d.isDeleted&&r.createElement(Jc,{type:"error",className:"AddonReviewCard-non-public-notice"},l.gettext("This rating or review has been deleted. You are only seeing it because of elevated permissions.")),d&&a?r.createElement(KE,{onCancel:this.onCancelEditReview,puffyButtons:b,review:d}):r.createElement(Xj,{controls:k,review:d,byLine:e,showRating:Boolean(!this.isReply()&&m),isReply:this.isReply()})),n&&r.createElement($j,{className:"AddonReviewCard-confirmDeleteDialog",cancelButtonText:this.cancelDeleteButtonText(),cancelButtonType:"neutral",confirmButtonText:this.confirmDeleteButtonText(),onCancel:this.onCancelDeleteReview,onConfirm:this.onClickToDeleteReview,message:b?void 0:this.confirmDeletePrompt(),puffyButtons:b}),this.renderReply(),v&&d&&d.userId===v.id&&this.isRatingOnly()&&!n&&!a&&r.createElement(Dc,{className:"AddonReviewCard-writeReviewButton",onClick:this.onClickToEditReview,buttonType:"action",puffy:b},l.gettext("Write a review")))}}])&&tP(t.prototype,n),o&&tP(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);aP.defaultProps={flaggable:!0,shortByLine:!1,showControls:!0,showRating:!0,slim:!1};var uP=(0,Mo.qC)(No,(0,g.connect)((function(e,t){var n=!1,r=!1,o=!1,i=!1,a=!1;if(t.review){var u=e.reviews.view[t.review.id];u&&(n=u.beginningToDeleteReview,r=u.deletingReview,o=u.editingReview,i=u.replyingToReview,a=u.submittingReply)}var c=et(e,D.mD);return{beginningToDeleteReview:n,deletingReview:r,editingReview:o,hasUsersEditPermission:et(e,D.Ai),replyingToReview:i,siteUser:Xe(e.users),siteUserCanManageReplies:t.siteUserCanReply||c,submittingReply:a}})),ms({name:"AddonReviewCard",extractId:function(e){return e.review?String(e.review.id):""}}),Eu())(aP);const cP=uP;function sP(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function lP(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?sP(Object(n),!0).forEach((function(t){fP(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):sP(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function fP(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var pP="HIDE_ADDON_ABUSE_REPORT_UI",dP="LOAD_ADDON_ABUSE_REPORT",hP="SEND_ADDON_ABUSE_REPORT",yP="SHOW_ADDON_ABUSE_REPORT_UI",mP="INITIATE_ADDON_ABUSE_REPORT_VIA_FIREFOX",vP="FINISH_ADDON_ABUSE_REPORT_VIA_FIREFOX",gP={bySlug:{},loading:!1};function bP(e){var t=e.addon;return ce()(t,"addon is required"),{type:pP,payload:{addon:t}}}function wP(e){var t=e.addon,n=e.message,r=e.reporter;return ce()(t,"addon is required"),ce()(void 0!==n,"message must be defined"),ce()(void 0!==r,"reporter must be defined"),{type:dP,payload:{addon:t,message:n,reporter:r}}}function OP(e){var t=e.addonSlug,n=e.errorHandlerId,r=e.message;return ce()(t,"addonSlug is required"),ce()(n,"errorHandlerId is required"),ce()(r,"message is required"),{type:hP,payload:{addonSlug:t,errorHandlerId:n,message:r}}}function EP(e){var t=e.addon;return ce()(t,"addon is required"),{type:yP,payload:{addon:t}}}function _P(e){var t=e.addon;return ce()(t,"addon is required"),{type:mP,payload:{addon:t}}}function xP(e){return(xP="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function SP(){SP=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==xP(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}function jP(e,t,n,r,o,i,a){try{var u=e[i](a),c=u.value}catch(e){return void n(e)}u.done?t(c):Promise.resolve(c).then(r,o)}function PP(e){return function(){var t=this,n=arguments;return new Promise((function(r,o){var i=e.apply(t,n);function a(e){jP(i,r,o,a,u,"next",e)}function u(e){jP(i,r,o,a,u,"throw",e)}a(void 0)}))}}function kP(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function IP(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function TP(e,t){return(TP=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function RP(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=AP(e);if(t){var o=AP(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return CP(this,n)}}function CP(e,t){if(t&&("object"===xP(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function AP(e){return(AP=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var NP=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&TP(e,t)}(a,e);var t,n,o,i=RP(a);function a(){var e;kP(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).dismissReportUI=function(){var t=e.props,n=t.addon;(0,t.dispatch)(bP({addon:n}))},e.sendReport=function(t){var n=t.text;ce()(n.trim().length,"A report cannot be sent with no content.");var r=e.props,o=r.addon,i=r.dispatch,a=r.errorHandler;i(OP({addonSlug:o.slug,errorHandlerId:a.id,message:n}))},e.onReportButtonClick=function(){var t=PP(SP().mark((function t(n){var r,o,i,a;return SP().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(r=e.props,o=r._hasAbuseReportPanelEnabled,i=r.addon,a=r.dispatch,n.preventDefault(),!o()||![D.Gz,D.Yd].includes(i.type)){t.next=5;break}return a(_P({addon:i})),t.abrupt("return");case 5:a(EP({addon:i}));case 6:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),e}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.abuseReport,n=e.addon,o=e.errorHandler,i=e.i18n,a=e.loading;if(ce()(n,"An add-on is required"),t&&void 0!==t.message)return r.createElement("div",{className:"ReportAbuseButton ReportAbuseButton--report-sent"},r.createElement("h3",{className:"ReportAbuseButton-header"},i.gettext("You reported this add-on for abuse")),r.createElement("p",{className:"ReportAbuseButton-first-paragraph"},i.gettext("We have received your report. Thanks for letting us know about\n your concerns with this add-on.")),r.createElement("p",null,i.gettext("We can't respond to every abuse report but we'll look into\n this issue.")));var u=i.sprintf(i.gettext("If you think this add-on violates\n %(linkTagStart)sMozilla's add-on policies%(linkTagEnd)s or has\n security or privacy issues, please report these issues to Mozilla using\n this form."),{linkTagStart:'<a href="https://developer.mozilla.org/en-US/Add-ons/AMO/Policy/Reviews">',linkTagEnd:"</a>"}),c=i.gettext("Report this add-on for abuse");return r.createElement("div",{className:Ho()("ReportAbuseButton",{"ReportAbuseButton--is-expanded":t&&t.uiVisible})},r.createElement("div",{className:"ReportAbuseButton--preview"},r.createElement(Dc,{buttonType:"neutral",className:"ReportAbuseButton-show-more",disabled:a,onClick:this.onReportButtonClick,puffy:!0},c)),r.createElement("div",{className:"ReportAbuseButton--expanded"},r.createElement("h3",{className:"ReportAbuseButton-header"},c),r.createElement("p",{className:"ReportAbuseButton-first-paragraph",dangerouslySetInnerHTML:vn(u,["a"])}),r.createElement("p",null,i.gettext("Please don't use this form to report bugs or request add-on\n features; this report will be sent to Mozilla and not to the\n add-on developer.")),o.renderErrorIfPresent(),r.createElement(Zh,{id:Tn("src/amo/components/ReportAbuseButton/index.js"),isSubmitting:a,onSubmit:this.sendReport,submitButtonText:i.gettext("Send abuse report"),submitButtonInProgressText:i.gettext("Sending abuse report"),onDismiss:this.dismissReportUI,dismissButtonText:i.gettext("Dismiss"),placeholder:i.gettext("Explain how this add-on is violating our policies.")})))}}])&&IP(t.prototype,n),o&&IP(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);NP.defaultProps={_hasAbuseReportPanelEnabled:bv.hasAbuseReportPanelEnabled};const LP=(0,Mo.qC)((0,g.connect)((function(e,t){var n=t.addon;return{abuseReport:n&&e.abuse.bySlug[n.slug]?e.abuse.bySlug[n.slug]:null,loading:e.abuse.loading}})),Eu(),ms({id:"ReportAbuseButton"}))(NP);function DP(e){return(DP="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var MP;function FP(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function UP(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function BP(e,t){return(BP=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function HP(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=zP(e);if(t){var o=zP(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return qP(this,n)}}function qP(e,t){if(t&&("object"===DP(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function zP(e){return(zP=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var GP=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&BP(e,t)}(a,e);var t,n,o,i=HP(a);function a(){var e;FP(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).onSelectRating=function(t){var n=e.props,r=n.addon,o=n.dispatch,i=n.errorHandler,a=n.userReview,u=n.version;o(a?Li({errorHandlerId:i.id,score:t,reviewId:a.id}):Ni({addonId:r.id,errorHandlerId:i.id,score:t,versionId:u.id}))},e}return t=a,(n=[{key:"componentDidMount",value:function(){var e=this.props,t=e.addon,n=e.dispatch,r=e.errorHandler,o=e.userId,i=e.userReview;r.hasError()?L.Z.warn("Not loading data because of an error"):o&&void 0===i&&(L.Z.debug("Loading a saved rating (if it exists) for user ".concat(o)),n(function(e){var t=e.addonId,n=e.errorHandlerId,r=e.userId;return ce()(t,"addonId is required"),ce()(n,"errorHandlerId is required"),ce()(r,"userId is required"),{type:$o,payload:{addonId:t,errorHandlerId:n,userId:r}}}({userId:o,addonId:t.id,errorHandlerId:r.id})))}},{key:"getLogInPrompt",value:function(e){var t=e.addonType,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=n.validAddonTypes,o=void 0===r?D.Tq:r,i=this.props.i18n;switch(t){case D.jV:return i.gettext("Log in to rate this dictionary");case D.d$:return i.gettext("Log in to rate this language pack");case D.Yd:return i.gettext("Log in to rate this theme");case D.Gz:return i.gettext("Log in to rate this extension");default:var a=o.includes(t);return L.Z.warn("Using generic prompt for ".concat(a?"add-on":"unknown add-on"," type: ").concat(t)),i.gettext("Log in to rate this add-on")}}},{key:"isSignedIn",value:function(){return Boolean(this.props.userId)}},{key:"renderLogInToRate",value:function(){var e=this.props.addon;return r.createElement(Ew,{noIcon:!0,className:"RatingManager-log-in-to-rate-button",logInText:this.getLogInPrompt({addonType:e.type})})}},{key:"isMessageVisible",value:function(){var e=this.props.flashMessage;return[Ui,Mi].includes(e)}},{key:"renderUserRatingForm",value:function(){var e,t=this.props,n=t.addon,o=t.beginningToDeleteReview,i=t.deletingReview,a=t.i18n,u=t.flashMessage,c=t.userReview,s=o||i;e=c&&s?c.body?a.gettext("Are you sure you want to delete your review of %(addonName)s?"):a.gettext("Are you sure you want to delete your rating of %(addonName)s?"):a.gettext("How are you enjoying %(addonName)s?");var l=vn(a.sprintf(e,{addonName:"<b>".concat(n.name,"</b>")}),["b"]);return r.createElement("form",{action:""},r.createElement("fieldset",null,r.createElement("legend",{className:"RatingManager-legend",dangerouslySetInnerHTML:l}),r.createElement("div",{className:"RatingManager-ratingControl"},this.isSignedIn()?null:this.renderLogInToRate(),c&&s?r.createElement(FE,{className:"RatingManager-AddonReviewManagerRating",onSelectRating:void 0,rating:c.score}):r.createElement(Kj,{className:"RatingManager-UserRating",readOnly:!this.isSignedIn(),onSelectRating:this.onSelectRating,review:this.isSignedIn()?c:null})),r.createElement(UE,{className:c&&c.body?"RatingManager-savedRating-withReview":null,hideMessage:!this.isMessageVisible(),message:u===Ui?a.gettext("Saving star rating"):a.gettext("Star rating saved"),type:u===Ui?Yc:$c})))}},{key:"render",value:function(){var e=this.props,t=e.addon,n=e.editingReview,o=e.userReview,i=e.version;return ce()(t,"addon is required"),ce()(i,"version is required"),r.createElement("div",{className:"RatingManager"},!n&&this.renderUserRatingForm(),o&&r.createElement(cP,{addon:t,className:"RatingManager-AddonReviewCard",flaggable:!1,review:o,shortByLine:!0,showControls:!this.isMessageVisible(),showRating:!1,siteUserCanReply:!1,slim:!0}),r.createElement(LP,{addon:t}))}}])&&UP(t.prototype,n),o&&UP(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component),WP=Eu()(GP);const VP=(0,Mo.qC)(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.name,n=e.id;return function(e){return(0,Mo.qC)(ms({name:t,id:n}))((function(t){var n=t.errorHandler;return n.hasError()?r.createElement("div",null,n.renderError(),r.createElement(e,t)):r.createElement(e,t)}))}}({id:"RatingManager"}),(0,g.connect)((function(t,n){var r,o,i,a=t.users.currentUserID;if(a&&n.addon){var u=n.addon.id;L.Z.debug((0,e.f9)(MP||(o=['Looking for latest review of\n addonId "','" by userId "','"'],i||(i=o.slice(0)),MP=Object.freeze(Object.defineProperties(o,{raw:{value:Object.freeze(i)}}))),u,a)),r=function(e){var t=e.reviewsState,n=e.userId,r=e.addonId,o=Mp({userId:n,addonId:r}),i=t.latestUserReview[o];return null===i?null:Cp(t,i)}({reviewsState:t.reviews,userId:a,addonId:u})}var c=!1,s=!1,l=!1;if(r){var f=t.reviews.view[r.id];f&&(s=f.beginningToDeleteReview,c=f.deletingReview,l=f.editingReview)}return{beginningToDeleteReview:s,deletingReview:c,editingReview:l,flashMessage:t.reviews.flashMessage,userReview:r,userId:a}})))(WP);var YP=a(32520);function ZP(e){return(ZP="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function $P(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function KP(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function QP(e,t){return(QP=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function XP(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=ek(e);if(t){var o=ek(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return JP(this,n)}}function JP(e,t){if(t&&("object"===ZP(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function ek(e){return(ek=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var tk={closeEl:!0,captionEl:!0,fullscreenEl:!1,zoomEl:!1,shareEl:!1,counterEl:!0,arrowEl:!0,preloaderEl:!0},nk=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&QP(e,t)}(a,e);var t,n,o,i=XP(a);function a(){var e;$P(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).onOpenPhotoswipe=function(t){ce()(e.viewport,"viewport ref is required");var n=e.viewport.querySelector(".ScreenShots-list");ce()(n,"list is required"),t.listen("close",(function(){var e=t.getCurrentIndex(),r=n.children[e].getBoundingClientRect().left;n.scrollLeft+=r-n.getBoundingClientRect().left}))},e}return t=a,(n=[{key:"render",value:function(){var e=this,t=this.props.previews;return r.createElement("div",{className:"ScreenShots"},r.createElement("div",{className:"ScreenShots-viewport",ref:function(t){e.viewport=t}},r.createElement("div",{className:"ScreenShots-list"},r.createElement(YP.Gallery,{options:tk,onOpen:this.onOpenPhotoswipe},t.map((function(e){return r.createElement(YP.Item,{key:e.src,original:e.src,thumbnail:e.thumbnail_src,width:e.w,height:e.h,title:e.title},(function(t){var n=t.ref,o=t.open;return r.createElement("img",{alt:e.title,className:"ScreenShots-image",ref:n,onClick:o,src:e.thumbnail_src,width:e.thumbnail_w,height:e.thumbnail_h})}))}))))))}}])&&KP(t.prototype,n),o&&KP(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component),rk="SEND_SERVER_REDIRECT",ok={url:null,status:null},ik=function(e){var n=e.status,r=e.url,o=e._config,i=void 0===o?t.Z:o;if(!n)throw new Error("status is required");if(!r)throw new Error("url is required");return i.get("server")||L.Z.warn("sendServerRedirect() currently does nothing when run from client\n code"),{type:rk,payload:{status:n,url:r}}};const ak=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ok,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case rk:var n=t.payload;return{status:n.status,url:n.url};default:return e}};const uk=Eu()((function(e){var t=e.addon,n=e.i18n,o=e.roundedCorners;ce()(t&&D.Yd===t.type,"A ThemeImage can only be rendered for a static theme");var i=n.sprintf(n.gettext("Preview of %(title)s"),{title:t.name});return r.createElement("div",{className:Ho()("ThemeImage",{"ThemeImage--rounded-corners":o}),role:"presentation"},r.createElement("img",{alt:i,className:"ThemeImage-image",src:qs(t)}))}));function ck(e){return(ck="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function sk(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function lk(e,t){return(lk=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function fk(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=dk(e);if(t){var o=dk(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return pk(this,n)}}function pk(e,t){if(t&&("object"===ck(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function dk(e){return(dk=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var hk=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&lk(e,t)}(a,e);var t,n,o,i=fk(a);function a(e){var t;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),(t=i.call(this,e)).renderDevCommentsCard=function(){var e=t.props,n=e.addon,o=e.i18n;if(!n||!n.developer_comments)return null;var i=bn(n.developer_comments),a="Addon-developer-comments";return r.createElement(eE,{contentId:n.id,className:a,header:o.gettext("Developer comments"),id:a},r.createElement("div",{className:"Addon-developer-comments-contents",dangerouslySetInnerHTML:i}))};var n=e.addon,o=e.addonIsLoading,u=e.clientApp,c=e.dispatch,s=e.errorHandler,l=e.lang,f=e.match.params;if(!s.hasError())if(n){if(n.slug!==f.slug)return c(ik({status:301,url:"/".concat(l,"/").concat(u).concat(ln(n.slug))})),pk(t);c(qo(n.type))}else o||c(na({showGroupedRatings:!0,slug:f.slug,errorHandler:s}));return t}return t=a,(n=[{key:"componentDidUpdate",value:function(e){var t=e.addon,n=e.match.params,r=this.props,o=r.addon,i=r.addonIsLoading,a=r.dispatch,u=r.errorHandler,c=r.match.params;if(!u.hasError()){var s=t?t.type:null;o&&o.type!==s&&a(qo(o.type)),i||o&&n.slug===c.slug||a(na({showGroupedRatings:!0,slug:c.slug,errorHandler:u}))}}},{key:"headerImage",value:function(){var e=this.props,t=e.addon,n=e.i18n;if(t&&D.Yd===t.type)return r.createElement(uk,{addon:t,roundedCorners:!0});var o=t?n.sprintf(n.gettext("Preview of %(title)s"),{title:t.name}):null;return r.createElement("div",{className:"Addon-icon",key:"Addon-icon-header"},r.createElement("div",{className:"Addon-icon-wrapper"},r.createElement("img",{alt:o,className:"Addon-icon-image",src:Bs(t)})))}},{key:"renderRatingsCard",value:function(){var e,t,n=this.props,o=n.RatingManager,i=n.addon,a=n.i18n,u=n.location,c=n.currentVersion,s="footerText";if(t=i&&c?r.createElement(o,{addon:i,version:c}):r.createElement("p",{className:"Addon-no-rating-manager"},a.gettext("This add-on cannot be rated because no versions\n have been published.")),i)if(i.ratings&&i.ratings.count){var l=i.ratings.count,f=a.sprintf(a.ngettext("Read %(count)s review","Read all %(count)s reviews",l),{count:a.formatNumber(l)});s="footerLink",e=r.createElement(wc,{className:"Addon-all-reviews-link",to:Tp({addonSlug:i.slug,location:u})},f)}else e=a.gettext("No reviews yet");else e=r.createElement(Zp,{width:100});var p,d,h,y=(p={},d=s,h=r.createElement("div",{className:"Addon-read-reviews-footer"},e),d in p?Object.defineProperty(p,d,{value:h,enumerable:!0,configurable:!0,writable:!0}):p[d]=h,p);return r.createElement(js,Object.assign({header:a.gettext("Rate your experience"),className:"Addon-overall-rating"},y),t)}},{key:"renderShowMoreCard",value:function(){var e,t=this.props,n=t.addon,o=t.i18n,i={},a=!0;if(n){switch(n.type){case D.jV:e=o.gettext("About this dictionary");break;case D.Gz:e=o.gettext("About this extension");break;case D.d$:e=o.gettext("About this language pack");break;case D.Yd:e=o.gettext("About this theme");break;default:e=o.gettext("About this add-on")}var u=n.description?n.description:n.summary;if(a=u!==n.summary,!u||!u.length)return null;i.dangerouslySetInnerHTML=bn(u)}else e=r.createElement(Zp,{width:40}),i.children=r.createElement(Zp,{width:100});var c="AddonDescription";return a?r.createElement(eE,{contentId:n&&n.id,className:c,header:e,id:c},r.createElement("div",Object.assign({className:"AddonDescription-contents"},i))):null}},{key:"renderVersionReleaseNotes",value:function(){var e=this.props,t=e.addon,n=e.i18n,o=e.currentVersion;if(!t)return null;if(!o||!o.releaseNotes)return null;var i=n.sprintf(n.gettext("Release notes for %(addonVersion)s"),{addonVersion:o.version}),a=bn(o.releaseNotes),u="AddonDescription-version-notes";return r.createElement(eE,{contentId:t.id,className:u,id:u,header:i},r.createElement("div",{dangerouslySetInnerHTML:a}))}},{key:"renderAddonsByAuthorsCard",value:function(e){var t=e.isForTheme,n=this.props.addon,o=n&&D.Yd===n.type;return!n||!n.authors.length||t&&!o||!t&&o?null:r.createElement("div",null,r.createElement(Sm,{addonType:n.type,authorDisplayName:n.authors[0].name,authorIds:n.authors.map((function(e){return e.id})),className:"Addon-MoreAddonsCard",forAddonSlug:n.slug,numberOfAddons:6}))}},{key:"render",value:function(){var e=this.props,t=e.addon,n=e.addonsByAuthors,o=e.currentVersion,i=e.errorHandler,a=e.i18n,u=t&&t.type===D.Yd,c=null;i.hasError()&&(c=i.renderError());var s=t?t.type:D.Gz,l={},f=!1;if(t){var p=t.summary?t.summary:t.description;p&&p.length&&(l.dangerouslySetInnerHTML=vn(gn(p),["a","br"]),f=!0)}else l.children=r.createElement(Zp,{width:100}),f=!0;var d=t?t.previews:[],h=n?n.length:0;return r.createElement(HO,{showVPNPromo:Boolean(t&&t.type===D.Gz),errorHandler:i,isAddonInstallPage:!0,showWrongPlatformWarning:!1},r.createElement("div",{className:Ho()("Addon","Addon-".concat(s),{"Addon-theme":u,"Addon--has-more-than-0-addons":h>0,"Addon--has-more-than-3-addons":h>3}),"data-site-identifier":t?t.id:null},r.createElement(_p,{addon:t}),c,r.createElement("div",{className:"Addon-header-wrapper"},r.createElement(js,{className:"Addon-header-info-card",photonStyle:!0},r.createElement(xp,{error:this.props.installError}),r.createElement(zf,{addon:t}),t&&("public"!==t.status||t.is_disabled)?r.createElement(Jc,{type:"error",className:"Addon-non-public-notice"},a.gettext("This is not a public listing. You are only seeing it because of elevated permissions.")):null,r.createElement("header",{className:"Addon-header"},this.headerImage(),r.createElement(Gy,{addon:t}),r.createElement(ol,{addon:t}),t&&r.createElement(Gv,{addon:t}),r.createElement("div",{className:"Addon-summary-and-install-button-wrapper"},f?r.createElement("p",Object.assign({className:"Addon-summary"},l)):null,r.createElement(Nv,{addon:t})),r.createElement("h2",{className:"visually-hidden"},a.gettext("Extension Metadata"))),t?r.createElement(Bw,{addon:t,className:"Addon-WrongPlatformWarning"}):null),r.createElement(js,{className:"Addon-header-meta-and-ratings",photonStyle:!0},r.createElement(xd,{addon:t}))),r.createElement("div",{className:"Addon-details"},r.createElement("div",{className:"Addon-main-content"},this.renderAddonsByAuthorsCard({isForTheme:!0}),d.length>0&&!u?r.createElement(js,{className:"Addon-screenshots",header:a.gettext("Screenshots")},r.createElement(nk,{previews:d})):null,this.renderShowMoreCard(),this.renderDevCommentsCard(),s===D.Gz&&r.createElement(zy,{addon:t})),this.renderRatingsCard(),r.createElement(jm,{addon:t}),r.createElement(ME,{version:o}),r.createElement(dh,{addon:t}),r.createElement(Ms,{addon:t}),this.renderVersionReleaseNotes(),this.renderAddonsByAuthorsCard({isForTheme:!1}))))}}])&&sk(t.prototype,n),o&&sk(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);hk.propTypes={RatingManager:w().func,addon:w().object,addonIsLoading:w().bool,clientApp:w().string.isRequired,currentVersion:w().object,dispatch:w().func.isRequired,errorHandler:w().object.isRequired,i18n:w().object.isRequired,installError:w().string,lang:w().string.isRequired,location:w().object.isRequired,match:w().shape({params:w().object.isRequired}).isRequired,addonsByAuthors:w().array},hk.defaultProps={RatingManager:VP};const yk=(0,Mo.qC)(Eu(),(0,g.connect)((function(e,t){var n,r=t.match.params.slug,o=la(e.addons,r),i={},a=null;return o&&(n=function(e,t){var n=e.byAddonSlug[t];return n?n.map((function(t){return e.byAddonId[t]})):null}(e.addonsByAuthors,o.slug),i=e.installations[o.guid]||{},a=o.currentVersionId?mf({id:o.currentVersionId,state:e.versions}):null),{addonIsLoading:fa(e,r),addonsByAuthors:n,clientApp:e.api.clientApp,currentVersion:a,installError:i.error,lang:e.api.lang,addon:o}})),gs({fileName:"src/amo/pages/Addon/index.js",extractId:function(e){return e.match.params.slug}}))(hk);const mk=(0,Mo.qC)(No,Eu())((function(e){var t,n=e.addon,o=e.headerText,i=e.i18n,a=Bt(e.location),u=n?Ut(ln(n.slug),a):"",c=Bs(n),s=r.createElement("img",{className:"AddonSummaryCard-header-icon-image",src:c,alt:i.gettext("Add-on icon")}),l=r.createElement("div",{className:"AddonSummaryCard-header"},r.createElement("div",{className:"AddonSummaryCard-header-icon"},n?r.createElement(wc,{to:u},s):s),r.createElement("div",{className:"AddonSummaryCard-header-text"},r.createElement("h1",{className:"visually-hidden"},o),r.createElement(Gy,{addon:n,linkToAddon:!0,queryParamsForAttribution:a})));if(n&&n.ratings){var f=Ed(n.ratings.average);t=i.sprintf(i.ngettext("%(rating)s Star out of 5","%(rating)s Stars out of 5",f),{rating:i.formatNumber(f)})}return r.createElement(js,{header:l,className:"AddonSummaryCard"},r.createElement("div",{className:"AddonSummaryCard-overallRatingStars"},r.createElement(id,{rating:n&&n.ratings&&n.ratings.average,readOnly:!0,yellowStars:!0}),r.createElement("div",{className:"AddonSummaryCard-addonAverage"},n?t:r.createElement(Zp,{minWidth:20}))),r.createElement(hd,{addon:n}))}));function vk(e){return(vk="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function gk(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function bk(e,t){return(bk=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function wk(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Ek(e);if(t){var o=Ek(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Ok(this,n)}}function Ok(e,t){if(t&&("object"===vk(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Ek(e){return(Ek=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var _k="license",xk="eula",Sk="privacy",jk=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&bk(e,t)}(a,e);var t,n,o,i=wk(a);function a(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),(t=i.call(this,e)).loadDataIfNeeded(),t}return t=a,(n=[{key:"componentDidUpdate",value:function(e){this.loadDataIfNeeded(e)}},{key:"loadDataIfNeeded",value:function(e){var t=this.props,n=t.addon,r=t.addonInfo,o=t.addonInfoIsLoading,i=t.addonIsLoading,a=t.addonVersion,u=t.addonVersionIsLoading,c=t.dispatch,s=t.errorHandler,l=t.infoType,f=t.match.params.slug,p=e&&e.addon;if(s.hasError())L.Z.warn("Not loading data because of an error");else{var d=p&&p.slug!==f;if(n&&!d||i||c(na({showGroupedRatings:!0,slug:f,errorHandler:s})),l===_k){var h=a&&a.license&&void 0===a.license.text;n&&n.currentVersionId&&!u&&(!a||h||d)&&c(function(e){var t=e.errorHandlerId,n=e.slug,r=e.versionId;return ce()(t,"errorHandlerId is required"),ce()(n,"slug is required"),ce()(r,"versionId is required"),{type:lf,payload:{errorHandlerId:t,slug:n,versionId:r}}}({errorHandlerId:s.id,slug:f,versionId:n.currentVersionId}))}else r&&!d||o||c(function(e){var t=e.errorHandlerId,n=e.slug;return ce()(t,"errorHandlerId is required"),ce()(n,"slug is required"),{type:Qi,payload:{errorHandlerId:t,slug:n}}}({slug:f,errorHandlerId:s.id}))}}},{key:"render",value:function(){var e,t,n,o=this.props,i=o.addon,a=o.addonInfo,u=o.addonVersion,c=o.errorHandler,s=o.i18n,l=o.infoType,f="";switch(l){case _k:n=s.gettext("Custom License for %(addonName)s"),e=u&&u.license?null===u.license.text?"":u.license.text:null;break;case xk:n=s.gettext("End-User License Agreement for %(addonName)s"),e=a?a.eula:null;break;case Sk:n=s.gettext("Privacy policy for %(addonName)s"),e=a?a.privacyPolicy:null;break;default:n=""}return i&&(f=s.sprintf(n,{addonName:i.name})),(e||l===_k&&e)&&(t=bn(e)),r.createElement(HO,{errorHandler:c},r.createElement("div",{className:Ho()("AddonInfo","AddonInfo--".concat(l))},i&&r.createElement(Ao,null,r.createElement("title",null,f),r.createElement("meta",{name:"robots",content:"noindex, follow"})),c.renderErrorIfPresent(),r.createElement(mk,{addon:i,headerText:f}),r.createElement(js,{className:"AddonInfo-info",header:f},t?r.createElement("p",{className:"AddonInfo-info-html",dangerouslySetInnerHTML:t}):r.createElement(Zp,null))))}}])&&gk(t.prototype,n),o&&gk(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const Pk=(0,Mo.qC)((0,g.connect)((function(e,t){var n=t.match.params.slug,r=la(e.addons,n),o=null;return r&&r.currentVersionId&&(o=mf({id:r.currentVersionId,state:e.versions})),{addon:r,addonIsLoading:fa(e,n),addonInfo:pa({slug:n,state:e.addons}),addonInfoIsLoading:da({slug:n,state:e.addons}),addonVersion:o,addonVersionIsLoading:gf({slug:n,state:e.versions})}})),Eu(),gs({fileName:"src/amo/pages/AddonInfo/index.js",extractId:function(e){var t=e.infoType,n=e.match.params.slug;return"".concat(n,"-").concat(t)}}))(jk);function kk(e){return(kk="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Ik(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Tk(e,t){return(Tk=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Rk(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Ak(e);if(t){var o=Ak(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Ck(this,n)}}function Ck(e,t){if(t&&("object"===kk(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Ak(e){return(Ak=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Nk=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Tk(e,t)}(a,e);var t,n,o,i=Rk(a);function a(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),(t=i.call(this,e)).loadDataIfNeeded(),t}return t=a,(n=[{key:"componentDidUpdate",value:function(e){this.loadDataIfNeeded(e)}},{key:"loadDataIfNeeded",value:function(e){var t=this.props,n=t.dispatch,r=t.errorHandler,o=t.featuredReview,i=t.loadingReview,a=t.reviewId;r.hasError()?L.Z.warn("Not loading data because of an error"):o&&(!e||e.reviewId===a)||i||n(function(e){var t=e.errorHandlerId,n=e.reviewId;return ce()(t,"errorHandlerId is required"),ce()(n,"reviewId is required"),{type:Vo,payload:{errorHandlerId:t,reviewId:n}}}({reviewId:a,errorHandlerId:r.id}))}},{key:"render",value:function(){var e=this.props,t=e.addon,n=e.errorHandler,o=e.featuredReview,i=e.i18n,a=e.siteUserCanReply,u=o?i.sprintf(o.isDeveloperReply?i.gettext("Response by %(userName)s"):i.gettext("Review by %(userName)s"),{userName:o.userName}):null,c=n.hasError()&&404===n.capturedError.responseStatusCode?r.createElement(Do(),{code:404},r.createElement("div",{className:"FeaturedAddonReview-notfound"},i.gettext("The review was not found."))):r.createElement(cP,{addon:t,review:o,siteUserCanReply:a});return r.createElement("div",{className:"FeaturedAddonReview"},r.createElement(js,{header:u,className:"FeaturedAddonReview-card"},c))}}])&&Ik(t.prototype,n),o&&Ik(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const Lk=(0,Mo.qC)((0,g.connect)((function(e,t){var n=t.reviewId;return ce()(n,"Cannot render a FeaturedAddonReview without a reviewId"),{featuredReview:Cp(e.reviews,n),loadingReview:e.reviews.view[n]&&e.reviews.view[n].loadingReview}})),Eu(),gs({fileName:"src/amo/components/FeaturedAddonReview/index.js",extractId:function(e){return e.reviewId}}))(Nk);function Dk(e){return(Dk="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Mk(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Fk(e,t){return(Fk=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Uk(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Hk(e);if(t){var o=Hk(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Bk(this,n)}}function Bk(e,t){if(t&&("object"===Dk(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Hk(e){return(Hk=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var qk="SHOW_ALL_REVIEWS";function zk(e){return e.query.page||"1"}var Gk=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Fk(e,t)}(a,e);var t,n,o,i=Uk(a);function a(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),(t=i.call(this,e)).onSelectOption=function(e){var n=t.props,r=n.addon,o=n.clientApp,i=n.history,a=n.lang,u=n.location;ce()(r,"addon is required"),e.preventDefault();var c=e.target.value,s=Tp({addonSlug:r.slug,score:c===qk?void 0:c,location:u});i.push("/".concat(a,"/").concat(o).concat(s))},t.loadDataIfNeeded(),t}return t=a,(n=[{key:"componentDidUpdate",value:function(e){this.loadDataIfNeeded(e),this.dispatchFetchReviewPermissions()}},{key:"loadDataIfNeeded",value:function(e){var t=e&&e.addon,n=this.props,r=n.addon,o=n.addonIsLoading,i=n.areReviewsLoading,a=n.dispatch,u=n.errorHandler,c=n.location,s=n.match.params.addonSlug,l=n.reviews;u.hasError()?L.Z.warn("Not loading data because of an error"):(r?(!e||r&&t&&r.type!==t.type)&&a(qo(r.type)):o||a(na({showGroupedRatings:!0,slug:s,errorHandler:u})),i||l||a(function(e){var t=e.addonSlug,n=e.errorHandlerId,r=e.page,o=void 0===r?"1":r,i=e.score;if(!n)throw new Error("errorHandlerId cannot be empty");if(!t)throw new Error("addonSlug cannot be empty");return{type:Zo,payload:{addonSlug:t,errorHandlerId:n,page:o,score:i}}}({addonSlug:s,errorHandlerId:u.id,page:zk(c),score:c.query.score||null})))}},{key:"componentDidMount",value:function(){this.dispatchFetchReviewPermissions()}},{key:"dispatchFetchReviewPermissions",value:function(){var e,t,n,r,o=this.props,i=o.addon,a=o.checkingIfSiteUserCanReply,u=o.dispatch,c=o.errorHandler,s=o.siteUser,l=o.siteUserCanReplyToReviews;i&&s&&null===l&&!a&&!c.hasError()&&u((e={addonId:i.id,errorHandlerId:c.id,userId:s.id},t=e.errorHandlerId,n=e.addonId,r=e.userId,ce()(t,"errorHandlerId is required"),ce()(n,"addonId is required"),ce()(r,"userId is required"),{type:Yo,payload:{errorHandlerId:t,addonId:n,userId:r}}))}},{key:"getPageDescription",value:function(){var e=this.props,t=e.addon,n=e.i18n;return ce()(t,"addon is required"),n.sprintf(n.gettext("Reviews and ratings for %(addonName)s. Find out what other\n users think about %(addonName)s and add it to your Firefox Browser."),{addonName:t.name})}},{key:"filterByScoreSelector",value:function(){var e=this.props,t=e.addon,n=e.i18n,o=e.location;return r.createElement(Is,{className:"AddonReviewList-filterByScoreSelector",disabled:!t,onChange:this.onSelectOption,value:o.query.score||qk},r.createElement("option",{value:qk},n.gettext("Show all reviews")),r.createElement("option",{value:5},n.gettext("Show only five-star reviews")),r.createElement("option",{value:4},n.gettext("Show only four-star reviews")),r.createElement("option",{value:3},n.gettext("Show only three-star reviews")),r.createElement("option",{value:2},n.gettext("Show only two-star reviews")),r.createElement("option",{value:1},n.gettext("Show only one-star reviews")))}},{key:"render",value:function(){var e=this.props,t=e.addon,n=e.errorHandler,o=e.i18n,i=e.location,a=e.match.params.reviewId,u=e.pageSize,c=e.reviewCount,s=e.reviews,l=e.siteUserCanReplyToReviews,f=t?o.sprintf(o.gettext("Reviews for %(addonName)s"),{addonName:t.name}):"",p=null;p=null!==c?c>0&&o.sprintf(o.ngettext("%(total)s review","%(total)s reviews",c),{total:o.formatNumber(c)}):r.createElement(Zp,{width:40});var d=r.createElement("div",{className:"AddonReviewList-cardListHeader"},r.createElement("div",{className:"AddonReviewList-reviewCount"},p),r.createElement("div",{className:"AddonReviewList-filterByScore"},this.filterByScoreSelector())),h=(t&&t.ratings?t.ratings.count:null)||4;h>25&&(h=25);var y=s?s.filter((function(e){return e.id.toString()!==a})):Array(h).fill(null),m=t&&c&&u&&c>Number(u)?r.createElement(ym,{LinkComponent:wc,count:c,currentPage:zk(i),pathname:Tp({addonSlug:t.slug,score:i.query.score,location:i}),perPage:Number(u)}):null;return r.createElement(HO,{errorHandler:n},r.createElement("div",{className:Ho()("AddonReviewList",t&&t.type?["AddonReviewList--".concat(t.type)]:null)},t&&r.createElement(Ao,null,r.createElement("title",null,f),r.createElement("meta",{name:"description",content:this.getPageDescription()}),a&&r.createElement("meta",{name:"robots",content:"noindex, follow"})),n.renderErrorIfPresent(),r.createElement(mk,{addon:t,headerText:f}),r.createElement("div",{className:"AddonReviewList-reviews"},a&&r.createElement(Lk,{addon:t,reviewId:a,siteUserCanReply:l}),y.length?r.createElement(xy,{className:"AddonReviewList-reviews-listing",footer:m,header:d},r.createElement("ul",null,y.map((function(e,n){return r.createElement("li",{key:String(n)},r.createElement(cP,{addon:t,review:e,siteUserCanReply:l}))})))):r.createElement(js,{header:d},r.createElement("p",{className:"AddonReviewList-noReviews"},o.gettext("There are no reviews"))))))}}])&&Mk(t.prototype,n),o&&Mk(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const Wk=(0,Mo.qC)((0,g.connect)((function(e,t){var n,r,o,i,a=t.match.params.addonSlug,u=la(e.addons,a),c=function(e){var t=e.reviewsState,n=e.addonSlug,r=e.page,o=e.score;ce()(n,"addonSlug is required"),ce()(r,"page is required"),ce()(t,"reviewsState is required"),ce()(void 0!==o,"score is required");var i=t.byAddon[n];return i&&i.score===o&&i.page===r?i.data:null}({page:zk(t.location),reviewsState:e.reviews,addonSlug:a,score:t.location.query.score||null}),s=Xe(e.users),l=!1,f=null;if(u&&s){var p=(n={reviewsState:e.reviews,addonId:u.id,userId:s.id},r=n.reviewsState,o=n.addonId,i=n.userId,r.permissions[Ap({addonId:o,userId:i})]);p&&(l=p.loading,f=p.canReplyToReviews)}return{addon:u,addonIsLoading:fa(e,a),areReviewsLoading:Up(e,a),checkingIfSiteUserCanReply:l,clientApp:e.api.clientApp,lang:e.api.lang,pageSize:c?c.pageSize:null,reviewCount:c?c.reviewCount:null,reviews:c&&Np({state:e.reviews,reviews:c.reviews}),siteUserCanReplyToReviews:f,siteUser:s}})),Eu(),gs({fileName:"src/amo/pages/AddonReviewList/index.js",extractId:function(e){var t=e.location,n=e.match.params;return"".concat(n.addonSlug,"-").concat(t.query.page||"")}}))(Gk);a(90330);const Vk=(0,Mo.qC)(Eu(),(0,g.connect)((function(e,t){var n=t.addon,r=t.i18n,o=t.version,i={};return n&&(i=e.installations[n.guid]),{versionInfo:o?bf({i18n:r,state:e.versions,versionId:o.id}):null,installError:i&&i.error?i.error:null}})))((function(e){var t=e.addon,n=e.headerText,o=e.i18n,i=e.installError,a=e.version,u=e.versionInfo,c=e.isCurrentVersion;if(null===a)return r.createElement("li",{className:"AddonVersionCard"},r.createElement("div",null,n&&r.createElement("h1",{className:"AddonVersionCard-header"},n),r.createElement("h2",{className:"AddonVersionCard-noVersion"},o.gettext("No version found"))));var s=a?o.sprintf(o.gettext("Version %(versionNumber)s"),{versionNumber:a.version}):r.createElement(Zp,null),l=null;if(a){var f=a.license;if(t&&f)if(f.url){var p=f.isCustom?{to:"/addon/".concat(t.slug,"/license/")}:{href:f.url,prependClientApp:!1,prependLang:!1},d=f.name?o.sprintf(o.gettext("Source code released under %(linkStart)s%(licenseName)s%(linkEnd)s"),{licenseName:f.name,linkStart:"%(linkStart)s",linkEnd:"%(linkEnd)s"}):o.gettext("Source code released under %(linkStart)sCustom License%(linkEnd)s"),h=ie({text:d,replacements:[["linkStart","linkEnd",function(e){return r.createElement(wc,Object.assign({key:t.slug},p),e)}]]});l=r.createElement("p",{className:"AddonVersionCard-license"},h)}else l=r.createElement("p",{className:"AddonVersionCard-license"},o.sprintf(o.gettext("Source code released under %(licenseName)s"),{licenseName:f.name}))}return r.createElement("li",{className:"AddonVersionCard"},r.createElement("div",{className:"AddonVersionCard-content"},r.createElement(r.Fragment,null,n&&r.createElement("h1",{className:"AddonVersionCard-header"},n),c&&r.createElement(r.Fragment,null,r.createElement(xp,{error:i}),r.createElement(zf,{addon:t})),r.createElement("h2",{className:"AddonVersionCard-version"},s),function(){if(!a)return r.createElement(Zp,null);if(!u||!u.created||!u.filesize)return null;var e={dateReleased:o.moment(u.created).format("ll"),fileSize:u.filesize};return r.createElement("div",{className:"AddonVersionCard-fileInfo"},o.sprintf(o.gettext("Released %(dateReleased)s - %(fileSize)s"),e))}(),u&&r.createElement("div",{className:"AddonVersionCard-compatibility"},u.compatibilityString),a?r.createElement("div",{className:"AddonVersionCard-releaseNotes",dangerouslySetInnerHTML:bn(a.releaseNotes)}):r.createElement(Zp,null),l)),t&&r.createElement(Gv,{addon:t}),r.createElement(Nv,{addon:t,version:a,showLinkInsteadOfButton:!c}))}));function Yk(e){return(Yk="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Zk(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function $k(e,t){return($k=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function Kk(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=Xk(e);if(t){var o=Xk(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Qk(this,n)}}function Qk(e,t){if(t&&("object"===Yk(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function Xk(e){return(Xk=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var Jk=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&$k(e,t)}(a,e);var t,n,o,i=Kk(a);function a(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),(t=i.call(this,e)).loadDataIfNeeded(),t}return t=a,(n=[{key:"componentDidUpdate",value:function(e){this.loadDataIfNeeded(e)}},{key:"loadDataIfNeeded",value:function(e){var t=this.props,n=t.addon,r=t.addonIsLoading,o=t.areVersionsLoading,i=t.dispatch,a=t.errorHandler,u=t.versions,c=t.match.params.slug,s=e&&e.addon;if(a.hasError())L.Z.warn("Not loading data because of an error");else{var l=s&&s.slug!==c;n&&!l||r||i(na({showGroupedRatings:!0,slug:c,errorHandler:a})),o||u&&!l||i(function(e){var t=e.errorHandlerId,n=e.page,r=void 0===n?"1":n,o=e.slug;return ce()(t,"errorHandlerId is required"),ce()(o,"slug is required"),{type:ff,payload:{errorHandlerId:t,page:r,slug:o}}}({errorHandlerId:a.id,slug:c}))}}},{key:"render",value:function(){var e,t=this.props,n=t.addon,o=t.errorHandler,i=t.i18n,a=t.versions,u=[];n&&a&&(e=a.find((function(e){return e.id===n.currentVersionId}))||null,u=a.filter((function(e){return e.id!==n.currentVersionId})));var c="";return n&&a&&(c=i.sprintf(i.ngettext("%(addonName)s version history - %(total)s version","%(addonName)s version history - %(total)s versions",a.length),{addonName:n.name,total:i.formatNumber(a.length)})),r.createElement(HO,{errorHandler:o,isAddonInstallPage:!0},r.createElement("div",{className:"AddonVersions"},n&&r.createElement(Ao,null,r.createElement("title",null,c)),o.renderErrorIfPresent(),r.createElement("div",{className:"AddonVersions-wrapper"},r.createElement(mk,{addon:n,headerText:c}),r.createElement(xy,{className:"AddonVersions-versions",header:c||r.createElement(Zp,null)},r.createElement("ul",null,r.createElement("li",null,r.createElement(Jc,{type:"warning"},r.createElement("span",{className:"AddonVersions-warning-text"},i.gettext("Be careful with old versions! These versions are displayed for testing and reference purposes.")),r.createElement("span",{className:"AddonVersions-warning-text"},i.gettext("You should always use the latest version of an add-on.")))),r.createElement(Vk,{addon:n,headerText:i.gettext("Latest version"),isCurrentVersion:!0,key:"latestVersion",version:e}),u.map((function(e,t){return r.createElement(Vk,{addon:n,headerText:0===t?i.gettext("Older versions"):null,key:e.id,version:e})})))))))}}])&&Zk(t.prototype,n),o&&Zk(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const eI=(0,Mo.qC)((0,g.connect)((function(e,t){var n=t.match.params.slug,r=la(e.addons,n),o=gf({slug:n,state:e.versions});return{addon:r,addonIsLoading:fa(e,n),areVersionsLoading:o,versions:!r||o?void 0:vf({slug:n,state:e.versions})}})),Eu(),gs({fileName:"src/amo/pages/AddonVersions/index.js",extractId:function(e){var t=e.location,n=e.match.params;return"".concat(n.slug,"-").concat(t.query.page||"")}}))(Jk);function tI(e){return(tI="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function nI(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function rI(e,t){return(rI=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function oI(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=aI(e);if(t){var o=aI(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return iI(this,n)}}function iI(e,t){if(t&&("object"===tI(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function aI(e){return(aI=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var uI=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&rI(e,t)}(a,e);var t,n,o,i=oI(a);function a(e){var t;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),t=i.call(this,e);var n=e.addonType,r=e.categoriesState,o=e.dispatch,u=e.errorHandler,c=e.loading;return ce()(n,"addonType is undefined"),c||r||o(eh({errorHandlerId:u.id})),o(qo(n)),t}return t=a,(n=[{key:"componentDidUpdate",value:function(e){var t=e.addonType,n=this.props,r=n.addonType,o=n.dispatch;r&&t!==r&&o(qo(r))}},{key:"render",value:function(){var e=this.props,t=e.addonType,n=e.categoriesState,o=e.className,i=e.clientApp,a=e.errorHandler,u=e.i18n,c=e.loading;ce()(t,"addonType is undefined");var s=[];n&&n[i]&&n[i][t]&&(s=Object.values(n[i][t]));var l=Ho()("Categories",o);return a.hasError()||c||s.length?r.createElement(js,{className:l,header:u.gettext("Categories")},a.renderErrorIfPresent(),c?r.createElement("div",{className:"Categories-loading"},r.createElement("span",{className:"Categories-loading-info visually-hidden"},u.gettext("Loading categories.")),Array(8).fill(0).map((function(e,t){return r.createElement(Zp,{className:"Categories-loading-text",key:"Categories-loading-text-".concat(t)})}))):r.createElement("ul",{className:"Categories-list"},s.map((function(e,n){var o=e.name,i=e.slug;return r.createElement("li",{className:"Categories-item",key:o},r.createElement(Dc,{className:"Categories-link\n Categories--category-color-".concat(n%12+1),to:{pathname:rh({addonType:t,slug:i})}},o))})))):r.createElement(js,{className:l},r.createElement("p",{className:"Categories-none-loaded-message"},u.gettext("No categories found.")))}}])&&nI(t.prototype,n),o&&nI(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const cI=(0,Mo.qC)(ms({extractId:function(e){return e.addonType},name:"Categories"}),(0,g.connect)((function(e){return{categoriesState:e.categories.categories,clientApp:e.api.clientApp,loading:e.categories.loading}})),Eu())(uI);function sI(e){return(sI="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function lI(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function fI(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function pI(e,t){return(pI=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function dI(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=yI(e);if(t){var o=yI(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return hI(this,n)}}function hI(e,t){if(t&&("object"===sI(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function yI(e){return(yI=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var mI=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&pI(e,t)}(a,e);var t,n,o,i=dI(a);function a(){return lI(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"getPageTitle",value:function(e){var t=this.props.i18n;switch(e){case D.Gz:return t.gettext("All extension categories");case D.Yd:return t.gettext("All theme categories");default:return null}}},{key:"render",value:function(){var e=En(this.props.match.params.visibleAddonType),t=this.getPageTitle(e);return r.createElement(HO,null,r.createElement(Ao,null,r.createElement("title",null,t)),r.createElement(hp,{title:t}),r.createElement(ep,null),r.createElement(cI,{addonType:e,className:"CategoriesPage"}))}}])&&fI(t.prototype,n),o&&fI(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const vI=Eu()(mI);function gI(e){return(gI="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function bI(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function wI(e,t){return(wI=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function OI(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=_I(e);if(t){var o=_I(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return EI(this,n)}}function EI(e,t){if(t&&("object"===gI(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function _I(e){return(_I=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var xI=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&wI(e,t)}(a,e);var t,n,o,i=OI(a);function a(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),(t=i.call(this,e)).props.hasCategory&&!t.props.categoryName&&t.props.dispatch(eh({errorHandlerId:t.props.errorHandler.id})),t}return t=a,(n=[{key:"render",value:function(){var e,t=this.props,n=t.categoryName,o=t.count,i=t.filters,a=t.i18n,u=t.loadingSearch,c=i||{},s=c.addonType,l=c.query,f=c.tag;if(u)u&&l?e=a.sprintf(a.gettext('Searching for "%(query)s"'),{query:l}):u&&(e=a.gettext("Searching for add-ons"));else switch(s){case D.Gz:e=n&&l&&f?a.sprintf(a.ngettext('%(count)s extension found for "%(query)s" with tag %(tag)s in %(categoryName)s','%(count)s extensions found for "%(query)s" with tag %(tag)s in %(categoryName)s',o),{count:a.formatNumber(o),query:l,categoryName:n,tag:f}):n&&l?a.sprintf(a.ngettext('%(count)s extension found for "%(query)s" in %(categoryName)s','%(count)s extensions found for "%(query)s" in %(categoryName)s',o),{count:a.formatNumber(o),query:l,categoryName:n}):n&&f?a.sprintf(a.ngettext("%(count)s extension found with tag %(tag)s in %(categoryName)s","%(count)s extensions found with tag %(tag)s in %(categoryName)s",o),{count:a.formatNumber(o),categoryName:n,tag:f}):n?a.sprintf(a.ngettext("%(count)s extension found in %(categoryName)s","%(count)s extensions found in %(categoryName)s",o),{count:a.formatNumber(o),categoryName:n}):l&&f?a.sprintf(a.ngettext('%(count)s extension found for "%(query)s" with tag %(tag)s','%(count)s extensions found for "%(query)s" with tag %(tag)s',o),{count:a.formatNumber(o),query:l,tag:f}):l?a.sprintf(a.ngettext('%(count)s extension found for "%(query)s"','%(count)s extensions found for "%(query)s"',o),{count:a.formatNumber(o),query:l}):f?a.sprintf(a.ngettext("%(count)s extension found with tag %(tag)s","%(count)s extensions found with tag %(tag)s",o),{count:a.formatNumber(o),tag:f}):a.sprintf(a.ngettext("%(count)s extension found","%(count)s extensions found",o),{count:a.formatNumber(o)});break;case D.Yd:e=n&&l&&f?a.sprintf(a.ngettext('%(count)s theme found for "%(query)s" with tag %(tag)s in %(categoryName)s','%(count)s themes found for "%(query)s" with tag %(tag)s in %(categoryName)s',o),{count:a.formatNumber(o),query:l,categoryName:n,tag:f}):n&&l?a.sprintf(a.ngettext('%(count)s theme found for "%(query)s" in %(categoryName)s','%(count)s themes found for "%(query)s" in %(categoryName)s',o),{count:a.formatNumber(o),query:l,categoryName:n}):n&&f?a.sprintf(a.ngettext("%(count)s theme found with tag %(tag)s in %(categoryName)s","%(count)s themes found with tag %(tag)s in %(categoryName)s",o),{count:a.formatNumber(o),categoryName:n,tag:f}):n?a.sprintf(a.ngettext("%(count)s theme found in %(categoryName)s","%(count)s themes found in %(categoryName)s",o),{count:a.formatNumber(o),categoryName:n}):l&&f?a.sprintf(a.ngettext('%(count)s theme found for "%(query)s" with tag %(tag)s','%(count)s themes found for "%(query)s" with tag %(tag)s',o),{count:a.formatNumber(o),query:l,tag:f}):l?a.sprintf(a.ngettext('%(count)s theme found for "%(query)s"','%(count)s themes found for "%(query)s"',o),{count:a.formatNumber(o),query:l}):f?a.sprintf(a.ngettext("%(count)s theme found with tag %(tag)s","%(count)s themes found with tag %(tag)s",o),{count:a.formatNumber(o),tag:f}):a.sprintf(a.ngettext("%(count)s theme found","%(count)s themes found",o),{count:a.formatNumber(o)});break;default:e=l&&f?a.sprintf(a.ngettext('%(count)s result found for "%(query)s" with tag %(tag)s','%(count)s results found for "%(query)s" with tag %(tag)s',o),{count:a.formatNumber(o),query:l,tag:f}):l?a.sprintf(a.ngettext('%(count)s result found for "%(query)s"','%(count)s results found for "%(query)s"',o),{count:a.formatNumber(o),query:l}):f?a.sprintf(a.ngettext("%(count)s result found with tag %(tag)s","%(count)s results found with tag %(tag)s",o),{count:a.formatNumber(o),tag:f}):a.sprintf(a.ngettext("%(count)s result found","%(count)s results found",o),{count:a.formatNumber(o)})}return r.createElement(js,{className:"SearchContextCard"},r.createElement("h1",{className:"SearchContextCard-header"},e))}}])&&bI(t.prototype,n),o&&bI(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const SI=(0,Mo.qC)(Eu(),(0,g.connect)((function(e){var t,n=e.search,r=n.filters,o=null;if(n&&r&&r.category&&"string"==typeof r.category&&(t=r.category),t){var i=e.categories.categories,a=e.api.clientApp;if(i&&a){var u=i[a];if(u&&r&&r.addonType&&"string"==typeof r.addonType){var c=u[r.addonType];o=oh(c,t)}}}return{hasCategory:!!t,categoryName:o,count:n.count||0,filters:r,loadingSearch:n.loading}})),ms({id:"SearchContextCard"}))(xI);function jI(e){return(jI="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function PI(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function kI(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function II(e,t){return(II=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function TI(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=CI(e);if(t){var o=CI(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return RI(this,n)}}function RI(e,t){if(t&&("object"===jI(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function CI(e){return(CI=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var AI=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&II(e,t)}(a,e);var t,n,o,i=TI(a);function a(){var e;PI(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).onClick=function(t){var n=e.props.uiState;t.preventDefault(),e.props.setUIState({expanded:!n.expanded})},e}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.children,n=e.className,o=e.header,i=e.id,a=e.i18n,u=e.uiState.expanded;ce()(t,"The children property is required"),ce()(i,"The id property is required");var c=r.createElement("a",{"aria-checked":u,className:"ExpandableCard-ToggleLink",href:"#toggle-content",onClick:this.onClick,role:"switch",title:a.gettext("Toggle contents")},o,r.createElement(ac,{className:"ExpandableCard-ToggleArrow",name:"triangle-down-black"}));return r.createElement(js,{className:Ho()("ExpandableCard",n,{"ExpandableCard--expanded":u}),header:c},r.createElement("div",{className:"ExpandableCard-contents"},t))}}])&&kI(t.prototype,n),o&&kI(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const NI=(0,Mo.qC)(Eu(),Bu({fileName:"src/amo/components/ExpandableCard/index.js",extractId:function(e){return e.id},initialState:{expanded:!1}}))(AI);function LI(e){return(LI="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var DI;function MI(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function FI(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function UI(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?FI(Object(n),!0).forEach((function(t){BI(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):FI(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function BI(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function HI(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function qI(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function zI(e,t){return(zI=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function GI(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=VI(e);if(t){var o=VI(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return WI(this,n)}}function WI(e,t){if(t&&("object"===LI(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function VI(e){return(VI=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var YI="",ZI=kt.sort,$I=function(t){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&zI(e,t)}(u,t);var n,o,i,a=GI(u);function u(){var t;HI(this,u);for(var n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=a.call.apply(a,[this].concat(r))).onSelectElementChange=function(n){n.preventDefault();var r=t.props.filters,o=UI({},r),i=n.currentTarget.getAttribute("name"),a=n.currentTarget.value;if(i){if((o.category||o.tag)&&i===ZI&&a!==D.xZ?o[i]="".concat(D.xZ,",").concat(a):o[i]=a,o[i]===r[i])return L.Z.debug((0,e.f9)(DI||(DI=MI(["onSelectElementChange() called in SearchFilters but\n the filter "," did not change–not changing route."])),i)),!1;o[i]===YI&&delete o[i]}return!o.promoted&&o.sort&&o.sort===D.wn&&delete o.sort,t.doSearch(o),!1},t}return n=u,(o=[{key:"doSearch",value:function(e){var t=this.props,n=t.clientApp,r=t.lang,o=t.history,i=t.pathname,a=UI({},e);a.page&&(a.page="1"),a.category?(delete a.category,delete a.addonType):a.tag&&delete a.tag,o.push({pathname:"/".concat(r,"/").concat(n).concat(i),query:Tt(a)})}},{key:"addonTypeOptions",value:function(){var e=this.props.i18n,t=[{children:e.gettext("All"),value:YI},{children:e.gettext("Extension"),value:D.Gz}];return t.push({children:e.gettext("Theme"),value:D.Yd}),t}},{key:"sortOptions",value:function(){var e=this.props.i18n;return[{children:e.gettext("Relevance"),value:D.BH},{children:e.gettext("Recently Updated"),value:D.My},{children:e.gettext("Most Users"),value:D.Nu},{children:e.gettext("Top Rated"),value:D.kc},{children:e.gettext("Trending"),value:D.Mj}]}},{key:"promotedOptions",value:function(){var e=this.props.i18n;return[{children:e.gettext("Any"),value:YI},{children:e.gettext("Recommended"),value:D.g$},{children:e.gettext("By Firefox"),value:D.fq},{children:e.gettext("Verified"),value:D.J6},{children:e.gettext("All Reviewed"),value:D.cr}]}},{key:"render",value:function(){var e=this.props,t=e.clientApp,n=e.filters,o=e.i18n,i="SearchFilters",a=(n.sort?n.sort.split(",").filter((function(e){return e!==D.xZ})):[""])[0];return r.createElement(NI,{className:i,header:o.gettext("Filter results"),id:i},r.createElement("form",{autoComplete:"off"},r.createElement("label",{className:"SearchFilters-label",htmlFor:"SearchFilters-Sort"},o.gettext("Sort by")),r.createElement(Is,{className:"SearchFilters-Sort SearchFilters-select",id:"SearchFilters-Sort",name:ZI,onChange:this.onSelectElementChange,value:a||D.BH},this.sortOptions().map((function(e){return r.createElement("option",Object.assign({key:e.value},e))}))),!n.category&&t!==D.wZ&&r.createElement("div",null,r.createElement("label",{className:"SearchFilters-AddonType-label SearchFilters-label",htmlFor:"SearchFilters-AddonType"},o.gettext("Add-on Type")),r.createElement(Is,{className:"SearchFilters-AddonType SearchFilters-select",id:"SearchFilters-AddonType",name:"addonType",onChange:this.onSelectElementChange,value:n.addonType||YI},this.addonTypeOptions().map((function(e){return r.createElement("option",Object.assign({key:e.value},e))})))),t!==D.wZ&&r.createElement("div",null,r.createElement("label",{className:"SearchFilters-Badging-label SearchFilters-label",htmlFor:"SearchFilters-Badging"},o.gettext("Badging")),r.createElement(Is,{className:"SearchFilters-Badging SearchFilters-select",id:"SearchFilters-Badging",name:"promoted",onChange:this.onSelectElementChange,value:n.promoted||YI},this.promotedOptions().map((function(e){return r.createElement("option",Object.assign({key:e.value},e))}))))))}}])&&qI(n.prototype,o),i&&qI(n,i),Object.defineProperty(n,"prototype",{writable:!1}),u}(r.Component);const KI=(0,Mo.qC)(No,(0,g.connect)((function(e){return{clientApp:e.api.clientApp,lang:e.api.lang}})),Eu(),ms({name:"SearchFilters"}))($I);function QI(e){return(QI="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function XI(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function JI(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function eT(e,t){return(eT=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function tT(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=rT(e);if(t){var o=rT(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return nT(this,n)}}function nT(e,t){if(t&&("object"===QI(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function rT(e){return(rT=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var oT=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&eT(e,t)}(a,e);var t,n,o,i=tT(a);function a(){return XI(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e,t,n=this.props,o=n.count,i=n.filters,a=n.i18n,u=n.loading,c=n.paginator,s=n.results,l=i.query;u?e=r.createElement("div",{className:"visually-hidden"},a.gettext("Searching…")):0===o&&(t=l?a.sprintf(a.gettext('No results were found for "%(query)s".'),{query:l}):a.gettext("No results were found."));var f=i.promoted?D.Ow:D.Eb;return r.createElement("div",{className:"SearchResults"},e,r.createElement(Ny,{addonInstallSource:f,addons:s,footer:c,header:a.gettext("Search results"),loading:u,showFullSizePreview:!0},t?r.createElement("p",{className:"SearchResults-message"},t):null))}}])&&JI(t.prototype,n),o&&JI(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);oT.defaultProps={count:0,filters:{},results:[]};const iT=(0,Mo.qC)(Eu())(oT);function aT(e){return(aT="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function uT(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function cT(e,t){return(cT=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function sT(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=fT(e);if(t){var o=fT(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return lT(this,n)}}function lT(e,t){if(t&&("object"===aT(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function fT(e){return(fT=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var pT=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&cT(e,t)}(a,e);var t,n,o,i=sT(a);function a(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),(t=i.call(this,e)).dispatchSearch({newFilters:e.filters,oldFilters:e.filtersUsedForResults}),t}return t=a,(n=[{key:"componentDidUpdate",value:function(e){var t=e.filters,n=this.props.filters;this.dispatchSearch({newFilters:n,oldFilters:t})}},{key:"dispatchSearch",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.newFilters,n=e.oldFilters,r=this.props,o=r.context,i=r.dispatch,a=r.errorHandler,u=t||{},c=u.addonType;Vy()(n,t)||(i(nf({errorHandlerId:a.id,filters:u})),c&&i(qo(c))),c||o===D.cs||i(qo(D.cs))}},{key:"renderHelmet",value:function(){var e=this.props,t=e.i18n,n=e.filters,o=e.pageTitle,i=e.count,a=o;if(!a)if(a=t.gettext("Search results"),n&&n.promoted){if(n.promoted===D.g$)switch(n.addonType){case D.Gz:a=t.gettext("Recommended extensions");break;case D.Yd:a=t.gettext("Recommended themes");break;default:a=t.gettext("Recommended add-ons")}else if(n.promoted===D.fq)switch(n.addonType){case D.Gz:a=t.gettext("Extensions by Firefox");break;case D.Yd:a=t.gettext("Themes by Firefox");break;default:a=t.gettext("Add-ons by Firefox")}else if(n.promoted===D.cr)switch(n.addonType){case D.Gz:a=t.gettext("Reviewed extensions");break;case D.Yd:a=t.gettext("Reviewed themes");break;default:a=t.gettext("Reviewed add-ons")}else if(n.promoted===D.J6)switch(n.addonType){case D.Gz:a=t.gettext("Verified extensions");break;case D.Yd:a=t.gettext("Verified themes");break;default:a=t.gettext("Verified add-ons")}}else if(n&&n.sort)switch(n.sort){case D.Mj:switch(n.addonType){case D.Gz:a=t.gettext("Trending extensions");break;case D.Yd:a=t.gettext("Trending themes");break;default:a=t.gettext("Trending add-ons")}break;case D.kc:switch(n.addonType){case D.Gz:a=t.gettext("Top rated extensions");break;case D.Yd:a=t.gettext("Top rated themes");break;default:a=t.gettext("Top rated add-ons")}break;case D.Nu:switch(n.addonType){case D.Gz:a=t.gettext("Popular extensions");break;case D.Yd:a=t.gettext("Popular themes");break;default:a=t.gettext("Popular add-ons")}}else n&&n.query&&(a=t.sprintf(t.gettext('Search results for "%(query)s"'),{query:n.query}));return r.createElement(Ao,null,r.createElement("title",null,a),0===i&&r.createElement("meta",{name:"robots",content:"noindex, follow"}))}},{key:"render",value:function(){var e=this.props,t=e.LinkComponent,n=e.count,o=e.errorHandler,i=e.filters,a=e.loading,u=e.pageSize,c=e.paginationQueryParams,s=e.pathname,l=e.results;if(o.hasError()&&(L.Z.warn("Captured API Error: ".concat(o.capturedError.messages)),[400,404].includes(o.capturedError.responseStatusCode)))return r.createElement(jg,null);var f=c||Tt(i),p=i?i.page:void 0,d=n>Number(u)?r.createElement(ym,{LinkComponent:t,count:n,currentPage:p,pathname:s,perPage:Number(u),queryParams:f}):null;return r.createElement("div",{className:"Search"},this.renderHelmet(),o.renderErrorIfPresent(),r.createElement(SI,null),r.createElement(KI,{filters:i||{},pathname:s}),r.createElement(iT,{count:n,filters:i,loading:a,paginator:d,results:l}))}}])&&uT(t.prototype,n),o&&uT(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);pT.defaultProps={LinkComponent:wc,paginationQueryParams:null,pathname:"/search/"};const dT=(0,Mo.qC)((0,g.connect)((function(e){return{context:e.viewContext.context,count:e.search.count,filtersUsedForResults:e.search.filters,loading:e.search.loading,pageSize:e.search.pageSize,results:e.search.results}})),Eu(),gs({fileName:"src/amo/components/Search/index.js",extractId:function(e){return e.filters?e.filters.page:""}}))(pT);function hT(e){return(hT="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function yT(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function mT(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?yT(Object(n),!0).forEach((function(t){vT(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):yT(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function vT(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function gT(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function bT(e,t){return(bT=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function wT(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=ET(e);if(t){var o=ET(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return OT(this,n)}}function OT(e,t){if(t&&("object"===hT(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function ET(e){return(ET=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var _T=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&bT(e,t)}(a,e);var t,n,o,i=wT(a);function a(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),(t=i.call(this,e)).props.categoryName||t.props.dispatch(eh({errorHandlerId:t.props.errorHandler.id})),t}return t=a,(n=[{key:"getPageTitle",value:function(e){var t=this.props,n=t.addonType,r=t.i18n;return n===D.Yd?e?r.sprintf(r.gettext("Themes in %(categoryName)s"),{categoryName:e}):r.gettext("Themes"):e?r.sprintf(r.gettext("Extensions in %(categoryName)s"),{categoryName:e}):r.gettext("Extensions")}},{key:"render",value:function(){var e=this.props,t=e.addonType,n=e.categoryName,o=e.filters,i=e.match.params.categorySlug,a=mT(mT({},o),{},{addonType:t,category:i,sort:o.sort||D.YM});return r.createElement(HO,null,r.createElement(ep,null),r.createElement(dT,{filters:a,pageTitle:this.getPageTitle(n),paginationQueryParams:Tt(o),pathname:rh({addonType:t,slug:i})}))}}])&&gT(t.prototype,n),o&&gT(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const xT=(0,Mo.qC)((0,g.connect)((function(e,t){var n=e.router.location,r=t.match.params,o=r.categorySlug,i=null,a=En(r.visibleAddonType),u=e.categories.categories,c=e.api.clientApp;if(u&&c){var s=u[c];if(s){var l=s[a];i=oh(l,o)}}var f=Rt(n.query);return{addonType:a,categoryName:i,filters:Nt(f)}})),Eu(),gs({fileName:"src/amo/pages/CategoryPage/index.js",extractId:function(e){return e.match.params.categorySlug}}))(_T);a(99385);var ST="src/amo/components/CollectionAddAddon/index.js";function jT(e){return(jT="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function PT(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function kT(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function IT(e,t){return(IT=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function TT(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=CT(e);if(t){var o=CT(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return RT(this,n)}}function RT(e,t){if(t&&("object"===jT(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function CT(e){return(CT=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var AT="added",NT=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&IT(e,t)}(a,e);var t,n,o,i=TT(a);function a(){var e;PT(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).resetMessages=function(){e.props.setUIState({addonAction:null}),e.timeout&&e.props.clearTimeout(e.timeout)},e.onAddonSelected=function(t){var n=e.props,r=n.collection,o=n.dispatch,i=n.errorHandler,a=n.filters,u=t.addonId;ce()(u,"addonId is required"),ce()(r,"collection is required"),o(tu({addonId:u,collectionId:r.id,editing:!0,errorHandlerId:i.id,filters:a,slug:r.slug,userId:r.authorId})),e.resetMessages()},e}return t=a,(n=[{key:"componentDidUpdate",value:function(e){var t=e.hasAddonBeenAdded,n=e.hasAddonBeenRemoved,r=this.props,o=r.errorHandler,i=r.hasAddonBeenAdded,a=r.hasAddonBeenRemoved,u=r.setTimeout,c=r.setUIState,s=t!==i,l=n!==a;s&&c({addonAction:i?AT:null}),l&&c({addonAction:a?"removed":null}),(s||l)&&(i||a)&&(o.clear(),this.timeout=u(this.resetMessages,5e3))}},{key:"componentWillUnmount",value:function(){this.resetMessages()}},{key:"render",value:function(){var e=this.props,t=e.collection,n=e.errorHandler,o=e.i18n,i=e.uiState.addonAction,a=i===AT;return r.createElement(js,{className:"CollectionAddAddon"},n.hasError()?n.renderError():r.createElement(Lm,{className:"CollectionAddAddon-noticePlaceholder"},i&&r.createElement(Zm,{classNames:"CollectionAddAddon-noticePlaceholder-transition",timeout:450},r.createElement(Jc,{type:a?"success":"generic"},a?o.gettext("Added to collection"):o.gettext("Removed from collection")))),r.createElement(jb,{inputName:"collection-addon-query",inputPlaceholder:o.gettext("Find an add-on to include in this collection"),onSuggestionSelected:this.onAddonSelected,selectSuggestionText:o.gettext("Add to collection"),key:t?t.id:""}))}}])&&kT(t.prototype,n),o&&kT(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);NT.defaultProps={setTimeout:"undefined"!=typeof window?window.setTimeout.bind(window):function(){},clearTimeout:"undefined"!=typeof window?window.clearTimeout.bind(window):function(){}};var LT=function(e){var t=e.collection;return"collection".concat(t?t.id:"")};const DT=(0,Mo.qC)((0,g.connect)((function(e){return{hasAddonBeenAdded:e.collections.hasAddonBeenAdded,hasAddonBeenRemoved:e.collections.hasAddonBeenRemoved}})),Eu(),gs({fileName:ST,extractId:LT}),Bu({fileName:ST,extractId:LT,initialState:{addonAction:null}}))(NT);function MT(e){return(MT="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function FT(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function UT(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?FT(Object(n),!0).forEach((function(t){BT(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):FT(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function BT(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function HT(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function qT(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function zT(e,t){return(zT=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function GT(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=VT(e);if(t){var o=VT(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return WT(this,n)}}function WT(e,t){if(t&&("object"===MT(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function VT(e){return(VT=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var YT=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&zT(e,t)}(a,e);var t,n,o,i=GT(a);function a(){var e;HT(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).onSortSelect=function(t){var n=e.props,r=n.collection,o=n.clientApp,i=n.editing,a=n.filters,u=n.lang,c=n.history;ce()(r,"A collection is required.");var s=t.currentTarget.value,l=UT(UT({},a),{},{collectionSort:s}),f="/".concat(u,"/").concat(o).concat(i?du({collection:r}):pu({collection:r}));c.push({pathname:f,query:fu(l)})},e}return t=a,(n=[{key:"sortOptions",value:function(){var e=this.props.i18n;return[{label:e.gettext("Newest first"),value:D.Y4},{label:e.gettext("Oldest first"),value:D.pn},{label:e.gettext("Name"),value:D.eO},{label:e.gettext("Popularity"),value:D.Nx}]}},{key:"render",value:function(){var e=this.props,t=e.filters,n=e.i18n;return r.createElement("form",{className:"CollectionSort"},r.createElement("label",{className:"CollectionSort-label",htmlFor:"CollectionSort-select"},n.gettext("Sort add-ons by")),r.createElement(Is,{className:"CollectionSort-select",defaultValue:t.collectionSort,id:"CollectionSort-select",name:"sort",onChange:this.onSortSelect},this.sortOptions().map((function(e){return r.createElement("option",{key:e.value,value:e.value},e.label)}))))}}])&&qT(t.prototype,n),o&&qT(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const ZT=(0,Mo.qC)(No,(0,g.connect)((function(e){return{clientApp:e.api.clientApp,lang:e.api.lang}})),Eu())(YT);function $T(e){return($T="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function KT(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function QT(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function XT(e,t){return(XT=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function JT(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=tR(e);if(t){var o=tR(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return eR(this,n)}}function eR(e,t){if(t&&("object"===$T(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function tR(e){return(tR=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var nR=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&XT(e,t)}(a,e);var t,n,o,i=JT(a);function a(){return KT(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.collection,n=e.editing,o=e.filters;return r.createElement(js,{className:"CollectionControls"},r.createElement(ZT,{collection:t,editing:n,filters:o}))}}])&&QT(t.prototype,n),o&&QT(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);function rR(e){return(rR="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function oR(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function iR(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function aR(e,t){return(aR=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function uR(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=sR(e);if(t){var o=sR(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return cR(this,n)}}function cR(e,t){if(t&&("object"===rR(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function sR(e){return(sR=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var lR=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&aR(e,t)}(a,e);var t,n,o,i=uR(a);function a(){var e;oR(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).onEditDetails=function(t){var n=e.props.dispatch;t.preventDefault(),t.stopPropagation(),n(ru())},e}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.collection,n=e.editing,o=e.filters,i=e.hasEditPermission,a=e.i18n,u=e.showEditButton;return r.createElement("div",{className:"CollectionDetails"},r.createElement("h1",{className:"CollectionDetails-title"},t?hu({name:t.name,i18n:a}):r.createElement(Zp,null)),r.createElement("p",{className:"CollectionDetails-description"},t?t.description:r.createElement(Zp,null)),r.createElement($p,{metadata:[{content:t?t.numberOfAddons:null,title:a.gettext("Add-ons")},{content:t?t.authorName:null,title:a.gettext("Creator")},{content:t?a.moment(t.lastUpdatedDate).format("ll"):null,title:a.gettext("Last updated")}]}),t&&u&&!n&&r.createElement(Dc,{buttonType:"neutral",className:"CollectionDetails-edit-button",puffy:!0,to:{pathname:du({collection:t}),query:fu(o)}},a.gettext("Edit this collection")),t&&n&&i&&r.createElement(Dc,{buttonType:"neutral",className:"CollectionDetails-edit-details-button",puffy:!0,href:"#editdetails",onClick:this.onEditDetails},a.gettext("Edit collection details")),t&&n&&r.createElement(Dc,{buttonType:"cancel",className:"CollectionDetails-back-to-collection-button",to:{pathname:pu({collection:t}),query:fu(o)}},a.gettext("Back to collection")))}}])&&iR(t.prototype,n),o&&iR(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const fR=(0,Mo.qC)(Eu(),(0,g.connect)())(lR);var pR;function dR(e){return(dR="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function hR(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function yR(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?hR(Object(n),!0).forEach((function(t){mR(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):hR(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function mR(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function vR(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function gR(e,t){return(gR=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function bR(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=OR(e);if(t){var o=OR(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return wR(this,n)}}function wR(e,t){if(t&&("object"===dR(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function OR(e){return(OR=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var ER=function(e){return{collectionId:e.collection?e.collection.id:null,customSlug:!1,description:e.collection&&e.collection.description?e.collection.description:"",name:e.collection?e.collection.name:"",slug:e.collection?e.collection.slug:""}},_R=function(n){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&gR(e,t)}(c,n);var o,i,a,u=bR(c);function c(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,c),(t=u.call(this,e)).onCancel=function(e){var n=t.props,r=n.clientApp,o=n.creating,i=n.dispatch,a=n.history,u=n.siteLang;o&&a.push("/".concat(u,"/").concat(r,"/collections/")),e.preventDefault(),e.stopPropagation(),i(ou())},t.onSubmit=function(e){var n=t.props,r=n.collection,o=n.creating,i=n.currentUserId,a=n.dispatch,u=n.errorHandler,c=n.filters,s=n.location,l=n.siteLang;e.preventDefault(),e.stopPropagation();var f=t.state,p=f.name,d=f.slug;p=p&&p.trim(),d=d&&d.trim(),ce()(l,"The form cannot be submitted without a site language"),ce()(p,"The form cannot be submitted without a name"),ce()(d,"The form cannot be submitted without a slug");var h={description:mR({},l,t.state.description),errorHandlerId:u.id,name:mR({},l,p),slug:d};o&&i?a(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.errorHandlerId,n=e.defaultLocale,r=e.description,o=e.includeAddonId,i=e.name,a=e.slug,u=e.userId;return ce()(t,"errorHandlerId is required"),ce()(u,"userId is required"),ce()(i,"name is required when creating a collection"),ce()(a,"slug is required when creating a collection"),{type:La,payload:{errorHandlerId:t,defaultLocale:n,description:r,includeAddonId:o,name:i,slug:a,userId:u}}}(yR(yR({},h),{},{defaultLocale:l,includeAddonId:s.query.include_addon_id,userId:i}))):(ce()(r,"The form cannot be submitted without a collection"),a(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.collectionSlug,n=e.defaultLocale,r=e.description,o=e.errorHandlerId,i=e.filters,a=e.name,u=e.slug,c=e.userId;return ce()(t,"collectionSlug is required when updating"),ce()(o,"errorHandlerId is required"),ce()(i,"filters is required"),ce()(c,"userId is required"),{type:Aa,payload:{collectionSlug:t,defaultLocale:n,description:r,errorHandlerId:o,filters:i,name:a,slug:u,userId:c}}}(yR(yR({},h),{},{collectionSlug:r.slug,defaultLocale:r.defaultLocale,filters:c,userId:r.authorId}))))},t.onTextInput=function(e){e.preventDefault();var n=e.target,r=n.name,o=n.value,i=t.props.creating;if(void 0!==o){var a=o.trim();i&&"name"===r&&!t.state.customSlug?t.setState({slug:a.split(/[^A-Za-z0-9]/).filter((function(e){return""!==e})).join("-").substring(0,30),name:o}):i&&"slug"===r&&""!==a?t.setState({customSlug:!0,slug:o}):t.setState(mR({},r,o))}},t.state=ER(e),t}return o=c,a=[{key:"getDerivedStateFromProps",value:function(e,t){return e.collection&&e.collection.id!==t.collectionId?ER(e):null}}],(i=[{key:"render",value:function(){var n,o,i=this.props,a=i.collection,u=i.creating,c=i.currentUserId,s=i.errorHandler,l=i.i18n,f=i.isCollectionBeingModified,p=i.siteLang,d=this.state,h=d.description,y=d.name,m=d.slug,v=(0,e.IV)(pR||(n=["","/","/firefox/collections/\n ","/"],o||(o=n.slice(0)),pR=Object.freeze(Object.defineProperties(n,{raw:{value:Object.freeze(o)}}))),t.Z.get("apiHost"),p,a&&a.authorId||c),g=a&&a.name===y&&a.slug===m&&(a.description===h||null===a.description&&!h),b=!a&&!u||f,w=!(y&&y.trim().length),O=!(m&&m.trim().length),E=b||g||w||O,_=u?l.gettext("Create collection"):l.gettext("Save changes");return r.createElement("form",{className:"CollectionManager",onSubmit:this.onSubmit},s.renderErrorIfPresent(),r.createElement("label",{className:"CollectionManager-collectionName",htmlFor:"collectionName"},l.gettext("Collection name")),a||u?r.createElement("input",{onChange:this.onTextInput,id:"collectionName",name:"name",type:"text",value:this.state.name}):r.createElement(Zp,{minWidth:60}),r.createElement("label",{htmlFor:"collectionDescription"},l.gettext("Description")),a||u?r.createElement("textarea",{value:this.state.description,id:"collectionDescription",name:"description",onChange:this.onTextInput}):r.createElement(Zp,{minWidth:60}),r.createElement("label",{htmlFor:"collectionSlug"},l.gettext("Custom URL")),r.createElement("div",{className:"CollectionManager-slug"},r.createElement("div",{id:"collectionUrlPrefix",title:v,className:"CollectionManager-slug-url-hint"},r.createElement("div",{className:"CollectionManager-slug-url-prefix"},v,"‎")),r.createElement("input",{onChange:this.onTextInput,id:"collectionSlug",maxLength:30,name:"slug",type:"text",value:this.state.slug})),r.createElement("footer",{className:"CollectionManager-footer"},r.createElement(Dc,{buttonType:"neutral",disabled:b,onClick:this.onCancel,className:"CollectionManager-cancel",puffy:!0,type:"button"},l.gettext("Cancel")),r.createElement(Dc,{buttonType:"action",disabled:E,className:"CollectionManager-submit",type:"submit",puffy:!0},_)))}}])&&vR(o.prototype,i),a&&vR(o,a),Object.defineProperty(o,"prototype",{writable:!1}),c}(r.Component);const xR=(0,Mo.qC)(No,Eu(),gs({fileName:"src/amo/components/CollectionManager/index.js",extractId:function(e){var t=e.collection;return"collection-".concat(t?t.slug:"")}}),(0,g.connect)((function(e){var t=Xe(e.users);return{clientApp:e.api.clientApp,currentUserId:t&&t.id,isCollectionBeingModified:e.collections.isCollectionBeingModified,siteLang:e.api.lang}})))(_R);const SR=(0,Mo.qC)((0,g.connect)((function(e,n){var r=n.collection,o=Xe(e.users),i=r&&o&&r.authorId===o.id,a=!1,u=!1;if(r&&o){var c=t.Z.get("mozillaUserId");u=(a=i||r.authorId===c&&et(e,D.ut))||r.authorId===c&&r.slug===D.Sw&&et(e,D.z1)}return{editingCollectionDetails:e.collections.editingCollectionDetails,hasEditPermission:a,hasMaintainerPermission:u}})))((function(e){var t=e.collection,n=e.creating,o=e.editing,i=e.editingCollectionDetails,a=e.filters,u=e.hasEditPermission,c=e.hasMaintainerPermission;return n||i?r.createElement(xR,{collection:t,creating:n,filters:a}):r.createElement(fR,{collection:t,editing:o,filters:a,hasEditPermission:u,showEditButton:c&&!o})}));const jR=function(){return r.createElement(HO,{showWrongPlatformWarning:!1},r.createElement(jg,null))};function PR(e){return(PR="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function kR(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function IR(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function TR(e,t){return(TR=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function RR(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=AR(e);if(t){var o=AR(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return CR(this,n)}}function CR(e,t){if(t&&("object"===PR(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function AR(e){return(AR=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var NR=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&TR(e,t)}(a,e);var t,n,o,i=RR(a);function a(){var e;kR(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).onConfirm=function(t){e.props.setUIState({showConfirmation:!1}),e.props.onConfirm(t)},e.toggleConfirmation=function(t){t.preventDefault(),e.props.setUIState({showConfirmation:!e.props.uiState.showConfirmation})},e}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.buttonType,n=e.cancelButtonText,o=e.cancelButtonType,i=e.children,a=e.className,u=e.confirmButtonText,c=e.confirmButtonType,s=e.htmlType,l=e.id,f=e.message,p=e.onConfirm,d=e.puffyButtons,h=e.uiState;ce()(i,"The children property is required"),ce()(l,"The id property is required"),ce()(p,"The onConfirm property is required");var y=h.showConfirmation,m=Ho()("ConfirmButton",a,{"ConfirmButton--show-confirmation":y});return r.createElement("div",{className:m},y?r.createElement($j,{cancelButtonText:n,cancelButtonType:o,confirmButtonText:u,confirmButtonType:c,onCancel:this.toggleConfirmation,onConfirm:this.onConfirm,message:f,puffyButtons:d}):r.createElement(Dc,{buttonType:t,htmlType:s,className:"ConfirmButton-default-button",onClick:this.toggleConfirmation},i))}}])&&IR(t.prototype,n),o&&IR(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);NR.defaultProps={buttonType:"neutral"};const LR=(0,Mo.qC)(Bu({fileName:"src/amo/components/ConfirmButton/index.js",extractId:function(e){return e.id},initialState:{showConfirmation:!1},resetOnUnmount:!0}))(NR);function DR(e){return(DR="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function MR(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function FR(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?MR(Object(n),!0).forEach((function(t){UR(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):MR(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function UR(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function BR(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function HR(e,t){return(HR=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function qR(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=GR(e);if(t){var o=GR(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return zR(this,n)}}function zR(e,t){if(t&&("object"===DR(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function GR(e){return(GR=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var WR=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&HR(e,t)}(a,e);var t,n,o,i=qR(a);function a(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),(t=i.call(this,e)).onDelete=function(e){e.preventDefault();var n=t.props,r=n.dispatch,o=n.errorHandler,i=n.collection;ce()(i,"collection is required");var a=i.slug,u=i.authorId;ce()(a,"slug is required"),ce()(u,"userId is required"),r(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.errorHandlerId,n=e.slug,r=e.userId;return ce()(t,"The errorHandlerId parameter is required"),ce()(n,"The slug parameter is required"),ce()(r,"The userId parameter is required"),{type:Ba,payload:{errorHandlerId:t,slug:n,userId:r}}}({errorHandlerId:o.id,slug:a,userId:u}))},t.removeAddon=function(e){var n=t.props,r=n.collection,o=n.dispatch,i=n.errorHandler,a=n.filters,u=n.history;ce()(r,"collection is required");var c=r.slug,s=r.authorId;ce()(c,"slug is required"),ce()(s,"userId is required");var l=a.page,f=!1,p=function(e){var t=e.collection,n=e.currentPage,r=t.numberOfAddons,o=t.pageSize,i="1";if(o&&r){var a=Math.ceil((r-1)/Number(o));if(parseInt(n,10)<a)return n;i=a}return i?i.toString():"1"}({collection:r,currentPage:l});if(l!==p&&(l=p,f=!0),o(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.addonId,n=e.errorHandlerId,r=e.filters,o=e.slug,i=e.userId;return ce()(t,"The addonId parameter is required"),ce()(n,"The errorHandlerId parameter is required"),ce()(r,"The filters parameter is required"),ce()(o,"The slug parameter is required"),ce()(i,"The userId parameter is required"),{type:Fa,payload:{addonId:t,errorHandlerId:n,filters:r,slug:o,userId:i}}}({addonId:e,errorHandlerId:i.id,filters:FR(FR({},a),{},{page:l}),slug:c,userId:s})),f){var d=u.location;u.push({pathname:d.pathname,query:FR(FR({},d.query),{},{page:l})})}},t.deleteNote=function(e,n){var r=t.props,o=r.collection,i=r.dispatch,a=r.filters,u=r.lang;ce()(o,"collection is required");var c=o.slug,s=o.authorId;ce()(c,"slug is required"),ce()(s,"userId is required"),i(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.addonId,n=e.errorHandlerId,r=e.filters,o=e.lang,i=e.slug,a=e.userId;return ce()(t,"The addonId parameter is required"),ce()(n,"The errorHandlerId parameter is required"),ce()(r,"The filters parameter is required"),ce()(o,"The lang parameter is required"),ce()(i,"The slug parameter is required"),ce()(a,"The userId parameter is required"),{type:qa,payload:{addonId:t,errorHandlerId:n,filters:r,notes:wa({},o,""),slug:i,userId:a}}}({addonId:e,errorHandlerId:n.id,filters:a,lang:u,slug:c,userId:s}))},t.saveNote=function(e,n,r){var o=t.props,i=o.collection,a=o.dispatch,u=o.filters,c=o.lang;ce()(i,"collection is required");var s=i.slug,l=i.authorId;ce()(s,"slug is required"),ce()(l,"userId is required"),a(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.addonId,n=e.errorHandlerId,r=e.notes,o=e.filters,i=e.slug,a=e.userId;return ce()(t,"The addonId parameter is required"),ce()(n,"The errorHandlerId parameter is required"),ce()(null!=r,"The notes parameter is required"),ce()(o,"The filters parameter is required"),ce()(i,"The slug parameter is required"),ce()(a,"The userId parameter is required"),{type:Ha,payload:{addonId:t,errorHandlerId:n,notes:r,filters:o,slug:i,userId:a}}}({addonId:e,errorHandlerId:n.id,notes:UR({},c,r),filters:u,slug:s,userId:l}))},t.addonPlaceholderCount=3,t.maybeResetAddonPlaceholderCount(),t.loadDataIfNeeded(),t}return t=a,(n=[{key:"maybeResetAddonPlaceholderCount",value:function(){var e=this.props.collection;e&&e.addons&&e.addons.length&&(this.addonPlaceholderCount=e.addons.length)}},{key:"componentDidUpdate",value:function(e){this.loadDataIfNeeded(e),this.maybeResetAddonPlaceholderCount()}},{key:"loadDataIfNeeded",value:function(e){var t=this.props,n=t.collection,r=t.creating,o=t.errorHandler,i=t.filters,a=t.loading,u=t.location,c=t.match.params;if(o.hasError())L.Z.warn("Not loading data because of an error.");else if(!r&&!a){var s,l=!1,f=!1;if(e&&e.location&&u&&e.location.pathname!==u.pathname&&(l=!0),e&&!Vy()(e.filters,i)&&(f=!0),n&&(s=/^\d+$/.test(c.userId)?"".concat(n.authorId)===c.userId:n.authorUsername.toLowerCase()===c.userId.toLowerCase(),n.slug.toLowerCase()===c.slug.toLowerCase()&&!1!==s||(l=!0)),l||!n||c.slug===n.slug&&/^\d+$/.test(c.userId))n&&!l?n&&f&&n.numberOfAddons&&this.props.dispatch($a({errorHandlerId:o.id,filters:i,slug:c.slug,userId:Number(c.userId)})):this.props.dispatch(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.errorHandlerId,n=e.filters,r=e.slug,o=e.userId;return ce()(t,"errorHandlerId is required"),ce()(r,"slug is required"),ce()(o,"userId is required"),{type:Ea,payload:{errorHandlerId:t,filters:n,slug:r,userId:o}}}({errorHandlerId:o.id,filters:i,slug:c.slug,userId:Number(c.userId)||c.userId}));else{var p=this.props,d=p.editing,h=p.lang,y=p.clientApp,m=d?du({collection:n}):pu({collection:n});this.props.dispatch(ik({status:301,url:"/".concat(h,"/").concat(y).concat(m)}))}}}},{key:"renderDeleteButton",value:function(){var e=this.props,t=e.i18n;if(!e.isOwner)return null;var n="Collection-delete-button";return r.createElement(LR,{buttonType:"cancel",className:n,id:n,message:t.gettext("Do you really want to delete this collection?"),onConfirm:this.onDelete},t.gettext("Delete this collection"))}},{key:"renderCollection",value:function(){var e=this.props,t=e.collection,n=e.creating,o=e.editing,i=e.filters,a=e.i18n,u=e.isLoggedIn,c=e.loading;if((n||o)&&!u){var s=n?a.gettext("Log in to create a collection"):a.gettext("Log in to edit this collection");return r.createElement(js,{className:"Collection-login"},r.createElement(Ew,{noIcon:!0,logInText:s}))}var l,f=t&&t.addons||[],p=t&&t.pageSize&&t.numberOfAddons&&t.numberOfAddons>Number(t.pageSize)?r.createElement(ym,{LinkComponent:wc,count:t.numberOfAddons,currentPage:i.page,pathname:o?du({collection:t}):pu({collection:t}),perPage:Number(t.pageSize),queryParams:fu(i)}):null;return u&&(n||!c&&0===f.length)&&(l=n?a.gettext("First, create your collection. Then you can add extensions and themes."):a.gettext("Search for extensions and themes to add to your collection.")),r.createElement("div",{className:"Collection-wrapper"},r.createElement("div",{className:"Collection-detail-wrapper"},r.createElement(js,{className:"Collection-detail"},r.createElement(SR,{collection:t,creating:n,editing:o,filters:i}),this.renderDeleteButton()),!n&&r.createElement(nR,{collection:t,editing:o,filters:i})),r.createElement("div",{className:"Collection-items"},o&&r.createElement(DT,{collection:t,filters:i}),!n&&r.createElement(Ny,{addonInstallSource:D.Bz,addons:f,deleteNote:this.deleteNote,editing:o,footer:p,loading:!t||c,placeholderCount:this.addonPlaceholderCount,removeAddon:this.removeAddon,saveNote:this.saveNote,showFullSizePreview:!0}),l&&r.createElement("p",{className:"Collection-placeholder"},l)))}},{key:"getPageDescription",value:function(){var e=this.props,t=e.collection,n=e.i18n;return ce()(t,"collection is required"),n.sprintf(t.description?n.gettext("Download and create Firefox collections to keep track\n of favorite extensions and themes. Explore the\n %(collectionName)s—%(collectionDescription)s."):n.gettext("Download and create Firefox collections to keep track\n of favorite extensions and themes. Explore the %(collectionName)s."),{collectionName:hu({name:t.name,i18n:n}),collectionDescription:t.description})}},{key:"render",value:function(){var e=this.props,t=e.collection,n=e.errorHandler,o=e.i18n;return n.hasError()&&(L.Z.warn("Captured API Error: ".concat(n.capturedError.messages)),404===n.capturedError.responseStatusCode)?r.createElement(jR,null):r.createElement(HO,null,r.createElement("div",{className:"Collection"},t&&r.createElement(Ao,null,r.createElement("title",null,hu({name:t.name,i18n:o})),r.createElement("meta",{name:"description",content:this.getPageDescription()})),n.renderErrorIfPresent(),this.renderCollection()))}}])&&BR(t.prototype,n),o&&BR(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);WR.defaultProps={creating:!1,editing:!1};const VR=(0,Mo.qC)(Eu(),gs({fileName:"src/amo/pages/Collection/index.js",extractId:function(e){return[e.match.params.userId,e.match.params.slug,e.location.query.page].join("/")}}),(0,g.connect)((function(e,t){var n=e.api,r=e.collections.current.loading,o=t.creating,i=t.location,a={page:i.query.page||"1",collectionSort:i.query.collection_sort||D.Y4},u=Xe(e.users),c=o?null:au(e.collections),s=Boolean(c&&u&&c.authorId===u.id);return{clientApp:n.clientApp,collection:c,filters:a,isLoggedIn:!!u,isOwner:s,lang:n.lang,loading:r}})))(WR);const YR=function(e){return r.createElement(VR,Object.assign({},e,{editing:!0}))};a(86833);const ZR=(0,Mo.qC)(Eu())((function(e){var t,n=e.authorId,o=e.id,i=e.name,a=e.numberOfAddons,u=e.slug,c=e.i18n,s={};return null===a?s.href="":(ce()(n,"authorId is required"),ce()(u,"slug is required"),ce()(void 0!==a&&Number.isInteger(a),"numberOfAddons must be a number"),s.to="/collections/".concat(n,"/").concat(u,"/"),t=c.sprintf(c.ngettext("%(total)s add-on","%(total)s add-ons",a),{total:c.formatNumber(a)})),r.createElement("li",{className:"UserCollection",key:o},r.createElement(wc,Object.assign({className:"UserCollection-link"},s),r.createElement("h2",{className:"UserCollection-name"},null===a?r.createElement(Zp,null):hu({name:i,i18n:c})),r.createElement("p",{className:"UserCollection-number"},t||r.createElement(Zp,null))))}));function $R(e){return($R="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function KR(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function QR(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function XR(e,t){return(XR=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function JR(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=tC(e);if(t){var o=tC(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return eC(this,n)}}function eC(e,t){if(t&&("object"===$R(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function tC(e){return(tC=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var nC=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&XR(e,t)}(a,e);var t,n,o,i=JR(a);function a(){return KR(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"componentDidMount",value:function(){var e=this.props,t=e.collections,n=e.currentUserId,r=e.dispatch,o=e.errorHandler,i=e.loadingUserCollections;r(qo(D.cs)),!n||i||t||r(Va({errorHandlerId:o.id,userId:n}))}},{key:"renderCollections",value:function(){var e=this.props,t=e.i18n,n=e.collections,o=t.gettext("You do not have any collections."),i=[];if(n)n.forEach((function(e){var t=e.authorId,n=e.id,o=e.name,a=e.numberOfAddons,u=e.slug;i.push(r.createElement(ZR,{authorId:t,id:n,key:n,name:o,numberOfAddons:a,slug:u}))}));else for(var a=0;a<4;a++)i.push(r.createElement(ZR,{id:a,key:a,numberOfAddons:null}));var u=i.length?null:o;return r.createElement(xy,{className:"CollectionList-list",footer:u,header:t.gettext("My collections")},i.length&&r.createElement("ul",{className:"CollectionList-listing"},i))}},{key:"render",value:function(){var e=this.props,t=e.i18n,n=e.isLoggedIn;return r.createElement(HO,null,r.createElement("div",{className:"CollectionList"},r.createElement("div",{className:"CollectionList-wrapper"},r.createElement(js,{className:"CollectionList-info",header:t.gettext("Collections")},n?r.createElement(r.Fragment,null,r.createElement("p",{className:"CollectionList-info-text"},t.gettext("Collections make it easy to keep track of\n favorite add-ons and share your perfectly customized browser\n with others.")),r.createElement(Dc,{buttonType:"action",className:"CollectionList-create",puffy:!0,to:"/collections/add/"},t.gettext("Create a collection"))):r.createElement(Ew,{noIcon:!0,logInText:t.gettext("Log in to view your collections")})),n?this.renderCollections():null)))}}])&&QR(t.prototype,n),o&&QR(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const rC=(0,Mo.qC)((0,g.connect)((function(e){var t,n=e.collections,r=e.users,o=Xe(r),i=o&&o.id;return i&&(t=n.userCollections[i]),{currentUserId:i,isLoggedIn:!!o,loadingUserCollections:!!t&&t.loading,collections:lu(n,t)}})),Eu(),gs({fileName:"src/amo/pages/CollectionList/index.js",extractId:function(e){return e.currentUserId||""}}))(nC);function oC(e){return(oC="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function iC(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function aC(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function uC(e,t){return(uC=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function cC(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=lC(e);if(t){var o=lC(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return sC(this,n)}}function sC(e,t){if(t&&("object"===oC(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function lC(e){return(lC=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var fC=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&uC(e,t)}(a,e);var t,n,o,i=cC(a);function a(){return iC(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props.i18n;return r.createElement("section",{className:"SuggestedPages"},r.createElement("h2",null,e.gettext("Suggested Pages")),r.createElement("ul",null,r.createElement("li",null,r.createElement(wc,{to:"/".concat(xn(D.Gz),"/")},e.gettext("Browse all extensions"))),r.createElement("li",{className:"SuggestedPages-link-themes"},r.createElement(wc,{to:"/".concat(xn(D.Yd),"/")},e.gettext("Browse all themes"))),r.createElement("li",null,r.createElement(wc,{to:"/"},e.gettext("Add-ons Home Page")))))}}])&&aC(t.prototype,n),o&&aC(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const pC=(0,Mo.qC)(Eu())(fC);function dC(e){return(dC="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function hC(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function yC(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function mC(e,t){return(mC=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function vC(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=bC(e);if(t){var o=bC(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return gC(this,n)}}function gC(e,t){if(t&&("object"===dC(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function bC(e){return(bC=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var wC=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&mC(e,t)}(a,e);var t,n,o,i=vC(a);function a(){return hC(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props.i18n,t=e.sprintf(e.gettext('\n If you are signed in and think this message is an error, please\n <a href="%(url)s">file an issue</a>. Tell us where you came from\n and what you were trying to access, and we\'ll fix the issue.'),{url:"https://github.com/mozilla/addons-frontend/issues/new/"});return r.createElement(cg,{code:401,header:e.gettext("Not Authorized")},r.createElement("p",null,e.gettext("\n Sorry, but you aren't authorized to access this page. If you\n aren't signed in, try signing in using the link at the top\n of the page.")),r.createElement(pC,null),r.createElement("p",{dangerouslySetInnerHTML:vn(t,["a"])}))}}])&&yC(t.prototype,n),o&&yC(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const OC=(0,Mo.qC)(Eu())(wC);const EC=function(){return r.createElement(HO,{showWrongPlatformWarning:!1},r.createElement(OC,null))};const _C=function(){return r.createElement(HO,{showWrongPlatformWarning:!1},r.createElement(Lg,null))};function xC(e){return(xC="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function SC(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function jC(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function PC(e,t){return(PC=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function kC(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=TC(e);if(t){var o=TC(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return IC(this,n)}}function IC(e,t){if(t&&("object"===xC(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function TC(e){return(TC=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var RC=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&PC(e,t)}(a,e);var t,n,o,i=kC(a);function a(){return SC(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props.i18n,t=e.gettext('\n If you have additional information that would help us you can\n <a href="https://github.com/mozilla/addons-frontend/issues/new/">file an\n issue</a>. Tell us what steps you took that lead to the error and we\'ll\n do our best to fix it.');return r.createElement(cg,{code:500,header:e.gettext("Server Error")},r.createElement("p",null,e.gettext("\n Sorry, but there was an error with our server and we couldn't\n complete your request. We have logged this error and will\n investigate it.")),r.createElement(pC,null),r.createElement("p",{dangerouslySetInnerHTML:vn(t,["a"])}))}}])&&jC(t.prototype,n),o&&jC(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const CC=(0,Mo.qC)(Eu())(RC);const AC=function(){return r.createElement(HO,{showWrongPlatformWarning:!1},r.createElement(CC,null))};function NC(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function LC(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?NC(Object(n),!0).forEach((function(t){DC(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):NC(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function DC(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var MC="FETCH_BLOCK",FC="ABORT_FETCH_BLOCK",UC="LOAD_BLOCK",BC={blocks:{},lang:""},HC=function(e){var t=e.guid;return{type:FC,payload:{guid:t}}},qC=function(e){var t=e.block;return ce()(t,"block is required"),{type:UC,payload:{block:t}}},zC=function(e,t){return LC(LC({},e),{},{name:Yi(e.addon_name,t)})};const GC=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:BC,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case FC:return LC(LC({},e),{},{blocks:DC({},t.payload.guid,null)});case UC:var n=t.payload.block;return LC(LC({},e),{},{blocks:LC(LC({},e.blocks),{},DC({},n.guid,zC(n,e.lang)))});case dt:return LC(LC({},e),{},{lang:t.payload.lang});default:return e}};function WC(e){return(WC="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function VC(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function YC(e,t){return(YC=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function ZC(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=KC(e);if(t){var o=KC(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return $C(this,n)}}function $C(e,t){if(t&&("object"===WC(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function KC(e){return(KC=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var QC=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&YC(e,t)}(a,e);var t,n,o,i=ZC(a);function a(e){var t;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a);var n=(t=i.call(this,e)).props,r=n.block,o=n.dispatch,u=n.errorHandler,c=n.match.params.guid;return void 0===r&&o(function(e){var t=e.errorHandlerId,n=e.guid;return ce()(t,"errorHandlerId is required"),ce()(n,"guid is required"),{type:MC,payload:{errorHandlerId:t,guid:n}}}({errorHandlerId:u.id,guid:c})),t}return t=a,(n=[{key:"renderReason",value:function(){var e=this.props.block;return e&&null===e.reason?null:r.createElement("p",{className:"Block-reason"},e?vn(e.reason).__html:r.createElement(Zp,null))}},{key:"renderDateAndURL",value:function(){var e=this.props,t=e.block,n=e.i18n;if(!t)return r.createElement(Zp,null);var o=[n.sprintf(n.gettext("Blocked on %(date)s."),{date:n.moment(t.created).format("ll")})];return t.url&&o.push(" ",r.createElement("a",{key:t.url.url,href:t.url.outgoing,title:t.url.url},n.gettext("View block request")),"."),o}},{key:"renderVersions",value:function(){var e=this.props,t=e.block,n=e.i18n;return t?"0"===t.min_version&&"*"===t.max_version?n.gettext("Versions blocked: all versions."):n.sprintf(n.gettext("Versions blocked: %(min)s to %(max)s."),{min:t.min_version,max:t.max_version}):r.createElement(Zp,null)}},{key:"render",value:function(){var e=this.props,t=e.block,n=e.errorHandler,o=e.i18n;if(n.hasError())return L.Z.warn("Captured API Error: ".concat(n.capturedError.messages)),404===n.capturedError.responseStatusCode?r.createElement(jR,null):r.createElement(AC,null);var i=t&&t.name?o.sprintf(o.gettext("%(addonName)s has been blocked for your protection."),{addonName:t.name}):o.gettext("This add-on has been blocked for your protection.");return r.createElement(HO,null,r.createElement("div",{className:"Block-page"},r.createElement(Ao,null,r.createElement("title",null,i),r.createElement("meta",{name:"robots",content:"noindex, follow"})),r.createElement(js,{className:"Block-content",header:i},r.createElement("h2",null,o.gettext("Why was it blocked?")),r.createElement("p",{dangerouslySetInnerHTML:vn(o.sprintf(o.gettext("This add-on violates %(startLink)sMozilla's\n Add-on Policies%(endLink)s."),{startLink:'<a href="'.concat("https://extensionworkshop.com/documentation/publish/add-on-policies/?utm_source=addons.mozilla.org&utm_medium=referral&utm_content=blocked-addon",'">'),endLink:"</a>"}),["a"])}),this.renderReason(),r.createElement("h2",null,o.gettext("What does this mean?")),r.createElement("p",null,o.gettext("The problematic add-on or plugin will be\n automatically disabled and no longer usable.")),r.createElement("p",{dangerouslySetInnerHTML:vn(o.sprintf(o.gettext("When Mozilla becomes aware of add-ons, plugins,\n or other third-party software that seriously compromises\n Firefox security, stability, or performance and meets\n %(criteriaStartLink)scertain criteria%(criteriaEndLink)s,\n the software may be blocked from general use. For more\n information, please read %(supportStartLink)sthis support\n article%(supportEndLink)s."),{criteriaStartLink:'<a href="'.concat("https://extensionworkshop.com/documentation/publish/add-ons-blocking-process/?utm_source=addons.mozilla.org&utm_medium=referral&utm_content=blocked-addon",'">'),criteriaEndLink:"</a>",supportStartLink:'<a href="'.concat("https://support.mozilla.org/kb/add-ons-cause-issues-are-on-blocklist",'">'),supportEndLink:"</a>"}),["a"])}),r.createElement("p",{className:"Block-metadata"},this.renderVersions(),r.createElement("br",null),this.renderDateAndURL()))))}}])&&VC(t.prototype,n),o&&VC(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const XC=(0,Mo.qC)(Eu(),(0,g.connect)((function(e,t){return{block:e.blocks.blocks[t.match.params.guid]}})),gs({fileName:"src/amo/pages/Block/index.js",extractId:function(e){return e.match.params.guid}}))(QC);const JC=function(e){var t=e.alt,n=e.className,o=e.color,i=e.name;return r.createElement(ac,{alt:t,className:Ho()("CategoryIcon","CategoryIcon-".concat(o),n),name:i})};function eA(e){return(eA="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function tA(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function nA(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function rA(e,t){return(rA=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function oA(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=aA(e);if(t){var o=aA(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return iA(this,n)}}function iA(e,t){if(t&&("object"===eA(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function aA(e){return(aA=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var uA="primary-hero-click",cA="AMO Primary Hero Clicks",sA="external-link",lA="primary-hero-impression",fA="AMO Primary Hero Impressions",pA="homepage-primary-hero",dA=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&rA(e,t)}(a,e);var t,n,o,i=oA(a);function a(){var e;tA(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).makeCallToActionURL=function(){var t=e.props.shelfData;ce()(t,"The shelfData property is required");var n=t.addon,r=t.external;return n?Ut(ln(n.slug),{utm_source:D.Pr,utm_medium:D.AT,utm_content:pA}):(ce()(r,"Either an addon or an external is required"),r.homepage?Ut(r.homepage.url,{utm_source:D.Pr,utm_medium:D.AT,utm_content:pA}):null)},e.onHeroClick=function(){var t=e.props,n=t._tracking,r=t.shelfData;ce()(r,"The shelfData property is required");var o=r.addon;n.sendEvent({action:uA,category:cA,label:o?o.guid:sA})},e.onHeroImpression=function(){var t=e.props,n=t._tracking,r=t.shelfData;ce()(r,"The shelfData property is required");var o=r.addon;n.sendEvent({action:lA,category:fA,label:o?o.guid:sA})},e}return t=a,(n=[{key:"componentDidMount",value:function(){this.props.shelfData&&this.onHeroImpression()}},{key:"componentDidUpdate",value:function(e){var t=this.props.shelfData;t&&e.shelfData!==t&&this.onHeroImpression()}},{key:"render",value:function(){var e=this.props,t=e._checkInternalURL,n=e._getPromotedCategory,o=e.clientApp,i=e.i18n,a=e.errorHandler,u=e.shelfData,c=e.siteIsReadOnly,s=e.siteNotice;if(null===u)return null;var l,f,p,d,h,y=u||{},m=y.addon,v=y.description,g=y.external,b=y.featuredImage,w=y.gradient,O=!1,E=c||s?"HeroRecommendation--height-with-notice":"HeroRecommendation--height-without-notice";if(u){l="HeroRecommendation-".concat(w.start,"-").concat(w.end),L.Z.debug("className ".concat(l," generated from the API response. This should match a selector in styles.scss"));var _=this.makeCallToActionURL();if(_){var x=r.createElement("span",null," ",i.gettext("Get the extension")," "),S=t({urlString:_}).isInternal?{}:{rel:"noopener noreferrer",target:"_blank"};m?(f=m.name,p=r.createElement(wc,{className:"HeroRecommendation-link",onClick:this.onHeroClick,to:_},x)):g&&(f=g.name,p=r.createElement("a",Object.assign({className:"HeroRecommendation-link",href:_,onClick:this.onHeroClick},S),x))}}return m||g||(l="HeroRecommendation--loading",O=!0),r.createElement("section",{className:Ho()("HeroRecommendation",l,E,{"HeroRecommendation--no-image":!b&&!O})},r.createElement("div",{className:"HeroRecommendation-wrapper"},r.createElement(eg,{className:"HeroRecommendation-banner"}),r.createElement(Bw,{className:"HeroRecommendation-WrongPlatformWarning"}),a.renderErrorIfPresent(),r.createElement("div",{className:"HeroRecommendation-content"},O?r.createElement("div",{className:"HeroRecommendation-image-loading"},r.createElement(Zp,{width:100})):b&&r.createElement("div",{className:"HeroRecommendation-image-wrapper"},r.createElement("img",{className:"HeroRecommendation-image",alt:"",src:b})),r.createElement("div",{className:"HeroRecommendation-info"},(d=null,h=n({addon:m,clientApp:o,forBadging:!0}),O||(d=h===D.g$?i.gettext("RECOMMENDED"):h===D.fq?i.gettext("BY FIREFOX"):i.gettext("SPONSORED")),r.createElement("div",{className:"HeroRecommendation-title"},r.createElement("div",{className:"HeroRecommendation-title-text"},d||r.createElement(Zp,{width:20})),[D.fq,D.g$].includes(h)||O?null:r.createElement("a",{className:"HeroRecommendation-title-link",href:"".concat(hn({utm_content:pA}),"#sponsored"),rel:"noopener noreferrer",target:"_blank",title:i.gettext("Firefox only recommends extensions that meet our standards for security and performance.")},"What is this?"))),r.createElement("h2",{className:"HeroRecommendation-heading"},O?r.createElement(Zp,{width:60}):f),O?r.createElement("div",{className:"HeroRecommendation-body"},r.createElement(r.Fragment,null,r.createElement(Zp,{width:100}),r.createElement("br",null),r.createElement(Zp,{width:80}))):r.createElement("div",{className:"HeroRecommendation-body",dangerouslySetInnerHTML:bn(v)}),p))))}}])&&nA(t.prototype,n),o&&nA(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);dA.defaultProps={_checkInternalURL:dn,_getPromotedCategory:Gs,_tracking:pr};const hA=(0,Mo.qC)((0,g.connect)((function(e){return{clientApp:e.api.clientApp,siteIsReadOnly:e.site.readOnly,siteNotice:e.site.notice}})),Eu())(dA);function yA(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function mA(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?yA(Object(n),!0).forEach((function(t){vA(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):yA(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function vA(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function gA(e){return(gA="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function bA(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function wA(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function OA(e,t){return(OA=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function EA(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=xA(e);if(t){var o=xA(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return _A(this,n)}}function _A(e,t){if(t&&("object"===gA(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function xA(e){return(xA=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var SA=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&OA(e,t)}(a,e);var t,n,o,i=EA(a);function a(){return bA(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.addonInstallSource,n=e.addons,o=e.className,i=e.footerLink,a=e.footerText,u=e.header,c=e.isHomepageShelf,s=e.isTheme,l=e.loading,f=e.placeholderCount,p=null,d={},h=s?D.Pn:f;return n&&n.length>=h&&(i&&"object"===gA(i)?i.href?(d.href=i.href,d.prependClientApp=!1,d.prependLang=!1,d.target="_blank"):d.to=mA(mA({},i),{},{query:Tt(i.query)}):d.to=i,p=r.createElement(wc,d,a)),r.createElement(Ny,{addonInstallSource:t,addons:n,className:Ho()("LandingAddonsCard",o,{"LandingAddonsCard-Themes":s}),footerLink:p,header:u,isHomepageShelf:c,showPromotedBadge:!1,type:"horizontal",loading:l,placeholderCount:h,useThemePlaceholder:s})}}])&&wA(t.prototype,n),o&&wA(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);SA.defaultProps={isHomepageShelf:!1,placeholderCount:D.Db};const jA=Eu()((function(e){var t,n=e._checkInternalURL,o=void 0===n?dn:n,i=e.i18n,a=e.loading,u=e.shelves;return t=a?r.createElement("div",{className:"HomepageShelves-loading"},[1,2,3].map((function(e){return r.createElement(SA,{className:"HomepageShelves-loading-card",key:"HomepageShelves-loading-".concat(e),header:r.createElement(Zp,{width:100}),loading:!0})}))):u.map((function(e){var t,n=e.addons,a=e.addonType,u=e.endpoint,c=e.footer,s=e.title,l=e.url,f=s.replace(/\s/g,"-"),p=c.text?c.text:i.sprintf(i.gettext("See more %(categoryName)s"),{categoryName:s.toLowerCase()});switch(u){case"collections":t=D.k_;break;case"random-tag":t="".concat(D.Jt).concat(function(e){var t=ae.parse(e,!0).query;return t&&t.tag}(l));break;default:t=D.Ow}var d,h=a===D.Yd,y=h?D.Pn:D.Db,m=o({urlString:c.url});return d=m.isInternal?m.relativeURL:{href:c.url},r.createElement(SA,{addonInstallSource:t,addons:n,className:"Home-".concat(f),footerText:p,footerLink:d,header:s,isHomepageShelf:!0,isTheme:h,key:f,placeholderCount:y})})),r.createElement("div",{className:"HomepageShelves"},t)}));function PA(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function kA(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?PA(Object(n),!0).forEach((function(t){IA(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):PA(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function IA(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var TA=function(e){return Ut(e,{utm_source:D.Pr,utm_medium:D.AT,utm_content:"homepage-secondary-hero"})};const RA=function(e){var t=e._checkInternalURL,n=void 0===t?dn:t,o=e._stripLangFromAmoUrl,i=void 0===o?yn:o,a=e._tracking,u=void 0===a?pr:a,c=e.shelfData;if(null===c)return null;var s=c||{},l=s.headline,f=s.description,p=s.cta,d=c&&c.modules||Array(3).fill({}),h=function(e){u.sendEvent({action:"secondary-hero-click",category:"AMO Secondary Hero Clicks",label:i({urlString:e.currentTarget.href})})},y=function(e){var t={onClick:h};if(e){var r=n({urlString:e.url});return r.isInternal?kA(kA({},t),{},{to:TA(r.relativeURL)}):kA(kA({},t),{},{href:TA(e.url),prependClientApp:!1,prependLang:!1,target:"_blank"})}return{}},m=[];return d.forEach((function(e){m.push(r.createElement("div",{className:"SecondaryHero-module",key:e.description},e.icon?r.createElement("img",{alt:e.description,className:"SecondaryHero-module-icon",src:e.icon}):r.createElement("div",{className:"SecondaryHero-module-icon"}),r.createElement("div",{className:"SecondaryHero-module-description"},e.description||r.createElement(Zp,{width:60})),e.cta&&r.createElement(wc,Object.assign({className:"SecondaryHero-module-link"},y(e.cta)),r.createElement("span",{className:"SecondaryHero-module-linkText"},e.cta&&e.cta.text)),!e.description&&r.createElement("div",{className:"SecondaryHero-module-link"},r.createElement(Zp,{width:60}))))})),r.createElement("section",{className:"SecondaryHero"},r.createElement("div",{className:"SecondaryHero-message"},r.createElement("h2",{className:"SecondaryHero-message-headline"},l||r.createElement(r.Fragment,null,r.createElement(Zp,{width:80}),r.createElement("br",null),r.createElement(Zp,{width:60}))),r.createElement("div",{className:"SecondaryHero-message-description"},f||r.createElement(r.Fragment,null,r.createElement(Zp,{width:80}),r.createElement("br",null),r.createElement(Zp,{width:60}))),p&&r.createElement(wc,Object.assign({className:"SecondaryHero-message-link"},y(p)),r.createElement("span",{className:"SecondaryHero-message-linkText"},p.text)),!l&&r.createElement("div",{className:"SecondaryHero-message-link"},r.createElement(Zp,{width:60}))),m)};function CA(e){return(CA="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function AA(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function NA(e,t){return(NA=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function LA(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=MA(e);if(t){var o=MA(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return DA(this,n)}}function DA(e,t){if(t&&("object"===CA(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function MA(e){return(MA=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var FA=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&NA(e,t)}(a,e);var t,n,o,i=LA(a);function a(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),(t=i.call(this,e)).loadDataIfNeeded(),t}return t=a,(n=[{key:"componentDidUpdate",value:function(){this.loadDataIfNeeded()}},{key:"loadDataIfNeeded",value:function(){var e=this.props,t=e.dispatch,n=e.errorHandler,r=e.isDesktopSite,o=e.isLoading,i=e.resultsLoaded;n.hasError()||(t(qo(D.cs)),i||o||t(function(e){var t=e.errorHandlerId,n=e.isDesktopSite;return ce()(t,"errorHandlerId is required"),{type:_l,payload:{errorHandlerId:t,isDesktopSite:n}}}({errorHandlerId:n.id,isDesktopSite:r})))}},{key:"renderCuratedThemes",value:function(){var e=this.props.i18n,t=[{color:1,slug:"abstract",title:e.gettext("Abstract")},{color:2,slug:"nature",title:e.gettext("Nature")},{color:3,slug:"film-and-tv",title:e.gettext("Film & TV")},{color:4,slug:"scenery",title:e.gettext("Scenery")},{color:5,slug:"music",title:e.gettext("Music")},{color:6,slug:"seasonal",title:e.gettext("Seasonal")}];return r.createElement("ul",{className:"Home-SubjectShelf-list"},t.map((function(e){var t=e.color,n=e.slug,o=e.title;return r.createElement("li",{className:"Home-SubjectShelf-list-item",key:n},r.createElement(wc,{to:{pathname:rh({addonType:D.Yd,slug:n})},className:"Home-SubjectShelf-link"},r.createElement(JC,{name:n,color:t}),r.createElement("span",null,o)))})))}},{key:"renderHeroHeader",value:function(){var e=this.props.homeShelves;return r.createElement("div",{className:"Home-heroHeader"},r.createElement("h2",{className:"Home-heroHeader-title"},e?e.secondary.headline:r.createElement(Zp,null)),r.createElement("h3",{className:"Home-heroHeader-subtitle"},e?e.secondary.description:r.createElement(Zp,null)))}},{key:"render",value:function(){var e=this.props,t=e.errorHandler,n=e.homeShelves,o=e.i18n,i=e.isDesktopSite,a=e.resultsLoaded,u=e.shelves,c=o.gettext("Change the way Firefox looks with\n themes."),s=!1===a;return r.createElement(HO,{isHomePage:!0,showWrongPlatformWarning:!i},r.createElement("div",{className:"Home"},r.createElement(hp,{description:o.gettext("Download Firefox extensions and themes.\n They’re like apps for your browser. They can block annoying ads,\n protect passwords, change browser appearance, and more."),withTwitterMeta:!0}),r.createElement(ep,null),r.createElement("span",{className:"visually-hidden do-not-remove",dangerouslySetInnerHTML:{__html:"\x3c!-- Godzilla of browsers --\x3e"}}),!i&&t.hasError()?r.createElement("div",{className:"Home-noHeroError"},t.renderError()):null,i?r.createElement(hA,{errorHandler:t,shelfData:n?n.primary:void 0}):null,r.createElement("div",{className:"Home-content"},i?r.createElement(RA,{shelfData:n?n.secondary:void 0}):null,i?null:this.renderHeroHeader(),i?r.createElement(jA,{loading:s,shelves:n?n.results:[]}):r.createElement(SA,{addonInstallSource:D.Ow,addons:u.recommendedExtensions,className:"Home-RecommendedExtensions",header:o.gettext("Recommended extensions"),footerText:o.gettext("See more recommended extensions"),footerLink:{pathname:"/search/",query:{addonType:D.Gz,promoted:D.g$,sort:D.wn}},loading:s,placeholderCount:D.Fb}),i?r.createElement(r.Fragment,null,r.createElement(js,{className:"Home-SubjectShelf Home-CuratedThemes",header:c},r.createElement("div",{className:"Home-SubjectShelf-text-wrapper"},r.createElement("h2",{className:"Home-SubjectShelf-subheading"},c)),this.renderCuratedThemes())):null)))}}])&&AA(t.prototype,n),o&&AA(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);FA.propTypes={dispatch:w().func.isRequired,errorHandler:w().object.isRequired,homeShelves:w().object,i18n:w().object.isRequired,isDesktopSite:w().bool,isLoading:w().bool,resultsLoaded:w().bool.isRequired,shelves:w().object};const UA=(0,Mo.qC)((0,g.connect)((function(e){return{homeShelves:e.home.homeShelves,isDesktopSite:e.api.clientApp===D.So,isLoading:e.home.isLoading,resultsLoaded:e.home.resultsLoaded,shelves:e.home.shelves}})),Eu(),ms({id:"Home"}))(FA);function BA(e){return(BA="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function HA(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function qA(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function zA(e,t){return(zA=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function GA(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=VA(e);if(t){var o=VA(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return WA(this,n)}}function WA(e,t){if(t&&("object"===BA(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function VA(e){return(VA=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var YA=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&zA(e,t)}(a,e);var t,n,o,i=GA(a);function a(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),(t=i.call(this,e)).contentForType=function(e){var n,r=t.props.i18n,o=En(e);return{addonType:o,html:(HA(n={},D.Gz,{recommendedHeader:r.gettext("Recommended extensions"),recommendedFooterLink:{pathname:"/search/",query:{addonType:D.Gz,promoted:D.g$,sort:D.wn}},recommendedFooterText:r.gettext("See more recommended extensions"),trendingHeader:r.gettext("Trending extensions"),trendingFooterLink:{pathname:"/search/",query:{addonType:D.Gz,promoted:D.g$,sort:D.Mj}},trendingFooterText:r.gettext("See more trending extensions"),highlyRatedHeader:r.gettext("Top rated extensions"),highlyRatedFooterLink:{pathname:"/search/",query:{addonType:D.Gz,promoted:D.g$,sort:D.kc}},highlyRatedFooterText:r.gettext("See more top rated extensions")}),HA(n,D.Yd,{recommendedHeader:r.gettext("Recommended themes"),recommendedFooterLink:{pathname:"/search/",query:{addonType:D.Yd,promoted:D.g$,sort:D.wn}},recommendedFooterText:r.gettext("See more recommended themes"),trendingHeader:r.gettext("Trending themes"),trendingFooterLink:{pathname:"/search/",query:{addonType:D.Yd,sort:D.Mj}},trendingFooterText:r.gettext("See more trending themes"),highlyRatedHeader:r.gettext("Top rated themes"),highlyRatedFooterLink:{pathname:"/search/",query:{addonType:D.Yd,sort:D.kc}},highlyRatedFooterText:r.gettext("See more top rated themes")}),n)[o]}},t.getLandingDataIfNeeded(),t.setViewContextType(),t}return t=a,(n=[{key:"componentDidUpdate",value:function(){var e=this.props.match.params;ce()(On(e.visibleAddonType),"LandingPage should not be accessible with an invalid addonType"),this.getLandingDataIfNeeded(),this.setViewContextType()}},{key:"getLandingDataIfNeeded",value:function(){var e,t,n,r,o=this.props,i=o.addonTypeOfResults,a=o.dispatch,u=o.errorHandler,c=o.loading,s=o.match.params,l=o.resultsLoaded,f=En(s.visibleAddonType);c||u.hasError()||l&&i===f||a((e={addonType:f,errorHandlerId:u.id},t=e.addonType,n=e.category,r=e.errorHandlerId,ce()(t,"addonType is required"),ce()(r,"errorHandlerId is required"),{type:Ll,payload:{addonType:t,category:n||null,errorHandlerId:r}}))}},{key:"setViewContextType",value:function(){var e=this.props,t=e.context,n=En(e.match.params.visibleAddonType);t!==n&&this.props.dispatch(qo(n))}},{key:"renderIfNotEmpty",value:function(e,t){return 0!==e.length||this.props.loading?t:null}},{key:"getPageDescription",value:function(){var e=this.props,t=e.i18n;return En(e.match.params.visibleAddonType)===D.Yd?t.gettext("Download themes to change how Firefox looks. Tailor\n your experience to your tastes. Cute critters, evil robots, beautiful\n landscapes—thousands of options."):t.gettext("Download Firefox Extensions to add features that\n customize browsing. Protect passwords, find deals, enhance video, and\n block annoying ads with browser apps.")}},{key:"render",value:function(){var e,t,n=this.props,o=n.errorHandler,i=n.recommendedAddons,a=n.highlyRatedAddons,u=n.i18n,c=n.loading,s=n.trendingAddons,l=this.props.match.params.visibleAddonType,f=this.contentForType(l),p=f.addonType,d=f.html,h=(HA(e={},D.Yd,u.gettext("Themes")),HA(e,D.Gz,u.gettext("Extensions")),e),y=(HA(t={},D.Yd,u.gettext("Change your browser's appearance.\n Choose from thousands of themes to give Firefox the look you want.")),HA(t,D.Gz,u.gettext("Explore powerful tools and features\n to customize Firefox and make the browser all your own.")),t),m=D.Yd===p,v=h[p];return r.createElement(HO,null,r.createElement("div",{className:Ho()("LandingPage","LandingPage--".concat(p),{"LandingPage--theme":m})},r.createElement(Ao,null,r.createElement("title",null,v)),r.createElement(hp,{description:this.getPageDescription(),title:v}),r.createElement(ep,null),o.renderErrorIfPresent(),r.createElement("div",{className:"LandingPage-header"},r.createElement("h1",{className:"LandingPage-addonType-name"},h[p]),r.createElement("p",{className:"LandingPage-heading-content"},y[p])),r.createElement(cI,{addonType:p}),r.createElement(Dc,{buttonType:"light",className:"LandingPage-button",to:"/".concat(xn(p),"/categories/")},u.gettext("Explore all categories")),this.renderIfNotEmpty(i,r.createElement(SA,{addonInstallSource:D.Ow,addons:i,className:"RecommendedAddons",footerText:d.recommendedFooterText,footerLink:d.recommendedFooterLink,header:d.recommendedHeader,isTheme:m,loading:c})),this.renderIfNotEmpty(a,r.createElement(SA,{addonInstallSource:D.u,addons:a,className:"HighlyRatedAddons",footerLink:d.highlyRatedFooterLink,footerText:d.highlyRatedFooterText,header:d.highlyRatedHeader,isTheme:m,loading:c})),this.renderIfNotEmpty(s,r.createElement(SA,{addonInstallSource:D.IU,addons:s,className:"TrendingAddons",footerLink:d.trendingFooterLink,footerText:d.trendingFooterText,header:d.trendingHeader,isTheme:m,loading:c}))))}}])&&qA(t.prototype,n),o&&qA(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);YA.propTypes={addonTypeOfResults:w().string,context:w().string.isRequired,dispatch:w().func.isRequired,errorHandler:w().object.isRequired,recommendedAddons:w().array.isRequired,highlyRatedAddons:w().array.isRequired,loading:w().bool.isRequired,trendingAddons:w().array.isRequired,i18n:w().object.isRequired,match:w().shape({params:w().shape({visibleAddonType:w().string.isRequired}).isRequired}).isRequired,resultsLoaded:w().bool.isRequired};const ZA=(0,Mo.qC)((0,g.connect)((function(e){var t=e.landing,n=e.viewContext;return{addonTypeOfResults:t.addonType,context:n.context,recommendedAddons:t.recommended.results,highlyRatedAddons:t.highlyRated.results,loading:t.loading,trendingAddons:t.trending.results,resultsLoaded:t.resultsLoaded&&null===t.category}})),Eu(),ms({id:"LandingPage"}))(YA);var $A=a(73331);function KA(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function QA(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?KA(Object(n),!0).forEach((function(t){XA(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):KA(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function XA(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var JA="FETCH_LANGUAGE_TOOLS",eN="LOAD_LANGUAGE_TOOLS",tN={byID:{},lang:""},nN=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.languageTools;if(!t)throw new Error("languageTools are required");return{type:eN,payload:{languageTools:t}}},rN=function(e){var t=e.languageTools.byID;return Object.keys(t).map((function(e){return t[e]}))},oN=function(e,t){return QA(QA({},e),{},{name:Yi(e.name,t)})};function iN(e){return(iN="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function aN(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function uN(e,t){return(uN=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function cN(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=lN(e);if(t){var o=lN(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return sN(this,n)}}function sN(e,t){if(t&&("object"===iN(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function lN(e){return(lN=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var fN=Object.keys(we).map((function(e){return{english:we[e].English,locale:e,native:we[e].native}})).sort((function(e,t){return e.english.localeCompare(t.english)})),pN=fN.map((function(e){return e.locale})),dN=function(e){var t=e.languageTools;return ce()(t.length,"languageTools should not be empty"),r.createElement("ul",{className:"LanguageTools-addon-list"},t.map((function(e){return r.createElement("li",{key:e.slug},r.createElement(wc,{to:ln(e.slug)},e.name))})))},hN=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&uN(e,t)}(a,e);var t,n,o,i=cN(a);function a(e){var t;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),t=i.call(this,e);var n=e.dispatch,r=e.errorHandler,o=e.languageTools;return n(qo(D.NI)),0===o.length&&n(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).errorHandlerId;if(!e)throw new Error("errorHandlerId is required");return{type:JA,payload:{errorHandlerId:e}}}({errorHandlerId:r.id})),t}return t=a,(n=[{key:"languageToolsInYourLocale",value:function(){var e=this.props,t=e.i18n,n=e.lang,o=e.languageTools.filter((function(e){return e.target_locale===n}));return o&&o.length?r.createElement("div",{className:"LanguageTools-in-your-locale"},r.createElement("h2",{className:"LanguageTools-header"},t.gettext("Available for your locale")),r.createElement("ul",{className:"LanguageTools-in-your-locale-list"},o.map((function(e){return r.createElement("li",{className:"LanguageTools-in-your-locale-list-item",key:e.slug},r.createElement(wc,{className:"LanguageTools-in-your-locale-list-item--".concat(e.type),to:ln(e.slug)},e.name))})))):null}},{key:"render",value:function(){var e=this.props,t=e.languageTools,n=e.errorHandler,o=e.i18n,i=o.gettext("Dictionaries and Language Packs");return r.createElement(HO,null,r.createElement(js,{className:"LanguageTools",header:i},r.createElement(Ao,null,r.createElement("title",null,i)),r.createElement(hp,{description:o.gettext("Download Firefox dictionaries and language\n pack extensions. Add a new language option to your browser\n spell-checker, or change the browser's interface language."),title:i}),r.createElement(ep,null),n.renderErrorIfPresent(),r.createElement("p",null,o.gettext("Installing a dictionary add-on will add a new language\n option to your spell-checker, which checks your spelling as you\n type in Firefox.")),r.createElement("p",null,o.gettext("Language packs change your browser's interface\n language, including menu options and settings.")),this.languageToolsInYourLocale(),r.createElement("h2",{className:"LanguageTools-header"},o.gettext("All Locales")),r.createElement($A.iA,{className:"LanguageTools-table"},r.createElement($A.hr,null,r.createElement($A.Tr,{className:"LanguageTools-header-row"},r.createElement($A.Th,{className:"LanguageTools-header-cell LanguageTool-localeName"},o.gettext("Locale Name")),r.createElement($A.Th,{className:"LanguageTools-header-cell"},o.gettext("Language Packs")),r.createElement($A.Th,{className:"LanguageTools-header-cell"},o.gettext("Dictionaries")))),r.createElement($A.p3,null,t.length?fN.map((function(e){var n=t.filter((function(t){if(pN.includes(t.target_locale))return t.target_locale===e.locale;var n=new RegExp("^".concat(e.locale,"(-\\w+){0,2}$"));return t.target_locale&&n.test(t.target_locale)}));if(!n||!n.length)return null;var o=n.filter((function(e){return e.type===D.jV})),i=n.filter((function(e){return e.type===D.d$}));return r.createElement($A.Tr,{className:Ho()("LanguageTools-table-row","LanguageTools-lang-".concat(e.locale)),key:e.locale},r.createElement($A.Td,null,r.createElement("strong",null,e.english)," ",r.createElement("span",{lang:e.locale},e.native)),r.createElement($A.Td,{className:"LanguageTools-lang-".concat(e.locale,"-languagePacks")},i.length?r.createElement(dN,{languageTools:i}):null),r.createElement($A.Td,{className:"LanguageTools-lang-".concat(e.locale,"-dictionaries")},o.length?r.createElement(dN,{languageTools:o}):null))})):Array.from(Array(50)).map((function(e,t){return r.createElement($A.Tr,{key:"LoadingText-".concat(t)},r.createElement($A.Td,null,r.createElement(Zp,null)),r.createElement($A.Td,null,r.createElement(Zp,null)),r.createElement($A.Td,null,r.createElement(Zp,null)))}))))))}}])&&aN(t.prototype,n),o&&aN(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const yN=(0,Mo.qC)(ms({name:"LanguageTools"}),(0,g.connect)((function(e){return{lang:e.api.lang,languageTools:rN(e)}})),Eu())(hN);function mN(e){return(mN="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function vN(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function gN(e,t){return(gN=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function bN(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=ON(e);if(t){var o=ON(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return wN(this,n)}}function wN(e,t){if(t&&("object"===mN(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function ON(e){return(ON=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var EN=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&gN(e,t)}(a,e);var t,n,o,i=bN(a);function a(e){var t;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),t=i.call(this,e);var n=e.clientApp,r=e.dispatch,o=e.lang,u=rh({addonType:D.Gz,slug:"search-tools"});return r(ik({status:301,url:"/".concat(o,"/").concat(n).concat(u)})),t}return t=a,(n=[{key:"render",value:function(){return r.createElement(jR,null)}}])&&vN(t.prototype,n),o&&vN(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const _N=(0,Mo.qC)(Eu(),(0,g.connect)((function(e){return{clientApp:e.api.clientApp,lang:e.api.lang}})))(EN);function xN(e){return(xN="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function SN(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function jN(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function PN(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function kN(e,t){return(kN=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function IN(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=RN(e);if(t){var o=RN(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return TN(this,n)}}function TN(e,t){if(t&&("object"===xN(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function RN(e){return(RN=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var CN=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&kN(e,t)}(a,e);var t,n,o,i=IN(a);function a(e){var t;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),t=i.call(this,e);var n=e.clientApp,r=e.filters,o=e.lang,u=e.location,c="/search/",s=!1,l=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?SN(Object(n),!0).forEach((function(t){jN(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):SN(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({},r);if(l.category&&l.addonType&&_n(l.addonType)?(c=rh({addonType:l.addonType,slug:l.category}),delete l.addonType,delete l.category,l.sort===D.YM&&delete l.sort,s=!0):l.tag&&(c=ih({tag:l.tag}),delete l.tag,l.sort===D.B2&&delete l.sort,s=!0),u.query.platform&&(s=!0),u.query.atype){switch(String(u.query.atype)){case"1":l.addonType=D.Gz;break;case"3":l.addonType=D.jV;break;case"5":l.addonType=D.d$;break;default:return TN(t)}s=!0}if(s){var f=Zt(Tt(l));e.dispatch(ik({status:301,url:"/".concat(o,"/").concat(n).concat(c).concat(f)}))}return t}return t=a,(n=[{key:"render",value:function(){var e=this.props.filters;return r.createElement(HO,null,r.createElement(dT,{filters:e,paginationQueryParams:Tt(e)}))}}])&&PN(t.prototype,n),o&&PN(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const AN=(0,Mo.qC)((0,g.connect)((function(e,t){var n=Rt(t.location.query);return{filters:Nt(n),clientApp:e.api.clientApp,lang:e.api.lang}})))(CN);function NN(e){return(NN="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var LN=["location"];function DN(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function MN(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function FN(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function UN(e,t){return(UN=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function BN(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=qN(e);if(t){var o=qN(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return HN(this,n)}}function HN(e,t){if(t&&("object"===NN(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function qN(e){return(qN=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var zN=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&UN(e,t)}(a,e);var t,n,o,i=BN(a);function a(){return MN(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"computeQueryString",value:function(){var e=this.props.location,t=e.query,n=e.search,r=Number(t.page_e),o=Number(t.page_t);1===r&&(r=null),1===o&&(o=null);var i="";return r&&o?i=r>o?"?page_e=".concat(r):r<o||n.indexOf("page_e")>n.indexOf("page_t")?"?page_t=".concat(o):"?page_e=".concat(r):r?i="?page_e=".concat(r):o&&(i="?page_t=".concat(o)),i}},{key:"render",value:function(){var e=this.props,t=(e.location,DN(e,LN)),n=this.computeQueryString();return r.createElement(r.Fragment,null,r.createElement(Ao,null,r.createElement("title",null,t.title)),r.createElement(hp,Object.assign({},t,{queryString:n})),r.createElement(ep,{queryString:n}))}}])&&FN(t.prototype,n),o&&FN(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const GN=(0,g.connect)((function(e){return{location:e.router.location}}))(zN);function WN(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function VN(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?WN(Object(n),!0).forEach((function(t){YN(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):WN(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function YN(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var ZN="ABORT_USER_ABUSE_REPORT",$N="HIDE_USER_ABUSE_REPORT_UI",KN="LOAD_USER_ABUSE_REPORT",QN="SEND_USER_ABUSE_REPORT",XN="SHOW_USER_ABUSE_REPORT_UI";function JN(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.userId;return ce()(t,"userId is required"),{type:ZN,payload:{userId:t}}}function eL(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.userId;return ce()(t,"userId is required"),{type:$N,payload:{userId:t}}}function tL(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.message,n=e.reporter,r=e.userId;ce()(t,"message is required"),ce()(void 0!==n,"reporter cannot be undefined"),ce()(r,"userId is required");var o=n?n.id:null;return{type:KN,payload:{message:t,reportedByUserId:o,userId:r}}}function nL(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.errorHandlerId,n=e.message,r=e.userId;return ce()(t,"errorHandlerId is required"),ce()(n,"message is required"),ce()(r,"userId is required"),{type:QN,payload:{errorHandlerId:t,message:n,userId:r}}}function rL(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.userId;return ce()(t,"userId is required"),{type:XN,payload:{userId:t}}}var oL={byUserId:{}};function iL(e){return(iL="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function aL(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function uL(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function cL(e,t){return(cL=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function sL(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=fL(e);if(t){var o=fL(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return lL(this,n)}}function lL(e,t){if(t&&("object"===iL(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function fL(e){return(fL=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var pL=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&cL(e,t)}(a,e);var t,n,o,i=sL(a);function a(){var e;aL(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).hideReportUI=function(){var t=e.props,n=t.dispatch,r=t.user;r&&n(eL({userId:r.id}))},e.sendReport=function(t){var n=e.props,r=n.dispatch,o=n.errorHandler,i=n.user;i&&r(nL({errorHandlerId:o.id,message:t.text,userId:i.id}))},e.showReportUI=function(){var t=e.props,n=t.dispatch,r=t.user;r&&n(rL({userId:r.id}))},e}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.className,n=e.errorHandler,o=e.hasSubmitted,i=e.i18n,a=e.isSubmitting,u=e.uiVisible,c=e.user;return r.createElement("div",{className:Ho()("ReportUserAbuse",t,{"ReportUserAbuse--is-expanded":u})},n.renderErrorIfPresent(),!u&&!o&&r.createElement(Dc,{buttonType:"neutral",className:"ReportUserAbuse-show-more",disabled:!c,onClick:this.showReportUI,puffy:!0},i.gettext("Report this user for abuse")),!o&&r.createElement("div",{className:"ReportUserAbuse-form"},r.createElement("h2",{className:"ReportUserAbuse-header"},i.gettext("Report this user for abuse")),r.createElement("p",{dangerouslySetInnerHTML:vn(i.sprintf(i.gettext("If you think this user is violating\n %(linkTagStart)sMozilla's Add-on Policies%(linkTagEnd)s,\n please report this user to Mozilla."),{linkTagStart:'<a href="https://developer.mozilla.org/en-US/Add-ons/AMO/Policy/Reviews">',linkTagEnd:"</a>"}),["a"])}),r.createElement("p",null,i.gettext("Please don't use this form to report bugs or contact this\n user; your report will only be sent to Mozilla and not\n to this user.")),r.createElement(Zh,{id:"".concat(Tn("src/amo/components/ReportUserAbuse/index.js"),"-").concat(String(c&&c.id)),isSubmitting:a,onDismiss:this.hideReportUI,onSubmit:this.sendReport,placeholder:i.gettext("Explain how this user is violating our policies."),submitButtonText:i.gettext("Send abuse report"),submitButtonInProgressText:i.gettext("Sending abuse report")})),o&&r.createElement("div",{className:"ReportUserAbuse--report-sent"},r.createElement("h3",{className:"ReportUserAbuse-header"},i.gettext("You reported this user for abuse")),r.createElement("p",null,i.gettext("We have received your report. Thanks for letting us know about\n your concerns with this user.")),r.createElement("p",null,i.gettext("We can't respond to every abuse report but we'll look into\n this issue."))))}}])&&uL(t.prototype,n),o&&uL(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const dL=(0,Mo.qC)((0,g.connect)((function(e,t){var n=t.user&&e.userAbuseReports.byUserId[t.user.id]?e.userAbuseReports.byUserId[t.user.id]:{};return{hasSubmitted:n.hasSubmitted||!1,isSubmitting:n.isSubmitting||!1,uiVisible:n.uiVisible||!1}})),Eu(),ms({id:"ReportUserAbuse"}))(pL);const hL=function(e){var t=e.altText,n=e.className,o=e.preview,i=e.user,a=Ho()("UserAvatar",n),u=o&&o.length?o:null;return i&&!u&&(u=i.picture_url?i.picture_url:null),r.createElement("div",{className:a},u?r.createElement("img",{alt:t,className:"UserAvatar-image",src:u}):r.createElement(ac,{name:"anonymous-user"}))};function yL(e){return(yL="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function mL(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function vL(e,t){return(vL=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function gL(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=wL(e);if(t){var o=wL(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return bL(this,n)}}function bL(e,t){if(t&&("object"===yL(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function wL(e){return(wL=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var OL=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&vL(e,t)}(a,e);var t,n,o,i=gL(a);function a(e){var t;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),t=i.call(this,e);var n=e.clientApp,r=e.dispatch,o=e.errorHandler,u=e.isOwner,c=e.lang,s=e.location,l=e.match.params,f=e.reviews,p=e.shouldRedirect,d=e.user;return r(qo(D.cs)),p&&d?(r(ik({status:301,url:"/".concat(c,"/").concat(n,"/user/").concat(d.id,"/")})),bL(t)):o.hasError()?(L.Z.warn("Not loading data because of an error."),bL(t)):(d?u&&!f&&r(Ei({errorHandlerId:o.id,page:t.getReviewsPage(s),userId:d.id})):r(Ge({errorHandlerId:o.id,userId:l.userId})),t)}return t=a,(n=[{key:"componentDidUpdate",value:function(e){var t=e.location,n=e.match.params,r=this.props,o=r.dispatch,i=r.errorHandler,a=r.isOwner,u=r.location,c=r.match.params,s=r.reviews,l=r.user;n.userId!==c.userId?o(Ge({errorHandlerId:i.id,userId:Number(c.userId)})):!l||!a||t.query.page===u.query.page&&s||o(Ei({errorHandlerId:i.id,page:this.getReviewsPage(u),userId:l.id}))}},{key:"getUserId",value:function(){var e=this.props,t=e.match.params,n=e.user;return n?n.id:t.userId}},{key:"getURL",value:function(){return"/user/".concat(this.getUserId(),"/")}},{key:"getEditURL",value:function(){var e=this.props,t=e.currentUser,n=e.match.params;return ce()(t,"currentUser is required"),String(t.id)===n.userId?"/users/edit":"".concat(this.getURL(),"edit/")}},{key:"getReviewsPage",value:function(e){return e.query&&e.query.page||"1"}},{key:"renderReviews",value:function(){var e=this.props,t=e.location,n=e.i18n,o=e.isOwner,i=e.pageSize,a=e.reviews,u=e.reviewCount;if(!o||!a||a.length<1)return null;var c=u&&i&&u>Number(i)?r.createElement(ym,{LinkComponent:wc,count:u,currentPage:this.getReviewsPage(t),pathname:this.getURL(),perPage:Number(i),queryParams:t.query}):null;return r.createElement(xy,{className:"UserProfile-reviews",footer:c,header:n.gettext("My reviews")},r.createElement("ul",null,a.map((function(e){return r.createElement("li",{key:String(e.id)},r.createElement(cP,{review:e,shortByLine:!0,siteUserCanReply:!1}))}))))}},{key:"getMetaDescription",value:function(){var e,t=this.props,n=t.i18n,r=t.user;if(!r)return null;if(r.is_addon_developer&&r.is_artist)e=n.gettext("The profile of %(user)s, a Firefox extension\n and theme author. Find other apps by %(user)s, including average\n ratings, tenure, and the option to report issues.");else if(r.is_addon_developer)e=n.gettext("The profile of %(user)s, Firefox extension\n author. Find other extensions by %(user)s, including average ratings,\n tenure, and the option to report issues.");else{if(!r.is_artist)return null;e=n.gettext("The profile of %(user)s, Firefox theme\n author. Find other themes by %(user)s, including average ratings,\n tenure, and the option to report issues.")}return n.sprintf(e,{user:r.name})}},{key:"render",value:function(){var e,t=this.props,n=t.canAdminUser,o=t.canEditProfile,i=t.errorHandler,a=t.i18n,u=t.isOwner,c=t.user;if(i.hasError()){if(L.Z.warn("Captured API Error: ".concat(i.capturedError.messages)),404===i.capturedError.responseStatusCode)return r.createElement(jR,null);e=i.renderError()}var s=r.createElement("div",{className:"UserProfile-header"},r.createElement(hL,{className:"UserProfile-avatar",user:c,altText:a.gettext("User Avatar")}),c&&Je(c)&&r.createElement("div",{className:"UserProfile-tags"},c.is_addon_developer&&r.createElement("p",{className:"UserProfile-developer"},a.gettext("Add-ons developer"),r.createElement(ac,{name:"developer"})),c.is_artist&&r.createElement("p",{className:"UserProfile-artist"},a.gettext("Theme artist"),r.createElement(ac,{name:"artist"}))),r.createElement("h1",{className:"UserProfile-name"},c?c.name:r.createElement(Zp,null))),l=c?a.sprintf(a.gettext("User Profile for %(user)s"),{user:c.name}):a.gettext("User Profile");return r.createElement(HO,{errorHandler:i},r.createElement("div",{className:"UserProfile"},r.createElement(GN,{title:l,description:this.getMetaDescription()}),e,r.createElement("div",{className:"UserProfile-wrapper"},r.createElement(js,{className:"UserProfile-user-info",header:s},r.createElement(jd,{className:"UserProfile-dl"},c&&c.homepage?r.createElement(Sd,{className:"UserProfile-homepage",term:a.gettext("Homepage")},r.createElement("a",{href:c.homepage},a.gettext("Homepage"))):null,c&&c.location?r.createElement(Sd,{className:"UserProfile-location",term:a.gettext("Location")},c.location):null,c&&c.occupation?r.createElement(Sd,{className:"UserProfile-occupation",term:a.gettext("Occupation")},c.occupation):null,r.createElement(Sd,{className:"UserProfile-user-since",term:a.gettext("User since")},c?a.moment(c.created).format("ll"):r.createElement(Zp,null)),r.createElement(Sd,{className:"UserProfile-number-of-addons",term:a.gettext("Number of add-ons")},c?c.num_addons_listed:r.createElement(Zp,null)),r.createElement(Sd,{className:"UserProfile-rating-average",term:a.gettext("Average rating of developer’s add-ons")},c?r.createElement(id,{rating:c.average_addon_rating,readOnly:!0,styleSize:"small"}):r.createElement(Zp,null)),c&&c.biography&&c.biography.length?r.createElement(Sd,{className:"UserProfile-biography",term:a.gettext("Biography")},r.createElement("div",{dangerouslySetInnerHTML:bn(c.biography)})):null),!u&&r.createElement(dL,{className:"UserProfile-abuse-button",user:c}),o?r.createElement(Dc,{className:"UserProfile-edit-link",buttonType:"neutral",to:this.getEditURL(),puffy:!0},a.gettext("Edit profile")):null,n&&c?r.createElement(Dc,{className:"UserProfile-admin-link",buttonType:"neutral",href:"/admin/models/users/userprofile/".concat(c.id,"/"),puffy:!0},a.gettext("Admin user")):null),r.createElement("div",{className:"UserProfile-addons-and-reviews"},r.createElement(Sm,{addonType:D.Gz,authorDisplayName:c?c.name:null,authorIds:c?[c.id]:null,errorHandler:i,numberOfAddons:10,pageParam:"page_e",paginate:!0,pathname:this.getURL(),showMore:!1,showSummary:!0,type:"vertical"}),r.createElement(Sm,{addonType:D.Yd,authorDisplayName:c?c.name:null,authorIds:c?[c.id]:null,errorHandler:i,numberOfAddons:12,pageParam:"page_t",paginate:!0,pathname:this.getURL(),showMore:!1}),this.renderReviews()))))}}])&&mL(t.prototype,n),o&&mL(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const EL=(0,Mo.qC)((0,g.connect)((function(e,t){var n=t.match.params,r=e.api,o=r.clientApp,i=r.lang,a=!1,u=!1,c=null,s=!1,l=null,f=!1,p=null;if(/^\d+$/.test(n.userId)){var d=Number(n.userId);p=Qe(e.users,d)||null,s=(c=Xe(e.users))&&c.id===d,u=c&&(c.id===d||et(e,D.Ai)),a=c&&p&&et(e,D.Ai),l=function(e,t){var n=e.byUserId[t];return n?{pageSize:n.pageSize,reviewCount:n.reviewCount,reviews:Np({reviews:n.reviews,state:e})}:null}(e.reviews,d)}else{var h=n.userId;p=function(e,t){return ce()(t,"username is required"),e.byID[e.byUsername[t.toLowerCase()]]}(e.users,h),f=!0}return{canAdminUser:a,canEditProfile:u,clientApp:o,currentUser:c,isOwner:s,lang:i,pageSize:l?l.pageSize:null,reviewCount:l?l.reviewCount:null,reviews:l?l.reviews:null,shouldRedirect:f,user:p}})),Eu(),gs({fileName:"src/amo/pages/UserProfile/index.js",extractId:function(e){return e.match.params.userId}}))(OL);var _L,xL=function(e,t){switch(t){case"announcements":return e.gettext("stay up-to-date with news and events relevant to\n add-on developers (including the about:addons newsletter)");case"individual_contact":return e.gettext("Mozilla needs to contact me about my individual\n add-on");case"new_features":return e.gettext("new add-ons or Firefox features are available");case"new_review":return e.gettext("someone writes a review of my add-on");case"reply":return e.gettext("an add-on developer replies to my review");case"reviewer_reviewed":return e.gettext("my add-on is reviewed by a reviewer");case"upgrade_fail":return e.gettext("my add-on's compatibility cannot be upgraded");case"upgrade_success":return e.gettext("my add-on's compatibility is upgraded successfully");default:return null}};function SL(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function jL(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?SL(Object(n),!0).forEach((function(t){PL(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):SL(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function PL(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var kL=function(t){var n,o,i=t.enabled,a=t.label,u=t.mandatory,c=t.name,s=t.onChange;return a?r.createElement("p",{className:Ho()("UserProfileEditNotification",{"UserProfileEditNotification--disabled":u}),key:c},r.createElement("label",{htmlFor:c},r.createElement("input",{className:"UserProfileEditNotification-input",defaultChecked:i,disabled:u,id:c,name:c,onChange:s,type:"checkbox"}),r.createElement("span",{className:"UserProfileEditNotification-checkbox"}),a)):(L.Z.warn((0,e.f9)(_L||(n=['Not rendering notification "','" because there is no\n corresponding label.'],o||(o=n.slice(0)),_L=Object.freeze(Object.defineProperties(n,{raw:{value:Object.freeze(o)}}))),c)),null)};const IL=(0,Mo.qC)(Eu())((function(e){var t=e.i18n,n=e.onChange,o=e.user,i=[];if(o&&o.notifications)i=o.notifications.map((function(e){return kL(jL(jL({},e),{},{label:xL(t,e.name),onChange:n}))}));else for(var a=0;a<2;a++){var u="loading-notification-".concat(a);i.push(kL({name:u,mandatory:!0,enabled:!1,label:r.createElement(Zp,null)}))}return r.createElement("div",{className:"UserProfileEditNotifications"},i)}));function TL(e){return(TL="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function RL(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function CL(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function AL(e,t){return(AL=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function NL(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=DL(e);if(t){var o=DL(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return LL(this,n)}}function LL(e,t){if(t&&("object"===TL(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function DL(e){return(DL=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var ML=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&AL(e,t)}(a,e);var t,n,o,i=NL(a);function a(){var e;RL(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).onFocus=function(){e.props.setUIState({hasFocus:!0})},e.onBlur=function(){e.props.setUIState({hasFocus:!1})},e}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.i18n,n=e.name,o=e.onDelete,i=e.onSelect,a=e.preview,u=e.uiState,c=e.user,s=c?t.sprintf(t.gettext("Profile picture for %(name)s"),{name:c.name}):null,l="UserProfileEditPicture-delete-button";return r.createElement("section",{className:"UserProfileEditPicture"},r.createElement("label",{className:"UserProfileEdit--label",htmlFor:n},t.gettext("Profile photo")),r.createElement(hL,{altText:s,preview:a,user:c}),r.createElement("label",{className:Ho()("UserProfileEditPicture-file",{"UserProfileEditPicture-file--has-focus":u.hasFocus}),htmlFor:n},r.createElement("input",{accept:"image/png, image/jpeg",className:"UserProfileEditPicture-file-input",disabled:!c,id:n,name:n,onBlur:this.onBlur,onChange:i,onFocus:this.onFocus,type:"file"}),r.createElement(Dc,{buttonType:"action",className:"UserProfileEditPicture-select-button",disabled:!c,noLink:!0,puffy:!0},t.gettext("Choose Photo…"))),c&&c.picture_url&&r.createElement(LR,{buttonType:"cancel",className:l,htmlType:"button",id:l,message:t.gettext("Do you really want to delete this picture?"),onConfirm:o},t.gettext("Delete This Picture")))}}])&&CL(t.prototype,n),o&&CL(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const FL=(0,Mo.qC)(Eu(),Bu({extractId:function(){return""},fileName:"src/amo/components/UserProfileEditPicture/index.js",initialState:{hasFocus:!1}}))(ML);a(76511);var UL={backspace:8,del:46,delete:46,tab:9,enter:13,return:13,esc:27,space:32,pageUp:33,pageDown:34,end:35,home:36,left:37,up:38,right:39,down:40,";":186,"=":187,",":188,"-":189,".":190,"/":191,"`":192,"[":219,"\\":220,"]":221};Object.keys(UL).forEach((function(e){return UL[e.toUpperCase()]=UL[e]})),"0123456789".split("").forEach((function(e,t){return UL[e]=t+48})),"ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("").forEach((function(e,t){UL[e]=t+65,UL[e.toLowerCase()]=t+65})),[1,2,3,4,5,6,7,8,9,10,11,12].forEach((function(e,t){return UL["f"+t]=111+t}));var BL={control:"ctrl",ctrl:"ctrl",shift:"shift",meta:"meta",cmd:"meta",command:"meta",option:"alt",alt:"alt"},HL=Symbol("ALL_KEYS"),qL=Symbol("ALL_PRINTABLE_KEYS");const zL=UL;var GL=Object.keys(BL);const WL=function(e){var t=e.keySet,n=e.event,r=t.key,o=t.modifiers,i=void 0===o?[]:o,a=void 0;if(a=r===HL,r===qL)if(n.key)a=1===n.key.length;else{var u=String.fromCharCode(n.charCode);a="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ~!@#$%^&*()-_+=[]\\{}|;':\",./<>?£".indexOf(u)>=0}if(r===n.which){var c=GL.filter((function(e){return n[e+"Key"]})).sort();a=i.length===c.length&&i.every((function(e,t){return c[t]===e}))}return a};const VL=function(e){return e.map((function(e){var t={key:e};if("string"==typeof e){var n=e.toLowerCase().trim(),r=n.split(/\s?\+\s?/);t=1===r.length?{key:zL[n]}:{key:zL[r.pop()],modifiers:r.map((function(e){return BL[e]})).sort()}}return t}))};var YL=1;var ZL=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,o=!1,i=void 0;try{for(var a,u=e[Symbol.iterator]();!(r=(a=u.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{!r&&u.return&&u.return()}finally{if(o)throw i}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")};var $L=new Map,KL=new Set;function QL(e){var t=[].concat(e);t.length?(KL.delete(null),t.forEach((function(e){KL.delete(e),KL.add(e)}))):KL.add(null)}function XL(e){if(!KL.has(null)){var t=function(t){return WL({keySet:t,event:e})},n=!0,r=!1,o=void 0;try{for(var i,a=[].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}(KL)).reverse()[Symbol.iterator]();!(n=(i=a.next()).done);n=!0){var u=i.value,c=JL(u.constructor.prototype),s=!0,l=!1,f=void 0;try{for(var p,d=c[Symbol.iterator]();!(s=(p=d.next()).done);s=!0){var h=ZL(p.value,2),y=h[0],m=h[1];if(y.some(t))return{fn:m,instance:u}}}catch(e){l=!0,f=e}finally{try{!s&&d.return&&d.return()}finally{if(l)throw f}}}}catch(e){r=!0,o=e}finally{try{!n&&a.return&&a.return()}finally{if(r)throw o}}}return null}function JL(e){var t=e.__reactKeydownUUID;return $L.get(t)}function eD(e){var t=e.keys,n=e.fn,r=e.target,o=VL(t),i=r.__reactKeydownUUID;i?$L.get(i).set(o,n):(r.__reactKeydownUUID="uid-"+YL++,$L.set(r.__reactKeydownUUID,new Map([[o,n]])))}const tD={bindFocusables:function(e,t){if(document.querySelectorAll)try{var n=o.findDOMNode(e);if(n){var r=n.querySelectorAll("a[href], button, input, object, select, textarea, [tabindex]");if(r.length){Array.prototype.slice.call(r).forEach((function(n){return n.onfocus=function(n){var r=n.onfocus;return function(o){t(e),r&&r.call(n,o)}}(n)}))}}}catch(e){}},findContainerNodes:function(e){return function(t,n){try{var r=o.findDOMNode(n);r&&(r===e||r.contains(e))&&t.push({instance:n,node:r})}finally{return t}}},sortByDOMPosition:function(e,t){return 10===e.node.compareDocumentPosition(t.node)?1:-1}};var nD=!1,rD=!1;const oD={bindKeys:function(e){rD||(document.addEventListener("keydown",e),rD=!0)},unbindKeys:function(e){rD&&(document.removeEventListener("keydown",e),rD=!1)},bindClicks:function(e){nD||(document.addEventListener("click",e,!0),nD=!0)},unbindClicks:function(e){nD&&(document.removeEventListener("click",e,!0),nD=!1)}};function iD(e){var t=e.target;QL([].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}(KL)).reduce(tD.findContainerNodes(t),[]).sort(tD.sortByDOMPosition).map((function(e){return e.instance})))}function aD(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(t||uD(e)){var n=XL(e)||{},r=n.fn,o=n.instance;if(r)return r.call(o,e),!0}return!1}function uD(e){var t=e.ctrlKey,n=e.target;return t||!~["INPUT","SELECT","TEXTAREA"].indexOf(n.tagName)&&(!n.getAttribute||"textbox"!==n.getAttribute("role"))}function cD(e){QL(e),oD.bindKeys(aD),oD.bindClicks(iD),tD.bindFocusables(e,QL)}function sD(e){var t;t=e,KL.delete(t),KL.size||(oD.unbindClicks(iD),oD.unbindKeys(aD))}var lD=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},fD=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();function pD(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function dD(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function hD(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}const yD=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:HL,n=function(t){function n(e){pD(this,n);var t=dD(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,e));return t.state={event:null},t}return hD(n,t),fD(n,[{key:"componentDidMount",value:function(){cD(this)}},{key:"componentWillUnmount",value:function(){sD(this)}},{key:"handleKeyDown",value:function(e){var t=this;this.setState({event:e},(function(){return t.setState({event:null})}))}},{key:"render",value:function(){return r.createElement(e,lD({},this.props,{keydown:this.state}))}}]),n}(r.Component);return eD({keys:[].concat(t),fn:n.prototype.handleKeyDown,target:n.prototype}),n};var mD="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};function vD(e){return e&&"object"===(void 0===e?"undefined":mD(e))&&e.nativeEvent instanceof window.KeyboardEvent&&"keydown"===e.type}const gD=function(e){var t=e.target,n=e.descriptor,r=e.keys,o=n.value;if(!JL(t)){var i=t.componentDidMount,a=t.componentWillUnmount;t.componentDidMount=function(){if(cD(this),i)return i.call(this)},t.componentWillUnmount=function(){if(sD(this),a)return a.call(this)}}return eD({keys:r,target:t,fn:o}),n.value=function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];var r=t[0];if(vD(r)){if(!r.ctrlKey)return aD(r,!0)}else if(!(r&&r instanceof window.KeyboardEvent&&"keydown"===r.type))return o.call.apply(o,[this].concat(t))},n};var bD="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};function wD(){}function OD(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];var o=n[0],i=Array.isArray(o);if(i||~["string","number","symbol"].indexOf(void 0===o?"undefined":bD(o))){var a=i?o:n;return function(t,n,r){return n?e({target:t,descriptor:r,keys:a}):yD(t,a)}}var u=n[0],c=n[1];return u&&!c?yD.apply(void 0,n):wD}const ED=function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return OD.apply(void 0,[gD].concat(t))};function _D(e){return(_D="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function xD(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function SD(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function jD(e,t){return(jD=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function PD(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=ID(e);if(t){var o=ID(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return kD(this,n)}}function kD(e,t){if(t&&("object"===_D(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function ID(e){return(ID=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var TD=zL.ESC,RD=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&jD(e,t)}(a,e);var t,n,o,i=PD(a);function a(){var e;xD(this,a);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=i.call.apply(i,[this].concat(n))).onClickBackground=function(t){t.preventDefault(),e.props.onEscapeOverlay&&e.props.onEscapeOverlay(),e.hide()},e.hide=function(){e.props.setUIState({visible:!1})},e}return t=a,(n=[{key:"componentDidMount",value:function(){var e=this.props.visibleOnLoad;this.props.setUIState({visible:e})}},{key:"componentDidUpdate",value:function(e){var t=e.uiState,n=this.props,r=n.visibleOnLoad,o=n.keydown;o&&o.event&&this.onClickBackground(o.event),void 0!==r&&r!==t.visible&&this.props.setUIState({visible:r})}},{key:"render",value:function(){var e=this.props,t=e.children,n=e.className,o=e.id,i=e.uiState;return ce()(t,"The children property is required"),ce()(o,"The id property is required"),r.createElement("div",{className:Ho()("Overlay",n,{"Overlay--visible":i.visible})},r.createElement("div",{className:"Overlay-background",onClick:this.onClickBackground,role:"presentation"}),r.createElement("div",{className:"Overlay-contents"},t))}}])&&SD(t.prototype,n),o&&SD(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);RD.defaultProps={visibleOnLoad:!1};const CD=(0,Mo.qC)(Bu({fileName:"src/amo/components/Overlay/index.js",extractId:function(e){return e.id},initialState:{visible:!1}}),ED(TD))(RD);function AD(e){return(AD="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function ND(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function LD(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function DD(e,t){return(DD=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function MD(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=UD(e);if(t){var o=UD(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return FD(this,n)}}function FD(e,t){if(t&&("object"===AD(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function UD(e){return(UD=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var BD=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&DD(e,t)}(a,e);var t,n,o,i=MD(a);function a(){return ND(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.children,n=e.className,o=e.header,i=e.id,a=e.footerLink,u=e.footerText,c=e.visibleOnLoad;return r.createElement(CD,{onEscapeOverlay:this.props.onEscapeOverlay,id:i,visibleOnLoad:c},r.createElement(js,{className:Ho()("OverlayCard",n),header:o,footerLink:a,footerText:u},t))}}])&&LD(t.prototype,n),o&&LD(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);BD.propTypes={children:w().node,className:w().string,header:w().node,id:w().string.isRequired,footerLink:w().node,footerText:w().node,onEscapeOverlay:w().func,visibleOnLoad:w().bool},BD.defaultProps={visibleOnLoad:!1};function HD(e){return(HD="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function qD(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function zD(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?qD(Object(n),!0).forEach((function(t){GD(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):qD(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function GD(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function WD(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function VD(e,t){return(VD=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function YD(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=$D(e);if(t){var o=$D(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return ZD(this,n)}}function ZD(e,t){if(t&&("object"===HD(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function $D(e){return($D=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var KD=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&VD(e,t)}(a,e);var t,n,o,i=YD(a);function a(e){var t;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),(t=i.call(this,e)).onDeleteProfile=function(e){e.preventDefault(),t.setState({showProfileDeletionModal:!0})},t.onCancelProfileDeletion=function(e){e&&e.preventDefault(),t.setState({showProfileDeletionModal:!1})},t.onConfirmProfileDeletion=function(e){e.preventDefault();var n=t.props,r=n.clientApp,o=n.currentUser,i=n.dispatch,a=n.errorHandler,u=n.history,c=n.lang,s=n.user;ce()(o,"currentUser is required"),ce()(s,"user is required"),i(function(e){var t=e.errorHandlerId,n=e.userId;return ce()(t,"errorHandlerId is required"),ce()(n,"userId is required"),{type:Fe,payload:{errorHandlerId:t,userId:n}}}({errorHandlerId:a.id,userId:s.id})),o.id===s.id&&i(Ze()),u.push("/".concat(c,"/").concat(r))},t.onPictureLoaded=function(e){var n=e.target.result;t.setState({pictureData:n})},t.onPictureChange=function(e){e.preventDefault();var n=e.currentTarget.files;if(n&&n[0]){var r=n[0];t.loadPicture(r),t.setState({picture:r,successMessage:null})}},t.onNotificationChange=function(e){e.stopPropagation();var n=e.currentTarget,r=n.name,o=n.checked;t.setState((function(e){return{notifications:zD(zD({},e.notifications),{},GD({},r,o)),successMessage:null}}))},t.onPictureDelete=function(e){e.preventDefault();var n=t.props,r=n.dispatch,o=n.errorHandler,i=n.user;ce()(i,"user is required"),r(function(e){var t=e.errorHandlerId,n=e.userId;return{type:Le,payload:{errorHandlerId:t,userId:n}}}({errorHandlerId:o.id,userId:i.id}))},t.onFieldChange=function(e){var n;e.preventDefault();var r=e.currentTarget,o=r.name,i=r.value;t.setState((GD(n={},o,i),GD(n,"successMessage",null),n))},t.onSubmit=function(e){e.preventDefault();var n=t.props,r=n.dispatch,o=n.errorHandler,i=n.user,a=t.state,u=a.biography,c=a.displayName,s=a.homepage,l=a.location,f=a.notifications,p=a.occupation,d=a.picture,h=a.pictureData;ce()(i,"user is required"),r(function(e){var t=e.errorHandlerId,n=e.notifications,r=e.picture,o=e.pictureData,i=e.userFields,a=e.userId;return ce()(t,"errorHandlerId is required"),ce()(n,"notifications are required"),ce()(i,"userFields are required"),ce()(a,"userId is required"),ce()(void 0!==r,"picture is required"),r&&ce()(o,"pictureData is required when picture is present"),{type:Te,payload:{errorHandlerId:t,notifications:n,picture:r,pictureData:o,userFields:i,userId:a}}}({errorHandlerId:o.id,notifications:f,picture:d,pictureData:h,userFields:{biography:u,display_name:c,homepage:s,location:l,occupation:p},userId:i.id}))},t.loadPicture=function(e){var n=new FileReader;n.onload=t.onPictureLoaded,n.readAsDataURL(e)};var n=e.dispatch,r=e.errorHandler,o=e.userId,u=e.user;return t.state=zD({showProfileDeletionModal:!1,pictureData:null,successMessage:null},t.getFormValues(u)),n(qo(D.cs)),r.hasError()?(L.Z.warn("Not loading data because of an error."),ZD(t)):(!u&&o&&n(Ge({errorHandlerId:r.id,userId:o})),(!u&&o||u&&!u.notifications)&&n($e({errorHandlerId:r.id,userId:o})),t)}return t=a,(n=[{key:"componentDidUpdate",value:function(e,t){var n=e.isUpdating,r=e.user,o=e.userId,i=this.props,a=i.clientApp,u=i.currentUser,c=i.dispatch,s=i.errorHandler,l=i.i18n,f=i.isUpdating,p=i.lang,d=i.location,h=i.user,y=i.userId;if(u){if(o!==y?(!h&&y&&c(Ge({errorHandlerId:s.id,userId:y})),(!h&&y||h&&!h.notifications)&&c($e({errorHandlerId:s.id,userId:h?h.id:y})),this.setState(zD(zD({},this.getFormValues(h)),{},{pictureData:null,successMessage:null}))):r&&r.picture_url&&h&&!h.picture_url&&this.setState({picture:null,pictureData:null,successMessage:l.gettext("Picture successfully deleted")}),n&&!f&&!s.hasError()){var m=d.query.to;if(m&&"string"==typeof m&&!m.startsWith("//")){m.startsWith("/")||(m="/".concat(m));try{return void this.props._window.location.assign(m)}catch(e){L.Z.warn("Error redirecting to location: ".concat(m,": ").concat(e))}}this.props._window.location.assign("/".concat(p,"/").concat(a,"/user/").concat(y,"/"))}(!e.errorHandler.hasError()&&this.props.errorHandler.hasError()||!t.successMessage&&this.state.successMessage)&&this.props._window.scroll(0,0)}}},{key:"componentWillUnmount",value:function(){this.props.errorHandler.clear()}},{key:"getFormValues",value:function(e){var t={biography:"",displayName:"",homepage:"",location:"",notifications:{},occupation:"",picture:null};if(!e)return t;var n=e.biography,r=e.display_name,o=e.homepage,i=e.location,a=e.occupation;return zD(zD({},t),{},{biography:n,displayName:r,homepage:o,location:i,occupation:a})}},{key:"preventSubmit",value:function(){var e=this.props,t=e.user,n=e.isUpdating,r=this.state.displayName;return!t||n||!r||r&&""===r.trim()}},{key:"renderProfileAside",value:function(){var e=this.props,t=e.user,n=e.i18n,o=e.isEditingCurrentUser;return t?o?n.gettext("Tell users a bit more information about yourself. Most\n fields are optional, but they'll help other users get to know you\n better."):n.sprintf(n.gettext("Tell users a bit more information about this user.\n Most fields are optional, but they'll help other users get to know\n %(userName)s better."),{userName:t.name}):[r.createElement(Zp,{key:"profile-aside-1",width:100}),r.createElement(Zp,{key:"profile-aside-2",width:80})]}},{key:"renderBiographyLabel",value:function(){var e=this.props,t=e.user,n=e.i18n,o=e.isEditingCurrentUser;return t?o?n.gettext("Introduce yourself to the community if you like"):n.sprintf(n.gettext("Introduce %(userName)s to the community"),{userName:t.name}):r.createElement(Zp,null)}},{key:"render",value:function(){var e,t,n=this.props,o=n.currentUser,i=n.errorHandler,a=n.hasEditPermission,u=n.i18n,c=n.isEditingCurrentUser,s=n.isUpdating,l=n.user,f=n.userId;if(o){if(i.hasError()){if(L.Z.warn("Captured API Error: ".concat(i.capturedError.messages)),404===i.capturedError.responseStatusCode)return r.createElement(jR,null);t=i.renderError()}if(l&&!a)return r.createElement(jR,null)}else e=r.createElement("div",{className:"UserProfileEdit"},r.createElement(js,{className:"UserProfileEdit-authenticate"},r.createElement(Ew,{noIcon:!0,logInText:u.gettext("Log in to edit the profile")})));var p=s?u.gettext("Creating your profile…"):u.gettext("Create My Profile");l&&l.display_name&&(p=c?s?u.gettext("Updating your profile…"):u.gettext("Update My Profile"):s?u.gettext("Updating profile…"):u.gettext("Update Profile"));var d="/user/".concat(f,"/"),h="UserProfileEdit-deletion-modal";return r.createElement(HO,null,e||r.createElement("div",{className:"UserProfileEdit"},l&&r.createElement(Ao,null,r.createElement("title",null,u.sprintf(u.gettext("User Profile for %(user)s"),{user:l.name}))),r.createElement(js,{className:"UserProfileEdit-user-links"},r.createElement("ul",null,r.createElement("li",null,r.createElement(wc,{to:d},c?u.gettext("View My Profile"):u.gettext("View user's profile"))),r.createElement("li",null,c?u.gettext("Edit My Profile"):u.gettext("Edit user's profile")))),r.createElement("form",{className:"UserProfileEdit-form",onSubmit:this.onSubmit},r.createElement("div",{className:"UserProfileEdit-form-messages"},t,this.state.successMessage&&r.createElement(Jc,{type:"success"},this.state.successMessage)),r.createElement("div",null,r.createElement(js,{className:"UserProfileEdit--Card",header:c||!l?u.gettext("Account"):u.sprintf(u.gettext("Account for %(userName)s"),{userName:l.name})},r.createElement("div",null,r.createElement("label",{className:"UserProfileEdit--label",htmlFor:"email"},u.gettext("Email Address")),r.createElement("input",{className:"UserProfileEdit-email",id:"email",value:l&&l.email,disabled:!0,onChange:this.onFieldChange,title:u.gettext("Email address cannot be changed here"),type:"email"}),c&&r.createElement("p",{className:"UserProfileEdit-email--help",dangerouslySetInnerHTML:vn(u.sprintf(u.gettext("You can change your email address on\n Firefox Accounts. %(startLink)sNeed help?%(endLink)s"),{startLink:'<a href="https://support.mozilla.org/kb/change-primary-email-address-firefox-accounts">',endLink:"</a>"}),["a"])}),c&&l&&l.fxa_edit_email_url&&r.createElement("a",{href:l.fxa_edit_email_url,className:"UserProfileEdit-manage-account-link"},u.gettext("Manage Firefox Accounts…")))),r.createElement(js,{className:"UserProfileEdit--Card",header:u.gettext("Profile")},r.createElement("p",{className:"UserProfileEdit-profile-aside"},this.renderProfileAside()),r.createElement("label",{className:"UserProfileEdit--label",htmlFor:"displayName",title:u.gettext("This field is required")},u.gettext("Display Name *")),r.createElement("input",{className:"UserProfileEdit-displayName",disabled:!l,id:"displayName",name:"displayName",onChange:this.onFieldChange,value:this.state.displayName}),r.createElement("label",{className:"UserProfileEdit--label",htmlFor:"homepage"},u.gettext("Homepage")),r.createElement("input",{className:"UserProfileEdit-homepage",disabled:!l,id:"homepage",name:"homepage",onChange:this.onFieldChange,type:"url",value:this.state.homepage}),r.createElement("p",{className:"UserProfileEdit-homepage--help"},u.gettext("This URL will only be visible for users who are\n developers.")),r.createElement("label",{className:"UserProfileEdit--label",htmlFor:"location"},u.gettext("Location")),r.createElement("input",{className:"UserProfileEdit-location",disabled:!l,id:"location",name:"location",onChange:this.onFieldChange,value:this.state.location}),r.createElement("label",{className:"UserProfileEdit--label",htmlFor:"occupation"},u.gettext("Occupation")),r.createElement("input",{className:"UserProfileEdit-occupation",disabled:!l,id:"occupation",name:"occupation",onChange:this.onFieldChange,value:this.state.occupation}),r.createElement(FL,{name:"picture",onDelete:this.onPictureDelete,onSelect:this.onPictureChange,preview:this.state.pictureData,user:l})),r.createElement(js,{className:"UserProfileEdit--Card",header:u.gettext("Biography")},r.createElement("label",{className:"UserProfileEdit--label",htmlFor:"biography"},this.renderBiographyLabel()),r.createElement(Ih,{className:"UserProfileEdit-biography",disabled:!l,id:"biography",name:"biography",onChange:this.onFieldChange,value:this.state.biography||""}),r.createElement("p",{className:"UserProfileEdit-biography--help"},u.sprintf(u.gettext("Some HTML supported: %(htmlTags)s. Links are forbidden."),{htmlTags:["<abbr title>","<acronym title>","<b>","<blockquote>","<code>","<em>","<i>","<li>","<ol>","<strong>","<ul>"].join(" ")}))),r.createElement(js,{className:"UserProfileEdit--Card",header:u.gettext("Notifications")},r.createElement("p",{className:"UserProfileEdit-notifications-aside"},c?u.gettext("From time to time, Mozilla may send you email about\n upcoming releases and add-on events. Please select the\n topics you are interested in."):u.gettext("From time to time, Mozilla may send this user email\n about upcoming releases and add-on events. Please select\n the topics this user may be interested in.")),r.createElement(IL,{key:l&&l.id,onChange:this.onNotificationChange,user:l}),c&&Je(l)&&r.createElement("p",{className:"UserProfileEdit-notifications--help"},u.gettext("Mozilla reserves the right to contact you\n individually about specific concerns with your hosted\n add-ons."))),r.createElement("div",{className:"UserProfileEdit-buttons-wrapper"},r.createElement(Dc,{buttonType:"action",className:"UserProfileEdit-submit-button UserProfileEdit-button",disabled:this.preventSubmit(),puffy:!0,type:"submit"},p),r.createElement(Dc,{buttonType:"alert",className:"UserProfileEdit-button UserProfileEdit-delete-button",disabled:!l,onClick:this.onDeleteProfile,puffy:!0,type:"button"},c?u.gettext("Delete My Profile"):u.gettext("Delete Profile"))))),this.state.showProfileDeletionModal&&r.createElement(BD,{onEscapeOverlay:this.onCancelProfileDeletion,className:h,header:c?u.gettext("IMPORTANT: Deleting your Firefox Add-ons profile is irreversible."):u.gettext("IMPORTANT: Deleting this Firefox Add-ons profile is irreversible."),id:h,visibleOnLoad:!0},r.createElement("p",null,c?u.gettext("Your data will be permanently removed, including\n profile details (picture, user name, display name,\n location, home page, biography, occupation), notification\n preferences, reviews, and collections."):u.gettext("The user’s data will be permanently removed, including\n profile details (picture, user name, display name,\n location, home page, biography, occupation), notification\n preferences, reviews, and collections.")),r.createElement("p",null,c?u.gettext("If you authored any add-ons they will also be deleted,\n unless you share ownership with other authors. In that\n case, you will be removed as an author and the remaining\n authors will maintain ownership of the add-on."):u.gettext("If the user authored any add-ons they will also be\n deleted, unless ownership is shared with other authors. In\n that case, the user will be removed as an author and the\n remaining authors will maintain ownership of the add-on.")),c&&r.createElement("p",null,u.gettext("When you use this email address to log in again to\n addons.mozilla.org, your profile on Firefox Add-ons will\n not have access to any of its previous content.")),r.createElement("div",{className:"UserProfileEdit-buttons-wrapper"},r.createElement(Dc,{buttonType:"alert",className:"UserProfileEdit-button UserProfileEdit-confirm-button",onClick:this.onConfirmProfileDeletion,puffy:!0},c?u.gettext("Delete My Profile"):u.gettext("Delete Profile")),r.createElement(Dc,{buttonType:"cancel",className:"UserProfileEdit-button UserProfileEdit-cancel-button",onClick:this.onCancelProfileDeletion},u.gettext("Cancel"))))))}}])&&WD(t.prototype,n),o&&WD(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);KD.defaultProps={_window:"undefined"!=typeof window?window:{}};const QD=(0,Mo.qC)((0,g.connect)((function(e,t){var n=e.api,r=n.clientApp,o=n.lang,i=t.match.params,a=Number(i.userId),u=Xe(e.users),c=i.userId?Qe(e.users,a):u,s=Boolean(u&&c&&u.id===c.id);return u&&et(e,D.Ai)&&(s=!0),{clientApp:r,currentUser:u,hasEditPermission:s,isEditingCurrentUser:!(!u||!c)&&u.id===c.id,isUpdating:e.users.isUpdating,lang:o,user:c,userId:c?c.id:a}})),Eu(),gs({fileName:"src/amo/pages/UserProfileEdit/index.js",extractId:function(e){return e.match.params.userId}}))(KD);function XD(e){return(XD="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function JD(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function eM(e,t){return(eM=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function tM(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=rM(e);if(t){var o=rM(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return nM(this,n)}}function nM(e,t){if(t&&("object"===XD(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function rM(e){return(rM=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var oM=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&eM(e,t)}(a,e);var t,n,o,i=tM(a);function a(e){var t;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),t=i.call(this,e);var n=e.dispatch,r=e.errorHandler,o=e.match,u=e.isUnsubscribed,c=o.params,s=c.hash,l=c.notificationName,f=c.token;return void 0===u&&n(function(e){var t=e.errorHandlerId,n=e.hash,r=e.notification,o=e.token;return ce()(t,"errorHandlerId is required"),ce()(n,"hash is required"),ce()(r,"notification is required"),ce()(o,"token is required"),{type:Be,payload:{errorHandlerId:t,hash:n,notification:r,token:o}}}({errorHandlerId:r.id,hash:s,notification:l,token:f})),t}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.errorHandler,n=e.i18n,o=e.isUnsubscribed,i=e.match.params,a=i.token,u=i.notificationName,c=ie({text:n.gettext("You can edit your notification settings by %(linkStart)sediting your profile%(linkEnd)s."),replacements:[["linkStart","linkEnd",function(e){return r.createElement(wc,{key:"edit-profile",to:"/users/edit"},e)}]]});return r.createElement(HO,null,r.createElement("div",{className:"UsersUnsubscribe"},r.createElement(Ao,null,r.createElement("title",null,n.gettext("Unsubscribe"))),t.hasError()?t.renderError():r.createElement(js,{header:o?n.gettext("You are successfully unsubscribed!"):r.createElement(Zp,null)},o?r.createElement("p",{className:"UsersUnsubscribe-content-explanation",dangerouslySetInnerHTML:vn(n.sprintf(n.gettext("The email address %(strongStart)s%(email)s%(strongEnd)s\n will no longer get messages when:"),{strongStart:"<strong>",strongEnd:"</strong>",email:(0,uv.Jx)(a)}),["strong"])}):r.createElement("p",{className:"UsersUnsubscribe-content-explanation"},r.createElement(Zp,{minWidth:40})),r.createElement("blockquote",{className:"UsersUnsubscribe-content-notification"},o?xL(n,u):r.createElement(Zp,{minWidth:40})),r.createElement("p",{className:"UsersUnsubscribe-content-edit-profile"},o?c:r.createElement(Zp,null)))))}}])&&JD(t.prototype,n),o&&JD(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const iM=(0,Mo.qC)((0,g.connect)((function(e,t){var n=t.match.params,r=n.hash,o=n.notificationName,i=n.token;return{isUnsubscribed:at(e.users,r,o,i)}})),Eu(),gs({fileName:"src/amo/pages/UsersUnsubscribe/index.js",extractId:function(e){var t=e.match.params,n=t.hash,r=t.notificationName,o=t.token;return it({hash:n,notification:r,token:o})}}))(oM);function aM(e){return(aM="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function uM(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function cM(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function sM(e,t){return(sM=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function lM(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=pM(e);if(t){var o=pM(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return fM(this,n)}}function fM(e,t){if(t&&("object"===aM(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function pM(e){return(pM=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var dM=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&sM(e,t)}(a,e);var t,n,o,i=lM(a);function a(){return uM(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props,t=e.i18n,n=e.status;return r.createElement(Do(),{code:n},r.createElement("div",{className:"ErrorPage NotFound"},r.createElement("h1",null,t.gettext("Page not found")),r.createElement("p",null,t.gettext("Sorry, but we can't find anything at the URL you entered.")),r.createElement("p",null,t.sprintf(t.gettext("Error code: %(status)s."),{status:n}))))}}])&&cM(t.prototype,n),o&&cM(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);dM.propTypes={i18n:w().object.isRequired,status:w().number},dM.defaultProps={status:404};const hM=(0,Mo.qC)(Eu())(dM);function yM(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=n._config,i=void 0===o?t.Z:o;if(!e)throw new TypeError("configKey cannot be empty");return function(t){return function(n){return i.get(e)?r.createElement(t,n):(L.Z.debug("config.".concat(e," was false; not rendering ").concat(Rn(t))),r.createElement(hM,null))}}}function mM(e){return(mM="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function vM(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function gM(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function bM(e,t){return(bM=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function wM(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=EM(e);if(t){var o=EM(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return OM(this,n)}}function OM(e,t){if(t&&("object"===mM(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function EM(e){return(EM=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var _M=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&bM(e,t)}(a,e);var t,n,o,i=wM(a);function a(){return vM(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){return L.Z.info("Simulating an asynchronous error"),setTimeout((function(){throw new Error("This is a simulated asynchronous error")}),50),r.createElement("p",null,"Asynchronous error simulated, check the logs")}}])&&gM(t.prototype,n),o&&gM(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const xM=(0,Mo.qC)(yM("allowErrorSimulation"))(_M);function SM(e){return(SM="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function jM(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function PM(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function kM(e,t){return(kM=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function IM(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=RM(e);if(t){var o=RM(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return TM(this,n)}}function TM(e,t){if(t&&("object"===SM(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function RM(e){return(RM=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var CM=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&kM(e,t)}(i,e);var t,n,r,o=IM(i);function i(){return jM(this,i),o.apply(this,arguments)}return t=i,(n=[{key:"render",value:function(){throw L.Z.info("Simulating a synchronous error"),new Error("This is a simulated synchronous error")}}])&&PM(t.prototype,n),r&&PM(t,r),Object.defineProperty(t,"prototype",{writable:!1}),i}(r.Component);const AM=(0,Mo.qC)(yM("allowErrorSimulation"))(CM);const NM=function(e){var t=e.title,n=e.metaDescription,o=e.children;return r.createElement(HO,{showWrongPlatformWarning:!1},r.createElement(js,{className:"StaticPage",header:t},r.createElement(Ao,null,r.createElement("title",null,t)),r.createElement(hp,{description:n,title:t}),r.createElement(ep,null),r.createElement("div",{className:"StaticPage-content"},o)))};function LM(e){return(LM="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function DM(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function MM(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function FM(e,t){return(FM=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function UM(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=HM(e);if(t){var o=HM(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return BM(this,n)}}function BM(e,t){if(t&&("object"===LM(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function HM(e){return(HM=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var qM=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&FM(e,t)}(a,e);var t,n,o,i=UM(a);function a(){return DM(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props.i18n;return r.createElement(NM,{title:e.gettext("About Firefox Add-ons"),metaDescription:e.gettext("The official Mozilla site for downloading\n Firefox extensions and themes. Add new features and change the\n browser’s appearance to customize your web experience.")},r.createElement(r.Fragment,null,r.createElement("div",{id:"about"},r.createElement("p",null,e.gettext("Addons.mozilla.org (AMO), is Mozilla's official site\n for discovering and installing add-ons for the Firefox browser.\n Add-ons help you modify and personalize your browsing experience\n by adding new features to Firefox, enhancing your interactions\n with Web content, and changing the way your browser looks.")),r.createElement("p",{dangerouslySetInnerHTML:vn(e.sprintf(e.gettext("If you are looking for add-ons for Thunderbird or SeaMonkey, please visit\n %(startTBLink)saddons.thunderbird.net%(endTBLink)s or\n %(startSMLink)saddons.thunderbird.net/seamonkey%(endSMLink)s."),{startTBLink:'<a href="https://addons.thunderbird.net/thunderbird/">',endTBLink:"</a>",startSMLink:'<a href="https://addons.thunderbird.net/seamonkey/">',endSMLink:"</a>"}),["a"])})),r.createElement("section",null,r.createElement("h2",null,e.gettext("A community of creators")),r.createElement("p",null,e.gettext("The add-ons listed here are created by\n thousands of developers and theme designers from all over the\n world, ranging from individual hobbyists to large corporations.\n Some add-ons listed on AMO have been automatically published\n and may be subject to review by a team of editors once\n publicly listed."))),r.createElement("section",null,r.createElement("h2",null,e.gettext("Get involved")),r.createElement("p",null,e.gettext("Mozilla is a non-profit champion of the Internet, we\n build Firefox to help keep it healthy, open and accessible. Add-ons\n support user choice and customization in Firefox, and you can\n contribute in the following ways:")),r.createElement("ul",null,r.createElement("li",{dangerouslySetInnerHTML:vn(e.sprintf(e.gettext("%(startLink)sMake your own add-on%(endLink)s.\n We provide free hosting and update services and can help you\n reach a large audience of users."),{startLink:'<a href="https://addons.mozilla.org/developers/">',endLink:"</a>"}),["a"])}),r.createElement("li",{dangerouslySetInnerHTML:vn(e.sprintf(e.gettext("Help improve this website. It's open source, and you\n can file bugs and submit patches. You can get started with a\n %(startGoodFirstBugLink)sgood first bug%(endGoodFirstBugLink)s\n or view all open issues for AMO’s\n %(startAddonsServerRepoLink)sserver%(endAddonsServerRepoLink)s and\n %(startAddonsFrontendRepoLink)sfrontend%(endAddonsFrontendRepoLink)s\n on Github."),{startGoodFirstBugLink:'<a href="https://github.com/search?l=&q=repo:mozilla/addons+repo:mozilla/addons-frontend+repo:mozilla/addons-linter+repo:mozilla/addons-server+label:%22contrib:+good+first+bug%22&ref=advsearch&state=open&type=Issues">',endGoodFirstBugLink:"</a>",startAddonsServerRepoLink:'<a href="https://github.com/mozilla/addons-server/issues">',endAddonsServerRepoLink:"</a>",startAddonsFrontendRepoLink:'<a href="https://github.com/mozilla/addons-frontend/issues">',endAddonsFrontendRepoLink:"</a>"}),["a"])}),r.createElement("li",{dangerouslySetInnerHTML:vn(e.sprintf(e.gettext("Want to interact with addons.mozilla.org\n (AMO) programmatically? Check out the\n %(startAddonsServerDocumentation)sAdd-ons Servers\n documentation%(endAddonsServerDocumentation)s for details\n about the APIs used by AMO and the\n %(startAddonsManager)sAdd-ons\n Manager%(endAddonsManager)s."),{startAddonsServerDocumentation:'<a href="https://addons-server.readthedocs.io/en/latest/index.html">',endAddonsServerDocumentation:"</a>",startAddonsManager:'<a href="https://blog.mozilla.org/firefox/add-ons-manager/">',endAddonsManager:"</a>"}),["a"])})),r.createElement("p",null,e.gettext("If you want to contribute but are not quite as technical, there are still ways to help:")),r.createElement("ul",null,r.createElement("li",{dangerouslySetInnerHTML:vn(e.sprintf(e.gettext("Participate in our %(startLink)sforum%(endLink)s."),{startLink:'<a href="https://discourse.mozilla-community.org/c/add-ons">',endLink:"</a>"}),["a"])}),r.createElement("li",null,e.gettext("Leave feedback for your favorite add-ons. Add-on authors are more likely\n to improve their add-ons and create new ones when they know people appreciate their\n work.")),r.createElement("li",null,e.gettext("Tell your friends and family that Firefox is a fast, secure browser\n that protects their privacy, and they can use add-ons to make it their own!"))),r.createElement("p",{dangerouslySetInnerHTML:vn(e.sprintf(e.gettext("To see more ways you can contribute to the add-on community, please visit our %(startLink)swiki%(endLink)s."),{startLink:'<a href="https://wiki.mozilla.org/Add-ons/Contribute">',endLink:"</a>"}),["a"])})),r.createElement("section",null,r.createElement("h2",{id:"reportIssue"},e.gettext("Report an issue")),r.createElement("p",{dangerouslySetInnerHTML:vn(e.sprintf(e.gettext("If you find a problem with the site, we'd love to fix it.\n Please file an %(startIssueLink)sissue%(endIssueLink)s and include as much\n detail as possible."),{startIssueLink:'<a href="https://github.com/mozilla/addons/issues/new">',endIssueLink:"</a>"}),["a"])}),r.createElement("p",{dangerouslySetInnerHTML:vn(e.sprintf(e.gettext("To report a security vulnerability for an extension, even if it is not\n hosted on this site, please file an %(startSecIssueLink)sissue%(endSecIssueLink)s\n on Bugzilla or email %(startMailLink)samo-admins@mozilla.com%(endMailLink)s.\n All security vulnerability reports are %(startLink)sconfidential%(endLink)s."),{startSecIssueLink:'<a href="https://bugzilla.mozilla.org/enter_bug.cgi?product=addons.mozilla.org&component=Add-on%20Security&maketemplate=Add-on%20Security%20Bug&bit-23=1&rep_platform=All&op_sys=All" rel="nofollow">',endSecIssueLink:"</a>",startMailLink:'<a href="mailto:amo-admins@mozilla.com">',endMailLink:"</a>",startLink:'<a href="https://www.mozilla.org/en-US/about/governance/policies/security-group/bugs/" rel="nofollow">',endLink:"</a>"}),["a"])})),r.createElement("section",null,r.createElement("h2",null,e.gettext("Get support")),r.createElement("p",{dangerouslySetInnerHTML:vn(e.sprintf(e.gettext("If you would like to learn more about how to manage add-ons in\n Firefox, or need to find general Firefox support, please visit\n %(startSUMOLink)sSupport%(endSUMOLink)s\n Mozilla. If you don't find an answer there, you can\n %(startForumLink)sask on our community forum%(endForumLink)s."),{startSUMOLink:'<a href="https://support.mozilla.org/products/firefox/manage-preferences-and-add-ons-firefox/install-and-manage-add-ons">',endSUMOLink:"</a>",startForumLink:'<a href="https://discourse.mozilla-community.org/c/add-ons">',endForumLink:"</a>"}),["a"])}),r.createElement("p",{dangerouslySetInnerHTML:vn(e.sprintf(e.gettext("%(startLink)sInformation about how to contact Mozilla's add-ons team can be found here%(endLink)s."),{startLink:'<a href="https://wiki.mozilla.org/Add-ons#Getting_in_touch">',endLink:"</a>"}),["a"])}))))}}])&&MM(t.prototype,n),o&&MM(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const zM=Eu()(qM);function GM(e){return(GM="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function WM(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function VM(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function YM(e,t){return(YM=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function ZM(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=KM(e);if(t){var o=KM(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return $M(this,n)}}function $M(e,t){if(t&&("object"===GM(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function KM(e){return(KM=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var QM=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&YM(e,t)}(a,e);var t,n,o,i=ZM(a);function a(){return WM(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"render",value:function(){var e=this.props.i18n;return r.createElement(NM,{title:e.gettext("Review Guidelines"),metaDescription:e.gettext("\n Guidelines, tips, and Frequently Asked Questions to leave a review for the extensions and\n themes you’ve downloaded and used on Firefox.\n ")},r.createElement(r.Fragment,null,r.createElement("section",{id:"review-guide"},r.createElement("p",null,e.gettext("Add-on reviews are a way for you to share your opinions\n about the add-ons you’ve installed and used. Our review moderation\n team reserves the right to refuse or remove any review that does not\n comply with these guidelines.")),r.createElement("h2",null,e.gettext("Tips for writing a great review")),r.createElement("h3",null,e.gettext("Do:")),r.createElement("ul",null,r.createElement("li",null,e.gettext("Write like you are telling a friend about your experience with the add-on.")),r.createElement("li",null,e.gettext("Keep reviews concise and easy to understand.")),r.createElement("li",null,e.gettext("Give specific and helpful details. For example:"),r.createElement("ul",null,r.createElement("li",null,e.gettext("Did the add-on work as you expected it to?")),r.createElement("li",null,e.gettext("What features did you like or dislike?")),r.createElement("li",null,e.gettext("Was it useful?")),r.createElement("li",null,e.gettext("Was it easy to use?")),r.createElement("li",null,e.gettext("Will you continue to use this add-on?")))),r.createElement("li",null,e.gettext("Take a moment to read your review before submitting it to minimize typos."))),r.createElement("h3",null,e.gettext("Don't:")),r.createElement("ul",null,r.createElement("li",null,e.gettext('Submit one-word reviews such as "Great!", "wonderful," or "bad".')),r.createElement("li",null,e.gettext('Post technical issues, support requests, or feature suggestions. Use\n the available support options for each add-on, if available. You can find them in\n the "More information" section in the sidebar on the add-on\'s detail page.')),r.createElement("li",null,e.gettext("Write reviews for add-ons which you have not personally used.")),r.createElement("li",null,e.gettext("Use profanity, sexual language or language that can be construed as hateful.")),r.createElement("li",null,e.gettext("Include HTML, links, source code or code snippets. Reviews are meant to be text only.")),r.createElement("li",null,e.gettext("Make false statements, disparage add-on authors or personally insult them.")),r.createElement("li",null,e.gettext("Include your own or anyone else’s email, phone number, or other personal details.")),r.createElement("li",null,e.gettext("Post reviews for an add-on you or your organization wrote or represent.")),r.createElement("li",null,e.gettext("Criticize an add-on for something it’s intended to do. For example,\n leaving a negative review of an add-on for displaying ads or requiring data\n gathering, when that is the intended purpose of the add-on, or the add-on\n requires gathering data to function.")))),r.createElement("section",null,r.createElement("h2",null,e.gettext("Frequently Asked Questions about Reviews")),r.createElement("h3",null,e.gettext("How can I report a problematic review?")),r.createElement("p",null,e.gettext('Please report or flag any questionable reviews by clicking the\n "Report this review" and it will be submitted to the site for moderation. Our\n moderation team will use the Review Guidelines to evaluate whether or not to\n delete the review or restore it back to the site.')),r.createElement("h3",null,e.gettext("I'm an add-on author, can I respond to reviews?")),r.createElement("p",{dangerouslySetInnerHTML:vn(e.sprintf(e.gettext("Yes, add-on authors can provide a single response to a review.\n You can set up a discussion topic in our %(startLink)sforum%(endLink)s to engage in additional\n discussion or follow-up."),{startLink:'<a href="https://discourse.mozilla-community.org/c/add-ons/add-on-support">',endLink:"</a>"}),["a"])}),r.createElement("h3",null,e.gettext("I'm an add-on author, can I delete unfavorable reviews or ratings?")),r.createElement("p",null,e.gettext('In general, no. But if the review did not meet the review guidelines\n outlined above, you can click "Report this review" and have it moderated. If a review\n included a complaint that is no longer valid due to a new release of your add-on, we\n may consider deleting the review.')))))}}])&&VM(t.prototype,n),o&&VM(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const XM=Eu()(QM);function JM(e){return(JM="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function eF(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function tF(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?eF(Object(n),!0).forEach((function(t){nF(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):eF(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function nF(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function rF(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function oF(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function iF(e,t){return(iF=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function aF(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=cF(e);if(t){var o=cF(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return uF(this,n)}}function uF(e,t){if(t&&("object"===JM(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function cF(e){return(cF=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var sF=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&iF(e,t)}(a,e);var t,n,o,i=aF(a);function a(){return rF(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"getPageTitle",value:function(e){var t=this.props.i18n;return t.sprintf(t.gettext("Add-ons tagged with %(tag)s"),{tag:e})}},{key:"render",value:function(){var e=this.props,t=e.filters,n=e.match.params.tag,o=tF(tF({},t),{},{tag:n,sort:t.sort||D.B2});return r.createElement(HO,null,r.createElement(ep,null),r.createElement(dT,{filters:o,pageTitle:this.getPageTitle(n),paginationQueryParams:Tt(t),pathname:ih({tag:n})}))}}])&&oF(t.prototype,n),o&&oF(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const lF=(0,Mo.qC)((0,g.connect)((function(e){var t=Rt(e.router.location.query);return{filters:Nt(t)}})),Eu())(sF);const fF=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e._config,o=void 0===n?t.Z:n;return r.createElement(Fo,null,r.createElement(Uo,{exact:!0,path:"/:lang/about",component:zM}),r.createElement(Uo,{exact:!0,path:"/:lang/review_guide",component:XM}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/",component:UA}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/addon/:slug/",component:yk}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/blocked-addon/:guid/:versionId?/",component:XC}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/addon/:addonSlug/reviews/:reviewId",component:Wk}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/addon/:addonSlug/reviews/",component:Wk}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/addon/:slug/privacy/",component:function(e){return r.createElement(Pk,Object.assign({},e,{infoType:Sk}))}}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/addon/:slug/eula/",component:function(e){return r.createElement(Pk,Object.assign({},e,{infoType:xk}))}}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/addon/:slug/license/",component:function(e){return r.createElement(Pk,Object.assign({},e,{infoType:_k}))}}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/addon/:slug/versions/",component:eI}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/users/edit",component:QD}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/user/:userId/edit/",component:QD}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/user/:userId/",component:EL}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/collections/:userId/:slug/",component:VR}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/collections/",component:rC}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/collections/add/",component:function(e){return r.createElement(VR,Object.assign({},e,{creating:!0}))}}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/collections/:userId/:slug/edit/",component:YR}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/:visibleAddonType(extensions|themes)/categories/",component:vI}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/:visibleAddonType(extensions|themes)/category/:categorySlug/",component:xT}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/tag/:tag/",component:lF}),r.createElement(Uo,{exact:!0,path:"/:lang/android/language-tools/",component:jR}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox)/language-tools/",component:yN}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/search-tools/",component:_N}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/search/",component:AN}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/401/",component:o.get("isDevelopment")?EC:jR}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/404/",component:jR}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/451/",component:_C}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/500/",component:o.get("isDevelopment")?AC:jR}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/simulate-async-error/",component:function(){return r.createElement(HO,{showWrongPlatformWarning:!1},r.createElement(xM,null))}}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/simulate-sync-error/",component:function(){return r.createElement(HO,{showWrongPlatformWarning:!1},r.createElement(AM,null))}}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/:visibleAddonType(extensions|themes)/",component:ZA}),r.createElement(Uo,{exact:!0,path:"/:lang/:application(firefox|android)/users/unsubscribe/:token/:hash/:notificationName/",component:iM}),r.createElement(Uo,{component:jR}))};function pF(e){return(pF="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function dF(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function hF(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function yF(e,t){return(yF=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function mF(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=gF(e);if(t){var o=gF(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return vF(this,n)}}function vF(e,t){if(t&&("object"===pF(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function gF(e){return(gF=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var bF=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&yF(e,t)}(i,e);var t,n,r,o=mF(i);function i(){return dF(this,i),o.apply(this,arguments)}return t=i,(n=[{key:"componentDidUpdate",value:function(e){var t=this.props,n=t._window,r=t.location;!n||r.pathname===e.location.pathname&&r.search===e.location.search||n.scrollTo(0,0)}},{key:"render",value:function(){return this.props.children||null}}])&&hF(t.prototype,n),r&&hF(t,r),Object.defineProperty(t,"prototype",{writable:!1}),i}(r.Component);bF.defaultProps={_window:"undefined"!=typeof window?window:null};const wF=No(bF);function OF(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function EF(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?OF(Object(n),!0).forEach((function(t){_F(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):OF(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function _F(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var xF="LOAD_ERROR_PAGE",SF={clearOnNext:!1,error:null,hasError:!1,statusCode:null};function jF(e){return(jF="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function PF(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function kF(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function IF(e,t){return(IF=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function TF(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=CF(e);if(t){var o=CF(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return RF(this,n)}}function RF(e,t){if(t&&("object"===jF(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function CF(e){return(CF=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var AF=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&IF(e,t)}(a,e);var t,n,o,i=TF(a);function a(){return PF(this,a),i.apply(this,arguments)}return t=a,(n=[{key:"componentDidCatch",value:function(e,t){(0,this.props.dispatch)(function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).error;if(!e)throw new Error("error is required");return{type:xF,payload:{error:e}}}({error:e})),L.Z.error("Caught application error:",e,t)}},{key:"render",value:function(){var e=this.props,t=e.children,n=e.errorPage;if(n.hasError){var o=function(e){switch(e){case 401:return EC;case 404:return jR;case 500:default:return AC}}(n.statusCode);return r.createElement(o,null)}return t}}])&&kF(t.prototype,n),o&&kF(t,o),Object.defineProperty(t,"prototype",{writable:!1}),a}(r.Component);const NF=(0,Mo.qC)((0,g.connect)((function(e){return{errorPage:e.errorPage}})))(AF);function LF(e){return(LF="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function DF(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function MF(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?DF(Object(n),!0).forEach((function(t){FF(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):DF(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function FF(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function UF(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function BF(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function HF(e,t){return(HF=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e})(e,t)}function qF(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=GF(e);if(t){var o=GF(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return zF(this,n)}}function zF(e,t){if(t&&("object"===LF(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function GF(e){return(GF=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var WF=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&HF(e,t)}(u,e);var n,o,i,a=qF(u);function u(){return UF(this,u),a.apply(this,arguments)}return n=u,(o=[{key:"componentDidMount",value:function(){var e=this.props,t=e._addChangeListeners,n=e._navigator,r=e.handleGlobalEvent,o=e.mozAddonManager,i=e.setUserAgent,a=e.userAgent;t(r,o),!a&&n&&n.userAgent&&(L.Z.info("userAgent not in state on App load; using navigator.userAgent."),i(n.userAgent))}},{key:"componentDidUpdate",value:function(){var e,n,r=this.props,o=r.clientApp,i=r.location,a=r.setClientApp,u=(e=i.pathname,{lang:(n=e.split("?")[0].replace(/^\//,"").split("/"))[0],clientApp:n[1]}).clientApp;(function(e){var n=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{})._config;return(void 0===n?t.Z:n).get("validClientApplications").includes(e)})(u)&&u!==o&&a(u)}},{key:"render",value:function(){var e=this.props,t=e.clientApp,n=e.i18n,o={locale:e.lang},i=n.sprintf(n.gettext("Add-ons for Firefox (%(locale)s)"),o),a=n.sprintf(n.gettext("%(title)s – Add-ons for Firefox (%(locale)s)"),MF(MF({},o),{},{title:"%s"}));return t===D.wZ&&(i=n.sprintf(n.gettext("Add-ons for Firefox Android (%(locale)s)"),o),a=n.sprintf(n.gettext("%(title)s – Add-ons for Firefox Android (%(locale)s)"),MF(MF({},o),{},{title:"%s"}))),r.createElement(Do(),{code:200},r.createElement(wF,null,r.createElement(Ao,{defaultTitle:i,titleTemplate:a}),r.createElement(NF,null,r.createElement(fF,null))))}}])&&BF(n.prototype,o),i&&BF(n,i),Object.defineProperty(n,"prototype",{writable:!1}),u}(r.Component);WF.defaultProps={_addChangeListeners:bv.addChangeListeners,_navigator:"undefined"!=typeof navigator?navigator:null,mozAddonManager:t.Z.get("server")?{}:navigator.mozAddonManager,userAgent:null};const VF=(0,Mo.qC)(No,(0,g.connect)((function(e){return{clientApp:e.api.clientApp,lang:e.api.lang,userAgent:e.api.userAgent}}),(function(e){return{handleGlobalEvent:function(t){e(vv(t))},setClientApp:function(t){e(wt(t))},setUserAgent:function(t){e(function(e){return{type:mt,payload:{userAgent:e}}}(t))}}})),Eu())(WF);var YF=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},ZF="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},$F=function(e){return"@@redux-saga/"+e},KF=$F("TASK"),QF=$F("HELPER"),XF=$F("MATCH"),JF=$F("CANCEL_PROMISE"),eU=$F("SAGA_ACTION"),tU=$F("SELF_CANCELLATION"),nU=function(e){return function(){return e}},rU=nU(!0),oU=function(){},iU=function(e){return e};function aU(e,t,n){if(!t(e))throw bU("error","uncaught at check",n),new Error(n)}var uU=Object.prototype.hasOwnProperty;function cU(e,t){return sU.notUndef(e)&&uU.call(e,t)}var sU={undef:function(e){return null==e},notUndef:function(e){return null!=e},func:function(e){return"function"==typeof e},number:function(e){return"number"==typeof e},string:function(e){return"string"==typeof e},array:Array.isArray,object:function(e){return e&&!sU.array(e)&&"object"===(void 0===e?"undefined":ZF(e))},promise:function(e){return e&&sU.func(e.then)},iterator:function(e){return e&&sU.func(e.next)&&sU.func(e.throw)},iterable:function(e){return e&&sU.func(Symbol)?sU.func(e[Symbol.iterator]):sU.array(e)},task:function(e){return e&&e[KF]},observable:function(e){return e&&sU.func(e.subscribe)},buffer:function(e){return e&&sU.func(e.isEmpty)&&sU.func(e.take)&&sU.func(e.put)},pattern:function(e){return e&&(sU.string(e)||"symbol"===(void 0===e?"undefined":ZF(e))||sU.func(e)||sU.array(e))},channel:function(e){return e&&sU.func(e.take)&&sU.func(e.close)},helper:function(e){return e&&e[QF]},stringableFunc:function(e){return sU.func(e)&&cU(e,"toString")}},lU=function(e,t){for(var n in t)cU(t,n)&&(e[n]=t[n])};function fU(e,t){var n=e.indexOf(t);n>=0&&e.splice(n,1)}var pU=function(e){var t=Array(e.length);for(var n in e)cU(e,n)&&(t[n]=e[n]);return t};function dU(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=YF({},e),n=new Promise((function(e,n){t.resolve=e,t.reject=n}));return t.promise=n,t}function hU(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return function(){return++e}}var yU=hU(),mU=function(e){throw e},vU=function(e){return{value:e,done:!0}};function gU(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:mU,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",r=arguments[3],o={name:n,next:e,throw:t,return:vU};return r&&(o[QF]=!0),"undefined"!=typeof Symbol&&(o[Symbol.iterator]=function(){return o}),o}function bU(e,t){}function wU(e,t){return function(){return e.apply(void 0,arguments)}}var OU=function(e,t){return e+" has been deprecated in favor of "+t+", please update your code"},EU=function(e){return new Error("\n redux-saga: Error checking hooks detected an inconsistent state. This is likely a bug\n in redux-saga code and not yours. Thanks for reporting this in the project's github repo.\n Error: "+e+"\n")},_U=function(e,t){return(e?e+".":"")+"setContext(props): argument "+t+" is not a plain object"},xU=function(e){return function(t){return e(Object.defineProperty(t,eU,{value:!0}))}},SU=$F("IO"),jU="TAKE",PU="PUT",kU="RACE",IU="CALL",TU="CPS",RU="FORK",CU="JOIN",AU="CANCEL",NU="SELECT",LU="ACTION_CHANNEL",DU="CANCELLED",MU="FLUSH",FU="GET_CONTEXT",UU="SET_CONTEXT",BU="\n(HINT: if you are getting this errors in tests, consider using createMockTask from redux-saga/utils)",HU=function(e,t){var n;return(n={})[SU]=!0,n[e]=t,n};function qU(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"*";if(arguments.length&&aU(arguments[0],sU.notUndef,"take(patternOrChannel): patternOrChannel is undefined"),sU.pattern(e))return HU(jU,{pattern:e});if(sU.channel(e))return HU(jU,{channel:e});throw new Error("take(patternOrChannel): argument "+String(e)+" is not valid channel or a valid pattern")}qU.maybe=function(){var e=qU.apply(void 0,arguments);return e.TAKE.maybe=!0,e};qU.maybe;function zU(e,t){return arguments.length>1?(aU(e,sU.notUndef,"put(channel, action): argument channel is undefined"),aU(e,sU.channel,"put(channel, action): argument "+e+" is not a valid channel"),aU(t,sU.notUndef,"put(channel, action): argument action is undefined")):(aU(e,sU.notUndef,"put(action): argument action is undefined"),t=e,e=null),HU(PU,{channel:e,action:t})}function GU(e){return HU("ALL",e)}function WU(e){return HU(kU,e)}function VU(e,t,n){aU(t,sU.notUndef,e+": argument fn is undefined");var r=null;if(sU.array(t)){var o=t;r=o[0],t=o[1]}else if(t.fn){var i=t;r=i.context,t=i.fn}return r&&sU.string(t)&&sU.func(r[t])&&(t=r[t]),aU(t,sU.func,e+": argument "+t+" is not a function"),{context:r,fn:t,args:n}}function YU(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];return HU(IU,VU("call",e,n))}function ZU(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];return HU(RU,VU("fork",e,n))}function $U(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];if(t.length>1)return GU(t.map((function(e){return $U(e)})));var r=t[0];return 1===t.length&&(aU(r,sU.notUndef,"cancel(task): argument task is undefined"),aU(r,sU.task,"cancel(task): argument "+r+" is not a valid Task object "+BU)),HU(AU,r||tU)}function KU(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];return 0===arguments.length?e=iU:(aU(e,sU.notUndef,"select(selector,[...]): argument selector is undefined"),aU(e,sU.func,"select(selector,[...]): argument "+e+" is not a function")),HU(NU,{selector:e,args:n})}zU.resolve=function(){var e=zU.apply(void 0,arguments);return e.PUT.resolve=!0,e},zU.sync=wU(zU.resolve);var QU=function(e){return function(t){return t&&t[SU]&&t[e]}},XU={take:QU(jU),put:QU(PU),all:QU("ALL"),race:QU(kU),call:QU(IU),cps:QU(TU),fork:QU(RU),join:QU(CU),cancel:QU(AU),select:QU(NU),actionChannel:QU(LU),cancelled:QU(DU),flush:QU(MU),getContext:QU(FU),setContext:QU(UU)},JU={done:!0,value:void 0},eB={};function tB(e){return sU.channel(e)?"channel":Array.isArray(e)?String(e.map((function(e){return String(e)}))):String(e)}function nB(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"iterator",r=void 0,o=t;function i(t,n){if(o===eB)return JU;if(n)throw o=eB,n;r&&r(t);var i=e[o](),a=i[0],u=i[1],c=i[2];return r=c,(o=a)===eB?JU:u}return gU(i,(function(e){return i(null,e)}),n,!0)}var rB="Channel's Buffer overflow!",oB={isEmpty:rU,put:oU,take:oU};function iB(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10,t=arguments[1],n=new Array(e),r=0,o=0,i=0,a=function(t){n[o]=t,o=(o+1)%e,r++},u=function(){if(0!=r){var t=n[i];return n[i]=null,r--,i=(i+1)%e,t}},c=function(){for(var e=[];r;)e.push(u());return e};return{isEmpty:function(){return 0==r},put:function(u){if(r<e)a(u);else{var s=void 0;switch(t){case 1:throw new Error(rB);case 3:n[o]=u,i=o=(o+1)%e;break;case 4:s=2*e,n=c(),r=n.length,o=n.length,i=0,n.length=s,e=s,a(u)}}},take:u,flush:c}}var aB=function(){return oB},uB=function(e){return iB(e,1)},cB=[],sB=0;function lB(e){try{pB(),e()}finally{dB()}}function fB(e){cB.push(e),sB||(pB(),hB())}function pB(){sB++}function dB(){sB--}function hB(){dB();for(var e=void 0;!sB&&void 0!==(e=cB.shift());)lB(e)}var yB=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},mB="@@redux-saga/CHANNEL_END",vB={type:mB},gB=function(e){return e&&e.type===mB};function bB(){var e=[];return{subscribe:function(t){return e.push(t),function(){return fU(e,t)}},emit:function(t){for(var n=e.slice(),r=0,o=n.length;r<o;r++)n[r](t)}}}var wB="invalid buffer passed to channel factory function",OB="Saga was provided with an undefined action";function EB(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:uB(),t=!1,n=[];function r(){if(t&&n.length)throw EU("Cannot have a closed channel with pending takers");if(n.length&&!e.isEmpty())throw EU("Cannot have pending takers with non empty buffer")}function o(o){if(r(),aU(o,sU.notUndef,OB),!t){if(!n.length)return e.put(o);for(var i=0;i<n.length;i++){var a=n[i];if(!a[XF]||a[XF](o))return n.splice(i,1),a(o)}}}function i(o){r(),aU(o,sU.func,"channel.take's callback must be a function"),t&&e.isEmpty()?o(vB):e.isEmpty()?(n.push(o),o.cancel=function(){return fU(n,o)}):o(e.take())}function a(n){r(),aU(n,sU.func,"channel.flush' callback must be a function"),t&&e.isEmpty()?n(vB):n(e.flush())}function u(){if(r(),!t&&(t=!0,n.length)){var e=n;n=[];for(var o=0,i=e.length;o<i;o++)e[o](vB)}}return aU(e,sU.buffer,wB),{take:i,put:o,flush:a,close:u,get __takers__(){return n},get __closed__(){return t}}}function _B(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:aB(),n=arguments[2];arguments.length>2&&aU(n,sU.func,"Invalid match function passed to eventChannel");var r=EB(t),o=function(){r.__closed__||(i&&i(),r.close())},i=e((function(e){gB(e)?o():n&&!n(e)||r.put(e)}));if(r.__closed__&&i(),!sU.func(i))throw new Error("in eventChannel: subscribe should return a function to unsubscribe");return{take:r.take,flush:r.flush,close:o}}function xB(e){var t=_B((function(t){return e((function(e){e[eU]?t(e):fB((function(){return t(e)}))}))}));return yB({},t,{take:function(e,n){arguments.length>1&&(aU(n,sU.func,"channel.take's matcher argument must be a function"),e[XF]=n),t.take(e)}})}function SB(e,t){for(var n=arguments.length,r=Array(n>2?n-2:0),o=2;o<n;o++)r[o-2]=arguments[o];var i={done:!1,value:qU(e)},a=function(e){return{done:!1,value:ZU.apply(void 0,[t].concat(r,[e]))}},u=void 0,c=function(e){return u=e};return nB({q1:function(){return["q2",i,c]},q2:function(){return u===vB?[eB]:["q1",a(u)]}},"q1","takeEvery("+tB(e)+", "+t.name+")")}function jB(e,t){for(var n=arguments.length,r=Array(n>2?n-2:0),o=2;o<n;o++)r[o-2]=arguments[o];var i={done:!1,value:qU(e)},a=function(e){return{done:!1,value:ZU.apply(void 0,[t].concat(r,[e]))}},u=function(e){return{done:!1,value:$U(e)}},c=void 0,s=void 0,l=function(e){return c=e},f=function(e){return s=e};return nB({q1:function(){return["q2",i,f]},q2:function(){return s===vB?[eB]:c?["q3",u(c)]:["q1",a(s),l]},q3:function(){return["q1",a(s),l]}},"q1","takeLatest("+tB(e)+", "+t.name+")")}var PB;function kB(e,t){for(var n=arguments.length,r=Array(n>2?n-2:0),o=2;o<n;o++)r[o-2]=arguments[o];return ZU.apply(void 0,[SB,e,t].concat(r))}function IB(e,t){for(var n=arguments.length,r=Array(n>2?n-2:0),o=2;o<n;o++)r[o-2]=arguments[o];return ZU.apply(void 0,[jB,e,t].concat(r))}function TB(t){var n,r,o=t._fixFiltersForClientApp,i=void 0===o?At:o,a=t.api,u=t.auth,c=void 0!==u&&u,s=t.filters,l=It({filters:i({api:a,filters:void 0===s?{}:s}),userAgentInfo:a.userAgentInfo});return l.sort&&l.sort===D.wn&&(l.promoted&&!l.q||(delete l.sort,L.Z.warn((0,e.f9)(PB||(n=['search api filter "sort=random" has been removed before\n calling the api to avoid an incompatibility error.'],r||(r=n.slice(0)),PB=Object.freeze(Object.defineProperties(n,{raw:{value:Object.freeze(r)}}))))))),$t({endpoint:"addons/search",params:Tt(l),apiState:a,auth:c})}function RB(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.log,r=void 0===n?L.Z:n;return new ys({id:e,dispatch:function(){return r.error("ErrorHandler cannot dispatch from a saga")}})}function CB(e){return e}function AB(e){return(AB="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function NB(){NB=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==AB(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}var LB=NB().mark(MB),DB=NB().mark(FB);function MB(e){var t,n,r,o,i,a,u,c,s,l,f,p,d,h;return NB().wrap((function(y){for(;;)switch(y.prev=y.next){case 0:return t=e.payload,n=t.addonType,r=t.authorIds,o=t.errorHandlerId,i=t.forAddonSlug,a=t.page,u=t.pageSize,c=t.sort,s=RB(o),y.next=5,zU(s.createClearingAction());case 5:return y.prev=5,y.next=8,KU(CB);case 8:return l=y.sent,f={api:l.api,filters:{addonType:n,author:r.join(","),exclude_addons:i,page:a||"1",page_size:u,sort:c||D.Mj}},y.next=12,YU(TB,f);case 12:return p=y.sent,d=p.count,h=p.results,y.next=16,zU(yl({addonType:n,addons:h,authorIds:r,count:d,forAddonSlug:i,pageSize:u}));case 16:y.next=23;break;case 18:return y.prev=18,y.t0=y.catch(5),L.Z.warn("Search for addons by authors results failed to load: ".concat(y.t0)),y.next=23,zU(s.createErrorAction(y.t0));case 23:case"end":return y.stop()}}),LB,null,[[5,18]])}function FB(){return NB().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,kB(dl,MB);case 2:case"end":return e.stop()}}),DB)}var UB=function(e){var t=e.apiState,n=e.guid;return $t({apiState:t,endpoint:"blocklist/block/".concat(n,"/")})};function BB(e){return(BB="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function HB(){HB=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==BB(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}var qB=HB().mark(GB),zB=HB().mark(WB);function GB(e){var t,n,r,o,i,a;return HB().wrap((function(u){for(;;)switch(u.prev=u.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.guid,o=RB(n),u.next=4,zU(o.createClearingAction());case 4:return u.prev=4,u.next=7,KU(CB);case 7:return i=u.sent,u.next=10,YU(UB,{apiState:i.api,guid:r});case 10:return a=u.sent,u.next=13,zU(qC({block:a}));case 13:u.next=21;break;case 15:return u.prev=15,u.t0=u.catch(4),u.next=19,zU(o.createErrorAction(u.t0));case 19:return u.next=21,zU(HC({guid:r}));case 21:case"end":return u.stop()}}),qB,null,[[4,15]])}function WB(){return HB().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,IB(MC,GB);case 2:case"end":return e.stop()}}),zB)}function VB(e){return(VB="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function YB(){YB=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==VB(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}function ZB(e,t,n,r,o,i,a){try{var u=e[i](a),c=u.value}catch(e){return void n(e)}u.done?t(c):Promise.resolve(c).then(r,o)}function $B(e){return function(){var t=this,n=arguments;return new Promise((function(r,o){var i=e.apply(t,n);function a(e){ZB(i,r,o,a,u,"next",e)}function u(e){ZB(i,r,o,a,u,"throw",e)}a(void 0)}))}}var KB=function(e){var t=e.api,n=e.slug,r=e.userId;return ce()(n,"slug is required"),ce()(r,"userId is required"),$t({auth:!0,endpoint:"accounts/account/".concat(r,"/collections/").concat(n),apiState:t})},QB=function(e){var t=e.api,n=e.filters,r=e.nextURL,o=e.slug,i=e.userId;ce()(o,"slug is required"),ce()(i,"userId is required");var a={auth:!0,endpoint:r||"accounts/account/".concat(i,"/collections/").concat(o,"/addons"),params:void 0,apiState:t};return n&&(a.params={page:n.page,sort:n.collectionSort}),$t(a)},XB=function(e){var t=e.api,n=e.nextURL,r=e.userId;return ce()(r,"userId is required"),$t({auth:!0,endpoint:n||"accounts/account/".concat(r,"/collections"),apiState:t})},JB=function(){var e=$B(YB().mark((function e(t){var n,r,o,i,a,u,c,s;return YB().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.api,r=t.userId,o=t._allPages,i=void 0===o?Jt:o,a=t._listCollections,u=void 0===a?XB:a,e.next=3,i((function(e){return u({api:n,nextURL:e,userId:r})}));case 3:return c=e.sent,s=c.results,e.abrupt("return",s);case 6:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),eH=function(e,t){var n=t.api,r=t.collectionSlug,o=void 0===r?"":r,i=t.defaultLocale,a=t.description,u=t.name,c=t.slug,s=t.userId,l=t._validateLocalizedString,f=void 0===l?en:l,p="create"===e;return ce()(n,"api is required"),ce()(s,"userId is required"),p?ce()(c,"The slug parameter is required when creating"):ce()(o,"The collectionSlug parameter is required when updating"),a&&f(a),u&&f(u),$t({auth:!0,body:{default_locale:i,description:a,name:u,slug:c},endpoint:"accounts/account/".concat(s,"/collections/").concat(p?"":o),method:p?"POST":"PATCH",apiState:n})},tH=function(e){var t=e.api,n=e.collectionSlug,r=e.defaultLocale,o=e.description,i=e.name,a=e.slug,u=e.userId,c=e._modifyCollection,s=void 0===c?eH:c,l=e._validateLocalizedString;return s("update",{api:t,collectionSlug:n,defaultLocale:r,description:o,name:i,slug:a,userId:u,_validateLocalizedString:void 0===l?en:l})},nH=function(e){var t=e.api,n=e.defaultLocale,r=e.description,o=e.name,i=e.slug,a=e.userId,u=e._modifyCollection,c=void 0===u?eH:u,s=e._validateLocalizedString;return c("create",{api:t,defaultLocale:n,description:r,name:o,slug:i,userId:a,_validateLocalizedString:void 0===s?en:s})},rH=function(e){var t=e.action,n=e.addonId,r=e.api,o=e.slug,i=e.userId;ce()(t,"The action parameter is required"),ce()(n,"The addonId parameter is required"),ce()(r,"The api parameter is required"),ce()(o,"The slug parameter is required"),ce()(i,"The userId parameter is required");var a="POST",u={addon:n,notes:e.notes},c="accounts/account/".concat(i,"/collections/").concat(o,"/addons");return"update"===t&&(a="PATCH",delete u.addon,c="".concat(c,"/").concat(n)),$t({auth:!0,body:u,endpoint:c,method:a,apiState:r})},oH=function(e){var t=e.addonId,n=e.api,r=e.slug,o=e.notes,i=e.userId,a=e._modifyCollectionAddon;return(void 0===a?rH:a)({action:"create",addonId:t,api:n,notes:o,slug:r,userId:i})},iH=function(e){var t=e.addonId,n=e.api,r=e.slug,o=e.notes,i=e.userId,a=e._modifyCollectionAddon;return(void 0===a?rH:a)({action:"update",addonId:t,api:n,notes:o,slug:r,userId:i})},aH=function(e){var t=e.addonId,n=e.api,r=e.slug,o=e.userId;return ce()(t,"The addonId parameter is required"),ce()(n,"The api parameter is required"),ce()(r,"The slug parameter is required"),ce()(o,"The userId parameter is required"),$t({auth:!0,endpoint:"accounts/account/".concat(o,"/collections/").concat(r,"/addons/").concat(t),method:"DELETE",apiState:n})},uH=function(e){var t=e.api,n=e.slug,r=e.userId;return ce()(t,"The api parameter is required"),ce()(n,"The slug parameter is required"),ce()(r,"The userId parameter is required"),$t({auth:!0,endpoint:"accounts/account/".concat(r,"/collections/").concat(n),method:"DELETE",apiState:t})};function cH(e){return(cH="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function sH(){sH=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==cH(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}var lH=sH().mark(EH),fH=sH().mark(_H),pH=sH().mark(xH),dH=sH().mark(SH),hH=sH().mark(jH),yH=sH().mark(PH),mH=sH().mark(kH),vH=sH().mark(IH),gH=sH().mark(TH);function bH(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function wH(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?bH(Object(n),!0).forEach((function(t){OH(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):bH(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function OH(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function EH(e){var t,n,r,o,i,a,u,c,s,l,f,p,d;return sH().wrap((function(h){for(;;)switch(h.prev=h.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.filters,o=t.slug,i=t.userId,a=RB(n),h.next=4,zU(a.createClearingAction());case 4:return h.prev=4,h.next=7,KU(CB);case 7:return u=h.sent,c={api:u.api,slug:o,userId:String(i)},s=wH({},c),l=wH(wH({},c),{},{filters:r}),h.next=13,GU({detail:YU(KB,s),addonsResponse:YU(QB,l)});case 13:return f=h.sent,p=f.detail,d=f.addonsResponse,h.next=18,zU(Ka({addonsResponse:d,detail:p}));case 18:h.next=27;break;case 20:return h.prev=20,h.t0=h.catch(4),L.Z.warn("Collection failed to load: ".concat(h.t0)),h.next=25,zU(a.createErrorAction(h.t0));case 25:return h.next=27,zU(eu());case 27:case"end":return h.stop()}}),lH,null,[[4,20]])}function _H(e){var t,n,r,o,i,a,u,c,s;return sH().wrap((function(l){for(;;)switch(l.prev=l.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.filters,o=t.slug,i=t.userId,a=RB(n),l.next=4,zU(a.createClearingAction());case 4:return l.prev=4,l.next=7,KU(CB);case 7:return u=l.sent,c={api:u.api,filters:r,slug:o,userId:String(i)},l.next=11,YU(QB,c);case 11:return s=l.sent,l.next=14,zU(Qa({addonsResponse:s}));case 14:l.next=23;break;case 16:return l.prev=16,l.t0=l.catch(4),L.Z.warn("Collection page failed to load: ".concat(l.t0)),l.next=21,zU(a.createErrorAction(l.t0));case 21:return l.next=23,zU(eu());case 23:case"end":return l.stop()}}),fH,null,[[4,16]])}function xH(e){var t,n,r,o,i,a,u;return sH().wrap((function(c){for(;;)switch(c.prev=c.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.userId,o=RB(n),c.next=4,zU(o.createClearingAction());case 4:return c.prev=4,c.next=7,KU(CB);case 7:return i=c.sent,a={api:i.api,userId:String(r)},c.next=11,YU(JB,a);case 11:return u=c.sent,c.next=14,zU(Xa({userId:r,collections:u}));case 14:c.next=23;break;case 16:return c.prev=16,c.t0=c.catch(4),L.Z.warn("Failed to fetch user collections: ".concat(c.t0)),c.next=21,zU(o.createErrorAction(c.t0));case 21:return c.next=23,zU(Ya({userId:r}));case 23:case"end":return c.stop()}}),pH,null,[[4,16]])}function SH(e){var t,n,r,o,i,a,u,c,s,l,f,p;return sH().wrap((function(d){for(;;)switch(d.prev=d.next){case 0:return t=e.payload,n=t.addonId,r=t.collectionId,o=t.editing,i=t.errorHandlerId,a=t.filters,u=t.notes,c=t.slug,s=t.userId,l=RB(i),d.next=4,zU(l.createClearingAction());case 4:return d.prev=4,d.next=7,KU(CB);case 7:return f=d.sent,p={addonId:n,api:f.api,slug:c,notes:u?OH({},f.api.lang,u):void 0,userId:String(s)},d.next=11,YU(oH,p);case 11:if(!o){d.next=15;break}return ce()(a,"A filters parameter is required when editing"),d.next=15,zU($a({errorHandlerId:l.id,filters:a,slug:c,userId:s}));case 15:return d.next=17,zU(Ja({addonId:n,userId:s,collectionId:r}));case 17:d.next=26;break;case 19:return d.prev=19,d.t0=d.catch(4),L.Z.warn("Failed to add add-on to collection: ".concat(d.t0)),d.next=24,zU(l.createErrorAction(d.t0));case 24:return d.next=26,zU(Za({addonId:n,userId:s}));case 26:case"end":return d.stop()}}),dH,null,[[4,19]])}function jH(e){var t,n,r,o,a,u,c,s,l,f,p,d,h,y,m,v,g,b,w,O,E,_,x,S;return sH().wrap((function(j){for(;;)switch(j.prev=j.next){case 0:return t=e.type,n=e.payload,r=t===La,o=n.defaultLocale,a=n.description,u=n.errorHandlerId,c=n.name,s=n.slug,l=n.userId,j.next=5,zU({type:Da,payload:null});case 5:return f=RB(u),j.next=8,zU(f.createClearingAction());case 8:return e.type===Aa&&(p=e.payload.collectionSlug,d=e.payload.filters),e.type===La&&(h=e.payload.includeAddonId),j.prev=10,j.next=13,KU(CB);case 13:if(y=j.sent,v={api:y.api,defaultLocale:o,description:a,userId:String(l)},!r){j.next=28;break}return ce()(c,"name cannot be empty when creating"),ce()(s,"slug cannot be empty when creating"),g=wH({name:c,slug:s},v),j.next=21,YU(nH,g);case 21:if(m=j.sent,!h){j.next=26;break}return b={addonId:h,api:y.api,slug:s,userId:String(l)},j.next=26,YU(oH,b);case 26:j.next=33;break;case 28:return ce()(p,"collectionSlug cannot be empty when updating"),w=wH({collectionSlug:p,name:c,slug:s},v),j.next=32,YU(tH,w);case 32:m=j.sent;case 33:if(O=y.api,E=O.lang,_=O.clientApp,x=m&&m.slug||s||p,ce()(x,"Both slug and collectionSlug cannot be empty"),S="/".concat(E,"/").concat(_,"/collections/").concat(l,"/").concat(x,"/edit/"),!r){j.next=46;break}if(ce()(m,"response is required when creating"),h){j.next=42;break}return j.next=42,zU(Ka({detail:m}));case 42:return j.next=44,zU((0,i.VF)(S));case 44:j.next=55;break;case 46:return ce()(d,"filters are required when updating"),j.next=49,zU((0,i.VF)({pathname:S,query:fu(d)}));case 49:if(x!==p){j.next=53;break}return j.next=53,zU(nu(x));case 53:return j.next=55,zU(ou());case 55:j.next=62;break;case 57:return j.prev=57,j.t0=j.catch(10),L.Z.warn("Failed to ".concat(t,": ").concat(j.t0)),j.next=62,zU(f.createErrorAction(j.t0));case 62:return j.prev=62,j.next=65,zU({type:Ma,payload:null});case 65:return j.finish(62);case 66:case"end":return j.stop()}}),hH,null,[[10,57,62,66]])}function PH(e){var t,n,r,o,i,a,u,c,s;return sH().wrap((function(l){for(;;)switch(l.prev=l.next){case 0:return t=e.payload,n=t.addonId,r=t.errorHandlerId,o=t.filters,i=t.slug,a=t.userId,u=RB(r),l.next=4,zU(u.createClearingAction());case 4:return l.prev=4,l.next=7,KU(CB);case 7:return c=l.sent,s={addonId:n,api:c.api,slug:i,userId:String(a)},l.next=11,YU(aH,s);case 11:return l.next=13,zU({type:Ua});case 13:return l.next=15,zU($a({errorHandlerId:u.id,filters:o,slug:i,userId:a}));case 15:l.next=22;break;case 17:return l.prev=17,l.t0=l.catch(4),L.Z.warn("Failed to remove add-on from collection: ".concat(l.t0)),l.next=22,zU(u.createErrorAction(l.t0));case 22:case"end":return l.stop()}}),yH,null,[[4,17]])}function kH(e){var t,n,r,o,a,u,c,s,l,f;return sH().wrap((function(p){for(;;)switch(p.prev=p.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.slug,o=t.userId,a=RB(n),p.next=4,zU(a.createClearingAction());case 4:return p.prev=4,p.next=7,KU(CB);case 7:return u=p.sent,c=u.api,s=c.lang,l=c.clientApp,f={api:u.api,slug:r,userId:String(o)},p.next=12,YU(uH,f);case 12:return p.next=14,zU((0,i.VF)("/".concat(s,"/").concat(l,"/collections/")));case 14:return p.next=16,zU(nu(r));case 16:p.next=23;break;case 18:return p.prev=18,p.t0=p.catch(4),L.Z.warn("Failed to delete collection: ".concat(p.t0)),p.next=23,zU(a.createErrorAction(p.t0));case 23:case"end":return p.stop()}}),mH,null,[[4,18]])}function IH(e){var t,n,r,o,i,a,u,c,s,l;return sH().wrap((function(f){for(;;)switch(f.prev=f.next){case 0:return t=e.payload,n=t.addonId,r=t.errorHandlerId,o=t.filters,i=t.notes,a=t.slug,u=t.userId,c=RB(r),f.next=4,zU(c.createClearingAction());case 4:return f.prev=4,f.next=7,KU(CB);case 7:return s=f.sent,l={addonId:n,api:s.api,notes:i,slug:a,userId:String(u)},f.next=11,YU(iH,l);case 11:return f.next=13,zU($a({errorHandlerId:c.id,filters:o,slug:a,userId:u}));case 13:f.next=20;break;case 15:return f.prev=15,f.t0=f.catch(4),L.Z.warn("Failed to update add-on in collection: ".concat(f.t0)),f.next=20,zU(c.createErrorAction(f.t0));case 20:case"end":return f.stop()}}),vH,null,[[4,15]])}function TH(){return sH().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,IB(Oa,SH);case 2:return e.next=4,IB([La,Aa],jH);case 4:return e.next=6,IB(Ba,kH);case 6:return e.next=8,IB(Ea,EH);case 8:return e.next=10,IB(Sa,_H);case 10:return e.next=12,IB(_a,xH);case 12:return e.next=14,IB(Fa,PH);case 14:return e.next=16,IB([qa,Ha],IH);case 16:case"end":return e.stop()}}),gH)}var RH=function(e){return $t({apiState:e.api,endpoint:"shelves"})};function CH(e){return(CH="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function AH(){AH=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==CH(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}var NH,LH=AH().mark(MH),DH=AH().mark(FH);function MH(e){var t,n,r,o,i,a,u,c;return AH().wrap((function(s){for(;;)switch(s.prev=s.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.isDesktopSite,o=RB(n),s.next=4,zU(o.createClearingAction());case 4:return s.next=6,KU(CB);case 6:return i=s.sent,a={api:i.api,filters:{addonType:D.Gz,page_size:String(D.Fb),promoted:D.g$,sort:D.wn}},s.prev=8,u=null,s.prev=10,s.next=13,YU(RH,{api:i.api});case 13:u=s.sent,s.next=20;break;case 16:throw s.prev=16,s.t0=s.catch(10),L.Z.warn("Home shelves failed to load: ".concat(s.t0)),s.t0;case 20:if(!r){s.next=25;break}return s.next=23,zU(jl({homeShelves:u,shelves:{}}));case 23:s.next=37;break;case 25:return s.prev=25,s.next=28,YU(TB,a);case 28:c=s.sent,s.next=35;break;case 31:throw s.prev=31,s.t1=s.catch(25),L.Z.warn("Mobile homepage add-ons failed to load: ".concat(s.t1)),s.t1;case 35:return s.next=37,zU(jl({homeShelves:u,shelves:{recommendedExtensions:c}}));case 37:s.next=45;break;case 39:return s.prev=39,s.t2=s.catch(8),s.next=43,zU(o.createErrorAction(s.t2));case 43:return s.next=45,zU({type:El});case 45:case"end":return s.stop()}}),LH,null,[[8,39],[10,16],[25,31]])}function FH(){return AH().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,IB(_l,MH);case 2:case"end":return e.stop()}}),DH)}function UH(e){return(UH="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function BH(){BH=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==UH(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}var HH=BH().mark(ZH),qH=BH().mark($H);function zH(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,o,i=[],a=!0,u=!1;try{for(n=n.call(e);!(a=(r=n.next()).done)&&(i.push(r.value),!t||i.length!==t);a=!0);}catch(e){u=!0,o=e}finally{try{a||null==n.return||n.return()}finally{if(u)throw o}}return i}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return GH(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return GH(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function GH(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function WH(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function VH(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?WH(Object(n),!0).forEach((function(t){YH(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):WH(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function YH(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ZH(t){var n,r,o,i,a,u,c,s,l,f,p,d,h,y,m,v;return BH().wrap((function(g){for(;;)switch(g.prev=g.next){case 0:return n=t.payload,r=n.addonType,o=n.category,i=n.errorHandlerId,a=RB(i),g.prev=2,g.next=5,KU(CB);case 5:return u=g.sent,c=u.api,s={addonType:r,page_size:D.Yd===r?String(D.Pn):String(D.Db),promoted:r===D.Gz?D.g$:void 0},o&&(s=VH(VH({},s),{},{category:o})),l={api:c,filters:VH(VH({},s),{},{promoted:D.g$,sort:D.wn,page:"1"})},f={api:c,filters:VH(VH({},s),{},{sort:D.kc,page:"1"})},p={api:c,filters:VH(VH({},s),{},{sort:D.Mj,page:"1"})},g.next=14,GU([YU(TB,l),YU(TB,f),YU(TB,p)]);case 14:return d=g.sent,h=zH(d,3),y=h[0],m=h[1],v=h[2],g.next=21,zU(Fl({addonType:r,recommended:y,highlyRated:m,trending:v}));case 21:g.next=28;break;case 23:return g.prev=23,g.t0=g.catch(2),L.Z.warn((0,e.f9)(NH||(b=["Failed to fetch landing page add-ons for\n addonType ",": ",""],(w=void 0)||(w=b.slice(0)),NH=Object.freeze(Object.defineProperties(b,{raw:{value:Object.freeze(w)}}))),r,g.t0)),g.next=28,zU(a.createErrorAction(g.t0));case 28:case"end":return g.stop()}var b,w}),HH,null,[[2,23]])}function $H(){return BH().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,IB(Ll,ZH);case 2:case"end":return e.stop()}}),qH)}var KH=function(e){var t=e.api,n=e.guid,r=e.recommended;return ce()(n,"A guid is required."),ce()("boolean"==typeof r,"recommended is required"),$t({apiState:t,auth:!0,endpoint:"addons/recommendations/",params:{app:t.clientApp,guid:n,recommended:r}})};function QH(e){return(QH="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function XH(){XH=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==QH(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}var JH=XH().mark(tq),eq=XH().mark(nq);function tq(e){var t,n,r,o,i,a,u,c,s,l,f;return XH().wrap((function(p){for(;;)switch(p.prev=p.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.guid,o=t.recommended,i=RB(n),p.next=4,zU(i.createClearingAction());case 4:return p.prev=4,ce()("boolean"==typeof o,"recommended is required"),p.next=8,KU(CB);case 8:return a=p.sent,u={api:a.api,guid:r,recommended:o},p.next=12,YU(KH,u);case 12:return c=p.sent,s=c.fallback_reason,l=c.outcome,f=c.results,p.next=16,zU(Yl({addons:f,fallbackReason:s,guid:r,outcome:l}));case 16:p.next=25;break;case 18:return p.prev=18,p.t0=p.catch(4),L.Z.warn("Failed to recommendations: ".concat(p.t0)),p.next=23,zU(i.createErrorAction(p.t0));case 23:return p.next=25,zU(Vl({guid:r}));case 25:case"end":return p.stop()}}),JH,null,[[4,18]])}function nq(){return XH().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,IB(zl,tq);case 2:case"end":return e.stop()}}),eq)}var rq,oq=a(56325);function iq(e){return(iq="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var aq=["addonId","score","apiState","versionId","body","reviewId"],uq=["apiState","user","addon"];function cq(){cq=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==iq(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}function sq(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function lq(e,t,n,r,o,i,a){try{var u=e[i](a),c=u.value}catch(e){return void n(e)}u.done?t(c):Promise.resolve(c).then(r,o)}function fq(e){return function(){var t=this,n=arguments;return new Promise((function(r,o){var i=e.apply(t,n);function a(e){lq(i,r,o,a,u,"next",e)}function u(e){lq(i,r,o,a,u,"throw",e)}a(void 0)}))}}function pq(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function dq(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?pq(Object(n),!0).forEach((function(t){hq(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):pq(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function hq(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function yq(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function mq(e){var t=e.addonId,n=e.score,r=e.apiState,o=e.versionId,i=e.body,a=e.reviewId,u=yq(e,aq);return new Promise((function(e){var c={addon:void 0,score:n,version:o,body:i},s="POST",l="ratings/rating";if(a)l="".concat(l,"/").concat(a),s="PATCH",c.version=void 0;else{if(!t)throw new Error("addonId is required when posting a new review");c.addon=t}e($t(dq({endpoint:l,body:c,method:s,auth:!0,apiState:r},u)))}))}var vq=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.apiState,n=e.body,r=e.errorHandler,o=e.originalReviewId;return new Promise((function(e){var i="ratings/rating/".concat(o,"/reply/");e($t({auth:!0,body:{body:n},endpoint:i,errorHandler:r,method:"POST",apiState:t}))}))};function gq(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.apiState,n=e.user,r=e.addon,o=yq(e,uq);return new Promise((function(e){if(!n&&!r)throw new Error("Either user or addon must be specified");e($t({auth:!0,endpoint:"ratings/rating",params:dq({user:n,addon:r},o),apiState:t}))}))}function bq(){return wq.apply(this,arguments)}function wq(){return(wq=fq(cq().mark((function t(){var n,r,o,i,a,u,c=arguments;return cq().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=c.length>0&&void 0!==c[0]?c[0]:{},r=n.apiState,o=n.user,i=n.addon,ce()(o,"The user parameter is required"),ce()(i,"The addon parameter is required"),t.next=5,gq({apiState:r,user:o,addon:i});case 5:if(a=t.sent,1!==(u=a.results).length){t.next=9;break}return t.abrupt("return",u[0]);case 9:if(0!==u.length){t.next=11;break}return t.abrupt("return",null);case 11:throw new Error((0,e.f9)(rq||(rq=sq(["Unexpectedly received multiple review objects:\n ",""])),u.map((function(e){return e.id}))));case 12:case"end":return t.stop()}}),t)})))).apply(this,arguments)}var Oq=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.apiState,n=e.errorHandler,r=e.note,o=e.reason,i=e.reviewId;return new Promise((function(e){if(!i)throw new Error("The reviewId parameter is required");if(!o)throw new Error("The reason parameter is required");if(o===D.eV&&!r)throw new Error("When reason is ".concat(o,", the note parameter is required"));e($t({auth:!0,body:{flag:o,note:r},endpoint:"ratings/rating/".concat(i,"/flag"),errorHandler:n,method:"POST",apiState:t}))}))},Eq=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.apiState,n=e.errorHandler,r=e.reviewId;return ce()(r,"reviewId is required"),new Promise((function(e){e($t({auth:!0,endpoint:"ratings/rating/".concat(r,"/"),errorHandler:n,method:"DELETE",apiState:t}))}))},_q=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.apiState,n=e.reviewId;return ce()(n,"reviewId is required"),new Promise((function(e){e($t({auth:!0,endpoint:"ratings/rating/".concat(n,"/"),method:"GET",apiState:t}))}))};function xq(e){return(xq="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Sq(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function jq(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Sq(Object(n),!0).forEach((function(t){Pq(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Sq(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Pq(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function kq(){kq=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==xq(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}var Iq=kq().mark(Uq),Tq=kq().mark(Bq),Rq=kq().mark(Hq),Cq=kq().mark(qq),Aq=kq().mark(zq),Nq=kq().mark(Gq),Lq=kq().mark(Wq),Dq=kq().mark(Vq),Mq=kq().mark(Yq),Fq=kq().mark(Zq);function Uq(e){var t,n,r,o,i,a,u,c,s;return kq().wrap((function(l){for(;;)switch(l.prev=l.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.addonSlug,o=t.page,i=t.score,a=RB(n),l.prev=2,l.next=5,zU(a.createClearingAction());case 5:return l.next=7,KU(CB);case 7:return u=l.sent,c={addon:r,apiState:u.api,page:o,score:i||void 0},l.next=11,YU(gq,c);case 11:return s=l.sent,l.next=14,zU(xi({addonSlug:r,page:o||"1",pageSize:s.page_size,reviewCount:s.count,reviews:s.results,score:i}));case 14:l.next=21;break;case 16:return l.prev=16,l.t0=l.catch(2),L.Z.warn("Failed to load reviews for add-on slug ".concat(r,": ").concat(l.t0)),l.next=21,zU(a.createErrorAction(l.t0));case 21:case"end":return l.stop()}}),Iq,null,[[2,16]])}function Bq(e){var t,n,r,o,i,a,u,c;return kq().wrap((function(s){for(;;)switch(s.prev=s.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.addonId,o=t.userId,i=RB(n),s.prev=2,s.next=5,zU(i.createClearingAction());case 5:return s.next=7,KU(CB);case 7:return a=s.sent,u={addon:r,apiState:a.api,show_permissions_for:o},s.next=11,YU(gq,u);case 11:return c=s.sent,ce()(void 0!==c.can_reply,"response.can_reply was unexpectedly undefined"),s.next=15,zU(wi({addonId:r,canReplyToReviews:c.can_reply,userId:o}));case 15:s.next=22;break;case 17:return s.prev=17,s.t0=s.catch(2),L.Z.warn("Failed to load review permissions for add-on ID ".concat(r,", user ID ").concat(o,": ").concat(s.t0)),s.next=22,zU(i.createErrorAction(s.t0));case 22:case"end":return s.stop()}}),Tq,null,[[2,17]])}function Hq(e){var t,n,r,o,i,a,u,c;return kq().wrap((function(s){for(;;)switch(s.prev=s.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.page,o=t.userId,i=RB(n),s.prev=2,s.next=5,KU(CB);case 5:return a=s.sent,u={apiState:a.api,page:r,user:o},s.next=9,YU(gq,u);case 9:return c=s.sent,s.next=12,zU(_i({pageSize:c.page_size,reviewCount:c.count,reviews:c.results,userId:o}));case 12:s.next=19;break;case 14:return s.prev=14,s.t0=s.catch(2),L.Z.warn("Failed to load reviews for user ID ".concat(o,": ").concat(s.t0)),s.next=19,zU(i.createErrorAction(s.t0));case 19:case"end":return s.stop()}}),Rq,null,[[2,14]])}function qq(e){var t,n,r,o,i,a,u,c;return kq().wrap((function(s){for(;;)switch(s.prev=s.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.originalReviewId,o=t.body,i=t.title,a=RB(n),s.next=4,zU(a.createClearingAction());case 4:return s.prev=4,s.next=7,KU(CB);case 7:return u=s.sent,s.next=10,YU(vq,{apiState:u.api,body:o,originalReviewId:r,title:i});case 10:return c=s.sent,s.next=13,zU(bi({originalReviewId:r,reply:c}));case 13:return s.next=15,zU(Ti({reviewId:r}));case 15:s.next=22;break;case 17:return s.prev=17,s.t0=s.catch(4),L.Z.warn("Failed to send reply to review ID ".concat(r,": ").concat(s.t0)),s.next=22,zU(a.createErrorAction(s.t0));case 22:case"end":return s.stop()}}),Cq,null,[[4,17]])}function zq(e){var t,n,r,o,i,a,u;return kq().wrap((function(c){for(;;)switch(c.prev=c.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.note,o=t.reason,i=t.reviewId,a=RB(n),c.next=4,zU(a.createClearingAction());case 4:return c.prev=4,c.next=7,KU(CB);case 7:return u=c.sent,c.next=10,YU(Oq,{apiState:u.api,note:r,reason:o,reviewId:i});case 10:return c.next=12,zU(Ci({reason:o,reviewId:i}));case 12:c.next=19;break;case 14:return c.prev=14,c.t0=c.catch(4),L.Z.warn("Failed to flag review ID ".concat(i,": ").concat(c.t0)),c.next=19,zU(a.createErrorAction(c.t0));case 19:case"end":return c.stop()}}),Aq,null,[[4,14]])}function Gq(e){var t,n,r,o,i,a,u,c,s,l,f,p,d,h,y,m,v=arguments;return kq().wrap((function(g){for(;;)switch(g.prev=g.next){case 0:return t=v.length>1&&void 0!==v[1]?v[1]:{},n=t._delay,r=void 0===n?oq.gw:n,o=e.payload,i=o.body,a=o.errorHandlerId,u=o.score,c=RB(a),s=!!u,l=!!i,g.next=7,zU(c.createClearingAction());case 7:if(!s){g.next=10;break}return g.next=10,zU(Hi(Ui));case 10:if(!l){g.next=13;break}return g.next=13,zU(Hi(Bi));case 13:return g.prev=13,g.next=16,KU(CB);case 16:return f=g.sent,p={apiState:f.api,body:i,score:u},e.type===zo?d=jq(jq({},p),{},{addonId:e.payload.addonId,versionId:e.payload.versionId}):e.type===fi&&(d=jq(jq({},p),{},{reviewId:e.payload.reviewId}),h=Cp(f.reviews,e.payload.reviewId),ce()(h,"review with ID=".concat(e.payload.reviewId," does not exist in state"))),ce()(d,"params was unexpectedly empty; action.type: ".concat(e.type)),y=d,g.next=23,YU(mq,y);case 23:return m=g.sent,g.next=26,zU(gi(m));case 26:if(!s){g.next=29;break}return g.next=29,zU(Hi(Mi));case 29:if(!l){g.next=34;break}return g.next=32,zU(Hi(Fi));case 32:return g.next=34,zU(Ii({reviewId:m.id}));case 34:if(m.is_developer_reply){g.next=39;break}return g.next=37,zU(Ai({addonId:m.addon.id,review:m,userId:m.user.id}));case 37:return g.next=39,zU(Oi({addonId:m.addon.id,oldReview:h,newReview:vi(m)}));case 39:return g.next=41,r(2e3);case 41:return g.next=43,zU(qi());case 43:g.next=52;break;case 45:return g.prev=45,g.t0=g.catch(13),L.Z.warn("Failed to create/update review with action ".concat(e.type,": ").concat(g.t0)),g.next=50,zU(c.createErrorAction(g.t0));case 50:return g.next=52,zU(Hi(Di));case 52:case"end":return g.stop()}}),Nq,null,[[13,45]])}function Wq(e){var t,n,r,o,i,a,u;return kq().wrap((function(c){for(;;)switch(c.prev=c.next){case 0:return t=e.payload,n=t.addonId,r=t.errorHandlerId,o=t.isReplyToReviewId,i=t.reviewId,a=RB(r),c.next=4,zU(a.createClearingAction());case 4:return c.prev=4,c.next=7,KU(CB);case 7:return u=c.sent,c.next=10,YU(Eq,{apiState:u.api,reviewId:i});case 10:return c.next=12,zU(Vi({addonId:n,reviewId:i}));case 12:if(!o){c.next=15;break}return c.next=15,zU(Vi({addonId:n,reviewId:o}));case 15:c.next=22;break;case 17:return c.prev=17,c.t0=c.catch(4),L.Z.warn("Failed to delete review ID ".concat(i,": ").concat(c.t0)),c.next=22,zU(a.createErrorAction(c.t0));case 22:case"end":return c.stop()}}),Lq,null,[[4,17]])}function Vq(e){var t,n,r,o,i,a,u,c,s;return kq().wrap((function(l){for(;;)switch(l.prev=l.next){case 0:return t=e.payload,n=t.addonId,r=t.errorHandlerId,o=t.userId,i=RB(r),l.next=4,zU(i.createClearingAction());case 4:return l.prev=4,l.next=7,KU(CB);case 7:return a=l.sent,u={addon:n,apiState:a.api,user:o},l.next=11,YU(bq,u);case 11:if(c=l.sent,s=function(e){return Ai({userId:o,addonId:n,review:e})},!c){l.next=20;break}return l.next=16,zU(gi(c));case 16:return l.next=18,zU(s(c));case 18:l.next=23;break;case 20:return L.Z.debug("No saved review found for userId ".concat(o,", addonId ").concat(n)),l.next=23,zU(s(null));case 23:l.next=30;break;case 25:return l.prev=25,l.t0=l.catch(4),L.Z.warn('Failed to fetchLatestUserReview for addonId "'.concat(n,'", userId "').concat(o,'": ').concat(l.t0)),l.next=30,zU(i.createErrorAction(l.t0));case 30:case"end":return l.stop()}}),Dq,null,[[4,25]])}function Yq(e){var t,n,r,o,i,a,u;return kq().wrap((function(c){for(;;)switch(c.prev=c.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.reviewId,o=RB(n),c.next=4,zU(o.createClearingAction());case 4:return c.prev=4,c.next=7,KU(CB);case 7:return i=c.sent,a={apiState:i.api,reviewId:r},c.next=11,YU(_q,a);case 11:return u=c.sent,c.next=14,zU(gi(u));case 14:c.next=21;break;case 16:return c.prev=16,c.t0=c.catch(4),L.Z.warn("Failed to get review ID ".concat(r,": ").concat(c.t0)),c.next=21,zU(o.createErrorAction(c.t0));case 21:case"end":return c.stop()}}),Mq,null,[[4,16]])}function Zq(e){return kq().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,IB($o,Vq);case 2:return t.next=4,IB(Vo,Yq);case 4:return t.next=6,IB(Yo,Bq);case 6:return t.next=8,IB(Zo,Uq);case 8:return t.next=10,IB(Ko,Hq);case 10:return t.next=12,IB(si,qq);case 12:return t.next=14,IB(li,zq);case 14:return t.next=16,IB(zo,(function(t){return Gq(t,e)}));case 16:return t.next=18,IB(fi,(function(t){return Gq(t,e)}));case 18:return t.next=20,IB(pi,Wq);case 20:case"end":return t.stop()}}),Fq)}function $q(e){var t=e.addonSlug,n=e.api;return $t({auth:!0,endpoint:"abuse/report/addon",method:"POST",body:{addon:t,message:e.message},apiState:n})}function Kq(e){var t=e.api;return $t({auth:!0,endpoint:"abuse/report/user",method:"POST",body:{message:e.message,user:e.userId.toString()},apiState:t})}function Qq(e){return(Qq="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Xq(){Xq=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==Qq(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}var Jq=Xq().mark(nz),ez=Xq().mark(rz),tz=Xq().mark(oz);function nz(e){var t,n,r,o,i,a,u,c;return Xq().wrap((function(s){for(;;)switch(s.prev=s.next){case 0:return t=e.payload,n=t.addonSlug,r=t.errorHandlerId,o=t.message,i=RB(r),s.next=4,zU(i.createClearingAction());case 4:return s.prev=4,s.next=7,KU(CB);case 7:return a=s.sent,u={addonSlug:n,api:a.api,message:o},s.next=11,YU($q,u);case 11:return c=s.sent,s.next=14,zU(wP({addon:c.addon,message:c.message,reporter:c.reporter}));case 14:s.next=21;break;case 16:return s.prev=16,s.t0=s.catch(4),L.Z.warn("Reporting add-on for abuse failed: ".concat(s.t0)),s.next=21,zU(i.createErrorAction(s.t0));case 21:case"end":return s.stop()}}),Jq,null,[[4,16]])}function rz(e){var t;return Xq().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return t=e.payload.addon,n.prev=1,n.next=4,(0,bv.reportAbuse)(t.guid);case 4:if(!n.sent){n.next=8;break}return n.next=8,zU(wP({addon:{guid:t.guid,id:t.id,slug:t.slug},message:null,reporter:null}));case 8:n.next=13;break;case 10:n.prev=10,n.t0=n.catch(1),L.Z.warn("Reporting add-on for abuse via firefox failed: ".concat(n.t0));case 13:return n.next=15,zU({type:vP});case 15:case"end":return n.stop()}}),ez,null,[[1,10]])}function oz(){return Xq().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,IB(mP,rz);case 2:return e.next=4,IB(hP,nz);case 4:case"end":return e.stop()}}),tz)}var iz=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.api,n=e.slug;return ce()(n,"slug is required"),$t({apiState:t,auth:!0,endpoint:"addons/addon/".concat(n,"/eula_policy/")})};function az(e){return(az="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function uz(){uz=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==az(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}var cz=uz().mark(fz),sz=uz().mark(pz),lz=uz().mark(dz);function fz(e){var t,n,r,o,i,a,u,c;return uz().wrap((function(s){for(;;)switch(s.prev=s.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.showGroupedRatings,o=t.slug,i=RB(n),s.next=4,zU(i.createClearingAction());case 4:return s.prev=4,s.next=7,KU(CB);case 7:return a=s.sent,u={api:a.api,showGroupedRatings:r,slug:o},s.next=11,YU(Kt,u);case 11:return c=s.sent,s.next=14,zU(ra({addon:c,slug:o}));case 14:s.next=21;break;case 16:return s.prev=16,s.t0=s.catch(4),L.Z.warn("Failed to load add-on with slug ".concat(o,": ").concat(s.t0)),s.next=21,zU(i.createErrorAction(s.t0));case 21:case"end":return s.stop()}}),cz,null,[[4,16]])}function pz(e){var t,n,r,o,i,a,u;return uz().wrap((function(c){for(;;)switch(c.prev=c.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.slug,o=RB(n),c.next=4,zU(o.createClearingAction());case 4:return c.prev=4,c.next=7,KU(CB);case 7:return i=c.sent,a={api:i.api,slug:r},c.next=11,YU(iz,a);case 11:return u=c.sent,c.next=14,zU(oa({slug:r,info:u}));case 14:c.next=21;break;case 16:return c.prev=16,c.t0=c.catch(4),L.Z.warn("Failed to fetch add-on info: ".concat(c.t0)),c.next=21,zU(o.createErrorAction(c.t0));case 21:case"end":return c.stop()}}),sz,null,[[4,16]])}function dz(){return uz().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,kB(Ji,fz);case 2:return e.next=4,IB(Qi,pz);case 4:case"end":return e.stop()}}),lz)}function hz(e){return $t({endpoint:"addons/categories",apiState:e.api})}function yz(e){return(yz="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function mz(){mz=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==yz(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}var vz=mz().mark(bz),gz=mz().mark(wz);function bz(e){var t,n,r,o,i;return mz().wrap((function(a){for(;;)switch(a.prev=a.next){case 0:return t=e.payload.errorHandlerId,n=RB(t),a.prev=2,a.next=5,KU(CB);case 5:return r=a.sent,o={api:r.api},a.next=9,YU(hz,o);case 9:return i=a.sent,a.next=12,zU(th({results:i}));case 12:a.next=19;break;case 14:return a.prev=14,a.t0=a.catch(2),L.Z.warn("Categories failed to load: ".concat(a.t0)),a.next=19,zU(n.createErrorAction(a.t0));case 19:case"end":return a.stop()}}),vz,null,[[2,14]])}function wz(){return mz().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,kB(Qd,bz);case 2:case"end":return e.stop()}}),gz)}function Oz(e){return(Oz="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Ez(){Ez=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==Oz(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}var _z=Ez().mark(Sz),xz=Ez().mark(jz);function Sz(e){var t,n,r,o,i,a,u,c,s,l;return Ez().wrap((function(f){for(;;)switch(f.prev=f.next){case 0:return t=e.payload,n=t.errorHandlerId,r=RB(n),f.next=5,zU(r.createClearingAction());case 5:return f.prev=5,o=t.filters,f.next=9,KU(CB);case 9:return i=f.sent,a={api:i.api,auth:!0,filters:o},f.next=13,YU(TB,a);case 13:return u=f.sent,c=u.count,s=u.page_size,l=u.results,f.next=17,zU(rf({count:c,pageSize:s,results:l}));case 17:f.next=26;break;case 19:return f.prev=19,f.t0=f.catch(5),L.Z.warn("Search results failed to load: ".concat(f.t0)),f.next=24,zU(r.createErrorAction(f.t0));case 24:return f.next=26,zU({type:ef});case 26:case"end":return f.stop()}}),_z,null,[[5,19]])}function jz(){return Ez().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,IB(Xl,Sz);case 2:case"end":return e.stop()}}),xz)}var Pz=function(e){var t=e.api;return ce()(t,"api state is required."),$t({endpoint:"site",apiState:t})};function kz(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Iz(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?kz(Object(n),!0).forEach((function(t){Tz(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):kz(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Tz(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Rz="FETCH_SITE_STATUS",Cz="LOAD_SITE_STATUS",Az="LOADED_PAGE_IS_ANONYMOUS",Nz={readOnly:!1,notice:null,loadedPageIsAnonymous:!1},Lz=function(e){var t=e.readOnly,n=e.notice;return{type:Cz,payload:{readOnly:t,notice:n}}};function Dz(e){return(Dz="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Mz(){Mz=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==Dz(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}var Fz=Mz().mark(Bz),Uz=Mz().mark(Hz);function Bz(){var e,t,n,r,o;return Mz().wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,KU(CB);case 2:return e=i.sent,t={api:e.api},i.prev=4,i.next=7,YU(Pz,t);case 7:return n=i.sent,r=n.read_only,o=n.notice,i.next=12,zU(Lz({readOnly:r,notice:o}));case 12:i.next=17;break;case 14:i.prev=14,i.t0=i.catch(4),L.Z.error("Could not fetch site status: ".concat(i.t0));case 17:case"end":return i.stop()}}),Fz,null,[[4,14]])}function Hz(){return Mz().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,IB(Rz,Bz);case 2:case"end":return e.stop()}}),Uz)}function qz(e){return(qz="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function zz(){zz=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==qz(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}var Gz=zz().mark(Vz),Wz=zz().mark(Yz);function Vz(e){var t,n,r,o,i,a,u,c;return zz().wrap((function(s){for(;;)switch(s.prev=s.next){case 0:return t=e.payload,n=t.errorHandlerId,r=RB(n),s.next=5,zU(r.createClearingAction());case 5:return s.prev=5,o=t.filters,s.next=9,KU(CB);case 9:return i=s.sent,a={api:i.api,filters:o},s.next=13,YU(Xt,a);case 13:return u=s.sent,c=u.results,s.next=17,zU(pb({results:c}));case 17:s.next=24;break;case 19:return s.prev=19,s.t0=s.catch(5),L.Z.warn("Autcomplete results failed to load: ".concat(s.t0)),s.next=24,zU(r.createErrorAction(s.t0));case 24:case"end":return s.stop()}}),Gz,null,[[5,19]])}function Yz(){return zz().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,IB(cb,zz().mark((function e(){var t,n,r,o=arguments;return zz().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:for(t=o.length,n=new Array(t),r=0;r<t;r++)n[r]=o[r];return e.next=3,WU({fetch:YU.apply(void 0,[Vz].concat(n)),cancel:qU(sb)});case 3:case"end":return e.stop()}}),e)})));case 2:case"end":return e.stop()}}),Wz)}function Zz(e){var t=e.api;return $t({auth:!0,endpoint:"addons/language-tools",method:"GET",params:{app:t.clientApp},apiState:t})}function $z(e){return($z="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Kz(){Kz=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==$z(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}var Qz=Kz().mark(Jz),Xz=Kz().mark(eG);function Jz(e){var t,n,r,o,i;return Kz().wrap((function(a){for(;;)switch(a.prev=a.next){case 0:return t=e.payload.errorHandlerId,n=RB(t),a.next=4,zU(n.createClearingAction());case 4:return a.prev=4,a.next=7,KU(CB);case 7:return r=a.sent,o={api:r.api},a.next=11,YU(Zz,o);case 11:return i=a.sent,a.next=14,zU(nN({languageTools:i.results}));case 14:a.next=21;break;case 16:return a.prev=16,a.t0=a.catch(4),L.Z.warn("Loading Language tools failed: ".concat(a.t0)),a.next=21,zU(n.createErrorAction(a.t0));case 21:case"end":return a.stop()}}),Qz,null,[[4,16]])}function eG(){return Kz().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,IB(JA,Jz);case 2:case"end":return e.stop()}}),Xz)}function tG(e){return(tG="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function nG(){nG=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==tG(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}var rG=nG().mark(iG),oG=nG().mark(aG);function iG(e){var t,n,r,o,i,a,u,c;return nG().wrap((function(s){for(;;)switch(s.prev=s.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.message,o=t.userId,i=RB(n),s.next=4,zU(i.createClearingAction());case 4:return s.prev=4,s.next=7,KU(CB);case 7:return a=s.sent,u={api:a.api,message:r,userId:o},s.next=11,YU(Kq,u);case 11:return c=s.sent,s.next=14,zU(tL({message:c.message,reporter:c.reporter,userId:o}));case 14:s.next=23;break;case 16:return s.prev=16,s.t0=s.catch(4),L.Z.warn("Reporting user for abuse failed: ".concat(s.t0)),s.next=21,zU(i.createErrorAction(s.t0));case 21:return s.next=23,zU(JN({userId:o}));case 23:case"end":return s.stop()}}),rG,null,[[4,16]])}function aG(){return nG().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,IB(QN,iG);case 2:case"end":return e.stop()}}),oG)}var uG=["api","picture","userId"];function cG(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function sG(e){var t=e.api;return ce()(t,"api state is required."),$t({auth:!0,endpoint:"accounts/profile",apiState:t})}function lG(e){var t=e.api,n=e.picture,r=e.userId,o=cG(e,uG);ce()(t,"api state is required."),ce()(r,"userId is required.");var i=o;if(n){var a=new(he());Object.keys(o).forEach((function(e){var t=o[e];a.set(e,null===t?"":t)})),a.set("picture_upload",n),i=a}return $t({auth:!0,body:i,endpoint:"accounts/account/".concat(r),method:"PATCH",apiState:t})}function fG(e){var t=e.api,n=e.userId;return ce()(t,"api state is required."),ce()(n,"userId is required."),$t({auth:!0,endpoint:"accounts/account/".concat(n),apiState:t})}function pG(e){var t=e.api,n=e.userId;return ce()(t,"api state is required."),ce()(n,"userId is required."),$t({auth:!0,endpoint:"accounts/account/".concat(n,"/notifications"),apiState:t})}function dG(e){var t=e.api,n=e.notifications,r=e.userId;return ce()(t,"api state is required."),ce()(r,"userId is required."),ce()(n,"notifications are required."),$t({auth:!0,body:n,endpoint:"accounts/account/".concat(r,"/notifications"),method:"POST",apiState:t})}function hG(e){var t=e.api,n=e.userId;return ce()(t,"api state is required."),ce()(n,"userId is required."),$t({auth:!0,endpoint:"accounts/account/".concat(n,"/picture"),method:"DELETE",apiState:t})}function yG(e){var t=e.api,n=e.userId;return ce()(t,"api state is required."),ce()(n,"userId is required."),$t({auth:!0,credentials:!0,endpoint:"accounts/account/".concat(n),method:"DELETE",apiState:t})}function mG(e){return $t({auth:!1,apiState:e.api,endpoint:"accounts/unsubscribe",method:"POST",body:{hash:e.hash,notification:e.notification,token:e.token}})}function vG(e){return(vG="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function gG(){gG=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==vG(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}var bG=gG().mark(TG),wG=gG().mark(RG),OG=gG().mark(CG),EG=gG().mark(AG),_G=gG().mark(NG),xG=gG().mark(LG),SG=gG().mark(DG),jG=gG().mark(MG);function PG(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function kG(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?PG(Object(n),!0).forEach((function(t){IG(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):PG(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function IG(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function TG(e){var t,n,r,o,i,a,u,c;return gG().wrap((function(s){for(;;)switch(s.prev=s.next){case 0:return t=e.payload,n=t.token,s.next=4,KU(CB);case 4:return r=s.sent,o={api:kG(kG({},r.api),{},{token:n})},s.prev=6,s.next=9,YU(sG,o);case 9:return i=s.sent,s.next=12,zU(We({user:i}));case 12:return a=i.site_status,u=a.read_only,c=a.notice,s.next=15,zU(Lz({readOnly:u,notice:c}));case 15:s.next=26;break;case 17:if(s.prev=17,s.t0=s.catch(6),!s.t0.response||!s.t0.response.status||401!==s.t0.response.status){s.next=25;break}return L.Z.warn("Could not load user profile: ".concat(s.t0,", logging out user")),s.next=23,zU(Ze());case 23:s.next=26;break;case 25:throw s.t0;case 26:case"end":return s.stop()}}),bG,null,[[6,17]])}function RG(e){var t,n,r,o,i,a,u,c,s,l,f,p,d,h;return gG().wrap((function(y){for(;;)switch(y.prev=y.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.notifications,o=t.picture,i=t.pictureData,a=t.userFields,u=t.userId,c=RB(n),y.next=4,zU(c.createClearingAction());case 4:return y.prev=4,y.next=7,KU(CB);case 7:return s=y.sent,l=kG({api:s.api,picture:o,userId:u},a),y.next=11,YU(lG,l);case 11:return f=y.sent,o&&(f.picture_url=i),y.next=15,zU(Ve({user:f}));case 15:if(!Object.keys(r).length){y.next=23;break}return p={api:s.api,notifications:r,userId:u},y.next=19,YU(dG,p);case 19:return d=y.sent,void 0!==r.announcements&&-1!==(h=d.findIndex((function(e){return"announcements"===e.name})))&&(d[h].enabled=r.announcements,L.Z.debug('Optimistically set user value for "announcements" notification')),y.next=23,zU(Ke({notifications:d,userId:f.id}));case 23:y.next=30;break;case 25:return y.prev=25,y.t0=y.catch(4),L.Z.warn("Could not update user account: ".concat(y.t0)),y.next=30,zU(c.createErrorAction(y.t0));case 30:return y.prev=30,y.next=33,zU({type:Ie,payload:{}});case 33:return y.finish(30);case 34:case"end":return y.stop()}}),wG,null,[[4,25,30,34]])}function CG(e){var t,n,r,o,i,a,u;return gG().wrap((function(c){for(;;)switch(c.prev=c.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.userId,o=RB(n),c.next=4,zU(o.createClearingAction());case 4:return c.prev=4,c.next=7,KU(CB);case 7:return i=c.sent,a={api:i.api,userId:r},c.next=11,YU(fG,a);case 11:return u=c.sent,c.next=14,zU(Ve({user:u}));case 14:c.next=21;break;case 16:return c.prev=16,c.t0=c.catch(4),L.Z.warn("User account failed to load: ".concat(c.t0)),c.next=21,zU(o.createErrorAction(c.t0));case 21:case"end":return c.stop()}}),OG,null,[[4,16]])}function AG(e){var t,n,r,o,i,a,u;return gG().wrap((function(c){for(;;)switch(c.prev=c.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.userId,o=RB(n),c.next=4,zU(o.createClearingAction());case 4:return c.prev=4,c.next=7,KU(CB);case 7:return i=c.sent,a={api:i.api,userId:r},c.next=11,YU(pG,a);case 11:return u=c.sent,c.next=14,zU(Ke({notifications:u,userId:r}));case 14:c.next=21;break;case 16:return c.prev=16,c.t0=c.catch(4),L.Z.warn("User notifications failed to load: ".concat(c.t0)),c.next=21,zU(o.createErrorAction(c.t0));case 21:case"end":return c.stop()}}),EG,null,[[4,16]])}function NG(e){var t,n,r,o,i,a,u;return gG().wrap((function(c){for(;;)switch(c.prev=c.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.userId,o=RB(n),c.next=4,zU(o.createClearingAction());case 4:return c.prev=4,c.next=7,KU(CB);case 7:return i=c.sent,a={api:i.api,userId:r},c.next=11,YU(hG,a);case 11:return u=c.sent,c.next=14,zU(Ve({user:u}));case 14:c.next=21;break;case 16:return c.prev=16,c.t0=c.catch(4),L.Z.warn("Could not delete user picture: ".concat(c.t0)),c.next=21,zU(o.createErrorAction(c.t0));case 21:case"end":return c.stop()}}),_G,null,[[4,16]])}function LG(e){var t,n,r,o,i,a;return gG().wrap((function(u){for(;;)switch(u.prev=u.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.userId,o=RB(n),u.next=4,zU(o.createClearingAction());case 4:return u.prev=4,u.next=7,KU(CB);case 7:return i=u.sent,a={api:i.api,userId:r},u.next=11,YU(yG,a);case 11:return u.next=13,zU(Ye({userId:r}));case 13:u.next=20;break;case 15:return u.prev=15,u.t0=u.catch(4),L.Z.warn("Could not delete user account: ".concat(u.t0)),u.next=20,zU(o.createErrorAction(u.t0));case 20:case"end":return u.stop()}}),xG,null,[[4,15]])}function DG(e){var t,n,r,o,i,a,u,c;return gG().wrap((function(s){for(;;)switch(s.prev=s.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.hash,o=t.token,i=t.notification,a=RB(n),s.next=4,zU(a.createClearingAction());case 4:return s.prev=4,s.next=7,KU(CB);case 7:return u=s.sent,c={api:u.api,hash:r,notification:i,token:o},s.next=11,YU(mG,c);case 11:return s.next=13,zU(rt({hash:r,notification:i,token:o}));case 13:s.next=22;break;case 15:return s.prev=15,s.t0=s.catch(4),L.Z.warn("Could not unsubscribe from ".concat(i," notification: ").concat(s.t0)),s.next=20,zU(a.createErrorAction(s.t0));case 20:return s.next=22,zU(ot({hash:r,notification:i,token:o}));case 22:case"end":return s.stop()}}),SG,null,[[4,15]])}function MG(){return gG().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,IB(Fe,LG);case 2:return e.next=4,IB(Le,NG);case 4:return e.next=6,IB(Ae,CG);case 6:return e.next=8,IB(De,AG);case 8:return e.next=10,IB(ft,TG);case 10:return e.next=12,IB(Be,DG);case 12:return e.next=14,IB(Te,RG);case 14:case"end":return e.stop()}}),jG)}var FG=["api","slug"];function UG(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var BG=function(e){var t=e.api,n=e.slug,r=e.versionId;return ce()(n,"slug is required"),ce()(r,"versionId is required"),$t({apiState:t,auth:!0,endpoint:"addons/addon/".concat(n,"/versions/").concat(r,"/")})},HG=function(e){var t=e.api,n=e.slug,r=UG(e,FG);return ce()(n,"slug is required"),$t({apiState:t,auth:!0,endpoint:"addons/addon/".concat(n,"/versions/"),params:r})};function qG(e){return(qG="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function zG(){zG=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==qG(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}var GG=zG().mark(YG),WG=zG().mark(ZG),VG=zG().mark($G);function YG(e){var t,n,r,o,i,a,u,c;return zG().wrap((function(s){for(;;)switch(s.prev=s.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.slug,o=t.versionId,i=RB(n),s.next=4,zU(i.createClearingAction());case 4:return s.prev=4,s.next=7,KU(CB);case 7:return a=s.sent,u={api:a.api,slug:r,versionId:o},s.next=11,YU(BG,u);case 11:return c=s.sent,s.next=14,zU(yf({slug:r,versions:[c]}));case 14:s.next=21;break;case 16:return s.prev=16,s.t0=s.catch(4),L.Z.warn("Failed to fetch version: ".concat(s.t0)),s.next=21,zU(i.createErrorAction(s.t0));case 21:case"end":return s.stop()}}),GG,null,[[4,16]])}function ZG(e){var t,n,r,o,i,a,u,c;return zG().wrap((function(s){for(;;)switch(s.prev=s.next){case 0:return t=e.payload,n=t.errorHandlerId,r=t.page,o=t.slug,i=RB(n),s.next=4,zU(i.createClearingAction());case 4:return s.prev=4,s.next=7,KU(CB);case 7:return a=s.sent,u={api:a.api,page:r,slug:o},s.next=11,YU(HG,u);case 11:return c=s.sent,s.next=14,zU(yf({slug:o,versions:c.results}));case 14:s.next=21;break;case 16:return s.prev=16,s.t0=s.catch(4),L.Z.warn("Failed to fetch versions: ".concat(s.t0)),s.next=21,zU(i.createErrorAction(s.t0));case 21:case"end":return s.stop()}}),WG,null,[[4,16]])}function $G(){return zG().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,IB(lf,YG);case 2:return e.next=4,IB(ff,ZG);case 4:case"end":return e.stop()}}),VG)}function KG(e){return(KG="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function QG(){QG=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",i=r.asyncIterator||"@@asyncIterator",a=r.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function c(e,t,n,r){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new _(r||[]);return i._invoke=function(e,t,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return S()}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var u=w(a,n);if(u){if(u===l)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(e,t,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===l)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}(e,n,a),i}function s(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=c;var l={};function f(){}function p(){}function d(){}var h={};u(h,o,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(x([])));m&&m!==t&&n.call(m,o)&&(h=m);var v=d.prototype=f.prototype=Object.create(h);function g(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function b(e,t){function r(o,i,a,u){var c=s(e[o],e,i);if("throw"!==c.type){var l=c.arg,f=l.value;return f&&"object"==KG(f)&&n.call(f,"__await")?t.resolve(f.__await).then((function(e){r("next",e,a,u)}),(function(e){r("throw",e,a,u)})):t.resolve(f).then((function(e){l.value=e,a(l)}),(function(e){return r("throw",e,a,u)}))}u(c.arg)}var o;this._invoke=function(e,n){function i(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(i,i):i()}}function w(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var r=s(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,l;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function O(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(O,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return i.next=i}}return{next:S}}function S(){return{value:void 0,done:!0}}return p.prototype=d,u(v,"constructor",d),u(d,"constructor",p),p.displayName=u(d,a,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,u(e,a,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},g(b.prototype),u(b.prototype,i,(function(){return this})),e.AsyncIterator=b,e.async=function(t,n,r,o,i){void 0===i&&(i=Promise);var a=new b(c(t,n,r,o),i);return e.isGeneratorFunction(n)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(v),u(v,a,"Generator"),u(v,o,(function(){return this})),u(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},e.values=x,_.prototype={constructor:_,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(E),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(n,r){return a.type="throw",a.arg=e,t.next=n,r&&(t.method="next",t.arg=void 0),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,l):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:x(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),l}},e}var XG=QG().mark(JG);function JG(){return QG().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,GU([ZU(oz),ZU(dz),ZU(FB),ZU(Yz),ZU(WB),ZU(wz),ZU(TH),ZU(FH),ZU($H),ZU(eG),ZU(nq),ZU(Zq),ZU(jz),ZU(Hz),ZU(aG),ZU(MG),ZU($G)]);case 2:case"end":return e.stop()}}),XG)}var eW=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},tW="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};function nW(e,t){for(var n in t){var r=t[n];r.configurable=r.enumerable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,n,r)}return e}var rW="proc first argument (Saga function result) must be an iterator",oW={toString:function(){return"@@redux-saga/CHANNEL_END"}},iW={toString:function(){return"@@redux-saga/TASK_CANCEL"}},aW=function(){return rU},uW=function(e){return"symbol"===(void 0===e?"undefined":tW(e))?function(t){return t.type===e}:function(t){return t.type===String(e)}},cW=function(e){return function(t){return e.some((function(e){return lW(e)(t)}))}},sW=function(e){return function(t){return e(t)}};function lW(e){return("*"===e?aW:sU.array(e)?cW:sU.stringableFunc(e)?uW:sU.func(e)?sW:uW)(e)}function fW(e,t,n){var r=[],o=void 0,i=!1;function a(e){c(),n(e,!0)}function u(e){r.push(e),e.cont=function(u,c){i||(fU(r,e),e.cont=oU,c?a(u):(e===t&&(o=u),r.length||(i=!0,n(o))))}}function c(){i||(i=!0,r.forEach((function(e){e.cont=oU,e.cancel()})),r=[])}return u(t),{addTask:u,cancelAll:c,abort:a,getTasks:function(){return r},taskNames:function(){return r.map((function(e){return e.name}))}}}function pW(e){var t=e.context,n=e.fn,r=e.args;if(sU.iterator(n))return n;var o,i,a=void 0,u=void 0;try{a=n.apply(t,r)}catch(e){u=e}return sU.iterator(a)?a:gU(u?function(){throw u}:(o=void 0,i={done:!1,value:a},function(e){return o?{done:!0,value:e}:(o=!0,i)}))}var dW=function(e){return{fn:e}};function hW(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(){return oU},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:oU,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:oU,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},i=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},a=arguments.length>6&&void 0!==arguments[6]?arguments[6]:0,u=arguments.length>7&&void 0!==arguments[7]?arguments[7]:"anonymous",c=arguments[8];aU(e,sU.iterator,rW);var s="[...effects]",l=wU(L,OU(s,"all("+s+")")),f=i.sagaMonitor,p=i.logger,d=i.onError,h=p||bU,y=function(e){var t=e.sagaStack;!t&&e.stack&&(t=-1!==e.stack.split("\n")[0].indexOf(e.message)?e.stack:"Error: "+e.message+"\n"+e.stack),h("error","uncaught at "+u,t||e.message||e)},m=xB(t),v=Object.create(o);_.cancel=oU;var g=z(a,u,e,c),b={name:u,cancel:O,isRunning:!0},w=fW(0,b,x);function O(){b.isRunning&&!b.isCancelled&&(b.isCancelled=!0,_(iW))}function E(){e._isRunning&&!e._isCancelled&&(e._isCancelled=!0,w.cancelAll(),x(iW))}return c&&(c.cancel=E),e._isRunning=!0,_(),g;function _(t,n){if(!b.isRunning)throw new Error("Trying to resume an already finished generator");try{var r=void 0;n?r=e.throw(t):t===iW?(b.isCancelled=!0,_.cancel(),r=sU.func(e.return)?e.return(iW):{done:!0,value:iW}):r=t===oW?sU.func(e.return)?e.return():{done:!0}:e.next(t),r.done?(b.isMainRunning=!1,b.cont&&b.cont(r.value)):S(r.value,a,"",_)}catch(e){b.isCancelled&&y(e),b.isMainRunning=!1,b.cont(e,!0)}}function x(t,n){e._isRunning=!1,m.close(),n?(t instanceof Error&&Object.defineProperty(t,"sagaStack",{value:"at "+u+" \n "+(t.sagaStack||t.stack),configurable:!0}),g.cont||(t instanceof Error&&d?d(t):y(t)),e._error=t,e._isAborted=!0,e._deferredEnd&&e._deferredEnd.reject(t)):(e._result=t,e._deferredEnd&&e._deferredEnd.resolve(t)),g.cont&&g.cont(t,n),g.joiners.forEach((function(e){return e.cb(t,n)})),g.joiners=null}function S(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",r=arguments[3],o=yU();f&&f.effectTriggered({effectId:o,parentEffectId:t,label:n,effect:e});var i=void 0;function a(e,t){i||(i=!0,r.cancel=oU,f&&(t?f.effectRejected(o,e):f.effectResolved(o,e)),r(e,t))}a.cancel=oU,r.cancel=function(){if(!i){i=!0;try{a.cancel()}catch(e){y(e)}a.cancel=oU,f&&f.effectCancelled(o)}};var c=void 0;return sU.promise(e)?j(e,a):sU.helper(e)?C(dW(e),o,a):sU.iterator(e)?P(e,o,u,a):sU.array(e)?l(e,o,a):(c=XU.take(e))?k(c,a):(c=XU.put(e))?I(c,a):(c=XU.all(e))?L(c,o,a):(c=XU.race(e))?D(c,o,a):(c=XU.call(e))?T(c,o,a):(c=XU.cps(e))?R(c,a):(c=XU.fork(e))?C(c,o,a):(c=XU.join(e))?A(c,a):(c=XU.cancel(e))?N(c,a):(c=XU.select(e))?M(c,a):(c=XU.actionChannel(e))?F(c,a):(c=XU.flush(e))?B(c,a):(c=XU.cancelled(e))?U(c,a):(c=XU.getContext(e))?H(c,a):(c=XU.setContext(e))?q(c,a):a(e)}function j(e,t){var n=e[JF];sU.func(n)?t.cancel=n:sU.func(e.abort)&&(t.cancel=function(){return e.abort()}),e.then(t,(function(e){return t(e,!0)}))}function P(e,o,a,u){hW(e,t,n,r,v,i,o,a,u)}function k(e,t){var n=e.channel,r=e.pattern,o=e.maybe;n=n||m;var i=function(e){return e instanceof Error?t(e,!0):gB(e)&&!o?t(oW):t(e)};try{n.take(i,lW(r))}catch(e){return t(e,!0)}t.cancel=i.cancel}function I(e,t){var r=e.channel,o=e.action,i=e.resolve;fB((function(){var e=void 0;try{e=(r?r.put:n)(o)}catch(e){if(r||i)return t(e,!0);y(e)}if(!i||!sU.promise(e))return t(e);j(e,t)}))}function T(e,t,n){var r=e.context,o=e.fn,i=e.args,a=void 0;try{a=o.apply(r,i)}catch(e){return n(e,!0)}return sU.promise(a)?j(a,n):sU.iterator(a)?P(a,t,o.name,n):n(a)}function R(e,t){var n=e.context,r=e.fn,o=e.args;try{var i=function(e,n){return sU.undef(e)?t(n):t(e,!0)};r.apply(n,o.concat(i)),i.cancel&&(t.cancel=function(){return i.cancel()})}catch(e){return t(e,!0)}}function C(e,o,a){var u=e.context,c=e.fn,s=e.args,l=e.detached,f=pW({context:u,fn:c,args:s});try{pB();var p=hW(f,t,n,r,v,i,o,c.name,l?null:oU);l?a(p):f._isRunning?(w.addTask(p),a(p)):f._error?w.abort(f._error):a(p)}finally{hB()}}function A(e,t){if(e.isRunning()){var n={task:g,cb:t};t.cancel=function(){return fU(e.joiners,n)},e.joiners.push(n)}else e.isAborted()?t(e.error(),!0):t(e.result())}function N(e,t){e===tU&&(e=g),e.isRunning()&&e.cancel(),t()}function L(e,t,n){var r=Object.keys(e);if(!r.length)return n(sU.array(e)?[]:{});var o=0,i=void 0,a={},u={};r.forEach((function(t){var c=function(u,c){i||(c||gB(u)||u===oW||u===iW?(n.cancel(),n(u,c)):(a[t]=u,++o===r.length&&(i=!0,n(sU.array(e)?pU(eW({},a,{length:r.length})):a))))};c.cancel=oU,u[t]=c})),n.cancel=function(){i||(i=!0,r.forEach((function(e){return u[e].cancel()})))},r.forEach((function(n){return S(e[n],t,n,u[n])}))}function D(e,t,n){var r=void 0,o=Object.keys(e),i={};o.forEach((function(t){var a=function(i,a){if(!r)if(a)n.cancel(),n(i,!0);else if(!gB(i)&&i!==oW&&i!==iW){var u;n.cancel(),r=!0;var c=((u={})[t]=i,u);n(sU.array(e)?[].slice.call(eW({},c,{length:o.length})):c)}};a.cancel=oU,i[t]=a})),n.cancel=function(){r||(r=!0,o.forEach((function(e){return i[e].cancel()})))},o.forEach((function(n){r||S(e[n],t,n,i[n])}))}function M(e,t){var n=e.selector,o=e.args;try{t(n.apply(void 0,[r()].concat(o)))}catch(e){t(e,!0)}}function F(e,n){var r=e.pattern,o=e.buffer,i=lW(r);i.pattern=r,n(_B(t,o||uB(),i))}function U(e,t){t(!!b.isCancelled)}function B(e,t){e.flush(t)}function H(e,t){t(v[e])}function q(e,t){lU(v,e),t()}function z(e,t,n,r){var o,i;return n._deferredEnd=null,(o={})[KF]=!0,o.id=e,o.name=t,"done",(i={}).done=i.done||{},i.done.get=function(){if(n._deferredEnd)return n._deferredEnd.promise;var e=dU();return n._deferredEnd=e,n._isRunning||(n._error?e.reject(n._error):e.resolve(n._result)),e.promise},o.cont=r,o.joiners=[],o.cancel=E,o.isRunning=function(){return n._isRunning},o.isCancelled=function(){return n._isCancelled},o.isAborted=function(){return n._isAborted},o.result=function(){return n._result},o.error=function(){return n._error},o.setContext=function(e){aU(e,sU.object,_U("task",e)),lU(v,e)},nW(o,i),o}}var yW="runSaga(storeInterface, saga, ...args): saga argument must be a Generator function!";function mW(e,t){for(var n=arguments.length,r=Array(n>2?n-2:0),o=2;o<n;o++)r[o-2]=arguments[o];var i=void 0;sU.iterator(e)?(i=e,e=t):(aU(t,sU.func,yW),aU(i=t.apply(void 0,r),sU.iterator,yW));var a=e,u=a.subscribe,c=a.dispatch,s=a.getState,l=a.context,f=a.sagaMonitor,p=a.logger,d=a.onError,h=yU();f&&(f.effectTriggered=f.effectTriggered||oU,f.effectResolved=f.effectResolved||oU,f.effectRejected=f.effectRejected||oU,f.effectCancelled=f.effectCancelled||oU,f.actionDispatched=f.actionDispatched||oU,f.effectTriggered({effectId:h,root:!0,parentEffectId:0,effect:{root:!0,saga:t,args:r}}));var y=hW(i,u,xU(c),s,l,{sagaMonitor:f,logger:p,onError:d},h,t.name);return f&&f.effectResolved(h,y),y}function vW(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}const gW=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.context,n=void 0===t?{}:t,r=vW(e,["context"]),o=r.sagaMonitor,i=r.logger,a=r.onError;if(sU.func(r))throw new Error("Saga middleware no longer accept Generator functions. Use sagaMiddleware.run instead");if(i&&!sU.func(i))throw new Error("`options.logger` passed to the Saga middleware is not a function!");if(a&&!sU.func(a))throw new Error("`options.onError` passed to the Saga middleware is not a function!");if(r.emitter&&!sU.func(r.emitter))throw new Error("`options.emitter` passed to the Saga middleware is not a function!");function u(e){var t=e.getState,c=e.dispatch,s=bB();return s.emit=(r.emitter||iU)(s.emit),u.run=mW.bind(null,{context:n,subscribe:s.subscribe,dispatch:c,getState:t,sagaMonitor:o,logger:i,onError:a}),function(e){return function(t){o&&o.actionDispatched&&o.actionDispatched(t);var n=e(t);return s.emit(t),n}}}return u.run=function(){throw new Error("Before running a Saga, you must mount the Saga middleware on the Store using applyMiddleware")},u.setContext=function(e){aU(e,sU.object,_U("sagaMiddleware",e)),lU(n,e)},u};var bW=a(13586);function wW(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function OW(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?wW(Object(n),!0).forEach((function(t){EW(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):wW(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function EW(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var _W={context:D.cs};function xW(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function SW(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?xW(Object(n),!0).forEach((function(t){jW(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):xW(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function jW(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function PW(e){return(PW="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function kW(e){var t={code:D.vY,messages:[]};L.Z.debug("Extracting messages from error object:",e);var n=function(e){var t=e.oldCode,n=e.newCode;L.Z.warn("Replacing error code ".concat(t," with ").concat(n))};return e&&e.response&&e.response.data&&Object.keys(e.response.data).forEach((function(r){var o=e.response.data[r];if(Array.isArray(o))o.forEach((function(e){t.messages.push(e)}));else if("code"===r)t.code=o;else if("is_disabled_by_developer"===r){if(!0===o){var i=D.e0;n({oldCode:t.code,newCode:i}),t.code=i}}else if("is_disabled_by_mozilla"===r){if(!0===o){var a=D.Uw;n({oldCode:t.code,newCode:a}),t.code=a}}else"string"==typeof o||"object"===PW(o)?t.messages.push(o):L.Z.warn('Ignoring key "'.concat(r,'": "').concat(o,'" in data of error response'))})),t.messages.length||L.Z.warn("Error object did not contain any messages: ".concat(e)),t}var IW={};function TW(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function RW(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?TW(Object(n),!0).forEach((function(t){CW(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):TW(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function CW(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var AW=function(){return function(e){return function(t){return L.Z.info("Dispatching ".concat(t.type)),e(t)}}};function NW(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e._applyMiddleware,r=void 0===n?Mo.md:n,o=e._config,i=void 0===o?t.Z:o,a=e._createLogger,u=void 0===a?bW.createLogger:a,c=e._minimalReduxLogger,s=void 0===c?AW:c,l=e._window,f=void 0===l?"undefined"!=typeof window?window:null:l,p=e.sagaMiddleware,d=void 0===p?null:p,h=e.routerMiddleware,y=void 0===h?null:h,m=i.get("isDevelopment"),v=[];return m&&(i.get("server")?v.push(s):v.push(u())),d&&v.push(d),y&&v.push(y),(0,Mo.qC)(r.apply(void 0,v),i.get("enableDevTools")&&f&&f.__REDUX_DEVTOOLS_EXTENSION__?f.__REDUX_DEVTOOLS_EXTENSION__():function(e){return e})}var LW=function(e){var t=e.history,n=e.reducers;return(0,Mo.UY)(RW(RW({},n),{},{router:(0,i.iz)(t)}))},DW={abuse:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:gP,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case pP:var n=t.payload.addon;return lP(lP({},e),{},{bySlug:lP(lP({},e.bySlug),{},fP({},n.slug,lP(lP({},e.bySlug[n.slug]),{},{uiVisible:!1})))});case dP:var r=t.payload,o=r.addon,i=r.message,a=r.reporter;return lP(lP({},e),{},{bySlug:lP(lP({},e.bySlug),{},fP({},o.slug,{message:i,reporter:a,uiVisible:!1})),loading:!1});case hP:return lP(lP({},e),{},{loading:!0});case yP:var u=t.payload.addon;return lP(lP({},e),{},{bySlug:lP(lP({},e.bySlug),{},fP({},u.slug,lP(lP({},e.bySlug[u.slug]),{},{uiVisible:!0})))});case vP:return lP(lP({},e),{},{loading:!1});default:return e}},addons:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ta,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case dt:return $i($i({},e),{},{lang:t.payload.lang});case Ji:var n=t.payload.slug;return $i($i({},e),{},{loadingByIdInURL:$i($i({},e.loadingByIdInURL),{},Ki({},n,!0))});case ea:var r=t.payload,o=r.addon,i=r.slug,a=$i({},e.byID),u=$i({},e.byGUID),c=$i({},e.bySlug),s=$i({},e.byIdInURL),l=$i({},e.loadingByIdInURL),f=ua(o,e.lang);return a["".concat(f.id)]=f,s[i]=f.id,l[i]=!1,f.slug&&(c[f.slug.toLowerCase()]=f.id),f.guid&&(u[f.guid]=f.id),$i($i({},e),{},{byID:a,byGUID:u,bySlug:c,byIdInURL:s,loadingByIdInURL:l});case yi:var p=t.payload.addonId,d=sa(e,p);return d?$i($i({},e),{},{byID:$i($i({},e.byID),{},Ki({},"".concat(p),void 0)),byGUID:$i($i({},e.byGUID),{},Ki({},d.guid,void 0)),bySlug:$i($i({},e.bySlug),{},Ki({},d.slug.toLowerCase(),void 0)),loadingByIdInURL:$i($i({},e.loadingByIdInURL),{},Ki({},d.slug,void 0))}):e;case mi:var h=t.payload,y=h.addonId,m=h.oldReview,v=h.newReview,g=sa(e,y);if(!g)return e;var b=g.ratings,w=b?b.average:0,O=b?b.count:0,E=b?b.text_count:0,_=b?$i({},b.grouped_counts):ya();m&&m.score&&_[m.score]>0&&(_[m.score]-=1),v&&v.score&&(_[v.score]+=1);var x=O;if(w&&x&&m&&m.score){var S=x-1;w=0===S?0:(w*x-m.score)/S,x=S}return w=(w*x+Number(v.score))/(x+1),m?!m.body&&v.body&&(E+=1):(O+=1,v.body&&(E+=1)),$i($i({},e),{},{byID:$i($i({},e.byID),{},Ki({},y,$i($i({},g),{},{ratings:$i($i({},b),{},{average:w,bayesian_average:w,count:O,grouped_counts:_,text_count:E})})))});case Qi:var j=t.payload.slug;return $i($i({},e),{},{infoBySlug:$i($i({},e.infoBySlug),{},Ki({},j,{info:void 0,loading:!0}))});case Xi:var P=t.payload,k=P.slug,I=P.info;return $i($i({},e),{},{infoBySlug:$i($i({},e.infoBySlug),{},Ki({},k,{info:ha(I,e.lang),loading:!1}))});default:return e}},addonsByAuthors:gl,api:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:bt,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case ft:return st(st({},e),{},{token:t.payload.token});case dt:return st(st({},e),{},{lang:t.payload.lang});case pt:return st(st({},e),{},{clientApp:t.payload.clientApp});case ht:return st(st({},e),{},{regionCode:t.payload.regionCode});case yt:return st(st({},e),{},{requestId:t.payload.requestId});case mt:var n=Se()(t.payload.userAgent),r=n.browser,o=n.device,i=n.os;return st(st({},e),{},{userAgent:t.payload.userAgent,userAgentInfo:{browser:r,device:o,os:i}});case Re:return st(st({},e),{},{token:null});default:return e}},autocomplete:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:lb,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case sb:return ib(ib({},e),{},{loading:!1,suggestions:[]});case cb:return ib(ib({},lb),{},{lang:e.lang,loading:!0});case ub:var n=t.payload,r=n.results.filter((function(e){return null!==e.name})).map((function(t){return db(t,e.lang)}));return ib(ib({},e),{},{loading:!1,suggestions:r});case dt:return ib(ib({},e),{},{lang:t.payload.lang});default:return e}},blocks:GC,categories:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Jd,n=arguments.length>1?arguments[1]:void 0;switch(n.type){case Qd:return $d($d({},Jd),{},{loading:!0});case Xd:var r=n.payload,o=nh();r.results.forEach((function(t){t&&t.application?o[t.application]?o[t.application][t.type]?o[t.application][t.type].push(t):L.Z.warn((0,e.f9)(Vd||(Vd=Yd(['add-on category for unknown add-on type\n "','" for clientApp "','" received\n from API.'])),t.type,t.type)):L.Z.warn((0,e.f9)(Wd||(Wd=Yd(['Category data for unknown clientApp\n "','" received from API.'])),t.application)):L.Z.warn("category or category.application was falsey: %o",t)}));var i={};return Object.keys(o).forEach((function(e){i[e]={},Object.keys(o[e]).forEach((function(t){i[e][t]=o[e][t].sort((function(e,t){return e.name.localeCompare(t.name)})).reduce((function(e,t){return $d($d({},e),{},Kd({},t.slug,t))}),{})}))})),{categories:i,loading:!1};default:return t}},collections:yu,errors:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:IW,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case D.kl:return SW(SW({},e),{},jW({},t.payload.id,null));case D.Go:var n=kW(t.payload.error),r=n.code,o=n.messages;return SW(SW({},e),{},jW({},t.payload.id,{code:r,messages:o,responseStatusCode:t.payload.error.response?t.payload.error.response.status:null}));case D.rs:var i=e[t.payload.id]||{messages:[]};return i.messages.push(t.payload.message),SW(SW({},e),{},jW({},t.payload.id,i));default:return e}},errorPage:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:SF,t=arguments.length>1?arguments[1]:void 0,n=t.payload;switch(t.type){case i.nk:return e.clearOnNext?SF:EF(EF({},e),{},{clearOnNext:!0});case xF:var r=500;return n.error&&n.error.response&&n.error.response.status&&(r=n.error.response.status),EF(EF({},e),{},{error:n.error,hasError:!0,statusCode:r});default:return e}},experiments:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Qw,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case Kw:var n=t.payload,r=n.id,o=n.variant;return Zw(Zw({},e),{},$w({},r,o));default:return e}},home:Rl,installations:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,n=t.type,r=t.payload;function o(t){var o=r.guid,i=e[o];if(!i)throw new Error("Cannot reduce type ".concat(n,"; no add-on with guid ").concat(o," found."));return yv(yv({},i),t)}switch(n){case D.tX:return yv(yv({},e),{},mv({},r.guid,{canUninstall:void 0===r.canUninstall||r.canUninstall,downloadProgress:0,error:r.error,guid:r.guid,needsRestart:r.needsRestart||!1,status:r.status,url:r.url}));case D.hi:return yv(yv({},e),{},mv({},r.guid,o({status:D.UZ})));case D.HR:return yv(yv({},e),{},mv({},r.guid,o({downloadProgress:r.downloadProgress})));case D.OS:return yv(yv({},e),{},mv({},r.guid,o({status:D.e_})));case D.dG:return yv(yv({},e),{},mv({},r.guid,o({status:D.un})));case D.zl:return yv(yv({},e),{},mv({},r.guid,o({downloadProgress:0,status:D.un})));case D.Rq:return yv(yv({},e),{},mv({},r.guid,o({downloadProgress:0,error:r.error,status:D.Kj})));default:return e}},landing:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Ml,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case dt:return Al(Al({},e),{},{lang:t.payload.lang});case Ll:var n=t.payload;return Al(Al({},Ml),{},{addonType:n.addonType,category:n.category||null,lang:e.lang,loading:!0,resultsLoaded:!1});case Dl:var r=t.payload,o=Al(Al({},e),{},{loading:!1,resultsLoaded:!0});return["recommended","highlyRated","trending"].forEach((function(t){r[t]&&(o[t]={count:r[t].count,results:r[t].results.map((function(t){return ua(t,e.lang)}))})})),o;default:return e}},languageTools:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:tN,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case eN:var n=QA({},e.byID);return t.payload.languageTools.forEach((function(t){n["".concat(t.id)]=oN(t,e.lang)})),QA(QA({},e),{},{byID:n});case dt:return QA(QA({},e),{},{lang:t.payload.lang});default:return e}},recommendations:Zl,redirectTo:ak,reviews:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Rp,n=arguments.length>1?arguments[1]:void 0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=r._addReviewToState,a=void 0===o?Fp:o;switch(n.type){case di:return Dp({state:t,reviewId:n.payload.reviewId,stateChange:{beginningToDeleteReview:!0}});case hi:return Dp({state:t,reviewId:n.payload.reviewId,stateChange:{beginningToDeleteReview:!1}});case pi:return Dp({state:t,reviewId:n.payload.reviewId,stateChange:{beginningToDeleteReview:!1,deletingReview:!0}});case si:return Dp({state:t,reviewId:n.payload.originalReviewId,stateChange:{submittingReply:!0}});case Go:return Dp({state:t,reviewId:n.payload.reviewId,stateChange:{beginningToDeleteReview:!1,editingReview:!0}});case Wo:return Dp({state:t,reviewId:n.payload.reviewId,stateChange:{beginningToDeleteReview:!1,replyingToReview:!0}});case Jo:return Dp({state:t,reviewId:n.payload.reviewId,stateChange:{editingReview:!1}});case ei:return Dp({state:t,reviewId:n.payload.reviewId,stateChange:{replyingToReview:!1,submittingReply:!1}});case ii:var u=n.payload,c=u.addonId,s=u.userId,l=u.review,f=Mp({addonId:c,userId:s});if(l&&!Cp(t,l.id))throw new Error("Cannot handle SET_LATEST_REVIEW because review ".concat(l.id," has not been set"));return kp(kp({},t),{},{latestUserReview:kp(kp({},t.latestUserReview),{},Ip({},f,l?l.id:null))});case Vo:return Dp({state:t,reviewId:n.payload.reviewId,stateChange:{loadingReview:!0}});case oi:var p=n.payload,d=vi(p),h=a({state:t,review:d});return Dp({state:h,reviewId:d.id,stateChange:{loadingReview:!1}});case ni:var y=n.payload;return a({state:t,review:y});case ui:var m=n.payload.originalReviewId,v=t.byId[m];if(!v)throw new Error((0,e.f9)(Sp||(Sp=jp(["Cannot store reply to review ID\n "," because it does not exist"])),m));return kp(kp({},t),{},{byId:kp(kp({},t.byId),{},Ip({},v.id,kp(kp({},v),{},{reply:vi(n.payload.reply)})))});case li:var g=n.payload;return Dp({state:t,reviewId:g.reviewId,stateChange:{flag:{reason:g.reason,inProgress:!0,wasFlagged:!1}}});case ci:var b=n.payload;return Dp({state:t,reviewId:b.reviewId,stateChange:{flag:{reason:b.reason,inProgress:!1,wasFlagged:!0}}});case Zo:var w=n.payload.addonSlug;return kp(kp({},t),{},{loadingForSlug:kp(kp({},t.loadingForSlug),{},Ip({},w,!0))});case ti:var O=n.payload,E=O.reviews.map((function(e){return vi(e)}));return kp(kp({},t),{},{byId:Lp({state:t,reviews:E}),byAddon:kp(kp({},t.byAddon),{},Ip({},O.addonSlug,{data:{pageSize:O.pageSize,reviewCount:O.reviewCount,reviews:E.map((function(e){return e.id}))},page:O.page,score:O.score})),loadingForSlug:kp(kp({},t.loadingForSlug),{},Ip({},O.addonSlug,!1))});case ri:var _=n.payload,x=_.reviews.map((function(e){return vi(e)}));return kp(kp({},t),{},{byId:Lp({state:t,reviews:x}),byUserId:kp(kp({},t.byUserId),{},Ip({},_.userId,{pageSize:_.pageSize,reviewCount:_.reviewCount,reviews:x.map((function(e){return e.id}))}))});case Qo:var S=n.payload;return kp(kp({},t),{},{flashMessage:S.message});case Xo:return kp(kp({},t),{},{flashMessage:void 0});case yi:var j=n.payload.reviewId,P=kp(kp({},t),{},{view:kp(kp({},t.view),{},Ip({},j,void 0))}),k=t.byId[j];if(k){var I=k.reviewAddon,T=k.userId;return kp(kp({},P),{},{byAddon:kp(kp({},P.byAddon),{},Ip({},I.slug,void 0)),byId:kp(kp({},P.byId),{},Ip({},j,void 0)),byUserId:kp(kp({},P.byUserId),{},Ip({},T,void 0)),permissions:kp(kp({},P.permissions),{},Ip({},Ap({addonId:I.id,userId:T}),void 0))})}return P;case i.nk:return kp(kp({},t),{},{view:{}});case Yo:var R=n.payload,C=R.addonId,A=R.userId;return kp(kp({},t),{},{permissions:kp(kp({},t.permissions),{},Ip({},Ap({addonId:C,userId:A}),{loading:!0,canReplyToReviews:null}))});case ai:var N=n.payload,L=N.addonId,D=N.userId,M=N.canReplyToReviews;return kp(kp({},t),{},{permissions:kp(kp({},t.permissions),{},Ip({},Ap({addonId:L,userId:D}),{loading:!1,canReplyToReviews:M}))});default:return t}},search:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:tf,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case dt:return Kl(Kl({},e),{},{lang:t.payload.lang});case Xl:var n=t.payload;return Kl(Kl({},e),{},{count:0,filters:n.filters,loading:!0,results:[]});case Jl:var r=t.payload;return Kl(Kl({},e),{},{count:r.count,loading:!1,pageSize:r.pageSize,results:r.results.map((function(t){return ua(t,e.lang)}))});case ef:return Kl(Kl({},e),{},{count:0,loading:!1,results:[]});default:return e}},site:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Nz,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case Cz:return Iz(Iz({},e),{},{readOnly:t.payload.readOnly,notice:t.payload.notice});case Az:return Iz(Iz({},e),{},{loadedPageIsAnonymous:!0});default:return e}},uiState:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Pu,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case ju:var n=t.payload,r=n.change,o=n.id;return xu(xu({},e),{},Su({},o,xu(xu({},e[o]),r)));default:return e}},userAbuseReports:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:oL,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case ZN:var n=t.payload.userId;return VN(VN({},e),{},{byUserId:VN(VN({},e.byUserId),{},YN({},n,VN(VN({},e.byUserId[n]),{},{hasSubmitted:!1,isSubmitting:!1,uiVisible:!1})))});case $N:var r=t.payload.userId;return VN(VN({},e),{},{byUserId:VN(VN({},e.byUserId),{},YN({},r,VN(VN({},e.byUserId[r]),{},{uiVisible:!1})))});case KN:var o=t.payload,i=o.message,a=o.reportedByUserId,u=o.userId;return VN(VN({},e),{},{byUserId:VN(VN({},e.byUserId),{},YN({},u,{message:i,reportedByUserId:a,hasSubmitted:!0,isSubmitting:!1,uiVisible:!1}))});case QN:var c=t.payload.userId;return VN(VN({},e),{},{byUserId:VN(VN({},e.byUserId),{},YN({},c,VN(VN({},e.byUserId[c]),{},{isSubmitting:!0})))});case XN:var s=t.payload.userId;return VN(VN({},e),{},{byUserId:VN(VN({},e.byUserId),{},YN({},s,VN(VN({},e.byUserId[s]),{},{uiVisible:!0})))});default:return e}},users:ut,versions:wf,viewContext:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:_W,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case D.Of:return OW(OW({},e),{},{context:t.payload.context});default:return e}}};(function(e){return wr.apply(this,arguments)})((function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.history,r=void 0===t?(0,n.PP)():t,o=e.initialState,a=void 0===o?{}:o,u=gW(),c=(0,Mo.MT)(LW({history:r,reducers:DW}),a,NW({routerMiddleware:(0,i.zk)(r),sagaMiddleware:u}));return{sagaMiddleware:u,store:c}}),{sagas:JG}).then((function(e){e.history;var t=e.renderApp;e.store;t(VF)}))})()})();
+//# sourceMappingURL=amo-2ab44ea6e64316f1fd35.js.map \ No newline at end of file
diff --git a/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/scripts/build.js b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/scripts/build.js
new file mode 100644
index 0000000000..930897008e
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/scripts/build.js
@@ -0,0 +1,158 @@
+// @remove-on-eject-begin
+/**
+ * Copyright (c) 2015-present, Facebook, Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+// @remove-on-eject-end
+'use strict';
+
+// Do this as the first thing so that any code reading it knows the right env.
+process.env.BABEL_ENV = 'production';
+process.env.NODE_ENV = 'production';
+
+// Makes the script crash on unhandled rejections instead of silently
+// ignoring them. In the future, promise rejections that are not handled will
+// terminate the Node.js process with a non-zero exit code.
+process.on('unhandledRejection', err => {
+ throw err;
+});
+
+// Ensure environment variables are read.
+require('../config/env');
+
+const path = require('path');
+const chalk = require('chalk');
+const fs = require('fs-extra');
+const webpack = require('webpack');
+const config = require('../config/webpack.config.prod');
+const paths = require('../config/paths');
+const checkRequiredFiles = require('react-dev-utils/checkRequiredFiles');
+const formatWebpackMessages = require('react-dev-utils/formatWebpackMessages');
+const printHostingInstructions = require('react-dev-utils/printHostingInstructions');
+const FileSizeReporter = require('react-dev-utils/FileSizeReporter');
+const printBuildError = require('react-dev-utils/printBuildError');
+
+const measureFileSizesBeforeBuild =
+ FileSizeReporter.measureFileSizesBeforeBuild;
+const printFileSizesAfterBuild = FileSizeReporter.printFileSizesAfterBuild;
+const useYarn = fs.existsSync(paths.yarnLockFile);
+
+// These sizes are pretty large. We'll warn for bundles exceeding them.
+const WARN_AFTER_BUNDLE_GZIP_SIZE = 512 * 1024;
+const WARN_AFTER_CHUNK_GZIP_SIZE = 1024 * 1024;
+
+// Warn and crash if required files are missing
+if (!checkRequiredFiles([paths.appHtml, paths.appIndexJs])) {
+ process.exit(1);
+}
+
+// First, read the current file sizes in build directory.
+// This lets us display how much they changed later.
+measureFileSizesBeforeBuild(paths.appBuild)
+ .then(previousFileSizes => {
+ // Remove all content but keep the directory so that
+ // if you're in it, you don't end up in Trash
+ fs.emptyDirSync(paths.appBuild);
+ // Merge with the public folder
+ copyPublicFolder();
+ // Start the webpack build
+ return build(previousFileSizes);
+ })
+ .then(
+ ({ stats, previousFileSizes, warnings }) => {
+ if (warnings.length) {
+ console.log(chalk.yellow('Compiled with warnings.\n'));
+ console.log(warnings.join('\n\n'));
+ console.log(
+ '\nSearch for the ' +
+ chalk.underline(chalk.yellow('keywords')) +
+ ' to learn more about each warning.'
+ );
+ console.log(
+ 'To ignore, add ' +
+ chalk.cyan('// eslint-disable-next-line') +
+ ' to the line before.\n'
+ );
+ } else {
+ console.log(chalk.green('Compiled successfully.\n'));
+ }
+
+ console.log('File sizes after gzip:\n');
+ printFileSizesAfterBuild(
+ stats,
+ previousFileSizes,
+ paths.appBuild,
+ WARN_AFTER_BUNDLE_GZIP_SIZE,
+ WARN_AFTER_CHUNK_GZIP_SIZE
+ );
+ console.log();
+
+ const appPackage = require(paths.appPackageJson);
+ const publicUrl = paths.publicUrl;
+ const publicPath = config.output.publicPath;
+ const buildFolder = path.relative(process.cwd(), paths.appBuild);
+ printHostingInstructions(
+ appPackage,
+ publicUrl,
+ publicPath,
+ buildFolder,
+ useYarn
+ );
+ },
+ err => {
+ console.log(chalk.red('Failed to compile.\n'));
+ printBuildError(err);
+ process.exit(1);
+ }
+ );
+
+// Create the production build and print the deployment instructions.
+function build(previousFileSizes) {
+ console.log('Creating an optimized production build...');
+
+ let compiler = webpack(config);
+ return new Promise((resolve, reject) => {
+ compiler.run((err, stats) => {
+ if (err) {
+ return reject(err);
+ }
+ const messages = formatWebpackMessages(stats.toJson({}, true));
+ if (messages.errors.length) {
+ // Only keep the first error. Others are often indicative
+ // of the same problem, but confuse the reader with noise.
+ if (messages.errors.length > 1) {
+ messages.errors.length = 1;
+ }
+ return reject(new Error(messages.errors.join('\n\n')));
+ }
+ if (
+ process.env.CI &&
+ (typeof process.env.CI !== 'string' ||
+ process.env.CI.toLowerCase() !== 'false') &&
+ messages.warnings.length
+ ) {
+ console.log(
+ chalk.yellow(
+ '\nTreating warnings as errors because process.env.CI = true.\n' +
+ 'Most CI servers set it automatically.\n'
+ )
+ );
+ return reject(new Error(messages.warnings.join('\n\n')));
+ }
+ return resolve({
+ stats,
+ previousFileSizes,
+ warnings: messages.warnings,
+ });
+ });
+ });
+}
+
+function copyPublicFolder() {
+ fs.copySync(paths.appPublic, paths.appBuild, {
+ dereference: true,
+ filter: file => file !== paths.appHtml,
+ });
+}
diff --git a/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/src/App.js b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/src/App.js
new file mode 100644
index 0000000000..711370c920
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/src/App.js
@@ -0,0 +1,35 @@
+import React, { Component } from 'react';
+import { stepInTest, debugStatement } from './step-in-test.js';
+import stepOverTest from './step-over-test.js';
+import stepOutTest from './step-out-test.js';
+
+class App extends Component {
+ render() {
+ return (
+ <div className="App">
+ <header className="App-header">
+ <h1 className="App-title">Welcome to React</h1>
+ </header>
+ <p className="App-intro">
+ To get started, edit <code>src/App.js</code> and save to reload.
+ </p>
+ </div>
+ );
+ }
+}
+
+window.hitBreakpoint = function breakpoint() {
+ stepInTest();
+ stepOverTest();
+ stepOutTest();
+ console.log('hitting a breakpoint');
+ return;
+}
+
+window.hitDebugStatement = function() {
+ debugStatement();
+ console.log('hitting a debug statement');
+ return;
+}
+
+export default App;
diff --git a/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/src/App.test.js b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/src/App.test.js
new file mode 100644
index 0000000000..b84af98d72
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/src/App.test.js
@@ -0,0 +1,8 @@
+import React from 'react';
+import ReactDOM from 'react-dom';
+import App from './App';
+
+it('renders without crashing', () => {
+ const div = document.createElement('div');
+ ReactDOM.render(<App />, div);
+});
diff --git a/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/src/index.js b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/src/index.js
new file mode 100644
index 0000000000..b597a44232
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/src/index.js
@@ -0,0 +1,5 @@
+import React from 'react';
+import ReactDOM from 'react-dom';
+import App from './App';
+
+ReactDOM.render(<App />, document.getElementById('root'));
diff --git a/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/src/step-in-test.js b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/src/step-in-test.js
new file mode 100644
index 0000000000..e4d3479b27
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/src/step-in-test.js
@@ -0,0 +1,10228 @@
+// depth: 3, width: 12
+// 2586 functions, 182225 characters generated
+
+function f0_0_0_0(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_0_0_1(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_0_0_2(){
+ return Math.random()
+}
+
+function f0_0_0_3(){
+ return Math.random()
+}
+
+function f0_0_0_4(){
+ return isNaN(undefined)
+}
+
+function f0_0_0_5(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_0_0_6(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_0_0_7(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_0_0_8(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_0_0_9(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_0_0_10(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_0_0_11(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_0_0(){
+ f0_0_0_0();
+ f0_0_0_1();
+ f0_0_0_2();
+ f0_0_0_3();
+ f0_0_0_4();
+ f0_0_0_5();
+ f0_0_0_6();
+ f0_0_0_7();
+ f0_0_0_8();
+ f0_0_0_9();
+ f0_0_0_10();
+ f0_0_0_11();
+
+}
+
+function f0_0_1_0(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_0_1_1(){
+ return Math.random()
+}
+
+function f0_0_1_2(){
+ return Math.random()
+}
+
+function f0_0_1_3(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_0_1_4(){
+ return Math.random()
+}
+
+function f0_0_1_5(){
+ return isNaN(undefined)
+}
+
+function f0_0_1_6(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_0_1_7(){
+ return isNaN(undefined)
+}
+
+function f0_0_1_8(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_0_1_9(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_0_1_10(){
+ return Math.random()
+}
+
+function f0_0_1_11(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_0_1(){
+ f0_0_1_0();
+ f0_0_1_1();
+ f0_0_1_2();
+ f0_0_1_3();
+ f0_0_1_4();
+ f0_0_1_5();
+ f0_0_1_6();
+ f0_0_1_7();
+ f0_0_1_8();
+ f0_0_1_9();
+ f0_0_1_10();
+ f0_0_1_11();
+
+}
+
+function f0_0_2_0(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_0_2_1(){
+ return isNaN(undefined)
+}
+
+function f0_0_2_2(){
+ return isNaN(undefined)
+}
+
+function f0_0_2_3(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_0_2_4(){
+ return Math.random()
+}
+
+function f0_0_2_5(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_0_2_6(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_0_2_7(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_0_2_8(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_0_2_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_0_2_10(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_0_2_11(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_0_2(){
+ f0_0_2_0();
+ f0_0_2_1();
+ f0_0_2_2();
+ f0_0_2_3();
+ f0_0_2_4();
+ f0_0_2_5();
+ f0_0_2_6();
+ f0_0_2_7();
+ f0_0_2_8();
+ f0_0_2_9();
+ f0_0_2_10();
+ f0_0_2_11();
+
+}
+
+function f0_0_3_0(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_0_3_1(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_0_3_2(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_0_3_3(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_0_3_4(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_0_3_5(){
+ return isNaN(undefined)
+}
+
+function f0_0_3_6(){
+ return isNaN(undefined)
+}
+
+function f0_0_3_7(){
+ return isNaN(undefined)
+}
+
+function f0_0_3_8(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_0_3_9(){
+ return Math.random()
+}
+
+function f0_0_3_10(){
+ return isNaN(undefined)
+}
+
+function f0_0_3_11(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_0_3(){
+ f0_0_3_0();
+ f0_0_3_1();
+ f0_0_3_2();
+ f0_0_3_3();
+ f0_0_3_4();
+ f0_0_3_5();
+ f0_0_3_6();
+ f0_0_3_7();
+ f0_0_3_8();
+ f0_0_3_9();
+ f0_0_3_10();
+ f0_0_3_11();
+
+}
+
+function f0_0_4_0(){
+ return isNaN(undefined)
+}
+
+function f0_0_4_1(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_0_4_2(){
+ return Math.random()
+}
+
+function f0_0_4_3(){
+ return isNaN(undefined)
+}
+
+function f0_0_4_4(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_0_4_5(){
+ return isNaN(undefined)
+}
+
+function f0_0_4_6(){
+ return isNaN(undefined)
+}
+
+function f0_0_4_7(){
+ return isNaN(undefined)
+}
+
+function f0_0_4_8(){
+ return isNaN(undefined)
+}
+
+function f0_0_4_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_0_4_10(){
+ return Math.random()
+}
+
+function f0_0_4_11(){
+ return isNaN(undefined)
+}
+
+function f0_0_4(){
+ f0_0_4_0();
+ f0_0_4_1();
+ f0_0_4_2();
+ f0_0_4_3();
+ f0_0_4_4();
+ f0_0_4_5();
+ f0_0_4_6();
+ f0_0_4_7();
+ f0_0_4_8();
+ f0_0_4_9();
+ f0_0_4_10();
+ f0_0_4_11();
+
+}
+
+function f0_0_5_0(){
+ return Math.random()
+}
+
+function f0_0_5_1(){
+ return Math.random()
+}
+
+function f0_0_5_2(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_0_5_3(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_0_5_4(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_0_5_5(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_0_5_6(){
+ return Math.random()
+}
+
+function f0_0_5_7(){
+ return isNaN(undefined)
+}
+
+function f0_0_5_8(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_0_5_9(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_0_5_10(){
+ return isNaN(undefined)
+}
+
+function f0_0_5_11(){
+ return Math.random()
+}
+
+function f0_0_5(){
+ f0_0_5_0();
+ f0_0_5_1();
+ f0_0_5_2();
+ f0_0_5_3();
+ f0_0_5_4();
+ f0_0_5_5();
+ f0_0_5_6();
+ f0_0_5_7();
+ f0_0_5_8();
+ f0_0_5_9();
+ f0_0_5_10();
+ f0_0_5_11();
+
+}
+
+function f0_0_6_0(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_0_6_1(){
+ return Math.random()
+}
+
+function f0_0_6_2(){
+ return isNaN(undefined)
+}
+
+function f0_0_6_3(){
+ return isNaN(undefined)
+}
+
+function f0_0_6_4(){
+ return isNaN(undefined)
+}
+
+function f0_0_6_5(){
+ return Math.random()
+}
+
+function f0_0_6_6(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_0_6_7(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_0_6_8(){
+ return Math.random()
+}
+
+function f0_0_6_9(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_0_6_10(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_0_6_11(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_0_6(){
+ f0_0_6_0();
+ f0_0_6_1();
+ f0_0_6_2();
+ f0_0_6_3();
+ f0_0_6_4();
+ f0_0_6_5();
+ f0_0_6_6();
+ f0_0_6_7();
+ f0_0_6_8();
+ f0_0_6_9();
+ f0_0_6_10();
+ f0_0_6_11();
+
+}
+
+function f0_0_7_0(){
+ return isNaN(undefined)
+}
+
+function f0_0_7_1(){
+ return Math.random()
+}
+
+function f0_0_7_2(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_0_7_3(){
+ return Math.random()
+}
+
+function f0_0_7_4(){
+ return Math.random()
+}
+
+function f0_0_7_5(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_0_7_6(){
+ return Math.random()
+}
+
+function f0_0_7_7(){
+ return Math.random()
+}
+
+function f0_0_7_8(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_0_7_9(){
+ return isNaN(undefined)
+}
+
+function f0_0_7_10(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_0_7_11(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_0_7(){
+ f0_0_7_0();
+ f0_0_7_1();
+ f0_0_7_2();
+ f0_0_7_3();
+ f0_0_7_4();
+ f0_0_7_5();
+ f0_0_7_6();
+ f0_0_7_7();
+ f0_0_7_8();
+ f0_0_7_9();
+ f0_0_7_10();
+ f0_0_7_11();
+
+}
+
+function f0_0_8_0(){
+ return Math.random()
+}
+
+function f0_0_8_1(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_0_8_2(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_0_8_3(){
+ return Math.random()
+}
+
+function f0_0_8_4(){
+ return isNaN(undefined)
+}
+
+function f0_0_8_5(){
+ return Math.random()
+}
+
+function f0_0_8_6(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_0_8_7(){
+ return Math.random()
+}
+
+function f0_0_8_8(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_0_8_9(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_0_8_10(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_0_8_11(){
+ return Math.random()
+}
+
+function f0_0_8(){
+ f0_0_8_0();
+ f0_0_8_1();
+ f0_0_8_2();
+ f0_0_8_3();
+ f0_0_8_4();
+ f0_0_8_5();
+ f0_0_8_6();
+ f0_0_8_7();
+ f0_0_8_8();
+ f0_0_8_9();
+ f0_0_8_10();
+ f0_0_8_11();
+
+}
+
+function f0_0_9_0(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_0_9_1(){
+ return Math.random()
+}
+
+function f0_0_9_2(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_0_9_3(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_0_9_4(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_0_9_5(){
+ return isNaN(undefined)
+}
+
+function f0_0_9_6(){
+ return Math.random()
+}
+
+function f0_0_9_7(){
+ return Math.random()
+}
+
+function f0_0_9_8(){
+ return Math.random()
+}
+
+function f0_0_9_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_0_9_10(){
+ return Math.random()
+}
+
+function f0_0_9_11(){
+ return Math.random()
+}
+
+function f0_0_9(){
+ f0_0_9_0();
+ f0_0_9_1();
+ f0_0_9_2();
+ f0_0_9_3();
+ f0_0_9_4();
+ f0_0_9_5();
+ f0_0_9_6();
+ f0_0_9_7();
+ f0_0_9_8();
+ f0_0_9_9();
+ f0_0_9_10();
+ f0_0_9_11();
+
+}
+
+function f0_0_10_0(){
+ return Math.random()
+}
+
+function f0_0_10_1(){
+ return isNaN(undefined)
+}
+
+function f0_0_10_2(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_0_10_3(){
+ return Math.random()
+}
+
+function f0_0_10_4(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_0_10_5(){
+ return isNaN(undefined)
+}
+
+function f0_0_10_6(){
+ return Math.random()
+}
+
+function f0_0_10_7(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_0_10_8(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_0_10_9(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_0_10_10(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_0_10_11(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_0_10(){
+ f0_0_10_0();
+ f0_0_10_1();
+ f0_0_10_2();
+ f0_0_10_3();
+ f0_0_10_4();
+ f0_0_10_5();
+ f0_0_10_6();
+ f0_0_10_7();
+ f0_0_10_8();
+ f0_0_10_9();
+ f0_0_10_10();
+ f0_0_10_11();
+
+}
+
+function f0_0_11_0(){
+ return Math.random()
+}
+
+function f0_0_11_1(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_0_11_2(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_0_11_3(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_0_11_4(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_0_11_5(){
+ return isNaN(undefined)
+}
+
+function f0_0_11_6(){
+ return isNaN(undefined)
+}
+
+function f0_0_11_7(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_0_11_8(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_0_11_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_0_11_10(){
+ return Math.random()
+}
+
+function f0_0_11_11(){
+ return Math.random()
+}
+
+function f0_0_11(){
+ f0_0_11_0();
+ f0_0_11_1();
+ f0_0_11_2();
+ f0_0_11_3();
+ f0_0_11_4();
+ f0_0_11_5();
+ f0_0_11_6();
+ f0_0_11_7();
+ f0_0_11_8();
+ f0_0_11_9();
+ f0_0_11_10();
+ f0_0_11_11();
+
+}
+
+function f0_0(){
+ f0_0_0();
+ f0_0_1();
+ f0_0_2();
+ f0_0_3();
+ f0_0_4();
+ f0_0_5();
+ f0_0_6();
+ f0_0_7();
+ f0_0_8();
+ f0_0_9();
+ f0_0_10();
+ f0_0_11();
+
+}
+
+function f0_1_0_0(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_1_0_1(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_1_0_2(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_1_0_3(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_1_0_4(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_1_0_5(){
+ return Math.random()
+}
+
+function f0_1_0_6(){
+ return isNaN(undefined)
+}
+
+function f0_1_0_7(){
+ return Math.random()
+}
+
+function f0_1_0_8(){
+ return isNaN(undefined)
+}
+
+function f0_1_0_9(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_1_0_10(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_1_0_11(){
+ return Math.random()
+}
+
+function f0_1_0(){
+ f0_1_0_0();
+ f0_1_0_1();
+ f0_1_0_2();
+ f0_1_0_3();
+ f0_1_0_4();
+ f0_1_0_5();
+ f0_1_0_6();
+ f0_1_0_7();
+ f0_1_0_8();
+ f0_1_0_9();
+ f0_1_0_10();
+ f0_1_0_11();
+
+}
+
+function f0_1_1_0(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_1_1_1(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_1_1_2(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_1_1_3(){
+ return isNaN(undefined)
+}
+
+function f0_1_1_4(){
+ return Math.random()
+}
+
+function f0_1_1_5(){
+ return isNaN(undefined)
+}
+
+function f0_1_1_6(){
+ return isNaN(undefined)
+}
+
+function f0_1_1_7(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_1_1_8(){
+ return Math.random()
+}
+
+function f0_1_1_9(){
+ return Math.random()
+}
+
+function f0_1_1_10(){
+ return Math.random()
+}
+
+function f0_1_1_11(){
+ return Math.random()
+}
+
+function f0_1_1(){
+ f0_1_1_0();
+ f0_1_1_1();
+ f0_1_1_2();
+ f0_1_1_3();
+ f0_1_1_4();
+ f0_1_1_5();
+ f0_1_1_6();
+ f0_1_1_7();
+ f0_1_1_8();
+ f0_1_1_9();
+ f0_1_1_10();
+ f0_1_1_11();
+
+}
+
+function f0_1_2_0(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_1_2_1(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_1_2_2(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_1_2_3(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_1_2_4(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_1_2_5(){
+ return Math.random()
+}
+
+function f0_1_2_6(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_1_2_7(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_1_2_8(){
+ return isNaN(undefined)
+}
+
+function f0_1_2_9(){
+ return Math.random()
+}
+
+function f0_1_2_10(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_1_2_11(){
+ return Math.random()
+}
+
+function f0_1_2(){
+ f0_1_2_0();
+ f0_1_2_1();
+ f0_1_2_2();
+ f0_1_2_3();
+ f0_1_2_4();
+ f0_1_2_5();
+ f0_1_2_6();
+ f0_1_2_7();
+ f0_1_2_8();
+ f0_1_2_9();
+ f0_1_2_10();
+ f0_1_2_11();
+
+}
+
+function f0_1_3_0(){
+ return isNaN(undefined)
+}
+
+function f0_1_3_1(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_1_3_2(){
+ return isNaN(undefined)
+}
+
+function f0_1_3_3(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_1_3_4(){
+ return isNaN(undefined)
+}
+
+function f0_1_3_5(){
+ return Math.random()
+}
+
+function f0_1_3_6(){
+ return Math.random()
+}
+
+function f0_1_3_7(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_1_3_8(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_1_3_9(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_1_3_10(){
+ return Math.random()
+}
+
+function f0_1_3_11(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_1_3(){
+ f0_1_3_0();
+ f0_1_3_1();
+ f0_1_3_2();
+ f0_1_3_3();
+ f0_1_3_4();
+ f0_1_3_5();
+ f0_1_3_6();
+ f0_1_3_7();
+ f0_1_3_8();
+ f0_1_3_9();
+ f0_1_3_10();
+ f0_1_3_11();
+
+}
+
+function f0_1_4_0(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_1_4_1(){
+ return isNaN(undefined)
+}
+
+function f0_1_4_2(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_1_4_3(){
+ return isNaN(undefined)
+}
+
+function f0_1_4_4(){
+ return isNaN(undefined)
+}
+
+function f0_1_4_5(){
+ return isNaN(undefined)
+}
+
+function f0_1_4_6(){
+ return isNaN(undefined)
+}
+
+function f0_1_4_7(){
+ return Math.random()
+}
+
+function f0_1_4_8(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_1_4_9(){
+ return isNaN(undefined)
+}
+
+function f0_1_4_10(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_1_4_11(){
+ return Math.random()
+}
+
+function f0_1_4(){
+ f0_1_4_0();
+ f0_1_4_1();
+ f0_1_4_2();
+ f0_1_4_3();
+ f0_1_4_4();
+ f0_1_4_5();
+ f0_1_4_6();
+ f0_1_4_7();
+ f0_1_4_8();
+ f0_1_4_9();
+ f0_1_4_10();
+ f0_1_4_11();
+
+}
+
+function f0_1_5_0(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_1_5_1(){
+ return isNaN(undefined)
+}
+
+function f0_1_5_2(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_1_5_3(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_1_5_4(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_1_5_5(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_1_5_6(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_1_5_7(){
+ return isNaN(undefined)
+}
+
+function f0_1_5_8(){
+ return isNaN(undefined)
+}
+
+function f0_1_5_9(){
+ return Math.random()
+}
+
+function f0_1_5_10(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_1_5_11(){
+ return isNaN(undefined)
+}
+
+function f0_1_5(){
+ f0_1_5_0();
+ f0_1_5_1();
+ f0_1_5_2();
+ f0_1_5_3();
+ f0_1_5_4();
+ f0_1_5_5();
+ f0_1_5_6();
+ f0_1_5_7();
+ f0_1_5_8();
+ f0_1_5_9();
+ f0_1_5_10();
+ f0_1_5_11();
+
+}
+
+function f0_1_6_0(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_1_6_1(){
+ return isNaN(undefined)
+}
+
+function f0_1_6_2(){
+ return isNaN(undefined)
+}
+
+function f0_1_6_3(){
+ return isNaN(undefined)
+}
+
+function f0_1_6_4(){
+ return isNaN(undefined)
+}
+
+function f0_1_6_5(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_1_6_6(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_1_6_7(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_1_6_8(){
+ return isNaN(undefined)
+}
+
+function f0_1_6_9(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_1_6_10(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_1_6_11(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_1_6(){
+ f0_1_6_0();
+ f0_1_6_1();
+ f0_1_6_2();
+ f0_1_6_3();
+ f0_1_6_4();
+ f0_1_6_5();
+ f0_1_6_6();
+ f0_1_6_7();
+ f0_1_6_8();
+ f0_1_6_9();
+ f0_1_6_10();
+ f0_1_6_11();
+
+}
+
+function f0_1_7_0(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_1_7_1(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_1_7_2(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_1_7_3(){
+ return Math.random()
+}
+
+function f0_1_7_4(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_1_7_5(){
+ return isNaN(undefined)
+}
+
+function f0_1_7_6(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_1_7_7(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_1_7_8(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_1_7_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_1_7_10(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_1_7_11(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_1_7(){
+ f0_1_7_0();
+ f0_1_7_1();
+ f0_1_7_2();
+ f0_1_7_3();
+ f0_1_7_4();
+ f0_1_7_5();
+ f0_1_7_6();
+ f0_1_7_7();
+ f0_1_7_8();
+ f0_1_7_9();
+ f0_1_7_10();
+ f0_1_7_11();
+
+}
+function f0_1_8_0(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_1_8_1(){
+ return isNaN(undefined)
+}
+
+function f0_1_8_2(){
+ return Math.random()
+}
+
+function f0_1_8_3(){
+ return isNaN(undefined)
+}
+
+function f0_1_8_4(){
+ return isNaN(undefined)
+}
+
+function f0_1_8_5(){
+ return isNaN(undefined)
+}
+
+function f0_1_8_6(){
+ return isNaN(undefined)
+}
+
+function f0_1_8_7(){
+ return Math.random()
+}
+
+function f0_1_8_8(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_1_8_9(){
+ return isNaN(undefined)
+}
+
+function f0_1_8_10(){
+ return isNaN(undefined)
+}
+
+function f0_1_8_11(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_1_8(){
+ f0_1_8_0();
+ f0_1_8_1();
+ f0_1_8_2();
+ f0_1_8_3();
+ f0_1_8_4();
+ f0_1_8_5();
+ f0_1_8_6();
+ f0_1_8_7();
+ f0_1_8_8();
+ f0_1_8_9();
+ f0_1_8_10();
+ f0_1_8_11();
+
+}
+
+function f0_1_9_0(){
+ return isNaN(undefined)
+}
+
+function f0_1_9_1(){
+ return isNaN(undefined)
+}
+
+function f0_1_9_2(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_1_9_3(){
+ return isNaN(undefined)
+}
+
+function f0_1_9_4(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_1_9_5(){
+ return isNaN(undefined)
+}
+
+function f0_1_9_6(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_1_9_7(){
+ return Math.random()
+}
+
+function f0_1_9_8(){
+ return isNaN(undefined)
+}
+
+function f0_1_9_9(){
+ return Math.random()
+}
+
+function f0_1_9_10(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_1_9_11(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_1_9(){
+ f0_1_9_0();
+ f0_1_9_1();
+ f0_1_9_2();
+ f0_1_9_3();
+ f0_1_9_4();
+ f0_1_9_5();
+ f0_1_9_6();
+ f0_1_9_7();
+ f0_1_9_8();
+ f0_1_9_9();
+ f0_1_9_10();
+ f0_1_9_11();
+
+}
+
+function f0_1_10_0(){
+ return isNaN(undefined)
+}
+
+function f0_1_10_1(){
+ return isNaN(undefined)
+}
+
+function f0_1_10_2(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_1_10_3(){
+ return Math.random()
+}
+
+function f0_1_10_4(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_1_10_5(){
+ return Math.random()
+}
+
+function f0_1_10_6(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_1_10_7(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_1_10_8(){
+ return isNaN(undefined)
+}
+
+function f0_1_10_9(){
+ return isNaN(undefined)
+}
+
+function f0_1_10_10(){
+ return isNaN(undefined)
+}
+
+function f0_1_10_11(){
+ return isNaN(undefined)
+}
+
+function f0_1_10(){
+ f0_1_10_0();
+ f0_1_10_1();
+ f0_1_10_2();
+ f0_1_10_3();
+ f0_1_10_4();
+ f0_1_10_5();
+ f0_1_10_6();
+ f0_1_10_7();
+ f0_1_10_8();
+ f0_1_10_9();
+ f0_1_10_10();
+ f0_1_10_11();
+
+}
+
+function f0_1_11_0(){
+ return Math.random()
+}
+
+function f0_1_11_1(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_1_11_2(){
+ return Math.random()
+}
+
+function f0_1_11_3(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_1_11_4(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_1_11_5(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_1_11_6(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_1_11_7(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_1_11_8(){
+ return Math.random()
+}
+
+function f0_1_11_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_1_11_10(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_1_11_11(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_1_11(){
+ f0_1_11_0();
+ f0_1_11_1();
+ f0_1_11_2();
+ f0_1_11_3();
+ f0_1_11_4();
+ f0_1_11_5();
+ f0_1_11_6();
+ f0_1_11_7();
+ f0_1_11_8();
+ f0_1_11_9();
+ f0_1_11_10();
+ f0_1_11_11();
+
+}
+
+function f0_1(){
+ f0_1_0();
+ f0_1_1();
+ f0_1_2();
+ f0_1_3();
+ f0_1_4();
+ f0_1_5();
+ f0_1_6();
+ f0_1_7();
+ f0_1_8();
+ f0_1_9();
+ f0_1_10();
+ f0_1_11();
+
+}
+
+function f0_2_0_0(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_2_0_1(){
+ return Math.random()
+}
+
+function f0_2_0_2(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_2_0_3(){
+ return isNaN(undefined)
+}
+
+function f0_2_0_4(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_2_0_5(){
+ return Math.random()
+}
+
+function f0_2_0_6(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_2_0_7(){
+ return Math.random()
+}
+
+function f0_2_0_8(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_2_0_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_2_0_10(){
+ return isNaN(undefined)
+}
+
+function f0_2_0_11(){
+ return isNaN(undefined)
+}
+
+function f0_2_0(){
+ f0_2_0_0();
+ f0_2_0_1();
+ f0_2_0_2();
+ f0_2_0_3();
+ f0_2_0_4();
+ f0_2_0_5();
+ f0_2_0_6();
+ f0_2_0_7();
+ f0_2_0_8();
+ f0_2_0_9();
+ f0_2_0_10();
+ f0_2_0_11();
+
+}
+
+function f0_2_1_0(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_2_1_1(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_2_1_2(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_2_1_3(){
+ return isNaN(undefined)
+}
+
+function f0_2_1_4(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_2_1_5(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_2_1_6(){
+ return isNaN(undefined)
+}
+
+function f0_2_1_7(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_2_1_8(){
+ return isNaN(undefined)
+}
+
+function f0_2_1_9(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_2_1_10(){
+ return isNaN(undefined)
+}
+
+function f0_2_1_11(){
+ return isNaN(undefined)
+}
+
+function f0_2_1(){
+ f0_2_1_0();
+ f0_2_1_1();
+ f0_2_1_2();
+ f0_2_1_3();
+ f0_2_1_4();
+ f0_2_1_5();
+ f0_2_1_6();
+ f0_2_1_7();
+ f0_2_1_8();
+ f0_2_1_9();
+ f0_2_1_10();
+ f0_2_1_11();
+
+}
+
+function f0_2_2_0(){
+ return Math.random()
+}
+
+function f0_2_2_1(){
+ return Math.random()
+}
+
+function f0_2_2_2(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_2_2_3(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_2_2_4(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_2_2_5(){
+ return Math.random()
+}
+
+function f0_2_2_6(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_2_2_7(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_2_2_8(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_2_2_9(){
+ return Math.random()
+}
+
+function f0_2_2_10(){
+ return Math.random()
+}
+
+function f0_2_2_11(){
+ return isNaN(undefined)
+}
+
+function f0_2_2(){
+ f0_2_2_0();
+ f0_2_2_1();
+ f0_2_2_2();
+ f0_2_2_3();
+ f0_2_2_4();
+ f0_2_2_5();
+ f0_2_2_6();
+ f0_2_2_7();
+ f0_2_2_8();
+ f0_2_2_9();
+ f0_2_2_10();
+ f0_2_2_11();
+
+}
+
+function f0_2_3_0(){
+ return Math.random()
+}
+
+function f0_2_3_1(){
+ return Math.random()
+}
+
+function f0_2_3_2(){
+ return Math.random()
+}
+
+function f0_2_3_3(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_2_3_4(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_2_3_5(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_2_3_6(){
+ return isNaN(undefined)
+}
+
+function f0_2_3_7(){
+ return isNaN(undefined)
+}
+
+function f0_2_3_8(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_2_3_9(){
+ return Math.random()
+}
+
+function f0_2_3_10(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_2_3_11(){
+ return isNaN(undefined)
+}
+
+function f0_2_3(){
+ f0_2_3_0();
+ f0_2_3_1();
+ f0_2_3_2();
+ f0_2_3_3();
+ f0_2_3_4();
+ f0_2_3_5();
+ f0_2_3_6();
+ f0_2_3_7();
+ f0_2_3_8();
+ f0_2_3_9();
+ f0_2_3_10();
+ f0_2_3_11();
+}
+
+function f0_2_4_0(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_2_4_1(){
+ return Math.random()
+}
+
+function f0_2_4_2(){
+ return Math.random()
+}
+
+function f0_2_4_3(){
+ return isNaN(undefined)
+}
+
+function f0_2_4_4(){
+ return isNaN(undefined)
+}
+
+function f0_2_4_5(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_2_4_6(){
+ return Math.random()
+}
+
+function f0_2_4_7(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_2_4_8(){
+ return Math.random()
+}
+
+function f0_2_4_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_2_4_10(){
+ return isNaN(undefined)
+}
+
+function f0_2_4_11(){
+ return isNaN(undefined)
+}
+
+function f0_2_4(){
+ f0_2_4_0();
+ f0_2_4_1();
+ f0_2_4_2();
+ f0_2_4_3();
+ f0_2_4_4();
+ f0_2_4_5();
+ f0_2_4_6();
+ f0_2_4_7();
+ f0_2_4_8();
+ f0_2_4_9();
+ f0_2_4_10();
+ f0_2_4_11();
+}
+
+function f0_2_5_0(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_2_5_1(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_2_5_2(){
+ return Math.random()
+}
+
+function f0_2_5_3(){
+ return Math.random()
+}
+
+function f0_2_5_4(){
+ return isNaN(undefined)
+}
+
+function f0_2_5_5(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_2_5_6(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_2_5_7(){
+ return isNaN(undefined)
+}
+
+function f0_2_5_8(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_2_5_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_2_5_10(){
+ return Math.random()
+}
+
+function f0_2_5_11(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_2_5(){
+ f0_2_5_0();
+ f0_2_5_1();
+ f0_2_5_2();
+ f0_2_5_3();
+ f0_2_5_4();
+ f0_2_5_5();
+ f0_2_5_6();
+ f0_2_5_7();
+ f0_2_5_8();
+ f0_2_5_9();
+ f0_2_5_10();
+ f0_2_5_11();
+}
+
+function f0_2_6_0(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_2_6_1(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_2_6_2(){
+ return Math.random()
+}
+
+function f0_2_6_3(){
+ return Math.random()
+}
+
+function f0_2_6_4(){
+ return Math.random()
+}
+
+function f0_2_6_5(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_2_6_6(){
+ return Math.random()
+}
+
+function f0_2_6_7(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_2_6_8(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_2_6_9(){
+ return Math.random()
+}
+
+function f0_2_6_10(){
+ return isNaN(undefined)
+}
+
+function f0_2_6_11(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_2_6(){
+ f0_2_6_0();
+ f0_2_6_1();
+ f0_2_6_2();
+ f0_2_6_3();
+ f0_2_6_4();
+ f0_2_6_5();
+ f0_2_6_6();
+ f0_2_6_7();
+ f0_2_6_8();
+ f0_2_6_9();
+ f0_2_6_10();
+ f0_2_6_11();
+}
+
+function f0_2_7_0(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_2_7_1(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_2_7_2(){
+ return isNaN(undefined)
+}
+
+function f0_2_7_3(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_2_7_4(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_2_7_5(){
+ return isNaN(undefined)
+}
+
+function f0_2_7_6(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_2_7_7(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_2_7_8(){
+ return isNaN(undefined)
+}
+
+function f0_2_7_9(){
+ return Math.random()
+}
+
+function f0_2_7_10(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_2_7_11(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_2_7(){
+ f0_2_7_0();
+ f0_2_7_1();
+ f0_2_7_2();
+ f0_2_7_3();
+ f0_2_7_4();
+ f0_2_7_5();
+ f0_2_7_6();
+ f0_2_7_7();
+ f0_2_7_8();
+ f0_2_7_9();
+ f0_2_7_10();
+ f0_2_7_11();
+}
+
+function f0_2_8_0(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_2_8_1(){
+ return Math.random()
+}
+
+function f0_2_8_2(){
+ return isNaN(undefined)
+}
+
+function f0_2_8_3(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_2_8_4(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_2_8_5(){
+ return isNaN(undefined)
+}
+
+function f0_2_8_6(){
+ return Math.random()
+}
+
+function f0_2_8_7(){
+ return isNaN(undefined)
+}
+
+function f0_2_8_8(){
+ return Math.random()
+}
+
+function f0_2_8_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_2_8_10(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_2_8_11(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_2_8(){
+ f0_2_8_0();
+ f0_2_8_1();
+ f0_2_8_2();
+ f0_2_8_3();
+ f0_2_8_4();
+ f0_2_8_5();
+ f0_2_8_6();
+ f0_2_8_7();
+ f0_2_8_8();
+ f0_2_8_9();
+ f0_2_8_10();
+ f0_2_8_11();
+}
+
+function f0_2_9_0(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_2_9_1(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_2_9_2(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_2_9_3(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_2_9_4(){
+ return isNaN(undefined)
+}
+
+function f0_2_9_5(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_2_9_6(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_2_9_7(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_2_9_8(){
+ return Math.random()
+}
+
+function f0_2_9_9(){
+ return Math.random()
+}
+
+function f0_2_9_10(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_2_9_11(){
+ return isNaN(undefined)
+}
+
+function f0_2_9(){
+ f0_2_9_0();
+ f0_2_9_1();
+ f0_2_9_2();
+ f0_2_9_3();
+ f0_2_9_4();
+ f0_2_9_5();
+ f0_2_9_6();
+ f0_2_9_7();
+ f0_2_9_8();
+ f0_2_9_9();
+ f0_2_9_10();
+ f0_2_9_11();
+}
+
+function f0_2_10_0(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_2_10_1(){
+ return Math.random()
+}
+
+function f0_2_10_2(){
+ return isNaN(undefined)
+}
+
+function f0_2_10_3(){
+ return isNaN(undefined)
+}
+
+function f0_2_10_4(){
+ return isNaN(undefined)
+}
+
+function f0_2_10_5(){
+ return isNaN(undefined)
+}
+
+function f0_2_10_6(){
+ return isNaN(undefined)
+}
+
+function f0_2_10_7(){
+ return Math.random()
+}
+
+function f0_2_10_8(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_2_10_9(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_2_10_10(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_2_10_11(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_2_10(){
+ f0_2_10_0();
+ f0_2_10_1();
+ f0_2_10_2();
+ f0_2_10_3();
+ f0_2_10_4();
+ f0_2_10_5();
+ f0_2_10_6();
+ f0_2_10_7();
+ f0_2_10_8();
+ f0_2_10_9();
+ f0_2_10_10();
+ f0_2_10_11();
+}
+
+function f0_2_11_0(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_2_11_1(){
+ return Math.random()
+}
+
+function f0_2_11_2(){
+ return Math.random()
+}
+
+function f0_2_11_3(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_2_11_4(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_2_11_5(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_2_11_6(){
+ return isNaN(undefined)
+}
+
+function f0_2_11_7(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_2_11_8(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_2_11_9(){
+ return isNaN(undefined)
+}
+
+function f0_2_11_10(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_2_11_11(){
+ return isNaN(undefined)
+}
+
+function f0_2_11(){
+ f0_2_11_0();
+ f0_2_11_1();
+ f0_2_11_2();
+ f0_2_11_3();
+ f0_2_11_4();
+ f0_2_11_5();
+ f0_2_11_6();
+ f0_2_11_7();
+ f0_2_11_8();
+ f0_2_11_9();
+ f0_2_11_10();
+ f0_2_11_11();
+}
+
+function f0_2(){
+ f0_2_0();
+ f0_2_1();
+ f0_2_2();
+ f0_2_3();
+ f0_2_4();
+ f0_2_5();
+ f0_2_6();
+ f0_2_7();
+ f0_2_8();
+ f0_2_9();
+ f0_2_10();
+ f0_2_11();
+
+}
+
+function f0_3_0_0(){
+ return Math.random()
+}
+
+function f0_3_0_1(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_3_0_2(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_3_0_3(){
+ return isNaN(undefined)
+}
+
+function f0_3_0_4(){
+ return Math.random()
+}
+
+function f0_3_0_5(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_3_0_6(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_3_0_7(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_3_0_8(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_3_0_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_3_0_10(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_3_0_11(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_3_0(){
+ f0_3_0_0();
+ f0_3_0_1();
+ f0_3_0_2();
+ f0_3_0_3();
+ f0_3_0_4();
+ f0_3_0_5();
+ f0_3_0_6();
+ f0_3_0_7();
+ f0_3_0_8();
+ f0_3_0_9();
+ f0_3_0_10();
+ f0_3_0_11();
+}
+
+function f0_3_1_0(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_3_1_1(){
+ return isNaN(undefined)
+}
+
+function f0_3_1_2(){
+ return Math.random()
+}
+
+function f0_3_1_3(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_3_1_4(){
+ return isNaN(undefined)
+}
+
+function f0_3_1_5(){
+ return Math.random()
+}
+
+function f0_3_1_6(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_3_1_7(){
+ return isNaN(undefined)
+}
+
+function f0_3_1_8(){
+ return Math.random()
+}
+
+function f0_3_1_9(){
+ return Math.random()
+}
+
+function f0_3_1_10(){
+ return Math.random()
+}
+
+function f0_3_1_11(){
+ return Math.random()
+}
+
+function f0_3_1(){
+ f0_3_1_0();
+ f0_3_1_1();
+ f0_3_1_2();
+ f0_3_1_3();
+ f0_3_1_4();
+ f0_3_1_5();
+ f0_3_1_6();
+ f0_3_1_7();
+ f0_3_1_8();
+ f0_3_1_9();
+ f0_3_1_10();
+ f0_3_1_11();
+}
+
+function f0_3_2_0(){
+ return Math.random()
+}
+
+function f0_3_2_1(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_3_2_2(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_3_2_3(){
+ return isNaN(undefined)
+}
+
+function f0_3_2_4(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_3_2_5(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_3_2_6(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_3_2_7(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_3_2_8(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_3_2_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_3_2_10(){
+ return isNaN(undefined)
+}
+
+function f0_3_2_11(){
+ return Math.random()
+}
+
+function f0_3_2(){
+ f0_3_2_0();
+ f0_3_2_1();
+ f0_3_2_2();
+ f0_3_2_3();
+ f0_3_2_4();
+ f0_3_2_5();
+ f0_3_2_6();
+ f0_3_2_7();
+ f0_3_2_8();
+ f0_3_2_9();
+ f0_3_2_10();
+ f0_3_2_11();
+}
+
+function f0_3_3_0(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_3_3_1(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_3_3_2(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_3_3_3(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_3_3_4(){
+ return isNaN(undefined)
+}
+
+function f0_3_3_5(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_3_3_6(){
+ return Math.random()
+}
+
+function f0_3_3_7(){
+ return isNaN(undefined)
+}
+
+function f0_3_3_8(){
+ return isNaN(undefined)
+}
+
+function f0_3_3_9(){
+ return isNaN(undefined)
+}
+
+function f0_3_3_10(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_3_3_11(){
+ return Math.random()
+}
+
+function f0_3_3(){
+ f0_3_3_0();
+ f0_3_3_1();
+ f0_3_3_2();
+ f0_3_3_3();
+ f0_3_3_4();
+ f0_3_3_5();
+ f0_3_3_6();
+ f0_3_3_7();
+ f0_3_3_8();
+ f0_3_3_9();
+ f0_3_3_10();
+ f0_3_3_11();
+}
+
+function f0_3_4_0(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_3_4_1(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_3_4_2(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_3_4_3(){
+ return Math.random()
+}
+
+function f0_3_4_4(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_3_4_5(){
+ return Math.random()
+}
+
+function f0_3_4_6(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_3_4_7(){
+ return Math.random()
+}
+
+function f0_3_4_8(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_3_4_9(){
+ return Math.random()
+}
+
+function f0_3_4_10(){
+ return Math.random()
+}
+
+function f0_3_4_11(){
+ return Math.random()
+}
+
+function f0_3_4(){
+ f0_3_4_0();
+ f0_3_4_1();
+ f0_3_4_2();
+ f0_3_4_3();
+ f0_3_4_4();
+ f0_3_4_5();
+ f0_3_4_6();
+ f0_3_4_7();
+ f0_3_4_8();
+ f0_3_4_9();
+ f0_3_4_10();
+ f0_3_4_11();
+}
+
+function f0_3_5_0(){
+ return Math.random()
+}
+
+function f0_3_5_1(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_3_5_2(){
+ return isNaN(undefined)
+}
+
+function f0_3_5_3(){
+ return isNaN(undefined)
+}
+
+function f0_3_5_4(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_3_5_5(){
+ return Math.random()
+}
+
+function f0_3_5_6(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_3_5_7(){
+ return Math.random()
+}
+
+function f0_3_5_8(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_3_5_9(){
+ return isNaN(undefined)
+}
+
+function f0_3_5_10(){
+ return Math.random()
+}
+
+function f0_3_5_11(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_3_5(){
+ f0_3_5_0();
+ f0_3_5_1();
+ f0_3_5_2();
+ f0_3_5_3();
+ f0_3_5_4();
+ f0_3_5_5();
+ f0_3_5_6();
+ f0_3_5_7();
+ f0_3_5_8();
+ f0_3_5_9();
+ f0_3_5_10();
+ f0_3_5_11();
+}
+
+function f0_3_6_0(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_3_6_1(){
+ return isNaN(undefined)
+}
+
+function f0_3_6_2(){
+ return Math.random()
+}
+
+function f0_3_6_3(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_3_6_4(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_3_6_5(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_3_6_6(){
+ return isNaN(undefined)
+}
+
+function f0_3_6_7(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_3_6_8(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_3_6_9(){
+ return isNaN(undefined)
+}
+
+function f0_3_6_10(){
+ return Math.random()
+}
+
+function f0_3_6_11(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_3_6(){
+ f0_3_6_0();
+ f0_3_6_1();
+ f0_3_6_2();
+ f0_3_6_3();
+ f0_3_6_4();
+ f0_3_6_5();
+ f0_3_6_6();
+ f0_3_6_7();
+ f0_3_6_8();
+ f0_3_6_9();
+ f0_3_6_10();
+ f0_3_6_11();
+}
+
+function f0_3_7_0(){
+ return isNaN(undefined)
+}
+
+function f0_3_7_1(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_3_7_2(){
+ return Math.random()
+}
+
+function f0_3_7_3(){
+ return isNaN(undefined)
+}
+
+function f0_3_7_4(){
+ return isNaN(undefined)
+}
+
+function f0_3_7_5(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_3_7_6(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_3_7_7(){
+ return isNaN(undefined)
+}
+
+function f0_3_7_8(){
+ return Math.random()
+}
+
+function f0_3_7_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_3_7_10(){
+ return isNaN(undefined)
+}
+
+function f0_3_7_11(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_3_7(){
+ f0_3_7_0();
+ f0_3_7_1();
+ f0_3_7_2();
+ f0_3_7_3();
+ f0_3_7_4();
+ f0_3_7_5();
+ f0_3_7_6();
+ f0_3_7_7();
+ f0_3_7_8();
+ f0_3_7_9();
+ f0_3_7_10();
+ f0_3_7_11();
+}
+
+function f0_3_8_0(){
+ return Math.random()
+}
+
+function f0_3_8_1(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_3_8_2(){
+ return isNaN(undefined)
+}
+
+function f0_3_8_3(){
+ return Math.random()
+}
+
+function f0_3_8_4(){
+ return Math.random()
+}
+
+function f0_3_8_5(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_3_8_6(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_3_8_7(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_3_8_8(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_3_8_9(){
+ return Math.random()
+}
+
+function f0_3_8_10(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_3_8_11(){
+ return Math.random()
+}
+
+function f0_3_8(){
+ f0_3_8_0();
+ f0_3_8_1();
+ f0_3_8_2();
+ f0_3_8_3();
+ f0_3_8_4();
+ f0_3_8_5();
+ f0_3_8_6();
+ f0_3_8_7();
+ f0_3_8_8();
+ f0_3_8_9();
+ f0_3_8_10();
+ f0_3_8_11();
+}
+
+function f0_3_9_0(){
+ return isNaN(undefined)
+}
+
+function f0_3_9_1(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_3_9_2(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_3_9_3(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_3_9_4(){
+ return isNaN(undefined)
+}
+
+function f0_3_9_5(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_3_9_6(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_3_9_7(){
+ return Math.random()
+}
+
+function f0_3_9_8(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_3_9_9(){
+ return Math.random()
+}
+
+function f0_3_9_10(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_3_9_11(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_3_9(){
+ f0_3_9_0();
+ f0_3_9_1();
+ f0_3_9_2();
+ f0_3_9_3();
+ f0_3_9_4();
+ f0_3_9_5();
+ f0_3_9_6();
+ f0_3_9_7();
+ f0_3_9_8();
+ f0_3_9_9();
+ f0_3_9_10();
+ f0_3_9_11();
+}
+
+function f0_3_10_0(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_3_10_1(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_3_10_2(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_3_10_3(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_3_10_4(){
+ return isNaN(undefined)
+}
+
+function f0_3_10_5(){
+ return Math.random()
+}
+
+function f0_3_10_6(){
+ return isNaN(undefined)
+}
+
+function f0_3_10_7(){
+ return isNaN(undefined)
+}
+
+function f0_3_10_8(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_3_10_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_3_10_10(){
+ return isNaN(undefined)
+}
+
+function f0_3_10_11(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_3_10(){
+ f0_3_10_0();
+ f0_3_10_1();
+ f0_3_10_2();
+ f0_3_10_3();
+ f0_3_10_4();
+ f0_3_10_5();
+ f0_3_10_6();
+ f0_3_10_7();
+ f0_3_10_8();
+ f0_3_10_9();
+ f0_3_10_10();
+ f0_3_10_11();
+}
+
+function f0_3_11_0(){
+ return isNaN(undefined)
+}
+
+function f0_3_11_1(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_3_11_2(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_3_11_3(){
+ return isNaN(undefined)
+}
+
+function f0_3_11_4(){
+ return isNaN(undefined)
+}
+
+function f0_3_11_5(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_3_11_6(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_3_11_7(){
+ return Math.random()
+}
+
+function f0_3_11_8(){
+ return Math.random()
+}
+
+function f0_3_11_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_3_11_10(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_3_11_11(){
+ return Math.random()
+}
+
+function f0_3_11(){
+ f0_3_11_0();
+ f0_3_11_1();
+ f0_3_11_2();
+ f0_3_11_3();
+ f0_3_11_4();
+ f0_3_11_5();
+ f0_3_11_6();
+ f0_3_11_7();
+ f0_3_11_8();
+ f0_3_11_9();
+ f0_3_11_10();
+ f0_3_11_11();
+}
+
+function f0_3(){
+ f0_3_0();
+ f0_3_1();
+ f0_3_2();
+ f0_3_3();
+ f0_3_4();
+ f0_3_5();
+ f0_3_6();
+ f0_3_7();
+ f0_3_8();
+ f0_3_9();
+ f0_3_10();
+ f0_3_11();
+
+}
+
+function f0_4_0_0(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_4_0_1(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_4_0_2(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_4_0_3(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_4_0_4(){
+ return Math.random()
+}
+
+function f0_4_0_5(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_4_0_6(){
+ return isNaN(undefined)
+}
+
+function f0_4_0_7(){
+ return isNaN(undefined)
+}
+
+function f0_4_0_8(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_4_0_9(){
+ return Math.random()
+}
+
+function f0_4_0_10(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_4_0_11(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_4_0(){
+ f0_4_0_0();
+ f0_4_0_1();
+ f0_4_0_2();
+ f0_4_0_3();
+ f0_4_0_4();
+ f0_4_0_5();
+ f0_4_0_6();
+ f0_4_0_7();
+ f0_4_0_8();
+ f0_4_0_9();
+ f0_4_0_10();
+ f0_4_0_11();
+}
+
+function f0_4_1_0(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_4_1_1(){
+ return Math.random()
+}
+
+function f0_4_1_2(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_4_1_3(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_4_1_4(){
+ return isNaN(undefined)
+}
+
+function f0_4_1_5(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_4_1_6(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_4_1_7(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_4_1_8(){
+ return isNaN(undefined)
+}
+
+function f0_4_1_9(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_4_1_10(){
+ return isNaN(undefined)
+}
+
+function f0_4_1_11(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_4_1(){
+ f0_4_1_0();
+ f0_4_1_1();
+ f0_4_1_2();
+ f0_4_1_3();
+ f0_4_1_4();
+ f0_4_1_5();
+ f0_4_1_6();
+ f0_4_1_7();
+ f0_4_1_8();
+ f0_4_1_9();
+ f0_4_1_10();
+ f0_4_1_11();
+}
+
+function f0_4_2_0(){
+ return Math.random()
+}
+
+function f0_4_2_1(){
+ return Math.random()
+}
+
+function f0_4_2_2(){
+ return isNaN(undefined)
+}
+
+function f0_4_2_3(){
+ return isNaN(undefined)
+}
+
+function f0_4_2_4(){
+ return isNaN(undefined)
+}
+
+function f0_4_2_5(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_4_2_6(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_4_2_7(){
+ return Math.random()
+}
+
+function f0_4_2_8(){
+ return Math.random()
+}
+
+function f0_4_2_9(){
+ return isNaN(undefined)
+}
+
+function f0_4_2_10(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_4_2_11(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_4_2(){
+ f0_4_2_0();
+ f0_4_2_1();
+ f0_4_2_2();
+ f0_4_2_3();
+ f0_4_2_4();
+ f0_4_2_5();
+ f0_4_2_6();
+ f0_4_2_7();
+ f0_4_2_8();
+ f0_4_2_9();
+ f0_4_2_10();
+ f0_4_2_11();
+}
+
+function f0_4_3_0(){
+ return isNaN(undefined)
+}
+
+function f0_4_3_1(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_4_3_2(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_4_3_3(){
+ return isNaN(undefined)
+}
+
+function f0_4_3_4(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_4_3_5(){
+ return isNaN(undefined)
+}
+
+function f0_4_3_6(){
+ return Math.random()
+}
+
+function f0_4_3_7(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_4_3_8(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_4_3_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_4_3_10(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_4_3_11(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_4_3(){
+ f0_4_3_0();
+ f0_4_3_1();
+ f0_4_3_2();
+ f0_4_3_3();
+ f0_4_3_4();
+ f0_4_3_5();
+ f0_4_3_6();
+ f0_4_3_7();
+ f0_4_3_8();
+ f0_4_3_9();
+ f0_4_3_10();
+ f0_4_3_11();
+}
+
+function f0_4_4_0(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_4_4_1(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_4_4_2(){
+ return isNaN(undefined)
+}
+
+function f0_4_4_3(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_4_4_4(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_4_4_5(){
+ return isNaN(undefined)
+}
+
+function f0_4_4_6(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_4_4_7(){
+ return Math.random()
+}
+
+function f0_4_4_8(){
+ return isNaN(undefined)
+}
+
+function f0_4_4_9(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_4_4_10(){
+ return isNaN(undefined)
+}
+
+function f0_4_4_11(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_4_4(){
+ f0_4_4_0();
+ f0_4_4_1();
+ f0_4_4_2();
+ f0_4_4_3();
+ f0_4_4_4();
+ f0_4_4_5();
+ f0_4_4_6();
+ f0_4_4_7();
+ f0_4_4_8();
+ f0_4_4_9();
+ f0_4_4_10();
+ f0_4_4_11();
+}
+
+function f0_4_5_0(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_4_5_1(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_4_5_2(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_4_5_3(){
+ return isNaN(undefined)
+}
+
+function f0_4_5_4(){
+ return Math.random()
+}
+
+function f0_4_5_5(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_4_5_6(){
+ return isNaN(undefined)
+}
+
+function f0_4_5_7(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_4_5_8(){
+ return Math.random()
+}
+
+function f0_4_5_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_4_5_10(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_4_5_11(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_4_5(){
+ f0_4_5_0();
+ f0_4_5_1();
+ f0_4_5_2();
+ f0_4_5_3();
+ f0_4_5_4();
+ f0_4_5_5();
+ f0_4_5_6();
+ f0_4_5_7();
+ f0_4_5_8();
+ f0_4_5_9();
+ f0_4_5_10();
+ f0_4_5_11();
+}
+
+function f0_4_6_0(){
+ return Math.random()
+}
+
+function f0_4_6_1(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_4_6_2(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_4_6_3(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_4_6_4(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_4_6_5(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_4_6_6(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_4_6_7(){
+ return Math.random()
+}
+
+function f0_4_6_8(){
+ return isNaN(undefined)
+}
+
+function f0_4_6_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_4_6_10(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_4_6_11(){
+ return Math.random()
+}
+
+function f0_4_6(){
+ f0_4_6_0();
+ f0_4_6_1();
+ f0_4_6_2();
+ f0_4_6_3();
+ f0_4_6_4();
+ f0_4_6_5();
+ f0_4_6_6();
+ f0_4_6_7();
+ f0_4_6_8();
+ f0_4_6_9();
+ f0_4_6_10();
+ f0_4_6_11();
+}
+
+function f0_4_7_0(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_4_7_1(){
+ return Math.random()
+}
+
+function f0_4_7_2(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_4_7_3(){
+ return isNaN(undefined)
+}
+
+function f0_4_7_4(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_4_7_5(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_4_7_6(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_4_7_7(){
+ return isNaN(undefined)
+}
+
+function f0_4_7_8(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_4_7_9(){
+ return Math.random()
+}
+
+function f0_4_7_10(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_4_7_11(){
+ return isNaN(undefined)
+}
+
+function f0_4_7(){
+ f0_4_7_0();
+ f0_4_7_1();
+ f0_4_7_2();
+ f0_4_7_3();
+ f0_4_7_4();
+ f0_4_7_5();
+ f0_4_7_6();
+ f0_4_7_7();
+ f0_4_7_8();
+ f0_4_7_9();
+ f0_4_7_10();
+ f0_4_7_11();
+}
+
+function f0_4_8_0(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_4_8_1(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_4_8_2(){
+ return Math.random()
+}
+
+function f0_4_8_3(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_4_8_4(){
+ return Math.random()
+}
+
+function f0_4_8_5(){
+ return isNaN(undefined)
+}
+
+function f0_4_8_6(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_4_8_7(){
+ return Math.random()
+}
+
+function f0_4_8_8(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_4_8_9(){
+ return isNaN(undefined)
+}
+
+function f0_4_8_10(){
+ return Math.random()
+}
+
+function f0_4_8_11(){
+ return isNaN(undefined)
+}
+
+function f0_4_8(){
+ f0_4_8_0();
+ f0_4_8_1();
+ f0_4_8_2();
+ f0_4_8_3();
+ f0_4_8_4();
+ f0_4_8_5();
+ f0_4_8_6();
+ f0_4_8_7();
+ f0_4_8_8();
+ f0_4_8_9();
+ f0_4_8_10();
+ f0_4_8_11();
+}
+
+function f0_4_9_0(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_4_9_1(){
+ return Math.random()
+}
+
+function f0_4_9_2(){
+ return Math.random()
+}
+
+function f0_4_9_3(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_4_9_4(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_4_9_5(){
+ return isNaN(undefined)
+}
+
+function f0_4_9_6(){
+ return isNaN(undefined)
+}
+
+function f0_4_9_7(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_4_9_8(){
+ return Math.random()
+}
+
+function f0_4_9_9(){
+ return Math.random()
+}
+
+function f0_4_9_10(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_4_9_11(){
+ return Math.random()
+}
+
+function f0_4_9(){
+ f0_4_9_0();
+ f0_4_9_1();
+ f0_4_9_2();
+ f0_4_9_3();
+ f0_4_9_4();
+ f0_4_9_5();
+ f0_4_9_6();
+ f0_4_9_7();
+ f0_4_9_8();
+ f0_4_9_9();
+ f0_4_9_10();
+ f0_4_9_11();
+}
+
+function f0_4_10_0(){
+ return isNaN(undefined)
+}
+
+function f0_4_10_1(){
+ return isNaN(undefined)
+}
+
+function f0_4_10_2(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_4_10_3(){
+ return Math.random()
+}
+
+function f0_4_10_4(){
+ return Math.random()
+}
+
+function f0_4_10_5(){
+ return Math.random()
+}
+
+function f0_4_10_6(){
+ return isNaN(undefined)
+}
+
+function f0_4_10_7(){
+ return isNaN(undefined)
+}
+
+function f0_4_10_8(){
+ return Math.random()
+}
+
+function f0_4_10_9(){
+ return Math.random()
+}
+
+function f0_4_10_10(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_4_10_11(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_4_10(){
+ f0_4_10_0();
+ f0_4_10_1();
+ f0_4_10_2();
+ f0_4_10_3();
+ f0_4_10_4();
+ f0_4_10_5();
+ f0_4_10_6();
+ f0_4_10_7();
+ f0_4_10_8();
+ f0_4_10_9();
+ f0_4_10_10();
+ f0_4_10_11();
+}
+
+function f0_4_11_0(){
+ return isNaN(undefined)
+}
+
+function f0_4_11_1(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_4_11_2(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_4_11_3(){
+ return isNaN(undefined)
+}
+
+function f0_4_11_4(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_4_11_5(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_4_11_6(){
+ return isNaN(undefined)
+}
+
+function f0_4_11_7(){
+ return isNaN(undefined)
+}
+
+function f0_4_11_8(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_4_11_9(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_4_11_10(){
+ return isNaN(undefined)
+}
+
+function f0_4_11_11(){
+ return isNaN(undefined)
+}
+
+function f0_4_11(){
+ f0_4_11_0();
+ f0_4_11_1();
+ f0_4_11_2();
+ f0_4_11_3();
+ f0_4_11_4();
+ f0_4_11_5();
+ f0_4_11_6();
+ f0_4_11_7();
+ f0_4_11_8();
+ f0_4_11_9();
+ f0_4_11_10();
+ f0_4_11_11();
+}
+
+function f0_4(){
+ f0_4_0();
+ f0_4_1();
+ f0_4_2();
+ f0_4_3();
+ f0_4_4();
+ f0_4_5();
+ f0_4_6();
+ f0_4_7();
+ f0_4_8();
+ f0_4_9();
+ f0_4_10();
+ f0_4_11();
+
+}
+
+function f0_5_0_0(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_5_0_1(){
+ return Math.random()
+}
+
+function f0_5_0_2(){
+ return isNaN(undefined)
+}
+
+function f0_5_0_3(){
+ return Math.random()
+}
+
+function f0_5_0_4(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_5_0_5(){
+ return isNaN(undefined)
+}
+
+function f0_5_0_6(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_5_0_7(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_5_0_8(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_5_0_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_5_0_10(){
+ return Math.random()
+}
+
+function f0_5_0_11(){
+ return isNaN(undefined)
+}
+
+function f0_5_0(){
+ f0_5_0_0();
+ f0_5_0_1();
+ f0_5_0_2();
+ f0_5_0_3();
+ f0_5_0_4();
+ f0_5_0_5();
+ f0_5_0_6();
+ f0_5_0_7();
+ f0_5_0_8();
+ f0_5_0_9();
+ f0_5_0_10();
+ f0_5_0_11();
+}
+
+function f0_5_1_0(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_5_1_1(){
+ return isNaN(undefined)
+}
+
+function f0_5_1_2(){
+ return Math.random()
+}
+
+function f0_5_1_3(){
+ return isNaN(undefined)
+}
+
+function f0_5_1_4(){
+ return Math.random()
+}
+
+function f0_5_1_5(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_5_1_6(){
+ return isNaN(undefined)
+}
+
+function f0_5_1_7(){
+ return isNaN(undefined)
+}
+
+function f0_5_1_8(){
+ return Math.random()
+}
+
+function f0_5_1_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_5_1_10(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_5_1_11(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_5_1(){
+ f0_5_1_0();
+ f0_5_1_1();
+ f0_5_1_2();
+ f0_5_1_3();
+ f0_5_1_4();
+ f0_5_1_5();
+ f0_5_1_6();
+ f0_5_1_7();
+ f0_5_1_8();
+ f0_5_1_9();
+ f0_5_1_10();
+ f0_5_1_11();
+}
+
+function f0_5_2_0(){
+ return isNaN(undefined)
+}
+
+function f0_5_2_1(){
+ return isNaN(undefined)
+}
+
+function f0_5_2_2(){
+ return Math.random()
+}
+
+function f0_5_2_3(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_5_2_4(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_5_2_5(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_5_2_6(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_5_2_7(){
+ return Math.random()
+}
+
+function f0_5_2_8(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_5_2_9(){
+ return isNaN(undefined)
+}
+
+function f0_5_2_10(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_5_2_11(){
+ return isNaN(undefined)
+}
+
+function f0_5_2(){
+ f0_5_2_0();
+ f0_5_2_1();
+ f0_5_2_2();
+ f0_5_2_3();
+ f0_5_2_4();
+ f0_5_2_5();
+ f0_5_2_6();
+ f0_5_2_7();
+ f0_5_2_8();
+ f0_5_2_9();
+ f0_5_2_10();
+ f0_5_2_11();
+}
+
+function f0_5_3_0(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_5_3_1(){
+ return isNaN(undefined)
+}
+
+function f0_5_3_2(){
+ return Math.random()
+}
+
+function f0_5_3_3(){
+ return isNaN(undefined)
+}
+
+function f0_5_3_4(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_5_3_5(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_5_3_6(){
+ return isNaN(undefined)
+}
+
+function f0_5_3_7(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_5_3_8(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_5_3_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_5_3_10(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_5_3_11(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_5_3(){
+ f0_5_3_0();
+ f0_5_3_1();
+ f0_5_3_2();
+ f0_5_3_3();
+ f0_5_3_4();
+ f0_5_3_5();
+ f0_5_3_6();
+ f0_5_3_7();
+ f0_5_3_8();
+ f0_5_3_9();
+ f0_5_3_10();
+ f0_5_3_11();
+}
+
+function f0_5_4_0(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_5_4_1(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_5_4_2(){
+ return Math.random()
+}
+
+function f0_5_4_3(){
+ return Math.random()
+}
+
+function f0_5_4_4(){
+ return Math.random()
+}
+
+function f0_5_4_5(){
+ return Math.random()
+}
+
+function f0_5_4_6(){
+ return Math.random()
+}
+
+function f0_5_4_7(){
+ return Math.random()
+}
+
+function f0_5_4_8(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_5_4_9(){
+ return Math.random()
+}
+
+function f0_5_4_10(){
+ return isNaN(undefined)
+}
+
+function f0_5_4_11(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_5_4(){
+ f0_5_4_0();
+ f0_5_4_1();
+ f0_5_4_2();
+ f0_5_4_3();
+ f0_5_4_4();
+ f0_5_4_5();
+ f0_5_4_6();
+ f0_5_4_7();
+ f0_5_4_8();
+ f0_5_4_9();
+ f0_5_4_10();
+ f0_5_4_11();
+}
+
+function f0_5_5_0(){
+ return isNaN(undefined)
+}
+
+function f0_5_5_1(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_5_5_2(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_5_5_3(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_5_5_4(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_5_5_5(){
+ return isNaN(undefined)
+}
+
+function f0_5_5_6(){
+ return Math.random()
+}
+
+function f0_5_5_7(){
+ return Math.random()
+}
+
+function f0_5_5_8(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_5_5_9(){
+ return Math.random()
+}
+
+function f0_5_5_10(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_5_5_11(){
+ return Math.random()
+}
+
+function f0_5_5(){
+ f0_5_5_0();
+ f0_5_5_1();
+ f0_5_5_2();
+ f0_5_5_3();
+ f0_5_5_4();
+ f0_5_5_5();
+ f0_5_5_6();
+ f0_5_5_7();
+ f0_5_5_8();
+ f0_5_5_9();
+ f0_5_5_10();
+ f0_5_5_11();
+}
+
+function f0_5_6_0(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_5_6_1(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_5_6_2(){
+ return Math.random()
+}
+
+function f0_5_6_3(){
+ return isNaN(undefined)
+}
+
+function f0_5_6_4(){
+ return Math.random()
+}
+
+function f0_5_6_5(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_5_6_6(){
+ return Math.random()
+}
+
+function f0_5_6_7(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_5_6_8(){
+ return isNaN(undefined)
+}
+
+function f0_5_6_9(){
+ return isNaN(undefined)
+}
+
+function f0_5_6_10(){
+ return Math.random()
+}
+
+function f0_5_6_11(){
+ return Math.random()
+}
+
+function f0_5_6(){
+ f0_5_6_0();
+ f0_5_6_1();
+ f0_5_6_2();
+ f0_5_6_3();
+ f0_5_6_4();
+ f0_5_6_5();
+ f0_5_6_6();
+ f0_5_6_7();
+ f0_5_6_8();
+ f0_5_6_9();
+ f0_5_6_10();
+ f0_5_6_11();
+}
+
+function f0_5_7_0(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_5_7_1(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_5_7_2(){
+ return Math.random()
+}
+
+function f0_5_7_3(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_5_7_4(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_5_7_5(){
+ return Math.random()
+}
+
+function f0_5_7_6(){
+ return isNaN(undefined)
+}
+
+function f0_5_7_7(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_5_7_8(){
+ return Math.random()
+}
+
+function f0_5_7_9(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_5_7_10(){
+ return Math.random()
+}
+
+function f0_5_7_11(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_5_7(){
+ f0_5_7_0();
+ f0_5_7_1();
+ f0_5_7_2();
+ f0_5_7_3();
+ f0_5_7_4();
+ f0_5_7_5();
+ f0_5_7_6();
+ f0_5_7_7();
+ f0_5_7_8();
+ f0_5_7_9();
+ f0_5_7_10();
+ f0_5_7_11();
+}
+
+function f0_5_8_0(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_5_8_1(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_5_8_2(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_5_8_3(){
+ return Math.random()
+}
+
+function f0_5_8_4(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_5_8_5(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_5_8_6(){
+ return Math.random()
+}
+
+function f0_5_8_7(){
+ return Math.random()
+}
+
+function f0_5_8_8(){
+ return isNaN(undefined)
+}
+
+function f0_5_8_9(){
+ return Math.random()
+}
+
+function f0_5_8_10(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_5_8_11(){
+ return isNaN(undefined)
+}
+
+function f0_5_8(){
+ f0_5_8_0();
+ f0_5_8_1();
+ f0_5_8_2();
+ f0_5_8_3();
+ f0_5_8_4();
+ f0_5_8_5();
+ f0_5_8_6();
+ f0_5_8_7();
+ f0_5_8_8();
+ f0_5_8_9();
+ f0_5_8_10();
+ f0_5_8_11();
+}
+
+function f0_5_9_0(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_5_9_1(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_5_9_2(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_5_9_3(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_5_9_4(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_5_9_5(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_5_9_6(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_5_9_7(){
+ return Math.random()
+}
+
+function f0_5_9_8(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_5_9_9(){
+ return Math.random()
+}
+
+function f0_5_9_10(){
+ return Math.random()
+}
+
+function f0_5_9_11(){
+ return isNaN(undefined)
+}
+
+function f0_5_9(){
+ f0_5_9_0();
+ f0_5_9_1();
+ f0_5_9_2();
+ f0_5_9_3();
+ f0_5_9_4();
+ f0_5_9_5();
+ f0_5_9_6();
+ f0_5_9_7();
+ f0_5_9_8();
+ f0_5_9_9();
+ f0_5_9_10();
+ f0_5_9_11();
+}
+
+function f0_5_10_0(){
+ return isNaN(undefined)
+}
+
+function f0_5_10_1(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_5_10_2(){
+ return isNaN(undefined)
+}
+
+function f0_5_10_3(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_5_10_4(){
+ return Math.random()
+}
+
+function f0_5_10_5(){
+ return Math.random()
+}
+
+function f0_5_10_6(){
+ return Math.random()
+}
+
+function f0_5_10_7(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_5_10_8(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_5_10_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_5_10_10(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_5_10_11(){
+ return Math.random()
+}
+
+function f0_5_10(){
+ f0_5_10_0();
+ f0_5_10_1();
+ f0_5_10_2();
+ f0_5_10_3();
+ f0_5_10_4();
+ f0_5_10_5();
+ f0_5_10_6();
+ f0_5_10_7();
+ f0_5_10_8();
+ f0_5_10_9();
+ f0_5_10_10();
+ f0_5_10_11();
+}
+
+function f0_5_11_0(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_5_11_1(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_5_11_2(){
+ return Math.random()
+}
+
+function f0_5_11_3(){
+ return Math.random()
+}
+
+function f0_5_11_4(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_5_11_5(){
+ return Math.random()
+}
+
+function f0_5_11_6(){
+ return Math.random()
+}
+
+function f0_5_11_7(){
+ return isNaN(undefined)
+}
+
+function f0_5_11_8(){
+ return isNaN(undefined)
+}
+
+function f0_5_11_9(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_5_11_10(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_5_11_11(){
+ return isNaN(undefined)
+}
+
+function f0_5_11(){
+ f0_5_11_0();
+ f0_5_11_1();
+ f0_5_11_2();
+ f0_5_11_3();
+ f0_5_11_4();
+ f0_5_11_5();
+ f0_5_11_6();
+ f0_5_11_7();
+ f0_5_11_8();
+ f0_5_11_9();
+ f0_5_11_10();
+ f0_5_11_11();
+}
+
+function f0_5(){
+ f0_5_0();
+ f0_5_1();
+ f0_5_2();
+ f0_5_3();
+ f0_5_4();
+ f0_5_5();
+ f0_5_6();
+ f0_5_7();
+ f0_5_8();
+ f0_5_9();
+ f0_5_10();
+ f0_5_11();
+
+}
+
+function f0_6_0_0(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_6_0_1(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_6_0_2(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_6_0_3(){
+ return Math.random()
+}
+
+function f0_6_0_4(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_6_0_5(){
+ return isNaN(undefined)
+}
+
+function f0_6_0_6(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_6_0_7(){
+ return Math.random()
+}
+
+function f0_6_0_8(){
+ return isNaN(undefined)
+}
+
+function f0_6_0_9(){
+ return isNaN(undefined)
+}
+
+function f0_6_0_10(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_6_0_11(){
+ return isNaN(undefined)
+}
+
+function f0_6_0(){
+ f0_6_0_0();
+ f0_6_0_1();
+ f0_6_0_2();
+ f0_6_0_3();
+ f0_6_0_4();
+ f0_6_0_5();
+ f0_6_0_6();
+ f0_6_0_7();
+ f0_6_0_8();
+ f0_6_0_9();
+ f0_6_0_10();
+ f0_6_0_11();
+}
+
+function f0_6_1_0(){
+ return isNaN(undefined)
+}
+
+function f0_6_1_1(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_6_1_2(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_6_1_3(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_6_1_4(){
+ return Math.random()
+}
+
+function f0_6_1_5(){
+ return isNaN(undefined)
+}
+
+function f0_6_1_6(){
+ return isNaN(undefined)
+}
+
+function f0_6_1_7(){
+ return isNaN(undefined)
+}
+
+function f0_6_1_8(){
+ return Math.random()
+}
+
+function f0_6_1_9(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_6_1_10(){
+ return Math.random()
+}
+
+function f0_6_1_11(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_6_1(){
+ f0_6_1_0();
+ f0_6_1_1();
+ f0_6_1_2();
+ f0_6_1_3();
+ f0_6_1_4();
+ f0_6_1_5();
+ f0_6_1_6();
+ f0_6_1_7();
+ f0_6_1_8();
+ f0_6_1_9();
+ f0_6_1_10();
+ f0_6_1_11();
+}
+
+function f0_6_2_0(){
+ return isNaN(undefined)
+}
+
+function f0_6_2_1(){
+ return Math.random()
+}
+
+function f0_6_2_2(){
+ return isNaN(undefined)
+}
+
+function f0_6_2_3(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_6_2_4(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_6_2_5(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_6_2_6(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_6_2_7(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_6_2_8(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_6_2_9(){
+ return Math.random()
+}
+
+function f0_6_2_10(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_6_2_11(){
+ return isNaN(undefined)
+}
+
+function f0_6_2(){
+ f0_6_2_0();
+ f0_6_2_1();
+ f0_6_2_2();
+ f0_6_2_3();
+ f0_6_2_4();
+ f0_6_2_5();
+ f0_6_2_6();
+ f0_6_2_7();
+ f0_6_2_8();
+ f0_6_2_9();
+ f0_6_2_10();
+ f0_6_2_11();
+}
+
+function f0_6_3_0(){
+ return Math.random()
+}
+
+function f0_6_3_1(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_6_3_2(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_6_3_3(){
+ return isNaN(undefined)
+}
+
+function f0_6_3_4(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_6_3_5(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_6_3_6(){
+ return Math.random()
+}
+
+function f0_6_3_7(){
+ return isNaN(undefined)
+}
+
+function f0_6_3_8(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_6_3_9(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_6_3_10(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_6_3_11(){
+ return Math.random()
+}
+
+function f0_6_3(){
+ f0_6_3_0();
+ f0_6_3_1();
+ f0_6_3_2();
+ f0_6_3_3();
+ f0_6_3_4();
+ f0_6_3_5();
+ f0_6_3_6();
+ f0_6_3_7();
+ f0_6_3_8();
+ f0_6_3_9();
+ f0_6_3_10();
+ f0_6_3_11();
+}
+
+function f0_6_4_0(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_6_4_1(){
+ return Math.random()
+}
+
+function f0_6_4_2(){
+ return isNaN(undefined)
+}
+
+function f0_6_4_3(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_6_4_4(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_6_4_5(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_6_4_6(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_6_4_7(){
+ return Math.random()
+}
+
+function f0_6_4_8(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_6_4_9(){
+ return isNaN(undefined)
+}
+
+function f0_6_4_10(){
+ return isNaN(undefined)
+}
+
+function f0_6_4_11(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_6_4(){
+ f0_6_4_0();
+ f0_6_4_1();
+ f0_6_4_2();
+ f0_6_4_3();
+ f0_6_4_4();
+ f0_6_4_5();
+ f0_6_4_6();
+ f0_6_4_7();
+ f0_6_4_8();
+ f0_6_4_9();
+ f0_6_4_10();
+ f0_6_4_11();
+}
+
+function f0_6_5_0(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_6_5_1(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_6_5_2(){
+ return isNaN(undefined)
+}
+
+function f0_6_5_3(){
+ return isNaN(undefined)
+}
+
+function f0_6_5_4(){
+ return Math.random()
+}
+
+function f0_6_5_5(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_6_5_6(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_6_5_7(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_6_5_8(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_6_5_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_6_5_10(){
+ return isNaN(undefined)
+}
+
+function f0_6_5_11(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_6_5(){
+ f0_6_5_0();
+ f0_6_5_1();
+ f0_6_5_2();
+ f0_6_5_3();
+ f0_6_5_4();
+ f0_6_5_5();
+ f0_6_5_6();
+ f0_6_5_7();
+ f0_6_5_8();
+ f0_6_5_9();
+ f0_6_5_10();
+ f0_6_5_11();
+}
+
+function f0_6_6_0(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_6_6_1(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_6_6_2(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_6_6_3(){
+ return Math.random()
+}
+
+function f0_6_6_4(){
+ return isNaN(undefined)
+}
+
+function f0_6_6_5(){
+ return isNaN(undefined)
+}
+
+function f0_6_6_6(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_6_6_7(){
+ return isNaN(undefined)
+}
+
+function f0_6_6_8(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_6_6_9(){
+ return isNaN(undefined)
+}
+
+function f0_6_6_10(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_6_6_11(){
+ return isNaN(undefined)
+}
+
+function f0_6_6(){
+ f0_6_6_0();
+ f0_6_6_1();
+ f0_6_6_2();
+ f0_6_6_3();
+ f0_6_6_4();
+ f0_6_6_5();
+ f0_6_6_6();
+ f0_6_6_7();
+ f0_6_6_8();
+ f0_6_6_9();
+ f0_6_6_10();
+ f0_6_6_11();
+}
+
+function f0_6_7_0(){
+ return isNaN(undefined)
+}
+
+function f0_6_7_1(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_6_7_2(){
+ return Math.random()
+}
+
+function f0_6_7_3(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_6_7_4(){
+ return Math.random()
+}
+
+function f0_6_7_5(){
+ return isNaN(undefined)
+}
+
+function f0_6_7_6(){
+ return isNaN(undefined)
+}
+
+function f0_6_7_7(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_6_7_8(){
+ return Math.random()
+}
+
+function f0_6_7_9(){
+ return Math.random()
+}
+
+function f0_6_7_10(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_6_7_11(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_6_7(){
+ f0_6_7_0();
+ f0_6_7_1();
+ f0_6_7_2();
+ f0_6_7_3();
+ f0_6_7_4();
+ f0_6_7_5();
+ f0_6_7_6();
+ f0_6_7_7();
+ f0_6_7_8();
+ f0_6_7_9();
+ f0_6_7_10();
+ f0_6_7_11();
+}
+
+function f0_6_8_0(){
+ return isNaN(undefined)
+}
+
+function f0_6_8_1(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_6_8_2(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_6_8_3(){
+ return isNaN(undefined)
+}
+
+function f0_6_8_4(){
+ return isNaN(undefined)
+}
+
+function f0_6_8_5(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_6_8_6(){
+ return isNaN(undefined)
+}
+
+function f0_6_8_7(){
+ return Math.random()
+}
+
+function f0_6_8_8(){
+ return Math.random()
+}
+
+function f0_6_8_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_6_8_10(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_6_8_11(){
+ return Math.random()
+}
+
+function f0_6_8(){
+ f0_6_8_0();
+ f0_6_8_1();
+ f0_6_8_2();
+ f0_6_8_3();
+ f0_6_8_4();
+ f0_6_8_5();
+ f0_6_8_6();
+ f0_6_8_7();
+ f0_6_8_8();
+ f0_6_8_9();
+ f0_6_8_10();
+ f0_6_8_11();
+}
+
+function f0_6_9_0(){
+ return isNaN(undefined)
+}
+
+function f0_6_9_1(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_6_9_2(){
+ return isNaN(undefined)
+}
+
+function f0_6_9_3(){
+ return Math.random()
+}
+
+function f0_6_9_4(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_6_9_5(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_6_9_6(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_6_9_7(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_6_9_8(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_6_9_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_6_9_10(){
+ return isNaN(undefined)
+}
+
+function f0_6_9_11(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_6_9(){
+ f0_6_9_0();
+ f0_6_9_1();
+ f0_6_9_2();
+ f0_6_9_3();
+ f0_6_9_4();
+ f0_6_9_5();
+ f0_6_9_6();
+ f0_6_9_7();
+ f0_6_9_8();
+ f0_6_9_9();
+ f0_6_9_10();
+ f0_6_9_11();
+}
+
+function f0_6_10_0(){
+ return isNaN(undefined)
+}
+
+function f0_6_10_1(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_6_10_2(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_6_10_3(){
+ return isNaN(undefined)
+}
+
+function f0_6_10_4(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_6_10_5(){
+ return Math.random()
+}
+
+function f0_6_10_6(){
+ return Math.random()
+}
+
+function f0_6_10_7(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_6_10_8(){
+ return isNaN(undefined)
+}
+
+function f0_6_10_9(){
+ return Math.random()
+}
+
+function f0_6_10_10(){
+ return isNaN(undefined)
+}
+
+function f0_6_10_11(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_6_10(){
+ f0_6_10_0();
+ f0_6_10_1();
+ f0_6_10_2();
+ f0_6_10_3();
+ f0_6_10_4();
+ f0_6_10_5();
+ f0_6_10_6();
+ f0_6_10_7();
+ f0_6_10_8();
+ f0_6_10_9();
+ f0_6_10_10();
+ f0_6_10_11();
+}
+
+function f0_6_11_0(){
+ return isNaN(undefined)
+}
+
+function f0_6_11_1(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_6_11_2(){
+ return Math.random()
+}
+
+function f0_6_11_3(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_6_11_4(){
+ return Math.random()
+}
+
+function f0_6_11_5(){
+ return isNaN(undefined)
+}
+
+function f0_6_11_6(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_6_11_7(){
+ return Math.random()
+}
+
+function f0_6_11_8(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_6_11_9(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_6_11_10(){
+ return Math.random()
+}
+
+function f0_6_11_11(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_6_11(){
+ f0_6_11_0();
+ f0_6_11_1();
+ f0_6_11_2();
+ f0_6_11_3();
+ f0_6_11_4();
+ f0_6_11_5();
+ f0_6_11_6();
+ f0_6_11_7();
+ f0_6_11_8();
+ f0_6_11_9();
+ f0_6_11_10();
+ f0_6_11_11();
+}
+
+function f0_6(){
+ f0_6_0();
+ f0_6_1();
+ f0_6_2();
+ f0_6_3();
+ f0_6_4();
+ f0_6_5();
+ f0_6_6();
+ f0_6_7();
+ f0_6_8();
+ f0_6_9();
+ f0_6_10();
+ f0_6_11();
+
+}
+
+function f0_7_0_0(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_7_0_1(){
+ return Math.random()
+}
+
+function f0_7_0_2(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_7_0_3(){
+ return isNaN(undefined)
+}
+
+function f0_7_0_4(){
+ return Math.random()
+}
+
+function f0_7_0_5(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_7_0_6(){
+ return isNaN(undefined)
+}
+
+function f0_7_0_7(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_7_0_8(){
+ return Math.random()
+}
+
+function f0_7_0_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_7_0_10(){
+ return isNaN(undefined)
+}
+
+function f0_7_0_11(){
+ return isNaN(undefined)
+}
+
+function f0_7_0(){
+ f0_7_0_0();
+ f0_7_0_1();
+ f0_7_0_2();
+ f0_7_0_3();
+ f0_7_0_4();
+ f0_7_0_5();
+ f0_7_0_6();
+ f0_7_0_7();
+ f0_7_0_8();
+ f0_7_0_9();
+ f0_7_0_10();
+ f0_7_0_11();
+}
+
+function f0_7_1_0(){
+ return Math.random()
+}
+
+function f0_7_1_1(){
+ return Math.random()
+}
+
+function f0_7_1_2(){
+ return Math.random()
+}
+
+function f0_7_1_3(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_7_1_4(){
+ return Math.random()
+}
+
+function f0_7_1_5(){
+ return isNaN(undefined)
+}
+
+function f0_7_1_6(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_7_1_7(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_7_1_8(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_7_1_9(){
+ return Math.random()
+}
+
+function f0_7_1_10(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_7_1_11(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_7_1(){
+ f0_7_1_0();
+ f0_7_1_1();
+ f0_7_1_2();
+ f0_7_1_3();
+ f0_7_1_4();
+ f0_7_1_5();
+ f0_7_1_6();
+ f0_7_1_7();
+ f0_7_1_8();
+ f0_7_1_9();
+ f0_7_1_10();
+ f0_7_1_11();
+}
+
+function f0_7_2_0(){
+ return isNaN(undefined)
+}
+
+function f0_7_2_1(){
+ return Math.random()
+}
+
+function f0_7_2_2(){
+ return isNaN(undefined)
+}
+
+function f0_7_2_3(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_7_2_4(){
+ return isNaN(undefined)
+}
+
+function f0_7_2_5(){
+ return Math.random()
+}
+
+function f0_7_2_6(){
+ return Math.random()
+}
+
+function f0_7_2_7(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_7_2_8(){
+ return isNaN(undefined)
+}
+
+function f0_7_2_9(){
+ return isNaN(undefined)
+}
+
+function f0_7_2_10(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_7_2_11(){
+ return isNaN(undefined)
+}
+
+function f0_7_2(){
+ f0_7_2_0();
+ f0_7_2_1();
+ f0_7_2_2();
+ f0_7_2_3();
+ f0_7_2_4();
+ f0_7_2_5();
+ f0_7_2_6();
+ f0_7_2_7();
+ f0_7_2_8();
+ f0_7_2_9();
+ f0_7_2_10();
+ f0_7_2_11();
+}
+
+function f0_7_3_0(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_7_3_1(){
+ return isNaN(undefined)
+}
+
+function f0_7_3_2(){
+ return isNaN(undefined)
+}
+
+function f0_7_3_3(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_7_3_4(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_7_3_5(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_7_3_6(){
+ return isNaN(undefined)
+}
+
+function f0_7_3_7(){
+ return Math.random()
+}
+
+function f0_7_3_8(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_7_3_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_7_3_10(){
+ return isNaN(undefined)
+}
+
+function f0_7_3_11(){
+ return isNaN(undefined)
+}
+
+function f0_7_3(){
+ f0_7_3_0();
+ f0_7_3_1();
+ f0_7_3_2();
+ f0_7_3_3();
+ f0_7_3_4();
+ f0_7_3_5();
+ f0_7_3_6();
+ f0_7_3_7();
+ f0_7_3_8();
+ f0_7_3_9();
+ f0_7_3_10();
+ f0_7_3_11();
+}
+
+function f0_7_4_0(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_7_4_1(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_7_4_2(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_7_4_3(){
+ return Math.random()
+}
+
+function f0_7_4_4(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_7_4_5(){
+ return isNaN(undefined)
+}
+
+function f0_7_4_6(){
+ return Math.random()
+}
+
+function f0_7_4_7(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_7_4_8(){
+ return isNaN(undefined)
+}
+
+function f0_7_4_9(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_7_4_10(){
+ return isNaN(undefined)
+}
+
+function f0_7_4_11(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_7_4(){
+ f0_7_4_0();
+ f0_7_4_1();
+ f0_7_4_2();
+ f0_7_4_3();
+ f0_7_4_4();
+ f0_7_4_5();
+ f0_7_4_6();
+ f0_7_4_7();
+ f0_7_4_8();
+ f0_7_4_9();
+ f0_7_4_10();
+ f0_7_4_11();
+}
+
+function f0_7_5_0(){
+ return Math.random()
+}
+
+function f0_7_5_1(){
+ return Math.random()
+}
+
+function f0_7_5_2(){
+ return isNaN(undefined)
+}
+
+function f0_7_5_3(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_7_5_4(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_7_5_5(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_7_5_6(){
+ return isNaN(undefined)
+}
+
+function f0_7_5_7(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_7_5_8(){
+ return isNaN(undefined)
+}
+
+function f0_7_5_9(){
+ return isNaN(undefined)
+}
+
+function f0_7_5_10(){
+ return isNaN(undefined)
+}
+
+function f0_7_5_11(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_7_5(){
+ f0_7_5_0();
+ f0_7_5_1();
+ f0_7_5_2();
+ f0_7_5_3();
+ f0_7_5_4();
+ f0_7_5_5();
+ f0_7_5_6();
+ f0_7_5_7();
+ f0_7_5_8();
+ f0_7_5_9();
+ f0_7_5_10();
+ f0_7_5_11();
+}
+
+function f0_7_6_0(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_7_6_1(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_7_6_2(){
+ return Math.random()
+}
+
+function f0_7_6_3(){
+ return Math.random()
+}
+
+function f0_7_6_4(){
+ return isNaN(undefined)
+}
+
+function f0_7_6_5(){
+ return isNaN(undefined)
+}
+
+function f0_7_6_6(){
+ return Math.random()
+}
+
+function f0_7_6_7(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_7_6_8(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_7_6_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_7_6_10(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_7_6_11(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_7_6(){
+ f0_7_6_0();
+ f0_7_6_1();
+ f0_7_6_2();
+ f0_7_6_3();
+ f0_7_6_4();
+ f0_7_6_5();
+ f0_7_6_6();
+ f0_7_6_7();
+ f0_7_6_8();
+ f0_7_6_9();
+ f0_7_6_10();
+ f0_7_6_11();
+}
+
+function f0_7_7_0(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_7_7_1(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_7_7_2(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_7_7_3(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_7_7_4(){
+ return isNaN(undefined)
+}
+
+function f0_7_7_5(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_7_7_6(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_7_7_7(){
+ return Math.random()
+}
+
+function f0_7_7_8(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_7_7_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_7_7_10(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_7_7_11(){
+ return Math.random()
+}
+
+function f0_7_7(){
+ f0_7_7_0();
+ f0_7_7_1();
+ f0_7_7_2();
+ f0_7_7_3();
+ f0_7_7_4();
+ f0_7_7_5();
+ f0_7_7_6();
+ f0_7_7_7();
+ f0_7_7_8();
+ f0_7_7_9();
+ f0_7_7_10();
+ f0_7_7_11();
+}
+
+function f0_7_8_0(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_7_8_1(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_7_8_2(){
+ return Math.random()
+}
+
+function f0_7_8_3(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_7_8_4(){
+ return isNaN(undefined)
+}
+
+function f0_7_8_5(){
+ return isNaN(undefined)
+}
+
+function f0_7_8_6(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_7_8_7(){
+ return Math.random()
+}
+
+function f0_7_8_8(){
+ return isNaN(undefined)
+}
+
+function f0_7_8_9(){
+ return isNaN(undefined)
+}
+
+function f0_7_8_10(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_7_8_11(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_7_8(){
+ f0_7_8_0();
+ f0_7_8_1();
+ f0_7_8_2();
+ f0_7_8_3();
+ f0_7_8_4();
+ f0_7_8_5();
+ f0_7_8_6();
+ f0_7_8_7();
+ f0_7_8_8();
+ f0_7_8_9();
+ f0_7_8_10();
+ f0_7_8_11();
+}
+
+function f0_7_9_0(){
+ return Math.random()
+}
+
+function f0_7_9_1(){
+ return Math.random()
+}
+
+function f0_7_9_2(){
+ return Math.random()
+}
+
+function f0_7_9_3(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_7_9_4(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_7_9_5(){
+ return isNaN(undefined)
+}
+
+function f0_7_9_6(){
+ return Math.random()
+}
+
+function f0_7_9_7(){
+ return Math.random()
+}
+
+function f0_7_9_8(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_7_9_9(){
+ return isNaN(undefined)
+}
+
+function f0_7_9_10(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_7_9_11(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_7_9(){
+ f0_7_9_0();
+ f0_7_9_1();
+ f0_7_9_2();
+ f0_7_9_3();
+ f0_7_9_4();
+ f0_7_9_5();
+ f0_7_9_6();
+ f0_7_9_7();
+ f0_7_9_8();
+ f0_7_9_9();
+ f0_7_9_10();
+ f0_7_9_11();
+}
+
+function f0_7_10_0(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_7_10_1(){
+ return Math.random()
+}
+
+function f0_7_10_2(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_7_10_3(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_7_10_4(){
+ return isNaN(undefined)
+}
+
+function f0_7_10_5(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_7_10_6(){
+ return isNaN(undefined)
+}
+
+function f0_7_10_7(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_7_10_8(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_7_10_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_7_10_10(){
+ return isNaN(undefined)
+}
+
+function f0_7_10_11(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_7_10(){
+ f0_7_10_0();
+ f0_7_10_1();
+ f0_7_10_2();
+ f0_7_10_3();
+ f0_7_10_4();
+ f0_7_10_5();
+ f0_7_10_6();
+ f0_7_10_7();
+ f0_7_10_8();
+ f0_7_10_9();
+ f0_7_10_10();
+ f0_7_10_11();
+}
+
+function f0_7_11_0(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_7_11_1(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_7_11_2(){
+ return isNaN(undefined)
+}
+
+function f0_7_11_3(){
+ return isNaN(undefined)
+}
+
+function f0_7_11_4(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_7_11_5(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_7_11_6(){
+ return Math.random()
+}
+
+function f0_7_11_7(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_7_11_8(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_7_11_9(){
+ return isNaN(undefined)
+}
+
+function f0_7_11_10(){
+ return Math.random()
+}
+
+function f0_7_11_11(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_7_11(){
+ f0_7_11_0();
+ f0_7_11_1();
+ f0_7_11_2();
+ f0_7_11_3();
+ f0_7_11_4();
+ f0_7_11_5();
+ f0_7_11_6();
+ f0_7_11_7();
+ f0_7_11_8();
+ f0_7_11_9();
+ f0_7_11_10();
+ f0_7_11_11();
+}
+
+function f0_7(){
+ f0_7_0();
+ f0_7_1();
+ f0_7_2();
+ f0_7_3();
+ f0_7_4();
+ f0_7_5();
+ f0_7_6();
+ f0_7_7();
+ f0_7_8();
+ f0_7_9();
+ f0_7_10();
+ f0_7_11();
+
+}
+
+function f0_8_0_0(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_8_0_1(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_8_0_2(){
+ return Math.random()
+}
+
+function f0_8_0_3(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_8_0_4(){
+ return Math.random()
+}
+
+function f0_8_0_5(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_8_0_6(){
+ return Math.random()
+}
+
+function f0_8_0_7(){
+ return Math.random()
+}
+
+function f0_8_0_8(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_8_0_9(){
+ return Math.random()
+}
+
+function f0_8_0_10(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_8_0_11(){
+ return isNaN(undefined)
+}
+
+function f0_8_0(){
+ f0_8_0_0();
+ f0_8_0_1();
+ f0_8_0_2();
+ f0_8_0_3();
+ f0_8_0_4();
+ f0_8_0_5();
+ f0_8_0_6();
+ f0_8_0_7();
+ f0_8_0_8();
+ f0_8_0_9();
+ f0_8_0_10();
+ f0_8_0_11();
+}
+
+function f0_8_1_0(){
+ return Math.random()
+}
+
+function f0_8_1_1(){
+ return Math.random()
+}
+
+function f0_8_1_2(){
+ return Math.random()
+}
+
+function f0_8_1_3(){
+ return isNaN(undefined)
+}
+
+function f0_8_1_4(){
+ return Math.random()
+}
+
+function f0_8_1_5(){
+ return Math.random()
+}
+
+function f0_8_1_6(){
+ return isNaN(undefined)
+}
+
+function f0_8_1_7(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_8_1_8(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_8_1_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_8_1_10(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_8_1_11(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_8_1(){
+ f0_8_1_0();
+ f0_8_1_1();
+ f0_8_1_2();
+ f0_8_1_3();
+ f0_8_1_4();
+ f0_8_1_5();
+ f0_8_1_6();
+ f0_8_1_7();
+ f0_8_1_8();
+ f0_8_1_9();
+ f0_8_1_10();
+ f0_8_1_11();
+}
+
+function f0_8_2_0(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_8_2_1(){
+ return isNaN(undefined)
+}
+
+function f0_8_2_2(){
+ return isNaN(undefined)
+}
+
+function f0_8_2_3(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_8_2_4(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_8_2_5(){
+ return isNaN(undefined)
+}
+
+function f0_8_2_6(){
+ return Math.random()
+}
+
+function f0_8_2_7(){
+ return isNaN(undefined)
+}
+
+function f0_8_2_8(){
+ return Math.random()
+}
+
+function f0_8_2_9(){
+ return isNaN(undefined)
+}
+
+function f0_8_2_10(){
+ return isNaN(undefined)
+}
+
+function f0_8_2_11(){
+ return isNaN(undefined)
+}
+
+function f0_8_2(){
+ f0_8_2_0();
+ f0_8_2_1();
+ f0_8_2_2();
+ f0_8_2_3();
+ f0_8_2_4();
+ f0_8_2_5();
+ f0_8_2_6();
+ f0_8_2_7();
+ f0_8_2_8();
+ f0_8_2_9();
+ f0_8_2_10();
+ f0_8_2_11();
+}
+
+function f0_8_3_0(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_8_3_1(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_8_3_2(){
+ return isNaN(undefined)
+}
+
+function f0_8_3_3(){
+ return isNaN(undefined)
+}
+
+function f0_8_3_4(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_8_3_5(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_8_3_6(){
+ return Math.random()
+}
+
+function f0_8_3_7(){
+ return isNaN(undefined)
+}
+
+function f0_8_3_8(){
+ return Math.random()
+}
+
+function f0_8_3_9(){
+ return Math.random()
+}
+
+function f0_8_3_10(){
+ return isNaN(undefined)
+}
+
+function f0_8_3_11(){
+ return Math.random()
+}
+
+function f0_8_3(){
+ f0_8_3_0();
+ f0_8_3_1();
+ f0_8_3_2();
+ f0_8_3_3();
+ f0_8_3_4();
+ f0_8_3_5();
+ f0_8_3_6();
+ f0_8_3_7();
+ f0_8_3_8();
+ f0_8_3_9();
+ f0_8_3_10();
+ f0_8_3_11();
+}
+
+function f0_8_4_0(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_8_4_1(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_8_4_2(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_8_4_3(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_8_4_4(){
+ return Math.random()
+}
+
+function f0_8_4_5(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_8_4_6(){
+ return isNaN(undefined)
+}
+
+function f0_8_4_7(){
+ return Math.random()
+}
+
+function f0_8_4_8(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_8_4_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_8_4_10(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_8_4_11(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_8_4(){
+ f0_8_4_0();
+ f0_8_4_1();
+ f0_8_4_2();
+ f0_8_4_3();
+ f0_8_4_4();
+ f0_8_4_5();
+ f0_8_4_6();
+ f0_8_4_7();
+ f0_8_4_8();
+ f0_8_4_9();
+ f0_8_4_10();
+ f0_8_4_11();
+}
+
+function f0_8_5_0(){
+ return isNaN(undefined)
+}
+
+function f0_8_5_1(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_8_5_2(){
+ return isNaN(undefined)
+}
+
+function f0_8_5_3(){
+ return isNaN(undefined)
+}
+
+function f0_8_5_4(){
+ return Math.random()
+}
+
+function f0_8_5_5(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_8_5_6(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_8_5_7(){
+ return Math.random()
+}
+
+function f0_8_5_8(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_8_5_9(){
+ return Math.random()
+}
+
+function f0_8_5_10(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_8_5_11(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_8_5(){
+ f0_8_5_0();
+ f0_8_5_1();
+ f0_8_5_2();
+ f0_8_5_3();
+ f0_8_5_4();
+ f0_8_5_5();
+ f0_8_5_6();
+ f0_8_5_7();
+ f0_8_5_8();
+ f0_8_5_9();
+ f0_8_5_10();
+ f0_8_5_11();
+}
+
+function f0_8_6_0(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_8_6_1(){
+ return Math.random()
+}
+
+function f0_8_6_2(){
+ return isNaN(undefined)
+}
+
+function f0_8_6_3(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_8_6_4(){
+ return Math.random()
+}
+
+function f0_8_6_5(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_8_6_6(){
+ return Math.random()
+}
+
+function f0_8_6_7(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_8_6_8(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_8_6_9(){
+ return Math.random()
+}
+
+function f0_8_6_10(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_8_6_11(){
+ return isNaN(undefined)
+}
+
+function f0_8_6(){
+ f0_8_6_0();
+ f0_8_6_1();
+ f0_8_6_2();
+ f0_8_6_3();
+ f0_8_6_4();
+ f0_8_6_5();
+ f0_8_6_6();
+ f0_8_6_7();
+ f0_8_6_8();
+ f0_8_6_9();
+ f0_8_6_10();
+ f0_8_6_11();
+}
+
+function f0_8_7_0(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_8_7_1(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_8_7_2(){
+ return Math.random()
+}
+
+function f0_8_7_3(){
+ return isNaN(undefined)
+}
+
+function f0_8_7_4(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_8_7_5(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_8_7_6(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_8_7_7(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_8_7_8(){
+ return isNaN(undefined)
+}
+
+function f0_8_7_9(){
+ return isNaN(undefined)
+}
+
+function f0_8_7_10(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_8_7_11(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_8_7(){
+ f0_8_7_0();
+ f0_8_7_1();
+ f0_8_7_2();
+ f0_8_7_3();
+ f0_8_7_4();
+ f0_8_7_5();
+ f0_8_7_6();
+ f0_8_7_7();
+ f0_8_7_8();
+ f0_8_7_9();
+ f0_8_7_10();
+ f0_8_7_11();
+}
+
+function f0_8_8_0(){
+ return isNaN(undefined)
+}
+
+function f0_8_8_1(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_8_8_2(){
+ return isNaN(undefined)
+}
+
+function f0_8_8_3(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_8_8_4(){
+ return Math.random()
+}
+
+function f0_8_8_5(){
+ return isNaN(undefined)
+}
+
+function f0_8_8_6(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_8_8_7(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_8_8_8(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_8_8_9(){
+ return Math.random()
+}
+
+function f0_8_8_10(){
+ return Math.random()
+}
+
+function f0_8_8_11(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_8_8(){
+ f0_8_8_0();
+ f0_8_8_1();
+ f0_8_8_2();
+ f0_8_8_3();
+ f0_8_8_4();
+ f0_8_8_5();
+ f0_8_8_6();
+ f0_8_8_7();
+ f0_8_8_8();
+ f0_8_8_9();
+ f0_8_8_10();
+ f0_8_8_11();
+}
+
+function f0_8_9_0(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_8_9_1(){
+ return isNaN(undefined)
+}
+
+function f0_8_9_2(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_8_9_3(){
+ return isNaN(undefined)
+}
+
+function f0_8_9_4(){
+ return isNaN(undefined)
+}
+
+function f0_8_9_5(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_8_9_6(){
+ return Math.random()
+}
+
+function f0_8_9_7(){
+ return isNaN(undefined)
+}
+
+function f0_8_9_8(){
+ return isNaN(undefined)
+}
+
+function f0_8_9_9(){
+ return isNaN(undefined)
+}
+
+function f0_8_9_10(){
+ return isNaN(undefined)
+}
+
+function f0_8_9_11(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_8_9(){
+ f0_8_9_0();
+ f0_8_9_1();
+ f0_8_9_2();
+ f0_8_9_3();
+ f0_8_9_4();
+ f0_8_9_5();
+ f0_8_9_6();
+ f0_8_9_7();
+ f0_8_9_8();
+ f0_8_9_9();
+ f0_8_9_10();
+ f0_8_9_11();
+}
+
+function f0_8_10_0(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_8_10_1(){
+ return isNaN(undefined)
+}
+
+function f0_8_10_2(){
+ return isNaN(undefined)
+}
+
+function f0_8_10_3(){
+ return Math.random()
+}
+
+function f0_8_10_4(){
+ return isNaN(undefined)
+}
+
+function f0_8_10_5(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_8_10_6(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_8_10_7(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_8_10_8(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_8_10_9(){
+ return Math.random()
+}
+
+function f0_8_10_10(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_8_10_11(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_8_10(){
+ f0_8_10_0();
+ f0_8_10_1();
+ f0_8_10_2();
+ f0_8_10_3();
+ f0_8_10_4();
+ f0_8_10_5();
+ f0_8_10_6();
+ f0_8_10_7();
+ f0_8_10_8();
+ f0_8_10_9();
+ f0_8_10_10();
+ f0_8_10_11();
+}
+
+function f0_8_11_0(){
+ return isNaN(undefined)
+}
+
+function f0_8_11_1(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_8_11_2(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_8_11_3(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_8_11_4(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_8_11_5(){
+ return isNaN(undefined)
+}
+
+function f0_8_11_6(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_8_11_7(){
+ return Math.random()
+}
+
+function f0_8_11_8(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_8_11_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_8_11_10(){
+ return Math.random()
+}
+
+function f0_8_11_11(){
+ return isNaN(undefined)
+}
+
+function f0_8_11(){
+ f0_8_11_0();
+ f0_8_11_1();
+ f0_8_11_2();
+ f0_8_11_3();
+ f0_8_11_4();
+ f0_8_11_5();
+ f0_8_11_6();
+ f0_8_11_7();
+ f0_8_11_8();
+ f0_8_11_9();
+ f0_8_11_10();
+ f0_8_11_11();
+}
+
+function f0_8(){
+ f0_8_0();
+ f0_8_1();
+ f0_8_2();
+ f0_8_3();
+ f0_8_4();
+ f0_8_5();
+ f0_8_6();
+ f0_8_7();
+ f0_8_8();
+ f0_8_9();
+ f0_8_10();
+ f0_8_11();
+
+}
+
+function f0_9_0_0(){
+ return Math.random()
+}
+
+function f0_9_0_1(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_9_0_2(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_9_0_3(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_9_0_4(){
+ return Math.random()
+}
+
+function f0_9_0_5(){
+ return Math.random()
+}
+
+function f0_9_0_6(){
+ return isNaN(undefined)
+}
+
+function f0_9_0_7(){
+ return Math.random()
+}
+
+function f0_9_0_8(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_9_0_9(){
+ return isNaN(undefined)
+}
+
+function f0_9_0_10(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_9_0_11(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_9_0(){
+ f0_9_0_0();
+ f0_9_0_1();
+ f0_9_0_2();
+ f0_9_0_3();
+ f0_9_0_4();
+ f0_9_0_5();
+ f0_9_0_6();
+ f0_9_0_7();
+ f0_9_0_8();
+ f0_9_0_9();
+ f0_9_0_10();
+ f0_9_0_11();
+}
+
+function f0_9_1_0(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_9_1_1(){
+ return isNaN(undefined)
+}
+
+function f0_9_1_2(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_9_1_3(){
+ return isNaN(undefined)
+}
+
+function f0_9_1_4(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_9_1_5(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_9_1_6(){
+ return Math.random()
+}
+
+function f0_9_1_7(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_9_1_8(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_9_1_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_9_1_10(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_9_1_11(){
+ return isNaN(undefined)
+}
+
+function f0_9_1(){
+ f0_9_1_0();
+ f0_9_1_1();
+ f0_9_1_2();
+ f0_9_1_3();
+ f0_9_1_4();
+ f0_9_1_5();
+ f0_9_1_6();
+ f0_9_1_7();
+ f0_9_1_8();
+ f0_9_1_9();
+ f0_9_1_10();
+ f0_9_1_11();
+}
+
+function f0_9_2_0(){
+ return isNaN(undefined)
+}
+
+function f0_9_2_1(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_9_2_2(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_9_2_3(){
+ return Math.random()
+}
+
+function f0_9_2_4(){
+ return isNaN(undefined)
+}
+
+function f0_9_2_5(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_9_2_6(){
+ return isNaN(undefined)
+}
+
+function f0_9_2_7(){
+ return Math.random()
+}
+
+function f0_9_2_8(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_9_2_9(){
+ return isNaN(undefined)
+}
+
+function f0_9_2_10(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_9_2_11(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_9_2(){
+ f0_9_2_0();
+ f0_9_2_1();
+ f0_9_2_2();
+ f0_9_2_3();
+ f0_9_2_4();
+ f0_9_2_5();
+ f0_9_2_6();
+ f0_9_2_7();
+ f0_9_2_8();
+ f0_9_2_9();
+ f0_9_2_10();
+ f0_9_2_11();
+}
+
+function f0_9_3_0(){
+ return Math.random()
+}
+
+function f0_9_3_1(){
+ return isNaN(undefined)
+}
+
+function f0_9_3_2(){
+ return Math.random()
+}
+
+function f0_9_3_3(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_9_3_4(){
+ return Math.random()
+}
+
+function f0_9_3_5(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_9_3_6(){
+ return Math.random()
+}
+
+function f0_9_3_7(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_9_3_8(){
+ return Math.random()
+}
+
+function f0_9_3_9(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_9_3_10(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_9_3_11(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_9_3(){
+ f0_9_3_0();
+ f0_9_3_1();
+ f0_9_3_2();
+ f0_9_3_3();
+ f0_9_3_4();
+ f0_9_3_5();
+ f0_9_3_6();
+ f0_9_3_7();
+ f0_9_3_8();
+ f0_9_3_9();
+ f0_9_3_10();
+ f0_9_3_11();
+}
+
+function f0_9_4_0(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_9_4_1(){
+ return Math.random()
+}
+
+function f0_9_4_2(){
+ return Math.random()
+}
+
+function f0_9_4_3(){
+ return Math.random()
+}
+
+function f0_9_4_4(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_9_4_5(){
+ return isNaN(undefined)
+}
+
+function f0_9_4_6(){
+ return isNaN(undefined)
+}
+
+function f0_9_4_7(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_9_4_8(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_9_4_9(){
+ return Math.random()
+}
+
+function f0_9_4_10(){
+ return Math.random()
+}
+
+function f0_9_4_11(){
+ return isNaN(undefined)
+}
+
+function f0_9_4(){
+ f0_9_4_0();
+ f0_9_4_1();
+ f0_9_4_2();
+ f0_9_4_3();
+ f0_9_4_4();
+ f0_9_4_5();
+ f0_9_4_6();
+ f0_9_4_7();
+ f0_9_4_8();
+ f0_9_4_9();
+ f0_9_4_10();
+ f0_9_4_11();
+}
+
+function f0_9_5_0(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_9_5_1(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_9_5_2(){
+ return isNaN(undefined)
+}
+
+function f0_9_5_3(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_9_5_4(){
+ return Math.random()
+}
+
+function f0_9_5_5(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_9_5_6(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_9_5_7(){
+ return isNaN(undefined)
+}
+
+function f0_9_5_8(){
+ return isNaN(undefined)
+}
+
+function f0_9_5_9(){
+ return Math.random()
+}
+
+function f0_9_5_10(){
+ return isNaN(undefined)
+}
+
+function f0_9_5_11(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_9_5(){
+ f0_9_5_0();
+ f0_9_5_1();
+ f0_9_5_2();
+ f0_9_5_3();
+ f0_9_5_4();
+ f0_9_5_5();
+ f0_9_5_6();
+ f0_9_5_7();
+ f0_9_5_8();
+ f0_9_5_9();
+ f0_9_5_10();
+ f0_9_5_11();
+}
+
+function f0_9_6_0(){
+ return Math.random()
+}
+
+function f0_9_6_1(){
+ return isNaN(undefined)
+}
+
+function f0_9_6_2(){
+ return isNaN(undefined)
+}
+
+function f0_9_6_3(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_9_6_4(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_9_6_5(){
+ return Math.random()
+}
+
+function f0_9_6_6(){
+ return Math.random()
+}
+
+function f0_9_6_7(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_9_6_8(){
+ return isNaN(undefined)
+}
+
+function f0_9_6_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_9_6_10(){
+ return Math.random()
+}
+
+function f0_9_6_11(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_9_6(){
+ f0_9_6_0();
+ f0_9_6_1();
+ f0_9_6_2();
+ f0_9_6_3();
+ f0_9_6_4();
+ f0_9_6_5();
+ f0_9_6_6();
+ f0_9_6_7();
+ f0_9_6_8();
+ f0_9_6_9();
+ f0_9_6_10();
+ f0_9_6_11();
+}
+
+function f0_9_7_0(){
+ return Math.random()
+}
+
+function f0_9_7_1(){
+ return Math.random()
+}
+
+function f0_9_7_2(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_9_7_3(){
+ return isNaN(undefined)
+}
+
+function f0_9_7_4(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_9_7_5(){
+ return isNaN(undefined)
+}
+
+function f0_9_7_6(){
+ return Math.random()
+}
+
+function f0_9_7_7(){
+ return isNaN(undefined)
+}
+
+function f0_9_7_8(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_9_7_9(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_9_7_10(){
+ return Math.random()
+}
+
+function f0_9_7_11(){
+ return isNaN(undefined)
+}
+
+function f0_9_7(){
+ f0_9_7_0();
+ f0_9_7_1();
+ f0_9_7_2();
+ f0_9_7_3();
+ f0_9_7_4();
+ f0_9_7_5();
+ f0_9_7_6();
+ f0_9_7_7();
+ f0_9_7_8();
+ f0_9_7_9();
+ f0_9_7_10();
+ f0_9_7_11();
+}
+
+function f0_9_8_0(){
+ return isNaN(undefined)
+}
+
+function f0_9_8_1(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_9_8_2(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_9_8_3(){
+ return isNaN(undefined)
+}
+
+function f0_9_8_4(){
+ return isNaN(undefined)
+}
+
+function f0_9_8_5(){
+ return Math.random()
+}
+
+function f0_9_8_6(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_9_8_7(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_9_8_8(){
+ return Math.random()
+}
+
+function f0_9_8_9(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_9_8_10(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_9_8_11(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_9_8(){
+ f0_9_8_0();
+ f0_9_8_1();
+ f0_9_8_2();
+ f0_9_8_3();
+ f0_9_8_4();
+ f0_9_8_5();
+ f0_9_8_6();
+ f0_9_8_7();
+ f0_9_8_8();
+ f0_9_8_9();
+ f0_9_8_10();
+ f0_9_8_11();
+}
+
+function f0_9_9_0(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_9_9_1(){
+ return isNaN(undefined)
+}
+
+function f0_9_9_2(){
+ return Math.random()
+}
+
+function f0_9_9_3(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_9_9_4(){
+ return Math.random()
+}
+
+function f0_9_9_5(){
+ return isNaN(undefined)
+}
+
+function f0_9_9_6(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_9_9_7(){
+ return isNaN(undefined)
+}
+
+function f0_9_9_8(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_9_9_9(){
+ return isNaN(undefined)
+}
+
+function f0_9_9_10(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_9_9_11(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_9_9(){
+ f0_9_9_0();
+ f0_9_9_1();
+ f0_9_9_2();
+ f0_9_9_3();
+ f0_9_9_4();
+ f0_9_9_5();
+ f0_9_9_6();
+ f0_9_9_7();
+ f0_9_9_8();
+ f0_9_9_9();
+ f0_9_9_10();
+ f0_9_9_11();
+}
+
+function f0_9_10_0(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_9_10_1(){
+ return isNaN(undefined)
+}
+
+function f0_9_10_2(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_9_10_3(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_9_10_4(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_9_10_5(){
+ return isNaN(undefined)
+}
+
+function f0_9_10_6(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_9_10_7(){
+ return isNaN(undefined)
+}
+
+function f0_9_10_8(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_9_10_9(){
+ return isNaN(undefined)
+}
+
+function f0_9_10_10(){
+ return isNaN(undefined)
+}
+
+function f0_9_10_11(){
+ return isNaN(undefined)
+}
+
+function f0_9_10(){
+ f0_9_10_0();
+ f0_9_10_1();
+ f0_9_10_2();
+ f0_9_10_3();
+ f0_9_10_4();
+ f0_9_10_5();
+ f0_9_10_6();
+ f0_9_10_7();
+ f0_9_10_8();
+ f0_9_10_9();
+ f0_9_10_10();
+ f0_9_10_11();
+}
+
+function f0_9_11_0(){
+ return Math.random()
+}
+
+function f0_9_11_1(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_9_11_2(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_9_11_3(){
+ return isNaN(undefined)
+}
+
+function f0_9_11_4(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_9_11_5(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_9_11_6(){
+ return isNaN(undefined)
+}
+
+function f0_9_11_7(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_9_11_8(){
+ return Math.random()
+}
+
+function f0_9_11_9(){
+ return Math.random()
+}
+
+function f0_9_11_10(){
+ return isNaN(undefined)
+}
+
+function f0_9_11_11(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_9_11(){
+ f0_9_11_0();
+ f0_9_11_1();
+ f0_9_11_2();
+ f0_9_11_3();
+ f0_9_11_4();
+ f0_9_11_5();
+ f0_9_11_6();
+ f0_9_11_7();
+ f0_9_11_8();
+ f0_9_11_9();
+ f0_9_11_10();
+ f0_9_11_11();
+}
+
+function f0_9(){
+ f0_9_0();
+ f0_9_1();
+ f0_9_2();
+ f0_9_3();
+ f0_9_4();
+ f0_9_5();
+ f0_9_6();
+ f0_9_7();
+ f0_9_8();
+ f0_9_9();
+ f0_9_10();
+ f0_9_11();
+
+}
+
+function f0_10_0_0(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_10_0_1(){
+ return isNaN(undefined)
+}
+
+function f0_10_0_2(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_10_0_3(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_10_0_4(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_10_0_5(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_10_0_6(){
+ return isNaN(undefined)
+}
+
+function f0_10_0_7(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_10_0_8(){
+ return Math.random()
+}
+
+function f0_10_0_9(){
+ return isNaN(undefined)
+}
+
+function f0_10_0_10(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_10_0_11(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_10_0(){
+ f0_10_0_0();
+ f0_10_0_1();
+ f0_10_0_2();
+ f0_10_0_3();
+ f0_10_0_4();
+ f0_10_0_5();
+ f0_10_0_6();
+ f0_10_0_7();
+ f0_10_0_8();
+ f0_10_0_9();
+ f0_10_0_10();
+ f0_10_0_11();
+}
+
+function f0_10_1_0(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_10_1_1(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_10_1_2(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_10_1_3(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_10_1_4(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_10_1_5(){
+ return Math.random()
+}
+
+function f0_10_1_6(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_10_1_7(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_10_1_8(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_10_1_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_10_1_10(){
+ return Math.random()
+}
+
+function f0_10_1_11(){
+ return isNaN(undefined)
+}
+
+function f0_10_1(){
+ f0_10_1_0();
+ f0_10_1_1();
+ f0_10_1_2();
+ f0_10_1_3();
+ f0_10_1_4();
+ f0_10_1_5();
+ f0_10_1_6();
+ f0_10_1_7();
+ f0_10_1_8();
+ f0_10_1_9();
+ f0_10_1_10();
+ f0_10_1_11();
+}
+
+function f0_10_2_0(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_10_2_1(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_10_2_2(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_10_2_3(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_10_2_4(){
+ return Math.random()
+}
+
+function f0_10_2_5(){
+ return Math.random()
+}
+
+function f0_10_2_6(){
+ return Math.random()
+}
+
+function f0_10_2_7(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_10_2_8(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_10_2_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_10_2_10(){
+ return Math.random()
+}
+
+function f0_10_2_11(){
+ return isNaN(undefined)
+}
+
+function f0_10_2(){
+ f0_10_2_0();
+ f0_10_2_1();
+ f0_10_2_2();
+ f0_10_2_3();
+ f0_10_2_4();
+ f0_10_2_5();
+ f0_10_2_6();
+ f0_10_2_7();
+ f0_10_2_8();
+ f0_10_2_9();
+ f0_10_2_10();
+ f0_10_2_11();
+}
+
+function f0_10_3_0(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_10_3_1(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_10_3_2(){
+ return isNaN(undefined)
+}
+
+function f0_10_3_3(){
+ return isNaN(undefined)
+}
+
+function f0_10_3_4(){
+ return isNaN(undefined)
+}
+
+function f0_10_3_5(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_10_3_6(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_10_3_7(){
+ return Math.random()
+}
+
+function f0_10_3_8(){
+ return isNaN(undefined)
+}
+
+function f0_10_3_9(){
+ return isNaN(undefined)
+}
+
+function f0_10_3_10(){
+ return Math.random()
+}
+
+function f0_10_3_11(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_10_3(){
+ f0_10_3_0();
+ f0_10_3_1();
+ f0_10_3_2();
+ f0_10_3_3();
+ f0_10_3_4();
+ f0_10_3_5();
+ f0_10_3_6();
+ f0_10_3_7();
+ f0_10_3_8();
+ f0_10_3_9();
+ f0_10_3_10();
+ f0_10_3_11();
+}
+
+function f0_10_4_0(){
+ return Math.random()
+}
+
+function f0_10_4_1(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_10_4_2(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_10_4_3(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_10_4_4(){
+ return isNaN(undefined)
+}
+
+function f0_10_4_5(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_10_4_6(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_10_4_7(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_10_4_8(){
+ return isNaN(undefined)
+}
+
+function f0_10_4_9(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_10_4_10(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_10_4_11(){
+ return Math.random()
+}
+
+function f0_10_4(){
+ f0_10_4_0();
+ f0_10_4_1();
+ f0_10_4_2();
+ f0_10_4_3();
+ f0_10_4_4();
+ f0_10_4_5();
+ f0_10_4_6();
+ f0_10_4_7();
+ f0_10_4_8();
+ f0_10_4_9();
+ f0_10_4_10();
+ f0_10_4_11();
+}
+
+function f0_10_5_0(){
+ return Math.random()
+}
+
+function f0_10_5_1(){
+ return Math.random()
+}
+
+function f0_10_5_2(){
+ return isNaN(undefined)
+}
+
+function f0_10_5_3(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_10_5_4(){
+ return isNaN(undefined)
+}
+
+function f0_10_5_5(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_10_5_6(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_10_5_7(){
+ return isNaN(undefined)
+}
+
+function f0_10_5_8(){
+ return isNaN(undefined)
+}
+
+function f0_10_5_9(){
+ return Math.random()
+}
+
+function f0_10_5_10(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_10_5_11(){
+ return Math.random()
+}
+
+function f0_10_5(){
+ f0_10_5_0();
+ f0_10_5_1();
+ f0_10_5_2();
+ f0_10_5_3();
+ f0_10_5_4();
+ f0_10_5_5();
+ f0_10_5_6();
+ f0_10_5_7();
+ f0_10_5_8();
+ f0_10_5_9();
+ f0_10_5_10();
+ f0_10_5_11();
+}
+
+function f0_10_6_0(){
+ return Math.random()
+}
+
+function f0_10_6_1(){
+ return Math.random()
+}
+
+function f0_10_6_2(){
+ return Math.random()
+}
+
+function f0_10_6_3(){
+ return isNaN(undefined)
+}
+
+function f0_10_6_4(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_10_6_5(){
+ return isNaN(undefined)
+}
+
+function f0_10_6_6(){
+ return isNaN(undefined)
+}
+
+function f0_10_6_7(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_10_6_8(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_10_6_9(){
+ return isNaN(undefined)
+}
+
+function f0_10_6_10(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_10_6_11(){
+ return Math.random()
+}
+
+function f0_10_6(){
+ f0_10_6_0();
+ f0_10_6_1();
+ f0_10_6_2();
+ f0_10_6_3();
+ f0_10_6_4();
+ f0_10_6_5();
+ f0_10_6_6();
+ f0_10_6_7();
+ f0_10_6_8();
+ f0_10_6_9();
+ f0_10_6_10();
+ f0_10_6_11();
+}
+
+function f0_10_7_0(){
+ return Math.random()
+}
+
+function f0_10_7_1(){
+ return Math.random()
+}
+
+function f0_10_7_2(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_10_7_3(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_10_7_4(){
+ return isNaN(undefined)
+}
+
+function f0_10_7_5(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_10_7_6(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_10_7_7(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_10_7_8(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_10_7_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_10_7_10(){
+ return isNaN(undefined)
+}
+
+function f0_10_7_11(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_10_7(){
+ f0_10_7_0();
+ f0_10_7_1();
+ f0_10_7_2();
+ f0_10_7_3();
+ f0_10_7_4();
+ f0_10_7_5();
+ f0_10_7_6();
+ f0_10_7_7();
+ f0_10_7_8();
+ f0_10_7_9();
+ f0_10_7_10();
+ f0_10_7_11();
+}
+
+function f0_10_8_0(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_10_8_1(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_10_8_2(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_10_8_3(){
+ return isNaN(undefined)
+}
+
+function f0_10_8_4(){
+ return isNaN(undefined)
+}
+
+function f0_10_8_5(){
+ return Math.random()
+}
+
+function f0_10_8_6(){
+ return isNaN(undefined)
+}
+
+function f0_10_8_7(){
+ return isNaN(undefined)
+}
+
+function f0_10_8_8(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_10_8_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_10_8_10(){
+ return isNaN(undefined)
+}
+
+function f0_10_8_11(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_10_8(){
+ f0_10_8_0();
+ f0_10_8_1();
+ f0_10_8_2();
+ f0_10_8_3();
+ f0_10_8_4();
+ f0_10_8_5();
+ f0_10_8_6();
+ f0_10_8_7();
+ f0_10_8_8();
+ f0_10_8_9();
+ f0_10_8_10();
+ f0_10_8_11();
+}
+
+function f0_10_9_0(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_10_9_1(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_10_9_2(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_10_9_3(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_10_9_4(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_10_9_5(){
+ return Math.random()
+}
+
+function f0_10_9_6(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_10_9_7(){
+ return isNaN(undefined)
+}
+
+function f0_10_9_8(){
+ return Math.random()
+}
+
+function f0_10_9_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_10_9_10(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_10_9_11(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_10_9(){
+ f0_10_9_0();
+ f0_10_9_1();
+ f0_10_9_2();
+ f0_10_9_3();
+ f0_10_9_4();
+ f0_10_9_5();
+ f0_10_9_6();
+ f0_10_9_7();
+ f0_10_9_8();
+ f0_10_9_9();
+ f0_10_9_10();
+ f0_10_9_11();
+}
+
+function f0_10_10_0(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_10_10_1(){
+ return Math.random()
+}
+
+function f0_10_10_2(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_10_10_3(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_10_10_4(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_10_10_5(){
+ return isNaN(undefined)
+}
+
+function f0_10_10_6(){
+ return Math.random()
+}
+
+function f0_10_10_7(){
+ return Math.random()
+}
+
+function f0_10_10_8(){
+ return Math.random()
+}
+
+function f0_10_10_9(){
+ return isNaN(undefined)
+}
+
+function f0_10_10_10(){
+ return Math.random()
+}
+
+function f0_10_10_11(){
+ return isNaN(undefined)
+}
+
+function f0_10_10(){
+ f0_10_10_0();
+ f0_10_10_1();
+ f0_10_10_2();
+ f0_10_10_3();
+ f0_10_10_4();
+ f0_10_10_5();
+ f0_10_10_6();
+ f0_10_10_7();
+ f0_10_10_8();
+ f0_10_10_9();
+ f0_10_10_10();
+ f0_10_10_11();
+}
+
+function f0_10_11_0(){
+ return isNaN(undefined)
+}
+
+function f0_10_11_1(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_10_11_2(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_10_11_3(){
+ return isNaN(undefined)
+}
+
+function f0_10_11_4(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_10_11_5(){
+ return Math.random()
+}
+
+function f0_10_11_6(){
+ return isNaN(undefined)
+}
+
+function f0_10_11_7(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_10_11_8(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_10_11_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_10_11_10(){
+ return isNaN(undefined)
+}
+
+function f0_10_11_11(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_10_11(){
+ f0_10_11_0();
+ f0_10_11_1();
+ f0_10_11_2();
+ f0_10_11_3();
+ f0_10_11_4();
+ f0_10_11_5();
+ f0_10_11_6();
+ f0_10_11_7();
+ f0_10_11_8();
+ f0_10_11_9();
+ f0_10_11_10();
+ f0_10_11_11();
+}
+
+function f0_10(){
+ f0_10_0();
+ f0_10_1();
+ f0_10_2();
+ f0_10_3();
+ f0_10_4();
+ f0_10_5();
+ f0_10_6();
+ f0_10_7();
+ f0_10_8();
+ f0_10_9();
+ f0_10_10();
+ f0_10_11();
+
+}
+
+function f0_11_0_0(){
+ return Math.random()
+}
+
+function f0_11_0_1(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_11_0_2(){
+ return isNaN(undefined)
+}
+
+function f0_11_0_3(){
+ return Math.random()
+}
+
+function f0_11_0_4(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_11_0_5(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_11_0_6(){
+ return isNaN(undefined)
+}
+
+function f0_11_0_7(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_11_0_8(){
+ return Math.random()
+}
+
+function f0_11_0_9(){
+ return Math.random()
+}
+
+function f0_11_0_10(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_11_0_11(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_11_0(){
+ f0_11_0_0();
+ f0_11_0_1();
+ f0_11_0_2();
+ f0_11_0_3();
+ f0_11_0_4();
+ f0_11_0_5();
+ f0_11_0_6();
+ f0_11_0_7();
+ f0_11_0_8();
+ f0_11_0_9();
+ f0_11_0_10();
+ f0_11_0_11();
+}
+
+function f0_11_1_0(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_11_1_1(){
+ return Math.random()
+}
+
+function f0_11_1_2(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_11_1_3(){
+ return Math.random()
+}
+
+function f0_11_1_4(){
+ return isNaN(undefined)
+}
+
+function f0_11_1_5(){
+ return Math.random()
+}
+
+function f0_11_1_6(){
+ return isNaN(undefined)
+}
+
+function f0_11_1_7(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_11_1_8(){
+ return Math.random()
+}
+
+function f0_11_1_9(){
+ return isNaN(undefined)
+}
+
+function f0_11_1_10(){
+ return isNaN(undefined)
+}
+
+function f0_11_1_11(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_11_1(){
+ f0_11_1_0();
+ f0_11_1_1();
+ f0_11_1_2();
+ f0_11_1_3();
+ f0_11_1_4();
+ f0_11_1_5();
+ f0_11_1_6();
+ f0_11_1_7();
+ f0_11_1_8();
+ f0_11_1_9();
+ f0_11_1_10();
+ f0_11_1_11();
+}
+
+function f0_11_2_0(){
+ return Math.random()
+}
+
+function f0_11_2_1(){
+ return isNaN(undefined)
+}
+
+function f0_11_2_2(){
+ return isNaN(undefined)
+}
+
+function f0_11_2_3(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_11_2_4(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_11_2_5(){
+ return isNaN(undefined)
+}
+
+function f0_11_2_6(){
+ return Math.random()
+}
+
+function f0_11_2_7(){
+ return Math.random()
+}
+
+function f0_11_2_8(){
+ return Math.random()
+}
+
+function f0_11_2_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_11_2_10(){
+ return isNaN(undefined)
+}
+
+function f0_11_2_11(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_11_2(){
+ f0_11_2_0();
+ f0_11_2_1();
+ f0_11_2_2();
+ f0_11_2_3();
+ f0_11_2_4();
+ f0_11_2_5();
+ f0_11_2_6();
+ f0_11_2_7();
+ f0_11_2_8();
+ f0_11_2_9();
+ f0_11_2_10();
+ f0_11_2_11();
+}
+
+function f0_11_3_0(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_11_3_1(){
+ return Math.random()
+}
+
+function f0_11_3_2(){
+ return isNaN(undefined)
+}
+
+function f0_11_3_3(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_11_3_4(){
+ return Math.random()
+}
+
+function f0_11_3_5(){
+ return Math.random()
+}
+
+function f0_11_3_6(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_11_3_7(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_11_3_8(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_11_3_9(){
+ return Math.random()
+}
+
+function f0_11_3_10(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_11_3_11(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_11_3(){
+ f0_11_3_0();
+ f0_11_3_1();
+ f0_11_3_2();
+ f0_11_3_3();
+ f0_11_3_4();
+ f0_11_3_5();
+ f0_11_3_6();
+ f0_11_3_7();
+ f0_11_3_8();
+ f0_11_3_9();
+ f0_11_3_10();
+ f0_11_3_11();
+}
+
+function f0_11_4_0(){
+ return isNaN(undefined)
+}
+
+function f0_11_4_1(){
+ return Math.random()
+}
+
+function f0_11_4_2(){
+ return Math.random()
+}
+
+function f0_11_4_3(){
+ return Math.random()
+}
+
+function f0_11_4_4(){
+ return Math.random()
+}
+
+function f0_11_4_5(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_11_4_6(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_11_4_7(){
+ return Math.random()
+}
+
+function f0_11_4_8(){
+ return Math.random()
+}
+
+function f0_11_4_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_11_4_10(){
+ return Math.random()
+}
+
+function f0_11_4_11(){
+ return isNaN(undefined)
+}
+
+function f0_11_4(){
+ f0_11_4_0();
+ f0_11_4_1();
+ f0_11_4_2();
+ f0_11_4_3();
+ f0_11_4_4();
+ f0_11_4_5();
+ f0_11_4_6();
+ f0_11_4_7();
+ f0_11_4_8();
+ f0_11_4_9();
+ f0_11_4_10();
+ f0_11_4_11();
+}
+
+function f0_11_5_0(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_11_5_1(){
+ return Math.random()
+}
+
+function f0_11_5_2(){
+ return isNaN(undefined)
+}
+
+function f0_11_5_3(){
+ return isNaN(undefined)
+}
+
+function f0_11_5_4(){
+ return Math.random()
+}
+
+function f0_11_5_5(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_11_5_6(){
+ return Math.random()
+}
+
+function f0_11_5_7(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_11_5_8(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_11_5_9(){
+ return Math.random()
+}
+
+function f0_11_5_10(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_11_5_11(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_11_5(){
+ f0_11_5_0();
+ f0_11_5_1();
+ f0_11_5_2();
+ f0_11_5_3();
+ f0_11_5_4();
+ f0_11_5_5();
+ f0_11_5_6();
+ f0_11_5_7();
+ f0_11_5_8();
+ f0_11_5_9();
+ f0_11_5_10();
+ f0_11_5_11();
+}
+
+function f0_11_6_0(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_11_6_1(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_11_6_2(){
+ return isNaN(undefined)
+}
+
+function f0_11_6_3(){
+ return isNaN(undefined)
+}
+
+function f0_11_6_4(){
+ return isNaN(undefined)
+}
+
+function f0_11_6_5(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_11_6_6(){
+ return Math.random()
+}
+
+function f0_11_6_7(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_11_6_8(){
+ return Math.random()
+}
+
+function f0_11_6_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_11_6_10(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_11_6_11(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_11_6(){
+ f0_11_6_0();
+ f0_11_6_1();
+ f0_11_6_2();
+ f0_11_6_3();
+ f0_11_6_4();
+ f0_11_6_5();
+ f0_11_6_6();
+ f0_11_6_7();
+ f0_11_6_8();
+ f0_11_6_9();
+ f0_11_6_10();
+ f0_11_6_11();
+}
+
+function f0_11_7_0(){
+ return isNaN(undefined)
+}
+
+function f0_11_7_1(){
+ return Math.random()
+}
+
+function f0_11_7_2(){
+ return Math.random()
+}
+
+function f0_11_7_3(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_11_7_4(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_11_7_5(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_11_7_6(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_11_7_7(){
+ return Math.random()
+}
+
+function f0_11_7_8(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_11_7_9(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_11_7_10(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_11_7_11(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_11_7(){
+ f0_11_7_0();
+ f0_11_7_1();
+ f0_11_7_2();
+ f0_11_7_3();
+ f0_11_7_4();
+ f0_11_7_5();
+ f0_11_7_6();
+ f0_11_7_7();
+ f0_11_7_8();
+ f0_11_7_9();
+ f0_11_7_10();
+ f0_11_7_11();
+}
+
+function f0_11_8_0(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_11_8_1(){
+ return isNaN(undefined)
+}
+
+function f0_11_8_2(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_11_8_3(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_11_8_4(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_11_8_5(){
+ return Math.random()
+}
+
+function f0_11_8_6(){
+ return Math.random()
+}
+
+function f0_11_8_7(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_11_8_8(){
+ return isNaN(undefined)
+}
+
+function f0_11_8_9(){
+ return isNaN(undefined)
+}
+
+function f0_11_8_10(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_11_8_11(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_11_8(){
+ f0_11_8_0();
+ f0_11_8_1();
+ f0_11_8_2();
+ f0_11_8_3();
+ f0_11_8_4();
+ f0_11_8_5();
+ f0_11_8_6();
+ f0_11_8_7();
+ f0_11_8_8();
+ f0_11_8_9();
+ f0_11_8_10();
+ f0_11_8_11();
+}
+
+function f0_11_9_0(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_11_9_1(){
+ return Math.random()
+}
+
+function f0_11_9_2(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_11_9_3(){
+ return Math.random()
+}
+
+function f0_11_9_4(){
+ return isNaN(undefined)
+}
+
+function f0_11_9_5(){
+ return Math.random()
+}
+
+function f0_11_9_6(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_11_9_7(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_11_9_8(){
+ return Math.random()
+}
+
+function f0_11_9_9(){
+ return isNaN(undefined)
+}
+
+function f0_11_9_10(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_11_9_11(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_11_9(){
+ f0_11_9_0();
+ f0_11_9_1();
+ f0_11_9_2();
+ f0_11_9_3();
+ f0_11_9_4();
+ f0_11_9_5();
+ f0_11_9_6();
+ f0_11_9_7();
+ f0_11_9_8();
+ f0_11_9_9();
+ f0_11_9_10();
+ f0_11_9_11();
+}
+
+function f0_11_10_0(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_11_10_1(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_11_10_2(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_11_10_3(){
+ return isNaN(undefined)
+}
+
+function f0_11_10_4(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_11_10_5(){
+ return isNaN(undefined)
+}
+
+function f0_11_10_6(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_11_10_7(){
+ return isNaN(undefined)
+}
+
+function f0_11_10_8(){
+ return Math.random()
+}
+
+function f0_11_10_9(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_11_10_10(){
+ return isNaN(undefined)
+}
+
+function f0_11_10_11(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_11_10(){
+ f0_11_10_0();
+ f0_11_10_1();
+ f0_11_10_2();
+ f0_11_10_3();
+ f0_11_10_4();
+ f0_11_10_5();
+ f0_11_10_6();
+ f0_11_10_7();
+ f0_11_10_8();
+ f0_11_10_9();
+ f0_11_10_10();
+ f0_11_10_11();
+}
+
+function f0_11_11_0(){
+ return Math.random()
+}
+
+function f0_11_11_1(){
+ return isNaN(undefined)
+}
+
+function f0_11_11_2(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_11_11_3(){
+ return isNaN(undefined)
+}
+
+function f0_11_11_4(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_11_11_5(){
+ return isNaN(undefined)
+}
+
+function f0_11_11_6(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_11_11_7(){
+ return isNaN(undefined)
+}
+
+function f0_11_11_8(){
+ return Math.random()
+}
+
+function f0_11_11_9(){
+ return Math.random()
+}
+
+function f0_11_11_10(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f0_11_11_11(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f0_11_11(){
+ f0_11_11_0();
+ f0_11_11_1();
+ f0_11_11_2();
+ f0_11_11_3();
+ f0_11_11_4();
+ f0_11_11_5();
+ f0_11_11_6();
+ f0_11_11_7();
+ f0_11_11_8();
+ f0_11_11_9();
+ f0_11_11_10();
+ f0_11_11_11();
+}
+
+function f0_11(){
+ f0_11_0();
+ f0_11_1();
+ f0_11_2();
+ f0_11_3();
+ f0_11_4();
+ f0_11_5();
+ f0_11_6();
+ f0_11_7();
+ f0_11_8();
+ f0_11_9();
+ f0_11_10();
+ f0_11_11();
+
+}
+
+function f0(){
+ f0_0();
+ f0_1();
+ f0_2();
+ f0_3();
+ f0_4();
+ f0_5();
+ f0_6();
+ f0_7();
+ f0_8();
+ f0_9();
+ f0_10();
+ f0_11();
+
+}
+
+function f2_0(){
+ return Math.random()
+}
+
+function f2_1(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f2_2(){
+ return isNaN(undefined)
+}
+
+function f2_3(){
+ return isNaN(undefined)
+}
+
+function f2_4(){
+ return isNaN(undefined)
+}
+
+function f2_5(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f2_6(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f2_7(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f2_8(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f2_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f2_10(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f2_11(){
+ return isNaN(undefined)
+}
+
+function f1(){
+ f1_0();
+ f1_1();
+ f1_2();
+ f1_3();
+ f1_4();
+ f1_5();
+ f1_6();
+ f1_7();
+ f1_8();
+ f1_9();
+ f1_10();
+ f1_11();
+
+}
+
+function f1_0_0(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f1_0_1(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f1_0_2(){
+ return Math.random()
+}
+
+function f1_0_3(){
+ return isNaN(undefined)
+}
+
+function f1_0_4(){
+ return isNaN(undefined)
+}
+
+function f1_0_5(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_0_6(){
+ return isNaN(undefined)
+}
+
+function f1_0_7(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f1_0_8(){
+ return isNaN(undefined)
+}
+
+function f1_0_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_0_10(){
+ return Math.random()
+}
+
+function f1_0_11(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_0(){
+ f1_0_0();
+ f1_0_1();
+ f1_0_2();
+ f1_0_3();
+ f1_0_4();
+ f1_0_5();
+ f1_0_6();
+ f1_0_7();
+ f1_0_8();
+ f1_0_9();
+ f1_0_10();
+ f1_0_11();
+
+}
+
+function f1_1_0(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f1_1_1(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_1_2(){
+ return isNaN(undefined)
+}
+
+function f1_1_3(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f1_1_4(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f1_1_5(){
+ return Math.random()
+}
+
+function f1_1_6(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_1_7(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_1_8(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_1_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_1_10(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_1_11(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_1(){
+ f1_1_0();
+ f1_1_1();
+ f1_1_2();
+ f1_1_3();
+ f1_1_4();
+ f1_1_5();
+ f1_1_6();
+ f1_1_7();
+ f1_1_8();
+ f1_1_9();
+ f1_1_10();
+ f1_1_11();
+}
+
+function f1_2_0(){
+ return Math.random()
+}
+
+function f1_2_1(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_2_2(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_2_3(){
+ return isNaN(undefined)
+}
+
+function f1_2_4(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_2_5(){
+ return Math.random()
+}
+
+function f1_2_6(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f1_2_7(){
+ return isNaN(undefined)
+}
+
+function f1_2_8(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_2_9(){
+ return Math.random()
+}
+
+function f1_2_10(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f1_2_11(){
+ return Math.random()
+}
+
+function f1_2(){
+ f1_2_0();
+ f1_2_1();
+ f1_2_2();
+ f1_2_3();
+ f1_2_4();
+ f1_2_5();
+ f1_2_6();
+ f1_2_7();
+ f1_2_8();
+ f1_2_9();
+ f1_2_10();
+ f1_2_11();
+
+}
+
+function f1_3_0(){
+ return Math.random()
+}
+
+function f1_3_1(){
+ return isNaN(undefined)
+}
+
+function f1_3_2(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f1_3_3(){
+ return isNaN(undefined)
+}
+
+function f1_3_4(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f1_3_5(){
+ return isNaN(undefined)
+}
+
+function f1_3_6(){
+ return Math.random()
+}
+
+function f1_3_7(){
+ return Math.random()
+}
+
+function f1_3_8(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f1_3_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_3_10(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_3_11(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f1_3(){
+ f1_3_0();
+ f1_3_1();
+ f1_3_2();
+ f1_3_3();
+ f1_3_4();
+ f1_3_5();
+ f1_3_6();
+ f1_3_7();
+ f1_3_8();
+ f1_3_9();
+ f1_3_10();
+ f1_3_11();
+
+}
+
+function f1_4_0(){
+ return isNaN(undefined)
+}
+
+function f1_4_1(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_4_2(){
+ return isNaN(undefined)
+}
+
+function f1_4_3(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f1_4_4(){
+ return Math.random()
+}
+
+function f1_4_5(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f1_4_6(){
+ return isNaN(undefined)
+}
+
+function f1_4_7(){
+ return isNaN(undefined)
+}
+
+function f1_4_8(){
+ return Math.random()
+}
+
+function f1_4_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_4_10(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_4_11(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f1_4(){
+ f1_4_0();
+ f1_4_1();
+ f1_4_2();
+ f1_4_3();
+ f1_4_4();
+ f1_4_5();
+ f1_4_6();
+ f1_4_7();
+ f1_4_8();
+ f1_4_9();
+ f1_4_10();
+ f1_4_11();
+
+}
+
+function f1_5_0(){
+ return isNaN(undefined)
+}
+
+function f1_5_1(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_5_2(){
+ return Math.random()
+}
+
+function f1_5_3(){
+ return isNaN(undefined)
+}
+
+function f1_5_4(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_5_5(){
+ return isNaN(undefined)
+}
+
+function f1_5_6(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_5_7(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_5_8(){
+ return Math.random()
+}
+
+function f1_5_9(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f1_5_10(){
+ return isNaN(undefined)
+}
+
+function f1_5_11(){
+ return isNaN(undefined)
+}
+
+function f1_5(){
+ f1_5_0();
+ f1_5_1();
+ f1_5_2();
+ f1_5_3();
+ f1_5_4();
+ f1_5_5();
+ f1_5_6();
+ f1_5_7();
+ f1_5_8();
+ f1_5_9();
+ f1_5_10();
+ f1_5_11();
+
+}
+
+function f1_6_0(){
+ return Math.random()
+}
+
+function f1_6_1(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f1_6_2(){
+ return Math.random()
+}
+
+function f1_6_3(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f1_6_4(){
+ return Math.random()
+}
+
+function f1_6_5(){
+ return Math.random()
+}
+
+function f1_6_6(){
+ return Math.random()
+}
+
+function f1_6_7(){
+ return Math.random()
+}
+
+function f1_6_8(){
+ return isNaN(undefined)
+}
+
+function f1_6_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_6_10(){
+ return Math.random()
+}
+
+function f1_6_11(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f1_6(){
+ f1_6_0();
+ f1_6_1();
+ f1_6_2();
+ f1_6_3();
+ f1_6_4();
+ f1_6_5();
+ f1_6_6();
+ f1_6_7();
+ f1_6_8();
+ f1_6_9();
+ f1_6_10();
+ f1_6_11();
+
+}
+
+function f1_7_0(){
+ return Math.random()
+}
+
+function f1_7_1(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_7_2(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_7_3(){
+ return Math.random()
+}
+
+function f1_7_4(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_7_5(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_7_6(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f1_7_7(){
+ return isNaN(undefined)
+}
+
+function f1_7_8(){
+ return isNaN(undefined)
+}
+
+function f1_7_9(){
+ return isNaN(undefined)
+}
+
+function f1_7_10(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f1_7_11(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f1_7(){
+ f1_7_0();
+ f1_7_1();
+ f1_7_2();
+ f1_7_3();
+ f1_7_4();
+ f1_7_5();
+ f1_7_6();
+ f1_7_7();
+ f1_7_8();
+ f1_7_9();
+ f1_7_10();
+ f1_7_11();
+
+}
+
+function f1_8_0(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_8_1(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f1_8_2(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_8_3(){
+ return isNaN(undefined)
+}
+
+function f1_8_4(){
+ return isNaN(undefined)
+}
+
+function f1_8_5(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_8_6(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_8_7(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_8_8(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f1_8_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_8_10(){
+ return isNaN(undefined)
+}
+
+function f1_8_11(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_8(){
+ f1_8_0();
+ f1_8_1();
+ f1_8_2();
+ f1_8_3();
+ f1_8_4();
+ f1_8_5();
+ f1_8_6();
+ f1_8_7();
+ f1_8_8();
+ f1_8_9();
+ f1_8_10();
+ f1_8_11();
+
+}
+
+function f1_9_0(){
+ return Math.random()
+}
+
+function f1_9_1(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_9_2(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f1_9_3(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f1_9_4(){
+ return Math.random()
+}
+
+function f1_9_5(){
+ return isNaN(undefined)
+}
+
+function f1_9_6(){
+ return isNaN(undefined)
+}
+
+function f1_9_7(){
+ return Math.random()
+}
+
+function f1_9_8(){
+ return Math.random()
+}
+
+function f1_9_9(){
+ return Math.random()
+}
+
+function f1_9_10(){
+ return isNaN(undefined)
+}
+
+function f1_9_11(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f1_9(){
+ f1_9_0();
+ f1_9_1();
+ f1_9_2();
+ f1_9_3();
+ f1_9_4();
+ f1_9_5();
+ f1_9_6();
+ f1_9_7();
+ f1_9_8();
+ f1_9_9();
+ f1_9_10();
+ f1_9_11();
+
+}
+
+function f1_10_0(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_10_1(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_10_2(){
+ return Math.random()
+}
+
+function f1_10_3(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f1_10_4(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f1_10_5(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_10_6(){
+ return Math.random()
+}
+
+function f1_10_7(){
+ return Math.random()
+}
+
+function f1_10_8(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_10_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_10_10(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f1_10_11(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_10(){
+ f1_10_0();
+ f1_10_1();
+ f1_10_2();
+ f1_10_3();
+ f1_10_4();
+ f1_10_5();
+ f1_10_6();
+ f1_10_7();
+ f1_10_8();
+ f1_10_9();
+ f1_10_10();
+ f1_10_11();
+
+}
+
+function f1_11_0(){
+ return isNaN(undefined)
+}
+
+function f1_11_1(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_11_2(){
+ return isNaN(undefined)
+}
+
+function f1_11_3(){
+ return isNaN(undefined)
+}
+
+function f1_11_4(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_11_5(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_11_6(){
+ return Math.random()
+}
+
+function f1_11_7(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_11_8(){
+ return Math.random()
+}
+
+function f1_11_9(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_11_10(){
+ return encodeURIComponent(",45098#\"¤#\"&¤/%\"Q\"")
+}
+
+function f1_11_11(){
+ return Math.random()
+}
+
+function f1_11(){
+ f1_11_0();
+ f1_11_1();
+ f1_11_2();
+ f1_11_3();
+ f1_11_4();
+ f1_11_5();
+ f1_11_6();
+ f1_11_7();
+ f1_11_8();
+ f1_11_9();
+ f1_11_10();
+ f1_11_11();
+}
+
+function f2(){
+ f2_0();
+ f2_1();
+ f2_2();
+ f2_3();
+ f2_4();
+ f2_5();
+ f2_6();
+ f2_7();
+ f2_8();
+ f2_9();
+ f2_10();
+ f2_11();
+
+}
+
+function f3(){
+ return isNaN(undefined)
+}
+
+function f4(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f5(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f6(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f7(){
+ return isNaN(undefined)
+}
+
+function f8(){
+ return Math.max(Math.random(), Math.random())
+}
+
+function f9(){
+ return isNaN(undefined)
+}
+
+function f10(){
+ return isNaN(undefined)
+}
+
+function f11(){
+ return isNaN(undefined)
+}
+
+export function stepInTest(){
+
+ f0();
+ f1();
+ f2();
+ f3();
+ f4();
+ f5();
+ f6();
+ f7();
+ f8();
+ f9();
+ f10();
+ f11();
+ console.log('Done!');
+
+}
+
+export function debugStatement(){
+
+ debugger;
+ f0();
+ f1();
+ f2();
+ f3();
+ f4();
+ f5();
+ f6();
+ f7();
+ f8();
+ f9();
+ f10();
+ f11();
+ console.log('Done!');
+
+}
+
diff --git a/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/src/step-out-test.js b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/src/step-out-test.js
new file mode 100644
index 0000000000..6dfac40fb1
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/src/step-out-test.js
@@ -0,0 +1,1001 @@
+function f0() {
+ f1();
+ return Math.random();
+}
+
+function f1() {
+ f2();
+ return Math.random();
+}
+
+function f2() {
+ f3();
+ return Math.random();
+}
+
+function f3() {
+ f4();
+ return Math.random();
+}
+
+function f4() {
+ f5();
+ return Math.random();
+}
+
+function f5() {
+ f6();
+ return Math.random();
+}
+
+function f6() {
+ f7();
+ return Math.random();
+}
+
+function f7() {
+ f8();
+ return Math.random();
+}
+
+function f8() {
+ f9();
+ return Math.random();
+}
+
+function f9() {
+ f10();
+ return Math.random();
+}
+
+function f10() {
+ f11();
+ return Math.random();
+}
+
+function f11() {
+ f12();
+ return Math.random();
+}
+
+function f12() {
+ f13();
+ return Math.random();
+}
+
+function f13() {
+ f14();
+ return Math.random();
+}
+
+function f14() {
+ f15();
+ return Math.random();
+}
+
+function f15() {
+ f16();
+ return Math.random();
+}
+
+function f16() {
+ f17();
+ return Math.random();
+}
+
+function f17() {
+ f18();
+ return Math.random();
+}
+
+function f18() {
+ f19();
+ return Math.random();
+}
+
+function f19() {
+ f20();
+ return Math.random();
+}
+
+function f20() {
+ f21();
+ return Math.random();
+}
+
+function f21() {
+ f22();
+ return Math.random();
+}
+
+function f22() {
+ f23();
+ return Math.random();
+}
+
+function f23() {
+ f24();
+ return Math.random();
+}
+
+function f24() {
+ f25();
+ return Math.random();
+}
+
+function f25() {
+ f26();
+ return Math.random();
+}
+
+function f26() {
+ f27();
+ return Math.random();
+}
+
+function f27() {
+ f28();
+ return Math.random();
+}
+
+function f28() {
+ f29();
+ return Math.random();
+}
+
+function f29() {
+ f30();
+ return Math.random();
+}
+
+function f30() {
+ f31();
+ return Math.random();
+}
+
+function f31() {
+ f32();
+ return Math.random();
+}
+
+function f32() {
+ f33();
+ return Math.random();
+}
+
+function f33() {
+ f34();
+ return Math.random();
+}
+
+function f34() {
+ f35();
+ return Math.random();
+}
+
+function f35() {
+ f36();
+ return Math.random();
+}
+
+function f36() {
+ f37();
+ return Math.random();
+}
+
+function f37() {
+ f38();
+ return Math.random();
+}
+
+function f38() {
+ f39();
+ return Math.random();
+}
+
+function f39() {
+ f40();
+ return Math.random();
+}
+
+function f40() {
+ f41();
+ return Math.random();
+}
+
+function f41() {
+ f42();
+ return Math.random();
+}
+
+function f42() {
+ f43();
+ return Math.random();
+}
+
+function f43() {
+ f44();
+ return Math.random();
+}
+
+function f44() {
+ f45();
+ return Math.random();
+}
+
+function f45() {
+ f46();
+ return Math.random();
+}
+
+function f46() {
+ f47();
+ return Math.random();
+}
+
+function f47() {
+ f48();
+ return Math.random();
+}
+
+function f48() {
+ f49();
+ return Math.random();
+}
+
+function f49() {
+ f50();
+ return Math.random();
+}
+
+function f50() {
+ f51();
+ return Math.random();
+}
+
+function f51() {
+ f52();
+ return Math.random();
+}
+
+function f52() {
+ f53();
+ return Math.random();
+}
+
+function f53() {
+ f54();
+ return Math.random();
+}
+
+function f54() {
+ f55();
+ return Math.random();
+}
+
+function f55() {
+ f56();
+ return Math.random();
+}
+
+function f56() {
+ f57();
+ return Math.random();
+}
+
+function f57() {
+ f58();
+ return Math.random();
+}
+
+function f58() {
+ f59();
+ return Math.random();
+}
+
+function f59() {
+ f60();
+ return Math.random();
+}
+
+function f60() {
+ f61();
+ return Math.random();
+}
+
+function f61() {
+ f62();
+ return Math.random();
+}
+
+function f62() {
+ f63();
+ return Math.random();
+}
+
+function f63() {
+ f64();
+ return Math.random();
+}
+
+function f64() {
+ f65();
+ return Math.random();
+}
+
+function f65() {
+ f66();
+ return Math.random();
+}
+
+function f66() {
+ f67();
+ return Math.random();
+}
+
+function f67() {
+ f68();
+ return Math.random();
+}
+
+function f68() {
+ f69();
+ return Math.random();
+}
+
+function f69() {
+ f70();
+ return Math.random();
+}
+
+function f70() {
+ f71();
+ return Math.random();
+}
+
+function f71() {
+ f72();
+ return Math.random();
+}
+
+function f72() {
+ f73();
+ return Math.random();
+}
+
+function f73() {
+ f74();
+ return Math.random();
+}
+
+function f74() {
+ f75();
+ return Math.random();
+}
+
+function f75() {
+ f76();
+ return Math.random();
+}
+
+function f76() {
+ f77();
+ return Math.random();
+}
+
+function f77() {
+ f78();
+ return Math.random();
+}
+
+function f78() {
+ f79();
+ return Math.random();
+}
+
+function f79() {
+ f80();
+ return Math.random();
+}
+
+function f80() {
+ f81();
+ return Math.random();
+}
+
+function f81() {
+ f82();
+ return Math.random();
+}
+
+function f82() {
+ f83();
+ return Math.random();
+}
+
+function f83() {
+ f84();
+ return Math.random();
+}
+
+function f84() {
+ f85();
+ return Math.random();
+}
+
+function f85() {
+ f86();
+ return Math.random();
+}
+
+function f86() {
+ f87();
+ return Math.random();
+}
+
+function f87() {
+ f88();
+ return Math.random();
+}
+
+function f88() {
+ f89();
+ return Math.random();
+}
+
+function f89() {
+ f90();
+ return Math.random();
+}
+
+function f90() {
+ f91();
+ return Math.random();
+}
+
+function f91() {
+ f92();
+ return Math.random();
+}
+
+function f92() {
+ f93();
+ return Math.random();
+}
+
+function f93() {
+ f94();
+ return Math.random();
+}
+
+function f94() {
+ f95();
+ return Math.random();
+}
+
+function f95() {
+ f96();
+ return Math.random();
+}
+
+function f96() {
+ f97();
+ return Math.random();
+}
+
+function f97() {
+ f98();
+ return Math.random();
+}
+
+function f98() {
+ f99();
+ return Math.random();
+}
+
+function f99() {
+ f100();
+ return Math.random();
+}
+
+
+function f100() {
+ f101();
+ return Math.random();
+}
+
+function f101() {
+ f102();
+ return Math.random();
+}
+
+function f102() {
+ f103();
+ return Math.random();
+}
+
+function f103() {
+ f104();
+ return Math.random();
+}
+
+function f104() {
+ f105();
+ return Math.random();
+}
+
+function f105() {
+ f106();
+ return Math.random();
+}
+
+function f106() {
+ f107();
+ return Math.random();
+}
+
+function f107() {
+ f108();
+ return Math.random();
+}
+
+function f108() {
+ f109();
+ return Math.random();
+}
+
+function f109() {
+ f110();
+ return Math.random();
+}
+
+function f110() {
+ f111();
+ return Math.random();
+}
+
+function f111() {
+ f112();
+ return Math.random();
+}
+
+function f112() {
+ f113();
+ return Math.random();
+}
+
+function f113() {
+ f114();
+ return Math.random();
+}
+
+function f114() {
+ f115();
+ return Math.random();
+}
+
+function f115() {
+ f116();
+ return Math.random();
+}
+
+function f116() {
+ f117();
+ return Math.random();
+}
+
+function f117() {
+ f118();
+ return Math.random();
+}
+
+function f118() {
+ f119();
+ return Math.random();
+}
+
+function f119() {
+ f120();
+ return Math.random();
+}
+
+function f120() {
+ f121();
+ return Math.random();
+}
+
+function f121() {
+ f122();
+ return Math.random();
+}
+
+function f122() {
+ f123();
+ return Math.random();
+}
+
+function f123() {
+ f124();
+ return Math.random();
+}
+
+function f124() {
+ f125();
+ return Math.random();
+}
+
+function f125() {
+ f126();
+ return Math.random();
+}
+
+function f126() {
+ f127();
+ return Math.random();
+}
+
+function f127() {
+ f128();
+ return Math.random();
+}
+
+function f128() {
+ f129();
+ return Math.random();
+}
+
+function f129() {
+ f130();
+ return Math.random();
+}
+
+function f130() {
+ f131();
+ return Math.random();
+}
+
+function f131() {
+ f132();
+ return Math.random();
+}
+
+function f132() {
+ f133();
+ return Math.random();
+}
+
+function f133() {
+ f134();
+ return Math.random();
+}
+
+function f134() {
+ f135();
+ return Math.random();
+}
+
+function f135() {
+ f136();
+ return Math.random();
+}
+
+function f136() {
+ f137();
+ return Math.random();
+}
+
+function f137() {
+ f138();
+ return Math.random();
+}
+
+function f138() {
+ f139();
+ return Math.random();
+}
+
+function f139() {
+ f140();
+ return Math.random();
+}
+
+function f140() {
+ f141();
+ return Math.random();
+}
+
+function f141() {
+ f142();
+ return Math.random();
+}
+
+function f142() {
+ f143();
+ return Math.random();
+}
+
+function f143() {
+ f144();
+ return Math.random();
+}
+
+function f144() {
+ f145();
+ return Math.random();
+}
+
+function f145() {
+ f146();
+ return Math.random();
+}
+
+function f146() {
+ f147();
+ return Math.random();
+}
+
+function f147() {
+ f148();
+ return Math.random();
+}
+
+function f148() {
+ f149();
+ return Math.random();
+}
+
+function f149() {
+ f150();
+ return Math.random();
+}
+
+function f150() {
+ f151();
+ return Math.random();
+}
+
+function f151() {
+ f152();
+ return Math.random();
+}
+
+function f152() {
+ f153();
+ return Math.random();
+}
+
+function f153() {
+ f154();
+ return Math.random();
+}
+
+function f154() {
+ f155();
+ return Math.random();
+}
+
+function f155() {
+ f156();
+ return Math.random();
+}
+
+function f156() {
+ f157();
+ return Math.random();
+}
+
+function f157() {
+ f158();
+ return Math.random();
+}
+
+function f158() {
+ f159();
+ return Math.random();
+}
+
+function f159() {
+ f160();
+ return Math.random();
+}
+
+function f160() {
+ f161();
+ return Math.random();
+}
+
+function f161() {
+ f162();
+ return Math.random();
+}
+
+function f162() {
+ f163();
+ return Math.random();
+}
+
+function f163() {
+ f164();
+ return Math.random();
+}
+
+function f164() {
+ f165();
+ return Math.random();
+}
+
+function f165() {
+ f166();
+ return Math.random();
+}
+
+function f166() {
+ f167();
+ return Math.random();
+}
+
+function f167() {
+ f168();
+ return Math.random();
+}
+
+function f168() {
+ f169();
+ return Math.random();
+}
+
+function f169() {
+ f170();
+ return Math.random();
+}
+
+function f170() {
+ f171();
+ return Math.random();
+}
+
+function f171() {
+ f172();
+ return Math.random();
+}
+
+function f172() {
+ f173();
+ return Math.random();
+}
+
+function f173() {
+ f174();
+ return Math.random();
+}
+
+function f174() {
+ f175();
+ return Math.random();
+}
+
+function f175() {
+ f176();
+ return Math.random();
+}
+
+function f176() {
+ f177();
+ return Math.random();
+}
+
+function f177() {
+ f178();
+ return Math.random();
+}
+
+function f178() {
+ f179();
+ return Math.random();
+}
+
+function f179() {
+ f180();
+ return Math.random();
+}
+
+function f180() {
+ f181();
+ return Math.random();
+}
+
+function f181() {
+ f182();
+ return Math.random();
+}
+
+function f182() {
+ f183();
+ return Math.random();
+}
+
+function f183() {
+ f184();
+ return Math.random();
+}
+
+function f184() {
+ f185();
+ return Math.random();
+}
+
+function f185() {
+ f186();
+ return Math.random();
+}
+
+function f186() {
+ f187();
+ return Math.random();
+}
+
+function f187() {
+ f188();
+ return Math.random();
+}
+
+function f188() {
+ f189();
+ return Math.random();
+}
+
+function f189() {
+ f190();
+ return Math.random();
+}
+
+function f190() {
+ f191();
+ return Math.random();
+}
+
+function f191() {
+ f192();
+ return Math.random();
+}
+
+function f192() {
+ f193();
+ return Math.random();
+}
+
+function f193() {
+ f194();
+ return Math.random();
+}
+
+function f194() {
+ f195();
+ return Math.random();
+}
+
+function f195() {
+ f196();
+ return Math.random();
+}
+
+function f196() {
+ f197();
+ return Math.random();
+}
+
+function f197() {
+ f198();
+ return Math.random();
+}
+
+function f198() {
+ f199();
+ return Math.random();
+}
+
+function f199() {
+ return Math.random();
+}
+
+export default f0;
diff --git a/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/src/step-over-test.js b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/src/step-over-test.js
new file mode 100644
index 0000000000..d49529dcc2
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/src/step-over-test.js
@@ -0,0 +1,28 @@
+function squareAndOne(arg){
+ return (arg * arg) + 1;
+}
+function squareUntil(arg, limit){
+ if(arg * arg >= limit){
+ return arg * arg;
+ }else{
+ return squareUntil(arg * arg, limit);
+ }
+}
+
+function addUntil(arg1, arg2, limit){
+ if(arg1 + arg2 > limit){
+ return arg1 + arg2;
+ }else{
+ return addUntil(arg1 + arg2, arg2, limit);
+ }
+}
+
+function testStart(aArg) {
+ var r = 10;
+ var a = squareAndOne(r);
+ var b = squareUntil(r, 99999999999); //recurses 3 times, returns on 4th call
+ var c = addUntil(r, 5, 1050); // recurses 208 times and returns on the 209th call
+ return a + b + c;
+}
+
+export default testStart;
diff --git a/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/yarn.lock b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/yarn.lock
new file mode 100644
index 0000000000..afb8e0aeac
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/yarn.lock
@@ -0,0 +1,6567 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+abab@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e"
+
+abbrev@1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
+
+accepts@~1.3.4:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.4.tgz#86246758c7dd6d21a6474ff084a4740ec05eb21f"
+ dependencies:
+ mime-types "~2.1.16"
+ negotiator "0.6.1"
+
+acorn-dynamic-import@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4"
+ dependencies:
+ acorn "^4.0.3"
+
+acorn-globals@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf"
+ dependencies:
+ acorn "^4.0.4"
+
+acorn-jsx@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b"
+ dependencies:
+ acorn "^3.0.4"
+
+acorn@^3.0.4:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
+
+acorn@^4.0.3, acorn@^4.0.4:
+ version "4.0.13"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787"
+
+acorn@^5.0.0, acorn@^5.2.1:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.2.1.tgz#317ac7821826c22c702d66189ab8359675f135d7"
+
+address@1.0.3, address@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/address/-/address-1.0.3.tgz#b5f50631f8d6cec8bd20c963963afb55e06cbce9"
+
+ajv-keywords@^2.0.0, ajv-keywords@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762"
+
+ajv@^4.9.1:
+ version "4.11.8"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536"
+ dependencies:
+ co "^4.6.0"
+ json-stable-stringify "^1.0.1"
+
+ajv@^5.0.0, ajv@^5.1.5, ajv@^5.2.0, ajv@^5.2.3, ajv@^5.3.0:
+ version "5.5.2"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965"
+ dependencies:
+ co "^4.6.0"
+ fast-deep-equal "^1.0.0"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.3.0"
+
+align-text@^0.1.1, align-text@^0.1.3:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
+ dependencies:
+ kind-of "^3.0.2"
+ longest "^1.0.1"
+ repeat-string "^1.5.2"
+
+alphanum-sort@^1.0.1, alphanum-sort@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
+
+amdefine@>=0.0.4:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
+
+ansi-align@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-1.1.0.tgz#2f0c1658829739add5ebb15e6b0c6e3423f016ba"
+ dependencies:
+ string-width "^1.0.1"
+
+ansi-escapes@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e"
+
+ansi-escapes@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.0.0.tgz#ec3e8b4e9f8064fc02c3ac9b65f1c275bda8ef92"
+
+ansi-html@0.0.7:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e"
+
+ansi-regex@^2.0.0, ansi-regex@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
+
+ansi-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
+
+ansi-styles@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
+
+ansi-styles@^3.0.0, ansi-styles@^3.1.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88"
+ dependencies:
+ color-convert "^1.9.0"
+
+anymatch@^1.3.0:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a"
+ dependencies:
+ micromatch "^2.1.5"
+ normalize-path "^2.0.0"
+
+append-transform@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991"
+ dependencies:
+ default-require-extensions "^1.0.0"
+
+aproba@^1.0.3:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
+
+are-we-there-yet@~1.1.2:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d"
+ dependencies:
+ delegates "^1.0.0"
+ readable-stream "^2.0.6"
+
+argparse@^1.0.7:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86"
+ dependencies:
+ sprintf-js "~1.0.2"
+
+aria-query@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-0.7.0.tgz#4af10a1e61573ddea0cf3b99b51c52c05b424d24"
+ dependencies:
+ ast-types-flow "0.0.7"
+
+arr-diff@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
+ dependencies:
+ arr-flatten "^1.0.1"
+
+arr-flatten@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
+
+array-equal@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93"
+
+array-filter@~0.0.0:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec"
+
+array-find-index@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
+
+array-flatten@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
+
+array-flatten@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.1.tgz#426bb9da84090c1838d812c8150af20a8331e296"
+
+array-includes@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d"
+ dependencies:
+ define-properties "^1.1.2"
+ es-abstract "^1.7.0"
+
+array-map@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662"
+
+array-reduce@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b"
+
+array-union@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
+ dependencies:
+ array-uniq "^1.0.1"
+
+array-uniq@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
+
+array-unique@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
+
+arrify@^1.0.0, arrify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
+
+asap@~2.0.3:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
+
+asn1.js@^4.0.0:
+ version "4.9.2"
+ resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.9.2.tgz#8117ef4f7ed87cd8f89044b5bff97ac243a16c9a"
+ dependencies:
+ bn.js "^4.0.0"
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+
+asn1@~0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
+
+assert-plus@1.0.0, assert-plus@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+
+assert-plus@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234"
+
+assert@^1.1.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91"
+ dependencies:
+ util "0.10.3"
+
+ast-types-flow@0.0.7:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad"
+
+async-each@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
+
+async@^1.4.0, async@^1.5.2:
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
+
+async@^2.1.2, async@^2.1.4, async@^2.4.1:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4"
+ dependencies:
+ lodash "^4.14.0"
+
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+
+autoprefixer@7.1.6:
+ version "7.1.6"
+ resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.1.6.tgz#fb933039f74af74a83e71225ce78d9fd58ba84d7"
+ dependencies:
+ browserslist "^2.5.1"
+ caniuse-lite "^1.0.30000748"
+ normalize-range "^0.1.2"
+ num2fraction "^1.2.2"
+ postcss "^6.0.13"
+ postcss-value-parser "^3.2.3"
+
+autoprefixer@^6.3.1:
+ version "6.7.7"
+ resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014"
+ dependencies:
+ browserslist "^1.7.6"
+ caniuse-db "^1.0.30000634"
+ normalize-range "^0.1.2"
+ num2fraction "^1.2.2"
+ postcss "^5.2.16"
+ postcss-value-parser "^3.2.3"
+
+aws-sign2@~0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
+
+aws4@^1.2.1:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e"
+
+axobject-query@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-0.1.0.tgz#62f59dbc59c9f9242759ca349960e7a2fe3c36c0"
+ dependencies:
+ ast-types-flow "0.0.7"
+
+babel-code-frame@6.26.0, babel-code-frame@^6.11.0, babel-code-frame@^6.22.0, babel-code-frame@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
+ dependencies:
+ chalk "^1.1.3"
+ esutils "^2.0.2"
+ js-tokens "^3.0.2"
+
+babel-core@6.26.0, babel-core@^6.0.0, babel-core@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8"
+ dependencies:
+ babel-code-frame "^6.26.0"
+ babel-generator "^6.26.0"
+ babel-helpers "^6.24.1"
+ babel-messages "^6.23.0"
+ babel-register "^6.26.0"
+ babel-runtime "^6.26.0"
+ babel-template "^6.26.0"
+ babel-traverse "^6.26.0"
+ babel-types "^6.26.0"
+ babylon "^6.18.0"
+ convert-source-map "^1.5.0"
+ debug "^2.6.8"
+ json5 "^0.5.1"
+ lodash "^4.17.4"
+ minimatch "^3.0.4"
+ path-is-absolute "^1.0.1"
+ private "^0.1.7"
+ slash "^1.0.0"
+ source-map "^0.5.6"
+
+babel-eslint@7.2.3:
+ version "7.2.3"
+ resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-7.2.3.tgz#b2fe2d80126470f5c19442dc757253a897710827"
+ dependencies:
+ babel-code-frame "^6.22.0"
+ babel-traverse "^6.23.1"
+ babel-types "^6.23.0"
+ babylon "^6.17.0"
+
+babel-generator@^6.18.0, babel-generator@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.0.tgz#ac1ae20070b79f6e3ca1d3269613053774f20dc5"
+ dependencies:
+ babel-messages "^6.23.0"
+ babel-runtime "^6.26.0"
+ babel-types "^6.26.0"
+ detect-indent "^4.0.0"
+ jsesc "^1.3.0"
+ lodash "^4.17.4"
+ source-map "^0.5.6"
+ trim-right "^1.0.1"
+
+babel-helper-builder-binary-assignment-operator-visitor@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664"
+ dependencies:
+ babel-helper-explode-assignable-expression "^6.24.1"
+ babel-runtime "^6.22.0"
+ babel-types "^6.24.1"
+
+babel-helper-builder-react-jsx@^6.24.1:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz#39ff8313b75c8b65dceff1f31d383e0ff2a408a0"
+ dependencies:
+ babel-runtime "^6.26.0"
+ babel-types "^6.26.0"
+ esutils "^2.0.2"
+
+babel-helper-call-delegate@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d"
+ dependencies:
+ babel-helper-hoist-variables "^6.24.1"
+ babel-runtime "^6.22.0"
+ babel-traverse "^6.24.1"
+ babel-types "^6.24.1"
+
+babel-helper-define-map@^6.24.1:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f"
+ dependencies:
+ babel-helper-function-name "^6.24.1"
+ babel-runtime "^6.26.0"
+ babel-types "^6.26.0"
+ lodash "^4.17.4"
+
+babel-helper-explode-assignable-expression@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa"
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-traverse "^6.24.1"
+ babel-types "^6.24.1"
+
+babel-helper-function-name@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9"
+ dependencies:
+ babel-helper-get-function-arity "^6.24.1"
+ babel-runtime "^6.22.0"
+ babel-template "^6.24.1"
+ babel-traverse "^6.24.1"
+ babel-types "^6.24.1"
+
+babel-helper-get-function-arity@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d"
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-types "^6.24.1"
+
+babel-helper-hoist-variables@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76"
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-types "^6.24.1"
+
+babel-helper-optimise-call-expression@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257"
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-types "^6.24.1"
+
+babel-helper-regex@^6.24.1:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72"
+ dependencies:
+ babel-runtime "^6.26.0"
+ babel-types "^6.26.0"
+ lodash "^4.17.4"
+
+babel-helper-remap-async-to-generator@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b"
+ dependencies:
+ babel-helper-function-name "^6.24.1"
+ babel-runtime "^6.22.0"
+ babel-template "^6.24.1"
+ babel-traverse "^6.24.1"
+ babel-types "^6.24.1"
+
+babel-helper-replace-supers@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a"
+ dependencies:
+ babel-helper-optimise-call-expression "^6.24.1"
+ babel-messages "^6.23.0"
+ babel-runtime "^6.22.0"
+ babel-template "^6.24.1"
+ babel-traverse "^6.24.1"
+ babel-types "^6.24.1"
+
+babel-helpers@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2"
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-template "^6.24.1"
+
+babel-jest@20.0.3, babel-jest@^20.0.3:
+ version "20.0.3"
+ resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-20.0.3.tgz#e4a03b13dc10389e140fc645d09ffc4ced301671"
+ dependencies:
+ babel-core "^6.0.0"
+ babel-plugin-istanbul "^4.0.0"
+ babel-preset-jest "^20.0.3"
+
+babel-loader@7.1.2:
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.2.tgz#f6cbe122710f1aa2af4d881c6d5b54358ca24126"
+ dependencies:
+ find-cache-dir "^1.0.0"
+ loader-utils "^1.0.2"
+ mkdirp "^0.5.1"
+
+babel-messages@^6.23.0:
+ version "6.23.0"
+ resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e"
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-check-es2015-constants@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a"
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-dynamic-import-node@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-1.1.0.tgz#bd1d88ac7aaf98df4917c384373b04d971a2b37a"
+ dependencies:
+ babel-plugin-syntax-dynamic-import "^6.18.0"
+ babel-template "^6.26.0"
+ babel-types "^6.26.0"
+
+babel-plugin-istanbul@^4.0.0:
+ version "4.1.5"
+ resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.5.tgz#6760cdd977f411d3e175bb064f2bc327d99b2b6e"
+ dependencies:
+ find-up "^2.1.0"
+ istanbul-lib-instrument "^1.7.5"
+ test-exclude "^4.1.1"
+
+babel-plugin-jest-hoist@^20.0.3:
+ version "20.0.3"
+ resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-20.0.3.tgz#afedc853bd3f8dc3548ea671fbe69d03cc2c1767"
+
+babel-plugin-syntax-async-functions@^6.8.0:
+ version "6.13.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95"
+
+babel-plugin-syntax-class-properties@^6.8.0:
+ version "6.13.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de"
+
+babel-plugin-syntax-dynamic-import@6.18.0, babel-plugin-syntax-dynamic-import@^6.18.0:
+ version "6.18.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da"
+
+babel-plugin-syntax-exponentiation-operator@^6.8.0:
+ version "6.13.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de"
+
+babel-plugin-syntax-flow@^6.18.0:
+ version "6.18.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d"
+
+babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0:
+ version "6.18.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946"
+
+babel-plugin-syntax-object-rest-spread@^6.8.0:
+ version "6.13.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5"
+
+babel-plugin-syntax-trailing-function-commas@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3"
+
+babel-plugin-transform-async-to-generator@^6.22.0:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761"
+ dependencies:
+ babel-helper-remap-async-to-generator "^6.24.1"
+ babel-plugin-syntax-async-functions "^6.8.0"
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-class-properties@6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac"
+ dependencies:
+ babel-helper-function-name "^6.24.1"
+ babel-plugin-syntax-class-properties "^6.8.0"
+ babel-runtime "^6.22.0"
+ babel-template "^6.24.1"
+
+babel-plugin-transform-es2015-arrow-functions@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221"
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-block-scoped-functions@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141"
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-block-scoping@^6.23.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f"
+ dependencies:
+ babel-runtime "^6.26.0"
+ babel-template "^6.26.0"
+ babel-traverse "^6.26.0"
+ babel-types "^6.26.0"
+ lodash "^4.17.4"
+
+babel-plugin-transform-es2015-classes@^6.23.0:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db"
+ dependencies:
+ babel-helper-define-map "^6.24.1"
+ babel-helper-function-name "^6.24.1"
+ babel-helper-optimise-call-expression "^6.24.1"
+ babel-helper-replace-supers "^6.24.1"
+ babel-messages "^6.23.0"
+ babel-runtime "^6.22.0"
+ babel-template "^6.24.1"
+ babel-traverse "^6.24.1"
+ babel-types "^6.24.1"
+
+babel-plugin-transform-es2015-computed-properties@^6.22.0:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3"
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-template "^6.24.1"
+
+babel-plugin-transform-es2015-destructuring@^6.23.0:
+ version "6.23.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d"
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-duplicate-keys@^6.22.0:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e"
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-types "^6.24.1"
+
+babel-plugin-transform-es2015-for-of@^6.23.0:
+ version "6.23.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691"
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-function-name@^6.22.0:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b"
+ dependencies:
+ babel-helper-function-name "^6.24.1"
+ babel-runtime "^6.22.0"
+ babel-types "^6.24.1"
+
+babel-plugin-transform-es2015-literals@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e"
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154"
+ dependencies:
+ babel-plugin-transform-es2015-modules-commonjs "^6.24.1"
+ babel-runtime "^6.22.0"
+ babel-template "^6.24.1"
+
+babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a"
+ dependencies:
+ babel-plugin-transform-strict-mode "^6.24.1"
+ babel-runtime "^6.26.0"
+ babel-template "^6.26.0"
+ babel-types "^6.26.0"
+
+babel-plugin-transform-es2015-modules-systemjs@^6.23.0:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23"
+ dependencies:
+ babel-helper-hoist-variables "^6.24.1"
+ babel-runtime "^6.22.0"
+ babel-template "^6.24.1"
+
+babel-plugin-transform-es2015-modules-umd@^6.23.0:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468"
+ dependencies:
+ babel-plugin-transform-es2015-modules-amd "^6.24.1"
+ babel-runtime "^6.22.0"
+ babel-template "^6.24.1"
+
+babel-plugin-transform-es2015-object-super@^6.22.0:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d"
+ dependencies:
+ babel-helper-replace-supers "^6.24.1"
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-parameters@^6.23.0:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b"
+ dependencies:
+ babel-helper-call-delegate "^6.24.1"
+ babel-helper-get-function-arity "^6.24.1"
+ babel-runtime "^6.22.0"
+ babel-template "^6.24.1"
+ babel-traverse "^6.24.1"
+ babel-types "^6.24.1"
+
+babel-plugin-transform-es2015-shorthand-properties@^6.22.0:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0"
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-types "^6.24.1"
+
+babel-plugin-transform-es2015-spread@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1"
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-sticky-regex@^6.22.0:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc"
+ dependencies:
+ babel-helper-regex "^6.24.1"
+ babel-runtime "^6.22.0"
+ babel-types "^6.24.1"
+
+babel-plugin-transform-es2015-template-literals@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d"
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-typeof-symbol@^6.23.0:
+ version "6.23.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372"
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-unicode-regex@^6.22.0:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9"
+ dependencies:
+ babel-helper-regex "^6.24.1"
+ babel-runtime "^6.22.0"
+ regexpu-core "^2.0.0"
+
+babel-plugin-transform-exponentiation-operator@^6.22.0:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e"
+ dependencies:
+ babel-helper-builder-binary-assignment-operator-visitor "^6.24.1"
+ babel-plugin-syntax-exponentiation-operator "^6.8.0"
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-flow-strip-types@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf"
+ dependencies:
+ babel-plugin-syntax-flow "^6.18.0"
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-object-rest-spread@6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06"
+ dependencies:
+ babel-plugin-syntax-object-rest-spread "^6.8.0"
+ babel-runtime "^6.26.0"
+
+babel-plugin-transform-react-constant-elements@6.23.0:
+ version "6.23.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-constant-elements/-/babel-plugin-transform-react-constant-elements-6.23.0.tgz#2f119bf4d2cdd45eb9baaae574053c604f6147dd"
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-react-display-name@^6.23.0:
+ version "6.25.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz#67e2bf1f1e9c93ab08db96792e05392bf2cc28d1"
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-react-jsx-self@6.22.0, babel-plugin-transform-react-jsx-self@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz#df6d80a9da2612a121e6ddd7558bcbecf06e636e"
+ dependencies:
+ babel-plugin-syntax-jsx "^6.8.0"
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-react-jsx-source@6.22.0, babel-plugin-transform-react-jsx-source@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz#66ac12153f5cd2d17b3c19268f4bf0197f44ecd6"
+ dependencies:
+ babel-plugin-syntax-jsx "^6.8.0"
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-react-jsx@6.24.1, babel-plugin-transform-react-jsx@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3"
+ dependencies:
+ babel-helper-builder-react-jsx "^6.24.1"
+ babel-plugin-syntax-jsx "^6.8.0"
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-regenerator@6.26.0, babel-plugin-transform-regenerator@^6.22.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f"
+ dependencies:
+ regenerator-transform "^0.10.0"
+
+babel-plugin-transform-runtime@6.23.0:
+ version "6.23.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz#88490d446502ea9b8e7efb0fe09ec4d99479b1ee"
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-strict-mode@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758"
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-types "^6.24.1"
+
+babel-preset-env@1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.6.1.tgz#a18b564cc9b9afdf4aae57ae3c1b0d99188e6f48"
+ dependencies:
+ babel-plugin-check-es2015-constants "^6.22.0"
+ babel-plugin-syntax-trailing-function-commas "^6.22.0"
+ babel-plugin-transform-async-to-generator "^6.22.0"
+ babel-plugin-transform-es2015-arrow-functions "^6.22.0"
+ babel-plugin-transform-es2015-block-scoped-functions "^6.22.0"
+ babel-plugin-transform-es2015-block-scoping "^6.23.0"
+ babel-plugin-transform-es2015-classes "^6.23.0"
+ babel-plugin-transform-es2015-computed-properties "^6.22.0"
+ babel-plugin-transform-es2015-destructuring "^6.23.0"
+ babel-plugin-transform-es2015-duplicate-keys "^6.22.0"
+ babel-plugin-transform-es2015-for-of "^6.23.0"
+ babel-plugin-transform-es2015-function-name "^6.22.0"
+ babel-plugin-transform-es2015-literals "^6.22.0"
+ babel-plugin-transform-es2015-modules-amd "^6.22.0"
+ babel-plugin-transform-es2015-modules-commonjs "^6.23.0"
+ babel-plugin-transform-es2015-modules-systemjs "^6.23.0"
+ babel-plugin-transform-es2015-modules-umd "^6.23.0"
+ babel-plugin-transform-es2015-object-super "^6.22.0"
+ babel-plugin-transform-es2015-parameters "^6.23.0"
+ babel-plugin-transform-es2015-shorthand-properties "^6.22.0"
+ babel-plugin-transform-es2015-spread "^6.22.0"
+ babel-plugin-transform-es2015-sticky-regex "^6.22.0"
+ babel-plugin-transform-es2015-template-literals "^6.22.0"
+ babel-plugin-transform-es2015-typeof-symbol "^6.23.0"
+ babel-plugin-transform-es2015-unicode-regex "^6.22.0"
+ babel-plugin-transform-exponentiation-operator "^6.22.0"
+ babel-plugin-transform-regenerator "^6.22.0"
+ browserslist "^2.1.2"
+ invariant "^2.2.2"
+ semver "^5.3.0"
+
+babel-preset-flow@^6.23.0:
+ version "6.23.0"
+ resolved "https://registry.yarnpkg.com/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz#e71218887085ae9a24b5be4169affb599816c49d"
+ dependencies:
+ babel-plugin-transform-flow-strip-types "^6.22.0"
+
+babel-preset-jest@^20.0.3:
+ version "20.0.3"
+ resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-20.0.3.tgz#cbacaadecb5d689ca1e1de1360ebfc66862c178a"
+ dependencies:
+ babel-plugin-jest-hoist "^20.0.3"
+
+babel-preset-react-app@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/babel-preset-react-app/-/babel-preset-react-app-3.1.0.tgz#d77f6061ab9d7bf4b3cdc86b7cde9ded0df03e48"
+ dependencies:
+ babel-plugin-dynamic-import-node "1.1.0"
+ babel-plugin-syntax-dynamic-import "6.18.0"
+ babel-plugin-transform-class-properties "6.24.1"
+ babel-plugin-transform-object-rest-spread "6.26.0"
+ babel-plugin-transform-react-constant-elements "6.23.0"
+ babel-plugin-transform-react-jsx "6.24.1"
+ babel-plugin-transform-react-jsx-self "6.22.0"
+ babel-plugin-transform-react-jsx-source "6.22.0"
+ babel-plugin-transform-regenerator "6.26.0"
+ babel-plugin-transform-runtime "6.23.0"
+ babel-preset-env "1.6.1"
+ babel-preset-react "6.24.1"
+
+babel-preset-react@6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.24.1.tgz#ba69dfaea45fc3ec639b6a4ecea6e17702c91380"
+ dependencies:
+ babel-plugin-syntax-jsx "^6.3.13"
+ babel-plugin-transform-react-display-name "^6.23.0"
+ babel-plugin-transform-react-jsx "^6.24.1"
+ babel-plugin-transform-react-jsx-self "^6.22.0"
+ babel-plugin-transform-react-jsx-source "^6.22.0"
+ babel-preset-flow "^6.23.0"
+
+babel-register@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071"
+ dependencies:
+ babel-core "^6.26.0"
+ babel-runtime "^6.26.0"
+ core-js "^2.5.0"
+ home-or-tmp "^2.0.0"
+ lodash "^4.17.4"
+ mkdirp "^0.5.1"
+ source-map-support "^0.4.15"
+
+babel-runtime@6.26.0, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
+ dependencies:
+ core-js "^2.4.0"
+ regenerator-runtime "^0.11.0"
+
+babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02"
+ dependencies:
+ babel-runtime "^6.26.0"
+ babel-traverse "^6.26.0"
+ babel-types "^6.26.0"
+ babylon "^6.18.0"
+ lodash "^4.17.4"
+
+babel-traverse@^6.18.0, babel-traverse@^6.23.1, babel-traverse@^6.24.1, babel-traverse@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee"
+ dependencies:
+ babel-code-frame "^6.26.0"
+ babel-messages "^6.23.0"
+ babel-runtime "^6.26.0"
+ babel-types "^6.26.0"
+ babylon "^6.18.0"
+ debug "^2.6.8"
+ globals "^9.18.0"
+ invariant "^2.2.2"
+ lodash "^4.17.4"
+
+babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.23.0, babel-types@^6.24.1, babel-types@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497"
+ dependencies:
+ babel-runtime "^6.26.0"
+ esutils "^2.0.2"
+ lodash "^4.17.4"
+ to-fast-properties "^1.0.3"
+
+babylon@^6.17.0, babylon@^6.18.0:
+ version "6.18.0"
+ resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
+
+balanced-match@^0.4.2:
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
+
+balanced-match@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
+
+base64-js@^1.0.2:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.1.tgz#a91947da1f4a516ea38e5b4ec0ec3773675e0886"
+
+batch@0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16"
+
+bcrypt-pbkdf@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d"
+ dependencies:
+ tweetnacl "^0.14.3"
+
+big.js@^3.1.3:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e"
+
+binary-extensions@^1.0.0:
+ version "1.11.0"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205"
+
+block-stream@*:
+ version "0.0.9"
+ resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
+ dependencies:
+ inherits "~2.0.0"
+
+bluebird@^3.4.7:
+ version "3.5.1"
+ resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9"
+
+bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
+ version "4.11.8"
+ resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f"
+
+body-parser@1.18.2:
+ version "1.18.2"
+ resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454"
+ dependencies:
+ bytes "3.0.0"
+ content-type "~1.0.4"
+ debug "2.6.9"
+ depd "~1.1.1"
+ http-errors "~1.6.2"
+ iconv-lite "0.4.19"
+ on-finished "~2.3.0"
+ qs "6.5.1"
+ raw-body "2.3.2"
+ type-is "~1.6.15"
+
+bonjour@^3.5.0:
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5"
+ dependencies:
+ array-flatten "^2.1.0"
+ deep-equal "^1.0.1"
+ dns-equal "^1.0.0"
+ dns-txt "^2.0.2"
+ multicast-dns "^6.0.1"
+ multicast-dns-service-types "^1.1.0"
+
+boolbase@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
+
+boom@2.x.x:
+ version "2.10.1"
+ resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
+ dependencies:
+ hoek "2.x.x"
+
+boxen@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/boxen/-/boxen-0.6.0.tgz#8364d4248ac34ff0ef1b2f2bf49a6c60ce0d81b6"
+ dependencies:
+ ansi-align "^1.1.0"
+ camelcase "^2.1.0"
+ chalk "^1.1.1"
+ cli-boxes "^1.0.0"
+ filled-array "^1.0.0"
+ object-assign "^4.0.1"
+ repeating "^2.0.0"
+ string-width "^1.0.1"
+ widest-line "^1.0.0"
+
+brace-expansion@^1.0.0, brace-expansion@^1.1.7:
+ version "1.1.8"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292"
+ dependencies:
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
+
+braces@^1.8.2:
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
+ dependencies:
+ expand-range "^1.8.1"
+ preserve "^0.2.0"
+ repeat-element "^1.1.2"
+
+brorand@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
+
+browser-resolve@^1.11.2:
+ version "1.11.2"
+ resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce"
+ dependencies:
+ resolve "1.1.7"
+
+browserify-aes@^1.0.0, browserify-aes@^1.0.4:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.1.1.tgz#38b7ab55edb806ff2dcda1a7f1620773a477c49f"
+ dependencies:
+ buffer-xor "^1.0.3"
+ cipher-base "^1.0.0"
+ create-hash "^1.1.0"
+ evp_bytestokey "^1.0.3"
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+browserify-cipher@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a"
+ dependencies:
+ browserify-aes "^1.0.4"
+ browserify-des "^1.0.0"
+ evp_bytestokey "^1.0.0"
+
+browserify-des@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd"
+ dependencies:
+ cipher-base "^1.0.1"
+ des.js "^1.0.0"
+ inherits "^2.0.1"
+
+browserify-rsa@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524"
+ dependencies:
+ bn.js "^4.1.0"
+ randombytes "^2.0.1"
+
+browserify-sign@^4.0.0:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298"
+ dependencies:
+ bn.js "^4.1.1"
+ browserify-rsa "^4.0.0"
+ create-hash "^1.1.0"
+ create-hmac "^1.1.2"
+ elliptic "^6.0.0"
+ inherits "^2.0.1"
+ parse-asn1 "^5.0.0"
+
+browserify-zlib@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f"
+ dependencies:
+ pako "~1.0.5"
+
+browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6:
+ version "1.7.7"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9"
+ dependencies:
+ caniuse-db "^1.0.30000639"
+ electron-to-chromium "^1.2.7"
+
+browserslist@^2.1.2, browserslist@^2.5.1:
+ version "2.10.0"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.10.0.tgz#bac5ee1cc69ca9d96403ffb8a3abdc5b6aed6346"
+ dependencies:
+ caniuse-lite "^1.0.30000780"
+ electron-to-chromium "^1.3.28"
+
+bser@1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/bser/-/bser-1.0.2.tgz#381116970b2a6deea5646dd15dd7278444b56169"
+ dependencies:
+ node-int64 "^0.4.0"
+
+bser@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719"
+ dependencies:
+ node-int64 "^0.4.0"
+
+buffer-indexof@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c"
+
+buffer-xor@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
+
+buffer@^4.3.0:
+ version "4.9.1"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298"
+ dependencies:
+ base64-js "^1.0.2"
+ ieee754 "^1.1.4"
+ isarray "^1.0.0"
+
+builtin-modules@^1.0.0, builtin-modules@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
+
+builtin-status-codes@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
+
+bytes@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
+
+caller-path@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f"
+ dependencies:
+ callsites "^0.2.0"
+
+callsites@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca"
+
+callsites@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
+
+camel-case@3.0.x:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73"
+ dependencies:
+ no-case "^2.2.0"
+ upper-case "^1.1.1"
+
+camelcase-keys@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
+ dependencies:
+ camelcase "^2.0.0"
+ map-obj "^1.0.0"
+
+camelcase@^1.0.2:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
+
+camelcase@^2.0.0, camelcase@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
+
+camelcase@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a"
+
+camelcase@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
+
+caniuse-api@^1.5.2:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c"
+ dependencies:
+ browserslist "^1.3.6"
+ caniuse-db "^1.0.30000529"
+ lodash.memoize "^4.1.2"
+ lodash.uniq "^4.5.0"
+
+caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639:
+ version "1.0.30000784"
+ resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000784.tgz#1be95012d9489c7719074f81aee57dbdffe6361b"
+
+caniuse-lite@^1.0.30000748, caniuse-lite@^1.0.30000780:
+ version "1.0.30000784"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000784.tgz#129ced74e9a1280a441880b6cd2bce30ef59e6c0"
+
+capture-stack-trace@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d"
+
+case-sensitive-paths-webpack-plugin@2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.1.1.tgz#3d29ced8c1f124bf6f53846fb3f5894731fdc909"
+
+caseless@~0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
+
+center-align@^0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
+ dependencies:
+ align-text "^0.1.3"
+ lazy-cache "^1.0.3"
+
+chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
+ dependencies:
+ ansi-styles "^2.2.1"
+ escape-string-regexp "^1.0.2"
+ has-ansi "^2.0.0"
+ strip-ansi "^3.0.0"
+ supports-color "^2.0.0"
+
+chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba"
+ dependencies:
+ ansi-styles "^3.1.0"
+ escape-string-regexp "^1.0.5"
+ supports-color "^4.0.0"
+
+chardet@^0.4.0:
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2"
+
+chokidar@^1.6.0, chokidar@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468"
+ dependencies:
+ anymatch "^1.3.0"
+ async-each "^1.0.0"
+ glob-parent "^2.0.0"
+ inherits "^2.0.1"
+ is-binary-path "^1.0.0"
+ is-glob "^2.0.0"
+ path-is-absolute "^1.0.0"
+ readdirp "^2.0.0"
+ optionalDependencies:
+ fsevents "^1.0.0"
+
+ci-info@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.2.tgz#03561259db48d0474c8bdc90f5b47b068b6bbfb4"
+
+cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+circular-json@^0.3.1:
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66"
+
+clap@^1.0.9:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51"
+ dependencies:
+ chalk "^1.1.3"
+
+clean-css@4.1.x:
+ version "4.1.9"
+ resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.9.tgz#35cee8ae7687a49b98034f70de00c4edd3826301"
+ dependencies:
+ source-map "0.5.x"
+
+cli-boxes@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143"
+
+cli-cursor@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
+ dependencies:
+ restore-cursor "^2.0.0"
+
+cli-width@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
+
+cliui@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
+ dependencies:
+ center-align "^0.1.1"
+ right-align "^0.1.1"
+ wordwrap "0.0.2"
+
+cliui@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
+ dependencies:
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+ wrap-ansi "^2.0.0"
+
+clone@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.3.tgz#298d7e2231660f40c003c2ed3140decf3f53085f"
+
+co@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
+
+coa@~1.0.1:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd"
+ dependencies:
+ q "^1.1.2"
+
+code-point-at@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+
+color-convert@^1.3.0, color-convert@^1.9.0:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed"
+ dependencies:
+ color-name "^1.1.1"
+
+color-name@^1.0.0, color-name@^1.1.1:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+
+color-string@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991"
+ dependencies:
+ color-name "^1.0.0"
+
+color@^0.11.0:
+ version "0.11.4"
+ resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764"
+ dependencies:
+ clone "^1.0.2"
+ color-convert "^1.3.0"
+ color-string "^0.3.0"
+
+colormin@^1.0.5:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133"
+ dependencies:
+ color "^0.11.0"
+ css-color-names "0.0.4"
+ has "^1.0.1"
+
+colors@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63"
+
+combined-stream@^1.0.5, combined-stream@~1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009"
+ dependencies:
+ delayed-stream "~1.0.0"
+
+commander@2.12.x, commander@~2.12.1:
+ version "2.12.2"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.12.2.tgz#0f5946c427ed9ec0d91a46bb9def53e54650e555"
+
+commondir@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
+
+compressible@~2.0.11:
+ version "2.0.12"
+ resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.12.tgz#c59a5c99db76767e9876500e271ef63b3493bd66"
+ dependencies:
+ mime-db ">= 1.30.0 < 2"
+
+compression@^1.5.2:
+ version "1.7.1"
+ resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.1.tgz#eff2603efc2e22cf86f35d2eb93589f9875373db"
+ dependencies:
+ accepts "~1.3.4"
+ bytes "3.0.0"
+ compressible "~2.0.11"
+ debug "2.6.9"
+ on-headers "~1.0.1"
+ safe-buffer "5.1.1"
+ vary "~1.1.2"
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+
+concat-stream@^1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7"
+ dependencies:
+ inherits "^2.0.3"
+ readable-stream "^2.2.2"
+ typedarray "^0.0.6"
+
+configstore@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/configstore/-/configstore-2.1.0.tgz#737a3a7036e9886102aa6099e47bb33ab1aba1a1"
+ dependencies:
+ dot-prop "^3.0.0"
+ graceful-fs "^4.1.2"
+ mkdirp "^0.5.0"
+ object-assign "^4.0.1"
+ os-tmpdir "^1.0.0"
+ osenv "^0.1.0"
+ uuid "^2.0.1"
+ write-file-atomic "^1.1.2"
+ xdg-basedir "^2.0.0"
+
+connect-history-api-fallback@^1.3.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#b06873934bc5e344fef611a196a6faae0aee015a"
+
+console-browserify@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10"
+ dependencies:
+ date-now "^0.1.4"
+
+console-control-strings@^1.0.0, console-control-strings@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+
+constants-browserify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
+
+contains-path@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a"
+
+content-disposition@0.5.2:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4"
+
+content-type-parser@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.2.tgz#caabe80623e63638b2502fd4c7f12ff4ce2352e7"
+
+content-type@~1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
+
+convert-source-map@^1.4.0, convert-source-map@^1.5.0:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5"
+
+cookie-signature@1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
+
+cookie@0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
+
+core-js@^1.0.0:
+ version "1.2.7"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636"
+
+core-js@^2.4.0, core-js@^2.5.0:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.3.tgz#8acc38345824f16d8365b7c9b4259168e8ed603e"
+
+core-util-is@1.0.2, core-util-is@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+
+cosmiconfig@^2.1.0, cosmiconfig@^2.1.1:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-2.2.2.tgz#6173cebd56fac042c1f4390edf7af6c07c7cb892"
+ dependencies:
+ is-directory "^0.3.1"
+ js-yaml "^3.4.3"
+ minimist "^1.2.0"
+ object-assign "^4.1.0"
+ os-homedir "^1.0.1"
+ parse-json "^2.2.0"
+ require-from-string "^1.1.0"
+
+create-ecdh@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d"
+ dependencies:
+ bn.js "^4.1.0"
+ elliptic "^6.0.0"
+
+create-error-class@^3.0.1:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6"
+ dependencies:
+ capture-stack-trace "^1.0.0"
+
+create-hash@^1.1.0, create-hash@^1.1.2:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.3.tgz#606042ac8b9262750f483caddab0f5819172d8fd"
+ dependencies:
+ cipher-base "^1.0.1"
+ inherits "^2.0.1"
+ ripemd160 "^2.0.0"
+ sha.js "^2.4.0"
+
+create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.6.tgz#acb9e221a4e17bdb076e90657c42b93e3726cf06"
+ dependencies:
+ cipher-base "^1.0.3"
+ create-hash "^1.1.0"
+ inherits "^2.0.1"
+ ripemd160 "^2.0.0"
+ safe-buffer "^5.0.1"
+ sha.js "^2.4.8"
+
+cross-spawn@5.1.0, cross-spawn@^5.0.1, cross-spawn@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
+ dependencies:
+ lru-cache "^4.0.1"
+ shebang-command "^1.2.0"
+ which "^1.2.9"
+
+cryptiles@2.x.x:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
+ dependencies:
+ boom "2.x.x"
+
+crypto-browserify@^3.11.0:
+ version "3.12.0"
+ resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
+ dependencies:
+ browserify-cipher "^1.0.0"
+ browserify-sign "^4.0.0"
+ create-ecdh "^4.0.0"
+ create-hash "^1.1.0"
+ create-hmac "^1.1.0"
+ diffie-hellman "^5.0.0"
+ inherits "^2.0.1"
+ pbkdf2 "^3.0.3"
+ public-encrypt "^4.0.0"
+ randombytes "^2.0.0"
+ randomfill "^1.0.3"
+
+css-color-names@0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0"
+
+css-loader@0.28.7:
+ version "0.28.7"
+ resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.7.tgz#5f2ee989dd32edd907717f953317656160999c1b"
+ dependencies:
+ babel-code-frame "^6.11.0"
+ css-selector-tokenizer "^0.7.0"
+ cssnano ">=2.6.1 <4"
+ icss-utils "^2.1.0"
+ loader-utils "^1.0.2"
+ lodash.camelcase "^4.3.0"
+ object-assign "^4.0.1"
+ postcss "^5.0.6"
+ postcss-modules-extract-imports "^1.0.0"
+ postcss-modules-local-by-default "^1.0.1"
+ postcss-modules-scope "^1.0.0"
+ postcss-modules-values "^1.1.0"
+ postcss-value-parser "^3.3.0"
+ source-list-map "^2.0.0"
+
+css-select@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858"
+ dependencies:
+ boolbase "~1.0.0"
+ css-what "2.1"
+ domutils "1.5.1"
+ nth-check "~1.0.1"
+
+css-selector-tokenizer@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz#e6988474ae8c953477bf5e7efecfceccd9cf4c86"
+ dependencies:
+ cssesc "^0.1.0"
+ fastparse "^1.1.1"
+ regexpu-core "^1.0.0"
+
+css-what@2.1:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd"
+
+cssesc@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4"
+
+"cssnano@>=2.6.1 <4":
+ version "3.10.0"
+ resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38"
+ dependencies:
+ autoprefixer "^6.3.1"
+ decamelize "^1.1.2"
+ defined "^1.0.0"
+ has "^1.0.1"
+ object-assign "^4.0.1"
+ postcss "^5.0.14"
+ postcss-calc "^5.2.0"
+ postcss-colormin "^2.1.8"
+ postcss-convert-values "^2.3.4"
+ postcss-discard-comments "^2.0.4"
+ postcss-discard-duplicates "^2.0.1"
+ postcss-discard-empty "^2.0.1"
+ postcss-discard-overridden "^0.1.1"
+ postcss-discard-unused "^2.2.1"
+ postcss-filter-plugins "^2.0.0"
+ postcss-merge-idents "^2.1.5"
+ postcss-merge-longhand "^2.0.1"
+ postcss-merge-rules "^2.0.3"
+ postcss-minify-font-values "^1.0.2"
+ postcss-minify-gradients "^1.0.1"
+ postcss-minify-params "^1.0.4"
+ postcss-minify-selectors "^2.0.4"
+ postcss-normalize-charset "^1.1.0"
+ postcss-normalize-url "^3.0.7"
+ postcss-ordered-values "^2.1.0"
+ postcss-reduce-idents "^2.2.2"
+ postcss-reduce-initial "^1.0.0"
+ postcss-reduce-transforms "^1.0.3"
+ postcss-svgo "^2.1.1"
+ postcss-unique-selectors "^2.0.2"
+ postcss-value-parser "^3.2.3"
+ postcss-zindex "^2.0.1"
+
+csso@~2.3.1:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85"
+ dependencies:
+ clap "^1.0.9"
+ source-map "^0.5.3"
+
+cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0":
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b"
+
+"cssstyle@>= 0.2.37 < 0.3.0":
+ version "0.2.37"
+ resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54"
+ dependencies:
+ cssom "0.3.x"
+
+currently-unhandled@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
+ dependencies:
+ array-find-index "^1.0.1"
+
+d@1:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f"
+ dependencies:
+ es5-ext "^0.10.9"
+
+damerau-levenshtein@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz#03191c432cb6eea168bb77f3a55ffdccb8978514"
+
+dashdash@^1.12.0:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+ dependencies:
+ assert-plus "^1.0.0"
+
+date-now@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
+
+debug@2.6.9, debug@^2.2.0, debug@^2.6.0, debug@^2.6.6, debug@^2.6.8:
+ version "2.6.9"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+ dependencies:
+ ms "2.0.0"
+
+debug@^3.0.1, debug@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
+ dependencies:
+ ms "2.0.0"
+
+decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+
+deep-equal@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
+
+deep-extend@~0.4.0:
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f"
+
+deep-is@~0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
+
+default-require-extensions@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8"
+ dependencies:
+ strip-bom "^2.0.0"
+
+define-properties@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94"
+ dependencies:
+ foreach "^2.0.5"
+ object-keys "^1.0.8"
+
+defined@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
+
+del@^2.0.2, del@^2.2.2:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8"
+ dependencies:
+ globby "^5.0.0"
+ is-path-cwd "^1.0.0"
+ is-path-in-cwd "^1.0.0"
+ object-assign "^4.0.1"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+ rimraf "^2.2.8"
+
+del@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5"
+ dependencies:
+ globby "^6.1.0"
+ is-path-cwd "^1.0.0"
+ is-path-in-cwd "^1.0.0"
+ p-map "^1.1.1"
+ pify "^3.0.0"
+ rimraf "^2.2.8"
+
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+
+delegates@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+
+depd@1.1.1, depd@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359"
+
+des.js@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc"
+ dependencies:
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+
+destroy@~1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
+
+detect-indent@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208"
+ dependencies:
+ repeating "^2.0.0"
+
+detect-libc@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
+
+detect-node@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.3.tgz#a2033c09cc8e158d37748fbde7507832bd6ce127"
+
+detect-port-alt@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.3.tgz#a4d2f061d757a034ecf37c514260a98750f2b131"
+ dependencies:
+ address "^1.0.1"
+ debug "^2.6.0"
+
+diff@^3.2.0:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/diff/-/diff-3.4.0.tgz#b1d85507daf3964828de54b37d0d73ba67dda56c"
+
+diffie-hellman@^5.0.0:
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e"
+ dependencies:
+ bn.js "^4.1.0"
+ miller-rabin "^4.0.0"
+ randombytes "^2.0.0"
+
+dns-equal@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d"
+
+dns-packet@^1.0.1:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.2.2.tgz#a8a26bec7646438963fc86e06f8f8b16d6c8bf7a"
+ dependencies:
+ ip "^1.1.0"
+ safe-buffer "^5.0.1"
+
+dns-txt@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6"
+ dependencies:
+ buffer-indexof "^1.0.0"
+
+doctrine@1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
+ dependencies:
+ esutils "^2.0.2"
+ isarray "^1.0.0"
+
+doctrine@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.2.tgz#68f96ce8efc56cc42651f1faadb4f175273b0075"
+ dependencies:
+ esutils "^2.0.2"
+
+doctrine@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
+ dependencies:
+ esutils "^2.0.2"
+
+dom-converter@~0.1:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.1.4.tgz#a45ef5727b890c9bffe6d7c876e7b19cb0e17f3b"
+ dependencies:
+ utila "~0.3"
+
+dom-serializer@0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82"
+ dependencies:
+ domelementtype "~1.1.1"
+ entities "~1.1.1"
+
+dom-urls@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/dom-urls/-/dom-urls-1.1.0.tgz#001ddf81628cd1e706125c7176f53ccec55d918e"
+ dependencies:
+ urijs "^1.16.1"
+
+domain-browser@^1.1.1:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc"
+
+domelementtype@1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2"
+
+domelementtype@~1.1.1:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b"
+
+domhandler@2.1:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.1.0.tgz#d2646f5e57f6c3bab11cf6cb05d3c0acf7412594"
+ dependencies:
+ domelementtype "1"
+
+domutils@1.1:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485"
+ dependencies:
+ domelementtype "1"
+
+domutils@1.5.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf"
+ dependencies:
+ dom-serializer "0"
+ domelementtype "1"
+
+dot-prop@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177"
+ dependencies:
+ is-obj "^1.0.0"
+
+dotenv@4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-4.0.0.tgz#864ef1379aced55ce6f95debecdce179f7a0cd1d"
+
+duplexer2@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1"
+ dependencies:
+ readable-stream "^2.0.2"
+
+duplexer@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1"
+
+ecc-jsbn@~0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
+ dependencies:
+ jsbn "~0.1.0"
+
+ee-first@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
+
+electron-releases@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/electron-releases/-/electron-releases-2.1.0.tgz#c5614bf811f176ce3c836e368a0625782341fd4e"
+
+electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.28:
+ version "1.3.30"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.30.tgz#9666f532a64586651fc56a72513692e820d06a80"
+ dependencies:
+ electron-releases "^2.1.0"
+
+elliptic@^6.0.0:
+ version "6.4.0"
+ resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df"
+ dependencies:
+ bn.js "^4.4.0"
+ brorand "^1.0.1"
+ hash.js "^1.0.0"
+ hmac-drbg "^1.0.0"
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+ minimalistic-crypto-utils "^1.0.0"
+
+emoji-regex@^6.1.0:
+ version "6.5.1"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.5.1.tgz#9baea929b155565c11ea41c6626eaa65cef992c2"
+
+emojis-list@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
+
+encodeurl@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20"
+
+encoding@^0.1.11:
+ version "0.1.12"
+ resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb"
+ dependencies:
+ iconv-lite "~0.4.13"
+
+enhanced-resolve@^3.4.0:
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e"
+ dependencies:
+ graceful-fs "^4.1.2"
+ memory-fs "^0.4.0"
+ object-assign "^4.0.1"
+ tapable "^0.2.7"
+
+entities@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0"
+
+errno@^0.1.3, errno@^0.1.4:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.6.tgz#c386ce8a6283f14fc09563b71560908c9bf53026"
+ dependencies:
+ prr "~1.0.1"
+
+error-ex@^1.2.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc"
+ dependencies:
+ is-arrayish "^0.2.1"
+
+es-abstract@^1.7.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864"
+ dependencies:
+ es-to-primitive "^1.1.1"
+ function-bind "^1.1.1"
+ has "^1.0.1"
+ is-callable "^1.1.3"
+ is-regex "^1.0.4"
+
+es-to-primitive@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d"
+ dependencies:
+ is-callable "^1.1.1"
+ is-date-object "^1.0.1"
+ is-symbol "^1.0.1"
+
+es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14:
+ version "0.10.37"
+ resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.37.tgz#0ee741d148b80069ba27d020393756af257defc3"
+ dependencies:
+ es6-iterator "~2.0.1"
+ es6-symbol "~3.1.1"
+
+es6-iterator@^2.0.1, es6-iterator@~2.0.1:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7"
+ dependencies:
+ d "1"
+ es5-ext "^0.10.35"
+ es6-symbol "^3.1.1"
+
+es6-map@^0.1.3:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0"
+ dependencies:
+ d "1"
+ es5-ext "~0.10.14"
+ es6-iterator "~2.0.1"
+ es6-set "~0.1.5"
+ es6-symbol "~3.1.1"
+ event-emitter "~0.3.5"
+
+es6-promise@^4.0.5:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.1.1.tgz#8811e90915d9a0dba36274f0b242dbda78f9c92a"
+
+es6-set@~0.1.5:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1"
+ dependencies:
+ d "1"
+ es5-ext "~0.10.14"
+ es6-iterator "~2.0.1"
+ es6-symbol "3.1.1"
+ event-emitter "~0.3.5"
+
+es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77"
+ dependencies:
+ d "1"
+ es5-ext "~0.10.14"
+
+es6-weak-map@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f"
+ dependencies:
+ d "1"
+ es5-ext "^0.10.14"
+ es6-iterator "^2.0.1"
+ es6-symbol "^3.1.1"
+
+escape-html@~1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
+
+escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+
+escodegen@^1.6.1:
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.0.tgz#9811a2f265dc1cd3894420ee3717064b632b8852"
+ dependencies:
+ esprima "^3.1.3"
+ estraverse "^4.2.0"
+ esutils "^2.0.2"
+ optionator "^0.8.1"
+ optionalDependencies:
+ source-map "~0.5.6"
+
+escope@^3.6.0:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3"
+ dependencies:
+ es6-map "^0.1.3"
+ es6-weak-map "^2.0.1"
+ esrecurse "^4.1.0"
+ estraverse "^4.1.1"
+
+eslint-config-react-app@2.0.1, eslint-config-react-app@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-2.0.1.tgz#fd0503da01ae608f0c6ae8861de084975142230e"
+
+eslint-import-resolver-node@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.1.tgz#4422574cde66a9a7b099938ee4d508a199e0e3cc"
+ dependencies:
+ debug "^2.6.8"
+ resolve "^1.2.0"
+
+eslint-loader@1.9.0:
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-1.9.0.tgz#7e1be9feddca328d3dcfaef1ad49d5beffe83a13"
+ dependencies:
+ loader-fs-cache "^1.0.0"
+ loader-utils "^1.0.2"
+ object-assign "^4.0.1"
+ object-hash "^1.1.4"
+ rimraf "^2.6.1"
+
+eslint-module-utils@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz#abaec824177613b8a95b299639e1b6facf473449"
+ dependencies:
+ debug "^2.6.8"
+ pkg-dir "^1.0.0"
+
+eslint-plugin-flowtype@2.39.1:
+ version "2.39.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.39.1.tgz#b5624622a0388bcd969f4351131232dcb9649cd5"
+ dependencies:
+ lodash "^4.15.0"
+
+eslint-plugin-import@2.8.0:
+ version "2.8.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.8.0.tgz#fa1b6ef31fcb3c501c09859c1b86f1fc5b986894"
+ dependencies:
+ builtin-modules "^1.1.1"
+ contains-path "^0.1.0"
+ debug "^2.6.8"
+ doctrine "1.5.0"
+ eslint-import-resolver-node "^0.3.1"
+ eslint-module-utils "^2.1.1"
+ has "^1.0.1"
+ lodash.cond "^4.3.0"
+ minimatch "^3.0.3"
+ read-pkg-up "^2.0.0"
+
+eslint-plugin-jsx-a11y@5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-5.1.1.tgz#5c96bb5186ca14e94db1095ff59b3e2bd94069b1"
+ dependencies:
+ aria-query "^0.7.0"
+ array-includes "^3.0.3"
+ ast-types-flow "0.0.7"
+ axobject-query "^0.1.0"
+ damerau-levenshtein "^1.0.0"
+ emoji-regex "^6.1.0"
+ jsx-ast-utils "^1.4.0"
+
+eslint-plugin-react@7.4.0:
+ version "7.4.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.4.0.tgz#300a95861b9729c087d362dd64abcc351a74364a"
+ dependencies:
+ doctrine "^2.0.0"
+ has "^1.0.1"
+ jsx-ast-utils "^2.0.0"
+ prop-types "^15.5.10"
+
+eslint-scope@^3.7.1:
+ version "3.7.1"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8"
+ dependencies:
+ esrecurse "^4.1.0"
+ estraverse "^4.1.1"
+
+eslint-visitor-keys@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d"
+
+eslint@4.10.0:
+ version "4.10.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.10.0.tgz#f25d0d7955c81968c2309aa5c9a229e045176bb7"
+ dependencies:
+ ajv "^5.2.0"
+ babel-code-frame "^6.22.0"
+ chalk "^2.1.0"
+ concat-stream "^1.6.0"
+ cross-spawn "^5.1.0"
+ debug "^3.0.1"
+ doctrine "^2.0.0"
+ eslint-scope "^3.7.1"
+ espree "^3.5.1"
+ esquery "^1.0.0"
+ estraverse "^4.2.0"
+ esutils "^2.0.2"
+ file-entry-cache "^2.0.0"
+ functional-red-black-tree "^1.0.1"
+ glob "^7.1.2"
+ globals "^9.17.0"
+ ignore "^3.3.3"
+ imurmurhash "^0.1.4"
+ inquirer "^3.0.6"
+ is-resolvable "^1.0.0"
+ js-yaml "^3.9.1"
+ json-stable-stringify "^1.0.1"
+ levn "^0.3.0"
+ lodash "^4.17.4"
+ minimatch "^3.0.2"
+ mkdirp "^0.5.1"
+ natural-compare "^1.4.0"
+ optionator "^0.8.2"
+ path-is-inside "^1.0.2"
+ pluralize "^7.0.0"
+ progress "^2.0.0"
+ require-uncached "^1.0.3"
+ semver "^5.3.0"
+ strip-ansi "^4.0.0"
+ strip-json-comments "~2.0.1"
+ table "^4.0.1"
+ text-table "~0.2.0"
+
+eslint@^4.17.0:
+ version "4.17.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.17.0.tgz#dc24bb51ede48df629be7031c71d9dc0ee4f3ddf"
+ dependencies:
+ ajv "^5.3.0"
+ babel-code-frame "^6.22.0"
+ chalk "^2.1.0"
+ concat-stream "^1.6.0"
+ cross-spawn "^5.1.0"
+ debug "^3.1.0"
+ doctrine "^2.1.0"
+ eslint-scope "^3.7.1"
+ eslint-visitor-keys "^1.0.0"
+ espree "^3.5.2"
+ esquery "^1.0.0"
+ esutils "^2.0.2"
+ file-entry-cache "^2.0.0"
+ functional-red-black-tree "^1.0.1"
+ glob "^7.1.2"
+ globals "^11.0.1"
+ ignore "^3.3.3"
+ imurmurhash "^0.1.4"
+ inquirer "^3.0.6"
+ is-resolvable "^1.0.0"
+ js-yaml "^3.9.1"
+ json-stable-stringify-without-jsonify "^1.0.1"
+ levn "^0.3.0"
+ lodash "^4.17.4"
+ minimatch "^3.0.2"
+ mkdirp "^0.5.1"
+ natural-compare "^1.4.0"
+ optionator "^0.8.2"
+ path-is-inside "^1.0.2"
+ pluralize "^7.0.0"
+ progress "^2.0.0"
+ require-uncached "^1.0.3"
+ semver "^5.3.0"
+ strip-ansi "^4.0.0"
+ strip-json-comments "~2.0.1"
+ table "^4.0.1"
+ text-table "~0.2.0"
+
+espree@^3.5.1, espree@^3.5.2:
+ version "3.5.2"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.2.tgz#756ada8b979e9dcfcdb30aad8d1a9304a905e1ca"
+ dependencies:
+ acorn "^5.2.1"
+ acorn-jsx "^3.0.0"
+
+esprima@^2.6.0:
+ version "2.7.3"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
+
+esprima@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
+
+esprima@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804"
+
+esquery@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa"
+ dependencies:
+ estraverse "^4.0.0"
+
+esrecurse@^4.1.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163"
+ dependencies:
+ estraverse "^4.1.0"
+ object-assign "^4.0.1"
+
+estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
+
+esutils@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
+
+etag@~1.8.1:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
+
+event-emitter@~0.3.5:
+ version "0.3.5"
+ resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39"
+ dependencies:
+ d "1"
+ es5-ext "~0.10.14"
+
+eventemitter3@1.x.x:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508"
+
+events@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924"
+
+eventsource@0.1.6:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-0.1.6.tgz#0acede849ed7dd1ccc32c811bb11b944d4f29232"
+ dependencies:
+ original ">=0.0.5"
+
+evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"
+ dependencies:
+ md5.js "^1.3.4"
+ safe-buffer "^5.1.1"
+
+exec-sh@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.1.tgz#163b98a6e89e6b65b47c2a28d215bc1f63989c38"
+ dependencies:
+ merge "^1.1.3"
+
+execa@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777"
+ dependencies:
+ cross-spawn "^5.0.1"
+ get-stream "^3.0.0"
+ is-stream "^1.1.0"
+ npm-run-path "^2.0.0"
+ p-finally "^1.0.0"
+ signal-exit "^3.0.0"
+ strip-eof "^1.0.0"
+
+expand-brackets@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
+ dependencies:
+ is-posix-bracket "^0.1.0"
+
+expand-range@^1.8.1:
+ version "1.8.2"
+ resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
+ dependencies:
+ fill-range "^2.1.0"
+
+expand-tilde@^2.0.0, expand-tilde@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502"
+ dependencies:
+ homedir-polyfill "^1.0.1"
+
+express@^4.13.3:
+ version "4.16.2"
+ resolved "https://registry.yarnpkg.com/express/-/express-4.16.2.tgz#e35c6dfe2d64b7dca0a5cd4f21781be3299e076c"
+ dependencies:
+ accepts "~1.3.4"
+ array-flatten "1.1.1"
+ body-parser "1.18.2"
+ content-disposition "0.5.2"
+ content-type "~1.0.4"
+ cookie "0.3.1"
+ cookie-signature "1.0.6"
+ debug "2.6.9"
+ depd "~1.1.1"
+ encodeurl "~1.0.1"
+ escape-html "~1.0.3"
+ etag "~1.8.1"
+ finalhandler "1.1.0"
+ fresh "0.5.2"
+ merge-descriptors "1.0.1"
+ methods "~1.1.2"
+ on-finished "~2.3.0"
+ parseurl "~1.3.2"
+ path-to-regexp "0.1.7"
+ proxy-addr "~2.0.2"
+ qs "6.5.1"
+ range-parser "~1.2.0"
+ safe-buffer "5.1.1"
+ send "0.16.1"
+ serve-static "1.13.1"
+ setprototypeof "1.1.0"
+ statuses "~1.3.1"
+ type-is "~1.6.15"
+ utils-merge "1.0.1"
+ vary "~1.1.2"
+
+extend@~3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444"
+
+external-editor@^2.0.4:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.1.0.tgz#3d026a21b7f95b5726387d4200ac160d372c3b48"
+ dependencies:
+ chardet "^0.4.0"
+ iconv-lite "^0.4.17"
+ tmp "^0.0.33"
+
+extglob@^0.3.1:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
+ dependencies:
+ is-extglob "^1.0.0"
+
+extract-text-webpack-plugin@3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.2.tgz#5f043eaa02f9750a9258b78c0a6e0dc1408fb2f7"
+ dependencies:
+ async "^2.4.1"
+ loader-utils "^1.1.0"
+ schema-utils "^0.3.0"
+ webpack-sources "^1.0.1"
+
+extsprintf@1.3.0, extsprintf@^1.2.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
+
+fast-deep-equal@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff"
+
+fast-json-stable-stringify@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
+
+fast-levenshtein@~2.0.4:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+
+fastparse@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8"
+
+faye-websocket@^0.10.0:
+ version "0.10.0"
+ resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4"
+ dependencies:
+ websocket-driver ">=0.5.1"
+
+faye-websocket@~0.11.0:
+ version "0.11.1"
+ resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.1.tgz#f0efe18c4f56e4f40afc7e06c719fd5ee6188f38"
+ dependencies:
+ websocket-driver ">=0.5.1"
+
+fb-watchman@^1.8.0:
+ version "1.9.2"
+ resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-1.9.2.tgz#a24cf47827f82d38fb59a69ad70b76e3b6ae7383"
+ dependencies:
+ bser "1.0.2"
+
+fb-watchman@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58"
+ dependencies:
+ bser "^2.0.0"
+
+fbjs@^0.8.16:
+ version "0.8.16"
+ resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db"
+ dependencies:
+ core-js "^1.0.0"
+ isomorphic-fetch "^2.1.1"
+ loose-envify "^1.0.0"
+ object-assign "^4.1.0"
+ promise "^7.1.1"
+ setimmediate "^1.0.5"
+ ua-parser-js "^0.7.9"
+
+figures@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
+ dependencies:
+ escape-string-regexp "^1.0.5"
+
+file-entry-cache@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361"
+ dependencies:
+ flat-cache "^1.2.1"
+ object-assign "^4.0.1"
+
+file-loader@1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.5.tgz#91c25b6b6fbe56dae99f10a425fd64933b5c9daa"
+ dependencies:
+ loader-utils "^1.0.2"
+ schema-utils "^0.3.0"
+
+filename-regex@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26"
+
+fileset@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0"
+ dependencies:
+ glob "^7.0.3"
+ minimatch "^3.0.3"
+
+filesize@3.5.11:
+ version "3.5.11"
+ resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.5.11.tgz#1919326749433bb3cf77368bd158caabcc19e9ee"
+
+fill-range@^2.1.0:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723"
+ dependencies:
+ is-number "^2.1.0"
+ isobject "^2.0.0"
+ randomatic "^1.1.3"
+ repeat-element "^1.1.2"
+ repeat-string "^1.5.2"
+
+filled-array@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/filled-array/-/filled-array-1.1.0.tgz#c3c4f6c663b923459a9aa29912d2d031f1507f84"
+
+finalhandler@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5"
+ dependencies:
+ debug "2.6.9"
+ encodeurl "~1.0.1"
+ escape-html "~1.0.3"
+ on-finished "~2.3.0"
+ parseurl "~1.3.2"
+ statuses "~1.3.1"
+ unpipe "~1.0.0"
+
+find-cache-dir@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9"
+ dependencies:
+ commondir "^1.0.1"
+ mkdirp "^0.5.1"
+ pkg-dir "^1.0.0"
+
+find-cache-dir@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f"
+ dependencies:
+ commondir "^1.0.1"
+ make-dir "^1.0.0"
+ pkg-dir "^2.0.0"
+
+find-up@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
+ dependencies:
+ path-exists "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+find-up@^2.0.0, find-up@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
+ dependencies:
+ locate-path "^2.0.0"
+
+flat-cache@^1.2.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481"
+ dependencies:
+ circular-json "^0.3.1"
+ del "^2.0.2"
+ graceful-fs "^4.1.2"
+ write "^0.2.1"
+
+flatten@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782"
+
+for-in@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
+
+for-own@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce"
+ dependencies:
+ for-in "^1.0.1"
+
+foreach@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99"
+
+forever-agent@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
+
+form-data@~2.1.1:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1"
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.5"
+ mime-types "^2.1.12"
+
+forwarded@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84"
+
+fresh@0.5.2:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
+
+fs-extra@3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-3.0.1.tgz#3794f378c58b342ea7dbbb23095109c4b3b62291"
+ dependencies:
+ graceful-fs "^4.1.2"
+ jsonfile "^3.0.0"
+ universalify "^0.1.0"
+
+fs-extra@^0.30.0:
+ version "0.30.0"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0"
+ dependencies:
+ graceful-fs "^4.1.2"
+ jsonfile "^2.1.0"
+ klaw "^1.0.0"
+ path-is-absolute "^1.0.0"
+ rimraf "^2.2.8"
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+
+fsevents@1.1.2, fsevents@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.2.tgz#3282b713fb3ad80ede0e9fcf4611b5aa6fc033f4"
+ dependencies:
+ nan "^2.3.0"
+ node-pre-gyp "^0.6.36"
+
+fstream-ignore@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105"
+ dependencies:
+ fstream "^1.0.0"
+ inherits "2"
+ minimatch "^3.0.0"
+
+fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2:
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171"
+ dependencies:
+ graceful-fs "^4.1.2"
+ inherits "~2.0.0"
+ mkdirp ">=0.5 0"
+ rimraf "2"
+
+function-bind@^1.0.2, function-bind@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
+
+functional-red-black-tree@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
+
+gauge@~2.7.3:
+ version "2.7.4"
+ resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
+ dependencies:
+ aproba "^1.0.3"
+ console-control-strings "^1.0.0"
+ has-unicode "^2.0.0"
+ object-assign "^4.1.0"
+ signal-exit "^3.0.0"
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+ wide-align "^1.1.0"
+
+get-caller-file@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5"
+
+get-stdin@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
+
+get-stream@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
+
+getpass@^0.1.1:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
+ dependencies:
+ assert-plus "^1.0.0"
+
+glob-base@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
+ dependencies:
+ glob-parent "^2.0.0"
+ is-glob "^2.0.0"
+
+glob-parent@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
+ dependencies:
+ is-glob "^2.0.0"
+
+glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2:
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.4"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+global-modules@1.0.0, global-modules@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea"
+ dependencies:
+ global-prefix "^1.0.1"
+ is-windows "^1.0.1"
+ resolve-dir "^1.0.0"
+
+global-prefix@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe"
+ dependencies:
+ expand-tilde "^2.0.2"
+ homedir-polyfill "^1.0.1"
+ ini "^1.3.4"
+ is-windows "^1.0.1"
+ which "^1.2.14"
+
+globals@^11.0.1:
+ version "11.3.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-11.3.0.tgz#e04fdb7b9796d8adac9c8f64c14837b2313378b0"
+
+globals@^9.17.0, globals@^9.18.0:
+ version "9.18.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
+
+globby@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d"
+ dependencies:
+ array-union "^1.0.1"
+ arrify "^1.0.0"
+ glob "^7.0.3"
+ object-assign "^4.0.1"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+globby@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
+ dependencies:
+ array-union "^1.0.1"
+ glob "^7.0.3"
+ object-assign "^4.0.1"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+got@^5.0.0:
+ version "5.7.1"
+ resolved "https://registry.yarnpkg.com/got/-/got-5.7.1.tgz#5f81635a61e4a6589f180569ea4e381680a51f35"
+ dependencies:
+ create-error-class "^3.0.1"
+ duplexer2 "^0.1.4"
+ is-redirect "^1.0.0"
+ is-retry-allowed "^1.0.0"
+ is-stream "^1.0.0"
+ lowercase-keys "^1.0.0"
+ node-status-codes "^1.0.0"
+ object-assign "^4.0.1"
+ parse-json "^2.1.0"
+ pinkie-promise "^2.0.0"
+ read-all-stream "^3.0.0"
+ readable-stream "^2.0.5"
+ timed-out "^3.0.0"
+ unzip-response "^1.0.2"
+ url-parse-lax "^1.0.0"
+
+graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9:
+ version "4.1.11"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
+
+growly@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
+
+gzip-size@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-3.0.0.tgz#546188e9bdc337f673772f81660464b389dce520"
+ dependencies:
+ duplexer "^0.1.1"
+
+handle-thing@^1.2.5:
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz#fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4"
+
+handlebars@^4.0.3:
+ version "4.0.11"
+ resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc"
+ dependencies:
+ async "^1.4.0"
+ optimist "^0.6.1"
+ source-map "^0.4.4"
+ optionalDependencies:
+ uglify-js "^2.6"
+
+har-schema@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e"
+
+har-validator@~4.2.1:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a"
+ dependencies:
+ ajv "^4.9.1"
+ har-schema "^1.0.5"
+
+has-ansi@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
+ dependencies:
+ ansi-regex "^2.0.0"
+
+has-flag@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
+
+has-flag@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51"
+
+has-unicode@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
+
+has@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28"
+ dependencies:
+ function-bind "^1.0.2"
+
+hash-base@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1"
+ dependencies:
+ inherits "^2.0.1"
+
+hash-base@^3.0.0:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918"
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+hash.js@^1.0.0, hash.js@^1.0.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846"
+ dependencies:
+ inherits "^2.0.3"
+ minimalistic-assert "^1.0.0"
+
+hawk@3.1.3, hawk@~3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4"
+ dependencies:
+ boom "2.x.x"
+ cryptiles "2.x.x"
+ hoek "2.x.x"
+ sntp "1.x.x"
+
+he@1.1.x:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
+
+hmac-drbg@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
+ dependencies:
+ hash.js "^1.0.3"
+ minimalistic-assert "^1.0.0"
+ minimalistic-crypto-utils "^1.0.1"
+
+hoek@2.x.x:
+ version "2.16.3"
+ resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
+
+home-or-tmp@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8"
+ dependencies:
+ os-homedir "^1.0.0"
+ os-tmpdir "^1.0.1"
+
+homedir-polyfill@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc"
+ dependencies:
+ parse-passwd "^1.0.0"
+
+hosted-git-info@^2.1.4:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c"
+
+hpack.js@^2.1.6:
+ version "2.1.6"
+ resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2"
+ dependencies:
+ inherits "^2.0.1"
+ obuf "^1.0.0"
+ readable-stream "^2.0.1"
+ wbuf "^1.1.0"
+
+html-comment-regex@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e"
+
+html-encoding-sniffer@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8"
+ dependencies:
+ whatwg-encoding "^1.0.1"
+
+html-entities@^1.2.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f"
+
+html-minifier@^3.2.3:
+ version "3.5.7"
+ resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.7.tgz#511e69bb5a8e7677d1012ebe03819aa02ca06208"
+ dependencies:
+ camel-case "3.0.x"
+ clean-css "4.1.x"
+ commander "2.12.x"
+ he "1.1.x"
+ ncname "1.0.x"
+ param-case "2.1.x"
+ relateurl "0.2.x"
+ uglify-js "3.2.x"
+
+html-webpack-plugin@2.29.0:
+ version "2.29.0"
+ resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-2.29.0.tgz#e987f421853d3b6938c8c4c8171842e5fd17af23"
+ dependencies:
+ bluebird "^3.4.7"
+ html-minifier "^3.2.3"
+ loader-utils "^0.2.16"
+ lodash "^4.17.3"
+ pretty-error "^2.0.2"
+ toposort "^1.0.0"
+
+htmlparser2@~3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.3.0.tgz#cc70d05a59f6542e43f0e685c982e14c924a9efe"
+ dependencies:
+ domelementtype "1"
+ domhandler "2.1"
+ domutils "1.1"
+ readable-stream "1.0"
+
+http-deceiver@^1.2.7:
+ version "1.2.7"
+ resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87"
+
+http-errors@1.6.2, http-errors@~1.6.2:
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736"
+ dependencies:
+ depd "1.1.1"
+ inherits "2.0.3"
+ setprototypeof "1.0.3"
+ statuses ">= 1.3.1 < 2"
+
+http-parser-js@>=0.4.0:
+ version "0.4.9"
+ resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.9.tgz#ea1a04fb64adff0242e9974f297dd4c3cad271e1"
+
+http-proxy-middleware@~0.17.4:
+ version "0.17.4"
+ resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz#642e8848851d66f09d4f124912846dbaeb41b833"
+ dependencies:
+ http-proxy "^1.16.2"
+ is-glob "^3.1.0"
+ lodash "^4.17.2"
+ micromatch "^2.3.11"
+
+http-proxy@^1.16.2:
+ version "1.16.2"
+ resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.16.2.tgz#06dff292952bf64dbe8471fa9df73066d4f37742"
+ dependencies:
+ eventemitter3 "1.x.x"
+ requires-port "1.x.x"
+
+http-signature@~1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf"
+ dependencies:
+ assert-plus "^0.2.0"
+ jsprim "^1.2.2"
+ sshpk "^1.7.0"
+
+https-browserify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
+
+iconv-lite@0.4.19, iconv-lite@^0.4.17, iconv-lite@~0.4.13:
+ version "0.4.19"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b"
+
+icss-replace-symbols@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded"
+
+icss-utils@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-2.1.0.tgz#83f0a0ec378bf3246178b6c2ad9136f135b1c962"
+ dependencies:
+ postcss "^6.0.1"
+
+ieee754@^1.1.4:
+ version "1.1.8"
+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4"
+
+ignore@^3.3.3:
+ version "3.3.7"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021"
+
+immutable@^3.8.2:
+ version "3.8.2"
+ resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3"
+
+import-local@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/import-local/-/import-local-0.1.1.tgz#b1179572aacdc11c6a91009fb430dbcab5f668a8"
+ dependencies:
+ pkg-dir "^2.0.0"
+ resolve-cwd "^2.0.0"
+
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+
+indent-string@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
+ dependencies:
+ repeating "^2.0.0"
+
+indexes-of@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"
+
+indexof@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+
+inherits@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
+
+ini@^1.3.4, ini@~1.3.0:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
+
+inquirer@3.3.0, inquirer@^3.0.6:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9"
+ dependencies:
+ ansi-escapes "^3.0.0"
+ chalk "^2.0.0"
+ cli-cursor "^2.1.0"
+ cli-width "^2.0.0"
+ external-editor "^2.0.4"
+ figures "^2.0.0"
+ lodash "^4.3.0"
+ mute-stream "0.0.7"
+ run-async "^2.2.0"
+ rx-lite "^4.0.8"
+ rx-lite-aggregates "^4.0.8"
+ string-width "^2.1.0"
+ strip-ansi "^4.0.0"
+ through "^2.3.6"
+
+internal-ip@1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-1.2.0.tgz#ae9fbf93b984878785d50a8de1b356956058cf5c"
+ dependencies:
+ meow "^3.3.0"
+
+interpret@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614"
+
+invariant@^2.2.2:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360"
+ dependencies:
+ loose-envify "^1.0.0"
+
+invert-kv@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
+
+ip@^1.1.0, ip@^1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a"
+
+ipaddr.js@1.5.2:
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.5.2.tgz#d4b505bde9946987ccf0fc58d9010ff9607e3fa0"
+
+is-absolute-url@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6"
+
+is-arrayish@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+
+is-binary-path@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
+ dependencies:
+ binary-extensions "^1.0.0"
+
+is-buffer@^1.1.5:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
+
+is-builtin-module@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe"
+ dependencies:
+ builtin-modules "^1.0.0"
+
+is-callable@^1.1.1, is-callable@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2"
+
+is-ci@^1.0.10:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e"
+ dependencies:
+ ci-info "^1.0.0"
+
+is-date-object@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
+
+is-directory@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1"
+
+is-dotfile@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1"
+
+is-equal-shallow@^0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
+ dependencies:
+ is-primitive "^2.0.0"
+
+is-extendable@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+
+is-extglob@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
+
+is-extglob@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+
+is-finite@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
+
+is-glob@^2.0.0, is-glob@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
+ dependencies:
+ is-extglob "^1.0.0"
+
+is-glob@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
+ dependencies:
+ is-extglob "^2.1.0"
+
+is-npm@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4"
+
+is-number@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
+ dependencies:
+ kind-of "^3.0.2"
+
+is-number@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
+ dependencies:
+ kind-of "^3.0.2"
+
+is-obj@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
+
+is-path-cwd@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d"
+
+is-path-in-cwd@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc"
+ dependencies:
+ is-path-inside "^1.0.0"
+
+is-path-inside@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036"
+ dependencies:
+ path-is-inside "^1.0.1"
+
+is-plain-obj@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
+
+is-posix-bracket@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
+
+is-primitive@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
+
+is-promise@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
+
+is-redirect@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24"
+
+is-regex@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491"
+ dependencies:
+ has "^1.0.1"
+
+is-resolvable@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.1.tgz#acca1cd36dbe44b974b924321555a70ba03b1cf4"
+
+is-retry-allowed@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34"
+
+is-root@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-root/-/is-root-1.0.0.tgz#07b6c233bc394cd9d02ba15c966bd6660d6342d5"
+
+is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+
+is-svg@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9"
+ dependencies:
+ html-comment-regex "^1.1.0"
+
+is-symbol@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572"
+
+is-typedarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+
+is-utf8@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
+
+is-windows@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.1.tgz#310db70f742d259a16a369202b51af84233310d9"
+
+is-wsl@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d"
+
+isarray@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
+
+isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+
+isexe@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+
+isobject@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+ dependencies:
+ isarray "1.0.0"
+
+isomorphic-fetch@^2.1.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9"
+ dependencies:
+ node-fetch "^1.0.1"
+ whatwg-fetch ">=0.10.0"
+
+isstream@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+
+istanbul-api@^1.1.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.2.1.tgz#0c60a0515eb11c7d65c6b50bba2c6e999acd8620"
+ dependencies:
+ async "^2.1.4"
+ fileset "^2.0.2"
+ istanbul-lib-coverage "^1.1.1"
+ istanbul-lib-hook "^1.1.0"
+ istanbul-lib-instrument "^1.9.1"
+ istanbul-lib-report "^1.1.2"
+ istanbul-lib-source-maps "^1.2.2"
+ istanbul-reports "^1.1.3"
+ js-yaml "^3.7.0"
+ mkdirp "^0.5.1"
+ once "^1.4.0"
+
+istanbul-lib-coverage@^1.0.1, istanbul-lib-coverage@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz#73bfb998885299415c93d38a3e9adf784a77a9da"
+
+istanbul-lib-hook@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.1.0.tgz#8538d970372cb3716d53e55523dd54b557a8d89b"
+ dependencies:
+ append-transform "^0.4.0"
+
+istanbul-lib-instrument@^1.4.2, istanbul-lib-instrument@^1.7.5, istanbul-lib-instrument@^1.9.1:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.1.tgz#250b30b3531e5d3251299fdd64b0b2c9db6b558e"
+ dependencies:
+ babel-generator "^6.18.0"
+ babel-template "^6.16.0"
+ babel-traverse "^6.18.0"
+ babel-types "^6.18.0"
+ babylon "^6.18.0"
+ istanbul-lib-coverage "^1.1.1"
+ semver "^5.3.0"
+
+istanbul-lib-report@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.2.tgz#922be27c13b9511b979bd1587359f69798c1d425"
+ dependencies:
+ istanbul-lib-coverage "^1.1.1"
+ mkdirp "^0.5.1"
+ path-parse "^1.0.5"
+ supports-color "^3.1.2"
+
+istanbul-lib-source-maps@^1.1.0, istanbul-lib-source-maps@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.2.tgz#750578602435f28a0c04ee6d7d9e0f2960e62c1c"
+ dependencies:
+ debug "^3.1.0"
+ istanbul-lib-coverage "^1.1.1"
+ mkdirp "^0.5.1"
+ rimraf "^2.6.1"
+ source-map "^0.5.3"
+
+istanbul-reports@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.3.tgz#3b9e1e8defb6d18b1d425da8e8b32c5a163f2d10"
+ dependencies:
+ handlebars "^4.0.3"
+
+jest-changed-files@^20.0.3:
+ version "20.0.3"
+ resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-20.0.3.tgz#9394d5cc65c438406149bef1bf4d52b68e03e3f8"
+
+jest-cli@^20.0.4:
+ version "20.0.4"
+ resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-20.0.4.tgz#e532b19d88ae5bc6c417e8b0593a6fe954b1dc93"
+ dependencies:
+ ansi-escapes "^1.4.0"
+ callsites "^2.0.0"
+ chalk "^1.1.3"
+ graceful-fs "^4.1.11"
+ is-ci "^1.0.10"
+ istanbul-api "^1.1.1"
+ istanbul-lib-coverage "^1.0.1"
+ istanbul-lib-instrument "^1.4.2"
+ istanbul-lib-source-maps "^1.1.0"
+ jest-changed-files "^20.0.3"
+ jest-config "^20.0.4"
+ jest-docblock "^20.0.3"
+ jest-environment-jsdom "^20.0.3"
+ jest-haste-map "^20.0.4"
+ jest-jasmine2 "^20.0.4"
+ jest-message-util "^20.0.3"
+ jest-regex-util "^20.0.3"
+ jest-resolve-dependencies "^20.0.3"
+ jest-runtime "^20.0.4"
+ jest-snapshot "^20.0.3"
+ jest-util "^20.0.3"
+ micromatch "^2.3.11"
+ node-notifier "^5.0.2"
+ pify "^2.3.0"
+ slash "^1.0.0"
+ string-length "^1.0.1"
+ throat "^3.0.0"
+ which "^1.2.12"
+ worker-farm "^1.3.1"
+ yargs "^7.0.2"
+
+jest-config@^20.0.4:
+ version "20.0.4"
+ resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-20.0.4.tgz#e37930ab2217c913605eff13e7bd763ec48faeea"
+ dependencies:
+ chalk "^1.1.3"
+ glob "^7.1.1"
+ jest-environment-jsdom "^20.0.3"
+ jest-environment-node "^20.0.3"
+ jest-jasmine2 "^20.0.4"
+ jest-matcher-utils "^20.0.3"
+ jest-regex-util "^20.0.3"
+ jest-resolve "^20.0.4"
+ jest-validate "^20.0.3"
+ pretty-format "^20.0.3"
+
+jest-diff@^20.0.3:
+ version "20.0.3"
+ resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-20.0.3.tgz#81f288fd9e675f0fb23c75f1c2b19445fe586617"
+ dependencies:
+ chalk "^1.1.3"
+ diff "^3.2.0"
+ jest-matcher-utils "^20.0.3"
+ pretty-format "^20.0.3"
+
+jest-docblock@^20.0.3:
+ version "20.0.3"
+ resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-20.0.3.tgz#17bea984342cc33d83c50fbe1545ea0efaa44712"
+
+jest-environment-jsdom@^20.0.3:
+ version "20.0.3"
+ resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-20.0.3.tgz#048a8ac12ee225f7190417713834bb999787de99"
+ dependencies:
+ jest-mock "^20.0.3"
+ jest-util "^20.0.3"
+ jsdom "^9.12.0"
+
+jest-environment-node@^20.0.3:
+ version "20.0.3"
+ resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-20.0.3.tgz#d488bc4612af2c246e986e8ae7671a099163d403"
+ dependencies:
+ jest-mock "^20.0.3"
+ jest-util "^20.0.3"
+
+jest-haste-map@^20.0.4:
+ version "20.0.5"
+ resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-20.0.5.tgz#abad74efb1a005974a7b6517e11010709cab9112"
+ dependencies:
+ fb-watchman "^2.0.0"
+ graceful-fs "^4.1.11"
+ jest-docblock "^20.0.3"
+ micromatch "^2.3.11"
+ sane "~1.6.0"
+ worker-farm "^1.3.1"
+
+jest-jasmine2@^20.0.4:
+ version "20.0.4"
+ resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-20.0.4.tgz#fcc5b1411780d911d042902ef1859e852e60d5e1"
+ dependencies:
+ chalk "^1.1.3"
+ graceful-fs "^4.1.11"
+ jest-diff "^20.0.3"
+ jest-matcher-utils "^20.0.3"
+ jest-matchers "^20.0.3"
+ jest-message-util "^20.0.3"
+ jest-snapshot "^20.0.3"
+ once "^1.4.0"
+ p-map "^1.1.1"
+
+jest-matcher-utils@^20.0.3:
+ version "20.0.3"
+ resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-20.0.3.tgz#b3a6b8e37ca577803b0832a98b164f44b7815612"
+ dependencies:
+ chalk "^1.1.3"
+ pretty-format "^20.0.3"
+
+jest-matchers@^20.0.3:
+ version "20.0.3"
+ resolved "https://registry.yarnpkg.com/jest-matchers/-/jest-matchers-20.0.3.tgz#ca69db1c32db5a6f707fa5e0401abb55700dfd60"
+ dependencies:
+ jest-diff "^20.0.3"
+ jest-matcher-utils "^20.0.3"
+ jest-message-util "^20.0.3"
+ jest-regex-util "^20.0.3"
+
+jest-message-util@^20.0.3:
+ version "20.0.3"
+ resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-20.0.3.tgz#6aec2844306fcb0e6e74d5796c1006d96fdd831c"
+ dependencies:
+ chalk "^1.1.3"
+ micromatch "^2.3.11"
+ slash "^1.0.0"
+
+jest-mock@^20.0.3:
+ version "20.0.3"
+ resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-20.0.3.tgz#8bc070e90414aa155c11a8d64c869a0d5c71da59"
+
+jest-regex-util@^20.0.3:
+ version "20.0.3"
+ resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-20.0.3.tgz#85bbab5d133e44625b19faf8c6aa5122d085d762"
+
+jest-resolve-dependencies@^20.0.3:
+ version "20.0.3"
+ resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-20.0.3.tgz#6e14a7b717af0f2cb3667c549de40af017b1723a"
+ dependencies:
+ jest-regex-util "^20.0.3"
+
+jest-resolve@^20.0.4:
+ version "20.0.4"
+ resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-20.0.4.tgz#9448b3e8b6bafc15479444c6499045b7ffe597a5"
+ dependencies:
+ browser-resolve "^1.11.2"
+ is-builtin-module "^1.0.0"
+ resolve "^1.3.2"
+
+jest-runtime@^20.0.4:
+ version "20.0.4"
+ resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-20.0.4.tgz#a2c802219c4203f754df1404e490186169d124d8"
+ dependencies:
+ babel-core "^6.0.0"
+ babel-jest "^20.0.3"
+ babel-plugin-istanbul "^4.0.0"
+ chalk "^1.1.3"
+ convert-source-map "^1.4.0"
+ graceful-fs "^4.1.11"
+ jest-config "^20.0.4"
+ jest-haste-map "^20.0.4"
+ jest-regex-util "^20.0.3"
+ jest-resolve "^20.0.4"
+ jest-util "^20.0.3"
+ json-stable-stringify "^1.0.1"
+ micromatch "^2.3.11"
+ strip-bom "3.0.0"
+ yargs "^7.0.2"
+
+jest-snapshot@^20.0.3:
+ version "20.0.3"
+ resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-20.0.3.tgz#5b847e1adb1a4d90852a7f9f125086e187c76566"
+ dependencies:
+ chalk "^1.1.3"
+ jest-diff "^20.0.3"
+ jest-matcher-utils "^20.0.3"
+ jest-util "^20.0.3"
+ natural-compare "^1.4.0"
+ pretty-format "^20.0.3"
+
+jest-util@^20.0.3:
+ version "20.0.3"
+ resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-20.0.3.tgz#0c07f7d80d82f4e5a67c6f8b9c3fe7f65cfd32ad"
+ dependencies:
+ chalk "^1.1.3"
+ graceful-fs "^4.1.11"
+ jest-message-util "^20.0.3"
+ jest-mock "^20.0.3"
+ jest-validate "^20.0.3"
+ leven "^2.1.0"
+ mkdirp "^0.5.1"
+
+jest-validate@^20.0.3:
+ version "20.0.3"
+ resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-20.0.3.tgz#d0cfd1de4f579f298484925c280f8f1d94ec3cab"
+ dependencies:
+ chalk "^1.1.3"
+ jest-matcher-utils "^20.0.3"
+ leven "^2.1.0"
+ pretty-format "^20.0.3"
+
+jest@20.0.4:
+ version "20.0.4"
+ resolved "https://registry.yarnpkg.com/jest/-/jest-20.0.4.tgz#3dd260c2989d6dad678b1e9cc4d91944f6d602ac"
+ dependencies:
+ jest-cli "^20.0.4"
+
+js-base64@^2.1.9:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.0.tgz#9e566fee624751a1d720c966cd6226d29d4025aa"
+
+js-tokens@^3.0.0, js-tokens@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
+
+js-yaml@^3.4.3, js-yaml@^3.7.0, js-yaml@^3.9.1:
+ version "3.10.0"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc"
+ dependencies:
+ argparse "^1.0.7"
+ esprima "^4.0.0"
+
+js-yaml@~3.7.0:
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80"
+ dependencies:
+ argparse "^1.0.7"
+ esprima "^2.6.0"
+
+jsbn@~0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
+
+jsdom@^9.12.0:
+ version "9.12.0"
+ resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.12.0.tgz#e8c546fffcb06c00d4833ca84410fed7f8a097d4"
+ dependencies:
+ abab "^1.0.3"
+ acorn "^4.0.4"
+ acorn-globals "^3.1.0"
+ array-equal "^1.0.0"
+ content-type-parser "^1.0.1"
+ cssom ">= 0.3.2 < 0.4.0"
+ cssstyle ">= 0.2.37 < 0.3.0"
+ escodegen "^1.6.1"
+ html-encoding-sniffer "^1.0.1"
+ nwmatcher ">= 1.3.9 < 2.0.0"
+ parse5 "^1.5.1"
+ request "^2.79.0"
+ sax "^1.2.1"
+ symbol-tree "^3.2.1"
+ tough-cookie "^2.3.2"
+ webidl-conversions "^4.0.0"
+ whatwg-encoding "^1.0.1"
+ whatwg-url "^4.3.0"
+ xml-name-validator "^2.0.1"
+
+jsesc@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
+
+jsesc@~0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
+
+json-loader@^0.5.4:
+ version "0.5.7"
+ resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d"
+
+json-schema-traverse@^0.3.0:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340"
+
+json-schema@0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
+
+json-stable-stringify-without-jsonify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
+
+json-stable-stringify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
+ dependencies:
+ jsonify "~0.0.0"
+
+json-stringify-safe@~5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+
+json3@^3.3.2:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1"
+
+json5@^0.5.0, json5@^0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
+
+jsonfile@^2.1.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8"
+ optionalDependencies:
+ graceful-fs "^4.1.6"
+
+jsonfile@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.1.tgz#a5ecc6f65f53f662c4415c7675a0331d0992ec66"
+ optionalDependencies:
+ graceful-fs "^4.1.6"
+
+jsonify@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
+
+jsprim@^1.2.2:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
+ dependencies:
+ assert-plus "1.0.0"
+ extsprintf "1.3.0"
+ json-schema "0.2.3"
+ verror "1.10.0"
+
+jsx-ast-utils@^1.4.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz#3867213e8dd79bf1e8f2300c0cfc1efb182c0df1"
+
+jsx-ast-utils@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz#e801b1b39985e20fffc87b40e3748080e2dcac7f"
+ dependencies:
+ array-includes "^3.0.3"
+
+killable@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.0.tgz#da8b84bd47de5395878f95d64d02f2449fe05e6b"
+
+kind-of@^3.0.2:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
+ dependencies:
+ is-buffer "^1.1.5"
+
+klaw@^1.0.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439"
+ optionalDependencies:
+ graceful-fs "^4.1.9"
+
+latest-version@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-2.0.0.tgz#56f8d6139620847b8017f8f1f4d78e211324168b"
+ dependencies:
+ package-json "^2.0.0"
+
+lazy-cache@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
+
+lazy-req@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/lazy-req/-/lazy-req-1.1.0.tgz#bdaebead30f8d824039ce0ce149d4daa07ba1fac"
+
+lcid@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
+ dependencies:
+ invert-kv "^1.0.0"
+
+leven@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580"
+
+levn@^0.3.0, levn@~0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
+ dependencies:
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+
+load-json-file@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^2.2.0"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+ strip-bom "^2.0.0"
+
+load-json-file@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8"
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^2.2.0"
+ pify "^2.0.0"
+ strip-bom "^3.0.0"
+
+loader-fs-cache@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/loader-fs-cache/-/loader-fs-cache-1.0.1.tgz#56e0bf08bd9708b26a765b68509840c8dec9fdbc"
+ dependencies:
+ find-cache-dir "^0.1.1"
+ mkdirp "0.5.1"
+
+loader-runner@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2"
+
+loader-utils@^0.2.16:
+ version "0.2.17"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348"
+ dependencies:
+ big.js "^3.1.3"
+ emojis-list "^2.0.0"
+ json5 "^0.5.0"
+ object-assign "^4.0.1"
+
+loader-utils@^1.0.2, loader-utils@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd"
+ dependencies:
+ big.js "^3.1.3"
+ emojis-list "^2.0.0"
+ json5 "^0.5.0"
+
+locate-path@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
+ dependencies:
+ p-locate "^2.0.0"
+ path-exists "^3.0.0"
+
+lodash._reinterpolate@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d"
+
+lodash.camelcase@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
+
+lodash.cond@^4.3.0:
+ version "4.5.2"
+ resolved "https://registry.yarnpkg.com/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5"
+
+lodash.defaults@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c"
+
+lodash.memoize@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
+
+lodash.template@^4.4.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.4.0.tgz#e73a0385c8355591746e020b99679c690e68fba0"
+ dependencies:
+ lodash._reinterpolate "~3.0.0"
+ lodash.templatesettings "^4.0.0"
+
+lodash.templatesettings@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz#2b4d4e95ba440d915ff08bc899e4553666713316"
+ dependencies:
+ lodash._reinterpolate "~3.0.0"
+
+lodash.uniq@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
+
+"lodash@>=3.5 <5", lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0:
+ version "4.17.5"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511"
+
+loglevel@^1.4.1:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.0.tgz#ae0caa561111498c5ba13723d6fb631d24003934"
+
+longest@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
+
+loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848"
+ dependencies:
+ js-tokens "^3.0.0"
+
+loud-rejection@^1.0.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
+ dependencies:
+ currently-unhandled "^0.4.1"
+ signal-exit "^3.0.0"
+
+lower-case@^1.1.1:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac"
+
+lowercase-keys@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306"
+
+lru-cache@^4.0.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55"
+ dependencies:
+ pseudomap "^1.0.2"
+ yallist "^2.1.2"
+
+macaddress@^0.2.8:
+ version "0.2.8"
+ resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12"
+
+make-dir@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.1.0.tgz#19b4369fe48c116f53c2af95ad102c0e39e85d51"
+ dependencies:
+ pify "^3.0.0"
+
+makeerror@1.0.x:
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c"
+ dependencies:
+ tmpl "1.0.x"
+
+map-obj@^1.0.0, map-obj@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
+
+math-expression-evaluator@^1.2.14:
+ version "1.2.17"
+ resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac"
+
+md5.js@^1.3.4:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d"
+ dependencies:
+ hash-base "^3.0.0"
+ inherits "^2.0.1"
+
+media-typer@0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
+
+mem@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76"
+ dependencies:
+ mimic-fn "^1.0.0"
+
+memory-fs@^0.4.0, memory-fs@~0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552"
+ dependencies:
+ errno "^0.1.3"
+ readable-stream "^2.0.1"
+
+meow@^3.3.0, meow@^3.7.0:
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
+ dependencies:
+ camelcase-keys "^2.0.0"
+ decamelize "^1.1.2"
+ loud-rejection "^1.0.0"
+ map-obj "^1.0.1"
+ minimist "^1.1.3"
+ normalize-package-data "^2.3.4"
+ object-assign "^4.0.1"
+ read-pkg-up "^1.0.1"
+ redent "^1.0.0"
+ trim-newlines "^1.0.0"
+
+merge-descriptors@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
+
+merge@^1.1.3:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da"
+
+methods@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
+
+micromatch@^2.1.5, micromatch@^2.3.11:
+ version "2.3.11"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
+ dependencies:
+ arr-diff "^2.0.0"
+ array-unique "^0.2.1"
+ braces "^1.8.2"
+ expand-brackets "^0.1.4"
+ extglob "^0.3.1"
+ filename-regex "^2.0.0"
+ is-extglob "^1.0.0"
+ is-glob "^2.0.1"
+ kind-of "^3.0.2"
+ normalize-path "^2.0.1"
+ object.omit "^2.0.0"
+ parse-glob "^3.0.4"
+ regex-cache "^0.4.2"
+
+miller-rabin@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d"
+ dependencies:
+ bn.js "^4.0.0"
+ brorand "^1.0.1"
+
+"mime-db@>= 1.30.0 < 2":
+ version "1.32.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.32.0.tgz#485b3848b01a3cda5f968b4882c0771e58e09414"
+
+mime-db@~1.30.0:
+ version "1.30.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01"
+
+mime-types@^2.1.12, mime-types@~2.1.15, mime-types@~2.1.16, mime-types@~2.1.17, mime-types@~2.1.7:
+ version "2.1.17"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a"
+ dependencies:
+ mime-db "~1.30.0"
+
+mime@1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6"
+
+mime@^1.4.1, mime@^1.5.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
+
+mimic-fn@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18"
+
+minimalistic-assert@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3"
+
+minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
+
+minimatch@3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774"
+ dependencies:
+ brace-expansion "^1.0.0"
+
+minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimist@0.0.8, minimist@~0.0.1:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
+
+minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
+
+mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
+ dependencies:
+ minimist "0.0.8"
+
+ms@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+
+multicast-dns-service-types@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901"
+
+multicast-dns@^6.0.1:
+ version "6.2.1"
+ resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.1.tgz#c5035defa9219d30640558a49298067352098060"
+ dependencies:
+ dns-packet "^1.0.1"
+ thunky "^0.1.0"
+
+mute-stream@0.0.7:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
+
+nan@^2.3.0:
+ version "2.8.0"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a"
+
+natural-compare@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
+
+ncname@1.0.x:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/ncname/-/ncname-1.0.0.tgz#5b57ad18b1ca092864ef62b0b1ed8194f383b71c"
+ dependencies:
+ xml-char-classes "^1.0.0"
+
+negotiator@0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9"
+
+no-case@^2.2.0:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac"
+ dependencies:
+ lower-case "^1.1.1"
+
+node-fetch@^1.0.1:
+ version "1.7.3"
+ resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef"
+ dependencies:
+ encoding "^0.1.11"
+ is-stream "^1.0.1"
+
+node-forge@0.6.33:
+ version "0.6.33"
+ resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.6.33.tgz#463811879f573d45155ad6a9f43dc296e8e85ebc"
+
+node-int64@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
+
+node-libs-browser@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.1.0.tgz#5f94263d404f6e44767d726901fff05478d600df"
+ dependencies:
+ assert "^1.1.1"
+ browserify-zlib "^0.2.0"
+ buffer "^4.3.0"
+ console-browserify "^1.1.0"
+ constants-browserify "^1.0.0"
+ crypto-browserify "^3.11.0"
+ domain-browser "^1.1.1"
+ events "^1.0.0"
+ https-browserify "^1.0.0"
+ os-browserify "^0.3.0"
+ path-browserify "0.0.0"
+ process "^0.11.10"
+ punycode "^1.2.4"
+ querystring-es3 "^0.2.0"
+ readable-stream "^2.3.3"
+ stream-browserify "^2.0.1"
+ stream-http "^2.7.2"
+ string_decoder "^1.0.0"
+ timers-browserify "^2.0.4"
+ tty-browserify "0.0.0"
+ url "^0.11.0"
+ util "^0.10.3"
+ vm-browserify "0.0.4"
+
+node-notifier@^5.0.2:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.1.2.tgz#2fa9e12605fa10009d44549d6fcd8a63dde0e4ff"
+ dependencies:
+ growly "^1.3.0"
+ semver "^5.3.0"
+ shellwords "^0.1.0"
+ which "^1.2.12"
+
+node-pre-gyp@^0.6.36:
+ version "0.6.39"
+ resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649"
+ dependencies:
+ detect-libc "^1.0.2"
+ hawk "3.1.3"
+ mkdirp "^0.5.1"
+ nopt "^4.0.1"
+ npmlog "^4.0.2"
+ rc "^1.1.7"
+ request "2.81.0"
+ rimraf "^2.6.1"
+ semver "^5.3.0"
+ tar "^2.2.1"
+ tar-pack "^3.4.0"
+
+node-status-codes@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/node-status-codes/-/node-status-codes-1.0.0.tgz#5ae5541d024645d32a58fcddc9ceecea7ae3ac2f"
+
+nopt@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d"
+ dependencies:
+ abbrev "1"
+ osenv "^0.1.4"
+
+normalize-package-data@^2.3.2, normalize-package-data@^2.3.4:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f"
+ dependencies:
+ hosted-git-info "^2.1.4"
+ is-builtin-module "^1.0.0"
+ semver "2 || 3 || 4 || 5"
+ validate-npm-package-license "^3.0.1"
+
+normalize-path@^2.0.0, normalize-path@^2.0.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
+ dependencies:
+ remove-trailing-separator "^1.0.1"
+
+normalize-range@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
+
+normalize-url@^1.4.0:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c"
+ dependencies:
+ object-assign "^4.0.1"
+ prepend-http "^1.0.0"
+ query-string "^4.1.0"
+ sort-keys "^1.0.0"
+
+npm-run-path@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
+ dependencies:
+ path-key "^2.0.0"
+
+npmlog@^4.0.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
+ dependencies:
+ are-we-there-yet "~1.1.2"
+ console-control-strings "~1.1.0"
+ gauge "~2.7.3"
+ set-blocking "~2.0.0"
+
+nth-check@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4"
+ dependencies:
+ boolbase "~1.0.0"
+
+num2fraction@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede"
+
+number-is-nan@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+
+"nwmatcher@>= 1.3.9 < 2.0.0":
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.3.tgz#64348e3b3d80f035b40ac11563d278f8b72db89c"
+
+oauth-sign@~0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
+
+object-assign@4.1.1, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+
+object-hash@^1.1.4:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.2.0.tgz#e96af0e96981996a1d47f88ead8f74f1ebc4422b"
+
+object-keys@^1.0.8:
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d"
+
+object.omit@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
+ dependencies:
+ for-own "^0.1.4"
+ is-extendable "^0.1.1"
+
+obuf@^1.0.0, obuf@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.1.tgz#104124b6c602c6796881a042541d36db43a5264e"
+
+on-finished@~2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
+ dependencies:
+ ee-first "1.1.1"
+
+on-headers@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7"
+
+once@^1.3.0, once@^1.3.3, once@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ dependencies:
+ wrappy "1"
+
+onetime@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
+ dependencies:
+ mimic-fn "^1.0.0"
+
+opn@5.1.0, opn@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/opn/-/opn-5.1.0.tgz#72ce2306a17dbea58ff1041853352b4a8fc77519"
+ dependencies:
+ is-wsl "^1.1.0"
+
+optimist@^0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
+ dependencies:
+ minimist "~0.0.1"
+ wordwrap "~0.0.2"
+
+optionator@^0.8.1, optionator@^0.8.2:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
+ dependencies:
+ deep-is "~0.1.3"
+ fast-levenshtein "~2.0.4"
+ levn "~0.3.0"
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+ wordwrap "~1.0.0"
+
+original@>=0.0.5:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/original/-/original-1.0.0.tgz#9147f93fa1696d04be61e01bd50baeaca656bd3b"
+ dependencies:
+ url-parse "1.0.x"
+
+os-browserify@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
+
+os-homedir@^1.0.0, os-homedir@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
+
+os-locale@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9"
+ dependencies:
+ lcid "^1.0.0"
+
+os-locale@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2"
+ dependencies:
+ execa "^0.7.0"
+ lcid "^1.0.0"
+ mem "^1.1.0"
+
+os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+
+osenv@^0.1.0, osenv@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644"
+ dependencies:
+ os-homedir "^1.0.0"
+ os-tmpdir "^1.0.0"
+
+p-finally@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
+
+p-limit@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc"
+
+p-locate@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
+ dependencies:
+ p-limit "^1.1.0"
+
+p-map@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b"
+
+package-json@^2.0.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/package-json/-/package-json-2.4.0.tgz#0d15bd67d1cbbddbb2ca222ff2edb86bcb31a8bb"
+ dependencies:
+ got "^5.0.0"
+ registry-auth-token "^3.0.1"
+ registry-url "^3.0.3"
+ semver "^5.1.0"
+
+pako@~1.0.5:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258"
+
+param-case@2.1.x:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247"
+ dependencies:
+ no-case "^2.2.0"
+
+parse-asn1@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.0.tgz#37c4f9b7ed3ab65c74817b5f2480937fbf97c712"
+ dependencies:
+ asn1.js "^4.0.0"
+ browserify-aes "^1.0.0"
+ create-hash "^1.1.0"
+ evp_bytestokey "^1.0.0"
+ pbkdf2 "^3.0.3"
+
+parse-glob@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
+ dependencies:
+ glob-base "^0.3.0"
+ is-dotfile "^1.0.0"
+ is-extglob "^1.0.0"
+ is-glob "^2.0.0"
+
+parse-json@^2.1.0, parse-json@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
+ dependencies:
+ error-ex "^1.2.0"
+
+parse-passwd@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6"
+
+parse5@^1.5.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94"
+
+parseurl@~1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3"
+
+path-browserify@0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a"
+
+path-exists@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
+ dependencies:
+ pinkie-promise "^2.0.0"
+
+path-exists@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+
+path-is-absolute@^1.0.0, path-is-absolute@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+
+path-is-inside@^1.0.1, path-is-inside@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
+
+path-key@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
+
+path-parse@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1"
+
+path-to-regexp@0.1.7:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
+
+path-to-regexp@^1.0.1:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d"
+ dependencies:
+ isarray "0.0.1"
+
+path-type@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
+ dependencies:
+ graceful-fs "^4.1.2"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+path-type@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73"
+ dependencies:
+ pify "^2.0.0"
+
+pbkdf2@^3.0.3:
+ version "3.0.14"
+ resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.14.tgz#a35e13c64799b06ce15320f459c230e68e73bade"
+ dependencies:
+ create-hash "^1.1.2"
+ create-hmac "^1.1.4"
+ ripemd160 "^2.0.1"
+ safe-buffer "^5.0.1"
+ sha.js "^2.4.8"
+
+performance-now@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5"
+
+performance-now@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
+
+pify@^2.0.0, pify@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+
+pify@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
+
+pinkie-promise@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+ dependencies:
+ pinkie "^2.0.0"
+
+pinkie@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+
+pkg-dir@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4"
+ dependencies:
+ find-up "^1.0.0"
+
+pkg-dir@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"
+ dependencies:
+ find-up "^2.1.0"
+
+pluralize@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777"
+
+portfinder@^1.0.9:
+ version "1.0.13"
+ resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.13.tgz#bb32ecd87c27104ae6ee44b5a3ccbf0ebb1aede9"
+ dependencies:
+ async "^1.5.2"
+ debug "^2.2.0"
+ mkdirp "0.5.x"
+
+postcss-calc@^5.2.0:
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e"
+ dependencies:
+ postcss "^5.0.2"
+ postcss-message-helpers "^2.0.0"
+ reduce-css-calc "^1.2.6"
+
+postcss-colormin@^2.1.8:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b"
+ dependencies:
+ colormin "^1.0.5"
+ postcss "^5.0.13"
+ postcss-value-parser "^3.2.3"
+
+postcss-convert-values@^2.3.4:
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d"
+ dependencies:
+ postcss "^5.0.11"
+ postcss-value-parser "^3.1.2"
+
+postcss-discard-comments@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d"
+ dependencies:
+ postcss "^5.0.14"
+
+postcss-discard-duplicates@^2.0.1:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932"
+ dependencies:
+ postcss "^5.0.4"
+
+postcss-discard-empty@^2.0.1:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5"
+ dependencies:
+ postcss "^5.0.14"
+
+postcss-discard-overridden@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58"
+ dependencies:
+ postcss "^5.0.16"
+
+postcss-discard-unused@^2.2.1:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433"
+ dependencies:
+ postcss "^5.0.14"
+ uniqs "^2.0.0"
+
+postcss-filter-plugins@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz#6d85862534d735ac420e4a85806e1f5d4286d84c"
+ dependencies:
+ postcss "^5.0.4"
+ uniqid "^4.0.0"
+
+postcss-flexbugs-fixes@3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-3.2.0.tgz#9b8b932c53f9cf13ba0f61875303e447c33dcc51"
+ dependencies:
+ postcss "^6.0.1"
+
+postcss-load-config@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-1.2.0.tgz#539e9afc9ddc8620121ebf9d8c3673e0ce50d28a"
+ dependencies:
+ cosmiconfig "^2.1.0"
+ object-assign "^4.1.0"
+ postcss-load-options "^1.2.0"
+ postcss-load-plugins "^2.3.0"
+
+postcss-load-options@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/postcss-load-options/-/postcss-load-options-1.2.0.tgz#b098b1559ddac2df04bc0bb375f99a5cfe2b6d8c"
+ dependencies:
+ cosmiconfig "^2.1.0"
+ object-assign "^4.1.0"
+
+postcss-load-plugins@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz#745768116599aca2f009fad426b00175049d8d92"
+ dependencies:
+ cosmiconfig "^2.1.1"
+ object-assign "^4.1.0"
+
+postcss-loader@2.0.8:
+ version "2.0.8"
+ resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-2.0.8.tgz#8c67ddb029407dfafe684a406cfc16bad2ce0814"
+ dependencies:
+ loader-utils "^1.1.0"
+ postcss "^6.0.0"
+ postcss-load-config "^1.2.0"
+ schema-utils "^0.3.0"
+
+postcss-merge-idents@^2.1.5:
+ version "2.1.7"
+ resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270"
+ dependencies:
+ has "^1.0.1"
+ postcss "^5.0.10"
+ postcss-value-parser "^3.1.1"
+
+postcss-merge-longhand@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658"
+ dependencies:
+ postcss "^5.0.4"
+
+postcss-merge-rules@^2.0.3:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721"
+ dependencies:
+ browserslist "^1.5.2"
+ caniuse-api "^1.5.2"
+ postcss "^5.0.4"
+ postcss-selector-parser "^2.2.2"
+ vendors "^1.0.0"
+
+postcss-message-helpers@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e"
+
+postcss-minify-font-values@^1.0.2:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69"
+ dependencies:
+ object-assign "^4.0.1"
+ postcss "^5.0.4"
+ postcss-value-parser "^3.0.2"
+
+postcss-minify-gradients@^1.0.1:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1"
+ dependencies:
+ postcss "^5.0.12"
+ postcss-value-parser "^3.3.0"
+
+postcss-minify-params@^1.0.4:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3"
+ dependencies:
+ alphanum-sort "^1.0.1"
+ postcss "^5.0.2"
+ postcss-value-parser "^3.0.2"
+ uniqs "^2.0.0"
+
+postcss-minify-selectors@^2.0.4:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf"
+ dependencies:
+ alphanum-sort "^1.0.2"
+ has "^1.0.1"
+ postcss "^5.0.14"
+ postcss-selector-parser "^2.0.0"
+
+postcss-modules-extract-imports@^1.0.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz#66140ecece38ef06bf0d3e355d69bf59d141ea85"
+ dependencies:
+ postcss "^6.0.1"
+
+postcss-modules-local-by-default@^1.0.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069"
+ dependencies:
+ css-selector-tokenizer "^0.7.0"
+ postcss "^6.0.1"
+
+postcss-modules-scope@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90"
+ dependencies:
+ css-selector-tokenizer "^0.7.0"
+ postcss "^6.0.1"
+
+postcss-modules-values@^1.1.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20"
+ dependencies:
+ icss-replace-symbols "^1.1.0"
+ postcss "^6.0.1"
+
+postcss-normalize-charset@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1"
+ dependencies:
+ postcss "^5.0.5"
+
+postcss-normalize-url@^3.0.7:
+ version "3.0.8"
+ resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222"
+ dependencies:
+ is-absolute-url "^2.0.0"
+ normalize-url "^1.4.0"
+ postcss "^5.0.14"
+ postcss-value-parser "^3.2.3"
+
+postcss-ordered-values@^2.1.0:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d"
+ dependencies:
+ postcss "^5.0.4"
+ postcss-value-parser "^3.0.1"
+
+postcss-reduce-idents@^2.2.2:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3"
+ dependencies:
+ postcss "^5.0.4"
+ postcss-value-parser "^3.0.2"
+
+postcss-reduce-initial@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea"
+ dependencies:
+ postcss "^5.0.4"
+
+postcss-reduce-transforms@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1"
+ dependencies:
+ has "^1.0.1"
+ postcss "^5.0.8"
+ postcss-value-parser "^3.0.1"
+
+postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90"
+ dependencies:
+ flatten "^1.0.2"
+ indexes-of "^1.0.1"
+ uniq "^1.0.1"
+
+postcss-svgo@^2.1.1:
+ version "2.1.6"
+ resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d"
+ dependencies:
+ is-svg "^2.0.0"
+ postcss "^5.0.14"
+ postcss-value-parser "^3.2.3"
+ svgo "^0.7.0"
+
+postcss-unique-selectors@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d"
+ dependencies:
+ alphanum-sort "^1.0.1"
+ postcss "^5.0.4"
+ uniqs "^2.0.0"
+
+postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15"
+
+postcss-zindex@^2.0.1:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22"
+ dependencies:
+ has "^1.0.1"
+ postcss "^5.0.4"
+ uniqs "^2.0.0"
+
+postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.16:
+ version "5.2.18"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5"
+ dependencies:
+ chalk "^1.1.3"
+ js-base64 "^2.1.9"
+ source-map "^0.5.6"
+ supports-color "^3.2.3"
+
+postcss@^6.0.0, postcss@^6.0.1, postcss@^6.0.13:
+ version "6.0.14"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.14.tgz#5534c72114739e75d0afcf017db853099f562885"
+ dependencies:
+ chalk "^2.3.0"
+ source-map "^0.6.1"
+ supports-color "^4.4.0"
+
+prelude-ls@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
+
+prepend-http@^1.0.0, prepend-http@^1.0.1:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
+
+preserve@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
+
+pretty-bytes@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9"
+
+pretty-error@^2.0.2:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3"
+ dependencies:
+ renderkid "^2.0.1"
+ utila "~0.4"
+
+pretty-format@^20.0.3:
+ version "20.0.3"
+ resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-20.0.3.tgz#020e350a560a1fe1a98dc3beb6ccffb386de8b14"
+ dependencies:
+ ansi-regex "^2.1.1"
+ ansi-styles "^3.0.0"
+
+private@^0.1.6, private@^0.1.7:
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
+
+process-nextick-args@~1.0.6:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
+
+process@^0.11.10:
+ version "0.11.10"
+ resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
+
+progress@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f"
+
+promise@8.0.1:
+ version "8.0.1"
+ resolved "https://registry.yarnpkg.com/promise/-/promise-8.0.1.tgz#e45d68b00a17647b6da711bf85ed6ed47208f450"
+ dependencies:
+ asap "~2.0.3"
+
+promise@^7.1.1:
+ version "7.3.1"
+ resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf"
+ dependencies:
+ asap "~2.0.3"
+
+prop-types@^15.5.10, prop-types@^15.6.0:
+ version "15.6.0"
+ resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.0.tgz#ceaf083022fc46b4a35f69e13ef75aed0d639856"
+ dependencies:
+ fbjs "^0.8.16"
+ loose-envify "^1.3.1"
+ object-assign "^4.1.1"
+
+proxy-addr@~2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.2.tgz#6571504f47bb988ec8180253f85dd7e14952bdec"
+ dependencies:
+ forwarded "~0.1.2"
+ ipaddr.js "1.5.2"
+
+prr@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
+
+pseudomap@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
+
+public-encrypt@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.0.tgz#39f699f3a46560dd5ebacbca693caf7c65c18cc6"
+ dependencies:
+ bn.js "^4.1.0"
+ browserify-rsa "^4.0.0"
+ create-hash "^1.1.0"
+ parse-asn1 "^5.0.0"
+ randombytes "^2.0.1"
+
+punycode@1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
+
+punycode@^1.2.4, punycode@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+
+q@^1.1.2:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
+
+qs@6.5.1:
+ version "6.5.1"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8"
+
+qs@~6.4.0:
+ version "6.4.0"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233"
+
+query-string@^4.1.0:
+ version "4.3.4"
+ resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb"
+ dependencies:
+ object-assign "^4.1.0"
+ strict-uri-encode "^1.0.0"
+
+querystring-es3@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
+
+querystring@0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
+
+querystringify@0.0.x:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-0.0.4.tgz#0cf7f84f9463ff0ae51c4c4b142d95be37724d9c"
+
+querystringify@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-1.0.0.tgz#6286242112c5b712fa654e526652bf6a13ff05cb"
+
+raf@3.4.0:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.0.tgz#a28876881b4bc2ca9117d4138163ddb80f781575"
+ dependencies:
+ performance-now "^2.1.0"
+
+randomatic@^1.1.3:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c"
+ dependencies:
+ is-number "^3.0.0"
+ kind-of "^4.0.0"
+
+randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.5.tgz#dc009a246b8d09a177b4b7a0ae77bc570f4b1b79"
+ dependencies:
+ safe-buffer "^5.1.0"
+
+randomfill@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.3.tgz#b96b7df587f01dd91726c418f30553b1418e3d62"
+ dependencies:
+ randombytes "^2.0.5"
+ safe-buffer "^5.1.0"
+
+range-parser@^1.0.3, range-parser@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e"
+
+raw-body@2.3.2:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89"
+ dependencies:
+ bytes "3.0.0"
+ http-errors "1.6.2"
+ iconv-lite "0.4.19"
+ unpipe "1.0.0"
+
+rc@^1.0.1, rc@^1.1.6, rc@^1.1.7:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.2.tgz#d8ce9cb57e8d64d9c7badd9876c7c34cbe3c7077"
+ dependencies:
+ deep-extend "~0.4.0"
+ ini "~1.3.0"
+ minimist "^1.2.0"
+ strip-json-comments "~2.0.1"
+
+react-dev-utils@^4.2.1:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-4.2.1.tgz#9f2763e7bafa1a1b9c52254d2a479deec280f111"
+ dependencies:
+ address "1.0.3"
+ babel-code-frame "6.26.0"
+ chalk "1.1.3"
+ cross-spawn "5.1.0"
+ detect-port-alt "1.1.3"
+ escape-string-regexp "1.0.5"
+ filesize "3.5.11"
+ global-modules "1.0.0"
+ gzip-size "3.0.0"
+ inquirer "3.3.0"
+ is-root "1.0.0"
+ opn "5.1.0"
+ react-error-overlay "^3.0.0"
+ recursive-readdir "2.2.1"
+ shell-quote "1.6.1"
+ sockjs-client "1.1.4"
+ strip-ansi "3.0.1"
+ text-table "0.2.0"
+
+react-dom@^16.2.0:
+ version "16.2.0"
+ resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.2.0.tgz#69003178601c0ca19b709b33a83369fe6124c044"
+ dependencies:
+ fbjs "^0.8.16"
+ loose-envify "^1.1.0"
+ object-assign "^4.1.1"
+ prop-types "^15.6.0"
+
+react-error-overlay@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-3.0.0.tgz#c2bc8f4d91f1375b3dad6d75265d51cd5eeaf655"
+
+react-scripts@1.0.17:
+ version "1.0.17"
+ resolved "https://registry.yarnpkg.com/react-scripts/-/react-scripts-1.0.17.tgz#c30029123b561a060227af4d7797d50a222d3fbf"
+ dependencies:
+ autoprefixer "7.1.6"
+ babel-core "6.26.0"
+ babel-eslint "7.2.3"
+ babel-jest "20.0.3"
+ babel-loader "7.1.2"
+ babel-preset-react-app "^3.1.0"
+ babel-runtime "6.26.0"
+ case-sensitive-paths-webpack-plugin "2.1.1"
+ chalk "1.1.3"
+ css-loader "0.28.7"
+ dotenv "4.0.0"
+ eslint "4.10.0"
+ eslint-config-react-app "^2.0.1"
+ eslint-loader "1.9.0"
+ eslint-plugin-flowtype "2.39.1"
+ eslint-plugin-import "2.8.0"
+ eslint-plugin-jsx-a11y "5.1.1"
+ eslint-plugin-react "7.4.0"
+ extract-text-webpack-plugin "3.0.2"
+ file-loader "1.1.5"
+ fs-extra "3.0.1"
+ html-webpack-plugin "2.29.0"
+ jest "20.0.4"
+ object-assign "4.1.1"
+ postcss-flexbugs-fixes "3.2.0"
+ postcss-loader "2.0.8"
+ promise "8.0.1"
+ raf "3.4.0"
+ react-dev-utils "^4.2.1"
+ style-loader "0.19.0"
+ sw-precache-webpack-plugin "0.11.4"
+ url-loader "0.6.2"
+ webpack "3.8.1"
+ webpack-dev-server "2.9.4"
+ webpack-manifest-plugin "1.3.2"
+ whatwg-fetch "2.0.3"
+ optionalDependencies:
+ fsevents "1.1.2"
+
+react@^16.2.0:
+ version "16.2.0"
+ resolved "https://registry.yarnpkg.com/react/-/react-16.2.0.tgz#a31bd2dab89bff65d42134fa187f24d054c273ba"
+ dependencies:
+ fbjs "^0.8.16"
+ loose-envify "^1.1.0"
+ object-assign "^4.1.1"
+ prop-types "^15.6.0"
+
+read-all-stream@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/read-all-stream/-/read-all-stream-3.1.0.tgz#35c3e177f2078ef789ee4bfafa4373074eaef4fa"
+ dependencies:
+ pinkie-promise "^2.0.0"
+ readable-stream "^2.0.0"
+
+read-pkg-up@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
+ dependencies:
+ find-up "^1.0.0"
+ read-pkg "^1.0.0"
+
+read-pkg-up@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be"
+ dependencies:
+ find-up "^2.0.0"
+ read-pkg "^2.0.0"
+
+read-pkg@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
+ dependencies:
+ load-json-file "^1.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^1.0.0"
+
+read-pkg@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8"
+ dependencies:
+ load-json-file "^2.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^2.0.0"
+
+readable-stream@1.0:
+ version "1.0.34"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "0.0.1"
+ string_decoder "~0.10.x"
+
+readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.2.2, readable-stream@^2.2.6, readable-stream@^2.2.9, readable-stream@^2.3.3:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c"
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.3"
+ isarray "~1.0.0"
+ process-nextick-args "~1.0.6"
+ safe-buffer "~5.1.1"
+ string_decoder "~1.0.3"
+ util-deprecate "~1.0.1"
+
+readdirp@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78"
+ dependencies:
+ graceful-fs "^4.1.2"
+ minimatch "^3.0.2"
+ readable-stream "^2.0.2"
+ set-immediate-shim "^1.0.1"
+
+recursive-readdir@2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.1.tgz#90ef231d0778c5ce093c9a48d74e5c5422d13a99"
+ dependencies:
+ minimatch "3.0.3"
+
+redent@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
+ dependencies:
+ indent-string "^2.1.0"
+ strip-indent "^1.0.1"
+
+reduce-css-calc@^1.2.6:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716"
+ dependencies:
+ balanced-match "^0.4.2"
+ math-expression-evaluator "^1.2.14"
+ reduce-function-call "^1.0.1"
+
+reduce-function-call@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99"
+ dependencies:
+ balanced-match "^0.4.2"
+
+regenerate@^1.2.1:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f"
+
+regenerator-runtime@^0.11.0:
+ version "0.11.1"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
+
+regenerator-transform@^0.10.0:
+ version "0.10.1"
+ resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd"
+ dependencies:
+ babel-runtime "^6.18.0"
+ babel-types "^6.19.0"
+ private "^0.1.6"
+
+regex-cache@^0.4.2:
+ version "0.4.4"
+ resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd"
+ dependencies:
+ is-equal-shallow "^0.1.3"
+
+regexpu-core@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b"
+ dependencies:
+ regenerate "^1.2.1"
+ regjsgen "^0.2.0"
+ regjsparser "^0.1.4"
+
+regexpu-core@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240"
+ dependencies:
+ regenerate "^1.2.1"
+ regjsgen "^0.2.0"
+ regjsparser "^0.1.4"
+
+registry-auth-token@^3.0.1:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.1.tgz#fb0d3289ee0d9ada2cbb52af5dfe66cb070d3006"
+ dependencies:
+ rc "^1.1.6"
+ safe-buffer "^5.0.1"
+
+registry-url@^3.0.3:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942"
+ dependencies:
+ rc "^1.0.1"
+
+regjsgen@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7"
+
+regjsparser@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c"
+ dependencies:
+ jsesc "~0.5.0"
+
+relateurl@0.2.x:
+ version "0.2.7"
+ resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9"
+
+remove-trailing-separator@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
+
+renderkid@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.1.tgz#898cabfc8bede4b7b91135a3ffd323e58c0db319"
+ dependencies:
+ css-select "^1.1.0"
+ dom-converter "~0.1"
+ htmlparser2 "~3.3.0"
+ strip-ansi "^3.0.0"
+ utila "~0.3"
+
+repeat-element@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a"
+
+repeat-string@^1.5.2:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+
+repeating@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
+ dependencies:
+ is-finite "^1.0.0"
+
+request@2.81.0, request@^2.79.0:
+ version "2.81.0"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0"
+ dependencies:
+ aws-sign2 "~0.6.0"
+ aws4 "^1.2.1"
+ caseless "~0.12.0"
+ combined-stream "~1.0.5"
+ extend "~3.0.0"
+ forever-agent "~0.6.1"
+ form-data "~2.1.1"
+ har-validator "~4.2.1"
+ hawk "~3.1.3"
+ http-signature "~1.1.0"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.7"
+ oauth-sign "~0.8.1"
+ performance-now "^0.2.0"
+ qs "~6.4.0"
+ safe-buffer "^5.0.1"
+ stringstream "~0.0.4"
+ tough-cookie "~2.3.0"
+ tunnel-agent "^0.6.0"
+ uuid "^3.0.0"
+
+require-directory@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+
+require-from-string@^1.1.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418"
+
+require-main-filename@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
+
+require-uncached@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3"
+ dependencies:
+ caller-path "^0.1.0"
+ resolve-from "^1.0.0"
+
+requires-port@1.0.x, requires-port@1.x.x, requires-port@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
+
+resolve-cwd@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a"
+ dependencies:
+ resolve-from "^3.0.0"
+
+resolve-dir@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43"
+ dependencies:
+ expand-tilde "^2.0.0"
+ global-modules "^1.0.0"
+
+resolve-from@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226"
+
+resolve-from@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
+
+resolve@1.1.7:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
+
+resolve@^1.2.0, resolve@^1.3.2:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36"
+ dependencies:
+ path-parse "^1.0.5"
+
+restore-cursor@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
+ dependencies:
+ onetime "^2.0.0"
+ signal-exit "^3.0.2"
+
+right-align@^0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
+ dependencies:
+ align-text "^0.1.1"
+
+rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.6.1:
+ version "2.6.2"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
+ dependencies:
+ glob "^7.0.5"
+
+ripemd160@^2.0.0, ripemd160@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7"
+ dependencies:
+ hash-base "^2.0.0"
+ inherits "^2.0.1"
+
+run-async@^2.2.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0"
+ dependencies:
+ is-promise "^2.1.0"
+
+rx-lite-aggregates@^4.0.8:
+ version "4.0.8"
+ resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be"
+ dependencies:
+ rx-lite "*"
+
+rx-lite@*, rx-lite@^4.0.8:
+ version "4.0.8"
+ resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444"
+
+safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
+
+sane@~1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/sane/-/sane-1.6.0.tgz#9610c452307a135d29c1fdfe2547034180c46775"
+ dependencies:
+ anymatch "^1.3.0"
+ exec-sh "^0.2.0"
+ fb-watchman "^1.8.0"
+ minimatch "^3.0.2"
+ minimist "^1.1.1"
+ walker "~1.0.5"
+ watch "~0.10.0"
+
+sax@^1.2.1, sax@~1.2.1:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
+
+schema-utils@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.3.0.tgz#f5877222ce3e931edae039f17eb3716e7137f8cf"
+ dependencies:
+ ajv "^5.0.0"
+
+select-hose@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
+
+selfsigned@^1.9.1:
+ version "1.10.1"
+ resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.1.tgz#bf8cb7b83256c4551e31347c6311778db99eec52"
+ dependencies:
+ node-forge "0.6.33"
+
+semver-diff@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36"
+ dependencies:
+ semver "^5.0.3"
+
+"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0:
+ version "5.4.1"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e"
+
+send@0.16.1:
+ version "0.16.1"
+ resolved "https://registry.yarnpkg.com/send/-/send-0.16.1.tgz#a70e1ca21d1382c11d0d9f6231deb281080d7ab3"
+ dependencies:
+ debug "2.6.9"
+ depd "~1.1.1"
+ destroy "~1.0.4"
+ encodeurl "~1.0.1"
+ escape-html "~1.0.3"
+ etag "~1.8.1"
+ fresh "0.5.2"
+ http-errors "~1.6.2"
+ mime "1.4.1"
+ ms "2.0.0"
+ on-finished "~2.3.0"
+ range-parser "~1.2.0"
+ statuses "~1.3.1"
+
+serve-index@^1.7.2:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239"
+ dependencies:
+ accepts "~1.3.4"
+ batch "0.6.1"
+ debug "2.6.9"
+ escape-html "~1.0.3"
+ http-errors "~1.6.2"
+ mime-types "~2.1.17"
+ parseurl "~1.3.2"
+
+serve-static@1.13.1:
+ version "1.13.1"
+ resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.1.tgz#4c57d53404a761d8f2e7c1e8a18a47dbf278a719"
+ dependencies:
+ encodeurl "~1.0.1"
+ escape-html "~1.0.3"
+ parseurl "~1.3.2"
+ send "0.16.1"
+
+serviceworker-cache-polyfill@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/serviceworker-cache-polyfill/-/serviceworker-cache-polyfill-4.0.0.tgz#de19ee73bef21ab3c0740a37b33db62464babdeb"
+
+set-blocking@^2.0.0, set-blocking@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+
+set-immediate-shim@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61"
+
+setimmediate@^1.0.4, setimmediate@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
+
+setprototypeof@1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04"
+
+setprototypeof@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
+
+sha.js@^2.4.0, sha.js@^2.4.8:
+ version "2.4.9"
+ resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.9.tgz#98f64880474b74f4a38b8da9d3c0f2d104633e7d"
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+shebang-command@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
+ dependencies:
+ shebang-regex "^1.0.0"
+
+shebang-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
+
+shell-quote@1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767"
+ dependencies:
+ array-filter "~0.0.0"
+ array-map "~0.0.0"
+ array-reduce "~0.0.0"
+ jsonify "~0.0.0"
+
+shellwords@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b"
+
+signal-exit@^3.0.0, signal-exit@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
+
+slash@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
+
+slice-ansi@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d"
+ dependencies:
+ is-fullwidth-code-point "^2.0.0"
+
+slide@^1.1.5:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707"
+
+sntp@1.x.x:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
+ dependencies:
+ hoek "2.x.x"
+
+sockjs-client@1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.4.tgz#5babe386b775e4cf14e7520911452654016c8b12"
+ dependencies:
+ debug "^2.6.6"
+ eventsource "0.1.6"
+ faye-websocket "~0.11.0"
+ inherits "^2.0.1"
+ json3 "^3.3.2"
+ url-parse "^1.1.8"
+
+sockjs@0.3.18:
+ version "0.3.18"
+ resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.18.tgz#d9b289316ca7df77595ef299e075f0f937eb4207"
+ dependencies:
+ faye-websocket "^0.10.0"
+ uuid "^2.0.2"
+
+sort-keys@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad"
+ dependencies:
+ is-plain-obj "^1.0.0"
+
+source-list-map@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085"
+
+source-map-support@^0.4.15:
+ version "0.4.18"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f"
+ dependencies:
+ source-map "^0.5.6"
+
+source-map@0.5.x, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.6:
+ version "0.5.7"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
+
+source-map@^0.4.4:
+ version "0.4.4"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b"
+ dependencies:
+ amdefine ">=0.0.4"
+
+source-map@^0.6.1, source-map@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+
+spdx-correct@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40"
+ dependencies:
+ spdx-license-ids "^1.0.2"
+
+spdx-expression-parse@~1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c"
+
+spdx-license-ids@^1.0.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57"
+
+spdy-transport@^2.0.18:
+ version "2.0.20"
+ resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-2.0.20.tgz#735e72054c486b2354fe89e702256004a39ace4d"
+ dependencies:
+ debug "^2.6.8"
+ detect-node "^2.0.3"
+ hpack.js "^2.1.6"
+ obuf "^1.1.1"
+ readable-stream "^2.2.9"
+ safe-buffer "^5.0.1"
+ wbuf "^1.7.2"
+
+spdy@^3.4.1:
+ version "3.4.7"
+ resolved "https://registry.yarnpkg.com/spdy/-/spdy-3.4.7.tgz#42ff41ece5cc0f99a3a6c28aabb73f5c3b03acbc"
+ dependencies:
+ debug "^2.6.8"
+ handle-thing "^1.2.5"
+ http-deceiver "^1.2.7"
+ safe-buffer "^5.0.1"
+ select-hose "^2.0.0"
+ spdy-transport "^2.0.18"
+
+sprintf-js@~1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+
+sshpk@^1.7.0:
+ version "1.13.1"
+ resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3"
+ dependencies:
+ asn1 "~0.2.3"
+ assert-plus "^1.0.0"
+ dashdash "^1.12.0"
+ getpass "^0.1.1"
+ optionalDependencies:
+ bcrypt-pbkdf "^1.0.0"
+ ecc-jsbn "~0.1.1"
+ jsbn "~0.1.0"
+ tweetnacl "~0.14.0"
+
+"statuses@>= 1.3.1 < 2", statuses@~1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e"
+
+stream-browserify@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db"
+ dependencies:
+ inherits "~2.0.1"
+ readable-stream "^2.0.2"
+
+stream-http@^2.7.2:
+ version "2.7.2"
+ resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.7.2.tgz#40a050ec8dc3b53b33d9909415c02c0bf1abfbad"
+ dependencies:
+ builtin-status-codes "^3.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.2.6"
+ to-arraybuffer "^1.0.0"
+ xtend "^4.0.0"
+
+strict-uri-encode@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
+
+string-length@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/string-length/-/string-length-1.0.1.tgz#56970fb1c38558e9e70b728bf3de269ac45adfac"
+ dependencies:
+ strip-ansi "^3.0.0"
+
+string-width@^1.0.1, string-width@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ strip-ansi "^3.0.0"
+
+string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
+ dependencies:
+ is-fullwidth-code-point "^2.0.0"
+ strip-ansi "^4.0.0"
+
+string_decoder@^1.0.0, string_decoder@~1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab"
+ dependencies:
+ safe-buffer "~5.1.0"
+
+string_decoder@~0.10.x:
+ version "0.10.31"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+
+stringstream@~0.0.4:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
+
+strip-ansi@3.0.1, strip-ansi@^3.0.0, strip-ansi@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+ dependencies:
+ ansi-regex "^2.0.0"
+
+strip-ansi@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
+ dependencies:
+ ansi-regex "^3.0.0"
+
+strip-bom@3.0.0, strip-bom@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
+
+strip-bom@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
+ dependencies:
+ is-utf8 "^0.2.0"
+
+strip-eof@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
+
+strip-indent@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
+ dependencies:
+ get-stdin "^4.0.1"
+
+strip-json-comments@~2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
+
+style-loader@0.19.0:
+ version "0.19.0"
+ resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.19.0.tgz#7258e788f0fee6a42d710eaf7d6c2412a4c50759"
+ dependencies:
+ loader-utils "^1.0.2"
+ schema-utils "^0.3.0"
+
+supports-color@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
+
+supports-color@^3.1.2, supports-color@^3.2.3:
+ version "3.2.3"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6"
+ dependencies:
+ has-flag "^1.0.0"
+
+supports-color@^4.0.0, supports-color@^4.2.1, supports-color@^4.4.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b"
+ dependencies:
+ has-flag "^2.0.0"
+
+svgo@^0.7.0:
+ version "0.7.2"
+ resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5"
+ dependencies:
+ coa "~1.0.1"
+ colors "~1.1.2"
+ csso "~2.3.1"
+ js-yaml "~3.7.0"
+ mkdirp "~0.5.1"
+ sax "~1.2.1"
+ whet.extend "~0.9.9"
+
+sw-precache-webpack-plugin@0.11.4:
+ version "0.11.4"
+ resolved "https://registry.yarnpkg.com/sw-precache-webpack-plugin/-/sw-precache-webpack-plugin-0.11.4.tgz#a695017e54eed575551493a519dc1da8da2dc5e0"
+ dependencies:
+ del "^2.2.2"
+ sw-precache "^5.1.1"
+ uglify-js "^3.0.13"
+
+sw-precache@^5.1.1:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/sw-precache/-/sw-precache-5.2.0.tgz#eb6225ce580ceaae148194578a0ad01ab7ea199c"
+ dependencies:
+ dom-urls "^1.1.0"
+ es6-promise "^4.0.5"
+ glob "^7.1.1"
+ lodash.defaults "^4.2.0"
+ lodash.template "^4.4.0"
+ meow "^3.7.0"
+ mkdirp "^0.5.1"
+ pretty-bytes "^4.0.2"
+ sw-toolbox "^3.4.0"
+ update-notifier "^1.0.3"
+
+sw-toolbox@^3.4.0:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/sw-toolbox/-/sw-toolbox-3.6.0.tgz#26df1d1c70348658e4dea2884319149b7b3183b5"
+ dependencies:
+ path-to-regexp "^1.0.1"
+ serviceworker-cache-polyfill "^4.0.0"
+
+symbol-tree@^3.2.1:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6"
+
+table@^4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36"
+ dependencies:
+ ajv "^5.2.3"
+ ajv-keywords "^2.1.0"
+ chalk "^2.1.0"
+ lodash "^4.17.4"
+ slice-ansi "1.0.0"
+ string-width "^2.1.1"
+
+tapable@^0.2.7:
+ version "0.2.8"
+ resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22"
+
+tar-pack@^3.4.0:
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f"
+ dependencies:
+ debug "^2.2.0"
+ fstream "^1.0.10"
+ fstream-ignore "^1.0.5"
+ once "^1.3.3"
+ readable-stream "^2.1.4"
+ rimraf "^2.5.1"
+ tar "^2.2.1"
+ uid-number "^0.0.6"
+
+tar@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"
+ dependencies:
+ block-stream "*"
+ fstream "^1.0.2"
+ inherits "2"
+
+test-exclude@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.1.1.tgz#4d84964b0966b0087ecc334a2ce002d3d9341e26"
+ dependencies:
+ arrify "^1.0.1"
+ micromatch "^2.3.11"
+ object-assign "^4.1.0"
+ read-pkg-up "^1.0.1"
+ require-main-filename "^1.0.1"
+
+text-table@0.2.0, text-table@~0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
+
+throat@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/throat/-/throat-3.2.0.tgz#50cb0670edbc40237b9e347d7e1f88e4620af836"
+
+through@^2.3.6:
+ version "2.3.8"
+ resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+
+thunky@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/thunky/-/thunky-0.1.0.tgz#bf30146824e2b6e67b0f2d7a4ac8beb26908684e"
+
+time-stamp@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-2.0.0.tgz#95c6a44530e15ba8d6f4a3ecb8c3a3fac46da357"
+
+timed-out@^3.0.0:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-3.1.3.tgz#95860bfcc5c76c277f8f8326fd0f5b2e20eba217"
+
+timers-browserify@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.4.tgz#96ca53f4b794a5e7c0e1bd7cc88a372298fa01e6"
+ dependencies:
+ setimmediate "^1.0.4"
+
+tmp@^0.0.33:
+ version "0.0.33"
+ resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
+ dependencies:
+ os-tmpdir "~1.0.2"
+
+tmpl@1.0.x:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1"
+
+to-arraybuffer@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
+
+to-fast-properties@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"
+
+toposort@^1.0.0:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.6.tgz#c31748e55d210effc00fdcdc7d6e68d7d7bb9cec"
+
+tough-cookie@^2.3.2, tough-cookie@~2.3.0:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561"
+ dependencies:
+ punycode "^1.4.1"
+
+tr46@~0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
+
+trim-newlines@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
+
+trim-right@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
+
+tty-browserify@0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
+
+tunnel-agent@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
+ dependencies:
+ safe-buffer "^5.0.1"
+
+tweetnacl@^0.14.3, tweetnacl@~0.14.0:
+ version "0.14.5"
+ resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+
+type-check@~0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
+ dependencies:
+ prelude-ls "~1.1.2"
+
+type-is@~1.6.15:
+ version "1.6.15"
+ resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410"
+ dependencies:
+ media-typer "0.3.0"
+ mime-types "~2.1.15"
+
+typedarray@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+
+ua-parser-js@^0.7.9:
+ version "0.7.17"
+ resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac"
+
+uglify-js@3.2.x, uglify-js@^3.0.13:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.2.2.tgz#870e4b34ed733d179284f9998efd3293f7fd73f6"
+ dependencies:
+ commander "~2.12.1"
+ source-map "~0.6.1"
+
+uglify-js@^2.6, uglify-js@^2.8.29:
+ version "2.8.29"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd"
+ dependencies:
+ source-map "~0.5.1"
+ yargs "~3.10.0"
+ optionalDependencies:
+ uglify-to-browserify "~1.0.0"
+
+uglify-to-browserify@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
+
+uglifyjs-webpack-plugin@^0.4.6:
+ version "0.4.6"
+ resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz#b951f4abb6bd617e66f63eb891498e391763e309"
+ dependencies:
+ source-map "^0.5.6"
+ uglify-js "^2.8.29"
+ webpack-sources "^1.0.1"
+
+uid-number@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
+
+uniq@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff"
+
+uniqid@^4.0.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/uniqid/-/uniqid-4.1.1.tgz#89220ddf6b751ae52b5f72484863528596bb84c1"
+ dependencies:
+ macaddress "^0.2.8"
+
+uniqs@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02"
+
+universalify@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7"
+
+unpipe@1.0.0, unpipe@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
+
+unzip-response@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-1.0.2.tgz#b984f0877fc0a89c2c773cc1ef7b5b232b5b06fe"
+
+update-notifier@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-1.0.3.tgz#8f92c515482bd6831b7c93013e70f87552c7cf5a"
+ dependencies:
+ boxen "^0.6.0"
+ chalk "^1.0.0"
+ configstore "^2.0.0"
+ is-npm "^1.0.0"
+ latest-version "^2.0.0"
+ lazy-req "^1.1.0"
+ semver-diff "^2.0.0"
+ xdg-basedir "^2.0.0"
+
+upper-case@^1.1.1:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598"
+
+urijs@^1.16.1:
+ version "1.19.0"
+ resolved "https://registry.yarnpkg.com/urijs/-/urijs-1.19.0.tgz#d8aa284d0e7469703a6988ad045c4cbfdf08ada0"
+
+url-loader@0.6.2:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-0.6.2.tgz#a007a7109620e9d988d14bce677a1decb9a993f7"
+ dependencies:
+ loader-utils "^1.0.2"
+ mime "^1.4.1"
+ schema-utils "^0.3.0"
+
+url-parse-lax@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73"
+ dependencies:
+ prepend-http "^1.0.1"
+
+url-parse@1.0.x:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.0.5.tgz#0854860422afdcfefeb6c965c662d4800169927b"
+ dependencies:
+ querystringify "0.0.x"
+ requires-port "1.0.x"
+
+url-parse@^1.1.8:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.2.0.tgz#3a19e8aaa6d023ddd27dcc44cb4fc8f7fec23986"
+ dependencies:
+ querystringify "~1.0.0"
+ requires-port "~1.0.0"
+
+url@^0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
+ dependencies:
+ punycode "1.3.2"
+ querystring "0.2.0"
+
+util-deprecate@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+
+util@0.10.3, util@^0.10.3:
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
+ dependencies:
+ inherits "2.0.1"
+
+utila@~0.3:
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/utila/-/utila-0.3.3.tgz#d7e8e7d7e309107092b05f8d9688824d633a4226"
+
+utila@~0.4:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c"
+
+utils-merge@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
+
+uuid@^2.0.1, uuid@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a"
+
+uuid@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04"
+
+validate-npm-package-license@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc"
+ dependencies:
+ spdx-correct "~1.0.0"
+ spdx-expression-parse "~1.0.0"
+
+vary@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
+
+vendors@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.1.tgz#37ad73c8ee417fb3d580e785312307d274847f22"
+
+verror@1.10.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
+ dependencies:
+ assert-plus "^1.0.0"
+ core-util-is "1.0.2"
+ extsprintf "^1.2.0"
+
+vm-browserify@0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73"
+ dependencies:
+ indexof "0.0.1"
+
+walker@~1.0.5:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb"
+ dependencies:
+ makeerror "1.0.x"
+
+watch@~0.10.0:
+ version "0.10.0"
+ resolved "https://registry.yarnpkg.com/watch/-/watch-0.10.0.tgz#77798b2da0f9910d595f1ace5b0c2258521f21dc"
+
+watchpack@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.4.0.tgz#4a1472bcbb952bd0a9bb4036801f954dfb39faac"
+ dependencies:
+ async "^2.1.2"
+ chokidar "^1.7.0"
+ graceful-fs "^4.1.2"
+
+wbuf@^1.1.0, wbuf@^1.7.2:
+ version "1.7.2"
+ resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.2.tgz#d697b99f1f59512df2751be42769c1580b5801fe"
+ dependencies:
+ minimalistic-assert "^1.0.0"
+
+webidl-conversions@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
+
+webidl-conversions@^4.0.0:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
+
+webpack-dev-middleware@^1.11.0:
+ version "1.12.2"
+ resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz#f8fc1120ce3b4fc5680ceecb43d777966b21105e"
+ dependencies:
+ memory-fs "~0.4.1"
+ mime "^1.5.0"
+ path-is-absolute "^1.0.0"
+ range-parser "^1.0.3"
+ time-stamp "^2.0.0"
+
+webpack-dev-server@2.9.4:
+ version "2.9.4"
+ resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-2.9.4.tgz#7883e61759c6a4b33e9b19ec4037bd4ab61428d1"
+ dependencies:
+ ansi-html "0.0.7"
+ array-includes "^3.0.3"
+ bonjour "^3.5.0"
+ chokidar "^1.6.0"
+ compression "^1.5.2"
+ connect-history-api-fallback "^1.3.0"
+ debug "^3.1.0"
+ del "^3.0.0"
+ express "^4.13.3"
+ html-entities "^1.2.0"
+ http-proxy-middleware "~0.17.4"
+ import-local "^0.1.1"
+ internal-ip "1.2.0"
+ ip "^1.1.5"
+ killable "^1.0.0"
+ loglevel "^1.4.1"
+ opn "^5.1.0"
+ portfinder "^1.0.9"
+ selfsigned "^1.9.1"
+ serve-index "^1.7.2"
+ sockjs "0.3.18"
+ sockjs-client "1.1.4"
+ spdy "^3.4.1"
+ strip-ansi "^3.0.1"
+ supports-color "^4.2.1"
+ webpack-dev-middleware "^1.11.0"
+ yargs "^6.6.0"
+
+webpack-manifest-plugin@1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/webpack-manifest-plugin/-/webpack-manifest-plugin-1.3.2.tgz#5ea8ee5756359ddc1d98814324fe43496349a7d4"
+ dependencies:
+ fs-extra "^0.30.0"
+ lodash ">=3.5 <5"
+
+webpack-sources@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.1.0.tgz#a101ebae59d6507354d71d8013950a3a8b7a5a54"
+ dependencies:
+ source-list-map "^2.0.0"
+ source-map "~0.6.1"
+
+webpack@3.8.1:
+ version "3.8.1"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.8.1.tgz#b16968a81100abe61608b0153c9159ef8bb2bd83"
+ dependencies:
+ acorn "^5.0.0"
+ acorn-dynamic-import "^2.0.0"
+ ajv "^5.1.5"
+ ajv-keywords "^2.0.0"
+ async "^2.1.2"
+ enhanced-resolve "^3.4.0"
+ escope "^3.6.0"
+ interpret "^1.0.0"
+ json-loader "^0.5.4"
+ json5 "^0.5.1"
+ loader-runner "^2.3.0"
+ loader-utils "^1.1.0"
+ memory-fs "~0.4.1"
+ mkdirp "~0.5.0"
+ node-libs-browser "^2.0.0"
+ source-map "^0.5.3"
+ supports-color "^4.2.1"
+ tapable "^0.2.7"
+ uglifyjs-webpack-plugin "^0.4.6"
+ watchpack "^1.4.0"
+ webpack-sources "^1.0.1"
+ yargs "^8.0.2"
+
+websocket-driver@>=0.5.1:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz#0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb"
+ dependencies:
+ http-parser-js ">=0.4.0"
+ websocket-extensions ">=0.1.1"
+
+websocket-extensions@>=0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29"
+
+whatwg-encoding@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz#57c235bc8657e914d24e1a397d3c82daee0a6ba3"
+ dependencies:
+ iconv-lite "0.4.19"
+
+whatwg-fetch@2.0.3, whatwg-fetch@>=0.10.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84"
+
+whatwg-url@^4.3.0:
+ version "4.8.0"
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-4.8.0.tgz#d2981aa9148c1e00a41c5a6131166ab4683bbcc0"
+ dependencies:
+ tr46 "~0.0.3"
+ webidl-conversions "^3.0.0"
+
+whet.extend@~0.9.9:
+ version "0.9.9"
+ resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1"
+
+which-module@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f"
+
+which-module@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
+
+which@^1.2.12, which@^1.2.14, which@^1.2.9:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a"
+ dependencies:
+ isexe "^2.0.0"
+
+wide-align@^1.1.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710"
+ dependencies:
+ string-width "^1.0.2"
+
+widest-line@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-1.0.0.tgz#0c09c85c2a94683d0d7eaf8ee097d564bf0e105c"
+ dependencies:
+ string-width "^1.0.1"
+
+window-size@0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
+
+wordwrap@0.0.2, wordwrap@~0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
+
+wordwrap@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
+
+worker-farm@^1.3.1:
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.5.2.tgz#32b312e5dc3d5d45d79ef44acc2587491cd729ae"
+ dependencies:
+ errno "^0.1.4"
+ xtend "^4.0.1"
+
+wrap-ansi@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
+ dependencies:
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+
+write-file-atomic@^1.1.2:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.4.tgz#f807a4f0b1d9e913ae7a48112e6cc3af1991b45f"
+ dependencies:
+ graceful-fs "^4.1.11"
+ imurmurhash "^0.1.4"
+ slide "^1.1.5"
+
+write@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757"
+ dependencies:
+ mkdirp "^0.5.1"
+
+xdg-basedir@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-2.0.0.tgz#edbc903cc385fc04523d966a335504b5504d1bd2"
+ dependencies:
+ os-homedir "^1.0.0"
+
+xml-char-classes@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/xml-char-classes/-/xml-char-classes-1.0.0.tgz#64657848a20ffc5df583a42ad8a277b4512bbc4d"
+
+xml-name-validator@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635"
+
+xtend@^4.0.0, xtend@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
+
+y18n@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
+
+yallist@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
+
+yargs-parser@^4.2.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c"
+ dependencies:
+ camelcase "^3.0.0"
+
+yargs-parser@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a"
+ dependencies:
+ camelcase "^3.0.0"
+
+yargs-parser@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9"
+ dependencies:
+ camelcase "^4.1.0"
+
+yargs@^6.6.0:
+ version "6.6.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208"
+ dependencies:
+ camelcase "^3.0.0"
+ cliui "^3.2.0"
+ decamelize "^1.1.1"
+ get-caller-file "^1.0.1"
+ os-locale "^1.4.0"
+ read-pkg-up "^1.0.1"
+ require-directory "^2.1.1"
+ require-main-filename "^1.0.1"
+ set-blocking "^2.0.0"
+ string-width "^1.0.2"
+ which-module "^1.0.0"
+ y18n "^3.2.1"
+ yargs-parser "^4.2.0"
+
+yargs@^7.0.2:
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8"
+ dependencies:
+ camelcase "^3.0.0"
+ cliui "^3.2.0"
+ decamelize "^1.1.1"
+ get-caller-file "^1.0.1"
+ os-locale "^1.4.0"
+ read-pkg-up "^1.0.1"
+ require-directory "^2.1.1"
+ require-main-filename "^1.0.1"
+ set-blocking "^2.0.0"
+ string-width "^1.0.2"
+ which-module "^1.0.0"
+ y18n "^3.2.1"
+ yargs-parser "^5.0.0"
+
+yargs@^8.0.2:
+ version "8.0.2"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360"
+ dependencies:
+ camelcase "^4.1.0"
+ cliui "^3.2.0"
+ decamelize "^1.1.1"
+ get-caller-file "^1.0.1"
+ os-locale "^2.0.0"
+ read-pkg-up "^2.0.0"
+ require-directory "^2.1.1"
+ require-main-filename "^1.0.1"
+ set-blocking "^2.0.0"
+ string-width "^2.0.0"
+ which-module "^2.0.0"
+ y18n "^3.2.1"
+ yargs-parser "^7.0.0"
+
+yargs@~3.10.0:
+ version "3.10.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
+ dependencies:
+ camelcase "^1.0.2"
+ cliui "^2.1.0"
+ decamelize "^1.0.0"
+ window-size "0.1.0"
diff --git a/testing/talos/talos/tests/devtools/addon/content/pages/custom/inspector/iframe.html b/testing/talos/talos/tests/devtools/addon/content/pages/custom/inspector/iframe.html
new file mode 100644
index 0000000000..894f647089
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/pages/custom/inspector/iframe.html
@@ -0,0 +1,125 @@
+
+<!DOCTYPE html>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ - You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Custom page for the Inspector</title>
+ <style>
+ div {
+ margin-left: 0.5em;
+ }
+ </style>
+</head>
+<body>
+ <script type="text/javascript">
+ // We first create a deep tree with ${deep} nested children
+ let deep = 50;
+ // Then we create ${n} element after the deep tree
+ let n = 50;
+ // Number of attributes set on the repeated elements
+ let attributes = 50;
+
+ // Build the <div> with $attributes data attributes
+ let div = "<div";
+ for (var i = 1; i <= attributes; i++) {
+ div += ` data-a${i}="${i}"`;
+ }
+ div += ">";
+
+ // Build the tree of $deep elements
+ let tree = "";
+ for (i = 1; i <= deep; i++) {
+ tree += new Array(i).join(" ");
+ tree += div + " " + i + "\n";
+ }
+ for (i = deep; i >= 1; i--) {
+ tree += new Array(i).join(" ");
+ tree += "</div>\n";
+ }
+
+ // Build the list of $n elements
+ let repeat = "";
+ for (i = 1; i <= n; i++) {
+ repeat += div + " " + i + " </div>\n";
+ }
+
+ // Prepare CSS rules to add to the document <style>.
+ let CSS_RULES_COUNT = 200;
+ let manyCssRules = "";
+ for (i = 0; i < CSS_RULES_COUNT; i++) {
+ manyCssRules += `
+ .many-css-rules {
+ font-size: ${i}px;
+ margin: 10px;
+ padding: 10px;
+ font-family: Arial;
+ margin: 20px;
+ }`;
+ }
+
+ let CSS_VARIABLES_COUNT = 300;
+ let manyCSSVariablesDeclarations = "";
+ for (i = 0; i < CSS_VARIABLES_COUNT; i++) {
+ manyCSSVariablesDeclarations += `
+ --variable-${i}: ${i};
+ content: var(--variable-${i});
+ `
+ }
+ let manyCSSVariables = `.many-css-variables {
+ ${manyCSSVariablesDeclarations}
+ }`
+
+ let expandManyChildren = new Array(100).join(" <div attr='my-attr'>content</div>\n");
+
+ let maxBalancedDepth = 8;
+ function createBalancedMarkup(level = 0) {
+ let tab = new Array(level + 1).join(" ");
+ if (level < maxBalancedDepth) {
+ let child = createBalancedMarkup(level + 1);
+ return `${tab}<div>
+ ${child}
+ ${child}
+ ${tab}</div>`;
+ } else {
+ return tab + "<div class='leaf'>leaf</div>";
+ }
+ }
+ let expandBalanced = createBalancedMarkup();
+
+ let style = document.createElement("style");
+ style.type = "text/css";
+ style.appendChild(document.createTextNode(manyCssRules));
+ style.appendChild(document.createTextNode(manyCSSVariables));
+ document.head.appendChild(style);
+
+ var tpl = document.createElement('template');
+ tpl.innerHTML =
+ `
+ <div id="initial-node">
+ <!-- <div> elements with ${deep} nested childs, all with ${attributes} attributes -->
+ <!-- The deepest <div> has id="deep"> -->
+ ${tree}
+ <!-- ${n} <div> elements without any children -->
+ ${repeat}
+ <!-- Elements for custom.inspector.manyrules tests -->
+ <div class="no-css-rules"></div>
+ <div class="many-css-rules"></div>
+ <div class="many-css-variables"></div>
+ <div class="expand-many-children">
+ ${expandManyChildren}
+ </div>
+ <div class="expand-balanced">
+ ${expandBalanced}
+ </div>
+ <section class="nesting">
+ <div class="deeply-nested"></div>
+ </section>
+ </div>`;
+ document.body.appendChild(tpl.content);
+ </script>
+
+</body>
+</html>
diff --git a/testing/talos/talos/tests/devtools/addon/content/pages/custom/inspector/index.html b/testing/talos/talos/tests/devtools/addon/content/pages/custom/inspector/index.html
new file mode 100644
index 0000000000..358b79544f
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/pages/custom/inspector/index.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>iframe wrapper for the inspector custom page</title>
+ <style type="text/css">
+ html, body {
+ height: 100%;
+ width: 100%;
+ }
+ iframe {
+ border-style: none;
+ height: 100%;
+ position: absolute;
+ width: 100%;
+ }
+ </style>
+</head>
+<body>
+ <!-- For now we load the iframe in the same site as the damp top frame.
+ We will switch to a different-site URL (eg http://damp.iframe.com) when
+ DevTools work against remote frames. -->
+ <iframe
+ src="http://damp.top.com/tests/devtools/addon/content/pages/custom/inspector/iframe.html"
+ ></iframe>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/devtools/addon/content/pages/custom/netmonitor/iframe.html b/testing/talos/talos/tests/devtools/addon/content/pages/custom/netmonitor/iframe.html
new file mode 100644
index 0000000000..99002cf491
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/pages/custom/netmonitor/iframe.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Custom page for the Netmonitor</title>
+
+ <link rel="stylesheet" type="text/css" href="style.css?iframe" />
+</head>
+<body>
+
+<script type="text/javascript" src="script.js?iframe"></script>
+
+Iframe
+
+</body>
+</html>
diff --git a/testing/talos/talos/tests/devtools/addon/content/pages/custom/netmonitor/index.html b/testing/talos/talos/tests/devtools/addon/content/pages/custom/netmonitor/index.html
new file mode 100644
index 0000000000..fe081eb2af
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/pages/custom/netmonitor/index.html
@@ -0,0 +1,143 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Custom page for the Netmonitor</title>
+
+ <!-- 10 css requests -->
+ <!-- count to keep in sync in nemonitor/custom.js -->
+ <link rel="stylesheet" type="text/css" href="style.css?1" />
+ <link rel="stylesheet" type="text/css" href="style.css?2" />
+ <link rel="stylesheet" type="text/css" href="style.css?3" />
+ <link rel="stylesheet" type="text/css" href="style.css?4" />
+ <link rel="stylesheet" type="text/css" href="style.css?5" />
+ <link rel="stylesheet" type="text/css" href="style.css?6" />
+ <link rel="stylesheet" type="text/css" href="style.css?7" />
+ <link rel="stylesheet" type="text/css" href="style.css?8" />
+ <link rel="stylesheet" type="text/css" href="style.css?9" />
+ <link rel="stylesheet" type="text/css" href="style.css?10" />
+
+ <style>
+ iframe {
+ width: 100px;
+ height: 50px;
+ border: 1px solid black;
+ }
+ span {
+ font-size: 5px;
+ }
+ </style>
+</head>
+<body>
+
+<h1>Performance test page for the network monitor.</h1>
+
+<!-- 10 js requests -->
+<!-- count to keep in sync in nemonitor/custom.js -->
+<script type="text/javascript" src="script.js?1"></script>
+<script type="text/javascript" src="script.js?2"></script>
+<script type="text/javascript" src="script.js?3"></script>
+<script type="text/javascript" src="script.js?4"></script>
+<script type="text/javascript" src="script.js?5"></script>
+<script type="text/javascript" src="script.js?6"></script>
+<script type="text/javascript" src="script.js?7"></script>
+<script type="text/javascript" src="script.js?8"></script>
+<script type="text/javascript" src="script.js?9"></script>
+<script type="text/javascript" src="script.js?10"></script>
+
+<!-- each of these iframe will do 2 requests.
+ one for the html file and one for the JS file.
+ There is also one additional request for the CSS file,
+ but all subsequent iframe will load it from cache and no
+ request will appear in the netmonitor.
+ So in total we have 21 requests related to these iframes. -->
+<!-- count to keep in sync in nemonitor/custom.js -->
+<iframe src="iframe.html?1"></iframe>
+<iframe src="iframe.html?2"></iframe>
+<iframe src="iframe.html?3"></iframe>
+<iframe src="iframe.html?4"></iframe>
+<iframe src="iframe.html?5"></iframe>
+<iframe src="iframe.html?6"></iframe>
+<iframe src="iframe.html?7"></iframe>
+<iframe src="iframe.html?8"></iframe>
+<iframe src="iframe.html?9"></iframe>
+<iframe src="iframe.html?10"></iframe>
+
+<script>
+// These query parameters are set in netmonitor/custom.js and define the various
+// threshold we use to run this test.
+let searchParams = new URLSearchParams(location.search);
+let bigFileRequests = searchParams.get("bigFileRequests");
+let postDataRequests = searchParams.get("postDataRequests");
+let xhrRequests = searchParams.get("xhrRequests");
+
+// Do one XHR against a significant size file
+async function requestBigFile() {
+ await fetch("/tests/video/clips/testsrc.1080p.60fps.mp4?" + Math.round(Math.random() * 10000));
+}
+
+// Do one XHR with significant POST data
+async function requestPostData() {
+ let postDataSize = 500000, postDataFields = 10;
+
+ let postData = [];
+ for (let i = 0; i < postDataFields; i++) {
+ postData.push("a" + i + "=" + i);
+ }
+ // Include one field that fakes a 500k file upload.
+ postData.push("data=" + new Array(postDataSize).join("x"));
+
+ await fetch("script.js?post-data", {
+ method: "POST",
+ headers: {
+ "Content-type": "application/x-www-form-urlencoded",
+ },
+ body: postData.join("&"),
+ });
+}
+
+// Do many XHR against smaller files
+let headersCount = 10, headerDataSize = 10000;
+let headers = new Headers();
+for (let i = 0; i < headersCount; i++) {
+ headers.append("X-Custom-Header-" + i, "header");
+}
+// Set one significant headers, 10K
+headers.append("X-Custom-Header-data", new Array(headerDataSize).join("x"));
+async function doSmallRequest(i) {
+ await fetch("script.js?xhr=" + i, { headers });
+}
+
+// Force some DOM updates to better simulate a single page webapp
+// which is going to create its DOM dynamically.
+// This will help seeing if the page load slow down because
+// of netmonitor listeners.
+let interval = setInterval(function forcePaint() {
+ let div = document.createElement("span");
+ div.textContent = " force paint ";
+ document.body.appendChild(div);
+}, 20);
+
+window.onload = async function() {
+ for (let i = 0; i < bigFileRequests; i++) {
+ await requestBigFile();
+ }
+ for (let i = 0; i < postDataRequests; i++) {
+ await requestPostData();
+ }
+ for (let i = 0; i < xhrRequests; i++) {
+ await doSmallRequest(i);
+ }
+
+ // Tells damp test script when all request are sent
+ window.postMessage("ready", "*");
+ window.isReady = true;
+
+ // Stop forcing reflows once all the request are done
+ clearInterval(interval);
+}
+
+
+</script>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/devtools/addon/content/pages/custom/netmonitor/script.js b/testing/talos/talos/tests/devtools/addon/content/pages/custom/netmonitor/script.js
new file mode 100644
index 0000000000..56be939f3e
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/pages/custom/netmonitor/script.js
@@ -0,0 +1,101 @@
+/**
+ This simulates a JS file with some significant size, to exercice the netmonitor with large payloads.
+ ****************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ *****************************************************************************************************************************************/
diff --git a/testing/talos/talos/tests/devtools/addon/content/pages/custom/netmonitor/style.css b/testing/talos/talos/tests/devtools/addon/content/pages/custom/netmonitor/style.css
new file mode 100644
index 0000000000..5dde4094fb
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/pages/custom/netmonitor/style.css
@@ -0,0 +1,100 @@
+/**
+ This simulates a CSS file with some significant size, to exercice the netmonitor with large payloads.
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ ******************************************************************************************************************************************
+ *****************************************************************************************************************************************/
diff --git a/testing/talos/talos/tests/devtools/addon/content/pages/custom/panels-in-background/index.html b/testing/talos/talos/tests/devtools/addon/content/pages/custom/panels-in-background/index.html
new file mode 100644
index 0000000000..d902cb4001
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/pages/custom/panels-in-background/index.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ - You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Custom page for panels running in background</title>
+</head>
+<body>
+<script type="application/x-javascript">
+ function peformLogs(count) {
+ for (let i = 0; i < count; i++) {
+ console.log("log in background", i);
+ }
+ }
+
+ function performRequests(count) {
+ for (let i = 0; i < count; i++) {
+ let xhr = new XMLHttpRequest();
+ xhr.open("GET", "sjs_simple-test-server.sjs", true);
+ xhr.send(null);
+ }
+ }
+
+ peformLogs(2000);
+ performRequests(600);
+</script>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/devtools/addon/content/pages/custom/panels-in-background/sjs_simple-test-server.sjs b/testing/talos/talos/tests/devtools/addon/content/pages/custom/panels-in-background/sjs_simple-test-server.sjs
new file mode 100644
index 0000000000..55dc7c2d26
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/pages/custom/panels-in-background/sjs_simple-test-server.sjs
@@ -0,0 +1,7 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+function handleRequest(request, response) {
+ response.setHeader("Content-Type", "text/plain; charset=utf-8", false);
+ response.write("Hello world!");
+}
diff --git a/testing/talos/talos/tests/devtools/addon/content/pages/custom/styleeditor/iframe.html b/testing/talos/talos/tests/devtools/addon/content/pages/custom/styleeditor/iframe.html
new file mode 100644
index 0000000000..00ece2959f
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/pages/custom/styleeditor/iframe.html
@@ -0,0 +1,59 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <!-- Load 50 times style.css which contains 3000 minified rules -->
+ <link rel="stylesheet" href="style.css?0" />
+ <link rel="stylesheet" href="style.css?1" />
+ <link rel="stylesheet" href="style.css?2" />
+ <link rel="stylesheet" href="style.css?3" />
+ <link rel="stylesheet" href="style.css?4" />
+ <link rel="stylesheet" href="style.css?5" />
+ <link rel="stylesheet" href="style.css?6" />
+ <link rel="stylesheet" href="style.css?7" />
+ <link rel="stylesheet" href="style.css?8" />
+ <link rel="stylesheet" href="style.css?9" />
+ <link rel="stylesheet" href="style.css?10" />
+ <link rel="stylesheet" href="style.css?11" />
+ <link rel="stylesheet" href="style.css?12" />
+ <link rel="stylesheet" href="style.css?13" />
+ <link rel="stylesheet" href="style.css?14" />
+ <link rel="stylesheet" href="style.css?15" />
+ <link rel="stylesheet" href="style.css?16" />
+ <link rel="stylesheet" href="style.css?17" />
+ <link rel="stylesheet" href="style.css?18" />
+ <link rel="stylesheet" href="style.css?19" />
+ <link rel="stylesheet" href="style.css?20" />
+ <link rel="stylesheet" href="style.css?21" />
+ <link rel="stylesheet" href="style.css?22" />
+ <link rel="stylesheet" href="style.css?23" />
+ <link rel="stylesheet" href="style.css?24" />
+ <link rel="stylesheet" href="style.css?25" />
+ <link rel="stylesheet" href="style.css?26" />
+ <link rel="stylesheet" href="style.css?27" />
+ <link rel="stylesheet" href="style.css?28" />
+ <link rel="stylesheet" href="style.css?29" />
+ <link rel="stylesheet" href="style.css?30" />
+ <link rel="stylesheet" href="style.css?31" />
+ <link rel="stylesheet" href="style.css?32" />
+ <link rel="stylesheet" href="style.css?33" />
+ <link rel="stylesheet" href="style.css?34" />
+ <link rel="stylesheet" href="style.css?35" />
+ <link rel="stylesheet" href="style.css?36" />
+ <link rel="stylesheet" href="style.css?37" />
+ <link rel="stylesheet" href="style.css?38" />
+ <link rel="stylesheet" href="style.css?39" />
+ <link rel="stylesheet" href="style.css?40" />
+ <link rel="stylesheet" href="style.css?41" />
+ <link rel="stylesheet" href="style.css?42" />
+ <link rel="stylesheet" href="style.css?43" />
+ <link rel="stylesheet" href="style.css?44" />
+ <link rel="stylesheet" href="style.css?45" />
+ <link rel="stylesheet" href="style.css?46" />
+ <link rel="stylesheet" href="style.css?47" />
+ <link rel="stylesheet" href="style.css?48" />
+ <link rel="stylesheet" href="style.css?49" />
+ </head>
+ <body>
+ StyleEditor test frame with 50 minified CSS files
+ </body>
+</html>
diff --git a/testing/talos/talos/tests/devtools/addon/content/pages/custom/styleeditor/index.html b/testing/talos/talos/tests/devtools/addon/content/pages/custom/styleeditor/index.html
new file mode 100644
index 0000000000..faeb46dac1
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/pages/custom/styleeditor/index.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>iframe wrapper for the style editor custom page</title>
+ <style type="text/css">
+ html, body {
+ height: 100%;
+ width: 100%;
+ }
+ iframe {
+ border-style: none;
+ height: 100%;
+ position: absolute;
+ width: 100%;
+ }
+ </style>
+</head>
+<body>
+ <!-- For now we load the iframe in the same site as the damp top frame.
+ We will switch to a different-site URL (eg http://damp.iframe.com) when
+ DevTools work against remote frames. -->
+ <iframe
+ src="http://damp.top.com/tests/devtools/addon/content/pages/custom/styleeditor/iframe.html"
+ ></iframe>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/devtools/addon/content/pages/custom/styleeditor/style.css b/testing/talos/talos/tests/devtools/addon/content/pages/custom/styleeditor/style.css
new file mode 100644
index 0000000000..03080f3163
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/pages/custom/styleeditor/style.css
@@ -0,0 +1 @@
+.class0 {display:block} class1 {display:block} class2 {display:block} class3 {display:block} class4 {display:block} class5 {display:block} class6 {display:block} class7 {display:block} class8 {display:block} class9 {display:block} class10 {display:block} class11 {display:block} class12 {display:block} class13 {display:block} class14 {display:block} class15 {display:block} class16 {display:block} class17 {display:block} class18 {display:block} class19 {display:block} class20 {display:block} class21 {display:block} class22 {display:block} class23 {display:block} class24 {display:block} class25 {display:block} class26 {display:block} class27 {display:block} class28 {display:block} class29 {display:block} class30 {display:block} class31 {display:block} class32 {display:block} class33 {display:block} class34 {display:block} class35 {display:block} class36 {display:block} class37 {display:block} class38 {display:block} class39 {display:block} class40 {display:block} class41 {display:block} class42 {display:block} class43 {display:block} class44 {display:block} class45 {display:block} class46 {display:block} class47 {display:block} class48 {display:block} class49 {display:block} class50 {display:block} class51 {display:block} class52 {display:block} class53 {display:block} class54 {display:block} class55 {display:block} class56 {display:block} class57 {display:block} class58 {display:block} class59 {display:block} class60 {display:block} class61 {display:block} class62 {display:block} class63 {display:block} class64 {display:block} class65 {display:block} class66 {display:block} class67 {display:block} class68 {display:block} class69 {display:block} class70 {display:block} class71 {display:block} class72 {display:block} class73 {display:block} class74 {display:block} class75 {display:block} class76 {display:block} class77 {display:block} class78 {display:block} class79 {display:block} class80 {display:block} class81 {display:block} class82 {display:block} class83 {display:block} class84 {display:block} class85 {display:block} class86 {display:block} class87 {display:block} class88 {display:block} class89 {display:block} class90 {display:block} class91 {display:block} class92 {display:block} class93 {display:block} class94 {display:block} class95 {display:block} class96 {display:block} class97 {display:block} class98 {display:block} class99 {display:block} class100 {display:block} class101 {display:block} class102 {display:block} class103 {display:block} class104 {display:block} class105 {display:block} class106 {display:block} class107 {display:block} class108 {display:block} class109 {display:block} class110 {display:block} class111 {display:block} class112 {display:block} class113 {display:block} class114 {display:block} class115 {display:block} class116 {display:block} class117 {display:block} class118 {display:block} class119 {display:block} class120 {display:block} class121 {display:block} class122 {display:block} class123 {display:block} class124 {display:block} class125 {display:block} class126 {display:block} class127 {display:block} class128 {display:block} class129 {display:block} class130 {display:block} class131 {display:block} class132 {display:block} class133 {display:block} class134 {display:block} class135 {display:block} class136 {display:block} class137 {display:block} class138 {display:block} class139 {display:block} class140 {display:block} class141 {display:block} class142 {display:block} class143 {display:block} class144 {display:block} class145 {display:block} class146 {display:block} class147 {display:block} class148 {display:block} class149 {display:block} class150 {display:block} class151 {display:block} class152 {display:block} class153 {display:block} class154 {display:block} class155 {display:block} class156 {display:block} class157 {display:block} class158 {display:block} class159 {display:block} class160 {display:block} class161 {display:block} class162 {display:block} class163 {display:block} class164 {display:block} class165 {display:block} class166 {display:block} class167 {display:block} class168 {display:block} class169 {display:block} class170 {display:block} class171 {display:block} class172 {display:block} class173 {display:block} class174 {display:block} class175 {display:block} class176 {display:block} class177 {display:block} class178 {display:block} class179 {display:block} class180 {display:block} class181 {display:block} class182 {display:block} class183 {display:block} class184 {display:block} class185 {display:block} class186 {display:block} class187 {display:block} class188 {display:block} class189 {display:block} class190 {display:block} class191 {display:block} class192 {display:block} class193 {display:block} class194 {display:block} class195 {display:block} class196 {display:block} class197 {display:block} class198 {display:block} class199 {display:block} class200 {display:block} class201 {display:block} class202 {display:block} class203 {display:block} class204 {display:block} class205 {display:block} class206 {display:block} class207 {display:block} class208 {display:block} class209 {display:block} class210 {display:block} class211 {display:block} class212 {display:block} class213 {display:block} class214 {display:block} class215 {display:block} class216 {display:block} class217 {display:block} class218 {display:block} class219 {display:block} class220 {display:block} class221 {display:block} class222 {display:block} class223 {display:block} class224 {display:block} class225 {display:block} class226 {display:block} class227 {display:block} class228 {display:block} class229 {display:block} class230 {display:block} class231 {display:block} class232 {display:block} class233 {display:block} class234 {display:block} class235 {display:block} class236 {display:block} class237 {display:block} class238 {display:block} class239 {display:block} class240 {display:block} class241 {display:block} class242 {display:block} class243 {display:block} class244 {display:block} class245 {display:block} class246 {display:block} class247 {display:block} class248 {display:block} class249 {display:block} class250 {display:block} class251 {display:block} class252 {display:block} class253 {display:block} class254 {display:block} class255 {display:block} class256 {display:block} class257 {display:block} class258 {display:block} class259 {display:block} class260 {display:block} class261 {display:block} class262 {display:block} class263 {display:block} class264 {display:block} class265 {display:block} class266 {display:block} class267 {display:block} class268 {display:block} class269 {display:block} class270 {display:block} class271 {display:block} class272 {display:block} class273 {display:block} class274 {display:block} class275 {display:block} class276 {display:block} class277 {display:block} class278 {display:block} class279 {display:block} class280 {display:block} class281 {display:block} class282 {display:block} class283 {display:block} class284 {display:block} class285 {display:block} class286 {display:block} class287 {display:block} class288 {display:block} class289 {display:block} class290 {display:block} class291 {display:block} class292 {display:block} class293 {display:block} class294 {display:block} class295 {display:block} class296 {display:block} class297 {display:block} class298 {display:block} class299 {display:block} class300 {display:block} class301 {display:block} class302 {display:block} class303 {display:block} class304 {display:block} class305 {display:block} class306 {display:block} class307 {display:block} class308 {display:block} class309 {display:block} class310 {display:block} class311 {display:block} class312 {display:block} class313 {display:block} class314 {display:block} class315 {display:block} class316 {display:block} class317 {display:block} class318 {display:block} class319 {display:block} class320 {display:block} class321 {display:block} class322 {display:block} class323 {display:block} class324 {display:block} class325 {display:block} class326 {display:block} class327 {display:block} class328 {display:block} class329 {display:block} class330 {display:block} class331 {display:block} class332 {display:block} class333 {display:block} class334 {display:block} class335 {display:block} class336 {display:block} class337 {display:block} class338 {display:block} class339 {display:block} class340 {display:block} class341 {display:block} class342 {display:block} class343 {display:block} class344 {display:block} class345 {display:block} class346 {display:block} class347 {display:block} class348 {display:block} class349 {display:block} class350 {display:block} class351 {display:block} class352 {display:block} class353 {display:block} class354 {display:block} class355 {display:block} class356 {display:block} class357 {display:block} class358 {display:block} class359 {display:block} class360 {display:block} class361 {display:block} class362 {display:block} class363 {display:block} class364 {display:block} class365 {display:block} class366 {display:block} class367 {display:block} class368 {display:block} class369 {display:block} class370 {display:block} class371 {display:block} class372 {display:block} class373 {display:block} class374 {display:block} class375 {display:block} class376 {display:block} class377 {display:block} class378 {display:block} class379 {display:block} class380 {display:block} class381 {display:block} class382 {display:block} class383 {display:block} class384 {display:block} class385 {display:block} class386 {display:block} class387 {display:block} class388 {display:block} class389 {display:block} class390 {display:block} class391 {display:block} class392 {display:block} class393 {display:block} class394 {display:block} class395 {display:block} class396 {display:block} class397 {display:block} class398 {display:block} class399 {display:block} class400 {display:block} class401 {display:block} class402 {display:block} class403 {display:block} class404 {display:block} class405 {display:block} class406 {display:block} class407 {display:block} class408 {display:block} class409 {display:block} class410 {display:block} class411 {display:block} class412 {display:block} class413 {display:block} class414 {display:block} class415 {display:block} class416 {display:block} class417 {display:block} class418 {display:block} class419 {display:block} class420 {display:block} class421 {display:block} class422 {display:block} class423 {display:block} class424 {display:block} class425 {display:block} class426 {display:block} class427 {display:block} class428 {display:block} class429 {display:block} class430 {display:block} class431 {display:block} class432 {display:block} class433 {display:block} class434 {display:block} class435 {display:block} class436 {display:block} class437 {display:block} class438 {display:block} class439 {display:block} class440 {display:block} class441 {display:block} class442 {display:block} class443 {display:block} class444 {display:block} class445 {display:block} class446 {display:block} class447 {display:block} class448 {display:block} class449 {display:block} class450 {display:block} class451 {display:block} class452 {display:block} class453 {display:block} class454 {display:block} class455 {display:block} class456 {display:block} class457 {display:block} class458 {display:block} class459 {display:block} class460 {display:block} class461 {display:block} class462 {display:block} class463 {display:block} class464 {display:block} class465 {display:block} class466 {display:block} class467 {display:block} class468 {display:block} class469 {display:block} class470 {display:block} class471 {display:block} class472 {display:block} class473 {display:block} class474 {display:block} class475 {display:block} class476 {display:block} class477 {display:block} class478 {display:block} class479 {display:block} class480 {display:block} class481 {display:block} class482 {display:block} class483 {display:block} class484 {display:block} class485 {display:block} class486 {display:block} class487 {display:block} class488 {display:block} class489 {display:block} class490 {display:block} class491 {display:block} class492 {display:block} class493 {display:block} class494 {display:block} class495 {display:block} class496 {display:block} class497 {display:block} class498 {display:block} class499 {display:block} class500 {display:block} class501 {display:block} class502 {display:block} class503 {display:block} class504 {display:block} class505 {display:block} class506 {display:block} class507 {display:block} class508 {display:block} class509 {display:block} class510 {display:block} class511 {display:block} class512 {display:block} class513 {display:block} class514 {display:block} class515 {display:block} class516 {display:block} class517 {display:block} class518 {display:block} class519 {display:block} class520 {display:block} class521 {display:block} class522 {display:block} class523 {display:block} class524 {display:block} class525 {display:block} class526 {display:block} class527 {display:block} class528 {display:block} class529 {display:block} class530 {display:block} class531 {display:block} class532 {display:block} class533 {display:block} class534 {display:block} class535 {display:block} class536 {display:block} class537 {display:block} class538 {display:block} class539 {display:block} class540 {display:block} class541 {display:block} class542 {display:block} class543 {display:block} class544 {display:block} class545 {display:block} class546 {display:block} class547 {display:block} class548 {display:block} class549 {display:block} class550 {display:block} class551 {display:block} class552 {display:block} class553 {display:block} class554 {display:block} class555 {display:block} class556 {display:block} class557 {display:block} class558 {display:block} class559 {display:block} class560 {display:block} class561 {display:block} class562 {display:block} class563 {display:block} class564 {display:block} class565 {display:block} class566 {display:block} class567 {display:block} class568 {display:block} class569 {display:block} class570 {display:block} class571 {display:block} class572 {display:block} class573 {display:block} class574 {display:block} class575 {display:block} class576 {display:block} class577 {display:block} class578 {display:block} class579 {display:block} class580 {display:block} class581 {display:block} class582 {display:block} class583 {display:block} class584 {display:block} class585 {display:block} class586 {display:block} class587 {display:block} class588 {display:block} class589 {display:block} class590 {display:block} class591 {display:block} class592 {display:block} class593 {display:block} class594 {display:block} class595 {display:block} class596 {display:block} class597 {display:block} class598 {display:block} class599 {display:block} class600 {display:block} class601 {display:block} class602 {display:block} class603 {display:block} class604 {display:block} class605 {display:block} class606 {display:block} class607 {display:block} class608 {display:block} class609 {display:block} class610 {display:block} class611 {display:block} class612 {display:block} class613 {display:block} class614 {display:block} class615 {display:block} class616 {display:block} class617 {display:block} class618 {display:block} class619 {display:block} class620 {display:block} class621 {display:block} class622 {display:block} class623 {display:block} class624 {display:block} class625 {display:block} class626 {display:block} class627 {display:block} class628 {display:block} class629 {display:block} class630 {display:block} class631 {display:block} class632 {display:block} class633 {display:block} class634 {display:block} class635 {display:block} class636 {display:block} class637 {display:block} class638 {display:block} class639 {display:block} class640 {display:block} class641 {display:block} class642 {display:block} class643 {display:block} class644 {display:block} class645 {display:block} class646 {display:block} class647 {display:block} class648 {display:block} class649 {display:block} class650 {display:block} class651 {display:block} class652 {display:block} class653 {display:block} class654 {display:block} class655 {display:block} class656 {display:block} class657 {display:block} class658 {display:block} class659 {display:block} class660 {display:block} class661 {display:block} class662 {display:block} class663 {display:block} class664 {display:block} class665 {display:block} class666 {display:block} class667 {display:block} class668 {display:block} class669 {display:block} class670 {display:block} class671 {display:block} class672 {display:block} class673 {display:block} class674 {display:block} class675 {display:block} class676 {display:block} class677 {display:block} class678 {display:block} class679 {display:block} class680 {display:block} class681 {display:block} class682 {display:block} class683 {display:block} class684 {display:block} class685 {display:block} class686 {display:block} class687 {display:block} class688 {display:block} class689 {display:block} class690 {display:block} class691 {display:block} class692 {display:block} class693 {display:block} class694 {display:block} class695 {display:block} class696 {display:block} class697 {display:block} class698 {display:block} class699 {display:block} class700 {display:block} class701 {display:block} class702 {display:block} class703 {display:block} class704 {display:block} class705 {display:block} class706 {display:block} class707 {display:block} class708 {display:block} class709 {display:block} class710 {display:block} class711 {display:block} class712 {display:block} class713 {display:block} class714 {display:block} class715 {display:block} class716 {display:block} class717 {display:block} class718 {display:block} class719 {display:block} class720 {display:block} class721 {display:block} class722 {display:block} class723 {display:block} class724 {display:block} class725 {display:block} class726 {display:block} class727 {display:block} class728 {display:block} class729 {display:block} class730 {display:block} class731 {display:block} class732 {display:block} class733 {display:block} class734 {display:block} class735 {display:block} class736 {display:block} class737 {display:block} class738 {display:block} class739 {display:block} class740 {display:block} class741 {display:block} class742 {display:block} class743 {display:block} class744 {display:block} class745 {display:block} class746 {display:block} class747 {display:block} class748 {display:block} class749 {display:block} class750 {display:block} class751 {display:block} class752 {display:block} class753 {display:block} class754 {display:block} class755 {display:block} class756 {display:block} class757 {display:block} class758 {display:block} class759 {display:block} class760 {display:block} class761 {display:block} class762 {display:block} class763 {display:block} class764 {display:block} class765 {display:block} class766 {display:block} class767 {display:block} class768 {display:block} class769 {display:block} class770 {display:block} class771 {display:block} class772 {display:block} class773 {display:block} class774 {display:block} class775 {display:block} class776 {display:block} class777 {display:block} class778 {display:block} class779 {display:block} class780 {display:block} class781 {display:block} class782 {display:block} class783 {display:block} class784 {display:block} class785 {display:block} class786 {display:block} class787 {display:block} class788 {display:block} class789 {display:block} class790 {display:block} class791 {display:block} class792 {display:block} class793 {display:block} class794 {display:block} class795 {display:block} class796 {display:block} class797 {display:block} class798 {display:block} class799 {display:block} class800 {display:block} class801 {display:block} class802 {display:block} class803 {display:block} class804 {display:block} class805 {display:block} class806 {display:block} class807 {display:block} class808 {display:block} class809 {display:block} class810 {display:block} class811 {display:block} class812 {display:block} class813 {display:block} class814 {display:block} class815 {display:block} class816 {display:block} class817 {display:block} class818 {display:block} class819 {display:block} class820 {display:block} class821 {display:block} class822 {display:block} class823 {display:block} class824 {display:block} class825 {display:block} class826 {display:block} class827 {display:block} class828 {display:block} class829 {display:block} class830 {display:block} class831 {display:block} class832 {display:block} class833 {display:block} class834 {display:block} class835 {display:block} class836 {display:block} class837 {display:block} class838 {display:block} class839 {display:block} class840 {display:block} class841 {display:block} class842 {display:block} class843 {display:block} class844 {display:block} class845 {display:block} class846 {display:block} class847 {display:block} class848 {display:block} class849 {display:block} class850 {display:block} class851 {display:block} class852 {display:block} class853 {display:block} class854 {display:block} class855 {display:block} class856 {display:block} class857 {display:block} class858 {display:block} class859 {display:block} class860 {display:block} class861 {display:block} class862 {display:block} class863 {display:block} class864 {display:block} class865 {display:block} class866 {display:block} class867 {display:block} class868 {display:block} class869 {display:block} class870 {display:block} class871 {display:block} class872 {display:block} class873 {display:block} class874 {display:block} class875 {display:block} class876 {display:block} class877 {display:block} class878 {display:block} class879 {display:block} class880 {display:block} class881 {display:block} class882 {display:block} class883 {display:block} class884 {display:block} class885 {display:block} class886 {display:block} class887 {display:block} class888 {display:block} class889 {display:block} class890 {display:block} class891 {display:block} class892 {display:block} class893 {display:block} class894 {display:block} class895 {display:block} class896 {display:block} class897 {display:block} class898 {display:block} class899 {display:block} class900 {display:block} class901 {display:block} class902 {display:block} class903 {display:block} class904 {display:block} class905 {display:block} class906 {display:block} class907 {display:block} class908 {display:block} class909 {display:block} class910 {display:block} class911 {display:block} class912 {display:block} class913 {display:block} class914 {display:block} class915 {display:block} class916 {display:block} class917 {display:block} class918 {display:block} class919 {display:block} class920 {display:block} class921 {display:block} class922 {display:block} class923 {display:block} class924 {display:block} class925 {display:block} class926 {display:block} class927 {display:block} class928 {display:block} class929 {display:block} class930 {display:block} class931 {display:block} class932 {display:block} class933 {display:block} class934 {display:block} class935 {display:block} class936 {display:block} class937 {display:block} class938 {display:block} class939 {display:block} class940 {display:block} class941 {display:block} class942 {display:block} class943 {display:block} class944 {display:block} class945 {display:block} class946 {display:block} class947 {display:block} class948 {display:block} class949 {display:block} class950 {display:block} class951 {display:block} class952 {display:block} class953 {display:block} class954 {display:block} class955 {display:block} class956 {display:block} class957 {display:block} class958 {display:block} class959 {display:block} class960 {display:block} class961 {display:block} class962 {display:block} class963 {display:block} class964 {display:block} class965 {display:block} class966 {display:block} class967 {display:block} class968 {display:block} class969 {display:block} class970 {display:block} class971 {display:block} class972 {display:block} class973 {display:block} class974 {display:block} class975 {display:block} class976 {display:block} class977 {display:block} class978 {display:block} class979 {display:block} class980 {display:block} class981 {display:block} class982 {display:block} class983 {display:block} class984 {display:block} class985 {display:block} class986 {display:block} class987 {display:block} class988 {display:block} class989 {display:block} class990 {display:block} class991 {display:block} class992 {display:block} class993 {display:block} class994 {display:block} class995 {display:block} class996 {display:block} class997 {display:block} class998 {display:block} class999 {display:block} class1000 {display:block} class1001 {display:block} class1002 {display:block} class1003 {display:block} class1004 {display:block} class1005 {display:block} class1006 {display:block} class1007 {display:block} class1008 {display:block} class1009 {display:block} class1010 {display:block} class1011 {display:block} class1012 {display:block} class1013 {display:block} class1014 {display:block} class1015 {display:block} class1016 {display:block} class1017 {display:block} class1018 {display:block} class1019 {display:block} class1020 {display:block} class1021 {display:block} class1022 {display:block} class1023 {display:block} class1024 {display:block} class1025 {display:block} class1026 {display:block} class1027 {display:block} class1028 {display:block} class1029 {display:block} class1030 {display:block} class1031 {display:block} class1032 {display:block} class1033 {display:block} class1034 {display:block} class1035 {display:block} class1036 {display:block} class1037 {display:block} class1038 {display:block} class1039 {display:block} class1040 {display:block} class1041 {display:block} class1042 {display:block} class1043 {display:block} class1044 {display:block} class1045 {display:block} class1046 {display:block} class1047 {display:block} class1048 {display:block} class1049 {display:block} class1050 {display:block} class1051 {display:block} class1052 {display:block} class1053 {display:block} class1054 {display:block} class1055 {display:block} class1056 {display:block} class1057 {display:block} class1058 {display:block} class1059 {display:block} class1060 {display:block} class1061 {display:block} class1062 {display:block} class1063 {display:block} class1064 {display:block} class1065 {display:block} class1066 {display:block} class1067 {display:block} class1068 {display:block} class1069 {display:block} class1070 {display:block} class1071 {display:block} class1072 {display:block} class1073 {display:block} class1074 {display:block} class1075 {display:block} class1076 {display:block} class1077 {display:block} class1078 {display:block} class1079 {display:block} class1080 {display:block} class1081 {display:block} class1082 {display:block} class1083 {display:block} class1084 {display:block} class1085 {display:block} class1086 {display:block} class1087 {display:block} class1088 {display:block} class1089 {display:block} class1090 {display:block} class1091 {display:block} class1092 {display:block} class1093 {display:block} class1094 {display:block} class1095 {display:block} class1096 {display:block} class1097 {display:block} class1098 {display:block} class1099 {display:block} class1100 {display:block} class1101 {display:block} class1102 {display:block} class1103 {display:block} class1104 {display:block} class1105 {display:block} class1106 {display:block} class1107 {display:block} class1108 {display:block} class1109 {display:block} class1110 {display:block} class1111 {display:block} class1112 {display:block} class1113 {display:block} class1114 {display:block} class1115 {display:block} class1116 {display:block} class1117 {display:block} class1118 {display:block} class1119 {display:block} class1120 {display:block} class1121 {display:block} class1122 {display:block} class1123 {display:block} class1124 {display:block} class1125 {display:block} class1126 {display:block} class1127 {display:block} class1128 {display:block} class1129 {display:block} class1130 {display:block} class1131 {display:block} class1132 {display:block} class1133 {display:block} class1134 {display:block} class1135 {display:block} class1136 {display:block} class1137 {display:block} class1138 {display:block} class1139 {display:block} class1140 {display:block} class1141 {display:block} class1142 {display:block} class1143 {display:block} class1144 {display:block} class1145 {display:block} class1146 {display:block} class1147 {display:block} class1148 {display:block} class1149 {display:block} class1150 {display:block} class1151 {display:block} class1152 {display:block} class1153 {display:block} class1154 {display:block} class1155 {display:block} class1156 {display:block} class1157 {display:block} class1158 {display:block} class1159 {display:block} class1160 {display:block} class1161 {display:block} class1162 {display:block} class1163 {display:block} class1164 {display:block} class1165 {display:block} class1166 {display:block} class1167 {display:block} class1168 {display:block} class1169 {display:block} class1170 {display:block} class1171 {display:block} class1172 {display:block} class1173 {display:block} class1174 {display:block} class1175 {display:block} class1176 {display:block} class1177 {display:block} class1178 {display:block} class1179 {display:block} class1180 {display:block} class1181 {display:block} class1182 {display:block} class1183 {display:block} class1184 {display:block} class1185 {display:block} class1186 {display:block} class1187 {display:block} class1188 {display:block} class1189 {display:block} class1190 {display:block} class1191 {display:block} class1192 {display:block} class1193 {display:block} class1194 {display:block} class1195 {display:block} class1196 {display:block} class1197 {display:block} class1198 {display:block} class1199 {display:block} class1200 {display:block} class1201 {display:block} class1202 {display:block} class1203 {display:block} class1204 {display:block} class1205 {display:block} class1206 {display:block} class1207 {display:block} class1208 {display:block} class1209 {display:block} class1210 {display:block} class1211 {display:block} class1212 {display:block} class1213 {display:block} class1214 {display:block} class1215 {display:block} class1216 {display:block} class1217 {display:block} class1218 {display:block} class1219 {display:block} class1220 {display:block} class1221 {display:block} class1222 {display:block} class1223 {display:block} class1224 {display:block} class1225 {display:block} class1226 {display:block} class1227 {display:block} class1228 {display:block} class1229 {display:block} class1230 {display:block} class1231 {display:block} class1232 {display:block} class1233 {display:block} class1234 {display:block} class1235 {display:block} class1236 {display:block} class1237 {display:block} class1238 {display:block} class1239 {display:block} class1240 {display:block} class1241 {display:block} class1242 {display:block} class1243 {display:block} class1244 {display:block} class1245 {display:block} class1246 {display:block} class1247 {display:block} class1248 {display:block} class1249 {display:block} class1250 {display:block} class1251 {display:block} class1252 {display:block} class1253 {display:block} class1254 {display:block} class1255 {display:block} class1256 {display:block} class1257 {display:block} class1258 {display:block} class1259 {display:block} class1260 {display:block} class1261 {display:block} class1262 {display:block} class1263 {display:block} class1264 {display:block} class1265 {display:block} class1266 {display:block} class1267 {display:block} class1268 {display:block} class1269 {display:block} class1270 {display:block} class1271 {display:block} class1272 {display:block} class1273 {display:block} class1274 {display:block} class1275 {display:block} class1276 {display:block} class1277 {display:block} class1278 {display:block} class1279 {display:block} class1280 {display:block} class1281 {display:block} class1282 {display:block} class1283 {display:block} class1284 {display:block} class1285 {display:block} class1286 {display:block} class1287 {display:block} class1288 {display:block} class1289 {display:block} class1290 {display:block} class1291 {display:block} class1292 {display:block} class1293 {display:block} class1294 {display:block} class1295 {display:block} class1296 {display:block} class1297 {display:block} class1298 {display:block} class1299 {display:block} class1300 {display:block} class1301 {display:block} class1302 {display:block} class1303 {display:block} class1304 {display:block} class1305 {display:block} class1306 {display:block} class1307 {display:block} class1308 {display:block} class1309 {display:block} class1310 {display:block} class1311 {display:block} class1312 {display:block} class1313 {display:block} class1314 {display:block} class1315 {display:block} class1316 {display:block} class1317 {display:block} class1318 {display:block} class1319 {display:block} class1320 {display:block} class1321 {display:block} class1322 {display:block} class1323 {display:block} class1324 {display:block} class1325 {display:block} class1326 {display:block} class1327 {display:block} class1328 {display:block} class1329 {display:block} class1330 {display:block} class1331 {display:block} class1332 {display:block} class1333 {display:block} class1334 {display:block} class1335 {display:block} class1336 {display:block} class1337 {display:block} class1338 {display:block} class1339 {display:block} class1340 {display:block} class1341 {display:block} class1342 {display:block} class1343 {display:block} class1344 {display:block} class1345 {display:block} class1346 {display:block} class1347 {display:block} class1348 {display:block} class1349 {display:block} class1350 {display:block} class1351 {display:block} class1352 {display:block} class1353 {display:block} class1354 {display:block} class1355 {display:block} class1356 {display:block} class1357 {display:block} class1358 {display:block} class1359 {display:block} class1360 {display:block} class1361 {display:block} class1362 {display:block} class1363 {display:block} class1364 {display:block} class1365 {display:block} class1366 {display:block} class1367 {display:block} class1368 {display:block} class1369 {display:block} class1370 {display:block} class1371 {display:block} class1372 {display:block} class1373 {display:block} class1374 {display:block} class1375 {display:block} class1376 {display:block} class1377 {display:block} class1378 {display:block} class1379 {display:block} class1380 {display:block} class1381 {display:block} class1382 {display:block} class1383 {display:block} class1384 {display:block} class1385 {display:block} class1386 {display:block} class1387 {display:block} class1388 {display:block} class1389 {display:block} class1390 {display:block} class1391 {display:block} class1392 {display:block} class1393 {display:block} class1394 {display:block} class1395 {display:block} class1396 {display:block} class1397 {display:block} class1398 {display:block} class1399 {display:block} class1400 {display:block} class1401 {display:block} class1402 {display:block} class1403 {display:block} class1404 {display:block} class1405 {display:block} class1406 {display:block} class1407 {display:block} class1408 {display:block} class1409 {display:block} class1410 {display:block} class1411 {display:block} class1412 {display:block} class1413 {display:block} class1414 {display:block} class1415 {display:block} class1416 {display:block} class1417 {display:block} class1418 {display:block} class1419 {display:block} class1420 {display:block} class1421 {display:block} class1422 {display:block} class1423 {display:block} class1424 {display:block} class1425 {display:block} class1426 {display:block} class1427 {display:block} class1428 {display:block} class1429 {display:block} class1430 {display:block} class1431 {display:block} class1432 {display:block} class1433 {display:block} class1434 {display:block} class1435 {display:block} class1436 {display:block} class1437 {display:block} class1438 {display:block} class1439 {display:block} class1440 {display:block} class1441 {display:block} class1442 {display:block} class1443 {display:block} class1444 {display:block} class1445 {display:block} class1446 {display:block} class1447 {display:block} class1448 {display:block} class1449 {display:block} class1450 {display:block} class1451 {display:block} class1452 {display:block} class1453 {display:block} class1454 {display:block} class1455 {display:block} class1456 {display:block} class1457 {display:block} class1458 {display:block} class1459 {display:block} class1460 {display:block} class1461 {display:block} class1462 {display:block} class1463 {display:block} class1464 {display:block} class1465 {display:block} class1466 {display:block} class1467 {display:block} class1468 {display:block} class1469 {display:block} class1470 {display:block} class1471 {display:block} class1472 {display:block} class1473 {display:block} class1474 {display:block} class1475 {display:block} class1476 {display:block} class1477 {display:block} class1478 {display:block} class1479 {display:block} class1480 {display:block} class1481 {display:block} class1482 {display:block} class1483 {display:block} class1484 {display:block} class1485 {display:block} class1486 {display:block} class1487 {display:block} class1488 {display:block} class1489 {display:block} class1490 {display:block} class1491 {display:block} class1492 {display:block} class1493 {display:block} class1494 {display:block} class1495 {display:block} class1496 {display:block} class1497 {display:block} class1498 {display:block} class1499 {display:block} class1500 {display:block} class1501 {display:block} class1502 {display:block} class1503 {display:block} class1504 {display:block} class1505 {display:block} class1506 {display:block} class1507 {display:block} class1508 {display:block} class1509 {display:block} class1510 {display:block} class1511 {display:block} class1512 {display:block} class1513 {display:block} class1514 {display:block} class1515 {display:block} class1516 {display:block} class1517 {display:block} class1518 {display:block} class1519 {display:block} class1520 {display:block} class1521 {display:block} class1522 {display:block} class1523 {display:block} class1524 {display:block} class1525 {display:block} class1526 {display:block} class1527 {display:block} class1528 {display:block} class1529 {display:block} class1530 {display:block} class1531 {display:block} class1532 {display:block} class1533 {display:block} class1534 {display:block} class1535 {display:block} class1536 {display:block} class1537 {display:block} class1538 {display:block} class1539 {display:block} class1540 {display:block} class1541 {display:block} class1542 {display:block} class1543 {display:block} class1544 {display:block} class1545 {display:block} class1546 {display:block} class1547 {display:block} class1548 {display:block} class1549 {display:block} class1550 {display:block} class1551 {display:block} class1552 {display:block} class1553 {display:block} class1554 {display:block} class1555 {display:block} class1556 {display:block} class1557 {display:block} class1558 {display:block} class1559 {display:block} class1560 {display:block} class1561 {display:block} class1562 {display:block} class1563 {display:block} class1564 {display:block} class1565 {display:block} class1566 {display:block} class1567 {display:block} class1568 {display:block} class1569 {display:block} class1570 {display:block} class1571 {display:block} class1572 {display:block} class1573 {display:block} class1574 {display:block} class1575 {display:block} class1576 {display:block} class1577 {display:block} class1578 {display:block} class1579 {display:block} class1580 {display:block} class1581 {display:block} class1582 {display:block} class1583 {display:block} class1584 {display:block} class1585 {display:block} class1586 {display:block} class1587 {display:block} class1588 {display:block} class1589 {display:block} class1590 {display:block} class1591 {display:block} class1592 {display:block} class1593 {display:block} class1594 {display:block} class1595 {display:block} class1596 {display:block} class1597 {display:block} class1598 {display:block} class1599 {display:block} class1600 {display:block} class1601 {display:block} class1602 {display:block} class1603 {display:block} class1604 {display:block} class1605 {display:block} class1606 {display:block} class1607 {display:block} class1608 {display:block} class1609 {display:block} class1610 {display:block} class1611 {display:block} class1612 {display:block} class1613 {display:block} class1614 {display:block} class1615 {display:block} class1616 {display:block} class1617 {display:block} class1618 {display:block} class1619 {display:block} class1620 {display:block} class1621 {display:block} class1622 {display:block} class1623 {display:block} class1624 {display:block} class1625 {display:block} class1626 {display:block} class1627 {display:block} class1628 {display:block} class1629 {display:block} class1630 {display:block} class1631 {display:block} class1632 {display:block} class1633 {display:block} class1634 {display:block} class1635 {display:block} class1636 {display:block} class1637 {display:block} class1638 {display:block} class1639 {display:block} class1640 {display:block} class1641 {display:block} class1642 {display:block} class1643 {display:block} class1644 {display:block} class1645 {display:block} class1646 {display:block} class1647 {display:block} class1648 {display:block} class1649 {display:block} class1650 {display:block} class1651 {display:block} class1652 {display:block} class1653 {display:block} class1654 {display:block} class1655 {display:block} class1656 {display:block} class1657 {display:block} class1658 {display:block} class1659 {display:block} class1660 {display:block} class1661 {display:block} class1662 {display:block} class1663 {display:block} class1664 {display:block} class1665 {display:block} class1666 {display:block} class1667 {display:block} class1668 {display:block} class1669 {display:block} class1670 {display:block} class1671 {display:block} class1672 {display:block} class1673 {display:block} class1674 {display:block} class1675 {display:block} class1676 {display:block} class1677 {display:block} class1678 {display:block} class1679 {display:block} class1680 {display:block} class1681 {display:block} class1682 {display:block} class1683 {display:block} class1684 {display:block} class1685 {display:block} class1686 {display:block} class1687 {display:block} class1688 {display:block} class1689 {display:block} class1690 {display:block} class1691 {display:block} class1692 {display:block} class1693 {display:block} class1694 {display:block} class1695 {display:block} class1696 {display:block} class1697 {display:block} class1698 {display:block} class1699 {display:block} class1700 {display:block} class1701 {display:block} class1702 {display:block} class1703 {display:block} class1704 {display:block} class1705 {display:block} class1706 {display:block} class1707 {display:block} class1708 {display:block} class1709 {display:block} class1710 {display:block} class1711 {display:block} class1712 {display:block} class1713 {display:block} class1714 {display:block} class1715 {display:block} class1716 {display:block} class1717 {display:block} class1718 {display:block} class1719 {display:block} class1720 {display:block} class1721 {display:block} class1722 {display:block} class1723 {display:block} class1724 {display:block} class1725 {display:block} class1726 {display:block} class1727 {display:block} class1728 {display:block} class1729 {display:block} class1730 {display:block} class1731 {display:block} class1732 {display:block} class1733 {display:block} class1734 {display:block} class1735 {display:block} class1736 {display:block} class1737 {display:block} class1738 {display:block} class1739 {display:block} class1740 {display:block} class1741 {display:block} class1742 {display:block} class1743 {display:block} class1744 {display:block} class1745 {display:block} class1746 {display:block} class1747 {display:block} class1748 {display:block} class1749 {display:block} class1750 {display:block} class1751 {display:block} class1752 {display:block} class1753 {display:block} class1754 {display:block} class1755 {display:block} class1756 {display:block} class1757 {display:block} class1758 {display:block} class1759 {display:block} class1760 {display:block} class1761 {display:block} class1762 {display:block} class1763 {display:block} class1764 {display:block} class1765 {display:block} class1766 {display:block} class1767 {display:block} class1768 {display:block} class1769 {display:block} class1770 {display:block} class1771 {display:block} class1772 {display:block} class1773 {display:block} class1774 {display:block} class1775 {display:block} class1776 {display:block} class1777 {display:block} class1778 {display:block} class1779 {display:block} class1780 {display:block} class1781 {display:block} class1782 {display:block} class1783 {display:block} class1784 {display:block} class1785 {display:block} class1786 {display:block} class1787 {display:block} class1788 {display:block} class1789 {display:block} class1790 {display:block} class1791 {display:block} class1792 {display:block} class1793 {display:block} class1794 {display:block} class1795 {display:block} class1796 {display:block} class1797 {display:block} class1798 {display:block} class1799 {display:block} class1800 {display:block} class1801 {display:block} class1802 {display:block} class1803 {display:block} class1804 {display:block} class1805 {display:block} class1806 {display:block} class1807 {display:block} class1808 {display:block} class1809 {display:block} class1810 {display:block} class1811 {display:block} class1812 {display:block} class1813 {display:block} class1814 {display:block} class1815 {display:block} class1816 {display:block} class1817 {display:block} class1818 {display:block} class1819 {display:block} class1820 {display:block} class1821 {display:block} class1822 {display:block} class1823 {display:block} class1824 {display:block} class1825 {display:block} class1826 {display:block} class1827 {display:block} class1828 {display:block} class1829 {display:block} class1830 {display:block} class1831 {display:block} class1832 {display:block} class1833 {display:block} class1834 {display:block} class1835 {display:block} class1836 {display:block} class1837 {display:block} class1838 {display:block} class1839 {display:block} class1840 {display:block} class1841 {display:block} class1842 {display:block} class1843 {display:block} class1844 {display:block} class1845 {display:block} class1846 {display:block} class1847 {display:block} class1848 {display:block} class1849 {display:block} class1850 {display:block} class1851 {display:block} class1852 {display:block} class1853 {display:block} class1854 {display:block} class1855 {display:block} class1856 {display:block} class1857 {display:block} class1858 {display:block} class1859 {display:block} class1860 {display:block} class1861 {display:block} class1862 {display:block} class1863 {display:block} class1864 {display:block} class1865 {display:block} class1866 {display:block} class1867 {display:block} class1868 {display:block} class1869 {display:block} class1870 {display:block} class1871 {display:block} class1872 {display:block} class1873 {display:block} class1874 {display:block} class1875 {display:block} class1876 {display:block} class1877 {display:block} class1878 {display:block} class1879 {display:block} class1880 {display:block} class1881 {display:block} class1882 {display:block} class1883 {display:block} class1884 {display:block} class1885 {display:block} class1886 {display:block} class1887 {display:block} class1888 {display:block} class1889 {display:block} class1890 {display:block} class1891 {display:block} class1892 {display:block} class1893 {display:block} class1894 {display:block} class1895 {display:block} class1896 {display:block} class1897 {display:block} class1898 {display:block} class1899 {display:block} class1900 {display:block} class1901 {display:block} class1902 {display:block} class1903 {display:block} class1904 {display:block} class1905 {display:block} class1906 {display:block} class1907 {display:block} class1908 {display:block} class1909 {display:block} class1910 {display:block} class1911 {display:block} class1912 {display:block} class1913 {display:block} class1914 {display:block} class1915 {display:block} class1916 {display:block} class1917 {display:block} class1918 {display:block} class1919 {display:block} class1920 {display:block} class1921 {display:block} class1922 {display:block} class1923 {display:block} class1924 {display:block} class1925 {display:block} class1926 {display:block} class1927 {display:block} class1928 {display:block} class1929 {display:block} class1930 {display:block} class1931 {display:block} class1932 {display:block} class1933 {display:block} class1934 {display:block} class1935 {display:block} class1936 {display:block} class1937 {display:block} class1938 {display:block} class1939 {display:block} class1940 {display:block} class1941 {display:block} class1942 {display:block} class1943 {display:block} class1944 {display:block} class1945 {display:block} class1946 {display:block} class1947 {display:block} class1948 {display:block} class1949 {display:block} class1950 {display:block} class1951 {display:block} class1952 {display:block} class1953 {display:block} class1954 {display:block} class1955 {display:block} class1956 {display:block} class1957 {display:block} class1958 {display:block} class1959 {display:block} class1960 {display:block} class1961 {display:block} class1962 {display:block} class1963 {display:block} class1964 {display:block} class1965 {display:block} class1966 {display:block} class1967 {display:block} class1968 {display:block} class1969 {display:block} class1970 {display:block} class1971 {display:block} class1972 {display:block} class1973 {display:block} class1974 {display:block} class1975 {display:block} class1976 {display:block} class1977 {display:block} class1978 {display:block} class1979 {display:block} class1980 {display:block} class1981 {display:block} class1982 {display:block} class1983 {display:block} class1984 {display:block} class1985 {display:block} class1986 {display:block} class1987 {display:block} class1988 {display:block} class1989 {display:block} class1990 {display:block} class1991 {display:block} class1992 {display:block} class1993 {display:block} class1994 {display:block} class1995 {display:block} class1996 {display:block} class1997 {display:block} class1998 {display:block} class1999 {display:block} class2000 {display:block} class2001 {display:block} class2002 {display:block} class2003 {display:block} class2004 {display:block} class2005 {display:block} class2006 {display:block} class2007 {display:block} class2008 {display:block} class2009 {display:block} class2010 {display:block} class2011 {display:block} class2012 {display:block} class2013 {display:block} class2014 {display:block} class2015 {display:block} class2016 {display:block} class2017 {display:block} class2018 {display:block} class2019 {display:block} class2020 {display:block} class2021 {display:block} class2022 {display:block} class2023 {display:block} class2024 {display:block} class2025 {display:block} class2026 {display:block} class2027 {display:block} class2028 {display:block} class2029 {display:block} class2030 {display:block} class2031 {display:block} class2032 {display:block} class2033 {display:block} class2034 {display:block} class2035 {display:block} class2036 {display:block} class2037 {display:block} class2038 {display:block} class2039 {display:block} class2040 {display:block} class2041 {display:block} class2042 {display:block} class2043 {display:block} class2044 {display:block} class2045 {display:block} class2046 {display:block} class2047 {display:block} class2048 {display:block} class2049 {display:block} class2050 {display:block} class2051 {display:block} class2052 {display:block} class2053 {display:block} class2054 {display:block} class2055 {display:block} class2056 {display:block} class2057 {display:block} class2058 {display:block} class2059 {display:block} class2060 {display:block} class2061 {display:block} class2062 {display:block} class2063 {display:block} class2064 {display:block} class2065 {display:block} class2066 {display:block} class2067 {display:block} class2068 {display:block} class2069 {display:block} class2070 {display:block} class2071 {display:block} class2072 {display:block} class2073 {display:block} class2074 {display:block} class2075 {display:block} class2076 {display:block} class2077 {display:block} class2078 {display:block} class2079 {display:block} class2080 {display:block} class2081 {display:block} class2082 {display:block} class2083 {display:block} class2084 {display:block} class2085 {display:block} class2086 {display:block} class2087 {display:block} class2088 {display:block} class2089 {display:block} class2090 {display:block} class2091 {display:block} class2092 {display:block} class2093 {display:block} class2094 {display:block} class2095 {display:block} class2096 {display:block} class2097 {display:block} class2098 {display:block} class2099 {display:block} class2100 {display:block} class2101 {display:block} class2102 {display:block} class2103 {display:block} class2104 {display:block} class2105 {display:block} class2106 {display:block} class2107 {display:block} class2108 {display:block} class2109 {display:block} class2110 {display:block} class2111 {display:block} class2112 {display:block} class2113 {display:block} class2114 {display:block} class2115 {display:block} class2116 {display:block} class2117 {display:block} class2118 {display:block} class2119 {display:block} class2120 {display:block} class2121 {display:block} class2122 {display:block} class2123 {display:block} class2124 {display:block} class2125 {display:block} class2126 {display:block} class2127 {display:block} class2128 {display:block} class2129 {display:block} class2130 {display:block} class2131 {display:block} class2132 {display:block} class2133 {display:block} class2134 {display:block} class2135 {display:block} class2136 {display:block} class2137 {display:block} class2138 {display:block} class2139 {display:block} class2140 {display:block} class2141 {display:block} class2142 {display:block} class2143 {display:block} class2144 {display:block} class2145 {display:block} class2146 {display:block} class2147 {display:block} class2148 {display:block} class2149 {display:block} class2150 {display:block} class2151 {display:block} class2152 {display:block} class2153 {display:block} class2154 {display:block} class2155 {display:block} class2156 {display:block} class2157 {display:block} class2158 {display:block} class2159 {display:block} class2160 {display:block} class2161 {display:block} class2162 {display:block} class2163 {display:block} class2164 {display:block} class2165 {display:block} class2166 {display:block} class2167 {display:block} class2168 {display:block} class2169 {display:block} class2170 {display:block} class2171 {display:block} class2172 {display:block} class2173 {display:block} class2174 {display:block} class2175 {display:block} class2176 {display:block} class2177 {display:block} class2178 {display:block} class2179 {display:block} class2180 {display:block} class2181 {display:block} class2182 {display:block} class2183 {display:block} class2184 {display:block} class2185 {display:block} class2186 {display:block} class2187 {display:block} class2188 {display:block} class2189 {display:block} class2190 {display:block} class2191 {display:block} class2192 {display:block} class2193 {display:block} class2194 {display:block} class2195 {display:block} class2196 {display:block} class2197 {display:block} class2198 {display:block} class2199 {display:block} class2200 {display:block} class2201 {display:block} class2202 {display:block} class2203 {display:block} class2204 {display:block} class2205 {display:block} class2206 {display:block} class2207 {display:block} class2208 {display:block} class2209 {display:block} class2210 {display:block} class2211 {display:block} class2212 {display:block} class2213 {display:block} class2214 {display:block} class2215 {display:block} class2216 {display:block} class2217 {display:block} class2218 {display:block} class2219 {display:block} class2220 {display:block} class2221 {display:block} class2222 {display:block} class2223 {display:block} class2224 {display:block} class2225 {display:block} class2226 {display:block} class2227 {display:block} class2228 {display:block} class2229 {display:block} class2230 {display:block} class2231 {display:block} class2232 {display:block} class2233 {display:block} class2234 {display:block} class2235 {display:block} class2236 {display:block} class2237 {display:block} class2238 {display:block} class2239 {display:block} class2240 {display:block} class2241 {display:block} class2242 {display:block} class2243 {display:block} class2244 {display:block} class2245 {display:block} class2246 {display:block} class2247 {display:block} class2248 {display:block} class2249 {display:block} class2250 {display:block} class2251 {display:block} class2252 {display:block} class2253 {display:block} class2254 {display:block} class2255 {display:block} class2256 {display:block} class2257 {display:block} class2258 {display:block} class2259 {display:block} class2260 {display:block} class2261 {display:block} class2262 {display:block} class2263 {display:block} class2264 {display:block} class2265 {display:block} class2266 {display:block} class2267 {display:block} class2268 {display:block} class2269 {display:block} class2270 {display:block} class2271 {display:block} class2272 {display:block} class2273 {display:block} class2274 {display:block} class2275 {display:block} class2276 {display:block} class2277 {display:block} class2278 {display:block} class2279 {display:block} class2280 {display:block} class2281 {display:block} class2282 {display:block} class2283 {display:block} class2284 {display:block} class2285 {display:block} class2286 {display:block} class2287 {display:block} class2288 {display:block} class2289 {display:block} class2290 {display:block} class2291 {display:block} class2292 {display:block} class2293 {display:block} class2294 {display:block} class2295 {display:block} class2296 {display:block} class2297 {display:block} class2298 {display:block} class2299 {display:block} class2300 {display:block} class2301 {display:block} class2302 {display:block} class2303 {display:block} class2304 {display:block} class2305 {display:block} class2306 {display:block} class2307 {display:block} class2308 {display:block} class2309 {display:block} class2310 {display:block} class2311 {display:block} class2312 {display:block} class2313 {display:block} class2314 {display:block} class2315 {display:block} class2316 {display:block} class2317 {display:block} class2318 {display:block} class2319 {display:block} class2320 {display:block} class2321 {display:block} class2322 {display:block} class2323 {display:block} class2324 {display:block} class2325 {display:block} class2326 {display:block} class2327 {display:block} class2328 {display:block} class2329 {display:block} class2330 {display:block} class2331 {display:block} class2332 {display:block} class2333 {display:block} class2334 {display:block} class2335 {display:block} class2336 {display:block} class2337 {display:block} class2338 {display:block} class2339 {display:block} class2340 {display:block} class2341 {display:block} class2342 {display:block} class2343 {display:block} class2344 {display:block} class2345 {display:block} class2346 {display:block} class2347 {display:block} class2348 {display:block} class2349 {display:block} class2350 {display:block} class2351 {display:block} class2352 {display:block} class2353 {display:block} class2354 {display:block} class2355 {display:block} class2356 {display:block} class2357 {display:block} class2358 {display:block} class2359 {display:block} class2360 {display:block} class2361 {display:block} class2362 {display:block} class2363 {display:block} class2364 {display:block} class2365 {display:block} class2366 {display:block} class2367 {display:block} class2368 {display:block} class2369 {display:block} class2370 {display:block} class2371 {display:block} class2372 {display:block} class2373 {display:block} class2374 {display:block} class2375 {display:block} class2376 {display:block} class2377 {display:block} class2378 {display:block} class2379 {display:block} class2380 {display:block} class2381 {display:block} class2382 {display:block} class2383 {display:block} class2384 {display:block} class2385 {display:block} class2386 {display:block} class2387 {display:block} class2388 {display:block} class2389 {display:block} class2390 {display:block} class2391 {display:block} class2392 {display:block} class2393 {display:block} class2394 {display:block} class2395 {display:block} class2396 {display:block} class2397 {display:block} class2398 {display:block} class2399 {display:block} class2400 {display:block} class2401 {display:block} class2402 {display:block} class2403 {display:block} class2404 {display:block} class2405 {display:block} class2406 {display:block} class2407 {display:block} class2408 {display:block} class2409 {display:block} class2410 {display:block} class2411 {display:block} class2412 {display:block} class2413 {display:block} class2414 {display:block} class2415 {display:block} class2416 {display:block} class2417 {display:block} class2418 {display:block} class2419 {display:block} class2420 {display:block} class2421 {display:block} class2422 {display:block} class2423 {display:block} class2424 {display:block} class2425 {display:block} class2426 {display:block} class2427 {display:block} class2428 {display:block} class2429 {display:block} class2430 {display:block} class2431 {display:block} class2432 {display:block} class2433 {display:block} class2434 {display:block} class2435 {display:block} class2436 {display:block} class2437 {display:block} class2438 {display:block} class2439 {display:block} class2440 {display:block} class2441 {display:block} class2442 {display:block} class2443 {display:block} class2444 {display:block} class2445 {display:block} class2446 {display:block} class2447 {display:block} class2448 {display:block} class2449 {display:block} class2450 {display:block} class2451 {display:block} class2452 {display:block} class2453 {display:block} class2454 {display:block} class2455 {display:block} class2456 {display:block} class2457 {display:block} class2458 {display:block} class2459 {display:block} class2460 {display:block} class2461 {display:block} class2462 {display:block} class2463 {display:block} class2464 {display:block} class2465 {display:block} class2466 {display:block} class2467 {display:block} class2468 {display:block} class2469 {display:block} class2470 {display:block} class2471 {display:block} class2472 {display:block} class2473 {display:block} class2474 {display:block} class2475 {display:block} class2476 {display:block} class2477 {display:block} class2478 {display:block} class2479 {display:block} class2480 {display:block} class2481 {display:block} class2482 {display:block} class2483 {display:block} class2484 {display:block} class2485 {display:block} class2486 {display:block} class2487 {display:block} class2488 {display:block} class2489 {display:block} class2490 {display:block} class2491 {display:block} class2492 {display:block} class2493 {display:block} class2494 {display:block} class2495 {display:block} class2496 {display:block} class2497 {display:block} class2498 {display:block} class2499 {display:block} class2500 {display:block} class2501 {display:block} class2502 {display:block} class2503 {display:block} class2504 {display:block} class2505 {display:block} class2506 {display:block} class2507 {display:block} class2508 {display:block} class2509 {display:block} class2510 {display:block} class2511 {display:block} class2512 {display:block} class2513 {display:block} class2514 {display:block} class2515 {display:block} class2516 {display:block} class2517 {display:block} class2518 {display:block} class2519 {display:block} class2520 {display:block} class2521 {display:block} class2522 {display:block} class2523 {display:block} class2524 {display:block} class2525 {display:block} class2526 {display:block} class2527 {display:block} class2528 {display:block} class2529 {display:block} class2530 {display:block} class2531 {display:block} class2532 {display:block} class2533 {display:block} class2534 {display:block} class2535 {display:block} class2536 {display:block} class2537 {display:block} class2538 {display:block} class2539 {display:block} class2540 {display:block} class2541 {display:block} class2542 {display:block} class2543 {display:block} class2544 {display:block} class2545 {display:block} class2546 {display:block} class2547 {display:block} class2548 {display:block} class2549 {display:block} class2550 {display:block} class2551 {display:block} class2552 {display:block} class2553 {display:block} class2554 {display:block} class2555 {display:block} class2556 {display:block} class2557 {display:block} class2558 {display:block} class2559 {display:block} class2560 {display:block} class2561 {display:block} class2562 {display:block} class2563 {display:block} class2564 {display:block} class2565 {display:block} class2566 {display:block} class2567 {display:block} class2568 {display:block} class2569 {display:block} class2570 {display:block} class2571 {display:block} class2572 {display:block} class2573 {display:block} class2574 {display:block} class2575 {display:block} class2576 {display:block} class2577 {display:block} class2578 {display:block} class2579 {display:block} class2580 {display:block} class2581 {display:block} class2582 {display:block} class2583 {display:block} class2584 {display:block} class2585 {display:block} class2586 {display:block} class2587 {display:block} class2588 {display:block} class2589 {display:block} class2590 {display:block} class2591 {display:block} class2592 {display:block} class2593 {display:block} class2594 {display:block} class2595 {display:block} class2596 {display:block} class2597 {display:block} class2598 {display:block} class2599 {display:block} class2600 {display:block} class2601 {display:block} class2602 {display:block} class2603 {display:block} class2604 {display:block} class2605 {display:block} class2606 {display:block} class2607 {display:block} class2608 {display:block} class2609 {display:block} class2610 {display:block} class2611 {display:block} class2612 {display:block} class2613 {display:block} class2614 {display:block} class2615 {display:block} class2616 {display:block} class2617 {display:block} class2618 {display:block} class2619 {display:block} class2620 {display:block} class2621 {display:block} class2622 {display:block} class2623 {display:block} class2624 {display:block} class2625 {display:block} class2626 {display:block} class2627 {display:block} class2628 {display:block} class2629 {display:block} class2630 {display:block} class2631 {display:block} class2632 {display:block} class2633 {display:block} class2634 {display:block} class2635 {display:block} class2636 {display:block} class2637 {display:block} class2638 {display:block} class2639 {display:block} class2640 {display:block} class2641 {display:block} class2642 {display:block} class2643 {display:block} class2644 {display:block} class2645 {display:block} class2646 {display:block} class2647 {display:block} class2648 {display:block} class2649 {display:block} class2650 {display:block} class2651 {display:block} class2652 {display:block} class2653 {display:block} class2654 {display:block} class2655 {display:block} class2656 {display:block} class2657 {display:block} class2658 {display:block} class2659 {display:block} class2660 {display:block} class2661 {display:block} class2662 {display:block} class2663 {display:block} class2664 {display:block} class2665 {display:block} class2666 {display:block} class2667 {display:block} class2668 {display:block} class2669 {display:block} class2670 {display:block} class2671 {display:block} class2672 {display:block} class2673 {display:block} class2674 {display:block} class2675 {display:block} class2676 {display:block} class2677 {display:block} class2678 {display:block} class2679 {display:block} class2680 {display:block} class2681 {display:block} class2682 {display:block} class2683 {display:block} class2684 {display:block} class2685 {display:block} class2686 {display:block} class2687 {display:block} class2688 {display:block} class2689 {display:block} class2690 {display:block} class2691 {display:block} class2692 {display:block} class2693 {display:block} class2694 {display:block} class2695 {display:block} class2696 {display:block} class2697 {display:block} class2698 {display:block} class2699 {display:block} class2700 {display:block} class2701 {display:block} class2702 {display:block} class2703 {display:block} class2704 {display:block} class2705 {display:block} class2706 {display:block} class2707 {display:block} class2708 {display:block} class2709 {display:block} class2710 {display:block} class2711 {display:block} class2712 {display:block} class2713 {display:block} class2714 {display:block} class2715 {display:block} class2716 {display:block} class2717 {display:block} class2718 {display:block} class2719 {display:block} class2720 {display:block} class2721 {display:block} class2722 {display:block} class2723 {display:block} class2724 {display:block} class2725 {display:block} class2726 {display:block} class2727 {display:block} class2728 {display:block} class2729 {display:block} class2730 {display:block} class2731 {display:block} class2732 {display:block} class2733 {display:block} class2734 {display:block} class2735 {display:block} class2736 {display:block} class2737 {display:block} class2738 {display:block} class2739 {display:block} class2740 {display:block} class2741 {display:block} class2742 {display:block} class2743 {display:block} class2744 {display:block} class2745 {display:block} class2746 {display:block} class2747 {display:block} class2748 {display:block} class2749 {display:block} class2750 {display:block} class2751 {display:block} class2752 {display:block} class2753 {display:block} class2754 {display:block} class2755 {display:block} class2756 {display:block} class2757 {display:block} class2758 {display:block} class2759 {display:block} class2760 {display:block} class2761 {display:block} class2762 {display:block} class2763 {display:block} class2764 {display:block} class2765 {display:block} class2766 {display:block} class2767 {display:block} class2768 {display:block} class2769 {display:block} class2770 {display:block} class2771 {display:block} class2772 {display:block} class2773 {display:block} class2774 {display:block} class2775 {display:block} class2776 {display:block} class2777 {display:block} class2778 {display:block} class2779 {display:block} class2780 {display:block} class2781 {display:block} class2782 {display:block} class2783 {display:block} class2784 {display:block} class2785 {display:block} class2786 {display:block} class2787 {display:block} class2788 {display:block} class2789 {display:block} class2790 {display:block} class2791 {display:block} class2792 {display:block} class2793 {display:block} class2794 {display:block} class2795 {display:block} class2796 {display:block} class2797 {display:block} class2798 {display:block} class2799 {display:block} class2800 {display:block} class2801 {display:block} class2802 {display:block} class2803 {display:block} class2804 {display:block} class2805 {display:block} class2806 {display:block} class2807 {display:block} class2808 {display:block} class2809 {display:block} class2810 {display:block} class2811 {display:block} class2812 {display:block} class2813 {display:block} class2814 {display:block} class2815 {display:block} class2816 {display:block} class2817 {display:block} class2818 {display:block} class2819 {display:block} class2820 {display:block} class2821 {display:block} class2822 {display:block} class2823 {display:block} class2824 {display:block} class2825 {display:block} class2826 {display:block} class2827 {display:block} class2828 {display:block} class2829 {display:block} class2830 {display:block} class2831 {display:block} class2832 {display:block} class2833 {display:block} class2834 {display:block} class2835 {display:block} class2836 {display:block} class2837 {display:block} class2838 {display:block} class2839 {display:block} class2840 {display:block} class2841 {display:block} class2842 {display:block} class2843 {display:block} class2844 {display:block} class2845 {display:block} class2846 {display:block} class2847 {display:block} class2848 {display:block} class2849 {display:block} class2850 {display:block} class2851 {display:block} class2852 {display:block} class2853 {display:block} class2854 {display:block} class2855 {display:block} class2856 {display:block} class2857 {display:block} class2858 {display:block} class2859 {display:block} class2860 {display:block} class2861 {display:block} class2862 {display:block} class2863 {display:block} class2864 {display:block} class2865 {display:block} class2866 {display:block} class2867 {display:block} class2868 {display:block} class2869 {display:block} class2870 {display:block} class2871 {display:block} class2872 {display:block} class2873 {display:block} class2874 {display:block} class2875 {display:block} class2876 {display:block} class2877 {display:block} class2878 {display:block} class2879 {display:block} class2880 {display:block} class2881 {display:block} class2882 {display:block} class2883 {display:block} class2884 {display:block} class2885 {display:block} class2886 {display:block} class2887 {display:block} class2888 {display:block} class2889 {display:block} class2890 {display:block} class2891 {display:block} class2892 {display:block} class2893 {display:block} class2894 {display:block} class2895 {display:block} class2896 {display:block} class2897 {display:block} class2898 {display:block} class2899 {display:block} class2900 {display:block} class2901 {display:block} class2902 {display:block} class2903 {display:block} class2904 {display:block} class2905 {display:block} class2906 {display:block} class2907 {display:block} class2908 {display:block} class2909 {display:block} class2910 {display:block} class2911 {display:block} class2912 {display:block} class2913 {display:block} class2914 {display:block} class2915 {display:block} class2916 {display:block} class2917 {display:block} class2918 {display:block} class2919 {display:block} class2920 {display:block} class2921 {display:block} class2922 {display:block} class2923 {display:block} class2924 {display:block} class2925 {display:block} class2926 {display:block} class2927 {display:block} class2928 {display:block} class2929 {display:block} class2930 {display:block} class2931 {display:block} class2932 {display:block} class2933 {display:block} class2934 {display:block} class2935 {display:block} class2936 {display:block} class2937 {display:block} class2938 {display:block} class2939 {display:block} class2940 {display:block} class2941 {display:block} class2942 {display:block} class2943 {display:block} class2944 {display:block} class2945 {display:block} class2946 {display:block} class2947 {display:block} class2948 {display:block} class2949 {display:block} class2950 {display:block} class2951 {display:block} class2952 {display:block} class2953 {display:block} class2954 {display:block} class2955 {display:block} class2956 {display:block} class2957 {display:block} class2958 {display:block} class2959 {display:block} class2960 {display:block} class2961 {display:block} class2962 {display:block} class2963 {display:block} class2964 {display:block} class2965 {display:block} class2966 {display:block} class2967 {display:block} class2968 {display:block} class2969 {display:block} class2970 {display:block} class2971 {display:block} class2972 {display:block} class2973 {display:block} class2974 {display:block} class2975 {display:block} class2976 {display:block} class2977 {display:block} class2978 {display:block} class2979 {display:block} class2980 {display:block} class2981 {display:block} class2982 {display:block} class2983 {display:block} class2984 {display:block} class2985 {display:block} class2986 {display:block} class2987 {display:block} class2988 {display:block} class2989 {display:block} class2990 {display:block} class2991 {display:block} class2992 {display:block} class2993 {display:block} class2994 {display:block} class2995 {display:block} class2996 {display:block} class2997 {display:block} class2998 {display:block} class2999 {display:block} class3000 {display:block}
diff --git a/testing/talos/talos/tests/devtools/addon/content/pages/simple.html b/testing/talos/talos/tests/devtools/addon/content/pages/simple.html
new file mode 100644
index 0000000000..79bebb3409
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/pages/simple.html
@@ -0,0 +1,14 @@
+<html>
+<head>
+<meta charset="UTF-8"/>
+<title>Simple Page for DAMP Test</title>
+<script>
+ window.addEventListener("load", function() {
+ console.log("loaded");
+ });
+</script>
+</head>
+<body>
+ <h1>This is a simple page</h1>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/devtools/addon/content/tests/accessibility/accessibility-helpers.js b/testing/talos/talos/tests/devtools/addon/content/tests/accessibility/accessibility-helpers.js
new file mode 100644
index 0000000000..9b698a02f7
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/tests/accessibility/accessibility-helpers.js
@@ -0,0 +1,35 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const { openToolboxAndLog, reloadPageAndLog } = require("damp-test/tests/head");
+
+const PREF_ACCESSIBILITY_FORCE_DISABLED = "accessibility.force_disabled";
+
+exports.shutdownAccessibilityService = function () {
+ // Set PREF_ACCESSIBILITY_FORCE_DISABLED to 1 to force disable
+ // accessibility service. This is the only way to guarantee an immediate
+ // accessibility service shutdown in all processes. This also prevents
+ // accessibility service from starting up in the future.
+ Services.prefs.setIntPref(PREF_ACCESSIBILITY_FORCE_DISABLED, 1);
+ // Set PREF_ACCESSIBILITY_FORCE_DISABLED back to default value. This will
+ // not start accessibility service until the user activates it again. It
+ // simply ensures that accessibility service can start again (when value is
+ // below 1).
+ Services.prefs.clearUserPref(PREF_ACCESSIBILITY_FORCE_DISABLED);
+};
+
+exports.openAccessibilityAndLog = function (label) {
+ return openToolboxAndLog(`${label}.accessibility`, "accessibility");
+};
+
+exports.reloadAccessibilityAndLog = async function (label, toolbox) {
+ const onReload = async function () {
+ let accessibility = await toolbox.getPanelWhenReady("accessibility");
+ await accessibility.once("reloaded");
+ };
+
+ await reloadPageAndLog(`${label}.accessibility`, toolbox, onReload);
+};
diff --git a/testing/talos/talos/tests/devtools/addon/content/tests/accessibility/cold-open.js b/testing/talos/talos/tests/devtools/addon/content/tests/accessibility/cold-open.js
new file mode 100644
index 0000000000..5ae1c8f7f6
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/tests/accessibility/cold-open.js
@@ -0,0 +1,25 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const {
+ openAccessibilityAndLog,
+ shutdownAccessibilityService,
+} = require("damp-test/tests/accessibility/accessibility-helpers");
+
+const {
+ closeToolbox,
+ testSetup,
+ testTeardown,
+ SIMPLE_URL,
+} = require("damp-test/tests/head");
+
+module.exports = async function () {
+ await testSetup(SIMPLE_URL);
+ await openAccessibilityAndLog("cold");
+ await closeToolbox();
+ shutdownAccessibilityService();
+ await testTeardown();
+};
diff --git a/testing/talos/talos/tests/devtools/addon/content/tests/accessibility/simple.js b/testing/talos/talos/tests/devtools/addon/content/tests/accessibility/simple.js
new file mode 100644
index 0000000000..df1717fdba
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/tests/accessibility/simple.js
@@ -0,0 +1,27 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const {
+ openAccessibilityAndLog,
+ reloadAccessibilityAndLog,
+ shutdownAccessibilityService,
+} = require("damp-test/tests/accessibility/accessibility-helpers");
+const {
+ closeToolboxAndLog,
+ testSetup,
+ testTeardown,
+ SIMPLE_URL,
+} = require("damp-test/tests/head");
+
+module.exports = async function () {
+ await testSetup(SIMPLE_URL);
+
+ const toolbox = await openAccessibilityAndLog("simple");
+ await reloadAccessibilityAndLog("simple", toolbox);
+ await closeToolboxAndLog("simple.accessibility", toolbox);
+ shutdownAccessibilityService();
+ await testTeardown();
+};
diff --git a/testing/talos/talos/tests/devtools/addon/content/tests/debugger/cold-open.js b/testing/talos/talos/tests/devtools/addon/content/tests/debugger/cold-open.js
new file mode 100644
index 0000000000..6da822b7bf
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/tests/debugger/cold-open.js
@@ -0,0 +1,28 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const {
+ closeToolbox,
+ testSetup,
+ testTeardown,
+ SIMPLE_URL,
+} = require("../head");
+const { openDebuggerAndLog } = require("./debugger-helpers");
+
+const EXPECTED = {
+ sources: 1,
+ file: "simple.html",
+ sourceURL: SIMPLE_URL,
+ text: "This is a simple page",
+ threadsCount: 1,
+};
+
+module.exports = async function () {
+ await testSetup(SIMPLE_URL);
+ await openDebuggerAndLog("cold", EXPECTED);
+ await closeToolbox();
+ await testTeardown();
+};
diff --git a/testing/talos/talos/tests/devtools/addon/content/tests/debugger/complicated.js b/testing/talos/talos/tests/devtools/addon/content/tests/debugger/complicated.js
new file mode 100644
index 0000000000..a413e25e6e
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/tests/debugger/complicated.js
@@ -0,0 +1,34 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const {
+ closeToolboxAndLog,
+ testSetup,
+ testTeardown,
+ COMPLICATED_URL,
+} = require("../head");
+const {
+ openDebuggerAndLog,
+ reloadDebuggerAndLog,
+} = require("./debugger-helpers");
+
+const EXPECTED = {
+ sources: 14,
+ file: "ga.js",
+ sourceURL: COMPLICATED_URL,
+ text: "Math;function ga(a,b){return a.name=b}",
+ threadsCount: 7,
+};
+
+module.exports = async function () {
+ await testSetup(COMPLICATED_URL);
+
+ let toolbox = await openDebuggerAndLog("complicated", EXPECTED);
+ await reloadDebuggerAndLog("complicated", toolbox, EXPECTED);
+ await closeToolboxAndLog("complicated.jsdebugger", toolbox);
+
+ await testTeardown();
+};
diff --git a/testing/talos/talos/tests/devtools/addon/content/tests/debugger/custom.js b/testing/talos/talos/tests/devtools/addon/content/tests/debugger/custom.js
new file mode 100644
index 0000000000..d0815bd514
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/tests/debugger/custom.js
@@ -0,0 +1,362 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const {
+ closeToolboxAndLog,
+ garbageCollect,
+ runTest,
+ testSetup,
+ testTeardown,
+ PAGES_BASE_URL,
+ waitForDOMElement,
+} = require("../head");
+const {
+ createContext,
+ findSource,
+ getCM,
+ hoverOnToken,
+ openDebuggerAndLog,
+ pauseDebugger,
+ reloadDebuggerAndLog,
+ removeBreakpoints,
+ resume,
+ selectSource,
+ step,
+ waitForSource,
+ waitForText,
+ evalInFrame,
+ waitUntil,
+ addBreakpoint,
+ waitForPaused,
+ waitForState,
+} = require("./debugger-helpers");
+
+const IFRAME_BASE_URL =
+ "http://damp.top.com/tests/devtools/addon/content/pages/";
+const EXPECTED = {
+ sources: 1134,
+ file: "App.js",
+ sourceURL: `${IFRAME_BASE_URL}custom/debugger/app-build/static/js/App.js`,
+ text: "import React, { Component } from 'react';",
+ threadsCount: 2,
+};
+
+const EXPECTED_FUNCTION = "window.hitBreakpoint()";
+
+const TEST_URL = PAGES_BASE_URL + "custom/debugger/app-build/index.html";
+const MINIFIED_URL = `${IFRAME_BASE_URL}custom/debugger/app-build/static/js/minified.js`;
+
+module.exports = async function () {
+ const tab = await testSetup(TEST_URL, { disableCache: true });
+
+ const toolbox = await openDebuggerAndLog("custom", EXPECTED);
+
+ dump("Waiting for debugger panel\n");
+ const panel = await toolbox.getPanelWhenReady("jsdebugger");
+
+ dump("Creating context\n");
+ const dbg = await createContext(panel);
+
+ // Note that all sources added via eval, and all sources added by this function
+ // will be gone when reloading the page in the next step.
+ await testAddingSources(dbg, tab, toolbox);
+
+ // Reselect App.js as that's the source expected to be selected after page reload
+ await selectSource(dbg, EXPECTED.file);
+
+ await reloadDebuggerAndLog("custom", toolbox, EXPECTED);
+
+ // these tests are only run on custom.jsdebugger
+ await pauseDebuggerAndLog(dbg, tab, EXPECTED_FUNCTION);
+ await stepDebuggerAndLog(dbg, tab, EXPECTED_FUNCTION);
+
+ await testProjectSearch(dbg, tab);
+ await testPreview(dbg, tab, EXPECTED_FUNCTION);
+ await testOpeningLargeMinifiedFile(dbg, tab);
+ await testPrettyPrint(dbg, toolbox);
+
+ await closeToolboxAndLog("custom.jsdebugger", toolbox);
+
+ await testTeardown();
+};
+
+async function pauseDebuggerAndLog(dbg, tab, testFunction) {
+ const pauseLocation = { line: 22, file: "App.js" };
+
+ dump("Pausing debugger\n");
+ let test = runTest("custom.jsdebugger.pause.DAMP");
+ await pauseDebugger(dbg, tab, testFunction, pauseLocation);
+ test.done();
+
+ await removeBreakpoints(dbg);
+ await resume(dbg);
+ await garbageCollect();
+}
+
+async function stepDebuggerAndLog(dbg, tab, testFunction) {
+ /*
+ * See testing/talos/talos/tests/devtools/addon/content/pages/custom/debugger/app/src for the details
+ * about the pages used for these tests.
+ */
+
+ const stepTests = [
+ // This steps only once from the App.js into step-in-test.js.
+ // This `stepInNewSource` should always run first to make sure `step-in-test.js` file
+ // is loaded for the first time.
+ {
+ stepCount: 1,
+ location: { line: 22, file: "App.js" },
+ key: "stepInNewSource",
+ stepType: "stepIn",
+ },
+ {
+ stepCount: 2,
+ location: { line: 10194, file: "step-in-test.js" },
+ key: "stepIn",
+ stepType: "stepIn",
+ },
+ {
+ stepCount: 2,
+ location: { line: 16, file: "step-over-test.js" },
+ key: "stepOver",
+ stepType: "stepOver",
+ },
+ {
+ stepCount: 2,
+ location: { line: 998, file: "step-out-test.js" },
+ key: "stepOut",
+ stepType: "stepOut",
+ },
+ ];
+
+ for (const stepTest of stepTests) {
+ await pauseDebugger(dbg, tab, testFunction, stepTest.location);
+ const test = runTest(`custom.jsdebugger.${stepTest.key}.DAMP`);
+ for (let i = 0; i < stepTest.stepCount; i++) {
+ await step(dbg, stepTest.stepType);
+ }
+ test.done();
+ await removeBreakpoints(dbg);
+ await resume(dbg);
+ await garbageCollect();
+ }
+}
+
+async function testProjectSearch(dbg, tab) {
+ dump("Executing project search\n");
+ const test = runTest(`custom.jsdebugger.project-search.DAMP`);
+ const firstSearchResultTest = runTest(
+ `custom.jsdebugger.project-search.first-search-result.DAMP`
+ );
+ await dbg.actions.setPrimaryPaneTab("project");
+ await dbg.actions.setActiveSearch("project");
+ const searchInput = await waitForDOMElement(
+ dbg.win.document.querySelector("body"),
+ ".project-text-search .search-field input"
+ );
+ searchInput.focus();
+ searchInput.value = "retur";
+ // Only dispatch a true key event for the last character in order to trigger only one search
+ const key = "n";
+ searchInput.dispatchEvent(
+ new dbg.win.KeyboardEvent("keydown", {
+ bubbles: true,
+ cancelable: true,
+ view: dbg.win,
+ charCode: key.charCodeAt(0),
+ })
+ );
+ searchInput.dispatchEvent(
+ new dbg.win.KeyboardEvent("keyup", {
+ bubbles: true,
+ cancelable: true,
+ view: dbg.win,
+ charCode: key.charCodeAt(0),
+ })
+ );
+ searchInput.dispatchEvent(
+ new dbg.win.KeyboardEvent("keypress", {
+ bubbles: true,
+ cancelable: true,
+ view: dbg.win,
+ charCode: key.charCodeAt(0),
+ })
+ );
+
+ // Wait till the first search result match is rendered
+ await waitForDOMElement(
+ dbg.win.document.querySelector("body"),
+ ".project-text-search .tree-node .result"
+ );
+ firstSearchResultTest.done();
+ // Then wait for all results to be fetched and the loader spin to hide
+ await waitUntil(() => {
+ return !dbg.win.document.querySelector(
+ ".project-text-search .search-field .loader.spin"
+ );
+ });
+ await dbg.actions.closeActiveSearch();
+ test.done();
+ await garbageCollect();
+}
+
+async function testPreview(dbg, tab, testFunction) {
+ const pauseLocation = { line: 22, file: "App.js" };
+
+ let test = runTest("custom.jsdebugger.preview.DAMP");
+ await pauseDebugger(dbg, tab, testFunction, pauseLocation);
+ await hoverOnToken(dbg, "window.hitBreakpoint", "window");
+ test.done();
+
+ await removeBreakpoints(dbg);
+ await resume(dbg);
+ await garbageCollect();
+}
+
+async function testOpeningLargeMinifiedFile(dbg, tab) {
+ const fileFirstMinifiedChars = `(()=>{var e,t,n,r,o={82603`;
+
+ dump("Open minified.js (large minified file)\n");
+ const fullTest = runTest(
+ "custom.jsdebugger.open-large-minified-file.full-selection.DAMP"
+ );
+ const test = runTest("custom.jsdebugger.open-large-minified-file.DAMP");
+ const onSelected = selectSource(dbg, MINIFIED_URL);
+ await waitForText(dbg, fileFirstMinifiedChars);
+ test.done();
+ await onSelected;
+ fullTest.done();
+
+ await dbg.actions.closeTabs([findSource(dbg, MINIFIED_URL)]);
+
+ // Also clear to prevent reselecting this source
+ await dbg.actions.clearSelectedLocation();
+
+ await garbageCollect();
+}
+
+async function testPrettyPrint(dbg, toolbox) {
+ const formattedFileUrl = `${MINIFIED_URL}:formatted`;
+ const filePrettyChars = "82603: (e, t, n) => {\n";
+
+ dump("Select minified file\n");
+ await selectSource(dbg, MINIFIED_URL);
+
+ dump("Wait until CodeMirror highlighting is done\n");
+ const cm = getCM(dbg);
+ // highlightFrontier is not documented but is an internal variable indicating the current
+ // line that was just highlighted. This document has only 2 lines, so wait until both
+ // are highlighted. Since there was an other document opened before, we need to do an
+ // exact check to properly wait.
+ await waitUntil(() => cm.doc.highlightFrontier === 2);
+
+ const prettyPrintButton = await waitUntil(() => {
+ return dbg.win.document.querySelector(".source-footer .prettyPrint.active");
+ });
+
+ dump("Click pretty-print button\n");
+ const test = runTest("custom.jsdebugger.pretty-print.DAMP");
+ prettyPrintButton.click();
+ await waitForSource(dbg, formattedFileUrl);
+ await waitForText(dbg, filePrettyChars);
+ test.done();
+
+ await addBreakpoint(dbg, 776, formattedFileUrl);
+
+ const onPaused = waitForPaused(dbg);
+ const reloadAndPauseInPrettyPrintedFileTest = runTest(
+ "custom.jsdebugger.pretty-print.reload-and-pause.DAMP"
+ );
+ await reloadDebuggerAndLog("custom.pretty-print", toolbox, {
+ sources: 1105,
+ sourceURL: formattedFileUrl,
+ text: filePrettyChars,
+ threadsCount: EXPECTED.threadsCount,
+ });
+ await onPaused;
+
+ // When reloading, the `togglePrettyPrint` action is called to pretty print the minified source.
+ // This action is quite slow and finishes by ensuring that breakpoints are updated according to
+ // the new pretty printed source.
+ // We have to wait for this, otherwise breakpoints may be added after we remove all breakpoints just after.
+ await waitForState(
+ dbg,
+ function (state) {
+ const breakpoints = dbg.selectors.getBreakpointsAtLine(state, 776);
+ const source = findSource(dbg, formattedFileUrl);
+ // We have to ensure that the breakpoint is specific to the very last source object,
+ // and not the one from the previous page load.
+ return (
+ breakpoints?.length > 0 && breakpoints[0].location.source == source
+ );
+ },
+ "wait for pretty print breakpoint"
+ );
+
+ reloadAndPauseInPrettyPrintedFileTest.done();
+
+ // The previous code waiting for state change isn't quite enough,
+ // we need to spin the event loop once before clearing the breakpoints as
+ // the processing of the new pretty printed source may still create late breakpoints
+ // when it tries to update the breakpoint location on the pretty printed source.
+ await new Promise(r => setTimeout(r, 0));
+
+ await removeBreakpoints(dbg);
+
+ // Clear the selection to avoid the source to be re-pretty printed on next load
+ // Clear the selection before closing the tabs, otherwise closeTabs will reselect a random source.
+ await dbg.actions.clearSelectedLocation();
+
+ // Close tabs and especially the pretty printed one to stop pretty printing it.
+ // Given that it is hard to find the non-pretty printed source via `findSource`
+ // (because bundle and pretty print sources use almost the same URL except ':formatted' for the pretty printed one)
+ // let's close all the tabs.
+ const sources = dbg.selectors.getSourceList(dbg.getState());
+ await dbg.actions.closeTabs(sources);
+
+ await garbageCollect();
+}
+
+async function testAddingSources(dbg, tab, toolbox) {
+ // Before running the test, select an existing source in the two folders
+ // where we add sources so that the added sources are made visible in the SourceTree.
+ await selectSource(dbg, "js/testfile.js?id=0");
+ await selectSource(dbg, "js/subfolder/testsubfolder.js");
+
+ // Disabled ResourceCommand throttling so that the source notified by the server
+ // is immediately processed by the client and we process each new source quickly.
+ // Otherwise each source processing is faster than the throttling and we would mostly measure the throttling.
+ toolbox.commands.resourceCommand.throttlingDisabled = true;
+ const test = runTest("custom.jsdebugger.adding-sources.DAMP");
+
+ for (let i = 0; i < 15; i++) {
+ // Load source from two distinct folders to extend coverage around the source tree
+ const sourceFilename =
+ (i % 2 == 0 ? "testfile.js" : "testsubfolder.js") + "?dynamic-" + i;
+ const sourcePath =
+ i % 2 == 0 ? sourceFilename : "subfolder/" + sourceFilename;
+
+ await evalInFrame(
+ tab,
+ `
+ const script = document.createElement("script");
+ script.src = "./js/${sourcePath}";
+ document.body.appendChild(script);
+ `
+ );
+ dump(`Wait for new source '${sourceFilename}'\n`);
+ // Wait for the source to be in the redux store to avoid executing expensive DOM selectors.
+ await waitUntil(() => findSource(dbg, sourceFilename));
+ await waitUntil(() => {
+ return Array.from(
+ dbg.win.document.querySelectorAll(".sources-list .tree-node")
+ ).some(e => e.textContent.includes(sourceFilename));
+ });
+ }
+
+ test.done();
+ toolbox.commands.resourceCommand.throttlingDisabled = false;
+}
diff --git a/testing/talos/talos/tests/devtools/addon/content/tests/debugger/debugger-helpers.js b/testing/talos/talos/tests/devtools/addon/content/tests/debugger/debugger-helpers.js
new file mode 100644
index 0000000000..ee1e52ed00
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/tests/debugger/debugger-helpers.js
@@ -0,0 +1,455 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const { openToolboxAndLog, reloadPageAndLog } = require("../head");
+const {
+ createLocation,
+} = require("devtools/client/debugger/src/utils/location");
+
+/*
+ * These methods are used for working with debugger state changes in order
+ * to make it easier to manipulate the ui and test different behavior. These
+ * methods roughly reflect those found in debugger/test/mochi/head.js with
+ * a few exceptions. The `dbg` object is not exactly the same, and the methods
+ * have been simplified. We may want to consider unifying them in the future
+ */
+
+const DEBUGGER_POLLING_INTERVAL = 25;
+
+function waitForState(dbg, predicate, msg) {
+ return new Promise(resolve => {
+ if (msg) {
+ dump(`Waiting for state change: ${msg}\n`);
+ }
+ if (predicate(dbg.store.getState())) {
+ if (msg) {
+ dump(`Finished waiting for state change: ${msg}\n`);
+ }
+ return resolve();
+ }
+
+ const unsubscribe = dbg.store.subscribe(() => {
+ if (predicate(dbg.store.getState())) {
+ if (msg) {
+ dump(`Finished waiting for state change: ${msg}\n`);
+ }
+ unsubscribe();
+ resolve();
+ }
+ });
+ return false;
+ });
+}
+exports.waitForState = waitForState;
+
+function waitForDispatch(dbg, type, count = 1) {
+ return new Promise(resolve => {
+ dbg.store.dispatch({
+ type: "@@service/waitUntil",
+ predicate: action => {
+ if (
+ action.type === type &&
+ (!action.status ||
+ action.status === "done" ||
+ action.status === "error")
+ ) {
+ --count;
+ if (count === 0) {
+ return true;
+ }
+ }
+ return false;
+ },
+ run: (dispatch, getState, action) => {
+ resolve(action);
+ },
+ });
+ });
+}
+
+async function waitUntil(predicate, msg) {
+ if (msg) {
+ dump(`Waiting until: ${msg}\n`);
+ }
+ const earlyPredicateResult = predicate();
+ if (earlyPredicateResult) {
+ if (msg) {
+ dump(`Finished Waiting until: ${msg} (was immediately true)\n`);
+ }
+ return earlyPredicateResult;
+ }
+ return new Promise(resolve => {
+ const timer = setInterval(() => {
+ const predicateResult = predicate();
+ if (predicateResult) {
+ clearInterval(timer);
+ if (msg) {
+ dump(`Finished Waiting until: ${msg}\n`);
+ }
+ resolve(predicateResult);
+ }
+ }, DEBUGGER_POLLING_INTERVAL);
+ });
+}
+exports.waitUntil = waitUntil;
+
+function findSource(dbg, url) {
+ const sources = dbg.selectors.getSourceList(dbg.getState());
+ return sources.find(s => (s.url || "").includes(url));
+}
+exports.findSource = findSource;
+
+function getCM(dbg) {
+ const el = dbg.win.document.querySelector(".CodeMirror");
+ return el.CodeMirror;
+}
+exports.getCM = getCM;
+
+function waitForText(dbg, text) {
+ return waitUntil(() => {
+ // the welcome box is removed once text is displayed
+ const welcomebox = dbg.win.document.querySelector(".welcomebox");
+ if (welcomebox) {
+ return false;
+ }
+ const cm = getCM(dbg);
+ const editorText = cm.doc.getValue();
+ return editorText.includes(text);
+ }, "text is visible");
+}
+exports.waitForText = waitForText;
+
+function waitForSymbols(dbg) {
+ return waitUntil(() => {
+ const state = dbg.store.getState();
+ const location = dbg.selectors.getSelectedLocation(state);
+ return dbg.selectors.getSymbols(state, location);
+ }, "has file metadata");
+}
+
+function waitForSources(dbg, expectedSources) {
+ const { selectors } = dbg;
+ function countSources(state) {
+ return selectors.getSourceCount(state) >= expectedSources;
+ }
+ return waitForState(dbg, countSources, "count sources");
+}
+
+function waitForSource(dbg, sourceURL) {
+ const { selectors } = dbg;
+ function hasSource(state) {
+ return selectors.getSourceByURL(state, sourceURL);
+ }
+ return waitForState(dbg, hasSource, `has source ${sourceURL}`);
+}
+exports.waitForSource = waitForSource;
+
+function waitForThreadCount(dbg, count) {
+ const { selectors } = dbg;
+ function threadCount(state) {
+ // getThreads doesn't count the main thread
+ // and don't use getAllThreads as it does useless expensive computations.
+ return selectors.getThreads(state).length + 1 == count;
+ }
+ return waitForState(dbg, threadCount, `has source ${count} threads`);
+}
+
+async function waitForPaused(
+ dbg,
+ pauseOptions = { shouldWaitForLoadedScopes: true }
+) {
+ const promises = [];
+
+ // If original variable mapping is disabled the scopes for
+ // original sources are not loaded by default so lets not
+ // wait for any scopes.
+ if (pauseOptions.shouldWaitForLoadedScopes) {
+ promises.push(waitForLoadedScopes(dbg));
+ }
+ const {
+ selectors: { getSelectedScope, getIsPaused, getCurrentThread },
+ } = dbg;
+ const onStateChange = waitForState(dbg, state => {
+ const thread = getCurrentThread(state);
+ return getSelectedScope(state, thread) && getIsPaused(state, thread);
+ });
+ promises.push(onStateChange);
+ return Promise.all(promises);
+}
+exports.waitForPaused = waitForPaused;
+
+async function waitForResumed(dbg) {
+ const {
+ selectors: { getIsPaused, getCurrentThread },
+ } = dbg;
+ return waitForState(
+ dbg,
+ state => !getIsPaused(state, getCurrentThread(state))
+ );
+}
+
+async function waitForElement(dbg, name) {
+ await waitUntil(() => dbg.win.document.querySelector(name));
+ return dbg.win.document.querySelector(name);
+}
+
+async function waitForLoadedScopes(dbg) {
+ // Since scopes auto-expand, we can assume they are loaded when there is a tree node
+ // with the aria-level attribute equal to "2".
+ const element = '.scopes-list .tree-node[aria-level="2"]';
+ return waitForElement(dbg, element);
+}
+
+function clickElement(dbg, selector) {
+ const clickEvent = new dbg.win.MouseEvent("click", {
+ bubbles: true,
+ cancelable: true,
+ view: dbg.win,
+ });
+ dbg.win.document.querySelector(selector).dispatchEvent(clickEvent);
+}
+
+async function toggleOriginalScopes(dbg) {
+ const scopesLoaded = waitForLoadedScopes(dbg);
+ const onDispatch = waitForDispatch(dbg, "TOGGLE_MAP_SCOPES");
+ clickElement(dbg, ".map-scopes-header input");
+ return Promise.all([onDispatch, scopesLoaded]);
+}
+
+function createContext(panel) {
+ const { store, selectors, actions } = panel.getVarsForTests();
+
+ return {
+ actions,
+ selectors,
+ getState: store.getState,
+ win: panel.panelWin,
+ store,
+ };
+}
+exports.createContext = createContext;
+
+async function selectSource(dbg, url) {
+ dump(`Selecting source: ${url}\n`);
+ const line = 1;
+ const source = findSource(dbg, url);
+ // keepContext set to false allows to force selecting original/generated source
+ // regardless if we were currently selecting the opposite type of source.
+ await dbg.actions.selectLocation(createLocation({ source, line }), {
+ keepContext: false,
+ });
+ return waitForState(
+ dbg,
+ state => {
+ const location = dbg.selectors.getSelectedLocation(state);
+ if (!location) {
+ return false;
+ }
+ if (location.source != source || location.line != line) {
+ return false;
+ }
+ const sourceTextContent =
+ dbg.selectors.getSelectedSourceTextContent(state);
+ if (!sourceTextContent) {
+ return false;
+ }
+
+ // wait for symbols -- a flat map of all named variables in a file -- to be calculated.
+ // this is a slow process and becomes slower the larger the file is
+ return dbg.selectors.getSymbols(state, location);
+ },
+ "selected source"
+ );
+}
+exports.selectSource = selectSource;
+
+function evalInFrame(tab, testFunction) {
+ dump(`Run function in content process: ${testFunction}\n`);
+ // Load a frame script using a data URI so we can run a script
+ // inside of the content process and trigger debugger functionality
+ // as needed
+ const messageManager = tab.linkedBrowser.messageManager;
+ return messageManager.loadFrameScript(
+ "data:,(" +
+ encodeURIComponent(`
+ function () {
+ const iframe = content.document.querySelector("iframe");
+ const win = iframe.contentWindow;
+ win.eval(\`${testFunction}\`);
+ }`) +
+ ")()",
+ true
+ );
+}
+exports.evalInFrame = evalInFrame;
+
+async function openDebuggerAndLog(label, expected) {
+ const onLoad = async (toolbox, panel) => {
+ const dbg = await createContext(panel);
+ await waitForThreadCount(dbg, expected.threadsCount);
+ await waitForSource(dbg, expected.sourceURL);
+ await selectSource(dbg, expected.file);
+ await waitForText(dbg, expected.text);
+ await waitForSymbols(dbg);
+ };
+
+ const toolbox = await openToolboxAndLog(
+ label + ".jsdebugger",
+ "jsdebugger",
+ onLoad
+ );
+ return toolbox;
+}
+exports.openDebuggerAndLog = openDebuggerAndLog;
+
+async function reloadDebuggerAndLog(label, toolbox, expected) {
+ const onReload = async () => {
+ const panel = await toolbox.getPanelWhenReady("jsdebugger");
+ const dbg = await createContext(panel);
+
+ // First wait for all previous page threads to be removed
+ await waitForDispatch(dbg, "REMOVE_THREAD", expected.threadsCount);
+ // Only after that wait for all new threads to be registered before doing more assertions
+ // Otherwise we may resolve too soon on previous page sources.
+ await waitForThreadCount(dbg, expected.threadsCount);
+
+ await waitForSources(dbg, expected.sources);
+ await waitForSource(dbg, expected.sourceURL);
+ await waitForText(dbg, expected.text);
+ await waitForSymbols(dbg);
+ };
+ await reloadPageAndLog(`${label}.jsdebugger`, toolbox, onReload);
+}
+exports.reloadDebuggerAndLog = reloadDebuggerAndLog;
+
+async function addBreakpoint(dbg, line, url) {
+ dump(`add breakpoint\n`);
+ const source = findSource(dbg, url);
+ const location = createLocation({
+ source,
+ line,
+ });
+
+ await selectSource(dbg, url);
+
+ await dbg.actions.addBreakpoint(location);
+}
+exports.addBreakpoint = addBreakpoint;
+
+async function removeBreakpoints(dbg) {
+ dump(`remove all breakpoints\n`);
+ const breakpoints = dbg.selectors.getBreakpointsList(dbg.getState());
+
+ const onBreakpointsCleared = waitForState(
+ dbg,
+ state => dbg.selectors.getBreakpointCount(state) === 0
+ );
+ await dbg.actions.removeBreakpoints(breakpoints);
+ return onBreakpointsCleared;
+}
+exports.removeBreakpoints = removeBreakpoints;
+
+async function pauseDebugger(
+ dbg,
+ tab,
+ testFunction,
+ { line, file },
+ pauseOptions
+) {
+ const { getSelectedLocation, isMapScopesEnabled } = dbg.selectors;
+
+ const state = dbg.store.getState();
+ const selectedSource = getSelectedLocation(state).source;
+
+ await addBreakpoint(dbg, line, file);
+ const shouldEnableOriginalScopes =
+ selectedSource.isOriginal &&
+ !selectedSource.isPrettyPrinted &&
+ !isMapScopesEnabled(state);
+
+ const onPaused = waitForPaused(dbg, {
+ shouldWaitForLoadedScopes: !shouldEnableOriginalScopes,
+ });
+ await evalInFrame(tab, testFunction);
+
+ if (shouldEnableOriginalScopes) {
+ await onPaused;
+ await toggleOriginalScopes(dbg);
+ }
+ return onPaused;
+}
+exports.pauseDebugger = pauseDebugger;
+
+async function resume(dbg) {
+ const onResumed = waitForResumed(dbg);
+ dbg.actions.resume();
+ return onResumed;
+}
+exports.resume = resume;
+
+async function step(dbg, stepType) {
+ const resumed = waitForResumed(dbg);
+ dbg.actions[stepType]();
+ await resumed;
+ return waitForPaused(dbg);
+}
+exports.step = step;
+
+async function hoverOnToken(dbg, textToWaitFor, textToHover) {
+ await waitForText(dbg, textToWaitFor);
+ const tokenElement = [
+ ...dbg.win.document.querySelectorAll(".CodeMirror span"),
+ ].find(el => el.textContent === textToHover);
+
+ const mouseOverEvent = new dbg.win.MouseEvent("mouseover", {
+ bubbles: true,
+ cancelable: true,
+ view: dbg.win,
+ });
+ tokenElement.dispatchEvent(mouseOverEvent);
+ const mouseMoveEvent = new dbg.win.MouseEvent("mousemove", {
+ bubbles: true,
+ cancelable: true,
+ view: dbg.win,
+ });
+ tokenElement.dispatchEvent(mouseMoveEvent);
+
+ // Unfortunately, dispatching mouseover/mousemove manually via MouseEvent
+ // isn't enough to toggle the :hover, so manually toggle it.
+ // (For some reason, the EventUtils helpers used by mochitests help)
+ InspectorUtils.addPseudoClassLock(tokenElement, ":hover", true);
+
+ dump("Waiting for the preview popup to show\n");
+ await waitUntil(() =>
+ tokenElement.ownerDocument.querySelector(".preview-popup")
+ );
+
+ const mouseOutEvent = new dbg.win.MouseEvent("mouseout", {
+ bubbles: true,
+ cancelable: true,
+ view: dbg.win,
+ });
+ tokenElement.dispatchEvent(mouseOutEvent);
+
+ const mouseMoveOutEvent = new dbg.win.MouseEvent("mousemove", {
+ bubbles: true,
+ cancelable: true,
+ view: dbg.win,
+ });
+ // See shared-head file, for why picking this element
+ const element = tokenElement.ownerDocument.querySelector(
+ ".debugger-settings-menu-button"
+ );
+ element.dispatchEvent(mouseMoveOutEvent);
+
+ InspectorUtils.removePseudoClassLock(tokenElement, ":hover");
+
+ dump("Waiting for the preview popup to hide\n");
+ await waitUntil(
+ () => !tokenElement.ownerDocument.querySelector(".preview-popup")
+ );
+}
+exports.hoverOnToken = hoverOnToken;
diff --git a/testing/talos/talos/tests/devtools/addon/content/tests/debugger/simple.js b/testing/talos/talos/tests/devtools/addon/content/tests/debugger/simple.js
new file mode 100644
index 0000000000..6c9c81dd53
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/tests/debugger/simple.js
@@ -0,0 +1,34 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const {
+ closeToolboxAndLog,
+ testSetup,
+ testTeardown,
+ SIMPLE_URL,
+} = require("../head");
+const {
+ openDebuggerAndLog,
+ reloadDebuggerAndLog,
+} = require("./debugger-helpers");
+
+const EXPECTED = {
+ sources: 1,
+ file: "simple.html",
+ sourceURL: SIMPLE_URL,
+ text: "This is a simple page",
+ threadsCount: 1,
+};
+
+module.exports = async function () {
+ await testSetup(SIMPLE_URL);
+
+ let toolbox = await openDebuggerAndLog("simple", EXPECTED);
+ await reloadDebuggerAndLog("simple", toolbox, EXPECTED);
+ await closeToolboxAndLog("simple.jsdebugger", toolbox);
+
+ await testTeardown();
+};
diff --git a/testing/talos/talos/tests/devtools/addon/content/tests/head.js b/testing/talos/talos/tests/devtools/addon/content/tests/head.js
new file mode 100644
index 0000000000..559ca21d2d
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/tests/head.js
@@ -0,0 +1,202 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+/**
+ * This helper contains the public API that can be used by DAMP tests.
+ */
+
+const { gDevTools } = require("devtools/client/framework/devtools");
+
+// With Bug 1588203, the talos server supports a dynamic proxy that will
+// redirect any http:// call to the talos server. This means we can use
+// arbitrary domains for our tests.
+// Iframes may be loaded via http://damp.frame1.com, http://damp.frame2.com, etc...
+// or any other domain name that is sensible for a given test.
+// To trigger frames to load in separate processes, they must have a different
+// eTLD+1, which means public suffix (.com, .org, ...) and the label before.
+const BASE_DOMAIN = "http://damp.top.com";
+const PAGES_BASE_URL = BASE_DOMAIN + "/tests/devtools/addon/content/pages/";
+
+exports.PAGES_BASE_URL = PAGES_BASE_URL;
+exports.SIMPLE_URL = PAGES_BASE_URL + "simple.html";
+
+// The test page in fis/tp5n/bild.de contains a modified version of the initial
+// bild.de test website, where same-site iframes have been replaced with remote
+// frames.
+exports.COMPLICATED_URL =
+ "http://www.bild.de-talos/fis/tp5n/bild.de/www.bild.de/index.html";
+
+const { damp } = require("damp-test/damp");
+
+function garbageCollect() {
+ return damp.garbageCollect();
+}
+exports.garbageCollect = garbageCollect;
+
+function runTest(label, record) {
+ return damp.runTest(label, record);
+}
+exports.runTest = runTest;
+
+exports.testSetup = function (url, { disableCache } = {}) {
+ if (disableCache) {
+ // Tests relying on iframes should disable the cache.
+ // `browser.reload()` skips the cache for resources loaded by the main page,
+ // but not for resources loaded by iframes.
+ // Using the cache makes all the `complicated` tests much faster (except for
+ // the first one that has to fill the cache).
+ // To keep the baseline closer to the historical figures, cache is disabled.
+ Services.prefs.setBoolPref("devtools.cache.disabled", true);
+ }
+ return damp.testSetup(url);
+};
+
+exports.testTeardown = function () {
+ // Reset the "devtools.cache.disabled" preference in case it was turned on in
+ // testSetup().
+ Services.prefs.setBoolPref("devtools.cache.disabled", false);
+ return damp.testTeardown();
+};
+
+exports.logTestResult = function (name, value) {
+ damp._results.push({ name, value });
+};
+
+function getBrowserWindow() {
+ return Services.wm.getMostRecentWindow("navigator:browser");
+}
+exports.getBrowserWindow = getBrowserWindow;
+
+function getActiveTab() {
+ return getBrowserWindow().gBrowser.selectedTab;
+}
+exports.getActiveTab = getActiveTab;
+
+exports.getToolbox = function () {
+ let tab = getActiveTab();
+ return gDevTools.getToolboxForTab(tab);
+};
+
+/**
+ * Wait for any pending paint.
+ * The tool may have touched the DOM elements at the very end of the current test.
+ * We should ensure waiting for the reflow related to these changes.
+ */
+async function waitForPendingPaints(toolbox) {
+ let panel = toolbox.getCurrentPanel();
+ // All panels have its own way of exposing their window object...
+ let window = panel.panelWin || panel._frameWindow || panel.panelWindow;
+ return damp.waitForPendingPaints(window);
+}
+exports.waitForPendingPaints = waitForPendingPaints;
+
+/*
+ * Waits until the element targeted by the provided selector
+ * becomes available
+ */
+exports.waitForDOMElement = async function (target, selector) {
+ return waitForDOMPredicate(target, () => target.querySelector(selector));
+};
+
+/*
+ * Wait for the predicate condition to be a truthy
+ */
+function waitForDOMPredicate(
+ target,
+ predicate,
+ options = { attributes: true, childList: true, subtree: true }
+) {
+ let rv = predicate();
+ if (rv) {
+ return Promise.resolve(rv);
+ }
+ return new Promise(resolve => {
+ const observer = new target.ownerGlobal.MutationObserver(mutations => {
+ rv = predicate();
+ if (rv) {
+ resolve(rv);
+ observer.disconnect();
+ }
+ });
+
+ observer.observe(target, options);
+ });
+}
+
+exports.waitForDOMPredicate = waitForDOMPredicate;
+
+const openToolbox = async function (tool = "webconsole", onLoad) {
+ dump(`Open toolbox on '${tool}'\n`);
+ let tab = getActiveTab();
+
+ dump(`Open toolbox - Call showToolboxForTab\n`);
+ const toolbox = await gDevTools.showToolboxForTab(tab, { toolId: tool });
+
+ if (typeof onLoad == "function") {
+ dump(`Open toolbox - Wait for custom onLoad callback\n`);
+ let panel = await toolbox.getPanelWhenReady(tool);
+ await onLoad(toolbox, panel);
+ }
+
+ return toolbox;
+};
+exports.openToolbox = openToolbox;
+
+exports.closeToolbox = async function () {
+ let tab = getActiveTab();
+ let toolbox = gDevTools.getToolboxForTab(tab);
+ await toolbox.target.client.waitForRequestsToSettle();
+ await gDevTools.closeToolboxForTab(tab);
+};
+
+// Settle test isn't recorded, it only prints the pending duration
+async function recordPendingPaints(name, toolbox) {
+ dump(`Wait for pending paints on '${name}'\n`);
+ const test = runTest(`${name}.settle.DAMP`, false);
+ await waitForPendingPaints(toolbox);
+ test.done();
+}
+exports.recordPendingPaints = recordPendingPaints;
+
+exports.openToolboxAndLog = async function (name, tool, onLoad) {
+ const test = runTest(`${name}.open.DAMP`);
+
+ let toolbox = await openToolbox(tool, onLoad);
+ test.done();
+
+ await recordPendingPaints(`${name}.open`, toolbox);
+
+ // Force freeing memory after toolbox open as it creates a lot of objects
+ // and for complex documents, it introduces a GC that runs during 'reload' test.
+ await garbageCollect();
+
+ return toolbox;
+};
+
+exports.closeToolboxAndLog = async function (name, toolbox) {
+ let { target } = toolbox;
+ dump(`Close toolbox on '${name}'\n`);
+ await target.client.waitForRequestsToSettle();
+
+ let test = runTest(`${name}.close.DAMP`);
+ await toolbox.destroy();
+ test.done();
+};
+
+exports.reloadPageAndLog = async function (name, toolbox, onReload) {
+ dump(`Reload page on '${name}'\n`);
+ let test = runTest(`${name}.reload.DAMP`);
+ await damp.reloadPage(onReload);
+ test.done();
+
+ await recordPendingPaints(`${name}.reload`, toolbox);
+};
+
+exports.isFissionEnabled = function () {
+ return Services.appinfo.fissionAutostart;
+};
+
+exports.waitForTick = () => new Promise(res => setTimeout(res, 0));
diff --git a/testing/talos/talos/tests/devtools/addon/content/tests/inspector/cold-open.js b/testing/talos/talos/tests/devtools/addon/content/tests/inspector/cold-open.js
new file mode 100644
index 0000000000..11d07fee4b
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/tests/inspector/cold-open.js
@@ -0,0 +1,21 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const {
+ openToolboxAndLog,
+ closeToolbox,
+ testSetup,
+ testTeardown,
+ SIMPLE_URL,
+} = require("damp-test/tests/head");
+
+// This simple test is only called once using the flag coldRun
+module.exports = async function () {
+ await testSetup(SIMPLE_URL);
+ await openToolboxAndLog("cold.inspector", "inspector");
+ await closeToolbox();
+ await testTeardown();
+};
diff --git a/testing/talos/talos/tests/devtools/addon/content/tests/inspector/complicated.js b/testing/talos/talos/tests/devtools/addon/content/tests/inspector/complicated.js
new file mode 100644
index 0000000000..41fb45b86a
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/tests/inspector/complicated.js
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const {
+ reloadInspectorAndLog,
+} = require("damp-test/tests/inspector/inspector-helpers");
+const {
+ openToolboxAndLog,
+ closeToolboxAndLog,
+ testSetup,
+ testTeardown,
+ COMPLICATED_URL,
+} = require("damp-test/tests/head");
+
+module.exports = async function () {
+ await testSetup(COMPLICATED_URL);
+
+ let toolbox = await openToolboxAndLog("complicated.inspector", "inspector");
+ await reloadInspectorAndLog("complicated", toolbox);
+ await closeToolboxAndLog("complicated.inspector", toolbox);
+
+ await testTeardown();
+};
diff --git a/testing/talos/talos/tests/devtools/addon/content/tests/inspector/custom.js b/testing/talos/talos/tests/devtools/addon/content/tests/inspector/custom.js
new file mode 100644
index 0000000000..b21c64f833
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/tests/inspector/custom.js
@@ -0,0 +1,269 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const {
+ reloadInspectorAndLog,
+ selectNodeFront,
+} = require("damp-test/tests/inspector/inspector-helpers");
+const {
+ closeToolboxAndLog,
+ garbageCollect,
+ recordPendingPaints,
+ runTest,
+ testSetup,
+ testTeardown,
+ PAGES_BASE_URL,
+} = require("damp-test/tests/head");
+
+const { gDevTools } = require("devtools/client/framework/devtools");
+
+const TEST_URL = PAGES_BASE_URL + "custom/inspector/index.html";
+
+module.exports = async function () {
+ const tab = await testSetup(TEST_URL, { disableCache: true });
+
+ const domReference = await getContentDOMReference("#initial-node", tab);
+ let toolbox = await openToolboxWithInspectNode(domReference, tab);
+
+ await reloadInspectorAndLog("custom", toolbox);
+
+ await selectNodeWithManyRulesAndLog(toolbox);
+
+ await selectNodeWithManyVariablesAndLog(toolbox);
+
+ await selectNodeWithDeeplyNestedRuleAndLog(toolbox, tab);
+
+ await collapseExpandAllAndLog(toolbox);
+
+ await closeToolboxAndLog("custom.inspector", toolbox);
+
+ // Bug 1590308: Wait one second and force an additional GC to reduce the
+ // side effects of the inspector custom test on the rest of the suite.
+ await new Promise(r => setTimeout(r, 1000));
+ await garbageCollect();
+
+ await testTeardown();
+};
+
+// Retrieve the contentDOMReference for a provided selector that should be
+// available in the content page of the provided tab.
+async function getContentDOMReference(selector, tab) {
+ dump("Retrieve the ContentDOMReference for a given selector");
+ return new Promise(resolve => {
+ const messageManager = tab.linkedBrowser.messageManager;
+
+ messageManager.addMessageListener("get-dom-reference-done", e => {
+ const domReference = e.data;
+ resolve(domReference);
+ });
+
+ const contentMethod = function (_selector) {
+ const { ContentDOMReference } = ChromeUtils.importESModule(
+ "resource://gre/modules/ContentDOMReference.sys.mjs"
+ );
+ const iframe = content.document.querySelector("iframe");
+ const win = iframe.contentWindow;
+ const element = win.document.querySelector(_selector);
+ const domReference = ContentDOMReference.get(element);
+ sendAsyncMessage("get-dom-reference-done", domReference);
+ };
+
+ const wrappedMethod = encodeURIComponent(`function () {
+ (${contentMethod})("${selector}");
+ }`);
+
+ messageManager.loadFrameScript(`data:,(${wrappedMethod})()`, false);
+ });
+}
+
+async function openToolboxWithInspectNode(domReference, tab) {
+ dump("Open the toolbox using InspectNode\n");
+
+ const test = runTest(`custom.inspector.open.DAMP`);
+
+ // Wait for "toolbox-ready" to easily get access to the created toolbox.
+ const onToolboxReady = gDevTools.once("toolbox-ready");
+
+ await gDevTools.inspectNode(tab, domReference);
+ const toolbox = await onToolboxReady;
+ test.done();
+
+ // Wait for all pending paints to settle.
+ await recordPendingPaints("custom.inspector.open", toolbox);
+
+ // Toolbox creates many objects. See comment in head.js openToolboxAndLog.
+ await garbageCollect();
+
+ return toolbox;
+}
+
+async function getRootNodeFront(inspector) {
+ const root = await inspector.walker.getRootNode();
+ const iframeNodeFront = await inspector.walker.querySelector(root, "iframe");
+
+ // Using iframes, retrieve the document in the iframe front children.
+ const { nodes } = await inspector.walker.children(iframeNodeFront);
+ return nodes[0];
+}
+
+/**
+ * Measure the time necessary to select a node and display the rule view when many rules
+ * match the element.
+ */
+async function selectNodeWithManyRulesAndLog(toolbox) {
+ let inspector = toolbox.getPanel("inspector");
+
+ let initialNodeFront = inspector.selection.nodeFront;
+
+ // Retrieve the node front for the test node.
+ let root = await getRootNodeFront(inspector);
+ let referenceNodeFront = await root.walkerFront.querySelector(
+ root,
+ ".no-css-rules"
+ );
+ let testNodeFront = await root.walkerFront.querySelector(
+ root,
+ ".many-css-rules"
+ );
+
+ // Select test node and measure the time to display the rule view with many rules.
+ dump("Selecting .many-css-rules test node front\n");
+ let test = runTest("custom.inspector.manyrules.selectnode");
+ await selectNodeFront(inspector, testNodeFront);
+ test.done();
+
+ // Select reference node and measure the time to empty the rule view.
+ dump("Move the selection to a node with no rules\n");
+ test = runTest("custom.inspector.manyrules.deselectnode");
+ await selectNodeFront(inspector, referenceNodeFront);
+ test.done();
+
+ await selectNodeFront(inspector, initialNodeFront);
+}
+
+/**
+ * Measure the time necessary to select a node and display the rule view when many
+ * CSS variables apply to the element.
+ */
+async function selectNodeWithManyVariablesAndLog(toolbox) {
+ let inspector = toolbox.getPanel("inspector");
+ let initialNodeFront = inspector.selection.nodeFront;
+
+ // Retrieve the node front for the test node.
+ let root = await getRootNodeFront(inspector);
+ let testNodeFront = await root.walkerFront.querySelector(
+ root,
+ ".many-css-variables"
+ );
+
+ // Select test node and measure the time to display the rule view with many variables.
+ dump("Selecting .many-css-variables test node front\n");
+ let test = runTest("custom.inspector.manycssvariables.selectnode");
+ await selectNodeFront(inspector, testNodeFront);
+ test.done();
+
+ await selectNodeFront(inspector, initialNodeFront);
+}
+
+/**
+ * Measure the time necessary to select a node and display the rule view when a rule is
+ * deeply nested
+ */
+async function selectNodeWithDeeplyNestedRuleAndLog(toolbox, tab) {
+ let inspector = toolbox.getPanel("inspector");
+ let initialNodeFront = inspector.selection.nodeFront;
+
+ // Retrieve the node front for the test node.
+ let root = await getRootNodeFront(inspector);
+ let testNodeFront = await root.walkerFront.querySelector(
+ root,
+ ".deeply-nested"
+ );
+
+ const nestedRuleDepth = 19;
+ const deeplyNestedRule = `section {
+ ${`&.nesting , &.non-matching-selector {`.repeat(nestedRuleDepth)}
+ .deeply-nested {
+ color: tomato;
+ }
+ ${`}`.repeat(nestedRuleDepth)}
+ }`;
+
+ // Load a frame script using a data URI so we can run a script inside of the content process
+ const messageManager = tab.linkedBrowser.messageManager;
+ await messageManager.loadFrameScript(
+ "data:,(" +
+ encodeURIComponent(`
+ function () {
+ const iframe = content.document.querySelector("iframe");
+ const win = iframe.contentWindow;
+ const doc = win.document;
+
+ const style = doc.createElement("style");
+ style.appendChild(doc.createTextNode(\`${deeplyNestedRule}\`));
+ doc.head.appendChild(style);
+ }`) +
+ ")()",
+ false
+ );
+
+ // Select test node and measure the time to display the rule view with deeply nested rule.
+ dump("Selecting .deeply-nested test node front\n");
+ const selectNodeTest = runTest(
+ "custom.inspector.deeplynestedrule.selectnode"
+ );
+ await selectNodeFront(inspector, testNodeFront);
+ selectNodeTest.done();
+
+ // Resize window and measure the time it takes for the rule view to refresh.
+ const onRuleViewRefreshed = inspector.once("rule-view-refreshed");
+ const refreshTest = runTest("custom.inspector.deeplynestedrule.refresh");
+ toolbox.topWindow.resizeBy(null, 10);
+ await onRuleViewRefreshed;
+ refreshTest.done();
+
+ await selectNodeFront(inspector, initialNodeFront);
+}
+
+async function collapseExpandAllAndLog(toolbox) {
+ let inspector = toolbox.getPanel("inspector");
+
+ let initialNodeFront = inspector.selection.nodeFront;
+ let root = await getRootNodeFront(inspector);
+
+ dump("Select expand-many-children node\n");
+ let many = await root.walkerFront.querySelector(
+ root,
+ ".expand-many-children"
+ );
+ await selectNodeFront(inspector, many);
+
+ dump("Expand all children of expand-many-children\n");
+ let test = runTest("custom.inspector.expandall.manychildren");
+ await inspector.markup.expandAll(many);
+ test.done();
+
+ dump("Collapse all children of expand-many-children\n");
+ test = runTest("custom.inspector.collapseall.manychildren");
+ await inspector.markup.collapseAll(many);
+ test.done();
+
+ dump("Select expand-balanced node\n");
+ let balanced = await root.walkerFront.querySelector(root, ".expand-balanced");
+ await selectNodeFront(inspector, balanced);
+
+ dump("Expand all children of expand-balanced\n");
+ test = runTest("custom.inspector.expandall.balanced");
+ await inspector.markup.expandAll(balanced);
+ test.done();
+
+ dump("Collapse all children of expand-balanced\n");
+ test = runTest("custom.inspector.collapseall.balanced");
+ await inspector.markup.collapseAll(balanced);
+ test.done();
+
+ await selectNodeFront(inspector, initialNodeFront);
+}
diff --git a/testing/talos/talos/tests/devtools/addon/content/tests/inspector/inspector-helpers.js b/testing/talos/talos/tests/devtools/addon/content/tests/inspector/inspector-helpers.js
new file mode 100644
index 0000000000..fd64202071
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/tests/inspector/inspector-helpers.js
@@ -0,0 +1,28 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const { reloadPageAndLog } = require("damp-test/tests/head");
+
+exports.reloadInspectorAndLog = async function (label, toolbox) {
+ let onReload = async function () {
+ let inspector = toolbox.getPanel("inspector");
+ // First wait for markup view to be loaded against the new root node
+ await inspector.once("new-root");
+ // Then wait for inspector to be updated
+ await inspector.once("inspector-updated");
+ };
+
+ await reloadPageAndLog(label + ".inspector", toolbox, onReload);
+};
+
+/*
+ * Helper to select a node front and wait for the ruleview to be refreshed.
+ */
+exports.selectNodeFront = function (inspector, nodeFront) {
+ let onRuleViewRefreshed = inspector.once("rule-view-refreshed");
+ inspector.selection.setNodeFront(nodeFront);
+ return onRuleViewRefreshed;
+};
diff --git a/testing/talos/talos/tests/devtools/addon/content/tests/inspector/layout.js b/testing/talos/talos/tests/devtools/addon/content/tests/inspector/layout.js
new file mode 100644
index 0000000000..138604497e
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/tests/inspector/layout.js
@@ -0,0 +1,63 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const {
+ openToolbox,
+ closeToolbox,
+ runTest,
+ testSetup,
+ testTeardown,
+ SIMPLE_URL,
+} = require("damp-test/tests/head");
+
+module.exports = async function () {
+ let tab = await testSetup(SIMPLE_URL);
+ let messageManager = tab.linkedBrowser.messageManager;
+
+ // Backup current sidebar tab preference
+ let sidebarTab = Services.prefs.getCharPref(
+ "devtools.inspector.activeSidebar"
+ );
+
+ // Set layoutview as the current inspector sidebar tab.
+ Services.prefs.setCharPref("devtools.inspector.activeSidebar", "layoutview");
+
+ // Setup test page. It is a simple page containing 5000 regular nodes and 10 grid
+ // containers.
+ await new Promise(resolve => {
+ messageManager.addMessageListener("setup-test-done", resolve);
+
+ const NODES = 5000;
+ const GRID_NODES = 10;
+ messageManager.loadFrameScript(
+ "data:,(" +
+ encodeURIComponent(
+ `function () {
+ let div = content.document.createElement("div");
+ div.innerHTML =
+ new Array(${NODES}).join("<div></div>") +
+ new Array(${GRID_NODES}).join("<div style='display:grid'></div>");
+ content.document.body.appendChild(div);
+ sendSyncMessage("setup-test-done");
+ }`
+ ) +
+ ")()",
+ false
+ );
+ });
+
+ // Record the time needed to open the toolbox.
+ let test = runTest("inspector.layout.open");
+ await openToolbox("inspector");
+ test.done();
+
+ await closeToolbox();
+
+ // Restore sidebar tab preference.
+ Services.prefs.setCharPref("devtools.inspector.activeSidebar", sidebarTab);
+
+ await testTeardown();
+};
diff --git a/testing/talos/talos/tests/devtools/addon/content/tests/inspector/mutations.js b/testing/talos/talos/tests/devtools/addon/content/tests/inspector/mutations.js
new file mode 100644
index 0000000000..e5458729cc
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/tests/inspector/mutations.js
@@ -0,0 +1,74 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const {
+ openToolbox,
+ closeToolbox,
+ runTest,
+ testSetup,
+ testTeardown,
+ SIMPLE_URL,
+} = require("damp-test/tests/head");
+
+/**
+ * Measure the time necessary to perform successive childList mutations in the content
+ * page and update the markup-view accordingly.
+ */
+module.exports = async function () {
+ let tab = await testSetup(SIMPLE_URL);
+ let messageManager = tab.linkedBrowser.messageManager;
+
+ let toolbox = await openToolbox("inspector");
+ let inspector = toolbox.getPanel("inspector");
+
+ // Test with n=LIMIT mutations, with t=DELAY ms between each one.
+ const LIMIT = 100;
+ const DELAY = 5;
+
+ messageManager.loadFrameScript(
+ "data:,(" +
+ encodeURIComponent(
+ `function () {
+ const LIMIT = ${LIMIT};
+ addMessageListener("start-mutations-test", function () {
+ let addElement = function(index) {
+ if (index == LIMIT) {
+ // LIMIT was reached, stop adding elements.
+ return;
+ }
+ let div = content.document.createElement("div");
+ content.document.body.appendChild(div);
+ content.setTimeout(() => addElement(index + 1), ${DELAY});
+ };
+ addElement(0);
+ });
+ }`
+ ) +
+ ")()",
+ false
+ );
+
+ let test = runTest("inspector.mutations");
+
+ await new Promise(resolve => {
+ let childListMutationsCounter = 0;
+ inspector.on("markupmutation", mutations => {
+ let childListMutations = mutations.filter(m => m.type === "childList");
+ childListMutationsCounter += childListMutations.length;
+ if (childListMutationsCounter === LIMIT) {
+ // Wait until we received exactly n=LIMIT mutations in the markup view.
+ resolve();
+ }
+ });
+
+ messageManager.sendAsyncMessage("start-mutations-test");
+ });
+
+ test.done();
+ await closeToolbox();
+
+ await testTeardown();
+};
diff --git a/testing/talos/talos/tests/devtools/addon/content/tests/inspector/simple.js b/testing/talos/talos/tests/devtools/addon/content/tests/inspector/simple.js
new file mode 100644
index 0000000000..1b95b96a81
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/tests/inspector/simple.js
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const {
+ reloadInspectorAndLog,
+} = require("damp-test/tests/inspector/inspector-helpers");
+const {
+ openToolboxAndLog,
+ closeToolboxAndLog,
+ testSetup,
+ testTeardown,
+ SIMPLE_URL,
+} = require("damp-test/tests/head");
+
+module.exports = async function () {
+ await testSetup(SIMPLE_URL);
+
+ let toolbox = await openToolboxAndLog("simple.inspector", "inspector");
+ await reloadInspectorAndLog("simple", toolbox);
+ await closeToolboxAndLog("simple.inspector", toolbox);
+
+ await testTeardown();
+};
diff --git a/testing/talos/talos/tests/devtools/addon/content/tests/netmonitor/cold-open.js b/testing/talos/talos/tests/devtools/addon/content/tests/netmonitor/cold-open.js
new file mode 100644
index 0000000000..06225196c4
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/tests/netmonitor/cold-open.js
@@ -0,0 +1,20 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const {
+ openToolboxAndLog,
+ closeToolbox,
+ testSetup,
+ testTeardown,
+ SIMPLE_URL,
+} = require("damp-test/tests/head");
+
+module.exports = async function () {
+ await testSetup(SIMPLE_URL);
+ await openToolboxAndLog("cold.netmonitor", "netmonitor");
+ await closeToolbox();
+ await testTeardown();
+};
diff --git a/testing/talos/talos/tests/devtools/addon/content/tests/netmonitor/complicated.js b/testing/talos/talos/tests/devtools/addon/content/tests/netmonitor/complicated.js
new file mode 100644
index 0000000000..d1569f6fc6
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/tests/netmonitor/complicated.js
@@ -0,0 +1,52 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const {
+ openToolboxAndLog,
+ closeToolboxAndLog,
+ reloadPageAndLog,
+ testSetup,
+ testTeardown,
+ COMPLICATED_URL,
+} = require("damp-test/tests/head");
+const {
+ exportHar,
+ waitForNetworkRequests,
+ openResponseDetailsPanel,
+} = require("damp-test/tests/netmonitor/netmonitor-helpers");
+
+const EXPECTED_REQUESTS = {
+ min: 230,
+ max: 280,
+};
+
+module.exports = async function () {
+ await testSetup(COMPLICATED_URL);
+ const toolbox = await openToolboxAndLog(
+ "complicated.netmonitor",
+ "netmonitor"
+ );
+
+ const requestsDone = waitForNetworkRequests(
+ "complicated.netmonitor",
+ toolbox,
+ EXPECTED_REQUESTS.min,
+ EXPECTED_REQUESTS.max
+ );
+ await reloadPageAndLog("complicated.netmonitor", toolbox);
+ await requestsDone;
+
+ await exportHar("complicated.netmonitor", toolbox);
+
+ await openResponseDetailsPanel("complicated.netmonitor", toolbox);
+
+ await closeToolboxAndLog("complicated.netmonitor", toolbox);
+
+ // Bug 1503822, wait one second on test end to prevent a crash during firefox shutdown.
+ await new Promise(r => setTimeout(r, 1000));
+
+ await testTeardown();
+};
diff --git a/testing/talos/talos/tests/devtools/addon/content/tests/netmonitor/custom.js b/testing/talos/talos/tests/devtools/addon/content/tests/netmonitor/custom.js
new file mode 100644
index 0000000000..bca3e1e3d7
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/tests/netmonitor/custom.js
@@ -0,0 +1,104 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const {
+ openToolboxAndLog,
+ reloadPageAndLog,
+ closeToolboxAndLog,
+ testSetup,
+ testTeardown,
+ PAGES_BASE_URL,
+} = require("damp-test/tests/head");
+
+const {
+ exportHar,
+ waitForNetworkRequests,
+} = require("damp-test/tests/netmonitor/netmonitor-helpers");
+
+// These numbers controls the number of requests we do in the test
+const bigFileRequests = 20,
+ postDataRequests = 20,
+ xhrRequests = 50;
+// These other numbers only state how many requests the test do,
+// we have to keep them in sync with netmonitor.html static content
+const expectedSyncCssRequests = 10,
+ expectedSyncJSRequests = 10;
+// There is 10 request for the html document and 10 for the js files
+// But the css file is loaded only once, the others are cached
+const expectedSyncIframeRequests = 2 * 10 + 1;
+const expectedRequests =
+ 1 + // This is for the top level index.html document
+ expectedSyncCssRequests +
+ expectedSyncJSRequests +
+ expectedSyncIframeRequests +
+ bigFileRequests +
+ postDataRequests +
+ xhrRequests;
+
+const CUSTOM_URL = PAGES_BASE_URL + "custom/netmonitor/index.html";
+
+module.exports = async function () {
+ const url =
+ CUSTOM_URL +
+ `?bigFileRequests=${bigFileRequests}&postDataRequests=${postDataRequests}&xhrRequests=${xhrRequests}`;
+ let tab = await testSetup(url);
+ let { messageManager } = tab.linkedBrowser;
+ let onReady = new Promise(done => {
+ messageManager.addMessageListener("ready", done);
+ });
+ messageManager.loadFrameScript(
+ "data:,(" +
+ encodeURIComponent(
+ `function () {
+ if (content.wrappedJSObject.isReady) {
+ sendAsyncMessage("ready");
+ } else {
+ content.addEventListener("message", function () {
+ sendAsyncMessage("ready");
+ });
+ }
+ }`
+ ) +
+ ")()",
+ true
+ );
+
+ // We wait for a custom "ready" event in order to ensure all the requests
+ // done during document load are finished before opening the netmonitor.
+ // Otherwise some still pending requests will be displayed on toolbox open
+ // and the number of requests being displayed will be random and introduce noise
+ // in custom.netmonitor.open
+ dump("Waiting for document to be ready and have sent all its requests\n");
+ await onReady;
+
+ const toolbox = await openToolboxAndLog("custom.netmonitor", "netmonitor");
+
+ // Waterfall will only work after an idle event. Its width is only set after idle.
+ // Before that, it doesn't render.
+ dump("Waiting for idle in order to ensure running reload with a waterfall\n");
+ let window = toolbox.getCurrentPanel().panelWin;
+ await new Promise(done => {
+ window.requestIdleCallback(done);
+ });
+
+ const requestsDone = waitForNetworkRequests(
+ "custom.netmonitor",
+ toolbox,
+ expectedRequests,
+ expectedRequests
+ );
+ await reloadPageAndLog("custom.netmonitor", toolbox);
+ await requestsDone;
+
+ await exportHar("custom.netmonitor", toolbox);
+
+ await closeToolboxAndLog("custom.netmonitor", toolbox);
+
+ // Bug 1503822, wait one second on test end to prevent a crash during firefox shutdown.
+ await new Promise(r => setTimeout(r, 1000));
+
+ await testTeardown();
+};
diff --git a/testing/talos/talos/tests/devtools/addon/content/tests/netmonitor/netmonitor-helpers.js b/testing/talos/talos/tests/devtools/addon/content/tests/netmonitor/netmonitor-helpers.js
new file mode 100644
index 0000000000..4b860bfd1b
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/tests/netmonitor/netmonitor-helpers.js
@@ -0,0 +1,181 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const { EVENTS } = require("devtools/client/netmonitor/src/constants");
+const Actions = require("devtools/client/netmonitor/src/actions/index");
+const {
+ getToolbox,
+ runTest,
+ waitForDOMElement,
+} = require("damp-test/tests/head");
+
+/**
+ * Start monitoring all incoming update events about network requests and wait until
+ * a complete info about all requests is received. (We wait for the timings info
+ * explicitly, because that's always the last piece of information that is received.)
+ *
+ * This method is designed to wait for network requests that are issued during a page
+ * load, when retrieving page resources (scripts, styles, images). It has certain
+ * assumptions that can make it unsuitable for other types of network communication:
+ * - it waits for at least one network request to start and finish before returning
+ * - it waits only for request that were issued after it was called. Requests that are
+ * already in mid-flight will be ignored.
+ * - the request start and end times are overlapping. If a new request starts a moment
+ * after the previous one was finished, the wait will be ended in the "interim"
+ * period.
+ *
+ * We might need to allow a range of requests because even though we run with
+ * cache disabled, different loads can still be coalesced, and whether they're
+ * coalesced or not depends on timing.
+ *
+ * @returns a promise that resolves when the wait is done.
+ */
+async function waitForAllRequestsFinished(
+ minExpectedRequests,
+ maxExpectedRequests
+) {
+ let toolbox = getToolbox();
+ let window = toolbox.getCurrentPanel().panelWin;
+
+ return new Promise(resolve => {
+ // Explicitly waiting for specific number of requests arrived
+ let payloadReady = 0;
+ let resolveWithLessThanMaxRequestsTimer = null;
+
+ function onPayloadReady(_, id) {
+ payloadReady++;
+ dump(`Waiting for ${maxExpectedRequests - payloadReady} requests\n`);
+ maybeResolve();
+ }
+
+ function doResolve() {
+ // All requests are done - unsubscribe from events and resolve!
+ window.api.off(EVENTS.PAYLOAD_READY, onPayloadReady);
+ // Resolve after current frame
+ setTimeout(resolve, 1);
+ }
+
+ function maybeResolve() {
+ if (resolveWithLessThanMaxRequestsTimer) {
+ clearTimeout(resolveWithLessThanMaxRequestsTimer);
+ resolveWithLessThanMaxRequestsTimer = null;
+ }
+
+ // Have all the requests finished yet?
+ if (payloadReady >= maxExpectedRequests) {
+ doResolve();
+ return;
+ }
+
+ // If we're past the minimum threshold, wait to see if more requests come
+ // up, but resolve otherwise.
+ if (payloadReady >= minExpectedRequests) {
+ resolveWithLessThanMaxRequestsTimer = setTimeout(doResolve, 1000);
+ }
+ }
+
+ window.api.on(EVENTS.PAYLOAD_READY, onPayloadReady);
+ });
+}
+
+function waitForLoad(iframe) {
+ return new Promise(resolve => iframe.addEventListener("load", resolve));
+}
+
+function clickElement(el, win) {
+ const clickEvent = new win.MouseEvent("click", {
+ bubbles: true,
+ cancelable: true,
+ view: win,
+ });
+ el.dispatchEvent(clickEvent);
+}
+
+function mouseDownElement(el, win) {
+ const mouseEvent = new win.MouseEvent("mousedown", {
+ bubbles: true,
+ cancelable: true,
+ view: win,
+ });
+ el.dispatchEvent(mouseEvent);
+}
+
+exports.waitForNetworkRequests = async function (
+ label,
+ toolbox,
+ minExpectedRequests,
+ maxExpectedRequests = minExpectedRequests
+) {
+ let test = runTest(label + ".requestsFinished.DAMP");
+ await waitForAllRequestsFinished(minExpectedRequests, maxExpectedRequests);
+ test.done();
+};
+
+exports.exportHar = async function (label, toolbox) {
+ let test = runTest(label + ".exportHar");
+
+ // Export HAR from the Network panel.
+ await toolbox.getHARFromNetMonitor();
+
+ test.done();
+};
+
+exports.openResponseDetailsPanel = async function (label, toolbox) {
+ const win = toolbox.getCurrentPanel().panelWin;
+ const { document, store } = win;
+ const monitor = document.querySelector(".monitor-panel");
+
+ // html test
+ const testHtml = runTest(label + ".responsePanel.html");
+
+ store.dispatch(Actions.batchEnable(false));
+
+ const waitForDetailsBar = waitForDOMElement(monitor, ".network-details-bar");
+ store.dispatch(Actions.toggleNetworkDetails());
+ await waitForDetailsBar;
+
+ const sideBar = document.querySelector(".network-details-bar");
+ const iframeSelector = "#response-panel .html-preview iframe";
+ const waitForIframe = waitForDOMElement(sideBar, iframeSelector);
+
+ clickElement(document.querySelector("#response-tab"), win);
+
+ await waitForIframe;
+ await waitForLoad(document.querySelector(iframeSelector));
+
+ testHtml.done();
+
+ // close the sidebar
+ store.dispatch(Actions.toggleNetworkDetails());
+
+ // Sort the request list on the size column (in descending order)
+ // to make sure we use the largest response.
+ const sizeColumnHeader = document.querySelector(
+ "#requests-list-contentSize-button"
+ );
+ const waitForDesc = waitForDOMElement(
+ sizeColumnHeader.parentNode,
+ "#requests-list-contentSize-button[data-sorted='descending']"
+ );
+ // Click the size header twice to make sure the requests
+ // are sorted in descending order.
+ clickElement(sizeColumnHeader, win);
+ clickElement(sizeColumnHeader, win);
+ await waitForDesc;
+
+ // editor test
+ const testEditor = runTest(label + ".responsePanel.editor");
+ const request = document.querySelectorAll(".request-list-item")[0];
+ const waitForEditor = waitForDOMElement(
+ monitor,
+ "#response-panel .CodeMirror.cm-s-mozilla"
+ );
+ mouseDownElement(request, win);
+ await waitForEditor;
+
+ testEditor.done();
+ store.dispatch(Actions.toggleNetworkDetails());
+};
diff --git a/testing/talos/talos/tests/devtools/addon/content/tests/netmonitor/simple.js b/testing/talos/talos/tests/devtools/addon/content/tests/netmonitor/simple.js
new file mode 100644
index 0000000000..700e8b2799
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/tests/netmonitor/simple.js
@@ -0,0 +1,38 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const {
+ openToolboxAndLog,
+ closeToolboxAndLog,
+ reloadPageAndLog,
+ testSetup,
+ testTeardown,
+ SIMPLE_URL,
+} = require("damp-test/tests/head");
+const {
+ exportHar,
+ waitForNetworkRequests,
+} = require("damp-test/tests/netmonitor/netmonitor-helpers");
+
+const EXPECTED_REQUESTS = 1;
+
+module.exports = async function () {
+ await testSetup(SIMPLE_URL);
+ const toolbox = await openToolboxAndLog("simple.netmonitor", "netmonitor");
+
+ const requestsDone = waitForNetworkRequests(
+ "simple.netmonitor",
+ toolbox,
+ EXPECTED_REQUESTS
+ );
+ await reloadPageAndLog("simple.netmonitor", toolbox);
+ await requestsDone;
+
+ await exportHar("simple.netmonitor", toolbox);
+
+ await closeToolboxAndLog("simple.netmonitor", toolbox);
+ await testTeardown();
+};
diff --git a/testing/talos/talos/tests/devtools/addon/content/tests/server/actor.js b/testing/talos/talos/tests/devtools/addon/content/tests/server/actor.js
new file mode 100644
index 0000000000..7180365c40
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/tests/server/actor.js
@@ -0,0 +1,23 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const { Actor } = require("devtools/shared/protocol");
+const { dampTestSpec } = require("damp-test/tests/server/spec");
+
+class DampTestActor extends Actor {
+ constructor(conn) {
+ super(conn, dampTestSpec);
+ }
+
+ testMethod(arg, { option }, arraySize) {
+ // Emit an event with second argument's option.
+ this.emit("testEvent", option);
+
+ // Returns back an array of repetition of first argument.
+ return arg;
+ }
+}
+exports.DampTestActor = DampTestActor;
diff --git a/testing/talos/talos/tests/devtools/addon/content/tests/server/protocol.js b/testing/talos/talos/tests/devtools/addon/content/tests/server/protocol.js
new file mode 100644
index 0000000000..7cbd58d9dd
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/tests/server/protocol.js
@@ -0,0 +1,91 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const {
+ openToolbox,
+ closeToolbox,
+ testSetup,
+ testTeardown,
+ runTest,
+ SIMPLE_URL,
+} = require("damp-test/tests/head");
+
+const protocol = require("devtools/shared/protocol");
+const { FrontClassWithSpec } = protocol;
+const { dampTestSpec } = require("damp-test/tests/server/spec");
+
+// Test parameters
+const ATTRIBUTES = 10;
+const STRING_SIZE = 1000;
+const ARRAY_SIZE = 50;
+const REPEAT = 300;
+
+class DampTestFront extends FrontClassWithSpec(dampTestSpec) {
+ constructor(client) {
+ super(client);
+
+ // Attribute name from which to retrieve the actorID out of the target actor's form
+ this.formAttributeName = "dampTestActor";
+ }
+}
+protocol.registerFront(DampTestFront);
+
+module.exports = async function () {
+ let tab = await testSetup(SIMPLE_URL);
+ let messageManager = tab.linkedBrowser.messageManager;
+
+ // Register a test actor within the content process
+ messageManager.loadFrameScript(
+ "data:,(" +
+ encodeURIComponent(
+ `function () {
+ const { require } = ChromeUtils.importESModule("resource://devtools/shared/loader/Loader.sys.mjs");
+
+ const { ActorRegistry } = require("devtools/server/actors/utils/actor-registry");
+ ActorRegistry.registerModule("damp-test/tests/server/actor.js", {
+ prefix: "dampTest",
+ constructor: "DampTestActor",
+ type: { target: true }
+ });
+ }`
+ ) +
+ ")()",
+ true
+ );
+
+ // Create test payloads
+ let bigString = "";
+ for (let i = 0; i < STRING_SIZE; i++) {
+ bigString += "x";
+ }
+
+ let bigObject = {};
+ for (let i = 0; i < ATTRIBUTES; i++) {
+ bigObject["attribute-" + i] = bigString;
+ }
+
+ let bigArray = Array.from({ length: ARRAY_SIZE }, (_, i) => bigObject);
+
+ // Open against options to avoid noise from tools
+ let toolbox = await openToolbox("options");
+
+ // Instanciate a front for this test actor
+ let { target } = toolbox;
+ let front = await target.getFront("dampTest");
+
+ // Execute the core of this test, call one method multiple times
+ // and listen for an event sent by this method
+ let test = runTest("server.protocoljs.DAMP");
+ for (let i = 0; i < REPEAT; i++) {
+ let onEvent = front.once("testEvent");
+ await front.testMethod(bigArray, { option: bigArray }, ARRAY_SIZE);
+ await onEvent;
+ }
+ test.done();
+
+ await closeToolbox();
+ await testTeardown();
+};
diff --git a/testing/talos/talos/tests/devtools/addon/content/tests/server/spec.js b/testing/talos/talos/tests/devtools/addon/content/tests/server/spec.js
new file mode 100644
index 0000000000..92a67535e1
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/tests/server/spec.js
@@ -0,0 +1,39 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const protocol = require("devtools/shared/protocol");
+const { Arg, Option, RetVal, types } = protocol;
+
+types.addDictType("test.option", {
+ "attribute-1": "string",
+ "attribute-2": "string",
+ "attribute-3": "string",
+ "attribute-4": "string",
+ "attribute-5": "string",
+ "attribute-6": "string",
+ "attribute-7": "string",
+ "attribute-9": "string",
+ "attribute-10": "string",
+});
+const dampTestSpec = protocol.generateActorSpec({
+ typeName: "dampTest",
+
+ events: {
+ testEvent: { arg: Arg(0, "array:json") },
+ },
+
+ methods: {
+ testMethod: {
+ request: {
+ arg: Arg(0, "array:json"),
+ option: Option(1, "array:test.option"),
+ arraySize: Arg(2, "number"),
+ },
+ response: { value: RetVal("array:json") },
+ },
+ },
+});
+exports.dampTestSpec = dampTestSpec;
diff --git a/testing/talos/talos/tests/devtools/addon/content/tests/source-map/angular-min.js.map b/testing/talos/talos/tests/devtools/addon/content/tests/source-map/angular-min.js.map
new file mode 100644
index 0000000000..fab63263f3
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/tests/source-map/angular-min.js.map
@@ -0,0 +1,8 @@
+{
+"version":3,
+"file":"angular.min.js",
+"lineCount":317,
+"mappings":"A;;;;;aAKC,SAAQ,CAACA,CAAD,CAAS,CAgClBC,QAAAA,EAAAA,CAAAA,CAAAA,CAAAA,CAAAA,MAAAA,SAAAA,EAAAA,CAAAA,IAAAA,EAAAA,SAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,GAAAA,EAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,CAAAA,EAAAA,EAAAA,CAAAA,CAAAA,sCAAAA,EAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,CAAAA,EAAAA,EAAAA,CAAAA,KAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,SAAAA,OAAAA,CAAAA,CAAAA,EAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EAAAA,CAAAA,CAAAA,GAAAA,CAAAA,GAAAA,EAAAA,GAAAA,EAAAA,CAAAA,CAAAA,CAAAA,EAAAA,GAAAA,KAAAA,EAAAA,kBAAAA,CAAAA,CAAAA,EAAAA,CAAAA,SAAAA,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,UAAAA,EAAAA,MAAAA,EAAAA,CAAAA,CAAAA,SAAAA,EAAAA,QAAAA,CAAAA,aAAAA,CAAAA,EAAAA,CAAAA,CAAAA,WAAAA,EAAAA,MAAAA,EAAAA,CAAAA,WAAAA,CAAAA,QAAAA,EAAAA,MAAAA,EAAAA,CAAAA,IAAAA,UAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,EAAAA,EAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,MAAAA,MAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAmNAC,QAASA,GAAW,CAACC,CAAD,CAAM,CAGxB,GAAW,IAAX,EAAIA,CAAJ,EAAmBC,EAAA,CAASD,CAAT,CAAnB,CAAkC,MAAO,CAAA,CAMzC,IAAIE,CAAA,CAAQF,CAAR,CAAJ,EAAoBG,CAAA,CAASH,CAAT,CAApB,EAAsCI,CAAtC,EAAgDJ,CAAhD,WAA+DI,EAA/D,CAAwE,MAAO,CAAA,CAI/E;IAAIC,EAAS,QAATA,EAAqBC,OAAA,CAAON,CAAP,CAArBK,EAAoCL,CAAAK,OAIxC,OAAOE,EAAA,CAASF,CAAT,CAAP,GACa,CADb,EACGA,CADH,GACoBA,CADpB,CAC6B,CAD7B,GACmCL,EADnC,EAC0CA,CAD1C,WACyDQ,MADzD,GACsF,UADtF,EACmE,MAAOR,EAAAS,KAD1E,CAjBwB,CAyD1BC,QAASA,EAAO,CAACV,CAAD,CAAMW,CAAN,CAAgBC,CAAhB,CAAyB,CAAA,IACnCC,CADmC,CAC9BR,CACT,IAAIL,CAAJ,CACE,GAAIc,CAAA,CAAWd,CAAX,CAAJ,CACE,IAAKa,CAAL,GAAYb,EAAZ,CAGa,WAAX,EAAIa,CAAJ,EAAiC,QAAjC,EAA0BA,CAA1B,EAAoD,MAApD,EAA6CA,CAA7C,EAAgEb,CAAAe,eAAhE,EAAsF,CAAAf,CAAAe,eAAA,CAAmBF,CAAnB,CAAtF,EACEF,CAAAK,KAAA,CAAcJ,CAAd,CAAuBZ,CAAA,CAAIa,CAAJ,CAAvB,CAAiCA,CAAjC,CAAsCb,CAAtC,CALN,KAQO,IAAIE,CAAA,CAAQF,CAAR,CAAJ,EAAoBD,EAAA,CAAYC,CAAZ,CAApB,CAAsC,CAC3C,IAAIiB,EAA6B,QAA7BA,GAAc,MAAOjB,EACpBa,EAAA,CAAM,CAAX,KAAcR,CAAd,CAAuBL,CAAAK,OAAvB,CAAmCQ,CAAnC,CAAyCR,CAAzC,CAAiDQ,CAAA,EAAjD,CACE,CAAII,CAAJ,EAAmBJ,CAAnB,GAA0Bb,EAA1B,GACEW,CAAAK,KAAA,CAAcJ,CAAd,CAAuBZ,CAAA,CAAIa,CAAJ,CAAvB,CAAiCA,CAAjC,CAAsCb,CAAtC,CAJuC,CAAtC,IAOA,IAAIA,CAAAU,QAAJ,EAAmBV,CAAAU,QAAnB,GAAmCA,CAAnC,CACHV,CAAAU,QAAA,CAAYC,CAAZ,CAAsBC,CAAtB,CAA+BZ,CAA/B,CADG,KAEA,IAAIkB,EAAA,CAAclB,CAAd,CAAJ,CAEL,IAAKa,CAAL,GAAYb,EAAZ,CACEW,CAAAK,KAAA,CAAcJ,CAAd,CAAuBZ,CAAA,CAAIa,CAAJ,CAAvB,CAAiCA,CAAjC,CAAsCb,CAAtC,CAHG,KAKA,IAAkC,UAAlC,GAAI,MAAOA,EAAAe,eAAX,CAEL,IAAKF,CAAL,GAAYb,EAAZ,CACMA,CAAAe,eAAA,CAAmBF,CAAnB,CAAJ;AACEF,CAAAK,KAAA,CAAcJ,CAAd,CAAuBZ,CAAA,CAAIa,CAAJ,CAAvB,CAAiCA,CAAjC,CAAsCb,CAAtC,CAJC,KASL,KAAKa,CAAL,GAAYb,EAAZ,CACMe,EAAAC,KAAA,CAAoBhB,CAApB,CAAyBa,CAAzB,CAAJ,EACEF,CAAAK,KAAA,CAAcJ,CAAd,CAAuBZ,CAAA,CAAIa,CAAJ,CAAvB,CAAiCA,CAAjC,CAAsCb,CAAtC,CAKR,OAAOA,EAzCgC,CA4CzCmB,QAASA,GAAa,CAACnB,CAAD,CAAMW,CAAN,CAAgBC,CAAhB,CAAyB,CAE7C,IADA,IAAIQ,EAAOd,MAAAc,KAAA,CAAYpB,CAAZ,CAAAqB,KAAA,EAAX,CACSC,EAAI,CAAb,CAAgBA,CAAhB,CAAoBF,CAAAf,OAApB,CAAiCiB,CAAA,EAAjC,CACEX,CAAAK,KAAA,CAAcJ,CAAd,CAAuBZ,CAAA,CAAIoB,CAAA,CAAKE,CAAL,CAAJ,CAAvB,CAAqCF,CAAA,CAAKE,CAAL,CAArC,CAEF,OAAOF,EALsC,CAc/CG,QAASA,GAAa,CAACC,CAAD,CAAa,CACjC,MAAO,SAAQ,CAACC,CAAD,CAAQZ,CAAR,CAAa,CAACW,CAAA,CAAWX,CAAX,CAAgBY,CAAhB,CAAD,CADK,CAcnCC,QAASA,GAAO,EAAG,CACjB,MAAO,EAAEC,EADQ,CAmBnBC,QAASA,GAAU,CAACC,CAAD,CAAMC,CAAN,CAAYC,CAAZ,CAAkB,CAGnC,IAFA,IAAIC,EAAIH,CAAAI,UAAR,CAESX,EAAI,CAFb,CAEgBY,EAAKJ,CAAAzB,OAArB,CAAkCiB,CAAlC,CAAsCY,CAAtC,CAA0C,EAAEZ,CAA5C,CAA+C,CAC7C,IAAItB,EAAM8B,CAAA,CAAKR,CAAL,CACV,IAAKa,CAAA,CAASnC,CAAT,CAAL,EAAuBc,CAAA,CAAWd,CAAX,CAAvB,CAEA,IADA,IAAIoB,EAAOd,MAAAc,KAAA,CAAYpB,CAAZ,CAAX,CACSoC,EAAI,CADb,CACgBC,EAAKjB,CAAAf,OAArB,CAAkC+B,CAAlC,CAAsCC,CAAtC,CAA0CD,CAAA,EAA1C,CAA+C,CAC7C,IAAIvB,EAAMO,CAAA,CAAKgB,CAAL,CAAV,CACIE,EAAMtC,CAAA,CAAIa,CAAJ,CAENkB,EAAJ,EAAYI,CAAA,CAASG,CAAT,CAAZ,CACMC,EAAA,CAAOD,CAAP,CAAJ,CACET,CAAA,CAAIhB,CAAJ,CADF,CACa,IAAI2B,IAAJ,CAASF,CAAAG,QAAA,EAAT,CADb,CAEWC,EAAA,CAASJ,CAAT,CAAJ,CACLT,CAAA,CAAIhB,CAAJ,CADK,CACM,IAAI8B,MAAJ,CAAWL,CAAX,CADN,CAEIA,CAAAM,SAAJ,CACLf,CAAA,CAAIhB,CAAJ,CADK,CACMyB,CAAAO,UAAA,CAAc,CAAA,CAAd,CADN;AAEIC,EAAA,CAAUR,CAAV,CAAJ,CACLT,CAAA,CAAIhB,CAAJ,CADK,CACMyB,CAAAS,MAAA,EADN,EAGAZ,CAAA,CAASN,CAAA,CAAIhB,CAAJ,CAAT,CACL,GADyBgB,CAAA,CAAIhB,CAAJ,CACzB,CADoCX,CAAA,CAAQoC,CAAR,CAAA,CAAe,EAAf,CAAoB,EACxD,EAAAV,EAAA,CAAWC,CAAA,CAAIhB,CAAJ,CAAX,CAAqB,CAACyB,CAAD,CAArB,CAA4B,CAAA,CAA5B,CAJK,CAPT,CAcET,CAAA,CAAIhB,CAAJ,CAdF,CAcayB,CAlBgC,CAJF,CA2B/BN,CAtChB,CAsCWH,CArCTI,UADF,CAsCgBD,CAtChB,CAGE,OAmCSH,CAnCFI,UAoCT,OAAOJ,EA/B4B,CAoDrCmB,QAASA,EAAM,CAACnB,CAAD,CAAM,CACnB,MAAOD,GAAA,CAAWC,CAAX,CAAgBoB,EAAAjC,KAAA,CAAWkC,SAAX,CAAsB,CAAtB,CAAhB,CAA0C,CAAA,CAA1C,CADY,CAuBrBC,QAASA,GAAK,CAACtB,CAAD,CAAM,CAClB,MAAOD,GAAA,CAAWC,CAAX,CAAgBoB,EAAAjC,KAAA,CAAWkC,SAAX,CAAsB,CAAtB,CAAhB,CAA0C,CAAA,CAA1C,CADW,CAMpBE,QAASA,EAAK,CAACC,CAAD,CAAM,CAClB,MAAOC,SAAA,CAASD,CAAT,CAAc,EAAd,CADW,CAKpBE,QAASA,GAAO,CAACC,CAAD,CAASC,CAAT,CAAgB,CAC9B,MAAOT,EAAA,CAAO1C,MAAAoD,OAAA,CAAcF,CAAd,CAAP,CAA8BC,CAA9B,CADuB,CAoBhCE,QAASA,EAAI,EAAG,EAgChBC,QAASA,GAAQ,CAACC,CAAD,CAAI,CAAC,MAAOA,EAAR,CAIrBC,QAASA,GAAO,CAACrC,CAAD,CAAQ,CAAC,MAAOsC,SAAiB,EAAG,CAAC,MAAOtC,EAAR,CAA5B,CAExBuC,QAASA,GAAiB,CAAChE,CAAD,CAAM,CAC9B,MAAOc,EAAA,CAAWd,CAAAiE,SAAX,CAAP,EAAmCjE,CAAAiE,SAAnC,GAAoDA,EADtB,CAiBhCC,QAASA,EAAW,CAACzC,CAAD,CAAQ,CAAC,MAAwB,WAAxB,GAAO,MAAOA,EAAf,CAe5B0C,QAASA,EAAS,CAAC1C,CAAD,CAAQ,CAAC,MAAwB,WAAxB;AAAO,MAAOA,EAAf,CAgB1BU,QAASA,EAAQ,CAACV,CAAD,CAAQ,CAEvB,MAAiB,KAAjB,GAAOA,CAAP,EAA0C,QAA1C,GAAyB,MAAOA,EAFT,CAWzBP,QAASA,GAAa,CAACO,CAAD,CAAQ,CAC5B,MAAiB,KAAjB,GAAOA,CAAP,EAA0C,QAA1C,GAAyB,MAAOA,EAAhC,EAAsD,CAAC2C,EAAA,CAAe3C,CAAf,CAD3B,CAiB9BtB,QAASA,EAAQ,CAACsB,CAAD,CAAQ,CAAC,MAAwB,QAAxB,GAAO,MAAOA,EAAf,CAqBzBlB,QAASA,EAAQ,CAACkB,CAAD,CAAQ,CAAC,MAAwB,QAAxB,GAAO,MAAOA,EAAf,CAezBc,QAASA,GAAM,CAACd,CAAD,CAAQ,CACrB,MAAgC,eAAhC,GAAOwC,EAAAjD,KAAA,CAAcS,CAAd,CADc,CA+BvBX,QAASA,EAAU,CAACW,CAAD,CAAQ,CAAC,MAAwB,UAAxB,GAAO,MAAOA,EAAf,CAU3BiB,QAASA,GAAQ,CAACjB,CAAD,CAAQ,CACvB,MAAgC,iBAAhC,GAAOwC,EAAAjD,KAAA,CAAcS,CAAd,CADgB,CAYzBxB,QAASA,GAAQ,CAACD,CAAD,CAAM,CACrB,MAAOA,EAAP,EAAcA,CAAAH,OAAd,GAA6BG,CADR,CAKvBqE,QAASA,GAAO,CAACrE,CAAD,CAAM,CACpB,MAAOA,EAAP,EAAcA,CAAAsE,WAAd,EAAgCtE,CAAAuE,OADZ,CAoBtBC,QAASA,GAAS,CAAC/C,CAAD,CAAQ,CACxB,MAAwB,SAAxB,GAAO,MAAOA,EADU,CAW1BgD,QAASA,GAAY,CAAChD,CAAD,CAAQ,CAC3B,MAAOA,EAAP,EAAgBlB,CAAA,CAASkB,CAAApB,OAAT,CAAhB;AAA0CqE,EAAAC,KAAA,CAAwBV,EAAAjD,KAAA,CAAcS,CAAd,CAAxB,CADf,CAkC7BqB,QAASA,GAAS,CAAC8B,CAAD,CAAO,CACvB,MAAO,EAAGA,CAAAA,CAAH,EACJ,EAAAA,CAAAhC,SAAA,EACGgC,CAAAC,KADH,EACgBD,CAAAE,KADhB,EAC6BF,CAAAG,KAD7B,CADI,CADgB,CAUzBC,QAASA,GAAO,CAAC3B,CAAD,CAAM,CAAA,IAChBrD,EAAM,EAAIiF,EAAAA,CAAQ5B,CAAA6B,MAAA,CAAU,GAAV,CAAtB,KAAsC5D,CACtC,KAAKA,CAAL,CAAS,CAAT,CAAYA,CAAZ,CAAgB2D,CAAA5E,OAAhB,CAA8BiB,CAAA,EAA9B,CACEtB,CAAA,CAAIiF,CAAA,CAAM3D,CAAN,CAAJ,CAAA,CAAgB,CAAA,CAElB,OAAOtB,EALa,CAStBmF,QAASA,GAAS,CAACC,CAAD,CAAU,CAC1B,MAAOC,EAAA,CAAUD,CAAAxC,SAAV,EAA+BwC,CAAA,CAAQ,CAAR,CAA/B,EAA6CA,CAAA,CAAQ,CAAR,CAAAxC,SAA7C,CADmB,CAQ5B0C,QAASA,GAAW,CAACC,CAAD,CAAQ9D,CAAR,CAAe,CACjC,IAAI+D,EAAQD,CAAAE,QAAA,CAAchE,CAAd,CACC,EAAb,EAAI+D,CAAJ,EACED,CAAAG,OAAA,CAAaF,CAAb,CAAoB,CAApB,CAEF,OAAOA,EAL0B,CAyEnCG,QAASA,GAAI,CAACC,CAAD,CAASC,CAAT,CAAsB,CA8BjCC,QAASA,EAAW,CAACF,CAAD,CAASC,CAAT,CAAsB,CACxC,IAAI7D,EAAI6D,CAAA5D,UAAR,CACIpB,CACJ,IAAIX,CAAA,CAAQ0F,CAAR,CAAJ,CAAqB,CACVtE,CAAAA,CAAI,CAAb,KAAS,IAAOY,EAAK0D,CAAAvF,OAArB,CAAoCiB,CAApC,CAAwCY,CAAxC,CAA4CZ,CAAA,EAA5C,CACEuE,CAAAE,KAAA,CAAiBC,CAAA,CAAYJ,CAAA,CAAOtE,CAAP,CAAZ,CAAjB,CAFiB,CAArB,IAIO,IAAIJ,EAAA,CAAc0E,CAAd,CAAJ,CAEL,IAAK/E,CAAL,GAAY+E,EAAZ,CACEC,CAAA,CAAYhF,CAAZ,CAAA,CAAmBmF,CAAA,CAAYJ,CAAA,CAAO/E,CAAP,CAAZ,CAHhB,KAKA,IAAI+E,CAAJ,EAA+C,UAA/C,GAAc,MAAOA,EAAA7E,eAArB,CAEL,IAAKF,CAAL,GAAY+E,EAAZ,CACMA,CAAA7E,eAAA,CAAsBF,CAAtB,CAAJ;CACEgF,CAAA,CAAYhF,CAAZ,CADF,CACqBmF,CAAA,CAAYJ,CAAA,CAAO/E,CAAP,CAAZ,CADrB,CAHG,KASL,KAAKA,CAAL,GAAY+E,EAAZ,CACM7E,EAAAC,KAAA,CAAoB4E,CAApB,CAA4B/E,CAA5B,CAAJ,GACEgF,CAAA,CAAYhF,CAAZ,CADF,CACqBmF,CAAA,CAAYJ,CAAA,CAAO/E,CAAP,CAAZ,CADrB,CAKoBmB,EAhiB1B,CAgiBa6D,CA/hBX5D,UADF,CAgiB0BD,CAhiB1B,CAGE,OA6hBW6D,CA7hBJ5D,UA8hBP,OAAO4D,EA5BiC,CA+B1CG,QAASA,EAAW,CAACJ,CAAD,CAAS,CAE3B,GAAK,CAAAzD,CAAA,CAASyD,CAAT,CAAL,CACE,MAAOA,EAIT,KAAIJ,EAAQS,CAAAR,QAAA,CAAoBG,CAApB,CACZ,IAAe,EAAf,GAAIJ,CAAJ,CACE,MAAOU,EAAA,CAAUV,CAAV,CAGT,IAAIvF,EAAA,CAAS2F,CAAT,CAAJ,EAAwBvB,EAAA,CAAQuB,CAAR,CAAxB,CACE,KAAMO,GAAA,CAAS,MAAT,CAAN,CAIEC,IAAAA,EAAe,CAAA,CAAfA,CACAP,EAAcQ,CAAA,CAAST,CAAT,CAEEU,KAAAA,EAApB,GAAIT,CAAJ,GACEA,CACA,CADc3F,CAAA,CAAQ0F,CAAR,CAAA,CAAkB,EAAlB,CAAuBtF,MAAAoD,OAAA,CAAcU,EAAA,CAAewB,CAAf,CAAd,CACrC,CAAAQ,CAAA,CAAe,CAAA,CAFjB,CAKAH,EAAAF,KAAA,CAAiBH,CAAjB,CACAM,EAAAH,KAAA,CAAeF,CAAf,CAEA,OAAOO,EAAA,CACHN,CAAA,CAAYF,CAAZ,CAAoBC,CAApB,CADG,CAEHA,CA9BuB,CAiC7BQ,QAASA,EAAQ,CAACT,CAAD,CAAS,CACxB,OAAQ3B,EAAAjD,KAAA,CAAc4E,CAAd,CAAR,EACE,KAAK,oBAAL,CACA,KAAK,qBAAL,CACA,KAAK,qBAAL,CACA,KAAK,uBAAL,CACA,KAAK,uBAAL,CACA,KAAK,qBAAL,CACA,KAAK,4BAAL,CACA,KAAK,sBAAL,CACA,KAAK,sBAAL,CACE,MAAO,KAAIA,CAAAW,YAAJ,CAAuBP,CAAA,CAAYJ,CAAAY,OAAZ,CAAvB;AAAmDZ,CAAAa,WAAnD,CAAsEb,CAAAvF,OAAtE,CAET,MAAK,sBAAL,CAEE,GAAK4C,CAAA2C,CAAA3C,MAAL,CAAmB,CACjB,IAAIyD,EAAS,IAAIC,WAAJ,CAAgBf,CAAAgB,WAAhB,CACbC,EAAA,IAAIC,UAAJ,CAAeJ,CAAf,CAAAG,KAAA,CAA2B,IAAIC,UAAJ,CAAelB,CAAf,CAA3B,CACA,OAAOc,EAHU,CAKnB,MAAOd,EAAA3C,MAAA,CAAa,CAAb,CAET,MAAK,kBAAL,CACA,KAAK,iBAAL,CACA,KAAK,iBAAL,CACA,KAAK,eAAL,CACE,MAAO,KAAI2C,CAAAW,YAAJ,CAAuBX,CAAAnD,QAAA,EAAvB,CAET,MAAK,iBAAL,CAGE,MAFIsE,EAEGA,CAFE,IAAIpE,MAAJ,CAAWiD,CAAAA,OAAX,CAA0BA,CAAA3B,SAAA,EAAA+C,MAAA,CAAwB,SAAxB,CAAA,CAAmC,CAAnC,CAA1B,CAEFD,CADPA,CAAAE,UACOF,CADQnB,CAAAqB,UACRF,CAAAA,CAET,MAAK,eAAL,CACE,MAAO,KAAInB,CAAAW,YAAJ,CAAuB,CAACX,CAAD,CAAvB,CAAiC,CAACsB,KAAMtB,CAAAsB,KAAP,CAAjC,CAjCX,CAoCA,GAAIpG,CAAA,CAAW8E,CAAA/C,UAAX,CAAJ,CACE,MAAO+C,EAAA/C,UAAA,CAAiB,CAAA,CAAjB,CAtCe,CA9FO;AACjC,IAAIoD,EAAc,EAAlB,CACIC,EAAY,EAEhB,IAAIL,CAAJ,CAAiB,CACf,GAAIpB,EAAA,CAAaoB,CAAb,CAAJ,EAtI4B,sBAsI5B,GAtIK5B,EAAAjD,KAAA,CAsI0C6E,CAtI1C,CAsIL,CACE,KAAMM,GAAA,CAAS,MAAT,CAAN,CAEF,GAAIP,CAAJ,GAAeC,CAAf,CACE,KAAMM,GAAA,CAAS,KAAT,CAAN,CAIEjG,CAAA,CAAQ2F,CAAR,CAAJ,CACEA,CAAAxF,OADF,CACuB,CADvB,CAGEK,CAAA,CAAQmF,CAAR,CAAqB,QAAQ,CAACpE,CAAD,CAAQZ,CAAR,CAAa,CAC5B,WAAZ,GAAIA,CAAJ,EACE,OAAOgF,CAAA,CAAYhF,CAAZ,CAF+B,CAA1C,CAOFoF,EAAAF,KAAA,CAAiBH,CAAjB,CACAM,EAAAH,KAAA,CAAeF,CAAf,CACA,OAAOC,EAAA,CAAYF,CAAZ,CAAoBC,CAApB,CArBQ,CAwBjB,MAAOG,EAAA,CAAYJ,CAAZ,CA5B0B,CA0MnCuB,QAASA,GAAM,CAACC,CAAD,CAAKC,CAAL,CAAS,CACtB,GAAID,CAAJ,GAAWC,CAAX,CAAe,MAAO,CAAA,CACtB,IAAW,IAAX,GAAID,CAAJ,EAA0B,IAA1B,GAAmBC,CAAnB,CAAgC,MAAO,CAAA,CACvC,IAAID,CAAJ,GAAWA,CAAX,EAAiBC,CAAjB,GAAwBA,CAAxB,CAA4B,MAAO,CAAA,CAHb,KAIlBC,EAAK,MAAOF,EAJM,CAIsBvG,CAC5C,IAAIyG,CAAJ,EADyBC,MAAOF,EAChC,EAAsB,QAAtB,EAAgBC,CAAhB,CACE,GAAIpH,CAAA,CAAQkH,CAAR,CAAJ,CAAiB,CACf,GAAK,CAAAlH,CAAA,CAAQmH,CAAR,CAAL,CAAkB,MAAO,CAAA,CACzB,KAAKhH,CAAL,CAAc+G,CAAA/G,OAAd,GAA4BgH,CAAAhH,OAA5B,CAAuC,CACrC,IAAKQ,CAAL,CAAW,CAAX,CAAcA,CAAd,CAAoBR,CAApB,CAA4BQ,CAAA,EAA5B,CACE,GAAK,CAAAsG,EAAA,CAAOC,CAAA,CAAGvG,CAAH,CAAP,CAAgBwG,CAAA,CAAGxG,CAAH,CAAhB,CAAL,CAA+B,MAAO,CAAA,CAExC,OAAO,CAAA,CAJ8B,CAFxB,CAAjB,IAQO,CAAA,GAAI0B,EAAA,CAAO6E,CAAP,CAAJ,CACL,MAAK7E,GAAA,CAAO8E,CAAP,CAAL,CACOF,EAAA,CAAOC,CAAAI,QAAA,EAAP;AAAqBH,CAAAG,QAAA,EAArB,CADP,CAAwB,CAAA,CAEnB,IAAI9E,EAAA,CAAS0E,CAAT,CAAJ,CACL,MAAK1E,GAAA,CAAS2E,CAAT,CAAL,CACOD,CAAAnD,SAAA,EADP,EACwBoD,CAAApD,SAAA,EADxB,CAA0B,CAAA,CAG1B,IAAII,EAAA,CAAQ+C,CAAR,CAAJ,EAAmB/C,EAAA,CAAQgD,CAAR,CAAnB,EAAkCpH,EAAA,CAASmH,CAAT,CAAlC,EAAkDnH,EAAA,CAASoH,CAAT,CAAlD,EACEnH,CAAA,CAAQmH,CAAR,CADF,EACiB9E,EAAA,CAAO8E,CAAP,CADjB,EAC+B3E,EAAA,CAAS2E,CAAT,CAD/B,CAC6C,MAAO,CAAA,CACpDI,EAAA,CAASC,CAAA,EACT,KAAK7G,CAAL,GAAYuG,EAAZ,CACE,GAAsB,GAAtB,GAAIvG,CAAA8G,OAAA,CAAW,CAAX,CAAJ,EAA6B,CAAA7G,CAAA,CAAWsG,CAAA,CAAGvG,CAAH,CAAX,CAA7B,CAAA,CACA,GAAK,CAAAsG,EAAA,CAAOC,CAAA,CAAGvG,CAAH,CAAP,CAAgBwG,CAAA,CAAGxG,CAAH,CAAhB,CAAL,CAA+B,MAAO,CAAA,CACtC4G,EAAA,CAAO5G,CAAP,CAAA,CAAc,CAAA,CAFd,CAIF,IAAKA,CAAL,GAAYwG,EAAZ,CACE,GAAM,EAAAxG,CAAA,GAAO4G,EAAP,CAAN,EACsB,GADtB,GACI5G,CAAA8G,OAAA,CAAW,CAAX,CADJ,EAEIxD,CAAA,CAAUkD,CAAA,CAAGxG,CAAH,CAAV,CAFJ,EAGK,CAAAC,CAAA,CAAWuG,CAAA,CAAGxG,CAAH,CAAX,CAHL,CAG0B,MAAO,CAAA,CAEnC,OAAO,CAAA,CArBF,CAwBT,MAAO,CAAA,CAtCe,CAkIxB+G,QAASA,GAAM,CAACC,CAAD,CAASC,CAAT,CAAiBtC,CAAjB,CAAwB,CACrC,MAAOqC,EAAAD,OAAA,CAAc3E,EAAAjC,KAAA,CAAW8G,CAAX,CAAmBtC,CAAnB,CAAd,CAD8B,CA4BvCuC,QAASA,GAAI,CAACC,CAAD,CAAOC,CAAP,CAAW,CACtB,IAAIC,EAA+B,CAAnB,CAAAhF,SAAA7C,OAAA,CAxBT4C,EAAAjC,KAAA,CAwB0CkC,SAxB1C,CAwBqDiF,CAxBrD,CAwBS,CAAiD,EACjE,OAAI,CAAArH,CAAA,CAAWmH,CAAX,CAAJ,EAAwBA,CAAxB,WAAsCtF,OAAtC,CAcSsF,CAdT,CACSC,CAAA7H,OAAA,CACH,QAAQ,EAAG,CACT,MAAO6C,UAAA7C,OAAA,CACH4H,CAAAG,MAAA,CAASJ,CAAT;AAAeJ,EAAA,CAAOM,CAAP,CAAkBhF,SAAlB,CAA6B,CAA7B,CAAf,CADG,CAEH+E,CAAAG,MAAA,CAASJ,CAAT,CAAeE,CAAf,CAHK,CADR,CAMH,QAAQ,EAAG,CACT,MAAOhF,UAAA7C,OAAA,CACH4H,CAAAG,MAAA,CAASJ,CAAT,CAAe9E,SAAf,CADG,CAEH+E,CAAAjH,KAAA,CAAQgH,CAAR,CAHK,CATK,CAqBxBK,QAASA,GAAc,CAACxH,CAAD,CAAMY,CAAN,CAAa,CAClC,IAAI6G,EAAM7G,CAES,SAAnB,GAAI,MAAOZ,EAAX,EAAiD,GAAjD,GAA+BA,CAAA8G,OAAA,CAAW,CAAX,CAA/B,EAA0E,GAA1E,GAAwD9G,CAAA8G,OAAA,CAAW,CAAX,CAAxD,CACEW,CADF,CACQhC,IAAAA,EADR,CAEWrG,EAAA,CAASwB,CAAT,CAAJ,CACL6G,CADK,CACC,SADD,CAEI7G,CAAJ,EAAc5B,CAAA0I,SAAd,GAAkC9G,CAAlC,CACL6G,CADK,CACC,WADD,CAEIjE,EAAA,CAAQ5C,CAAR,CAFJ,GAGL6G,CAHK,CAGC,QAHD,CAMP,OAAOA,EAb2B,CAqDpCE,QAASA,GAAM,CAACxI,CAAD,CAAMyI,CAAN,CAAc,CAC3B,GAAI,CAAAvE,CAAA,CAAYlE,CAAZ,CAAJ,CAIA,MAHKO,EAAA,CAASkI,CAAT,CAGE,GAFLA,CAEK,CAFIA,CAAA,CAAS,CAAT,CAAa,IAEjB,EAAAC,IAAAC,UAAA,CAAe3I,CAAf,CAAoBqI,EAApB,CAAoCI,CAApC,CALoB,CAqB7BG,QAASA,GAAQ,CAACC,CAAD,CAAO,CACtB,MAAO1I,EAAA,CAAS0I,CAAT,CAAA,CACDH,IAAAI,MAAA,CAAWD,CAAX,CADC,CAEDA,CAHgB,CAQxBE,QAASA,GAAgB,CAACC,CAAD,CAAWC,CAAX,CAAqB,CAE5CD,CAAA,CAAWA,CAAAE,QAAA,CAAiBC,EAAjB,CAA6B,EAA7B,CACX,KAAIC,EAA0B5G,IAAAsG,MAAA,CAAW,wBAAX,CAAsCE,CAAtC,CAA1BI,CAA4E,GAChF,OAAOC,MAAA,CAAMD,CAAN,CAAA,CAAiCH,CAAjC,CAA4CG,CAJP,CAe9CE,QAASA,GAAsB,CAACC,CAAD;AAAOP,CAAP,CAAiBQ,CAAjB,CAA0B,CACvDA,CAAA,CAAUA,CAAA,CAAW,EAAX,CAAe,CACzB,KAAIC,EAAqBF,CAAAG,kBAAA,EACrBC,EAAAA,CAAiBZ,EAAA,CAAiBC,CAAjB,CAA2BS,CAA3B,CACO,EAAA,EAAWE,CAAX,CAA4BF,CAVxDF,EAAA,CAAO,IAAI/G,IAAJ,CAUe+G,CAVN/B,QAAA,EAAT,CACP+B,EAAAK,WAAA,CAAgBL,CAAAM,WAAA,EAAhB,CAAoCC,CAApC,CASA,OAROP,EAIgD,CAWzDQ,QAASA,GAAW,CAAC3E,CAAD,CAAU,CAC5BA,CAAA,CAAUhF,CAAA,CAAOgF,CAAP,CAAArC,MAAA,EACV,IAAI,CAGFqC,CAAA4E,MAAA,EAHE,CAIF,MAAOC,CAAP,CAAU,EACZ,IAAIC,EAAW9J,CAAA,CAAO,OAAP,CAAA+J,OAAA,CAAuB/E,CAAvB,CAAAgF,KAAA,EACf,IAAI,CACF,MAAOhF,EAAA,CAAQ,CAAR,CAAAiF,SAAA,GAAwBC,EAAxB,CAAyCjF,CAAA,CAAU6E,CAAV,CAAzC,CACHA,CAAAlD,MAAA,CACQ,YADR,CAAA,CACsB,CADtB,CAAAkC,QAAA,CAEU,aAFV,CAEyB,QAAQ,CAAClC,CAAD,CAAQpE,CAAR,CAAkB,CAAC,MAAO,GAAP,CAAayC,CAAA,CAAUzC,CAAV,CAAd,CAFnD,CAFF,CAKF,MAAOqH,CAAP,CAAU,CACV,MAAO5E,EAAA,CAAU6E,CAAV,CADG,CAbgB,CA8B9BK,QAASA,GAAqB,CAAC9I,CAAD,CAAQ,CACpC,GAAI,CACF,MAAO+I,mBAAA,CAAmB/I,CAAnB,CADL,CAEF,MAAOwI,CAAP,CAAU,EAHwB,CAatCQ,QAASA,GAAa,CAAYC,CAAZ,CAAsB,CAC1C,IAAI1K,EAAM,EACVU,EAAA,CAAQwE,CAACwF,CAADxF,EAAa,EAAbA,OAAA,CAAuB,GAAvB,CAAR,CAAqC,QAAQ,CAACwF,CAAD,CAAW,CAAA,IAClDC,CADkD,CACtC9J,CADsC,CACjCyH,CACjBoC,EAAJ,GACE7J,CAOA,CAPM6J,CAON,CAPiBA,CAAAxB,QAAA,CAAiB,KAAjB,CAAuB,KAAvB,CAOjB;AANAyB,CAMA,CANaD,CAAAjF,QAAA,CAAiB,GAAjB,CAMb,CALoB,EAKpB,GALIkF,CAKJ,GAJE9J,CACA,CADM6J,CAAAE,UAAA,CAAmB,CAAnB,CAAsBD,CAAtB,CACN,CAAArC,CAAA,CAAMoC,CAAAE,UAAA,CAAmBD,CAAnB,CAAgC,CAAhC,CAGR,EADA9J,CACA,CADM0J,EAAA,CAAsB1J,CAAtB,CACN,CAAIsD,CAAA,CAAUtD,CAAV,CAAJ,GACEyH,CACA,CADMnE,CAAA,CAAUmE,CAAV,CAAA,CAAiBiC,EAAA,CAAsBjC,CAAtB,CAAjB,CAA8C,CAAA,CACpD,CAAKvH,EAAAC,KAAA,CAAoBhB,CAApB,CAAyBa,CAAzB,CAAL,CAEWX,CAAA,CAAQF,CAAA,CAAIa,CAAJ,CAAR,CAAJ,CACLb,CAAA,CAAIa,CAAJ,CAAAkF,KAAA,CAAcuC,CAAd,CADK,CAGLtI,CAAA,CAAIa,CAAJ,CAHK,CAGM,CAACb,CAAA,CAAIa,CAAJ,CAAD,CAAUyH,CAAV,CALb,CACEtI,CAAA,CAAIa,CAAJ,CADF,CACayH,CAHf,CARF,CAFsD,CAAxD,CAsBA,OAAOtI,EAxBmC,CA2B5C6K,QAASA,GAAU,CAAC7K,CAAD,CAAM,CACvB,IAAI8K,EAAQ,EACZpK,EAAA,CAAQV,CAAR,CAAa,QAAQ,CAACyB,CAAD,CAAQZ,CAAR,CAAa,CAC5BX,CAAA,CAAQuB,CAAR,CAAJ,CACEf,CAAA,CAAQe,CAAR,CAAe,QAAQ,CAACsJ,CAAD,CAAa,CAClCD,CAAA/E,KAAA,CAAWiF,EAAA,CAAenK,CAAf,CAAoB,CAAA,CAApB,CAAX,EAC2B,CAAA,CAAf,GAAAkK,CAAA,CAAsB,EAAtB,CAA2B,GAA3B,CAAiCC,EAAA,CAAeD,CAAf,CAA2B,CAAA,CAA3B,CAD7C,EADkC,CAApC,CADF,CAMAD,CAAA/E,KAAA,CAAWiF,EAAA,CAAenK,CAAf,CAAoB,CAAA,CAApB,CAAX,EACsB,CAAA,CAAV,GAAAY,CAAA,CAAiB,EAAjB,CAAsB,GAAtB,CAA4BuJ,EAAA,CAAevJ,CAAf,CAAsB,CAAA,CAAtB,CADxC,EAPgC,CAAlC,CAWA,OAAOqJ,EAAAzK,OAAA,CAAeyK,CAAAG,KAAA,CAAW,GAAX,CAAf,CAAiC,EAbjB,CA4BzBC,QAASA,GAAgB,CAAC5C,CAAD,CAAM,CAC7B,MAAO0C,GAAA,CAAe1C,CAAf,CAAoB,CAAA,CAApB,CAAAY,QAAA,CACY,OADZ,CACqB,GADrB,CAAAA,QAAA,CAEY,OAFZ,CAEqB,GAFrB,CAAAA,QAAA,CAGY,OAHZ,CAGqB,GAHrB,CADsB,CAmB/B8B,QAASA,GAAc,CAAC1C,CAAD,CAAM6C,CAAN,CAAuB,CAC5C,MAAOC,mBAAA,CAAmB9C,CAAnB,CAAAY,QAAA,CACY,OADZ;AACqB,GADrB,CAAAA,QAAA,CAEY,OAFZ,CAEqB,GAFrB,CAAAA,QAAA,CAGY,MAHZ,CAGoB,GAHpB,CAAAA,QAAA,CAIY,OAJZ,CAIqB,GAJrB,CAAAA,QAAA,CAKY,OALZ,CAKqB,GALrB,CAAAA,QAAA,CAMY,MANZ,CAMqBiC,CAAA,CAAkB,KAAlB,CAA0B,GAN/C,CADqC,CAY9CE,QAASA,GAAc,CAACjG,CAAD,CAAUkG,CAAV,CAAkB,CAAA,IACnCxG,CADmC,CAC7BxD,CAD6B,CAC1BY,EAAKqJ,EAAAlL,OAClB,KAAKiB,CAAL,CAAS,CAAT,CAAYA,CAAZ,CAAgBY,CAAhB,CAAoB,EAAEZ,CAAtB,CAEE,GADAwD,CACI,CADGyG,EAAA,CAAejK,CAAf,CACH,CADuBgK,CACvB,CAAAnL,CAAA,CAAS2E,CAAT,CAAgBM,CAAAoG,aAAA,CAAqB1G,CAArB,CAAhB,CAAJ,CACE,MAAOA,EAGX,OAAO,KARgC,CAiJzC2G,QAASA,GAAW,CAACrG,CAAD,CAAUsG,CAAV,CAAqB,CAAA,IACnCC,CADmC,CAEnCC,CAFmC,CAGnCC,EAAS,EAGbnL,EAAA,CAAQ6K,EAAR,CAAwB,QAAQ,CAACO,CAAD,CAAS,CACnCC,CAAAA,EAAgB,KAEfJ,EAAAA,CAAL,EAAmBvG,CAAA4G,aAAnB,EAA2C5G,CAAA4G,aAAA,CAAqBD,CAArB,CAA3C,GACEJ,CACA,CADavG,CACb,CAAAwG,CAAA,CAASxG,CAAAoG,aAAA,CAAqBO,CAArB,CAFX,CAHuC,CAAzC,CAQArL,EAAA,CAAQ6K,EAAR,CAAwB,QAAQ,CAACO,CAAD,CAAS,CACnCC,CAAAA,EAAgB,KACpB,KAAIE,CAECN,EAAAA,CAAL,GAAoBM,CAApB,CAAgC7G,CAAA8G,cAAA,CAAsB,GAAtB,CAA4BH,CAAA7C,QAAA,CAAa,GAAb,CAAkB,KAAlB,CAA5B,CAAuD,GAAvD,CAAhC,IACEyC,CACA,CADaM,CACb,CAAAL,CAAA,CAASK,CAAAT,aAAA,CAAuBO,CAAvB,CAFX,CAJuC,CAAzC,CASIJ,EAAJ,GACEE,CAAAM,SACA,CAD8D,IAC9D,GADkBd,EAAA,CAAeM,CAAf,CAA2B,WAA3B,CAClB;AAAAD,CAAA,CAAUC,CAAV,CAAsBC,CAAA,CAAS,CAACA,CAAD,CAAT,CAAoB,EAA1C,CAA8CC,CAA9C,CAFF,CAvBuC,CAwFzCH,QAASA,GAAS,CAACtG,CAAD,CAAUgH,CAAV,CAAmBP,CAAnB,CAA2B,CACtC1J,CAAA,CAAS0J,CAAT,CAAL,GAAuBA,CAAvB,CAAgC,EAAhC,CAIAA,EAAA,CAAS7I,CAAA,CAHWqJ,CAClBF,SAAU,CAAA,CADQE,CAGX,CAAsBR,CAAtB,CACT,KAAIS,EAAcA,QAAQ,EAAG,CAC3BlH,CAAA,CAAUhF,CAAA,CAAOgF,CAAP,CAEV,IAAIA,CAAAmH,SAAA,EAAJ,CAAwB,CACtB,IAAIC,EAAOpH,CAAA,CAAQ,CAAR,CAAD,GAAgBvF,CAAA0I,SAAhB,CAAmC,UAAnC,CAAgDwB,EAAA,CAAY3E,CAAZ,CAE1D,MAAMe,GAAA,CACF,SADE,CAGFqG,CAAAtD,QAAA,CAAY,GAAZ,CAAgB,MAAhB,CAAAA,QAAA,CAAgC,GAAhC,CAAoC,MAApC,CAHE,CAAN,CAHsB,CASxBkD,CAAA,CAAUA,CAAV,EAAqB,EACrBA,EAAAK,QAAA,CAAgB,CAAC,UAAD,CAAa,QAAQ,CAACC,CAAD,CAAW,CAC9CA,CAAAjL,MAAA,CAAe,cAAf,CAA+B2D,CAA/B,CAD8C,CAAhC,CAAhB,CAIIyG,EAAAc,iBAAJ,EAEEP,CAAArG,KAAA,CAAa,CAAC,kBAAD,CAAqB,QAAQ,CAAC6G,CAAD,CAAmB,CAC3DA,CAAAD,iBAAA,CAAkC,CAAA,CAAlC,CAD2D,CAAhD,CAAb,CAKFP,EAAAK,QAAA,CAAgB,IAAhB,CACIF,EAAAA,CAAWM,EAAA,CAAeT,CAAf,CAAwBP,CAAAM,SAAxB,CACfI,EAAAO,OAAA,CAAgB,CAAC,YAAD,CAAe,cAAf,CAA+B,UAA/B,CAA2C,WAA3C,CACbC,QAAuB,CAACC,CAAD,CAAQ5H,CAAR,CAAiB6H,CAAjB,CAA0BV,CAA1B,CAAoC,CAC1DS,CAAAE,OAAA,CAAa,QAAQ,EAAG,CACtB9H,CAAA+H,KAAA,CAAa,WAAb;AAA0BZ,CAA1B,CACAU,EAAA,CAAQ7H,CAAR,CAAA,CAAiB4H,CAAjB,CAFsB,CAAxB,CAD0D,CAD9C,CAAhB,CAQA,OAAOT,EAlCoB,CAA7B,CAqCIa,EAAuB,wBArC3B,CAsCIC,EAAqB,sBAErBxN,EAAJ,EAAcuN,CAAAzI,KAAA,CAA0B9E,CAAAkM,KAA1B,CAAd,GACEF,CAAAc,iBACA,CAD0B,CAAA,CAC1B,CAAA9M,CAAAkM,KAAA,CAAclM,CAAAkM,KAAA7C,QAAA,CAAoBkE,CAApB,CAA0C,EAA1C,CAFhB,CAKA,IAAIvN,CAAJ,EAAe,CAAAwN,CAAA1I,KAAA,CAAwB9E,CAAAkM,KAAxB,CAAf,CACE,MAAOO,EAAA,EAGTzM,EAAAkM,KAAA,CAAclM,CAAAkM,KAAA7C,QAAA,CAAoBmE,CAApB,CAAwC,EAAxC,CACdC,GAAAC,gBAAA,CAA0BC,QAAQ,CAACC,CAAD,CAAe,CAC/C/M,CAAA,CAAQ+M,CAAR,CAAsB,QAAQ,CAAC7B,CAAD,CAAS,CACrCQ,CAAArG,KAAA,CAAa6F,CAAb,CADqC,CAAvC,CAGA,OAAOU,EAAA,EAJwC,CAO7CxL,EAAA,CAAWwM,EAAAI,wBAAX,CAAJ,EACEJ,EAAAI,wBAAA,EAhEyC,CA8E7CC,QAASA,GAAmB,EAAG,CAC7B9N,CAAAkM,KAAA,CAAc,uBAAd,CAAwClM,CAAAkM,KACxClM,EAAA+N,SAAAC,OAAA,EAF6B,CAa/BC,QAASA,GAAc,CAACC,CAAD,CAAc,CAC/BxB,CAAAA,CAAWe,EAAAlI,QAAA,CAAgB2I,CAAhB,CAAAxB,SAAA,EACf,IAAKA,CAAAA,CAAL,CACE,KAAMpG,GAAA,CAAS,MAAT,CAAN,CAGF,MAAOoG,EAAAyB,IAAA,CAAa,eAAb,CAN4B,CApxDnB;AA8xDlBC,QAASA,GAAU,CAAClC,CAAD,CAAOmC,CAAP,CAAkB,CACnCA,CAAA,CAAYA,CAAZ,EAAyB,GACzB,OAAOnC,EAAA7C,QAAA,CAAaiF,EAAb,CAAgC,QAAQ,CAACC,CAAD,CAASC,CAAT,CAAc,CAC3D,OAAQA,CAAA,CAAMH,CAAN,CAAkB,EAA1B,EAAgCE,CAAAE,YAAA,EAD2B,CAAtD,CAF4B,CAQrCC,QAASA,GAAU,EAAG,CACpB,IAAIC,CAEJ,IAAIC,CAAAA,EAAJ,CAAA,CAKA,IAAIC,EAASC,EAAA,EASb,EARAC,EAQA,CARS1K,CAAA,CAAYwK,CAAZ,CAAA,CAAsB7O,CAAA+O,OAAtB,CACCF,CAAD,CACsB7O,CAAA,CAAO6O,CAAP,CADtB,CAAsBpI,IAAAA,EAO/B,GAAcsI,EAAA3G,GAAA4G,GAAd,EACEzO,CAaA,CAbSwO,EAaT,CAZA5L,CAAA,CAAO4L,EAAA3G,GAAP,CAAkB,CAChB+E,MAAO8B,EAAA9B,MADS,CAEhB+B,aAAcD,EAAAC,aAFE,CAGhBC,WAAYF,EAAAE,WAHI,CAIhBzC,SAAUuC,EAAAvC,SAJM,CAKhB0C,cAAeH,EAAAG,cALC,CAAlB,CAYA,CADAT,CACA,CADoBI,EAAAM,UACpB,CAAAN,EAAAM,UAAA,CAAmBC,QAAQ,CAACC,CAAD,CAAQ,CAEjC,IADA,IAAIC,CAAJ,CACS/N,EAAI,CADb,CACgBgO,CAAhB,CAA2C,IAA3C,GAAuBA,CAAvB,CAA8BF,CAAA,CAAM9N,CAAN,CAA9B,EAAiDA,CAAA,EAAjD,CAEE,CADA+N,CACA,CADST,EAAAW,MAAA,CAAaD,CAAb,CAAmB,QAAnB,CACT,GAAcD,CAAAG,SAAd,EACEZ,EAAA,CAAOU,CAAP,CAAAG,eAAA,CAA4B,UAA5B,CAGJjB,EAAA,CAAkBY,CAAlB,CARiC,CAdrC,EAyBEhP,CAzBF,CAyBWsP,CAGXpC,GAAAlI,QAAA,CAAkBhF,CAGlBqO,GAAA,CAAkB,CAAA,CA7ClB,CAHoB,CAsDtBkB,QAASA,GAAS,CAACC,CAAD;AAAM7D,CAAN,CAAY8D,CAAZ,CAAoB,CACpC,GAAKD,CAAAA,CAAL,CACE,KAAMzJ,GAAA,CAAS,MAAT,CAA2C4F,CAA3C,EAAmD,GAAnD,CAA0D8D,CAA1D,EAAoE,UAApE,CAAN,CAEF,MAAOD,EAJ6B,CAOtCE,QAASA,GAAW,CAACF,CAAD,CAAM7D,CAAN,CAAYgE,CAAZ,CAAmC,CACjDA,CAAJ,EAA6B7P,CAAA,CAAQ0P,CAAR,CAA7B,GACIA,CADJ,CACUA,CAAA,CAAIA,CAAAvP,OAAJ,CAAiB,CAAjB,CADV,CAIAsP,GAAA,CAAU7O,CAAA,CAAW8O,CAAX,CAAV,CAA2B7D,CAA3B,CAAiC,sBAAjC,EACK6D,CAAA,EAAsB,QAAtB,GAAO,MAAOA,EAAd,CAAiCA,CAAArJ,YAAAwF,KAAjC,EAAyD,QAAzD,CAAoE,MAAO6D,EADhF,EAEA,OAAOA,EAP8C,CAevDI,QAASA,GAAuB,CAACjE,CAAD,CAAOnL,CAAP,CAAgB,CAC9C,GAAa,gBAAb,GAAImL,CAAJ,CACE,KAAM5F,GAAA,CAAS,SAAT,CAA8DvF,CAA9D,CAAN,CAF4C,CAchDqP,QAASA,GAAM,CAACjQ,CAAD,CAAMkQ,CAAN,CAAYC,CAAZ,CAA2B,CACxC,GAAKD,CAAAA,CAAL,CAAW,MAAOlQ,EACdoB,EAAAA,CAAO8O,CAAAhL,MAAA,CAAW,GAAX,CAKX,KAJA,IAAIrE,CAAJ,CACIuP,EAAepQ,CADnB,CAEIqQ,EAAMjP,CAAAf,OAFV,CAISiB,EAAI,CAAb,CAAgBA,CAAhB,CAAoB+O,CAApB,CAAyB/O,CAAA,EAAzB,CACET,CACA,CADMO,CAAA,CAAKE,CAAL,CACN,CAAItB,CAAJ,GACEA,CADF,CACQ,CAACoQ,CAAD,CAAgBpQ,CAAhB,EAAqBa,CAArB,CADR,CAIF,OAAKsP,CAAAA,CAAL,EAAsBrP,CAAA,CAAWd,CAAX,CAAtB,CACS+H,EAAA,CAAKqI,CAAL,CAAmBpQ,CAAnB,CADT,CAGOA,CAhBiC,CAwB1CsQ,QAASA,GAAa,CAACC,CAAD,CAAQ,CAM5B,IAJA,IAAI3L,EAAO2L,CAAA,CAAM,CAAN,CAAX,CACIC,EAAUD,CAAA,CAAMA,CAAAlQ,OAAN,CAAqB,CAArB,CADd,CAEIoQ,CAFJ,CAISnP,EAAI,CAAb,CAAgBsD,CAAhB,GAAyB4L,CAAzB,GAAqC5L,CAArC,CAA4CA,CAAA8L,YAA5C,EAA+DpP,CAAA,EAA/D,CACE,GAAImP,CAAJ,EAAkBF,CAAA,CAAMjP,CAAN,CAAlB;AAA+BsD,CAA/B,CACO6L,CAGL,GAFEA,CAEF,CAFerQ,CAAA,CAAO6C,EAAAjC,KAAA,CAAWuP,CAAX,CAAkB,CAAlB,CAAqBjP,CAArB,CAAP,CAEf,EAAAmP,CAAA1K,KAAA,CAAgBnB,CAAhB,CAIJ,OAAO6L,EAAP,EAAqBF,CAfO,CA8B9B7I,QAASA,EAAS,EAAG,CACnB,MAAOpH,OAAAoD,OAAA,CAAc,IAAd,CADY,CAoBrBiN,QAASA,GAAiB,CAAC9Q,CAAD,CAAS,CAKjC+Q,QAASA,EAAM,CAAC5Q,CAAD,CAAM+L,CAAN,CAAY8E,CAAZ,CAAqB,CAClC,MAAO7Q,EAAA,CAAI+L,CAAJ,CAAP,GAAqB/L,CAAA,CAAI+L,CAAJ,CAArB,CAAiC8E,CAAA,EAAjC,CADkC,CAHpC,IAAIC,EAAkBhR,CAAA,CAAO,WAAP,CAAtB,CACIqG,EAAWrG,CAAA,CAAO,IAAP,CAMXwN,EAAAA,CAAUsD,CAAA,CAAO/Q,CAAP,CAAe,SAAf,CAA0BS,MAA1B,CAGdgN,EAAAyD,SAAA,CAAmBzD,CAAAyD,SAAnB,EAAuCjR,CAEvC,OAAO8Q,EAAA,CAAOtD,CAAP,CAAgB,QAAhB,CAA0B,QAAQ,EAAG,CAE1C,IAAIlB,EAAU,EAqDd,OAAOR,SAAe,CAACG,CAAD,CAAOiF,CAAP,CAAiBC,CAAjB,CAA2B,CAE7C,GAAa,gBAAb,GAKsBlF,CALtB,CACE,KAAM5F,EAAA,CAAS,SAAT,CAIoBvF,QAJpB,CAAN,CAKAoQ,CAAJ,EAAgB5E,CAAArL,eAAA,CAAuBgL,CAAvB,CAAhB,GACEK,CAAA,CAAQL,CAAR,CADF,CACkB,IADlB,CAGA,OAAO6E,EAAA,CAAOxE,CAAP,CAAgBL,CAAhB,CAAsB,QAAQ,EAAG,CAuPtCmF,QAASA,EAAW,CAACC,CAAD,CAAWC,CAAX,CAAmBC,CAAnB,CAAiCC,CAAjC,CAAwC,CACrDA,CAAL,GAAYA,CAAZ,CAAoBC,CAApB,CACA,OAAO,SAAQ,EAAG,CAChBD,CAAA,CAAMD,CAAN,EAAsB,MAAtB,CAAA,CAA8B,CAACF,CAAD,CAAWC,CAAX,CAAmBlO,SAAnB,CAA9B,CACA,OAAOsO,EAFS,CAFwC,CAa5DC,QAASA,EAA2B,CAACN,CAAD;AAAWC,CAAX,CAAmB,CACrD,MAAO,SAAQ,CAACM,CAAD,CAAaC,CAAb,CAA8B,CACvCA,CAAJ,EAAuB7Q,CAAA,CAAW6Q,CAAX,CAAvB,GAAoDA,CAAAC,aAApD,CAAmF7F,CAAnF,CACAwF,EAAAxL,KAAA,CAAiB,CAACoL,CAAD,CAAWC,CAAX,CAAmBlO,SAAnB,CAAjB,CACA,OAAOsO,EAHoC,CADQ,CAnQvD,GAAKR,CAAAA,CAAL,CACE,KAAMF,EAAA,CAAgB,OAAhB,CAEiD/E,CAFjD,CAAN,CAMF,IAAIwF,EAAc,EAAlB,CAGIM,EAAe,EAHnB,CAMIC,EAAY,EANhB,CAQIjG,EAASqF,CAAA,CAAY,WAAZ,CAAyB,QAAzB,CAAmC,MAAnC,CAA2CW,CAA3C,CARb,CAWIL,EAAiB,CAEnBO,aAAcR,CAFK,CAGnBS,cAAeH,CAHI,CAInBI,WAAYH,CAJO,CAenBd,SAAUA,CAfS,CAyBnBjF,KAAMA,CAzBa,CAsCnBoF,SAAUM,CAAA,CAA4B,UAA5B,CAAwC,UAAxC,CAtCS,CAiDnBZ,QAASY,CAAA,CAA4B,UAA5B,CAAwC,SAAxC,CAjDU,CA4DnBS,QAAST,CAAA,CAA4B,UAA5B,CAAwC,SAAxC,CA5DU,CAuEnBhQ,MAAOyP,CAAA,CAAY,UAAZ,CAAwB,OAAxB,CAvEY,CAmFnBiB,SAAUjB,CAAA,CAAY,UAAZ,CAAwB,UAAxB,CAAoC,SAApC,CAnFS,CA+FnBkB,UAAWX,CAAA,CAA4B,UAA5B,CAAwC,WAAxC,CA/FQ,CAiInBY,UAAWZ,CAAA,CAA4B,kBAA5B,CAAgD,UAAhD,CAjIQ,CAmJnBa,OAAQb,CAAA,CAA4B,iBAA5B;AAA+C,UAA/C,CAnJW,CA+JnBzC,WAAYyC,CAAA,CAA4B,qBAA5B,CAAmD,UAAnD,CA/JO,CA4KnBc,UAAWd,CAAA,CAA4B,kBAA5B,CAAgD,WAAhD,CA5KQ,CAyLnBe,UAAWf,CAAA,CAA4B,kBAA5B,CAAgD,WAAhD,CAzLQ,CAsMnB5F,OAAQA,CAtMW,CAkNnB4G,IAAKA,QAAQ,CAACC,CAAD,CAAQ,CACnBZ,CAAA/L,KAAA,CAAe2M,CAAf,CACA,OAAO,KAFY,CAlNF,CAwNjBzB,EAAJ,EACEpF,CAAA,CAAOoF,CAAP,CAGF,OAAOO,EA/O+B,CAAjC,CAXwC,CAvDP,CAArC,CAd0B,CAwWnCmB,QAASA,GAAW,CAACrQ,CAAD,CAAMT,CAAN,CAAW,CAC7B,GAAI3B,CAAA,CAAQoC,CAAR,CAAJ,CAAkB,CAChBT,CAAA,CAAMA,CAAN,EAAa,EAEb,KAHgB,IAGPP,EAAI,CAHG,CAGAY,EAAKI,CAAAjC,OAArB,CAAiCiB,CAAjC,CAAqCY,CAArC,CAAyCZ,CAAA,EAAzC,CACEO,CAAA,CAAIP,CAAJ,CAAA,CAASgB,CAAA,CAAIhB,CAAJ,CAJK,CAAlB,IAMO,IAAIa,CAAA,CAASG,CAAT,CAAJ,CAGL,IAASzB,CAAT,GAFAgB,EAEgBS,CAFVT,CAEUS,EAFH,EAEGA,CAAAA,CAAhB,CACE,GAAwB,GAAxB,GAAMzB,CAAA8G,OAAA,CAAW,CAAX,CAAN,EAAiD,GAAjD,GAA+B9G,CAAA8G,OAAA,CAAW,CAAX,CAA/B,CACE9F,CAAA,CAAIhB,CAAJ,CAAA,CAAWyB,CAAA,CAAIzB,CAAJ,CAKjB,OAAOgB,EAAP,EAAcS,CAjBe,CA0K/BsQ,QAASA,GAAkB,CAACtF,CAAD,CAAU,CACnCtK,CAAA,CAAOsK,CAAP,CAAgB,CACd,UAAa5B,EADC,CAEd,KAAQ/F,EAFM,CAGd,OAAU3C,CAHI,CAId,MAASG,EAJK,CAKd,OAAUgE,EALI,CAMd,QAAW/G,CANG,CAOd,QAAWM,CAPG,CAQd,SAAYmM,EARE,CASd,KAAQlJ,CATM,CAUd,KAAQoE,EAVM;AAWd,OAAUS,EAXI,CAYd,SAAYI,EAZE,CAad,SAAYhF,EAbE,CAcd,YAAeM,CAdD,CAed,UAAaC,CAfC,CAgBd,SAAYhE,CAhBE,CAiBd,WAAcW,CAjBA,CAkBd,SAAYqB,CAlBE,CAmBd,SAAY5B,CAnBE,CAoBd,UAAauC,EApBC,CAqBd,QAAW5C,CArBG,CAsBd,QAAW2S,EAtBG,CAuBd,OAAUtQ,EAvBI,CAwBd,UAAa8C,CAxBC,CAyBd,UAAayN,EAzBC,CA0Bd,UAAa,CAACC,UAAW,CAAZ,CA1BC,CA2Bd,eAAkBjF,EA3BJ,CA4Bd,SAAYhO,CA5BE,CA6Bd,MAASkT,EA7BK,CA8Bd,oBAAuBrF,EA9BT,CAAhB,CAiCAsF,GAAA,CAAgBtC,EAAA,CAAkB9Q,CAAlB,CAEhBoT,GAAA,CAAc,IAAd,CAAoB,CAAC,UAAD,CAApB,CAAkC,CAAC,UAAD,CAChCC,QAAiB,CAACxG,CAAD,CAAW,CAE1BA,CAAAyE,SAAA,CAAkB,CAChBgC,cAAeC,EADC,CAAlB,CAGA1G,EAAAyE,SAAA,CAAkB,UAAlB,CAA8BkC,EAA9B,CAAAd,UAAA,CACY,CACNe,EAAGC,EADG,CAENC,MAAOC,EAFD,CAGNC,SAAUD,EAHJ,CAINE,KAAMC,EAJA,CAKNC,OAAQC,EALF,CAMNC,OAAQC,EANF,CAONC,MAAOC,EAPD,CAQNC,OAAQC,EARF,CASNC,OAAQC,EATF,CAUNC,WAAYC,EAVN,CAWNC,eAAgBC,EAXV,CAYNC,QAASC,EAZH;AAaNC,YAAaC,EAbP,CAcNC,WAAYC,EAdN,CAeNC,QAASC,EAfH,CAgBNC,aAAcC,EAhBR,CAiBNC,OAAQC,EAjBF,CAkBNC,OAAQC,EAlBF,CAmBNC,KAAMC,EAnBA,CAoBNC,UAAWC,EApBL,CAqBNC,OAAQC,EArBF,CAsBNC,cAAeC,EAtBT,CAuBNC,YAAaC,EAvBP,CAwBNC,SAAUC,EAxBJ,CAyBNC,OAAQC,EAzBF,CA0BNC,QAASC,EA1BH,CA2BNC,SAAUC,EA3BJ,CA4BNC,aAAcC,EA5BR,CA6BNC,gBAAiBC,EA7BX,CA8BNC,UAAWC,EA9BL,CA+BNC,aAAcC,EA/BR,CAgCNC,QAASC,EAhCH,CAiCNC,OAAQC,EAjCF,CAkCNC,SAAUC,EAlCJ,CAmCNC,QAASC,EAnCH,CAoCNC,UAAWD,EApCL,CAqCNE,SAAUC,EArCJ,CAsCNC,WAAYD,EAtCN,CAuCNE,UAAWC,EAvCL,CAwCNC,YAAaD,EAxCP,CAyCNE,UAAWC,EAzCL,CA0CNC,YAAaD,EA1CP,CA2CNE,QAASC,EA3CH,CA4CNC,eAAgBC,EA5CV,CADZ,CAAAjG,UAAA,CA+CY,CACRoD,UAAW8C,EADH,CA/CZ,CAAAlG,UAAA,CAkDYmG,EAlDZ,CAAAnG,UAAA,CAmDYoG,EAnDZ,CAoDAjM,EAAAyE,SAAA,CAAkB,CAChByH,cAAeC,EADC;AAEhBC,SAAUC,EAFM,CAGhBC,YAAaC,EAHG,CAIhBC,YAAaC,EAJG,CAKhBC,eAAgBC,EALA,CAMhBC,gBAAiBC,EAND,CAOhBC,kBAAmBC,EAPH,CAQhBC,SAAUC,EARM,CAShBC,cAAeC,EATC,CAUhBC,YAAaC,EAVG,CAWhBC,UAAWC,EAXK,CAYhBC,kBAAmBC,EAZH,CAahBC,QAASC,EAbO,CAchBC,cAAeC,EAdC,CAehBC,aAAcC,EAfE,CAgBhBC,UAAWC,EAhBK,CAiBhBC,MAAOC,EAjBS,CAkBhBC,qBAAsBC,EAlBN,CAmBhBC,2BAA4BC,EAnBZ,CAoBhBC,aAAcC,EApBE,CAqBhBC,YAAaC,EArBG,CAsBhBC,gBAAiBC,EAtBD,CAuBhBC,UAAWC,EAvBK,CAwBhBC,KAAMC,EAxBU,CAyBhBC,OAAQC,EAzBQ,CA0BhBC,WAAYC,EA1BI,CA2BhBC,GAAIC,EA3BY,CA4BhBC,IAAKC,EA5BW,CA6BhBC,KAAMC,EA7BU,CA8BhBC,aAAcC,EA9BE,CA+BhBC,SAAUC,EA/BM,CAgChBC,eAAgBC,EAhCA,CAiChBC,iBAAkBC,EAjCF,CAkChBC,cAAeC,EAlCC,CAmChBC,SAAUC,EAnCM;AAoChBC,QAASC,EApCO,CAqChBC,MAAOC,EArCS,CAsChBC,SAAUC,EAtCM,CAuChBC,UAAWC,EAvCK,CAwChBC,eAAgBC,EAxCA,CAAlB,CAzD0B,CADI,CAAlC,CApCmC,CAqSrCC,QAASA,GAAS,CAAC7R,CAAD,CAAO,CACvB,MAAOA,EAAA7C,QAAA,CACG2U,EADH,CACyB,QAAQ,CAACC,CAAD,CAAI5P,CAAJ,CAAeE,CAAf,CAAuB2P,CAAvB,CAA+B,CACnE,MAAOA,EAAA,CAAS3P,CAAA4P,YAAA,EAAT,CAAgC5P,CAD4B,CADhE,CAAAlF,QAAA,CAIG+U,EAJH,CAIoB,OAJpB,CADgB,CAgCzBC,QAASA,GAAiB,CAACtZ,CAAD,CAAO,CAG3ByF,CAAAA,CAAWzF,CAAAyF,SACf,OA32BsB8T,EA22BtB,GAAO9T,CAAP,EAAyC,CAACA,CAA1C,EAv2BuB+T,CAu2BvB,GAAsD/T,CAJvB,CAoBjCgU,QAASA,GAAmB,CAACjU,CAAD,CAAOxJ,CAAP,CAAgB,CAAA,IACtC0d,CADsC,CACjC9R,CADiC,CAEtC+R,EAAW3d,CAAA4d,uBAAA,EAF2B,CAGtCjO,EAAQ,EAEZ,IA5BQkO,EAAA9Z,KAAA,CA4BayF,CA5Bb,CA4BR,CAGO,CAELkU,CAAA,CAAMC,CAAAG,YAAA,CAAqB9d,CAAA+d,cAAA,CAAsB,KAAtB,CAArB,CACNnS,EAAA,CAAM,CAACoS,EAAAC,KAAA,CAAqBzU,CAArB,CAAD,EAA+B,CAAC,EAAD,CAAK,EAAL,CAA/B,EAAyC,CAAzC,CAAAkE,YAAA,EACNwQ,EAAA,CAAOC,EAAA,CAAQvS,CAAR,CAAP,EAAuBuS,EAAAC,SACvBV,EAAAW,UAAA,CAAgBH,CAAA,CAAK,CAAL,CAAhB,CAA0B1U,CAAAlB,QAAA,CAAagW,EAAb,CAA+B,WAA/B,CAA1B,CAAwEJ,CAAA,CAAK,CAAL,CAIxE,KADAxd,CACA,CADIwd,CAAA,CAAK,CAAL,CACJ,CAAOxd,CAAA,EAAP,CAAA,CACEgd,CAAA,CAAMA,CAAAa,UAGR5O,EAAA,CAAQ3I,EAAA,CAAO2I,CAAP,CAAc+N,CAAAc,WAAd,CAERd,EAAA,CAAMC,CAAAc,WACNf;CAAAgB,YAAA,CAAkB,EAhBb,CAHP,IAEE/O,EAAAxK,KAAA,CAAWnF,CAAA2e,eAAA,CAAuBnV,CAAvB,CAAX,CAqBFmU,EAAAe,YAAA,CAAuB,EACvBf,EAAAU,UAAA,CAAqB,EACrBve,EAAA,CAAQ6P,CAAR,CAAe,QAAQ,CAAC3L,CAAD,CAAO,CAC5B2Z,CAAAG,YAAA,CAAqB9Z,CAArB,CAD4B,CAA9B,CAIA,OAAO2Z,EAlCmC,CAoD5CiB,QAASA,GAAc,CAAC5a,CAAD,CAAO6a,CAAP,CAAgB,CACrC,IAAIjc,EAASoB,CAAA8a,WAETlc,EAAJ,EACEA,CAAAmc,aAAA,CAAoBF,CAApB,CAA6B7a,CAA7B,CAGF6a,EAAAf,YAAA,CAAoB9Z,CAApB,CAPqC,CAmBvC8K,QAASA,EAAM,CAACtK,CAAD,CAAU,CACvB,GAAIA,CAAJ,WAAuBsK,EAAvB,CACE,MAAOtK,EAGT,KAAIwa,CAEAzf,EAAA,CAASiF,CAAT,CAAJ,GACEA,CACA,CADUya,CAAA,CAAKza,CAAL,CACV,CAAAwa,CAAA,CAAc,CAAA,CAFhB,CAIA,IAAM,EAAA,IAAA,WAAgBlQ,EAAhB,CAAN,CAA+B,CAC7B,GAAIkQ,CAAJ,EAAwC,GAAxC,EAAmBxa,CAAAuC,OAAA,CAAe,CAAf,CAAnB,CACE,KAAMmY,GAAA,CAAa,OAAb,CAAN,CAEF,MAAO,KAAIpQ,CAAJ,CAAWtK,CAAX,CAJsB,CAO/B,GAAIwa,CAAJ,CAAiB,CAnDjBhf,CAAA,CAAqBf,CAAA0I,SACrB,KAAIwX,CAGF,EAAA,CADF,CAAKA,CAAL,CAAcC,EAAAnB,KAAA,CAAuBzU,CAAvB,CAAd,EACS,CAACxJ,CAAA+d,cAAA,CAAsBoB,CAAA,CAAO,CAAP,CAAtB,CAAD,CADT,CAIA,CAAKA,CAAL,CAAc1B,EAAA,CAAoBjU,CAApB,CAA0BxJ,CAA1B,CAAd,EACSmf,CAAAX,WADT,CAIO,EAwCU,CACfa,EAAA,CAAe,IAAf,CAAqB,CAArB,CAnBqB,CAyBzBC,QAASA,GAAW,CAAC9a,CAAD,CAAU,CAC5B,MAAOA,EAAAvC,UAAA,CAAkB,CAAA,CAAlB,CADqB,CAI9Bsd,QAASA,GAAY,CAAC/a,CAAD;AAAUgb,CAAV,CAA2B,CACzCA,CAAL,EAAsBC,EAAA,CAAiBjb,CAAjB,CAEtB,IAAIA,CAAAkb,iBAAJ,CAEE,IADA,IAAIC,EAAcnb,CAAAkb,iBAAA,CAAyB,GAAzB,CAAlB,CACShf,EAAI,CADb,CACgBkf,EAAID,CAAAlgB,OAApB,CAAwCiB,CAAxC,CAA4Ckf,CAA5C,CAA+Clf,CAAA,EAA/C,CACE+e,EAAA,CAAiBE,CAAA,CAAYjf,CAAZ,CAAjB,CAN0C,CAWhDmf,QAASA,GAAS,CAACrb,CAAD,CAAU8B,CAAV,CAAgBe,CAAhB,CAAoByY,CAApB,CAAiC,CACjD,GAAIvc,CAAA,CAAUuc,CAAV,CAAJ,CAA4B,KAAMZ,GAAA,CAAa,SAAb,CAAN,CAG5B,IAAIzQ,GADAsR,CACAtR,CADeuR,EAAA,CAAmBxb,CAAnB,CACfiK,GAAyBsR,CAAAtR,OAA7B,CACIwR,EAASF,CAATE,EAAyBF,CAAAE,OAE7B,IAAKA,CAAL,CAEA,GAAK3Z,CAAL,CAOO,CAEL,IAAI4Z,EAAgBA,QAAQ,CAAC5Z,CAAD,CAAO,CACjC,IAAI6Z,EAAc1R,CAAA,CAAOnI,CAAP,CACd/C,EAAA,CAAU8D,CAAV,CAAJ,EACE3C,EAAA,CAAYyb,CAAZ,EAA2B,EAA3B,CAA+B9Y,CAA/B,CAEI9D,EAAA,CAAU8D,CAAV,CAAN,EAAuB8Y,CAAvB,EAA2D,CAA3D,CAAsCA,CAAA1gB,OAAtC,GACwB+E,CAnNxB4b,oBAAA,CAmNiC9Z,CAnNjC,CAmNuC2Z,CAnNvC,CAAsC,CAAA,CAAtC,CAoNE,CAAA,OAAOxR,CAAA,CAAOnI,CAAP,CAFT,CALiC,CAWnCxG,EAAA,CAAQwG,CAAAhC,MAAA,CAAW,GAAX,CAAR,CAAyB,QAAQ,CAACgC,CAAD,CAAO,CACtC4Z,CAAA,CAAc5Z,CAAd,CACI+Z,GAAA,CAAgB/Z,CAAhB,CAAJ,EACE4Z,CAAA,CAAcG,EAAA,CAAgB/Z,CAAhB,CAAd,CAHoC,CAAxC,CAbK,CAPP,IACE,KAAKA,CAAL,GAAamI,EAAb,CACe,UAGb,GAHInI,CAGJ,EAFwB9B,CAvMxB4b,oBAAA,CAuMiC9Z,CAvMjC,CAuMuC2Z,CAvMvC,CAAsC,CAAA,CAAtC,CAyMA,CAAA,OAAOxR,CAAA,CAAOnI,CAAP,CAdsC,CAsCnDmZ,QAASA,GAAgB,CAACjb,CAAD,CAAU2G,CAAV,CAAgB,CACvC,IAAImV,EAAY9b,CAAA+b,MAAhB,CACIR,EAAeO,CAAfP,EAA4BS,EAAA,CAAQF,CAAR,CAE5BP,EAAJ,GACM5U,CAAJ,CACE,OAAO4U,CAAAxT,KAAA,CAAkBpB,CAAlB,CADT;CAKI4U,CAAAE,OAOJ,GANMF,CAAAtR,OAAAG,SAGJ,EAFEmR,CAAAE,OAAA,CAAoB,EAApB,CAAwB,UAAxB,CAEF,CAAAJ,EAAA,CAAUrb,CAAV,CAGF,EADA,OAAOgc,EAAA,CAAQF,CAAR,CACP,CAAA9b,CAAA+b,MAAA,CAAgB7a,IAAAA,EAZhB,CADF,CAJuC,CAsBzCsa,QAASA,GAAkB,CAACxb,CAAD,CAAUic,CAAV,CAA6B,CAAA,IAClDH,EAAY9b,CAAA+b,MADsC,CAElDR,EAAeO,CAAfP,EAA4BS,EAAA,CAAQF,CAAR,CAE5BG,EAAJ,EAA0BV,CAAAA,CAA1B,GACEvb,CAAA+b,MACA,CADgBD,CAChB,CAlPyB,EAAEI,EAkP3B,CAAAX,CAAA,CAAeS,EAAA,CAAQF,CAAR,CAAf,CAAoC,CAAC7R,OAAQ,EAAT,CAAalC,KAAM,EAAnB,CAAuB0T,OAAQva,IAAAA,EAA/B,CAFtC,CAKA,OAAOqa,EAT+C,CAaxDY,QAASA,GAAU,CAACnc,CAAD,CAAUvE,CAAV,CAAeY,CAAf,CAAsB,CACvC,GAAIyc,EAAA,CAAkB9Y,CAAlB,CAAJ,CAAgC,CAE9B,IAAIoc,EAAiBrd,CAAA,CAAU1C,CAAV,CAArB,CACIggB,EAAiB,CAACD,CAAlBC,EAAoC5gB,CAApC4gB,EAA2C,CAACtf,CAAA,CAAStB,CAAT,CADhD,CAEI6gB,EAAa,CAAC7gB,CAEdsM,EAAAA,EADAwT,CACAxT,CADeyT,EAAA,CAAmBxb,CAAnB,CAA4B,CAACqc,CAA7B,CACftU,GAAuBwT,CAAAxT,KAE3B,IAAIqU,CAAJ,CACErU,CAAA,CAAKtM,CAAL,CAAA,CAAYY,CADd,KAEO,CACL,GAAIigB,CAAJ,CACE,MAAOvU,EAEP,IAAIsU,CAAJ,CAEE,MAAOtU,EAAP,EAAeA,CAAA,CAAKtM,CAAL,CAEfmC,EAAA,CAAOmK,CAAP,CAAatM,CAAb,CARC,CAVuB,CADO,CA0BzC8gB,QAASA,GAAc,CAACvc,CAAD,CAAUwc,CAAV,CAAoB,CACzC,MAAKxc,EAAAoG,aAAL,CAEqC,EAFrC,CACQtC,CAAC,GAADA,EAAQ9D,CAAAoG,aAAA,CAAqB,OAArB,CAARtC,EAAyC,EAAzCA,EAA+C,GAA/CA,SAAA,CAA4D,SAA5D,CAAuE,GAAvE,CAAAzD,QAAA,CACI,GADJ,CACUmc,CADV,CACqB,GADrB,CADR,CAAkC,CAAA,CADO,CAM3CC,QAASA,GAAiB,CAACzc,CAAD,CAAU0c,CAAV,CAAsB,CAC1CA,CAAJ,EAAkB1c,CAAA2c,aAAlB;AACErhB,CAAA,CAAQohB,CAAA5c,MAAA,CAAiB,GAAjB,CAAR,CAA+B,QAAQ,CAAC8c,CAAD,CAAW,CAChD5c,CAAA2c,aAAA,CAAqB,OAArB,CAA8BlC,CAAA,CAC1B3W,CAAC,GAADA,EAAQ9D,CAAAoG,aAAA,CAAqB,OAArB,CAARtC,EAAyC,EAAzCA,EAA+C,GAA/CA,SAAA,CACS,SADT,CACoB,GADpB,CAAAA,QAAA,CAES,GAFT,CAEe2W,CAAA,CAAKmC,CAAL,CAFf,CAEgC,GAFhC,CAEqC,GAFrC,CAD0B,CAA9B,CADgD,CAAlD,CAF4C,CAYhDC,QAASA,GAAc,CAAC7c,CAAD,CAAU0c,CAAV,CAAsB,CAC3C,GAAIA,CAAJ,EAAkB1c,CAAA2c,aAAlB,CAAwC,CACtC,IAAIG,EAAkBhZ,CAAC,GAADA,EAAQ9D,CAAAoG,aAAA,CAAqB,OAArB,CAARtC,EAAyC,EAAzCA,EAA+C,GAA/CA,SAAA,CACW,SADX,CACsB,GADtB,CAGtBxI,EAAA,CAAQohB,CAAA5c,MAAA,CAAiB,GAAjB,CAAR,CAA+B,QAAQ,CAAC8c,CAAD,CAAW,CAChDA,CAAA,CAAWnC,CAAA,CAAKmC,CAAL,CAC4C,GAAvD,GAAIE,CAAAzc,QAAA,CAAwB,GAAxB,CAA8Buc,CAA9B,CAAyC,GAAzC,CAAJ,GACEE,CADF,EACqBF,CADrB,CACgC,GADhC,CAFgD,CAAlD,CAOA5c,EAAA2c,aAAA,CAAqB,OAArB,CAA8BlC,CAAA,CAAKqC,CAAL,CAA9B,CAXsC,CADG,CAiB7CjC,QAASA,GAAc,CAACkC,CAAD,CAAOC,CAAP,CAAiB,CAGtC,GAAIA,CAAJ,CAGE,GAAIA,CAAA/X,SAAJ,CACE8X,CAAA,CAAKA,CAAA9hB,OAAA,EAAL,CAAA,CAAsB+hB,CADxB,KAEO,CACL,IAAI/hB,EAAS+hB,CAAA/hB,OAGb,IAAsB,QAAtB,GAAI,MAAOA,EAAX,EAAkC+hB,CAAAviB,OAAlC,GAAsDuiB,CAAtD,CACE,IAAI/hB,CAAJ,CACE,IAAS,IAAAiB,EAAI,CAAb,CAAgBA,CAAhB,CAAoBjB,CAApB,CAA4BiB,CAAA,EAA5B,CACE6gB,CAAA,CAAKA,CAAA9hB,OAAA,EAAL,CAAA;AAAsB+hB,CAAA,CAAS9gB,CAAT,CAF1B,CADF,IAOE6gB,EAAA,CAAKA,CAAA9hB,OAAA,EAAL,CAAA,CAAsB+hB,CAXnB,CAR6B,CA0BxCC,QAASA,GAAgB,CAACjd,CAAD,CAAU2G,CAAV,CAAgB,CACvC,MAAOuW,GAAA,CAAoBld,CAApB,CAA6B,GAA7B,EAAoC2G,CAApC,EAA4C,cAA5C,EAA8D,YAA9D,CADgC,CAIzCuW,QAASA,GAAmB,CAACld,CAAD,CAAU2G,CAAV,CAAgBtK,CAAhB,CAAuB,CA1oC1B2c,CA6oCvB,EAAIhZ,CAAAiF,SAAJ,GACEjF,CADF,CACYA,CAAAmd,gBADZ,CAKA,KAFIC,CAEJ,CAFYtiB,CAAA,CAAQ6L,CAAR,CAAA,CAAgBA,CAAhB,CAAuB,CAACA,CAAD,CAEnC,CAAO3G,CAAP,CAAA,CAAgB,CACd,IADc,IACL9D,EAAI,CADC,CACEY,EAAKsgB,CAAAniB,OAArB,CAAmCiB,CAAnC,CAAuCY,CAAvC,CAA2CZ,CAAA,EAA3C,CACE,GAAI6C,CAAA,CAAU1C,CAAV,CAAkBrB,CAAA+M,KAAA,CAAY/H,CAAZ,CAAqBod,CAAA,CAAMlhB,CAAN,CAArB,CAAlB,CAAJ,CAAuD,MAAOG,EAMhE2D,EAAA,CAAUA,CAAAsa,WAAV,EAzpC8B+C,EAypC9B,GAAiCrd,CAAAiF,SAAjC,EAAqFjF,CAAAsd,KARvE,CARiC,CAoBnDC,QAASA,GAAW,CAACvd,CAAD,CAAU,CAE5B,IADA+a,EAAA,CAAa/a,CAAb,CAAsB,CAAA,CAAtB,CACA,CAAOA,CAAAia,WAAP,CAAA,CACEja,CAAAwd,YAAA,CAAoBxd,CAAAia,WAApB,CAH0B,CAO9BwD,QAASA,GAAY,CAACzd,CAAD,CAAU0d,CAAV,CAAoB,CAClCA,CAAL,EAAe3C,EAAA,CAAa/a,CAAb,CACf,KAAI5B,EAAS4B,CAAAsa,WACTlc,EAAJ,EAAYA,CAAAof,YAAA,CAAmBxd,CAAnB,CAH2B,CAOzC2d,QAASA,GAAoB,CAACC,CAAD,CAASC,CAAT,CAAc,CACzCA,CAAA,CAAMA,CAAN,EAAapjB,CACb,IAAgC,UAAhC,GAAIojB,CAAA1a,SAAA2a,WAAJ,CAIED,CAAAE,WAAA,CAAeH,CAAf,CAJF,KAOE5iB,EAAA,CAAO6iB,CAAP,CAAApU,GAAA,CAAe,MAAf;AAAuBmU,CAAvB,CATuC,CA0E3CI,QAASA,GAAkB,CAAChe,CAAD,CAAU2G,CAAV,CAAgB,CAEzC,IAAIsX,EAAcC,EAAA,CAAavX,CAAAuC,YAAA,EAAb,CAGlB,OAAO+U,EAAP,EAAsBE,EAAA,CAAiBpe,EAAA,CAAUC,CAAV,CAAjB,CAAtB,EAA8Die,CALrB,CA0L3CG,QAASA,GAAkB,CAACpe,CAAD,CAAUiK,CAAV,CAAkB,CAC3C,IAAIoU,EAAeA,QAAQ,CAACC,CAAD,CAAQxc,CAAR,CAAc,CAEvCwc,CAAAC,mBAAA,CAA2BC,QAAQ,EAAG,CACpC,MAAOF,EAAAG,iBAD6B,CAItC,KAAIC,EAAWzU,CAAA,CAAOnI,CAAP,EAAewc,CAAAxc,KAAf,CAAf,CACI6c,EAAiBD,CAAA,CAAWA,CAAAzjB,OAAX,CAA6B,CAElD,IAAK0jB,CAAL,CAAA,CAEA,GAAI7f,CAAA,CAAYwf,CAAAM,4BAAZ,CAAJ,CAAoD,CAClD,IAAIC,EAAmCP,CAAAQ,yBACvCR,EAAAQ,yBAAA,CAAiCC,QAAQ,EAAG,CAC1CT,CAAAM,4BAAA,CAAoC,CAAA,CAEhCN,EAAAU,gBAAJ,EACEV,CAAAU,gBAAA,EAGEH,EAAJ,EACEA,CAAAjjB,KAAA,CAAsC0iB,CAAtC,CARwC,CAFM,CAepDA,CAAAW,8BAAA,CAAsCC,QAAQ,EAAG,CAC/C,MAA6C,CAAA,CAA7C,GAAOZ,CAAAM,4BADwC,CAKjD,KAAIO,EAAiBT,CAAAU,sBAAjBD;AAAmDE,EAGjC,EAAtB,CAAKV,CAAL,GACED,CADF,CACanR,EAAA,CAAYmR,CAAZ,CADb,CAIA,KAAS,IAAAxiB,EAAI,CAAb,CAAgBA,CAAhB,CAAoByiB,CAApB,CAAoCziB,CAAA,EAApC,CACOoiB,CAAAW,8BAAA,EAAL,EACEE,CAAA,CAAenf,CAAf,CAAwBse,CAAxB,CAA+BI,CAAA,CAASxiB,CAAT,CAA/B,CA/BJ,CATuC,CA+CzCmiB,EAAAnU,KAAA,CAAoBlK,CACpB,OAAOqe,EAjDoC,CAoD7CgB,QAASA,GAAqB,CAACrf,CAAD,CAAUse,CAAV,CAAiBgB,CAAjB,CAA0B,CACtDA,CAAA1jB,KAAA,CAAaoE,CAAb,CAAsBse,CAAtB,CADsD,CAIxDiB,QAASA,GAA0B,CAACC,CAAD,CAASlB,CAAT,CAAgBgB,CAAhB,CAAyB,CAI1D,IAAIG,EAAUnB,CAAAoB,cAGTD,EAAL,GAAiBA,CAAjB,GAA6BD,CAA7B,EAAwCG,EAAA/jB,KAAA,CAAoB4jB,CAApB,CAA4BC,CAA5B,CAAxC,GACEH,CAAA1jB,KAAA,CAAa4jB,CAAb,CAAqBlB,CAArB,CARwD,CAuP5DnG,QAASA,GAAgB,EAAG,CAC1B,IAAAyH,KAAA,CAAYC,QAAiB,EAAG,CAC9B,MAAOjiB,EAAA,CAAO0M,CAAP,CAAe,CACpBwV,SAAUA,QAAQ,CAACtgB,CAAD,CAAOugB,CAAP,CAAgB,CAC5BvgB,CAAAE,KAAJ,GAAeF,CAAf,CAAsBA,CAAA,CAAK,CAAL,CAAtB,CACA,OAAO+c,GAAA,CAAe/c,CAAf,CAAqBugB,CAArB,CAFyB,CADd,CAKpBC,SAAUA,QAAQ,CAACxgB,CAAD,CAAOugB,CAAP,CAAgB,CAC5BvgB,CAAAE,KAAJ,GAAeF,CAAf,CAAsBA,CAAA,CAAK,CAAL,CAAtB,CACA,OAAOqd,GAAA,CAAerd,CAAf,CAAqBugB,CAArB,CAFyB,CALd,CASpBE,YAAaA,QAAQ,CAACzgB,CAAD,CAAOugB,CAAP,CAAgB,CAC/BvgB,CAAAE,KAAJ,GAAeF,CAAf,CAAsBA,CAAA,CAAK,CAAL,CAAtB,CACA,OAAOid,GAAA,CAAkBjd,CAAlB,CAAwBugB,CAAxB,CAF4B,CATjB,CAAf,CADuB,CADN,CA+B5BG,QAASA,GAAO,CAACtlB,CAAD,CAAMulB,CAAN,CAAiB,CAC/B,IAAI1kB,EAAMb,CAANa,EAAab,CAAAiC,UAEjB,IAAIpB,CAAJ,CAIE,MAHmB,UAGZA,GAHH,MAAOA,EAGJA;CAFLA,CAEKA,CAFCb,CAAAiC,UAAA,EAEDpB,EAAAA,CAGL2kB,EAAAA,CAAU,MAAOxlB,EAOrB,OALEa,EAKF,CANe,UAAf,EAAI2kB,CAAJ,EAAyC,QAAzC,EAA8BA,CAA9B,EAA6D,IAA7D,GAAqDxlB,CAArD,CACQA,CAAAiC,UADR,CACwBujB,CADxB,CACkC,GADlC,CACwC,CAACD,CAAD,EAAc7jB,EAAd,GADxC,CAGQ8jB,CAHR,CAGkB,GAHlB,CAGwBxlB,CAdO,CAuBjCylB,QAASA,GAAO,CAAClgB,CAAD,CAAQmgB,CAAR,CAAqB,CACnC,GAAIA,CAAJ,CAAiB,CACf,IAAI/jB,EAAM,CACV,KAAAD,QAAA,CAAeikB,QAAQ,EAAG,CACxB,MAAO,EAAEhkB,CADe,CAFX,CAMjBjB,CAAA,CAAQ6E,CAAR,CAAe,IAAAqgB,IAAf,CAAyB,IAAzB,CAPmC,CA0HrCC,QAASA,GAAW,CAAC5d,CAAD,CAAK,CACnB6d,CAAAA,CAAS5c,CAJN6c,QAAAC,UAAA/hB,SAAAjD,KAAA,CAIkBiH,CAJlB,CAIMiB,CAJiC,GAIjCA,SAAA,CAAwB+c,EAAxB,CAAwC,EAAxC,CAEb,OADWH,EAAA9e,MAAA,CAAakf,EAAb,CACX,EADsCJ,CAAA9e,MAAA,CAAamf,EAAb,CAFf,CAMzBC,QAASA,GAAM,CAACne,CAAD,CAAK,CAIlB,MAAA,CADIoe,CACJ,CADWR,EAAA,CAAY5d,CAAZ,CACX,EACS,WADT,CACuBiB,CAACmd,CAAA,CAAK,CAAL,CAADnd,EAAY,EAAZA,SAAA,CAAwB,WAAxB,CAAqC,GAArC,CADvB,CACmE,GADnE,CAGO,IAPW,CAijBpB2D,QAASA,GAAc,CAACyZ,CAAD,CAAgBna,CAAhB,CAA0B,CA4C/Coa,QAASA,EAAa,CAACC,CAAD,CAAW,CAC/B,MAAO,SAAQ,CAAC3lB,CAAD,CAAMY,CAAN,CAAa,CAC1B,GAAIU,CAAA,CAAStB,CAAT,CAAJ,CACEH,CAAA,CAAQG,CAAR,CAAaU,EAAA,CAAcilB,CAAd,CAAb,CADF,KAGE,OAAOA,EAAA,CAAS3lB,CAAT,CAAcY,CAAd,CAJiB,CADG,CAUjC0P,QAASA,EAAQ,CAACpF,CAAD,CAAO0a,CAAP,CAAkB,CACjCzW,EAAA,CAAwBjE,CAAxB;AAA8B,SAA9B,CACA,IAAIjL,CAAA,CAAW2lB,CAAX,CAAJ,EAA6BvmB,CAAA,CAAQumB,CAAR,CAA7B,CACEA,CAAA,CAAYC,CAAAC,YAAA,CAA6BF,CAA7B,CAEd,IAAKzB,CAAAyB,CAAAzB,KAAL,CACE,KAAMlU,GAAA,CAAgB,MAAhB,CAA2E/E,CAA3E,CAAN,CAEF,MAAO6a,EAAA,CAAc7a,CAAd,CA3DY8a,UA2DZ,CAAP,CAA8CJ,CARb,CAWnCK,QAASA,EAAkB,CAAC/a,CAAD,CAAO8E,CAAP,CAAgB,CACzC,MAAOkW,SAA4B,EAAG,CACpC,IAAIC,EAASC,CAAAna,OAAA,CAAwB+D,CAAxB,CAAiC,IAAjC,CACb,IAAI3M,CAAA,CAAY8iB,CAAZ,CAAJ,CACE,KAAMlW,GAAA,CAAgB,OAAhB,CAAyF/E,CAAzF,CAAN,CAEF,MAAOib,EAL6B,CADG,CAU3CnW,QAASA,EAAO,CAAC9E,CAAD,CAAOmb,CAAP,CAAkBC,CAAlB,CAA2B,CACzC,MAAOhW,EAAA,CAASpF,CAAT,CAAe,CACpBiZ,KAAkB,CAAA,CAAZ,GAAAmC,CAAA,CAAoBL,CAAA,CAAmB/a,CAAnB,CAAyBmb,CAAzB,CAApB,CAA0DA,CAD5C,CAAf,CADkC,CAiC3CE,QAASA,EAAW,CAACd,CAAD,CAAgB,CAClC3W,EAAA,CAAUzL,CAAA,CAAYoiB,CAAZ,CAAV,EAAwCpmB,CAAA,CAAQomB,CAAR,CAAxC,CAAgE,eAAhE,CAAiF,cAAjF,CADkC,KAE9BxU,EAAY,EAFkB,CAEduV,CACpB3mB,EAAA,CAAQ4lB,CAAR,CAAuB,QAAQ,CAAC1a,CAAD,CAAS,CAItC0b,QAASA,EAAc,CAAChW,CAAD,CAAQ,CAAA,IACzBhQ,CADyB,CACtBY,CACFZ,EAAA,CAAI,CAAT,KAAYY,CAAZ,CAAiBoP,CAAAjR,OAAjB,CAA+BiB,CAA/B,CAAmCY,CAAnC,CAAuCZ,CAAA,EAAvC,CAA4C,CAAA,IACtCimB,EAAajW,CAAA,CAAMhQ,CAAN,CADyB,CAEtC6P,EAAWuV,CAAA1Y,IAAA,CAAqBuZ,CAAA,CAAW,CAAX,CAArB,CAEfpW,EAAA,CAASoW,CAAA,CAAW,CAAX,CAAT,CAAAnf,MAAA,CAA8B+I,CAA9B,CAAwCoW,CAAA,CAAW,CAAX,CAAxC,CAJ0C,CAFf,CAH/B,GAAI,CAAAC,CAAAxZ,IAAA,CAAkBpC,CAAlB,CAAJ,CAAA,CACA4b,CAAA5B,IAAA,CAAkBha,CAAlB,CAA0B,CAAA,CAA1B,CAYA,IAAI,CACEzL,CAAA,CAASyL,CAAT,CAAJ,EACEyb,CAGA,CAHWpU,EAAA,CAAcrH,CAAd,CAGX,CAFAkG,CAEA,CAFYA,CAAAlK,OAAA,CAAiBwf,CAAA,CAAYC,CAAArW,SAAZ,CAAjB,CAAApJ,OAAA,CAAwDyf,CAAApV,WAAxD,CAEZ;AADAqV,CAAA,CAAeD,CAAAtV,aAAf,CACA,CAAAuV,CAAA,CAAeD,CAAArV,cAAf,CAJF,EAKWlR,CAAA,CAAW8K,CAAX,CAAJ,CACHkG,CAAA/L,KAAA,CAAe2gB,CAAA5Z,OAAA,CAAwBlB,CAAxB,CAAf,CADG,CAEI1L,CAAA,CAAQ0L,CAAR,CAAJ,CACHkG,CAAA/L,KAAA,CAAe2gB,CAAA5Z,OAAA,CAAwBlB,CAAxB,CAAf,CADG,CAGLkE,EAAA,CAAYlE,CAAZ,CAAoB,QAApB,CAXA,CAaF,MAAO3B,CAAP,CAAU,CAYV,KAXI/J,EAAA,CAAQ0L,CAAR,CAWE,GAVJA,CAUI,CAVKA,CAAA,CAAOA,CAAAvL,OAAP,CAAuB,CAAvB,CAUL,EARF4J,CAAAwd,QAQE,EARWxd,CAAAyd,MAQX,EARqD,EAQrD,EARsBzd,CAAAyd,MAAAjiB,QAAA,CAAgBwE,CAAAwd,QAAhB,CAQtB,GAFJxd,CAEI,CAFAA,CAAAwd,QAEA,CAFY,IAEZ,CAFmBxd,CAAAyd,MAEnB,EAAA5W,EAAA,CAAgB,UAAhB,CACIlF,CADJ,CACY3B,CAAAyd,MADZ,EACuBzd,CAAAwd,QADvB,EACoCxd,CADpC,CAAN,CAZU,CA1BZ,CADsC,CAAxC,CA2CA,OAAO6H,EA9C2B,CAqDpC6V,QAASA,EAAsB,CAACC,CAAD,CAAQ/W,CAAR,CAAiB,CAE9CgX,QAASA,EAAU,CAACC,CAAD,CAAcC,CAAd,CAAsB,CACvC,GAAIH,CAAA7mB,eAAA,CAAqB+mB,CAArB,CAAJ,CAAuC,CACrC,GAAIF,CAAA,CAAME,CAAN,CAAJ,GAA2BE,CAA3B,CACE,KAAMlX,GAAA,CAAgB,MAAhB,CACIgX,CADJ,CACkB,MADlB,CAC2B5X,CAAAjF,KAAA,CAAU,MAAV,CAD3B,CAAN,CAGF,MAAO2c,EAAA,CAAME,CAAN,CAL8B,CAOrC,GAAI,CAGF,MAFA5X,EAAAzD,QAAA,CAAaqb,CAAb,CAEO,CADPF,CAAA,CAAME,CAAN,CACO,CADcE,CACd,CAAAJ,CAAA,CAAME,CAAN,CAAA,CAAqBjX,CAAA,CAAQiX,CAAR,CAAqBC,CAArB,CAH1B,CAIF,MAAOE,CAAP,CAAY,CAIZ,KAHIL,EAAA,CAAME,CAAN,CAGEG,GAHqBD,CAGrBC,EAFJ,OAAOL,CAAA,CAAME,CAAN,CAEHG,CAAAA,CAAN,CAJY,CAJd,OASU,CACR/X,CAAAgY,MAAA,EADQ,CAjB2B,CAwBzCC,QAASA,EAAa,CAAClgB,CAAD;AAAKmgB,CAAL,CAAaN,CAAb,CAA0B,CAAA,IAC1CzB,EAAO,EACPgC,EAAAA,CAAUxb,EAAAyb,WAAA,CAA0BrgB,CAA1B,CAA8BkE,CAA9B,CAAwC2b,CAAxC,CAEd,KAJ8C,IAIrCxmB,EAAI,CAJiC,CAI9BjB,EAASgoB,CAAAhoB,OAAzB,CAAyCiB,CAAzC,CAA6CjB,CAA7C,CAAqDiB,CAAA,EAArD,CAA0D,CACxD,IAAIT,EAAMwnB,CAAA,CAAQ/mB,CAAR,CACV,IAAmB,QAAnB,GAAI,MAAOT,EAAX,CACE,KAAMiQ,GAAA,CAAgB,MAAhB,CACyEjQ,CADzE,CAAN,CAGFwlB,CAAAtgB,KAAA,CAAUqiB,CAAA,EAAUA,CAAArnB,eAAA,CAAsBF,CAAtB,CAAV,CAAuCunB,CAAA,CAAOvnB,CAAP,CAAvC,CACuCgnB,CAAA,CAAWhnB,CAAX,CAAgBinB,CAAhB,CADjD,CANwD,CAS1D,MAAOzB,EAbuC,CA4DhD,MAAO,CACLvZ,OAlCFA,QAAe,CAAC7E,CAAD,CAAKD,CAAL,CAAWogB,CAAX,CAAmBN,CAAnB,CAAgC,CACvB,QAAtB,GAAI,MAAOM,EAAX,GACEN,CACA,CADcM,CACd,CAAAA,CAAA,CAAS,IAFX,CAKI/B,EAAAA,CAAO8B,CAAA,CAAclgB,CAAd,CAAkBmgB,CAAlB,CAA0BN,CAA1B,CACP5nB,EAAA,CAAQ+H,CAAR,CAAJ,GACEA,CADF,CACOA,CAAA,CAAGA,CAAA5H,OAAH,CAAe,CAAf,CADP,CAfE,EAAA,CADU,EAAZ,EAAIkoB,EAAJ,CACS,CAAA,CADT,CAKuB,UALvB,GAKO,MAeMtgB,EApBb,EAMK,4BAAAtD,KAAA,CA7wBFohB,QAAAC,UAAA/hB,SAAAjD,KAAA,CA2xBUiH,CA3xBV,CA6wBE,CA7wBqC,GA6wBrC,CAcL,OAAK,EAAL,EAKEoe,CAAA5Z,QAAA,CAAa,IAAb,CACO,CAAA,KAAKsZ,QAAAC,UAAAje,KAAAK,MAAA,CAA8BH,CAA9B,CAAkCoe,CAAlC,CAAL,CANT,EAGSpe,CAAAG,MAAA,CAASJ,CAAT,CAAeqe,CAAf,CAdoC,CAiCxC,CAELM,YAbFA,QAAoB,CAAC6B,CAAD,CAAOJ,CAAP,CAAeN,CAAf,CAA4B,CAG9C,IAAIW;AAAQvoB,CAAA,CAAQsoB,CAAR,CAAA,CAAgBA,CAAA,CAAKA,CAAAnoB,OAAL,CAAmB,CAAnB,CAAhB,CAAwCmoB,CAChDnC,EAAAA,CAAO8B,CAAA,CAAcK,CAAd,CAAoBJ,CAApB,CAA4BN,CAA5B,CAEXzB,EAAA5Z,QAAA,CAAa,IAAb,CACA,OAAO,MAAKsZ,QAAAC,UAAAje,KAAAK,MAAA,CAA8BqgB,CAA9B,CAAoCpC,CAApC,CAAL,CAPuC,CAWzC,CAGLrY,IAAK6Z,CAHA,CAILa,SAAU7b,EAAAyb,WAJL,CAKLK,IAAKA,QAAQ,CAAC5c,CAAD,CAAO,CAClB,MAAO6a,EAAA7lB,eAAA,CAA6BgL,CAA7B,CA1PQ8a,UA0PR,CAAP,EAA8De,CAAA7mB,eAAA,CAAqBgL,CAArB,CAD5C,CALf,CAtFuC,CAhKhDI,CAAA,CAAyB,CAAA,CAAzB,GAAYA,CADmC,KAE3C6b,EAAgB,EAF2B,CAI3C9X,EAAO,EAJoC,CAK3CsX,EAAgB,IAAI/B,EAAJ,CAAY,EAAZ,CAAgB,CAAA,CAAhB,CAL2B,CAM3CmB,EAAgB,CACdla,SAAU,CACNyE,SAAUoV,CAAA,CAAcpV,CAAd,CADJ,CAENN,QAAS0V,CAAA,CAAc1V,CAAd,CAFH,CAGNqB,QAASqU,CAAA,CAuEnBrU,QAAgB,CAACnG,CAAD,CAAOxF,CAAP,CAAoB,CAClC,MAAOsK,EAAA,CAAQ9E,CAAR,CAAc,CAAC,WAAD,CAAc,QAAQ,CAAC6c,CAAD,CAAY,CACrD,MAAOA,EAAAjC,YAAA,CAAsBpgB,CAAtB,CAD8C,CAAlC,CAAd,CAD2B,CAvEjB,CAHH,CAIN9E,MAAO8kB,CAAA,CA4EjB9kB,QAAc,CAACsK,CAAD,CAAOzD,CAAP,CAAY,CAAE,MAAOuI,EAAA,CAAQ9E,CAAR,CAAcjI,EAAA,CAAQwE,CAAR,CAAd,CAA4B,CAAA,CAA5B,CAAT,CA5ET,CAJD,CAKN6J,SAAUoU,CAAA,CA6EpBpU,QAAiB,CAACpG,CAAD,CAAOtK,CAAP,CAAc,CAC7BuO,EAAA,CAAwBjE,CAAxB,CAA8B,UAA9B,CACA6a,EAAA,CAAc7a,CAAd,CAAA,CAAsBtK,CACtBonB,EAAA,CAAc9c,CAAd,CAAA,CAAsBtK,CAHO,CA7EX,CALJ,CAMN2Q,UAkFVA,QAAkB,CAAC0V,CAAD,CAAcgB,CAAd,CAAuB,CAAA,IACnCC;AAAerC,CAAA1Y,IAAA,CAAqB8Z,CAArB,CA7FAjB,UA6FA,CADoB,CAEnCmC,EAAWD,CAAA/D,KAEf+D,EAAA/D,KAAA,CAAoBiE,QAAQ,EAAG,CAC7B,IAAIC,EAAejC,CAAAna,OAAA,CAAwBkc,CAAxB,CAAkCD,CAAlC,CACnB,OAAO9B,EAAAna,OAAA,CAAwBgc,CAAxB,CAAiC,IAAjC,CAAuC,CAACK,UAAWD,CAAZ,CAAvC,CAFsB,CAJQ,CAxFzB,CADI,CAN2B,CAgB3CxC,EAAoBE,CAAAgC,UAApBlC,CACIiB,CAAA,CAAuBf,CAAvB,CAAsC,QAAQ,CAACkB,CAAD,CAAcC,CAAd,CAAsB,CAC9Dza,EAAAnN,SAAA,CAAiB4nB,CAAjB,CAAJ,EACE7X,CAAAnK,KAAA,CAAUgiB,CAAV,CAEF,MAAMjX,GAAA,CAAgB,MAAhB,CAAiDZ,CAAAjF,KAAA,CAAU,MAAV,CAAjD,CAAN,CAJkE,CAApE,CAjBuC,CAuB3C4d,EAAgB,EAvB2B,CAwB3CO,EACIzB,CAAA,CAAuBkB,CAAvB,CAAsC,QAAQ,CAACf,CAAD,CAAcC,CAAd,CAAsB,CAClE,IAAI5W,EAAWuV,CAAA1Y,IAAA,CAAqB8Z,CAArB,CAvBJjB,UAuBI,CAAmDkB,CAAnD,CACf,OAAOd,EAAAna,OAAA,CACHqE,CAAA6T,KADG,CACY7T,CADZ,CACsB7K,IAAAA,EADtB,CACiCwhB,CADjC,CAF2D,CAApE,CAzBuC,CA8B3Cb,EAAmBmC,CAEvBxC,EAAA,kBAAA,CAA8C,CAAE5B,KAAMlhB,EAAA,CAAQslB,CAAR,CAAR,CAC9C,KAAItX,EAAYsV,CAAA,CAAYd,CAAZ,CAAhB,CACAW,EAAmBmC,CAAApb,IAAA,CAA0B,WAA1B,CACnBiZ,EAAA9a,SAAA,CAA4BA,CAC5BzL,EAAA,CAAQoR,CAAR,CAAmB,QAAQ,CAAC7J,CAAD,CAAK,CAAMA,CAAJ,EAAQgf,CAAAna,OAAA,CAAwB7E,CAAxB,CAAV,CAAhC,CAEA,OAAOgf,EAtCwC,CA6QjDpO,QAASA,GAAqB,EAAG,CAE/B,IAAIwQ,EAAuB,CAAA,CAe3B,KAAAC,qBAAA,CAA4BC,QAAQ,EAAG,CACrCF,CAAA,CAAuB,CAAA,CADc,CAiJvC,KAAArE,KAAA,CAAY,CAAC,SAAD;AAAY,WAAZ,CAAyB,YAAzB,CAAuC,QAAQ,CAAC9H,CAAD,CAAU1B,CAAV,CAAqBM,CAArB,CAAiC,CAM1F0N,QAASA,EAAc,CAACC,CAAD,CAAO,CAC5B,IAAIzC,EAAS,IACbxmB,MAAAwlB,UAAA0D,KAAA1oB,KAAA,CAA0ByoB,CAA1B,CAAgC,QAAQ,CAACrkB,CAAD,CAAU,CAChD,GAA2B,GAA3B,GAAID,EAAA,CAAUC,CAAV,CAAJ,CAEE,MADA4hB,EACO,CADE5hB,CACF,CAAA,CAAA,CAHuC,CAAlD,CAMA,OAAO4hB,EARqB,CAgC9B2C,QAASA,EAAQ,CAACra,CAAD,CAAO,CACtB,GAAIA,CAAJ,CAAU,CACRA,CAAAsa,eAAA,EAEA,KAAI7L,CAvBFA,EAAAA,CAAS8L,CAAAC,QAEThpB,EAAA,CAAWid,CAAX,CAAJ,CACEA,CADF,CACWA,CAAA,EADX,CAEWjb,EAAA,CAAUib,CAAV,CAAJ,EACDzO,CAGF,CAHSyO,CAAA,CAAO,CAAP,CAGT,CAAAA,CAAA,CADqB,OAAvB,GADYb,CAAA6M,iBAAA9V,CAAyB3E,CAAzB2E,CACR+V,SAAJ,CACW,CADX,CAGW1a,CAAA2a,sBAAA,EAAAC,OANN,EAQK3pB,CAAA,CAASwd,CAAT,CARL,GASLA,CATK,CASI,CATJ,CAqBDA,EAAJ,GAcMoM,CACJ,CADc7a,CAAA2a,sBAAA,EAAAG,IACd,CAAAlN,CAAAmN,SAAA,CAAiB,CAAjB,CAAoBF,CAApB,CAA8BpM,CAA9B,CAfF,CALQ,CAAV,IAuBEb,EAAAyM,SAAA,CAAiB,CAAjB,CAAoB,CAApB,CAxBoB,CA4BxBE,QAASA,EAAM,CAACS,CAAD,CAAO,CACpBA,CAAA,CAAOnqB,CAAA,CAASmqB,CAAT,CAAA,CAAiBA,CAAjB,CAAwB9O,CAAA8O,KAAA,EAC/B,KAAIC,CAGCD,EAAL,CAGK,CAAKC,CAAL,CAAWhiB,CAAAiiB,eAAA,CAAwBF,CAAxB,CAAX,EAA2CX,CAAA,CAASY,CAAT,CAA3C,CAGA,CAAKA,CAAL,CAAWf,CAAA,CAAejhB,CAAAkiB,kBAAA,CAA2BH,CAA3B,CAAf,CAAX,EAA8DX,CAAA,CAASY,CAAT,CAA9D,CAGa,KAHb;AAGID,CAHJ,EAGoBX,CAAA,CAAS,IAAT,CATzB,CAAWA,CAAA,CAAS,IAAT,CALS,CAjEtB,IAAIphB,EAAW2U,CAAA3U,SAoFX8gB,EAAJ,EACEvN,CAAAvX,OAAA,CAAkBmmB,QAAwB,EAAG,CAAC,MAAOlP,EAAA8O,KAAA,EAAR,CAA7C,CACEK,QAA8B,CAACC,CAAD,CAASC,CAAT,CAAiB,CAEzCD,CAAJ,GAAeC,CAAf,EAAoC,EAApC,GAAyBD,CAAzB,EAEA7H,EAAA,CAAqB,QAAQ,EAAG,CAC9BjH,CAAAxX,WAAA,CAAsBulB,CAAtB,CAD8B,CAAhC,CAJ6C,CADjD,CAWF,OAAOA,EAjGmF,CAAhF,CAlKmB,CA2QjCiB,QAASA,GAAY,CAACxX,CAAD,CAAGyX,CAAH,CAAM,CACzB,GAAKzX,CAAAA,CAAL,EAAWyX,CAAAA,CAAX,CAAc,MAAO,EACrB,IAAKzX,CAAAA,CAAL,CAAQ,MAAOyX,EACf,IAAKA,CAAAA,CAAL,CAAQ,MAAOzX,EACXpT,EAAA,CAAQoT,CAAR,CAAJ,GAAgBA,CAAhB,CAAoBA,CAAArI,KAAA,CAAO,GAAP,CAApB,CACI/K,EAAA,CAAQ6qB,CAAR,CAAJ,GAAgBA,CAAhB,CAAoBA,CAAA9f,KAAA,CAAO,GAAP,CAApB,CACA,OAAOqI,EAAP,CAAW,GAAX,CAAiByX,CANQ,CAkB3BC,QAASA,GAAY,CAAC7F,CAAD,CAAU,CACzBhlB,CAAA,CAASglB,CAAT,CAAJ,GACEA,CADF,CACYA,CAAAjgB,MAAA,CAAc,GAAd,CADZ,CAMA,KAAIlF,EAAM0H,CAAA,EACVhH,EAAA,CAAQykB,CAAR,CAAiB,QAAQ,CAAC8F,CAAD,CAAQ,CAG3BA,CAAA5qB,OAAJ,GACEL,CAAA,CAAIirB,CAAJ,CADF,CACe,CAAA,CADf,CAH+B,CAAjC,CAOA,OAAOjrB,EAfsB,CAyB/BkrB,QAASA,GAAqB,CAACC,CAAD,CAAU,CACtC,MAAOhpB,EAAA,CAASgpB,CAAT,CAAA,CACDA,CADC,CAED,EAHgC,CAw2BxCC,QAASA,GAAO,CAACvrB,CAAD,CAAS0I,CAAT,CAAmBmT,CAAnB,CAAyBc,CAAzB,CAAmC,CAqBjD6O,QAASA,EAA0B,CAACpjB,CAAD,CAAK,CACtC,GAAI,CACFA,CAAAG,MAAA,CAAS,IAAT,CA/oJGnF,EAAAjC,KAAA,CA+oJsBkC,SA/oJtB,CA+oJiCiF,CA/oJjC,CA+oJH,CADE,CAAJ,OAEU,CAER,GADAmjB,CAAA,EACI,CAA4B,CAA5B,GAAAA,CAAJ,CACE,IAAA,CAAOC,CAAAlrB,OAAP,CAAA,CACE,GAAI,CACFkrB,CAAAC,IAAA,EAAA,EADE,CAEF,MAAOvhB,CAAP,CAAU,CACVyR,CAAA+P,MAAA,CAAWxhB,CAAX,CADU,CANR,CAH4B,CArBS;AAgLjDyhB,QAASA,EAA0B,EAAG,CACpCC,CAAA,CAAkB,IAClBC,EAAA,EACAC,EAAA,EAHoC,CAQtCD,QAASA,EAAU,EAAG,CAEpBE,CAAA,CAAcC,CAAA,EACdD,EAAA,CAAc5nB,CAAA,CAAY4nB,CAAZ,CAAA,CAA2B,IAA3B,CAAkCA,CAG5C3kB,GAAA,CAAO2kB,CAAP,CAAoBE,CAApB,CAAJ,GACEF,CADF,CACgBE,CADhB,CAGAA,EAAA,CAAkBF,CATE,CAYtBD,QAASA,EAAa,EAAG,CACvB,GAAII,CAAJ,GAAuBjkB,CAAAkkB,IAAA,EAAvB,EAAqCC,CAArC,GAA0DL,CAA1D,CAIAG,CAEA,CAFiBjkB,CAAAkkB,IAAA,EAEjB,CADAC,CACA,CADmBL,CACnB,CAAAprB,CAAA,CAAQ0rB,CAAR,CAA4B,QAAQ,CAACC,CAAD,CAAW,CAC7CA,CAAA,CAASrkB,CAAAkkB,IAAA,EAAT,CAAqBJ,CAArB,CAD6C,CAA/C,CAPuB,CApMwB,IAC7C9jB,EAAO,IADsC,CAE7C4F,EAAW/N,CAAA+N,SAFkC,CAG7C0e,EAAUzsB,CAAAysB,QAHmC,CAI7CnJ,EAAatjB,CAAAsjB,WAJgC,CAK7CoJ,EAAe1sB,CAAA0sB,aAL8B,CAM7CC,EAAkB,EAEtBxkB,EAAAykB,OAAA,CAAc,CAAA,CAEd,KAAInB,EAA0B,CAA9B,CACIC,EAA8B,EAGlCvjB,EAAA0kB,6BAAA,CAAoCrB,CACpCrjB,EAAA2kB,6BAAA,CAAoCC,QAAQ,EAAG,CAAEtB,CAAA,EAAF,CAkC/CtjB,EAAA6kB,gCAAA,CAAuCC,QAAQ,CAACC,CAAD,CAAW,CACxB,CAAhC,GAAIzB,CAAJ,CACEyB,CAAA,EADF,CAGExB,CAAAxlB,KAAA,CAAiCgnB,CAAjC,CAJsD,CAjDT,KA6D7CjB,CA7D6C,CA6DhCK,CA7DgC,CA8D7CF,EAAiBre,CAAAof,KA9D4B,CA+D7CC,GAAc1kB,CAAAxD,KAAA,CAAc,MAAd,CA/D+B,CAgE7C4mB,EAAkB,IAhE2B,CAiE7CI,EAAmBvP,CAAA8P,QAAD,CAA2BP,QAAwB,EAAG,CACtE,GAAI,CACF,MAAOO,EAAAY,MADL,CAEF,MAAOjjB,CAAP,CAAU,EAH0D,CAAtD;AAAoBtG,CAQ1CioB,EAAA,EACAO,EAAA,CAAmBL,CAsBnB9jB,EAAAkkB,IAAA,CAAWiB,QAAQ,CAACjB,CAAD,CAAMhjB,CAAN,CAAegkB,CAAf,CAAsB,CAInChpB,CAAA,CAAYgpB,CAAZ,CAAJ,GACEA,CADF,CACU,IADV,CAKItf,EAAJ,GAAiB/N,CAAA+N,SAAjB,GAAkCA,CAAlC,CAA6C/N,CAAA+N,SAA7C,CACI0e,EAAJ,GAAgBzsB,CAAAysB,QAAhB,GAAgCA,CAAhC,CAA0CzsB,CAAAysB,QAA1C,CAGA,IAAIJ,CAAJ,CAAS,CACP,IAAIkB,EAAYjB,CAAZiB,GAAiCF,CAKrC,IAAIjB,CAAJ,GAAuBC,CAAvB,GAAgCI,CAAA9P,CAAA8P,QAAhC,EAAoDc,CAApD,EACE,MAAOplB,EAET,KAAIqlB,EAAWpB,CAAXoB,EAA6BC,EAAA,CAAUrB,CAAV,CAA7BoB,GAA2DC,EAAA,CAAUpB,CAAV,CAC/DD,EAAA,CAAiBC,CACjBC,EAAA,CAAmBe,CAKfZ,EAAA9P,CAAA8P,QAAJ,EAA0Be,CAA1B,EAAuCD,CAAvC,EAMOC,CAUL,GATE1B,CASF,CAToBO,CASpB,EAPIhjB,CAAJ,CACE0E,CAAA1E,QAAA,CAAiBgjB,CAAjB,CADF,CAEYmB,CAAL,EAGLzf,CAAA,CAAAA,CAAA,CApGFpI,CAoGE,CAAwB0mB,CApGlBzmB,QAAA,CAAY,GAAZ,CAoGN,CAnGN,CAmGM,CAnGY,EAAX,GAAAD,CAAA,CAAe,EAAf,CAmGuB0mB,CAnGHqB,OAAA,CAAW/nB,CAAX,CAmGrB,CAAAoI,CAAA0c,KAAA,CAAgB,CAHX,EACL1c,CAAAof,KADK,CACWd,CAIlB,CAAIte,CAAAof,KAAJ,GAAsBd,CAAtB,GACEP,CADF,CACoBO,CADpB,CAhBF,GACEI,CAAA,CAAQpjB,CAAA,CAAU,cAAV,CAA2B,WAAnC,CAAA,CAAgDgkB,CAAhD,CAAuD,EAAvD,CAA2DhB,CAA3D,CAGA,CAFAN,CAAA,EAEA,CAAAO,CAAA,CAAmBL,CAJrB,CAoBIH,EAAJ,GACEA,CADF,CACoBO,CADpB,CAGA,OAAOlkB,EAvCA,CA8CP,MAAO2jB,EAAP,EAA0B/d,CAAAof,KAAA9jB,QAAA,CAAsB,MAAtB,CAA6B,GAA7B,CA3DW,CAyEzClB,EAAAklB,MAAA,CAAaM,QAAQ,EAAG,CACtB,MAAO1B,EADe,CAzKyB,KA6K7CM,EAAqB,EA7KwB,CA8K7CqB,EAAgB,CAAA,CA9K6B,CAuL7CzB,EAAkB,IA8CtBhkB,EAAA0lB,YAAA,CAAmBC,QAAQ,CAACZ,CAAD,CAAW,CAEpC,GAAKU,CAAAA,CAAL,CAAoB,CAMlB,GAAIjR,CAAA8P,QAAJ,CAAsBlsB,CAAA,CAAOP,CAAP,CAAAgP,GAAA,CAAkB,UAAlB;AAA8B6c,CAA9B,CAEtBtrB,EAAA,CAAOP,CAAP,CAAAgP,GAAA,CAAkB,YAAlB,CAAgC6c,CAAhC,CAEA+B,EAAA,CAAgB,CAAA,CAVE,CAapBrB,CAAArmB,KAAA,CAAwBgnB,CAAxB,CACA,OAAOA,EAhB6B,CAyBtC/kB,EAAA4lB,uBAAA,CAA8BC,QAAQ,EAAG,CACvCztB,CAAA,CAAOP,CAAP,CAAAiuB,IAAA,CAAmB,qBAAnB,CAA0CpC,CAA1C,CADuC,CASzC1jB,EAAA+lB,iBAAA,CAAwBlC,CAexB7jB,EAAAgmB,SAAA,CAAgBC,QAAQ,EAAG,CACzB,IAAIjB,EAAOC,EAAAnoB,KAAA,CAAiB,MAAjB,CACX,OAAOkoB,EAAA,CAAOA,CAAA9jB,QAAA,CAAa,wBAAb,CAAuC,EAAvC,CAAP,CAAoD,EAFlC,CAmB3BlB,EAAAkmB,MAAA,CAAaC,QAAQ,CAAClmB,CAAD,CAAKmmB,CAAL,CAAY,CAC/B,IAAIC,CACJ/C,EAAA,EACA+C,EAAA,CAAYlL,CAAA,CAAW,QAAQ,EAAG,CAChC,OAAOqJ,CAAA,CAAgB6B,CAAhB,CACPhD,EAAA,CAA2BpjB,CAA3B,CAFgC,CAAtB,CAGTmmB,CAHS,EAGA,CAHA,CAIZ5B,EAAA,CAAgB6B,CAAhB,CAAA,CAA6B,CAAA,CAC7B,OAAOA,EARwB,CAsBjCrmB,EAAAkmB,MAAAI,OAAA,CAAoBC,QAAQ,CAACC,CAAD,CAAU,CACpC,MAAIhC,EAAA,CAAgBgC,CAAhB,CAAJ,EACE,OAAOhC,CAAA,CAAgBgC,CAAhB,CAGA,CAFPjC,CAAA,CAAaiC,CAAb,CAEO,CADPnD,CAAA,CAA2B1nB,CAA3B,CACO,CAAA,CAAA,CAJT,EAMO,CAAA,CAP6B,CA/TW,CA2UnDgW,QAASA,GAAgB,EAAG,CAC1B,IAAAqL,KAAA,CAAY,CAAC,SAAD,CAAY,MAAZ,CAAoB,UAApB,CAAgC,WAAhC,CACR,QAAQ,CAAC9H,CAAD,CAAUxB,CAAV,CAAgBc,CAAhB,CAA0BxC,CAA1B,CAAqC,CAC3C,MAAO,KAAIoR,EAAJ,CAAYlO,CAAZ,CAAqBlD,CAArB,CAAgC0B,CAAhC;AAAsCc,CAAtC,CADoC,CADrC,CADc,CAwF5B3C,QAASA,GAAqB,EAAG,CAE/B,IAAAmL,KAAA,CAAYC,QAAQ,EAAG,CAGrBwJ,QAASA,EAAY,CAACC,CAAD,CAAUvD,CAAV,CAAmB,CA0MtCwD,QAASA,EAAO,CAACC,CAAD,CAAQ,CAClBA,CAAJ,EAAaC,CAAb,GACOC,CAAL,CAEWA,CAFX,EAEuBF,CAFvB,GAGEE,CAHF,CAGaF,CAAAG,EAHb,EACED,CADF,CACaF,CAQb,CAHAI,CAAA,CAAKJ,CAAAG,EAAL,CAAcH,CAAAK,EAAd,CAGA,CAFAD,CAAA,CAAKJ,CAAL,CAAYC,CAAZ,CAEA,CADAA,CACA,CADWD,CACX,CAAAC,CAAAE,EAAA,CAAa,IAVf,CADsB,CAmBxBC,QAASA,EAAI,CAACE,CAAD,CAAYC,CAAZ,CAAuB,CAC9BD,CAAJ,EAAiBC,CAAjB,GACMD,CACJ,GADeA,CAAAD,EACf,CAD6BE,CAC7B,EAAIA,CAAJ,GAAeA,CAAAJ,EAAf,CAA6BG,CAA7B,CAFF,CADkC,CA5NpC,GAAIR,CAAJ,GAAeU,EAAf,CACE,KAAMtvB,EAAA,CAAO,eAAP,CAAA,CAAwB,KAAxB,CAAkE4uB,CAAlE,CAAN,CAFoC,IAKlCW,EAAO,CAL2B,CAMlCC,EAAQtsB,CAAA,CAAO,EAAP,CAAWmoB,CAAX,CAAoB,CAACoE,GAAIb,CAAL,CAApB,CAN0B,CAOlCvhB,EAAOzF,CAAA,EAP2B,CAQlC8nB,EAAYrE,CAAZqE,EAAuBrE,CAAAqE,SAAvBA,EAA4CC,MAAAC,UARV,CASlCC,EAAUjoB,CAAA,EATwB,CAUlCmnB,EAAW,IAVuB,CAWlCC,EAAW,IAyCf,OAAOM,EAAA,CAAOV,CAAP,CAAP,CAAyB,CAoBvB9I,IAAKA,QAAQ,CAAC/kB,CAAD,CAAMY,CAAN,CAAa,CACxB,GAAI,CAAAyC,CAAA,CAAYzC,CAAZ,CAAJ,CAAA,CACA,GAAI+tB,CAAJ,CAAeC,MAAAC,UAAf,CAAiC,CAC/B,IAAIE,EAAWD,CAAA,CAAQ9uB,CAAR,CAAX+uB,GAA4BD,CAAA,CAAQ9uB,CAAR,CAA5B+uB,CAA2C,CAAC/uB,IAAKA,CAAN,CAA3C+uB,CAEJjB,EAAA,CAAQiB,CAAR,CAH+B,CAM3B/uB,CAAN,GAAasM,EAAb,EAAoBkiB,CAAA,EACpBliB,EAAA,CAAKtM,CAAL,CAAA,CAAYY,CAER4tB,EAAJ,CAAWG,CAAX,EACE,IAAAK,OAAA,CAAYf,CAAAjuB,IAAZ,CAGF,OAAOY,EAdP,CADwB,CApBH,CAiDvBuM,IAAKA,QAAQ,CAACnN,CAAD,CAAM,CACjB,GAAI2uB,CAAJ,CAAeC,MAAAC,UAAf,CAAiC,CAC/B,IAAIE,EAAWD,CAAA,CAAQ9uB,CAAR,CAEf;GAAK+uB,CAAAA,CAAL,CAAe,MAEfjB,EAAA,CAAQiB,CAAR,CAL+B,CAQjC,MAAOziB,EAAA,CAAKtM,CAAL,CATU,CAjDI,CAwEvBgvB,OAAQA,QAAQ,CAAChvB,CAAD,CAAM,CACpB,GAAI2uB,CAAJ,CAAeC,MAAAC,UAAf,CAAiC,CAC/B,IAAIE,EAAWD,CAAA,CAAQ9uB,CAAR,CAEf,IAAK+uB,CAAAA,CAAL,CAAe,MAEXA,EAAJ,EAAgBf,CAAhB,GAA0BA,CAA1B,CAAqCe,CAAAX,EAArC,CACIW,EAAJ,EAAgBd,CAAhB,GAA0BA,CAA1B,CAAqCc,CAAAb,EAArC,CACAC,EAAA,CAAKY,CAAAb,EAAL,CAAgBa,CAAAX,EAAhB,CAEA,QAAOU,CAAA,CAAQ9uB,CAAR,CATwB,CAY3BA,CAAN,GAAasM,EAAb,GAEA,OAAOA,CAAA,CAAKtM,CAAL,CACP,CAAAwuB,CAAA,EAHA,CAboB,CAxEC,CAoGvBS,UAAWA,QAAQ,EAAG,CACpB3iB,CAAA,CAAOzF,CAAA,EACP2nB,EAAA,CAAO,CACPM,EAAA,CAAUjoB,CAAA,EACVmnB,EAAA,CAAWC,CAAX,CAAsB,IAJF,CApGC,CAqHvBiB,QAASA,QAAQ,EAAG,CAGlBJ,CAAA,CADAL,CACA,CAFAniB,CAEA,CAFO,IAGP,QAAOiiB,CAAA,CAAOV,CAAP,CAJW,CArHG,CA6IvBsB,KAAMA,QAAQ,EAAG,CACf,MAAOhtB,EAAA,CAAO,EAAP,CAAWssB,CAAX,CAAkB,CAACD,KAAMA,CAAP,CAAlB,CADQ,CA7IM,CApDa,CAFxC,IAAID,EAAS,EAiPbX,EAAAuB,KAAA,CAAoBC,QAAQ,EAAG,CAC7B,IAAID,EAAO,EACXtvB,EAAA,CAAQ0uB,CAAR,CAAgB,QAAQ,CAACxH,CAAD,CAAQ8G,CAAR,CAAiB,CACvCsB,CAAA,CAAKtB,CAAL,CAAA,CAAgB9G,CAAAoI,KAAA,EADuB,CAAzC,CAGA,OAAOA,EALsB,CAmB/BvB,EAAAzgB,IAAA,CAAmBkiB,QAAQ,CAACxB,CAAD,CAAU,CACnC,MAAOU,EAAA,CAAOV,CAAP,CAD4B,CAKrC,OAAOD,EA1Qc,CAFQ,CA2TjC9R,QAASA,GAAsB,EAAG,CAChC,IAAAqI,KAAA,CAAY,CAAC,eAAD,CAAkB,QAAQ,CAACpL,CAAD,CAAgB,CACpD,MAAOA,EAAA,CAAc,WAAd,CAD6C,CAA1C,CADoB,CA7gNhB;AAi9OlBvG,QAASA,GAAgB,CAAC3G,CAAD,CAAWyjB,CAAX,CAAkC,CAczDC,QAASA,EAAoB,CAACpjB,CAAD,CAAQqjB,CAAR,CAAuBC,CAAvB,CAAqC,CAChE,IAAIC,EAAe,qCAAnB,CAEIC,EAAW9oB,CAAA,EAEfhH,EAAA,CAAQsM,CAAR,CAAe,QAAQ,CAACyjB,CAAD,CAAaC,CAAb,CAAwB,CAC7C,GAAID,CAAJ,GAAkBE,EAAlB,CACEH,CAAA,CAASE,CAAT,CAAA,CAAsBC,CAAA,CAAaF,CAAb,CADxB,KAAA,CAIA,IAAIzpB,EAAQypB,CAAAzpB,MAAA,CAAiBupB,CAAjB,CAEZ,IAAKvpB,CAAAA,CAAL,CACE,KAAM4pB,GAAA,CAAe,MAAf,CAGFP,CAHE,CAGaK,CAHb,CAGwBD,CAHxB,CAIDH,CAAA,CAAe,gCAAf,CACD,0BALE,CAAN,CAQFE,CAAA,CAASE,CAAT,CAAA,CAAsB,CACpBG,KAAM7pB,CAAA,CAAM,CAAN,CAAA,CAAS,CAAT,CADc,CAEpB8pB,WAAyB,GAAzBA,GAAY9pB,CAAA,CAAM,CAAN,CAFQ,CAGpB+pB,SAAuB,GAAvBA,GAAU/pB,CAAA,CAAM,CAAN,CAHU,CAIpBgqB,SAAUhqB,CAAA,CAAM,CAAN,CAAVgqB,EAAsBN,CAJF,CAMlB1pB,EAAA,CAAM,CAAN,CAAJ,GACE2pB,CAAA,CAAaF,CAAb,CADF,CAC6BD,CAAA,CAASE,CAAT,CAD7B,CArBA,CAD6C,CAA/C,CA2BA,OAAOF,EAhCyD,CAwElES,QAASA,EAAwB,CAACllB,CAAD,CAAO,CACtC,IAAIqC,EAASrC,CAAApE,OAAA,CAAY,CAAZ,CACb,IAAKyG,CAAAA,CAAL,EAAeA,CAAf,GAA0B/I,CAAA,CAAU+I,CAAV,CAA1B,CACE,KAAMwiB,GAAA,CAAe,QAAf,CAAsH7kB,CAAtH,CAAN,CAEF,GAAIA,CAAJ,GAAaA,CAAA8T,KAAA,EAAb,CACE,KAAM+Q,GAAA,CAAe,QAAf,CAEA7kB,CAFA,CAAN,CANoC,CAYxCmlB,QAASA,EAAmB,CAAC3e,CAAD,CAAY,CACtC,IAAI4e,EAAU5e,CAAA4e,QAAVA,EAAgC5e,CAAAvD,WAAhCmiB,EAAwD5e,CAAAxG,KAEvD;CAAA7L,CAAA,CAAQixB,CAAR,CAAL,EAAyBhvB,CAAA,CAASgvB,CAAT,CAAzB,EACEzwB,CAAA,CAAQywB,CAAR,CAAiB,QAAQ,CAAC1vB,CAAD,CAAQZ,CAAR,CAAa,CACpC,IAAImG,EAAQvF,CAAAuF,MAAA,CAAYoqB,CAAZ,CACD3vB,EAAAmJ,UAAAmB,CAAgB/E,CAAA,CAAM,CAAN,CAAA3G,OAAhB0L,CACX,GAAWolB,CAAA,CAAQtwB,CAAR,CAAX,CAA0BmG,CAAA,CAAM,CAAN,CAA1B,CAAqCnG,CAArC,CAHoC,CAAtC,CAOF,OAAOswB,EAX+B,CAlGiB,IACrDE,EAAgB,EADqC,CAGrDC,EAA2B,qCAH0B,CAIrDC,EAAyB,6BAJ4B,CAKrDC,EAAuBxsB,EAAA,CAAQ,2BAAR,CAL8B,CAMrDosB,EAAwB,6BAN6B,CAWrDK,EAA4B,yBAXyB,CAYrDd,EAAejpB,CAAA,EAmHnB,KAAA6K,UAAA,CAAiBmf,QAASC,EAAiB,CAAC5lB,CAAD,CAAO6lB,CAAP,CAAyB,CAClE5hB,EAAA,CAAwBjE,CAAxB,CAA8B,WAA9B,CACI5L,EAAA,CAAS4L,CAAT,CAAJ,EACEklB,CAAA,CAAyBllB,CAAzB,CA6BA,CA5BA4D,EAAA,CAAUiiB,CAAV,CAA4B,kBAA5B,CA4BA,CA3BKP,CAAAtwB,eAAA,CAA6BgL,CAA7B,CA2BL,GA1BEslB,CAAA,CAActlB,CAAd,CACA,CADsB,EACtB,CAAAW,CAAAmE,QAAA,CAAiB9E,CAAjB,CApIO8lB,WAoIP,CAAgC,CAAC,WAAD,CAAc,mBAAd,CAC9B,QAAQ,CAACjJ,CAAD,CAAY1O,CAAZ,CAA+B,CACrC,IAAI4X,EAAa,EACjBpxB,EAAA,CAAQ2wB,CAAA,CAActlB,CAAd,CAAR,CAA6B,QAAQ,CAAC6lB,CAAD,CAAmBpsB,CAAnB,CAA0B,CAC7D,GAAI,CACF,IAAI+M;AAAYqW,CAAA9b,OAAA,CAAiB8kB,CAAjB,CACZ9wB,EAAA,CAAWyR,CAAX,CAAJ,CACEA,CADF,CACc,CAAEtF,QAASnJ,EAAA,CAAQyO,CAAR,CAAX,CADd,CAEYtF,CAAAsF,CAAAtF,QAFZ,EAEiCsF,CAAAyc,KAFjC,GAGEzc,CAAAtF,QAHF,CAGsBnJ,EAAA,CAAQyO,CAAAyc,KAAR,CAHtB,CAKAzc,EAAAwf,SAAA,CAAqBxf,CAAAwf,SAArB,EAA2C,CAC3Cxf,EAAA/M,MAAA,CAAkBA,CAClB+M,EAAAxG,KAAA,CAAiBwG,CAAAxG,KAAjB,EAAmCA,CACnCwG,EAAA4e,QAAA,CAAoBD,CAAA,CAAoB3e,CAApB,CACpBA,EAAAyf,SAAA,CAAqBzf,CAAAyf,SAArB,EAA2C,IAC3Czf,EAAAX,aAAA,CAAyBggB,CAAAhgB,aACzBkgB,EAAA/rB,KAAA,CAAgBwM,CAAhB,CAbE,CAcF,MAAOtI,CAAP,CAAU,CACViQ,CAAA,CAAkBjQ,CAAlB,CADU,CAfiD,CAA/D,CAmBA,OAAO6nB,EArB8B,CADT,CAAhC,CAyBF,EAAAT,CAAA,CAActlB,CAAd,CAAAhG,KAAA,CAAyB6rB,CAAzB,CA9BF,EAgCElxB,CAAA,CAAQqL,CAAR,CAAcxK,EAAA,CAAcowB,CAAd,CAAd,CAEF,OAAO,KApC2D,CA6HpE,KAAAnf,UAAA,CAAiByf,QAA0B,CAAClmB,CAAD,CAAOof,CAAP,CAAgB,CAGzDta,QAASA,EAAO,CAAC+X,CAAD,CAAY,CAC1BsJ,QAASA,EAAc,CAACjqB,CAAD,CAAK,CAC1B,MAAInH,EAAA,CAAWmH,CAAX,CAAJ,EAAsB/H,CAAA,CAAQ+H,CAAR,CAAtB,CACS,QAAQ,CAACkqB,CAAD,CAAWC,CAAX,CAAmB,CAChC,MAAOxJ,EAAA9b,OAAA,CAAiB7E,CAAjB,CAAqB,IAArB,CAA2B,CAACoqB,SAAUF,CAAX,CAAqBG,OAAQF,CAA7B,CAA3B,CADyB,CADpC,CAKSnqB,CANiB,CAU5B,IAAIsqB,EAAapH,CAAAoH,SAAD,EAAsBpH,CAAAqH,YAAtB,CAAiDrH,CAAAoH,SAAjD,CAA4C,EAA5D,CACIE,EAAM,CACRzjB,WAAYA,CADJ,CAER0jB,aAAcC,EAAA,CAAwBxH,CAAAnc,WAAxB,CAAd0jB;AAA6DvH,CAAAuH,aAA7DA,EAAqF,OAF7E,CAGRH,SAAUL,CAAA,CAAeK,CAAf,CAHF,CAIRC,YAAaN,CAAA,CAAe/G,CAAAqH,YAAf,CAJL,CAKRI,WAAYzH,CAAAyH,WALJ,CAMR5lB,MAAO,EANC,CAOR6lB,iBAAkB1H,CAAAqF,SAAlBqC,EAAsC,EAP9B,CAQRb,SAAU,GARF,CASRb,QAAShG,CAAAgG,QATD,CAaVzwB,EAAA,CAAQyqB,CAAR,CAAiB,QAAQ,CAAC7iB,CAAD,CAAMzH,CAAN,CAAW,CACZ,GAAtB,GAAIA,CAAA8G,OAAA,CAAW,CAAX,CAAJ,GAA2B8qB,CAAA,CAAI5xB,CAAJ,CAA3B,CAAsCyH,CAAtC,CADkC,CAApC,CAIA,OAAOmqB,EA7BmB,CAF5B,IAAIzjB,EAAamc,CAAAnc,WAAbA,EAAmC,QAAQ,EAAG,EAyClDtO,EAAA,CAAQyqB,CAAR,CAAiB,QAAQ,CAAC7iB,CAAD,CAAMzH,CAAN,CAAW,CACZ,GAAtB,GAAIA,CAAA8G,OAAA,CAAW,CAAX,CAAJ,GACEkJ,CAAA,CAAQhQ,CAAR,CAEA,CAFeyH,CAEf,CAAIxH,CAAA,CAAWkO,CAAX,CAAJ,GAA4BA,CAAA,CAAWnO,CAAX,CAA5B,CAA8CyH,CAA9C,CAHF,CADkC,CAApC,CAQAuI,EAAAwX,QAAA,CAAkB,CAAC,WAAD,CAElB,OAAO,KAAA9V,UAAA,CAAexG,CAAf,CAAqB8E,CAArB,CApDkD,CA4E3D,KAAAiiB,2BAAA,CAAkCC,QAAQ,CAACC,CAAD,CAAS,CACjD,MAAI7uB,EAAA,CAAU6uB,CAAV,CAAJ,EACE7C,CAAA2C,2BAAA,CAAiDE,CAAjD,CACO,CAAA,IAFT,EAIS7C,CAAA2C,2BAAA,EALwC,CA8BnD,KAAAG,4BAAA;AAAmCC,QAAQ,CAACF,CAAD,CAAS,CAClD,MAAI7uB,EAAA,CAAU6uB,CAAV,CAAJ,EACE7C,CAAA8C,4BAAA,CAAkDD,CAAlD,CACO,CAAA,IAFT,EAIS7C,CAAA8C,4BAAA,EALyC,CA+BpD,KAAItmB,EAAmB,CAAA,CACvB,KAAAA,iBAAA,CAAwBwmB,QAAQ,CAACC,CAAD,CAAU,CACxC,MAAIjvB,EAAA,CAAUivB,CAAV,CAAJ,EACEzmB,CACO,CADYymB,CACZ,CAAA,IAFT,EAIOzmB,CALiC,CAS1C,KAAI0mB,EAAM,EAqBV,KAAAC,aAAA,CAAoBC,QAAQ,CAAC9xB,CAAD,CAAQ,CAClC,MAAIyB,UAAA7C,OAAJ,EACEgzB,CACO,CADD5xB,CACC,CAAA,IAFT,EAIO4xB,CAL2B,CAQpC,KAAArO,KAAA,CAAY,CACF,WADE,CACW,cADX,CAC2B,mBAD3B,CACgD,kBADhD,CACoE,QADpE,CAEF,aAFE,CAEa,YAFb,CAE2B,MAF3B,CAEmC,UAFnC,CAE+C,eAF/C,CAGV,QAAQ,CAAC4D,CAAD,CAAcpO,CAAd,CAA8BN,CAA9B,CAAmD0C,CAAnD,CAAuEhB,CAAvE,CACC9B,CADD,CACgBgC,CADhB,CAC8BM,CAD9B,CACsCtD,CADtC,CACkD3F,CADlD,CACiE,CAazEqgB,QAASA,EAAmB,EAAG,CAC7B,GAAI,CACF,GAAM,CAAA,EAAEF,EAAR,CAGE,KADAG,EACM,CADWntB,IAAAA,EACX,CAAAsqB,EAAA,CAAe,SAAf,CAA8EyC,CAA9E,CAAN,CAGFvX,CAAA5O,OAAA,CAAkB,QAAQ,EAAG,CAE3B,IADA,IAAIwmB;AAAS,EAAb,CACSpyB,EAAI,CADb,CACgBY,EAAKuxB,CAAApzB,OAArB,CAA4CiB,CAA5C,CAAgDY,CAAhD,CAAoD,EAAEZ,CAAtD,CACE,GAAI,CACFmyB,CAAA,CAAenyB,CAAf,CAAA,EADE,CAEF,MAAO2I,CAAP,CAAU,CACVypB,CAAA3tB,KAAA,CAAYkE,CAAZ,CADU,CAKdwpB,CAAA,CAAiBntB,IAAAA,EACjB,IAAIotB,CAAArzB,OAAJ,CACE,KAAMqzB,EAAN,CAZyB,CAA7B,CAPE,CAAJ,OAsBU,CACRJ,EAAA,EADQ,CAvBmB,CA6B/BK,QAASA,GAAU,CAACvuB,CAAD,CAAUwuB,CAAV,CAA4B,CAC7C,GAAIA,CAAJ,CAAsB,CACpB,IAAIxyB,EAAOd,MAAAc,KAAA,CAAYwyB,CAAZ,CAAX,CACItyB,CADJ,CACOkf,CADP,CACU3f,CAELS,EAAA,CAAI,CAAT,KAAYkf,CAAZ,CAAgBpf,CAAAf,OAAhB,CAA6BiB,CAA7B,CAAiCkf,CAAjC,CAAoClf,CAAA,EAApC,CACET,CACA,CADMO,CAAA,CAAKE,CAAL,CACN,CAAA,IAAA,CAAKT,CAAL,CAAA,CAAY+yB,CAAA,CAAiB/yB,CAAjB,CANM,CAAtB,IASE,KAAAgzB,MAAA,CAAa,EAGf,KAAAC,UAAA,CAAiB1uB,CAb4B,CA6O/C2uB,QAASA,EAAc,CAAC3uB,CAAD,CAAU4rB,CAAV,CAAoBvvB,CAApB,CAA2B,CAIhDuyB,EAAA/U,UAAA,CAA8B,QAA9B,CAAyC+R,CAAzC,CAAoD,GAChDiD,EAAAA,CAAaD,EAAA3U,WAAA4U,WACjB,KAAIC,EAAYD,CAAA,CAAW,CAAX,CAEhBA,EAAAE,gBAAA,CAA2BD,CAAAnoB,KAA3B,CACAmoB,EAAAzyB,MAAA,CAAkBA,CAClB2D,EAAA6uB,WAAAG,aAAA,CAAgCF,CAAhC,CAVgD,CAalDG,QAASA,EAAY,CAAChC,CAAD,CAAWiC,CAAX,CAAsB,CACzC,GAAI,CACFjC,CAAAjN,SAAA,CAAkBkP,CAAlB,CADE,CAEF,MAAOrqB,CAAP,CAAU,EAH6B,CA0D3CgD,QAASA,GAAO,CAACsnB,CAAD,CAAgBC,CAAhB,CAA8BC,CAA9B,CAA2CC,CAA3C,CACIC,CADJ,CAC4B,CACpCJ,CAAN,WAA+Bn0B,EAA/B,GAGEm0B,CAHF,CAGkBn0B,CAAA,CAAOm0B,CAAP,CAHlB,CAUA,KAJA,IAAIK,EAAY,KAAhB,CAIStzB,EAAI,CAJb,CAIgB+O,EAAMkkB,CAAAl0B,OAAtB,CAA4CiB,CAA5C;AAAgD+O,CAAhD,CAAqD/O,CAAA,EAArD,CAA0D,CACxD,IAAIuzB,EAAUN,CAAA,CAAcjzB,CAAd,CAEVuzB,EAAAxqB,SAAJ,GAAyBC,EAAzB,EAA2CuqB,CAAAC,UAAA9tB,MAAA,CAAwB4tB,CAAxB,CAA3C,EACEpV,EAAA,CAAeqV,CAAf,CAAwBN,CAAA,CAAcjzB,CAAd,CAAxB,CAA2CzB,CAAA0I,SAAAoW,cAAA,CAA8B,MAA9B,CAA3C,CAJsD,CAQ1D,IAAIoW,EACIC,CAAA,CAAaT,CAAb,CAA4BC,CAA5B,CAA0CD,CAA1C,CACaE,CADb,CAC0BC,CAD1B,CAC2CC,CAD3C,CAER1nB,GAAAgoB,gBAAA,CAAwBV,CAAxB,CACA,KAAIW,EAAY,IAChB,OAAOC,SAAqB,CAACnoB,CAAD,CAAQooB,CAAR,CAAwBjK,CAAxB,CAAiC,CAC3Dxb,EAAA,CAAU3C,CAAV,CAAiB,OAAjB,CAEI2nB,EAAJ,EAA8BA,CAAAU,cAA9B,GAKEroB,CALF,CAKUA,CAAAsoB,QAAAC,KAAA,EALV,CAQApK,EAAA,CAAUA,CAAV,EAAqB,EAXsC,KAYvDqK,EAA0BrK,CAAAqK,wBAZ6B,CAazDC,EAAwBtK,CAAAsK,sBACxBC,EAAAA,CAAsBvK,CAAAuK,oBAMpBF,EAAJ,EAA+BA,CAAAG,kBAA/B,GACEH,CADF,CAC4BA,CAAAG,kBAD5B,CAIKT,EAAL,GAyCA,CAzCA,CAsCF,CADItwB,CACJ,CArCgD8wB,CAqChD,EArCgDA,CAoCpB,CAAc,CAAd,CAC5B,EAG6B,eAApB,GAAAvwB,EAAA,CAAUP,CAAV,CAAA,EAAuCX,EAAAjD,KAAA,CAAc4D,CAAd,CAAAoC,MAAA,CAA0B,KAA1B,CAAvC,CAA0E,KAA1E,CAAkF,MAH3F,CACS,MAvCP,CAUE4uB,EAAA,CANgB,MAAlB,GAAIV,CAAJ,CAMc90B,CAAA,CACVy1B,EAAA,CAAaX,CAAb,CAAwB90B,CAAA,CAAO,OAAP,CAAA+J,OAAA,CAAuBoqB,CAAvB,CAAAnqB,KAAA,EAAxB,CADU,CANd;AASWgrB,CAAJ,CAGOtmB,EAAA/L,MAAA/B,KAAA,CAA2BuzB,CAA3B,CAHP,CAKOA,CAGd,IAAIkB,CAAJ,CACE,IAASK,IAAAA,CAAT,GAA2BL,EAA3B,CACEG,CAAAzoB,KAAA,CAAe,GAAf,CAAqB2oB,CAArB,CAAsC,YAAtC,CAAoDL,CAAA,CAAsBK,CAAtB,CAAAC,SAApD,CAIJ9oB,GAAA+oB,eAAA,CAAuBJ,CAAvB,CAAkC5oB,CAAlC,CAEIooB,EAAJ,EAAoBA,CAAA,CAAeQ,CAAf,CAA0B5oB,CAA1B,CAChB+nB,EAAJ,EAAqBA,CAAA,CAAgB/nB,CAAhB,CAAuB4oB,CAAvB,CAAkCA,CAAlC,CAA6CJ,CAA7C,CACrB,OAAOI,EAvDoD,CAxBnB,CA4G5CZ,QAASA,EAAY,CAACiB,CAAD,CAAWzB,CAAX,CAAyB0B,CAAzB,CAAuCzB,CAAvC,CAAoDC,CAApD,CACGC,CADH,CAC2B,CA0C9CI,QAASA,EAAe,CAAC/nB,CAAD,CAAQipB,CAAR,CAAkBC,CAAlB,CAAgCV,CAAhC,CAAyD,CAAA,IAC/DW,CAD+D,CAClDvxB,CADkD,CAC5CwxB,CAD4C,CAChC90B,CADgC,CAC7BY,CAD6B,CACpBm0B,CADoB,CAE3EC,CAGJ,IAAIC,CAAJ,CAOE,IAHAD,CAGK,CAHgB91B,KAAJ,CADIy1B,CAAA51B,OACJ,CAGZ,CAAAiB,CAAA,CAAI,CAAT,CAAYA,CAAZ,CAAgBk1B,CAAAn2B,OAAhB,CAAgCiB,CAAhC,EAAmC,CAAnC,CACEm1B,CACA,CADMD,CAAA,CAAQl1B,CAAR,CACN,CAAAg1B,CAAA,CAAeG,CAAf,CAAA,CAAsBR,CAAA,CAASQ,CAAT,CAT1B,KAYEH,EAAA,CAAiBL,CAGd30B,EAAA,CAAI,CAAT,KAAYY,CAAZ,CAAiBs0B,CAAAn2B,OAAjB,CAAiCiB,CAAjC,CAAqCY,CAArC,CAAA,CACE0C,CAIA,CAJO0xB,CAAA,CAAeE,CAAA,CAAQl1B,CAAA,EAAR,CAAf,CAIP,CAHAo1B,CAGA,CAHaF,CAAA,CAAQl1B,CAAA,EAAR,CAGb,CAFA60B,CAEA,CAFcK,CAAA,CAAQl1B,CAAA,EAAR,CAEd,CAAIo1B,CAAJ,EACMA,CAAA1pB,MAAJ,EACEopB,CACA,CADappB,CAAAuoB,KAAA,EACb,CAAAtoB,EAAA+oB,eAAA,CAAuB51B,CAAA,CAAOwE,CAAP,CAAvB,CAAqCwxB,CAArC,CAFF,EAIEA,CAJF,CAIeppB,CAiBf,CAbEqpB,CAaF,CAdIK,CAAAC,wBAAJ,CAC2BC,EAAA,CACrB5pB,CADqB,CACd0pB,CAAA9D,WADc,CACS4C,CADT,CAD3B,CAIYqB,CAAAH,CAAAG,sBAAL,EAAyCrB,CAAzC,CACoBA,CADpB,CAGKA,CAAAA,CAAL,EAAgChB,CAAhC,CACoBoC,EAAA,CAAwB5pB,CAAxB,CAA+BwnB,CAA/B,CADpB,CAIoB,IAG3B,CAAAkC,CAAA,CAAWP,CAAX,CAAwBC,CAAxB,CAAoCxxB,CAApC,CAA0CsxB,CAA1C,CAAwDG,CAAxD,CAtBF,EAwBWF,CAxBX,EAyBEA,CAAA,CAAYnpB,CAAZ;AAAmBpI,CAAAwa,WAAnB,CAAoC9Y,IAAAA,EAApC,CAA+CkvB,CAA/C,CAlD2E,CAtCjF,IAJ8C,IAC1CgB,EAAU,EADgC,CAE1CM,CAF0C,CAEnChF,CAFmC,CAEX1S,CAFW,CAEc2X,CAFd,CAE2BR,CAF3B,CAIrCj1B,EAAI,CAAb,CAAgBA,CAAhB,CAAoB20B,CAAA51B,OAApB,CAAqCiB,CAAA,EAArC,CAA0C,CACxCw1B,CAAA,CAAQ,IAAInD,EAGZ7B,EAAA,CAAakF,EAAA,CAAkBf,CAAA,CAAS30B,CAAT,CAAlB,CAA+B,EAA/B,CAAmCw1B,CAAnC,CAAgD,CAAN,GAAAx1B,CAAA,CAAUmzB,CAAV,CAAwBnuB,IAAAA,EAAlE,CACmBouB,CADnB,CAQb,EALAgC,CAKA,CALc5E,CAAAzxB,OAAD,CACP42B,EAAA,CAAsBnF,CAAtB,CAAkCmE,CAAA,CAAS30B,CAAT,CAAlC,CAA+Cw1B,CAA/C,CAAsDtC,CAAtD,CAAoE0B,CAApE,CACwB,IADxB,CAC8B,EAD9B,CACkC,EADlC,CACsCvB,CADtC,CADO,CAGP,IAEN,GAAkB+B,CAAA1pB,MAAlB,EACEC,EAAAgoB,gBAAA,CAAwB6B,CAAAhD,UAAxB,CAGFqC,EAAA,CAAeO,CAAD,EAAeA,CAAAQ,SAAf,EACE,EAAA9X,CAAA,CAAa6W,CAAA,CAAS30B,CAAT,CAAA8d,WAAb,CADF,EAEC/e,CAAA+e,CAAA/e,OAFD,CAGR,IAHQ,CAIR20B,CAAA,CAAa5V,CAAb,CACGsX,CAAA,EACEA,CAAAC,wBADF,EACwC,CAACD,CAAAG,sBADzC,GAEOH,CAAA9D,WAFP,CAEgC4B,CAHnC,CAKN,IAAIkC,CAAJ,EAAkBP,CAAlB,CACEK,CAAAzwB,KAAA,CAAazE,CAAb,CAAgBo1B,CAAhB,CAA4BP,CAA5B,CAEA,CADAY,CACA,CADc,CAAA,CACd,CAAAR,CAAA,CAAkBA,CAAlB,EAAqCG,CAIvC/B,EAAA,CAAyB,IAhCe,CAoC1C,MAAOoC,EAAA,CAAchC,CAAd,CAAgC,IAxCO,CAkGhD6B,QAASA,GAAuB,CAAC5pB,CAAD,CAAQwnB,CAAR,CAAsB2C,CAAtB,CAAiD,CAC/EC,QAASA,EAAiB,CAACC,CAAD,CAAmBC,CAAnB,CAA4BC,CAA5B,CAAyC7B,CAAzC,CAA8D8B,CAA9D,CAA+E,CAElGH,CAAL,GACEA,CACA,CADmBrqB,CAAAuoB,KAAA,CAAW,CAAA,CAAX,CAAkBiC,CAAlB,CACnB,CAAAH,CAAAI,cAAA,CAAiC,CAAA,CAFnC,CAKA,OAAOjD,EAAA,CAAa6C,CAAb,CAA+BC,CAA/B,CAAwC,CAC7C9B,wBAAyB2B,CADoB;AAE7C1B,sBAAuB8B,CAFsB,CAG7C7B,oBAAqBA,CAHwB,CAAxC,CAPgG,CAgBzG,IAAIgC,EAAaN,CAAAO,QAAbD,CAAyChwB,CAAA,EAA7C,CACSkwB,CAAT,KAASA,CAAT,GAAqBpD,EAAAmD,QAArB,CAEID,CAAA,CAAWE,CAAX,CAAA,CADEpD,CAAAmD,QAAA,CAAqBC,CAArB,CAAJ,CACyBhB,EAAA,CAAwB5pB,CAAxB,CAA+BwnB,CAAAmD,QAAA,CAAqBC,CAArB,CAA/B,CAA+DT,CAA/D,CADzB,CAGyB,IAI3B,OAAOC,EA1BwE,CAuCjFJ,QAASA,GAAiB,CAACpyB,CAAD,CAAOktB,CAAP,CAAmBgF,CAAnB,CAA0BrC,CAA1B,CAAuCC,CAAvC,CAAwD,CAAA,IAE5EmD,EAAWf,CAAAjD,MAIf,QALejvB,CAAAyF,SAKf,EACE,KAniNgB8T,CAmiNhB,CAEE2Z,CAAA,CAAahG,CAAb,CACIiG,EAAA,CAAmB5yB,EAAA,CAAUP,CAAV,CAAnB,CADJ,CACyC,GADzC,CAC8C6vB,CAD9C,CAC2DC,CAD3D,CAIA,KANF,IAMW5vB,CANX,CAMiBiH,CANjB,CAM0CtK,CAN1C,CAMiDu2B,CANjD,CAM2DC,EAASrzB,CAAAqvB,WANpE,CAOW7xB,EAAI,CAPf,CAOkBC,EAAK41B,CAAL51B,EAAe41B,CAAA53B,OAD/B,CAC8C+B,CAD9C,CACkDC,CADlD,CACsDD,CAAA,EADtD,CAC2D,CACzD,IAAI81B,EAAgB,CAAA,CAApB,CACIC,EAAc,CAAA,CAElBrzB,EAAA,CAAOmzB,CAAA,CAAO71B,CAAP,CACP2J,EAAA,CAAOjH,CAAAiH,KACPtK,EAAA,CAAQoe,CAAA,CAAK/a,CAAArD,MAAL,CAGR22B,EAAA,CAAaL,EAAA,CAAmBhsB,CAAnB,CACb,IAAIisB,CAAJ,CAAeK,EAAA1zB,KAAA,CAAqByzB,CAArB,CAAf,CACErsB,CAAA,CAAOA,CAAA7C,QAAA,CAAaovB,EAAb,CAA4B,EAA5B,CAAA/K,OAAA,CACG,CADH,CAAArkB,QAAA,CACc,OADd,CACuB,QAAQ,CAAClC,CAAD,CAAQoH,CAAR,CAAgB,CAClD,MAAOA,EAAA4P,YAAA,EAD2C,CAD/C,CAOT,EADIua,CACJ,CADwBH,CAAApxB,MAAA,CAAiBwxB,EAAjB,CACxB,GAAyBC,CAAA,CAAwBF,CAAA,CAAkB,CAAlB,CAAxB,CAAzB,GACEL,CAEA,CAFgBnsB,CAEhB,CADAosB,CACA,CADcpsB,CAAAwhB,OAAA,CAAY,CAAZ,CAAexhB,CAAA1L,OAAf,CAA6B,CAA7B,CACd,CADgD,KAChD,CAAA0L,CAAA;AAAOA,CAAAwhB,OAAA,CAAY,CAAZ,CAAexhB,CAAA1L,OAAf,CAA6B,CAA7B,CAHT,CAMAq4B,EAAA,CAAQX,EAAA,CAAmBhsB,CAAAuC,YAAA,EAAnB,CACRupB,EAAA,CAASa,CAAT,CAAA,CAAkB3sB,CAClB,IAAIisB,CAAJ,EAAiB,CAAAlB,CAAA/1B,eAAA,CAAqB23B,CAArB,CAAjB,CACI5B,CAAA,CAAM4B,CAAN,CACA,CADej3B,CACf,CAAI2hB,EAAA,CAAmBxe,CAAnB,CAAyB8zB,CAAzB,CAAJ,GACE5B,CAAA,CAAM4B,CAAN,CADF,CACiB,CAAA,CADjB,CAIJC,GAAA,CAA4B/zB,CAA5B,CAAkCktB,CAAlC,CAA8CrwB,CAA9C,CAAqDi3B,CAArD,CAA4DV,CAA5D,CACAF,EAAA,CAAahG,CAAb,CAAyB4G,CAAzB,CAAgC,GAAhC,CAAqCjE,CAArC,CAAkDC,CAAlD,CAAmEwD,CAAnE,CACcC,CADd,CAjCyD,CAsC3D7D,CAAA,CAAY1vB,CAAA0vB,UACRnyB,EAAA,CAASmyB,CAAT,CAAJ,GAEIA,CAFJ,CAEgBA,CAAAsE,QAFhB,CAIA,IAAIz4B,CAAA,CAASm0B,CAAT,CAAJ,EAAyC,EAAzC,GAA2BA,CAA3B,CACE,IAAA,CAAOttB,CAAP,CAAeuqB,CAAA1S,KAAA,CAA4ByV,CAA5B,CAAf,CAAA,CACEoE,CAIA,CAJQX,EAAA,CAAmB/wB,CAAA,CAAM,CAAN,CAAnB,CAIR,CAHI8wB,CAAA,CAAahG,CAAb,CAAyB4G,CAAzB,CAAgC,GAAhC,CAAqCjE,CAArC,CAAkDC,CAAlD,CAGJ,GAFEoC,CAAA,CAAM4B,CAAN,CAEF,CAFiB7Y,CAAA,CAAK7Y,CAAA,CAAM,CAAN,CAAL,CAEjB,EAAAstB,CAAA,CAAYA,CAAA/G,OAAA,CAAiBvmB,CAAAxB,MAAjB,CAA+BwB,CAAA,CAAM,CAAN,CAAA3G,OAA/B,CAGhB,MACF,MAAKiK,EAAL,CACE,GAAa,EAAb,GAAIie,EAAJ,CAEE,IAAA,CAAO3jB,CAAA8a,WAAP,EAA0B9a,CAAA8L,YAA1B,EAA8C9L,CAAA8L,YAAArG,SAA9C,GAA4EC,EAA5E,CAAA,CACE1F,CAAAkwB,UACA,EADkClwB,CAAA8L,YAAAokB,UAClC,CAAAlwB,CAAA8a,WAAAkD,YAAA,CAA4Bhe,CAAA8L,YAA5B,CAGJmoB,GAAA,CAA4B/G,CAA5B,CAAwCltB,CAAAkwB,UAAxC,CACA,MACF,MAtmNgBgE,CAsmNhB,CACEC,EAAA,CAAyBn0B,CAAzB,CAA+BktB,CAA/B,CAA2CgF,CAA3C,CAAkDrC,CAAlD,CAA+DC,CAA/D,CAxEJ,CA4EA5C,CAAAzwB,KAAA,CAAgB23B,CAAhB,CACA;MAAOlH,EAnFyE,CAsFlFiH,QAASA,GAAwB,CAACn0B,CAAD,CAAOktB,CAAP,CAAmBgF,CAAnB,CAA0BrC,CAA1B,CAAuCC,CAAvC,CAAwD,CAGvF,GAAI,CACF,IAAI1tB,EAAQsqB,CAAAzS,KAAA,CAA8Bja,CAAAkwB,UAA9B,CACZ,IAAI9tB,CAAJ,CAAW,CACT,IAAI0xB,EAAQX,EAAA,CAAmB/wB,CAAA,CAAM,CAAN,CAAnB,CACR8wB,EAAA,CAAahG,CAAb,CAAyB4G,CAAzB,CAAgC,GAAhC,CAAqCjE,CAArC,CAAkDC,CAAlD,CAAJ,GACEoC,CAAA,CAAM4B,CAAN,CADF,CACiB7Y,CAAA,CAAK7Y,CAAA,CAAM,CAAN,CAAL,CADjB,CAFS,CAFT,CAQF,MAAOiD,CAAP,CAAU,EAX2E,CA0BzFgvB,QAASA,EAAS,CAACr0B,CAAD,CAAOs0B,CAAP,CAAkBC,CAAlB,CAA2B,CAC3C,IAAI5oB,EAAQ,EAAZ,CACI6oB,EAAQ,CACZ,IAAIF,CAAJ,EAAiBt0B,CAAAoH,aAAjB,EAAsCpH,CAAAoH,aAAA,CAAkBktB,CAAlB,CAAtC,EACE,EAAG,CACD,GAAKt0B,CAAAA,CAAL,CACE,KAAMgsB,GAAA,CAAe,SAAf,CAEIsI,CAFJ,CAEeC,CAFf,CAAN,CAlpNYhb,CAspNd,EAAIvZ,CAAAyF,SAAJ,GACMzF,CAAAoH,aAAA,CAAkBktB,CAAlB,CACJ,EADkCE,CAAA,EAClC,CAAIx0B,CAAAoH,aAAA,CAAkBmtB,CAAlB,CAAJ,EAAgCC,CAAA,EAFlC,CAIA7oB,EAAAxK,KAAA,CAAWnB,CAAX,CACAA,EAAA,CAAOA,CAAA8L,YAXN,CAAH,MAYiB,CAZjB,CAYS0oB,CAZT,CADF,KAeE7oB,EAAAxK,KAAA,CAAWnB,CAAX,CAGF,OAAOxE,EAAA,CAAOmQ,CAAP,CArBoC,CAgC7C8oB,QAASA,GAA0B,CAACC,CAAD,CAASJ,CAAT,CAAoBC,CAApB,CAA6B,CAC9D,MAAOI,SAA4B,CAACvsB,CAAD,CAAQ5H,CAAR,CAAiB0xB,CAAjB,CAAwBS,CAAxB,CAAqC/C,CAArC,CAAmD,CACpFpvB,CAAA,CAAU6zB,CAAA,CAAU7zB,CAAA,CAAQ,CAAR,CAAV,CAAsB8zB,CAAtB,CAAiCC,CAAjC,CACV,OAAOG,EAAA,CAAOtsB,CAAP,CAAc5H,CAAd,CAAuB0xB,CAAvB,CAA8BS,CAA9B,CAA2C/C,CAA3C,CAF6E,CADxB,CAkBhEgF,QAASA,GAAoB,CAACC,CAAD,CAAQlF,CAAR,CAAuBC,CAAvB,CAAqCC,CAArC,CAAkDC,CAAlD,CAAmEC,CAAnE,CAA2F,CACtH,IAAI+E,CAEJ,OAAID,EAAJ,CACSxsB,EAAA,CAAQsnB,CAAR,CAAuBC,CAAvB,CAAqCC,CAArC,CAAkDC,CAAlD,CAAmEC,CAAnE,CADT,CAGOgF,QAAwB,EAAG,CAC3BD,CAAL;CACEA,CAIA,CAJWzsB,EAAA,CAAQsnB,CAAR,CAAuBC,CAAvB,CAAqCC,CAArC,CAAkDC,CAAlD,CAAmEC,CAAnE,CAIX,CAAAJ,CAAA,CAAgBC,CAAhB,CAA+BG,CAA/B,CAAwD,IAL1D,CAOA,OAAO+E,EAAAtxB,MAAA,CAAe,IAAf,CAAqBlF,SAArB,CARyB,CANoF,CAyCxH+zB,QAASA,GAAqB,CAACnF,CAAD,CAAa8H,CAAb,CAA0BC,CAA1B,CAAyCrF,CAAzC,CACCsF,CADD,CACeC,CADf,CACyCC,CADzC,CACqDC,CADrD,CAECtF,CAFD,CAEyB,CAmTrDuF,QAASA,EAAU,CAACC,CAAD,CAAMC,CAAN,CAAYlB,CAAZ,CAAuBC,CAAvB,CAAgC,CACjD,GAAIgB,CAAJ,CAAS,CACHjB,CAAJ,GAAeiB,CAAf,CAAqBd,EAAA,CAA2Bc,CAA3B,CAAgCjB,CAAhC,CAA2CC,CAA3C,CAArB,CACAgB,EAAAhJ,QAAA,CAAc5e,CAAA4e,QACdgJ,EAAA9J,cAAA,CAAoBA,CACpB,IAAIgK,CAAJ,GAAiC9nB,CAAjC,EAA8CA,CAAA+nB,eAA9C,CACEH,CAAA,CAAMI,EAAA,CAAmBJ,CAAnB,CAAwB,CAACprB,aAAc,CAAA,CAAf,CAAxB,CAERirB,EAAAj0B,KAAA,CAAgBo0B,CAAhB,CAPO,CAST,GAAIC,CAAJ,CAAU,CACJlB,CAAJ,GAAekB,CAAf,CAAsBf,EAAA,CAA2Be,CAA3B,CAAiClB,CAAjC,CAA4CC,CAA5C,CAAtB,CACAiB,EAAAjJ,QAAA,CAAe5e,CAAA4e,QACfiJ,EAAA/J,cAAA,CAAqBA,CACrB,IAAIgK,CAAJ,GAAiC9nB,CAAjC,EAA8CA,CAAA+nB,eAA9C,CACEF,CAAA,CAAOG,EAAA,CAAmBH,CAAnB,CAAyB,CAACrrB,aAAc,CAAA,CAAf,CAAzB,CAETkrB,EAAAl0B,KAAA,CAAiBq0B,CAAjB,CAPQ,CAVuC,CAqBnD1D,QAASA,EAAU,CAACP,CAAD,CAAcnpB,CAAd,CAAqBwtB,CAArB,CAA+BtE,CAA/B,CAA6CkB,CAA7C,CAAgE,CAyJjFqD,QAASA,EAA0B,CAACztB,CAAD,CAAQ0tB,CAAR,CAAuBhF,CAAvB,CAA4CkC,CAA5C,CAAsD,CACvF,IAAInC,CAECpxB,GAAA,CAAQ2I,CAAR,CAAL,GACE4qB,CAGA,CAHWlC,CAGX,CAFAA,CAEA,CAFsBgF,CAEtB,CADAA,CACA,CADgB1tB,CAChB,CAAAA,CAAA,CAAQ1G,IAAAA,EAJV,CAOIq0B,GAAJ,GACElF,CADF,CAC0BmF,CAD1B,CAGKlF,EAAL,GACEA,CADF,CACwBiF,EAAA,CAAgCtI,CAAA7uB,OAAA,EAAhC,CAAoD6uB,CAD5E,CAGA,IAAIuF,CAAJ,CAAc,CAKZ,IAAIiD,EAAmBzD,CAAAO,QAAA,CAA0BC,CAA1B,CACvB,IAAIiD,CAAJ,CACE,MAAOA,EAAA,CAAiB7tB,CAAjB;AAAwB0tB,CAAxB,CAAuCjF,CAAvC,CAA8DC,CAA9D,CAAmFoF,CAAnF,CACF,IAAI52B,CAAA,CAAY22B,CAAZ,CAAJ,CACL,KAAMjK,GAAA,CAAe,QAAf,CAGLgH,CAHK,CAGK7tB,EAAA,CAAYsoB,CAAZ,CAHL,CAAN,CATU,CAAd,IAeE,OAAO+E,EAAA,CAAkBpqB,CAAlB,CAAyB0tB,CAAzB,CAAwCjF,CAAxC,CAA+DC,CAA/D,CAAoFoF,CAApF,CA/B8E,CAzJR,IAC7Ex5B,CAD6E,CAC1EY,CAD0E,CACtEo3B,CADsE,CAC9DvqB,CAD8D,CAChDgsB,CADgD,CAC/BH,CAD+B,CACXpG,CADW,CACGnC,CAGhFuH,EAAJ,GAAoBY,CAApB,EACE1D,CACA,CADQ+C,CACR,CAAAxH,CAAA,CAAWwH,CAAA/F,UAFb,GAIEzB,CACA,CADWjyB,CAAA,CAAOo6B,CAAP,CACX,CAAA1D,CAAA,CAAQ,IAAInD,EAAJ,CAAetB,CAAf,CAAyBwH,CAAzB,CALV,CAQAkB,EAAA,CAAkB/tB,CACdqtB,EAAJ,CACEtrB,CADF,CACiB/B,CAAAuoB,KAAA,CAAW,CAAA,CAAX,CADjB,CAEWyF,CAFX,GAGED,CAHF,CAGoB/tB,CAAAsoB,QAHpB,CAMI8B,EAAJ,GAGE5C,CAGA,CAHeiG,CAGf,CAFAjG,CAAAmB,kBAEA,CAFiCyB,CAEjC,CAAA5C,CAAAyG,aAAA,CAA4BC,QAAQ,CAACtD,CAAD,CAAW,CAC7C,MAAO,CAAE,CAAAR,CAAAO,QAAA,CAA0BC,CAA1B,CADoC,CANjD,CAWIuD,EAAJ,GACEP,CADF,CACuBQ,EAAA,CAAiB/I,CAAjB,CAA2ByE,CAA3B,CAAkCtC,CAAlC,CAAgD2G,CAAhD,CAAsEpsB,CAAtE,CAAoF/B,CAApF,CAA2FqtB,CAA3F,CADvB,CAIIA,EAAJ,GAEEptB,EAAA+oB,eAAA,CAAuB3D,CAAvB,CAAiCtjB,CAAjC,CAA+C,CAAA,CAA/C,CAAqD,EAAEssB,CAAF,GAAwBA,CAAxB,GAA8ChB,CAA9C,EACjDgB,CADiD,GAC3BhB,CAAAiB,oBAD2B,EAArD,CAQA,CANAruB,EAAAgoB,gBAAA,CAAwB5C,CAAxB,CAAkC,CAAA,CAAlC,CAMA,CALAtjB,CAAAwsB,kBAKA,CAJIlB,CAAAkB,kBAIJ,CAHAC,CAGA,CAHmBC,EAAA,CAA4BzuB,CAA5B,CAAmC8pB,CAAnC,CAA0C/nB,CAA1C,CACWA,CAAAwsB,kBADX,CAEWlB,CAFX,CAGnB,CAAImB,CAAAE,cAAJ,EACE3sB,CAAA4sB,IAAA,CAAiB,UAAjB,CAA6BH,CAAAE,cAA7B,CAXJ,CAgBA;IAAS3vB,CAAT,GAAiB6uB,EAAjB,CAAqC,CAC/BgB,CAAAA,CAAsBT,CAAA,CAAqBpvB,CAArB,CACtBiD,EAAAA,CAAa4rB,CAAA,CAAmB7uB,CAAnB,CACjB,KAAIykB,GAAWoL,CAAAC,WAAAhJ,iBAGb7jB,EAAA8sB,YAAA,CADE9sB,CAAA+sB,WAAJ,EAA6BvL,EAA7B,CAEIiL,EAAA,CAA4BV,CAA5B,CAA6CjE,CAA7C,CAAoD9nB,CAAA+mB,SAApD,CAAyEvF,EAAzE,CAAmFoL,CAAnF,CAFJ,CAI2B,EAG3B,KAAII,EAAmBhtB,CAAA,EACnBgtB,EAAJ,GAAyBhtB,CAAA+mB,SAAzB,GAGE/mB,CAAA+mB,SAGA,CAHsBiG,CAGtB,CAFA3J,CAAAllB,KAAA,CAAc,GAAd,CAAoByuB,CAAA7vB,KAApB,CAA+C,YAA/C,CAA6DiwB,CAA7D,CAEA,CADAhtB,CAAA8sB,YAAAJ,cACA,EADwC1sB,CAAA8sB,YAAAJ,cAAA,EACxC,CAAA1sB,CAAA8sB,YAAA,CACEL,EAAA,CAA4BV,CAA5B,CAA6CjE,CAA7C,CAAoD9nB,CAAA+mB,SAApD,CAAyEvF,EAAzE,CAAmFoL,CAAnF,CAPJ,CAbmC,CAyBrCl7B,CAAA,CAAQy6B,CAAR,CAA8B,QAAQ,CAACS,CAAD,CAAsB7vB,CAAtB,CAA4B,CAChE,IAAIolB,EAAUyK,CAAAzK,QACVyK,EAAA/I,iBAAJ,EAA6C,CAAA3yB,CAAA,CAAQixB,CAAR,CAA7C,EAAiEhvB,CAAA,CAASgvB,CAAT,CAAjE,EACEnuB,CAAA,CAAO43B,CAAA,CAAmB7uB,CAAnB,CAAAgqB,SAAP,CAA0CkG,EAAA,CAAelwB,CAAf,CAAqBolB,CAArB,CAA8BkB,CAA9B,CAAwCuI,CAAxC,CAA1C,CAH8D,CAAlE,CAQAl6B,EAAA,CAAQk6B,CAAR,CAA4B,QAAQ,CAAC5rB,CAAD,CAAa,CAC/C,IAAIktB,EAAqBltB,CAAA+mB,SACzB,IAAIj1B,CAAA,CAAWo7B,CAAAC,WAAX,CAAJ,CACE,GAAI,CACFD,CAAAC,WAAA,CAA8BntB,CAAA8sB,YAAAM,eAA9B,CADE,CAEF,MAAOnyB,CAAP,CAAU,CACViQ,CAAA,CAAkBjQ,CAAlB,CADU,CAId,GAAInJ,CAAA,CAAWo7B,CAAAG,QAAX,CAAJ,CACE,GAAI,CACFH,CAAAG,QAAA,EADE,CAEF,MAAOpyB,CAAP,CAAU,CACViQ,CAAA,CAAkBjQ,CAAlB,CADU,CAIVnJ,CAAA,CAAWo7B,CAAAI,SAAX,CAAJ;CACEvB,CAAAx2B,OAAA,CAAuB,QAAQ,EAAG,CAAE23B,CAAAI,SAAA,EAAF,CAAlC,CACA,CAAAJ,CAAAI,SAAA,EAFF,CAIIx7B,EAAA,CAAWo7B,CAAAK,WAAX,CAAJ,EACExB,CAAAY,IAAA,CAAoB,UAApB,CAAgCa,QAA0B,EAAG,CAC3DN,CAAAK,WAAA,EAD2D,CAA7D,CArB6C,CAAjD,CA4BKj7B,EAAA,CAAI,CAAT,KAAYY,CAAZ,CAAiB83B,CAAA35B,OAAjB,CAAoCiB,CAApC,CAAwCY,CAAxC,CAA4CZ,CAAA,EAA5C,CACEg4B,CACA,CADSU,CAAA,CAAW14B,CAAX,CACT,CAAAm7B,EAAA,CAAanD,CAAb,CACIA,CAAAvqB,aAAA,CAAsBA,CAAtB,CAAqC/B,CADzC,CAEIqlB,CAFJ,CAGIyE,CAHJ,CAIIwC,CAAAnI,QAJJ,EAIsB8K,EAAA,CAAe3C,CAAAjJ,cAAf,CAAqCiJ,CAAAnI,QAArC,CAAqDkB,CAArD,CAA+DuI,CAA/D,CAJtB,CAKIpG,CALJ,CAYF,KAAIsG,EAAe9tB,CACfqtB,EAAJ,GAAiCA,CAAA9H,SAAjC,EAA+G,IAA/G,GAAsE8H,CAAA7H,YAAtE,IACEsI,CADF,CACiB/rB,CADjB,CAGAonB,EAAA,EAAeA,CAAA,CAAY2E,CAAZ,CAA0BN,CAAApb,WAA1B,CAA+C9Y,IAAAA,EAA/C,CAA0D8wB,CAA1D,CAGf,KAAK91B,CAAL,CAAS24B,CAAA55B,OAAT,CAA8B,CAA9B,CAAsC,CAAtC,EAAiCiB,CAAjC,CAAyCA,CAAA,EAAzC,CACEg4B,CACA,CADSW,CAAA,CAAY34B,CAAZ,CACT,CAAAm7B,EAAA,CAAanD,CAAb,CACIA,CAAAvqB,aAAA,CAAsBA,CAAtB,CAAqC/B,CADzC,CAEIqlB,CAFJ,CAGIyE,CAHJ,CAIIwC,CAAAnI,QAJJ,EAIsB8K,EAAA,CAAe3C,CAAAjJ,cAAf,CAAqCiJ,CAAAnI,QAArC,CAAqDkB,CAArD,CAA+DuI,CAA/D,CAJtB,CAKIpG,CALJ,CAUF9zB,EAAA,CAAQk6B,CAAR,CAA4B,QAAQ,CAAC5rB,CAAD,CAAa,CAC3CktB,CAAAA,CAAqBltB,CAAA+mB,SACrBj1B,EAAA,CAAWo7B,CAAAQ,UAAX,CAAJ,EACER,CAAAQ,UAAA,EAH6C,CAAjD,CAhJiF,CAvUnF/H,CAAA,CAAyBA,CAAzB,EAAmD,EAuBnD,KAxBqD,IAGjDgI,EAAmB,CAAClN,MAAAC,UAH6B;AAIjDsL,EAAoBrG,CAAAqG,kBAJ6B,CAKjDG,EAAuBxG,CAAAwG,qBAL0B,CAMjDd,EAA2B1F,CAAA0F,yBANsB,CAOjDgB,EAAoB1G,CAAA0G,kBAP6B,CAQjDuB,EAA4BjI,CAAAiI,0BARqB,CASjDC,EAAyB,CAAA,CATwB,CAUjDC,EAAc,CAAA,CAVmC,CAWjDnC,GAAgChG,CAAAgG,8BAXiB,CAYjDoC,EAAelD,CAAA/F,UAAfiJ,CAAyC38B,CAAA,CAAOw5B,CAAP,CAZQ,CAajDrnB,CAbiD,CAcjD8d,CAdiD,CAejD2M,CAfiD,CAiBjDC,EAAoBzI,CAjB6B,CAkBjD8E,CAlBiD,CAmBjD4D,GAAiC,CAAA,CAnBgB,CAoBjDC,GAAqC,CAAA,CApBY,CAqBjDC,CArBiD,CAwB5C97B,EAAI,CAxBwC,CAwBrCY,EAAK4vB,CAAAzxB,OAArB,CAAwCiB,CAAxC,CAA4CY,CAA5C,CAAgDZ,CAAA,EAAhD,CAAqD,CACnDiR,CAAA,CAAYuf,CAAA,CAAWxwB,CAAX,CACZ,KAAI43B,EAAY3mB,CAAA8qB,QAAhB,CACIlE,GAAU5mB,CAAA+qB,MAGVpE,EAAJ,GACE6D,CADF,CACiB9D,CAAA,CAAUW,CAAV,CAAuBV,CAAvB,CAAkCC,EAAlC,CADjB,CAGA6D,EAAA,CAAY12B,IAAAA,EAEZ,IAAIq2B,CAAJ,CAAuBpqB,CAAAwf,SAAvB,CACE,KAGF,IAAIqL,CAAJ,CAAqB7qB,CAAAvF,MAArB,CAIOuF,CAAAigB,YAeL,GAdMrwB,CAAA,CAASi7B,CAAT,CAAJ,EAGEG,CAAA,CAAkB,oBAAlB,CAAwClD,CAAxC,EAAoEW,CAApE,CACkBzoB,CADlB,CAC6BwqB,CAD7B,CAEA,CAAA1C,CAAA,CAA2B9nB,CAL7B,EASEgrB,CAAA,CAAkB,oBAAlB,CAAwClD,CAAxC,CAAkE9nB,CAAlE,CACkBwqB,CADlB,CAKJ,EAAA/B,CAAA,CAAoBA,CAApB,EAAyCzoB,CAG3C8d,EAAA,CAAgB9d,CAAAxG,KAQhB,IAAKmxB,CAAAA,EAAL,GAAyC3qB,CAAArJ,QAAzC,GAA+DqJ,CAAAigB,YAA/D,EAAwFjgB,CAAAggB,SAAxF,GACQhgB,CAAAqgB,WADR;AACiC4K,CAAAjrB,CAAAirB,MADjC,EACoD,CAG5C,IAASC,CAAT,CAAyBn8B,CAAzB,CAA6B,CAA7B,CAAgCo8B,EAAhC,CAAqD5L,CAAA,CAAW2L,CAAA,EAAX,CAArD,CAAA,CACI,GAAKC,EAAA9K,WAAL,EAAuC4K,CAAAE,EAAAF,MAAvC,EACQE,EAAAx0B,QADR,GACuCw0B,EAAAlL,YADvC,EACyEkL,EAAAnL,SADzE,EACwG,CACpG4K,EAAA,CAAqC,CAAA,CACrC,MAFoG,CAM5GD,EAAA,CAAiC,CAAA,CAXW,CAc/C1K,CAAAjgB,CAAAigB,YAAL,EAA8BjgB,CAAAvD,WAA9B,GACEouB,CAIA,CAJiB7qB,CAAAvD,WAIjB,CAHAmsB,CAGA,CAHuBA,CAGvB,EAH+CzzB,CAAA,EAG/C,CAFA61B,CAAA,CAAkB,GAAlB,CAAwBlN,CAAxB,CAAwC,cAAxC,CACI8K,CAAA,CAAqB9K,CAArB,CADJ,CACyC9d,CADzC,CACoDwqB,CADpD,CAEA,CAAA5B,CAAA,CAAqB9K,CAArB,CAAA,CAAsC9d,CALxC,CAQA,IAAI6qB,CAAJ,CAAqB7qB,CAAAqgB,WAArB,CAWE,GAVAiK,CAUI,CAVqB,CAAA,CAUrB,CALCtqB,CAAAirB,MAKD,GAJFD,CAAA,CAAkB,cAAlB,CAAkCX,CAAlC,CAA6DrqB,CAA7D,CAAwEwqB,CAAxE,CACA,CAAAH,CAAA,CAA4BrqB,CAG1B,EAAkB,SAAlB,EAAA6qB,CAAJ,CACEzC,EAmBA,CAnBgC,CAAA,CAmBhC,CAlBAgC,CAkBA,CAlBmBpqB,CAAAwf,SAkBnB,CAjBAiL,CAiBA,CAjBYD,CAiBZ,CAhBAA,CAgBA,CAhBelD,CAAA/F,UAgBf,CAfI1zB,CAAA,CAAO6M,EAAA0wB,gBAAA,CAAwBtN,CAAxB,CAAuCwJ,CAAA,CAAcxJ,CAAd,CAAvC,CAAP,CAeJ,CAdAuJ,CAcA,CAdcmD,CAAA,CAAa,CAAb,CAcd,CAbAa,EAAA,CAAY9D,CAAZ,CA1lPH72B,EAAAjC,KAAA,CA0lPuCg8B,CA1lPvC,CAA+B,CAA/B,CA0lPG,CAAgDpD,CAAhD,CAaA,CAFAoD,CAAA,CAAU,CAAV,CAAAa,aAEA,CAF4Bb,CAAA,CAAU,CAAV,CAAAtd,WAE5B,CAAAud,CAAA,CAAoBzD,EAAA,CAAqB2D,EAArB,CAAyDH,CAAzD,CAAoExI,CAApE,CAAkFmI,CAAlF,CACQmB,CADR,EAC4BA,CAAA/xB,KAD5B,CACmD,CAQzC6wB,0BAA2BA,CARc,CADnD,CApBtB,KA+BO,CAEL,IAAImB,GAAQr2B,CAAA,EAEZs1B,EAAA,CAAY58B,CAAA,CAAO8f,EAAA,CAAY0Z,CAAZ,CAAP,CAAAoE,SAAA,EAEZ;GAAI77B,CAAA,CAASi7B,CAAT,CAAJ,CAA8B,CAI5BJ,CAAA,CAAY,EAEZ,KAAIiB,EAAUv2B,CAAA,EAAd,CACIw2B,EAAcx2B,CAAA,EAGlBhH,EAAA,CAAQ08B,CAAR,CAAwB,QAAQ,CAACe,CAAD,CAAkBvG,CAAlB,CAA4B,CAE1D,IAAI7G,EAA0C,GAA1CA,GAAYoN,CAAAx2B,OAAA,CAAuB,CAAvB,CAChBw2B,EAAA,CAAkBpN,CAAA,CAAWoN,CAAAvzB,UAAA,CAA0B,CAA1B,CAAX,CAA0CuzB,CAE5DF,EAAA,CAAQE,CAAR,CAAA,CAA2BvG,CAK3BmG,GAAA,CAAMnG,CAAN,CAAA,CAAkB,IAIlBsG,EAAA,CAAYtG,CAAZ,CAAA,CAAwB7G,CAdkC,CAA5D,CAkBArwB,EAAA,CAAQq8B,CAAAiB,SAAA,EAAR,CAAiC,QAAQ,CAACp5B,CAAD,CAAO,CAC9C,IAAIgzB,EAAWqG,CAAA,CAAQlG,EAAA,CAAmB5yB,EAAA,CAAUP,CAAV,CAAnB,CAAR,CACXgzB,EAAJ,EACEsG,CAAA,CAAYtG,CAAZ,CAEA,CAFwB,CAAA,CAExB,CADAmG,EAAA,CAAMnG,CAAN,CACA,CADkBmG,EAAA,CAAMnG,CAAN,CAClB,EADqC,EACrC,CAAAmG,EAAA,CAAMnG,CAAN,CAAA7xB,KAAA,CAAqBnB,CAArB,CAHF,EAKEo4B,CAAAj3B,KAAA,CAAenB,CAAf,CAP4C,CAAhD,CAYAlE,EAAA,CAAQw9B,CAAR,CAAqB,QAAQ,CAACE,CAAD,CAASxG,CAAT,CAAmB,CAC9C,GAAKwG,CAAAA,CAAL,CACE,KAAMxN,GAAA,CAAe,SAAf,CAA8EgH,CAA9E,CAAN,CAF4C,CAAhD,CAMA,KAASA,IAAAA,CAAT,GAAqBmG,GAArB,CACMA,EAAA,CAAMnG,CAAN,CAAJ,GAEEmG,EAAA,CAAMnG,CAAN,CAFF,CAEoB4B,EAAA,CAAqB2D,EAArB,CAAyDY,EAAA,CAAMnG,CAAN,CAAzD,CAA0EpD,CAA1E,CAFpB,CA/C0B,CAsD9BuI,CAAA/yB,MAAA,EACAizB,EAAA,CAAoBzD,EAAA,CAAqB2D,EAArB,CAAyDH,CAAzD,CAAoExI,CAApE,CAAkFluB,IAAAA,EAAlF,CAChBA,IAAAA,EADgB,CACL,CAAE+uB,cAAe9iB,CAAA+nB,eAAfjF,EAA2C9iB,CAAA8rB,WAA7C,CADK,CAEpBpB,EAAAtF,QAAA,CAA4BoG,EA/DvB,CAmET,GAAIxrB,CAAAggB,SAAJ,CAWE,GAVAuK,CAUI5zB,CAVU,CAAA,CAUVA,CATJq0B,CAAA,CAAkB,UAAlB,CAA8BlC,CAA9B,CAAiD9oB,CAAjD,CAA4DwqB,CAA5D,CASI7zB,CARJmyB,CAQInyB,CARgBqJ,CAQhBrJ,CANJk0B,CAMIl0B,CANcpI,CAAA,CAAWyR,CAAAggB,SAAX,CAAD,CACXhgB,CAAAggB,SAAA,CAAmBwK,CAAnB,CAAiClD,CAAjC,CADW,CAEXtnB,CAAAggB,SAIFrpB;AAFJk0B,CAEIl0B,CAFao1B,EAAA,CAAoBlB,CAApB,CAEbl0B,CAAAqJ,CAAArJ,QAAJ,CAAuB,CACrB40B,CAAA,CAAmBvrB,CAIjByqB,EAAA,CA9lMJve,EAAA9Z,KAAA,CA2lMuBy4B,CA3lMvB,CA2lME,CAGcmB,EAAA,CAAe1I,EAAA,CAAatjB,CAAAisB,kBAAb,CAA0C3e,CAAA,CAAKud,CAAL,CAA1C,CAAf,CAHd,CACc,EAIdxD,EAAA,CAAcoD,CAAA,CAAU,CAAV,CAEd,IAAwB,CAAxB,EAAIA,CAAA38B,OAAJ,EAt8NY8d,CAs8NZ,GAA6Byb,CAAAvvB,SAA7B,CACE,KAAMumB,GAAA,CAAe,OAAf,CAEFP,CAFE,CAEa,EAFb,CAAN,CAKFuN,EAAA,CAAY9D,CAAZ,CAA0BiD,CAA1B,CAAwCnD,CAAxC,CAEI6E,EAAAA,CAAmB,CAAC5K,MAAO,EAAR,CAOnB6K,EAAAA,CAAqB1H,EAAA,CAAkB4C,CAAlB,CAA+B,EAA/B,CAAmC6E,CAAnC,CACzB,KAAIE,EAAwB7M,CAAApsB,OAAA,CAAkBpE,CAAlB,CAAsB,CAAtB,CAAyBwwB,CAAAzxB,OAAzB,EAA8CiB,CAA9C,CAAkD,CAAlD,EAE5B,EAAI+4B,CAAJ,EAAgCW,CAAhC,GAIE4D,CAAA,CAAmBF,CAAnB,CAAuCrE,CAAvC,CAAiEW,CAAjE,CAEFlJ,EAAA,CAAaA,CAAAlqB,OAAA,CAAkB82B,CAAlB,CAAA92B,OAAA,CAA6C+2B,CAA7C,CACbE,EAAA,CAAwBhF,CAAxB,CAAuC4E,CAAvC,CAEAv8B,EAAA,CAAK4vB,CAAAzxB,OApCgB,CAAvB,IAsCE08B,EAAA3yB,KAAA,CAAkBgzB,CAAlB,CAIJ,IAAI7qB,CAAAigB,YAAJ,CACEsK,CAkBA,CAlBc,CAAA,CAkBd,CAjBAS,CAAA,CAAkB,UAAlB,CAA8BlC,CAA9B,CAAiD9oB,CAAjD,CAA4DwqB,CAA5D,CAiBA,CAhBA1B,CAgBA,CAhBoB9oB,CAgBpB,CAdIA,CAAArJ,QAcJ,GAbE40B,CAaF,CAbqBvrB,CAarB,EATAmkB,CASA,CATaoI,EAAA,CAAmBhN,CAAApsB,OAAA,CAAkBpE,CAAlB,CAAqBwwB,CAAAzxB,OAArB,CAAyCiB,CAAzC,CAAnB,CAAgEy7B,CAAhE,CAETlD,CAFS,CAEMC,CAFN,CAEoB+C,CAFpB,EAE8CI,CAF9C,CAEiEjD,CAFjE,CAE6EC,CAF7E,CAE0F,CACjGkB,qBAAsBA,CAD2E,CAEjGH,kBAAoBA,CAApBA,GAA0CzoB,CAA1CyoB,EAAwDA,CAFyC,CAGjGX,yBAA0BA,CAHuE,CAIjGgB,kBAAmBA,CAJ8E,CAKjGuB,0BAA2BA,CALsE,CAF1F,CASb;AAAA16B,CAAA,CAAK4vB,CAAAzxB,OAnBP,KAoBO,IAAIkS,CAAAtF,QAAJ,CACL,GAAI,CACFqsB,CAAA,CAAS/mB,CAAAtF,QAAA,CAAkB8vB,CAAlB,CAAgClD,CAAhC,CAA+CoD,CAA/C,CACT,KAAIr8B,EAAU2R,CAAA+oB,oBAAV16B,EAA2C2R,CAC3CzR,EAAA,CAAWw4B,CAAX,CAAJ,CACEY,CAAA,CAAW,IAAX,CAAiBnyB,EAAA,CAAKnH,CAAL,CAAc04B,CAAd,CAAjB,CAAwCJ,CAAxC,CAAmDC,EAAnD,CADF,CAEWG,CAFX,EAGEY,CAAA,CAAWnyB,EAAA,CAAKnH,CAAL,CAAc04B,CAAAa,IAAd,CAAX,CAAsCpyB,EAAA,CAAKnH,CAAL,CAAc04B,CAAAc,KAAd,CAAtC,CAAkElB,CAAlE,CAA6EC,EAA7E,CANA,CAQF,MAAOlvB,EAAP,CAAU,CACViQ,CAAA,CAAkBjQ,EAAlB,CAAqBF,EAAA,CAAYgzB,CAAZ,CAArB,CADU,CAKVxqB,CAAA2kB,SAAJ,GACER,CAAAQ,SACA,CADsB,CAAA,CACtB,CAAAyF,CAAA,CAAmBoC,IAAAC,IAAA,CAASrC,CAAT,CAA2BpqB,CAAAwf,SAA3B,CAFrB,CAxQmD,CA+QrD2E,CAAA1pB,MAAA,CAAmBguB,CAAnB,EAAoE,CAAA,CAApE,GAAwCA,CAAAhuB,MACxC0pB,EAAAC,wBAAA,CAAqCkG,CACrCnG,EAAAG,sBAAA,CAAmCiG,CACnCpG,EAAA9D,WAAA,CAAwBqK,CAExBtI,EAAAgG,8BAAA,CAAuDA,EAGvD,OAAOjE,EA/S8C,CAsgBvDuF,QAASA,GAAc,CAAC5L,CAAD,CAAgBc,CAAhB,CAAyBkB,CAAzB,CAAmCuI,CAAnC,CAAuD,CAC5E,IAAIn5B,CAEJ,IAAItB,CAAA,CAASgxB,CAAT,CAAJ,CAAuB,CACrB,IAAInqB,EAAQmqB,CAAAnqB,MAAA,CAAcoqB,CAAd,CACRrlB,EAAAA,CAAOolB,CAAAvmB,UAAA,CAAkB5D,CAAA,CAAM,CAAN,CAAA3G,OAAlB,CACX,KAAI4+B,EAAcj4B,CAAA,CAAM,CAAN,CAAdi4B,EAA0Bj4B,CAAA,CAAM,CAAN,CAA9B,CACI+pB,EAAwB,GAAxBA,GAAW/pB,CAAA,CAAM,CAAN,CAGK,KAApB,GAAIi4B,CAAJ,CACE5M,CADF,CACaA,CAAA7uB,OAAA,EADb,CAME/B,CANF,EAKEA,CALF,CAKUm5B,CALV,EAKgCA,CAAA,CAAmB7uB,CAAnB,CALhC;AAMmBtK,CAAAs0B,SAGnB,IAAKt0B,CAAAA,CAAL,CAAY,CACV,IAAIy9B,EAAW,GAAXA,CAAiBnzB,CAAjBmzB,CAAwB,YAC5Bz9B,EAAA,CAAQw9B,CAAA,CAAc5M,CAAApjB,cAAA,CAAuBiwB,CAAvB,CAAd,CAAiD7M,CAAAllB,KAAA,CAAc+xB,CAAd,CAF/C,CAKZ,GAAKz9B,CAAAA,CAAL,EAAesvB,CAAAA,CAAf,CACE,KAAMH,GAAA,CAAe,OAAf,CAEF7kB,CAFE,CAEIskB,CAFJ,CAAN,CAtBmB,CAAvB,IA0BO,IAAInwB,CAAA,CAAQixB,CAAR,CAAJ,CAEL,IADA1vB,CACgBS,CADR,EACQA,CAAPZ,CAAOY,CAAH,CAAGA,CAAAA,CAAAA,CAAKivB,CAAA9wB,OAArB,CAAqCiB,CAArC,CAAyCY,CAAzC,CAA6CZ,CAAA,EAA7C,CACEG,CAAA,CAAMH,CAAN,CAAA,CAAW26B,EAAA,CAAe5L,CAAf,CAA8Bc,CAAA,CAAQ7vB,CAAR,CAA9B,CAA0C+wB,CAA1C,CAAoDuI,CAApD,CAHR,KAKIz4B,EAAA,CAASgvB,CAAT,CAAJ,GACL1vB,CACA,CADQ,EACR,CAAAf,CAAA,CAAQywB,CAAR,CAAiB,QAAQ,CAACniB,CAAD,CAAamwB,CAAb,CAAuB,CAC9C19B,CAAA,CAAM09B,CAAN,CAAA,CAAkBlD,EAAA,CAAe5L,CAAf,CAA8BrhB,CAA9B,CAA0CqjB,CAA1C,CAAoDuI,CAApD,CAD4B,CAAhD,CAFK,CAOP,OAAOn5B,EAAP,EAAgB,IAzC4D,CA4C9E25B,QAASA,GAAgB,CAAC/I,CAAD,CAAWyE,CAAX,CAAkBtC,CAAlB,CAAgC2G,CAAhC,CAAsDpsB,CAAtD,CAAoE/B,CAApE,CAA2EqtB,CAA3E,CAAqG,CAC5H,IAAIO,EAAqBlzB,CAAA,EAAzB,CACS03B,CAAT,KAASA,CAAT,GAA0BjE,EAA1B,CAAgD,CAC9C,IAAI5oB,EAAY4oB,CAAA,CAAqBiE,CAArB,CAAhB,CACIhX,EAAS,CACXiX,OAAQ9sB,CAAA,GAAc8nB,CAAd,EAA0C9nB,CAAA+nB,eAA1C,CAAqEvrB,CAArE,CAAoF/B,CADjF,CAEXqlB,SAAUA,CAFC,CAGXC,OAAQwE,CAHG,CAIXwI,YAAa9K,CAJF,CADb,CAQIxlB,EAAauD,CAAAvD,WACC,IAAlB,EAAIA,CAAJ,GACEA,CADF,CACe8nB,CAAA,CAAMvkB,CAAAxG,KAAN,CADf,CAIImwB,EAAAA,CAAqBpiB,CAAA,CAAY9K,CAAZ,CAAwBoZ,CAAxB,CAAgC,CAAA,CAAhC,CAAsC7V,CAAAmgB,aAAtC,CAMzBkI,EAAA,CAAmBroB,CAAAxG,KAAnB,CAAA,CAAqCmwB,CACrC7J,EAAAllB,KAAA,CAAc,GAAd,CAAoBoF,CAAAxG,KAApB,CAAqC,YAArC,CAAmDmwB,CAAAnG,SAAnD,CArB8C,CAuBhD,MAAO6E,EAzBqH,CAp1CrD;AAs3CzEgE,QAASA,EAAkB,CAAC9M,CAAD,CAAa/iB,CAAb,CAA2BwwB,CAA3B,CAAqC,CAC9D,IAD8D,IACrDn9B,EAAI,CADiD,CAC9CC,EAAKyvB,CAAAzxB,OAArB,CAAwC+B,CAAxC,CAA4CC,CAA5C,CAAgDD,CAAA,EAAhD,CACE0vB,CAAA,CAAW1vB,CAAX,CAAA,CAAgBmB,EAAA,CAAQuuB,CAAA,CAAW1vB,CAAX,CAAR,CAAuB,CAACk4B,eAAgBvrB,CAAjB,CAA+BsvB,WAAYkB,CAA3C,CAAvB,CAF4C,CAoBhEzH,QAASA,EAAY,CAAC0H,CAAD,CAAczzB,CAAd,CAAoB6B,CAApB,CAA8B6mB,CAA9B,CAA2CC,CAA3C,CAA4D+K,CAA5D,CACCC,CADD,CACc,CACjC,GAAI3zB,CAAJ,GAAa2oB,CAAb,CAA8B,MAAO,KACjC1tB,EAAAA,CAAQ,IACZ,IAAIqqB,CAAAtwB,eAAA,CAA6BgL,CAA7B,CAAJ,CAAwC,CAAA,IAC7BwG,CAAWuf,EAAAA,CAAalJ,CAAA5a,IAAA,CAAcjC,CAAd,CA7zD1B8lB,WA6zD0B,CAAjC,KADsC,IAElCvwB,EAAI,CAF8B,CAE3BY,EAAK4vB,CAAAzxB,OADhB,CACmCiB,CADnC,CACuCY,CADvC,CAC2CZ,CAAA,EAD3C,CAEE,GAAI,CAEF,GADAiR,CACI,CADQuf,CAAA,CAAWxwB,CAAX,CACR,EAAC4C,CAAA,CAAYuwB,CAAZ,CAAD,EAA6BA,CAA7B,CAA2CliB,CAAAwf,SAA3C,GAC0C,EAD1C,EACCxf,CAAAyf,SAAAvsB,QAAA,CAA2BmI,CAA3B,CADL,CACiD,CAC3C6xB,CAAJ,GACEltB,CADF,CACchP,EAAA,CAAQgP,CAAR,CAAmB,CAAC8qB,QAASoC,CAAV,CAAyBnC,MAAOoC,CAAhC,CAAnB,CADd,CAGA,IAAK7D,CAAAtpB,CAAAspB,WAAL,CAA2B,CACVtpB,IAAAA,EAAAA,CAAAA,CACYA,EAAAA,CADZA,CACuBxG,EAAAwG,CAAAxG,KADvBwG,CAvxDvBie,EAAW,CACbzhB,aAAc,IADD,CAEb8jB,iBAAkB,IAFL,CAIX1wB,EAAA,CAASoQ,CAAAvF,MAAT,CAAJ,GACqC,CAAA,CAAnC,GAAIuF,CAAAsgB,iBAAJ,EACErC,CAAAqC,iBAEA,CAF4BzC,CAAA,CAAqB7d,CAAAvF,MAArB,CACqBqjB,CADrB,CACoC,CAAA,CADpC,CAE5B,CAAAG,CAAAzhB,aAAA,CAAwB,EAH1B;AAKEyhB,CAAAzhB,aALF,CAK0BqhB,CAAA,CAAqB7d,CAAAvF,MAArB,CACqBqjB,CADrB,CACoC,CAAA,CADpC,CAN5B,CAUIluB,EAAA,CAASoQ,CAAAsgB,iBAAT,CAAJ,GACErC,CAAAqC,iBADF,CAEMzC,CAAA,CAAqB7d,CAAAsgB,iBAArB,CAAiDxC,CAAjD,CAAgE,CAAA,CAAhE,CAFN,CAIA,IAAIluB,CAAA,CAASquB,CAAAqC,iBAAT,CAAJ,CAAyC,CACvC,IAAI7jB,EAAauD,CAAAvD,WAAjB,CACI0jB,EAAengB,CAAAmgB,aACnB,IAAK1jB,CAAAA,CAAL,CAEE,KAAM4hB,GAAA,CAAe,QAAf,CAEAP,CAFA,CAAN,CAGK,GAAK,CAAAsC,EAAA,CAAwB3jB,CAAxB,CAAoC0jB,CAApC,CAAL,CAEL,KAAM9B,GAAA,CAAe,SAAf,CAEAP,CAFA,CAAN,CAVqC,CAqwD7B,IAAIG,EAAWje,CAAAspB,WAAXrL,CAtvDTA,CAwvDSruB,EAAA,CAASquB,CAAAzhB,aAAT,CAAJ,GACEwD,CAAAgpB,kBADF,CACgC/K,CAAAzhB,aADhC,CAHyB,CAO3BywB,CAAAz5B,KAAA,CAAiBwM,CAAjB,CACAvL,EAAA,CAAQuL,CAZuC,CAH/C,CAiBF,MAAOtI,CAAP,CAAU,CAAEiQ,CAAA,CAAkBjQ,CAAlB,CAAF,CApBwB,CAuBxC,MAAOjD,EA1B0B,CAsCnCyxB,QAASA,EAAuB,CAAC1sB,CAAD,CAAO,CACrC,GAAIslB,CAAAtwB,eAAA,CAA6BgL,CAA7B,CAAJ,CACE,IADsC,IAClB+lB,EAAalJ,CAAA5a,IAAA,CAAcjC,CAAd,CAj2D1B8lB,WAi2D0B,CADK,CAElCvwB,EAAI,CAF8B,CAE3BY,EAAK4vB,CAAAzxB,OADhB,CACmCiB,CADnC,CACuCY,CADvC,CAC2CZ,CAAA,EAD3C,CAGE,GADAiR,CACIotB,CADQ7N,CAAA,CAAWxwB,CAAX,CACRq+B,CAAAptB,CAAAotB,aAAJ,CACE,MAAO,CAAA,CAIb,OAAO,CAAA,CAV8B,CAqBvCd,QAASA,EAAuB,CAACh9B,CAAD,CAAMS,CAAN,CAAW,CAAA,IACrCs9B,EAAUt9B,CAAAuxB,MAD2B;AAErCgM,EAAUh+B,CAAAgyB,MAIdnzB,EAAA,CAAQmB,CAAR,CAAa,QAAQ,CAACJ,CAAD,CAAQZ,CAAR,CAAa,CACX,GAArB,EAAIA,CAAA8G,OAAA,CAAW,CAAX,CAAJ,GACMrF,CAAA,CAAIzB,CAAJ,CAGJ,EAHgByB,CAAA,CAAIzB,CAAJ,CAGhB,GAH6BY,CAG7B,GAFEA,CAEF,GAFoB,OAAR,GAAAZ,CAAA,CAAkB,GAAlB,CAAwB,GAEpC,EAF2CyB,CAAA,CAAIzB,CAAJ,CAE3C,EAAAgB,CAAAi+B,KAAA,CAASj/B,CAAT,CAAcY,CAAd,CAAqB,CAAA,CAArB,CAA2Bm+B,CAAA,CAAQ/+B,CAAR,CAA3B,CAJF,CADgC,CAAlC,CAUAH,EAAA,CAAQ4B,CAAR,CAAa,QAAQ,CAACb,CAAD,CAAQZ,CAAR,CAAa,CAK3BgB,CAAAd,eAAA,CAAmBF,CAAnB,CAAL,EAAkD,GAAlD,GAAgCA,CAAA8G,OAAA,CAAW,CAAX,CAAhC,GACE9F,CAAA,CAAIhB,CAAJ,CAEA,CAFWY,CAEX,CAAY,OAAZ,GAAIZ,CAAJ,EAA+B,OAA/B,GAAuBA,CAAvB,GACEg/B,CAAA,CAAQh/B,CAAR,CADF,CACiB++B,CAAA,CAAQ/+B,CAAR,CADjB,CAHF,CALgC,CAAlC,CAhByC,CAgC3Ci+B,QAASA,GAAkB,CAAChN,CAAD,CAAaiL,CAAb,CAA2B3K,CAA3B,CACvB8D,CADuB,CACT+G,CADS,CACUjD,CADV,CACsBC,CADtB,CACmCtF,CADnC,CAC2D,CAAA,IAChFoL,EAAY,EADoE,CAEhFC,CAFgF,CAGhFC,CAHgF,CAIhFC,EAA4BnD,CAAA,CAAa,CAAb,CAJoD,CAKhFoD,EAAqBrO,CAAA5J,MAAA,EAL2D,CAMhFkY,EAAuB78B,EAAA,CAAQ48B,CAAR,CAA4B,CACjD3N,YAAa,IADoC,CAC9BI,WAAY,IADkB,CACZ1pB,QAAS,IADG,CACGoyB,oBAAqB6E,CADxB,CAA5B,CANyD,CAShF3N,EAAe1xB,CAAA,CAAWq/B,CAAA3N,YAAX,CAAD,CACR2N,CAAA3N,YAAA,CAA+BuK,CAA/B,CAA6C3K,CAA7C,CADQ,CAER+N,CAAA3N,YAX0E,CAYhFgM,EAAoB2B,CAAA3B,kBAExBzB,EAAA/yB,MAAA,EAEA4S,EAAA,CAAiB4V,CAAjB,CAAA6N,KAAA,CACQ,QAAQ,CAACC,CAAD,CAAU,CAAA,IAClB1G,CADkB,CACyBvD,CAE/CiK,EAAA,CAAUhC,EAAA,CAAoBgC,CAApB,CAEV,IAAIH,CAAAj3B,QAAJ,CAAgC,CAI5B8zB,CAAA;AApmNJve,EAAA9Z,KAAA,CAimNuB27B,CAjmNvB,CAimNE,CAGc/B,EAAA,CAAe1I,EAAA,CAAa2I,CAAb,CAAgC3e,CAAA,CAAKygB,CAAL,CAAhC,CAAf,CAHd,CACc,EAId1G,EAAA,CAAcoD,CAAA,CAAU,CAAV,CAEd,IAAwB,CAAxB,EAAIA,CAAA38B,OAAJ,EA58OY8d,CA48OZ,GAA6Byb,CAAAvvB,SAA7B,CACE,KAAMumB,GAAA,CAAe,OAAf,CAEFuP,CAAAp0B,KAFE,CAEuBymB,CAFvB,CAAN,CAKF+N,CAAA,CAAoB,CAAC1M,MAAO,EAAR,CACpB+J,GAAA,CAAY1H,CAAZ,CAA0B6G,CAA1B,CAAwCnD,CAAxC,CACA,KAAI8E,EAAqB1H,EAAA,CAAkB4C,CAAlB,CAA+B,EAA/B,CAAmC2G,CAAnC,CAErBp+B,EAAA,CAASg+B,CAAAnzB,MAAT,CAAJ,EAGE4xB,CAAA,CAAmBF,CAAnB,CAAuC,CAAA,CAAvC,CAEF5M,EAAA,CAAa4M,CAAA92B,OAAA,CAA0BkqB,CAA1B,CACb+M,EAAA,CAAwBzM,CAAxB,CAAgCmO,CAAhC,CAxB8B,CAAhC,IA0BE3G,EACA,CADcsG,CACd,CAAAnD,CAAA3yB,KAAA,CAAkBk2B,CAAlB,CAGFxO,EAAArlB,QAAA,CAAmB2zB,CAAnB,CAEAJ,EAAA,CAA0B/I,EAAA,CAAsBnF,CAAtB,CAAkC8H,CAAlC,CAA+CxH,CAA/C,CACtB6K,CADsB,CACHF,CADG,CACWoD,CADX,CAC+BnG,CAD/B,CAC2CC,CAD3C,CAEtBtF,CAFsB,CAG1Bj0B,EAAA,CAAQw1B,CAAR,CAAsB,QAAQ,CAACtxB,CAAD,CAAOtD,CAAP,CAAU,CAClCsD,CAAJ,EAAYg1B,CAAZ,GACE1D,CAAA,CAAa50B,CAAb,CADF,CACoBy7B,CAAA,CAAa,CAAb,CADpB,CADsC,CAAxC,CAOA,KAFAkD,CAEA,CAF2BjL,CAAA,CAAa+H,CAAA,CAAa,CAAb,CAAA3d,WAAb,CAAyC6d,CAAzC,CAE3B,CAAO8C,CAAA1/B,OAAP,CAAA,CAAyB,CACnB2M,CAAAA,CAAQ+yB,CAAA7X,MAAA,EACRsY,EAAAA,CAAyBT,CAAA7X,MAAA,EAFN,KAGnBuY,EAAkBV,CAAA7X,MAAA,EAHC,CAInBkP,EAAoB2I,CAAA7X,MAAA,EAJD,CAKnBsS,EAAWuC,CAAA,CAAa,CAAb,CAEf,IAAI2D,CAAA1zB,CAAA0zB,YAAJ,CAAA,CAEA,GAAIF,CAAJ,GAA+BN,CAA/B,CAA0D,CACxD,IAAIS,EAAaH,CAAAlM,UAEXK,EAAAgG,8BAAN,EACIwF,CAAAj3B,QADJ,GAGEsxB,CAHF,CAGata,EAAA,CAAY0Z,CAAZ,CAHb,CAKAgE,GAAA,CAAY6C,CAAZ,CAA6BrgC,CAAA,CAAOogC,CAAP,CAA7B,CAA6DhG,CAA7D,CAGAnG,EAAA,CAAaj0B,CAAA,CAAOo6B,CAAP,CAAb,CAA+BmG,CAA/B,CAXwD,CAcxDtK,CAAA,CADE2J,CAAArJ,wBAAJ;AAC2BC,EAAA,CAAwB5pB,CAAxB,CAA+BgzB,CAAApN,WAA/B,CAAmEwE,CAAnE,CAD3B,CAG2BA,CAE3B4I,EAAA,CAAwBC,CAAxB,CAAkDjzB,CAAlD,CAAyDwtB,CAAzD,CAAmEtE,CAAnE,CACEG,CADF,CApBA,CAPuB,CA8BzB0J,CAAA,CAAY,IA7EU,CAD1B,CAiFA,OAAOa,SAA0B,CAACC,CAAD,CAAoB7zB,CAApB,CAA2BpI,CAA3B,CAAiCmJ,CAAjC,CAA8CqpB,CAA9C,CAAiE,CAC5Ff,CAAAA,CAAyBe,CACzBpqB,EAAA0zB,YAAJ,GACIX,CAAJ,CACEA,CAAAh6B,KAAA,CAAeiH,CAAf,CACepI,CADf,CAEemJ,CAFf,CAGesoB,CAHf,CADF,EAMM2J,CAAArJ,wBAGJ,GAFEN,CAEF,CAF2BO,EAAA,CAAwB5pB,CAAxB,CAA+BgzB,CAAApN,WAA/B,CAAmEwE,CAAnE,CAE3B,EAAA4I,CAAA,CAAwBC,CAAxB,CAAkDjzB,CAAlD,CAAyDpI,CAAzD,CAA+DmJ,CAA/D,CAA4EsoB,CAA5E,CATF,CADA,CAFgG,CAjGd,CAsHtF2C,QAASA,EAAU,CAAC1lB,CAAD,CAAIyX,CAAJ,CAAO,CACxB,IAAI+V,EAAO/V,CAAAgH,SAAP+O,CAAoBxtB,CAAAye,SACxB,OAAa,EAAb,GAAI+O,CAAJ,CAAuBA,CAAvB,CACIxtB,CAAAvH,KAAJ,GAAegf,CAAAhf,KAAf,CAA+BuH,CAAAvH,KAAD,CAAUgf,CAAAhf,KAAV,CAAqB,EAArB,CAAyB,CAAvD,CACOuH,CAAA9N,MADP,CACiBulB,CAAAvlB,MAJO,CAO1B+3B,QAASA,EAAiB,CAACwD,CAAD,CAAOC,CAAP,CAA0BzuB,CAA1B,CAAqCnN,CAArC,CAA8C,CAEtE67B,QAASA,EAAuB,CAACC,CAAD,CAAa,CAC3C,MAAOA,EAAA,CACJ,YADI,CACWA,CADX,CACwB,GADxB,CAEL,EAHyC,CAM7C,GAAIF,CAAJ,CACE,KAAMpQ,GAAA,CAAe,UAAf,CACFoQ,CAAAj1B,KADE,CACsBk1B,CAAA,CAAwBD,CAAApvB,aAAxB,CADtB,CAEFW,CAAAxG,KAFE,CAEck1B,CAAA,CAAwB1uB,CAAAX,aAAxB,CAFd,CAE+DmvB,CAF/D,CAEqEh3B,EAAA,CAAY3E,CAAZ,CAFrE,CAAN,CAToE,CAgBxEyzB,QAASA,GAA2B,CAAC/G,CAAD,CAAaqP,CAAb,CAAmB,CACrD,IAAIC,EAAgB5mB,CAAA,CAAa2mB,CAAb,CAAmB,CAAA,CAAnB,CAChBC,EAAJ,EACEtP,CAAA/rB,KAAA,CAAgB,CACdgsB,SAAU,CADI,CAEd9kB,QAASo0B,QAAiC,CAACC,CAAD,CAAe,CACnDC,CAAAA;AAAqBD,CAAA99B,OAAA,EAAzB,KACIg+B,EAAmB,CAAEnhC,CAAAkhC,CAAAlhC,OAIrBmhC,EAAJ,EAAsBv0B,EAAAw0B,kBAAA,CAA0BF,CAA1B,CAEtB,OAAOG,SAA8B,CAAC10B,CAAD,CAAQpI,CAAR,CAAc,CACjD,IAAIpB,EAASoB,CAAApB,OAAA,EACRg+B,EAAL,EAAuBv0B,EAAAw0B,kBAAA,CAA0Bj+B,CAA1B,CACvByJ,GAAA00B,iBAAA,CAAyBn+B,CAAzB,CAAiC49B,CAAAQ,YAAjC,CACA50B,EAAAzI,OAAA,CAAa68B,CAAb,CAA4BS,QAAiC,CAACpgC,CAAD,CAAQ,CACnEmD,CAAA,CAAK,CAAL,CAAAkwB,UAAA,CAAoBrzB,CAD+C,CAArE,CAJiD,CARI,CAF3C,CAAhB,CAHmD,CA2BvDo0B,QAASA,GAAY,CAAC3uB,CAAD,CAAOqrB,CAAP,CAAiB,CACpCrrB,CAAA,CAAO7B,CAAA,CAAU6B,CAAV,EAAkB,MAAlB,CACP,QAAQA,CAAR,EACA,KAAK,KAAL,CACA,KAAK,MAAL,CACE,IAAIuY,EAAU5f,CAAA0I,SAAAoW,cAAA,CAA8B,KAA9B,CACdc,EAAAR,UAAA,CAAoB,GAApB,CAA0B/X,CAA1B,CAAiC,GAAjC,CAAuCqrB,CAAvC,CAAkD,IAAlD,CAAyDrrB,CAAzD,CAAgE,GAChE,OAAOuY,EAAAL,WAAA,CAAmB,CAAnB,CAAAA,WACT,SACE,MAAOmT,EAPT,CAFoC,CActCuP,QAASA,GAAiB,CAACl9B,CAAD,CAAOm9B,CAAP,CAA2B,CACnD,GAA0B,QAA1B,EAAIA,CAAJ,CACE,MAAO3lB,EAAA4lB,KAET,KAAIx1B,EAAMrH,EAAA,CAAUP,CAAV,CAEV,IAA0B,WAA1B,EAAIm9B,CAAJ,EACY,MADZ,EACKv1B,CADL,EAC4C,QAD5C,EACsBu1B,CADtB,EAEY,KAFZ;AAEKv1B,CAFL,GAE4C,KAF5C,EAEsBu1B,CAFtB,EAG4C,OAH5C,EAGsBA,CAHtB,EAIE,MAAO3lB,EAAA6lB,aAV0C,CAerDtJ,QAASA,GAA2B,CAAC/zB,CAAD,CAAOktB,CAAP,CAAmBrwB,CAAnB,CAA0BsK,CAA1B,CAAgCm2B,CAAhC,CAA8C,CAChF,IAAIC,EAAiBL,EAAA,CAAkBl9B,CAAlB,CAAwBmH,CAAxB,CACrBm2B,EAAA,CAAe1Q,CAAA,CAAqBzlB,CAArB,CAAf,EAA6Cm2B,CAE7C,KAAId,EAAgB5mB,CAAA,CAAa/Y,CAAb,CAAoB,CAAA,CAApB,CAA0B0gC,CAA1B,CAA0CD,CAA1C,CAGpB,IAAKd,CAAL,CAAA,CAGA,GAAa,UAAb,GAAIr1B,CAAJ,EAA+C,QAA/C,GAA2B5G,EAAA,CAAUP,CAAV,CAA3B,CACE,KAAMgsB,GAAA,CAAe,UAAf,CAEF7mB,EAAA,CAAYnF,CAAZ,CAFE,CAAN,CAKFktB,CAAA/rB,KAAA,CAAgB,CACdgsB,SAAU,GADI,CAEd9kB,QAASA,QAAQ,EAAG,CAChB,MAAO,CACLktB,IAAKiI,QAAiC,CAACp1B,CAAD,CAAQ5H,CAAR,CAAiBN,CAAjB,CAAuB,CACvDu9B,CAAAA,CAAev9B,CAAAu9B,YAAfA,GAAoCv9B,CAAAu9B,YAApCA,CAAuD36B,CAAA,EAAvD26B,CAEJ,IAAI5Q,CAAA9sB,KAAA,CAA+BoH,CAA/B,CAAJ,CACE,KAAM6kB,GAAA,CAAe,aAAf,CAAN,CAMF,IAAI0R,EAAWx9B,CAAA,CAAKiH,CAAL,CACXu2B,EAAJ,GAAiB7gC,CAAjB,GAIE2/B,CACA,CADgBkB,CAChB,EAD4B9nB,CAAA,CAAa8nB,CAAb,CAAuB,CAAA,CAAvB,CAA6BH,CAA7B,CAA6CD,CAA7C,CAC5B,CAAAzgC,CAAA,CAAQ6gC,CALV,CAUKlB,EAAL,GAKAt8B,CAAA,CAAKiH,CAAL,CAGA,CAHaq1B,CAAA,CAAcp0B,CAAd,CAGb,CADAu1B,CAACF,CAAA,CAAYt2B,CAAZ,CAADw2B,GAAuBF,CAAA,CAAYt2B,CAAZ,CAAvBw2B,CAA2C,EAA3CA,UACA,CAD0D,CAAA,CAC1D,CAAAh+B,CAACO,CAAAu9B,YAAD99B,EAAqBO,CAAAu9B,YAAA,CAAiBt2B,CAAjB,CAAAy2B,QAArBj+B,EAAuDyI,CAAvDzI,QAAA,CACS68B,CADT,CACwBS,QAAiC,CAACS,CAAD,CAAWG,CAAX,CAAqB,CAO7D,OAAb,GAAI12B,CAAJ,EAAwBu2B,CAAxB,EAAoCG,CAApC,CACE39B,CAAA49B,aAAA,CAAkBJ,CAAlB;AAA4BG,CAA5B,CADF,CAGE39B,CAAAg7B,KAAA,CAAU/zB,CAAV,CAAgBu2B,CAAhB,CAVwE,CAD9E,CARA,CArB2D,CADxD,CADS,CAFN,CAAhB,CATA,CAPgF,CAgFlF1E,QAASA,GAAW,CAAC1H,CAAD,CAAeyM,CAAf,CAAiCC,CAAjC,CAA0C,CAAA,IACxDC,EAAuBF,CAAA,CAAiB,CAAjB,CADiC,CAExDG,EAAcH,CAAAtiC,OAF0C,CAGxDmD,EAASq/B,CAAAnjB,WAH+C,CAIxDpe,CAJwD,CAIrDY,CAEP,IAAIg0B,CAAJ,CACE,IAAK50B,CAAO,CAAH,CAAG,CAAAY,CAAA,CAAKg0B,CAAA71B,OAAjB,CAAsCiB,CAAtC,CAA0CY,CAA1C,CAA8CZ,CAAA,EAA9C,CACE,GAAI40B,CAAA,CAAa50B,CAAb,CAAJ,EAAuBuhC,CAAvB,CAA6C,CAC3C3M,CAAA,CAAa50B,CAAA,EAAb,CAAA,CAAoBshC,CACJG,EAAAA,CAAK3gC,CAAL2gC,CAASD,CAATC,CAAuB,CAAvC,KAAS,IACA1gC,EAAK6zB,CAAA71B,OADd,CAEK+B,CAFL,CAESC,CAFT,CAEaD,CAAA,EAAA,CAAK2gC,CAAA,EAFlB,CAGMA,CAAJ,CAAS1gC,CAAT,CACE6zB,CAAA,CAAa9zB,CAAb,CADF,CACoB8zB,CAAA,CAAa6M,CAAb,CADpB,CAGE,OAAO7M,CAAA,CAAa9zB,CAAb,CAGX8zB,EAAA71B,OAAA,EAAuByiC,CAAvB,CAAqC,CAKjC5M,EAAAt1B,QAAJ,GAA6BiiC,CAA7B,GACE3M,CAAAt1B,QADF,CACyBgiC,CADzB,CAGA,MAnB2C,CAwB7Cp/B,CAAJ,EACEA,CAAAmc,aAAA,CAAoBijB,CAApB,CAA6BC,CAA7B,CAOEtkB,EAAAA,CAAW1e,CAAA0I,SAAAiW,uBAAA,EACf,KAAKld,CAAL,CAAS,CAAT,CAAYA,CAAZ,CAAgBwhC,CAAhB,CAA6BxhC,CAAA,EAA7B,CACEid,CAAAG,YAAA,CAAqBikB,CAAA,CAAiBrhC,CAAjB,CAArB,CAGElB,EAAA4iC,QAAA,CAAeH,CAAf,CAAJ,GAIEziC,CAAA+M,KAAA,CAAYy1B,CAAZ,CAAqBxiC,CAAA+M,KAAA,CAAY01B,CAAZ,CAArB,CAGA,CAAAziC,CAAA,CAAOyiC,CAAP,CAAA/U,IAAA,CAAiC,UAAjC,CAPF,CAYA1tB,EAAA8O,UAAA,CAAiBqP,CAAA+B,iBAAA,CAA0B,GAA1B,CAAjB,CAGA,KAAKhf,CAAL,CAAS,CAAT,CAAYA,CAAZ,CAAgBwhC,CAAhB,CAA6BxhC,CAAA,EAA7B,CACE,OAAOqhC,CAAA,CAAiBrhC,CAAjB,CAETqhC,EAAA,CAAiB,CAAjB,CAAA,CAAsBC,CACtBD,EAAAtiC,OAAA,CAA0B,CAhEkC,CAoE9Dk6B,QAASA,GAAkB,CAACtyB,CAAD;AAAKg7B,CAAL,CAAiB,CAC1C,MAAOjgC,EAAA,CAAO,QAAQ,EAAG,CAAE,MAAOiF,EAAAG,MAAA,CAAS,IAAT,CAAelF,SAAf,CAAT,CAAlB,CAAyD+E,CAAzD,CAA6Dg7B,CAA7D,CADmC,CAK5CxG,QAASA,GAAY,CAACnD,CAAD,CAAStsB,CAAT,CAAgBqlB,CAAhB,CAA0ByE,CAA1B,CAAiCS,CAAjC,CAA8C/C,CAA9C,CAA4D,CAC/E,GAAI,CACF8E,CAAA,CAAOtsB,CAAP,CAAcqlB,CAAd,CAAwByE,CAAxB,CAA+BS,CAA/B,CAA4C/C,CAA5C,CADE,CAEF,MAAOvqB,CAAP,CAAU,CACViQ,CAAA,CAAkBjQ,CAAlB,CAAqBF,EAAA,CAAYsoB,CAAZ,CAArB,CADU,CAHmE,CAWjFoJ,QAASA,GAA2B,CAACzuB,CAAD,CAAQ8pB,CAAR,CAAejxB,CAAf,CAA4B2qB,CAA5B,CAAsCje,CAAtC,CAAiD,CAuHnF2wB,QAASA,EAAa,CAACriC,CAAD,CAAMsiC,CAAN,CAAoBC,CAApB,CAAmC,CACnDtiC,CAAA,CAAW+E,CAAAs2B,WAAX,CAAJ,EAA0CgH,CAA1C,GAA2DC,CAA3D,GAEO3P,CAcL,GAbEzmB,CAAAq2B,aAAA,CAAmB7P,CAAnB,CACA,CAAAC,CAAA,CAAiB,EAYnB,EATK6P,CASL,GAREA,CACA,CADU,EACV,CAAA7P,CAAA1tB,KAAA,CAAoBw9B,CAApB,CAOF,EAJID,CAAA,CAAQziC,CAAR,CAIJ,GAHEuiC,CAGF,CAHkBE,CAAA,CAAQziC,CAAR,CAAAuiC,cAGlB,EAAAE,CAAA,CAAQziC,CAAR,CAAA,CAAe,IAAI2iC,EAAJ,CAAiBJ,CAAjB,CAAgCD,CAAhC,CAhBjB,CADuD,CAqBzDI,QAASA,EAAoB,EAAG,CAC9B19B,CAAAs2B,WAAA,CAAuBmH,CAAvB,CAEAA,EAAA,CAAUh9B,IAAAA,EAHoB,CA3IhC,IAAIm9B,EAAwB,EAA5B,CACIrH,EAAiB,EADrB,CAEIkH,CACJ5iC,EAAA,CAAQ8vB,CAAR,CAAkBkT,QAA0B,CAACjT,CAAD,CAAaC,CAAb,CAAwB,CAAA,IAC9DM,EAAWP,CAAAO,SADmD,CAElED,EAAWN,CAAAM,SAFuD,CAIlE4S,CAJkE,CAKlEC,CALkE,CAKvDC,CALuD,CAK5CC,CAEtB,QAJOrT,CAAAI,KAIP,EAEE,KAAK,GAAL,CACOE,CAAL,EAAkBhwB,EAAAC,KAAA,CAAoB81B,CAApB,CAA2B9F,CAA3B,CAAlB,GACEnrB,CAAA,CAAY6qB,CAAZ,CADF,CAC2BoG,CAAA,CAAM9F,CAAN,CAD3B,CAC6C,IAAK,EADlD,CAGA8F,EAAAiN,SAAA,CAAe/S,CAAf,CAAyB,QAAQ,CAACvvB,CAAD,CAAQ,CACvC,GAAItB,CAAA,CAASsB,CAAT,CAAJ,EAAuB+C,EAAA,CAAU/C,CAAV,CAAvB,CAEEyhC,CAAA,CAAcxS,CAAd,CAAyBjvB,CAAzB,CADeoE,CAAA48B,CAAY/R,CAAZ+R,CACf,CACA;AAAA58B,CAAA,CAAY6qB,CAAZ,CAAA,CAAyBjvB,CAJY,CAAzC,CAOAq1B,EAAAuL,YAAA,CAAkBrR,CAAlB,CAAAwR,QAAA,CAAsCx1B,CACtC22B,EAAA,CAAY7M,CAAA,CAAM9F,CAAN,CACR7wB,EAAA,CAASwjC,CAAT,CAAJ,CAGE99B,CAAA,CAAY6qB,CAAZ,CAHF,CAG2BlW,CAAA,CAAampB,CAAb,CAAA,CAAwB32B,CAAxB,CAH3B,CAIWxI,EAAA,CAAUm/B,CAAV,CAJX,GAOE99B,CAAA,CAAY6qB,CAAZ,CAPF,CAO2BiT,CAP3B,CASAvH,EAAA,CAAe1L,CAAf,CAAA,CAA4B,IAAI8S,EAAJ,CAAiBQ,EAAjB,CAAuCn+B,CAAA,CAAY6qB,CAAZ,CAAvC,CAC5B,MAEF,MAAK,GAAL,CACE,GAAK,CAAA3vB,EAAAC,KAAA,CAAoB81B,CAApB,CAA2B9F,CAA3B,CAAL,CAA2C,CACzC,GAAID,CAAJ,CAAc,KACd+F,EAAA,CAAM9F,CAAN,CAAA,CAAkB,IAAK,EAFkB,CAI3C,GAAID,CAAJ,EAAiB,CAAA+F,CAAA,CAAM9F,CAAN,CAAjB,CAAkC,KAElC4S,EAAA,CAAYhoB,CAAA,CAAOkb,CAAA,CAAM9F,CAAN,CAAP,CAEV8S,EAAA,CADEF,CAAAK,QAAJ,CACY98B,EADZ,CAGY28B,QAAsB,CAACxwB,CAAD,CAAIyX,CAAJ,CAAO,CAAE,MAAOzX,EAAP,GAAayX,CAAb,EAAmBzX,CAAnB,GAAyBA,CAAzB,EAA8ByX,CAA9B,GAAoCA,CAAtC,CAEzC8Y,EAAA,CAAYD,CAAAM,OAAZ,EAAgC,QAAQ,EAAG,CAEzCP,CAAA,CAAY99B,CAAA,CAAY6qB,CAAZ,CAAZ,CAAqCkT,CAAA,CAAU52B,CAAV,CACrC,MAAM4jB,GAAA,CAAe,WAAf,CAEFkG,CAAA,CAAM9F,CAAN,CAFE,CAEeA,CAFf,CAEyBze,CAAAxG,KAFzB,CAAN,CAHyC,CAO3C43B,EAAA,CAAY99B,CAAA,CAAY6qB,CAAZ,CAAZ,CAAqCkT,CAAA,CAAU52B,CAAV,CACjCm3B,EAAAA,CAAmBA,QAAyB,CAACC,CAAD,CAAc,CACvDN,CAAA,CAAQM,CAAR,CAAqBv+B,CAAA,CAAY6qB,CAAZ,CAArB,CAAL,GAEOoT,CAAA,CAAQM,CAAR,CAAqBT,CAArB,CAAL,CAKEE,CAAA,CAAU72B,CAAV,CAAiBo3B,CAAjB,CAA+Bv+B,CAAA,CAAY6qB,CAAZ,CAA/B,CALF,CAEE7qB,CAAA,CAAY6qB,CAAZ,CAFF,CAE2B0T,CAJ7B,CAUA,OAAOT,EAAP,CAAmBS,CAXyC,CAa9DD,EAAAE,UAAA,CAA6B,CAAA,CAE3BC,EAAA,CADE7T,CAAAK,WAAJ,CACgB9jB,CAAAu3B,iBAAA,CAAuBzN,CAAA,CAAM9F,CAAN,CAAvB,CAAwCmT,CAAxC,CADhB,CAGgBn3B,CAAAzI,OAAA,CAAaqX,CAAA,CAAOkb,CAAA,CAAM9F,CAAN,CAAP,CAAwBmT,CAAxB,CAAb,CAAwD,IAAxD,CAA8DP,CAAAK,QAA9D,CAEhBR,EAAA19B,KAAA,CAA2Bu+B,CAA3B,CACA,MAEF,MAAK,GAAL,CACE,GAAK,CAAAvjC,EAAAC,KAAA,CAAoB81B,CAApB;AAA2B9F,CAA3B,CAAL,CAA2C,CACzC,GAAID,CAAJ,CAAc,KACd+F,EAAA,CAAM9F,CAAN,CAAA,CAAkB,IAAK,EAFkB,CAI3C,GAAID,CAAJ,EAAiB,CAAA+F,CAAA,CAAM9F,CAAN,CAAjB,CAAkC,KAElC4S,EAAA,CAAYhoB,CAAA,CAAOkb,CAAA,CAAM9F,CAAN,CAAP,CAEZ,KAAIwT,EAAe3+B,CAAA,CAAY6qB,CAAZ,CAAf8T,CAAwCZ,CAAA,CAAU52B,CAAV,CAC5CovB,EAAA,CAAe1L,CAAf,CAAA,CAA4B,IAAI8S,EAAJ,CAAiBQ,EAAjB,CAAuCn+B,CAAA,CAAY6qB,CAAZ,CAAvC,CAE5B4T,EAAA,CAAct3B,CAAAzI,OAAA,CAAaq/B,CAAb,CAAwBa,QAA+B,CAACnC,CAAD,CAAWG,CAAX,CAAqB,CACxF,GAAIA,CAAJ,GAAiBH,CAAjB,CAA2B,CACzB,GAAIG,CAAJ,GAAiB+B,CAAjB,CAA+B,MAC/B/B,EAAA,CAAW+B,CAFc,CAI3BtB,CAAA,CAAcxS,CAAd,CAAyB4R,CAAzB,CAAmCG,CAAnC,CACA58B,EAAA,CAAY6qB,CAAZ,CAAA,CAAyB4R,CAN+D,CAA5E,CAOXsB,CAAAK,QAPW,CASdR,EAAA19B,KAAA,CAA2Bu+B,CAA3B,CACA,MAEF,MAAK,GAAL,CAEEV,CAAA,CAAY9M,CAAA/1B,eAAA,CAAqBiwB,CAArB,CAAA,CAAiCpV,CAAA,CAAOkb,CAAA,CAAM9F,CAAN,CAAP,CAAjC,CAA2DrtB,CAGvE,IAAIigC,CAAJ,GAAkBjgC,CAAlB,EAA0BotB,CAA1B,CAAoC,KAEpClrB,EAAA,CAAY6qB,CAAZ,CAAA,CAAyB,QAAQ,CAACtI,CAAD,CAAS,CACxC,MAAOwb,EAAA,CAAU52B,CAAV,CAAiBob,CAAjB,CADiC,CArG9C,CAPkE,CAApE,CA8IA,OAAO,CACLgU,eAAgBA,CADX,CAELV,cAAe+H,CAAApjC,OAAfq7B,EAA+CA,QAAsB,EAAG,CACtE,IADsE,IAC7Dp6B,EAAI,CADyD,CACtDY,EAAKuhC,CAAApjC,OAArB,CAAmDiB,CAAnD,CAAuDY,CAAvD,CAA2D,EAAEZ,CAA7D,CACEmiC,CAAA,CAAsBniC,CAAtB,CAAA,EAFoE,CAFnE,CAlJ4E,CA90DrF,IAAIojC,GAAmB,KAAvB,CACI1Q,GAAoBn0B,CAAA0I,SAAAoW,cAAA,CAA8B,KAA9B,CADxB,CAKI2U,GAAeD,CALnB,CAQII,CAgDJE,GAAA3N,UAAA,CAAuB,CAgBrB2e,WAAY5M,EAhBS,CA8BrB6M,UAAWA,QAAQ,CAACC,CAAD,CAAW,CACxBA,CAAJ,EAAkC,CAAlC,CAAgBA,CAAAxkC,OAAhB;AACEyY,CAAAsM,SAAA,CAAkB,IAAA0O,UAAlB,CAAkC+Q,CAAlC,CAF0B,CA9BT,CA+CrBC,aAAcA,QAAQ,CAACD,CAAD,CAAW,CAC3BA,CAAJ,EAAkC,CAAlC,CAAgBA,CAAAxkC,OAAhB,EACEyY,CAAAuM,YAAA,CAAqB,IAAAyO,UAArB,CAAqC+Q,CAArC,CAF6B,CA/CZ,CAiErBnC,aAAcA,QAAQ,CAACqC,CAAD,CAAapE,CAAb,CAAyB,CAC7C,IAAIqE,EAAQC,EAAA,CAAgBF,CAAhB,CAA4BpE,CAA5B,CACRqE,EAAJ,EAAaA,CAAA3kC,OAAb,EACEyY,CAAAsM,SAAA,CAAkB,IAAA0O,UAAlB,CAAkCkR,CAAlC,CAIF,EADIE,CACJ,CADeD,EAAA,CAAgBtE,CAAhB,CAA4BoE,CAA5B,CACf,GAAgBG,CAAA7kC,OAAhB,EACEyY,CAAAuM,YAAA,CAAqB,IAAAyO,UAArB,CAAqCoR,CAArC,CAR2C,CAjE1B,CAsFrBpF,KAAMA,QAAQ,CAACj/B,CAAD,CAAMY,CAAN,CAAa0jC,CAAb,CAAwBnU,CAAxB,CAAkC,CAAA,IAM1CoU,EAAahiB,EAAA,CADN,IAAA0Q,UAAAlvB,CAAe,CAAfA,CACM,CAAyB/D,CAAzB,CAN6B,CAO1CwkC,EA31JHC,EAAA,CA21JmCzkC,CA31JnC,CAo1J6C,CAQ1C0kC,EAAW1kC,CAGXukC,EAAJ,EACE,IAAAtR,UAAAjvB,KAAA,CAAoBhE,CAApB,CAAyBY,CAAzB,CACA,CAAAuvB,CAAA,CAAWoU,CAFb,EAGWC,CAHX,GAIE,IAAA,CAAKA,CAAL,CACA,CADmB5jC,CACnB,CAAA8jC,CAAA,CAAWF,CALb,CAQA,KAAA,CAAKxkC,CAAL,CAAA,CAAYY,CAGRuvB,EAAJ,CACE,IAAA6C,MAAA,CAAWhzB,CAAX,CADF,CACoBmwB,CADpB,EAGEA,CAHF,CAGa,IAAA6C,MAAA,CAAWhzB,CAAX,CAHb,IAKI,IAAAgzB,MAAA,CAAWhzB,CAAX,CALJ,CAKsBmwB,CALtB,CAKiC/iB,EAAA,CAAWpN,CAAX,CAAgB,GAAhB,CALjC,CASA+B,EAAA,CAAWuC,EAAA,CAAU,IAAA2uB,UAAV,CAEX,IAAkB,GAAlB,GAAKlxB,CAAL,GAAkC,MAAlC,GAA0B/B,CAA1B,EAAoD,WAApD,GAA4CA,CAA5C,GACkB,KADlB;AACK+B,CADL,EACmC,KADnC,GAC2B/B,CAD3B,CAGE,IAAA,CAAKA,CAAL,CAAA,CAAYY,CAAZ,CAAoB0R,CAAA,CAAc1R,CAAd,CAA6B,KAA7B,GAAqBZ,CAArB,CAHtB,KAIO,IAAiB,KAAjB,GAAI+B,CAAJ,EAAkC,QAAlC,GAA0B/B,CAA1B,EAA8CsD,CAAA,CAAU1C,CAAV,CAA9C,CAAgE,CAerE,IAbIulB,IAAAA,EAAS,EAATA,CAGAwe,EAAgB3lB,CAAA,CAAKpe,CAAL,CAHhBulB,CAKAye,EAAa,qCALbze,CAMAvP,EAAU,IAAA9S,KAAA,CAAU6gC,CAAV,CAAA,CAA2BC,CAA3B,CAAwC,KANlDze,CASA0e,EAAUF,CAAAtgC,MAAA,CAAoBuS,CAApB,CATVuP,CAYA2e,EAAoB5G,IAAA6G,MAAA,CAAWF,CAAArlC,OAAX,CAA4B,CAA5B,CAZpB2mB,CAaK1lB,EAAI,CAAb,CAAgBA,CAAhB,CAAoBqkC,CAApB,CAAuCrkC,CAAA,EAAvC,CACE,IAAIukC,EAAe,CAAfA,CAAWvkC,CAAf,CAEA0lB,EAAAA,CAAAA,CAAU7T,CAAA,CAAc0M,CAAA,CAAK6lB,CAAA,CAAQG,CAAR,CAAL,CAAd,CAAuC,CAAA,CAAvC,CAFV,CAIA7e,EAAAA,CAAAA,EAAW,GAAXA,CAAiBnH,CAAA,CAAK6lB,CAAA,CAAQG,CAAR,CAAmB,CAAnB,CAAL,CAAjB7e,CAIE8e,EAAAA,CAAYjmB,CAAA,CAAK6lB,CAAA,CAAY,CAAZ,CAAQpkC,CAAR,CAAL,CAAA4D,MAAA,CAA2B,IAA3B,CAGhB8hB,EAAA,EAAU7T,CAAA,CAAc0M,CAAA,CAAKimB,CAAA,CAAU,CAAV,CAAL,CAAd,CAAkC,CAAA,CAAlC,CAGe,EAAzB,GAAIA,CAAAzlC,OAAJ,GACE2mB,CADF,EACa,GADb,CACmBnH,CAAA,CAAKimB,CAAA,CAAU,CAAV,CAAL,CADnB,CAGA,KAAA,CAAKjlC,CAAL,CAAA,CAAYY,CAAZ,CAAoBulB,CAjCiD,CAoCrD,CAAA,CAAlB,GAAIme,CAAJ,GACgB,IAAd,GAAI1jC,CAAJ,EAAsByC,CAAA,CAAYzC,CAAZ,CAAtB,CACE,IAAAqyB,UAAAiS,WAAA,CAA0B/U,CAA1B,CADF,CAGM0T,EAAA//B,KAAA,CAAsBqsB,CAAtB,CAAJ,CACE,IAAA8C,UAAAhvB,KAAA,CAAoBksB,CAApB,CAA8BvvB,CAA9B,CADF,CAGEsyB,CAAA,CAAe,IAAAD,UAAA,CAAe,CAAf,CAAf,CAAkC9C,CAAlC,CAA4CvvB,CAA5C,CAPN,CAcA,EADI4gC,CACJ,CADkB,IAAAA,YAClB,GAAe3hC,CAAA,CAAQ2hC,CAAA,CAAYkD,CAAZ,CAAR,CAA+B,QAAQ,CAACt9B,CAAD,CAAK,CACzD,GAAI,CACFA,CAAA,CAAGxG,CAAH,CADE,CAEF,MAAOwI,CAAP,CAAU,CACViQ,CAAA,CAAkBjQ,CAAlB,CADU,CAH6C,CAA5C,CAvF+B,CAtF3B;AA0MrB85B,SAAUA,QAAQ,CAACljC,CAAD,CAAMoH,CAAN,CAAU,CAAA,IACtB6uB,EAAQ,IADc,CAEtBuL,EAAevL,CAAAuL,YAAfA,GAAqCvL,CAAAuL,YAArCA,CAAyD36B,CAAA,EAAzD26B,CAFsB,CAGtB2D,EAAa3D,CAAA,CAAYxhC,CAAZ,CAAbmlC,GAAkC3D,CAAA,CAAYxhC,CAAZ,CAAlCmlC,CAAqD,EAArDA,CAEJA,EAAAjgC,KAAA,CAAekC,CAAf,CACA6T,EAAAxX,WAAA,CAAsB,QAAQ,EAAG,CAC1B0hC,CAAAzD,QAAL,EAA0B,CAAAzL,CAAA/1B,eAAA,CAAqBF,CAArB,CAA1B,EAAwDqD,CAAA,CAAY4yB,CAAA,CAAMj2B,CAAN,CAAZ,CAAxD,EAEEoH,CAAA,CAAG6uB,CAAA,CAAMj2B,CAAN,CAAH,CAH6B,CAAjC,CAOA,OAAO,SAAQ,EAAG,CAChByE,EAAA,CAAY0gC,CAAZ,CAAuB/9B,CAAvB,CADgB,CAbQ,CA1MP,CA1DkD,KA8SrEg+B,GAAczrB,CAAAyrB,YAAA,EA9SuD,CA+SrEC,GAAY1rB,CAAA0rB,UAAA,EA/SyD,CAgTrE5H,GAAsC,IAAhB,EAAC2H,EAAD,EAAsC,IAAtC,EAAwBC,EAAxB,CAChBtiC,EADgB,CAEhB06B,QAA4B,CAAC/L,CAAD,CAAW,CACvC,MAAOA,EAAArpB,QAAA,CAAiB,OAAjB,CAA0B+8B,EAA1B,CAAA/8B,QAAA,CAA+C,KAA/C,CAAsDg9B,EAAtD,CADgC,CAlTwB,CAqTrE7N,GAAkB,cArTmD,CAsTrEG,GAAuB,aAE3BvrB,GAAA00B,iBAAA,CAA2Bh1B,CAAA,CAAmBg1B,QAAyB,CAACtP,CAAD,CAAW8T,CAAX,CAAoB,CACzF,IAAI3V,EAAW6B,CAAAllB,KAAA,CAAc,UAAd,CAAXqjB,EAAwC,EAExCtwB,EAAA,CAAQimC,CAAR,CAAJ,CACE3V,CADF,CACaA,CAAA5oB,OAAA,CAAgBu+B,CAAhB,CADb,CAGE3V,CAAAzqB,KAAA,CAAcogC,CAAd,CAGF9T,EAAAllB,KAAA,CAAc,UAAd,CAA0BqjB,CAA1B,CATyF,CAAhE,CAUvB7sB,CAEJsJ,GAAAw0B,kBAAA;AAA4B90B,CAAA,CAAmB80B,QAA0B,CAACpP,CAAD,CAAW,CAClFgC,CAAA,CAAahC,CAAb,CAAuB,YAAvB,CADkF,CAAxD,CAExB1uB,CAEJsJ,GAAA+oB,eAAA,CAAyBrpB,CAAA,CAAmBqpB,QAAuB,CAAC3D,CAAD,CAAWrlB,CAAX,CAAkBo5B,CAAlB,CAA4BC,CAA5B,CAAwC,CAEzGhU,CAAAllB,KAAA,CADei5B,CAAAlH,CAAYmH,CAAA,CAAa,yBAAb,CAAyC,eAArDnH,CAAwE,QACvF,CAAwBlyB,CAAxB,CAFyG,CAAlF,CAGrBrJ,CAEJsJ,GAAAgoB,gBAAA,CAA0BtoB,CAAA,CAAmBsoB,QAAwB,CAAC5C,CAAD,CAAW+T,CAAX,CAAqB,CACxF/R,CAAA,CAAahC,CAAb,CAAuB+T,CAAA,CAAW,kBAAX,CAAgC,UAAvD,CADwF,CAAhE,CAEtBziC,CAEJsJ,GAAA0wB,gBAAA,CAA0B2I,QAAQ,CAACjW,CAAD,CAAgBkW,CAAhB,CAAyB,CACzD,IAAIjG,EAAU,EACV3zB,EAAJ,GACE2zB,CACA,CADU,GACV,EADiBjQ,CACjB,EADkC,EAClC,EADwC,IACxC,CAAIkW,CAAJ,GAAajG,CAAb,EAAwBiG,CAAxB,CAAkC,GAAlC,CAFF,CAIA,OAAO1mC,EAAA0I,SAAAi+B,cAAA,CAA8BlG,CAA9B,CANkD,CAS3D,OAAOrzB,GA1VkE,CAJ/D,CA5a6C,CA85E3Du2B,QAASA,GAAY,CAACiD,CAAD,CAAWC,CAAX,CAAoB,CACvC,IAAAtD,cAAA,CAAqBqD,CACrB,KAAAtD,aAAA,CAAoBuD,CAFmB,CAYzC3O,QAASA,GAAkB,CAAChsB,CAAD,CAAO,CAChC,MAAO6R,GAAA,CAAU7R,CAAA7C,QAAA,CAAaovB,EAAb,CAA4B,EAA5B,CAAV,CADyB,CAgElC2M,QAASA,GAAe,CAAC0B,CAAD,CAAOC,CAAP,CAAa,CAAA,IAC/BC,EAAS,EADsB,CAE/BC,EAAUH,CAAAzhC,MAAA,CAAW,KAAX,CAFqB,CAG/B6hC,EAAUH,CAAA1hC,MAAA,CAAW,KAAX,CAHqB;AAM1B5D,EAAI,CADb,EAAA,CACA,IAAA,CAAgBA,CAAhB,CAAoBwlC,CAAAzmC,OAApB,CAAoCiB,CAAA,EAApC,CAAyC,CAEvC,IADA,IAAI0lC,EAAQF,CAAA,CAAQxlC,CAAR,CAAZ,CACSc,EAAI,CAAb,CAAgBA,CAAhB,CAAoB2kC,CAAA1mC,OAApB,CAAoC+B,CAAA,EAApC,CACE,GAAI4kC,CAAJ,EAAaD,CAAA,CAAQ3kC,CAAR,CAAb,CAAyB,SAAS,CAEpCykC,EAAA,GAA2B,CAAhB,CAAAA,CAAAxmC,OAAA,CAAoB,GAApB,CAA0B,EAArC,EAA2C2mC,CALJ,CAOzC,MAAOH,EAb4B,CAgBrCtI,QAASA,GAAc,CAAC0I,CAAD,CAAU,CAC/BA,CAAA,CAAU7mC,CAAA,CAAO6mC,CAAP,CACV,KAAI3lC,EAAI2lC,CAAA5mC,OAER,IAAS,CAAT,EAAIiB,CAAJ,CACE,MAAO2lC,EAGT,KAAA,CAAO3lC,CAAA,EAAP,CAAA,CAthQsBw3B,CAwhQpB,GADWmO,CAAAriC,CAAQtD,CAARsD,CACPyF,SAAJ,EACE3E,EAAA1E,KAAA,CAAYimC,CAAZ,CAAqB3lC,CAArB,CAAwB,CAAxB,CAGJ,OAAO2lC,EAdwB,CAqBjCtU,QAASA,GAAuB,CAAC3jB,CAAD,CAAak4B,CAAb,CAAoB,CAClD,GAAIA,CAAJ,EAAa/mC,CAAA,CAAS+mC,CAAT,CAAb,CAA8B,MAAOA,EACrC,IAAI/mC,CAAA,CAAS6O,CAAT,CAAJ,CAA0B,CACxB,IAAIhI,EAAQmgC,EAAAtoB,KAAA,CAAe7P,CAAf,CACZ,IAAIhI,CAAJ,CAAW,MAAOA,EAAA,CAAM,CAAN,CAFM,CAFwB,CAmBpD+S,QAASA,GAAmB,EAAG,CAAA,IACzBwd,EAAc,EADW,CAEzB6P,EAAU,CAAA,CAOd,KAAAze,IAAA,CAAW0e,QAAQ,CAACt7B,CAAD,CAAO,CACxB,MAAOwrB,EAAAx2B,eAAA,CAA2BgL,CAA3B,CADiB,CAY1B,KAAAu7B,SAAA,CAAgBC,QAAQ,CAACx7B,CAAD,CAAOxF,CAAP,CAAoB,CAC1CyJ,EAAA,CAAwBjE,CAAxB,CAA8B,YAA9B,CACI5J,EAAA,CAAS4J,CAAT,CAAJ,CACE/I,CAAA,CAAOu0B,CAAP,CAAoBxrB,CAApB,CADF,CAGEwrB,CAAA,CAAYxrB,CAAZ,CAHF,CAGsBxF,CALoB,CAc5C,KAAAihC,aAAA,CAAoBC,QAAQ,EAAG,CAC7BL,CAAA,CAAU,CAAA,CADmB,CAK/B,KAAApiB,KAAA,CAAY,CAAC,WAAD;AAAc,SAAd,CAAyB,QAAQ,CAAC4D,CAAD,CAAY1L,CAAZ,CAAqB,CAyGhEwqB,QAASA,EAAa,CAACtf,CAAD,CAAS2T,CAAT,CAAqBhG,CAArB,CAA+BhqB,CAA/B,CAAqC,CACzD,GAAMqc,CAAAA,CAAN,EAAgB,CAAAjmB,CAAA,CAASimB,CAAAiX,OAAT,CAAhB,CACE,KAAMv/B,EAAA,CAAO,aAAP,CAAA,CAAsB,OAAtB,CAEJiM,CAFI,CAEEgwB,CAFF,CAAN,CAKF3T,CAAAiX,OAAA,CAActD,CAAd,CAAA,CAA4BhG,CAP6B,CA5E3D,MAAOjc,SAAoB,CAAC6tB,CAAD,CAAavf,CAAb,CAAqBwf,CAArB,CAA4BV,CAA5B,CAAmC,CAAA,IAQxDnR,CARwD,CAQvCxvB,CARuC,CAQ1Bw1B,CAClC6L,EAAA,CAAkB,CAAA,CAAlB,GAAQA,CACJV,EAAJ,EAAa/mC,CAAA,CAAS+mC,CAAT,CAAb,GACEnL,CADF,CACemL,CADf,CAIA,IAAI/mC,CAAA,CAASwnC,CAAT,CAAJ,CAA0B,CACxB3gC,CAAA,CAAQ2gC,CAAA3gC,MAAA,CAAiBmgC,EAAjB,CACR,IAAKngC,CAAAA,CAAL,CACE,KAAM6gC,GAAA,CAAkB,SAAlB,CAE8CF,CAF9C,CAAN,CAIFphC,CAAA,CAAcS,CAAA,CAAM,CAAN,CACd+0B,EADA,CACaA,CADb,EAC2B/0B,CAAA,CAAM,CAAN,CAC3B2gC,EAAA,CAAapQ,CAAAx2B,eAAA,CAA2BwF,CAA3B,CAAA,CACPgxB,CAAA,CAAYhxB,CAAZ,CADO,CAEP0J,EAAA,CAAOmY,CAAAiX,OAAP,CAAsB94B,CAAtB,CAAmC,CAAA,CAAnC,CAFO,GAGJ6gC,CAAA,CAAUn3B,EAAA,CAAOiN,CAAP,CAAgB3W,CAAhB,CAA6B,CAAA,CAA7B,CAAV,CAA+CD,IAAAA,EAH3C,CAKbwJ,GAAA,CAAY63B,CAAZ,CAAwBphC,CAAxB,CAAqC,CAAA,CAArC,CAdwB,CAiB1B,GAAIqhC,CAAJ,CAoBE,MATIE,EASiB,CATK9hB,CAAC9lB,CAAA,CAAQynC,CAAR,CAAA,CACzBA,CAAA,CAAWA,CAAAtnC,OAAX,CAA+B,CAA/B,CADyB,CACWsnC,CADZ3hB,WASL,CAPrB+P,CAOqB,CAPVz1B,MAAAoD,OAAA,CAAcokC,CAAd,EAAqC,IAArC,CAOU,CALjB/L,CAKiB,EAJnB2L,CAAA,CAActf,CAAd,CAAsB2T,CAAtB,CAAkChG,CAAlC,CAA4CxvB,CAA5C,EAA2DohC,CAAA57B,KAA3D,CAImB,CAAA/I,CAAA,CAAO+kC,QAAwB,EAAG,CACrD,IAAI/gB,EAAS4B,CAAA9b,OAAA,CAAiB66B,CAAjB,CAA6B5R,CAA7B,CAAuC3N,CAAvC,CAA+C7hB,CAA/C,CACTygB,EAAJ,GAAe+O,CAAf,GAA4B5zB,CAAA,CAAS6kB,CAAT,CAA5B,EAAgDlmB,CAAA,CAAWkmB,CAAX,CAAhD,IACE+O,CACA,CADW/O,CACX,CAAI+U,CAAJ,EAEE2L,CAAA,CAActf,CAAd,CAAsB2T,CAAtB,CAAkChG,CAAlC,CAA4CxvB,CAA5C,EAA2DohC,CAAA57B,KAA3D,CAJJ,CAOA,OAAOgqB,EAT8C,CAAlC;AAUlB,CACDA,SAAUA,CADT,CAEDgG,WAAYA,CAFX,CAVkB,CAgBvBhG,EAAA,CAAWnN,CAAAjC,YAAA,CAAsBghB,CAAtB,CAAkCvf,CAAlC,CAA0C7hB,CAA1C,CAEPw1B,EAAJ,EACE2L,CAAA,CAActf,CAAd,CAAsB2T,CAAtB,CAAkChG,CAAlC,CAA4CxvB,CAA5C,EAA2DohC,CAAA57B,KAA3D,CAGF,OAAOgqB,EAzEqD,CA7BE,CAAtD,CAxCiB,CAsL/B9b,QAASA,GAAiB,EAAG,CAC3B,IAAA+K,KAAA,CAAY,CAAC,SAAD,CAAY,QAAQ,CAACnlB,CAAD,CAAS,CACvC,MAAOO,EAAA,CAAOP,CAAA0I,SAAP,CADgC,CAA7B,CADe,CAiD7B4R,QAASA,GAAyB,EAAG,CACnC,IAAA6K,KAAA,CAAY,CAAC,MAAD,CAAS,QAAQ,CAACtJ,CAAD,CAAO,CAClC,MAAO,SAAQ,CAACssB,CAAD,CAAYC,CAAZ,CAAmB,CAChCvsB,CAAA+P,MAAArjB,MAAA,CAAiBsT,CAAjB,CAAuBxY,SAAvB,CADgC,CADA,CAAxB,CADuB,CA8CrCglC,QAASA,GAAc,CAACC,CAAD,CAAI,CACzB,MAAIhmC,EAAA,CAASgmC,CAAT,CAAJ,CACS5lC,EAAA,CAAO4lC,CAAP,CAAA,CAAYA,CAAAC,YAAA,EAAZ,CAA8B5/B,EAAA,CAAO2/B,CAAP,CADvC,CAGOA,CAJkB,CAQ3BptB,QAASA,GAA4B,EAAG,CAiBtC,IAAAiK,KAAA,CAAYC,QAAQ,EAAG,CACrB,MAAOojB,SAA0B,CAACC,CAAD,CAAS,CACxC,GAAKA,CAAAA,CAAL,CAAa,MAAO,EACpB,KAAIx9B,EAAQ,EACZ3J,GAAA,CAAcmnC,CAAd,CAAsB,QAAQ,CAAC7mC,CAAD,CAAQZ,CAAR,CAAa,CAC3B,IAAd,GAAIY,CAAJ,EAAsByC,CAAA,CAAYzC,CAAZ,CAAtB,GACIvB,CAAA,CAAQuB,CAAR,CAAJ,CACEf,CAAA,CAAQe,CAAR,CAAe,QAAQ,CAAC0mC,CAAD,CAAI,CACzBr9B,CAAA/E,KAAA,CAAWiF,EAAA,CAAenK,CAAf,CAAX,CAAkC,GAAlC,CAAwCmK,EAAA,CAAek9B,EAAA,CAAeC,CAAf,CAAf,CAAxC,CADyB,CAA3B,CADF,CAKEr9B,CAAA/E,KAAA,CAAWiF,EAAA,CAAenK,CAAf,CAAX,CAAiC,GAAjC,CAAuCmK,EAAA,CAAek9B,EAAA,CAAezmC,CAAf,CAAf,CAAvC,CANF,CADyC,CAA3C,CAWA;MAAOqJ,EAAAG,KAAA,CAAW,GAAX,CAdiC,CADrB,CAjBe,CAqCxCgQ,QAASA,GAAkC,EAAG,CA4C5C,IAAA+J,KAAA,CAAYC,QAAQ,EAAG,CACrB,MAAOsjB,SAAkC,CAACD,CAAD,CAAS,CAMhDE,QAASA,EAAS,CAACC,CAAD,CAAc38B,CAAd,CAAsB48B,CAAtB,CAAgC,CAC5B,IAApB,GAAID,CAAJ,EAA4BvkC,CAAA,CAAYukC,CAAZ,CAA5B,GACIvoC,CAAA,CAAQuoC,CAAR,CAAJ,CACE/nC,CAAA,CAAQ+nC,CAAR,CAAqB,QAAQ,CAAChnC,CAAD,CAAQ+D,CAAR,CAAe,CAC1CgjC,CAAA,CAAU/mC,CAAV,CAAiBqK,CAAjB,CAA0B,GAA1B,EAAiC3J,CAAA,CAASV,CAAT,CAAA,CAAkB+D,CAAlB,CAA0B,EAA3D,EAAiE,GAAjE,CAD0C,CAA5C,CADF,CAIWrD,CAAA,CAASsmC,CAAT,CAAJ,EAA8B,CAAAlmC,EAAA,CAAOkmC,CAAP,CAA9B,CACLtnC,EAAA,CAAcsnC,CAAd,CAA2B,QAAQ,CAAChnC,CAAD,CAAQZ,CAAR,CAAa,CAC9C2nC,CAAA,CAAU/mC,CAAV,CAAiBqK,CAAjB,EACK48B,CAAA,CAAW,EAAX,CAAgB,GADrB,EAEI7nC,CAFJ,EAGK6nC,CAAA,CAAW,EAAX,CAAgB,GAHrB,EAD8C,CAAhD,CADK,CAQL59B,CAAA/E,KAAA,CAAWiF,EAAA,CAAec,CAAf,CAAX,CAAoC,GAApC,CAA0Cd,EAAA,CAAek9B,EAAA,CAAeO,CAAf,CAAf,CAA1C,CAbF,CADgD,CALlD,GAAKH,CAAAA,CAAL,CAAa,MAAO,EACpB,KAAIx9B,EAAQ,EACZ09B,EAAA,CAAUF,CAAV,CAAkB,EAAlB,CAAsB,CAAA,CAAtB,CACA,OAAOx9B,EAAAG,KAAA,CAAW,GAAX,CAJyC,CAD7B,CA5CqB,CAwE9C09B,QAASA,GAA4B,CAACx7B,CAAD,CAAOy7B,CAAP,CAAgB,CACnD,GAAIzoC,CAAA,CAASgN,CAAT,CAAJ,CAAoB,CAElB,IAAI07B,EAAW17B,CAAAjE,QAAA,CAAa4/B,EAAb,CAAqC,EAArC,CAAAjpB,KAAA,EAEf,IAAIgpB,CAAJ,CAAc,CACZ,IAAIE,EAAcH,CAAA,CAAQ,cAAR,CACd,EAAC,CAAD,CAAC,CAAD,EAAC,CAAD,GAAC,CAAA,QAAA,CAAA,EAAA,CAAD,IAWN,CAXM,EAUFI,CAVE,CAAkE3lC,CAUxD2D,MAAA,CAAUiiC,EAAV,CAVV,GAWcC,EAAA,CAAUF,CAAA,CAAU,CAAV,CAAV,CAAArkC,KAAA,CAXoDtB,CAWpD,CAXd,CAAA,EAAJ,GACE8J,CADF,CACSvE,EAAA,CAASigC,CAAT,CADT,CAFY,CAJI,CAYpB,MAAO17B,EAb4C,CA2BrDg8B,QAASA,GAAY,CAACP,CAAD,CAAU,CAAA,IACzB7oB;AAASrY,CAAA,EADgB,CACHpG,CAQtBnB,EAAA,CAASyoC,CAAT,CAAJ,CACEloC,CAAA,CAAQkoC,CAAA1jC,MAAA,CAAc,IAAd,CAAR,CAA6B,QAAQ,CAACkkC,CAAD,CAAO,CAC1C9nC,CAAA,CAAI8nC,CAAA3jC,QAAA,CAAa,GAAb,CACS,KAAA,EAAAJ,CAAA,CAAUwa,CAAA,CAAKupB,CAAA7b,OAAA,CAAY,CAAZ,CAAejsB,CAAf,CAAL,CAAV,CAAoC,EAAA,CAAAue,CAAA,CAAKupB,CAAA7b,OAAA,CAAYjsB,CAAZ,CAAgB,CAAhB,CAAL,CAR/CT,EAAJ,GACEkf,CAAA,CAAOlf,CAAP,CADF,CACgBkf,CAAA,CAAOlf,CAAP,CAAA,CAAckf,CAAA,CAAOlf,CAAP,CAAd,CAA4B,IAA5B,CAAmCyH,CAAnC,CAAyCA,CADzD,CAM4C,CAA5C,CADF,CAKWnG,CAAA,CAASymC,CAAT,CALX,EAMEloC,CAAA,CAAQkoC,CAAR,CAAiB,QAAQ,CAACS,CAAD,CAAYC,CAAZ,CAAuB,CACjC,IAAA,EAAAjkC,CAAA,CAAUikC,CAAV,CAAA,CAAsB,EAAAzpB,CAAA,CAAKwpB,CAAL,CAZjCxoC,EAAJ,GACEkf,CAAA,CAAOlf,CAAP,CADF,CACgBkf,CAAA,CAAOlf,CAAP,CAAA,CAAckf,CAAA,CAAOlf,CAAP,CAAd,CAA4B,IAA5B,CAAmCyH,CAAnC,CAAyCA,CADzD,CAWgD,CAAhD,CAKF,OAAOyX,EApBsB,CAoC/BwpB,QAASA,GAAa,CAACX,CAAD,CAAU,CAC9B,IAAIY,CAEJ,OAAO,SAAQ,CAACz9B,CAAD,CAAO,CACfy9B,CAAL,GAAiBA,CAAjB,CAA+BL,EAAA,CAAaP,CAAb,CAA/B,CAEA,OAAI78B,EAAJ,EACMtK,CAIGA,CAJK+nC,CAAA,CAAWnkC,CAAA,CAAU0G,CAAV,CAAX,CAILtK,CAHO,IAAK,EAGZA,GAHHA,CAGGA,GAFLA,CAEKA,CAFG,IAEHA,EAAAA,CALT,EAQO+nC,CAXa,CAHQ,CA8BhCC,QAASA,GAAa,CAACt8B,CAAD,CAAOy7B,CAAP,CAAgBc,CAAhB,CAAwBC,CAAxB,CAA6B,CACjD,GAAI7oC,CAAA,CAAW6oC,CAAX,CAAJ,CACE,MAAOA,EAAA,CAAIx8B,CAAJ,CAAUy7B,CAAV,CAAmBc,CAAnB,CAGThpC,EAAA,CAAQipC,CAAR,CAAa,QAAQ,CAAC1hC,CAAD,CAAK,CACxBkF,CAAA,CAAOlF,CAAA,CAAGkF,CAAH,CAASy7B,CAAT,CAAkBc,CAAlB,CADiB,CAA1B,CAIA,OAAOv8B,EAT0C,CAwBnD0N,QAASA,GAAa,EAAG,CAiCvB,IAAI+uB,EAAW,IAAAA,SAAXA,CAA2B,CAE7BC,kBAAmB,CAAClB,EAAD,CAFU,CAK7BmB,iBAAkB,CAAC,QAAQ,CAACC,CAAD,CAAI,CAC7B,MAAO5nC,EAAA,CAAS4nC,CAAT,CAAA,EAl1TmB,eAk1TnB;AAl1TJ9lC,EAAAjD,KAAA,CAk1T2B+oC,CAl1T3B,CAk1TI,EAx0TmB,eAw0TnB,GAx0TJ9lC,EAAAjD,KAAA,CAw0TyC+oC,CAx0TzC,CAw0TI,EA70TmB,mBA60TnB,GA70TJ9lC,EAAAjD,KAAA,CA60T2D+oC,CA70T3D,CA60TI,CAA4DvhC,EAAA,CAAOuhC,CAAP,CAA5D,CAAwEA,CADlD,CAAb,CALW,CAU7BnB,QAAS,CACPoB,OAAQ,CACN,OAAU,mCADJ,CADD,CAIP5P,KAAQznB,EAAA,CAAYs3B,EAAZ,CAJD,CAKPrkB,IAAQjT,EAAA,CAAYs3B,EAAZ,CALD,CAMPC,MAAQv3B,EAAA,CAAYs3B,EAAZ,CAND,CAVoB,CAmB7BE,eAAgB,YAnBa,CAoB7BC,eAAgB,cApBa,CAsB7BC,gBAAiB,sBAtBY,CAA/B,CAyBIC,EAAgB,CAAA,CAoBpB,KAAAA,cAAA,CAAqBC,QAAQ,CAAC9oC,CAAD,CAAQ,CACnC,MAAI0C,EAAA,CAAU1C,CAAV,CAAJ,EACE6oC,CACO,CADS,CAAE7oC,CAAAA,CACX,CAAA,IAFT,EAIO6oC,CAL4B,CAQrC,KAAIE,EAAmB,CAAA,CAgBvB,KAAAC,2BAAA,CAAkCC,QAAQ,CAACjpC,CAAD,CAAQ,CAChD,MAAI0C,EAAA,CAAU1C,CAAV,CAAJ,EACE+oC,CACO,CADY,CAAE/oC,CAAAA,CACd,CAAA,IAFT,EAIO+oC,CALyC,CAqBlD,KAAIG,EAAuB,IAAAC,aAAvBD,CAA2C,EAE/C,KAAA3lB,KAAA,CAAY,CAAC,cAAD,CAAiB,gBAAjB,CAAmC,eAAnC;AAAoD,YAApD,CAAkE,IAAlE,CAAwE,WAAxE,CACR,QAAQ,CAAC9J,CAAD,CAAewC,CAAf,CAA+B9D,CAA/B,CAA8CkC,CAA9C,CAA0DE,CAA1D,CAA8D4M,CAA9D,CAAyE,CAkjBnFhO,QAASA,EAAK,CAACiwB,CAAD,CAAgB,CAkE5BC,QAASA,EAAiB,CAACC,CAAD,CAAUH,CAAV,CAAwB,CAChD,IADgD,IACvCtpC,EAAI,CADmC,CAChCY,EAAK0oC,CAAAvqC,OAArB,CAA0CiB,CAA1C,CAA8CY,CAA9C,CAAA,CAAmD,CACjD,IAAI8oC,EAASJ,CAAA,CAAatpC,CAAA,EAAb,CAAb,CACI2pC,EAAWL,CAAA,CAAatpC,CAAA,EAAb,CAEfypC,EAAA,CAAUA,CAAA1K,KAAA,CAAa2K,CAAb,CAAqBC,CAArB,CAJuC,CAOnDL,CAAAvqC,OAAA,CAAsB,CAEtB,OAAO0qC,EAVyC,CAalDG,QAASA,EAAgB,CAACtC,CAAD,CAAU/8B,CAAV,CAAkB,CAAA,IACrCs/B,CADqC,CACtBC,EAAmB,EAEtC1qC,EAAA,CAAQkoC,CAAR,CAAiB,QAAQ,CAACyC,CAAD,CAAWC,CAAX,CAAmB,CACtCxqC,CAAA,CAAWuqC,CAAX,CAAJ,EACEF,CACA,CADgBE,CAAA,CAASx/B,CAAT,CAChB,CAAqB,IAArB,EAAIs/B,CAAJ,GACEC,CAAA,CAAiBE,CAAjB,CADF,CAC6BH,CAD7B,CAFF,EAMEC,CAAA,CAAiBE,CAAjB,CANF,CAM6BD,CAPa,CAA5C,CAWA,OAAOD,EAdkC,CA+D3CvB,QAASA,EAAiB,CAAC0B,CAAD,CAAW,CAEnC,IAAIC,EAAOxoC,CAAA,CAAO,EAAP,CAAWuoC,CAAX,CACXC,EAAAr+B,KAAA,CAAYs8B,EAAA,CAAc8B,CAAAp+B,KAAd,CAA6Bo+B,CAAA3C,QAA7B,CAA+C2C,CAAA7B,OAA/C,CACc79B,CAAAg+B,kBADd,CAEMH,EAAAA,CAAA6B,CAAA7B,OAAlB,OA70BC,IA60BM,EA70BCA,CA60BD,EA70BoB,GA60BpB,CA70BWA,CA60BX,CACH8B,CADG,CAEHxvB,CAAAyvB,OAAA,CAAUD,CAAV,CAP+B,CA5IrC,GAAK,CAAArpC,CAAA,CAAS0oC,CAAT,CAAL,CACE,KAAM/qC,EAAA,CAAO,OAAP,CAAA,CAAgB,QAAhB,CAA0F+qC,CAA1F,CAAN,CAGF,GAAK,CAAA1qC,CAAA,CAAS0qC,CAAA3e,IAAT,CAAL,CACE,KAAMpsB,EAAA,CAAO,OAAP,CAAA,CAAgB,QAAhB,CAA6F+qC,CAAA3e,IAA7F,CAAN,CAGF,IAAIrgB,EAAS7I,CAAA,CAAO,CAClBoO,OAAQ,KADU,CAElB04B,iBAAkBF,CAAAE,iBAFA;AAGlBD,kBAAmBD,CAAAC,kBAHD,CAIlBQ,gBAAiBT,CAAAS,gBAJC,CAAP,CAKVQ,CALU,CAObh/B,EAAA+8B,QAAA,CA+EA8C,QAAqB,CAAC7/B,CAAD,CAAS,CAAA,IACxB8/B,EAAa/B,CAAAhB,QADW,CAExBgD,EAAa5oC,CAAA,CAAO,EAAP,CAAW6I,CAAA+8B,QAAX,CAFW,CAGxBiD,CAHwB,CAGTC,CAHS,CAGeC,CAHf,CAK5BJ,EAAa3oC,CAAA,CAAO,EAAP,CAAW2oC,CAAA3B,OAAX,CAA8B2B,CAAA,CAAWtmC,CAAA,CAAUwG,CAAAuF,OAAV,CAAX,CAA9B,CAGb,EAAA,CACA,IAAKy6B,CAAL,GAAsBF,EAAtB,CAAkC,CAChCG,CAAA,CAAyBzmC,CAAA,CAAUwmC,CAAV,CAEzB,KAAKE,CAAL,GAAsBH,EAAtB,CACE,GAAIvmC,CAAA,CAAU0mC,CAAV,CAAJ,GAAiCD,CAAjC,CACE,SAAS,CAIbF,EAAA,CAAWC,CAAX,CAAA,CAA4BF,CAAA,CAAWE,CAAX,CATI,CAalC,MAAOX,EAAA,CAAiBU,CAAjB,CAA6Bj5B,EAAA,CAAY9G,CAAZ,CAA7B,CAtBqB,CA/Eb,CAAag/B,CAAb,CACjBh/B,EAAAuF,OAAA,CAAgB0B,EAAA,CAAUjH,CAAAuF,OAAV,CAChBvF,EAAAw+B,gBAAA,CAAyBlqC,CAAA,CAAS0L,CAAAw+B,gBAAT,CAAA,CACrBzhB,CAAA5a,IAAA,CAAcnC,CAAAw+B,gBAAd,CADqB,CACmBx+B,CAAAw+B,gBAE5C,KAAI2B,EAAsB,EAA1B,CACIC,EAAuB,EAD3B,CAEIlB,EAAU/uB,CAAAkwB,KAAA,CAAQrgC,CAAR,CAGdnL,EAAA,CAAQyrC,CAAR,CAA8B,QAAQ,CAACC,CAAD,CAAc,CAClD,CAAIA,CAAAC,QAAJ,EAA2BD,CAAAE,aAA3B,GACEN,CAAAv/B,QAAA,CAA4B2/B,CAAAC,QAA5B,CAAiDD,CAAAE,aAAjD,CAEF,EAAIF,CAAAb,SAAJ,EAA4Ba,CAAAG,cAA5B,GACEN,CAAAlmC,KAAA,CAA0BqmC,CAAAb,SAA1B;AAAgDa,CAAAG,cAAhD,CALgD,CAApD,CASAxB,EAAA,CAAUD,CAAA,CAAkBC,CAAlB,CAA2BiB,CAA3B,CACVjB,EAAA,CAAUA,CAAA1K,KAAA,CAoFVmM,QAAsB,CAAC3gC,CAAD,CAAS,CAC7B,IAAI+8B,EAAU/8B,CAAA+8B,QAAd,CACI6D,EAAUhD,EAAA,CAAc59B,CAAAsB,KAAd,CAA2Bo8B,EAAA,CAAcX,CAAd,CAA3B,CAAmDtiC,IAAAA,EAAnD,CAA8DuF,CAAAi+B,iBAA9D,CAGV5lC,EAAA,CAAYuoC,CAAZ,CAAJ,EACE/rC,CAAA,CAAQkoC,CAAR,CAAiB,QAAQ,CAACnnC,CAAD,CAAQ6pC,CAAR,CAAgB,CACb,cAA1B,GAAIjmC,CAAA,CAAUimC,CAAV,CAAJ,EACE,OAAO1C,CAAA,CAAQ0C,CAAR,CAF8B,CAAzC,CAOEpnC,EAAA,CAAY2H,CAAA6gC,gBAAZ,CAAJ,EAA4C,CAAAxoC,CAAA,CAAY0lC,CAAA8C,gBAAZ,CAA5C,GACE7gC,CAAA6gC,gBADF,CAC2B9C,CAAA8C,gBAD3B,CAKA,OAAOC,EAAA,CAAQ9gC,CAAR,CAAgB4gC,CAAhB,CAAApM,KAAA,CAA8BwJ,CAA9B,CAAiDA,CAAjD,CAlBsB,CApFrB,CACVkB,EAAA,CAAUD,CAAA,CAAkBC,CAAlB,CAA2BkB,CAA3B,CAENzB,EAAJ,EACEO,CAAA6B,QASA,CATkBC,QAAQ,CAAC5kC,CAAD,CAAK,CAC7B6H,EAAA,CAAY7H,CAAZ,CAAgB,IAAhB,CAEA8iC,EAAA1K,KAAA,CAAa,QAAQ,CAACkL,CAAD,CAAW,CAC9BtjC,CAAA,CAAGsjC,CAAAp+B,KAAH,CAAkBo+B,CAAA7B,OAAlB,CAAmC6B,CAAA3C,QAAnC,CAAqD/8B,CAArD,CAD8B,CAAhC,CAGA,OAAOk/B,EANsB,CAS/B,CAAAA,CAAAtf,MAAA,CAAgBqhB,QAAQ,CAAC7kC,CAAD,CAAK,CAC3B6H,EAAA,CAAY7H,CAAZ,CAAgB,IAAhB,CAEA8iC,EAAA1K,KAAA,CAAa,IAAb,CAAmB,QAAQ,CAACkL,CAAD,CAAW,CACpCtjC,CAAA,CAAGsjC,CAAAp+B,KAAH,CAAkBo+B,CAAA7B,OAAlB,CAAmC6B,CAAA3C,QAAnC,CAAqD/8B,CAArD,CADoC,CAAtC,CAGA,OAAOk/B,EANoB,CAV/B,GAmBEA,CAAA6B,QACA,CADkBG,EAAA,CAAoB,SAApB,CAClB;AAAAhC,CAAAtf,MAAA,CAAgBshB,EAAA,CAAoB,OAApB,CApBlB,CAuBA,OAAOhC,EA/DqB,CAsS9B4B,QAASA,EAAO,CAAC9gC,CAAD,CAAS4gC,CAAT,CAAkB,CA0DhCO,QAASA,EAAmB,CAACC,CAAD,CAAgB,CAC1C,GAAIA,CAAJ,CAAmB,CACjB,IAAIC,EAAgB,EACpBxsC,EAAA,CAAQusC,CAAR,CAAuB,QAAQ,CAACxpB,CAAD,CAAe5iB,CAAf,CAAoB,CACjDqsC,CAAA,CAAcrsC,CAAd,CAAA,CAAqB,QAAQ,CAAC6iB,CAAD,CAAQ,CASnCypB,QAASA,EAAgB,EAAG,CAC1B1pB,CAAA,CAAaC,CAAb,CAD0B,CARxB4mB,CAAJ,CACExuB,CAAAsxB,YAAA,CAAuBD,CAAvB,CADF,CAEWrxB,CAAAuxB,QAAJ,CACLF,CAAA,EADK,CAGLrxB,CAAA5O,OAAA,CAAkBigC,CAAlB,CANiC,CADY,CAAnD,CAeA,OAAOD,EAjBU,CADuB,CA6B5CI,QAASA,EAAI,CAAC5D,CAAD,CAAS6B,CAAT,CAAmBgC,CAAnB,CAAkCC,CAAlC,CAA8C,CAUzDC,QAASA,EAAkB,EAAG,CAC5BC,CAAA,CAAenC,CAAf,CAAyB7B,CAAzB,CAAiC6D,CAAjC,CAAgDC,CAAhD,CAD4B,CAT1B5lB,CAAJ,GAxjCC,GAyjCC,EAAc8hB,CAAd,EAzjCyB,GAyjCzB,CAAcA,CAAd,CACE9hB,CAAAhC,IAAA,CAAUsG,CAAV,CAAe,CAACwd,CAAD,CAAS6B,CAAT,CAAmBpC,EAAA,CAAaoE,CAAb,CAAnB,CAAgDC,CAAhD,CAAf,CADF,CAIE5lB,CAAAiI,OAAA,CAAa3D,CAAb,CALJ,CAaIoe,EAAJ,CACExuB,CAAAsxB,YAAA,CAAuBK,CAAvB,CADF,EAGEA,CAAA,EACA,CAAK3xB,CAAAuxB,QAAL,EAAyBvxB,CAAA5O,OAAA,EAJ3B,CAdyD,CA0B3DwgC,QAASA,EAAc,CAACnC,CAAD,CAAW7B,CAAX,CAAmBd,CAAnB,CAA4B4E,CAA5B,CAAwC,CAE7D9D,CAAA,CAAoB,EAAX,EAAAA,CAAA,CAAeA,CAAf,CAAwB,CAEjC,EArlCC,GAqlCA,EAAUA,CAAV,EArlC0B,GAqlC1B,CAAUA,CAAV,CAAoBiE,CAAAC,QAApB,CAAuCD,CAAAlC,OAAxC,EAAyD,CACvDt+B,KAAMo+B,CADiD,CAEvD7B,OAAQA,CAF+C,CAGvDd,QAASW,EAAA,CAAcX,CAAd,CAH8C,CAIvD/8B,OAAQA,CAJ+C,CAKvD2hC,WAAYA,CAL2C,CAAzD,CAJ6D,CAa/DK,QAASA,EAAwB,CAAC7mB,CAAD,CAAS,CACxC0mB,CAAA,CAAe1mB,CAAA7Z,KAAf,CAA4B6Z,CAAA0iB,OAA5B,CAA2C/2B,EAAA,CAAYqU,CAAA4hB,QAAA,EAAZ,CAA3C;AAA0E5hB,CAAAwmB,WAA1E,CADwC,CAI1CM,QAASA,EAAgB,EAAG,CAC1B,IAAIrX,EAAM7b,CAAAmzB,gBAAAtoC,QAAA,CAA8BoG,CAA9B,CACG,GAAb,GAAI4qB,CAAJ,EAAgB7b,CAAAmzB,gBAAAroC,OAAA,CAA6B+wB,CAA7B,CAAkC,CAAlC,CAFU,CAlII,IAC5BkX,EAAW3xB,CAAAkS,MAAA,EADiB,CAE5B6c,EAAU4C,CAAA5C,QAFkB,CAG5BnjB,CAH4B,CAI5BomB,CAJ4B,CAK5BpC,GAAa//B,CAAA+8B,QALe,CAM5B1c,EAAM+hB,CAAA,CAASpiC,CAAAqgB,IAAT,CAAqBrgB,CAAAw+B,gBAAA,CAAuBx+B,CAAAy8B,OAAvB,CAArB,CAEV1tB,EAAAmzB,gBAAAhoC,KAAA,CAA2B8F,CAA3B,CACAk/B,EAAA1K,KAAA,CAAayN,CAAb,CAA+BA,CAA/B,CAGKlmB,EAAA/b,CAAA+b,MAAL,EAAqBA,CAAAgiB,CAAAhiB,MAArB,EAAyD,CAAA,CAAzD,GAAwC/b,CAAA+b,MAAxC,EACuB,KADvB,GACK/b,CAAAuF,OADL,EACkD,OADlD,GACgCvF,CAAAuF,OADhC,GAEEwW,CAFF,CAEUzlB,CAAA,CAAS0J,CAAA+b,MAAT,CAAA,CAAyB/b,CAAA+b,MAAzB,CACAzlB,CAAA,CAASynC,CAAAhiB,MAAT,CAAA,CAA2BgiB,CAAAhiB,MAA3B,CACAsmB,CAJV,CAOItmB,EAAJ,GACEomB,CACA,CADapmB,CAAA5Z,IAAA,CAAUke,CAAV,CACb,CAAI/nB,CAAA,CAAU6pC,CAAV,CAAJ,CACoBA,CAAlB,EAnwVMltC,CAAA,CAmwVYktC,CAnwVD3N,KAAX,CAmwVN,CAEE2N,CAAA3N,KAAA,CAAgBwN,CAAhB,CAA0CA,CAA1C,CAFF,CAKM3tC,CAAA,CAAQ8tC,CAAR,CAAJ,CACEN,CAAA,CAAeM,CAAA,CAAW,CAAX,CAAf,CAA8BA,CAAA,CAAW,CAAX,CAA9B,CAA6Cr7B,EAAA,CAAYq7B,CAAA,CAAW,CAAX,CAAZ,CAA7C,CAAyEA,CAAA,CAAW,CAAX,CAAzE,CADF,CAGEN,CAAA,CAAeM,CAAf,CAA2B,GAA3B,CAAgC,EAAhC,CAAoC,IAApC,CATN,CAcEpmB,CAAAhC,IAAA,CAAUsG,CAAV,CAAe6e,CAAf,CAhBJ,CAuBI7mC,EAAA,CAAY8pC,CAAZ,CAAJ,GAQE,CAPIG,CAOJ,CAPgBC,EAAA,CAAgBviC,CAAAqgB,IAAhB,CAAA,CACVxO,CAAA,EAAA,CAAiB7R,CAAAs+B,eAAjB,EAA0CP,CAAAO,eAA1C,CADU;AAEV7jC,IAAAA,EAKN,IAHEslC,EAAA,CAAY//B,CAAAu+B,eAAZ,EAAqCR,CAAAQ,eAArC,CAGF,CAHmE+D,CAGnE,EAAAjzB,CAAA,CAAarP,CAAAuF,OAAb,CAA4B8a,CAA5B,CAAiCugB,CAAjC,CAA0Ca,CAA1C,CAAgD1B,EAAhD,CAA4D//B,CAAAwiC,QAA5D,CACIxiC,CAAA6gC,gBADJ,CAC4B7gC,CAAAyiC,aAD5B,CAEItB,CAAA,CAAoBnhC,CAAAohC,cAApB,CAFJ,CAGID,CAAA,CAAoBnhC,CAAA0iC,oBAApB,CAHJ,CARF,CAcA,OAAOxD,EAxDyB,CAyIlCkD,QAASA,EAAQ,CAAC/hB,CAAD,CAAMsiB,CAAN,CAAwB,CACT,CAA9B,CAAIA,CAAAnuC,OAAJ,GACE6rB,CADF,GACgC,EAAtB,EAACA,CAAAzmB,QAAA,CAAY,GAAZ,CAAD,CAA2B,GAA3B,CAAiC,GAD3C,EACkD+oC,CADlD,CAGA,OAAOtiB,EAJgC,CA/9BzC,IAAIgiB,EAAet0B,CAAA,CAAc,OAAd,CAKnBgwB,EAAAS,gBAAA,CAA2BlqC,CAAA,CAASypC,CAAAS,gBAAT,CAAA,CACzBzhB,CAAA5a,IAAA,CAAc47B,CAAAS,gBAAd,CADyB,CACiBT,CAAAS,gBAO5C,KAAI8B,EAAuB,EAE3BzrC,EAAA,CAAQiqC,CAAR,CAA8B,QAAQ,CAAC8D,CAAD,CAAqB,CACzDtC,CAAA1/B,QAAA,CAA6BtM,CAAA,CAASsuC,CAAT,CAAA,CACvB7lB,CAAA5a,IAAA,CAAcygC,CAAd,CADuB,CACa7lB,CAAA9b,OAAA,CAAiB2hC,CAAjB,CAD1C,CADyD,CAA3D,CA0rBA7zB,EAAAmzB,gBAAA,CAAwB,EA8GxBW,UAA2B,CAAClsB,CAAD,CAAQ,CACjC9hB,CAAA,CAAQwC,SAAR,CAAmB,QAAQ,CAAC6I,CAAD,CAAO,CAChC6O,CAAA,CAAM7O,CAAN,CAAA,CAAc,QAAQ,CAACmgB,CAAD,CAAMrgB,CAAN,CAAc,CAClC,MAAO+O,EAAA,CAAM5X,CAAA,CAAO,EAAP,CAAW6I,CAAX,EAAqB,EAArB;AAAyB,CACpCuF,OAAQrF,CAD4B,CAEpCmgB,IAAKA,CAF+B,CAAzB,CAAN,CAD2B,CADJ,CAAlC,CADiC,CAAnCwiB,CA1DA,CAAmB,KAAnB,CAA0B,QAA1B,CAAoC,MAApC,CAA4C,OAA5C,CAsEAC,UAAmC,CAAC5iC,CAAD,CAAO,CACxCrL,CAAA,CAAQwC,SAAR,CAAmB,QAAQ,CAAC6I,CAAD,CAAO,CAChC6O,CAAA,CAAM7O,CAAN,CAAA,CAAc,QAAQ,CAACmgB,CAAD,CAAM/e,CAAN,CAAYtB,CAAZ,CAAoB,CACxC,MAAO+O,EAAA,CAAM5X,CAAA,CAAO,EAAP,CAAW6I,CAAX,EAAqB,EAArB,CAAyB,CACpCuF,OAAQrF,CAD4B,CAEpCmgB,IAAKA,CAF+B,CAGpC/e,KAAMA,CAH8B,CAAzB,CAAN,CADiC,CADV,CAAlC,CADwC,CAA1CwhC,CA9BA,CAA2B,MAA3B,CAAmC,KAAnC,CAA0C,OAA1C,CAYA/zB,EAAAgvB,SAAA,CAAiBA,CAGjB,OAAOhvB,EAtzB4E,CADzE,CA7HW,CA6nCzBS,QAASA,GAAmB,EAAG,CAC7B,IAAA2J,KAAA,CAAYC,QAAQ,EAAG,CACrB,MAAO2pB,SAAkB,EAAG,CAC1B,MAAO,KAAI/uC,CAAAgvC,eADe,CADP,CADM,CAyB/B1zB,QAASA,GAAoB,EAAG,CAC9B,IAAA6J,KAAA,CAAY,CAAC,UAAD,CAAa,iBAAb,CAAgC,WAAhC,CAA6C,aAA7C,CAA4D,QAAQ,CAACtL,CAAD,CAAW4B,CAAX,CAA4BtB,CAA5B,CAAuCoB,CAAvC,CAAoD,CAClI,MAAO0zB,GAAA,CAAkBp1B,CAAlB,CAA4B0B,CAA5B,CAAyC1B,CAAAwU,MAAzC,CAAyD5S,CAAzD,CAA0EtB,CAAA,CAAU,CAAV,CAA1E,CAD2H,CAAxH,CADkB,CAMhC80B,QAASA,GAAiB,CAACp1B,CAAD,CAAWk1B,CAAX,CAAsBG,CAAtB,CAAqCC,CAArC,CAAgDC,CAAhD,CAA6D,CAkHrFC,QAASA,EAAQ,CAAChjB,CAAD,CAAMijB,CAAN,CAAoB7B,CAApB,CAA0B,CACzCphB,CAAA,CAAMA,CAAAhjB,QAAA,CAAY,eAAZ,CAA6BimC,CAA7B,CADmC,KAKrCt7B;AAASo7B,CAAAtwB,cAAA,CAA0B,QAA1B,CAL4B,CAKSoO,EAAW,IAC7DlZ,EAAA3M,KAAA,CAAc,iBACd2M,EAAAvR,IAAA,CAAa4pB,CACbrY,EAAAu7B,MAAA,CAAe,CAAA,CAEfriB,EAAA,CAAWA,QAAQ,CAACrJ,CAAD,CAAQ,CACH7P,CAliStBmN,oBAAA,CAkiS8B9Z,MAliS9B,CAkiSsC6lB,CAliStC,CAAsC,CAAA,CAAtC,CAmiSsBlZ,EAniStBmN,oBAAA,CAmiS8B9Z,OAniS9B,CAmiSuC6lB,CAniSvC,CAAsC,CAAA,CAAtC,CAoiSAkiB,EAAAI,KAAAzsB,YAAA,CAA6B/O,CAA7B,CACAA,EAAA,CAAS,IACT,KAAI61B,EAAU,EAAd,CACIvI,EAAO,SAEPzd,EAAJ,GACqB,MAInB,GAJIA,CAAAxc,KAIJ,EAJ8B8nC,CAAAM,UAAA,CAAoBH,CAApB,CAI9B,GAHEzrB,CAGF,CAHU,CAAExc,KAAM,OAAR,CAGV,EADAi6B,CACA,CADOzd,CAAAxc,KACP,CAAAwiC,CAAA,CAAwB,OAAf,GAAAhmB,CAAAxc,KAAA,CAAyB,GAAzB,CAA+B,GAL1C,CAQIomC,EAAJ,EACEA,CAAA,CAAK5D,CAAL,CAAavI,CAAb,CAjBuB,CAqBRttB,EAzjSjB07B,iBAAA,CAyjSyBroC,MAzjSzB,CAyjSiC6lB,CAzjSjC,CAAmC,CAAA,CAAnC,CA0jSiBlZ,EA1jSjB07B,iBAAA,CA0jSyBroC,OA1jSzB,CA0jSkC6lB,CA1jSlC,CAAmC,CAAA,CAAnC,CA2jSFkiB,EAAAI,KAAA3wB,YAAA,CAA6B7K,CAA7B,CACA,OAAOkZ,EAlCkC,CAhH3C,MAAO,SAAQ,CAAC3b,CAAD,CAAS8a,CAAT,CAAckO,CAAd,CAAoBrN,CAApB,CAA8B6b,CAA9B,CAAuCyF,CAAvC,CAAgD3B,CAAhD,CAAiE4B,CAAjE,CAA+ErB,CAA/E,CAA8FsB,CAA9F,CAAmH,CA+FhIiB,QAASA,EAAc,EAAG,CACxBC,EAAA,EAAaA,EAAA,EACbC,EAAA,EAAOA,CAAAC,MAAA,EAFiB,CAK1BC,QAASA,EAAe,CAAC7iB,CAAD,CAAW2c,CAAX,CAAmB6B,CAAnB;AAA6BgC,CAA7B,CAA4CC,CAA5C,CAAwD,CAE1ErpC,CAAA,CAAUkqB,CAAV,CAAJ,EACE0gB,CAAAzgB,OAAA,CAAqBD,CAArB,CAEFohB,GAAA,CAAYC,CAAZ,CAAkB,IAElB3iB,EAAA,CAAS2c,CAAT,CAAiB6B,CAAjB,CAA2BgC,CAA3B,CAA0CC,CAA1C,CACA9zB,EAAAgT,6BAAA,CAAsC/oB,CAAtC,CAR8E,CAnGhF+V,CAAAiT,6BAAA,EACAT,EAAA,CAAMA,CAAN,EAAaxS,CAAAwS,IAAA,EAEb,IAA0B,OAA1B,GAAI7mB,CAAA,CAAU+L,CAAV,CAAJ,CACE,IAAI+9B,EAAeH,CAAAa,eAAA,CAAyB3jB,CAAzB,CAAnB,CACIujB,GAAYP,CAAA,CAAShjB,CAAT,CAAcijB,CAAd,CAA4B,QAAQ,CAACzF,CAAD,CAASvI,CAAT,CAAe,CAEjE,IAAIoK,EAAuB,GAAvBA,GAAY7B,CAAZ6B,EAA+ByD,CAAAc,YAAA,CAAsBX,CAAtB,CACnCS,EAAA,CAAgB7iB,CAAhB,CAA0B2c,CAA1B,CAAkC6B,CAAlC,CAA4C,EAA5C,CAAgDpK,CAAhD,CACA6N,EAAAe,eAAA,CAAyBZ,CAAzB,CAJiE,CAAnD,CAFlB,KAQO,CAEL,IAAIO,EAAMd,CAAA,CAAUx9B,CAAV,CAAkB8a,CAAlB,CAEVwjB,EAAAM,KAAA,CAAS5+B,CAAT,CAAiB8a,CAAjB,CAAsB,CAAA,CAAtB,CACAxrB,EAAA,CAAQkoC,CAAR,CAAiB,QAAQ,CAACnnC,CAAD,CAAQZ,CAAR,CAAa,CAChCsD,CAAA,CAAU1C,CAAV,CAAJ,EACIiuC,CAAAO,iBAAA,CAAqBpvC,CAArB,CAA0BY,CAA1B,CAFgC,CAAtC,CAMAiuC,EAAAQ,OAAA,CAAaC,QAAsB,EAAG,CACpC,IAAI3C,EAAakC,CAAAlC,WAAbA,EAA+B,EAAnC,CAIIjC,EAAY,UAAD,EAAemE,EAAf,CAAsBA,CAAAnE,SAAtB,CAAqCmE,CAAAU,aAJpD,CAOI1G,EAAwB,IAAf,GAAAgG,CAAAhG,OAAA,CAAsB,GAAtB,CAA4BgG,CAAAhG,OAK1B,EAAf,GAAIA,CAAJ,GACEA,CADF,CACW6B,CAAA,CAAW,GAAX,CAA6C,MAA5B,EAAA8E,CAAA,CAAWnkB,CAAX,CAAAokB,SAAA,CAAqC,GAArC;AAA2C,CADvE,CAIAV,EAAA,CAAgB7iB,CAAhB,CACI2c,CADJ,CAEI6B,CAFJ,CAGImE,CAAAa,sBAAA,EAHJ,CAII/C,CAJJ,CAjBoC,CAwBlClB,EAAAA,CAAeA,QAAQ,EAAG,CAG5BsD,CAAA,CAAgB7iB,CAAhB,CAA2B,EAA3B,CAA8B,IAA9B,CAAoC,IAApC,CAA0C,EAA1C,CAH4B,CAM9B2iB,EAAAc,QAAA,CAAclE,CACdoD,EAAAe,QAAA,CAAcnE,CAEd5rC,EAAA,CAAQusC,CAAR,CAAuB,QAAQ,CAACxrC,CAAD,CAAQZ,CAAR,CAAa,CACxC6uC,CAAAH,iBAAA,CAAqB1uC,CAArB,CAA0BY,CAA1B,CADwC,CAA5C,CAIAf,EAAA,CAAQ6tC,CAAR,CAA6B,QAAQ,CAAC9sC,CAAD,CAAQZ,CAAR,CAAa,CAChD6uC,CAAAgB,OAAAnB,iBAAA,CAA4B1uC,CAA5B,CAAiCY,CAAjC,CADgD,CAAlD,CAIIirC,EAAJ,GACEgD,CAAAhD,gBADF,CACwB,CAAA,CADxB,CAIA,IAAI4B,CAAJ,CACE,GAAI,CACFoB,CAAApB,aAAA,CAAmBA,CADjB,CAEF,MAAOrkC,CAAP,CAAU,CAQV,GAAqB,MAArB,GAAIqkC,CAAJ,CACE,KAAMrkC,EAAN,CATQ,CAcdylC,CAAAiB,KAAA,CAASzsC,CAAA,CAAYk2B,CAAZ,CAAA,CAAoB,IAApB,CAA2BA,CAApC,CAzEK,CA4EP,GAAc,CAAd,CAAIiU,CAAJ,CACE,IAAIhgB,EAAY0gB,CAAA,CAAcS,CAAd,CAA8BnB,CAA9B,CADlB,KAEyBA,EAAlB,EA/gWKvtC,CAAA,CA+gWautC,CA/gWFhO,KAAX,CA+gWL,EACLgO,CAAAhO,KAAA,CAAamP,CAAb,CA3F8H,CAF7C,CA+MvF/0B,QAASA,GAAoB,EAAG,CAC9B,IAAIwrB,EAAc,IAAlB,CACIC,EAAY,IAWhB,KAAAD,YAAA,CAAmB2K,QAAQ,CAACnvC,CAAD,CAAQ,CACjC,MAAIA,EAAJ,EACEwkC,CACO,CADOxkC,CACP,CAAA,IAFT,EAISwkC,CALwB,CAkBnC,KAAAC,UAAA,CAAiB2K,QAAQ,CAACpvC,CAAD,CAAQ,CAC/B,MAAIA,EAAJ,EACEykC,CACO,CADKzkC,CACL,CAAA,IAFT,EAISykC,CALsB,CAUjC,KAAAlhB,KAAA,CAAY,CAAC,QAAD;AAAW,mBAAX,CAAgC,MAAhC,CAAwC,QAAQ,CAACpJ,CAAD,CAAS1B,CAAT,CAA4BkC,CAA5B,CAAkC,CAM5F00B,QAASA,EAAM,CAACC,CAAD,CAAK,CAClB,MAAO,QAAP,CAAkBA,CADA,CAIpBC,QAASA,EAAY,CAAC7P,CAAD,CAAO,CAC1B,MAAOA,EAAAj4B,QAAA,CAAa+nC,CAAb,CAAiChL,CAAjC,CAAA/8B,QAAA,CACGgoC,CADH,CACqBhL,CADrB,CADmB,CAuB5BiL,QAASA,EAAqB,CAACnkC,CAAD,CAAQqf,CAAR,CAAkB+kB,CAAlB,CAAkCC,CAAlC,CAAkD,CAC9E,IAAIC,CACJ,OAAOA,EAAP,CAAiBtkC,CAAAzI,OAAA,CAAagtC,QAAiC,CAACvkC,CAAD,CAAQ,CACrEskC,CAAA,EACA,OAAOD,EAAA,CAAerkC,CAAf,CAF8D,CAAtD,CAGdqf,CAHc,CAGJ+kB,CAHI,CAF6D,CA8HhF52B,QAASA,EAAY,CAAC2mB,CAAD,CAAOqQ,CAAP,CAA2BrP,CAA3B,CAA2CD,CAA3C,CAAyD,CAuG5EuP,QAASA,EAAyB,CAAChwC,CAAD,CAAQ,CACxC,GAAI,CACeA,IAAAA,EAAAA,CAvCjB,EAAA,CAAO0gC,CAAA,CACL/lB,CAAAs1B,WAAA,CAAgBvP,CAAhB,CAAgC1gC,CAAhC,CADK,CAEL2a,CAAA3Z,QAAA,CAAahB,CAAb,CAsCK,KAAA,CAAA,IAAAygC,CAAA,EAAiB,CAAA/9B,CAAA,CAAU1C,CAAV,CAAjB,CAAoCA,CAAAA,CAAAA,CAApC,KAzPX,IAAa,IAAb,EAAIA,CAAJ,CACE,CAAA,CAAO,EADT,KAAA,CAGA,OAAQ,MAAOA,EAAf,EACE,KAAK,QAAL,CACE,KACF,MAAK,QAAL,CACEA,CAAA,CAAQ,EAAR,CAAaA,CACb,MACF,SACEA,CAAA,CAAQ+G,EAAA,CAAO/G,CAAP,CAPZ,CAUA,CAAA,CAAOA,CAbP,CAyPI,MAAO,EAFL,CAGF,MAAOwmB,CAAP,CAAY,CACZ/N,CAAA,CAAkBy3B,EAAAC,OAAA,CAA0BzQ,CAA1B,CAAgClZ,CAAhC,CAAlB,CADY,CAJ0B,CArG1C,GAAK5nB,CAAA8gC,CAAA9gC,OAAL,EAAmD,EAAnD,GAAoB8gC,CAAA17B,QAAA,CAAawgC,CAAb,CAApB,CAAsD,CACpD,IAAIoL,CACCG,EAAL,GACMK,CAIJ,CAJoBb,CAAA,CAAa7P,CAAb,CAIpB;AAHAkQ,CAGA,CAHiBvtC,EAAA,CAAQ+tC,CAAR,CAGjB,CAFAR,CAAAS,IAEA,CAFqB3Q,CAErB,CADAkQ,CAAAzP,YACA,CAD6B,EAC7B,CAAAyP,CAAAU,gBAAA,CAAiCZ,CALnC,CAOA,OAAOE,EAT6C,CAYtDnP,CAAA,CAAe,CAAEA,CAAAA,CAd2D,KAexE/5B,CAfwE,CAgBxE6pC,CAhBwE,CAiBxExsC,EAAQ,CAjBgE,CAkBxEo8B,EAAc,EAlB0D,CAmBxEqQ,EAAW,EACXC,EAAAA,CAAa/Q,CAAA9gC,OAKjB,KAzB4E,IAsBxEuH,EAAS,EAtB+D,CAuBxEuqC,EAAsB,EAE1B,CAAO3sC,CAAP,CAAe0sC,CAAf,CAAA,CACE,GAAyD,EAAzD,GAAM/pC,CAAN,CAAmBg5B,CAAA17B,QAAA,CAAawgC,CAAb,CAA0BzgC,CAA1B,CAAnB,GAC+E,EAD/E,GACOwsC,CADP,CACkB7Q,CAAA17B,QAAA,CAAaygC,CAAb,CAAwB/9B,CAAxB,CAAqCiqC,CAArC,CADlB,EAEM5sC,CAQJ,GARc2C,CAQd,EAPEP,CAAA7B,KAAA,CAAYirC,CAAA,CAAa7P,CAAAv2B,UAAA,CAAepF,CAAf,CAAsB2C,CAAtB,CAAb,CAAZ,CAOF,CALA2pC,CAKA,CALM3Q,CAAAv2B,UAAA,CAAezC,CAAf,CAA4BiqC,CAA5B,CAA+CJ,CAA/C,CAKN,CAJApQ,CAAA77B,KAAA,CAAiB+rC,CAAjB,CAIA,CAHAG,CAAAlsC,KAAA,CAAc6V,CAAA,CAAOk2B,CAAP,CAAYL,CAAZ,CAAd,CAGA,CAFAjsC,CAEA,CAFQwsC,CAER,CAFmBK,CAEnB,CADAF,CAAApsC,KAAA,CAAyB6B,CAAAvH,OAAzB,CACA,CAAAuH,CAAA7B,KAAA,CAAY,EAAZ,CAVF,KAWO,CAEDP,CAAJ,GAAc0sC,CAAd,EACEtqC,CAAA7B,KAAA,CAAYirC,CAAA,CAAa7P,CAAAv2B,UAAA,CAAepF,CAAf,CAAb,CAAZ,CAEF,MALK,CAeL28B,CAAJ,EAAsC,CAAtC,CAAsBv6B,CAAAvH,OAAtB,EACIsxC,EAAAW,cAAA,CAAiCnR,CAAjC,CAGJ,IAAKqQ,CAAAA,CAAL,EAA2B5P,CAAAvhC,OAA3B,CAA+C,CAC7C,IAAIkyC,GAAUA,QAAQ,CAAC1L,CAAD,CAAS,CAC7B,IAD6B,IACpBvlC,EAAI,CADgB,CACbY,EAAK0/B,CAAAvhC,OAArB,CAAyCiB,CAAzC,CAA6CY,CAA7C,CAAiDZ,CAAA,EAAjD,CAAsD,CACpD,GAAI4gC,CAAJ,EAAoBh+B,CAAA,CAAY2iC,CAAA,CAAOvlC,CAAP,CAAZ,CAApB,CAA4C,MAC5CsG,EAAA,CAAOuqC,CAAA,CAAoB7wC,CAApB,CAAP,CAAA,CAAiCulC,CAAA,CAAOvlC,CAAP,CAFmB,CAItD,MAAOsG,EAAAqD,KAAA,CAAY,EAAZ,CALsB,CAc/B,OAAOjI,EAAA,CAAOwvC,QAAwB,CAAC5xC,CAAD,CAAU,CAC5C,IAAIU;AAAI,CAAR,CACIY,EAAK0/B,CAAAvhC,OADT,CAEIwmC,EAAarmC,KAAJ,CAAU0B,CAAV,CAEb,IAAI,CACF,IAAA,CAAOZ,CAAP,CAAWY,CAAX,CAAeZ,CAAA,EAAf,CACEulC,CAAA,CAAOvlC,CAAP,CAAA,CAAY2wC,CAAA,CAAS3wC,CAAT,CAAA,CAAYV,CAAZ,CAGd,OAAO2xC,GAAA,CAAQ1L,CAAR,CALL,CAMF,MAAO5e,CAAP,CAAY,CACZ/N,CAAA,CAAkBy3B,EAAAC,OAAA,CAA0BzQ,CAA1B,CAAgClZ,CAAhC,CAAlB,CADY,CAX8B,CAAzC,CAeF,CAEH6pB,IAAK3Q,CAFF,CAGHS,YAAaA,CAHV,CAIHmQ,gBAAiBA,QAAQ,CAAC/kC,CAAD,CAAQqf,CAAR,CAAkB,CACzC,IAAIsX,CACJ,OAAO32B,EAAAylC,YAAA,CAAkBR,CAAlB,CAA4BS,QAA6B,CAAC7L,CAAD,CAAS8L,CAAT,CAAoB,CAClF,IAAIC,EAAYL,EAAA,CAAQ1L,CAAR,CACZ/lC,EAAA,CAAWurB,CAAX,CAAJ,EACEA,CAAArrB,KAAA,CAAc,IAAd,CAAoB4xC,CAApB,CAA+B/L,CAAA,GAAW8L,CAAX,CAAuBhP,CAAvB,CAAmCiP,CAAlE,CAA6E5lC,CAA7E,CAEF22B,EAAA,CAAYiP,CALsE,CAA7E,CAFkC,CAJxC,CAfE,CAfsC,CAxD6B,CA/Jc,IACxFR,EAAoBnM,CAAA5lC,OADoE,CAExFgyC,EAAkBnM,CAAA7lC,OAFsE,CAGxF4wC,EAAqB,IAAItuC,MAAJ,CAAWsjC,CAAA/8B,QAAA,CAAoB,IAApB,CAA0B4nC,CAA1B,CAAX,CAA8C,GAA9C,CAHmE,CAIxFI,EAAmB,IAAIvuC,MAAJ,CAAWujC,CAAAh9B,QAAA,CAAkB,IAAlB,CAAwB4nC,CAAxB,CAAX,CAA4C,GAA5C,CAwRvBt2B,EAAAyrB,YAAA,CAA2B4M,QAAQ,EAAG,CACpC,MAAO5M,EAD6B,CAgBtCzrB,EAAA0rB,UAAA,CAAyB4M,QAAQ,EAAG,CAClC,MAAO5M,EAD2B,CAIpC,OAAO1rB,EAhTqF,CAAlF,CAzCkB,CA6VhCG,QAASA,GAAiB,EAAG,CAC3B,IAAAqK,KAAA,CAAY,CAAC,YAAD,CAAe,SAAf,CAA0B,IAA1B,CAAgC,KAAhC,CAAuC,UAAvC,CACP,QAAQ,CAAClJ,CAAD;AAAeoB,CAAf,CAA0BlB,CAA1B,CAAgCE,CAAhC,CAAuCxC,CAAvC,CAAiD,CAiI5Dq5B,QAASA,EAAQ,CAAC9qC,CAAD,CAAKmmB,CAAL,CAAY4kB,CAAZ,CAAmBC,CAAnB,CAAgC,CAkC/ClmB,QAASA,EAAQ,EAAG,CACbmmB,CAAL,CAGEjrC,CAAAG,MAAA,CAAS,IAAT,CAAeie,CAAf,CAHF,CACEpe,CAAA,CAAGkrC,CAAH,CAFgB,CAlC2B,IAC3CD,EAA+B,CAA/BA,CAAYhwC,SAAA7C,OAD+B,CAE3CgmB,EAAO6sB,CAAA,CAxoWRjwC,EAAAjC,KAAA,CAwoW8BkC,SAxoW9B,CAwoWyCiF,CAxoWzC,CAwoWQ,CAAsC,EAFF,CAG3CirC,EAAcl2B,CAAAk2B,YAH6B,CAI3CC,EAAgBn2B,CAAAm2B,cAJ2B,CAK3CF,EAAY,CAL+B,CAM3CG,EAAanvC,CAAA,CAAU8uC,CAAV,CAAbK,EAAuC,CAACL,CANG,CAO3CtF,EAAWzf,CAAColB,CAAA,CAAYp3B,CAAZ,CAAkBF,CAAnBkS,OAAA,EAPgC,CAQ3C6c,GAAU4C,CAAA5C,QAEdiI,EAAA,CAAQ7uC,CAAA,CAAU6uC,CAAV,CAAA,CAAmBA,CAAnB,CAA2B,CAEnCjI,GAAAwI,aAAA,CAAuBH,CAAA,CAAYI,QAAa,EAAG,CAC7CF,CAAJ,CACE55B,CAAAwU,MAAA,CAAenB,CAAf,CADF,CAGEjR,CAAAxX,WAAA,CAAsByoB,CAAtB,CAEF4gB,EAAA8F,OAAA,CAAgBN,CAAA,EAAhB,CAEY,EAAZ,CAAIH,CAAJ,EAAiBG,CAAjB,EAA8BH,CAA9B,GACErF,CAAAC,QAAA,CAAiBuF,CAAjB,CAEA,CADAE,CAAA,CAActI,EAAAwI,aAAd,CACA,CAAA,OAAOG,CAAA,CAAU3I,EAAAwI,aAAV,CAHT,CAMKD,EAAL,EAAgBx3B,CAAA5O,OAAA,EAdiC,CAA5B,CAgBpBkhB,CAhBoB,CAkBvBslB,EAAA,CAAU3I,EAAAwI,aAAV,CAAA,CAAkC5F,CAElC,OAAO5C,GAhCwC,CAhIjD,IAAI2I,EAAY,EAsLhBX,EAAAzkB,OAAA,CAAkBqlB,QAAQ,CAAC5I,CAAD,CAAU,CAClC,MAAIA,EAAJ,EAAeA,CAAAwI,aAAf,GAAuCG,EAAvC,EACEA,CAAA,CAAU3I,CAAAwI,aAAV,CAAA9H,OAAA,CAAuC,UAAvC,CAGO,CAFPvuB,CAAAm2B,cAAA,CAAsBtI,CAAAwI,aAAtB,CAEO;AADP,OAAOG,CAAA,CAAU3I,CAAAwI,aAAV,CACA,CAAA,CAAA,CAJT,EAMO,CAAA,CAP2B,CAUpC,OAAOR,EAjMqD,CADlD,CADe,CA8S7Ba,QAASA,GAAU,CAAC1jC,CAAD,CAAO,CACpB2jC,CAAAA,CAAW3jC,CAAAhL,MAAA,CAAW,GAAX,CAGf,KAHA,IACI5D,EAAIuyC,CAAAxzC,OAER,CAAOiB,CAAA,EAAP,CAAA,CACEuyC,CAAA,CAASvyC,CAAT,CAAA,CAAc4J,EAAA,CAAiB2oC,CAAA,CAASvyC,CAAT,CAAjB,CAGhB,OAAOuyC,EAAA5oC,KAAA,CAAc,GAAd,CARiB,CAW1B6oC,QAASA,GAAgB,CAACC,CAAD,CAAcC,CAAd,CAA2B,CAClD,IAAIC,EAAY5D,CAAA,CAAW0D,CAAX,CAEhBC,EAAAE,WAAA,CAAyBD,CAAA3D,SACzB0D,EAAAG,OAAA,CAAqBF,CAAAG,SACrBJ,EAAAK,OAAA,CAAqBjxC,CAAA,CAAM6wC,CAAAK,KAAN,CAArB,EAA8CC,EAAA,CAAcN,CAAA3D,SAAd,CAA9C,EAAmF,IALjC,CASpDkE,QAASA,GAAW,CAACC,CAAD,CAAcT,CAAd,CAA2B,CAC7C,IAAIU,EAAsC,GAAtCA,GAAYD,CAAA9sC,OAAA,CAAmB,CAAnB,CACZ+sC,EAAJ,GACED,CADF,CACgB,GADhB,CACsBA,CADtB,CAGA,KAAIztC,EAAQqpC,CAAA,CAAWoE,CAAX,CACZT,EAAAW,OAAA,CAAqBnqC,kBAAA,CAAmBkqC,CAAA,EAAyC,GAAzC,GAAY1tC,CAAA4tC,SAAAjtC,OAAA,CAAsB,CAAtB,CAAZ,CACpCX,CAAA4tC,SAAAhqC,UAAA,CAAyB,CAAzB,CADoC,CACN5D,CAAA4tC,SADb,CAErBZ,EAAAa,SAAA,CAAuBpqC,EAAA,CAAczD,CAAA8tC,OAAd,CACvBd,EAAAe,OAAA,CAAqBvqC,kBAAA,CAAmBxD,CAAAsjB,KAAnB,CAGjB0pB,EAAAW,OAAJ,EAA0D,GAA1D,EAA0BX,CAAAW,OAAAhtC,OAAA,CAA0B,CAA1B,CAA1B,GACEqsC,CAAAW,OADF;AACuB,GADvB,CAC6BX,CAAAW,OAD7B,CAZ6C,CA4B/CK,QAASA,GAAY,CAACC,CAAD,CAAO/oB,CAAP,CAAY,CAC/B,GAX2C,CAW3C,GAAeA,CAXRgpB,YAAA,CAWaD,CAXb,CAA6B,CAA7B,CAWP,CACE,MAAO/oB,EAAAqB,OAAA,CAAW0nB,CAAA50C,OAAX,CAFsB,CAOjCitB,QAASA,GAAS,CAACpB,CAAD,CAAM,CACtB,IAAI1mB,EAAQ0mB,CAAAzmB,QAAA,CAAY,GAAZ,CACZ,OAAiB,EAAV,EAAAD,CAAA,CAAc0mB,CAAd,CAAoBA,CAAAqB,OAAA,CAAW,CAAX,CAAc/nB,CAAd,CAFL,CAKxB2vC,QAASA,GAAa,CAACjpB,CAAD,CAAM,CAC1B,MAAOA,EAAAhjB,QAAA,CAAY,UAAZ,CAAwB,IAAxB,CADmB,CAwB5BksC,QAASA,GAAgB,CAACC,CAAD,CAAUC,CAAV,CAAyBC,CAAzB,CAAqC,CAC5D,IAAAC,QAAA,CAAe,CAAA,CACfD,EAAA,CAAaA,CAAb,EAA2B,EAC3BzB,GAAA,CAAiBuB,CAAjB,CAA0B,IAA1B,CAQA,KAAAI,QAAA,CAAeC,QAAQ,CAACxpB,CAAD,CAAM,CAC3B,IAAIypB,EAAUX,EAAA,CAAaM,CAAb,CAA4BppB,CAA5B,CACd,IAAK,CAAA/rB,CAAA,CAASw1C,CAAT,CAAL,CACE,KAAMC,GAAA,CAAgB,UAAhB,CAA6E1pB,CAA7E,CACFopB,CADE,CAAN,CAIFd,EAAA,CAAYmB,CAAZ,CAAqB,IAArB,CAEK,KAAAhB,OAAL,GACE,IAAAA,OADF,CACgB,GADhB,CAIA,KAAAkB,UAAA,EAb2B,CAoB7B,KAAAA,UAAA,CAAiBC,QAAQ,EAAG,CAAA,IACtBhB,EAASjqC,EAAA,CAAW,IAAAgqC,SAAX,CADa,CAEtBvqB,EAAO,IAAAyqB,OAAA,CAAc,GAAd,CAAoB7pC,EAAA,CAAiB,IAAA6pC,OAAjB,CAApB,CAAoD,EAE/D,KAAAgB,MAAA,CAAanC,EAAA,CAAW,IAAAe,OAAX,CAAb,EAAwCG,CAAA,CAAS,GAAT;AAAeA,CAAf,CAAwB,EAAhE,EAAsExqB,CACtE,KAAA0rB,SAAA,CAAgBV,CAAhB,CAAgC,IAAAS,MAAAxoB,OAAA,CAAkB,CAAlB,CALN,CAQ5B,KAAA0oB,eAAA,CAAsBC,QAAQ,CAAChqB,CAAD,CAAMiqB,CAAN,CAAe,CAC3C,GAAIA,CAAJ,EAA8B,GAA9B,GAAeA,CAAA,CAAQ,CAAR,CAAf,CAIE,MADA,KAAA7rB,KAAA,CAAU6rB,CAAAlzC,MAAA,CAAc,CAAd,CAAV,CACO,CAAA,CAAA,CALkC,KAOvCmzC,CAPuC,CAO/BC,CAGRlyC,EAAA,CAAUiyC,CAAV,CAAmBpB,EAAA,CAAaK,CAAb,CAAsBnpB,CAAtB,CAAnB,CAAJ,EACEmqB,CAEE,CAFWD,CAEX,CAAAE,CAAA,CADEnyC,CAAA,CAAUiyC,CAAV,CAAmBpB,EAAA,CAAaO,CAAb,CAAyBa,CAAzB,CAAnB,CAAJ,CACiBd,CADjB,EACkCN,EAAA,CAAa,GAAb,CAAkBoB,CAAlB,CADlC,EAC+DA,CAD/D,EAGiBf,CAHjB,CAG2BgB,CAL7B,EAOWlyC,CAAA,CAAUiyC,CAAV,CAAmBpB,EAAA,CAAaM,CAAb,CAA4BppB,CAA5B,CAAnB,CAAJ,CACLoqB,CADK,CACUhB,CADV,CAC0Bc,CAD1B,CAEId,CAFJ,EAEqBppB,CAFrB,CAE2B,GAF3B,GAGLoqB,CAHK,CAGUhB,CAHV,CAKHgB,EAAJ,EACE,IAAAb,QAAA,CAAaa,CAAb,CAEF,OAAO,CAAEA,CAAAA,CAzBkC,CAvCe,CA+E9DC,QAASA,GAAmB,CAAClB,CAAD,CAAUC,CAAV,CAAyBkB,CAAzB,CAAqC,CAE/D1C,EAAA,CAAiBuB,CAAjB,CAA0B,IAA1B,CAQA,KAAAI,QAAA,CAAeC,QAAQ,CAACxpB,CAAD,CAAM,CAC3B,IAAIuqB,EAAiBzB,EAAA,CAAaK,CAAb,CAAsBnpB,CAAtB,CAAjBuqB,EAA+CzB,EAAA,CAAaM,CAAb,CAA4BppB,CAA5B,CAAnD,CACIwqB,CAECxyC,EAAA,CAAYuyC,CAAZ,CAAL,EAAiE,GAAjE,GAAoCA,CAAA9uC,OAAA,CAAsB,CAAtB,CAApC,CAcM,IAAA6tC,QAAJ,CACEkB,CADF,CACmBD,CADnB,EAGEC,CACA,CADiB,EACjB,CAAIxyC,CAAA,CAAYuyC,CAAZ,CAAJ,GACEpB,CACA,CADUnpB,CACV,CAAA,IAAAhjB,QAAA,EAFF,CAJF,CAdF,EAIEwtC,CACA,CADiB1B,EAAA,CAAawB,CAAb,CAAyBC,CAAzB,CACjB,CAAIvyC,CAAA,CAAYwyC,CAAZ,CAAJ,GAEEA,CAFF,CAEmBD,CAFnB,CALF,CAyBAjC,GAAA,CAAYkC,CAAZ,CAA4B,IAA5B,CAEqC/B,EAAAA,CAAAA,IAAAA,OAA6BU,KAAAA,EAAAA,CAAAA,CAoB5DsB,EAAqB,iBA1Lc,EA+LvC,GAAezqB,CA/LZgpB,YAAA,CA+LiBD,CA/LjB;AAA6B,CAA7B,CA+LH,GACE/oB,CADF,CACQA,CAAAhjB,QAAA,CAAY+rC,CAAZ,CAAkB,EAAlB,CADR,CAKI0B,EAAA93B,KAAA,CAAwBqN,CAAxB,CAAJ,GAKA,CALA,CAKO,CADP0qB,CACO,CADiBD,CAAA93B,KAAA,CAAwB3O,CAAxB,CACjB,EAAwB0mC,CAAA,CAAsB,CAAtB,CAAxB,CAAmD1mC,CAL1D,CA9BF,KAAAykC,OAAA,CAAc,CAEd,KAAAkB,UAAA,EAjC2B,CA0E7B,KAAAA,UAAA,CAAiBC,QAAQ,EAAG,CAAA,IACtBhB,EAASjqC,EAAA,CAAW,IAAAgqC,SAAX,CADa,CAEtBvqB,EAAO,IAAAyqB,OAAA,CAAc,GAAd,CAAoB7pC,EAAA,CAAiB,IAAA6pC,OAAjB,CAApB,CAAoD,EAE/D,KAAAgB,MAAA,CAAanC,EAAA,CAAW,IAAAe,OAAX,CAAb,EAAwCG,CAAA,CAAS,GAAT,CAAeA,CAAf,CAAwB,EAAhE,EAAsExqB,CACtE,KAAA0rB,SAAA,CAAgBX,CAAhB,EAA2B,IAAAU,MAAA,CAAaS,CAAb,CAA0B,IAAAT,MAA1B,CAAuC,EAAlE,CAL0B,CAQ5B,KAAAE,eAAA,CAAsBC,QAAQ,CAAChqB,CAAD,CAAMiqB,CAAN,CAAe,CAC3C,MAAI7oB,GAAA,CAAU+nB,CAAV,CAAJ,EAA0B/nB,EAAA,CAAUpB,CAAV,CAA1B,EACE,IAAAupB,QAAA,CAAavpB,CAAb,CACO,CAAA,CAAA,CAFT,EAIO,CAAA,CALoC,CA5FkB,CAgHjE2qB,QAASA,GAA0B,CAACxB,CAAD,CAAUC,CAAV,CAAyBkB,CAAzB,CAAqC,CACtE,IAAAhB,QAAA,CAAe,CAAA,CACfe,GAAAnuC,MAAA,CAA0B,IAA1B,CAAgClF,SAAhC,CAEA,KAAA+yC,eAAA,CAAsBC,QAAQ,CAAChqB,CAAD,CAAMiqB,CAAN,CAAe,CAC3C,GAAIA,CAAJ,EAA8B,GAA9B,GAAeA,CAAA,CAAQ,CAAR,CAAf,CAIE,MADA,KAAA7rB,KAAA,CAAU6rB,CAAAlzC,MAAA,CAAc,CAAd,CAAV,CACO,CAAA,CAAA,CAGT,KAAIqzC,CAAJ,CACIF,CAEAf,EAAJ,EAAe/nB,EAAA,CAAUpB,CAAV,CAAf;AACEoqB,CADF,CACiBpqB,CADjB,CAEO,CAAKkqB,CAAL,CAAcpB,EAAA,CAAaM,CAAb,CAA4BppB,CAA5B,CAAd,EACLoqB,CADK,CACUjB,CADV,CACoBmB,CADpB,CACiCJ,CADjC,CAEId,CAFJ,GAEsBppB,CAFtB,CAE4B,GAF5B,GAGLoqB,CAHK,CAGUhB,CAHV,CAKHgB,EAAJ,EACE,IAAAb,QAAA,CAAaa,CAAb,CAEF,OAAO,CAAEA,CAAAA,CArBkC,CAwB7C,KAAAT,UAAA,CAAiBC,QAAQ,EAAG,CAAA,IACtBhB,EAASjqC,EAAA,CAAW,IAAAgqC,SAAX,CADa,CAEtBvqB,EAAO,IAAAyqB,OAAA,CAAc,GAAd,CAAoB7pC,EAAA,CAAiB,IAAA6pC,OAAjB,CAApB,CAAoD,EAE/D,KAAAgB,MAAA,CAAanC,EAAA,CAAW,IAAAe,OAAX,CAAb,EAAwCG,CAAA,CAAS,GAAT,CAAeA,CAAf,CAAwB,EAAhE,EAAsExqB,CAEtE,KAAA0rB,SAAA,CAAgBX,CAAhB,CAA0BmB,CAA1B,CAAuC,IAAAT,MANb,CA5B0C,CAkXxEe,QAASA,GAAc,CAAC3X,CAAD,CAAW,CAChC,MAAO,SAAQ,EAAG,CAChB,MAAO,KAAA,CAAKA,CAAL,CADS,CADc,CAOlC4X,QAASA,GAAoB,CAAC5X,CAAD,CAAW6X,CAAX,CAAuB,CAClD,MAAO,SAAQ,CAACv1C,CAAD,CAAQ,CACrB,GAAIyC,CAAA,CAAYzC,CAAZ,CAAJ,CACE,MAAO,KAAA,CAAK09B,CAAL,CAGT,KAAA,CAAKA,CAAL,CAAA,CAAiB6X,CAAA,CAAWv1C,CAAX,CACjB,KAAAo0C,UAAA,EAEA,OAAO,KARc,CAD2B,CA8CpDp6B,QAASA,GAAiB,EAAG,CAAA,IACvB+6B,EAAa,EADU,CAEvBS,EAAY,CACV7jB,QAAS,CAAA,CADC,CAEV8jB,YAAa,CAAA,CAFH,CAGVC,aAAc,CAAA,CAHJ,CAahB,KAAAX,WAAA,CAAkBY,QAAQ,CAACtrC,CAAD,CAAS,CACjC,MAAI3H,EAAA,CAAU2H,CAAV,CAAJ,EACE0qC,CACO,CADM1qC,CACN,CAAA,IAFT;AAIS0qC,CALwB,CA4BnC,KAAAS,UAAA,CAAiBI,QAAQ,CAACxmB,CAAD,CAAO,CAC9B,MAAIrsB,GAAA,CAAUqsB,CAAV,CAAJ,EACEomB,CAAA7jB,QACO,CADavC,CACb,CAAA,IAFT,EAGW1uB,CAAA,CAAS0uB,CAAT,CAAJ,EAEDrsB,EAAA,CAAUqsB,CAAAuC,QAAV,CAYG,GAXL6jB,CAAA7jB,QAWK,CAXevC,CAAAuC,QAWf,EARH5uB,EAAA,CAAUqsB,CAAAqmB,YAAV,CAQG,GAPLD,CAAAC,YAOK,CAPmBrmB,CAAAqmB,YAOnB,EAJH1yC,EAAA,CAAUqsB,CAAAsmB,aAAV,CAIG,GAHLF,CAAAE,aAGK,CAHoBtmB,CAAAsmB,aAGpB,EAAA,IAdF,EAgBEF,CApBqB,CA+DhC,KAAAjyB,KAAA,CAAY,CAAC,YAAD,CAAe,UAAf,CAA2B,UAA3B,CAAuC,cAAvC,CAAuD,SAAvD,CACR,QAAQ,CAAClJ,CAAD,CAAapC,CAAb,CAAuB8C,CAAvB,CAAiC0Z,CAAjC,CAA+ChZ,CAA/C,CAAwD,CA2BlEo6B,QAASA,EAAyB,CAACprB,CAAD,CAAMhjB,CAAN,CAAegkB,CAAf,CAAsB,CACtD,IAAIqqB,EAAS/7B,CAAA0Q,IAAA,EAAb,CACIsrB,EAAWh8B,CAAAi8B,QACf,IAAI,CACF/9B,CAAAwS,IAAA,CAAaA,CAAb,CAAkBhjB,CAAlB,CAA2BgkB,CAA3B,CAKA,CAAA1R,CAAAi8B,QAAA,CAAoB/9B,CAAAwT,MAAA,EANlB,CAOF,MAAOjjB,CAAP,CAAU,CAKV,KAHAuR,EAAA0Q,IAAA,CAAcqrB,CAAd,CAGMttC,CAFNuR,CAAAi8B,QAEMxtC,CAFcutC,CAEdvtC,CAAAA,CAAN,CALU,CAV0C,CAqJxDytC,QAASA,EAAmB,CAACH,CAAD,CAASC,CAAT,CAAmB,CAC7C17B,CAAA67B,WAAA,CAAsB,wBAAtB,CAAgDn8B,CAAAo8B,OAAA,EAAhD,CAAoEL,CAApE,CACE/7B,CAAAi8B,QADF;AACqBD,CADrB,CAD6C,CAhLmB,IAC9Dh8B,CAD8D,CAE9Dq8B,CACA7pB,EAAAA,CAAWtU,CAAAsU,SAAA,EAHmD,KAI9D8pB,EAAap+B,CAAAwS,IAAA,EAJiD,CAK9DmpB,CAEJ,IAAI4B,CAAA7jB,QAAJ,CAAuB,CACrB,GAAKpF,CAAAA,CAAL,EAAiBipB,CAAAC,YAAjB,CACE,KAAMtB,GAAA,CAAgB,QAAhB,CAAN,CAGFP,CAAA,CAAqByC,CA1uBlBltC,UAAA,CAAc,CAAd,CA0uBkBktC,CA1uBDryC,QAAA,CAAY,GAAZ,CA0uBCqyC,CA1uBgBryC,QAAA,CAAY,IAAZ,CAAjB,CAAqC,CAArC,CAAjB,CA0uBH,EAAoCuoB,CAApC,EAAgD,GAAhD,CACA6pB,EAAA,CAAer7B,CAAA8P,QAAA,CAAmB8oB,EAAnB,CAAsCyB,EANhC,CAAvB,IAQExB,EACA,CADU/nB,EAAA,CAAUwqB,CAAV,CACV,CAAAD,CAAA,CAAetB,EAEjB,KAAIjB,EAA0BD,CArvBzB9nB,OAAA,CAAW,CAAX,CAAcD,EAAA,CAqvBW+nB,CArvBX,CAAAH,YAAA,CAA2B,GAA3B,CAAd,CAAgD,CAAhD,CAuvBL15B,EAAA,CAAY,IAAIq8B,CAAJ,CAAiBxC,CAAjB,CAA0BC,CAA1B,CAAyC,GAAzC,CAA+CkB,CAA/C,CACZh7B,EAAAy6B,eAAA,CAAyB6B,CAAzB,CAAqCA,CAArC,CAEAt8B,EAAAi8B,QAAA,CAAoB/9B,CAAAwT,MAAA,EAEpB,KAAI6qB,EAAoB,2BAqBxB7hB,EAAArnB,GAAA,CAAgB,OAAhB,CAAyB,QAAQ,CAAC6U,CAAD,CAAQ,CAIvC,GAAKuzB,CAAAE,aAAL,EAA+Ba,CAAAt0B,CAAAs0B,QAA/B,EAAgDC,CAAAv0B,CAAAu0B,QAAhD,EAAiEC,CAAAx0B,CAAAw0B,SAAjE,EAAkG,CAAlG,EAAmFx0B,CAAAy0B,MAAnF,EAAuH,CAAvH,EAAuGz0B,CAAA00B,OAAvG,CAAA,CAKA,IAHA,IAAI7tB,EAAMnqB,CAAA,CAAOsjB,CAAAkB,OAAP,CAGV,CAA6B,GAA7B,GAAOzf,EAAA,CAAUolB,CAAA,CAAI,CAAJ,CAAV,CAAP,CAAA,CAEE,GAAIA,CAAA,CAAI,CAAJ,CAAJ,GAAe2L,CAAA,CAAa,CAAb,CAAf,EAAmC,CAAA,CAAC3L,CAAD,CAAOA,CAAA/mB,OAAA,EAAP,EAAqB,CAArB,CAAnC,CAA4D,MAG9D;IAAI60C,EAAU9tB,CAAA1lB,KAAA,CAAS,MAAT,CAAd,CAGIsxC,EAAU5rB,CAAAzlB,KAAA,CAAS,MAAT,CAAVqxC,EAA8B5rB,CAAAzlB,KAAA,CAAS,YAAT,CAE9B3C,EAAA,CAASk2C,CAAT,CAAJ,EAAgD,4BAAhD,GAAyBA,CAAAp0C,SAAA,EAAzB,GAGEo0C,CAHF,CAGYhI,CAAA,CAAWgI,CAAAzf,QAAX,CAAA5L,KAHZ,CAOI+qB,EAAApzC,KAAA,CAAuB0zC,CAAvB,CAAJ,EAEIA,CAAAA,CAFJ,EAEgB9tB,CAAAzlB,KAAA,CAAS,QAAT,CAFhB,EAEuC4e,CAAAC,mBAAA,EAFvC,EAGM,CAAAnI,CAAAy6B,eAAA,CAAyBoC,CAAzB,CAAkClC,CAAlC,CAHN,GAOIzyB,CAAA40B,eAAA,EAEA,CAAI98B,CAAAo8B,OAAA,EAAJ,EAA0Bl+B,CAAAwS,IAAA,EAA1B,GACEpQ,CAAA5O,OAAA,EAEA,CAAAgQ,CAAA5P,QAAA,CAAgB,0BAAhB,CAAA,CAA8C,CAAA,CAHhD,CATJ,CAtBA,CAJuC,CAAzC,CA8CI6nC,GAAA,CAAc35B,CAAAo8B,OAAA,EAAd,CAAJ,EAAyCzC,EAAA,CAAc2C,CAAd,CAAzC,EACEp+B,CAAAwS,IAAA,CAAa1Q,CAAAo8B,OAAA,EAAb,CAAiC,CAAA,CAAjC,CAGF,KAAIW,EAAe,CAAA,CAGnB7+B,EAAAgU,YAAA,CAAqB,QAAQ,CAAC8qB,CAAD,CAASC,CAAT,CAAmB,CAE1Cv0C,CAAA,CAAY8wC,EAAA,CAAaM,CAAb,CAA4BkD,CAA5B,CAAZ,CAAJ,CAEEt7B,CAAAtP,SAAAof,KAFF,CAE0BwrB,CAF1B,EAMA18B,CAAAxX,WAAA,CAAsB,QAAQ,EAAG,CAC/B,IAAIizC,EAAS/7B,CAAAo8B,OAAA,EAAb,CACIJ,EAAWh8B,CAAAi8B,QADf,CAEI5zB,CACJ20B,EAAA,CAASrD,EAAA,CAAcqD,CAAd,CACTh9B,EAAAi6B,QAAA,CAAkB+C,CAAlB,CACAh9B,EAAAi8B,QAAA;AAAoBgB,CAEpB50B,EAAA,CAAmB/H,CAAA67B,WAAA,CAAsB,sBAAtB,CAA8Ca,CAA9C,CAAsDjB,CAAtD,CACfkB,CADe,CACLjB,CADK,CAAA3zB,iBAKfrI,EAAAo8B,OAAA,EAAJ,GAA2BY,CAA3B,GAEI30B,CAAJ,EACErI,CAAAi6B,QAAA,CAAkB8B,CAAlB,CAEA,CADA/7B,CAAAi8B,QACA,CADoBD,CACpB,CAAAF,CAAA,CAA0BC,CAA1B,CAAkC,CAAA,CAAlC,CAAyCC,CAAzC,CAHF,GAKEe,CACA,CADe,CAAA,CACf,CAAAb,CAAA,CAAoBH,CAApB,CAA4BC,CAA5B,CANF,CAFA,CAb+B,CAAjC,CAwBA,CAAK17B,CAAAuxB,QAAL,EAAyBvxB,CAAA48B,QAAA,EA9BzB,CAF8C,CAAhD,CAoCA58B,EAAAvX,OAAA,CAAkBo0C,QAAuB,EAAG,CAC1C,IAAIpB,EAASpC,EAAA,CAAcz7B,CAAAwS,IAAA,EAAd,CAAb,CACIssB,EAASrD,EAAA,CAAc35B,CAAAo8B,OAAA,EAAd,CADb,CAEIJ,EAAW99B,CAAAwT,MAAA,EAFf,CAGI0rB,EAAiBp9B,CAAAq9B,UAHrB,CAIIC,EAAoBvB,CAApBuB,GAA+BN,CAA/BM,EACDt9B,CAAAg6B,QADCsD,EACoBt8B,CAAA8P,QADpBwsB,EACwCtB,CADxCsB,GACqDt9B,CAAAi8B,QAEzD,IAAIc,CAAJ,EAAoBO,CAApB,CACEP,CAEA,CAFe,CAAA,CAEf,CAAAz8B,CAAAxX,WAAA,CAAsB,QAAQ,EAAG,CAC/B,IAAIk0C,EAASh9B,CAAAo8B,OAAA,EAAb,CACI/zB,EAAmB/H,CAAA67B,WAAA,CAAsB,sBAAtB,CAA8Ca,CAA9C,CAAsDjB,CAAtD,CACnB/7B,CAAAi8B,QADmB,CACAD,CADA,CAAA3zB,iBAKnBrI,EAAAo8B,OAAA,EAAJ,GAA2BY,CAA3B,GAEI30B,CAAJ,EACErI,CAAAi6B,QAAA,CAAkB8B,CAAlB,CACA,CAAA/7B,CAAAi8B,QAAA,CAAoBD,CAFtB,GAIMsB,CAIJ,EAHExB,CAAA,CAA0BkB,CAA1B,CAAkCI,CAAlC,CAC0BpB,CAAA,GAAah8B,CAAAi8B,QAAb,CAAiC,IAAjC,CAAwCj8B,CAAAi8B,QADlE,CAGF;AAAAC,CAAA,CAAoBH,CAApB,CAA4BC,CAA5B,CARF,CAFA,CAP+B,CAAjC,CAsBFh8B,EAAAq9B,UAAA,CAAsB,CAAA,CAjCoB,CAA5C,CAuCA,OAAOr9B,EA9K2D,CADxD,CA1Ge,CA8U7BG,QAASA,GAAY,EAAG,CAAA,IAClBo9B,EAAQ,CAAA,CADU,CAElB/wC,EAAO,IASX,KAAAgxC,aAAA,CAAoBC,QAAQ,CAACC,CAAD,CAAO,CACjC,MAAI/0C,EAAA,CAAU+0C,CAAV,CAAJ,EACEH,CACK,CADGG,CACH,CAAA,IAFP,EAISH,CALwB,CASnC,KAAA/zB,KAAA,CAAY,CAAC,SAAD,CAAY,QAAQ,CAAC9H,CAAD,CAAU,CAwDxCi8B,QAASA,EAAW,CAACvpC,CAAD,CAAM,CACpBA,CAAJ,WAAmBwpC,MAAnB,GACMxpC,CAAA8X,MAAJ,CACE9X,CADF,CACSA,CAAA6X,QAAD,EAAoD,EAApD,GAAgB7X,CAAA8X,MAAAjiB,QAAA,CAAkBmK,CAAA6X,QAAlB,CAAhB,CACA,SADA,CACY7X,CAAA6X,QADZ,CAC0B,IAD1B,CACiC7X,CAAA8X,MADjC,CAEA9X,CAAA8X,MAHR,CAIW9X,CAAAypC,UAJX,GAKEzpC,CALF,CAKQA,CAAA6X,QALR,CAKsB,IALtB,CAK6B7X,CAAAypC,UAL7B,CAK6C,GAL7C,CAKmDzpC,CAAAw5B,KALnD,CADF,CASA,OAAOx5B,EAViB,CAa1B0pC,QAASA,EAAU,CAACpyC,CAAD,CAAO,CAAA,IACpBqyC,EAAUr8B,CAAAq8B,QAAVA,EAA6B,EADT,CAEpBC,EAAQD,CAAA,CAAQryC,CAAR,CAARsyC,EAAyBD,CAAAE,IAAzBD,EAAwC71C,CACxC+1C,EAAAA,CAAW,CAAA,CAIf,IAAI,CACFA,CAAA,CAAW,CAAEtxC,CAAAoxC,CAAApxC,MADX,CAEF,MAAO6B,CAAP,CAAU,EAEZ,MAAIyvC,EAAJ,CACS,QAAQ,EAAG,CAChB,IAAIrzB,EAAO,EACX3lB,EAAA,CAAQwC,SAAR,CAAmB,QAAQ,CAAC0M,CAAD,CAAM,CAC/ByW,CAAAtgB,KAAA,CAAUozC,CAAA,CAAYvpC,CAAZ,CAAV,CAD+B,CAAjC,CAGA;MAAO4pC,EAAApxC,MAAA,CAAYmxC,CAAZ,CAAqBlzB,CAArB,CALS,CADpB,CAYO,QAAQ,CAACszB,CAAD,CAAOC,CAAP,CAAa,CAC1BJ,CAAA,CAAMG,CAAN,CAAoB,IAAR,EAAAC,CAAA,CAAe,EAAf,CAAoBA,CAAhC,CAD0B,CAvBJ,CApE1B,MAAO,CAQLH,IAAKH,CAAA,CAAW,KAAX,CARA,CAiBLtpB,KAAMspB,CAAA,CAAW,MAAX,CAjBD,CA0BLO,KAAMP,CAAA,CAAW,MAAX,CA1BD,CAmCL7tB,MAAO6tB,CAAA,CAAW,OAAX,CAnCF,CA4CLP,MAAQ,QAAQ,EAAG,CACjB,IAAI9wC,EAAKqxC,CAAA,CAAW,OAAX,CAET,OAAO,SAAQ,EAAG,CACZP,CAAJ,EACE9wC,CAAAG,MAAA,CAASJ,CAAT,CAAe9E,SAAf,CAFc,CAHD,CAAX,EA5CH,CADiC,CAA9B,CApBU,CA4JxB42C,QAASA,GAAoB,CAAC/tC,CAAD,CAAOguC,CAAP,CAAuB,CAClD,GAAa,kBAAb,GAAIhuC,CAAJ,EAA4C,kBAA5C,GAAmCA,CAAnC,EACgB,kBADhB,GACOA,CADP,EAC+C,kBAD/C,GACsCA,CADtC,EAEgB,WAFhB,GAEOA,CAFP,CAGE,KAAMiuC,EAAA,CAAa,SAAb,CAEmBD,CAFnB,CAAN,CAIF,MAAOhuC,EAR2C,CAWpDkuC,QAASA,GAAc,CAACluC,CAAD,CAAO,CAe5B,MAAOA,EAAP,CAAc,EAfc,CAkB9BmuC,QAASA,GAAgB,CAACl6C,CAAD,CAAM+5C,CAAN,CAAsB,CAE7C,GAAI/5C,CAAJ,CAAS,CACP,GAAIA,CAAAuG,YAAJ,GAAwBvG,CAAxB,CACE,KAAMg6C,EAAA,CAAa,QAAb,CAEFD,CAFE,CAAN,CAGK,GACH/5C,CAAAH,OADG,GACYG,CADZ,CAEL,KAAMg6C,EAAA,CAAa,YAAb,CAEFD,CAFE,CAAN,CAGK,GACH/5C,CAAAm6C,SADG;CACcn6C,CAAA4C,SADd,EAC+B5C,CAAA6E,KAD/B,EAC2C7E,CAAA8E,KAD3C,EACuD9E,CAAA+E,KADvD,EAEL,KAAMi1C,EAAA,CAAa,SAAb,CAEFD,CAFE,CAAN,CAGK,GACH/5C,CADG,GACKM,MADL,CAEL,KAAM05C,EAAA,CAAa,SAAb,CAEFD,CAFE,CAAN,CAjBK,CAsBT,MAAO/5C,EAxBsC,CA+B/Co6C,QAASA,GAAkB,CAACp6C,CAAD,CAAM+5C,CAAN,CAAsB,CAC/C,GAAI/5C,CAAJ,CAAS,CACP,GAAIA,CAAAuG,YAAJ,GAAwBvG,CAAxB,CACE,KAAMg6C,EAAA,CAAa,QAAb,CAEJD,CAFI,CAAN,CAGK,GAAI/5C,CAAJ,GAAYq6C,EAAZ,EAAoBr6C,CAApB,GAA4Bs6C,EAA5B,EAAqCt6C,CAArC,GAA6Cu6C,EAA7C,CACL,KAAMP,EAAA,CAAa,QAAb,CAEJD,CAFI,CAAN,CANK,CADsC,CAcjDS,QAASA,GAAuB,CAACx6C,CAAD,CAAM+5C,CAAN,CAAsB,CACpD,GAAI/5C,CAAJ,GACMA,CADN,GACcuG,CAAC,CAADA,aADd,EACiCvG,CADjC,GACyCuG,CAAC,CAAA,CAADA,aADzC,EACgEvG,CADhE,GACwE,EAAAuG,YADxE,EAEMvG,CAFN,GAEc,EAAAuG,YAFd,EAEgCvG,CAFhC,GAEwC,EAAAuG,YAFxC,EAE0DvG,CAF1D,GAEkE+lB,QAAAxf,YAFlE,EAGI,KAAMyzC,EAAA,CAAa,QAAb,CACyDD,CADzD,CAAN,CAJgD,CAsjBtDU,QAASA,GAAS,CAACtS,CAAD,CAAI4B,CAAJ,CAAO,CACvB,MAAoB,WAAb,GAAA,MAAO5B,EAAP,CAA2BA,CAA3B,CAA+B4B,CADf,CAIzB2Q,QAASA,GAAM,CAACl6B,CAAD,CAAIm6B,CAAJ,CAAO,CACpB,MAAiB,WAAjB,GAAI,MAAOn6B,EAAX,CAAqCm6B,CAArC,CACiB,WAAjB;AAAI,MAAOA,EAAX,CAAqCn6B,CAArC,CACOA,CADP,CACWm6B,CAHS,CAWtBC,QAASA,EAA+B,CAACC,CAAD,CAAMzgC,CAAN,CAAe,CACrD,IAAI0gC,CAAJ,CACIC,CACJ,QAAQF,CAAA3zC,KAAR,EACA,KAAK8zC,CAAAC,QAAL,CACEH,CAAA,CAAe,CAAA,CACfp6C,EAAA,CAAQm6C,CAAAxL,KAAR,CAAkB,QAAQ,CAAC6L,CAAD,CAAO,CAC/BN,CAAA,CAAgCM,CAAAvT,WAAhC,CAAiDvtB,CAAjD,CACA0gC,EAAA,CAAeA,CAAf,EAA+BI,CAAAvT,WAAAx1B,SAFA,CAAjC,CAIA0oC,EAAA1oC,SAAA,CAAe2oC,CACf,MACF,MAAKE,CAAAG,QAAL,CACEN,CAAA1oC,SAAA,CAAe,CAAA,CACf0oC,EAAAO,QAAA,CAAc,EACd,MACF,MAAKJ,CAAAK,gBAAL,CACET,CAAA,CAAgCC,CAAAS,SAAhC,CAA8ClhC,CAA9C,CACAygC,EAAA1oC,SAAA,CAAe0oC,CAAAS,SAAAnpC,SACf0oC,EAAAO,QAAA,CAAcP,CAAAS,SAAAF,QACd,MACF,MAAKJ,CAAAO,iBAAL,CACEX,CAAA,CAAgCC,CAAAW,KAAhC,CAA0CphC,CAA1C,CACAwgC,EAAA,CAAgCC,CAAAY,MAAhC,CAA2CrhC,CAA3C,CACAygC,EAAA1oC,SAAA,CAAe0oC,CAAAW,KAAArpC,SAAf,EAAoC0oC,CAAAY,MAAAtpC,SACpC0oC,EAAAO,QAAA,CAAcP,CAAAW,KAAAJ,QAAAxzC,OAAA,CAAwBizC,CAAAY,MAAAL,QAAxB,CACd,MACF,MAAKJ,CAAAU,kBAAL,CACEd,CAAA,CAAgCC,CAAAW,KAAhC,CAA0CphC,CAA1C,CACAwgC,EAAA,CAAgCC,CAAAY,MAAhC;AAA2CrhC,CAA3C,CACAygC,EAAA1oC,SAAA,CAAe0oC,CAAAW,KAAArpC,SAAf,EAAoC0oC,CAAAY,MAAAtpC,SACpC0oC,EAAAO,QAAA,CAAcP,CAAA1oC,SAAA,CAAe,EAAf,CAAoB,CAAC0oC,CAAD,CAClC,MACF,MAAKG,CAAAW,sBAAL,CACEf,CAAA,CAAgCC,CAAAl2C,KAAhC,CAA0CyV,CAA1C,CACAwgC,EAAA,CAAgCC,CAAAe,UAAhC,CAA+CxhC,CAA/C,CACAwgC,EAAA,CAAgCC,CAAAgB,WAAhC,CAAgDzhC,CAAhD,CACAygC,EAAA1oC,SAAA,CAAe0oC,CAAAl2C,KAAAwN,SAAf,EAAoC0oC,CAAAe,UAAAzpC,SAApC,EAA8D0oC,CAAAgB,WAAA1pC,SAC9D0oC,EAAAO,QAAA,CAAcP,CAAA1oC,SAAA,CAAe,EAAf,CAAoB,CAAC0oC,CAAD,CAClC,MACF,MAAKG,CAAAc,WAAL,CACEjB,CAAA1oC,SAAA,CAAe,CAAA,CACf0oC,EAAAO,QAAA,CAAc,CAACP,CAAD,CACd,MACF,MAAKG,CAAAe,iBAAL,CACEnB,CAAA,CAAgCC,CAAAmB,OAAhC,CAA4C5hC,CAA5C,CACIygC,EAAAoB,SAAJ,EACErB,CAAA,CAAgCC,CAAA1b,SAAhC,CAA8C/kB,CAA9C,CAEFygC,EAAA1oC,SAAA,CAAe0oC,CAAAmB,OAAA7pC,SAAf,GAAuC,CAAC0oC,CAAAoB,SAAxC,EAAwDpB,CAAA1b,SAAAhtB,SAAxD,CACA0oC,EAAAO,QAAA,CAAc,CAACP,CAAD,CACd,MACF,MAAKG,CAAAkB,eAAL,CACEpB,CAAA,CAAeD,CAAAvoC,OAAA,CAxDV,CAwDmC8H,CAzDjCnS,CAyD0C4yC,CAAAsB,OAAApwC,KAzD1C9D,CACDo8B,UAwDS;AAAqD,CAAA,CACpE0W,EAAA,CAAc,EACdr6C,EAAA,CAAQm6C,CAAA33C,UAAR,CAAuB,QAAQ,CAACg4C,CAAD,CAAO,CACpCN,CAAA,CAAgCM,CAAhC,CAAsC9gC,CAAtC,CACA0gC,EAAA,CAAeA,CAAf,EAA+BI,CAAA/oC,SAC1B+oC,EAAA/oC,SAAL,EACE4oC,CAAAh1C,KAAAqC,MAAA,CAAuB2yC,CAAvB,CAAoCG,CAAAE,QAApC,CAJkC,CAAtC,CAOAP,EAAA1oC,SAAA,CAAe2oC,CACfD,EAAAO,QAAA,CAAcP,CAAAvoC,OAAA,EAlER+xB,CAkEkCjqB,CAnEjCnS,CAmE0C4yC,CAAAsB,OAAApwC,KAnE1C9D,CACDo8B,UAkEQ,CAAsD0W,CAAtD,CAAoE,CAACF,CAAD,CAClF,MACF,MAAKG,CAAAoB,qBAAL,CACExB,CAAA,CAAgCC,CAAAW,KAAhC,CAA0CphC,CAA1C,CACAwgC,EAAA,CAAgCC,CAAAY,MAAhC,CAA2CrhC,CAA3C,CACAygC,EAAA1oC,SAAA,CAAe0oC,CAAAW,KAAArpC,SAAf,EAAoC0oC,CAAAY,MAAAtpC,SACpC0oC,EAAAO,QAAA,CAAc,CAACP,CAAD,CACd,MACF,MAAKG,CAAAqB,gBAAL,CACEvB,CAAA,CAAe,CAAA,CACfC,EAAA,CAAc,EACdr6C,EAAA,CAAQm6C,CAAAz4B,SAAR,CAAsB,QAAQ,CAAC84B,CAAD,CAAO,CACnCN,CAAA,CAAgCM,CAAhC,CAAsC9gC,CAAtC,CACA0gC,EAAA,CAAeA,CAAf,EAA+BI,CAAA/oC,SAC1B+oC,EAAA/oC,SAAL,EACE4oC,CAAAh1C,KAAAqC,MAAA,CAAuB2yC,CAAvB,CAAoCG,CAAAE,QAApC,CAJiC,CAArC,CAOAP,EAAA1oC,SAAA,CAAe2oC,CACfD,EAAAO,QAAA,CAAcL,CACd,MACF,MAAKC,CAAAsB,iBAAL,CACExB,CAAA,CAAe,CAAA,CACfC,EAAA,CAAc,EACdr6C,EAAA,CAAQm6C,CAAA0B,WAAR,CAAwB,QAAQ,CAACpd,CAAD,CAAW,CACzCyb,CAAA,CAAgCzb,CAAA19B,MAAhC;AAAgD2Y,CAAhD,CACA0gC,EAAA,CAAeA,CAAf,EAA+B3b,CAAA19B,MAAA0Q,SAA/B,EAA0D,CAACgtB,CAAA8c,SACtD9c,EAAA19B,MAAA0Q,SAAL,EACE4oC,CAAAh1C,KAAAqC,MAAA,CAAuB2yC,CAAvB,CAAoC5b,CAAA19B,MAAA25C,QAApC,CAJuC,CAA3C,CAOAP,EAAA1oC,SAAA,CAAe2oC,CACfD,EAAAO,QAAA,CAAcL,CACd,MACF,MAAKC,CAAAwB,eAAL,CACE3B,CAAA1oC,SAAA,CAAe,CAAA,CACf0oC,EAAAO,QAAA,CAAc,EACd,MACF,MAAKJ,CAAAyB,iBAAL,CACE5B,CAAA1oC,SACA,CADe,CAAA,CACf,CAAA0oC,CAAAO,QAAA,CAAc,EApGhB,CAHqD,CA4GvDsB,QAASA,GAAS,CAACrN,CAAD,CAAO,CACvB,GAAmB,CAAnB,EAAIA,CAAAhvC,OAAJ,CAAA,CACIs8C,CAAAA,CAAiBtN,CAAA,CAAK,CAAL,CAAA1H,WACrB,KAAI17B,EAAY0wC,CAAAvB,QAChB,OAAyB,EAAzB,GAAInvC,CAAA5L,OAAJ,CAAmC4L,CAAnC,CACOA,CAAA,CAAU,CAAV,CAAA,GAAiB0wC,CAAjB,CAAkC1wC,CAAlC,CAA8C3F,IAAAA,EAJrD,CADuB,CAQzBs2C,QAASA,GAAY,CAAC/B,CAAD,CAAM,CACzB,MAAOA,EAAA3zC,KAAP,GAAoB8zC,CAAAc,WAApB,EAAsCjB,CAAA3zC,KAAtC,GAAmD8zC,CAAAe,iBAD1B,CAI3Bc,QAASA,GAAa,CAAChC,CAAD,CAAM,CAC1B,GAAwB,CAAxB,GAAIA,CAAAxL,KAAAhvC,OAAJ,EAA6Bu8C,EAAA,CAAa/B,CAAAxL,KAAA,CAAS,CAAT,CAAA1H,WAAb,CAA7B,CACE,MAAO,CAACzgC,KAAM8zC,CAAAoB,qBAAP;AAAiCZ,KAAMX,CAAAxL,KAAA,CAAS,CAAT,CAAA1H,WAAvC,CAA+D8T,MAAO,CAACv0C,KAAM8zC,CAAA8B,iBAAP,CAAtE,CAAoGC,SAAU,GAA9G,CAFiB,CAM5BC,QAASA,GAAS,CAACnC,CAAD,CAAM,CACtB,MAA2B,EAA3B,GAAOA,CAAAxL,KAAAhvC,OAAP,EACwB,CADxB,GACIw6C,CAAAxL,KAAAhvC,OADJ,GAEIw6C,CAAAxL,KAAA,CAAS,CAAT,CAAA1H,WAAAzgC,KAFJ,GAEoC8zC,CAAAG,QAFpC,EAGIN,CAAAxL,KAAA,CAAS,CAAT,CAAA1H,WAAAzgC,KAHJ,GAGoC8zC,CAAAqB,gBAHpC,EAIIxB,CAAAxL,KAAA,CAAS,CAAT,CAAA1H,WAAAzgC,KAJJ,GAIoC8zC,CAAAsB,iBAJpC,CADsB,CAYxBW,QAASA,GAAW,CAACC,CAAD,CAAa9iC,CAAb,CAAsB,CACxC,IAAA8iC,WAAA,CAAkBA,CAClB,KAAA9iC,QAAA,CAAeA,CAFyB,CAihB1C+iC,QAASA,GAAc,CAACD,CAAD,CAAa9iC,CAAb,CAAsB,CAC3C,IAAA8iC,WAAA,CAAkBA,CAClB,KAAA9iC,QAAA,CAAeA,CAF4B,CA4Z7CgjC,QAASA,GAA6B,CAACrxC,CAAD,CAAO,CAC3C,MAAe,aAAf,EAAOA,CADoC,CAM7CsxC,QAASA,GAAU,CAAC57C,CAAD,CAAQ,CACzB,MAAOX,EAAA,CAAWW,CAAAgB,QAAX,CAAA,CAA4BhB,CAAAgB,QAAA,EAA5B,CAA8C66C,EAAAt8C,KAAA,CAAmBS,CAAnB,CAD5B,CAuD3Boa,QAASA,GAAc,EAAG,CACxB,IAAI0hC,EAAe71C,CAAA,EAAnB,CACI81C,EAAiB91C,CAAA,EADrB,CAEI+1C,EAAW,CACb,OAAQ,CAAA,CADK;AAEb,QAAS,CAAA,CAFI,CAGb,OAAQ,IAHK,CAIb,UAAan3C,IAAAA,EAJA,CAFf,CAQIo3C,CARJ,CAQgBC,CAahB,KAAAC,WAAA,CAAkBC,QAAQ,CAACC,CAAD,CAAcC,CAAd,CAA4B,CACpDN,CAAA,CAASK,CAAT,CAAA,CAAwBC,CAD4B,CA2BtD,KAAAC,iBAAA,CAAwBC,QAAQ,CAACC,CAAD,CAAkBC,CAAlB,CAAsC,CACpET,CAAA,CAAaQ,CACbP,EAAA,CAAgBQ,CAChB,OAAO,KAH6D,CAMtE,KAAAn5B,KAAA,CAAY,CAAC,SAAD,CAAY,QAAQ,CAAC5K,CAAD,CAAU,CAwBxCwB,QAASA,EAAM,CAACk2B,CAAD,CAAMsM,CAAN,CAAqBC,CAArB,CAAsC,CAAA,IAC/CC,CAD+C,CAC7BC,CAD6B,CACpBC,CAE/BH,EAAA,CAAkBA,CAAlB,EAAqCI,CAErC,QAAQ,MAAO3M,EAAf,EACE,KAAK,QAAL,CAEE0M,CAAA,CADA1M,CACA,CADMA,CAAAjyB,KAAA,EAGN,KAAI+H,EAASy2B,CAAA,CAAkBb,CAAlB,CAAmCD,CAChDe,EAAA,CAAmB12B,CAAA,CAAM42B,CAAN,CAEnB,IAAKF,CAAAA,CAAL,CAAuB,CACC,GAAtB,GAAIxM,CAAAnqC,OAAA,CAAW,CAAX,CAAJ,EAA+C,GAA/C,GAA6BmqC,CAAAnqC,OAAA,CAAW,CAAX,CAA7B,GACE42C,CACA,CADU,CAAA,CACV,CAAAzM,CAAA,CAAMA,CAAAlnC,UAAA,CAAc,CAAd,CAFR,CAII8zC,EAAAA,CAAeL,CAAA,CAAkBM,CAAlB,CAA2CC,CAC9D,KAAIC,EAAQ,IAAIC,EAAJ,CAAUJ,CAAV,CAEZJ,EAAA,CAAmBx1C,CADNi2C,IAAIC,EAAJD,CAAWF,CAAXE,CAAkB3kC,CAAlB2kC,CAA2BL,CAA3BK,CACMj2C,OAAA,CAAagpC,CAAb,CACfwM,EAAAnsC,SAAJ,CACEmsC,CAAAvM,gBADF,CACqCZ,CADrC,CAEWoN,CAAJ,CACLD,CAAAvM,gBADK,CAC8BuM,CAAAra,QAAA,CAC/Bgb,CAD+B,CACDC,CAF7B,CAGIZ,CAAAa,OAHJ,GAILb,CAAAvM,gBAJK,CAI8BqN,CAJ9B,CAMHf,EAAJ,GACEC,CADF,CACqBe,CAAA,CAA2Bf,CAA3B,CADrB,CAGA12B,EAAA,CAAM42B,CAAN,CAAA;AAAkBF,CApBG,CAsBvB,MAAOgB,EAAA,CAAehB,CAAf,CAAiCF,CAAjC,CAET,MAAK,UAAL,CACE,MAAOkB,EAAA,CAAexN,CAAf,CAAoBsM,CAApB,CAET,SACE,MAAOkB,EAAA,CAAe37C,CAAf,CAAqBy6C,CAArB,CApCX,CALmD,CA6CrDiB,QAASA,EAA0B,CAACp3C,CAAD,CAAK,CAatCs3C,QAASA,EAAgB,CAACvyC,CAAD,CAAQob,CAAR,CAAgB8b,CAAhB,CAAwBib,CAAxB,CAAgC,CACvD,IAAIK,EAAyBf,CAC7BA,EAAA,CAAuB,CAAA,CACvB,IAAI,CACF,MAAOx2C,EAAA,CAAG+E,CAAH,CAAUob,CAAV,CAAkB8b,CAAlB,CAA0Bib,CAA1B,CADL,CAAJ,OAEU,CACRV,CAAA,CAAuBe,CADf,CAL6C,CAZzD,GAAKv3C,CAAAA,CAAL,CAAS,MAAOA,EAChBs3C,EAAAxN,gBAAA,CAAmC9pC,CAAA8pC,gBACnCwN,EAAArb,OAAA,CAA0Bmb,CAAA,CAA2Bp3C,CAAAi8B,OAA3B,CAC1Bqb,EAAAptC,SAAA,CAA4BlK,CAAAkK,SAC5BotC,EAAAtb,QAAA,CAA2Bh8B,CAAAg8B,QAC3B,KAAS,IAAA3iC,EAAI,CAAb,CAAgB2G,CAAAk3C,OAAhB,EAA6B79C,CAA7B,CAAiC2G,CAAAk3C,OAAA9+C,OAAjC,CAAmD,EAAEiB,CAArD,CACE2G,CAAAk3C,OAAA,CAAU79C,CAAV,CAAA,CAAe+9C,CAAA,CAA2Bp3C,CAAAk3C,OAAA,CAAU79C,CAAV,CAA3B,CAEjBi+C,EAAAJ,OAAA,CAA0Bl3C,CAAAk3C,OAE1B,OAAOI,EAX+B,CAwBxCE,QAASA,EAAyB,CAACnd,CAAD,CAAWod,CAAX,CAA4B,CAE5D,MAAgB,KAAhB,EAAIpd,CAAJ,EAA2C,IAA3C,EAAwBod,CAAxB,CACSpd,CADT,GACsBod,CADtB,CAIwB,QAAxB,GAAI,MAAOpd,EAAX,GAKEA,CAEI,CAFO+a,EAAA,CAAW/a,CAAX,CAEP,CAAoB,QAApB,GAAA,MAAOA,EAPb,EASW,CAAA,CATX,CAgBOA,CAhBP,GAgBoBod,CAhBpB,EAgBwCpd,CAhBxC,GAgBqDA,CAhBrD,EAgBiEod,CAhBjE,GAgBqFA,CAtBzB,CAyB9DN,QAASA,EAAmB,CAACpyC,CAAD,CAAQqf,CAAR,CAAkB+kB,CAAlB,CAAkCkN,CAAlC;AAAoDqB,CAApD,CAA2E,CACrG,IAAIC,EAAmBtB,CAAAa,OAAvB,CACIU,CAEJ,IAAgC,CAAhC,GAAID,CAAAv/C,OAAJ,CAAmC,CACjC,IAAIy/C,EAAkBL,CAAtB,CACAG,EAAmBA,CAAA,CAAiB,CAAjB,CACnB,OAAO5yC,EAAAzI,OAAA,CAAaw7C,QAA6B,CAAC/yC,CAAD,CAAQ,CACvD,IAAIgzC,EAAgBJ,CAAA,CAAiB5yC,CAAjB,CACfyyC,EAAA,CAA0BO,CAA1B,CAAyCF,CAAzC,CAAL,GACED,CACA,CADavB,CAAA,CAAiBtxC,CAAjB,CAAwB1G,IAAAA,EAAxB,CAAmCA,IAAAA,EAAnC,CAA8C,CAAC05C,CAAD,CAA9C,CACb,CAAAF,CAAA,CAAkBE,CAAlB,EAAmC3C,EAAA,CAAW2C,CAAX,CAFrC,CAIA,OAAOH,EANgD,CAAlD,CAOJxzB,CAPI,CAOM+kB,CAPN,CAOsBuO,CAPtB,CAH0B,CAenC,IAFA,IAAIM,EAAwB,EAA5B,CACIC,EAAiB,EADrB,CAES5+C,EAAI,CAFb,CAEgBY,EAAK09C,CAAAv/C,OAArB,CAA8CiB,CAA9C,CAAkDY,CAAlD,CAAsDZ,CAAA,EAAtD,CACE2+C,CAAA,CAAsB3+C,CAAtB,CACA,CAD2Bm+C,CAC3B,CAAAS,CAAA,CAAe5+C,CAAf,CAAA,CAAoB,IAGtB,OAAO0L,EAAAzI,OAAA,CAAa47C,QAA8B,CAACnzC,CAAD,CAAQ,CAGxD,IAFA,IAAIozC,EAAU,CAAA,CAAd,CAES9+C,EAAI,CAFb,CAEgBY,EAAK09C,CAAAv/C,OAArB,CAA8CiB,CAA9C,CAAkDY,CAAlD,CAAsDZ,CAAA,EAAtD,CAA2D,CACzD,IAAI0+C,EAAgBJ,CAAA,CAAiBt+C,CAAjB,CAAA,CAAoB0L,CAApB,CACpB,IAAIozC,CAAJ,GAAgBA,CAAhB,CAA0B,CAACX,CAAA,CAA0BO,CAA1B,CAAyCC,CAAA,CAAsB3+C,CAAtB,CAAzC,CAA3B,EACE4+C,CAAA,CAAe5+C,CAAf,CACA,CADoB0+C,CACpB,CAAAC,CAAA,CAAsB3+C,CAAtB,CAAA,CAA2B0+C,CAA3B,EAA4C3C,EAAA,CAAW2C,CAAX,CAJW,CAQvDI,CAAJ,GACEP,CADF,CACevB,CAAA,CAAiBtxC,CAAjB,CAAwB1G,IAAAA,EAAxB,CAAmCA,IAAAA,EAAnC,CAA8C45C,CAA9C,CADf,CAIA,OAAOL,EAfiD,CAAnD,CAgBJxzB,CAhBI,CAgBM+kB,CAhBN,CAgBsBuO,CAhBtB,CAxB8F,CA2CvGT,QAASA,EAAoB,CAAClyC,CAAD,CAAQqf,CAAR,CAAkB+kB,CAAlB,CAAkCkN,CAAlC,CAAoD,CAAA,IAC3EhN,CAD2E,CAClE3N,CACb,OAAO2N,EAAP,CAAiBtkC,CAAAzI,OAAA,CAAa87C,QAAqB,CAACrzC,CAAD,CAAQ,CACzD,MAAOsxC,EAAA,CAAiBtxC,CAAjB,CADkD,CAA1C,CAEdszC,QAAwB,CAAC7+C,CAAD,CAAQ8+C,CAAR,CAAavzC,CAAb,CAAoB,CAC7C22B,CAAA,CAAYliC,CACRX,EAAA,CAAWurB,CAAX,CAAJ,EACEA,CAAAjkB,MAAA,CAAe,IAAf,CAAqBlF,SAArB,CAEEiB,EAAA,CAAU1C,CAAV,CAAJ;AACEuL,CAAAq2B,aAAA,CAAmB,QAAQ,EAAG,CACxBl/B,CAAA,CAAUw/B,CAAV,CAAJ,EACE2N,CAAA,EAF0B,CAA9B,CAN2C,CAF9B,CAcdF,CAdc,CAF8D,CAmBjF6N,QAASA,EAA2B,CAACjyC,CAAD,CAAQqf,CAAR,CAAkB+kB,CAAlB,CAAkCkN,CAAlC,CAAoD,CAgBtFkC,QAASA,EAAY,CAAC/+C,CAAD,CAAQ,CAC3B,IAAIg/C,EAAa,CAAA,CACjB//C,EAAA,CAAQe,CAAR,CAAe,QAAQ,CAAC6G,CAAD,CAAM,CACtBnE,CAAA,CAAUmE,CAAV,CAAL,GAAqBm4C,CAArB,CAAkC,CAAA,CAAlC,CAD2B,CAA7B,CAGA,OAAOA,EALoB,CAhByD,IAClFnP,CADkF,CACzE3N,CACb,OAAO2N,EAAP,CAAiBtkC,CAAAzI,OAAA,CAAa87C,QAAqB,CAACrzC,CAAD,CAAQ,CACzD,MAAOsxC,EAAA,CAAiBtxC,CAAjB,CADkD,CAA1C,CAEdszC,QAAwB,CAAC7+C,CAAD,CAAQ8+C,CAAR,CAAavzC,CAAb,CAAoB,CAC7C22B,CAAA,CAAYliC,CACRX,EAAA,CAAWurB,CAAX,CAAJ,EACEA,CAAArrB,KAAA,CAAc,IAAd,CAAoBS,CAApB,CAA2B8+C,CAA3B,CAAgCvzC,CAAhC,CAEEwzC,EAAA,CAAa/+C,CAAb,CAAJ,EACEuL,CAAAq2B,aAAA,CAAmB,QAAQ,EAAG,CACxBmd,CAAA,CAAa7c,CAAb,CAAJ,EAA6B2N,CAAA,EADD,CAA9B,CAN2C,CAF9B,CAYdF,CAZc,CAFqE,CAyBxFD,QAASA,EAAqB,CAACnkC,CAAD,CAAQqf,CAAR,CAAkB+kB,CAAlB,CAAkCkN,CAAlC,CAAoD,CAChF,IAAIhN,CACJ,OAAOA,EAAP,CAAiBtkC,CAAAzI,OAAA,CAAam8C,QAAsB,CAAC1zC,CAAD,CAAQ,CAC1DskC,CAAA,EACA,OAAOgN,EAAA,CAAiBtxC,CAAjB,CAFmD,CAA3C,CAGdqf,CAHc,CAGJ+kB,CAHI,CAF+D,CAQlFkO,QAASA,EAAc,CAAChB,CAAD,CAAmBF,CAAnB,CAAkC,CACvD,GAAKA,CAAAA,CAAL,CAAoB,MAAOE,EAC3B,KAAIqC,EAAgBrC,CAAAvM,gBAApB,CACI6O,EAAY,CAAA,CADhB,CAOI34C,EAHA04C,CAGK,GAHa1B,CAGb,EAFL0B,CAEK,GAFazB,CAEb,CAAe2B,QAAqC,CAAC7zC,CAAD,CAAQob,CAAR,CAAgB8b,CAAhB,CAAwBib,CAAxB,CAAgC,CACvF19C,CAAAA,CAAQm/C,CAAA,EAAazB,CAAb,CAAsBA,CAAA,CAAO,CAAP,CAAtB,CAAkCb,CAAA,CAAiBtxC,CAAjB,CAAwBob,CAAxB,CAAgC8b,CAAhC,CAAwCib,CAAxC,CAC9C,OAAOf,EAAA,CAAc38C,CAAd,CAAqBuL,CAArB,CAA4Bob,CAA5B,CAFoF,CAApF,CAGL04B,QAAqC,CAAC9zC,CAAD,CAAQob,CAAR,CAAgB8b,CAAhB,CAAwBib,CAAxB,CAAgC,CACnE19C,CAAAA,CAAQ68C,CAAA,CAAiBtxC,CAAjB;AAAwBob,CAAxB,CAAgC8b,CAAhC,CAAwCib,CAAxC,CACRn4B,EAAAA,CAASo3B,CAAA,CAAc38C,CAAd,CAAqBuL,CAArB,CAA4Bob,CAA5B,CAGb,OAAOjkB,EAAA,CAAU1C,CAAV,CAAA,CAAmBulB,CAAnB,CAA4BvlB,CALoC,CASrE68C,EAAAvM,gBAAJ,EACIuM,CAAAvM,gBADJ,GACyCqN,CADzC,CAEEn3C,CAAA8pC,gBAFF,CAEuBuM,CAAAvM,gBAFvB,CAGYqM,CAAA/Z,UAHZ,GAMEp8B,CAAA8pC,gBAEA,CAFqBqN,CAErB,CADAwB,CACA,CADY,CAACtC,CAAAa,OACb,CAAAl3C,CAAAk3C,OAAA,CAAYb,CAAAa,OAAA,CAA0Bb,CAAAa,OAA1B,CAAoD,CAACb,CAAD,CARlE,CAWA,OAAOr2C,EAhCgD,CApNzD,IAAI84C,EAAe/tC,EAAA,EAAA+tC,aAAnB,CACInC,EAAgB,CACd5rC,IAAK+tC,CADS,CAEd1C,gBAAiB,CAAA,CAFH,CAGdZ,SAAU93C,EAAA,CAAK83C,CAAL,CAHI,CAIduD,kBAAmBlgD,CAAA,CAAW48C,CAAX,CAAnBsD,EAA6CtD,CAJ/B,CAKduD,qBAAsBngD,CAAA,CAAW68C,CAAX,CAAtBsD,EAAmDtD,CALrC,CADpB,CAQIgB,EAAyB,CACvB3rC,IAAK+tC,CADkB,CAEvB1C,gBAAiB,CAAA,CAFM,CAGvBZ,SAAU93C,EAAA,CAAK83C,CAAL,CAHa,CAIvBuD,kBAAmBlgD,CAAA,CAAW48C,CAAX,CAAnBsD,EAA6CtD,CAJtB,CAKvBuD,qBAAsBngD,CAAA,CAAW68C,CAAX,CAAtBsD,EAAmDtD,CAL5B,CAR7B,CAeIc,EAAuB,CAAA,CAE3B7iC,EAAAslC,yBAAA,CAAkCC,QAAQ,EAAG,CAC3C,MAAO1C,EADoC,CAI7C,OAAO7iC,EAtBiC,CAA9B,CAvDY,CA0gB1BK,QAASA,GAAU,EAAG,CAEpB,IAAA+I,KAAA;AAAY,CAAC,YAAD,CAAe,mBAAf,CAAoC,QAAQ,CAAClJ,CAAD,CAAa5B,CAAb,CAAgC,CACtF,MAAOknC,GAAA,CAAS,QAAQ,CAACr0B,CAAD,CAAW,CACjCjR,CAAAxX,WAAA,CAAsByoB,CAAtB,CADiC,CAA5B,CAEJ7S,CAFI,CAD+E,CAA5E,CAFQ,CAStBiC,QAASA,GAAW,EAAG,CACrB,IAAA6I,KAAA,CAAY,CAAC,UAAD,CAAa,mBAAb,CAAkC,QAAQ,CAACtL,CAAD,CAAWQ,CAAX,CAA8B,CAClF,MAAOknC,GAAA,CAAS,QAAQ,CAACr0B,CAAD,CAAW,CACjCrT,CAAAwU,MAAA,CAAenB,CAAf,CADiC,CAA5B,CAEJ7S,CAFI,CAD2E,CAAxE,CADS,CAgBvBknC,QAASA,GAAQ,CAACC,CAAD,CAAWC,CAAX,CAA6B,CAsB5CC,QAASA,EAAO,EAAG,CACjB,IAAA9J,QAAA,CAAe,CAAE/N,OAAQ,CAAV,CADE,CAgCnB8X,QAASA,EAAU,CAAC5gD,CAAD,CAAUqH,CAAV,CAAc,CAC/B,MAAO,SAAQ,CAACxG,CAAD,CAAQ,CACrBwG,CAAAjH,KAAA,CAAQJ,CAAR,CAAiBa,CAAjB,CADqB,CADQ,CA8BjCggD,QAASA,EAAoB,CAACv0B,CAAD,CAAQ,CAC/Bw0B,CAAAx0B,CAAAw0B,iBAAJ,EAA+Bx0B,CAAAy0B,QAA/B,GACAz0B,CAAAw0B,iBACA,CADyB,CAAA,CACzB,CAAAL,CAAA,CAAS,QAAQ,EAAG,CA3BO,IACvBp5C,CADuB,CACnB0lC,CADmB,CACTgU,CAElBA,EAAA,CAwBmCz0B,CAxBzBy0B,QAwByBz0B,EAvBnCw0B,iBAAA,CAAyB,CAAA,CAuBUx0B,EAtBnCy0B,QAAA,CAAgBr7C,IAAAA,EAChB,KAN2B,IAMlBhF,EAAI,CANc,CAMXY,EAAKy/C,CAAAthD,OAArB,CAAqCiB,CAArC,CAAyCY,CAAzC,CAA6C,EAAEZ,CAA/C,CAAkD,CAChDqsC,CAAA,CAAWgU,CAAA,CAAQrgD,CAAR,CAAA,CAAW,CAAX,CACX2G,EAAA,CAAK05C,CAAA,CAAQrgD,CAAR,CAAA,CAmB4B4rB,CAnBjBwc,OAAX,CACL;GAAI,CACE5oC,CAAA,CAAWmH,CAAX,CAAJ,CACE0lC,CAAAC,QAAA,CAAiB3lC,CAAA,CAgBYilB,CAhBTzrB,MAAH,CAAjB,CADF,CAE4B,CAArB,GAewByrB,CAfpBwc,OAAJ,CACLiE,CAAAC,QAAA,CAc6B1gB,CAdZzrB,MAAjB,CADK,CAGLksC,CAAAlC,OAAA,CAY6Bve,CAZbzrB,MAAhB,CANA,CAQF,MAAOwI,CAAP,CAAU,CACV0jC,CAAAlC,OAAA,CAAgBxhC,CAAhB,CACA,CAAAq3C,CAAA,CAAiBr3C,CAAjB,CAFU,CAXoC,CAqB9B,CAApB,CAFA,CADmC,CAMrC23C,QAASA,EAAQ,EAAG,CAClB,IAAA7W,QAAA,CAAe,IAAIwW,CADD,CAzFpB,IAAIM,EAAW/hD,CAAA,CAAO,IAAP,CAAagiD,SAAb,CAAf,CAYI5zB,EAAQA,QAAQ,EAAG,CACrB,IAAI6b,EAAI,IAAI6X,CAEZ7X,EAAA6D,QAAA,CAAY4T,CAAA,CAAWzX,CAAX,CAAcA,CAAA6D,QAAd,CACZ7D,EAAA0B,OAAA,CAAW+V,CAAA,CAAWzX,CAAX,CAAcA,CAAA0B,OAAd,CACX1B,EAAA0J,OAAA,CAAW+N,CAAA,CAAWzX,CAAX,CAAcA,CAAA0J,OAAd,CACX,OAAO1J,EANc,CAavB/mC,EAAA,CAAOu+C,CAAAv7B,UAAP,CAA0B,CACxBqa,KAAMA,QAAQ,CAAC0hB,CAAD,CAAcC,CAAd,CAA0BC,CAA1B,CAAwC,CACpD,GAAI/9C,CAAA,CAAY69C,CAAZ,CAAJ,EAAgC79C,CAAA,CAAY89C,CAAZ,CAAhC,EAA2D99C,CAAA,CAAY+9C,CAAZ,CAA3D,CACE,MAAO,KAET,KAAIj7B,EAAS,IAAI46B,CAEjB,KAAAnK,QAAAkK,QAAA,CAAuB,IAAAlK,QAAAkK,QAAvB,EAA+C,EAC/C,KAAAlK,QAAAkK,QAAA57C,KAAA,CAA0B,CAACihB,CAAD,CAAS+6B,CAAT,CAAsBC,CAAtB,CAAkCC,CAAlC,CAA1B,CAC0B,EAA1B,CAAI,IAAAxK,QAAA/N,OAAJ,EAA6B+X,CAAA,CAAqB,IAAAhK,QAArB,CAE7B,OAAOzwB,EAAA+jB,QAV6C,CAD9B,CAcxB,QAASmX,QAAQ,CAACn1B,CAAD,CAAW,CAC1B,MAAO,KAAAsT,KAAA,CAAU,IAAV;AAAgBtT,CAAhB,CADmB,CAdJ,CAkBxB,UAAWo1B,QAAQ,CAACp1B,CAAD,CAAWk1B,CAAX,CAAyB,CAC1C,MAAO,KAAA5hB,KAAA,CAAU,QAAQ,CAAC5+B,CAAD,CAAQ,CAC/B,MAAO2gD,EAAA,CAAe3gD,CAAf,CAAsB,CAAA,CAAtB,CAA4BsrB,CAA5B,CADwB,CAA1B,CAEJ,QAAQ,CAACtB,CAAD,CAAQ,CACjB,MAAO22B,EAAA,CAAe32B,CAAf,CAAsB,CAAA,CAAtB,CAA6BsB,CAA7B,CADU,CAFZ,CAIJk1B,CAJI,CADmC,CAlBpB,CAA1B,CAoEAj/C,EAAA,CAAO4+C,CAAA57B,UAAP,CAA2B,CACzB4nB,QAASA,QAAQ,CAACtlC,CAAD,CAAM,CACjB,IAAAyiC,QAAA0M,QAAA/N,OAAJ,GACIphC,CAAJ,GAAY,IAAAyiC,QAAZ,CACE,IAAAsX,SAAA,CAAcR,CAAA,CACZ,QADY,CAGZv5C,CAHY,CAAd,CADF,CAME,IAAAg6C,UAAA,CAAeh6C,CAAf,CAPF,CADqB,CADE,CAczBg6C,UAAWA,QAAQ,CAACh6C,CAAD,CAAM,CAmBvBolC,QAASA,EAAc,CAACplC,CAAD,CAAM,CACvBglC,CAAJ,GACAA,CACA,CADO,CAAA,CACP,CAAAiV,CAAAD,UAAA,CAAeh6C,CAAf,CAFA,CAD2B,CAK7Bk6C,QAASA,EAAa,CAACl6C,CAAD,CAAM,CACtBglC,CAAJ,GACAA,CACA,CADO,CAAA,CACP,CAAAiV,CAAAF,SAAA,CAAc/5C,CAAd,CAFA,CAD0B,CAvB5B,IAAI+3B,CAAJ,CACIkiB,EAAO,IADX,CAEIjV,EAAO,CAAA,CACX,IAAI,CACF,GAAKnrC,CAAA,CAASmG,CAAT,CAAL,EAAsBxH,CAAA,CAAWwH,CAAX,CAAtB,CAAwC+3B,CAAA,CAAO/3B,CAAP,EAAcA,CAAA+3B,KAClDv/B,EAAA,CAAWu/B,CAAX,CAAJ,EACE,IAAA0K,QAAA0M,QAAA/N,OACA,CAD+B,EAC/B,CAAArJ,CAAAr/B,KAAA,CAAUsH,CAAV,CAAeolC,CAAf,CAA+B8U,CAA/B,CAA8ChB,CAAA,CAAW,IAAX,CAAiB,IAAA/N,OAAjB,CAA9C,CAFF,GAIE,IAAA1I,QAAA0M,QAAAh2C,MAEA,CAF6B6G,CAE7B,CADA,IAAAyiC,QAAA0M,QAAA/N,OACA;AAD8B,CAC9B,CAAA+X,CAAA,CAAqB,IAAA1W,QAAA0M,QAArB,CANF,CAFE,CAUF,MAAOxtC,CAAP,CAAU,CACVu4C,CAAA,CAAcv4C,CAAd,CACA,CAAAq3C,CAAA,CAAiBr3C,CAAjB,CAFU,CAdW,CAdA,CA6CzBwhC,OAAQA,QAAQ,CAAC57B,CAAD,CAAS,CACnB,IAAAk7B,QAAA0M,QAAA/N,OAAJ,EACA,IAAA2Y,SAAA,CAAcxyC,CAAd,CAFuB,CA7CA,CAkDzBwyC,SAAUA,QAAQ,CAACxyC,CAAD,CAAS,CACzB,IAAAk7B,QAAA0M,QAAAh2C,MAAA,CAA6BoO,CAC7B,KAAAk7B,QAAA0M,QAAA/N,OAAA,CAA8B,CAC9B+X,EAAA,CAAqB,IAAA1W,QAAA0M,QAArB,CAHyB,CAlDF,CAwDzBhE,OAAQA,QAAQ,CAACgP,CAAD,CAAW,CACzB,IAAIzT,EAAY,IAAAjE,QAAA0M,QAAAkK,QAEoB,EAApC,EAAK,IAAA5W,QAAA0M,QAAA/N,OAAL,EAA0CsF,CAA1C,EAAuDA,CAAA3uC,OAAvD,EACEghD,CAAA,CAAS,QAAQ,EAAG,CAElB,IAFkB,IACdt0B,CADc,CACJ/F,CADI,CAET1lB,EAAI,CAFK,CAEFY,EAAK8sC,CAAA3uC,OAArB,CAAuCiB,CAAvC,CAA2CY,CAA3C,CAA+CZ,CAAA,EAA/C,CAAoD,CAClD0lB,CAAA,CAASgoB,CAAA,CAAU1tC,CAAV,CAAA,CAAa,CAAb,CACTyrB,EAAA,CAAWiiB,CAAA,CAAU1tC,CAAV,CAAA,CAAa,CAAb,CACX,IAAI,CACF0lB,CAAAysB,OAAA,CAAc3yC,CAAA,CAAWisB,CAAX,CAAA,CAAuBA,CAAA,CAAS01B,CAAT,CAAvB,CAA4CA,CAA1D,CADE,CAEF,MAAOx4C,CAAP,CAAU,CACVq3C,CAAA,CAAiBr3C,CAAjB,CADU,CALsC,CAFlC,CAApB,CAJuB,CAxDF,CAA3B,CAsHA,KAAIy4C,EAAcA,QAAoB,CAACjhD,CAAD,CAAQkhD,CAAR,CAAkB,CACtD,IAAI37B,EAAS,IAAI46B,CACbe,EAAJ,CACE37B,CAAA4mB,QAAA,CAAensC,CAAf,CADF,CAGEulB,CAAAykB,OAAA,CAAchqC,CAAd,CAEF,OAAOulB,EAAA+jB,QAP+C,CAAxD;AAUIqX,EAAiBA,QAAuB,CAAC3gD,CAAD,CAAQmhD,CAAR,CAAoB71B,CAApB,CAA8B,CACxE,IAAI81B,EAAiB,IACrB,IAAI,CACE/hD,CAAA,CAAWisB,CAAX,CAAJ,GAA0B81B,CAA1B,CAA2C91B,CAAA,EAA3C,CADE,CAEF,MAAO9iB,CAAP,CAAU,CACV,MAAOy4C,EAAA,CAAYz4C,CAAZ,CAAe,CAAA,CAAf,CADG,CAGZ,MAAkB44C,EAAlB,EA57eY/hD,CAAA,CA47eM+hD,CA57eKxiB,KAAX,CA47eZ,CACSwiB,CAAAxiB,KAAA,CAAoB,QAAQ,EAAG,CACpC,MAAOqiB,EAAA,CAAYjhD,CAAZ,CAAmBmhD,CAAnB,CAD6B,CAA/B,CAEJ,QAAQ,CAACn3B,CAAD,CAAQ,CACjB,MAAOi3B,EAAA,CAAYj3B,CAAZ,CAAmB,CAAA,CAAnB,CADU,CAFZ,CADT,CAOSi3B,CAAA,CAAYjhD,CAAZ,CAAmBmhD,CAAnB,CAd+D,CAV1E,CA8CI1W,EAAOA,QAAQ,CAACzqC,CAAD,CAAQsrB,CAAR,CAAkB+1B,CAAlB,CAA2Bb,CAA3B,CAAyC,CAC1D,IAAIj7B,EAAS,IAAI46B,CACjB56B,EAAA4mB,QAAA,CAAensC,CAAf,CACA,OAAOulB,EAAA+jB,QAAA1K,KAAA,CAAoBtT,CAApB,CAA8B+1B,CAA9B,CAAuCb,CAAvC,CAHmD,CA9C5D,CAoIIc,EAAKA,QAAU,CAACC,CAAD,CAAW,CAC5B,GAAK,CAAAliD,CAAA,CAAWkiD,CAAX,CAAL,CACE,KAAMnB,EAAA,CAAS,SAAT,CAAsDmB,CAAtD,CAAN,CAGF,IAAIrV,EAAW,IAAIiU,CAUnBoB,EAAA,CARAC,QAAkB,CAACxhD,CAAD,CAAQ,CACxBksC,CAAAC,QAAA,CAAiBnsC,CAAjB,CADwB,CAQ1B,CAJAwpC,QAAiB,CAACp7B,CAAD,CAAS,CACxB89B,CAAAlC,OAAA,CAAgB57B,CAAhB,CADwB,CAI1B,CAEA,OAAO89B,EAAA5C,QAjBqB,CAsB9BgY,EAAA/8B,UAAA,CAAeu7B,CAAAv7B,UAEf+8B,EAAA70B,MAAA,CAAWA,CACX60B,EAAAtX,OAAA,CAnKaA,QAAQ,CAAC57B,CAAD,CAAS,CAC5B,IAAImX,EAAS,IAAI46B,CACjB56B,EAAAykB,OAAA,CAAc57B,CAAd,CACA,OAAOmX,EAAA+jB,QAHqB,CAoK9BgY,EAAA7W,KAAA,CAAUA,CACV6W,EAAAnV,QAAA,CA7Fc1B,CA8Fd6W,EAAAG,IAAA,CA5EAA,QAAY,CAACC,CAAD,CAAW,CAAA,IACjBxV;AAAW,IAAIiU,CADE,CAEjBwB,EAAU,CAFO,CAGjBC,EAAUnjD,CAAA,CAAQijD,CAAR,CAAA,CAAoB,EAApB,CAAyB,EAEvCziD,EAAA,CAAQyiD,CAAR,CAAkB,QAAQ,CAACpY,CAAD,CAAUlqC,CAAV,CAAe,CACvCuiD,CAAA,EACAlX,EAAA,CAAKnB,CAAL,CAAA1K,KAAA,CAAmB,QAAQ,CAAC5+B,CAAD,CAAQ,CAC7B4hD,CAAAtiD,eAAA,CAAuBF,CAAvB,CAAJ,GACAwiD,CAAA,CAAQxiD,CAAR,CACA,CADeY,CACf,CAAM,EAAE2hD,CAAR,EAAkBzV,CAAAC,QAAA,CAAiByV,CAAjB,CAFlB,CADiC,CAAnC,CAIG,QAAQ,CAACxzC,CAAD,CAAS,CACdwzC,CAAAtiD,eAAA,CAAuBF,CAAvB,CAAJ,EACA8sC,CAAAlC,OAAA,CAAgB57B,CAAhB,CAFkB,CAJpB,CAFuC,CAAzC,CAYgB,EAAhB,GAAIuzC,CAAJ,EACEzV,CAAAC,QAAA,CAAiByV,CAAjB,CAGF,OAAO1V,EAAA5C,QArBc,CA6EvBgY,EAAAO,KAAA,CAvCAA,QAAa,CAACH,CAAD,CAAW,CACtB,IAAIxV,EAAWzf,CAAA,EAEfxtB,EAAA,CAAQyiD,CAAR,CAAkB,QAAQ,CAACpY,CAAD,CAAU,CAClCmB,CAAA,CAAKnB,CAAL,CAAA1K,KAAA,CAAmBsN,CAAAC,QAAnB,CAAqCD,CAAAlC,OAArC,CADkC,CAApC,CAIA,OAAOkC,EAAA5C,QAPe,CAyCxB,OAAOgY,EAvXqC,CA0X9C1lC,QAASA,GAAa,EAAG,CACvB,IAAA2H,KAAA,CAAY,CAAC,SAAD,CAAY,UAAZ,CAAwB,QAAQ,CAAC9H,CAAD,CAAUF,CAAV,CAAoB,CAC9D,IAAIumC,EAAwBrmC,CAAAqmC,sBAAxBA,EACwBrmC,CAAAsmC,4BAD5B,CAGIC,EAAuBvmC,CAAAumC,qBAAvBA,EACuBvmC,CAAAwmC,2BADvBD,EAEuBvmC,CAAAymC,kCAL3B;AAOIC,EAAe,CAAEL,CAAAA,CAPrB,CAQIM,EAAMD,CAAA,CACN,QAAQ,CAAC37C,CAAD,CAAK,CACX,IAAIsnB,EAAKg0B,CAAA,CAAsBt7C,CAAtB,CACT,OAAO,SAAQ,EAAG,CAChBw7C,CAAA,CAAqBl0B,CAArB,CADgB,CAFP,CADP,CAON,QAAQ,CAACtnB,CAAD,CAAK,CACX,IAAI67C,EAAQ9mC,CAAA,CAAS/U,CAAT,CAAa,KAAb,CAAoB,CAAA,CAApB,CACZ,OAAO,SAAQ,EAAG,CAChB+U,CAAAsR,OAAA,CAAgBw1B,CAAhB,CADgB,CAFP,CAOjBD,EAAAE,UAAA,CAAgBH,CAEhB,OAAOC,EAzBuD,CAApD,CADW,CAiGzB9nC,QAASA,GAAkB,EAAG,CAa5BioC,QAASA,EAAqB,CAACxgD,CAAD,CAAS,CACrCygD,QAASA,EAAU,EAAG,CACpB,IAAAC,WAAA,CAAkB,IAAAC,cAAlB,CACI,IAAAC,YADJ,CACuB,IAAAC,YADvB,CAC0C,IAC1C,KAAAC,YAAA,CAAmB,EACnB,KAAAC,gBAAA,CAAuB,EACvB,KAAAC,gBAAA,CAAuB,CACvB,KAAAC,IAAA,CA5igBG,EAAE9iD,EA6igBL,KAAA+iD,aAAA,CAAoB,IAPA,CAStBT,CAAAj+B,UAAA,CAAuBxiB,CACvB,OAAOygD,EAX8B,CAZvC,IAAI5wB,EAAM,EAAV,CACIsxB,EAAmB7kD,CAAA,CAAO,YAAP,CADvB,CAEI8kD,EAAiB,IAFrB,CAGIC,EAAe,IAEnB,KAAAC,UAAA,CAAiBC,QAAQ,CAACtjD,CAAD,CAAQ,CAC3ByB,SAAA7C,OAAJ,GACEgzB,CADF,CACQ5xB,CADR,CAGA,OAAO4xB,EAJwB,CAqBjC,KAAArO,KAAA;AAAY,CAAC,mBAAD,CAAsB,QAAtB,CAAgC,UAAhC,CACR,QAAQ,CAAC9K,CAAD,CAAoB0B,CAApB,CAA4BlC,CAA5B,CAAsC,CAEhDsrC,QAASA,EAAiB,CAACC,CAAD,CAAS,CAC/BA,CAAAC,aAAAxkB,YAAA,CAAkC,CAAA,CADH,CAInCykB,QAASA,EAAY,CAAC9lB,CAAD,CAAS,CAEf,CAAb,GAAI9W,EAAJ,GAME8W,CAAA+kB,YACA,EADsBe,CAAA,CAAa9lB,CAAA+kB,YAAb,CACtB,CAAA/kB,CAAA8kB,cAAA,EAAwBgB,CAAA,CAAa9lB,CAAA8kB,cAAb,CAP1B,CAiBA9kB,EAAA/J,QAAA,CAAiB+J,CAAA8kB,cAAjB,CAAwC9kB,CAAA+lB,cAAxC,CAA+D/lB,CAAA+kB,YAA/D,CACI/kB,CAAAglB,YADJ,CACyBhlB,CAAAgmB,MADzB,CACwChmB,CAAA6kB,WADxC,CAC4D,IApBhC,CA+D9BoB,QAASA,EAAK,EAAG,CACf,IAAAb,IAAA,CA1ngBG,EAAE9iD,EA2ngBL,KAAA0rC,QAAA,CAAe,IAAA/X,QAAf,CAA8B,IAAA4uB,WAA9B,CACe,IAAAC,cADf,CACoC,IAAAiB,cADpC,CAEe,IAAAhB,YAFf,CAEkC,IAAAC,YAFlC,CAEqD,IACrD,KAAAgB,MAAA,CAAa,IACb,KAAA3kB,YAAA,CAAmB,CAAA,CACnB,KAAA4jB,YAAA,CAAmB,EACnB,KAAAC,gBAAA;AAAuB,EACvB,KAAAC,gBAAA,CAAuB,CACvB,KAAAjpB,kBAAA,CAAyB,IAVV,CAooCjBgqB,QAASA,EAAU,CAACC,CAAD,CAAQ,CACzB,GAAI1pC,CAAAuxB,QAAJ,CACE,KAAMsX,EAAA,CAAiB,QAAjB,CAAsD7oC,CAAAuxB,QAAtD,CAAN,CAGFvxB,CAAAuxB,QAAA,CAAqBmY,CALI,CAY3BC,QAASA,EAAsB,CAAC/e,CAAD,CAAUsM,CAAV,CAAiB,CAC9C,EACEtM,EAAA8d,gBAAA,EAA2BxR,CAD7B,OAEUtM,CAFV,CAEoBA,CAAApR,QAFpB,CAD8C,CAMhDowB,QAASA,EAAsB,CAAChf,CAAD,CAAUsM,CAAV,CAAiBjnC,CAAjB,CAAuB,CACpD,EACE26B,EAAA6d,gBAAA,CAAwBx4C,CAAxB,CAEA,EAFiCinC,CAEjC,CAAsC,CAAtC,GAAItM,CAAA6d,gBAAA,CAAwBx4C,CAAxB,CAAJ,EACE,OAAO26B,CAAA6d,gBAAA,CAAwBx4C,CAAxB,CAJX,OAMU26B,CANV,CAMoBA,CAAApR,QANpB,CADoD,CActDqwB,QAASA,EAAY,EAAG,EAExBC,QAASA,EAAe,EAAG,CACzB,IAAA,CAAOC,CAAAxlD,OAAP,CAAA,CACE,GAAI,CACFwlD,CAAA39B,MAAA,EAAA,EADE,CAEF,MAAOje,CAAP,CAAU,CACViQ,CAAA,CAAkBjQ,CAAlB,CADU,CAId46C,CAAA,CAAe,IARU,CAW3BiB,QAASA,EAAkB,EAAG,CACP,IAArB,GAAIjB,CAAJ,GACEA,CADF,CACiBnrC,CAAAwU,MAAA,CAAe,QAAQ,EAAG,CACvCpS,CAAA5O,OAAA,CAAkB04C,CAAlB,CADuC,CAA1B,CADjB,CAD4B,CA5oC9BN,CAAAt/B,UAAA,CAAkB,CAChBzf,YAAa++C,CADG,CA+BhB/vB,KAAMA,QAAQ,CAACwwB,CAAD,CAAUviD,CAAV,CAAkB,CAC9B,IAAIwiD,CAEJxiD,EAAA,CAASA,CAAT,EAAmB,IAEfuiD,EAAJ;CACEC,CACA,CADQ,IAAIV,CACZ,CAAAU,CAAAX,MAAA,CAAc,IAAAA,MAFhB,GAMO,IAAAX,aAGL,GAFE,IAAAA,aAEF,CAFsBV,CAAA,CAAsB,IAAtB,CAEtB,EAAAgC,CAAA,CAAQ,IAAI,IAAAtB,aATd,CAWAsB,EAAA1wB,QAAA,CAAgB9xB,CAChBwiD,EAAAZ,cAAA,CAAsB5hD,CAAA6gD,YAClB7gD,EAAA4gD,YAAJ,EACE5gD,CAAA6gD,YAAAF,cACA,CADmC6B,CACnC,CAAAxiD,CAAA6gD,YAAA,CAAqB2B,CAFvB,EAIExiD,CAAA4gD,YAJF,CAIuB5gD,CAAA6gD,YAJvB,CAI4C2B,CAQ5C,EAAID,CAAJ,EAAeviD,CAAf,EAAyB,IAAzB,GAA+BwiD,CAAArqB,IAAA,CAAU,UAAV,CAAsBqpB,CAAtB,CAE/B,OAAOgB,EAhCuB,CA/BhB,CAsLhBzhD,OAAQA,QAAQ,CAAC0hD,CAAD,CAAW55B,CAAX,CAAqB+kB,CAArB,CAAqCuO,CAArC,CAA4D,CAC1E,IAAI3xC,EAAM4N,CAAA,CAAOqqC,CAAP,CAEV,IAAIj4C,CAAA+jC,gBAAJ,CACE,MAAO/jC,EAAA+jC,gBAAA,CAAoB,IAApB,CAA0B1lB,CAA1B,CAAoC+kB,CAApC,CAAoDpjC,CAApD,CAAyDi4C,CAAzD,CAJiE,KAMtEj5C,EAAQ,IAN8D,CAOtEzH,EAAQyH,CAAAk3C,WAP8D,CAQtEgC,EAAU,CACRj+C,GAAIokB,CADI,CAER85B,KAAMR,CAFE,CAGR33C,IAAKA,CAHG,CAIR8jC,IAAK6N,CAAL7N,EAA8BmU,CAJtB,CAKRG,GAAI,CAAEhV,CAAAA,CALE,CAQdwT,EAAA,CAAiB,IAEZ9jD,EAAA,CAAWurB,CAAX,CAAL,GACE65B,CAAAj+C,GADF,CACetE,CADf,CAIK4B,EAAL,GACEA,CADF,CACUyH,CAAAk3C,WADV,CAC6B,EAD7B,CAKA3+C,EAAAkH,QAAA,CAAcy5C,CAAd,CACAT,EAAA,CAAuB,IAAvB;AAA6B,CAA7B,CAEA,OAAOY,SAAwB,EAAG,CACG,CAAnC,EAAI/gD,EAAA,CAAYC,CAAZ,CAAmB2gD,CAAnB,CAAJ,EACET,CAAA,CAAuBz4C,CAAvB,CAA+B,EAA/B,CAEF43C,EAAA,CAAiB,IAJe,CA9BwC,CAtL5D,CAqPhBnS,YAAaA,QAAQ,CAAC6T,CAAD,CAAmBj6B,CAAnB,CAA6B,CAwChDk6B,QAASA,EAAgB,EAAG,CAC1BC,CAAA,CAA0B,CAAA,CAEtBC,EAAJ,EACEA,CACA,CADW,CAAA,CACX,CAAAp6B,CAAA,CAASq6B,CAAT,CAAoBA,CAApB,CAA+B1+C,CAA/B,CAFF,EAIEqkB,CAAA,CAASq6B,CAAT,CAAoB/T,CAApB,CAA+B3qC,CAA/B,CAPwB,CAvC5B,IAAI2qC,EAAgBnyC,KAAJ,CAAU8lD,CAAAjmD,OAAV,CAAhB,CACIqmD,EAAgBlmD,KAAJ,CAAU8lD,CAAAjmD,OAAV,CADhB,CAEIsmD,EAAgB,EAFpB,CAGI3+C,EAAO,IAHX,CAIIw+C,EAA0B,CAAA,CAJ9B,CAKIC,EAAW,CAAA,CAEf,IAAKpmD,CAAAimD,CAAAjmD,OAAL,CAA8B,CAE5B,IAAIumD,EAAa,CAAA,CACjB5+C,EAAA1D,WAAA,CAAgB,QAAQ,EAAG,CACrBsiD,CAAJ,EAAgBv6B,CAAA,CAASq6B,CAAT,CAAoBA,CAApB,CAA+B1+C,CAA/B,CADS,CAA3B,CAGA,OAAO6+C,SAA6B,EAAG,CACrCD,CAAA,CAAa,CAAA,CADwB,CANX,CAW9B,GAAgC,CAAhC,GAAIN,CAAAjmD,OAAJ,CAEE,MAAO,KAAAkE,OAAA,CAAY+hD,CAAA,CAAiB,CAAjB,CAAZ,CAAiCC,QAAyB,CAAC9kD,CAAD,CAAQghC,CAAR,CAAkBz1B,CAAlB,CAAyB,CACxF05C,CAAA,CAAU,CAAV,CAAA,CAAejlD,CACfkxC,EAAA,CAAU,CAAV,CAAA,CAAelQ,CACfpW,EAAA,CAASq6B,CAAT,CAAqBjlD,CAAD,GAAWghC,CAAX,CAAuBikB,CAAvB,CAAmC/T,CAAvD,CAAkE3lC,CAAlE,CAHwF,CAAnF,CAOTtM,EAAA,CAAQ4lD,CAAR,CAA0B,QAAQ,CAACpL,CAAD,CAAO55C,CAAP,CAAU,CAC1C,IAAIwlD,EAAY9+C,CAAAzD,OAAA,CAAY22C,CAAZ,CAAkB6L,QAA4B,CAACtlD,CAAD,CAAQghC,CAAR,CAAkB,CAC9EikB,CAAA,CAAUplD,CAAV,CAAA,CAAeG,CACfkxC,EAAA,CAAUrxC,CAAV,CAAA,CAAemhC,CACV+jB,EAAL,GACEA,CACA,CAD0B,CAAA,CAC1B,CAAAx+C,CAAA1D,WAAA,CAAgBiiD,CAAhB,CAFF,CAH8E,CAAhE,CAQhBI,EAAA5gD,KAAA,CAAmB+gD,CAAnB,CAT0C,CAA5C,CAuBA,OAAOD,SAA6B,EAAG,CACrC,IAAA,CAAOF,CAAAtmD,OAAP,CAAA,CACEsmD,CAAAz+B,MAAA,EAAA,EAFmC,CAnDS,CArPlC;AAuWhBqc,iBAAkBA,QAAQ,CAACvkC,CAAD,CAAMqsB,CAAN,CAAgB,CAoBxC26B,QAASA,EAA2B,CAACC,CAAD,CAAS,CAC3C3kB,CAAA,CAAW2kB,CADgC,KAE5BpmD,CAF4B,CAEvBqmD,CAFuB,CAEdC,CAFc,CAELC,CAGtC,IAAI,CAAAljD,CAAA,CAAYo+B,CAAZ,CAAJ,CAAA,CAEA,GAAKngC,CAAA,CAASmgC,CAAT,CAAL,CAKO,GAAIviC,EAAA,CAAYuiC,CAAZ,CAAJ,CAgBL,IAfIG,CAeKnhC,GAfQ+lD,CAeR/lD,GAbPmhC,CAEA,CAFW4kB,CAEX,CADAC,CACA,CADY7kB,CAAApiC,OACZ,CAD8B,CAC9B,CAAAknD,CAAA,EAWOjmD,EARTkmD,CAQSlmD,CARGghC,CAAAjiC,OAQHiB,CANLgmD,CAMKhmD,GANSkmD,CAMTlmD,GAJPimD,CAAA,EACA,CAAA9kB,CAAApiC,OAAA,CAAkBinD,CAAlB,CAA8BE,CAGvBlmD,EAAAA,CAAAA,CAAI,CAAb,CAAgBA,CAAhB,CAAoBkmD,CAApB,CAA+BlmD,CAAA,EAA/B,CACE8lD,CAIA,CAJU3kB,CAAA,CAASnhC,CAAT,CAIV,CAHA6lD,CAGA,CAHU7kB,CAAA,CAAShhC,CAAT,CAGV,CADA4lD,CACA,CADWE,CACX,GADuBA,CACvB,EADoCD,CACpC,GADgDA,CAChD,CAAKD,CAAL,EAAiBE,CAAjB,GAA6BD,CAA7B,GACEI,CAAA,EACA,CAAA9kB,CAAA,CAASnhC,CAAT,CAAA,CAAc6lD,CAFhB,CArBG,KA0BA,CACD1kB,CAAJ,GAAiBglB,CAAjB,GAEEhlB,CAEA,CAFWglB,CAEX,CAF4B,EAE5B,CADAH,CACA,CADY,CACZ,CAAAC,CAAA,EAJF,CAOAC,EAAA,CAAY,CACZ,KAAK3mD,CAAL,GAAYyhC,EAAZ,CACMvhC,EAAAC,KAAA,CAAoBshC,CAApB,CAA8BzhC,CAA9B,CAAJ,GACE2mD,CAAA,EAIA,CAHAL,CAGA,CAHU7kB,CAAA,CAASzhC,CAAT,CAGV,CAFAumD,CAEA,CAFU3kB,CAAA,CAAS5hC,CAAT,CAEV,CAAIA,CAAJ,GAAW4hC,EAAX,EACEykB,CACA,CADWE,CACX,GADuBA,CACvB,EADoCD,CACpC,GADgDA,CAChD,CAAKD,CAAL,EAAiBE,CAAjB,GAA6BD,CAA7B,GACEI,CAAA,EACA,CAAA9kB,CAAA,CAAS5hC,CAAT,CAAA,CAAgBsmD,CAFlB,CAFF,GAOEG,CAAA,EAEA,CADA7kB,CAAA,CAAS5hC,CAAT,CACA,CADgBsmD,CAChB,CAAAI,CAAA,EATF,CALF,CAkBF,IAAID,CAAJ,CAAgBE,CAAhB,CAGE,IAAK3mD,CAAL,GADA0mD,EAAA,EACY9kB,CAAAA,CAAZ,CACO1hC,EAAAC,KAAA,CAAoBshC,CAApB,CAA8BzhC,CAA9B,CAAL,GACEymD,CAAA,EACA,CAAA,OAAO7kB,CAAA,CAAS5hC,CAAT,CAFT,CAhCC,CA/BP,IACM4hC,EAAJ,GAAiBH,CAAjB,GACEG,CACA,CADWH,CACX,CAAAilB,CAAA,EAFF,CAqEF,OAAOA,EAxEP,CAL2C,CAnB7CP,CAAA3iB,UAAA,CAAwC,CAAA,CAExC,KAAIr8B,EAAO,IAAX,CAEIs6B,CAFJ,CAKIG,CALJ,CAOIilB,CAPJ,CASIC,EAAuC,CAAvCA,CAAqBt7B,CAAAhsB,OATzB,CAUIknD,EAAiB,CAVrB,CAWIK;AAAiBhsC,CAAA,CAAO5b,CAAP,CAAYgnD,CAAZ,CAXrB,CAYIK,EAAgB,EAZpB,CAaII,EAAiB,EAbrB,CAcII,EAAU,CAAA,CAdd,CAeIP,EAAY,CA+GhB,OAAO,KAAA/iD,OAAA,CAAYqjD,CAAZ,CA7BPE,QAA+B,EAAG,CAC5BD,CAAJ,EACEA,CACA,CADU,CAAA,CACV,CAAAx7B,CAAA,CAASiW,CAAT,CAAmBA,CAAnB,CAA6Bt6B,CAA7B,CAFF,EAIEqkB,CAAA,CAASiW,CAAT,CAAmBolB,CAAnB,CAAiC1/C,CAAjC,CAIF,IAAI2/C,CAAJ,CACE,GAAKxlD,CAAA,CAASmgC,CAAT,CAAL,CAGO,GAAIviC,EAAA,CAAYuiC,CAAZ,CAAJ,CAA2B,CAChColB,CAAA,CAAmBlnD,KAAJ,CAAU8hC,CAAAjiC,OAAV,CACf,KAAS,IAAAiB,EAAI,CAAb,CAAgBA,CAAhB,CAAoBghC,CAAAjiC,OAApB,CAAqCiB,CAAA,EAArC,CACEomD,CAAA,CAAapmD,CAAb,CAAA,CAAkBghC,CAAA,CAAShhC,CAAT,CAHY,CAA3B,IAOL,KAAST,CAAT,GADA6mD,EACgBplB,CADD,EACCA,CAAAA,CAAhB,CACMvhC,EAAAC,KAAA,CAAoBshC,CAApB,CAA8BzhC,CAA9B,CAAJ,GACE6mD,CAAA,CAAa7mD,CAAb,CADF,CACsByhC,CAAA,CAASzhC,CAAT,CADtB,CAXJ,KAEE6mD,EAAA,CAAeplB,CAZa,CA6B3B,CAjIiC,CAvW1B,CA8hBhBoW,QAASA,QAAQ,EAAG,CAAA,IACdqP,CADc,CACPtmD,CADO,CACA0kD,CADA,CACMl+C,CADN,CACU+F,CADV,CAEdg6C,CAFc,CAGd3nD,CAHc,CAId4nD,CAJc,CAIPC,EAAM70B,CAJC,CAKRqT,CALQ,CAMdyhB,EAAW,EANG,CAOdC,CAPc,CAONC,CAEZ9C,EAAA,CAAW,SAAX,CAEA7rC,EAAAqU,iBAAA,EAEI,KAAJ,GAAajS,CAAb,EAA4C,IAA5C,GAA2B+oC,CAA3B,GAGEnrC,CAAAwU,MAAAI,OAAA,CAAsBu2B,CAAtB,CACA,CAAAe,CAAA,EAJF,CAOAhB,EAAA,CAAiB,IAEjB,GAAG,CACDqD,CAAA,CAAQ,CAAA,CACRvhB,EAAA,CAnB0B9hB,IAwB1B,KAAS0jC,CAAT,CAA8B,CAA9B,CAAiCA,CAAjC,CAAsDC,CAAAloD,OAAtD,CAAyEioD,CAAA,EAAzE,CAA+F,CAC7F,GAAI,CACFD,CACA,CADYE,CAAA,CAAWD,CAAX,CACZ,CAAAD,CAAAr7C,MAAAw7C,MAAA,CAAsBH,CAAA1gB,WAAtB,CAA4C0gB,CAAAjgC,OAA5C,CAFE,CAGF,MAAOne,CAAP,CAAU,CACViQ,CAAA,CAAkBjQ,CAAlB,CADU,CAGZ26C,CAAA,CAAiB,IAP4E,CAS/F2D,CAAAloD,OAAA,CAAoB,CAEpB,EAAA,CACA,EAAG,CACD,GAAK2nD,CAAL,CAAgBthB,CAAAwd,WAAhB,CAGE,IADA7jD,CACA;AADS2nD,CAAA3nD,OACT,CAAOA,CAAA,EAAP,CAAA,CACE,GAAI,CAIF,GAHA0nD,CAGA,CAHQC,CAAA,CAAS3nD,CAAT,CAGR,CAEE,GADA2N,CACI,CADE+5C,CAAA/5C,IACF,EAACvM,CAAD,CAASuM,CAAA,CAAI04B,CAAJ,CAAT,KAA4Byf,CAA5B,CAAmC4B,CAAA5B,KAAnC,GACE,EAAA4B,CAAA3B,GAAA,CACIj/C,EAAA,CAAO1F,CAAP,CAAc0kD,CAAd,CADJ,CAEsB,QAFtB,GAEK,MAAO1kD,EAFZ,EAEkD,QAFlD,GAEkC,MAAO0kD,EAFzC,EAGQ98C,KAAA,CAAM5H,CAAN,CAHR,EAGwB4H,KAAA,CAAM88C,CAAN,CAHxB,CADN,CAKE8B,CAKA,CALQ,CAAA,CAKR,CAJArD,CAIA,CAJiBmD,CAIjB,CAHAA,CAAA5B,KAGA,CAHa4B,CAAA3B,GAAA,CAAWzgD,EAAA,CAAKlE,CAAL,CAAY,IAAZ,CAAX,CAA+BA,CAG5C,CAFAwG,CAEA,CAFK8/C,CAAA9/C,GAEL,CADAA,CAAA,CAAGxG,CAAH,CAAY0kD,CAAD,GAAUR,CAAV,CAA0BlkD,CAA1B,CAAkC0kD,CAA7C,CAAoDzf,CAApD,CACA,CAAU,CAAV,CAAIwhB,CAAJ,GACEE,CAEA,CAFS,CAET,CAFaF,CAEb,CADKC,CAAA,CAASC,CAAT,CACL,GADuBD,CAAA,CAASC,CAAT,CACvB,CAD0C,EAC1C,EAAAD,CAAA,CAASC,CAAT,CAAAriD,KAAA,CAAsB,CACpB0iD,IAAK3nD,CAAA,CAAWinD,CAAAjW,IAAX,CAAA,CAAwB,MAAxB,EAAkCiW,CAAAjW,IAAA/lC,KAAlC,EAAoDg8C,CAAAjW,IAAA7tC,SAAA,EAApD,EAA4E8jD,CAAAjW,IAD7D,CAEpBlnB,OAAQnpB,CAFY,CAGpBopB,OAAQs7B,CAHY,CAAtB,CAHF,CAVF,KAmBO,IAAI4B,CAAJ,GAAcnD,CAAd,CAA8B,CAGnCqD,CAAA,CAAQ,CAAA,CACR,OAAM,CAJ6B,CAzBrC,CAgCF,MAAOh+C,CAAP,CAAU,CACViQ,CAAA,CAAkBjQ,CAAlB,CADU,CAShB,GAAM,EAAAy+C,CAAA,CAAShiB,CAAA8d,gBAAT,EAAoC9d,CAAA0d,YAApC,EACD1d,CADC,GAlFkB9hB,IAkFlB,EACqB8hB,CAAAyd,cADrB,CAAN,CAEE,IAAA,CAAOzd,CAAP,GApFsB9hB,IAoFtB,EAA+B,EAAA8jC,CAAA,CAAOhiB,CAAAyd,cAAP,CAA/B,CAAA,CACEzd,CAAA,CAAUA,CAAApR,QAjDb,CAAH,MAoDUoR,CApDV,CAoDoBgiB,CApDpB,CAwDA,KAAKT,CAAL,EAAcM,CAAAloD,OAAd;AAAsC,CAAA6nD,CAAA,EAAtC,CAEE,KAueNpsC,EAAAuxB,QAveY,CAueS,IAveT,CAAAsX,CAAA,CAAiB,QAAjB,CAGFtxB,CAHE,CAGG80B,CAHH,CAAN,CA7ED,CAAH,MAmFSF,CAnFT,EAmFkBM,CAAAloD,OAnFlB,CAwFA,KA4dFyb,CAAAuxB,QA5dE,CA4dmB,IA5dnB,CAAOsb,CAAP,CAAiCC,CAAAvoD,OAAjC,CAAA,CACE,GAAI,CACFuoD,CAAA,CAAgBD,CAAA,EAAhB,CAAA,EADE,CAEF,MAAO1+C,CAAP,CAAU,CACViQ,CAAA,CAAkBjQ,CAAlB,CADU,CAId2+C,CAAAvoD,OAAA,CAAyBsoD,CAAzB,CAAmD,CArHjC,CA9hBJ,CAyrBhBn5C,SAAUA,QAAQ,EAAG,CAEnB,GAAIkxB,CAAA,IAAAA,YAAJ,CAAA,CACA,IAAIl9B,EAAS,IAAA8xB,QAEb,KAAAqiB,WAAA,CAAgB,UAAhB,CACA,KAAAjX,YAAA,CAAmB,CAAA,CAEf,KAAJ,GAAa5kB,CAAb,EAEEpC,CAAAkU,uBAAA,EAGF63B,EAAA,CAAuB,IAAvB,CAA6B,CAAC,IAAAjB,gBAA9B,CACA,KAASqE,IAAAA,CAAT,GAAsB,KAAAtE,gBAAtB,CACEmB,CAAA,CAAuB,IAAvB,CAA6B,IAAAnB,gBAAA,CAAqBsE,CAArB,CAA7B,CAA8DA,CAA9D,CAKErlD,EAAJ,EAAcA,CAAA4gD,YAAd,EAAoC,IAApC,GAA0C5gD,CAAA4gD,YAA1C,CAA+D,IAAAD,cAA/D,CACI3gD,EAAJ,EAAcA,CAAA6gD,YAAd,EAAoC,IAApC,GAA0C7gD,CAAA6gD,YAA1C,CAA+D,IAAAe,cAA/D,CACI,KAAAA,cAAJ;CAAwB,IAAAA,cAAAjB,cAAxB,CAA2D,IAAAA,cAA3D,CACI,KAAAA,cAAJ,GAAwB,IAAAA,cAAAiB,cAAxB,CAA2D,IAAAA,cAA3D,CAGA,KAAA51C,SAAA,CAAgB,IAAAkpC,QAAhB,CAA+B,IAAAxrC,OAA/B,CAA6C,IAAA5I,WAA7C,CAA+D,IAAA8oC,YAA/D,CAAkFzpC,CAClF,KAAAg4B,IAAA,CAAW,IAAAp3B,OAAX,CAAyB,IAAAkuC,YAAzB,CAA4CqW,QAAQ,EAAG,CAAE,MAAOnlD,EAAT,CACvD,KAAA2gD,YAAA,CAAmB,EAGnB,KAAAH,cAAA,CAAqB,IACrBgB,EAAA,CAAa,IAAb,CA9BA,CAFmB,CAzrBL,CAwvBhBqD,MAAOA,QAAQ,CAACtN,CAAD,CAAO9yB,CAAP,CAAe,CAC5B,MAAOxM,EAAA,CAAOs/B,CAAP,CAAA,CAAa,IAAb,CAAmB9yB,CAAnB,CADqB,CAxvBd,CA0xBhB9jB,WAAYA,QAAQ,CAAC42C,CAAD,CAAO9yB,CAAP,CAAe,CAG5BtM,CAAAuxB,QAAL,EAA4Bkb,CAAAloD,OAA5B,EACEqZ,CAAAwU,MAAA,CAAe,QAAQ,EAAG,CACpBq6B,CAAAloD,OAAJ,EACEyb,CAAA48B,QAAA,EAFsB,CAA1B,CAOF6P,EAAAxiD,KAAA,CAAgB,CAACiH,MAAO,IAAR,CAAc26B,WAAY/rB,CAAA,CAAOs/B,CAAP,CAA1B,CAAwC9yB,OAAQA,CAAhD,CAAhB,CAXiC,CA1xBnB,CAwyBhBib,aAAcA,QAAQ,CAACp7B,CAAD,CAAK,CACzB2gD,CAAA7iD,KAAA,CAAqBkC,CAArB,CADyB,CAxyBX;AAy1BhBiF,OAAQA,QAAQ,CAACguC,CAAD,CAAO,CACrB,GAAI,CACFqK,CAAA,CAAW,QAAX,CACA,IAAI,CACF,MAAO,KAAAiD,MAAA,CAAWtN,CAAX,CADL,CAAJ,OAEU,CA0Qdp/B,CAAAuxB,QAAA,CAAqB,IA1QP,CAJR,CAOF,MAAOpjC,CAAP,CAAU,CACViQ,CAAA,CAAkBjQ,CAAlB,CADU,CAPZ,OASU,CACR,GAAI,CACF6R,CAAA48B,QAAA,EADE,CAEF,MAAOzuC,CAAP,CAAU,CAEV,KADAiQ,EAAA,CAAkBjQ,CAAlB,CACMA,CAAAA,CAAN,CAFU,CAHJ,CAVW,CAz1BP,CA83BhBmjC,YAAaA,QAAQ,CAAC8N,CAAD,CAAO,CAM1B6N,QAASA,EAAqB,EAAG,CAC/B/7C,CAAAw7C,MAAA,CAAYtN,CAAZ,CAD+B,CALjC,IAAIluC,EAAQ,IACZkuC,EAAA,EAAQ2K,CAAA9/C,KAAA,CAAqBgjD,CAArB,CACR7N,EAAA,CAAOt/B,CAAA,CAAOs/B,CAAP,CACP4K,EAAA,EAJ0B,CA93BZ,CAo6BhBnqB,IAAKA,QAAQ,CAAC5vB,CAAD,CAAOsgB,CAAP,CAAiB,CAC5B,IAAI28B,EAAiB,IAAA1E,YAAA,CAAiBv4C,CAAjB,CAChBi9C,EAAL,GACE,IAAA1E,YAAA,CAAiBv4C,CAAjB,CADF,CAC2Bi9C,CAD3B,CAC4C,EAD5C,CAGAA,EAAAjjD,KAAA,CAAoBsmB,CAApB,CAEA,KAAIqa,EAAU,IACd,GACOA,EAAA6d,gBAAA,CAAwBx4C,CAAxB,CAGL,GAFE26B,CAAA6d,gBAAA,CAAwBx4C,CAAxB,CAEF,CAFkC,CAElC,EAAA26B,CAAA6d,gBAAA,CAAwBx4C,CAAxB,CAAA,EAJF,OAKU26B,CALV,CAKoBA,CAAApR,QALpB,CAOA,KAAIttB,EAAO,IACX,OAAO,SAAQ,EAAG,CAChB,IAAIihD,EAAkBD,CAAAvjD,QAAA,CAAuB4mB,CAAvB,CACG,GAAzB,GAAI48B,CAAJ,GACED,CAAA,CAAeC,CAAf,CACA,CADkC,IAClC,CAAAvD,CAAA,CAAuB19C,CAAvB,CAA6B,CAA7B,CAAgC+D,CAAhC,CAFF,CAFgB,CAhBU,CAp6Bd,CAo9BhBm9C,MAAOA,QAAQ,CAACn9C,CAAD;AAAOsa,CAAP,CAAa,CAAA,IACtBrc,EAAQ,EADc,CAEtBg/C,CAFsB,CAGtBh8C,EAAQ,IAHc,CAItBoX,EAAkB,CAAA,CAJI,CAKtBV,EAAQ,CACN3X,KAAMA,CADA,CAENo9C,YAAan8C,CAFP,CAGNoX,gBAAiBA,QAAQ,EAAG,CAACA,CAAA,CAAkB,CAAA,CAAnB,CAHtB,CAINk0B,eAAgBA,QAAQ,EAAG,CACzB50B,CAAAG,iBAAA,CAAyB,CAAA,CADA,CAJrB,CAONA,iBAAkB,CAAA,CAPZ,CALc,CActBulC,EAAexhD,EAAA,CAAO,CAAC8b,CAAD,CAAP,CAAgBxgB,SAAhB,CAA2B,CAA3B,CAdO,CAetB5B,CAfsB,CAenBjB,CAEP,GAAG,CACD2oD,CAAA,CAAiBh8C,CAAAs3C,YAAA,CAAkBv4C,CAAlB,CAAjB,EAA4C/B,CAC5C0Z,EAAAwhC,aAAA,CAAqBl4C,CAChB1L,EAAA,CAAI,CAAT,KAAYjB,CAAZ,CAAqB2oD,CAAA3oD,OAArB,CAA4CiB,CAA5C,CAAgDjB,CAAhD,CAAwDiB,CAAA,EAAxD,CAGE,GAAK0nD,CAAA,CAAe1nD,CAAf,CAAL,CAMA,GAAI,CAEF0nD,CAAA,CAAe1nD,CAAf,CAAA8G,MAAA,CAAwB,IAAxB,CAA8BghD,CAA9B,CAFE,CAGF,MAAOn/C,CAAP,CAAU,CACViQ,CAAA,CAAkBjQ,CAAlB,CADU,CATZ,IACE++C,EAAAtjD,OAAA,CAAsBpE,CAAtB,CAAyB,CAAzB,CAEA,CADAA,CAAA,EACA,CAAAjB,CAAA,EAWJ,IAAI+jB,CAAJ,CAEE,MADAV,EAAAwhC,aACOxhC,CADc,IACdA,CAAAA,CAGT1W,EAAA,CAAQA,CAAAsoB,QAzBP,CAAH,MA0BStoB,CA1BT,CA4BA0W,EAAAwhC,aAAA,CAAqB,IAErB,OAAOxhC,EA/CmB,CAp9BZ,CA4hChBi0B,WAAYA,QAAQ,CAAC5rC,CAAD,CAAOsa,CAAP,CAAa,CAAA,IAE3BqgB,EADS9hB,IADkB,CAG3B8jC,EAFS9jC,IADkB,CAI3BlB,EAAQ,CACN3X,KAAMA,CADA,CAENo9C,YALOvkC,IAGD,CAGN0zB,eAAgBA,QAAQ,EAAG,CACzB50B,CAAAG,iBAAA;AAAyB,CAAA,CADA,CAHrB,CAMNA,iBAAkB,CAAA,CANZ,CASZ,IAAK,CAZQe,IAYR2/B,gBAAA,CAAuBx4C,CAAvB,CAAL,CAAmC,MAAO2X,EAM1C,KAnB+B,IAe3B0lC,EAAexhD,EAAA,CAAO,CAAC8b,CAAD,CAAP,CAAgBxgB,SAAhB,CAA2B,CAA3B,CAfY,CAgBhB5B,CAhBgB,CAgBbjB,CAGlB,CAAQqmC,CAAR,CAAkBgiB,CAAlB,CAAA,CAAyB,CACvBhlC,CAAAwhC,aAAA,CAAqBxe,CACrBV,EAAA,CAAYU,CAAA4d,YAAA,CAAoBv4C,CAApB,CAAZ,EAAyC,EACpCzK,EAAA,CAAI,CAAT,KAAYjB,CAAZ,CAAqB2lC,CAAA3lC,OAArB,CAAuCiB,CAAvC,CAA2CjB,CAA3C,CAAmDiB,CAAA,EAAnD,CAEE,GAAK0kC,CAAA,CAAU1kC,CAAV,CAAL,CAOA,GAAI,CACF0kC,CAAA,CAAU1kC,CAAV,CAAA8G,MAAA,CAAmB,IAAnB,CAAyBghD,CAAzB,CADE,CAEF,MAAOn/C,CAAP,CAAU,CACViQ,CAAA,CAAkBjQ,CAAlB,CADU,CATZ,IACE+7B,EAAAtgC,OAAA,CAAiBpE,CAAjB,CAAoB,CAApB,CAEA,CADAA,CAAA,EACA,CAAAjB,CAAA,EAeJ,IAAM,EAAAqoD,CAAA,CAAShiB,CAAA6d,gBAAA,CAAwBx4C,CAAxB,CAAT,EAA0C26B,CAAA0d,YAA1C,EACD1d,CADC,GAzCK9hB,IAyCL,EACqB8hB,CAAAyd,cADrB,CAAN,CAEE,IAAA,CAAOzd,CAAP,GA3CS9hB,IA2CT,EAA+B,EAAA8jC,CAAA,CAAOhiB,CAAAyd,cAAP,CAA/B,CAAA,CACEzd,CAAA,CAAUA,CAAApR,QA1BS,CA+BzB5R,CAAAwhC,aAAA,CAAqB,IACrB,OAAOxhC,EAnDwB,CA5hCjB,CAmlClB,KAAI5H,EAAa,IAAIwpC,CAArB,CAGIiD,EAAazsC,CAAAutC,aAAbd,CAAuC,EAH3C,CAIIK,EAAkB9sC,CAAAwtC,kBAAlBV,CAAiD,EAJrD,CAKI/C,EAAkB/pC,CAAAytC,kBAAlB1D,CAAiD,EALrD,CAOI8C,EAA0B,CAE9B,OAAO7sC,EAtsCyC,CADtC,CA3BgB,CA+yC9B1I,QAASA,GAAqB,EAAG,CAAA,IAC3B0f;AAA6B,mCADF,CAE7BG,EAA8B,4CAkBhC,KAAAH,2BAAA,CAAkCC,QAAQ,CAACC,CAAD,CAAS,CACjD,MAAI7uB,EAAA,CAAU6uB,CAAV,CAAJ,EACEF,CACO,CADsBE,CACtB,CAAA,IAFT,EAIOF,CAL0C,CAyBnD,KAAAG,4BAAA,CAAmCC,QAAQ,CAACF,CAAD,CAAS,CAClD,MAAI7uB,EAAA,CAAU6uB,CAAV,CAAJ,EACEC,CACO,CADuBD,CACvB,CAAA,IAFT,EAIOC,CAL2C,CAQpD,KAAAjO,KAAA,CAAYC,QAAQ,EAAG,CACrB,MAAOukC,SAAoB,CAACC,CAAD,CAAMC,CAAN,CAAe,CACxC,IAAIC,EAAQD,CAAA,CAAUz2B,CAAV,CAAwCH,CAApD,CACI82B,CACJA,EAAA,CAAgBvZ,CAAA,CAAWoZ,CAAX,CAAAz8B,KAChB,OAAsB,EAAtB,GAAI48B,CAAJ,EAA6BA,CAAA5iD,MAAA,CAAoB2iD,CAApB,CAA7B,CAGOF,CAHP,CACS,SADT,CACqBG,CALmB,CADrB,CArDQ,CA2FjCC,QAASA,GAAa,CAACC,CAAD,CAAU,CAC9B,GAAgB,MAAhB,GAAIA,CAAJ,CACE,MAAOA,EACF,IAAI3pD,CAAA,CAAS2pD,CAAT,CAAJ,CAAuB,CAK5B,GAA8B,EAA9B,CAAIA,CAAArkD,QAAA,CAAgB,KAAhB,CAAJ,CACE,KAAMskD,GAAA,CAAW,QAAX,CACsDD,CADtD,CAAN,CAGFA,CAAA,CAAUE,EAAA,CAAgBF,CAAhB,CAAA5gD,QAAA,CACY,QADZ,CACsB,IADtB,CAAAA,QAAA,CAEY,KAFZ,CAEmB,YAFnB,CAGV,OAAO,KAAIvG,MAAJ,CAAW,GAAX;AAAiBmnD,CAAjB,CAA2B,GAA3B,CAZqB,CAavB,GAAIpnD,EAAA,CAASonD,CAAT,CAAJ,CAIL,MAAO,KAAInnD,MAAJ,CAAW,GAAX,CAAiBmnD,CAAAlkD,OAAjB,CAAkC,GAAlC,CAEP,MAAMmkD,GAAA,CAAW,UAAX,CAAN,CAtB4B,CA4BhCE,QAASA,GAAc,CAACC,CAAD,CAAW,CAChC,IAAIC,EAAmB,EACnBhmD,EAAA,CAAU+lD,CAAV,CAAJ,EACExpD,CAAA,CAAQwpD,CAAR,CAAkB,QAAQ,CAACJ,CAAD,CAAU,CAClCK,CAAApkD,KAAA,CAAsB8jD,EAAA,CAAcC,CAAd,CAAtB,CADkC,CAApC,CAIF,OAAOK,EAPyB,CA8ElC5tC,QAASA,GAAoB,EAAG,CAC9B,IAAA6tC,aAAA,CAAoBA,EADU,KAI1BC,EAAuB,CAAC,MAAD,CAJG,CAK1BC,EAAuB,EA0B3B,KAAAD,qBAAA,CAA4BE,QAAQ,CAAC9oD,CAAD,CAAQ,CACtCyB,SAAA7C,OAAJ,GACEgqD,CADF,CACyBJ,EAAA,CAAexoD,CAAf,CADzB,CAGA,OAAO4oD,EAJmC,CAkC5C,KAAAC,qBAAA,CAA4BE,QAAQ,CAAC/oD,CAAD,CAAQ,CACtCyB,SAAA7C,OAAJ,GACEiqD,CADF,CACyBL,EAAA,CAAexoD,CAAf,CADzB,CAGA,OAAO6oD,EAJmC,CAO5C,KAAAtlC,KAAA,CAAY,CAAC,WAAD,CAAc,QAAQ,CAAC4D,CAAD,CAAY,CAW5C6hC,QAASA,EAAQ,CAACX,CAAD,CAAU7V,CAAV,CAAqB,CACpC,MAAgB,MAAhB,GAAI6V,CAAJ,CACS1b,EAAA,CAAgB6F,CAAhB,CADT,CAIS,CAAE,CAAA6V,CAAAjrC,KAAA,CAAao1B,CAAAjnB,KAAb,CALyB,CA+BtC09B,QAASA,EAAkB,CAACC,CAAD,CAAO,CAChC,IAAIC,EAAaA,QAA+B,CAACC,CAAD,CAAe,CAC7D,IAAAC,qBAAA;AAA4BC,QAAQ,EAAG,CACrC,MAAOF,EAD8B,CADsB,CAK3DF,EAAJ,GACEC,CAAA5kC,UADF,CACyB,IAAI2kC,CAD7B,CAGAC,EAAA5kC,UAAAvjB,QAAA,CAA+BuoD,QAAmB,EAAG,CACnD,MAAO,KAAAF,qBAAA,EAD4C,CAGrDF,EAAA5kC,UAAA/hB,SAAA,CAAgCgnD,QAAoB,EAAG,CACrD,MAAO,KAAAH,qBAAA,EAAA7mD,SAAA,EAD8C,CAGvD,OAAO2mD,EAfyB,CAxClC,IAAIM,EAAgBA,QAAsB,CAAC9gD,CAAD,CAAO,CAC/C,KAAM2/C,GAAA,CAAW,QAAX,CAAN,CAD+C,CAI7CnhC,EAAAD,IAAA,CAAc,WAAd,CAAJ,GACEuiC,CADF,CACkBtiC,CAAA5a,IAAA,CAAc,WAAd,CADlB,CAN4C,KA4DxCm9C,EAAyBT,CAAA,EA5De,CA6DxCU,EAAS,EAEbA,EAAA,CAAOhB,EAAApoB,KAAP,CAAA,CAA4B0oB,CAAA,CAAmBS,CAAnB,CAC5BC,EAAA,CAAOhB,EAAAiB,IAAP,CAAA,CAA2BX,CAAA,CAAmBS,CAAnB,CAC3BC,EAAA,CAAOhB,EAAAkB,IAAP,CAAA,CAA2BZ,CAAA,CAAmBS,CAAnB,CAC3BC,EAAA,CAAOhB,EAAAmB,GAAP,CAAA,CAA0Bb,CAAA,CAAmBS,CAAnB,CAC1BC,EAAA,CAAOhB,EAAAnoB,aAAP,CAAA,CAAoCyoB,CAAA,CAAmBU,CAAA,CAAOhB,EAAAkB,IAAP,CAAnB,CA8GpC,OAAO,CAAEE,QA3FTA,QAAgB,CAACtkD,CAAD,CAAO2jD,CAAP,CAAqB,CACnC,IAAIY,EAAeL,CAAArqD,eAAA,CAAsBmG,CAAtB,CAAA,CAA8BkkD,CAAA,CAAOlkD,CAAP,CAA9B,CAA6C,IAChE,IAAKukD,CAAAA,CAAL,CACE,KAAM1B,GAAA,CAAW,UAAX,CAEF7iD,CAFE,CAEI2jD,CAFJ,CAAN,CAIF,GAAqB,IAArB,GAAIA,CAAJ,EAA6B3mD,CAAA,CAAY2mD,CAAZ,CAA7B;AAA2E,EAA3E,GAA0DA,CAA1D,CACE,MAAOA,EAIT,IAA4B,QAA5B,GAAI,MAAOA,EAAX,CACE,KAAMd,GAAA,CAAW,OAAX,CAEF7iD,CAFE,CAAN,CAIF,MAAO,KAAIukD,CAAJ,CAAgBZ,CAAhB,CAjB4B,CA2F9B,CACEnZ,WA1BTA,QAAmB,CAACxqC,CAAD,CAAOwkD,CAAP,CAAqB,CACtC,GAAqB,IAArB,GAAIA,CAAJ,EAA6BxnD,CAAA,CAAYwnD,CAAZ,CAA7B,EAA2E,EAA3E,GAA0DA,CAA1D,CACE,MAAOA,EAET,KAAInlD,EAAe6kD,CAAArqD,eAAA,CAAsBmG,CAAtB,CAAA,CAA8BkkD,CAAA,CAAOlkD,CAAP,CAA9B,CAA6C,IAChE,IAAIX,CAAJ,EAAmBmlD,CAAnB,WAA2CnlD,EAA3C,CACE,MAAOmlD,EAAAZ,qBAAA,EAKT,IAAI5jD,CAAJ,GAAakjD,EAAAnoB,aAAb,CAAwC,CA9IpCgS,IAAAA,EAAY5D,CAAA,CA+ImBqb,CA/IRznD,SAAA,EAAX,CAAZgwC,CACA3yC,CADA2yC,CACGllB,CADHklB,CACM0X,EAAU,CAAA,CAEfrqD,EAAA,CAAI,CAAT,KAAYytB,CAAZ,CAAgBs7B,CAAAhqD,OAAhB,CAA6CiB,CAA7C,CAAiDytB,CAAjD,CAAoDztB,CAAA,EAApD,CACE,GAAImpD,CAAA,CAASJ,CAAA,CAAqB/oD,CAArB,CAAT,CAAkC2yC,CAAlC,CAAJ,CAAkD,CAChD0X,CAAA,CAAU,CAAA,CACV,MAFgD,CAKpD,GAAIA,CAAJ,CAEE,IAAKrqD,CAAO,CAAH,CAAG,CAAAytB,CAAA,CAAIu7B,CAAAjqD,OAAhB,CAA6CiB,CAA7C,CAAiDytB,CAAjD,CAAoDztB,CAAA,EAApD,CACE,GAAImpD,CAAA,CAASH,CAAA,CAAqBhpD,CAArB,CAAT,CAAkC2yC,CAAlC,CAAJ,CAAkD,CAChD0X,CAAA,CAAU,CAAA,CACV,MAFgD,CAmIpD,GA7HKA,CA6HL,CACE,MAAOD,EAEP,MAAM3B,GAAA,CAAW,UAAX,CAEF2B,CAAAznD,SAAA,EAFE,CAAN,CAJoC,CAQjC,GAAIiD,CAAJ,GAAakjD,EAAApoB,KAAb,CACL,MAAOkpB,EAAA,CAAcQ,CAAd,CAET,MAAM3B,GAAA,CAAW,QAAX,CAAN,CAtBsC,CAyBjC,CAEEtnD,QAvDTA,QAAgB,CAACipD,CAAD,CAAe,CAC7B,MAAIA,EAAJ;AAA4BP,CAA5B,CACSO,CAAAZ,qBAAA,EADT,CAGSY,CAJoB,CAqDxB,CAjLqC,CAAlC,CAxEkB,CAyhBhCrvC,QAASA,GAAY,EAAG,CACtB,IAAI+W,EAAU,CAAA,CAad,KAAAA,QAAA,CAAew4B,QAAQ,CAACnqD,CAAD,CAAQ,CACzByB,SAAA7C,OAAJ,GACE+yB,CADF,CACY,CAAE3xB,CAAAA,CADd,CAGA,OAAO2xB,EAJsB,CAsD/B,KAAApO,KAAA,CAAY,CAAC,QAAD,CAAW,cAAX,CAA2B,QAAQ,CACjCpJ,CADiC,CACvBU,CADuB,CACT,CAGpC,GAAI8W,CAAJ,EAAsB,CAAtB,CAAe7K,EAAf,CACE,KAAMwhC,GAAA,CAAW,UAAX,CAAN,CAMF,IAAI8B,EAAMl5C,EAAA,CAAYy3C,EAAZ,CAaVyB,EAAAC,UAAA,CAAgBC,QAAQ,EAAG,CACzB,MAAO34B,EADkB,CAG3By4B,EAAAL,QAAA,CAAclvC,CAAAkvC,QACdK,EAAAna,WAAA,CAAiBp1B,CAAAo1B,WACjBma,EAAAppD,QAAA,CAAc6Z,CAAA7Z,QAET2wB,EAAL,GACEy4B,CAAAL,QACA,CADcK,CAAAna,WACd,CAD+Bsa,QAAQ,CAAC9kD,CAAD,CAAOzF,CAAP,CAAc,CAAE,MAAOA,EAAT,CACrD,CAAAoqD,CAAAppD,QAAA,CAAcmB,EAFhB,CAwBAioD,EAAAI,QAAA,CAAcC,QAAmB,CAAChlD,CAAD,CAAOg0C,CAAP,CAAa,CAC5C,IAAIn7B,EAASnE,CAAA,CAAOs/B,CAAP,CACb,OAAIn7B,EAAAkkB,QAAJ,EAAsBlkB,CAAA5N,SAAtB,CACS4N,CADT,CAGSnE,CAAA,CAAOs/B,CAAP,CAAa,QAAQ,CAACz5C,CAAD,CAAQ,CAClC,MAAOoqD,EAAAna,WAAA,CAAexqC,CAAf,CAAqBzF,CAArB,CAD2B,CAA7B,CALmC,CAtDV,KAoThCqH,EAAQ+iD,CAAAI,QApTwB;AAqThCva,EAAama,CAAAna,WArTmB,CAsThC8Z,EAAUK,CAAAL,QAEd9qD,EAAA,CAAQ0pD,EAAR,CAAsB,QAAQ,CAAC+B,CAAD,CAAYpgD,CAAZ,CAAkB,CAC9C,IAAIqgD,EAAQ/mD,CAAA,CAAU0G,CAAV,CACZ8/C,EAAA,CAAIjuC,EAAA,CAAU,WAAV,CAAwBwuC,CAAxB,CAAJ,CAAA,CAAsC,QAAQ,CAAClR,CAAD,CAAO,CACnD,MAAOpyC,EAAA,CAAMqjD,CAAN,CAAiBjR,CAAjB,CAD4C,CAGrD2Q,EAAA,CAAIjuC,EAAA,CAAU,cAAV,CAA2BwuC,CAA3B,CAAJ,CAAA,CAAyC,QAAQ,CAAC3qD,CAAD,CAAQ,CACvD,MAAOiwC,EAAA,CAAWya,CAAX,CAAsB1qD,CAAtB,CADgD,CAGzDoqD,EAAA,CAAIjuC,EAAA,CAAU,WAAV,CAAwBwuC,CAAxB,CAAJ,CAAA,CAAsC,QAAQ,CAAC3qD,CAAD,CAAQ,CACpD,MAAO+pD,EAAA,CAAQW,CAAR,CAAmB1qD,CAAnB,CAD6C,CARR,CAAhD,CAaA,OAAOoqD,EArU6B,CAD1B,CApEU,CA4ZxBpvC,QAASA,GAAgB,EAAG,CAC1B,IAAAuI,KAAA,CAAY,CAAC,SAAD,CAAY,WAAZ,CAAyB,QAAQ,CAAC9H,CAAD,CAAUlD,CAAV,CAAqB,CAAA,IAC5DqyC,EAAe,EAD6C,CAK5DC,EAAsB,EADApvC,CAAAqvC,OACA,EADkBrvC,CAAAqvC,OAAAC,IAClB,EADwCtvC,CAAAqvC,OAAAC,IAAAC,QACxC,CAAtBH,EAA8CpvC,CAAAoP,QAA9CggC,EAAiEpvC,CAAAoP,QAAAogC,UALL,CAM5DC,EACEvpD,CAAA,CAAM,CAAC,eAAAyb,KAAA,CAAqBxZ,CAAA,CAAUunD,CAAC1vC,CAAA2vC,UAADD,EAAsB,EAAtBA,WAAV,CAArB,CAAD,EAAyE,EAAzE,EAA6E,CAA7E,CAAN,CAP0D,CAQ5DE,EAAQ,QAAAnoD,KAAA,CAAcioD,CAAC1vC,CAAA2vC,UAADD,EAAsB,EAAtBA,WAAd,CARoD,CAS5DrkD,EAAWyR,CAAA,CAAU,CAAV,CAAXzR,EAA2B,EATiC,CAU5DwkD,CAV4D,CAW5DC,EAAc,2BAX8C;AAY5DC,EAAY1kD,CAAA8mC,KAAZ4d,EAA6B1kD,CAAA8mC,KAAAp7B,MAZ+B,CAa5Di5C,EAAc,CAAA,CAb8C,CAc5DC,EAAa,CAAA,CAGjB,IAAIF,CAAJ,CAAe,CACb,IAASpoD,IAAAA,CAAT,GAAiBooD,EAAjB,CACE,GAAIjmD,CAAJ,CAAYgmD,CAAAnuC,KAAA,CAAiBha,CAAjB,CAAZ,CAAoC,CAClCkoD,CAAA,CAAe/lD,CAAA,CAAM,CAAN,CACf+lD,EAAA,CAAeA,CAAA,CAAa,CAAb,CAAA/uC,YAAA,EAAf,CAA+C+uC,CAAAx/B,OAAA,CAAoB,CAApB,CAC/C,MAHkC,CAOjCw/B,CAAL,GACEA,CADF,CACkB,eADlB,EACqCE,EADrC,EACmD,QADnD,CAIAC,EAAA,CAAc,CAAG,EAAC,YAAD,EAAiBD,EAAjB,EAAgCF,CAAhC,CAA+C,YAA/C,EAA+DE,EAA/D,CACjBE,EAAA,CAAc,CAAG,EAAC,WAAD,EAAgBF,EAAhB,EAA+BF,CAA/B,CAA8C,WAA9C,EAA6DE,EAA7D,CAEbN,EAAAA,CAAJ,EAAiBO,CAAjB,EAAkCC,CAAlC,GACED,CACA,CADc/sD,CAAA,CAAS8sD,CAAAG,iBAAT,CACd,CAAAD,CAAA,CAAahtD,CAAA,CAAS8sD,CAAAI,gBAAT,CAFf,CAhBa,CAuBf,MAAO,CAUL/gC,QAAS,EAAGggC,CAAAA,CAAH,EAAsC,CAAtC,CAA4BK,CAA5B,EAA6CG,CAA7C,CAVJ,CAYLQ,SAAUA,QAAQ,CAAC5pC,CAAD,CAAQ,CAMxB,GAAc,OAAd,GAAIA,CAAJ,EAAiC,EAAjC,EAAyB6E,EAAzB,CAAqC,MAAO,CAAA,CAE5C,IAAIrkB,CAAA,CAAYmoD,CAAA,CAAa3oC,CAAb,CAAZ,CAAJ,CAAsC,CACpC,IAAI6pC,EAAShlD,CAAAoW,cAAA,CAAuB,KAAvB,CACb0tC,EAAA,CAAa3oC,CAAb,CAAA,CAAsB,IAAtB,CAA6BA,CAA7B,GAAsC6pC,EAFF,CAKtC,MAAOlB,EAAA,CAAa3oC,CAAb,CAbiB,CAZrB,CA2BL1Q,IAAKA,EAAA,EA3BA,CA4BL+5C,aAAcA,CA5BT,CA6BLG,YAAaA,CA7BR,CA8BLC,WAAYA,CA9BP,CA+BLR,QAASA,CA/BJ,CAxCyD,CAAtD,CADc,CAtzlBV;AA84lBlB9vC,QAASA,GAAwB,EAAG,CAElC,IAAI2wC,CAeJ,KAAAA,YAAA,CAAmBC,QAAQ,CAACnlD,CAAD,CAAM,CAC/B,MAAIA,EAAJ,EACEklD,CACO,CADOllD,CACP,CAAA,IAFT,EAIOklD,CALwB,CA8BjC,KAAAxoC,KAAA,CAAY,CAAC,gBAAD,CAAmB,OAAnB,CAA4B,IAA5B,CAAkC,MAAlC,CAA0C,QAAQ,CAACtI,CAAD,CAAiB9B,CAAjB,CAAwBoB,CAAxB,CAA4BI,CAA5B,CAAkC,CAE9FsxC,QAASA,EAAe,CAACC,CAAD,CAAMC,CAAN,CAA0B,CAChDF,CAAAG,qBAAA,EAOA,IAAK,CAAA1tD,CAAA,CAASwtD,CAAT,CAAL,EAAsBzpD,CAAA,CAAYwY,CAAA1O,IAAA,CAAmB2/C,CAAnB,CAAZ,CAAtB,CACEA,CAAA,CAAMvxC,CAAA0xC,sBAAA,CAA2BH,CAA3B,CAGR,KAAI9jB,EAAoBjvB,CAAAgvB,SAApBC,EAAsCjvB,CAAAgvB,SAAAC,kBAEtC3pC,EAAA,CAAQ2pC,CAAR,CAAJ,CACEA,CADF,CACsBA,CAAAv3B,OAAA,CAAyB,QAAQ,CAACy7C,CAAD,CAAc,CACjE,MAAOA,EAAP,GAAuBplB,EAD0C,CAA/C,CADtB,CAIWkB,CAJX,GAIiClB,EAJjC,GAKEkB,CALF,CAKsB,IALtB,CAQA,OAAOjvB,EAAA5M,IAAA,CAAU2/C,CAAV,CAAe3qD,CAAA,CAAO,CACzB4kB,MAAOlL,CADkB,CAEzBmtB,kBAAmBA,CAFM,CAAP,CAGjB2jB,CAHiB,CAAf,CAAA,CAIJ,SAJI,CAAA,CAIO,QAAQ,EAAG,CACrBE,CAAAG,qBAAA,EADqB,CAJlB,CAAAxtB,KAAA,CAOC,QAAQ,CAACkL,CAAD,CAAW,CACvB7uB,CAAAkJ,IAAA,CAAmB+nC,CAAnB,CAAwBpiB,CAAAp+B,KAAxB,CACA,OAAOo+B,EAAAp+B,KAFgB,CAPpB,CAYP6gD,QAAoB,CAACxiB,CAAD,CAAO,CACzB,GAAKoiB,CAAAA,CAAL,CACE,KAAMK,GAAA,CAAuB,QAAvB;AACJN,CADI,CACCniB,CAAA9B,OADD,CACc8B,CAAAgC,WADd,CAAN,CAGF,MAAOxxB,EAAAyvB,OAAA,CAAUD,CAAV,CALkB,CAZpB,CAtByC,CA2ClDkiB,CAAAG,qBAAA,CAAuC,CAEvC,OAAOH,EA/CuF,CAApF,CA/CsB,CAkGpC3wC,QAASA,GAAqB,EAAG,CAC/B,IAAAiI,KAAA,CAAY,CAAC,YAAD,CAAe,UAAf,CAA2B,WAA3B,CACP,QAAQ,CAAClJ,CAAD,CAAepC,CAAf,CAA2B8B,CAA3B,CAAsC,CA6GjD,MApGkB0yC,CAcN,aAAeC,QAAQ,CAAC/oD,CAAD,CAAUuiC,CAAV,CAAsBymB,CAAtB,CAAsC,CACnE59B,CAAAA,CAAWprB,CAAAipD,uBAAA,CAA+B,YAA/B,CACf,KAAIC,EAAU,EACd5tD,EAAA,CAAQ8vB,CAAR,CAAkB,QAAQ,CAAC2V,CAAD,CAAU,CAClC,IAAIooB,EAAcjhD,EAAAlI,QAAA,CAAgB+gC,CAAhB,CAAAh5B,KAAA,CAA8B,UAA9B,CACdohD,EAAJ,EACE7tD,CAAA,CAAQ6tD,CAAR,CAAqB,QAAQ,CAACC,CAAD,CAAc,CACrCJ,CAAJ,CAEMzpD,CADUmlD,IAAInnD,MAAJmnD,CAAW,SAAXA,CAAuBE,EAAA,CAAgBriB,CAAhB,CAAvBmiB,CAAqD,aAArDA,CACVnlD,MAAA,CAAa6pD,CAAb,CAFN,EAGIF,CAAAvoD,KAAA,CAAaogC,CAAb,CAHJ,CAM0C,EAN1C,EAMMqoB,CAAA/oD,QAAA,CAAoBkiC,CAApB,CANN,EAOI2mB,CAAAvoD,KAAA,CAAaogC,CAAb,CARqC,CAA3C,CAHgC,CAApC,CAiBA,OAAOmoB,EApBgE,CAdvDJ,CAiDN,WAAaO,QAAQ,CAACrpD,CAAD,CAAUuiC,CAAV,CAAsBymB,CAAtB,CAAsC,CAErE,IADA,IAAIM,EAAW,CAAC,KAAD,CAAQ,UAAR,CAAoB,OAApB,CAAf,CACSz/B,EAAI,CAAb,CAAgBA,CAAhB,CAAoBy/B,CAAAruD,OAApB,CAAqC,EAAE4uB,CAAvC,CAA0C,CAGxC,IAAI7M;AAAWhd,CAAAkb,iBAAA,CADA,GACA,CADMouC,CAAA,CAASz/B,CAAT,CACN,CADoB,OACpB,EAFOm/B,CAAAO,CAAiB,GAAjBA,CAAuB,IAE9B,EADgD,GAChD,CADsDhnB,CACtD,CADmE,IACnE,CACf,IAAIvlB,CAAA/hB,OAAJ,CACE,MAAO+hB,EAL+B,CAF2B,CAjDrD8rC,CAoEN,YAAcU,QAAQ,EAAG,CACnC,MAAOpzC,EAAA0Q,IAAA,EAD4B,CApEnBgiC,CAiFN,YAAcW,QAAQ,CAAC3iC,CAAD,CAAM,CAClCA,CAAJ,GAAY1Q,CAAA0Q,IAAA,EAAZ,GACE1Q,CAAA0Q,IAAA,CAAcA,CAAd,CACA,CAAApQ,CAAA48B,QAAA,EAFF,CADsC,CAjFtBwV,CAgGN,WAAaY,QAAQ,CAAC/hC,CAAD,CAAW,CAC1CrT,CAAAmT,gCAAA,CAAyCE,CAAzC,CAD0C,CAhG1BmhC,CAT+B,CADvC,CADmB,CAmHjCjxC,QAASA,GAAgB,EAAG,CAC1B,IAAA+H,KAAA,CAAY,CAAC,YAAD,CAAe,UAAf,CAA2B,IAA3B,CAAiC,KAAjC,CAAwC,mBAAxC,CACP,QAAQ,CAAClJ,CAAD,CAAepC,CAAf,CAA2BsC,CAA3B,CAAiCE,CAAjC,CAAwChC,CAAxC,CAA2D,CAkCtEm0B,QAASA,EAAO,CAACpmC,CAAD,CAAKmmB,CAAL,CAAY6kB,CAAZ,CAAyB,CAClCnyC,CAAA,CAAWmH,CAAX,CAAL,GACEgrC,CAEA,CAFc7kB,CAEd,CADAA,CACA,CADQnmB,CACR,CAAAA,CAAA,CAAKtE,CAHP,CADuC,KAOnC0iB,EAv9jBDpjB,EAAAjC,KAAA,CAu9jBkBkC,SAv9jBlB,CAu9jB6BiF,CAv9jB7B,CAg9jBoC,CAQnCmrC,EAAanvC,CAAA,CAAU8uC,CAAV,CAAbK,EAAuC,CAACL,CARL,CASnCtF,EAAWzf,CAAColB,CAAA,CAAYp3B,CAAZ,CAAkBF,CAAnBkS,OAAA,EATwB,CAUnC6c,EAAU4C,CAAA5C,QAVyB,CAWnC1c,CAEJA,EAAA,CAAY3U,CAAAwU,MAAA,CAAe,QAAQ,EAAG,CACpC,GAAI,CACFyf,CAAAC,QAAA,CAAiB3lC,CAAAG,MAAA,CAAS,IAAT;AAAeie,CAAf,CAAjB,CADE,CAEF,MAAOpc,CAAP,CAAU,CACV0jC,CAAAlC,OAAA,CAAgBxhC,CAAhB,CACA,CAAAiQ,CAAA,CAAkBjQ,CAAlB,CAFU,CAFZ,OAMQ,CACN,OAAO8kD,CAAA,CAAUhkB,CAAAikB,YAAV,CADD,CAIH1b,CAAL,EAAgBx3B,CAAA5O,OAAA,EAXoB,CAA1B,CAYTkhB,CAZS,CAcZ2c,EAAAikB,YAAA,CAAsB3gC,CACtB0gC,EAAA,CAAU1gC,CAAV,CAAA,CAAuBsf,CAEvB,OAAO5C,EA9BgC,CAhCzC,IAAIgkB,EAAY,EA8EhB1gB,EAAA/f,OAAA,CAAiB2gC,QAAQ,CAAClkB,CAAD,CAAU,CACjC,MAAIA,EAAJ,EAAeA,CAAAikB,YAAf,GAAsCD,EAAtC,EACEA,CAAA,CAAUhkB,CAAAikB,YAAV,CAAAvjB,OAAA,CAAsC,UAAtC,CAEO,CADP,OAAOsjB,CAAA,CAAUhkB,CAAAikB,YAAV,CACA,CAAAt1C,CAAAwU,MAAAI,OAAA,CAAsByc,CAAAikB,YAAtB,CAHT,EAKO,CAAA,CAN0B,CASnC,OAAO3gB,EAzF+D,CAD5D,CADc,CAuJ5BgC,QAASA,EAAU,CAACnkB,CAAD,CAAM,CAGnB3D,EAAJ,GAGE2mC,CAAAntC,aAAA,CAA4B,MAA5B,CAAoCiL,CAApC,CACA,CAAAA,CAAA,CAAOkiC,CAAAliC,KAJT,CAOAkiC,EAAAntC,aAAA,CAA4B,MAA5B,CAAoCiL,CAApC,CAGA,OAAO,CACLA,KAAMkiC,CAAAliC,KADD,CAELsjB,SAAU4e,CAAA5e,SAAA,CAA0B4e,CAAA5e,SAAApnC,QAAA,CAAgC,IAAhC,CAAsC,EAAtC,CAA1B,CAAsE,EAF3E,CAGLwZ,KAAMwsC,CAAAxsC,KAHD,CAILoyB,OAAQoa,CAAApa,OAAA,CAAwBoa,CAAApa,OAAA5rC,QAAA,CAA8B,KAA9B,CAAqC,EAArC,CAAxB,CAAmE,EAJtE,CAKLohB,KAAM4kC,CAAA5kC,KAAA,CAAsB4kC,CAAA5kC,KAAAphB,QAAA,CAA4B,IAA5B;AAAkC,EAAlC,CAAtB,CAA8D,EAL/D,CAMLkrC,SAAU8a,CAAA9a,SANL,CAOLE,KAAM4a,CAAA5a,KAPD,CAQLM,SAAiD,GAAvC,GAACsa,CAAAta,SAAAjtC,OAAA,CAA+B,CAA/B,CAAD,CACNunD,CAAAta,SADM,CAEN,GAFM,CAEAsa,CAAAta,SAVL,CAbgB,CAkCzBxG,QAASA,GAAe,CAAC+gB,CAAD,CAAa,CAC/BpvC,CAAAA,CAAU5f,CAAA,CAASgvD,CAAT,CAAD,CAAyB9e,CAAA,CAAW8e,CAAX,CAAzB,CAAkDA,CAC/D,OAAQpvC,EAAAuwB,SAAR,GAA4B8e,EAAA9e,SAA5B,EACQvwB,CAAA2C,KADR,GACwB0sC,EAAA1sC,KAHW,CA+CrCvF,QAASA,GAAe,EAAG,CACzB,IAAA6H,KAAA,CAAYlhB,EAAA,CAAQjE,CAAR,CADa,CAa3BwvD,QAASA,GAAc,CAACr1C,CAAD,CAAY,CAKjCs1C,QAASA,EAAsB,CAACjsD,CAAD,CAAM,CACnC,GAAI,CACF,MAAOmH,mBAAA,CAAmBnH,CAAnB,CADL,CAEF,MAAO4G,CAAP,CAAU,CACV,MAAO5G,EADG,CAHuB,CAJrC,IAAI4rC,EAAcj1B,CAAA,CAAU,CAAV,CAAdi1B,EAA8B,EAAlC,CACIsgB,EAAc,EADlB,CAEIC,EAAmB,EAUvB,OAAO,SAAQ,EAAG,CAAA,IACZC,CADY,CACCC,CADD,CACSpuD,CADT,CACYkE,CADZ,CACmBuG,CAC/B4jD,EAAAA,CAAsB1gB,CAAAygB,OAAtBC,EAA4C,EAEhD,IAAIA,CAAJ,GAA4BH,CAA5B,CAKE,IAJAA,CAIK,CAJcG,CAId,CAHLF,CAGK,CAHSD,CAAAtqD,MAAA,CAAuB,IAAvB,CAGT,CAFLqqD,CAEK,CAFS,EAET,CAAAjuD,CAAA,CAAI,CAAT,CAAYA,CAAZ,CAAgBmuD,CAAApvD,OAAhB,CAAoCiB,CAAA,EAApC,CACEouD,CAEA,CAFSD,CAAA,CAAYnuD,CAAZ,CAET,CADAkE,CACA,CADQkqD,CAAAjqD,QAAA,CAAe,GAAf,CACR,CAAY,CAAZ,CAAID,CAAJ,GACEuG,CAIA,CAJOujD,CAAA,CAAuBI,CAAA9kD,UAAA,CAAiB,CAAjB,CAAoBpF,CAApB,CAAvB,CAIP,CAAItB,CAAA,CAAYqrD,CAAA,CAAYxjD,CAAZ,CAAZ,CAAJ,GACEwjD,CAAA,CAAYxjD,CAAZ,CADF,CACsBujD,CAAA,CAAuBI,CAAA9kD,UAAA,CAAiBpF,CAAjB;AAAyB,CAAzB,CAAvB,CADtB,CALF,CAWJ,OAAO+pD,EAvBS,CAbe,CA0CnC5xC,QAASA,GAAsB,EAAG,CAChC,IAAAqH,KAAA,CAAYqqC,EADoB,CAwGlCh1C,QAASA,GAAe,CAAC3N,CAAD,CAAW,CAmBjC46B,QAASA,EAAQ,CAACv7B,CAAD,CAAO8E,CAAP,CAAgB,CAC/B,GAAI1O,CAAA,CAAS4J,CAAT,CAAJ,CAAoB,CAClB,IAAI6jD,EAAU,EACdlvD,EAAA,CAAQqL,CAAR,CAAc,QAAQ,CAACuG,CAAD,CAASzR,CAAT,CAAc,CAClC+uD,CAAA,CAAQ/uD,CAAR,CAAA,CAAeymC,CAAA,CAASzmC,CAAT,CAAcyR,CAAd,CADmB,CAApC,CAGA,OAAOs9C,EALW,CAOlB,MAAOljD,EAAAmE,QAAA,CAAiB9E,CAAjB,CA1BE8jD,QA0BF,CAAgCh/C,CAAhC,CARsB,CAWjC,IAAAy2B,SAAA,CAAgBA,CAEhB,KAAAtiB,KAAA,CAAY,CAAC,WAAD,CAAc,QAAQ,CAAC4D,CAAD,CAAY,CAC5C,MAAO,SAAQ,CAAC7c,CAAD,CAAO,CACpB,MAAO6c,EAAA5a,IAAA,CAAcjC,CAAd,CAjCE8jD,QAiCF,CADa,CADsB,CAAlC,CAoBZvoB,EAAA,CAAS,UAAT,CAAqBwoB,EAArB,CACAxoB,EAAA,CAAS,MAAT,CAAiByoB,EAAjB,CACAzoB,EAAA,CAAS,QAAT,CAAmB0oB,EAAnB,CACA1oB,EAAA,CAAS,MAAT,CAAiB2oB,EAAjB,CACA3oB,EAAA,CAAS,SAAT,CAAoB4oB,EAApB,CACA5oB,EAAA,CAAS,WAAT,CAAsB6oB,EAAtB,CACA7oB,EAAA,CAAS,QAAT,CAAmB8oB,EAAnB,CACA9oB,EAAA,CAAS,SAAT,CAAoB+oB,EAApB,CACA/oB,EAAA,CAAS,WAAT,CAAsBgpB,EAAtB,CA5DiC,CAmMnCN,QAASA,GAAY,EAAG,CACtB,MAAO,SAAQ,CAACzqD,CAAD,CAAQoiC,CAAR,CAAoB4oB,CAApB,CAAgCC,CAAhC,CAAgD,CAC7D,GAAK,CAAAzwD,EAAA,CAAYwF,CAAZ,CAAL,CAAyB,CACvB,GAAa,IAAb,EAAIA,CAAJ,CACE,MAAOA,EAEP,MAAMzF,EAAA,CAAO,QAAP,CAAA,CAAiB,UAAjB;AAAiEyF,CAAjE,CAAN,CAJqB,CAQzBirD,CAAA,CAAiBA,CAAjB,EAAmC,GAGnC,KAAIC,CAEJ,QAJqBC,EAAAC,CAAiBhpB,CAAjBgpB,CAIrB,EACE,KAAK,UAAL,CAEE,KACF,MAAK,SAAL,CACA,KAAK,MAAL,CACA,KAAK,QAAL,CACA,KAAK,QAAL,CACEF,CAAA,CAAsB,CAAA,CAExB,MAAK,QAAL,CAEEG,CAAA,CAAcC,EAAA,CAAkBlpB,CAAlB,CAA8B4oB,CAA9B,CAA0CC,CAA1C,CAA0DC,CAA1D,CACd,MACF,SACE,MAAOlrD,EAfX,CAkBA,MAAO/E,MAAAwlB,UAAA1T,OAAAtR,KAAA,CAA4BuE,CAA5B,CAAmCqrD,CAAnC,CAhCsD,CADzC,CAsCxBC,QAASA,GAAiB,CAAClpB,CAAD,CAAa4oB,CAAb,CAAyBC,CAAzB,CAAyCC,CAAzC,CAA8D,CACtF,IAAIK,EAAwB3uD,CAAA,CAASwlC,CAAT,CAAxBmpB,EAAiDN,CAAjDM,GAAmEnpB,EAGpD,EAAA,CAAnB,GAAI4oB,CAAJ,CACEA,CADF,CACeppD,EADf,CAEYrG,CAAA,CAAWyvD,CAAX,CAFZ,GAGEA,CAHF,CAGeA,QAAQ,CAACQ,CAAD,CAASC,CAAT,CAAmB,CACtC,GAAI9sD,CAAA,CAAY6sD,CAAZ,CAAJ,CAEE,MAAO,CAAA,CAET,IAAgB,IAAhB,GAAKA,CAAL,EAAuC,IAAvC,GAA0BC,CAA1B,CAEE,MAAOD,EAAP,GAAkBC,CAEpB,IAAI7uD,CAAA,CAAS6uD,CAAT,CAAJ,EAA2B7uD,CAAA,CAAS4uD,CAAT,CAA3B,EAAgD,CAAA/sD,EAAA,CAAkB+sD,CAAlB,CAAhD,CAEE,MAAO,CAAA,CAGTA,EAAA,CAAS1rD,CAAA,CAAU,EAAV,CAAe0rD,CAAf,CACTC,EAAA,CAAW3rD,CAAA,CAAU,EAAV,CAAe2rD,CAAf,CACX,OAAqC,EAArC,GAAOD,CAAAtrD,QAAA,CAAeurD,CAAf,CAhB+B,CAH1C,CA8BA,OAPcJ,SAAQ,CAACnwD,CAAD,CAAO,CAC3B,MAAIqwD,EAAJ,EAA8B,CAAA3uD,CAAA,CAAS1B,CAAT,CAA9B,CACSwwD,EAAA,CAAYxwD,CAAZ,CAAkBknC,CAAA,CAAW6oB,CAAX,CAAlB,CAA8CD,CAA9C,CAA0DC,CAA1D,CAA0E,CAAA,CAA1E,CADT,CAGOS,EAAA,CAAYxwD,CAAZ,CAAkBknC,CAAlB,CAA8B4oB,CAA9B,CAA0CC,CAA1C,CAA0DC,CAA1D,CAJoB,CA3ByD,CAqCxFQ,QAASA,GAAW,CAACF,CAAD,CAASC,CAAT,CAAmBT,CAAnB,CAA+BC,CAA/B,CAA+CC,CAA/C;AAAoES,CAApE,CAA0F,CAC5G,IAAIC,EAAaT,EAAA,CAAiBK,CAAjB,CAAjB,CACIK,EAAeV,EAAA,CAAiBM,CAAjB,CAEnB,IAAsB,QAAtB,GAAKI,CAAL,EAA2D,GAA3D,GAAoCJ,CAAArpD,OAAA,CAAgB,CAAhB,CAApC,CACE,MAAO,CAACspD,EAAA,CAAYF,CAAZ,CAAoBC,CAAApmD,UAAA,CAAmB,CAAnB,CAApB,CAA2C2lD,CAA3C,CAAuDC,CAAvD,CAAuEC,CAAvE,CACH,IAAIvwD,CAAA,CAAQ6wD,CAAR,CAAJ,CAGL,MAAOA,EAAArnC,KAAA,CAAY,QAAQ,CAACjpB,CAAD,CAAO,CAChC,MAAOwwD,GAAA,CAAYxwD,CAAZ,CAAkBuwD,CAAlB,CAA4BT,CAA5B,CAAwCC,CAAxC,CAAwDC,CAAxD,CADyB,CAA3B,CAKT,QAAQU,CAAR,EACE,KAAK,QAAL,CACE,IAAItwD,CACJ,IAAI4vD,CAAJ,CAAyB,CACvB,IAAK5vD,CAAL,GAAYkwD,EAAZ,CACE,GAAuB,GAAvB,GAAKlwD,CAAA8G,OAAA,CAAW,CAAX,CAAL,EAA+BspD,EAAA,CAAYF,CAAA,CAAOlwD,CAAP,CAAZ,CAAyBmwD,CAAzB,CAAmCT,CAAnC,CAA+CC,CAA/C,CAA+D,CAAA,CAA/D,CAA/B,CACE,MAAO,CAAA,CAGX,OAAOU,EAAA,CAAuB,CAAA,CAAvB,CAA+BD,EAAA,CAAYF,CAAZ,CAAoBC,CAApB,CAA8BT,CAA9B,CAA0CC,CAA1C,CAA0D,CAAA,CAA1D,CANf,CAOlB,GAAqB,QAArB,GAAIY,CAAJ,CAA+B,CACpC,IAAKvwD,CAAL,GAAYmwD,EAAZ,CAEE,GADIK,CACA,CADcL,CAAA,CAASnwD,CAAT,CACd,CAAA,CAAAC,CAAA,CAAWuwD,CAAX,CAAA,EAA2B,CAAAntD,CAAA,CAAYmtD,CAAZ,CAA3B,GAIAC,CAEC,CAFkBzwD,CAElB,GAF0B2vD,CAE1B,CAAA,CAAAS,EAAA,CADWK,CAAAC,CAAmBR,CAAnBQ,CAA4BR,CAAA,CAAOlwD,CAAP,CACvC,CAAuBwwD,CAAvB,CAAoCd,CAApC,CAAgDC,CAAhD,CAAgEc,CAAhE,CAAkFA,CAAlF,CAND,CAAJ,CAOE,MAAO,CAAA,CAGX,OAAO,CAAA,CAb6B,CAepC,MAAOf,EAAA,CAAWQ,CAAX,CAAmBC,CAAnB,CAGX,MAAK,UAAL,CACE,MAAO,CAAA,CACT,SACE,MAAOT,EAAA,CAAWQ,CAAX,CAAmBC,CAAnB,CA/BX,CAd4G,CAkD9GN,QAASA,GAAgB,CAACpoD,CAAD,CAAM,CAC7B,MAAgB,KAAT,GAACA,CAAD,CAAiB,MAAjB,CAA0B,MAAOA,EADX,CA6D/BwnD,QAASA,GAAc,CAAC0B,CAAD,CAAU,CAC/B,IAAIC;AAAUD,CAAAE,eACd,OAAO,SAAQ,CAACC,CAAD,CAASC,CAAT,CAAyBC,CAAzB,CAAuC,CAChD3tD,CAAA,CAAY0tD,CAAZ,CAAJ,GACEA,CADF,CACmBH,CAAAK,aADnB,CAII5tD,EAAA,CAAY2tD,CAAZ,CAAJ,GACEA,CADF,CACiBJ,CAAAM,SAAA,CAAiB,CAAjB,CAAAC,QADjB,CAKA,OAAkB,KAAX,EAACL,CAAD,CACDA,CADC,CAEDM,EAAA,CAAaN,CAAb,CAAqBF,CAAAM,SAAA,CAAiB,CAAjB,CAArB,CAA0CN,CAAAS,UAA1C,CAA6DT,CAAAU,YAA7D,CAAkFN,CAAlF,CAAA3oD,QAAA,CACU,SADV,CACqB0oD,CADrB,CAZ8C,CAFvB,CA0EjCxB,QAASA,GAAY,CAACoB,CAAD,CAAU,CAC7B,IAAIC,EAAUD,CAAAE,eACd,OAAO,SAAQ,CAACU,CAAD,CAASP,CAAT,CAAuB,CAGpC,MAAkB,KAAX,EAACO,CAAD,CACDA,CADC,CAEDH,EAAA,CAAaG,CAAb,CAAqBX,CAAAM,SAAA,CAAiB,CAAjB,CAArB,CAA0CN,CAAAS,UAA1C,CAA6DT,CAAAU,YAA7D,CACaN,CADb,CAL8B,CAFT,CAyB/B/oD,QAASA,GAAK,CAACupD,CAAD,CAAS,CAAA,IACjBC,EAAW,CADM,CACHC,CADG,CACKC,CADL,CAEjBlxD,CAFiB,CAEdc,CAFc,CAEXqwD,CAGmD,GAA7D,EAAKD,CAAL,CAA6BH,CAAA5sD,QAAA,CAAe0sD,EAAf,CAA7B,IACEE,CADF,CACWA,CAAAnpD,QAAA,CAAeipD,EAAf,CAA4B,EAA5B,CADX,CAKgC,EAAhC,EAAK7wD,CAAL,CAAS+wD,CAAAvd,OAAA,CAAc,IAAd,CAAT,GAE8B,CAE5B,CAFI0d,CAEJ,GAF+BA,CAE/B,CAFuDlxD,CAEvD,EADAkxD,CACA,EADyB,CAACH,CAAApvD,MAAA,CAAa3B,CAAb,CAAiB,CAAjB,CAC1B,CAAA+wD,CAAA,CAASA,CAAAznD,UAAA,CAAiB,CAAjB,CAAoBtJ,CAApB,CAJX,EAKmC,CALnC,CAKWkxD,CALX,GAOEA,CAPF,CAO0BH,CAAAhyD,OAP1B,CAWA,KAAKiB,CAAL,CAAS,CAAT,CAAY+wD,CAAA1qD,OAAA,CAAcrG,CAAd,CAAZ,EAAgCoxD,EAAhC,CAA2CpxD,CAAA,EAA3C;AAEA,GAAIA,CAAJ,GAAUmxD,CAAV,CAAkBJ,CAAAhyD,OAAlB,EAEEkyD,CACA,CADS,CAAC,CAAD,CACT,CAAAC,CAAA,CAAwB,CAH1B,KAIO,CAGL,IADAC,CAAA,EACA,CAAOJ,CAAA1qD,OAAA,CAAc8qD,CAAd,CAAP,EAA+BC,EAA/B,CAAA,CAA0CD,CAAA,EAG1CD,EAAA,EAAyBlxD,CACzBixD,EAAA,CAAS,EAET,KAAKnwD,CAAL,CAAS,CAAT,CAAYd,CAAZ,EAAiBmxD,CAAjB,CAAwBnxD,CAAA,EAAA,CAAKc,CAAA,EAA7B,CACEmwD,CAAA,CAAOnwD,CAAP,CAAA,CAAY,CAACiwD,CAAA1qD,OAAA,CAAcrG,CAAd,CAVV,CAeHkxD,CAAJ,CAA4BG,EAA5B,GACEJ,CAEA,CAFSA,CAAA7sD,OAAA,CAAc,CAAd,CAAiBitD,EAAjB,CAA8B,CAA9B,CAET,CADAL,CACA,CADWE,CACX,CADmC,CACnC,CAAAA,CAAA,CAAwB,CAH1B,CAMA,OAAO,CAAEzoB,EAAGwoB,CAAL,CAAatoD,EAAGqoD,CAAhB,CAA0BhxD,EAAGkxD,CAA7B,CAhDc,CAuDvBI,QAASA,GAAW,CAACC,CAAD,CAAehB,CAAf,CAA6BiB,CAA7B,CAAsCd,CAAtC,CAA+C,CAC/D,IAAIO,EAASM,CAAA9oB,EAAb,CACIgpB,EAAcR,CAAAlyD,OAAd0yD,CAA8BF,CAAAvxD,EAGlCuwD,EAAA,CAAgB3tD,CAAA,CAAY2tD,CAAZ,CAAD,CAA8B9yB,IAAAi0B,IAAA,CAASj0B,IAAAC,IAAA,CAAS8zB,CAAT,CAAkBC,CAAlB,CAAT,CAAyCf,CAAzC,CAA9B,CAAkF,CAACH,CAG9FoB,EAAAA,CAAUpB,CAAVoB,CAAyBJ,CAAAvxD,EACzB4xD,EAAAA,CAAQX,CAAA,CAAOU,CAAP,CAEZ,IAAc,CAAd,CAAIA,CAAJ,CAAiB,CAEfV,CAAA7sD,OAAA,CAAcq5B,IAAAC,IAAA,CAAS6zB,CAAAvxD,EAAT,CAAyB2xD,CAAzB,CAAd,CAGA,KAAS,IAAA7wD,EAAI6wD,CAAb,CAAsB7wD,CAAtB,CAA0BmwD,CAAAlyD,OAA1B,CAAyC+B,CAAA,EAAzC,CACEmwD,CAAA,CAAOnwD,CAAP,CAAA,CAAY,CANC,CAAjB,IAcE,KAJA2wD,CAISzxD,CAJKy9B,IAAAC,IAAA,CAAS,CAAT,CAAY+zB,CAAZ,CAILzxD,CAHTuxD,CAAAvxD,EAGSA,CAHQ,CAGRA,CAFTixD,CAAAlyD,OAESiB,CAFOy9B,IAAAC,IAAA,CAAS,CAAT,CAAYi0B,CAAZ,CAAsBpB,CAAtB,CAAqC,CAArC,CAEPvwD,CADTixD,CAAA,CAAO,CAAP,CACSjxD,CADG,CACHA,CAAAA,CAAAA,CAAI,CAAb,CAAgBA,CAAhB,CAAoB2xD,CAApB,CAA6B3xD,CAAA,EAA7B,CAAkCixD,CAAA,CAAOjxD,CAAP,CAAA,CAAY,CAGhD,IAAa,CAAb,EAAI4xD,CAAJ,CACE,GAAkB,CAAlB,CAAID,CAAJ,CAAc,CAAd,CAAqB,CACnB,IAASE,CAAT,CAAa,CAAb,CAAgBA,CAAhB,CAAoBF,CAApB,CAA6BE,CAAA,EAA7B,CACEZ,CAAA9lD,QAAA,CAAe,CAAf,CACA,CAAAomD,CAAAvxD,EAAA,EAEFixD,EAAA9lD,QAAA,CAAe,CAAf,CACAomD,EAAAvxD,EAAA,EANmB,CAArB,IAQEixD,EAAA,CAAOU,CAAP,CAAiB,CAAjB,CAAA,EAKJ;IAAA,CAAOF,CAAP,CAAqBh0B,IAAAC,IAAA,CAAS,CAAT,CAAY6yB,CAAZ,CAArB,CAAgDkB,CAAA,EAAhD,CAA+DR,CAAAxsD,KAAA,CAAY,CAAZ,CAS/D,IALIqtD,CAKJ,CALYb,CAAAc,YAAA,CAAmB,QAAQ,CAACD,CAAD,CAAQrpB,CAAR,CAAWzoC,CAAX,CAAcixD,CAAd,CAAsB,CAC3DxoB,CAAA,EAAQqpB,CACRb,EAAA,CAAOjxD,CAAP,CAAA,CAAYyoC,CAAZ,CAAgB,EAChB,OAAOhL,KAAA6G,MAAA,CAAWmE,CAAX,CAAe,EAAf,CAHoD,CAAjD,CAIT,CAJS,CAKZ,CACEwoB,CAAA9lD,QAAA,CAAe2mD,CAAf,CACA,CAAAP,CAAAvxD,EAAA,EArD6D,CA2EnE2wD,QAASA,GAAY,CAACG,CAAD,CAAS36C,CAAT,CAAkB67C,CAAlB,CAA4BC,CAA5B,CAAwC1B,CAAxC,CAAsD,CAEzE,GAAM,CAAA1xD,CAAA,CAASiyD,CAAT,CAAN,EAA0B,CAAA7xD,CAAA,CAAS6xD,CAAT,CAA1B,EAA+C/oD,KAAA,CAAM+oD,CAAN,CAA/C,CAA8D,MAAO,EAErE,KAAIoB,EAAa,CAACC,QAAA,CAASrB,CAAT,CAAlB,CACIsB,EAAS,CAAA,CADb,CAEIrB,EAAStzB,IAAA40B,IAAA,CAASvB,CAAT,CAATC,CAA4B,EAFhC,CAGIuB,EAAgB,EAGpB,IAAIJ,CAAJ,CACEI,CAAA,CAAgB,QADlB,KAEO,CACLf,CAAA,CAAe/pD,EAAA,CAAMupD,CAAN,CAEfO,GAAA,CAAYC,CAAZ,CAA0BhB,CAA1B,CAAwCp6C,CAAAq7C,QAAxC,CAAyDr7C,CAAAu6C,QAAzD,CAEIO,EAAAA,CAASM,CAAA9oB,EACT8pB,EAAAA,CAAahB,CAAAvxD,EACbgxD,EAAAA,CAAWO,CAAA5oD,EACX6pD,EAAAA,CAAW,EAIf,KAHAJ,CAGA,CAHSnB,CAAAwB,OAAA,CAAc,QAAQ,CAACL,CAAD,CAAS3pB,CAAT,CAAY,CAAE,MAAO2pB,EAAP,EAAiB,CAAC3pB,CAApB,CAAlC,CAA4D,CAAA,CAA5D,CAGT,CAAoB,CAApB,CAAO8pB,CAAP,CAAA,CACEtB,CAAA9lD,QAAA,CAAe,CAAf,CACA,CAAAonD,CAAA,EAIe,EAAjB,CAAIA,CAAJ,CACEC,CADF,CACavB,CAAA7sD,OAAA,CAAcmuD,CAAd,CAA0BtB,CAAAlyD,OAA1B,CADb,EAGEyzD,CACA,CADWvB,CACX,CAAAA,CAAA,CAAS,CAAC,CAAD,CAJX,CAQIyB,EAAAA,CAAS,EAIb,KAHIzB,CAAAlyD,OAGJ,EAHqBoX,CAAAw8C,OAGrB,EAFED,CAAAvnD,QAAA,CAAe8lD,CAAA7sD,OAAA,CAAc,CAAC+R,CAAAw8C,OAAf,CAA+B1B,CAAAlyD,OAA/B,CAAA4K,KAAA,CAAmD,EAAnD,CAAf,CAEF,CAAOsnD,CAAAlyD,OAAP;AAAuBoX,CAAAy8C,MAAvB,CAAA,CACEF,CAAAvnD,QAAA,CAAe8lD,CAAA7sD,OAAA,CAAc,CAAC+R,CAAAy8C,MAAf,CAA8B3B,CAAAlyD,OAA9B,CAAA4K,KAAA,CAAkD,EAAlD,CAAf,CAEEsnD,EAAAlyD,OAAJ,EACE2zD,CAAAvnD,QAAA,CAAe8lD,CAAAtnD,KAAA,CAAY,EAAZ,CAAf,CAEF2oD,EAAA,CAAgBI,CAAA/oD,KAAA,CAAYqoD,CAAZ,CAGZQ,EAAAzzD,OAAJ,GACEuzD,CADF,EACmBL,CADnB,CACgCO,CAAA7oD,KAAA,CAAc,EAAd,CADhC,CAIIqnD,EAAJ,GACEsB,CADF,EACmB,IADnB,CAC0BtB,CAD1B,CA3CK,CA+CP,MAAa,EAAb,CAAIF,CAAJ,EAAmBsB,CAAAA,CAAnB,CACSj8C,CAAA08C,OADT,CAC0BP,CAD1B,CAC0Cn8C,CAAA28C,OAD1C,CAGS38C,CAAA48C,OAHT,CAG0BT,CAH1B,CAG0Cn8C,CAAA68C,OA9D+B,CAkE3EC,QAASA,GAAS,CAACC,CAAD,CAAMjC,CAAN,CAAc1yC,CAAd,CAAoB40C,CAApB,CAA6B,CAC7C,IAAIC,EAAM,EACV,IAAU,CAAV,CAAIF,CAAJ,EAAgBC,CAAhB,EAAkC,CAAlC,EAA2BD,CAA3B,CACMC,CAAJ,CACED,CADF,CACQ,CAACA,CADT,CACe,CADf,EAGEA,CACA,CADM,CAACA,CACP,CAAAE,CAAA,CAAM,GAJR,CAQF,KADAF,CACA,CADM,EACN,CADWA,CACX,CAAOA,CAAAn0D,OAAP,CAAoBkyD,CAApB,CAAA,CAA4BiC,CAAA,CAAM9B,EAAN,CAAkB8B,CAC1C30C,EAAJ,GACE20C,CADF,CACQA,CAAAjnC,OAAA,CAAWinC,CAAAn0D,OAAX,CAAwBkyD,CAAxB,CADR,CAGA,OAAOmC,EAAP,CAAaF,CAfgC,CAmB/CG,QAASA,GAAU,CAAC5oD,CAAD,CAAOsjB,CAAP,CAAatR,CAAb,CAAqB8B,CAArB,CAA2B40C,CAA3B,CAAoC,CACrD12C,CAAA,CAASA,CAAT,EAAmB,CACnB,OAAO,SAAQ,CAACxU,CAAD,CAAO,CAChB9H,CAAAA,CAAQ8H,CAAA,CAAK,KAAL,CAAawC,CAAb,CAAA,EACZ,IAAa,CAAb,CAAIgS,CAAJ,EAAkBtc,CAAlB,CAA0B,CAACsc,CAA3B,CACEtc,CAAA,EAASsc,CAEG,EAAd,GAAItc,CAAJ,EAA8B,GAA9B,EAAmBsc,CAAnB,GAAkCtc,CAAlC,CAA0C,EAA1C,CACA,OAAO8yD,GAAA,CAAU9yD,CAAV,CAAiB4tB,CAAjB,CAAuBxP,CAAvB,CAA6B40C,CAA7B,CANa,CAF+B,CAYvDG,QAASA,GAAa,CAAC7oD,CAAD,CAAO8oD,CAAP,CAAkBC,CAAlB,CAA8B,CAClD,MAAO,SAAQ,CAACvrD,CAAD,CAAOkoD,CAAP,CAAgB,CAC7B,IAAIhwD;AAAQ8H,CAAA,CAAK,KAAL,CAAawC,CAAb,CAAA,EAAZ,CAEIiC,EAAM8E,EAAA,EADQgiD,CAAA,CAAa,YAAb,CAA4B,EACpC,GAD2CD,CAAA,CAAY,OAAZ,CAAsB,EACjE,EAAuB9oD,CAAvB,CAEV,OAAO0lD,EAAA,CAAQzjD,CAAR,CAAA,CAAavM,CAAb,CALsB,CADmB,CAoBpDszD,QAASA,GAAsB,CAACC,CAAD,CAAO,CAElC,IAAIC,EAAmBC,CAAC,IAAI1yD,IAAJ,CAASwyD,CAAT,CAAe,CAAf,CAAkB,CAAlB,CAADE,QAAA,EAGvB,OAAO,KAAI1yD,IAAJ,CAASwyD,CAAT,CAAe,CAAf,EAAwC,CAArB,EAACC,CAAD,CAA0B,CAA1B,CAA8B,EAAjD,EAAuDA,CAAvD,CAL2B,CActCE,QAASA,GAAU,CAAC9lC,CAAD,CAAO,CACvB,MAAO,SAAQ,CAAC9lB,CAAD,CAAO,CAAA,IACf6rD,EAAaL,EAAA,CAAuBxrD,CAAA8rD,YAAA,EAAvB,CAGbv0B,EAAAA,CAAO,CAVNw0B,IAAI9yD,IAAJ8yD,CAQ8B/rD,CARrB8rD,YAAA,EAATC,CAQ8B/rD,CARGgsD,SAAA,EAAjCD,CAQ8B/rD,CANnCisD,QAAA,EAFKF,EAEiB,CAFjBA,CAQ8B/rD,CANT2rD,OAAA,EAFrBI,EAUDx0B,CAAoB,CAACs0B,CACtBpuC,EAAAA,CAAS,CAATA,CAAa+X,IAAA02B,MAAA,CAAW30B,CAAX,CAAkB,MAAlB,CAEhB,OAAOyzB,GAAA,CAAUvtC,CAAV,CAAkBqI,CAAlB,CAPY,CADC,CAgB1BqmC,QAASA,GAAS,CAACnsD,CAAD,CAAOkoD,CAAP,CAAgB,CAChC,MAA6B,EAAtB,EAAAloD,CAAA8rD,YAAA,EAAA,CAA0B5D,CAAAkE,KAAA,CAAa,CAAb,CAA1B,CAA4ClE,CAAAkE,KAAA,CAAa,CAAb,CADnB,CA4IlC5F,QAASA,GAAU,CAACyB,CAAD,CAAU,CAK3BoE,QAASA,EAAgB,CAACC,CAAD,CAAS,CAChC,IAAI7uD,CACJ,IAAIA,CAAJ,CAAY6uD,CAAA7uD,MAAA,CAAa8uD,CAAb,CAAZ,CAAyC,CACnCvsD,CAAAA,CAAO,IAAI/G,IAAJ,CAAS,CAAT,CAD4B,KAEnCuzD,EAAS,CAF0B,CAGnCC,EAAS,CAH0B,CAInCC,EAAajvD,CAAA,CAAM,CAAN,CAAA,CAAWuC,CAAA2sD,eAAX,CAAiC3sD,CAAA4sD,YAJX;AAKnCC,EAAapvD,CAAA,CAAM,CAAN,CAAA,CAAWuC,CAAA8sD,YAAX,CAA8B9sD,CAAA+sD,SAE3CtvD,EAAA,CAAM,CAAN,CAAJ,GACE+uD,CACA,CADS3yD,CAAA,CAAM4D,CAAA,CAAM,CAAN,CAAN,CAAiBA,CAAA,CAAM,EAAN,CAAjB,CACT,CAAAgvD,CAAA,CAAQ5yD,CAAA,CAAM4D,CAAA,CAAM,CAAN,CAAN,CAAiBA,CAAA,CAAM,EAAN,CAAjB,CAFV,CAIAivD,EAAAj1D,KAAA,CAAgBuI,CAAhB,CAAsBnG,CAAA,CAAM4D,CAAA,CAAM,CAAN,CAAN,CAAtB,CAAuC5D,CAAA,CAAM4D,CAAA,CAAM,CAAN,CAAN,CAAvC,CAAyD,CAAzD,CAA4D5D,CAAA,CAAM4D,CAAA,CAAM,CAAN,CAAN,CAA5D,CACIhF,EAAAA,CAAIoB,CAAA,CAAM4D,CAAA,CAAM,CAAN,CAAN,EAAkB,CAAlB,CAAJhF,CAA2B+zD,CAC3BQ,EAAAA,CAAInzD,CAAA,CAAM4D,CAAA,CAAM,CAAN,CAAN,EAAkB,CAAlB,CAAJuvD,CAA2BP,CAC3BQ,EAAAA,CAAIpzD,CAAA,CAAM4D,CAAA,CAAM,CAAN,CAAN,EAAkB,CAAlB,CACJyvD,EAAAA,CAAK13B,IAAA02B,MAAA,CAAgD,GAAhD,CAAWiB,UAAA,CAAW,IAAX,EAAmB1vD,CAAA,CAAM,CAAN,CAAnB,EAA+B,CAA/B,EAAX,CACTovD,EAAAp1D,KAAA,CAAgBuI,CAAhB,CAAsBvH,CAAtB,CAAyBu0D,CAAzB,CAA4BC,CAA5B,CAA+BC,CAA/B,CAhBuC,CAmBzC,MAAOZ,EArByB,CAFlC,IAAIC,EAAgB,sGA2BpB,OAAO,SAAQ,CAACvsD,CAAD,CAAOotD,CAAP,CAAe3tD,CAAf,CAAyB,CAAA,IAClCm4B,EAAO,EAD2B,CAElCr2B,EAAQ,EAF0B,CAGlC7C,CAHkC,CAG9BjB,CAER2vD,EAAA,CAASA,CAAT,EAAmB,YACnBA,EAAA,CAASnF,CAAAoF,iBAAA,CAAyBD,CAAzB,CAAT,EAA6CA,CACzCx2D,EAAA,CAASoJ,CAAT,CAAJ,GACEA,CADF,CACSstD,EAAAlyD,KAAA,CAAmB4E,CAAnB,CAAA,CAA2BnG,CAAA,CAAMmG,CAAN,CAA3B,CAAyCqsD,CAAA,CAAiBrsD,CAAjB,CADlD,CAIIhJ,EAAA,CAASgJ,CAAT,CAAJ,GACEA,CADF,CACS,IAAI/G,IAAJ,CAAS+G,CAAT,CADT,CAIA,IAAK,CAAAhH,EAAA,CAAOgH,CAAP,CAAL,EAAsB,CAAAkqD,QAAA,CAASlqD,CAAA/B,QAAA,EAAT,CAAtB,CACE,MAAO+B,EAGT;IAAA,CAAOotD,CAAP,CAAA,CAEE,CADA3vD,CACA,CADQ8vD,EAAAj4C,KAAA,CAAwB83C,CAAxB,CACR,GACE7rD,CACA,CADQlD,EAAA,CAAOkD,CAAP,CAAc9D,CAAd,CAAqB,CAArB,CACR,CAAA2vD,CAAA,CAAS7rD,CAAA0gB,IAAA,EAFX,GAIE1gB,CAAA/E,KAAA,CAAW4wD,CAAX,CACA,CAAAA,CAAA,CAAS,IALX,CASF,KAAIltD,EAAqBF,CAAAG,kBAAA,EACrBV,EAAJ,GACES,CACA,CADqBV,EAAA,CAAiBC,CAAjB,CAA2BS,CAA3B,CACrB,CAAAF,CAAA,CAAOD,EAAA,CAAuBC,CAAvB,CAA6BP,CAA7B,CAAuC,CAAA,CAAvC,CAFT,CAIAtI,EAAA,CAAQoK,CAAR,CAAe,QAAQ,CAACrJ,CAAD,CAAQ,CAC7BwG,CAAA,CAAK8uD,EAAA,CAAat1D,CAAb,CACL0/B,EAAA,EAAQl5B,CAAA,CAAKA,CAAA,CAAGsB,CAAH,CAASioD,CAAAoF,iBAAT,CAAmCntD,CAAnC,CAAL,CACe,IAAV,GAAAhI,CAAA,CAAiB,GAAjB,CAAuBA,CAAAyH,QAAA,CAAc,UAAd,CAA0B,EAA1B,CAAAA,QAAA,CAAsC,KAAtC,CAA6C,GAA7C,CAHP,CAA/B,CAMA,OAAOi4B,EAzC+B,CA9Bb,CA2G7B8uB,QAASA,GAAU,EAAG,CACpB,MAAO,SAAQ,CAACjU,CAAD,CAASgb,CAAT,CAAkB,CAC3B9yD,CAAA,CAAY8yD,CAAZ,CAAJ,GACIA,CADJ,CACc,CADd,CAGA,OAAOxuD,GAAA,CAAOwzC,CAAP,CAAegb,CAAf,CAJwB,CADb,CAkItB9G,QAASA,GAAa,EAAG,CACvB,MAAO,SAAQ,CAAC18C,CAAD,CAAQyjD,CAAR,CAAeC,CAAf,CAAsB,CAEjCD,CAAA,CAD8BE,QAAhC,GAAIp4B,IAAA40B,IAAA,CAASlkC,MAAA,CAAOwnC,CAAP,CAAT,CAAJ,CACUxnC,MAAA,CAAOwnC,CAAP,CADV,CAGU7zD,CAAA,CAAM6zD,CAAN,CAEV,IAAI5tD,KAAA,CAAM4tD,CAAN,CAAJ,CAAkB,MAAOzjD,EAErBjT,EAAA,CAASiT,CAAT,CAAJ,GAAqBA,CAArB,CAA6BA,CAAAvP,SAAA,EAA7B,CACA,IAAK,CAAAlE,EAAA,CAAYyT,CAAZ,CAAL,CAAyB,MAAOA,EAEhC0jD,EAAA,CAAUA,CAAAA,CAAF,EAAW7tD,KAAA,CAAM6tD,CAAN,CAAX,CAA2B,CAA3B,CAA+B9zD,CAAA,CAAM8zD,CAAN,CACvCA,EAAA,CAAiB,CAAT,CAACA,CAAD,CAAcn4B,IAAAC,IAAA,CAAS,CAAT,CAAYxrB,CAAAnT,OAAZ;AAA2B62D,CAA3B,CAAd,CAAkDA,CAE1D,OAAa,EAAb,EAAID,CAAJ,CACSG,EAAA,CAAQ5jD,CAAR,CAAe0jD,CAAf,CAAsBA,CAAtB,CAA8BD,CAA9B,CADT,CAGgB,CAAd,GAAIC,CAAJ,CACSE,EAAA,CAAQ5jD,CAAR,CAAeyjD,CAAf,CAAsBzjD,CAAAnT,OAAtB,CADT,CAGS+2D,EAAA,CAAQ5jD,CAAR,CAAeurB,IAAAC,IAAA,CAAS,CAAT,CAAYk4B,CAAZ,CAAoBD,CAApB,CAAf,CAA2CC,CAA3C,CApBwB,CADd,CA2BzBE,QAASA,GAAO,CAAC5jD,CAAD,CAAQ0jD,CAAR,CAAeG,CAAf,CAAoB,CAClC,MAAIl3D,EAAA,CAASqT,CAAT,CAAJ,CAA4BA,CAAAvQ,MAAA,CAAYi0D,CAAZ,CAAmBG,CAAnB,CAA5B,CAEOp0D,EAAAjC,KAAA,CAAWwS,CAAX,CAAkB0jD,CAAlB,CAAyBG,CAAzB,CAH2B,CA0iBpChH,QAASA,GAAa,CAACz0C,CAAD,CAAS,CAoD7B07C,QAASA,EAAiB,CAACC,CAAD,CAAiB,CACzC,MAAOA,EAAAC,IAAA,CAAmB,QAAQ,CAACC,CAAD,CAAY,CAAA,IACxCC,EAAa,CAD2B,CACxB1pD,EAAMpK,EAE1B,IAAI9C,CAAA,CAAW22D,CAAX,CAAJ,CACEzpD,CAAA,CAAMypD,CADR,KAEO,IAAIt3D,CAAA,CAASs3D,CAAT,CAAJ,CAAyB,CAC9B,GAA4B,GAA5B,EAAKA,CAAA9vD,OAAA,CAAiB,CAAjB,CAAL,EAA0D,GAA1D,EAAmC8vD,CAAA9vD,OAAA,CAAiB,CAAjB,CAAnC,CACE+vD,CACA,CADoC,GAAvB,EAAAD,CAAA9vD,OAAA,CAAiB,CAAjB,CAAA,CAA8B,EAA9B,CAAkC,CAC/C,CAAA8vD,CAAA,CAAYA,CAAA7sD,UAAA,CAAoB,CAApB,CAEd,IAAkB,EAAlB,GAAI6sD,CAAJ,GACEzpD,CACImE,CADEyJ,CAAA,CAAO67C,CAAP,CACFtlD,CAAAnE,CAAAmE,SAFN,EAGI,IAAItR,EAAMmN,CAAA,EAAV,CACAA,EAAMA,QAAQ,CAACvM,CAAD,CAAQ,CAAE,MAAOA,EAAA,CAAMZ,CAAN,CAAT,CATI,CAahC,MAAO,CAACmN,IAAKA,CAAN,CAAW0pD,WAAYA,CAAvB,CAlBqC,CAAvC,CADkC,CAuB3Cz2D,QAASA,EAAW,CAACQ,CAAD,CAAQ,CAC1B,OAAQ,MAAOA,EAAf,EACE,KAAK,QAAL,CACA,KAAK,SAAL,CACA,KAAK,QAAL,CACE,MAAO,CAAA,CACT,SACE,MAAO,CAAA,CANX,CAD0B,CA3EC;AAgH7Bk2D,QAASA,EAAc,CAACC,CAAD,CAAKC,CAAL,CAAS,CAC9B,IAAI7wC,EAAS,CAAb,CACI8wC,EAAQF,CAAA1wD,KADZ,CAEI6wD,EAAQF,CAAA3wD,KAEZ,IAAI4wD,CAAJ,GAAcC,CAAd,CAAqB,CACfC,IAAAA,EAASJ,CAAAn2D,MAATu2D,CACAC,EAASJ,CAAAp2D,MAEC,SAAd,GAAIq2D,CAAJ,EAEEE,CACA,CADSA,CAAA1pD,YAAA,EACT,CAAA2pD,CAAA,CAASA,CAAA3pD,YAAA,EAHX,EAIqB,QAJrB,GAIWwpD,CAJX,GAOM31D,CAAA,CAAS61D,CAAT,CACJ,GADsBA,CACtB,CAD+BJ,CAAApyD,MAC/B,EAAIrD,CAAA,CAAS81D,CAAT,CAAJ,GAAsBA,CAAtB,CAA+BJ,CAAAryD,MAA/B,CARF,CAWIwyD,EAAJ,GAAeC,CAAf,GACEjxC,CADF,CACWgxC,CAAA,CAASC,CAAT,CAAmB,EAAnB,CAAuB,CADlC,CAfmB,CAArB,IAmBEjxC,EAAA,CAAS8wC,CAAA,CAAQC,CAAR,CAAiB,EAAjB,CAAqB,CAGhC,OAAO/wC,EA3BuB,CA/GhC,MAAO,SAAQ,CAACzhB,CAAD,CAAQ2yD,CAAR,CAAuBC,CAAvB,CAAqCC,CAArC,CAAgD,CAE7D,GAAa,IAAb,EAAI7yD,CAAJ,CAAmB,MAAOA,EAC1B,IAAK,CAAAxF,EAAA,CAAYwF,CAAZ,CAAL,CACE,KAAMzF,EAAA,CAAO,SAAP,CAAA,CAAkB,UAAlB,CAAkEyF,CAAlE,CAAN,CAGGrF,CAAA,CAAQg4D,CAAR,CAAL,GAA+BA,CAA/B,CAA+C,CAACA,CAAD,CAA/C,CAC6B,EAA7B,GAAIA,CAAA73D,OAAJ,GAAkC63D,CAAlC,CAAkD,CAAC,GAAD,CAAlD,CAEA,KAAIG,EAAaf,CAAA,CAAkBY,CAAlB,CAAjB,CAEIR,EAAaS,CAAA,CAAgB,EAAhB,CAAoB,CAFrC,CAKIr0B,EAAUhjC,CAAA,CAAWs3D,CAAX,CAAA,CAAwBA,CAAxB,CAAoCT,CAK9CW,EAAAA,CAAgB93D,KAAAwlB,UAAAwxC,IAAAx2D,KAAA,CAAyBuE,CAAzB,CAMpBgzD,QAA4B,CAAC92D,CAAD,CAAQ+D,CAAR,CAAe,CAIzC,MAAO,CACL/D,MAAOA,CADF,CAEL+2D,WAAY,CAAC/2D,MAAO+D,CAAR,CAAe0B,KAAM,QAArB,CAA+B1B,MAAOA,CAAtC,CAFP,CAGLizD,gBAAiBJ,CAAAb,IAAA,CAAe,QAAQ,CAACC,CAAD,CAAY,CACzB,IAAA;AAAAA,CAAAzpD,IAAA,CAAcvM,CAAd,CAmE3ByF,EAAAA,CAAO,MAAOzF,EAClB,IAAc,IAAd,GAAIA,CAAJ,CACEyF,CACA,CADO,QACP,CAAAzF,CAAA,CAAQ,MAFV,KAGO,IAAa,QAAb,GAAIyF,CAAJ,CApBmB,CAAA,CAAA,CAE1B,GAAIpG,CAAA,CAAWW,CAAAgB,QAAX,CAAJ,GACEhB,CACI,CADIA,CAAAgB,QAAA,EACJ,CAAAxB,CAAA,CAAYQ,CAAZ,CAFN,EAE0B,MAAA,CAGtBuC,GAAA,CAAkBvC,CAAlB,CAAJ,GACEA,CACI,CADIA,CAAAwC,SAAA,EACJ,CAAAhD,CAAA,CAAYQ,CAAZ,CAFN,CAP0B,CAnDpB,MA0EC,CAACA,MAAOA,CAAR,CAAeyF,KAAMA,CAArB,CAA2B1B,MA1EmBA,CA0E9C,CA3EiD,CAAnC,CAHZ,CAJkC,CANvB,CACpB8yD,EAAAj3D,KAAA,CAkBAq3D,QAAqB,CAACd,CAAD,CAAKC,CAAL,CAAS,CAC5B,IAD4B,IACnBv2D,EAAI,CADe,CACZY,EAAKm2D,CAAAh4D,OAArB,CAAwCiB,CAAxC,CAA4CY,CAA5C,CAAgDZ,CAAA,EAAhD,CAAqD,CACnD,IAAI0lB,EAAS8c,CAAA,CAAQ8zB,CAAAa,gBAAA,CAAmBn3D,CAAnB,CAAR,CAA+Bu2D,CAAAY,gBAAA,CAAmBn3D,CAAnB,CAA/B,CACb,IAAI0lB,CAAJ,CACE,MAAOA,EAAP,CAAgBqxC,CAAA,CAAW/2D,CAAX,CAAAo2D,WAAhB,CAA2CA,CAHM,CAOrD,MAAO5zB,EAAA,CAAQ8zB,CAAAY,WAAR,CAAuBX,CAAAW,WAAvB,CAAP,CAA+Cd,CARnB,CAlB9B,CAGA,OAFAnyD,EAEA,CAFQ+yD,CAAAd,IAAA,CAAkB,QAAQ,CAAC/2D,CAAD,CAAO,CAAE,MAAOA,EAAAgB,MAAT,CAAjC,CAtBqD,CADlC,CA+I/Bk3D,QAASA,GAAW,CAACpmD,CAAD,CAAY,CAC1BzR,CAAA,CAAWyR,CAAX,CAAJ,GACEA,CADF,CACc,CACVyc,KAAMzc,CADI,CADd,CAKAA,EAAAyf,SAAA,CAAqBzf,CAAAyf,SAArB,EAA2C,IAC3C,OAAOluB,GAAA,CAAQyO,CAAR,CAPuB,CA+hBhCqmD,QAASA,GAAc,CAACxzD,CAAD,CAAU0xB,CAAV,CAAiBuI,CAAjB;AAAyBvmB,CAAzB,CAAmC0B,CAAnC,CAAiD,CAAA,IAClE7G,EAAO,IAD2D,CAElEklD,EAAW,EAGfllD,EAAAmlD,OAAA,CAAc,EACdnlD,EAAAolD,UAAA,CAAiB,EACjBplD,EAAAqlD,SAAA,CAAgB1yD,IAAAA,EAChBqN,EAAAslD,MAAA,CAAaz+C,CAAA,CAAasc,CAAA/qB,KAAb,EAA2B+qB,CAAAzhB,OAA3B,EAA2C,EAA3C,CAAA,CAA+CgqB,CAA/C,CACb1rB,EAAAulD,OAAA,CAAc,CAAA,CACdvlD,EAAAwlD,UAAA,CAAiB,CAAA,CACjBxlD,EAAAylD,OAAA,CAAc,CAAA,CACdzlD,EAAA0lD,SAAA,CAAgB,CAAA,CAChB1lD,EAAA2lD,WAAA,CAAkB,CAAA,CAClB3lD,EAAA4lD,aAAA,CAAoBC,EAapB7lD,EAAA8lD,mBAAA,CAA0BC,QAAQ,EAAG,CACnCh5D,CAAA,CAAQm4D,CAAR,CAAkB,QAAQ,CAACc,CAAD,CAAU,CAClCA,CAAAF,mBAAA,EADkC,CAApC,CADmC,CAiBrC9lD,EAAAimD,iBAAA,CAAwBC,QAAQ,EAAG,CACjCn5D,CAAA,CAAQm4D,CAAR,CAAkB,QAAQ,CAACc,CAAD,CAAU,CAClCA,CAAAC,iBAAA,EADkC,CAApC,CADiC,CA2BnCjmD,EAAAmmD,YAAA,CAAmBC,QAAQ,CAACJ,CAAD,CAAU,CAGnC3pD,EAAA,CAAwB2pD,CAAAV,MAAxB,CAAuC,OAAvC,CACAJ,EAAA9yD,KAAA,CAAc4zD,CAAd,CAEIA,EAAAV,MAAJ,GACEtlD,CAAA,CAAKgmD,CAAAV,MAAL,CADF,CACwBU,CADxB,CAIAA,EAAAJ,aAAA,CAAuB5lD,CAVY,CAcrCA,EAAAqmD,gBAAA,CAAuBC,QAAQ,CAACN,CAAD,CAAUO,CAAV,CAAmB,CAChD,IAAIC,EAAUR,CAAAV,MAEVtlD,EAAA,CAAKwmD,CAAL,CAAJ,GAAsBR,CAAtB,EACE,OAAOhmD,CAAA,CAAKwmD,CAAL,CAETxmD,EAAA,CAAKumD,CAAL,CAAA;AAAgBP,CAChBA,EAAAV,MAAA,CAAgBiB,CAPgC,CA0BlDvmD,EAAAymD,eAAA,CAAsBC,QAAQ,CAACV,CAAD,CAAU,CAClCA,CAAAV,MAAJ,EAAqBtlD,CAAA,CAAKgmD,CAAAV,MAAL,CAArB,GAA6CU,CAA7C,EACE,OAAOhmD,CAAA,CAAKgmD,CAAAV,MAAL,CAETv4D,EAAA,CAAQiT,CAAAqlD,SAAR,CAAuB,QAAQ,CAACv3D,CAAD,CAAQsK,CAAR,CAAc,CAC3C4H,CAAA2mD,aAAA,CAAkBvuD,CAAlB,CAAwB,IAAxB,CAA8B4tD,CAA9B,CAD2C,CAA7C,CAGAj5D,EAAA,CAAQiT,CAAAmlD,OAAR,CAAqB,QAAQ,CAACr3D,CAAD,CAAQsK,CAAR,CAAc,CACzC4H,CAAA2mD,aAAA,CAAkBvuD,CAAlB,CAAwB,IAAxB,CAA8B4tD,CAA9B,CADyC,CAA3C,CAGAj5D,EAAA,CAAQiT,CAAAolD,UAAR,CAAwB,QAAQ,CAACt3D,CAAD,CAAQsK,CAAR,CAAc,CAC5C4H,CAAA2mD,aAAA,CAAkBvuD,CAAlB,CAAwB,IAAxB,CAA8B4tD,CAA9B,CAD4C,CAA9C,CAIAr0D,GAAA,CAAYuzD,CAAZ,CAAsBc,CAAtB,CACAA,EAAAJ,aAAA,CAAuBC,EAfe,CA4BxCe,GAAA,CAAqB,CACnBC,KAAM,IADa,CAEnBnoC,SAAUjtB,CAFS,CAGnByB,IAAKA,QAAQ,CAACm1C,CAAD,CAAS7c,CAAT,CAAmBnwB,CAAnB,CAA+B,CAC1C,IAAIya,EAAOuyB,CAAA,CAAO7c,CAAP,CACN1V,EAAL,CAIiB,EAJjB,GAGcA,CAAAhkB,QAAAD,CAAawJ,CAAbxJ,CAHd,EAKIikB,CAAA1jB,KAAA,CAAUiJ,CAAV,CALJ,CACEgtC,CAAA,CAAO7c,CAAP,CADF,CACqB,CAACnwB,CAAD,CAHqB,CAHzB,CAcnByrD,MAAOA,QAAQ,CAACze,CAAD,CAAS7c,CAAT,CAAmBnwB,CAAnB,CAA+B,CAC5C,IAAIya,EAAOuyB,CAAA,CAAO7c,CAAP,CACN1V,EAAL,GAGAnkB,EAAA,CAAYmkB,CAAZ,CAAkBza,CAAlB,CACA,CAAoB,CAApB,GAAIya,CAAAppB,OAAJ,EACE,OAAO27C,CAAA,CAAO7c,CAAP,CALT,CAF4C,CAd3B,CAwBnBrmB,SAAUA,CAxBS,CAArB,CAqCAnF,EAAA+mD,UAAA,CAAiBC,QAAQ,EAAG,CAC1B7hD,CAAAuM,YAAA,CAAqBjgB,CAArB,CAA8Bw1D,EAA9B,CACA9hD,EAAAsM,SAAA,CAAkBhgB,CAAlB;AAA2By1D,EAA3B,CACAlnD,EAAAulD,OAAA,CAAc,CAAA,CACdvlD,EAAAwlD,UAAA,CAAiB,CAAA,CACjBxlD,EAAA4lD,aAAAmB,UAAA,EAL0B,CAsB5B/mD,EAAAmnD,aAAA,CAAoBC,QAAQ,EAAG,CAC7BjiD,CAAAkiD,SAAA,CAAkB51D,CAAlB,CAA2Bw1D,EAA3B,CAA2CC,EAA3C,CAzPcI,eAyPd,CACAtnD,EAAAulD,OAAA,CAAc,CAAA,CACdvlD,EAAAwlD,UAAA,CAAiB,CAAA,CACjBxlD,EAAA2lD,WAAA,CAAkB,CAAA,CAClB54D,EAAA,CAAQm4D,CAAR,CAAkB,QAAQ,CAACc,CAAD,CAAU,CAClCA,CAAAmB,aAAA,EADkC,CAApC,CAL6B,CAuB/BnnD,EAAAunD,cAAA,CAAqBC,QAAQ,EAAG,CAC9Bz6D,CAAA,CAAQm4D,CAAR,CAAkB,QAAQ,CAACc,CAAD,CAAU,CAClCA,CAAAuB,cAAA,EADkC,CAApC,CAD8B,CAahCvnD,EAAAynD,cAAA,CAAqBC,QAAQ,EAAG,CAC9BviD,CAAAsM,SAAA,CAAkBhgB,CAAlB,CA7Rc61D,cA6Rd,CACAtnD,EAAA2lD,WAAA,CAAkB,CAAA,CAClB3lD,EAAA4lD,aAAA6B,cAAA,EAH8B,CA1OsC,CA+iDxEE,QAASA,GAAoB,CAACd,CAAD,CAAO,CAClCA,CAAAe,YAAAx1D,KAAA,CAAsB,QAAQ,CAACtE,CAAD,CAAQ,CACpC,MAAO+4D,EAAAgB,SAAA,CAAc/5D,CAAd,CAAA,CAAuBA,CAAvB,CAA+BA,CAAAwC,SAAA,EADF,CAAtC,CADkC,CAWpCw3D,QAASA,GAAa,CAACzuD,CAAD,CAAQ5H,CAAR,CAAiBN,CAAjB,CAAuB01D,CAAvB,CAA6Bh+C,CAA7B,CAAuC9C,CAAvC,CAAiD,CACrE,IAAIxS,EAAO7B,CAAA,CAAUD,CAAA,CAAQ,CAAR,CAAA8B,KAAV,CAKX,IAAKylD,CAAAnwC,CAAAmwC,QAAL,CAAuB,CACrB,IAAI+O;AAAY,CAAA,CAEhBt2D,EAAAyJ,GAAA,CAAW,kBAAX,CAA+B,QAAQ,EAAG,CACxC6sD,CAAA,CAAY,CAAA,CAD4B,CAA1C,CAIAt2D,EAAAyJ,GAAA,CAAW,gBAAX,CAA6B,QAAQ,EAAG,CACtC6sD,CAAA,CAAY,CAAA,CACZrvC,EAAA,EAFsC,CAAxC,CAPqB,CAavB,IAAIgiB,CAAJ,CAEIhiB,EAAWA,QAAQ,CAACsvC,CAAD,CAAK,CACtBttB,CAAJ,GACE30B,CAAAwU,MAAAI,OAAA,CAAsB+f,CAAtB,CACA,CAAAA,CAAA,CAAU,IAFZ,CAIA,IAAIqtB,CAAAA,CAAJ,CAAA,CAL0B,IAMtBj6D,EAAQ2D,CAAAkD,IAAA,EACRob,EAAAA,CAAQi4C,CAARj4C,EAAci4C,CAAAz0D,KAKL,WAAb,GAAIA,CAAJ,EAA6BpC,CAAA82D,OAA7B,EAA4D,OAA5D,GAA4C92D,CAAA82D,OAA5C,GACEn6D,CADF,CACUoe,CAAA,CAAKpe,CAAL,CADV,CAOA,EAAI+4D,CAAAqB,WAAJ,GAAwBp6D,CAAxB,EAA4C,EAA5C,GAAkCA,CAAlC,EAAkD+4D,CAAAsB,sBAAlD,GACEtB,CAAAuB,cAAA,CAAmBt6D,CAAnB,CAA0BiiB,CAA1B,CAfF,CAL0B,CA0B5B,IAAIlH,CAAA8wC,SAAA,CAAkB,OAAlB,CAAJ,CACEloD,CAAAyJ,GAAA,CAAW,OAAX,CAAoBwd,CAApB,CADF,KAEO,CACL,IAAI2vC,EAAgBA,QAAQ,CAACL,CAAD,CAAKnoD,CAAL,CAAYyoD,CAAZ,CAAuB,CAC5C5tB,CAAL,GACEA,CADF,CACY30B,CAAAwU,MAAA,CAAe,QAAQ,EAAG,CAClCmgB,CAAA,CAAU,IACL76B,EAAL,EAAcA,CAAA/R,MAAd,GAA8Bw6D,CAA9B,EACE5vC,CAAA,CAASsvC,CAAT,CAHgC,CAA1B,CADZ,CADiD,CAWnDv2D,EAAAyJ,GAAA,CAAW,SAAX,CAAsB,QAAQ,CAAC6U,CAAD,CAAQ,CACpC,IAAI7iB,EAAM6iB,CAAAw4C,QAIE,GAAZ,GAAIr7D,CAAJ,EAAmB,EAAnB,CAAwBA,CAAxB,EAAqC,EAArC,CAA+BA,CAA/B,EAA6C,EAA7C,EAAmDA,CAAnD,EAAiE,EAAjE,EAA0DA,CAA1D;AAEAm7D,CAAA,CAAct4C,CAAd,CAAqB,IAArB,CAA2B,IAAAjiB,MAA3B,CAPoC,CAAtC,CAWA,IAAI+a,CAAA8wC,SAAA,CAAkB,OAAlB,CAAJ,CACEloD,CAAAyJ,GAAA,CAAW,WAAX,CAAwBmtD,CAAxB,CAxBG,CA8BP52D,CAAAyJ,GAAA,CAAW,QAAX,CAAqBwd,CAArB,CAMA,IAAI8vC,EAAA,CAAyBj1D,CAAzB,CAAJ,EAAsCszD,CAAAsB,sBAAtC,EAAoE50D,CAApE,GAA6EpC,CAAAoC,KAA7E,CACE9B,CAAAyJ,GAAA,CAvoC4ButD,yBAuoC5B,CAAsC,QAAQ,CAACT,CAAD,CAAK,CACjD,GAAKttB,CAAAA,CAAL,CAAc,CACZ,IAAIguB,EAAW,IAAA,SAAf,CACIC,EAAeD,CAAAE,SADnB,CAEIC,EAAmBH,CAAAI,aACvBpuB,EAAA,CAAU30B,CAAAwU,MAAA,CAAe,QAAQ,EAAG,CAClCmgB,CAAA,CAAU,IACNguB,EAAAE,SAAJ,GAA0BD,CAA1B,EAA0CD,CAAAI,aAA1C,GAAoED,CAApE,EACEnwC,CAAA,CAASsvC,CAAT,CAHgC,CAA1B,CAJE,CADmC,CAAnD,CAeFnB,EAAAkC,QAAA,CAAeC,QAAQ,EAAG,CAExB,IAAIl7D,EAAQ+4D,CAAAgB,SAAA,CAAchB,CAAAqB,WAAd,CAAA,CAAiC,EAAjC,CAAsCrB,CAAAqB,WAC9Cz2D,EAAAkD,IAAA,EAAJ,GAAsB7G,CAAtB,EACE2D,CAAAkD,IAAA,CAAY7G,CAAZ,CAJsB,CArG2C,CA8IvEm7D,QAASA,GAAgB,CAAC5pC,CAAD,CAAS6pC,CAAT,CAAkB,CACzC,MAAO,SAAQ,CAACC,CAAD,CAAMvzD,CAAN,CAAY,CAAA,IACrBuB,CADqB,CACd0sD,CAEX,IAAIj1D,EAAA,CAAOu6D,CAAP,CAAJ,CACE,MAAOA,EAGT,IAAI38D,CAAA,CAAS28D,CAAT,CAAJ,CAAmB,CAII,GAArB,EAAIA,CAAAn1D,OAAA,CAAW,CAAX,CAAJ,EAA0D,GAA1D,EAA4Bm1D,CAAAn1D,OAAA,CAAWm1D,CAAAz8D,OAAX;AAAwB,CAAxB,CAA5B,GACEy8D,CADF,CACQA,CAAAlyD,UAAA,CAAc,CAAd,CAAiBkyD,CAAAz8D,OAAjB,CAA8B,CAA9B,CADR,CAGA,IAAI08D,EAAAp4D,KAAA,CAAqBm4D,CAArB,CAAJ,CACE,MAAO,KAAIt6D,IAAJ,CAASs6D,CAAT,CAET9pC,EAAA/rB,UAAA,CAAmB,CAGnB,IAFA6D,CAEA,CAFQkoB,CAAAnU,KAAA,CAAYi+C,CAAZ,CAER,CAqBE,MApBAhyD,EAAAod,MAAA,EAoBO,CAlBLsvC,CAkBK,CAnBHjuD,CAAJ,CACQ,CACJyzD,KAAMzzD,CAAA8rD,YAAA,EADF,CAEJ4H,GAAI1zD,CAAAgsD,SAAA,EAAJ0H,CAAsB,CAFlB,CAGJC,GAAI3zD,CAAAisD,QAAA,EAHA,CAIJ2H,GAAI5zD,CAAA6zD,SAAA,EAJA,CAKJC,GAAI9zD,CAAAM,WAAA,EALA,CAMJyzD,GAAI/zD,CAAAg0D,WAAA,EANA,CAOJC,IAAKj0D,CAAAk0D,gBAAA,EAALD,CAA8B,GAP1B,CADR,CAWQ,CAAER,KAAM,IAAR,CAAcC,GAAI,CAAlB,CAAqBC,GAAI,CAAzB,CAA4BC,GAAI,CAAhC,CAAmCE,GAAI,CAAvC,CAA0CC,GAAI,CAA9C,CAAiDE,IAAK,CAAtD,CAQD,CALP98D,CAAA,CAAQoK,CAAR,CAAe,QAAQ,CAAC4yD,CAAD,CAAOl4D,CAAP,CAAc,CAC/BA,CAAJ,CAAYq3D,CAAAx8D,OAAZ,GACEm3D,CAAA,CAAIqF,CAAA,CAAQr3D,CAAR,CAAJ,CADF,CACwB,CAACk4D,CADzB,CADmC,CAArC,CAKO,CAAA,IAAIl7D,IAAJ,CAASg1D,CAAAwF,KAAT,CAAmBxF,CAAAyF,GAAnB,CAA4B,CAA5B,CAA+BzF,CAAA0F,GAA/B,CAAuC1F,CAAA2F,GAAvC,CAA+C3F,CAAA6F,GAA/C,CAAuD7F,CAAA8F,GAAvD,EAAiE,CAAjE,CAA8E,GAA9E,CAAoE9F,CAAAgG,IAApE,EAAsF,CAAtF,CAlCQ,CAsCnB,MAAOG,IA7CkB,CADc,CAkD3CC,QAASA,GAAmB,CAAC12D,CAAD,CAAO8rB,CAAP,CAAe6qC,CAAf,CAA0BlH,CAA1B,CAAkC,CAC5D,MAAOmH,SAA6B,CAAC9wD,CAAD,CAAQ5H,CAAR,CAAiBN,CAAjB,CAAuB01D,CAAvB,CAA6Bh+C,CAA7B,CAAuC9C,CAAvC,CAAiDU,CAAjD,CAA0D,CA4D5F2jD,QAASA,EAAW,CAACt8D,CAAD,CAAQ,CAE1B,MAAOA,EAAP,EAAgB,EAAEA,CAAA+F,QAAF;AAAmB/F,CAAA+F,QAAA,EAAnB,GAAuC/F,CAAA+F,QAAA,EAAvC,CAFU,CAK5Bw2D,QAASA,EAAsB,CAAC11D,CAAD,CAAM,CACnC,MAAOnE,EAAA,CAAUmE,CAAV,CAAA,EAAmB,CAAA/F,EAAA,CAAO+F,CAAP,CAAnB,CAAiCu1D,CAAA,CAAUv1D,CAAV,CAAjC,EAAmDhC,IAAAA,EAAnD,CAA+DgC,CADnC,CAhErC21D,EAAA,CAAgBjxD,CAAhB,CAAuB5H,CAAvB,CAAgCN,CAAhC,CAAsC01D,CAAtC,CACAiB,GAAA,CAAczuD,CAAd,CAAqB5H,CAArB,CAA8BN,CAA9B,CAAoC01D,CAApC,CAA0Ch+C,CAA1C,CAAoD9C,CAApD,CACA,KAAI1Q,EAAWwxD,CAAXxxD,EAAmBwxD,CAAA0D,SAAnBl1D,EAAoCwxD,CAAA0D,SAAAl1D,SAAxC,CACIm1D,CAEJ3D,EAAA4D,aAAA,CAAoBl3D,CACpBszD,EAAA6D,SAAAt4D,KAAA,CAAmB,QAAQ,CAACtE,CAAD,CAAQ,CACjC,GAAI+4D,CAAAgB,SAAA,CAAc/5D,CAAd,CAAJ,CAA0B,MAAO,KACjC,IAAIuxB,CAAAruB,KAAA,CAAYlD,CAAZ,CAAJ,CAQE,MAJI68D,EAIGA,CAJUT,CAAA,CAAUp8D,CAAV,CAAiB08D,CAAjB,CAIVG,CAHHt1D,CAGGs1D,GAFLA,CAEKA,CAFQh1D,EAAA,CAAuBg1D,CAAvB,CAAmCt1D,CAAnC,CAERs1D,EAAAA,CAVwB,CAAnC,CAeA9D,EAAAe,YAAAx1D,KAAA,CAAsB,QAAQ,CAACtE,CAAD,CAAQ,CACpC,GAAIA,CAAJ,EAAc,CAAAc,EAAA,CAAOd,CAAP,CAAd,CACE,KAAM88D,GAAA,CAAc,SAAd,CAAwD98D,CAAxD,CAAN,CAEF,GAAIs8D,CAAA,CAAYt8D,CAAZ,CAAJ,CAKE,MAAO,CAJP08D,CAIO,CAJQ18D,CAIR,GAHauH,CAGb,GAFLm1D,CAEK,CAFU70D,EAAA,CAAuB60D,CAAvB,CAAqCn1D,CAArC,CAA+C,CAAA,CAA/C,CAEV,EAAAoR,CAAA,CAAQ,MAAR,CAAA,CAAgB3Y,CAAhB,CAAuBk1D,CAAvB,CAA+B3tD,CAA/B,CAEPm1D,EAAA,CAAe,IACf,OAAO,EAZ2B,CAAtC,CAgBA,IAAIh6D,CAAA,CAAUW,CAAAkuD,IAAV,CAAJ,EAA2BluD,CAAA05D,MAA3B,CAAuC,CACrC,IAAIC,CACJjE,EAAAkE,YAAA1L,IAAA,CAAuB2L,QAAQ,CAACl9D,CAAD,CAAQ,CACrC,MAAO,CAACs8D,CAAA,CAAYt8D,CAAZ,CAAR,EAA8ByC,CAAA,CAAYu6D,CAAZ,CAA9B,EAAqDZ,CAAA,CAAUp8D,CAAV,CAArD,EAAyEg9D,CADpC,CAGvC35D,EAAAi/B,SAAA,CAAc,KAAd;AAAqB,QAAQ,CAACz7B,CAAD,CAAM,CACjCm2D,CAAA,CAAST,CAAA,CAAuB11D,CAAvB,CACTkyD,EAAAoE,UAAA,EAFiC,CAAnC,CALqC,CAWvC,GAAIz6D,CAAA,CAAUW,CAAAk6B,IAAV,CAAJ,EAA2Bl6B,CAAA+5D,MAA3B,CAAuC,CACrC,IAAIC,CACJtE,EAAAkE,YAAA1/B,IAAA,CAAuB+/B,QAAQ,CAACt9D,CAAD,CAAQ,CACrC,MAAO,CAACs8D,CAAA,CAAYt8D,CAAZ,CAAR,EAA8ByC,CAAA,CAAY46D,CAAZ,CAA9B,EAAqDjB,CAAA,CAAUp8D,CAAV,CAArD,EAAyEq9D,CADpC,CAGvCh6D,EAAAi/B,SAAA,CAAc,KAAd,CAAqB,QAAQ,CAACz7B,CAAD,CAAM,CACjCw2D,CAAA,CAASd,CAAA,CAAuB11D,CAAvB,CACTkyD,EAAAoE,UAAA,EAFiC,CAAnC,CALqC,CAjDqD,CADlC,CAwE9DX,QAASA,GAAe,CAACjxD,CAAD,CAAQ5H,CAAR,CAAiBN,CAAjB,CAAuB01D,CAAvB,CAA6B,CAGnD,CADuBA,CAAAsB,sBACvB,CADoD35D,CAAA,CADzCiD,CAAAR,CAAQ,CAARA,CACkDy3D,SAAT,CACpD,GACE7B,CAAA6D,SAAAt4D,KAAA,CAAmB,QAAQ,CAACtE,CAAD,CAAQ,CACjC,IAAI46D,EAAWj3D,CAAAP,KAAA,CA39uBSm6D,UA29uBT,CAAX3C,EAAoD,EACxD,OAAOA,EAAAE,SAAA,EAAqBF,CAAAI,aAArB,CAA6Cn2D,IAAAA,EAA7C,CAAyD7E,CAF/B,CAAnC,CAJiD,CAiHrDw9D,QAASA,GAAiB,CAACrjD,CAAD,CAAShb,CAAT,CAAkBmL,CAAlB,CAAwB47B,CAAxB,CAAoC1+B,CAApC,CAA8C,CAEtE,GAAI9E,CAAA,CAAUwjC,CAAV,CAAJ,CAA2B,CACzBu3B,CAAA,CAAUtjD,CAAA,CAAO+rB,CAAP,CACV,IAAKx1B,CAAA+sD,CAAA/sD,SAAL,CACE,KAAMosD,GAAA,CAAc,WAAd,CACiCxyD,CADjC,CACuC47B,CADvC,CAAN,CAGF,MAAOu3B,EAAA,CAAQt+D,CAAR,CANkB,CAQ3B,MAAOqI,EAV+D,CAqlBxEk2D,QAASA,GAAc,CAACpzD,CAAD,CAAO6V,CAAP,CAAiB,CACtC7V,CAAA,CAAO,SAAP,CAAmBA,CACnB,OAAO,CAAC,UAAD,CAAa,QAAQ,CAAC+M,CAAD,CAAW,CAuFrCsmD,QAASA,EAAe,CAACt4B,CAAD;AAAUC,CAAV,CAAmB,CACzC,IAAIF,EAAS,EAAb,CAGSvlC,EAAI,CADb,EAAA,CACA,IAAA,CAAgBA,CAAhB,CAAoBwlC,CAAAzmC,OAApB,CAAoCiB,CAAA,EAApC,CAAyC,CAEvC,IADA,IAAI0lC,EAAQF,CAAA,CAAQxlC,CAAR,CAAZ,CACSc,EAAI,CAAb,CAAgBA,CAAhB,CAAoB2kC,CAAA1mC,OAApB,CAAoC+B,CAAA,EAApC,CACE,GAAI4kC,CAAJ,EAAaD,CAAA,CAAQ3kC,CAAR,CAAb,CAAyB,SAAS,CAEpCykC,EAAA9gC,KAAA,CAAYihC,CAAZ,CALuC,CAOzC,MAAOH,EAXkC,CAc3Cw4B,QAASA,EAAY,CAACx6B,CAAD,CAAW,CAC9B,IAAI1f,EAAU,EACd,OAAIjlB,EAAA,CAAQ2kC,CAAR,CAAJ,EACEnkC,CAAA,CAAQmkC,CAAR,CAAkB,QAAQ,CAACsD,CAAD,CAAI,CAC5BhjB,CAAA,CAAUA,CAAAvd,OAAA,CAAey3D,CAAA,CAAal3B,CAAb,CAAf,CADkB,CAA9B,CAGOhjB,CAAAA,CAJT,EAKWhlB,CAAA,CAAS0kC,CAAT,CAAJ,CACEA,CAAA3/B,MAAA,CAAe,GAAf,CADF,CAEI/C,CAAA,CAAS0iC,CAAT,CAAJ,EACLnkC,CAAA,CAAQmkC,CAAR,CAAkB,QAAQ,CAACsD,CAAD,CAAIgrB,CAAJ,CAAO,CAC3BhrB,CAAJ,GACEhjB,CADF,CACYA,CAAAvd,OAAA,CAAeurD,CAAAjuD,MAAA,CAAQ,GAAR,CAAf,CADZ,CAD+B,CAAjC,CAKOigB,CAAAA,CANF,EAQA0f,CAjBuB,CApGhC,MAAO,CACL7S,SAAU,IADL,CAELhD,KAAMA,QAAQ,CAAChiB,CAAD,CAAQ5H,CAAR,CAAiBN,CAAjB,CAAuB,CAuBnCw6D,QAASA,EAAU,CAACn6C,CAAD,CAAU,CACvB4f,CAAAA,CAAaw6B,CAAA,CAAkBp6C,CAAlB,CAA2B,CAA3B,CACjBrgB,EAAA8/B,UAAA,CAAeG,CAAf,CAF2B,CAU7Bw6B,QAASA,EAAiB,CAACp6C,CAAD,CAAU6tB,CAAV,CAAiB,CAGzC,IAAIwsB,EAAcp6D,CAAA+H,KAAA,CAAa,cAAb,CAAdqyD,EAA8C93D,CAAA,EAAlD,CACI+3D,EAAkB,EACtB/+D,EAAA,CAAQykB,CAAR,CAAiB,QAAQ,CAACmP,CAAD,CAAY,CACnC,GAAY,CAAZ,CAAI0e,CAAJ,EAAiBwsB,CAAA,CAAYlrC,CAAZ,CAAjB,CACEkrC,CAAA,CAAYlrC,CAAZ,CACA,EAD0BkrC,CAAA,CAAYlrC,CAAZ,CAC1B,EADoD,CACpD,EADyD0e,CACzD,CAAIwsB,CAAA,CAAYlrC,CAAZ,CAAJ,GAA+B,EAAU,CAAV,CAAE0e,CAAF,CAA/B,EACEysB,CAAA15D,KAAA,CAAqBuuB,CAArB,CAJ+B,CAArC,CAQAlvB,EAAA+H,KAAA,CAAa,cAAb,CAA6BqyD,CAA7B,CACA,OAAOC,EAAAx0D,KAAA,CAAqB,GAArB,CAdkC,CAjCR;AAkDnCy0D,QAASA,EAAa,CAAC/+B,CAAD,CAAaoE,CAAb,CAAyB,CAC7C,IAAIC,EAAQo6B,CAAA,CAAgBr6B,CAAhB,CAA4BpE,CAA5B,CAAZ,CACIuE,EAAWk6B,CAAA,CAAgBz+B,CAAhB,CAA4BoE,CAA5B,CADf,CAEAC,EAAQu6B,CAAA,CAAkBv6B,CAAlB,CAAyB,CAAzB,CAFR,CAGAE,EAAWq6B,CAAA,CAAkBr6B,CAAlB,CAA6B,EAA7B,CACPF,EAAJ,EAAaA,CAAA3kC,OAAb,EACEyY,CAAAsM,SAAA,CAAkBhgB,CAAlB,CAA2B4/B,CAA3B,CAEEE,EAAJ,EAAgBA,CAAA7kC,OAAhB,EACEyY,CAAAuM,YAAA,CAAqBjgB,CAArB,CAA8B8/B,CAA9B,CAT2C,CAa/Cy6B,QAASA,EAAkB,CAAC/0C,CAAD,CAAS,CAElC,GAAiB,CAAA,CAAjB,GAAIhJ,CAAJ,GAA0B5U,CAAA4yD,OAA1B,CAAyC,CAAzC,IAAgDh+C,CAAhD,CAA0D,CAExD,IAAImjB,EAAas6B,CAAA,CAAaz0C,CAAb,EAAuB,EAAvB,CACjB,IAAKC,CAAAA,CAAL,CACEy0C,CAAA,CAAWv6B,CAAX,CADF,KAEO,IAAK,CAAA59B,EAAA,CAAOyjB,CAAP,CAAcC,CAAd,CAAL,CAA4B,CACjC,IAAI8V,EAAa0+B,CAAA,CAAax0C,CAAb,CACjB60C,EAAA,CAAc/+B,CAAd,CAA0BoE,CAA1B,CAFiC,CALqB,CAWxDla,CAAA,CADE3qB,CAAA,CAAQ0qB,CAAR,CAAJ,CACWA,CAAA4sC,IAAA,CAAW,QAAQ,CAACrvB,CAAD,CAAI,CAAE,MAAOx1B,GAAA,CAAYw1B,CAAZ,CAAT,CAAvB,CADX,CAGWx1B,EAAA,CAAYiY,CAAZ,CAfuB,CA9DpC,IAAIC,CAEJ7d,EAAAzI,OAAA,CAAaO,CAAA,CAAKiH,CAAL,CAAb,CAAyB4zD,CAAzB,CAA6C,CAAA,CAA7C,CAEA76D,EAAAi/B,SAAA,CAAc,OAAd,CAAuB,QAAQ,CAACtiC,CAAD,CAAQ,CACrCk+D,CAAA,CAAmB3yD,CAAAw7C,MAAA,CAAY1jD,CAAA,CAAKiH,CAAL,CAAZ,CAAnB,CADqC,CAAvC,CAKa,UAAb,GAAIA,CAAJ,EACEiB,CAAAzI,OAAA,CAAa,QAAb,CAAuB,QAAQ,CAACq7D,CAAD,CAASC,CAAT,CAAoB,CAEjD,IAAIC,EAAMF,CAANE,CAAe,CACnB,IAAIA,CAAJ,IAAaD,CAAb,CAAyB,CAAzB,EAA6B,CAC3B,IAAI16C,EAAUk6C,CAAA,CAAaryD,CAAAw7C,MAAA,CAAY1jD,CAAA,CAAKiH,CAAL,CAAZ,CAAb,CACd+zD,EAAA,GAAQl+C,CAAR,CACE09C,CAAA,CAAWn6C,CAAX,CADF,EAaA4f,CACJ,CADiBw6B,CAAA,CAXGp6C,CAWH,CAA4B,EAA5B,CACjB,CAAArgB,CAAAggC,aAAA,CAAkBC,CAAlB,CAdI,CAF2B,CAHoB,CAAnD,CAXiC,CAFhC,CAD8B,CAAhC,CAF+B,CAuwGxCw1B,QAASA,GAAoB,CAAC35D,CAAD,CAAU,CA4ErCm/D,QAASA,EAAiB,CAACzrC,CAAD;AAAY0rC,CAAZ,CAAyB,CAC7CA,CAAJ,EAAoB,CAAAC,CAAA,CAAW3rC,CAAX,CAApB,EACExb,CAAAsM,SAAA,CAAkBiN,CAAlB,CAA4BiC,CAA5B,CACA,CAAA2rC,CAAA,CAAW3rC,CAAX,CAAA,CAAwB,CAAA,CAF1B,EAGY0rC,CAAAA,CAHZ,EAG2BC,CAAA,CAAW3rC,CAAX,CAH3B,GAIExb,CAAAuM,YAAA,CAAqBgN,CAArB,CAA+BiC,CAA/B,CACA,CAAA2rC,CAAA,CAAW3rC,CAAX,CAAA,CAAwB,CAAA,CAL1B,CADiD,CAUnD4rC,QAASA,EAAmB,CAACC,CAAD,CAAqBC,CAArB,CAA8B,CACxDD,CAAA,CAAqBA,CAAA,CAAqB,GAArB,CAA2BlyD,EAAA,CAAWkyD,CAAX,CAA+B,GAA/B,CAA3B,CAAiE,EAEtFJ,EAAA,CAAkBM,EAAlB,CAAgCF,CAAhC,CAAgE,CAAA,CAAhE,GAAoDC,CAApD,CACAL,EAAA,CAAkBO,EAAlB,CAAkCH,CAAlC,CAAkE,CAAA,CAAlE,GAAsDC,CAAtD,CAJwD,CAtFrB,IACjC5F,EAAO55D,CAAA45D,KAD0B,CAEjCnoC,EAAWzxB,CAAAyxB,SAFsB,CAGjC4tC,EAAa,EAHoB,CAIjCp5D,EAAMjG,CAAAiG,IAJ2B,CAKjC4zD,EAAQ75D,CAAA65D,MALyB,CAMjC3hD,EAAWlY,CAAAkY,SAEfmnD,EAAA,CAAWK,EAAX,CAAA,CAA4B,EAAEL,CAAA,CAAWI,EAAX,CAAF,CAA4BhuC,CAAAnN,SAAA,CAAkBm7C,EAAlB,CAA5B,CAE5B7F,EAAAF,aAAA,CAEAiG,QAAoB,CAACJ,CAAD,CAAqBjzC,CAArB,CAA4Ble,CAA5B,CAAwC,CACtD9K,CAAA,CAAYgpB,CAAZ,CAAJ,EAgDKstC,CAAA,SAGL,GAFEA,CAAA,SAEF,CAFe,EAEf,EAAA3zD,CAAA,CAAI2zD,CAAA,SAAJ,CAlD2B2F,CAkD3B,CAlD+CnxD,CAkD/C,CAnDA,GAuDIwrD,CAAA,SAGJ,EAFEC,CAAA,CAAMD,CAAA,SAAN,CArD4B2F,CAqD5B,CArDgDnxD,CAqDhD,CAEF,CAAIwxD,EAAA,CAAchG,CAAA,SAAd,CAAJ,GACEA,CAAA,SADF,CACel0D,IAAAA,EADf,CA1DA,CAKK9B,GAAA,CAAU0oB,CAAV,CAAL,CAIMA,CAAJ,EACEutC,CAAA,CAAMD,CAAA1B,OAAN,CAAmBqH,CAAnB,CAAuCnxD,CAAvC,CACA,CAAAnI,CAAA,CAAI2zD,CAAAzB,UAAJ,CAAoBoH,CAApB,CAAwCnxD,CAAxC,CAFF,GAIEnI,CAAA,CAAI2zD,CAAA1B,OAAJ,CAAiBqH,CAAjB,CAAqCnxD,CAArC,CACA,CAAAyrD,CAAA,CAAMD,CAAAzB,UAAN,CAAsBoH,CAAtB,CAA0CnxD,CAA1C,CALF,CAJF,EACEyrD,CAAA,CAAMD,CAAA1B,OAAN,CAAmBqH,CAAnB,CAAuCnxD,CAAvC,CACA,CAAAyrD,CAAA,CAAMD,CAAAzB,UAAN;AAAsBoH,CAAtB,CAA0CnxD,CAA1C,CAFF,CAYIwrD,EAAAxB,SAAJ,EACE+G,CAAA,CAAkBU,EAAlB,CAAiC,CAAA,CAAjC,CAEA,CADAjG,CAAApB,OACA,CADcoB,CAAAnB,SACd,CAD8B/yD,IAAAA,EAC9B,CAAA45D,CAAA,CAAoB,EAApB,CAAwB,IAAxB,CAHF,GAKEH,CAAA,CAAkBU,EAAlB,CAAiC,CAAA,CAAjC,CAGA,CAFAjG,CAAApB,OAEA,CAFcoH,EAAA,CAAchG,CAAA1B,OAAd,CAEd,CADA0B,CAAAnB,SACA,CADgB,CAACmB,CAAApB,OACjB,CAAA8G,CAAA,CAAoB,EAApB,CAAwB1F,CAAApB,OAAxB,CARF,CAiBEsH,EAAA,CADElG,CAAAxB,SAAJ,EAAqBwB,CAAAxB,SAAA,CAAcmH,CAAd,CAArB,CACkB75D,IAAAA,EADlB,CAEWk0D,CAAA1B,OAAA,CAAYqH,CAAZ,CAAJ,CACW,CAAA,CADX,CAEI3F,CAAAzB,UAAA,CAAeoH,CAAf,CAAJ,CACW,CAAA,CADX,CAGW,IAGlBD,EAAA,CAAoBC,CAApB,CAAwCO,CAAxC,CACAlG,EAAAjB,aAAAe,aAAA,CAA+B6F,CAA/B,CAAmDO,CAAnD,CAAkElG,CAAlE,CA7C0D,CAZvB,CA8FvCgG,QAASA,GAAa,CAACxgE,CAAD,CAAM,CAC1B,GAAIA,CAAJ,CACE,IAAS6E,IAAAA,CAAT,GAAiB7E,EAAjB,CACE,GAAIA,CAAAe,eAAA,CAAmB8D,CAAnB,CAAJ,CACE,MAAO,CAAA,CAIb,OAAO,CAAA,CARmB,CArg3B5B,IAAI87D,GAAsB,oBAA1B,CAMI5/D,GAAiBT,MAAA0lB,UAAAjlB,eANrB,CAQIsE,EAAYA,QAAQ,CAACwwD,CAAD,CAAS,CAAC,MAAO11D,EAAA,CAAS01D,CAAT,CAAA,CAAmBA,CAAAvnD,YAAA,EAAnB,CAA0CunD,CAAlD,CARjC,CASI/iD,GAAYA,QAAQ,CAAC+iD,CAAD,CAAS,CAAC,MAAO11D,EAAA,CAAS01D,CAAT,CAAA,CAAmBA,CAAA73C,YAAA,EAAnB,CAA0C63C,CAAlD,CATjC,CAoCIttC,EApCJ,CAqCInoB,CArCJ,CAsCIwO,EAtCJ,CAuCI3L,GAAoB,EAAAA,MAvCxB;AAwCIyC,GAAoB,EAAAA,OAxCxB,CAyCIK,GAAoB,EAAAA,KAzCxB,CA0CI9B,GAAoB3D,MAAA0lB,UAAA/hB,SA1CxB,CA2CIG,GAAoB9D,MAAA8D,eA3CxB,CA4CI+B,GAAoBrG,CAAA,CAAO,IAAP,CA5CxB,CA+CIwN,GAAoBzN,CAAAyN,QAApBA,GAAuCzN,CAAAyN,QAAvCA,CAAwD,EAAxDA,CA/CJ,CAgDI2F,EAhDJ,CAiDItR,GAAoB,CAMxB4mB,GAAA,CAAO1oB,CAAA0I,SAAAq4D,aAwQPj9D,EAAA0kB,QAAA,CAAe,EAgCfzkB,GAAAykB,QAAA,CAAmB,EAsInB,KAAInoB,EAAUM,KAAAN,QAAd,CAuEIwE,GAAqB,yFAvEzB,CAiFImb,EAAOA,QAAQ,CAACpe,CAAD,CAAQ,CACzB,MAAOtB,EAAA,CAASsB,CAAT,CAAA,CAAkBA,CAAAoe,KAAA,EAAlB,CAAiCpe,CADf,CAjF3B,CAwFIuoD,GAAkBA,QAAQ,CAACwM,CAAD,CAAI,CAChC,MAAOA,EAAAttD,QAAA,CAAU,+BAAV,CAA2C,MAA3C,CAAAA,QAAA,CACU,OADV,CACmB,OADnB,CADyB,CAxFlC,CAicI8J,GAAMA,QAAQ,EAAG,CACnB,GAAK,CAAA7O,CAAA,CAAU6O,EAAA6tD,MAAV,CAAL,CAA2B,CAGzB,IAAIC,EAAgBjhE,CAAA0I,SAAA2D,cAAA,CAA8B,UAA9B,CAAhB40D;AACYjhE,CAAA0I,SAAA2D,cAAA,CAA8B,eAA9B,CAEhB,IAAI40D,CAAJ,CAAkB,CAChB,IAAIC,EAAiBD,CAAAt1D,aAAA,CAA0B,QAA1B,CAAjBu1D,EACUD,CAAAt1D,aAAA,CAA0B,aAA1B,CACdwH,GAAA6tD,MAAA,CAAY,CACV9f,aAAc,CAACggB,CAAfhgB,EAAgF,EAAhFA,GAAkCggB,CAAAt7D,QAAA,CAAuB,gBAAvB,CADxB,CAEVu7D,cAAe,CAACD,CAAhBC,EAAkF,EAAlFA,GAAmCD,CAAAt7D,QAAA,CAAuB,iBAAvB,CAFzB,CAHI,CAAlB,IAOO,CACLuN,CAAAA,CAAAA,EAUF,IAAI,CAEF,IAAI+S,QAAJ,CAAa,EAAb,CAEA,CAAA,CAAA,CAAO,CAAA,CAJL,CAKF,MAAO9b,CAAP,CAAU,CACV,CAAA,CAAO,CAAA,CADG,CAfV+I,CAAA6tD,MAAA,CAAY,CACV9f,aAAc,CADJ,CAEVigB,cAAe,CAAA,CAFL,CADP,CAbkB,CAqB3B,MAAOhuD,GAAA6tD,MAtBY,CAjcrB,CA2gBIlyD,GAAKA,QAAQ,EAAG,CAClB,GAAIxK,CAAA,CAAUwK,EAAAsyD,MAAV,CAAJ,CAAyB,MAAOtyD,GAAAsyD,MAChC,KAAIC,CAAJ,CACI5/D,CADJ,CACOY,EAAKqJ,EAAAlL,OADZ,CACmCyL,CADnC,CAC2CC,CAC3C,KAAKzK,CAAL,CAAS,CAAT,CAAYA,CAAZ,CAAgBY,CAAhB,CAAoB,EAAEZ,CAAtB,CAEE,GADAwK,CACI,CADKP,EAAA,CAAejK,CAAf,CACL,CAAA4/D,CAAA,CAAKrhE,CAAA0I,SAAA2D,cAAA,CAA8B,GAA9B,CAAoCJ,CAAA5C,QAAA,CAAe,GAAf,CAAoB,KAApB,CAApC,CAAiE,KAAjE,CAAT,CAAkF,CAChF6C,CAAA,CAAOm1D,CAAA11D,aAAA,CAAgBM,CAAhB;AAAyB,IAAzB,CACP,MAFgF,CAMpF,MAAQ6C,GAAAsyD,MAAR,CAAmBl1D,CAZD,CA3gBpB,CA4pBI5C,GAAa,IA5pBjB,CAszBIoC,GAAiB,CAAC,KAAD,CAAQ,UAAR,CAAoB,KAApB,CAA2B,OAA3B,CAtzBrB,CAqoCI4C,GAAoB,QAroCxB,CA6oCIM,GAAkB,CAAA,CA7oCtB,CAoyCInE,GAAiB,CApyCrB,CA2zDIuI,GAAU,CACZsuD,KAAM,OADM,CAEZC,MAAO,CAFK,CAGZC,MAAO,CAHK,CAIZC,IAAK,CAJO,CAKZC,SAAU,qBALE,CA8Qd7xD,EAAA8xD,QAAA,CAAiB,OAjuFC,KAmuFdpgD,GAAU1R,CAAAkY,MAAVxG,CAAyB,EAnuFX,CAouFdE,GAAO,CAWX5R,EAAAH,MAAA,CAAekyD,QAAQ,CAAC78D,CAAD,CAAO,CAE5B,MAAO,KAAAgjB,MAAA,CAAWhjB,CAAA,CAAK,IAAA48D,QAAL,CAAX,CAAP,EAAyC,EAFb,CAQ9B,KAAI3jD,GAAuB,iBAA3B,CACII,GAAkB,aADtB,CAEIgD,GAAiB,CAAEygD,WAAY,UAAd,CAA0BC,WAAY,WAAtC,CAFrB,CAGI7hD,GAAehgB,CAAA,CAAO,QAAP,CAHnB,CAkBIkgB,GAAoB,+BAlBxB,CAmBIvB,GAAc,WAnBlB,CAoBIG,GAAkB,YApBtB,CAqBIM,GAAmB,0EArBvB;AAuBIH,GAAU,CACZ,OAAU,CAAC,CAAD,CAAI,8BAAJ,CAAoC,WAApC,CADE,CAGZ,MAAS,CAAC,CAAD,CAAI,SAAJ,CAAe,UAAf,CAHG,CAIZ,IAAO,CAAC,CAAD,CAAI,mBAAJ,CAAyB,qBAAzB,CAJK,CAKZ,GAAM,CAAC,CAAD,CAAI,gBAAJ,CAAsB,kBAAtB,CALM,CAMZ,GAAM,CAAC,CAAD,CAAI,oBAAJ,CAA0B,uBAA1B,CANM,CAOZ,SAAY,CAAC,CAAD,CAAI,EAAJ,CAAQ,EAAR,CAPA,CAUdA,GAAA6iD,SAAA,CAAmB7iD,EAAA5K,OACnB4K,GAAA8iD,MAAA,CAAgB9iD,EAAA+iD,MAAhB,CAAgC/iD,EAAAgjD,SAAhC,CAAmDhjD,EAAAijD,QAAnD,CAAqEjjD,EAAAkjD,MACrEljD,GAAAmjD,GAAA,CAAanjD,EAAAojD,GA2Fb,KAAIp9C,GAAiBllB,CAAAuiE,KAAAp8C,UAAAq8C,SAAjBt9C,EAAmD,QAAQ,CAACnV,CAAD,CAAM,CAEnE,MAAO,CAAG,EAAA,IAAA0yD,wBAAA,CAA6B1yD,CAA7B,CAAA,CAAoC,EAApC,CAFyD,CAArE,CAqQId,GAAkBY,CAAAsW,UAAlBlX,CAAqC,CACvCyzD,MAAOA,QAAQ,CAACt6D,CAAD,CAAK,CAGlBu6D,QAASA,EAAO,EAAG,CACbC,CAAJ,GACAA,CACA,CADQ,CAAA,CACR,CAAAx6D,CAAA,EAFA,CADiB,CAFnB,IAAIw6D,EAAQ,CAAA,CASuB,WAAnC;AAAI5iE,CAAA0I,SAAA2a,WAAJ,CACErjB,CAAAsjB,WAAA,CAAkBq/C,CAAlB,CADF,EAGE,IAAA3zD,GAAA,CAAQ,kBAAR,CAA4B2zD,CAA5B,CAGA,CAAA9yD,CAAA,CAAO7P,CAAP,CAAAgP,GAAA,CAAkB,MAAlB,CAA0B2zD,CAA1B,CANF,CAVkB,CADmB,CAqBvCv+D,SAAUA,QAAQ,EAAG,CACnB,IAAIxC,EAAQ,EACZf,EAAA,CAAQ,IAAR,CAAc,QAAQ,CAACuJ,CAAD,CAAI,CAAExI,CAAAsE,KAAA,CAAW,EAAX,CAAgBkE,CAAhB,CAAF,CAA1B,CACA,OAAO,GAAP,CAAaxI,CAAAwJ,KAAA,CAAW,IAAX,CAAb,CAAgC,GAHb,CArBkB,CA2BvCm7C,GAAIA,QAAQ,CAAC5gD,CAAD,CAAQ,CAChB,MAAiB,EAAV,EAACA,CAAD,CAAepF,CAAA,CAAO,IAAA,CAAKoF,CAAL,CAAP,CAAf,CAAqCpF,CAAA,CAAO,IAAA,CAAK,IAAAC,OAAL,CAAmBmF,CAAnB,CAAP,CAD5B,CA3BmB,CA+BvCnF,OAAQ,CA/B+B,CAgCvC0F,KAAMA,EAhCiC,CAiCvC1E,KAAM,EAAAA,KAjCiC,CAkCvCqE,OAAQ,EAAAA,OAlC+B,CArQzC,CA+SI4d,GAAe,EACnB5iB,EAAA,CAAQ,2DAAA,MAAA,CAAA,GAAA,CAAR,CAAgF,QAAQ,CAACe,CAAD,CAAQ,CAC9F6hB,EAAA,CAAaje,CAAA,CAAU5D,CAAV,CAAb,CAAA,CAAiCA,CAD6D,CAAhG,CAGA,KAAI8hB,GAAmB,EACvB7iB,EAAA,CAAQ,kDAAA,MAAA,CAAA,GAAA,CAAR,CAAuE,QAAQ,CAACe,CAAD,CAAQ,CACrF8hB,EAAA,CAAiB9hB,CAAjB,CAAA,CAA0B,CAAA,CAD2D,CAAvF,CAGA,KAAI6jC,GAAe,CACjB,YAAe,WADE;AAEjB,YAAe,WAFE,CAGjB,MAAS,KAHQ,CAIjB,MAAS,KAJQ,CAKjB,UAAa,SALI,CAoBnB5kC,EAAA,CAAQ,CACNyM,KAAMoU,EADA,CAENmhD,WAAYriD,EAFN,CAGN2iB,QA3ZF2/B,QAAsB,CAAC/9D,CAAD,CAAO,CAC3B,IAAS/D,IAAAA,CAAT,GAAgBugB,GAAA,CAAQxc,CAAAuc,MAAR,CAAhB,CACE,MAAO,CAAA,CAET,OAAO,CAAA,CAJoB,CAwZrB,CAINjS,UArZF0zD,QAAwB,CAACryD,CAAD,CAAQ,CAC9B,IAD8B,IACrBjP,EAAI,CADiB,CACdY,EAAKqO,CAAAlQ,OAArB,CAAmCiB,CAAnC,CAAuCY,CAAvC,CAA2CZ,CAAA,EAA3C,CACE+e,EAAA,CAAiB9P,CAAA,CAAMjP,CAAN,CAAjB,CAF4B,CAiZxB,CAAR,CAKG,QAAQ,CAAC2G,CAAD,CAAK8D,CAAL,CAAW,CACpB2D,CAAA,CAAO3D,CAAP,CAAA,CAAe9D,CADK,CALtB,CASAvH,EAAA,CAAQ,CACNyM,KAAMoU,EADA,CAENtS,cAAeqT,EAFT,CAINtV,MAAOA,QAAQ,CAAC5H,CAAD,CAAU,CAEvB,MAAOhF,EAAA+M,KAAA,CAAY/H,CAAZ,CAAqB,QAArB,CAAP,EAAyCkd,EAAA,CAAoBld,CAAAsa,WAApB,EAA0Cta,CAA1C,CAAmD,CAAC,eAAD,CAAkB,QAAlB,CAAnD,CAFlB,CAJnB,CASN2J,aAAcA,QAAQ,CAAC3J,CAAD,CAAU,CAE9B,MAAOhF,EAAA+M,KAAA,CAAY/H,CAAZ,CAAqB,eAArB,CAAP,EAAgDhF,CAAA+M,KAAA,CAAY/H,CAAZ,CAAqB,yBAArB,CAFlB,CAT1B,CAcN4J,WAAYqT,EAdN,CAgBN9V,SAAUA,QAAQ,CAACnH,CAAD,CAAU,CAC1B,MAAOkd,GAAA,CAAoBld,CAApB;AAA6B,WAA7B,CADmB,CAhBtB,CAoBN2gC,WAAYA,QAAQ,CAAC3gC,CAAD,CAAU2G,CAAV,CAAgB,CAClC3G,CAAAy9D,gBAAA,CAAwB92D,CAAxB,CADkC,CApB9B,CAwBNmZ,SAAUvD,EAxBJ,CA0BNmhD,IAAKA,QAAQ,CAAC19D,CAAD,CAAU2G,CAAV,CAAgBtK,CAAhB,CAAuB,CAClCsK,CAAA,CAAO6R,EAAA,CAAU7R,CAAV,CAEP,IAAI5H,CAAA,CAAU1C,CAAV,CAAJ,CACE2D,CAAA6O,MAAA,CAAclI,CAAd,CAAA,CAAsBtK,CADxB,KAGE,OAAO2D,EAAA6O,MAAA,CAAclI,CAAd,CANyB,CA1B9B,CAoCNjH,KAAMA,QAAQ,CAACM,CAAD,CAAU2G,CAAV,CAAgBtK,CAAhB,CAAuB,CACnC,IAAI4I,EAAWjF,CAAAiF,SACf,IAAIA,CAAJ,GAAiBC,EAAjB,EApzCsBy4D,CAozCtB,GAAmC14D,CAAnC,EAlzCoByuB,CAkzCpB,GAAuEzuB,CAAvE,CAIA,GADI24D,CACA,CADiB39D,CAAA,CAAU0G,CAAV,CACjB,CAAAuX,EAAA,CAAa0/C,CAAb,CAAJ,CACE,GAAI7+D,CAAA,CAAU1C,CAAV,CAAJ,CACQA,CAAN,EACE2D,CAAA,CAAQ2G,CAAR,CACA,CADgB,CAAA,CAChB,CAAA3G,CAAA2c,aAAA,CAAqBhW,CAArB,CAA2Bi3D,CAA3B,CAFF,GAIE59D,CAAA,CAAQ2G,CAAR,CACA,CADgB,CAAA,CAChB,CAAA3G,CAAAy9D,gBAAA,CAAwBG,CAAxB,CALF,CADF,KASE,OAAQ59D,EAAA,CAAQ2G,CAAR,CAAD,EACEk3D,CAAC79D,CAAA6uB,WAAAivC,aAAA,CAAgCn3D,CAAhC,CAADk3D,EAA0Ct/D,CAA1Cs/D,WADF,CAEED,CAFF,CAGE18D,IAAAA,EAbb,KAeO,IAAInC,CAAA,CAAU1C,CAAV,CAAJ,CACL2D,CAAA2c,aAAA,CAAqBhW,CAArB,CAA2BtK,CAA3B,CADK,KAEA,IAAI2D,CAAAoG,aAAJ,CAKL,MAFI23D,EAEG,CAFG/9D,CAAAoG,aAAA,CAAqBO,CAArB,CAA2B,CAA3B,CAEH,CAAQ,IAAR,GAAAo3D,CAAA,CAAe78D,IAAAA,EAAf,CAA2B68D,CA5BD,CApC/B,CAoENt+D,KAAMA,QAAQ,CAACO,CAAD,CAAU2G,CAAV,CAAgBtK,CAAhB,CAAuB,CACnC,GAAI0C,CAAA,CAAU1C,CAAV,CAAJ,CACE2D,CAAA,CAAQ2G,CAAR,CAAA;AAAgBtK,CADlB,KAGE,OAAO2D,EAAA,CAAQ2G,CAAR,CAJ0B,CApE/B,CA4ENo1B,KAAO,QAAQ,EAAG,CAIhBiiC,QAASA,EAAO,CAACh+D,CAAD,CAAU3D,CAAV,CAAiB,CAC/B,GAAIyC,CAAA,CAAYzC,CAAZ,CAAJ,CAAwB,CACtB,IAAI4I,EAAWjF,CAAAiF,SACf,OAl2CgB8T,EAk2CT,GAAC9T,CAAD,EAAmCA,CAAnC,GAAgDC,EAAhD,CAAkElF,CAAAka,YAAlE,CAAwF,EAFzE,CAIxBla,CAAAka,YAAA,CAAsB7d,CALS,CAHjC2hE,CAAAC,IAAA,CAAc,EACd,OAAOD,EAFS,CAAZ,EA5EA,CAyFN96D,IAAKA,QAAQ,CAAClD,CAAD,CAAU3D,CAAV,CAAiB,CAC5B,GAAIyC,CAAA,CAAYzC,CAAZ,CAAJ,CAAwB,CACtB,GAAI2D,CAAAk+D,SAAJ,EAA+C,QAA/C,GAAwBn+D,EAAA,CAAUC,CAAV,CAAxB,CAAyD,CACvD,IAAI4hB,EAAS,EACbtmB,EAAA,CAAQ0E,CAAA+lB,QAAR,CAAyB,QAAQ,CAAChX,CAAD,CAAS,CACpCA,CAAAovD,SAAJ,EACEv8C,CAAAjhB,KAAA,CAAYoO,CAAA1S,MAAZ,EAA4B0S,CAAAgtB,KAA5B,CAFsC,CAA1C,CAKA,OAAyB,EAAlB,GAAAna,CAAA3mB,OAAA,CAAsB,IAAtB,CAA6B2mB,CAPmB,CASzD,MAAO5hB,EAAA3D,MAVe,CAYxB2D,CAAA3D,MAAA,CAAgBA,CAbY,CAzFxB,CAyGN2I,KAAMA,QAAQ,CAAChF,CAAD,CAAU3D,CAAV,CAAiB,CAC7B,GAAIyC,CAAA,CAAYzC,CAAZ,CAAJ,CACE,MAAO2D,EAAA6Z,UAETkB,GAAA,CAAa/a,CAAb,CAAsB,CAAA,CAAtB,CACAA,EAAA6Z,UAAA,CAAoBxd,CALS,CAzGzB,CAiHNuI,MAAO2Y,EAjHD,CAAR,CAkHG,QAAQ,CAAC1a,CAAD,CAAK8D,CAAL,CAAW,CAIpB2D,CAAAsW,UAAA,CAAiBja,CAAjB,CAAA,CAAyB,QAAQ,CAAC4tC,CAAD,CAAOC,CAAP,CAAa,CAAA,IACxCt4C,CADwC,CACrCT,CADqC,CAExC2iE,EAAY,IAAAnjE,OAKhB,IAAI4H,CAAJ,GAAW0a,EAAX,EACKze,CAAA,CAA0B,CAAd,EAAC+D,CAAA5H,OAAD;AAAoB4H,CAApB,GAA2B0Z,EAA3B,EAA6C1Z,CAA7C,GAAoDoa,EAApD,CAAyEs3B,CAAzE,CAAgFC,CAA5F,CADL,CACyG,CACvG,GAAIz3C,CAAA,CAASw3C,CAAT,CAAJ,CAAoB,CAGlB,IAAKr4C,CAAL,CAAS,CAAT,CAAYA,CAAZ,CAAgBkiE,CAAhB,CAA2BliE,CAAA,EAA3B,CACE,GAAI2G,CAAJ,GAAWsZ,EAAX,CAEEtZ,CAAA,CAAG,IAAA,CAAK3G,CAAL,CAAH,CAAYq4C,CAAZ,CAFF,KAIE,KAAK94C,CAAL,GAAY84C,EAAZ,CACE1xC,CAAA,CAAG,IAAA,CAAK3G,CAAL,CAAH,CAAYT,CAAZ,CAAiB84C,CAAA,CAAK94C,CAAL,CAAjB,CAKN,OAAO,KAdW,CAkBdY,CAAAA,CAAQwG,CAAAo7D,IAERhhE,EAAAA,CAAM6B,CAAA,CAAYzC,CAAZ,CAAD,CAAuBs9B,IAAAi0B,IAAA,CAASwQ,CAAT,CAAoB,CAApB,CAAvB,CAAgDA,CACzD,KAASphE,CAAT,CAAa,CAAb,CAAgBA,CAAhB,CAAoBC,CAApB,CAAwBD,CAAA,EAAxB,CAA6B,CAC3B,IAAI0yB,EAAY7sB,CAAA,CAAG,IAAA,CAAK7F,CAAL,CAAH,CAAYu3C,CAAZ,CAAkBC,CAAlB,CAChBn4C,EAAA,CAAQA,CAAA,CAAQA,CAAR,CAAgBqzB,CAAhB,CAA4BA,CAFT,CAI7B,MAAOrzB,EA1B8F,CA8BvG,IAAKH,CAAL,CAAS,CAAT,CAAYA,CAAZ,CAAgBkiE,CAAhB,CAA2BliE,CAAA,EAA3B,CACE2G,CAAA,CAAG,IAAA,CAAK3G,CAAL,CAAH,CAAYq4C,CAAZ,CAAkBC,CAAlB,CAGF,OAAO,KA1CmC,CAJ1B,CAlHtB,CA8OAl5C,EAAA,CAAQ,CACNgiE,WAAYriD,EADN,CAGNxR,GAAI40D,QAAiB,CAACr+D,CAAD,CAAU8B,CAAV,CAAgBe,CAAhB,CAAoByY,CAApB,CAAiC,CACpD,GAAIvc,CAAA,CAAUuc,CAAV,CAAJ,CAA4B,KAAMZ,GAAA,CAAa,QAAb,CAAN,CAG5B,GAAK5B,EAAA,CAAkB9Y,CAAlB,CAAL,CAAA,CAIIub,CAAAA,CAAeC,EAAA,CAAmBxb,CAAnB,CAA4B,CAAA,CAA5B,CACnB,KAAIiK,EAASsR,CAAAtR,OAAb,CACIwR,EAASF,CAAAE,OAERA,EAAL,GACEA,CADF,CACWF,CAAAE,OADX,CACiC2C,EAAA,CAAmBpe,CAAnB,CAA4BiK,CAA5B,CADjC,CAKIq0D,EAAAA,CAA6B,CAArB,EAAAx8D,CAAAzB,QAAA,CAAa,GAAb,CAAA,CAAyByB,CAAAhC,MAAA,CAAW,GAAX,CAAzB,CAA2C,CAACgC,CAAD,CAiBvD,KAhBA,IAAI5F,EAAIoiE,CAAArjE,OAAR,CAEIsjE,EAAaA,QAAQ,CAACz8D,CAAD,CAAOsd,CAAP,CAA8Bo/C,CAA9B,CAA+C,CACtE,IAAI9/C,EAAWzU,CAAA,CAAOnI,CAAP,CAEV4c,EAAL,GACEA,CAEA,CAFWzU,CAAA,CAAOnI,CAAP,CAEX,CAF0B,EAE1B,CADA4c,CAAAU,sBACA;AADiCA,CACjC,CAAa,UAAb,GAAItd,CAAJ,EAA4B08D,CAA5B,EACqBx+D,CA/uBvBmqC,iBAAA,CA+uBgCroC,CA/uBhC,CA+uBsC2Z,CA/uBtC,CAAmC,CAAA,CAAnC,CA2uBA,CAQAiD,EAAA/d,KAAA,CAAckC,CAAd,CAXsE,CAcxE,CAAO3G,CAAA,EAAP,CAAA,CACE4F,CACA,CADOw8D,CAAA,CAAMpiE,CAAN,CACP,CAAI2f,EAAA,CAAgB/Z,CAAhB,CAAJ,EACEy8D,CAAA,CAAW1iD,EAAA,CAAgB/Z,CAAhB,CAAX,CAAkCyd,EAAlC,CACA,CAAAg/C,CAAA,CAAWz8D,CAAX,CAAiBZ,IAAAA,EAAjB,CAA4B,CAAA,CAA5B,CAFF,EAIEq9D,CAAA,CAAWz8D,CAAX,CApCJ,CAJoD,CAHhD,CAgDN4mB,IAAKrN,EAhDC,CAkDNojD,IAAKA,QAAQ,CAACz+D,CAAD,CAAU8B,CAAV,CAAgBe,CAAhB,CAAoB,CAC/B7C,CAAA,CAAUhF,CAAA,CAAOgF,CAAP,CAKVA,EAAAyJ,GAAA,CAAW3H,CAAX,CAAiB48D,QAASA,EAAI,EAAG,CAC/B1+D,CAAA0oB,IAAA,CAAY5mB,CAAZ,CAAkBe,CAAlB,CACA7C,EAAA0oB,IAAA,CAAY5mB,CAAZ,CAAkB48D,CAAlB,CAF+B,CAAjC,CAIA1+D,EAAAyJ,GAAA,CAAW3H,CAAX,CAAiBe,CAAjB,CAV+B,CAlD3B,CA+DN21B,YAAaA,QAAQ,CAACx4B,CAAD,CAAU2+D,CAAV,CAAuB,CAAA,IACtCv+D,CADsC,CAC/BhC,EAAS4B,CAAAsa,WACpBS,GAAA,CAAa/a,CAAb,CACA1E,EAAA,CAAQ,IAAIgP,CAAJ,CAAWq0D,CAAX,CAAR,CAAiC,QAAQ,CAACn/D,CAAD,CAAO,CAC1CY,CAAJ,CACEhC,CAAAwgE,aAAA,CAAoBp/D,CAApB,CAA0BY,CAAAkL,YAA1B,CADF,CAGElN,CAAAmc,aAAA,CAAoB/a,CAApB,CAA0BQ,CAA1B,CAEFI,EAAA,CAAQZ,CANsC,CAAhD,CAH0C,CA/DtC,CA4ENu1C,SAAUA,QAAQ,CAAC/0C,CAAD,CAAU,CAC1B,IAAI+0C,EAAW,EACfz5C,EAAA,CAAQ0E,CAAAga,WAAR,CAA4B,QAAQ,CAACha,CAAD,CAAU,CA3kD1B+Y,CA4kDlB,GAAI/Y,CAAAiF,SAAJ,EACE8vC,CAAAp0C,KAAA,CAAcX,CAAd,CAF0C,CAA9C,CAKA,OAAO+0C,EAPmB,CA5EtB,CAsFNnc,SAAUA,QAAQ,CAAC54B,CAAD,CAAU,CAC1B,MAAOA,EAAA6+D,gBAAP,EAAkC7+D,CAAAga,WAAlC,EAAwD,EAD9B,CAtFtB,CA0FNjV,OAAQA,QAAQ,CAAC/E,CAAD;AAAUR,CAAV,CAAgB,CAC9B,IAAIyF,EAAWjF,CAAAiF,SACf,IAzlDoB8T,CAylDpB,GAAI9T,CAAJ,EAplD8BoY,EAolD9B,GAAsCpY,CAAtC,CAAA,CAEAzF,CAAA,CAAO,IAAI8K,CAAJ,CAAW9K,CAAX,CAEP,KAAStD,IAAAA,EAAI,CAAJA,CAAOY,EAAK0C,CAAAvE,OAArB,CAAkCiB,CAAlC,CAAsCY,CAAtC,CAA0CZ,CAAA,EAA1C,CAEE8D,CAAAsZ,YAAA,CADY9Z,CAAAohD,CAAK1kD,CAAL0kD,CACZ,CANF,CAF8B,CA1F1B,CAsGNke,QAASA,QAAQ,CAAC9+D,CAAD,CAAUR,CAAV,CAAgB,CAC/B,GApmDoBuZ,CAomDpB,GAAI/Y,CAAAiF,SAAJ,CAA4C,CAC1C,IAAI7E,EAAQJ,CAAAia,WACZ3e,EAAA,CAAQ,IAAIgP,CAAJ,CAAW9K,CAAX,CAAR,CAA0B,QAAQ,CAACohD,CAAD,CAAQ,CACxC5gD,CAAA4+D,aAAA,CAAqBhe,CAArB,CAA4BxgD,CAA5B,CADwC,CAA1C,CAF0C,CADb,CAtG3B,CA+GNsZ,KAAMA,QAAQ,CAAC1Z,CAAD,CAAU++D,CAAV,CAAoB,CAChC3kD,EAAA,CAAepa,CAAf,CAAwBhF,CAAA,CAAO+jE,CAAP,CAAA/d,GAAA,CAAoB,CAApB,CAAArjD,MAAA,EAAA,CAA+B,CAA/B,CAAxB,CADgC,CA/G5B,CAmHN8sB,OAAQhN,EAnHF,CAqHNuhD,OAAQA,QAAQ,CAACh/D,CAAD,CAAU,CACxByd,EAAA,CAAazd,CAAb,CAAsB,CAAA,CAAtB,CADwB,CArHpB,CAyHNi/D,MAAOA,QAAQ,CAACj/D,CAAD,CAAUk/D,CAAV,CAAsB,CAAA,IAC/B9+D,EAAQJ,CADuB,CACd5B,EAAS4B,CAAAsa,WAC9B4kD,EAAA,CAAa,IAAI50D,CAAJ,CAAW40D,CAAX,CAEb,KAJmC,IAI1BhjE,EAAI,CAJsB,CAInBY,EAAKoiE,CAAAjkE,OAArB,CAAwCiB,CAAxC,CAA4CY,CAA5C,CAAgDZ,CAAA,EAAhD,CAAqD,CACnD,IAAIsD,EAAO0/D,CAAA,CAAWhjE,CAAX,CACXkC,EAAAwgE,aAAA,CAAoBp/D,CAApB,CAA0BY,CAAAkL,YAA1B,CACAlL,EAAA,CAAQZ,CAH2C,CAJlB,CAzH/B,CAoINwgB,SAAUnD,EApIJ,CAqINoD,YAAaxD,EArIP,CAuIN0iD,YAAaA,QAAQ,CAACn/D,CAAD,CAAUwc,CAAV,CAAoB4iD,CAApB,CAA+B,CAC9C5iD,CAAJ,EACElhB,CAAA,CAAQkhB,CAAA1c,MAAA,CAAe,GAAf,CAAR;AAA6B,QAAQ,CAACovB,CAAD,CAAY,CAC/C,IAAImwC,EAAiBD,CACjBtgE,EAAA,CAAYugE,CAAZ,CAAJ,GACEA,CADF,CACmB,CAAC9iD,EAAA,CAAevc,CAAf,CAAwBkvB,CAAxB,CADpB,CAGA,EAACmwC,CAAA,CAAiBxiD,EAAjB,CAAkCJ,EAAnC,EAAsDzc,CAAtD,CAA+DkvB,CAA/D,CAL+C,CAAjD,CAFgD,CAvI9C,CAmJN9wB,OAAQA,QAAQ,CAAC4B,CAAD,CAAU,CAExB,MAAO,CADH5B,CACG,CADM4B,CAAAsa,WACN,GA7oDuB+C,EA6oDvB,GAAUjf,CAAA6G,SAAV,CAA4D7G,CAA5D,CAAqE,IAFpD,CAnJpB,CAwJNklD,KAAMA,QAAQ,CAACtjD,CAAD,CAAU,CACtB,MAAOA,EAAAs/D,mBADe,CAxJlB,CA4JN3/D,KAAMA,QAAQ,CAACK,CAAD,CAAUwc,CAAV,CAAoB,CAChC,MAAIxc,EAAAu/D,qBAAJ,CACSv/D,CAAAu/D,qBAAA,CAA6B/iD,CAA7B,CADT,CAGS,EAJuB,CA5J5B,CAoKN7e,MAAOmd,EApKD,CAsKNzQ,eAAgBA,QAAQ,CAACrK,CAAD,CAAUse,CAAV,CAAiBkhD,CAAjB,CAAkC,CAAA,IAEpDC,CAFoD,CAE1BC,CAF0B,CAGpDjc,EAAYnlC,CAAAxc,KAAZ2hD,EAA0BnlC,CAH0B,CAIpD/C,EAAeC,EAAA,CAAmBxb,CAAnB,CAInB,IAFI0e,CAEJ,EAHIzU,CAGJ,CAHasR,CAGb,EAH6BA,CAAAtR,OAG7B,GAFyBA,CAAA,CAAOw5C,CAAP,CAEzB,CAEEgc,CAmBA,CAnBa,CACXvsB,eAAgBA,QAAQ,EAAG,CAAE,IAAAz0B,iBAAA,CAAwB,CAAA,CAA1B,CADhB,CAEXF,mBAAoBA,QAAQ,EAAG,CAAE,MAAiC,CAAA,CAAjC,GAAO,IAAAE,iBAAT,CAFpB,CAGXK,yBAA0BA,QAAQ,EAAG,CAAE,IAAAF,4BAAA;AAAmC,CAAA,CAArC,CAH1B,CAIXK,8BAA+BA,QAAQ,EAAG,CAAE,MAA4C,CAAA,CAA5C,GAAO,IAAAL,4BAAT,CAJ/B,CAKXI,gBAAiBzgB,CALN,CAMXuD,KAAM2hD,CANK,CAOXjkC,OAAQxf,CAPG,CAmBb,CARIse,CAAAxc,KAQJ,GAPE29D,CAOF,CAPe7hE,CAAA,CAAO6hE,CAAP,CAAmBnhD,CAAnB,CAOf,EAHAqhD,CAGA,CAHepyD,EAAA,CAAYmR,CAAZ,CAGf,CAFAghD,CAEA,CAFcF,CAAA,CAAkB,CAACC,CAAD,CAAAj9D,OAAA,CAAoBg9D,CAApB,CAAlB,CAAyD,CAACC,CAAD,CAEvE,CAAAnkE,CAAA,CAAQqkE,CAAR,CAAsB,QAAQ,CAAC98D,CAAD,CAAK,CAC5B48D,CAAAxgD,8BAAA,EAAL,EACEpc,CAAAG,MAAA,CAAShD,CAAT,CAAkB0/D,CAAlB,CAF+B,CAAnC,CA7BsD,CAtKpD,CAAR,CA0MG,QAAQ,CAAC78D,CAAD,CAAK8D,CAAL,CAAW,CAIpB2D,CAAAsW,UAAA,CAAiBja,CAAjB,CAAA,CAAyB,QAAQ,CAAC4tC,CAAD,CAAOC,CAAP,CAAaorB,CAAb,CAAmB,CAGlD,IAFA,IAAIvjE,CAAJ,CAESH,EAAI,CAFb,CAEgBY,EAAK,IAAA7B,OAArB,CAAkCiB,CAAlC,CAAsCY,CAAtC,CAA0CZ,CAAA,EAA1C,CACM4C,CAAA,CAAYzC,CAAZ,CAAJ,EACEA,CACA,CADQwG,CAAA,CAAG,IAAA,CAAK3G,CAAL,CAAH,CAAYq4C,CAAZ,CAAkBC,CAAlB,CAAwBorB,CAAxB,CACR,CAAI7gE,CAAA,CAAU1C,CAAV,CAAJ,GAEEA,CAFF,CAEUrB,CAAA,CAAOqB,CAAP,CAFV,CAFF,EAOEwe,EAAA,CAAexe,CAAf,CAAsBwG,CAAA,CAAG,IAAA,CAAK3G,CAAL,CAAH,CAAYq4C,CAAZ,CAAkBC,CAAlB,CAAwBorB,CAAxB,CAAtB,CAGJ,OAAO7gE,EAAA,CAAU1C,CAAV,CAAA,CAAmBA,CAAnB,CAA2B,IAdgB,CAkBpDiO,EAAAsW,UAAAje,KAAA,CAAwB2H,CAAAsW,UAAAnX,GACxBa,EAAAsW,UAAAi/C,OAAA,CAA0Bv1D,CAAAsW,UAAA8H,IAvBN,CA1MtB,CAqSArI,GAAAO,UAAA,CAAoB,CAMlBJ,IAAKA,QAAQ,CAAC/kB,CAAD;AAAMY,CAAN,CAAa,CACxB,IAAA,CAAK6jB,EAAA,CAAQzkB,CAAR,CAAa,IAAAa,QAAb,CAAL,CAAA,CAAmCD,CADX,CANR,CAclBuM,IAAKA,QAAQ,CAACnN,CAAD,CAAM,CACjB,MAAO,KAAA,CAAKykB,EAAA,CAAQzkB,CAAR,CAAa,IAAAa,QAAb,CAAL,CADU,CAdD,CAsBlBmuB,OAAQA,QAAQ,CAAChvB,CAAD,CAAM,CACpB,IAAIY,EAAQ,IAAA,CAAKZ,CAAL,CAAWykB,EAAA,CAAQzkB,CAAR,CAAa,IAAAa,QAAb,CAAX,CACZ,QAAO,IAAA,CAAKb,CAAL,CACP,OAAOY,EAHa,CAtBJ,CA6BpB,KAAIgc,GAAoB,CAAC,QAAQ,EAAG,CAClC,IAAAuH,KAAA,CAAY,CAAC,QAAQ,EAAG,CACtB,MAAOS,GADe,CAAZ,CADsB,CAAZ,CAAxB,CAqEIS,GAAY,cArEhB,CAsEIC,GAAU,yBAtEd,CAuEI++C,GAAe,GAvEnB,CAwEIC,GAAS,sBAxEb,CAyEIl/C,GAAiB,kCAzErB,CA0EInV,GAAkBhR,CAAA,CAAO,WAAP,CAo0BtB+M,GAAAyb,WAAA,CA1yBAI,QAAiB,CAACzgB,CAAD,CAAKkE,CAAL,CAAeJ,CAAf,CAAqB,CAAA,IAChCsc,CAIJ,IAAkB,UAAlB,GAAI,MAAOpgB,EAAX,CACE,IAAM,EAAAogB,CAAA,CAAUpgB,CAAAogB,QAAV,CAAN,CAA6B,CAC3BA,CAAA,CAAU,EACV,IAAIpgB,CAAA5H,OAAJ,CAAe,CACb,GAAI8L,CAAJ,CAIE,KAHKhM,EAAA,CAAS4L,CAAT,CAGC,EAHkBA,CAGlB,GAFJA,CAEI,CAFG9D,CAAA8D,KAEH,EAFcqa,EAAA,CAAOne,CAAP,CAEd,EAAA6I,EAAA,CAAgB,UAAhB,CACyE/E,CADzE,CAAN;AAGFq5D,CAAA,CAAUv/C,EAAA,CAAY5d,CAAZ,CACVvH,EAAA,CAAQ0kE,CAAA,CAAQ,CAAR,CAAAlgE,MAAA,CAAiBggE,EAAjB,CAAR,CAAwC,QAAQ,CAACt1D,CAAD,CAAM,CACpDA,CAAA1G,QAAA,CAAYi8D,EAAZ,CAAoB,QAAQ,CAACjiB,CAAD,CAAMmiB,CAAN,CAAkBt5D,CAAlB,CAAwB,CAClDsc,CAAAtiB,KAAA,CAAagG,CAAb,CADkD,CAApD,CADoD,CAAtD,CATa,CAef9D,CAAAogB,QAAA,CAAaA,CAjBc,CAA7B,CADF,IAoBWnoB,EAAA,CAAQ+H,CAAR,CAAJ,EACLk+C,CAEA,CAFOl+C,CAAA5H,OAEP,CAFmB,CAEnB,CADAyP,EAAA,CAAY7H,CAAA,CAAGk+C,CAAH,CAAZ,CAAsB,IAAtB,CACA,CAAA99B,CAAA,CAAUpgB,CAAAhF,MAAA,CAAS,CAAT,CAAYkjD,CAAZ,CAHL,EAKLr2C,EAAA,CAAY7H,CAAZ,CAAgB,IAAhB,CAAsB,CAAA,CAAtB,CAEF,OAAOogB,EAhC6B,CA2jCtC,KAAIi9C,GAAiBxlE,CAAA,CAAO,UAAP,CAArB,CAqDIqZ,GAA0BA,QAAQ,EAAG,CACvC,IAAA6L,KAAA,CAAYrhB,CAD2B,CArDzC,CA2DI0V,GAA6BA,QAAQ,EAAG,CAC1C,IAAIuvC,EAAkB,IAAInjC,EAA1B,CACI8/C,EAAqB,EAEzB,KAAAvgD,KAAA,CAAY,CAAC,iBAAD,CAAoB,YAApB,CACP,QAAQ,CAAC1L,CAAD,CAAoBwC,CAApB,CAAgC,CA4B3C0pD,QAASA,EAAU,CAACr4D,CAAD,CAAOgY,CAAP,CAAgB1jB,CAAhB,CAAuB,CACxC,IAAI2+C,EAAU,CAAA,CACVj7B,EAAJ,GACEA,CAEA,CAFUhlB,CAAA,CAASglB,CAAT,CAAA,CAAoBA,CAAAjgB,MAAA,CAAc,GAAd,CAApB,CACAhF,CAAA,CAAQilB,CAAR,CAAA,CAAmBA,CAAnB,CAA6B,EACvC,CAAAzkB,CAAA,CAAQykB,CAAR,CAAiB,QAAQ,CAACmP,CAAD,CAAY,CAC/BA,CAAJ,GACE8rB,CACA,CADU,CAAA,CACV,CAAAjzC,CAAA,CAAKmnB,CAAL,CAAA,CAAkB7yB,CAFpB,CADmC,CAArC,CAHF,CAUA,OAAO2+C,EAZiC,CAe1CqlB,QAASA,EAAqB,EAAG,CAC/B/kE,CAAA,CAAQ6kE,CAAR,CAA4B,QAAQ,CAACngE,CAAD,CAAU,CAC5C,IAAI+H,EAAOy7C,CAAA56C,IAAA,CAAoB5I,CAApB,CACX,IAAI+H,CAAJ,CAAU,CACR,IAAIu4D,EAAW16C,EAAA,CAAa5lB,CAAAN,KAAA,CAAa,OAAb,CAAb,CAAf,CACIkgC,EAAQ,EADZ,CAEIE,EAAW,EACfxkC,EAAA,CAAQyM,CAAR;AAAc,QAAQ,CAACu8B,CAAD,CAASpV,CAAT,CAAoB,CAEpCoV,CAAJ,GADexkB,CAAE,CAAAwgD,CAAA,CAASpxC,CAAT,CACjB,GACMoV,CAAJ,CACE1E,CADF,GACYA,CAAA3kC,OAAA,CAAe,GAAf,CAAqB,EADjC,EACuCi0B,CADvC,CAGE4Q,CAHF,GAGeA,CAAA7kC,OAAA,CAAkB,GAAlB,CAAwB,EAHvC,EAG6Ci0B,CAJ/C,CAFwC,CAA1C,CAWA5zB,EAAA,CAAQ0E,CAAR,CAAiB,QAAQ,CAACmlB,CAAD,CAAM,CAC7Bya,CAAA,EAAY/iB,EAAA,CAAesI,CAAf,CAAoBya,CAApB,CACZE,EAAA,EAAYrjB,EAAA,CAAkB0I,CAAlB,CAAuB2a,CAAvB,CAFiB,CAA/B,CAIA0jB,EAAA/4B,OAAA,CAAuBzqB,CAAvB,CAnBQ,CAFkC,CAA9C,CAwBAmgE,EAAAllE,OAAA,CAA4B,CAzBG,CA1CjC,MAAO,CACL+yB,QAASzvB,CADJ,CAELkL,GAAIlL,CAFC,CAGLmqB,IAAKnqB,CAHA,CAILgiE,IAAKhiE,CAJA,CAMLoC,KAAMA,QAAQ,CAACX,CAAD,CAAUse,CAAV,CAAiByH,CAAjB,CAA0By6C,CAA1B,CAAwC,CACpDA,CAAA,EAAuBA,CAAA,EAEvBz6C,EAAA,CAAUA,CAAV,EAAqB,EACrBA,EAAA06C,KAAA,EAAuBzgE,CAAA09D,IAAA,CAAY33C,CAAA06C,KAAZ,CACvB16C,EAAA26C,GAAA,EAAuB1gE,CAAA09D,IAAA,CAAY33C,CAAA26C,GAAZ,CAEvB,IAAI36C,CAAA/F,SAAJ,EAAwB+F,CAAA9F,YAAxB,CAgEF,GA/DwCD,CA+DpC,CA/DoC+F,CAAA/F,SA+DpC,CA/DsDC,CA+DtD,CA/DsD8F,CAAA9F,YA+DtD,CALAlY,CAKA,CALOy7C,CAAA56C,IAAA,CA1DoB5I,CA0DpB,CAKP,EALuC,EAKvC,CAHA2gE,CAGA,CAHeP,CAAA,CAAWr4D,CAAX,CAAiB64D,CAAjB,CAAsB,CAAA,CAAtB,CAGf,CAFAC,CAEA,CAFiBT,CAAA,CAAWr4D,CAAX,CAAiB0iB,CAAjB,CAAyB,CAAA,CAAzB,CAEjB,CAAAk2C,CAAA,EAAgBE,CAApB,CAEErd,CAAAhjC,IAAA,CAjE6BxgB,CAiE7B,CAA6B+H,CAA7B,CAGA,CAFAo4D,CAAAx/D,KAAA,CAlE6BX,CAkE7B,CAEA,CAAkC,CAAlC,GAAImgE,CAAAllE,OAAJ,EACEyb,CAAAunB,aAAA,CAAwBoiC,CAAxB,CAlEES,EAAAA,CAAS,IAAI5sD,CAIjB4sD,EAAAC,SAAA,EACA,OAAOD,EAhB6C,CANjD,CADoC,CADjC,CAJ8B,CA3D5C,CAuKIntD,GAAmB,CAAC,UAAD,CAAa,QAAQ,CAACrM,CAAD,CAAW,CACrD,IAAIyE,EAAW,IAEf,KAAAi1D,uBAAA;AAA8B9lE,MAAAoD,OAAA,CAAc,IAAd,CAyC9B,KAAA4jC,SAAA,CAAgBC,QAAQ,CAACx7B,CAAD,CAAO8E,CAAP,CAAgB,CACtC,GAAI9E,CAAJ,EAA+B,GAA/B,GAAYA,CAAApE,OAAA,CAAY,CAAZ,CAAZ,CACE,KAAM29D,GAAA,CAAe,SAAf,CAAmFv5D,CAAnF,CAAN,CAGF,IAAIlL,EAAMkL,CAANlL,CAAa,YACjBsQ,EAAAi1D,uBAAA,CAAgCr6D,CAAAwhB,OAAA,CAAY,CAAZ,CAAhC,CAAA,CAAkD1sB,CAClD6L,EAAAmE,QAAA,CAAiBhQ,CAAjB,CAAsBgQ,CAAtB,CAPsC,CAwBxC,KAAAw1D,gBAAA,CAAuBC,QAAQ,CAAC3+B,CAAD,CAAa,CAC1C,GAAyB,CAAzB,GAAIzkC,SAAA7C,OAAJ,GACE,IAAAkmE,kBADF,CAC4B5+B,CAAD,WAAuBhlC,OAAvB,CAAiCglC,CAAjC,CAA8C,IADzE,GAGwB6+B,4BAChB7hE,KAAA,CAAmB,IAAA4hE,kBAAAtiE,SAAA,EAAnB,CAJR,CAKM,KAAMqhE,GAAA,CAAe,SAAf,CA/OWmB,YA+OX,CAAN,CAKN,MAAO,KAAAF,kBAXmC,CAc5C,KAAAvhD,KAAA,CAAY,CAAC,gBAAD,CAAmB,QAAQ,CAAC5L,CAAD,CAAiB,CACtDstD,QAASA,EAAS,CAACthE,CAAD,CAAUuhE,CAAV,CAAyBC,CAAzB,CAAuC,CAIvD,GAAIA,CAAJ,CAAkB,CAChB,IAAIC,CAlPyB,EAAA,CAAA,CACnC,IAASvlE,CAAT,CAAa,CAAb,CAAgBA,CAAhB,CAiPyCslE,CAjPrBvmE,OAApB,CAAoCiB,CAAA,EAApC,CAAyC,CACvC,IAAIipB;AAgPmCq8C,CAhP7B,CAAQtlE,CAAR,CACV,IAfewlE,CAef,GAAIv8C,CAAAlgB,SAAJ,CAAmC,CACjC,CAAA,CAAOkgB,CAAP,OAAA,CADiC,CAFI,CADN,CAAA,CAAA,IAAA,EAAA,CAmPzBs8C,CAAAA,CAAJ,EAAkBA,CAAAnnD,WAAlB,EAA2CmnD,CAAAE,uBAA3C,GACEH,CADF,CACiB,IADjB,CAFgB,CAMlBA,CAAA,CAAeA,CAAAvC,MAAA,CAAmBj/D,CAAnB,CAAf,CAA6CuhE,CAAAzC,QAAA,CAAsB9+D,CAAtB,CAVU,CAgCzD,MAAO,CA8BLyJ,GAAIuK,CAAAvK,GA9BC,CA6DLif,IAAK1U,CAAA0U,IA7DA,CA+EL63C,IAAKvsD,CAAAusD,IA/EA,CA8GLvyC,QAASha,CAAAga,QA9GJ,CAwHL9E,OAAQA,QAAQ,CAAC43C,CAAD,CAAS,CACvBA,CAAA7O,IAAA,EAAc6O,CAAA7O,IAAA,EADS,CAxHpB,CAoJL2P,MAAOA,QAAQ,CAAC5hE,CAAD,CAAU5B,CAAV,CAAkB6gE,CAAlB,CAAyBl5C,CAAzB,CAAkC,CAC/C3nB,CAAA,CAASA,CAAT,EAAmBpD,CAAA,CAAOoD,CAAP,CACnB6gE,EAAA,CAAQA,CAAR,EAAiBjkE,CAAA,CAAOikE,CAAP,CACjB7gE,EAAA,CAASA,CAAT,EAAmB6gE,CAAA7gE,OAAA,EACnBkjE,EAAA,CAAUthE,CAAV,CAAmB5B,CAAnB,CAA2B6gE,CAA3B,CACA,OAAOjrD,EAAArT,KAAA,CAAoBX,CAApB,CAA6B,OAA7B,CAAsC8lB,EAAA,CAAsBC,CAAtB,CAAtC,CALwC,CApJ5C,CAoLL87C,KAAMA,QAAQ,CAAC7hE,CAAD,CAAU5B,CAAV,CAAkB6gE,CAAlB,CAAyBl5C,CAAzB,CAAkC,CAC9C3nB,CAAA,CAASA,CAAT,EAAmBpD,CAAA,CAAOoD,CAAP,CACnB6gE,EAAA,CAAQA,CAAR,EAAiBjkE,CAAA,CAAOikE,CAAP,CACjB7gE,EAAA,CAASA,CAAT,EAAmB6gE,CAAA7gE,OAAA,EACnBkjE,EAAA,CAAUthE,CAAV,CAAmB5B,CAAnB,CAA2B6gE,CAA3B,CACA,OAAOjrD,EAAArT,KAAA,CAAoBX,CAApB,CAA6B,MAA7B,CAAqC8lB,EAAA,CAAsBC,CAAtB,CAArC,CALuC,CApL3C,CA+ML+7C,MAAOA,QAAQ,CAAC9hE,CAAD,CAAU+lB,CAAV,CAAmB,CAChC,MAAO/R,EAAArT,KAAA,CAAoBX,CAApB,CAA6B,OAA7B,CAAsC8lB,EAAA,CAAsBC,CAAtB,CAAtC,CAAsE,QAAQ,EAAG,CACtF/lB,CAAAyqB,OAAA,EADsF,CAAjF,CADyB,CA/M7B,CA6OLzK,SAAUA,QAAQ,CAAChgB,CAAD;AAAUkvB,CAAV,CAAqBnJ,CAArB,CAA8B,CAC9CA,CAAA,CAAUD,EAAA,CAAsBC,CAAtB,CACVA,EAAA/F,SAAA,CAAmB0F,EAAA,CAAaK,CAAAg8C,SAAb,CAA+B7yC,CAA/B,CACnB,OAAOlb,EAAArT,KAAA,CAAoBX,CAApB,CAA6B,UAA7B,CAAyC+lB,CAAzC,CAHuC,CA7O3C,CA2QL9F,YAAaA,QAAQ,CAACjgB,CAAD,CAAUkvB,CAAV,CAAqBnJ,CAArB,CAA8B,CACjDA,CAAA,CAAUD,EAAA,CAAsBC,CAAtB,CACVA,EAAA9F,YAAA,CAAsByF,EAAA,CAAaK,CAAA9F,YAAb,CAAkCiP,CAAlC,CACtB,OAAOlb,EAAArT,KAAA,CAAoBX,CAApB,CAA6B,aAA7B,CAA4C+lB,CAA5C,CAH0C,CA3Q9C,CA0SL6vC,SAAUA,QAAQ,CAAC51D,CAAD,CAAU4gE,CAAV,CAAen2C,CAAf,CAAuB1E,CAAvB,CAAgC,CAChDA,CAAA,CAAUD,EAAA,CAAsBC,CAAtB,CACVA,EAAA/F,SAAA,CAAmB0F,EAAA,CAAaK,CAAA/F,SAAb,CAA+B4gD,CAA/B,CACnB76C,EAAA9F,YAAA,CAAsByF,EAAA,CAAaK,CAAA9F,YAAb,CAAkCwK,CAAlC,CACtB,OAAOzW,EAAArT,KAAA,CAAoBX,CAApB,CAA6B,UAA7B,CAAyC+lB,CAAzC,CAJyC,CA1S7C,CAyVLi8C,QAASA,QAAQ,CAAChiE,CAAD,CAAUygE,CAAV,CAAgBC,CAAhB,CAAoBxxC,CAApB,CAA+BnJ,CAA/B,CAAwC,CACvDA,CAAA,CAAUD,EAAA,CAAsBC,CAAtB,CACVA,EAAA06C,KAAA,CAAe16C,CAAA06C,KAAA,CAAe7iE,CAAA,CAAOmoB,CAAA06C,KAAP,CAAqBA,CAArB,CAAf,CAA4CA,CAC3D16C,EAAA26C,GAAA,CAAe36C,CAAA26C,GAAA,CAAe9iE,CAAA,CAAOmoB,CAAA26C,GAAP,CAAmBA,CAAnB,CAAf,CAA4CA,CAG3D36C,EAAAk8C,YAAA,CAAsBv8C,EAAA,CAAaK,CAAAk8C,YAAb,CADV/yC,CACU,EADG,mBACH,CACtB,OAAOlb,EAAArT,KAAA,CAAoBX,CAApB,CAA6B,SAA7B,CAAwC+lB,CAAxC,CAPgD,CAzVpD,CAjC+C,CAA5C,CAlFyC,CAAhC,CAvKvB,CAgoBI1R,GAAmCA,QAAQ,EAAG,CAChD,IAAAuL,KAAA;AAAY,CAAC,OAAD,CAAU,QAAQ,CAAC5H,CAAD,CAAQ,CAGpCkqD,QAASA,EAAW,CAACr/D,CAAD,CAAK,CACvBs/D,CAAAxhE,KAAA,CAAekC,CAAf,CACuB,EAAvB,CAAIs/D,CAAAlnE,OAAJ,EACA+c,CAAA,CAAM,QAAQ,EAAG,CACf,IAAS,IAAA9b,EAAI,CAAb,CAAgBA,CAAhB,CAAoBimE,CAAAlnE,OAApB,CAAsCiB,CAAA,EAAtC,CACEimE,CAAA,CAAUjmE,CAAV,CAAA,EAEFimE,EAAA,CAAY,EAJG,CAAjB,CAHuB,CAFzB,IAAIA,EAAY,EAahB,OAAO,SAAQ,EAAG,CAChB,IAAIC,EAAS,CAAA,CACbF,EAAA,CAAY,QAAQ,EAAG,CACrBE,CAAA,CAAS,CAAA,CADY,CAAvB,CAGA,OAAO,SAAQ,CAACz6C,CAAD,CAAW,CACxBy6C,CAAA,CAASz6C,CAAA,EAAT,CAAsBu6C,CAAA,CAAYv6C,CAAZ,CADE,CALV,CAdkB,CAA1B,CADoC,CAhoBlD,CA2pBIxT,GAAiCA,QAAQ,EAAG,CAC9C,IAAAyL,KAAA,CAAY,CAAC,IAAD,CAAO,UAAP,CAAmB,mBAAnB,CAAwC,WAAxC,CAAqD,UAArD,CACP,QAAQ,CAAChJ,CAAD,CAAOQ,CAAP,CAAmBhD,CAAnB,CAAwCQ,CAAxC,CAAqDgD,CAArD,CAA+D,CA0C1EyqD,QAASA,EAAa,CAAC/kD,CAAD,CAAO,CAC3B,IAAAglD,QAAA,CAAahlD,CAAb,CAEA,KAAIilD,EAAUnuD,CAAA,EAKd,KAAAouD,eAAA,CAAsB,EACtB,KAAAC,MAAA,CAAaC,QAAQ,CAAC7/D,CAAD,CAAK,CACxB,IAAI8/D,EAAM/tD,CAAA,CAAU,CAAV,CAIN+tD,EAAJ,EAAWA,CAAAC,OAAX,CATAhrD,CAAA,CAUc/U,CAVd,CAAa,CAAb,CAAgB,CAAA,CAAhB,CASA,CAGE0/D,CAAA,CAAQ1/D,CAAR,CARsB,CAW1B,KAAAggE,OAAA,CAAc,CApBa,CApC7BR,CAAAS,MAAA,CAAsBC,QAAQ,CAACD,CAAD,CAAQn7C,CAAR,CAAkB,CAI9C27B,QAASA,EAAI,EAAG,CACd,GAAIljD,CAAJ,GAAc0iE,CAAA7nE,OAAd,CACE0sB,CAAA,CAAS,CAAA,CAAT,CADF;IAKAm7C,EAAA,CAAM1iE,CAAN,CAAA,CAAa,QAAQ,CAAC+lC,CAAD,CAAW,CACb,CAAA,CAAjB,GAAIA,CAAJ,CACExe,CAAA,CAAS,CAAA,CAAT,CADF,EAIAvnB,CAAA,EACA,CAAAkjD,CAAA,EALA,CAD8B,CAAhC,CANc,CAHhB,IAAIljD,EAAQ,CAEZkjD,EAAA,EAH8C,CAqBhD+e,EAAAvkB,IAAA,CAAoBklB,QAAQ,CAACC,CAAD,CAAUt7C,CAAV,CAAoB,CAO9Cu7C,QAASA,EAAU,CAAC/8B,CAAD,CAAW,CAC5B7B,CAAA,CAASA,CAAT,EAAmB6B,CACf,GAAEyH,CAAN,GAAgBq1B,CAAAhoE,OAAhB,EACE0sB,CAAA,CAAS2c,CAAT,CAH0B,CAN9B,IAAIsJ,EAAQ,CAAZ,CACItJ,EAAS,CAAA,CACbhpC,EAAA,CAAQ2nE,CAAR,CAAiB,QAAQ,CAACnC,CAAD,CAAS,CAChCA,CAAA54B,KAAA,CAAYg7B,CAAZ,CADgC,CAAlC,CAH8C,CAsChDb,EAAAzhD,UAAA,CAA0B,CACxB0hD,QAASA,QAAQ,CAAChlD,CAAD,CAAO,CACtB,IAAAA,KAAA,CAAYA,CAAZ,EAAoB,EADE,CADA,CAKxB4qB,KAAMA,QAAQ,CAACrlC,CAAD,CAAK,CAlEKsgE,CAmEtB,GAAI,IAAAN,OAAJ,CACEhgE,CAAA,EADF,CAGE,IAAA2/D,eAAA7hE,KAAA,CAAyBkC,CAAzB,CAJe,CALK,CAaxBw6C,SAAU9+C,CAbc,CAexB6kE,WAAYA,QAAQ,EAAG,CACrB,GAAKz9B,CAAA,IAAAA,QAAL,CAAmB,CACjB,IAAI/iC,EAAO,IACX,KAAA+iC,QAAA,CAAe/uB,CAAA,CAAG,QAAQ,CAAC4xB,CAAD,CAAUnC,CAAV,CAAkB,CAC1CzjC,CAAAslC,KAAA,CAAU,QAAQ,CAAC5D,CAAD,CAAS,CACd,CAAA,CAAX,GAAAA,CAAA,CAAmB+B,CAAA,EAAnB,CAA8BmC,CAAA,EADL,CAA3B,CAD0C,CAA7B,CAFE,CAQnB,MAAO,KAAA7C,QATc,CAfC,CA2BxB1K,KAAMA,QAAQ,CAACooC,CAAD,CAAiBC,CAAjB,CAAgC,CAC5C,MAAO,KAAAF,WAAA,EAAAnoC,KAAA,CAAuBooC,CAAvB,CAAuCC,CAAvC,CADqC,CA3BtB,CA+BxB,QAASxmB,QAAQ,CAACx9B,CAAD,CAAU,CACzB,MAAO,KAAA8jD,WAAA,EAAA,CAAkB,OAAlB,CAAA,CAA2B9jD,CAA3B,CADkB,CA/BH;AAmCxB,UAAWy9B,QAAQ,CAACz9B,CAAD,CAAU,CAC3B,MAAO,KAAA8jD,WAAA,EAAA,CAAkB,SAAlB,CAAA,CAA6B9jD,CAA7B,CADoB,CAnCL,CAuCxBikD,MAAOA,QAAQ,EAAG,CACZ,IAAAjmD,KAAAimD,MAAJ,EACE,IAAAjmD,KAAAimD,MAAA,EAFc,CAvCM,CA6CxBC,OAAQA,QAAQ,EAAG,CACb,IAAAlmD,KAAAkmD,OAAJ,EACE,IAAAlmD,KAAAkmD,OAAA,EAFe,CA7CK,CAmDxBvR,IAAKA,QAAQ,EAAG,CACV,IAAA30C,KAAA20C,IAAJ,EACE,IAAA30C,KAAA20C,IAAA,EAEF,KAAAwR,SAAA,CAAc,CAAA,CAAd,CAJc,CAnDQ,CA0DxBv6C,OAAQA,QAAQ,EAAG,CACb,IAAA5L,KAAA4L,OAAJ,EACE,IAAA5L,KAAA4L,OAAA,EAEF,KAAAu6C,SAAA,CAAc,CAAA,CAAd,CAJiB,CA1DK,CAiExB1C,SAAUA,QAAQ,CAAC56B,CAAD,CAAW,CAC3B,IAAIvjC,EAAO,IAjIK8gE,EAkIhB,GAAI9gE,CAAAigE,OAAJ,GACEjgE,CAAAigE,OACA,CAnImBc,CAmInB,CAAA/gE,CAAA6/D,MAAA,CAAW,QAAQ,EAAG,CACpB7/D,CAAA6gE,SAAA,CAAct9B,CAAd,CADoB,CAAtB,CAFF,CAF2B,CAjEL,CA2ExBs9B,SAAUA,QAAQ,CAACt9B,CAAD,CAAW,CAxILg9B,CAyItB,GAAI,IAAAN,OAAJ,GACEvnE,CAAA,CAAQ,IAAAknE,eAAR,CAA6B,QAAQ,CAAC3/D,CAAD,CAAK,CACxCA,CAAA,CAAGsjC,CAAH,CADwC,CAA1C,CAIA,CADA,IAAAq8B,eAAAvnE,OACA;AAD6B,CAC7B,CAAA,IAAA4nE,OAAA,CA9IoBM,CAyItB,CAD2B,CA3EL,CAsF1B,OAAOd,EAvJmE,CADhE,CADkC,CA3pBhD,CAm0BIxuD,GAA0BA,QAAQ,EAAG,CACvC,IAAA+L,KAAA,CAAY,CAAC,OAAD,CAAU,IAAV,CAAgB,iBAAhB,CAAmC,QAAQ,CAAC5H,CAAD,CAAQpB,CAAR,CAAY1C,CAAZ,CAA6B,CAElF,MAAO,SAAQ,CAAClU,CAAD,CAAU4jE,CAAV,CAA0B,CA6BvCv2D,QAASA,EAAG,EAAG,CACb2K,CAAA,CAAM,QAAQ,EAAG,CAWb+N,CAAA/F,SAAJ,GACEhgB,CAAAggB,SAAA,CAAiB+F,CAAA/F,SAAjB,CACA,CAAA+F,CAAA/F,SAAA,CAAmB,IAFrB,CAII+F,EAAA9F,YAAJ,GACEjgB,CAAAigB,YAAA,CAAoB8F,CAAA9F,YAApB,CACA,CAAA8F,CAAA9F,YAAA,CAAsB,IAFxB,CAII8F,EAAA26C,GAAJ,GACE1gE,CAAA09D,IAAA,CAAY33C,CAAA26C,GAAZ,CACA,CAAA36C,CAAA26C,GAAA,CAAa,IAFf,CAjBOmD,EAAL,EACE/C,CAAAC,SAAA,EAEF8C,EAAA,CAAS,CAAA,CALM,CAAjB,CAOA,OAAO/C,EARM,CAxBf,IAAI/6C,EAAU69C,CAAV79C,EAA4B,EAC3BA,EAAA+9C,WAAL,GACE/9C,CADF,CACYxlB,EAAA,CAAKwlB,CAAL,CADZ,CAOIA,EAAAg+C,cAAJ,GACEh+C,CAAA06C,KADF,CACiB16C,CAAA26C,GADjB,CAC8B,IAD9B,CAII36C,EAAA06C,KAAJ,GACEzgE,CAAA09D,IAAA,CAAY33C,CAAA06C,KAAZ,CACA,CAAA16C,CAAA06C,KAAA,CAAe,IAFjB,CAjBuC,KAuBnCoD,CAvBmC,CAuB3B/C,EAAS,IAAI5sD,CACzB,OAAO,CACL8vD,MAAO32D,CADF,CAEL4kD,IAAK5kD,CAFA,CAxBgC,CAFyC,CAAxE,CAD2B,CAn0BzC,CA6iFIme,GAAiB9wB,CAAA,CAAO,UAAP,CA7iFrB,CAgjFIkkC,GAAuB,IAD3BqlC,QAA4B,EAAG,EAS/Bh2D;EAAAgV,QAAA,CAA2B,CAAC,UAAD,CAAa,uBAAb,CAm6E3Bmb,GAAAxd,UAAAsjD,cAAA,CAAuCC,QAAQ,EAAG,CAAE,MAAO,KAAAnmC,cAAP,GAA8BY,EAAhC,CAGlD,KAAI1L,GAAgB,uBAApB,CAsGIuP,GAAoB/nC,CAAA,CAAO,aAAP,CAtGxB,CAyGIqnC,GAAY,4BAzGhB,CA4WI5sB,GAAwBA,QAAQ,EAAG,CACrC,IAAAyK,KAAA,CAAY,CAAC,WAAD,CAAc,QAAQ,CAAChL,CAAD,CAAY,CAC5C,MAAO,SAAQ,CAAC6a,CAAD,CAAU,CASnBA,CAAJ,CACOxqB,CAAAwqB,CAAAxqB,SADP,EAC2BwqB,CAD3B,WAC8Cz0B,EAD9C,GAEIy0B,CAFJ,CAEcA,CAAA,CAAQ,CAAR,CAFd,EAKEA,CALF,CAKY7a,CAAA,CAAU,CAAV,CAAAq1B,KAEZ,OAAOxa,EAAA20C,YAAP,CAA6B,CAhBN,CADmB,CAAlC,CADyB,CA5WvC,CAmYIC,GAAmB,kBAnYvB,CAoYIx/B,GAAgC,CAAC,eAAgBw/B,EAAhB,CAAmC,gBAApC,CApYpC,CAqYIxgC,GAAa,eArYjB,CAsYIC,GAAY,CACd,IAAK,IADS,CAEd,IAAK,IAFS,CAtYhB,CA0YIJ,GAAyB,cA1Y7B,CA2YI4gC,GAAc5pE,CAAA,CAAO,OAAP,CA3YlB,CA4YIitC,GAAsBA,QAAQ,CAAC37B,CAAD,CAAS,CACzC,MAAO,SAAQ,EAAG,CAChB,KAAMs4D,GAAA,CAAY,QAAZ;AAAkGt4D,CAAlG,CAAN,CADgB,CADuB,CA5Y3C,CAg7DIugC,GAAqBrkC,EAAAqkC,mBAArBA,CAAkD7xC,CAAA,CAAO,cAAP,CACtD6xC,GAAAW,cAAA,CAAmCq3B,QAAQ,CAACxoC,CAAD,CAAO,CAChD,KAAMwQ,GAAA,CAAmB,UAAnB,CAGsDxQ,CAHtD,CAAN,CADgD,CAOlDwQ,GAAAC,OAAA,CAA4Bg4B,QAAQ,CAACzoC,CAAD,CAAOlZ,CAAP,CAAY,CAC9C,MAAO0pB,GAAA,CAAmB,QAAnB,CAA4DxQ,CAA5D,CAAkElZ,CAAAhkB,SAAA,EAAlE,CADuC,CA4lBhD,KAAIsX,GAA0BA,QAAQ,EAAG,CACvC,IAAAyJ,KAAA,CAAY,CAAC,SAAD,CAAY,QAAQ,CAAC9H,CAAD,CAAU,CAIxC2yB,QAASA,EAAc,CAACg6B,CAAD,CAAa,CAClC,IAAI98C,EAAWA,QAAQ,CAAC5f,CAAD,CAAO,CAC5B4f,CAAA5f,KAAA,CAAgBA,CAChB4f,EAAA+8C,OAAA,CAAkB,CAAA,CAFU,CAI9B/8C,EAAAwC,GAAA,CAAcs6C,CACd,OAAO98C,EAN2B,CAHpC,IAAIiiB,EAAY9xB,CAAA5P,QAAA0hC,UAAhB,CACI+6B,EAAc,EAWlB,OAAO,CAULl6B,eAAgBA,QAAQ,CAAC3jB,CAAD,CAAM,CACxB29C,CAAAA,CAAa,GAAbA,CAAmB5lE,CAAC+qC,CAAAj8B,UAAA,EAAD9O,UAAA,CAAiC,EAAjC,CACvB,KAAIkrC,EAAe,oBAAfA,CAAsC06B,CAA1C,CACI98C,EAAW8iB,CAAA,CAAeg6B,CAAf,CACfE,EAAA,CAAY56B,CAAZ,CAAA,CAA4BH,CAAA,CAAU66B,CAAV,CAA5B,CAAoD98C,CACpD,OAAOoiB,EALqB,CAVzB,CA0BLG,UAAWA,QAAQ,CAACH,CAAD,CAAe,CAChC,MAAO46B,EAAA,CAAY56B,CAAZ,CAAA26B,OADyB,CA1B7B,CAsCLh6B,YAAaA,QAAQ,CAACX,CAAD,CAAe,CAClC,MAAO46B,EAAA,CAAY56B,CAAZ,CAAAhiC,KAD2B,CAtC/B;AAiDL4iC,eAAgBA,QAAQ,CAACZ,CAAD,CAAe,CAErC,OAAOH,CAAA,CADQ+6B,CAAAh9C,CAAYoiB,CAAZpiB,CACEwC,GAAV,CACP,QAAOw6C,CAAA,CAAY56B,CAAZ,CAH8B,CAjDlC,CAbiC,CAA9B,CAD2B,CAAzC,CAmFI66B,GAAa,iCAnFjB,CAoFIz1B,GAAgB,CAAC,KAAQ,EAAT,CAAa,MAAS,GAAtB,CAA2B,IAAO,EAAlC,CApFpB,CAqFIqB,GAAkB91C,CAAA,CAAO,WAAP,CArFtB,CAyZImqE,GAAoB,CAMtBj0B,SAAS,EANa,CAYtBR,QAAS,CAAA,CAZa,CAkBtBqD,UAAW,CAAA,CAlBW,CAuCtBjB,OAAQd,EAAA,CAAe,UAAf,CAvCc,CA8DtB5qB,IAAKA,QAAQ,CAACA,CAAD,CAAM,CACjB,GAAIhoB,CAAA,CAAYgoB,CAAZ,CAAJ,CACE,MAAO,KAAA6pB,MAGT,KAAI/uC,EAAQgjE,EAAAnrD,KAAA,CAAgBqN,CAAhB,CACZ,EAAIllB,CAAA,CAAM,CAAN,CAAJ,EAAwB,EAAxB,GAAgBklB,CAAhB,GAA4B,IAAAhc,KAAA,CAAU1F,kBAAA,CAAmBxD,CAAA,CAAM,CAAN,CAAnB,CAAV,CAC5B,EAAIA,CAAA,CAAM,CAAN,CAAJ,EAAgBA,CAAA,CAAM,CAAN,CAAhB,EAAoC,EAApC,GAA4BklB,CAA5B,GAAwC,IAAA4oB,OAAA,CAAY9tC,CAAA,CAAM,CAAN,CAAZ,EAAwB,EAAxB,CACxC,KAAAsjB,KAAA,CAAUtjB,CAAA,CAAM,CAAN,CAAV,EAAsB,EAAtB,CAEA,OAAO,KAVU,CA9DG,CA6FtBspC,SAAUwG,EAAA,CAAe,YAAf,CA7FY,CAyHtBp0B,KAAMo0B,EAAA,CAAe,QAAf,CAzHgB,CA6ItBxC,KAAMwC,EAAA,CAAe,QAAf,CA7IgB,CAuKtB5mC,KAAM6mC,EAAA,CAAqB,QAArB,CAA+B,QAAQ,CAAC7mC,CAAD,CAAO,CAClDA,CAAA,CAAgB,IAAT,GAAAA,CAAA,CAAgBA,CAAAjM,SAAA,EAAhB;AAAkC,EACzC,OAAyB,GAAlB,EAAAiM,CAAAvI,OAAA,CAAY,CAAZ,CAAA,CAAwBuI,CAAxB,CAA+B,GAA/B,CAAqCA,CAFM,CAA9C,CAvKgB,CAyNtB4kC,OAAQA,QAAQ,CAACA,CAAD,CAASo1B,CAAT,CAAqB,CACnC,OAAQhnE,SAAA7C,OAAR,EACE,KAAK,CAAL,CACE,MAAO,KAAAw0C,SACT,MAAK,CAAL,CACE,GAAI10C,CAAA,CAAS20C,CAAT,CAAJ,EAAwBv0C,CAAA,CAASu0C,CAAT,CAAxB,CACEA,CACA,CADSA,CAAA7wC,SAAA,EACT,CAAA,IAAA4wC,SAAA,CAAgBpqC,EAAA,CAAcqqC,CAAd,CAFlB,KAGO,IAAI3yC,CAAA,CAAS2yC,CAAT,CAAJ,CACLA,CAMA,CANSnvC,EAAA,CAAKmvC,CAAL,CAAa,EAAb,CAMT,CAJAp0C,CAAA,CAAQo0C,CAAR,CAAgB,QAAQ,CAACrzC,CAAD,CAAQZ,CAAR,CAAa,CACtB,IAAb,EAAIY,CAAJ,EAAmB,OAAOqzC,CAAA,CAAOj0C,CAAP,CADS,CAArC,CAIA,CAAA,IAAAg0C,SAAA,CAAgBC,CAPX,KASL,MAAMc,GAAA,CAAgB,UAAhB,CAAN,CAGF,KACF,SACM1xC,CAAA,CAAYgmE,CAAZ,CAAJ,EAA8C,IAA9C,GAA+BA,CAA/B,CACE,OAAO,IAAAr1B,SAAA,CAAcC,CAAd,CADT,CAGE,IAAAD,SAAA,CAAcC,CAAd,CAHF,CAG0Bo1B,CAxB9B,CA4BA,IAAAr0B,UAAA,EACA,OAAO,KA9B4B,CAzNf,CA+QtBvrB,KAAMysB,EAAA,CAAqB,QAArB,CAA+B,QAAQ,CAACzsB,CAAD,CAAO,CAClD,MAAgB,KAAT,GAAAA,CAAA,CAAgBA,CAAArmB,SAAA,EAAhB,CAAkC,EADS,CAA9C,CA/QgB,CA2RtBiF,QAASA,QAAQ,EAAG,CAClB,IAAA2vC,UAAA,CAAiB,CAAA,CACjB,OAAO,KAFW,CA3RE,CAiSxBn4C,EAAA,CAAQ,CAACm2C,EAAD,CAA6BN,EAA7B,CAAkDnB,EAAlD,CAAR;AAA6E,QAAQ,CAAC+0B,CAAD,CAAW,CAC9FA,CAAAnkD,UAAA,CAAqB1lB,MAAAoD,OAAA,CAAcumE,EAAd,CAqBrBE,EAAAnkD,UAAAkH,MAAA,CAA2Bk9C,QAAQ,CAACl9C,CAAD,CAAQ,CACzC,GAAK7sB,CAAA6C,SAAA7C,OAAL,CACE,MAAO,KAAAo3C,QAGT,IAAI0yB,CAAJ,GAAiB/0B,EAAjB,EAAsCI,CAAA,IAAAA,QAAtC,CACE,KAAMI,GAAA,CAAgB,SAAhB,CAAN,CAMF,IAAA6B,QAAA,CAAevzC,CAAA,CAAYgpB,CAAZ,CAAA,CAAqB,IAArB,CAA4BA,CAE3C,OAAO,KAdkC,CAtBmD,CAAhG,CA8iBA,KAAI8sB,EAAel6C,CAAA,CAAO,QAAP,CAAnB,CAkFIu6C,GAAOt0B,QAAAC,UAAAhlB,KAlFX,CAmFIs5C,GAAQv0B,QAAAC,UAAA5d,MAnFZ,CAoFImyC,GAAOx0B,QAAAC,UAAAje,KApFX,CA8GIsiE,GAAY3iE,CAAA,EAChBhH,EAAA,CAAQ,+CAAA,MAAA,CAAA,GAAA,CAAR,CAAoE,QAAQ,CAACq8C,CAAD,CAAW,CAAEstB,EAAA,CAAUttB,CAAV,CAAA,CAAsB,CAAA,CAAxB,CAAvF,CACA,KAAIutB,GAAS,CAAC,EAAI,IAAL,CAAW,EAAI,IAAf,CAAqB,EAAI,IAAzB,CAA+B,EAAI,IAAnC,CAAyC,EAAI,IAA7C,CAAmD,IAAI,GAAvD,CAA4D,IAAI,GAAhE,CAAb,CASIxrB,GAAQA,QAAQ,CAAC3zB,CAAD,CAAU,CAC5B,IAAAA,QAAA,CAAeA,CADa,CAI9B2zB,GAAA94B,UAAA,CAAkB,CAChBzf,YAAau4C,EADG;AAGhByrB,IAAKA,QAAQ,CAACppC,CAAD,CAAO,CAClB,IAAAA,KAAA,CAAYA,CACZ,KAAA37B,MAAA,CAAa,CAGb,KAFA,IAAAglE,OAEA,CAFc,EAEd,CAAO,IAAAhlE,MAAP,CAAoB,IAAA27B,KAAA9gC,OAApB,CAAA,CAEE,GADI0wC,CACA,CADK,IAAA5P,KAAAx5B,OAAA,CAAiB,IAAAnC,MAAjB,CACL,CAAO,GAAP,GAAAurC,CAAA,EAAqB,GAArB,GAAcA,CAAlB,CACE,IAAA05B,WAAA,CAAgB15B,CAAhB,CADF,KAEO,IAAI,IAAAxwC,SAAA,CAAcwwC,CAAd,CAAJ,EAAgC,GAAhC,GAAyBA,CAAzB,EAAuC,IAAAxwC,SAAA,CAAc,IAAAmqE,KAAA,EAAd,CAAvC,CACL,IAAAC,WAAA,EADK,KAEA,IAAI,IAAA3pB,kBAAA,CAAuB,IAAA4pB,cAAA,EAAvB,CAAJ,CACL,IAAAC,UAAA,EADK,KAEA,IAAI,IAAAC,GAAA,CAAQ/5B,CAAR,CAAY,aAAZ,CAAJ,CACL,IAAAy5B,OAAAzkE,KAAA,CAAiB,CAACP,MAAO,IAAAA,MAAR,CAAoB27B,KAAM4P,CAA1B,CAAjB,CACA,CAAA,IAAAvrC,MAAA,EAFK,KAGA,IAAI,IAAAulE,aAAA,CAAkBh6B,CAAlB,CAAJ,CACL,IAAAvrC,MAAA,EADK,KAEA,CACL,IAAIwlE,EAAMj6B,CAANi6B,CAAW,IAAAN,KAAA,EAAf,CACIO,EAAMD,CAANC,CAAY,IAAAP,KAAA,CAAU,CAAV,CADhB,CAGIQ,EAAMb,EAAA,CAAUW,CAAV,CAHV,CAIIG,EAAMd,EAAA,CAAUY,CAAV,CAFAZ,GAAAe,CAAUr6B,CAAVq6B,CAGV;AAAWF,CAAX,EAAkBC,CAAlB,EACMnkC,CAEJ,CAFYmkC,CAAA,CAAMF,CAAN,CAAaC,CAAA,CAAMF,CAAN,CAAYj6B,CAErC,CADA,IAAAy5B,OAAAzkE,KAAA,CAAiB,CAACP,MAAO,IAAAA,MAAR,CAAoB27B,KAAM6F,CAA1B,CAAiC+V,SAAU,CAAA,CAA3C,CAAjB,CACA,CAAA,IAAAv3C,MAAA,EAAcwhC,CAAA3mC,OAHhB,EAKE,IAAAgrE,WAAA,CAAgB,4BAAhB,CAA8C,IAAA7lE,MAA9C,CAA0D,IAAAA,MAA1D,CAAuE,CAAvE,CAXG,CAeT,MAAO,KAAAglE,OAjCW,CAHJ,CAuChBM,GAAIA,QAAQ,CAAC/5B,CAAD,CAAKu6B,CAAL,CAAY,CACtB,MAA8B,EAA9B,GAAOA,CAAA7lE,QAAA,CAAcsrC,CAAd,CADe,CAvCR,CA2ChB25B,KAAMA,QAAQ,CAACppE,CAAD,CAAI,CACZkzD,CAAAA,CAAMlzD,CAANkzD,EAAW,CACf,OAAQ,KAAAhvD,MAAD,CAAcgvD,CAAd,CAAoB,IAAArzB,KAAA9gC,OAApB,CAAwC,IAAA8gC,KAAAx5B,OAAA,CAAiB,IAAAnC,MAAjB,CAA8BgvD,CAA9B,CAAxC,CAA6E,CAAA,CAFpE,CA3CF,CAgDhBj0D,SAAUA,QAAQ,CAACwwC,CAAD,CAAK,CACrB,MAAQ,GAAR,EAAeA,CAAf,EAA2B,GAA3B,EAAqBA,CAArB,EAAiD,QAAjD,GAAmC,MAAOA,EADrB,CAhDP,CAoDhBg6B,aAAcA,QAAQ,CAACh6B,CAAD,CAAK,CAEzB,MAAe,GAAf,GAAQA,CAAR,EAA6B,IAA7B,GAAsBA,CAAtB,EAA4C,IAA5C,GAAqCA,CAArC,EACe,IADf,GACQA,CADR,EAC8B,IAD9B,GACuBA,CADvB,EAC6C,QAD7C,GACsCA,CAHb,CApDX,CA0DhBiQ,kBAAmBA,QAAQ,CAACjQ,CAAD,CAAK,CAC9B,MAAO,KAAA5lB,QAAA61B,kBAAA;AACH,IAAA71B,QAAA61B,kBAAA,CAA+BjQ,CAA/B,CAAmC,IAAAw6B,YAAA,CAAiBx6B,CAAjB,CAAnC,CADG,CAEH,IAAAy6B,uBAAA,CAA4Bz6B,CAA5B,CAH0B,CA1DhB,CAgEhBy6B,uBAAwBA,QAAQ,CAACz6B,CAAD,CAAK,CACnC,MAAQ,GAAR,EAAeA,CAAf,EAA2B,GAA3B,EAAqBA,CAArB,EACQ,GADR,EACeA,CADf,EAC2B,GAD3B,EACqBA,CADrB,EAEQ,GAFR,GAEgBA,CAFhB,EAE6B,GAF7B,GAEsBA,CAHa,CAhErB,CAsEhBkQ,qBAAsBA,QAAQ,CAAClQ,CAAD,CAAK,CACjC,MAAO,KAAA5lB,QAAA81B,qBAAA,CACH,IAAA91B,QAAA81B,qBAAA,CAAkClQ,CAAlC,CAAsC,IAAAw6B,YAAA,CAAiBx6B,CAAjB,CAAtC,CADG,CAEH,IAAA06B,0BAAA,CAA+B16B,CAA/B,CAH6B,CAtEnB,CA4EhB06B,0BAA2BA,QAAQ,CAAC16B,CAAD,CAAK26B,CAAL,CAAS,CAC1C,MAAO,KAAAF,uBAAA,CAA4Bz6B,CAA5B,CAAgC26B,CAAhC,CAAP,EAA8C,IAAAnrE,SAAA,CAAcwwC,CAAd,CADJ,CA5E5B,CAgFhBw6B,YAAaA,QAAQ,CAACx6B,CAAD,CAAK,CACxB,MAAkB,EAAlB,GAAIA,CAAA1wC,OAAJ,CAA4B0wC,CAAA46B,WAAA,CAAc,CAAd,CAA5B;CAEQ56B,CAAA46B,WAAA,CAAc,CAAd,CAFR,EAE4B,EAF5B,EAEkC56B,CAAA46B,WAAA,CAAc,CAAd,CAFlC,CAEqD,QAH7B,CAhFV,CAuFhBf,cAAeA,QAAQ,EAAG,CACxB,IAAI75B,EAAK,IAAA5P,KAAAx5B,OAAA,CAAiB,IAAAnC,MAAjB,CAAT,CACIklE,EAAO,IAAAA,KAAA,EACX,IAAKA,CAAAA,CAAL,CACE,MAAO35B,EAET,KAAI66B,EAAM76B,CAAA46B,WAAA,CAAc,CAAd,CAAV,CACIE,EAAMnB,CAAAiB,WAAA,CAAgB,CAAhB,CACV,OAAW,MAAX,EAAIC,CAAJ,EAA4B,KAA5B,EAAqBA,CAArB,EAA6C,KAA7C,EAAsCC,CAAtC,EAA8D,KAA9D,EAAuDA,CAAvD,CACS96B,CADT,CACc25B,CADd,CAGO35B,CAXiB,CAvFV,CAqGhB+6B,cAAeA,QAAQ,CAAC/6B,CAAD,CAAK,CAC1B,MAAe,GAAf,GAAQA,CAAR,EAA6B,GAA7B,GAAsBA,CAAtB,EAAoC,IAAAxwC,SAAA,CAAcwwC,CAAd,CADV,CArGZ,CAyGhBs6B,WAAYA,QAAQ,CAAC5/C,CAAD,CAAQ29C,CAAR,CAAe/R,CAAf,CAAoB,CACtCA,CAAA,CAAMA,CAAN,EAAa,IAAA7xD,MACTumE,EAAAA,CAAU5nE,CAAA,CAAUilE,CAAV,CAAA,CACJ,IADI,CACGA,CADH,CACY,GADZ,CACkB,IAAA5jE,MADlB,CAC+B,IAD/B,CACsC,IAAA27B,KAAAv2B,UAAA,CAAoBw+D,CAApB,CAA2B/R,CAA3B,CADtC,CACwE,GADxE,CAEJ,GAFI,CAEEA,CAChB,MAAMrd,EAAA,CAAa,QAAb,CACFvuB,CADE,CACKsgD,CADL,CACa,IAAA5qC,KADb,CAAN,CALsC,CAzGxB,CAkHhBwpC,WAAYA,QAAQ,EAAG,CAGrB,IAFA,IAAIvY,EAAS,EAAb,CACIgX,EAAQ,IAAA5jE,MACZ,CAAO,IAAAA,MAAP;AAAoB,IAAA27B,KAAA9gC,OAApB,CAAA,CAAsC,CACpC,IAAI0wC,EAAK1rC,CAAA,CAAU,IAAA87B,KAAAx5B,OAAA,CAAiB,IAAAnC,MAAjB,CAAV,CACT,IAAU,GAAV,EAAIurC,CAAJ,EAAiB,IAAAxwC,SAAA,CAAcwwC,CAAd,CAAjB,CACEqhB,CAAA,EAAUrhB,CADZ,KAEO,CACL,IAAIi7B,EAAS,IAAAtB,KAAA,EACb,IAAU,GAAV,EAAI35B,CAAJ,EAAiB,IAAA+6B,cAAA,CAAmBE,CAAnB,CAAjB,CACE5Z,CAAA,EAAUrhB,CADZ,KAEO,IAAI,IAAA+6B,cAAA,CAAmB/6B,CAAnB,CAAJ,EACHi7B,CADG,EACO,IAAAzrE,SAAA,CAAcyrE,CAAd,CADP,EAEiC,GAFjC,EAEH5Z,CAAAzqD,OAAA,CAAcyqD,CAAA/xD,OAAd,CAA8B,CAA9B,CAFG,CAGL+xD,CAAA,EAAUrhB,CAHL,KAIA,IAAI,CAAA,IAAA+6B,cAAA,CAAmB/6B,CAAnB,CAAJ,EACDi7B,CADC,EACU,IAAAzrE,SAAA,CAAcyrE,CAAd,CADV,EAEiC,GAFjC,EAEH5Z,CAAAzqD,OAAA,CAAcyqD,CAAA/xD,OAAd,CAA8B,CAA9B,CAFG,CAKL,KALK,KAGL,KAAAgrE,WAAA,CAAgB,kBAAhB,CAXG,CAgBP,IAAA7lE,MAAA,EApBoC,CAsBtC,IAAAglE,OAAAzkE,KAAA,CAAiB,CACfP,MAAO4jE,CADQ,CAEfjoC,KAAMixB,CAFS,CAGfjgD,SAAU,CAAA,CAHK,CAIf1Q,MAAOguB,MAAA,CAAO2iC,CAAP,CAJQ,CAAjB,CAzBqB,CAlHP,CAmJhByY,UAAWA,QAAQ,EAAG,CACpB,IAAIzB,EAAQ,IAAA5jE,MAEZ,KADA,IAAAA,MACA,EADc,IAAAolE,cAAA,EAAAvqE,OACd,CAAO,IAAAmF,MAAP;AAAoB,IAAA27B,KAAA9gC,OAApB,CAAA,CAAsC,CACpC,IAAI0wC,EAAK,IAAA65B,cAAA,EACT,IAAK,CAAA,IAAA3pB,qBAAA,CAA0BlQ,CAA1B,CAAL,CACE,KAEF,KAAAvrC,MAAA,EAAcurC,CAAA1wC,OALsB,CAOtC,IAAAmqE,OAAAzkE,KAAA,CAAiB,CACfP,MAAO4jE,CADQ,CAEfjoC,KAAM,IAAAA,KAAAl+B,MAAA,CAAgBmmE,CAAhB,CAAuB,IAAA5jE,MAAvB,CAFS,CAGfu2B,WAAY,CAAA,CAHG,CAAjB,CAVoB,CAnJN,CAoKhB0uC,WAAYA,QAAQ,CAACwB,CAAD,CAAQ,CAC1B,IAAI7C,EAAQ,IAAA5jE,MACZ,KAAAA,MAAA,EAIA,KAHA,IAAIqwD,EAAS,EAAb,CACIqW,EAAYD,CADhB,CAEIn7B,EAAS,CAAA,CACb,CAAO,IAAAtrC,MAAP,CAAoB,IAAA27B,KAAA9gC,OAApB,CAAA,CAAsC,CACpC,IAAI0wC,EAAK,IAAA5P,KAAAx5B,OAAA,CAAiB,IAAAnC,MAAjB,CAAT,CACA0mE,EAAAA,CAAAA,CAAan7B,CACb,IAAID,CAAJ,CACa,GAAX,GAAIC,CAAJ,EACMo7B,CAKJ,CALU,IAAAhrC,KAAAv2B,UAAA,CAAoB,IAAApF,MAApB,CAAiC,CAAjC,CAAoC,IAAAA,MAApC,CAAiD,CAAjD,CAKV,CAJK2mE,CAAAnlE,MAAA,CAAU,aAAV,CAIL,EAHE,IAAAqkE,WAAA,CAAgB,6BAAhB,CAAgDc,CAAhD,CAAsD,GAAtD,CAGF,CADA,IAAA3mE,MACA,EADc,CACd,CAAAqwD,CAAA,EAAUuW,MAAAC,aAAA,CAAoB/oE,QAAA,CAAS6oE,CAAT;AAAc,EAAd,CAApB,CANZ,EASEtW,CATF,EAQYyU,EAAAgC,CAAOv7B,CAAPu7B,CARZ,EAS4Bv7B,CAE5B,CAAAD,CAAA,CAAS,CAAA,CAZX,KAaO,IAAW,IAAX,GAAIC,CAAJ,CACLD,CAAA,CAAS,CAAA,CADJ,KAEA,CAAA,GAAIC,CAAJ,GAAWk7B,CAAX,CAAkB,CACvB,IAAAzmE,MAAA,EACA,KAAAglE,OAAAzkE,KAAA,CAAiB,CACfP,MAAO4jE,CADQ,CAEfjoC,KAAM+qC,CAFS,CAGf/5D,SAAU,CAAA,CAHK,CAIf1Q,MAAOo0D,CAJQ,CAAjB,CAMA,OARuB,CAUvBA,CAAA,EAAU9kB,CAVL,CAYP,IAAAvrC,MAAA,EA9BoC,CAgCtC,IAAA6lE,WAAA,CAAgB,oBAAhB,CAAsCjC,CAAtC,CAtC0B,CApKZ,CA8MlB,KAAIpuB,EAAMA,QAAQ,CAAC6D,CAAD,CAAQ1zB,CAAR,CAAiB,CACjC,IAAA0zB,MAAA,CAAaA,CACb,KAAA1zB,QAAA,CAAeA,CAFkB,CAKnC6vB,EAAAC,QAAA,CAAc,SACdD,EAAAuxB,oBAAA,CAA0B,qBAC1BvxB,EAAAoB,qBAAA,CAA2B,sBAC3BpB,EAAAW,sBAAA,CAA4B,uBAC5BX,EAAAU,kBAAA,CAAwB,mBACxBV,EAAAO,iBAAA,CAAuB,kBACvBP,EAAAK,gBAAA,CAAsB,iBACtBL;CAAAkB,eAAA,CAAqB,gBACrBlB,EAAAe,iBAAA,CAAuB,kBACvBf,EAAAc,WAAA,CAAiB,YACjBd,EAAAG,QAAA,CAAc,SACdH,EAAAqB,gBAAA,CAAsB,iBACtBrB,EAAAwxB,SAAA,CAAe,UACfxxB,EAAAsB,iBAAA,CAAuB,kBACvBtB,EAAAwB,eAAA,CAAqB,gBACrBxB,EAAAyB,iBAAA,CAAuB,kBAGvBzB,EAAA8B,iBAAA,CAAuB,kBAEvB9B,EAAAh1B,UAAA,CAAgB,CACd60B,IAAKA,QAAQ,CAAC1Z,CAAD,CAAO,CAClB,IAAAA,KAAA,CAAYA,CACZ,KAAAqpC,OAAA,CAAc,IAAA3rB,MAAA0rB,IAAA,CAAeppC,CAAf,CAEV1/B,EAAAA,CAAQ,IAAAgrE,QAAA,EAEe,EAA3B,GAAI,IAAAjC,OAAAnqE,OAAJ,EACE,IAAAgrE,WAAA,CAAgB,wBAAhB,CAA0C,IAAAb,OAAA,CAAY,CAAZ,CAA1C,CAGF,OAAO/oE,EAVW,CADN;AAcdgrE,QAASA,QAAQ,EAAG,CAElB,IADA,IAAIp9B,EAAO,EACX,CAAA,CAAA,CAGE,GAFyB,CAEpB,CAFD,IAAAm7B,OAAAnqE,OAEC,EAF0B,CAAA,IAAAqqE,KAAA,CAAU,GAAV,CAAe,GAAf,CAAoB,GAApB,CAAyB,GAAzB,CAE1B,EADHr7B,CAAAtpC,KAAA,CAAU,IAAA2mE,oBAAA,EAAV,CACG,CAAA,CAAA,IAAAC,OAAA,CAAY,GAAZ,CAAL,CACE,MAAO,CAAEzlE,KAAM8zC,CAAAC,QAAR,CAAqB5L,KAAMA,CAA3B,CANO,CAdN,CAyBdq9B,oBAAqBA,QAAQ,EAAG,CAC9B,MAAO,CAAExlE,KAAM8zC,CAAAuxB,oBAAR,CAAiC5kC,WAAY,IAAAilC,YAAA,EAA7C,CADuB,CAzBlB,CA6BdA,YAAaA,QAAQ,EAAG,CAGtB,IAFA,IAAIpxB,EAAO,IAAA7T,WAAA,EAEX,CAAgB,IAAAglC,OAAA,CAAY,GAAZ,CAAhB,CAAA,CACEnxB,CAAA,CAAO,IAAAlpC,OAAA,CAAYkpC,CAAZ,CAET,OAAOA,EANe,CA7BV,CAsCd7T,WAAYA,QAAQ,EAAG,CACrB,MAAO,KAAAklC,WAAA,EADc,CAtCT,CA0CdA,WAAYA,QAAQ,EAAG,CACrB,IAAI7lD,EAAS,IAAA8lD,QAAA,EACT,KAAAH,OAAA,CAAY,GAAZ,CAAJ,GACE3lD,CADF,CACW,CAAE9f,KAAM8zC,CAAAoB,qBAAR;AAAkCZ,KAAMx0B,CAAxC,CAAgDy0B,MAAO,IAAAoxB,WAAA,EAAvD,CAA0E9vB,SAAU,GAApF,CADX,CAGA,OAAO/1B,EALc,CA1CT,CAkDd8lD,QAASA,QAAQ,EAAG,CAClB,IAAInoE,EAAO,IAAAooE,UAAA,EAAX,CACInxB,CADJ,CAEIC,CACJ,OAAI,KAAA8wB,OAAA,CAAY,GAAZ,CAAJ,GACE/wB,CACI,CADQ,IAAAjU,WAAA,EACR,CAAA,IAAAqlC,QAAA,CAAa,GAAb,CAFN,GAGInxB,CACO,CADM,IAAAlU,WAAA,EACN,CAAA,CAAEzgC,KAAM8zC,CAAAW,sBAAR,CAAmCh3C,KAAMA,CAAzC,CAA+Ci3C,UAAWA,CAA1D,CAAqEC,WAAYA,CAAjF,CAJX,EAOOl3C,CAXW,CAlDN,CAgEdooE,UAAWA,QAAQ,EAAG,CAEpB,IADA,IAAIvxB,EAAO,IAAAyxB,WAAA,EACX,CAAO,IAAAN,OAAA,CAAY,IAAZ,CAAP,CAAA,CACEnxB,CAAA,CAAO,CAAEt0C,KAAM8zC,CAAAU,kBAAR,CAA+BqB,SAAU,IAAzC,CAA+CvB,KAAMA,CAArD,CAA2DC,MAAO,IAAAwxB,WAAA,EAAlE,CAET,OAAOzxB,EALa,CAhER,CAwEdyxB,WAAYA,QAAQ,EAAG,CAErB,IADA,IAAIzxB,EAAO,IAAA0xB,SAAA,EACX,CAAO,IAAAP,OAAA,CAAY,IAAZ,CAAP,CAAA,CACEnxB,CAAA,CAAO,CAAEt0C,KAAM8zC,CAAAU,kBAAR;AAA+BqB,SAAU,IAAzC,CAA+CvB,KAAMA,CAArD,CAA2DC,MAAO,IAAAyxB,SAAA,EAAlE,CAET,OAAO1xB,EALc,CAxET,CAgFd0xB,SAAUA,QAAQ,EAAG,CAGnB,IAFA,IAAI1xB,EAAO,IAAA2xB,WAAA,EAAX,CACInmC,CACJ,CAAQA,CAAR,CAAgB,IAAA2lC,OAAA,CAAY,IAAZ,CAAiB,IAAjB,CAAsB,KAAtB,CAA4B,KAA5B,CAAhB,CAAA,CACEnxB,CAAA,CAAO,CAAEt0C,KAAM8zC,CAAAO,iBAAR,CAA8BwB,SAAU/V,CAAA7F,KAAxC,CAAoDqa,KAAMA,CAA1D,CAAgEC,MAAO,IAAA0xB,WAAA,EAAvE,CAET,OAAO3xB,EANY,CAhFP,CAyFd2xB,WAAYA,QAAQ,EAAG,CAGrB,IAFA,IAAI3xB,EAAO,IAAA4xB,SAAA,EAAX,CACIpmC,CACJ,CAAQA,CAAR,CAAgB,IAAA2lC,OAAA,CAAY,GAAZ,CAAiB,GAAjB,CAAsB,IAAtB,CAA4B,IAA5B,CAAhB,CAAA,CACEnxB,CAAA,CAAO,CAAEt0C,KAAM8zC,CAAAO,iBAAR,CAA8BwB,SAAU/V,CAAA7F,KAAxC,CAAoDqa,KAAMA,CAA1D,CAAgEC,MAAO,IAAA2xB,SAAA,EAAvE,CAET,OAAO5xB,EANc,CAzFT,CAkGd4xB,SAAUA,QAAQ,EAAG,CAGnB,IAFA,IAAI5xB,EAAO,IAAA6xB,eAAA,EAAX,CACIrmC,CACJ,CAAQA,CAAR,CAAgB,IAAA2lC,OAAA,CAAY,GAAZ,CAAgB,GAAhB,CAAhB,CAAA,CACEnxB,CAAA,CAAO,CAAEt0C,KAAM8zC,CAAAO,iBAAR,CAA8BwB,SAAU/V,CAAA7F,KAAxC;AAAoDqa,KAAMA,CAA1D,CAAgEC,MAAO,IAAA4xB,eAAA,EAAvE,CAET,OAAO7xB,EANY,CAlGP,CA2Gd6xB,eAAgBA,QAAQ,EAAG,CAGzB,IAFA,IAAI7xB,EAAO,IAAA8xB,MAAA,EAAX,CACItmC,CACJ,CAAQA,CAAR,CAAgB,IAAA2lC,OAAA,CAAY,GAAZ,CAAgB,GAAhB,CAAoB,GAApB,CAAhB,CAAA,CACEnxB,CAAA,CAAO,CAAEt0C,KAAM8zC,CAAAO,iBAAR,CAA8BwB,SAAU/V,CAAA7F,KAAxC,CAAoDqa,KAAMA,CAA1D,CAAgEC,MAAO,IAAA6xB,MAAA,EAAvE,CAET,OAAO9xB,EANkB,CA3Gb,CAoHd8xB,MAAOA,QAAQ,EAAG,CAChB,IAAItmC,CACJ,OAAA,CAAKA,CAAL,CAAa,IAAA2lC,OAAA,CAAY,GAAZ,CAAiB,GAAjB,CAAsB,GAAtB,CAAb,EACS,CAAEzlE,KAAM8zC,CAAAK,gBAAR,CAA6B0B,SAAU/V,CAAA7F,KAAvC,CAAmDr1B,OAAQ,CAAA,CAA3D,CAAiEwvC,SAAU,IAAAgyB,MAAA,EAA3E,CADT,CAGS,IAAAC,QAAA,EALO,CApHJ,CA6HdA,QAASA,QAAQ,EAAG,CAClB,IAAIA,CACA,KAAAZ,OAAA,CAAY,GAAZ,CAAJ,EACEY,CACA,CADU,IAAAX,YAAA,EACV,CAAA,IAAAI,QAAA,CAAa,GAAb,CAFF,EAGW,IAAAL,OAAA,CAAY,GAAZ,CAAJ,CACLY,CADK,CACK,IAAAC,iBAAA,EADL,CAEI,IAAAb,OAAA,CAAY,GAAZ,CAAJ,CACLY,CADK,CACK,IAAAvxB,OAAA,EADL;AAEI,IAAAyxB,gBAAA1sE,eAAA,CAAoC,IAAA2pE,KAAA,EAAAvpC,KAApC,CAAJ,CACLosC,CADK,CACK5nE,EAAA,CAAK,IAAA8nE,gBAAA,CAAqB,IAAAT,QAAA,EAAA7rC,KAArB,CAAL,CADL,CAEI,IAAAhW,QAAAsyB,SAAA18C,eAAA,CAAqC,IAAA2pE,KAAA,EAAAvpC,KAArC,CAAJ,CACLosC,CADK,CACK,CAAErmE,KAAM8zC,CAAAG,QAAR,CAAqB15C,MAAO,IAAA0pB,QAAAsyB,SAAA,CAAsB,IAAAuvB,QAAA,EAAA7rC,KAAtB,CAA5B,CADL,CAEI,IAAAupC,KAAA,EAAA3uC,WAAJ,CACLwxC,CADK,CACK,IAAAxxC,WAAA,EADL,CAEI,IAAA2uC,KAAA,EAAAv4D,SAAJ,CACLo7D,CADK,CACK,IAAAp7D,SAAA,EADL,CAGL,IAAAk5D,WAAA,CAAgB,0BAAhB,CAA4C,IAAAX,KAAA,EAA5C,CAIF,KADA,IAAIhiB,CACJ,CAAQA,CAAR,CAAe,IAAAikB,OAAA,CAAY,GAAZ,CAAiB,GAAjB,CAAsB,GAAtB,CAAf,CAAA,CACoB,GAAlB,GAAIjkB,CAAAvnB,KAAJ,EACEosC,CACA,CADU,CAACrmE,KAAM8zC,CAAAkB,eAAP,CAA2BC,OAAQoxB,CAAnC,CAA4CrqE,UAAW,IAAAwqE,eAAA,EAAvD,CACV,CAAA,IAAAV,QAAA,CAAa,GAAb,CAFF;AAGyB,GAAlB,GAAItkB,CAAAvnB,KAAJ,EACLosC,CACA,CADU,CAAErmE,KAAM8zC,CAAAe,iBAAR,CAA8BC,OAAQuxB,CAAtC,CAA+CpuC,SAAU,IAAAwI,WAAA,EAAzD,CAA4EsU,SAAU,CAAA,CAAtF,CACV,CAAA,IAAA+wB,QAAA,CAAa,GAAb,CAFK,EAGkB,GAAlB,GAAItkB,CAAAvnB,KAAJ,CACLosC,CADK,CACK,CAAErmE,KAAM8zC,CAAAe,iBAAR,CAA8BC,OAAQuxB,CAAtC,CAA+CpuC,SAAU,IAAApD,WAAA,EAAzD,CAA4EkgB,SAAU,CAAA,CAAtF,CADL,CAGL,IAAAovB,WAAA,CAAgB,YAAhB,CAGJ,OAAOkC,EAnCW,CA7HN,CAmKdj7D,OAAQA,QAAQ,CAACq7D,CAAD,CAAiB,CAC3BtnD,CAAAA,CAAO,CAACsnD,CAAD,CAGX,KAFA,IAAI3mD,EAAS,CAAC9f,KAAM8zC,CAAAkB,eAAP,CAA2BC,OAAQ,IAAApgB,WAAA,EAAnC,CAAsD74B,UAAWmjB,CAAjE,CAAuE/T,OAAQ,CAAA,CAA/E,CAEb,CAAO,IAAAq6D,OAAA,CAAY,GAAZ,CAAP,CAAA,CACEtmD,CAAAtgB,KAAA,CAAU,IAAA4hC,WAAA,EAAV,CAGF,OAAO3gB,EARwB,CAnKnB,CA8Kd0mD,eAAgBA,QAAQ,EAAG,CACzB,IAAIrnD,EAAO,EACX,IAA8B,GAA9B,GAAI,IAAAunD,UAAA,EAAAzsC,KAAJ,EACE,EACE9a,EAAAtgB,KAAA,CAAU,IAAA6mE,YAAA,EAAV,CADF,OAES,IAAAD,OAAA,CAAY,GAAZ,CAFT,CADF;CAKA,MAAOtmD,EAPkB,CA9Kb,CAwLd0V,WAAYA,QAAQ,EAAG,CACrB,IAAIiL,EAAQ,IAAAgmC,QAAA,EACPhmC,EAAAjL,WAAL,EACE,IAAAsvC,WAAA,CAAgB,2BAAhB,CAA6CrkC,CAA7C,CAEF,OAAO,CAAE9/B,KAAM8zC,CAAAc,WAAR,CAAwB/vC,KAAMi7B,CAAA7F,KAA9B,CALc,CAxLT,CAgMdhvB,SAAUA,QAAQ,EAAG,CAEnB,MAAO,CAAEjL,KAAM8zC,CAAAG,QAAR,CAAqB15C,MAAO,IAAAurE,QAAA,EAAAvrE,MAA5B,CAFY,CAhMP,CAqMd+rE,iBAAkBA,QAAQ,EAAG,CAC3B,IAAIprD,EAAW,EACf,IAA8B,GAA9B,GAAI,IAAAwrD,UAAA,EAAAzsC,KAAJ,EACE,EAAG,CACD,GAAI,IAAAupC,KAAA,CAAU,GAAV,CAAJ,CAEE,KAEFtoD,EAAArc,KAAA,CAAc,IAAA4hC,WAAA,EAAd,CALC,CAAH,MAMS,IAAAglC,OAAA,CAAY,GAAZ,CANT,CADF,CASA,IAAAK,QAAA,CAAa,GAAb,CAEA,OAAO,CAAE9lE,KAAM8zC,CAAAqB,gBAAR,CAA6Bj6B,SAAUA,CAAvC,CAboB,CArMf,CAqNd45B,OAAQA,QAAQ,EAAG,CAAA,IACbO,EAAa,EADA,CACIpd,CACrB,IAA8B,GAA9B,GAAI,IAAAyuC,UAAA,EAAAzsC,KAAJ,EACE,EAAG,CACD,GAAI,IAAAupC,KAAA,CAAU,GAAV,CAAJ,CAEE,KAEFvrC;CAAA,CAAW,CAACj4B,KAAM8zC,CAAAwxB,SAAP,CAAqBqB,KAAM,MAA3B,CACP,KAAAnD,KAAA,EAAAv4D,SAAJ,EACEgtB,CAAAt+B,IAGA,CAHe,IAAAsR,SAAA,EAGf,CAFAgtB,CAAA8c,SAEA,CAFoB,CAAA,CAEpB,CADA,IAAA+wB,QAAA,CAAa,GAAb,CACA,CAAA7tC,CAAA19B,MAAA,CAAiB,IAAAkmC,WAAA,EAJnB,EAKW,IAAA+iC,KAAA,EAAA3uC,WAAJ,EACLoD,CAAAt+B,IAEA,CAFe,IAAAk7B,WAAA,EAEf,CADAoD,CAAA8c,SACA,CADoB,CAAA,CACpB,CAAI,IAAAyuB,KAAA,CAAU,GAAV,CAAJ,EACE,IAAAsC,QAAA,CAAa,GAAb,CACA,CAAA7tC,CAAA19B,MAAA,CAAiB,IAAAkmC,WAAA,EAFnB,EAIExI,CAAA19B,MAJF,CAImB09B,CAAAt+B,IAPd,EASI,IAAA6pE,KAAA,CAAU,GAAV,CAAJ,EACL,IAAAsC,QAAA,CAAa,GAAb,CAKA,CAJA7tC,CAAAt+B,IAIA,CAJe,IAAA8mC,WAAA,EAIf,CAHA,IAAAqlC,QAAA,CAAa,GAAb,CAGA,CAFA7tC,CAAA8c,SAEA,CAFoB,CAAA,CAEpB,CADA,IAAA+wB,QAAA,CAAa,GAAb,CACA,CAAA7tC,CAAA19B,MAAA,CAAiB,IAAAkmC,WAAA,EANZ,EAQL,IAAA0jC,WAAA,CAAgB,aAAhB,CAA+B,IAAAX,KAAA,EAA/B,CAEFnuB,EAAAx2C,KAAA,CAAgBo5B,CAAhB,CA9BC,CAAH,MA+BS,IAAAwtC,OAAA,CAAY,GAAZ,CA/BT,CADF,CAkCA,IAAAK,QAAA,CAAa,GAAb,CAEA;MAAO,CAAC9lE,KAAM8zC,CAAAsB,iBAAP,CAA6BC,WAAYA,CAAzC,CAtCU,CArNL,CA8Pd8uB,WAAYA,QAAQ,CAAC5iB,CAAD,CAAMzhB,CAAN,CAAa,CAC/B,KAAMgT,EAAA,CAAa,QAAb,CAEAhT,CAAA7F,KAFA,CAEYsnB,CAFZ,CAEkBzhB,CAAAxhC,MAFlB,CAEgC,CAFhC,CAEoC,IAAA27B,KAFpC,CAE+C,IAAAA,KAAAv2B,UAAA,CAAoBo8B,CAAAxhC,MAApB,CAF/C,CAAN,CAD+B,CA9PnB,CAoQdwnE,QAASA,QAAQ,CAACc,CAAD,CAAK,CACpB,GAA2B,CAA3B,GAAI,IAAAtD,OAAAnqE,OAAJ,CACE,KAAM25C,EAAA,CAAa,MAAb,CAA0D,IAAA7Y,KAA1D,CAAN,CAGF,IAAI6F,EAAQ,IAAA2lC,OAAA,CAAYmB,CAAZ,CACP9mC,EAAL,EACE,IAAAqkC,WAAA,CAAgB,4BAAhB,CAA+CyC,CAA/C,CAAoD,GAApD,CAAyD,IAAApD,KAAA,EAAzD,CAEF,OAAO1jC,EATa,CApQR,CAgRd4mC,UAAWA,QAAQ,EAAG,CACpB,GAA2B,CAA3B,GAAI,IAAApD,OAAAnqE,OAAJ,CACE,KAAM25C,EAAA,CAAa,MAAb,CAA0D,IAAA7Y,KAA1D,CAAN,CAEF,MAAO,KAAAqpC,OAAA,CAAY,CAAZ,CAJa,CAhRR,CAuRdE,KAAMA,QAAQ,CAACoD,CAAD,CAAKC,CAAL,CAASC,CAAT,CAAaC,CAAb,CAAiB,CAC7B,MAAO,KAAAC,UAAA,CAAe,CAAf,CAAkBJ,CAAlB,CAAsBC,CAAtB,CAA0BC,CAA1B,CAA8BC,CAA9B,CADsB,CAvRjB,CA2RdC,UAAWA,QAAQ,CAAC5sE,CAAD,CAAIwsE,CAAJ,CAAQC,CAAR,CAAYC,CAAZ,CAAgBC,CAAhB,CAAoB,CACrC,GAAI,IAAAzD,OAAAnqE,OAAJ;AAAyBiB,CAAzB,CAA4B,CACtB0lC,CAAAA,CAAQ,IAAAwjC,OAAA,CAAYlpE,CAAZ,CACZ,KAAI6sE,EAAInnC,CAAA7F,KACR,IAAIgtC,CAAJ,GAAUL,CAAV,EAAgBK,CAAhB,GAAsBJ,CAAtB,EAA4BI,CAA5B,GAAkCH,CAAlC,EAAwCG,CAAxC,GAA8CF,CAA9C,EACK,EAACH,CAAD,EAAQC,CAAR,EAAeC,CAAf,EAAsBC,CAAtB,CADL,CAEE,MAAOjnC,EALiB,CAQ5B,MAAO,CAAA,CAT8B,CA3RzB,CAuSd2lC,OAAQA,QAAQ,CAACmB,CAAD,CAAKC,CAAL,CAASC,CAAT,CAAaC,CAAb,CAAiB,CAE/B,MAAA,CADIjnC,CACJ,CADY,IAAA0jC,KAAA,CAAUoD,CAAV,CAAcC,CAAd,CAAkBC,CAAlB,CAAsBC,CAAtB,CACZ,GACE,IAAAzD,OAAAtiD,MAAA,EACO8e,CAAAA,CAFT,EAIO,CAAA,CANwB,CAvSnB,CAgTdymC,gBAAiB,CACf,OAAQ,CAACvmE,KAAM8zC,CAAAwB,eAAP,CADO,CAEf,QAAW,CAACt1C,KAAM8zC,CAAAyB,iBAAP,CAFI,CAhTH,CAodhBQ,GAAAj3B,UAAA,CAAwB,CACtB/Y,QAASA,QAAQ,CAAC06B,CAAD,CAAa0W,CAAb,CAA8B,CAC7C,IAAIr2C,EAAO,IAAX,CACI6yC,EAAM,IAAAqC,WAAArC,IAAA,CAAoBlT,CAApB,CACV,KAAAza,MAAA,CAAa,CACXkhD,OAAQ,CADG,CAEXxe,QAAS,EAFE,CAGXvR,gBAAiBA,CAHN,CAIXp2C,GAAI,CAAComE,KAAM,EAAP,CAAWh/B,KAAM,EAAjB,CAAqBi/B,IAAK,EAA1B,CAJO,CAKXpqC,OAAQ,CAACmqC,KAAM,EAAP,CAAWh/B,KAAM,EAAjB,CAAqBi/B,IAAK,EAA1B,CALG,CAMXnvB,OAAQ,EANG,CAQbvE,EAAA,CAAgCC,CAAhC,CAAqC7yC,CAAAoS,QAArC,CACA,KAAI3W,EAAQ,EAAZ,CACI8qE,CACJ,KAAAC,MAAA,CAAa,QACb;GAAKD,CAAL,CAAkB1xB,EAAA,CAAchC,CAAd,CAAlB,CACE,IAAA3tB,MAAAuhD,UAIA,CAJuB,QAIvB,CAHIznD,CAGJ,CAHa,IAAAonD,OAAA,EAGb,CAFA,IAAAM,QAAA,CAAaH,CAAb,CAAyBvnD,CAAzB,CAEA,CADA,IAAA2nD,QAAA,CAAa3nD,CAAb,CACA,CAAAvjB,CAAA,CAAQ,YAAR,CAAuB,IAAAmrE,iBAAA,CAAsB,QAAtB,CAAgC,OAAhC,CAErBxzB,EAAAA,CAAUsB,EAAA,CAAU7B,CAAAxL,KAAV,CACdrnC,EAAAwmE,MAAA,CAAa,QACb9tE,EAAA,CAAQ06C,CAAR,CAAiB,QAAQ,CAAC2M,CAAD,CAAQlnD,CAAR,CAAa,CACpC,IAAIguE,EAAQ,IAARA,CAAehuE,CACnBmH,EAAAklB,MAAA,CAAW2hD,CAAX,CAAA,CAAoB,CAACR,KAAM,EAAP,CAAWh/B,KAAM,EAAjB,CAAqBi/B,IAAK,EAA1B,CACpBtmE,EAAAklB,MAAAuhD,UAAA,CAAuBI,CACvB,KAAIC,EAAS9mE,CAAAomE,OAAA,EACbpmE,EAAA0mE,QAAA,CAAa3mB,CAAb,CAAoB+mB,CAApB,CACA9mE,EAAA2mE,QAAA,CAAaG,CAAb,CACA9mE,EAAAklB,MAAAiyB,OAAAp5C,KAAA,CAAuB8oE,CAAvB,CACA9mB,EAAAgnB,QAAA,CAAgBluE,CARoB,CAAtC,CAUA,KAAAqsB,MAAAuhD,UAAA,CAAuB,IACvB,KAAAD,MAAA,CAAa,MACb,KAAAE,QAAA,CAAa7zB,CAAb,CACIm0B,EAAAA,CAGF,GAHEA,CAGI,IAAAC,IAHJD,CAGe,GAHfA,CAGqB,IAAAE,OAHrBF,CAGmC,MAHnCA,CAIF,IAAAG,aAAA,EAJEH,CAKF,SALEA,CAKU,IAAAJ,iBAAA,CAAsB,IAAtB,CAA4B,SAA5B,CALVI;AAMFvrE,CANEurE,CAOF,IAAAI,SAAA,EAPEJ,CAQF,YAGE/mE,EAAAA,CAAK,CAAC,IAAI8d,QAAJ,CAAa,SAAb,CACN,sBADM,CAEN,kBAFM,CAGN,oBAHM,CAIN,gBAJM,CAKN,yBALM,CAMN,WANM,CAON,MAPM,CAQN,MARM,CASNipD,CATM,CAAD,EAUH,IAAA50D,QAVG,CAWH0/B,EAXG,CAYHI,EAZG,CAaHE,EAbG,CAcHH,EAdG,CAeHO,EAfG,CAgBHC,EAhBG,CAiBHC,EAjBG,CAkBH/S,CAlBG,CAoBT,KAAAza,MAAA,CAAa,IAAAshD,MAAb,CAA0BloE,IAAAA,EAC1B2B,EAAAg8B,QAAA,CAAa+Y,EAAA,CAAUnC,CAAV,CACb5yC,EAAAkK,SAAA,CAAyB0oC,CA/EpB1oC,SAgFL,OAAOlK,EAvEsC,CADzB,CA2EtBgnE,IAAK,KA3EiB,CA6EtBC,OAAQ,QA7Ec,CA+EtBE,SAAUA,QAAQ,EAAG,CACnB,IAAIpoD,EAAS,EAAb,CACI2iB,EAAM,IAAAzc,MAAAiyB,OADV,CAEIn3C,EAAO,IACXtH,EAAA,CAAQipC,CAAR,CAAa,QAAQ,CAAC59B,CAAD,CAAO,CAC1Bib,CAAAjhB,KAAA,CAAY,MAAZ,CAAqBgG,CAArB,CAA4B,GAA5B,CAAkC/D,CAAA4mE,iBAAA,CAAsB7iE,CAAtB,CAA4B,GAA5B,CAAlC,CAD0B,CAA5B,CAGI49B,EAAAtpC,OAAJ,EACE2mB,CAAAjhB,KAAA,CAAY,aAAZ,CAA4B4jC,CAAA1+B,KAAA,CAAS,GAAT,CAA5B,CAA4C,IAA5C,CAEF;MAAO+b,EAAA/b,KAAA,CAAY,EAAZ,CAVY,CA/EC,CA4FtB2jE,iBAAkBA,QAAQ,CAAC7iE,CAAD,CAAOu8B,CAAP,CAAe,CACvC,MAAO,WAAP,CAAqBA,CAArB,CAA8B,IAA9B,CACI,IAAA+mC,WAAA,CAAgBtjE,CAAhB,CADJ,CAEI,IAAAsjC,KAAA,CAAUtjC,CAAV,CAFJ,CAGI,IAJmC,CA5FnB,CAmGtBojE,aAAcA,QAAQ,EAAG,CACvB,IAAIrkE,EAAQ,EAAZ,CACI9C,EAAO,IACXtH,EAAA,CAAQ,IAAAwsB,MAAA0iC,QAAR,CAA4B,QAAQ,CAACrgC,CAAD,CAAKjd,CAAL,CAAa,CAC/CxH,CAAA/E,KAAA,CAAWwpB,CAAX,CAAgB,WAAhB,CAA8BvnB,CAAA8oC,OAAA,CAAYx+B,CAAZ,CAA9B,CAAoD,GAApD,CAD+C,CAAjD,CAGA,OAAIxH,EAAAzK,OAAJ,CAAyB,MAAzB,CAAkCyK,CAAAG,KAAA,CAAW,GAAX,CAAlC,CAAoD,GAApD,CACO,EAPgB,CAnGH,CA6GtBokE,WAAYA,QAAQ,CAACC,CAAD,CAAU,CAC5B,MAAO,KAAApiD,MAAA,CAAWoiD,CAAX,CAAAjB,KAAAhuE,OAAA,CAAkC,MAAlC,CAA2C,IAAA6sB,MAAA,CAAWoiD,CAAX,CAAAjB,KAAApjE,KAAA,CAA8B,GAA9B,CAA3C,CAAgF,GAAhF,CAAsF,EADjE,CA7GR,CAiHtBokC,KAAMA,QAAQ,CAACigC,CAAD,CAAU,CACtB,MAAO,KAAApiD,MAAA,CAAWoiD,CAAX,CAAAjgC,KAAApkC,KAAA,CAA8B,EAA9B,CADe,CAjHF,CAqHtByjE,QAASA,QAAQ,CAAC7zB,CAAD,CAAMi0B,CAAN,CAAcS,CAAd,CAAsBC,CAAtB,CAAmC9rE,CAAnC,CAA2C+rE,CAA3C,CAA6D,CAAA,IACxEj0B,CADwE,CAClEC,CADkE,CAC3DzzC,EAAO,IADoD,CAC9Cqe,CAD8C,CACxCshB,CADwC,CAC5BsU,CAChDuzB,EAAA,CAAcA,CAAd,EAA6B7rE,CAC7B,IAAK8rE,CAAAA,CAAL,EAAyBtrE,CAAA,CAAU02C,CAAAk0B,QAAV,CAAzB,CACED,CACA;AADSA,CACT,EADmB,IAAAV,OAAA,EACnB,CAAA,IAAAsB,IAAA,CAAS,GAAT,CACE,IAAAC,WAAA,CAAgBb,CAAhB,CAAwB,IAAAc,eAAA,CAAoB,GAApB,CAAyB/0B,CAAAk0B,QAAzB,CAAxB,CADF,CAEE,IAAAc,YAAA,CAAiBh1B,CAAjB,CAAsBi0B,CAAtB,CAA8BS,CAA9B,CAAsCC,CAAtC,CAAmD9rE,CAAnD,CAA2D,CAAA,CAA3D,CAFF,CAFF,KAQA,QAAQm3C,CAAA3zC,KAAR,EACA,KAAK8zC,CAAAC,QAAL,CACEv6C,CAAA,CAAQm6C,CAAAxL,KAAR,CAAkB,QAAQ,CAAC1H,CAAD,CAAat5B,CAAb,CAAkB,CAC1CrG,CAAA0mE,QAAA,CAAa/mC,CAAAA,WAAb,CAAoCrhC,IAAAA,EAApC,CAA+CA,IAAAA,EAA/C,CAA0D,QAAQ,CAAC40C,CAAD,CAAO,CAAEO,CAAA,CAAQP,CAAV,CAAzE,CACI7sC,EAAJ,GAAYwsC,CAAAxL,KAAAhvC,OAAZ,CAA8B,CAA9B,CACE2H,CAAA0+B,QAAA,EAAA2I,KAAAtpC,KAAA,CAAyB01C,CAAzB,CAAgC,GAAhC,CADF,CAGEzzC,CAAA2mE,QAAA,CAAalzB,CAAb,CALwC,CAA5C,CAQA,MACF,MAAKT,CAAAG,QAAL,CACExT,CAAA,CAAa,IAAAmJ,OAAA,CAAY+J,CAAAp5C,MAAZ,CACb,KAAAyiC,OAAA,CAAY4qC,CAAZ,CAAoBnnC,CAApB,CACA6nC,EAAA,CAAY7nC,CAAZ,CACA,MACF,MAAKqT,CAAAK,gBAAL,CACE,IAAAqzB,QAAA,CAAa7zB,CAAAS,SAAb,CAA2Bh1C,IAAAA,EAA3B,CAAsCA,IAAAA,EAAtC,CAAiD,QAAQ,CAAC40C,CAAD,CAAO,CAAEO,CAAA,CAAQP,CAAV,CAAhE,CACAvT,EAAA,CAAakT,CAAAkC,SAAb,CAA4B,GAA5B,CAAkC,IAAAtC,UAAA,CAAegB,CAAf,CAAsB,CAAtB,CAAlC,CAA6D,GAC7D,KAAAvX,OAAA,CAAY4qC,CAAZ,CAAoBnnC,CAApB,CACA6nC;CAAA,CAAY7nC,CAAZ,CACA,MACF,MAAKqT,CAAAO,iBAAL,CACE,IAAAmzB,QAAA,CAAa7zB,CAAAW,KAAb,CAAuBl1C,IAAAA,EAAvB,CAAkCA,IAAAA,EAAlC,CAA6C,QAAQ,CAAC40C,CAAD,CAAO,CAAEM,CAAA,CAAON,CAAT,CAA5D,CACA,KAAAwzB,QAAA,CAAa7zB,CAAAY,MAAb,CAAwBn1C,IAAAA,EAAxB,CAAmCA,IAAAA,EAAnC,CAA8C,QAAQ,CAAC40C,CAAD,CAAO,CAAEO,CAAA,CAAQP,CAAV,CAA7D,CAEEvT,EAAA,CADmB,GAArB,GAAIkT,CAAAkC,SAAJ,CACe,IAAA+yB,KAAA,CAAUt0B,CAAV,CAAgBC,CAAhB,CADf,CAE4B,GAArB,GAAIZ,CAAAkC,SAAJ,CACQ,IAAAtC,UAAA,CAAee,CAAf,CAAqB,CAArB,CADR,CACkCX,CAAAkC,SADlC,CACiD,IAAAtC,UAAA,CAAegB,CAAf,CAAsB,CAAtB,CADjD,CAGQ,GAHR,CAGcD,CAHd,CAGqB,GAHrB,CAG2BX,CAAAkC,SAH3B,CAG0C,GAH1C,CAGgDtB,CAHhD,CAGwD,GAE/D,KAAAvX,OAAA,CAAY4qC,CAAZ,CAAoBnnC,CAApB,CACA6nC,EAAA,CAAY7nC,CAAZ,CACA,MACF,MAAKqT,CAAAU,kBAAL,CACEozB,CAAA,CAASA,CAAT,EAAmB,IAAAV,OAAA,EACnBpmE,EAAA0mE,QAAA,CAAa7zB,CAAAW,KAAb,CAAuBszB,CAAvB,CACA9mE,EAAA0nE,IAAA,CAA0B,IAAjB,GAAA70B,CAAAkC,SAAA,CAAwB+xB,CAAxB,CAAiC9mE,CAAA+nE,IAAA,CAASjB,CAAT,CAA1C,CAA4D9mE,CAAA6nE,YAAA,CAAiBh1B,CAAAY,MAAjB,CAA4BqzB,CAA5B,CAA5D,CACAU,EAAA,CAAYV,CAAZ,CACA,MACF,MAAK9zB,CAAAW,sBAAL,CACEmzB,CAAA,CAASA,CAAT,EAAmB,IAAAV,OAAA,EACnBpmE,EAAA0mE,QAAA,CAAa7zB,CAAAl2C,KAAb;AAAuBmqE,CAAvB,CACA9mE,EAAA0nE,IAAA,CAASZ,CAAT,CAAiB9mE,CAAA6nE,YAAA,CAAiBh1B,CAAAe,UAAjB,CAAgCkzB,CAAhC,CAAjB,CAA0D9mE,CAAA6nE,YAAA,CAAiBh1B,CAAAgB,WAAjB,CAAiCizB,CAAjC,CAA1D,CACAU,EAAA,CAAYV,CAAZ,CACA,MACF,MAAK9zB,CAAAc,WAAL,CACEgzB,CAAA,CAASA,CAAT,EAAmB,IAAAV,OAAA,EACfmB,EAAJ,GACEA,CAAA3uE,QAEA,CAFgC,QAAf,GAAAoH,CAAAwmE,MAAA,CAA0B,GAA1B,CAAgC,IAAAtqC,OAAA,CAAY,IAAAkqC,OAAA,EAAZ,CAA2B,IAAA4B,kBAAA,CAAuB,GAAvB,CAA4Bn1B,CAAA9uC,KAA5B,CAA3B,CAAmE,MAAnE,CAEjD,CADAwjE,CAAAtzB,SACA,CADkB,CAAA,CAClB,CAAAszB,CAAAxjE,KAAA,CAAc8uC,CAAA9uC,KAHhB,CAKA+tC,GAAA,CAAqBe,CAAA9uC,KAArB,CACA/D,EAAA0nE,IAAA,CAAwB,QAAxB,GAAS1nE,CAAAwmE,MAAT,EAAoCxmE,CAAA+nE,IAAA,CAAS/nE,CAAAgoE,kBAAA,CAAuB,GAAvB,CAA4Bn1B,CAAA9uC,KAA5B,CAAT,CAApC,CACE,QAAQ,EAAG,CACT/D,CAAA0nE,IAAA,CAAwB,QAAxB,GAAS1nE,CAAAwmE,MAAT,EAAoC,GAApC,CAAyC,QAAQ,EAAG,CAC9C9qE,CAAJ,EAAyB,CAAzB,GAAcA,CAAd,EACEsE,CAAA0nE,IAAA,CACE1nE,CAAA+nE,IAAA,CAAS/nE,CAAAioE,kBAAA,CAAuB,GAAvB,CAA4Bp1B,CAAA9uC,KAA5B,CAAT,CADF,CAEE/D,CAAA2nE,WAAA,CAAgB3nE,CAAAioE,kBAAA,CAAuB,GAAvB,CAA4Bp1B,CAAA9uC,KAA5B,CAAhB,CAAuD,IAAvD,CAFF,CAIF/D,EAAAk8B,OAAA,CAAY4qC,CAAZ,CAAoB9mE,CAAAioE,kBAAA,CAAuB,GAAvB;AAA4Bp1B,CAAA9uC,KAA5B,CAApB,CANkD,CAApD,CADS,CADb,CAUK+iE,CAVL,EAUe9mE,CAAA2nE,WAAA,CAAgBb,CAAhB,CAAwB9mE,CAAAioE,kBAAA,CAAuB,GAAvB,CAA4Bp1B,CAAA9uC,KAA5B,CAAxB,CAVf,CAYA,EAAI/D,CAAAklB,MAAAmxB,gBAAJ,EAAkCjB,EAAA,CAA8BvC,CAAA9uC,KAA9B,CAAlC,GACE/D,CAAAkoE,oBAAA,CAAyBpB,CAAzB,CAEFU,EAAA,CAAYV,CAAZ,CACA,MACF,MAAK9zB,CAAAe,iBAAL,CACEP,CAAA,CAAO+zB,CAAP,GAAkBA,CAAA3uE,QAAlB,CAAmC,IAAAwtE,OAAA,EAAnC,GAAqD,IAAAA,OAAA,EACrDU,EAAA,CAASA,CAAT,EAAmB,IAAAV,OAAA,EACnBpmE,EAAA0mE,QAAA,CAAa7zB,CAAAmB,OAAb,CAAyBR,CAAzB,CAA+Bl1C,IAAAA,EAA/B,CAA0C,QAAQ,EAAG,CACnD0B,CAAA0nE,IAAA,CAAS1nE,CAAAmoE,QAAA,CAAa30B,CAAb,CAAT,CAA6B,QAAQ,EAAG,CAClC93C,CAAJ,EAAyB,CAAzB,GAAcA,CAAd,EACEsE,CAAAooE,2BAAA,CAAgC50B,CAAhC,CAEF,IAAIX,CAAAoB,SAAJ,CACER,CASA,CATQzzC,CAAAomE,OAAA,EASR,CARApmE,CAAA0mE,QAAA,CAAa7zB,CAAA1b,SAAb,CAA2Bsc,CAA3B,CAQA,CAPAzzC,CAAAiyC,eAAA,CAAoBwB,CAApB,CAOA,CANAzzC,CAAAqoE,wBAAA,CAA6B50B,CAA7B,CAMA,CALI/3C,CAKJ,EALyB,CAKzB,GALcA,CAKd,EAJEsE,CAAA0nE,IAAA,CAAS1nE,CAAA+nE,IAAA,CAAS/nE,CAAA4nE,eAAA,CAAoBp0B,CAApB,CAA0BC,CAA1B,CAAT,CAAT,CAAqDzzC,CAAA2nE,WAAA,CAAgB3nE,CAAA4nE,eAAA,CAAoBp0B,CAApB;AAA0BC,CAA1B,CAAhB,CAAkD,IAAlD,CAArD,CAIF,CAFA9T,CAEA,CAFa3/B,CAAAkyC,iBAAA,CAAsBlyC,CAAA4nE,eAAA,CAAoBp0B,CAApB,CAA0BC,CAA1B,CAAtB,CAEb,CADAzzC,CAAAk8B,OAAA,CAAY4qC,CAAZ,CAAoBnnC,CAApB,CACA,CAAI4nC,CAAJ,GACEA,CAAAtzB,SACA,CADkB,CAAA,CAClB,CAAAszB,CAAAxjE,KAAA,CAAc0vC,CAFhB,CAVF,KAcO,CACL3B,EAAA,CAAqBe,CAAA1b,SAAApzB,KAArB,CACIrI,EAAJ,EAAyB,CAAzB,GAAcA,CAAd,EACEsE,CAAA0nE,IAAA,CAAS1nE,CAAA+nE,IAAA,CAAS/nE,CAAAioE,kBAAA,CAAuBz0B,CAAvB,CAA6BX,CAAA1b,SAAApzB,KAA7B,CAAT,CAAT,CAAoE/D,CAAA2nE,WAAA,CAAgB3nE,CAAAioE,kBAAA,CAAuBz0B,CAAvB,CAA6BX,CAAA1b,SAAApzB,KAA7B,CAAhB,CAAiE,IAAjE,CAApE,CAEF47B,EAAA,CAAa3/B,CAAAioE,kBAAA,CAAuBz0B,CAAvB,CAA6BX,CAAA1b,SAAApzB,KAA7B,CACb,IAAI/D,CAAAklB,MAAAmxB,gBAAJ,EAAkCjB,EAAA,CAA8BvC,CAAA1b,SAAApzB,KAA9B,CAAlC,CACE47B,CAAA,CAAa3/B,CAAAkyC,iBAAA,CAAsBvS,CAAtB,CAEf3/B,EAAAk8B,OAAA,CAAY4qC,CAAZ,CAAoBnnC,CAApB,CACI4nC,EAAJ,GACEA,CAAAtzB,SACA,CADkB,CAAA,CAClB,CAAAszB,CAAAxjE,KAAA,CAAc8uC,CAAA1b,SAAApzB,KAFhB,CAVK,CAlB+B,CAAxC,CAiCG,QAAQ,EAAG,CACZ/D,CAAAk8B,OAAA,CAAY4qC,CAAZ,CAAoB,WAApB,CADY,CAjCd,CAoCAU,EAAA,CAAYV,CAAZ,CArCmD,CAArD,CAsCG,CAAEprE,CAAAA,CAtCL,CAuCA,MACF,MAAKs3C,CAAAkB,eAAL,CACE4yB,CAAA,CAASA,CAAT,EAAmB,IAAAV,OAAA,EACfvzB;CAAAvoC,OAAJ,EACEmpC,CASA,CATQzzC,CAAAsK,OAAA,CAAYuoC,CAAAsB,OAAApwC,KAAZ,CASR,CARAsa,CAQA,CARO,EAQP,CAPA3lB,CAAA,CAAQm6C,CAAA33C,UAAR,CAAuB,QAAQ,CAACg4C,CAAD,CAAO,CACpC,IAAII,EAAWtzC,CAAAomE,OAAA,EACfpmE,EAAA0mE,QAAA,CAAaxzB,CAAb,CAAmBI,CAAnB,CACAj1B,EAAAtgB,KAAA,CAAUu1C,CAAV,CAHoC,CAAtC,CAOA,CAFA3T,CAEA,CAFa8T,CAEb,CAFqB,GAErB,CAF2Bp1B,CAAApb,KAAA,CAAU,GAAV,CAE3B,CAF4C,GAE5C,CADAjD,CAAAk8B,OAAA,CAAY4qC,CAAZ,CAAoBnnC,CAApB,CACA,CAAA6nC,CAAA,CAAYV,CAAZ,CAVF,GAYErzB,CAGA,CAHQzzC,CAAAomE,OAAA,EAGR,CAFA5yB,CAEA,CAFO,EAEP,CADAn1B,CACA,CADO,EACP,CAAAre,CAAA0mE,QAAA,CAAa7zB,CAAAsB,OAAb,CAAyBV,CAAzB,CAAgCD,CAAhC,CAAsC,QAAQ,EAAG,CAC/CxzC,CAAA0nE,IAAA,CAAS1nE,CAAAmoE,QAAA,CAAa10B,CAAb,CAAT,CAA8B,QAAQ,EAAG,CACvCzzC,CAAAsoE,sBAAA,CAA2B70B,CAA3B,CACA/6C,EAAA,CAAQm6C,CAAA33C,UAAR,CAAuB,QAAQ,CAACg4C,CAAD,CAAO,CACpClzC,CAAA0mE,QAAA,CAAaxzB,CAAb,CAAmBlzC,CAAAomE,OAAA,EAAnB,CAAkC9nE,IAAAA,EAAlC,CAA6C,QAAQ,CAACg1C,CAAD,CAAW,CAC9Dj1B,CAAAtgB,KAAA,CAAUiC,CAAAkyC,iBAAA,CAAsBoB,CAAtB,CAAV,CAD8D,CAAhE,CADoC,CAAtC,CAKIE,EAAAzvC,KAAJ,EACO/D,CAAAklB,MAAAmxB,gBAGL,EAFEr2C,CAAAkoE,oBAAA,CAAyB10B,CAAA56C,QAAzB,CAEF,CAAA+mC,CAAA,CAAa3/B,CAAAuoE,OAAA,CAAY/0B,CAAA56C,QAAZ,CAA0B46C,CAAAzvC,KAA1B,CAAqCyvC,CAAAS,SAArC,CAAb,CAAmE,GAAnE,CAAyE51B,CAAApb,KAAA,CAAU,GAAV,CAAzE,CAA0F,GAJ5F,EAME08B,CANF;AAMe8T,CANf,CAMuB,GANvB,CAM6Bp1B,CAAApb,KAAA,CAAU,GAAV,CAN7B,CAM8C,GAE9C08B,EAAA,CAAa3/B,CAAAkyC,iBAAA,CAAsBvS,CAAtB,CACb3/B,EAAAk8B,OAAA,CAAY4qC,CAAZ,CAAoBnnC,CAApB,CAhBuC,CAAzC,CAiBG,QAAQ,EAAG,CACZ3/B,CAAAk8B,OAAA,CAAY4qC,CAAZ,CAAoB,WAApB,CADY,CAjBd,CAoBAU,EAAA,CAAYV,CAAZ,CArB+C,CAAjD,CAfF,CAuCA,MACF,MAAK9zB,CAAAoB,qBAAL,CACEX,CAAA,CAAQ,IAAA2yB,OAAA,EACR5yB,EAAA,CAAO,EACP,IAAK,CAAAoB,EAAA,CAAa/B,CAAAW,KAAb,CAAL,CACE,KAAMxB,EAAA,CAAa,MAAb,CAAN,CAEF,IAAA00B,QAAA,CAAa7zB,CAAAW,KAAb,CAAuBl1C,IAAAA,EAAvB,CAAkCk1C,CAAlC,CAAwC,QAAQ,EAAG,CACjDxzC,CAAA0nE,IAAA,CAAS1nE,CAAAmoE,QAAA,CAAa30B,CAAA56C,QAAb,CAAT,CAAqC,QAAQ,EAAG,CAC9CoH,CAAA0mE,QAAA,CAAa7zB,CAAAY,MAAb,CAAwBA,CAAxB,CACAzzC,EAAAkoE,oBAAA,CAAyBloE,CAAAuoE,OAAA,CAAY/0B,CAAA56C,QAAZ,CAA0B46C,CAAAzvC,KAA1B,CAAqCyvC,CAAAS,SAArC,CAAzB,CACAj0C,EAAAooE,2BAAA,CAAgC50B,CAAA56C,QAAhC,CACA+mC,EAAA,CAAa3/B,CAAAuoE,OAAA,CAAY/0B,CAAA56C,QAAZ,CAA0B46C,CAAAzvC,KAA1B,CAAqCyvC,CAAAS,SAArC,CAAb,CAAmEpB,CAAAkC,SAAnE,CAAkFtB,CAClFzzC,EAAAk8B,OAAA,CAAY4qC,CAAZ,CAAoBnnC,CAApB,CACA6nC,EAAA,CAAYV,CAAZ,EAAsBnnC,CAAtB,CAN8C,CAAhD,CADiD,CAAnD,CASG,CATH,CAUA,MACF,MAAKqT,CAAAqB,gBAAL,CACEh2B,CAAA;AAAO,EACP3lB,EAAA,CAAQm6C,CAAAz4B,SAAR,CAAsB,QAAQ,CAAC84B,CAAD,CAAO,CACnClzC,CAAA0mE,QAAA,CAAaxzB,CAAb,CAAmBlzC,CAAAomE,OAAA,EAAnB,CAAkC9nE,IAAAA,EAAlC,CAA6C,QAAQ,CAACg1C,CAAD,CAAW,CAC9Dj1B,CAAAtgB,KAAA,CAAUu1C,CAAV,CAD8D,CAAhE,CADmC,CAArC,CAKA3T,EAAA,CAAa,GAAb,CAAmBthB,CAAApb,KAAA,CAAU,GAAV,CAAnB,CAAoC,GACpC,KAAAi5B,OAAA,CAAY4qC,CAAZ,CAAoBnnC,CAApB,CACA6nC,EAAA,CAAY7nC,CAAZ,CACA,MACF,MAAKqT,CAAAsB,iBAAL,CACEj2B,CAAA,CAAO,EACP41B,EAAA,CAAW,CAAA,CACXv7C,EAAA,CAAQm6C,CAAA0B,WAAR,CAAwB,QAAQ,CAACpd,CAAD,CAAW,CACrCA,CAAA8c,SAAJ,GACEA,CADF,CACa,CAAA,CADb,CADyC,CAA3C,CAKIA,EAAJ,EACE6yB,CAEA,CAFSA,CAET,EAFmB,IAAAV,OAAA,EAEnB,CADA,IAAAlqC,OAAA,CAAY4qC,CAAZ,CAAoB,IAApB,CACA,CAAApuE,CAAA,CAAQm6C,CAAA0B,WAAR,CAAwB,QAAQ,CAACpd,CAAD,CAAW,CACrCA,CAAA8c,SAAJ,EACET,CACA,CADOxzC,CAAAomE,OAAA,EACP,CAAApmE,CAAA0mE,QAAA,CAAavvC,CAAAt+B,IAAb,CAA2B26C,CAA3B,CAFF,EAIEA,CAJF,CAISrc,CAAAt+B,IAAAqG,KAAA,GAAsB8zC,CAAAc,WAAtB,CACI3c,CAAAt+B,IAAAkL,KADJ,CAEK,EAFL,CAEUozB,CAAAt+B,IAAAY,MAEnBg6C,EAAA,CAAQzzC,CAAAomE,OAAA,EACRpmE,EAAA0mE,QAAA,CAAavvC,CAAA19B,MAAb,CAA6Bg6C,CAA7B,CACAzzC,EAAAk8B,OAAA,CAAYl8B,CAAAuoE,OAAA,CAAYzB,CAAZ,CAAoBtzB,CAApB,CAA0Brc,CAAA8c,SAA1B,CAAZ,CAA0DR,CAA1D,CAXyC,CAA3C,CAHF,GAiBE/6C,CAAA,CAAQm6C,CAAA0B,WAAR,CAAwB,QAAQ,CAACpd,CAAD,CAAW,CACzCn3B,CAAA0mE,QAAA,CAAavvC,CAAA19B,MAAb;AAA6Bo5C,CAAA1oC,SAAA,CAAe7L,IAAAA,EAAf,CAA2B0B,CAAAomE,OAAA,EAAxD,CAAuE9nE,IAAAA,EAAvE,CAAkF,QAAQ,CAAC40C,CAAD,CAAO,CAC/F70B,CAAAtgB,KAAA,CAAUiC,CAAA8oC,OAAA,CACN3R,CAAAt+B,IAAAqG,KAAA,GAAsB8zC,CAAAc,WAAtB,CAAuC3c,CAAAt+B,IAAAkL,KAAvC,CACG,EADH,CACQozB,CAAAt+B,IAAAY,MAFF,CAAV,CAGI,GAHJ,CAGUy5C,CAHV,CAD+F,CAAjG,CADyC,CAA3C,CASA,CADAvT,CACA,CADa,GACb,CADmBthB,CAAApb,KAAA,CAAU,GAAV,CACnB,CADoC,GACpC,CAAA,IAAAi5B,OAAA,CAAY4qC,CAAZ,CAAoBnnC,CAApB,CA1BF,CA4BA6nC,EAAA,CAAYV,CAAZ,EAAsBnnC,CAAtB,CACA,MACF,MAAKqT,CAAAwB,eAAL,CACE,IAAAtY,OAAA,CAAY4qC,CAAZ,CAAoB,GAApB,CACAU,EAAA,CAAY,GAAZ,CACA,MACF,MAAKx0B,CAAAyB,iBAAL,CACE,IAAAvY,OAAA,CAAY4qC,CAAZ,CAAoB,GAApB,CACAU,EAAA,CAAY,GAAZ,CACA,MACF,MAAKx0B,CAAA8B,iBAAL,CACE,IAAA5Y,OAAA,CAAY4qC,CAAZ,CAAoB,GAApB,CACA,CAAAU,CAAA,CAAY,GAAZ,CAzOF,CAX4E,CArHxD,CA8WtBQ,kBAAmBA,QAAQ,CAAC5qE,CAAD,CAAU+5B,CAAV,CAAoB,CAC7C,IAAIt+B,EAAMuE,CAANvE,CAAgB,GAAhBA,CAAsBs+B,CAA1B,CACImvC,EAAM,IAAA5nC,QAAA,EAAA4nC,IACLA,EAAAvtE,eAAA,CAAmBF,CAAnB,CAAL,GACEytE,CAAA,CAAIztE,CAAJ,CADF,CACa,IAAAutE,OAAA,CAAY,CAAA,CAAZ,CAAmBhpE,CAAnB,CAA6B,KAA7B,CAAqC,IAAA0rC,OAAA,CAAY3R,CAAZ,CAArC,CAA6D,MAA7D,CAAsE/5B,CAAtE,CAAgF,GAAhF,CADb,CAGA,OAAOkpE,EAAA,CAAIztE,CAAJ,CANsC,CA9WzB;AAuXtBqjC,OAAQA,QAAQ,CAAC3U,CAAD,CAAK9tB,CAAL,CAAY,CAC1B,GAAK8tB,CAAL,CAEA,MADA,KAAAmX,QAAA,EAAA2I,KAAAtpC,KAAA,CAAyBwpB,CAAzB,CAA6B,GAA7B,CAAkC9tB,CAAlC,CAAyC,GAAzC,CACO8tB,CAAAA,CAHmB,CAvXN,CA6XtBjd,OAAQA,QAAQ,CAACk+D,CAAD,CAAa,CACtB,IAAAtjD,MAAA0iC,QAAA7uD,eAAA,CAAkCyvE,CAAlC,CAAL,GACE,IAAAtjD,MAAA0iC,QAAA,CAAmB4gB,CAAnB,CADF,CACmC,IAAApC,OAAA,CAAY,CAAA,CAAZ,CADnC,CAGA,OAAO,KAAAlhD,MAAA0iC,QAAA,CAAmB4gB,CAAnB,CAJoB,CA7XP,CAoYtB/1B,UAAWA,QAAQ,CAAClrB,CAAD,CAAKkhD,CAAL,CAAmB,CACpC,MAAO,YAAP,CAAsBlhD,CAAtB,CAA2B,GAA3B,CAAiC,IAAAuhB,OAAA,CAAY2/B,CAAZ,CAAjC,CAA6D,GADzB,CApYhB,CAwYtBX,KAAMA,QAAQ,CAACt0B,CAAD,CAAOC,CAAP,CAAc,CAC1B,MAAO,OAAP,CAAiBD,CAAjB,CAAwB,GAAxB,CAA8BC,CAA9B,CAAsC,GADZ,CAxYN,CA4YtBkzB,QAASA,QAAQ,CAACp/C,CAAD,CAAK,CACpB,IAAAmX,QAAA,EAAA2I,KAAAtpC,KAAA,CAAyB,SAAzB,CAAoCwpB,CAApC,CAAwC,GAAxC,CADoB,CA5YA,CAgZtBmgD,IAAKA,QAAQ,CAAC/qE,CAAD,CAAOi3C,CAAP,CAAkBC,CAAlB,CAA8B,CACzC,GAAa,CAAA,CAAb,GAAIl3C,CAAJ,CACEi3C,CAAA,EADF,KAEO,CACL,IAAIvM,EAAO,IAAA3I,QAAA,EAAA2I,KACXA,EAAAtpC,KAAA,CAAU,KAAV,CAAiBpB,CAAjB,CAAuB,IAAvB,CACAi3C,EAAA,EACAvM,EAAAtpC,KAAA,CAAU,GAAV,CACI81C,EAAJ,GACExM,CAAAtpC,KAAA,CAAU,OAAV,CAEA;AADA81C,CAAA,EACA,CAAAxM,CAAAtpC,KAAA,CAAU,GAAV,CAHF,CALK,CAHkC,CAhZrB,CAgatBgqE,IAAKA,QAAQ,CAACpoC,CAAD,CAAa,CACxB,MAAO,IAAP,CAAcA,CAAd,CAA2B,GADH,CAhaJ,CAoatBwoC,QAASA,QAAQ,CAACxoC,CAAD,CAAa,CAC5B,MAAOA,EAAP,CAAoB,QADQ,CApaR,CAwatBsoC,kBAAmBA,QAAQ,CAACz0B,CAAD,CAAOC,CAAP,CAAc,CAEvC,IAAIi1B,EAAoB,iBACxB,OAFsBC,0BAElBhsE,KAAA,CAAqB82C,CAArB,CAAJ,CACSD,CADT,CACgB,GADhB,CACsBC,CADtB,CAGSD,CAHT,CAGiB,IAHjB,CAGwBC,CAAAvyC,QAAA,CAAcwnE,CAAd,CAAiC,IAAAE,eAAjC,CAHxB,CAGgF,IANzC,CAxanB,CAkbtBhB,eAAgBA,QAAQ,CAACp0B,CAAD,CAAOC,CAAP,CAAc,CACpC,MAAOD,EAAP,CAAc,GAAd,CAAoBC,CAApB,CAA4B,GADQ,CAlbhB,CAsbtB80B,OAAQA,QAAQ,CAAC/0B,CAAD,CAAOC,CAAP,CAAcQ,CAAd,CAAwB,CACtC,MAAIA,EAAJ,CAAqB,IAAA2zB,eAAA,CAAoBp0B,CAApB,CAA0BC,CAA1B,CAArB,CACO,IAAAw0B,kBAAA,CAAuBz0B,CAAvB,CAA6BC,CAA7B,CAF+B,CAtblB,CA2btBy0B,oBAAqBA,QAAQ,CAACzvE,CAAD,CAAO,CAClC,IAAAimC,QAAA,EAAA2I,KAAAtpC,KAAA,CAAyB,IAAAm0C,iBAAA,CAAsBz5C,CAAtB,CAAzB,CAAsD,GAAtD,CADkC,CA3bd,CA+btB4vE,wBAAyBA,QAAQ,CAAC5vE,CAAD,CAAO,CACtC,IAAAimC,QAAA,EAAA2I,KAAAtpC,KAAA,CAAyB,IAAA+zC,qBAAA,CAA0Br5C,CAA1B,CAAzB;AAA0D,GAA1D,CADsC,CA/blB,CAmctB6vE,sBAAuBA,QAAQ,CAAC7vE,CAAD,CAAO,CACpC,IAAAimC,QAAA,EAAA2I,KAAAtpC,KAAA,CAAyB,IAAAq0C,mBAAA,CAAwB35C,CAAxB,CAAzB,CAAwD,GAAxD,CADoC,CAnchB,CAuctB2vE,2BAA4BA,QAAQ,CAAC3vE,CAAD,CAAO,CACzC,IAAAimC,QAAA,EAAA2I,KAAAtpC,KAAA,CAAyB,IAAAy0C,wBAAA,CAA6B/5C,CAA7B,CAAzB,CAA6D,GAA7D,CADyC,CAvcrB,CA2ctBy5C,iBAAkBA,QAAQ,CAACz5C,CAAD,CAAO,CAC/B,MAAO,mBAAP,CAA6BA,CAA7B,CAAoC,QADL,CA3cX,CA+ctBq5C,qBAAsBA,QAAQ,CAACr5C,CAAD,CAAO,CACnC,MAAO,uBAAP,CAAiCA,CAAjC,CAAwC,QADL,CA/cf,CAmdtB25C,mBAAoBA,QAAQ,CAAC35C,CAAD,CAAO,CACjC,MAAO,qBAAP,CAA+BA,CAA/B,CAAsC,QADL,CAndb,CAudtBw5C,eAAgBA,QAAQ,CAACx5C,CAAD,CAAO,CAC7B,IAAAyjC,OAAA,CAAYzjC,CAAZ,CAAkB,iBAAlB,CAAsCA,CAAtC,CAA6C,GAA7C,CAD6B,CAvdT,CA2dtB+5C,wBAAyBA,QAAQ,CAAC/5C,CAAD,CAAO,CACtC,MAAO,0BAAP;AAAoCA,CAApC,CAA2C,QADL,CA3dlB,CA+dtBovE,YAAaA,QAAQ,CAACh1B,CAAD,CAAMi0B,CAAN,CAAcS,CAAd,CAAsBC,CAAtB,CAAmC9rE,CAAnC,CAA2C+rE,CAA3C,CAA6D,CAChF,IAAIznE,EAAO,IACX,OAAO,SAAQ,EAAG,CAChBA,CAAA0mE,QAAA,CAAa7zB,CAAb,CAAkBi0B,CAAlB,CAA0BS,CAA1B,CAAkCC,CAAlC,CAA+C9rE,CAA/C,CAAuD+rE,CAAvD,CADgB,CAF8D,CA/d5D,CAsetBE,WAAYA,QAAQ,CAACpgD,CAAD,CAAK9tB,CAAL,CAAY,CAC9B,IAAIuG,EAAO,IACX,OAAO,SAAQ,EAAG,CAChBA,CAAAk8B,OAAA,CAAY3U,CAAZ,CAAgB9tB,CAAhB,CADgB,CAFY,CAteV,CA6etBovE,kBAAmB,gBA7eG,CA+etBD,eAAgBA,QAAQ,CAACE,CAAD,CAAI,CAC1B,MAAO,KAAP,CAAe7tE,CAAC,MAADA,CAAU6tE,CAAAnF,WAAA,CAAa,CAAb,CAAA1nE,SAAA,CAAyB,EAAzB,CAAVhB,OAAA,CAA+C,EAA/C,CADW,CA/eN,CAmftB6tC,OAAQA,QAAQ,CAACrvC,CAAD,CAAQ,CACtB,GAAItB,CAAA,CAASsB,CAAT,CAAJ,CAAqB,MAAO,GAAP,CAAaA,CAAAyH,QAAA,CAAc,IAAA2nE,kBAAd,CAAsC,IAAAD,eAAtC,CAAb,CAA0E,GAC/F,IAAIrwE,CAAA,CAASkB,CAAT,CAAJ,CAAqB,MAAOA,EAAAwC,SAAA,EAC5B,IAAc,CAAA,CAAd,GAAIxC,CAAJ,CAAoB,MAAO,MAC3B,IAAc,CAAA,CAAd,GAAIA,CAAJ,CAAqB,MAAO,OAC5B,IAAc,IAAd,GAAIA,CAAJ,CAAoB,MAAO,MAC3B,IAAqB,WAArB;AAAI,MAAOA,EAAX,CAAkC,MAAO,WAEzC,MAAMu4C,EAAA,CAAa,KAAb,CAAN,CARsB,CAnfF,CA8ftBo0B,OAAQA,QAAQ,CAAC2C,CAAD,CAAOC,CAAP,CAAa,CAC3B,IAAIzhD,EAAK,GAALA,CAAY,IAAArC,MAAAkhD,OAAA,EACX2C,EAAL,EACE,IAAArqC,QAAA,EAAA2nC,KAAAtoE,KAAA,CAAyBwpB,CAAzB,EAA+ByhD,CAAA,CAAO,GAAP,CAAaA,CAAb,CAAoB,EAAnD,EAEF,OAAOzhD,EALoB,CA9fP,CAsgBtBmX,QAASA,QAAQ,EAAG,CAClB,MAAO,KAAAxZ,MAAA,CAAW,IAAAA,MAAAuhD,UAAX,CADW,CAtgBE,CAihBxBtxB,GAAAn3B,UAAA,CAA2B,CACzB/Y,QAASA,QAAQ,CAAC06B,CAAD,CAAa0W,CAAb,CAA8B,CAC7C,IAAIr2C,EAAO,IAAX,CACI6yC,EAAM,IAAAqC,WAAArC,IAAA,CAAoBlT,CAApB,CACV,KAAAA,WAAA,CAAkBA,CAClB,KAAA0W,gBAAA,CAAuBA,CACvBzD,EAAA,CAAgCC,CAAhC,CAAqC7yC,CAAAoS,QAArC,CACA,KAAIm0D,CAAJ,CACIrqC,CACJ,IAAKqqC,CAAL,CAAkB1xB,EAAA,CAAchC,CAAd,CAAlB,CACE3W,CAAA,CAAS,IAAAwqC,QAAA,CAAaH,CAAb,CAEPnzB,EAAAA,CAAUsB,EAAA,CAAU7B,CAAAxL,KAAV,CACd,KAAI8P,CACA/D,EAAJ,GACE+D,CACA,CADS,EACT,CAAAz+C,CAAA,CAAQ06C,CAAR,CAAiB,QAAQ,CAAC2M,CAAD,CAAQlnD,CAAR,CAAa,CACpC,IAAI2S,EAAQxL,CAAA0mE,QAAA,CAAa3mB,CAAb,CACZA,EAAAv0C,MAAA,CAAcA,CACd2rC,EAAAp5C,KAAA,CAAYyN,CAAZ,CACAu0C,EAAAgnB,QAAA,CAAgBluE,CAJoB,CAAtC,CAFF,CASA,KAAI+gC,EAAc,EAClBlhC,EAAA,CAAQm6C,CAAAxL,KAAR,CAAkB,QAAQ,CAAC1H,CAAD,CAAa,CACrC/F,CAAA77B,KAAA,CAAiBiC,CAAA0mE,QAAA,CAAa/mC,CAAAA,WAAb,CAAjB,CADqC,CAAvC,CAGI1/B;CAAAA,CAAyB,CAApB,GAAA4yC,CAAAxL,KAAAhvC,OAAA,CAAwBsD,CAAxB,CACoB,CAApB,GAAAk3C,CAAAxL,KAAAhvC,OAAA,CAAwBuhC,CAAA,CAAY,CAAZ,CAAxB,CACA,QAAQ,CAAC50B,CAAD,CAAQob,CAAR,CAAgB,CACtB,IAAIub,CACJjjC,EAAA,CAAQkhC,CAAR,CAAqB,QAAQ,CAACkQ,CAAD,CAAM,CACjCnO,CAAA,CAAYmO,CAAA,CAAI9kC,CAAJ,CAAWob,CAAX,CADqB,CAAnC,CAGA,OAAOub,EALe,CAO7BO,EAAJ,GACEj8B,CAAAi8B,OADF,CACc+sC,QAAQ,CAACjkE,CAAD,CAAQvL,CAAR,CAAe2mB,CAAf,CAAuB,CACzC,MAAO8b,EAAA,CAAOl3B,CAAP,CAAcob,CAAd,CAAsB3mB,CAAtB,CADkC,CAD7C,CAKI09C,EAAJ,GACEl3C,CAAAk3C,OADF,CACcA,CADd,CAGAl3C,EAAAg8B,QAAA,CAAa+Y,EAAA,CAAUnC,CAAV,CACb5yC,EAAAkK,SAAA,CAAyB0oC,CAtkBpB1oC,SAukBL,OAAOlK,EA7CsC,CADtB,CAiDzBymE,QAASA,QAAQ,CAAC7zB,CAAD,CAAMj6C,CAAN,CAAe8C,CAAf,CAAuB,CAAA,IAClC83C,CADkC,CAC5BC,CAD4B,CACrBzzC,EAAO,IADc,CACRqe,CAC9B,IAAIw0B,CAAArnC,MAAJ,CACE,MAAO,KAAA2rC,OAAA,CAAYtE,CAAArnC,MAAZ,CAAuBqnC,CAAAk0B,QAAvB,CAET,QAAQl0B,CAAA3zC,KAAR,EACA,KAAK8zC,CAAAG,QAAL,CACE,MAAO,KAAA15C,MAAA,CAAWo5C,CAAAp5C,MAAX,CAAsBb,CAAtB,CACT,MAAKo6C,CAAAK,gBAAL,CAEE,MADAI,EACO,CADC,IAAAizB,QAAA,CAAa7zB,CAAAS,SAAb,CACD,CAAA,IAAA,CAAK,OAAL,CAAeT,CAAAkC,SAAf,CAAA,CAA6BtB,CAA7B,CAAoC76C,CAApC,CACT,MAAKo6C,CAAAO,iBAAL,CAGE,MAFAC,EAEO,CAFA,IAAAkzB,QAAA,CAAa7zB,CAAAW,KAAb,CAEA;AADPC,CACO,CADC,IAAAizB,QAAA,CAAa7zB,CAAAY,MAAb,CACD,CAAA,IAAA,CAAK,QAAL,CAAgBZ,CAAAkC,SAAhB,CAAA,CAA8BvB,CAA9B,CAAoCC,CAApC,CAA2C76C,CAA3C,CACT,MAAKo6C,CAAAU,kBAAL,CAGE,MAFAF,EAEO,CAFA,IAAAkzB,QAAA,CAAa7zB,CAAAW,KAAb,CAEA,CADPC,CACO,CADC,IAAAizB,QAAA,CAAa7zB,CAAAY,MAAb,CACD,CAAA,IAAA,CAAK,QAAL,CAAgBZ,CAAAkC,SAAhB,CAAA,CAA8BvB,CAA9B,CAAoCC,CAApC,CAA2C76C,CAA3C,CACT,MAAKo6C,CAAAW,sBAAL,CACE,MAAO,KAAA,CAAK,WAAL,CAAA,CACL,IAAA+yB,QAAA,CAAa7zB,CAAAl2C,KAAb,CADK,CAEL,IAAA+pE,QAAA,CAAa7zB,CAAAe,UAAb,CAFK,CAGL,IAAA8yB,QAAA,CAAa7zB,CAAAgB,WAAb,CAHK,CAILj7C,CAJK,CAMT,MAAKo6C,CAAAc,WAAL,CAEE,MADAhC,GAAA,CAAqBe,CAAA9uC,KAArB,CAA+B/D,CAAA2/B,WAA/B,CACO,CAAA3/B,CAAA+zB,WAAA,CAAgB8e,CAAA9uC,KAAhB,CACgB/D,CAAAq2C,gBADhB,EACwCjB,EAAA,CAA8BvC,CAAA9uC,KAA9B,CADxC,CAEgBnL,CAFhB,CAEyB8C,CAFzB,CAEiCsE,CAAA2/B,WAFjC,CAGT,MAAKqT,CAAAe,iBAAL,CAOE,MANAP,EAMO,CANA,IAAAkzB,QAAA,CAAa7zB,CAAAmB,OAAb,CAAyB,CAAA,CAAzB,CAAgC,CAAEt4C,CAAAA,CAAlC,CAMA,CALFm3C,CAAAoB,SAKE,GAJLnC,EAAA,CAAqBe,CAAA1b,SAAApzB,KAArB;AAAwC/D,CAAA2/B,WAAxC,CACA,CAAA8T,CAAA,CAAQZ,CAAA1b,SAAApzB,KAGH,EADH8uC,CAAAoB,SACG,GADWR,CACX,CADmB,IAAAizB,QAAA,CAAa7zB,CAAA1b,SAAb,CACnB,EAAA0b,CAAAoB,SAAA,CACL,IAAA2zB,eAAA,CAAoBp0B,CAApB,CAA0BC,CAA1B,CAAiC76C,CAAjC,CAA0C8C,CAA1C,CAAkDsE,CAAA2/B,WAAlD,CADK,CAEL,IAAAsoC,kBAAA,CAAuBz0B,CAAvB,CAA6BC,CAA7B,CAAoCzzC,CAAAq2C,gBAApC,CAA0Dz9C,CAA1D,CAAmE8C,CAAnE,CAA2EsE,CAAA2/B,WAA3E,CACJ,MAAKqT,CAAAkB,eAAL,CAOE,MANA71B,EAMO,CANA,EAMA,CALP3lB,CAAA,CAAQm6C,CAAA33C,UAAR,CAAuB,QAAQ,CAACg4C,CAAD,CAAO,CACpC70B,CAAAtgB,KAAA,CAAUiC,CAAA0mE,QAAA,CAAaxzB,CAAb,CAAV,CADoC,CAAtC,CAKO,CAFHL,CAAAvoC,OAEG,GAFSmpC,CAET,CAFiB,IAAArhC,QAAA,CAAaygC,CAAAsB,OAAApwC,KAAb,CAEjB,EADF8uC,CAAAvoC,OACE,GADUmpC,CACV,CADkB,IAAAizB,QAAA,CAAa7zB,CAAAsB,OAAb,CAAyB,CAAA,CAAzB,CAClB,EAAAtB,CAAAvoC,OAAA,CACL,QAAQ,CAACtF,CAAD,CAAQob,CAAR,CAAgB8b,CAAhB,CAAwBib,CAAxB,CAAgC,CAEtC,IADA,IAAItY,EAAS,EAAb,CACSvlC,EAAI,CAAb,CAAgBA,CAAhB,CAAoB+kB,CAAAhmB,OAApB,CAAiC,EAAEiB,CAAnC,CACEulC,CAAA9gC,KAAA,CAAYsgB,CAAA,CAAK/kB,CAAL,CAAA,CAAQ0L,CAAR,CAAeob,CAAf,CAAuB8b,CAAvB,CAA+Bib,CAA/B,CAAZ,CAEE19C,EAAAA,CAAQg6C,CAAArzC,MAAA,CAAY9B,IAAAA,EAAZ,CAAuBugC,CAAvB,CAA+BsY,CAA/B,CACZ,OAAOv+C,EAAA,CAAU,CAACA,QAAS0F,IAAAA,EAAV,CAAqByF,KAAMzF,IAAAA,EAA3B,CAAsC7E,MAAOA,CAA7C,CAAV;AAAgEA,CANjC,CADnC,CASL,QAAQ,CAACuL,CAAD,CAAQob,CAAR,CAAgB8b,CAAhB,CAAwBib,CAAxB,CAAgC,CACtC,IAAI+xB,EAAMz1B,CAAA,CAAMzuC,CAAN,CAAaob,CAAb,CAAqB8b,CAArB,CAA6Bib,CAA7B,CAAV,CACI19C,CACJ,IAAiB,IAAjB,EAAIyvE,CAAAzvE,MAAJ,CAAuB,CACrBy4C,EAAA,CAAiBg3B,CAAAtwE,QAAjB,CAA8BoH,CAAA2/B,WAA9B,CACAyS,GAAA,CAAmB82B,CAAAzvE,MAAnB,CAA8BuG,CAAA2/B,WAA9B,CACId,EAAAA,CAAS,EACb,KAAS,IAAAvlC,EAAI,CAAb,CAAgBA,CAAhB,CAAoB+kB,CAAAhmB,OAApB,CAAiC,EAAEiB,CAAnC,CACEulC,CAAA9gC,KAAA,CAAYm0C,EAAA,CAAiB7zB,CAAA,CAAK/kB,CAAL,CAAA,CAAQ0L,CAAR,CAAeob,CAAf,CAAuB8b,CAAvB,CAA+Bib,CAA/B,CAAjB,CAAyDn3C,CAAA2/B,WAAzD,CAAZ,CAEFlmC,EAAA,CAAQy4C,EAAA,CAAiBg3B,CAAAzvE,MAAA2G,MAAA,CAAgB8oE,CAAAtwE,QAAhB,CAA6BimC,CAA7B,CAAjB,CAAuD7+B,CAAA2/B,WAAvD,CAPa,CASvB,MAAO/mC,EAAA,CAAU,CAACa,MAAOA,CAAR,CAAV,CAA2BA,CAZI,CAc5C,MAAKu5C,CAAAoB,qBAAL,CAGE,MAFAZ,EAEO,CAFA,IAAAkzB,QAAA,CAAa7zB,CAAAW,KAAb,CAAuB,CAAA,CAAvB,CAA6B,CAA7B,CAEA,CADPC,CACO,CADC,IAAAizB,QAAA,CAAa7zB,CAAAY,MAAb,CACD,CAAA,QAAQ,CAACzuC,CAAD,CAAQob,CAAR,CAAgB8b,CAAhB,CAAwBib,CAAxB,CAAgC,CAC7C,IAAIgyB,EAAM31B,CAAA,CAAKxuC,CAAL,CAAYob,CAAZ,CAAoB8b,CAApB,CAA4Bib,CAA5B,CACN+xB,EAAAA,CAAMz1B,CAAA,CAAMzuC,CAAN,CAAaob,CAAb,CAAqB8b,CAArB,CAA6Bib,CAA7B,CACVjF,GAAA,CAAiBi3B,CAAA1vE,MAAjB,CAA4BuG,CAAA2/B,WAA5B,CACA6S,GAAA,CAAwB22B,CAAAvwE,QAAxB,CACAuwE,EAAAvwE,QAAA,CAAYuwE,CAAAplE,KAAZ,CAAA,CAAwBmlE,CACxB,OAAOtwE,EAAA,CAAU,CAACa,MAAOyvE,CAAR,CAAV,CAAyBA,CANa,CAQjD,MAAKl2B,CAAAqB,gBAAL,CAKE,MAJAh2B,EAIO,CAJA,EAIA,CAHP3lB,CAAA,CAAQm6C,CAAAz4B,SAAR;AAAsB,QAAQ,CAAC84B,CAAD,CAAO,CACnC70B,CAAAtgB,KAAA,CAAUiC,CAAA0mE,QAAA,CAAaxzB,CAAb,CAAV,CADmC,CAArC,CAGO,CAAA,QAAQ,CAACluC,CAAD,CAAQob,CAAR,CAAgB8b,CAAhB,CAAwBib,CAAxB,CAAgC,CAE7C,IADA,IAAI19C,EAAQ,EAAZ,CACSH,EAAI,CAAb,CAAgBA,CAAhB,CAAoB+kB,CAAAhmB,OAApB,CAAiC,EAAEiB,CAAnC,CACEG,CAAAsE,KAAA,CAAWsgB,CAAA,CAAK/kB,CAAL,CAAA,CAAQ0L,CAAR,CAAeob,CAAf,CAAuB8b,CAAvB,CAA+Bib,CAA/B,CAAX,CAEF,OAAOv+C,EAAA,CAAU,CAACa,MAAOA,CAAR,CAAV,CAA2BA,CALW,CAOjD,MAAKu5C,CAAAsB,iBAAL,CAiBE,MAhBAj2B,EAgBO,CAhBA,EAgBA,CAfP3lB,CAAA,CAAQm6C,CAAA0B,WAAR,CAAwB,QAAQ,CAACpd,CAAD,CAAW,CACrCA,CAAA8c,SAAJ,CACE51B,CAAAtgB,KAAA,CAAU,CAAClF,IAAKmH,CAAA0mE,QAAA,CAAavvC,CAAAt+B,IAAb,CAAN,CACCo7C,SAAU,CAAA,CADX,CAECx6C,MAAOuG,CAAA0mE,QAAA,CAAavvC,CAAA19B,MAAb,CAFR,CAAV,CADF,CAME4kB,CAAAtgB,KAAA,CAAU,CAAClF,IAAKs+B,CAAAt+B,IAAAqG,KAAA,GAAsB8zC,CAAAc,WAAtB,CACA3c,CAAAt+B,IAAAkL,KADA,CAEC,EAFD,CAEMozB,CAAAt+B,IAAAY,MAFZ,CAGCw6C,SAAU,CAAA,CAHX,CAICx6C,MAAOuG,CAAA0mE,QAAA,CAAavvC,CAAA19B,MAAb,CAJR,CAAV,CAPuC,CAA3C,CAeO,CAAA,QAAQ,CAACuL,CAAD,CAAQob,CAAR,CAAgB8b,CAAhB,CAAwBib,CAAxB,CAAgC,CAE7C,IADA,IAAI19C,EAAQ,EAAZ,CACSH,EAAI,CAAb,CAAgBA,CAAhB,CAAoB+kB,CAAAhmB,OAApB,CAAiC,EAAEiB,CAAnC,CACM+kB,CAAA,CAAK/kB,CAAL,CAAA26C,SAAJ,CACEx6C,CAAA,CAAM4kB,CAAA,CAAK/kB,CAAL,CAAAT,IAAA,CAAYmM,CAAZ,CAAmBob,CAAnB,CAA2B8b,CAA3B,CAAmCib,CAAnC,CAAN,CADF,CACsD94B,CAAA,CAAK/kB,CAAL,CAAAG,MAAA,CAAcuL,CAAd,CAAqBob,CAArB,CAA6B8b,CAA7B,CAAqCib,CAArC,CADtD,CAGE19C,CAAA,CAAM4kB,CAAA,CAAK/kB,CAAL,CAAAT,IAAN,CAHF,CAGuBwlB,CAAA,CAAK/kB,CAAL,CAAAG,MAAA,CAAcuL,CAAd;AAAqBob,CAArB,CAA6B8b,CAA7B,CAAqCib,CAArC,CAGzB,OAAOv+C,EAAA,CAAU,CAACa,MAAOA,CAAR,CAAV,CAA2BA,CATW,CAWjD,MAAKu5C,CAAAwB,eAAL,CACE,MAAO,SAAQ,CAACxvC,CAAD,CAAQ,CACrB,MAAOpM,EAAA,CAAU,CAACa,MAAOuL,CAAR,CAAV,CAA2BA,CADb,CAGzB,MAAKguC,CAAAyB,iBAAL,CACE,MAAO,SAAQ,CAACzvC,CAAD,CAAQob,CAAR,CAAgB,CAC7B,MAAOxnB,EAAA,CAAU,CAACa,MAAO2mB,CAAR,CAAV,CAA4BA,CADN,CAGjC,MAAK4yB,CAAA8B,iBAAL,CACE,MAAO,SAAQ,CAAC9vC,CAAD,CAAQob,CAAR,CAAgB8b,CAAhB,CAAwB,CACrC,MAAOtjC,EAAA,CAAU,CAACa,MAAOyiC,CAAR,CAAV,CAA4BA,CADE,CA9HzC,CALsC,CAjDf,CA0LzB,SAAUktC,QAAQ,CAAC91B,CAAD,CAAW16C,CAAX,CAAoB,CACpC,MAAO,SAAQ,CAACoM,CAAD,CAAQob,CAAR,CAAgB8b,CAAhB,CAAwBib,CAAxB,CAAgC,CACzCvvC,CAAAA,CAAM0rC,CAAA,CAAStuC,CAAT,CAAgBob,CAAhB,CAAwB8b,CAAxB,CAAgCib,CAAhC,CAERvvC,EAAA,CADEzL,CAAA,CAAUyL,CAAV,CAAJ,CACQ,CAACA,CADT,CAGQ,CAER,OAAOhP,EAAA,CAAU,CAACa,MAAOmO,CAAR,CAAV,CAAyBA,CAPa,CADX,CA1Lb,CAqMzB,SAAUyhE,QAAQ,CAAC/1B,CAAD,CAAW16C,CAAX,CAAoB,CACpC,MAAO,SAAQ,CAACoM,CAAD,CAAQob,CAAR,CAAgB8b,CAAhB,CAAwBib,CAAxB,CAAgC,CACzCvvC,CAAAA,CAAM0rC,CAAA,CAAStuC,CAAT,CAAgBob,CAAhB,CAAwB8b,CAAxB,CAAgCib,CAAhC,CAERvvC,EAAA,CADEzL,CAAA,CAAUyL,CAAV,CAAJ,CACQ,CAACA,CADT,CAGQ,CAER,OAAOhP,EAAA,CAAU,CAACa,MAAOmO,CAAR,CAAV,CAAyBA,CAPa,CADX,CArMb,CAgNzB,SAAU0hE,QAAQ,CAACh2B,CAAD,CAAW16C,CAAX,CAAoB,CACpC,MAAO,SAAQ,CAACoM,CAAD,CAAQob,CAAR,CAAgB8b,CAAhB,CAAwBib,CAAxB,CAAgC,CACzCvvC,CAAAA,CAAM,CAAC0rC,CAAA,CAAStuC,CAAT,CAAgBob,CAAhB,CAAwB8b,CAAxB,CAAgCib,CAAhC,CACX,OAAOv+C,EAAA,CAAU,CAACa,MAAOmO,CAAR,CAAV;AAAyBA,CAFa,CADX,CAhNb,CAsNzB,UAAW2hE,QAAQ,CAAC/1B,CAAD,CAAOC,CAAP,CAAc76C,CAAd,CAAuB,CACxC,MAAO,SAAQ,CAACoM,CAAD,CAAQob,CAAR,CAAgB8b,CAAhB,CAAwBib,CAAxB,CAAgC,CAC7C,IAAIgyB,EAAM31B,CAAA,CAAKxuC,CAAL,CAAYob,CAAZ,CAAoB8b,CAApB,CAA4Bib,CAA5B,CACN+xB,EAAAA,CAAMz1B,CAAA,CAAMzuC,CAAN,CAAaob,CAAb,CAAqB8b,CAArB,CAA6Bib,CAA7B,CACNvvC,EAAAA,CAAM8qC,EAAA,CAAOy2B,CAAP,CAAYD,CAAZ,CACV,OAAOtwE,EAAA,CAAU,CAACa,MAAOmO,CAAR,CAAV,CAAyBA,CAJa,CADP,CAtNjB,CA8NzB,UAAW4hE,QAAQ,CAACh2B,CAAD,CAAOC,CAAP,CAAc76C,CAAd,CAAuB,CACxC,MAAO,SAAQ,CAACoM,CAAD,CAAQob,CAAR,CAAgB8b,CAAhB,CAAwBib,CAAxB,CAAgC,CAC7C,IAAIgyB,EAAM31B,CAAA,CAAKxuC,CAAL,CAAYob,CAAZ,CAAoB8b,CAApB,CAA4Bib,CAA5B,CACN+xB,EAAAA,CAAMz1B,CAAA,CAAMzuC,CAAN,CAAaob,CAAb,CAAqB8b,CAArB,CAA6Bib,CAA7B,CACNvvC,EAAAA,EAAOzL,CAAA,CAAUgtE,CAAV,CAAA,CAAiBA,CAAjB,CAAuB,CAA9BvhE,GAAoCzL,CAAA,CAAU+sE,CAAV,CAAA,CAAiBA,CAAjB,CAAuB,CAA3DthE,CACJ,OAAOhP,EAAA,CAAU,CAACa,MAAOmO,CAAR,CAAV,CAAyBA,CAJa,CADP,CA9NjB,CAsOzB,UAAW6hE,QAAQ,CAACj2B,CAAD,CAAOC,CAAP,CAAc76C,CAAd,CAAuB,CACxC,MAAO,SAAQ,CAACoM,CAAD,CAAQob,CAAR,CAAgB8b,CAAhB,CAAwBib,CAAxB,CAAgC,CACzCvvC,CAAAA,CAAM4rC,CAAA,CAAKxuC,CAAL,CAAYob,CAAZ,CAAoB8b,CAApB,CAA4Bib,CAA5B,CAANvvC,CAA4C6rC,CAAA,CAAMzuC,CAAN,CAAaob,CAAb,CAAqB8b,CAArB,CAA6Bib,CAA7B,CAChD,OAAOv+C,EAAA,CAAU,CAACa,MAAOmO,CAAR,CAAV,CAAyBA,CAFa,CADP,CAtOjB,CA4OzB,UAAW8hE,QAAQ,CAACl2B,CAAD,CAAOC,CAAP,CAAc76C,CAAd,CAAuB,CACxC,MAAO,SAAQ,CAACoM,CAAD,CAAQob,CAAR,CAAgB8b,CAAhB,CAAwBib,CAAxB,CAAgC,CACzCvvC,CAAAA,CAAM4rC,CAAA,CAAKxuC,CAAL,CAAYob,CAAZ,CAAoB8b,CAApB,CAA4Bib,CAA5B,CAANvvC,CAA4C6rC,CAAA,CAAMzuC,CAAN,CAAaob,CAAb,CAAqB8b,CAArB,CAA6Bib,CAA7B,CAChD,OAAOv+C,EAAA,CAAU,CAACa,MAAOmO,CAAR,CAAV,CAAyBA,CAFa,CADP,CA5OjB,CAkPzB,UAAW+hE,QAAQ,CAACn2B,CAAD,CAAOC,CAAP,CAAc76C,CAAd,CAAuB,CACxC,MAAO,SAAQ,CAACoM,CAAD,CAAQob,CAAR,CAAgB8b,CAAhB,CAAwBib,CAAxB,CAAgC,CACzCvvC,CAAAA,CAAM4rC,CAAA,CAAKxuC,CAAL,CAAYob,CAAZ;AAAoB8b,CAApB,CAA4Bib,CAA5B,CAANvvC,CAA4C6rC,CAAA,CAAMzuC,CAAN,CAAaob,CAAb,CAAqB8b,CAArB,CAA6Bib,CAA7B,CAChD,OAAOv+C,EAAA,CAAU,CAACa,MAAOmO,CAAR,CAAV,CAAyBA,CAFa,CADP,CAlPjB,CAwPzB,YAAagiE,QAAQ,CAACp2B,CAAD,CAAOC,CAAP,CAAc76C,CAAd,CAAuB,CAC1C,MAAO,SAAQ,CAACoM,CAAD,CAAQob,CAAR,CAAgB8b,CAAhB,CAAwBib,CAAxB,CAAgC,CACzCvvC,CAAAA,CAAM4rC,CAAA,CAAKxuC,CAAL,CAAYob,CAAZ,CAAoB8b,CAApB,CAA4Bib,CAA5B,CAANvvC,GAA8C6rC,CAAA,CAAMzuC,CAAN,CAAaob,CAAb,CAAqB8b,CAArB,CAA6Bib,CAA7B,CAClD,OAAOv+C,EAAA,CAAU,CAACa,MAAOmO,CAAR,CAAV,CAAyBA,CAFa,CADL,CAxPnB,CA8PzB,YAAaiiE,QAAQ,CAACr2B,CAAD,CAAOC,CAAP,CAAc76C,CAAd,CAAuB,CAC1C,MAAO,SAAQ,CAACoM,CAAD,CAAQob,CAAR,CAAgB8b,CAAhB,CAAwBib,CAAxB,CAAgC,CACzCvvC,CAAAA,CAAM4rC,CAAA,CAAKxuC,CAAL,CAAYob,CAAZ,CAAoB8b,CAApB,CAA4Bib,CAA5B,CAANvvC,GAA8C6rC,CAAA,CAAMzuC,CAAN,CAAaob,CAAb,CAAqB8b,CAArB,CAA6Bib,CAA7B,CAClD,OAAOv+C,EAAA,CAAU,CAACa,MAAOmO,CAAR,CAAV,CAAyBA,CAFa,CADL,CA9PnB,CAoQzB,WAAYkiE,QAAQ,CAACt2B,CAAD,CAAOC,CAAP,CAAc76C,CAAd,CAAuB,CACzC,MAAO,SAAQ,CAACoM,CAAD,CAAQob,CAAR,CAAgB8b,CAAhB,CAAwBib,CAAxB,CAAgC,CACzCvvC,CAAAA,CAAM4rC,CAAA,CAAKxuC,CAAL,CAAYob,CAAZ,CAAoB8b,CAApB,CAA4Bib,CAA5B,CAANvvC,EAA6C6rC,CAAA,CAAMzuC,CAAN,CAAaob,CAAb,CAAqB8b,CAArB,CAA6Bib,CAA7B,CACjD,OAAOv+C,EAAA,CAAU,CAACa,MAAOmO,CAAR,CAAV,CAAyBA,CAFa,CADN,CApQlB,CA0QzB,WAAYmiE,QAAQ,CAACv2B,CAAD,CAAOC,CAAP,CAAc76C,CAAd,CAAuB,CACzC,MAAO,SAAQ,CAACoM,CAAD,CAAQob,CAAR,CAAgB8b,CAAhB,CAAwBib,CAAxB,CAAgC,CACzCvvC,CAAAA,CAAM4rC,CAAA,CAAKxuC,CAAL,CAAYob,CAAZ,CAAoB8b,CAApB,CAA4Bib,CAA5B,CAANvvC,EAA6C6rC,CAAA,CAAMzuC,CAAN,CAAaob,CAAb,CAAqB8b,CAArB,CAA6Bib,CAA7B,CACjD,OAAOv+C,EAAA,CAAU,CAACa,MAAOmO,CAAR,CAAV,CAAyBA,CAFa,CADN,CA1QlB,CAgRzB,UAAWoiE,QAAQ,CAACx2B,CAAD,CAAOC,CAAP,CAAc76C,CAAd,CAAuB,CACxC,MAAO,SAAQ,CAACoM,CAAD,CAAQob,CAAR,CAAgB8b,CAAhB,CAAwBib,CAAxB,CAAgC,CACzCvvC,CAAAA,CAAM4rC,CAAA,CAAKxuC,CAAL,CAAYob,CAAZ;AAAoB8b,CAApB,CAA4Bib,CAA5B,CAANvvC,CAA4C6rC,CAAA,CAAMzuC,CAAN,CAAaob,CAAb,CAAqB8b,CAArB,CAA6Bib,CAA7B,CAChD,OAAOv+C,EAAA,CAAU,CAACa,MAAOmO,CAAR,CAAV,CAAyBA,CAFa,CADP,CAhRjB,CAsRzB,UAAWqiE,QAAQ,CAACz2B,CAAD,CAAOC,CAAP,CAAc76C,CAAd,CAAuB,CACxC,MAAO,SAAQ,CAACoM,CAAD,CAAQob,CAAR,CAAgB8b,CAAhB,CAAwBib,CAAxB,CAAgC,CACzCvvC,CAAAA,CAAM4rC,CAAA,CAAKxuC,CAAL,CAAYob,CAAZ,CAAoB8b,CAApB,CAA4Bib,CAA5B,CAANvvC,CAA4C6rC,CAAA,CAAMzuC,CAAN,CAAaob,CAAb,CAAqB8b,CAArB,CAA6Bib,CAA7B,CAChD,OAAOv+C,EAAA,CAAU,CAACa,MAAOmO,CAAR,CAAV,CAAyBA,CAFa,CADP,CAtRjB,CA4RzB,WAAYsiE,QAAQ,CAAC12B,CAAD,CAAOC,CAAP,CAAc76C,CAAd,CAAuB,CACzC,MAAO,SAAQ,CAACoM,CAAD,CAAQob,CAAR,CAAgB8b,CAAhB,CAAwBib,CAAxB,CAAgC,CACzCvvC,CAAAA,CAAM4rC,CAAA,CAAKxuC,CAAL,CAAYob,CAAZ,CAAoB8b,CAApB,CAA4Bib,CAA5B,CAANvvC,EAA6C6rC,CAAA,CAAMzuC,CAAN,CAAaob,CAAb,CAAqB8b,CAArB,CAA6Bib,CAA7B,CACjD,OAAOv+C,EAAA,CAAU,CAACa,MAAOmO,CAAR,CAAV,CAAyBA,CAFa,CADN,CA5RlB,CAkSzB,WAAYuiE,QAAQ,CAAC32B,CAAD,CAAOC,CAAP,CAAc76C,CAAd,CAAuB,CACzC,MAAO,SAAQ,CAACoM,CAAD,CAAQob,CAAR,CAAgB8b,CAAhB,CAAwBib,CAAxB,CAAgC,CACzCvvC,CAAAA,CAAM4rC,CAAA,CAAKxuC,CAAL,CAAYob,CAAZ,CAAoB8b,CAApB,CAA4Bib,CAA5B,CAANvvC,EAA6C6rC,CAAA,CAAMzuC,CAAN,CAAaob,CAAb,CAAqB8b,CAArB,CAA6Bib,CAA7B,CACjD,OAAOv+C,EAAA,CAAU,CAACa,MAAOmO,CAAR,CAAV,CAAyBA,CAFa,CADN,CAlSlB,CAwSzB,WAAYwiE,QAAQ,CAAC52B,CAAD,CAAOC,CAAP,CAAc76C,CAAd,CAAuB,CACzC,MAAO,SAAQ,CAACoM,CAAD,CAAQob,CAAR,CAAgB8b,CAAhB,CAAwBib,CAAxB,CAAgC,CACzCvvC,CAAAA,CAAM4rC,CAAA,CAAKxuC,CAAL,CAAYob,CAAZ,CAAoB8b,CAApB,CAA4Bib,CAA5B,CAANvvC,EAA6C6rC,CAAA,CAAMzuC,CAAN,CAAaob,CAAb,CAAqB8b,CAArB,CAA6Bib,CAA7B,CACjD,OAAOv+C,EAAA,CAAU,CAACa,MAAOmO,CAAR,CAAV,CAAyBA,CAFa,CADN,CAxSlB,CA8SzB,WAAYyiE,QAAQ,CAAC72B,CAAD,CAAOC,CAAP,CAAc76C,CAAd,CAAuB,CACzC,MAAO,SAAQ,CAACoM,CAAD,CAAQob,CAAR,CAAgB8b,CAAhB,CAAwBib,CAAxB,CAAgC,CACzCvvC,CAAAA,CAAM4rC,CAAA,CAAKxuC,CAAL,CAAYob,CAAZ,CAAoB8b,CAApB,CAA4Bib,CAA5B,CAANvvC;AAA6C6rC,CAAA,CAAMzuC,CAAN,CAAaob,CAAb,CAAqB8b,CAArB,CAA6Bib,CAA7B,CACjD,OAAOv+C,EAAA,CAAU,CAACa,MAAOmO,CAAR,CAAV,CAAyBA,CAFa,CADN,CA9SlB,CAoTzB,YAAa0iE,QAAQ,CAAC3tE,CAAD,CAAOi3C,CAAP,CAAkBC,CAAlB,CAA8Bj7C,CAA9B,CAAuC,CAC1D,MAAO,SAAQ,CAACoM,CAAD,CAAQob,CAAR,CAAgB8b,CAAhB,CAAwBib,CAAxB,CAAgC,CACzCvvC,CAAAA,CAAMjL,CAAA,CAAKqI,CAAL,CAAYob,CAAZ,CAAoB8b,CAApB,CAA4Bib,CAA5B,CAAA,CAAsCvD,CAAA,CAAU5uC,CAAV,CAAiBob,CAAjB,CAAyB8b,CAAzB,CAAiCib,CAAjC,CAAtC,CAAiFtD,CAAA,CAAW7uC,CAAX,CAAkBob,CAAlB,CAA0B8b,CAA1B,CAAkCib,CAAlC,CAC3F,OAAOv+C,EAAA,CAAU,CAACa,MAAOmO,CAAR,CAAV,CAAyBA,CAFa,CADW,CApTnC,CA0TzBnO,MAAOA,QAAQ,CAACA,CAAD,CAAQb,CAAR,CAAiB,CAC9B,MAAO,SAAQ,EAAG,CAAE,MAAOA,EAAA,CAAU,CAACA,QAAS0F,IAAAA,EAAV,CAAqByF,KAAMzF,IAAAA,EAA3B,CAAsC7E,MAAOA,CAA7C,CAAV,CAAgEA,CAAzE,CADY,CA1TP,CA6TzBs6B,WAAYA,QAAQ,CAAChwB,CAAD,CAAOsyC,CAAP,CAAwBz9C,CAAxB,CAAiC8C,CAAjC,CAAyCikC,CAAzC,CAAqD,CACvE,MAAO,SAAQ,CAAC36B,CAAD,CAAQob,CAAR,CAAgB8b,CAAhB,CAAwBib,CAAxB,CAAgC,CACzClK,CAAAA,CAAO7sB,CAAA,EAAWrc,CAAX,GAAmBqc,EAAnB,CAA6BA,CAA7B,CAAsCpb,CAC7CtJ,EAAJ,EAAyB,CAAzB,GAAcA,CAAd,EAA8BuxC,CAA9B,EAAwC,CAAAA,CAAA,CAAKlpC,CAAL,CAAxC,GACEkpC,CAAA,CAAKlpC,CAAL,CADF,CACe,EADf,CAGItK,EAAAA,CAAQwzC,CAAA,CAAOA,CAAA,CAAKlpC,CAAL,CAAP,CAAoBzF,IAAAA,EAC5B+3C,EAAJ,EACEnE,EAAA,CAAiBz4C,CAAjB,CAAwBkmC,CAAxB,CAEF,OAAI/mC,EAAJ,CACS,CAACA,QAASq0C,CAAV,CAAgBlpC,KAAMA,CAAtB,CAA4BtK,MAAOA,CAAnC,CADT,CAGSA,CAZoC,CADwB,CA7ThD,CA8UzBmuE,eAAgBA,QAAQ,CAACp0B,CAAD,CAAOC,CAAP,CAAc76C,CAAd,CAAuB8C,CAAvB,CAA+BikC,CAA/B,CAA2C,CACjE,MAAO,SAAQ,CAAC36B,CAAD,CAAQob,CAAR,CAAgB8b,CAAhB,CAAwBib,CAAxB,CAAgC,CAC7C,IAAIgyB,EAAM31B,CAAA,CAAKxuC,CAAL,CAAYob,CAAZ,CAAoB8b,CAApB,CAA4Bib,CAA5B,CAAV,CACI+xB,CADJ,CAEIzvE,CACO,KAAX,EAAI0vE,CAAJ,GACED,CAUA,CAVMz1B,CAAA,CAAMzuC,CAAN;AAAaob,CAAb,CAAqB8b,CAArB,CAA6Bib,CAA7B,CAUN,CATA+xB,CASA,EAnnDQ,EAmnDR,CARAp3B,EAAA,CAAqBo3B,CAArB,CAA0BvpC,CAA1B,CAQA,CAPIjkC,CAOJ,EAPyB,CAOzB,GAPcA,CAOd,GANE82C,EAAA,CAAwB22B,CAAxB,CACA,CAAIA,CAAJ,EAAa,CAAAA,CAAA,CAAID,CAAJ,CAAb,GACEC,CAAA,CAAID,CAAJ,CADF,CACa,EADb,CAKF,EADAzvE,CACA,CADQ0vE,CAAA,CAAID,CAAJ,CACR,CAAAh3B,EAAA,CAAiBz4C,CAAjB,CAAwBkmC,CAAxB,CAXF,CAaA,OAAI/mC,EAAJ,CACS,CAACA,QAASuwE,CAAV,CAAeplE,KAAMmlE,CAArB,CAA0BzvE,MAAOA,CAAjC,CADT,CAGSA,CApBoC,CADkB,CA9U1C,CAuWzBwuE,kBAAmBA,QAAQ,CAACz0B,CAAD,CAAOC,CAAP,CAAc4C,CAAd,CAA+Bz9C,CAA/B,CAAwC8C,CAAxC,CAAgDikC,CAAhD,CAA4D,CACrF,MAAO,SAAQ,CAAC36B,CAAD,CAAQob,CAAR,CAAgB8b,CAAhB,CAAwBib,CAAxB,CAAgC,CACzCgyB,CAAAA,CAAM31B,CAAA,CAAKxuC,CAAL,CAAYob,CAAZ,CAAoB8b,CAApB,CAA4Bib,CAA5B,CACNz7C,EAAJ,EAAyB,CAAzB,GAAcA,CAAd,GACE82C,EAAA,CAAwB22B,CAAxB,CACA,CAAIA,CAAJ,EAAa,CAAAA,CAAA,CAAI11B,CAAJ,CAAb,GACE01B,CAAA,CAAI11B,CAAJ,CADF,CACe,EADf,CAFF,CAMIh6C,EAAAA,CAAe,IAAP,EAAA0vE,CAAA,CAAcA,CAAA,CAAI11B,CAAJ,CAAd,CAA2Bn1C,IAAAA,EACvC,EAAI+3C,CAAJ,EAAuBjB,EAAA,CAA8B3B,CAA9B,CAAvB,GACEvB,EAAA,CAAiBz4C,CAAjB,CAAwBkmC,CAAxB,CAEF,OAAI/mC,EAAJ,CACS,CAACA,QAASuwE,CAAV,CAAeplE,KAAM0vC,CAArB,CAA4Bh6C,MAAOA,CAAnC,CADT,CAGSA,CAfoC,CADsC,CAvW9D,CA2XzB09C,OAAQA,QAAQ,CAAC3rC,CAAD,CAAQu7D,CAAR,CAAiB,CAC/B,MAAO,SAAQ,CAAC/hE,CAAD,CAAQvL,CAAR,CAAe2mB,CAAf,CAAuB+2B,CAAvB,CAA+B,CAC5C,MAAIA,EAAJ,CAAmBA,CAAA,CAAO4vB,CAAP,CAAnB,CACOv7D,CAAA,CAAMxG,CAAN,CAAavL,CAAb,CAAoB2mB,CAApB,CAFqC,CADf,CA3XR,CAsY3B,KAAI42B,GAASA,QAAQ,CAACH,CAAD,CAAQzkC,CAAR,CAAiB+Q,CAAjB,CAA0B,CAC7C,IAAA0zB,MAAA,CAAaA,CACb,KAAAzkC,QAAA,CAAeA,CACf,KAAA+Q,QAAA,CAAeA,CACf,KAAA0vB,IAAA,CAAW,IAAIG,CAAJ,CAAQ6D,CAAR,CAAe1zB,CAAf,CACX,KAAAonD,YAAA,CAAmBpnD,CAAAnY,IAAA,CAAc,IAAImqC,EAAJ,CAAmB,IAAAtC,IAAnB;AAA6BzgC,CAA7B,CAAd,CACc,IAAI6iC,EAAJ,CAAgB,IAAApC,IAAhB,CAA0BzgC,CAA1B,CANY,CAS/C4kC,GAAAh5B,UAAA,CAAmB,CACjBzf,YAAay4C,EADI,CAGjBl2C,MAAOA,QAAQ,CAACq4B,CAAD,CAAO,CACpB,MAAO,KAAAoxC,YAAAtlE,QAAA,CAAyBk0B,CAAzB,CAA+B,IAAAhW,QAAAkzB,gBAA/B,CADa,CAHL,CAYnB,KAAIf,GAAgBh9C,MAAA0lB,UAAAvjB,QAApB,CAm7EIsnD,GAAajqD,CAAA,CAAO,MAAP,CAn7EjB,CAq7EIsqD,GAAe,CACjBpoB,KAAM,MADW,CAEjBqpB,IAAK,KAFY,CAGjBC,IAAK,KAHY,CAMjBrpB,aAAc,aANG,CAOjBspB,GAAI,IAPa,CAr7EnB,CA6iHI0C,GAAyBnuD,CAAA,CAAO,UAAP,CA7iH7B,CAm3HIovD,EAAiBrvD,CAAA0I,SAAAoW,cAAA,CAA8B,GAA9B,CAn3HrB,CAo3HIywC,GAAY/e,CAAA,CAAWxwC,CAAA+N,SAAAof,KAAX,CAsLhBqiC,GAAAhnC,QAAA,CAAyB,CAAC,WAAD,CAyGzBhO,GAAAgO,QAAA,CAA0B,CAAC,UAAD,CAqU1B,KAAIsqC,GAAa,EAAjB,CACIR,GAAc,GADlB,CAEIO,GAAY,GAsDhB5C,GAAAznC,QAAA,CAAyB,CAAC,SAAD,CA0EzB+nC,GAAA/nC,QAAA,CAAuB,CAAC,SAAD,CAuTvB,KAAI0uC,GAAe,CACjBiG,KAAMrI,EAAA,CAAW,UAAX,CAAuB,CAAvB,CAA0B,CAA1B,CAA6B,CAAA,CAA7B,CAAoC,CAAA,CAApC,CADW,CAEf6d,GAAI7d,EAAA,CAAW,UAAX,CAAuB,CAAvB,CAA0B,CAA1B;AAA6B,CAAA,CAA7B,CAAmC,CAAA,CAAnC,CAFW,CAGd8d,EAAG9d,EAAA,CAAW,UAAX,CAAuB,CAAvB,CAA0B,CAA1B,CAA6B,CAAA,CAA7B,CAAoC,CAAA,CAApC,CAHW,CAIjB+d,KAAM9d,EAAA,CAAc,OAAd,CAJW,CAKhB+d,IAAK/d,EAAA,CAAc,OAAd,CAAuB,CAAA,CAAvB,CALW,CAMfqI,GAAItI,EAAA,CAAW,OAAX,CAAoB,CAApB,CAAuB,CAAvB,CANW,CAOdie,EAAGje,EAAA,CAAW,OAAX,CAAoB,CAApB,CAAuB,CAAvB,CAPW,CAQjBke,KAAMje,EAAA,CAAc,OAAd,CAAuB,CAAA,CAAvB,CAA8B,CAAA,CAA9B,CARW,CASfsI,GAAIvI,EAAA,CAAW,MAAX,CAAmB,CAAnB,CATW,CAUd5qB,EAAG4qB,EAAA,CAAW,MAAX,CAAmB,CAAnB,CAVW,CAWfwI,GAAIxI,EAAA,CAAW,OAAX,CAAoB,CAApB,CAXW,CAYdme,EAAGne,EAAA,CAAW,OAAX,CAAoB,CAApB,CAZW,CAafoe,GAAIpe,EAAA,CAAW,OAAX,CAAoB,CAApB,CAAwB,GAAxB,CAbW,CAcd3yD,EAAG2yD,EAAA,CAAW,OAAX,CAAoB,CAApB,CAAwB,GAAxB,CAdW,CAef0I,GAAI1I,EAAA,CAAW,SAAX,CAAsB,CAAtB,CAfW,CAgBd4B,EAAG5B,EAAA,CAAW,SAAX,CAAsB,CAAtB,CAhBW,CAiBf2I,GAAI3I,EAAA,CAAW,SAAX,CAAsB,CAAtB,CAjBW,CAkBd6B,EAAG7B,EAAA,CAAW,SAAX,CAAsB,CAAtB,CAlBW,CAqBhB6I,IAAK7I,EAAA,CAAW,cAAX,CAA2B,CAA3B,CArBW,CAsBjBqe,KAAMpe,EAAA,CAAc,KAAd,CAtBW,CAuBhBqe,IAAKre,EAAA,CAAc,KAAd,CAAqB,CAAA,CAArB,CAvBW,CAwBdthD,EApCL4/D,QAAmB,CAAC3pE,CAAD,CAAOkoD,CAAP,CAAgB,CACjC,MAAyB,GAAlB,CAAAloD,CAAA6zD,SAAA,EAAA,CAAuB3L,CAAA0hB,MAAA,CAAc,CAAd,CAAvB,CAA0C1hB,CAAA0hB,MAAA,CAAc,CAAd,CADhB,CAYhB,CAyBdC,EAzELC,QAAuB,CAAC9pE,CAAD,CAAOkoD,CAAP,CAAgB1zC,CAAhB,CAAwB,CACzCu1D,CAAAA,CAAQ,EAARA,CAAYv1D,CAMhB,OAHAw1D,EAGA,EAL0B,CAATA,EAACD,CAADC,CAAc,GAAdA,CAAoB,EAKrC,GAHchf,EAAA,CAAUx1B,IAAA,CAAY,CAAP,CAAAu0C,CAAA,CAAW,OAAX,CAAqB,MAA1B,CAAA,CAAkCA,CAAlC;AAAyC,EAAzC,CAAV,CAAwD,CAAxD,CAGd,CAFc/e,EAAA,CAAUx1B,IAAA40B,IAAA,CAAS2f,CAAT,CAAgB,EAAhB,CAAV,CAA+B,CAA/B,CAEd,CAP6C,CAgD5B,CA0BfE,GAAIre,EAAA,CAAW,CAAX,CA1BW,CA2Bdse,EAAGte,EAAA,CAAW,CAAX,CA3BW,CA4Bdue,EAAGhe,EA5BW,CA6Bdie,GAAIje,EA7BU,CA8Bdke,IAAKle,EA9BS,CA+Bdme,KAnCLC,QAAsB,CAACvqE,CAAD,CAAOkoD,CAAP,CAAgB,CACpC,MAA6B,EAAtB,EAAAloD,CAAA8rD,YAAA,EAAA,CAA0B5D,CAAAsiB,SAAA,CAAiB,CAAjB,CAA1B,CAAgDtiB,CAAAsiB,SAAA,CAAiB,CAAjB,CADnB,CAInB,CAAnB,CAkCIjd,GAAqB,0FAlCzB,CAmCID,GAAgB,UAgGpB9G,GAAA1nC,QAAA,CAAqB,CAAC,SAAD,CA8HrB,KAAI8nC,GAAkBrsD,EAAA,CAAQuB,CAAR,CAAtB,CAWIirD,GAAkBxsD,EAAA,CAAQgP,EAAR,CAyqBtBu9C,GAAAhoC,QAAA,CAAwB,CAAC,QAAD,CAuKxB,KAAI9U,GAAsBzP,EAAA,CAAQ,CAChCkuB,SAAU,GADsB,CAEhC/kB,QAASA,QAAQ,CAAC7H,CAAD,CAAUN,CAAV,CAAgB,CAC/B,GAAKkoB,CAAAloB,CAAAkoB,KAAL,EAAmBgnD,CAAAlvE,CAAAkvE,UAAnB,CACE,MAAO,SAAQ,CAAChnE,CAAD,CAAQ5H,CAAR,CAAiB,CAE9B,GAA0C,GAA1C,GAAIA,CAAA,CAAQ,CAAR,CAAAxC,SAAA0L,YAAA,EAAJ,CAAA,CAGA,IAAI0e,EAA+C,4BAAxC,GAAA/oB,EAAAjD,KAAA,CAAcoE,CAAAP,KAAA,CAAa,MAAb,CAAd,CAAA;AACA,YADA,CACe,MAC1BO,EAAAyJ,GAAA,CAAW,OAAX,CAAoB,QAAQ,CAAC6U,CAAD,CAAQ,CAE7Bte,CAAAN,KAAA,CAAakoB,CAAb,CAAL,EACEtJ,CAAA40B,eAAA,EAHgC,CAApC,CALA,CAF8B,CAFH,CAFD,CAAR,CAA1B,CA2WI5/B,GAA6B,EAGjChY,EAAA,CAAQ4iB,EAAR,CAAsB,QAAQ,CAAC2wD,CAAD,CAAWjjD,CAAX,CAAqB,CAIjDkjD,QAASA,EAAa,CAAClnE,CAAD,CAAQ5H,CAAR,CAAiBN,CAAjB,CAAuB,CAC3CkI,CAAAzI,OAAA,CAAaO,CAAA,CAAKqvE,CAAL,CAAb,CAA+BC,QAAiC,CAAC3yE,CAAD,CAAQ,CACtEqD,CAAAg7B,KAAA,CAAU9O,CAAV,CAAoB,CAAEvvB,CAAAA,CAAtB,CADsE,CAAxE,CAD2C,CAF7C,GAAgB,UAAhB,EAAIwyE,CAAJ,CAAA,CAQA,IAAIE,EAAap8C,EAAA,CAAmB,KAAnB,CAA2B/G,CAA3B,CAAjB,CACIsI,EAAS46C,CAEI,UAAjB,GAAID,CAAJ,GACE36C,CADF,CACWA,QAAQ,CAACtsB,CAAD,CAAQ5H,CAAR,CAAiBN,CAAjB,CAAuB,CAElCA,CAAAqS,QAAJ,GAAqBrS,CAAA,CAAKqvE,CAAL,CAArB,EACED,CAAA,CAAclnE,CAAd,CAAqB5H,CAArB,CAA8BN,CAA9B,CAHoC,CAD1C,CASA4T,GAAA,CAA2By7D,CAA3B,CAAA,CAAyC,QAAQ,EAAG,CAClD,MAAO,CACLniD,SAAU,GADL,CAELD,SAAU,GAFL,CAGL/C,KAAMsK,CAHD,CAD2C,CApBpD,CAFiD,CAAnD,CAgCA54B,EAAA,CAAQ4kC,EAAR,CAAsB,QAAQ,CAAC+uC,CAAD,CAAW/oE,CAAX,CAAmB,CAC/CoN,EAAA,CAA2BpN,CAA3B,CAAA,CAAqC,QAAQ,EAAG,CAC9C,MAAO,CACLymB,SAAU,GADL,CAEL/C,KAAMA,QAAQ,CAAChiB,CAAD,CAAQ5H,CAAR,CAAiBN,CAAjB,CAAuB,CAGnC,GAAe,WAAf,GAAIwG,CAAJ,EAA0D,GAA1D,EAA8BxG,CAAA6S,UAAAhQ,OAAA,CAAsB,CAAtB,CAA9B,GACMX,CADN,CACclC,CAAA6S,UAAA3Q,MAAA,CAAqB25D,EAArB,CADd,EAEa,CACT77D,CAAAg7B,KAAA,CAAU,WAAV;AAAuB,IAAIn9B,MAAJ,CAAWqE,CAAA,CAAM,CAAN,CAAX,CAAqBA,CAAA,CAAM,CAAN,CAArB,CAAvB,CACA,OAFS,CAMbgG,CAAAzI,OAAA,CAAaO,CAAA,CAAKwG,CAAL,CAAb,CAA2BgpE,QAA+B,CAAC7yE,CAAD,CAAQ,CAChEqD,CAAAg7B,KAAA,CAAUx0B,CAAV,CAAkB7J,CAAlB,CADgE,CAAlE,CAXmC,CAFhC,CADuC,CADD,CAAjD,CAwBAf,EAAA,CAAQ,CAAC,KAAD,CAAQ,QAAR,CAAkB,MAAlB,CAAR,CAAmC,QAAQ,CAACswB,CAAD,CAAW,CACpD,IAAImjD,EAAap8C,EAAA,CAAmB,KAAnB,CAA2B/G,CAA3B,CACjBtY,GAAA,CAA2By7D,CAA3B,CAAA,CAAyC,QAAQ,EAAG,CAClD,MAAO,CACLpiD,SAAU,EADL,CAEL/C,KAAMA,QAAQ,CAAChiB,CAAD,CAAQ5H,CAAR,CAAiBN,CAAjB,CAAuB,CAAA,IAC/BmvE,EAAWjjD,CADoB,CAE/BjlB,EAAOilB,CAEM,OAAjB,GAAIA,CAAJ,EAC4C,4BAD5C,GACI/sB,EAAAjD,KAAA,CAAcoE,CAAAP,KAAA,CAAa,MAAb,CAAd,CADJ,GAEEkH,CAEA,CAFO,WAEP,CADAjH,CAAA+uB,MAAA,CAAW9nB,CAAX,CACA,CADmB,YACnB,CAAAkoE,CAAA,CAAW,IAJb,CAOAnvE,EAAAi/B,SAAA,CAAcowC,CAAd,CAA0B,QAAQ,CAAC1yE,CAAD,CAAQ,CACnCA,CAAL,EAOAqD,CAAAg7B,KAAA,CAAU/zB,CAAV,CAAgBtK,CAAhB,CAMA,CAAI8mB,EAAJ,EAAY0rD,CAAZ,EAAsB7uE,CAAAP,KAAA,CAAaovE,CAAb,CAAuBnvE,CAAA,CAAKiH,CAAL,CAAvB,CAbtB,EACmB,MADnB,GACMilB,CADN,EAEIlsB,CAAAg7B,KAAA,CAAU/zB,CAAV,CAAgB,IAAhB,CAHoC,CAA1C,CAXmC,CAFhC,CAD2C,CAFA,CAAtD,CAzurBkB,KAgxrBdytD,GAAe,CACjBM,YAAan2D,CADI,CAEjBq2D,gBASFua,QAA8B,CAAC5a,CAAD,CAAU5tD,CAAV,CAAgB,CAC5C4tD,CAAAV,MAAA,CAAgBltD,CAD4B,CAX3B,CAGjBquD,eAAgBz2D,CAHC,CAIjB22D,aAAc32D,CAJG;AAKjB+2D,UAAW/2D,CALM,CAMjBm3D,aAAcn3D,CANG,CAOjBy3D,cAAez3D,CAPE,CA0DnBi1D,GAAAvwC,QAAA,CAAyB,CAAC,UAAD,CAAa,QAAb,CAAuB,QAAvB,CAAiC,UAAjC,CAA6C,cAA7C,CAmZzB,KAAImsD,GAAuBA,QAAQ,CAACC,CAAD,CAAW,CAC5C,MAAO,CAAC,UAAD,CAAa,QAAb,CAAuB,QAAQ,CAACz3D,CAAD,CAAWpB,CAAX,CAAmB,CAuEvD84D,QAASA,EAAS,CAAC/sC,CAAD,CAAa,CAC7B,MAAmB,EAAnB,GAAIA,CAAJ,CAES/rB,CAAA,CAAO,UAAP,CAAAsoB,OAFT,CAIOtoB,CAAA,CAAO+rB,CAAP,CAAAzD,OAJP,EAIoCvgC,CALP,CAF/B,MApEoBiQ,CAClB7H,KAAM,MADY6H,CAElBoe,SAAUyiD,CAAA,CAAW,KAAX,CAAmB,GAFX7gE,CAGlBud,QAAS,CAAC,MAAD,CAAS,SAAT,CAHSvd,CAIlB5E,WAAY4pD,EAJMhlD,CAKlB3G,QAAS0nE,QAAsB,CAACC,CAAD,CAAc9vE,CAAd,CAAoB,CAEjD8vE,CAAAxvD,SAAA,CAAqBw1C,EAArB,CAAAx1C,SAAA,CAA8Ci7C,EAA9C,CAEA,KAAIwU,EAAW/vE,CAAAiH,KAAA,CAAY,MAAZ,CAAsB0oE,CAAA,EAAY3vE,CAAAuQ,OAAZ,CAA0B,QAA1B,CAAqC,CAAA,CAE1E,OAAO,CACL8kB,IAAK26C,QAAsB,CAAC9nE,CAAD,CAAQ4nE,CAAR,CAAqB9vE,CAArB,CAA2BiwE,CAA3B,CAAkC,CAC3D,IAAI/lE,EAAa+lE,CAAA,CAAM,CAAN,CAGjB,IAAM,EAAA,QAAA,EAAYjwE,EAAZ,CAAN,CAAyB,CAOvB,IAAIkwE,EAAuBA,QAAQ,CAACtxD,CAAD,CAAQ,CACzC1W,CAAAE,OAAA,CAAa,QAAQ,EAAG,CACtB8B,CAAA4qD,iBAAA,EACA5qD;CAAAosD,cAAA,EAFsB,CAAxB,CAKA13C,EAAA40B,eAAA,EANyC,CASxBs8B,EAAAxvE,CAAY,CAAZA,CAzhnB3BmqC,iBAAA,CAyhnB2CroC,QAzhnB3C,CAyhnBqD8tE,CAzhnBrD,CAAmC,CAAA,CAAnC,CA6hnBQJ,EAAA/lE,GAAA,CAAe,UAAf,CAA2B,QAAQ,EAAG,CACpCmO,CAAA,CAAS,QAAQ,EAAG,CACI43D,CAAAxvE,CAAY,CAAZA,CA5hnBlC4b,oBAAA,CA4hnBkD9Z,QA5hnBlD,CA4hnB4D8tE,CA5hnB5D,CAAsC,CAAA,CAAtC,CA2hnB8B,CAApB,CAEG,CAFH,CAEM,CAAA,CAFN,CADoC,CAAtC,CApBuB,CA4BzBlb,CADqBib,CAAA,CAAM,CAAN,CACrBjb,EADiC9qD,CAAAuqD,aACjCO,aAAA,CAA2B9qD,CAA3B,CAEA,KAAIimE,EAASJ,CAAA,CAAWH,CAAA,CAAU1lE,CAAAiqD,MAAV,CAAX,CAAyCt1D,CAElDkxE,EAAJ,GACEI,CAAA,CAAOjoE,CAAP,CAAcgC,CAAd,CACA,CAAAlK,CAAAi/B,SAAA,CAAc8wC,CAAd,CAAwB,QAAQ,CAACvyC,CAAD,CAAW,CACrCtzB,CAAAiqD,MAAJ,GAAyB32B,CAAzB,GACA2yC,CAAA,CAAOjoE,CAAP,CAAc1G,IAAAA,EAAd,CAGA,CAFA0I,CAAAuqD,aAAAS,gBAAA,CAAwChrD,CAAxC,CAAoDszB,CAApD,CAEA,CADA2yC,CACA,CADSP,CAAA,CAAU1lE,CAAAiqD,MAAV,CACT,CAAAgc,CAAA,CAAOjoE,CAAP,CAAcgC,CAAd,CAJA,CADyC,CAA3C,CAFF,CAUA4lE,EAAA/lE,GAAA,CAAe,UAAf,CAA2B,QAAQ,EAAG,CACpCG,CAAAuqD,aAAAa,eAAA,CAAuCprD,CAAvC,CACAimE,EAAA,CAAOjoE,CAAP,CAAc1G,IAAAA,EAAd,CACAtD,EAAA,CAAOgM,CAAP,CAAmBwqD,EAAnB,CAHoC,CAAtC,CA9C2D,CADxD,CAN0C,CALjC5lD,CADmC,CAAlD,CADqC,CAA9C,CAkFIA,GAAgB4gE,EAAA,EAlFpB,CAmFIl/D,GAAkBk/D,EAAA,CAAqB,CAAA,CAArB,CAnFtB,CA+FIzX,GAAkB,+EA/FtB;AA4GImY,GAAa,sHA5GjB,CA8GIC,GAAe,8LA9GnB,CAgHIC,GAAgB,mDAhHpB,CAiHIC,GAAc,4BAjHlB,CAkHIC,GAAuB,gEAlH3B,CAmHIC,GAAc,oBAnHlB,CAoHIC,GAAe,mBApHnB;AAqHIC,GAAc,yCArHlB,CAwHItZ,GAA2Bz0D,CAAA,EAC/BhH,EAAA,CAAQ,CAAA,MAAA,CAAA,gBAAA,CAAA,OAAA,CAAA,MAAA,CAAA,MAAA,CAAR,CAA0D,QAAQ,CAACwG,CAAD,CAAO,CACvEi1D,EAAA,CAAyBj1D,CAAzB,CAAA,CAAiC,CAAA,CADsC,CAAzE,CAIA,KAAIwuE,GAAY,CAgGd,KAs8BFC,QAAsB,CAAC3oE,CAAD,CAAQ5H,CAAR,CAAiBN,CAAjB,CAAuB01D,CAAvB,CAA6Bh+C,CAA7B,CAAuC9C,CAAvC,CAAiD,CACrE+hD,EAAA,CAAczuD,CAAd,CAAqB5H,CAArB,CAA8BN,CAA9B,CAAoC01D,CAApC,CAA0Ch+C,CAA1C,CAAoD9C,CAApD,CACA4hD,GAAA,CAAqBd,CAArB,CAFqE,CAtiCvD,CAuMd,KAAQoD,EAAA,CAAoB,MAApB,CAA4ByX,EAA5B,CACDzY,EAAA,CAAiByY,EAAjB,CAA8B,CAAC,MAAD,CAAS,IAAT,CAAe,IAAf,CAA9B,CADC,CAED,YAFC,CAvMM,CA8Sd,iBAAkBzX,EAAA,CAAoB,eAApB,CAAqC0X,EAArC,CACd1Y,EAAA,CAAiB0Y,EAAjB,CAAuC,yBAAA,MAAA,CAAA,GAAA,CAAvC,CADc,CAEd,yBAFc,CA9SJ,CAsZd,KAAQ1X,EAAA,CAAoB,MAApB,CAA4B6X,EAA5B,CACJ7Y,EAAA,CAAiB6Y,EAAjB,CAA8B,CAAC,IAAD,CAAO,IAAP,CAAa,IAAb,CAAmB,KAAnB,CAA9B,CADI,CAEL,cAFK,CAtZM,CA+fd,KAAQ7X,EAAA,CAAoB,MAApB,CAA4B2X,EAA5B,CA0pBVK,QAAmB,CAACC,CAAD,CAAUC,CAAV,CAAwB,CACzC,GAAIvzE,EAAA,CAAOszE,CAAP,CAAJ,CACE,MAAOA,EAGT,IAAI11E,CAAA,CAAS01E,CAAT,CAAJ,CAAuB,CACrBN,EAAAtuE,UAAA,CAAwB,CACxB,KAAI6D,EAAQyqE,EAAA12D,KAAA,CAAiBg3D,CAAjB,CACZ;GAAI/qE,CAAJ,CAAW,CAAA,IACLkqD,EAAO,CAAClqD,CAAA,CAAM,CAAN,CADH,CAELirE,EAAO,CAACjrE,CAAA,CAAM,CAAN,CAFH,CAILhB,EADAksE,CACAlsE,CADQ,CAHH,CAKLmsE,EAAU,CALL,CAMLC,EAAe,CANV,CAOL9gB,EAAaL,EAAA,CAAuBC,CAAvB,CAPR,CAQLmhB,EAAuB,CAAvBA,EAAWJ,CAAXI,CAAkB,CAAlBA,CAEAL,EAAJ,GACEE,CAGA,CAHQF,CAAA1Y,SAAA,EAGR,CAFAtzD,CAEA,CAFUgsE,CAAAjsE,WAAA,EAEV,CADAosE,CACA,CADUH,CAAAvY,WAAA,EACV,CAAA2Y,CAAA,CAAeJ,CAAArY,gBAAA,EAJjB,CAOA,OAAO,KAAIj7D,IAAJ,CAASwyD,CAAT,CAAe,CAAf,CAAkBI,CAAAI,QAAA,EAAlB,CAAyC2gB,CAAzC,CAAkDH,CAAlD,CAAyDlsE,CAAzD,CAAkEmsE,CAAlE,CAA2EC,CAA3E,CAjBE,CAHU,CAwBvB,MAAOvY,IA7BkC,CA1pBjC,CAAqD,UAArD,CA/fM,CAumBd,MAASC,EAAA,CAAoB,OAApB,CAA6B4X,EAA7B,CACN5Y,EAAA,CAAiB4Y,EAAjB,CAA+B,CAAC,MAAD,CAAS,IAAT,CAA/B,CADM,CAEN,SAFM,CAvmBK,CAstBd,OAwmBFY,QAAwB,CAACppE,CAAD,CAAQ5H,CAAR,CAAiBN,CAAjB,CAAuB01D,CAAvB,CAA6Bh+C,CAA7B,CAAuC9C,CAAvC,CAAiD,CACvEukD,EAAA,CAAgBjxD,CAAhB,CAAuB5H,CAAvB,CAAgCN,CAAhC,CAAsC01D,CAAtC,CACAiB,GAAA,CAAczuD,CAAd,CAAqB5H,CAArB,CAA8BN,CAA9B,CAAoC01D,CAApC,CAA0Ch+C,CAA1C,CAAoD9C,CAApD,CAEA8gD,EAAA4D,aAAA,CAAoB,QACpB5D,EAAA6D,SAAAt4D,KAAA,CAAmB,QAAQ,CAACtE,CAAD,CAAQ,CACjC,GAAI+4D,CAAAgB,SAAA,CAAc/5D,CAAd,CAAJ,CAA+B,MAAO,KACtC,IAAI2zE,EAAAzwE,KAAA,CAAmBlD,CAAnB,CAAJ,CAA+B,MAAOi1D,WAAA,CAAWj1D,CAAX,CAFL,CAAnC,CAMA+4D,EAAAe,YAAAx1D,KAAA,CAAsB,QAAQ,CAACtE,CAAD,CAAQ,CACpC,GAAK,CAAA+4D,CAAAgB,SAAA,CAAc/5D,CAAd,CAAL,CAA2B,CACzB,GAAK,CAAAlB,CAAA,CAASkB,CAAT,CAAL,CACE,KAAM88D,GAAA,CAAc,QAAd;AAAyD98D,CAAzD,CAAN,CAEFA,CAAA,CAAQA,CAAAwC,SAAA,EAJiB,CAM3B,MAAOxC,EAP6B,CAAtC,CAUA,IAAI0C,CAAA,CAAUW,CAAAkuD,IAAV,CAAJ,EAA2BluD,CAAA05D,MAA3B,CAAuC,CACrC,IAAIC,CACJjE,EAAAkE,YAAA1L,IAAA,CAAuB2L,QAAQ,CAACl9D,CAAD,CAAQ,CACrC,MAAO+4D,EAAAgB,SAAA,CAAc/5D,CAAd,CAAP,EAA+ByC,CAAA,CAAYu6D,CAAZ,CAA/B,EAAsDh9D,CAAtD,EAA+Dg9D,CAD1B,CAIvC35D,EAAAi/B,SAAA,CAAc,KAAd,CAAqB,QAAQ,CAACz7B,CAAD,CAAM,CAC7BnE,CAAA,CAAUmE,CAAV,CAAJ,EAAuB,CAAA/H,CAAA,CAAS+H,CAAT,CAAvB,GACEA,CADF,CACQouD,UAAA,CAAWpuD,CAAX,CADR,CAGAm2D,EAAA,CAASl+D,CAAA,CAAS+H,CAAT,CAAA,EAAkB,CAAAe,KAAA,CAAMf,CAAN,CAAlB,CAA+BA,CAA/B,CAAqChC,IAAAA,EAE9Ck0D,EAAAoE,UAAA,EANiC,CAAnC,CANqC,CAgBvC,GAAIz6D,CAAA,CAAUW,CAAAk6B,IAAV,CAAJ,EAA2Bl6B,CAAA+5D,MAA3B,CAAuC,CACrC,IAAIC,CACJtE,EAAAkE,YAAA1/B,IAAA,CAAuB+/B,QAAQ,CAACt9D,CAAD,CAAQ,CACrC,MAAO+4D,EAAAgB,SAAA,CAAc/5D,CAAd,CAAP,EAA+ByC,CAAA,CAAY46D,CAAZ,CAA/B,EAAsDr9D,CAAtD,EAA+Dq9D,CAD1B,CAIvCh6D,EAAAi/B,SAAA,CAAc,KAAd,CAAqB,QAAQ,CAACz7B,CAAD,CAAM,CAC7BnE,CAAA,CAAUmE,CAAV,CAAJ,EAAuB,CAAA/H,CAAA,CAAS+H,CAAT,CAAvB,GACEA,CADF,CACQouD,UAAA,CAAWpuD,CAAX,CADR,CAGAw2D,EAAA,CAASv+D,CAAA,CAAS+H,CAAT,CAAA,EAAkB,CAAAe,KAAA,CAAMf,CAAN,CAAlB,CAA+BA,CAA/B,CAAqChC,IAAAA,EAE9Ck0D,EAAAoE,UAAA,EANiC,CAAnC,CANqC,CArCgC,CA9zCzD,CAyzBd,IA2jBFyX,QAAqB,CAACrpE,CAAD,CAAQ5H,CAAR,CAAiBN,CAAjB,CAAuB01D,CAAvB,CAA6Bh+C,CAA7B,CAAuC9C,CAAvC,CAAiD,CAGpE+hD,EAAA,CAAczuD,CAAd,CAAqB5H,CAArB,CAA8BN,CAA9B,CAAoC01D,CAApC,CAA0Ch+C,CAA1C,CAAoD9C,CAApD,CACA4hD,GAAA,CAAqBd,CAArB,CAEAA,EAAA4D,aAAA,CAAoB,KACpB5D,EAAAkE,YAAAxyC,IAAA;AAAuBoqD,QAAQ,CAACC,CAAD,CAAaC,CAAb,CAAwB,CACrD,IAAI/0E,EAAQ80E,CAAR90E,EAAsB+0E,CAC1B,OAAOhc,EAAAgB,SAAA,CAAc/5D,CAAd,CAAP,EAA+ByzE,EAAAvwE,KAAA,CAAgBlD,CAAhB,CAFsB,CAPa,CAp3CtD,CA25Bd,MAseFg1E,QAAuB,CAACzpE,CAAD,CAAQ5H,CAAR,CAAiBN,CAAjB,CAAuB01D,CAAvB,CAA6Bh+C,CAA7B,CAAuC9C,CAAvC,CAAiD,CAGtE+hD,EAAA,CAAczuD,CAAd,CAAqB5H,CAArB,CAA8BN,CAA9B,CAAoC01D,CAApC,CAA0Ch+C,CAA1C,CAAoD9C,CAApD,CACA4hD,GAAA,CAAqBd,CAArB,CAEAA,EAAA4D,aAAA,CAAoB,OACpB5D,EAAAkE,YAAAgY,MAAA,CAAyBC,QAAQ,CAACJ,CAAD,CAAaC,CAAb,CAAwB,CACvD,IAAI/0E,EAAQ80E,CAAR90E,EAAsB+0E,CAC1B,OAAOhc,EAAAgB,SAAA,CAAc/5D,CAAd,CAAP,EAA+B0zE,EAAAxwE,KAAA,CAAkBlD,CAAlB,CAFwB,CAPa,CAj4CxD,CA69Bd,MAibFm1E,QAAuB,CAAC5pE,CAAD,CAAQ5H,CAAR,CAAiBN,CAAjB,CAAuB01D,CAAvB,CAA6B,CAE9Ct2D,CAAA,CAAYY,CAAAiH,KAAZ,CAAJ,EACE3G,CAAAN,KAAA,CAAa,MAAb,CAt3uBK,EAAEnD,EAs3uBP,CASFyD,EAAAyJ,GAAA,CAAW,OAAX,CANewd,QAAQ,CAACsvC,CAAD,CAAK,CACtBv2D,CAAA,CAAQ,CAAR,CAAAyxE,QAAJ,EACErc,CAAAuB,cAAA,CAAmBj3D,CAAArD,MAAnB,CAA+Bk6D,CAA/B,EAAqCA,CAAAz0D,KAArC,CAFwB,CAM5B,CAEAszD,EAAAkC,QAAA,CAAeC,QAAQ,EAAG,CAExBv3D,CAAA,CAAQ,CAAR,CAAAyxE,QAAA,CADY/xE,CAAArD,MACZ,EAA+B+4D,CAAAqB,WAFP,CAK1B/2D,EAAAi/B,SAAA,CAAc,OAAd,CAAuBy2B,CAAAkC,QAAvB,CAnBkD,CA94CpC,CAuhCd,SA0ZFoa,QAA0B,CAAC9pE,CAAD,CAAQ5H,CAAR,CAAiBN,CAAjB,CAAuB01D,CAAvB,CAA6Bh+C,CAA7B,CAAuC9C,CAAvC,CAAiDU,CAAjD,CAA0DwB,CAA1D,CAAkE,CAC1F,IAAIm7D,EAAY9X,EAAA,CAAkBrjD,CAAlB,CAA0B5O,CAA1B,CAAiC,aAAjC,CAAgDlI,CAAAkyE,YAAhD;AAAkE,CAAA,CAAlE,CAAhB,CACIC,EAAahY,EAAA,CAAkBrjD,CAAlB,CAA0B5O,CAA1B,CAAiC,cAAjC,CAAiDlI,CAAAoyE,aAAjD,CAAoE,CAAA,CAApE,CAMjB9xE,EAAAyJ,GAAA,CAAW,OAAX,CAJewd,QAAQ,CAACsvC,CAAD,CAAK,CAC1BnB,CAAAuB,cAAA,CAAmB32D,CAAA,CAAQ,CAAR,CAAAyxE,QAAnB,CAAuClb,CAAvC,EAA6CA,CAAAz0D,KAA7C,CAD0B,CAI5B,CAEAszD,EAAAkC,QAAA,CAAeC,QAAQ,EAAG,CACxBv3D,CAAA,CAAQ,CAAR,CAAAyxE,QAAA,CAAqBrc,CAAAqB,WADG,CAO1BrB,EAAAgB,SAAA,CAAgB2b,QAAQ,CAAC11E,CAAD,CAAQ,CAC9B,MAAiB,CAAA,CAAjB,GAAOA,CADuB,CAIhC+4D,EAAAe,YAAAx1D,KAAA,CAAsB,QAAQ,CAACtE,CAAD,CAAQ,CACpC,MAAO0F,GAAA,CAAO1F,CAAP,CAAcs1E,CAAd,CAD6B,CAAtC,CAIAvc,EAAA6D,SAAAt4D,KAAA,CAAmB,QAAQ,CAACtE,CAAD,CAAQ,CACjC,MAAOA,EAAA,CAAQs1E,CAAR,CAAoBE,CADM,CAAnC,CAzB0F,CAj7C5E,CAyhCd,OAAUtzE,CAzhCI,CA0hCd,OAAUA,CA1hCI,CA2hCd,OAAUA,CA3hCI,CA4hCd,MAASA,CA5hCK,CA6hCd,KAAQA,CA7hCM,CAAhB,CA6nDI8P,GAAiB,CAAC,UAAD,CAAa,UAAb,CAAyB,SAAzB,CAAoC,QAApC,CACjB,QAAQ,CAACiG,CAAD,CAAW8C,CAAX,CAAqBpC,CAArB,CAA8BwB,CAA9B,CAAsC,CAChD,MAAO,CACLoW,SAAU,GADL,CAELb,QAAS,CAAC,UAAD,CAFJ,CAGLnC,KAAM,CACJmL,IAAKA,QAAQ,CAACntB,CAAD,CAAQ5H,CAAR,CAAiBN,CAAjB,CAAuBiwE,CAAvB,CAA8B,CACrCA,CAAA,CAAM,CAAN,CAAJ,EACE,CAACW,EAAA,CAAUrwE,CAAA,CAAUP,CAAAoC,KAAV,CAAV,CAAD,EAAoCwuE,EAAAv0C,KAApC,EAAoDn0B,CAApD,CAA2D5H,CAA3D;AAAoEN,CAApE,CAA0EiwE,CAAA,CAAM,CAAN,CAA1E,CAAoFv4D,CAApF,CACoD9C,CADpD,CAC8DU,CAD9D,CACuEwB,CADvE,CAFuC,CADvC,CAHD,CADyC,CAD7B,CA7nDrB,CA+oDIw7D,GAAwB,oBA/oD5B,CAysDI9+D,GAAmBA,QAAQ,EAAG,CAChC,MAAO,CACL0Z,SAAU,GADL,CAELD,SAAU,GAFL,CAGL9kB,QAASA,QAAQ,CAAC0gD,CAAD,CAAM0pB,CAAN,CAAe,CAC9B,MAAID,GAAAzyE,KAAA,CAA2B0yE,CAAAh/D,QAA3B,CAAJ,CACSi/D,QAA4B,CAACtqE,CAAD,CAAQud,CAAR,CAAazlB,CAAb,CAAmB,CACpDA,CAAAg7B,KAAA,CAAU,OAAV,CAAmB9yB,CAAAw7C,MAAA,CAAY1jD,CAAAuT,QAAZ,CAAnB,CADoD,CADxD,CAKSk/D,QAAoB,CAACvqE,CAAD,CAAQud,CAAR,CAAazlB,CAAb,CAAmB,CAC5CkI,CAAAzI,OAAA,CAAaO,CAAAuT,QAAb,CAA2Bm/D,QAAyB,CAAC/1E,CAAD,CAAQ,CAC1DqD,CAAAg7B,KAAA,CAAU,OAAV,CAAmBr+B,CAAnB,CAD0D,CAA5D,CAD4C,CANlB,CAH3B,CADyB,CAzsDlC,CAgxDI6S,GAAkB,CAAC,UAAD,CAAa,QAAQ,CAACmjE,CAAD,CAAW,CACpD,MAAO,CACLzlD,SAAU,IADL,CAEL/kB,QAASyqE,QAAsB,CAACC,CAAD,CAAkB,CAC/CF,CAAAh2C,kBAAA,CAA2Bk2C,CAA3B,CACA,OAAOC,SAAmB,CAAC5qE,CAAD,CAAQ5H,CAAR,CAAiBN,CAAjB,CAAuB,CAC/C2yE,CAAA91C,iBAAA,CAA0Bv8B,CAA1B,CAAmCN,CAAAuP,OAAnC,CACAjP,EAAA,CAAUA,CAAA,CAAQ,CAAR,CACV4H,EAAAzI,OAAA,CAAaO,CAAAuP,OAAb,CAA0BwjE,QAA0B,CAACp2E,CAAD,CAAQ,CAC1D2D,CAAAka,YAAA,CAAsBpb,CAAA,CAAYzC,CAAZ,CAAA,CAAqB,EAArB,CAA0BA,CADU,CAA5D,CAH+C,CAFF,CAF5C,CAD6C,CAAhC,CAhxDtB,CAo1DIiT,GAA0B,CAAC,cAAD,CAAiB,UAAjB;AAA6B,QAAQ,CAAC8F,CAAD,CAAei9D,CAAf,CAAyB,CAC1F,MAAO,CACLxqE,QAAS6qE,QAA8B,CAACH,CAAD,CAAkB,CACvDF,CAAAh2C,kBAAA,CAA2Bk2C,CAA3B,CACA,OAAOI,SAA2B,CAAC/qE,CAAD,CAAQ5H,CAAR,CAAiBN,CAAjB,CAAuB,CACnDs8B,CAAAA,CAAgB5mB,CAAA,CAAapV,CAAAN,KAAA,CAAaA,CAAA+uB,MAAApf,eAAb,CAAb,CACpBgjE,EAAA91C,iBAAA,CAA0Bv8B,CAA1B,CAAmCg8B,CAAAQ,YAAnC,CACAx8B,EAAA,CAAUA,CAAA,CAAQ,CAAR,CACVN,EAAAi/B,SAAA,CAAc,gBAAd,CAAgC,QAAQ,CAACtiC,CAAD,CAAQ,CAC9C2D,CAAAka,YAAA,CAAsBpb,CAAA,CAAYzC,CAAZ,CAAA,CAAqB,EAArB,CAA0BA,CADF,CAAhD,CAJuD,CAFF,CADpD,CADmF,CAA9D,CAp1D9B,CAo5DI+S,GAAsB,CAAC,MAAD,CAAS,QAAT,CAAmB,UAAnB,CAA+B,QAAQ,CAAC4H,CAAD,CAAOR,CAAP,CAAe67D,CAAf,CAAyB,CACxF,MAAO,CACLzlD,SAAU,GADL,CAEL/kB,QAAS+qE,QAA0B,CAAC7lD,CAAD,CAAWC,CAAX,CAAmB,CACpD,IAAI6lD,EAAmBr8D,CAAA,CAAOwW,CAAA7d,WAAP,CAAvB,CACI2jE,EAAkBt8D,CAAA,CAAOwW,CAAA7d,WAAP,CAA0B4jE,QAAmB,CAAC7vE,CAAD,CAAM,CAEvE,MAAO8T,EAAA3Z,QAAA,CAAa6F,CAAb,CAFgE,CAAnD,CAItBmvE,EAAAh2C,kBAAA,CAA2BtP,CAA3B,CAEA,OAAOimD,SAAuB,CAACprE,CAAD,CAAQ5H,CAAR,CAAiBN,CAAjB,CAAuB,CACnD2yE,CAAA91C,iBAAA,CAA0Bv8B,CAA1B,CAAmCN,CAAAyP,WAAnC,CAEAvH,EAAAzI,OAAA,CAAa2zE,CAAb,CAA8BG,QAA8B,EAAG,CAE7D,IAAI52E;AAAQw2E,CAAA,CAAiBjrE,CAAjB,CACZ5H,EAAAgF,KAAA,CAAagS,CAAAk8D,eAAA,CAAoB72E,CAApB,CAAb,EAA2C,EAA3C,CAH6D,CAA/D,CAHmD,CARD,CAFjD,CADiF,CAAhE,CAp5D1B,CA++DI+V,GAAoB1T,EAAA,CAAQ,CAC9BkuB,SAAU,GADoB,CAE9Bb,QAAS,SAFqB,CAG9BnC,KAAMA,QAAQ,CAAChiB,CAAD,CAAQ5H,CAAR,CAAiBN,CAAjB,CAAuB01D,CAAvB,CAA6B,CACzCA,CAAA+d,qBAAAxyE,KAAA,CAA+B,QAAQ,EAAG,CACxCiH,CAAAw7C,MAAA,CAAY1jD,CAAAyS,SAAZ,CADwC,CAA1C,CADyC,CAHb,CAAR,CA/+DxB,CA6yEI3C,GAAmBuqD,EAAA,CAAe,EAAf,CAAmB,CAAA,CAAnB,CA7yEvB,CA61EInqD,GAAsBmqD,EAAA,CAAe,KAAf,CAAsB,CAAtB,CA71E1B,CA64EIrqD,GAAuBqqD,EAAA,CAAe,MAAf,CAAuB,CAAvB,CA74E3B,CAm8EIjqD,GAAmByjD,EAAA,CAAY,CACjC1rD,QAASA,QAAQ,CAAC7H,CAAD,CAAUN,CAAV,CAAgB,CAC/BA,CAAAg7B,KAAA,CAAU,SAAV,CAAqBx5B,IAAAA,EAArB,CACAlB,EAAAigB,YAAA,CAAoB,UAApB,CAF+B,CADA,CAAZ,CAn8EvB,CA4qFIjQ,GAAwB,CAAC,QAAQ,EAAG,CACtC,MAAO,CACL4c,SAAU,GADL,CAELhlB,MAAO,CAAA,CAFF,CAGLgC,WAAY,GAHP,CAIL+iB,SAAU,GAJL,CAD+B,CAAZ,CA5qF5B,CAo6FIpZ,GAAoB,EAp6FxB,CAy6FI6/D,GAAmB,CACrB,KAAQ,CAAA,CADa,CAErB,MAAS,CAAA,CAFY,CAIvB93E,EAAA,CACE,6IAAA,MAAA,CAAA,GAAA,CADF;AAEE,QAAQ,CAACmoD,CAAD,CAAY,CAClB,IAAIx4B,EAAgB0H,EAAA,CAAmB,KAAnB,CAA2B8wB,CAA3B,CACpBlwC,GAAA,CAAkB0X,CAAlB,CAAA,CAAmC,CAAC,QAAD,CAAW,YAAX,CAAyB,QAAQ,CAACzU,CAAD,CAASE,CAAT,CAAqB,CACvF,MAAO,CACLkW,SAAU,GADL,CAEL/kB,QAASA,QAAQ,CAAColB,CAAD,CAAWvtB,CAAX,CAAiB,CAKhC,IAAImD,EAAK2T,CAAA,CAAO9W,CAAA,CAAKurB,CAAL,CAAP,CAAgD,IAAhD,CAA4E,CAAA,CAA5E,CACT,OAAOooD,SAAuB,CAACzrE,CAAD,CAAQ5H,CAAR,CAAiB,CAC7CA,CAAAyJ,GAAA,CAAWg6C,CAAX,CAAsB,QAAQ,CAACnlC,CAAD,CAAQ,CACpC,IAAIqJ,EAAWA,QAAQ,EAAG,CACxB9kB,CAAA,CAAG+E,CAAH,CAAU,CAACi4C,OAAOvhC,CAAR,CAAV,CADwB,CAGtB80D,GAAA,CAAiB3vB,CAAjB,CAAJ,EAAmC/sC,CAAAuxB,QAAnC,CACErgC,CAAA1I,WAAA,CAAiByoB,CAAjB,CADF,CAGE/f,CAAAE,OAAA,CAAa6f,CAAb,CAPkC,CAAtC,CAD6C,CANf,CAF7B,CADgF,CAAtD,CAFjB,CAFtB,CAqgBA,KAAIrX,GAAgB,CAAC,UAAD,CAAa,UAAb,CAAyB,QAAQ,CAACoD,CAAD,CAAW2+D,CAAX,CAAqB,CACxE,MAAO,CACL93C,aAAc,CAAA,CADT,CAEL/M,WAAY,SAFP,CAGLb,SAAU,GAHL,CAILmF,SAAU,CAAA,CAJL,CAKLlF,SAAU,GALL,CAMLwL,MAAO,CAAA,CANF,CAOLxO,KAAMA,QAAQ,CAACqQ,CAAD,CAAShN,CAAT,CAAmBwB,CAAnB,CAA0B2mC,CAA1B,CAAgCl7B,CAAhC,CAA6C,CAAA,IACnD5sB,CADmD,CAC5C0jB,CAD4C,CAChCsiD,CACvBr5C,EAAA96B,OAAA,CAAcsvB,CAAApe,KAAd,CAA0BkjE,QAAwB,CAACl3E,CAAD,CAAQ,CAEpDA,CAAJ,CACO20B,CADP,EAEIkJ,CAAA,CAAY,QAAQ,CAACv8B,CAAD,CAAQw8B,CAAR,CAAkB,CACpCnJ,CAAA,CAAamJ,CACbx8B,EAAA,CAAMA,CAAA1C,OAAA,EAAN,CAAA;AAAwBo3E,CAAA95C,gBAAA,CAAyB,UAAzB,CAAqC9J,CAAApe,KAArC,CAIxB/C,EAAA,CAAQ,CACN3P,MAAOA,CADD,CAGR+V,EAAAkuD,MAAA,CAAejkE,CAAf,CAAsBsvB,CAAA7uB,OAAA,EAAtB,CAAyC6uB,CAAzC,CAToC,CAAtC,CAFJ,EAeMqmD,CAQJ,GAPEA,CAAA7oD,OAAA,EACA,CAAA6oD,CAAA,CAAmB,IAMrB,EAJItiD,CAIJ,GAHEA,CAAA5mB,SAAA,EACA,CAAA4mB,CAAA,CAAa,IAEf,EAAI1jB,CAAJ,GACEgmE,CAIA,CAJmBpoE,EAAA,CAAcoC,CAAA3P,MAAd,CAInB,CAHA+V,CAAAouD,MAAA,CAAewR,CAAf,CAAAr4C,KAAA,CAAsC,QAAQ,EAAG,CAC/Cq4C,CAAA,CAAmB,IAD4B,CAAjD,CAGA,CAAAhmE,CAAA,CAAQ,IALV,CAvBF,CAFwD,CAA1D,CAFuD,CAPtD,CADiE,CAAtD,CAApB,CAyOIkD,GAAqB,CAAC,kBAAD,CAAqB,eAArB,CAAsC,UAAtC,CACP,QAAQ,CAACgH,CAAD,CAAqBhE,CAArB,CAAsCE,CAAtC,CAAgD,CACxE,MAAO,CACLkZ,SAAU,KADL,CAELD,SAAU,GAFL,CAGLmF,SAAU,CAAA,CAHL,CAILtE,WAAY,SAJP,CAKL5jB,WAAY1B,EAAA3J,KALP,CAMLsJ,QAASA,QAAQ,CAAC7H,CAAD,CAAUN,CAAV,CAAgB,CAAA,IAC3B8zE,EAAS9zE,CAAA6Q,UAATijE,EAA2B9zE,CAAAxC,IADA,CAE3Bu2E,EAAY/zE,CAAAorC,OAAZ2oC,EAA2B,EAFA,CAG3BC,EAAgBh0E,CAAAi0E,WAEpB,OAAO,SAAQ,CAAC/rE,CAAD,CAAQqlB,CAAR,CAAkBwB,CAAlB,CAAyB2mC,CAAzB,CAA+Bl7B,CAA/B,CAA4C,CAAA,IACrD05C,EAAgB,CADqC,CAErD9zB,CAFqD,CAGrD+zB,CAHqD,CAIrDC,CAJqD,CAMrDC,EAA4BA,QAAQ,EAAG,CACrCF,CAAJ,GACEA,CAAAppD,OAAA,EACA,CAAAopD,CAAA,CAAkB,IAFpB,CAII/zB,EAAJ;CACEA,CAAA11C,SAAA,EACA,CAAA01C,CAAA,CAAe,IAFjB,CAIIg0B,EAAJ,GACEpgE,CAAAouD,MAAA,CAAegS,CAAf,CAAA74C,KAAA,CAAoC,QAAQ,EAAG,CAC7C44C,CAAA,CAAkB,IAD2B,CAA/C,CAIA,CADAA,CACA,CADkBC,CAClB,CAAAA,CAAA,CAAiB,IALnB,CATyC,CAkB3ClsE,EAAAzI,OAAA,CAAaq0E,CAAb,CAAqBQ,QAA6B,CAAC92E,CAAD,CAAM,CACtD,IAAI+2E,EAAiBA,QAAQ,EAAG,CAC1B,CAAAl1E,CAAA,CAAU20E,CAAV,CAAJ,EAAkCA,CAAlC,EAAmD,CAAA9rE,CAAAw7C,MAAA,CAAYswB,CAAZ,CAAnD,EACElgE,CAAA,EAF4B,CAAhC,CAKI0gE,EAAe,EAAEN,CAEjB12E,EAAJ,EAGEsa,CAAA,CAAiBta,CAAjB,CAAsB,CAAA,CAAtB,CAAA+9B,KAAA,CAAiC,QAAQ,CAACkL,CAAD,CAAW,CAClD,GAAI7K,CAAA1zB,CAAA0zB,YAAJ,EAEI44C,CAFJ,GAEqBN,CAFrB,CAEA,CACA,IAAIz5C,EAAWvyB,CAAAuoB,KAAA,EACfilC,EAAAjoC,SAAA,CAAgBgZ,CAQZxoC,EAAAA,CAAQu8B,CAAA,CAAYC,CAAZ,CAAsB,QAAQ,CAACx8B,CAAD,CAAQ,CAChDo2E,CAAA,EACArgE,EAAAkuD,MAAA,CAAejkE,CAAf,CAAsB,IAAtB,CAA4BsvB,CAA5B,CAAAgO,KAAA,CAA2Cg5C,CAA3C,CAFgD,CAAtC,CAKZn0B,EAAA,CAAe3lB,CACf25C,EAAA,CAAiBn2E,CAEjBmiD,EAAAgE,MAAA,CAAmB,uBAAnB,CAA4C5mD,CAA5C,CACA0K,EAAAw7C,MAAA,CAAYqwB,CAAZ,CAnBA,CAHkD,CAApD,CAuBG,QAAQ,EAAG,CACR7rE,CAAA0zB,YAAJ,EAEI44C,CAFJ,GAEqBN,CAFrB,GAGEG,CAAA,EACA,CAAAnsE,CAAAk8C,MAAA,CAAY,sBAAZ,CAAoC5mD,CAApC,CAJF,CADY,CAvBd,CA+BA,CAAA0K,CAAAk8C,MAAA,CAAY,0BAAZ,CAAwC5mD,CAAxC,CAlCF,GAoCE62E,CAAA,EACA,CAAA3e,CAAAjoC,SAAA,CAAgB,IArClB,CARsD,CAAxD,CAxByD,CAL5B,CAN5B,CADiE,CADjD,CAzOzB,CAwUI9Z,GAAgC,CAAC,UAAD,CAClC,QAAQ,CAACg/D,CAAD,CAAW,CACjB,MAAO,CACLzlD,SAAU,KADL;AAELD,SAAW,IAFN,CAGLZ,QAAS,WAHJ,CAILnC,KAAMA,QAAQ,CAAChiB,CAAD,CAAQqlB,CAAR,CAAkBwB,CAAlB,CAAyB2mC,CAAzB,CAA+B,CACvCv2D,EAAAjD,KAAA,CAAcqxB,CAAA,CAAS,CAAT,CAAd,CAAArrB,MAAA,CAAiC,KAAjC,CAAJ,EAIEqrB,CAAAroB,MAAA,EACA,CAAAytE,CAAA,CAASp5D,EAAA,CAAoBm8C,CAAAjoC,SAApB,CAAmC1yB,CAAA0I,SAAnC,CAAA6W,WAAT,CAAA,CAAyEpS,CAAzE,CACIusE,QAA8B,CAACx2E,CAAD,CAAQ,CACxCsvB,CAAAloB,OAAA,CAAgBpH,CAAhB,CADwC,CAD1C,CAGG,CAAC2yB,oBAAqBrD,CAAtB,CAHH,CALF,GAYAA,CAAAjoB,KAAA,CAAcowD,CAAAjoC,SAAd,CACA,CAAAklD,CAAA,CAASplD,CAAA2L,SAAA,EAAT,CAAA,CAA8BhxB,CAA9B,CAbA,CAD2C,CAJxC,CADU,CADe,CAxUpC,CA2ZI8I,GAAkB6iD,EAAA,CAAY,CAChC5mC,SAAU,GADsB,CAEhC9kB,QAASA,QAAQ,EAAG,CAClB,MAAO,CACLktB,IAAKA,QAAQ,CAACntB,CAAD,CAAQ5H,CAAR,CAAiB0xB,CAAjB,CAAwB,CACnC9pB,CAAAw7C,MAAA,CAAY1xB,CAAAjhB,OAAZ,CADmC,CADhC,CADW,CAFY,CAAZ,CA3ZtB,CA0fIyB,GAAkBA,QAAQ,EAAG,CAC/B,MAAO,CACL0a,SAAU,GADL,CAELD,SAAU,GAFL,CAGLZ,QAAS,SAHJ,CAILnC,KAAMA,QAAQ,CAAChiB,CAAD,CAAQ5H,CAAR,CAAiBN,CAAjB,CAAuB01D,CAAvB,CAA6B,CAGzC,IAAInjD,EAASjS,CAAAN,KAAA,CAAaA,CAAA+uB,MAAAxc,OAAb,CAATA,EAA4C,IAAhD,CACImiE,EAA6B,OAA7BA,GAAa10E,CAAA82D,OADjB,CAEI1tD,EAAYsrE,CAAA,CAAa35D,CAAA,CAAKxI,CAAL,CAAb,CAA4BA,CAiB5CmjD,EAAA6D,SAAAt4D,KAAA,CAfY+C,QAAQ,CAAC0tE,CAAD,CAAY,CAE9B,GAAI,CAAAtyE,CAAA,CAAYsyE,CAAZ,CAAJ,CAAA,CAEA,IAAI/sD;AAAO,EAEP+sD,EAAJ,EACE91E,CAAA,CAAQ81E,CAAAtxE,MAAA,CAAgBgJ,CAAhB,CAAR,CAAoC,QAAQ,CAACzM,CAAD,CAAQ,CAC9CA,CAAJ,EAAWgoB,CAAA1jB,KAAA,CAAUyzE,CAAA,CAAa35D,CAAA,CAAKpe,CAAL,CAAb,CAA2BA,CAArC,CADuC,CAApD,CAKF,OAAOgoB,EAVP,CAF8B,CAehC,CACA+wC,EAAAe,YAAAx1D,KAAA,CAAsB,QAAQ,CAACtE,CAAD,CAAQ,CACpC,GAAIvB,CAAA,CAAQuB,CAAR,CAAJ,CACE,MAAOA,EAAAwJ,KAAA,CAAWoM,CAAX,CAF2B,CAAtC,CASAmjD,EAAAgB,SAAA,CAAgB2b,QAAQ,CAAC11E,CAAD,CAAQ,CAC9B,MAAO,CAACA,CAAR,EAAiB,CAACA,CAAApB,OADY,CAhCS,CAJtC,CADwB,CA1fjC,CA8iBIggE,GAAc,UA9iBlB,CA+iBIC,GAAgB,YA/iBpB,CAgjBI1F,GAAiB,aAhjBrB,CAijBIC,GAAc,UAjjBlB,CAojBI4F,GAAgB,YApjBpB,CAwjBIlC,GAAgBz+D,CAAA,CAAO,SAAP,CAxjBpB,CAkwBI25E,GAAoB,CAAC,QAAD,CAAW,mBAAX,CAAgC,QAAhC,CAA0C,UAA1C,CAAsD,QAAtD,CAAgE,UAAhE,CAA4E,UAA5E,CAAwF,YAAxF,CAAsG,IAAtG,CAA4G,cAA5G,CACpB,QAAQ,CAACp6C,CAAD,CAASnlB,CAAT,CAA4B2Z,CAA5B,CAAmCxB,CAAnC,CAA6CzW,CAA7C,CAAqD9C,CAArD,CAA+DkE,CAA/D,CAAyElB,CAAzE,CAAqFE,CAArF,CAAyFxB,CAAzF,CAAuG,CAEjH,IAAAk/D,YAAA,CADA,IAAA7d,WACA,CADkBpsC,MAAAkuC,IAElB,KAAAgc,gBAAA,CAAuBrzE,IAAAA,EACvB,KAAAo4D,YAAA,CAAmB,EACnB;IAAAkb,iBAAA,CAAwB,EACxB,KAAAvb,SAAA,CAAgB,EAChB,KAAA9C,YAAA,CAAmB,EACnB,KAAAgd,qBAAA,CAA4B,EAC5B,KAAAsB,WAAA,CAAkB,CAAA,CAClB,KAAAC,SAAA,CAAgB,CAAA,CAChB,KAAA3gB,UAAA,CAAiB,CAAA,CACjB,KAAAD,OAAA,CAAc,CAAA,CACd,KAAAE,OAAA,CAAc,CAAA,CACd,KAAAC,SAAA,CAAgB,CAAA,CAChB,KAAAP,OAAA,CAAc,EACd,KAAAC,UAAA,CAAiB,EACjB,KAAAC,SAAA,CAAgB1yD,IAAAA,EAChB,KAAA2yD,MAAA,CAAaz+C,CAAA,CAAaqZ,CAAA9nB,KAAb,EAA2B,EAA3B,CAA+B,CAAA,CAA/B,CAAA,CAAsCszB,CAAtC,CACb,KAAAk6B,aAAA,CAAoBC,EAnB6F,KAqB7GugB,EAAgBn+D,CAAA,CAAOiY,CAAA1c,QAAP,CArB6F,CAsB7G6iE,EAAsBD,CAAA71C,OAtBuF,CAuB7G+1C,EAAaF,CAvBgG,CAwB7GG,EAAaF,CAxBgG,CAyB7GG,EAAkB,IAzB2F,CA0B7GC,CA1B6G,CA2B7G5f,EAAO,IAEX,KAAA6f,aAAA,CAAoBC,QAAQ,CAACnvD,CAAD,CAAU,CAEpC,IADAqvC,CAAA0D,SACA,CADgB/yC,CAChB,GAAeA,CAAAovD,aAAf,CAAqC,CAAA,IAC/BC,EAAoB5+D,CAAA,CAAOiY,CAAA1c,QAAP,CAAuB,IAAvB,CADW,CAE/BsjE,EAAoB7+D,CAAA,CAAOiY,CAAA1c,QAAP,CAAuB,QAAvB,CAExB8iE,EAAA,CAAaA,QAAQ,CAAC56C,CAAD,CAAS,CAC5B,IAAIk3C,EAAawD,CAAA,CAAc16C,CAAd,CACbv+B,EAAA,CAAWy1E,CAAX,CAAJ,GACEA,CADF,CACeiE,CAAA,CAAkBn7C,CAAlB,CADf,CAGA;MAAOk3C,EALqB,CAO9B2D,EAAA,CAAaA,QAAQ,CAAC76C,CAAD,CAASiD,CAAT,CAAmB,CAClCxhC,CAAA,CAAWi5E,CAAA,CAAc16C,CAAd,CAAX,CAAJ,CACEo7C,CAAA,CAAkBp7C,CAAlB,CAA0B,CAACq7C,KAAMp4C,CAAP,CAA1B,CADF,CAGE03C,CAAA,CAAoB36C,CAApB,CAA4BiD,CAA5B,CAJoC,CAXL,CAArC,IAkBO,IAAK4B,CAAA61C,CAAA71C,OAAL,CACL,KAAMq6B,GAAA,CAAc,WAAd,CACF1qC,CAAA1c,QADE,CACapN,EAAA,CAAYsoB,CAAZ,CADb,CAAN,CArBkC,CA8CtC,KAAAqqC,QAAA,CAAe/4D,CAoBf,KAAA63D,SAAA,CAAgBmf,QAAQ,CAACl5E,CAAD,CAAQ,CAC9B,MAAOyC,EAAA,CAAYzC,CAAZ,CAAP,EAAuC,EAAvC,GAA6BA,CAA7B,EAAuD,IAAvD,GAA6CA,CAA7C,EAA+DA,CAA/D,GAAyEA,CAD3C,CAIhC,KAAAm5E,qBAAA,CAA4BC,QAAQ,CAACp5E,CAAD,CAAQ,CACtC+4D,CAAAgB,SAAA,CAAc/5D,CAAd,CAAJ,EACEqX,CAAAuM,YAAA,CAAqBgN,CAArB,CAlTgByoD,cAkThB,CACA,CAAAhiE,CAAAsM,SAAA,CAAkBiN,CAAlB,CApTY0oD,UAoTZ,CAFF,GAIEjiE,CAAAuM,YAAA,CAAqBgN,CAArB,CAtTY0oD,UAsTZ,CACA,CAAAjiE,CAAAsM,SAAA,CAAkBiN,CAAlB,CAtTgByoD,cAsThB,CALF,CAD0C,CAW5C,KAAIE,EAAyB,CAwB7BzgB,GAAA,CAAqB,CACnBC,KAAM,IADa,CAEnBnoC,SAAUA,CAFS,CAGnBxrB,IAAKA,QAAQ,CAACm1C,CAAD,CAAS7c,CAAT,CAAmB,CAC9B6c,CAAA,CAAO7c,CAAP,CAAA,CAAmB,CAAA,CADW,CAHb,CAMnBs7B,MAAOA,QAAQ,CAACze,CAAD,CAAS7c,CAAT,CAAmB,CAChC,OAAO6c,CAAA,CAAO7c,CAAP,CADyB,CANf,CASnBrmB,SAAUA,CATS,CAArB,CAuBA,KAAAgiD,aAAA,CAAoBmgB,QAAQ,EAAG,CAC7BzgB,CAAAtB,OAAA;AAAc,CAAA,CACdsB,EAAArB,UAAA,CAAiB,CAAA,CACjBrgD,EAAAuM,YAAA,CAAqBgN,CAArB,CAA+BwoC,EAA/B,CACA/hD,EAAAsM,SAAA,CAAkBiN,CAAlB,CAA4BuoC,EAA5B,CAJ6B,CAkB/B,KAAAF,UAAA,CAAiBwgB,QAAQ,EAAG,CAC1B1gB,CAAAtB,OAAA,CAAc,CAAA,CACdsB,EAAArB,UAAA,CAAiB,CAAA,CACjBrgD,EAAAuM,YAAA,CAAqBgN,CAArB,CAA+BuoC,EAA/B,CACA9hD,EAAAsM,SAAA,CAAkBiN,CAAlB,CAA4BwoC,EAA5B,CACAL,EAAAjB,aAAAmB,UAAA,EAL0B,CAoB5B,KAAAQ,cAAA,CAAqBigB,QAAQ,EAAG,CAC9B3gB,CAAAsf,SAAA,CAAgB,CAAA,CAChBtf,EAAAqf,WAAA,CAAkB,CAAA,CAClB/gE,EAAAkiD,SAAA,CAAkB3oC,CAAlB,CAvZkB+oD,cAuZlB,CAtZgBC,YAsZhB,CAH8B,CAiBhC,KAAAC,YAAA,CAAmBC,QAAQ,EAAG,CAC5B/gB,CAAAsf,SAAA,CAAgB,CAAA,CAChBtf,EAAAqf,WAAA,CAAkB,CAAA,CAClB/gE,EAAAkiD,SAAA,CAAkB3oC,CAAlB,CAvagBgpD,YAuahB,CAxakBD,cAwalB,CAH4B,CA8F9B,KAAA3hB,mBAAA,CAA0B+hB,QAAQ,EAAG,CACnCx+D,CAAAsR,OAAA,CAAgB6rD,CAAhB,CACA3f,EAAAqB,WAAA,CAAkBrB,CAAAihB,yBAClBjhB,EAAAkC,QAAA,EAHmC,CAkBrC,KAAAkC,UAAA,CAAiB8c,QAAQ,EAAG,CAE1B,GAAI,CAAAn7E,CAAA,CAASi6D,CAAAkf,YAAT,CAAJ;AAAkC,CAAArwE,KAAA,CAAMmxD,CAAAkf,YAAN,CAAlC,CAAA,CASA,IAAInD,EAAa/b,CAAAmf,gBAAjB,CAEIgC,EAAYnhB,CAAApB,OAFhB,CAGIwiB,EAAiBphB,CAAAkf,YAHrB,CAKImC,EAAerhB,CAAA0D,SAAf2d,EAAgCrhB,CAAA0D,SAAA2d,aAEpCrhB,EAAAshB,gBAAA,CAAqBvF,CAArB,CAZgB/b,CAAAihB,yBAYhB,CAA4C,QAAQ,CAACM,CAAD,CAAW,CAGxDF,CAAL,EAAqBF,CAArB,GAAmCI,CAAnC,GAKEvhB,CAAAkf,YAEA,CAFmBqC,CAAA,CAAWxF,CAAX,CAAwBjwE,IAAAA,EAE3C,CAAIk0D,CAAAkf,YAAJ,GAAyBkC,CAAzB,EACEphB,CAAAwhB,oBAAA,EARJ,CAH6D,CAA/D,CAhBA,CAF0B,CAoC5B,KAAAF,gBAAA,CAAuBG,QAAQ,CAAC1F,CAAD,CAAaC,CAAb,CAAwB0F,CAAxB,CAAsC,CAmCnEC,QAASA,EAAqB,EAAG,CAC/B,IAAIC,EAAsB,CAAA,CAC1B17E,EAAA,CAAQ85D,CAAAkE,YAAR,CAA0B,QAAQ,CAAC2d,CAAD,CAAYtwE,CAAZ,CAAkB,CAClD,IAAIib,EAASq1D,CAAA,CAAU9F,CAAV,CAAsBC,CAAtB,CACb4F,EAAA,CAAsBA,CAAtB,EAA6Cp1D,CAC7Cu5C,EAAA,CAAYx0D,CAAZ,CAAkBib,CAAlB,CAHkD,CAApD,CAKA,OAAKo1D,EAAL,CAMO,CAAA,CANP,EACE17E,CAAA,CAAQ85D,CAAAof,iBAAR,CAA+B,QAAQ,CAACzxC,CAAD,CAAIp8B,CAAJ,CAAU,CAC/Cw0D,CAAA,CAAYx0D,CAAZ,CAAkB,IAAlB,CAD+C,CAAjD,CAGO,CAAA,CAAA,CAJT,CAP+B,CAgBjCuwE,QAASA,EAAsB,EAAG,CAChC,IAAIC,EAAoB,EAAxB,CACIR,EAAW,CAAA,CACfr7E,EAAA,CAAQ85D,CAAAof,iBAAR,CAA+B,QAAQ,CAACyC,CAAD,CAAYtwE,CAAZ,CAAkB,CACvD,IAAIg/B;AAAUsxC,CAAA,CAAU9F,CAAV,CAAsBC,CAAtB,CACd,IAAmBzrC,CAAAA,CAAnB,EApt0BQ,CAAAjqC,CAAA,CAot0BWiqC,CApt0BA1K,KAAX,CAot0BR,CACE,KAAMk+B,GAAA,CAAc,WAAd,CAC0ExzB,CAD1E,CAAN,CAGFw1B,CAAA,CAAYx0D,CAAZ,CAAkBzF,IAAAA,EAAlB,CACAi2E,EAAAx2E,KAAA,CAAuBglC,CAAA1K,KAAA,CAAa,QAAQ,EAAG,CAC7CkgC,CAAA,CAAYx0D,CAAZ,CAAkB,CAAA,CAAlB,CAD6C,CAAxB,CAEpB,QAAQ,EAAG,CACZgwE,CAAA,CAAW,CAAA,CACXxb,EAAA,CAAYx0D,CAAZ,CAAkB,CAAA,CAAlB,CAFY,CAFS,CAAvB,CAPuD,CAAzD,CAcKwwE,EAAAl8E,OAAL,CAGE2b,CAAAknC,IAAA,CAAOq5B,CAAP,CAAAl8C,KAAA,CAA+B,QAAQ,EAAG,CACxCm8C,CAAA,CAAeT,CAAf,CADwC,CAA1C,CAEGp4E,CAFH,CAHF,CACE64E,CAAA,CAAe,CAAA,CAAf,CAlB8B,CA0BlCjc,QAASA,EAAW,CAACx0D,CAAD,CAAOq0D,CAAP,CAAgB,CAC9Bqc,CAAJ,GAA6BzB,CAA7B,EACExgB,CAAAF,aAAA,CAAkBvuD,CAAlB,CAAwBq0D,CAAxB,CAFgC,CAMpCoc,QAASA,EAAc,CAACT,CAAD,CAAW,CAC5BU,CAAJ,GAA6BzB,CAA7B,EAEEkB,CAAA,CAAaH,CAAb,CAH8B,CAlFlCf,CAAA,EACA,KAAIyB,EAAuBzB,CAa3B0B,UAA2B,EAAG,CAC5B,IAAIC,EAAWniB,CAAA4D,aAAXue,EAAgC,OACpC,IAAIz4E,CAAA,CAAYk2E,CAAZ,CAAJ,CACE7Z,CAAA,CAAYoc,CAAZ,CAAsB,IAAtB,CADF,KAaE,OAVKvC,EAUEA,GATL15E,CAAA,CAAQ85D,CAAAkE,YAAR,CAA0B,QAAQ,CAACv2B,CAAD,CAAIp8B,CAAJ,CAAU,CAC1Cw0D,CAAA,CAAYx0D,CAAZ,CAAkB,IAAlB,CAD0C,CAA5C,CAGA,CAAArL,CAAA,CAAQ85D,CAAAof,iBAAR,CAA+B,QAAQ,CAACzxC,CAAD,CAAIp8B,CAAJ,CAAU,CAC/Cw0D,CAAA,CAAYx0D,CAAZ,CAAkB,IAAlB,CAD+C,CAAjD,CAMKquE,EADP7Z,CAAA,CAAYoc,CAAZ,CAAsBvC,CAAtB,CACOA,CAAAA,CAET,OAAO,CAAA,CAjBqB,CAA9BsC,CAVK,EAAL,CAIKP,CAAA,EAAL,CAIAG,CAAA,EAJA,CACEE,CAAA,CAAe,CAAA,CAAf,CALF,CACEA,CAAA,CAAe,CAAA,CAAf,CANiE,CAsGrE,KAAA5iB,iBAAA,CAAwBgjB,QAAQ,EAAG,CACjC,IAAIpG;AAAYhc,CAAAqB,WAEhB7+C,EAAAsR,OAAA,CAAgB6rD,CAAhB,CAKA,IAAI3f,CAAAihB,yBAAJ,GAAsCjF,CAAtC,EAAkE,EAAlE,GAAoDA,CAApD,EAAyEhc,CAAAsB,sBAAzE,CAGAtB,CAAAogB,qBAAA,CAA0BpE,CAA1B,CAOA,CANAhc,CAAAihB,yBAMA,CANgCjF,CAMhC,CAHIhc,CAAArB,UAGJ,EAFE,IAAAuB,UAAA,EAEF,CAAA,IAAAmiB,mBAAA,EAlBiC,CAqBnC,KAAAA,mBAAA,CAA0BC,QAAQ,EAAG,CAEnC,IAAIvG,EADY/b,CAAAihB,yBAIhB,IAFArB,CAEA,CAFcl2E,CAAA,CAAYqyE,CAAZ,CAAA,CAA0BjwE,IAAAA,EAA1B,CAAsC,CAAA,CAEpD,CACE,IAAS,IAAAhF,EAAI,CAAb,CAAgBA,CAAhB,CAAoBk5D,CAAA6D,SAAAh+D,OAApB,CAA0CiB,CAAA,EAA1C,CAEE,GADAi1E,CACI,CADS/b,CAAA6D,SAAA,CAAc/8D,CAAd,CAAA,CAAiBi1E,CAAjB,CACT,CAAAryE,CAAA,CAAYqyE,CAAZ,CAAJ,CAA6B,CAC3B6D,CAAA,CAAc,CAAA,CACd,MAF2B,CAM7B75E,CAAA,CAASi6D,CAAAkf,YAAT,CAAJ,EAAkCrwE,KAAA,CAAMmxD,CAAAkf,YAAN,CAAlC,GAEElf,CAAAkf,YAFF,CAEqBO,CAAA,CAAW56C,CAAX,CAFrB,CAIA,KAAIu8C,EAAiBphB,CAAAkf,YAArB,CACImC,EAAerhB,CAAA0D,SAAf2d,EAAgCrhB,CAAA0D,SAAA2d,aACpCrhB,EAAAmf,gBAAA;AAAuBpD,CAEnBsF,EAAJ,GACErhB,CAAAkf,YAkBA,CAlBmBnD,CAkBnB,CAAI/b,CAAAkf,YAAJ,GAAyBkC,CAAzB,EACEphB,CAAAwhB,oBAAA,EApBJ,CAOAxhB,EAAAshB,gBAAA,CAAqBvF,CAArB,CAAiC/b,CAAAihB,yBAAjC,CAAgE,QAAQ,CAACM,CAAD,CAAW,CAC5EF,CAAL,GAKErhB,CAAAkf,YAMF,CANqBqC,CAAA,CAAWxF,CAAX,CAAwBjwE,IAAAA,EAM7C,CAAIk0D,CAAAkf,YAAJ,GAAyBkC,CAAzB,EACEphB,CAAAwhB,oBAAA,EAZF,CADiF,CAAnF,CA7BmC,CA+CrC,KAAAA,oBAAA,CAA2Be,QAAQ,EAAG,CACpC7C,CAAA,CAAW76C,CAAX,CAAmBm7B,CAAAkf,YAAnB,CACAh5E,EAAA,CAAQ85D,CAAA+d,qBAAR,CAAmC,QAAQ,CAAClsD,CAAD,CAAW,CACpD,GAAI,CACFA,CAAA,EADE,CAEF,MAAOpiB,CAAP,CAAU,CACViQ,CAAA,CAAkBjQ,CAAlB,CADU,CAHwC,CAAtD,CAFoC,CA6DtC,KAAA8xD,cAAA,CAAqBihB,QAAQ,CAACv7E,CAAD,CAAQ+gE,CAAR,CAAiB,CAC5ChI,CAAAqB,WAAA,CAAkBp6D,CACb+4D,EAAA0D,SAAL,EAAsB+e,CAAAziB,CAAA0D,SAAA+e,gBAAtB,EACEziB,CAAA0iB,0BAAA,CAA+B1a,CAA/B,CAH0C,CAO9C,KAAA0a,0BAAA,CAAiCC,QAAQ,CAAC3a,CAAD,CAAU,CAAA,IAC7C4a,EAAgB,CAD6B,CAE7CjyD,EAAUqvC,CAAA0D,SAGV/yC;CAAJ,EAAehnB,CAAA,CAAUgnB,CAAAkyD,SAAV,CAAf,GACEA,CACA,CADWlyD,CAAAkyD,SACX,CAAI98E,CAAA,CAAS88E,CAAT,CAAJ,CACED,CADF,CACkBC,CADlB,CAEW98E,CAAA,CAAS88E,CAAA,CAAS7a,CAAT,CAAT,CAAJ,CACL4a,CADK,CACWC,CAAA,CAAS7a,CAAT,CADX,CAEIjiE,CAAA,CAAS88E,CAAA,CAAS,SAAT,CAAT,CAFJ,GAGLD,CAHK,CAGWC,CAAA,CAAS,SAAT,CAHX,CAJT,CAWArgE,EAAAsR,OAAA,CAAgB6rD,CAAhB,CACIiD,EAAJ,CACEjD,CADF,CACoBn9D,CAAA,CAAS,QAAQ,EAAG,CACpCw9C,CAAAZ,iBAAA,EADoC,CAApB,CAEfwjB,CAFe,CADpB,CAIWthE,CAAAuxB,QAAJ,CACLmtB,CAAAZ,iBAAA,EADK,CAGLv6B,CAAAnyB,OAAA,CAAc,QAAQ,EAAG,CACvBstD,CAAAZ,iBAAA,EADuB,CAAzB,CAxB+C,CAsCnDv6B,EAAA96B,OAAA,CAAc+4E,QAAqB,EAAG,CACpC,IAAI/G,EAAa0D,CAAA,CAAW56C,CAAX,CAIjB,IAAIk3C,CAAJ,GAAmB/b,CAAAkf,YAAnB,GAEIlf,CAAAkf,YAFJ,GAEyBlf,CAAAkf,YAFzB,EAE6CnD,CAF7C,GAE4DA,CAF5D,EAGE,CACA/b,CAAAkf,YAAA,CAAmBlf,CAAAmf,gBAAnB,CAA0CpD,CAC1C6D,EAAA,CAAc9zE,IAAAA,EAMd,KARA,IAIIi3E,EAAa/iB,CAAAe,YAJjB,CAKI9kC,EAAM8mD,CAAAl9E,OALV,CAOIm2E,EAAYD,CAChB,CAAO9/C,CAAA,EAAP,CAAA,CACE+/C,CAAA,CAAY+G,CAAA,CAAW9mD,CAAX,CAAA,CAAgB+/C,CAAhB,CAEVhc,EAAAqB,WAAJ,GAAwB2a,CAAxB,GACEhc,CAAAogB,qBAAA,CAA0BpE,CAA1B,CAIA,CAHAhc,CAAAqB,WAGA,CAHkBrB,CAAAihB,yBAGlB,CAHkDjF,CAGlD,CAFAhc,CAAAkC,QAAA,EAEA;AAAAlC,CAAAshB,gBAAA,CAAqBvF,CAArB,CAAiCC,CAAjC,CAA4C7yE,CAA5C,CALF,CAXA,CAoBF,MAAO4yE,EA5B6B,CAAtC,CA5nBiH,CAD3F,CAlwBxB,CA2lDIn/D,GAAmB,CAAC,YAAD,CAAe,QAAQ,CAAC0E,CAAD,CAAa,CACzD,MAAO,CACLkW,SAAU,GADL,CAELb,QAAS,CAAC,SAAD,CAAY,QAAZ,CAAsB,kBAAtB,CAFJ,CAGLniB,WAAYyqE,EAHP,CAOL1nD,SAAU,CAPL,CAQL9kB,QAASuwE,QAAuB,CAACp4E,CAAD,CAAU,CAExCA,CAAAggB,SAAA,CAAiBw1C,EAAjB,CAAAx1C,SAAA,CApjCgBg2D,cAojChB,CAAAh2D,SAAA,CAAoEi7C,EAApE,CAEA,OAAO,CACLlmC,IAAKsjD,QAAuB,CAACzwE,CAAD,CAAQ5H,CAAR,CAAiBN,CAAjB,CAAuBiwE,CAAvB,CAA8B,CAAA,IACpD2I,EAAY3I,CAAA,CAAM,CAAN,CACZ4I,EAAAA,CAAW5I,CAAA,CAAM,CAAN,CAAX4I,EAAuBD,CAAAnkB,aAE3BmkB,EAAArD,aAAA,CAAuBtF,CAAA,CAAM,CAAN,CAAvB,EAAmCA,CAAA,CAAM,CAAN,CAAA7W,SAAnC,CAGAyf,EAAA7jB,YAAA,CAAqB4jB,CAArB,CAEA54E,EAAAi/B,SAAA,CAAc,MAAd,CAAsB,QAAQ,CAACzB,CAAD,CAAW,CACnCo7C,CAAAzkB,MAAJ,GAAwB32B,CAAxB,EACEo7C,CAAAnkB,aAAAS,gBAAA,CAAuC0jB,CAAvC,CAAkDp7C,CAAlD,CAFqC,CAAzC,CAMAt1B,EAAA2uB,IAAA,CAAU,UAAV,CAAsB,QAAQ,EAAG,CAC/B+hD,CAAAnkB,aAAAa,eAAA,CAAsCsjB,CAAtC,CAD+B,CAAjC,CAfwD,CADrD,CAoBLtjD,KAAMwjD,QAAwB,CAAC5wE,CAAD;AAAQ5H,CAAR,CAAiBN,CAAjB,CAAuBiwE,CAAvB,CAA8B,CAC1D,IAAI2I,EAAY3I,CAAA,CAAM,CAAN,CAChB,IAAI2I,CAAAxf,SAAJ,EAA0Bwf,CAAAxf,SAAA2f,SAA1B,CACEz4E,CAAAyJ,GAAA,CAAW6uE,CAAAxf,SAAA2f,SAAX,CAAwC,QAAQ,CAACliB,CAAD,CAAK,CACnD+hB,CAAAR,0BAAA,CAAoCvhB,CAApC,EAA0CA,CAAAz0D,KAA1C,CADmD,CAArD,CAKF9B,EAAAyJ,GAAA,CAAW,MAAX,CAAmB,QAAQ,EAAG,CACxB6uE,CAAA5D,SAAJ,GAEIh+D,CAAAuxB,QAAJ,CACErgC,CAAA1I,WAAA,CAAiBo5E,CAAApC,YAAjB,CADF,CAGEtuE,CAAAE,OAAA,CAAawwE,CAAApC,YAAb,CALF,CAD4B,CAA9B,CAR0D,CApBvD,CAJiC,CARrC,CADkD,CAApC,CA3lDvB,CAmpDIwC,GAAiB,uBAnpDrB,CAszDItlE,GAA0BA,QAAQ,EAAG,CACvC,MAAO,CACLwZ,SAAU,GADL,CAELhjB,WAAY,CAAC,QAAD,CAAW,QAAX,CAAqB,QAAQ,CAACqwB,CAAD,CAAS/M,CAAT,CAAiB,CACxD,IAAIiwB,EAAO,IACX,KAAA2b,SAAA,CAAgBv4D,EAAA,CAAK05B,CAAAmpB,MAAA,CAAal2B,CAAA/Z,eAAb,CAAL,CAEZpU,EAAA,CAAU,IAAA+5D,SAAA2f,SAAV,CAAJ,EACE,IAAA3f,SAAA+e,gBAEA,CAFgC,CAAA,CAEhC,CAAA,IAAA/e,SAAA2f,SAAA,CAAyBh+D,CAAA,CAAK,IAAAq+C,SAAA2f,SAAA30E,QAAA,CAA+B40E,EAA/B;AAA+C,QAAQ,EAAG,CACtFv7B,CAAA2b,SAAA+e,gBAAA,CAAgC,CAAA,CAChC,OAAO,GAF+E,CAA1D,CAAL,CAH3B,EAQE,IAAA/e,SAAA+e,gBARF,CAQkC,CAAA,CAZsB,CAA9C,CAFP,CADgC,CAtzDzC,CAu9DIjnE,GAAyB2iD,EAAA,CAAY,CAAEzhC,SAAU,CAAA,CAAZ,CAAkBnF,SAAU,GAA5B,CAAZ,CAv9D7B,CA29DIgsD,GAAkBj+E,CAAA,CAAO,WAAP,CA39DtB,CAisEIk+E,GAAoB,2OAjsExB,CA8sEIhnE,GAAqB,CAAC,UAAD,CAAa,WAAb,CAA0B,QAA1B,CAAoC,QAAQ,CAACygE,CAAD,CAAWz9D,CAAX,CAAsB4B,CAAtB,CAA8B,CAEjGqiE,QAASA,EAAsB,CAACC,CAAD,CAAaC,CAAb,CAA4BnxE,CAA5B,CAAmC,CAsDhEoxE,QAASA,EAAM,CAACC,CAAD,CAAc7H,CAAd,CAAyB8H,CAAzB,CAAgCC,CAAhC,CAAuCC,CAAvC,CAAiD,CAC9D,IAAAH,YAAA,CAAmBA,CACnB,KAAA7H,UAAA;AAAiBA,CACjB,KAAA8H,MAAA,CAAaA,CACb,KAAAC,MAAA,CAAaA,CACb,KAAAC,SAAA,CAAgBA,CAL8C,CAQhEC,QAASA,EAAmB,CAACC,CAAD,CAAe,CACzC,IAAIC,CAEJ,IAAKC,CAAAA,CAAL,EAAgB7+E,EAAA,CAAY2+E,CAAZ,CAAhB,CACEC,CAAA,CAAmBD,CADrB,KAEO,CAELC,CAAA,CAAmB,EACnB,KAASE,IAAAA,CAAT,GAAoBH,EAApB,CACMA,CAAA39E,eAAA,CAA4B89E,CAA5B,CAAJ,EAAkE,GAAlE,GAA4CA,CAAAl3E,OAAA,CAAe,CAAf,CAA5C,EACEg3E,CAAA54E,KAAA,CAAsB84E,CAAtB,CALC,CASP,MAAOF,EAdkC,CA5D3C,IAAI33E,EAAQk3E,CAAAl3E,MAAA,CAAiBg3E,EAAjB,CACZ,IAAMh3E,CAAAA,CAAN,CACE,KAAM+2E,GAAA,CAAgB,MAAhB,CAIJG,CAJI,CAIQn0E,EAAA,CAAYo0E,CAAZ,CAJR,CAAN,CAUF,IAAIW,EAAY93E,CAAA,CAAM,CAAN,CAAZ83E,EAAwB93E,CAAA,CAAM,CAAN,CAA5B,CAEI43E,EAAU53E,CAAA,CAAM,CAAN,CAGV+3E,EAAAA,CAAW,MAAAp6E,KAAA,CAAYqC,CAAA,CAAM,CAAN,CAAZ,CAAX+3E,EAAoC/3E,CAAA,CAAM,CAAN,CAExC,KAAIg4E,EAAUh4E,CAAA,CAAM,CAAN,CAEVlD,EAAAA,CAAU8X,CAAA,CAAO5U,CAAA,CAAM,CAAN,CAAA,CAAWA,CAAA,CAAM,CAAN,CAAX,CAAsB83E,CAA7B,CAEd,KAAIG,EADaF,CACbE,EADyBrjE,CAAA,CAAOmjE,CAAP,CACzBE,EAA4Bn7E,CAAhC,CACIo7E,EAAYF,CAAZE,EAAuBtjE,CAAA,CAAOojE,CAAP,CAD3B,CAMIG,EAAoBH,CAAA,CACE,QAAQ,CAACv9E,CAAD,CAAQ2mB,CAAR,CAAgB,CAAE,MAAO82D,EAAA,CAAUlyE,CAAV,CAAiBob,CAAjB,CAAT,CAD1B,CAEEg3D,QAAuB,CAAC39E,CAAD,CAAQ,CAAE,MAAO6jB,GAAA,CAAQ7jB,CAAR,CAAT,CARzD,CASI49E,EAAkBA,QAAQ,CAAC59E,CAAD,CAAQZ,CAAR,CAAa,CACzC,MAAOs+E,EAAA,CAAkB19E,CAAlB,CAAyB69E,CAAA,CAAU79E,CAAV,CAAiBZ,CAAjB,CAAzB,CADkC,CAT3C,CAaI0+E,EAAY3jE,CAAA,CAAO5U,CAAA,CAAM,CAAN,CAAP,EAAmBA,CAAA,CAAM,CAAN,CAAnB,CAbhB,CAcIw4E,EAAY5jE,CAAA,CAAO5U,CAAA,CAAM,CAAN,CAAP,EAAmB,EAAnB,CAdhB,CAeIy4E,EAAgB7jE,CAAA,CAAO5U,CAAA,CAAM,CAAN,CAAP,EAAmB,EAAnB,CAfpB,CAgBI04E,EAAW9jE,CAAA,CAAO5U,CAAA,CAAM,CAAN,CAAP,CAhBf,CAkBIohB,EAAS,EAlBb,CAmBIk3D,EAAYV,CAAA,CAAU,QAAQ,CAACn9E,CAAD,CAAQZ,CAAR,CAAa,CAC7CunB,CAAA,CAAOw2D,CAAP,CAAA,CAAkB/9E,CAClBunB,EAAA,CAAO02D,CAAP,CAAA;AAAoBr9E,CACpB,OAAO2mB,EAHsC,CAA/B,CAIZ,QAAQ,CAAC3mB,CAAD,CAAQ,CAClB2mB,CAAA,CAAO02D,CAAP,CAAA,CAAoBr9E,CACpB,OAAO2mB,EAFW,CA+BpB,OAAO,CACL42D,QAASA,CADJ,CAELK,gBAAiBA,CAFZ,CAGLM,cAAe/jE,CAAA,CAAO8jE,CAAP,CAAiB,QAAQ,CAAChB,CAAD,CAAe,CAIrD,IAAIkB,EAAe,EACnBlB,EAAA,CAAeA,CAAf,EAA+B,EAI/B,KAFA,IAAIC,EAAmBF,CAAA,CAAoBC,CAApB,CAAvB,CACImB,EAAqBlB,CAAAt+E,OADzB,CAESmF,EAAQ,CAAjB,CAAoBA,CAApB,CAA4Bq6E,CAA5B,CAAgDr6E,CAAA,EAAhD,CAAyD,CACvD,IAAI3E,EAAO69E,CAAD,GAAkBC,CAAlB,CAAsCn5E,CAAtC,CAA8Cm5E,CAAA,CAAiBn5E,CAAjB,CAAxD,CACI/D,EAAQi9E,CAAA,CAAa79E,CAAb,CADZ,CAGIunB,EAASk3D,CAAA,CAAU79E,CAAV,CAAiBZ,CAAjB,CAHb,CAIIw9E,EAAcc,CAAA,CAAkB19E,CAAlB,CAAyB2mB,CAAzB,CAClBw3D,EAAA75E,KAAA,CAAkBs4E,CAAlB,CAGA,IAAIr3E,CAAA,CAAM,CAAN,CAAJ,EAAgBA,CAAA,CAAM,CAAN,CAAhB,CACMs3E,CACJ,CADYiB,CAAA,CAAUvyE,CAAV,CAAiBob,CAAjB,CACZ,CAAAw3D,CAAA75E,KAAA,CAAkBu4E,CAAlB,CAIEt3E,EAAA,CAAM,CAAN,CAAJ,GACM84E,CACJ,CADkBL,CAAA,CAAczyE,CAAd,CAAqBob,CAArB,CAClB,CAAAw3D,CAAA75E,KAAA,CAAkB+5E,CAAlB,CAFF,CAfuD,CAoBzD,MAAOF,EA7B8C,CAAxC,CAHV,CAmCLG,WAAYA,QAAQ,EAAG,CAWrB,IATA,IAAIC,EAAc,EAAlB,CACIC,EAAiB,EADrB,CAKIvB,EAAegB,CAAA,CAAS1yE,CAAT,CAAf0xE,EAAkC,EALtC,CAMIC,EAAmBF,CAAA,CAAoBC,CAApB,CANvB,CAOImB,EAAqBlB,CAAAt+E,OAPzB,CASSmF,EAAQ,CAAjB,CAAoBA,CAApB,CAA4Bq6E,CAA5B,CAAgDr6E,CAAA,EAAhD,CAAyD,CACvD,IAAI3E,EAAO69E,CAAD,GAAkBC,CAAlB,CAAsCn5E,CAAtC,CAA8Cm5E,CAAA,CAAiBn5E,CAAjB,CAAxD,CAEI4iB,EAASk3D,CAAA,CADDZ,CAAAj9E,CAAaZ,CAAbY,CACC,CAAiBZ,CAAjB,CAFb,CAGI21E,EAAYyI,CAAA,CAAYjyE,CAAZ,CAAmBob,CAAnB,CAHhB,CAIIi2D,EAAcc,CAAA,CAAkB3I,CAAlB,CAA6BpuD,CAA7B,CAJlB,CAKIk2D,EAAQiB,CAAA,CAAUvyE,CAAV,CAAiBob,CAAjB,CALZ,CAMIm2D,EAAQiB,CAAA,CAAUxyE,CAAV,CAAiBob,CAAjB,CANZ,CAOIo2D,EAAWiB,CAAA,CAAczyE,CAAd,CAAqBob,CAArB,CAPf,CAQI83D,EAAa,IAAI9B,CAAJ,CAAWC,CAAX,CAAwB7H,CAAxB,CAAmC8H,CAAnC,CAA0CC,CAA1C,CAAiDC,CAAjD,CAEjBwB,EAAAj6E,KAAA,CAAiBm6E,CAAjB,CACAD,EAAA,CAAe5B,CAAf,CAAA,CAA8B6B,CAZyB,CAezD,MAAO,CACLj7E,MAAO+6E,CADF,CAELC,eAAgBA,CAFX;AAGLE,uBAAwBA,QAAQ,CAAC1+E,CAAD,CAAQ,CACtC,MAAOw+E,EAAA,CAAeZ,CAAA,CAAgB59E,CAAhB,CAAf,CAD+B,CAHnC,CAML2+E,uBAAwBA,QAAQ,CAACjsE,CAAD,CAAS,CAGvC,MAAO6qE,EAAA,CAAU1xE,EAAA3H,KAAA,CAAawO,CAAAqiE,UAAb,CAAV,CAA2CriE,CAAAqiE,UAHX,CANpC,CA1Bc,CAnClB,CA/EyD,CAF+B,IAiK7F6J,EAAiBxgF,CAAA0I,SAAAoW,cAAA,CAA8B,QAA9B,CAjK4E,CAkK7F2hE,EAAmBzgF,CAAA0I,SAAAoW,cAAA,CAA8B,UAA9B,CA+RvB,OAAO,CACLqT,SAAU,GADL,CAELkF,SAAU,CAAA,CAFL,CAGL/F,QAAS,CAAC,QAAD,CAAW,SAAX,CAHJ,CAILnC,KAAM,CACJmL,IAAKomD,QAAyB,CAACvzE,CAAD,CAAQmxE,CAAR,CAAuBr5E,CAAvB,CAA6BiwE,CAA7B,CAAoC,CAIhEA,CAAA,CAAM,CAAN,CAAAyL,eAAA,CAA0B78E,CAJsC,CAD9D,CAOJy2B,KAxSFqmD,QAA0B,CAACzzE,CAAD,CAAQmxE,CAAR,CAAuBr5E,CAAvB,CAA6BiwE,CAA7B,CAAoC,CAiM5D2L,QAASA,EAAmB,CAACvsE,CAAD,CAAS/O,CAAT,CAAkB,CAC5C+O,CAAA/O,QAAA,CAAiBA,CACjBA,EAAAo5E,SAAA,CAAmBrqE,CAAAqqE,SAMfrqE,EAAAmqE,MAAJ,GAAqBl5E,CAAAk5E,MAArB,GACEl5E,CAAAk5E,MACA,CADgBnqE,CAAAmqE,MAChB,CAAAl5E,CAAAka,YAAA,CAAsBnL,CAAAmqE,MAFxB,CAIInqE,EAAA1S,MAAJ,GAAqB2D,CAAA3D,MAArB,GAAoC2D,CAAA3D,MAApC,CAAoD0S,CAAAkqE,YAApD,CAZ4C,CAe9CsC,QAASA,EAAa,EAAG,CACvB,IAAIv9C;AAAgBjY,CAAhBiY,EAA2Bw9C,CAAAC,UAAA,EAO/B,IAAI11D,CAAJ,CAEE,IAAS,IAAA7pB,EAAI6pB,CAAAlmB,MAAA5E,OAAJiB,CAA2B,CAApC,CAA4C,CAA5C,EAAuCA,CAAvC,CAA+CA,CAAA,EAA/C,CAAoD,CAClD,IAAI6S,EAASgX,CAAAlmB,MAAA,CAAc3D,CAAd,CACT6C,EAAA,CAAUgQ,CAAAoqE,MAAV,CAAJ,CACE17D,EAAA,CAAa1O,CAAA/O,QAAAsa,WAAb,CADF,CAGEmD,EAAA,CAAa1O,CAAA/O,QAAb,CALgD,CAUtD+lB,CAAA,CAAUpU,CAAAgpE,WAAA,EAEV,KAAIe,EAAkB,EAGlBC,EAAJ,EACE5C,CAAAja,QAAA,CAAsB8c,CAAtB,CAGF71D,EAAAlmB,MAAAvE,QAAA,CAAsBugF,QAAkB,CAAC9sE,CAAD,CAAS,CAC/C,IAAI+sE,CAEJ,IAAI/8E,CAAA,CAAUgQ,CAAAoqE,MAAV,CAAJ,CAA6B,CAI3B2C,CAAA,CAAeJ,CAAA,CAAgB3sE,CAAAoqE,MAAhB,CAEV2C,EAAL,GAEEA,CAQA,CAReZ,CAAAz9E,UAAA,CAA2B,CAAA,CAA3B,CAQf,CAPAs+E,CAAAziE,YAAA,CAAyBwiE,CAAzB,CAOA,CAHAA,CAAA5C,MAGA,CAHsC,IAAjB,GAAAnqE,CAAAoqE,MAAA,CAAwB,MAAxB,CAAiCpqE,CAAAoqE,MAGtD,CAAAuC,CAAA,CAAgB3sE,CAAAoqE,MAAhB,CAAA,CAAgC2C,CAVlC,CA3DJ,KAAIE,EAAgBf,CAAAx9E,UAAA,CAAyB,CAAA,CAAzB,CAqDW,CAA7B,IAwB2Bs+E,EA7EzBC,CA6EyBD,CA7EzBC,CAAAA,CAAAA,CAAgBf,CAAAx9E,UAAA,CAAyB,CAAA,CAAzB,CACpBW,EAAAkb,YAAA,CAAmB0iE,CAAnB,CACAV,EAAA,CAsEqBvsE,CAtErB,CAA4BitE,CAA5B,CAgDiD,CAAjD,CA+BAjD,EAAA,CAAc,CAAd,CAAAz/D,YAAA,CAA6ByiE,CAA7B,CAEAE,EAAA3kB,QAAA,EAGK2kB,EAAA7lB,SAAA,CAAqBp4B,CAArB,CAAL,GACMk+C,CAEJ,CAFgBV,CAAAC,UAAA,EAEhB,EADqB9pE,CAAAioE,QACjB,EADsC1b,CACtC,CAAkBn8D,EAAA,CAAOi8B,CAAP,CAAsBk+C,CAAtB,CAAlB,CAAqDl+C,CAArD,GAAuEk+C,CAA3E,IACED,CAAAtlB,cAAA,CAA0BulB,CAA1B,CACA;AAAAD,CAAA3kB,QAAA,EAFF,CAHF,CAjEuB,CA9MzB,IAAIkkB,EAAa7L,CAAA,CAAM,CAAN,CAAjB,CACIsM,EAActM,CAAA,CAAM,CAAN,CADlB,CAEIzR,EAAWx+D,CAAAw+D,SAFf,CAMI0d,CACK1/E,EAAAA,CAAI,CAAb,KAT4D,IAS5C64C,EAAWgkC,CAAAhkC,SAAA,EATiC,CASPj4C,EAAKi4C,CAAA95C,OAA1D,CAA2EiB,CAA3E,CAA+EY,CAA/E,CAAmFZ,CAAA,EAAnF,CACE,GAA0B,EAA1B,GAAI64C,CAAA,CAAS74C,CAAT,CAAAG,MAAJ,CAA8B,CAC5Bu/E,CAAA,CAAc7mC,CAAAiM,GAAA,CAAY9kD,CAAZ,CACd,MAF4B,CAMhC,IAAIy/E,EAAsB,CAAEC,CAAAA,CAA5B,CAEIO,EAAgBnhF,CAAA,CAAOigF,CAAAx9E,UAAA,CAAyB,CAAA,CAAzB,CAAP,CACpB0+E,EAAAj5E,IAAA,CAAkB,GAAlB,CAEA,KAAI6iB,CAAJ,CACIpU,EAAYknE,CAAA,CAAuBn5E,CAAAiS,UAAvB,CAAuConE,CAAvC,CAAsDnxE,CAAtD,CADhB,CAKIm0E,EAAennE,CAAA,CAAU,CAAV,CAAAwE,uBAAA,EA8Bd8kD,EAAL,EAsDE+d,CAAA7lB,SAiCA,CAjCuBgmB,QAAQ,CAAC//E,CAAD,CAAQ,CACrC,MAAO,CAACA,CAAR,EAAkC,CAAlC,GAAiBA,CAAApB,OADoB,CAiCvC,CA5BAugF,CAAAa,WA4BA,CA5BwBC,QAA+B,CAACjgF,CAAD,CAAQ,CAC7D0pB,CAAAlmB,MAAAvE,QAAA,CAAsB,QAAQ,CAACyT,CAAD,CAAS,CACrCA,CAAA/O,QAAAm+D,SAAA,CAA0B,CAAA,CADW,CAAvC,CAII9hE,EAAJ,EACEA,CAAAf,QAAA,CAAc,QAAQ,CAACD,CAAD,CAAO,CAE3B,GADI0T,CACJ,CADagX,CAAAg1D,uBAAA,CAA+B1/E,CAA/B,CACb,CAAY0T,CAAA/O,QAAAm+D,SAAA,CAA0B,CAAA,CAFX,CAA7B,CAN2D,CA4B/D,CAdAqd,CAAAC,UAcA,CAduBc,QAA8B,EAAG,CAAA,IAClDC,EAAiBzD,CAAA71E,IAAA,EAAjBs5E,EAAwC,EADU,CAElDC,EAAa,EAEjBnhF,EAAA,CAAQkhF,CAAR,CAAwB,QAAQ,CAACngF,CAAD,CAAQ,CAEtC,CADI0S,CACJ;AADagX,CAAA80D,eAAA,CAAuBx+E,CAAvB,CACb,GAAe+8E,CAAArqE,CAAAqqE,SAAf,EAAgCqD,CAAA97E,KAAA,CAAgBolB,CAAAi1D,uBAAA,CAA+BjsE,CAA/B,CAAhB,CAFM,CAAxC,CAKA,OAAO0tE,EAT+C,CAcxD,CAAI9qE,CAAAioE,QAAJ,EAEEhyE,CAAAu3B,iBAAA,CAAuB,QAAQ,EAAG,CAChC,GAAIrkC,CAAA,CAAQmhF,CAAAxlB,WAAR,CAAJ,CACE,MAAOwlB,EAAAxlB,WAAArE,IAAA,CAA2B,QAAQ,CAAC/1D,CAAD,CAAQ,CAChD,MAAOsV,EAAAsoE,gBAAA,CAA0B59E,CAA1B,CADyC,CAA3C,CAFuB,CAAlC,CAMG,QAAQ,EAAG,CACZ4/E,CAAA3kB,QAAA,EADY,CANd,CAzFJ,GAEEkkB,CAAAa,WA2CA,CA3CwBC,QAA4B,CAACjgF,CAAD,CAAQ,CAC1D,IAAI0S,EAASgX,CAAAg1D,uBAAA,CAA+B1+E,CAA/B,CAET0S,EAAJ,EAMMgqE,CAAA,CAAc,CAAd,CAAA18E,MAQJ,GAR+B0S,CAAAkqE,YAQ/B,GAvBJkD,CAAA1xD,OAAA,EAoBM,CAlCDkxD,CAkCC,EAjCJC,CAAAnxD,OAAA,EAiCI,CADAsuD,CAAA,CAAc,CAAd,CAAA18E,MACA,CADyB0S,CAAAkqE,YACzB,CAAAlqE,CAAA/O,QAAAm+D,SAAA,CAA0B,CAAA,CAG5B,EAAApvD,CAAA/O,QAAA2c,aAAA,CAA4B,UAA5B,CAAwC,UAAxC,CAdF,EAgBgB,IAAd,GAAItgB,CAAJ,EAAsBs/E,CAAtB,EAzBJQ,CAAA1xD,OAAA,EAlBA,CALKkxD,CAKL,EAJE5C,CAAAja,QAAA,CAAsB8c,CAAtB,CAIF,CAFA7C,CAAA71E,IAAA,CAAkB,EAAlB,CAEA,CADA04E,CAAAn8E,KAAA,CAAiB,UAAjB;AAA6B,CAAA,CAA7B,CACA,CAAAm8E,CAAAl8E,KAAA,CAAiB,UAAjB,CAA6B,CAAA,CAA7B,CA2CI,GAvCCi8E,CAUL,EATEC,CAAAnxD,OAAA,EASF,CAHAsuD,CAAAja,QAAA,CAAsBqd,CAAtB,CAGA,CAFApD,CAAA71E,IAAA,CAAkB,GAAlB,CAEA,CADAi5E,CAAA18E,KAAA,CAAmB,UAAnB,CAA+B,CAAA,CAA/B,CACA,CAAA08E,CAAAz8E,KAAA,CAAmB,UAAnB,CAA+B,CAAA,CAA/B,CA6BI,CAnBwD,CA2C5D,CAdA87E,CAAAC,UAcA,CAduBc,QAA2B,EAAG,CAEnD,IAAIG,EAAiB32D,CAAA80D,eAAA,CAAuB9B,CAAA71E,IAAA,EAAvB,CAErB,OAAIw5E,EAAJ,EAAuBtD,CAAAsD,CAAAtD,SAAvB,EArDGuC,CAwDM,EAvDTC,CAAAnxD,OAAA,EAuDS,CA1CX0xD,CAAA1xD,OAAA,EA0CW,CAAA1E,CAAAi1D,uBAAA,CAA+B0B,CAA/B,CAHT,EAKO,IAT4C,CAcrD,CAAI/qE,CAAAioE,QAAJ,EACEhyE,CAAAzI,OAAA,CACE,QAAQ,EAAG,CAAE,MAAOwS,EAAAsoE,gBAAA,CAA0BgC,CAAAxlB,WAA1B,CAAT,CADb,CAEE,QAAQ,EAAG,CAAEwlB,CAAA3kB,QAAA,EAAF,CAFb,CA9CJ,CAuGIqkB,EAAJ,EAIEC,CAAAnxD,OAAA,EAOA,CAJA4nD,CAAA,CAASuJ,CAAT,CAAA,CAAsBh0E,CAAtB,CAIA,CAAAg0E,CAAA37D,YAAA,CAAwB,UAAxB,CAXF,EAaE27D,CAbF,CAagB5gF,CAAA,CAAOigF,CAAAx9E,UAAA,CAAyB,CAAA,CAAzB,CAAP,CAGhBs7E,EAAAn0E,MAAA,EAIA22E,EAAA,EAGA3zE,EAAAu3B,iBAAA,CAAuBxtB,CAAA4oE,cAAvB,CAAgDgB,CAAhD,CAtL4D,CAiSxD,CAJD,CAjc0F,CAA1E,CA9sEzB,CA80FIzqE,GAAuB,CAAC,SAAD,CAAY,cAAZ;AAA4B,MAA5B,CAAoC,QAAQ,CAACs7C,CAAD,CAAUh3C,CAAV,CAAwBkB,CAAxB,CAA8B,CAAA,IAC/FqmE,EAAQ,KADuF,CAE/FC,EAAU,oBAEd,OAAO,CACLhzD,KAAMA,QAAQ,CAAChiB,CAAD,CAAQ5H,CAAR,CAAiBN,CAAjB,CAAuB,CAoDnCm9E,QAASA,EAAiB,CAACC,CAAD,CAAU,CAClC98E,CAAA+7B,KAAA,CAAa+gD,CAAb,EAAwB,EAAxB,CADkC,CApDD,IAC/BC,EAAYr9E,CAAAkuC,MADmB,CAE/BovC,EAAUt9E,CAAA+uB,MAAAqY,KAAVk2C,EAA6Bh9E,CAAAN,KAAA,CAAaA,CAAA+uB,MAAAqY,KAAb,CAFE,CAG/BnuB,EAASjZ,CAAAiZ,OAATA,EAAwB,CAHO,CAI/BskE,EAAQr1E,CAAAw7C,MAAA,CAAY45B,CAAZ,CAARC,EAAgC,EAJD,CAK/BC,EAAc,EALiB,CAM/Br8C,EAAczrB,CAAAyrB,YAAA,EANiB,CAO/BC,EAAY1rB,CAAA0rB,UAAA,EAPmB,CAQ/Bq8C,EAAmBt8C,CAAnBs8C,CAAiCJ,CAAjCI,CAA6C,GAA7CA,CAAmDxkE,CAAnDwkE,CAA4Dr8C,CAR7B,CAS/Bs8C,EAAel1E,EAAA3J,KATgB,CAU/B8+E,CAEJ/hF,EAAA,CAAQoE,CAAR,CAAc,QAAQ,CAAC6iC,CAAD,CAAa+6C,CAAb,CAA4B,CAChD,IAAIC,EAAWX,CAAAnjE,KAAA,CAAa6jE,CAAb,CACXC,EAAJ,GACMC,CACJ,EADeD,CAAA,CAAS,CAAT,CAAA,CAAc,GAAd,CAAoB,EACnC,EADyCt9E,CAAA,CAAUs9E,CAAA,CAAS,CAAT,CAAV,CACzC,CAAAN,CAAA,CAAMO,CAAN,CAAA,CAAiBx9E,CAAAN,KAAA,CAAaA,CAAA+uB,MAAA,CAAW6uD,CAAX,CAAb,CAFnB,CAFgD,CAAlD,CAOAhiF,EAAA,CAAQ2hF,CAAR,CAAe,QAAQ,CAAC16C,CAAD,CAAa9mC,CAAb,CAAkB,CACvCyhF,CAAA,CAAYzhF,CAAZ,CAAA,CAAmB2Z,CAAA,CAAamtB,CAAAz+B,QAAA,CAAmB64E,CAAnB,CAA0BQ,CAA1B,CAAb,CADoB,CAAzC,CAKAv1E,EAAAzI,OAAA,CAAa49E,CAAb,CAAwBU,QAA+B,CAACj4D,CAAD,CAAS,CAC9D,IAAIooB,EAAQ0jB,UAAA,CAAW9rC,CAAX,CAAZ,CACIk4D,EAAaz5E,KAAA,CAAM2pC,CAAN,CAEZ8vC,EAAL,EAAqB9vC,CAArB,GAA8BqvC,EAA9B,GAGErvC,CAHF,CAGUwe,CAAAuxB,UAAA,CAAkB/vC,CAAlB,CAA0Bj1B,CAA1B,CAHV,CAQKi1B,EAAL,GAAeyvC,CAAf,EAA+BK,CAA/B,EAA6CviF,CAAA,CAASkiF,CAAT,CAA7C,EAAoEp5E,KAAA,CAAMo5E,CAAN,CAApE;CACED,CAAA,EAWA,CAVIQ,CAUJ,CAVgBV,CAAA,CAAYtvC,CAAZ,CAUhB,CATI9uC,CAAA,CAAY8+E,CAAZ,CAAJ,EACgB,IAId,EAJIp4D,CAIJ,EAHElP,CAAAq9B,MAAA,CAAW,oCAAX,CAAkD/F,CAAlD,CAA0D,OAA1D,CAAoEovC,CAApE,CAGF,CADAI,CACA,CADe7+E,CACf,CAAAs+E,CAAA,EALF,EAOEO,CAPF,CAOiBx1E,CAAAzI,OAAA,CAAay+E,CAAb,CAAwBf,CAAxB,CAEjB,CAAAQ,CAAA,CAAYzvC,CAZd,CAZ8D,CAAhE,CAxBmC,CADhC,CAJ4F,CAA1E,CA90F3B,CAgtGI58B,GAAoB,CAAC,QAAD,CAAW,UAAX,CAAuB,UAAvB,CAAmC,QAAQ,CAACwF,CAAD,CAAS9C,CAAT,CAAmB2+D,CAAnB,CAA6B,CAE9F,IAAIwL,EAAiBnjF,CAAA,CAAO,UAAP,CAArB,CAEIojF,EAAcA,QAAQ,CAACl2E,CAAD,CAAQxH,CAAR,CAAe29E,CAAf,CAAgC1hF,CAAhC,CAAuC2hF,CAAvC,CAAsDviF,CAAtD,CAA2DwiF,CAA3D,CAAwE,CAEhGr2E,CAAA,CAAMm2E,CAAN,CAAA,CAAyB1hF,CACrB2hF,EAAJ,GAAmBp2E,CAAA,CAAMo2E,CAAN,CAAnB,CAA0CviF,CAA1C,CACAmM,EAAA4yD,OAAA,CAAep6D,CACfwH,EAAAs2E,OAAA,CAA0B,CAA1B,GAAgB99E,CAChBwH,EAAAu2E,MAAA,CAAe/9E,CAAf,GAA0B69E,CAA1B,CAAwC,CACxCr2E,EAAAw2E,QAAA,CAAgB,EAAEx2E,CAAAs2E,OAAF,EAAkBt2E,CAAAu2E,MAAlB,CAEhBv2E,EAAAy2E,KAAA,CAAa,EAAEz2E,CAAA02E,MAAF,CAA8B,CAA9B,IAAiBl+E,CAAjB,CAAuB,CAAvB,EATmF,CAsBlG,OAAO,CACLwsB,SAAU,GADL,CAEL2N,aAAc,CAAA,CAFT,CAGL/M,WAAY,SAHP,CAILb,SAAU,GAJL,CAKLmF,SAAU,CAAA,CALL,CAMLsG,MAAO,CAAA,CANF,CAOLvwB,QAAS02E,QAAwB,CAACtxD,CAAD,CAAWwB,CAAX,CAAkB,CACjD,IAAI8T,EAAa9T,CAAA1d,SAAjB,CACIytE,EAAqBnM,CAAA95C,gBAAA,CAAyB,cAAzB;AAAyCgK,CAAzC,CADzB,CAGI3gC,EAAQ2gC,CAAA3gC,MAAA,CAAiB,4FAAjB,CAEZ,IAAKA,CAAAA,CAAL,CACE,KAAMi8E,EAAA,CAAe,MAAf,CACFt7C,CADE,CAAN,CAIF,IAAIwpC,EAAMnqE,CAAA,CAAM,CAAN,CAAV,CACIkqE,EAAMlqE,CAAA,CAAM,CAAN,CADV,CAEI68E,EAAU78E,CAAA,CAAM,CAAN,CAFd,CAGI88E,EAAa98E,CAAA,CAAM,CAAN,CAHjB,CAKAA,EAAQmqE,CAAAnqE,MAAA,CAAU,wDAAV,CAER,IAAKA,CAAAA,CAAL,CACE,KAAMi8E,EAAA,CAAe,QAAf,CACF9R,CADE,CAAN,CAGF,IAAIgS,EAAkBn8E,CAAA,CAAM,CAAN,CAAlBm8E,EAA8Bn8E,CAAA,CAAM,CAAN,CAAlC,CACIo8E,EAAgBp8E,CAAA,CAAM,CAAN,CAEpB,IAAI68E,CAAJ,GAAiB,CAAA,4BAAAl/E,KAAA,CAAkCk/E,CAAlC,CAAjB,EACI,2FAAAl/E,KAAA,CAAiGk/E,CAAjG,CADJ,EAEE,KAAMZ,EAAA,CAAe,UAAf,CACJY,CADI,CAAN,CA3B+C,IA+B7CE,CA/B6C,CA+B3BC,CA/B2B,CA+BXC,CA/BW,CA+BOC,CA/BP,CAgC7CC,EAAe,CAAC1/B,IAAKn/B,EAAN,CAEfw+D,EAAJ,CACEC,CADF,CACqBnoE,CAAA,CAAOkoE,CAAP,CADrB,EAGEG,CAGA,CAHmBA,QAAQ,CAACpjF,CAAD,CAAMY,CAAN,CAAa,CACtC,MAAO6jB,GAAA,CAAQ7jB,CAAR,CAD+B,CAGxC;AAAAyiF,CAAA,CAAiBA,QAAQ,CAACrjF,CAAD,CAAM,CAC7B,MAAOA,EADsB,CANjC,CAWA,OAAOujF,SAAqB,CAAC/kD,CAAD,CAAShN,CAAT,CAAmBwB,CAAnB,CAA0B2mC,CAA1B,CAAgCl7B,CAAhC,CAA6C,CAEnEykD,CAAJ,GACEC,CADF,CACmBA,QAAQ,CAACnjF,CAAD,CAAMY,CAAN,CAAa+D,CAAb,CAAoB,CAEvC49E,CAAJ,GAAmBe,CAAA,CAAaf,CAAb,CAAnB,CAAiDviF,CAAjD,CACAsjF,EAAA,CAAahB,CAAb,CAAA,CAAgC1hF,CAChC0iF,EAAAvkB,OAAA,CAAsBp6D,CACtB,OAAOu+E,EAAA,CAAiB1kD,CAAjB,CAAyB8kD,CAAzB,CALoC,CAD/C,CAkBA,KAAIE,EAAe38E,CAAA,EAGnB23B,EAAAkF,iBAAA,CAAwB2sC,CAAxB,CAA6BoT,QAAuB,CAACxzD,CAAD,CAAa,CAAA,IAC3DtrB,CAD2D,CACpDnF,CADoD,CAE3DkkF,EAAelyD,CAAA,CAAS,CAAT,CAF4C,CAI3DmyD,CAJ2D,CAO3DC,EAAe/8E,CAAA,EAP4C,CAQ3Dg9E,CAR2D,CAS3D7jF,CAT2D,CAStDY,CATsD,CAU3DkjF,CAV2D,CAY3DC,CAZ2D,CAa3DlyE,CAb2D,CAc3DmyE,CAGAhB,EAAJ,GACExkD,CAAA,CAAOwkD,CAAP,CADF,CACoB/yD,CADpB,CAIA,IAAI/wB,EAAA,CAAY+wB,CAAZ,CAAJ,CACE8zD,CACA,CADiB9zD,CACjB,CAAAg0D,CAAA,CAAcd,CAAd,EAAgCC,CAFlC,KAOE,KAASpF,CAAT,GAHAiG,EAGoBh0D,CAHNkzD,CAGMlzD,EAHYozD,CAGZpzD,CADpB8zD,CACoB9zD,CADH,EACGA,CAAAA,CAApB,CACM/vB,EAAAC,KAAA,CAAoB8vB,CAApB,CAAgC+tD,CAAhC,CAAJ,EAAsE,GAAtE,GAAgDA,CAAAl3E,OAAA,CAAe,CAAf,CAAhD,EACEi9E,CAAA7+E,KAAA,CAAoB84E,CAApB,CAKN6F,EAAA,CAAmBE,CAAAvkF,OACnBwkF,EAAA,CAAqBrkF,KAAJ,CAAUkkF,CAAV,CAGjB,KAAKl/E,CAAL,CAAa,CAAb,CAAgBA,CAAhB,CAAwBk/E,CAAxB,CAA0Cl/E,CAAA,EAA1C,CAIE,GAHA3E,CAGI,CAHGiwB,CAAD,GAAgB8zD,CAAhB,CAAkCp/E,CAAlC,CAA0Co/E,CAAA,CAAep/E,CAAf,CAG5C,CAFJ/D,CAEI,CAFIqvB,CAAA,CAAWjwB,CAAX,CAEJ,CADJ8jF,CACI,CADQG,CAAA,CAAYjkF,CAAZ,CAAiBY,CAAjB,CAAwB+D,CAAxB,CACR,CAAA6+E,CAAA,CAAaM,CAAb,CAAJ,CAEEjyE,CAGA,CAHQ2xE,CAAA,CAAaM,CAAb,CAGR,CAFA,OAAON,CAAA,CAAaM,CAAb,CAEP,CADAF,CAAA,CAAaE,CAAb,CACA,CAD0BjyE,CAC1B,CAAAmyE,CAAA,CAAer/E,CAAf,CAAA,CAAwBkN,CAL1B,KAMO,CAAA,GAAI+xE,CAAA,CAAaE,CAAb,CAAJ,CAKL,KAHAjkF,EAAA,CAAQmkF,CAAR,CAAwB,QAAQ,CAACnyE,CAAD,CAAQ,CAClCA,CAAJ,EAAaA,CAAA1F,MAAb,GAA0Bq3E,CAAA,CAAa3xE,CAAA6c,GAAb,CAA1B,CAAmD7c,CAAnD,CADsC,CAAxC,CAGM,CAAAuwE,CAAA,CAAe,OAAf,CAEFt7C,CAFE,CAEUg9C,CAFV,CAEqBljF,CAFrB,CAAN,CAKAojF,CAAA,CAAer/E,CAAf,CAAA,CAAwB,CAAC+pB,GAAIo1D,CAAL;AAAgB33E,MAAO1G,IAAAA,EAAvB,CAAkCvD,MAAOuD,IAAAA,EAAzC,CACxBm+E,EAAA,CAAaE,CAAb,CAAA,CAA0B,CAAA,CAXrB,CAgBT,IAASI,CAAT,GAAqBV,EAArB,CAAmC,CACjC3xE,CAAA,CAAQ2xE,CAAA,CAAaU,CAAb,CACRpiD,EAAA,CAAmBryB,EAAA,CAAcoC,CAAA3P,MAAd,CACnB+V,EAAAouD,MAAA,CAAevkC,CAAf,CACA,IAAIA,CAAA,CAAiB,CAAjB,CAAAjjB,WAAJ,CAGE,IAAKla,CAAW,CAAH,CAAG,CAAAnF,CAAA,CAASsiC,CAAAtiC,OAAzB,CAAkDmF,CAAlD,CAA0DnF,CAA1D,CAAkEmF,CAAA,EAAlE,CACEm9B,CAAA,CAAiBn9B,CAAjB,CAAA,aAAA,CAAsC,CAAA,CAG1CkN,EAAA1F,MAAAwC,SAAA,EAXiC,CAenC,IAAKhK,CAAL,CAAa,CAAb,CAAgBA,CAAhB,CAAwBk/E,CAAxB,CAA0Cl/E,CAAA,EAA1C,CAKE,GAJA3E,CAIImM,CAJG8jB,CAAD,GAAgB8zD,CAAhB,CAAkCp/E,CAAlC,CAA0Co/E,CAAA,CAAep/E,CAAf,CAI5CwH,CAHJvL,CAGIuL,CAHI8jB,CAAA,CAAWjwB,CAAX,CAGJmM,CAFJ0F,CAEI1F,CAFI63E,CAAA,CAAer/E,CAAf,CAEJwH,CAAA0F,CAAA1F,MAAJ,CAAiB,CAIfw3E,CAAA,CAAWD,CAGX,GACEC,EAAA,CAAWA,CAAA9zE,YADb,OAES8zE,CAFT,EAEqBA,CAAA,aAFrB,CAIkB9xE,EAnLrB3P,MAAA,CAAY,CAAZ,CAmLG,EAA4ByhF,CAA5B,EAEE1rE,CAAAmuD,KAAA,CAAc32D,EAAA,CAAcoC,CAAA3P,MAAd,CAAd,CAA0C,IAA1C,CAAgDwhF,CAAhD,CAEFA,EAAA,CAA2B7xE,CAnL9B3P,MAAA,CAmL8B2P,CAnLlB3P,MAAA1C,OAAZ,CAAiC,CAAjC,CAoLG6iF,EAAA,CAAYxwE,CAAA1F,MAAZ,CAAyBxH,CAAzB,CAAgC29E,CAAhC,CAAiD1hF,CAAjD,CAAwD2hF,CAAxD,CAAuEviF,CAAvE,CAA4E6jF,CAA5E,CAhBe,CAAjB,IAmBEplD,EAAA,CAAY0lD,QAA2B,CAACjiF,CAAD,CAAQiK,CAAR,CAAe,CACpD0F,CAAA1F,MAAA,CAAcA,CAEd,KAAIwD,EAAUozE,CAAA/gF,UAAA,CAA6B,CAAA,CAA7B,CACdE,EAAA,CAAMA,CAAA1C,OAAA,EAAN,CAAA,CAAwBmQ,CAExBsI,EAAAkuD,MAAA,CAAejkE,CAAf,CAAsB,IAAtB,CAA4BwhF,CAA5B,CACAA,EAAA,CAAe/zE,CAIfkC,EAAA3P,MAAA,CAAcA,CACd0hF,EAAA,CAAa/xE,CAAA6c,GAAb,CAAA,CAAyB7c,CACzBwwE,EAAA,CAAYxwE,CAAA1F,MAAZ,CAAyBxH,CAAzB,CAAgC29E,CAAhC,CAAiD1hF,CAAjD,CAAwD2hF,CAAxD,CAAuEviF,CAAvE,CAA4E6jF,CAA5E,CAboD,CAAtD,CAiBJL,EAAA;AAAeI,CAzHgD,CAAjE,CAvBuE,CA7CxB,CAP9C,CA1BuF,CAAxE,CAhtGxB,CAolHInuE,GAAkB,CAAC,UAAD,CAAa,QAAQ,CAACwC,CAAD,CAAW,CACpD,MAAO,CACLkZ,SAAU,GADL,CAEL2N,aAAc,CAAA,CAFT,CAGL3Q,KAAMA,QAAQ,CAAChiB,CAAD,CAAQ5H,CAAR,CAAiBN,CAAjB,CAAuB,CACnCkI,CAAAzI,OAAA,CAAaO,CAAAuR,OAAb,CAA0B4uE,QAA0B,CAACxjF,CAAD,CAAQ,CAK1DqX,CAAA,CAASrX,CAAA,CAAQ,aAAR,CAAwB,UAAjC,CAAA,CAA6C2D,CAA7C,CAzKY8/E,SAyKZ,CAAqE,CACnE7d,YAzKsB8d,iBAwK6C,CAArE,CAL0D,CAA5D,CADmC,CAHhC,CAD6C,CAAhC,CAplHtB,CAwvHI3vE,GAAkB,CAAC,UAAD,CAAa,QAAQ,CAACsD,CAAD,CAAW,CACpD,MAAO,CACLkZ,SAAU,GADL,CAEL2N,aAAc,CAAA,CAFT,CAGL3Q,KAAMA,QAAQ,CAAChiB,CAAD,CAAQ5H,CAAR,CAAiBN,CAAjB,CAAuB,CACnCkI,CAAAzI,OAAA,CAAaO,CAAAyQ,OAAb,CAA0B6vE,QAA0B,CAAC3jF,CAAD,CAAQ,CAG1DqX,CAAA,CAASrX,CAAA,CAAQ,UAAR,CAAqB,aAA9B,CAAA,CAA6C2D,CAA7C,CA3UY8/E,SA2UZ,CAAoE,CAClE7d,YA3UsB8d,iBA0U4C,CAApE,CAH0D,CAA5D,CADmC,CAHhC,CAD6C,CAAhC,CAxvHtB,CA2zHI3uE,GAAmBmiD,EAAA,CAAY,QAAQ,CAAC3rD,CAAD,CAAQ5H,CAAR,CAAiBN,CAAjB,CAAuB,CAChEkI,CAAAzI,OAAA,CAAaO,CAAAyR,QAAb,CAA2B8uE,QAA2B,CAACC,CAAD,CAAYC,CAAZ,CAAuB,CACvEA,CAAJ,EAAkBD,CAAlB,GAAgCC,CAAhC,EACE7kF,CAAA,CAAQ6kF,CAAR,CAAmB,QAAQ,CAACj9E,CAAD,CAAM2L,CAAN,CAAa,CAAE7O,CAAA09D,IAAA,CAAY7uD,CAAZ,CAAmB,EAAnB,CAAF,CAAxC,CAEEqxE,EAAJ,EAAelgF,CAAA09D,IAAA,CAAYwiB,CAAZ,CAJ4D,CAA7E;AAKG,CAAA,CALH,CADgE,CAA3C,CA3zHvB,CAq8HI5uE,GAAoB,CAAC,UAAD,CAAa,UAAb,CAAyB,QAAQ,CAACoC,CAAD,CAAW2+D,CAAX,CAAqB,CAC5E,MAAO,CACLtmD,QAAS,UADJ,CAILniB,WAAY,CAAC,QAAD,CAAWw2E,QAA2B,EAAG,CACpD,IAAAC,MAAA,CAAa,EADuC,CAAzC,CAJP,CAOLz2D,KAAMA,QAAQ,CAAChiB,CAAD,CAAQ5H,CAAR,CAAiBN,CAAjB,CAAuB0gF,CAAvB,CAA2C,CAAA,IAEnDE,EAAsB,EAF6B,CAGnDC,EAAmB,EAHgC,CAInDC,EAA0B,EAJyB,CAKnDC,EAAiB,EALkC,CAOnDC,EAAgBA,QAAQ,CAACvgF,CAAD,CAAQC,CAAR,CAAe,CACvC,MAAO,SAAQ,EAAG,CAAED,CAAAG,OAAA,CAAaF,CAAb,CAAoB,CAApB,CAAF,CADqB,CAI3CwH,EAAAzI,OAAA,CAVgBO,CAAA2R,SAUhB,EAViC3R,CAAA+J,GAUjC,CAAwBk3E,QAA4B,CAACtkF,CAAD,CAAQ,CAAA,IACtDH,CADsD,CACnDY,CACFZ,EAAA,CAAI,CAAT,KAAYY,CAAZ,CAAiB0jF,CAAAvlF,OAAjB,CAAiDiB,CAAjD,CAAqDY,CAArD,CAAyD,EAAEZ,CAA3D,CACEwX,CAAAwV,OAAA,CAAgBs3D,CAAA,CAAwBtkF,CAAxB,CAAhB,CAIGA,EAAA,CAFLskF,CAAAvlF,OAEK,CAF4B,CAEjC,KAAY6B,CAAZ,CAAiB2jF,CAAAxlF,OAAjB,CAAwCiB,CAAxC,CAA4CY,CAA5C,CAAgD,EAAEZ,CAAlD,CAAqD,CACnD,IAAIiiE,EAAWjzD,EAAA,CAAcq1E,CAAA,CAAiBrkF,CAAjB,CAAAyB,MAAd,CACf8iF,EAAA,CAAevkF,CAAf,CAAAkO,SAAA,EAEA6wB,EADculD,CAAA,CAAwBtkF,CAAxB,CACd++B,CAD2CvnB,CAAAouD,MAAA,CAAe3D,CAAf,CAC3CljC,MAAA,CAAaylD,CAAA,CAAcF,CAAd,CAAuCtkF,CAAvC,CAAb,CAJmD,CAOrDqkF,CAAAtlF,OAAA,CAA0B,CAC1BwlF,EAAAxlF,OAAA,CAAwB,CAExB,EAAKqlF,CAAL,CAA2BF,CAAAC,MAAA,CAAyB,GAAzB,CAA+BhkF,CAA/B,CAA3B,EAAoE+jF,CAAAC,MAAA,CAAyB,GAAzB,CAApE,GACE/kF,CAAA,CAAQglF,CAAR,CAA6B,QAAQ,CAACM,CAAD,CAAqB,CACxDA,CAAApzD,WAAA,CAA8B,QAAQ,CAACqzD,CAAD;AAAcC,CAAd,CAA6B,CACjEL,CAAA9/E,KAAA,CAAoBmgF,CAApB,CACA,KAAIC,EAASH,CAAA5gF,QACb6gF,EAAA,CAAYA,CAAA5lF,OAAA,EAAZ,CAAA,CAAoCo3E,CAAA95C,gBAAA,CAAyB,kBAAzB,CAGpCgoD,EAAA5/E,KAAA,CAFY2M,CAAE3P,MAAOkjF,CAATvzE,CAEZ,CACAoG,EAAAkuD,MAAA,CAAeif,CAAf,CAA4BE,CAAA3iF,OAAA,EAA5B,CAA6C2iF,CAA7C,CAPiE,CAAnE,CADwD,CAA1D,CAlBwD,CAA5D,CAXuD,CAPpD,CADqE,CAAtD,CAr8HxB,CA2/HIvvE,GAAwB+hD,EAAA,CAAY,CACtC/lC,WAAY,SAD0B,CAEtCb,SAAU,IAF4B,CAGtCZ,QAAS,WAH6B,CAItCwO,aAAc,CAAA,CAJwB,CAKtC3Q,KAAMA,QAAQ,CAAChiB,CAAD,CAAQ5H,CAAR,CAAiB0xB,CAAjB,CAAwB0jC,CAAxB,CAA8Bl7B,CAA9B,CAA2C,CACvDk7B,CAAAirB,MAAA,CAAW,GAAX,CAAiB3uD,CAAAngB,aAAjB,CAAA,CAAwC6jD,CAAAirB,MAAA,CAAW,GAAX,CAAiB3uD,CAAAngB,aAAjB,CAAxC,EAAgF,EAChF6jD,EAAAirB,MAAA,CAAW,GAAX,CAAiB3uD,CAAAngB,aAAjB,CAAA5Q,KAAA,CAA0C,CAAE6sB,WAAY0M,CAAd,CAA2Bl6B,QAASA,CAApC,CAA1C,CAFuD,CALnB,CAAZ,CA3/H5B,CAsgII0R,GAA2B6hD,EAAA,CAAY,CACzC/lC,WAAY,SAD6B,CAEzCb,SAAU,IAF+B,CAGzCZ,QAAS,WAHgC,CAIzCwO,aAAc,CAAA,CAJ2B,CAKzC3Q,KAAMA,QAAQ,CAAChiB,CAAD,CAAQ5H,CAAR,CAAiBN,CAAjB,CAAuB01D,CAAvB,CAA6Bl7B,CAA7B,CAA0C,CACtDk7B,CAAAirB,MAAA,CAAW,GAAX,CAAA,CAAmBjrB,CAAAirB,MAAA,CAAW,GAAX,CAAnB,EAAsC,EACtCjrB,EAAAirB,MAAA,CAAW,GAAX,CAAA1/E,KAAA,CAAqB,CAAE6sB,WAAY0M,CAAd;AAA2Bl6B,QAASA,CAApC,CAArB,CAFsD,CALf,CAAZ,CAtgI/B,CA+qIIghF,GAAqBtmF,CAAA,CAAO,cAAP,CA/qIzB,CAgrIIoX,GAAwB,CAAC,UAAD,CAAa,QAAQ,CAACugE,CAAD,CAAW,CAC1D,MAAO,CACLzlD,SAAU,KADL,CAELkF,SAAU,CAAA,CAFL,CAGLjqB,QAASo5E,QAA4B,CAACl0D,CAAD,CAAW,CAG9C,IAAIm0D,EAAiB7O,CAAA,CAAStlD,CAAA6L,SAAA,EAAT,CACrB7L,EAAAnoB,MAAA,EAEA,OAAOu8E,SAA6B,CAAClnD,CAAD,CAAShN,CAAT,CAAmBC,CAAnB,CAA2BtjB,CAA3B,CAAuCswB,CAAvC,CAAoD,CAoCtFknD,QAASA,EAAkB,EAAG,CAG5BF,CAAA,CAAejnD,CAAf,CAAuB,QAAQ,CAACt8B,CAAD,CAAQ,CACrCsvB,CAAAloB,OAAA,CAAgBpH,CAAhB,CADqC,CAAvC,CAH4B,CAlC9B,GAAKu8B,CAAAA,CAAL,CACE,KAAM8mD,GAAA,CAAmB,QAAnB,CAINr8E,EAAA,CAAYsoB,CAAZ,CAJM,CAAN,CASEC,CAAArb,aAAJ,GAA4Bqb,CAAAuB,MAAA5c,aAA5B,GACEqb,CAAArb,aADF,CACwB,EADxB,CAGI2gB,EAAAA,CAAWtF,CAAArb,aAAX2gB,EAAkCtF,CAAAm0D,iBAGtCnnD,EAAA,CAOAonD,QAAkC,CAAC3jF,CAAD,CAAQs0B,CAAR,CAA0B,CACtDt0B,CAAA1C,OAAJ,CACEgyB,CAAAloB,OAAA,CAAgBpH,CAAhB,CADF,EAGEyjF,CAAA,EAGA,CAAAnvD,CAAA7nB,SAAA,EANF,CAD0D,CAP5D,CAAuC,IAAvC,CAA6CooB,CAA7C,CAGIA,EAAJ,EAAiB,CAAA0H,CAAArE,aAAA,CAAyBrD,CAAzB,CAAjB,EACE4uD,CAAA,EAtBoF,CAN1C,CAH3C,CADmD,CAAhC,CAhrI5B,CA2wII1yE,GAAkB,CAAC,gBAAD,CAAmB,QAAQ,CAAC4I,CAAD,CAAiB,CAChE,MAAO,CACLsV,SAAU,GADL,CAELkF,SAAU,CAAA,CAFL;AAGLjqB,QAASA,QAAQ,CAAC7H,CAAD,CAAUN,CAAV,CAAgB,CACd,kBAAjB,EAAIA,CAAAoC,KAAJ,EAIEwV,CAAAkJ,IAAA,CAHkB9gB,CAAAyqB,GAGlB,CAFWnqB,CAAA,CAAQ,CAAR,CAAA+7B,KAEX,CAL6B,CAH5B,CADyD,CAA5C,CA3wItB,CA0xIIwlD,GAAwB,CAAE5qB,cAAep4D,CAAjB,CAAuB+4D,QAAS/4D,CAAhC,CA1xI5B,CA6yIIijF,GACI,CAAC,UAAD,CAAa,QAAb,CAAuB,QAAQ,CAACv0D,CAAD,CAAWgN,CAAX,CAAmB,CAAA,IAEpDr3B,EAAO,IAF6C,CAGpD6+E,EAAa,IAAIphE,EAGrBzd,EAAAq5E,YAAA,CAAmBsF,EAQnB3+E,EAAAu5E,cAAA,CAAqBnhF,CAAA,CAAOP,CAAA0I,SAAAoW,cAAA,CAA8B,QAA9B,CAAP,CACrB3W,EAAA8+E,oBAAA,CAA2BC,QAAQ,CAACz+E,CAAD,CAAM,CACnC0+E,CAAAA,CAAa,IAAbA,CAAoB1hE,EAAA,CAAQhd,CAAR,CAApB0+E,CAAmC,IACvCh/E,EAAAu5E,cAAAj5E,IAAA,CAAuB0+E,CAAvB,CACA30D,EAAA6xC,QAAA,CAAiBl8D,CAAAu5E,cAAjB,CACAlvD,EAAA/pB,IAAA,CAAa0+E,CAAb,CAJuC,CAOzC3nD,EAAA1D,IAAA,CAAW,UAAX,CAAuB,QAAQ,EAAG,CAEhC3zB,CAAA8+E,oBAAA,CAA2BnjF,CAFK,CAAlC,CAKAqE,EAAAi/E,oBAAA,CAA2BC,QAAQ,EAAG,CAChCl/E,CAAAu5E,cAAA/9E,OAAA,EAAJ,EAAiCwE,CAAAu5E,cAAA1xD,OAAA,EADG,CAOtC7nB,EAAA64E,UAAA,CAAiBsG,QAAwB,EAAG,CAC1Cn/E,CAAAi/E,oBAAA,EACA;MAAO50D,EAAA/pB,IAAA,EAFmC,CAQ5CN,EAAAy5E,WAAA,CAAkB2F,QAAyB,CAAC3lF,CAAD,CAAQ,CAC7CuG,CAAAq/E,UAAA,CAAe5lF,CAAf,CAAJ,EACEuG,CAAAi/E,oBAAA,EAEA,CADA50D,CAAA/pB,IAAA,CAAa7G,CAAb,CACA,CAAc,EAAd,GAAIA,CAAJ,EAAkBuG,CAAAg5E,YAAAn8E,KAAA,CAAsB,UAAtB,CAAkC,CAAA,CAAlC,CAHpB,EAKe,IAAb,EAAIpD,CAAJ,EAAqBuG,CAAAg5E,YAArB,EACEh5E,CAAAi/E,oBAAA,EACA,CAAA50D,CAAA/pB,IAAA,CAAa,EAAb,CAFF,EAIEN,CAAA8+E,oBAAA,CAAyBrlF,CAAzB,CAV6C,CAiBnDuG,EAAAi5E,UAAA,CAAiBqG,QAAQ,CAAC7lF,CAAD,CAAQ2D,CAAR,CAAiB,CAExC,GA1r4BoB0zB,CA0r4BpB,GAAI1zB,CAAA,CAAQ,CAAR,CAAAiF,SAAJ,CAAA,CAEA2F,EAAA,CAAwBvO,CAAxB,CAA+B,gBAA/B,CACc,GAAd,GAAIA,CAAJ,GACEuG,CAAAg5E,YADF,CACqB57E,CADrB,CAGA,KAAI4tC,EAAQ6zC,CAAA74E,IAAA,CAAevM,CAAf,CAARuxC,EAAiC,CACrC6zC,EAAAjhE,IAAA,CAAenkB,CAAf,CAAsBuxC,CAAtB,CAA8B,CAA9B,CACAhrC,EAAAq5E,YAAA3kB,QAAA,EACWt3D,EApFT,CAAc,CAAd,CAAA4G,aAAA,CAA8B,UAA9B,CAAJ,GAoFa5G,CAnFX,CAAc,CAAd,CAAAm+D,SADF,CAC8B,CAAA,CAD9B,CA2EE,CAFwC,CAe1Cv7D,EAAAu/E,aAAA,CAAoBC,QAAQ,CAAC/lF,CAAD,CAAQ,CAClC,IAAIuxC,EAAQ6zC,CAAA74E,IAAA,CAAevM,CAAf,CACRuxC,EAAJ,GACgB,CAAd,GAAIA,CAAJ,EACE6zC,CAAAh3D,OAAA,CAAkBpuB,CAAlB,CACA,CAAc,EAAd,GAAIA,CAAJ,GACEuG,CAAAg5E,YADF;AACqB16E,IAAAA,EADrB,CAFF,EAMEugF,CAAAjhE,IAAA,CAAenkB,CAAf,CAAsBuxC,CAAtB,CAA8B,CAA9B,CAPJ,CAFkC,CAepChrC,EAAAq/E,UAAA,CAAiBI,QAAQ,CAAChmF,CAAD,CAAQ,CAC/B,MAAO,CAAE,CAAAolF,CAAA74E,IAAA,CAAevM,CAAf,CADsB,CAKjCuG,EAAAw4E,eAAA,CAAsBkH,QAAQ,CAACC,CAAD,CAAcvG,CAAd,CAA6BwG,CAA7B,CAA0CC,CAA1C,CAA8DC,CAA9D,CAAiF,CAE7G,GAAID,CAAJ,CAAwB,CAEtB,IAAIh9D,CACJ+8D,EAAA7jD,SAAA,CAAqB,OAArB,CAA8BgkD,QAAoC,CAACn9D,CAAD,CAAS,CACrEzmB,CAAA,CAAU0mB,CAAV,CAAJ,EACE7iB,CAAAu/E,aAAA,CAAkB18D,CAAlB,CAEFA,EAAA,CAASD,CACT5iB,EAAAi5E,UAAA,CAAer2D,CAAf,CAAuBw2D,CAAvB,CALyE,CAA3E,CAHsB,CAAxB,IAUW0G,EAAJ,CAELH,CAAApjF,OAAA,CAAmBujF,CAAnB,CAAsCE,QAA+B,CAACp9D,CAAD,CAASC,CAAT,CAAiB,CACpF+8D,CAAA9nD,KAAA,CAAiB,OAAjB,CAA0BlV,CAA1B,CACIC,EAAJ,GAAeD,CAAf,EACE5iB,CAAAu/E,aAAA,CAAkB18D,CAAlB,CAEF7iB,EAAAi5E,UAAA,CAAer2D,CAAf,CAAuBw2D,CAAvB,CALoF,CAAtF,CAFK,CAWLp5E,CAAAi5E,UAAA,CAAe2G,CAAAnmF,MAAf,CAAkC2/E,CAAlC,CAGFA,EAAAvyE,GAAA,CAAiB,UAAjB,CAA6B,QAAQ,EAAG,CACtC7G,CAAAu/E,aAAA,CAAkBK,CAAAnmF,MAAlB,CACAuG,EAAAq5E,YAAA3kB,QAAA,EAFsC,CAAxC,CA1B6G,CA9FvD,CAAlD,CA9yIR,CAynJI1oD,GAAkBA,QAAQ,EAAG,CAE/B,MAAO,CACLge,SAAU,GADL,CAELb,QAAS,CAAC,QAAD,CAAW,UAAX,CAFJ,CAGLniB,WAAY43E,EAHP,CAIL70D,SAAU,CAJL,CAKL/C,KAAM,CACJmL,IAKJ8tD,QAAsB,CAACj7E,CAAD,CAAQ5H,CAAR;AAAiBN,CAAjB,CAAuBiwE,CAAvB,CAA8B,CAGhD,IAAIsM,EAActM,CAAA,CAAM,CAAN,CAClB,IAAKsM,CAAL,CAAA,CAEA,IAAIT,EAAa7L,CAAA,CAAM,CAAN,CAEjB6L,EAAAS,YAAA,CAAyBA,CAKzBj8E,EAAAyJ,GAAA,CAAW,QAAX,CAAqB,QAAQ,EAAG,CAC9B7B,CAAAE,OAAA,CAAa,QAAQ,EAAG,CACtBm0E,CAAAtlB,cAAA,CAA0B6kB,CAAAC,UAAA,EAA1B,CADsB,CAAxB,CAD8B,CAAhC,CAUA,IAAI/7E,CAAAw+D,SAAJ,CAAmB,CAGjBsd,CAAAC,UAAA,CAAuBc,QAA0B,EAAG,CAClD,IAAIp8E,EAAQ,EACZ7E,EAAA,CAAQ0E,CAAAL,KAAA,CAAa,QAAb,CAAR,CAAgC,QAAQ,CAACoP,CAAD,CAAS,CAC3CA,CAAAovD,SAAJ,EACEh+D,CAAAQ,KAAA,CAAWoO,CAAA1S,MAAX,CAF6C,CAAjD,CAKA,OAAO8D,EAP2C,CAWpDq7E,EAAAa,WAAA,CAAwBC,QAA2B,CAACjgF,CAAD,CAAQ,CACzD,IAAIwD,EAAQ,IAAIwgB,EAAJ,CAAYhkB,CAAZ,CACZf,EAAA,CAAQ0E,CAAAL,KAAA,CAAa,QAAb,CAAR,CAAgC,QAAQ,CAACoP,CAAD,CAAS,CAC/CA,CAAAovD,SAAA,CAAkBp/D,CAAA,CAAUc,CAAA+I,IAAA,CAAUmG,CAAA1S,MAAV,CAAV,CAD6B,CAAjD,CAFyD,CAd1C,KAuBbymF,CAvBa,CAuBHC,EAAcxqB,GAC5B3wD,EAAAzI,OAAA,CAAa6jF,QAA4B,EAAG,CACtCD,CAAJ,GAAoB9G,CAAAxlB,WAApB,EAA+C10D,EAAA,CAAO+gF,CAAP,CAAiB7G,CAAAxlB,WAAjB,CAA/C,GACEqsB,CACA,CADWv1E,EAAA,CAAY0uE,CAAAxlB,WAAZ,CACX,CAAAwlB,CAAA3kB,QAAA,EAFF,CAIAyrB,EAAA,CAAc9G,CAAAxlB,WAL4B,CAA5C,CAUAwlB,EAAA7lB,SAAA,CAAuBgmB,QAAQ,CAAC//E,CAAD,CAAQ,CACrC,MAAO,CAACA,CAAR;AAAkC,CAAlC,GAAiBA,CAAApB,OADoB,CAlCtB,CAnBnB,CAJgD,CAN5C,CAEJ+5B,KAoEFiuD,QAAuB,CAACr7E,CAAD,CAAQ5H,CAAR,CAAiB0xB,CAAjB,CAAwBi+C,CAAxB,CAA+B,CAEpD,IAAIsM,EAActM,CAAA,CAAM,CAAN,CAClB,IAAKsM,CAAL,CAAA,CAEA,IAAIT,EAAa7L,CAAA,CAAM,CAAN,CAOjBsM,EAAA3kB,QAAA,CAAsB4rB,QAAQ,EAAG,CAC/B1H,CAAAa,WAAA,CAAsBJ,CAAAxlB,WAAtB,CAD+B,CATjC,CAHoD,CAtEhD,CALD,CAFwB,CAznJjC,CA4tJIznD,GAAkB,CAAC,cAAD,CAAiB,QAAQ,CAACoG,CAAD,CAAe,CAC5D,MAAO,CACLwX,SAAU,GADL,CAELD,SAAU,GAFL,CAGL9kB,QAASA,QAAQ,CAAC7H,CAAD,CAAUN,CAAV,CAAgB,CAC/B,GAAIX,CAAA,CAAUW,CAAArD,MAAV,CAAJ,CAEE,IAAIomF,EAAqBrtE,CAAA,CAAa1V,CAAArD,MAAb,CAAyB,CAAA,CAAzB,CAF3B,KAGO,CAGL,IAAIqmF,EAAoBttE,CAAA,CAAapV,CAAA+7B,KAAA,EAAb,CAA6B,CAAA,CAA7B,CACnB2mD,EAAL,EACEhjF,CAAAg7B,KAAA,CAAU,OAAV,CAAmB16B,CAAA+7B,KAAA,EAAnB,CALG,CASP,MAAO,SAAQ,CAACn0B,CAAD,CAAQ5H,CAAR,CAAiBN,CAAjB,CAAuB,CAAA,IAIhCtB,EAAS4B,CAAA5B,OAAA,EAIb,EAHIo9E,CAGJ,CAHiBp9E,CAAA2J,KAAA,CAFIo7E,mBAEJ,CAGjB,EAFM/kF,CAAAA,OAAA,EAAA2J,KAAA,CAHeo7E,mBAGf,CAEN,GACE3H,CAAAJ,eAAA,CAA0BxzE,CAA1B,CAAiC5H,CAAjC,CAA0CN,CAA1C,CAAgD+iF,CAAhD,CAAoEC,CAApE,CATkC,CAbP,CAH5B,CADqD,CAAxC,CA5tJtB,CA6vJI5zE,GAAiBpQ,EAAA,CAAQ,CAC3BkuB,SAAU,GADiB,CAE3BkF,SAAU,CAAA,CAFiB,CAAR,CA7vJrB,CA6zJIrf,GAAoBA,QAAQ,EAAG,CACjC,MAAO,CACLma,SAAU,GADL;AAELb,QAAS,UAFJ,CAGLnC,KAAMA,QAAQ,CAAChiB,CAAD,CAAQud,CAAR,CAAazlB,CAAb,CAAmB01D,CAAnB,CAAyB,CAChCA,CAAL,GACA11D,CAAA8S,SAMA,CANgB,CAAA,CAMhB,CAJA4iD,CAAAkE,YAAA9mD,SAIA,CAJ4B4wE,QAAQ,CAACjS,CAAD,CAAaC,CAAb,CAAwB,CAC1D,MAAO,CAAC1xE,CAAA8S,SAAR,EAAyB,CAAC4iD,CAAAgB,SAAA,CAAcgb,CAAd,CADgC,CAI5D,CAAA1xE,CAAAi/B,SAAA,CAAc,UAAd,CAA0B,QAAQ,EAAG,CACnCy2B,CAAAoE,UAAA,EADmC,CAArC,CAPA,CADqC,CAHlC,CAD0B,CA7zJnC,CA25JIlnD,GAAmBA,QAAQ,EAAG,CAChC,MAAO,CACLsa,SAAU,GADL,CAELb,QAAS,UAFJ,CAGLnC,KAAMA,QAAQ,CAAChiB,CAAD,CAAQud,CAAR,CAAazlB,CAAb,CAAmB01D,CAAnB,CAAyB,CACrC,GAAKA,CAAL,CAAA,CADqC,IAGjCxnC,CAHiC,CAGzBy1D,EAAa3jF,CAAA6S,UAAb8wE,EAA+B3jF,CAAA2S,QAC3C3S,EAAAi/B,SAAA,CAAc,SAAd,CAAyB,QAAQ,CAAC4lB,CAAD,CAAQ,CACnCxpD,CAAA,CAASwpD,CAAT,CAAJ,EAAsC,CAAtC,CAAuBA,CAAAtpD,OAAvB,GACEspD,CADF,CACU,IAAIhnD,MAAJ,CAAW,GAAX,CAAiBgnD,CAAjB,CAAyB,GAAzB,CADV,CAIA,IAAIA,CAAJ,EAAchlD,CAAAglD,CAAAhlD,KAAd,CACE,KAAM7E,EAAA,CAAO,WAAP,CAAA,CAAoB,UAApB,CACqD2oF,CADrD,CAEJ9+B,CAFI,CAEG5/C,EAAA,CAAYwgB,CAAZ,CAFH,CAAN,CAKFyI,CAAA,CAAS22B,CAAT,EAAkBrjD,IAAAA,EAClBk0D,EAAAoE,UAAA,EAZuC,CAAzC,CAeApE,EAAAkE,YAAAjnD,QAAA,CAA2BixE,QAAQ,CAACnS,CAAD,CAAaC,CAAb,CAAwB,CAEzD,MAAOhc,EAAAgB,SAAA,CAAcgb,CAAd,CAAP;AAAmCtyE,CAAA,CAAY8uB,CAAZ,CAAnC,EAA0DA,CAAAruB,KAAA,CAAY6xE,CAAZ,CAFD,CAlB3D,CADqC,CAHlC,CADyB,CA35JlC,CA4/JIr+D,GAAqBA,QAAQ,EAAG,CAClC,MAAO,CACL6Z,SAAU,GADL,CAELb,QAAS,UAFJ,CAGLnC,KAAMA,QAAQ,CAAChiB,CAAD,CAAQud,CAAR,CAAazlB,CAAb,CAAmB01D,CAAnB,CAAyB,CACrC,GAAKA,CAAL,CAAA,CAEA,IAAItiD,EAAa,EACjBpT,EAAAi/B,SAAA,CAAc,WAAd,CAA2B,QAAQ,CAACtiC,CAAD,CAAQ,CACrCknF,CAAAA,CAASvlF,CAAA,CAAM3B,CAAN,CACbyW,EAAA,CAAY7O,KAAA,CAAMs/E,CAAN,CAAA,CAAiB,EAAjB,CAAqBA,CACjCnuB,EAAAoE,UAAA,EAHyC,CAA3C,CAKApE,EAAAkE,YAAAxmD,UAAA,CAA6B0wE,QAAQ,CAACrS,CAAD,CAAaC,CAAb,CAAwB,CAC3D,MAAoB,EAApB,CAAQt+D,CAAR,EAA0BsiD,CAAAgB,SAAA,CAAcgb,CAAd,CAA1B,EAAuDA,CAAAn2E,OAAvD,EAA2E6X,CADhB,CAR7D,CADqC,CAHlC,CAD2B,CA5/JpC,CAglKIF,GAAqBA,QAAQ,EAAG,CAClC,MAAO,CACLga,SAAU,GADL,CAELb,QAAS,UAFJ,CAGLnC,KAAMA,QAAQ,CAAChiB,CAAD,CAAQud,CAAR,CAAazlB,CAAb,CAAmB01D,CAAnB,CAAyB,CACrC,GAAKA,CAAL,CAAA,CAEA,IAAIziD,EAAY,CAChBjT,EAAAi/B,SAAA,CAAc,WAAd,CAA2B,QAAQ,CAACtiC,CAAD,CAAQ,CACzCsW,CAAA,CAAY3U,CAAA,CAAM3B,CAAN,CAAZ,EAA4B,CAC5B+4D,EAAAoE,UAAA,EAFyC,CAA3C,CAIApE,EAAAkE,YAAA3mD,UAAA,CAA6B8wE,QAAQ,CAACtS,CAAD,CAAaC,CAAb,CAAwB,CAC3D,MAAOhc,EAAAgB,SAAA,CAAcgb,CAAd,CAAP,EAAmCA,CAAAn2E,OAAnC,EAAuD0X,CADI,CAP7D,CADqC,CAHlC,CAD2B,CAmBhClY,EAAAyN,QAAA5B,UAAJ;AAEM7L,CAAA05C,QAFN,EAGIA,OAAAE,IAAA,CAAY,gDAAZ,CAHJ,EAUAlrC,EAAA,EAmJE,CAjJFqE,EAAA,CAAmBtF,EAAnB,CAiJE,CA/IFA,EAAA1B,OAAA,CAAe,UAAf,CAA2B,EAA3B,CAA+B,CAAC,UAAD,CAAa,QAAQ,CAACc,CAAD,CAAW,CAE/Do8E,QAASA,EAAW,CAAC/5D,CAAD,CAAI,CACtBA,CAAA,EAAQ,EACR,KAAIztB,EAAIytB,CAAAtpB,QAAA,CAAU,GAAV,CACR,OAAc,EAAP,EAACnE,CAAD,CAAY,CAAZ,CAAgBytB,CAAA1uB,OAAhB,CAA2BiB,CAA3B,CAA+B,CAHhB,CAkBxBoL,CAAAjL,MAAA,CAAe,SAAf,CAA0B,CACxB,iBAAoB,CAClB,MAAS,CACP,IADO,CAEP,IAFO,CADS,CAKlB,IAAO,0DAAA,MAAA,CAAA,GAAA,CALW,CAclB,SAAY,CACV,eADU,CAEV,aAFU,CAdM,CAkBlB,KAAQ,CACN,IADM,CAEN,IAFM,CAlBU,CAsBlB,eAAkB,CAtBA,CAuBlB,MAAS,uFAAA,MAAA,CAAA,GAAA,CAvBS;AAqClB,SAAY,6BAAA,MAAA,CAAA,GAAA,CArCM,CA8ClB,WAAc,iDAAA,MAAA,CAAA,GAAA,CA9CI,CA4DlB,gBAAmB,uFAAA,MAAA,CAAA,GAAA,CA5DD,CA0ElB,aAAgB,CACd,CADc,CAEd,CAFc,CA1EE,CA8ElB,SAAY,iBA9EM,CA+ElB,SAAY,WA/EM,CAgFlB,OAAU,oBAhFQ,CAiFlB,WAAc,UAjFI,CAkFlB,WAAc,WAlFI,CAmFlB,QAAS,eAnFS,CAoFlB,UAAa,QApFK,CAqFlB,UAAa,QArFK,CADI,CAwFxB,eAAkB,CAChB,aAAgB,GADA,CAEhB,YAAe,GAFC,CAGhB,UAAa,GAHG;AAIhB,SAAY,CACV,CACE,MAAS,CADX,CAEE,OAAU,CAFZ,CAGE,QAAW,CAHb,CAIE,QAAW,CAJb,CAKE,OAAU,CALZ,CAME,OAAU,GANZ,CAOE,OAAU,EAPZ,CAQE,OAAU,EARZ,CASE,OAAU,EATZ,CADU,CAYV,CACE,MAAS,CADX,CAEE,OAAU,CAFZ,CAGE,QAAW,CAHb,CAIE,QAAW,CAJb,CAKE,OAAU,CALZ,CAME,OAAU,SANZ,CAOE,OAAU,EAPZ,CAQE,OAAU,QARZ,CASE,OAAU,EATZ,CAZU,CAJI,CAxFM,CAqHxB,GAAM,OArHkB,CAsHxB,SAAY,OAtHY,CAuHxB,UAAashF,QAAQ,CAACh0D,CAAD,CAAIg6D,CAAJ,CAAmB,CAAG,IAAIznF,EAAIytB,CAAJztB,CAAQ,CAAZ,CAlIvC6mC,EAkIyE4gD,CAhIzEziF,KAAAA,EAAJ,GAAkB6hC,CAAlB,GACEA,CADF,CACMpJ,IAAAi0B,IAAA,CAAS81B,CAAA,CA+H2D/5D,CA/H3D,CAAT,CAAyB,CAAzB,CADN,CAIWgQ,KAAAiqD,IAAA,CAAS,EAAT,CAAa7gD,CAAb,CA4HmF,OAAS,EAAT,EAAI7mC,CAAJ,EAAsB,CAAtB,EA1HnF6mC,CA0HmF,CA1ItD8gD,KA0IsD,CA1IFC,OA0IpD,CAvHhB,CAA1B,CApB+D,CAAhC,CAA/B,CA+IE,CAAA9oF,CAAA,CAAOP,CAAA0I,SAAP,CAAAg6D,MAAA,CAA8B,QAAQ,EAAG,CACvC92D,EAAA,CAAY5L,CAAA0I,SAAZ,CAA6BmD,EAA7B,CADuC,CAAzC,CA7JF,CA/29BkB,CAAjB,CAAD,CAgh+BG7L,MAhh+BH,CAkh+BCmhE,EAAAnhE,MAAAyN,QAAA67E,MAAA,EAAAnoB,cAAD,EAAyCnhE,MAAAyN,QAAAlI,QAAA,CAAuBmD,QAAA6gF,KAAvB,CAAAllB,QAAA,CAA8C,gRAA9C;",
+"sources":["angular.js"],
+"names":["window","minErr","isArrayLike","obj","isWindow","isArray","isString","jqLite","length","Object","isNumber","Array","item","forEach","iterator","context","key","isFunction","hasOwnProperty","call","isPrimitive","isBlankObject","forEachSorted","keys","sort","i","reverseParams","iteratorFn","value","nextUid","uid","baseExtend","dst","objs","deep","h","$$hashKey","ii","isObject","j","jj","src","isDate","Date","valueOf","isRegExp","RegExp","nodeName","cloneNode","isElement","clone","extend","slice","arguments","merge","toInt","str","parseInt","inherit","parent","extra","create","noop","identity","$","valueFn","valueRef","hasCustomToString","toString","isUndefined","isDefined","getPrototypeOf","isScope","$evalAsync","$watch","isBoolean","isTypedArray","TYPED_ARRAY_REGEXP","test","node","prop","attr","find","makeMap","items","split","nodeName_","element","lowercase","arrayRemove","array","index","indexOf","splice","copy","source","destination","copyRecurse","push","copyElement","stackSource","stackDest","ngMinErr","needsRecurse","copyType","undefined","constructor","buffer","byteOffset","copied","ArrayBuffer","byteLength","set","Uint8Array","re","match","lastIndex","type","equals","o1","o2","t1","t2","getTime","keySet","createMap","charAt","concat","array1","array2","bind","self","fn","curryArgs","startIndex","apply","toJsonReplacer","val","document","toJson","pretty","JSON","stringify","fromJson","json","parse","timezoneToOffset","timezone","fallback","replace","ALL_COLONS","requestedTimezoneOffset","isNaN","convertTimezoneToLocal","date","reverse","dateTimezoneOffset","getTimezoneOffset","timezoneOffset","setMinutes","getMinutes","minutes","startingTag","empty","e","elemHtml","append","html","nodeType","NODE_TYPE_TEXT","tryDecodeURIComponent","decodeURIComponent","parseKeyValue","keyValue","splitPoint","substring","toKeyValue","parts","arrayValue","encodeUriQuery","join","encodeUriSegment","pctEncodeSpaces","encodeURIComponent","getNgAttribute","ngAttr","ngAttrPrefixes","getAttribute","angularInit","bootstrap","appElement","module","config","prefix","name","hasAttribute","candidate","querySelector","strictDi","modules","defaultConfig","doBootstrap","injector","tag","unshift","$provide","debugInfoEnabled","$compileProvider","createInjector","invoke","bootstrapApply","scope","compile","$apply","data","NG_ENABLE_DEBUG_INFO","NG_DEFER_BOOTSTRAP","angular","resumeBootstrap","angular.resumeBootstrap","extraModules","resumeDeferredBootstrap","reloadWithDebugInfo","location","reload","getTestability","rootElement","get","snake_case","separator","SNAKE_CASE_REGEXP","letter","pos","toLowerCase","bindJQuery","originalCleanData","bindJQueryFired","jqName","jq","jQuery","on","JQLitePrototype","isolateScope","controller","inheritedData","cleanData","jQuery.cleanData","elems","events","elem","_data","$destroy","triggerHandler","JQLite","assertArg","arg","reason","assertArgFn","acceptArrayAnnotation","assertNotHasOwnProperty","getter","path","bindFnToScope","lastInstance","len","getBlockNodes","nodes","endNode","blockNodes","nextSibling","setupModuleLoader","ensure","factory","$injectorMinErr","$$minErr","requires","configFn","invokeLater","provider","method","insertMethod","queue","invokeQueue","moduleInstance","invokeLaterAndSetModuleName","recipeName","factoryFunction","$$moduleName","configBlocks","runBlocks","_invokeQueue","_configBlocks","_runBlocks","service","constant","decorator","animation","filter","directive","component","run","block","shallowCopy","publishExternalAPI","version","uppercase","$$counter","csp","angularModule","ngModule","$$sanitizeUri","$$SanitizeUriProvider","$CompileProvider","a","htmlAnchorDirective","input","inputDirective","textarea","form","formDirective","script","scriptDirective","select","selectDirective","style","styleDirective","option","optionDirective","ngBind","ngBindDirective","ngBindHtml","ngBindHtmlDirective","ngBindTemplate","ngBindTemplateDirective","ngClass","ngClassDirective","ngClassEven","ngClassEvenDirective","ngClassOdd","ngClassOddDirective","ngCloak","ngCloakDirective","ngController","ngControllerDirective","ngForm","ngFormDirective","ngHide","ngHideDirective","ngIf","ngIfDirective","ngInclude","ngIncludeDirective","ngInit","ngInitDirective","ngNonBindable","ngNonBindableDirective","ngPluralize","ngPluralizeDirective","ngRepeat","ngRepeatDirective","ngShow","ngShowDirective","ngStyle","ngStyleDirective","ngSwitch","ngSwitchDirective","ngSwitchWhen","ngSwitchWhenDirective","ngSwitchDefault","ngSwitchDefaultDirective","ngOptions","ngOptionsDirective","ngTransclude","ngTranscludeDirective","ngModel","ngModelDirective","ngList","ngListDirective","ngChange","ngChangeDirective","pattern","patternDirective","ngPattern","required","requiredDirective","ngRequired","minlength","minlengthDirective","ngMinlength","maxlength","maxlengthDirective","ngMaxlength","ngValue","ngValueDirective","ngModelOptions","ngModelOptionsDirective","ngIncludeFillContentDirective","ngAttributeAliasDirectives","ngEventDirectives","$anchorScroll","$AnchorScrollProvider","$animate","$AnimateProvider","$animateCss","$CoreAnimateCssProvider","$$animateJs","$$CoreAnimateJsProvider","$$animateQueue","$$CoreAnimateQueueProvider","$$AnimateRunner","$$AnimateRunnerFactoryProvider","$$animateAsyncRun","$$AnimateAsyncRunFactoryProvider","$browser","$BrowserProvider","$cacheFactory","$CacheFactoryProvider","$controller","$ControllerProvider","$document","$DocumentProvider","$exceptionHandler","$ExceptionHandlerProvider","$filter","$FilterProvider","$$forceReflow","$$ForceReflowProvider","$interpolate","$InterpolateProvider","$interval","$IntervalProvider","$http","$HttpProvider","$httpParamSerializer","$HttpParamSerializerProvider","$httpParamSerializerJQLike","$HttpParamSerializerJQLikeProvider","$httpBackend","$HttpBackendProvider","$xhrFactory","$xhrFactoryProvider","$jsonpCallbacks","$jsonpCallbacksProvider","$location","$LocationProvider","$log","$LogProvider","$parse","$ParseProvider","$rootScope","$RootScopeProvider","$q","$QProvider","$$q","$$QProvider","$sce","$SceProvider","$sceDelegate","$SceDelegateProvider","$sniffer","$SnifferProvider","$templateCache","$TemplateCacheProvider","$templateRequest","$TemplateRequestProvider","$$testability","$$TestabilityProvider","$timeout","$TimeoutProvider","$window","$WindowProvider","$$rAF","$$RAFProvider","$$jqLite","$$jqLiteProvider","$$HashMap","$$HashMapProvider","$$cookieReader","$$CookieReaderProvider","camelCase","SPECIAL_CHARS_REGEXP","_","offset","toUpperCase","MOZ_HACK_REGEXP","jqLiteAcceptsData","NODE_TYPE_ELEMENT","NODE_TYPE_DOCUMENT","jqLiteBuildFragment","tmp","fragment","createDocumentFragment","HTML_REGEXP","appendChild","createElement","TAG_NAME_REGEXP","exec","wrap","wrapMap","_default","innerHTML","XHTML_TAG_REGEXP","lastChild","childNodes","firstChild","textContent","createTextNode","jqLiteWrapNode","wrapper","parentNode","replaceChild","argIsString","trim","jqLiteMinErr","parsed","SINGLE_TAG_REGEXP","jqLiteAddNodes","jqLiteClone","jqLiteDealoc","onlyDescendants","jqLiteRemoveData","querySelectorAll","descendants","l","jqLiteOff","unsupported","expandoStore","jqLiteExpandoStore","handle","removeHandler","listenerFns","removeEventListener","MOUSE_EVENT_MAP","expandoId","ng339","jqCache","createIfNecessary","jqId","jqLiteData","isSimpleSetter","isSimpleGetter","massGetter","jqLiteHasClass","selector","jqLiteRemoveClass","cssClasses","setAttribute","cssClass","jqLiteAddClass","existingClasses","root","elements","jqLiteController","jqLiteInheritedData","documentElement","names","NODE_TYPE_DOCUMENT_FRAGMENT","host","jqLiteEmpty","removeChild","jqLiteRemove","keepData","jqLiteDocumentLoaded","action","win","readyState","setTimeout","getBooleanAttrName","booleanAttr","BOOLEAN_ATTR","BOOLEAN_ELEMENTS","createEventHandler","eventHandler","event","isDefaultPrevented","event.isDefaultPrevented","defaultPrevented","eventFns","eventFnsLength","immediatePropagationStopped","originalStopImmediatePropagation","stopImmediatePropagation","event.stopImmediatePropagation","stopPropagation","isImmediatePropagationStopped","event.isImmediatePropagationStopped","handlerWrapper","specialHandlerWrapper","defaultHandlerWrapper","handler","specialMouseHandlerWrapper","target","related","relatedTarget","jqLiteContains","$get","this.$get","hasClass","classes","addClass","removeClass","hashKey","nextUidFn","objType","HashMap","isolatedUid","this.nextUid","put","extractArgs","fnText","Function","prototype","STRIP_COMMENTS","ARROW_ARG","FN_ARGS","anonFn","args","modulesToLoad","supportObject","delegate","provider_","providerInjector","instantiate","providerCache","providerSuffix","enforceReturnValue","enforcedReturnValue","result","instanceInjector","factoryFn","enforce","loadModules","moduleFn","runInvokeQueue","invokeArgs","loadedModules","message","stack","createInternalInjector","cache","getService","serviceName","caller","INSTANTIATING","err","shift","injectionArgs","locals","$inject","$$annotate","msie","Type","ctor","annotate","has","$injector","instanceCache","decorFn","origProvider","orig$get","origProvider.$get","origInstance","$delegate","protoInstanceInjector","autoScrollingEnabled","disableAutoScrolling","this.disableAutoScrolling","getFirstAnchor","list","some","scrollTo","scrollIntoView","scroll","yOffset","getComputedStyle","position","getBoundingClientRect","bottom","elemTop","top","scrollBy","hash","elm","getElementById","getElementsByName","autoScrollWatch","autoScrollWatchAction","newVal","oldVal","mergeClasses","b","splitClasses","klass","prepareAnimateOptions","options","Browser","completeOutstandingRequest","outstandingRequestCount","outstandingRequestCallbacks","pop","error","cacheStateAndFireUrlChange","pendingLocation","cacheState","fireUrlChange","cachedState","getCurrentState","lastCachedState","lastBrowserUrl","url","lastHistoryState","urlChangeListeners","listener","history","clearTimeout","pendingDeferIds","isMock","$$completeOutstandingRequest","$$incOutstandingRequestCount","self.$$incOutstandingRequestCount","notifyWhenNoOutstandingRequests","self.notifyWhenNoOutstandingRequests","callback","href","baseElement","state","self.url","sameState","sameBase","stripHash","substr","self.state","urlChangeInit","onUrlChange","self.onUrlChange","$$applicationDestroyed","self.$$applicationDestroyed","off","$$checkUrlChange","baseHref","self.baseHref","defer","self.defer","delay","timeoutId","cancel","self.defer.cancel","deferId","cacheFactory","cacheId","refresh","entry","freshEnd","staleEnd","n","link","p","nextEntry","prevEntry","caches","size","stats","id","capacity","Number","MAX_VALUE","lruHash","lruEntry","remove","removeAll","destroy","info","cacheFactory.info","cacheFactory.get","$$sanitizeUriProvider","parseIsolateBindings","directiveName","isController","LOCAL_REGEXP","bindings","definition","scopeName","bindingCache","$compileMinErr","mode","collection","optional","attrName","assertValidDirectiveName","getDirectiveRequire","require","REQUIRE_PREFIX_REGEXP","hasDirectives","COMMENT_DIRECTIVE_REGEXP","CLASS_DIRECTIVE_REGEXP","ALL_OR_NOTHING_ATTRS","EVENT_HANDLER_ATTR_REGEXP","this.directive","registerDirective","directiveFactory","Suffix","directives","priority","restrict","this.component","makeInjectable","tElement","tAttrs","$element","$attrs","template","templateUrl","ddo","controllerAs","identifierForController","transclude","bindToController","aHrefSanitizationWhitelist","this.aHrefSanitizationWhitelist","regexp","imgSrcSanitizationWhitelist","this.imgSrcSanitizationWhitelist","this.debugInfoEnabled","enabled","TTL","onChangesTtl","this.onChangesTtl","flushOnChangesQueue","onChangesQueue","errors","Attributes","attributesToCopy","$attr","$$element","setSpecialAttr","specialAttrHolder","attributes","attribute","removeNamedItem","setNamedItem","safeAddClass","className","$compileNodes","transcludeFn","maxPriority","ignoreDirective","previousCompileContext","NOT_EMPTY","domNode","nodeValue","compositeLinkFn","compileNodes","$$addScopeClass","namespace","publicLinkFn","cloneConnectFn","needsNewScope","$parent","$new","parentBoundTranscludeFn","transcludeControllers","futureParentElement","$$boundTransclude","$linkNode","wrapTemplate","controllerName","instance","$$addScopeInfo","nodeList","$rootElement","childLinkFn","childScope","childBoundTranscludeFn","stableNodeList","nodeLinkFnFound","linkFns","idx","nodeLinkFn","transcludeOnThisElement","createBoundTranscludeFn","templateOnThisElement","attrs","linkFnFound","collectDirectives","applyDirectivesToNode","terminal","previousBoundTranscludeFn","boundTranscludeFn","transcludedScope","cloneFn","controllers","containingScope","$$transcluded","boundSlots","$$slots","slotName","attrsMap","addDirective","directiveNormalize","isNgAttr","nAttrs","attrStartName","attrEndName","ngAttrName","NG_ATTR_BINDING","PREFIX_REGEXP","multiElementMatch","MULTI_ELEMENT_DIR_RE","directiveIsMultiElement","nName","addAttrInterpolateDirective","animVal","addTextInterpolateDirective","NODE_TYPE_COMMENT","collectCommentDirectives","byPriority","groupScan","attrStart","attrEnd","depth","groupElementsLinkFnWrapper","linkFn","groupedElementsLink","compilationGenerator","eager","compiled","lazyCompilation","compileNode","templateAttrs","jqCollection","originalReplaceDirective","preLinkFns","postLinkFns","addLinkFns","pre","post","newIsolateScopeDirective","$$isolateScope","cloneAndAnnotateFn","linkNode","controllersBoundTransclude","cloneAttachFn","hasElementTranscludeDirective","elementControllers","slotTranscludeFn","scopeToChild","controllerScope","newScopeDirective","isSlotFilled","transcludeFn.isSlotFilled","controllerDirectives","setupControllers","templateDirective","$$originalDirective","$$isolateBindings","scopeBindingInfo","initializeDirectiveBindings","removeWatches","$on","controllerDirective","$$bindings","bindingInfo","identifier","controllerResult","getControllers","controllerInstance","$onChanges","initialChanges","$onInit","$doCheck","$onDestroy","callOnDestroyHook","invokeLinkFn","$postLink","terminalPriority","nonTlbTranscludeDirective","hasTranscludeDirective","hasTemplate","$compileNode","$template","childTranscludeFn","didScanForMultipleTransclusion","mightHaveMultipleTransclusionError","directiveValue","$$start","$$end","assertNoDuplicate","$$tlb","scanningIndex","candidateDirective","$$createComment","replaceWith","$$parentNode","replaceDirective","slots","contents","slotMap","filledSlots","elementSelector","filled","$$newScope","denormalizeTemplate","removeComments","templateNamespace","newTemplateAttrs","templateDirectives","unprocessedDirectives","markDirectiveScope","mergeTemplateAttributes","compileTemplateUrl","Math","max","inheritType","dataName","property","controllerKey","$scope","$transclude","newScope","tDirectives","startAttrName","endAttrName","multiElement","srcAttr","dstAttr","$set","linkQueue","afterTemplateNodeLinkFn","afterTemplateChildLinkFn","beforeTemplateCompileNode","origAsyncDirective","derivedSyncDirective","then","content","tempTemplateAttrs","beforeTemplateLinkNode","linkRootElement","$$destroyed","oldClasses","delayedNodeLinkFn","ignoreChildLinkFn","diff","what","previousDirective","wrapModuleNameIfDefined","moduleName","text","interpolateFn","textInterpolateCompileFn","templateNode","templateNodeParent","hasCompileParent","$$addBindingClass","textInterpolateLinkFn","$$addBindingInfo","expressions","interpolateFnWatchAction","getTrustedContext","attrNormalizedName","HTML","RESOURCE_URL","allOrNothing","trustedContext","attrInterpolatePreLinkFn","$$observers","newValue","$$inter","$$scope","oldValue","$updateClass","elementsToRemove","newNode","firstElementToRemove","removeCount","j2","hasData","annotation","recordChanges","currentValue","previousValue","$$postDigest","changes","triggerOnChangesHook","SimpleChange","removeWatchCollection","initializeBinding","lastValue","parentGet","parentSet","compare","$observe","_UNINITIALIZED_VALUE","literal","assign","parentValueWatch","parentValue","$stateful","removeWatch","$watchCollection","initialValue","parentValueWatchAction","SIMPLE_ATTR_NAME","$normalize","$addClass","classVal","$removeClass","newClasses","toAdd","tokenDifference","toRemove","writeAttr","booleanKey","aliasedKey","ALIASED_ATTR","observer","trimmedSrcset","srcPattern","rawUris","nbrUrisWith2parts","floor","innerIdx","lastTuple","removeAttr","listeners","startSymbol","endSymbol","binding","isolated","noTemplate","compile.$$createComment","comment","createComment","previous","current","str1","str2","values","tokens1","tokens2","token","jqNodes","ident","CNTRL_REG","globals","this.has","register","this.register","allowGlobals","this.allowGlobals","addIdentifier","expression","later","$controllerMinErr","controllerPrototype","$controllerInit","exception","cause","serializeValue","v","toISOString","ngParamSerializer","params","jQueryLikeParamSerializer","serialize","toSerialize","topLevel","defaultHttpResponseTransform","headers","tempData","JSON_PROTECTION_PREFIX","contentType","jsonStart","JSON_START","JSON_ENDS","parseHeaders","line","headerVal","headerKey","headersGetter","headersObj","transformData","status","fns","defaults","transformResponse","transformRequest","d","common","CONTENT_TYPE_APPLICATION_JSON","patch","xsrfCookieName","xsrfHeaderName","paramSerializer","useApplyAsync","this.useApplyAsync","useLegacyPromise","useLegacyPromiseExtensions","this.useLegacyPromiseExtensions","interceptorFactories","interceptors","requestConfig","chainInterceptors","promise","thenFn","rejectFn","executeHeaderFns","headerContent","processedHeaders","headerFn","header","response","resp","reject","mergeHeaders","defHeaders","reqHeaders","defHeaderName","lowercaseDefHeaderName","reqHeaderName","requestInterceptors","responseInterceptors","when","reversedInterceptors","interceptor","request","requestError","responseError","serverRequest","reqData","withCredentials","sendReq","success","promise.success","promise.error","$httpMinErrLegacyFn","createApplyHandlers","eventHandlers","applyHandlers","callEventHandler","$applyAsync","$$phase","done","headersString","statusText","resolveHttpPromise","resolvePromise","deferred","resolve","resolvePromiseWithResult","removePendingReq","pendingRequests","cachedResp","buildUrl","defaultCache","xsrfValue","urlIsSameOrigin","timeout","responseType","uploadEventHandlers","serializedParams","interceptorFactory","createShortMethods","createShortMethodsWithData","createXhr","XMLHttpRequest","createHttpBackend","$browserDefer","callbacks","rawDocument","jsonpReq","callbackPath","async","body","wasCalled","addEventListener","timeoutRequest","jsonpDone","xhr","abort","completeRequest","createCallback","getResponse","removeCallback","open","setRequestHeader","onload","xhr.onload","responseText","urlResolve","protocol","getAllResponseHeaders","onerror","onabort","upload","send","this.startSymbol","this.endSymbol","escape","ch","unescapeText","escapedStartRegexp","escapedEndRegexp","constantWatchDelegate","objectEquality","constantInterp","unwatch","constantInterpolateWatch","mustHaveExpression","parseStringifyInterceptor","getTrusted","$interpolateMinErr","interr","unescapedText","exp","$$watchDelegate","endIndex","parseFns","textLength","expressionPositions","startSymbolLength","endSymbolLength","throwNoconcat","compute","interpolationFn","$watchGroup","interpolateFnWatcher","oldValues","currValue","$interpolate.startSymbol","$interpolate.endSymbol","interval","count","invokeApply","hasParams","iteration","setInterval","clearInterval","skipApply","$$intervalId","tick","notify","intervals","interval.cancel","encodePath","segments","parseAbsoluteUrl","absoluteUrl","locationObj","parsedUrl","$$protocol","$$host","hostname","$$port","port","DEFAULT_PORTS","parseAppUrl","relativeUrl","prefixed","$$path","pathname","$$search","search","$$hash","stripBaseUrl","base","lastIndexOf","trimEmptyHash","LocationHtml5Url","appBase","appBaseNoFile","basePrefix","$$html5","$$parse","this.$$parse","pathUrl","$locationMinErr","$$compose","this.$$compose","$$url","$$absUrl","$$parseLinkUrl","this.$$parseLinkUrl","relHref","appUrl","prevAppUrl","rewrittenUrl","LocationHashbangUrl","hashPrefix","withoutBaseUrl","withoutHashUrl","windowsFilePathExp","firstPathSegmentMatch","LocationHashbangInHtml5Url","locationGetter","locationGetterSetter","preprocess","html5Mode","requireBase","rewriteLinks","this.hashPrefix","this.html5Mode","setBrowserUrlWithFallback","oldUrl","oldState","$$state","afterLocationChange","$broadcast","absUrl","LocationMode","initialUrl","IGNORE_URI_REGEXP","ctrlKey","metaKey","shiftKey","which","button","absHref","preventDefault","initializing","newUrl","newState","$digest","$locationWatch","currentReplace","$$replace","urlOrStateChanged","debug","debugEnabled","this.debugEnabled","flag","formatError","Error","sourceURL","consoleLog","console","logFn","log","hasApply","arg1","arg2","warn","ensureSafeMemberName","fullExpression","$parseMinErr","getStringValue","ensureSafeObject","children","ensureSafeFunction","CALL","APPLY","BIND","ensureSafeAssignContext","ifDefined","plusFn","r","findConstantAndWatchExpressions","ast","allConstants","argsToWatch","AST","Program","expr","Literal","toWatch","UnaryExpression","argument","BinaryExpression","left","right","LogicalExpression","ConditionalExpression","alternate","consequent","Identifier","MemberExpression","object","computed","CallExpression","callee","AssignmentExpression","ArrayExpression","ObjectExpression","properties","ThisExpression","LocalsExpression","getInputs","lastExpression","isAssignable","assignableAST","NGValueParameter","operator","isLiteral","ASTCompiler","astBuilder","ASTInterpreter","isPossiblyDangerousMemberName","getValueOf","objectValueOf","cacheDefault","cacheExpensive","literals","identStart","identContinue","addLiteral","this.addLiteral","literalName","literalValue","setIdentifierFns","this.setIdentifierFns","identifierStart","identifierContinue","interceptorFn","expensiveChecks","parsedExpression","oneTime","cacheKey","runningChecksEnabled","parseOptions","$parseOptionsExpensive","$parseOptions","lexer","Lexer","parser","Parser","oneTimeLiteralWatchDelegate","oneTimeWatchDelegate","inputs","inputsWatchDelegate","expensiveChecksInterceptor","addInterceptor","expensiveCheckFn","expensiveCheckOldValue","expressionInputDirtyCheck","oldValueOfValue","prettyPrintExpression","inputExpressions","lastResult","oldInputValueOf","expressionInputWatch","newInputValue","oldInputValueOfValues","oldInputValues","expressionInputsWatch","changed","oneTimeWatch","oneTimeListener","old","isAllDefined","allDefined","constantWatch","watchDelegate","useInputs","regularInterceptedExpression","oneTimeInterceptedExpression","noUnsafeEval","isIdentifierStart","isIdentifierContinue","$$runningExpensiveChecks","$parse.$$runningExpensiveChecks","qFactory","nextTick","exceptionHandler","Promise","simpleBind","scheduleProcessQueue","processScheduled","pending","Deferred","$qMinErr","TypeError","onFulfilled","onRejected","progressBack","catch","finally","handleCallback","$$reject","$$resolve","that","rejectPromise","progress","makePromise","resolved","isResolved","callbackOutput","errback","$Q","resolver","resolveFn","all","promises","counter","results","race","requestAnimationFrame","webkitRequestAnimationFrame","cancelAnimationFrame","webkitCancelAnimationFrame","webkitCancelRequestAnimationFrame","rafSupported","raf","timer","supported","createChildScopeClass","ChildScope","$$watchers","$$nextSibling","$$childHead","$$childTail","$$listeners","$$listenerCount","$$watchersCount","$id","$$ChildScope","$rootScopeMinErr","lastDirtyWatch","applyAsyncId","digestTtl","this.digestTtl","destroyChildScope","$event","currentScope","cleanUpScope","$$prevSibling","$root","Scope","beginPhase","phase","incrementWatchersCount","decrementListenerCount","initWatchVal","flushApplyAsync","applyAsyncQueue","scheduleApplyAsync","isolate","child","watchExp","watcher","last","eq","deregisterWatch","watchExpressions","watchGroupAction","changeReactionScheduled","firstRun","newValues","deregisterFns","shouldCall","deregisterWatchGroup","unwatchFn","watchGroupSubAction","$watchCollectionInterceptor","_value","bothNaN","newItem","oldItem","internalArray","oldLength","changeDetected","newLength","internalObject","veryOldValue","trackVeryOldValue","changeDetector","initRun","$watchCollectionAction","watch","watchers","dirty","ttl","watchLog","logIdx","asyncTask","asyncQueuePosition","asyncQueue","$eval","msg","next","postDigestQueuePosition","postDigestQueue","eventName","this.$watchGroup","$applyAsyncExpression","namedListeners","indexOfListener","$emit","targetScope","listenerArgs","$$asyncQueue","$$postDigestQueue","$$applyAsyncQueue","sanitizeUri","uri","isImage","regex","normalizedVal","adjustMatcher","matcher","$sceMinErr","escapeForRegexp","adjustMatchers","matchers","adjustedMatchers","SCE_CONTEXTS","resourceUrlWhitelist","resourceUrlBlacklist","this.resourceUrlWhitelist","this.resourceUrlBlacklist","matchUrl","generateHolderType","Base","holderType","trustedValue","$$unwrapTrustedValue","this.$$unwrapTrustedValue","holderType.prototype.valueOf","holderType.prototype.toString","htmlSanitizer","trustedValueHolderBase","byType","CSS","URL","JS","trustAs","Constructor","maybeTrusted","allowed","this.enabled","sce","isEnabled","sce.isEnabled","sce.getTrusted","parseAs","sce.parseAs","enumValue","lName","eventSupport","hasHistoryPushState","chrome","app","runtime","pushState","android","userAgent","navigator","boxee","vendorPrefix","vendorRegex","bodyStyle","transitions","animations","webkitTransition","webkitAnimation","hasEvent","divElm","httpOptions","this.httpOptions","handleRequestFn","tpl","ignoreRequestError","totalPendingRequests","getTrustedResourceUrl","transformer","handleError","$templateRequestMinErr","testability","testability.findBindings","opt_exactMatch","getElementsByClassName","matches","dataBinding","bindingName","testability.findModels","prefixes","attributeEquals","testability.getLocation","testability.setLocation","testability.whenStable","deferreds","$$timeoutId","timeout.cancel","urlParsingNode","requestUrl","originUrl","$$CookieReader","safeDecodeURIComponent","lastCookies","lastCookieString","cookieArray","cookie","currentCookieString","filters","suffix","currencyFilter","dateFilter","filterFilter","jsonFilter","limitToFilter","lowercaseFilter","numberFilter","orderByFilter","uppercaseFilter","comparator","anyPropertyKey","matchAgainstAnyProp","getTypeForFilter","expressionType","predicateFn","createPredicateFn","shouldMatchPrimitives","actual","expected","deepCompare","dontMatchWholeObject","actualType","expectedType","expectedVal","matchAnyProperty","actualVal","$locale","formats","NUMBER_FORMATS","amount","currencySymbol","fractionSize","CURRENCY_SYM","PATTERNS","maxFrac","formatNumber","GROUP_SEP","DECIMAL_SEP","number","numStr","exponent","digits","numberOfIntegerDigits","zeros","ZERO_CHAR","MAX_DIGITS","roundNumber","parsedNumber","minFrac","fractionLen","min","roundAt","digit","k","carry","reduceRight","groupSep","decimalSep","isInfinity","isFinite","isZero","abs","formattedText","integerLen","decimals","reduce","groups","lgSize","gSize","negPre","negSuf","posPre","posSuf","padNumber","num","negWrap","neg","dateGetter","dateStrGetter","shortForm","standAlone","getFirstThursdayOfYear","year","dayOfWeekOnFirst","getDay","weekGetter","firstThurs","getFullYear","thisThurs","getMonth","getDate","round","eraGetter","ERAS","jsonStringToDate","string","R_ISO8601_STR","tzHour","tzMin","dateSetter","setUTCFullYear","setFullYear","timeSetter","setUTCHours","setHours","m","s","ms","parseFloat","format","DATETIME_FORMATS","NUMBER_STRING","DATE_FORMATS_SPLIT","DATE_FORMATS","spacing","limit","begin","Infinity","sliceFn","end","processPredicates","sortPredicates","map","predicate","descending","defaultCompare","v1","v2","type1","type2","value1","value2","sortPredicate","reverseOrder","compareFn","predicates","compareValues","getComparisonObject","tieBreaker","predicateValues","doComparison","ngDirective","FormController","controls","$error","$$success","$pending","$name","$dirty","$pristine","$valid","$invalid","$submitted","$$parentForm","nullFormCtrl","$rollbackViewValue","form.$rollbackViewValue","control","$commitViewValue","form.$commitViewValue","$addControl","form.$addControl","$$renameControl","form.$$renameControl","newName","oldName","$removeControl","form.$removeControl","$setValidity","addSetValidityMethod","ctrl","unset","$setDirty","form.$setDirty","PRISTINE_CLASS","DIRTY_CLASS","$setPristine","form.$setPristine","setClass","SUBMITTED_CLASS","$setUntouched","form.$setUntouched","$setSubmitted","form.$setSubmitted","stringBasedInputType","$formatters","$isEmpty","baseInputType","composing","ev","ngTrim","$viewValue","$$hasNativeValidators","$setViewValue","deferListener","origValue","keyCode","PARTIAL_VALIDATION_TYPES","PARTIAL_VALIDATION_EVENTS","validity","origBadInput","badInput","origTypeMismatch","typeMismatch","$render","ctrl.$render","createDateParser","mapping","iso","ISO_DATE_REGEXP","yyyy","MM","dd","HH","getHours","mm","ss","getSeconds","sss","getMilliseconds","part","NaN","createDateInputType","parseDate","dynamicDateInputType","isValidDate","parseObservedDateValue","badInputChecker","$options","previousDate","$$parserName","$parsers","parsedDate","ngModelMinErr","ngMin","minVal","$validators","ctrl.$validators.min","$validate","ngMax","maxVal","ctrl.$validators.max","VALIDITY_STATE_PROPERTY","parseConstantExpr","parseFn","classDirective","arrayDifference","arrayClasses","addClasses","digestClassCounts","classCounts","classesToUpdate","updateClasses","ngClassWatchAction","$index","old$index","mod","cachedToggleClass","switchValue","classCache","toggleValidationCss","validationErrorKey","isValid","VALID_CLASS","INVALID_CLASS","setValidity","isObjectEmpty","PENDING_CLASS","combinedState","REGEX_STRING_REGEXP","documentMode","rules","ngCspElement","ngCspAttribute","noInlineStyle","name_","el","full","major","minor","dot","codeName","expando","JQLite._data","mouseleave","mouseenter","optgroup","tbody","tfoot","colgroup","caption","thead","th","td","Node","contains","compareDocumentPosition","ready","trigger","fired","removeData","jqLiteHasData","jqLiteCleanData","removeAttribute","css","NODE_TYPE_ATTRIBUTE","lowercasedName","specified","getNamedItem","ret","getText","$dv","multiple","selected","nodeCount","jqLiteOn","types","addHandler","noEventListener","one","onFn","replaceNode","insertBefore","contentDocument","prepend","wrapNode","detach","after","newElement","toggleClass","condition","classCondition","nextElementSibling","getElementsByTagName","extraParameters","dummyEvent","handlerArgs","eventFnsCopy","arg3","unbind","FN_ARG_SPLIT","FN_ARG","argDecl","underscore","$animateMinErr","postDigestElements","updateData","handleCSSClassChanges","existing","pin","domOperation","from","to","classesAdded","add","classesRemoved","runner","complete","$$registeredAnimations","classNameFilter","this.classNameFilter","$$classNameFilter","reservedRegex","NG_ANIMATE_CLASSNAME","domInsert","parentElement","afterElement","afterNode","ELEMENT_NODE","previousElementSibling","enter","move","leave","addclass","animate","tempClasses","waitForTick","waitQueue","passed","AnimateRunner","setHost","rafTick","_doneCallbacks","_tick","this._tick","doc","hidden","_state","chain","AnimateRunner.chain","AnimateRunner.all","runners","onProgress","DONE_COMPLETE_STATE","getPromise","resolveHandler","rejectHandler","pause","resume","_resolve","INITIAL_STATE","DONE_PENDING_STATE","initialOptions","closed","$$prepared","cleanupStyles","start","UNINITIALIZED_VALUE","isFirstChange","SimpleChange.prototype.isFirstChange","offsetWidth","APPLICATION_JSON","$httpMinErr","$interpolateMinErr.throwNoconcat","$interpolateMinErr.interr","callbackId","called","callbackMap","PATH_MATCH","locationPrototype","paramValue","Location","Location.prototype.state","OPERATORS","ESCAPE","lex","tokens","readString","peek","readNumber","peekMultichar","readIdent","is","isWhitespace","ch2","ch3","op2","op3","op1","throwError","chars","codePointAt","isValidIdentifierStart","isValidIdentifierContinue","cp","charCodeAt","cp1","cp2","isExpOperator","colStr","peekCh","quote","rawString","hex","String","fromCharCode","rep","ExpressionStatement","Property","program","expressionStatement","expect","filterChain","assignment","ternary","logicalOR","consume","logicalAND","equality","relational","additive","multiplicative","unary","primary","arrayDeclaration","selfReferential","parseArguments","baseExpression","peekToken","kind","e1","e2","e3","e4","peekAhead","t","nextId","vars","own","assignable","stage","computing","recurse","return_","generateFunction","fnKey","intoId","watchId","fnString","USE","STRICT","filterPrefix","watchFns","varsPrefix","section","nameId","recursionFn","skipWatchIdCheck","if_","lazyAssign","computedMember","lazyRecurse","plus","not","getHasOwnProperty","nonComputedMember","addEnsureSafeObject","notNull","addEnsureSafeAssignContext","addEnsureSafeMemberName","addEnsureSafeFunction","member","filterName","defaultValue","UNSAFE_CHARACTERS","SAFE_IDENTIFIER","stringEscapeFn","stringEscapeRegex","c","skip","init","fn.assign","rhs","lhs","unary+","unary-","unary!","binary+","binary-","binary*","binary/","binary%","binary===","binary!==","binary==","binary!=","binary<","binary>","binary<=","binary>=","binary&&","binary||","ternary?:","astCompiler","yy","y","MMMM","MMM","M","LLLL","H","hh","EEEE","EEE","ampmGetter","AMPMS","Z","timeZoneGetter","zone","paddedZone","ww","w","G","GG","GGG","GGGG","longEraGetter","ERANAMES","xlinkHref","propName","defaultLinkFn","normalized","ngBooleanAttrWatchAction","htmlAttr","ngAttrAliasWatchAction","nullFormRenameControl","formDirectiveFactory","isNgForm","getSetter","ngFormCompile","formElement","nameAttr","ngFormPreLink","ctrls","handleFormSubmission","setter","URL_REGEXP","EMAIL_REGEXP","NUMBER_REGEXP","DATE_REGEXP","DATETIMELOCAL_REGEXP","WEEK_REGEXP","MONTH_REGEXP","TIME_REGEXP","inputType","textInputType","weekParser","isoWeek","existingDate","week","hours","seconds","milliseconds","addDays","numberInputType","urlInputType","ctrl.$validators.url","modelValue","viewValue","emailInputType","email","ctrl.$validators.email","radioInputType","checked","checkboxInputType","trueValue","ngTrueValue","falseValue","ngFalseValue","ctrl.$isEmpty","CONSTANT_VALUE_REGEXP","tplAttr","ngValueConstantLink","ngValueLink","valueWatchAction","$compile","ngBindCompile","templateElement","ngBindLink","ngBindWatchAction","ngBindTemplateCompile","ngBindTemplateLink","ngBindHtmlCompile","ngBindHtmlGetter","ngBindHtmlWatch","sceValueOf","ngBindHtmlLink","ngBindHtmlWatchAction","getTrustedHtml","$viewChangeListeners","forceAsyncEvents","ngEventHandler","previousElements","ngIfWatchAction","srcExp","onloadExp","autoScrollExp","autoscroll","changeCounter","previousElement","currentElement","cleanupLastIncludeContent","ngIncludeWatchAction","afterAnimation","thisChangeId","namespaceAdaptedClone","trimValues","NgModelController","$modelValue","$$rawModelValue","$asyncValidators","$untouched","$touched","parsedNgModel","parsedNgModelAssign","ngModelGet","ngModelSet","pendingDebounce","parserValid","$$setOptions","this.$$setOptions","getterSetter","invokeModelGetter","invokeModelSetter","$$$p","this.$isEmpty","$$updateEmptyClasses","this.$$updateEmptyClasses","NOT_EMPTY_CLASS","EMPTY_CLASS","currentValidationRunId","this.$setPristine","this.$setDirty","this.$setUntouched","UNTOUCHED_CLASS","TOUCHED_CLASS","$setTouched","this.$setTouched","this.$rollbackViewValue","$$lastCommittedViewValue","this.$validate","prevValid","prevModelValue","allowInvalid","$$runValidators","allValid","$$writeModelToScope","this.$$runValidators","doneCallback","processSyncValidators","syncValidatorsValid","validator","processAsyncValidators","validatorPromises","validationDone","localValidationRunId","processParseErrors","errorKey","this.$commitViewValue","$$parseAndValidate","this.$$parseAndValidate","this.$$writeModelToScope","this.$setViewValue","updateOnDefault","$$debounceViewValueCommit","this.$$debounceViewValueCommit","debounceDelay","debounce","ngModelWatch","formatters","ngModelCompile","ngModelPreLink","modelCtrl","formCtrl","ngModelPostLink","updateOn","DEFAULT_REGEXP","ngOptionsMinErr","NG_OPTIONS_REGEXP","parseOptionsExpression","optionsExp","selectElement","Option","selectValue","label","group","disabled","getOptionValuesKeys","optionValues","optionValuesKeys","keyName","itemKey","valueName","selectAs","trackBy","viewValueFn","trackByFn","getTrackByValueFn","getHashOfValue","getTrackByValue","getLocals","displayFn","groupByFn","disableWhenFn","valuesFn","getWatchables","watchedArray","optionValuesLength","disableWhen","getOptions","optionItems","selectValueMap","optionItem","getOptionFromViewValue","getViewValueFromOption","optionTemplate","optGroupTemplate","ngOptionsPreLink","registerOption","ngOptionsPostLink","updateOptionElement","updateOptions","selectCtrl","readValue","groupElementMap","providedEmptyOption","emptyOption","addOption","groupElement","listFragment","optionElement","ngModelCtrl","nextValue","unknownOption","ngModelCtrl.$isEmpty","writeValue","selectCtrl.writeValue","selectCtrl.readValue","selectedValues","selections","selectedOption","BRACE","IS_WHEN","updateElementText","newText","numberExp","whenExp","whens","whensExpFns","braceReplacement","watchRemover","lastCount","attributeName","tmpMatch","whenKey","ngPluralizeWatchAction","countIsNaN","pluralCat","whenExpFn","ngRepeatMinErr","updateScope","valueIdentifier","keyIdentifier","arrayLength","$first","$last","$middle","$odd","$even","ngRepeatCompile","ngRepeatEndComment","aliasAs","trackByExp","trackByExpGetter","trackByIdExpFn","trackByIdArrayFn","trackByIdObjFn","hashFnLocals","ngRepeatLink","lastBlockMap","ngRepeatAction","previousNode","nextNode","nextBlockMap","collectionLength","trackById","collectionKeys","nextBlockOrder","trackByIdFn","blockKey","ngRepeatTransclude","ngShowWatchAction","NG_HIDE_CLASS","NG_HIDE_IN_PROGRESS_CLASS","ngHideWatchAction","ngStyleWatchAction","newStyles","oldStyles","ngSwitchController","cases","selectedTranscludes","selectedElements","previousLeaveAnimations","selectedScopes","spliceFactory","ngSwitchWatchAction","selectedTransclude","caseElement","selectedScope","anchor","ngTranscludeMinErr","ngTranscludeCompile","fallbackLinkFn","ngTranscludePostLink","useFallbackContent","ngTranscludeSlot","ngTranscludeCloneAttachFn","noopNgModelController","SelectController","optionsMap","renderUnknownOption","self.renderUnknownOption","unknownVal","removeUnknownOption","self.removeUnknownOption","self.readValue","self.writeValue","hasOption","self.addOption","removeOption","self.removeOption","self.hasOption","self.registerOption","optionScope","optionAttrs","interpolateValueFn","interpolateTextFn","valueAttributeObserveAction","interpolateWatchAction","selectPreLink","lastView","lastViewRef","selectMultipleWatch","selectPostLink","ngModelCtrl.$render","selectCtrlName","ctrl.$validators.required","patternExp","ctrl.$validators.pattern","intVal","ctrl.$validators.maxlength","ctrl.$validators.minlength","getDecimals","opt_precision","pow","ONE","OTHER","$$csp","head"]
+}
diff --git a/testing/talos/talos/tests/devtools/addon/content/tests/source-map/source-map-library.js b/testing/talos/talos/tests/devtools/addon/content/tests/source-map/source-map-library.js
new file mode 100644
index 0000000000..8c95c0becd
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/tests/source-map/source-map-library.js
@@ -0,0 +1,113 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const { testSetup, testTeardown, runTest } = require("damp-test/tests/head");
+
+const sourceMap = require("devtools/client/shared/vendor/source-map/source-map");
+
+module.exports = async function () {
+ await testSetup("data:text/html,source-map");
+
+ sourceMap.SourceMapConsumer.initialize({
+ "lib/mappings.wasm":
+ "resource://devtools/client/shared/vendor/source-map/lib/mappings.wasm",
+ });
+
+ // source-map library only accepts the sourcemap JSON object
+ const testSourceMapString = require("raw!damp-test/tests/source-map/angular-min.js.map");
+ const testSourceMap = JSON.parse(testSourceMapString);
+ const lines = testSourceMap.mappings;
+
+ // Track performance of SourceMapConsumer construction, one location mapping and destruction
+ {
+ const test = runTest(`source-map.simple.DAMP`);
+ for (let x = 0; x < 30; x++) {
+ const consumer = await new sourceMap.SourceMapConsumer(testSourceMap);
+ consumer.originalPositionFor({ line: 1, column: 0 });
+ consumer.destroy();
+ }
+ test.done();
+ }
+
+ {
+ const test = runTest(`source-map.constructor.DAMP`);
+ for (let x = 0; x < 100; x++) {
+ const consumer = await new sourceMap.SourceMapConsumer(testSourceMap);
+ consumer.destroy();
+ }
+ test.done();
+ }
+
+ const testMapping = await getTestMapping(testSourceMap);
+ const consumer = await new sourceMap.SourceMapConsumer(testSourceMap);
+
+ {
+ const test = runTest(`source-map.originalPositionFor.DAMP`);
+ for (let x = 0; x < 200000; x++) {
+ const i = Math.floor(Math.random() * lines.length);
+ const line = lines[i];
+ const j = Math.floor(Math.random() * line.length);
+ const column = line[j][0];
+
+ consumer.originalPositionFor({ line: i + 1, column });
+ }
+ test.done();
+ }
+
+ {
+ const test = runTest(`source-map.allGeneratedPositionsFor.DAMP`);
+ for (let x = 0; x < 20000; x++) {
+ consumer.allGeneratedPositionsFor({
+ source: testMapping.source,
+ line: testMapping.originalLine,
+ });
+ }
+ test.done();
+ }
+
+ {
+ const test = runTest(`source-map.eachMapping.DAMP`);
+ for (let x = 0; x < 5; x++) {
+ let maxLine = 0;
+ let maxCol = 0;
+ consumer.eachMapping(m => {
+ maxLine = Math.max(maxLine, m.generatedLine);
+ maxLine = Math.max(maxLine, m.originalLine);
+ maxCol = Math.max(maxCol, m.generatedColumn);
+ maxCol = Math.max(maxCol, m.originalColumn);
+ });
+ }
+ test.done();
+ }
+
+ const generator = sourceMap.SourceMapGenerator.fromSourceMap(consumer);
+ {
+ const test = runTest(`source-map.SourceMapGenerator-toString.DAMP`);
+ for (let x = 0; x < 2; x++) {
+ generator.toString();
+ }
+ test.done();
+ }
+
+ consumer.destroy();
+
+ await testTeardown();
+};
+
+async function getTestMapping(testSourceMap) {
+ let smc = await new sourceMap.SourceMapConsumer(testSourceMap);
+
+ let mappings = [];
+ smc.eachMapping(
+ [].push,
+ mappings,
+ sourceMap.SourceMapConsumer.ORIGINAL_ORDER
+ );
+
+ let testMapping = mappings[Math.floor(mappings.length / 13)];
+ smc.destroy();
+ return testMapping;
+}
diff --git a/testing/talos/talos/tests/devtools/addon/content/tests/source-map/source-map-loader.js b/testing/talos/talos/tests/devtools/addon/content/tests/source-map/source-map-loader.js
new file mode 100644
index 0000000000..12e3f9c045
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/tests/source-map/source-map-loader.js
@@ -0,0 +1,52 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+/**
+ * This test cover the performance of the "Source Map Loader".
+ * The layer on top of source-map npm package, specific to mozilla-central/gecko
+ * from devtools/client/shared/source-map-loader.
+ */
+
+const { testSetup, testTeardown, runTest } = require("damp-test/tests/head");
+
+const {
+ SourceMapLoader,
+} = require("resource://devtools/client/shared/source-map-loader/index.js");
+
+module.exports = async function () {
+ await testSetup("data:text/html,source-map");
+ const sourceMapLoader = new SourceMapLoader();
+
+ const fakeGeneratedSource = {
+ id: "fake-id",
+ url: "http://example.com/tests/devtools/addon/content/tests/source-map/angular-min.js",
+ sourceMapBaseURL:
+ "http://example.com/tests/devtools/addon/content/tests/source-map/",
+ sourceMapURL: "angular-min.js.map",
+ };
+
+ {
+ const test = runTest(`source-map-loader.init.DAMP`);
+ await sourceMapLoader.getOriginalURLs(fakeGeneratedSource);
+ test.done();
+ }
+
+ {
+ const test = runTest(`source-map-loader.getOriginalLocation.DAMP`);
+ for (let x = 0; x < 1000; x++) {
+ await sourceMapLoader.getOriginalLocation({
+ sourceId: fakeGeneratedSource.id,
+ line: 10,
+ column: 0,
+ sourceUrl: fakeGeneratedSource.url,
+ });
+ }
+ test.done();
+ }
+ sourceMapLoader.clearSourceMaps();
+
+ await testTeardown();
+};
diff --git a/testing/talos/talos/tests/devtools/addon/content/tests/styleeditor/complicated.js b/testing/talos/talos/tests/devtools/addon/content/tests/styleeditor/complicated.js
new file mode 100644
index 0000000000..29f3f2bdbb
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/tests/styleeditor/complicated.js
@@ -0,0 +1,25 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const {
+ openToolboxAndLog,
+ closeToolboxAndLog,
+ reloadPageAndLog,
+ testSetup,
+ testTeardown,
+ COMPLICATED_URL,
+} = require("damp-test/tests/head");
+
+module.exports = async function () {
+ await testSetup(COMPLICATED_URL);
+ const toolbox = await openToolboxAndLog(
+ "complicated.styleeditor",
+ "styleeditor"
+ );
+ await reloadPageAndLog("complicated.styleeditor", toolbox);
+ await closeToolboxAndLog("complicated.styleeditor", toolbox);
+ await testTeardown();
+};
diff --git a/testing/talos/talos/tests/devtools/addon/content/tests/styleeditor/custom.js b/testing/talos/talos/tests/devtools/addon/content/tests/styleeditor/custom.js
new file mode 100644
index 0000000000..2ea2af1b64
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/tests/styleeditor/custom.js
@@ -0,0 +1,25 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const {
+ openToolboxAndLog,
+ closeToolboxAndLog,
+ reloadPageAndLog,
+ testSetup,
+ testTeardown,
+ PAGES_BASE_URL,
+} = require("damp-test/tests/head");
+
+const TEST_URL = PAGES_BASE_URL + "custom/styleeditor/index.html";
+
+module.exports = async function () {
+ await testSetup(TEST_URL);
+ const toolbox = await openToolboxAndLog("custom.styleeditor", "styleeditor");
+ await reloadPageAndLog("custom.styleeditor", toolbox);
+
+ await closeToolboxAndLog("custom.styleeditor", toolbox);
+ await testTeardown();
+};
diff --git a/testing/talos/talos/tests/devtools/addon/content/tests/styleeditor/simple.js b/testing/talos/talos/tests/devtools/addon/content/tests/styleeditor/simple.js
new file mode 100644
index 0000000000..fbede6b9f5
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/tests/styleeditor/simple.js
@@ -0,0 +1,22 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const {
+ openToolboxAndLog,
+ closeToolboxAndLog,
+ reloadPageAndLog,
+ testSetup,
+ testTeardown,
+ SIMPLE_URL,
+} = require("damp-test/tests/head");
+
+module.exports = async function () {
+ await testSetup(SIMPLE_URL);
+ const toolbox = await openToolboxAndLog("simple.styleeditor", "styleeditor");
+ await reloadPageAndLog("simple.styleeditor", toolbox);
+ await closeToolboxAndLog("simple.styleeditor", toolbox);
+ await testTeardown();
+};
diff --git a/testing/talos/talos/tests/devtools/addon/content/tests/toolbox/browser-toolbox.js b/testing/talos/talos/tests/devtools/addon/content/tests/toolbox/browser-toolbox.js
new file mode 100644
index 0000000000..9fbaca34e8
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/tests/toolbox/browser-toolbox.js
@@ -0,0 +1,196 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const { runTest, testSetup, testTeardown } = require("../head");
+
+const { DevToolsClient } = require("devtools/client/devtools-client");
+const {
+ CommandsFactory,
+} = require("devtools/shared/commands/commands-factory");
+
+const TEST_URL =
+ "data:text/html,browser-toolbox-test<script>console.log('test page message');</script>";
+
+module.exports = async function () {
+ Services.prefs.setBoolPref("devtools.chrome.enabled", true);
+ Services.prefs.setBoolPref("devtools.debugger.remote-enabled", true);
+ Services.prefs.setBoolPref("devtools.debugger.prompt-connection", false);
+ Services.prefs.setBoolPref(
+ "devtools.browsertoolbox.enable-test-server",
+ true
+ );
+ // Ensure that the test page message will be visible
+ Services.prefs.setCharPref("devtools.browsertoolbox.scope", "everything");
+
+ // Open the browser toolbox on the options panel,
+ // so that we can switch to all other panel individually and measure their opening time
+ Services.prefs.setCharPref("devtools.browsertoolbox.panel", "options");
+
+ await testSetup(TEST_URL);
+
+ let test = runTest(`browser-toolbox.start-process.DAMP`, true);
+ const { BrowserToolboxLauncher } = ChromeUtils.importESModule(
+ "resource://devtools/client/framework/browser-toolbox/Launcher.sys.mjs"
+ );
+ const process = await new Promise(resolve => {
+ BrowserToolboxLauncher.init({
+ overwritePreferences: true,
+ onRun: resolve,
+ });
+ });
+ test.done();
+
+ test = runTest(`browser-toolbox.connect.DAMP`, true);
+ const consoleFront = await connectToBrowserToolbox();
+ // Wait for the options panel to be fully initialized
+ await evaluateInBrowserToolbox(consoleFront, [], async function () {
+ /* global gToolbox */
+ await gToolbox.selectTool("options");
+ });
+ test.done();
+
+ test = runTest(`browser-toolbox.debugger-ready.DAMP`, true);
+ await evaluateInBrowserToolbox(consoleFront, [], function () {
+ /* global waitFor, findSource */
+ this.findSource = (dbg, url) => {
+ const sources = dbg.selectors.getSourceList(dbg.store.getState());
+ return sources.find(s => (s.url || "").includes(url));
+ };
+ this.waitFor = async fn => {
+ let rv;
+ let count = 0;
+ while (true) {
+ try {
+ rv = await fn();
+ if (rv) {
+ return rv;
+ }
+ } catch (e) {
+ if (count > 100) {
+ throw new Error("timeout on " + fn + " -- " + e + "\n");
+ }
+ }
+ if (count > 100) {
+ throw new Error("timeout on " + fn + "\n");
+ }
+ count++;
+
+ await new Promise(r => setTimeout(r, 25));
+ }
+ };
+ });
+
+ await evaluateInBrowserToolbox(
+ consoleFront,
+ [TEST_URL],
+ async function (testUrl) {
+ const {
+ createLocation,
+ } = require("devtools/client/debugger/src/utils/location");
+ dump("Wait for debugger to initialize\n");
+ const panel = await gToolbox.selectTool("jsdebugger");
+ const { dbg } = panel.panelWin;
+ dump("Wait for tab source in the content process\n");
+ const source = await waitFor(() => findSource(dbg, testUrl));
+
+ dump("Select this source\n");
+ dbg.actions.selectLocation(createLocation({ source, line: 1 }));
+ await waitFor(() => {
+ const source = dbg.selectors.getSelectedSource(dbg.store.getState());
+ if (!source) {
+ return false;
+ }
+ const sourceTextContent = dbg.selectors.getSelectedSourceTextContent(
+ dbg.store.getState()
+ );
+ if (!sourceTextContent) {
+ return false;
+ }
+ return true;
+ });
+ }
+ );
+ test.done();
+
+ test = runTest(`browser-toolbox.inspector-ready.DAMP`, true);
+ await evaluateInBrowserToolbox(consoleFront, [], async function () {
+ await gToolbox.selectTool("inspector");
+ });
+ test.done();
+
+ test = runTest(`browser-toolbox.webconsole-ready.DAMP`, true);
+ await evaluateInBrowserToolbox(consoleFront, [], async function () {
+ const { hud } = await gToolbox.selectTool("webconsole");
+ dump("Wait for test page console message to appear\n");
+ await waitFor(() =>
+ Array.from(hud.ui.window.document.querySelectorAll(".message-body")).some(
+ el => el.innerText.includes("test page message")
+ )
+ );
+ });
+ test.done();
+
+ test = runTest(`browser-toolbox.styleeditor-ready.DAMP`, true);
+ await evaluateInBrowserToolbox(consoleFront, [], async function () {
+ await gToolbox.selectTool("styleeditor");
+ });
+ test.done();
+
+ test = runTest(`browser-toolbox.close-process.DAMP`, true);
+ await process.close();
+ test.done();
+
+ Services.prefs.clearUserPref("devtools.chrome.enabled");
+ Services.prefs.clearUserPref("devtools.debugger.remote-enabled");
+ Services.prefs.clearUserPref("devtools.debugger.prompt-connection");
+ Services.prefs.clearUserPref("devtools.browsertoolbox.enable-test-server");
+ Services.prefs.clearUserPref("devtools.browsertoolbox.panel");
+ Services.prefs.clearUserPref("devtools.browsertoolbox.scope");
+
+ await testTeardown();
+};
+
+async function connectToBrowserToolbox() {
+ let transport;
+ while (true) {
+ try {
+ transport = await DevToolsClient.socketConnect({
+ host: "localhost",
+ port: 6001,
+ webSocket: false,
+ });
+ break;
+ } catch (e) {
+ await new Promise(r => setTimeout(r, 100));
+ }
+ }
+
+ const client = new DevToolsClient(transport);
+ await client.connect();
+
+ const commands = await CommandsFactory.forMainProcess({ client });
+ const target = await commands.descriptorFront.getTarget();
+ return target.getFront("console");
+}
+
+async function evaluateInBrowserToolbox(consoleFront, arg, fn) {
+ const argString = JSON.stringify(arg);
+ const onEvaluationResult = consoleFront.once("evaluationResult");
+ await consoleFront.evaluateJSAsync({
+ text: `(${fn}).apply(null,${argString})`,
+ mapped: { await: true },
+ });
+ const result = await onEvaluationResult;
+ if (result.topLevelAwaitRejected) {
+ throw new Error("evaluation failed");
+ }
+
+ if (result.exceptionMessage) {
+ throw new Error(result.exceptionMessage);
+ }
+
+ return result;
+}
diff --git a/testing/talos/talos/tests/devtools/addon/content/tests/toolbox/panels-in-background.js b/testing/talos/talos/tests/devtools/addon/content/tests/toolbox/panels-in-background.js
new file mode 100644
index 0000000000..852e65467b
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/tests/toolbox/panels-in-background.js
@@ -0,0 +1,57 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const { EVENTS } = require("devtools/client/netmonitor/src/constants");
+const {
+ openToolbox,
+ closeToolbox,
+ reloadPageAndLog,
+ testSetup,
+ testTeardown,
+ PAGES_BASE_URL,
+} = require("damp-test/tests/head");
+
+module.exports = async function () {
+ await testSetup(PAGES_BASE_URL + "custom/panels-in-background/index.html");
+
+ // Make sure the Console and Network panels are initialized
+ let toolbox = await openToolbox("webconsole");
+ let monitor = await toolbox.selectTool("netmonitor");
+
+ // Select the options panel to make both the Console and Network
+ // panel be in background.
+ // Options panel should not do anything on page reload.
+ await toolbox.selectTool("options");
+
+ // Reload the page and wait for all HTTP requests
+ // to finish (1 doc + 600 XHRs).
+ let payloadReady = waitForPayload(601, monitor.panelWin);
+ await reloadPageAndLog("panelsInBackground", toolbox);
+ await payloadReady;
+
+ await closeToolbox();
+ await testTeardown();
+};
+
+function waitForPayload(count, panelWin) {
+ return new Promise(resolve => {
+ let payloadReady = 0;
+
+ function onPayloadReady(_, id) {
+ payloadReady++;
+ maybeResolve();
+ }
+
+ function maybeResolve() {
+ if (payloadReady >= count) {
+ panelWin.api.off(EVENTS.PAYLOAD_READY, onPayloadReady);
+ resolve();
+ }
+ }
+
+ panelWin.api.on(EVENTS.PAYLOAD_READY, onPayloadReady);
+ });
+}
diff --git a/testing/talos/talos/tests/devtools/addon/content/tests/toolbox/screenshot.js b/testing/talos/talos/tests/devtools/addon/content/tests/toolbox/screenshot.js
new file mode 100644
index 0000000000..215f7770c4
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/tests/toolbox/screenshot.js
@@ -0,0 +1,78 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const {
+ closeToolbox,
+ openToolbox,
+ COMPLICATED_URL,
+ runTest,
+ testSetup,
+ testTeardown,
+} = require("damp-test/tests/head");
+const { Downloads } = require("resource://gre/modules/Downloads.jsm");
+
+module.exports = async function () {
+ await testSetup(COMPLICATED_URL);
+ // Enable the screenshot button
+ Services.prefs.setBoolPref(
+ "devtools.command-button-screenshot.enabled",
+ true
+ );
+
+ const toolbox = await openToolbox();
+
+ let test = runTest(`screenshot.DAMP`);
+ const onScreenshotDownloaded = waitUntilScreenshotDownloaded();
+ toolbox.doc.querySelector("#command-button-screenshot").click();
+ const filePath = await onScreenshotDownloaded;
+ test.done();
+
+ // Remove the downloaded screenshot file
+ await IOUtils.remove(filePath);
+
+ // ⚠️ Even after removing the file, the test could still manage to reuse files from the
+ // previous test run if they have the same name. Since the screenshot file name is based
+ // on a timestamp that has "second" precision, we might habe to wait for one second
+ // to make sure screenshots taken in next iteration will have different names.
+
+ Services.prefs.clearUserPref("devtools.command-button-screenshot.enabled");
+ await resetDownloads();
+
+ await closeToolbox();
+ await testTeardown();
+};
+
+const allDownloads = new Set();
+async function waitUntilScreenshotDownloaded() {
+ const list = await Downloads.getList(Downloads.ALL);
+
+ return new Promise(function (resolve) {
+ const view = {
+ onDownloadAdded: async download => {
+ await download.whenSucceeded();
+ if (allDownloads.has(download)) {
+ return;
+ }
+
+ allDownloads.add(download);
+ resolve(download.target.path);
+ list.removeView(view);
+ },
+ };
+
+ list.addView(view);
+ });
+}
+
+async function resetDownloads() {
+ const publicList = await Downloads.getList(Downloads.PUBLIC);
+ const downloads = await publicList.getAll();
+ for (const download of downloads) {
+ publicList.remove(download);
+ await download.finalize(true);
+ }
+ allDownloads.clear();
+}
diff --git a/testing/talos/talos/tests/devtools/addon/content/tests/webconsole/autocomplete.js b/testing/talos/talos/tests/devtools/addon/content/tests/webconsole/autocomplete.js
new file mode 100644
index 0000000000..14d34bac33
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/tests/webconsole/autocomplete.js
@@ -0,0 +1,93 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const {
+ openToolbox,
+ closeToolbox,
+ runTest,
+ testSetup,
+ testTeardown,
+ waitForTick,
+} = require("damp-test/tests/head");
+
+const TEST_NAME = "console.autocomplete";
+
+module.exports = async function () {
+ await testSetup(`data:text/html,<meta charset=utf8><script>
+ /*
+ * Create an object with a null prototype in order to not have the autocomplete
+ * popup polluted by Object prototype methods.
+ */
+ const items = Object.create(null);
+ const itemsLength = 10000;
+ for (let i = 0; i < itemsLength; i++) {
+ const key = "item" + i;
+ items[key] = i;
+ }
+
+ window.autocompleteTest = items;
+ </script>`);
+
+ const toolbox = await openToolbox("webconsole");
+ const { hud } = toolbox.getPanel("webconsole");
+ const { jsterm } = hud;
+
+ const test = runTest(TEST_NAME);
+ const ITERATIONS = 5;
+ for (let i = 0; i < ITERATIONS; i++) {
+ await triggerAutocompletePopupAndUpdate(jsterm);
+ await hideAutocompletePopup(jsterm);
+ }
+ test.done();
+
+ const longInputTest = runTest(TEST_NAME + ".longInput");
+ for (let i = 0; i < ITERATIONS; i++) {
+ await triggerAutocompletePopup(jsterm, true);
+ await hideAutocompletePopup(jsterm);
+ }
+ longInputTest.done();
+
+ await closeToolbox();
+ await testTeardown();
+};
+
+async function triggerAutocompletePopupAndUpdate(jsterm) {
+ await triggerAutocompletePopup(jsterm);
+
+ const onPopupUpdated = jsterm.once("autocomplete-updated");
+ setJsTermValueForCompletion(jsterm, "window.autocompleteTest.item9");
+ await onPopupUpdated;
+ await waitForTick();
+}
+
+const LONG_INPUT_PREFIX = `var data = [ ${"{ hello : 'world', foo: [ 1, 2, 3] }, ".repeat(
+ 500
+)}];`;
+
+async function triggerAutocompletePopup(jsterm, withLongPrefix = false) {
+ const onPopupOpened = jsterm.autocompletePopup.once("popup-opened");
+
+ let inputValue = "window.autocompleteTest.";
+ if (withLongPrefix) {
+ inputValue = `${LONG_INPUT_PREFIX}\n${inputValue}`;
+ }
+ setJsTermValueForCompletion(jsterm, inputValue);
+ await onPopupOpened;
+}
+
+async function hideAutocompletePopup(jsterm) {
+ let onPopUpClosed = jsterm.autocompletePopup.once("popup-closed");
+ setJsTermValueForCompletion(jsterm, "");
+ await onPopUpClosed;
+ await waitForTick();
+}
+
+function setJsTermValueForCompletion(jsterm, value) {
+ // setInputValue does not trigger the autocompletion;
+ // we need to call the `autocompleteUpdate` action in order to display the popup.
+ jsterm._setValue(value);
+ jsterm.props.autocompleteUpdate();
+}
diff --git a/testing/talos/talos/tests/devtools/addon/content/tests/webconsole/bulklog.js b/testing/talos/talos/tests/devtools/addon/content/tests/webconsole/bulklog.js
new file mode 100644
index 0000000000..747b3e7b8e
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/tests/webconsole/bulklog.js
@@ -0,0 +1,93 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const {
+ openToolbox,
+ closeToolbox,
+ getBrowserWindow,
+ logTestResult,
+ runTest,
+ testSetup,
+ testTeardown,
+ SIMPLE_URL,
+} = require("damp-test/tests/head");
+const {
+ waitForConsoleOutputChildListChange,
+} = require("damp-test/tests/webconsole/webconsole-helpers");
+
+module.exports = async function () {
+ let TOTAL_MESSAGES = 1000;
+ let tab = await testSetup(SIMPLE_URL);
+ let messageManager = tab.linkedBrowser.messageManager;
+ let toolbox = await openToolbox("webconsole");
+ let { hud } = toolbox.getPanel("webconsole");
+
+ // Load a frame script using a data URI so we can do logs
+ // from the page. So this is running in content.
+ messageManager.loadFrameScript(
+ "data:,(" +
+ encodeURIComponent(
+ `function () {
+ const obj = {};
+ for (let i = 0; i < 1000; i++) {
+ obj["item-" + i] = {index: i, ...obj};
+ }
+ addMessageListener("do-logs", function () {
+ const start = Cu.now();
+ for (var i = 0; i < ${TOTAL_MESSAGES}; i++) {
+ content.console.log('damp', i+1, content, obj);
+ }
+ sendAsyncMessage('logs-done', Cu.now() - start);
+ });
+ }`
+ ) +
+ ")()",
+ true
+ );
+
+ let test = runTest("console.bulklog");
+
+ const allMessagesreceived = waitForConsoleOutputChildListChange(
+ hud,
+ consoleOutput => {
+ const messages = Array.from(
+ consoleOutput.querySelectorAll(".message-body")
+ );
+ return (
+ messages.find(message => message.textContent.includes("damp 1")) &&
+ messages.find(message =>
+ message.textContent.includes("damp " + TOTAL_MESSAGES)
+ )
+ );
+ }
+ );
+
+ // Kick off the logging
+ const onContentProcessLogsDone = new Promise(resolve => {
+ messageManager.addMessageListener("logs-done", function onLogsDone(msg) {
+ messageManager.removeMessageListener("logs-done", onLogsDone);
+ resolve(msg.data);
+ });
+ });
+
+ messageManager.sendAsyncMessage("do-logs");
+ const contentProcessConsoleAPIDuration = await onContentProcessLogsDone;
+ logTestResult(
+ "console.content-process-bulklog",
+ contentProcessConsoleAPIDuration
+ );
+
+ await allMessagesreceived;
+ // Wait for the console to redraw
+ await new Promise(resolve =>
+ getBrowserWindow().requestAnimationFrame(resolve)
+ );
+
+ test.done();
+
+ await closeToolbox();
+ await testTeardown();
+};
diff --git a/testing/talos/talos/tests/devtools/addon/content/tests/webconsole/cold-open.js b/testing/talos/talos/tests/devtools/addon/content/tests/webconsole/cold-open.js
new file mode 100644
index 0000000000..de9e625691
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/tests/webconsole/cold-open.js
@@ -0,0 +1,20 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const {
+ openToolboxAndLog,
+ closeToolbox,
+ testSetup,
+ testTeardown,
+ SIMPLE_URL,
+} = require("damp-test/tests/head");
+
+module.exports = async function () {
+ await testSetup(SIMPLE_URL);
+ await openToolboxAndLog("cold.webconsole", "webconsole");
+ await closeToolbox();
+ await testTeardown();
+};
diff --git a/testing/talos/talos/tests/devtools/addon/content/tests/webconsole/complicated.js b/testing/talos/talos/tests/devtools/addon/content/tests/webconsole/complicated.js
new file mode 100644
index 0000000000..846a923836
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/tests/webconsole/complicated.js
@@ -0,0 +1,59 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const {
+ openToolboxAndLog,
+ closeToolboxAndLog,
+ testSetup,
+ testTeardown,
+ COMPLICATED_URL,
+} = require("damp-test/tests/head");
+const {
+ reloadConsoleAndLog,
+} = require("damp-test/tests/webconsole/webconsole-helpers");
+
+// The virtualized list render all the messages that fit in the console output, and 20 more,
+// so all the expected messages here should be rendered.
+const EXPECTED_MESSAGES = [
+ {
+ text: `Uncaught SyntaxError: missing ) after argument list`,
+ count: 2,
+ },
+ {
+ text: `Uncaught ReferenceError: Bootloaddisableder is not defined`,
+ count: 4,
+ stacktrace: true,
+ },
+ {
+ text: `Uncaught DOMException: XMLHttpRequest.send: XMLHttpRequest state must be OPENED`,
+ },
+];
+
+module.exports = async function () {
+ await testSetup(COMPLICATED_URL);
+
+ // Disabling all filters but Errors, as they are more likely to be stable (unlike
+ // warning messages which can be added more frequently as the platform evolves)
+ const filtersToDisable = [
+ "devtools.webconsole.filter.warn",
+ "devtools.webconsole.filter.info",
+ "devtools.webconsole.filter.log",
+ "devtools.webconsole.filter.debug",
+ ];
+ for (const filter of filtersToDisable) {
+ Services.prefs.setBoolPref(filter, false);
+ }
+
+ let toolbox = await openToolboxAndLog("complicated.webconsole", "webconsole");
+ await reloadConsoleAndLog("complicated", toolbox, EXPECTED_MESSAGES);
+ await closeToolboxAndLog("complicated.webconsole", toolbox);
+
+ for (const filter of filtersToDisable) {
+ Services.prefs.clearUserPref(filter);
+ }
+
+ await testTeardown();
+};
diff --git a/testing/talos/talos/tests/devtools/addon/content/tests/webconsole/custom.js b/testing/talos/talos/tests/devtools/addon/content/tests/webconsole/custom.js
new file mode 100644
index 0000000000..7c120dad02
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/tests/webconsole/custom.js
@@ -0,0 +1,91 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const {
+ openToolboxAndLog,
+ closeToolboxAndLog,
+ runTest,
+ testSetup,
+ testTeardown,
+ PAGES_BASE_URL,
+} = require("damp-test/tests/head");
+const {
+ reloadConsoleAndLog,
+ waitForConsoleOutputChildListChange,
+} = require("damp-test/tests/webconsole/webconsole-helpers");
+
+const TEST_URL = PAGES_BASE_URL + "custom/console/index.html";
+
+module.exports = async function () {
+ // These numbers controls the number of console api calls we do in the test
+ // Use 10k to reach the visible limit of messages reducer when logging sync (which is significantly faster than strem/batch)
+ // Use limited number of async logging (stream/batch) as that is slow
+ const sync = 10000,
+ // Stream uses request animation frame while batch uses idle request
+ // and stream only log one message on each iteration
+ stream = 100,
+ // Number of batch sent after idle
+ batch = 10,
+ // Number of messages emitted on each batch iteration
+ batchSize = 500;
+
+ const params = `?sync=${sync}&stream=${stream}&batch=${batch}&batchSize=${batchSize}`;
+ const url = TEST_URL + params;
+ await testSetup(url, { disableCache: true });
+
+ const toolbox = await openToolboxAndLog("custom.webconsole", "webconsole");
+ const { hud } = toolbox.getPanel("webconsole");
+ // Wait for very last async messages to show up
+ await waitForConsoleOutputChildListChange(hud, consoleOutput => {
+ const messages = consoleOutput.querySelectorAll(".message-body");
+ return (
+ messages &&
+ messages[messages.length - 1]?.textContent.includes("very last message")
+ );
+ });
+ // With virtualization, we won't have all the messages rendered in the DOM, so we only
+ // wait for the last message to be displayed ("batch log 249").
+ await reloadConsoleAndLog("custom", toolbox, [
+ {
+ text: "very last message",
+ },
+ ]);
+
+ dump("Clear console\n");
+
+ const onMessageCleared = waitForConsoleOutputChildListChange(
+ hud,
+ consoleOutput => consoleOutput.querySelector(".message-body") == null
+ );
+ hud.ui.clearOutput(true);
+ await onMessageCleared;
+ dump("Console cleared\n");
+
+ const outOfOrderTest = runTest("custom.webconsole.out-of-order");
+ // The evaluation query doesn't follow the same path as the message resources, which mean
+ // we can get the result before the console messages are received in the store. When those
+ // console messages are handled in the store, we need to insert them before the result
+ // message, which can be a performance bottleneck.
+ const TOTAL_MESSAGES = 10000;
+ hud.ui.wrapper.dispatchEvaluateExpression(
+ `for(let i =0;i<${TOTAL_MESSAGES};i++)console.info("expression log",i)`
+ );
+
+ await waitForConsoleOutputChildListChange(hud, consoleOutput => {
+ const infoMessages = consoleOutput.querySelectorAll(
+ ".message.info .message-body"
+ );
+ return infoMessages[infoMessages.length - 1]?.textContent.includes(
+ "expression log " + (TOTAL_MESSAGES - 1)
+ );
+ });
+
+ outOfOrderTest.done();
+
+ await closeToolboxAndLog("custom.webconsole", toolbox);
+
+ await testTeardown();
+};
diff --git a/testing/talos/talos/tests/devtools/addon/content/tests/webconsole/log-in-loop-content-process.js b/testing/talos/talos/tests/devtools/addon/content/tests/webconsole/log-in-loop-content-process.js
new file mode 100644
index 0000000000..7ac3c3802b
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/tests/webconsole/log-in-loop-content-process.js
@@ -0,0 +1,99 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const {
+ logTestResult,
+ testSetup,
+ testTeardown,
+ PAGES_BASE_URL,
+} = require("damp-test/tests/head");
+const {
+ CommandsFactory,
+} = require("devtools/shared/commands/commands-factory");
+
+module.exports = async function () {
+ let TOTAL_MESSAGES = 1000;
+ let tab = await testSetup(PAGES_BASE_URL + "custom/console/bulklog.html");
+ let messageManager = tab.linkedBrowser.messageManager;
+
+ const commands = await CommandsFactory.forTab(tab);
+ await commands.targetCommand.startListening();
+ await commands.resourceCommand.watchResources(
+ [commands.resourceCommand.TYPES.CONSOLE_MESSAGE],
+ {
+ onAvailable: () => {},
+ }
+ );
+
+ // Load a frame script using a data URI so we can do logs from the page, running in
+ // content process.
+ messageManager.loadFrameScript(
+ `data:application/javascript,(${encodeURIComponent(
+ `function () {
+ addMessageListener("do-logs", function ({data}) {
+ const s = Cu.now();
+ content.wrappedJSObject.doLogs(data, ${TOTAL_MESSAGES});
+ sendAsyncMessage('logs-done', Cu.now() - s);
+ ChromeUtils.addProfilerMarker(
+ "DAMP",
+ { startTime: s, category: "Test" },
+ "console.log-in-loop-content-process-" + data
+ );
+ });
+ }`
+ )})()`,
+ true
+ );
+
+ const tests = [
+ "string",
+ "number",
+ "bigint",
+ "null",
+ "undefined",
+ "nan",
+ "bool",
+ "infinity",
+ "symbol",
+ "array",
+ "typedarray",
+ "set",
+ "map",
+ "object",
+ "node",
+ "nodelist",
+ "promise",
+ "error",
+ "document",
+ "window",
+ "date",
+ // longString used to be impacted by the number of actors created, so we let it at the
+ // end of the list to make sure we have a sizable number of actors managed in the server.
+ "longstring",
+ ];
+
+ for (const test of tests) {
+ const onContentProcessLogsDone = new Promise(resolve => {
+ messageManager.addMessageListener("logs-done", function onLogsDone(msg) {
+ messageManager.removeMessageListener("logs-done", onLogsDone);
+ resolve(msg.data);
+ });
+ });
+
+ const label = "console.log-in-loop-content-process-" + test;
+ dump(`Start "${label}"\n`);
+ messageManager.sendAsyncMessage("do-logs", test);
+ const contentProcessConsoleAPIDuration = await onContentProcessLogsDone;
+ logTestResult(label, contentProcessConsoleAPIDuration);
+ }
+
+ commands.destroy();
+ await testTeardown();
+};
diff --git a/testing/talos/talos/tests/devtools/addon/content/tests/webconsole/objectexpand.js b/testing/talos/talos/tests/devtools/addon/content/tests/webconsole/objectexpand.js
new file mode 100644
index 0000000000..59d532bf71
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/tests/webconsole/objectexpand.js
@@ -0,0 +1,125 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const {
+ openToolbox,
+ closeToolboxAndLog,
+ runTest,
+ testSetup,
+ testTeardown,
+ SIMPLE_URL,
+ waitForDOMPredicate,
+} = require("damp-test/tests/head");
+
+module.exports = async function () {
+ let tab = await testSetup(SIMPLE_URL);
+
+ let messageManager = tab.linkedBrowser.messageManager;
+ let toolbox = await openToolbox("webconsole");
+ let webconsole = toolbox.getPanel("webconsole");
+ const WARMUP_INFO_COUNT = 1000;
+
+ // Load a frame script using a data URI so we can do logs
+ // from the page.
+ messageManager.loadFrameScript(
+ "data:,(" +
+ encodeURIComponent(
+ `function() {
+ const obj = Array.from({
+ length: 333
+ }).reduce((res, _, i) => {
+ res["item_" + i] = "alphanum-indexed-" + i;
+ res[i] = "num-indexed-" + i;
+ res[Symbol(i)] = "symbol-indexed-" + i;
+ return res;
+ }, {});
+
+ addMessageListener("do-dir", function() {
+ content.console.dir(obj);
+ });
+
+ addMessageListener("clear-and-do-info", function() {
+ // clear the output first so we don't have previous messages.
+ content.console.clear();
+ content.console.info(...new Array(${WARMUP_INFO_COUNT}).fill(obj));
+ });
+ }`
+ ) +
+ ")()",
+ true
+ );
+
+ // Expand an object when there's a single objectInspector instance in the console
+ const objectExpandTest = runTest("console.objectexpand");
+ await logAndWaitForExpandedObjectDirMessage(
+ webconsole,
+ messageManager,
+ WARMUP_INFO_COUNT + 1
+ );
+ objectExpandTest.done();
+
+ // Expand an object when there are many objectInspector instances in the console (See Bug 1599317)
+ // First print a lot of objects and wait for them to be rendered
+ const waitForInfoMessage = async () => {
+ const infoMessage =
+ webconsole.hud.ui.outputNode.querySelector(".info.message");
+ if (
+ infoMessage &&
+ infoMessage.querySelectorAll(".tree").length === WARMUP_INFO_COUNT
+ ) {
+ return infoMessage;
+ }
+ await new Promise(res => setTimeout(res, 50));
+ return waitForInfoMessage();
+ };
+ messageManager.sendAsyncMessage("clear-and-do-info");
+ await waitForInfoMessage();
+
+ const objectExpandWhenManyInstancesTest = runTest(
+ "console.objectexpand-many-instances"
+ );
+ await logAndWaitForExpandedObjectDirMessage(
+ webconsole,
+ messageManager,
+ WARMUP_INFO_COUNT + 1
+ );
+ objectExpandWhenManyInstancesTest.done();
+
+ await closeToolboxAndLog("console.objectexpanded", toolbox);
+
+ await testTeardown();
+};
+
+async function logAndWaitForExpandedObjectDirMessage(
+ webconsole,
+ messageManager,
+ expectedTreeItemCount
+) {
+ const waitForDirMessage = async () => {
+ const dirMessage =
+ webconsole.hud.ui.outputNode.querySelector(".dir.message");
+ if (dirMessage) {
+ return dirMessage;
+ }
+ await new Promise(res => setTimeout(res, 50));
+ return waitForDirMessage();
+ };
+
+ // Kick off the logging
+ messageManager.sendAsyncMessage("do-dir");
+ const message = await waitForDirMessage();
+ const tree = message.querySelector(".tree");
+
+ // The tree can be collapsed since the properties are fetched asynchronously.
+ if (tree.querySelectorAll(".node").length === 1) {
+ // If this is the case, we wait for the properties to be fetched and displayed.
+ await waitForDOMPredicate(
+ tree,
+ () => tree.childElementCount === expectedTreeItemCount,
+ { childList: true }
+ );
+ }
+}
diff --git a/testing/talos/talos/tests/devtools/addon/content/tests/webconsole/openwithcache.js b/testing/talos/talos/tests/devtools/addon/content/tests/webconsole/openwithcache.js
new file mode 100644
index 0000000000..09d9b5d7ee
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/tests/webconsole/openwithcache.js
@@ -0,0 +1,38 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const {
+ openToolboxAndLog,
+ closeToolbox,
+ testSetup,
+ testTeardown,
+ SIMPLE_URL,
+} = require("damp-test/tests/head");
+
+const TOTAL_MESSAGES = 100;
+
+module.exports = async function () {
+ let tab = await testSetup(SIMPLE_URL);
+
+ // Load a frame script using a data URI so we can do logs
+ // from the page. So this is running in content.
+ tab.linkedBrowser.messageManager.loadFrameScript(
+ "data:,(" +
+ encodeURIComponent(`
+ function () {
+ for (var i = 0; i < ${TOTAL_MESSAGES}; i++) {
+ content.console.log('damp', i+1, content);
+ }
+ }`) +
+ ")()",
+ true
+ );
+
+ await openToolboxAndLog("console.openwithcache", "webconsole");
+ await closeToolbox();
+
+ await testTeardown();
+};
diff --git a/testing/talos/talos/tests/devtools/addon/content/tests/webconsole/simple.js b/testing/talos/talos/tests/devtools/addon/content/tests/webconsole/simple.js
new file mode 100644
index 0000000000..f8b2c8e8cf
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/tests/webconsole/simple.js
@@ -0,0 +1,28 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const {
+ openToolboxAndLog,
+ closeToolboxAndLog,
+ testSetup,
+ testTeardown,
+ SIMPLE_URL,
+} = require("damp-test/tests/head");
+const {
+ reloadConsoleAndLog,
+} = require("damp-test/tests/webconsole/webconsole-helpers");
+
+const EXPECTED_MESSAGES = 1;
+
+module.exports = async function () {
+ await testSetup(SIMPLE_URL);
+
+ let toolbox = await openToolboxAndLog("simple.webconsole", "webconsole");
+ await reloadConsoleAndLog("simple", toolbox, EXPECTED_MESSAGES);
+ await closeToolboxAndLog("simple.webconsole", toolbox);
+
+ await testTeardown();
+};
diff --git a/testing/talos/talos/tests/devtools/addon/content/tests/webconsole/streamlog.js b/testing/talos/talos/tests/devtools/addon/content/tests/webconsole/streamlog.js
new file mode 100644
index 0000000000..b9af41e97c
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/tests/webconsole/streamlog.js
@@ -0,0 +1,65 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const {
+ openToolbox,
+ closeToolbox,
+ logTestResult,
+ testSetup,
+ testTeardown,
+ SIMPLE_URL,
+} = require("damp-test/tests/head");
+
+// Log a stream of console messages, 1 per rAF. Then record the average
+// time per rAF. The idea is that the console being slow can slow down
+// content (i.e. Bug 1237368).
+module.exports = async function () {
+ let TOTAL_MESSAGES = 100;
+ let tab = await testSetup(SIMPLE_URL);
+ let messageManager = tab.linkedBrowser.messageManager;
+
+ await openToolbox("webconsole");
+
+ // Load a frame script using a data URI so we can do logs
+ // from the page. So this is running in content.
+ messageManager.loadFrameScript(
+ "data:,(" +
+ encodeURIComponent(
+ `function () {
+ let count = 0;
+ let startTime = content.performance.now();
+ function log() {
+ if (++count < ${TOTAL_MESSAGES}) {
+ content.document.querySelector("h1").textContent += count + "\\n";
+ content.console.log('damp', count,
+ content,
+ content.document,
+ content.document.body,
+ content.document.documentElement,
+ new Array(100).join(" DAMP? DAMP! "));
+ content.requestAnimationFrame(log);
+ } else {
+ sendSyncMessage("done", (content.performance.now() - startTime));
+ }
+ }
+ log();
+ }`
+ ) +
+ ")()",
+ true
+ );
+
+ let avgTime = await new Promise(resolve => {
+ messageManager.addMessageListener("done", e => {
+ resolve(e.data);
+ });
+ });
+
+ logTestResult("console.streamlog", avgTime);
+
+ await closeToolbox();
+ await testTeardown();
+};
diff --git a/testing/talos/talos/tests/devtools/addon/content/tests/webconsole/typing.js b/testing/talos/talos/tests/devtools/addon/content/tests/webconsole/typing.js
new file mode 100644
index 0000000000..79299bce42
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/tests/webconsole/typing.js
@@ -0,0 +1,92 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const {
+ openToolbox,
+ closeToolbox,
+ runTest,
+ testSetup,
+ testTeardown,
+ waitForTick,
+} = require("damp-test/tests/head");
+
+const TEST_NAME = "console.typing";
+const LOGS_NUMBER = 500;
+
+module.exports = async function () {
+ const input = "abcdefghijklmnopqrst";
+ await testSetup(`data:text/html,<!DOCTYPE html><meta charset=utf8><script>
+ for (let i = 0; i < ${LOGS_NUMBER}; i++) {
+ const key = "item" + i;
+ console.log(i, key, [i], {key});
+ }
+ /* We add 2 global variables so the autocomplete popup will be displayed */
+ ${input} = {};
+ ${input}z = {};
+ </script>`);
+
+ const toolbox = await openToolbox("webconsole");
+ const { hud } = toolbox.getPanel("webconsole");
+ const { jsterm } = hud;
+
+ // Wait for all the logs to be displayed.
+ await waitFor(() => {
+ const messages = Array.from(
+ hud.ui.outputNode.querySelectorAll(".message-body")
+ );
+ return (
+ messages.find(message => message.textContent.includes(`item0`)) &&
+ messages.find(message =>
+ message.textContent.includes(`item${LOGS_NUMBER - 1}`)
+ )
+ );
+ });
+
+ jsterm.focus();
+
+ const test = runTest(TEST_NAME);
+
+ // Simulate typing in the input.
+ for (const char of Array.from(input)) {
+ const onPopupOpened = jsterm.autocompletePopup.isOpen
+ ? null
+ : jsterm.autocompletePopup.once("popup-opened");
+ const onAutocompleteUpdated = jsterm.once("autocomplete-updated");
+ jsterm.insertStringAtCursor(char);
+ // We need to trigger autocompletion update to show the popup.
+ jsterm.props.autocompleteUpdate();
+ await onAutocompleteUpdated;
+ await onPopupOpened;
+ await waitForTick();
+ }
+
+ test.done();
+ const onPopupClosed = jsterm.autocompletePopup.isOpen
+ ? jsterm.autocompletePopup.once("popup-closed")
+ : null;
+ jsterm.clearCompletion();
+ await onPopupClosed;
+
+ // Let's clear the output as it looks like not doing it could impact the next tests.
+ const onMessagesCleared = waitFor(
+ () => hud.ui.outputNode.querySelectorAll(".message").length === 0
+ );
+ hud.ui.clearOutput();
+ await onMessagesCleared;
+
+ await closeToolbox();
+ await testTeardown();
+};
+
+async function waitFor(condition = () => true, delay = 50) {
+ do {
+ const res = condition();
+ if (res) {
+ return res;
+ }
+ await new Promise(resolve => setTimeout(resolve, delay));
+ } while (true);
+}
diff --git a/testing/talos/talos/tests/devtools/addon/content/tests/webconsole/webconsole-helpers.js b/testing/talos/talos/tests/devtools/addon/content/tests/webconsole/webconsole-helpers.js
new file mode 100644
index 0000000000..ace0dab5da
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/content/tests/webconsole/webconsole-helpers.js
@@ -0,0 +1,132 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const {
+ reloadPageAndLog,
+ waitForDOMPredicate,
+} = require("damp-test/tests/head");
+
+/**
+ * @param {String} label: The name of the test.
+ * @param {Toolbox} toolbox: The DevTools toolbox.
+ * @param {Number|Array} expectedMessages: This can be, either the number of messages that
+ * need to be displayed in the console, or an array of objects representing the
+ * messages that need to be in the output. The objects must have the following shape:
+ * - {String} text: A string that should be in the message.
+ * - {Number} count: If > 1, indicate how many messages with this text should be
+ * in the output.
+ * - {Boolean} stacktrace: If true, wait for a stacktrace element to be rendered.
+ */
+exports.reloadConsoleAndLog = async function (
+ label,
+ toolbox,
+ expectedMessages
+) {
+ const webConsole = toolbox.getPanel("webconsole");
+ const onWebConsoleReload = webConsole.once("reloaded");
+ const onReload = async function () {
+ const { hud } = webConsole;
+ const expected =
+ typeof expectedMessages === "number"
+ ? [{ text: "", count: expectedMessages }]
+ : expectedMessages;
+
+ let logMissingMessagesTimeoutId;
+
+ // Wait for webconsole panel reload in order to prevent matching messages from previous
+ // page load in the code below.
+ await onWebConsoleReload;
+
+ const checkMessages = consoleOutputEl => {
+ if (logMissingMessagesTimeoutId) {
+ clearTimeout(logMissingMessagesTimeoutId);
+ logMissingMessagesTimeoutId = null;
+ }
+
+ const messages = Array.from(consoleOutputEl.querySelectorAll(".message"));
+ const missing = new Map(expected.map(e => [e.text, e.count || 1]));
+
+ for (const { text, count = 1, stacktrace } of expected) {
+ let found = 0;
+ for (const message of messages) {
+ const messageText = message.querySelector(".message-body").innerText;
+ if (
+ messageText.includes(text) &&
+ (!stacktrace || message.querySelector(".frames .frame"))
+ ) {
+ const repeat = message
+ .querySelector(".message-repeats")
+ ?.innerText?.trim();
+ found = found + (repeat ? parseInt(repeat) : 1);
+ }
+ }
+ const allFound = found >= count;
+
+ if (allFound) {
+ missing.delete(text);
+ } else {
+ missing.set(text, count - found);
+ }
+ }
+
+ const foundAllMessages = missing.size == 0;
+ if (!foundAllMessages) {
+ // Only log missing messages after 3s, if there was no other DOM updates.
+ logMissingMessagesTimeoutId = setTimeout(() => {
+ dump(
+ `[TEST_LOG] Still waiting for the following messages: \n${Array.from(
+ missing.entries()
+ )
+ .map(([text, count]) => `${text || "<any text>"} (✕${count})`)
+ .join("\n")}\n`
+ );
+ dump("---\n");
+ }, 3000);
+ }
+ return foundAllMessages;
+ };
+
+ // Messages might already be displayed in the console
+ if (checkMessages(getConsoleOutputElement(hud))) {
+ return;
+ }
+ // if all messages weren't there, wait for mutations and check again
+ await waitForConsoleOutputChildListChange(hud, checkMessages);
+ };
+ await reloadPageAndLog(label + ".webconsole", toolbox, onReload);
+};
+
+/**
+ * Given a WebConsole instance and a predicate, listen for the console output childList
+ * mutation and returns a Promise that will resolve when the `predicate` function returns
+ * true.
+ *
+ * @param {WebConsole} hud
+ * @param {Function} predicate: This is the function called on each childList mutation,
+ * with the console output element. Make the promise resolves
+ * when it returns `true`.
+ */
+async function waitForConsoleOutputChildListChange(hud, predicate) {
+ const webConsoleOutputEl = getConsoleOutputElement(hud);
+
+ await waitForDOMPredicate(
+ webConsoleOutputEl,
+ () => predicate(webConsoleOutputEl),
+ { childList: true, subtree: true }
+ );
+}
+exports.waitForConsoleOutputChildListChange =
+ waitForConsoleOutputChildListChange;
+
+/**
+ * Return the webconsole output element from the hud.
+ *
+ * @param {WebConsole} hud
+ * @returns {Element}
+ */
+function getConsoleOutputElement(hud) {
+ return hud.ui.document.querySelector(".webconsole-output");
+}
diff --git a/testing/talos/talos/tests/devtools/addon/damp.html b/testing/talos/talos/tests/devtools/addon/damp.html
new file mode 100644
index 0000000000..8d7bde244c
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/damp.html
@@ -0,0 +1,12 @@
+<html>
+<head>
+<meta charset="UTF-8"/>
+<title>DAMP - Devtools At Maximum Performance</title>
+
+<script src="driver.js"></script>
+</head>
+
+<body style="font-family:sans-serif;">
+ <h4>DAMP - Devtools At Maximum Performance</h4>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/devtools/addon/driver.js b/testing/talos/talos/tests/devtools/addon/driver.js
new file mode 100644
index 0000000000..1caa41e2d3
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/driver.js
@@ -0,0 +1,10 @@
+/* eslint-env webextensions */
+addEventListener("load", () => {
+ browser.damp.startTest().then(results => {
+ window.tpRecordTime(
+ results.testResults.join(","),
+ 0,
+ results.testNames.join(",")
+ );
+ });
+});
diff --git a/testing/talos/talos/tests/devtools/addon/manifest.json b/testing/talos/talos/tests/devtools/addon/manifest.json
new file mode 100644
index 0000000000..be457f1951
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/manifest.json
@@ -0,0 +1,30 @@
+{
+ "manifest_version": 2,
+ "name": "DAMP - Devtools At Maximum Performance",
+ "version": "0.1",
+
+ "browser_specific_settings": {
+ "gecko": {
+ "id": "bug1150215@mozilla.org"
+ }
+ },
+
+ "protocol_handlers": [
+ {
+ "protocol": "ext+damp",
+ "name": "damp protocol",
+ "uriTemplate": "/damp.html"
+ }
+ ],
+
+ "experiment_apis": {
+ "damp": {
+ "schema": "schema.json",
+ "parent": {
+ "scopes": ["addon_parent"],
+ "script": "api.js",
+ "paths": [["damp"]]
+ }
+ }
+ }
+}
diff --git a/testing/talos/talos/tests/devtools/addon/schema.json b/testing/talos/talos/tests/devtools/addon/schema.json
new file mode 100644
index 0000000000..01b940d95e
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/addon/schema.json
@@ -0,0 +1,13 @@
+[
+ {
+ "namespace": "damp",
+ "functions": [
+ {
+ "name": "startTest",
+ "type": "function",
+ "async": true,
+ "parameters": []
+ }
+ ]
+ }
+]
diff --git a/testing/talos/talos/tests/devtools/damp.manifest b/testing/talos/talos/tests/devtools/damp.manifest
new file mode 100644
index 0000000000..f69d96862a
--- /dev/null
+++ b/testing/talos/talos/tests/devtools/damp.manifest
@@ -0,0 +1 @@
+% ext+damp:damp.html
diff --git a/testing/talos/talos/tests/dromaeo/JSON.php b/testing/talos/talos/tests/dromaeo/JSON.php
new file mode 100644
index 0000000000..8283e7ef77
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/JSON.php
@@ -0,0 +1,806 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Converts to and from JSON format.
+ *
+ * JSON (JavaScript Object Notation) is a lightweight data-interchange
+ * format. It is easy for humans to read and write. It is easy for machines
+ * to parse and generate. It is based on a subset of the JavaScript
+ * Programming Language, Standard ECMA-262 3rd Edition - December 1999.
+ * This feature can also be found in Python. JSON is a text format that is
+ * completely language independent but uses conventions that are familiar
+ * to programmers of the C-family of languages, including C, C++, C#, Java,
+ * JavaScript, Perl, TCL, and many others. These properties make JSON an
+ * ideal data-interchange language.
+ *
+ * This package provides a simple encoder and decoder for JSON notation. It
+ * is intended for use with client-side Javascript applications that make
+ * use of HTTPRequest to perform server communication functions - data can
+ * be encoded into JSON notation for use in a client-side javascript, or
+ * decoded from incoming Javascript requests. JSON format is native to
+ * Javascript, and can be directly eval()'ed with no further parsing
+ * overhead
+ *
+ * All strings should be in ASCII or UTF-8 format!
+ *
+ * LICENSE: 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.
+ *
+ * THIS SOFTWARE IS PROVIDED ``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 CONTRIBUTORS 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.
+ *
+ * @category
+ * @package Services_JSON
+ * @author Michal Migurski <mike-json@teczno.com>
+ * @author Matt Knapp <mdknapp[at]gmail[dot]com>
+ * @author Brett Stimmerman <brettstimmerman[at]gmail[dot]com>
+ * @copyright 2005 Michal Migurski
+ * @version CVS: $Id$
+ * @license http://www.opensource.org/licenses/bsd-license.php
+ * @link http://pear.php.net/pepr/pepr-proposal-show.php?id=198
+ */
+
+/**
+ * Marker constant for Services_JSON::decode(), used to flag stack state
+ */
+define('SERVICES_JSON_SLICE', 1);
+
+/**
+ * Marker constant for Services_JSON::decode(), used to flag stack state
+ */
+define('SERVICES_JSON_IN_STR', 2);
+
+/**
+ * Marker constant for Services_JSON::decode(), used to flag stack state
+ */
+define('SERVICES_JSON_IN_ARR', 3);
+
+/**
+ * Marker constant for Services_JSON::decode(), used to flag stack state
+ */
+define('SERVICES_JSON_IN_OBJ', 4);
+
+/**
+ * Marker constant for Services_JSON::decode(), used to flag stack state
+ */
+define('SERVICES_JSON_IN_CMT', 5);
+
+/**
+ * Behavior switch for Services_JSON::decode()
+ */
+define('SERVICES_JSON_LOOSE_TYPE', 16);
+
+/**
+ * Behavior switch for Services_JSON::decode()
+ */
+define('SERVICES_JSON_SUPPRESS_ERRORS', 32);
+
+/**
+ * Converts to and from JSON format.
+ *
+ * Brief example of use:
+ *
+ * <code>
+ * // create a new instance of Services_JSON
+ * $json = new Services_JSON();
+ *
+ * // convert a complexe value to JSON notation, and send it to the browser
+ * $value = array('foo', 'bar', array(1, 2, 'baz'), array(3, array(4)));
+ * $output = $json->encode($value);
+ *
+ * print($output);
+ * // prints: ["foo","bar",[1,2,"baz"],[3,[4]]]
+ *
+ * // accept incoming POST data, assumed to be in JSON notation
+ * $input = file_get_contents('php://input', 1000000);
+ * $value = $json->decode($input);
+ * </code>
+ */
+class Services_JSON
+{
+ /**
+ * constructs a new JSON instance
+ *
+ * @param int $use object behavior flags; combine with boolean-OR
+ *
+ * possible values:
+ * - SERVICES_JSON_LOOSE_TYPE: loose typing.
+ * "{...}" syntax creates associative arrays
+ * instead of objects in decode().
+ * - SERVICES_JSON_SUPPRESS_ERRORS: error suppression.
+ * Values which can't be encoded (e.g. resources)
+ * appear as NULL instead of throwing errors.
+ * By default, a deeply-nested resource will
+ * bubble up with an error, so all return values
+ * from encode() should be checked with isError()
+ */
+ function Services_JSON($use = 0)
+ {
+ $this->use = $use;
+ }
+
+ /**
+ * convert a string from one UTF-16 char to one UTF-8 char
+ *
+ * Normally should be handled by mb_convert_encoding, but
+ * provides a slower PHP-only method for installations
+ * that lack the multibye string extension.
+ *
+ * @param string $utf16 UTF-16 character
+ * @return string UTF-8 character
+ * @access private
+ */
+ function utf162utf8($utf16)
+ {
+ // oh please oh please oh please oh please oh please
+ if(function_exists('mb_convert_encoding')) {
+ return mb_convert_encoding($utf16, 'UTF-8', 'UTF-16');
+ }
+
+ $bytes = (ord($utf16{0}) << 8) | ord($utf16{1});
+
+ switch(true) {
+ case ((0x7F & $bytes) == $bytes):
+ // this case should never be reached, because we are in ASCII range
+ // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ return chr(0x7F & $bytes);
+
+ case (0x07FF & $bytes) == $bytes:
+ // return a 2-byte UTF-8 character
+ // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ return chr(0xC0 | (($bytes >> 6) & 0x1F))
+ . chr(0x80 | ($bytes & 0x3F));
+
+ case (0xFFFF & $bytes) == $bytes:
+ // return a 3-byte UTF-8 character
+ // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ return chr(0xE0 | (($bytes >> 12) & 0x0F))
+ . chr(0x80 | (($bytes >> 6) & 0x3F))
+ . chr(0x80 | ($bytes & 0x3F));
+ }
+
+ // ignoring UTF-32 for now, sorry
+ return '';
+ }
+
+ /**
+ * convert a string from one UTF-8 char to one UTF-16 char
+ *
+ * Normally should be handled by mb_convert_encoding, but
+ * provides a slower PHP-only method for installations
+ * that lack the multibye string extension.
+ *
+ * @param string $utf8 UTF-8 character
+ * @return string UTF-16 character
+ * @access private
+ */
+ function utf82utf16($utf8)
+ {
+ // oh please oh please oh please oh please oh please
+ if(function_exists('mb_convert_encoding')) {
+ return mb_convert_encoding($utf8, 'UTF-16', 'UTF-8');
+ }
+
+ switch(strlen($utf8)) {
+ case 1:
+ // this case should never be reached, because we are in ASCII range
+ // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ return $utf8;
+
+ case 2:
+ // return a UTF-16 character from a 2-byte UTF-8 char
+ // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ return chr(0x07 & (ord($utf8{0}) >> 2))
+ . chr((0xC0 & (ord($utf8{0}) << 6))
+ | (0x3F & ord($utf8{1})));
+
+ case 3:
+ // return a UTF-16 character from a 3-byte UTF-8 char
+ // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ return chr((0xF0 & (ord($utf8{0}) << 4))
+ | (0x0F & (ord($utf8{1}) >> 2)))
+ . chr((0xC0 & (ord($utf8{1}) << 6))
+ | (0x7F & ord($utf8{2})));
+ }
+
+ // ignoring UTF-32 for now, sorry
+ return '';
+ }
+
+ /**
+ * encodes an arbitrary variable into JSON format
+ *
+ * @param mixed $var any number, boolean, string, array, or object to be encoded.
+ * see argument 1 to Services_JSON() above for array-parsing behavior.
+ * if var is a strng, note that encode() always expects it
+ * to be in ASCII or UTF-8 format!
+ *
+ * @return mixed JSON string representation of input var or an error if a problem occurs
+ * @access public
+ */
+ function encode($var)
+ {
+ switch (gettype($var)) {
+ case 'boolean':
+ return $var ? 'true' : 'false';
+
+ case 'NULL':
+ return 'null';
+
+ case 'integer':
+ return (int) $var;
+
+ case 'double':
+ case 'float':
+ return (float) $var;
+
+ case 'string':
+ // STRINGS ARE EXPECTED TO BE IN ASCII OR UTF-8 FORMAT
+ $ascii = '';
+ $strlen_var = strlen($var);
+
+ /*
+ * Iterate over every character in the string,
+ * escaping with a slash or encoding to UTF-8 where necessary
+ */
+ for ($c = 0; $c < $strlen_var; ++$c) {
+
+ $ord_var_c = ord($var{$c});
+
+ switch (true) {
+ case $ord_var_c == 0x08:
+ $ascii .= '\b';
+ break;
+ case $ord_var_c == 0x09:
+ $ascii .= '\t';
+ break;
+ case $ord_var_c == 0x0A:
+ $ascii .= '\n';
+ break;
+ case $ord_var_c == 0x0C:
+ $ascii .= '\f';
+ break;
+ case $ord_var_c == 0x0D:
+ $ascii .= '\r';
+ break;
+
+ case $ord_var_c == 0x22:
+ case $ord_var_c == 0x2F:
+ case $ord_var_c == 0x5C:
+ // double quote, slash, slosh
+ $ascii .= '\\'.$var{$c};
+ break;
+
+ case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)):
+ // characters U-00000000 - U-0000007F (same as ASCII)
+ $ascii .= $var{$c};
+ break;
+
+ case (($ord_var_c & 0xE0) == 0xC0):
+ // characters U-00000080 - U-000007FF, mask 110XXXXX
+ // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ $char = pack('C*', $ord_var_c, ord($var{$c + 1}));
+ $c += 1;
+ $utf16 = $this->utf82utf16($char);
+ $ascii .= sprintf('\u%04s', bin2hex($utf16));
+ break;
+
+ case (($ord_var_c & 0xF0) == 0xE0):
+ // characters U-00000800 - U-0000FFFF, mask 1110XXXX
+ // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ $char = pack('C*', $ord_var_c,
+ ord($var{$c + 1}),
+ ord($var{$c + 2}));
+ $c += 2;
+ $utf16 = $this->utf82utf16($char);
+ $ascii .= sprintf('\u%04s', bin2hex($utf16));
+ break;
+
+ case (($ord_var_c & 0xF8) == 0xF0):
+ // characters U-00010000 - U-001FFFFF, mask 11110XXX
+ // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ $char = pack('C*', $ord_var_c,
+ ord($var{$c + 1}),
+ ord($var{$c + 2}),
+ ord($var{$c + 3}));
+ $c += 3;
+ $utf16 = $this->utf82utf16($char);
+ $ascii .= sprintf('\u%04s', bin2hex($utf16));
+ break;
+
+ case (($ord_var_c & 0xFC) == 0xF8):
+ // characters U-00200000 - U-03FFFFFF, mask 111110XX
+ // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ $char = pack('C*', $ord_var_c,
+ ord($var{$c + 1}),
+ ord($var{$c + 2}),
+ ord($var{$c + 3}),
+ ord($var{$c + 4}));
+ $c += 4;
+ $utf16 = $this->utf82utf16($char);
+ $ascii .= sprintf('\u%04s', bin2hex($utf16));
+ break;
+
+ case (($ord_var_c & 0xFE) == 0xFC):
+ // characters U-04000000 - U-7FFFFFFF, mask 1111110X
+ // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ $char = pack('C*', $ord_var_c,
+ ord($var{$c + 1}),
+ ord($var{$c + 2}),
+ ord($var{$c + 3}),
+ ord($var{$c + 4}),
+ ord($var{$c + 5}));
+ $c += 5;
+ $utf16 = $this->utf82utf16($char);
+ $ascii .= sprintf('\u%04s', bin2hex($utf16));
+ break;
+ }
+ }
+
+ return '"'.$ascii.'"';
+
+ case 'array':
+ /*
+ * As per JSON spec if any array key is not an integer
+ * we must treat the the whole array as an object. We
+ * also try to catch a sparsely populated associative
+ * array with numeric keys here because some JS engines
+ * will create an array with empty indexes up to
+ * max_index which can cause memory issues and because
+ * the keys, which may be relevant, will be remapped
+ * otherwise.
+ *
+ * As per the ECMA and JSON specification an object may
+ * have any string as a property. Unfortunately due to
+ * a hole in the ECMA specification if the key is a
+ * ECMA reserved word or starts with a digit the
+ * parameter is only accessible using ECMAScript's
+ * bracket notation.
+ */
+
+ // treat as a JSON object
+ if (is_array($var) && count($var) && (array_keys($var) !== range(0, sizeof($var) - 1))) {
+ $properties = array_map(array($this, 'name_value'),
+ array_keys($var),
+ array_values($var));
+
+ foreach($properties as $property) {
+ if(Services_JSON::isError($property)) {
+ return $property;
+ }
+ }
+
+ return '{' . join(',', $properties) . '}';
+ }
+
+ // treat it like a regular array
+ $elements = array_map(array($this, 'encode'), $var);
+
+ foreach($elements as $element) {
+ if(Services_JSON::isError($element)) {
+ return $element;
+ }
+ }
+
+ return '[' . join(',', $elements) . ']';
+
+ case 'object':
+ $vars = get_object_vars($var);
+
+ $properties = array_map(array($this, 'name_value'),
+ array_keys($vars),
+ array_values($vars));
+
+ foreach($properties as $property) {
+ if(Services_JSON::isError($property)) {
+ return $property;
+ }
+ }
+
+ return '{' . join(',', $properties) . '}';
+
+ default:
+ return ($this->use & SERVICES_JSON_SUPPRESS_ERRORS)
+ ? 'null'
+ : new Services_JSON_Error(gettype($var)." can not be encoded as JSON string");
+ }
+ }
+
+ /**
+ * array-walking function for use in generating JSON-formatted name-value pairs
+ *
+ * @param string $name name of key to use
+ * @param mixed $value reference to an array element to be encoded
+ *
+ * @return string JSON-formatted name-value pair, like '"name":value'
+ * @access private
+ */
+ function name_value($name, $value)
+ {
+ $encoded_value = $this->encode($value);
+
+ if(Services_JSON::isError($encoded_value)) {
+ return $encoded_value;
+ }
+
+ return $this->encode(strval($name)) . ':' . $encoded_value;
+ }
+
+ /**
+ * reduce a string by removing leading and trailing comments and whitespace
+ *
+ * @param $str string string value to strip of comments and whitespace
+ *
+ * @return string string value stripped of comments and whitespace
+ * @access private
+ */
+ function reduce_string($str)
+ {
+ $str = preg_replace(array(
+
+ // eliminate single line comments in '// ...' form
+ '#^\s*//(.+)$#m',
+
+ // eliminate multi-line comments in '/* ... */' form, at start of string
+ '#^\s*/\*(.+)\*/#Us',
+
+ // eliminate multi-line comments in '/* ... */' form, at end of string
+ '#/\*(.+)\*/\s*$#Us'
+
+ ), '', $str);
+
+ // eliminate extraneous space
+ return trim($str);
+ }
+
+ /**
+ * decodes a JSON string into appropriate variable
+ *
+ * @param string $str JSON-formatted string
+ *
+ * @return mixed number, boolean, string, array, or object
+ * corresponding to given JSON input string.
+ * See argument 1 to Services_JSON() above for object-output behavior.
+ * Note that decode() always returns strings
+ * in ASCII or UTF-8 format!
+ * @access public
+ */
+ function decode($str)
+ {
+ $str = $this->reduce_string($str);
+
+ switch (strtolower($str)) {
+ case 'true':
+ return true;
+
+ case 'false':
+ return false;
+
+ case 'null':
+ return null;
+
+ default:
+ $m = array();
+
+ if (is_numeric($str)) {
+ // Lookie-loo, it's a number
+
+ // This would work on its own, but I'm trying to be
+ // good about returning integers where appropriate:
+ // return (float)$str;
+
+ // Return float or int, as appropriate
+ return ((float)$str == (integer)$str)
+ ? (integer)$str
+ : (float)$str;
+
+ } elseif (preg_match('/^("|\').*(\1)$/s', $str, $m) && $m[1] == $m[2]) {
+ // STRINGS RETURNED IN UTF-8 FORMAT
+ $delim = substr($str, 0, 1);
+ $chrs = substr($str, 1, -1);
+ $utf8 = '';
+ $strlen_chrs = strlen($chrs);
+
+ for ($c = 0; $c < $strlen_chrs; ++$c) {
+
+ $substr_chrs_c_2 = substr($chrs, $c, 2);
+ $ord_chrs_c = ord($chrs{$c});
+
+ switch (true) {
+ case $substr_chrs_c_2 == '\b':
+ $utf8 .= chr(0x08);
+ ++$c;
+ break;
+ case $substr_chrs_c_2 == '\t':
+ $utf8 .= chr(0x09);
+ ++$c;
+ break;
+ case $substr_chrs_c_2 == '\n':
+ $utf8 .= chr(0x0A);
+ ++$c;
+ break;
+ case $substr_chrs_c_2 == '\f':
+ $utf8 .= chr(0x0C);
+ ++$c;
+ break;
+ case $substr_chrs_c_2 == '\r':
+ $utf8 .= chr(0x0D);
+ ++$c;
+ break;
+
+ case $substr_chrs_c_2 == '\\"':
+ case $substr_chrs_c_2 == '\\\'':
+ case $substr_chrs_c_2 == '\\\\':
+ case $substr_chrs_c_2 == '\\/':
+ if (($delim == '"' && $substr_chrs_c_2 != '\\\'') ||
+ ($delim == "'" && $substr_chrs_c_2 != '\\"')) {
+ $utf8 .= $chrs{++$c};
+ }
+ break;
+
+ case preg_match('/\\\u[0-9A-F]{4}/i', substr($chrs, $c, 6)):
+ // single, escaped unicode character
+ $utf16 = chr(hexdec(substr($chrs, ($c + 2), 2)))
+ . chr(hexdec(substr($chrs, ($c + 4), 2)));
+ $utf8 .= $this->utf162utf8($utf16);
+ $c += 5;
+ break;
+
+ case ($ord_chrs_c >= 0x20) && ($ord_chrs_c <= 0x7F):
+ $utf8 .= $chrs{$c};
+ break;
+
+ case ($ord_chrs_c & 0xE0) == 0xC0:
+ // characters U-00000080 - U-000007FF, mask 110XXXXX
+ //see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ $utf8 .= substr($chrs, $c, 2);
+ ++$c;
+ break;
+
+ case ($ord_chrs_c & 0xF0) == 0xE0:
+ // characters U-00000800 - U-0000FFFF, mask 1110XXXX
+ // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ $utf8 .= substr($chrs, $c, 3);
+ $c += 2;
+ break;
+
+ case ($ord_chrs_c & 0xF8) == 0xF0:
+ // characters U-00010000 - U-001FFFFF, mask 11110XXX
+ // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ $utf8 .= substr($chrs, $c, 4);
+ $c += 3;
+ break;
+
+ case ($ord_chrs_c & 0xFC) == 0xF8:
+ // characters U-00200000 - U-03FFFFFF, mask 111110XX
+ // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ $utf8 .= substr($chrs, $c, 5);
+ $c += 4;
+ break;
+
+ case ($ord_chrs_c & 0xFE) == 0xFC:
+ // characters U-04000000 - U-7FFFFFFF, mask 1111110X
+ // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ $utf8 .= substr($chrs, $c, 6);
+ $c += 5;
+ break;
+
+ }
+
+ }
+
+ return $utf8;
+
+ } elseif (preg_match('/^\[.*\]$/s', $str) || preg_match('/^\{.*\}$/s', $str)) {
+ // array, or object notation
+
+ if ($str{0} == '[') {
+ $stk = array(SERVICES_JSON_IN_ARR);
+ $arr = array();
+ } else {
+ if ($this->use & SERVICES_JSON_LOOSE_TYPE) {
+ $stk = array(SERVICES_JSON_IN_OBJ);
+ $obj = array();
+ } else {
+ $stk = array(SERVICES_JSON_IN_OBJ);
+ $obj = new stdClass();
+ }
+ }
+
+ array_push($stk, array('what' => SERVICES_JSON_SLICE,
+ 'where' => 0,
+ 'delim' => false));
+
+ $chrs = substr($str, 1, -1);
+ $chrs = $this->reduce_string($chrs);
+
+ if ($chrs == '') {
+ if (reset($stk) == SERVICES_JSON_IN_ARR) {
+ return $arr;
+
+ } else {
+ return $obj;
+
+ }
+ }
+
+ //print("\nparsing {$chrs}\n");
+
+ $strlen_chrs = strlen($chrs);
+
+ for ($c = 0; $c <= $strlen_chrs; ++$c) {
+
+ $top = end($stk);
+ $substr_chrs_c_2 = substr($chrs, $c, 2);
+
+ if (($c == $strlen_chrs) || (($chrs{$c} == ',') && ($top['what'] == SERVICES_JSON_SLICE))) {
+ // found a comma that is not inside a string, array, etc.,
+ // OR we've reached the end of the character list
+ $slice = substr($chrs, $top['where'], ($c - $top['where']));
+ array_push($stk, array('what' => SERVICES_JSON_SLICE, 'where' => ($c + 1), 'delim' => false));
+ //print("Found split at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
+
+ if (reset($stk) == SERVICES_JSON_IN_ARR) {
+ // we are in an array, so just push an element onto the stack
+ array_push($arr, $this->decode($slice));
+
+ } elseif (reset($stk) == SERVICES_JSON_IN_OBJ) {
+ // we are in an object, so figure
+ // out the property name and set an
+ // element in an associative array,
+ // for now
+ $parts = array();
+
+ if (preg_match('/^\s*(["\'].*[^\\\]["\'])\s*:\s*(\S.*),?$/Uis', $slice, $parts)) {
+ // "name":value pair
+ $key = $this->decode($parts[1]);
+ $val = $this->decode($parts[2]);
+
+ if ($this->use & SERVICES_JSON_LOOSE_TYPE) {
+ $obj[$key] = $val;
+ } else {
+ $obj->$key = $val;
+ }
+ } elseif (preg_match('/^\s*(\w+)\s*:\s*(\S.*),?$/Uis', $slice, $parts)) {
+ // name:value pair, where name is unquoted
+ $key = $parts[1];
+ $val = $this->decode($parts[2]);
+
+ if ($this->use & SERVICES_JSON_LOOSE_TYPE) {
+ $obj[$key] = $val;
+ } else {
+ $obj->$key = $val;
+ }
+ }
+
+ }
+
+ } elseif ((($chrs{$c} == '"') || ($chrs{$c} == "'")) && ($top['what'] != SERVICES_JSON_IN_STR)) {
+ // found a quote, and we are not inside a string
+ array_push($stk, array('what' => SERVICES_JSON_IN_STR, 'where' => $c, 'delim' => $chrs{$c}));
+ //print("Found start of string at {$c}\n");
+
+ } elseif (($chrs{$c} == $top['delim']) &&
+ ($top['what'] == SERVICES_JSON_IN_STR) &&
+ ((strlen(substr($chrs, 0, $c)) - strlen(rtrim(substr($chrs, 0, $c), '\\'))) % 2 != 1)) {
+ // found a quote, we're in a string, and it's not escaped
+ // we know that it's not escaped becase there is _not_ an
+ // odd number of backslashes at the end of the string so far
+ array_pop($stk);
+ //print("Found end of string at {$c}: ".substr($chrs, $top['where'], (1 + 1 + $c - $top['where']))."\n");
+
+ } elseif (($chrs{$c} == '[') &&
+ in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) {
+ // found a left-bracket, and we are in an array, object, or slice
+ array_push($stk, array('what' => SERVICES_JSON_IN_ARR, 'where' => $c, 'delim' => false));
+ //print("Found start of array at {$c}\n");
+
+ } elseif (($chrs{$c} == ']') && ($top['what'] == SERVICES_JSON_IN_ARR)) {
+ // found a right-bracket, and we're in an array
+ array_pop($stk);
+ //print("Found end of array at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
+
+ } elseif (($chrs{$c} == '{') &&
+ in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) {
+ // found a left-brace, and we are in an array, object, or slice
+ array_push($stk, array('what' => SERVICES_JSON_IN_OBJ, 'where' => $c, 'delim' => false));
+ //print("Found start of object at {$c}\n");
+
+ } elseif (($chrs{$c} == '}') && ($top['what'] == SERVICES_JSON_IN_OBJ)) {
+ // found a right-brace, and we're in an object
+ array_pop($stk);
+ //print("Found end of object at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
+
+ } elseif (($substr_chrs_c_2 == '/*') &&
+ in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) {
+ // found a comment start, and we are in an array, object, or slice
+ array_push($stk, array('what' => SERVICES_JSON_IN_CMT, 'where' => $c, 'delim' => false));
+ $c++;
+ //print("Found start of comment at {$c}\n");
+
+ } elseif (($substr_chrs_c_2 == '*/') && ($top['what'] == SERVICES_JSON_IN_CMT)) {
+ // found a comment end, and we're in one now
+ array_pop($stk);
+ $c++;
+
+ for ($i = $top['where']; $i <= $c; ++$i)
+ $chrs = substr_replace($chrs, ' ', $i, 1);
+
+ //print("Found end of comment at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
+
+ }
+
+ }
+
+ if (reset($stk) == SERVICES_JSON_IN_ARR) {
+ return $arr;
+
+ } elseif (reset($stk) == SERVICES_JSON_IN_OBJ) {
+ return $obj;
+
+ }
+
+ }
+ }
+ }
+
+ /**
+ * @todo Ultimately, this should just call PEAR::isError()
+ */
+ function isError($data, $code = null)
+ {
+ if (class_exists('pear')) {
+ return PEAR::isError($data, $code);
+ } elseif (is_object($data) && (get_class($data) == 'services_json_error' ||
+ is_subclass_of($data, 'services_json_error'))) {
+ return true;
+ }
+
+ return false;
+ }
+}
+
+if (class_exists('PEAR_Error')) {
+
+ class Services_JSON_Error extends PEAR_Error
+ {
+ function Services_JSON_Error($message = 'unknown error', $code = null,
+ $mode = null, $options = null, $userinfo = null)
+ {
+ parent::PEAR_Error($message, $code, $mode, $options, $userinfo);
+ }
+ }
+
+} else {
+
+ /**
+ * @todo Ultimately, this class shall be descended from PEAR_Error
+ */
+ class Services_JSON_Error
+ {
+ function Services_JSON_Error($message = 'unknown error', $code = null,
+ $mode = null, $options = null, $userinfo = null)
+ {
+
+ }
+ }
+
+}
+
+?>
diff --git a/testing/talos/talos/tests/dromaeo/LICENSE b/testing/talos/talos/tests/dromaeo/LICENSE
new file mode 100644
index 0000000000..335edf6af0
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/LICENSE
@@ -0,0 +1,30 @@
+Dromaeo Test Suite
+Copyright (c) 2008 John Resig
+
+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.
+
+----
+
+All tests are the copyright of their respective owners.
+ - Tests coming from the Computer Language Shootout are under the Revised BSD license
+ <http://shootout.alioth.debian.org/license.php>.
+ - Tests coming from John Resig are under an MIT license.
diff --git a/testing/talos/talos/tests/dromaeo/application.css b/testing/talos/talos/tests/dromaeo/application.css
new file mode 100644
index 0000000000..e540dd29e3
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/application.css
@@ -0,0 +1,115 @@
+ol.results { text-align: left; display: none; font-size: 10px; list-style: none; display: none; }
+.alldone ol.results { display: block; width: 48%; float: left; }
+ol.results li { clear: both; overflow: auto; }
+ol.results b { display: block; width: 200px; float: left; text-align: right; padding-right: 15px; }
+#info { clear:both;width:420px;margin:0 auto;text-align:left; padding: 10px; }
+div.results { width:420px;margin:0 auto;margin-bottom:20px;text-align:left; padding: 10px 10px 10px 10px; }
+#info span { font-weight: bold; padding-top: 8px; }
+h1 { text-align: left; }
+h1 img { float:left;margin-right: 15px;margin-top: -10px; border: 0; }
+h1 small { font-weight:normal; }
+iframe { display: none; }
+div.resultwrap { text-align: center; }
+table.results { font-size: 12px; margin: 0 auto; }
+table.results td, table.results th.name, table.results th { text-align: right; }
+table.results .winner { color: #000; background-color: #c7331d; }
+table.results .tie { color: #000; background-color: #f9f2a1; }
+
+body {
+ font: normal 11px "Lucida Grande", Helvetica, Arial, sans-serif;
+ background: black url(images/bg.png) repeat-x;
+ margin: 0px auto;
+ padding: 0px;
+ color: #eee;
+ text-align: center;
+ line-height: 180%;
+}
+div, img, form, ul {
+ margin: 0px;
+ padding: 0px;
+ border: 0px;
+}
+small {font-size: 9px;}
+div, span, td, .text_l {text-align: left;}
+.clear {clear: both;}
+.text_r {text-align: right;}
+.text_c {text-align: center;}
+a {font: normal "Arial", sans-serif; color: #f9f2a1; }
+.left {float: left;}
+.right {float: right;}
+
+#wrapper {width: 690px; margin: 0px auto; padding: 0px; margin-top: -7px; text-align: center;}
+#content {margin-bottom: 30px;}
+#main {padding-bottom: 40px;}
+
+#top {background: url(images/top.png) repeat-x; height: 250px;}
+#logo {position: absolute; top: 0; left: 0; width: 100%; text-align: center; z-index: 100;}
+#logo img { margin: 0px auto; padding: 0px;}
+.dino1 {position: absolute; top: 105px; right: 300px; z-index: 15;}
+.dino2 {position: absolute; top: 110px; left: 15%; z-index: 12;}
+.dino3 {position: absolute; top: 120px; left: 400px; z-index: 31;}
+.dino4 {position: absolute; top: 96px; left: 200px; z-index: 8;}
+.dino5 {position: absolute; top: 110px; right: 85px; z-index: 14;}
+.dino6 {position: absolute; top: 105px; left: 30%; z-index: 14;}
+.dino7 {position: absolute; top: 110px; left: 70%; z-index: 22;}
+.dino8 {position: absolute; top: 105px; left: 37%; z-index: 20;}
+.coment {position: absolute; top: 0px; right: 0px; z-index: 2; float: right;}
+
+.clouds {position: absolute; top: 10px; right: 11%; z-index: 12;}
+.clouds2 {position: absolute; top: 50px; right: 29%; z-index: 13;}
+.clouds5 {position: absolute; top: 0px; right: 15%; z-index: 16;}
+.clouds3 {position: absolute; top: 15px; left: 10%; z-index: 15;}
+.clouds4 {position: absolute; top: 10px; left: 15%; z-index: 14;}
+
+.water {position: absolute; top: 110px; right: 9%; z-index: 13;}
+
+
+/* rendered html stuff */
+
+table.results {text-align: center; margin: 0px auto; padding: 0px; background: none;}
+table.results td, table.results th {padding: 2px;}
+table.results tr.onetest td, table.results tr.onetest th {padding: 0px;}
+table.results tr.hidden { display: none; }
+#info {margin-bottom: 10px;}
+table.results .winner {background: #58bd79;}
+.name {font-weight: bold;}
+
+div.resultwrap {margin: 10px 0 10px 0;}
+div.results {padding: 10px; margin-bottom: 20px; background: #c7331d;}
+
+div.result-item { position: relative; width: 48%; float: left; overflow: hidden; margin-left: 1%; margin-right: 1%; height: 100px; }
+.alldone div.result-item { width: 98%; height: auto; margin-bottom: 10px; overflow: auto; }
+.alldone div.result-item p { width: 48%; float: left; }
+
+div.result-item p { padding: 0px 4px; }
+
+div.test { overflow: hidden; margin: 4px 0; }
+div.test b { display: block; width: 100%; text-align: left; margin: 0px; background: #c7331d; padding: 4px; }
+/*div.done div.test b {background: #58bd79;}*/
+div.done div.test b {background: #222;}
+div.bar { width: 100px; border: 1px inset #666; background: #c7331d; text-align: left; position: absolute; top: 7px; right: 4px; }
+div.bar div { height: 20px; background: #222; text-align: right; }
+div.done div.bar div {background: #58bd79; color: #000;}
+div.bar span { padding-left: 5px; padding-right: 5px; }
+
+#info { margin: auto; }
+
+h1 { font-size: 28px; border-bottom: 1px solid #AAA; position: relative; padding: 0px 1% 2px 1%;}
+h1 div.bar { font-size: 10px; width: 275px; top: -2px; right: 1%; }
+h1 input { position: absolute; top: 0px; right: 300px; }
+
+h2 { font-size: 20px; border-bottom: 1px solid #AAA; position: relative; padding: 0px 1% 2px 1%;}
+h2 a { color: #FFF; }
+h2 div.bar { font-size: 10px; width: 275px; top: -2px; right: 1%; }
+h2 input { position: absolute; top: 0px; right: 300px; }
+
+ul#tests { clear:both;width:420px;margin:0 auto;text-align:left; padding: 10px; list-style: none; }
+#tests b { background: #c7331d; color: #000; display: block; padding: 4px 0 4px 4px; margin-left: -20px; margin-bottom: 5px; font-size: 1.1em; -webkit-border-radius: 4px; -moz-border-radius: 4px; font-weight: normal; }
+#tests b.recommended { background: #58bd79; }
+#tests a:first-of-type { font-size: 1.2em; }
+#tests b a { font-weight: bold; color: #000; }
+#tests li { padding-left: 10px; padding-bottom: 5px; }
+
+#overview { position: relative; }
+#overview a { font-size: 10px; top: -29px; left: 8px; position: absolute; }
+#overview table a { position: static; }
diff --git a/testing/talos/talos/tests/dromaeo/css.manifest b/testing/talos/talos/tests/dromaeo/css.manifest
new file mode 100644
index 0000000000..cec6e2c92d
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/css.manifest
@@ -0,0 +1,6 @@
+% http://localhost/tests/dromaeo/cssquery-dojo.html
+% http://localhost/tests/dromaeo/cssquery-ext.html
+% http://localhost/tests/dromaeo/cssquery-jquery.html
+% http://localhost/tests/dromaeo/cssquery-mootools.html
+% http://localhost/tests/dromaeo/cssquery-prototype.html
+% http://localhost/tests/dromaeo/cssquery-yui.html
diff --git a/testing/talos/talos/tests/dromaeo/cssquery-dojo.html b/testing/talos/talos/tests/dromaeo/cssquery-dojo.html
new file mode 100644
index 0000000000..c3bd7759b3
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/cssquery-dojo.html
@@ -0,0 +1,60 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><!-- MOZ_INSERT_CONTENT_HOOK --><script>var limitSearch='cssquery-dojo';</script>
+ <meta http-equiv="Content-Type" content="text/html; utf-8" />
+ <title>Dromaeo: JavaScript Performance Testing</title>
+ <link href="reset.css" rel="stylesheet" type="text/css" />
+ <!--[if lt IE 7.]>
+ <link href="ie.css" rel="stylesheet" type="text/css" />
+ <script defer type="text/javascript" src="pngfix.js"></script>
+ <![endif]-->
+ <link href="application.css" rel="stylesheet" type="text/css" />
+ <script src="jquery.js"></script>
+ <script src="json.js"></script>
+ <script src="webrunner.js"></script>
+ <script src="resource://talos-powers/TalosContentProfiler.js"></script>
+</head>
+<body>
+ <div id="top" >
+ <div id="logo">
+ <a href="./"><img src="images/logo3.png" class="png"/></a>
+ </div>
+ <img src="images/dino1.png" class="dino1 png"/>
+ <img src="images/left.png" class="left png"/>
+ <img src="images/dino2.png" class="dino2 png"/>
+ <img src="images/dino2.png" class="dino2 png"/>
+ <img src="images/dino3.png" class="dino3 png"/>
+ <img src="images/dino4.png" class="dino4 png"/>
+ <img src="images/dino5.png" class="dino5 png"/>
+ <img src="images/dino7.png" class="dino7 png"/>
+ <img src="images/dino8.png" class="dino8 png"/>
+ <img src="images/dino6.png" class="dino6 png"/>
+ <img src="images/clouds2.png" class="clouds2 png"/>
+ <img src="images/clouds.png" class="clouds png"/>
+ <img src="images/clouds2.png" class="clouds3 png"/>
+ <img src="images/clouds.png" class="clouds4 png"/>
+ <img src="images/clouds2.png" class="clouds5 png"/>
+ <img src="images/comets.png" class="right png"/>
+ </div>
+ <div id="wrapper">
+ <div id="main">
+<div id="info"><span>Mozilla JavaScript performance test suite.</span><br/>More information about <a href="http://wiki.mozilla.org/Dromaeo">Dromaeo</a> can be found on the Mozilla wiki.</div>
+<h1 id="overview" class="test"><span>Performance Tests</span> <input type="button" id="pause" class="pause" value="Loading..."/><div class="bar"><div id="timebar" style="width:25%;"><span class="left">Est.&nbsp;Time:&nbsp;<strong id="left">0:00</strong></span></div></div><a href="./">&laquo; View All Tests</a></h1><br style="clear:both;"/>
+<ul id="tests">
+ <li><b class="recommended"><a href="?recommended">&raquo; Run Recommended Tests</a><br/>(All tests except for those testing the CSS Selector engines.)</b></li>
+ <li><b><a href="?all">&raquo; Run All Tests</a></b><br/><br/></li>
+
+ <li><b><a href="?dromaeo|sunspider|v8">&raquo; Run All JavaScript Tests</a></b></li>
+ <li><a href="?dromaeo">Dromaeo JavaScript Tests</a><br/>(Tests Strings, RegExps, Arrays, and eval.)</li>
+ <li><a href="?sunspider">SunSpider JavaScript Tests</a><br/>(From the <a href="http://www2.webkit.org/perf/sunspider-0.9/sunspider.html">WebKit team</a>. Tests Math, Bitops, Looping, and Functions.)</li>
+ <li><a href="?v8">V8 JavaScript Tests</a><br/>(From the <a href="http://code.google.com/apis/v8/benchmarks.html">V8 team</a>. Tests Functions, Strings, and Objects.)<br/><br/></li>
+
+ <li><b><a href="?dom|jslib|cssquery">&raquo; Run All DOM Tests</a></b></li>
+ <li><a href="?dom">DOM Core Tests</a><br/>(Tests DOM Querying, Traversing, Manipulation, and Atributes.)</li>
+ <li><a href="?jslib">JavaScript Library Tests</a><br/>(Tests DOM functionality in jQuery and Prototype.)</li>
+ <li><a href="?cssquery">CSS Selector Tests</a><br/>(From the <a href="http://code.google.com/p/slickspeed/">MooTools team</a>. Tests jQuery, Prototype, Dojo, MooTools, YUI, and ExtJS.)</li>
+</ul>
+</div>
+</div>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/cssquery-ext.html b/testing/talos/talos/tests/dromaeo/cssquery-ext.html
new file mode 100644
index 0000000000..05ca76f49b
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/cssquery-ext.html
@@ -0,0 +1,60 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><!-- MOZ_INSERT_CONTENT_HOOK --><script>var limitSearch='cssquery-ext';</script>
+ <meta http-equiv="Content-Type" content="text/html; utf-8" />
+ <title>Dromaeo: JavaScript Performance Testing</title>
+ <link href="reset.css" rel="stylesheet" type="text/css" />
+ <!--[if lt IE 7.]>
+ <link href="ie.css" rel="stylesheet" type="text/css" />
+ <script defer type="text/javascript" src="pngfix.js"></script>
+ <![endif]-->
+ <link href="application.css" rel="stylesheet" type="text/css" />
+ <script src="jquery.js"></script>
+ <script src="json.js"></script>
+ <script src="webrunner.js"></script>
+ <script src="resource://talos-powers/TalosContentProfiler.js"></script>
+</head>
+<body>
+ <div id="top" >
+ <div id="logo">
+ <a href="./"><img src="images/logo3.png" class="png"/></a>
+ </div>
+ <img src="images/dino1.png" class="dino1 png"/>
+ <img src="images/left.png" class="left png"/>
+ <img src="images/dino2.png" class="dino2 png"/>
+ <img src="images/dino2.png" class="dino2 png"/>
+ <img src="images/dino3.png" class="dino3 png"/>
+ <img src="images/dino4.png" class="dino4 png"/>
+ <img src="images/dino5.png" class="dino5 png"/>
+ <img src="images/dino7.png" class="dino7 png"/>
+ <img src="images/dino8.png" class="dino8 png"/>
+ <img src="images/dino6.png" class="dino6 png"/>
+ <img src="images/clouds2.png" class="clouds2 png"/>
+ <img src="images/clouds.png" class="clouds png"/>
+ <img src="images/clouds2.png" class="clouds3 png"/>
+ <img src="images/clouds.png" class="clouds4 png"/>
+ <img src="images/clouds2.png" class="clouds5 png"/>
+ <img src="images/comets.png" class="right png"/>
+ </div>
+ <div id="wrapper">
+ <div id="main">
+<div id="info"><span>Mozilla JavaScript performance test suite.</span><br/>More information about <a href="http://wiki.mozilla.org/Dromaeo">Dromaeo</a> can be found on the Mozilla wiki.</div>
+<h1 id="overview" class="test"><span>Performance Tests</span> <input type="button" id="pause" class="pause" value="Loading..."/><div class="bar"><div id="timebar" style="width:25%;"><span class="left">Est.&nbsp;Time:&nbsp;<strong id="left">0:00</strong></span></div></div><a href="./">&laquo; View All Tests</a></h1><br style="clear:both;"/>
+<ul id="tests">
+ <li><b class="recommended"><a href="?recommended">&raquo; Run Recommended Tests</a><br/>(All tests except for those testing the CSS Selector engines.)</b></li>
+ <li><b><a href="?all">&raquo; Run All Tests</a></b><br/><br/></li>
+
+ <li><b><a href="?dromaeo|sunspider|v8">&raquo; Run All JavaScript Tests</a></b></li>
+ <li><a href="?dromaeo">Dromaeo JavaScript Tests</a><br/>(Tests Strings, RegExps, Arrays, and eval.)</li>
+ <li><a href="?sunspider">SunSpider JavaScript Tests</a><br/>(From the <a href="http://www2.webkit.org/perf/sunspider-0.9/sunspider.html">WebKit team</a>. Tests Math, Bitops, Looping, and Functions.)</li>
+ <li><a href="?v8">V8 JavaScript Tests</a><br/>(From the <a href="http://code.google.com/apis/v8/benchmarks.html">V8 team</a>. Tests Functions, Strings, and Objects.)<br/><br/></li>
+
+ <li><b><a href="?dom|jslib|cssquery">&raquo; Run All DOM Tests</a></b></li>
+ <li><a href="?dom">DOM Core Tests</a><br/>(Tests DOM Querying, Traversing, Manipulation, and Atributes.)</li>
+ <li><a href="?jslib">JavaScript Library Tests</a><br/>(Tests DOM functionality in jQuery and Prototype.)</li>
+ <li><a href="?cssquery">CSS Selector Tests</a><br/>(From the <a href="http://code.google.com/p/slickspeed/">MooTools team</a>. Tests jQuery, Prototype, Dojo, MooTools, YUI, and ExtJS.)</li>
+</ul>
+</div>
+</div>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/cssquery-jquery.html b/testing/talos/talos/tests/dromaeo/cssquery-jquery.html
new file mode 100644
index 0000000000..3d4c327f74
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/cssquery-jquery.html
@@ -0,0 +1,60 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><!-- MOZ_INSERT_CONTENT_HOOK --><script>var limitSearch='cssquery-jquery';</script>
+ <meta http-equiv="Content-Type" content="text/html; utf-8" />
+ <title>Dromaeo: JavaScript Performance Testing</title>
+ <link href="reset.css" rel="stylesheet" type="text/css" />
+ <!--[if lt IE 7.]>
+ <link href="ie.css" rel="stylesheet" type="text/css" />
+ <script defer type="text/javascript" src="pngfix.js"></script>
+ <![endif]-->
+ <link href="application.css" rel="stylesheet" type="text/css" />
+ <script src="jquery.js"></script>
+ <script src="json.js"></script>
+ <script src="webrunner.js"></script>
+ <script src="resource://talos-powers/TalosContentProfiler.js"></script>
+</head>
+<body>
+ <div id="top" >
+ <div id="logo">
+ <a href="./"><img src="images/logo3.png" class="png"/></a>
+ </div>
+ <img src="images/dino1.png" class="dino1 png"/>
+ <img src="images/left.png" class="left png"/>
+ <img src="images/dino2.png" class="dino2 png"/>
+ <img src="images/dino2.png" class="dino2 png"/>
+ <img src="images/dino3.png" class="dino3 png"/>
+ <img src="images/dino4.png" class="dino4 png"/>
+ <img src="images/dino5.png" class="dino5 png"/>
+ <img src="images/dino7.png" class="dino7 png"/>
+ <img src="images/dino8.png" class="dino8 png"/>
+ <img src="images/dino6.png" class="dino6 png"/>
+ <img src="images/clouds2.png" class="clouds2 png"/>
+ <img src="images/clouds.png" class="clouds png"/>
+ <img src="images/clouds2.png" class="clouds3 png"/>
+ <img src="images/clouds.png" class="clouds4 png"/>
+ <img src="images/clouds2.png" class="clouds5 png"/>
+ <img src="images/comets.png" class="right png"/>
+ </div>
+ <div id="wrapper">
+ <div id="main">
+<div id="info"><span>Mozilla JavaScript performance test suite.</span><br/>More information about <a href="http://wiki.mozilla.org/Dromaeo">Dromaeo</a> can be found on the Mozilla wiki.</div>
+<h1 id="overview" class="test"><span>Performance Tests</span> <input type="button" id="pause" class="pause" value="Loading..."/><div class="bar"><div id="timebar" style="width:25%;"><span class="left">Est.&nbsp;Time:&nbsp;<strong id="left">0:00</strong></span></div></div><a href="./">&laquo; View All Tests</a></h1><br style="clear:both;"/>
+<ul id="tests">
+ <li><b class="recommended"><a href="?recommended">&raquo; Run Recommended Tests</a><br/>(All tests except for those testing the CSS Selector engines.)</b></li>
+ <li><b><a href="?all">&raquo; Run All Tests</a></b><br/><br/></li>
+
+ <li><b><a href="?dromaeo|sunspider|v8">&raquo; Run All JavaScript Tests</a></b></li>
+ <li><a href="?dromaeo">Dromaeo JavaScript Tests</a><br/>(Tests Strings, RegExps, Arrays, and eval.)</li>
+ <li><a href="?sunspider">SunSpider JavaScript Tests</a><br/>(From the <a href="http://www2.webkit.org/perf/sunspider-0.9/sunspider.html">WebKit team</a>. Tests Math, Bitops, Looping, and Functions.)</li>
+ <li><a href="?v8">V8 JavaScript Tests</a><br/>(From the <a href="http://code.google.com/apis/v8/benchmarks.html">V8 team</a>. Tests Functions, Strings, and Objects.)<br/><br/></li>
+
+ <li><b><a href="?dom|jslib|cssquery">&raquo; Run All DOM Tests</a></b></li>
+ <li><a href="?dom">DOM Core Tests</a><br/>(Tests DOM Querying, Traversing, Manipulation, and Atributes.)</li>
+ <li><a href="?jslib">JavaScript Library Tests</a><br/>(Tests DOM functionality in jQuery and Prototype.)</li>
+ <li><a href="?cssquery">CSS Selector Tests</a><br/>(From the <a href="http://code.google.com/p/slickspeed/">MooTools team</a>. Tests jQuery, Prototype, Dojo, MooTools, YUI, and ExtJS.)</li>
+</ul>
+</div>
+</div>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/cssquery-mootools.html b/testing/talos/talos/tests/dromaeo/cssquery-mootools.html
new file mode 100644
index 0000000000..c71e57cb5f
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/cssquery-mootools.html
@@ -0,0 +1,60 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><!-- MOZ_INSERT_CONTENT_HOOK --><script>var limitSearch='cssquery-mootools';</script>
+ <meta http-equiv="Content-Type" content="text/html; utf-8" />
+ <title>Dromaeo: JavaScript Performance Testing</title>
+ <link href="reset.css" rel="stylesheet" type="text/css" />
+ <!--[if lt IE 7.]>
+ <link href="ie.css" rel="stylesheet" type="text/css" />
+ <script defer type="text/javascript" src="pngfix.js"></script>
+ <![endif]-->
+ <link href="application.css" rel="stylesheet" type="text/css" />
+ <script src="jquery.js"></script>
+ <script src="json.js"></script>
+ <script src="webrunner.js"></script>
+ <script src="resource://talos-powers/TalosContentProfiler.js"></script>
+</head>
+<body>
+ <div id="top" >
+ <div id="logo">
+ <a href="./"><img src="images/logo3.png" class="png"/></a>
+ </div>
+ <img src="images/dino1.png" class="dino1 png"/>
+ <img src="images/left.png" class="left png"/>
+ <img src="images/dino2.png" class="dino2 png"/>
+ <img src="images/dino2.png" class="dino2 png"/>
+ <img src="images/dino3.png" class="dino3 png"/>
+ <img src="images/dino4.png" class="dino4 png"/>
+ <img src="images/dino5.png" class="dino5 png"/>
+ <img src="images/dino7.png" class="dino7 png"/>
+ <img src="images/dino8.png" class="dino8 png"/>
+ <img src="images/dino6.png" class="dino6 png"/>
+ <img src="images/clouds2.png" class="clouds2 png"/>
+ <img src="images/clouds.png" class="clouds png"/>
+ <img src="images/clouds2.png" class="clouds3 png"/>
+ <img src="images/clouds.png" class="clouds4 png"/>
+ <img src="images/clouds2.png" class="clouds5 png"/>
+ <img src="images/comets.png" class="right png"/>
+ </div>
+ <div id="wrapper">
+ <div id="main">
+<div id="info"><span>Mozilla JavaScript performance test suite.</span><br/>More information about <a href="http://wiki.mozilla.org/Dromaeo">Dromaeo</a> can be found on the Mozilla wiki.</div>
+<h1 id="overview" class="test"><span>Performance Tests</span> <input type="button" id="pause" class="pause" value="Loading..."/><div class="bar"><div id="timebar" style="width:25%;"><span class="left">Est.&nbsp;Time:&nbsp;<strong id="left">0:00</strong></span></div></div><a href="./">&laquo; View All Tests</a></h1><br style="clear:both;"/>
+<ul id="tests">
+ <li><b class="recommended"><a href="?recommended">&raquo; Run Recommended Tests</a><br/>(All tests except for those testing the CSS Selector engines.)</b></li>
+ <li><b><a href="?all">&raquo; Run All Tests</a></b><br/><br/></li>
+
+ <li><b><a href="?dromaeo|sunspider|v8">&raquo; Run All JavaScript Tests</a></b></li>
+ <li><a href="?dromaeo">Dromaeo JavaScript Tests</a><br/>(Tests Strings, RegExps, Arrays, and eval.)</li>
+ <li><a href="?sunspider">SunSpider JavaScript Tests</a><br/>(From the <a href="http://www2.webkit.org/perf/sunspider-0.9/sunspider.html">WebKit team</a>. Tests Math, Bitops, Looping, and Functions.)</li>
+ <li><a href="?v8">V8 JavaScript Tests</a><br/>(From the <a href="http://code.google.com/apis/v8/benchmarks.html">V8 team</a>. Tests Functions, Strings, and Objects.)<br/><br/></li>
+
+ <li><b><a href="?dom|jslib|cssquery">&raquo; Run All DOM Tests</a></b></li>
+ <li><a href="?dom">DOM Core Tests</a><br/>(Tests DOM Querying, Traversing, Manipulation, and Atributes.)</li>
+ <li><a href="?jslib">JavaScript Library Tests</a><br/>(Tests DOM functionality in jQuery and Prototype.)</li>
+ <li><a href="?cssquery">CSS Selector Tests</a><br/>(From the <a href="http://code.google.com/p/slickspeed/">MooTools team</a>. Tests jQuery, Prototype, Dojo, MooTools, YUI, and ExtJS.)</li>
+</ul>
+</div>
+</div>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/cssquery-prototype.html b/testing/talos/talos/tests/dromaeo/cssquery-prototype.html
new file mode 100644
index 0000000000..a46aedf2a6
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/cssquery-prototype.html
@@ -0,0 +1,60 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><!-- MOZ_INSERT_CONTENT_HOOK --><script>var limitSearch='cssquery-prototype';</script>
+ <meta http-equiv="Content-Type" content="text/html; utf-8" />
+ <title>Dromaeo: JavaScript Performance Testing</title>
+ <link href="reset.css" rel="stylesheet" type="text/css" />
+ <!--[if lt IE 7.]>
+ <link href="ie.css" rel="stylesheet" type="text/css" />
+ <script defer type="text/javascript" src="pngfix.js"></script>
+ <![endif]-->
+ <link href="application.css" rel="stylesheet" type="text/css" />
+ <script src="jquery.js"></script>
+ <script src="json.js"></script>
+ <script src="webrunner.js"></script>
+ <script src="resource://talos-powers/TalosContentProfiler.js"></script>
+</head>
+<body>
+ <div id="top" >
+ <div id="logo">
+ <a href="./"><img src="images/logo3.png" class="png"/></a>
+ </div>
+ <img src="images/dino1.png" class="dino1 png"/>
+ <img src="images/left.png" class="left png"/>
+ <img src="images/dino2.png" class="dino2 png"/>
+ <img src="images/dino2.png" class="dino2 png"/>
+ <img src="images/dino3.png" class="dino3 png"/>
+ <img src="images/dino4.png" class="dino4 png"/>
+ <img src="images/dino5.png" class="dino5 png"/>
+ <img src="images/dino7.png" class="dino7 png"/>
+ <img src="images/dino8.png" class="dino8 png"/>
+ <img src="images/dino6.png" class="dino6 png"/>
+ <img src="images/clouds2.png" class="clouds2 png"/>
+ <img src="images/clouds.png" class="clouds png"/>
+ <img src="images/clouds2.png" class="clouds3 png"/>
+ <img src="images/clouds.png" class="clouds4 png"/>
+ <img src="images/clouds2.png" class="clouds5 png"/>
+ <img src="images/comets.png" class="right png"/>
+ </div>
+ <div id="wrapper">
+ <div id="main">
+<div id="info"><span>Mozilla JavaScript performance test suite.</span><br/>More information about <a href="http://wiki.mozilla.org/Dromaeo">Dromaeo</a> can be found on the Mozilla wiki.</div>
+<h1 id="overview" class="test"><span>Performance Tests</span> <input type="button" id="pause" class="pause" value="Loading..."/><div class="bar"><div id="timebar" style="width:25%;"><span class="left">Est.&nbsp;Time:&nbsp;<strong id="left">0:00</strong></span></div></div><a href="./">&laquo; View All Tests</a></h1><br style="clear:both;"/>
+<ul id="tests">
+ <li><b class="recommended"><a href="?recommended">&raquo; Run Recommended Tests</a><br/>(All tests except for those testing the CSS Selector engines.)</b></li>
+ <li><b><a href="?all">&raquo; Run All Tests</a></b><br/><br/></li>
+
+ <li><b><a href="?dromaeo|sunspider|v8">&raquo; Run All JavaScript Tests</a></b></li>
+ <li><a href="?dromaeo">Dromaeo JavaScript Tests</a><br/>(Tests Strings, RegExps, Arrays, and eval.)</li>
+ <li><a href="?sunspider">SunSpider JavaScript Tests</a><br/>(From the <a href="http://www2.webkit.org/perf/sunspider-0.9/sunspider.html">WebKit team</a>. Tests Math, Bitops, Looping, and Functions.)</li>
+ <li><a href="?v8">V8 JavaScript Tests</a><br/>(From the <a href="http://code.google.com/apis/v8/benchmarks.html">V8 team</a>. Tests Functions, Strings, and Objects.)<br/><br/></li>
+
+ <li><b><a href="?dom|jslib|cssquery">&raquo; Run All DOM Tests</a></b></li>
+ <li><a href="?dom">DOM Core Tests</a><br/>(Tests DOM Querying, Traversing, Manipulation, and Atributes.)</li>
+ <li><a href="?jslib">JavaScript Library Tests</a><br/>(Tests DOM functionality in jQuery and Prototype.)</li>
+ <li><a href="?cssquery">CSS Selector Tests</a><br/>(From the <a href="http://code.google.com/p/slickspeed/">MooTools team</a>. Tests jQuery, Prototype, Dojo, MooTools, YUI, and ExtJS.)</li>
+</ul>
+</div>
+</div>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/cssquery-yui.html b/testing/talos/talos/tests/dromaeo/cssquery-yui.html
new file mode 100644
index 0000000000..c40e011498
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/cssquery-yui.html
@@ -0,0 +1,60 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><!-- MOZ_INSERT_CONTENT_HOOK --><script>var limitSearch='cssquery-yui';</script>
+ <meta http-equiv="Content-Type" content="text/html; utf-8" />
+ <title>Dromaeo: JavaScript Performance Testing</title>
+ <link href="reset.css" rel="stylesheet" type="text/css" />
+ <!--[if lt IE 7.]>
+ <link href="ie.css" rel="stylesheet" type="text/css" />
+ <script defer type="text/javascript" src="pngfix.js"></script>
+ <![endif]-->
+ <link href="application.css" rel="stylesheet" type="text/css" />
+ <script src="jquery.js"></script>
+ <script src="json.js"></script>
+ <script src="webrunner.js"></script>
+ <script src="resource://talos-powers/TalosContentProfiler.js"></script>
+</head>
+<body>
+ <div id="top" >
+ <div id="logo">
+ <a href="./"><img src="images/logo3.png" class="png"/></a>
+ </div>
+ <img src="images/dino1.png" class="dino1 png"/>
+ <img src="images/left.png" class="left png"/>
+ <img src="images/dino2.png" class="dino2 png"/>
+ <img src="images/dino2.png" class="dino2 png"/>
+ <img src="images/dino3.png" class="dino3 png"/>
+ <img src="images/dino4.png" class="dino4 png"/>
+ <img src="images/dino5.png" class="dino5 png"/>
+ <img src="images/dino7.png" class="dino7 png"/>
+ <img src="images/dino8.png" class="dino8 png"/>
+ <img src="images/dino6.png" class="dino6 png"/>
+ <img src="images/clouds2.png" class="clouds2 png"/>
+ <img src="images/clouds.png" class="clouds png"/>
+ <img src="images/clouds2.png" class="clouds3 png"/>
+ <img src="images/clouds.png" class="clouds4 png"/>
+ <img src="images/clouds2.png" class="clouds5 png"/>
+ <img src="images/comets.png" class="right png"/>
+ </div>
+ <div id="wrapper">
+ <div id="main">
+<div id="info"><span>Mozilla JavaScript performance test suite.</span><br/>More information about <a href="http://wiki.mozilla.org/Dromaeo">Dromaeo</a> can be found on the Mozilla wiki.</div>
+<h1 id="overview" class="test"><span>Performance Tests</span> <input type="button" id="pause" class="pause" value="Loading..."/><div class="bar"><div id="timebar" style="width:25%;"><span class="left">Est.&nbsp;Time:&nbsp;<strong id="left">0:00</strong></span></div></div><a href="./">&laquo; View All Tests</a></h1><br style="clear:both;"/>
+<ul id="tests">
+ <li><b class="recommended"><a href="?recommended">&raquo; Run Recommended Tests</a><br/>(All tests except for those testing the CSS Selector engines.)</b></li>
+ <li><b><a href="?all">&raquo; Run All Tests</a></b><br/><br/></li>
+
+ <li><b><a href="?dromaeo|sunspider|v8">&raquo; Run All JavaScript Tests</a></b></li>
+ <li><a href="?dromaeo">Dromaeo JavaScript Tests</a><br/>(Tests Strings, RegExps, Arrays, and eval.)</li>
+ <li><a href="?sunspider">SunSpider JavaScript Tests</a><br/>(From the <a href="http://www2.webkit.org/perf/sunspider-0.9/sunspider.html">WebKit team</a>. Tests Math, Bitops, Looping, and Functions.)</li>
+ <li><a href="?v8">V8 JavaScript Tests</a><br/>(From the <a href="http://code.google.com/apis/v8/benchmarks.html">V8 team</a>. Tests Functions, Strings, and Objects.)<br/><br/></li>
+
+ <li><b><a href="?dom|jslib|cssquery">&raquo; Run All DOM Tests</a></b></li>
+ <li><a href="?dom">DOM Core Tests</a><br/>(Tests DOM Querying, Traversing, Manipulation, and Atributes.)</li>
+ <li><a href="?jslib">JavaScript Library Tests</a><br/>(Tests DOM functionality in jQuery and Prototype.)</li>
+ <li><a href="?cssquery">CSS Selector Tests</a><br/>(From the <a href="http://code.google.com/p/slickspeed/">MooTools team</a>. Tests jQuery, Prototype, Dojo, MooTools, YUI, and ExtJS.)</li>
+</ul>
+</div>
+</div>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/dom-attr.html b/testing/talos/talos/tests/dromaeo/dom-attr.html
new file mode 100644
index 0000000000..4b6e20136d
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/dom-attr.html
@@ -0,0 +1,60 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><!-- MOZ_INSERT_CONTENT_HOOK --><script>var limitSearch='dom-attr';</script>
+ <meta http-equiv="Content-Type" content="text/html; utf-8" />
+ <title>Dromaeo: JavaScript Performance Testing</title>
+ <link href="reset.css" rel="stylesheet" type="text/css" />
+ <!--[if lt IE 7.]>
+ <link href="ie.css" rel="stylesheet" type="text/css" />
+ <script defer type="text/javascript" src="pngfix.js"></script>
+ <![endif]-->
+ <link href="application.css" rel="stylesheet" type="text/css" />
+ <script src="jquery.js"></script>
+ <script src="json.js"></script>
+ <script src="webrunner.js"></script>
+ <script src="resource://talos-powers/TalosContentProfiler.js"></script>
+</head>
+<body>
+ <div id="top" >
+ <div id="logo">
+ <a href="./"><img src="images/logo3.png" class="png"/></a>
+ </div>
+ <img src="images/dino1.png" class="dino1 png"/>
+ <img src="images/left.png" class="left png"/>
+ <img src="images/dino2.png" class="dino2 png"/>
+ <img src="images/dino2.png" class="dino2 png"/>
+ <img src="images/dino3.png" class="dino3 png"/>
+ <img src="images/dino4.png" class="dino4 png"/>
+ <img src="images/dino5.png" class="dino5 png"/>
+ <img src="images/dino7.png" class="dino7 png"/>
+ <img src="images/dino8.png" class="dino8 png"/>
+ <img src="images/dino6.png" class="dino6 png"/>
+ <img src="images/clouds2.png" class="clouds2 png"/>
+ <img src="images/clouds.png" class="clouds png"/>
+ <img src="images/clouds2.png" class="clouds3 png"/>
+ <img src="images/clouds.png" class="clouds4 png"/>
+ <img src="images/clouds2.png" class="clouds5 png"/>
+ <img src="images/comets.png" class="right png"/>
+ </div>
+ <div id="wrapper">
+ <div id="main">
+<div id="info"><span>Mozilla JavaScript performance test suite.</span><br/>More information about <a href="http://wiki.mozilla.org/Dromaeo">Dromaeo</a> can be found on the Mozilla wiki.</div>
+<h1 id="overview" class="test"><span>Performance Tests</span> <input type="button" id="pause" class="pause" value="Loading..."/><div class="bar"><div id="timebar" style="width:25%;"><span class="left">Est.&nbsp;Time:&nbsp;<strong id="left">0:00</strong></span></div></div><a href="./">&laquo; View All Tests</a></h1><br style="clear:both;"/>
+<ul id="tests">
+ <li><b class="recommended"><a href="?recommended">&raquo; Run Recommended Tests</a><br/>(All tests except for those testing the CSS Selector engines.)</b></li>
+ <li><b><a href="?all">&raquo; Run All Tests</a></b><br/><br/></li>
+
+ <li><b><a href="?dromaeo|sunspider|v8">&raquo; Run All JavaScript Tests</a></b></li>
+ <li><a href="?dromaeo">Dromaeo JavaScript Tests</a><br/>(Tests Strings, RegExps, Arrays, and eval.)</li>
+ <li><a href="?sunspider">SunSpider JavaScript Tests</a><br/>(From the <a href="http://www2.webkit.org/perf/sunspider-0.9/sunspider.html">WebKit team</a>. Tests Math, Bitops, Looping, and Functions.)</li>
+ <li><a href="?v8">V8 JavaScript Tests</a><br/>(From the <a href="http://code.google.com/apis/v8/benchmarks.html">V8 team</a>. Tests Functions, Strings, and Objects.)<br/><br/></li>
+
+ <li><b><a href="?dom|jslib|cssquery">&raquo; Run All DOM Tests</a></b></li>
+ <li><a href="?dom">DOM Core Tests</a><br/>(Tests DOM Querying, Traversing, Manipulation, and Atributes.)</li>
+ <li><a href="?jslib">JavaScript Library Tests</a><br/>(Tests DOM functionality in jQuery and Prototype.)</li>
+ <li><a href="?cssquery">CSS Selector Tests</a><br/>(From the <a href="http://code.google.com/p/slickspeed/">MooTools team</a>. Tests jQuery, Prototype, Dojo, MooTools, YUI, and ExtJS.)</li>
+</ul>
+</div>
+</div>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/dom-modify.html b/testing/talos/talos/tests/dromaeo/dom-modify.html
new file mode 100644
index 0000000000..c233a7bed8
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/dom-modify.html
@@ -0,0 +1,60 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><!-- MOZ_INSERT_CONTENT_HOOK --><script>var limitSearch='dom-modify';</script>
+ <meta http-equiv="Content-Type" content="text/html; utf-8" />
+ <title>Dromaeo: JavaScript Performance Testing</title>
+ <link href="reset.css" rel="stylesheet" type="text/css" />
+ <!--[if lt IE 7.]>
+ <link href="ie.css" rel="stylesheet" type="text/css" />
+ <script defer type="text/javascript" src="pngfix.js"></script>
+ <![endif]-->
+ <link href="application.css" rel="stylesheet" type="text/css" />
+ <script src="jquery.js"></script>
+ <script src="json.js"></script>
+ <script src="webrunner.js"></script>
+ <script src="resource://talos-powers/TalosContentProfiler.js"></script>
+</head>
+<body>
+ <div id="top" >
+ <div id="logo">
+ <a href="./"><img src="images/logo3.png" class="png"/></a>
+ </div>
+ <img src="images/dino1.png" class="dino1 png"/>
+ <img src="images/left.png" class="left png"/>
+ <img src="images/dino2.png" class="dino2 png"/>
+ <img src="images/dino2.png" class="dino2 png"/>
+ <img src="images/dino3.png" class="dino3 png"/>
+ <img src="images/dino4.png" class="dino4 png"/>
+ <img src="images/dino5.png" class="dino5 png"/>
+ <img src="images/dino7.png" class="dino7 png"/>
+ <img src="images/dino8.png" class="dino8 png"/>
+ <img src="images/dino6.png" class="dino6 png"/>
+ <img src="images/clouds2.png" class="clouds2 png"/>
+ <img src="images/clouds.png" class="clouds png"/>
+ <img src="images/clouds2.png" class="clouds3 png"/>
+ <img src="images/clouds.png" class="clouds4 png"/>
+ <img src="images/clouds2.png" class="clouds5 png"/>
+ <img src="images/comets.png" class="right png"/>
+ </div>
+ <div id="wrapper">
+ <div id="main">
+<div id="info"><span>Mozilla JavaScript performance test suite.</span><br/>More information about <a href="http://wiki.mozilla.org/Dromaeo">Dromaeo</a> can be found on the Mozilla wiki.</div>
+<h1 id="overview" class="test"><span>Performance Tests</span> <input type="button" id="pause" class="pause" value="Loading..."/><div class="bar"><div id="timebar" style="width:25%;"><span class="left">Est.&nbsp;Time:&nbsp;<strong id="left">0:00</strong></span></div></div><a href="./">&laquo; View All Tests</a></h1><br style="clear:both;"/>
+<ul id="tests">
+ <li><b class="recommended"><a href="?recommended">&raquo; Run Recommended Tests</a><br/>(All tests except for those testing the CSS Selector engines.)</b></li>
+ <li><b><a href="?all">&raquo; Run All Tests</a></b><br/><br/></li>
+
+ <li><b><a href="?dromaeo|sunspider|v8">&raquo; Run All JavaScript Tests</a></b></li>
+ <li><a href="?dromaeo">Dromaeo JavaScript Tests</a><br/>(Tests Strings, RegExps, Arrays, and eval.)</li>
+ <li><a href="?sunspider">SunSpider JavaScript Tests</a><br/>(From the <a href="http://www2.webkit.org/perf/sunspider-0.9/sunspider.html">WebKit team</a>. Tests Math, Bitops, Looping, and Functions.)</li>
+ <li><a href="?v8">V8 JavaScript Tests</a><br/>(From the <a href="http://code.google.com/apis/v8/benchmarks.html">V8 team</a>. Tests Functions, Strings, and Objects.)<br/><br/></li>
+
+ <li><b><a href="?dom|jslib|cssquery">&raquo; Run All DOM Tests</a></b></li>
+ <li><a href="?dom">DOM Core Tests</a><br/>(Tests DOM Querying, Traversing, Manipulation, and Atributes.)</li>
+ <li><a href="?jslib">JavaScript Library Tests</a><br/>(Tests DOM functionality in jQuery and Prototype.)</li>
+ <li><a href="?cssquery">CSS Selector Tests</a><br/>(From the <a href="http://code.google.com/p/slickspeed/">MooTools team</a>. Tests jQuery, Prototype, Dojo, MooTools, YUI, and ExtJS.)</li>
+</ul>
+</div>
+</div>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/dom-query.html b/testing/talos/talos/tests/dromaeo/dom-query.html
new file mode 100644
index 0000000000..caa1a36497
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/dom-query.html
@@ -0,0 +1,60 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><!-- MOZ_INSERT_CONTENT_HOOK --><script>var limitSearch='dom-query';</script>
+ <meta http-equiv="Content-Type" content="text/html; utf-8" />
+ <title>Dromaeo: JavaScript Performance Testing</title>
+ <link href="reset.css" rel="stylesheet" type="text/css" />
+ <!--[if lt IE 7.]>
+ <link href="ie.css" rel="stylesheet" type="text/css" />
+ <script defer type="text/javascript" src="pngfix.js"></script>
+ <![endif]-->
+ <link href="application.css" rel="stylesheet" type="text/css" />
+ <script src="jquery.js"></script>
+ <script src="json.js"></script>
+ <script src="webrunner.js"></script>
+ <script src="resource://talos-powers/TalosContentProfiler.js"></script>
+</head>
+<body>
+ <div id="top" >
+ <div id="logo">
+ <a href="./"><img src="images/logo3.png" class="png"/></a>
+ </div>
+ <img src="images/dino1.png" class="dino1 png"/>
+ <img src="images/left.png" class="left png"/>
+ <img src="images/dino2.png" class="dino2 png"/>
+ <img src="images/dino2.png" class="dino2 png"/>
+ <img src="images/dino3.png" class="dino3 png"/>
+ <img src="images/dino4.png" class="dino4 png"/>
+ <img src="images/dino5.png" class="dino5 png"/>
+ <img src="images/dino7.png" class="dino7 png"/>
+ <img src="images/dino8.png" class="dino8 png"/>
+ <img src="images/dino6.png" class="dino6 png"/>
+ <img src="images/clouds2.png" class="clouds2 png"/>
+ <img src="images/clouds.png" class="clouds png"/>
+ <img src="images/clouds2.png" class="clouds3 png"/>
+ <img src="images/clouds.png" class="clouds4 png"/>
+ <img src="images/clouds2.png" class="clouds5 png"/>
+ <img src="images/comets.png" class="right png"/>
+ </div>
+ <div id="wrapper">
+ <div id="main">
+<div id="info"><span>Mozilla JavaScript performance test suite.</span><br/>More information about <a href="http://wiki.mozilla.org/Dromaeo">Dromaeo</a> can be found on the Mozilla wiki.</div>
+<h1 id="overview" class="test"><span>Performance Tests</span> <input type="button" id="pause" class="pause" value="Loading..."/><div class="bar"><div id="timebar" style="width:25%;"><span class="left">Est.&nbsp;Time:&nbsp;<strong id="left">0:00</strong></span></div></div><a href="./">&laquo; View All Tests</a></h1><br style="clear:both;"/>
+<ul id="tests">
+ <li><b class="recommended"><a href="?recommended">&raquo; Run Recommended Tests</a><br/>(All tests except for those testing the CSS Selector engines.)</b></li>
+ <li><b><a href="?all">&raquo; Run All Tests</a></b><br/><br/></li>
+
+ <li><b><a href="?dromaeo|sunspider|v8">&raquo; Run All JavaScript Tests</a></b></li>
+ <li><a href="?dromaeo">Dromaeo JavaScript Tests</a><br/>(Tests Strings, RegExps, Arrays, and eval.)</li>
+ <li><a href="?sunspider">SunSpider JavaScript Tests</a><br/>(From the <a href="http://www2.webkit.org/perf/sunspider-0.9/sunspider.html">WebKit team</a>. Tests Math, Bitops, Looping, and Functions.)</li>
+ <li><a href="?v8">V8 JavaScript Tests</a><br/>(From the <a href="http://code.google.com/apis/v8/benchmarks.html">V8 team</a>. Tests Functions, Strings, and Objects.)<br/><br/></li>
+
+ <li><b><a href="?dom|jslib|cssquery">&raquo; Run All DOM Tests</a></b></li>
+ <li><a href="?dom">DOM Core Tests</a><br/>(Tests DOM Querying, Traversing, Manipulation, and Atributes.)</li>
+ <li><a href="?jslib">JavaScript Library Tests</a><br/>(Tests DOM functionality in jQuery and Prototype.)</li>
+ <li><a href="?cssquery">CSS Selector Tests</a><br/>(From the <a href="http://code.google.com/p/slickspeed/">MooTools team</a>. Tests jQuery, Prototype, Dojo, MooTools, YUI, and ExtJS.)</li>
+</ul>
+</div>
+</div>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/dom-traverse.html b/testing/talos/talos/tests/dromaeo/dom-traverse.html
new file mode 100644
index 0000000000..a757ee5fc3
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/dom-traverse.html
@@ -0,0 +1,60 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><!-- MOZ_INSERT_CONTENT_HOOK --><script>var limitSearch='dom-traverse';</script>
+ <meta http-equiv="Content-Type" content="text/html; utf-8" />
+ <title>Dromaeo: JavaScript Performance Testing</title>
+ <link href="reset.css" rel="stylesheet" type="text/css" />
+ <!--[if lt IE 7.]>
+ <link href="ie.css" rel="stylesheet" type="text/css" />
+ <script defer type="text/javascript" src="pngfix.js"></script>
+ <![endif]-->
+ <link href="application.css" rel="stylesheet" type="text/css" />
+ <script src="jquery.js"></script>
+ <script src="json.js"></script>
+ <script src="webrunner.js"></script>
+ <script src="resource://talos-powers/TalosContentProfiler.js"></script>
+</head>
+<body>
+ <div id="top" >
+ <div id="logo">
+ <a href="./"><img src="images/logo3.png" class="png"/></a>
+ </div>
+ <img src="images/dino1.png" class="dino1 png"/>
+ <img src="images/left.png" class="left png"/>
+ <img src="images/dino2.png" class="dino2 png"/>
+ <img src="images/dino2.png" class="dino2 png"/>
+ <img src="images/dino3.png" class="dino3 png"/>
+ <img src="images/dino4.png" class="dino4 png"/>
+ <img src="images/dino5.png" class="dino5 png"/>
+ <img src="images/dino7.png" class="dino7 png"/>
+ <img src="images/dino8.png" class="dino8 png"/>
+ <img src="images/dino6.png" class="dino6 png"/>
+ <img src="images/clouds2.png" class="clouds2 png"/>
+ <img src="images/clouds.png" class="clouds png"/>
+ <img src="images/clouds2.png" class="clouds3 png"/>
+ <img src="images/clouds.png" class="clouds4 png"/>
+ <img src="images/clouds2.png" class="clouds5 png"/>
+ <img src="images/comets.png" class="right png"/>
+ </div>
+ <div id="wrapper">
+ <div id="main">
+<div id="info"><span>Mozilla JavaScript performance test suite.</span><br/>More information about <a href="http://wiki.mozilla.org/Dromaeo">Dromaeo</a> can be found on the Mozilla wiki.</div>
+<h1 id="overview" class="test"><span>Performance Tests</span> <input type="button" id="pause" class="pause" value="Loading..."/><div class="bar"><div id="timebar" style="width:25%;"><span class="left">Est.&nbsp;Time:&nbsp;<strong id="left">0:00</strong></span></div></div><a href="./">&laquo; View All Tests</a></h1><br style="clear:both;"/>
+<ul id="tests">
+ <li><b class="recommended"><a href="?recommended">&raquo; Run Recommended Tests</a><br/>(All tests except for those testing the CSS Selector engines.)</b></li>
+ <li><b><a href="?all">&raquo; Run All Tests</a></b><br/><br/></li>
+
+ <li><b><a href="?dromaeo|sunspider|v8">&raquo; Run All JavaScript Tests</a></b></li>
+ <li><a href="?dromaeo">Dromaeo JavaScript Tests</a><br/>(Tests Strings, RegExps, Arrays, and eval.)</li>
+ <li><a href="?sunspider">SunSpider JavaScript Tests</a><br/>(From the <a href="http://www2.webkit.org/perf/sunspider-0.9/sunspider.html">WebKit team</a>. Tests Math, Bitops, Looping, and Functions.)</li>
+ <li><a href="?v8">V8 JavaScript Tests</a><br/>(From the <a href="http://code.google.com/apis/v8/benchmarks.html">V8 team</a>. Tests Functions, Strings, and Objects.)<br/><br/></li>
+
+ <li><b><a href="?dom|jslib|cssquery">&raquo; Run All DOM Tests</a></b></li>
+ <li><a href="?dom">DOM Core Tests</a><br/>(Tests DOM Querying, Traversing, Manipulation, and Atributes.)</li>
+ <li><a href="?jslib">JavaScript Library Tests</a><br/>(Tests DOM functionality in jQuery and Prototype.)</li>
+ <li><a href="?cssquery">CSS Selector Tests</a><br/>(From the <a href="http://code.google.com/p/slickspeed/">MooTools team</a>. Tests jQuery, Prototype, Dojo, MooTools, YUI, and ExtJS.)</li>
+</ul>
+</div>
+</div>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/dom.manifest b/testing/talos/talos/tests/dromaeo/dom.manifest
new file mode 100644
index 0000000000..92b2a0db80
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/dom.manifest
@@ -0,0 +1,4 @@
+% http://localhost/tests/dromaeo/dom-attr.html
+% http://localhost/tests/dromaeo/dom-modify.html
+% http://localhost/tests/dromaeo/dom-query.html
+% http://localhost/tests/dromaeo/dom-traverse.html
diff --git a/testing/talos/talos/tests/dromaeo/favicon.ico b/testing/talos/talos/tests/dromaeo/favicon.ico
new file mode 100644
index 0000000000..d44438903b
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/favicon.ico
Binary files differ
diff --git a/testing/talos/talos/tests/dromaeo/favicon.png b/testing/talos/talos/tests/dromaeo/favicon.png
new file mode 100644
index 0000000000..d772102a9e
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/favicon.png
Binary files differ
diff --git a/testing/talos/talos/tests/dromaeo/htmlrunner.js b/testing/talos/talos/tests/dromaeo/htmlrunner.js
new file mode 100644
index 0000000000..1365792c3a
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/htmlrunner.js
@@ -0,0 +1,4 @@
+var startTest = top.startTest || function(){};
+var test = top.test || function(name, fn){ fn(); };
+var endTest = top.endTest || function(){};
+var prep = top.prep || function(fn){ fn(); };
diff --git a/testing/talos/talos/tests/dromaeo/ie.css b/testing/talos/talos/tests/dromaeo/ie.css
new file mode 100644
index 0000000000..aca3787016
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/ie.css
@@ -0,0 +1,30 @@
+/* --------------------------------------------------------------
+
+ ie.css
+
+ Contains every hack for Internet Explorer versions prior
+ to IE7, so that our core files stay sweet and nimble.
+
+-------------------------------------------------------------- */
+
+/* Make sure the layout is centered in IE5 */
+body { text-align: center; }
+.container { text-align: left; }
+
+
+/* This fixes the problem where IE6 adds an extra 3px margin to
+ two columns that are floated up against each other. */
+
+* html .column { overflow-x: hidden; } /* IE6 fix */
+
+.pull-1, .pull-2, .pull-3, .pull-4,
+.push-1, .push-2, .push-3, .push-4,
+ul, ol {
+ position: relative; /* Keeps IE6 from cutting pulled/pushed images */
+}
+
+/* Fixes incorrect styling of legend in IE6 fieldsets. */
+legend { margin-bottom:1.4em; }
+
+/* Fixes incorrect placement of numbers in ol's in IE6/7 */
+ol { margin-left:2em; } \ No newline at end of file
diff --git a/testing/talos/talos/tests/dromaeo/images/bg.png b/testing/talos/talos/tests/dromaeo/images/bg.png
new file mode 100644
index 0000000000..bd659a8f92
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/images/bg.png
Binary files differ
diff --git a/testing/talos/talos/tests/dromaeo/images/clouds.png b/testing/talos/talos/tests/dromaeo/images/clouds.png
new file mode 100644
index 0000000000..c9f7dc2777
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/images/clouds.png
Binary files differ
diff --git a/testing/talos/talos/tests/dromaeo/images/clouds2.png b/testing/talos/talos/tests/dromaeo/images/clouds2.png
new file mode 100644
index 0000000000..ac835dcfe6
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/images/clouds2.png
Binary files differ
diff --git a/testing/talos/talos/tests/dromaeo/images/comets.png b/testing/talos/talos/tests/dromaeo/images/comets.png
new file mode 100644
index 0000000000..37dd962a3c
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/images/comets.png
Binary files differ
diff --git a/testing/talos/talos/tests/dromaeo/images/dino1.png b/testing/talos/talos/tests/dromaeo/images/dino1.png
new file mode 100644
index 0000000000..2dda272224
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/images/dino1.png
Binary files differ
diff --git a/testing/talos/talos/tests/dromaeo/images/dino2.png b/testing/talos/talos/tests/dromaeo/images/dino2.png
new file mode 100644
index 0000000000..ccfa15c0c8
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/images/dino2.png
Binary files differ
diff --git a/testing/talos/talos/tests/dromaeo/images/dino3.png b/testing/talos/talos/tests/dromaeo/images/dino3.png
new file mode 100644
index 0000000000..a766b28e29
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/images/dino3.png
Binary files differ
diff --git a/testing/talos/talos/tests/dromaeo/images/dino4.png b/testing/talos/talos/tests/dromaeo/images/dino4.png
new file mode 100644
index 0000000000..03301d37f5
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/images/dino4.png
Binary files differ
diff --git a/testing/talos/talos/tests/dromaeo/images/dino5.png b/testing/talos/talos/tests/dromaeo/images/dino5.png
new file mode 100644
index 0000000000..5fd028d348
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/images/dino5.png
Binary files differ
diff --git a/testing/talos/talos/tests/dromaeo/images/dino6.png b/testing/talos/talos/tests/dromaeo/images/dino6.png
new file mode 100644
index 0000000000..ded8106407
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/images/dino6.png
Binary files differ
diff --git a/testing/talos/talos/tests/dromaeo/images/dino7.png b/testing/talos/talos/tests/dromaeo/images/dino7.png
new file mode 100644
index 0000000000..ac2021b2ef
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/images/dino7.png
Binary files differ
diff --git a/testing/talos/talos/tests/dromaeo/images/dino8.png b/testing/talos/talos/tests/dromaeo/images/dino8.png
new file mode 100644
index 0000000000..a4b1fe401a
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/images/dino8.png
Binary files differ
diff --git a/testing/talos/talos/tests/dromaeo/images/left.png b/testing/talos/talos/tests/dromaeo/images/left.png
new file mode 100644
index 0000000000..b688f2b9b8
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/images/left.png
Binary files differ
diff --git a/testing/talos/talos/tests/dromaeo/images/logo.png b/testing/talos/talos/tests/dromaeo/images/logo.png
new file mode 100644
index 0000000000..199fda761f
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/images/logo.png
Binary files differ
diff --git a/testing/talos/talos/tests/dromaeo/images/logo2.png b/testing/talos/talos/tests/dromaeo/images/logo2.png
new file mode 100644
index 0000000000..427687f4b1
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/images/logo2.png
Binary files differ
diff --git a/testing/talos/talos/tests/dromaeo/images/logo3.png b/testing/talos/talos/tests/dromaeo/images/logo3.png
new file mode 100644
index 0000000000..306c485fec
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/images/logo3.png
Binary files differ
diff --git a/testing/talos/talos/tests/dromaeo/images/right.png b/testing/talos/talos/tests/dromaeo/images/right.png
new file mode 100644
index 0000000000..154cb411fa
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/images/right.png
Binary files differ
diff --git a/testing/talos/talos/tests/dromaeo/images/top.png b/testing/talos/talos/tests/dromaeo/images/top.png
new file mode 100644
index 0000000000..24039c345f
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/images/top.png
Binary files differ
diff --git a/testing/talos/talos/tests/dromaeo/images/water.png b/testing/talos/talos/tests/dromaeo/images/water.png
new file mode 100644
index 0000000000..40a0f0d381
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/images/water.png
Binary files differ
diff --git a/testing/talos/talos/tests/dromaeo/index.html b/testing/talos/talos/tests/dromaeo/index.html
new file mode 100644
index 0000000000..ab178d546c
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/index.html
@@ -0,0 +1,60 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; utf-8" />
+ <title>Dromaeo: JavaScript Performance Testing</title>
+ <link href="reset.css" rel="stylesheet" type="text/css" />
+ <!--[if lt IE 7.]>
+ <link href="ie.css" rel="stylesheet" type="text/css" />
+ <script defer type="text/javascript" src="pngfix.js"></script>
+ <![endif]-->
+ <link href="application.css" rel="stylesheet" type="text/css" />
+ <script src="jquery.js"></script>
+ <script src="json.js"></script>
+ <script src="webrunner.js"></script>
+ <script src="resource://talos-powers/TalosContentProfiler.js"></script>
+</head>
+<body>
+ <div id="top" >
+ <div id="logo">
+ <a href="./"><img src="images/logo3.png" class="png"/></a>
+ </div>
+ <img src="images/dino1.png" class="dino1 png"/>
+ <img src="images/left.png" class="left png"/>
+ <img src="images/dino2.png" class="dino2 png"/>
+ <img src="images/dino2.png" class="dino2 png"/>
+ <img src="images/dino3.png" class="dino3 png"/>
+ <img src="images/dino4.png" class="dino4 png"/>
+ <img src="images/dino5.png" class="dino5 png"/>
+ <img src="images/dino7.png" class="dino7 png"/>
+ <img src="images/dino8.png" class="dino8 png"/>
+ <img src="images/dino6.png" class="dino6 png"/>
+ <img src="images/clouds2.png" class="clouds2 png"/>
+ <img src="images/clouds.png" class="clouds png"/>
+ <img src="images/clouds2.png" class="clouds3 png"/>
+ <img src="images/clouds.png" class="clouds4 png"/>
+ <img src="images/clouds2.png" class="clouds5 png"/>
+ <img src="images/comets.png" class="right png"/>
+ </div>
+ <div id="wrapper">
+ <div id="main">
+<div id="info"><span>Mozilla JavaScript performance test suite.</span><br/>More information about <a href="http://wiki.mozilla.org/Dromaeo">Dromaeo</a> can be found on the Mozilla wiki.</div>
+<h1 id="overview" class="test"><span>Performance Tests</span> <input type="button" id="pause" class="pause" value="Loading..."/><div class="bar"><div id="timebar" style="width:25%;"><span class="left">Est.&nbsp;Time:&nbsp;<strong id="left">0:00</strong></span></div></div><a href="./">&laquo; View All Tests</a></h1><br style="clear:both;"/>
+<ul id="tests">
+ <li><b class="recommended"><a href="?recommended">&raquo; Run Recommended Tests</a><br/>(All tests except for those testing the CSS Selector engines.)</b></li>
+ <li><b><a href="?all">&raquo; Run All Tests</a></b><br/><br/></li>
+
+ <li><b><a href="?dromaeo|sunspider|v8">&raquo; Run All JavaScript Tests</a></b></li>
+ <li><a href="?dromaeo">Dromaeo JavaScript Tests</a><br/>(Tests Strings, RegExps, Arrays, and eval.)</li>
+ <li><a href="?sunspider">SunSpider JavaScript Tests</a><br/>(From the <a href="http://www2.webkit.org/perf/sunspider-0.9/sunspider.html">WebKit team</a>. Tests Math, Bitops, Looping, and Functions.)</li>
+ <li><a href="?v8">V8 JavaScript Tests</a><br/>(From the <a href="http://code.google.com/apis/v8/benchmarks.html">V8 team</a>. Tests Functions, Strings, and Objects.)<br/><br/></li>
+
+ <li><b><a href="?dom|jslib|cssquery">&raquo; Run All DOM Tests</a></b></li>
+ <li><a href="?dom">DOM Core Tests</a><br/>(Tests DOM Querying, Traversing, Manipulation, and Atributes.)</li>
+ <li><a href="?jslib">JavaScript Library Tests</a><br/>(Tests DOM functionality in jQuery and Prototype.)</li>
+ <li><a href="?cssquery">CSS Selector Tests</a><br/>(From the <a href="http://code.google.com/p/slickspeed/">MooTools team</a>. Tests jQuery, Prototype, Dojo, MooTools, YUI, and ExtJS.)</li>
+</ul>
+</div>
+</div>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/jquery.js b/testing/talos/talos/tests/dromaeo/jquery.js
new file mode 100644
index 0000000000..891b5c2a4c
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/jquery.js
@@ -0,0 +1,3408 @@
+(function(){
+/*
+ * jQuery 1.2.3 - New Wave Javascript
+ *
+ * Copyright (c) 2008 John Resig (jquery.com)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * $Date$
+ * $Rev: 4663 $
+ */
+
+// Map over jQuery in case of overwrite
+if ( window.jQuery )
+ var _jQuery = window.jQuery;
+
+var jQuery = window.jQuery = function( selector, context ) {
+ // The jQuery object is actually just the init constructor 'enhanced'
+ return new jQuery.prototype.init( selector, context );
+};
+
+// Map over the $ in case of overwrite
+if ( window.$ )
+ var _$ = window.$;
+
+// Map the jQuery namespace to the '$' one
+window.$ = jQuery;
+
+// A simple way to check for HTML strings or ID strings
+// (both of which we optimize for)
+var quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/;
+
+// Is it a simple selector
+var isSimple = /^.[^:#\[\.]*$/;
+
+jQuery.fn = jQuery.prototype = {
+ init: function( selector, context ) {
+ // Make sure that a selection was provided
+ selector = selector || document;
+
+ // Handle $(DOMElement)
+ if ( selector.nodeType ) {
+ this[0] = selector;
+ this.length = 1;
+ return this;
+
+ // Handle HTML strings
+ } else if ( typeof selector == "string" ) {
+ // Are we dealing with HTML string or an ID?
+ var match = quickExpr.exec( selector );
+
+ // Verify a match, and that no context was specified for #id
+ if ( match && (match[1] || !context) ) {
+
+ // HANDLE: $(html) -> $(array)
+ if ( match[1] )
+ selector = jQuery.clean( [ match[1] ], context );
+
+ // HANDLE: $("#id")
+ else {
+ var elem = document.getElementById( match[3] );
+
+ // Make sure an element was located
+ if ( elem )
+ // Handle the case where IE and Opera return items
+ // by name instead of ID
+ if ( elem.id != match[3] )
+ return jQuery().find( selector );
+
+ // Otherwise, we inject the element directly into the jQuery object
+ else {
+ this[0] = elem;
+ this.length = 1;
+ return this;
+ }
+
+ else
+ selector = [];
+ }
+
+ // HANDLE: $(expr, [context])
+ // (which is just equivalent to: $(content).find(expr)
+ } else
+ return new jQuery( context ).find( selector );
+
+ // HANDLE: $(function)
+ // Shortcut for document ready
+ } else if ( jQuery.isFunction( selector ) )
+ return new jQuery( document )[ jQuery.fn.ready ? "ready" : "load" ]( selector );
+
+ return this.setArray(
+ // HANDLE: $(array)
+ selector.constructor == Array && selector ||
+
+ // HANDLE: $(arraylike)
+ // Watch for when an array-like object, contains DOM nodes, is passed in as the selector
+ (selector.jquery || selector.length && selector != window && !selector.nodeType && selector[0] != undefined && selector[0].nodeType) && jQuery.makeArray( selector ) ||
+
+ // HANDLE: $(*)
+ [ selector ] );
+ },
+
+ // The current version of jQuery being used
+ jquery: "1.2.3",
+
+ // The number of elements contained in the matched element set
+ size: function() {
+ return this.length;
+ },
+
+ // The number of elements contained in the matched element set
+ length: 0,
+
+ // Get the Nth element in the matched element set OR
+ // Get the whole matched element set as a clean array
+ get: function( num ) {
+ return num == undefined ?
+
+ // Return a 'clean' array
+ jQuery.makeArray( this ) :
+
+ // Return just the object
+ this[ num ];
+ },
+
+ // Take an array of elements and push it onto the stack
+ // (returning the new matched element set)
+ pushStack: function( elems ) {
+ // Build a new jQuery matched element set
+ var ret = jQuery( elems );
+
+ // Add the old object onto the stack (as a reference)
+ ret.prevObject = this;
+
+ // Return the newly-formed element set
+ return ret;
+ },
+
+ // Force the current matched set of elements to become
+ // the specified array of elements (destroying the stack in the process)
+ // You should use pushStack() in order to do this, but maintain the stack
+ setArray: function( elems ) {
+ // Resetting the length to 0, then using the native Array push
+ // is a super-fast way to populate an object with array-like properties
+ this.length = 0;
+ Array.prototype.push.apply( this, elems );
+
+ return this;
+ },
+
+ // Execute a callback for every element in the matched set.
+ // (You can seed the arguments with an array of args, but this is
+ // only used internally.)
+ each: function( callback, args ) {
+ return jQuery.each( this, callback, args );
+ },
+
+ // Determine the position of an element within
+ // the matched set of elements
+ index: function( elem ) {
+ var ret = -1;
+
+ // Locate the position of the desired element
+ this.each(function(i){
+ if ( this == elem )
+ ret = i;
+ });
+
+ return ret;
+ },
+
+ attr: function( name, value, type ) {
+ var options = name;
+
+ // Look for the case where we're accessing a style value
+ if ( name.constructor == String )
+ if ( value == undefined )
+ return this.length && jQuery[ type || "attr" ]( this[0], name ) || undefined;
+
+ else {
+ options = {};
+ options[ name ] = value;
+ }
+
+ // Check to see if we're setting style values
+ return this.each(function(i){
+ // Set all the styles
+ for ( name in options )
+ jQuery.attr(
+ type ?
+ this.style :
+ this,
+ name, jQuery.prop( this, options[ name ], type, i, name )
+ );
+ });
+ },
+
+ css: function( key, value ) {
+ // ignore negative width and height values
+ if ( (key == 'width' || key == 'height') && parseFloat(value) < 0 )
+ value = undefined;
+ return this.attr( key, value, "curCSS" );
+ },
+
+ text: function( text ) {
+ if ( typeof text != "object" && text != null )
+ return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
+
+ var ret = "";
+
+ jQuery.each( text || this, function(){
+ jQuery.each( this.childNodes, function(){
+ if ( this.nodeType != 8 )
+ ret += this.nodeType != 1 ?
+ this.nodeValue :
+ jQuery.fn.text( [ this ] );
+ });
+ });
+
+ return ret;
+ },
+
+ wrapAll: function( html ) {
+ if ( this[0] )
+ // The elements to wrap the target around
+ jQuery( html, this[0].ownerDocument )
+ .clone()
+ .insertBefore( this[0] )
+ .map(function(){
+ var elem = this;
+
+ while ( elem.firstChild )
+ elem = elem.firstChild;
+
+ return elem;
+ })
+ .append(this);
+
+ return this;
+ },
+
+ wrapInner: function( html ) {
+ return this.each(function(){
+ jQuery( this ).contents().wrapAll( html );
+ });
+ },
+
+ wrap: function( html ) {
+ return this.each(function(){
+ jQuery( this ).wrapAll( html );
+ });
+ },
+
+ append: function() {
+ return this.domManip(arguments, true, false, function(elem){
+ if (this.nodeType == 1)
+ this.appendChild( elem );
+ });
+ },
+
+ prepend: function() {
+ return this.domManip(arguments, true, true, function(elem){
+ if (this.nodeType == 1)
+ this.insertBefore( elem, this.firstChild );
+ });
+ },
+
+ before: function() {
+ return this.domManip(arguments, false, false, function(elem){
+ this.parentNode.insertBefore( elem, this );
+ });
+ },
+
+ after: function() {
+ return this.domManip(arguments, false, true, function(elem){
+ this.parentNode.insertBefore( elem, this.nextSibling );
+ });
+ },
+
+ end: function() {
+ return this.prevObject || jQuery( [] );
+ },
+
+ find: function( selector ) {
+ var elems = jQuery.map(this, function(elem){
+ return jQuery.find( selector, elem );
+ });
+
+ return this.pushStack( /[^+>] [^+>]/.test( selector ) || selector.indexOf("..") > -1 ?
+ jQuery.unique( elems ) :
+ elems );
+ },
+
+ clone: function( events ) {
+ // Do the clone
+ var ret = this.map(function(){
+ if ( jQuery.browser.msie && !jQuery.isXMLDoc(this) ) {
+ // IE copies events bound via attachEvent when
+ // using cloneNode. Calling detachEvent on the
+ // clone will also remove the events from the orignal
+ // In order to get around this, we use innerHTML.
+ // Unfortunately, this means some modifications to
+ // attributes in IE that are actually only stored
+ // as properties will not be copied (such as the
+ // the name attribute on an input).
+ var clone = this.cloneNode(true),
+ container = document.createElement("div");
+ container.appendChild(clone);
+ return jQuery.clean([container.innerHTML])[0];
+ } else
+ return this.cloneNode(true);
+ });
+
+ // Need to set the expando to null on the cloned set if it exists
+ // removeData doesn't work here, IE removes it from the original as well
+ // this is primarily for IE but the data expando shouldn't be copied over in any browser
+ var clone = ret.find("*").andSelf().each(function(){
+ if ( this[ expando ] != undefined )
+ this[ expando ] = null;
+ });
+
+ // Copy the events from the original to the clone
+ if ( events === true )
+ this.find("*").andSelf().each(function(i){
+ if (this.nodeType == 3)
+ return;
+ var events = jQuery.data( this, "events" );
+
+ for ( var type in events )
+ for ( var handler in events[ type ] )
+ jQuery.event.add( clone[ i ], type, events[ type ][ handler ], events[ type ][ handler ].data );
+ });
+
+ // Return the cloned set
+ return ret;
+ },
+
+ filter: function( selector ) {
+ return this.pushStack(
+ jQuery.isFunction( selector ) &&
+ jQuery.grep(this, function(elem, i){
+ return selector.call( elem, i );
+ }) ||
+
+ jQuery.multiFilter( selector, this ) );
+ },
+
+ not: function( selector ) {
+ if ( selector.constructor == String )
+ // test special case where just one selector is passed in
+ if ( isSimple.test( selector ) )
+ return this.pushStack( jQuery.multiFilter( selector, this, true ) );
+ else
+ selector = jQuery.multiFilter( selector, this );
+
+ var isArrayLike = selector.length && selector[selector.length - 1] !== undefined && !selector.nodeType;
+ return this.filter(function() {
+ return isArrayLike ? jQuery.inArray( this, selector ) < 0 : this != selector;
+ });
+ },
+
+ add: function( selector ) {
+ return !selector ? this : this.pushStack( jQuery.merge(
+ this.get(),
+ selector.constructor == String ?
+ jQuery( selector ).get() :
+ selector.length != undefined && (!selector.nodeName || jQuery.nodeName(selector, "form")) ?
+ selector : [selector] ) );
+ },
+
+ is: function( selector ) {
+ return selector ?
+ jQuery.multiFilter( selector, this ).length > 0 :
+ false;
+ },
+
+ hasClass: function( selector ) {
+ return this.is( "." + selector );
+ },
+
+ val: function( value ) {
+ if ( value == undefined ) {
+
+ if ( this.length ) {
+ var elem = this[0];
+
+ // We need to handle select boxes special
+ if ( jQuery.nodeName( elem, "select" ) ) {
+ var index = elem.selectedIndex,
+ values = [],
+ options = elem.options,
+ one = elem.type == "select-one";
+
+ // Nothing was selected
+ if ( index < 0 )
+ return null;
+
+ // Loop through all the selected options
+ for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
+ var option = options[ i ];
+
+ if ( option.selected ) {
+ // Get the specifc value for the option
+ value = jQuery.browser.msie && !option.attributes.value.specified ? option.text : option.value;
+
+ // We don't need an array for one selects
+ if ( one )
+ return value;
+
+ // Multi-Selects return an array
+ values.push( value );
+ }
+ }
+
+ return values;
+
+ // Everything else, we just grab the value
+ } else
+ return (this[0].value || "").replace(/\r/g, "");
+
+ }
+
+ return undefined;
+ }
+
+ return this.each(function(){
+ if ( this.nodeType != 1 )
+ return;
+
+ if ( value.constructor == Array && /radio|checkbox/.test( this.type ) )
+ this.checked = (jQuery.inArray(this.value, value) >= 0 ||
+ jQuery.inArray(this.name, value) >= 0);
+
+ else if ( jQuery.nodeName( this, "select" ) ) {
+ var values = value.constructor == Array ?
+ value :
+ [ value ];
+
+ jQuery( "option", this ).each(function(){
+ this.selected = (jQuery.inArray( this.value, values ) >= 0 ||
+ jQuery.inArray( this.text, values ) >= 0);
+ });
+
+ if ( !values.length )
+ this.selectedIndex = -1;
+
+ } else
+ this.value = value;
+ });
+ },
+
+ html: function( value ) {
+ return value == undefined ?
+ (this.length ?
+ this[0].innerHTML :
+ null) :
+ this.empty().append( value );
+ },
+
+ replaceWith: function( value ) {
+ return this.after( value ).remove();
+ },
+
+ eq: function( i ) {
+ return this.slice( i, i + 1 );
+ },
+
+ slice: function() {
+ return this.pushStack( Array.prototype.slice.apply( this, arguments ) );
+ },
+
+ map: function( callback ) {
+ return this.pushStack( jQuery.map(this, function(elem, i){
+ return callback.call( elem, i, elem );
+ }));
+ },
+
+ andSelf: function() {
+ return this.add( this.prevObject );
+ },
+
+ data: function( key, value ){
+ var parts = key.split(".");
+ parts[1] = parts[1] ? "." + parts[1] : "";
+
+ if ( value == null ) {
+ var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
+
+ if ( data == undefined && this.length )
+ data = jQuery.data( this[0], key );
+
+ return data == null && parts[1] ?
+ this.data( parts[0] ) :
+ data;
+ } else
+ return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function(){
+ jQuery.data( this, key, value );
+ });
+ },
+
+ removeData: function( key ){
+ return this.each(function(){
+ jQuery.removeData( this, key );
+ });
+ },
+
+ domManip: function( args, table, reverse, callback ) {
+ var clone = this.length > 1, elems;
+
+ return this.each(function(){
+ if ( !elems ) {
+ elems = jQuery.clean( args, this.ownerDocument );
+
+ if ( reverse )
+ elems.reverse();
+ }
+
+ var obj = this;
+
+ if ( table && jQuery.nodeName( this, "table" ) && jQuery.nodeName( elems[0], "tr" ) )
+ obj = this.getElementsByTagName("tbody")[0] || this.appendChild( this.ownerDocument.createElement("tbody") );
+
+ var scripts = jQuery( [] );
+
+ jQuery.each(elems, function(){
+ var elem = clone ?
+ jQuery( this ).clone( true )[0] :
+ this;
+
+ // execute all scripts after the elements have been injected
+ if ( jQuery.nodeName( elem, "script" ) ) {
+ scripts = scripts.add( elem );
+ } else {
+ // Remove any inner scripts for later evaluation
+ if ( elem.nodeType == 1 )
+ scripts = scripts.add( jQuery( "script", elem ).remove() );
+
+ // Inject the elements into the document
+ callback.call( obj, elem );
+ }
+ });
+
+ scripts.each( evalScript );
+ });
+ }
+};
+
+// Give the init function the jQuery prototype for later instantiation
+jQuery.prototype.init.prototype = jQuery.prototype;
+
+function evalScript( i, elem ) {
+ if ( elem.src )
+ jQuery.ajax({
+ url: elem.src,
+ async: false,
+ dataType: "script"
+ });
+
+ else
+ jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );
+
+ if ( elem.parentNode )
+ elem.parentNode.removeChild( elem );
+}
+
+jQuery.extend = jQuery.fn.extend = function() {
+ // copy reference to target object
+ var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options;
+
+ // Handle a deep copy situation
+ if ( target.constructor == Boolean ) {
+ deep = target;
+ target = arguments[1] || {};
+ // skip the boolean and the target
+ i = 2;
+ }
+
+ // Handle case when target is a string or something (possible in deep copy)
+ if ( typeof target != "object" && typeof target != "function" )
+ target = {};
+
+ // extend jQuery itself if only one argument is passed
+ if ( length == 1 ) {
+ target = this;
+ i = 0;
+ }
+
+ for ( ; i < length; i++ )
+ // Only deal with non-null/undefined values
+ if ( (options = arguments[ i ]) != null )
+ // Extend the base object
+ for ( var name in options ) {
+ // Prevent never-ending loop
+ if ( target === options[ name ] )
+ continue;
+
+ // Recurse if we're merging object values
+ if ( deep && options[ name ] && typeof options[ name ] == "object" && target[ name ] && !options[ name ].nodeType )
+ target[ name ] = jQuery.extend( target[ name ], options[ name ] );
+
+ // Don't bring in undefined values
+ else if ( options[ name ] != undefined )
+ target[ name ] = options[ name ];
+
+ }
+
+ // Return the modified object
+ return target;
+};
+
+var expando = "jQuery" + (new Date()).getTime(), uuid = 0, windowData = {};
+
+// exclude the following css properties to add px
+var exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i;
+
+jQuery.extend({
+ noConflict: function( deep ) {
+ window.$ = _$;
+
+ if ( deep )
+ window.jQuery = _jQuery;
+
+ return jQuery;
+ },
+
+ // See test/unit/core.js for details concerning this function.
+ isFunction: function( fn ) {
+ return !!fn && typeof fn != "string" && !fn.nodeName &&
+ fn.constructor != Array && /function/i.test( fn + "" );
+ },
+
+ // check if an element is in a (or is an) XML document
+ isXMLDoc: function( elem ) {
+ return elem.documentElement && !elem.body ||
+ elem.tagName && elem.ownerDocument && !elem.ownerDocument.body;
+ },
+
+ // Evalulates a script in a global context
+ globalEval: function( data ) {
+ data = jQuery.trim( data );
+
+ if ( data ) {
+ // Inspired by code by Andrea Giammarchi
+ // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html
+ var head = document.getElementsByTagName("head")[0] || document.documentElement,
+ script = document.createElement("script");
+
+ script.type = "text/javascript";
+ if ( jQuery.browser.msie )
+ script.text = data;
+ else
+ script.appendChild( document.createTextNode( data ) );
+
+ head.appendChild( script );
+ head.removeChild( script );
+ }
+ },
+
+ nodeName: function( elem, name ) {
+ return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase();
+ },
+
+ cache: {},
+
+ data: function( elem, name, data ) {
+ elem = elem == window ?
+ windowData :
+ elem;
+
+ var id = elem[ expando ];
+
+ // Compute a unique ID for the element
+ if ( !id )
+ id = elem[ expando ] = ++uuid;
+
+ // Only generate the data cache if we're
+ // trying to access or manipulate it
+ if ( name && !jQuery.cache[ id ] )
+ jQuery.cache[ id ] = {};
+
+ // Prevent overriding the named cache with undefined values
+ if ( data != undefined )
+ jQuery.cache[ id ][ name ] = data;
+
+ // Return the named cache data, or the ID for the element
+ return name ?
+ jQuery.cache[ id ][ name ] :
+ id;
+ },
+
+ removeData: function( elem, name ) {
+ elem = elem == window ?
+ windowData :
+ elem;
+
+ var id = elem[ expando ];
+
+ // If we want to remove a specific section of the element's data
+ if ( name ) {
+ if ( jQuery.cache[ id ] ) {
+ // Remove the section of cache data
+ delete jQuery.cache[ id ][ name ];
+
+ // If we've removed all the data, remove the element's cache
+ name = "";
+
+ for ( name in jQuery.cache[ id ] )
+ break;
+
+ if ( !name )
+ jQuery.removeData( elem );
+ }
+
+ // Otherwise, we want to remove all of the element's data
+ } else {
+ // Clean up the element expando
+ try {
+ delete elem[ expando ];
+ } catch(e){
+ // IE has trouble directly removing the expando
+ // but it's ok with using removeAttribute
+ if ( elem.removeAttribute )
+ elem.removeAttribute( expando );
+ }
+
+ // Completely remove the data cache
+ delete jQuery.cache[ id ];
+ }
+ },
+
+ // args is for internal usage only
+ each: function( object, callback, args ) {
+ if ( args ) {
+ if ( object.length == undefined ) {
+ for ( var name in object )
+ if ( callback.apply( object[ name ], args ) === false )
+ break;
+ } else
+ for ( var i = 0, length = object.length; i < length; i++ )
+ if ( callback.apply( object[ i ], args ) === false )
+ break;
+
+ // A special, fast, case for the most common use of each
+ } else {
+ if ( object.length == undefined ) {
+ for ( var name in object )
+ if ( callback.call( object[ name ], name, object[ name ] ) === false )
+ break;
+ } else
+ for ( var i = 0, length = object.length, value = object[0];
+ i < length && callback.call( value, i, value ) !== false; value = object[++i] ){}
+ }
+
+ return object;
+ },
+
+ prop: function( elem, value, type, i, name ) {
+ // Handle executable functions
+ if ( jQuery.isFunction( value ) )
+ value = value.call( elem, i );
+
+ // Handle passing in a number to a CSS property
+ return value && value.constructor == Number && type == "curCSS" && !exclude.test( name ) ?
+ value + "px" :
+ value;
+ },
+
+ className: {
+ // internal only, use addClass("class")
+ add: function( elem, classNames ) {
+ jQuery.each((classNames || "").split(/\s+/), function(i, className){
+ if ( elem.nodeType == 1 && !jQuery.className.has( elem.className, className ) )
+ elem.className += (elem.className ? " " : "") + className;
+ });
+ },
+
+ // internal only, use removeClass("class")
+ remove: function( elem, classNames ) {
+ if (elem.nodeType == 1)
+ elem.className = classNames != undefined ?
+ jQuery.grep(elem.className.split(/\s+/), function(className){
+ return !jQuery.className.has( classNames, className );
+ }).join(" ") :
+ "";
+ },
+
+ // internal only, use is(".class")
+ has: function( elem, className ) {
+ return jQuery.inArray( className, (elem.className || elem).toString().split(/\s+/) ) > -1;
+ }
+ },
+
+ // A method for quickly swapping in/out CSS properties to get correct calculations
+ swap: function( elem, options, callback ) {
+ var old = {};
+ // Remember the old values, and insert the new ones
+ for ( var name in options ) {
+ old[ name ] = elem.style[ name ];
+ elem.style[ name ] = options[ name ];
+ }
+
+ callback.call( elem );
+
+ // Revert the old values
+ for ( var name in options )
+ elem.style[ name ] = old[ name ];
+ },
+
+ css: function( elem, name, force ) {
+ if ( name == "width" || name == "height" ) {
+ var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ];
+
+ function getWH() {
+ val = name == "width" ? elem.offsetWidth : elem.offsetHeight;
+ var padding = 0, border = 0;
+ jQuery.each( which, function() {
+ padding += parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0;
+ border += parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0;
+ });
+ val -= Math.round(padding + border);
+ }
+
+ if ( jQuery(elem).is(":visible") )
+ getWH();
+ else
+ jQuery.swap( elem, props, getWH );
+
+ return Math.max(0, val);
+ }
+
+ return jQuery.curCSS( elem, name, force );
+ },
+
+ curCSS: function( elem, name, force ) {
+ var ret;
+
+ // A helper method for determining if an element's values are broken
+ function color( elem ) {
+ if ( !jQuery.browser.safari )
+ return false;
+
+ var ret = document.defaultView.getComputedStyle( elem, null );
+ return !ret || ret.getPropertyValue("color") == "";
+ }
+
+ // We need to handle opacity special in IE
+ if ( name == "opacity" && jQuery.browser.msie ) {
+ ret = jQuery.attr( elem.style, "opacity" );
+
+ return ret == "" ?
+ "1" :
+ ret;
+ }
+ // Opera sometimes will give the wrong display answer, this fixes it, see #2037
+ if ( jQuery.browser.opera && name == "display" ) {
+ var save = elem.style.outline;
+ elem.style.outline = "0 solid black";
+ elem.style.outline = save;
+ }
+
+ // Make sure we're using the right name for getting the float value
+ if ( name.match( /float/i ) )
+ name = styleFloat;
+
+ if ( !force && elem.style && elem.style[ name ] )
+ ret = elem.style[ name ];
+
+ else if ( document.defaultView && document.defaultView.getComputedStyle ) {
+
+ // Only "float" is needed here
+ if ( name.match( /float/i ) )
+ name = "float";
+
+ name = name.replace( /([A-Z])/g, "-$1" ).toLowerCase();
+
+ var getComputedStyle = document.defaultView.getComputedStyle( elem, null );
+
+ if ( getComputedStyle && !color( elem ) )
+ ret = getComputedStyle.getPropertyValue( name );
+
+ // If the element isn't reporting its values properly in Safari
+ // then some display: none elements are involved
+ else {
+ var swap = [], stack = [];
+
+ // Locate all of the parent display: none elements
+ for ( var a = elem; a && color(a); a = a.parentNode )
+ stack.unshift(a);
+
+ // Go through and make them visible, but in reverse
+ // (It would be better if we knew the exact display type that they had)
+ for ( var i = 0; i < stack.length; i++ )
+ if ( color( stack[ i ] ) ) {
+ swap[ i ] = stack[ i ].style.display;
+ stack[ i ].style.display = "block";
+ }
+
+ // Since we flip the display style, we have to handle that
+ // one special, otherwise get the value
+ ret = name == "display" && swap[ stack.length - 1 ] != null ?
+ "none" :
+ ( getComputedStyle && getComputedStyle.getPropertyValue( name ) ) || "";
+
+ // Finally, revert the display styles back
+ for ( var i = 0; i < swap.length; i++ )
+ if ( swap[ i ] != null )
+ stack[ i ].style.display = swap[ i ];
+ }
+
+ // We should always get a number back from opacity
+ if ( name == "opacity" && ret == "" )
+ ret = "1";
+
+ } else if ( elem.currentStyle ) {
+ var camelCase = name.replace(/\-(\w)/g, function(all, letter){
+ return letter.toUpperCase();
+ });
+
+ ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ];
+
+ // From the awesome hack by Dean Edwards
+ // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
+
+ // If we're not dealing with a regular pixel number
+ // but a number that has a weird ending, we need to convert it to pixels
+ if ( !/^\d+(px)?$/i.test( ret ) && /^\d/.test( ret ) ) {
+ // Remember the original values
+ var style = elem.style.left, runtimeStyle = elem.runtimeStyle.left;
+
+ // Put in the new values to get a computed value out
+ elem.runtimeStyle.left = elem.currentStyle.left;
+ elem.style.left = ret || 0;
+ ret = elem.style.pixelLeft + "px";
+
+ // Revert the changed values
+ elem.style.left = style;
+ elem.runtimeStyle.left = runtimeStyle;
+ }
+ }
+
+ return ret;
+ },
+
+ clean: function( elems, context ) {
+ var ret = [];
+ context = context || document;
+ // !context.createElement fails in IE with an error but returns typeof 'object'
+ if (typeof context.createElement == 'undefined')
+ context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
+
+ jQuery.each(elems, function(i, elem){
+ if ( !elem )
+ return;
+
+ if ( elem.constructor == Number )
+ elem = elem.toString();
+
+ // Convert html string into DOM nodes
+ if ( typeof elem == "string" ) {
+ // Fix "XHTML"-style tags in all browsers
+ elem = elem.replace(/(<(\w+)[^>]*?)\/>/g, function(all, front, tag){
+ return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ?
+ all :
+ front + "></" + tag + ">";
+ });
+
+ // Trim whitespace, otherwise indexOf won't work as expected
+ var tags = jQuery.trim( elem ).toLowerCase(), div = context.createElement("div");
+
+ var wrap =
+ // option or optgroup
+ !tags.indexOf("<opt") &&
+ [ 1, "<select multiple='multiple'>", "</select>" ] ||
+
+ !tags.indexOf("<leg") &&
+ [ 1, "<fieldset>", "</fieldset>" ] ||
+
+ tags.match(/^<(thead|tbody|tfoot|colg|cap)/) &&
+ [ 1, "<table>", "</table>" ] ||
+
+ !tags.indexOf("<tr") &&
+ [ 2, "<table><tbody>", "</tbody></table>" ] ||
+
+ // <thead> matched above
+ (!tags.indexOf("<td") || !tags.indexOf("<th")) &&
+ [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ] ||
+
+ !tags.indexOf("<col") &&
+ [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ] ||
+
+ // IE can't serialize <link> and <script> tags normally
+ jQuery.browser.msie &&
+ [ 1, "div<div>", "</div>" ] ||
+
+ [ 0, "", "" ];
+
+ // Go to html and back, then peel off extra wrappers
+ div.innerHTML = wrap[1] + elem + wrap[2];
+
+ // Move to the right depth
+ while ( wrap[0]-- )
+ div = div.lastChild;
+
+ // Remove IE's autoinserted <tbody> from table fragments
+ if ( jQuery.browser.msie ) {
+
+ // String was a <table>, *may* have spurious <tbody>
+ var tbody = !tags.indexOf("<table") && tags.indexOf("<tbody") < 0 ?
+ div.firstChild && div.firstChild.childNodes :
+
+ // String was a bare <thead> or <tfoot>
+ wrap[1] == "<table>" && tags.indexOf("<tbody") < 0 ?
+ div.childNodes :
+ [];
+
+ for ( var j = tbody.length - 1; j >= 0 ; --j )
+ if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length )
+ tbody[ j ].parentNode.removeChild( tbody[ j ] );
+
+ // IE completely kills leading whitespace when innerHTML is used
+ if ( /^\s/.test( elem ) )
+ div.insertBefore( context.createTextNode( elem.match(/^\s*/)[0] ), div.firstChild );
+
+ }
+
+ elem = jQuery.makeArray( div.childNodes );
+ }
+
+ if ( elem.length === 0 && (!jQuery.nodeName( elem, "form" ) && !jQuery.nodeName( elem, "select" )) )
+ return;
+
+ if ( elem[0] == undefined || jQuery.nodeName( elem, "form" ) || elem.options )
+ ret.push( elem );
+
+ else
+ ret = jQuery.merge( ret, elem );
+
+ });
+
+ return ret;
+ },
+
+ attr: function( elem, name, value ) {
+ // don't set attributes on text and comment nodes
+ if (!elem || elem.nodeType == 3 || elem.nodeType == 8)
+ return undefined;
+
+ var fix = jQuery.isXMLDoc( elem ) ?
+ {} :
+ jQuery.props;
+
+ // Safari mis-reports the default selected property of a hidden option
+ // Accessing the parent's selectedIndex property fixes it
+ if ( name == "selected" && jQuery.browser.safari )
+ elem.parentNode.selectedIndex;
+
+ // Certain attributes only work when accessed via the old DOM 0 way
+ if ( fix[ name ] ) {
+ if ( value != undefined )
+ elem[ fix[ name ] ] = value;
+
+ return elem[ fix[ name ] ];
+
+ } else if ( jQuery.browser.msie && name == "style" )
+ return jQuery.attr( elem.style, "cssText", value );
+
+ else if ( value == undefined && jQuery.browser.msie && jQuery.nodeName( elem, "form" ) && (name == "action" || name == "method") )
+ return elem.getAttributeNode( name ).nodeValue;
+
+ // IE elem.getAttribute passes even for style
+ else if ( elem.tagName ) {
+
+ if ( value != undefined ) {
+ // We can't allow the type property to be changed (since it causes problems in IE)
+ if ( name == "type" && jQuery.nodeName( elem, "input" ) && elem.parentNode )
+ throw "type property can't be changed";
+
+ // convert the value to a string (all browsers do this but IE) see #1070
+ elem.setAttribute( name, "" + value );
+ }
+
+ if ( jQuery.browser.msie && /href|src/.test( name ) && !jQuery.isXMLDoc( elem ) )
+ return elem.getAttribute( name, 2 );
+
+ return elem.getAttribute( name );
+
+ // elem is actually elem.style ... set the style
+ } else {
+ // IE actually uses filters for opacity
+ if ( name == "opacity" && jQuery.browser.msie ) {
+ if ( value != undefined ) {
+ // IE has trouble with opacity if it does not have layout
+ // Force it by setting the zoom level
+ elem.zoom = 1;
+
+ // Set the alpha filter to set the opacity
+ elem.filter = (elem.filter || "").replace( /alpha\([^)]*\)/, "" ) +
+ (parseFloat( value ).toString() == "NaN" ? "" : "alpha(opacity=" + value * 100 + ")");
+ }
+
+ return elem.filter && elem.filter.indexOf("opacity=") >= 0 ?
+ (parseFloat( elem.filter.match(/opacity=([^)]*)/)[1] ) / 100).toString() :
+ "";
+ }
+
+ name = name.replace(/-([a-z])/ig, function(all, letter){
+ return letter.toUpperCase();
+ });
+
+ if ( value != undefined )
+ elem[ name ] = value;
+
+ return elem[ name ];
+ }
+ },
+
+ trim: function( text ) {
+ return (text || "").replace( /^\s+|\s+$/g, "" );
+ },
+
+ makeArray: function( array ) {
+ var ret = [];
+
+ // Need to use typeof to fight Safari childNodes crashes
+ if ( typeof array != "array" )
+ for ( var i = 0, length = array.length; i < length; i++ )
+ ret.push( array[ i ] );
+ else
+ ret = array.slice( 0 );
+
+ return ret;
+ },
+
+ inArray: function( elem, array ) {
+ for ( var i = 0, length = array.length; i < length; i++ )
+ if ( array[ i ] == elem )
+ return i;
+
+ return -1;
+ },
+
+ merge: function( first, second ) {
+ // We have to loop this way because IE & Opera overwrite the length
+ // expando of getElementsByTagName
+
+ // Also, we need to make sure that the correct elements are being returned
+ // (IE returns comment nodes in a '*' query)
+ if ( jQuery.browser.msie ) {
+ for ( var i = 0; second[ i ]; i++ )
+ if ( second[ i ].nodeType != 8 )
+ first.push( second[ i ] );
+
+ } else
+ for ( var i = 0; second[ i ]; i++ )
+ first.push( second[ i ] );
+
+ return first;
+ },
+
+ unique: function( array ) {
+ var ret = [], done = {};
+
+ try {
+
+ for ( var i = 0, length = array.length; i < length; i++ ) {
+ var id = jQuery.data( array[ i ] );
+
+ if ( !done[ id ] ) {
+ done[ id ] = true;
+ ret.push( array[ i ] );
+ }
+ }
+
+ } catch( e ) {
+ ret = array;
+ }
+
+ return ret;
+ },
+
+ grep: function( elems, callback, inv ) {
+ var ret = [];
+
+ // Go through the array, only saving the items
+ // that pass the validator function
+ for ( var i = 0, length = elems.length; i < length; i++ )
+ if ( !inv && callback( elems[ i ], i ) || inv && !callback( elems[ i ], i ) )
+ ret.push( elems[ i ] );
+
+ return ret;
+ },
+
+ map: function( elems, callback ) {
+ var ret = [];
+
+ // Go through the array, translating each of the items to their
+ // new value (or values).
+ for ( var i = 0, length = elems.length; i < length; i++ ) {
+ var value = callback( elems[ i ], i );
+
+ if ( value !== null && value != undefined ) {
+ if ( value.constructor != Array )
+ value = [ value ];
+
+ ret = ret.concat( value );
+ }
+ }
+
+ return ret;
+ }
+});
+
+var userAgent = navigator.userAgent.toLowerCase();
+
+// Figure out what browser is being used
+jQuery.browser = {
+ version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [])[1],
+ safari: /webkit/.test( userAgent ),
+ opera: /opera/.test( userAgent ),
+ msie: /msie/.test( userAgent ) && !/opera/.test( userAgent ),
+ mozilla: /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent )
+};
+
+var styleFloat = jQuery.browser.msie ?
+ "styleFloat" :
+ "cssFloat";
+
+jQuery.extend({
+ // Check to see if the W3C box model is being used
+ boxModel: !jQuery.browser.msie || document.compatMode == "CSS1Compat",
+
+ props: {
+ "for": "htmlFor",
+ "class": "className",
+ "float": styleFloat,
+ cssFloat: styleFloat,
+ styleFloat: styleFloat,
+ innerHTML: "innerHTML",
+ className: "className",
+ value: "value",
+ disabled: "disabled",
+ checked: "checked",
+ readonly: "readOnly",
+ selected: "selected",
+ maxlength: "maxLength",
+ selectedIndex: "selectedIndex",
+ defaultValue: "defaultValue",
+ tagName: "tagName",
+ nodeName: "nodeName"
+ }
+});
+
+jQuery.each({
+ parent: function(elem){return elem.parentNode;},
+ parents: function(elem){return jQuery.dir(elem,"parentNode");},
+ next: function(elem){return jQuery.nth(elem,2,"nextSibling");},
+ prev: function(elem){return jQuery.nth(elem,2,"previousSibling");},
+ nextAll: function(elem){return jQuery.dir(elem,"nextSibling");},
+ prevAll: function(elem){return jQuery.dir(elem,"previousSibling");},
+ siblings: function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);},
+ children: function(elem){return jQuery.sibling(elem.firstChild);},
+ contents: function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);}
+}, function(name, fn){
+ jQuery.fn[ name ] = function( selector ) {
+ var ret = jQuery.map( this, fn );
+
+ if ( selector && typeof selector == "string" )
+ ret = jQuery.multiFilter( selector, ret );
+
+ return this.pushStack( jQuery.unique( ret ) );
+ };
+});
+
+jQuery.each({
+ appendTo: "append",
+ prependTo: "prepend",
+ insertBefore: "before",
+ insertAfter: "after",
+ replaceAll: "replaceWith"
+}, function(name, original){
+ jQuery.fn[ name ] = function() {
+ var args = arguments;
+
+ return this.each(function(){
+ for ( var i = 0, length = args.length; i < length; i++ )
+ jQuery( args[ i ] )[ original ]( this );
+ });
+ };
+});
+
+jQuery.each({
+ removeAttr: function( name ) {
+ jQuery.attr( this, name, "" );
+ if (this.nodeType == 1)
+ this.removeAttribute( name );
+ },
+
+ addClass: function( classNames ) {
+ jQuery.className.add( this, classNames );
+ },
+
+ removeClass: function( classNames ) {
+ jQuery.className.remove( this, classNames );
+ },
+
+ toggleClass: function( classNames ) {
+ jQuery.className[ jQuery.className.has( this, classNames ) ? "remove" : "add" ]( this, classNames );
+ },
+
+ remove: function( selector ) {
+ if ( !selector || jQuery.filter( selector, [ this ] ).r.length ) {
+ // Prevent memory leaks
+ jQuery( "*", this ).add(this).each(function(){
+ jQuery.event.remove(this);
+ jQuery.removeData(this);
+ });
+ if (this.parentNode)
+ this.parentNode.removeChild( this );
+ }
+ },
+
+ empty: function() {
+ // Remove element nodes and prevent memory leaks
+ jQuery( ">*", this ).remove();
+
+ // Remove any remaining nodes
+ while ( this.firstChild )
+ this.removeChild( this.firstChild );
+ }
+}, function(name, fn){
+ jQuery.fn[ name ] = function(){
+ return this.each( fn, arguments );
+ };
+});
+
+jQuery.each([ "Height", "Width" ], function(i, name){
+ var type = name.toLowerCase();
+
+ jQuery.fn[ type ] = function( size ) {
+ // Get window width or height
+ return this[0] == window ?
+ // Opera reports document.body.client[Width/Height] properly in both quirks and standards
+ jQuery.browser.opera && document.body[ "client" + name ] ||
+
+ // Safari reports inner[Width/Height] just fine (Mozilla and Opera include scroll bar widths)
+ jQuery.browser.safari && window[ "inner" + name ] ||
+
+ // Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
+ document.compatMode == "CSS1Compat" && document.documentElement[ "client" + name ] || document.body[ "client" + name ] :
+
+ // Get document width or height
+ this[0] == document ?
+ // Either scroll[Width/Height] or offset[Width/Height], whichever is greater
+ Math.max(
+ Math.max(document.body["scroll" + name], document.documentElement["scroll" + name]),
+ Math.max(document.body["offset" + name], document.documentElement["offset" + name])
+ ) :
+
+ // Get or set width or height on the element
+ size == undefined ?
+ // Get width or height on the element
+ (this.length ? jQuery.css( this[0], type ) : null) :
+
+ // Set the width or height on the element (default to pixels if value is unitless)
+ this.css( type, size.constructor == String ? size : size + "px" );
+ };
+});
+
+var chars = jQuery.browser.safari && parseInt(jQuery.browser.version) < 417 ?
+ "(?:[\\w*_-]|\\\\.)" :
+ "(?:[\\w\u0128-\uFFFF*_-]|\\\\.)",
+ quickChild = new RegExp("^>\\s*(" + chars + "+)"),
+ quickID = new RegExp("^(" + chars + "+)(#)(" + chars + "+)"),
+ quickClass = new RegExp("^([#.]?)(" + chars + "*)");
+
+jQuery.extend({
+ expr: {
+ "": function(a,i,m){return m[2]=="*"||jQuery.nodeName(a,m[2]);},
+ "#": function(a,i,m){return a.getAttribute("id")==m[2];},
+ ":": {
+ // Position Checks
+ lt: function(a,i,m){return i<m[3]-0;},
+ gt: function(a,i,m){return i>m[3]-0;},
+ nth: function(a,i,m){return m[3]-0==i;},
+ eq: function(a,i,m){return m[3]-0==i;},
+ first: function(a,i){return i==0;},
+ last: function(a,i,m,r){return i==r.length-1;},
+ even: function(a,i){return i%2==0;},
+ odd: function(a,i){return i%2;},
+
+ // Child Checks
+ "first-child": function(a){return a.parentNode.getElementsByTagName("*")[0]==a;},
+ "last-child": function(a){return jQuery.nth(a.parentNode.lastChild,1,"previousSibling")==a;},
+ "only-child": function(a){return !jQuery.nth(a.parentNode.lastChild,2,"previousSibling");},
+
+ // Parent Checks
+ parent: function(a){return a.firstChild;},
+ empty: function(a){return !a.firstChild;},
+
+ // Text Check
+ contains: function(a,i,m){return (a.textContent||a.innerText||jQuery(a).text()||"").indexOf(m[3])>=0;},
+
+ // Visibility
+ visible: function(a){return "hidden"!=a.type&&jQuery.css(a,"display")!="none"&&jQuery.css(a,"visibility")!="hidden";},
+ hidden: function(a){return "hidden"==a.type||jQuery.css(a,"display")=="none"||jQuery.css(a,"visibility")=="hidden";},
+
+ // Form attributes
+ enabled: function(a){return !a.disabled;},
+ disabled: function(a){return a.disabled;},
+ checked: function(a){return a.checked;},
+ selected: function(a){return a.selected||jQuery.attr(a,"selected");},
+
+ // Form elements
+ text: function(a){return "text"==a.type;},
+ radio: function(a){return "radio"==a.type;},
+ checkbox: function(a){return "checkbox"==a.type;},
+ file: function(a){return "file"==a.type;},
+ password: function(a){return "password"==a.type;},
+ submit: function(a){return "submit"==a.type;},
+ image: function(a){return "image"==a.type;},
+ reset: function(a){return "reset"==a.type;},
+ button: function(a){return "button"==a.type||jQuery.nodeName(a,"button");},
+ input: function(a){return /input|select|textarea|button/i.test(a.nodeName);},
+
+ // :has()
+ has: function(a,i,m){return jQuery.find(m[3],a).length;},
+
+ // :header
+ header: function(a){return /h\d/i.test(a.nodeName);},
+
+ // :animated
+ animated: function(a){return jQuery.grep(jQuery.timers,function(fn){return a==fn.elem;}).length;}
+ }
+ },
+
+ // The regular expressions that power the parsing engine
+ parse: [
+ // Match: [@value='test'], [@foo]
+ /^(\[) *@?([\w-]+) *([!*$^~=]*) *('?"?)(.*?)\4 *\]/,
+
+ // Match: :contains('foo')
+ /^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/,
+
+ // Match: :even, :last-chlid, #id, .class
+ new RegExp("^([:.#]*)(" + chars + "+)")
+ ],
+
+ multiFilter: function( expr, elems, not ) {
+ var old, cur = [];
+
+ while ( expr && expr != old ) {
+ old = expr;
+ var f = jQuery.filter( expr, elems, not );
+ expr = f.t.replace(/^\s*,\s*/, "" );
+ cur = not ? elems = f.r : jQuery.merge( cur, f.r );
+ }
+
+ return cur;
+ },
+
+ find: function( t, context ) {
+ // Quickly handle non-string expressions
+ if ( typeof t != "string" )
+ return [ t ];
+
+ // check to make sure context is a DOM element or a document
+ if ( context && context.nodeType != 1 && context.nodeType != 9)
+ return [ ];
+
+ // Set the correct context (if none is provided)
+ context = context || document;
+
+ // Initialize the search
+ var ret = [context], done = [], last, nodeName;
+
+ // Continue while a selector expression exists, and while
+ // we're no longer looping upon ourselves
+ while ( t && last != t ) {
+ var r = [];
+ last = t;
+
+ t = jQuery.trim(t);
+
+ var foundToken = false;
+
+ // An attempt at speeding up child selectors that
+ // point to a specific element tag
+ var re = quickChild;
+ var m = re.exec(t);
+
+ if ( m ) {
+ nodeName = m[1].toUpperCase();
+
+ // Perform our own iteration and filter
+ for ( var i = 0; ret[i]; i++ )
+ for ( var c = ret[i].firstChild; c; c = c.nextSibling )
+ if ( c.nodeType == 1 && (nodeName == "*" || c.nodeName.toUpperCase() == nodeName) )
+ r.push( c );
+
+ ret = r;
+ t = t.replace( re, "" );
+ if ( t.indexOf(" ") == 0 ) continue;
+ foundToken = true;
+ } else {
+ re = /^([>+~])\s*(\w*)/i;
+
+ if ( (m = re.exec(t)) != null ) {
+ r = [];
+
+ var merge = {};
+ nodeName = m[2].toUpperCase();
+ m = m[1];
+
+ for ( var j = 0, rl = ret.length; j < rl; j++ ) {
+ var n = m == "~" || m == "+" ? ret[j].nextSibling : ret[j].firstChild;
+ for ( ; n; n = n.nextSibling )
+ if ( n.nodeType == 1 ) {
+ var id = jQuery.data(n);
+
+ if ( m == "~" && merge[id] ) break;
+
+ if (!nodeName || n.nodeName.toUpperCase() == nodeName ) {
+ if ( m == "~" ) merge[id] = true;
+ r.push( n );
+ }
+
+ if ( m == "+" ) break;
+ }
+ }
+
+ ret = r;
+
+ // And remove the token
+ t = jQuery.trim( t.replace( re, "" ) );
+ foundToken = true;
+ }
+ }
+
+ // See if there's still an expression, and that we haven't already
+ // matched a token
+ if ( t && !foundToken ) {
+ // Handle multiple expressions
+ if ( !t.indexOf(",") ) {
+ // Clean the result set
+ if ( context == ret[0] ) ret.shift();
+
+ // Merge the result sets
+ done = jQuery.merge( done, ret );
+
+ // Reset the context
+ r = ret = [context];
+
+ // Touch up the selector string
+ t = " " + t.substr(1,t.length);
+
+ } else {
+ // Optimize for the case nodeName#idName
+ var re2 = quickID;
+ var m = re2.exec(t);
+
+ // Re-organize the results, so that they're consistent
+ if ( m ) {
+ m = [ 0, m[2], m[3], m[1] ];
+
+ } else {
+ // Otherwise, do a traditional filter check for
+ // ID, class, and element selectors
+ re2 = quickClass;
+ m = re2.exec(t);
+ }
+
+ m[2] = m[2].replace(/\\/g, "");
+
+ var elem = ret[ret.length-1];
+
+ // Try to do a global search by ID, where we can
+ if ( m[1] == "#" && elem && elem.getElementById && !jQuery.isXMLDoc(elem) ) {
+ // Optimization for HTML document case
+ var oid = elem.getElementById(m[2]);
+
+ // Do a quick check for the existence of the actual ID attribute
+ // to avoid selecting by the name attribute in IE
+ // also check to insure id is a string to avoid selecting an element with the name of 'id' inside a form
+ if ( (jQuery.browser.msie||jQuery.browser.opera) && oid && typeof oid.id == "string" && oid.id != m[2] )
+ oid = jQuery('[@id="'+m[2]+'"]', elem)[0];
+
+ // Do a quick check for node name (where applicable) so
+ // that div#foo searches will be really fast
+ ret = r = oid && (!m[3] || jQuery.nodeName(oid, m[3])) ? [oid] : [];
+ } else {
+ // We need to find all descendant elements
+ for ( var i = 0; ret[i]; i++ ) {
+ // Grab the tag name being searched for
+ var tag = m[1] == "#" && m[3] ? m[3] : m[1] != "" || m[0] == "" ? "*" : m[2];
+
+ // Handle IE7 being really dumb about <object>s
+ if ( tag == "*" && ret[i].nodeName.toLowerCase() == "object" )
+ tag = "param";
+
+ r = jQuery.merge( r, ret[i].getElementsByTagName( tag ));
+ }
+
+ // It's faster to filter by class and be done with it
+ if ( m[1] == "." )
+ r = jQuery.classFilter( r, m[2] );
+
+ // Same with ID filtering
+ if ( m[1] == "#" ) {
+ var tmp = [];
+
+ // Try to find the element with the ID
+ for ( var i = 0; r[i]; i++ )
+ if ( r[i].getAttribute("id") == m[2] ) {
+ tmp = [ r[i] ];
+ break;
+ }
+
+ r = tmp;
+ }
+
+ ret = r;
+ }
+
+ t = t.replace( re2, "" );
+ }
+
+ }
+
+ // If a selector string still exists
+ if ( t ) {
+ // Attempt to filter it
+ var val = jQuery.filter(t,r);
+ ret = r = val.r;
+ t = jQuery.trim(val.t);
+ }
+ }
+
+ // An error occurred with the selector;
+ // just return an empty set instead
+ if ( t )
+ ret = [];
+
+ // Remove the root context
+ if ( ret && context == ret[0] )
+ ret.shift();
+
+ // And combine the results
+ done = jQuery.merge( done, ret );
+
+ return done;
+ },
+
+ classFilter: function(r,m,not){
+ m = " " + m + " ";
+ var tmp = [];
+ for ( var i = 0; r[i]; i++ ) {
+ var pass = (" " + r[i].className + " ").indexOf( m ) >= 0;
+ if ( !not && pass || not && !pass )
+ tmp.push( r[i] );
+ }
+ return tmp;
+ },
+
+ filter: function(t,r,not) {
+ var last;
+
+ // Look for common filter expressions
+ while ( t && t != last ) {
+ last = t;
+
+ var p = jQuery.parse, m;
+
+ for ( var i = 0; p[i]; i++ ) {
+ m = p[i].exec( t );
+
+ if ( m ) {
+ // Remove what we just matched
+ t = t.substring( m[0].length );
+
+ m[2] = m[2].replace(/\\/g, "");
+ break;
+ }
+ }
+
+ if ( !m )
+ break;
+
+ // :not() is a special case that can be optimized by
+ // keeping it out of the expression list
+ if ( m[1] == ":" && m[2] == "not" )
+ // optimize if only one selector found (most common case)
+ r = isSimple.test( m[3] ) ?
+ jQuery.filter(m[3], r, true).r :
+ jQuery( r ).not( m[3] );
+
+ // We can get a big speed boost by filtering by class here
+ else if ( m[1] == "." )
+ r = jQuery.classFilter(r, m[2], not);
+
+ else if ( m[1] == "[" ) {
+ var tmp = [], type = m[3];
+
+ for ( var i = 0, rl = r.length; i < rl; i++ ) {
+ var a = r[i], z = a[ jQuery.props[m[2]] || m[2] ];
+
+ if ( z == null || /href|src|selected/.test(m[2]) )
+ z = jQuery.attr(a,m[2]) || '';
+
+ if ( (type == "" && !!z ||
+ type == "=" && z == m[5] ||
+ type == "!=" && z != m[5] ||
+ type == "^=" && z && !z.indexOf(m[5]) ||
+ type == "$=" && z.substr(z.length - m[5].length) == m[5] ||
+ (type == "*=" || type == "~=") && z.indexOf(m[5]) >= 0) ^ not )
+ tmp.push( a );
+ }
+
+ r = tmp;
+
+ // We can get a speed boost by handling nth-child here
+ } else if ( m[1] == ":" && m[2] == "nth-child" ) {
+ var merge = {}, tmp = [],
+ // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
+ test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(
+ m[3] == "even" && "2n" || m[3] == "odd" && "2n+1" ||
+ !/\D/.test(m[3]) && "0n+" + m[3] || m[3]),
+ // calculate the numbers (first)n+(last) including if they are negative
+ first = (test[1] + (test[2] || 1)) - 0, last = test[3] - 0;
+
+ // loop through all the elements left in the jQuery object
+ for ( var i = 0, rl = r.length; i < rl; i++ ) {
+ var node = r[i], parentNode = node.parentNode, id = jQuery.data(parentNode);
+
+ if ( !merge[id] ) {
+ var c = 1;
+
+ for ( var n = parentNode.firstChild; n; n = n.nextSibling )
+ if ( n.nodeType == 1 )
+ n.nodeIndex = c++;
+
+ merge[id] = true;
+ }
+
+ var add = false;
+
+ if ( first == 0 ) {
+ if ( node.nodeIndex == last )
+ add = true;
+ } else if ( (node.nodeIndex - last) % first == 0 && (node.nodeIndex - last) / first >= 0 )
+ add = true;
+
+ if ( add ^ not )
+ tmp.push( node );
+ }
+
+ r = tmp;
+
+ // Otherwise, find the expression to execute
+ } else {
+ var fn = jQuery.expr[ m[1] ];
+ if ( typeof fn == "object" )
+ fn = fn[ m[2] ];
+
+ if ( typeof fn == "string" )
+ fn = eval("false||function(a,i){return " + fn + ";}");
+
+ // Execute it against the current filter
+ r = jQuery.grep( r, function(elem, i){
+ return fn(elem, i, m, r);
+ }, not );
+ }
+ }
+
+ // Return an array of filtered elements (r)
+ // and the modified expression string (t)
+ return { r: r, t: t };
+ },
+
+ dir: function( elem, dir ){
+ var matched = [];
+ var cur = elem[dir];
+ while ( cur && cur != document ) {
+ if ( cur.nodeType == 1 )
+ matched.push( cur );
+ cur = cur[dir];
+ }
+ return matched;
+ },
+
+ nth: function(cur,result,dir,elem){
+ result = result || 1;
+ var num = 0;
+
+ for ( ; cur; cur = cur[dir] )
+ if ( cur.nodeType == 1 && ++num == result )
+ break;
+
+ return cur;
+ },
+
+ sibling: function( n, elem ) {
+ var r = [];
+
+ for ( ; n; n = n.nextSibling ) {
+ if ( n.nodeType == 1 && (!elem || n != elem) )
+ r.push( n );
+ }
+
+ return r;
+ }
+});
+
+/*
+ * A number of helper functions used for managing events.
+ * Many of the ideas behind this code orignated from
+ * Dean Edwards' addEvent library.
+ */
+jQuery.event = {
+
+ // Bind an event to an element
+ // Original by Dean Edwards
+ add: function(elem, types, handler, data) {
+ if ( elem.nodeType == 3 || elem.nodeType == 8 )
+ return;
+
+ // For whatever reason, IE has trouble passing the window object
+ // around, causing it to be cloned in the process
+ if ( jQuery.browser.msie && elem.setInterval != undefined )
+ elem = window;
+
+ // Make sure that the function being executed has a unique ID
+ if ( !handler.guid )
+ handler.guid = this.guid++;
+
+ // if data is passed, bind to handler
+ if( data != undefined ) {
+ // Create temporary function pointer to original handler
+ var fn = handler;
+
+ // Create unique handler function, wrapped around original handler
+ handler = function() {
+ // Pass arguments and context to original handler
+ return fn.apply(this, arguments);
+ };
+
+ // Store data in unique handler
+ handler.data = data;
+
+ // Set the guid of unique handler to the same of original handler, so it can be removed
+ handler.guid = fn.guid;
+ }
+
+ // Init the element's event structure
+ var events = jQuery.data(elem, "events") || jQuery.data(elem, "events", {}),
+ handle = jQuery.data(elem, "handle") || jQuery.data(elem, "handle", function(){
+ // returned undefined or false
+ var val;
+
+ // Handle the second event of a trigger and when
+ // an event is called after a page has unloaded
+ if ( typeof jQuery == "undefined" || jQuery.event.triggered )
+ return val;
+
+ val = jQuery.event.handle.apply(arguments.callee.elem, arguments);
+
+ return val;
+ });
+ // Add elem as a property of the handle function
+ // This is to prevent a memory leak with non-native
+ // event in IE.
+ handle.elem = elem;
+
+ // Handle multiple events seperated by a space
+ // jQuery(...).bind("mouseover mouseout", fn);
+ jQuery.each(types.split(/\s+/), function(index, type) {
+ // Namespaced event handlers
+ var parts = type.split(".");
+ type = parts[0];
+ handler.type = parts[1];
+
+ // Get the current list of functions bound to this event
+ var handlers = events[type];
+
+ // Init the event handler queue
+ if (!handlers) {
+ handlers = events[type] = {};
+
+ // Check for a special event handler
+ // Only use addEventListener/attachEvent if the special
+ // events handler returns false
+ if ( !jQuery.event.special[type] || jQuery.event.special[type].setup.call(elem) === false ) {
+ // Bind the global event handler to the element
+ if (elem.addEventListener)
+ elem.addEventListener(type, handle, false);
+ else if (elem.attachEvent)
+ elem.attachEvent("on" + type, handle);
+ }
+ }
+
+ // Add the function to the element's handler list
+ handlers[handler.guid] = handler;
+
+ // Keep track of which events have been used, for global triggering
+ jQuery.event.global[type] = true;
+ });
+
+ // Nullify elem to prevent memory leaks in IE
+ elem = null;
+ },
+
+ guid: 1,
+ global: {},
+
+ // Detach an event or set of events from an element
+ remove: function(elem, types, handler) {
+ // don't do events on text and comment nodes
+ if ( elem.nodeType == 3 || elem.nodeType == 8 )
+ return;
+
+ var events = jQuery.data(elem, "events"), ret, index;
+
+ if ( events ) {
+ // Unbind all events for the element
+ if ( types == undefined || (typeof types == "string" && types.charAt(0) == ".") )
+ for ( var type in events )
+ this.remove( elem, type + (types || "") );
+ else {
+ // types is actually an event object here
+ if ( types.type ) {
+ handler = types.handler;
+ types = types.type;
+ }
+
+ // Handle multiple events seperated by a space
+ // jQuery(...).unbind("mouseover mouseout", fn);
+ jQuery.each(types.split(/\s+/), function(index, type){
+ // Namespaced event handlers
+ var parts = type.split(".");
+ type = parts[0];
+
+ if ( events[type] ) {
+ // remove the given handler for the given type
+ if ( handler )
+ delete events[type][handler.guid];
+
+ // remove all handlers for the given type
+ else
+ for ( handler in events[type] )
+ // Handle the removal of namespaced events
+ if ( !parts[1] || events[type][handler].type == parts[1] )
+ delete events[type][handler];
+
+ // remove generic event handler if no more handlers exist
+ for ( ret in events[type] ) break;
+ if ( !ret ) {
+ if ( !jQuery.event.special[type] || jQuery.event.special[type].teardown.call(elem) === false ) {
+ if (elem.removeEventListener)
+ elem.removeEventListener(type, jQuery.data(elem, "handle"), false);
+ else if (elem.detachEvent)
+ elem.detachEvent("on" + type, jQuery.data(elem, "handle"));
+ }
+ ret = null;
+ delete events[type];
+ }
+ }
+ });
+ }
+
+ // Remove the expando if it's no longer used
+ for ( ret in events ) break;
+ if ( !ret ) {
+ var handle = jQuery.data( elem, "handle" );
+ if ( handle ) handle.elem = null;
+ jQuery.removeData( elem, "events" );
+ jQuery.removeData( elem, "handle" );
+ }
+ }
+ },
+
+ trigger: function(type, data, elem, donative, extra) {
+ // Clone the incoming data, if any
+ data = jQuery.makeArray(data || []);
+
+ if ( type.indexOf("!") >= 0 ) {
+ type = type.slice(0, -1);
+ var exclusive = true;
+ }
+
+ // Handle a global trigger
+ if ( !elem ) {
+ // Only trigger if we've ever bound an event for it
+ if ( this.global[type] )
+ jQuery("*").add([window, document]).trigger(type, data);
+
+ // Handle triggering a single element
+ } else {
+ // don't do events on text and comment nodes
+ if ( elem.nodeType == 3 || elem.nodeType == 8 )
+ return undefined;
+
+ var val, ret, fn = jQuery.isFunction( elem[ type ] || null ),
+ // Check to see if we need to provide a fake event, or not
+ event = !data[0] || !data[0].preventDefault;
+
+ // Pass along a fake event
+ if ( event )
+ data.unshift( this.fix({ type: type, target: elem }) );
+
+ // Enforce the right trigger type
+ data[0].type = type;
+ if ( exclusive )
+ data[0].exclusive = true;
+
+ // Trigger the event
+ if ( jQuery.isFunction( jQuery.data(elem, "handle") ) )
+ val = jQuery.data(elem, "handle").apply( elem, data );
+
+ // Handle triggering native .onfoo handlers
+ if ( !fn && elem["on"+type] && elem["on"+type].apply( elem, data ) === false )
+ val = false;
+
+ // Extra functions don't get the custom event object
+ if ( event )
+ data.shift();
+
+ // Handle triggering of extra function
+ if ( extra && jQuery.isFunction( extra ) ) {
+ // call the extra function and tack the current return value on the end for possible inspection
+ ret = extra.apply( elem, val == null ? data : data.concat( val ) );
+ // if anything is returned, give it precedence and have it overwrite the previous value
+ if (ret !== undefined)
+ val = ret;
+ }
+
+ // Trigger the native events (except for clicks on links)
+ if ( fn && donative !== false && val !== false && !(jQuery.nodeName(elem, 'a') && type == "click") ) {
+ this.triggered = true;
+ try {
+ elem[ type ]();
+ // prevent IE from throwing an error for some hidden elements
+ } catch (e) {}
+ }
+
+ this.triggered = false;
+ }
+
+ return val;
+ },
+
+ handle: function(event) {
+ // returned undefined or false
+ var val;
+
+ // Empty object is for triggered events with no data
+ event = jQuery.event.fix( event || window.event || {} );
+
+ // Namespaced event handlers
+ var parts = event.type.split(".");
+ event.type = parts[0];
+
+ var handlers = jQuery.data(this, "events") && jQuery.data(this, "events")[event.type], args = Array.prototype.slice.call( arguments, 1 );
+ args.unshift( event );
+
+ for ( var j in handlers ) {
+ var handler = handlers[j];
+ // Pass in a reference to the handler function itself
+ // So that we can later remove it
+ args[0].handler = handler;
+ args[0].data = handler.data;
+
+ // Filter the functions by class
+ if ( !parts[1] && !event.exclusive || handler.type == parts[1] ) {
+ var ret = handler.apply( this, args );
+
+ if ( val !== false )
+ val = ret;
+
+ if ( ret === false ) {
+ event.preventDefault();
+ event.stopPropagation();
+ }
+ }
+ }
+
+ // Clean up added properties in IE to prevent memory leak
+ if (jQuery.browser.msie)
+ event.target = event.preventDefault = event.stopPropagation =
+ event.handler = event.data = null;
+
+ return val;
+ },
+
+ fix: function(event) {
+ // store a copy of the original event object
+ // and clone to set read-only properties
+ var originalEvent = event;
+ event = jQuery.extend({}, originalEvent);
+
+ // add preventDefault and stopPropagation since
+ // they will not work on the clone
+ event.preventDefault = function() {
+ // if preventDefault exists run it on the original event
+ if (originalEvent.preventDefault)
+ originalEvent.preventDefault();
+ // otherwise set the returnValue property of the original event to false (IE)
+ originalEvent.returnValue = false;
+ };
+ event.stopPropagation = function() {
+ // if stopPropagation exists run it on the original event
+ if (originalEvent.stopPropagation)
+ originalEvent.stopPropagation();
+ // otherwise set the cancelBubble property of the original event to true (IE)
+ originalEvent.cancelBubble = true;
+ };
+
+ // Fix target property, if necessary
+ if ( !event.target )
+ event.target = event.srcElement || document; // Fixes #1925 where srcElement might not be defined either
+
+ // check if target is a textnode (safari)
+ if ( event.target.nodeType == 3 )
+ event.target = originalEvent.target.parentNode;
+
+ // Add relatedTarget, if necessary
+ if ( !event.relatedTarget && event.fromElement )
+ event.relatedTarget = event.fromElement == event.target ? event.toElement : event.fromElement;
+
+ // Calculate pageX/Y if missing and clientX/Y available
+ if ( event.pageX == null && event.clientX != null ) {
+ var doc = document.documentElement, body = document.body;
+ event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc.clientLeft || 0);
+ event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc.clientTop || 0);
+ }
+
+ // Add which for key events
+ if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) )
+ event.which = event.charCode || event.keyCode;
+
+ // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
+ if ( !event.metaKey && event.ctrlKey )
+ event.metaKey = event.ctrlKey;
+
+ // Add which for click: 1 == left; 2 == middle; 3 == right
+ // Note: button is not normalized, so don't use it
+ if ( !event.which && event.button )
+ event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
+
+ return event;
+ },
+
+ special: {
+ ready: {
+ setup: function() {
+ // Make sure the ready event is setup
+ bindReady();
+ return;
+ },
+
+ teardown: function() { return; }
+ },
+
+ mouseenter: {
+ setup: function() {
+ if ( jQuery.browser.msie ) return false;
+ jQuery(this).bind("mouseover", jQuery.event.special.mouseenter.handler);
+ return true;
+ },
+
+ teardown: function() {
+ if ( jQuery.browser.msie ) return false;
+ jQuery(this).unbind("mouseover", jQuery.event.special.mouseenter.handler);
+ return true;
+ },
+
+ handler: function(event) {
+ // If we actually just moused on to a sub-element, ignore it
+ if ( withinElement(event, this) ) return true;
+ // Execute the right handlers by setting the event type to mouseenter
+ arguments[0].type = "mouseenter";
+ return jQuery.event.handle.apply(this, arguments);
+ }
+ },
+
+ mouseleave: {
+ setup: function() {
+ if ( jQuery.browser.msie ) return false;
+ jQuery(this).bind("mouseout", jQuery.event.special.mouseleave.handler);
+ return true;
+ },
+
+ teardown: function() {
+ if ( jQuery.browser.msie ) return false;
+ jQuery(this).unbind("mouseout", jQuery.event.special.mouseleave.handler);
+ return true;
+ },
+
+ handler: function(event) {
+ // If we actually just moused on to a sub-element, ignore it
+ if ( withinElement(event, this) ) return true;
+ // Execute the right handlers by setting the event type to mouseleave
+ arguments[0].type = "mouseleave";
+ return jQuery.event.handle.apply(this, arguments);
+ }
+ }
+ }
+};
+
+jQuery.fn.extend({
+ bind: function( type, data, fn ) {
+ return type == "unload" ? this.one(type, data, fn) : this.each(function(){
+ jQuery.event.add( this, type, fn || data, fn && data );
+ });
+ },
+
+ one: function( type, data, fn ) {
+ return this.each(function(){
+ jQuery.event.add( this, type, function(event) {
+ jQuery(this).unbind(event);
+ return (fn || data).apply( this, arguments);
+ }, fn && data);
+ });
+ },
+
+ unbind: function( type, fn ) {
+ return this.each(function(){
+ jQuery.event.remove( this, type, fn );
+ });
+ },
+
+ trigger: function( type, data, fn ) {
+ return this.each(function(){
+ jQuery.event.trigger( type, data, this, true, fn );
+ });
+ },
+
+ triggerHandler: function( type, data, fn ) {
+ if ( this[0] )
+ return jQuery.event.trigger( type, data, this[0], false, fn );
+ return undefined;
+ },
+
+ toggle: function() {
+ // Save reference to arguments for access in closure
+ var args = arguments;
+
+ return this.click(function(event) {
+ // Figure out which function to execute
+ this.lastToggle = 0 == this.lastToggle ? 1 : 0;
+
+ // Make sure that clicks stop
+ event.preventDefault();
+
+ // and execute the function
+ return args[this.lastToggle].apply( this, arguments ) || false;
+ });
+ },
+
+ hover: function(fnOver, fnOut) {
+ return this.bind('mouseenter', fnOver).bind('mouseleave', fnOut);
+ },
+
+ ready: function(fn) {
+ // Attach the listeners
+ bindReady();
+
+ // If the DOM is already ready
+ if ( jQuery.isReady )
+ // Execute the function immediately
+ fn.call( document, jQuery );
+
+ // Otherwise, remember the function for later
+ else
+ // Add the function to the wait list
+ jQuery.readyList.push( function() { return fn.call(this, jQuery); } );
+
+ return this;
+ }
+});
+
+jQuery.extend({
+ isReady: false,
+ readyList: [],
+ // Handle when the DOM is ready
+ ready: function() {
+ // Make sure that the DOM is not already loaded
+ if ( !jQuery.isReady ) {
+ // Remember that the DOM is ready
+ jQuery.isReady = true;
+
+ // If there are functions bound, to execute
+ if ( jQuery.readyList ) {
+ // Execute all of them
+ jQuery.each( jQuery.readyList, function(){
+ this.apply( document );
+ });
+
+ // Reset the list of functions
+ jQuery.readyList = null;
+ }
+
+ // Trigger any bound ready events
+ jQuery(document).triggerHandler("ready");
+ }
+ }
+});
+
+var readyBound = false;
+
+function bindReady(){
+ if ( readyBound ) return;
+ readyBound = true;
+
+ // Mozilla, Opera (see further below for it) and webkit nightlies currently support this event
+ if ( document.addEventListener && !jQuery.browser.opera)
+ // Use the handy event callback
+ document.addEventListener( "DOMContentLoaded", jQuery.ready, false );
+
+ // If IE is used and is not in a frame
+ // Continually check to see if the document is ready
+ if ( jQuery.browser.msie && window == top ) (function(){
+ if (jQuery.isReady) return;
+ try {
+ // If IE is used, use the trick by Diego Perini
+ // http://javascript.nwbox.com/IEContentLoaded/
+ document.documentElement.doScroll("left");
+ } catch( error ) {
+ setTimeout( arguments.callee, 0 );
+ return;
+ }
+ // and execute any waiting functions
+ jQuery.ready();
+ })();
+
+ if ( jQuery.browser.opera )
+ document.addEventListener( "DOMContentLoaded", function () {
+ if (jQuery.isReady) return;
+ for (var i = 0; i < document.styleSheets.length; i++)
+ if (document.styleSheets[i].disabled) {
+ setTimeout( arguments.callee, 0 );
+ return;
+ }
+ // and execute any waiting functions
+ jQuery.ready();
+ }, false);
+
+ if ( jQuery.browser.safari ) {
+ var numStyles;
+ (function(){
+ if (jQuery.isReady) return;
+ if ( document.readyState != "loaded" && document.readyState != "complete" ) {
+ setTimeout( arguments.callee, 0 );
+ return;
+ }
+ if ( numStyles === undefined )
+ numStyles = jQuery("style, link[rel=stylesheet]").length;
+ if ( document.styleSheets.length != numStyles ) {
+ setTimeout( arguments.callee, 0 );
+ return;
+ }
+ // and execute any waiting functions
+ jQuery.ready();
+ })();
+ }
+
+ // A fallback to window.onload, that will always work
+ jQuery.event.add( window, "load", jQuery.ready );
+}
+
+jQuery.each( ("blur,focus,load,resize,scroll,unload,click,dblclick," +
+ "mousedown,mouseup,mousemove,mouseover,mouseout,change,select," +
+ "submit,keydown,keypress,keyup,error").split(","), function(i, name){
+
+ // Handle event binding
+ jQuery.fn[name] = function(fn){
+ return fn ? this.bind(name, fn) : this.trigger(name);
+ };
+});
+
+// Checks if an event happened on an element within another element
+// Used in jQuery.event.special.mouseenter and mouseleave handlers
+var withinElement = function(event, elem) {
+ // Check if mouse(over|out) are still within the same parent element
+ var parent = event.relatedTarget;
+ // Traverse up the tree
+ while ( parent && parent != elem ) try { parent = parent.parentNode; } catch(error) { parent = elem; }
+ // Return true if we actually just moused on to a sub-element
+ return parent == elem;
+};
+
+// Prevent memory leaks in IE
+// And prevent errors on refresh with events like mouseover in other browsers
+// Window isn't included so as not to unbind existing unload events
+jQuery(window).bind("unload", function() {
+ jQuery("*").add(document).unbind();
+});
+jQuery.fn.extend({
+ load: function( url, params, callback ) {
+ if ( jQuery.isFunction( url ) )
+ return this.bind("load", url);
+
+ var off = url.indexOf(" ");
+ if ( off >= 0 ) {
+ var selector = url.slice(off, url.length);
+ url = url.slice(0, off);
+ }
+
+ callback = callback || function(){};
+
+ // Default to a GET request
+ var type = "GET";
+
+ // If the second parameter was provided
+ if ( params )
+ // If it's a function
+ if ( jQuery.isFunction( params ) ) {
+ // We assume that it's the callback
+ callback = params;
+ params = null;
+
+ // Otherwise, build a param string
+ } else {
+ params = jQuery.param( params );
+ type = "POST";
+ }
+
+ var self = this;
+
+ // Request the remote document
+ jQuery.ajax({
+ url: url,
+ type: type,
+ dataType: "html",
+ data: params,
+ complete: function(res, status){
+ // If successful, inject the HTML into all the matched elements
+ if ( status == "success" || status == "notmodified" )
+ // See if a selector was specified
+ self.html( selector ?
+ // Create a dummy div to hold the results
+ jQuery("<div/>")
+ // inject the contents of the document in, removing the scripts
+ // to avoid any 'Permission Denied' errors in IE
+ .append(res.responseText.replace(/<script(.|\s)*?\/script>/g, ""))
+
+ // Locate the specified elements
+ .find(selector) :
+
+ // If not, just inject the full result
+ res.responseText );
+
+ self.each( callback, [res.responseText, status, res] );
+ }
+ });
+ return this;
+ },
+
+ serialize: function() {
+ return jQuery.param(this.serializeArray());
+ },
+ serializeArray: function() {
+ return this.map(function(){
+ return jQuery.nodeName(this, "form") ?
+ jQuery.makeArray(this.elements) : this;
+ })
+ .filter(function(){
+ return this.name && !this.disabled &&
+ (this.checked || /select|textarea/i.test(this.nodeName) ||
+ /text|hidden|password/i.test(this.type));
+ })
+ .map(function(i, elem){
+ var val = jQuery(this).val();
+ return val == null ? null :
+ val.constructor == Array ?
+ jQuery.map( val, function(val, i){
+ return {name: elem.name, value: val};
+ }) :
+ {name: elem.name, value: val};
+ }).get();
+ }
+});
+
+// Attach a bunch of functions for handling common AJAX events
+jQuery.each( "ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","), function(i,o){
+ jQuery.fn[o] = function(f){
+ return this.bind(o, f);
+ };
+});
+
+var jsc = (new Date).getTime();
+
+jQuery.extend({
+ get: function( url, data, callback, type ) {
+ // shift arguments if data argument was ommited
+ if ( jQuery.isFunction( data ) ) {
+ callback = data;
+ data = null;
+ }
+
+ return jQuery.ajax({
+ type: "GET",
+ url: url,
+ data: data,
+ success: callback,
+ dataType: type
+ });
+ },
+
+ getScript: function( url, callback ) {
+ return jQuery.get(url, null, callback, "script");
+ },
+
+ getJSON: function( url, data, callback ) {
+ return jQuery.get(url, data, callback, "json");
+ },
+
+ post: function( url, data, callback, type ) {
+ if ( jQuery.isFunction( data ) ) {
+ callback = data;
+ data = {};
+ }
+
+ return jQuery.ajax({
+ type: "POST",
+ url: url,
+ data: data,
+ success: callback,
+ dataType: type
+ });
+ },
+
+ ajaxSetup: function( settings ) {
+ jQuery.extend( jQuery.ajaxSettings, settings );
+ },
+
+ ajaxSettings: {
+ global: true,
+ type: "GET",
+ timeout: 0,
+ contentType: "application/x-www-form-urlencoded",
+ processData: true,
+ async: true,
+ data: null,
+ username: null,
+ password: null,
+ accepts: {
+ xml: "application/xml, text/xml",
+ html: "text/html",
+ script: "text/javascript, application/javascript",
+ json: "application/json, text/javascript",
+ text: "text/plain",
+ _default: "*/*"
+ }
+ },
+
+ // Last-Modified header cache for next request
+ lastModified: {},
+
+ ajax: function( s ) {
+ var jsonp, jsre = /=\?(&|$)/g, status, data;
+
+ // Extend the settings, but re-extend 's' so that it can be
+ // checked again later (in the test suite, specifically)
+ s = jQuery.extend(true, s, jQuery.extend(true, {}, jQuery.ajaxSettings, s));
+
+ // convert data if not already a string
+ if ( s.data && s.processData && typeof s.data != "string" )
+ s.data = jQuery.param(s.data);
+
+ // Handle JSONP Parameter Callbacks
+ if ( s.dataType == "jsonp" ) {
+ if ( s.type.toLowerCase() == "get" ) {
+ if ( !s.url.match(jsre) )
+ s.url += (s.url.match(/\?/) ? "&" : "?") + (s.jsonp || "callback") + "=?";
+ } else if ( !s.data || !s.data.match(jsre) )
+ s.data = (s.data ? s.data + "&" : "") + (s.jsonp || "callback") + "=?";
+ s.dataType = "json";
+ }
+
+ // Build temporary JSONP function
+ if ( s.dataType == "json" && (s.data && s.data.match(jsre) || s.url.match(jsre)) ) {
+ jsonp = "jsonp" + jsc++;
+
+ // Replace the =? sequence both in the query string and the data
+ if ( s.data )
+ s.data = (s.data + "").replace(jsre, "=" + jsonp + "$1");
+ s.url = s.url.replace(jsre, "=" + jsonp + "$1");
+
+ // We need to make sure
+ // that a JSONP style response is executed properly
+ s.dataType = "script";
+
+ // Handle JSONP-style loading
+ window[ jsonp ] = function(tmp){
+ data = tmp;
+ success();
+ complete();
+ // Garbage collect
+ window[ jsonp ] = undefined;
+ try{ delete window[ jsonp ]; } catch(e){}
+ if ( head )
+ head.removeChild( script );
+ };
+ }
+
+ if ( s.dataType == "script" && s.cache == null )
+ s.cache = false;
+
+ if ( s.cache === false && s.type.toLowerCase() == "get" ) {
+ var ts = (new Date()).getTime();
+ // try replacing _= if it is there
+ var ret = s.url.replace(/(\?|&)_=.*?(&|$)/, "$1_=" + ts + "$2");
+ // if nothing was replaced, add timestamp to the end
+ s.url = ret + ((ret == s.url) ? (s.url.match(/\?/) ? "&" : "?") + "_=" + ts : "");
+ }
+
+ // If data is available, append data to url for get requests
+ if ( s.data && s.type.toLowerCase() == "get" ) {
+ s.url += (s.url.match(/\?/) ? "&" : "?") + s.data;
+
+ // IE likes to send both get and post data, prevent this
+ s.data = null;
+ }
+
+ // Watch for a new set of requests
+ if ( s.global && ! jQuery.active++ )
+ jQuery.event.trigger( "ajaxStart" );
+
+ // If we're requesting a remote document
+ // and trying to load JSON or Script with a GET
+ if ( (!s.url.indexOf("http") || !s.url.indexOf("//")) && s.dataType == "script" && s.type.toLowerCase() == "get" ) {
+ var head = document.getElementsByTagName("head")[0];
+ var script = document.createElement("script");
+ script.src = s.url;
+ if (s.scriptCharset)
+ script.charset = s.scriptCharset;
+
+ // Handle Script loading
+ if ( !jsonp ) {
+ var done = false;
+
+ // Attach handlers for all browsers
+ script.onload = script.onreadystatechange = function(){
+ if ( !done && (!this.readyState ||
+ this.readyState == "loaded" || this.readyState == "complete") ) {
+ done = true;
+ success();
+ complete();
+ head.removeChild( script );
+ }
+ };
+ }
+
+ head.appendChild(script);
+
+ // We handle everything using the script element injection
+ return undefined;
+ }
+
+ var requestDone = false;
+
+ // Create the request object; Microsoft failed to properly
+ // implement the XMLHttpRequest in IE7, so we use the ActiveXObject when it is available
+ var xml = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
+
+ // Open the socket
+ xml.open(s.type, s.url, s.async, s.username, s.password);
+
+ // Need an extra try/catch for cross domain requests in Firefox 3
+ try {
+ // Set the correct header, if data is being sent
+ if ( s.data )
+ xml.setRequestHeader("Content-Type", s.contentType);
+
+ // Set the If-Modified-Since header, if ifModified mode.
+ if ( s.ifModified )
+ xml.setRequestHeader("If-Modified-Since",
+ jQuery.lastModified[s.url] || "Thu, 01 Jan 1970 00:00:00 GMT" );
+
+ // Set header so the called script knows that it's an XMLHttpRequest
+ xml.setRequestHeader("X-Requested-With", "XMLHttpRequest");
+
+ // Set the Accepts header for the server, depending on the dataType
+ xml.setRequestHeader("Accept", s.dataType && s.accepts[ s.dataType ] ?
+ s.accepts[ s.dataType ] + ", */*" :
+ s.accepts._default );
+ } catch(e){}
+
+ // Allow custom headers/mimetypes
+ if ( s.beforeSend )
+ s.beforeSend(xml);
+
+ if ( s.global )
+ jQuery.event.trigger("ajaxSend", [xml, s]);
+
+ // Wait for a response to come back
+ var onreadystatechange = function(isTimeout){
+ // The transfer is complete and the data is available, or the request timed out
+ if ( !requestDone && xml && (xml.readyState == 4 || isTimeout == "timeout") ) {
+ requestDone = true;
+
+ // clear poll interval
+ if (ival) {
+ clearInterval(ival);
+ ival = null;
+ }
+
+ status = isTimeout == "timeout" && "timeout" ||
+ !jQuery.httpSuccess( xml ) && "error" ||
+ s.ifModified && jQuery.httpNotModified( xml, s.url ) && "notmodified" ||
+ "success";
+
+ if ( status == "success" ) {
+ // Watch for, and catch, XML document parse errors
+ try {
+ // process the data (runs the xml through httpData regardless of callback)
+ data = jQuery.httpData( xml, s.dataType );
+ } catch(e) {
+ status = "parsererror";
+ }
+ }
+
+ // Make sure that the request was successful or notmodified
+ if ( status == "success" ) {
+ // Cache Last-Modified header, if ifModified mode.
+ var modRes;
+ try {
+ modRes = xml.getResponseHeader("Last-Modified");
+ } catch(e) {} // swallow exception thrown by FF if header is not available
+
+ if ( s.ifModified && modRes )
+ jQuery.lastModified[s.url] = modRes;
+
+ // JSONP handles its own success callback
+ if ( !jsonp )
+ success();
+ } else
+ jQuery.handleError(s, xml, status);
+
+ // Fire the complete handlers
+ complete();
+
+ // Stop memory leaks
+ if ( s.async )
+ xml = null;
+ }
+ };
+
+ if ( s.async ) {
+ // don't attach the handler to the request, just poll it instead
+ var ival = setInterval(onreadystatechange, 13);
+
+ // Timeout checker
+ if ( s.timeout > 0 )
+ setTimeout(function(){
+ // Check to see if the request is still happening
+ if ( xml ) {
+ // Cancel the request
+ xml.abort();
+
+ if( !requestDone )
+ onreadystatechange( "timeout" );
+ }
+ }, s.timeout);
+ }
+
+ // Send the data
+ try {
+ xml.send(s.data);
+ } catch(e) {
+ jQuery.handleError(s, xml, null, e);
+ }
+
+ // firefox 1.5 doesn't fire statechange for sync requests
+ if ( !s.async )
+ onreadystatechange();
+
+ function success(){
+ // If a local callback was specified, fire it and pass it the data
+ if ( s.success )
+ s.success( data, status );
+
+ // Fire the global callback
+ if ( s.global )
+ jQuery.event.trigger( "ajaxSuccess", [xml, s] );
+ }
+
+ function complete(){
+ // Process result
+ if ( s.complete )
+ s.complete(xml, status);
+
+ // The request was completed
+ if ( s.global )
+ jQuery.event.trigger( "ajaxComplete", [xml, s] );
+
+ // Handle the global AJAX counter
+ if ( s.global && ! --jQuery.active )
+ jQuery.event.trigger( "ajaxStop" );
+ }
+
+ // return XMLHttpRequest to allow aborting the request etc.
+ return xml;
+ },
+
+ handleError: function( s, xml, status, e ) {
+ // If a local callback was specified, fire it
+ if ( s.error ) s.error( xml, status, e );
+
+ // Fire the global callback
+ if ( s.global )
+ jQuery.event.trigger( "ajaxError", [xml, s, e] );
+ },
+
+ // Counter for holding the number of active queries
+ active: 0,
+
+ // Determines if an XMLHttpRequest was successful or not
+ httpSuccess: function( r ) {
+ try {
+ // IE error sometimes returns 1223 when it should be 204 so treat it as success, see #1450
+ return !r.status && location.protocol == "file:" ||
+ ( r.status >= 200 && r.status < 300 ) || r.status == 304 || r.status == 1223 ||
+ jQuery.browser.safari && r.status == undefined;
+ } catch(e){}
+ return false;
+ },
+
+ // Determines if an XMLHttpRequest returns NotModified
+ httpNotModified: function( xml, url ) {
+ try {
+ var xmlRes = xml.getResponseHeader("Last-Modified");
+
+ // Firefox always returns 200. check Last-Modified date
+ return xml.status == 304 || xmlRes == jQuery.lastModified[url] ||
+ jQuery.browser.safari && xml.status == undefined;
+ } catch(e){}
+ return false;
+ },
+
+ httpData: function( r, type ) {
+ var ct = r.getResponseHeader("content-type");
+ var xml = type == "xml" || !type && ct && ct.indexOf("xml") >= 0;
+ var data = xml ? r.responseXML : r.responseText;
+
+ if ( xml && data.documentElement.tagName == "parsererror" )
+ throw "parsererror";
+
+ // If the type is "script", eval it in global context
+ if ( type == "script" )
+ jQuery.globalEval( data );
+
+ // Get the JavaScript object, if JSON is used.
+ if ( type == "json" )
+ data = eval("(" + data + ")");
+
+ return data;
+ },
+
+ // Serialize an array of form elements or a set of
+ // key/values into a query string
+ param: function( a ) {
+ var s = [];
+
+ // If an array was passed in, assume that it is an array
+ // of form elements
+ if ( a.constructor == Array || a.jquery )
+ // Serialize the form elements
+ jQuery.each( a, function(){
+ s.push( encodeURIComponent(this.name) + "=" + encodeURIComponent( this.value ) );
+ });
+
+ // Otherwise, assume that it's an object of key/value pairs
+ else
+ // Serialize the key/values
+ for ( var j in a )
+ // If the value is an array then the key names need to be repeated
+ if ( a[j] && a[j].constructor == Array )
+ jQuery.each( a[j], function(){
+ s.push( encodeURIComponent(j) + "=" + encodeURIComponent( this ) );
+ });
+ else
+ s.push( encodeURIComponent(j) + "=" + encodeURIComponent( a[j] ) );
+
+ // Return the resulting serialization
+ return s.join("&").replace(/%20/g, "+");
+ }
+
+});
+jQuery.fn.extend({
+ show: function(speed,callback){
+ return speed ?
+ this.animate({
+ height: "show", width: "show", opacity: "show"
+ }, speed, callback) :
+
+ this.filter(":hidden").each(function(){
+ this.style.display = this.oldblock || "";
+ if ( jQuery.css(this,"display") == "none" ) {
+ var elem = jQuery("<" + this.tagName + " />").appendTo("body");
+ this.style.display = elem.css("display");
+ // handle an edge condition where css is - div { display:none; } or similar
+ if (this.style.display == "none")
+ this.style.display = "block";
+ elem.remove();
+ }
+ }).end();
+ },
+
+ hide: function(speed,callback){
+ return speed ?
+ this.animate({
+ height: "hide", width: "hide", opacity: "hide"
+ }, speed, callback) :
+
+ this.filter(":visible").each(function(){
+ this.oldblock = this.oldblock || jQuery.css(this,"display");
+ this.style.display = "none";
+ }).end();
+ },
+
+ // Save the old toggle function
+ _toggle: jQuery.fn.toggle,
+
+ toggle: function( fn, fn2 ){
+ return jQuery.isFunction(fn) && jQuery.isFunction(fn2) ?
+ this._toggle( fn, fn2 ) :
+ fn ?
+ this.animate({
+ height: "toggle", width: "toggle", opacity: "toggle"
+ }, fn, fn2) :
+ this.each(function(){
+ jQuery(this)[ jQuery(this).is(":hidden") ? "show" : "hide" ]();
+ });
+ },
+
+ slideDown: function(speed,callback){
+ return this.animate({height: "show"}, speed, callback);
+ },
+
+ slideUp: function(speed,callback){
+ return this.animate({height: "hide"}, speed, callback);
+ },
+
+ slideToggle: function(speed, callback){
+ return this.animate({height: "toggle"}, speed, callback);
+ },
+
+ fadeIn: function(speed, callback){
+ return this.animate({opacity: "show"}, speed, callback);
+ },
+
+ fadeOut: function(speed, callback){
+ return this.animate({opacity: "hide"}, speed, callback);
+ },
+
+ fadeTo: function(speed,to,callback){
+ return this.animate({opacity: to}, speed, callback);
+ },
+
+ animate: function( prop, speed, easing, callback ) {
+ var optall = jQuery.speed(speed, easing, callback);
+
+ return this[ optall.queue === false ? "each" : "queue" ](function(){
+ if ( this.nodeType != 1)
+ return false;
+
+ var opt = jQuery.extend({}, optall);
+ var hidden = jQuery(this).is(":hidden"), self = this;
+
+ for ( var p in prop ) {
+ if ( prop[p] == "hide" && hidden || prop[p] == "show" && !hidden )
+ return jQuery.isFunction(opt.complete) && opt.complete.apply(this);
+
+ if ( p == "height" || p == "width" ) {
+ // Store display property
+ opt.display = jQuery.css(this, "display");
+
+ // Make sure that nothing sneaks out
+ opt.overflow = this.style.overflow;
+ }
+ }
+
+ if ( opt.overflow != null )
+ this.style.overflow = "hidden";
+
+ opt.curAnim = jQuery.extend({}, prop);
+
+ jQuery.each( prop, function(name, val){
+ var e = new jQuery.fx( self, opt, name );
+
+ if ( /toggle|show|hide/.test(val) )
+ e[ val == "toggle" ? hidden ? "show" : "hide" : val ]( prop );
+ else {
+ var parts = val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),
+ start = e.cur(true) || 0;
+
+ if ( parts ) {
+ var end = parseFloat(parts[2]),
+ unit = parts[3] || "px";
+
+ // We need to compute starting value
+ if ( unit != "px" ) {
+ self.style[ name ] = (end || 1) + unit;
+ start = ((end || 1) / e.cur(true)) * start;
+ self.style[ name ] = start + unit;
+ }
+
+ // If a +=/-= token was provided, we're doing a relative animation
+ if ( parts[1] )
+ end = ((parts[1] == "-=" ? -1 : 1) * end) + start;
+
+ e.custom( start, end, unit );
+ } else
+ e.custom( start, val, "" );
+ }
+ });
+
+ // For JS strict compliance
+ return true;
+ });
+ },
+
+ queue: function(type, fn){
+ if ( jQuery.isFunction(type) || ( type && type.constructor == Array )) {
+ fn = type;
+ type = "fx";
+ }
+
+ if ( !type || (typeof type == "string" && !fn) )
+ return queue( this[0], type );
+
+ return this.each(function(){
+ if ( fn.constructor == Array )
+ queue(this, type, fn);
+ else {
+ queue(this, type).push( fn );
+
+ if ( queue(this, type).length == 1 )
+ fn.apply(this);
+ }
+ });
+ },
+
+ stop: function(clearQueue, gotoEnd){
+ var timers = jQuery.timers;
+
+ if (clearQueue)
+ this.queue([]);
+
+ this.each(function(){
+ // go in reverse order so anything added to the queue during the loop is ignored
+ for ( var i = timers.length - 1; i >= 0; i-- )
+ if ( timers[i].elem == this ) {
+ if (gotoEnd)
+ // force the next step to be the last
+ timers[i](true);
+ timers.splice(i, 1);
+ }
+ });
+
+ // start the next in the queue if the last step wasn't forced
+ if (!gotoEnd)
+ this.dequeue();
+
+ return this;
+ }
+
+});
+
+var queue = function( elem, type, array ) {
+ if ( !elem )
+ return undefined;
+
+ type = type || "fx";
+
+ var q = jQuery.data( elem, type + "queue" );
+
+ if ( !q || array )
+ q = jQuery.data( elem, type + "queue",
+ array ? jQuery.makeArray(array) : [] );
+
+ return q;
+};
+
+jQuery.fn.dequeue = function(type){
+ type = type || "fx";
+
+ return this.each(function(){
+ var q = queue(this, type);
+
+ q.shift();
+
+ if ( q.length )
+ q[0].apply( this );
+ });
+};
+
+jQuery.extend({
+
+ speed: function(speed, easing, fn) {
+ var opt = speed && speed.constructor == Object ? speed : {
+ complete: fn || !fn && easing ||
+ jQuery.isFunction( speed ) && speed,
+ duration: speed,
+ easing: fn && easing || easing && easing.constructor != Function && easing
+ };
+
+ opt.duration = (opt.duration && opt.duration.constructor == Number ?
+ opt.duration :
+ { slow: 600, fast: 200 }[opt.duration]) || 400;
+
+ // Queueing
+ opt.old = opt.complete;
+ opt.complete = function(){
+ if ( opt.queue !== false )
+ jQuery(this).dequeue();
+ if ( jQuery.isFunction( opt.old ) )
+ opt.old.apply( this );
+ };
+
+ return opt;
+ },
+
+ easing: {
+ linear: function( p, n, firstNum, diff ) {
+ return firstNum + diff * p;
+ },
+ swing: function( p, n, firstNum, diff ) {
+ return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;
+ }
+ },
+
+ timers: [],
+ timerId: null,
+
+ fx: function( elem, options, prop ){
+ this.options = options;
+ this.elem = elem;
+ this.prop = prop;
+
+ if ( !options.orig )
+ options.orig = {};
+ }
+
+});
+
+jQuery.fx.prototype = {
+
+ // Simple function for setting a style value
+ update: function(){
+ if ( this.options.step )
+ this.options.step.apply( this.elem, [ this.now, this ] );
+
+ (jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );
+
+ // Set display property to block for height/width animations
+ if ( this.prop == "height" || this.prop == "width" )
+ this.elem.style.display = "block";
+ },
+
+ // Get the current size
+ cur: function(force){
+ if ( this.elem[this.prop] != null && this.elem.style[this.prop] == null )
+ return this.elem[ this.prop ];
+
+ var r = parseFloat(jQuery.css(this.elem, this.prop, force));
+ return r && r > -10000 ? r : parseFloat(jQuery.curCSS(this.elem, this.prop)) || 0;
+ },
+
+ // Start an animation from one number to another
+ custom: function(from, to, unit){
+ this.startTime = (new Date()).getTime();
+ this.start = from;
+ this.end = to;
+ this.unit = unit || this.unit || "px";
+ this.now = this.start;
+ this.pos = this.state = 0;
+ this.update();
+
+ var self = this;
+ function t(gotoEnd){
+ return self.step(gotoEnd);
+ }
+
+ t.elem = this.elem;
+
+ jQuery.timers.push(t);
+
+ if ( jQuery.timerId == null ) {
+ jQuery.timerId = setInterval(function(){
+ var timers = jQuery.timers;
+
+ for ( var i = 0; i < timers.length; i++ )
+ if ( !timers[i]() )
+ timers.splice(i--, 1);
+
+ if ( !timers.length ) {
+ clearInterval( jQuery.timerId );
+ jQuery.timerId = null;
+ }
+ }, 13);
+ }
+ },
+
+ // Simple 'show' function
+ show: function(){
+ // Remember where we started, so that we can go back to it later
+ this.options.orig[this.prop] = jQuery.attr( this.elem.style, this.prop );
+ this.options.show = true;
+
+ // Begin the animation
+ this.custom(0, this.cur());
+
+ // Make sure that we start at a small width/height to avoid any
+ // flash of content
+ if ( this.prop == "width" || this.prop == "height" )
+ this.elem.style[this.prop] = "1px";
+
+ // Start by showing the element
+ jQuery(this.elem).show();
+ },
+
+ // Simple 'hide' function
+ hide: function(){
+ // Remember where we started, so that we can go back to it later
+ this.options.orig[this.prop] = jQuery.attr( this.elem.style, this.prop );
+ this.options.hide = true;
+
+ // Begin the animation
+ this.custom(this.cur(), 0);
+ },
+
+ // Each step of an animation
+ step: function(gotoEnd){
+ var t = (new Date()).getTime();
+
+ if ( gotoEnd || t > this.options.duration + this.startTime ) {
+ this.now = this.end;
+ this.pos = this.state = 1;
+ this.update();
+
+ this.options.curAnim[ this.prop ] = true;
+
+ var done = true;
+ for ( var i in this.options.curAnim )
+ if ( this.options.curAnim[i] !== true )
+ done = false;
+
+ if ( done ) {
+ if ( this.options.display != null ) {
+ // Reset the overflow
+ this.elem.style.overflow = this.options.overflow;
+
+ // Reset the display
+ this.elem.style.display = this.options.display;
+ if ( jQuery.css(this.elem, "display") == "none" )
+ this.elem.style.display = "block";
+ }
+
+ // Hide the element if the "hide" operation was done
+ if ( this.options.hide )
+ this.elem.style.display = "none";
+
+ // Reset the properties, if the item has been hidden or shown
+ if ( this.options.hide || this.options.show )
+ for ( var p in this.options.curAnim )
+ jQuery.attr(this.elem.style, p, this.options.orig[p]);
+ }
+
+ // If a callback was provided, execute it
+ if ( done && jQuery.isFunction( this.options.complete ) )
+ // Execute the complete function
+ this.options.complete.apply( this.elem );
+
+ return false;
+ } else {
+ var n = t - this.startTime;
+ this.state = n / this.options.duration;
+
+ // Perform the easing function, defaults to swing
+ this.pos = jQuery.easing[this.options.easing || (jQuery.easing.swing ? "swing" : "linear")](this.state, n, 0, 1, this.options.duration);
+ this.now = this.start + ((this.end - this.start) * this.pos);
+
+ // Perform the next step of the animation
+ this.update();
+ }
+
+ return true;
+ }
+
+};
+
+jQuery.fx.step = {
+ scrollLeft: function(fx){
+ fx.elem.scrollLeft = fx.now;
+ },
+
+ scrollTop: function(fx){
+ fx.elem.scrollTop = fx.now;
+ },
+
+ opacity: function(fx){
+ jQuery.attr(fx.elem.style, "opacity", fx.now);
+ },
+
+ _default: function(fx){
+ fx.elem.style[ fx.prop ] = fx.now + fx.unit;
+ }
+};
+// The Offset Method
+// Originally By Brandon Aaron, part of the Dimension Plugin
+// http://jquery.com/plugins/project/dimensions
+jQuery.fn.offset = function() {
+ var left = 0, top = 0, elem = this[0], results;
+
+ if ( elem ) with ( jQuery.browser ) {
+ var parent = elem.parentNode,
+ offsetChild = elem,
+ offsetParent = elem.offsetParent,
+ doc = elem.ownerDocument,
+ safari2 = safari && parseInt(version) < 522 && !/adobeair/i.test(userAgent),
+ fixed = jQuery.css(elem, "position") == "fixed";
+
+ // Use getBoundingClientRect if available
+ if ( elem.getBoundingClientRect ) {
+ var box = elem.getBoundingClientRect();
+
+ // Add the document scroll offsets
+ add(box.left + Math.max(doc.documentElement.scrollLeft, doc.body.scrollLeft),
+ box.top + Math.max(doc.documentElement.scrollTop, doc.body.scrollTop));
+
+ // IE adds the HTML element's border, by default it is medium which is 2px
+ // IE 6 and 7 quirks mode the border width is overwritable by the following css html { border: 0; }
+ // IE 7 standards mode, the border is always 2px
+ // This border/offset is typically represented by the clientLeft and clientTop properties
+ // However, in IE6 and 7 quirks mode the clientLeft and clientTop properties are not updated when overwriting it via CSS
+ // Therefore this method will be off by 2px in IE while in quirksmode
+ add( -doc.documentElement.clientLeft, -doc.documentElement.clientTop );
+
+ // Otherwise loop through the offsetParents and parentNodes
+ } else {
+
+ // Initial element offsets
+ add( elem.offsetLeft, elem.offsetTop );
+
+ // Get parent offsets
+ while ( offsetParent ) {
+ // Add offsetParent offsets
+ add( offsetParent.offsetLeft, offsetParent.offsetTop );
+
+ // Mozilla and Safari > 2 does not include the border on offset parents
+ // However Mozilla adds the border for table or table cells
+ if ( mozilla && !/^t(able|d|h)$/i.test(offsetParent.tagName) || safari && !safari2 )
+ border( offsetParent );
+
+ // Add the document scroll offsets if position is fixed on any offsetParent
+ if ( !fixed && jQuery.css(offsetParent, "position") == "fixed" )
+ fixed = true;
+
+ // Set offsetChild to previous offsetParent unless it is the body element
+ offsetChild = /^body$/i.test(offsetParent.tagName) ? offsetChild : offsetParent;
+ // Get next offsetParent
+ offsetParent = offsetParent.offsetParent;
+ }
+
+ // Get parent scroll offsets
+ while ( parent && parent.tagName && !/^body|html$/i.test(parent.tagName) ) {
+ // Remove parent scroll UNLESS that parent is inline or a table to work around Opera inline/table scrollLeft/Top bug
+ if ( !/^inline|table.*$/i.test(jQuery.css(parent, "display")) )
+ // Subtract parent scroll offsets
+ add( -parent.scrollLeft, -parent.scrollTop );
+
+ // Mozilla does not add the border for a parent that has overflow != visible
+ if ( mozilla && jQuery.css(parent, "overflow") != "visible" )
+ border( parent );
+
+ // Get next parent
+ parent = parent.parentNode;
+ }
+
+ // Safari <= 2 doubles body offsets with a fixed position element/offsetParent or absolutely positioned offsetChild
+ // Mozilla doubles body offsets with a non-absolutely positioned offsetChild
+ if ( (safari2 && (fixed || jQuery.css(offsetChild, "position") == "absolute")) ||
+ (mozilla && jQuery.css(offsetChild, "position") != "absolute") )
+ add( -doc.body.offsetLeft, -doc.body.offsetTop );
+
+ // Add the document scroll offsets if position is fixed
+ if ( fixed )
+ add(Math.max(doc.documentElement.scrollLeft, doc.body.scrollLeft),
+ Math.max(doc.documentElement.scrollTop, doc.body.scrollTop));
+ }
+
+ // Return an object with top and left properties
+ results = { top: top, left: left };
+ }
+
+ function border(elem) {
+ add( jQuery.curCSS(elem, "borderLeftWidth", true), jQuery.curCSS(elem, "borderTopWidth", true) );
+ }
+
+ function add(l, t) {
+ left += parseInt(l) || 0;
+ top += parseInt(t) || 0;
+ }
+
+ return results;
+};
+})();
diff --git a/testing/talos/talos/tests/dromaeo/json.js b/testing/talos/talos/tests/dromaeo/json.js
new file mode 100644
index 0000000000..6fc8ed6227
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/json.js
@@ -0,0 +1,275 @@
+/*
+ json2.js
+ 2008-02-14
+
+ Public Domain
+
+ No warranty expressed or implied. Use at your own risk.
+
+ See http://www.JSON.org/js.html
+
+ This file creates a global JSON object containing two methods:
+
+ JSON.stringify(value, whitelist)
+ value any JavaScript value, usually an object or array.
+
+ whitelist an optional array parameter that determines how object
+ values are stringified.
+
+ This method produces a JSON text from a JavaScript value.
+ There are three possible ways to stringify an object, depending
+ on the optional whitelist parameter.
+
+ If an object has a toJSON method, then the toJSON() method will be
+ called. The value returned from the toJSON method will be
+ stringified.
+
+ Otherwise, if the optional whitelist parameter is an array, then
+ the elements of the array will be used to select members of the
+ object for stringification.
+
+ Otherwise, if there is no whitelist parameter, then all of the
+ members of the object will be stringified.
+
+ Values that do not have JSON representaions, such as undefined or
+ functions, will not be serialized. Such values in objects will be
+ dropped; in arrays will be replaced with null.
+ JSON.stringify(undefined) returns undefined. Dates will be
+ stringified as quoted ISO dates.
+
+ Example:
+
+ var text = JSON.stringify(['e', {pluribus: 'unum'}]);
+ // text is '["e",{"pluribus":"unum"}]'
+
+ JSON.parse(text, filter)
+ This method parses a JSON text to produce an object or
+ array. It can throw a SyntaxError exception.
+
+ The optional filter parameter is a function that can filter and
+ transform the results. It receives each of the keys and values, and
+ its return value is used instead of the original value. If it
+ returns what it received, then structure is not modified. If it
+ returns undefined then the member is deleted.
+
+ Example:
+
+ // Parse the text. If a key contains the string 'date' then
+ // convert the value to a date.
+
+ myData = JSON.parse(text, function (key, value) {
+ return key.indexOf('date') >= 0 ? new Date(value) : value;
+ });
+
+ This is a reference implementation. You are free to copy, modify, or
+ redistribute.
+
+ Use your own copy. It is extremely unwise to load third party
+ code into your pages.
+*/
+
+/*jslint evil: true */
+
+/*global JSON */
+
+/*members "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply,
+ charCodeAt, floor, getUTCDate, getUTCFullYear, getUTCHours,
+ getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join, length,
+ parse, propertyIsEnumerable, prototype, push, replace, stringify, test,
+ toJSON, toString
+*/
+
+if (!this.JSON) {
+
+ JSON = function () {
+
+ function f(n) { // Format integers to have at least two digits.
+ return n < 10 ? '0' + n : n;
+ }
+
+ Date.prototype.toJSON = function () {
+
+// Eventually, this method will be based on the date.toISOString method.
+
+ return this.getUTCFullYear() + '-' +
+ f(this.getUTCMonth() + 1) + '-' +
+ f(this.getUTCDate()) + 'T' +
+ f(this.getUTCHours()) + ':' +
+ f(this.getUTCMinutes()) + ':' +
+ f(this.getUTCSeconds()) + 'Z';
+ };
+
+
+ var m = { // table of character substitutions
+ '\b': '\\b',
+ '\t': '\\t',
+ '\n': '\\n',
+ '\f': '\\f',
+ '\r': '\\r',
+ '"' : '\\"',
+ '\\': '\\\\'
+ };
+
+ function stringify(value, whitelist) {
+ var a, // The array holding the partial texts.
+ i, // The loop counter.
+ k, // The member key.
+ l, // Length.
+ r = /["\\\x00-\x1f\x7f-\x9f]/g,
+ v; // The member value.
+
+ switch (typeof value) {
+ case 'string':
+
+// If the string contains no control characters, no quote characters, and no
+// backslash characters, then we can safely slap some quotes around it.
+// Otherwise we must also replace the offending characters with safe sequences.
+
+ return r.test(value) ?
+ '"' + value.replace(r, function (a) {
+ var c = m[a];
+ if (c) {
+ return c;
+ }
+ c = a.charCodeAt();
+ return '\\u00' + Math.floor(c / 16).toString(16) +
+ (c % 16).toString(16);
+ }) + '"' :
+ '"' + value + '"';
+
+ case 'number':
+
+// JSON numbers must be finite. Encode non-finite numbers as null.
+
+ return isFinite(value) ? String(value) : 'null';
+
+ case 'boolean':
+ case 'null':
+ return String(value);
+
+ case 'object':
+
+// Due to a specification blunder in ECMAScript,
+// typeof null is 'object', so watch out for that case.
+
+ if (!value) {
+ return 'null';
+ }
+
+// If the object has a toJSON method, call it, and stringify the result.
+
+ if (typeof value.toJSON === 'function') {
+ return stringify(value.toJSON());
+ }
+ a = [];
+ if (typeof value.length === 'number' &&
+ !(value.propertyIsEnumerable('length'))) {
+
+// The object is an array. Stringify every element. Use null as a placeholder
+// for non-JSON values.
+
+ l = value.length;
+ for (i = 0; i < l; i += 1) {
+ a.push(stringify(value[i], whitelist) || 'null');
+ }
+
+// Join all of the elements together and wrap them in brackets.
+
+ return '[' + a.join(',') + ']';
+ }
+ if (whitelist) {
+
+// If a whitelist (array of keys) is provided, use it to select the components
+// of the object.
+
+ l = whitelist.length;
+ for (i = 0; i < l; i += 1) {
+ k = whitelist[i];
+ if (typeof k === 'string') {
+ v = stringify(value[k], whitelist);
+ if (v) {
+ a.push(stringify(k) + ':' + v);
+ }
+ }
+ }
+ } else {
+
+// Otherwise, iterate through all of the keys in the object.
+
+ for (k in value) {
+ if (typeof k === 'string') {
+ v = stringify(value[k], whitelist);
+ if (v) {
+ a.push(stringify(k) + ':' + v);
+ }
+ }
+ }
+ }
+
+// Join all of the member texts together and wrap them in braces.
+
+ return '{' + a.join(',') + '}';
+ }
+ }
+
+ return {
+ stringify: stringify,
+ parse: function (text, filter) {
+ var j;
+
+ function walk(k, v) {
+ var i, n;
+ if (v && typeof v === 'object') {
+ for (i in v) {
+ if (Object.prototype.hasOwnProperty.apply(v, [i])) {
+ n = walk(i, v[i]);
+ if (n !== undefined) {
+ v[i] = n;
+ } else {
+ delete v[i];
+ }
+ }
+ }
+ }
+ return filter(k, v);
+ }
+
+
+// Parsing happens in three stages. In the first stage, we run the text against
+// regular expressions that look for non-JSON patterns. We are especially
+// concerned with '()' and 'new' because they can cause invocation, and '='
+// because it can cause mutation. But just to be safe, we want to reject all
+// unexpected forms.
+
+// We split the first stage into 4 regexp operations in order to work around
+// crippling inefficiencies in IE's and Safari's regexp engines. First we
+// replace all backslash pairs with '@' (a non-JSON character). Second, we
+// replace all simple value tokens with ']' characters. Third, we delete all
+// open brackets that follow a colon or comma or that begin the text. Finally,
+// we look to see that the remaining characters are only whitespace or ']' or
+// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.
+
+ if (/^[\],:{}\s]*$/.test(text.replace(/\\./g, '@').
+replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
+replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
+
+// In the second stage we use the eval function to compile the text into a
+// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
+// in JavaScript: it can begin a block or an object literal. We wrap the text
+// in parens to eliminate the ambiguity.
+
+ j = eval('(' + text + ')');
+
+// In the optional third stage, we recursively walk the new structure, passing
+// each name/value pair to a filter function for possible transformation.
+
+ return typeof filter === 'function' ? walk('', j) : j;
+ }
+
+// If the text is not JSON parseable, then a SyntaxError is thrown.
+
+ throw new SyntaxError('parseJSON');
+ }
+ };
+ }();
+}
diff --git a/testing/talos/talos/tests/dromaeo/lib/dojo.js b/testing/talos/talos/tests/dromaeo/lib/dojo.js
new file mode 100644
index 0000000000..3110641259
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/lib/dojo.js
@@ -0,0 +1,8458 @@
+/*
+ Copyright (c) 2004-2008, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+/*
+ This is a compiled version of Dojo, built for deployment and not for
+ development. To get an editable version, please visit:
+
+ http://dojotoolkit.org
+
+ for documentation and information on getting the source.
+*/
+
+;(function(){
+
+ /*
+ dojo, dijit, and dojox must always be the first three, and in that order.
+ djConfig.scopeMap = [
+ ["dojo", "fojo"],
+ ["dijit", "fijit"],
+ ["dojox", "fojox"]
+
+ ]
+ */
+
+ /**Build will replace this comment with a scoped djConfig **/
+
+ //The null below can be relaced by a build-time value used instead of djConfig.scopeMap.
+ var sMap = null;
+
+ //See if new scopes need to be defined.
+ if((sMap || (typeof djConfig != "undefined" && djConfig.scopeMap)) && (typeof window != "undefined")){
+ var scopeDef = "", scopePrefix = "", scopeSuffix = "", scopeMap = {}, scopeMapRev = {};
+ sMap = sMap || djConfig.scopeMap;
+ for(var i = 0; i < sMap.length; i++){
+ //Make local variables, then global variables that use the locals.
+ var newScope = sMap[i];
+ scopeDef += "var " + newScope[0] + " = {}; " + newScope[1] + " = " + newScope[0] + ";" + newScope[1] + "._scopeName = '" + newScope[1] + "';";
+ scopePrefix += (i == 0 ? "" : ",") + newScope[0];
+ scopeSuffix += (i == 0 ? "" : ",") + newScope[1];
+ scopeMap[newScope[0]] = newScope[1];
+ scopeMapRev[newScope[1]] = newScope[0];
+ }
+
+ eval(scopeDef + "dojo._scopeArgs = [" + scopeSuffix + "];");
+
+ dojo._scopePrefixArgs = scopePrefix;
+ dojo._scopePrefix = "(function(" + scopePrefix + "){";
+ dojo._scopeSuffix = "})(" + scopeSuffix + ")";
+ dojo._scopeMap = scopeMap;
+ dojo._scopeMapRev = scopeMapRev;
+ }
+
+/*=====
+// note:
+// 'djConfig' does not exist under 'dojo.*' so that it can be set before the
+// 'dojo' variable exists.
+// note:
+// Setting any of these variables *after* the library has loaded does
+// nothing at all.
+
+djConfig = {
+ // summary:
+ // Application code can set the global 'djConfig' prior to loading
+ // the library to override certain global settings for how dojo works.
+ //
+ // isDebug: Boolean
+ // Defaults to `false`. If set to `true`, ensures that Dojo provides
+ // extended debugging feedback via Firebug. If Firebug is not available
+ // on your platform, setting `isDebug` to `true` will force Dojo to
+ // pull in (and display) the version of Firebug Lite which is
+ // integrated into the Dojo distribution, thereby always providing a
+ // debugging/logging console when `isDebug` is enabled. Note that
+ // Firebug's `console.*` methods are ALWAYS defined by Dojo. If
+ // `isDebug` is false and you are on a platform without Firebug, these
+ // methods will be defined as no-ops.
+ isDebug: false,
+ // debugAtAllCosts: Boolean
+ // Defaults to `false`. If set to `true`, this triggers an alternate
+ // mode of the package system in which dependencies are detected and
+ // only then are resources evaluated in dependency order via
+ // `<script>` tag inclusion. This may double-request resources and
+ // cause problems with scripts which expect `dojo.require()` to
+ // preform synchronously. `debugAtAllCosts` can be an invaluable
+ // debugging aid, but when using it, ensure that all code which
+ // depends on Dojo modules is wrapped in `dojo.addOnLoad()` handlers.
+ // Due to the somewhat unpredictable side-effects of using
+ // `debugAtAllCosts`, it is strongly recommended that you enable this
+ // flag as a last resort. `debugAtAllCosts` has no effect when loading
+ // resources across domains. For usage information, see the
+ // [Dojo Book](http://dojotoolkit.org/book/book-dojo/part-4-meta-dojo-making-your-dojo-code-run-faster-and-better/debugging-facilities/deb)
+ debugAtAllCosts: false,
+ // locale: String
+ // The locale to assume for loading localized resources in this page,
+ // specified according to [RFC 3066](http://www.ietf.org/rfc/rfc3066.txt).
+ // Must be specified entirely in lowercase, e.g. `en-us` and `zh-cn`.
+ // See the documentation for `dojo.i18n` and `dojo.requireLocalization`
+ // for details on loading localized resources. If no locale is specified,
+ // Dojo assumes the locale of the user agent, according to `navigator.userLanguage`
+ // or `navigator.language` properties.
+ locale: undefined,
+ // extraLocale: Array
+ // No default value. Specifies additional locales whose
+ // resources should also be loaded alongside the default locale when
+ // calls to `dojo.requireLocalization()` are processed.
+ extraLocale: undefined,
+ // baseUrl: String
+ // The directory in which `dojo.js` is located. Under normal
+ // conditions, Dojo auto-detects the correct location from which it
+ // was loaded. You may need to manually configure `baseUrl` in cases
+ // where you have renamed `dojo.js` or in which `<base>` tags confuse
+ // some browsers (e.g. IE 6). The variable `dojo.baseUrl` is assigned
+ // either the value of `djConfig.baseUrl` if one is provided or the
+ // auto-detected root if not. Other modules are located relative to
+ // this path.
+ baseUrl: undefined,
+ // modulePaths: Object
+ // A map of module names to paths relative to `dojo.baseUrl`. The
+ // key/value pairs correspond directly to the arguments which
+ // `dojo.registerModulePath` accepts. Specifiying
+ // `djConfig.modulePaths = { "foo": "../../bar" }` is the equivalent
+ // of calling `dojo.registerModulePath("foo", "../../bar");`. Multiple
+ // modules may be configured via `djConfig.modulePaths`.
+ modulePaths: {},
+ // afterOnLoad: Boolean
+ // Indicates Dojo was added to the page after the page load. In this case
+ // Dojo will not wait for the page DOMContentLoad/load events and fire
+ // its dojo.addOnLoad callbacks after making sure all outstanding
+ // dojo.required modules have loaded.
+ afterOnLoad: false,
+ // addOnLoad: Function or Array
+ // Adds a callback via dojo.addOnLoad. Useful when Dojo is added after
+ // the page loads and djConfig.afterOnLoad is true. Supports the same
+ // arguments as dojo.addOnLoad. When using a function reference, use
+ // `djConfig.addOnLoad = function(){};`. For object with function name use
+ // `djConfig.addOnLoad = [myObject, "functionName"];` and for object with
+ // function reference use
+ // `djConfig.addOnLoad = [myObject, function(){}];`
+ addOnLoad: null,
+ // require: Array
+ // An array of module names to be loaded immediately after dojo.js has been included
+ // in a page.
+ require: []
+}
+=====*/
+
+(function(){
+ // firebug stubs
+
+ // if((!this["console"])||(!console["firebug"])){
+
+ if(!this["console"]){
+ this.console = {
+ };
+ }
+
+ // Be careful to leave 'log' always at the end
+ var cn = [
+ "assert", "count", "debug", "dir", "dirxml", "error", "group",
+ "groupEnd", "info", "profile", "profileEnd", "time", "timeEnd",
+ "trace", "warn", "log"
+ ];
+ var i=0, tn;
+ while((tn=cn[i++])){
+ if(!console[tn]){
+ (function(){
+ var tcn = tn+"";
+ console[tcn] = ('log' in console) ? function(){
+ var a = Array.apply({}, arguments);
+ a.unshift(tcn+":");
+ console["log"](a.join(" "));
+ } : function(){}
+ })();
+ }
+ }
+
+ //TODOC: HOW TO DOC THIS?
+ // dojo is the root variable of (almost all) our public symbols -- make sure it is defined.
+ if(typeof dojo == "undefined"){
+ this.dojo = {
+ _scopeName: "dojo",
+ _scopePrefix: "",
+ _scopePrefixArgs: "",
+ _scopeSuffix: "",
+ _scopeMap: {},
+ _scopeMapRev: {}
+ };
+ }
+
+ var d = dojo;
+
+ //Need placeholders for dijit and dojox for scoping code.
+ if(typeof dijit == "undefined"){
+ this.dijit = {_scopeName: "dijit"};
+ }
+ if(typeof dojox == "undefined"){
+ this.dojox = {_scopeName: "dojox"};
+ }
+
+ if(!d._scopeArgs){
+ d._scopeArgs = [dojo, dijit, dojox];
+ }
+
+/*=====
+dojo.global = {
+ // summary:
+ // Alias for the global scope
+ // (e.g. the window object in a browser).
+ // description:
+ // Refer to 'dojo.global' rather than referring to window to ensure your
+ // code runs correctly in contexts other than web browsers (e.g. Rhino on a server).
+}
+=====*/
+ d.global = this;
+
+ d.config =/*===== djConfig = =====*/{
+ isDebug: false,
+ debugAtAllCosts: false
+ };
+
+ if(typeof djConfig != "undefined"){
+ for(var opt in djConfig){
+ d.config[opt] = djConfig[opt];
+ }
+ }
+
+ var _platforms = ["Browser", "Rhino", "Spidermonkey", "Mobile"];
+ var t;
+ while((t=_platforms.shift())){
+ d["is"+t] = false;
+ }
+
+/*=====
+ // Override locale setting, if specified
+ dojo.locale = {
+ // summary: the locale as defined by Dojo (read-only)
+ };
+=====*/
+ dojo.locale = d.config.locale;
+
+ var rev = "$Rev: 15729 $".match(/\d+/);
+
+ dojo.version = {
+ // summary:
+ // version number of dojo
+ // major: Integer
+ // Major version. If total version is "1.2.0beta1", will be 1
+ // minor: Integer
+ // Minor version. If total version is "1.2.0beta1", will be 2
+ // patch: Integer
+ // Patch version. If total version is "1.2.0beta1", will be 0
+ // flag: String
+ // Descriptor flag. If total version is "1.2.0beta1", will be "beta1"
+ // revision: Number
+ // The SVN rev from which dojo was pulled
+ major: 1, minor: 2, patch: 2, flag: "",
+ revision: rev ? +rev[0] : 999999, //FIXME: use NaN?
+ toString: function(){
+ with(d.version){
+ return major + "." + minor + "." + patch + flag + " (" + revision + ")"; // String
+ }
+ }
+ }
+
+ // Register with the OpenAjax hub
+ if(typeof OpenAjax != "undefined"){
+ OpenAjax.hub.registerLibrary(dojo._scopeName, "http://dojotoolkit.org", d.version.toString());
+ }
+
+ dojo._mixin = function(/*Object*/ obj, /*Object*/ props){
+ // summary:
+ // Adds all properties and methods of props to obj. This addition
+ // is "prototype extension safe", so that instances of objects
+ // will not pass along prototype defaults.
+ var tobj = {};
+ for(var x in props){
+ // the "tobj" condition avoid copying properties in "props"
+ // inherited from Object.prototype. For example, if obj has a custom
+ // toString() method, don't overwrite it with the toString() method
+ // that props inherited from Object.prototype
+ if(tobj[x] === undefined || tobj[x] != props[x]){
+ obj[x] = props[x];
+ }
+ }
+ // IE doesn't recognize custom toStrings in for..in
+ if(d["isIE"] && props){
+ var p = props.toString;
+ if(typeof p == "function" && p != obj.toString && p != tobj.toString &&
+ p != "\nfunction toString() {\n [native code]\n}\n"){
+ obj.toString = props.toString;
+ }
+ }
+ return obj; // Object
+ }
+
+ dojo.mixin = function(/*Object*/obj, /*Object...*/props){
+ // summary:
+ // Adds all properties and methods of props to obj and returns the
+ // (now modified) obj.
+ // description:
+ // `dojo.mixin` can mix multiple source objects into a
+ // destionation object which is then returned. Unlike regular
+ // `for...in` iteration, `dojo.mixin` is also smart about avoiding
+ // extensions which other toolkits may unwisely add to the root
+ // object prototype
+ // obj:
+ // The object to mix properties into. Also the return value.
+ // props:
+ // One or more objects whose values are successively copied into
+ // obj. If more than one of these objects contain the same value,
+ // the one specified last in the function call will "win".
+ // example:
+ // make a shallow copy of an object
+ // | var copy = dojo.mixin({}, source);
+ // example:
+ // many class constructors often take an object which specifies
+ // values to be configured on the object. In this case, it is
+ // often simplest to call `dojo.mixin` on the `this` object:
+ // | dojo.declare("acme.Base", null, {
+ // | constructor: function(properties){
+ // | // property configuration:
+ // | dojo.mixin(this, properties);
+ // |
+ // |
+ // | // ...
+ // | },
+ // | quip: "I wasn't born yesterday, you know - I've seen movies.",
+ // | // ...
+ // | });
+ // |
+ // | // create an instance of the class and configure it
+ // | var b = new acme.Base({quip: "That's what it does!" });
+ // example:
+ // copy in properties from multiple objects
+ // | var flattened = dojo.mixin(
+ // | {
+ // | name: "Frylock",
+ // | braces: true
+ // | },
+ // | {
+ // | name: "Carl Brutanananadilewski"
+ // | }
+ // | );
+ // |
+ // | // will print "Carl Brutanananadilewski"
+ // |
+ // | // will print "true"
+ // |
+ for(var i=1, l=arguments.length; i<l; i++){
+ d._mixin(obj, arguments[i]);
+ }
+ return obj; // Object
+ }
+
+ dojo._getProp = function(/*Array*/parts, /*Boolean*/create, /*Object*/context){
+ var obj=context || d.global;
+ for(var i=0, p; obj && (p=parts[i]); i++){
+ if(i == 0 && this._scopeMap[p]){
+ p = this._scopeMap[p];
+ }
+ obj = (p in obj ? obj[p] : (create ? obj[p]={} : undefined));
+ }
+ return obj; // mixed
+ }
+
+ dojo.setObject = function(/*String*/name, /*Object*/value, /*Object?*/context){
+ // summary:
+ // Set a property from a dot-separated string, such as "A.B.C"
+ // description:
+ // Useful for longer api chains where you have to test each object in
+ // the chain, or when you have an object reference in string format.
+ // Objects are created as needed along `path`. Returns the passed
+ // value if setting is successful or `undefined` if not.
+ // name:
+ // Path to a property, in the form "A.B.C".
+ // context:
+ // Optional. Object to use as root of path. Defaults to
+ // `dojo.global`.
+ // example:
+ // set the value of `foo.bar.baz`, regardless of whether
+ // intermediate objects already exist:
+ // | dojo.setObject("foo.bar.baz", value);
+ // example:
+ // without `dojo.setObject`, we often see code like this:
+ // | // ensure that intermediate objects are available
+ // | if(!obj["parent"]){ obj.parent = {}; }
+ // | if(!obj.parent["child"]){ obj.parent.child= {}; }
+ // | // now we can safely set the property
+ // | obj.parent.child.prop = "some value";
+ // wheras with `dojo.setObject`, we can shorten that to:
+ // | dojo.setObject("parent.child.prop", "some value", obj);
+ var parts=name.split("."), p=parts.pop(), obj=d._getProp(parts, true, context);
+ return obj && p ? (obj[p]=value) : undefined; // Object
+ }
+
+ dojo.getObject = function(/*String*/name, /*Boolean*/create, /*Object*/context){
+ // summary:
+ // Get a property from a dot-separated string, such as "A.B.C"
+ // description:
+ // Useful for longer api chains where you have to test each object in
+ // the chain, or when you have an object reference in string format.
+ // name:
+ // Path to an property, in the form "A.B.C".
+ // context:
+ // Optional. Object to use as root of path. Defaults to
+ // 'dojo.global'. Null may be passed.
+ // create:
+ // Optional. Defaults to `false`. If `true`, Objects will be
+ // created at any point along the 'path' that is undefined.
+ return d._getProp(name.split("."), create, context); // Object
+ }
+
+ dojo.exists = function(/*String*/name, /*Object?*/obj){
+ // summary:
+ // determine if an object supports a given method
+ // description:
+ // useful for longer api chains where you have to test each object in
+ // the chain
+ // name:
+ // Path to an object, in the form "A.B.C".
+ // obj:
+ // Object to use as root of path. Defaults to
+ // 'dojo.global'. Null may be passed.
+ // example:
+ // | // define an object
+ // | var foo = {
+ // | bar: { }
+ // | };
+ // |
+ // | // search the global scope
+ // | dojo.exists("foo.bar"); // true
+ // | dojo.exists("foo.bar.baz"); // false
+ // |
+ // | // search from a particular scope
+ // | dojo.exists("bar", foo); // true
+ // | dojo.exists("bar.baz", foo); // false
+ return !!d.getObject(name, false, obj); // Boolean
+ }
+
+
+ dojo["eval"] = function(/*String*/ scriptFragment){
+ // summary:
+ // Perform an evaluation in the global scope. Use this rather than
+ // calling 'eval()' directly.
+ // description:
+ // Placed in a separate function to minimize size of trapped
+ // exceptions. Calling eval() directly from some other scope may
+ // complicate tracebacks on some platforms.
+ // returns:
+ // The result of the evaluation. Often `undefined`
+
+
+ // note:
+ // - JSC eval() takes an optional second argument which can be 'unsafe'.
+ // - Mozilla/SpiderMonkey eval() takes an optional second argument which is the
+ // scope object for new symbols.
+
+ // FIXME: investigate Joseph Smarr's technique for IE:
+ // http://josephsmarr.com/2007/01/31/fixing-eval-to-use-global-scope-in-ie/
+ // see also:
+ // http://trac.dojotoolkit.org/ticket/744
+ return d.global.eval ? d.global.eval(scriptFragment) : eval(scriptFragment); // Object
+ }
+
+ /*=====
+ dojo.deprecated = function(behaviour, extra, removal){
+ // summary:
+ // Log a debug message to indicate that a behavior has been
+ // deprecated.
+ // behaviour: String
+ // The API or behavior being deprecated. Usually in the form
+ // of "myApp.someFunction()".
+ // extra: String?
+ // Text to append to the message. Often provides advice on a
+ // new function or facility to achieve the same goal during
+ // the deprecation period.
+ // removal: String?
+ // Text to indicate when in the future the behavior will be
+ // removed. Usually a version number.
+ // example:
+ // | dojo.deprecated("myApp.getTemp()", "use myApp.getLocaleTemp() instead", "1.0");
+ }
+
+ dojo.experimental = function(moduleName, extra){
+ // summary: Marks code as experimental.
+ // description:
+ // This can be used to mark a function, file, or module as
+ // experimental. Experimental code is not ready to be used, and the
+ // APIs are subject to change without notice. Experimental code may be
+ // completed deleted without going through the normal deprecation
+ // process.
+ // moduleName: String
+ // The name of a module, or the name of a module file or a specific
+ // function
+ // extra: String?
+ // some additional message for the user
+ // example:
+ // | dojo.experimental("dojo.data.Result");
+ // example:
+ // | dojo.experimental("dojo.weather.toKelvin()", "PENDING approval from NOAA");
+ }
+ =====*/
+
+ //Real functions declared in dojo._firebug.firebug.
+ d.deprecated = d.experimental = function(){};
+
+})();
+// vim:ai:ts=4:noet
+
+/*
+ * loader.js - A bootstrap module. Runs before the hostenv_*.js file. Contains
+ * all of the package loading methods.
+ */
+
+(function(){
+ var d = dojo;
+
+ d.mixin(d, {
+ _loadedModules: {},
+ _inFlightCount: 0,
+ _hasResource: {},
+
+ _modulePrefixes: {
+ dojo: { name: "dojo", value: "." },
+ // dojox: { name: "dojox", value: "../dojox" },
+ // dijit: { name: "dijit", value: "../dijit" },
+ doh: { name: "doh", value: "../util/doh" },
+ tests: { name: "tests", value: "tests" }
+ },
+
+ _moduleHasPrefix: function(/*String*/module){
+ // summary: checks to see if module has been established
+ var mp = this._modulePrefixes;
+ return !!(mp[module] && mp[module].value); // Boolean
+ },
+
+ _getModulePrefix: function(/*String*/module){
+ // summary: gets the prefix associated with module
+ var mp = this._modulePrefixes;
+ if(this._moduleHasPrefix(module)){
+ return mp[module].value; // String
+ }
+ return module; // String
+ },
+
+ _loadedUrls: [],
+
+ //WARNING:
+ // This variable is referenced by packages outside of bootstrap:
+ // FloatingPane.js and undo/browser.js
+ _postLoad: false,
+
+ //Egad! Lots of test files push on this directly instead of using dojo.addOnLoad.
+ _loaders: [],
+ _unloaders: [],
+ _loadNotifying: false
+ });
+
+
+ dojo._loadPath = function(/*String*/relpath, /*String?*/module, /*Function?*/cb){
+ // summary:
+ // Load a Javascript module given a relative path
+ //
+ // description:
+ // Loads and interprets the script located at relpath, which is
+ // relative to the script root directory. If the script is found but
+ // its interpretation causes a runtime exception, that exception is
+ // not caught by us, so the caller will see it. We return a true
+ // value if and only if the script is found.
+ //
+ // relpath:
+ // A relative path to a script (no leading '/', and typically ending
+ // in '.js').
+ // module:
+ // A module whose existance to check for after loading a path. Can be
+ // used to determine success or failure of the load.
+ // cb:
+ // a callback function to pass the result of evaluating the script
+
+ var uri = ((relpath.charAt(0) == '/' || relpath.match(/^\w+:/)) ? "" : this.baseUrl) + relpath;
+ try{
+ return !module ? this._loadUri(uri, cb) : this._loadUriAndCheck(uri, module, cb); // Boolean
+ }catch(e){
+ console.error(e);
+ return false; // Boolean
+ }
+ }
+
+ dojo._loadUri = function(/*String*/uri, /*Function?*/cb){
+ // summary:
+ // Loads JavaScript from a URI
+ // description:
+ // Reads the contents of the URI, and evaluates the contents. This is
+ // used to load modules as well as resource bundles. Returns true if
+ // it succeeded. Returns false if the URI reading failed. Throws if
+ // the evaluation throws.
+ // uri: a uri which points at the script to be loaded
+ // cb:
+ // a callback function to process the result of evaluating the script
+ // as an expression, typically used by the resource bundle loader to
+ // load JSON-style resources
+
+ if(this._loadedUrls[uri]){
+ return true; // Boolean
+ }
+ var contents = this._getText(uri, true);
+ if(!contents){ return false; } // Boolean
+ this._loadedUrls[uri] = true;
+ this._loadedUrls.push(uri);
+ if(cb){
+ contents = '('+contents+')';
+ }else{
+ //Only do the scoping if no callback. If a callback is specified,
+ //it is most likely the i18n bundle stuff.
+ contents = this._scopePrefix + contents + this._scopeSuffix;
+ }
+ if(d.isMoz){ contents += "\r\n//@ sourceURL=" + uri; } // debugging assist for Firebug
+ var value = d["eval"](contents);
+ if(cb){ cb(value); }
+ return true; // Boolean
+ }
+
+ // FIXME: probably need to add logging to this method
+ dojo._loadUriAndCheck = function(/*String*/uri, /*String*/moduleName, /*Function?*/cb){
+ // summary: calls loadUri then findModule and returns true if both succeed
+ var ok = false;
+ try{
+ ok = this._loadUri(uri, cb);
+ }catch(e){
+ console.error("failed loading " + uri + " with error: " + e);
+ }
+ return !!(ok && this._loadedModules[moduleName]); // Boolean
+ }
+
+ dojo.loaded = function(){
+ // summary:
+ // signal fired when initial environment and package loading is
+ // complete. You may use dojo.addOnLoad() or dojo.connect() to
+ // this method in order to handle initialization tasks that
+ // require the environment to be initialized. In a browser host,
+ // declarative widgets will be constructed when this function
+ // finishes runing.
+ this._loadNotifying = true;
+ this._postLoad = true;
+ var mll = d._loaders;
+
+ //Clear listeners so new ones can be added
+ //For other xdomain package loads after the initial load.
+ this._loaders = [];
+
+ for(var x = 0; x < mll.length; x++){
+ mll[x]();
+ }
+
+ this._loadNotifying = false;
+
+ //Make sure nothing else got added to the onload queue
+ //after this first run. If something did, and we are not waiting for any
+ //more inflight resources, run again.
+ if(d._postLoad && d._inFlightCount == 0 && mll.length){
+ d._callLoaded();
+ }
+ }
+
+ dojo.unloaded = function(){
+ // summary:
+ // signal fired by impending environment destruction. You may use
+ // dojo.addOnUnload() or dojo.connect() to this method to perform
+ // page/application cleanup methods. See dojo.addOnUnload for more info.
+ var mll = this._unloaders;
+ while(mll.length){
+ (mll.pop())();
+ }
+ }
+
+ d._onto = function(arr, obj, fn){
+ if(!fn){
+ arr.push(obj);
+ }else if(fn){
+ var func = (typeof fn == "string") ? obj[fn] : fn;
+ arr.push(function(){ func.call(obj); });
+ }
+ }
+
+ dojo.addOnLoad = function(/*Object?*/obj, /*String|Function*/functionName){
+ // summary:
+ // Registers a function to be triggered after the DOM has finished
+ // loading and widgets declared in markup have been instantiated.
+ // Images and CSS files may or may not have finished downloading when
+ // the specified function is called. (Note that widgets' CSS and HTML
+ // code is guaranteed to be downloaded before said widgets are
+ // instantiated.)
+ // example:
+ // | dojo.addOnLoad(functionPointer);
+ // | dojo.addOnLoad(object, "functionName");
+ // | dojo.addOnLoad(object, function(){ /* ... */});
+
+ d._onto(d._loaders, obj, functionName);
+
+ //Added for xdomain loading. dojo.addOnLoad is used to
+ //indicate callbacks after doing some dojo.require() statements.
+ //In the xdomain case, if all the requires are loaded (after initial
+ //page load), then immediately call any listeners.
+ if(d._postLoad && d._inFlightCount == 0 && !d._loadNotifying){
+ d._callLoaded();
+ }
+ }
+
+ //Support calling dojo.addOnLoad via djConfig.addOnLoad. Support all the
+ //call permutations of dojo.addOnLoad. Mainly useful when dojo is added
+ //to the page after the page has loaded.
+ var dca = d.config.addOnLoad;
+ if(dca){
+ d.addOnLoad[(dca instanceof Array ? "apply" : "call")](d, dca);
+ }
+
+ dojo.addOnUnload = function(/*Object?*/obj, /*String|Function?*/functionName){
+ // summary:
+ // registers a function to be triggered when the page unloads. In a browser
+ // enviroment, the functions will be triggered during the window.onbeforeunload
+ // event. Be careful doing work during window.onbeforeunload. onbeforeunload
+ // can be triggered if a link to download a file is clicked, or if the link is a
+ // javascript: link. In these cases, the onbeforeunload event fires, but the
+ // document is not actually destroyed. So be careful about doing destructive
+ // operations in a dojo.addOnUnload callback.
+ // example:
+ // | dojo.addOnUnload(functionPointer)
+ // | dojo.addOnUnload(object, "functionName")
+ // | dojo.addOnUnload(object, function(){ /* ... */});
+
+ d._onto(d._unloaders, obj, functionName);
+ }
+
+ dojo._modulesLoaded = function(){
+ if(d._postLoad){ return; }
+ if(d._inFlightCount > 0){
+ console.warn("files still in flight!");
+ return;
+ }
+ d._callLoaded();
+ }
+
+ dojo._callLoaded = function(){
+
+ // The "object" check is for IE, and the other opera check fixes an
+ // issue in Opera where it could not find the body element in some
+ // widget test cases. For 0.9, maybe route all browsers through the
+ // setTimeout (need protection still for non-browser environments
+ // though). This might also help the issue with FF 2.0 and freezing
+ // issues where we try to do sync xhr while background css images are
+ // being loaded (trac #2572)? Consider for 0.9.
+ if(typeof setTimeout == "object" || (dojo.config.useXDomain && d.isOpera)){
+ if(dojo.isAIR){
+ setTimeout(function(){dojo.loaded();}, 0);
+ }else{
+ setTimeout(dojo._scopeName + ".loaded();", 0);
+ }
+ }else{
+ d.loaded();
+ }
+ }
+
+ dojo._getModuleSymbols = function(/*String*/modulename){
+ // summary:
+ // Converts a module name in dotted JS notation to an array
+ // representing the path in the source tree
+ var syms = modulename.split(".");
+ for(var i = syms.length; i>0; i--){
+ var parentModule = syms.slice(0, i).join(".");
+ if((i==1) && !this._moduleHasPrefix(parentModule)){
+ // Support default module directory (sibling of dojo) for top-level modules
+ syms[0] = "../" + syms[0];
+ }else{
+ var parentModulePath = this._getModulePrefix(parentModule);
+ if(parentModulePath != parentModule){
+ syms.splice(0, i, parentModulePath);
+ break;
+ }
+ }
+ }
+ //
+ return syms; // Array
+ }
+
+ dojo._global_omit_module_check = false;
+
+ dojo.loadInit = function(/*Function*/init){
+ // summary:
+ // Executes a function that needs to be executed for the loader's dojo.requireIf
+ // resolutions to work. This is needed mostly for the xdomain loader case where
+ // a function needs to be executed to set up the possible values for a dojo.requireIf
+ // call.
+ // init:
+ // a function reference. Executed immediately.
+ // description: This function is mainly a marker for the xdomain loader to know parts of
+ // code that needs be executed outside the function wrappper that is placed around modules.
+ // The init function could be executed more than once, and it should make no assumptions
+ // on what is loaded, or what modules are available. Only the functionality in Dojo Base
+ // is allowed to be used. Avoid using this method. For a valid use case,
+ // see the source for dojox.gfx.
+ init();
+ }
+
+ dojo._loadModule = dojo.require = function(/*String*/moduleName, /*Boolean?*/omitModuleCheck){
+ // summary:
+ // loads a Javascript module from the appropriate URI
+ // moduleName:
+ // module name to load, using periods for separators,
+ // e.g. "dojo.date.locale". Module paths are de-referenced by dojo's
+ // internal mapping of locations to names and are disambiguated by
+ // longest prefix. See `dojo.registerModulePath()` for details on
+ // registering new modules.
+ // omitModuleCheck:
+ // if `true`, omitModuleCheck skips the step of ensuring that the
+ // loaded file actually defines the symbol it is referenced by.
+ // For example if it called as `dojo.require("a.b.c")` and the
+ // file located at `a/b/c.js` does not define an object `a.b.c`,
+ // and exception will be throws whereas no exception is raised
+ // when called as `dojo.require("a.b.c", true)`
+ // description:
+ // `dojo.require("A.B")` first checks to see if symbol A.B is
+ // defined. If it is, it is simply returned (nothing to do).
+ //
+ // If it is not defined, it will look for `A/B.js` in the script root
+ // directory.
+ //
+ // `dojo.require` throws an excpetion if it cannot find a file
+ // to load, or if the symbol `A.B` is not defined after loading.
+ //
+ // It returns the object `A.B`.
+ //
+ // `dojo.require()` does nothing about importing symbols into
+ // the current namespace. It is presumed that the caller will
+ // take care of that. For example, to import all symbols into a
+ // local block, you might write:
+ //
+ // | with (dojo.require("A.B")) {
+ // | ...
+ // | }
+ //
+ // And to import just the leaf symbol to a local variable:
+ //
+ // | var B = dojo.require("A.B");
+ // | ...
+ // returns: the required namespace object
+ omitModuleCheck = this._global_omit_module_check || omitModuleCheck;
+
+ //Check if it is already loaded.
+ var module = this._loadedModules[moduleName];
+ if(module){
+ return module;
+ }
+
+ // convert periods to slashes
+ var relpath = this._getModuleSymbols(moduleName).join("/") + '.js';
+
+ var modArg = (!omitModuleCheck) ? moduleName : null;
+ var ok = this._loadPath(relpath, modArg);
+
+ if(!ok && !omitModuleCheck){
+ throw new Error("Could not load '" + moduleName + "'; last tried '" + relpath + "'");
+ }
+
+ // check that the symbol was defined
+ // Don't bother if we're doing xdomain (asynchronous) loading.
+ if(!omitModuleCheck && !this._isXDomain){
+ // pass in false so we can give better error
+ module = this._loadedModules[moduleName];
+ if(!module){
+ throw new Error("symbol '" + moduleName + "' is not defined after loading '" + relpath + "'");
+ }
+ }
+
+ return module;
+ }
+
+ dojo.provide = function(/*String*/ resourceName){
+ // summary:
+ // Each javascript source file must have at least one
+ // `dojo.provide()` call at the top of the file, corresponding to
+ // the file name. For example, `js/dojo/foo.js` must have
+ // `dojo.provide("dojo.foo");` before any calls to
+ // `dojo.require()` are made.
+ // description:
+ // Each javascript source file is called a resource. When a
+ // resource is loaded by the browser, `dojo.provide()` registers
+ // that it has been loaded.
+ //
+ // For backwards compatibility reasons, in addition to registering
+ // the resource, `dojo.provide()` also ensures that the javascript
+ // object for the module exists. For example,
+ // `dojo.provide("dojox.data.FlickrStore")`, in addition to
+ // registering that `FlickrStore.js` is a resource for the
+ // `dojox.data` module, will ensure that the `dojox.data`
+ // javascript object exists, so that calls like
+ // `dojo.data.foo = function(){ ... }` don't fail.
+ //
+ // In the case of a build where multiple javascript source files
+ // are combined into one bigger file (similar to a .lib or .jar
+ // file), that file may contain multiple dojo.provide() calls, to
+ // note that it includes multiple resources.
+
+ //Make sure we have a string.
+ resourceName = resourceName + "";
+ return (d._loadedModules[resourceName] = d.getObject(resourceName, true)); // Object
+ }
+
+ //Start of old bootstrap2:
+
+ dojo.platformRequire = function(/*Object*/modMap){
+ // summary:
+ // require one or more modules based on which host environment
+ // Dojo is currently operating in
+ // description:
+ // This method takes a "map" of arrays which one can use to
+ // optionally load dojo modules. The map is indexed by the
+ // possible dojo.name_ values, with two additional values:
+ // "default" and "common". The items in the "default" array will
+ // be loaded if none of the other items have been choosen based on
+ // dojo.name_, set by your host environment. The items in the
+ // "common" array will *always* be loaded, regardless of which
+ // list is chosen.
+ // example:
+ // | dojo.platformRequire({
+ // | browser: [
+ // | "foo.sample", // simple module
+ // | "foo.test",
+ // | ["foo.bar.baz", true] // skip object check in _loadModule (dojo.require)
+ // | ],
+ // | default: [ "foo.sample._base" ],
+ // | common: [ "important.module.common" ]
+ // | });
+
+ var common = modMap.common || [];
+ var result = common.concat(modMap[d._name] || modMap["default"] || []);
+
+ for(var x=0; x<result.length; x++){
+ var curr = result[x];
+ if(curr.constructor == Array){
+ d._loadModule.apply(d, curr);
+ }else{
+ d._loadModule(curr);
+ }
+ }
+ }
+
+ dojo.requireIf = function(/*Boolean*/ condition, /*String*/ resourceName){
+ // summary:
+ // If the condition is true then call dojo.require() for the specified
+ // resource
+ if(condition === true){
+ // FIXME: why do we support chained require()'s here? does the build system?
+ var args = [];
+ for(var i = 1; i < arguments.length; i++){
+ args.push(arguments[i]);
+ }
+ d.require.apply(d, args);
+ }
+ }
+
+ dojo.requireAfterIf = d.requireIf;
+
+ dojo.registerModulePath = function(/*String*/module, /*String*/prefix){
+ // summary:
+ // maps a module name to a path
+ // description:
+ // An unregistered module is given the default path of ../[module],
+ // relative to Dojo root. For example, module acme is mapped to
+ // ../acme. If you want to use a different module name, use
+ // dojo.registerModulePath.
+ // example:
+ // If your dojo.js is located at this location in the web root:
+ // | /myapp/js/dojo/dojo/dojo.js
+ // and your modules are located at:
+ // | /myapp/js/foo/bar.js
+ // | /myapp/js/foo/baz.js
+ // | /myapp/js/foo/thud/xyzzy.js
+ // Your application can tell Dojo to locate the "foo" namespace by calling:
+ // | dojo.registerModulePath("foo", "../../foo");
+ // At which point you can then use dojo.require() to load the
+ // modules (assuming they provide() the same things which are
+ // required). The full code might be:
+ // | <script type="text/javascript"
+ // | src="/myapp/js/dojo/dojo/dojo.js"></script>
+ // | <script type="text/javascript">
+ // | dojo.registerModulePath("foo", "../../foo");
+ // | dojo.require("foo.bar");
+ // | dojo.require("foo.baz");
+ // | dojo.require("foo.thud.xyzzy");
+ // | </script>
+ d._modulePrefixes[module] = { name: module, value: prefix };
+ }
+
+ dojo.requireLocalization = function(/*String*/moduleName, /*String*/bundleName, /*String?*/locale, /*String?*/availableFlatLocales){
+ // summary:
+ // Declares translated resources and loads them if necessary, in the
+ // same style as dojo.require. Contents of the resource bundle are
+ // typically strings, but may be any name/value pair, represented in
+ // JSON format. See also `dojo.i18n.getLocalization`.
+ //
+ // description:
+ // Load translated resource bundles provided underneath the "nls"
+ // directory within a package. Translated resources may be located in
+ // different packages throughout the source tree.
+ //
+ // Each directory is named for a locale as specified by RFC 3066,
+ // (http://www.ietf.org/rfc/rfc3066.txt), normalized in lowercase.
+ // Note that the two bundles in the example do not define all the
+ // same variants. For a given locale, bundles will be loaded for
+ // that locale and all more general locales above it, including a
+ // fallback at the root directory. For example, a declaration for
+ // the "de-at" locale will first load `nls/de-at/bundleone.js`,
+ // then `nls/de/bundleone.js` and finally `nls/bundleone.js`. The
+ // data will be flattened into a single Object so that lookups
+ // will follow this cascading pattern. An optional build step can
+ // preload the bundles to avoid data redundancy and the multiple
+ // network hits normally required to load these resources.
+ //
+ // moduleName:
+ // name of the package containing the "nls" directory in which the
+ // bundle is found
+ //
+ // bundleName:
+ // bundle name, i.e. the filename without the '.js' suffix
+ //
+ // locale:
+ // the locale to load (optional) By default, the browser's user
+ // locale as defined by dojo.locale
+ //
+ // availableFlatLocales:
+ // A comma-separated list of the available, flattened locales for this
+ // bundle. This argument should only be set by the build process.
+ //
+ // example:
+ // A particular widget may define one or more resource bundles,
+ // structured in a program as follows, where moduleName is
+ // mycode.mywidget and bundleNames available include bundleone and
+ // bundletwo:
+ // | ...
+ // | mycode/
+ // | mywidget/
+ // | nls/
+ // | bundleone.js (the fallback translation, English in this example)
+ // | bundletwo.js (also a fallback translation)
+ // | de/
+ // | bundleone.js
+ // | bundletwo.js
+ // | de-at/
+ // | bundleone.js
+ // | en/
+ // | (empty; use the fallback translation)
+ // | en-us/
+ // | bundleone.js
+ // | en-gb/
+ // | bundleone.js
+ // | es/
+ // | bundleone.js
+ // | bundletwo.js
+ // | ...etc
+ // | ...
+ //
+
+ d.require("dojo.i18n");
+ d.i18n._requireLocalization.apply(d.hostenv, arguments);
+ };
+
+
+ var ore = new RegExp("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$");
+ var ire = new RegExp("^((([^\\[:]+):)?([^@]+)@)?(\\[([^\\]]+)\\]|([^\\[:]*))(:([0-9]+))?$");
+
+ dojo._Url = function(/*dojo._Url||String...*/){
+ // summary:
+ // Constructor to create an object representing a URL.
+ // It is marked as private, since we might consider removing
+ // or simplifying it.
+ // description:
+ // Each argument is evaluated in order relative to the next until
+ // a canonical uri is produced. To get an absolute Uri relative to
+ // the current document use:
+ // new dojo._Url(document.baseURI, url)
+
+ var n = null;
+
+ var _a = arguments;
+ var uri = [_a[0]];
+ // resolve uri components relative to each other
+ for(var i = 1; i<_a.length; i++){
+ if(!_a[i]){ continue; }
+
+ // Safari doesn't support this.constructor so we have to be explicit
+ // FIXME: Tracked (and fixed) in Webkit bug 3537.
+ // http://bugs.webkit.org/show_bug.cgi?id=3537
+ var relobj = new d._Url(_a[i]+"");
+ var uriobj = new d._Url(uri[0]+"");
+
+ if(
+ relobj.path == "" &&
+ !relobj.scheme &&
+ !relobj.authority &&
+ !relobj.query
+ ){
+ if(relobj.fragment != n){
+ uriobj.fragment = relobj.fragment;
+ }
+ relobj = uriobj;
+ }else if(!relobj.scheme){
+ relobj.scheme = uriobj.scheme;
+
+ if(!relobj.authority){
+ relobj.authority = uriobj.authority;
+
+ if(relobj.path.charAt(0) != "/"){
+ var path = uriobj.path.substring(0,
+ uriobj.path.lastIndexOf("/") + 1) + relobj.path;
+
+ var segs = path.split("/");
+ for(var j = 0; j < segs.length; j++){
+ if(segs[j] == "."){
+ // flatten "./" references
+ if(j == segs.length - 1){
+ segs[j] = "";
+ }else{
+ segs.splice(j, 1);
+ j--;
+ }
+ }else if(j > 0 && !(j == 1 && segs[0] == "") &&
+ segs[j] == ".." && segs[j-1] != ".."){
+ // flatten "../" references
+ if(j == (segs.length - 1)){
+ segs.splice(j, 1);
+ segs[j - 1] = "";
+ }else{
+ segs.splice(j - 1, 2);
+ j -= 2;
+ }
+ }
+ }
+ relobj.path = segs.join("/");
+ }
+ }
+ }
+
+ uri = [];
+ if(relobj.scheme){
+ uri.push(relobj.scheme, ":");
+ }
+ if(relobj.authority){
+ uri.push("//", relobj.authority);
+ }
+ uri.push(relobj.path);
+ if(relobj.query){
+ uri.push("?", relobj.query);
+ }
+ if(relobj.fragment){
+ uri.push("#", relobj.fragment);
+ }
+ }
+
+ this.uri = uri.join("");
+
+ // break the uri into its main components
+ var r = this.uri.match(ore);
+
+ this.scheme = r[2] || (r[1] ? "" : n);
+ this.authority = r[4] || (r[3] ? "" : n);
+ this.path = r[5]; // can never be undefined
+ this.query = r[7] || (r[6] ? "" : n);
+ this.fragment = r[9] || (r[8] ? "" : n);
+
+ if(this.authority != n){
+ // server based naming authority
+ r = this.authority.match(ire);
+
+ this.user = r[3] || n;
+ this.password = r[4] || n;
+ this.host = r[6] || r[7]; // ipv6 || ipv4
+ this.port = r[9] || n;
+ }
+ }
+
+ dojo._Url.prototype.toString = function(){ return this.uri; };
+
+ dojo.moduleUrl = function(/*String*/module, /*dojo._Url||String*/url){
+ // summary:
+ // Returns a `dojo._Url` object relative to a module.
+ // example:
+ // | var pngPath = dojo.moduleUrl("acme","images/small.png");
+ // | // list the object properties
+ // | // create an image and set it's source to pngPath's value:
+ // | var img = document.createElement("img");
+ // | // NOTE: we assign the string representation of the url object
+ // | img.src = pngPath.toString();
+ // | // add our image to the document
+ // | dojo.body().appendChild(img);
+ // example:
+ // you may de-reference as far as you like down the package
+ // hierarchy. This is sometimes handy to avoid lenghty relative
+ // urls or for building portable sub-packages. In this example,
+ // the `acme.widget` and `acme.util` directories may be located
+ // under different roots (see `dojo.registerModulePath`) but the
+ // the modules which reference them can be unaware of their
+ // relative locations on the filesystem:
+ // | // somewhere in a configuration block
+ // | dojo.registerModulePath("acme.widget", "../../acme/widget");
+ // | dojo.registerModulePath("acme.util", "../../util");
+ // |
+ // | // ...
+ // |
+ // | // code in a module using acme resources
+ // | var tmpltPath = dojo.moduleUrl("acme.widget","templates/template.html");
+ // | var dataPath = dojo.moduleUrl("acme.util","resources/data.json");
+
+ var loc = d._getModuleSymbols(module).join('/');
+ if(!loc){ return null; }
+ if(loc.lastIndexOf("/") != loc.length-1){
+ loc += "/";
+ }
+
+ //If the path is an absolute path (starts with a / or is on another
+ //domain/xdomain) then don't add the baseUrl.
+ var colonIndex = loc.indexOf(":");
+ if(loc.charAt(0) != "/" && (colonIndex == -1 || colonIndex > loc.indexOf("/"))){
+ loc = d.baseUrl + loc;
+ }
+
+ return new d._Url(loc, url); // String
+ }
+})();
+
+/*=====
+dojo.isBrowser = {
+ // example:
+ // | if(dojo.isBrowser){ ... }
+};
+
+dojo.isFF = {
+ // example:
+ // | if(dojo.isFF > 1){ ... }
+};
+
+dojo.isIE = {
+ // example:
+ // | if(dojo.isIE > 6){
+ // | // we are IE7
+ // | }
+};
+
+dojo.isSafari = {
+ // example:
+ // | if(dojo.isSafari){ ... }
+ // example:
+ // Detect iPhone:
+ // | if(dojo.isSafari && navigator.userAgent.indexOf("iPhone") != -1){
+ // | // we are iPhone. Note, iPod touch reports "iPod" above and fails this test.
+ // | }
+};
+
+dojo = {
+ // isBrowser: Boolean
+ // True if the client is a web-browser
+ isBrowser: true,
+ // isFF: Number | undefined
+ // Version as a Number if client is FireFox. undefined otherwise. Corresponds to
+ // major detected FireFox version (1.5, 2, 3, etc.)
+ isFF: 2,
+ // isIE: Number | undefined
+ // Version as a Number if client is MSIE(PC). undefined otherwise. Corresponds to
+ // major detected IE version (6, 7, 8, etc.)
+ isIE: 6,
+ // isKhtml: Number | undefined
+ // Version as a Number if client is a KTHML-derived browser (Konqueror,
+ // Safari, etc.). undefined otherwise. Corresponds to major detected version.
+ isKhtml: 0,
+ // isMozilla: Number | undefined
+ // Version as a Number if client is a Mozilla-based browser (Firefox,
+ // SeaMonkey). undefined otherwise. Corresponds to major detected version.
+ isMozilla: 0,
+ // isOpera: Number | undefined
+ // Version as a Number if client is Opera. undefined otherwise. Corresponds to
+ // major detected version.
+ isOpera: 0,
+ // isSafari: Number | undefined
+ // Version as a Number if client is Safari or iPhone. undefined otherwise.
+ isSafari: 0
+}
+=====*/
+
+if(typeof window != 'undefined'){
+ dojo.isBrowser = true;
+ dojo._name = "browser";
+
+
+ // attempt to figure out the path to dojo if it isn't set in the config
+ (function(){
+ var d = dojo;
+ // this is a scope protection closure. We set browser versions and grab
+ // the URL we were loaded from here.
+
+ // grab the node we were loaded from
+ if(document && document.getElementsByTagName){
+ var scripts = document.getElementsByTagName("script");
+ var rePkg = /dojo(\.xd)?\.js(\W|$)/i;
+ for(var i = 0; i < scripts.length; i++){
+ var src = scripts[i].getAttribute("src");
+ if(!src){ continue; }
+ var m = src.match(rePkg);
+ if(m){
+ // find out where we came from
+ if(!d.config.baseUrl){
+ d.config.baseUrl = src.substring(0, m.index);
+ }
+ // and find out if we need to modify our behavior
+ var cfg = scripts[i].getAttribute("djConfig");
+ if(cfg){
+ var cfgo = eval("({ "+cfg+" })");
+ for(var x in cfgo){
+ dojo.config[x] = cfgo[x];
+ }
+ }
+ break; // "first Dojo wins"
+ }
+ }
+ }
+ d.baseUrl = d.config.baseUrl;
+
+ // fill in the rendering support information in dojo.render.*
+ var n = navigator;
+ var dua = n.userAgent;
+ var dav = n.appVersion;
+ var tv = parseFloat(dav);
+
+ if(dua.indexOf("Opera") >= 0){ d.isOpera = tv; }
+ // safari detection derived from:
+ // http://developer.apple.com/internet/safari/faq.html#anchor2
+ // http://developer.apple.com/internet/safari/uamatrix.html
+ var index = Math.max(dav.indexOf("WebKit"), dav.indexOf("Safari"), 0);
+ if(index){
+ // try to grab the explicit Safari version first. If we don't get
+ // one, look for 419.3+ as the indication that we're on something
+ // "Safari 3-ish". Lastly, default to "Safari 2" handling.
+ d.isSafari = parseFloat(dav.split("Version/")[1]) ||
+ (parseFloat(dav.substr(index + 7)) > 419.3) ? 3 : 2;
+ }
+ if(dua.indexOf("AdobeAIR") >= 0){ d.isAIR = 1; }
+ if(dav.indexOf("Konqueror") >= 0 || d.isSafari){ d.isKhtml = tv; }
+ if(dua.indexOf("Gecko") >= 0 && !d.isKhtml){ d.isMozilla = d.isMoz = tv; }
+ if(d.isMoz){
+ d.isFF = parseFloat(dua.split("Firefox/")[1]) || undefined;
+ }
+ if(document.all && !d.isOpera){
+ d.isIE = parseFloat(dav.split("MSIE ")[1]) || undefined;
+ }
+
+ //Workaround to get local file loads of dojo to work on IE 7
+ //by forcing to not use native xhr.
+ if(dojo.isIE && window.location.protocol === "file:"){
+ dojo.config.ieForceActiveXXhr=true;
+ }
+
+ var cm = document.compatMode;
+ d.isQuirks = cm == "BackCompat" || cm == "QuirksMode" || d.isIE < 6;
+
+ // TODO: is the HTML LANG attribute relevant?
+ d.locale = dojo.config.locale || (d.isIE ? n.userLanguage : n.language).toLowerCase();
+
+ // These are in order of decreasing likelihood; this will change in time.
+ d._XMLHTTP_PROGIDS = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'];
+
+ d._xhrObj = function(){
+ // summary:
+ // does the work of portably generating a new XMLHTTPRequest
+ // object.
+ var http = null;
+ var last_e = null;
+ if(!dojo.isIE || !dojo.config.ieForceActiveXXhr){
+ try{ http = new XMLHttpRequest(); }catch(e){}
+ }
+ if(!http){
+ for(var i=0; i<3; ++i){
+ var progid = d._XMLHTTP_PROGIDS[i];
+ try{
+ http = new ActiveXObject(progid);
+ }catch(e){
+ last_e = e;
+ }
+
+ if(http){
+ d._XMLHTTP_PROGIDS = [progid]; // so faster next time
+ break;
+ }
+ }
+ }
+
+ if(!http){
+ throw new Error("XMLHTTP not available: "+last_e);
+ }
+
+ return http; // XMLHTTPRequest instance
+ }
+
+ d._isDocumentOk = function(http){
+ var stat = http.status || 0;
+ return (stat >= 200 && stat < 300) || // Boolean
+ stat == 304 || // allow any 2XX response code
+ stat == 1223 || // get it out of the cache
+ (!stat && (location.protocol=="file:" || location.protocol=="chrome:") ); // Internet Explorer mangled the status code
+ }
+
+ //See if base tag is in use.
+ //This is to fix http://trac.dojotoolkit.org/ticket/3973,
+ //but really, we need to find out how to get rid of the dojo._Url reference
+ //below and still have DOH work with the dojo.i18n test following some other
+ //test that uses the test frame to load a document (trac #2757).
+ //Opera still has problems, but perhaps a larger issue of base tag support
+ //with XHR requests (hasBase is true, but the request is still made to document
+ //path, not base path).
+ var owloc = window.location+"";
+ var base = document.getElementsByTagName("base");
+ var hasBase = (base && base.length > 0);
+
+ d._getText = function(/*URI*/ uri, /*Boolean*/ fail_ok){
+ // summary: Read the contents of the specified uri and return those contents.
+ // uri:
+ // A relative or absolute uri. If absolute, it still must be in
+ // the same "domain" as we are.
+ // fail_ok:
+ // Default false. If fail_ok and loading fails, return null
+ // instead of throwing.
+ // returns: The response text. null is returned when there is a
+ // failure and failure is okay (an exception otherwise)
+
+ // alert("_getText: " + uri);
+
+ // NOTE: must be declared before scope switches ie. this._xhrObj()
+ var http = this._xhrObj();
+
+ if(!hasBase && dojo._Url){
+ uri = (new dojo._Url(owloc, uri)).toString();
+ }
+ /*
+
+
+ alert(uri);
+ */
+
+ if(d.config.cacheBust){
+ //Make sure we have a string before string methods are used on uri
+ uri += "";
+ uri += (uri.indexOf("?") == -1 ? "?" : "&") + String(d.config.cacheBust).replace(/\W+/g,"");
+ }
+
+ http.open('GET', uri, false);
+ try{
+ http.send(null);
+ // alert(http);
+ if(!d._isDocumentOk(http)){
+ var err = Error("Unable to load "+uri+" status:"+ http.status);
+ err.status = http.status;
+ err.responseText = http.responseText;
+ throw err;
+ }
+ }catch(e){
+ if(fail_ok){ return null; } // null
+ // rethrow the exception
+ throw e;
+ }
+ return http.responseText; // String
+ }
+
+ d._windowUnloaders = [];
+
+ d.windowUnloaded = function(){
+ // summary:
+ // signal fired by impending window destruction. You may use
+ // dojo.addOnWIndowUnload() or dojo.connect() to this method to perform
+ // page/application cleanup methods. See dojo.addOnWindowUnload for more info.
+ var mll = this._windowUnloaders;
+ while(mll.length){
+ (mll.pop())();
+ }
+ }
+
+ d.addOnWindowUnload = function(/*Object?*/obj, /*String|Function?*/functionName){
+ // summary:
+ // registers a function to be triggered when window.onunload fires.
+ // Be careful trying to modify the DOM or access JavaScript properties
+ // during this phase of page unloading: they may not always be available.
+ // Consider dojo.addOnUnload() if you need to modify the DOM or do heavy
+ // JavaScript work.
+ // example:
+ // | dojo.addOnWindowUnload(functionPointer)
+ // | dojo.addOnWindowUnload(object, "functionName")
+ // | dojo.addOnWindowUnload(object, function(){ /* ... */});
+
+ d._onto(d._windowUnloaders, obj, functionName);
+ }
+ })();
+
+ dojo._initFired = false;
+ // BEGIN DOMContentLoaded, from Dean Edwards (http://dean.edwards.name/weblog/2006/06/again/)
+ dojo._loadInit = function(e){
+ dojo._initFired = true;
+ // allow multiple calls, only first one will take effect
+ // A bug in khtml calls events callbacks for document for event which isnt supported
+ // for example a created contextmenu event calls DOMContentLoaded, workaround
+ var type = (e && e.type) ? e.type.toLowerCase() : "load";
+ if(arguments.callee.initialized || (type != "domcontentloaded" && type != "load")){ return; }
+ arguments.callee.initialized = true;
+ if("_khtmlTimer" in dojo){
+ clearInterval(dojo._khtmlTimer);
+ delete dojo._khtmlTimer;
+ }
+
+ if(dojo._inFlightCount == 0){
+ dojo._modulesLoaded();
+ }
+ }
+
+ dojo._fakeLoadInit = function(){
+ dojo._loadInit({type: "load"});
+ }
+
+ if(!dojo.config.afterOnLoad){
+ // START DOMContentLoaded
+ // Mozilla and Opera 9 expose the event we could use
+ if(document.addEventListener){
+ // NOTE:
+ // due to a threading issue in Firefox 2.0, we can't enable
+ // DOMContentLoaded on that platform. For more information, see:
+ // http://trac.dojotoolkit.org/ticket/1704
+ if(dojo.isOpera || dojo.isFF >= 3 || (dojo.isMoz && dojo.config.enableMozDomContentLoaded === true)){
+ document.addEventListener("DOMContentLoaded", dojo._loadInit, null);
+ }
+
+ // mainly for Opera 8.5, won't be fired if DOMContentLoaded fired already.
+ // also used for Mozilla because of trac #1640
+ window.addEventListener("load", dojo._loadInit, null);
+ }
+
+ if(dojo.isAIR){
+ window.addEventListener("load", dojo._loadInit, null);
+ }else if(/(WebKit|khtml)/i.test(navigator.userAgent)){ // sniff
+ dojo._khtmlTimer = setInterval(function(){
+ if(/loaded|complete/.test(document.readyState)){
+ dojo._loadInit(); // call the onload handler
+ }
+ }, 10);
+ }
+ // END DOMContentLoaded
+ }
+
+ (function(){
+ var _w = window;
+ var _handleNodeEvent = function(/*String*/evtName, /*Function*/fp){
+ // summary:
+ // non-destructively adds the specified function to the node's
+ // evtName handler.
+ // evtName: should be in the form "onclick" for "onclick" handlers.
+ // Make sure you pass in the "on" part.
+ var oldHandler = _w[evtName] || function(){};
+ _w[evtName] = function(){
+ fp.apply(_w, arguments);
+ oldHandler.apply(_w, arguments);
+ };
+ };
+
+ if(dojo.isIE){
+ // for Internet Explorer. readyState will not be achieved on init
+ // call, but dojo doesn't need it however, we'll include it
+ // because we don't know if there are other functions added that
+ // might. Note that this has changed because the build process
+ // strips all comments -- including conditional ones.
+ if(!dojo.config.afterOnLoad){
+ document.write('<scr'+'ipt defer src="//:" '
+ + 'onreadystatechange="if(this.readyState==\'complete\'){' + dojo._scopeName + '._loadInit();}">'
+ + '</scr'+'ipt>'
+ );
+ }
+
+ try{
+ document.namespaces.add("v","urn:schemas-microsoft-com:vml");
+ document.createStyleSheet().addRule("v\\:*", "behavior:url(#default#VML)");
+ }catch(e){}
+ }
+
+ // FIXME: dojo.unloaded requires dojo scope, so using anon function wrapper.
+ _handleNodeEvent("onbeforeunload", function() { dojo.unloaded(); });
+ _handleNodeEvent("onunload", function() { dojo.windowUnloaded(); });
+ })();
+
+ /*
+ OpenAjax.subscribe("OpenAjax", "onload", function(){
+ if(dojo._inFlightCount == 0){
+ dojo._modulesLoaded();
+ }
+ });
+
+ OpenAjax.subscribe("OpenAjax", "onunload", function(){
+ dojo.unloaded();
+ });
+ */
+} //if (typeof window != 'undefined')
+
+//Register any module paths set up in djConfig. Need to do this
+//in the hostenvs since hostenv_browser can read djConfig from a
+//script tag's attribute.
+(function(){
+ var mp = dojo.config["modulePaths"];
+ if(mp){
+ for(var param in mp){
+ dojo.registerModulePath(param, mp[param]);
+ }
+ }
+})();
+
+//Load debug code if necessary.
+if(dojo.config.isDebug){
+ dojo.require("dojo._firebug.firebug");
+}
+
+if(dojo.config.debugAtAllCosts){
+ dojo.config.useXDomain = true;
+ dojo.require("dojo._base._loader.loader_xd");
+ dojo.require("dojo._base._loader.loader_debug");
+ dojo.require("dojo.i18n");
+}
+
+if(!dojo._hasResource["dojo._base.lang"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo._base.lang"] = true;
+dojo.provide("dojo._base.lang");
+
+// Crockford (ish) functions
+
+dojo.isString = function(/*anything*/ it){
+ // summary:
+ // Return true if it is a String
+ return !!arguments.length && it != null && (typeof it == "string" || it instanceof String); // Boolean
+}
+
+dojo.isArray = function(/*anything*/ it){
+ // summary:
+ // Return true if it is an Array
+ return it && (it instanceof Array || typeof it == "array"); // Boolean
+}
+
+/*=====
+dojo.isFunction = function(it){
+ // summary: Return true if it is a Function
+ // it: anything
+ return; // Boolean
+}
+=====*/
+
+dojo.isFunction = (function(){
+ var _isFunction = function(/*anything*/ it){
+ return it && (typeof it == "function" || it instanceof Function); // Boolean
+ };
+
+ return dojo.isSafari ?
+ // only slow this down w/ gratuitious casting in Safari since it's what's b0rken
+ function(/*anything*/ it){
+ if(typeof it == "function" && it == "[object NodeList]"){ return false; }
+ return _isFunction(it); // Boolean
+ } : _isFunction;
+})();
+
+dojo.isObject = function(/*anything*/ it){
+ // summary:
+ // Returns true if it is a JavaScript object (or an Array, a Function
+ // or null)
+ return it !== undefined &&
+ (it === null || typeof it == "object" || dojo.isArray(it) || dojo.isFunction(it)); // Boolean
+}
+
+dojo.isArrayLike = function(/*anything*/ it){
+ // summary:
+ // similar to dojo.isArray() but more permissive
+ // description:
+ // Doesn't strongly test for "arrayness". Instead, settles for "isn't
+ // a string or number and has a length property". Arguments objects
+ // and DOM collections will return true when passed to
+ // dojo.isArrayLike(), but will return false when passed to
+ // dojo.isArray().
+ // returns:
+ // If it walks like a duck and quicks like a duck, return `true`
+ var d = dojo;
+ return it && it !== undefined && // Boolean
+ // keep out built-in constructors (Number, String, ...) which have length
+ // properties
+ !d.isString(it) && !d.isFunction(it) &&
+ !(it.tagName && it.tagName.toLowerCase() == 'form') &&
+ (d.isArray(it) || isFinite(it.length));
+}
+
+dojo.isAlien = function(/*anything*/ it){
+ // summary:
+ // Returns true if it is a built-in function or some other kind of
+ // oddball that *should* report as a function but doesn't
+ return it && !dojo.isFunction(it) && /\{\s*\[native code\]\s*\}/.test(String(it)); // Boolean
+}
+
+dojo.extend = function(/*Object*/ constructor, /*Object...*/ props){
+ // summary:
+ // Adds all properties and methods of props to constructor's
+ // prototype, making them available to all instances created with
+ // constructor.
+ for(var i=1, l=arguments.length; i<l; i++){
+ dojo._mixin(constructor.prototype, arguments[i]);
+ }
+ return constructor; // Object
+}
+
+dojo._hitchArgs = function(scope, method /*,...*/){
+ var pre = dojo._toArray(arguments, 2);
+ var named = dojo.isString(method);
+ return function(){
+ // arrayify arguments
+ var args = dojo._toArray(arguments);
+ // locate our method
+ var f = named ? (scope||dojo.global)[method] : method;
+ // invoke with collected args
+ return f && f.apply(scope || this, pre.concat(args)); // mixed
+ } // Function
+}
+
+dojo.hitch = function(/*Object*/scope, /*Function|String*/method /*,...*/){
+ // summary:
+ // Returns a function that will only ever execute in the a given scope.
+ // This allows for easy use of object member functions
+ // in callbacks and other places in which the "this" keyword may
+ // otherwise not reference the expected scope.
+ // Any number of default positional arguments may be passed as parameters
+ // beyond "method".
+ // Each of these values will be used to "placehold" (similar to curry)
+ // for the hitched function.
+ // scope:
+ // The scope to use when method executes. If method is a string,
+ // scope is also the object containing method.
+ // method:
+ // A function to be hitched to scope, or the name of the method in
+ // scope to be hitched.
+ // example:
+ // | dojo.hitch(foo, "bar")();
+ // runs foo.bar() in the scope of foo
+ // example:
+ // | dojo.hitch(foo, myFunction);
+ // returns a function that runs myFunction in the scope of foo
+ if(arguments.length > 2){
+ return dojo._hitchArgs.apply(dojo, arguments); // Function
+ }
+ if(!method){
+ method = scope;
+ scope = null;
+ }
+ if(dojo.isString(method)){
+ scope = scope || dojo.global;
+ if(!scope[method]){ throw(['dojo.hitch: scope["', method, '"] is null (scope="', scope, '")'].join('')); }
+ return function(){ return scope[method].apply(scope, arguments || []); }; // Function
+ }
+ return !scope ? method : function(){ return method.apply(scope, arguments || []); }; // Function
+}
+
+/*=====
+dojo.delegate = function(obj, props){
+ // summary:
+ // returns a new object which "looks" to obj for properties which it
+ // does not have a value for. Optionally takes a bag of properties to
+ // seed the returned object with initially.
+ // description:
+ // This is a small implementaton of the Boodman/Crockford delegation
+ // pattern in JavaScript. An intermediate object constructor mediates
+ // the prototype chain for the returned object, using it to delegate
+ // down to obj for property lookup when object-local lookup fails.
+ // This can be thought of similarly to ES4's "wrap", save that it does
+ // not act on types but rather on pure objects.
+ // obj:
+ // The object to delegate to for properties not found directly on the
+ // return object or in props.
+ // props:
+ // an object containing properties to assign to the returned object
+ // returns:
+ // an Object of anonymous type
+ // example:
+ // | var foo = { bar: "baz" };
+ // | var thinger = dojo.delegate(foo, { thud: "xyzzy"});
+ // | thinger.bar == "baz"; // delegated to foo
+ // | foo.thud == undefined; // by definition
+ // | thinger.thud == "xyzzy"; // mixed in from props
+ // | foo.bar = "thonk";
+ // | thinger.bar == "thonk"; // still delegated to foo's bar
+}
+=====*/
+
+dojo.delegate = dojo._delegate = (function(){
+ // boodman/crockford delegation w/ cornford optimization
+ function TMP(){};
+ return function(obj, props){
+ TMP.prototype = obj;
+ var tmp = new TMP();
+ if(props){
+ dojo._mixin(tmp, props);
+ }
+ return tmp; // Object
+ }
+})();
+
+/*=====
+dojo._toArray = function(obj, offset, startWith){
+ // summary:
+ // Converts an array-like object (i.e. arguments, DOMCollection) to an
+ // array. Returns a new Array with the elements of obj.
+ // obj: Object
+ // the object to "arrayify". We expect the object to have, at a
+ // minimum, a length property which corresponds to integer-indexed
+ // properties.
+ // offset: Number?
+ // the location in obj to start iterating from. Defaults to 0.
+ // Optional.
+ // startWith: Array?
+ // An array to pack with the properties of obj. If provided,
+ // properties in obj are appended at the end of startWith and
+ // startWith is the returned array.
+}
+=====*/
+
+(function(){
+ var efficient = function(obj, offset, startWith){
+ return (startWith||[]).concat(Array.prototype.slice.call(obj, offset||0));
+ };
+
+ var slow = function(obj, offset, startWith){
+ var arr = startWith||[];
+ for(var x = offset || 0; x < obj.length; x++){
+ arr.push(obj[x]);
+ }
+ return arr;
+ };
+
+ dojo._toArray = (!dojo.isIE) ? efficient : function(obj){
+ return ((obj.item) ? slow : efficient).apply(this, arguments);
+ };
+
+})();
+
+dojo.partial = function(/*Function|String*/method /*, ...*/){
+ // summary:
+ // similar to hitch() except that the scope object is left to be
+ // whatever the execution context eventually becomes.
+ // description:
+ // Calling dojo.partial is the functional equivalent of calling:
+ // | dojo.hitch(null, funcName, ...);
+ var arr = [ null ];
+ return dojo.hitch.apply(dojo, arr.concat(dojo._toArray(arguments))); // Function
+}
+
+dojo.clone = function(/*anything*/ o){
+ // summary:
+ // Clones objects (including DOM nodes) and all children.
+ // Warning: do not clone cyclic structures.
+ if(!o){ return o; }
+ if(dojo.isArray(o)){
+ var r = [];
+ for(var i = 0; i < o.length; ++i){
+ r.push(dojo.clone(o[i]));
+ }
+ return r; // Array
+ }
+ if(!dojo.isObject(o)){
+ return o; /*anything*/
+ }
+ if(o.nodeType && o.cloneNode){ // isNode
+ return o.cloneNode(true); // Node
+ }
+ if(o instanceof Date){
+ return new Date(o.getTime()); // Date
+ }
+ // Generic objects
+ var r = new o.constructor(); // specific to dojo.declare()'d classes!
+ for(var i in o){
+ if(!(i in r) || r[i] != o[i]){
+ r[i] = dojo.clone(o[i]);
+ }
+ }
+ return r; // Object
+}
+
+dojo.trim = function(/*String*/ str){
+ // summary:
+ // trims whitespaces from both sides of the string
+ // description:
+ // This version of trim() was selected for inclusion into the base due
+ // to its compact size and relatively good performance (see Steven
+ // Levithan's blog:
+ // http://blog.stevenlevithan.com/archives/faster-trim-javascript).
+ // The fastest but longest version of this function is located at
+ // dojo.string.trim()
+ return str.replace(/^\s\s*/, '').replace(/\s\s*$/, ''); // String
+}
+
+}
+
+if(!dojo._hasResource["dojo._base.declare"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo._base.declare"] = true;
+dojo.provide("dojo._base.declare");
+
+
+// this file courtesy of the TurboAjax Group, licensed under a Dojo CLA
+
+dojo.declare = function(/*String*/ className, /*Function|Function[]*/ superclass, /*Object*/ props){
+ // summary:
+ // Create a feature-rich constructor from compact notation
+ // className:
+ // The name of the constructor (loosely, a "class")
+ // stored in the "declaredClass" property in the created prototype
+ // superclass:
+ // May be null, a Function, or an Array of Functions. If an array,
+ // the first element is used as the prototypical ancestor and
+ // any following Functions become mixin ancestors.
+ // props:
+ // An object whose properties are copied to the
+ // created prototype.
+ // Add an instance-initialization function by making it a property
+ // named "constructor".
+ // description:
+ // Create a constructor using a compact notation for inheritance and
+ // prototype extension.
+ //
+ // All superclasses (including mixins) must be Functions (not simple Objects).
+ //
+ // Mixin ancestors provide a type of multiple inheritance. Prototypes of mixin
+ // ancestors are copied to the new class: changes to mixin prototypes will
+ // not affect classes to which they have been mixed in.
+ //
+ // "className" is cached in "declaredClass" property of the new class.
+ //
+ // example:
+ // | dojo.declare("my.classes.bar", my.classes.foo, {
+ // | // properties to be added to the class prototype
+ // | someValue: 2,
+ // | // initialization function
+ // | constructor: function(){
+ // | this.myComplicatedObject = new ReallyComplicatedObject();
+ // | },
+ // | // other functions
+ // | someMethod: function(){
+ // | doStuff();
+ // | }
+ // | );
+
+ // process superclass argument
+ var dd = arguments.callee, mixins;
+ if(dojo.isArray(superclass)){
+ mixins = superclass;
+ superclass = mixins.shift();
+ }
+ // construct intermediate classes for mixins
+ if(mixins){
+ dojo.forEach(mixins, function(m){
+ if(!m){ throw(className + ": mixin #" + i + " is null"); } // It's likely a required module is not loaded
+ superclass = dd._delegate(superclass, m);
+ });
+ }
+ // create constructor
+ var ctor = dd._delegate(superclass);
+ // extend with "props"
+ props = props || {};
+ ctor.extend(props);
+ // more prototype decoration
+ dojo.extend(ctor, {declaredClass: className, _constructor: props.constructor/*, preamble: null*/});
+ // special help for IE
+ ctor.prototype.constructor = ctor;
+ // create named reference
+ return dojo.setObject(className, ctor); // Function
+};
+
+dojo.mixin(dojo.declare, {
+ _delegate: function(base, mixin){
+ var bp = (base||0).prototype, mp = (mixin||0).prototype, dd=dojo.declare;
+ // fresh constructor, fresh prototype
+ var ctor = dd._makeCtor();
+ // cache ancestry
+ dojo.mixin(ctor, {superclass: bp, mixin: mp, extend: dd._extend});
+ // chain prototypes
+ if(base){ctor.prototype = dojo._delegate(bp);}
+ // add mixin and core
+ dojo.extend(ctor, dd._core, mp||0, {_constructor: null, preamble: null});
+ // special help for IE
+ ctor.prototype.constructor = ctor;
+ // name this class for debugging
+ ctor.prototype.declaredClass = (bp||0).declaredClass + '_' + (mp||0).declaredClass;
+ return ctor;
+ },
+ _extend: function(props){
+ var i, fn;
+ for(i in props){ if(dojo.isFunction(fn=props[i]) && !0[i]){fn.nom=i;fn.ctor=this;} }
+ dojo.extend(this, props);
+ },
+ _makeCtor: function(){
+ // we have to make a function, but don't want to close over anything
+ return function(){ this._construct(arguments); };
+ },
+ _core: {
+ _construct: function(args){
+ var c=args.callee, s=c.superclass, ct=s&&s.constructor, m=c.mixin, mct=m&&m.constructor, a=args, ii, fn;
+ // side-effect of = used on purpose here, lint may complain, don't try this at home
+ if(a[0]){
+ // FIXME: preambles for each mixin should be allowed
+ // FIXME:
+ // should we allow the preamble here NOT to modify the
+ // default args, but instead to act on each mixin
+ // independently of the class instance being constructed
+ // (for impedence matching)?
+
+ // allow any first argument w/ a "preamble" property to act as a
+ // class preamble (not exclusive of the prototype preamble)
+ if(/*dojo.isFunction*/((fn = a[0].preamble))){
+ a = fn.apply(this, a) || a;
+ }
+ }
+ // prototype preamble
+ if((fn = c.prototype.preamble)){a = fn.apply(this, a) || a;}
+ // FIXME:
+ // need to provide an optional prototype-settable
+ // "_explicitSuper" property which disables this
+ // initialize superclass
+ if(ct&&ct.apply){ct.apply(this, a);}
+ // initialize mixin
+ if(mct&&mct.apply){mct.apply(this, a);}
+ // initialize self
+ if((ii=c.prototype._constructor)){ii.apply(this, args);}
+ // post construction
+ if(this.constructor.prototype==c.prototype && (ct=this.postscript)){ ct.apply(this, args); }
+ },
+ _findMixin: function(mixin){
+ var c = this.constructor, p, m;
+ while(c){
+ p = c.superclass;
+ m = c.mixin;
+ if(m==mixin || (m instanceof mixin.constructor)){return p;}
+ if(m && m._findMixin && (m=m._findMixin(mixin))){return m;}
+ c = p && p.constructor;
+ }
+ },
+ _findMethod: function(name, method, ptype, has){
+ // consciously trading readability for bytes and speed in this low-level method
+ var p=ptype, c, m, f;
+ do{
+ c = p.constructor;
+ m = c.mixin;
+ // find method by name in our mixin ancestor
+ if(m && (m=this._findMethod(name, method, m, has))){return m;}
+ // if we found a named method that either exactly-is or exactly-is-not 'method'
+ if((f=p[name])&&(has==(f==method))){return p;}
+ // ascend chain
+ p = c.superclass;
+ }while(p);
+ // if we couldn't find an ancestor in our primary chain, try a mixin chain
+ return !has && (p=this._findMixin(ptype)) && this._findMethod(name, method, p, has);
+ },
+ inherited: function(name, args, newArgs){
+ // optionalize name argument
+ var a = arguments;
+ if(!dojo.isString(a[0])){newArgs=args; args=name; name=args.callee.nom;}
+ a = newArgs||args;
+ var c = args.callee, p = this.constructor.prototype, fn, mp;
+ // if not an instance override
+ if(this[name] != c || p[name] == c){
+ // start from memoized prototype, or
+ // find a prototype that has property 'name' == 'c'
+ mp = (c.ctor||0).superclass || this._findMethod(name, c, p, true);
+ if(!mp){throw(this.declaredClass + ': inherited method "' + name + '" mismatch');}
+ // find a prototype that has property 'name' != 'c'
+ p = this._findMethod(name, c, mp, false);
+ }
+ // we expect 'name' to be in prototype 'p'
+ fn = p && p[name];
+ if(!fn){throw(mp.declaredClass + ': inherited method "' + name + '" not found');}
+ // if the function exists, invoke it in our scope
+ return fn.apply(this, a);
+ }
+ }
+});
+
+}
+
+if(!dojo._hasResource["dojo._base.connect"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo._base.connect"] = true;
+dojo.provide("dojo._base.connect");
+
+
+// this file courtesy of the TurboAjax Group, licensed under a Dojo CLA
+
+// low-level delegation machinery
+dojo._listener = {
+ // create a dispatcher function
+ getDispatcher: function(){
+ // following comments pulled out-of-line to prevent cloning them
+ // in the returned function.
+ // - indices (i) that are really in the array of listeners (ls) will
+ // not be in Array.prototype. This is the 'sparse array' trick
+ // that keeps us safe from libs that take liberties with built-in
+ // objects
+ // - listener is invoked with current scope (this)
+ return function(){
+ var ap=Array.prototype, c=arguments.callee, ls=c._listeners, t=c.target;
+ // return value comes from original target function
+ var r = t && t.apply(this, arguments);
+ // make local copy of listener array so it is immutable during processing
+ var lls;
+ lls = [].concat(ls);
+
+ // invoke listeners after target function
+ for(var i in lls){
+ if(!(i in ap)){
+ lls[i].apply(this, arguments);
+ }
+ }
+ // return value comes from original target function
+ return r;
+ }
+ },
+ // add a listener to an object
+ add: function(/*Object*/ source, /*String*/ method, /*Function*/ listener){
+ // Whenever 'method' is invoked, 'listener' will have the same scope.
+ // Trying to supporting a context object for the listener led to
+ // complexity.
+ // Non trivial to provide 'once' functionality here
+ // because listener could be the result of a dojo.hitch call,
+ // in which case two references to the same hitch target would not
+ // be equivalent.
+ source = source || dojo.global;
+ // The source method is either null, a dispatcher, or some other function
+ var f = source[method];
+ // Ensure a dispatcher
+ if(!f||!f._listeners){
+ var d = dojo._listener.getDispatcher();
+ // original target function is special
+ d.target = f;
+ // dispatcher holds a list of listeners
+ d._listeners = [];
+ // redirect source to dispatcher
+ f = source[method] = d;
+ }
+ // The contract is that a handle is returned that can
+ // identify this listener for disconnect.
+ //
+ // The type of the handle is private. Here is it implemented as Integer.
+ // DOM event code has this same contract but handle is Function
+ // in non-IE browsers.
+ //
+ // We could have separate lists of before and after listeners.
+ return f._listeners.push(listener) ; /*Handle*/
+ },
+ // remove a listener from an object
+ remove: function(/*Object*/ source, /*String*/ method, /*Handle*/ handle){
+ var f = (source||dojo.global)[method];
+ // remember that handle is the index+1 (0 is not a valid handle)
+ if(f && f._listeners && handle--){
+ delete f._listeners[handle];
+ }
+ }
+};
+
+// Multiple delegation for arbitrary methods.
+
+// This unit knows nothing about DOM,
+// but we include DOM aware
+// documentation and dontFix
+// argument here to help the autodocs.
+// Actual DOM aware code is in event.js.
+
+dojo.connect = function(/*Object|null*/ obj,
+ /*String*/ event,
+ /*Object|null*/ context,
+ /*String|Function*/ method,
+ /*Boolean*/ dontFix){
+ // summary:
+ // Create a link that calls one function when another executes.
+ //
+ // description:
+ // Connects method to event, so that after event fires, method
+ // does too. All connected functions are passed the same arguments as
+ // the event function was initially called with. You may connect as
+ // many methods to event as needed.
+ //
+ // event must be a string. If obj is null, dojo.global is used.
+ //
+ // null arguments may simply be omitted.
+ //
+ // obj[event] can resolve to a function or undefined (null).
+ // If obj[event] is null, it is assigned a function.
+ //
+ // The return value is a handle that is needed to
+ // remove this connection with dojo.disconnect.
+ //
+ // obj:
+ // The source object for the event function.
+ // Defaults to dojo.global if null.
+ // If obj is a DOM node, the connection is delegated
+ // to the DOM event manager (unless dontFix is true).
+ //
+ // event:
+ // String name of the event function in obj.
+ // I.e. identifies a property obj[event].
+ //
+ // context:
+ // The object that method will receive as "this".
+ //
+ // If context is null and method is a function, then method
+ // inherits the context of event.
+ //
+ // If method is a string then context must be the source
+ // object object for method (context[method]). If context is null,
+ // dojo.global is used.
+ //
+ // method:
+ // A function reference, or name of a function in context.
+ // The function identified by method fires after event does.
+ // method receives the same arguments as the event.
+ // See context argument comments for information on method's scope.
+ //
+ // dontFix:
+ // If obj is a DOM node, set dontFix to true to prevent delegation
+ // of this connection to the DOM event manager.
+ //
+ // example:
+ // When obj.onchange(), do ui.update():
+ // | dojo.connect(obj, "onchange", ui, "update");
+ // | dojo.connect(obj, "onchange", ui, ui.update); // same
+ //
+ // example:
+ // Using return value for disconnect:
+ // | var link = dojo.connect(obj, "onchange", ui, "update");
+ // | ...
+ // | dojo.disconnect(link);
+ //
+ // example:
+ // When onglobalevent executes, watcher.handler is invoked:
+ // | dojo.connect(null, "onglobalevent", watcher, "handler");
+ //
+ // example:
+ // When ob.onCustomEvent executes, customEventHandler is invoked:
+ // | dojo.connect(ob, "onCustomEvent", null, "customEventHandler");
+ // | dojo.connect(ob, "onCustomEvent", "customEventHandler"); // same
+ //
+ // example:
+ // When ob.onCustomEvent executes, customEventHandler is invoked
+ // with the same scope (this):
+ // | dojo.connect(ob, "onCustomEvent", null, customEventHandler);
+ // | dojo.connect(ob, "onCustomEvent", customEventHandler); // same
+ //
+ // example:
+ // When globalEvent executes, globalHandler is invoked
+ // with the same scope (this):
+ // | dojo.connect(null, "globalEvent", null, globalHandler);
+ // | dojo.connect("globalEvent", globalHandler); // same
+
+ // normalize arguments
+ var a=arguments, args=[], i=0;
+ // if a[0] is a String, obj was ommited
+ args.push(dojo.isString(a[0]) ? null : a[i++], a[i++]);
+ // if the arg-after-next is a String or Function, context was NOT omitted
+ var a1 = a[i+1];
+ args.push(dojo.isString(a1)||dojo.isFunction(a1) ? a[i++] : null, a[i++]);
+ // absorb any additional arguments
+ for(var l=a.length; i<l; i++){ args.push(a[i]); }
+ // do the actual work
+ return dojo._connect.apply(this, args); /*Handle*/
+}
+
+// used by non-browser hostenvs. always overriden by event.js
+dojo._connect = function(obj, event, context, method){
+ var l=dojo._listener, h=l.add(obj, event, dojo.hitch(context, method));
+ return [obj, event, h, l]; // Handle
+}
+
+dojo.disconnect = function(/*Handle*/ handle){
+ // summary:
+ // Remove a link created by dojo.connect.
+ // description:
+ // Removes the connection between event and the method referenced by handle.
+ // handle:
+ // the return value of the dojo.connect call that created the connection.
+ if(handle && handle[0] !== undefined){
+ dojo._disconnect.apply(this, handle);
+ // let's not keep this reference
+ delete handle[0];
+ }
+}
+
+dojo._disconnect = function(obj, event, handle, listener){
+ listener.remove(obj, event, handle);
+}
+
+// topic publish/subscribe
+
+dojo._topics = {};
+
+dojo.subscribe = function(/*String*/ topic, /*Object|null*/ context, /*String|Function*/ method){
+ // summary:
+ // Attach a listener to a named topic. The listener function is invoked whenever the
+ // named topic is published (see: dojo.publish).
+ // Returns a handle which is needed to unsubscribe this listener.
+ // context:
+ // Scope in which method will be invoked, or null for default scope.
+ // method:
+ // The name of a function in context, or a function reference. This is the function that
+ // is invoked when topic is published.
+ // example:
+ // | dojo.subscribe("alerts", null, function(caption, message){ alert(caption + "\n" + message); };
+ // | dojo.publish("alerts", [ "read this", "hello world" ]);
+
+ // support for 2 argument invocation (omitting context) depends on hitch
+ return [topic, dojo._listener.add(dojo._topics, topic, dojo.hitch(context, method))]; /*Handle*/
+}
+
+dojo.unsubscribe = function(/*Handle*/ handle){
+ // summary:
+ // Remove a topic listener.
+ // handle:
+ // The handle returned from a call to subscribe.
+ // example:
+ // | var alerter = dojo.subscribe("alerts", null, function(caption, message){ alert(caption + "\n" + message); };
+ // | ...
+ // | dojo.unsubscribe(alerter);
+ if(handle){
+ dojo._listener.remove(dojo._topics, handle[0], handle[1]);
+ }
+}
+
+dojo.publish = function(/*String*/ topic, /*Array*/ args){
+ // summary:
+ // Invoke all listener method subscribed to topic.
+ // topic:
+ // The name of the topic to publish.
+ // args:
+ // An array of arguments. The arguments will be applied
+ // to each topic subscriber (as first class parameters, via apply).
+ // example:
+ // | dojo.subscribe("alerts", null, function(caption, message){ alert(caption + "\n" + message); };
+ // | dojo.publish("alerts", [ "read this", "hello world" ]);
+
+ // Note that args is an array, which is more efficient vs variable length
+ // argument list. Ideally, var args would be implemented via Array
+ // throughout the APIs.
+ var f = dojo._topics[topic];
+ if(f){
+ f.apply(this, args||[]);
+ }
+}
+
+dojo.connectPublisher = function( /*String*/ topic,
+ /*Object|null*/ obj,
+ /*String*/ event){
+ // summary:
+ // Ensure that everytime obj.event() is called, a message is published
+ // on the topic. Returns a handle which can be passed to
+ // dojo.disconnect() to disable subsequent automatic publication on
+ // the topic.
+ // topic:
+ // The name of the topic to publish.
+ // obj:
+ // The source object for the event function. Defaults to dojo.global
+ // if null.
+ // event:
+ // The name of the event function in obj.
+ // I.e. identifies a property obj[event].
+ // example:
+ // | dojo.connectPublisher("/ajax/start", dojo, "xhrGet");
+ var pf = function(){ dojo.publish(topic, arguments); }
+ return (event) ? dojo.connect(obj, event, pf) : dojo.connect(obj, pf); //Handle
+};
+
+}
+
+if(!dojo._hasResource["dojo._base.Deferred"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo._base.Deferred"] = true;
+dojo.provide("dojo._base.Deferred");
+
+
+dojo.Deferred = function(/*Function?*/ canceller){
+ // summary:
+ // Encapsulates a sequence of callbacks in response to a value that
+ // may not yet be available. This is modeled after the Deferred class
+ // from Twisted <http://twistedmatrix.com>.
+ // description:
+ // JavaScript has no threads, and even if it did, threads are hard.
+ // Deferreds are a way of abstracting non-blocking events, such as the
+ // final response to an XMLHttpRequest. Deferreds create a promise to
+ // return a response a some point in the future and an easy way to
+ // register your interest in receiving that response.
+ //
+ // The most important methods for Deffered users are:
+ //
+ // * addCallback(handler)
+ // * addErrback(handler)
+ // * callback(result)
+ // * errback(result)
+ //
+ // In general, when a function returns a Deferred, users then "fill
+ // in" the second half of the contract by registering callbacks and
+ // error handlers. You may register as many callback and errback
+ // handlers as you like and they will be executed in the order
+ // registered when a result is provided. Usually this result is
+ // provided as the result of an asynchronous operation. The code
+ // "managing" the Deferred (the code that made the promise to provide
+ // an answer later) will use the callback() and errback() methods to
+ // communicate with registered listeners about the result of the
+ // operation. At this time, all registered result handlers are called
+ // *with the most recent result value*.
+ //
+ // Deferred callback handlers are treated as a chain, and each item in
+ // the chain is required to return a value that will be fed into
+ // successive handlers. The most minimal callback may be registered
+ // like this:
+ //
+ // | var d = new dojo.Deferred();
+ // | d.addCallback(function(result){ return result; });
+ //
+ // Perhaps the most common mistake when first using Deferreds is to
+ // forget to return a value (in most cases, the value you were
+ // passed).
+ //
+ // The sequence of callbacks is internally represented as a list of
+ // 2-tuples containing the callback/errback pair. For example, the
+ // following call sequence:
+ //
+ // | var d = new dojo.Deferred();
+ // | d.addCallback(myCallback);
+ // | d.addErrback(myErrback);
+ // | d.addBoth(myBoth);
+ // | d.addCallbacks(myCallback, myErrback);
+ //
+ // is translated into a Deferred with the following internal
+ // representation:
+ //
+ // | [
+ // | [myCallback, null],
+ // | [null, myErrback],
+ // | [myBoth, myBoth],
+ // | [myCallback, myErrback]
+ // | ]
+ //
+ // The Deferred also keeps track of its current status (fired). Its
+ // status may be one of three things:
+ //
+ // * -1: no value yet (initial condition)
+ // * 0: success
+ // * 1: error
+ //
+ // A Deferred will be in the error state if one of the following three
+ // conditions are met:
+ //
+ // 1. The result given to callback or errback is "instanceof" Error
+ // 2. The previous callback or errback raised an exception while
+ // executing
+ // 3. The previous callback or errback returned a value
+ // "instanceof" Error
+ //
+ // Otherwise, the Deferred will be in the success state. The state of
+ // the Deferred determines the next element in the callback sequence
+ // to run.
+ //
+ // When a callback or errback occurs with the example deferred chain,
+ // something equivalent to the following will happen (imagine
+ // that exceptions are caught and returned):
+ //
+ // | // d.callback(result) or d.errback(result)
+ // | if(!(result instanceof Error)){
+ // | result = myCallback(result);
+ // | }
+ // | if(result instanceof Error){
+ // | result = myErrback(result);
+ // | }
+ // | result = myBoth(result);
+ // | if(result instanceof Error){
+ // | result = myErrback(result);
+ // | }else{
+ // | result = myCallback(result);
+ // | }
+ //
+ // The result is then stored away in case another step is added to the
+ // callback sequence. Since the Deferred already has a value
+ // available, any new callbacks added will be called immediately.
+ //
+ // There are two other "advanced" details about this implementation
+ // that are useful:
+ //
+ // Callbacks are allowed to return Deferred instances themselves, so
+ // you can build complicated sequences of events with ease.
+ //
+ // The creator of the Deferred may specify a canceller. The canceller
+ // is a function that will be called if Deferred.cancel is called
+ // before the Deferred fires. You can use this to implement clean
+ // aborting of an XMLHttpRequest, etc. Note that cancel will fire the
+ // deferred with a CancelledError (unless your canceller returns
+ // another kind of error), so the errbacks should be prepared to
+ // handle that error for cancellable Deferreds.
+ // example:
+ // | var deferred = new dojo.Deferred();
+ // | setTimeout(function(){ deferred.callback({success: true}); }, 1000);
+ // | return deferred;
+ // example:
+ // Deferred objects are often used when making code asynchronous. It
+ // may be easiest to write functions in a synchronous manner and then
+ // split code using a deferred to trigger a response to a long-lived
+ // operation. For example, instead of register a callback function to
+ // denote when a rendering operation completes, the function can
+ // simply return a deferred:
+ //
+ // | // callback style:
+ // | function renderLotsOfData(data, callback){
+ // | var success = false
+ // | try{
+ // | for(var x in data){
+ // | renderDataitem(data[x]);
+ // | }
+ // | success = true;
+ // | }catch(e){ }
+ // | if(callback){
+ // | callback(success);
+ // | }
+ // | }
+ //
+ // | // using callback style
+ // | renderLotsOfData(someDataObj, function(success){
+ // | // handles success or failure
+ // | if(!success){
+ // | promptUserToRecover();
+ // | }
+ // | });
+ // | // NOTE: no way to add another callback here!!
+ // example:
+ // Using a Deferred doesn't simplify the sending code any, but it
+ // provides a standard interface for callers and senders alike,
+ // providing both with a simple way to service multiple callbacks for
+ // an operation and freeing both sides from worrying about details
+ // such as "did this get called already?". With Deferreds, new
+ // callbacks can be added at any time.
+ //
+ // | // Deferred style:
+ // | function renderLotsOfData(data){
+ // | var d = new dojo.Deferred();
+ // | try{
+ // | for(var x in data){
+ // | renderDataitem(data[x]);
+ // | }
+ // | d.callback(true);
+ // | }catch(e){
+ // | d.errback(new Error("rendering failed"));
+ // | }
+ // | return d;
+ // | }
+ //
+ // | // using Deferred style
+ // | renderLotsOfData(someDataObj).addErrback(function(){
+ // | promptUserToRecover();
+ // | });
+ // | // NOTE: addErrback and addCallback both return the Deferred
+ // | // again, so we could chain adding callbacks or save the
+ // | // deferred for later should we need to be notified again.
+ // example:
+ // In this example, renderLotsOfData is syncrhonous and so both
+ // versions are pretty artificial. Putting the data display on a
+ // timeout helps show why Deferreds rock:
+ //
+ // | // Deferred style and async func
+ // | function renderLotsOfData(data){
+ // | var d = new dojo.Deferred();
+ // | setTimeout(function(){
+ // | try{
+ // | for(var x in data){
+ // | renderDataitem(data[x]);
+ // | }
+ // | d.callback(true);
+ // | }catch(e){
+ // | d.errback(new Error("rendering failed"));
+ // | }
+ // | }, 100);
+ // | return d;
+ // | }
+ //
+ // | // using Deferred style
+ // | renderLotsOfData(someDataObj).addErrback(function(){
+ // | promptUserToRecover();
+ // | });
+ //
+ // Note that the caller doesn't have to change his code at all to
+ // handle the asynchronous case.
+
+ this.chain = [];
+ this.id = this._nextId();
+ this.fired = -1;
+ this.paused = 0;
+ this.results = [null, null];
+ this.canceller = canceller;
+ this.silentlyCancelled = false;
+};
+
+dojo.extend(dojo.Deferred, {
+ /*
+ makeCalled: function(){
+ // summary:
+ // returns a new, empty deferred, which is already in the called
+ // state. Calling callback() or errback() on this deferred will
+ // yeild an error and adding new handlers to it will result in
+ // them being called immediately.
+ var deferred = new dojo.Deferred();
+ deferred.callback();
+ return deferred;
+ },
+
+ toString: function(){
+ var state;
+ if(this.fired == -1){
+ state = 'unfired';
+ }else{
+ state = this.fired ? 'success' : 'error';
+ }
+ return 'Deferred(' + this.id + ', ' + state + ')';
+ },
+ */
+
+ _nextId: (function(){
+ var n = 1;
+ return function(){ return n++; };
+ })(),
+
+ cancel: function(){
+ // summary:
+ // Cancels a Deferred that has not yet received a value, or is
+ // waiting on another Deferred as its value.
+ // description:
+ // If a canceller is defined, the canceller is called. If the
+ // canceller did not return an error, or there was no canceller,
+ // then the errback chain is started.
+ var err;
+ if(this.fired == -1){
+ if(this.canceller){
+ err = this.canceller(this);
+ }else{
+ this.silentlyCancelled = true;
+ }
+ if(this.fired == -1){
+ if(!(err instanceof Error)){
+ var res = err;
+ err = new Error("Deferred Cancelled");
+ err.dojoType = "cancel";
+ err.cancelResult = res;
+ }
+ this.errback(err);
+ }
+ }else if( (this.fired == 0) &&
+ (this.results[0] instanceof dojo.Deferred)
+ ){
+ this.results[0].cancel();
+ }
+ },
+
+
+ _resback: function(res){
+ // summary:
+ // The private primitive that means either callback or errback
+ this.fired = ((res instanceof Error) ? 1 : 0);
+ this.results[this.fired] = res;
+ this._fire();
+ },
+
+ _check: function(){
+ if(this.fired != -1){
+ if(!this.silentlyCancelled){
+ throw new Error("already called!");
+ }
+ this.silentlyCancelled = false;
+ return;
+ }
+ },
+
+ callback: function(res){
+ // summary:
+ // Begin the callback sequence with a non-error value.
+
+ /*
+ callback or errback should only be called once on a given
+ Deferred.
+ */
+ this._check();
+ this._resback(res);
+ },
+
+ errback: function(/*Error*/res){
+ // summary:
+ // Begin the callback sequence with an error result.
+ this._check();
+ if(!(res instanceof Error)){
+ res = new Error(res);
+ }
+ this._resback(res);
+ },
+
+ addBoth: function(/*Function|Object*/cb, /*String?*/cbfn){
+ // summary:
+ // Add the same function as both a callback and an errback as the
+ // next element on the callback sequence.This is useful for code
+ // that you want to guarantee to run, e.g. a finalizer.
+ var enclosed = dojo.hitch.apply(dojo, arguments);
+ return this.addCallbacks(enclosed, enclosed); // dojo.Deferred
+ },
+
+ addCallback: function(/*Function|Object*/cb, /*String?*/cbfn /*...*/){
+ // summary:
+ // Add a single callback to the end of the callback sequence.
+ return this.addCallbacks(dojo.hitch.apply(dojo, arguments)); // dojo.Deferred
+ },
+
+ addErrback: function(cb, cbfn){
+ // summary:
+ // Add a single callback to the end of the callback sequence.
+ return this.addCallbacks(null, dojo.hitch.apply(dojo, arguments)); // dojo.Deferred
+ },
+
+ addCallbacks: function(cb, eb){
+ // summary:
+ // Add separate callback and errback to the end of the callback
+ // sequence.
+ this.chain.push([cb, eb])
+ if(this.fired >= 0){
+ this._fire();
+ }
+ return this; // dojo.Deferred
+ },
+
+ _fire: function(){
+ // summary:
+ // Used internally to exhaust the callback sequence when a result
+ // is available.
+ var chain = this.chain;
+ var fired = this.fired;
+ var res = this.results[fired];
+ var self = this;
+ var cb = null;
+ while(
+ (chain.length > 0) &&
+ (this.paused == 0)
+ ){
+ // Array
+ var f = chain.shift()[fired];
+ if(!f){ continue; }
+ var func = function(){
+ var ret = f(res);
+ //If no response, then use previous response.
+ if(typeof ret != "undefined"){
+ res = ret;
+ }
+ fired = ((res instanceof Error) ? 1 : 0);
+ if(res instanceof dojo.Deferred){
+ cb = function(res){
+ self._resback(res);
+ // inlined from _pause()
+ self.paused--;
+ if(
+ (self.paused == 0) &&
+ (self.fired >= 0)
+ ){
+ self._fire();
+ }
+ }
+ // inlined from _unpause
+ this.paused++;
+ }
+ };
+ if(dojo.config.isDebug){
+ func.call(this);
+ }else{
+ try{
+ func.call(this);
+ }catch(err){
+ fired = 1;
+ res = err;
+ }
+ }
+ }
+ this.fired = fired;
+ this.results[fired] = res;
+ if((cb)&&(this.paused)){
+ // this is for "tail recursion" in case the dependent
+ // deferred is already fired
+ res.addBoth(cb);
+ }
+ }
+});
+
+}
+
+if(!dojo._hasResource["dojo._base.json"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo._base.json"] = true;
+dojo.provide("dojo._base.json");
+
+dojo.fromJson = function(/*String*/ json){
+ // summary:
+ // Parses a [JSON](http://json.org) string to return a JavaScript object. Throws for invalid JSON strings.
+ // json:
+ // a string literal of a JSON item, for instance:
+ // `'{ "foo": [ "bar", 1, { "baz": "thud" } ] }'`
+
+ return eval("(" + json + ")"); // Object
+}
+
+dojo._escapeString = function(/*String*/str){
+ //summary:
+ // Adds escape sequences for non-visual characters, double quote and
+ // backslash and surrounds with double quotes to form a valid string
+ // literal.
+ return ('"' + str.replace(/(["\\])/g, '\\$1') + '"').
+ replace(/[\f]/g, "\\f").replace(/[\b]/g, "\\b").replace(/[\n]/g, "\\n").
+ replace(/[\t]/g, "\\t").replace(/[\r]/g, "\\r"); // string
+}
+
+dojo.toJsonIndentStr = "\t";
+dojo.toJson = function(/*Object*/ it, /*Boolean?*/ prettyPrint, /*String?*/ _indentStr){
+ // summary:
+ // Returns a [JSON](http://json.org) serialization of an object.
+ //
+ // description:
+ // Returns a [JSON](http://json.org) serialization of an object.
+ // Note that this doesn't check for infinite recursion, so don't do that!
+ //
+ // it:
+ // an object to be serialized. Objects may define their own
+ // serialization via a special "__json__" or "json" function
+ // property. If a specialized serializer has been defined, it will
+ // be used as a fallback.
+ //
+ // prettyPrint:
+ // if true, we indent objects and arrays to make the output prettier.
+ // The variable dojo.toJsonIndentStr is used as the indent string
+ // -- to use something other than the default (tab),
+ // change that variable before calling dojo.toJson().
+ //
+ // _indentStr:
+ // private variable for recursive calls when pretty printing, do not use.
+
+ if(it === undefined){
+ return "undefined";
+ }
+ var objtype = typeof it;
+ if(objtype == "number" || objtype == "boolean"){
+ return it + "";
+ }
+ if(it === null){
+ return "null";
+ }
+ if(dojo.isString(it)){
+ return dojo._escapeString(it);
+ }
+ // recurse
+ var recurse = arguments.callee;
+ // short-circuit for objects that support "json" serialization
+ // if they return "self" then just pass-through...
+ var newObj;
+ _indentStr = _indentStr || "";
+ var nextIndent = prettyPrint ? _indentStr + dojo.toJsonIndentStr : "";
+ var tf = it.__json__||it.json;
+ if(dojo.isFunction(tf)){
+ newObj = tf.call(it);
+ if(it !== newObj){
+ return recurse(newObj, prettyPrint, nextIndent);
+ }
+ }
+ if(it.nodeType && it.cloneNode){ // isNode
+ // we can't seriailize DOM nodes as regular objects because they have cycles
+ // DOM nodes could be serialized with something like outerHTML, but
+ // that can be provided by users in the form of .json or .__json__ function.
+ throw new Error("Can't serialize DOM nodes");
+ }
+
+ var sep = prettyPrint ? " " : "";
+ var newLine = prettyPrint ? "\n" : "";
+
+ // array
+ if(dojo.isArray(it)){
+ var res = dojo.map(it, function(obj){
+ var val = recurse(obj, prettyPrint, nextIndent);
+ if(typeof val != "string"){
+ val = "undefined";
+ }
+ return newLine + nextIndent + val;
+ });
+ return "[" + res.join("," + sep) + newLine + _indentStr + "]";
+ }
+ /*
+ // look in the registry
+ try {
+ window.o = it;
+ newObj = dojo.json.jsonRegistry.match(it);
+ return recurse(newObj, prettyPrint, nextIndent);
+ }catch(e){
+ //
+ }
+ // it's a function with no adapter, skip it
+ */
+ if(objtype == "function"){
+ return null; // null
+ }
+ // generic object code path
+ var output = [], key;
+ for(key in it){
+ var keyStr, val;
+ if(typeof key == "number"){
+ keyStr = '"' + key + '"';
+ }else if(typeof key == "string"){
+ keyStr = dojo._escapeString(key);
+ }else{
+ // skip non-string or number keys
+ continue;
+ }
+ val = recurse(it[key], prettyPrint, nextIndent);
+ if(typeof val != "string"){
+ // skip non-serializable values
+ continue;
+ }
+ // FIXME: use += on Moz!!
+ // MOW NOTE: using += is a pain because you have to account for the dangling comma...
+ output.push(newLine + nextIndent + keyStr + ":" + sep + val);
+ }
+ return "{" + output.join("," + sep) + newLine + _indentStr + "}"; // String
+}
+
+}
+
+if(!dojo._hasResource["dojo._base.array"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo._base.array"] = true;
+
+dojo.provide("dojo._base.array");
+
+(function(){
+ var _getParts = function(arr, obj, cb){
+ return [
+ dojo.isString(arr) ? arr.split("") : arr,
+ obj || dojo.global,
+ // FIXME: cache the anonymous functions we create here?
+ dojo.isString(cb) ? new Function("item", "index", "array", cb) : cb
+ ];
+ };
+
+ dojo.mixin(dojo, {
+ indexOf: function( /*Array*/ array,
+ /*Object*/ value,
+ /*Integer?*/ fromIndex,
+ /*Boolean?*/ findLast){
+ // summary:
+ // locates the first index of the provided value in the
+ // passed array. If the value is not found, -1 is returned.
+ // description:
+ // For details on this method, see:
+ // http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:indexOf
+
+ var step = 1, end = array.length || 0, i = 0;
+ if(findLast){
+ i = end - 1;
+ step = end = -1;
+ }
+ if(fromIndex != undefined){ i = fromIndex; }
+ if((findLast && i > end) || i < end){
+ for(; i != end; i += step){
+ if(array[i] == value){ return i; }
+ }
+ }
+ return -1; // Number
+ },
+
+ lastIndexOf: function(/*Array*/array, /*Object*/value, /*Integer?*/fromIndex){
+ // summary:
+ // locates the last index of the provided value in the passed
+ // array. If the value is not found, -1 is returned.
+ // description:
+ // For details on this method, see:
+ // http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:lastIndexOf
+ return dojo.indexOf(array, value, fromIndex, true); // Number
+ },
+
+ forEach: function(/*Array|String*/arr, /*Function|String*/callback, /*Object?*/thisObject){
+ // summary:
+ // for every item in arr, callback is invoked. Return values are ignored.
+ // arr:
+ // the array to iterate over. If a string, operates on individual characters.
+ // callback:
+ // a function is invoked with three arguments: item, index, and array
+ // thisObject:
+ // may be used to scope the call to callback
+ // description:
+ // This function corresponds to the JavaScript 1.6
+ // Array.forEach() method. For more details, see:
+ // http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:forEach
+ // example:
+ // | // log out all members of the array:
+ // | dojo.forEach(
+ // | [ "thinger", "blah", "howdy", 10 ],
+ // | function(item){
+ // |
+ // | }
+ // | );
+ // example:
+ // | // log out the members and their indexes
+ // | dojo.forEach(
+ // | [ "thinger", "blah", "howdy", 10 ],
+ // | function(item, idx, arr){
+ // |
+ // | }
+ // | );
+ // example:
+ // | // use a scoped object member as the callback
+ // |
+ // | var obj = {
+ // | prefix: "logged via obj.callback:",
+ // | callback: function(item){
+ // |
+ // | }
+ // | };
+ // |
+ // | // specifying the scope function executes the callback in that scope
+ // | dojo.forEach(
+ // | [ "thinger", "blah", "howdy", 10 ],
+ // | obj.callback,
+ // | obj
+ // | );
+ // |
+ // | // alternately, we can accomplish the same thing with dojo.hitch()
+ // | dojo.forEach(
+ // | [ "thinger", "blah", "howdy", 10 ],
+ // | dojo.hitch(obj, "callback")
+ // | );
+
+ // match the behavior of the built-in forEach WRT empty arrs
+ if(!arr || !arr.length){ return; }
+
+ // FIXME: there are several ways of handilng thisObject. Is
+ // dojo.global always the default context?
+ var _p = _getParts(arr, thisObject, callback); arr = _p[0];
+ for(var i=0,l=arr.length; i<l; ++i){
+ _p[2].call(_p[1], arr[i], i, arr);
+ }
+ },
+
+ _everyOrSome: function(/*Boolean*/every, /*Array|String*/arr, /*Function|String*/callback, /*Object?*/thisObject){
+ var _p = _getParts(arr, thisObject, callback); arr = _p[0];
+ for(var i=0,l=arr.length; i<l; ++i){
+ var result = !!_p[2].call(_p[1], arr[i], i, arr);
+ if(every ^ result){
+ return result; // Boolean
+ }
+ }
+ return every; // Boolean
+ },
+
+ every: function(/*Array|String*/arr, /*Function|String*/callback, /*Object?*/thisObject){
+ // summary:
+ // Determines whether or not every item in arr satisfies the
+ // condition implemented by callback.
+ // arr:
+ // the array to iterate on. If a string, operates on individual characters.
+ // callback:
+ // a function is invoked with three arguments: item, index,
+ // and array and returns true if the condition is met.
+ // thisObject:
+ // may be used to scope the call to callback
+ // description:
+ // This function corresponds to the JavaScript 1.6
+ // Array.every() method. For more details, see:
+ // http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:every
+ // example:
+ // | // returns false
+ // | dojo.every([1, 2, 3, 4], function(item){ return item>1; });
+ // example:
+ // | // returns true
+ // | dojo.every([1, 2, 3, 4], function(item){ return item>0; });
+ return this._everyOrSome(true, arr, callback, thisObject); // Boolean
+ },
+
+ some: function(/*Array|String*/arr, /*Function|String*/callback, /*Object?*/thisObject){
+ // summary:
+ // Determines whether or not any item in arr satisfies the
+ // condition implemented by callback.
+ // arr:
+ // the array to iterate over. If a string, operates on individual characters.
+ // callback:
+ // a function is invoked with three arguments: item, index,
+ // and array and returns true if the condition is met.
+ // thisObject:
+ // may be used to scope the call to callback
+ // description:
+ // This function corresponds to the JavaScript 1.6
+ // Array.some() method. For more details, see:
+ // http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:some
+ // example:
+ // | // is true
+ // | dojo.some([1, 2, 3, 4], function(item){ return item>1; });
+ // example:
+ // | // is false
+ // | dojo.some([1, 2, 3, 4], function(item){ return item<1; });
+ return this._everyOrSome(false, arr, callback, thisObject); // Boolean
+ },
+
+ map: function(/*Array|String*/arr, /*Function|String*/callback, /*Function?*/thisObject){
+ // summary:
+ // applies callback to each element of arr and returns
+ // an Array with the results
+ // arr:
+ // the array to iterate on. If a string, operates on
+ // individual characters.
+ // callback:
+ // a function is invoked with three arguments, (item, index,
+ // array), and returns a value
+ // thisObject:
+ // may be used to scope the call to callback
+ // description:
+ // This function corresponds to the JavaScript 1.6 Array.map()
+ // method. For more details, see:
+ // http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:map
+ // example:
+ // | // returns [2, 3, 4, 5]
+ // | dojo.map([1, 2, 3, 4], function(item){ return item+1 });
+
+ var _p = _getParts(arr, thisObject, callback); arr = _p[0];
+ var outArr = (arguments[3] ? (new arguments[3]()) : []);
+ for(var i=0,l=arr.length; i<l; ++i){
+ outArr.push(_p[2].call(_p[1], arr[i], i, arr));
+ }
+ return outArr; // Array
+ },
+
+ filter: function(/*Array*/arr, /*Function|String*/callback, /*Object?*/thisObject){
+ // summary:
+ // Returns a new Array with those items from arr that match the
+ // condition implemented by callback.
+ // arr:
+ // the array to iterate over.
+ // callback:
+ // a function that is invoked with three arguments (item,
+ // index, array). The return of this function is expected to
+ // be a boolean which determines whether the passed-in item
+ // will be included in the returned array.
+ // thisObject:
+ // may be used to scope the call to callback
+ // description:
+ // This function corresponds to the JavaScript 1.6
+ // Array.filter() method. For more details, see:
+ // http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:filter
+ // example:
+ // | // returns [2, 3, 4]
+ // | dojo.filter([1, 2, 3, 4], function(item){ return item>1; });
+
+ var _p = _getParts(arr, thisObject, callback); arr = _p[0];
+ var outArr = [];
+ for(var i=0,l=arr.length; i<l; ++i){
+ if(_p[2].call(_p[1], arr[i], i, arr)){
+ outArr.push(arr[i]);
+ }
+ }
+ return outArr; // Array
+ }
+ });
+})();
+
+}
+
+if(!dojo._hasResource["dojo._base.Color"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo._base.Color"] = true;
+dojo.provide("dojo._base.Color");
+
+
+
+dojo.Color = function(/*Array|String|Object*/ color){
+ // summary:
+ // takes a named string, hex string, array of rgb or rgba values,
+ // an object with r, g, b, and a properties, or another dojo.Color object
+ if(color){ this.setColor(color); }
+};
+
+// FIXME: there's got to be a more space-efficient way to encode or discover these!! Use hex?
+dojo.Color.named = {
+ black: [0,0,0],
+ silver: [192,192,192],
+ gray: [128,128,128],
+ white: [255,255,255],
+ maroon: [128,0,0],
+ red: [255,0,0],
+ purple: [128,0,128],
+ fuchsia: [255,0,255],
+ green: [0,128,0],
+ lime: [0,255,0],
+ olive: [128,128,0],
+ yellow: [255,255,0],
+ navy: [0,0,128],
+ blue: [0,0,255],
+ teal: [0,128,128],
+ aqua: [0,255,255]
+};
+
+
+dojo.extend(dojo.Color, {
+ r: 255, g: 255, b: 255, a: 1,
+ _set: function(r, g, b, a){
+ var t = this; t.r = r; t.g = g; t.b = b; t.a = a;
+ },
+ setColor: function(/*Array|String|Object*/ color){
+ // summary:
+ // takes a named string, hex string, array of rgb or rgba values,
+ // an object with r, g, b, and a properties, or another dojo.Color object
+ var d = dojo;
+ if(d.isString(color)){
+ d.colorFromString(color, this);
+ }else if(d.isArray(color)){
+ d.colorFromArray(color, this);
+ }else{
+ this._set(color.r, color.g, color.b, color.a);
+ if(!(color instanceof d.Color)){ this.sanitize(); }
+ }
+ return this; // dojo.Color
+ },
+ sanitize: function(){
+ // summary:
+ // makes sure that the object has correct attributes
+ // description:
+ // the default implementation does nothing, include dojo.colors to
+ // augment it to real checks
+ return this; // dojo.Color
+ },
+ toRgb: function(){
+ // summary: returns 3 component array of rgb values
+ var t = this;
+ return [t.r, t.g, t.b]; // Array
+ },
+ toRgba: function(){
+ // summary: returns a 4 component array of rgba values
+ var t = this;
+ return [t.r, t.g, t.b, t.a]; // Array
+ },
+ toHex: function(){
+ // summary: returns a css color string in hexadecimal representation
+ var arr = dojo.map(["r", "g", "b"], function(x){
+ var s = this[x].toString(16);
+ return s.length < 2 ? "0" + s : s;
+ }, this);
+ return "#" + arr.join(""); // String
+ },
+ toCss: function(/*Boolean?*/ includeAlpha){
+ // summary: returns a css color string in rgb(a) representation
+ var t = this, rgb = t.r + ", " + t.g + ", " + t.b;
+ return (includeAlpha ? "rgba(" + rgb + ", " + t.a : "rgb(" + rgb) + ")"; // String
+ },
+ toString: function(){
+ // summary: returns a visual representation of the color
+ return this.toCss(true); // String
+ }
+});
+
+dojo.blendColors = function(
+ /*dojo.Color*/ start,
+ /*dojo.Color*/ end,
+ /*Number*/ weight,
+ /*dojo.Color?*/ obj
+){
+ // summary:
+ // blend colors end and start with weight from 0 to 1, 0.5 being a 50/50 blend,
+ // can reuse a previously allocated dojo.Color object for the result
+ var d = dojo, t = obj || new dojo.Color();
+ d.forEach(["r", "g", "b", "a"], function(x){
+ t[x] = start[x] + (end[x] - start[x]) * weight;
+ if(x != "a"){ t[x] = Math.round(t[x]); }
+ });
+ return t.sanitize(); // dojo.Color
+};
+
+dojo.colorFromRgb = function(/*String*/ color, /*dojo.Color?*/ obj){
+ // summary: get rgb(a) array from css-style color declarations
+ var m = color.toLowerCase().match(/^rgba?\(([\s\.,0-9]+)\)/);
+ return m && dojo.colorFromArray(m[1].split(/\s*,\s*/), obj); // dojo.Color
+};
+
+dojo.colorFromHex = function(/*String*/ color, /*dojo.Color?*/ obj){
+ // summary: converts a hex string with a '#' prefix to a color object.
+ // Supports 12-bit #rgb shorthand.
+ var d = dojo, t = obj || new d.Color(),
+ bits = (color.length == 4) ? 4 : 8,
+ mask = (1 << bits) - 1;
+ color = Number("0x" + color.substr(1));
+ if(isNaN(color)){
+ return null; // dojo.Color
+ }
+ d.forEach(["b", "g", "r"], function(x){
+ var c = color & mask;
+ color >>= bits;
+ t[x] = bits == 4 ? 17 * c : c;
+ });
+ t.a = 1;
+ return t; // dojo.Color
+};
+
+dojo.colorFromArray = function(/*Array*/ a, /*dojo.Color?*/ obj){
+ // summary: builds a color from 1, 2, 3, or 4 element array
+ var t = obj || new dojo.Color();
+ t._set(Number(a[0]), Number(a[1]), Number(a[2]), Number(a[3]));
+ if(isNaN(t.a)){ t.a = 1; }
+ return t.sanitize(); // dojo.Color
+};
+
+dojo.colorFromString = function(/*String*/ str, /*dojo.Color?*/ obj){
+ // summary:
+ // parses str for a color value.
+ // description:
+ // Acceptable input values for str may include arrays of any form
+ // accepted by dojo.colorFromArray, hex strings such as "#aaaaaa", or
+ // rgb or rgba strings such as "rgb(133, 200, 16)" or "rgba(10, 10,
+ // 10, 50)"
+ // returns:
+ // a dojo.Color object. If obj is passed, it will be the return value.
+ var a = dojo.Color.named[str];
+ return a && dojo.colorFromArray(a, obj) || dojo.colorFromRgb(str, obj) || dojo.colorFromHex(str, obj);
+};
+
+}
+
+if(!dojo._hasResource["dojo._base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo._base"] = true;
+dojo.provide("dojo._base");
+
+
+
+
+
+
+
+
+
+}
+
+if(!dojo._hasResource["dojo._base.window"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo._base.window"] = true;
+dojo.provide("dojo._base.window");
+
+/*=====
+dojo.doc = {
+ // summary:
+ // Alias for the current document. 'dojo.doc' can be modified
+ // for temporary context shifting. Also see dojo.withDoc().
+ // description:
+ // Refer to dojo.doc rather
+ // than referring to 'window.document' to ensure your code runs
+ // correctly in managed contexts.
+ // example:
+ // | n.appendChild(dojo.doc.createElement('div'));
+}
+=====*/
+dojo.doc = window["document"] || null;
+
+dojo.body = function(){
+ // summary:
+ // Return the body element of the document
+ // return the body object associated with dojo.doc
+ // example:
+ // | dojo.body().appendChild(dojo.doc.createElement('div'));
+
+ // Note: document.body is not defined for a strict xhtml document
+ // Would like to memoize this, but dojo.doc can change vi dojo.withDoc().
+ return dojo.doc.body || dojo.doc.getElementsByTagName("body")[0]; // Node
+}
+
+dojo.setContext = function(/*Object*/globalObject, /*DocumentElement*/globalDocument){
+ // summary:
+ // changes the behavior of many core Dojo functions that deal with
+ // namespace and DOM lookup, changing them to work in a new global
+ // context (e.g., an iframe). The varibles dojo.global and dojo.doc
+ // are modified as a result of calling this function and the result of
+ // `dojo.body()` likewise differs.
+ dojo.global = globalObject;
+ dojo.doc = globalDocument;
+};
+
+dojo._fireCallback = function(callback, context, cbArguments){
+ if(context && dojo.isString(callback)){
+ callback = context[callback];
+ }
+ return callback.apply(context, cbArguments || [ ]);
+}
+
+dojo.withGlobal = function( /*Object*/globalObject,
+ /*Function*/callback,
+ /*Object?*/thisObject,
+ /*Array?*/cbArguments){
+ // summary:
+ // Call callback with globalObject as dojo.global and
+ // globalObject.document as dojo.doc. If provided, globalObject
+ // will be executed in the context of object thisObject
+ // description:
+ // When callback() returns or throws an error, the dojo.global
+ // and dojo.doc will be restored to its previous state.
+ var rval;
+ var oldGlob = dojo.global;
+ var oldDoc = dojo.doc;
+ try{
+ dojo.setContext(globalObject, globalObject.document);
+ rval = dojo._fireCallback(callback, thisObject, cbArguments);
+ }finally{
+ dojo.setContext(oldGlob, oldDoc);
+ }
+ return rval;
+}
+
+dojo.withDoc = function( /*Object*/documentObject,
+ /*Function*/callback,
+ /*Object?*/thisObject,
+ /*Array?*/cbArguments){
+ // summary:
+ // Call callback with documentObject as dojo.doc. If provided,
+ // callback will be executed in the context of object thisObject
+ // description:
+ // When callback() returns or throws an error, the dojo.doc will
+ // be restored to its previous state.
+ var rval;
+ var oldDoc = dojo.doc;
+ try{
+ dojo.doc = documentObject;
+ rval = dojo._fireCallback(callback, thisObject, cbArguments);
+ }finally{
+ dojo.doc = oldDoc;
+ }
+ return rval;
+};
+
+}
+
+if(!dojo._hasResource["dojo._base.event"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo._base.event"] = true;
+dojo.provide("dojo._base.event");
+
+
+// this file courtesy of the TurboAjax Group, licensed under a Dojo CLA
+
+(function(){
+ // DOM event listener machinery
+ var del = (dojo._event_listener = {
+ add: function(/*DOMNode*/node, /*String*/name, /*Function*/fp){
+ if(!node){return;}
+ name = del._normalizeEventName(name);
+ fp = del._fixCallback(name, fp);
+ var oname = name;
+ if(!dojo.isIE && (name == "mouseenter" || name == "mouseleave")){
+ var ofp = fp;
+ //oname = name;
+ name = (name == "mouseenter") ? "mouseover" : "mouseout";
+ fp = function(e){
+ // check tagName to fix a FF2 bug with invalid nodes (hidden child DIV of INPUT)
+ // which causes isDecendant to return false which causes
+ // spurious, and more importantly, incorrect mouse events to fire.
+ // TODO: remove tagName check when Firefox 2 is no longer supported
+ try{ e.relatedTarget.tagName; } catch(e2){ return; }
+ if(!dojo.isDescendant(e.relatedTarget, node)){
+ // e.type = oname; // FIXME: doesn't take? SJM: event.type is generally immutable.
+ return ofp.call(this, e);
+ }
+ }
+ }
+ node.addEventListener(name, fp, false);
+ return fp; /*Handle*/
+ },
+ remove: function(/*DOMNode*/node, /*String*/event, /*Handle*/handle){
+ // summary:
+ // clobbers the listener from the node
+ // node:
+ // DOM node to attach the event to
+ // event:
+ // the name of the handler to remove the function from
+ // handle:
+ // the handle returned from add
+ if (node){
+ event = del._normalizeEventName(event);
+ if(!dojo.isIE && (event == "mouseenter" || event == "mouseleave")){
+ event = (event == "mouseenter") ? "mouseover" : "mouseout";
+ }
+
+ node.removeEventListener(event, handle, false);
+ }
+ },
+ _normalizeEventName: function(/*String*/name){
+ // Generally, name should be lower case, unless it is special
+ // somehow (e.g. a Mozilla DOM event).
+ // Remove 'on'.
+ return name.slice(0,2) =="on" ? name.slice(2) : name;
+ },
+ _fixCallback: function(/*String*/name, fp){
+ // By default, we only invoke _fixEvent for 'keypress'
+ // If code is added to _fixEvent for other events, we have
+ // to revisit this optimization.
+ // This also applies to _fixEvent overrides for Safari and Opera
+ // below.
+ return name != "keypress" ? fp : function(e){ return fp.call(this, del._fixEvent(e, this)); };
+ },
+ _fixEvent: function(evt, sender){
+ // _fixCallback only attaches us to keypress.
+ // Switch on evt.type anyway because we might
+ // be called directly from dojo.fixEvent.
+ switch(evt.type){
+ case "keypress":
+ del._setKeyChar(evt);
+ break;
+ }
+ return evt;
+ },
+ _setKeyChar: function(evt){
+ evt.keyChar = evt.charCode ? String.fromCharCode(evt.charCode) : '';
+ evt.charOrCode = evt.keyChar || evt.keyCode;
+ },
+ // For IE and Safari: some ctrl-key combinations (mostly w/punctuation) do not emit a char code in IE
+ // we map those virtual key codes to ascii here
+ // not valid for all (non-US) keyboards, so maybe we shouldn't bother
+ _punctMap: {
+ 106:42,
+ 111:47,
+ 186:59,
+ 187:43,
+ 188:44,
+ 189:45,
+ 190:46,
+ 191:47,
+ 192:96,
+ 219:91,
+ 220:92,
+ 221:93,
+ 222:39
+ }
+ });
+
+ // DOM events
+
+ dojo.fixEvent = function(/*Event*/evt, /*DOMNode*/sender){
+ // summary:
+ // normalizes properties on the event object including event
+ // bubbling methods, keystroke normalization, and x/y positions
+ // evt: Event
+ // native event object
+ // sender: DOMNode
+ // node to treat as "currentTarget"
+ return del._fixEvent(evt, sender);
+ }
+
+ dojo.stopEvent = function(/*Event*/evt){
+ // summary:
+ // prevents propagation and clobbers the default action of the
+ // passed event
+ // evt: Event
+ // The event object. If omitted, window.event is used on IE.
+ evt.preventDefault();
+ evt.stopPropagation();
+ // NOTE: below, this method is overridden for IE
+ }
+
+ // the default listener to use on dontFix nodes, overriden for IE
+ var node_listener = dojo._listener;
+
+ // Unify connect and event listeners
+ dojo._connect = function(obj, event, context, method, dontFix){
+ // FIXME: need a more strict test
+ var isNode = obj && (obj.nodeType||obj.attachEvent||obj.addEventListener);
+ // choose one of three listener options: raw (connect.js), DOM event on a Node, custom event on a Node
+ // we need the third option to provide leak prevention on broken browsers (IE)
+ var lid = !isNode ? 0 : (!dontFix ? 1 : 2), l = [dojo._listener, del, node_listener][lid];
+ // create a listener
+ var h = l.add(obj, event, dojo.hitch(context, method));
+ // formerly, the disconnect package contained "l" directly, but if client code
+ // leaks the disconnect package (by connecting it to a node), referencing "l"
+ // compounds the problem.
+ // instead we return a listener id, which requires custom _disconnect below.
+ // return disconnect package
+ return [ obj, event, h, lid ];
+ }
+
+ dojo._disconnect = function(obj, event, handle, listener){
+ ([dojo._listener, del, node_listener][listener]).remove(obj, event, handle);
+ }
+
+ // Constants
+
+ // Public: client code should test
+ // keyCode against these named constants, as the
+ // actual codes can vary by browser.
+ dojo.keys = {
+ // summary: definitions for common key values
+ BACKSPACE: 8,
+ TAB: 9,
+ CLEAR: 12,
+ ENTER: 13,
+ SHIFT: 16,
+ CTRL: 17,
+ ALT: 18,
+ PAUSE: 19,
+ CAPS_LOCK: 20,
+ ESCAPE: 27,
+ SPACE: 32,
+ PAGE_UP: 33,
+ PAGE_DOWN: 34,
+ END: 35,
+ HOME: 36,
+ LEFT_ARROW: 37,
+ UP_ARROW: 38,
+ RIGHT_ARROW: 39,
+ DOWN_ARROW: 40,
+ INSERT: 45,
+ DELETE: 46,
+ HELP: 47,
+ LEFT_WINDOW: 91,
+ RIGHT_WINDOW: 92,
+ SELECT: 93,
+ NUMPAD_0: 96,
+ NUMPAD_1: 97,
+ NUMPAD_2: 98,
+ NUMPAD_3: 99,
+ NUMPAD_4: 100,
+ NUMPAD_5: 101,
+ NUMPAD_6: 102,
+ NUMPAD_7: 103,
+ NUMPAD_8: 104,
+ NUMPAD_9: 105,
+ NUMPAD_MULTIPLY: 106,
+ NUMPAD_PLUS: 107,
+ NUMPAD_ENTER: 108,
+ NUMPAD_MINUS: 109,
+ NUMPAD_PERIOD: 110,
+ NUMPAD_DIVIDE: 111,
+ F1: 112,
+ F2: 113,
+ F3: 114,
+ F4: 115,
+ F5: 116,
+ F6: 117,
+ F7: 118,
+ F8: 119,
+ F9: 120,
+ F10: 121,
+ F11: 122,
+ F12: 123,
+ F13: 124,
+ F14: 125,
+ F15: 126,
+ NUM_LOCK: 144,
+ SCROLL_LOCK: 145
+ };
+
+ // IE event normalization
+ if(dojo.isIE){
+ var _trySetKeyCode = function(e, code){
+ try{
+ // squelch errors when keyCode is read-only
+ // (e.g. if keyCode is ctrl or shift)
+ return (e.keyCode = code);
+ }catch(e){
+ return 0;
+ }
+ }
+
+ // by default, use the standard listener
+ var iel = dojo._listener;
+ var listenersName = dojo._ieListenersName = "_" + dojo._scopeName + "_listeners";
+ // dispatcher tracking property
+ if(!dojo.config._allow_leaks){
+ // custom listener that handles leak protection for DOM events
+ node_listener = iel = dojo._ie_listener = {
+ // support handler indirection: event handler functions are
+ // referenced here. Event dispatchers hold only indices.
+ handlers: [],
+ // add a listener to an object
+ add: function(/*Object*/ source, /*String*/ method, /*Function*/ listener){
+ source = source || dojo.global;
+ var f = source[method];
+ if(!f||!f[listenersName]){
+ var d = dojo._getIeDispatcher();
+ // original target function is special
+ d.target = f && (ieh.push(f) - 1);
+ // dispatcher holds a list of indices into handlers table
+ d[listenersName] = [];
+ // redirect source to dispatcher
+ f = source[method] = d;
+ }
+ return f[listenersName].push(ieh.push(listener) - 1) ; /*Handle*/
+ },
+ // remove a listener from an object
+ remove: function(/*Object*/ source, /*String*/ method, /*Handle*/ handle){
+ var f = (source||dojo.global)[method], l = f && f[listenersName];
+ if(f && l && handle--){
+ delete ieh[l[handle]];
+ delete l[handle];
+ }
+ }
+ };
+ // alias used above
+ var ieh = iel.handlers;
+ }
+
+ dojo.mixin(del, {
+ add: function(/*DOMNode*/node, /*String*/event, /*Function*/fp){
+ if(!node){return;} // undefined
+ event = del._normalizeEventName(event);
+ if(event=="onkeypress"){
+ // we need to listen to onkeydown to synthesize
+ // keypress events that otherwise won't fire
+ // on IE
+ var kd = node.onkeydown;
+ if(!kd || !kd[listenersName] || !kd._stealthKeydownHandle){
+ var h = del.add(node, "onkeydown", del._stealthKeyDown);
+ kd = node.onkeydown;
+ kd._stealthKeydownHandle = h;
+ kd._stealthKeydownRefs = 1;
+ }else{
+ kd._stealthKeydownRefs++;
+ }
+ }
+ return iel.add(node, event, del._fixCallback(fp));
+ },
+ remove: function(/*DOMNode*/node, /*String*/event, /*Handle*/handle){
+ event = del._normalizeEventName(event);
+ iel.remove(node, event, handle);
+ if(event=="onkeypress"){
+ var kd = node.onkeydown;
+ if(--kd._stealthKeydownRefs <= 0){
+ iel.remove(node, "onkeydown", kd._stealthKeydownHandle);
+ delete kd._stealthKeydownHandle;
+ }
+ }
+ },
+ _normalizeEventName: function(/*String*/eventName){
+ // Generally, eventName should be lower case, unless it is
+ // special somehow (e.g. a Mozilla event)
+ // ensure 'on'
+ return eventName.slice(0,2) != "on" ? "on" + eventName : eventName;
+ },
+ _nop: function(){},
+ _fixEvent: function(/*Event*/evt, /*DOMNode*/sender){
+ // summary:
+ // normalizes properties on the event object including event
+ // bubbling methods, keystroke normalization, and x/y positions
+ // evt: native event object
+ // sender: node to treat as "currentTarget"
+ if(!evt){
+ var w = sender && (sender.ownerDocument || sender.document || sender).parentWindow || window;
+ evt = w.event;
+ }
+ if(!evt){return(evt);}
+ evt.target = evt.srcElement;
+ evt.currentTarget = (sender || evt.srcElement);
+ evt.layerX = evt.offsetX;
+ evt.layerY = evt.offsetY;
+ // FIXME: scroll position query is duped from dojo.html to
+ // avoid dependency on that entire module. Now that HTML is in
+ // Base, we should convert back to something similar there.
+ var se = evt.srcElement, doc = (se && se.ownerDocument) || document;
+ // DO NOT replace the following to use dojo.body(), in IE, document.documentElement should be used
+ // here rather than document.body
+ var docBody = ((dojo.isIE < 6) || (doc["compatMode"] == "BackCompat")) ? doc.body : doc.documentElement;
+ var offset = dojo._getIeDocumentElementOffset();
+ evt.pageX = evt.clientX + dojo._fixIeBiDiScrollLeft(docBody.scrollLeft || 0) - offset.x;
+ evt.pageY = evt.clientY + (docBody.scrollTop || 0) - offset.y;
+ if(evt.type == "mouseover"){
+ evt.relatedTarget = evt.fromElement;
+ }
+ if(evt.type == "mouseout"){
+ evt.relatedTarget = evt.toElement;
+ }
+ evt.stopPropagation = del._stopPropagation;
+ evt.preventDefault = del._preventDefault;
+ return del._fixKeys(evt);
+ },
+ _fixKeys: function(evt){
+ switch(evt.type){
+ case "keypress":
+ var c = ("charCode" in evt ? evt.charCode : evt.keyCode);
+ if (c==10){
+ // CTRL-ENTER is CTRL-ASCII(10) on IE, but CTRL-ENTER on Mozilla
+ c=0;
+ evt.keyCode = 13;
+ }else if(c==13||c==27){
+ c=0; // Mozilla considers ENTER and ESC non-printable
+ }else if(c==3){
+ c=99; // Mozilla maps CTRL-BREAK to CTRL-c
+ }
+ // Mozilla sets keyCode to 0 when there is a charCode
+ // but that stops the event on IE.
+ evt.charCode = c;
+ del._setKeyChar(evt);
+ break;
+ }
+ return evt;
+ },
+ _stealthKeyDown: function(evt){
+ // IE doesn't fire keypress for most non-printable characters.
+ // other browsers do, we simulate it here.
+ var kp = evt.currentTarget.onkeypress;
+ // only works if kp exists and is a dispatcher
+ if(!kp || !kp[listenersName]){ return; }
+ // munge key/charCode
+ var k=evt.keyCode;
+ // These are Windows Virtual Key Codes
+ // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/UserInput/VirtualKeyCodes.asp
+ var unprintable = (k!=13)&&(k!=32)&&(k!=27)&&(k<48||k>90)&&(k<96||k>111)&&(k<186||k>192)&&(k<219||k>222);
+ // synthesize keypress for most unprintables and CTRL-keys
+ if(unprintable||evt.ctrlKey){
+ var c = unprintable ? 0 : k;
+ if(evt.ctrlKey){
+ if(k==3 || k==13){
+ return; // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively
+ }else if(c>95 && c<106){
+ c -= 48; // map CTRL-[numpad 0-9] to ASCII
+ }else if((!evt.shiftKey)&&(c>=65&&c<=90)){
+ c += 32; // map CTRL-[A-Z] to lowercase
+ }else{
+ c = del._punctMap[c] || c; // map other problematic CTRL combinations to ASCII
+ }
+ }
+ // simulate a keypress event
+ var faux = del._synthesizeEvent(evt, {type: 'keypress', faux: true, charCode: c});
+ kp.call(evt.currentTarget, faux);
+ evt.cancelBubble = faux.cancelBubble;
+ evt.returnValue = faux.returnValue;
+ _trySetKeyCode(evt, faux.keyCode);
+ }
+ },
+ // Called in Event scope
+ _stopPropagation: function(){
+ this.cancelBubble = true;
+ },
+ _preventDefault: function(){
+ // Setting keyCode to 0 is the only way to prevent certain keypresses (namely
+ // ctrl-combinations that correspond to menu accelerator keys).
+ // Otoh, it prevents upstream listeners from getting this information
+ // Try to split the difference here by clobbering keyCode only for ctrl
+ // combinations. If you still need to access the key upstream, bubbledKeyCode is
+ // provided as a workaround.
+ this.bubbledKeyCode = this.keyCode;
+ if(this.ctrlKey){_trySetKeyCode(this, 0);}
+ this.returnValue = false;
+ }
+ });
+
+ // override stopEvent for IE
+ dojo.stopEvent = function(evt){
+ evt = evt || window.event;
+ del._stopPropagation.call(evt);
+ del._preventDefault.call(evt);
+ }
+ }
+
+ del._synthesizeEvent = function(evt, props){
+ var faux = dojo.mixin({}, evt, props);
+ del._setKeyChar(faux);
+ // FIXME: would prefer to use dojo.hitch: dojo.hitch(evt, evt.preventDefault);
+ // but it throws an error when preventDefault is invoked on Safari
+ // does Event.preventDefault not support "apply" on Safari?
+ faux.preventDefault = function(){ evt.preventDefault(); };
+ faux.stopPropagation = function(){ evt.stopPropagation(); };
+ return faux;
+ }
+
+ // Opera event normalization
+ if(dojo.isOpera){
+ dojo.mixin(del, {
+ _fixEvent: function(evt, sender){
+ switch(evt.type){
+ case "keypress":
+ var c = evt.which;
+ if(c==3){
+ c=99; // Mozilla maps CTRL-BREAK to CTRL-c
+ }
+ // can't trap some keys at all, like INSERT and DELETE
+ // there is no differentiating info between DELETE and ".", or INSERT and "-"
+ c = ((c<41)&&(!evt.shiftKey) ? 0 : c);
+ if((evt.ctrlKey)&&(!evt.shiftKey)&&(c>=65)&&(c<=90)){
+ // lowercase CTRL-[A-Z] keys
+ c += 32;
+ }
+ return del._synthesizeEvent(evt, { charCode: c });
+ }
+ return evt;
+ }
+ });
+ }
+
+ // Safari event normalization
+ if(dojo.isSafari){
+ del._add = del.add;
+ del._remove = del.remove;
+
+ dojo.mixin(del, {
+ add: function(/*DOMNode*/node, /*String*/event, /*Function*/fp){
+ if(!node){return;} // undefined
+ var handle = del._add(node, event, fp);
+ if(del._normalizeEventName(event) == "keypress"){
+ // we need to listen to onkeydown to synthesize
+ // keypress events that otherwise won't fire
+ // in Safari 3.1+: https://lists.webkit.org/pipermail/webkit-dev/2007-December/002992.html
+ handle._stealthKeyDownHandle = del._add(node, "keydown", function(evt){
+ //A variation on the IE _stealthKeydown function
+ //Synthesize an onkeypress event, but only for unprintable characters.
+ var k=evt.keyCode;
+ // These are Windows Virtual Key Codes
+ // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/UserInput/VirtualKeyCodes.asp
+ var unprintable = (k!=13)&&(k!=32)&&(k!=27)&&(k<48||k>90)&&(k<96||k>111)&&(k<186||k>192)&&(k<219||k>222);
+ // synthesize keypress for most unprintables and CTRL-keys
+ if(unprintable||evt.ctrlKey){
+ var c = unprintable ? 0 : k;
+ if(evt.ctrlKey){
+ if(k==3 || k==13){
+ return; // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively
+ }else if(c>95 && c<106){
+ c -= 48; // map CTRL-[numpad 0-9] to ASCII
+ }else if((!evt.shiftKey)&&(c>=65&&c<=90)){
+ c += 32; // map CTRL-[A-Z] to lowercase
+ }else{
+ c = del._punctMap[c] || c; // map other problematic CTRL combinations to ASCII
+ }
+ }
+ // simulate a keypress event
+ var faux = del._synthesizeEvent(evt, {type: 'keypress', faux: true, charCode: c});
+ fp.call(evt.currentTarget, faux);
+ }
+ });
+ }
+ return handle; /*Handle*/
+ },
+
+ remove: function(/*DOMNode*/node, /*String*/event, /*Handle*/handle){
+ if(node){
+ if(handle._stealthKeyDownHandle){
+ del._remove(node, "keydown", handle._stealthKeyDownHandle);
+ }
+ del._remove(node, event, handle);
+ }
+ },
+ _fixEvent: function(evt, sender){
+ switch(evt.type){
+ case "keypress":
+ if(evt.faux){ return evt; }
+ var c = evt.charCode;
+ c = c>=32? c : 0;
+ return del._synthesizeEvent(evt, {charCode: c, faux: true});
+ }
+ return evt;
+ }
+ });
+ }
+})();
+
+if(dojo.isIE){
+ // keep this out of the closure
+ // closing over 'iel' or 'ieh' b0rks leak prevention
+ // ls[i] is an index into the master handler array
+ dojo._ieDispatcher = function(args, sender){
+ var ap=Array.prototype, h=dojo._ie_listener.handlers, c=args.callee, ls=c[dojo._ieListenersName], t=h[c.target];
+ // return value comes from original target function
+ var r = t && t.apply(sender, args);
+ // make local copy of listener array so it's immutable during processing
+ var lls = [].concat(ls);
+ // invoke listeners after target function
+ for(var i in lls){
+ if(!(i in ap)){
+ h[lls[i]].apply(sender, args);
+ }
+ }
+ return r;
+ }
+ dojo._getIeDispatcher = function(){
+ // ensure the returned function closes over nothing ("new Function" apparently doesn't close)
+ return new Function(dojo._scopeName + "._ieDispatcher(arguments, this)"); // function
+ }
+ // keep this out of the closure to reduce RAM allocation
+ dojo._event_listener._fixCallback = function(fp){
+ var f = dojo._event_listener._fixEvent;
+ return function(e){ return fp.call(this, f(e, this)); };
+ }
+}
+
+}
+
+if(!dojo._hasResource["dojo._base.html"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo._base.html"] = true;
+
+dojo.provide("dojo._base.html");
+
+// FIXME: need to add unit tests for all the semi-public methods
+
+try{
+ document.execCommand("BackgroundImageCache", false, true);
+}catch(e){
+ // sane browsers don't have cache "issues"
+}
+
+// =============================
+// DOM Functions
+// =============================
+
+/*=====
+dojo.byId = function(id, doc){
+ // summary:
+ // Returns DOM node with matching `id` attribute or `null`
+ // if not found, similar to "$" function in another library.
+ // If `id` is a DomNode, this function is a no-op.
+ //
+ // id: String|DOMNode
+ // A string to match an HTML id attribute or a reference to a DOM Node
+ //
+ // doc: Document?
+ // Document to work in. Defaults to the current value of
+ // dojo.doc. Can be used to retrieve
+ // node references from other documents.
+=====*/
+if(dojo.isIE || dojo.isOpera){
+ dojo.byId = function(id, doc){
+ if(dojo.isString(id)){
+ var _d = doc || dojo.doc;
+ var te = _d.getElementById(id);
+ // attributes.id.value is better than just id in case the
+ // user has a name=id inside a form
+ if(te && te.attributes.id.value == id){
+ return te;
+ }else{
+ var eles = _d.all[id];
+ if(!eles || !eles.length){ return eles; }
+ // if more than 1, choose first with the correct id
+ var i=0;
+ while((te=eles[i++])){
+ if(te.attributes.id.value == id){ return te; }
+ }
+ }
+ }else{
+ return id; // DomNode
+ }
+ }
+}else{
+ dojo.byId = function(id, doc){
+ return dojo.isString(id) ? (doc || dojo.doc).getElementById(id) : id; // DomNode
+ }
+}
+/*=====
+}
+=====*/
+
+(function(){
+ var d = dojo;
+
+ var _destroyContainer = null;
+ dojo.addOnWindowUnload(function(){
+ _destroyContainer=null; //prevent IE leak
+ });
+
+ dojo._destroyElement = function(/*String||DomNode*/node){
+ // summary:
+ // removes node from its parent, clobbers it and all of its
+ // children.
+ // node:
+ // the element to be destroyed, either as an ID or a reference
+
+ node = d.byId(node);
+ try{
+ if(!_destroyContainer || _destroyContainer.ownerDocument != node.ownerDocument){
+ _destroyContainer = node.ownerDocument.createElement("div");
+ }
+ _destroyContainer.appendChild(node.parentNode ? node.parentNode.removeChild(node) : node);
+ // NOTE: see http://trac.dojotoolkit.org/ticket/2931. This may be a bug and not a feature
+ _destroyContainer.innerHTML = "";
+ }catch(e){
+ /* squelch */
+ }
+ };
+
+ dojo.isDescendant = function(/*DomNode|String*/node, /*DomNode|String*/ancestor){
+ // summary:
+ // Returns true if node is a descendant of ancestor
+ // node: id or node reference to test
+ // ancestor: id or node reference of potential parent to test against
+ try{
+ node = d.byId(node);
+ ancestor = d.byId(ancestor);
+ while(node){
+ if(node === ancestor){
+ return true; // Boolean
+ }
+ node = node.parentNode;
+ }
+ }catch(e){ /* squelch, return false */ }
+ return false; // Boolean
+ };
+
+ dojo.setSelectable = function(/*DomNode|String*/node, /*Boolean*/selectable){
+ // summary: enable or disable selection on a node
+ // node:
+ // id or reference to node
+ // selectable:
+ node = d.byId(node);
+ if(d.isMozilla){
+ node.style.MozUserSelect = selectable ? "" : "none";
+ }else if(d.isKhtml){
+ node.style.KhtmlUserSelect = selectable ? "auto" : "none";
+ }else if(d.isIE){
+ var v = (node.unselectable = selectable ? "" : "on");
+ d.query("*", node).forEach("item.unselectable = '"+v+"'");
+ }
+ //FIXME: else? Opera?
+ };
+
+ var _insertBefore = function(/*Node*/node, /*Node*/ref){
+ ref.parentNode.insertBefore(node, ref);
+ return true; // boolean
+ }
+
+ var _insertAfter = function(/*Node*/node, /*Node*/ref){
+ // summary:
+ // Try to insert node after ref
+ var pn = ref.parentNode;
+ if(ref == pn.lastChild){
+ pn.appendChild(node);
+ }else{
+ return _insertBefore(node, ref.nextSibling); // boolean
+ }
+ return true; // boolean
+ }
+
+ dojo.place = function(/*String|DomNode*/node, /*String|DomNode*/refNode, /*String?|Number?*/position){
+ // summary:
+ // Attempt to insert node into the DOM, choosing from various positioning options.
+ // Returns true if successful, false otherwise.
+ // node:
+ // id or node reference to place relative to refNode
+ // refNode:
+ // id or node reference to use as basis for placement
+ // position:
+ // string noting the position of node relative to refNode or a
+ // number indicating the location in the childNodes collection of refNode.
+ // Accepted string values are:
+ // * before
+ // * after
+ // * first
+ // * last
+ //
+ // "first" and "last" indicate positions as children of refNode. position defaults
+ // to "last" if not specified
+
+ // FIXME: need to write tests for this!!!!
+ if(!node || !refNode){
+ return false; // boolean
+ }
+ node = d.byId(node);
+ refNode = d.byId(refNode);
+ if(typeof position == "number"){
+ var cn = refNode.childNodes;
+ if(!cn.length || cn.length <= position){
+ refNode.appendChild(node);
+ return true;
+ }
+ return _insertBefore(node, position <= 0 ? refNode.firstChild : cn[position]);
+ }
+ switch(position){
+ case "before":
+ return _insertBefore(node, refNode); // boolean
+ case "after":
+ return _insertAfter(node, refNode); // boolean
+ case "first":
+ if(refNode.firstChild){
+ return _insertBefore(node, refNode.firstChild); // boolean
+ }
+ // else fallthrough...
+ default: // aka: last
+ refNode.appendChild(node);
+ return true; // boolean
+ }
+ }
+
+ // Box functions will assume this model.
+ // On IE/Opera, BORDER_BOX will be set if the primary document is in quirks mode.
+ // Can be set to change behavior of box setters.
+
+ // can be either:
+ // "border-box"
+ // "content-box" (default)
+ dojo.boxModel = "content-box";
+
+ // We punt per-node box mode testing completely.
+ // If anybody cares, we can provide an additional (optional) unit
+ // that overrides existing code to include per-node box sensitivity.
+
+ // Opera documentation claims that Opera 9 uses border-box in BackCompat mode.
+ // but experiments (Opera 9.10.8679 on Windows Vista) indicate that it actually continues to use content-box.
+ // IIRC, earlier versions of Opera did in fact use border-box.
+ // Opera guys, this is really confusing. Opera being broken in quirks mode is not our fault.
+
+ if(d.isIE /*|| dojo.isOpera*/){
+ var _dcm = document.compatMode;
+ // client code may have to adjust if compatMode varies across iframes
+ d.boxModel = _dcm == "BackCompat" || _dcm == "QuirksMode" || d.isIE<6 ? "border-box" : "content-box"; // FIXME: remove IE < 6 support?
+ }
+
+ // =============================
+ // Style Functions
+ // =============================
+
+ // getComputedStyle drives most of the style code.
+ // Wherever possible, reuse the returned object.
+ //
+ // API functions below that need to access computed styles accept an
+ // optional computedStyle parameter.
+ // If this parameter is omitted, the functions will call getComputedStyle themselves.
+ // This way, calling code can access computedStyle once, and then pass the reference to
+ // multiple API functions.
+
+/*=====
+ dojo.getComputedStyle = function(node){
+ // summary:
+ // Returns a "computed style" object.
+ //
+ // description:
+ // Gets a "computed style" object which can be used to gather
+ // information about the current state of the rendered node.
+ //
+ // Note that this may behave differently on different browsers.
+ // Values may have different formats and value encodings across
+ // browsers.
+ //
+ // Note also that this method is expensive. Wherever possible,
+ // reuse the returned object.
+ //
+ // Use the dojo.style() method for more consistent (pixelized)
+ // return values.
+ //
+ // node: DOMNode
+ // A reference to a DOM node. Does NOT support taking an
+ // ID string for speed reasons.
+ // example:
+ // | dojo.getComputedStyle(dojo.byId('foo')).borderWidth;
+ return; // CSS2Properties
+ }
+=====*/
+
+ // Although we normally eschew argument validation at this
+ // level, here we test argument 'node' for (duck)type.
+ // Argument node must also implement Element. (Note: we check
+ // against HTMLElement rather than Element for interop with prototype.js)
+ // Because 'document' is the 'parentNode' of 'body'
+ // it is frequently sent to this function even
+ // though it is not Element.
+ var gcs;
+ if(d.isSafari){
+ gcs = function(/*DomNode*/node){
+ var s;
+ if(node instanceof HTMLElement){
+ var dv = node.ownerDocument.defaultView;
+ s = dv.getComputedStyle(node, null);
+ if(!s && node.style){
+ node.style.display = "";
+ s = dv.getComputedStyle(node, null);
+ }
+ }
+ return s || {};
+ };
+ }else if(d.isIE){
+ gcs = function(node){
+ // IE (as of 7) doesn't expose Element like sane browsers
+ return node.nodeType == 1 /* ELEMENT_NODE*/ ? node.currentStyle : {};
+ };
+ }else{
+ gcs = function(node){
+ return node instanceof HTMLElement ?
+ node.ownerDocument.defaultView.getComputedStyle(node, null) : {};
+ };
+ }
+ dojo.getComputedStyle = gcs;
+
+ if(!d.isIE){
+ dojo._toPixelValue = function(element, value){
+ // style values can be floats, client code may want
+ // to round for integer pixels.
+ return parseFloat(value) || 0;
+ };
+ }else{
+ dojo._toPixelValue = function(element, avalue){
+ if(!avalue){ return 0; }
+ // on IE7, medium is usually 4 pixels
+ if(avalue=="medium"){ return 4; }
+ // style values can be floats, client code may
+ // want to round this value for integer pixels.
+ if(avalue.slice && (avalue.slice(-2)=='px')){ return parseFloat(avalue); }
+ with(element){
+ var sLeft = style.left;
+ var rsLeft = runtimeStyle.left;
+ runtimeStyle.left = currentStyle.left;
+ try{
+ // 'avalue' may be incompatible with style.left, which can cause IE to throw
+ // this has been observed for border widths using "thin", "medium", "thick" constants
+ // those particular constants could be trapped by a lookup
+ // but perhaps there are more
+ style.left = avalue;
+ avalue = style.pixelLeft;
+ }catch(e){
+ avalue = 0;
+ }
+ style.left = sLeft;
+ runtimeStyle.left = rsLeft;
+ }
+ return avalue;
+ }
+ }
+ var px = d._toPixelValue;
+
+ // FIXME: there opacity quirks on FF that we haven't ported over. Hrm.
+ /*=====
+ dojo._getOpacity = function(node){
+ // summary:
+ // Returns the current opacity of the passed node as a
+ // floating-point value between 0 and 1.
+ // node: DomNode
+ // a reference to a DOM node. Does NOT support taking an
+ // ID string for speed reasons.
+ // returns: Number between 0 and 1
+ return; // Number
+ }
+ =====*/
+
+ var astr = "DXImageTransform.Microsoft.Alpha";
+ var af = function(n, f){
+ try{
+ return n.filters.item(astr);
+ }catch(e){
+ return f ? {} : null;
+ }
+ }
+
+ dojo._getOpacity = d.isIE ? function(node){
+ try{
+ return af(node).Opacity / 100; // Number
+ }catch(e){
+ return 1; // Number
+ }
+ } : function(node){
+ return gcs(node).opacity;
+ };
+
+ /*=====
+ dojo._setOpacity = function(node, opacity){
+ // summary:
+ // set the opacity of the passed node portably. Returns the
+ // new opacity of the node.
+ // node: DOMNode
+ // a reference to a DOM node. Does NOT support taking an
+ // ID string for performance reasons.
+ // opacity: Number
+ // A Number between 0 and 1. 0 specifies transparent.
+ // returns: Number between 0 and 1
+ return; // Number
+ }
+ =====*/
+
+ dojo._setOpacity = d.isIE ? function(/*DomNode*/node, /*Number*/opacity){
+ var ov = opacity * 100;
+ node.style.zoom = 1.0;
+
+ // on IE7 Alpha(Filter opacity=100) makes text look fuzzy so disable it altogether (bug #2661),
+ //but still update the opacity value so we can get a correct reading if it is read later.
+ af(node, 1).Enabled = (opacity == 1 ? false : true);
+
+ if(!af(node)){
+ node.style.filter += " progid:"+astr+"(Opacity="+ov+")";
+ }else{
+ af(node, 1).Opacity = ov;
+ }
+
+ if(node.nodeName.toLowerCase() == "tr"){
+ d.query("> td", node).forEach(function(i){
+ d._setOpacity(i, opacity);
+ });
+ }
+ return opacity;
+ } : function(node, opacity){
+ return node.style.opacity = opacity;
+ };
+
+ var _pixelNamesCache = {
+ left: true, top: true
+ };
+ var _pixelRegExp = /margin|padding|width|height|max|min|offset/; // |border
+ var _toStyleValue = function(node, type, value){
+ type = type.toLowerCase(); // FIXME: should we really be doing string case conversion here? Should we cache it? Need to profile!
+ if(d.isIE){
+ if(value == "auto"){
+ if(type == "height"){ return node.offsetHeight; }
+ if(type == "width"){ return node.offsetWidth; }
+ }
+ if(type == "fontweight"){
+ switch(value){
+ case 700: return "bold";
+ case 400:
+ default: return "normal";
+ }
+ }
+ }
+ if(!(type in _pixelNamesCache)){
+ _pixelNamesCache[type] = _pixelRegExp.test(type);
+ }
+ return _pixelNamesCache[type] ? px(node, value) : value;
+ }
+
+ var _floatStyle = d.isIE ? "styleFloat" : "cssFloat";
+ var _floatAliases = { "cssFloat": _floatStyle, "styleFloat": _floatStyle, "float": _floatStyle };
+
+ // public API
+
+ dojo.style = function( /*DomNode|String*/ node,
+ /*String?|Object?*/ style,
+ /*String?*/ value){
+ // summary:
+ // Accesses styles on a node. If 2 arguments are
+ // passed, acts as a getter. If 3 arguments are passed, acts
+ // as a setter.
+ // node:
+ // id or reference to node to get/set style for
+ // style:
+ // the style property to set in DOM-accessor format
+ // ("borderWidth", not "border-width") or an object with key/value
+ // pairs suitable for setting each property.
+ // value:
+ // If passed, sets value on the node for style, handling
+ // cross-browser concerns.
+ // example:
+ // Passing only an ID or node returns the computed style object of
+ // the node:
+ // | dojo.style("thinger");
+ // example:
+ // Passing a node and a style property returns the current
+ // normalized, computed value for that property:
+ // | dojo.style("thinger", "opacity"); // 1 by default
+ //
+ // example:
+ // Passing a node, a style property, and a value changes the
+ // current display of the node and returns the new computed value
+ // | dojo.style("thinger", "opacity", 0.5); // == 0.5
+ //
+ // example:
+ // Passing a node, an object-style style property sets each of the values in turn and returns the computed style object of the node:
+ // | dojo.style("thinger", {
+ // | "opacity": 0.5,
+ // | "border": "3px solid black",
+ // | "height": 300
+ // | });
+ //
+ // example:
+ // When the CSS style property is hyphenated, the JavaScript property is camelCased.
+ // font-size becomes fontSize, and so on.
+ // | dojo.style("thinger",{
+ // | fontSize:"14pt",
+ // | letterSpacing:"1.2em"
+ // | });
+ //
+ // example:
+ // dojo.NodeList implements .style() using the same syntax, omitting the "node" parameter, calling
+ // dojo.style() on every element of the list. See: dojo.query and dojo.NodeList
+ // | dojo.query(".someClassName").style("visibility","hidden");
+ // | // or
+ // | dojo.query("#baz > div").style({
+ // | opacity:0.75,
+ // | fontSize:"13pt"
+ // | });
+
+ var n = d.byId(node), args = arguments.length, op = (style=="opacity");
+ style = _floatAliases[style] || style;
+ if(args == 3){
+ return op ? d._setOpacity(n, value) : n.style[style] = value; /*Number*/
+ }
+ if(args == 2 && op){
+ return d._getOpacity(n);
+ }
+ var s = gcs(n);
+ if(args == 2 && !d.isString(style)){
+ for(var x in style){
+ d.style(node, x, style[x]);
+ }
+ return s;
+ }
+ return (args == 1) ? s : _toStyleValue(n, style, s[style]||n.style[style]); /* CSS2Properties||String||Number */
+ }
+
+ // =============================
+ // Box Functions
+ // =============================
+
+ dojo._getPadExtents = function(/*DomNode*/n, /*Object*/computedStyle){
+ // summary:
+ // Returns object with special values specifically useful for node
+ // fitting.
+ //
+ // * l/t = left/top padding (respectively)
+ // * w = the total of the left and right padding
+ // * h = the total of the top and bottom padding
+ //
+ // If 'node' has position, l/t forms the origin for child nodes.
+ // The w/h are used for calculating boxes.
+ // Normally application code will not need to invoke this
+ // directly, and will use the ...box... functions instead.
+ var
+ s = computedStyle||gcs(n),
+ l = px(n, s.paddingLeft),
+ t = px(n, s.paddingTop);
+ return {
+ l: l,
+ t: t,
+ w: l+px(n, s.paddingRight),
+ h: t+px(n, s.paddingBottom)
+ };
+ }
+
+ dojo._getBorderExtents = function(/*DomNode*/n, /*Object*/computedStyle){
+ // summary:
+ // returns an object with properties useful for noting the border
+ // dimensions.
+ //
+ // * l/t = the sum of left/top border (respectively)
+ // * w = the sum of the left and right border
+ // * h = the sum of the top and bottom border
+ //
+ // The w/h are used for calculating boxes.
+ // Normally application code will not need to invoke this
+ // directly, and will use the ...box... functions instead.
+ var
+ ne = "none",
+ s = computedStyle||gcs(n),
+ bl = (s.borderLeftStyle != ne ? px(n, s.borderLeftWidth) : 0),
+ bt = (s.borderTopStyle != ne ? px(n, s.borderTopWidth) : 0);
+ return {
+ l: bl,
+ t: bt,
+ w: bl + (s.borderRightStyle!=ne ? px(n, s.borderRightWidth) : 0),
+ h: bt + (s.borderBottomStyle!=ne ? px(n, s.borderBottomWidth) : 0)
+ };
+ }
+
+ dojo._getPadBorderExtents = function(/*DomNode*/n, /*Object*/computedStyle){
+ // summary:
+ // returns object with properties useful for box fitting with
+ // regards to padding.
+ //
+ // * l/t = the sum of left/top padding and left/top border (respectively)
+ // * w = the sum of the left and right padding and border
+ // * h = the sum of the top and bottom padding and border
+ //
+ // The w/h are used for calculating boxes.
+ // Normally application code will not need to invoke this
+ // directly, and will use the ...box... functions instead.
+ var
+ s = computedStyle||gcs(n),
+ p = d._getPadExtents(n, s),
+ b = d._getBorderExtents(n, s);
+ return {
+ l: p.l + b.l,
+ t: p.t + b.t,
+ w: p.w + b.w,
+ h: p.h + b.h
+ };
+ }
+
+ dojo._getMarginExtents = function(n, computedStyle){
+ // summary:
+ // returns object with properties useful for box fitting with
+ // regards to box margins (i.e., the outer-box).
+ //
+ // * l/t = marginLeft, marginTop, respectively
+ // * w = total width, margin inclusive
+ // * h = total height, margin inclusive
+ //
+ // The w/h are used for calculating boxes.
+ // Normally application code will not need to invoke this
+ // directly, and will use the ...box... functions instead.
+ var
+ s = computedStyle||gcs(n),
+ l = px(n, s.marginLeft),
+ t = px(n, s.marginTop),
+ r = px(n, s.marginRight),
+ b = px(n, s.marginBottom);
+ if(d.isSafari && (s.position != "absolute")){
+ // FIXME: Safari's version of the computed right margin
+ // is the space between our right edge and the right edge
+ // of our offsetParent.
+ // What we are looking for is the actual margin value as
+ // determined by CSS.
+ // Hack solution is to assume left/right margins are the same.
+ r = l;
+ }
+ return {
+ l: l,
+ t: t,
+ w: l+r,
+ h: t+b
+ };
+ }
+
+ // Box getters work in any box context because offsetWidth/clientWidth
+ // are invariant wrt box context
+ //
+ // They do *not* work for display: inline objects that have padding styles
+ // because the user agent ignores padding (it's bogus styling in any case)
+ //
+ // Be careful with IMGs because they are inline or block depending on
+ // browser and browser mode.
+
+ // Although it would be easier to read, there are not separate versions of
+ // _getMarginBox for each browser because:
+ // 1. the branching is not expensive
+ // 2. factoring the shared code wastes cycles (function call overhead)
+ // 3. duplicating the shared code wastes bytes
+
+ dojo._getMarginBox = function(/*DomNode*/node, /*Object*/computedStyle){
+ // summary:
+ // returns an object that encodes the width, height, left and top
+ // positions of the node's margin box.
+ var s = computedStyle||gcs(node), me = d._getMarginExtents(node, s);
+ var l = node.offsetLeft - me.l, t = node.offsetTop - me.t, p = node.parentNode;
+ if(d.isMoz){
+ // Mozilla:
+ // If offsetParent has a computed overflow != visible, the offsetLeft is decreased
+ // by the parent's border.
+ // We don't want to compute the parent's style, so instead we examine node's
+ // computed left/top which is more stable.
+ var sl = parseFloat(s.left), st = parseFloat(s.top);
+ if(!isNaN(sl) && !isNaN(st)){
+ l = sl, t = st;
+ }else{
+ // If child's computed left/top are not parseable as a number (e.g. "auto"), we
+ // have no choice but to examine the parent's computed style.
+ if(p && p.style){
+ var pcs = gcs(p);
+ if(pcs.overflow != "visible"){
+ var be = d._getBorderExtents(p, pcs);
+ l += be.l, t += be.t;
+ }
+ }
+ }
+ }else if(d.isOpera){
+ // On Opera, offsetLeft includes the parent's border
+ if(p){
+ var be = d._getBorderExtents(p);
+ l -= be.l;
+ t -= be.t;
+ }
+ }
+ return {
+ l: l,
+ t: t,
+ w: node.offsetWidth + me.w,
+ h: node.offsetHeight + me.h
+ };
+ }
+
+ dojo._getContentBox = function(node, computedStyle){
+ // summary:
+ // Returns an object that encodes the width, height, left and top
+ // positions of the node's content box, irrespective of the
+ // current box model.
+
+ // clientWidth/Height are important since the automatically account for scrollbars
+ // fallback to offsetWidth/Height for special cases (see #3378)
+ var s=computedStyle||gcs(node), pe=d._getPadExtents(node, s), be=d._getBorderExtents(node, s), w=node.clientWidth, h;
+ if(!w){
+ w=node.offsetWidth, h=node.offsetHeight;
+ }else{
+ h=node.clientHeight, be.w = be.h = 0;
+ }
+ // On Opera, offsetLeft includes the parent's border
+ if(d.isOpera){ pe.l += be.l; pe.t += be.t; };
+ return {
+ l: pe.l,
+ t: pe.t,
+ w: w - pe.w - be.w,
+ h: h - pe.h - be.h
+ };
+ }
+
+ dojo._getBorderBox = function(node, computedStyle){
+ var s=computedStyle||gcs(node), pe=d._getPadExtents(node, s), cb=d._getContentBox(node, s);
+ return {
+ l: cb.l - pe.l,
+ t: cb.t - pe.t,
+ w: cb.w + pe.w,
+ h: cb.h + pe.h
+ };
+ }
+
+ // Box setters depend on box context because interpretation of width/height styles
+ // vary wrt box context.
+ //
+ // The value of dojo.boxModel is used to determine box context.
+ // dojo.boxModel can be set directly to change behavior.
+ //
+ // Beware of display: inline objects that have padding styles
+ // because the user agent ignores padding (it's a bogus setup anyway)
+ //
+ // Be careful with IMGs because they are inline or block depending on
+ // browser and browser mode.
+ //
+ // Elements other than DIV may have special quirks, like built-in
+ // margins or padding, or values not detectable via computedStyle.
+ // In particular, margins on TABLE do not seems to appear
+ // at all in computedStyle on Mozilla.
+
+ dojo._setBox = function(/*DomNode*/node, /*Number?*/l, /*Number?*/t, /*Number?*/w, /*Number?*/h, /*String?*/u){
+ // summary:
+ // sets width/height/left/top in the current (native) box-model
+ // dimentions. Uses the unit passed in u.
+ // node: DOM Node reference. Id string not supported for performance reasons.
+ // l: optional. left offset from parent.
+ // t: optional. top offset from parent.
+ // w: optional. width in current box model.
+ // h: optional. width in current box model.
+ // u: optional. unit measure to use for other measures. Defaults to "px".
+ u = u || "px";
+ var s = node.style;
+ if(!isNaN(l)){ s.left = l+u; }
+ if(!isNaN(t)){ s.top = t+u; }
+ if(w>=0){ s.width = w+u; }
+ if(h>=0){ s.height = h+u; }
+ }
+
+ dojo._isButtonTag = function(/*DomNode*/node) {
+ // summary:
+ // True if the node is BUTTON or INPUT.type="button".
+ return node.tagName == "BUTTON"
+ || node.tagName=="INPUT" && node.getAttribute("type").toUpperCase() == "BUTTON"; // boolean
+ }
+
+ dojo._usesBorderBox = function(/*DomNode*/node){
+ // summary:
+ // True if the node uses border-box layout.
+
+ // We could test the computed style of node to see if a particular box
+ // has been specified, but there are details and we choose not to bother.
+
+ // TABLE and BUTTON (and INPUT type=button) are always border-box by default.
+ // If you have assigned a different box to either one via CSS then
+ // box functions will break.
+
+ var n = node.tagName;
+ return d.boxModel=="border-box" || n=="TABLE" || dojo._isButtonTag(node); // boolean
+ }
+
+ dojo._setContentSize = function(/*DomNode*/node, /*Number*/widthPx, /*Number*/heightPx, /*Object*/computedStyle){
+ // summary:
+ // Sets the size of the node's contents, irrespective of margins,
+ // padding, or borders.
+ if(d._usesBorderBox(node)){
+ var pb = d._getPadBorderExtents(node, computedStyle);
+ if(widthPx >= 0){ widthPx += pb.w; }
+ if(heightPx >= 0){ heightPx += pb.h; }
+ }
+ d._setBox(node, NaN, NaN, widthPx, heightPx);
+ }
+
+ dojo._setMarginBox = function(/*DomNode*/node, /*Number?*/leftPx, /*Number?*/topPx,
+ /*Number?*/widthPx, /*Number?*/heightPx,
+ /*Object*/computedStyle){
+ // summary:
+ // sets the size of the node's margin box and placement
+ // (left/top), irrespective of box model. Think of it as a
+ // passthrough to dojo._setBox that handles box-model vagaries for
+ // you.
+
+ var s = computedStyle||gcs(node);
+ // Some elements have special padding, margin, and box-model settings.
+ // To use box functions you may need to set padding, margin explicitly.
+ // Controlling box-model is harder, in a pinch you might set dojo.boxModel.
+ var bb=d._usesBorderBox(node),
+ pb=bb ? _nilExtents : d._getPadBorderExtents(node, s);
+ if (dojo.isSafari) {
+ // on Safari (3.1.2), button nodes with no explicit size have a default margin
+ // setting an explicit size eliminates the margin.
+ // We have to swizzle the width to get correct margin reading.
+ if (dojo._isButtonTag(node)){
+ var ns = node.style;
+ if (widthPx>=0 && !ns.width) { ns.width = "4px"; }
+ if (heightPx>=0 && !ns.height) { ns.height = "4px"; }
+ }
+ }
+ var mb=d._getMarginExtents(node, s);
+ if(widthPx>=0){ widthPx = Math.max(widthPx - pb.w - mb.w, 0); }
+ if(heightPx>=0){ heightPx = Math.max(heightPx - pb.h - mb.h, 0); }
+ d._setBox(node, leftPx, topPx, widthPx, heightPx);
+ }
+
+ var _nilExtents = { l:0, t:0, w:0, h:0 };
+
+ // public API
+
+ dojo.marginBox = function(/*DomNode|String*/node, /*Object?*/box){
+ // summary:
+ // Getter/setter for the margin-box of node.
+ // description:
+ // Returns an object in the expected format of box (regardless
+ // if box is passed). The object might look like:
+ // `{ l: 50, t: 200, w: 300: h: 150 }`
+ // for a node offset from its parent 50px to the left, 200px from
+ // the top with a margin width of 300px and a margin-height of
+ // 150px.
+ // node:
+ // id or reference to DOM Node to get/set box for
+ // box:
+ // If passed, denotes that dojo.marginBox() should
+ // update/set the margin box for node. Box is an object in the
+ // above format. All properties are optional if passed.
+ var n=d.byId(node), s=gcs(n), b=box;
+ return !b ? d._getMarginBox(n, s) : d._setMarginBox(n, b.l, b.t, b.w, b.h, s); // Object
+ }
+
+ dojo.contentBox = function(/*DomNode|String*/node, /*Object?*/box){
+ // summary:
+ // Getter/setter for the content-box of node.
+ // description:
+ // Returns an object in the expected format of box (regardless if box is passed).
+ // The object might look like:
+ // `{ l: 50, t: 200, w: 300: h: 150 }`
+ // for a node offset from its parent 50px to the left, 200px from
+ // the top with a content width of 300px and a content-height of
+ // 150px. Note that the content box may have a much larger border
+ // or margin box, depending on the box model currently in use and
+ // CSS values set/inherited for node.
+ // node:
+ // id or reference to DOM Node to get/set box for
+ // box:
+ // If passed, denotes that dojo.contentBox() should
+ // update/set the content box for node. Box is an object in the
+ // above format. All properties are optional if passed.
+ var n=d.byId(node), s=gcs(n), b=box;
+ return !b ? d._getContentBox(n, s) : d._setContentSize(n, b.w, b.h, s); // Object
+ }
+
+ // =============================
+ // Positioning
+ // =============================
+
+ var _sumAncestorProperties = function(node, prop){
+ if(!(node = (node||0).parentNode)){return 0};
+ var val, retVal = 0, _b = d.body();
+ while(node && node.style){
+ if(gcs(node).position == "fixed"){
+ return 0;
+ }
+ val = node[prop];
+ if(val){
+ retVal += val - 0;
+ // opera and khtml #body & #html has the same values, we only
+ // need one value
+ if(node == _b){ break; }
+ }
+ node = node.parentNode;
+ }
+ return retVal; // integer
+ }
+
+ dojo._docScroll = function(){
+ var
+ _b = d.body(),
+ _w = d.global,
+ de = d.doc.documentElement;
+ return {
+ y: (_w.pageYOffset || de.scrollTop || _b.scrollTop || 0),
+ x: (_w.pageXOffset || d._fixIeBiDiScrollLeft(de.scrollLeft) || _b.scrollLeft || 0)
+ };
+ };
+
+ dojo._isBodyLtr = function(){
+ //FIXME: could check html and body tags directly instead of computed style? need to ignore case, accept empty values
+ return !("_bodyLtr" in d) ?
+ d._bodyLtr = gcs(d.body()).direction == "ltr" :
+ d._bodyLtr; // Boolean
+ }
+
+ dojo._getIeDocumentElementOffset = function(){
+ // summary
+ // The following values in IE contain an offset:
+ // event.clientX
+ // event.clientY
+ // node.getBoundingClientRect().left
+ // node.getBoundingClientRect().top
+ // But other position related values do not contain this offset, such as
+ // node.offsetLeft, node.offsetTop, node.style.left and node.style.top.
+ // The offset is always (2, 2) in LTR direction. When the body is in RTL
+ // direction, the offset counts the width of left scroll bar's width.
+ // This function computes the actual offset.
+
+ //NOTE: assumes we're being called in an IE browser
+
+ var de = d.doc.documentElement;
+ //FIXME: use this instead? var de = d.compatMode == "BackCompat" ? d.body : d.documentElement;
+
+ return (d.isIE >= 7) ?
+ {x: de.getBoundingClientRect().left, y: de.getBoundingClientRect().top}
+ :
+ // IE 6.0
+ {x: d._isBodyLtr() || window.parent == window ?
+ de.clientLeft : de.offsetWidth - de.clientWidth - de.clientLeft,
+ y: de.clientTop}; // Object
+ };
+
+ dojo._fixIeBiDiScrollLeft = function(/*Integer*/ scrollLeft){
+ // In RTL direction, scrollLeft should be a negative value, but IE
+ // returns a positive one. All codes using documentElement.scrollLeft
+ // must call this function to fix this error, otherwise the position
+ // will offset to right when there is a horizontal scrollbar.
+ var dd = d.doc;
+ if(d.isIE && !dojo._isBodyLtr()){
+ var de = dd.compatMode == "BackCompat" ? dd.body : dd.documentElement;
+ return scrollLeft + de.clientWidth - de.scrollWidth; // Integer
+ }
+ return scrollLeft; // Integer
+ }
+
+ dojo._abs = function(/*DomNode*/node, /*Boolean?*/includeScroll){
+ // summary:
+ // Gets the position of the passed element relative to
+ // the viewport (if includeScroll==false), or relative to the
+ // document root (if includeScroll==true).
+ //
+ // Returns an object of the form:
+ // { x: 100, y: 300 }
+ // if includeScroll is passed, the x and y values will include any
+ // document offsets that may affect the position relative to the
+ // viewport.
+
+ // FIXME: need to decide in the brave-new-world if we're going to be
+ // margin-box or border-box.
+ var ownerDocument = node.ownerDocument;
+ var ret = {
+ x: 0,
+ y: 0
+ };
+
+ // targetBoxType == "border-box"
+ var db = d.body();
+ if(d.isIE || (d.isFF >= 3)){
+ var client = node.getBoundingClientRect();
+ var cs;
+ if(d.isFF){
+ // in FF3 you have to subract the document element margins
+ var dv = node.ownerDocument.defaultView;
+ cs=dv.getComputedStyle(db.parentNode, null);
+ }
+ var offset = (d.isIE) ? d._getIeDocumentElementOffset() : { x: px(db.parentNode,cs.marginLeft), y: px(db.parentNode,cs.marginTop)};
+ ret.x = client.left - offset.x;
+ ret.y = client.top - offset.y;
+ }else{
+ if(node["offsetParent"]){
+ var endNode;
+ // in Safari, if the node is an absolutely positioned child of
+ // the body and the body has a margin the offset of the child
+ // and the body contain the body's margins, so we need to end
+ // at the body
+ // FIXME: getting contrary results to the above in latest WebKit.
+ if(d.isSafari &&
+ //(node.style.getPropertyValue("position") == "absolute") &&
+ (gcs(node).position == "absolute") &&
+ (node.parentNode == db)){
+ endNode = db;
+ }else{
+ endNode = db.parentNode;
+ }
+ // Opera seems to be double counting for some elements
+ var cs=gcs(node);
+ var n=node;
+ if(d.isOpera&&cs.position!="absolute"){
+ n=n.offsetParent;
+ }
+ ret.x -= _sumAncestorProperties(n, "scrollLeft");
+ ret.y -= _sumAncestorProperties(n, "scrollTop");
+
+ var curnode = node;
+ do{
+ var n = curnode.offsetLeft;
+ //FIXME: ugly hack to workaround the submenu in
+ //popupmenu2 does not shown up correctly in opera.
+ //Someone have a better workaround?
+ if(!d.isOpera || n > 0){
+ ret.x += isNaN(n) ? 0 : n;
+ }
+ var t = curnode.offsetTop;
+ ret.y += isNaN(t) ? 0 : t;
+ var cs = gcs(curnode);
+ if(curnode != node){
+ if(d.isSafari){
+ ret.x += px(curnode, cs.borderLeftWidth);
+ ret.y += px(curnode, cs.borderTopWidth);
+ }else if(d.isFF){
+ // tried left+right with differently sized left/right borders
+ // it really is 2xleft border in FF, not left+right, even in RTL!
+ ret.x += 2*px(curnode,cs.borderLeftWidth);
+ ret.y += 2*px(curnode,cs.borderTopWidth);
+ }
+ }
+ // static children in a static div in FF2 are affected by the div's border as well
+ // but offsetParent will skip this div!
+ if(d.isFF&&cs.position=="static"){
+ var parent=curnode.parentNode;
+ while(parent!=curnode.offsetParent){
+ var pcs=gcs(parent);
+ if(pcs.position=="static"){
+ ret.x += px(curnode,pcs.borderLeftWidth);
+ ret.y += px(curnode,pcs.borderTopWidth);
+ }
+ parent=parent.parentNode;
+ }
+ }
+ curnode = curnode.offsetParent;
+ }while((curnode != endNode) && curnode);
+ }else if(node.x && node.y){
+ ret.x += isNaN(node.x) ? 0 : node.x;
+ ret.y += isNaN(node.y) ? 0 : node.y;
+ }
+ }
+ // account for document scrolling
+ // if offsetParent is used, ret value already includes scroll position
+ // so we may have to actually remove that value if !includeScroll
+ if(includeScroll){
+ var scroll = d._docScroll();
+ ret.y += scroll.y;
+ ret.x += scroll.x;
+ }
+
+ return ret; // object
+ }
+
+ // FIXME: need a setter for coords or a moveTo!!
+ dojo.coords = function(/*DomNode|String*/node, /*Boolean?*/includeScroll){
+ // summary:
+ // Returns an object that measures margin box width/height and
+ // absolute positioning data from dojo._abs().
+ //
+ // description:
+ // Returns an object that measures margin box width/height and
+ // absolute positioning data from dojo._abs().
+ // Return value will be in the form:
+ // `{ l: 50, t: 200, w: 300: h: 150, x: 100, y: 300 }`
+ // Does not act as a setter. If includeScroll is passed, the x and
+ // y params are affected as one would expect in dojo._abs().
+ var n=d.byId(node), s=gcs(n), mb=d._getMarginBox(n, s);
+ var abs = d._abs(n, includeScroll);
+ mb.x = abs.x;
+ mb.y = abs.y;
+ return mb;
+ }
+
+ // =============================
+ // Element attribute Functions
+ // =============================
+
+ var ieLT8 = d.isIE < 8;
+
+ var _fixAttrName = function(/*String*/name){
+ switch(name.toLowerCase()){
+ case "tabindex":
+ // Internet Explorer will only set or remove tabindex
+ // if it is spelled "tabIndex"
+ //
+ return ieLT8 ? "tabIndex" : "tabindex";
+ case "for": case "htmlfor":
+ // to pick up for attrib set in markup via getAttribute() IE<8 uses "htmlFor" and others use "for"
+ // get/setAttribute works in all as long use same value for both get/set
+ return ieLT8 ? "htmlFor" : "for";
+ case "class" :
+ return d.isIE ? "className" : "class";
+ default:
+ return name;
+ }
+ }
+
+ // non-deprecated HTML4 attributes with default values
+ // http://www.w3.org/TR/html401/index/attributes.html
+ // FF and Safari will return the default values if you
+ // access the attributes via a property but not
+ // via getAttribute()
+ var _attrProps = {
+ colspan: "colSpan",
+ enctype: "enctype",
+ frameborder: "frameborder",
+ method: "method",
+ rowspan: "rowSpan",
+ scrolling: "scrolling",
+ shape: "shape",
+ span: "span",
+ type: "type",
+ valuetype: "valueType"
+ }
+
+ dojo.hasAttr = function(/*DomNode|String*/node, /*String*/name){
+ // summary:
+ // Returns true if the requested attribute is specified on the
+ // given element, and false otherwise.
+ // node:
+ // id or reference to the element to check
+ // name:
+ // the name of the attribute
+ // returns:
+ // true if the requested attribute is specified on the
+ // given element, and false otherwise
+ node = d.byId(node);
+ var fixName = _fixAttrName(name);
+ fixName = fixName == "htmlFor" ? "for" : fixName; //IE<8 uses htmlFor except in this case
+ var attr = node.getAttributeNode && node.getAttributeNode(fixName);
+ return attr ? attr.specified : false; // Boolean
+ }
+
+ var _evtHdlrMap = {
+
+ }
+
+ var _ctr = 0;
+ var _attrId = dojo._scopeName + "attrid";
+
+ dojo.attr = function(/*DomNode|String*/node, /*String|Object*/name, /*String?*/value){
+ // summary:
+ // Gets or sets an attribute on an HTML element.
+ // description:
+ // Handles normalized getting and setting of attributes on DOM
+ // Nodes. If 2 arguments are passed, and a the second argumnt is a
+ // string, acts as a getter.
+ //
+ // If a third argument is passed, or if the second argumnt is a
+ // map of attributes, acts as a setter.
+ //
+ // When passing functions as values, note that they will not be
+ // directly assigned to slots on the node, but rather the default
+ // behavior will be removed and the new behavior will be added
+ // using `dojo.connect()`, meaning that event handler properties
+ // will be normalized and that some caveats with regards to
+ // non-standard behaviors for onsubmit apply. Namely that you
+ // should cancel form submission using `dojo.stopEvent()` on the
+ // passed event object instead of returning a boolean value from
+ // the handler itself.
+ // node:
+ // id or reference to the element to get or set the attribute on
+ // name:
+ // the name of the attribute to get or set.
+ // value:
+ // The value to set for the attribute
+ // returns:
+ // when used as a getter, the value of the requested attribute
+ // or null if that attribute does not have a specified or
+ // default value;
+ //
+ // when user as a setter, undefined
+ //
+ // example:
+ // | // get the current value of the "foo" attribute on a node
+ // | dojo.attr(dojo.byId("nodeId"), "foo");
+ // | // or we can just pass the id:
+ // | dojo.attr("nodeId", "foo");
+ //
+ // example:
+ // | // use attr() to set the tab index
+ // | dojo.attr("nodeId", "tabindex", 3);
+ // |
+ //
+ // example:
+ // | // set multiple values at once, including event handlers:
+ // | dojo.attr("formId", {
+ // | "foo": "bar",
+ // | "tabindex": -1,
+ // | "method": "POST",
+ // | "onsubmit": function(e){
+ // | // stop submitting the form. Note that the IE behavior
+ // | // of returning true or false will have no effect here
+ // | // since our handler is connect()ed to the built-in
+ // | // onsubmit behavior and so we need to use
+ // | // dojo.stopEvent() to ensure that the submission
+ // | // doesn't proceed.
+ // | dojo.stopEvent(e);
+ // |
+ // | // submit the form with Ajax
+ // | dojo.xhrPost({ form: "formId" });
+ // | }
+ // | });
+
+ var args = arguments.length;
+ if(args == 2 && !d.isString(name)){
+ for(var x in name){ d.attr(node, x, name[x]); }
+ return;
+ }
+ node = d.byId(node);
+ name = _fixAttrName(name);
+ if(args == 3){
+ // FIXME:
+ // what about when the name is "style" and value is an object?
+ // It seems natural to pass it in to dojo.style(node,
+ // value)...should we support this?
+ if(d.isFunction(value)){
+ // clobber if we can
+ var attrId = d.attr(node, _attrId);
+ if(!attrId){
+ attrId = _ctr++;
+ d.attr(node, _attrId, attrId);
+ }
+ if(!_evtHdlrMap[attrId]){
+ _evtHdlrMap[attrId] = {};
+ }
+ var h = _evtHdlrMap[attrId][name];
+ if(h){
+ d.disconnect(h);
+ }else{
+ try{
+ delete node[name];
+ }catch(e){}
+ }
+
+ // ensure that event objects are normalized, etc.
+ _evtHdlrMap[attrId][name] = d.connect(node, name, value);
+
+ }else if(
+ (typeof value == "boolean")|| // e.g. onsubmit, disabled
+ (name == "innerHTML")
+ ){
+ node[name] = value;
+ }else if((name == "style")&&(!d.isString(value))){
+ d.style(node, value);
+ }else{
+ node.setAttribute(name, value);
+ }
+ return;
+ }else{
+ // should we access this attribute via a property or
+ // via getAttribute()?
+ var prop = _attrProps[name.toLowerCase()];
+ if(prop){
+ return node[prop];
+ }else{
+ var attrValue = node[name];
+ return (typeof attrValue == 'boolean' || typeof attrValue == 'function') ? attrValue
+ : (d.hasAttr(node, name) ? node.getAttribute(name) : null);
+ }
+ }
+ }
+
+ dojo.removeAttr = function(/*DomNode|String*/node, /*String*/name){
+ // summary:
+ // Removes an attribute from an HTML element.
+ // node:
+ // id or reference to the element to remove the attribute from
+ // name:
+ // the name of the attribute to remove
+ d.byId(node).removeAttribute(_fixAttrName(name));
+ }
+
+ /*
+ dojo.createElement = function(type, attrs, parent, position){
+ // TODO: need to finish this!
+ }
+ */
+
+ // =============================
+ // (CSS) Class Functions
+ // =============================
+ var _className = "className";
+
+ dojo.hasClass = function(/*DomNode|String*/node, /*String*/classStr){
+ // summary:
+ // Returns whether or not the specified classes are a portion of the
+ // class list currently applied to the node.
+ return ((" "+ d.byId(node)[_className] +" ").indexOf(" "+ classStr +" ") >= 0); // Boolean
+ };
+
+ dojo.addClass = function(/*DomNode|String*/node, /*String*/classStr){
+ // summary:
+ // Adds the specified classes to the end of the class list on the
+ // passed node.
+ node = d.byId(node);
+ var cls = node[_className];
+ if((" "+ cls +" ").indexOf(" " + classStr + " ") < 0){
+ node[_className] = cls + (cls ? ' ' : '') + classStr;
+ }
+ };
+
+ dojo.removeClass = function(/*DomNode|String*/node, /*String*/classStr){
+ // summary: Removes the specified classes from node.
+ node = d.byId(node);
+ var t = d.trim((" " + node[_className] + " ").replace(" " + classStr + " ", " "));
+ if(node[_className] != t){ node[_className] = t; }
+ };
+
+ dojo.toggleClass = function(/*DomNode|String*/node, /*String*/classStr, /*Boolean?*/condition){
+ // summary:
+ // Adds a class to node if not present, or removes if present.
+ // Pass a boolean condition if you want to explicitly add or remove.
+ // condition:
+ // If passed, true means to add the class, false means to remove.
+ if(condition === undefined){
+ condition = !d.hasClass(node, classStr);
+ }
+ d[condition ? "addClass" : "removeClass"](node, classStr);
+ };
+
+})();
+
+}
+
+if(!dojo._hasResource["dojo._base.NodeList"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo._base.NodeList"] = true;
+dojo.provide("dojo._base.NodeList");
+
+
+
+(function(){
+
+ var d = dojo;
+
+ var tnl = function(arr){
+ // decorate an array to make it look like a NodeList
+ arr.constructor = dojo.NodeList;
+ dojo._mixin(arr, dojo.NodeList.prototype);
+ return arr;
+ }
+
+ var _mapIntoDojo = function(func, alwaysThis){
+ // returns a function which, when executed in the scope of its caller,
+ // applies the passed arguments to a particular dojo.* function (named
+ // in func) and aggregates the returns. if alwaysThis is true, it
+ // always returns the scope object and not the collected returns from
+ // the Dojo method
+ return function(){
+ var _a = arguments;
+ var aa = d._toArray(_a, 0, [null]);
+ var s = this.map(function(i){
+ aa[0] = i;
+ return d[func].apply(d, aa);
+ });
+ return (alwaysThis || ( (_a.length > 1) || !d.isString(_a[0]) )) ? this : s; // String||dojo.NodeList
+ }
+ };
+
+ dojo.NodeList = function(){
+ // summary:
+ // dojo.NodeList is as subclass of Array which adds syntactic
+ // sugar for chaining, common iteration operations, animation,
+ // and node manipulation. NodeLists are most often returned as
+ // the result of dojo.query() calls.
+ // example:
+ // create a node list from a node
+ // | new dojo.NodeList(dojo.byId("foo"));
+
+ return tnl(Array.apply(null, arguments));
+ }
+
+ dojo.NodeList._wrap = tnl;
+
+ dojo.extend(dojo.NodeList, {
+ // http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array#Methods
+
+ // FIXME: handle return values for #3244
+ // http://trac.dojotoolkit.org/ticket/3244
+
+ // FIXME:
+ // need to wrap or implement:
+ // join (perhaps w/ innerHTML/outerHTML overload for toString() of items?)
+ // reduce
+ // reduceRight
+
+ slice: function(/*===== begin, end =====*/){
+ // summary:
+ // Returns a new NodeList, maintaining this one in place
+ // description:
+ // This method behaves exactly like the Array.slice method
+ // with the caveat that it returns a dojo.NodeList and not a
+ // raw Array. For more details, see:
+ // http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:slice
+ // begin: Integer
+ // Can be a positive or negative integer, with positive
+ // integers noting the offset to begin at, and negative
+ // integers denoting an offset from the end (i.e., to the left
+ // of the end)
+ // end: Integer?
+ // Optional parameter to describe what position relative to
+ // the NodeList's zero index to end the slice at. Like begin,
+ // can be positive or negative.
+ var a = d._toArray(arguments);
+ return tnl(a.slice.apply(this, a));
+ },
+
+ splice: function(/*===== index, howmany, item =====*/){
+ // summary:
+ // Returns a new NodeList, manipulating this NodeList based on
+ // the arguments passed, potentially splicing in new elements
+ // at an offset, optionally deleting elements
+ // description:
+ // This method behaves exactly like the Array.splice method
+ // with the caveat that it returns a dojo.NodeList and not a
+ // raw Array. For more details, see:
+ // <http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:splice>
+ // index: Integer
+ // begin can be a positive or negative integer, with positive
+ // integers noting the offset to begin at, and negative
+ // integers denoting an offset from the end (i.e., to the left
+ // of the end)
+ // howmany: Integer?
+ // Optional parameter to describe what position relative to
+ // the NodeList's zero index to end the slice at. Like begin,
+ // can be positive or negative.
+ // item: Object...?
+ // Any number of optional parameters may be passed in to be
+ // spliced into the NodeList
+ // returns:
+ // dojo.NodeList
+ var a = d._toArray(arguments);
+ return tnl(a.splice.apply(this, a));
+ },
+
+ concat: function(/*===== item =====*/){
+ // summary:
+ // Returns a new NodeList comprised of items in this NodeList
+ // as well as items passed in as parameters
+ // description:
+ // This method behaves exactly like the Array.concat method
+ // with the caveat that it returns a dojo.NodeList and not a
+ // raw Array. For more details, see:
+ // <http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:concat>
+ // item: Object...?
+ // Any number of optional parameters may be passed in to be
+ // spliced into the NodeList
+ // returns:
+ // dojo.NodeList
+ var a = d._toArray(arguments, 0, [this]);
+ return tnl(a.concat.apply([], a));
+ },
+
+ indexOf: function(/*Object*/ value, /*Integer?*/ fromIndex){
+ // summary:
+ // see dojo.indexOf(). The primary difference is that the acted-on
+ // array is implicitly this NodeList
+ // value:
+ // The value to search for.
+ // fromIndex:
+ // The loction to start searching from. Optional. Defaults to 0.
+ // description:
+ // For more details on the behavior of indexOf, see:
+ // <http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:indexOf>
+ // returns:
+ // Positive Integer or 0 for a match, -1 of not found.
+ return d.indexOf(this, value, fromIndex); // Integer
+ },
+
+ lastIndexOf: function(/*===== value, fromIndex =====*/){
+ // summary:
+ // see dojo.lastIndexOf(). The primary difference is that the
+ // acted-on array is implicitly this NodeList
+ // description:
+ // For more details on the behavior of lastIndexOf, see:
+ // <http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:lastIndexOf>
+ // value: Object
+ // The value to search for.
+ // fromIndex: Integer?
+ // The loction to start searching from. Optional. Defaults to 0.
+ // returns:
+ // Positive Integer or 0 for a match, -1 of not found.
+ return d.lastIndexOf.apply(d, d._toArray(arguments, 0, [this])); // Integer
+ },
+
+ every: function(/*Function*/callback, /*Object?*/thisObject){
+ // summary:
+ // see `dojo.every()` and:
+ // <http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:every>
+ // Takes the same structure of arguments and returns as
+ // dojo.every() with the caveat that the passed array is
+ // implicitly this NodeList
+ return d.every(this, callback, thisObject); // Boolean
+ },
+
+ some: function(/*Function*/callback, /*Object?*/thisObject){
+ // summary:
+ // see dojo.some() and:
+ // http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:some
+ // Takes the same structure of arguments and returns as
+ // dojo.some() with the caveat that the passed array is
+ // implicitly this NodeList
+ return d.some(this, callback, thisObject); // Boolean
+ },
+
+ map: function(/*Function*/ func, /*Function?*/ obj){
+ // summary:
+ // see dojo.map(). The primary difference is that the acted-on
+ // array is implicitly this NodeList and the return is a
+ // dojo.NodeList (a subclass of Array)
+
+ return d.map(this, func, obj, d.NodeList); // dojo.NodeList
+ },
+
+ forEach: function(callback, thisObj){
+ // summary:
+ // see dojo.forEach(). The primary difference is that the acted-on
+ // array is implicitly this NodeList
+
+ d.forEach(this, callback, thisObj);
+ // non-standard return to allow easier chaining
+ return this; // dojo.NodeList
+ },
+
+ // custom methods
+
+ coords: function(){
+ // summary:
+ // Returns the box objects all elements in a node list as
+ // an Array (*not* a NodeList)
+
+ return d.map(this, d.coords); // Array
+ },
+
+ /*=====
+ attr: function(property, value){
+ // summary:
+ // gets or sets the DOM attribute for every element in the
+ // NodeList
+ // property: String
+ // the attribute to get/set
+ // value: String?
+ // optional. The value to set the property to
+ // returns:
+ // if no value is passed, the result is an array of attribute values
+ // If a value is passed, the return is this NodeList
+ return; // dojo.NodeList
+ return; // Array
+ },
+
+ style: function(property, value){
+ // summary:
+ // gets or sets the CSS property for every element in the NodeList
+ // property: String
+ // the CSS property to get/set, in JavaScript notation
+ // ("lineHieght" instead of "line-height")
+ // value: String?
+ // optional. The value to set the property to
+ // returns:
+ // if no value is passed, the result is an array of strings.
+ // If a value is passed, the return is this NodeList
+ return; // dojo.NodeList
+ return; // Array
+ },
+
+ addClass: function(className){
+ // summary:
+ // adds the specified class to every node in the list
+ // className: String
+ // the CSS class to add
+ return; // dojo.NodeList
+ },
+
+ removeClass: function(className){
+ // summary:
+ // removes the specified class from every node in the list
+ // className: String
+ // the CSS class to add
+ // returns:
+ // dojo.NodeList, this list
+ return; // dojo.NodeList
+ },
+
+ toggleClass: function(className, condition){
+ // summary:
+ // Adds a class to node if not present, or removes if present.
+ // Pass a boolean condition if you want to explicitly add or remove.
+ // condition: Boolean?
+ // If passed, true means to add the class, false means to remove.
+ // className: String
+ // the CSS class to add
+ return; // dojo.NodeList
+ },
+
+ connect: function(methodName, objOrFunc, funcName){
+ // summary:
+ // attach event handlers to every item of the NodeList. Uses dojo.connect()
+ // so event properties are normalized
+ // methodName: String
+ // the name of the method to attach to. For DOM events, this should be
+ // the lower-case name of the event
+ // objOrFunc: Object|Function|String
+ // if 2 arguments are passed (methodName, objOrFunc), objOrFunc should
+ // reference a function or be the name of the function in the global
+ // namespace to attach. If 3 arguments are provided
+ // (methodName, objOrFunc, funcName), objOrFunc must be the scope to
+ // locate the bound function in
+ // funcName: String?
+ // optional. A string naming the function in objOrFunc to bind to the
+ // event. May also be a function reference.
+ // example:
+ // add an onclick handler to every button on the page
+ // | dojo.query("div:nth-child(odd)").connect("onclick", function(e){
+ // |
+ // | });
+ // example:
+ // attach foo.bar() to every odd div's onmouseover
+ // | dojo.query("div:nth-child(odd)").connect("onmouseover", foo, "bar");
+ },
+ =====*/
+ attr: _mapIntoDojo("attr"),
+ style: _mapIntoDojo("style"),
+ addClass: _mapIntoDojo("addClass", true),
+ removeClass: _mapIntoDojo("removeClass", true),
+ toggleClass: _mapIntoDojo("toggleClass", true),
+ connect: _mapIntoDojo("connect", true),
+
+ // FIXME: connectPublisher()? connectRunOnce()?
+
+ place: function(/*String||Node*/ queryOrNode, /*String*/ position){
+ // summary:
+ // places elements of this node list relative to the first element matched
+ // by queryOrNode. Returns the original NodeList.
+ // queryOrNode:
+ // may be a string representing any valid CSS3 selector or a DOM node.
+ // In the selector case, only the first matching element will be used
+ // for relative positioning.
+ // position:
+ // can be one of:
+ // * "last"||"end" (default)
+ // * "first||"start"
+ // * "before"
+ // * "after"
+ // or an offset in the childNodes property
+ var item = d.query(queryOrNode)[0];
+ return this.forEach(function(i){ d.place(i, item, position); }); // dojo.NodeList
+ },
+
+ orphan: function(/*String?*/ simpleFilter){
+ // summary:
+ // removes elements in this list that match the simple
+ // filter from their parents and returns them as a new
+ // NodeList.
+ // simpleFilter:
+ // single-expression CSS filter
+ // returns:
+ // `dojo.NodeList` containing the orpahned elements
+ return (simpleFilter ? d._filterQueryResult(this, simpleFilter) : this). // dojo.NodeList
+ forEach("if(item.parentNode){ item.parentNode.removeChild(item); }");
+ },
+
+ adopt: function(/*String||Array||DomNode*/ queryOrListOrNode, /*String?*/ position){
+ // summary:
+ // places any/all elements in queryOrListOrNode at a
+ // position relative to the first element in this list.
+ // Returns a dojo.NodeList of the adopted elements.
+ // queryOrListOrNode:
+ // a DOM node or a query string or a query result.
+ // Represents the nodes to be adopted relative to the
+ // first element of this NodeList.
+ // position:
+ // can be one of:
+ // * "last"||"end" (default)
+ // * "first||"start"
+ // * "before"
+ // * "after"
+ // or an offset in the childNodes property
+ var item = this[0];
+ return d.query(queryOrListOrNode).forEach(function(ai){ // dojo.NodeList
+ d.place(ai, item, position || "last");
+ });
+ },
+
+ // FIXME: do we need this?
+ query: function(/*String*/ queryStr){
+ // summary:
+ // Returns a new, flattened NodeList. Elements of the new list
+ // satisfy the passed query but use elements of the
+ // current NodeList as query roots.
+
+ if(!queryStr){ return this; }
+
+ // FIXME: probably slow
+ // FIXME: use map?
+ var ret = d.NodeList();
+ this.forEach(function(item){
+ // FIXME: why would we ever get undefined here?
+ ret = ret.concat(d.query(queryStr, item).filter(function(subItem){ return (subItem !== undefined); }));
+ });
+ return ret; // dojo.NodeList
+ },
+
+ filter: function(/*String*/ simpleQuery){
+ // summary:
+ // "masks" the built-in javascript filter() method to support
+ // passing a simple string filter in addition to supporting
+ // filtering function objects.
+ // example:
+ // "regular" JS filter syntax as exposed in dojo.filter:
+ // | dojo.query("*").filter(function(item){
+ // | // highlight every paragraph
+ // | return (item.nodeName == "p");
+ // | }).styles("backgroundColor", "yellow");
+ // example:
+ // the same filtering using a CSS selector
+ // | dojo.query("*").filter("p").styles("backgroundColor", "yellow");
+
+ var items = this;
+ var _a = arguments;
+ var r = d.NodeList();
+ var rp = function(t){
+ if(t !== undefined){
+ r.push(t);
+ }
+ }
+ if(d.isString(simpleQuery)){
+ items = d._filterQueryResult(this, _a[0]);
+ if(_a.length == 1){
+ // if we only got a string query, pass back the filtered results
+ return items; // dojo.NodeList
+ }
+ // if we got a callback, run it over the filtered items
+ _a.shift();
+ }
+ // handle the (callback, [thisObject]) case
+ d.forEach(d.filter(items, _a[0], _a[1]), rp);
+ return r; // dojo.NodeList
+ },
+
+ /*
+ // FIXME: should this be "copyTo" and include parenting info?
+ clone: function(){
+ // summary:
+ // creates node clones of each element of this list
+ // and returns a new list containing the clones
+ },
+ */
+
+ addContent: function(/*String*/ content, /*String||Integer?*/ position){
+ // summary:
+ // add a node or some HTML as a string to every item in the list.
+ // Returns the original list.
+ // description:
+ // a copy of the HTML content is added to each item in the
+ // list, with an optional position argument. If no position
+ // argument is provided, the content is appended to the end of
+ // each item.
+ // content:
+ // the HTML in string format to add at position to every item
+ // position:
+ // can be one of:
+ // * "last"||"end" (default)
+ // * "first||"start"
+ // * "before"
+ // * "after"
+ // or an offset in the childNodes property
+ // example:
+ // appends content to the end if the position is ommitted
+ // | dojo.query("h3 > p").addContent("hey there!");
+ // example:
+ // add something to the front of each element that has a "thinger" property:
+ // | dojo.query("[thinger]").addContent("...", "first");
+ // example:
+ // adds a header before each element of the list
+ // | dojo.query(".note").addContent("<h4>NOTE:</h4>", "before");
+ var ta = d.doc.createElement("span");
+ if(d.isString(content)){
+ ta.innerHTML = content;
+ }else{
+ ta.appendChild(content);
+ }
+ if(position === undefined){
+ position = "last";
+ }
+ var ct = (position == "first" || position == "after") ? "lastChild" : "firstChild";
+ this.forEach(function(item){
+ var tn = ta.cloneNode(true);
+ while(tn[ct]){
+ d.place(tn[ct], item, position);
+ }
+ });
+ return this; // dojo.NodeList
+ },
+
+ empty: function(){
+ // summary:
+ // clears all content from each node in the list
+ return this.forEach("item.innerHTML='';"); // dojo.NodeList
+
+ // FIXME: should we be checking for and/or disposing of widgets below these nodes?
+ },
+
+ instantiate: function(/*String|Object*/ declaredClass, /*Object?*/ properties){
+ // summary:
+ // Create a new instance of a specified class, using the
+ // specified properties and each node in the nodeList as a
+ // srcNodeRef
+ //
+ var c = d.isFunction(declaredClass) ? declaredClass : d.getObject(declaredClass);
+ return this.forEach(function(i){
+ new c(properties||{},i);
+ }) // dojo.NodeList
+ },
+
+ at: function(/*===== index =====*/){
+ // summary:
+ // Returns a new NodeList comprised of items in this NodeList
+ // at the given index or indices.
+ // index: Integer...
+ // One or more 0-based indices of items in the current NodeList.
+ // returns:
+ // dojo.NodeList
+ var nl = new dojo.NodeList();
+ dojo.forEach(arguments, function(i) { if(this[i]) { nl.push(this[i]); } }, this);
+ return nl; // dojo.NodeList
+ }
+
+ });
+
+ // syntactic sugar for DOM events
+ d.forEach([
+ "blur", "focus", "click", "keydown", "keypress", "keyup", "mousedown",
+ "mouseenter", "mouseleave", "mousemove", "mouseout", "mouseover",
+ "mouseup", "submit", "load", "error"
+ ], function(evt){
+ var _oe = "on"+evt;
+ d.NodeList.prototype[_oe] = function(a, b){
+ return this.connect(_oe, a, b);
+ }
+ // FIXME: should these events trigger publishes?
+ /*
+ return (a ? this.connect(_oe, a, b) :
+ this.forEach(function(n){
+ // FIXME:
+ // listeners get buried by
+ // addEventListener and can't be dug back
+ // out to be triggered externally.
+ // see:
+ // http://developer.mozilla.org/en/docs/DOM:element
+
+
+
+ // FIXME: need synthetic event support!
+ var _e = { target: n, faux: true, type: evt };
+ // dojo._event_listener._synthesizeEvent({}, { target: n, faux: true, type: evt });
+ try{ n[evt](_e); }catch(e){ }
+ try{ n[_oe](_e); }catch(e){ }
+ })
+ );
+ }
+ */
+ }
+ );
+
+})();
+
+}
+
+if(!dojo._hasResource["dojo._base.query"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo._base.query"] = true;
+dojo.provide("dojo._base.query");
+
+
+/*
+ dojo.query() architectural overview:
+
+ dojo.query is a relatively full-featured CSS3 query library. It is
+ designed to take any valid CSS3 selector and return the nodes matching
+ the selector. To do this quickly, it processes queries in several
+ steps, applying caching where profitable.
+
+ The steps (roughly in reverse order of the way they appear in the code):
+ 1.) check to see if we already have a "query dispatcher"
+ - if so, use that with the given parameterization. Skip to step 4.
+ 2.) attempt to determine which branch to dispatch the query to:
+ - JS (optimized DOM iteration)
+ - xpath (for browsers that support it and where it's fast)
+ - native (not available in any browser yet)
+ 3.) tokenize and convert to executable "query dispatcher"
+ - this is where the lion's share of the complexity in the
+ system lies. In the DOM version, the query dispatcher is
+ assembled as a chain of "yes/no" test functions pertaining to
+ a section of a simple query statement (".blah:nth-child(odd)"
+ but not "div div", which is 2 simple statements). Individual
+ statement dispatchers are cached (to prevent re-definition)
+ as are entire dispatch chains (to make re-execution of the
+ same query fast)
+ - in the xpath path, tokenization yields a concatenation of
+ parameterized xpath selectors. As with the DOM version, both
+ simple selector blocks and overall evaluators are cached to
+ prevent re-defintion
+ 4.) the resulting query dispatcher is called in the passed scope (by default the top-level document)
+ - for DOM queries, this results in a recursive, top-down
+ evaluation of nodes based on each simple query section
+ - xpath queries can, thankfully, be executed in one shot
+ 5.) matched nodes are pruned to ensure they are unique
+*/
+
+;(function(){
+ // define everything in a closure for compressability reasons. "d" is an
+ // alias to "dojo" since it's so frequently used. This seems a
+ // transformation that the build system could perform on a per-file basis.
+
+ ////////////////////////////////////////////////////////////////////////
+ // Utility code
+ ////////////////////////////////////////////////////////////////////////
+
+ var d = dojo;
+ var childNodesName = dojo.isIE ? "children" : "childNodes";
+ var caseSensitive = false;
+
+ var getQueryParts = function(query){
+ // summary: state machine for query tokenization
+ if(">~+".indexOf(query.charAt(query.length-1)) >= 0){
+ query += " *"
+ }
+ query += " "; // ensure that we terminate the state machine
+
+ var ts = function(s, e){
+ return d.trim(query.slice(s, e));
+ }
+
+ // the overall data graph of the full query, as represented by queryPart objects
+ var qparts = [];
+ // state keeping vars
+ var inBrackets = -1;
+ var inParens = -1;
+ var inMatchFor = -1;
+ var inPseudo = -1;
+ var inClass = -1;
+ var inId = -1;
+ var inTag = -1;
+ var lc = ""; // the last character
+ var cc = ""; // the current character
+ var pStart;
+ // iteration vars
+ var x = 0; // index in the query
+ var ql = query.length;
+ var currentPart = null; // data structure representing the entire clause
+ var _cp = null; // the current pseudo or attr matcher
+
+ var endTag = function(){
+ if(inTag >= 0){
+ var tv = (inTag == x) ? null : ts(inTag, x); // .toLowerCase();
+ currentPart[ (">~+".indexOf(tv) < 0) ? "tag" : "oper" ] = tv;
+ inTag = -1;
+ }
+ }
+
+ var endId = function(){
+ if(inId >= 0){
+ currentPart.id = ts(inId, x).replace(/\\/g, "");
+ inId = -1;
+ }
+ }
+
+ var endClass = function(){
+ if(inClass >= 0){
+ currentPart.classes.push(ts(inClass+1, x).replace(/\\/g, ""));
+ inClass = -1;
+ }
+ }
+
+ var endAll = function(){
+ endId(); endTag(); endClass();
+ }
+
+ for(; lc=cc, cc=query.charAt(x),x<ql; x++){
+ if(lc == "\\"){ continue; }
+ if(!currentPart){
+ // NOTE: I hate all this alloc, but it's shorter than writing tons of if's
+ pStart = x;
+ currentPart = {
+ query: null,
+ pseudos: [],
+ attrs: [],
+ classes: [],
+ tag: null,
+ oper: null,
+ id: null
+ };
+ inTag = x;
+ }
+
+ if(inBrackets >= 0){
+ // look for a the close first
+ if(cc == "]"){
+ if(!_cp.attr){
+ _cp.attr = ts(inBrackets+1, x);
+ }else{
+ _cp.matchFor = ts((inMatchFor||inBrackets+1), x);
+ }
+ var cmf = _cp.matchFor;
+ if(cmf){
+ if( (cmf.charAt(0) == '"') || (cmf.charAt(0) == "'") ){
+ _cp.matchFor = cmf.substring(1, cmf.length-1);
+ }
+ }
+ currentPart.attrs.push(_cp);
+ _cp = null; // necessaray?
+ inBrackets = inMatchFor = -1;
+ }else if(cc == "="){
+ var addToCc = ("|~^$*".indexOf(lc) >=0 ) ? lc : "";
+ _cp.type = addToCc+cc;
+ _cp.attr = ts(inBrackets+1, x-addToCc.length);
+ inMatchFor = x+1;
+ }
+ // now look for other clause parts
+ }else if(inParens >= 0){
+ if(cc == ")"){
+ if(inPseudo >= 0){
+ _cp.value = ts(inParens+1, x);
+ }
+ inPseudo = inParens = -1;
+ }
+ }else if(cc == "#"){
+ endAll();
+ inId = x+1;
+ }else if(cc == "."){
+ endAll();
+ inClass = x;
+ }else if(cc == ":"){
+ endAll();
+ inPseudo = x;
+ }else if(cc == "["){
+ endAll();
+ inBrackets = x;
+ _cp = {
+ /*=====
+ attr: null, type: null, matchFor: null
+ =====*/
+ };
+ }else if(cc == "("){
+ if(inPseudo >= 0){
+ _cp = {
+ name: ts(inPseudo+1, x),
+ value: null
+ }
+ currentPart.pseudos.push(_cp);
+ }
+ inParens = x;
+ }else if(cc == " " && lc != cc){
+ // note that we expect the string to be " " terminated
+ endAll();
+ if(inPseudo >= 0){
+ currentPart.pseudos.push({ name: ts(inPseudo+1, x) });
+ }
+ currentPart.hasLoops = (
+ currentPart.pseudos.length ||
+ currentPart.attrs.length ||
+ currentPart.classes.length );
+ currentPart.query = ts(pStart, x);
+ currentPart.otag = currentPart.tag = (currentPart["oper"]) ? null : (currentPart.tag || "*");
+ if(currentPart.tag){ // FIXME: not valid in case-sensitive documents
+ currentPart.tag = currentPart.tag.toUpperCase();
+ }
+ qparts.push(currentPart);
+ currentPart = null;
+ }
+ }
+ return qparts;
+ };
+
+
+ ////////////////////////////////////////////////////////////////////////
+ // XPath query code
+ ////////////////////////////////////////////////////////////////////////
+
+ // this array is a lookup used to generate an attribute matching function.
+ // There is a similar lookup/generator list for the DOM branch with similar
+ // calling semantics.
+ var xPathAttrs = {
+ "*=": function(attr, value){
+ return "[contains(@"+attr+", '"+ value +"')]";
+ },
+ "^=": function(attr, value){
+ return "[starts-with(@"+attr+", '"+ value +"')]";
+ },
+ "$=": function(attr, value){
+ return "[substring(@"+attr+", string-length(@"+attr+")-"+(value.length-1)+")='"+value+"']";
+ },
+ "~=": function(attr, value){
+ return "[contains(concat(' ',@"+attr+",' '), ' "+ value +" ')]";
+ },
+ "|=": function(attr, value){
+ return "[contains(concat(' ',@"+attr+",' '), ' "+ value +"-')]";
+ },
+ "=": function(attr, value){
+ return "[@"+attr+"='"+ value +"']";
+ }
+ };
+
+ // takes a list of attribute searches, the overall query, a function to
+ // generate a default matcher, and a closure-bound method for providing a
+ // matching function that generates whatever type of yes/no distinguisher
+ // the query method needs. The method is a bit tortured and hard to read
+ // because it needs to be used in both the XPath and DOM branches.
+ var handleAttrs = function( attrList,
+ query,
+ getDefault,
+ handleMatch){
+ d.forEach(query.attrs, function(attr){
+ var matcher;
+ // type, attr, matchFor
+ if(attr.type && attrList[attr.type]){
+ matcher = attrList[attr.type](attr.attr, attr.matchFor);
+ }else if(attr.attr.length){
+ matcher = getDefault(attr.attr);
+ }
+ if(matcher){ handleMatch(matcher); }
+ });
+ }
+
+ var buildPath = function(query){
+ var xpath = ".";
+ var qparts = getQueryParts(d.trim(query));
+ while(qparts.length){
+ var tqp = qparts.shift();
+ var prefix;
+ var postfix = "";
+ if(tqp.oper == ">"){
+ prefix = "/";
+ // prefix = "/child::*";
+ tqp = qparts.shift();
+ }else if(tqp.oper == "~"){
+ prefix = "/following-sibling::"; // get element following siblings
+ tqp = qparts.shift();
+ }else if(tqp.oper == "+"){
+ // FIXME:
+ // fails when selecting subsequent siblings by node type
+ // because the position() checks the position in the list
+ // of matching elements and not the localized siblings
+ prefix = "/following-sibling::";
+ postfix = "[position()=1]";
+ tqp = qparts.shift();
+ }else{
+ prefix = "//";
+ // prefix = "/descendant::*"
+ }
+
+ // get the tag name (if any)
+
+ xpath += prefix + tqp.tag + postfix;
+
+ // check to see if it's got an id. Needs to come first in xpath.
+ if(tqp.id){
+ xpath += "[@id='"+tqp.id+"'][1]";
+ }
+
+ d.forEach(tqp.classes, function(cn){
+ var cnl = cn.length;
+ var padding = " ";
+ if(cn.charAt(cnl-1) == "*"){
+ padding = ""; cn = cn.substr(0, cnl-1);
+ }
+ xpath +=
+ "[contains(concat(' ',@class,' '), ' "+
+ cn + padding + "')]";
+ });
+
+ handleAttrs(xPathAttrs, tqp,
+ function(condition){
+ return "[@"+condition+"]";
+ },
+ function(matcher){
+ xpath += matcher;
+ }
+ );
+
+ // FIXME: need to implement pseudo-class checks!!
+ };
+ return xpath;
+ };
+
+ var _xpathFuncCache = {};
+ var getXPathFunc = function(path){
+ if(_xpathFuncCache[path]){
+ return _xpathFuncCache[path];
+ }
+
+ var doc = d.doc;
+ // don't need to memoize. The closure scope handles it for us.
+ var xpath = buildPath(path);
+
+ var tf = function(parent){
+ // XPath query strings are memoized.
+
+ var ret = [];
+ var xpathResult;
+ var tdoc = doc;
+ if(parent){
+ tdoc = (parent.nodeType == 9) ? parent : parent.ownerDocument;
+ }
+ try{
+ xpathResult = tdoc.evaluate(xpath, parent, null,
+ // XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null);
+ XPathResult.ANY_TYPE, null);
+ }catch(e){
+
+
+ }
+ var result = xpathResult.iterateNext();
+ while(result){
+ ret.push(result);
+ result = xpathResult.iterateNext();
+ }
+ return ret;
+ }
+ return _xpathFuncCache[path] = tf;
+ };
+
+ /*
+ d.xPathMatch = function(query){
+ // XPath based DOM query system. Handles a small subset of CSS
+ // selectors, subset is identical to the non-XPath version of this
+ // function.
+
+ return getXPathFunc(query)();
+ }
+ */
+
+ ////////////////////////////////////////////////////////////////////////
+ // DOM query code
+ ////////////////////////////////////////////////////////////////////////
+
+ var _filtersCache = {};
+ var _simpleFiltersCache = {};
+
+ // the basic building block of the yes/no chaining system. agree(f1, f2)
+ // generates a new function which returns the boolean results of both of
+ // the passed functions to a single logical-anded result.
+ var agree = function(first, second){
+ if(!first){ return second; }
+ if(!second){ return first; }
+
+ return function(){
+ return first.apply(window, arguments) && second.apply(window, arguments);
+ }
+ }
+
+ var _childElements = function(root){
+ var ret = [];
+ var te, x = 0, tret = root[childNodesName];
+ while((te = tret[x++])){
+ if(te.nodeType == 1){ ret.push(te); }
+ }
+ return ret;
+ }
+
+ var _nextSiblings = function(root, single){
+ var ret = [];
+ var te = root;
+ while(te = te.nextSibling){
+ if(te.nodeType == 1){
+ ret.push(te);
+ if(single){ break; }
+ }
+ }
+ return ret;
+ }
+
+ // FIXME:
+ // we need to re-write the way "~" and "+" selectors are handled since
+ // the left-hand selector simply modifies the right (which is the
+ // actual search selector). We need to locate on search selector
+ // instead of modifier to speed up these searches.
+
+ var _filterDown = function(element, queryParts, matchArr, idx){
+ // NOTE:
+ // in the fast path! this function is called recursively and for
+ // every run of a query.
+ var nidx = idx+1;
+ var isFinal = (queryParts.length == nidx);
+ var tqp = queryParts[idx];
+
+ // see if we can constrain our next level to direct children
+ if(tqp.oper){
+ // find some eligable children to search
+ var ecn = (tqp.oper == ">") ?
+ _childElements(element) :
+ _nextSiblings(element, (tqp.oper == "+"));
+
+ if(!ecn || !ecn.length){
+ return;
+ }
+ nidx++;
+ isFinal = (queryParts.length == nidx);
+ // kinda janky, too much array alloc
+ var tf = getFilterFunc(queryParts[idx+1]);
+ // for(var x=ecn.length-1, te; x>=0, te=ecn[x]; x--){
+ for(var x=0, ecnl=ecn.length, te; x<ecnl, te=ecn[x]; x++){
+ if(tf(te)){
+ if(isFinal){
+ matchArr.push(te);
+ }else{
+ _filterDown(te, queryParts, matchArr, nidx);
+ }
+ }
+ /*
+ if(x==0){
+ break;
+ }
+ */
+ }
+ }
+
+ // otherwise, keep going down, unless we'er at the end
+ var candidates = getElementsFunc(tqp)(element);
+ if(isFinal){
+ while(candidates.length){
+ matchArr.push(candidates.shift());
+ }
+ /*
+ candidates.unshift(0, matchArr.length-1);
+ matchArr.splice.apply(matchArr, candidates);
+ */
+ }else{
+ // if we're not yet at the bottom, keep going!
+ while(candidates.length){
+ _filterDown(candidates.shift(), queryParts, matchArr, nidx);
+ }
+ }
+ }
+
+ var filterDown = function(elements, queryParts){
+ var ret = [];
+
+ // for every root, get the elements that match the descendant selector
+ // for(var x=elements.length-1, te; x>=0, te=elements[x]; x--){
+ var x = elements.length - 1, te;
+ while((te = elements[x--])){
+ _filterDown(te, queryParts, ret, 0);
+ }
+ return ret;
+ }
+
+ var getFilterFunc = function(q){
+ // note: query can't have spaces!
+ if(_filtersCache[q.query]){
+ return _filtersCache[q.query];
+ }
+ var ff = null;
+
+ // does it have a tagName component?
+ if(q.tag){
+ if(q.tag == "*"){
+ ff = agree(ff,
+ function(elem){
+ return (elem.nodeType == 1);
+ }
+ );
+ }else{
+ // tag name match
+ ff = agree(ff,
+ function(elem){
+ return (
+ (elem.nodeType == 1) &&
+ (q[ caseSensitive ? "otag" : "tag" ] == elem.tagName)
+ // (q.tag == elem.tagName.toLowerCase())
+ );
+ // return isTn;
+ }
+ );
+ }
+ }
+
+ // does the node have an ID?
+ if(q.id){
+ ff = agree(ff,
+ function(elem){
+ return (
+ (elem.nodeType == 1) &&
+ (elem.id == q.id)
+ );
+ }
+ );
+ }
+
+ if(q.hasLoops){
+ // if we have other query param parts, make sure we add them to the
+ // filter chain
+ ff = agree(ff, getSimpleFilterFunc(q));
+ }
+
+ return _filtersCache[q.query] = ff;
+ }
+
+ var getNodeIndex = function(node){
+ // NOTE:
+ // we could have a more accurate caching mechanism by invalidating
+ // caches after the query has finished, but I think that'd lead to
+ // significantly more cache churn than the cache would provide
+ // value for in the common case. Generally, we're more
+ // conservative (and therefore, more accurate) than jQuery and
+ // DomQuery WRT node node indexes, but there may be corner cases
+ // in which we fall down. How much we care about them is TBD.
+
+ var pn = node.parentNode;
+ var pnc = pn.childNodes;
+
+ // check to see if we can trust the cache. If not, re-key the whole
+ // thing and return our node match from that.
+
+ var nidx = -1;
+ var child = pn.firstChild;
+ if(!child){
+ return nidx;
+ }
+
+ var ci = node["__cachedIndex"];
+ var cl = pn["__cachedLength"];
+
+ // only handle cache building if we've gone out of sync
+ if(((typeof cl == "number")&&(cl != pnc.length))||(typeof ci != "number")){
+ // rip though the whole set, building cache indexes as we go
+ pn["__cachedLength"] = pnc.length;
+ var idx = 1;
+ do{
+ // we only assign indexes for nodes with nodeType == 1, as per:
+ // http://www.w3.org/TR/css3-selectors/#nth-child-pseudo
+ // only elements are counted in the search order, and they
+ // begin at 1 for the first child's index
+
+ if(child === node){
+ nidx = idx;
+ }
+ if(child.nodeType == 1){
+ child["__cachedIndex"] = idx;
+ idx++;
+ }
+ child = child.nextSibling;
+ }while(child);
+ }else{
+ // NOTE:
+ // could be incorrect in some cases (node swaps involving the
+ // passed node, etc.), but we ignore those due to the relative
+ // unlikelihood of that occuring
+ nidx = ci;
+ }
+ return nidx;
+ }
+
+ var firedCount = 0;
+
+ var blank = "";
+ var _getAttr = function(elem, attr){
+ if(attr == "class"){
+ return elem.className || blank;
+ }
+ if(attr == "for"){
+ return elem.htmlFor || blank;
+ }
+ if(attr == "style"){
+ return elem.style.cssText || blank;
+ }
+ return (caseSensitive ? elem.getAttribute(attr) : elem.getAttribute(attr, 2)) || blank;
+ }
+
+ var attrs = {
+ "*=": function(attr, value){
+ return function(elem){
+ // E[foo*="bar"]
+ // an E element whose "foo" attribute value contains
+ // the substring "bar"
+ return (_getAttr(elem, attr).indexOf(value)>=0);
+ }
+ },
+ "^=": function(attr, value){
+ // E[foo^="bar"]
+ // an E element whose "foo" attribute value begins exactly
+ // with the string "bar"
+ return function(elem){
+ return (_getAttr(elem, attr).indexOf(value)==0);
+ }
+ },
+ "$=": function(attr, value){
+ // E[foo$="bar"]
+ // an E element whose "foo" attribute value ends exactly
+ // with the string "bar"
+ var tval = " "+value;
+ return function(elem){
+ var ea = " "+_getAttr(elem, attr);
+ return (ea.lastIndexOf(value)==(ea.length-value.length));
+ }
+ },
+ "~=": function(attr, value){
+ // E[foo~="bar"]
+ // an E element whose "foo" attribute value is a list of
+ // space-separated values, one of which is exactly equal
+ // to "bar"
+
+ // return "[contains(concat(' ',@"+attr+",' '), ' "+ value +" ')]";
+ var tval = " "+value+" ";
+ return function(elem){
+ var ea = " "+_getAttr(elem, attr)+" ";
+ return (ea.indexOf(tval)>=0);
+ }
+ },
+ "|=": function(attr, value){
+ // E[hreflang|="en"]
+ // an E element whose "hreflang" attribute has a
+ // hyphen-separated list of values beginning (from the
+ // left) with "en"
+ var valueDash = " "+value+"-";
+ return function(elem){
+ var ea = " "+(elem.getAttribute(attr, 2) || "");
+ return (
+ (ea == value) ||
+ (ea.indexOf(valueDash)==0)
+ );
+ }
+ },
+ "=": function(attr, value){
+ return function(elem){
+ return (_getAttr(elem, attr) == value);
+ }
+ }
+ };
+
+ var pseudos = {
+ "checked": function(name, condition){
+ return function(elem){
+ return !!d.attr(elem, "checked");
+ }
+ },
+ "first-child": function(name, condition){
+ return function(elem){
+ if(elem.nodeType != 1){ return false; }
+ // check to see if any of the previous siblings are elements
+ var fc = elem.previousSibling;
+ while(fc && (fc.nodeType != 1)){
+ fc = fc.previousSibling;
+ }
+ return (!fc);
+ }
+ },
+ "last-child": function(name, condition){
+ return function(elem){
+ if(elem.nodeType != 1){ return false; }
+ // check to see if any of the next siblings are elements
+ var nc = elem.nextSibling;
+ while(nc && (nc.nodeType != 1)){
+ nc = nc.nextSibling;
+ }
+ return (!nc);
+ }
+ },
+ "empty": function(name, condition){
+ return function(elem){
+ // DomQuery and jQuery get this wrong, oddly enough.
+ // The CSS 3 selectors spec is pretty explicit about
+ // it, too.
+ var cn = elem.childNodes;
+ var cnl = elem.childNodes.length;
+ // if(!cnl){ return true; }
+ for(var x=cnl-1; x >= 0; x--){
+ var nt = cn[x].nodeType;
+ if((nt == 1)||(nt == 3)){ return false; }
+ }
+ return true;
+ }
+ },
+ "contains": function(name, condition){
+ return function(elem){
+ // FIXME: I dislike this version of "contains", as
+ // whimsical attribute could set it off. An inner-text
+ // based version might be more accurate, but since
+ // jQuery and DomQuery also potentially get this wrong,
+ // I'm leaving it for now.
+ if(condition.charAt(0)=='"' || condition.charAt(0)=="'"){//remove quote
+ condition=condition.substr(1,condition.length-2);
+ }
+ return (elem.innerHTML.indexOf(condition) >= 0);
+ }
+ },
+ "not": function(name, condition){
+ var ntf = getFilterFunc(getQueryParts(condition)[0]);
+ return function(elem){
+ return (!ntf(elem));
+ }
+ },
+ "nth-child": function(name, condition){
+ var pi = parseInt;
+ if(condition == "odd"){
+ condition = "2n+1";
+ }else if(condition == "even"){
+ condition = "2n";
+ }
+ if(condition.indexOf("n") != -1){
+ var tparts = condition.split("n", 2);
+ var pred = tparts[0] ? (tparts[0]=='-'?-1:pi(tparts[0])) : 1;
+ var idx = tparts[1] ? pi(tparts[1]) : 0;
+ var lb = 0, ub = -1;
+ if(pred>0){
+ if(idx<0){
+ idx = (idx % pred) && (pred + (idx % pred));
+ }else if(idx>0){
+ if(idx >= pred){
+ lb = idx - idx % pred;
+ }
+ idx = idx % pred;
+ }
+ }else if(pred<0){
+ pred *= -1;
+ if(idx>0){
+ ub = idx;
+ idx = idx % pred;
+ } //idx has to be greater than 0 when pred is negative; shall we throw an error here?
+ }
+ if(pred>0){
+ return function(elem){
+ var i=getNodeIndex(elem);
+ return (i>=lb) && (ub<0 || i<=ub) && ((i % pred) == idx);
+ }
+ }else{
+ condition=idx;
+ }
+ }
+ //if(condition.indexOf("n") == -1){
+ var ncount = pi(condition);
+ return function(elem){
+ return (getNodeIndex(elem) == ncount);
+ }
+ }
+ };
+
+ var defaultGetter = (d.isIE) ? function(cond){
+ var clc = cond.toLowerCase();
+ return function(elem){
+ return (caseSensitive ? elem.getAttribute(cond) : elem[cond]||elem[clc]);
+ }
+ } : function(cond){
+ return function(elem){
+ return (elem && elem.getAttribute && elem.hasAttribute(cond));
+ }
+ };
+
+ var getSimpleFilterFunc = function(query){
+
+ var fcHit = (_simpleFiltersCache[query.query]||_filtersCache[query.query]);
+ if(fcHit){ return fcHit; }
+
+ var ff = null;
+
+ // the only case where we'll need the tag name is if we came from an ID query
+ if(query.id){ // do we have an ID component?
+ if(query.tag != "*"){
+ ff = agree(ff, function(elem){
+ return (elem.tagName == query[ caseSensitive ? "otag" : "tag" ]);
+ });
+ }
+ }
+
+ // if there's a class in our query, generate a match function for it
+ d.forEach(query.classes, function(cname, idx, arr){
+ // get the class name
+ var isWildcard = cname.charAt(cname.length-1) == "*";
+ if(isWildcard){
+ cname = cname.substr(0, cname.length-1);
+ }
+ // I dislike the regex thing, even if memozied in a cache, but it's VERY short
+ var re = new RegExp("(?:^|\\s)" + cname + (isWildcard ? ".*" : "") + "(?:\\s|$)");
+ ff = agree(ff, function(elem){
+ return re.test(elem.className);
+ });
+ ff.count = idx;
+ });
+
+ d.forEach(query.pseudos, function(pseudo){
+ if(pseudos[pseudo.name]){
+ ff = agree(ff, pseudos[pseudo.name](pseudo.name, pseudo.value));
+ }
+ });
+
+ handleAttrs(attrs, query, defaultGetter,
+ function(tmatcher){ ff = agree(ff, tmatcher); }
+ );
+ if(!ff){
+ ff = function(){ return true; };
+ }
+ return _simpleFiltersCache[query.query] = ff;
+ }
+
+ var _getElementsFuncCache = { };
+
+ var getElementsFunc = function(query, root){
+ var fHit = _getElementsFuncCache[query.query];
+ if(fHit){ return fHit; }
+
+ // NOTE: this function is in the fast path! not memoized!!!
+
+ // the query doesn't contain any spaces, so there's only so many
+ // things it could be
+
+ if(query.id && !query.hasLoops && !query.tag){
+ // ID-only query. Easy.
+ return _getElementsFuncCache[query.query] = function(root){
+ // FIXME: if root != document, check for parenting!
+ return [ d.byId(query.id) ];
+ }
+ }
+
+ var filterFunc = getSimpleFilterFunc(query);
+
+ var retFunc;
+ if(query.tag && query.id && !query.hasLoops){
+ // we got a filtered ID search (e.g., "h4#thinger")
+ retFunc = function(root){
+ var te = d.byId(query.id, (root.ownerDocument||root)); //root itself may be a document
+ if(filterFunc(te)){
+ return [ te ];
+ }
+ }
+ }else{
+ var tret;
+
+ if(!query.hasLoops){
+ // it's just a plain-ol elements-by-tag-name query from the root
+ retFunc = function(root){
+ var ret = [];
+ var te, x=0, tret = root.getElementsByTagName(query[ caseSensitive ? "otag" : "tag"]);
+ while((te = tret[x++])){
+ ret.push(te);
+ }
+ return ret;
+ }
+ }else{
+ retFunc = function(root){
+ var ret = [];
+ var te, x = 0, tret = root.getElementsByTagName(query[ caseSensitive ? "otag" : "tag"]);
+ while((te = tret[x++])){
+ if(filterFunc(te)){
+ ret.push(te);
+ }
+ }
+ return ret;
+ }
+ }
+ }
+ return _getElementsFuncCache[query.query] = retFunc;
+ }
+
+ var _partsCache = {};
+
+ ////////////////////////////////////////////////////////////////////////
+ // the query runner
+ ////////////////////////////////////////////////////////////////////////
+
+ // this is the second level of spliting, from full-length queries (e.g.,
+ // "div.foo .bar") into simple query expressions (e.g., ["div.foo",
+ // ".bar"])
+ var _queryFuncCache = {
+ "*": d.isIE ?
+ function(root){
+ return root.all;
+ } :
+ function(root){
+ return root.getElementsByTagName("*");
+ },
+ "~": _nextSiblings,
+ "+": function(root){ return _nextSiblings(root, true); },
+ ">": _childElements
+ };
+
+ var getStepQueryFunc = function(query){
+ // if it's trivial, get a fast-path dispatcher
+ var qparts = getQueryParts(d.trim(query));
+ // if(query[query.length-1] == ">"){ query += " *"; }
+ if(qparts.length == 1){
+ var tt = getElementsFunc(qparts[0]);
+ tt.nozip = true; // FIXME: is this right? Shouldn't this be wrapped in a closure to mark the return?
+ return tt;
+ }
+
+ // otherwise, break it up and return a runner that iterates over the parts recursively
+ var sqf = function(root){
+ var localQueryParts = qparts.slice(0); // clone the src arr
+ var candidates;
+ if(localQueryParts[0].oper == ">"){ // FIXME: what if it's + or ~?
+ candidates = [ root ];
+ // root = document;
+ }else{
+ candidates = getElementsFunc(localQueryParts.shift())(root);
+ }
+ return filterDown(candidates, localQueryParts);
+ }
+ return sqf;
+ }
+
+ // a specialized method that implements our primoridal "query optimizer".
+ // This allows us to dispatch queries to the fastest subsystem we can get.
+ var _getQueryFunc = (
+ // NOTE:
+ // XPath on the Webkit is slower than it's DOM iteration for most
+ // test cases
+ // FIXME:
+ // we should try to capture some runtime speed data for each query
+ // function to determine on the fly if we should stick w/ the
+ // potentially optimized variant or if we should try something
+ // new.
+ (document["evaluate"] && !d.isSafari) ?
+ function(query, root){
+ // has xpath support that's faster than DOM
+ var qparts = query.split(" ");
+ // can we handle it?
+ if( (!caseSensitive) && // not strictly necessaray, but simplifies lots of stuff
+ (document["evaluate"]) &&
+ (query.indexOf(":") == -1) &&
+ (query.indexOf("+") == -1) // skip direct sibling matches. See line ~344
+ ){
+ // dojo.debug(query);
+ // should we handle it?
+
+ // kind of a lame heuristic, but it works
+ if(
+ // a "div div div" style query
+ ((qparts.length > 2)&&(query.indexOf(">") == -1))||
+ // or something else with moderate complexity. kinda janky
+ (qparts.length > 3)||
+ (query.indexOf("[")>=0)||
+ // or if it's a ".thinger" query
+ ((1 == qparts.length)&&(0 <= query.indexOf(".")))
+
+ ){
+ // use get and cache a xpath runner for this selector
+ return getXPathFunc(query);
+ }
+ }
+
+ // fallthrough
+ return getStepQueryFunc(query);
+ } : getStepQueryFunc
+ );
+ // uncomment to disable XPath for testing and tuning the DOM path
+ // _getQueryFunc = getStepQueryFunc;
+
+ // FIXME: we've got problems w/ the NodeList query()/filter() functions if we go XPath for everything
+
+ // uncomment to disable DOM queries for testing and tuning XPath
+ // _getQueryFunc = getXPathFunc;
+
+ // this is the primary caching for full-query results. The query dispatcher
+ // functions are generated here and then pickled for hash lookup in the
+ // future
+ var getQueryFunc = function(query){
+ // return a cached version if one is available
+ var qcz = query.charAt(0);
+ if(d.doc["querySelectorAll"] &&
+ ( (!d.isSafari) || (d.isSafari > 3.1) ) && // see #5832
+ // as per CSS 3, we can't currently start w/ combinator:
+ // http://www.w3.org/TR/css3-selectors/#w3cselgrammar
+ (">+~".indexOf(qcz) == -1)
+ ){
+ return function(root){
+ var r = root.querySelectorAll(query);
+ r.nozip = true; // skip expensive duplication checks and just wrap in a NodeList
+ return r;
+ };
+ }
+ if(_queryFuncCache[query]){ return _queryFuncCache[query]; }
+ if(0 > query.indexOf(",")){
+ // if it's not a compound query (e.g., ".foo, .bar"), cache and return a dispatcher
+ return _queryFuncCache[query] = _getQueryFunc(query);
+ }else{
+ // if it's a complex query, break it up into it's constituent parts
+ // and return a dispatcher that will merge the parts when run
+
+ // var parts = query.split(", ");
+ var parts = query.split(/\s*,\s*/);
+ var tf = function(root){
+ var pindex = 0; // avoid array alloc for every invocation
+ var ret = [];
+ var tp;
+ while((tp = parts[pindex++])){
+ ret = ret.concat(_getQueryFunc(tp, tp.indexOf(" "))(root));
+ }
+ return ret;
+ }
+ // ...cache and return
+ return _queryFuncCache[query] = tf;
+ }
+ }
+
+ // FIXME:
+ // Dean's Base2 uses a system whereby queries themselves note if
+ // they'll need duplicate filtering. We need to get on that plan!!
+
+ // attempt to efficiently determine if an item in a list is a dupe,
+ // returning a list of "uniques", hopefully in doucment order
+ var _zipIdx = 0;
+ var _zip = function(arr){
+ if(arr && arr.nozip){ return d.NodeList._wrap(arr); }
+ var ret = new d.NodeList();
+ if(!arr){ return ret; }
+ if(arr[0]){
+ ret.push(arr[0]);
+ }
+ if(arr.length < 2){ return ret; }
+
+ _zipIdx++;
+
+ // we have to fork here for IE and XML docs because we can't set
+ // expandos on their nodes (apparently). *sigh*
+ if(d.isIE && caseSensitive){
+ var szidx = _zipIdx+"";
+ arr[0].setAttribute("_zipIdx", szidx);
+ for(var x = 1, te; te = arr[x]; x++){
+ if(arr[x].getAttribute("_zipIdx") != szidx){
+ ret.push(te);
+ }
+ te.setAttribute("_zipIdx", szidx);
+ }
+ }else{
+ arr[0]["_zipIdx"] = _zipIdx;
+ for(var x = 1, te; te = arr[x]; x++){
+ if(arr[x]["_zipIdx"] != _zipIdx){
+ ret.push(te);
+ }
+ te["_zipIdx"] = _zipIdx;
+ }
+ }
+ // FIXME: should we consider stripping these properties?
+ return ret;
+ }
+
+ // the main executor
+ d.query = function(/*String*/ query, /*String|DOMNode?*/ root){
+ // summary:
+ // Returns nodes which match the given CSS3 selector, searching the
+ // entire document by default but optionally taking a node to scope
+ // the search by. Returns an instance of dojo.NodeList.
+ // description:
+ // dojo.query() is the swiss army knife of DOM node manipulation in
+ // Dojo. Much like Prototype's "$$" (bling-bling) function or JQuery's
+ // "$" function, dojo.query provides robust, high-performance
+ // CSS-based node selector support with the option of scoping searches
+ // to a particular sub-tree of a document.
+ //
+ // Supported Selectors:
+ // --------------------
+ //
+ // dojo.query() supports a rich set of CSS3 selectors, including:
+ //
+ // * class selectors (e.g., `.foo`)
+ // * node type selectors like `span`
+ // * ` ` descendant selectors
+ // * `>` child element selectors
+ // * `#foo` style ID selectors
+ // * `*` universal selector
+ // * `~`, the immediately preceeded-by sibling selector
+ // * `+`, the preceeded-by sibling selector
+ // * attribute queries:
+ // | * `[foo]` attribute presence selector
+ // | * `[foo='bar']` attribute value exact match
+ // | * `[foo~='bar']` attribute value list item match
+ // | * `[foo^='bar']` attribute start match
+ // | * `[foo$='bar']` attribute end match
+ // | * `[foo*='bar']` attribute substring match
+ // * `:first-child`, `:last-child` positional selectors
+ // * `:empty` content emtpy selector
+ // * `:empty` content emtpy selector
+ // * `:checked` pseudo selector
+ // * `:nth-child(n)`, `:nth-child(2n+1)` style positional calculations
+ // * `:nth-child(even)`, `:nth-child(odd)` positional selectors
+ // * `:not(...)` negation pseudo selectors
+ //
+ // Any legal combination of these selectors will work with
+ // `dojo.query()`, including compound selectors ("," delimited).
+ // Very complex and useful searches can be constructed with this
+ // palette of selectors and when combined with functions for
+ // maniplation presented by dojo.NodeList, many types of DOM
+ // manipulation operations become very straightforward.
+ //
+ // Unsupported Selectors:
+ // ----------------------
+ //
+ // While dojo.query handles many CSS3 selectors, some fall outside of
+ // what's resaonable for a programmatic node querying engine to
+ // handle. Currently unsupported selectors include:
+ //
+ // * namespace-differentiated selectors of any form
+ // * all `::` pseduo-element selectors
+ // * certain pseduo-selectors which don't get a lot of day-to-day use:
+ // | * `:root`, `:lang()`, `:target`, `:focus`
+ // * all visual and state selectors:
+ // | * `:root`, `:active`, `:hover`, `:visisted`, `:link`,
+ // `:enabled`, `:disabled`
+ // * `:*-of-type` pseudo selectors
+ //
+ // dojo.query and XML Documents:
+ // -----------------------------
+ //
+ // `dojo.query` currently only supports searching XML documents
+ // whose tags and attributes are 100% lower-case. This is a known
+ // limitation and will [be addressed soon](http://trac.dojotoolkit.org/ticket/3866)
+ // Non-selector Queries:
+ // ---------------------
+ //
+ // If something other than a String is passed for the query,
+ // `dojo.query` will return a new `dojo.NodeList` constructed from
+ // that parameter alone and all further processing will stop. This
+ // means that if you have a reference to a node or NodeList, you
+ // can quickly construct a new NodeList from the original by
+ // calling `dojo.query(node)` or `dojo.query(list)`.
+ //
+ // query:
+ // The CSS3 expression to match against. For details on the syntax of
+ // CSS3 selectors, see <http://www.w3.org/TR/css3-selectors/#selectors>
+ // root:
+ // A DOMNode (or node id) to scope the search from. Optional.
+ // returns: dojo.NodeList
+ // An instance of `dojo.NodeList`. Many methods are available on
+ // NodeLists for searching, iterating, manipulating, and handling
+ // events on the matched nodes in the returned list.
+ // example:
+ // search the entire document for elements with the class "foo":
+ // | dojo.query(".foo");
+ // these elements will match:
+ // | <span class="foo"></span>
+ // | <span class="foo bar"></span>
+ // | <p class="thud foo"></p>
+ // example:
+ // search the entire document for elements with the classes "foo" *and* "bar":
+ // | dojo.query(".foo.bar");
+ // these elements will match:
+ // | <span class="foo bar"></span>
+ // while these will not:
+ // | <span class="foo"></span>
+ // | <p class="thud foo"></p>
+ // example:
+ // find `<span>` elements which are descendants of paragraphs and
+ // which have a "highlighted" class:
+ // | dojo.query("p span.highlighted");
+ // the innermost span in this fragment matches:
+ // | <p class="foo">
+ // | <span>...
+ // | <span class="highlighted foo bar">...</span>
+ // | </span>
+ // | </p>
+ // example:
+ // set an "odd" class on all odd table rows inside of the table
+ // `#tabular_data`, using the `>` (direct child) selector to avoid
+ // affecting any nested tables:
+ // | dojo.query("#tabular_data > tbody > tr:nth-child(odd)").addClass("odd");
+ // example:
+ // remove all elements with the class "error" from the document
+ // and store them in a list:
+ // | var errors = dojo.query(".error").orphan();
+ // example:
+ // add an onclick handler to every submit button in the document
+ // which causes the form to be sent via Ajax instead:
+ // | dojo.query("input[type='submit']").onclick(function(e){
+ // | dojo.stopEvent(e); // prevent sending the form
+ // | var btn = e.target;
+ // | dojo.xhrPost({
+ // | form: btn.form,
+ // | load: function(data){
+ // | // replace the form with the response
+ // | var div = dojo.doc.createElement("div");
+ // | dojo.place(div, btn.form, "after");
+ // | div.innerHTML = data;
+ // | dojo.style(btn.form, "display", "none");
+ // | }
+ // | });
+ // | });
+
+
+ // NOTE: elementsById is not currently supported
+ // NOTE: ignores xpath-ish queries for now
+
+ if(query.constructor == d.NodeList){
+ return query;
+ }
+ if(!d.isString(query)){
+ return new d.NodeList(query); // dojo.NodeList
+ }
+ if(d.isString(root)){
+ root = d.byId(root);
+ }
+
+ root = root||d.doc;
+ var od = root.ownerDocument||root.documentElement;
+ caseSensitive = (root.contentType && root.contentType=="application/xml") || (!!od) && (d.isIE ? od.xml : (root.xmlVersion||od.xmlVersion));
+ return _zip(getQueryFunc(query)(root)); // dojo.NodeList
+ }
+
+ /*
+ // exposing this was a mistake
+ d.query.attrs = attrs;
+ */
+ // exposing this because new pseudo matches are only executed through the
+ // DOM query path (never through the xpath optimizing branch)
+ d.query.pseudos = pseudos;
+
+ // one-off function for filtering a NodeList based on a simple selector
+ d._filterQueryResult = function(nodeList, simpleFilter){
+ var tnl = new d.NodeList();
+ var ff = (simpleFilter) ? getFilterFunc(getQueryParts(simpleFilter)[0]) : function(){ return true; };
+ for(var x = 0, te; te = nodeList[x]; x++){
+ if(ff(te)){ tnl.push(te); }
+ }
+ return tnl;
+ }
+})();
+
+}
+
+if(!dojo._hasResource["dojo._base.xhr"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo._base.xhr"] = true;
+dojo.provide("dojo._base.xhr");
+
+
+
+
+
+(function(){
+ var _d = dojo;
+ function setValue(/*Object*/obj, /*String*/name, /*String*/value){
+ //summary:
+ // For the named property in object, set the value. If a value
+ // already exists and it is a string, convert the value to be an
+ // array of values.
+ var val = obj[name];
+ if(_d.isString(val)){
+ obj[name] = [val, value];
+ }else if(_d.isArray(val)){
+ val.push(value);
+ }else{
+ obj[name] = value;
+ }
+ }
+
+ dojo.formToObject = function(/*DOMNode||String*/ formNode){
+ // summary:
+ // dojo.formToObject returns the values encoded in an HTML form as
+ // string properties in an object which it then returns. Disabled form
+ // elements, buttons, and other non-value form elements are skipped.
+ // Multi-select elements are returned as an array of string values.
+ // description:
+ // This form:
+ //
+ // | <form id="test_form">
+ // | <input type="text" name="blah" value="blah">
+ // | <input type="text" name="no_value" value="blah" disabled>
+ // | <input type="button" name="no_value2" value="blah">
+ // | <select type="select" multiple name="multi" size="5">
+ // | <option value="blah">blah</option>
+ // | <option value="thud" selected>thud</option>
+ // | <option value="thonk" selected>thonk</option>
+ // | </select>
+ // | </form>
+ //
+ // yields this object structure as the result of a call to
+ // formToObject():
+ //
+ // | {
+ // | blah: "blah",
+ // | multi: [
+ // | "thud",
+ // | "thonk"
+ // | ]
+ // | };
+
+ var ret = {};
+ var exclude = "file|submit|image|reset|button|";
+ _d.forEach(dojo.byId(formNode).elements, function(item){
+ var _in = item.name;
+ var type = (item.type||"").toLowerCase();
+ if(_in && type && exclude.indexOf(type) == -1 && !item.disabled){
+ if(type == "radio" || type == "checkbox"){
+ if(item.checked){ setValue(ret, _in, item.value); }
+ }else if(item.multiple){
+ ret[_in] = [];
+ _d.query("option", item).forEach(function(opt){
+ if(opt.selected){
+ setValue(ret, _in, opt.value);
+ }
+ });
+ }else{
+ setValue(ret, _in, item.value);
+ if(type == "image"){
+ ret[_in+".x"] = ret[_in+".y"] = ret[_in].x = ret[_in].y = 0;
+ }
+ }
+ }
+ });
+ return ret; // Object
+ }
+
+ dojo.objectToQuery = function(/*Object*/ map){
+ // summary:
+ // takes a name/value mapping object and returns a string representing
+ // a URL-encoded version of that object.
+ // example:
+ // this object:
+ //
+ // | {
+ // | blah: "blah",
+ // | multi: [
+ // | "thud",
+ // | "thonk"
+ // | ]
+ // | };
+ //
+ // yields the following query string:
+ //
+ // | "blah=blah&multi=thud&multi=thonk"
+
+ // FIXME: need to implement encodeAscii!!
+ var enc = encodeURIComponent;
+ var pairs = [];
+ var backstop = {};
+ for(var name in map){
+ var value = map[name];
+ if(value != backstop[name]){
+ var assign = enc(name) + "=";
+ if(_d.isArray(value)){
+ for(var i=0; i < value.length; i++){
+ pairs.push(assign + enc(value[i]));
+ }
+ }else{
+ pairs.push(assign + enc(value));
+ }
+ }
+ }
+ return pairs.join("&"); // String
+ }
+
+ dojo.formToQuery = function(/*DOMNode||String*/ formNode){
+ // summary:
+ // Returns a URL-encoded string representing the form passed as either a
+ // node or string ID identifying the form to serialize
+ return _d.objectToQuery(_d.formToObject(formNode)); // String
+ }
+
+ dojo.formToJson = function(/*DOMNode||String*/ formNode, /*Boolean?*/prettyPrint){
+ // summary:
+ // return a serialized JSON string from a form node or string
+ // ID identifying the form to serialize
+ return _d.toJson(_d.formToObject(formNode), prettyPrint); // String
+ }
+
+ dojo.queryToObject = function(/*String*/ str){
+ // summary:
+ // returns an object representing a de-serialized query section of a
+ // URL. Query keys with multiple values are returned in an array.
+ // description:
+ // This string:
+ //
+ // | "foo=bar&foo=baz&thinger=%20spaces%20=blah&zonk=blarg&"
+ //
+ // results in this object structure:
+ //
+ // | {
+ // | foo: [ "bar", "baz" ],
+ // | thinger: " spaces =blah",
+ // | zonk: "blarg"
+ // | }
+ //
+ // Note that spaces and other urlencoded entities are correctly
+ // handled.
+
+ // FIXME: should we grab the URL string if we're not passed one?
+ var ret = {};
+ var qp = str.split("&");
+ var dec = decodeURIComponent;
+ _d.forEach(qp, function(item){
+ if(item.length){
+ var parts = item.split("=");
+ var name = dec(parts.shift());
+ var val = dec(parts.join("="));
+ if(_d.isString(ret[name])){
+ ret[name] = [ret[name]];
+ }
+ if(_d.isArray(ret[name])){
+ ret[name].push(val);
+ }else{
+ ret[name] = val;
+ }
+ }
+ });
+ return ret; // Object
+ }
+
+ /*
+ from refactor.txt:
+
+ all bind() replacement APIs take the following argument structure:
+
+ {
+ url: "blah.html",
+
+ // all below are optional, but must be supported in some form by
+ // every IO API
+ timeout: 1000, // milliseconds
+ handleAs: "text", // replaces the always-wrong "mimetype"
+ content: {
+ key: "value"
+ },
+
+ // browser-specific, MAY be unsupported
+ sync: true, // defaults to false
+ form: dojo.byId("someForm")
+ }
+ */
+
+ // need to block async callbacks from snatching this thread as the result
+ // of an async callback might call another sync XHR, this hangs khtml forever
+ // must checked by watchInFlight()
+
+ dojo._blockAsync = false;
+
+ dojo._contentHandlers = {
+ "text": function(xhr){ return xhr.responseText; },
+ "json": function(xhr){
+ return _d.fromJson(xhr.responseText || null);
+ },
+ "json-comment-filtered": function(xhr){
+ // NOTE: the json-comment-filtered option was implemented to prevent
+ // "JavaScript Hijacking", but it is less secure than standard JSON. Use
+ // standard JSON instead. JSON prefixing can be used to subvert hijacking.
+ if(!dojo.config.useCommentedJson){
+ console.warn("Consider using the standard mimetype:application/json."
+ + " json-commenting can introduce security issues. To"
+ + " decrease the chances of hijacking, use the standard the 'json' handler and"
+ + " prefix your json with: {}&&\n"
+ + "Use djConfig.useCommentedJson=true to turn off this message.");
+ }
+
+ var value = xhr.responseText;
+ var cStartIdx = value.indexOf("\/*");
+ var cEndIdx = value.lastIndexOf("*\/");
+ if(cStartIdx == -1 || cEndIdx == -1){
+ throw new Error("JSON was not comment filtered");
+ }
+ return _d.fromJson(value.substring(cStartIdx+2, cEndIdx));
+ },
+ "javascript": function(xhr){
+ // FIXME: try Moz and IE specific eval variants?
+ return _d.eval(xhr.responseText);
+ },
+ "xml": function(xhr){
+ var result = xhr.responseXML;
+ if(_d.isIE && (!result || result.documentElement == null)){
+ _d.forEach(["MSXML2", "Microsoft", "MSXML", "MSXML3"], function(prefix){
+ try{
+ var dom = new ActiveXObject(prefix + ".XMLDOM");
+ dom.async = false;
+ dom.loadXML(xhr.responseText);
+ result = dom;
+ }catch(e){ /* Not available. Squelch and try next one. */ }
+ });
+ }
+ return result; // DOMDocument
+ }
+ };
+
+ dojo._contentHandlers["json-comment-optional"] = function(xhr){
+ var handlers = _d._contentHandlers;
+ if(xhr.responseText && xhr.responseText.indexOf("\/*") != -1){
+ return handlers["json-comment-filtered"](xhr);
+ }else{
+ return handlers["json"](xhr);
+ }
+ };
+
+ /*=====
+ dojo.__IoArgs = function(){
+ // url: String
+ // URL to server endpoint.
+ // content: Object?
+ // Contains properties with string values. These
+ // properties will be serialized as name1=value2 and
+ // passed in the request.
+ // timeout: Integer?
+ // Milliseconds to wait for the response. If this time
+ // passes, the then error callbacks are called.
+ // form: DOMNode?
+ // DOM node for a form. Used to extract the form values
+ // and send to the server.
+ // preventCache: Boolean?
+ // Default is false. If true, then a
+ // "dojo.preventCache" parameter is sent in the request
+ // with a value that changes with each request
+ // (timestamp). Useful only with GET-type requests.
+ // handleAs: String?
+ // Acceptable values depend on the type of IO
+ // transport (see specific IO calls for more information).
+ // load: Function?
+ // function(response, ioArgs){} response is of type Object, ioArgs
+ // is of type dojo.__IoCallbackArgs. This function will be
+ // called on a successful HTTP response code.
+ // error: Function?
+ // function(response, ioArgs){} response is of type Object, ioArgs
+ // is of type dojo.__IoCallbackArgs. This function will
+ // be called when the request fails due to a network or server error, the url
+ // is invalid, etc. It will also be called if the load or handle callback throws an
+ // exception, unless djConfig.isDebug is true. This allows deployed applications
+ // to continue to run even when a logic error happens in the callback, while making
+ // it easier to troubleshoot while in debug mode.
+ // handle: Function?
+ // function(response, ioArgs){} response is of type Object, ioArgs
+ // is of type dojo.__IoCallbackArgs. This function will
+ // be called at the end of every request, whether or not an error occurs.
+ this.url = url;
+ this.content = content;
+ this.timeout = timeout;
+ this.form = form;
+ this.preventCache = preventCache;
+ this.handleAs = handleAs;
+ this.load = load;
+ this.error = error;
+ this.handle = handle;
+ }
+ =====*/
+
+ /*=====
+ dojo.__IoCallbackArgs = function(args, xhr, url, query, handleAs, id, canDelete, json){
+ // args: Object
+ // the original object argument to the IO call.
+ // xhr: XMLHttpRequest
+ // For XMLHttpRequest calls only, the
+ // XMLHttpRequest object that was used for the
+ // request.
+ // url: String
+ // The final URL used for the call. Many times it
+ // will be different than the original args.url
+ // value.
+ // query: String
+ // For non-GET requests, the
+ // name1=value1&name2=value2 parameters sent up in
+ // the request.
+ // handleAs: String
+ // The final indicator on how the response will be
+ // handled.
+ // id: String
+ // For dojo.io.script calls only, the internal
+ // script ID used for the request.
+ // canDelete: Boolean
+ // For dojo.io.script calls only, indicates
+ // whether the script tag that represents the
+ // request can be deleted after callbacks have
+ // been called. Used internally to know when
+ // cleanup can happen on JSONP-type requests.
+ // json: Object
+ // For dojo.io.script calls only: holds the JSON
+ // response for JSONP-type requests. Used
+ // internally to hold on to the JSON responses.
+ // You should not need to access it directly --
+ // the same object should be passed to the success
+ // callbacks directly.
+ this.args = args;
+ this.xhr = xhr;
+ this.url = url;
+ this.query = query;
+ this.handleAs = handleAs;
+ this.id = id;
+ this.canDelete = canDelete;
+ this.json = json;
+ }
+ =====*/
+
+
+
+ dojo._ioSetArgs = function(/*dojo.__IoArgs*/args,
+ /*Function*/canceller,
+ /*Function*/okHandler,
+ /*Function*/errHandler){
+ // summary:
+ // sets up the Deferred and ioArgs property on the Deferred so it
+ // can be used in an io call.
+ // args:
+ // The args object passed into the public io call. Recognized properties on
+ // the args object are:
+ // canceller:
+ // The canceller function used for the Deferred object. The function
+ // will receive one argument, the Deferred object that is related to the
+ // canceller.
+ // okHandler:
+ // The first OK callback to be registered with Deferred. It has the opportunity
+ // to transform the OK response. It will receive one argument -- the Deferred
+ // object returned from this function.
+ // errHandler:
+ // The first error callback to be registered with Deferred. It has the opportunity
+ // to do cleanup on an error. It will receive two arguments: error (the
+ // Error object) and dfd, the Deferred object returned from this function.
+
+ var ioArgs = {args: args, url: args.url};
+
+ //Get values from form if requestd.
+ var formObject = null;
+ if(args.form){
+ var form = _d.byId(args.form);
+ //IE requires going through getAttributeNode instead of just getAttribute in some form cases,
+ //so use it for all. See #2844
+ var actnNode = form.getAttributeNode("action");
+ ioArgs.url = ioArgs.url || (actnNode ? actnNode.value : null);
+ formObject = _d.formToObject(form);
+ }
+
+ // set up the query params
+ var miArgs = [{}];
+
+ if(formObject){
+ // potentially over-ride url-provided params w/ form values
+ miArgs.push(formObject);
+ }
+ if(args.content){
+ // stuff in content over-rides what's set by form
+ miArgs.push(args.content);
+ }
+ if(args.preventCache){
+ miArgs.push({"dojo.preventCache": new Date().valueOf()});
+ }
+ ioArgs.query = _d.objectToQuery(_d.mixin.apply(null, miArgs));
+
+ // .. and the real work of getting the deferred in order, etc.
+ ioArgs.handleAs = args.handleAs || "text";
+ var d = new _d.Deferred(canceller);
+ d.addCallbacks(okHandler, function(error){
+ return errHandler(error, d);
+ });
+
+ //Support specifying load, error and handle callback functions from the args.
+ //For those callbacks, the "this" object will be the args object.
+ //The callbacks will get the deferred result value as the
+ //first argument and the ioArgs object as the second argument.
+ var ld = args.load;
+ if(ld && _d.isFunction(ld)){
+ d.addCallback(function(value){
+ return ld.call(args, value, ioArgs);
+ });
+ }
+ var err = args.error;
+ if(err && _d.isFunction(err)){
+ d.addErrback(function(value){
+ return err.call(args, value, ioArgs);
+ });
+ }
+ var handle = args.handle;
+ if(handle && _d.isFunction(handle)){
+ d.addBoth(function(value){
+ return handle.call(args, value, ioArgs);
+ });
+ }
+
+ d.ioArgs = ioArgs;
+
+ // FIXME: need to wire up the xhr object's abort method to something
+ // analagous in the Deferred
+ return d;
+ }
+
+ var _deferredCancel = function(/*Deferred*/dfd){
+ //summary: canceller function for dojo._ioSetArgs call.
+
+ dfd.canceled = true;
+ var xhr = dfd.ioArgs.xhr;
+ var _at = typeof xhr.abort;
+ if(_at == "function" || _at == "object" || _at == "unknown"){
+ xhr.abort();
+ }
+ var err = dfd.ioArgs.error;
+ if(!err){
+ err = new Error("xhr cancelled");
+ err.dojoType="cancel";
+ }
+ return err;
+ }
+ var _deferredOk = function(/*Deferred*/dfd){
+ //summary: okHandler function for dojo._ioSetArgs call.
+
+ var ret = _d._contentHandlers[dfd.ioArgs.handleAs](dfd.ioArgs.xhr);
+ return (typeof ret == "undefined") ? null : ret;
+ }
+ var _deferError = function(/*Error*/error, /*Deferred*/dfd){
+ //summary: errHandler function for dojo._ioSetArgs call.
+
+
+ return error;
+ }
+
+ // avoid setting a timer per request. It degrades performance on IE
+ // something fierece if we don't use unified loops.
+ var _inFlightIntvl = null;
+ var _inFlight = [];
+ var _watchInFlight = function(){
+ //summary:
+ // internal method that checks each inflight XMLHttpRequest to see
+ // if it has completed or if the timeout situation applies.
+
+ var now = (new Date()).getTime();
+ // make sure sync calls stay thread safe, if this callback is called
+ // during a sync call and this results in another sync call before the
+ // first sync call ends the browser hangs
+ if(!_d._blockAsync){
+ // we need manual loop because we often modify _inFlight (and therefore 'i') while iterating
+ // note: the second clause is an assigment on purpose, lint may complain
+ for(var i = 0, tif; i < _inFlight.length && (tif = _inFlight[i]); i++){
+ var dfd = tif.dfd;
+ var func = function(){
+ if(!dfd || dfd.canceled || !tif.validCheck(dfd)){
+ _inFlight.splice(i--, 1);
+ }else if(tif.ioCheck(dfd)){
+ _inFlight.splice(i--, 1);
+ tif.resHandle(dfd);
+ }else if(dfd.startTime){
+ //did we timeout?
+ if(dfd.startTime + (dfd.ioArgs.args.timeout || 0) < now){
+ _inFlight.splice(i--, 1);
+ var err = new Error("timeout exceeded");
+ err.dojoType = "timeout";
+ dfd.errback(err);
+ //Cancel the request so the io module can do appropriate cleanup.
+ dfd.cancel();
+ }
+ }
+ };
+ if(dojo.config.isDebug){
+ func.call(this);
+ }else{
+ try{
+ func.call(this);
+ }catch(e){
+ dfd.errback(e);
+ }
+ }
+ }
+ }
+
+ if(!_inFlight.length){
+ clearInterval(_inFlightIntvl);
+ _inFlightIntvl = null;
+ return;
+ }
+
+ }
+
+ dojo._ioCancelAll = function(){
+ //summary: Cancels all pending IO requests, regardless of IO type
+ //(xhr, script, iframe).
+ try{
+ _d.forEach(_inFlight, function(i){
+ try{
+ i.dfd.cancel();
+ }catch(e){/*squelch*/}
+ });
+ }catch(e){/*squelch*/}
+ }
+
+ //Automatically call cancel all io calls on unload
+ //in IE for trac issue #2357.
+ if(_d.isIE){
+ _d.addOnWindowUnload(_d._ioCancelAll);
+ }
+
+ _d._ioWatch = function(/*Deferred*/dfd,
+ /*Function*/validCheck,
+ /*Function*/ioCheck,
+ /*Function*/resHandle){
+ //summary: watches the io request represented by dfd to see if it completes.
+ //dfd:
+ // The Deferred object to watch.
+ //validCheck:
+ // Function used to check if the IO request is still valid. Gets the dfd
+ // object as its only argument.
+ //ioCheck:
+ // Function used to check if basic IO call worked. Gets the dfd
+ // object as its only argument.
+ //resHandle:
+ // Function used to process response. Gets the dfd
+ // object as its only argument.
+ if(dfd.ioArgs.args.timeout){
+ dfd.startTime = (new Date()).getTime();
+ }
+ _inFlight.push({dfd: dfd, validCheck: validCheck, ioCheck: ioCheck, resHandle: resHandle});
+ if(!_inFlightIntvl){
+ _inFlightIntvl = setInterval(_watchInFlight, 50);
+ }
+ _watchInFlight(); // handle sync requests
+ }
+
+ var _defaultContentType = "application/x-www-form-urlencoded";
+
+ var _validCheck = function(/*Deferred*/dfd){
+ return dfd.ioArgs.xhr.readyState; //boolean
+ }
+ var _ioCheck = function(/*Deferred*/dfd){
+ return 4 == dfd.ioArgs.xhr.readyState; //boolean
+ }
+ var _resHandle = function(/*Deferred*/dfd){
+ var xhr = dfd.ioArgs.xhr;
+ if(_d._isDocumentOk(xhr)){
+ dfd.callback(dfd);
+ }else{
+ var err = new Error("Unable to load " + dfd.ioArgs.url + " status:" + xhr.status);
+ err.status = xhr.status;
+ err.responseText = xhr.responseText;
+ dfd.errback(err);
+ }
+ }
+
+ dojo._ioAddQueryToUrl = function(/*dojo.__IoCallbackArgs*/ioArgs){
+ //summary: Adds query params discovered by the io deferred construction to the URL.
+ //Only use this for operations which are fundamentally GET-type operations.
+ if(ioArgs.query.length){
+ ioArgs.url += (ioArgs.url.indexOf("?") == -1 ? "?" : "&") + ioArgs.query;
+ ioArgs.query = null;
+ }
+ }
+
+ /*=====
+ dojo.declare("dojo.__XhrArgs", dojo.__IoArgs, {
+ constructor: function(){
+ // summary:
+ // In addition to the properties listed for the dojo._IoArgs type,
+ // the following properties are allowed for dojo.xhr* methods.
+ // handleAs: String?
+ // Acceptable values are: text (default), json, json-comment-optional,
+ // json-comment-filtered, javascript, xml
+ // sync: Boolean?
+ // false is default. Indicates whether the request should
+ // be a synchronous (blocking) request.
+ // headers: Object?
+ // Additional HTTP headers to send in the request.
+ this.handleAs = handleAs;
+ this.sync = sync;
+ this.headers = headers;
+ }
+ });
+ =====*/
+
+ dojo.xhr = function(/*String*/ method, /*dojo.__XhrArgs*/ args, /*Boolean?*/ hasBody){
+ // summary:
+ // Sends an HTTP request with the given method.
+ // description:
+ // Sends an HTTP request with the given method.
+ // See also dojo.xhrGet(), xhrPost(), xhrPut() and dojo.xhrDelete() for shortcuts
+ // for those HTTP methods. There are also methods for "raw" PUT and POST methods
+ // via dojo.rawXhrPut() and dojo.rawXhrPost() respectively.
+ // method:
+ // HTTP method to be used, such as GET, POST, PUT, DELETE. Should be uppercase.
+ // hasBody:
+ // If the request has an HTTP body, then pass true for hasBody.
+
+ //Make the Deferred object for this xhr request.
+ var dfd = _d._ioSetArgs(args, _deferredCancel, _deferredOk, _deferError);
+
+ //Pass the args to _xhrObj, to allow xhr iframe proxy interceptions.
+ dfd.ioArgs.xhr = _d._xhrObj(dfd.ioArgs.args);
+
+ if(hasBody){
+ if("postData" in args){
+ dfd.ioArgs.query = args.postData;
+ }else if("putData" in args){
+ dfd.ioArgs.query = args.putData;
+ }
+ }else{
+ _d._ioAddQueryToUrl(dfd.ioArgs);
+ }
+
+ // IE 6 is a steaming pile. It won't let you call apply() on the native function (xhr.open).
+ // workaround for IE6's apply() "issues"
+ var ioArgs = dfd.ioArgs;
+ var xhr = ioArgs.xhr;
+ xhr.open(method, ioArgs.url, args.sync !== true, args.user || undefined, args.password || undefined);
+ if(args.headers){
+ for(var hdr in args.headers){
+ if(hdr.toLowerCase() === "content-type" && !args.contentType){
+ args.contentType = args.headers[hdr];
+ }else{
+ xhr.setRequestHeader(hdr, args.headers[hdr]);
+ }
+ }
+ }
+ // FIXME: is this appropriate for all content types?
+ xhr.setRequestHeader("Content-Type", args.contentType || _defaultContentType);
+ if(!args.headers || !args.headers["X-Requested-With"]){
+ xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
+ }
+ // FIXME: set other headers here!
+ if(dojo.config.isDebug){
+ xhr.send(ioArgs.query);
+ }else{
+ try{
+ xhr.send(ioArgs.query);
+ }catch(e){
+ dfd.ioArgs.error = e;
+ dfd.cancel();
+ }
+ }
+ _d._ioWatch(dfd, _validCheck, _ioCheck, _resHandle);
+ xhr = null;
+ return dfd; // dojo.Deferred
+ }
+
+ dojo.xhrGet = function(/*dojo.__XhrArgs*/ args){
+ // summary:
+ // Sends an HTTP GET request to the server.
+ return _d.xhr("GET", args); // dojo.Deferred
+ }
+
+ dojo.rawXhrPost = dojo.xhrPost = function(/*dojo.__XhrArgs*/ args){
+ // summary:
+ // Sends an HTTP POST request to the server. In addtion to the properties
+ // listed for the dojo.__XhrArgs type, the following property is allowed:
+ // postData:
+ // String. Send raw data in the body of the POST request.
+ return _d.xhr("POST", args, true); // dojo.Deferred
+ }
+
+ dojo.rawXhrPut = dojo.xhrPut = function(/*dojo.__XhrArgs*/ args){
+ // summary:
+ // Sends an HTTP PUT request to the server. In addtion to the properties
+ // listed for the dojo.__XhrArgs type, the following property is allowed:
+ // putData:
+ // String. Send raw data in the body of the PUT request.
+ return _d.xhr("PUT", args, true); // dojo.Deferred
+ }
+
+ dojo.xhrDelete = function(/*dojo.__XhrArgs*/ args){
+ // summary:
+ // Sends an HTTP DELETE request to the server.
+ return _d.xhr("DELETE", args); //dojo.Deferred
+ }
+
+ /*
+ dojo.wrapForm = function(formNode){
+ //summary:
+ // A replacement for FormBind, but not implemented yet.
+
+ // FIXME: need to think harder about what extensions to this we might
+ // want. What should we allow folks to do w/ this? What events to
+ // set/send?
+ throw new Error("dojo.wrapForm not yet implemented");
+ }
+ */
+})();
+
+}
+
+if(!dojo._hasResource["dojo._base.fx"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo._base.fx"] = true;
+dojo.provide("dojo._base.fx");
+
+
+
+
+
+
+/*
+ Animation losely package based on Dan Pupius' work, contributed under CLA:
+ http://pupius.co.uk/js/Toolkit.Drawing.js
+*/
+(function(){
+
+ var d = dojo;
+
+ dojo._Line = function(/*int*/ start, /*int*/ end){
+ // summary:
+ // dojo._Line is the object used to generate values from a start value
+ // to an end value
+ // start: int
+ // Beginning value for range
+ // end: int
+ // Ending value for range
+ this.start = start;
+ this.end = end;
+ this.getValue = function(/*float*/ n){
+ // summary: returns the point on the line
+ // n: a floating point number greater than 0 and less than 1
+ return ((this.end - this.start) * n) + this.start; // Decimal
+ }
+ }
+
+ d.declare("dojo._Animation", null, {
+ // summary
+ // A generic animation class that fires callbacks into its handlers
+ // object at various states. Nearly all dojo animation functions
+ // return an instance of this method, usually without calling the
+ // .play() method beforehand. Therefore, you will likely need to
+ // call .play() on instances of dojo._Animation when one is
+ // returned.
+ constructor: function(/*Object*/ args){
+ d.mixin(this, args);
+ if(d.isArray(this.curve)){
+ /* curve: Array
+ pId: a */
+ this.curve = new d._Line(this.curve[0], this.curve[1]);
+ }
+ },
+
+ // duration: Integer
+ // The time in milliseonds the animation will take to run
+ duration: 350,
+
+ /*=====
+ // curve: dojo._Line||Array
+ // A two element array of start and end values, or a dojo._Line instance to be
+ // used in the Animation.
+ curve: null,
+
+ // easing: Function
+ // A Function to adjust the acceleration (or deceleration) of the progress
+ // across a dojo._Line
+ easing: null,
+ =====*/
+
+ // repeat: Integer
+ // The number of times to loop the animation
+ repeat: 0,
+
+ // rate: Integer
+ // the time in milliseconds to wait before advancing to next frame
+ // (used as a fps timer: rate/1000 = fps)
+ rate: 10 /* 100 fps */,
+
+ /*=====
+ // delay: Integer
+ // The time in milliseconds to wait before starting animation after it has been .play()'ed
+ delay: null,
+
+ // events
+ //
+ // beforeBegin: Event
+ // Synthetic event fired before a dojo._Animation begins playing (synchronous)
+ beforeBegin: null,
+
+ // onBegin: Event
+ // Synthetic event fired as a dojo._Animation begins playing (useful?)
+ onBegin: null,
+
+ // onAnimate: Event
+ // Synthetic event fired at each interval of a dojo._Animation
+ onAnimate: null,
+
+ // onEnd: Event
+ // Synthetic event fired after the final frame of a dojo._Animation
+ onEnd: null,
+
+ // onPlay: Event
+ // Synthetic event fired any time a dojo._Animation is play()'ed
+ onPlay: null,
+
+ // onPause: Event
+ // Synthetic event fired when a dojo._Animation is paused
+ onPause: null,
+
+ // onStop: Event
+ // Synthetic event fires when a dojo._Animation is stopped
+ onStop: null,
+
+ =====*/
+
+ _percent: 0,
+ _startRepeatCount: 0,
+
+ _fire: function(/*Event*/ evt, /*Array?*/ args){
+ // summary:
+ // Convenience function. Fire event "evt" and pass it the
+ // arguments specified in "args".
+ // evt:
+ // The event to fire.
+ // args:
+ // The arguments to pass to the event.
+ if(this[evt]){
+ if(dojo.config.isDebug){
+ this[evt].apply(this, args||[]);
+ }else{
+ try{
+ this[evt].apply(this, args||[]);
+ }catch(e){
+ // squelch and log because we shouldn't allow exceptions in
+ // synthetic event handlers to cause the internal timer to run
+ // amuck, potentially pegging the CPU. I'm not a fan of this
+ // squelch, but hopefully logging will make it clear what's
+ // going on
+ console.error("exception in animation handler for:", evt);
+ console.error(e);
+ }
+ }
+ }
+ return this; // dojo._Animation
+ },
+
+ play: function(/*int?*/ delay, /*Boolean?*/ gotoStart){
+ // summary:
+ // Start the animation.
+ // delay:
+ // How many milliseconds to delay before starting.
+ // gotoStart:
+ // If true, starts the animation from the beginning; otherwise,
+ // starts it from its current position.
+ var _t = this;
+ if(gotoStart){
+ _t._stopTimer();
+ _t._active = _t._paused = false;
+ _t._percent = 0;
+ }else if(_t._active && !_t._paused){
+ return _t; // dojo._Animation
+ }
+
+ _t._fire("beforeBegin");
+
+ var de = delay||_t.delay;
+ var _p = dojo.hitch(_t, "_play", gotoStart);
+ if(de > 0){
+ setTimeout(_p, de);
+ return _t; // dojo._Animation
+ }
+ _p();
+ return _t;
+ },
+
+ _play: function(gotoStart){
+ var _t = this;
+ _t._startTime = new Date().valueOf();
+ if(_t._paused){
+ _t._startTime -= _t.duration * _t._percent;
+ }
+ _t._endTime = _t._startTime + _t.duration;
+
+ _t._active = true;
+ _t._paused = false;
+
+ var value = _t.curve.getValue(_t._percent);
+ if(!_t._percent){
+ if(!_t._startRepeatCount){
+ _t._startRepeatCount = _t.repeat;
+ }
+ _t._fire("onBegin", [value]);
+ }
+
+ _t._fire("onPlay", [value]);
+
+ _t._cycle();
+ return _t; // dojo._Animation
+ },
+
+ pause: function(){
+ // summary: Pauses a running animation.
+ this._stopTimer();
+ if(!this._active){ return this; /*dojo._Animation*/ }
+ this._paused = true;
+ this._fire("onPause", [this.curve.getValue(this._percent)]);
+ return this; // dojo._Animation
+ },
+
+ gotoPercent: function(/*Decimal*/ percent, /*Boolean?*/ andPlay){
+ // summary:
+ // Sets the progress of the animation.
+ // percent:
+ // A percentage in decimal notation (between and including 0.0 and 1.0).
+ // andPlay:
+ // If true, play the animation after setting the progress.
+ this._stopTimer();
+ this._active = this._paused = true;
+ this._percent = percent;
+ if(andPlay){ this.play(); }
+ return this; // dojo._Animation
+ },
+
+ stop: function(/*boolean?*/ gotoEnd){
+ // summary: Stops a running animation.
+ // gotoEnd: If true, the animation will end.
+ if(!this._timer){ return this; /* dojo._Animation */ }
+ this._stopTimer();
+ if(gotoEnd){
+ this._percent = 1;
+ }
+ this._fire("onStop", [this.curve.getValue(this._percent)]);
+ this._active = this._paused = false;
+ return this; // dojo._Animation
+ },
+
+ status: function(){
+ // summary: Returns a string token representation of the status of
+ // the animation, one of: "paused", "playing", "stopped"
+ if(this._active){
+ return this._paused ? "paused" : "playing"; // String
+ }
+ return "stopped"; // String
+ },
+
+ _cycle: function(){
+ var _t = this;
+ if(_t._active){
+ var curr = new Date().valueOf();
+ var step = (curr - _t._startTime) / (_t._endTime - _t._startTime);
+
+ if(step >= 1){
+ step = 1;
+ }
+ _t._percent = step;
+
+ // Perform easing
+ if(_t.easing){
+ step = _t.easing(step);
+ }
+
+ _t._fire("onAnimate", [_t.curve.getValue(step)]);
+
+ if(_t._percent < 1){
+ _t._startTimer();
+ }else{
+ _t._active = false;
+
+ if(_t.repeat > 0){
+ _t.repeat--;
+ _t.play(null, true);
+ }else if(_t.repeat == -1){
+ _t.play(null, true);
+ }else{
+ if(_t._startRepeatCount){
+ _t.repeat = _t._startRepeatCount;
+ _t._startRepeatCount = 0;
+ }
+ }
+ _t._percent = 0;
+ _t._fire("onEnd");
+ _t._stopTimer();
+ }
+ }
+ return _t; // dojo._Animation
+ }
+ });
+
+ var ctr = 0;
+ var _globalTimerList = [];
+ var runner = {
+ run: function(){ }
+ };
+ var timer = null;
+ dojo._Animation.prototype._startTimer = function(){
+ // this._timer = setTimeout(dojo.hitch(this, "_cycle"), this.rate);
+ if(!this._timer){
+ this._timer = d.connect(runner, "run", this, "_cycle");
+ ctr++;
+ }
+ if(!timer){
+ timer = setInterval(d.hitch(runner, "run"), this.rate);
+ }
+ };
+
+ dojo._Animation.prototype._stopTimer = function(){
+ if(this._timer){
+ d.disconnect(this._timer);
+ this._timer = null;
+ ctr--;
+ }
+ if(ctr <= 0){
+ clearInterval(timer);
+ timer = null;
+ ctr = 0;
+ }
+ };
+
+ var _makeFadeable = (d.isIE) ? function(node){
+ // only set the zoom if the "tickle" value would be the same as the
+ // default
+ var ns = node.style;
+ // don't set the width to auto if it didn't already cascade that way.
+ // We don't want to f anyones designs
+ if(!ns.width.length && d.style(node, "width") == "auto"){
+ ns.width = "auto";
+ }
+ } : function(){};
+
+ dojo._fade = function(/*Object*/ args){
+ // summary:
+ // Returns an animation that will fade the node defined by
+ // args.node from the start to end values passed (args.start
+ // args.end) (end is mandatory, start is optional)
+
+ args.node = d.byId(args.node);
+ var fArgs = d.mixin({ properties: {} }, args);
+ var props = (fArgs.properties.opacity = {});
+ props.start = !("start" in fArgs) ?
+ function(){
+ return Number(d.style(fArgs.node, "opacity"));
+ } : fArgs.start;
+ props.end = fArgs.end;
+
+ var anim = d.animateProperty(fArgs);
+ d.connect(anim, "beforeBegin", d.partial(_makeFadeable, fArgs.node));
+
+ return anim; // dojo._Animation
+ }
+
+ /*=====
+ dojo.__FadeArgs = function(node, duration, easing){
+ // node: DOMNode|String
+ // The node referenced in the animation
+ // duration: Integer?
+ // Duration of the animation in milliseconds.
+ // easing: Function?
+ // An easing function.
+ this.node = node;
+ this.duration = duration;
+ this.easing = easing;
+ }
+ =====*/
+
+ dojo.fadeIn = function(/*dojo.__FadeArgs*/ args){
+ // summary:
+ // Returns an animation that will fade node defined in 'args' from
+ // its current opacity to fully opaque.
+ return d._fade(d.mixin({ end: 1 }, args)); // dojo._Animation
+ }
+
+ dojo.fadeOut = function(/*dojo.__FadeArgs*/ args){
+ // summary:
+ // Returns an animation that will fade node defined in 'args'
+ // from its current opacity to fully transparent.
+ return d._fade(d.mixin({ end: 0 }, args)); // dojo._Animation
+ }
+
+ dojo._defaultEasing = function(/*Decimal?*/ n){
+ // summary: The default easing function for dojo._Animation(s)
+ return 0.5 + ((Math.sin((n + 1.5) * Math.PI))/2);
+ }
+
+ var PropLine = function(properties){
+ // PropLine is an internal class which is used to model the values of
+ // an a group of CSS properties across an animation lifecycle. In
+ // particular, the "getValue" function handles getting interpolated
+ // values between start and end for a particular CSS value.
+ this._properties = properties;
+ for(var p in properties){
+ var prop = properties[p];
+ if(prop.start instanceof d.Color){
+ // create a reusable temp color object to keep intermediate results
+ prop.tempColor = new d.Color();
+ }
+ }
+ this.getValue = function(r){
+ var ret = {};
+ for(var p in this._properties){
+ var prop = this._properties[p];
+ var start = prop.start;
+ if(start instanceof d.Color){
+ ret[p] = d.blendColors(start, prop.end, r, prop.tempColor).toCss();
+ }else if(!d.isArray(start)){
+ ret[p] = ((prop.end - start) * r) + start + (p != "opacity" ? prop.units||"px" : "");
+ }
+ }
+ return ret;
+ }
+ }
+
+ /*=====
+ dojo.declare("dojo.__AnimArgs", [dojo.__FadeArgs], {
+ // Properties: Object?
+ // A hash map of style properties to Objects describing the transition,
+ // such as the properties of dojo._Line with an additional 'unit' property
+ properties: {}
+
+ //TODOC: add event callbacks
+ });
+ =====*/
+
+ dojo.animateProperty = function(/*dojo.__AnimArgs*/ args){
+ // summary:
+ // Returns an animation that will transition the properties of
+ // node defined in 'args' depending how they are defined in
+ // 'args.properties'
+ //
+ // description:
+ // dojo.animateProperty is the foundation of most dojo.fx
+ // animations. It takes an object of "properties" corresponding to
+ // style properties, and animates them in parallel over a set
+ // duration.
+ //
+ // example:
+ // A simple animation that changes the width of the specified node.
+ // | dojo.animateProperty({
+ // | node: "nodeId",
+ // | properties: { width: 400 },
+ // | }).play();
+ // Dojo figures out the start value for the width and converts the
+ // integer specified for the width to the more expressive but
+ // verbose form `{ width: { end: '400', units: 'px' } }` which you
+ // can also specify directly
+ //
+ // example:
+ // Animate width, height, and padding over 2 seconds... the
+ // pedantic way:
+ // | dojo.animateProperty({ node: node, duration:2000,
+ // | properties: {
+ // | width: { start: '200', end: '400', unit:"px" },
+ // | height: { start:'200', end: '400', unit:"px" },
+ // | paddingTop: { start:'5', end:'50', unit:"px" }
+ // | }
+ // | }).play();
+ // Note 'paddingTop' is used over 'padding-top'. Multi-name CSS properties
+ // are written using "mixed case", as the hyphen is illegal as an object key.
+ //
+ // example:
+ // Plug in a different easing function and register a callback for
+ // when the animation ends. Easing functions accept values between
+ // zero and one and return a value on that basis. In this case, an
+ // exponential-in curve.
+ // | dojo.animateProperty({
+ // | node: "nodeId",
+ // | // dojo figures out the start value
+ // | properties: { width: { end: 400 } },
+ // | easing: function(n){
+ // | return (n==0) ? 0 : Math.pow(2, 10 * (n - 1));
+ // | },
+ // | onEnd: function(){
+ // | // called when the animation finishes
+ // | }
+ // | }).play(500); // delay playing half a second
+ //
+ // example:
+ // Like all `dojo._Animation`s, animateProperty returns a handle to the
+ // Animation instance, which fires the events common to Dojo FX. Use `dojo.connect`
+ // to access these events outside of the Animation definiton:
+ // | var anim = dojo.animateProperty({
+ // | node:"someId",
+ // | properties:{
+ // | width:400, height:500
+ // | }
+ // | });
+ // | dojo.connect(anim,"onEnd", function(){
+ // |
+ // | });
+ // | // play the animation now:
+ // | anim.play();
+
+ args.node = d.byId(args.node);
+ if(!args.easing){ args.easing = d._defaultEasing; }
+
+ var anim = new d._Animation(args);
+ d.connect(anim, "beforeBegin", anim, function(){
+ var pm = {};
+ for(var p in this.properties){
+ // Make shallow copy of properties into pm because we overwrite
+ // some values below. In particular if start/end are functions
+ // we don't want to overwrite them or the functions won't be
+ // called if the animation is reused.
+ if(p == "width" || p == "height"){
+ this.node.display = "block";
+ }
+ var prop = this.properties[p];
+ prop = pm[p] = d.mixin({}, (d.isObject(prop) ? prop: { end: prop }));
+
+ if(d.isFunction(prop.start)){
+ prop.start = prop.start();
+ }
+ if(d.isFunction(prop.end)){
+ prop.end = prop.end();
+ }
+ var isColor = (p.toLowerCase().indexOf("color") >= 0);
+ function getStyle(node, p){
+ // dojo.style(node, "height") can return "auto" or "" on IE; this is more reliable:
+ var v = ({height: node.offsetHeight, width: node.offsetWidth})[p];
+ if(v !== undefined){ return v; }
+ v = d.style(node, p);
+ return (p=="opacity") ? Number(v) : (isColor ? v : parseFloat(v));
+ }
+ if(!("end" in prop)){
+ prop.end = getStyle(this.node, p);
+ }else if(!("start" in prop)){
+ prop.start = getStyle(this.node, p);
+ }
+
+ if(isColor){
+ prop.start = new d.Color(prop.start);
+ prop.end = new d.Color(prop.end);
+ }else{
+ prop.start = (p == "opacity") ? Number(prop.start) : parseFloat(prop.start);
+ }
+ }
+ this.curve = new PropLine(pm);
+ });
+ d.connect(anim, "onAnimate", d.hitch(d, "style", anim.node));
+ return anim; // dojo._Animation
+ }
+
+ dojo.anim = function( /*DOMNode|String*/ node,
+ /*Object*/ properties,
+ /*Integer?*/ duration,
+ /*Function?*/ easing,
+ /*Function?*/ onEnd,
+ /*Integer?*/ delay){
+ // summary:
+ // A simpler interface to `dojo.animateProperty()`, also returns
+ // an instance of `dojo._Animation` but begins the animation
+ // immediately, unlike nearly every other Dojo animation API.
+ // description:
+ // `dojo.anim` is a simpler (but somewhat less powerful) version
+ // of `dojo.animateProperty`. It uses defaults for many basic properties
+ // and allows for positional parameters to be used in place of the
+ // packed "property bag" which is used for other Dojo animation
+ // methods.
+ //
+ // The `dojo._Animation` object returned from `dojo.anim` will be
+ // already playing when it is returned from this function, so
+ // calling play() on it again is (usually) a no-op.
+ // node:
+ // a DOM node or the id of a node to animate CSS properties on
+ // duration:
+ // The number of milliseconds over which the animation
+ // should run. Defaults to the global animation default duration
+ // (350ms).
+ // easing:
+ // An easing function over which to calculate acceleration
+ // and deceleration of the animation through its duration.
+ // A default easing algorithm is provided, but you may
+ // plug in any you wish. A large selection of easing algorithms
+ // are available in `dojo.fx.easing`.
+ // onEnd:
+ // A function to be called when the animation finishes
+ // running.
+ // delay:
+ // The number of milliseconds to delay beginning the
+ // animation by. The default is 0.
+ // example:
+ // Fade out a node
+ // | dojo.anim("id", { opacity: 0 });
+ // example:
+ // Fade out a node over a full second
+ // | dojo.anim("id", { opacity: 0 }, 1000);
+ return d.animateProperty({
+ node: node,
+ duration: duration||d._Animation.prototype.duration,
+ properties: properties,
+ easing: easing,
+ onEnd: onEnd
+ }).play(delay||0);
+ }
+})();
+
+}
+
+if(!dojo._hasResource["dojo._base.browser"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo._base.browser"] = true;
+dojo.provide("dojo._base.browser");
+
+
+
+
+
+
+
+
+
+//Need this to be the last code segment in base, so do not place any
+//dojo.requireIf calls in this file. Otherwise, due to how the build system
+//puts all requireIf dependencies after the current file, the require calls
+//could be called before all of base is defined.
+if(dojo.config.require){
+ dojo.forEach(dojo.config.require, "dojo['require'](item);");
+}
+
+}
+
+ //INSERT dojo.i18n._preloadLocalizations HERE
+
+ if(dojo.config.afterOnLoad && dojo.isBrowser){
+ //Dojo is being added to the page after page load, so just trigger
+ //the init sequence after a timeout. Using a timeout so the rest of this
+ //script gets evaluated properly. This work needs to happen after the
+ //dojo.config.require work done in dojo._base.
+ window.setTimeout(dojo._fakeLoadInit, 1000);
+ }
+
+})();
+
diff --git a/testing/talos/talos/tests/dromaeo/lib/ext-base.js b/testing/talos/talos/tests/dromaeo/lib/ext-base.js
new file mode 100644
index 0000000000..b68f63d6f5
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/lib/ext-base.js
@@ -0,0 +1,10 @@
+/*
+ * Ext JS Library 2.2
+ * Copyright(c) 2006-2008, Ext JS, LLC.
+ * licensing@extjs.com
+ *
+ * http://extjs.com/license
+ */
+
+Ext={version:"2.2"};window["undefined"]=window["undefined"];Ext.apply=function(C,D,B){if(B){Ext.apply(C,B)}if(C&&D&&typeof D=="object"){for(var A in D){C[A]=D[A]}}return C};(function(){var idSeed=0;var ua=navigator.userAgent.toLowerCase();var isStrict=document.compatMode=="CSS1Compat",isOpera=ua.indexOf("opera")>-1,isSafari=(/webkit|khtml/).test(ua),isSafari3=isSafari&&ua.indexOf("webkit/5")!=-1,isIE=!isOpera&&ua.indexOf("msie")>-1,isIE7=!isOpera&&ua.indexOf("msie 7")>-1,isGecko=!isSafari&&ua.indexOf("gecko")>-1,isGecko3=!isSafari&&ua.indexOf("rv:1.9")>-1,isBorderBox=isIE&&!isStrict,isWindows=(ua.indexOf("windows")!=-1||ua.indexOf("win32")!=-1),isMac=(ua.indexOf("macintosh")!=-1||ua.indexOf("mac os x")!=-1),isAir=(ua.indexOf("adobeair")!=-1),isLinux=(ua.indexOf("linux")!=-1),isSecure=window.location.href.toLowerCase().indexOf("https")===0;if(isIE&&!isIE7){try{document.execCommand("BackgroundImageCache",false,true)}catch(e){}}Ext.apply(Ext,{isStrict:isStrict,isSecure:isSecure,isReady:false,enableGarbageCollector:true,enableListenerCollection:false,SSL_SECURE_URL:"javascript:false",BLANK_IMAGE_URL:"http:/"+"/extjs.com/s.gif",emptyFn:function(){},applyIf:function(o,c){if(o&&c){for(var p in c){if(typeof o[p]=="undefined"){o[p]=c[p]}}}return o},addBehaviors:function(o){if(!Ext.isReady){Ext.onReady(function(){Ext.addBehaviors(o)});return }var cache={};for(var b in o){var parts=b.split("@");if(parts[1]){var s=parts[0];if(!cache[s]){cache[s]=Ext.select(s)}cache[s].on(parts[1],o[b])}}cache=null},id:function(el,prefix){prefix=prefix||"ext-gen";el=Ext.getDom(el);var id=prefix+(++idSeed);return el?(el.id?el.id:(el.id=id)):id},extend:function(){var io=function(o){for(var m in o){this[m]=o[m]}};var oc=Object.prototype.constructor;return function(sb,sp,overrides){if(typeof sp=="object"){overrides=sp;sp=sb;sb=overrides.constructor!=oc?overrides.constructor:function(){sp.apply(this,arguments)}}var F=function(){},sbp,spp=sp.prototype;F.prototype=spp;sbp=sb.prototype=new F();sbp.constructor=sb;sb.superclass=spp;if(spp.constructor==oc){spp.constructor=sp}sb.override=function(o){Ext.override(sb,o)};sbp.override=io;Ext.override(sb,overrides);sb.extend=function(o){Ext.extend(sb,o)};return sb}}(),override:function(origclass,overrides){if(overrides){var p=origclass.prototype;for(var method in overrides){p[method]=overrides[method]}}},namespace:function(){var a=arguments,o=null,i,j,d,rt;for(i=0;i<a.length;++i){d=a[i].split(".");rt=d[0];eval("if (typeof "+rt+" == \"undefined\"){"+rt+" = {};} o = "+rt+";");for(j=1;j<d.length;++j){o[d[j]]=o[d[j]]||{};o=o[d[j]]}}},urlEncode:function(o){if(!o){return""}var buf=[];for(var key in o){var ov=o[key],k=encodeURIComponent(key);var type=typeof ov;if(type=="undefined"){buf.push(k,"=&")}else{if(type!="function"&&type!="object"){buf.push(k,"=",encodeURIComponent(ov),"&")}else{if(Ext.isArray(ov)){if(ov.length){for(var i=0,len=ov.length;i<len;i++){buf.push(k,"=",encodeURIComponent(ov[i]===undefined?"":ov[i]),"&")}}else{buf.push(k,"=&")}}}}}buf.pop();return buf.join("")},urlDecode:function(string,overwrite){if(!string||!string.length){return{}}var obj={};var pairs=string.split("&");var pair,name,value;for(var i=0,len=pairs.length;i<len;i++){pair=pairs[i].split("=");name=decodeURIComponent(pair[0]);value=decodeURIComponent(pair[1]);if(overwrite!==true){if(typeof obj[name]=="undefined"){obj[name]=value}else{if(typeof obj[name]=="string"){obj[name]=[obj[name]];obj[name].push(value)}else{obj[name].push(value)}}}else{obj[name]=value}}return obj},each:function(array,fn,scope){if(typeof array.length=="undefined"||typeof array=="string"){array=[array]}for(var i=0,len=array.length;i<len;i++){if(fn.call(scope||array[i],array[i],i,array)===false){return i}}},combine:function(){var as=arguments,l=as.length,r=[];for(var i=0;i<l;i++){var a=as[i];if(Ext.isArray(a)){r=r.concat(a)}else{if(a.length!==undefined&&!a.substr){r=r.concat(Array.prototype.slice.call(a,0))}else{r.push(a)}}}return r},escapeRe:function(s){return s.replace(/([.*+?^${}()|[\]\/\\])/g,"\\$1")},callback:function(cb,scope,args,delay){if(typeof cb=="function"){if(delay){cb.defer(delay,scope,args||[])}else{cb.apply(scope,args||[])}}},getDom:function(el){if(!el||!document){return null}return el.dom?el.dom:(typeof el=="string"?document.getElementById(el):el)},getDoc:function(){return Ext.get(document)},getBody:function(){return Ext.get(document.body||document.documentElement)},getCmp:function(id){return Ext.ComponentMgr.get(id)},num:function(v,defaultValue){if(typeof v!="number"){return defaultValue}return v},destroy:function(){for(var i=0,a=arguments,len=a.length;i<len;i++){var as=a[i];if(as){if(typeof as.destroy=="function"){as.destroy()}else{if(as.dom){as.removeAllListeners();as.remove()}}}}},removeNode:isIE?function(){var d;return function(n){if(n&&n.tagName!="BODY"){d=d||document.createElement("div");d.appendChild(n);d.innerHTML=""}}}():function(n){if(n&&n.parentNode&&n.tagName!="BODY"){n.parentNode.removeChild(n)}},type:function(o){if(o===undefined||o===null){return false}if(o.htmlElement){return"element"}var t=typeof o;if(t=="object"&&o.nodeName){switch(o.nodeType){case 1:return"element";case 3:return(/\S/).test(o.nodeValue)?"textnode":"whitespace"}}if(t=="object"||t=="function"){switch(o.constructor){case Array:return"array";case RegExp:return"regexp"}if(typeof o.length=="number"&&typeof o.item=="function"){return"nodelist"}}return t},isEmpty:function(v,allowBlank){return v===null||v===undefined||(!allowBlank?v==="":false)},value:function(v,defaultValue,allowBlank){return Ext.isEmpty(v,allowBlank)?defaultValue:v},isArray:function(v){return v&&typeof v.length=="number"&&typeof v.splice=="function"},isDate:function(v){return v&&typeof v.getFullYear=="function"},isOpera:isOpera,isSafari:isSafari,isSafari3:isSafari3,isSafari2:isSafari&&!isSafari3,isIE:isIE,isIE6:isIE&&!isIE7,isIE7:isIE7,isGecko:isGecko,isGecko2:isGecko&&!isGecko3,isGecko3:isGecko3,isBorderBox:isBorderBox,isLinux:isLinux,isWindows:isWindows,isMac:isMac,isAir:isAir,useShims:((isIE&&!isIE7)||(isMac&&isGecko&&!isGecko3))});Ext.ns=Ext.namespace})();Ext.ns("Ext","Ext.util","Ext.grid","Ext.dd","Ext.tree","Ext.data","Ext.form","Ext.menu","Ext.state","Ext.lib","Ext.layout","Ext.app","Ext.ux");Ext.apply(Function.prototype,{createCallback:function(){var A=arguments;var B=this;return function(){return B.apply(window,A)}},createDelegate:function(C,B,A){var D=this;return function(){var F=B||arguments;if(A===true){F=Array.prototype.slice.call(arguments,0);F=F.concat(B)}else{if(typeof A=="number"){F=Array.prototype.slice.call(arguments,0);var E=[A,0].concat(B);Array.prototype.splice.apply(F,E)}}return D.apply(C||window,F)}},defer:function(C,E,B,A){var D=this.createDelegate(E,B,A);if(C){return setTimeout(D,C)}D();return 0},createSequence:function(B,A){if(typeof B!="function"){return this}var C=this;return function(){var D=C.apply(this||window,arguments);B.apply(A||this||window,arguments);return D}},createInterceptor:function(B,A){if(typeof B!="function"){return this}var C=this;return function(){B.target=this;B.method=C;if(B.apply(A||this||window,arguments)===false){return }return C.apply(this||window,arguments)}}});Ext.applyIf(String,{escape:function(A){return A.replace(/('|\\)/g,"\\$1")},leftPad:function(D,B,C){var A=new String(D);if(!C){C=" "}while(A.length<B){A=C+A}return A.toString()},format:function(B){var A=Array.prototype.slice.call(arguments,1);return B.replace(/\{(\d+)\}/g,function(C,D){return A[D]})}});String.prototype.toggle=function(B,A){return this==B?A:B};String.prototype.trim=function(){var A=/^\s+|\s+$/g;return function(){return this.replace(A,"")}}();Ext.applyIf(Number.prototype,{constrain:function(B,A){return Math.min(Math.max(this,B),A)}});Ext.applyIf(Array.prototype,{indexOf:function(C){for(var B=0,A=this.length;B<A;B++){if(this[B]==C){return B}}return -1},remove:function(B){var A=this.indexOf(B);if(A!=-1){this.splice(A,1)}return this}});Date.prototype.getElapsed=function(A){return Math.abs((A||new Date()).getTime()-this.getTime())};
+(function(){var B;Ext.lib.Dom={getViewWidth:function(E){return E?this.getDocumentWidth():this.getViewportWidth()},getViewHeight:function(E){return E?this.getDocumentHeight():this.getViewportHeight()},getDocumentHeight:function(){var E=(document.compatMode!="CSS1Compat")?document.body.scrollHeight:document.documentElement.scrollHeight;return Math.max(E,this.getViewportHeight())},getDocumentWidth:function(){var E=(document.compatMode!="CSS1Compat")?document.body.scrollWidth:document.documentElement.scrollWidth;return Math.max(E,this.getViewportWidth())},getViewportHeight:function(){if(Ext.isIE){return Ext.isStrict?document.documentElement.clientHeight:document.body.clientHeight}else{return self.innerHeight}},getViewportWidth:function(){if(Ext.isIE){return Ext.isStrict?document.documentElement.clientWidth:document.body.clientWidth}else{return self.innerWidth}},isAncestor:function(F,G){F=Ext.getDom(F);G=Ext.getDom(G);if(!F||!G){return false}if(F.contains&&!Ext.isSafari){return F.contains(G)}else{if(F.compareDocumentPosition){return !!(F.compareDocumentPosition(G)&16)}else{var E=G.parentNode;while(E){if(E==F){return true}else{if(!E.tagName||E.tagName.toUpperCase()=="HTML"){return false}}E=E.parentNode}return false}}},getRegion:function(E){return Ext.lib.Region.getRegion(E)},getY:function(E){return this.getXY(E)[1]},getX:function(E){return this.getXY(E)[0]},getXY:function(G){var F,K,M,N,J=(document.body||document.documentElement);G=Ext.getDom(G);if(G==J){return[0,0]}if(G.getBoundingClientRect){M=G.getBoundingClientRect();N=C(document).getScroll();return[M.left+N.left,M.top+N.top]}var O=0,L=0;F=G;var E=C(G).getStyle("position")=="absolute";while(F){O+=F.offsetLeft;L+=F.offsetTop;if(!E&&C(F).getStyle("position")=="absolute"){E=true}if(Ext.isGecko){K=C(F);var P=parseInt(K.getStyle("borderTopWidth"),10)||0;var H=parseInt(K.getStyle("borderLeftWidth"),10)||0;O+=H;L+=P;if(F!=G&&K.getStyle("overflow")!="visible"){O+=H;L+=P}}F=F.offsetParent}if(Ext.isSafari&&E){O-=J.offsetLeft;L-=J.offsetTop}if(Ext.isGecko&&!E){var I=C(J);O+=parseInt(I.getStyle("borderLeftWidth"),10)||0;L+=parseInt(I.getStyle("borderTopWidth"),10)||0}F=G.parentNode;while(F&&F!=J){if(!Ext.isOpera||(F.tagName!="TR"&&C(F).getStyle("display")!="inline")){O-=F.scrollLeft;L-=F.scrollTop}F=F.parentNode}return[O,L]},setXY:function(E,F){E=Ext.fly(E,"_setXY");E.position();var G=E.translatePoints(F);if(F[0]!==false){E.dom.style.left=G.left+"px"}if(F[1]!==false){E.dom.style.top=G.top+"px"}},setX:function(F,E){this.setXY(F,[E,false])},setY:function(E,F){this.setXY(E,[false,F])}};Ext.lib.Event=function(){var F=false;var G=[];var K=[];var I=0;var H=[];var E=0;var J=null;return{POLL_RETRYS:200,POLL_INTERVAL:20,EL:0,TYPE:1,FN:2,WFN:3,OBJ:3,ADJ_SCOPE:4,_interval:null,startInterval:function(){if(!this._interval){var L=this;var M=function(){L._tryPreloadAttach()};this._interval=setInterval(M,this.POLL_INTERVAL)}},onAvailable:function(N,L,O,M){H.push({id:N,fn:L,obj:O,override:M,checkReady:false});I=this.POLL_RETRYS;this.startInterval()},addListener:function(Q,M,P){Q=Ext.getDom(Q);if(!Q||!P){return false}if("unload"==M){K[K.length]=[Q,M,P];return true}var O=function(R){return typeof Ext!="undefined"?P(Ext.lib.Event.getEvent(R)):false};var L=[Q,M,P,O];var N=G.length;G[N]=L;this.doAdd(Q,M,O,false);return true},removeListener:function(S,O,R){var Q,N;S=Ext.getDom(S);if(!R){return this.purgeElement(S,false,O)}if("unload"==O){for(Q=0,N=K.length;Q<N;Q++){var M=K[Q];if(M&&M[0]==S&&M[1]==O&&M[2]==R){K.splice(Q,1);return true}}return false}var L=null;var P=arguments[3];if("undefined"==typeof P){P=this._getCacheIndex(S,O,R)}if(P>=0){L=G[P]}if(!S||!L){return false}this.doRemove(S,O,L[this.WFN],false);delete G[P][this.WFN];delete G[P][this.FN];G.splice(P,1);return true},getTarget:function(N,M){N=N.browserEvent||N;var L=N.target||N.srcElement;return this.resolveTextNode(L)},resolveTextNode:function(L){if(Ext.isSafari&&L&&3==L.nodeType){return L.parentNode}else{return L}},getPageX:function(M){M=M.browserEvent||M;var L=M.pageX;if(!L&&0!==L){L=M.clientX||0;if(Ext.isIE){L+=this.getScroll()[1]}}return L},getPageY:function(L){L=L.browserEvent||L;var M=L.pageY;if(!M&&0!==M){M=L.clientY||0;if(Ext.isIE){M+=this.getScroll()[0]}}return M},getXY:function(L){L=L.browserEvent||L;return[this.getPageX(L),this.getPageY(L)]},getRelatedTarget:function(M){M=M.browserEvent||M;var L=M.relatedTarget;if(!L){if(M.type=="mouseout"){L=M.toElement}else{if(M.type=="mouseover"){L=M.fromElement}}}return this.resolveTextNode(L)},getTime:function(N){N=N.browserEvent||N;if(!N.time){var M=new Date().getTime();try{N.time=M}catch(L){this.lastError=L;return M}}return N.time},stopEvent:function(L){this.stopPropagation(L);this.preventDefault(L)},stopPropagation:function(L){L=L.browserEvent||L;if(L.stopPropagation){L.stopPropagation()}else{L.cancelBubble=true}},preventDefault:function(L){L=L.browserEvent||L;if(L.preventDefault){L.preventDefault()}else{L.returnValue=false}},getEvent:function(M){var L=M||window.event;if(!L){var N=this.getEvent.caller;while(N){L=N.arguments[0];if(L&&Event==L.constructor){break}N=N.caller}}return L},getCharCode:function(L){L=L.browserEvent||L;return L.charCode||L.keyCode||0},_getCacheIndex:function(Q,N,P){for(var O=0,M=G.length;O<M;++O){var L=G[O];if(L&&L[this.FN]==P&&L[this.EL]==Q&&L[this.TYPE]==N){return O}}return -1},elCache:{},getEl:function(L){return document.getElementById(L)},clearCache:function(){},_load:function(M){F=true;var L=Ext.lib.Event;if(Ext.isIE){L.doRemove(window,"load",L._load)}},_tryPreloadAttach:function(){if(this.locked){return false}this.locked=true;var R=!F;if(!R){R=(I>0)}var Q=[];for(var M=0,L=H.length;M<L;++M){var P=H[M];if(P){var O=this.getEl(P.id);if(O){if(!P.checkReady||F||O.nextSibling||(document&&document.body)){var N=O;if(P.override){if(P.override===true){N=P.obj}else{N=P.override}}P.fn.call(N,P.obj);H[M]=null}}else{Q.push(P)}}}I=(Q.length===0)?0:I-1;if(R){this.startInterval()}else{clearInterval(this._interval);this._interval=null}this.locked=false;return true},purgeElement:function(P,Q,N){var R=this.getListeners(P,N);if(R){for(var O=0,L=R.length;O<L;++O){var M=R[O];this.removeListener(P,M.type,M.fn)}}if(Q&&P&&P.childNodes){for(O=0,L=P.childNodes.length;O<L;++O){this.purgeElement(P.childNodes[O],Q,N)}}},getListeners:function(M,R){var P=[],L;if(!R){L=[G,K]}else{if(R=="unload"){L=[K]}else{L=[G]}}for(var O=0;O<L.length;++O){var T=L[O];if(T&&T.length>0){for(var Q=0,S=T.length;Q<S;++Q){var N=T[Q];if(N&&N[this.EL]===M&&(!R||R===N[this.TYPE])){P.push({type:N[this.TYPE],fn:N[this.FN],obj:N[this.OBJ],adjust:N[this.ADJ_SCOPE],index:Q})}}}}return(P.length)?P:null},_unload:function(S){var R=Ext.lib.Event,P,O,M,L,N;for(P=0,L=K.length;P<L;++P){M=K[P];if(M){var Q=window;if(M[R.ADJ_SCOPE]){if(M[R.ADJ_SCOPE]===true){Q=M[R.OBJ]}else{Q=M[R.ADJ_SCOPE]}}M[R.FN].call(Q,R.getEvent(S),M[R.OBJ]);K[P]=null;M=null;Q=null}}K=null;if(G&&G.length>0){O=G.length;while(O){N=O-1;M=G[N];if(M){R.removeListener(M[R.EL],M[R.TYPE],M[R.FN],N)}O=O-1}M=null;R.clearCache()}R.doRemove(window,"unload",R._unload)},getScroll:function(){var L=document.documentElement,M=document.body;if(L&&(L.scrollTop||L.scrollLeft)){return[L.scrollTop,L.scrollLeft]}else{if(M){return[M.scrollTop,M.scrollLeft]}else{return[0,0]}}},doAdd:function(){if(window.addEventListener){return function(O,M,N,L){O.addEventListener(M,N,(L))}}else{if(window.attachEvent){return function(O,M,N,L){O.attachEvent("on"+M,N)}}else{return function(){}}}}(),doRemove:function(){if(window.removeEventListener){return function(O,M,N,L){O.removeEventListener(M,N,(L))}}else{if(window.detachEvent){return function(N,L,M){N.detachEvent("on"+L,M)}}else{return function(){}}}}()}}();var D=Ext.lib.Event;D.on=D.addListener;D.un=D.removeListener;if(document&&document.body){D._load()}else{D.doAdd(window,"load",D._load)}D.doAdd(window,"unload",D._unload);D._tryPreloadAttach();Ext.lib.Ajax={request:function(K,I,E,J,F){if(F){var G=F.headers;if(G){for(var H in G){if(G.hasOwnProperty(H)){this.initHeader(H,G[H],false)}}}if(F.xmlData){if(!G||!G["Content-Type"]){this.initHeader("Content-Type","text/xml",false)}K=(K?K:(F.method?F.method:"POST"));J=F.xmlData}else{if(F.jsonData){if(!G||!G["Content-Type"]){this.initHeader("Content-Type","application/json",false)}K=(K?K:(F.method?F.method:"POST"));J=typeof F.jsonData=="object"?Ext.encode(F.jsonData):F.jsonData}}}return this.asyncRequest(K,I,E,J)},serializeForm:function(F){if(typeof F=="string"){F=(document.getElementById(F)||document.forms[F])}var G,E,H,J,K="",M=false;for(var L=0;L<F.elements.length;L++){G=F.elements[L];J=F.elements[L].disabled;E=F.elements[L].name;H=F.elements[L].value;if(!J&&E){switch(G.type){case"select-one":case"select-multiple":for(var I=0;I<G.options.length;I++){if(G.options[I].selected){if(Ext.isIE){K+=encodeURIComponent(E)+"="+encodeURIComponent(G.options[I].attributes["value"].specified?G.options[I].value:G.options[I].text)+"&"}else{K+=encodeURIComponent(E)+"="+encodeURIComponent(G.options[I].hasAttribute("value")?G.options[I].value:G.options[I].text)+"&"}}}break;case"radio":case"checkbox":if(G.checked){K+=encodeURIComponent(E)+"="+encodeURIComponent(H)+"&"}break;case"file":case undefined:case"reset":case"button":break;case"submit":if(M==false){K+=encodeURIComponent(E)+"="+encodeURIComponent(H)+"&";M=true}break;default:K+=encodeURIComponent(E)+"="+encodeURIComponent(H)+"&";break}}}K=K.substr(0,K.length-1);return K},headers:{},hasHeaders:false,useDefaultHeader:true,defaultPostHeader:"application/x-www-form-urlencoded; charset=UTF-8",useDefaultXhrHeader:true,defaultXhrHeader:"XMLHttpRequest",hasDefaultHeaders:true,defaultHeaders:{},poll:{},timeout:{},pollInterval:50,transactionId:0,setProgId:function(E){this.activeX.unshift(E)},setDefaultPostHeader:function(E){this.useDefaultHeader=E},setDefaultXhrHeader:function(E){this.useDefaultXhrHeader=E},setPollingInterval:function(E){if(typeof E=="number"&&isFinite(E)){this.pollInterval=E}},createXhrObject:function(I){var H,E;try{E=new XMLHttpRequest();H={conn:E,tId:I}}catch(G){for(var F=0;F<this.activeX.length;++F){try{E=new ActiveXObject(this.activeX[F]);H={conn:E,tId:I};break}catch(G){}}}finally{return H}},getConnectionObject:function(){var F;var G=this.transactionId;try{F=this.createXhrObject(G);if(F){this.transactionId++}}catch(E){}finally{return F}},asyncRequest:function(I,F,H,E){var G=this.getConnectionObject();if(!G){return null}else{G.conn.open(I,F,true);if(this.useDefaultXhrHeader){if(!this.defaultHeaders["X-Requested-With"]){this.initHeader("X-Requested-With",this.defaultXhrHeader,true)}}if(E&&this.useDefaultHeader&&(!this.hasHeaders||!this.headers["Content-Type"])){this.initHeader("Content-Type",this.defaultPostHeader)}if(this.hasDefaultHeaders||this.hasHeaders){this.setHeader(G)}this.handleReadyState(G,H);G.conn.send(E||null);return G}},handleReadyState:function(F,G){var E=this;if(G&&G.timeout){this.timeout[F.tId]=window.setTimeout(function(){E.abort(F,G,true)},G.timeout)}this.poll[F.tId]=window.setInterval(function(){if(F.conn&&F.conn.readyState==4){window.clearInterval(E.poll[F.tId]);delete E.poll[F.tId];if(G&&G.timeout){window.clearTimeout(E.timeout[F.tId]);delete E.timeout[F.tId]}E.handleTransactionResponse(F,G)}},this.pollInterval)},handleTransactionResponse:function(I,J,E){if(!J){this.releaseObject(I);return }var G,F;try{if(I.conn.status!==undefined&&I.conn.status!=0){G=I.conn.status}else{G=13030}}catch(H){G=13030}if(G>=200&&G<300){F=this.createResponseObject(I,J.argument);if(J.success){if(!J.scope){J.success(F)}else{J.success.apply(J.scope,[F])}}}else{switch(G){case 12002:case 12029:case 12030:case 12031:case 12152:case 13030:F=this.createExceptionObject(I.tId,J.argument,(E?E:false));if(J.failure){if(!J.scope){J.failure(F)}else{J.failure.apply(J.scope,[F])}}break;default:F=this.createResponseObject(I,J.argument);if(J.failure){if(!J.scope){J.failure(F)}else{J.failure.apply(J.scope,[F])}}}}this.releaseObject(I);F=null},createResponseObject:function(E,K){var H={};var M={};try{var G=E.conn.getAllResponseHeaders();var J=G.split("\n");for(var I=0;I<J.length;I++){var F=J[I].indexOf(":");if(F!=-1){M[J[I].substring(0,F)]=J[I].substring(F+2)}}}catch(L){}H.tId=E.tId;H.status=E.conn.status;H.statusText=E.conn.statusText;H.getResponseHeader=M;H.getAllResponseHeaders=G;H.responseText=E.conn.responseText;H.responseXML=E.conn.responseXML;if(typeof K!==undefined){H.argument=K}return H},createExceptionObject:function(L,H,E){var J=0;var K="communication failure";var G=-1;var F="transaction aborted";var I={};I.tId=L;if(E){I.status=G;I.statusText=F}else{I.status=J;I.statusText=K}if(H){I.argument=H}return I},initHeader:function(E,H,G){var F=(G)?this.defaultHeaders:this.headers;if(F[E]===undefined){F[E]=H}else{F[E]=H+","+F[E]}if(G){this.hasDefaultHeaders=true}else{this.hasHeaders=true}},setHeader:function(E){if(this.hasDefaultHeaders){for(var F in this.defaultHeaders){if(this.defaultHeaders.hasOwnProperty(F)){E.conn.setRequestHeader(F,this.defaultHeaders[F])}}}if(this.hasHeaders){for(var F in this.headers){if(this.headers.hasOwnProperty(F)){E.conn.setRequestHeader(F,this.headers[F])}}this.headers={};this.hasHeaders=false}},resetDefaultHeaders:function(){delete this.defaultHeaders;this.defaultHeaders={};this.hasDefaultHeaders=false},abort:function(F,G,E){if(this.isCallInProgress(F)){F.conn.abort();window.clearInterval(this.poll[F.tId]);delete this.poll[F.tId];if(E){delete this.timeout[F.tId]}this.handleTransactionResponse(F,G,true);return true}else{return false}},isCallInProgress:function(E){if(E.conn){return E.conn.readyState!=4&&E.conn.readyState!=0}else{return false}},releaseObject:function(E){E.conn=null;E=null},activeX:["MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"]};Ext.lib.Region=function(G,H,E,F){this.top=G;this[1]=G;this.right=H;this.bottom=E;this.left=F;this[0]=F};Ext.lib.Region.prototype={contains:function(E){return(E.left>=this.left&&E.right<=this.right&&E.top>=this.top&&E.bottom<=this.bottom)},getArea:function(){return((this.bottom-this.top)*(this.right-this.left))},intersect:function(I){var G=Math.max(this.top,I.top);var H=Math.min(this.right,I.right);var E=Math.min(this.bottom,I.bottom);var F=Math.max(this.left,I.left);if(E>=G&&H>=F){return new Ext.lib.Region(G,H,E,F)}else{return null}},union:function(I){var G=Math.min(this.top,I.top);var H=Math.max(this.right,I.right);var E=Math.max(this.bottom,I.bottom);var F=Math.min(this.left,I.left);return new Ext.lib.Region(G,H,E,F)},constrainTo:function(E){this.top=this.top.constrain(E.top,E.bottom);this.bottom=this.bottom.constrain(E.top,E.bottom);this.left=this.left.constrain(E.left,E.right);this.right=this.right.constrain(E.left,E.right);return this},adjust:function(G,F,E,H){this.top+=G;this.left+=F;this.right+=H;this.bottom+=E;return this}};Ext.lib.Region.getRegion=function(H){var J=Ext.lib.Dom.getXY(H);var G=J[1];var I=J[0]+H.offsetWidth;var E=J[1]+H.offsetHeight;var F=J[0];return new Ext.lib.Region(G,I,E,F)};Ext.lib.Point=function(E,F){if(Ext.isArray(E)){F=E[1];E=E[0]}this.x=this.right=this.left=this[0]=E;this.y=this.top=this.bottom=this[1]=F};Ext.lib.Point.prototype=new Ext.lib.Region();Ext.lib.Anim={scroll:function(H,F,I,J,E,G){return this.run(H,F,I,J,E,G,Ext.lib.Scroll)},motion:function(H,F,I,J,E,G){return this.run(H,F,I,J,E,G,Ext.lib.Motion)},color:function(H,F,I,J,E,G){return this.run(H,F,I,J,E,G,Ext.lib.ColorAnim)},run:function(I,F,K,L,E,H,G){G=G||Ext.lib.AnimBase;if(typeof L=="string"){L=Ext.lib.Easing[L]}var J=new G(I,F,K,L);J.animateX(function(){Ext.callback(E,H)});return J}};function C(E){if(!B){B=new Ext.Element.Flyweight()}B.dom=E;return B}if(Ext.isIE){function A(){var E=Function.prototype;delete E.createSequence;delete E.defer;delete E.createDelegate;delete E.createCallback;delete E.createInterceptor;window.detachEvent("onunload",A)}window.attachEvent("onunload",A)}Ext.lib.AnimBase=function(F,E,G,H){if(F){this.init(F,E,G,H)}};Ext.lib.AnimBase.prototype={toString:function(){var E=this.getEl();var F=E.id||E.tagName;return("Anim "+F)},patterns:{noNegatives:/width|height|opacity|padding/i,offsetAttribute:/^((width|height)|(top|left))$/,defaultUnit:/width|height|top$|bottom$|left$|right$/i,offsetUnit:/\d+(em|%|en|ex|pt|in|cm|mm|pc)$/i},doMethod:function(E,G,F){return this.method(this.currentFrame,G,F-G,this.totalFrames)},setAttribute:function(E,G,F){if(this.patterns.noNegatives.test(E)){G=(G>0)?G:0}Ext.fly(this.getEl(),"_anim").setStyle(E,G+F)},getAttribute:function(E){var G=this.getEl();var I=C(G).getStyle(E);if(I!=="auto"&&!this.patterns.offsetUnit.test(I)){return parseFloat(I)}var F=this.patterns.offsetAttribute.exec(E)||[];var J=!!(F[3]);var H=!!(F[2]);if(H||(C(G).getStyle("position")=="absolute"&&J)){I=G["offset"+F[0].charAt(0).toUpperCase()+F[0].substr(1)]}else{I=0}return I},getDefaultUnit:function(E){if(this.patterns.defaultUnit.test(E)){return"px"}return""},animateX:function(G,E){var F=function(){this.onComplete.removeListener(F);if(typeof G=="function"){G.call(E||this,this)}};this.onComplete.addListener(F,this);this.animate()},setRuntimeAttribute:function(F){var K;var G;var H=this.attributes;this.runtimeAttributes[F]={};var J=function(L){return(typeof L!=="undefined")};if(!J(H[F]["to"])&&!J(H[F]["by"])){return false}K=(J(H[F]["from"]))?H[F]["from"]:this.getAttribute(F);if(J(H[F]["to"])){G=H[F]["to"]}else{if(J(H[F]["by"])){if(K.constructor==Array){G=[];for(var I=0,E=K.length;I<E;++I){G[I]=K[I]+H[F]["by"][I]}}else{G=K+H[F]["by"]}}}this.runtimeAttributes[F].start=K;this.runtimeAttributes[F].end=G;this.runtimeAttributes[F].unit=(J(H[F].unit))?H[F]["unit"]:this.getDefaultUnit(F)},init:function(G,L,K,E){var F=false;var H=null;var J=0;G=Ext.getDom(G);this.attributes=L||{};this.duration=K||1;this.method=E||Ext.lib.Easing.easeNone;this.useSeconds=true;this.currentFrame=0;this.totalFrames=Ext.lib.AnimMgr.fps;this.getEl=function(){return G};this.isAnimated=function(){return F};this.getStartTime=function(){return H};this.runtimeAttributes={};this.animate=function(){if(this.isAnimated()){return false}this.currentFrame=0;this.totalFrames=(this.useSeconds)?Math.ceil(Ext.lib.AnimMgr.fps*this.duration):this.duration;Ext.lib.AnimMgr.registerElement(this)};this.stop=function(O){if(O){this.currentFrame=this.totalFrames;this._onTween.fire()}Ext.lib.AnimMgr.stop(this)};var N=function(){this.onStart.fire();this.runtimeAttributes={};for(var O in this.attributes){this.setRuntimeAttribute(O)}F=true;J=0;H=new Date()};var M=function(){var Q={duration:new Date()-this.getStartTime(),currentFrame:this.currentFrame};Q.toString=function(){return("duration: "+Q.duration+", currentFrame: "+Q.currentFrame)};this.onTween.fire(Q);var P=this.runtimeAttributes;for(var O in P){this.setAttribute(O,this.doMethod(O,P[O].start,P[O].end),P[O].unit)}J+=1};var I=function(){var O=(new Date()-H)/1000;var P={duration:O,frames:J,fps:J/O};P.toString=function(){return("duration: "+P.duration+", frames: "+P.frames+", fps: "+P.fps)};F=false;J=0;this.onComplete.fire(P)};this._onStart=new Ext.util.Event(this);this.onStart=new Ext.util.Event(this);this.onTween=new Ext.util.Event(this);this._onTween=new Ext.util.Event(this);this.onComplete=new Ext.util.Event(this);this._onComplete=new Ext.util.Event(this);this._onStart.addListener(N);this._onTween.addListener(M);this._onComplete.addListener(I)}};Ext.lib.AnimMgr=new function(){var G=null;var F=[];var E=0;this.fps=1000;this.delay=1;this.registerElement=function(J){F[F.length]=J;E+=1;J._onStart.fire();this.start()};this.unRegister=function(K,J){K._onComplete.fire();J=J||I(K);if(J!=-1){F.splice(J,1)}E-=1;if(E<=0){this.stop()}};this.start=function(){if(G===null){G=setInterval(this.run,this.delay)}};this.stop=function(L){if(!L){clearInterval(G);for(var K=0,J=F.length;K<J;++K){if(F[0].isAnimated()){this.unRegister(F[0],0)}}F=[];G=null;E=0}else{this.unRegister(L)}};this.run=function(){for(var L=0,J=F.length;L<J;++L){var K=F[L];if(!K||!K.isAnimated()){continue}if(K.currentFrame<K.totalFrames||K.totalFrames===null){K.currentFrame+=1;if(K.useSeconds){H(K)}K._onTween.fire()}else{Ext.lib.AnimMgr.stop(K,L)}}};var I=function(L){for(var K=0,J=F.length;K<J;++K){if(F[K]==L){return K}}return -1};var H=function(K){var N=K.totalFrames;var M=K.currentFrame;var L=(K.currentFrame*K.duration*1000/K.totalFrames);var J=(new Date()-K.getStartTime());var O=0;if(J<K.duration*1000){O=Math.round((J/L-1)*K.currentFrame)}else{O=N-(M+1)}if(O>0&&isFinite(O)){if(K.currentFrame+O>=N){O=N-(M+1)}K.currentFrame+=O}}};Ext.lib.Bezier=new function(){this.getPosition=function(I,H){var J=I.length;var G=[];for(var F=0;F<J;++F){G[F]=[I[F][0],I[F][1]]}for(var E=1;E<J;++E){for(F=0;F<J-E;++F){G[F][0]=(1-H)*G[F][0]+H*G[parseInt(F+1,10)][0];G[F][1]=(1-H)*G[F][1]+H*G[parseInt(F+1,10)][1]}}return[G[0][0],G[0][1]]}};(function(){Ext.lib.ColorAnim=function(I,H,J,K){Ext.lib.ColorAnim.superclass.constructor.call(this,I,H,J,K)};Ext.extend(Ext.lib.ColorAnim,Ext.lib.AnimBase);var F=Ext.lib;var G=F.ColorAnim.superclass;var E=F.ColorAnim.prototype;E.toString=function(){var H=this.getEl();var I=H.id||H.tagName;return("ColorAnim "+I)};E.patterns.color=/color$/i;E.patterns.rgb=/^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i;E.patterns.hex=/^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i;E.patterns.hex3=/^#?([0-9A-F]{1})([0-9A-F]{1})([0-9A-F]{1})$/i;E.patterns.transparent=/^transparent|rgba\(0, 0, 0, 0\)$/;E.parseColor=function(H){if(H.length==3){return H}var I=this.patterns.hex.exec(H);if(I&&I.length==4){return[parseInt(I[1],16),parseInt(I[2],16),parseInt(I[3],16)]}I=this.patterns.rgb.exec(H);if(I&&I.length==4){return[parseInt(I[1],10),parseInt(I[2],10),parseInt(I[3],10)]}I=this.patterns.hex3.exec(H);if(I&&I.length==4){return[parseInt(I[1]+I[1],16),parseInt(I[2]+I[2],16),parseInt(I[3]+I[3],16)]}return null};E.getAttribute=function(H){var J=this.getEl();if(this.patterns.color.test(H)){var K=C(J).getStyle(H);if(this.patterns.transparent.test(K)){var I=J.parentNode;K=C(I).getStyle(H);while(I&&this.patterns.transparent.test(K)){I=I.parentNode;K=C(I).getStyle(H);if(I.tagName.toUpperCase()=="HTML"){K="#fff"}}}}else{K=G.getAttribute.call(this,H)}return K};E.doMethod=function(I,M,J){var L;if(this.patterns.color.test(I)){L=[];for(var K=0,H=M.length;K<H;++K){L[K]=G.doMethod.call(this,I,M[K],J[K])}L="rgb("+Math.floor(L[0])+","+Math.floor(L[1])+","+Math.floor(L[2])+")"}else{L=G.doMethod.call(this,I,M,J)}return L};E.setRuntimeAttribute=function(I){G.setRuntimeAttribute.call(this,I);if(this.patterns.color.test(I)){var K=this.attributes;var M=this.parseColor(this.runtimeAttributes[I].start);var J=this.parseColor(this.runtimeAttributes[I].end);if(typeof K[I]["to"]==="undefined"&&typeof K[I]["by"]!=="undefined"){J=this.parseColor(K[I].by);for(var L=0,H=M.length;L<H;++L){J[L]=M[L]+J[L]}}this.runtimeAttributes[I].start=M;this.runtimeAttributes[I].end=J}}})();Ext.lib.Easing={easeNone:function(F,E,H,G){return H*F/G+E},easeIn:function(F,E,H,G){return H*(F/=G)*F+E},easeOut:function(F,E,H,G){return -H*(F/=G)*(F-2)+E},easeBoth:function(F,E,H,G){if((F/=G/2)<1){return H/2*F*F+E}return -H/2*((--F)*(F-2)-1)+E},easeInStrong:function(F,E,H,G){return H*(F/=G)*F*F*F+E},easeOutStrong:function(F,E,H,G){return -H*((F=F/G-1)*F*F*F-1)+E},easeBothStrong:function(F,E,H,G){if((F/=G/2)<1){return H/2*F*F*F*F+E}return -H/2*((F-=2)*F*F*F-2)+E},elasticIn:function(G,E,K,J,F,I){if(G==0){return E}if((G/=J)==1){return E+K}if(!I){I=J*0.3}if(!F||F<Math.abs(K)){F=K;var H=I/4}else{var H=I/(2*Math.PI)*Math.asin(K/F)}return -(F*Math.pow(2,10*(G-=1))*Math.sin((G*J-H)*(2*Math.PI)/I))+E},elasticOut:function(G,E,K,J,F,I){if(G==0){return E}if((G/=J)==1){return E+K}if(!I){I=J*0.3}if(!F||F<Math.abs(K)){F=K;var H=I/4}else{var H=I/(2*Math.PI)*Math.asin(K/F)}return F*Math.pow(2,-10*G)*Math.sin((G*J-H)*(2*Math.PI)/I)+K+E},elasticBoth:function(G,E,K,J,F,I){if(G==0){return E}if((G/=J/2)==2){return E+K}if(!I){I=J*(0.3*1.5)}if(!F||F<Math.abs(K)){F=K;var H=I/4}else{var H=I/(2*Math.PI)*Math.asin(K/F)}if(G<1){return -0.5*(F*Math.pow(2,10*(G-=1))*Math.sin((G*J-H)*(2*Math.PI)/I))+E}return F*Math.pow(2,-10*(G-=1))*Math.sin((G*J-H)*(2*Math.PI)/I)*0.5+K+E},backIn:function(F,E,I,H,G){if(typeof G=="undefined"){G=1.70158}return I*(F/=H)*F*((G+1)*F-G)+E},backOut:function(F,E,I,H,G){if(typeof G=="undefined"){G=1.70158}return I*((F=F/H-1)*F*((G+1)*F+G)+1)+E},backBoth:function(F,E,I,H,G){if(typeof G=="undefined"){G=1.70158}if((F/=H/2)<1){return I/2*(F*F*(((G*=(1.525))+1)*F-G))+E}return I/2*((F-=2)*F*(((G*=(1.525))+1)*F+G)+2)+E},bounceIn:function(F,E,H,G){return H-Ext.lib.Easing.bounceOut(G-F,0,H,G)+E},bounceOut:function(F,E,H,G){if((F/=G)<(1/2.75)){return H*(7.5625*F*F)+E}else{if(F<(2/2.75)){return H*(7.5625*(F-=(1.5/2.75))*F+0.75)+E}else{if(F<(2.5/2.75)){return H*(7.5625*(F-=(2.25/2.75))*F+0.9375)+E}}}return H*(7.5625*(F-=(2.625/2.75))*F+0.984375)+E},bounceBoth:function(F,E,H,G){if(F<G/2){return Ext.lib.Easing.bounceIn(F*2,0,H,G)*0.5+E}return Ext.lib.Easing.bounceOut(F*2-G,0,H,G)*0.5+H*0.5+E}};(function(){Ext.lib.Motion=function(K,J,L,M){if(K){Ext.lib.Motion.superclass.constructor.call(this,K,J,L,M)}};Ext.extend(Ext.lib.Motion,Ext.lib.ColorAnim);var H=Ext.lib;var I=H.Motion.superclass;var F=H.Motion.prototype;F.toString=function(){var J=this.getEl();var K=J.id||J.tagName;return("Motion "+K)};F.patterns.points=/^points$/i;F.setAttribute=function(J,L,K){if(this.patterns.points.test(J)){K=K||"px";I.setAttribute.call(this,"left",L[0],K);I.setAttribute.call(this,"top",L[1],K)}else{I.setAttribute.call(this,J,L,K)}};F.getAttribute=function(J){if(this.patterns.points.test(J)){var K=[I.getAttribute.call(this,"left"),I.getAttribute.call(this,"top")]}else{K=I.getAttribute.call(this,J)}return K};F.doMethod=function(J,N,K){var M=null;if(this.patterns.points.test(J)){var L=this.method(this.currentFrame,0,100,this.totalFrames)/100;M=H.Bezier.getPosition(this.runtimeAttributes[J],L)}else{M=I.doMethod.call(this,J,N,K)}return M};F.setRuntimeAttribute=function(S){if(this.patterns.points.test(S)){var K=this.getEl();var M=this.attributes;var J;var O=M["points"]["control"]||[];var L;var P,R;if(O.length>0&&!Ext.isArray(O[0])){O=[O]}else{var N=[];for(P=0,R=O.length;P<R;++P){N[P]=O[P]}O=N}Ext.fly(K,"_anim").position();if(G(M["points"]["from"])){Ext.lib.Dom.setXY(K,M["points"]["from"])}else{Ext.lib.Dom.setXY(K,Ext.lib.Dom.getXY(K))}J=this.getAttribute("points");if(G(M["points"]["to"])){L=E.call(this,M["points"]["to"],J);var Q=Ext.lib.Dom.getXY(this.getEl());for(P=0,R=O.length;P<R;++P){O[P]=E.call(this,O[P],J)}}else{if(G(M["points"]["by"])){L=[J[0]+M["points"]["by"][0],J[1]+M["points"]["by"][1]];for(P=0,R=O.length;P<R;++P){O[P]=[J[0]+O[P][0],J[1]+O[P][1]]}}}this.runtimeAttributes[S]=[J];if(O.length>0){this.runtimeAttributes[S]=this.runtimeAttributes[S].concat(O)}this.runtimeAttributes[S][this.runtimeAttributes[S].length]=L}else{I.setRuntimeAttribute.call(this,S)}};var E=function(J,L){var K=Ext.lib.Dom.getXY(this.getEl());J=[J[0]-K[0]+L[0],J[1]-K[1]+L[1]];return J};var G=function(J){return(typeof J!=="undefined")}})();(function(){Ext.lib.Scroll=function(I,H,J,K){if(I){Ext.lib.Scroll.superclass.constructor.call(this,I,H,J,K)}};Ext.extend(Ext.lib.Scroll,Ext.lib.ColorAnim);var F=Ext.lib;var G=F.Scroll.superclass;var E=F.Scroll.prototype;E.toString=function(){var H=this.getEl();var I=H.id||H.tagName;return("Scroll "+I)};E.doMethod=function(H,K,I){var J=null;if(H=="scroll"){J=[this.method(this.currentFrame,K[0],I[0]-K[0],this.totalFrames),this.method(this.currentFrame,K[1],I[1]-K[1],this.totalFrames)]}else{J=G.doMethod.call(this,H,K,I)}return J};E.getAttribute=function(H){var J=null;var I=this.getEl();if(H=="scroll"){J=[I.scrollLeft,I.scrollTop]}else{J=G.getAttribute.call(this,H)}return J};E.setAttribute=function(H,K,J){var I=this.getEl();if(H=="scroll"){I.scrollLeft=K[0];I.scrollTop=K[1]}else{G.setAttribute.call(this,H,K,J)}}})()})();
diff --git a/testing/talos/talos/tests/dromaeo/lib/ext-core.js b/testing/talos/talos/tests/dromaeo/lib/ext-core.js
new file mode 100644
index 0000000000..aa36cfb565
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/lib/ext-core.js
@@ -0,0 +1,19 @@
+/*
+ * Ext JS Library 2.2
+ * Copyright(c) 2006-2008, Ext JS, LLC.
+ * licensing@extjs.com
+ *
+ * http://extjs.com/license
+ */
+
+Ext.DomHelper=function(){var L=null;var F=/^(?:br|frame|hr|img|input|link|meta|range|spacer|wbr|area|param|col)$/i;var B=/^table|tbody|tr|td$/i;var A=function(T){if(typeof T=="string"){return T}var O="";if(Ext.isArray(T)){for(var R=0,P=T.length;R<P;R++){O+=A(T[R])}return O}if(!T.tag){T.tag="div"}O+="<"+T.tag;for(var N in T){if(N=="tag"||N=="children"||N=="cn"||N=="html"||typeof T[N]=="function"){continue}if(N=="style"){var S=T["style"];if(typeof S=="function"){S=S.call()}if(typeof S=="string"){O+=" style=\""+S+"\""}else{if(typeof S=="object"){O+=" style=\"";for(var Q in S){if(typeof S[Q]!="function"){O+=Q+":"+S[Q]+";"}}O+="\""}}}else{if(N=="cls"){O+=" class=\""+T["cls"]+"\""}else{if(N=="htmlFor"){O+=" for=\""+T["htmlFor"]+"\""}else{O+=" "+N+"=\""+T[N]+"\""}}}}if(F.test(T.tag)){O+="/>"}else{O+=">";var U=T.children||T.cn;if(U){O+=A(U)}else{if(T.html){O+=T.html}}O+="</"+T.tag+">"}return O};var M=function(T,O){var S;if(Ext.isArray(T)){S=document.createDocumentFragment();for(var R=0,P=T.length;R<P;R++){M(T[R],S)}}else{if(typeof T=="string"){S=document.createTextNode(T)}else{S=document.createElement(T.tag||"div");var Q=!!S.setAttribute;for(var N in T){if(N=="tag"||N=="children"||N=="cn"||N=="html"||N=="style"||typeof T[N]=="function"){continue}if(N=="cls"){S.className=T["cls"]}else{if(Q){S.setAttribute(N,T[N])}else{S[N]=T[N]}}}Ext.DomHelper.applyStyles(S,T.style);var U=T.children||T.cn;if(U){M(U,S)}else{if(T.html){S.innerHTML=T.html}}}}if(O){O.appendChild(S)}return S};var I=function(S,Q,P,R){L.innerHTML=[Q,P,R].join("");var N=-1,O=L;while(++N<S){O=O.firstChild}return O};var J="<table>",E="</table>",C=J+"<tbody>",K="</tbody>"+E,H=C+"<tr>",D="</tr>"+K;var G=function(N,O,Q,P){if(!L){L=document.createElement("div")}var R;var S=null;if(N=="td"){if(O=="afterbegin"||O=="beforeend"){return }if(O=="beforebegin"){S=Q;Q=Q.parentNode}else{S=Q.nextSibling;Q=Q.parentNode}R=I(4,H,P,D)}else{if(N=="tr"){if(O=="beforebegin"){S=Q;Q=Q.parentNode;R=I(3,C,P,K)}else{if(O=="afterend"){S=Q.nextSibling;Q=Q.parentNode;R=I(3,C,P,K)}else{if(O=="afterbegin"){S=Q.firstChild}R=I(4,H,P,D)}}}else{if(N=="tbody"){if(O=="beforebegin"){S=Q;Q=Q.parentNode;R=I(2,J,P,E)}else{if(O=="afterend"){S=Q.nextSibling;Q=Q.parentNode;R=I(2,J,P,E)}else{if(O=="afterbegin"){S=Q.firstChild}R=I(3,C,P,K)}}}else{if(O=="beforebegin"||O=="afterend"){return }if(O=="afterbegin"){S=Q.firstChild}R=I(2,J,P,E)}}}Q.insertBefore(R,S);return R};return{useDom:false,markup:function(N){return A(N)},applyStyles:function(P,Q){if(Q){P=Ext.fly(P);if(typeof Q=="string"){var O=/\s?([a-z\-]*)\:\s?([^;]*);?/gi;var R;while((R=O.exec(Q))!=null){P.setStyle(R[1],R[2])}}else{if(typeof Q=="object"){for(var N in Q){P.setStyle(N,Q[N])}}else{if(typeof Q=="function"){Ext.DomHelper.applyStyles(P,Q.call())}}}}},insertHtml:function(P,R,Q){P=P.toLowerCase();if(R.insertAdjacentHTML){if(B.test(R.tagName)){var O;if(O=G(R.tagName.toLowerCase(),P,R,Q)){return O}}switch(P){case"beforebegin":R.insertAdjacentHTML("BeforeBegin",Q);return R.previousSibling;case"afterbegin":R.insertAdjacentHTML("AfterBegin",Q);return R.firstChild;case"beforeend":R.insertAdjacentHTML("BeforeEnd",Q);return R.lastChild;case"afterend":R.insertAdjacentHTML("AfterEnd",Q);return R.nextSibling}throw"Illegal insertion point -> \""+P+"\""}var N=R.ownerDocument.createRange();var S;switch(P){case"beforebegin":N.setStartBefore(R);S=N.createContextualFragment(Q);R.parentNode.insertBefore(S,R);return R.previousSibling;case"afterbegin":if(R.firstChild){N.setStartBefore(R.firstChild);S=N.createContextualFragment(Q);R.insertBefore(S,R.firstChild);return R.firstChild}else{R.innerHTML=Q;return R.firstChild}case"beforeend":if(R.lastChild){N.setStartAfter(R.lastChild);S=N.createContextualFragment(Q);R.appendChild(S);return R.lastChild}else{R.innerHTML=Q;return R.lastChild}case"afterend":N.setStartAfter(R);S=N.createContextualFragment(Q);R.parentNode.insertBefore(S,R.nextSibling);return R.nextSibling}throw"Illegal insertion point -> \""+P+"\""},insertBefore:function(N,P,O){return this.doInsert(N,P,O,"beforeBegin")},insertAfter:function(N,P,O){return this.doInsert(N,P,O,"afterEnd","nextSibling")},insertFirst:function(N,P,O){return this.doInsert(N,P,O,"afterBegin","firstChild")},doInsert:function(Q,S,R,T,P){Q=Ext.getDom(Q);var O;if(this.useDom){O=M(S,null);(P==="firstChild"?Q:Q.parentNode).insertBefore(O,P?Q[P]:Q)}else{var N=A(S);O=this.insertHtml(T,Q,N)}return R?Ext.get(O,true):O},append:function(P,R,Q){P=Ext.getDom(P);var O;if(this.useDom){O=M(R,null);P.appendChild(O)}else{var N=A(R);O=this.insertHtml("beforeEnd",P,N)}return Q?Ext.get(O,true):O},overwrite:function(N,P,O){N=Ext.getDom(N);N.innerHTML=A(P);return O?Ext.get(N.firstChild,true):N.firstChild},createTemplate:function(O){var N=A(O);return new Ext.Template(N)}}}();
+Ext.Template=function(E){var B=arguments;if(Ext.isArray(E)){E=E.join("")}else{if(B.length>1){var C=[];for(var D=0,A=B.length;D<A;D++){if(typeof B[D]=="object"){Ext.apply(this,B[D])}else{C[C.length]=B[D]}}E=C.join("")}}this.html=E;if(this.compiled){this.compile()}};Ext.Template.prototype={applyTemplate:function(B){if(this.compiled){return this.compiled(B)}var A=this.disableFormats!==true;var E=Ext.util.Format,C=this;var D=function(G,I,L,H){if(L&&A){if(L.substr(0,5)=="this."){return C.call(L.substr(5),B[I],B)}else{if(H){var K=/^\s*['"](.*)["']\s*$/;H=H.split(",");for(var J=0,F=H.length;J<F;J++){H[J]=H[J].replace(K,"$1")}H=[B[I]].concat(H)}else{H=[B[I]]}return E[L].apply(E,H)}}else{return B[I]!==undefined?B[I]:""}};return this.html.replace(this.re,D)},set:function(A,B){this.html=A;this.compiled=null;if(B){this.compile()}return this},disableFormats:false,re:/\{([\w-]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?\}/g,compile:function(){var fm=Ext.util.Format;var useF=this.disableFormats!==true;var sep=Ext.isGecko?"+":",";var fn=function(m,name,format,args){if(format&&useF){args=args?","+args:"";if(format.substr(0,5)!="this."){format="fm."+format+"("}else{format="this.call(\""+format.substr(5)+"\", ";args=", values"}}else{args="";format="(values['"+name+"'] == undefined ? '' : "}return"'"+sep+format+"values['"+name+"']"+args+")"+sep+"'"};var body;if(Ext.isGecko){body="this.compiled = function(values){ return '"+this.html.replace(/\\/g,"\\\\").replace(/(\r\n|\n)/g,"\\n").replace(/'/g,"\\'").replace(this.re,fn)+"';};"}else{body=["this.compiled = function(values){ return ['"];body.push(this.html.replace(/\\/g,"\\\\").replace(/(\r\n|\n)/g,"\\n").replace(/'/g,"\\'").replace(this.re,fn));body.push("'].join('');};");body=body.join("")}eval(body);return this},call:function(C,B,A){return this[C](B,A)},insertFirst:function(B,A,C){return this.doInsert("afterBegin",B,A,C)},insertBefore:function(B,A,C){return this.doInsert("beforeBegin",B,A,C)},insertAfter:function(B,A,C){return this.doInsert("afterEnd",B,A,C)},append:function(B,A,C){return this.doInsert("beforeEnd",B,A,C)},doInsert:function(C,E,B,A){E=Ext.getDom(E);var D=Ext.DomHelper.insertHtml(C,E,this.applyTemplate(B));return A?Ext.get(D,true):D},overwrite:function(B,A,C){B=Ext.getDom(B);B.innerHTML=this.applyTemplate(A);return C?Ext.get(B.firstChild,true):B.firstChild}};Ext.Template.prototype.apply=Ext.Template.prototype.applyTemplate;Ext.DomHelper.Template=Ext.Template;Ext.Template.from=function(B,A){B=Ext.getDom(B);return new Ext.Template(B.value||B.innerHTML,A||"")};
+Ext.DomQuery=function(){var cache={},simpleCache={},valueCache={};var nonSpace=/\S/;var trimRe=/^\s+|\s+$/g;var tplRe=/\{(\d+)\}/g;var modeRe=/^(\s?[\/>+~]\s?|\s|$)/;var tagTokenRe=/^(#)?([\w-\*]+)/;var nthRe=/(\d*)n\+?(\d*)/,nthRe2=/\D/;function child(p,index){var i=0;var n=p.firstChild;while(n){if(n.nodeType==1){if(++i==index){return n}}n=n.nextSibling}return null}function next(n){while((n=n.nextSibling)&&n.nodeType!=1){}return n}function prev(n){while((n=n.previousSibling)&&n.nodeType!=1){}return n}function children(d){var n=d.firstChild,ni=-1;while(n){var nx=n.nextSibling;if(n.nodeType==3&&!nonSpace.test(n.nodeValue)){d.removeChild(n)}else{n.nodeIndex=++ni}n=nx}return this}function byClassName(c,a,v){if(!v){return c}var r=[],ri=-1,cn;for(var i=0,ci;ci=c[i];i++){if((" "+ci.className+" ").indexOf(v)!=-1){r[++ri]=ci}}return r}function attrValue(n,attr){if(!n.tagName&&typeof n.length!="undefined"){n=n[0]}if(!n){return null}if(attr=="for"){return n.htmlFor}if(attr=="class"||attr=="className"){return n.className}return n.getAttribute(attr)||n[attr]}function getNodes(ns,mode,tagName){var result=[],ri=-1,cs;if(!ns){return result}tagName=tagName||"*";if(typeof ns.getElementsByTagName!="undefined"){ns=[ns]}if(!mode){for(var i=0,ni;ni=ns[i];i++){cs=ni.getElementsByTagName(tagName);for(var j=0,ci;ci=cs[j];j++){result[++ri]=ci}}}else{if(mode=="/"||mode==">"){var utag=tagName.toUpperCase();for(var i=0,ni,cn;ni=ns[i];i++){cn=ni.children||ni.childNodes;for(var j=0,cj;cj=cn[j];j++){if(cj.nodeName==utag||cj.nodeName==tagName||tagName=="*"){result[++ri]=cj}}}}else{if(mode=="+"){var utag=tagName.toUpperCase();for(var i=0,n;n=ns[i];i++){while((n=n.nextSibling)&&n.nodeType!=1){}if(n&&(n.nodeName==utag||n.nodeName==tagName||tagName=="*")){result[++ri]=n}}}else{if(mode=="~"){for(var i=0,n;n=ns[i];i++){while((n=n.nextSibling)&&(n.nodeType!=1||(tagName=="*"||n.tagName.toLowerCase()!=tagName))){}if(n){result[++ri]=n}}}}}}return result}function concat(a,b){if(b.slice){return a.concat(b)}for(var i=0,l=b.length;i<l;i++){a[a.length]=b[i]}return a}function byTag(cs,tagName){if(cs.tagName||cs==document){cs=[cs]}if(!tagName){return cs}var r=[],ri=-1;tagName=tagName.toLowerCase();for(var i=0,ci;ci=cs[i];i++){if(ci.nodeType==1&&ci.tagName.toLowerCase()==tagName){r[++ri]=ci}}return r}function byId(cs,attr,id){if(cs.tagName||cs==document){cs=[cs]}if(!id){return cs}var r=[],ri=-1;for(var i=0,ci;ci=cs[i];i++){if(ci&&ci.id==id){r[++ri]=ci;return r}}return r}function byAttribute(cs,attr,value,op,custom){var r=[],ri=-1,st=custom=="{";var f=Ext.DomQuery.operators[op];for(var i=0,ci;ci=cs[i];i++){var a;if(st){a=Ext.DomQuery.getStyle(ci,attr)}else{if(attr=="class"||attr=="className"){a=ci.className}else{if(attr=="for"){a=ci.htmlFor}else{if(attr=="href"){a=ci.getAttribute("href",2)}else{a=ci.getAttribute(attr)}}}}if((f&&f(a,value))||(!f&&a)){r[++ri]=ci}}return r}function byPseudo(cs,name,value){return Ext.DomQuery.pseudos[name](cs,value)}var isIE=window.ActiveXObject?true:false;eval("var batch = 30803;");var key=30803;function nodupIEXml(cs){var d=++key;cs[0].setAttribute("_nodup",d);var r=[cs[0]];for(var i=1,len=cs.length;i<len;i++){var c=cs[i];if(!c.getAttribute("_nodup")!=d){c.setAttribute("_nodup",d);r[r.length]=c}}for(var i=0,len=cs.length;i<len;i++){cs[i].removeAttribute("_nodup")}return r}function nodup(cs){if(!cs){return[]}var len=cs.length,c,i,r=cs,cj,ri=-1;if(!len||typeof cs.nodeType!="undefined"||len==1){return cs}if(isIE&&typeof cs[0].selectSingleNode!="undefined"){return nodupIEXml(cs)}var d=++key;cs[0]._nodup=d;for(i=1;c=cs[i];i++){if(c._nodup!=d){c._nodup=d}else{r=[];for(var j=0;j<i;j++){r[++ri]=cs[j]}for(j=i+1;cj=cs[j];j++){if(cj._nodup!=d){cj._nodup=d;r[++ri]=cj}}return r}}return r}function quickDiffIEXml(c1,c2){var d=++key;for(var i=0,len=c1.length;i<len;i++){c1[i].setAttribute("_qdiff",d)}var r=[];for(var i=0,len=c2.length;i<len;i++){if(c2[i].getAttribute("_qdiff")!=d){r[r.length]=c2[i]}}for(var i=0,len=c1.length;i<len;i++){c1[i].removeAttribute("_qdiff")}return r}function quickDiff(c1,c2){var len1=c1.length;if(!len1){return c2}if(isIE&&c1[0].selectSingleNode){return quickDiffIEXml(c1,c2)}var d=++key;for(var i=0;i<len1;i++){c1[i]._qdiff=d}var r=[];for(var i=0,len=c2.length;i<len;i++){if(c2[i]._qdiff!=d){r[r.length]=c2[i]}}return r}function quickId(ns,mode,root,id){if(ns==root){var d=root.ownerDocument||root;return d.getElementById(id)}ns=getNodes(ns,mode,"*");return byId(ns,null,id)}return{getStyle:function(el,name){return Ext.fly(el).getStyle(name)},compile:function(path,type){type=type||"select";var fn=["var f = function(root){\n var mode; ++batch; var n = root || document;\n"];var q=path,mode,lq;var tk=Ext.DomQuery.matchers;var tklen=tk.length;var mm;var lmode=q.match(modeRe);if(lmode&&lmode[1]){fn[fn.length]="mode=\""+lmode[1].replace(trimRe,"")+"\";";q=q.replace(lmode[1],"")}while(path.substr(0,1)=="/"){path=path.substr(1)}while(q&&lq!=q){lq=q;var tm=q.match(tagTokenRe);if(type=="select"){if(tm){if(tm[1]=="#"){fn[fn.length]="n = quickId(n, mode, root, \""+tm[2]+"\");"}else{fn[fn.length]="n = getNodes(n, mode, \""+tm[2]+"\");"}q=q.replace(tm[0],"")}else{if(q.substr(0,1)!="@"){fn[fn.length]="n = getNodes(n, mode, \"*\");"}}}else{if(tm){if(tm[1]=="#"){fn[fn.length]="n = byId(n, null, \""+tm[2]+"\");"}else{fn[fn.length]="n = byTag(n, \""+tm[2]+"\");"}q=q.replace(tm[0],"")}}while(!(mm=q.match(modeRe))){var matched=false;for(var j=0;j<tklen;j++){var t=tk[j];var m=q.match(t.re);if(m){fn[fn.length]=t.select.replace(tplRe,function(x,i){return m[i]});q=q.replace(m[0],"");matched=true;break}}if(!matched){throw"Error parsing selector, parsing failed at \""+q+"\""}}if(mm[1]){fn[fn.length]="mode=\""+mm[1].replace(trimRe,"")+"\";";q=q.replace(mm[1],"")}}fn[fn.length]="return nodup(n);\n}";eval(fn.join(""));return f},select:function(path,root,type){if(!root||root==document){root=document}if(typeof root=="string"){root=document.getElementById(root)}var paths=path.split(",");var results=[];for(var i=0,len=paths.length;i<len;i++){var p=paths[i].replace(trimRe,"");if(!cache[p]){cache[p]=Ext.DomQuery.compile(p);if(!cache[p]){throw p+" is not a valid selector"}}var result=cache[p](root);if(result&&result!=document){results=results.concat(result)}}if(paths.length>1){return nodup(results)}return results},selectNode:function(path,root){return Ext.DomQuery.select(path,root)[0]},selectValue:function(path,root,defaultValue){path=path.replace(trimRe,"");if(!valueCache[path]){valueCache[path]=Ext.DomQuery.compile(path,"select")}var n=valueCache[path](root);n=n[0]?n[0]:n;var v=(n&&n.firstChild?n.firstChild.nodeValue:null);return((v===null||v===undefined||v==="")?defaultValue:v)},selectNumber:function(path,root,defaultValue){var v=Ext.DomQuery.selectValue(path,root,defaultValue||0);return parseFloat(v)},is:function(el,ss){if(typeof el=="string"){el=document.getElementById(el)}var isArray=Ext.isArray(el);var result=Ext.DomQuery.filter(isArray?el:[el],ss);return isArray?(result.length==el.length):(result.length>0)},filter:function(els,ss,nonMatches){ss=ss.replace(trimRe,"");if(!simpleCache[ss]){simpleCache[ss]=Ext.DomQuery.compile(ss,"simple")}var result=simpleCache[ss](els);return nonMatches?quickDiff(result,els):result},matchers:[{re:/^\.([\w-]+)/,select:"n = byClassName(n, null, \" {1} \");"},{re:/^\:([\w-]+)(?:\(((?:[^\s>\/]*|.*?))\))?/,select:"n = byPseudo(n, \"{1}\", \"{2}\");"},{re:/^(?:([\[\{])(?:@)?([\w-]+)\s?(?:(=|.=)\s?['"]?(.*?)["']?)?[\]\}])/,select:"n = byAttribute(n, \"{2}\", \"{4}\", \"{3}\", \"{1}\");"},{re:/^#([\w-]+)/,select:"n = byId(n, null, \"{1}\");"},{re:/^@([\w-]+)/,select:"return {firstChild:{nodeValue:attrValue(n, \"{1}\")}};"}],operators:{"=":function(a,v){return a==v},"!=":function(a,v){return a!=v},"^=":function(a,v){return a&&a.substr(0,v.length)==v},"$=":function(a,v){return a&&a.substr(a.length-v.length)==v},"*=":function(a,v){return a&&a.indexOf(v)!==-1},"%=":function(a,v){return(a%v)==0},"|=":function(a,v){return a&&(a==v||a.substr(0,v.length+1)==v+"-")},"~=":function(a,v){return a&&(" "+a+" ").indexOf(" "+v+" ")!=-1}},pseudos:{"first-child":function(c){var r=[],ri=-1,n;for(var i=0,ci;ci=n=c[i];i++){while((n=n.previousSibling)&&n.nodeType!=1){}if(!n){r[++ri]=ci}}return r},"last-child":function(c){var r=[],ri=-1,n;for(var i=0,ci;ci=n=c[i];i++){while((n=n.nextSibling)&&n.nodeType!=1){}if(!n){r[++ri]=ci}}return r},"nth-child":function(c,a){var r=[],ri=-1;var m=nthRe.exec(a=="even"&&"2n"||a=="odd"&&"2n+1"||!nthRe2.test(a)&&"n+"+a||a);var f=(m[1]||1)-0,l=m[2]-0;for(var i=0,n;n=c[i];i++){var pn=n.parentNode;if(batch!=pn._batch){var j=0;for(var cn=pn.firstChild;cn;cn=cn.nextSibling){if(cn.nodeType==1){cn.nodeIndex=++j}}pn._batch=batch}if(f==1){if(l==0||n.nodeIndex==l){r[++ri]=n}}else{if((n.nodeIndex+l)%f==0){r[++ri]=n}}}return r},"only-child":function(c){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(!prev(ci)&&!next(ci)){r[++ri]=ci}}return r},"empty":function(c){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){var cns=ci.childNodes,j=0,cn,empty=true;while(cn=cns[j]){++j;if(cn.nodeType==1||cn.nodeType==3){empty=false;break}}if(empty){r[++ri]=ci}}return r},"contains":function(c,v){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if((ci.textContent||ci.innerText||"").indexOf(v)!=-1){r[++ri]=ci}}return r},"nodeValue":function(c,v){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(ci.firstChild&&ci.firstChild.nodeValue==v){r[++ri]=ci}}return r},"checked":function(c){var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(ci.checked==true){r[++ri]=ci}}return r},"not":function(c,ss){return Ext.DomQuery.filter(c,ss,true)},"any":function(c,selectors){var ss=selectors.split("|");var r=[],ri=-1,s;for(var i=0,ci;ci=c[i];i++){for(var j=0;s=ss[j];j++){if(Ext.DomQuery.is(ci,s)){r[++ri]=ci;break}}}return r},"odd":function(c){return this["nth-child"](c,"odd")},"even":function(c){return this["nth-child"](c,"even")},"nth":function(c,a){return c[a-1]||[]},"first":function(c){return c[0]||[]},"last":function(c){return c[c.length-1]||[]},"has":function(c,ss){var s=Ext.DomQuery.select;var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){if(s(ss,ci).length>0){r[++ri]=ci}}return r},"next":function(c,ss){var is=Ext.DomQuery.is;var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){var n=next(ci);if(n&&is(n,ss)){r[++ri]=ci}}return r},"prev":function(c,ss){var is=Ext.DomQuery.is;var r=[],ri=-1;for(var i=0,ci;ci=c[i];i++){var n=prev(ci);if(n&&is(n,ss)){r[++ri]=ci}}return r}}}}();Ext.query=Ext.DomQuery.select;
+Ext.util.Observable=function(){if(this.listeners){this.on(this.listeners);delete this.listeners}};Ext.util.Observable.prototype={fireEvent:function(){if(this.eventsSuspended!==true){var A=this.events[arguments[0].toLowerCase()];if(typeof A=="object"){return A.fire.apply(A,Array.prototype.slice.call(arguments,1))}}return true},filterOptRe:/^(?:scope|delay|buffer|single)$/,addListener:function(A,C,B,F){if(typeof A=="object"){F=A;for(var E in F){if(this.filterOptRe.test(E)){continue}if(typeof F[E]=="function"){this.addListener(E,F[E],F.scope,F)}else{this.addListener(E,F[E].fn,F[E].scope,F[E])}}return }F=(!F||typeof F=="boolean")?{}:F;A=A.toLowerCase();var D=this.events[A]||true;if(typeof D=="boolean"){D=new Ext.util.Event(this,A);this.events[A]=D}D.addListener(C,B,F)},removeListener:function(A,C,B){var D=this.events[A.toLowerCase()];if(typeof D=="object"){D.removeListener(C,B)}},purgeListeners:function(){for(var A in this.events){if(typeof this.events[A]=="object"){this.events[A].clearListeners()}}},relayEvents:function(F,D){var E=function(G){return function(){return this.fireEvent.apply(this,Ext.combine(G,Array.prototype.slice.call(arguments,0)))}};for(var C=0,A=D.length;C<A;C++){var B=D[C];if(!this.events[B]){this.events[B]=true}F.on(B,E(B),this)}},addEvents:function(D){if(!this.events){this.events={}}if(typeof D=="string"){for(var C=0,A=arguments,B;B=A[C];C++){if(!this.events[A[C]]){this.events[A[C]]=true}}}else{Ext.applyIf(this.events,D)}},hasListener:function(A){var B=this.events[A];return typeof B=="object"&&B.listeners.length>0},suspendEvents:function(){this.eventsSuspended=true},resumeEvents:function(){this.eventsSuspended=false},getMethodEvent:function(G){if(!this.methodEvents){this.methodEvents={}}var F=this.methodEvents[G];if(!F){F={};this.methodEvents[G]=F;F.originalFn=this[G];F.methodName=G;F.before=[];F.after=[];var C,B,D;var E=this;var A=function(J,I,H){if((B=J.apply(I||E,H))!==undefined){if(typeof B==="object"){if(B.returnValue!==undefined){C=B.returnValue}else{C=B}if(B.cancel===true){D=true}}else{if(B===false){D=true}else{C=B}}}};this[G]=function(){C=B=undefined;D=false;var I=Array.prototype.slice.call(arguments,0);for(var J=0,H=F.before.length;J<H;J++){A(F.before[J].fn,F.before[J].scope,I);if(D){return C}}if((B=F.originalFn.apply(E,I))!==undefined){C=B}for(var J=0,H=F.after.length;J<H;J++){A(F.after[J].fn,F.after[J].scope,I);if(D){return C}}return C}}return F},beforeMethod:function(D,B,A){var C=this.getMethodEvent(D);C.before.push({fn:B,scope:A})},afterMethod:function(D,B,A){var C=this.getMethodEvent(D);C.after.push({fn:B,scope:A})},removeMethodListener:function(F,D,C){var E=this.getMethodEvent(F);for(var B=0,A=E.before.length;B<A;B++){if(E.before[B].fn==D&&E.before[B].scope==C){E.before.splice(B,1);return }}for(var B=0,A=E.after.length;B<A;B++){if(E.after[B].fn==D&&E.after[B].scope==C){E.after.splice(B,1);return }}}};Ext.util.Observable.prototype.on=Ext.util.Observable.prototype.addListener;Ext.util.Observable.prototype.un=Ext.util.Observable.prototype.removeListener;Ext.util.Observable.capture=function(C,B,A){C.fireEvent=C.fireEvent.createInterceptor(B,A)};Ext.util.Observable.releaseCapture=function(A){A.fireEvent=Ext.util.Observable.prototype.fireEvent};(function(){var B=function(F,G,E){var D=new Ext.util.DelayedTask();return function(){D.delay(G.buffer,F,E,Array.prototype.slice.call(arguments,0))}};var C=function(F,G,E,D){return function(){G.removeListener(E,D);return F.apply(D,arguments)}};var A=function(E,F,D){return function(){var G=Array.prototype.slice.call(arguments,0);setTimeout(function(){E.apply(D,G)},F.delay||10)}};Ext.util.Event=function(E,D){this.name=D;this.obj=E;this.listeners=[]};Ext.util.Event.prototype={addListener:function(G,F,E){F=F||this.obj;if(!this.isListening(G,F)){var D=this.createListener(G,F,E);if(!this.firing){this.listeners.push(D)}else{this.listeners=this.listeners.slice(0);this.listeners.push(D)}}},createListener:function(G,F,H){H=H||{};F=F||this.obj;var D={fn:G,scope:F,options:H};var E=G;if(H.delay){E=A(E,H,F)}if(H.single){E=C(E,this,G,F)}if(H.buffer){E=B(E,H,F)}D.fireFn=E;return D},findListener:function(I,H){H=H||this.obj;var F=this.listeners;for(var G=0,D=F.length;G<D;G++){var E=F[G];if(E.fn==I&&E.scope==H){return G}}return -1},isListening:function(E,D){return this.findListener(E,D)!=-1},removeListener:function(F,E){var D;if((D=this.findListener(F,E))!=-1){if(!this.firing){this.listeners.splice(D,1)}else{this.listeners=this.listeners.slice(0);this.listeners.splice(D,1)}return true}return false},clearListeners:function(){this.listeners=[]},fire:function(){var F=this.listeners,I,D=F.length;if(D>0){this.firing=true;var G=Array.prototype.slice.call(arguments,0);for(var H=0;H<D;H++){var E=F[H];if(E.fireFn.apply(E.scope||this.obj||window,arguments)===false){this.firing=false;return false}}this.firing=false}return true}}})();
+Ext.EventManager=function(){var X,Q,M=false;var N,W,H,S;var P=Ext.lib.Event;var R=Ext.lib.Dom;var A="Ex"+"t";var J={};var O=function(b,E,a,Z,Y){var d=Ext.id(b);if(!J[d]){J[d]={}}var c=J[d];if(!c[E]){c[E]=[]}var D=c[E];D.push({id:d,ename:E,fn:a,wrap:Z,scope:Y});P.on(b,E,Z);if(E=="mousewheel"&&b.addEventListener){b.addEventListener("DOMMouseScroll",Z,false);P.on(window,"unload",function(){b.removeEventListener("DOMMouseScroll",Z,false)})}if(E=="mousedown"&&b==document){Ext.EventManager.stoppedMouseDownEvent.addListener(Z)}};var I=function(Y,a,e,g){Y=Ext.getDom(Y);var D=Ext.id(Y),f=J[D],E;if(f){var c=f[a],Z;if(c){for(var b=0,d=c.length;b<d;b++){Z=c[b];if(Z.fn==e&&(!g||Z.scope==g)){E=Z.wrap;P.un(Y,a,E);c.splice(b,1);break}}}}if(a=="mousewheel"&&Y.addEventListener&&E){Y.removeEventListener("DOMMouseScroll",E,false)}if(a=="mousedown"&&Y==document&&E){Ext.EventManager.stoppedMouseDownEvent.removeListener(E)}};var F=function(a){a=Ext.getDom(a);var c=Ext.id(a),b=J[c],E;if(b){for(var Z in b){if(b.hasOwnProperty(Z)){E=b[Z];for(var Y=0,D=E.length;Y<D;Y++){P.un(a,Z,E[Y].wrap);E[Y]=null}}b[Z]=null}delete J[c]}};var C=function(){if(!M){M=Ext.isReady=true;if(Ext.isGecko||Ext.isOpera){document.removeEventListener("DOMContentLoaded",C,false)}}if(Q){clearInterval(Q);Q=null}if(X){X.fire();X.clearListeners()}};var B=function(){X=new Ext.util.Event();if(Ext.isReady){return }P.on(window,"load",C);if(Ext.isGecko||Ext.isOpera){document.addEventListener("DOMContentLoaded",C,false)}else{if(Ext.isIE){Q=setInterval(function(){try{Ext.isReady||(document.documentElement.doScroll("left"))}catch(D){return }C()},5);document.onreadystatechange=function(){if(document.readyState=="complete"){document.onreadystatechange=null;C()}}}else{if(Ext.isSafari){Q=setInterval(function(){var D=document.readyState;if(D=="complete"){C()}},10)}}}};var V=function(E,Y){var D=new Ext.util.DelayedTask(E);return function(Z){Z=new Ext.EventObjectImpl(Z);D.delay(Y.buffer,E,null,[Z])}};var T=function(a,Z,D,Y,E){return function(b){Ext.EventManager.removeListener(Z,D,Y,E);a(b)}};var G=function(D,E){return function(Y){Y=new Ext.EventObjectImpl(Y);setTimeout(function(){D(Y)},E.delay||10)}};var L=function(Y,E,D,c,b){var d=(!D||typeof D=="boolean")?{}:D;c=c||d.fn;b=b||d.scope;var a=Ext.getDom(Y);if(!a){throw"Error listening for \""+E+"\". Element \""+Y+"\" doesn't exist."}var Z=function(g){if(!window[A]){return }g=Ext.EventObject.setEvent(g);var f;if(d.delegate){f=g.getTarget(d.delegate,a);if(!f){return }}else{f=g.target}if(d.stopEvent===true){g.stopEvent()}if(d.preventDefault===true){g.preventDefault()}if(d.stopPropagation===true){g.stopPropagation()}if(d.normalized===false){g=g.browserEvent}c.call(b||a,g,f,d)};if(d.delay){Z=G(Z,d)}if(d.single){Z=T(Z,a,E,c,b)}if(d.buffer){Z=V(Z,d)}O(a,E,c,Z,b);return Z};var K=/^(?:scope|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized|args|delegate)$/;var U={addListener:function(Y,D,a,Z,E){if(typeof D=="object"){var c=D;for(var b in c){if(K.test(b)){continue}if(typeof c[b]=="function"){L(Y,b,c,c[b],c.scope)}else{L(Y,b,c[b])}}return }return L(Y,D,E,a,Z)},removeListener:function(E,D,Z,Y){return I(E,D,Z,Y)},removeAll:function(D){return F(D)},onDocumentReady:function(Y,E,D){if(!X){B()}if(M||Ext.isReady){D||(D={});Y.defer(D.delay||0,E)}else{X.addListener(Y,E,D)}},onWindowResize:function(Y,E,D){if(!N){N=new Ext.util.Event();W=new Ext.util.DelayedTask(function(){N.fire(R.getViewWidth(),R.getViewHeight())});P.on(window,"resize",this.fireWindowResize,this)}N.addListener(Y,E,D)},fireWindowResize:function(){if(N){if((Ext.isIE||Ext.isAir)&&W){W.delay(50)}else{N.fire(R.getViewWidth(),R.getViewHeight())}}},onTextResize:function(Z,Y,D){if(!H){H=new Ext.util.Event();var E=new Ext.Element(document.createElement("div"));E.dom.className="x-text-resize";E.dom.innerHTML="X";E.appendTo(document.body);S=E.dom.offsetHeight;setInterval(function(){if(E.dom.offsetHeight!=S){H.fire(S,S=E.dom.offsetHeight)}},this.textResizeInterval)}H.addListener(Z,Y,D)},removeResizeListener:function(E,D){if(N){N.removeListener(E,D)}},fireResize:function(){if(N){N.fire(R.getViewWidth(),R.getViewHeight())}},ieDeferSrc:false,textResizeInterval:50};U.on=U.addListener;U.un=U.removeListener;U.stoppedMouseDownEvent=new Ext.util.Event();return U}();Ext.onReady=Ext.EventManager.onDocumentReady;(function(){var A=function(){var C=document.body||document.getElementsByTagName("body")[0];if(!C){return false}var B=[" ",Ext.isIE?"ext-ie "+(Ext.isIE6?"ext-ie6":"ext-ie7"):Ext.isGecko?"ext-gecko "+(Ext.isGecko2?"ext-gecko2":"ext-gecko3"):Ext.isOpera?"ext-opera":Ext.isSafari?"ext-safari":""];if(Ext.isMac){B.push("ext-mac")}if(Ext.isLinux){B.push("ext-linux")}if(Ext.isBorderBox){B.push("ext-border-box")}if(Ext.isStrict){var D=C.parentNode;if(D){D.className+=" ext-strict"}}C.className+=B.join(" ");return true};if(!A()){Ext.onReady(A)}})();Ext.EventObject=function(){var B=Ext.lib.Event;var A={3:13,63234:37,63235:39,63232:38,63233:40,63276:33,63277:34,63272:46,63273:36,63275:35};var C=Ext.isIE?{1:0,4:1,2:2}:(Ext.isSafari?{1:0,2:1,3:2}:{0:0,1:1,2:2});Ext.EventObjectImpl=function(D){if(D){this.setEvent(D.browserEvent||D)}};Ext.EventObjectImpl.prototype={browserEvent:null,button:-1,shiftKey:false,ctrlKey:false,altKey:false,BACKSPACE:8,TAB:9,NUM_CENTER:12,ENTER:13,RETURN:13,SHIFT:16,CTRL:17,CONTROL:17,ALT:18,PAUSE:19,CAPS_LOCK:20,ESC:27,SPACE:32,PAGE_UP:33,PAGEUP:33,PAGE_DOWN:34,PAGEDOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,PRINT_SCREEN:44,INSERT:45,DELETE:46,ZERO:48,ONE:49,TWO:50,THREE:51,FOUR:52,FIVE:53,SIX:54,SEVEN:55,EIGHT:56,NINE:57,A:65,B:66,C:67,D:68,E:69,F:70,G:71,H:72,I:73,J:74,K:75,L:76,M:77,N:78,O:79,P:80,Q:81,R:82,S:83,T:84,U:85,V:86,W:87,X:88,Y:89,Z:90,CONTEXT_MENU:93,NUM_ZERO:96,NUM_ONE:97,NUM_TWO:98,NUM_THREE:99,NUM_FOUR:100,NUM_FIVE:101,NUM_SIX:102,NUM_SEVEN:103,NUM_EIGHT:104,NUM_NINE:105,NUM_MULTIPLY:106,NUM_PLUS:107,NUM_MINUS:109,NUM_PERIOD:110,NUM_DIVISION:111,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,setEvent:function(D){if(D==this||(D&&D.browserEvent)){return D}this.browserEvent=D;if(D){this.button=D.button?C[D.button]:(D.which?D.which-1:-1);if(D.type=="click"&&this.button==-1){this.button=0}this.type=D.type;this.shiftKey=D.shiftKey;this.ctrlKey=D.ctrlKey||D.metaKey;this.altKey=D.altKey;this.keyCode=D.keyCode;this.charCode=D.charCode;this.target=B.getTarget(D);this.xy=B.getXY(D)}else{this.button=-1;this.shiftKey=false;this.ctrlKey=false;this.altKey=false;this.keyCode=0;this.charCode=0;this.target=null;this.xy=[0,0]}return this},stopEvent:function(){if(this.browserEvent){if(this.browserEvent.type=="mousedown"){Ext.EventManager.stoppedMouseDownEvent.fire(this)}B.stopEvent(this.browserEvent)}},preventDefault:function(){if(this.browserEvent){B.preventDefault(this.browserEvent)}},isNavKeyPress:function(){var D=this.keyCode;D=Ext.isSafari?(A[D]||D):D;return(D>=33&&D<=40)||D==this.RETURN||D==this.TAB||D==this.ESC},isSpecialKey:function(){var D=this.keyCode;return(this.type=="keypress"&&this.ctrlKey)||D==9||D==13||D==40||D==27||(D==16)||(D==17)||(D>=18&&D<=20)||(D>=33&&D<=35)||(D>=36&&D<=39)||(D>=44&&D<=45)},stopPropagation:function(){if(this.browserEvent){if(this.browserEvent.type=="mousedown"){Ext.EventManager.stoppedMouseDownEvent.fire(this)}B.stopPropagation(this.browserEvent)}},getCharCode:function(){return this.charCode||this.keyCode},getKey:function(){var D=this.keyCode||this.charCode;return Ext.isSafari?(A[D]||D):D},getPageX:function(){return this.xy[0]},getPageY:function(){return this.xy[1]},getTime:function(){if(this.browserEvent){return B.getTime(this.browserEvent)}return null},getXY:function(){return this.xy},getTarget:function(E,F,D){return E?Ext.fly(this.target).findParent(E,F,D):(D?Ext.get(this.target):this.target)},getRelatedTarget:function(){if(this.browserEvent){return B.getRelatedTarget(this.browserEvent)}return null},getWheelDelta:function(){var D=this.browserEvent;var E=0;if(D.wheelDelta){E=D.wheelDelta/120}else{if(D.detail){E=-D.detail/3}}return E},hasModifier:function(){return((this.ctrlKey||this.altKey)||this.shiftKey)?true:false},within:function(E,F){var D=this[F?"getRelatedTarget":"getTarget"]();return D&&Ext.fly(E).contains(D)},getPoint:function(){return new Ext.lib.Point(this.xy[0],this.xy[1])}};return new Ext.EventObjectImpl()}();
+(function(){var D=Ext.lib.Dom;var E=Ext.lib.Event;var A=Ext.lib.Anim;var propCache={};var camelRe=/(-[a-z])/gi;var camelFn=function(m,a){return a.charAt(1).toUpperCase()};var view=document.defaultView;Ext.Element=function(element,forceNew){var dom=typeof element=="string"?document.getElementById(element):element;if(!dom){return null}var id=dom.id;if(forceNew!==true&&id&&Ext.Element.cache[id]){return Ext.Element.cache[id]}this.dom=dom;this.id=id||Ext.id(dom)};var El=Ext.Element;El.prototype={originalDisplay:"",visibilityMode:1,defaultUnit:"px",setVisibilityMode:function(visMode){this.visibilityMode=visMode;return this},enableDisplayMode:function(display){this.setVisibilityMode(El.DISPLAY);if(typeof display!="undefined"){this.originalDisplay=display}return this},findParent:function(simpleSelector,maxDepth,returnEl){var p=this.dom,b=document.body,depth=0,dq=Ext.DomQuery,stopEl;maxDepth=maxDepth||50;if(typeof maxDepth!="number"){stopEl=Ext.getDom(maxDepth);maxDepth=10}while(p&&p.nodeType==1&&depth<maxDepth&&p!=b&&p!=stopEl){if(dq.is(p,simpleSelector)){return returnEl?Ext.get(p):p}depth++;p=p.parentNode}return null},findParentNode:function(simpleSelector,maxDepth,returnEl){var p=Ext.fly(this.dom.parentNode,"_internal");return p?p.findParent(simpleSelector,maxDepth,returnEl):null},up:function(simpleSelector,maxDepth){return this.findParentNode(simpleSelector,maxDepth,true)},is:function(simpleSelector){return Ext.DomQuery.is(this.dom,simpleSelector)},animate:function(args,duration,onComplete,easing,animType){this.anim(args,{duration:duration,callback:onComplete,easing:easing},animType);return this},anim:function(args,opt,animType,defaultDur,defaultEase,cb){animType=animType||"run";opt=opt||{};var anim=Ext.lib.Anim[animType](this.dom,args,(opt.duration||defaultDur)||0.35,(opt.easing||defaultEase)||"easeOut",function(){Ext.callback(cb,this);Ext.callback(opt.callback,opt.scope||this,[this,opt])},this);opt.anim=anim;return anim},preanim:function(a,i){return !a[i]?false:(typeof a[i]=="object"?a[i]:{duration:a[i+1],callback:a[i+2],easing:a[i+3]})},clean:function(forceReclean){if(this.isCleaned&&forceReclean!==true){return this}var ns=/\S/;var d=this.dom,n=d.firstChild,ni=-1;while(n){var nx=n.nextSibling;if(n.nodeType==3&&!ns.test(n.nodeValue)){d.removeChild(n)}else{n.nodeIndex=++ni}n=nx}this.isCleaned=true;return this},scrollIntoView:function(container,hscroll){var c=Ext.getDom(container)||Ext.getBody().dom;var el=this.dom;var o=this.getOffsetsTo(c),l=o[0]+c.scrollLeft,t=o[1]+c.scrollTop,b=t+el.offsetHeight,r=l+el.offsetWidth;var ch=c.clientHeight;var ct=parseInt(c.scrollTop,10);var cl=parseInt(c.scrollLeft,10);var cb=ct+ch;var cr=cl+c.clientWidth;if(el.offsetHeight>ch||t<ct){c.scrollTop=t}else{if(b>cb){c.scrollTop=b-ch}}c.scrollTop=c.scrollTop;if(hscroll!==false){if(el.offsetWidth>c.clientWidth||l<cl){c.scrollLeft=l}else{if(r>cr){c.scrollLeft=r-c.clientWidth}}c.scrollLeft=c.scrollLeft}return this},scrollChildIntoView:function(child,hscroll){Ext.fly(child,"_scrollChildIntoView").scrollIntoView(this,hscroll)},autoHeight:function(animate,duration,onComplete,easing){var oldHeight=this.getHeight();this.clip();this.setHeight(1);setTimeout(function(){var height=parseInt(this.dom.scrollHeight,10);if(!animate){this.setHeight(height);this.unclip();if(typeof onComplete=="function"){onComplete()}}else{this.setHeight(oldHeight);this.setHeight(height,animate,duration,function(){this.unclip();if(typeof onComplete=="function"){onComplete()}}.createDelegate(this),easing)}}.createDelegate(this),0);return this},contains:function(el){if(!el){return false}return D.isAncestor(this.dom,el.dom?el.dom:el)},isVisible:function(deep){var vis=!(this.getStyle("visibility")=="hidden"||this.getStyle("display")=="none");if(deep!==true||!vis){return vis}var p=this.dom.parentNode;while(p&&p.tagName.toLowerCase()!="body"){if(!Ext.fly(p,"_isVisible").isVisible()){return false}p=p.parentNode}return true},select:function(selector,unique){return El.select(selector,unique,this.dom)},query:function(selector){return Ext.DomQuery.select(selector,this.dom)},child:function(selector,returnDom){var n=Ext.DomQuery.selectNode(selector,this.dom);return returnDom?n:Ext.get(n)},down:function(selector,returnDom){var n=Ext.DomQuery.selectNode(" > "+selector,this.dom);return returnDom?n:Ext.get(n)},initDD:function(group,config,overrides){var dd=new Ext.dd.DD(Ext.id(this.dom),group,config);return Ext.apply(dd,overrides)},initDDProxy:function(group,config,overrides){var dd=new Ext.dd.DDProxy(Ext.id(this.dom),group,config);return Ext.apply(dd,overrides)},initDDTarget:function(group,config,overrides){var dd=new Ext.dd.DDTarget(Ext.id(this.dom),group,config);return Ext.apply(dd,overrides)},setVisible:function(visible,animate){if(!animate||!A){if(this.visibilityMode==El.DISPLAY){this.setDisplayed(visible)}else{this.fixDisplay();this.dom.style.visibility=visible?"visible":"hidden"}}else{var dom=this.dom;var visMode=this.visibilityMode;if(visible){this.setOpacity(0.01);this.setVisible(true)}this.anim({opacity:{to:(visible?1:0)}},this.preanim(arguments,1),null,0.35,"easeIn",function(){if(!visible){if(visMode==El.DISPLAY){dom.style.display="none"}else{dom.style.visibility="hidden"}Ext.get(dom).setOpacity(1)}})}return this},isDisplayed:function(){return this.getStyle("display")!="none"},toggle:function(animate){this.setVisible(!this.isVisible(),this.preanim(arguments,0));return this},setDisplayed:function(value){if(typeof value=="boolean"){value=value?this.originalDisplay:"none"}this.setStyle("display",value);return this},focus:function(){try{this.dom.focus()}catch(e){}return this},blur:function(){try{this.dom.blur()}catch(e){}return this},addClass:function(className){if(Ext.isArray(className)){for(var i=0,len=className.length;i<len;i++){this.addClass(className[i])}}else{if(className&&!this.hasClass(className)){this.dom.className=this.dom.className+" "+className}}return this},radioClass:function(className){var siblings=this.dom.parentNode.childNodes;for(var i=0;i<siblings.length;i++){var s=siblings[i];if(s.nodeType==1){Ext.get(s).removeClass(className)}}this.addClass(className);return this},removeClass:function(className){if(!className||!this.dom.className){return this}if(Ext.isArray(className)){for(var i=0,len=className.length;i<len;i++){this.removeClass(className[i])}}else{if(this.hasClass(className)){var re=this.classReCache[className];if(!re){re=new RegExp("(?:^|\\s+)"+className+"(?:\\s+|$)","g");this.classReCache[className]=re}this.dom.className=this.dom.className.replace(re," ")}}return this},classReCache:{},toggleClass:function(className){if(this.hasClass(className)){this.removeClass(className)}else{this.addClass(className)}return this},hasClass:function(className){return className&&(" "+this.dom.className+" ").indexOf(" "+className+" ")!=-1},replaceClass:function(oldClassName,newClassName){this.removeClass(oldClassName);this.addClass(newClassName);return this},getStyles:function(){var a=arguments,len=a.length,r={};for(var i=0;i<len;i++){r[a[i]]=this.getStyle(a[i])}return r},getStyle:function(){return view&&view.getComputedStyle?function(prop){var el=this.dom,v,cs,camel;if(prop=="float"){prop="cssFloat"}if(v=el.style[prop]){return v}if(cs=view.getComputedStyle(el,"")){if(!(camel=propCache[prop])){camel=propCache[prop]=prop.replace(camelRe,camelFn)}return cs[camel]}return null}:function(prop){var el=this.dom,v,cs,camel;if(prop=="opacity"){if(typeof el.style.filter=="string"){var m=el.style.filter.match(/alpha\(opacity=(.*)\)/i);if(m){var fv=parseFloat(m[1]);if(!isNaN(fv)){return fv?fv/100:0}}}return 1}else{if(prop=="float"){prop="styleFloat"}}if(!(camel=propCache[prop])){camel=propCache[prop]=prop.replace(camelRe,camelFn)}if(v=el.style[camel]){return v}if(cs=el.currentStyle){return cs[camel]}return null}}(),setStyle:function(prop,value){if(typeof prop=="string"){var camel;if(!(camel=propCache[prop])){camel=propCache[prop]=prop.replace(camelRe,camelFn)}if(camel=="opacity"){this.setOpacity(value)}else{this.dom.style[camel]=value}}else{for(var style in prop){if(typeof prop[style]!="function"){this.setStyle(style,prop[style])}}}return this},applyStyles:function(style){Ext.DomHelper.applyStyles(this.dom,style);return this},getX:function(){return D.getX(this.dom)},getY:function(){return D.getY(this.dom)},getXY:function(){return D.getXY(this.dom)},getOffsetsTo:function(el){var o=this.getXY();var e=Ext.fly(el,"_internal").getXY();return[o[0]-e[0],o[1]-e[1]]},setX:function(x,animate){if(!animate||!A){D.setX(this.dom,x)}else{this.setXY([x,this.getY()],this.preanim(arguments,1))}return this},setY:function(y,animate){if(!animate||!A){D.setY(this.dom,y)}else{this.setXY([this.getX(),y],this.preanim(arguments,1))}return this},setLeft:function(left){this.setStyle("left",this.addUnits(left));return this},setTop:function(top){this.setStyle("top",this.addUnits(top));return this},setRight:function(right){this.setStyle("right",this.addUnits(right));return this},setBottom:function(bottom){this.setStyle("bottom",this.addUnits(bottom));return this},setXY:function(pos,animate){if(!animate||!A){D.setXY(this.dom,pos)}else{this.anim({points:{to:pos}},this.preanim(arguments,1),"motion")}return this},setLocation:function(x,y,animate){this.setXY([x,y],this.preanim(arguments,2));return this},moveTo:function(x,y,animate){this.setXY([x,y],this.preanim(arguments,2));return this},getRegion:function(){return D.getRegion(this.dom)},getHeight:function(contentHeight){var h=this.dom.offsetHeight||0;h=contentHeight!==true?h:h-this.getBorderWidth("tb")-this.getPadding("tb");return h<0?0:h},getWidth:function(contentWidth){var w=this.dom.offsetWidth||0;w=contentWidth!==true?w:w-this.getBorderWidth("lr")-this.getPadding("lr");return w<0?0:w},getComputedHeight:function(){var h=Math.max(this.dom.offsetHeight,this.dom.clientHeight);if(!h){h=parseInt(this.getStyle("height"),10)||0;if(!this.isBorderBox()){h+=this.getFrameWidth("tb")}}return h},getComputedWidth:function(){var w=Math.max(this.dom.offsetWidth,this.dom.clientWidth);if(!w){w=parseInt(this.getStyle("width"),10)||0;if(!this.isBorderBox()){w+=this.getFrameWidth("lr")}}return w},getSize:function(contentSize){return{width:this.getWidth(contentSize),height:this.getHeight(contentSize)}},getStyleSize:function(){var w,h,d=this.dom,s=d.style;if(s.width&&s.width!="auto"){w=parseInt(s.width,10);if(Ext.isBorderBox){w-=this.getFrameWidth("lr")}}if(s.height&&s.height!="auto"){h=parseInt(s.height,10);if(Ext.isBorderBox){h-=this.getFrameWidth("tb")}}return{width:w||this.getWidth(true),height:h||this.getHeight(true)}},getViewSize:function(){var d=this.dom,doc=document,aw=0,ah=0;if(d==doc||d==doc.body){return{width:D.getViewWidth(),height:D.getViewHeight()}}else{return{width:d.clientWidth,height:d.clientHeight}}},getValue:function(asNumber){return asNumber?parseInt(this.dom.value,10):this.dom.value},adjustWidth:function(width){if(typeof width=="number"){if(this.autoBoxAdjust&&!this.isBorderBox()){width-=(this.getBorderWidth("lr")+this.getPadding("lr"))}if(width<0){width=0}}return width},adjustHeight:function(height){if(typeof height=="number"){if(this.autoBoxAdjust&&!this.isBorderBox()){height-=(this.getBorderWidth("tb")+this.getPadding("tb"))}if(height<0){height=0}}return height},setWidth:function(width,animate){width=this.adjustWidth(width);if(!animate||!A){this.dom.style.width=this.addUnits(width)}else{this.anim({width:{to:width}},this.preanim(arguments,1))}return this},setHeight:function(height,animate){height=this.adjustHeight(height);if(!animate||!A){this.dom.style.height=this.addUnits(height)}else{this.anim({height:{to:height}},this.preanim(arguments,1))}return this},setSize:function(width,height,animate){if(typeof width=="object"){height=width.height;width=width.width}width=this.adjustWidth(width);height=this.adjustHeight(height);if(!animate||!A){this.dom.style.width=this.addUnits(width);this.dom.style.height=this.addUnits(height)}else{this.anim({width:{to:width},height:{to:height}},this.preanim(arguments,2))}return this},setBounds:function(x,y,width,height,animate){if(!animate||!A){this.setSize(width,height);this.setLocation(x,y)}else{width=this.adjustWidth(width);height=this.adjustHeight(height);this.anim({points:{to:[x,y]},width:{to:width},height:{to:height}},this.preanim(arguments,4),"motion")}return this},setRegion:function(region,animate){this.setBounds(region.left,region.top,region.right-region.left,region.bottom-region.top,this.preanim(arguments,1));return this},addListener:function(eventName,fn,scope,options){Ext.EventManager.on(this.dom,eventName,fn,scope||this,options)},removeListener:function(eventName,fn,scope){Ext.EventManager.removeListener(this.dom,eventName,fn,scope||this);return this},removeAllListeners:function(){Ext.EventManager.removeAll(this.dom);return this},relayEvent:function(eventName,observable){this.on(eventName,function(e){observable.fireEvent(eventName,e)})},setOpacity:function(opacity,animate){if(!animate||!A){var s=this.dom.style;if(Ext.isIE){s.zoom=1;s.filter=(s.filter||"").replace(/alpha\([^\)]*\)/gi,"")+(opacity==1?"":" alpha(opacity="+opacity*100+")")}else{s.opacity=opacity}}else{this.anim({opacity:{to:opacity}},this.preanim(arguments,1),null,0.35,"easeIn")}return this},getLeft:function(local){if(!local){return this.getX()}else{return parseInt(this.getStyle("left"),10)||0}},getRight:function(local){if(!local){return this.getX()+this.getWidth()}else{return(this.getLeft(true)+this.getWidth())||0}},getTop:function(local){if(!local){return this.getY()}else{return parseInt(this.getStyle("top"),10)||0}},getBottom:function(local){if(!local){return this.getY()+this.getHeight()}else{return(this.getTop(true)+this.getHeight())||0}},position:function(pos,zIndex,x,y){if(!pos){if(this.getStyle("position")=="static"){this.setStyle("position","relative")}}else{this.setStyle("position",pos)}if(zIndex){this.setStyle("z-index",zIndex)}if(x!==undefined&&y!==undefined){this.setXY([x,y])}else{if(x!==undefined){this.setX(x)}else{if(y!==undefined){this.setY(y)}}}},clearPositioning:function(value){value=value||"";this.setStyle({"left":value,"right":value,"top":value,"bottom":value,"z-index":"","position":"static"});return this},getPositioning:function(){var l=this.getStyle("left");var t=this.getStyle("top");return{"position":this.getStyle("position"),"left":l,"right":l?"":this.getStyle("right"),"top":t,"bottom":t?"":this.getStyle("bottom"),"z-index":this.getStyle("z-index")}},getBorderWidth:function(side){return this.addStyles(side,El.borders)},getPadding:function(side){return this.addStyles(side,El.paddings)},setPositioning:function(pc){this.applyStyles(pc);if(pc.right=="auto"){this.dom.style.right=""}if(pc.bottom=="auto"){this.dom.style.bottom=""}return this},fixDisplay:function(){if(this.getStyle("display")=="none"){this.setStyle("visibility","hidden");this.setStyle("display",this.originalDisplay);if(this.getStyle("display")=="none"){this.setStyle("display","block")}}},setOverflow:function(v){if(v=="auto"&&Ext.isMac&&Ext.isGecko2){this.dom.style.overflow="hidden";(function(){this.dom.style.overflow="auto"}).defer(1,this)}else{this.dom.style.overflow=v}},setLeftTop:function(left,top){this.dom.style.left=this.addUnits(left);this.dom.style.top=this.addUnits(top);return this},move:function(direction,distance,animate){var xy=this.getXY();direction=direction.toLowerCase();switch(direction){case"l":case"left":this.moveTo(xy[0]-distance,xy[1],this.preanim(arguments,2));break;case"r":case"right":this.moveTo(xy[0]+distance,xy[1],this.preanim(arguments,2));break;case"t":case"top":case"up":this.moveTo(xy[0],xy[1]-distance,this.preanim(arguments,2));break;case"b":case"bottom":case"down":this.moveTo(xy[0],xy[1]+distance,this.preanim(arguments,2));break}return this},clip:function(){if(!this.isClipped){this.isClipped=true;this.originalClip={"o":this.getStyle("overflow"),"x":this.getStyle("overflow-x"),"y":this.getStyle("overflow-y")};this.setStyle("overflow","hidden");this.setStyle("overflow-x","hidden");this.setStyle("overflow-y","hidden")}return this},unclip:function(){if(this.isClipped){this.isClipped=false;var o=this.originalClip;if(o.o){this.setStyle("overflow",o.o)}if(o.x){this.setStyle("overflow-x",o.x)}if(o.y){this.setStyle("overflow-y",o.y)}}return this},getAnchorXY:function(anchor,local,s){var w,h,vp=false;if(!s){var d=this.dom;if(d==document.body||d==document){vp=true;w=D.getViewWidth();h=D.getViewHeight()}else{w=this.getWidth();h=this.getHeight()}}else{w=s.width;h=s.height}var x=0,y=0,r=Math.round;switch((anchor||"tl").toLowerCase()){case"c":x=r(w*0.5);y=r(h*0.5);break;case"t":x=r(w*0.5);y=0;break;case"l":x=0;y=r(h*0.5);break;case"r":x=w;y=r(h*0.5);break;case"b":x=r(w*0.5);y=h;break;case"tl":x=0;y=0;break;case"bl":x=0;y=h;break;case"br":x=w;y=h;break;case"tr":x=w;y=0;break}if(local===true){return[x,y]}if(vp){var sc=this.getScroll();return[x+sc.left,y+sc.top]}var o=this.getXY();return[x+o[0],y+o[1]]},getAlignToXY:function(el,p,o){el=Ext.get(el);if(!el||!el.dom){throw"Element.alignToXY with an element that doesn't exist"}var d=this.dom;var c=false;var p1="",p2="";o=o||[0,0];if(!p){p="tl-bl"}else{if(p=="?"){p="tl-bl?"}else{if(p.indexOf("-")==-1){p="tl-"+p}}}p=p.toLowerCase();var m=p.match(/^([a-z]+)-([a-z]+)(\?)?$/);if(!m){throw"Element.alignTo with an invalid alignment "+p}p1=m[1];p2=m[2];c=!!m[3];var a1=this.getAnchorXY(p1,true);var a2=el.getAnchorXY(p2,false);var x=a2[0]-a1[0]+o[0];var y=a2[1]-a1[1]+o[1];if(c){var w=this.getWidth(),h=this.getHeight(),r=el.getRegion();var dw=D.getViewWidth()-5,dh=D.getViewHeight()-5;var p1y=p1.charAt(0),p1x=p1.charAt(p1.length-1);var p2y=p2.charAt(0),p2x=p2.charAt(p2.length-1);var swapY=((p1y=="t"&&p2y=="b")||(p1y=="b"&&p2y=="t"));var swapX=((p1x=="r"&&p2x=="l")||(p1x=="l"&&p2x=="r"));var doc=document;var scrollX=(doc.documentElement.scrollLeft||doc.body.scrollLeft||0)+5;var scrollY=(doc.documentElement.scrollTop||doc.body.scrollTop||0)+5;if((x+w)>dw+scrollX){x=swapX?r.left-w:dw+scrollX-w}if(x<scrollX){x=swapX?r.right:scrollX}if((y+h)>dh+scrollY){y=swapY?r.top-h:dh+scrollY-h}if(y<scrollY){y=swapY?r.bottom:scrollY}}return[x,y]},getConstrainToXY:function(){var os={top:0,left:0,bottom:0,right:0};return function(el,local,offsets,proposedXY){el=Ext.get(el);offsets=offsets?Ext.applyIf(offsets,os):os;var vw,vh,vx=0,vy=0;if(el.dom==document.body||el.dom==document){vw=Ext.lib.Dom.getViewWidth();vh=Ext.lib.Dom.getViewHeight()}else{vw=el.dom.clientWidth;vh=el.dom.clientHeight;if(!local){var vxy=el.getXY();vx=vxy[0];vy=vxy[1]}}var s=el.getScroll();vx+=offsets.left+s.left;vy+=offsets.top+s.top;vw-=offsets.right;vh-=offsets.bottom;var vr=vx+vw;var vb=vy+vh;var xy=proposedXY||(!local?this.getXY():[this.getLeft(true),this.getTop(true)]);var x=xy[0],y=xy[1];var w=this.dom.offsetWidth,h=this.dom.offsetHeight;var moved=false;if((x+w)>vr){x=vr-w;moved=true}if((y+h)>vb){y=vb-h;moved=true}if(x<vx){x=vx;moved=true}if(y<vy){y=vy;moved=true}return moved?[x,y]:false}}(),adjustForConstraints:function(xy,parent,offsets){return this.getConstrainToXY(parent||document,false,offsets,xy)||xy},alignTo:function(element,position,offsets,animate){var xy=this.getAlignToXY(element,position,offsets);this.setXY(xy,this.preanim(arguments,3));return this},anchorTo:function(el,alignment,offsets,animate,monitorScroll,callback){var action=function(){this.alignTo(el,alignment,offsets,animate);Ext.callback(callback,this)};Ext.EventManager.onWindowResize(action,this);var tm=typeof monitorScroll;if(tm!="undefined"){Ext.EventManager.on(window,"scroll",action,this,{buffer:tm=="number"?monitorScroll:50})}action.call(this);return this},clearOpacity:function(){if(window.ActiveXObject){if(typeof this.dom.style.filter=="string"&&(/alpha/i).test(this.dom.style.filter)){this.dom.style.filter=""}}else{this.dom.style.opacity="";this.dom.style["-moz-opacity"]="";this.dom.style["-khtml-opacity"]=""}return this},hide:function(animate){this.setVisible(false,this.preanim(arguments,0));return this},show:function(animate){this.setVisible(true,this.preanim(arguments,0));return this},addUnits:function(size){return Ext.Element.addUnits(size,this.defaultUnit)},update:function(html,loadScripts,callback){if(typeof html=="undefined"){html=""}if(loadScripts!==true){this.dom.innerHTML=html;if(typeof callback=="function"){callback()}return this}var id=Ext.id();var dom=this.dom;html+="<span id=\""+id+"\"></span>";E.onAvailable(id,function(){var hd=document.getElementsByTagName("head")[0];var re=/(?:<script([^>]*)?>)((\n|\r|.)*?)(?:<\/script>)/ig;var srcRe=/\ssrc=([\'\"])(.*?)\1/i;var typeRe=/\stype=([\'\"])(.*?)\1/i;var match;while(match=re.exec(html)){var attrs=match[1];var srcMatch=attrs?attrs.match(srcRe):false;if(srcMatch&&srcMatch[2]){var s=document.createElement("script");s.src=srcMatch[2];var typeMatch=attrs.match(typeRe);if(typeMatch&&typeMatch[2]){s.type=typeMatch[2]}hd.appendChild(s)}else{if(match[2]&&match[2].length>0){if(window.execScript){window.execScript(match[2])}else{window.eval(match[2])}}}}var el=document.getElementById(id);if(el){Ext.removeNode(el)}if(typeof callback=="function"){callback()}});dom.innerHTML=html.replace(/(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)/ig,"");return this},load:function(){var um=this.getUpdater();um.update.apply(um,arguments);return this},getUpdater:function(){if(!this.updateManager){this.updateManager=new Ext.Updater(this)}return this.updateManager},unselectable:function(){this.dom.unselectable="on";this.swallowEvent("selectstart",true);this.applyStyles("-moz-user-select:none;-khtml-user-select:none;");this.addClass("x-unselectable");return this},getCenterXY:function(){return this.getAlignToXY(document,"c-c")},center:function(centerIn){this.alignTo(centerIn||document,"c-c");return this},isBorderBox:function(){return noBoxAdjust[this.dom.tagName.toLowerCase()]||Ext.isBorderBox},getBox:function(contentBox,local){var xy;if(!local){xy=this.getXY()}else{var left=parseInt(this.getStyle("left"),10)||0;var top=parseInt(this.getStyle("top"),10)||0;xy=[left,top]}var el=this.dom,w=el.offsetWidth,h=el.offsetHeight,bx;if(!contentBox){bx={x:xy[0],y:xy[1],0:xy[0],1:xy[1],width:w,height:h}}else{var l=this.getBorderWidth("l")+this.getPadding("l");var r=this.getBorderWidth("r")+this.getPadding("r");var t=this.getBorderWidth("t")+this.getPadding("t");var b=this.getBorderWidth("b")+this.getPadding("b");bx={x:xy[0]+l,y:xy[1]+t,0:xy[0]+l,1:xy[1]+t,width:w-(l+r),height:h-(t+b)}}bx.right=bx.x+bx.width;bx.bottom=bx.y+bx.height;return bx},getFrameWidth:function(sides,onlyContentBox){return onlyContentBox&&Ext.isBorderBox?0:(this.getPadding(sides)+this.getBorderWidth(sides))},setBox:function(box,adjust,animate){var w=box.width,h=box.height;if((adjust&&!this.autoBoxAdjust)&&!this.isBorderBox()){w-=(this.getBorderWidth("lr")+this.getPadding("lr"));h-=(this.getBorderWidth("tb")+this.getPadding("tb"))}this.setBounds(box.x,box.y,w,h,this.preanim(arguments,2));return this},repaint:function(){var dom=this.dom;this.addClass("x-repaint");setTimeout(function(){Ext.get(dom).removeClass("x-repaint")},1);return this},getMargins:function(side){if(!side){return{top:parseInt(this.getStyle("margin-top"),10)||0,left:parseInt(this.getStyle("margin-left"),10)||0,bottom:parseInt(this.getStyle("margin-bottom"),10)||0,right:parseInt(this.getStyle("margin-right"),10)||0}}else{return this.addStyles(side,El.margins)}},addStyles:function(sides,styles){var val=0,v,w;for(var i=0,len=sides.length;i<len;i++){v=this.getStyle(styles[sides.charAt(i)]);if(v){w=parseInt(v,10);if(w){val+=(w>=0?w:-1*w)}}}return val},createProxy:function(config,renderTo,matchBox){config=typeof config=="object"?config:{tag:"div",cls:config};var proxy;if(renderTo){proxy=Ext.DomHelper.append(renderTo,config,true)}else{proxy=Ext.DomHelper.insertBefore(this.dom,config,true)}if(matchBox){proxy.setBox(this.getBox())}return proxy},mask:function(msg,msgCls){if(this.getStyle("position")=="static"){this.setStyle("position","relative")}if(this._maskMsg){this._maskMsg.remove()}if(this._mask){this._mask.remove()}this._mask=Ext.DomHelper.append(this.dom,{cls:"ext-el-mask"},true);this.addClass("x-masked");this._mask.setDisplayed(true);if(typeof msg=="string"){this._maskMsg=Ext.DomHelper.append(this.dom,{cls:"ext-el-mask-msg",cn:{tag:"div"}},true);var mm=this._maskMsg;mm.dom.className=msgCls?"ext-el-mask-msg "+msgCls:"ext-el-mask-msg";mm.dom.firstChild.innerHTML=msg;mm.setDisplayed(true);mm.center(this)}if(Ext.isIE&&!(Ext.isIE7&&Ext.isStrict)&&this.getStyle("height")=="auto"){this._mask.setSize(this.dom.clientWidth,this.getHeight())}return this._mask},unmask:function(){if(this._mask){if(this._maskMsg){this._maskMsg.remove();delete this._maskMsg}this._mask.remove();delete this._mask}this.removeClass("x-masked")},isMasked:function(){return this._mask&&this._mask.isVisible()},createShim:function(){var el=document.createElement("iframe");el.frameBorder="0";el.className="ext-shim";if(Ext.isIE&&Ext.isSecure){el.src=Ext.SSL_SECURE_URL}var shim=Ext.get(this.dom.parentNode.insertBefore(el,this.dom));shim.autoBoxAdjust=false;return shim},remove:function(){Ext.removeNode(this.dom);delete El.cache[this.dom.id]},hover:function(overFn,outFn,scope){var preOverFn=function(e){if(!e.within(this,true)){overFn.apply(scope||this,arguments)}};var preOutFn=function(e){if(!e.within(this,true)){outFn.apply(scope||this,arguments)}};this.on("mouseover",preOverFn,this.dom);this.on("mouseout",preOutFn,this.dom);return this},addClassOnOver:function(className){this.hover(function(){Ext.fly(this,"_internal").addClass(className)},function(){Ext.fly(this,"_internal").removeClass(className)});return this},addClassOnFocus:function(className){this.on("focus",function(){Ext.fly(this,"_internal").addClass(className)},this.dom);this.on("blur",function(){Ext.fly(this,"_internal").removeClass(className)},this.dom);return this},addClassOnClick:function(className){var dom=this.dom;this.on("mousedown",function(){Ext.fly(dom,"_internal").addClass(className);var d=Ext.getDoc();var fn=function(){Ext.fly(dom,"_internal").removeClass(className);d.removeListener("mouseup",fn)};d.on("mouseup",fn)});return this},swallowEvent:function(eventName,preventDefault){var fn=function(e){e.stopPropagation();if(preventDefault){e.preventDefault()}};if(Ext.isArray(eventName)){for(var i=0,len=eventName.length;i<len;i++){this.on(eventName[i],fn)}return this}this.on(eventName,fn);return this},parent:function(selector,returnDom){return this.matchNode("parentNode","parentNode",selector,returnDom)},next:function(selector,returnDom){return this.matchNode("nextSibling","nextSibling",selector,returnDom)},prev:function(selector,returnDom){return this.matchNode("previousSibling","previousSibling",selector,returnDom)},first:function(selector,returnDom){return this.matchNode("nextSibling","firstChild",selector,returnDom)},last:function(selector,returnDom){return this.matchNode("previousSibling","lastChild",selector,returnDom)},matchNode:function(dir,start,selector,returnDom){var n=this.dom[start];while(n){if(n.nodeType==1&&(!selector||Ext.DomQuery.is(n,selector))){return !returnDom?Ext.get(n):n}n=n[dir]}return null},appendChild:function(el){el=Ext.get(el);el.appendTo(this);return this},createChild:function(config,insertBefore,returnDom){config=config||{tag:"div"};if(insertBefore){return Ext.DomHelper.insertBefore(insertBefore,config,returnDom!==true)}return Ext.DomHelper[!this.dom.firstChild?"overwrite":"append"](this.dom,config,returnDom!==true)},appendTo:function(el){el=Ext.getDom(el);el.appendChild(this.dom);return this},insertBefore:function(el){el=Ext.getDom(el);el.parentNode.insertBefore(this.dom,el);return this},insertAfter:function(el){el=Ext.getDom(el);el.parentNode.insertBefore(this.dom,el.nextSibling);return this},insertFirst:function(el,returnDom){el=el||{};if(typeof el=="object"&&!el.nodeType&&!el.dom){return this.createChild(el,this.dom.firstChild,returnDom)}else{el=Ext.getDom(el);this.dom.insertBefore(el,this.dom.firstChild);return !returnDom?Ext.get(el):el}},insertSibling:function(el,where,returnDom){var rt;if(Ext.isArray(el)){for(var i=0,len=el.length;i<len;i++){rt=this.insertSibling(el[i],where,returnDom)}return rt}where=where?where.toLowerCase():"before";el=el||{};var refNode=where=="before"?this.dom:this.dom.nextSibling;if(typeof el=="object"&&!el.nodeType&&!el.dom){if(where=="after"&&!this.dom.nextSibling){rt=Ext.DomHelper.append(this.dom.parentNode,el,!returnDom)}else{rt=Ext.DomHelper[where=="after"?"insertAfter":"insertBefore"](this.dom,el,!returnDom)}}else{rt=this.dom.parentNode.insertBefore(Ext.getDom(el),refNode);if(!returnDom){rt=Ext.get(rt)}}return rt},wrap:function(config,returnDom){if(!config){config={tag:"div"}}var newEl=Ext.DomHelper.insertBefore(this.dom,config,!returnDom);newEl.dom?newEl.dom.appendChild(this.dom):newEl.appendChild(this.dom);return newEl},replace:function(el){el=Ext.get(el);this.insertBefore(el);el.remove();return this},replaceWith:function(el){if(typeof el=="object"&&!el.nodeType&&!el.dom){el=this.insertSibling(el,"before")}else{el=Ext.getDom(el);this.dom.parentNode.insertBefore(el,this.dom)}El.uncache(this.id);this.dom.parentNode.removeChild(this.dom);this.dom=el;this.id=Ext.id(el);El.cache[this.id]=this;return this},insertHtml:function(where,html,returnEl){var el=Ext.DomHelper.insertHtml(where,this.dom,html);return returnEl?Ext.get(el):el},set:function(o,useSet){var el=this.dom;useSet=typeof useSet=="undefined"?(el.setAttribute?true:false):useSet;for(var attr in o){if(attr=="style"||typeof o[attr]=="function"){continue}if(attr=="cls"){el.className=o["cls"]}else{if(o.hasOwnProperty(attr)){if(useSet){el.setAttribute(attr,o[attr])}else{el[attr]=o[attr]}}}}if(o.style){Ext.DomHelper.applyStyles(el,o.style)}return this},addKeyListener:function(key,fn,scope){var config;if(typeof key!="object"||Ext.isArray(key)){config={key:key,fn:fn,scope:scope}}else{config={key:key.key,shift:key.shift,ctrl:key.ctrl,alt:key.alt,fn:fn,scope:scope}}return new Ext.KeyMap(this,config)},addKeyMap:function(config){return new Ext.KeyMap(this,config)},isScrollable:function(){var dom=this.dom;return dom.scrollHeight>dom.clientHeight||dom.scrollWidth>dom.clientWidth},scrollTo:function(side,value,animate){var prop=side.toLowerCase()=="left"?"scrollLeft":"scrollTop";if(!animate||!A){this.dom[prop]=value}else{var to=prop=="scrollLeft"?[value,this.dom.scrollTop]:[this.dom.scrollLeft,value];this.anim({scroll:{"to":to}},this.preanim(arguments,2),"scroll")}return this},scroll:function(direction,distance,animate){if(!this.isScrollable()){return }var el=this.dom;var l=el.scrollLeft,t=el.scrollTop;var w=el.scrollWidth,h=el.scrollHeight;var cw=el.clientWidth,ch=el.clientHeight;direction=direction.toLowerCase();var scrolled=false;var a=this.preanim(arguments,2);switch(direction){case"l":case"left":if(w-l>cw){var v=Math.min(l+distance,w-cw);this.scrollTo("left",v,a);scrolled=true}break;case"r":case"right":if(l>0){var v=Math.max(l-distance,0);this.scrollTo("left",v,a);scrolled=true}break;case"t":case"top":case"up":if(t>0){var v=Math.max(t-distance,0);this.scrollTo("top",v,a);scrolled=true}break;case"b":case"bottom":case"down":if(h-t>ch){var v=Math.min(t+distance,h-ch);this.scrollTo("top",v,a);scrolled=true}break}return scrolled},translatePoints:function(x,y){if(typeof x=="object"||Ext.isArray(x)){y=x[1];x=x[0]}var p=this.getStyle("position");var o=this.getXY();var l=parseInt(this.getStyle("left"),10);var t=parseInt(this.getStyle("top"),10);if(isNaN(l)){l=(p=="relative")?0:this.dom.offsetLeft}if(isNaN(t)){t=(p=="relative")?0:this.dom.offsetTop}return{left:(x-o[0]+l),top:(y-o[1]+t)}},getScroll:function(){var d=this.dom,doc=document;if(d==doc||d==doc.body){var l,t;if(Ext.isIE&&Ext.isStrict){l=doc.documentElement.scrollLeft||(doc.body.scrollLeft||0);t=doc.documentElement.scrollTop||(doc.body.scrollTop||0)}else{l=window.pageXOffset||(doc.body.scrollLeft||0);t=window.pageYOffset||(doc.body.scrollTop||0)}return{left:l,top:t}}else{return{left:d.scrollLeft,top:d.scrollTop}}},getColor:function(attr,defaultValue,prefix){var v=this.getStyle(attr);if(!v||v=="transparent"||v=="inherit"){return defaultValue}var color=typeof prefix=="undefined"?"#":prefix;if(v.substr(0,4)=="rgb("){var rvs=v.slice(4,v.length-1).split(",");for(var i=0;i<3;i++){var h=parseInt(rvs[i]);var s=h.toString(16);if(h<16){s="0"+s}color+=s}}else{if(v.substr(0,1)=="#"){if(v.length==4){for(var i=1;i<4;i++){var c=v.charAt(i);color+=c+c}}else{if(v.length==7){color+=v.substr(1)}}}}return(color.length>5?color.toLowerCase():defaultValue)},boxWrap:function(cls){cls=cls||"x-box";var el=Ext.get(this.insertHtml("beforeBegin",String.format("<div class=\"{0}\">"+El.boxMarkup+"</div>",cls)));el.child("."+cls+"-mc").dom.appendChild(this.dom);return el},getAttributeNS:Ext.isIE?function(ns,name){var d=this.dom;var type=typeof d[ns+":"+name];if(type!="undefined"&&type!="unknown"){return d[ns+":"+name]}return d[name]}:function(ns,name){var d=this.dom;return d.getAttributeNS(ns,name)||d.getAttribute(ns+":"+name)||d.getAttribute(name)||d[name]},getTextWidth:function(text,min,max){return(Ext.util.TextMetrics.measure(this.dom,Ext.value(text,this.dom.innerHTML,true)).width).constrain(min||0,max||1000000)}};var ep=El.prototype;ep.on=ep.addListener;ep.mon=ep.addListener;ep.getUpdateManager=ep.getUpdater;ep.un=ep.removeListener;ep.autoBoxAdjust=true;El.unitPattern=/\d+(px|em|%|en|ex|pt|in|cm|mm|pc)$/i;El.addUnits=function(v,defaultUnit){if(v===""||v=="auto"){return v}if(v===undefined){return""}if(typeof v=="number"||!El.unitPattern.test(v)){return v+(defaultUnit||"px")}return v};El.boxMarkup="<div class=\"{0}-tl\"><div class=\"{0}-tr\"><div class=\"{0}-tc\"></div></div></div><div class=\"{0}-ml\"><div class=\"{0}-mr\"><div class=\"{0}-mc\"></div></div></div><div class=\"{0}-bl\"><div class=\"{0}-br\"><div class=\"{0}-bc\"></div></div></div>";El.VISIBILITY=1;El.DISPLAY=2;El.borders={l:"border-left-width",r:"border-right-width",t:"border-top-width",b:"border-bottom-width"};El.paddings={l:"padding-left",r:"padding-right",t:"padding-top",b:"padding-bottom"};El.margins={l:"margin-left",r:"margin-right",t:"margin-top",b:"margin-bottom"};El.cache={};var docEl;El.get=function(el){var ex,elm,id;if(!el){return null}if(typeof el=="string"){if(!(elm=document.getElementById(el))){return null}if(ex=El.cache[el]){ex.dom=elm}else{ex=El.cache[el]=new El(elm)}return ex}else{if(el.tagName){if(!(id=el.id)){id=Ext.id(el)}if(ex=El.cache[id]){ex.dom=el}else{ex=El.cache[id]=new El(el)}return ex}else{if(el instanceof El){if(el!=docEl){el.dom=document.getElementById(el.id)||el.dom;El.cache[el.id]=el}return el}else{if(el.isComposite){return el}else{if(Ext.isArray(el)){return El.select(el)}else{if(el==document){if(!docEl){var f=function(){};f.prototype=El.prototype;docEl=new f();docEl.dom=document}return docEl}}}}}}return null};El.uncache=function(el){for(var i=0,a=arguments,len=a.length;i<len;i++){if(a[i]){delete El.cache[a[i].id||a[i]]}}};El.garbageCollect=function(){if(!Ext.enableGarbageCollector){clearInterval(El.collectorThread);return }for(var eid in El.cache){var el=El.cache[eid],d=el.dom;if(!d||!d.parentNode||(!d.offsetParent&&!document.getElementById(eid))){delete El.cache[eid];if(d&&Ext.enableListenerCollection){Ext.EventManager.removeAll(d)}}}};El.collectorThreadId=setInterval(El.garbageCollect,30000);var flyFn=function(){};flyFn.prototype=El.prototype;var _cls=new flyFn();El.Flyweight=function(dom){this.dom=dom};El.Flyweight.prototype=_cls;El.Flyweight.prototype.isFlyweight=true;El._flyweights={};El.fly=function(el,named){named=named||"_global";el=Ext.getDom(el);if(!el){return null}if(!El._flyweights[named]){El._flyweights[named]=new El.Flyweight()}El._flyweights[named].dom=el;return El._flyweights[named]};Ext.get=El.get;Ext.fly=El.fly;var noBoxAdjust=Ext.isStrict?{select:1}:{input:1,select:1,textarea:1};if(Ext.isIE||Ext.isGecko){noBoxAdjust["button"]=1}Ext.EventManager.on(window,"unload",function(){delete El.cache;delete El._flyweights})})();
+Ext.enableFx=true;Ext.Fx={slideIn:function(A,C){var B=this.getFxEl();C=C||{};B.queueFx(C,function(){A=A||"t";this.fixDisplay();var D=this.getFxRestore();var I=this.getBox();this.setSize(I);var F=this.fxWrap(D.pos,C,"hidden");var K=this.dom.style;K.visibility="visible";K.position="absolute";var E=function(){B.fxUnwrap(F,D.pos,C);K.width=D.width;K.height=D.height;B.afterFx(C)};var J,L={to:[I.x,I.y]},H={to:I.width},G={to:I.height};switch(A.toLowerCase()){case"t":F.setSize(I.width,0);K.left=K.bottom="0";J={height:G};break;case"l":F.setSize(0,I.height);K.right=K.top="0";J={width:H};break;case"r":F.setSize(0,I.height);F.setX(I.right);K.left=K.top="0";J={width:H,points:L};break;case"b":F.setSize(I.width,0);F.setY(I.bottom);K.left=K.top="0";J={height:G,points:L};break;case"tl":F.setSize(0,0);K.right=K.bottom="0";J={width:H,height:G};break;case"bl":F.setSize(0,0);F.setY(I.y+I.height);K.right=K.top="0";J={width:H,height:G,points:L};break;case"br":F.setSize(0,0);F.setXY([I.right,I.bottom]);K.left=K.top="0";J={width:H,height:G,points:L};break;case"tr":F.setSize(0,0);F.setX(I.x+I.width);K.left=K.bottom="0";J={width:H,height:G,points:L};break}this.dom.style.visibility="visible";F.show();arguments.callee.anim=F.fxanim(J,C,"motion",0.5,"easeOut",E)});return this},slideOut:function(A,C){var B=this.getFxEl();C=C||{};B.queueFx(C,function(){A=A||"t";var I=this.getFxRestore();var D=this.getBox();this.setSize(D);var G=this.fxWrap(I.pos,C,"visible");var F=this.dom.style;F.visibility="visible";F.position="absolute";G.setSize(D);var J=function(){if(C.useDisplay){B.setDisplayed(false)}else{B.hide()}B.fxUnwrap(G,I.pos,C);F.width=I.width;F.height=I.height;B.afterFx(C)};var E,H={to:0};switch(A.toLowerCase()){case"t":F.left=F.bottom="0";E={height:H};break;case"l":F.right=F.top="0";E={width:H};break;case"r":F.left=F.top="0";E={width:H,points:{to:[D.right,D.y]}};break;case"b":F.left=F.top="0";E={height:H,points:{to:[D.x,D.bottom]}};break;case"tl":F.right=F.bottom="0";E={width:H,height:H};break;case"bl":F.right=F.top="0";E={width:H,height:H,points:{to:[D.x,D.bottom]}};break;case"br":F.left=F.top="0";E={width:H,height:H,points:{to:[D.x+D.width,D.bottom]}};break;case"tr":F.left=F.bottom="0";E={width:H,height:H,points:{to:[D.right,D.y]}};break}arguments.callee.anim=G.fxanim(E,C,"motion",0.5,"easeOut",J)});return this},puff:function(B){var A=this.getFxEl();B=B||{};A.queueFx(B,function(){this.clearOpacity();this.show();var F=this.getFxRestore();var D=this.dom.style;var G=function(){if(B.useDisplay){A.setDisplayed(false)}else{A.hide()}A.clearOpacity();A.setPositioning(F.pos);D.width=F.width;D.height=F.height;D.fontSize="";A.afterFx(B)};var E=this.getWidth();var C=this.getHeight();arguments.callee.anim=this.fxanim({width:{to:this.adjustWidth(E*2)},height:{to:this.adjustHeight(C*2)},points:{by:[-(E*0.5),-(C*0.5)]},opacity:{to:0},fontSize:{to:200,unit:"%"}},B,"motion",0.5,"easeOut",G)});return this},switchOff:function(B){var A=this.getFxEl();B=B||{};A.queueFx(B,function(){this.clearOpacity();this.clip();var D=this.getFxRestore();var C=this.dom.style;var E=function(){if(B.useDisplay){A.setDisplayed(false)}else{A.hide()}A.clearOpacity();A.setPositioning(D.pos);C.width=D.width;C.height=D.height;A.afterFx(B)};this.fxanim({opacity:{to:0.3}},null,null,0.1,null,function(){this.clearOpacity();(function(){this.fxanim({height:{to:1},points:{by:[0,this.getHeight()*0.5]}},B,"motion",0.3,"easeIn",E)}).defer(100,this)})});return this},highlight:function(A,C){var B=this.getFxEl();C=C||{};B.queueFx(C,function(){A=A||"ffff9c";var D=C.attr||"backgroundColor";this.clearOpacity();this.show();var G=this.getColor(D);var H=this.dom.style[D];var F=(C.endColor||G)||"ffffff";var I=function(){B.dom.style[D]=H;B.afterFx(C)};var E={};E[D]={from:A,to:F};arguments.callee.anim=this.fxanim(E,C,"color",1,"easeIn",I)});return this},frame:function(A,C,D){var B=this.getFxEl();D=D||{};B.queueFx(D,function(){A=A||"#C3DAF9";if(A.length==6){A="#"+A}C=C||1;var G=D.duration||1;this.show();var E=this.getBox();var F=function(){var H=Ext.getBody().createChild({style:{visbility:"hidden",position:"absolute","z-index":"35000",border:"0px solid "+A}});var I=Ext.isBorderBox?2:1;H.animate({top:{from:E.y,to:E.y-20},left:{from:E.x,to:E.x-20},borderWidth:{from:0,to:10},opacity:{from:1,to:0},height:{from:E.height,to:(E.height+(20*I))},width:{from:E.width,to:(E.width+(20*I))}},G,function(){H.remove();if(--C>0){F()}else{B.afterFx(D)}})};F.call(this)});return this},pause:function(C){var A=this.getFxEl();var B={};A.queueFx(B,function(){setTimeout(function(){A.afterFx(B)},C*1000)});return this},fadeIn:function(B){var A=this.getFxEl();B=B||{};A.queueFx(B,function(){this.setOpacity(0);this.fixDisplay();this.dom.style.visibility="visible";var C=B.endOpacity||1;arguments.callee.anim=this.fxanim({opacity:{to:C}},B,null,0.5,"easeOut",function(){if(C==1){this.clearOpacity()}A.afterFx(B)})});return this},fadeOut:function(B){var A=this.getFxEl();B=B||{};A.queueFx(B,function(){arguments.callee.anim=this.fxanim({opacity:{to:B.endOpacity||0}},B,null,0.5,"easeOut",function(){if(this.visibilityMode==Ext.Element.DISPLAY||B.useDisplay){this.dom.style.display="none"}else{this.dom.style.visibility="hidden"}this.clearOpacity();A.afterFx(B)})});return this},scale:function(A,B,C){this.shift(Ext.apply({},C,{width:A,height:B}));return this},shift:function(B){var A=this.getFxEl();B=B||{};A.queueFx(B,function(){var E={},D=B.width,F=B.height,C=B.x,H=B.y,G=B.opacity;if(D!==undefined){E.width={to:this.adjustWidth(D)}}if(F!==undefined){E.height={to:this.adjustHeight(F)}}if(B.left!==undefined){E.left={to:B.left}}if(B.top!==undefined){E.top={to:B.top}}if(B.right!==undefined){E.right={to:B.right}}if(B.bottom!==undefined){E.bottom={to:B.bottom}}if(C!==undefined||H!==undefined){E.points={to:[C!==undefined?C:this.getX(),H!==undefined?H:this.getY()]}}if(G!==undefined){E.opacity={to:G}}if(B.xy!==undefined){E.points={to:B.xy}}arguments.callee.anim=this.fxanim(E,B,"motion",0.35,"easeOut",function(){A.afterFx(B)})});return this},ghost:function(A,C){var B=this.getFxEl();C=C||{};B.queueFx(C,function(){A=A||"b";var H=this.getFxRestore();var E=this.getWidth(),G=this.getHeight();var F=this.dom.style;var J=function(){if(C.useDisplay){B.setDisplayed(false)}else{B.hide()}B.clearOpacity();B.setPositioning(H.pos);F.width=H.width;F.height=H.height;B.afterFx(C)};var D={opacity:{to:0},points:{}},I=D.points;switch(A.toLowerCase()){case"t":I.by=[0,-G];break;case"l":I.by=[-E,0];break;case"r":I.by=[E,0];break;case"b":I.by=[0,G];break;case"tl":I.by=[-E,-G];break;case"bl":I.by=[-E,G];break;case"br":I.by=[E,G];break;case"tr":I.by=[E,-G];break}arguments.callee.anim=this.fxanim(D,C,"motion",0.5,"easeOut",J)});return this},syncFx:function(){this.fxDefaults=Ext.apply(this.fxDefaults||{},{block:false,concurrent:true,stopFx:false});return this},sequenceFx:function(){this.fxDefaults=Ext.apply(this.fxDefaults||{},{block:false,concurrent:false,stopFx:false});return this},nextFx:function(){var A=this.fxQueue[0];if(A){A.call(this)}},hasActiveFx:function(){return this.fxQueue&&this.fxQueue[0]},stopFx:function(){if(this.hasActiveFx()){var A=this.fxQueue[0];if(A&&A.anim&&A.anim.isAnimated()){this.fxQueue=[A];A.anim.stop(true)}}return this},beforeFx:function(A){if(this.hasActiveFx()&&!A.concurrent){if(A.stopFx){this.stopFx();return true}return false}return true},hasFxBlock:function(){var A=this.fxQueue;return A&&A[0]&&A[0].block},queueFx:function(C,A){if(!this.fxQueue){this.fxQueue=[]}if(!this.hasFxBlock()){Ext.applyIf(C,this.fxDefaults);if(!C.concurrent){var B=this.beforeFx(C);A.block=C.block;this.fxQueue.push(A);if(B){this.nextFx()}}else{A.call(this)}}return this},fxWrap:function(F,D,C){var B;if(!D.wrap||!(B=Ext.get(D.wrap))){var A;if(D.fixPosition){A=this.getXY()}var E=document.createElement("div");E.style.visibility=C;B=Ext.get(this.dom.parentNode.insertBefore(E,this.dom));B.setPositioning(F);if(B.getStyle("position")=="static"){B.position("relative")}this.clearPositioning("auto");B.clip();B.dom.appendChild(this.dom);if(A){B.setXY(A)}}return B},fxUnwrap:function(A,C,B){this.clearPositioning();this.setPositioning(C);if(!B.wrap){A.dom.parentNode.insertBefore(this.dom,A.dom);A.remove()}},getFxRestore:function(){var A=this.dom.style;return{pos:this.getPositioning(),width:A.width,height:A.height}},afterFx:function(A){if(A.afterStyle){this.applyStyles(A.afterStyle)}if(A.afterCls){this.addClass(A.afterCls)}if(A.remove===true){this.remove()}Ext.callback(A.callback,A.scope,[this]);if(!A.concurrent){this.fxQueue.shift();this.nextFx()}},getFxEl:function(){return Ext.get(this.dom)},fxanim:function(D,E,B,F,C,A){B=B||"run";E=E||{};var G=Ext.lib.Anim[B](this.dom,D,(E.duration||F)||0.35,(E.easing||C)||"easeOut",function(){Ext.callback(A,this)},this);E.anim=G;return G}};Ext.Fx.resize=Ext.Fx.scale;Ext.apply(Ext.Element.prototype,Ext.Fx);
+Ext.CompositeElement=function(A){this.elements=[];this.addElements(A)};Ext.CompositeElement.prototype={isComposite:true,addElements:function(E){if(!E){return this}if(typeof E=="string"){E=Ext.Element.selectorFunction(E)}var D=this.elements;var B=D.length-1;for(var C=0,A=E.length;C<A;C++){D[++B]=Ext.get(E[C])}return this},fill:function(A){this.elements=[];this.add(A);return this},filter:function(A){var B=[];this.each(function(C){if(C.is(A)){B[B.length]=C.dom}});this.fill(B);return this},invoke:function(E,B){var D=this.elements;for(var C=0,A=D.length;C<A;C++){Ext.Element.prototype[E].apply(D[C],B)}return this},add:function(A){if(typeof A=="string"){this.addElements(Ext.Element.selectorFunction(A))}else{if(A.length!==undefined){this.addElements(A)}else{this.addElements([A])}}return this},each:function(E,D){var C=this.elements;for(var B=0,A=C.length;B<A;B++){if(E.call(D||C[B],C[B],this,B)===false){break}}return this},item:function(A){return this.elements[A]||null},first:function(){return this.item(0)},last:function(){return this.item(this.elements.length-1)},getCount:function(){return this.elements.length},contains:function(A){return this.indexOf(A)!==-1},indexOf:function(A){return this.elements.indexOf(Ext.get(A))},removeElement:function(D,F){if(Ext.isArray(D)){for(var C=0,A=D.length;C<A;C++){this.removeElement(D[C])}return this}var B=typeof D=="number"?D:this.indexOf(D);if(B!==-1&&this.elements[B]){if(F){var E=this.elements[B];if(E.dom){E.remove()}else{Ext.removeNode(E)}}this.elements.splice(B,1)}return this},replaceElement:function(D,C,A){var B=typeof D=="number"?D:this.indexOf(D);if(B!==-1){if(A){this.elements[B].replaceWith(C)}else{this.elements.splice(B,1,Ext.get(C))}}return this},clear:function(){this.elements=[]}};(function(){Ext.CompositeElement.createCall=function(B,C){if(!B[C]){B[C]=function(){return this.invoke(C,arguments)}}};for(var A in Ext.Element.prototype){if(typeof Ext.Element.prototype[A]=="function"){Ext.CompositeElement.createCall(Ext.CompositeElement.prototype,A)}}})();Ext.CompositeElementLite=function(A){Ext.CompositeElementLite.superclass.constructor.call(this,A);this.el=new Ext.Element.Flyweight()};Ext.extend(Ext.CompositeElementLite,Ext.CompositeElement,{addElements:function(E){if(E){if(Ext.isArray(E)){this.elements=this.elements.concat(E)}else{var D=this.elements;var B=D.length-1;for(var C=0,A=E.length;C<A;C++){D[++B]=E[C]}}}return this},invoke:function(F,B){var D=this.elements;var E=this.el;for(var C=0,A=D.length;C<A;C++){E.dom=D[C];Ext.Element.prototype[F].apply(E,B)}return this},item:function(A){if(!this.elements[A]){return null}this.el.dom=this.elements[A];return this.el},addListener:function(B,G,F,E){var D=this.elements;for(var C=0,A=D.length;C<A;C++){Ext.EventManager.on(D[C],B,G,F||D[C],E)}return this},each:function(F,E){var C=this.elements;var D=this.el;for(var B=0,A=C.length;B<A;B++){D.dom=C[B];if(F.call(E||D,D,this,B)===false){break}}return this},indexOf:function(A){return this.elements.indexOf(Ext.getDom(A))},replaceElement:function(D,C,A){var B=typeof D=="number"?D:this.indexOf(D);if(B!==-1){C=Ext.getDom(C);if(A){var E=this.elements[B];E.parentNode.insertBefore(C,E);Ext.removeNode(E)}this.elements.splice(B,1,C)}return this}});Ext.CompositeElementLite.prototype.on=Ext.CompositeElementLite.prototype.addListener;if(Ext.DomQuery){Ext.Element.selectorFunction=Ext.DomQuery.select}Ext.Element.select=function(A,D,B){var C;if(typeof A=="string"){C=Ext.Element.selectorFunction(A,B)}else{if(A.length!==undefined){C=A}else{throw"Invalid selector"}}if(D===true){return new Ext.CompositeElement(C)}else{return new Ext.CompositeElementLite(C)}};Ext.select=Ext.Element.select;
+Ext.data.Connection=function(A){Ext.apply(this,A);this.addEvents("beforerequest","requestcomplete","requestexception");Ext.data.Connection.superclass.constructor.call(this)};Ext.extend(Ext.data.Connection,Ext.util.Observable,{timeout:30000,autoAbort:false,disableCaching:true,disableCachingParam:"_dc",request:function(E){if(this.fireEvent("beforerequest",this,E)!==false){var C=E.params;if(typeof C=="function"){C=C.call(E.scope||window,E)}if(typeof C=="object"){C=Ext.urlEncode(C)}if(this.extraParams){var G=Ext.urlEncode(this.extraParams);C=C?(C+"&"+G):G}var B=E.url||this.url;if(typeof B=="function"){B=B.call(E.scope||window,E)}if(E.form){var D=Ext.getDom(E.form);B=B||D.action;var J=D.getAttribute("enctype");if(E.isUpload||(J&&J.toLowerCase()=="multipart/form-data")){return this.doFormUpload(E,C,B)}var I=Ext.lib.Ajax.serializeForm(D);C=C?(C+"&"+I):I}var K=E.headers;if(this.defaultHeaders){K=Ext.apply(K||{},this.defaultHeaders);if(!E.headers){E.headers=K}}var F={success:this.handleResponse,failure:this.handleFailure,scope:this,argument:{options:E},timeout:E.timeout||this.timeout};var A=E.method||this.method||((C||E.xmlData||E.jsonData)?"POST":"GET");if(A=="GET"&&(this.disableCaching&&E.disableCaching!==false)||E.disableCaching===true){var H=E.disableCachingParam||this.disableCachingParam;B+=(B.indexOf("?")!=-1?"&":"?")+H+"="+(new Date().getTime())}if(typeof E.autoAbort=="boolean"){if(E.autoAbort){this.abort()}}else{if(this.autoAbort!==false){this.abort()}}if((A=="GET"||E.xmlData||E.jsonData)&&C){B+=(B.indexOf("?")!=-1?"&":"?")+C;C=""}this.transId=Ext.lib.Ajax.request(A,B,F,C,E);return this.transId}else{Ext.callback(E.callback,E.scope,[E,null,null]);return null}},isLoading:function(A){if(A){return Ext.lib.Ajax.isCallInProgress(A)}else{return this.transId?true:false}},abort:function(A){if(A||this.isLoading()){Ext.lib.Ajax.abort(A||this.transId)}},handleResponse:function(A){this.transId=false;var B=A.argument.options;A.argument=B?B.argument:null;this.fireEvent("requestcomplete",this,A,B);Ext.callback(B.success,B.scope,[A,B]);Ext.callback(B.callback,B.scope,[B,true,A])},handleFailure:function(A,C){this.transId=false;var B=A.argument.options;A.argument=B?B.argument:null;this.fireEvent("requestexception",this,A,B,C);Ext.callback(B.failure,B.scope,[A,B]);Ext.callback(B.callback,B.scope,[B,false,A])},doFormUpload:function(E,A,B){var C=Ext.id();var F=document.createElement("iframe");F.id=C;F.name=C;F.className="x-hidden";if(Ext.isIE){F.src=Ext.SSL_SECURE_URL}document.body.appendChild(F);if(Ext.isIE){document.frames[C].name=C}var D=Ext.getDom(E.form);D.target=C;D.method="POST";D.enctype=D.encoding="multipart/form-data";if(B){D.action=B}var L,J;if(A){L=[];A=Ext.urlDecode(A,false);for(var H in A){if(A.hasOwnProperty(H)){J=document.createElement("input");J.type="hidden";J.name=H;J.value=A[H];D.appendChild(J);L.push(J)}}}function G(){var M={responseText:"",responseXML:null};M.argument=E?E.argument:null;try{var O;if(Ext.isIE){O=F.contentWindow.document}else{O=(F.contentDocument||window.frames[C].document)}if(O&&O.body){M.responseText=O.body.innerHTML}if(O&&O.XMLDocument){M.responseXML=O.XMLDocument}else{M.responseXML=O}}catch(N){}Ext.EventManager.removeListener(F,"load",G,this);this.fireEvent("requestcomplete",this,M,E);Ext.callback(E.success,E.scope,[M,E]);Ext.callback(E.callback,E.scope,[E,true,M]);setTimeout(function(){Ext.removeNode(F)},100)}Ext.EventManager.on(F,"load",G,this);D.submit();if(L){for(var I=0,K=L.length;I<K;I++){Ext.removeNode(L[I])}}}});Ext.Ajax=new Ext.data.Connection({autoAbort:false,serializeForm:function(A){return Ext.lib.Ajax.serializeForm(A)}});
+Ext.Updater=Ext.extend(Ext.util.Observable,{constructor:function(B,A){B=Ext.get(B);if(!A&&B.updateManager){return B.updateManager}this.el=B;this.defaultUrl=null;this.addEvents("beforeupdate","update","failure");var C=Ext.Updater.defaults;this.sslBlankUrl=C.sslBlankUrl;this.disableCaching=C.disableCaching;this.indicatorText=C.indicatorText;this.showLoadIndicator=C.showLoadIndicator;this.timeout=C.timeout;this.loadScripts=C.loadScripts;this.transaction=null;this.refreshDelegate=this.refresh.createDelegate(this);this.updateDelegate=this.update.createDelegate(this);this.formUpdateDelegate=this.formUpdate.createDelegate(this);if(!this.renderer){this.renderer=this.getDefaultRenderer()}Ext.Updater.superclass.constructor.call(this)},getDefaultRenderer:function(){return new Ext.Updater.BasicRenderer()},getEl:function(){return this.el},update:function(B,F,G,D){if(this.fireEvent("beforeupdate",this.el,B,F)!==false){var A,C;if(typeof B=="object"){A=B;B=A.url;F=F||A.params;G=G||A.callback;D=D||A.discardUrl;C=A.scope;if(typeof A.nocache!="undefined"){this.disableCaching=A.nocache}if(typeof A.text!="undefined"){this.indicatorText="<div class=\"loading-indicator\">"+A.text+"</div>"}if(typeof A.scripts!="undefined"){this.loadScripts=A.scripts}if(typeof A.timeout!="undefined"){this.timeout=A.timeout}}this.showLoading();if(!D){this.defaultUrl=B}if(typeof B=="function"){B=B.call(this)}var E=Ext.apply({},{url:B,params:(typeof F=="function"&&C)?F.createDelegate(C):F,success:this.processSuccess,failure:this.processFailure,scope:this,callback:undefined,timeout:(this.timeout*1000),disableCaching:this.disableCaching,argument:{"options":A,"url":B,"form":null,"callback":G,"scope":C||window,"params":F}},A);this.transaction=Ext.Ajax.request(E)}},formUpdate:function(C,A,B,D){if(this.fireEvent("beforeupdate",this.el,C,A)!==false){if(typeof A=="function"){A=A.call(this)}C=Ext.getDom(C);this.transaction=Ext.Ajax.request({form:C,url:A,success:this.processSuccess,failure:this.processFailure,scope:this,timeout:(this.timeout*1000),argument:{"url":A,"form":C,"callback":D,"reset":B}});this.showLoading.defer(1,this)}},refresh:function(A){if(this.defaultUrl==null){return }this.update(this.defaultUrl,null,A,true)},startAutoRefresh:function(B,C,D,E,A){if(A){this.update(C||this.defaultUrl,D,E,true)}if(this.autoRefreshProcId){clearInterval(this.autoRefreshProcId)}this.autoRefreshProcId=setInterval(this.update.createDelegate(this,[C||this.defaultUrl,D,E,true]),B*1000)},stopAutoRefresh:function(){if(this.autoRefreshProcId){clearInterval(this.autoRefreshProcId);delete this.autoRefreshProcId}},isAutoRefreshing:function(){return this.autoRefreshProcId?true:false},showLoading:function(){if(this.showLoadIndicator){this.el.update(this.indicatorText)}},processSuccess:function(A){this.transaction=null;if(A.argument.form&&A.argument.reset){try{A.argument.form.reset()}catch(B){}}if(this.loadScripts){this.renderer.render(this.el,A,this,this.updateComplete.createDelegate(this,[A]))}else{this.renderer.render(this.el,A,this);this.updateComplete(A)}},updateComplete:function(A){this.fireEvent("update",this.el,A);if(typeof A.argument.callback=="function"){A.argument.callback.call(A.argument.scope,this.el,true,A,A.argument.options)}},processFailure:function(A){this.transaction=null;this.fireEvent("failure",this.el,A);if(typeof A.argument.callback=="function"){A.argument.callback.call(A.argument.scope,this.el,false,A,A.argument.options)}},setRenderer:function(A){this.renderer=A},getRenderer:function(){return this.renderer},setDefaultUrl:function(A){this.defaultUrl=A},abort:function(){if(this.transaction){Ext.Ajax.abort(this.transaction)}},isUpdating:function(){if(this.transaction){return Ext.Ajax.isLoading(this.transaction)}return false}});Ext.Updater.defaults={timeout:30,loadScripts:false,sslBlankUrl:(Ext.SSL_SECURE_URL||"javascript:false"),disableCaching:false,showLoadIndicator:true,indicatorText:"<div class=\"loading-indicator\">Loading...</div>"};Ext.Updater.updateElement=function(D,C,E,B){var A=Ext.get(D).getUpdater();Ext.apply(A,B);A.update(C,E,B?B.callback:null)};Ext.Updater.BasicRenderer=function(){};Ext.Updater.BasicRenderer.prototype={render:function(C,A,B,D){C.update(A.responseText,B.loadScripts,D)}};Ext.UpdateManager=Ext.Updater;
+Ext.util.DelayedTask=function(E,D,A){var G=null,F,B;var C=function(){var H=new Date().getTime();if(H-B>=F){clearInterval(G);G=null;E.apply(D,A||[])}};this.delay=function(I,K,J,H){if(G&&I!=F){this.cancel()}F=I;B=new Date().getTime();E=K||E;D=J||D;A=H||A;if(!G){G=setInterval(C,F)}};this.cancel=function(){if(G){clearInterval(G);G=null}}};
diff --git a/testing/talos/talos/tests/dromaeo/lib/jquery.js b/testing/talos/talos/tests/dromaeo/lib/jquery.js
new file mode 100644
index 0000000000..0174d05c1d
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/lib/jquery.js
@@ -0,0 +1,3549 @@
+(function(){
+/*
+ * jQuery 1.2.6 - New Wave Javascript
+ *
+ * Copyright (c) 2008 John Resig (jquery.com)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * $Date$
+ * $Rev: 5685 $
+ */
+
+// Map over jQuery in case of overwrite
+var _jQuery = window.jQuery,
+// Map over the $ in case of overwrite
+ _$ = window.$;
+
+var jQuery = window.jQuery = window.$ = function( selector, context ) {
+ // The jQuery object is actually just the init constructor 'enhanced'
+ return new jQuery.fn.init( selector, context );
+};
+
+// A simple way to check for HTML strings or ID strings
+// (both of which we optimize for)
+var quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/,
+
+// Is it a simple selector
+ isSimple = /^.[^:#\[\.]*$/,
+
+// Will speed up references to undefined, and allows munging its name.
+ undefined;
+
+jQuery.fn = jQuery.prototype = {
+ init: function( selector, context ) {
+ // Make sure that a selection was provided
+ selector = selector || document;
+
+ // Handle $(DOMElement)
+ if ( selector.nodeType ) {
+ this[0] = selector;
+ this.length = 1;
+ return this;
+ }
+ // Handle HTML strings
+ if ( typeof selector == "string" ) {
+ // Are we dealing with HTML string or an ID?
+ var match = quickExpr.exec( selector );
+
+ // Verify a match, and that no context was specified for #id
+ if ( match && (match[1] || !context) ) {
+
+ // HANDLE: $(html) -> $(array)
+ if ( match[1] )
+ selector = jQuery.clean( [ match[1] ], context );
+
+ // HANDLE: $("#id")
+ else {
+ var elem = document.getElementById( match[3] );
+
+ // Make sure an element was located
+ if ( elem ){
+ // Handle the case where IE and Opera return items
+ // by name instead of ID
+ if ( elem.id != match[3] )
+ return jQuery().find( selector );
+
+ // Otherwise, we inject the element directly into the jQuery object
+ return jQuery( elem );
+ }
+ selector = [];
+ }
+
+ // HANDLE: $(expr, [context])
+ // (which is just equivalent to: $(content).find(expr)
+ } else
+ return jQuery( context ).find( selector );
+
+ // HANDLE: $(function)
+ // Shortcut for document ready
+ } else if ( jQuery.isFunction( selector ) )
+ return jQuery( document )[ jQuery.fn.ready ? "ready" : "load" ]( selector );
+
+ return this.setArray(jQuery.makeArray(selector));
+ },
+
+ // The current version of jQuery being used
+ jquery: "1.2.6",
+
+ // The number of elements contained in the matched element set
+ size: function() {
+ return this.length;
+ },
+
+ // The number of elements contained in the matched element set
+ length: 0,
+
+ // Get the Nth element in the matched element set OR
+ // Get the whole matched element set as a clean array
+ get: function( num ) {
+ return num == undefined ?
+
+ // Return a 'clean' array
+ jQuery.makeArray( this ) :
+
+ // Return just the object
+ this[ num ];
+ },
+
+ // Take an array of elements and push it onto the stack
+ // (returning the new matched element set)
+ pushStack: function( elems ) {
+ // Build a new jQuery matched element set
+ var ret = jQuery( elems );
+
+ // Add the old object onto the stack (as a reference)
+ ret.prevObject = this;
+
+ // Return the newly-formed element set
+ return ret;
+ },
+
+ // Force the current matched set of elements to become
+ // the specified array of elements (destroying the stack in the process)
+ // You should use pushStack() in order to do this, but maintain the stack
+ setArray: function( elems ) {
+ // Resetting the length to 0, then using the native Array push
+ // is a super-fast way to populate an object with array-like properties
+ this.length = 0;
+ Array.prototype.push.apply( this, elems );
+
+ return this;
+ },
+
+ // Execute a callback for every element in the matched set.
+ // (You can seed the arguments with an array of args, but this is
+ // only used internally.)
+ each: function( callback, args ) {
+ return jQuery.each( this, callback, args );
+ },
+
+ // Determine the position of an element within
+ // the matched set of elements
+ index: function( elem ) {
+ var ret = -1;
+
+ // Locate the position of the desired element
+ return jQuery.inArray(
+ // If it receives a jQuery object, the first element is used
+ elem && elem.jquery ? elem[0] : elem
+ , this );
+ },
+
+ attr: function( name, value, type ) {
+ var options = name;
+
+ // Look for the case where we're accessing a style value
+ if ( name.constructor == String )
+ if ( value === undefined )
+ return this[0] && jQuery[ type || "attr" ]( this[0], name );
+
+ else {
+ options = {};
+ options[ name ] = value;
+ }
+
+ // Check to see if we're setting style values
+ return this.each(function(i){
+ // Set all the styles
+ for ( name in options )
+ jQuery.attr(
+ type ?
+ this.style :
+ this,
+ name, jQuery.prop( this, options[ name ], type, i, name )
+ );
+ });
+ },
+
+ css: function( key, value ) {
+ // ignore negative width and height values
+ if ( (key == 'width' || key == 'height') && parseFloat(value) < 0 )
+ value = undefined;
+ return this.attr( key, value, "curCSS" );
+ },
+
+ text: function( text ) {
+ if ( typeof text != "object" && text != null )
+ return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
+
+ var ret = "";
+
+ jQuery.each( text || this, function(){
+ jQuery.each( this.childNodes, function(){
+ if ( this.nodeType != 8 )
+ ret += this.nodeType != 1 ?
+ this.nodeValue :
+ jQuery.fn.text( [ this ] );
+ });
+ });
+
+ return ret;
+ },
+
+ wrapAll: function( html ) {
+ if ( this[0] )
+ // The elements to wrap the target around
+ jQuery( html, this[0].ownerDocument )
+ .clone()
+ .insertBefore( this[0] )
+ .map(function(){
+ var elem = this;
+
+ while ( elem.firstChild )
+ elem = elem.firstChild;
+
+ return elem;
+ })
+ .append(this);
+
+ return this;
+ },
+
+ wrapInner: function( html ) {
+ return this.each(function(){
+ jQuery( this ).contents().wrapAll( html );
+ });
+ },
+
+ wrap: function( html ) {
+ return this.each(function(){
+ jQuery( this ).wrapAll( html );
+ });
+ },
+
+ append: function() {
+ return this.domManip(arguments, true, false, function(elem){
+ if (this.nodeType == 1)
+ this.appendChild( elem );
+ });
+ },
+
+ prepend: function() {
+ return this.domManip(arguments, true, true, function(elem){
+ if (this.nodeType == 1)
+ this.insertBefore( elem, this.firstChild );
+ });
+ },
+
+ before: function() {
+ return this.domManip(arguments, false, false, function(elem){
+ this.parentNode.insertBefore( elem, this );
+ });
+ },
+
+ after: function() {
+ return this.domManip(arguments, false, true, function(elem){
+ this.parentNode.insertBefore( elem, this.nextSibling );
+ });
+ },
+
+ end: function() {
+ return this.prevObject || jQuery( [] );
+ },
+
+ find: function( selector ) {
+ var elems = jQuery.map(this, function(elem){
+ return jQuery.find( selector, elem );
+ });
+
+ return this.pushStack( /[^+>] [^+>]/.test( selector ) || selector.indexOf("..") > -1 ?
+ jQuery.unique( elems ) :
+ elems );
+ },
+
+ clone: function( events ) {
+ // Do the clone
+ var ret = this.map(function(){
+ if ( jQuery.browser.msie && !jQuery.isXMLDoc(this) ) {
+ // IE copies events bound via attachEvent when
+ // using cloneNode. Calling detachEvent on the
+ // clone will also remove the events from the orignal
+ // In order to get around this, we use innerHTML.
+ // Unfortunately, this means some modifications to
+ // attributes in IE that are actually only stored
+ // as properties will not be copied (such as the
+ // the name attribute on an input).
+ var clone = this.cloneNode(true),
+ container = document.createElement("div");
+ container.appendChild(clone);
+ return jQuery.clean([container.innerHTML])[0];
+ } else
+ return this.cloneNode(true);
+ });
+
+ // Need to set the expando to null on the cloned set if it exists
+ // removeData doesn't work here, IE removes it from the original as well
+ // this is primarily for IE but the data expando shouldn't be copied over in any browser
+ var clone = ret.find("*").andSelf().each(function(){
+ if ( this[ expando ] != undefined )
+ this[ expando ] = null;
+ });
+
+ // Copy the events from the original to the clone
+ if ( events === true )
+ this.find("*").andSelf().each(function(i){
+ if (this.nodeType == 3)
+ return;
+ var events = jQuery.data( this, "events" );
+
+ for ( var type in events )
+ for ( var handler in events[ type ] )
+ jQuery.event.add( clone[ i ], type, events[ type ][ handler ], events[ type ][ handler ].data );
+ });
+
+ // Return the cloned set
+ return ret;
+ },
+
+ filter: function( selector ) {
+ return this.pushStack(
+ jQuery.isFunction( selector ) &&
+ jQuery.grep(this, function(elem, i){
+ return selector.call( elem, i );
+ }) ||
+
+ jQuery.multiFilter( selector, this ) );
+ },
+
+ not: function( selector ) {
+ if ( selector.constructor == String )
+ // test special case where just one selector is passed in
+ if ( isSimple.test( selector ) )
+ return this.pushStack( jQuery.multiFilter( selector, this, true ) );
+ else
+ selector = jQuery.multiFilter( selector, this );
+
+ var isArrayLike = selector.length && selector[selector.length - 1] !== undefined && !selector.nodeType;
+ return this.filter(function() {
+ return isArrayLike ? jQuery.inArray( this, selector ) < 0 : this != selector;
+ });
+ },
+
+ add: function( selector ) {
+ return this.pushStack( jQuery.unique( jQuery.merge(
+ this.get(),
+ typeof selector == 'string' ?
+ jQuery( selector ) :
+ jQuery.makeArray( selector )
+ )));
+ },
+
+ is: function( selector ) {
+ return !!selector && jQuery.multiFilter( selector, this ).length > 0;
+ },
+
+ hasClass: function( selector ) {
+ return this.is( "." + selector );
+ },
+
+ val: function( value ) {
+ if ( value == undefined ) {
+
+ if ( this.length ) {
+ var elem = this[0];
+
+ // We need to handle select boxes special
+ if ( jQuery.nodeName( elem, "select" ) ) {
+ var index = elem.selectedIndex,
+ values = [],
+ options = elem.options,
+ one = elem.type == "select-one";
+
+ // Nothing was selected
+ if ( index < 0 )
+ return null;
+
+ // Loop through all the selected options
+ for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
+ var option = options[ i ];
+
+ if ( option.selected ) {
+ // Get the specifc value for the option
+ value = jQuery.browser.msie && !option.attributes.value.specified ? option.text : option.value;
+
+ // We don't need an array for one selects
+ if ( one )
+ return value;
+
+ // Multi-Selects return an array
+ values.push( value );
+ }
+ }
+
+ return values;
+
+ // Everything else, we just grab the value
+ } else
+ return (this[0].value || "").replace(/\r/g, "");
+
+ }
+
+ return undefined;
+ }
+
+ if( value.constructor == Number )
+ value += '';
+
+ return this.each(function(){
+ if ( this.nodeType != 1 )
+ return;
+
+ if ( value.constructor == Array && /radio|checkbox/.test( this.type ) )
+ this.checked = (jQuery.inArray(this.value, value) >= 0 ||
+ jQuery.inArray(this.name, value) >= 0);
+
+ else if ( jQuery.nodeName( this, "select" ) ) {
+ var values = jQuery.makeArray(value);
+
+ jQuery( "option", this ).each(function(){
+ this.selected = (jQuery.inArray( this.value, values ) >= 0 ||
+ jQuery.inArray( this.text, values ) >= 0);
+ });
+
+ if ( !values.length )
+ this.selectedIndex = -1;
+
+ } else
+ this.value = value;
+ });
+ },
+
+ html: function( value ) {
+ return value == undefined ?
+ (this[0] ?
+ this[0].innerHTML :
+ null) :
+ this.empty().append( value );
+ },
+
+ replaceWith: function( value ) {
+ return this.after( value ).remove();
+ },
+
+ eq: function( i ) {
+ return this.slice( i, i + 1 );
+ },
+
+ slice: function() {
+ return this.pushStack( Array.prototype.slice.apply( this, arguments ) );
+ },
+
+ map: function( callback ) {
+ return this.pushStack( jQuery.map(this, function(elem, i){
+ return callback.call( elem, i, elem );
+ }));
+ },
+
+ andSelf: function() {
+ return this.add( this.prevObject );
+ },
+
+ data: function( key, value ){
+ var parts = key.split(".");
+ parts[1] = parts[1] ? "." + parts[1] : "";
+
+ if ( value === undefined ) {
+ var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
+
+ if ( data === undefined && this.length )
+ data = jQuery.data( this[0], key );
+
+ return data === undefined && parts[1] ?
+ this.data( parts[0] ) :
+ data;
+ } else
+ return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function(){
+ jQuery.data( this, key, value );
+ });
+ },
+
+ removeData: function( key ){
+ return this.each(function(){
+ jQuery.removeData( this, key );
+ });
+ },
+
+ domManip: function( args, table, reverse, callback ) {
+ var clone = this.length > 1, elems;
+
+ return this.each(function(){
+ if ( !elems ) {
+ elems = jQuery.clean( args, this.ownerDocument );
+
+ if ( reverse )
+ elems.reverse();
+ }
+
+ var obj = this;
+
+ if ( table && jQuery.nodeName( this, "table" ) && jQuery.nodeName( elems[0], "tr" ) )
+ obj = this.getElementsByTagName("tbody")[0] || this.appendChild( this.ownerDocument.createElement("tbody") );
+
+ var scripts = jQuery( [] );
+
+ jQuery.each(elems, function(){
+ var elem = clone ?
+ jQuery( this ).clone( true )[0] :
+ this;
+
+ // execute all scripts after the elements have been injected
+ if ( jQuery.nodeName( elem, "script" ) )
+ scripts = scripts.add( elem );
+ else {
+ // Remove any inner scripts for later evaluation
+ if ( elem.nodeType == 1 )
+ scripts = scripts.add( jQuery( "script", elem ).remove() );
+
+ // Inject the elements into the document
+ callback.call( obj, elem );
+ }
+ });
+
+ scripts.each( evalScript );
+ });
+ }
+};
+
+// Give the init function the jQuery prototype for later instantiation
+jQuery.fn.init.prototype = jQuery.fn;
+
+function evalScript( i, elem ) {
+ if ( elem.src )
+ jQuery.ajax({
+ url: elem.src,
+ async: false,
+ dataType: "script"
+ });
+
+ else
+ jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );
+
+ if ( elem.parentNode )
+ elem.parentNode.removeChild( elem );
+}
+
+function now(){
+ return +new Date;
+}
+
+jQuery.extend = jQuery.fn.extend = function() {
+ // copy reference to target object
+ var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options;
+
+ // Handle a deep copy situation
+ if ( target.constructor == Boolean ) {
+ deep = target;
+ target = arguments[1] || {};
+ // skip the boolean and the target
+ i = 2;
+ }
+
+ // Handle case when target is a string or something (possible in deep copy)
+ if ( typeof target != "object" && typeof target != "function" )
+ target = {};
+
+ // extend jQuery itself if only one argument is passed
+ if ( length == i ) {
+ target = this;
+ --i;
+ }
+
+ for ( ; i < length; i++ )
+ // Only deal with non-null/undefined values
+ if ( (options = arguments[ i ]) != null )
+ // Extend the base object
+ for ( var name in options ) {
+ var src = target[ name ], copy = options[ name ];
+
+ // Prevent never-ending loop
+ if ( target === copy )
+ continue;
+
+ // Recurse if we're merging object values
+ if ( deep && copy && typeof copy == "object" && !copy.nodeType )
+ target[ name ] = jQuery.extend( deep,
+ // Never move original objects, clone them
+ src || ( copy.length != null ? [ ] : { } )
+ , copy );
+
+ // Don't bring in undefined values
+ else if ( copy !== undefined )
+ target[ name ] = copy;
+
+ }
+
+ // Return the modified object
+ return target;
+};
+
+var expando = "jQuery" + now(), uuid = 0, windowData = {},
+ // exclude the following css properties to add px
+ exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i,
+ // cache defaultView
+ defaultView = document.defaultView || {};
+
+jQuery.extend({
+ noConflict: function( deep ) {
+ window.$ = _$;
+
+ if ( deep )
+ window.jQuery = _jQuery;
+
+ return jQuery;
+ },
+
+ // See test/unit/core.js for details concerning this function.
+ isFunction: function( fn ) {
+ return !!fn && typeof fn != "string" && !fn.nodeName &&
+ fn.constructor != Array && /^[\s[]?function/.test( fn + "" );
+ },
+
+ // check if an element is in a (or is an) XML document
+ isXMLDoc: function( elem ) {
+ return elem.documentElement && !elem.body ||
+ elem.tagName && elem.ownerDocument && !elem.ownerDocument.body;
+ },
+
+ // Evalulates a script in a global context
+ globalEval: function( data ) {
+ data = jQuery.trim( data );
+
+ if ( data ) {
+ // Inspired by code by Andrea Giammarchi
+ // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html
+ var head = document.getElementsByTagName("head")[0] || document.documentElement,
+ script = document.createElement("script");
+
+ script.type = "text/javascript";
+ if ( jQuery.browser.msie )
+ script.text = data;
+ else
+ script.appendChild( document.createTextNode( data ) );
+
+ // Use insertBefore instead of appendChild to circumvent an IE6 bug.
+ // This arises when a base node is used (#2709).
+ head.insertBefore( script, head.firstChild );
+ head.removeChild( script );
+ }
+ },
+
+ nodeName: function( elem, name ) {
+ return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase();
+ },
+
+ cache: {},
+
+ data: function( elem, name, data ) {
+ elem = elem == window ?
+ windowData :
+ elem;
+
+ var id = elem[ expando ];
+
+ // Compute a unique ID for the element
+ if ( !id )
+ id = elem[ expando ] = ++uuid;
+
+ // Only generate the data cache if we're
+ // trying to access or manipulate it
+ if ( name && !jQuery.cache[ id ] )
+ jQuery.cache[ id ] = {};
+
+ // Prevent overriding the named cache with undefined values
+ if ( data !== undefined )
+ jQuery.cache[ id ][ name ] = data;
+
+ // Return the named cache data, or the ID for the element
+ return name ?
+ jQuery.cache[ id ][ name ] :
+ id;
+ },
+
+ removeData: function( elem, name ) {
+ elem = elem == window ?
+ windowData :
+ elem;
+
+ var id = elem[ expando ];
+
+ // If we want to remove a specific section of the element's data
+ if ( name ) {
+ if ( jQuery.cache[ id ] ) {
+ // Remove the section of cache data
+ delete jQuery.cache[ id ][ name ];
+
+ // If we've removed all the data, remove the element's cache
+ name = "";
+
+ for ( name in jQuery.cache[ id ] )
+ break;
+
+ if ( !name )
+ jQuery.removeData( elem );
+ }
+
+ // Otherwise, we want to remove all of the element's data
+ } else {
+ // Clean up the element expando
+ try {
+ delete elem[ expando ];
+ } catch(e){
+ // IE has trouble directly removing the expando
+ // but it's ok with using removeAttribute
+ if ( elem.removeAttribute )
+ elem.removeAttribute( expando );
+ }
+
+ // Completely remove the data cache
+ delete jQuery.cache[ id ];
+ }
+ },
+
+ // args is for internal usage only
+ each: function( object, callback, args ) {
+ var name, i = 0, length = object.length;
+
+ if ( args ) {
+ if ( length == undefined ) {
+ for ( name in object )
+ if ( callback.apply( object[ name ], args ) === false )
+ break;
+ } else
+ for ( ; i < length; )
+ if ( callback.apply( object[ i++ ], args ) === false )
+ break;
+
+ // A special, fast, case for the most common use of each
+ } else {
+ if ( length == undefined ) {
+ for ( name in object )
+ if ( callback.call( object[ name ], name, object[ name ] ) === false )
+ break;
+ } else
+ for ( var value = object[0];
+ i < length && callback.call( value, i, value ) !== false; value = object[++i] ){}
+ }
+
+ return object;
+ },
+
+ prop: function( elem, value, type, i, name ) {
+ // Handle executable functions
+ if ( jQuery.isFunction( value ) )
+ value = value.call( elem, i );
+
+ // Handle passing in a number to a CSS property
+ return value && value.constructor == Number && type == "curCSS" && !exclude.test( name ) ?
+ value + "px" :
+ value;
+ },
+
+ className: {
+ // internal only, use addClass("class")
+ add: function( elem, classNames ) {
+ jQuery.each((classNames || "").split(/\s+/), function(i, className){
+ if ( elem.nodeType == 1 && !jQuery.className.has( elem.className, className ) )
+ elem.className += (elem.className ? " " : "") + className;
+ });
+ },
+
+ // internal only, use removeClass("class")
+ remove: function( elem, classNames ) {
+ if (elem.nodeType == 1)
+ elem.className = classNames != undefined ?
+ jQuery.grep(elem.className.split(/\s+/), function(className){
+ return !jQuery.className.has( classNames, className );
+ }).join(" ") :
+ "";
+ },
+
+ // internal only, use hasClass("class")
+ has: function( elem, className ) {
+ return jQuery.inArray( className, (elem.className || elem).toString().split(/\s+/) ) > -1;
+ }
+ },
+
+ // A method for quickly swapping in/out CSS properties to get correct calculations
+ swap: function( elem, options, callback ) {
+ var old = {};
+ // Remember the old values, and insert the new ones
+ for ( var name in options ) {
+ old[ name ] = elem.style[ name ];
+ elem.style[ name ] = options[ name ];
+ }
+
+ callback.call( elem );
+
+ // Revert the old values
+ for ( var name in options )
+ elem.style[ name ] = old[ name ];
+ },
+
+ css: function( elem, name, force ) {
+ if ( name == "width" || name == "height" ) {
+ var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ];
+
+ function getWH() {
+ val = name == "width" ? elem.offsetWidth : elem.offsetHeight;
+ var padding = 0, border = 0;
+ jQuery.each( which, function() {
+ padding += parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0;
+ border += parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0;
+ });
+ val -= Math.round(padding + border);
+ }
+
+ if ( jQuery(elem).is(":visible") )
+ getWH();
+ else
+ jQuery.swap( elem, props, getWH );
+
+ return Math.max(0, val);
+ }
+
+ return jQuery.curCSS( elem, name, force );
+ },
+
+ curCSS: function( elem, name, force ) {
+ var ret, style = elem.style;
+
+ // A helper method for determining if an element's values are broken
+ function color( elem ) {
+ if ( !jQuery.browser.safari )
+ return false;
+
+ // defaultView is cached
+ var ret = defaultView.getComputedStyle( elem, null );
+ return !ret || ret.getPropertyValue("color") == "";
+ }
+
+ // We need to handle opacity special in IE
+ if ( name == "opacity" && jQuery.browser.msie ) {
+ ret = jQuery.attr( style, "opacity" );
+
+ return ret == "" ?
+ "1" :
+ ret;
+ }
+ // Opera sometimes will give the wrong display answer, this fixes it, see #2037
+ if ( jQuery.browser.opera && name == "display" ) {
+ var save = style.outline;
+ style.outline = "0 solid black";
+ style.outline = save;
+ }
+
+ // Make sure we're using the right name for getting the float value
+ if ( name.match( /float/i ) )
+ name = styleFloat;
+
+ if ( !force && style && style[ name ] )
+ ret = style[ name ];
+
+ else if ( defaultView.getComputedStyle ) {
+
+ // Only "float" is needed here
+ if ( name.match( /float/i ) )
+ name = "float";
+
+ name = name.replace( /([A-Z])/g, "-$1" ).toLowerCase();
+
+ var computedStyle = defaultView.getComputedStyle( elem, null );
+
+ if ( computedStyle && !color( elem ) )
+ ret = computedStyle.getPropertyValue( name );
+
+ // If the element isn't reporting its values properly in Safari
+ // then some display: none elements are involved
+ else {
+ var swap = [], stack = [], a = elem, i = 0;
+
+ // Locate all of the parent display: none elements
+ for ( ; a && color(a); a = a.parentNode )
+ stack.unshift(a);
+
+ // Go through and make them visible, but in reverse
+ // (It would be better if we knew the exact display type that they had)
+ for ( ; i < stack.length; i++ )
+ if ( color( stack[ i ] ) ) {
+ swap[ i ] = stack[ i ].style.display;
+ stack[ i ].style.display = "block";
+ }
+
+ // Since we flip the display style, we have to handle that
+ // one special, otherwise get the value
+ ret = name == "display" && swap[ stack.length - 1 ] != null ?
+ "none" :
+ ( computedStyle && computedStyle.getPropertyValue( name ) ) || "";
+
+ // Finally, revert the display styles back
+ for ( i = 0; i < swap.length; i++ )
+ if ( swap[ i ] != null )
+ stack[ i ].style.display = swap[ i ];
+ }
+
+ // We should always get a number back from opacity
+ if ( name == "opacity" && ret == "" )
+ ret = "1";
+
+ } else if ( elem.currentStyle ) {
+ var camelCase = name.replace(/\-(\w)/g, function(all, letter){
+ return letter.toUpperCase();
+ });
+
+ ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ];
+
+ // From the awesome hack by Dean Edwards
+ // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
+
+ // If we're not dealing with a regular pixel number
+ // but a number that has a weird ending, we need to convert it to pixels
+ if ( !/^\d+(px)?$/i.test( ret ) && /^\d/.test( ret ) ) {
+ // Remember the original values
+ var left = style.left, rsLeft = elem.runtimeStyle.left;
+
+ // Put in the new values to get a computed value out
+ elem.runtimeStyle.left = elem.currentStyle.left;
+ style.left = ret || 0;
+ ret = style.pixelLeft + "px";
+
+ // Revert the changed values
+ style.left = left;
+ elem.runtimeStyle.left = rsLeft;
+ }
+ }
+
+ return ret;
+ },
+
+ clean: function( elems, context ) {
+ var ret = [];
+ context = context || document;
+ // !context.createElement fails in IE with an error but returns typeof 'object'
+ if (typeof context.createElement == 'undefined')
+ context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
+
+ jQuery.each(elems, function(i, elem){
+ if ( !elem )
+ return;
+
+ if ( elem.constructor == Number )
+ elem += '';
+
+ // Convert html string into DOM nodes
+ if ( typeof elem == "string" ) {
+ // Fix "XHTML"-style tags in all browsers
+ elem = elem.replace(/(<(\w+)[^>]*?)\/>/g, function(all, front, tag){
+ return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ?
+ all :
+ front + "></" + tag + ">";
+ });
+
+ // Trim whitespace, otherwise indexOf won't work as expected
+ var tags = jQuery.trim( elem ).toLowerCase(), div = context.createElement("div");
+
+ var wrap =
+ // option or optgroup
+ !tags.indexOf("<opt") &&
+ [ 1, "<select multiple='multiple'>", "</select>" ] ||
+
+ !tags.indexOf("<leg") &&
+ [ 1, "<fieldset>", "</fieldset>" ] ||
+
+ tags.match(/^<(thead|tbody|tfoot|colg|cap)/) &&
+ [ 1, "<table>", "</table>" ] ||
+
+ !tags.indexOf("<tr") &&
+ [ 2, "<table><tbody>", "</tbody></table>" ] ||
+
+ // <thead> matched above
+ (!tags.indexOf("<td") || !tags.indexOf("<th")) &&
+ [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ] ||
+
+ !tags.indexOf("<col") &&
+ [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ] ||
+
+ // IE can't serialize <link> and <script> tags normally
+ jQuery.browser.msie &&
+ [ 1, "div<div>", "</div>" ] ||
+
+ [ 0, "", "" ];
+
+ // Go to html and back, then peel off extra wrappers
+ div.innerHTML = wrap[1] + elem + wrap[2];
+
+ // Move to the right depth
+ while ( wrap[0]-- )
+ div = div.lastChild;
+
+ // Remove IE's autoinserted <tbody> from table fragments
+ if ( jQuery.browser.msie ) {
+
+ // String was a <table>, *may* have spurious <tbody>
+ var tbody = !tags.indexOf("<table") && tags.indexOf("<tbody") < 0 ?
+ div.firstChild && div.firstChild.childNodes :
+
+ // String was a bare <thead> or <tfoot>
+ wrap[1] == "<table>" && tags.indexOf("<tbody") < 0 ?
+ div.childNodes :
+ [];
+
+ for ( var j = tbody.length - 1; j >= 0 ; --j )
+ if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length )
+ tbody[ j ].parentNode.removeChild( tbody[ j ] );
+
+ // IE completely kills leading whitespace when innerHTML is used
+ if ( /^\s/.test( elem ) )
+ div.insertBefore( context.createTextNode( elem.match(/^\s*/)[0] ), div.firstChild );
+
+ }
+
+ elem = jQuery.makeArray( div.childNodes );
+ }
+
+ if ( elem.length === 0 && (!jQuery.nodeName( elem, "form" ) && !jQuery.nodeName( elem, "select" )) )
+ return;
+
+ if ( elem[0] == undefined || jQuery.nodeName( elem, "form" ) || elem.options )
+ ret.push( elem );
+
+ else
+ ret = jQuery.merge( ret, elem );
+
+ });
+
+ return ret;
+ },
+
+ attr: function( elem, name, value ) {
+ // don't set attributes on text and comment nodes
+ if (!elem || elem.nodeType == 3 || elem.nodeType == 8)
+ return undefined;
+
+ var notxml = !jQuery.isXMLDoc( elem ),
+ // Whether we are setting (or getting)
+ set = value !== undefined,
+ msie = jQuery.browser.msie;
+
+ // Try to normalize/fix the name
+ name = notxml && jQuery.props[ name ] || name;
+
+ // Only do all the following if this is a node (faster for style)
+ // IE elem.getAttribute passes even for style
+ if ( elem.tagName ) {
+
+ // These attributes require special treatment
+ var special = /href|src|style/.test( name );
+
+ // Safari mis-reports the default selected property of a hidden option
+ // Accessing the parent's selectedIndex property fixes it
+ if ( name == "selected" && jQuery.browser.safari )
+ elem.parentNode.selectedIndex;
+
+ // If applicable, access the attribute via the DOM 0 way
+ if ( name in elem && notxml && !special ) {
+ if ( set ){
+ // We can't allow the type property to be changed (since it causes problems in IE)
+ if ( name == "type" && jQuery.nodeName( elem, "input" ) && elem.parentNode )
+ throw "type property can't be changed";
+
+ elem[ name ] = value;
+ }
+
+ // browsers index elements by id/name on forms, give priority to attributes.
+ if( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) )
+ return elem.getAttributeNode( name ).nodeValue;
+
+ return elem[ name ];
+ }
+
+ if ( msie && notxml && name == "style" )
+ return jQuery.attr( elem.style, "cssText", value );
+
+ if ( set )
+ // convert the value to a string (all browsers do this but IE) see #1070
+ elem.setAttribute( name, "" + value );
+
+ var attr = msie && notxml && special
+ // Some attributes require a special call on IE
+ ? elem.getAttribute( name, 2 )
+ : elem.getAttribute( name );
+
+ // Non-existent attributes return null, we normalize to undefined
+ return attr === null ? undefined : attr;
+ }
+
+ // elem is actually elem.style ... set the style
+
+ // IE uses filters for opacity
+ if ( msie && name == "opacity" ) {
+ if ( set ) {
+ // IE has trouble with opacity if it does not have layout
+ // Force it by setting the zoom level
+ elem.zoom = 1;
+
+ // Set the alpha filter to set the opacity
+ elem.filter = (elem.filter || "").replace( /alpha\([^)]*\)/, "" ) +
+ (parseInt( value ) + '' == "NaN" ? "" : "alpha(opacity=" + value * 100 + ")");
+ }
+
+ return elem.filter && elem.filter.indexOf("opacity=") >= 0 ?
+ (parseFloat( elem.filter.match(/opacity=([^)]*)/)[1] ) / 100) + '':
+ "";
+ }
+
+ name = name.replace(/-([a-z])/ig, function(all, letter){
+ return letter.toUpperCase();
+ });
+
+ if ( set )
+ elem[ name ] = value;
+
+ return elem[ name ];
+ },
+
+ trim: function( text ) {
+ return (text || "").replace( /^\s+|\s+$/g, "" );
+ },
+
+ makeArray: function( array ) {
+ var ret = [];
+
+ if( array != null ){
+ var i = array.length;
+ //the window, strings and functions also have 'length'
+ if( i == null || array.split || array.setInterval || array.call )
+ ret[0] = array;
+ else
+ while( i )
+ ret[--i] = array[i];
+ }
+
+ return ret;
+ },
+
+ inArray: function( elem, array ) {
+ for ( var i = 0, length = array.length; i < length; i++ )
+ // Use === because on IE, window == document
+ if ( array[ i ] === elem )
+ return i;
+
+ return -1;
+ },
+
+ merge: function( first, second ) {
+ // We have to loop this way because IE & Opera overwrite the length
+ // expando of getElementsByTagName
+ var i = 0, elem, pos = first.length;
+ // Also, we need to make sure that the correct elements are being returned
+ // (IE returns comment nodes in a '*' query)
+ if ( jQuery.browser.msie ) {
+ while ( elem = second[ i++ ] )
+ if ( elem.nodeType != 8 )
+ first[ pos++ ] = elem;
+
+ } else
+ while ( elem = second[ i++ ] )
+ first[ pos++ ] = elem;
+
+ return first;
+ },
+
+ unique: function( array ) {
+ var ret = [], done = {};
+
+ try {
+
+ for ( var i = 0, length = array.length; i < length; i++ ) {
+ var id = jQuery.data( array[ i ] );
+
+ if ( !done[ id ] ) {
+ done[ id ] = true;
+ ret.push( array[ i ] );
+ }
+ }
+
+ } catch( e ) {
+ ret = array;
+ }
+
+ return ret;
+ },
+
+ grep: function( elems, callback, inv ) {
+ var ret = [];
+
+ // Go through the array, only saving the items
+ // that pass the validator function
+ for ( var i = 0, length = elems.length; i < length; i++ )
+ if ( !inv != !callback( elems[ i ], i ) )
+ ret.push( elems[ i ] );
+
+ return ret;
+ },
+
+ map: function( elems, callback ) {
+ var ret = [];
+
+ // Go through the array, translating each of the items to their
+ // new value (or values).
+ for ( var i = 0, length = elems.length; i < length; i++ ) {
+ var value = callback( elems[ i ], i );
+
+ if ( value != null )
+ ret[ ret.length ] = value;
+ }
+
+ return ret.concat.apply( [], ret );
+ }
+});
+
+var userAgent = navigator.userAgent.toLowerCase();
+
+// Figure out what browser is being used
+jQuery.browser = {
+ version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [])[1],
+ safari: /webkit/.test( userAgent ),
+ opera: /opera/.test( userAgent ),
+ msie: /msie/.test( userAgent ) && !/opera/.test( userAgent ),
+ mozilla: /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent )
+};
+
+var styleFloat = jQuery.browser.msie ?
+ "styleFloat" :
+ "cssFloat";
+
+jQuery.extend({
+ // Check to see if the W3C box model is being used
+ boxModel: !jQuery.browser.msie || document.compatMode == "CSS1Compat",
+
+ props: {
+ "for": "htmlFor",
+ "class": "className",
+ "float": styleFloat,
+ cssFloat: styleFloat,
+ styleFloat: styleFloat,
+ readonly: "readOnly",
+ maxlength: "maxLength",
+ cellspacing: "cellSpacing"
+ }
+});
+
+jQuery.each({
+ parent: function(elem){return elem.parentNode;},
+ parents: function(elem){return jQuery.dir(elem,"parentNode");},
+ next: function(elem){return jQuery.nth(elem,2,"nextSibling");},
+ prev: function(elem){return jQuery.nth(elem,2,"previousSibling");},
+ nextAll: function(elem){return jQuery.dir(elem,"nextSibling");},
+ prevAll: function(elem){return jQuery.dir(elem,"previousSibling");},
+ siblings: function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);},
+ children: function(elem){return jQuery.sibling(elem.firstChild);},
+ contents: function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);}
+}, function(name, fn){
+ jQuery.fn[ name ] = function( selector ) {
+ var ret = jQuery.map( this, fn );
+
+ if ( selector && typeof selector == "string" )
+ ret = jQuery.multiFilter( selector, ret );
+
+ return this.pushStack( jQuery.unique( ret ) );
+ };
+});
+
+jQuery.each({
+ appendTo: "append",
+ prependTo: "prepend",
+ insertBefore: "before",
+ insertAfter: "after",
+ replaceAll: "replaceWith"
+}, function(name, original){
+ jQuery.fn[ name ] = function() {
+ var args = arguments;
+
+ return this.each(function(){
+ for ( var i = 0, length = args.length; i < length; i++ )
+ jQuery( args[ i ] )[ original ]( this );
+ });
+ };
+});
+
+jQuery.each({
+ removeAttr: function( name ) {
+ jQuery.attr( this, name, "" );
+ if (this.nodeType == 1)
+ this.removeAttribute( name );
+ },
+
+ addClass: function( classNames ) {
+ jQuery.className.add( this, classNames );
+ },
+
+ removeClass: function( classNames ) {
+ jQuery.className.remove( this, classNames );
+ },
+
+ toggleClass: function( classNames ) {
+ jQuery.className[ jQuery.className.has( this, classNames ) ? "remove" : "add" ]( this, classNames );
+ },
+
+ remove: function( selector ) {
+ if ( !selector || jQuery.filter( selector, [ this ] ).r.length ) {
+ // Prevent memory leaks
+ jQuery( "*", this ).add(this).each(function(){
+ jQuery.event.remove(this);
+ jQuery.removeData(this);
+ });
+ if (this.parentNode)
+ this.parentNode.removeChild( this );
+ }
+ },
+
+ empty: function() {
+ // Remove element nodes and prevent memory leaks
+ jQuery( ">*", this ).remove();
+
+ // Remove any remaining nodes
+ while ( this.firstChild )
+ this.removeChild( this.firstChild );
+ }
+}, function(name, fn){
+ jQuery.fn[ name ] = function(){
+ return this.each( fn, arguments );
+ };
+});
+
+jQuery.each([ "Height", "Width" ], function(i, name){
+ var type = name.toLowerCase();
+
+ jQuery.fn[ type ] = function( size ) {
+ // Get window width or height
+ return this[0] == window ?
+ // Opera reports document.body.client[Width/Height] properly in both quirks and standards
+ jQuery.browser.opera && document.body[ "client" + name ] ||
+
+ // Safari reports inner[Width/Height] just fine (Mozilla and Opera include scroll bar widths)
+ jQuery.browser.safari && window[ "inner" + name ] ||
+
+ // Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
+ document.compatMode == "CSS1Compat" && document.documentElement[ "client" + name ] || document.body[ "client" + name ] :
+
+ // Get document width or height
+ this[0] == document ?
+ // Either scroll[Width/Height] or offset[Width/Height], whichever is greater
+ Math.max(
+ Math.max(document.body["scroll" + name], document.documentElement["scroll" + name]),
+ Math.max(document.body["offset" + name], document.documentElement["offset" + name])
+ ) :
+
+ // Get or set width or height on the element
+ size == undefined ?
+ // Get width or height on the element
+ (this.length ? jQuery.css( this[0], type ) : null) :
+
+ // Set the width or height on the element (default to pixels if value is unitless)
+ this.css( type, size.constructor == String ? size : size + "px" );
+ };
+});
+
+// Helper function used by the dimensions and offset modules
+function num(elem, prop) {
+ return elem[0] && parseInt( jQuery.curCSS(elem[0], prop, true), 10 ) || 0;
+}var chars = jQuery.browser.safari && parseInt(jQuery.browser.version) < 417 ?
+ "(?:[\\w*_-]|\\\\.)" :
+ "(?:[\\w\u0128-\uFFFF*_-]|\\\\.)",
+ quickChild = new RegExp("^>\\s*(" + chars + "+)"),
+ quickID = new RegExp("^(" + chars + "+)(#)(" + chars + "+)"),
+ quickClass = new RegExp("^([#.]?)(" + chars + "*)");
+
+jQuery.extend({
+ expr: {
+ "": function(a,i,m){return m[2]=="*"||jQuery.nodeName(a,m[2]);},
+ "#": function(a,i,m){return a.getAttribute("id")==m[2];},
+ ":": {
+ // Position Checks
+ lt: function(a,i,m){return i<m[3]-0;},
+ gt: function(a,i,m){return i>m[3]-0;},
+ nth: function(a,i,m){return m[3]-0==i;},
+ eq: function(a,i,m){return m[3]-0==i;},
+ first: function(a,i){return i==0;},
+ last: function(a,i,m,r){return i==r.length-1;},
+ even: function(a,i){return i%2==0;},
+ odd: function(a,i){return i%2;},
+
+ // Child Checks
+ "first-child": function(a){return a.parentNode.getElementsByTagName("*")[0]==a;},
+ "last-child": function(a){return jQuery.nth(a.parentNode.lastChild,1,"previousSibling")==a;},
+ "only-child": function(a){return !jQuery.nth(a.parentNode.lastChild,2,"previousSibling");},
+
+ // Parent Checks
+ parent: function(a){return a.firstChild;},
+ empty: function(a){return !a.firstChild;},
+
+ // Text Check
+ contains: function(a,i,m){return (a.textContent||a.innerText||jQuery(a).text()||"").indexOf(m[3])>=0;},
+
+ // Visibility
+ visible: function(a){return "hidden"!=a.type&&jQuery.css(a,"display")!="none"&&jQuery.css(a,"visibility")!="hidden";},
+ hidden: function(a){return "hidden"==a.type||jQuery.css(a,"display")=="none"||jQuery.css(a,"visibility")=="hidden";},
+
+ // Form attributes
+ enabled: function(a){return !a.disabled;},
+ disabled: function(a){return a.disabled;},
+ checked: function(a){return a.checked;},
+ selected: function(a){return a.selected||jQuery.attr(a,"selected");},
+
+ // Form elements
+ text: function(a){return "text"==a.type;},
+ radio: function(a){return "radio"==a.type;},
+ checkbox: function(a){return "checkbox"==a.type;},
+ file: function(a){return "file"==a.type;},
+ password: function(a){return "password"==a.type;},
+ submit: function(a){return "submit"==a.type;},
+ image: function(a){return "image"==a.type;},
+ reset: function(a){return "reset"==a.type;},
+ button: function(a){return "button"==a.type||jQuery.nodeName(a,"button");},
+ input: function(a){return /input|select|textarea|button/i.test(a.nodeName);},
+
+ // :has()
+ has: function(a,i,m){return jQuery.find(m[3],a).length;},
+
+ // :header
+ header: function(a){return /h\d/i.test(a.nodeName);},
+
+ // :animated
+ animated: function(a){return jQuery.grep(jQuery.timers,function(fn){return a==fn.elem;}).length;}
+ }
+ },
+
+ // The regular expressions that power the parsing engine
+ parse: [
+ // Match: [@value='test'], [@foo]
+ /^(\[) *@?([\w-]+) *([!*$^~=]*) *('?"?)(.*?)\4 *\]/,
+
+ // Match: :contains('foo')
+ /^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/,
+
+ // Match: :even, :last-child, #id, .class
+ new RegExp("^([:.#]*)(" + chars + "+)")
+ ],
+
+ multiFilter: function( expr, elems, not ) {
+ var old, cur = [];
+
+ while ( expr && expr != old ) {
+ old = expr;
+ var f = jQuery.filter( expr, elems, not );
+ expr = f.t.replace(/^\s*,\s*/, "" );
+ cur = not ? elems = f.r : jQuery.merge( cur, f.r );
+ }
+
+ return cur;
+ },
+
+ find: function( t, context ) {
+ // Quickly handle non-string expressions
+ if ( typeof t != "string" )
+ return [ t ];
+
+ // check to make sure context is a DOM element or a document
+ if ( context && context.nodeType != 1 && context.nodeType != 9)
+ return [ ];
+
+ // Set the correct context (if none is provided)
+ context = context || document;
+
+ // Initialize the search
+ var ret = [context], done = [], last, nodeName;
+
+ // Continue while a selector expression exists, and while
+ // we're no longer looping upon ourselves
+ while ( t && last != t ) {
+ var r = [];
+ last = t;
+
+ t = jQuery.trim(t);
+
+ var foundToken = false,
+
+ // An attempt at speeding up child selectors that
+ // point to a specific element tag
+ re = quickChild,
+
+ m = re.exec(t);
+
+ if ( m ) {
+ nodeName = m[1].toUpperCase();
+
+ // Perform our own iteration and filter
+ for ( var i = 0; ret[i]; i++ )
+ for ( var c = ret[i].firstChild; c; c = c.nextSibling )
+ if ( c.nodeType == 1 && (nodeName == "*" || c.nodeName.toUpperCase() == nodeName) )
+ r.push( c );
+
+ ret = r;
+ t = t.replace( re, "" );
+ if ( t.indexOf(" ") == 0 ) continue;
+ foundToken = true;
+ } else {
+ re = /^([>+~])\s*(\w*)/i;
+
+ if ( (m = re.exec(t)) != null ) {
+ r = [];
+
+ var merge = {};
+ nodeName = m[2].toUpperCase();
+ m = m[1];
+
+ for ( var j = 0, rl = ret.length; j < rl; j++ ) {
+ var n = m == "~" || m == "+" ? ret[j].nextSibling : ret[j].firstChild;
+ for ( ; n; n = n.nextSibling )
+ if ( n.nodeType == 1 ) {
+ var id = jQuery.data(n);
+
+ if ( m == "~" && merge[id] ) break;
+
+ if (!nodeName || n.nodeName.toUpperCase() == nodeName ) {
+ if ( m == "~" ) merge[id] = true;
+ r.push( n );
+ }
+
+ if ( m == "+" ) break;
+ }
+ }
+
+ ret = r;
+
+ // And remove the token
+ t = jQuery.trim( t.replace( re, "" ) );
+ foundToken = true;
+ }
+ }
+
+ // See if there's still an expression, and that we haven't already
+ // matched a token
+ if ( t && !foundToken ) {
+ // Handle multiple expressions
+ if ( !t.indexOf(",") ) {
+ // Clean the result set
+ if ( context == ret[0] ) ret.shift();
+
+ // Merge the result sets
+ done = jQuery.merge( done, ret );
+
+ // Reset the context
+ r = ret = [context];
+
+ // Touch up the selector string
+ t = " " + t.substr(1,t.length);
+
+ } else {
+ // Optimize for the case nodeName#idName
+ var re2 = quickID;
+ var m = re2.exec(t);
+
+ // Re-organize the results, so that they're consistent
+ if ( m ) {
+ m = [ 0, m[2], m[3], m[1] ];
+
+ } else {
+ // Otherwise, do a traditional filter check for
+ // ID, class, and element selectors
+ re2 = quickClass;
+ m = re2.exec(t);
+ }
+
+ m[2] = m[2].replace(/\\/g, "");
+
+ var elem = ret[ret.length-1];
+
+ // Try to do a global search by ID, where we can
+ if ( m[1] == "#" && elem && elem.getElementById && !jQuery.isXMLDoc(elem) ) {
+ // Optimization for HTML document case
+ var oid = elem.getElementById(m[2]);
+
+ // Do a quick check for the existence of the actual ID attribute
+ // to avoid selecting by the name attribute in IE
+ // also check to insure id is a string to avoid selecting an element with the name of 'id' inside a form
+ if ( (jQuery.browser.msie||jQuery.browser.opera) && oid && typeof oid.id == "string" && oid.id != m[2] )
+ oid = jQuery('[@id="'+m[2]+'"]', elem)[0];
+
+ // Do a quick check for node name (where applicable) so
+ // that div#foo searches will be really fast
+ ret = r = oid && (!m[3] || jQuery.nodeName(oid, m[3])) ? [oid] : [];
+ } else {
+ // We need to find all descendant elements
+ for ( var i = 0; ret[i]; i++ ) {
+ // Grab the tag name being searched for
+ var tag = m[1] == "#" && m[3] ? m[3] : m[1] != "" || m[0] == "" ? "*" : m[2];
+
+ // Handle IE7 being really dumb about <object>s
+ if ( tag == "*" && ret[i].nodeName.toLowerCase() == "object" )
+ tag = "param";
+
+ r = jQuery.merge( r, ret[i].getElementsByTagName( tag ));
+ }
+
+ // It's faster to filter by class and be done with it
+ if ( m[1] == "." )
+ r = jQuery.classFilter( r, m[2] );
+
+ // Same with ID filtering
+ if ( m[1] == "#" ) {
+ var tmp = [];
+
+ // Try to find the element with the ID
+ for ( var i = 0; r[i]; i++ )
+ if ( r[i].getAttribute("id") == m[2] ) {
+ tmp = [ r[i] ];
+ break;
+ }
+
+ r = tmp;
+ }
+
+ ret = r;
+ }
+
+ t = t.replace( re2, "" );
+ }
+
+ }
+
+ // If a selector string still exists
+ if ( t ) {
+ // Attempt to filter it
+ var val = jQuery.filter(t,r);
+ ret = r = val.r;
+ t = jQuery.trim(val.t);
+ }
+ }
+
+ // An error occurred with the selector;
+ // just return an empty set instead
+ if ( t )
+ ret = [];
+
+ // Remove the root context
+ if ( ret && context == ret[0] )
+ ret.shift();
+
+ // And combine the results
+ done = jQuery.merge( done, ret );
+
+ return done;
+ },
+
+ classFilter: function(r,m,not){
+ m = " " + m + " ";
+ var tmp = [];
+ for ( var i = 0; r[i]; i++ ) {
+ var pass = (" " + r[i].className + " ").indexOf( m ) >= 0;
+ if ( !not && pass || not && !pass )
+ tmp.push( r[i] );
+ }
+ return tmp;
+ },
+
+ filter: function(t,r,not) {
+ var last;
+
+ // Look for common filter expressions
+ while ( t && t != last ) {
+ last = t;
+
+ var p = jQuery.parse, m;
+
+ for ( var i = 0; p[i]; i++ ) {
+ m = p[i].exec( t );
+
+ if ( m ) {
+ // Remove what we just matched
+ t = t.substring( m[0].length );
+
+ m[2] = m[2].replace(/\\/g, "");
+ break;
+ }
+ }
+
+ if ( !m )
+ break;
+
+ // :not() is a special case that can be optimized by
+ // keeping it out of the expression list
+ if ( m[1] == ":" && m[2] == "not" )
+ // optimize if only one selector found (most common case)
+ r = isSimple.test( m[3] ) ?
+ jQuery.filter(m[3], r, true).r :
+ jQuery( r ).not( m[3] );
+
+ // We can get a big speed boost by filtering by class here
+ else if ( m[1] == "." )
+ r = jQuery.classFilter(r, m[2], not);
+
+ else if ( m[1] == "[" ) {
+ var tmp = [], type = m[3];
+
+ for ( var i = 0, rl = r.length; i < rl; i++ ) {
+ var a = r[i], z = a[ jQuery.props[m[2]] || m[2] ];
+
+ if ( z == null || /href|src|selected/.test(m[2]) )
+ z = jQuery.attr(a,m[2]) || '';
+
+ if ( (type == "" && !!z ||
+ type == "=" && z == m[5] ||
+ type == "!=" && z != m[5] ||
+ type == "^=" && z && !z.indexOf(m[5]) ||
+ type == "$=" && z.substr(z.length - m[5].length) == m[5] ||
+ (type == "*=" || type == "~=") && z.indexOf(m[5]) >= 0) ^ not )
+ tmp.push( a );
+ }
+
+ r = tmp;
+
+ // We can get a speed boost by handling nth-child here
+ } else if ( m[1] == ":" && m[2] == "nth-child" ) {
+ var merge = {}, tmp = [],
+ // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
+ test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(
+ m[3] == "even" && "2n" || m[3] == "odd" && "2n+1" ||
+ !/\D/.test(m[3]) && "0n+" + m[3] || m[3]),
+ // calculate the numbers (first)n+(last) including if they are negative
+ first = (test[1] + (test[2] || 1)) - 0, last = test[3] - 0;
+
+ // loop through all the elements left in the jQuery object
+ for ( var i = 0, rl = r.length; i < rl; i++ ) {
+ var node = r[i], parentNode = node.parentNode, id = jQuery.data(parentNode);
+
+ if ( !merge[id] ) {
+ var c = 1;
+
+ for ( var n = parentNode.firstChild; n; n = n.nextSibling )
+ if ( n.nodeType == 1 )
+ n.nodeIndex = c++;
+
+ merge[id] = true;
+ }
+
+ var add = false;
+
+ if ( first == 0 ) {
+ if ( node.nodeIndex == last )
+ add = true;
+ } else if ( (node.nodeIndex - last) % first == 0 && (node.nodeIndex - last) / first >= 0 )
+ add = true;
+
+ if ( add ^ not )
+ tmp.push( node );
+ }
+
+ r = tmp;
+
+ // Otherwise, find the expression to execute
+ } else {
+ var fn = jQuery.expr[ m[1] ];
+ if ( typeof fn == "object" )
+ fn = fn[ m[2] ];
+
+ if ( typeof fn == "string" )
+ fn = eval("false||function(a,i){return " + fn + ";}");
+
+ // Execute it against the current filter
+ r = jQuery.grep( r, function(elem, i){
+ return fn(elem, i, m, r);
+ }, not );
+ }
+ }
+
+ // Return an array of filtered elements (r)
+ // and the modified expression string (t)
+ return { r: r, t: t };
+ },
+
+ dir: function( elem, dir ){
+ var matched = [],
+ cur = elem[dir];
+ while ( cur && cur != document ) {
+ if ( cur.nodeType == 1 )
+ matched.push( cur );
+ cur = cur[dir];
+ }
+ return matched;
+ },
+
+ nth: function(cur,result,dir,elem){
+ result = result || 1;
+ var num = 0;
+
+ for ( ; cur; cur = cur[dir] )
+ if ( cur.nodeType == 1 && ++num == result )
+ break;
+
+ return cur;
+ },
+
+ sibling: function( n, elem ) {
+ var r = [];
+
+ for ( ; n; n = n.nextSibling ) {
+ if ( n.nodeType == 1 && n != elem )
+ r.push( n );
+ }
+
+ return r;
+ }
+});
+/*
+ * A number of helper functions used for managing events.
+ * Many of the ideas behind this code orignated from
+ * Dean Edwards' addEvent library.
+ */
+jQuery.event = {
+
+ // Bind an event to an element
+ // Original by Dean Edwards
+ add: function(elem, types, handler, data) {
+ if ( elem.nodeType == 3 || elem.nodeType == 8 )
+ return;
+
+ // For whatever reason, IE has trouble passing the window object
+ // around, causing it to be cloned in the process
+ if ( jQuery.browser.msie && elem.setInterval )
+ elem = window;
+
+ // Make sure that the function being executed has a unique ID
+ if ( !handler.guid )
+ handler.guid = this.guid++;
+
+ // if data is passed, bind to handler
+ if( data != undefined ) {
+ // Create temporary function pointer to original handler
+ var fn = handler;
+
+ // Create unique handler function, wrapped around original handler
+ handler = this.proxy( fn, function() {
+ // Pass arguments and context to original handler
+ return fn.apply(this, arguments);
+ });
+
+ // Store data in unique handler
+ handler.data = data;
+ }
+
+ // Init the element's event structure
+ var events = jQuery.data(elem, "events") || jQuery.data(elem, "events", {}),
+ handle = jQuery.data(elem, "handle") || jQuery.data(elem, "handle", function(){
+ // Handle the second event of a trigger and when
+ // an event is called after a page has unloaded
+ if ( typeof jQuery != "undefined" && !jQuery.event.triggered )
+ return jQuery.event.handle.apply(arguments.callee.elem, arguments);
+ });
+ // Add elem as a property of the handle function
+ // This is to prevent a memory leak with non-native
+ // event in IE.
+ handle.elem = elem;
+
+ // Handle multiple events separated by a space
+ // jQuery(...).bind("mouseover mouseout", fn);
+ jQuery.each(types.split(/\s+/), function(index, type) {
+ // Namespaced event handlers
+ var parts = type.split(".");
+ type = parts[0];
+ handler.type = parts[1];
+
+ // Get the current list of functions bound to this event
+ var handlers = events[type];
+
+ // Init the event handler queue
+ if (!handlers) {
+ handlers = events[type] = {};
+
+ // Check for a special event handler
+ // Only use addEventListener/attachEvent if the special
+ // events handler returns false
+ if ( !jQuery.event.special[type] || jQuery.event.special[type].setup.call(elem) === false ) {
+ // Bind the global event handler to the element
+ if (elem.addEventListener)
+ elem.addEventListener(type, handle, false);
+ else if (elem.attachEvent)
+ elem.attachEvent("on" + type, handle);
+ }
+ }
+
+ // Add the function to the element's handler list
+ handlers[handler.guid] = handler;
+
+ // Keep track of which events have been used, for global triggering
+ jQuery.event.global[type] = true;
+ });
+
+ // Nullify elem to prevent memory leaks in IE
+ elem = null;
+ },
+
+ guid: 1,
+ global: {},
+
+ // Detach an event or set of events from an element
+ remove: function(elem, types, handler) {
+ // don't do events on text and comment nodes
+ if ( elem.nodeType == 3 || elem.nodeType == 8 )
+ return;
+
+ var events = jQuery.data(elem, "events"), ret, index;
+
+ if ( events ) {
+ // Unbind all events for the element
+ if ( types == undefined || (typeof types == "string" && types.charAt(0) == ".") )
+ for ( var type in events )
+ this.remove( elem, type + (types || "") );
+ else {
+ // types is actually an event object here
+ if ( types.type ) {
+ handler = types.handler;
+ types = types.type;
+ }
+
+ // Handle multiple events seperated by a space
+ // jQuery(...).unbind("mouseover mouseout", fn);
+ jQuery.each(types.split(/\s+/), function(index, type){
+ // Namespaced event handlers
+ var parts = type.split(".");
+ type = parts[0];
+
+ if ( events[type] ) {
+ // remove the given handler for the given type
+ if ( handler )
+ delete events[type][handler.guid];
+
+ // remove all handlers for the given type
+ else
+ for ( handler in events[type] )
+ // Handle the removal of namespaced events
+ if ( !parts[1] || events[type][handler].type == parts[1] )
+ delete events[type][handler];
+
+ // remove generic event handler if no more handlers exist
+ for ( ret in events[type] ) break;
+ if ( !ret ) {
+ if ( !jQuery.event.special[type] || jQuery.event.special[type].teardown.call(elem) === false ) {
+ if (elem.removeEventListener)
+ elem.removeEventListener(type, jQuery.data(elem, "handle"), false);
+ else if (elem.detachEvent)
+ elem.detachEvent("on" + type, jQuery.data(elem, "handle"));
+ }
+ ret = null;
+ delete events[type];
+ }
+ }
+ });
+ }
+
+ // Remove the expando if it's no longer used
+ for ( ret in events ) break;
+ if ( !ret ) {
+ var handle = jQuery.data( elem, "handle" );
+ if ( handle ) handle.elem = null;
+ jQuery.removeData( elem, "events" );
+ jQuery.removeData( elem, "handle" );
+ }
+ }
+ },
+
+ trigger: function(type, data, elem, donative, extra) {
+ // Clone the incoming data, if any
+ data = jQuery.makeArray(data);
+
+ if ( type.indexOf("!") >= 0 ) {
+ type = type.slice(0, -1);
+ var exclusive = true;
+ }
+
+ // Handle a global trigger
+ if ( !elem ) {
+ // Only trigger if we've ever bound an event for it
+ if ( this.global[type] )
+ jQuery("*").add([window, document]).trigger(type, data);
+
+ // Handle triggering a single element
+ } else {
+ // don't do events on text and comment nodes
+ if ( elem.nodeType == 3 || elem.nodeType == 8 )
+ return undefined;
+
+ var val, ret, fn = jQuery.isFunction( elem[ type ] || null ),
+ // Check to see if we need to provide a fake event, or not
+ event = !data[0] || !data[0].preventDefault;
+
+ // Pass along a fake event
+ if ( event ) {
+ data.unshift({
+ type: type,
+ target: elem,
+ preventDefault: function(){},
+ stopPropagation: function(){},
+ timeStamp: now()
+ });
+ data[0][expando] = true; // no need to fix fake event
+ }
+
+ // Enforce the right trigger type
+ data[0].type = type;
+ if ( exclusive )
+ data[0].exclusive = true;
+
+ // Trigger the event, it is assumed that "handle" is a function
+ var handle = jQuery.data(elem, "handle");
+ if ( handle )
+ val = handle.apply( elem, data );
+
+ // Handle triggering native .onfoo handlers (and on links since we don't call .click() for links)
+ if ( (!fn || (jQuery.nodeName(elem, 'a') && type == "click")) && elem["on"+type] && elem["on"+type].apply( elem, data ) === false )
+ val = false;
+
+ // Extra functions don't get the custom event object
+ if ( event )
+ data.shift();
+
+ // Handle triggering of extra function
+ if ( extra && jQuery.isFunction( extra ) ) {
+ // call the extra function and tack the current return value on the end for possible inspection
+ ret = extra.apply( elem, val == null ? data : data.concat( val ) );
+ // if anything is returned, give it precedence and have it overwrite the previous value
+ if (ret !== undefined)
+ val = ret;
+ }
+
+ // Trigger the native events (except for clicks on links)
+ if ( fn && donative !== false && val !== false && !(jQuery.nodeName(elem, 'a') && type == "click") ) {
+ this.triggered = true;
+ try {
+ elem[ type ]();
+ // prevent IE from throwing an error for some hidden elements
+ } catch (e) {}
+ }
+
+ this.triggered = false;
+ }
+
+ return val;
+ },
+
+ handle: function(event) {
+ // returned undefined or false
+ var val, ret, namespace, all, handlers;
+
+ event = arguments[0] = jQuery.event.fix( event || window.event );
+
+ // Namespaced event handlers
+ namespace = event.type.split(".");
+ event.type = namespace[0];
+ namespace = namespace[1];
+ // Cache this now, all = true means, any handler
+ all = !namespace && !event.exclusive;
+
+ handlers = ( jQuery.data(this, "events") || {} )[event.type];
+
+ for ( var j in handlers ) {
+ var handler = handlers[j];
+
+ // Filter the functions by class
+ if ( all || handler.type == namespace ) {
+ // Pass in a reference to the handler function itself
+ // So that we can later remove it
+ event.handler = handler;
+ event.data = handler.data;
+
+ ret = handler.apply( this, arguments );
+
+ if ( val !== false )
+ val = ret;
+
+ if ( ret === false ) {
+ event.preventDefault();
+ event.stopPropagation();
+ }
+ }
+ }
+
+ return val;
+ },
+
+ fix: function(event) {
+ if ( event[expando] == true )
+ return event;
+
+ // store a copy of the original event object
+ // and "clone" to set read-only properties
+ var originalEvent = event;
+ event = { originalEvent: originalEvent };
+ var props = "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target timeStamp toElement type view wheelDelta which".split(" ");
+ for ( var i=props.length; i; i-- )
+ event[ props[i] ] = originalEvent[ props[i] ];
+
+ // Mark it as fixed
+ event[expando] = true;
+
+ // add preventDefault and stopPropagation since
+ // they will not work on the clone
+ event.preventDefault = function() {
+ // if preventDefault exists run it on the original event
+ if (originalEvent.preventDefault)
+ originalEvent.preventDefault();
+ // otherwise set the returnValue property of the original event to false (IE)
+ originalEvent.returnValue = false;
+ };
+ event.stopPropagation = function() {
+ // if stopPropagation exists run it on the original event
+ if (originalEvent.stopPropagation)
+ originalEvent.stopPropagation();
+ // otherwise set the cancelBubble property of the original event to true (IE)
+ originalEvent.cancelBubble = true;
+ };
+
+ // Fix timeStamp
+ event.timeStamp = event.timeStamp || now();
+
+ // Fix target property, if necessary
+ if ( !event.target )
+ event.target = event.srcElement || document; // Fixes #1925 where srcElement might not be defined either
+
+ // check if target is a textnode (safari)
+ if ( event.target.nodeType == 3 )
+ event.target = event.target.parentNode;
+
+ // Add relatedTarget, if necessary
+ if ( !event.relatedTarget && event.fromElement )
+ event.relatedTarget = event.fromElement == event.target ? event.toElement : event.fromElement;
+
+ // Calculate pageX/Y if missing and clientX/Y available
+ if ( event.pageX == null && event.clientX != null ) {
+ var doc = document.documentElement, body = document.body;
+ event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc.clientLeft || 0);
+ event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc.clientTop || 0);
+ }
+
+ // Add which for key events
+ if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) )
+ event.which = event.charCode || event.keyCode;
+
+ // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
+ if ( !event.metaKey && event.ctrlKey )
+ event.metaKey = event.ctrlKey;
+
+ // Add which for click: 1 == left; 2 == middle; 3 == right
+ // Note: button is not normalized, so don't use it
+ if ( !event.which && event.button )
+ event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
+
+ return event;
+ },
+
+ proxy: function( fn, proxy ){
+ // Set the guid of unique handler to the same of original handler, so it can be removed
+ proxy.guid = fn.guid = fn.guid || proxy.guid || this.guid++;
+ // So proxy can be declared as an argument
+ return proxy;
+ },
+
+ special: {
+ ready: {
+ setup: function() {
+ // Make sure the ready event is setup
+ bindReady();
+ return;
+ },
+
+ teardown: function() { return; }
+ },
+
+ mouseenter: {
+ setup: function() {
+ if ( jQuery.browser.msie ) return false;
+ jQuery(this).bind("mouseover", jQuery.event.special.mouseenter.handler);
+ return true;
+ },
+
+ teardown: function() {
+ if ( jQuery.browser.msie ) return false;
+ jQuery(this).unbind("mouseover", jQuery.event.special.mouseenter.handler);
+ return true;
+ },
+
+ handler: function(event) {
+ // If we actually just moused on to a sub-element, ignore it
+ if ( withinElement(event, this) ) return true;
+ // Execute the right handlers by setting the event type to mouseenter
+ event.type = "mouseenter";
+ return jQuery.event.handle.apply(this, arguments);
+ }
+ },
+
+ mouseleave: {
+ setup: function() {
+ if ( jQuery.browser.msie ) return false;
+ jQuery(this).bind("mouseout", jQuery.event.special.mouseleave.handler);
+ return true;
+ },
+
+ teardown: function() {
+ if ( jQuery.browser.msie ) return false;
+ jQuery(this).unbind("mouseout", jQuery.event.special.mouseleave.handler);
+ return true;
+ },
+
+ handler: function(event) {
+ // If we actually just moused on to a sub-element, ignore it
+ if ( withinElement(event, this) ) return true;
+ // Execute the right handlers by setting the event type to mouseleave
+ event.type = "mouseleave";
+ return jQuery.event.handle.apply(this, arguments);
+ }
+ }
+ }
+};
+
+jQuery.fn.extend({
+ bind: function( type, data, fn ) {
+ return type == "unload" ? this.one(type, data, fn) : this.each(function(){
+ jQuery.event.add( this, type, fn || data, fn && data );
+ });
+ },
+
+ one: function( type, data, fn ) {
+ var one = jQuery.event.proxy( fn || data, function(event) {
+ jQuery(this).unbind(event, one);
+ return (fn || data).apply( this, arguments );
+ });
+ return this.each(function(){
+ jQuery.event.add( this, type, one, fn && data);
+ });
+ },
+
+ unbind: function( type, fn ) {
+ return this.each(function(){
+ jQuery.event.remove( this, type, fn );
+ });
+ },
+
+ trigger: function( type, data, fn ) {
+ return this.each(function(){
+ jQuery.event.trigger( type, data, this, true, fn );
+ });
+ },
+
+ triggerHandler: function( type, data, fn ) {
+ return this[0] && jQuery.event.trigger( type, data, this[0], false, fn );
+ },
+
+ toggle: function( fn ) {
+ // Save reference to arguments for access in closure
+ var args = arguments, i = 1;
+
+ // link all the functions, so any of them can unbind this click handler
+ while( i < args.length )
+ jQuery.event.proxy( fn, args[i++] );
+
+ return this.click( jQuery.event.proxy( fn, function(event) {
+ // Figure out which function to execute
+ this.lastToggle = ( this.lastToggle || 0 ) % i;
+
+ // Make sure that clicks stop
+ event.preventDefault();
+
+ // and execute the function
+ return args[ this.lastToggle++ ].apply( this, arguments ) || false;
+ }));
+ },
+
+ hover: function(fnOver, fnOut) {
+ return this.bind('mouseenter', fnOver).bind('mouseleave', fnOut);
+ },
+
+ ready: function(fn) {
+ // Attach the listeners
+ bindReady();
+
+ // If the DOM is already ready
+ if ( jQuery.isReady )
+ // Execute the function immediately
+ fn.call( document, jQuery );
+
+ // Otherwise, remember the function for later
+ else
+ // Add the function to the wait list
+ jQuery.readyList.push( function() { return fn.call(this, jQuery); } );
+
+ return this;
+ }
+});
+
+jQuery.extend({
+ isReady: false,
+ readyList: [],
+ // Handle when the DOM is ready
+ ready: function() {
+ // Make sure that the DOM is not already loaded
+ if ( !jQuery.isReady ) {
+ // Remember that the DOM is ready
+ jQuery.isReady = true;
+
+ // If there are functions bound, to execute
+ if ( jQuery.readyList ) {
+ // Execute all of them
+ jQuery.each( jQuery.readyList, function(){
+ this.call( document );
+ });
+
+ // Reset the list of functions
+ jQuery.readyList = null;
+ }
+
+ // Trigger any bound ready events
+ jQuery(document).triggerHandler("ready");
+ }
+ }
+});
+
+var readyBound = false;
+
+function bindReady(){
+ if ( readyBound ) return;
+ readyBound = true;
+
+ // Mozilla, Opera (see further below for it) and webkit nightlies currently support this event
+ if ( document.addEventListener && !jQuery.browser.opera)
+ // Use the handy event callback
+ document.addEventListener( "DOMContentLoaded", jQuery.ready, false );
+
+ // If IE is used and is not in a frame
+ // Continually check to see if the document is ready
+ if ( jQuery.browser.msie && window == top ) (function(){
+ if (jQuery.isReady) return;
+ try {
+ // If IE is used, use the trick by Diego Perini
+ // http://javascript.nwbox.com/IEContentLoaded/
+ document.documentElement.doScroll("left");
+ } catch( error ) {
+ setTimeout( arguments.callee, 0 );
+ return;
+ }
+ // and execute any waiting functions
+ jQuery.ready();
+ })();
+
+ if ( jQuery.browser.opera )
+ document.addEventListener( "DOMContentLoaded", function () {
+ if (jQuery.isReady) return;
+ for (var i = 0; i < document.styleSheets.length; i++)
+ if (document.styleSheets[i].disabled) {
+ setTimeout( arguments.callee, 0 );
+ return;
+ }
+ // and execute any waiting functions
+ jQuery.ready();
+ }, false);
+
+ if ( jQuery.browser.safari ) {
+ var numStyles;
+ (function(){
+ if (jQuery.isReady) return;
+ if ( document.readyState != "loaded" && document.readyState != "complete" ) {
+ setTimeout( arguments.callee, 0 );
+ return;
+ }
+ if ( numStyles === undefined )
+ numStyles = jQuery("style, link[rel=stylesheet]").length;
+ if ( document.styleSheets.length != numStyles ) {
+ setTimeout( arguments.callee, 0 );
+ return;
+ }
+ // and execute any waiting functions
+ jQuery.ready();
+ })();
+ }
+
+ // A fallback to window.onload, that will always work
+ jQuery.event.add( window, "load", jQuery.ready );
+}
+
+jQuery.each( ("blur,focus,load,resize,scroll,unload,click,dblclick," +
+ "mousedown,mouseup,mousemove,mouseover,mouseout,change,select," +
+ "submit,keydown,keypress,keyup,error").split(","), function(i, name){
+
+ // Handle event binding
+ jQuery.fn[name] = function(fn){
+ return fn ? this.bind(name, fn) : this.trigger(name);
+ };
+});
+
+// Checks if an event happened on an element within another element
+// Used in jQuery.event.special.mouseenter and mouseleave handlers
+var withinElement = function(event, elem) {
+ // Check if mouse(over|out) are still within the same parent element
+ var parent = event.relatedTarget;
+ // Traverse up the tree
+ while ( parent && parent != elem ) try { parent = parent.parentNode; } catch(error) { parent = elem; }
+ // Return true if we actually just moused on to a sub-element
+ return parent == elem;
+};
+
+// Prevent memory leaks in IE
+// And prevent errors on refresh with events like mouseover in other browsers
+// Window isn't included so as not to unbind existing unload events
+jQuery(window).bind("unload", function() {
+ jQuery("*").add(document).unbind();
+});
+jQuery.fn.extend({
+ // Keep a copy of the old load
+ _load: jQuery.fn.load,
+
+ load: function( url, params, callback ) {
+ if ( typeof url != 'string' )
+ return this._load( url );
+
+ var off = url.indexOf(" ");
+ if ( off >= 0 ) {
+ var selector = url.slice(off, url.length);
+ url = url.slice(0, off);
+ }
+
+ callback = callback || function(){};
+
+ // Default to a GET request
+ var type = "GET";
+
+ // If the second parameter was provided
+ if ( params )
+ // If it's a function
+ if ( jQuery.isFunction( params ) ) {
+ // We assume that it's the callback
+ callback = params;
+ params = null;
+
+ // Otherwise, build a param string
+ } else {
+ params = jQuery.param( params );
+ type = "POST";
+ }
+
+ var self = this;
+
+ // Request the remote document
+ jQuery.ajax({
+ url: url,
+ type: type,
+ dataType: "html",
+ data: params,
+ complete: function(res, status){
+ // If successful, inject the HTML into all the matched elements
+ if ( status == "success" || status == "notmodified" )
+ // See if a selector was specified
+ self.html( selector ?
+ // Create a dummy div to hold the results
+ jQuery("<div/>")
+ // inject the contents of the document in, removing the scripts
+ // to avoid any 'Permission Denied' errors in IE
+ .append(res.responseText.replace(/<script(.|\s)*?\/script>/g, ""))
+
+ // Locate the specified elements
+ .find(selector) :
+
+ // If not, just inject the full result
+ res.responseText );
+
+ self.each( callback, [res.responseText, status, res] );
+ }
+ });
+ return this;
+ },
+
+ serialize: function() {
+ return jQuery.param(this.serializeArray());
+ },
+ serializeArray: function() {
+ return this.map(function(){
+ return jQuery.nodeName(this, "form") ?
+ jQuery.makeArray(this.elements) : this;
+ })
+ .filter(function(){
+ return this.name && !this.disabled &&
+ (this.checked || /select|textarea/i.test(this.nodeName) ||
+ /text|hidden|password/i.test(this.type));
+ })
+ .map(function(i, elem){
+ var val = jQuery(this).val();
+ return val == null ? null :
+ val.constructor == Array ?
+ jQuery.map( val, function(val, i){
+ return {name: elem.name, value: val};
+ }) :
+ {name: elem.name, value: val};
+ }).get();
+ }
+});
+
+// Attach a bunch of functions for handling common AJAX events
+jQuery.each( "ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","), function(i,o){
+ jQuery.fn[o] = function(f){
+ return this.bind(o, f);
+ };
+});
+
+var jsc = now();
+
+jQuery.extend({
+ get: function( url, data, callback, type ) {
+ // shift arguments if data argument was ommited
+ if ( jQuery.isFunction( data ) ) {
+ callback = data;
+ data = null;
+ }
+
+ return jQuery.ajax({
+ type: "GET",
+ url: url,
+ data: data,
+ success: callback,
+ dataType: type
+ });
+ },
+
+ getScript: function( url, callback ) {
+ return jQuery.get(url, null, callback, "script");
+ },
+
+ getJSON: function( url, data, callback ) {
+ return jQuery.get(url, data, callback, "json");
+ },
+
+ post: function( url, data, callback, type ) {
+ if ( jQuery.isFunction( data ) ) {
+ callback = data;
+ data = {};
+ }
+
+ return jQuery.ajax({
+ type: "POST",
+ url: url,
+ data: data,
+ success: callback,
+ dataType: type
+ });
+ },
+
+ ajaxSetup: function( settings ) {
+ jQuery.extend( jQuery.ajaxSettings, settings );
+ },
+
+ ajaxSettings: {
+ url: location.href,
+ global: true,
+ type: "GET",
+ timeout: 0,
+ contentType: "application/x-www-form-urlencoded",
+ processData: true,
+ async: true,
+ data: null,
+ username: null,
+ password: null,
+ accepts: {
+ xml: "application/xml, text/xml",
+ html: "text/html",
+ script: "text/javascript, application/javascript",
+ json: "application/json, text/javascript",
+ text: "text/plain",
+ _default: "*/*"
+ }
+ },
+
+ // Last-Modified header cache for next request
+ lastModified: {},
+
+ ajax: function( s ) {
+ // Extend the settings, but re-extend 's' so that it can be
+ // checked again later (in the test suite, specifically)
+ s = jQuery.extend(true, s, jQuery.extend(true, {}, jQuery.ajaxSettings, s));
+
+ var jsonp, jsre = /=\?(&|$)/g, status, data,
+ type = s.type.toUpperCase();
+
+ // convert data if not already a string
+ if ( s.data && s.processData && typeof s.data != "string" )
+ s.data = jQuery.param(s.data);
+
+ // Handle JSONP Parameter Callbacks
+ if ( s.dataType == "jsonp" ) {
+ if ( type == "GET" ) {
+ if ( !s.url.match(jsre) )
+ s.url += (s.url.match(/\?/) ? "&" : "?") + (s.jsonp || "callback") + "=?";
+ } else if ( !s.data || !s.data.match(jsre) )
+ s.data = (s.data ? s.data + "&" : "") + (s.jsonp || "callback") + "=?";
+ s.dataType = "json";
+ }
+
+ // Build temporary JSONP function
+ if ( s.dataType == "json" && (s.data && s.data.match(jsre) || s.url.match(jsre)) ) {
+ jsonp = "jsonp" + jsc++;
+
+ // Replace the =? sequence both in the query string and the data
+ if ( s.data )
+ s.data = (s.data + "").replace(jsre, "=" + jsonp + "$1");
+ s.url = s.url.replace(jsre, "=" + jsonp + "$1");
+
+ // We need to make sure
+ // that a JSONP style response is executed properly
+ s.dataType = "script";
+
+ // Handle JSONP-style loading
+ window[ jsonp ] = function(tmp){
+ data = tmp;
+ success();
+ complete();
+ // Garbage collect
+ window[ jsonp ] = undefined;
+ try{ delete window[ jsonp ]; } catch(e){}
+ if ( head )
+ head.removeChild( script );
+ };
+ }
+
+ if ( s.dataType == "script" && s.cache == null )
+ s.cache = false;
+
+ if ( s.cache === false && type == "GET" ) {
+ var ts = now();
+ // try replacing _= if it is there
+ var ret = s.url.replace(/(\?|&)_=.*?(&|$)/, "$1_=" + ts + "$2");
+ // if nothing was replaced, add timestamp to the end
+ s.url = ret + ((ret == s.url) ? (s.url.match(/\?/) ? "&" : "?") + "_=" + ts : "");
+ }
+
+ // If data is available, append data to url for get requests
+ if ( s.data && type == "GET" ) {
+ s.url += (s.url.match(/\?/) ? "&" : "?") + s.data;
+
+ // IE likes to send both get and post data, prevent this
+ s.data = null;
+ }
+
+ // Watch for a new set of requests
+ if ( s.global && ! jQuery.active++ )
+ jQuery.event.trigger( "ajaxStart" );
+
+ // Matches an absolute URL, and saves the domain
+ var remote = /^(?:\w+:)?\/\/([^\/?#]+)/;
+
+ // If we're requesting a remote document
+ // and trying to load JSON or Script with a GET
+ if ( s.dataType == "script" && type == "GET"
+ && remote.test(s.url) && remote.exec(s.url)[1] != location.host ){
+ var head = document.getElementsByTagName("head")[0];
+ var script = document.createElement("script");
+ script.src = s.url;
+ if (s.scriptCharset)
+ script.charset = s.scriptCharset;
+
+ // Handle Script loading
+ if ( !jsonp ) {
+ var done = false;
+
+ // Attach handlers for all browsers
+ script.onload = script.onreadystatechange = function(){
+ if ( !done && (!this.readyState ||
+ this.readyState == "loaded" || this.readyState == "complete") ) {
+ done = true;
+ success();
+ complete();
+ head.removeChild( script );
+ }
+ };
+ }
+
+ head.appendChild(script);
+
+ // We handle everything using the script element injection
+ return undefined;
+ }
+
+ var requestDone = false;
+
+ // Create the request object; Microsoft failed to properly
+ // implement the XMLHttpRequest in IE7, so we use the ActiveXObject when it is available
+ var xhr = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
+
+ // Open the socket
+ // Passing null username, generates a login popup on Opera (#2865)
+ if( s.username )
+ xhr.open(type, s.url, s.async, s.username, s.password);
+ else
+ xhr.open(type, s.url, s.async);
+
+ // Need an extra try/catch for cross domain requests in Firefox 3
+ try {
+ // Set the correct header, if data is being sent
+ if ( s.data )
+ xhr.setRequestHeader("Content-Type", s.contentType);
+
+ // Set the If-Modified-Since header, if ifModified mode.
+ if ( s.ifModified )
+ xhr.setRequestHeader("If-Modified-Since",
+ jQuery.lastModified[s.url] || "Thu, 01 Jan 1970 00:00:00 GMT" );
+
+ // Set header so the called script knows that it's an XMLHttpRequest
+ xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
+
+ // Set the Accepts header for the server, depending on the dataType
+ xhr.setRequestHeader("Accept", s.dataType && s.accepts[ s.dataType ] ?
+ s.accepts[ s.dataType ] + ", */*" :
+ s.accepts._default );
+ } catch(e){}
+
+ // Allow custom headers/mimetypes
+ if ( s.beforeSend && s.beforeSend(xhr, s) === false ) {
+ // cleanup active request counter
+ s.global && jQuery.active--;
+ // close opended socket
+ xhr.abort();
+ return false;
+ }
+
+ if ( s.global )
+ jQuery.event.trigger("ajaxSend", [xhr, s]);
+
+ // Wait for a response to come back
+ var onreadystatechange = function(isTimeout){
+ // The transfer is complete and the data is available, or the request timed out
+ if ( !requestDone && xhr && (xhr.readyState == 4 || isTimeout == "timeout") ) {
+ requestDone = true;
+
+ // clear poll interval
+ if (ival) {
+ clearInterval(ival);
+ ival = null;
+ }
+
+ status = isTimeout == "timeout" && "timeout" ||
+ !jQuery.httpSuccess( xhr ) && "error" ||
+ s.ifModified && jQuery.httpNotModified( xhr, s.url ) && "notmodified" ||
+ "success";
+
+ if ( status == "success" ) {
+ // Watch for, and catch, XML document parse errors
+ try {
+ // process the data (runs the xml through httpData regardless of callback)
+ data = jQuery.httpData( xhr, s.dataType, s.dataFilter );
+ } catch(e) {
+ status = "parsererror";
+ }
+ }
+
+ // Make sure that the request was successful or notmodified
+ if ( status == "success" ) {
+ // Cache Last-Modified header, if ifModified mode.
+ var modRes;
+ try {
+ modRes = xhr.getResponseHeader("Last-Modified");
+ } catch(e) {} // swallow exception thrown by FF if header is not available
+
+ if ( s.ifModified && modRes )
+ jQuery.lastModified[s.url] = modRes;
+
+ // JSONP handles its own success callback
+ if ( !jsonp )
+ success();
+ } else
+ jQuery.handleError(s, xhr, status);
+
+ // Fire the complete handlers
+ complete();
+
+ // Stop memory leaks
+ if ( s.async )
+ xhr = null;
+ }
+ };
+
+ if ( s.async ) {
+ // don't attach the handler to the request, just poll it instead
+ var ival = setInterval(onreadystatechange, 13);
+
+ // Timeout checker
+ if ( s.timeout > 0 )
+ setTimeout(function(){
+ // Check to see if the request is still happening
+ if ( xhr ) {
+ // Cancel the request
+ xhr.abort();
+
+ if( !requestDone )
+ onreadystatechange( "timeout" );
+ }
+ }, s.timeout);
+ }
+
+ // Send the data
+ try {
+ xhr.send(s.data);
+ } catch(e) {
+ jQuery.handleError(s, xhr, null, e);
+ }
+
+ // firefox 1.5 doesn't fire statechange for sync requests
+ if ( !s.async )
+ onreadystatechange();
+
+ function success(){
+ // If a local callback was specified, fire it and pass it the data
+ if ( s.success )
+ s.success( data, status );
+
+ // Fire the global callback
+ if ( s.global )
+ jQuery.event.trigger( "ajaxSuccess", [xhr, s] );
+ }
+
+ function complete(){
+ // Process result
+ if ( s.complete )
+ s.complete(xhr, status);
+
+ // The request was completed
+ if ( s.global )
+ jQuery.event.trigger( "ajaxComplete", [xhr, s] );
+
+ // Handle the global AJAX counter
+ if ( s.global && ! --jQuery.active )
+ jQuery.event.trigger( "ajaxStop" );
+ }
+
+ // return XMLHttpRequest to allow aborting the request etc.
+ return xhr;
+ },
+
+ handleError: function( s, xhr, status, e ) {
+ // If a local callback was specified, fire it
+ if ( s.error ) s.error( xhr, status, e );
+
+ // Fire the global callback
+ if ( s.global )
+ jQuery.event.trigger( "ajaxError", [xhr, s, e] );
+ },
+
+ // Counter for holding the number of active queries
+ active: 0,
+
+ // Determines if an XMLHttpRequest was successful or not
+ httpSuccess: function( xhr ) {
+ try {
+ // IE error sometimes returns 1223 when it should be 204 so treat it as success, see #1450
+ return !xhr.status && location.protocol == "file:" ||
+ ( xhr.status >= 200 && xhr.status < 300 ) || xhr.status == 304 || xhr.status == 1223 ||
+ jQuery.browser.safari && xhr.status == undefined;
+ } catch(e){}
+ return false;
+ },
+
+ // Determines if an XMLHttpRequest returns NotModified
+ httpNotModified: function( xhr, url ) {
+ try {
+ var xhrRes = xhr.getResponseHeader("Last-Modified");
+
+ // Firefox always returns 200. check Last-Modified date
+ return xhr.status == 304 || xhrRes == jQuery.lastModified[url] ||
+ jQuery.browser.safari && xhr.status == undefined;
+ } catch(e){}
+ return false;
+ },
+
+ httpData: function( xhr, type, filter ) {
+ var ct = xhr.getResponseHeader("content-type"),
+ xml = type == "xml" || !type && ct && ct.indexOf("xml") >= 0,
+ data = xml ? xhr.responseXML : xhr.responseText;
+
+ if ( xml && data.documentElement.tagName == "parsererror" )
+ throw "parsererror";
+
+ // Allow a pre-filtering function to sanitize the response
+ if( filter )
+ data = filter( data, type );
+
+ // If the type is "script", eval it in global context
+ if ( type == "script" )
+ jQuery.globalEval( data );
+
+ // Get the JavaScript object, if JSON is used.
+ if ( type == "json" )
+ data = eval("(" + data + ")");
+
+ return data;
+ },
+
+ // Serialize an array of form elements or a set of
+ // key/values into a query string
+ param: function( a ) {
+ var s = [];
+
+ // If an array was passed in, assume that it is an array
+ // of form elements
+ if ( a.constructor == Array || a.jquery )
+ // Serialize the form elements
+ jQuery.each( a, function(){
+ s.push( encodeURIComponent(this.name) + "=" + encodeURIComponent( this.value ) );
+ });
+
+ // Otherwise, assume that it's an object of key/value pairs
+ else
+ // Serialize the key/values
+ for ( var j in a )
+ // If the value is an array then the key names need to be repeated
+ if ( a[j] && a[j].constructor == Array )
+ jQuery.each( a[j], function(){
+ s.push( encodeURIComponent(j) + "=" + encodeURIComponent( this ) );
+ });
+ else
+ s.push( encodeURIComponent(j) + "=" + encodeURIComponent( jQuery.isFunction(a[j]) ? a[j]() : a[j] ) );
+
+ // Return the resulting serialization
+ return s.join("&").replace(/%20/g, "+");
+ }
+
+});
+jQuery.fn.extend({
+ show: function(speed,callback){
+ return speed ?
+ this.animate({
+ height: "show", width: "show", opacity: "show"
+ }, speed, callback) :
+
+ this.filter(":hidden").each(function(){
+ this.style.display = this.oldblock || "";
+ if ( jQuery.css(this,"display") == "none" ) {
+ var elem = jQuery("<" + this.tagName + " />").appendTo("body");
+ this.style.display = elem.css("display");
+ // handle an edge condition where css is - div { display:none; } or similar
+ if (this.style.display == "none")
+ this.style.display = "block";
+ elem.remove();
+ }
+ }).end();
+ },
+
+ hide: function(speed,callback){
+ return speed ?
+ this.animate({
+ height: "hide", width: "hide", opacity: "hide"
+ }, speed, callback) :
+
+ this.filter(":visible").each(function(){
+ this.oldblock = this.oldblock || jQuery.css(this,"display");
+ this.style.display = "none";
+ }).end();
+ },
+
+ // Save the old toggle function
+ _toggle: jQuery.fn.toggle,
+
+ toggle: function( fn, fn2 ){
+ return jQuery.isFunction(fn) && jQuery.isFunction(fn2) ?
+ this._toggle.apply( this, arguments ) :
+ fn ?
+ this.animate({
+ height: "toggle", width: "toggle", opacity: "toggle"
+ }, fn, fn2) :
+ this.each(function(){
+ jQuery(this)[ jQuery(this).is(":hidden") ? "show" : "hide" ]();
+ });
+ },
+
+ slideDown: function(speed,callback){
+ return this.animate({height: "show"}, speed, callback);
+ },
+
+ slideUp: function(speed,callback){
+ return this.animate({height: "hide"}, speed, callback);
+ },
+
+ slideToggle: function(speed, callback){
+ return this.animate({height: "toggle"}, speed, callback);
+ },
+
+ fadeIn: function(speed, callback){
+ return this.animate({opacity: "show"}, speed, callback);
+ },
+
+ fadeOut: function(speed, callback){
+ return this.animate({opacity: "hide"}, speed, callback);
+ },
+
+ fadeTo: function(speed,to,callback){
+ return this.animate({opacity: to}, speed, callback);
+ },
+
+ animate: function( prop, speed, easing, callback ) {
+ var optall = jQuery.speed(speed, easing, callback);
+
+ return this[ optall.queue === false ? "each" : "queue" ](function(){
+ if ( this.nodeType != 1)
+ return false;
+
+ var opt = jQuery.extend({}, optall), p,
+ hidden = jQuery(this).is(":hidden"), self = this;
+
+ for ( p in prop ) {
+ if ( prop[p] == "hide" && hidden || prop[p] == "show" && !hidden )
+ return opt.complete.call(this);
+
+ if ( p == "height" || p == "width" ) {
+ // Store display property
+ opt.display = jQuery.css(this, "display");
+
+ // Make sure that nothing sneaks out
+ opt.overflow = this.style.overflow;
+ }
+ }
+
+ if ( opt.overflow != null )
+ this.style.overflow = "hidden";
+
+ opt.curAnim = jQuery.extend({}, prop);
+
+ jQuery.each( prop, function(name, val){
+ var e = new jQuery.fx( self, opt, name );
+
+ if ( /toggle|show|hide/.test(val) )
+ e[ val == "toggle" ? hidden ? "show" : "hide" : val ]( prop );
+ else {
+ var parts = val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),
+ start = e.cur(true) || 0;
+
+ if ( parts ) {
+ var end = parseFloat(parts[2]),
+ unit = parts[3] || "px";
+
+ // We need to compute starting value
+ if ( unit != "px" ) {
+ self.style[ name ] = (end || 1) + unit;
+ start = ((end || 1) / e.cur(true)) * start;
+ self.style[ name ] = start + unit;
+ }
+
+ // If a +=/-= token was provided, we're doing a relative animation
+ if ( parts[1] )
+ end = ((parts[1] == "-=" ? -1 : 1) * end) + start;
+
+ e.custom( start, end, unit );
+ } else
+ e.custom( start, val, "" );
+ }
+ });
+
+ // For JS strict compliance
+ return true;
+ });
+ },
+
+ queue: function(type, fn){
+ if ( jQuery.isFunction(type) || ( type && type.constructor == Array )) {
+ fn = type;
+ type = "fx";
+ }
+
+ if ( !type || (typeof type == "string" && !fn) )
+ return queue( this[0], type );
+
+ return this.each(function(){
+ if ( fn.constructor == Array )
+ queue(this, type, fn);
+ else {
+ queue(this, type).push( fn );
+
+ if ( queue(this, type).length == 1 )
+ fn.call(this);
+ }
+ });
+ },
+
+ stop: function(clearQueue, gotoEnd){
+ var timers = jQuery.timers;
+
+ if (clearQueue)
+ this.queue([]);
+
+ this.each(function(){
+ // go in reverse order so anything added to the queue during the loop is ignored
+ for ( var i = timers.length - 1; i >= 0; i-- )
+ if ( timers[i].elem == this ) {
+ if (gotoEnd)
+ // force the next step to be the last
+ timers[i](true);
+ timers.splice(i, 1);
+ }
+ });
+
+ // start the next in the queue if the last step wasn't forced
+ if (!gotoEnd)
+ this.dequeue();
+
+ return this;
+ }
+
+});
+
+var queue = function( elem, type, array ) {
+ if ( elem ){
+
+ type = type || "fx";
+
+ var q = jQuery.data( elem, type + "queue" );
+
+ if ( !q || array )
+ q = jQuery.data( elem, type + "queue", jQuery.makeArray(array) );
+
+ }
+ return q;
+};
+
+jQuery.fn.dequeue = function(type){
+ type = type || "fx";
+
+ return this.each(function(){
+ var q = queue(this, type);
+
+ q.shift();
+
+ if ( q.length )
+ q[0].call( this );
+ });
+};
+
+jQuery.extend({
+
+ speed: function(speed, easing, fn) {
+ var opt = speed && speed.constructor == Object ? speed : {
+ complete: fn || !fn && easing ||
+ jQuery.isFunction( speed ) && speed,
+ duration: speed,
+ easing: fn && easing || easing && easing.constructor != Function && easing
+ };
+
+ opt.duration = (opt.duration && opt.duration.constructor == Number ?
+ opt.duration :
+ jQuery.fx.speeds[opt.duration]) || jQuery.fx.speeds.def;
+
+ // Queueing
+ opt.old = opt.complete;
+ opt.complete = function(){
+ if ( opt.queue !== false )
+ jQuery(this).dequeue();
+ if ( jQuery.isFunction( opt.old ) )
+ opt.old.call( this );
+ };
+
+ return opt;
+ },
+
+ easing: {
+ linear: function( p, n, firstNum, diff ) {
+ return firstNum + diff * p;
+ },
+ swing: function( p, n, firstNum, diff ) {
+ return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;
+ }
+ },
+
+ timers: [],
+ timerId: null,
+
+ fx: function( elem, options, prop ){
+ this.options = options;
+ this.elem = elem;
+ this.prop = prop;
+
+ if ( !options.orig )
+ options.orig = {};
+ }
+
+});
+
+jQuery.fx.prototype = {
+
+ // Simple function for setting a style value
+ update: function(){
+ if ( this.options.step )
+ this.options.step.call( this.elem, this.now, this );
+
+ (jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );
+
+ // Set display property to block for height/width animations
+ if ( this.prop == "height" || this.prop == "width" )
+ this.elem.style.display = "block";
+ },
+
+ // Get the current size
+ cur: function(force){
+ if ( this.elem[this.prop] != null && this.elem.style[this.prop] == null )
+ return this.elem[ this.prop ];
+
+ var r = parseFloat(jQuery.css(this.elem, this.prop, force));
+ return r && r > -10000 ? r : parseFloat(jQuery.curCSS(this.elem, this.prop)) || 0;
+ },
+
+ // Start an animation from one number to another
+ custom: function(from, to, unit){
+ this.startTime = now();
+ this.start = from;
+ this.end = to;
+ this.unit = unit || this.unit || "px";
+ this.now = this.start;
+ this.pos = this.state = 0;
+ this.update();
+
+ var self = this;
+ function t(gotoEnd){
+ return self.step(gotoEnd);
+ }
+
+ t.elem = this.elem;
+
+ jQuery.timers.push(t);
+
+ if ( jQuery.timerId == null ) {
+ jQuery.timerId = setInterval(function(){
+ var timers = jQuery.timers;
+
+ for ( var i = 0; i < timers.length; i++ )
+ if ( !timers[i]() )
+ timers.splice(i--, 1);
+
+ if ( !timers.length ) {
+ clearInterval( jQuery.timerId );
+ jQuery.timerId = null;
+ }
+ }, 13);
+ }
+ },
+
+ // Simple 'show' function
+ show: function(){
+ // Remember where we started, so that we can go back to it later
+ this.options.orig[this.prop] = jQuery.attr( this.elem.style, this.prop );
+ this.options.show = true;
+
+ // Begin the animation
+ this.custom(0, this.cur());
+
+ // Make sure that we start at a small width/height to avoid any
+ // flash of content
+ if ( this.prop == "width" || this.prop == "height" )
+ this.elem.style[this.prop] = "1px";
+
+ // Start by showing the element
+ jQuery(this.elem).show();
+ },
+
+ // Simple 'hide' function
+ hide: function(){
+ // Remember where we started, so that we can go back to it later
+ this.options.orig[this.prop] = jQuery.attr( this.elem.style, this.prop );
+ this.options.hide = true;
+
+ // Begin the animation
+ this.custom(this.cur(), 0);
+ },
+
+ // Each step of an animation
+ step: function(gotoEnd){
+ var t = now();
+
+ if ( gotoEnd || t > this.options.duration + this.startTime ) {
+ this.now = this.end;
+ this.pos = this.state = 1;
+ this.update();
+
+ this.options.curAnim[ this.prop ] = true;
+
+ var done = true;
+ for ( var i in this.options.curAnim )
+ if ( this.options.curAnim[i] !== true )
+ done = false;
+
+ if ( done ) {
+ if ( this.options.display != null ) {
+ // Reset the overflow
+ this.elem.style.overflow = this.options.overflow;
+
+ // Reset the display
+ this.elem.style.display = this.options.display;
+ if ( jQuery.css(this.elem, "display") == "none" )
+ this.elem.style.display = "block";
+ }
+
+ // Hide the element if the "hide" operation was done
+ if ( this.options.hide )
+ this.elem.style.display = "none";
+
+ // Reset the properties, if the item has been hidden or shown
+ if ( this.options.hide || this.options.show )
+ for ( var p in this.options.curAnim )
+ jQuery.attr(this.elem.style, p, this.options.orig[p]);
+ }
+
+ if ( done )
+ // Execute the complete function
+ this.options.complete.call( this.elem );
+
+ return false;
+ } else {
+ var n = t - this.startTime;
+ this.state = n / this.options.duration;
+
+ // Perform the easing function, defaults to swing
+ this.pos = jQuery.easing[this.options.easing || (jQuery.easing.swing ? "swing" : "linear")](this.state, n, 0, 1, this.options.duration);
+ this.now = this.start + ((this.end - this.start) * this.pos);
+
+ // Perform the next step of the animation
+ this.update();
+ }
+
+ return true;
+ }
+
+};
+
+jQuery.extend( jQuery.fx, {
+ speeds:{
+ slow: 600,
+ fast: 200,
+ // Default speed
+ def: 400
+ },
+ step: {
+ scrollLeft: function(fx){
+ fx.elem.scrollLeft = fx.now;
+ },
+
+ scrollTop: function(fx){
+ fx.elem.scrollTop = fx.now;
+ },
+
+ opacity: function(fx){
+ jQuery.attr(fx.elem.style, "opacity", fx.now);
+ },
+
+ _default: function(fx){
+ fx.elem.style[ fx.prop ] = fx.now + fx.unit;
+ }
+ }
+});
+// The Offset Method
+// Originally By Brandon Aaron, part of the Dimension Plugin
+// http://jquery.com/plugins/project/dimensions
+jQuery.fn.offset = function() {
+ var left = 0, top = 0, elem = this[0], results;
+
+ if ( elem ) with ( jQuery.browser ) {
+ var parent = elem.parentNode,
+ offsetChild = elem,
+ offsetParent = elem.offsetParent,
+ doc = elem.ownerDocument,
+ safari2 = safari && parseInt(version) < 522 && !/adobeair/i.test(userAgent),
+ css = jQuery.curCSS,
+ fixed = css(elem, "position") == "fixed";
+
+ // Use getBoundingClientRect if available
+ if ( elem.getBoundingClientRect ) {
+ var box = elem.getBoundingClientRect();
+
+ // Add the document scroll offsets
+ add(box.left + Math.max(doc.documentElement.scrollLeft, doc.body.scrollLeft),
+ box.top + Math.max(doc.documentElement.scrollTop, doc.body.scrollTop));
+
+ // IE adds the HTML element's border, by default it is medium which is 2px
+ // IE 6 and 7 quirks mode the border width is overwritable by the following css html { border: 0; }
+ // IE 7 standards mode, the border is always 2px
+ // This border/offset is typically represented by the clientLeft and clientTop properties
+ // However, in IE6 and 7 quirks mode the clientLeft and clientTop properties are not updated when overwriting it via CSS
+ // Therefore this method will be off by 2px in IE while in quirksmode
+ add( -doc.documentElement.clientLeft, -doc.documentElement.clientTop );
+
+ // Otherwise loop through the offsetParents and parentNodes
+ } else {
+
+ // Initial element offsets
+ add( elem.offsetLeft, elem.offsetTop );
+
+ // Get parent offsets
+ while ( offsetParent ) {
+ // Add offsetParent offsets
+ add( offsetParent.offsetLeft, offsetParent.offsetTop );
+
+ // Mozilla and Safari > 2 does not include the border on offset parents
+ // However Mozilla adds the border for table or table cells
+ if ( mozilla && !/^t(able|d|h)$/i.test(offsetParent.tagName) || safari && !safari2 )
+ border( offsetParent );
+
+ // Add the document scroll offsets if position is fixed on any offsetParent
+ if ( !fixed && css(offsetParent, "position") == "fixed" )
+ fixed = true;
+
+ // Set offsetChild to previous offsetParent unless it is the body element
+ offsetChild = /^body$/i.test(offsetParent.tagName) ? offsetChild : offsetParent;
+ // Get next offsetParent
+ offsetParent = offsetParent.offsetParent;
+ }
+
+ // Get parent scroll offsets
+ while ( parent && parent.tagName && !/^body|html$/i.test(parent.tagName) ) {
+ // Remove parent scroll UNLESS that parent is inline or a table to work around Opera inline/table scrollLeft/Top bug
+ if ( !/^inline|table.*$/i.test(css(parent, "display")) )
+ // Subtract parent scroll offsets
+ add( -parent.scrollLeft, -parent.scrollTop );
+
+ // Mozilla does not add the border for a parent that has overflow != visible
+ if ( mozilla && css(parent, "overflow") != "visible" )
+ border( parent );
+
+ // Get next parent
+ parent = parent.parentNode;
+ }
+
+ // Safari <= 2 doubles body offsets with a fixed position element/offsetParent or absolutely positioned offsetChild
+ // Mozilla doubles body offsets with a non-absolutely positioned offsetChild
+ if ( (safari2 && (fixed || css(offsetChild, "position") == "absolute")) ||
+ (mozilla && css(offsetChild, "position") != "absolute") )
+ add( -doc.body.offsetLeft, -doc.body.offsetTop );
+
+ // Add the document scroll offsets if position is fixed
+ if ( fixed )
+ add(Math.max(doc.documentElement.scrollLeft, doc.body.scrollLeft),
+ Math.max(doc.documentElement.scrollTop, doc.body.scrollTop));
+ }
+
+ // Return an object with top and left properties
+ results = { top: top, left: left };
+ }
+
+ function border(elem) {
+ add( jQuery.curCSS(elem, "borderLeftWidth", true), jQuery.curCSS(elem, "borderTopWidth", true) );
+ }
+
+ function add(l, t) {
+ left += parseInt(l, 10) || 0;
+ top += parseInt(t, 10) || 0;
+ }
+
+ return results;
+};
+
+
+jQuery.fn.extend({
+ position: function() {
+ var left = 0, top = 0, results;
+
+ if ( this[0] ) {
+ // Get *real* offsetParent
+ var offsetParent = this.offsetParent(),
+
+ // Get correct offsets
+ offset = this.offset(),
+ parentOffset = /^body|html$/i.test(offsetParent[0].tagName) ? { top: 0, left: 0 } : offsetParent.offset();
+
+ // Subtract element margins
+ // note: when an element has margin: auto the offsetLeft and marginLeft
+ // are the same in Safari causing offset.left to incorrectly be 0
+ offset.top -= num( this, 'marginTop' );
+ offset.left -= num( this, 'marginLeft' );
+
+ // Add offsetParent borders
+ parentOffset.top += num( offsetParent, 'borderTopWidth' );
+ parentOffset.left += num( offsetParent, 'borderLeftWidth' );
+
+ // Subtract the two offsets
+ results = {
+ top: offset.top - parentOffset.top,
+ left: offset.left - parentOffset.left
+ };
+ }
+
+ return results;
+ },
+
+ offsetParent: function() {
+ var offsetParent = this[0].offsetParent;
+ while ( offsetParent && (!/^body|html$/i.test(offsetParent.tagName) && jQuery.css(offsetParent, 'position') == 'static') )
+ offsetParent = offsetParent.offsetParent;
+ return jQuery(offsetParent);
+ }
+});
+
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( ['Left', 'Top'], function(i, name) {
+ var method = 'scroll' + name;
+
+ jQuery.fn[ method ] = function(val) {
+ if (!this[0]) return;
+
+ return val != undefined ?
+
+ // Set the scroll offset
+ this.each(function() {
+ this == window || this == document ?
+ window.scrollTo(
+ !i ? val : jQuery(window).scrollLeft(),
+ i ? val : jQuery(window).scrollTop()
+ ) :
+ this[ method ] = val;
+ }) :
+
+ // Return the scroll offset
+ this[0] == window || this[0] == document ?
+ self[ i ? 'pageYOffset' : 'pageXOffset' ] ||
+ jQuery.boxModel && document.documentElement[ method ] ||
+ document.body[ method ] :
+ this[0][ method ];
+ };
+});
+// Create innerHeight, innerWidth, outerHeight and outerWidth methods
+jQuery.each([ "Height", "Width" ], function(i, name){
+
+ var tl = i ? "Left" : "Top", // top or left
+ br = i ? "Right" : "Bottom"; // bottom or right
+
+ // innerHeight and innerWidth
+ jQuery.fn["inner" + name] = function(){
+ return this[ name.toLowerCase() ]() +
+ num(this, "padding" + tl) +
+ num(this, "padding" + br);
+ };
+
+ // outerHeight and outerWidth
+ jQuery.fn["outer" + name] = function(margin) {
+ return this["inner" + name]() +
+ num(this, "border" + tl + "Width") +
+ num(this, "border" + br + "Width") +
+ (margin ?
+ num(this, "margin" + tl) + num(this, "margin" + br) : 0);
+ };
+
+});})();
diff --git a/testing/talos/talos/tests/dromaeo/lib/mootools.js b/testing/talos/talos/tests/dromaeo/lib/mootools.js
new file mode 100644
index 0000000000..7e1e482bf0
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/lib/mootools.js
@@ -0,0 +1,3946 @@
+/*
+Script: Core.js
+ MooTools - My Object Oriented JavaScript Tools.
+
+License:
+ MIT-style license.
+
+Copyright:
+ Copyright (c) 2006-2008 [Valerio Proietti](http://mad4milk.net/).
+
+Code & Documentation:
+ [The MooTools production team](http://mootools.net/developers/).
+
+Inspiration:
+ - Class implementation inspired by [Base.js](http://dean.edwards.name/weblog/2006/03/base/) Copyright (c) 2006 Dean Edwards, [GNU Lesser General Public License](http://opensource.org/licenses/lgpl-license.php)
+ - Some functionality inspired by [Prototype.js](http://prototypejs.org) Copyright (c) 2005-2007 Sam Stephenson, [MIT License](http://opensource.org/licenses/mit-license.php)
+*/
+
+var MooTools = {
+ 'version': '1.2.1',
+ 'build': '0d4845aab3d9a4fdee2f0d4a6dd59210e4b697cf'
+};
+
+var Native = function(options){
+ options = options || {};
+ var name = options.name;
+ var legacy = options.legacy;
+ var protect = options.protect;
+ var methods = options.implement;
+ var generics = options.generics;
+ var initialize = options.initialize;
+ var afterImplement = options.afterImplement || function(){};
+ var object = initialize || legacy;
+ generics = generics !== false;
+
+ object.constructor = Native;
+ object.$family = {name: 'native'};
+ if (legacy && initialize) object.prototype = legacy.prototype;
+ object.prototype.constructor = object;
+
+ if (name){
+ var family = name.toLowerCase();
+ object.prototype.$family = {name: family};
+ Native.typize(object, family);
+ }
+
+ var add = function(obj, name, method, force){
+ if (!protect || force || !obj.prototype[name]) obj.prototype[name] = method;
+ if (generics) Native.genericize(obj, name, protect);
+ afterImplement.call(obj, name, method);
+ return obj;
+ };
+
+ object.alias = function(a1, a2, a3){
+ if (typeof a1 == 'string'){
+ if ((a1 = this.prototype[a1])) return add(this, a2, a1, a3);
+ }
+ for (var a in a1) this.alias(a, a1[a], a2);
+ return this;
+ };
+
+ object.implement = function(a1, a2, a3){
+ if (typeof a1 == 'string') return add(this, a1, a2, a3);
+ for (var p in a1) add(this, p, a1[p], a2);
+ return this;
+ };
+
+ if (methods) object.implement(methods);
+
+ return object;
+};
+
+Native.genericize = function(object, property, check){
+ if ((!check || !object[property]) && typeof object.prototype[property] == 'function') object[property] = function(){
+ var args = Array.prototype.slice.call(arguments);
+ return object.prototype[property].apply(args.shift(), args);
+ };
+};
+
+Native.implement = function(objects, properties){
+ for (var i = 0, l = objects.length; i < l; i++) objects[i].implement(properties);
+};
+
+Native.typize = function(object, family){
+ if (!object.type) object.type = function(item){
+ return ($type(item) === family);
+ };
+};
+
+(function(){
+ var natives = {'Array': Array, 'Date': Date, 'Function': Function, 'Number': Number, 'RegExp': RegExp, 'String': String};
+ for (var n in natives) new Native({name: n, initialize: natives[n], protect: true});
+
+ var types = {'boolean': Boolean, 'native': Native, 'object': Object};
+ for (var t in types) Native.typize(types[t], t);
+
+ var generics = {
+ 'Array': ["concat", "indexOf", "join", "lastIndexOf", "pop", "push", "reverse", "shift", "slice", "sort", "splice", "toString", "unshift", "valueOf"],
+ 'String': ["charAt", "charCodeAt", "concat", "indexOf", "lastIndexOf", "match", "replace", "search", "slice", "split", "substr", "substring", "toLowerCase", "toUpperCase", "valueOf"]
+ };
+ for (var g in generics){
+ for (var i = generics[g].length; i--;) Native.genericize(window[g], generics[g][i], true);
+ };
+})();
+
+var Hash = new Native({
+
+ name: 'Hash',
+
+ initialize: function(object){
+ if ($type(object) == 'hash') object = $unlink(object.getClean());
+ for (var key in object) this[key] = object[key];
+ return this;
+ }
+
+});
+
+Hash.implement({
+
+ forEach: function(fn, bind){
+ for (var key in this){
+ if (this.hasOwnProperty(key)) fn.call(bind, this[key], key, this);
+ }
+ },
+
+ getClean: function(){
+ var clean = {};
+ for (var key in this){
+ if (this.hasOwnProperty(key)) clean[key] = this[key];
+ }
+ return clean;
+ },
+
+ getLength: function(){
+ var length = 0;
+ for (var key in this){
+ if (this.hasOwnProperty(key)) length++;
+ }
+ return length;
+ }
+
+});
+
+Hash.alias('forEach', 'each');
+
+Array.implement({
+
+ forEach: function(fn, bind){
+ for (var i = 0, l = this.length; i < l; i++) fn.call(bind, this[i], i, this);
+ }
+
+});
+
+Array.alias('forEach', 'each');
+
+function $A(iterable){
+ if (iterable.item){
+ var array = [];
+ for (var i = 0, l = iterable.length; i < l; i++) array[i] = iterable[i];
+ return array;
+ }
+ return Array.prototype.slice.call(iterable);
+};
+
+function $arguments(i){
+ return function(){
+ return arguments[i];
+ };
+};
+
+function $chk(obj){
+ return !!(obj || obj === 0);
+};
+
+function $clear(timer){
+ clearTimeout(timer);
+ clearInterval(timer);
+ return null;
+};
+
+function $defined(obj){
+ return (obj != undefined);
+};
+
+function $each(iterable, fn, bind){
+ var type = $type(iterable);
+ ((type == 'arguments' || type == 'collection' || type == 'array') ? Array : Hash).each(iterable, fn, bind);
+};
+
+function $empty(){};
+
+function $extend(original, extended){
+ for (var key in (extended || {})) original[key] = extended[key];
+ return original;
+};
+
+function $H(object){
+ return new Hash(object);
+};
+
+function $lambda(value){
+ return (typeof value == 'function') ? value : function(){
+ return value;
+ };
+};
+
+function $merge(){
+ var mix = {};
+ for (var i = 0, l = arguments.length; i < l; i++){
+ var object = arguments[i];
+ if ($type(object) != 'object') continue;
+ for (var key in object){
+ var op = object[key], mp = mix[key];
+ mix[key] = (mp && $type(op) == 'object' && $type(mp) == 'object') ? $merge(mp, op) : $unlink(op);
+ }
+ }
+ return mix;
+};
+
+function $pick(){
+ for (var i = 0, l = arguments.length; i < l; i++){
+ if (arguments[i] != undefined) return arguments[i];
+ }
+ return null;
+};
+
+function $random(min, max){
+ return Math.floor(Math.random() * (max - min + 1) + min);
+};
+
+function $splat(obj){
+ var type = $type(obj);
+ return (type) ? ((type != 'array' && type != 'arguments') ? [obj] : obj) : [];
+};
+
+var $time = Date.now || function(){
+ return +new Date;
+};
+
+function $try(){
+ for (var i = 0, l = arguments.length; i < l; i++){
+ try {
+ return arguments[i]();
+ } catch(e){}
+ }
+ return null;
+};
+
+function $type(obj){
+ if (obj == undefined) return false;
+ if (obj.$family) return (obj.$family.name == 'number' && !isFinite(obj)) ? false : obj.$family.name;
+ if (obj.nodeName){
+ switch (obj.nodeType){
+ case 1: return 'element';
+ case 3: return (/\S/).test(obj.nodeValue) ? 'textnode' : 'whitespace';
+ }
+ } else if (typeof obj.length == 'number'){
+ if (obj.callee) return 'arguments';
+ else if (obj.item) return 'collection';
+ }
+ return typeof obj;
+};
+
+function $unlink(object){
+ var unlinked;
+ switch ($type(object)){
+ case 'object':
+ unlinked = {};
+ for (var p in object) unlinked[p] = $unlink(object[p]);
+ break;
+ case 'hash':
+ unlinked = new Hash(object);
+ break;
+ case 'array':
+ unlinked = [];
+ for (var i = 0, l = object.length; i < l; i++) unlinked[i] = $unlink(object[i]);
+ break;
+ default: return object;
+ }
+ return unlinked;
+};
+
+
+/*
+Script: Browser.js
+ The Browser Core. Contains Browser initialization, Window and Document, and the Browser Hash.
+
+License:
+ MIT-style license.
+*/
+
+var Browser = $merge({
+
+ Engine: {name: 'unknown', version: 0},
+
+ Platform: {name: (window.orientation != undefined) ? 'ipod' : (navigator.platform.match(/mac|win|linux/i) || ['other'])[0].toLowerCase()},
+
+ Features: {xpath: !!(document.evaluate), air: !!(window.runtime), query: !!(document.querySelector)},
+
+ Plugins: {},
+
+ Engines: {
+
+ presto: function(){
+ return (!window.opera) ? false : ((arguments.callee.caller) ? 960 : ((document.getElementsByClassName) ? 950 : 925));
+ },
+
+ trident: function(){
+ return (!window.ActiveXObject) ? false : ((window.XMLHttpRequest) ? 5 : 4);
+ },
+
+ webkit: function(){
+ return (navigator.taintEnabled) ? false : ((Browser.Features.xpath) ? ((Browser.Features.query) ? 525 : 420) : 419);
+ },
+
+ gecko: function(){
+ return (document.getBoxObjectFor == undefined) ? false : ((document.getElementsByClassName) ? 19 : 18);
+ }
+
+ }
+
+}, Browser || {});
+
+Browser.Platform[Browser.Platform.name] = true;
+
+Browser.detect = function(){
+
+ for (var engine in this.Engines){
+ var version = this.Engines[engine]();
+ if (version){
+ this.Engine = {name: engine, version: version};
+ this.Engine[engine] = this.Engine[engine + version] = true;
+ break;
+ }
+ }
+
+ return {name: engine, version: version};
+
+};
+
+Browser.detect();
+
+Browser.Request = function(){
+ return $try(function(){
+ return new XMLHttpRequest();
+ }, function(){
+ return new ActiveXObject('MSXML2.XMLHTTP');
+ });
+};
+
+Browser.Features.xhr = !!(Browser.Request());
+
+Browser.Plugins.Flash = (function(){
+ var version = ($try(function(){
+ return navigator.plugins['Shockwave Flash'].description;
+ }, function(){
+ return new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version');
+ }) || '0 r0').match(/\d+/g);
+ return {version: parseInt(version[0] || 0 + '.' + version[1] || 0), build: parseInt(version[2] || 0)};
+})();
+
+function $exec(text){
+ if (!text) return text;
+ if (window.execScript){
+ window.execScript(text);
+ } else {
+ var script = document.createElement('script');
+ script.setAttribute('type', 'text/javascript');
+ script[(Browser.Engine.webkit && Browser.Engine.version < 420) ? 'innerText' : 'text'] = text;
+ document.head.appendChild(script);
+ document.head.removeChild(script);
+ }
+ return text;
+};
+
+Native.UID = 1;
+
+var $uid = (Browser.Engine.trident) ? function(item){
+ return (item.uid || (item.uid = [Native.UID++]))[0];
+} : function(item){
+ return item.uid || (item.uid = Native.UID++);
+};
+
+var Window = new Native({
+
+ name: 'Window',
+
+ legacy: (Browser.Engine.trident) ? null: window.Window,
+
+ initialize: function(win){
+ $uid(win);
+ if (!win.Element){
+ win.Element = $empty;
+ if (Browser.Engine.webkit) win.document.createElement("iframe"); //fixes safari 2
+ win.Element.prototype = (Browser.Engine.webkit) ? window["[[DOMElement.prototype]]"] : {};
+ }
+ win.document.window = win;
+ return $extend(win, Window.Prototype);
+ },
+
+ afterImplement: function(property, value){
+ window[property] = Window.Prototype[property] = value;
+ }
+
+});
+
+Window.Prototype = {$family: {name: 'window'}};
+
+new Window(window);
+
+var Document = new Native({
+
+ name: 'Document',
+
+ legacy: (Browser.Engine.trident) ? null: window.Document,
+
+ initialize: function(doc){
+ $uid(doc);
+ doc.head = doc.getElementsByTagName('head')[0];
+ doc.html = doc.getElementsByTagName('html')[0];
+ if (Browser.Engine.trident && Browser.Engine.version <= 4) $try(function(){
+ doc.execCommand("BackgroundImageCache", false, true);
+ });
+ if (Browser.Engine.trident) doc.window.attachEvent('onunload', function() {
+ doc.window.detachEvent('onunload', arguments.callee);
+ doc.head = doc.html = doc.window = null;
+ });
+ return $extend(doc, Document.Prototype);
+ },
+
+ afterImplement: function(property, value){
+ document[property] = Document.Prototype[property] = value;
+ }
+
+});
+
+Document.Prototype = {$family: {name: 'document'}};
+
+new Document(document);
+
+
+/*
+Script: Array.js
+ Contains Array Prototypes like each, contains, and erase.
+
+License:
+ MIT-style license.
+*/
+
+Array.implement({
+
+ every: function(fn, bind){
+ for (var i = 0, l = this.length; i < l; i++){
+ if (!fn.call(bind, this[i], i, this)) return false;
+ }
+ return true;
+ },
+
+ filter: function(fn, bind){
+ var results = [];
+ for (var i = 0, l = this.length; i < l; i++){
+ if (fn.call(bind, this[i], i, this)) results.push(this[i]);
+ }
+ return results;
+ },
+
+ clean: function() {
+ return this.filter($defined);
+ },
+
+ indexOf: function(item, from){
+ var len = this.length;
+ for (var i = (from < 0) ? Math.max(0, len + from) : from || 0; i < len; i++){
+ if (this[i] === item) return i;
+ }
+ return -1;
+ },
+
+ map: function(fn, bind){
+ var results = [];
+ for (var i = 0, l = this.length; i < l; i++) results[i] = fn.call(bind, this[i], i, this);
+ return results;
+ },
+
+ some: function(fn, bind){
+ for (var i = 0, l = this.length; i < l; i++){
+ if (fn.call(bind, this[i], i, this)) return true;
+ }
+ return false;
+ },
+
+ associate: function(keys){
+ var obj = {}, length = Math.min(this.length, keys.length);
+ for (var i = 0; i < length; i++) obj[keys[i]] = this[i];
+ return obj;
+ },
+
+ link: function(object){
+ var result = {};
+ for (var i = 0, l = this.length; i < l; i++){
+ for (var key in object){
+ if (object[key](this[i])){
+ result[key] = this[i];
+ delete object[key];
+ break;
+ }
+ }
+ }
+ return result;
+ },
+
+ contains: function(item, from){
+ return this.indexOf(item, from) != -1;
+ },
+
+ extend: function(array){
+ for (var i = 0, j = array.length; i < j; i++) this.push(array[i]);
+ return this;
+ },
+
+ getLast: function(){
+ return (this.length) ? this[this.length - 1] : null;
+ },
+
+ getRandom: function(){
+ return (this.length) ? this[$random(0, this.length - 1)] : null;
+ },
+
+ include: function(item){
+ if (!this.contains(item)) this.push(item);
+ return this;
+ },
+
+ combine: function(array){
+ for (var i = 0, l = array.length; i < l; i++) this.include(array[i]);
+ return this;
+ },
+
+ erase: function(item){
+ for (var i = this.length; i--; i){
+ if (this[i] === item) this.splice(i, 1);
+ }
+ return this;
+ },
+
+ empty: function(){
+ this.length = 0;
+ return this;
+ },
+
+ flatten: function(){
+ var array = [];
+ for (var i = 0, l = this.length; i < l; i++){
+ var type = $type(this[i]);
+ if (!type) continue;
+ array = array.concat((type == 'array' || type == 'collection' || type == 'arguments') ? Array.flatten(this[i]) : this[i]);
+ }
+ return array;
+ },
+
+ hexToRgb: function(array){
+ if (this.length != 3) return null;
+ var rgb = this.map(function(value){
+ if (value.length == 1) value += value;
+ return value.toInt(16);
+ });
+ return (array) ? rgb : 'rgb(' + rgb + ')';
+ },
+
+ rgbToHex: function(array){
+ if (this.length < 3) return null;
+ if (this.length == 4 && this[3] == 0 && !array) return 'transparent';
+ var hex = [];
+ for (var i = 0; i < 3; i++){
+ var bit = (this[i] - 0).toString(16);
+ hex.push((bit.length == 1) ? '0' + bit : bit);
+ }
+ return (array) ? hex : '#' + hex.join('');
+ }
+
+});
+
+
+/*
+Script: Function.js
+ Contains Function Prototypes like create, bind, pass, and delay.
+
+License:
+ MIT-style license.
+*/
+
+Function.implement({
+
+ extend: function(properties){
+ for (var property in properties) this[property] = properties[property];
+ return this;
+ },
+
+ create: function(options){
+ var self = this;
+ options = options || {};
+ return function(event){
+ var args = options.arguments;
+ args = (args != undefined) ? $splat(args) : Array.slice(arguments, (options.event) ? 1 : 0);
+ if (options.event) args = [event || window.event].extend(args);
+ var returns = function(){
+ return self.apply(options.bind || null, args);
+ };
+ if (options.delay) return setTimeout(returns, options.delay);
+ if (options.periodical) return setInterval(returns, options.periodical);
+ if (options.attempt) return $try(returns);
+ return returns();
+ };
+ },
+
+ run: function(args, bind){
+ return this.apply(bind, $splat(args));
+ },
+
+ pass: function(args, bind){
+ return this.create({bind: bind, arguments: args});
+ },
+
+ bind: function(bind, args){
+ return this.create({bind: bind, arguments: args});
+ },
+
+ bindWithEvent: function(bind, args){
+ return this.create({bind: bind, arguments: args, event: true});
+ },
+
+ attempt: function(args, bind){
+ return this.create({bind: bind, arguments: args, attempt: true})();
+ },
+
+ delay: function(delay, bind, args){
+ return this.create({bind: bind, arguments: args, delay: delay})();
+ },
+
+ periodical: function(periodical, bind, args){
+ return this.create({bind: bind, arguments: args, periodical: periodical})();
+ }
+
+});
+
+
+/*
+Script: Number.js
+ Contains Number Prototypes like limit, round, times, and ceil.
+
+License:
+ MIT-style license.
+*/
+
+Number.implement({
+
+ limit: function(min, max){
+ return Math.min(max, Math.max(min, this));
+ },
+
+ round: function(precision){
+ precision = Math.pow(10, precision || 0);
+ return Math.round(this * precision) / precision;
+ },
+
+ times: function(fn, bind){
+ for (var i = 0; i < this; i++) fn.call(bind, i, this);
+ },
+
+ toFloat: function(){
+ return parseFloat(this);
+ },
+
+ toInt: function(base){
+ return parseInt(this, base || 10);
+ }
+
+});
+
+Number.alias('times', 'each');
+
+(function(math){
+ var methods = {};
+ math.each(function(name){
+ if (!Number[name]) methods[name] = function(){
+ return Math[name].apply(null, [this].concat($A(arguments)));
+ };
+ });
+ Number.implement(methods);
+})(['abs', 'acos', 'asin', 'atan', 'atan2', 'ceil', 'cos', 'exp', 'floor', 'log', 'max', 'min', 'pow', 'sin', 'sqrt', 'tan']);
+
+
+/*
+Script: String.js
+ Contains String Prototypes like camelCase, capitalize, test, and toInt.
+
+License:
+ MIT-style license.
+*/
+
+String.implement({
+
+ test: function(regex, params){
+ return ((typeof regex == 'string') ? new RegExp(regex, params) : regex).test(this);
+ },
+
+ contains: function(string, separator){
+ return (separator) ? (separator + this + separator).indexOf(separator + string + separator) > -1 : this.indexOf(string) > -1;
+ },
+
+ trim: function(){
+ return this.replace(/^\s+|\s+$/g, '');
+ },
+
+ clean: function(){
+ return this.replace(/\s+/g, ' ').trim();
+ },
+
+ camelCase: function(){
+ return this.replace(/-\D/g, function(match){
+ return match.charAt(1).toUpperCase();
+ });
+ },
+
+ hyphenate: function(){
+ return this.replace(/[A-Z]/g, function(match){
+ return ('-' + match.charAt(0).toLowerCase());
+ });
+ },
+
+ capitalize: function(){
+ return this.replace(/\b[a-z]/g, function(match){
+ return match.toUpperCase();
+ });
+ },
+
+ escapeRegExp: function(){
+ return this.replace(/([-.*+?^${}()|[\]\/\\])/g, '\\$1');
+ },
+
+ toInt: function(base){
+ return parseInt(this, base || 10);
+ },
+
+ toFloat: function(){
+ return parseFloat(this);
+ },
+
+ hexToRgb: function(array){
+ var hex = this.match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/);
+ return (hex) ? hex.slice(1).hexToRgb(array) : null;
+ },
+
+ rgbToHex: function(array){
+ var rgb = this.match(/\d{1,3}/g);
+ return (rgb) ? rgb.rgbToHex(array) : null;
+ },
+
+ stripScripts: function(option){
+ var scripts = '';
+ var text = this.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi, function(){
+ scripts += arguments[1] + '\n';
+ return '';
+ });
+ if (option === true) $exec(scripts);
+ else if ($type(option) == 'function') option(scripts, text);
+ return text;
+ },
+
+ substitute: function(object, regexp){
+ return this.replace(regexp || (/\\?\{([^{}]+)\}/g), function(match, name){
+ if (match.charAt(0) == '\\') return match.slice(1);
+ return (object[name] != undefined) ? object[name] : '';
+ });
+ }
+
+});
+
+
+/*
+Script: Hash.js
+ Contains Hash Prototypes. Provides a means for overcoming the JavaScript practical impossibility of extending native Objects.
+
+License:
+ MIT-style license.
+*/
+
+Hash.implement({
+
+ has: Object.prototype.hasOwnProperty,
+
+ keyOf: function(value){
+ for (var key in this){
+ if (this.hasOwnProperty(key) && this[key] === value) return key;
+ }
+ return null;
+ },
+
+ hasValue: function(value){
+ return (Hash.keyOf(this, value) !== null);
+ },
+
+ extend: function(properties){
+ Hash.each(properties, function(value, key){
+ Hash.set(this, key, value);
+ }, this);
+ return this;
+ },
+
+ combine: function(properties){
+ Hash.each(properties, function(value, key){
+ Hash.include(this, key, value);
+ }, this);
+ return this;
+ },
+
+ erase: function(key){
+ if (this.hasOwnProperty(key)) delete this[key];
+ return this;
+ },
+
+ get: function(key){
+ return (this.hasOwnProperty(key)) ? this[key] : null;
+ },
+
+ set: function(key, value){
+ if (!this[key] || this.hasOwnProperty(key)) this[key] = value;
+ return this;
+ },
+
+ empty: function(){
+ Hash.each(this, function(value, key){
+ delete this[key];
+ }, this);
+ return this;
+ },
+
+ include: function(key, value){
+ var k = this[key];
+ if (k == undefined) this[key] = value;
+ return this;
+ },
+
+ map: function(fn, bind){
+ var results = new Hash;
+ Hash.each(this, function(value, key){
+ results.set(key, fn.call(bind, value, key, this));
+ }, this);
+ return results;
+ },
+
+ filter: function(fn, bind){
+ var results = new Hash;
+ Hash.each(this, function(value, key){
+ if (fn.call(bind, value, key, this)) results.set(key, value);
+ }, this);
+ return results;
+ },
+
+ every: function(fn, bind){
+ for (var key in this){
+ if (this.hasOwnProperty(key) && !fn.call(bind, this[key], key)) return false;
+ }
+ return true;
+ },
+
+ some: function(fn, bind){
+ for (var key in this){
+ if (this.hasOwnProperty(key) && fn.call(bind, this[key], key)) return true;
+ }
+ return false;
+ },
+
+ getKeys: function(){
+ var keys = [];
+ Hash.each(this, function(value, key){
+ keys.push(key);
+ });
+ return keys;
+ },
+
+ getValues: function(){
+ var values = [];
+ Hash.each(this, function(value){
+ values.push(value);
+ });
+ return values;
+ },
+
+ toQueryString: function(base){
+ var queryString = [];
+ Hash.each(this, function(value, key){
+ if (base) key = base + '[' + key + ']';
+ var result;
+ switch ($type(value)){
+ case 'object': result = Hash.toQueryString(value, key); break;
+ case 'array':
+ var qs = {};
+ value.each(function(val, i){
+ qs[i] = val;
+ });
+ result = Hash.toQueryString(qs, key);
+ break;
+ default: result = key + '=' + encodeURIComponent(value);
+ }
+ if (value != undefined) queryString.push(result);
+ });
+
+ return queryString.join('&');
+ }
+
+});
+
+Hash.alias({keyOf: 'indexOf', hasValue: 'contains'});
+
+
+/*
+Script: Event.js
+ Contains the Event Native, to make the event object completely crossbrowser.
+
+License:
+ MIT-style license.
+*/
+
+var Event = new Native({
+
+ name: 'Event',
+
+ initialize: function(event, win){
+ win = win || window;
+ var doc = win.document;
+ event = event || win.event;
+ if (event.$extended) return event;
+ this.$extended = true;
+ var type = event.type;
+ var target = event.target || event.srcElement;
+ while (target && target.nodeType == 3) target = target.parentNode;
+
+ if (type.test(/key/)){
+ var code = event.which || event.keyCode;
+ var key = Event.Keys.keyOf(code);
+ if (type == 'keydown'){
+ var fKey = code - 111;
+ if (fKey > 0 && fKey < 13) key = 'f' + fKey;
+ }
+ key = key || String.fromCharCode(code).toLowerCase();
+ } else if (type.match(/(click|mouse|menu)/i)){
+ doc = (!doc.compatMode || doc.compatMode == 'CSS1Compat') ? doc.html : doc.body;
+ var page = {
+ x: event.pageX || event.clientX + doc.scrollLeft,
+ y: event.pageY || event.clientY + doc.scrollTop
+ };
+ var client = {
+ x: (event.pageX) ? event.pageX - win.pageXOffset : event.clientX,
+ y: (event.pageY) ? event.pageY - win.pageYOffset : event.clientY
+ };
+ if (type.match(/DOMMouseScroll|mousewheel/)){
+ var wheel = (event.wheelDelta) ? event.wheelDelta / 120 : -(event.detail || 0) / 3;
+ }
+ var rightClick = (event.which == 3) || (event.button == 2);
+ var related = null;
+ if (type.match(/over|out/)){
+ switch (type){
+ case 'mouseover': related = event.relatedTarget || event.fromElement; break;
+ case 'mouseout': related = event.relatedTarget || event.toElement;
+ }
+ if (!(function(){
+ while (related && related.nodeType == 3) related = related.parentNode;
+ return true;
+ }).create({attempt: Browser.Engine.gecko})()) related = false;
+ }
+ }
+
+ return $extend(this, {
+ event: event,
+ type: type,
+
+ page: page,
+ client: client,
+ rightClick: rightClick,
+
+ wheel: wheel,
+
+ relatedTarget: related,
+ target: target,
+
+ code: code,
+ key: key,
+
+ shift: event.shiftKey,
+ control: event.ctrlKey,
+ alt: event.altKey,
+ meta: event.metaKey
+ });
+ }
+
+});
+
+Event.Keys = new Hash({
+ 'enter': 13,
+ 'up': 38,
+ 'down': 40,
+ 'left': 37,
+ 'right': 39,
+ 'esc': 27,
+ 'space': 32,
+ 'backspace': 8,
+ 'tab': 9,
+ 'delete': 46
+});
+
+Event.implement({
+
+ stop: function(){
+ return this.stopPropagation().preventDefault();
+ },
+
+ stopPropagation: function(){
+ if (this.event.stopPropagation) this.event.stopPropagation();
+ else this.event.cancelBubble = true;
+ return this;
+ },
+
+ preventDefault: function(){
+ if (this.event.preventDefault) this.event.preventDefault();
+ else this.event.returnValue = false;
+ return this;
+ }
+
+});
+
+
+/*
+Script: Class.js
+ Contains the Class Function for easily creating, extending, and implementing reusable Classes.
+
+License:
+ MIT-style license.
+*/
+
+var Class = new Native({
+
+ name: 'Class',
+
+ initialize: function(properties){
+ properties = properties || {};
+ var klass = function(){
+ for (var key in this){
+ if ($type(this[key]) != 'function') this[key] = $unlink(this[key]);
+ }
+ this.constructor = klass;
+ if (Class.prototyping) return this;
+ var instance = (this.initialize) ? this.initialize.apply(this, arguments) : this;
+ if (this.options && this.options.initialize) this.options.initialize.call(this);
+ return instance;
+ };
+
+ for (var mutator in Class.Mutators){
+ if (!properties[mutator]) continue;
+ properties = Class.Mutators[mutator](properties, properties[mutator]);
+ delete properties[mutator];
+ }
+
+ $extend(klass, this);
+ klass.constructor = Class;
+ klass.prototype = properties;
+ return klass;
+ }
+
+});
+
+Class.Mutators = {
+
+ Extends: function(self, klass){
+ Class.prototyping = klass.prototype;
+ var subclass = new klass;
+ delete subclass.parent;
+ subclass = Class.inherit(subclass, self);
+ delete Class.prototyping;
+ return subclass;
+ },
+
+ Implements: function(self, klasses){
+ $splat(klasses).each(function(klass){
+ Class.prototying = klass;
+ $extend(self, ($type(klass) == 'class') ? new klass : klass);
+ delete Class.prototyping;
+ });
+ return self;
+ }
+
+};
+
+Class.extend({
+
+ inherit: function(object, properties){
+ var caller = arguments.callee.caller;
+ for (var key in properties){
+ var override = properties[key];
+ var previous = object[key];
+ var type = $type(override);
+ if (previous && type == 'function'){
+ if (override != previous){
+ if (caller){
+ override.__parent = previous;
+ object[key] = override;
+ } else {
+ Class.override(object, key, override);
+ }
+ }
+ } else if(type == 'object'){
+ object[key] = $merge(previous, override);
+ } else {
+ object[key] = override;
+ }
+ }
+
+ if (caller) object.parent = function(){
+ return arguments.callee.caller.__parent.apply(this, arguments);
+ };
+
+ return object;
+ },
+
+ override: function(object, name, method){
+ var parent = Class.prototyping;
+ if (parent && object[name] != parent[name]) parent = null;
+ var override = function(){
+ var previous = this.parent;
+ this.parent = parent ? parent[name] : object[name];
+ var value = method.apply(this, arguments);
+ this.parent = previous;
+ return value;
+ };
+ object[name] = override;
+ }
+
+});
+
+Class.implement({
+
+ implement: function(){
+ var proto = this.prototype;
+ $each(arguments, function(properties){
+ Class.inherit(proto, properties);
+ });
+ return this;
+ }
+
+});
+
+
+/*
+Script: Class.Extras.js
+ Contains Utility Classes that can be implemented into your own Classes to ease the execution of many common tasks.
+
+License:
+ MIT-style license.
+*/
+
+var Chain = new Class({
+
+ $chain: [],
+
+ chain: function(){
+ this.$chain.extend(Array.flatten(arguments));
+ return this;
+ },
+
+ callChain: function(){
+ return (this.$chain.length) ? this.$chain.shift().apply(this, arguments) : false;
+ },
+
+ clearChain: function(){
+ this.$chain.empty();
+ return this;
+ }
+
+});
+
+var Events = new Class({
+
+ $events: {},
+
+ addEvent: function(type, fn, internal){
+ type = Events.removeOn(type);
+ if (fn != $empty){
+ this.$events[type] = this.$events[type] || [];
+ this.$events[type].include(fn);
+ if (internal) fn.internal = true;
+ }
+ return this;
+ },
+
+ addEvents: function(events){
+ for (var type in events) this.addEvent(type, events[type]);
+ return this;
+ },
+
+ fireEvent: function(type, args, delay){
+ type = Events.removeOn(type);
+ if (!this.$events || !this.$events[type]) return this;
+ this.$events[type].each(function(fn){
+ fn.create({'bind': this, 'delay': delay, 'arguments': args})();
+ }, this);
+ return this;
+ },
+
+ removeEvent: function(type, fn){
+ type = Events.removeOn(type);
+ if (!this.$events[type]) return this;
+ if (!fn.internal) this.$events[type].erase(fn);
+ return this;
+ },
+
+ removeEvents: function(events){
+ if ($type(events) == 'object'){
+ for (var type in events) this.removeEvent(type, events[type]);
+ return this;
+ }
+ if (events) events = Events.removeOn(events);
+ for (var type in this.$events){
+ if (events && events != type) continue;
+ var fns = this.$events[type];
+ for (var i = fns.length; i--; i) this.removeEvent(type, fns[i]);
+ }
+ return this;
+ }
+
+});
+
+Events.removeOn = function(string){
+ return string.replace(/^on([A-Z])/, function(full, first) {
+ return first.toLowerCase();
+ });
+};
+
+var Options = new Class({
+
+ setOptions: function(){
+ this.options = $merge.run([this.options].extend(arguments));
+ if (!this.addEvent) return this;
+ for (var option in this.options){
+ if ($type(this.options[option]) != 'function' || !(/^on[A-Z]/).test(option)) continue;
+ this.addEvent(option, this.options[option]);
+ delete this.options[option];
+ }
+ return this;
+ }
+
+});
+
+
+/*
+Script: Element.js
+ One of the most important items in MooTools. Contains the dollar function, the dollars function, and an handful of cross-browser,
+ time-saver methods to let you easily work with HTML Elements.
+
+License:
+ MIT-style license.
+*/
+
+var Element = new Native({
+
+ name: 'Element',
+
+ legacy: window.Element,
+
+ initialize: function(tag, props){
+ var konstructor = Element.Constructors.get(tag);
+ if (konstructor) return konstructor(props);
+ if (typeof tag == 'string') return document.newElement(tag, props);
+ return $(tag).set(props);
+ },
+
+ afterImplement: function(key, value){
+ Element.Prototype[key] = value;
+ if (Array[key]) return;
+ Elements.implement(key, function(){
+ var items = [], elements = true;
+ for (var i = 0, j = this.length; i < j; i++){
+ var returns = this[i][key].apply(this[i], arguments);
+ items.push(returns);
+ if (elements) elements = ($type(returns) == 'element');
+ }
+ return (elements) ? new Elements(items) : items;
+ });
+ }
+
+});
+
+Element.Prototype = {$family: {name: 'element'}};
+
+Element.Constructors = new Hash;
+
+var IFrame = new Native({
+
+ name: 'IFrame',
+
+ generics: false,
+
+ initialize: function(){
+ var params = Array.link(arguments, {properties: Object.type, iframe: $defined});
+ var props = params.properties || {};
+ var iframe = $(params.iframe) || false;
+ var onload = props.onload || $empty;
+ delete props.onload;
+ props.id = props.name = $pick(props.id, props.name, iframe.id, iframe.name, 'IFrame_' + $time());
+ iframe = new Element(iframe || 'iframe', props);
+ var onFrameLoad = function(){
+ var host = $try(function(){
+ return iframe.contentWindow.location.host;
+ });
+ if (host && host == window.location.host){
+ var win = new Window(iframe.contentWindow);
+ new Document(iframe.contentWindow.document);
+ $extend(win.Element.prototype, Element.Prototype);
+ }
+ onload.call(iframe.contentWindow, iframe.contentWindow.document);
+ };
+ (window.frames[props.id]) ? onFrameLoad() : iframe.addListener('load', onFrameLoad);
+ return iframe;
+ }
+
+});
+
+var Elements = new Native({
+
+ initialize: function(elements, options){
+ options = $extend({ddup: true, cash: true}, options);
+ elements = elements || [];
+ if (options.ddup || options.cash){
+ var uniques = {}, returned = [];
+ for (var i = 0, l = elements.length; i < l; i++){
+ var el = $.element(elements[i], !options.cash);
+ if (options.ddup){
+ if (uniques[el.uid]) continue;
+ uniques[el.uid] = true;
+ }
+ returned.push(el);
+ }
+ elements = returned;
+ }
+ return (options.cash) ? $extend(elements, this) : elements;
+ }
+
+});
+
+Elements.implement({
+
+ filter: function(filter, bind){
+ if (!filter) return this;
+ return new Elements(Array.filter(this, (typeof filter == 'string') ? function(item){
+ return item.match(filter);
+ } : filter, bind));
+ }
+
+});
+
+Document.implement({
+
+ newElement: function(tag, props){
+ if (Browser.Engine.trident && props){
+ ['name', 'type', 'checked'].each(function(attribute){
+ if (!props[attribute]) return;
+ tag += ' ' + attribute + '="' + props[attribute] + '"';
+ if (attribute != 'checked') delete props[attribute];
+ });
+ tag = '<' + tag + '>';
+ }
+ return $.element(this.createElement(tag)).set(props);
+ },
+
+ newTextNode: function(text){
+ return this.createTextNode(text);
+ },
+
+ getDocument: function(){
+ return this;
+ },
+
+ getWindow: function(){
+ return this.window;
+ }
+
+});
+
+Window.implement({
+
+ $: function(el, nocash){
+ if (el && el.$family && el.uid) return el;
+ var type = $type(el);
+ return ($[type]) ? $[type](el, nocash, this.document) : null;
+ },
+
+ $$: function(selector){
+ if (arguments.length == 1 && typeof selector == 'string') return this.document.getElements(selector);
+ var elements = [];
+ var args = Array.flatten(arguments);
+ for (var i = 0, l = args.length; i < l; i++){
+ var item = args[i];
+ switch ($type(item)){
+ case 'element': elements.push(item); break;
+ case 'string': elements.extend(this.document.getElements(item, true));
+ }
+ }
+ return new Elements(elements);
+ },
+
+ getDocument: function(){
+ return this.document;
+ },
+
+ getWindow: function(){
+ return this;
+ }
+
+});
+
+$.string = function(id, nocash, doc){
+ id = doc.getElementById(id);
+ return (id) ? $.element(id, nocash) : null;
+};
+
+$.element = function(el, nocash){
+ $uid(el);
+ if (!nocash && !el.$family && !(/^object|embed$/i).test(el.tagName)){
+ var proto = Element.Prototype;
+ for (var p in proto) el[p] = proto[p];
+ };
+ return el;
+};
+
+$.object = function(obj, nocash, doc){
+ if (obj.toElement) return $.element(obj.toElement(doc), nocash);
+ return null;
+};
+
+$.textnode = $.whitespace = $.window = $.document = $arguments(0);
+
+Native.implement([Element, Document], {
+
+ getElement: function(selector, nocash){
+ return $(this.getElements(selector, true)[0] || null, nocash);
+ },
+
+ getElements: function(tags, nocash){
+ tags = tags.split(',');
+ var elements = [];
+ var ddup = (tags.length > 1);
+ tags.each(function(tag){
+ var partial = this.getElementsByTagName(tag.trim());
+ (ddup) ? elements.extend(partial) : elements = partial;
+ }, this);
+ return new Elements(elements, {ddup: ddup, cash: !nocash});
+ }
+
+});
+
+(function(){
+
+var collected = {}, storage = {};
+var props = {input: 'checked', option: 'selected', textarea: (Browser.Engine.webkit && Browser.Engine.version < 420) ? 'innerHTML' : 'value'};
+
+var get = function(uid){
+ return (storage[uid] || (storage[uid] = {}));
+};
+
+var clean = function(item, retain){
+ if (!item) return;
+ var uid = item.uid;
+ if (Browser.Engine.trident){
+ if (item.clearAttributes){
+ var clone = retain && item.cloneNode(false);
+ item.clearAttributes();
+ if (clone) item.mergeAttributes(clone);
+ } else if (item.removeEvents){
+ item.removeEvents();
+ }
+ if ((/object/i).test(item.tagName)){
+ for (var p in item){
+ if (typeof item[p] == 'function') item[p] = $empty;
+ }
+ Element.dispose(item);
+ }
+ }
+ if (!uid) return;
+ collected[uid] = storage[uid] = null;
+};
+
+var purge = function(){
+ Hash.each(collected, clean);
+ if (Browser.Engine.trident) $A(document.getElementsByTagName('object')).each(clean);
+ if (window.CollectGarbage) CollectGarbage();
+ collected = storage = null;
+};
+
+var walk = function(element, walk, start, match, all, nocash){
+ var el = element[start || walk];
+ var elements = [];
+ while (el){
+ if (el.nodeType == 1 && (!match || Element.match(el, match))){
+ if (!all) return $(el, nocash);
+ elements.push(el);
+ }
+ el = el[walk];
+ }
+ return (all) ? new Elements(elements, {ddup: false, cash: !nocash}) : null;
+};
+
+var attributes = {
+ 'html': 'innerHTML',
+ 'class': 'className',
+ 'for': 'htmlFor',
+ 'text': (Browser.Engine.trident || (Browser.Engine.webkit && Browser.Engine.version < 420)) ? 'innerText' : 'textContent'
+};
+var bools = ['compact', 'nowrap', 'ismap', 'declare', 'noshade', 'checked', 'disabled', 'readonly', 'multiple', 'selected', 'noresize', 'defer'];
+var camels = ['value', 'accessKey', 'cellPadding', 'cellSpacing', 'colSpan', 'frameBorder', 'maxLength', 'readOnly', 'rowSpan', 'tabIndex', 'useMap'];
+
+Hash.extend(attributes, bools.associate(bools));
+Hash.extend(attributes, camels.associate(camels.map(String.toLowerCase)));
+
+var inserters = {
+
+ before: function(context, element){
+ if (element.parentNode) element.parentNode.insertBefore(context, element);
+ },
+
+ after: function(context, element){
+ if (!element.parentNode) return;
+ var next = element.nextSibling;
+ (next) ? element.parentNode.insertBefore(context, next) : element.parentNode.appendChild(context);
+ },
+
+ bottom: function(context, element){
+ element.appendChild(context);
+ },
+
+ top: function(context, element){
+ var first = element.firstChild;
+ (first) ? element.insertBefore(context, first) : element.appendChild(context);
+ }
+
+};
+
+inserters.inside = inserters.bottom;
+
+Hash.each(inserters, function(inserter, where){
+
+ where = where.capitalize();
+
+ Element.implement('inject' + where, function(el){
+ inserter(this, $(el, true));
+ return this;
+ });
+
+ Element.implement('grab' + where, function(el){
+ inserter($(el, true), this);
+ return this;
+ });
+
+});
+
+Element.implement({
+
+ set: function(prop, value){
+ switch ($type(prop)){
+ case 'object':
+ for (var p in prop) this.set(p, prop[p]);
+ break;
+ case 'string':
+ var property = Element.Properties.get(prop);
+ (property && property.set) ? property.set.apply(this, Array.slice(arguments, 1)) : this.setProperty(prop, value);
+ }
+ return this;
+ },
+
+ get: function(prop){
+ var property = Element.Properties.get(prop);
+ return (property && property.get) ? property.get.apply(this, Array.slice(arguments, 1)) : this.getProperty(prop);
+ },
+
+ erase: function(prop){
+ var property = Element.Properties.get(prop);
+ (property && property.erase) ? property.erase.apply(this) : this.removeProperty(prop);
+ return this;
+ },
+
+ setProperty: function(attribute, value){
+ var key = attributes[attribute];
+ if (value == undefined) return this.removeProperty(attribute);
+ if (key && bools[attribute]) value = !!value;
+ (key) ? this[key] = value : this.setAttribute(attribute, '' + value);
+ return this;
+ },
+
+ setProperties: function(attributes){
+ for (var attribute in attributes) this.setProperty(attribute, attributes[attribute]);
+ return this;
+ },
+
+ getProperty: function(attribute){
+ var key = attributes[attribute];
+ var value = (key) ? this[key] : this.getAttribute(attribute, 2);
+ return (bools[attribute]) ? !!value : (key) ? value : value || null;
+ },
+
+ getProperties: function(){
+ var args = $A(arguments);
+ return args.map(this.getProperty, this).associate(args);
+ },
+
+ removeProperty: function(attribute){
+ var key = attributes[attribute];
+ (key) ? this[key] = (key && bools[attribute]) ? false : '' : this.removeAttribute(attribute);
+ return this;
+ },
+
+ removeProperties: function(){
+ Array.each(arguments, this.removeProperty, this);
+ return this;
+ },
+
+ hasClass: function(className){
+ return this.className.contains(className, ' ');
+ },
+
+ addClass: function(className){
+ if (!this.hasClass(className)) this.className = (this.className + ' ' + className).clean();
+ return this;
+ },
+
+ removeClass: function(className){
+ this.className = this.className.replace(new RegExp('(^|\\s)' + className + '(?:\\s|$)'), '$1');
+ return this;
+ },
+
+ toggleClass: function(className){
+ return this.hasClass(className) ? this.removeClass(className) : this.addClass(className);
+ },
+
+ adopt: function(){
+ Array.flatten(arguments).each(function(element){
+ element = $(element, true);
+ if (element) this.appendChild(element);
+ }, this);
+ return this;
+ },
+
+ appendText: function(text, where){
+ return this.grab(this.getDocument().newTextNode(text), where);
+ },
+
+ grab: function(el, where){
+ inserters[where || 'bottom']($(el, true), this);
+ return this;
+ },
+
+ inject: function(el, where){
+ inserters[where || 'bottom'](this, $(el, true));
+ return this;
+ },
+
+ replaces: function(el){
+ el = $(el, true);
+ el.parentNode.replaceChild(this, el);
+ return this;
+ },
+
+ wraps: function(el, where){
+ el = $(el, true);
+ return this.replaces(el).grab(el, where);
+ },
+
+ getPrevious: function(match, nocash){
+ return walk(this, 'previousSibling', null, match, false, nocash);
+ },
+
+ getAllPrevious: function(match, nocash){
+ return walk(this, 'previousSibling', null, match, true, nocash);
+ },
+
+ getNext: function(match, nocash){
+ return walk(this, 'nextSibling', null, match, false, nocash);
+ },
+
+ getAllNext: function(match, nocash){
+ return walk(this, 'nextSibling', null, match, true, nocash);
+ },
+
+ getFirst: function(match, nocash){
+ return walk(this, 'nextSibling', 'firstChild', match, false, nocash);
+ },
+
+ getLast: function(match, nocash){
+ return walk(this, 'previousSibling', 'lastChild', match, false, nocash);
+ },
+
+ getParent: function(match, nocash){
+ return walk(this, 'parentNode', null, match, false, nocash);
+ },
+
+ getParents: function(match, nocash){
+ return walk(this, 'parentNode', null, match, true, nocash);
+ },
+
+ getChildren: function(match, nocash){
+ return walk(this, 'nextSibling', 'firstChild', match, true, nocash);
+ },
+
+ getWindow: function(){
+ return this.ownerDocument.window;
+ },
+
+ getDocument: function(){
+ return this.ownerDocument;
+ },
+
+ getElementById: function(id, nocash){
+ var el = this.ownerDocument.getElementById(id);
+ if (!el) return null;
+ for (var parent = el.parentNode; parent != this; parent = parent.parentNode){
+ if (!parent) return null;
+ }
+ return $.element(el, nocash);
+ },
+
+ getSelected: function(){
+ return new Elements($A(this.options).filter(function(option){
+ return option.selected;
+ }));
+ },
+
+ getComputedStyle: function(property){
+ if (this.currentStyle) return this.currentStyle[property.camelCase()];
+ var computed = this.getDocument().defaultView.getComputedStyle(this, null);
+ return (computed) ? computed.getPropertyValue([property.hyphenate()]) : null;
+ },
+
+ toQueryString: function(){
+ var queryString = [];
+ this.getElements('input, select, textarea', true).each(function(el){
+ if (!el.name || el.disabled) return;
+ var value = (el.tagName.toLowerCase() == 'select') ? Element.getSelected(el).map(function(opt){
+ return opt.value;
+ }) : ((el.type == 'radio' || el.type == 'checkbox') && !el.checked) ? null : el.value;
+ $splat(value).each(function(val){
+ if (typeof val != 'undefined') queryString.push(el.name + '=' + encodeURIComponent(val));
+ });
+ });
+ return queryString.join('&');
+ },
+
+ clone: function(contents, keepid){
+ contents = contents !== false;
+ var clone = this.cloneNode(contents);
+ var clean = function(node, element){
+ if (!keepid) node.removeAttribute('id');
+ if (Browser.Engine.trident){
+ node.clearAttributes();
+ node.mergeAttributes(element);
+ node.removeAttribute('uid');
+ if (node.options){
+ var no = node.options, eo = element.options;
+ for (var j = no.length; j--;) no[j].selected = eo[j].selected;
+ }
+ }
+ var prop = props[element.tagName.toLowerCase()];
+ if (prop && element[prop]) node[prop] = element[prop];
+ };
+
+ if (contents){
+ var ce = clone.getElementsByTagName('*'), te = this.getElementsByTagName('*');
+ for (var i = ce.length; i--;) clean(ce[i], te[i]);
+ }
+
+ clean(clone, this);
+ return $(clone);
+ },
+
+ destroy: function(){
+ Element.empty(this);
+ Element.dispose(this);
+ clean(this, true);
+ return null;
+ },
+
+ empty: function(){
+ $A(this.childNodes).each(function(node){
+ Element.destroy(node);
+ });
+ return this;
+ },
+
+ dispose: function(){
+ return (this.parentNode) ? this.parentNode.removeChild(this) : this;
+ },
+
+ hasChild: function(el){
+ el = $(el, true);
+ if (!el) return false;
+ if (Browser.Engine.webkit && Browser.Engine.version < 420) return $A(this.getElementsByTagName(el.tagName)).contains(el);
+ return (this.contains) ? (this != el && this.contains(el)) : !!(this.compareDocumentPosition(el) & 16);
+ },
+
+ match: function(tag){
+ return (!tag || (tag == this) || (Element.get(this, 'tag') == tag));
+ }
+
+});
+
+Native.implement([Element, Window, Document], {
+
+ addListener: function(type, fn){
+ if (type == 'unload'){
+ var old = fn, self = this;
+ fn = function(){
+ self.removeListener('unload', fn);
+ old();
+ };
+ } else {
+ collected[this.uid] = this;
+ }
+ if (this.addEventListener) this.addEventListener(type, fn, false);
+ else this.attachEvent('on' + type, fn);
+ return this;
+ },
+
+ removeListener: function(type, fn){
+ if (this.removeEventListener) this.removeEventListener(type, fn, false);
+ else this.detachEvent('on' + type, fn);
+ return this;
+ },
+
+ retrieve: function(property, dflt){
+ var storage = get(this.uid), prop = storage[property];
+ if (dflt != undefined && prop == undefined) prop = storage[property] = dflt;
+ return $pick(prop);
+ },
+
+ store: function(property, value){
+ var storage = get(this.uid);
+ storage[property] = value;
+ return this;
+ },
+
+ eliminate: function(property){
+ var storage = get(this.uid);
+ delete storage[property];
+ return this;
+ }
+
+});
+
+window.addListener('unload', purge);
+
+})();
+
+Element.Properties = new Hash;
+
+Element.Properties.style = {
+
+ set: function(style){
+ this.style.cssText = style;
+ },
+
+ get: function(){
+ return this.style.cssText;
+ },
+
+ erase: function(){
+ this.style.cssText = '';
+ }
+
+};
+
+Element.Properties.tag = {
+
+ get: function(){
+ return this.tagName.toLowerCase();
+ }
+
+};
+
+Element.Properties.html = (function(){
+ var wrapper = document.createElement('div');
+
+ var translations = {
+ table: [1, '<table>', '</table>'],
+ select: [1, '<select>', '</select>'],
+ tbody: [2, '<table><tbody>', '</tbody></table>'],
+ tr: [3, '<table><tbody><tr>', '</tr></tbody></table>']
+ };
+ translations.thead = translations.tfoot = translations.tbody;
+
+ var html = {
+ set: function(){
+ var html = Array.flatten(arguments).join('');
+ var wrap = Browser.Engine.trident && translations[this.get('tag')];
+ if (wrap){
+ var first = wrapper;
+ first.innerHTML = wrap[1] + html + wrap[2];
+ for (var i = wrap[0]; i--;) first = first.firstChild;
+ this.empty().adopt(first.childNodes);
+ } else {
+ this.innerHTML = html;
+ }
+ }
+ };
+
+ html.erase = html.set;
+
+ return html;
+})();
+
+if (Browser.Engine.webkit && Browser.Engine.version < 420) Element.Properties.text = {
+ get: function(){
+ if (this.innerText) return this.innerText;
+ var temp = this.ownerDocument.newElement('div', {html: this.innerHTML}).inject(this.ownerDocument.body);
+ var text = temp.innerText;
+ temp.destroy();
+ return text;
+ }
+};
+
+
+/*
+Script: Element.Event.js
+ Contains Element methods for dealing with events, and custom Events.
+
+License:
+ MIT-style license.
+*/
+
+Element.Properties.events = {set: function(events){
+ this.addEvents(events);
+}};
+
+Native.implement([Element, Window, Document], {
+
+ addEvent: function(type, fn){
+ var events = this.retrieve('events', {});
+ events[type] = events[type] || {'keys': [], 'values': []};
+ if (events[type].keys.contains(fn)) return this;
+ events[type].keys.push(fn);
+ var realType = type, custom = Element.Events.get(type), condition = fn, self = this;
+ if (custom){
+ if (custom.onAdd) custom.onAdd.call(this, fn);
+ if (custom.condition){
+ condition = function(event){
+ if (custom.condition.call(this, event)) return fn.call(this, event);
+ return true;
+ };
+ }
+ realType = custom.base || realType;
+ }
+ var defn = function(){
+ return fn.call(self);
+ };
+ var nativeEvent = Element.NativeEvents[realType];
+ if (nativeEvent){
+ if (nativeEvent == 2){
+ defn = function(event){
+ event = new Event(event, self.getWindow());
+ if (condition.call(self, event) === false) event.stop();
+ };
+ }
+ this.addListener(realType, defn);
+ }
+ events[type].values.push(defn);
+ return this;
+ },
+
+ removeEvent: function(type, fn){
+ var events = this.retrieve('events');
+ if (!events || !events[type]) return this;
+ var pos = events[type].keys.indexOf(fn);
+ if (pos == -1) return this;
+ events[type].keys.splice(pos, 1);
+ var value = events[type].values.splice(pos, 1)[0];
+ var custom = Element.Events.get(type);
+ if (custom){
+ if (custom.onRemove) custom.onRemove.call(this, fn);
+ type = custom.base || type;
+ }
+ return (Element.NativeEvents[type]) ? this.removeListener(type, value) : this;
+ },
+
+ addEvents: function(events){
+ for (var event in events) this.addEvent(event, events[event]);
+ return this;
+ },
+
+ removeEvents: function(events){
+ if ($type(events) == 'object'){
+ for (var type in events) this.removeEvent(type, events[type]);
+ return this;
+ }
+ var attached = this.retrieve('events');
+ if (!attached) return this;
+ if (!events){
+ for (var type in attached) this.removeEvents(type);
+ this.eliminate('events');
+ } else if (attached[events]){
+ while (attached[events].keys[0]) this.removeEvent(events, attached[events].keys[0]);
+ attached[events] = null;
+ }
+ return this;
+ },
+
+ fireEvent: function(type, args, delay){
+ var events = this.retrieve('events');
+ if (!events || !events[type]) return this;
+ events[type].keys.each(function(fn){
+ fn.create({'bind': this, 'delay': delay, 'arguments': args})();
+ }, this);
+ return this;
+ },
+
+ cloneEvents: function(from, type){
+ from = $(from);
+ var fevents = from.retrieve('events');
+ if (!fevents) return this;
+ if (!type){
+ for (var evType in fevents) this.cloneEvents(from, evType);
+ } else if (fevents[type]){
+ fevents[type].keys.each(function(fn){
+ this.addEvent(type, fn);
+ }, this);
+ }
+ return this;
+ }
+
+});
+
+Element.NativeEvents = {
+ click: 2, dblclick: 2, mouseup: 2, mousedown: 2, contextmenu: 2, //mouse buttons
+ mousewheel: 2, DOMMouseScroll: 2, //mouse wheel
+ mouseover: 2, mouseout: 2, mousemove: 2, selectstart: 2, selectend: 2, //mouse movement
+ keydown: 2, keypress: 2, keyup: 2, //keyboard
+ focus: 2, blur: 2, change: 2, reset: 2, select: 2, submit: 2, //form elements
+ load: 1, unload: 1, beforeunload: 2, resize: 1, move: 1, DOMContentLoaded: 1, readystatechange: 1, //window
+ error: 1, abort: 1, scroll: 1 //misc
+};
+
+(function(){
+
+var $check = function(event){
+ var related = event.relatedTarget;
+ if (related == undefined) return true;
+ if (related === false) return false;
+ return ($type(this) != 'document' && related != this && related.prefix != 'xul' && !this.hasChild(related));
+};
+
+Element.Events = new Hash({
+
+ mouseenter: {
+ base: 'mouseover',
+ condition: $check
+ },
+
+ mouseleave: {
+ base: 'mouseout',
+ condition: $check
+ },
+
+ mousewheel: {
+ base: (Browser.Engine.gecko) ? 'DOMMouseScroll' : 'mousewheel'
+ }
+
+});
+
+})();
+
+
+/*
+Script: Element.Style.js
+ Contains methods for interacting with the styles of Elements in a fashionable way.
+
+License:
+ MIT-style license.
+*/
+
+Element.Properties.styles = {set: function(styles){
+ this.setStyles(styles);
+}};
+
+Element.Properties.opacity = {
+
+ set: function(opacity, novisibility){
+ if (!novisibility){
+ if (opacity == 0){
+ if (this.style.visibility != 'hidden') this.style.visibility = 'hidden';
+ } else {
+ if (this.style.visibility != 'visible') this.style.visibility = 'visible';
+ }
+ }
+ if (!this.currentStyle || !this.currentStyle.hasLayout) this.style.zoom = 1;
+ if (Browser.Engine.trident) this.style.filter = (opacity == 1) ? '' : 'alpha(opacity=' + opacity * 100 + ')';
+ this.style.opacity = opacity;
+ this.store('opacity', opacity);
+ },
+
+ get: function(){
+ return this.retrieve('opacity', 1);
+ }
+
+};
+
+Element.implement({
+
+ setOpacity: function(value){
+ return this.set('opacity', value, true);
+ },
+
+ getOpacity: function(){
+ return this.get('opacity');
+ },
+
+ setStyle: function(property, value){
+ switch (property){
+ case 'opacity': return this.set('opacity', parseFloat(value));
+ case 'float': property = (Browser.Engine.trident) ? 'styleFloat' : 'cssFloat';
+ }
+ property = property.camelCase();
+ if ($type(value) != 'string'){
+ var map = (Element.Styles.get(property) || '@').split(' ');
+ value = $splat(value).map(function(val, i){
+ if (!map[i]) return '';
+ return ($type(val) == 'number') ? map[i].replace('@', Math.round(val)) : val;
+ }).join(' ');
+ } else if (value == String(Number(value))){
+ value = Math.round(value);
+ }
+ this.style[property] = value;
+ return this;
+ },
+
+ getStyle: function(property){
+ switch (property){
+ case 'opacity': return this.get('opacity');
+ case 'float': property = (Browser.Engine.trident) ? 'styleFloat' : 'cssFloat';
+ }
+ property = property.camelCase();
+ var result = this.style[property];
+ if (!$chk(result)){
+ result = [];
+ for (var style in Element.ShortStyles){
+ if (property != style) continue;
+ for (var s in Element.ShortStyles[style]) result.push(this.getStyle(s));
+ return result.join(' ');
+ }
+ result = this.getComputedStyle(property);
+ }
+ if (result){
+ result = String(result);
+ var color = result.match(/rgba?\([\d\s,]+\)/);
+ if (color) result = result.replace(color[0], color[0].rgbToHex());
+ }
+ if (Browser.Engine.presto || (Browser.Engine.trident && !$chk(parseInt(result)))){
+ if (property.test(/^(height|width)$/)){
+ var values = (property == 'width') ? ['left', 'right'] : ['top', 'bottom'], size = 0;
+ values.each(function(value){
+ size += this.getStyle('border-' + value + '-width').toInt() + this.getStyle('padding-' + value).toInt();
+ }, this);
+ return this['offset' + property.capitalize()] - size + 'px';
+ }
+ if ((Browser.Engine.presto) && String(result).test('px')) return result;
+ if (property.test(/(border(.+)Width|margin|padding)/)) return '0px';
+ }
+ return result;
+ },
+
+ setStyles: function(styles){
+ for (var style in styles) this.setStyle(style, styles[style]);
+ return this;
+ },
+
+ getStyles: function(){
+ var result = {};
+ Array.each(arguments, function(key){
+ result[key] = this.getStyle(key);
+ }, this);
+ return result;
+ }
+
+});
+
+Element.Styles = new Hash({
+ left: '@px', top: '@px', bottom: '@px', right: '@px',
+ width: '@px', height: '@px', maxWidth: '@px', maxHeight: '@px', minWidth: '@px', minHeight: '@px',
+ backgroundColor: 'rgb(@, @, @)', backgroundPosition: '@px @px', color: 'rgb(@, @, @)',
+ fontSize: '@px', letterSpacing: '@px', lineHeight: '@px', clip: 'rect(@px @px @px @px)',
+ margin: '@px @px @px @px', padding: '@px @px @px @px', border: '@px @ rgb(@, @, @) @px @ rgb(@, @, @) @px @ rgb(@, @, @)',
+ borderWidth: '@px @px @px @px', borderStyle: '@ @ @ @', borderColor: 'rgb(@, @, @) rgb(@, @, @) rgb(@, @, @) rgb(@, @, @)',
+ zIndex: '@', 'zoom': '@', fontWeight: '@', textIndent: '@px', opacity: '@'
+});
+
+Element.ShortStyles = {margin: {}, padding: {}, border: {}, borderWidth: {}, borderStyle: {}, borderColor: {}};
+
+['Top', 'Right', 'Bottom', 'Left'].each(function(direction){
+ var Short = Element.ShortStyles;
+ var All = Element.Styles;
+ ['margin', 'padding'].each(function(style){
+ var sd = style + direction;
+ Short[style][sd] = All[sd] = '@px';
+ });
+ var bd = 'border' + direction;
+ Short.border[bd] = All[bd] = '@px @ rgb(@, @, @)';
+ var bdw = bd + 'Width', bds = bd + 'Style', bdc = bd + 'Color';
+ Short[bd] = {};
+ Short.borderWidth[bdw] = Short[bd][bdw] = All[bdw] = '@px';
+ Short.borderStyle[bds] = Short[bd][bds] = All[bds] = '@';
+ Short.borderColor[bdc] = Short[bd][bdc] = All[bdc] = 'rgb(@, @, @)';
+});
+
+
+/*
+Script: Element.Dimensions.js
+ Contains methods to work with size, scroll, or positioning of Elements and the window object.
+
+License:
+ MIT-style license.
+
+Credits:
+ - Element positioning based on the [qooxdoo](http://qooxdoo.org/) code and smart browser fixes, [LGPL License](http://www.gnu.org/licenses/lgpl.html).
+ - Viewport dimensions based on [YUI](http://developer.yahoo.com/yui/) code, [BSD License](http://developer.yahoo.com/yui/license.html).
+*/
+
+(function(){
+
+Element.implement({
+
+ scrollTo: function(x, y){
+ if (isBody(this)){
+ this.getWindow().scrollTo(x, y);
+ } else {
+ this.scrollLeft = x;
+ this.scrollTop = y;
+ }
+ return this;
+ },
+
+ getSize: function(){
+ if (isBody(this)) return this.getWindow().getSize();
+ return {x: this.offsetWidth, y: this.offsetHeight};
+ },
+
+ getScrollSize: function(){
+ if (isBody(this)) return this.getWindow().getScrollSize();
+ return {x: this.scrollWidth, y: this.scrollHeight};
+ },
+
+ getScroll: function(){
+ if (isBody(this)) return this.getWindow().getScroll();
+ return {x: this.scrollLeft, y: this.scrollTop};
+ },
+
+ getScrolls: function(){
+ var element = this, position = {x: 0, y: 0};
+ while (element && !isBody(element)){
+ position.x += element.scrollLeft;
+ position.y += element.scrollTop;
+ element = element.parentNode;
+ }
+ return position;
+ },
+
+ getOffsetParent: function(){
+ var element = this;
+ if (isBody(element)) return null;
+ if (!Browser.Engine.trident) return element.offsetParent;
+ while ((element = element.parentNode) && !isBody(element)){
+ if (styleString(element, 'position') != 'static') return element;
+ }
+ return null;
+ },
+
+ getOffsets: function(){
+ if (Browser.Engine.trident){
+ var bound = this.getBoundingClientRect(), html = this.getDocument().documentElement;
+ return {
+ x: bound.left + html.scrollLeft - html.clientLeft,
+ y: bound.top + html.scrollTop - html.clientTop
+ };
+ }
+
+ var element = this, position = {x: 0, y: 0};
+ if (isBody(this)) return position;
+
+ while (element && !isBody(element)){
+ position.x += element.offsetLeft;
+ position.y += element.offsetTop;
+
+ if (Browser.Engine.gecko){
+ if (!borderBox(element)){
+ position.x += leftBorder(element);
+ position.y += topBorder(element);
+ }
+ var parent = element.parentNode;
+ if (parent && styleString(parent, 'overflow') != 'visible'){
+ position.x += leftBorder(parent);
+ position.y += topBorder(parent);
+ }
+ } else if (element != this && Browser.Engine.webkit){
+ position.x += leftBorder(element);
+ position.y += topBorder(element);
+ }
+
+ element = element.offsetParent;
+ }
+ if (Browser.Engine.gecko && !borderBox(this)){
+ position.x -= leftBorder(this);
+ position.y -= topBorder(this);
+ }
+ return position;
+ },
+
+ getPosition: function(relative){
+ if (isBody(this)) return {x: 0, y: 0};
+ var offset = this.getOffsets(), scroll = this.getScrolls();
+ var position = {x: offset.x - scroll.x, y: offset.y - scroll.y};
+ var relativePosition = (relative && (relative = $(relative))) ? relative.getPosition() : {x: 0, y: 0};
+ return {x: position.x - relativePosition.x, y: position.y - relativePosition.y};
+ },
+
+ getCoordinates: function(element){
+ if (isBody(this)) return this.getWindow().getCoordinates();
+ var position = this.getPosition(element), size = this.getSize();
+ var obj = {left: position.x, top: position.y, width: size.x, height: size.y};
+ obj.right = obj.left + obj.width;
+ obj.bottom = obj.top + obj.height;
+ return obj;
+ },
+
+ computePosition: function(obj){
+ return {left: obj.x - styleNumber(this, 'margin-left'), top: obj.y - styleNumber(this, 'margin-top')};
+ },
+
+ position: function(obj){
+ return this.setStyles(this.computePosition(obj));
+ }
+
+});
+
+Native.implement([Document, Window], {
+
+ getSize: function(){
+ var win = this.getWindow();
+ if (Browser.Engine.presto || Browser.Engine.webkit) return {x: win.innerWidth, y: win.innerHeight};
+ var doc = getCompatElement(this);
+ return {x: doc.clientWidth, y: doc.clientHeight};
+ },
+
+ getScroll: function(){
+ var win = this.getWindow();
+ var doc = getCompatElement(this);
+ return {x: win.pageXOffset || doc.scrollLeft, y: win.pageYOffset || doc.scrollTop};
+ },
+
+ getScrollSize: function(){
+ var doc = getCompatElement(this);
+ var min = this.getSize();
+ return {x: Math.max(doc.scrollWidth, min.x), y: Math.max(doc.scrollHeight, min.y)};
+ },
+
+ getPosition: function(){
+ return {x: 0, y: 0};
+ },
+
+ getCoordinates: function(){
+ var size = this.getSize();
+ return {top: 0, left: 0, bottom: size.y, right: size.x, height: size.y, width: size.x};
+ }
+
+});
+
+// private methods
+
+var styleString = Element.getComputedStyle;
+
+function styleNumber(element, style){
+ return styleString(element, style).toInt() || 0;
+};
+
+function borderBox(element){
+ return styleString(element, '-moz-box-sizing') == 'border-box';
+};
+
+function topBorder(element){
+ return styleNumber(element, 'border-top-width');
+};
+
+function leftBorder(element){
+ return styleNumber(element, 'border-left-width');
+};
+
+function isBody(element){
+ return (/^(?:body|html)$/i).test(element.tagName);
+};
+
+function getCompatElement(element){
+ var doc = element.getDocument();
+ return (!doc.compatMode || doc.compatMode == 'CSS1Compat') ? doc.html : doc.body;
+};
+
+})();
+
+//aliases
+
+Native.implement([Window, Document, Element], {
+
+ getHeight: function(){
+ return this.getSize().y;
+ },
+
+ getWidth: function(){
+ return this.getSize().x;
+ },
+
+ getScrollTop: function(){
+ return this.getScroll().y;
+ },
+
+ getScrollLeft: function(){
+ return this.getScroll().x;
+ },
+
+ getScrollHeight: function(){
+ return this.getScrollSize().y;
+ },
+
+ getScrollWidth: function(){
+ return this.getScrollSize().x;
+ },
+
+ getTop: function(){
+ return this.getPosition().y;
+ },
+
+ getLeft: function(){
+ return this.getPosition().x;
+ }
+
+});
+
+
+/*
+Script: Selectors.js
+ Adds advanced CSS Querying capabilities for targeting elements. Also includes pseudoselectors support.
+
+License:
+ MIT-style license.
+*/
+
+Native.implement([Document, Element], {
+
+ getElements: function(expression, nocash){
+ expression = expression.split(',');
+ var items, local = {};
+ for (var i = 0, l = expression.length; i < l; i++){
+ var selector = expression[i], elements = Selectors.Utils.search(this, selector, local);
+ if (i != 0 && elements.item) elements = $A(elements);
+ items = (i == 0) ? elements : (items.item) ? $A(items).concat(elements) : items.concat(elements);
+ }
+ return new Elements(items, {ddup: (expression.length > 1), cash: !nocash});
+ }
+
+});
+
+Element.implement({
+
+ match: function(selector){
+ if (!selector || (selector == this)) return true;
+ var tagid = Selectors.Utils.parseTagAndID(selector);
+ var tag = tagid[0], id = tagid[1];
+ if (!Selectors.Filters.byID(this, id) || !Selectors.Filters.byTag(this, tag)) return false;
+ var parsed = Selectors.Utils.parseSelector(selector);
+ return (parsed) ? Selectors.Utils.filter(this, parsed, {}) : true;
+ }
+
+});
+
+var Selectors = {Cache: {nth: {}, parsed: {}}};
+
+Selectors.RegExps = {
+ id: (/#([\w-]+)/),
+ tag: (/^(\w+|\*)/),
+ quick: (/^(\w+|\*)$/),
+ splitter: (/\s*([+>~\s])\s*([a-zA-Z#.*:\[])/g),
+ combined: (/\.([\w-]+)|\[(\w+)(?:([!*^$~|]?=)(["']?)([^\4]*?)\4)?\]|:([\w-]+)(?:\(["']?(.*?)?["']?\)|$)/g)
+};
+
+Selectors.Utils = {
+
+ chk: function(item, uniques){
+ if (!uniques) return true;
+ var uid = $uid(item);
+ if (!uniques[uid]) return uniques[uid] = true;
+ return false;
+ },
+
+ parseNthArgument: function(argument){
+ if (Selectors.Cache.nth[argument]) return Selectors.Cache.nth[argument];
+ var parsed = argument.match(/^([+-]?\d*)?([a-z]+)?([+-]?\d*)?$/);
+ if (!parsed) return false;
+ var inta = parseInt(parsed[1]);
+ var a = (inta || inta === 0) ? inta : 1;
+ var special = parsed[2] || false;
+ var b = parseInt(parsed[3]) || 0;
+ if (a != 0){
+ b--;
+ while (b < 1) b += a;
+ while (b >= a) b -= a;
+ } else {
+ a = b;
+ special = 'index';
+ }
+ switch (special){
+ case 'n': parsed = {a: a, b: b, special: 'n'}; break;
+ case 'odd': parsed = {a: 2, b: 0, special: 'n'}; break;
+ case 'even': parsed = {a: 2, b: 1, special: 'n'}; break;
+ case 'first': parsed = {a: 0, special: 'index'}; break;
+ case 'last': parsed = {special: 'last-child'}; break;
+ case 'only': parsed = {special: 'only-child'}; break;
+ default: parsed = {a: (a - 1), special: 'index'};
+ }
+
+ return Selectors.Cache.nth[argument] = parsed;
+ },
+
+ parseSelector: function(selector){
+ if (Selectors.Cache.parsed[selector]) return Selectors.Cache.parsed[selector];
+ var m, parsed = {classes: [], pseudos: [], attributes: []};
+ while ((m = Selectors.RegExps.combined.exec(selector))){
+ var cn = m[1], an = m[2], ao = m[3], av = m[5], pn = m[6], pa = m[7];
+ if (cn){
+ parsed.classes.push(cn);
+ } else if (pn){
+ var parser = Selectors.Pseudo.get(pn);
+ if (parser) parsed.pseudos.push({parser: parser, argument: pa});
+ else parsed.attributes.push({name: pn, operator: '=', value: pa});
+ } else if (an){
+ parsed.attributes.push({name: an, operator: ao, value: av});
+ }
+ }
+ if (!parsed.classes.length) delete parsed.classes;
+ if (!parsed.attributes.length) delete parsed.attributes;
+ if (!parsed.pseudos.length) delete parsed.pseudos;
+ if (!parsed.classes && !parsed.attributes && !parsed.pseudos) parsed = null;
+ return Selectors.Cache.parsed[selector] = parsed;
+ },
+
+ parseTagAndID: function(selector){
+ var tag = selector.match(Selectors.RegExps.tag);
+ var id = selector.match(Selectors.RegExps.id);
+ return [(tag) ? tag[1] : '*', (id) ? id[1] : false];
+ },
+
+ filter: function(item, parsed, local){
+ var i;
+ if (parsed.classes){
+ for (i = parsed.classes.length; i--; i){
+ var cn = parsed.classes[i];
+ if (!Selectors.Filters.byClass(item, cn)) return false;
+ }
+ }
+ if (parsed.attributes){
+ for (i = parsed.attributes.length; i--; i){
+ var att = parsed.attributes[i];
+ if (!Selectors.Filters.byAttribute(item, att.name, att.operator, att.value)) return false;
+ }
+ }
+ if (parsed.pseudos){
+ for (i = parsed.pseudos.length; i--; i){
+ var psd = parsed.pseudos[i];
+ if (!Selectors.Filters.byPseudo(item, psd.parser, psd.argument, local)) return false;
+ }
+ }
+ return true;
+ },
+
+ getByTagAndID: function(ctx, tag, id){
+ if (id){
+ var item = (ctx.getElementById) ? ctx.getElementById(id, true) : Element.getElementById(ctx, id, true);
+ return (item && Selectors.Filters.byTag(item, tag)) ? [item] : [];
+ } else {
+ return ctx.getElementsByTagName(tag);
+ }
+ },
+
+ search: function(self, expression, local){
+ var splitters = [];
+
+ var selectors = expression.trim().replace(Selectors.RegExps.splitter, function(m0, m1, m2){
+ splitters.push(m1);
+ return ':)' + m2;
+ }).split(':)');
+
+ var items, filtered, item;
+
+ for (var i = 0, l = selectors.length; i < l; i++){
+
+ var selector = selectors[i];
+
+ if (i == 0 && Selectors.RegExps.quick.test(selector)){
+ items = self.getElementsByTagName(selector);
+ continue;
+ }
+
+ var splitter = splitters[i - 1];
+
+ var tagid = Selectors.Utils.parseTagAndID(selector);
+ var tag = tagid[0], id = tagid[1];
+
+ if (i == 0){
+ items = Selectors.Utils.getByTagAndID(self, tag, id);
+ } else {
+ var uniques = {}, found = [];
+ for (var j = 0, k = items.length; j < k; j++) found = Selectors.Getters[splitter](found, items[j], tag, id, uniques);
+ items = found;
+ }
+
+ var parsed = Selectors.Utils.parseSelector(selector);
+
+ if (parsed){
+ filtered = [];
+ for (var m = 0, n = items.length; m < n; m++){
+ item = items[m];
+ if (Selectors.Utils.filter(item, parsed, local)) filtered.push(item);
+ }
+ items = filtered;
+ }
+
+ }
+
+ return items;
+
+ }
+
+};
+
+Selectors.Getters = {
+
+ ' ': function(found, self, tag, id, uniques){
+ var items = Selectors.Utils.getByTagAndID(self, tag, id);
+ for (var i = 0, l = items.length; i < l; i++){
+ var item = items[i];
+ if (Selectors.Utils.chk(item, uniques)) found.push(item);
+ }
+ return found;
+ },
+
+ '>': function(found, self, tag, id, uniques){
+ var children = Selectors.Utils.getByTagAndID(self, tag, id);
+ for (var i = 0, l = children.length; i < l; i++){
+ var child = children[i];
+ if (child.parentNode == self && Selectors.Utils.chk(child, uniques)) found.push(child);
+ }
+ return found;
+ },
+
+ '+': function(found, self, tag, id, uniques){
+ while ((self = self.nextSibling)){
+ if (self.nodeType == 1){
+ if (Selectors.Utils.chk(self, uniques) && Selectors.Filters.byTag(self, tag) && Selectors.Filters.byID(self, id)) found.push(self);
+ break;
+ }
+ }
+ return found;
+ },
+
+ '~': function(found, self, tag, id, uniques){
+ while ((self = self.nextSibling)){
+ if (self.nodeType == 1){
+ if (!Selectors.Utils.chk(self, uniques)) break;
+ if (Selectors.Filters.byTag(self, tag) && Selectors.Filters.byID(self, id)) found.push(self);
+ }
+ }
+ return found;
+ }
+
+};
+
+Selectors.Filters = {
+
+ byTag: function(self, tag){
+ return (tag == '*' || (self.tagName && self.tagName.toLowerCase() == tag));
+ },
+
+ byID: function(self, id){
+ return (!id || (self.id && self.id == id));
+ },
+
+ byClass: function(self, klass){
+ return (self.className && self.className.contains(klass, ' '));
+ },
+
+ byPseudo: function(self, parser, argument, local){
+ return parser.call(self, argument, local);
+ },
+
+ byAttribute: function(self, name, operator, value){
+ var result = Element.prototype.getProperty.call(self, name);
+ if (!result) return (operator == '!=');
+ if (!operator || value == undefined) return true;
+ switch (operator){
+ case '=': return (result == value);
+ case '*=': return (result.contains(value));
+ case '^=': return (result.substr(0, value.length) == value);
+ case '$=': return (result.substr(result.length - value.length) == value);
+ case '!=': return (result != value);
+ case '~=': return result.contains(value, ' ');
+ case '|=': return result.contains(value, '-');
+ }
+ return false;
+ }
+
+};
+
+Selectors.Pseudo = new Hash({
+
+ // w3c pseudo selectors
+
+ checked: function(){
+ return this.checked;
+ },
+
+ empty: function(){
+ return !(this.innerText || this.textContent || '').length;
+ },
+
+ not: function(selector){
+ return !Element.match(this, selector);
+ },
+
+ contains: function(text){
+ return (this.innerText || this.textContent || '').contains(text);
+ },
+
+ 'first-child': function(){
+ return Selectors.Pseudo.index.call(this, 0);
+ },
+
+ 'last-child': function(){
+ var element = this;
+ while ((element = element.nextSibling)){
+ if (element.nodeType == 1) return false;
+ }
+ return true;
+ },
+
+ 'only-child': function(){
+ var prev = this;
+ while ((prev = prev.previousSibling)){
+ if (prev.nodeType == 1) return false;
+ }
+ var next = this;
+ while ((next = next.nextSibling)){
+ if (next.nodeType == 1) return false;
+ }
+ return true;
+ },
+
+ 'nth-child': function(argument, local){
+ argument = (argument == undefined) ? 'n' : argument;
+ var parsed = Selectors.Utils.parseNthArgument(argument);
+ if (parsed.special != 'n') return Selectors.Pseudo[parsed.special].call(this, parsed.a, local);
+ var count = 0;
+ local.positions = local.positions || {};
+ var uid = $uid(this);
+ if (!local.positions[uid]){
+ var self = this;
+ while ((self = self.previousSibling)){
+ if (self.nodeType != 1) continue;
+ count ++;
+ var position = local.positions[$uid(self)];
+ if (position != undefined){
+ count = position + count;
+ break;
+ }
+ }
+ local.positions[uid] = count;
+ }
+ return (local.positions[uid] % parsed.a == parsed.b);
+ },
+
+ // custom pseudo selectors
+
+ index: function(index){
+ var element = this, count = 0;
+ while ((element = element.previousSibling)){
+ if (element.nodeType == 1 && ++count > index) return false;
+ }
+ return (count == index);
+ },
+
+ even: function(argument, local){
+ return Selectors.Pseudo['nth-child'].call(this, '2n+1', local);
+ },
+
+ odd: function(argument, local){
+ return Selectors.Pseudo['nth-child'].call(this, '2n', local);
+ }
+
+});
+
+
+/*
+Script: Domready.js
+ Contains the domready custom event.
+
+License:
+ MIT-style license.
+*/
+
+Element.Events.domready = {
+
+ onAdd: function(fn){
+ if (Browser.loaded) fn.call(this);
+ }
+
+};
+
+(function(){
+
+ var domready = function(){
+ if (Browser.loaded) return;
+ Browser.loaded = true;
+ window.fireEvent('domready');
+ document.fireEvent('domready');
+ };
+
+ if (Browser.Engine.trident){
+ var temp = document.createElement('div');
+ (function(){
+ ($try(function(){
+ temp.doScroll('left');
+ return $(temp).inject(document.body).set('html', 'temp').dispose();
+ })) ? domready() : arguments.callee.delay(50);
+ })();
+ } else if (Browser.Engine.webkit && Browser.Engine.version < 525){
+ (function(){
+ (['loaded', 'complete'].contains(document.readyState)) ? domready() : arguments.callee.delay(50);
+ })();
+ } else {
+ window.addEvent('load', domready);
+ document.addEvent('DOMContentLoaded', domready);
+ }
+
+})();
+
+
+/*
+Script: JSON.js
+ JSON encoder and decoder.
+
+License:
+ MIT-style license.
+
+See Also:
+ <http://www.json.org/>
+*/
+
+var JSON = new Hash({
+
+ $specialChars: {'\b': '\\b', '\t': '\\t', '\n': '\\n', '\f': '\\f', '\r': '\\r', '"' : '\\"', '\\': '\\\\'},
+
+ $replaceChars: function(chr){
+ return JSON.$specialChars[chr] || '\\u00' + Math.floor(chr.charCodeAt() / 16).toString(16) + (chr.charCodeAt() % 16).toString(16);
+ },
+
+ encode: function(obj){
+ switch ($type(obj)){
+ case 'string':
+ return '"' + obj.replace(/[\x00-\x1f\\"]/g, JSON.$replaceChars) + '"';
+ case 'array':
+ return '[' + String(obj.map(JSON.encode).filter($defined)) + ']';
+ case 'object': case 'hash':
+ var string = [];
+ Hash.each(obj, function(value, key){
+ var json = JSON.encode(value);
+ if (json) string.push(JSON.encode(key) + ':' + json);
+ });
+ return '{' + string + '}';
+ case 'number': case 'boolean': return String(obj);
+ case false: return 'null';
+ }
+ return null;
+ },
+
+ decode: function(string, secure){
+ if ($type(string) != 'string' || !string.length) return null;
+ if (secure && !(/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(string.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, ''))) return null;
+ return eval('(' + string + ')');
+ }
+
+});
+
+Native.implement([Hash, Array, String, Number], {
+
+ toJSON: function(){
+ return JSON.encode(this);
+ }
+
+});
+
+
+/*
+Script: Cookie.js
+ Class for creating, loading, and saving browser Cookies.
+
+License:
+ MIT-style license.
+
+Credits:
+ Based on the functions by Peter-Paul Koch (http://quirksmode.org).
+*/
+
+var Cookie = new Class({
+
+ Implements: Options,
+
+ options: {
+ path: false,
+ domain: false,
+ duration: false,
+ secure: false,
+ document: document
+ },
+
+ initialize: function(key, options){
+ this.key = key;
+ this.setOptions(options);
+ },
+
+ write: function(value){
+ value = encodeURIComponent(value);
+ if (this.options.domain) value += '; domain=' + this.options.domain;
+ if (this.options.path) value += '; path=' + this.options.path;
+ if (this.options.duration){
+ var date = new Date();
+ date.setTime(date.getTime() + this.options.duration * 24 * 60 * 60 * 1000);
+ value += '; expires=' + date.toGMTString();
+ }
+ if (this.options.secure) value += '; secure';
+ this.options.document.cookie = this.key + '=' + value;
+ return this;
+ },
+
+ read: function(){
+ var value = this.options.document.cookie.match('(?:^|;)\\s*' + this.key.escapeRegExp() + '=([^;]*)');
+ return (value) ? decodeURIComponent(value[1]) : null;
+ },
+
+ dispose: function(){
+ new Cookie(this.key, $merge(this.options, {duration: -1})).write('');
+ return this;
+ }
+
+});
+
+Cookie.write = function(key, value, options){
+ return new Cookie(key, options).write(value);
+};
+
+Cookie.read = function(key){
+ return new Cookie(key).read();
+};
+
+Cookie.dispose = function(key, options){
+ return new Cookie(key, options).dispose();
+};
+
+
+/*
+Script: Swiff.js
+ Wrapper for embedding SWF movies. Supports (and fixes) External Interface Communication.
+
+License:
+ MIT-style license.
+
+Credits:
+ Flash detection & Internet Explorer + Flash Player 9 fix inspired by SWFObject.
+*/
+
+var Swiff = new Class({
+
+ Implements: [Options],
+
+ options: {
+ id: null,
+ height: 1,
+ width: 1,
+ container: null,
+ properties: {},
+ params: {
+ quality: 'high',
+ allowScriptAccess: 'always',
+ wMode: 'transparent',
+ swLiveConnect: true
+ },
+ callBacks: {},
+ vars: {}
+ },
+
+ toElement: function(){
+ return this.object;
+ },
+
+ initialize: function(path, options){
+ this.instance = 'Swiff_' + $time();
+
+ this.setOptions(options);
+ options = this.options;
+ var id = this.id = options.id || this.instance;
+ var container = $(options.container);
+
+ Swiff.CallBacks[this.instance] = {};
+
+ var params = options.params, vars = options.vars, callBacks = options.callBacks;
+ var properties = $extend({height: options.height, width: options.width}, options.properties);
+
+ var self = this;
+
+ for (var callBack in callBacks){
+ Swiff.CallBacks[this.instance][callBack] = (function(option){
+ return function(){
+ return option.apply(self.object, arguments);
+ };
+ })(callBacks[callBack]);
+ vars[callBack] = 'Swiff.CallBacks.' + this.instance + '.' + callBack;
+ }
+
+ params.flashVars = Hash.toQueryString(vars);
+ if (Browser.Engine.trident){
+ properties.classid = 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000';
+ params.movie = path;
+ } else {
+ properties.type = 'application/x-shockwave-flash';
+ properties.data = path;
+ }
+ var build = '<object id="' + id + '"';
+ for (var property in properties) build += ' ' + property + '="' + properties[property] + '"';
+ build += '>';
+ for (var param in params){
+ if (params[param]) build += '<param name="' + param + '" value="' + params[param] + '" />';
+ }
+ build += '</object>';
+ this.object = ((container) ? container.empty() : new Element('div')).set('html', build).firstChild;
+ },
+
+ replaces: function(element){
+ element = $(element, true);
+ element.parentNode.replaceChild(this.toElement(), element);
+ return this;
+ },
+
+ inject: function(element){
+ $(element, true).appendChild(this.toElement());
+ return this;
+ },
+
+ remote: function(){
+ return Swiff.remote.apply(Swiff, [this.toElement()].extend(arguments));
+ }
+
+});
+
+Swiff.CallBacks = {};
+
+Swiff.remote = function(obj, fn){
+ var rs = obj.CallFunction('<invoke name="' + fn + '" returntype="javascript">' + __flash__argumentsToXML(arguments, 2) + '</invoke>');
+ return eval(rs);
+};
+
+
+/*
+Script: Fx.js
+ Contains the basic animation logic to be extended by all other Fx Classes.
+
+License:
+ MIT-style license.
+*/
+
+var Fx = new Class({
+
+ Implements: [Chain, Events, Options],
+
+ options: {
+ /*
+ onStart: $empty,
+ onCancel: $empty,
+ onComplete: $empty,
+ */
+ fps: 50,
+ unit: false,
+ duration: 500,
+ link: 'ignore'
+ },
+
+ initialize: function(options){
+ this.subject = this.subject || this;
+ this.setOptions(options);
+ this.options.duration = Fx.Durations[this.options.duration] || this.options.duration.toInt();
+ var wait = this.options.wait;
+ if (wait === false) this.options.link = 'cancel';
+ },
+
+ getTransition: function(){
+ return function(p){
+ return -(Math.cos(Math.PI * p) - 1) / 2;
+ };
+ },
+
+ step: function(){
+ var time = $time();
+ if (time < this.time + this.options.duration){
+ var delta = this.transition((time - this.time) / this.options.duration);
+ this.set(this.compute(this.from, this.to, delta));
+ } else {
+ this.set(this.compute(this.from, this.to, 1));
+ this.complete();
+ }
+ },
+
+ set: function(now){
+ return now;
+ },
+
+ compute: function(from, to, delta){
+ return Fx.compute(from, to, delta);
+ },
+
+ check: function(caller){
+ if (!this.timer) return true;
+ switch (this.options.link){
+ case 'cancel': this.cancel(); return true;
+ case 'chain': this.chain(caller.bind(this, Array.slice(arguments, 1))); return false;
+ }
+ return false;
+ },
+
+ start: function(from, to){
+ if (!this.check(arguments.callee, from, to)) return this;
+ this.from = from;
+ this.to = to;
+ this.time = 0;
+ this.transition = this.getTransition();
+ this.startTimer();
+ this.onStart();
+ return this;
+ },
+
+ complete: function(){
+ if (this.stopTimer()) this.onComplete();
+ return this;
+ },
+
+ cancel: function(){
+ if (this.stopTimer()) this.onCancel();
+ return this;
+ },
+
+ onStart: function(){
+ this.fireEvent('start', this.subject);
+ },
+
+ onComplete: function(){
+ this.fireEvent('complete', this.subject);
+ if (!this.callChain()) this.fireEvent('chainComplete', this.subject);
+ },
+
+ onCancel: function(){
+ this.fireEvent('cancel', this.subject).clearChain();
+ },
+
+ pause: function(){
+ this.stopTimer();
+ return this;
+ },
+
+ resume: function(){
+ this.startTimer();
+ return this;
+ },
+
+ stopTimer: function(){
+ if (!this.timer) return false;
+ this.time = $time() - this.time;
+ this.timer = $clear(this.timer);
+ return true;
+ },
+
+ startTimer: function(){
+ if (this.timer) return false;
+ this.time = $time() - this.time;
+ this.timer = this.step.periodical(Math.round(1000 / this.options.fps), this);
+ return true;
+ }
+
+});
+
+Fx.compute = function(from, to, delta){
+ return (to - from) * delta + from;
+};
+
+Fx.Durations = {'short': 250, 'normal': 500, 'long': 1000};
+
+
+/*
+Script: Fx.CSS.js
+ Contains the CSS animation logic. Used by Fx.Tween, Fx.Morph, Fx.Elements.
+
+License:
+ MIT-style license.
+*/
+
+Fx.CSS = new Class({
+
+ Extends: Fx,
+
+ //prepares the base from/to object
+
+ prepare: function(element, property, values){
+ values = $splat(values);
+ var values1 = values[1];
+ if (!$chk(values1)){
+ values[1] = values[0];
+ values[0] = element.getStyle(property);
+ }
+ var parsed = values.map(this.parse);
+ return {from: parsed[0], to: parsed[1]};
+ },
+
+ //parses a value into an array
+
+ parse: function(value){
+ value = $lambda(value)();
+ value = (typeof value == 'string') ? value.split(' ') : $splat(value);
+ return value.map(function(val){
+ val = String(val);
+ var found = false;
+ Fx.CSS.Parsers.each(function(parser, key){
+ if (found) return;
+ var parsed = parser.parse(val);
+ if ($chk(parsed)) found = {value: parsed, parser: parser};
+ });
+ found = found || {value: val, parser: Fx.CSS.Parsers.String};
+ return found;
+ });
+ },
+
+ //computes by a from and to prepared objects, using their parsers.
+
+ compute: function(from, to, delta){
+ var computed = [];
+ (Math.min(from.length, to.length)).times(function(i){
+ computed.push({value: from[i].parser.compute(from[i].value, to[i].value, delta), parser: from[i].parser});
+ });
+ computed.$family = {name: 'fx:css:value'};
+ return computed;
+ },
+
+ //serves the value as settable
+
+ serve: function(value, unit){
+ if ($type(value) != 'fx:css:value') value = this.parse(value);
+ var returned = [];
+ value.each(function(bit){
+ returned = returned.concat(bit.parser.serve(bit.value, unit));
+ });
+ return returned;
+ },
+
+ //renders the change to an element
+
+ render: function(element, property, value, unit){
+ element.setStyle(property, this.serve(value, unit));
+ },
+
+ //searches inside the page css to find the values for a selector
+
+ search: function(selector){
+ if (Fx.CSS.Cache[selector]) return Fx.CSS.Cache[selector];
+ var to = {};
+ Array.each(document.styleSheets, function(sheet, j){
+ var href = sheet.href;
+ if (href && href.contains('://') && !href.contains(document.domain)) return;
+ var rules = sheet.rules || sheet.cssRules;
+ Array.each(rules, function(rule, i){
+ if (!rule.style) return;
+ var selectorText = (rule.selectorText) ? rule.selectorText.replace(/^\w+/, function(m){
+ return m.toLowerCase();
+ }) : null;
+ if (!selectorText || !selectorText.test('^' + selector + '$')) return;
+ Element.Styles.each(function(value, style){
+ if (!rule.style[style] || Element.ShortStyles[style]) return;
+ value = String(rule.style[style]);
+ to[style] = (value.test(/^rgb/)) ? value.rgbToHex() : value;
+ });
+ });
+ });
+ return Fx.CSS.Cache[selector] = to;
+ }
+
+});
+
+Fx.CSS.Cache = {};
+
+Fx.CSS.Parsers = new Hash({
+
+ Color: {
+ parse: function(value){
+ if (value.match(/^#[0-9a-f]{3,6}$/i)) return value.hexToRgb(true);
+ return ((value = value.match(/(\d+),\s*(\d+),\s*(\d+)/))) ? [value[1], value[2], value[3]] : false;
+ },
+ compute: function(from, to, delta){
+ return from.map(function(value, i){
+ return Math.round(Fx.compute(from[i], to[i], delta));
+ });
+ },
+ serve: function(value){
+ return value.map(Number);
+ }
+ },
+
+ Number: {
+ parse: parseFloat,
+ compute: Fx.compute,
+ serve: function(value, unit){
+ return (unit) ? value + unit : value;
+ }
+ },
+
+ String: {
+ parse: $lambda(false),
+ compute: $arguments(1),
+ serve: $arguments(0)
+ }
+
+});
+
+
+/*
+Script: Fx.Tween.js
+ Formerly Fx.Style, effect to transition any CSS property for an element.
+
+License:
+ MIT-style license.
+*/
+
+Fx.Tween = new Class({
+
+ Extends: Fx.CSS,
+
+ initialize: function(element, options){
+ this.element = this.subject = $(element);
+ this.parent(options);
+ },
+
+ set: function(property, now){
+ if (arguments.length == 1){
+ now = property;
+ property = this.property || this.options.property;
+ }
+ this.render(this.element, property, now, this.options.unit);
+ return this;
+ },
+
+ start: function(property, from, to){
+ if (!this.check(arguments.callee, property, from, to)) return this;
+ var args = Array.flatten(arguments);
+ this.property = this.options.property || args.shift();
+ var parsed = this.prepare(this.element, this.property, args);
+ return this.parent(parsed.from, parsed.to);
+ }
+
+});
+
+Element.Properties.tween = {
+
+ set: function(options){
+ var tween = this.retrieve('tween');
+ if (tween) tween.cancel();
+ return this.eliminate('tween').store('tween:options', $extend({link: 'cancel'}, options));
+ },
+
+ get: function(options){
+ if (options || !this.retrieve('tween')){
+ if (options || !this.retrieve('tween:options')) this.set('tween', options);
+ this.store('tween', new Fx.Tween(this, this.retrieve('tween:options')));
+ }
+ return this.retrieve('tween');
+ }
+
+};
+
+Element.implement({
+
+ tween: function(property, from, to){
+ this.get('tween').start(arguments);
+ return this;
+ },
+
+ fade: function(how){
+ var fade = this.get('tween'), o = 'opacity', toggle;
+ how = $pick(how, 'toggle');
+ switch (how){
+ case 'in': fade.start(o, 1); break;
+ case 'out': fade.start(o, 0); break;
+ case 'show': fade.set(o, 1); break;
+ case 'hide': fade.set(o, 0); break;
+ case 'toggle':
+ var flag = this.retrieve('fade:flag', this.get('opacity') == 1);
+ fade.start(o, (flag) ? 0 : 1);
+ this.store('fade:flag', !flag);
+ toggle = true;
+ break;
+ default: fade.start(o, arguments);
+ }
+ if (!toggle) this.eliminate('fade:flag');
+ return this;
+ },
+
+ highlight: function(start, end){
+ if (!end){
+ end = this.retrieve('highlight:original', this.getStyle('background-color'));
+ end = (end == 'transparent') ? '#fff' : end;
+ }
+ var tween = this.get('tween');
+ tween.start('background-color', start || '#ffff88', end).chain(function(){
+ this.setStyle('background-color', this.retrieve('highlight:original'));
+ tween.callChain();
+ }.bind(this));
+ return this;
+ }
+
+});
+
+
+/*
+Script: Fx.Morph.js
+ Formerly Fx.Styles, effect to transition any number of CSS properties for an element using an object of rules, or CSS based selector rules.
+
+License:
+ MIT-style license.
+*/
+
+Fx.Morph = new Class({
+
+ Extends: Fx.CSS,
+
+ initialize: function(element, options){
+ this.element = this.subject = $(element);
+ this.parent(options);
+ },
+
+ set: function(now){
+ if (typeof now == 'string') now = this.search(now);
+ for (var p in now) this.render(this.element, p, now[p], this.options.unit);
+ return this;
+ },
+
+ compute: function(from, to, delta){
+ var now = {};
+ for (var p in from) now[p] = this.parent(from[p], to[p], delta);
+ return now;
+ },
+
+ start: function(properties){
+ if (!this.check(arguments.callee, properties)) return this;
+ if (typeof properties == 'string') properties = this.search(properties);
+ var from = {}, to = {};
+ for (var p in properties){
+ var parsed = this.prepare(this.element, p, properties[p]);
+ from[p] = parsed.from;
+ to[p] = parsed.to;
+ }
+ return this.parent(from, to);
+ }
+
+});
+
+Element.Properties.morph = {
+
+ set: function(options){
+ var morph = this.retrieve('morph');
+ if (morph) morph.cancel();
+ return this.eliminate('morph').store('morph:options', $extend({link: 'cancel'}, options));
+ },
+
+ get: function(options){
+ if (options || !this.retrieve('morph')){
+ if (options || !this.retrieve('morph:options')) this.set('morph', options);
+ this.store('morph', new Fx.Morph(this, this.retrieve('morph:options')));
+ }
+ return this.retrieve('morph');
+ }
+
+};
+
+Element.implement({
+
+ morph: function(props){
+ this.get('morph').start(props);
+ return this;
+ }
+
+});
+
+
+/*
+Script: Fx.Transitions.js
+ Contains a set of advanced transitions to be used with any of the Fx Classes.
+
+License:
+ MIT-style license.
+
+Credits:
+ Easing Equations by Robert Penner, <http://www.robertpenner.com/easing/>, modified and optimized to be used with MooTools.
+*/
+
+Fx.implement({
+
+ getTransition: function(){
+ var trans = this.options.transition || Fx.Transitions.Sine.easeInOut;
+ if (typeof trans == 'string'){
+ var data = trans.split(':');
+ trans = Fx.Transitions;
+ trans = trans[data[0]] || trans[data[0].capitalize()];
+ if (data[1]) trans = trans['ease' + data[1].capitalize() + (data[2] ? data[2].capitalize() : '')];
+ }
+ return trans;
+ }
+
+});
+
+Fx.Transition = function(transition, params){
+ params = $splat(params);
+ return $extend(transition, {
+ easeIn: function(pos){
+ return transition(pos, params);
+ },
+ easeOut: function(pos){
+ return 1 - transition(1 - pos, params);
+ },
+ easeInOut: function(pos){
+ return (pos <= 0.5) ? transition(2 * pos, params) / 2 : (2 - transition(2 * (1 - pos), params)) / 2;
+ }
+ });
+};
+
+Fx.Transitions = new Hash({
+
+ linear: $arguments(0)
+
+});
+
+Fx.Transitions.extend = function(transitions){
+ for (var transition in transitions) Fx.Transitions[transition] = new Fx.Transition(transitions[transition]);
+};
+
+Fx.Transitions.extend({
+
+ Pow: function(p, x){
+ return Math.pow(p, x[0] || 6);
+ },
+
+ Expo: function(p){
+ return Math.pow(2, 8 * (p - 1));
+ },
+
+ Circ: function(p){
+ return 1 - Math.sin(Math.acos(p));
+ },
+
+ Sine: function(p){
+ return 1 - Math.sin((1 - p) * Math.PI / 2);
+ },
+
+ Back: function(p, x){
+ x = x[0] || 1.618;
+ return Math.pow(p, 2) * ((x + 1) * p - x);
+ },
+
+ Bounce: function(p){
+ var value;
+ for (var a = 0, b = 1; 1; a += b, b /= 2){
+ if (p >= (7 - 4 * a) / 11){
+ value = b * b - Math.pow((11 - 6 * a - 11 * p) / 4, 2);
+ break;
+ }
+ }
+ return value;
+ },
+
+ Elastic: function(p, x){
+ return Math.pow(2, 10 * --p) * Math.cos(20 * p * Math.PI * (x[0] || 1) / 3);
+ }
+
+});
+
+['Quad', 'Cubic', 'Quart', 'Quint'].each(function(transition, i){
+ Fx.Transitions[transition] = new Fx.Transition(function(p){
+ return Math.pow(p, [i + 2]);
+ });
+});
+
+
+/*
+Script: Request.js
+ Powerful all purpose Request Class. Uses XMLHTTPRequest.
+
+License:
+ MIT-style license.
+*/
+
+var Request = new Class({
+
+ Implements: [Chain, Events, Options],
+
+ options: {/*
+ onRequest: $empty,
+ onComplete: $empty,
+ onCancel: $empty,
+ onSuccess: $empty,
+ onFailure: $empty,
+ onException: $empty,*/
+ url: '',
+ data: '',
+ headers: {
+ 'X-Requested-With': 'XMLHttpRequest',
+ 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
+ },
+ async: true,
+ format: false,
+ method: 'post',
+ link: 'ignore',
+ isSuccess: null,
+ emulation: true,
+ urlEncoded: true,
+ encoding: 'utf-8',
+ evalScripts: false,
+ evalResponse: false
+ },
+
+ initialize: function(options){
+ this.xhr = new Browser.Request();
+ this.setOptions(options);
+ this.options.isSuccess = this.options.isSuccess || this.isSuccess;
+ this.headers = new Hash(this.options.headers);
+ },
+
+ onStateChange: function(){
+ if (this.xhr.readyState != 4 || !this.running) return;
+ this.running = false;
+ this.status = 0;
+ $try(function(){
+ this.status = this.xhr.status;
+ }.bind(this));
+ if (this.options.isSuccess.call(this, this.status)){
+ this.response = {text: this.xhr.responseText, xml: this.xhr.responseXML};
+ this.success(this.response.text, this.response.xml);
+ } else {
+ this.response = {text: null, xml: null};
+ this.failure();
+ }
+ this.xhr.onreadystatechange = $empty;
+ },
+
+ isSuccess: function(){
+ return ((this.status >= 200) && (this.status < 300));
+ },
+
+ processScripts: function(text){
+ if (this.options.evalResponse || (/(ecma|java)script/).test(this.getHeader('Content-type'))) return $exec(text);
+ return text.stripScripts(this.options.evalScripts);
+ },
+
+ success: function(text, xml){
+ this.onSuccess(this.processScripts(text), xml);
+ },
+
+ onSuccess: function(){
+ this.fireEvent('complete', arguments).fireEvent('success', arguments).callChain();
+ },
+
+ failure: function(){
+ this.onFailure();
+ },
+
+ onFailure: function(){
+ this.fireEvent('complete').fireEvent('failure', this.xhr);
+ },
+
+ setHeader: function(name, value){
+ this.headers.set(name, value);
+ return this;
+ },
+
+ getHeader: function(name){
+ return $try(function(){
+ return this.xhr.getResponseHeader(name);
+ }.bind(this));
+ },
+
+ check: function(caller){
+ if (!this.running) return true;
+ switch (this.options.link){
+ case 'cancel': this.cancel(); return true;
+ case 'chain': this.chain(caller.bind(this, Array.slice(arguments, 1))); return false;
+ }
+ return false;
+ },
+
+ send: function(options){
+ if (!this.check(arguments.callee, options)) return this;
+ this.running = true;
+
+ var type = $type(options);
+ if (type == 'string' || type == 'element') options = {data: options};
+
+ var old = this.options;
+ options = $extend({data: old.data, url: old.url, method: old.method}, options);
+ var data = options.data, url = options.url, method = options.method;
+
+ switch ($type(data)){
+ case 'element': data = $(data).toQueryString(); break;
+ case 'object': case 'hash': data = Hash.toQueryString(data);
+ }
+
+ if (this.options.format){
+ var format = 'format=' + this.options.format;
+ data = (data) ? format + '&' + data : format;
+ }
+
+ if (this.options.emulation && ['put', 'delete'].contains(method)){
+ var _method = '_method=' + method;
+ data = (data) ? _method + '&' + data : _method;
+ method = 'post';
+ }
+
+ if (this.options.urlEncoded && method == 'post'){
+ var encoding = (this.options.encoding) ? '; charset=' + this.options.encoding : '';
+ this.headers.set('Content-type', 'application/x-www-form-urlencoded' + encoding);
+ }
+
+ if (data && method == 'get'){
+ url = url + (url.contains('?') ? '&' : '?') + data;
+ data = null;
+ }
+
+ this.xhr.open(method.toUpperCase(), url, this.options.async);
+
+ this.xhr.onreadystatechange = this.onStateChange.bind(this);
+
+ this.headers.each(function(value, key){
+ try {
+ this.xhr.setRequestHeader(key, value);
+ } catch (e){
+ this.fireEvent('exception', [key, value]);
+ }
+ }, this);
+
+ this.fireEvent('request');
+ this.xhr.send(data);
+ if (!this.options.async) this.onStateChange();
+ return this;
+ },
+
+ cancel: function(){
+ if (!this.running) return this;
+ this.running = false;
+ this.xhr.abort();
+ this.xhr.onreadystatechange = $empty;
+ this.xhr = new Browser.Request();
+ this.fireEvent('cancel');
+ return this;
+ }
+
+});
+
+(function(){
+
+var methods = {};
+['get', 'post', 'put', 'delete', 'GET', 'POST', 'PUT', 'DELETE'].each(function(method){
+ methods[method] = function(){
+ var params = Array.link(arguments, {url: String.type, data: $defined});
+ return this.send($extend(params, {method: method.toLowerCase()}));
+ };
+});
+
+Request.implement(methods);
+
+})();
+
+Element.Properties.send = {
+
+ set: function(options){
+ var send = this.retrieve('send');
+ if (send) send.cancel();
+ return this.eliminate('send').store('send:options', $extend({
+ data: this, link: 'cancel', method: this.get('method') || 'post', url: this.get('action')
+ }, options));
+ },
+
+ get: function(options){
+ if (options || !this.retrieve('send')){
+ if (options || !this.retrieve('send:options')) this.set('send', options);
+ this.store('send', new Request(this.retrieve('send:options')));
+ }
+ return this.retrieve('send');
+ }
+
+};
+
+Element.implement({
+
+ send: function(url){
+ var sender = this.get('send');
+ sender.send({data: this, url: url || sender.options.url});
+ return this;
+ }
+
+});
+
+
+/*
+Script: Request.HTML.js
+ Extends the basic Request Class with additional methods for interacting with HTML responses.
+
+License:
+ MIT-style license.
+*/
+
+Request.HTML = new Class({
+
+ Extends: Request,
+
+ options: {
+ update: false,
+ evalScripts: true,
+ filter: false
+ },
+
+ processHTML: function(text){
+ var match = text.match(/<body[^>]*>([\s\S]*?)<\/body>/i);
+ text = (match) ? match[1] : text;
+
+ var container = new Element('div');
+
+ return $try(function(){
+ var root = '<root>' + text + '</root>', doc;
+ if (Browser.Engine.trident){
+ doc = new ActiveXObject('Microsoft.XMLDOM');
+ doc.async = false;
+ doc.loadXML(root);
+ } else {
+ doc = new DOMParser().parseFromString(root, 'text/xml');
+ }
+ root = doc.getElementsByTagName('root')[0];
+ for (var i = 0, k = root.childNodes.length; i < k; i++){
+ var child = Element.clone(root.childNodes[i], true, true);
+ if (child) container.grab(child);
+ }
+ return container;
+ }) || container.set('html', text);
+ },
+
+ success: function(text){
+ var options = this.options, response = this.response;
+
+ response.html = text.stripScripts(function(script){
+ response.javascript = script;
+ });
+
+ var temp = this.processHTML(response.html);
+
+ response.tree = temp.childNodes;
+ response.elements = temp.getElements('*');
+
+ if (options.filter) response.tree = response.elements.filter(options.filter);
+ if (options.update) $(options.update).empty().set('html', response.html);
+ if (options.evalScripts) $exec(response.javascript);
+
+ this.onSuccess(response.tree, response.elements, response.html, response.javascript);
+ }
+
+});
+
+Element.Properties.load = {
+
+ set: function(options){
+ var load = this.retrieve('load');
+ if (load) load.cancel();
+ return this.eliminate('load').store('load:options', $extend({data: this, link: 'cancel', update: this, method: 'get'}, options));
+ },
+
+ get: function(options){
+ if (options || ! this.retrieve('load')){
+ if (options || !this.retrieve('load:options')) this.set('load', options);
+ this.store('load', new Request.HTML(this.retrieve('load:options')));
+ }
+ return this.retrieve('load');
+ }
+
+};
+
+Element.implement({
+
+ load: function(){
+ this.get('load').send(Array.link(arguments, {data: Object.type, url: String.type}));
+ return this;
+ }
+
+});
+
+
+/*
+Script: Request.JSON.js
+ Extends the basic Request Class with additional methods for sending and receiving JSON data.
+
+License:
+ MIT-style license.
+*/
+
+Request.JSON = new Class({
+
+ Extends: Request,
+
+ options: {
+ secure: true
+ },
+
+ initialize: function(options){
+ this.parent(options);
+ this.headers.extend({'Accept': 'application/json', 'X-Request': 'JSON'});
+ },
+
+ success: function(text){
+ this.response.json = JSON.decode(text, this.options.secure);
+ this.onSuccess(this.response.json, text);
+ }
+
+});
diff --git a/testing/talos/talos/tests/dromaeo/lib/prototype.js b/testing/talos/talos/tests/dromaeo/lib/prototype.js
new file mode 100644
index 0000000000..dfe8ab4e13
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/lib/prototype.js
@@ -0,0 +1,4320 @@
+/* Prototype JavaScript framework, version 1.6.0.3
+ * (c) 2005-2008 Sam Stephenson
+ *
+ * Prototype is freely distributable under the terms of an MIT-style license.
+ * For details, see the Prototype web site: http://www.prototypejs.org/
+ *
+ *--------------------------------------------------------------------------*/
+
+var Prototype = {
+ Version: '1.6.0.3',
+
+ Browser: {
+ IE: !!(window.attachEvent &&
+ navigator.userAgent.indexOf('Opera') === -1),
+ Opera: navigator.userAgent.indexOf('Opera') > -1,
+ WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
+ Gecko: navigator.userAgent.indexOf('Gecko') > -1 &&
+ navigator.userAgent.indexOf('KHTML') === -1,
+ MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/)
+ },
+
+ BrowserFeatures: {
+ XPath: !!document.evaluate,
+ SelectorsAPI: !!document.querySelector,
+ ElementExtensions: !!window.HTMLElement,
+ SpecificElementExtensions:
+ document.createElement('div')['__proto__'] &&
+ document.createElement('div')['__proto__'] !==
+ document.createElement('form')['__proto__']
+ },
+
+ ScriptFragment: '<script[^>]*>([\\S\\s]*?)<\/script>',
+ JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/,
+
+ emptyFunction: function() { },
+ K: function(x) { return x }
+};
+
+if (Prototype.Browser.MobileSafari)
+ Prototype.BrowserFeatures.SpecificElementExtensions = false;
+
+
+/* Based on Alex Arnell's inheritance implementation. */
+var Class = {
+ create: function() {
+ var parent = null, properties = $A(arguments);
+ if (Object.isFunction(properties[0]))
+ parent = properties.shift();
+
+ function klass() {
+ this.initialize.apply(this, arguments);
+ }
+
+ Object.extend(klass, Class.Methods);
+ klass.superclass = parent;
+ klass.subclasses = [];
+
+ if (parent) {
+ var subclass = function() { };
+ subclass.prototype = parent.prototype;
+ klass.prototype = new subclass;
+ parent.subclasses.push(klass);
+ }
+
+ for (var i = 0; i < properties.length; i++)
+ klass.addMethods(properties[i]);
+
+ if (!klass.prototype.initialize)
+ klass.prototype.initialize = Prototype.emptyFunction;
+
+ klass.prototype.constructor = klass;
+
+ return klass;
+ }
+};
+
+Class.Methods = {
+ addMethods: function(source) {
+ var ancestor = this.superclass && this.superclass.prototype;
+ var properties = Object.keys(source);
+
+ if (!Object.keys({ toString: true }).length)
+ properties.push("toString", "valueOf");
+
+ for (var i = 0, length = properties.length; i < length; i++) {
+ var property = properties[i], value = source[property];
+ if (ancestor && Object.isFunction(value) &&
+ value.argumentNames().first() == "$super") {
+ var method = value;
+ value = (function(m) {
+ return function() { return ancestor[m].apply(this, arguments) };
+ })(property).wrap(method);
+
+ value.valueOf = method.valueOf.bind(method);
+ value.toString = method.toString.bind(method);
+ }
+ this.prototype[property] = value;
+ }
+
+ return this;
+ }
+};
+
+var Abstract = { };
+
+Object.extend = function(destination, source) {
+ for (var property in source)
+ destination[property] = source[property];
+ return destination;
+};
+
+Object.extend(Object, {
+ inspect: function(object) {
+ try {
+ if (Object.isUndefined(object)) return 'undefined';
+ if (object === null) return 'null';
+ return object.inspect ? object.inspect() : String(object);
+ } catch (e) {
+ if (e instanceof RangeError) return '...';
+ throw e;
+ }
+ },
+
+ toJSON: function(object) {
+ var type = typeof object;
+ switch (type) {
+ case 'undefined':
+ case 'function':
+ case 'unknown': return;
+ case 'boolean': return object.toString();
+ }
+
+ if (object === null) return 'null';
+ if (object.toJSON) return object.toJSON();
+ if (Object.isElement(object)) return;
+
+ var results = [];
+ for (var property in object) {
+ var value = Object.toJSON(object[property]);
+ if (!Object.isUndefined(value))
+ results.push(property.toJSON() + ': ' + value);
+ }
+
+ return '{' + results.join(', ') + '}';
+ },
+
+ toQueryString: function(object) {
+ return $H(object).toQueryString();
+ },
+
+ toHTML: function(object) {
+ return object && object.toHTML ? object.toHTML() : String.interpret(object);
+ },
+
+ keys: function(object) {
+ var keys = [];
+ for (var property in object)
+ keys.push(property);
+ return keys;
+ },
+
+ values: function(object) {
+ var values = [];
+ for (var property in object)
+ values.push(object[property]);
+ return values;
+ },
+
+ clone: function(object) {
+ return Object.extend({ }, object);
+ },
+
+ isElement: function(object) {
+ return !!(object && object.nodeType == 1);
+ },
+
+ isArray: function(object) {
+ return object != null && typeof object == "object" &&
+ 'splice' in object && 'join' in object;
+ },
+
+ isHash: function(object) {
+ return object instanceof Hash;
+ },
+
+ isFunction: function(object) {
+ return typeof object == "function";
+ },
+
+ isString: function(object) {
+ return typeof object == "string";
+ },
+
+ isNumber: function(object) {
+ return typeof object == "number";
+ },
+
+ isUndefined: function(object) {
+ return typeof object == "undefined";
+ }
+});
+
+Object.extend(Function.prototype, {
+ argumentNames: function() {
+ var names = this.toString().match(/^[\s\(]*function[^(]*\(([^\)]*)\)/)[1]
+ .replace(/\s+/g, '').split(',');
+ return names.length == 1 && !names[0] ? [] : names;
+ },
+
+ bind: function() {
+ if (arguments.length < 2 && Object.isUndefined(arguments[0])) return this;
+ var __method = this, args = $A(arguments), object = args.shift();
+ return function() {
+ return __method.apply(object, args.concat($A(arguments)));
+ }
+ },
+
+ bindAsEventListener: function() {
+ var __method = this, args = $A(arguments), object = args.shift();
+ return function(event) {
+ return __method.apply(object, [event || window.event].concat(args));
+ }
+ },
+
+ curry: function() {
+ if (!arguments.length) return this;
+ var __method = this, args = $A(arguments);
+ return function() {
+ return __method.apply(this, args.concat($A(arguments)));
+ }
+ },
+
+ delay: function() {
+ var __method = this, args = $A(arguments), timeout = args.shift() * 1000;
+ return window.setTimeout(function() {
+ return __method.apply(__method, args);
+ }, timeout);
+ },
+
+ defer: function() {
+ var args = [0.01].concat($A(arguments));
+ return this.delay.apply(this, args);
+ },
+
+ wrap: function(wrapper) {
+ var __method = this;
+ return function() {
+ return wrapper.apply(this, [__method.bind(this)].concat($A(arguments)));
+ }
+ },
+
+ methodize: function() {
+ if (this._methodized) return this._methodized;
+ var __method = this;
+ return this._methodized = function() {
+ return __method.apply(null, [this].concat($A(arguments)));
+ };
+ }
+});
+
+Date.prototype.toJSON = function() {
+ return '"' + this.getUTCFullYear() + '-' +
+ (this.getUTCMonth() + 1).toPaddedString(2) + '-' +
+ this.getUTCDate().toPaddedString(2) + 'T' +
+ this.getUTCHours().toPaddedString(2) + ':' +
+ this.getUTCMinutes().toPaddedString(2) + ':' +
+ this.getUTCSeconds().toPaddedString(2) + 'Z"';
+};
+
+var Try = {
+ these: function() {
+ var returnValue;
+
+ for (var i = 0, length = arguments.length; i < length; i++) {
+ var lambda = arguments[i];
+ try {
+ returnValue = lambda();
+ break;
+ } catch (e) { }
+ }
+
+ return returnValue;
+ }
+};
+
+RegExp.prototype.match = RegExp.prototype.test;
+
+RegExp.escape = function(str) {
+ return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
+};
+
+/*--------------------------------------------------------------------------*/
+
+var PeriodicalExecuter = Class.create({
+ initialize: function(callback, frequency) {
+ this.callback = callback;
+ this.frequency = frequency;
+ this.currentlyExecuting = false;
+
+ this.registerCallback();
+ },
+
+ registerCallback: function() {
+ this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
+ },
+
+ execute: function() {
+ this.callback(this);
+ },
+
+ stop: function() {
+ if (!this.timer) return;
+ clearInterval(this.timer);
+ this.timer = null;
+ },
+
+ onTimerEvent: function() {
+ if (!this.currentlyExecuting) {
+ try {
+ this.currentlyExecuting = true;
+ this.execute();
+ } finally {
+ this.currentlyExecuting = false;
+ }
+ }
+ }
+});
+Object.extend(String, {
+ interpret: function(value) {
+ return value == null ? '' : String(value);
+ },
+ specialChar: {
+ '\b': '\\b',
+ '\t': '\\t',
+ '\n': '\\n',
+ '\f': '\\f',
+ '\r': '\\r',
+ '\\': '\\\\'
+ }
+});
+
+Object.extend(String.prototype, {
+ gsub: function(pattern, replacement) {
+ var result = '', source = this, match;
+ replacement = arguments.callee.prepareReplacement(replacement);
+
+ while (source.length > 0) {
+ if (match = source.match(pattern)) {
+ result += source.slice(0, match.index);
+ result += String.interpret(replacement(match));
+ source = source.slice(match.index + match[0].length);
+ } else {
+ result += source, source = '';
+ }
+ }
+ return result;
+ },
+
+ sub: function(pattern, replacement, count) {
+ replacement = this.gsub.prepareReplacement(replacement);
+ count = Object.isUndefined(count) ? 1 : count;
+
+ return this.gsub(pattern, function(match) {
+ if (--count < 0) return match[0];
+ return replacement(match);
+ });
+ },
+
+ scan: function(pattern, iterator) {
+ this.gsub(pattern, iterator);
+ return String(this);
+ },
+
+ truncate: function(length, truncation) {
+ length = length || 30;
+ truncation = Object.isUndefined(truncation) ? '...' : truncation;
+ return this.length > length ?
+ this.slice(0, length - truncation.length) + truncation : String(this);
+ },
+
+ strip: function() {
+ return this.replace(/^\s+/, '').replace(/\s+$/, '');
+ },
+
+ stripTags: function() {
+ return this.replace(/<\/?[^>]+>/gi, '');
+ },
+
+ stripScripts: function() {
+ return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
+ },
+
+ extractScripts: function() {
+ var matchAll = new RegExp(Prototype.ScriptFragment, 'img');
+ var matchOne = new RegExp(Prototype.ScriptFragment, 'im');
+ return (this.match(matchAll) || []).map(function(scriptTag) {
+ return (scriptTag.match(matchOne) || ['', ''])[1];
+ });
+ },
+
+ evalScripts: function() {
+ return this.extractScripts().map(function(script) { return eval(script) });
+ },
+
+ escapeHTML: function() {
+ var self = arguments.callee;
+ self.text.data = this;
+ return self.div.innerHTML;
+ },
+
+ unescapeHTML: function() {
+ var div = new Element('div');
+ div.innerHTML = this.stripTags();
+ return div.childNodes[0] ? (div.childNodes.length > 1 ?
+ $A(div.childNodes).inject('', function(memo, node) { return memo+node.nodeValue }) :
+ div.childNodes[0].nodeValue) : '';
+ },
+
+ toQueryParams: function(separator) {
+ var match = this.strip().match(/([^?#]*)(#.*)?$/);
+ if (!match) return { };
+
+ return match[1].split(separator || '&').inject({ }, function(hash, pair) {
+ if ((pair = pair.split('='))[0]) {
+ var key = decodeURIComponent(pair.shift());
+ var value = pair.length > 1 ? pair.join('=') : pair[0];
+ if (value != undefined) value = decodeURIComponent(value);
+
+ if (key in hash) {
+ if (!Object.isArray(hash[key])) hash[key] = [hash[key]];
+ hash[key].push(value);
+ }
+ else hash[key] = value;
+ }
+ return hash;
+ });
+ },
+
+ toArray: function() {
+ return this.split('');
+ },
+
+ succ: function() {
+ return this.slice(0, this.length - 1) +
+ String.fromCharCode(this.charCodeAt(this.length - 1) + 1);
+ },
+
+ times: function(count) {
+ return count < 1 ? '' : new Array(count + 1).join(this);
+ },
+
+ camelize: function() {
+ var parts = this.split('-'), len = parts.length;
+ if (len == 1) return parts[0];
+
+ var camelized = this.charAt(0) == '-'
+ ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)
+ : parts[0];
+
+ for (var i = 1; i < len; i++)
+ camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1);
+
+ return camelized;
+ },
+
+ capitalize: function() {
+ return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
+ },
+
+ underscore: function() {
+ return this.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase();
+ },
+
+ dasherize: function() {
+ return this.gsub(/_/,'-');
+ },
+
+ inspect: function(useDoubleQuotes) {
+ var escapedString = this.gsub(/[\x00-\x1f\\]/, function(match) {
+ var character = String.specialChar[match[0]];
+ return character ? character : '\\u00' + match[0].charCodeAt().toPaddedString(2, 16);
+ });
+ if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"';
+ return "'" + escapedString.replace(/'/g, '\\\'') + "'";
+ },
+
+ toJSON: function() {
+ return this.inspect(true);
+ },
+
+ unfilterJSON: function(filter) {
+ return this.sub(filter || Prototype.JSONFilter, '#{1}');
+ },
+
+ isJSON: function() {
+ var str = this;
+ if (str.blank()) return false;
+ str = this.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, '');
+ return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);
+ },
+
+ evalJSON: function(sanitize) {
+ var json = this.unfilterJSON();
+ try {
+ if (!sanitize || json.isJSON()) return eval('(' + json + ')');
+ } catch (e) { }
+ throw new SyntaxError('Badly formed JSON string: ' + this.inspect());
+ },
+
+ include: function(pattern) {
+ return this.indexOf(pattern) > -1;
+ },
+
+ startsWith: function(pattern) {
+ return this.indexOf(pattern) === 0;
+ },
+
+ endsWith: function(pattern) {
+ var d = this.length - pattern.length;
+ return d >= 0 && this.lastIndexOf(pattern) === d;
+ },
+
+ empty: function() {
+ return this == '';
+ },
+
+ blank: function() {
+ return /^\s*$/.test(this);
+ },
+
+ interpolate: function(object, pattern) {
+ return new Template(this, pattern).evaluate(object);
+ }
+});
+
+if (Prototype.Browser.WebKit || Prototype.Browser.IE) Object.extend(String.prototype, {
+ escapeHTML: function() {
+ return this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
+ },
+ unescapeHTML: function() {
+ return this.stripTags().replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/g,'>');
+ }
+});
+
+String.prototype.gsub.prepareReplacement = function(replacement) {
+ if (Object.isFunction(replacement)) return replacement;
+ var template = new Template(replacement);
+ return function(match) { return template.evaluate(match) };
+};
+
+String.prototype.parseQuery = String.prototype.toQueryParams;
+
+Object.extend(String.prototype.escapeHTML, {
+ div: document.createElement('div'),
+ text: document.createTextNode('')
+});
+
+String.prototype.escapeHTML.div.appendChild(String.prototype.escapeHTML.text);
+
+var Template = Class.create({
+ initialize: function(template, pattern) {
+ this.template = template.toString();
+ this.pattern = pattern || Template.Pattern;
+ },
+
+ evaluate: function(object) {
+ if (Object.isFunction(object.toTemplateReplacements))
+ object = object.toTemplateReplacements();
+
+ return this.template.gsub(this.pattern, function(match) {
+ if (object == null) return '';
+
+ var before = match[1] || '';
+ if (before == '\\') return match[2];
+
+ var ctx = object, expr = match[3];
+ var pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;
+ match = pattern.exec(expr);
+ if (match == null) return before;
+
+ while (match != null) {
+ var comp = match[1].startsWith('[') ? match[2].gsub('\\\\]', ']') : match[1];
+ ctx = ctx[comp];
+ if (null == ctx || '' == match[3]) break;
+ expr = expr.substring('[' == match[3] ? match[1].length : match[0].length);
+ match = pattern.exec(expr);
+ }
+
+ return before + String.interpret(ctx);
+ });
+ }
+});
+Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;
+
+var $break = { };
+
+var Enumerable = {
+ each: function(iterator, context) {
+ var index = 0;
+ try {
+ this._each(function(value) {
+ iterator.call(context, value, index++);
+ });
+ } catch (e) {
+ if (e != $break) throw e;
+ }
+ return this;
+ },
+
+ eachSlice: function(number, iterator, context) {
+ var index = -number, slices = [], array = this.toArray();
+ if (number < 1) return array;
+ while ((index += number) < array.length)
+ slices.push(array.slice(index, index+number));
+ return slices.collect(iterator, context);
+ },
+
+ all: function(iterator, context) {
+ iterator = iterator || Prototype.K;
+ var result = true;
+ this.each(function(value, index) {
+ result = result && !!iterator.call(context, value, index);
+ if (!result) throw $break;
+ });
+ return result;
+ },
+
+ any: function(iterator, context) {
+ iterator = iterator || Prototype.K;
+ var result = false;
+ this.each(function(value, index) {
+ if (result = !!iterator.call(context, value, index))
+ throw $break;
+ });
+ return result;
+ },
+
+ collect: function(iterator, context) {
+ iterator = iterator || Prototype.K;
+ var results = [];
+ this.each(function(value, index) {
+ results.push(iterator.call(context, value, index));
+ });
+ return results;
+ },
+
+ detect: function(iterator, context) {
+ var result;
+ this.each(function(value, index) {
+ if (iterator.call(context, value, index)) {
+ result = value;
+ throw $break;
+ }
+ });
+ return result;
+ },
+
+ findAll: function(iterator, context) {
+ var results = [];
+ this.each(function(value, index) {
+ if (iterator.call(context, value, index))
+ results.push(value);
+ });
+ return results;
+ },
+
+ grep: function(filter, iterator, context) {
+ iterator = iterator || Prototype.K;
+ var results = [];
+
+ if (Object.isString(filter))
+ filter = new RegExp(filter);
+
+ this.each(function(value, index) {
+ if (filter.match(value))
+ results.push(iterator.call(context, value, index));
+ });
+ return results;
+ },
+
+ include: function(object) {
+ if (Object.isFunction(this.indexOf))
+ if (this.indexOf(object) != -1) return true;
+
+ var found = false;
+ this.each(function(value) {
+ if (value == object) {
+ found = true;
+ throw $break;
+ }
+ });
+ return found;
+ },
+
+ inGroupsOf: function(number, fillWith) {
+ fillWith = Object.isUndefined(fillWith) ? null : fillWith;
+ return this.eachSlice(number, function(slice) {
+ while(slice.length < number) slice.push(fillWith);
+ return slice;
+ });
+ },
+
+ inject: function(memo, iterator, context) {
+ this.each(function(value, index) {
+ memo = iterator.call(context, memo, value, index);
+ });
+ return memo;
+ },
+
+ invoke: function(method) {
+ var args = $A(arguments).slice(1);
+ return this.map(function(value) {
+ return value[method].apply(value, args);
+ });
+ },
+
+ max: function(iterator, context) {
+ iterator = iterator || Prototype.K;
+ var result;
+ this.each(function(value, index) {
+ value = iterator.call(context, value, index);
+ if (result == null || value >= result)
+ result = value;
+ });
+ return result;
+ },
+
+ min: function(iterator, context) {
+ iterator = iterator || Prototype.K;
+ var result;
+ this.each(function(value, index) {
+ value = iterator.call(context, value, index);
+ if (result == null || value < result)
+ result = value;
+ });
+ return result;
+ },
+
+ partition: function(iterator, context) {
+ iterator = iterator || Prototype.K;
+ var trues = [], falses = [];
+ this.each(function(value, index) {
+ (iterator.call(context, value, index) ?
+ trues : falses).push(value);
+ });
+ return [trues, falses];
+ },
+
+ pluck: function(property) {
+ var results = [];
+ this.each(function(value) {
+ results.push(value[property]);
+ });
+ return results;
+ },
+
+ reject: function(iterator, context) {
+ var results = [];
+ this.each(function(value, index) {
+ if (!iterator.call(context, value, index))
+ results.push(value);
+ });
+ return results;
+ },
+
+ sortBy: function(iterator, context) {
+ return this.map(function(value, index) {
+ return {
+ value: value,
+ criteria: iterator.call(context, value, index)
+ };
+ }).sort(function(left, right) {
+ var a = left.criteria, b = right.criteria;
+ return a < b ? -1 : a > b ? 1 : 0;
+ }).pluck('value');
+ },
+
+ toArray: function() {
+ return this.map();
+ },
+
+ zip: function() {
+ var iterator = Prototype.K, args = $A(arguments);
+ if (Object.isFunction(args.last()))
+ iterator = args.pop();
+
+ var collections = [this].concat(args).map($A);
+ return this.map(function(value, index) {
+ return iterator(collections.pluck(index));
+ });
+ },
+
+ size: function() {
+ return this.toArray().length;
+ },
+
+ inspect: function() {
+ return '#<Enumerable:' + this.toArray().inspect() + '>';
+ }
+};
+
+Object.extend(Enumerable, {
+ map: Enumerable.collect,
+ find: Enumerable.detect,
+ select: Enumerable.findAll,
+ filter: Enumerable.findAll,
+ member: Enumerable.include,
+ entries: Enumerable.toArray,
+ every: Enumerable.all,
+ some: Enumerable.any
+});
+function $A(iterable) {
+ if (!iterable) return [];
+ if (iterable.toArray) return iterable.toArray();
+ var length = iterable.length || 0, results = new Array(length);
+ while (length--) results[length] = iterable[length];
+ return results;
+}
+
+if (Prototype.Browser.WebKit) {
+ $A = function(iterable) {
+ if (!iterable) return [];
+ // In Safari, only use the `toArray` method if it's not a NodeList.
+ // A NodeList is a function, has an function `item` property, and a numeric
+ // `length` property. Adapted from Google Doctype.
+ if (!(typeof iterable === 'function' && typeof iterable.length ===
+ 'number' && typeof iterable.item === 'function') && iterable.toArray)
+ return iterable.toArray();
+ var length = iterable.length || 0, results = new Array(length);
+ while (length--) results[length] = iterable[length];
+ return results;
+ };
+}
+
+Array.from = $A;
+
+Object.extend(Array.prototype, Enumerable);
+
+if (!Array.prototype._reverse) Array.prototype._reverse = Array.prototype.reverse;
+
+Object.extend(Array.prototype, {
+ _each: function(iterator) {
+ for (var i = 0, length = this.length; i < length; i++)
+ iterator(this[i]);
+ },
+
+ clear: function() {
+ this.length = 0;
+ return this;
+ },
+
+ first: function() {
+ return this[0];
+ },
+
+ last: function() {
+ return this[this.length - 1];
+ },
+
+ compact: function() {
+ return this.select(function(value) {
+ return value != null;
+ });
+ },
+
+ flatten: function() {
+ return this.inject([], function(array, value) {
+ return array.concat(Object.isArray(value) ?
+ value.flatten() : [value]);
+ });
+ },
+
+ without: function() {
+ var values = $A(arguments);
+ return this.select(function(value) {
+ return !values.include(value);
+ });
+ },
+
+ reverse: function(inline) {
+ return (inline !== false ? this : this.toArray())._reverse();
+ },
+
+ reduce: function() {
+ return this.length > 1 ? this : this[0];
+ },
+
+ uniq: function(sorted) {
+ return this.inject([], function(array, value, index) {
+ if (0 == index || (sorted ? array.last() != value : !array.include(value)))
+ array.push(value);
+ return array;
+ });
+ },
+
+ intersect: function(array) {
+ return this.uniq().findAll(function(item) {
+ return array.detect(function(value) { return item === value });
+ });
+ },
+
+ clone: function() {
+ return [].concat(this);
+ },
+
+ size: function() {
+ return this.length;
+ },
+
+ inspect: function() {
+ return '[' + this.map(Object.inspect).join(', ') + ']';
+ },
+
+ toJSON: function() {
+ var results = [];
+ this.each(function(object) {
+ var value = Object.toJSON(object);
+ if (!Object.isUndefined(value)) results.push(value);
+ });
+ return '[' + results.join(', ') + ']';
+ }
+});
+
+// use native browser JS 1.6 implementation if available
+if (Object.isFunction(Array.prototype.forEach))
+ Array.prototype._each = Array.prototype.forEach;
+
+if (!Array.prototype.indexOf) Array.prototype.indexOf = function(item, i) {
+ i || (i = 0);
+ var length = this.length;
+ if (i < 0) i = length + i;
+ for (; i < length; i++)
+ if (this[i] === item) return i;
+ return -1;
+};
+
+if (!Array.prototype.lastIndexOf) Array.prototype.lastIndexOf = function(item, i) {
+ i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1;
+ var n = this.slice(0, i).reverse().indexOf(item);
+ return (n < 0) ? n : i - n - 1;
+};
+
+Array.prototype.toArray = Array.prototype.clone;
+
+function $w(string) {
+ if (!Object.isString(string)) return [];
+ string = string.strip();
+ return string ? string.split(/\s+/) : [];
+}
+
+if (Prototype.Browser.Opera){
+ Array.prototype.concat = function() {
+ var array = [];
+ for (var i = 0, length = this.length; i < length; i++) array.push(this[i]);
+ for (var i = 0, length = arguments.length; i < length; i++) {
+ if (Object.isArray(arguments[i])) {
+ for (var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++)
+ array.push(arguments[i][j]);
+ } else {
+ array.push(arguments[i]);
+ }
+ }
+ return array;
+ };
+}
+Object.extend(Number.prototype, {
+ toColorPart: function() {
+ return this.toPaddedString(2, 16);
+ },
+
+ succ: function() {
+ return this + 1;
+ },
+
+ times: function(iterator, context) {
+ $R(0, this, true).each(iterator, context);
+ return this;
+ },
+
+ toPaddedString: function(length, radix) {
+ var string = this.toString(radix || 10);
+ return '0'.times(length - string.length) + string;
+ },
+
+ toJSON: function() {
+ return isFinite(this) ? this.toString() : 'null';
+ }
+});
+
+$w('abs round ceil floor').each(function(method){
+ Number.prototype[method] = Math[method].methodize();
+});
+function $H(object) {
+ return new Hash(object);
+};
+
+var Hash = Class.create(Enumerable, (function() {
+
+ function toQueryPair(key, value) {
+ if (Object.isUndefined(value)) return key;
+ return key + '=' + encodeURIComponent(String.interpret(value));
+ }
+
+ return {
+ initialize: function(object) {
+ this._object = Object.isHash(object) ? object.toObject() : Object.clone(object);
+ },
+
+ _each: function(iterator) {
+ for (var key in this._object) {
+ var value = this._object[key], pair = [key, value];
+ pair.key = key;
+ pair.value = value;
+ iterator(pair);
+ }
+ },
+
+ set: function(key, value) {
+ return this._object[key] = value;
+ },
+
+ get: function(key) {
+ // simulating poorly supported hasOwnProperty
+ if (this._object[key] !== Object.prototype[key])
+ return this._object[key];
+ },
+
+ unset: function(key) {
+ var value = this._object[key];
+ delete this._object[key];
+ return value;
+ },
+
+ toObject: function() {
+ return Object.clone(this._object);
+ },
+
+ keys: function() {
+ return this.pluck('key');
+ },
+
+ values: function() {
+ return this.pluck('value');
+ },
+
+ index: function(value) {
+ var match = this.detect(function(pair) {
+ return pair.value === value;
+ });
+ return match && match.key;
+ },
+
+ merge: function(object) {
+ return this.clone().update(object);
+ },
+
+ update: function(object) {
+ return new Hash(object).inject(this, function(result, pair) {
+ result.set(pair.key, pair.value);
+ return result;
+ });
+ },
+
+ toQueryString: function() {
+ return this.inject([], function(results, pair) {
+ var key = encodeURIComponent(pair.key), values = pair.value;
+
+ if (values && typeof values == 'object') {
+ if (Object.isArray(values))
+ return results.concat(values.map(toQueryPair.curry(key)));
+ } else results.push(toQueryPair(key, values));
+ return results;
+ }).join('&');
+ },
+
+ inspect: function() {
+ return '#<Hash:{' + this.map(function(pair) {
+ return pair.map(Object.inspect).join(': ');
+ }).join(', ') + '}>';
+ },
+
+ toJSON: function() {
+ return Object.toJSON(this.toObject());
+ },
+
+ clone: function() {
+ return new Hash(this);
+ }
+ }
+})());
+
+Hash.prototype.toTemplateReplacements = Hash.prototype.toObject;
+Hash.from = $H;
+var ObjectRange = Class.create(Enumerable, {
+ initialize: function(start, end, exclusive) {
+ this.start = start;
+ this.end = end;
+ this.exclusive = exclusive;
+ },
+
+ _each: function(iterator) {
+ var value = this.start;
+ while (this.include(value)) {
+ iterator(value);
+ value = value.succ();
+ }
+ },
+
+ include: function(value) {
+ if (value < this.start)
+ return false;
+ if (this.exclusive)
+ return value < this.end;
+ return value <= this.end;
+ }
+});
+
+var $R = function(start, end, exclusive) {
+ return new ObjectRange(start, end, exclusive);
+};
+
+var Ajax = {
+ getTransport: function() {
+ return Try.these(
+ function() {return new XMLHttpRequest()},
+ function() {return new ActiveXObject('Msxml2.XMLHTTP')},
+ function() {return new ActiveXObject('Microsoft.XMLHTTP')}
+ ) || false;
+ },
+
+ activeRequestCount: 0
+};
+
+Ajax.Responders = {
+ responders: [],
+
+ _each: function(iterator) {
+ this.responders._each(iterator);
+ },
+
+ register: function(responder) {
+ if (!this.include(responder))
+ this.responders.push(responder);
+ },
+
+ unregister: function(responder) {
+ this.responders = this.responders.without(responder);
+ },
+
+ dispatch: function(callback, request, transport, json) {
+ this.each(function(responder) {
+ if (Object.isFunction(responder[callback])) {
+ try {
+ responder[callback].apply(responder, [request, transport, json]);
+ } catch (e) { }
+ }
+ });
+ }
+};
+
+Object.extend(Ajax.Responders, Enumerable);
+
+Ajax.Responders.register({
+ onCreate: function() { Ajax.activeRequestCount++ },
+ onComplete: function() { Ajax.activeRequestCount-- }
+});
+
+Ajax.Base = Class.create({
+ initialize: function(options) {
+ this.options = {
+ method: 'post',
+ asynchronous: true,
+ contentType: 'application/x-www-form-urlencoded',
+ encoding: 'UTF-8',
+ parameters: '',
+ evalJSON: true,
+ evalJS: true
+ };
+ Object.extend(this.options, options || { });
+
+ this.options.method = this.options.method.toLowerCase();
+
+ if (Object.isString(this.options.parameters))
+ this.options.parameters = this.options.parameters.toQueryParams();
+ else if (Object.isHash(this.options.parameters))
+ this.options.parameters = this.options.parameters.toObject();
+ }
+});
+
+Ajax.Request = Class.create(Ajax.Base, {
+ _complete: false,
+
+ initialize: function($super, url, options) {
+ $super(options);
+ this.transport = Ajax.getTransport();
+ this.request(url);
+ },
+
+ request: function(url) {
+ this.url = url;
+ this.method = this.options.method;
+ var params = Object.clone(this.options.parameters);
+
+ if (!['get', 'post'].include(this.method)) {
+ // simulate other verbs over post
+ params['_method'] = this.method;
+ this.method = 'post';
+ }
+
+ this.parameters = params;
+
+ if (params = Object.toQueryString(params)) {
+ // when GET, append parameters to URL
+ if (this.method == 'get')
+ this.url += (this.url.include('?') ? '&' : '?') + params;
+ else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent))
+ params += '&_=';
+ }
+
+ try {
+ var response = new Ajax.Response(this);
+ if (this.options.onCreate) this.options.onCreate(response);
+ Ajax.Responders.dispatch('onCreate', this, response);
+
+ this.transport.open(this.method.toUpperCase(), this.url,
+ this.options.asynchronous);
+
+ if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1);
+
+ this.transport.onreadystatechange = this.onStateChange.bind(this);
+ this.setRequestHeaders();
+
+ this.body = this.method == 'post' ? (this.options.postBody || params) : null;
+ this.transport.send(this.body);
+
+ /* Force Firefox to handle ready state 4 for synchronous requests */
+ if (!this.options.asynchronous && this.transport.overrideMimeType)
+ this.onStateChange();
+
+ }
+ catch (e) {
+ this.dispatchException(e);
+ }
+ },
+
+ onStateChange: function() {
+ var readyState = this.transport.readyState;
+ if (readyState > 1 && !((readyState == 4) && this._complete))
+ this.respondToReadyState(this.transport.readyState);
+ },
+
+ setRequestHeaders: function() {
+ var headers = {
+ 'X-Requested-With': 'XMLHttpRequest',
+ 'X-Prototype-Version': Prototype.Version,
+ 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
+ };
+
+ if (this.method == 'post') {
+ headers['Content-type'] = this.options.contentType +
+ (this.options.encoding ? '; charset=' + this.options.encoding : '');
+
+ /* Force "Connection: close" for older Mozilla browsers to work
+ * around a bug where XMLHttpRequest sends an incorrect
+ * Content-length header. See Mozilla Bugzilla #246651.
+ */
+ if (this.transport.overrideMimeType &&
+ (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005)
+ headers['Connection'] = 'close';
+ }
+
+ // user-defined headers
+ if (typeof this.options.requestHeaders == 'object') {
+ var extras = this.options.requestHeaders;
+
+ if (Object.isFunction(extras.push))
+ for (var i = 0, length = extras.length; i < length; i += 2)
+ headers[extras[i]] = extras[i+1];
+ else
+ $H(extras).each(function(pair) { headers[pair.key] = pair.value });
+ }
+
+ for (var name in headers)
+ this.transport.setRequestHeader(name, headers[name]);
+ },
+
+ success: function() {
+ var status = this.getStatus();
+ return !status || (status >= 200 && status < 300);
+ },
+
+ getStatus: function() {
+ try {
+ return this.transport.status || 0;
+ } catch (e) { return 0 }
+ },
+
+ respondToReadyState: function(readyState) {
+ var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this);
+
+ if (state == 'Complete') {
+ try {
+ this._complete = true;
+ (this.options['on' + response.status]
+ || this.options['on' + (this.success() ? 'Success' : 'Failure')]
+ || Prototype.emptyFunction)(response, response.headerJSON);
+ } catch (e) {
+ this.dispatchException(e);
+ }
+
+ var contentType = response.getHeader('Content-type');
+ if (this.options.evalJS == 'force'
+ || (this.options.evalJS && this.isSameOrigin() && contentType
+ && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i)))
+ this.evalResponse();
+ }
+
+ try {
+ (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON);
+ Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON);
+ } catch (e) {
+ this.dispatchException(e);
+ }
+
+ if (state == 'Complete') {
+ // avoid memory leak in MSIE: clean up
+ this.transport.onreadystatechange = Prototype.emptyFunction;
+ }
+ },
+
+ isSameOrigin: function() {
+ var m = this.url.match(/^\s*https?:\/\/[^\/]*/);
+ return !m || (m[0] == '#{protocol}//#{domain}#{port}'.interpolate({
+ protocol: location.protocol,
+ domain: document.domain,
+ port: location.port ? ':' + location.port : ''
+ }));
+ },
+
+ getHeader: function(name) {
+ try {
+ return this.transport.getResponseHeader(name) || null;
+ } catch (e) { return null }
+ },
+
+ evalResponse: function() {
+ try {
+ return eval((this.transport.responseText || '').unfilterJSON());
+ } catch (e) {
+ this.dispatchException(e);
+ }
+ },
+
+ dispatchException: function(exception) {
+ (this.options.onException || Prototype.emptyFunction)(this, exception);
+ Ajax.Responders.dispatch('onException', this, exception);
+ }
+});
+
+Ajax.Request.Events =
+ ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
+
+Ajax.Response = Class.create({
+ initialize: function(request){
+ this.request = request;
+ var transport = this.transport = request.transport,
+ readyState = this.readyState = transport.readyState;
+
+ if((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) {
+ this.status = this.getStatus();
+ this.statusText = this.getStatusText();
+ this.responseText = String.interpret(transport.responseText);
+ this.headerJSON = this._getHeaderJSON();
+ }
+
+ if(readyState == 4) {
+ var xml = transport.responseXML;
+ this.responseXML = Object.isUndefined(xml) ? null : xml;
+ this.responseJSON = this._getResponseJSON();
+ }
+ },
+
+ status: 0,
+ statusText: '',
+
+ getStatus: Ajax.Request.prototype.getStatus,
+
+ getStatusText: function() {
+ try {
+ return this.transport.statusText || '';
+ } catch (e) { return '' }
+ },
+
+ getHeader: Ajax.Request.prototype.getHeader,
+
+ getAllHeaders: function() {
+ try {
+ return this.getAllResponseHeaders();
+ } catch (e) { return null }
+ },
+
+ getResponseHeader: function(name) {
+ return this.transport.getResponseHeader(name);
+ },
+
+ getAllResponseHeaders: function() {
+ return this.transport.getAllResponseHeaders();
+ },
+
+ _getHeaderJSON: function() {
+ var json = this.getHeader('X-JSON');
+ if (!json) return null;
+ json = decodeURIComponent(escape(json));
+ try {
+ return json.evalJSON(this.request.options.sanitizeJSON ||
+ !this.request.isSameOrigin());
+ } catch (e) {
+ this.request.dispatchException(e);
+ }
+ },
+
+ _getResponseJSON: function() {
+ var options = this.request.options;
+ if (!options.evalJSON || (options.evalJSON != 'force' &&
+ !(this.getHeader('Content-type') || '').include('application/json')) ||
+ this.responseText.blank())
+ return null;
+ try {
+ return this.responseText.evalJSON(options.sanitizeJSON ||
+ !this.request.isSameOrigin());
+ } catch (e) {
+ this.request.dispatchException(e);
+ }
+ }
+});
+
+Ajax.Updater = Class.create(Ajax.Request, {
+ initialize: function($super, container, url, options) {
+ this.container = {
+ success: (container.success || container),
+ failure: (container.failure || (container.success ? null : container))
+ };
+
+ options = Object.clone(options);
+ var onComplete = options.onComplete;
+ options.onComplete = (function(response, json) {
+ this.updateContent(response.responseText);
+ if (Object.isFunction(onComplete)) onComplete(response, json);
+ }).bind(this);
+
+ $super(url, options);
+ },
+
+ updateContent: function(responseText) {
+ var receiver = this.container[this.success() ? 'success' : 'failure'],
+ options = this.options;
+
+ if (!options.evalScripts) responseText = responseText.stripScripts();
+
+ if (receiver = $(receiver)) {
+ if (options.insertion) {
+ if (Object.isString(options.insertion)) {
+ var insertion = { }; insertion[options.insertion] = responseText;
+ receiver.insert(insertion);
+ }
+ else options.insertion(receiver, responseText);
+ }
+ else receiver.update(responseText);
+ }
+ }
+});
+
+Ajax.PeriodicalUpdater = Class.create(Ajax.Base, {
+ initialize: function($super, container, url, options) {
+ $super(options);
+ this.onComplete = this.options.onComplete;
+
+ this.frequency = (this.options.frequency || 2);
+ this.decay = (this.options.decay || 1);
+
+ this.updater = { };
+ this.container = container;
+ this.url = url;
+
+ this.start();
+ },
+
+ start: function() {
+ this.options.onComplete = this.updateComplete.bind(this);
+ this.onTimerEvent();
+ },
+
+ stop: function() {
+ this.updater.options.onComplete = undefined;
+ clearTimeout(this.timer);
+ (this.onComplete || Prototype.emptyFunction).apply(this, arguments);
+ },
+
+ updateComplete: function(response) {
+ if (this.options.decay) {
+ this.decay = (response.responseText == this.lastText ?
+ this.decay * this.options.decay : 1);
+
+ this.lastText = response.responseText;
+ }
+ this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency);
+ },
+
+ onTimerEvent: function() {
+ this.updater = new Ajax.Updater(this.container, this.url, this.options);
+ }
+});
+function $(element) {
+ if (arguments.length > 1) {
+ for (var i = 0, elements = [], length = arguments.length; i < length; i++)
+ elements.push($(arguments[i]));
+ return elements;
+ }
+ if (Object.isString(element))
+ element = document.getElementById(element);
+ return Element.extend(element);
+}
+
+if (Prototype.BrowserFeatures.XPath) {
+ document._getElementsByXPath = function(expression, parentElement) {
+ var results = [];
+ var query = document.evaluate(expression, $(parentElement) || document,
+ null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
+ for (var i = 0, length = query.snapshotLength; i < length; i++)
+ results.push(Element.extend(query.snapshotItem(i)));
+ return results;
+ };
+}
+
+/*--------------------------------------------------------------------------*/
+
+if (!window.Node) var Node = { };
+
+if (!Node.ELEMENT_NODE) {
+ // DOM level 2 ECMAScript Language Binding
+ Object.extend(Node, {
+ ELEMENT_NODE: 1,
+ ATTRIBUTE_NODE: 2,
+ TEXT_NODE: 3,
+ CDATA_SECTION_NODE: 4,
+ ENTITY_REFERENCE_NODE: 5,
+ ENTITY_NODE: 6,
+ PROCESSING_INSTRUCTION_NODE: 7,
+ COMMENT_NODE: 8,
+ DOCUMENT_NODE: 9,
+ DOCUMENT_TYPE_NODE: 10,
+ DOCUMENT_FRAGMENT_NODE: 11,
+ NOTATION_NODE: 12
+ });
+}
+
+(function() {
+ var element = this.Element;
+ this.Element = function(tagName, attributes) {
+ attributes = attributes || { };
+ tagName = tagName.toLowerCase();
+ var cache = Element.cache;
+ if (Prototype.Browser.IE && attributes.name) {
+ tagName = '<' + tagName + ' name="' + attributes.name + '">';
+ delete attributes.name;
+ return Element.writeAttribute(document.createElement(tagName), attributes);
+ }
+ if (!cache[tagName]) cache[tagName] = Element.extend(document.createElement(tagName));
+ return Element.writeAttribute(cache[tagName].cloneNode(false), attributes);
+ };
+ Object.extend(this.Element, element || { });
+ if (element) this.Element.prototype = element.prototype;
+}).call(window);
+
+Element.cache = { };
+
+Element.Methods = {
+ visible: function(element) {
+ return $(element).style.display != 'none';
+ },
+
+ toggle: function(element) {
+ element = $(element);
+ Element[Element.visible(element) ? 'hide' : 'show'](element);
+ return element;
+ },
+
+ hide: function(element) {
+ element = $(element);
+ element.style.display = 'none';
+ return element;
+ },
+
+ show: function(element) {
+ element = $(element);
+ element.style.display = '';
+ return element;
+ },
+
+ remove: function(element) {
+ element = $(element);
+ element.parentNode.removeChild(element);
+ return element;
+ },
+
+ update: function(element, content) {
+ element = $(element);
+ if (content && content.toElement) content = content.toElement();
+ if (Object.isElement(content)) return element.update().insert(content);
+ content = Object.toHTML(content);
+ element.innerHTML = content.stripScripts();
+ content.evalScripts.bind(content).defer();
+ return element;
+ },
+
+ replace: function(element, content) {
+ element = $(element);
+ if (content && content.toElement) content = content.toElement();
+ else if (!Object.isElement(content)) {
+ content = Object.toHTML(content);
+ var range = element.ownerDocument.createRange();
+ range.selectNode(element);
+ content.evalScripts.bind(content).defer();
+ content = range.createContextualFragment(content.stripScripts());
+ }
+ element.parentNode.replaceChild(content, element);
+ return element;
+ },
+
+ insert: function(element, insertions) {
+ element = $(element);
+
+ if (Object.isString(insertions) || Object.isNumber(insertions) ||
+ Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML)))
+ insertions = {bottom:insertions};
+
+ var content, insert, tagName, childNodes;
+
+ for (var position in insertions) {
+ content = insertions[position];
+ position = position.toLowerCase();
+ insert = Element._insertionTranslations[position];
+
+ if (content && content.toElement) content = content.toElement();
+ if (Object.isElement(content)) {
+ insert(element, content);
+ continue;
+ }
+
+ content = Object.toHTML(content);
+
+ tagName = ((position == 'before' || position == 'after')
+ ? element.parentNode : element).tagName.toUpperCase();
+
+ childNodes = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
+
+ if (position == 'top' || position == 'after') childNodes.reverse();
+ childNodes.each(insert.curry(element));
+
+ content.evalScripts.bind(content).defer();
+ }
+
+ return element;
+ },
+
+ wrap: function(element, wrapper, attributes) {
+ element = $(element);
+ if (Object.isElement(wrapper))
+ $(wrapper).writeAttribute(attributes || { });
+ else if (Object.isString(wrapper)) wrapper = new Element(wrapper, attributes);
+ else wrapper = new Element('div', wrapper);
+ if (element.parentNode)
+ element.parentNode.replaceChild(wrapper, element);
+ wrapper.appendChild(element);
+ return wrapper;
+ },
+
+ inspect: function(element) {
+ element = $(element);
+ var result = '<' + element.tagName.toLowerCase();
+ $H({'id': 'id', 'className': 'class'}).each(function(pair) {
+ var property = pair.first(), attribute = pair.last();
+ var value = (element[property] || '').toString();
+ if (value) result += ' ' + attribute + '=' + value.inspect(true);
+ });
+ return result + '>';
+ },
+
+ recursivelyCollect: function(element, property) {
+ element = $(element);
+ var elements = [];
+ while (element = element[property])
+ if (element.nodeType == 1)
+ elements.push(Element.extend(element));
+ return elements;
+ },
+
+ ancestors: function(element) {
+ return $(element).recursivelyCollect('parentNode');
+ },
+
+ descendants: function(element) {
+ return $(element).select("*");
+ },
+
+ firstDescendant: function(element) {
+ element = $(element).firstChild;
+ while (element && element.nodeType != 1) element = element.nextSibling;
+ return $(element);
+ },
+
+ immediateDescendants: function(element) {
+ if (!(element = $(element).firstChild)) return [];
+ while (element && element.nodeType != 1) element = element.nextSibling;
+ if (element) return [element].concat($(element).nextSiblings());
+ return [];
+ },
+
+ previousSiblings: function(element) {
+ return $(element).recursivelyCollect('previousSibling');
+ },
+
+ nextSiblings: function(element) {
+ return $(element).recursivelyCollect('nextSibling');
+ },
+
+ siblings: function(element) {
+ element = $(element);
+ return element.previousSiblings().reverse().concat(element.nextSiblings());
+ },
+
+ match: function(element, selector) {
+ if (Object.isString(selector))
+ selector = new Selector(selector);
+ return selector.match($(element));
+ },
+
+ up: function(element, expression, index) {
+ element = $(element);
+ if (arguments.length == 1) return $(element.parentNode);
+ var ancestors = element.ancestors();
+ return Object.isNumber(expression) ? ancestors[expression] :
+ Selector.findElement(ancestors, expression, index);
+ },
+
+ down: function(element, expression, index) {
+ element = $(element);
+ if (arguments.length == 1) return element.firstDescendant();
+ return Object.isNumber(expression) ? element.descendants()[expression] :
+ Element.select(element, expression)[index || 0];
+ },
+
+ previous: function(element, expression, index) {
+ element = $(element);
+ if (arguments.length == 1) return $(Selector.handlers.previousElementSibling(element));
+ var previousSiblings = element.previousSiblings();
+ return Object.isNumber(expression) ? previousSiblings[expression] :
+ Selector.findElement(previousSiblings, expression, index);
+ },
+
+ next: function(element, expression, index) {
+ element = $(element);
+ if (arguments.length == 1) return $(Selector.handlers.nextElementSibling(element));
+ var nextSiblings = element.nextSiblings();
+ return Object.isNumber(expression) ? nextSiblings[expression] :
+ Selector.findElement(nextSiblings, expression, index);
+ },
+
+ select: function() {
+ var args = $A(arguments), element = $(args.shift());
+ return Selector.findChildElements(element, args);
+ },
+
+ adjacent: function() {
+ var args = $A(arguments), element = $(args.shift());
+ return Selector.findChildElements(element.parentNode, args).without(element);
+ },
+
+ identify: function(element) {
+ element = $(element);
+ var id = element.readAttribute('id'), self = arguments.callee;
+ if (id) return id;
+ do { id = 'anonymous_element_' + self.counter++ } while ($(id));
+ element.writeAttribute('id', id);
+ return id;
+ },
+
+ readAttribute: function(element, name) {
+ element = $(element);
+ if (Prototype.Browser.IE) {
+ var t = Element._attributeTranslations.read;
+ if (t.values[name]) return t.values[name](element, name);
+ if (t.names[name]) name = t.names[name];
+ if (name.include(':')) {
+ return (!element.attributes || !element.attributes[name]) ? null :
+ element.attributes[name].value;
+ }
+ }
+ return element.getAttribute(name);
+ },
+
+ writeAttribute: function(element, name, value) {
+ element = $(element);
+ var attributes = { }, t = Element._attributeTranslations.write;
+
+ if (typeof name == 'object') attributes = name;
+ else attributes[name] = Object.isUndefined(value) ? true : value;
+
+ for (var attr in attributes) {
+ name = t.names[attr] || attr;
+ value = attributes[attr];
+ if (t.values[attr]) name = t.values[attr](element, value);
+ if (value === false || value === null)
+ element.removeAttribute(name);
+ else if (value === true)
+ element.setAttribute(name, name);
+ else element.setAttribute(name, value);
+ }
+ return element;
+ },
+
+ getHeight: function(element) {
+ return $(element).getDimensions().height;
+ },
+
+ getWidth: function(element) {
+ return $(element).getDimensions().width;
+ },
+
+ classNames: function(element) {
+ return new Element.ClassNames(element);
+ },
+
+ hasClassName: function(element, className) {
+ if (!(element = $(element))) return;
+ var elementClassName = element.className;
+ return (elementClassName.length > 0 && (elementClassName == className ||
+ new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName)));
+ },
+
+ addClassName: function(element, className) {
+ if (!(element = $(element))) return;
+ if (!element.hasClassName(className))
+ element.className += (element.className ? ' ' : '') + className;
+ return element;
+ },
+
+ removeClassName: function(element, className) {
+ if (!(element = $(element))) return;
+ element.className = element.className.replace(
+ new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip();
+ return element;
+ },
+
+ toggleClassName: function(element, className) {
+ if (!(element = $(element))) return;
+ return element[element.hasClassName(className) ?
+ 'removeClassName' : 'addClassName'](className);
+ },
+
+ // removes whitespace-only text node children
+ cleanWhitespace: function(element) {
+ element = $(element);
+ var node = element.firstChild;
+ while (node) {
+ var nextNode = node.nextSibling;
+ if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
+ element.removeChild(node);
+ node = nextNode;
+ }
+ return element;
+ },
+
+ empty: function(element) {
+ return $(element).innerHTML.blank();
+ },
+
+ descendantOf: function(element, ancestor) {
+ element = $(element), ancestor = $(ancestor);
+
+ if (element.compareDocumentPosition)
+ return (element.compareDocumentPosition(ancestor) & 8) === 8;
+
+ if (ancestor.contains)
+ return ancestor.contains(element) && ancestor !== element;
+
+ while (element = element.parentNode)
+ if (element == ancestor) return true;
+
+ return false;
+ },
+
+ scrollTo: function(element) {
+ element = $(element);
+ var pos = element.cumulativeOffset();
+ window.scrollTo(pos[0], pos[1]);
+ return element;
+ },
+
+ getStyle: function(element, style) {
+ element = $(element);
+ style = style == 'float' ? 'cssFloat' : style.camelize();
+ var value = element.style[style];
+ if (!value || value == 'auto') {
+ var css = document.defaultView.getComputedStyle(element, null);
+ value = css ? css[style] : null;
+ }
+ if (style == 'opacity') return value ? parseFloat(value) : 1.0;
+ return value == 'auto' ? null : value;
+ },
+
+ getOpacity: function(element) {
+ return $(element).getStyle('opacity');
+ },
+
+ setStyle: function(element, styles) {
+ element = $(element);
+ var elementStyle = element.style, match;
+ if (Object.isString(styles)) {
+ element.style.cssText += ';' + styles;
+ return styles.include('opacity') ?
+ element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : element;
+ }
+ for (var property in styles)
+ if (property == 'opacity') element.setOpacity(styles[property]);
+ else
+ elementStyle[(property == 'float' || property == 'cssFloat') ?
+ (Object.isUndefined(elementStyle.styleFloat) ? 'cssFloat' : 'styleFloat') :
+ property] = styles[property];
+
+ return element;
+ },
+
+ setOpacity: function(element, value) {
+ element = $(element);
+ element.style.opacity = (value == 1 || value === '') ? '' :
+ (value < 0.00001) ? 0 : value;
+ return element;
+ },
+
+ getDimensions: function(element) {
+ element = $(element);
+ var display = element.getStyle('display');
+ if (display != 'none' && display != null) // Safari bug
+ return {width: element.offsetWidth, height: element.offsetHeight};
+
+ // All *Width and *Height properties give 0 on elements with display none,
+ // so enable the element temporarily
+ var els = element.style;
+ var originalVisibility = els.visibility;
+ var originalPosition = els.position;
+ var originalDisplay = els.display;
+ els.visibility = 'hidden';
+ els.position = 'absolute';
+ els.display = 'block';
+ var originalWidth = element.clientWidth;
+ var originalHeight = element.clientHeight;
+ els.display = originalDisplay;
+ els.position = originalPosition;
+ els.visibility = originalVisibility;
+ return {width: originalWidth, height: originalHeight};
+ },
+
+ makePositioned: function(element) {
+ element = $(element);
+ var pos = Element.getStyle(element, 'position');
+ if (pos == 'static' || !pos) {
+ element._madePositioned = true;
+ element.style.position = 'relative';
+ // Opera returns the offset relative to the positioning context, when an
+ // element is position relative but top and left have not been defined
+ if (Prototype.Browser.Opera) {
+ element.style.top = 0;
+ element.style.left = 0;
+ }
+ }
+ return element;
+ },
+
+ undoPositioned: function(element) {
+ element = $(element);
+ if (element._madePositioned) {
+ element._madePositioned = undefined;
+ element.style.position =
+ element.style.top =
+ element.style.left =
+ element.style.bottom =
+ element.style.right = '';
+ }
+ return element;
+ },
+
+ makeClipping: function(element) {
+ element = $(element);
+ if (element._overflow) return element;
+ element._overflow = Element.getStyle(element, 'overflow') || 'auto';
+ if (element._overflow !== 'hidden')
+ element.style.overflow = 'hidden';
+ return element;
+ },
+
+ undoClipping: function(element) {
+ element = $(element);
+ if (!element._overflow) return element;
+ element.style.overflow = element._overflow == 'auto' ? '' : element._overflow;
+ element._overflow = null;
+ return element;
+ },
+
+ cumulativeOffset: function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+ element = element.offsetParent;
+ } while (element);
+ return Element._returnOffset(valueL, valueT);
+ },
+
+ positionedOffset: function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+ element = element.offsetParent;
+ if (element) {
+ if (element.tagName.toUpperCase() == 'BODY') break;
+ var p = Element.getStyle(element, 'position');
+ if (p !== 'static') break;
+ }
+ } while (element);
+ return Element._returnOffset(valueL, valueT);
+ },
+
+ absolutize: function(element) {
+ element = $(element);
+ if (element.getStyle('position') == 'absolute') return element;
+ // Position.prepare(); // To be done manually by Scripty when it needs it.
+
+ var offsets = element.positionedOffset();
+ var top = offsets[1];
+ var left = offsets[0];
+ var width = element.clientWidth;
+ var height = element.clientHeight;
+
+ element._originalLeft = left - parseFloat(element.style.left || 0);
+ element._originalTop = top - parseFloat(element.style.top || 0);
+ element._originalWidth = element.style.width;
+ element._originalHeight = element.style.height;
+
+ element.style.position = 'absolute';
+ element.style.top = top + 'px';
+ element.style.left = left + 'px';
+ element.style.width = width + 'px';
+ element.style.height = height + 'px';
+ return element;
+ },
+
+ relativize: function(element) {
+ element = $(element);
+ if (element.getStyle('position') == 'relative') return element;
+ // Position.prepare(); // To be done manually by Scripty when it needs it.
+
+ element.style.position = 'relative';
+ var top = parseFloat(element.style.top || 0) - (element._originalTop || 0);
+ var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);
+
+ element.style.top = top + 'px';
+ element.style.left = left + 'px';
+ element.style.height = element._originalHeight;
+ element.style.width = element._originalWidth;
+ return element;
+ },
+
+ cumulativeScrollOffset: function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.scrollTop || 0;
+ valueL += element.scrollLeft || 0;
+ element = element.parentNode;
+ } while (element);
+ return Element._returnOffset(valueL, valueT);
+ },
+
+ getOffsetParent: function(element) {
+ if (element.offsetParent) return $(element.offsetParent);
+ if (element == document.body) return $(element);
+
+ while ((element = element.parentNode) && element != document.body)
+ if (Element.getStyle(element, 'position') != 'static')
+ return $(element);
+
+ return $(document.body);
+ },
+
+ viewportOffset: function(forElement) {
+ var valueT = 0, valueL = 0;
+
+ var element = forElement;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+
+ // Safari fix
+ if (element.offsetParent == document.body &&
+ Element.getStyle(element, 'position') == 'absolute') break;
+
+ } while (element = element.offsetParent);
+
+ element = forElement;
+ do {
+ if (!Prototype.Browser.Opera || (element.tagName && (element.tagName.toUpperCase() == 'BODY'))) {
+ valueT -= element.scrollTop || 0;
+ valueL -= element.scrollLeft || 0;
+ }
+ } while (element = element.parentNode);
+
+ return Element._returnOffset(valueL, valueT);
+ },
+
+ clonePosition: function(element, source) {
+ var options = Object.extend({
+ setLeft: true,
+ setTop: true,
+ setWidth: true,
+ setHeight: true,
+ offsetTop: 0,
+ offsetLeft: 0
+ }, arguments[2] || { });
+
+ // find page position of source
+ source = $(source);
+ var p = source.viewportOffset();
+
+ // find coordinate system to use
+ element = $(element);
+ var delta = [0, 0];
+ var parent = null;
+ // delta [0,0] will do fine with position: fixed elements,
+ // position:absolute needs offsetParent deltas
+ if (Element.getStyle(element, 'position') == 'absolute') {
+ parent = element.getOffsetParent();
+ delta = parent.viewportOffset();
+ }
+
+ // correct by body offsets (fixes Safari)
+ if (parent == document.body) {
+ delta[0] -= document.body.offsetLeft;
+ delta[1] -= document.body.offsetTop;
+ }
+
+ // set position
+ if (options.setLeft) element.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px';
+ if (options.setTop) element.style.top = (p[1] - delta[1] + options.offsetTop) + 'px';
+ if (options.setWidth) element.style.width = source.offsetWidth + 'px';
+ if (options.setHeight) element.style.height = source.offsetHeight + 'px';
+ return element;
+ }
+};
+
+Element.Methods.identify.counter = 1;
+
+Object.extend(Element.Methods, {
+ getElementsBySelector: Element.Methods.select,
+ childElements: Element.Methods.immediateDescendants
+});
+
+Element._attributeTranslations = {
+ write: {
+ names: {
+ className: 'class',
+ htmlFor: 'for'
+ },
+ values: { }
+ }
+};
+
+if (Prototype.Browser.Opera) {
+ Element.Methods.getStyle = Element.Methods.getStyle.wrap(
+ function(proceed, element, style) {
+ switch (style) {
+ case 'left': case 'top': case 'right': case 'bottom':
+ if (proceed(element, 'position') === 'static') return null;
+ case 'height': case 'width':
+ // returns '0px' for hidden elements; we want it to return null
+ if (!Element.visible(element)) return null;
+
+ // returns the border-box dimensions rather than the content-box
+ // dimensions, so we subtract padding and borders from the value
+ var dim = parseInt(proceed(element, style), 10);
+
+ if (dim !== element['offset' + style.capitalize()])
+ return dim + 'px';
+
+ var properties;
+ if (style === 'height') {
+ properties = ['border-top-width', 'padding-top',
+ 'padding-bottom', 'border-bottom-width'];
+ }
+ else {
+ properties = ['border-left-width', 'padding-left',
+ 'padding-right', 'border-right-width'];
+ }
+ return properties.inject(dim, function(memo, property) {
+ var val = proceed(element, property);
+ return val === null ? memo : memo - parseInt(val, 10);
+ }) + 'px';
+ default: return proceed(element, style);
+ }
+ }
+ );
+
+ Element.Methods.readAttribute = Element.Methods.readAttribute.wrap(
+ function(proceed, element, attribute) {
+ if (attribute === 'title') return element.title;
+ return proceed(element, attribute);
+ }
+ );
+}
+
+else if (Prototype.Browser.IE) {
+ // IE doesn't report offsets correctly for static elements, so we change them
+ // to "relative" to get the values, then change them back.
+ Element.Methods.getOffsetParent = Element.Methods.getOffsetParent.wrap(
+ function(proceed, element) {
+ element = $(element);
+ // IE throws an error if element is not in document
+ try { element.offsetParent }
+ catch(e) { return $(document.body) }
+ var position = element.getStyle('position');
+ if (position !== 'static') return proceed(element);
+ element.setStyle({ position: 'relative' });
+ var value = proceed(element);
+ element.setStyle({ position: position });
+ return value;
+ }
+ );
+
+ $w('positionedOffset viewportOffset').each(function(method) {
+ Element.Methods[method] = Element.Methods[method].wrap(
+ function(proceed, element) {
+ element = $(element);
+ try { element.offsetParent }
+ catch(e) { return Element._returnOffset(0,0) }
+ var position = element.getStyle('position');
+ if (position !== 'static') return proceed(element);
+ // Trigger hasLayout on the offset parent so that IE6 reports
+ // accurate offsetTop and offsetLeft values for position: fixed.
+ var offsetParent = element.getOffsetParent();
+ if (offsetParent && offsetParent.getStyle('position') === 'fixed')
+ offsetParent.setStyle({ zoom: 1 });
+ element.setStyle({ position: 'relative' });
+ var value = proceed(element);
+ element.setStyle({ position: position });
+ return value;
+ }
+ );
+ });
+
+ Element.Methods.cumulativeOffset = Element.Methods.cumulativeOffset.wrap(
+ function(proceed, element) {
+ try { element.offsetParent }
+ catch(e) { return Element._returnOffset(0,0) }
+ return proceed(element);
+ }
+ );
+
+ Element.Methods.getStyle = function(element, style) {
+ element = $(element);
+ style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize();
+ var value = element.style[style];
+ if (!value && element.currentStyle) value = element.currentStyle[style];
+
+ if (style == 'opacity') {
+ if (value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/))
+ if (value[1]) return parseFloat(value[1]) / 100;
+ return 1.0;
+ }
+
+ if (value == 'auto') {
+ if ((style == 'width' || style == 'height') && (element.getStyle('display') != 'none'))
+ return element['offset' + style.capitalize()] + 'px';
+ return null;
+ }
+ return value;
+ };
+
+ Element.Methods.setOpacity = function(element, value) {
+ function stripAlpha(filter){
+ return filter.replace(/alpha\([^\)]*\)/gi,'');
+ }
+ element = $(element);
+ var currentStyle = element.currentStyle;
+ if ((currentStyle && !currentStyle.hasLayout) ||
+ (!currentStyle && element.style.zoom == 'normal'))
+ element.style.zoom = 1;
+
+ var filter = element.getStyle('filter'), style = element.style;
+ if (value == 1 || value === '') {
+ (filter = stripAlpha(filter)) ?
+ style.filter = filter : style.removeAttribute('filter');
+ return element;
+ } else if (value < 0.00001) value = 0;
+ style.filter = stripAlpha(filter) +
+ 'alpha(opacity=' + (value * 100) + ')';
+ return element;
+ };
+
+ Element._attributeTranslations = {
+ read: {
+ names: {
+ 'class': 'className',
+ 'for': 'htmlFor'
+ },
+ values: {
+ _getAttr: function(element, attribute) {
+ return element.getAttribute(attribute, 2);
+ },
+ _getAttrNode: function(element, attribute) {
+ var node = element.getAttributeNode(attribute);
+ return node ? node.value : "";
+ },
+ _getEv: function(element, attribute) {
+ attribute = element.getAttribute(attribute);
+ return attribute ? attribute.toString().slice(23, -2) : null;
+ },
+ _flag: function(element, attribute) {
+ return $(element).hasAttribute(attribute) ? attribute : null;
+ },
+ style: function(element) {
+ return element.style.cssText.toLowerCase();
+ },
+ title: function(element) {
+ return element.title;
+ }
+ }
+ }
+ };
+
+ Element._attributeTranslations.write = {
+ names: Object.extend({
+ cellpadding: 'cellPadding',
+ cellspacing: 'cellSpacing'
+ }, Element._attributeTranslations.read.names),
+ values: {
+ checked: function(element, value) {
+ element.checked = !!value;
+ },
+
+ style: function(element, value) {
+ element.style.cssText = value ? value : '';
+ }
+ }
+ };
+
+ Element._attributeTranslations.has = {};
+
+ $w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' +
+ 'encType maxLength readOnly longDesc frameBorder').each(function(attr) {
+ Element._attributeTranslations.write.names[attr.toLowerCase()] = attr;
+ Element._attributeTranslations.has[attr.toLowerCase()] = attr;
+ });
+
+ (function(v) {
+ Object.extend(v, {
+ href: v._getAttr,
+ src: v._getAttr,
+ type: v._getAttr,
+ action: v._getAttrNode,
+ disabled: v._flag,
+ checked: v._flag,
+ readonly: v._flag,
+ multiple: v._flag,
+ onload: v._getEv,
+ onunload: v._getEv,
+ onclick: v._getEv,
+ ondblclick: v._getEv,
+ onmousedown: v._getEv,
+ onmouseup: v._getEv,
+ onmouseover: v._getEv,
+ onmousemove: v._getEv,
+ onmouseout: v._getEv,
+ onfocus: v._getEv,
+ onblur: v._getEv,
+ onkeypress: v._getEv,
+ onkeydown: v._getEv,
+ onkeyup: v._getEv,
+ onsubmit: v._getEv,
+ onreset: v._getEv,
+ onselect: v._getEv,
+ onchange: v._getEv
+ });
+ })(Element._attributeTranslations.read.values);
+}
+
+else if (Prototype.Browser.Gecko && /rv:1\.8\.0/.test(navigator.userAgent)) {
+ Element.Methods.setOpacity = function(element, value) {
+ element = $(element);
+ element.style.opacity = (value == 1) ? 0.999999 :
+ (value === '') ? '' : (value < 0.00001) ? 0 : value;
+ return element;
+ };
+}
+
+else if (Prototype.Browser.WebKit) {
+ Element.Methods.setOpacity = function(element, value) {
+ element = $(element);
+ element.style.opacity = (value == 1 || value === '') ? '' :
+ (value < 0.00001) ? 0 : value;
+
+ if (value == 1)
+ if(element.tagName.toUpperCase() == 'IMG' && element.width) {
+ element.width++; element.width--;
+ } else try {
+ var n = document.createTextNode(' ');
+ element.appendChild(n);
+ element.removeChild(n);
+ } catch (e) { }
+
+ return element;
+ };
+
+ // Safari returns margins on body which is incorrect if the child is absolutely
+ // positioned. For performance reasons, redefine Element#cumulativeOffset for
+ // KHTML/WebKit only.
+ Element.Methods.cumulativeOffset = function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+ if (element.offsetParent == document.body)
+ if (Element.getStyle(element, 'position') == 'absolute') break;
+
+ element = element.offsetParent;
+ } while (element);
+
+ return Element._returnOffset(valueL, valueT);
+ };
+}
+
+if (Prototype.Browser.IE || Prototype.Browser.Opera) {
+ // IE and Opera are missing .innerHTML support for TABLE-related and SELECT elements
+ Element.Methods.update = function(element, content) {
+ element = $(element);
+
+ if (content && content.toElement) content = content.toElement();
+ if (Object.isElement(content)) return element.update().insert(content);
+
+ content = Object.toHTML(content);
+ var tagName = element.tagName.toUpperCase();
+
+ if (tagName in Element._insertionTranslations.tags) {
+ $A(element.childNodes).each(function(node) { element.removeChild(node) });
+ Element._getContentFromAnonymousElement(tagName, content.stripScripts())
+ .each(function(node) { element.appendChild(node) });
+ }
+ else element.innerHTML = content.stripScripts();
+
+ content.evalScripts.bind(content).defer();
+ return element;
+ };
+}
+
+if ('outerHTML' in document.createElement('div')) {
+ Element.Methods.replace = function(element, content) {
+ element = $(element);
+
+ if (content && content.toElement) content = content.toElement();
+ if (Object.isElement(content)) {
+ element.parentNode.replaceChild(content, element);
+ return element;
+ }
+
+ content = Object.toHTML(content);
+ var parent = element.parentNode, tagName = parent.tagName.toUpperCase();
+
+ if (Element._insertionTranslations.tags[tagName]) {
+ var nextSibling = element.next();
+ var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
+ parent.removeChild(element);
+ if (nextSibling)
+ fragments.each(function(node) { parent.insertBefore(node, nextSibling) });
+ else
+ fragments.each(function(node) { parent.appendChild(node) });
+ }
+ else element.outerHTML = content.stripScripts();
+
+ content.evalScripts.bind(content).defer();
+ return element;
+ };
+}
+
+Element._returnOffset = function(l, t) {
+ var result = [l, t];
+ result.left = l;
+ result.top = t;
+ return result;
+};
+
+Element._getContentFromAnonymousElement = function(tagName, html) {
+ var div = new Element('div'), t = Element._insertionTranslations.tags[tagName];
+ if (t) {
+ div.innerHTML = t[0] + html + t[1];
+ t[2].times(function() { div = div.firstChild });
+ } else div.innerHTML = html;
+ return $A(div.childNodes);
+};
+
+Element._insertionTranslations = {
+ before: function(element, node) {
+ element.parentNode.insertBefore(node, element);
+ },
+ top: function(element, node) {
+ element.insertBefore(node, element.firstChild);
+ },
+ bottom: function(element, node) {
+ element.appendChild(node);
+ },
+ after: function(element, node) {
+ element.parentNode.insertBefore(node, element.nextSibling);
+ },
+ tags: {
+ TABLE: ['<table>', '</table>', 1],
+ TBODY: ['<table><tbody>', '</tbody></table>', 2],
+ TR: ['<table><tbody><tr>', '</tr></tbody></table>', 3],
+ TD: ['<table><tbody><tr><td>', '</td></tr></tbody></table>', 4],
+ SELECT: ['<select>', '</select>', 1]
+ }
+};
+
+(function() {
+ Object.extend(this.tags, {
+ THEAD: this.tags.TBODY,
+ TFOOT: this.tags.TBODY,
+ TH: this.tags.TD
+ });
+}).call(Element._insertionTranslations);
+
+Element.Methods.Simulated = {
+ hasAttribute: function(element, attribute) {
+ attribute = Element._attributeTranslations.has[attribute] || attribute;
+ var node = $(element).getAttributeNode(attribute);
+ return !!(node && node.specified);
+ }
+};
+
+Element.Methods.ByTag = { };
+
+Object.extend(Element, Element.Methods);
+
+if (!Prototype.BrowserFeatures.ElementExtensions &&
+ document.createElement('div')['__proto__']) {
+ window.HTMLElement = { };
+ window.HTMLElement.prototype = document.createElement('div')['__proto__'];
+ Prototype.BrowserFeatures.ElementExtensions = true;
+}
+
+Element.extend = (function() {
+ if (Prototype.BrowserFeatures.SpecificElementExtensions)
+ return Prototype.K;
+
+ var Methods = { }, ByTag = Element.Methods.ByTag;
+
+ var extend = Object.extend(function(element) {
+ if (!element || element._extendedByPrototype ||
+ element.nodeType != 1 || element == window) return element;
+
+ var methods = Object.clone(Methods),
+ tagName = element.tagName.toUpperCase(), property, value;
+
+ // extend methods for specific tags
+ if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]);
+
+ for (property in methods) {
+ value = methods[property];
+ if (Object.isFunction(value) && !(property in element))
+ element[property] = value.methodize();
+ }
+
+ element._extendedByPrototype = Prototype.emptyFunction;
+ return element;
+
+ }, {
+ refresh: function() {
+ // extend methods for all tags (Safari doesn't need this)
+ if (!Prototype.BrowserFeatures.ElementExtensions) {
+ Object.extend(Methods, Element.Methods);
+ Object.extend(Methods, Element.Methods.Simulated);
+ }
+ }
+ });
+
+ extend.refresh();
+ return extend;
+})();
+
+Element.hasAttribute = function(element, attribute) {
+ if (element.hasAttribute) return element.hasAttribute(attribute);
+ return Element.Methods.Simulated.hasAttribute(element, attribute);
+};
+
+Element.addMethods = function(methods) {
+ var F = Prototype.BrowserFeatures, T = Element.Methods.ByTag;
+
+ if (!methods) {
+ Object.extend(Form, Form.Methods);
+ Object.extend(Form.Element, Form.Element.Methods);
+ Object.extend(Element.Methods.ByTag, {
+ "FORM": Object.clone(Form.Methods),
+ "INPUT": Object.clone(Form.Element.Methods),
+ "SELECT": Object.clone(Form.Element.Methods),
+ "TEXTAREA": Object.clone(Form.Element.Methods)
+ });
+ }
+
+ if (arguments.length == 2) {
+ var tagName = methods;
+ methods = arguments[1];
+ }
+
+ if (!tagName) Object.extend(Element.Methods, methods || { });
+ else {
+ if (Object.isArray(tagName)) tagName.each(extend);
+ else extend(tagName);
+ }
+
+ function extend(tagName) {
+ tagName = tagName.toUpperCase();
+ if (!Element.Methods.ByTag[tagName])
+ Element.Methods.ByTag[tagName] = { };
+ Object.extend(Element.Methods.ByTag[tagName], methods);
+ }
+
+ function copy(methods, destination, onlyIfAbsent) {
+ onlyIfAbsent = onlyIfAbsent || false;
+ for (var property in methods) {
+ var value = methods[property];
+ if (!Object.isFunction(value)) continue;
+ if (!onlyIfAbsent || !(property in destination))
+ destination[property] = value.methodize();
+ }
+ }
+
+ function findDOMClass(tagName) {
+ var klass;
+ var trans = {
+ "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph",
+ "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList",
+ "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading",
+ "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote",
+ "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION":
+ "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD":
+ "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR":
+ "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET":
+ "FrameSet", "IFRAME": "IFrame"
+ };
+ if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element';
+ if (window[klass]) return window[klass];
+ klass = 'HTML' + tagName + 'Element';
+ if (window[klass]) return window[klass];
+ klass = 'HTML' + tagName.capitalize() + 'Element';
+ if (window[klass]) return window[klass];
+
+ window[klass] = { };
+ window[klass].prototype = document.createElement(tagName)['__proto__'];
+ return window[klass];
+ }
+
+ if (F.ElementExtensions) {
+ copy(Element.Methods, HTMLElement.prototype);
+ copy(Element.Methods.Simulated, HTMLElement.prototype, true);
+ }
+
+ if (F.SpecificElementExtensions) {
+ for (var tag in Element.Methods.ByTag) {
+ var klass = findDOMClass(tag);
+ if (Object.isUndefined(klass)) continue;
+ copy(T[tag], klass.prototype);
+ }
+ }
+
+ Object.extend(Element, Element.Methods);
+ delete Element.ByTag;
+
+ if (Element.extend.refresh) Element.extend.refresh();
+ Element.cache = { };
+};
+
+document.viewport = {
+ getDimensions: function() {
+ var dimensions = { }, B = Prototype.Browser;
+ $w('width height').each(function(d) {
+ var D = d.capitalize();
+ if (B.WebKit && !document.evaluate) {
+ // Safari <3.0 needs self.innerWidth/Height
+ dimensions[d] = self['inner' + D];
+ } else if (B.Opera && parseFloat(window.opera.version()) < 9.5) {
+ // Opera <9.5 needs document.body.clientWidth/Height
+ dimensions[d] = document.body['client' + D]
+ } else {
+ dimensions[d] = document.documentElement['client' + D];
+ }
+ });
+ return dimensions;
+ },
+
+ getWidth: function() {
+ return this.getDimensions().width;
+ },
+
+ getHeight: function() {
+ return this.getDimensions().height;
+ },
+
+ getScrollOffsets: function() {
+ return Element._returnOffset(
+ window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft,
+ window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop);
+ }
+};
+/* Portions of the Selector class are derived from Jack Slocum's DomQuery,
+ * part of YUI-Ext version 0.40, distributed under the terms of an MIT-style
+ * license. Please see http://www.yui-ext.com/ for more information. */
+
+var Selector = Class.create({
+ initialize: function(expression) {
+ this.expression = expression.strip();
+
+ if (this.shouldUseSelectorsAPI()) {
+ this.mode = 'selectorsAPI';
+ } else if (this.shouldUseXPath()) {
+ this.mode = 'xpath';
+ this.compileXPathMatcher();
+ } else {
+ this.mode = "normal";
+ this.compileMatcher();
+ }
+
+ },
+
+ shouldUseXPath: function() {
+ if (!Prototype.BrowserFeatures.XPath) return false;
+
+ var e = this.expression;
+
+ // Safari 3 chokes on :*-of-type and :empty
+ if (Prototype.Browser.WebKit &&
+ (e.include("-of-type") || e.include(":empty")))
+ return false;
+
+ // XPath can't do namespaced attributes, nor can it read
+ // the "checked" property from DOM nodes
+ if ((/(\[[\w-]*?:|:checked)/).test(e))
+ return false;
+
+ return true;
+ },
+
+ shouldUseSelectorsAPI: function() {
+ if (!Prototype.BrowserFeatures.SelectorsAPI) return false;
+
+ if (!Selector._div) Selector._div = new Element('div');
+
+ // Make sure the browser treats the selector as valid. Test on an
+ // isolated element to minimize cost of this check.
+ try {
+ Selector._div.querySelector(this.expression);
+ } catch(e) {
+ return false;
+ }
+
+ return true;
+ },
+
+ compileMatcher: function() {
+ var e = this.expression, ps = Selector.patterns, h = Selector.handlers,
+ c = Selector.criteria, le, p, m;
+
+ if (Selector._cache[e]) {
+ this.matcher = Selector._cache[e];
+ return;
+ }
+
+ this.matcher = ["this.matcher = function(root) {",
+ "var r = root, h = Selector.handlers, c = false, n;"];
+
+ while (e && le != e && (/\S/).test(e)) {
+ le = e;
+ for (var i in ps) {
+ p = ps[i];
+ if (m = e.match(p)) {
+ this.matcher.push(Object.isFunction(c[i]) ? c[i](m) :
+ new Template(c[i]).evaluate(m));
+ e = e.replace(m[0], '');
+ break;
+ }
+ }
+ }
+
+ this.matcher.push("return h.unique(n);\n}");
+ eval(this.matcher.join('\n'));
+ Selector._cache[this.expression] = this.matcher;
+ },
+
+ compileXPathMatcher: function() {
+ var e = this.expression, ps = Selector.patterns,
+ x = Selector.xpath, le, m;
+
+ if (Selector._cache[e]) {
+ this.xpath = Selector._cache[e]; return;
+ }
+
+ this.matcher = ['.//*'];
+ while (e && le != e && (/\S/).test(e)) {
+ le = e;
+ for (var i in ps) {
+ if (m = e.match(ps[i])) {
+ this.matcher.push(Object.isFunction(x[i]) ? x[i](m) :
+ new Template(x[i]).evaluate(m));
+ e = e.replace(m[0], '');
+ break;
+ }
+ }
+ }
+
+ this.xpath = this.matcher.join('');
+ Selector._cache[this.expression] = this.xpath;
+ },
+
+ findElements: function(root) {
+ root = root || document;
+ var e = this.expression, results;
+
+ switch (this.mode) {
+ case 'selectorsAPI':
+ // querySelectorAll queries document-wide, then filters to descendants
+ // of the context element. That's not what we want.
+ // Add an explicit context to the selector if necessary.
+ if (root !== document) {
+ var oldId = root.id, id = $(root).identify();
+ e = "#" + id + " " + e;
+ }
+
+ results = $A(root.querySelectorAll(e)).map(Element.extend);
+ root.id = oldId;
+
+ return results;
+ case 'xpath':
+ return document._getElementsByXPath(this.xpath, root);
+ default:
+ return this.matcher(root);
+ }
+ },
+
+ match: function(element) {
+ this.tokens = [];
+
+ var e = this.expression, ps = Selector.patterns, as = Selector.assertions;
+ var le, p, m;
+
+ while (e && le !== e && (/\S/).test(e)) {
+ le = e;
+ for (var i in ps) {
+ p = ps[i];
+ if (m = e.match(p)) {
+ // use the Selector.assertions methods unless the selector
+ // is too complex.
+ if (as[i]) {
+ this.tokens.push([i, Object.clone(m)]);
+ e = e.replace(m[0], '');
+ } else {
+ // reluctantly do a document-wide search
+ // and look for a match in the array
+ return this.findElements(document).include(element);
+ }
+ }
+ }
+ }
+
+ var match = true, name, matches;
+ for (var i = 0, token; token = this.tokens[i]; i++) {
+ name = token[0], matches = token[1];
+ if (!Selector.assertions[name](element, matches)) {
+ match = false; break;
+ }
+ }
+
+ return match;
+ },
+
+ toString: function() {
+ return this.expression;
+ },
+
+ inspect: function() {
+ return "#<Selector:" + this.expression.inspect() + ">";
+ }
+});
+
+Object.extend(Selector, {
+ _cache: { },
+
+ xpath: {
+ descendant: "//*",
+ child: "/*",
+ adjacent: "/following-sibling::*[1]",
+ laterSibling: '/following-sibling::*',
+ tagName: function(m) {
+ if (m[1] == '*') return '';
+ return "[local-name()='" + m[1].toLowerCase() +
+ "' or local-name()='" + m[1].toUpperCase() + "']";
+ },
+ className: "[contains(concat(' ', @class, ' '), ' #{1} ')]",
+ id: "[@id='#{1}']",
+ attrPresence: function(m) {
+ m[1] = m[1].toLowerCase();
+ return new Template("[@#{1}]").evaluate(m);
+ },
+ attr: function(m) {
+ m[1] = m[1].toLowerCase();
+ m[3] = m[5] || m[6];
+ return new Template(Selector.xpath.operators[m[2]]).evaluate(m);
+ },
+ pseudo: function(m) {
+ var h = Selector.xpath.pseudos[m[1]];
+ if (!h) return '';
+ if (Object.isFunction(h)) return h(m);
+ return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m);
+ },
+ operators: {
+ '=': "[@#{1}='#{3}']",
+ '!=': "[@#{1}!='#{3}']",
+ '^=': "[starts-with(@#{1}, '#{3}')]",
+ '$=': "[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']",
+ '*=': "[contains(@#{1}, '#{3}')]",
+ '~=': "[contains(concat(' ', @#{1}, ' '), ' #{3} ')]",
+ '|=': "[contains(concat('-', @#{1}, '-'), '-#{3}-')]"
+ },
+ pseudos: {
+ 'first-child': '[not(preceding-sibling::*)]',
+ 'last-child': '[not(following-sibling::*)]',
+ 'only-child': '[not(preceding-sibling::* or following-sibling::*)]',
+ 'empty': "[count(*) = 0 and (count(text()) = 0)]",
+ 'checked': "[@checked]",
+ 'disabled': "[(@disabled) and (@type!='hidden')]",
+ 'enabled': "[not(@disabled) and (@type!='hidden')]",
+ 'not': function(m) {
+ var e = m[6], p = Selector.patterns,
+ x = Selector.xpath, le, v;
+
+ var exclusion = [];
+ while (e && le != e && (/\S/).test(e)) {
+ le = e;
+ for (var i in p) {
+ if (m = e.match(p[i])) {
+ v = Object.isFunction(x[i]) ? x[i](m) : new Template(x[i]).evaluate(m);
+ exclusion.push("(" + v.substring(1, v.length - 1) + ")");
+ e = e.replace(m[0], '');
+ break;
+ }
+ }
+ }
+ return "[not(" + exclusion.join(" and ") + ")]";
+ },
+ 'nth-child': function(m) {
+ return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ", m);
+ },
+ 'nth-last-child': function(m) {
+ return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ", m);
+ },
+ 'nth-of-type': function(m) {
+ return Selector.xpath.pseudos.nth("position() ", m);
+ },
+ 'nth-last-of-type': function(m) {
+ return Selector.xpath.pseudos.nth("(last() + 1 - position()) ", m);
+ },
+ 'first-of-type': function(m) {
+ m[6] = "1"; return Selector.xpath.pseudos['nth-of-type'](m);
+ },
+ 'last-of-type': function(m) {
+ m[6] = "1"; return Selector.xpath.pseudos['nth-last-of-type'](m);
+ },
+ 'only-of-type': function(m) {
+ var p = Selector.xpath.pseudos; return p['first-of-type'](m) + p['last-of-type'](m);
+ },
+ nth: function(fragment, m) {
+ var mm, formula = m[6], predicate;
+ if (formula == 'even') formula = '2n+0';
+ if (formula == 'odd') formula = '2n+1';
+ if (mm = formula.match(/^(\d+)$/)) // digit only
+ return '[' + fragment + "= " + mm[1] + ']';
+ if (mm = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
+ if (mm[1] == "-") mm[1] = -1;
+ var a = mm[1] ? Number(mm[1]) : 1;
+ var b = mm[2] ? Number(mm[2]) : 0;
+ predicate = "[((#{fragment} - #{b}) mod #{a} = 0) and " +
+ "((#{fragment} - #{b}) div #{a} >= 0)]";
+ return new Template(predicate).evaluate({
+ fragment: fragment, a: a, b: b });
+ }
+ }
+ }
+ },
+
+ criteria: {
+ tagName: 'n = h.tagName(n, r, "#{1}", c); c = false;',
+ className: 'n = h.className(n, r, "#{1}", c); c = false;',
+ id: 'n = h.id(n, r, "#{1}", c); c = false;',
+ attrPresence: 'n = h.attrPresence(n, r, "#{1}", c); c = false;',
+ attr: function(m) {
+ m[3] = (m[5] || m[6]);
+ return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}", c); c = false;').evaluate(m);
+ },
+ pseudo: function(m) {
+ if (m[6]) m[6] = m[6].replace(/"/g, '\\"');
+ return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(m);
+ },
+ descendant: 'c = "descendant";',
+ child: 'c = "child";',
+ adjacent: 'c = "adjacent";',
+ laterSibling: 'c = "laterSibling";'
+ },
+
+ patterns: {
+ // combinators must be listed first
+ // (and descendant needs to be last combinator)
+ laterSibling: /^\s*~\s*/,
+ child: /^\s*>\s*/,
+ adjacent: /^\s*\+\s*/,
+ descendant: /^\s/,
+
+ // selectors follow
+ tagName: /^\s*(\*|[\w\-]+)(\b|$)?/,
+ id: /^#([\w\-\*]+)(\b|$)/,
+ className: /^\.([\w\-\*]+)(\b|$)/,
+ pseudo:
+/^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s|[:+~>]))/,
+ attrPresence: /^\[((?:[\w]+:)?[\w]+)\]/,
+ attr: /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/
+ },
+
+ // for Selector.match and Element#match
+ assertions: {
+ tagName: function(element, matches) {
+ return matches[1].toUpperCase() == element.tagName.toUpperCase();
+ },
+
+ className: function(element, matches) {
+ return Element.hasClassName(element, matches[1]);
+ },
+
+ id: function(element, matches) {
+ return element.id === matches[1];
+ },
+
+ attrPresence: function(element, matches) {
+ return Element.hasAttribute(element, matches[1]);
+ },
+
+ attr: function(element, matches) {
+ var nodeValue = Element.readAttribute(element, matches[1]);
+ return nodeValue && Selector.operators[matches[2]](nodeValue, matches[5] || matches[6]);
+ }
+ },
+
+ handlers: {
+ // UTILITY FUNCTIONS
+ // joins two collections
+ concat: function(a, b) {
+ for (var i = 0, node; node = b[i]; i++)
+ a.push(node);
+ return a;
+ },
+
+ // marks an array of nodes for counting
+ mark: function(nodes) {
+ var _true = Prototype.emptyFunction;
+ for (var i = 0, node; node = nodes[i]; i++)
+ node._countedByPrototype = _true;
+ return nodes;
+ },
+
+ unmark: function(nodes) {
+ for (var i = 0, node; node = nodes[i]; i++)
+ node._countedByPrototype = undefined;
+ return nodes;
+ },
+
+ // mark each child node with its position (for nth calls)
+ // "ofType" flag indicates whether we're indexing for nth-of-type
+ // rather than nth-child
+ index: function(parentNode, reverse, ofType) {
+ parentNode._countedByPrototype = Prototype.emptyFunction;
+ if (reverse) {
+ for (var nodes = parentNode.childNodes, i = nodes.length - 1, j = 1; i >= 0; i--) {
+ var node = nodes[i];
+ if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++;
+ }
+ } else {
+ for (var i = 0, j = 1, nodes = parentNode.childNodes; node = nodes[i]; i++)
+ if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++;
+ }
+ },
+
+ // filters out duplicates and extends all nodes
+ unique: function(nodes) {
+ if (nodes.length == 0) return nodes;
+ var results = [], n;
+ for (var i = 0, l = nodes.length; i < l; i++)
+ if (!(n = nodes[i])._countedByPrototype) {
+ n._countedByPrototype = Prototype.emptyFunction;
+ results.push(Element.extend(n));
+ }
+ return Selector.handlers.unmark(results);
+ },
+
+ // COMBINATOR FUNCTIONS
+ descendant: function(nodes) {
+ var h = Selector.handlers;
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ h.concat(results, node.getElementsByTagName('*'));
+ return results;
+ },
+
+ child: function(nodes) {
+ var h = Selector.handlers;
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
+ for (var j = 0, child; child = node.childNodes[j]; j++)
+ if (child.nodeType == 1 && child.tagName != '!') results.push(child);
+ }
+ return results;
+ },
+
+ adjacent: function(nodes) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
+ var next = this.nextElementSibling(node);
+ if (next) results.push(next);
+ }
+ return results;
+ },
+
+ laterSibling: function(nodes) {
+ var h = Selector.handlers;
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ h.concat(results, Element.nextSiblings(node));
+ return results;
+ },
+
+ nextElementSibling: function(node) {
+ while (node = node.nextSibling)
+ if (node.nodeType == 1) return node;
+ return null;
+ },
+
+ previousElementSibling: function(node) {
+ while (node = node.previousSibling)
+ if (node.nodeType == 1) return node;
+ return null;
+ },
+
+ // TOKEN FUNCTIONS
+ tagName: function(nodes, root, tagName, combinator) {
+ var uTagName = tagName.toUpperCase();
+ var results = [], h = Selector.handlers;
+ if (nodes) {
+ if (combinator) {
+ // fastlane for ordinary descendant combinators
+ if (combinator == "descendant") {
+ for (var i = 0, node; node = nodes[i]; i++)
+ h.concat(results, node.getElementsByTagName(tagName));
+ return results;
+ } else nodes = this[combinator](nodes);
+ if (tagName == "*") return nodes;
+ }
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (node.tagName.toUpperCase() === uTagName) results.push(node);
+ return results;
+ } else return root.getElementsByTagName(tagName);
+ },
+
+ id: function(nodes, root, id, combinator) {
+ var targetNode = $(id), h = Selector.handlers;
+ if (!targetNode) return [];
+ if (!nodes && root == document) return [targetNode];
+ if (nodes) {
+ if (combinator) {
+ if (combinator == 'child') {
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (targetNode.parentNode == node) return [targetNode];
+ } else if (combinator == 'descendant') {
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (Element.descendantOf(targetNode, node)) return [targetNode];
+ } else if (combinator == 'adjacent') {
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (Selector.handlers.previousElementSibling(targetNode) == node)
+ return [targetNode];
+ } else nodes = h[combinator](nodes);
+ }
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (node == targetNode) return [targetNode];
+ return [];
+ }
+ return (targetNode && Element.descendantOf(targetNode, root)) ? [targetNode] : [];
+ },
+
+ className: function(nodes, root, className, combinator) {
+ if (nodes && combinator) nodes = this[combinator](nodes);
+ return Selector.handlers.byClassName(nodes, root, className);
+ },
+
+ byClassName: function(nodes, root, className) {
+ if (!nodes) nodes = Selector.handlers.descendant([root]);
+ var needle = ' ' + className + ' ';
+ for (var i = 0, results = [], node, nodeClassName; node = nodes[i]; i++) {
+ nodeClassName = node.className;
+ if (nodeClassName.length == 0) continue;
+ if (nodeClassName == className || (' ' + nodeClassName + ' ').include(needle))
+ results.push(node);
+ }
+ return results;
+ },
+
+ attrPresence: function(nodes, root, attr, combinator) {
+ if (!nodes) nodes = root.getElementsByTagName("*");
+ if (nodes && combinator) nodes = this[combinator](nodes);
+ var results = [];
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (Element.hasAttribute(node, attr)) results.push(node);
+ return results;
+ },
+
+ attr: function(nodes, root, attr, value, operator, combinator) {
+ if (!nodes) nodes = root.getElementsByTagName("*");
+ if (nodes && combinator) nodes = this[combinator](nodes);
+ var handler = Selector.operators[operator], results = [];
+ for (var i = 0, node; node = nodes[i]; i++) {
+ var nodeValue = Element.readAttribute(node, attr);
+ if (nodeValue === null) continue;
+ if (handler(nodeValue, value)) results.push(node);
+ }
+ return results;
+ },
+
+ pseudo: function(nodes, name, value, root, combinator) {
+ if (nodes && combinator) nodes = this[combinator](nodes);
+ if (!nodes) nodes = root.getElementsByTagName("*");
+ return Selector.pseudos[name](nodes, value, root);
+ }
+ },
+
+ pseudos: {
+ 'first-child': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
+ if (Selector.handlers.previousElementSibling(node)) continue;
+ results.push(node);
+ }
+ return results;
+ },
+ 'last-child': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
+ if (Selector.handlers.nextElementSibling(node)) continue;
+ results.push(node);
+ }
+ return results;
+ },
+ 'only-child': function(nodes, value, root) {
+ var h = Selector.handlers;
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ if (!h.previousElementSibling(node) && !h.nextElementSibling(node))
+ results.push(node);
+ return results;
+ },
+ 'nth-child': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, formula, root);
+ },
+ 'nth-last-child': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, formula, root, true);
+ },
+ 'nth-of-type': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, formula, root, false, true);
+ },
+ 'nth-last-of-type': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, formula, root, true, true);
+ },
+ 'first-of-type': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, "1", root, false, true);
+ },
+ 'last-of-type': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, "1", root, true, true);
+ },
+ 'only-of-type': function(nodes, formula, root) {
+ var p = Selector.pseudos;
+ return p['last-of-type'](p['first-of-type'](nodes, formula, root), formula, root);
+ },
+
+ // handles the an+b logic
+ getIndices: function(a, b, total) {
+ if (a == 0) return b > 0 ? [b] : [];
+ return $R(1, total).inject([], function(memo, i) {
+ if (0 == (i - b) % a && (i - b) / a >= 0) memo.push(i);
+ return memo;
+ });
+ },
+
+ // handles nth(-last)-child, nth(-last)-of-type, and (first|last)-of-type
+ nth: function(nodes, formula, root, reverse, ofType) {
+ if (nodes.length == 0) return [];
+ if (formula == 'even') formula = '2n+0';
+ if (formula == 'odd') formula = '2n+1';
+ var h = Selector.handlers, results = [], indexed = [], m;
+ h.mark(nodes);
+ for (var i = 0, node; node = nodes[i]; i++) {
+ if (!node.parentNode._countedByPrototype) {
+ h.index(node.parentNode, reverse, ofType);
+ indexed.push(node.parentNode);
+ }
+ }
+ if (formula.match(/^\d+$/)) { // just a number
+ formula = Number(formula);
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (node.nodeIndex == formula) results.push(node);
+ } else if (m = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
+ if (m[1] == "-") m[1] = -1;
+ var a = m[1] ? Number(m[1]) : 1;
+ var b = m[2] ? Number(m[2]) : 0;
+ var indices = Selector.pseudos.getIndices(a, b, nodes.length);
+ for (var i = 0, node, l = indices.length; node = nodes[i]; i++) {
+ for (var j = 0; j < l; j++)
+ if (node.nodeIndex == indices[j]) results.push(node);
+ }
+ }
+ h.unmark(nodes);
+ h.unmark(indexed);
+ return results;
+ },
+
+ 'empty': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
+ // IE treats comments as element nodes
+ if (node.tagName == '!' || node.firstChild) continue;
+ results.push(node);
+ }
+ return results;
+ },
+
+ 'not': function(nodes, selector, root) {
+ var h = Selector.handlers, selectorType, m;
+ var exclusions = new Selector(selector).findElements(root);
+ h.mark(exclusions);
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ if (!node._countedByPrototype) results.push(node);
+ h.unmark(exclusions);
+ return results;
+ },
+
+ 'enabled': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ if (!node.disabled && (!node.type || node.type !== 'hidden'))
+ results.push(node);
+ return results;
+ },
+
+ 'disabled': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ if (node.disabled) results.push(node);
+ return results;
+ },
+
+ 'checked': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ if (node.checked) results.push(node);
+ return results;
+ }
+ },
+
+ operators: {
+ '=': function(nv, v) { return nv == v; },
+ '!=': function(nv, v) { return nv != v; },
+ '^=': function(nv, v) { return nv == v || nv && nv.startsWith(v); },
+ '$=': function(nv, v) { return nv == v || nv && nv.endsWith(v); },
+ '*=': function(nv, v) { return nv == v || nv && nv.include(v); },
+ '$=': function(nv, v) { return nv.endsWith(v); },
+ '*=': function(nv, v) { return nv.include(v); },
+ '~=': function(nv, v) { return (' ' + nv + ' ').include(' ' + v + ' '); },
+ '|=': function(nv, v) { return ('-' + (nv || "").toUpperCase() +
+ '-').include('-' + (v || "").toUpperCase() + '-'); }
+ },
+
+ split: function(expression) {
+ var expressions = [];
+ expression.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) {
+ expressions.push(m[1].strip());
+ });
+ return expressions;
+ },
+
+ matchElements: function(elements, expression) {
+ var matches = $$(expression), h = Selector.handlers;
+ h.mark(matches);
+ for (var i = 0, results = [], element; element = elements[i]; i++)
+ if (element._countedByPrototype) results.push(element);
+ h.unmark(matches);
+ return results;
+ },
+
+ findElement: function(elements, expression, index) {
+ if (Object.isNumber(expression)) {
+ index = expression; expression = false;
+ }
+ return Selector.matchElements(elements, expression || '*')[index || 0];
+ },
+
+ findChildElements: function(element, expressions) {
+ expressions = Selector.split(expressions.join(','));
+ var results = [], h = Selector.handlers;
+ for (var i = 0, l = expressions.length, selector; i < l; i++) {
+ selector = new Selector(expressions[i].strip());
+ h.concat(results, selector.findElements(element));
+ }
+ return (l > 1) ? h.unique(results) : results;
+ }
+});
+
+if (Prototype.Browser.IE) {
+ Object.extend(Selector.handlers, {
+ // IE returns comment nodes on getElementsByTagName("*").
+ // Filter them out.
+ concat: function(a, b) {
+ for (var i = 0, node; node = b[i]; i++)
+ if (node.tagName !== "!") a.push(node);
+ return a;
+ },
+
+ // IE improperly serializes _countedByPrototype in (inner|outer)HTML.
+ unmark: function(nodes) {
+ for (var i = 0, node; node = nodes[i]; i++)
+ node.removeAttribute('_countedByPrototype');
+ return nodes;
+ }
+ });
+}
+
+function $$() {
+ return Selector.findChildElements(document, $A(arguments));
+}
+var Form = {
+ reset: function(form) {
+ $(form).reset();
+ return form;
+ },
+
+ serializeElements: function(elements, options) {
+ if (typeof options != 'object') options = { hash: !!options };
+ else if (Object.isUndefined(options.hash)) options.hash = true;
+ var key, value, submitted = false, submit = options.submit;
+
+ var data = elements.inject({ }, function(result, element) {
+ if (!element.disabled && element.name) {
+ key = element.name; value = $(element).getValue();
+ if (value != null && element.type != 'file' && (element.type != 'submit' || (!submitted &&
+ submit !== false && (!submit || key == submit) && (submitted = true)))) {
+ if (key in result) {
+ // a key is already present; construct an array of values
+ if (!Object.isArray(result[key])) result[key] = [result[key]];
+ result[key].push(value);
+ }
+ else result[key] = value;
+ }
+ }
+ return result;
+ });
+
+ return options.hash ? data : Object.toQueryString(data);
+ }
+};
+
+Form.Methods = {
+ serialize: function(form, options) {
+ return Form.serializeElements(Form.getElements(form), options);
+ },
+
+ getElements: function(form) {
+ return $A($(form).getElementsByTagName('*')).inject([],
+ function(elements, child) {
+ if (Form.Element.Serializers[child.tagName.toLowerCase()])
+ elements.push(Element.extend(child));
+ return elements;
+ }
+ );
+ },
+
+ getInputs: function(form, typeName, name) {
+ form = $(form);
+ var inputs = form.getElementsByTagName('input');
+
+ if (!typeName && !name) return $A(inputs).map(Element.extend);
+
+ for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) {
+ var input = inputs[i];
+ if ((typeName && input.type != typeName) || (name && input.name != name))
+ continue;
+ matchingInputs.push(Element.extend(input));
+ }
+
+ return matchingInputs;
+ },
+
+ disable: function(form) {
+ form = $(form);
+ Form.getElements(form).invoke('disable');
+ return form;
+ },
+
+ enable: function(form) {
+ form = $(form);
+ Form.getElements(form).invoke('enable');
+ return form;
+ },
+
+ findFirstElement: function(form) {
+ var elements = $(form).getElements().findAll(function(element) {
+ return 'hidden' != element.type && !element.disabled;
+ });
+ var firstByIndex = elements.findAll(function(element) {
+ return element.hasAttribute('tabIndex') && element.tabIndex >= 0;
+ }).sortBy(function(element) { return element.tabIndex }).first();
+
+ return firstByIndex ? firstByIndex : elements.find(function(element) {
+ return ['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
+ });
+ },
+
+ focusFirstElement: function(form) {
+ form = $(form);
+ form.findFirstElement().activate();
+ return form;
+ },
+
+ request: function(form, options) {
+ form = $(form), options = Object.clone(options || { });
+
+ var params = options.parameters, action = form.readAttribute('action') || '';
+ if (action.blank()) action = window.location.href;
+ options.parameters = form.serialize(true);
+
+ if (params) {
+ if (Object.isString(params)) params = params.toQueryParams();
+ Object.extend(options.parameters, params);
+ }
+
+ if (form.hasAttribute('method') && !options.method)
+ options.method = form.method;
+
+ return new Ajax.Request(action, options);
+ }
+};
+
+/*--------------------------------------------------------------------------*/
+
+Form.Element = {
+ focus: function(element) {
+ $(element).focus();
+ return element;
+ },
+
+ select: function(element) {
+ $(element).select();
+ return element;
+ }
+};
+
+Form.Element.Methods = {
+ serialize: function(element) {
+ element = $(element);
+ if (!element.disabled && element.name) {
+ var value = element.getValue();
+ if (value != undefined) {
+ var pair = { };
+ pair[element.name] = value;
+ return Object.toQueryString(pair);
+ }
+ }
+ return '';
+ },
+
+ getValue: function(element) {
+ element = $(element);
+ var method = element.tagName.toLowerCase();
+ return Form.Element.Serializers[method](element);
+ },
+
+ setValue: function(element, value) {
+ element = $(element);
+ var method = element.tagName.toLowerCase();
+ Form.Element.Serializers[method](element, value);
+ return element;
+ },
+
+ clear: function(element) {
+ $(element).value = '';
+ return element;
+ },
+
+ present: function(element) {
+ return $(element).value != '';
+ },
+
+ activate: function(element) {
+ element = $(element);
+ try {
+ element.focus();
+ if (element.select && (element.tagName.toLowerCase() != 'input' ||
+ !['button', 'reset', 'submit'].include(element.type)))
+ element.select();
+ } catch (e) { }
+ return element;
+ },
+
+ disable: function(element) {
+ element = $(element);
+ element.disabled = true;
+ return element;
+ },
+
+ enable: function(element) {
+ element = $(element);
+ element.disabled = false;
+ return element;
+ }
+};
+
+/*--------------------------------------------------------------------------*/
+
+var Field = Form.Element;
+var $F = Form.Element.Methods.getValue;
+
+/*--------------------------------------------------------------------------*/
+
+Form.Element.Serializers = {
+ input: function(element, value) {
+ switch (element.type.toLowerCase()) {
+ case 'checkbox':
+ case 'radio':
+ return Form.Element.Serializers.inputSelector(element, value);
+ default:
+ return Form.Element.Serializers.textarea(element, value);
+ }
+ },
+
+ inputSelector: function(element, value) {
+ if (Object.isUndefined(value)) return element.checked ? element.value : null;
+ else element.checked = !!value;
+ },
+
+ textarea: function(element, value) {
+ if (Object.isUndefined(value)) return element.value;
+ else element.value = value;
+ },
+
+ select: function(element, value) {
+ if (Object.isUndefined(value))
+ return this[element.type == 'select-one' ?
+ 'selectOne' : 'selectMany'](element);
+ else {
+ var opt, currentValue, single = !Object.isArray(value);
+ for (var i = 0, length = element.length; i < length; i++) {
+ opt = element.options[i];
+ currentValue = this.optionValue(opt);
+ if (single) {
+ if (currentValue == value) {
+ opt.selected = true;
+ return;
+ }
+ }
+ else opt.selected = value.include(currentValue);
+ }
+ }
+ },
+
+ selectOne: function(element) {
+ var index = element.selectedIndex;
+ return index >= 0 ? this.optionValue(element.options[index]) : null;
+ },
+
+ selectMany: function(element) {
+ var values, length = element.length;
+ if (!length) return null;
+
+ for (var i = 0, values = []; i < length; i++) {
+ var opt = element.options[i];
+ if (opt.selected) values.push(this.optionValue(opt));
+ }
+ return values;
+ },
+
+ optionValue: function(opt) {
+ // extend element because hasAttribute may not be native
+ return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text;
+ }
+};
+
+/*--------------------------------------------------------------------------*/
+
+Abstract.TimedObserver = Class.create(PeriodicalExecuter, {
+ initialize: function($super, element, frequency, callback) {
+ $super(callback, frequency);
+ this.element = $(element);
+ this.lastValue = this.getValue();
+ },
+
+ execute: function() {
+ var value = this.getValue();
+ if (Object.isString(this.lastValue) && Object.isString(value) ?
+ this.lastValue != value : String(this.lastValue) != String(value)) {
+ this.callback(this.element, value);
+ this.lastValue = value;
+ }
+ }
+});
+
+Form.Element.Observer = Class.create(Abstract.TimedObserver, {
+ getValue: function() {
+ return Form.Element.getValue(this.element);
+ }
+});
+
+Form.Observer = Class.create(Abstract.TimedObserver, {
+ getValue: function() {
+ return Form.serialize(this.element);
+ }
+});
+
+/*--------------------------------------------------------------------------*/
+
+Abstract.EventObserver = Class.create({
+ initialize: function(element, callback) {
+ this.element = $(element);
+ this.callback = callback;
+
+ this.lastValue = this.getValue();
+ if (this.element.tagName.toLowerCase() == 'form')
+ this.registerFormCallbacks();
+ else
+ this.registerCallback(this.element);
+ },
+
+ onElementEvent: function() {
+ var value = this.getValue();
+ if (this.lastValue != value) {
+ this.callback(this.element, value);
+ this.lastValue = value;
+ }
+ },
+
+ registerFormCallbacks: function() {
+ Form.getElements(this.element).each(this.registerCallback, this);
+ },
+
+ registerCallback: function(element) {
+ if (element.type) {
+ switch (element.type.toLowerCase()) {
+ case 'checkbox':
+ case 'radio':
+ Event.observe(element, 'click', this.onElementEvent.bind(this));
+ break;
+ default:
+ Event.observe(element, 'change', this.onElementEvent.bind(this));
+ break;
+ }
+ }
+ }
+});
+
+Form.Element.EventObserver = Class.create(Abstract.EventObserver, {
+ getValue: function() {
+ return Form.Element.getValue(this.element);
+ }
+});
+
+Form.EventObserver = Class.create(Abstract.EventObserver, {
+ getValue: function() {
+ return Form.serialize(this.element);
+ }
+});
+if (!window.Event) var Event = { };
+
+Object.extend(Event, {
+ KEY_BACKSPACE: 8,
+ KEY_TAB: 9,
+ KEY_RETURN: 13,
+ KEY_ESC: 27,
+ KEY_LEFT: 37,
+ KEY_UP: 38,
+ KEY_RIGHT: 39,
+ KEY_DOWN: 40,
+ KEY_DELETE: 46,
+ KEY_HOME: 36,
+ KEY_END: 35,
+ KEY_PAGEUP: 33,
+ KEY_PAGEDOWN: 34,
+ KEY_INSERT: 45,
+
+ cache: { },
+
+ relatedTarget: function(event) {
+ var element;
+ switch(event.type) {
+ case 'mouseover': element = event.fromElement; break;
+ case 'mouseout': element = event.toElement; break;
+ default: return null;
+ }
+ return Element.extend(element);
+ }
+});
+
+Event.Methods = (function() {
+ var isButton;
+
+ if (Prototype.Browser.IE) {
+ var buttonMap = { 0: 1, 1: 4, 2: 2 };
+ isButton = function(event, code) {
+ return event.button == buttonMap[code];
+ };
+
+ } else if (Prototype.Browser.WebKit) {
+ isButton = function(event, code) {
+ switch (code) {
+ case 0: return event.which == 1 && !event.metaKey;
+ case 1: return event.which == 1 && event.metaKey;
+ default: return false;
+ }
+ };
+
+ } else {
+ isButton = function(event, code) {
+ return event.which ? (event.which === code + 1) : (event.button === code);
+ };
+ }
+
+ return {
+ isLeftClick: function(event) { return isButton(event, 0) },
+ isMiddleClick: function(event) { return isButton(event, 1) },
+ isRightClick: function(event) { return isButton(event, 2) },
+
+ element: function(event) {
+ event = Event.extend(event);
+
+ var node = event.target,
+ type = event.type,
+ currentTarget = event.currentTarget;
+
+ if (currentTarget && currentTarget.tagName) {
+ // Firefox screws up the "click" event when moving between radio buttons
+ // via arrow keys. It also screws up the "load" and "error" events on images,
+ // reporting the document as the target instead of the original image.
+ if (type === 'load' || type === 'error' ||
+ (type === 'click' && currentTarget.tagName.toLowerCase() === 'input'
+ && currentTarget.type === 'radio'))
+ node = currentTarget;
+ }
+ if (node.nodeType == Node.TEXT_NODE) node = node.parentNode;
+ return Element.extend(node);
+ },
+
+ findElement: function(event, expression) {
+ var element = Event.element(event);
+ if (!expression) return element;
+ var elements = [element].concat(element.ancestors());
+ return Selector.findElement(elements, expression, 0);
+ },
+
+ pointer: function(event) {
+ var docElement = document.documentElement,
+ body = document.body || { scrollLeft: 0, scrollTop: 0 };
+ return {
+ x: event.pageX || (event.clientX +
+ (docElement.scrollLeft || body.scrollLeft) -
+ (docElement.clientLeft || 0)),
+ y: event.pageY || (event.clientY +
+ (docElement.scrollTop || body.scrollTop) -
+ (docElement.clientTop || 0))
+ };
+ },
+
+ pointerX: function(event) { return Event.pointer(event).x },
+ pointerY: function(event) { return Event.pointer(event).y },
+
+ stop: function(event) {
+ Event.extend(event);
+ event.preventDefault();
+ event.stopPropagation();
+ event.stopped = true;
+ }
+ };
+})();
+
+Event.extend = (function() {
+ var methods = Object.keys(Event.Methods).inject({ }, function(m, name) {
+ m[name] = Event.Methods[name].methodize();
+ return m;
+ });
+
+ if (Prototype.Browser.IE) {
+ Object.extend(methods, {
+ stopPropagation: function() { this.cancelBubble = true },
+ preventDefault: function() { this.returnValue = false },
+ inspect: function() { return "[object Event]" }
+ });
+
+ return function(event) {
+ if (!event) return false;
+ if (event._extendedByPrototype) return event;
+
+ event._extendedByPrototype = Prototype.emptyFunction;
+ var pointer = Event.pointer(event);
+ Object.extend(event, {
+ target: event.srcElement,
+ relatedTarget: Event.relatedTarget(event),
+ pageX: pointer.x,
+ pageY: pointer.y
+ });
+ return Object.extend(event, methods);
+ };
+
+ } else {
+ Event.prototype = Event.prototype || document.createEvent("HTMLEvents")['__proto__'];
+ Object.extend(Event.prototype, methods);
+ return Prototype.K;
+ }
+})();
+
+Object.extend(Event, (function() {
+ var cache = Event.cache;
+
+ function getEventID(element) {
+ if (element._prototypeEventID) return element._prototypeEventID[0];
+ arguments.callee.id = arguments.callee.id || 1;
+ return element._prototypeEventID = [++arguments.callee.id];
+ }
+
+ function getDOMEventName(eventName) {
+ if (eventName && eventName.include(':')) return "dataavailable";
+ return eventName;
+ }
+
+ function getCacheForID(id) {
+ return cache[id] = cache[id] || { };
+ }
+
+ function getWrappersForEventName(id, eventName) {
+ var c = getCacheForID(id);
+ return c[eventName] = c[eventName] || [];
+ }
+
+ function createWrapper(element, eventName, handler) {
+ var id = getEventID(element);
+ var c = getWrappersForEventName(id, eventName);
+ if (c.pluck("handler").include(handler)) return false;
+
+ var wrapper = function(event) {
+ if (!Event || !Event.extend ||
+ (event.eventName && event.eventName != eventName))
+ return false;
+
+ Event.extend(event);
+ handler.call(element, event);
+ };
+
+ wrapper.handler = handler;
+ c.push(wrapper);
+ return wrapper;
+ }
+
+ function findWrapper(id, eventName, handler) {
+ var c = getWrappersForEventName(id, eventName);
+ return c.find(function(wrapper) { return wrapper.handler == handler });
+ }
+
+ function destroyWrapper(id, eventName, handler) {
+ var c = getCacheForID(id);
+ if (!c[eventName]) return false;
+ c[eventName] = c[eventName].without(findWrapper(id, eventName, handler));
+ }
+
+ function destroyCache() {
+ for (var id in cache)
+ for (var eventName in cache[id])
+ cache[id][eventName] = null;
+ }
+
+
+ // Internet Explorer needs to remove event handlers on page unload
+ // in order to avoid memory leaks.
+ if (window.attachEvent) {
+ window.attachEvent("onunload", destroyCache);
+ }
+
+ // Safari has a dummy event handler on page unload so that it won't
+ // use its bfcache. Safari <= 3.1 has an issue with restoring the "document"
+ // object when page is returned to via the back button using its bfcache.
+ if (Prototype.Browser.WebKit) {
+ window.addEventListener('unload', Prototype.emptyFunction, false);
+ }
+
+ return {
+ observe: function(element, eventName, handler) {
+ element = $(element);
+ var name = getDOMEventName(eventName);
+
+ var wrapper = createWrapper(element, eventName, handler);
+ if (!wrapper) return element;
+
+ if (element.addEventListener) {
+ element.addEventListener(name, wrapper, false);
+ } else {
+ element.attachEvent("on" + name, wrapper);
+ }
+
+ return element;
+ },
+
+ stopObserving: function(element, eventName, handler) {
+ element = $(element);
+ var id = getEventID(element), name = getDOMEventName(eventName);
+
+ if (!handler && eventName) {
+ getWrappersForEventName(id, eventName).each(function(wrapper) {
+ element.stopObserving(eventName, wrapper.handler);
+ });
+ return element;
+
+ } else if (!eventName) {
+ Object.keys(getCacheForID(id)).each(function(eventName) {
+ element.stopObserving(eventName);
+ });
+ return element;
+ }
+
+ var wrapper = findWrapper(id, eventName, handler);
+ if (!wrapper) return element;
+
+ if (element.removeEventListener) {
+ element.removeEventListener(name, wrapper, false);
+ } else {
+ element.detachEvent("on" + name, wrapper);
+ }
+
+ destroyWrapper(id, eventName, handler);
+
+ return element;
+ },
+
+ fire: function(element, eventName, memo) {
+ element = $(element);
+ if (element == document && document.createEvent && !element.dispatchEvent)
+ element = document.documentElement;
+
+ var event;
+ if (document.createEvent) {
+ event = document.createEvent("HTMLEvents");
+ event.initEvent("dataavailable", true, true);
+ } else {
+ event = document.createEventObject();
+ event.eventType = "ondataavailable";
+ }
+
+ event.eventName = eventName;
+ event.memo = memo || { };
+
+ if (document.createEvent) {
+ element.dispatchEvent(event);
+ } else {
+ element.fireEvent(event.eventType, event);
+ }
+
+ return Event.extend(event);
+ }
+ };
+})());
+
+Object.extend(Event, Event.Methods);
+
+Element.addMethods({
+ fire: Event.fire,
+ observe: Event.observe,
+ stopObserving: Event.stopObserving
+});
+
+Object.extend(document, {
+ fire: Element.Methods.fire.methodize(),
+ observe: Element.Methods.observe.methodize(),
+ stopObserving: Element.Methods.stopObserving.methodize(),
+ loaded: false
+});
+
+(function() {
+ /* Support for the DOMContentLoaded event is based on work by Dan Webb,
+ Matthias Miller, Dean Edwards and John Resig. */
+
+ var timer;
+
+ function fireContentLoadedEvent() {
+ if (document.loaded) return;
+ if (timer) window.clearInterval(timer);
+ document.fire("dom:loaded");
+ document.loaded = true;
+ }
+
+ if (document.addEventListener) {
+ if (Prototype.Browser.WebKit) {
+ timer = window.setInterval(function() {
+ if (/loaded|complete/.test(document.readyState))
+ fireContentLoadedEvent();
+ }, 0);
+
+ Event.observe(window, "load", fireContentLoadedEvent);
+
+ } else {
+ document.addEventListener("DOMContentLoaded",
+ fireContentLoadedEvent, false);
+ }
+
+ } else {
+ document.write("<script id=__onDOMContentLoaded defer src=//:><\/script>");
+ $("__onDOMContentLoaded").onreadystatechange = function() {
+ if (this.readyState == "complete") {
+ this.onreadystatechange = null;
+ fireContentLoadedEvent();
+ }
+ };
+ }
+})();
+/*------------------------------- DEPRECATED -------------------------------*/
+
+Hash.toQueryString = Object.toQueryString;
+
+var Toggle = { display: Element.toggle };
+
+Element.Methods.childOf = Element.Methods.descendantOf;
+
+var Insertion = {
+ Before: function(element, content) {
+ return Element.insert(element, {before:content});
+ },
+
+ Top: function(element, content) {
+ return Element.insert(element, {top:content});
+ },
+
+ Bottom: function(element, content) {
+ return Element.insert(element, {bottom:content});
+ },
+
+ After: function(element, content) {
+ return Element.insert(element, {after:content});
+ }
+};
+
+var $continue = new Error('"throw $continue" is deprecated, use "return" instead');
+
+// This should be moved to script.aculo.us; notice the deprecated methods
+// further below, that map to the newer Element methods.
+var Position = {
+ // set to true if needed, warning: firefox performance problems
+ // NOT neeeded for page scrolling, only if draggable contained in
+ // scrollable elements
+ includeScrollOffsets: false,
+
+ // must be called before calling withinIncludingScrolloffset, every time the
+ // page is scrolled
+ prepare: function() {
+ this.deltaX = window.pageXOffset
+ || document.documentElement.scrollLeft
+ || document.body.scrollLeft
+ || 0;
+ this.deltaY = window.pageYOffset
+ || document.documentElement.scrollTop
+ || document.body.scrollTop
+ || 0;
+ },
+
+ // caches x/y coordinate pair to use with overlap
+ within: function(element, x, y) {
+ if (this.includeScrollOffsets)
+ return this.withinIncludingScrolloffsets(element, x, y);
+ this.xcomp = x;
+ this.ycomp = y;
+ this.offset = Element.cumulativeOffset(element);
+
+ return (y >= this.offset[1] &&
+ y < this.offset[1] + element.offsetHeight &&
+ x >= this.offset[0] &&
+ x < this.offset[0] + element.offsetWidth);
+ },
+
+ withinIncludingScrolloffsets: function(element, x, y) {
+ var offsetcache = Element.cumulativeScrollOffset(element);
+
+ this.xcomp = x + offsetcache[0] - this.deltaX;
+ this.ycomp = y + offsetcache[1] - this.deltaY;
+ this.offset = Element.cumulativeOffset(element);
+
+ return (this.ycomp >= this.offset[1] &&
+ this.ycomp < this.offset[1] + element.offsetHeight &&
+ this.xcomp >= this.offset[0] &&
+ this.xcomp < this.offset[0] + element.offsetWidth);
+ },
+
+ // within must be called directly before
+ overlap: function(mode, element) {
+ if (!mode) return 0;
+ if (mode == 'vertical')
+ return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
+ element.offsetHeight;
+ if (mode == 'horizontal')
+ return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
+ element.offsetWidth;
+ },
+
+ // Deprecation layer -- use newer Element methods now (1.5.2).
+
+ cumulativeOffset: Element.Methods.cumulativeOffset,
+
+ positionedOffset: Element.Methods.positionedOffset,
+
+ absolutize: function(element) {
+ Position.prepare();
+ return Element.absolutize(element);
+ },
+
+ relativize: function(element) {
+ Position.prepare();
+ return Element.relativize(element);
+ },
+
+ realOffset: Element.Methods.cumulativeScrollOffset,
+
+ offsetParent: Element.Methods.getOffsetParent,
+
+ page: Element.Methods.viewportOffset,
+
+ clone: function(source, target, options) {
+ options = options || { };
+ return Element.clonePosition(target, source, options);
+ }
+};
+
+/*--------------------------------------------------------------------------*/
+
+if (!document.getElementsByClassName) document.getElementsByClassName = function(instanceMethods){
+ function iter(name) {
+ return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' " + name + " ')]";
+ }
+
+ instanceMethods.getElementsByClassName = Prototype.BrowserFeatures.XPath ?
+ function(element, className) {
+ className = className.toString().strip();
+ var cond = /\s/.test(className) ? $w(className).map(iter).join('') : iter(className);
+ return cond ? document._getElementsByXPath('.//*' + cond, element) : [];
+ } : function(element, className) {
+ className = className.toString().strip();
+ var elements = [], classNames = (/\s/.test(className) ? $w(className) : null);
+ if (!classNames && !className) return elements;
+
+ var nodes = $(element).getElementsByTagName('*');
+ className = ' ' + className + ' ';
+
+ for (var i = 0, child, cn; child = nodes[i]; i++) {
+ if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) ||
+ (classNames && classNames.all(function(name) {
+ return !name.toString().blank() && cn.include(' ' + name + ' ');
+ }))))
+ elements.push(Element.extend(child));
+ }
+ return elements;
+ };
+
+ return function(className, parentElement) {
+ return $(parentElement || document.body).getElementsByClassName(className);
+ };
+}(Element.Methods);
+
+/*--------------------------------------------------------------------------*/
+
+Element.ClassNames = Class.create();
+Element.ClassNames.prototype = {
+ initialize: function(element) {
+ this.element = $(element);
+ },
+
+ _each: function(iterator) {
+ this.element.className.split(/\s+/).select(function(name) {
+ return name.length > 0;
+ })._each(iterator);
+ },
+
+ set: function(className) {
+ this.element.className = className;
+ },
+
+ add: function(classNameToAdd) {
+ if (this.include(classNameToAdd)) return;
+ this.set($A(this).concat(classNameToAdd).join(' '));
+ },
+
+ remove: function(classNameToRemove) {
+ if (!this.include(classNameToRemove)) return;
+ this.set($A(this).without(classNameToRemove).join(' '));
+ },
+
+ toString: function() {
+ return $A(this).join(' ');
+ }
+};
+
+Object.extend(Element.ClassNames.prototype, Enumerable);
+
+/*--------------------------------------------------------------------------*/
+
+Element.addMethods(); \ No newline at end of file
diff --git a/testing/talos/talos/tests/dromaeo/lib/yahoo.js b/testing/talos/talos/tests/dromaeo/lib/yahoo.js
new file mode 100644
index 0000000000..92ba865824
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/lib/yahoo.js
@@ -0,0 +1,986 @@
+/*
+Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.6.0
+*/
+/**
+ * The YAHOO object is the single global object used by YUI Library. It
+ * contains utility function for setting up namespaces, inheritance, and
+ * logging. YAHOO.util, YAHOO.widget, and YAHOO.example are namespaces
+ * created automatically for and used by the library.
+ * @module yahoo
+ * @title YAHOO Global
+ */
+
+/**
+ * YAHOO_config is not included as part of the library. Instead it is an
+ * object that can be defined by the implementer immediately before
+ * including the YUI library. The properties included in this object
+ * will be used to configure global properties needed as soon as the
+ * library begins to load.
+ * @class YAHOO_config
+ * @static
+ */
+
+/**
+ * A reference to a function that will be executed every time a YAHOO module
+ * is loaded. As parameter, this function will receive the version
+ * information for the module. See <a href="YAHOO.env.html#getVersion">
+ * YAHOO.env.getVersion</a> for the description of the version data structure.
+ * @property listener
+ * @type Function
+ * @static
+ * @default undefined
+ */
+
+/**
+ * Set to true if the library will be dynamically loaded after window.onload.
+ * Defaults to false
+ * @property injecting
+ * @type boolean
+ * @static
+ * @default undefined
+ */
+
+/**
+ * Instructs the yuiloader component to dynamically load yui components and
+ * their dependencies. See the yuiloader documentation for more information
+ * about dynamic loading
+ * @property load
+ * @static
+ * @default undefined
+ * @see yuiloader
+ */
+
+/**
+ * Forces the use of the supplied locale where applicable in the library
+ * @property locale
+ * @type string
+ * @static
+ * @default undefined
+ */
+
+if (typeof YAHOO == "undefined" || !YAHOO) {
+ /**
+ * The YAHOO global namespace object. If YAHOO is already defined, the
+ * existing YAHOO object will not be overwritten so that defined
+ * namespaces are preserved.
+ * @class YAHOO
+ * @static
+ */
+ var YAHOO = {};
+}
+
+/**
+ * Returns the namespace specified and creates it if it doesn't exist
+ * <pre>
+ * YAHOO.namespace("property.package");
+ * YAHOO.namespace("YAHOO.property.package");
+ * </pre>
+ * Either of the above would create YAHOO.property, then
+ * YAHOO.property.package
+ *
+ * Be careful when naming packages. Reserved words may work in some browsers
+ * and not others. For instance, the following will fail in Safari:
+ * <pre>
+ * YAHOO.namespace("really.long.nested.namespace");
+ * </pre>
+ * This fails because "long" is a future reserved word in ECMAScript
+ *
+ * @method namespace
+ * @static
+ * @param {String*} arguments 1-n namespaces to create
+ * @return {Object} A reference to the last namespace object created
+ */
+YAHOO.namespace = function() {
+ var a=arguments, o=null, i, j, d;
+ for (i=0; i<a.length; i=i+1) {
+ d=a[i].split(".");
+ o=YAHOO;
+
+ // YAHOO is implied, so it is ignored if it is included
+ for (j=(d[0] == "YAHOO") ? 1 : 0; j<d.length; j=j+1) {
+ o[d[j]]=o[d[j]] || {};
+ o=o[d[j]];
+ }
+ }
+
+ return o;
+};
+
+/**
+ * Uses YAHOO.widget.Logger to output a log message, if the widget is
+ * available.
+ *
+ * @method log
+ * @static
+ * @param {String} msg The message to log.
+ * @param {String} cat The log category for the message. Default
+ * categories are "info", "warn", "error", time".
+ * Custom categories can be used as well. (opt)
+ * @param {String} src The source of the the message (opt)
+ * @return {Boolean} True if the log operation was successful.
+ */
+YAHOO.log = function(msg, cat, src) {
+ var l=YAHOO.widget.Logger;
+ if(l && l.log) {
+ return l.log(msg, cat, src);
+ } else {
+ return false;
+ }
+};
+
+/**
+ * Registers a module with the YAHOO object
+ * @method register
+ * @static
+ * @param {String} name the name of the module (event, slider, etc)
+ * @param {Function} mainClass a reference to class in the module. This
+ * class will be tagged with the version info
+ * so that it will be possible to identify the
+ * version that is in use when multiple versions
+ * have loaded
+ * @param {Object} data metadata object for the module. Currently it
+ * is expected to contain a "version" property
+ * and a "build" property at minimum.
+ */
+YAHOO.register = function(name, mainClass, data) {
+ var mods = YAHOO.env.modules;
+ if (!mods[name]) {
+ mods[name] = { versions:[], builds:[] };
+ }
+ var m=mods[name],v=data.version,b=data.build,ls=YAHOO.env.listeners;
+ m.name = name;
+ m.version = v;
+ m.build = b;
+ m.versions.push(v);
+ m.builds.push(b);
+ m.mainClass = mainClass;
+ // fire the module load listeners
+ for (var i=0;i<ls.length;i=i+1) {
+ ls[i](m);
+ }
+ // label the main class
+ if (mainClass) {
+ mainClass.VERSION = v;
+ mainClass.BUILD = b;
+ } else {
+ YAHOO.log("mainClass is undefined for module " + name, "warn");
+ }
+};
+
+/**
+ * YAHOO.env is used to keep track of what is known about the YUI library and
+ * the browsing environment
+ * @class YAHOO.env
+ * @static
+ */
+YAHOO.env = YAHOO.env || {
+
+ /**
+ * Keeps the version info for all YUI modules that have reported themselves
+ * @property modules
+ * @type Object[]
+ */
+ modules: [],
+
+ /**
+ * List of functions that should be executed every time a YUI module
+ * reports itself.
+ * @property listeners
+ * @type Function[]
+ */
+ listeners: []
+};
+
+/**
+ * Returns the version data for the specified module:
+ * <dl>
+ * <dt>name:</dt> <dd>The name of the module</dd>
+ * <dt>version:</dt> <dd>The version in use</dd>
+ * <dt>build:</dt> <dd>The build number in use</dd>
+ * <dt>versions:</dt> <dd>All versions that were registered</dd>
+ * <dt>builds:</dt> <dd>All builds that were registered.</dd>
+ * <dt>mainClass:</dt> <dd>An object that was was stamped with the
+ * current version and build. If
+ * mainClass.VERSION != version or mainClass.BUILD != build,
+ * multiple versions of pieces of the library have been
+ * loaded, potentially causing issues.</dd>
+ * </dl>
+ *
+ * @method getVersion
+ * @static
+ * @param {String} name the name of the module (event, slider, etc)
+ * @return {Object} The version info
+ */
+YAHOO.env.getVersion = function(name) {
+ return YAHOO.env.modules[name] || null;
+};
+
+/**
+ * Do not fork for a browser if it can be avoided. Use feature detection when
+ * you can. Use the user agent as a last resort. YAHOO.env.ua stores a version
+ * number for the browser engine, 0 otherwise. This value may or may not map
+ * to the version number of the browser using the engine. The value is
+ * presented as a float so that it can easily be used for boolean evaluation
+ * as well as for looking for a particular range of versions. Because of this,
+ * some of the granularity of the version info may be lost (e.g., Gecko 1.8.0.9
+ * reports 1.8).
+ * @class YAHOO.env.ua
+ * @static
+ */
+YAHOO.env.ua = function() {
+ var o={
+
+ /**
+ * Internet Explorer version number or 0. Example: 6
+ * @property ie
+ * @type float
+ */
+ ie:0,
+
+ /**
+ * Opera version number or 0. Example: 9.2
+ * @property opera
+ * @type float
+ */
+ opera:0,
+
+ /**
+ * Gecko engine revision number. Will evaluate to 1 if Gecko
+ * is detected but the revision could not be found. Other browsers
+ * will be 0. Example: 1.8
+ * <pre>
+ * Firefox 1.0.0.4: 1.7.8 <-- Reports 1.7
+ * Firefox 1.5.0.9: 1.8.0.9 <-- Reports 1.8
+ * Firefox 2.0.0.3: 1.8.1.3 <-- Reports 1.8
+ * Firefox 3 alpha: 1.9a4 <-- Reports 1.9
+ * </pre>
+ * @property gecko
+ * @type float
+ */
+ gecko:0,
+
+ /**
+ * AppleWebKit version. KHTML browsers that are not WebKit browsers
+ * will evaluate to 1, other browsers 0. Example: 418.9.1
+ * <pre>
+ * Safari 1.3.2 (312.6): 312.8.1 <-- Reports 312.8 -- currently the
+ * latest available for Mac OSX 10.3.
+ * Safari 2.0.2: 416 <-- hasOwnProperty introduced
+ * Safari 2.0.4: 418 <-- preventDefault fixed
+ * Safari 2.0.4 (419.3): 418.9.1 <-- One version of Safari may run
+ * different versions of webkit
+ * Safari 2.0.4 (419.3): 419 <-- Tiger installations that have been
+ * updated, but not updated
+ * to the latest patch.
+ * Webkit 212 nightly: 522+ <-- Safari 3.0 precursor (with native SVG
+ * and many major issues fixed).
+ * 3.x yahoo.com, flickr:422 <-- Safari 3.x hacks the user agent
+ * string when hitting yahoo.com and
+ * flickr.com.
+ * Safari 3.0.4 (523.12):523.12 <-- First Tiger release - automatic update
+ * from 2.x via the 10.4.11 OS patch
+ * Webkit nightly 1/2008:525+ <-- Supports DOMContentLoaded event.
+ * yahoo.com user agent hack removed.
+ *
+ * </pre>
+ * http://developer.apple.com/internet/safari/uamatrix.html
+ * @property webkit
+ * @type float
+ */
+ webkit: 0,
+
+ /**
+ * The mobile property will be set to a string containing any relevant
+ * user agent information when a modern mobile browser is detected.
+ * Currently limited to Safari on the iPhone/iPod Touch, Nokia N-series
+ * devices with the WebKit-based browser, and Opera Mini.
+ * @property mobile
+ * @type string
+ */
+ mobile: null,
+
+ /**
+ * Adobe AIR version number or 0. Only populated if webkit is detected.
+ * Example: 1.0
+ * @property air
+ * @type float
+ */
+ air: 0
+
+ };
+
+ var ua=navigator.userAgent, m;
+
+ // Modern KHTML browsers should qualify as Safari X-Grade
+ if ((/KHTML/).test(ua)) {
+ o.webkit=1;
+ }
+ // Modern WebKit browsers are at least X-Grade
+ m=ua.match(/AppleWebKit\/([^\s]*)/);
+ if (m&&m[1]) {
+ o.webkit=parseFloat(m[1]);
+
+ // Mobile browser check
+ if (/ Mobile\//.test(ua)) {
+ o.mobile = "Apple"; // iPhone or iPod Touch
+ } else {
+ m=ua.match(/NokiaN[^\/]*/);
+ if (m) {
+ o.mobile = m[0]; // Nokia N-series, ex: NokiaN95
+ }
+ }
+
+ m=ua.match(/AdobeAIR\/([^\s]*)/);
+ if (m) {
+ o.air = m[0]; // Adobe AIR 1.0 or better
+ }
+
+ }
+
+ if (!o.webkit) { // not webkit
+ // @todo check Opera/8.01 (J2ME/MIDP; Opera Mini/2.0.4509/1316; fi; U; ssr)
+ m=ua.match(/Opera[\s\/]([^\s]*)/);
+ if (m&&m[1]) {
+ o.opera=parseFloat(m[1]);
+ m=ua.match(/Opera Mini[^;]*/);
+ if (m) {
+ o.mobile = m[0]; // ex: Opera Mini/2.0.4509/1316
+ }
+ } else { // not opera or webkit
+ m=ua.match(/MSIE\s([^;]*)/);
+ if (m&&m[1]) {
+ o.ie=parseFloat(m[1]);
+ } else { // not opera, webkit, or ie
+ m=ua.match(/Gecko\/([^\s]*)/);
+ if (m) {
+ o.gecko=1; // Gecko detected, look for revision
+ m=ua.match(/rv:([^\s\)]*)/);
+ if (m&&m[1]) {
+ o.gecko=parseFloat(m[1]);
+ }
+ }
+ }
+ }
+ }
+
+ return o;
+}();
+
+/*
+ * Initializes the global by creating the default namespaces and applying
+ * any new configuration information that is detected. This is the setup
+ * for env.
+ * @method init
+ * @static
+ * @private
+ */
+(function() {
+ YAHOO.namespace("util", "widget", "example");
+ if ("undefined" !== typeof YAHOO_config) {
+ var l=YAHOO_config.listener,ls=YAHOO.env.listeners,unique=true,i;
+ if (l) {
+ // if YAHOO is loaded multiple times we need to check to see if
+ // this is a new config object. If it is, add the new component
+ // load listener to the stack
+ for (i=0;i<ls.length;i=i+1) {
+ if (ls[i]==l) {
+ unique=false;
+ break;
+ }
+ }
+ if (unique) {
+ ls.push(l);
+ }
+ }
+ }
+})();
+/**
+ * Provides the language utilites and extensions used by the library
+ * @class YAHOO.lang
+ */
+YAHOO.lang = YAHOO.lang || {};
+
+(function() {
+
+var L = YAHOO.lang,
+
+ // ADD = ["toString", "valueOf", "hasOwnProperty"],
+ ADD = ["toString", "valueOf"],
+
+ OB = {
+
+ /**
+ * Determines whether or not the provided object is an array.
+ * Testing typeof/instanceof/constructor of arrays across frame
+ * boundaries isn't possible in Safari unless you have a reference
+ * to the other frame to test against its Array prototype. To
+ * handle this case, we test well-known array properties instead.
+ * properties.
+ * @method isArray
+ * @param {any} o The object being testing
+ * @return {boolean} the result
+ */
+ isArray: function(o) {
+ if (o) {
+ return L.isNumber(o.length) && L.isFunction(o.splice);
+ }
+ return false;
+ },
+
+ /**
+ * Determines whether or not the provided object is a boolean
+ * @method isBoolean
+ * @param {any} o The object being testing
+ * @return {boolean} the result
+ */
+ isBoolean: function(o) {
+ return typeof o === 'boolean';
+ },
+
+ /**
+ * Determines whether or not the provided object is a function
+ * @method isFunction
+ * @param {any} o The object being testing
+ * @return {boolean} the result
+ */
+ isFunction: function(o) {
+ return typeof o === 'function';
+ },
+
+ /**
+ * Determines whether or not the provided object is null
+ * @method isNull
+ * @param {any} o The object being testing
+ * @return {boolean} the result
+ */
+ isNull: function(o) {
+ return o === null;
+ },
+
+ /**
+ * Determines whether or not the provided object is a legal number
+ * @method isNumber
+ * @param {any} o The object being testing
+ * @return {boolean} the result
+ */
+ isNumber: function(o) {
+ return typeof o === 'number' && isFinite(o);
+ },
+
+ /**
+ * Determines whether or not the provided object is of type object
+ * or function
+ * @method isObject
+ * @param {any} o The object being testing
+ * @return {boolean} the result
+ */
+ isObject: function(o) {
+return (o && (typeof o === 'object' || L.isFunction(o))) || false;
+ },
+
+ /**
+ * Determines whether or not the provided object is a string
+ * @method isString
+ * @param {any} o The object being testing
+ * @return {boolean} the result
+ */
+ isString: function(o) {
+ return typeof o === 'string';
+ },
+
+ /**
+ * Determines whether or not the provided object is undefined
+ * @method isUndefined
+ * @param {any} o The object being testing
+ * @return {boolean} the result
+ */
+ isUndefined: function(o) {
+ return typeof o === 'undefined';
+ },
+
+
+ /**
+ * IE will not enumerate native functions in a derived object even if the
+ * function was overridden. This is a workaround for specific functions
+ * we care about on the Object prototype.
+ * @property _IEEnumFix
+ * @param {Function} r the object to receive the augmentation
+ * @param {Function} s the object that supplies the properties to augment
+ * @static
+ * @private
+ */
+ _IEEnumFix: (YAHOO.env.ua.ie) ? function(r, s) {
+ for (var i=0;i<ADD.length;i=i+1) {
+ var fname=ADD[i],f=s[fname];
+ if (L.isFunction(f) && f!=Object.prototype[fname]) {
+ r[fname]=f;
+ }
+ }
+ } : function(){},
+
+ /**
+ * Utility to set up the prototype, constructor and superclass properties to
+ * support an inheritance strategy that can chain constructors and methods.
+ * Static members will not be inherited.
+ *
+ * @method extend
+ * @static
+ * @param {Function} subc the object to modify
+ * @param {Function} superc the object to inherit
+ * @param {Object} overrides additional properties/methods to add to the
+ * subclass prototype. These will override the
+ * matching items obtained from the superclass
+ * if present.
+ */
+ extend: function(subc, superc, overrides) {
+ if (!superc||!subc) {
+ throw new Error("extend failed, please check that " +
+ "all dependencies are included.");
+ }
+ var F = function() {};
+ F.prototype=superc.prototype;
+ subc.prototype=new F();
+ subc.prototype.constructor=subc;
+ subc.superclass=superc.prototype;
+ if (superc.prototype.constructor == Object.prototype.constructor) {
+ superc.prototype.constructor=superc;
+ }
+
+ if (overrides) {
+ for (var i in overrides) {
+ if (L.hasOwnProperty(overrides, i)) {
+ subc.prototype[i]=overrides[i];
+ }
+ }
+
+ L._IEEnumFix(subc.prototype, overrides);
+ }
+ },
+
+ /**
+ * Applies all properties in the supplier to the receiver if the
+ * receiver does not have these properties yet. Optionally, one or
+ * more methods/properties can be specified (as additional
+ * parameters). This option will overwrite the property if receiver
+ * has it already. If true is passed as the third parameter, all
+ * properties will be applied and _will_ overwrite properties in
+ * the receiver.
+ *
+ * @method augmentObject
+ * @static
+ * @since 2.3.0
+ * @param {Function} r the object to receive the augmentation
+ * @param {Function} s the object that supplies the properties to augment
+ * @param {String*|boolean} arguments zero or more properties methods
+ * to augment the receiver with. If none specified, everything
+ * in the supplier will be used unless it would
+ * overwrite an existing property in the receiver. If true
+ * is specified as the third parameter, all properties will
+ * be applied and will overwrite an existing property in
+ * the receiver
+ */
+ augmentObject: function(r, s) {
+ if (!s||!r) {
+ throw new Error("Absorb failed, verify dependencies.");
+ }
+ var a=arguments, i, p, override=a[2];
+ if (override && override!==true) { // only absorb the specified properties
+ for (i=2; i<a.length; i=i+1) {
+ r[a[i]] = s[a[i]];
+ }
+ } else { // take everything, overwriting only if the third parameter is true
+ for (p in s) {
+ if (override || !(p in r)) {
+ r[p] = s[p];
+ }
+ }
+
+ L._IEEnumFix(r, s);
+ }
+ },
+
+ /**
+ * Same as YAHOO.lang.augmentObject, except it only applies prototype properties
+ * @see YAHOO.lang.augmentObject
+ * @method augmentProto
+ * @static
+ * @param {Function} r the object to receive the augmentation
+ * @param {Function} s the object that supplies the properties to augment
+ * @param {String*|boolean} arguments zero or more properties methods
+ * to augment the receiver with. If none specified, everything
+ * in the supplier will be used unless it would overwrite an existing
+ * property in the receiver. if true is specified as the third
+ * parameter, all properties will be applied and will overwrite an
+ * existing property in the receiver
+ */
+ augmentProto: function(r, s) {
+ if (!s||!r) {
+ throw new Error("Augment failed, verify dependencies.");
+ }
+ //var a=[].concat(arguments);
+ var a=[r.prototype,s.prototype];
+ for (var i=2;i<arguments.length;i=i+1) {
+ a.push(arguments[i]);
+ }
+ L.augmentObject.apply(this, a);
+ },
+
+
+ /**
+ * Returns a simple string representation of the object or array.
+ * Other types of objects will be returned unprocessed. Arrays
+ * are expected to be indexed. Use object notation for
+ * associative arrays.
+ * @method dump
+ * @since 2.3.0
+ * @param o {Object} The object to dump
+ * @param d {int} How deep to recurse child objects, default 3
+ * @return {String} the dump result
+ */
+ dump: function(o, d) {
+ var i,len,s=[],OBJ="{...}",FUN="f(){...}",
+ COMMA=', ', ARROW=' => ';
+
+ // Cast non-objects to string
+ // Skip dates because the std toString is what we want
+ // Skip HTMLElement-like objects because trying to dump
+ // an element will cause an unhandled exception in FF 2.x
+ if (!L.isObject(o)) {
+ return o + "";
+ } else if (o instanceof Date || ("nodeType" in o && "tagName" in o)) {
+ return o;
+ } else if (L.isFunction(o)) {
+ return FUN;
+ }
+
+ // dig into child objects the depth specifed. Default 3
+ d = (L.isNumber(d)) ? d : 3;
+
+ // arrays [1, 2, 3]
+ if (L.isArray(o)) {
+ s.push("[");
+ for (i=0,len=o.length;i<len;i=i+1) {
+ if (L.isObject(o[i])) {
+ s.push((d > 0) ? L.dump(o[i], d-1) : OBJ);
+ } else {
+ s.push(o[i]);
+ }
+ s.push(COMMA);
+ }
+ if (s.length > 1) {
+ s.pop();
+ }
+ s.push("]");
+ // objects {k1 => v1, k2 => v2}
+ } else {
+ s.push("{");
+ for (i in o) {
+ if (L.hasOwnProperty(o, i)) {
+ s.push(i + ARROW);
+ if (L.isObject(o[i])) {
+ s.push((d > 0) ? L.dump(o[i], d-1) : OBJ);
+ } else {
+ s.push(o[i]);
+ }
+ s.push(COMMA);
+ }
+ }
+ if (s.length > 1) {
+ s.pop();
+ }
+ s.push("}");
+ }
+
+ return s.join("");
+ },
+
+ /**
+ * Does variable substitution on a string. It scans through the string
+ * looking for expressions enclosed in { } braces. If an expression
+ * is found, it is used a key on the object. If there is a space in
+ * the key, the first word is used for the key and the rest is provided
+ * to an optional function to be used to programatically determine the
+ * value (the extra information might be used for this decision). If
+ * the value for the key in the object, or what is returned from the
+ * function has a string value, number value, or object value, it is
+ * substituted for the bracket expression and it repeats. If this
+ * value is an object, it uses the Object's toString() if this has
+ * been overridden, otherwise it does a shallow dump of the key/value
+ * pairs.
+ * @method substitute
+ * @since 2.3.0
+ * @param s {String} The string that will be modified.
+ * @param o {Object} An object containing the replacement values
+ * @param f {Function} An optional function that can be used to
+ * process each match. It receives the key,
+ * value, and any extra metadata included with
+ * the key inside of the braces.
+ * @return {String} the substituted string
+ */
+ substitute: function (s, o, f) {
+ var i, j, k, key, v, meta, saved=[], token,
+ DUMP='dump', SPACE=' ', LBRACE='{', RBRACE='}';
+
+
+ for (;;) {
+ i = s.lastIndexOf(LBRACE);
+ if (i < 0) {
+ break;
+ }
+ j = s.indexOf(RBRACE, i);
+ if (i + 1 >= j) {
+ break;
+ }
+
+ //Extract key and meta info
+ token = s.substring(i + 1, j);
+ key = token;
+ meta = null;
+ k = key.indexOf(SPACE);
+ if (k > -1) {
+ meta = key.substring(k + 1);
+ key = key.substring(0, k);
+ }
+
+ // lookup the value
+ v = o[key];
+
+ // if a substitution function was provided, execute it
+ if (f) {
+ v = f(key, v, meta);
+ }
+
+ if (L.isObject(v)) {
+ if (L.isArray(v)) {
+ v = L.dump(v, parseInt(meta, 10));
+ } else {
+ meta = meta || "";
+
+ // look for the keyword 'dump', if found force obj dump
+ var dump = meta.indexOf(DUMP);
+ if (dump > -1) {
+ meta = meta.substring(4);
+ }
+
+ // use the toString if it is not the Object toString
+ // and the 'dump' meta info was not found
+ if (v.toString===Object.prototype.toString||dump>-1) {
+ v = L.dump(v, parseInt(meta, 10));
+ } else {
+ v = v.toString();
+ }
+ }
+ } else if (!L.isString(v) && !L.isNumber(v)) {
+ // This {block} has no replace string. Save it for later.
+ v = "~-" + saved.length + "-~";
+ saved[saved.length] = token;
+
+ // break;
+ }
+
+ s = s.substring(0, i) + v + s.substring(j + 1);
+
+
+ }
+
+ // restore saved {block}s
+ for (i=saved.length-1; i>=0; i=i-1) {
+ s = s.replace(new RegExp("~-" + i + "-~"), "{" + saved[i] + "}", "g");
+ }
+
+ return s;
+ },
+
+
+ /**
+ * Returns a string without any leading or trailing whitespace. If
+ * the input is not a string, the input will be returned untouched.
+ * @method trim
+ * @since 2.3.0
+ * @param s {string} the string to trim
+ * @return {string} the trimmed string
+ */
+ trim: function(s){
+ try {
+ return s.replace(/^\s+|\s+$/g, "");
+ } catch(e) {
+ return s;
+ }
+ },
+
+ /**
+ * Returns a new object containing all of the properties of
+ * all the supplied objects. The properties from later objects
+ * will overwrite those in earlier objects.
+ * @method merge
+ * @since 2.3.0
+ * @param arguments {Object*} the objects to merge
+ * @return the new merged object
+ */
+ merge: function() {
+ var o={}, a=arguments;
+ for (var i=0, l=a.length; i<l; i=i+1) {
+ L.augmentObject(o, a[i], true);
+ }
+ return o;
+ },
+
+ /**
+ * Executes the supplied function in the context of the supplied
+ * object 'when' milliseconds later. Executes the function a
+ * single time unless periodic is set to true.
+ * @method later
+ * @since 2.4.0
+ * @param when {int} the number of milliseconds to wait until the fn
+ * is executed
+ * @param o the context object
+ * @param fn {Function|String} the function to execute or the name of
+ * the method in the 'o' object to execute
+ * @param data [Array] data that is provided to the function. This accepts
+ * either a single item or an array. If an array is provided, the
+ * function is executed with one parameter for each array item. If
+ * you need to pass a single array parameter, it needs to be wrapped in
+ * an array [myarray]
+ * @param periodic {boolean} if true, executes continuously at supplied
+ * interval until canceled
+ * @return a timer object. Call the cancel() method on this object to
+ * stop the timer.
+ */
+ later: function(when, o, fn, data, periodic) {
+ when = when || 0;
+ o = o || {};
+ var m=fn, d=data, f, r;
+
+ if (L.isString(fn)) {
+ m = o[fn];
+ }
+
+ if (!m) {
+ throw new TypeError("method undefined");
+ }
+
+ if (!L.isArray(d)) {
+ d = [data];
+ }
+
+ f = function() {
+ m.apply(o, d);
+ };
+
+ r = (periodic) ? setInterval(f, when) : setTimeout(f, when);
+
+ return {
+ interval: periodic,
+ cancel: function() {
+ if (this.interval) {
+ clearInterval(r);
+ } else {
+ clearTimeout(r);
+ }
+ }
+ };
+ },
+
+ /**
+ * A convenience method for detecting a legitimate non-null value.
+ * Returns false for null/undefined/NaN, true for other values,
+ * including 0/false/''
+ * @method isValue
+ * @since 2.3.0
+ * @param o {any} the item to test
+ * @return {boolean} true if it is not null/undefined/NaN || false
+ */
+ isValue: function(o) {
+ // return (o || o === false || o === 0 || o === ''); // Infinity fails
+return (L.isObject(o) || L.isString(o) || L.isNumber(o) || L.isBoolean(o));
+ }
+
+};
+
+/**
+ * Determines whether or not the property was added
+ * to the object instance. Returns false if the property is not present
+ * in the object, or was inherited from the prototype.
+ * This abstraction is provided to enable hasOwnProperty for Safari 1.3.x.
+ * There is a discrepancy between YAHOO.lang.hasOwnProperty and
+ * Object.prototype.hasOwnProperty when the property is a primitive added to
+ * both the instance AND prototype with the same value:
+ * <pre>
+ * var A = function() {};
+ * A.prototype.foo = 'foo';
+ * var a = new A();
+ * a.foo = 'foo';
+ * alert(a.hasOwnProperty('foo')); // true
+ * alert(YAHOO.lang.hasOwnProperty(a, 'foo')); // false when using fallback
+ * </pre>
+ * @method hasOwnProperty
+ * @param {any} o The object being testing
+ * @param prop {string} the name of the property to test
+ * @return {boolean} the result
+ */
+L.hasOwnProperty = (Object.prototype.hasOwnProperty) ?
+ function(o, prop) {
+ return o && o.hasOwnProperty(prop);
+ } : function(o, prop) {
+ return !L.isUndefined(o[prop]) &&
+ o.constructor.prototype[prop] !== o[prop];
+ };
+
+// new lang wins
+OB.augmentObject(L, OB, true);
+
+/*
+ * An alias for <a href="YAHOO.lang.html">YAHOO.lang</a>
+ * @class YAHOO.util.Lang
+ */
+YAHOO.util.Lang = L;
+
+/**
+ * Same as YAHOO.lang.augmentObject, except it only applies prototype
+ * properties. This is an alias for augmentProto.
+ * @see YAHOO.lang.augmentObject
+ * @method augment
+ * @static
+ * @param {Function} r the object to receive the augmentation
+ * @param {Function} s the object that supplies the properties to augment
+ * @param {String*|boolean} arguments zero or more properties methods to
+ * augment the receiver with. If none specified, everything
+ * in the supplier will be used unless it would
+ * overwrite an existing property in the receiver. if true
+ * is specified as the third parameter, all properties will
+ * be applied and will overwrite an existing property in
+ * the receiver
+ */
+L.augment = L.augmentProto;
+
+/**
+ * An alias for <a href="YAHOO.lang.html#augment">YAHOO.lang.augment</a>
+ * @for YAHOO
+ * @method augment
+ * @static
+ * @param {Function} r the object to receive the augmentation
+ * @param {Function} s the object that supplies the properties to augment
+ * @param {String*} arguments zero or more properties methods to
+ * augment the receiver with. If none specified, everything
+ * in the supplier will be used unless it would
+ * overwrite an existing property in the receiver
+ */
+YAHOO.augment = L.augmentProto;
+
+/**
+ * An alias for <a href="YAHOO.lang.html#extend">YAHOO.lang.extend</a>
+ * @method extend
+ * @static
+ * @param {Function} subc the object to modify
+ * @param {Function} superc the object to inherit
+ * @param {Object} overrides additional properties/methods to add to the
+ * subclass prototype. These will override the
+ * matching items obtained from the superclass if present.
+ */
+YAHOO.extend = L.extend;
+
+})();
+YAHOO.register("yahoo", YAHOO, {version: "2.6.0", build: "1321"});
diff --git a/testing/talos/talos/tests/dromaeo/lib/yui-dom.js b/testing/talos/talos/tests/dromaeo/lib/yui-dom.js
new file mode 100644
index 0000000000..f0bdc381b5
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/lib/yui-dom.js
@@ -0,0 +1,1241 @@
+/*
+Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.6.0
+*/
+/**
+ * The dom module provides helper methods for manipulating Dom elements.
+ * @module dom
+ *
+ */
+
+(function() {
+ var Y = YAHOO.util, // internal shorthand
+ lang = YAHOO.lang,
+ getStyle, // for load time browser branching
+ setStyle, // ditto
+ propertyCache = {}, // for faster hyphen converts
+ reClassNameCache = {}, // cache regexes for className
+ document = window.document; // cache for faster lookups
+
+ YAHOO.env._id_counter = YAHOO.env._id_counter || 0; // for use with generateId (global to save state if Dom is overwritten)
+
+ // brower detection
+ var isOpera = YAHOO.env.ua.opera,
+ isSafari = YAHOO.env.ua.webkit,
+ isGecko = YAHOO.env.ua.gecko,
+ isIE = YAHOO.env.ua.ie;
+
+ // regex cache
+ var patterns = {
+ HYPHEN: /(-[a-z])/i, // to normalize get/setStyle
+ ROOT_TAG: /^body|html$/i, // body for quirks mode, html for standards,
+ OP_SCROLL:/^(?:inline|table-row)$/i
+ };
+
+ var toCamel = function(property) {
+ if ( !patterns.HYPHEN.test(property) ) {
+ return property; // no hyphens
+ }
+
+ if (propertyCache[property]) { // already converted
+ return propertyCache[property];
+ }
+
+ var converted = property;
+
+ while( patterns.HYPHEN.exec(converted) ) {
+ converted = converted.replace(RegExp.$1,
+ RegExp.$1.substr(1).toUpperCase());
+ }
+
+ propertyCache[property] = converted;
+ return converted;
+ //return property.replace(/-([a-z])/gi, function(m0, m1) {return m1.toUpperCase()}) // cant use function as 2nd arg yet due to safari bug
+ };
+
+ var getClassRegEx = function(className) {
+ var re = reClassNameCache[className];
+ if (!re) {
+ re = new RegExp('(?:^|\\s+)' + className + '(?:\\s+|$)');
+ reClassNameCache[className] = re;
+ }
+ return re;
+ };
+
+ // branching at load instead of runtime
+ if (document.defaultView && document.defaultView.getComputedStyle) { // W3C DOM method
+ getStyle = function(el, property) {
+ var value = null;
+
+ if (property == 'float') { // fix reserved word
+ property = 'cssFloat';
+ }
+
+ var computed = el.ownerDocument.defaultView.getComputedStyle(el, '');
+ if (computed) { // test computed before touching for safari
+ value = computed[toCamel(property)];
+ }
+
+ return el.style[property] || value;
+ };
+ } else if (document.documentElement.currentStyle && isIE) { // IE method
+ getStyle = function(el, property) {
+ switch( toCamel(property) ) {
+ case 'opacity' :// IE opacity uses filter
+ var val = 100;
+ try { // will error if no DXImageTransform
+ val = el.filters['DXImageTransform.Microsoft.Alpha'].opacity;
+
+ } catch(e) {
+ try { // make sure its in the document
+ val = el.filters('alpha').opacity;
+ } catch(e) {
+ }
+ }
+ return val / 100;
+ case 'float': // fix reserved word
+ property = 'styleFloat'; // fall through
+ default:
+ // test currentStyle before touching
+ var value = el.currentStyle ? el.currentStyle[property] : null;
+ return ( el.style[property] || value );
+ }
+ };
+ } else { // default to inline only
+ getStyle = function(el, property) { return el.style[property]; };
+ }
+
+ if (isIE) {
+ setStyle = function(el, property, val) {
+ switch (property) {
+ case 'opacity':
+ if ( lang.isString(el.style.filter) ) { // in case not appended
+ el.style.filter = 'alpha(opacity=' + val * 100 + ')';
+
+ if (!el.currentStyle || !el.currentStyle.hasLayout) {
+ el.style.zoom = 1; // when no layout or cant tell
+ }
+ }
+ break;
+ case 'float':
+ property = 'styleFloat';
+ default:
+ el.style[property] = val;
+ }
+ };
+ } else {
+ setStyle = function(el, property, val) {
+ if (property == 'float') {
+ property = 'cssFloat';
+ }
+ el.style[property] = val;
+ };
+ }
+
+ var testElement = function(node, method) {
+ return node && node.nodeType == 1 && ( !method || method(node) );
+ };
+
+ /**
+ * Provides helper methods for DOM elements.
+ * @namespace YAHOO.util
+ * @class Dom
+ */
+ YAHOO.util.Dom = {
+ /**
+ * Returns an HTMLElement reference.
+ * @method get
+ * @param {String | HTMLElement |Array} el Accepts a string to use as an ID for getting a DOM reference, an actual DOM reference, or an Array of IDs and/or HTMLElements.
+ * @return {HTMLElement | Array} A DOM reference to an HTML element or an array of HTMLElements.
+ */
+ get: function(el) {
+ if (el) {
+ if (el.nodeType || el.item) { // Node, or NodeList
+ return el;
+ }
+
+ if (typeof el === 'string') { // id
+ return document.getElementById(el);
+ }
+
+ if ('length' in el) { // array-like
+ var c = [];
+ for (var i = 0, len = el.length; i < len; ++i) {
+ c[c.length] = Y.Dom.get(el[i]);
+ }
+
+ return c;
+ }
+
+ return el; // some other object, just pass it back
+ }
+
+ return null;
+ },
+
+ /**
+ * Normalizes currentStyle and ComputedStyle.
+ * @method getStyle
+ * @param {String | HTMLElement |Array} el Accepts a string to use as an ID, an actual DOM reference, or an Array of IDs and/or HTMLElements.
+ * @param {String} property The style property whose value is returned.
+ * @return {String | Array} The current value of the style property for the element(s).
+ */
+ getStyle: function(el, property) {
+ property = toCamel(property);
+
+ var f = function(element) {
+ return getStyle(element, property);
+ };
+
+ return Y.Dom.batch(el, f, Y.Dom, true);
+ },
+
+ /**
+ * Wrapper for setting style properties of HTMLElements. Normalizes "opacity" across modern browsers.
+ * @method setStyle
+ * @param {String | HTMLElement | Array} el Accepts a string to use as an ID, an actual DOM reference, or an Array of IDs and/or HTMLElements.
+ * @param {String} property The style property to be set.
+ * @param {String} val The value to apply to the given property.
+ */
+ setStyle: function(el, property, val) {
+ property = toCamel(property);
+
+ var f = function(element) {
+ setStyle(element, property, val);
+
+ };
+
+ Y.Dom.batch(el, f, Y.Dom, true);
+ },
+
+ /**
+ * Gets the current position of an element based on page coordinates. Element must be part of the DOM tree to have page coordinates (display:none or elements not appended return false).
+ * @method getXY
+ * @param {String | HTMLElement | Array} el Accepts a string to use as an ID, an actual DOM reference, or an Array of IDs and/or HTMLElements
+ * @return {Array} The XY position of the element(s)
+ */
+ getXY: function(el) {
+ var f = function(el) {
+ // has to be part of document to have pageXY
+ if ( (el.parentNode === null || el.offsetParent === null ||
+ this.getStyle(el, 'display') == 'none') && el != el.ownerDocument.body) {
+ return false;
+ }
+
+ return getXY(el);
+ };
+
+ return Y.Dom.batch(el, f, Y.Dom, true);
+ },
+
+ /**
+ * Gets the current X position of an element based on page coordinates. The element must be part of the DOM tree to have page coordinates (display:none or elements not appended return false).
+ * @method getX
+ * @param {String | HTMLElement | Array} el Accepts a string to use as an ID, an actual DOM reference, or an Array of IDs and/or HTMLElements
+ * @return {Number | Array} The X position of the element(s)
+ */
+ getX: function(el) {
+ var f = function(el) {
+ return Y.Dom.getXY(el)[0];
+ };
+
+ return Y.Dom.batch(el, f, Y.Dom, true);
+ },
+
+ /**
+ * Gets the current Y position of an element based on page coordinates. Element must be part of the DOM tree to have page coordinates (display:none or elements not appended return false).
+ * @method getY
+ * @param {String | HTMLElement | Array} el Accepts a string to use as an ID, an actual DOM reference, or an Array of IDs and/or HTMLElements
+ * @return {Number | Array} The Y position of the element(s)
+ */
+ getY: function(el) {
+ var f = function(el) {
+ return Y.Dom.getXY(el)[1];
+ };
+
+ return Y.Dom.batch(el, f, Y.Dom, true);
+ },
+
+ /**
+ * Set the position of an html element in page coordinates, regardless of how the element is positioned.
+ * The element(s) must be part of the DOM tree to have page coordinates (display:none or elements not appended return false).
+ * @method setXY
+ * @param {String | HTMLElement | Array} el Accepts a string to use as an ID, an actual DOM reference, or an Array of IDs and/or HTMLElements
+ * @param {Array} pos Contains X & Y values for new position (coordinates are page-based)
+ * @param {Boolean} noRetry By default we try and set the position a second time if the first fails
+ */
+ setXY: function(el, pos, noRetry) {
+ var f = function(el) {
+ var style_pos = this.getStyle(el, 'position');
+ if (style_pos == 'static') { // default to relative
+ this.setStyle(el, 'position', 'relative');
+ style_pos = 'relative';
+ }
+
+ var pageXY = this.getXY(el);
+ if (pageXY === false) { // has to be part of doc to have pageXY
+ return false;
+ }
+
+ var delta = [ // assuming pixels; if not we will have to retry
+ parseInt( this.getStyle(el, 'left'), 10 ),
+ parseInt( this.getStyle(el, 'top'), 10 )
+ ];
+
+ if ( isNaN(delta[0]) ) {// in case of 'auto'
+ delta[0] = (style_pos == 'relative') ? 0 : el.offsetLeft;
+ }
+ if ( isNaN(delta[1]) ) { // in case of 'auto'
+ delta[1] = (style_pos == 'relative') ? 0 : el.offsetTop;
+ }
+
+ if (pos[0] !== null) { el.style.left = pos[0] - pageXY[0] + delta[0] + 'px'; }
+ if (pos[1] !== null) { el.style.top = pos[1] - pageXY[1] + delta[1] + 'px'; }
+
+ if (!noRetry) {
+ var newXY = this.getXY(el);
+
+ // if retry is true, try one more time if we miss
+ if ( (pos[0] !== null && newXY[0] != pos[0]) ||
+ (pos[1] !== null && newXY[1] != pos[1]) ) {
+ this.setXY(el, pos, true);
+ }
+ }
+
+ };
+
+ Y.Dom.batch(el, f, Y.Dom, true);
+ },
+
+ /**
+ * Set the X position of an html element in page coordinates, regardless of how the element is positioned.
+ * The element must be part of the DOM tree to have page coordinates (display:none or elements not appended return false).
+ * @method setX
+ * @param {String | HTMLElement | Array} el Accepts a string to use as an ID, an actual DOM reference, or an Array of IDs and/or HTMLElements.
+ * @param {Int} x The value to use as the X coordinate for the element(s).
+ */
+ setX: function(el, x) {
+ Y.Dom.setXY(el, [x, null]);
+ },
+
+ /**
+ * Set the Y position of an html element in page coordinates, regardless of how the element is positioned.
+ * The element must be part of the DOM tree to have page coordinates (display:none or elements not appended return false).
+ * @method setY
+ * @param {String | HTMLElement | Array} el Accepts a string to use as an ID, an actual DOM reference, or an Array of IDs and/or HTMLElements.
+ * @param {Int} x To use as the Y coordinate for the element(s).
+ */
+ setY: function(el, y) {
+ Y.Dom.setXY(el, [null, y]);
+ },
+
+ /**
+ * Returns the region position of the given element.
+ * The element must be part of the DOM tree to have a region (display:none or elements not appended return false).
+ * @method getRegion
+ * @param {String | HTMLElement | Array} el Accepts a string to use as an ID, an actual DOM reference, or an Array of IDs and/or HTMLElements.
+ * @return {Region | Array} A Region or array of Region instances containing "top, left, bottom, right" member data.
+ */
+ getRegion: function(el) {
+ var f = function(el) {
+ if ( (el.parentNode === null || el.offsetParent === null ||
+ this.getStyle(el, 'display') == 'none') && el != el.ownerDocument.body) {
+ return false;
+ }
+
+ var region = Y.Region.getRegion(el);
+ return region;
+ };
+
+ return Y.Dom.batch(el, f, Y.Dom, true);
+ },
+
+ /**
+ * Returns the width of the client (viewport).
+ * @method getClientWidth
+ * @deprecated Now using getViewportWidth. This interface left intact for back compat.
+ * @return {Int} The width of the viewable area of the page.
+ */
+ getClientWidth: function() {
+ return Y.Dom.getViewportWidth();
+ },
+
+ /**
+ * Returns the height of the client (viewport).
+ * @method getClientHeight
+ * @deprecated Now using getViewportHeight. This interface left intact for back compat.
+ * @return {Int} The height of the viewable area of the page.
+ */
+ getClientHeight: function() {
+ return Y.Dom.getViewportHeight();
+ },
+
+ /**
+ * Returns a array of HTMLElements with the given class.
+ * For optimized performance, include a tag and/or root node when possible.
+ * Note: This method operates against a live collection, so modifying the
+ * collection in the callback (removing/appending nodes, etc.) will have
+ * side effects. Instead you should iterate the returned nodes array,
+ * as you would with the native "getElementsByTagName" method.
+ * @method getElementsByClassName
+ * @param {String} className The class name to match against
+ * @param {String} tag (optional) The tag name of the elements being collected
+ * @param {String | HTMLElement} root (optional) The HTMLElement or an ID to use as the starting point
+ * @param {Function} apply (optional) A function to apply to each element when found
+ * @return {Array} An array of elements that have the given class name
+ */
+ getElementsByClassName: function(className, tag, root, apply) {
+ className = lang.trim(className);
+ tag = tag || '*';
+ root = (root) ? Y.Dom.get(root) : null || document;
+ if (!root) {
+ return [];
+ }
+
+ var nodes = [],
+ elements = root.getElementsByTagName(tag),
+ re = getClassRegEx(className);
+
+ for (var i = 0, len = elements.length; i < len; ++i) {
+ if ( re.test(elements[i].className) ) {
+ nodes[nodes.length] = elements[i];
+ if (apply) {
+ apply.call(elements[i], elements[i]);
+ }
+ }
+ }
+
+ return nodes;
+ },
+
+ /**
+ * Determines whether an HTMLElement has the given className.
+ * @method hasClass
+ * @param {String | HTMLElement | Array} el The element or collection to test
+ * @param {String} className the class name to search for
+ * @return {Boolean | Array} A boolean value or array of boolean values
+ */
+ hasClass: function(el, className) {
+ var re = getClassRegEx(className);
+
+ var f = function(el) {
+ return re.test(el.className);
+ };
+
+ return Y.Dom.batch(el, f, Y.Dom, true);
+ },
+
+ /**
+ * Adds a class name to a given element or collection of elements.
+ * @method addClass
+ * @param {String | HTMLElement | Array} el The element or collection to add the class to
+ * @param {String} className the class name to add to the class attribute
+ * @return {Boolean | Array} A pass/fail boolean or array of booleans
+ */
+ addClass: function(el, className) {
+ var f = function(el) {
+ if (this.hasClass(el, className)) {
+ return false; // already present
+ }
+
+
+ el.className = lang.trim([el.className, className].join(' '));
+ return true;
+ };
+
+ return Y.Dom.batch(el, f, Y.Dom, true);
+ },
+
+ /**
+ * Removes a class name from a given element or collection of elements.
+ * @method removeClass
+ * @param {String | HTMLElement | Array} el The element or collection to remove the class from
+ * @param {String} className the class name to remove from the class attribute
+ * @return {Boolean | Array} A pass/fail boolean or array of booleans
+ */
+ removeClass: function(el, className) {
+ var re = getClassRegEx(className);
+
+ var f = function(el) {
+ var ret = false,
+ current = el.className;
+
+ if (className && current && this.hasClass(el, className)) {
+
+ el.className = current.replace(re, ' ');
+ if ( this.hasClass(el, className) ) { // in case of multiple adjacent
+ this.removeClass(el, className);
+ }
+
+ el.className = lang.trim(el.className); // remove any trailing spaces
+ if (el.className === '') { // remove class attribute if empty
+ var attr = (el.hasAttribute) ? 'class' : 'className';
+ el.removeAttribute(attr);
+ }
+ ret = true;
+ }
+ return ret;
+ };
+
+ return Y.Dom.batch(el, f, Y.Dom, true);
+ },
+
+ /**
+ * Replace a class with another class for a given element or collection of elements.
+ * If no oldClassName is present, the newClassName is simply added.
+ * @method replaceClass
+ * @param {String | HTMLElement | Array} el The element or collection to remove the class from
+ * @param {String} oldClassName the class name to be replaced
+ * @param {String} newClassName the class name that will be replacing the old class name
+ * @return {Boolean | Array} A pass/fail boolean or array of booleans
+ */
+ replaceClass: function(el, oldClassName, newClassName) {
+ if (!newClassName || oldClassName === newClassName) { // avoid infinite loop
+ return false;
+ }
+
+ var re = getClassRegEx(oldClassName);
+
+ var f = function(el) {
+
+ if ( !this.hasClass(el, oldClassName) ) {
+ this.addClass(el, newClassName); // just add it if nothing to replace
+ return true; // NOTE: return
+ }
+
+ el.className = el.className.replace(re, ' ' + newClassName + ' ');
+
+ if ( this.hasClass(el, oldClassName) ) { // in case of multiple adjacent
+ this.removeClass(el, oldClassName);
+ }
+
+ el.className = lang.trim(el.className); // remove any trailing spaces
+ return true;
+ };
+
+ return Y.Dom.batch(el, f, Y.Dom, true);
+ },
+
+ /**
+ * Returns an ID and applies it to the element "el", if provided.
+ * @method generateId
+ * @param {String | HTMLElement | Array} el (optional) An optional element array of elements to add an ID to (no ID is added if one is already present).
+ * @param {String} prefix (optional) an optional prefix to use (defaults to "yui-gen").
+ * @return {String | Array} The generated ID, or array of generated IDs (or original ID if already present on an element)
+ */
+ generateId: function(el, prefix) {
+ prefix = prefix || 'yui-gen';
+
+ var f = function(el) {
+ if (el && el.id) { // do not override existing ID
+ return el.id;
+ }
+
+ var id = prefix + YAHOO.env._id_counter++;
+
+ if (el) {
+ el.id = id;
+ }
+
+ return id;
+ };
+
+ // batch fails when no element, so just generate and return single ID
+ return Y.Dom.batch(el, f, Y.Dom, true) || f.apply(Y.Dom, arguments);
+ },
+
+ /**
+ * Determines whether an HTMLElement is an ancestor of another HTML element in the DOM hierarchy.
+ * @method isAncestor
+ * @param {String | HTMLElement} haystack The possible ancestor
+ * @param {String | HTMLElement} needle The possible descendent
+ * @return {Boolean} Whether or not the haystack is an ancestor of needle
+ */
+ isAncestor: function(haystack, needle) {
+ haystack = Y.Dom.get(haystack);
+ needle = Y.Dom.get(needle);
+
+ var ret = false;
+
+ if ( (haystack && needle) && (haystack.nodeType && needle.nodeType) ) {
+ if (haystack.contains && haystack !== needle) { // contains returns true when equal
+ ret = haystack.contains(needle);
+ }
+ else if (haystack.compareDocumentPosition) { // gecko
+ ret = !!(haystack.compareDocumentPosition(needle) & 16);
+ }
+ } else {
+ }
+ return ret;
+ },
+
+ /**
+ * Determines whether an HTMLElement is present in the current document.
+ * @method inDocument
+ * @param {String | HTMLElement} el The element to search for
+ * @return {Boolean} Whether or not the element is present in the current document
+ */
+ inDocument: function(el) {
+ return this.isAncestor(document.documentElement, el);
+ },
+
+ /**
+ * Returns a array of HTMLElements that pass the test applied by supplied boolean method.
+ * For optimized performance, include a tag and/or root node when possible.
+ * Note: This method operates against a live collection, so modifying the
+ * collection in the callback (removing/appending nodes, etc.) will have
+ * side effects. Instead you should iterate the returned nodes array,
+ * as you would with the native "getElementsByTagName" method.
+ * @method getElementsBy
+ * @param {Function} method - A boolean method for testing elements which receives the element as its only argument.
+ * @param {String} tag (optional) The tag name of the elements being collected
+ * @param {String | HTMLElement} root (optional) The HTMLElement or an ID to use as the starting point
+ * @param {Function} apply (optional) A function to apply to each element when found
+ * @return {Array} Array of HTMLElements
+ */
+ getElementsBy: function(method, tag, root, apply) {
+ tag = tag || '*';
+ root = (root) ? Y.Dom.get(root) : null || document;
+
+ if (!root) {
+ return [];
+ }
+
+ var nodes = [],
+ elements = root.getElementsByTagName(tag);
+
+ for (var i = 0, len = elements.length; i < len; ++i) {
+ if ( method(elements[i]) ) {
+ nodes[nodes.length] = elements[i];
+ if (apply) {
+ apply(elements[i]);
+ }
+ }
+ }
+
+
+ return nodes;
+ },
+
+ /**
+ * Runs the supplied method against each item in the Collection/Array.
+ * The method is called with the element(s) as the first arg, and the optional param as the second ( method(el, o) ).
+ * @method batch
+ * @param {String | HTMLElement | Array} el (optional) An element or array of elements to apply the method to
+ * @param {Function} method The method to apply to the element(s)
+ * @param {Any} o (optional) An optional arg that is passed to the supplied method
+ * @param {Boolean} override (optional) Whether or not to override the scope of "method" with "o"
+ * @return {Any | Array} The return value(s) from the supplied method
+ */
+ batch: function(el, method, o, override) {
+ el = (el && (el.tagName || el.item)) ? el : Y.Dom.get(el); // skip get() when possible
+
+ if (!el || !method) {
+ return false;
+ }
+ var scope = (override) ? o : window;
+
+ if (el.tagName || el.length === undefined) { // element or not array-like
+ return method.call(scope, el, o);
+ }
+
+ var collection = [];
+
+ for (var i = 0, len = el.length; i < len; ++i) {
+ collection[collection.length] = method.call(scope, el[i], o);
+ }
+
+ return collection;
+ },
+
+ /**
+ * Returns the height of the document.
+ * @method getDocumentHeight
+ * @return {Int} The height of the actual document (which includes the body and its margin).
+ */
+ getDocumentHeight: function() {
+ var scrollHeight = (document.compatMode != 'CSS1Compat') ? document.body.scrollHeight : document.documentElement.scrollHeight;
+
+ var h = Math.max(scrollHeight, Y.Dom.getViewportHeight());
+ return h;
+ },
+
+ /**
+ * Returns the width of the document.
+ * @method getDocumentWidth
+ * @return {Int} The width of the actual document (which includes the body and its margin).
+ */
+ getDocumentWidth: function() {
+ var scrollWidth = (document.compatMode != 'CSS1Compat') ? document.body.scrollWidth : document.documentElement.scrollWidth;
+ var w = Math.max(scrollWidth, Y.Dom.getViewportWidth());
+ return w;
+ },
+
+ /**
+ * Returns the current height of the viewport.
+ * @method getViewportHeight
+ * @return {Int} The height of the viewable area of the page (excludes scrollbars).
+ */
+ getViewportHeight: function() {
+ var height = self.innerHeight; // Safari, Opera
+ var mode = document.compatMode;
+
+ if ( (mode || isIE) && !isOpera ) { // IE, Gecko
+ height = (mode == 'CSS1Compat') ?
+ document.documentElement.clientHeight : // Standards
+ document.body.clientHeight; // Quirks
+ }
+
+ return height;
+ },
+
+ /**
+ * Returns the current width of the viewport.
+ * @method getViewportWidth
+ * @return {Int} The width of the viewable area of the page (excludes scrollbars).
+ */
+
+ getViewportWidth: function() {
+ var width = self.innerWidth; // Safari
+ var mode = document.compatMode;
+
+ if (mode || isIE) { // IE, Gecko, Opera
+ width = (mode == 'CSS1Compat') ?
+ document.documentElement.clientWidth : // Standards
+ document.body.clientWidth; // Quirks
+ }
+ return width;
+ },
+
+ /**
+ * Returns the nearest ancestor that passes the test applied by supplied boolean method.
+ * For performance reasons, IDs are not accepted and argument validation omitted.
+ * @method getAncestorBy
+ * @param {HTMLElement} node The HTMLElement to use as the starting point
+ * @param {Function} method - A boolean method for testing elements which receives the element as its only argument.
+ * @return {Object} HTMLElement or null if not found
+ */
+ getAncestorBy: function(node, method) {
+ while ( (node = node.parentNode) ) { // NOTE: assignment
+ if ( testElement(node, method) ) {
+ return node;
+ }
+ }
+
+ return null;
+ },
+
+ /**
+ * Returns the nearest ancestor with the given className.
+ * @method getAncestorByClassName
+ * @param {String | HTMLElement} node The HTMLElement or an ID to use as the starting point
+ * @param {String} className
+ * @return {Object} HTMLElement
+ */
+ getAncestorByClassName: function(node, className) {
+ node = Y.Dom.get(node);
+ if (!node) {
+ return null;
+ }
+ var method = function(el) { return Y.Dom.hasClass(el, className); };
+ return Y.Dom.getAncestorBy(node, method);
+ },
+
+ /**
+ * Returns the nearest ancestor with the given tagName.
+ * @method getAncestorByTagName
+ * @param {String | HTMLElement} node The HTMLElement or an ID to use as the starting point
+ * @param {String} tagName
+ * @return {Object} HTMLElement
+ */
+ getAncestorByTagName: function(node, tagName) {
+ node = Y.Dom.get(node);
+ if (!node) {
+ return null;
+ }
+ var method = function(el) {
+ return el.tagName && el.tagName.toUpperCase() == tagName.toUpperCase();
+ };
+
+ return Y.Dom.getAncestorBy(node, method);
+ },
+
+ /**
+ * Returns the previous sibling that is an HTMLElement.
+ * For performance reasons, IDs are not accepted and argument validation omitted.
+ * Returns the nearest HTMLElement sibling if no method provided.
+ * @method getPreviousSiblingBy
+ * @param {HTMLElement} node The HTMLElement to use as the starting point
+ * @param {Function} method A boolean function used to test siblings
+ * that receives the sibling node being tested as its only argument
+ * @return {Object} HTMLElement or null if not found
+ */
+ getPreviousSiblingBy: function(node, method) {
+ while (node) {
+ node = node.previousSibling;
+ if ( testElement(node, method) ) {
+ return node;
+ }
+ }
+ return null;
+ },
+
+ /**
+ * Returns the previous sibling that is an HTMLElement
+ * @method getPreviousSibling
+ * @param {String | HTMLElement} node The HTMLElement or an ID to use as the starting point
+ * @return {Object} HTMLElement or null if not found
+ */
+ getPreviousSibling: function(node) {
+ node = Y.Dom.get(node);
+ if (!node) {
+ return null;
+ }
+
+ return Y.Dom.getPreviousSiblingBy(node);
+ },
+
+ /**
+ * Returns the next HTMLElement sibling that passes the boolean method.
+ * For performance reasons, IDs are not accepted and argument validation omitted.
+ * Returns the nearest HTMLElement sibling if no method provided.
+ * @method getNextSiblingBy
+ * @param {HTMLElement} node The HTMLElement to use as the starting point
+ * @param {Function} method A boolean function used to test siblings
+ * that receives the sibling node being tested as its only argument
+ * @return {Object} HTMLElement or null if not found
+ */
+ getNextSiblingBy: function(node, method) {
+ while (node) {
+ node = node.nextSibling;
+ if ( testElement(node, method) ) {
+ return node;
+ }
+ }
+ return null;
+ },
+
+ /**
+ * Returns the next sibling that is an HTMLElement
+ * @method getNextSibling
+ * @param {String | HTMLElement} node The HTMLElement or an ID to use as the starting point
+ * @return {Object} HTMLElement or null if not found
+ */
+ getNextSibling: function(node) {
+ node = Y.Dom.get(node);
+ if (!node) {
+ return null;
+ }
+
+ return Y.Dom.getNextSiblingBy(node);
+ },
+
+ /**
+ * Returns the first HTMLElement child that passes the test method.
+ * @method getFirstChildBy
+ * @param {HTMLElement} node The HTMLElement to use as the starting point
+ * @param {Function} method A boolean function used to test children
+ * that receives the node being tested as its only argument
+ * @return {Object} HTMLElement or null if not found
+ */
+ getFirstChildBy: function(node, method) {
+ var child = ( testElement(node.firstChild, method) ) ? node.firstChild : null;
+ return child || Y.Dom.getNextSiblingBy(node.firstChild, method);
+ },
+
+ /**
+ * Returns the first HTMLElement child.
+ * @method getFirstChild
+ * @param {String | HTMLElement} node The HTMLElement or an ID to use as the starting point
+ * @return {Object} HTMLElement or null if not found
+ */
+ getFirstChild: function(node, method) {
+ node = Y.Dom.get(node);
+ if (!node) {
+ return null;
+ }
+ return Y.Dom.getFirstChildBy(node);
+ },
+
+ /**
+ * Returns the last HTMLElement child that passes the test method.
+ * @method getLastChildBy
+ * @param {HTMLElement} node The HTMLElement to use as the starting point
+ * @param {Function} method A boolean function used to test children
+ * that receives the node being tested as its only argument
+ * @return {Object} HTMLElement or null if not found
+ */
+ getLastChildBy: function(node, method) {
+ if (!node) {
+ return null;
+ }
+ var child = ( testElement(node.lastChild, method) ) ? node.lastChild : null;
+ return child || Y.Dom.getPreviousSiblingBy(node.lastChild, method);
+ },
+
+ /**
+ * Returns the last HTMLElement child.
+ * @method getLastChild
+ * @param {String | HTMLElement} node The HTMLElement or an ID to use as the starting point
+ * @return {Object} HTMLElement or null if not found
+ */
+ getLastChild: function(node) {
+ node = Y.Dom.get(node);
+ return Y.Dom.getLastChildBy(node);
+ },
+
+ /**
+ * Returns an array of HTMLElement childNodes that pass the test method.
+ * @method getChildrenBy
+ * @param {HTMLElement} node The HTMLElement to start from
+ * @param {Function} method A boolean function used to test children
+ * that receives the node being tested as its only argument
+ * @return {Array} A static array of HTMLElements
+ */
+ getChildrenBy: function(node, method) {
+ var child = Y.Dom.getFirstChildBy(node, method);
+ var children = child ? [child] : [];
+
+ Y.Dom.getNextSiblingBy(child, function(node) {
+ if ( !method || method(node) ) {
+ children[children.length] = node;
+ }
+ return false; // fail test to collect all children
+ });
+
+ return children;
+ },
+
+ /**
+ * Returns an array of HTMLElement childNodes.
+ * @method getChildren
+ * @param {String | HTMLElement} node The HTMLElement or an ID to use as the starting point
+ * @return {Array} A static array of HTMLElements
+ */
+ getChildren: function(node) {
+ node = Y.Dom.get(node);
+ if (!node) {
+ }
+
+ return Y.Dom.getChildrenBy(node);
+ },
+
+ /**
+ * Returns the left scroll value of the document
+ * @method getDocumentScrollLeft
+ * @param {HTMLDocument} document (optional) The document to get the scroll value of
+ * @return {Int} The amount that the document is scrolled to the left
+ */
+ getDocumentScrollLeft: function(doc) {
+ doc = doc || document;
+ return Math.max(doc.documentElement.scrollLeft, doc.body.scrollLeft);
+ },
+
+ /**
+ * Returns the top scroll value of the document
+ * @method getDocumentScrollTop
+ * @param {HTMLDocument} document (optional) The document to get the scroll value of
+ * @return {Int} The amount that the document is scrolled to the top
+ */
+ getDocumentScrollTop: function(doc) {
+ doc = doc || document;
+ return Math.max(doc.documentElement.scrollTop, doc.body.scrollTop);
+ },
+
+ /**
+ * Inserts the new node as the previous sibling of the reference node
+ * @method insertBefore
+ * @param {String | HTMLElement} newNode The node to be inserted
+ * @param {String | HTMLElement} referenceNode The node to insert the new node before
+ * @return {HTMLElement} The node that was inserted (or null if insert fails)
+ */
+ insertBefore: function(newNode, referenceNode) {
+ newNode = Y.Dom.get(newNode);
+ referenceNode = Y.Dom.get(referenceNode);
+
+ if (!newNode || !referenceNode || !referenceNode.parentNode) {
+ return null;
+ }
+
+ return referenceNode.parentNode.insertBefore(newNode, referenceNode);
+ },
+
+ /**
+ * Inserts the new node as the next sibling of the reference node
+ * @method insertAfter
+ * @param {String | HTMLElement} newNode The node to be inserted
+ * @param {String | HTMLElement} referenceNode The node to insert the new node after
+ * @return {HTMLElement} The node that was inserted (or null if insert fails)
+ */
+ insertAfter: function(newNode, referenceNode) {
+ newNode = Y.Dom.get(newNode);
+ referenceNode = Y.Dom.get(referenceNode);
+
+ if (!newNode || !referenceNode || !referenceNode.parentNode) {
+ return null;
+ }
+
+ if (referenceNode.nextSibling) {
+ return referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);
+ } else {
+ return referenceNode.parentNode.appendChild(newNode);
+ }
+ },
+
+ /**
+ * Creates a Region based on the viewport relative to the document.
+ * @method getClientRegion
+ * @return {Region} A Region object representing the viewport which accounts for document scroll
+ */
+ getClientRegion: function() {
+ var t = Y.Dom.getDocumentScrollTop(),
+ l = Y.Dom.getDocumentScrollLeft(),
+ r = Y.Dom.getViewportWidth() + l,
+ b = Y.Dom.getViewportHeight() + t;
+
+ return new Y.Region(t, r, b, l);
+ }
+ };
+
+ var getXY = function() {
+ if (document.documentElement.getBoundingClientRect) { // IE
+ return function(el) {
+ var box = el.getBoundingClientRect(),
+ round = Math.round;
+
+ var rootNode = el.ownerDocument;
+ return [round(box.left + Y.Dom.getDocumentScrollLeft(rootNode)), round(box.top +
+ Y.Dom.getDocumentScrollTop(rootNode))];
+ };
+ } else {
+ return function(el) { // manually calculate by crawling up offsetParents
+ var pos = [el.offsetLeft, el.offsetTop];
+ var parentNode = el.offsetParent;
+
+ // safari: subtract body offsets if el is abs (or any offsetParent), unless body is offsetParent
+ var accountForBody = (isSafari &&
+ Y.Dom.getStyle(el, 'position') == 'absolute' &&
+ el.offsetParent == el.ownerDocument.body);
+
+ if (parentNode != el) {
+ while (parentNode) {
+ pos[0] += parentNode.offsetLeft;
+ pos[1] += parentNode.offsetTop;
+ if (!accountForBody && isSafari &&
+ Y.Dom.getStyle(parentNode,'position') == 'absolute' ) {
+ accountForBody = true;
+ }
+ parentNode = parentNode.offsetParent;
+ }
+ }
+
+ if (accountForBody) { //safari doubles in this case
+ pos[0] -= el.ownerDocument.body.offsetLeft;
+ pos[1] -= el.ownerDocument.body.offsetTop;
+ }
+ parentNode = el.parentNode;
+
+ // account for any scrolled ancestors
+ while ( parentNode.tagName && !patterns.ROOT_TAG.test(parentNode.tagName) )
+ {
+ if (parentNode.scrollTop || parentNode.scrollLeft) {
+ pos[0] -= parentNode.scrollLeft;
+ pos[1] -= parentNode.scrollTop;
+ }
+
+ parentNode = parentNode.parentNode;
+ }
+
+ return pos;
+ };
+ }
+ }() // NOTE: Executing for loadtime branching
+})();
+/**
+ * A region is a representation of an object on a grid. It is defined
+ * by the top, right, bottom, left extents, so is rectangular by default. If
+ * other shapes are required, this class could be extended to support it.
+ * @namespace YAHOO.util
+ * @class Region
+ * @param {Int} t the top extent
+ * @param {Int} r the right extent
+ * @param {Int} b the bottom extent
+ * @param {Int} l the left extent
+ * @constructor
+ */
+YAHOO.util.Region = function(t, r, b, l) {
+
+ /**
+ * The region's top extent
+ * @property top
+ * @type Int
+ */
+ this.top = t;
+
+ /**
+ * The region's top extent as index, for symmetry with set/getXY
+ * @property 1
+ * @type Int
+ */
+ this[1] = t;
+
+ /**
+ * The region's right extent
+ * @property right
+ * @type int
+ */
+ this.right = r;
+
+ /**
+ * The region's bottom extent
+ * @property bottom
+ * @type Int
+ */
+ this.bottom = b;
+
+ /**
+ * The region's left extent
+ * @property left
+ * @type Int
+ */
+ this.left = l;
+
+ /**
+ * The region's left extent as index, for symmetry with set/getXY
+ * @property 0
+ * @type Int
+ */
+ this[0] = l;
+};
+
+/**
+ * Returns true if this region contains the region passed in
+ * @method contains
+ * @param {Region} region The region to evaluate
+ * @return {Boolean} True if the region is contained with this region,
+ * else false
+ */
+YAHOO.util.Region.prototype.contains = function(region) {
+ return ( region.left >= this.left &&
+ region.right <= this.right &&
+ region.top >= this.top &&
+ region.bottom <= this.bottom );
+
+};
+
+/**
+ * Returns the area of the region
+ * @method getArea
+ * @return {Int} the region's area
+ */
+YAHOO.util.Region.prototype.getArea = function() {
+ return ( (this.bottom - this.top) * (this.right - this.left) );
+};
+
+/**
+ * Returns the region where the passed in region overlaps with this one
+ * @method intersect
+ * @param {Region} region The region that intersects
+ * @return {Region} The overlap region, or null if there is no overlap
+ */
+YAHOO.util.Region.prototype.intersect = function(region) {
+ var t = Math.max( this.top, region.top );
+ var r = Math.min( this.right, region.right );
+ var b = Math.min( this.bottom, region.bottom );
+ var l = Math.max( this.left, region.left );
+
+ if (b >= t && r >= l) {
+ return new YAHOO.util.Region(t, r, b, l);
+ } else {
+ return null;
+ }
+};
+
+/**
+ * Returns the region representing the smallest region that can contain both
+ * the passed in region and this region.
+ * @method union
+ * @param {Region} region The region that to create the union with
+ * @return {Region} The union region
+ */
+YAHOO.util.Region.prototype.union = function(region) {
+ var t = Math.min( this.top, region.top );
+ var r = Math.max( this.right, region.right );
+ var b = Math.max( this.bottom, region.bottom );
+ var l = Math.min( this.left, region.left );
+
+ return new YAHOO.util.Region(t, r, b, l);
+};
+
+/**
+ * toString
+ * @method toString
+ * @return string the region properties
+ */
+YAHOO.util.Region.prototype.toString = function() {
+ return ( "Region {" +
+ "top: " + this.top +
+ ", right: " + this.right +
+ ", bottom: " + this.bottom +
+ ", left: " + this.left +
+ "}" );
+};
+
+/**
+ * Returns a region that is occupied by the DOM element
+ * @method getRegion
+ * @param {HTMLElement} el The element
+ * @return {Region} The region that the element occupies
+ * @static
+ */
+YAHOO.util.Region.getRegion = function(el) {
+ var p = YAHOO.util.Dom.getXY(el);
+
+ var t = p[1];
+ var r = p[0] + el.offsetWidth;
+ var b = p[1] + el.offsetHeight;
+ var l = p[0];
+
+ return new YAHOO.util.Region(t, r, b, l);
+};
+
+/////////////////////////////////////////////////////////////////////////////
+
+
+/**
+ * A point is a region that is special in that it represents a single point on
+ * the grid.
+ * @namespace YAHOO.util
+ * @class Point
+ * @param {Int} x The X position of the point
+ * @param {Int} y The Y position of the point
+ * @constructor
+ * @extends YAHOO.util.Region
+ */
+YAHOO.util.Point = function(x, y) {
+ if (YAHOO.lang.isArray(x)) { // accept input from Dom.getXY, Event.getXY, etc.
+ y = x[1]; // dont blow away x yet
+ x = x[0];
+ }
+
+ /**
+ * The X position of the point, which is also the right, left and index zero (for Dom.getXY symmetry)
+ * @property x
+ * @type Int
+ */
+
+ this.x = this.right = this.left = this[0] = x;
+
+ /**
+ * The Y position of the point, which is also the top, bottom and index one (for Dom.getXY symmetry)
+ * @property y
+ * @type Int
+ */
+ this.y = this.top = this.bottom = this[1] = y;
+};
+
+YAHOO.util.Point.prototype = new YAHOO.util.Region();
+
+YAHOO.register("dom", YAHOO.util.Dom, {version: "2.6.0", build: "1321"});
diff --git a/testing/talos/talos/tests/dromaeo/lib/yui-event.js b/testing/talos/talos/tests/dromaeo/lib/yui-event.js
new file mode 100644
index 0000000000..17eb097851
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/lib/yui-event.js
@@ -0,0 +1,2562 @@
+/*
+Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.6.0
+*/
+
+/**
+ * The CustomEvent class lets you define events for your application
+ * that can be subscribed to by one or more independent component.
+ *
+ * @param {String} type The type of event, which is passed to the callback
+ * when the event fires
+ * @param {Object} oScope The context the event will fire from. "this" will
+ * refer to this object in the callback. Default value:
+ * the window object. The listener can override this.
+ * @param {boolean} silent pass true to prevent the event from writing to
+ * the debugsystem
+ * @param {int} signature the signature that the custom event subscriber
+ * will receive. YAHOO.util.CustomEvent.LIST or
+ * YAHOO.util.CustomEvent.FLAT. The default is
+ * YAHOO.util.CustomEvent.LIST.
+ * @namespace YAHOO.util
+ * @class CustomEvent
+ * @constructor
+ */
+YAHOO.util.CustomEvent = function(type, oScope, silent, signature) {
+
+ /**
+ * The type of event, returned to subscribers when the event fires
+ * @property type
+ * @type string
+ */
+ this.type = type;
+
+ /**
+ * The scope the the event will fire from by default. Defaults to the window
+ * obj
+ * @property scope
+ * @type object
+ */
+ this.scope = oScope || window;
+
+ /**
+ * By default all custom events are logged in the debug build, set silent
+ * to true to disable debug outpu for this event.
+ * @property silent
+ * @type boolean
+ */
+ this.silent = silent;
+
+ /**
+ * Custom events support two styles of arguments provided to the event
+ * subscribers.
+ * <ul>
+ * <li>YAHOO.util.CustomEvent.LIST:
+ * <ul>
+ * <li>param1: event name</li>
+ * <li>param2: array of arguments sent to fire</li>
+ * <li>param3: <optional> a custom object supplied by the subscriber</li>
+ * </ul>
+ * </li>
+ * <li>YAHOO.util.CustomEvent.FLAT
+ * <ul>
+ * <li>param1: the first argument passed to fire. If you need to
+ * pass multiple parameters, use and array or object literal</li>
+ * <li>param2: <optional> a custom object supplied by the subscriber</li>
+ * </ul>
+ * </li>
+ * </ul>
+ * @property signature
+ * @type int
+ */
+ this.signature = signature || YAHOO.util.CustomEvent.LIST;
+
+ /**
+ * The subscribers to this event
+ * @property subscribers
+ * @type Subscriber[]
+ */
+ this.subscribers = [];
+
+ if (!this.silent) {
+ }
+
+ var onsubscribeType = "_YUICEOnSubscribe";
+
+ // Only add subscribe events for events that are not generated by
+ // CustomEvent
+ if (type !== onsubscribeType) {
+
+ /**
+ * Custom events provide a custom event that fires whenever there is
+ * a new subscriber to the event. This provides an opportunity to
+ * handle the case where there is a non-repeating event that has
+ * already fired has a new subscriber.
+ *
+ * @event subscribeEvent
+ * @type YAHOO.util.CustomEvent
+ * @param {Function} fn The function to execute
+ * @param {Object} obj An object to be passed along when the event
+ * fires
+ * @param {boolean|Object} override If true, the obj passed in becomes
+ * the execution scope of the listener.
+ * if an object, that object becomes the
+ * the execution scope.
+ */
+ this.subscribeEvent =
+ new YAHOO.util.CustomEvent(onsubscribeType, this, true);
+
+ }
+
+
+ /**
+ * In order to make it possible to execute the rest of the subscriber
+ * stack when one thows an exception, the subscribers exceptions are
+ * caught. The most recent exception is stored in this property
+ * @property lastError
+ * @type Error
+ */
+ this.lastError = null;
+};
+
+/**
+ * Subscriber listener sigature constant. The LIST type returns three
+ * parameters: the event type, the array of args passed to fire, and
+ * the optional custom object
+ * @property YAHOO.util.CustomEvent.LIST
+ * @static
+ * @type int
+ */
+YAHOO.util.CustomEvent.LIST = 0;
+
+/**
+ * Subscriber listener sigature constant. The FLAT type returns two
+ * parameters: the first argument passed to fire and the optional
+ * custom object
+ * @property YAHOO.util.CustomEvent.FLAT
+ * @static
+ * @type int
+ */
+YAHOO.util.CustomEvent.FLAT = 1;
+
+YAHOO.util.CustomEvent.prototype = {
+
+ /**
+ * Subscribes the caller to this event
+ * @method subscribe
+ * @param {Function} fn The function to execute
+ * @param {Object} obj An object to be passed along when the event
+ * fires
+ * @param {boolean|Object} override If true, the obj passed in becomes
+ * the execution scope of the listener.
+ * if an object, that object becomes the
+ * the execution scope.
+ */
+ subscribe: function(fn, obj, override) {
+
+ if (!fn) {
+throw new Error("Invalid callback for subscriber to '" + this.type + "'");
+ }
+
+ if (this.subscribeEvent) {
+ this.subscribeEvent.fire(fn, obj, override);
+ }
+
+ this.subscribers.push( new YAHOO.util.Subscriber(fn, obj, override) );
+ },
+
+ /**
+ * Unsubscribes subscribers.
+ * @method unsubscribe
+ * @param {Function} fn The subscribed function to remove, if not supplied
+ * all will be removed
+ * @param {Object} obj The custom object passed to subscribe. This is
+ * optional, but if supplied will be used to
+ * disambiguate multiple listeners that are the same
+ * (e.g., you subscribe many object using a function
+ * that lives on the prototype)
+ * @return {boolean} True if the subscriber was found and detached.
+ */
+ unsubscribe: function(fn, obj) {
+
+ if (!fn) {
+ return this.unsubscribeAll();
+ }
+
+ var found = false;
+ for (var i=0, len=this.subscribers.length; i<len; ++i) {
+ var s = this.subscribers[i];
+ if (s && s.contains(fn, obj)) {
+ this._delete(i);
+ found = true;
+ }
+ }
+
+ return found;
+ },
+
+ /**
+ * Notifies the subscribers. The callback functions will be executed
+ * from the scope specified when the event was created, and with the
+ * following parameters:
+ * <ul>
+ * <li>The type of event</li>
+ * <li>All of the arguments fire() was executed with as an array</li>
+ * <li>The custom object (if any) that was passed into the subscribe()
+ * method</li>
+ * </ul>
+ * @method fire
+ * @param {Object*} arguments an arbitrary set of parameters to pass to
+ * the handler.
+ * @return {boolean} false if one of the subscribers returned false,
+ * true otherwise
+ */
+ fire: function() {
+
+ this.lastError = null;
+
+ var errors = [],
+ len=this.subscribers.length;
+
+ if (!len && this.silent) {
+ return true;
+ }
+
+ var args=[].slice.call(arguments, 0), ret=true, i, rebuild=false;
+
+ if (!this.silent) {
+ }
+
+ // make a copy of the subscribers so that there are
+ // no index problems if one subscriber removes another.
+ var subs = this.subscribers.slice(), throwErrors = YAHOO.util.Event.throwErrors;
+
+ for (i=0; i<len; ++i) {
+ var s = subs[i];
+ if (!s) {
+ rebuild=true;
+ } else {
+ if (!this.silent) {
+ }
+
+ var scope = s.getScope(this.scope);
+
+ if (this.signature == YAHOO.util.CustomEvent.FLAT) {
+ var param = null;
+ if (args.length > 0) {
+ param = args[0];
+ }
+
+ try {
+ ret = s.fn.call(scope, param, s.obj);
+ } catch(e) {
+ this.lastError = e;
+ // errors.push(e);
+ if (throwErrors) {
+ throw e;
+ }
+ }
+ } else {
+ try {
+ ret = s.fn.call(scope, this.type, args, s.obj);
+ } catch(ex) {
+ this.lastError = ex;
+ if (throwErrors) {
+ throw ex;
+ }
+ }
+ }
+
+ if (false === ret) {
+ if (!this.silent) {
+ }
+
+ break;
+ // return false;
+ }
+ }
+ }
+
+ return (ret !== false);
+ },
+
+ /**
+ * Removes all listeners
+ * @method unsubscribeAll
+ * @return {int} The number of listeners unsubscribed
+ */
+ unsubscribeAll: function() {
+ for (var i=this.subscribers.length-1; i>-1; i--) {
+ this._delete(i);
+ }
+
+ this.subscribers=[];
+
+ return i;
+ },
+
+ /**
+ * @method _delete
+ * @private
+ */
+ _delete: function(index) {
+ var s = this.subscribers[index];
+ if (s) {
+ delete s.fn;
+ delete s.obj;
+ }
+
+ // this.subscribers[index]=null;
+ this.subscribers.splice(index, 1);
+ },
+
+ /**
+ * @method toString
+ */
+ toString: function() {
+ return "CustomEvent: " + "'" + this.type + "', " +
+ "scope: " + this.scope;
+
+ }
+};
+
+/////////////////////////////////////////////////////////////////////
+
+/**
+ * Stores the subscriber information to be used when the event fires.
+ * @param {Function} fn The function to execute
+ * @param {Object} obj An object to be passed along when the event fires
+ * @param {boolean} override If true, the obj passed in becomes the execution
+ * scope of the listener
+ * @class Subscriber
+ * @constructor
+ */
+YAHOO.util.Subscriber = function(fn, obj, override) {
+
+ /**
+ * The callback that will be execute when the event fires
+ * @property fn
+ * @type function
+ */
+ this.fn = fn;
+
+ /**
+ * An optional custom object that will passed to the callback when
+ * the event fires
+ * @property obj
+ * @type object
+ */
+ this.obj = YAHOO.lang.isUndefined(obj) ? null : obj;
+
+ /**
+ * The default execution scope for the event listener is defined when the
+ * event is created (usually the object which contains the event).
+ * By setting override to true, the execution scope becomes the custom
+ * object passed in by the subscriber. If override is an object, that
+ * object becomes the scope.
+ * @property override
+ * @type boolean|object
+ */
+ this.override = override;
+
+};
+
+/**
+ * Returns the execution scope for this listener. If override was set to true
+ * the custom obj will be the scope. If override is an object, that is the
+ * scope, otherwise the default scope will be used.
+ * @method getScope
+ * @param {Object} defaultScope the scope to use if this listener does not
+ * override it.
+ */
+YAHOO.util.Subscriber.prototype.getScope = function(defaultScope) {
+ if (this.override) {
+ if (this.override === true) {
+ return this.obj;
+ } else {
+ return this.override;
+ }
+ }
+ return defaultScope;
+};
+
+/**
+ * Returns true if the fn and obj match this objects properties.
+ * Used by the unsubscribe method to match the right subscriber.
+ *
+ * @method contains
+ * @param {Function} fn the function to execute
+ * @param {Object} obj an object to be passed along when the event fires
+ * @return {boolean} true if the supplied arguments match this
+ * subscriber's signature.
+ */
+YAHOO.util.Subscriber.prototype.contains = function(fn, obj) {
+ if (obj) {
+ return (this.fn == fn && this.obj == obj);
+ } else {
+ return (this.fn == fn);
+ }
+};
+
+/**
+ * @method toString
+ */
+YAHOO.util.Subscriber.prototype.toString = function() {
+ return "Subscriber { obj: " + this.obj +
+ ", override: " + (this.override || "no") + " }";
+};
+
+/**
+ * The Event Utility provides utilities for managing DOM Events and tools
+ * for building event systems
+ *
+ * @module event
+ * @title Event Utility
+ * @namespace YAHOO.util
+ * @requires yahoo
+ */
+
+// The first instance of Event will win if it is loaded more than once.
+// @TODO this needs to be changed so that only the state data that needs to
+// be preserved is kept, while methods are overwritten/added as needed.
+// This means that the module pattern can't be used.
+if (!YAHOO.util.Event) {
+
+/**
+ * The event utility provides functions to add and remove event listeners,
+ * event cleansing. It also tries to automatically remove listeners it
+ * registers during the unload event.
+ *
+ * @class Event
+ * @static
+ */
+ YAHOO.util.Event = function() {
+
+ /**
+ * True after the onload event has fired
+ * @property loadComplete
+ * @type boolean
+ * @static
+ * @private
+ */
+ var loadComplete = false;
+
+ /**
+ * Cache of wrapped listeners
+ * @property listeners
+ * @type array
+ * @static
+ * @private
+ */
+ var listeners = [];
+
+ /**
+ * User-defined unload function that will be fired before all events
+ * are detached
+ * @property unloadListeners
+ * @type array
+ * @static
+ * @private
+ */
+ var unloadListeners = [];
+
+ /**
+ * Cache of DOM0 event handlers to work around issues with DOM2 events
+ * in Safari
+ * @property legacyEvents
+ * @static
+ * @private
+ */
+ var legacyEvents = [];
+
+ /**
+ * Listener stack for DOM0 events
+ * @property legacyHandlers
+ * @static
+ * @private
+ */
+ var legacyHandlers = [];
+
+ /**
+ * The number of times to poll after window.onload. This number is
+ * increased if additional late-bound handlers are requested after
+ * the page load.
+ * @property retryCount
+ * @static
+ * @private
+ */
+ var retryCount = 0;
+
+ /**
+ * onAvailable listeners
+ * @property onAvailStack
+ * @static
+ * @private
+ */
+ var onAvailStack = [];
+
+ /**
+ * Lookup table for legacy events
+ * @property legacyMap
+ * @static
+ * @private
+ */
+ var legacyMap = [];
+
+ /**
+ * Counter for auto id generation
+ * @property counter
+ * @static
+ * @private
+ */
+ var counter = 0;
+
+ /**
+ * Normalized keycodes for webkit/safari
+ * @property webkitKeymap
+ * @type {int: int}
+ * @private
+ * @static
+ * @final
+ */
+ var webkitKeymap = {
+ 63232: 38, // up
+ 63233: 40, // down
+ 63234: 37, // left
+ 63235: 39, // right
+ 63276: 33, // page up
+ 63277: 34, // page down
+ 25: 9 // SHIFT-TAB (Safari provides a different key code in
+ // this case, even though the shiftKey modifier is set)
+ };
+
+ // String constants used by the addFocusListener and removeFocusListener methods
+ var _FOCUS = YAHOO.env.ua.ie ? "focusin" : "focus";
+ var _BLUR = YAHOO.env.ua.ie ? "focusout" : "blur";
+
+ return {
+
+ /**
+ * The number of times we should look for elements that are not
+ * in the DOM at the time the event is requested after the document
+ * has been loaded. The default is 2000@amp;20 ms, so it will poll
+ * for 40 seconds or until all outstanding handlers are bound
+ * (whichever comes first).
+ * @property POLL_RETRYS
+ * @type int
+ * @static
+ * @final
+ */
+ POLL_RETRYS: 2000,
+
+ /**
+ * The poll interval in milliseconds
+ * @property POLL_INTERVAL
+ * @type int
+ * @static
+ * @final
+ */
+ POLL_INTERVAL: 20,
+
+ /**
+ * Element to bind, int constant
+ * @property EL
+ * @type int
+ * @static
+ * @final
+ */
+ EL: 0,
+
+ /**
+ * Type of event, int constant
+ * @property TYPE
+ * @type int
+ * @static
+ * @final
+ */
+ TYPE: 1,
+
+ /**
+ * Function to execute, int constant
+ * @property FN
+ * @type int
+ * @static
+ * @final
+ */
+ FN: 2,
+
+ /**
+ * Function wrapped for scope correction and cleanup, int constant
+ * @property WFN
+ * @type int
+ * @static
+ * @final
+ */
+ WFN: 3,
+
+ /**
+ * Object passed in by the user that will be returned as a
+ * parameter to the callback, int constant. Specific to
+ * unload listeners
+ * @property OBJ
+ * @type int
+ * @static
+ * @final
+ */
+ UNLOAD_OBJ: 3,
+
+ /**
+ * Adjusted scope, either the element we are registering the event
+ * on or the custom object passed in by the listener, int constant
+ * @property ADJ_SCOPE
+ * @type int
+ * @static
+ * @final
+ */
+ ADJ_SCOPE: 4,
+
+ /**
+ * The original obj passed into addListener
+ * @property OBJ
+ * @type int
+ * @static
+ * @final
+ */
+ OBJ: 5,
+
+ /**
+ * The original scope parameter passed into addListener
+ * @property OVERRIDE
+ * @type int
+ * @static
+ * @final
+ */
+ OVERRIDE: 6,
+
+ /**
+ * The original capture parameter passed into _addListener
+ * @property CAPTURE
+ * @type int
+ * @static
+ * @final
+ */
+ CAPTURE: 7,
+
+
+ /**
+ * addListener/removeListener can throw errors in unexpected scenarios.
+ * These errors are suppressed, the method returns false, and this property
+ * is set
+ * @property lastError
+ * @static
+ * @type Error
+ */
+ lastError: null,
+
+ /**
+ * Safari detection
+ * @property isSafari
+ * @private
+ * @static
+ * @deprecated use YAHOO.env.ua.webkit
+ */
+ isSafari: YAHOO.env.ua.webkit,
+
+ /**
+ * webkit version
+ * @property webkit
+ * @type string
+ * @private
+ * @static
+ * @deprecated use YAHOO.env.ua.webkit
+ */
+ webkit: YAHOO.env.ua.webkit,
+
+ /**
+ * IE detection
+ * @property isIE
+ * @private
+ * @static
+ * @deprecated use YAHOO.env.ua.ie
+ */
+ isIE: YAHOO.env.ua.ie,
+
+ /**
+ * poll handle
+ * @property _interval
+ * @static
+ * @private
+ */
+ _interval: null,
+
+ /**
+ * document readystate poll handle
+ * @property _dri
+ * @static
+ * @private
+ */
+ _dri: null,
+
+ /**
+ * True when the document is initially usable
+ * @property DOMReady
+ * @type boolean
+ * @static
+ */
+ DOMReady: false,
+
+ /**
+ * Errors thrown by subscribers of custom events are caught
+ * and the error message is written to the debug console. If
+ * this property is set to true, it will also re-throw the
+ * error.
+ * @property throwErrors
+ * @type boolean
+ * @default false
+ */
+ throwErrors: false,
+
+ /**
+ * @method startInterval
+ * @static
+ * @private
+ */
+ startInterval: function() {
+ if (!this._interval) {
+ var self = this;
+ var callback = function() { self._tryPreloadAttach(); };
+ this._interval = setInterval(callback, this.POLL_INTERVAL);
+ }
+ },
+
+ /**
+ * Executes the supplied callback when the item with the supplied
+ * id is found. This is meant to be used to execute behavior as
+ * soon as possible as the page loads. If you use this after the
+ * initial page load it will poll for a fixed time for the element.
+ * The number of times it will poll and the frequency are
+ * configurable. By default it will poll for 10 seconds.
+ *
+ * <p>The callback is executed with a single parameter:
+ * the custom object parameter, if provided.</p>
+ *
+ * @method onAvailable
+ *
+ * @param {string||string[]} p_id the id of the element, or an array
+ * of ids to look for.
+ * @param {function} p_fn what to execute when the element is found.
+ * @param {object} p_obj an optional object to be passed back as
+ * a parameter to p_fn.
+ * @param {boolean|object} p_override If set to true, p_fn will execute
+ * in the scope of p_obj, if set to an object it
+ * will execute in the scope of that object
+ * @param checkContent {boolean} check child node readiness (onContentReady)
+ * @static
+ */
+ onAvailable: function(p_id, p_fn, p_obj, p_override, checkContent) {
+
+ var a = (YAHOO.lang.isString(p_id)) ? [p_id] : p_id;
+
+ for (var i=0; i<a.length; i=i+1) {
+ onAvailStack.push({id: a[i],
+ fn: p_fn,
+ obj: p_obj,
+ override: p_override,
+ checkReady: checkContent });
+ }
+
+ retryCount = this.POLL_RETRYS;
+
+ this.startInterval();
+ },
+
+ /**
+ * Works the same way as onAvailable, but additionally checks the
+ * state of sibling elements to determine if the content of the
+ * available element is safe to modify.
+ *
+ * <p>The callback is executed with a single parameter:
+ * the custom object parameter, if provided.</p>
+ *
+ * @method onContentReady
+ *
+ * @param {string} p_id the id of the element to look for.
+ * @param {function} p_fn what to execute when the element is ready.
+ * @param {object} p_obj an optional object to be passed back as
+ * a parameter to p_fn.
+ * @param {boolean|object} p_override If set to true, p_fn will execute
+ * in the scope of p_obj. If an object, p_fn will
+ * exectute in the scope of that object
+ *
+ * @static
+ */
+ onContentReady: function(p_id, p_fn, p_obj, p_override) {
+ this.onAvailable(p_id, p_fn, p_obj, p_override, true);
+ },
+
+ /**
+ * Executes the supplied callback when the DOM is first usable. This
+ * will execute immediately if called after the DOMReady event has
+ * fired. @todo the DOMContentReady event does not fire when the
+ * script is dynamically injected into the page. This means the
+ * DOMReady custom event will never fire in FireFox or Opera when the
+ * library is injected. It _will_ fire in Safari, and the IE
+ * implementation would allow for us to fire it if the defered script
+ * is not available. We want this to behave the same in all browsers.
+ * Is there a way to identify when the script has been injected
+ * instead of included inline? Is there a way to know whether the
+ * window onload event has fired without having had a listener attached
+ * to it when it did so?
+ *
+ * <p>The callback is a CustomEvent, so the signature is:</p>
+ * <p>type &lt;string&gt;, args &lt;array&gt;, customobject &lt;object&gt;</p>
+ * <p>For DOMReady events, there are no fire argments, so the
+ * signature is:</p>
+ * <p>"DOMReady", [], obj</p>
+ *
+ *
+ * @method onDOMReady
+ *
+ * @param {function} p_fn what to execute when the element is found.
+ * @param {object} p_obj an optional object to be passed back as
+ * a parameter to p_fn.
+ * @param {boolean|object} p_scope If set to true, p_fn will execute
+ * in the scope of p_obj, if set to an object it
+ * will execute in the scope of that object
+ *
+ * @static
+ */
+ onDOMReady: function(p_fn, p_obj, p_override) {
+ if (this.DOMReady) {
+ setTimeout(function() {
+ var s = window;
+ if (p_override) {
+ if (p_override === true) {
+ s = p_obj;
+ } else {
+ s = p_override;
+ }
+ }
+ p_fn.call(s, "DOMReady", [], p_obj);
+ }, 0);
+ } else {
+ this.DOMReadyEvent.subscribe(p_fn, p_obj, p_override);
+ }
+ },
+
+
+ /**
+ * Appends an event handler
+ *
+ * @method _addListener
+ *
+ * @param {String|HTMLElement|Array|NodeList} el An id, an element
+ * reference, or a collection of ids and/or elements to assign the
+ * listener to.
+ * @param {String} sType The type of event to append
+ * @param {Function} fn The method the event invokes
+ * @param {Object} obj An arbitrary object that will be
+ * passed as a parameter to the handler
+ * @param {Boolean|object} override If true, the obj passed in becomes
+ * the execution scope of the listener. If an
+ * object, this object becomes the execution
+ * scope.
+ * @param {boolen} capture capture or bubble phase
+ * @return {Boolean} True if the action was successful or defered,
+ * false if one or more of the elements
+ * could not have the listener attached,
+ * or if the operation throws an exception.
+ * @private
+ * @static
+ */
+ _addListener: function(el, sType, fn, obj, override, capture) {
+
+ if (!fn || !fn.call) {
+ return false;
+ }
+
+ // The el argument can be an array of elements or element ids.
+ if ( this._isValidCollection(el)) {
+ var ok = true;
+ for (var i=0,len=el.length; i<len; ++i) {
+ ok = this._addListener(el[i],
+ sType,
+ fn,
+ obj,
+ override,
+ capture) && ok;
+ }
+ return ok;
+
+ } else if (YAHOO.lang.isString(el)) {
+ var oEl = this.getEl(el);
+ // If the el argument is a string, we assume it is
+ // actually the id of the element. If the page is loaded
+ // we convert el to the actual element, otherwise we
+ // defer attaching the event until onload event fires
+
+ // check to see if we need to delay hooking up the event
+ // until after the page loads.
+ if (oEl) {
+ el = oEl;
+ } else {
+ // defer adding the event until the element is available
+ this.onAvailable(el, function() {
+ YAHOO.util.Event._addListener(el, sType, fn, obj, override, capture);
+ });
+
+ return true;
+ }
+ }
+
+ // Element should be an html element or an array if we get
+ // here.
+ if (!el) {
+ return false;
+ }
+
+ // we need to make sure we fire registered unload events
+ // prior to automatically unhooking them. So we hang on to
+ // these instead of attaching them to the window and fire the
+ // handles explicitly during our one unload event.
+ if ("unload" == sType && obj !== this) {
+ unloadListeners[unloadListeners.length] =
+ [el, sType, fn, obj, override, capture];
+ return true;
+ }
+
+
+ // if the user chooses to override the scope, we use the custom
+ // object passed in, otherwise the executing scope will be the
+ // HTML element that the event is registered on
+ var scope = el;
+ if (override) {
+ if (override === true) {
+ scope = obj;
+ } else {
+ scope = override;
+ }
+ }
+
+ // wrap the function so we can return the obj object when
+ // the event fires;
+ var wrappedFn = function(e) {
+ return fn.call(scope, YAHOO.util.Event.getEvent(e, el),
+ obj);
+ };
+
+ var li = [el, sType, fn, wrappedFn, scope, obj, override, capture];
+ var index = listeners.length;
+ // cache the listener so we can try to automatically unload
+ listeners[index] = li;
+
+ if (this.useLegacyEvent(el, sType)) {
+ var legacyIndex = this.getLegacyIndex(el, sType);
+
+ // Add a new dom0 wrapper if one is not detected for this
+ // element
+ if ( legacyIndex == -1 ||
+ el != legacyEvents[legacyIndex][0] ) {
+
+ legacyIndex = legacyEvents.length;
+ legacyMap[el.id + sType] = legacyIndex;
+
+ // cache the signature for the DOM0 event, and
+ // include the existing handler for the event, if any
+ legacyEvents[legacyIndex] =
+ [el, sType, el["on" + sType]];
+ legacyHandlers[legacyIndex] = [];
+
+ el["on" + sType] =
+ function(e) {
+ YAHOO.util.Event.fireLegacyEvent(
+ YAHOO.util.Event.getEvent(e), legacyIndex);
+ };
+ }
+
+ // add a reference to the wrapped listener to our custom
+ // stack of events
+ //legacyHandlers[legacyIndex].push(index);
+ legacyHandlers[legacyIndex].push(li);
+
+ } else {
+ try {
+ this._simpleAdd(el, sType, wrappedFn, capture);
+ } catch(ex) {
+ // handle an error trying to attach an event. If it fails
+ // we need to clean up the cache
+ this.lastError = ex;
+ this._removeListener(el, sType, fn, capture);
+ return false;
+ }
+ }
+
+ return true;
+
+ },
+
+
+ /**
+ * Appends an event handler
+ *
+ * @method addListener
+ *
+ * @param {String|HTMLElement|Array|NodeList} el An id, an element
+ * reference, or a collection of ids and/or elements to assign the
+ * listener to.
+ * @param {String} sType The type of event to append
+ * @param {Function} fn The method the event invokes
+ * @param {Object} obj An arbitrary object that will be
+ * passed as a parameter to the handler
+ * @param {Boolean|object} override If true, the obj passed in becomes
+ * the execution scope of the listener. If an
+ * object, this object becomes the execution
+ * scope.
+ * @return {Boolean} True if the action was successful or defered,
+ * false if one or more of the elements
+ * could not have the listener attached,
+ * or if the operation throws an exception.
+ * @static
+ */
+ addListener: function (el, sType, fn, obj, override) {
+ return this._addListener(el, sType, fn, obj, override, false);
+ },
+
+ /**
+ * Appends a focus event handler. (The focusin event is used for Internet Explorer,
+ * the focus, capture-event for Opera, WebKit, and Gecko.)
+ *
+ * @method addFocusListener
+ *
+ * @param {String|HTMLElement|Array|NodeList} el An id, an element
+ * reference, or a collection of ids and/or elements to assign the
+ * listener to.
+ * @param {Function} fn The method the event invokes
+ * @param {Object} obj An arbitrary object that will be
+ * passed as a parameter to the handler
+ * @param {Boolean|object} override If true, the obj passed in becomes
+ * the execution scope of the listener. If an
+ * object, this object becomes the execution
+ * scope.
+ * @return {Boolean} True if the action was successful or defered,
+ * false if one or more of the elements
+ * could not have the listener attached,
+ * or if the operation throws an exception.
+ * @static
+ */
+ addFocusListener: function (el, fn, obj, override) {
+ return this._addListener(el, _FOCUS, fn, obj, override, true);
+ },
+
+
+ /**
+ * Removes a focus event listener
+ *
+ * @method removeFocusListener
+ *
+ * @param {String|HTMLElement|Array|NodeList} el An id, an element
+ * reference, or a collection of ids and/or elements to remove
+ * the listener from.
+ * @param {Function} fn the method the event invokes. If fn is
+ * undefined, then all event handlers for the type of event are
+ * removed.
+ * @return {boolean} true if the unbind was successful, false
+ * otherwise.
+ * @static
+ */
+ removeFocusListener: function (el, fn) {
+ return this._removeListener(el, _FOCUS, fn, true);
+ },
+
+ /**
+ * Appends a blur event handler. (The focusout event is used for Internet Explorer,
+ * the focusout, capture-event for Opera, WebKit, and Gecko.)
+ *
+ * @method addBlurListener
+ *
+ * @param {String|HTMLElement|Array|NodeList} el An id, an element
+ * reference, or a collection of ids and/or elements to assign the
+ * listener to.
+ * @param {Function} fn The method the event invokes
+ * @param {Object} obj An arbitrary object that will be
+ * passed as a parameter to the handler
+ * @param {Boolean|object} override If true, the obj passed in becomes
+ * the execution scope of the listener. If an
+ * object, this object becomes the execution
+ * scope.
+ * @return {Boolean} True if the action was successful or defered,
+ * false if one or more of the elements
+ * could not have the listener attached,
+ * or if the operation throws an exception.
+ * @static
+ */
+ addBlurListener: function (el, fn, obj, override) {
+ return this._addListener(el, _BLUR, fn, obj, override, true);
+ },
+
+ /**
+ * Removes a blur event listener
+ *
+ * @method removeBlurListener
+ *
+ * @param {String|HTMLElement|Array|NodeList} el An id, an element
+ * reference, or a collection of ids and/or elements to remove
+ * the listener from.
+ * @param {Function} fn the method the event invokes. If fn is
+ * undefined, then all event handlers for the type of event are
+ * removed.
+ * @return {boolean} true if the unbind was successful, false
+ * otherwise.
+ * @static
+ */
+ removeBlurListener: function (el, fn) {
+
+ return this._removeListener(el, _BLUR, fn, true);
+
+ },
+
+ /**
+ * When using legacy events, the handler is routed to this object
+ * so we can fire our custom listener stack.
+ * @method fireLegacyEvent
+ * @static
+ * @private
+ */
+ fireLegacyEvent: function(e, legacyIndex) {
+ var ok=true, le, lh, li, scope, ret;
+
+ lh = legacyHandlers[legacyIndex].slice();
+ for (var i=0, len=lh.length; i<len; ++i) {
+ // for (var i in lh.length) {
+ li = lh[i];
+ if ( li && li[this.WFN] ) {
+ scope = li[this.ADJ_SCOPE];
+ ret = li[this.WFN].call(scope, e);
+ ok = (ok && ret);
+ }
+ }
+
+ // Fire the original handler if we replaced one. We fire this
+ // after the other events to keep stopPropagation/preventDefault
+ // that happened in the DOM0 handler from touching our DOM2
+ // substitute
+ le = legacyEvents[legacyIndex];
+ if (le && le[2]) {
+ le[2](e);
+ }
+
+ return ok;
+ },
+
+ /**
+ * Returns the legacy event index that matches the supplied
+ * signature
+ * @method getLegacyIndex
+ * @static
+ * @private
+ */
+ getLegacyIndex: function(el, sType) {
+ var key = this.generateId(el) + sType;
+ if (typeof legacyMap[key] == "undefined") {
+ return -1;
+ } else {
+ return legacyMap[key];
+ }
+ },
+
+ /**
+ * Logic that determines when we should automatically use legacy
+ * events instead of DOM2 events. Currently this is limited to old
+ * Safari browsers with a broken preventDefault
+ * @method useLegacyEvent
+ * @static
+ * @private
+ */
+ useLegacyEvent: function(el, sType) {
+return (this.webkit && this.webkit < 419 && ("click"==sType || "dblclick"==sType));
+ },
+
+ /**
+ * Removes an event listener
+ *
+ * @method _removeListener
+ *
+ * @param {String|HTMLElement|Array|NodeList} el An id, an element
+ * reference, or a collection of ids and/or elements to remove
+ * the listener from.
+ * @param {String} sType the type of event to remove.
+ * @param {Function} fn the method the event invokes. If fn is
+ * undefined, then all event handlers for the type of event are
+ * removed.
+ * @param {boolen} capture capture or bubble phase
+ * @return {boolean} true if the unbind was successful, false
+ * otherwise.
+ * @static
+ * @private
+ */
+ _removeListener: function(el, sType, fn, capture) {
+ var i, len, li;
+
+ // The el argument can be a string
+ if (typeof el == "string") {
+ el = this.getEl(el);
+ // The el argument can be an array of elements or element ids.
+ } else if ( this._isValidCollection(el)) {
+ var ok = true;
+ for (i=el.length-1; i>-1; i--) {
+ ok = ( this._removeListener(el[i], sType, fn, capture) && ok );
+ }
+ return ok;
+ }
+
+ if (!fn || !fn.call) {
+ //return false;
+ return this.purgeElement(el, false, sType);
+ }
+
+ if ("unload" == sType) {
+
+ for (i=unloadListeners.length-1; i>-1; i--) {
+ li = unloadListeners[i];
+ if (li &&
+ li[0] == el &&
+ li[1] == sType &&
+ li[2] == fn) {
+ unloadListeners.splice(i, 1);
+ // unloadListeners[i]=null;
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ var cacheItem = null;
+
+ // The index is a hidden parameter; needed to remove it from
+ // the method signature because it was tempting users to
+ // try and take advantage of it, which is not possible.
+ var index = arguments[4];
+
+ if ("undefined" === typeof index) {
+ index = this._getCacheIndex(el, sType, fn);
+ }
+
+ if (index >= 0) {
+ cacheItem = listeners[index];
+ }
+
+ if (!el || !cacheItem) {
+ return false;
+ }
+
+
+ if (this.useLegacyEvent(el, sType)) {
+ var legacyIndex = this.getLegacyIndex(el, sType);
+ var llist = legacyHandlers[legacyIndex];
+ if (llist) {
+ for (i=0, len=llist.length; i<len; ++i) {
+ // for (i in llist.length) {
+ li = llist[i];
+ if (li &&
+ li[this.EL] == el &&
+ li[this.TYPE] == sType &&
+ li[this.FN] == fn) {
+ llist.splice(i, 1);
+ // llist[i]=null;
+ break;
+ }
+ }
+ }
+
+ } else {
+ try {
+ this._simpleRemove(el, sType, cacheItem[this.WFN], capture);
+ } catch(ex) {
+ this.lastError = ex;
+ return false;
+ }
+ }
+
+ // removed the wrapped handler
+ delete listeners[index][this.WFN];
+ delete listeners[index][this.FN];
+ listeners.splice(index, 1);
+ // listeners[index]=null;
+
+ return true;
+
+ },
+
+
+ /**
+ * Removes an event listener
+ *
+ * @method removeListener
+ *
+ * @param {String|HTMLElement|Array|NodeList} el An id, an element
+ * reference, or a collection of ids and/or elements to remove
+ * the listener from.
+ * @param {String} sType the type of event to remove.
+ * @param {Function} fn the method the event invokes. If fn is
+ * undefined, then all event handlers for the type of event are
+ * removed.
+ * @return {boolean} true if the unbind was successful, false
+ * otherwise.
+ * @static
+ */
+ removeListener: function(el, sType, fn) {
+
+ return this._removeListener(el, sType, fn, false);
+
+ },
+
+
+ /**
+ * Returns the event's target element. Safari sometimes provides
+ * a text node, and this is automatically resolved to the text
+ * node's parent so that it behaves like other browsers.
+ * @method getTarget
+ * @param {Event} ev the event
+ * @param {boolean} resolveTextNode when set to true the target's
+ * parent will be returned if the target is a
+ * text node. @deprecated, the text node is
+ * now resolved automatically
+ * @return {HTMLElement} the event's target
+ * @static
+ */
+ getTarget: function(ev, resolveTextNode) {
+ var t = ev.target || ev.srcElement;
+ return this.resolveTextNode(t);
+ },
+
+ /**
+ * In some cases, some browsers will return a text node inside
+ * the actual element that was targeted. This normalizes the
+ * return value for getTarget and getRelatedTarget.
+ * @method resolveTextNode
+ * @param {HTMLElement} node node to resolve
+ * @return {HTMLElement} the normized node
+ * @static
+ */
+ resolveTextNode: function(n) {
+ try {
+ if (n && 3 == n.nodeType) {
+ return n.parentNode;
+ }
+ } catch(e) { }
+
+ return n;
+ },
+
+ /**
+ * Returns the event's pageX
+ * @method getPageX
+ * @param {Event} ev the event
+ * @return {int} the event's pageX
+ * @static
+ */
+ getPageX: function(ev) {
+ var x = ev.pageX;
+ if (!x && 0 !== x) {
+ x = ev.clientX || 0;
+
+ if ( this.isIE ) {
+ x += this._getScrollLeft();
+ }
+ }
+
+ return x;
+ },
+
+ /**
+ * Returns the event's pageY
+ * @method getPageY
+ * @param {Event} ev the event
+ * @return {int} the event's pageY
+ * @static
+ */
+ getPageY: function(ev) {
+ var y = ev.pageY;
+ if (!y && 0 !== y) {
+ y = ev.clientY || 0;
+
+ if ( this.isIE ) {
+ y += this._getScrollTop();
+ }
+ }
+
+
+ return y;
+ },
+
+ /**
+ * Returns the pageX and pageY properties as an indexed array.
+ * @method getXY
+ * @param {Event} ev the event
+ * @return {[x, y]} the pageX and pageY properties of the event
+ * @static
+ */
+ getXY: function(ev) {
+ return [this.getPageX(ev), this.getPageY(ev)];
+ },
+
+ /**
+ * Returns the event's related target
+ * @method getRelatedTarget
+ * @param {Event} ev the event
+ * @return {HTMLElement} the event's relatedTarget
+ * @static
+ */
+ getRelatedTarget: function(ev) {
+ var t = ev.relatedTarget;
+ if (!t) {
+ if (ev.type == "mouseout") {
+ t = ev.toElement;
+ } else if (ev.type == "mouseover") {
+ t = ev.fromElement;
+ }
+ }
+
+ return this.resolveTextNode(t);
+ },
+
+ /**
+ * Returns the time of the event. If the time is not included, the
+ * event is modified using the current time.
+ * @method getTime
+ * @param {Event} ev the event
+ * @return {Date} the time of the event
+ * @static
+ */
+ getTime: function(ev) {
+ if (!ev.time) {
+ var t = new Date().getTime();
+ try {
+ ev.time = t;
+ } catch(ex) {
+ this.lastError = ex;
+ return t;
+ }
+ }
+
+ return ev.time;
+ },
+
+ /**
+ * Convenience method for stopPropagation + preventDefault
+ * @method stopEvent
+ * @param {Event} ev the event
+ * @static
+ */
+ stopEvent: function(ev) {
+ this.stopPropagation(ev);
+ this.preventDefault(ev);
+ },
+
+ /**
+ * Stops event propagation
+ * @method stopPropagation
+ * @param {Event} ev the event
+ * @static
+ */
+ stopPropagation: function(ev) {
+ if (ev.stopPropagation) {
+ ev.stopPropagation();
+ } else {
+ ev.cancelBubble = true;
+ }
+ },
+
+ /**
+ * Prevents the default behavior of the event
+ * @method preventDefault
+ * @param {Event} ev the event
+ * @static
+ */
+ preventDefault: function(ev) {
+ if (ev.preventDefault) {
+ ev.preventDefault();
+ } else {
+ ev.returnValue = false;
+ }
+ },
+
+ /**
+ * Finds the event in the window object, the caller's arguments, or
+ * in the arguments of another method in the callstack. This is
+ * executed automatically for events registered through the event
+ * manager, so the implementer should not normally need to execute
+ * this function at all.
+ * @method getEvent
+ * @param {Event} e the event parameter from the handler
+ * @param {HTMLElement} boundEl the element the listener is attached to
+ * @return {Event} the event
+ * @static
+ */
+ getEvent: function(e, boundEl) {
+ var ev = e || window.event;
+
+ if (!ev) {
+ var c = this.getEvent.caller;
+ while (c) {
+ ev = c.arguments[0];
+ if (ev && Event == ev.constructor) {
+ break;
+ }
+ c = c.caller;
+ }
+ }
+
+ return ev;
+ },
+
+ /**
+ * Returns the charcode for an event
+ * @method getCharCode
+ * @param {Event} ev the event
+ * @return {int} the event's charCode
+ * @static
+ */
+ getCharCode: function(ev) {
+ var code = ev.keyCode || ev.charCode || 0;
+
+ // webkit key normalization
+ if (YAHOO.env.ua.webkit && (code in webkitKeymap)) {
+ code = webkitKeymap[code];
+ }
+ return code;
+ },
+
+ /**
+ * Locating the saved event handler data by function ref
+ *
+ * @method _getCacheIndex
+ * @static
+ * @private
+ */
+ _getCacheIndex: function(el, sType, fn) {
+ for (var i=0, l=listeners.length; i<l; i=i+1) {
+ var li = listeners[i];
+ if ( li &&
+ li[this.FN] == fn &&
+ li[this.EL] == el &&
+ li[this.TYPE] == sType ) {
+ return i;
+ }
+ }
+
+ return -1;
+ },
+
+ /**
+ * Generates an unique ID for the element if it does not already
+ * have one.
+ * @method generateId
+ * @param el the element to create the id for
+ * @return {string} the resulting id of the element
+ * @static
+ */
+ generateId: function(el) {
+ var id = el.id;
+
+ if (!id) {
+ id = "yuievtautoid-" + counter;
+ ++counter;
+ el.id = id;
+ }
+
+ return id;
+ },
+
+
+ /**
+ * We want to be able to use getElementsByTagName as a collection
+ * to attach a group of events to. Unfortunately, different
+ * browsers return different types of collections. This function
+ * tests to determine if the object is array-like. It will also
+ * fail if the object is an array, but is empty.
+ * @method _isValidCollection
+ * @param o the object to test
+ * @return {boolean} true if the object is array-like and populated
+ * @static
+ * @private
+ */
+ _isValidCollection: function(o) {
+ try {
+ return ( o && // o is something
+ typeof o !== "string" && // o is not a string
+ o.length && // o is indexed
+ !o.tagName && // o is not an HTML element
+ !o.alert && // o is not a window
+ typeof o[0] !== "undefined" );
+ } catch(ex) {
+ return false;
+ }
+
+ },
+
+ /**
+ * @private
+ * @property elCache
+ * DOM element cache
+ * @static
+ * @deprecated Elements are not cached due to issues that arise when
+ * elements are removed and re-added
+ */
+ elCache: {},
+
+ /**
+ * We cache elements bound by id because when the unload event
+ * fires, we can no longer use document.getElementById
+ * @method getEl
+ * @static
+ * @private
+ * @deprecated Elements are not cached any longer
+ */
+ getEl: function(id) {
+ return (typeof id === "string") ? document.getElementById(id) : id;
+ },
+
+ /**
+ * Clears the element cache
+ * @deprecated Elements are not cached any longer
+ * @method clearCache
+ * @static
+ * @private
+ */
+ clearCache: function() { },
+
+ /**
+ * Custom event the fires when the dom is initially usable
+ * @event DOMReadyEvent
+ */
+ DOMReadyEvent: new YAHOO.util.CustomEvent("DOMReady", this),
+
+ /**
+ * hook up any deferred listeners
+ * @method _load
+ * @static
+ * @private
+ */
+ _load: function(e) {
+
+ if (!loadComplete) {
+ loadComplete = true;
+ var EU = YAHOO.util.Event;
+
+ // Just in case DOMReady did not go off for some reason
+ EU._ready();
+
+ // Available elements may not have been detected before the
+ // window load event fires. Try to find them now so that the
+ // the user is more likely to get the onAvailable notifications
+ // before the window load notification
+ EU._tryPreloadAttach();
+
+ }
+ },
+
+ /**
+ * Fires the DOMReady event listeners the first time the document is
+ * usable.
+ * @method _ready
+ * @static
+ * @private
+ */
+ _ready: function(e) {
+ var EU = YAHOO.util.Event;
+ if (!EU.DOMReady) {
+ EU.DOMReady=true;
+
+ // Fire the content ready custom event
+ EU.DOMReadyEvent.fire();
+
+ // Remove the DOMContentLoaded (FF/Opera)
+ EU._simpleRemove(document, "DOMContentLoaded", EU._ready);
+ }
+ },
+
+ /**
+ * Polling function that runs before the onload event fires,
+ * attempting to attach to DOM Nodes as soon as they are
+ * available
+ * @method _tryPreloadAttach
+ * @static
+ * @private
+ */
+ _tryPreloadAttach: function() {
+
+ if (onAvailStack.length === 0) {
+ retryCount = 0;
+ clearInterval(this._interval);
+ this._interval = null;
+ return;
+ }
+
+ if (this.locked) {
+ return;
+ }
+
+ if (this.isIE) {
+ // Hold off if DOMReady has not fired and check current
+ // readyState to protect against the IE operation aborted
+ // issue.
+ if (!this.DOMReady) {
+ this.startInterval();
+ return;
+ }
+ }
+
+ this.locked = true;
+
+
+ // keep trying until after the page is loaded. We need to
+ // check the page load state prior to trying to bind the
+ // elements so that we can be certain all elements have been
+ // tested appropriately
+ var tryAgain = !loadComplete;
+ if (!tryAgain) {
+ tryAgain = (retryCount > 0 && onAvailStack.length > 0);
+ }
+
+ // onAvailable
+ var notAvail = [];
+
+ var executeItem = function (el, item) {
+ var scope = el;
+ if (item.override) {
+ if (item.override === true) {
+ scope = item.obj;
+ } else {
+ scope = item.override;
+ }
+ }
+ item.fn.call(scope, item.obj);
+ };
+
+ var i, len, item, el, ready=[];
+
+ // onAvailable onContentReady
+ for (i=0, len=onAvailStack.length; i<len; i=i+1) {
+ item = onAvailStack[i];
+ if (item) {
+ el = this.getEl(item.id);
+ if (el) {
+ if (item.checkReady) {
+ if (loadComplete || el.nextSibling || !tryAgain) {
+ ready.push(item);
+ onAvailStack[i] = null;
+ }
+ } else {
+ executeItem(el, item);
+ onAvailStack[i] = null;
+ }
+ } else {
+ notAvail.push(item);
+ }
+ }
+ }
+
+ // make sure onContentReady fires after onAvailable
+ for (i=0, len=ready.length; i<len; i=i+1) {
+ item = ready[i];
+ executeItem(this.getEl(item.id), item);
+ }
+
+
+ retryCount--;
+
+ if (tryAgain) {
+ for (i=onAvailStack.length-1; i>-1; i--) {
+ item = onAvailStack[i];
+ if (!item || !item.id) {
+ onAvailStack.splice(i, 1);
+ }
+ }
+
+ this.startInterval();
+ } else {
+ clearInterval(this._interval);
+ this._interval = null;
+ }
+
+ this.locked = false;
+
+ },
+
+ /**
+ * Removes all listeners attached to the given element via addListener.
+ * Optionally, the node's children can also be purged.
+ * Optionally, you can specify a specific type of event to remove.
+ * @method purgeElement
+ * @param {HTMLElement} el the element to purge
+ * @param {boolean} recurse recursively purge this element's children
+ * as well. Use with caution.
+ * @param {string} sType optional type of listener to purge. If
+ * left out, all listeners will be removed
+ * @static
+ */
+ purgeElement: function(el, recurse, sType) {
+ var oEl = (YAHOO.lang.isString(el)) ? this.getEl(el) : el;
+ var elListeners = this.getListeners(oEl, sType), i, len;
+ if (elListeners) {
+ for (i=elListeners.length-1; i>-1; i--) {
+ var l = elListeners[i];
+ this._removeListener(oEl, l.type, l.fn, l.capture);
+ }
+ }
+
+ if (recurse && oEl && oEl.childNodes) {
+ for (i=0,len=oEl.childNodes.length; i<len ; ++i) {
+ this.purgeElement(oEl.childNodes[i], recurse, sType);
+ }
+ }
+ },
+
+ /**
+ * Returns all listeners attached to the given element via addListener.
+ * Optionally, you can specify a specific type of event to return.
+ * @method getListeners
+ * @param el {HTMLElement|string} the element or element id to inspect
+ * @param sType {string} optional type of listener to return. If
+ * left out, all listeners will be returned
+ * @return {Object} the listener. Contains the following fields:
+ * &nbsp;&nbsp;type: (string) the type of event
+ * &nbsp;&nbsp;fn: (function) the callback supplied to addListener
+ * &nbsp;&nbsp;obj: (object) the custom object supplied to addListener
+ * &nbsp;&nbsp;adjust: (boolean|object) whether or not to adjust the default scope
+ * &nbsp;&nbsp;scope: (boolean) the derived scope based on the adjust parameter
+ * &nbsp;&nbsp;scope: (capture) the capture parameter supplied to addListener
+ * &nbsp;&nbsp;index: (int) its position in the Event util listener cache
+ * @static
+ */
+ getListeners: function(el, sType) {
+ var results=[], searchLists;
+ if (!sType) {
+ searchLists = [listeners, unloadListeners];
+ } else if (sType === "unload") {
+ searchLists = [unloadListeners];
+ } else {
+ searchLists = [listeners];
+ }
+
+ var oEl = (YAHOO.lang.isString(el)) ? this.getEl(el) : el;
+
+ for (var j=0;j<searchLists.length; j=j+1) {
+ var searchList = searchLists[j];
+ if (searchList) {
+ for (var i=0,len=searchList.length; i<len ; ++i) {
+ var l = searchList[i];
+ if ( l && l[this.EL] === oEl &&
+ (!sType || sType === l[this.TYPE]) ) {
+ results.push({
+ type: l[this.TYPE],
+ fn: l[this.FN],
+ obj: l[this.OBJ],
+ adjust: l[this.OVERRIDE],
+ scope: l[this.ADJ_SCOPE],
+ capture: l[this.CAPTURE],
+ index: i
+ });
+ }
+ }
+ }
+ }
+
+ return (results.length) ? results : null;
+ },
+
+ /**
+ * Removes all listeners registered by pe.event. Called
+ * automatically during the unload event.
+ * @method _unload
+ * @static
+ * @private
+ */
+ _unload: function(e) {
+
+ var EU = YAHOO.util.Event, i, j, l, len, index,
+ ul = unloadListeners.slice();
+
+ // execute and clear stored unload listeners
+ for (i=0,len=unloadListeners.length; i<len; ++i) {
+ l = ul[i];
+ if (l) {
+ var scope = window;
+ if (l[EU.ADJ_SCOPE]) {
+ if (l[EU.ADJ_SCOPE] === true) {
+ scope = l[EU.UNLOAD_OBJ];
+ } else {
+ scope = l[EU.ADJ_SCOPE];
+ }
+ }
+ l[EU.FN].call(scope, EU.getEvent(e, l[EU.EL]), l[EU.UNLOAD_OBJ] );
+ ul[i] = null;
+ l=null;
+ scope=null;
+ }
+ }
+
+ unloadListeners = null;
+
+ // Remove listeners to handle IE memory leaks
+ //if (YAHOO.env.ua.ie && listeners && listeners.length > 0) {
+
+ // 2.5.0 listeners are removed for all browsers again. FireFox preserves
+ // at least some listeners between page refreshes, potentially causing
+ // errors during page load (mouseover listeners firing before they
+ // should if the user moves the mouse at the correct moment).
+ if (listeners) {
+ for (j=listeners.length-1; j>-1; j--) {
+ l = listeners[j];
+ if (l) {
+ EU._removeListener(l[EU.EL], l[EU.TYPE], l[EU.FN], l[EU.CAPTURE], j);
+ }
+ }
+ l=null;
+ }
+
+ legacyEvents = null;
+
+ EU._simpleRemove(window, "unload", EU._unload);
+
+ },
+
+ /**
+ * Returns scrollLeft
+ * @method _getScrollLeft
+ * @static
+ * @private
+ */
+ _getScrollLeft: function() {
+ return this._getScroll()[1];
+ },
+
+ /**
+ * Returns scrollTop
+ * @method _getScrollTop
+ * @static
+ * @private
+ */
+ _getScrollTop: function() {
+ return this._getScroll()[0];
+ },
+
+ /**
+ * Returns the scrollTop and scrollLeft. Used to calculate the
+ * pageX and pageY in Internet Explorer
+ * @method _getScroll
+ * @static
+ * @private
+ */
+ _getScroll: function() {
+ var dd = document.documentElement, db = document.body;
+ if (dd && (dd.scrollTop || dd.scrollLeft)) {
+ return [dd.scrollTop, dd.scrollLeft];
+ } else if (db) {
+ return [db.scrollTop, db.scrollLeft];
+ } else {
+ return [0, 0];
+ }
+ },
+
+ /**
+ * Used by old versions of CustomEvent, restored for backwards
+ * compatibility
+ * @method regCE
+ * @private
+ * @static
+ * @deprecated still here for backwards compatibility
+ */
+ regCE: function() {
+ // does nothing
+ },
+
+ /**
+ * Adds a DOM event directly without the caching, cleanup, scope adj, etc
+ *
+ * @method _simpleAdd
+ * @param {HTMLElement} el the element to bind the handler to
+ * @param {string} sType the type of event handler
+ * @param {function} fn the callback to invoke
+ * @param {boolen} capture capture or bubble phase
+ * @static
+ * @private
+ */
+ _simpleAdd: function () {
+ if (window.addEventListener) {
+ return function(el, sType, fn, capture) {
+ el.addEventListener(sType, fn, (capture));
+ };
+ } else if (window.attachEvent) {
+ return function(el, sType, fn, capture) {
+ el.attachEvent("on" + sType, fn);
+ };
+ } else {
+ return function(){};
+ }
+ }(),
+
+ /**
+ * Basic remove listener
+ *
+ * @method _simpleRemove
+ * @param {HTMLElement} el the element to bind the handler to
+ * @param {string} sType the type of event handler
+ * @param {function} fn the callback to invoke
+ * @param {boolen} capture capture or bubble phase
+ * @static
+ * @private
+ */
+ _simpleRemove: function() {
+ if (window.removeEventListener) {
+ return function (el, sType, fn, capture) {
+ el.removeEventListener(sType, fn, (capture));
+ };
+ } else if (window.detachEvent) {
+ return function (el, sType, fn) {
+ el.detachEvent("on" + sType, fn);
+ };
+ } else {
+ return function(){};
+ }
+ }()
+ };
+
+ }();
+
+ (function() {
+ var EU = YAHOO.util.Event;
+
+ /**
+ * YAHOO.util.Event.on is an alias for addListener
+ * @method on
+ * @see addListener
+ * @static
+ */
+ EU.on = EU.addListener;
+
+ /**
+ * YAHOO.util.Event.onFocus is an alias for addFocusListener
+ * @method on
+ * @see addFocusListener
+ * @static
+ */
+ EU.onFocus = EU.addFocusListener;
+
+ /**
+ * YAHOO.util.Event.onBlur is an alias for addBlurListener
+ * @method onBlur
+ * @see addBlurListener
+ * @static
+ */
+ EU.onBlur = EU.addBlurListener;
+
+
+/*! DOMReady: based on work by: Dean Edwards/John Resig/Matthias Miller */
+
+ // Internet Explorer: use the readyState of a defered script.
+ // This isolates what appears to be a safe moment to manipulate
+ // the DOM prior to when the document's readyState suggests
+ // it is safe to do so.
+ if (EU.isIE) {
+
+ // Process onAvailable/onContentReady items when the
+ // DOM is ready.
+ YAHOO.util.Event.onDOMReady(
+ YAHOO.util.Event._tryPreloadAttach,
+ YAHOO.util.Event, true);
+
+ var n = document.createElement('p');
+
+ EU._dri = setInterval(function() {
+ try {
+ // throws an error if doc is not ready
+ n.doScroll('left');
+ clearInterval(EU._dri);
+ EU._dri = null;
+ EU._ready();
+ n = null;
+ } catch (ex) {
+ }
+ }, EU.POLL_INTERVAL);
+
+
+ // The document's readyState in Safari currently will
+ // change to loaded/complete before images are loaded.
+ } else if (EU.webkit && EU.webkit < 525) {
+
+ EU._dri = setInterval(function() {
+ var rs=document.readyState;
+ if ("loaded" == rs || "complete" == rs) {
+ clearInterval(EU._dri);
+ EU._dri = null;
+ EU._ready();
+ }
+ }, EU.POLL_INTERVAL);
+
+ // FireFox and Opera: These browsers provide a event for this
+ // moment. The latest WebKit releases now support this event.
+ } else {
+
+ EU._simpleAdd(document, "DOMContentLoaded", EU._ready);
+
+ }
+ /////////////////////////////////////////////////////////////
+
+
+ EU._simpleAdd(window, "load", EU._load);
+ EU._simpleAdd(window, "unload", EU._unload);
+ EU._tryPreloadAttach();
+ })();
+
+}
+/**
+ * EventProvider is designed to be used with YAHOO.augment to wrap
+ * CustomEvents in an interface that allows events to be subscribed to
+ * and fired by name. This makes it possible for implementing code to
+ * subscribe to an event that either has not been created yet, or will
+ * not be created at all.
+ *
+ * @Class EventProvider
+ */
+YAHOO.util.EventProvider = function() { };
+
+YAHOO.util.EventProvider.prototype = {
+
+ /**
+ * Private storage of custom events
+ * @property __yui_events
+ * @type Object[]
+ * @private
+ */
+ __yui_events: null,
+
+ /**
+ * Private storage of custom event subscribers
+ * @property __yui_subscribers
+ * @type Object[]
+ * @private
+ */
+ __yui_subscribers: null,
+
+ /**
+ * Subscribe to a CustomEvent by event type
+ *
+ * @method subscribe
+ * @param p_type {string} the type, or name of the event
+ * @param p_fn {function} the function to exectute when the event fires
+ * @param p_obj {Object} An object to be passed along when the event
+ * fires
+ * @param p_override {boolean} If true, the obj passed in becomes the
+ * execution scope of the listener
+ */
+ subscribe: function(p_type, p_fn, p_obj, p_override) {
+
+ this.__yui_events = this.__yui_events || {};
+ var ce = this.__yui_events[p_type];
+
+ if (ce) {
+ ce.subscribe(p_fn, p_obj, p_override);
+ } else {
+ this.__yui_subscribers = this.__yui_subscribers || {};
+ var subs = this.__yui_subscribers;
+ if (!subs[p_type]) {
+ subs[p_type] = [];
+ }
+ subs[p_type].push(
+ { fn: p_fn, obj: p_obj, override: p_override } );
+ }
+ },
+
+ /**
+ * Unsubscribes one or more listeners the from the specified event
+ * @method unsubscribe
+ * @param p_type {string} The type, or name of the event. If the type
+ * is not specified, it will attempt to remove
+ * the listener from all hosted events.
+ * @param p_fn {Function} The subscribed function to unsubscribe, if not
+ * supplied, all subscribers will be removed.
+ * @param p_obj {Object} The custom object passed to subscribe. This is
+ * optional, but if supplied will be used to
+ * disambiguate multiple listeners that are the same
+ * (e.g., you subscribe many object using a function
+ * that lives on the prototype)
+ * @return {boolean} true if the subscriber was found and detached.
+ */
+ unsubscribe: function(p_type, p_fn, p_obj) {
+ this.__yui_events = this.__yui_events || {};
+ var evts = this.__yui_events;
+ if (p_type) {
+ var ce = evts[p_type];
+ if (ce) {
+ return ce.unsubscribe(p_fn, p_obj);
+ }
+ } else {
+ var ret = true;
+ for (var i in evts) {
+ if (YAHOO.lang.hasOwnProperty(evts, i)) {
+ ret = ret && evts[i].unsubscribe(p_fn, p_obj);
+ }
+ }
+ return ret;
+ }
+
+ return false;
+ },
+
+ /**
+ * Removes all listeners from the specified event. If the event type
+ * is not specified, all listeners from all hosted custom events will
+ * be removed.
+ * @method unsubscribeAll
+ * @param p_type {string} The type, or name of the event
+ */
+ unsubscribeAll: function(p_type) {
+ return this.unsubscribe(p_type);
+ },
+
+ /**
+ * Creates a new custom event of the specified type. If a custom event
+ * by that name already exists, it will not be re-created. In either
+ * case the custom event is returned.
+ *
+ * @method createEvent
+ *
+ * @param p_type {string} the type, or name of the event
+ * @param p_config {object} optional config params. Valid properties are:
+ *
+ * <ul>
+ * <li>
+ * scope: defines the default execution scope. If not defined
+ * the default scope will be this instance.
+ * </li>
+ * <li>
+ * silent: if true, the custom event will not generate log messages.
+ * This is false by default.
+ * </li>
+ * <li>
+ * onSubscribeCallback: specifies a callback to execute when the
+ * event has a new subscriber. This will fire immediately for
+ * each queued subscriber if any exist prior to the creation of
+ * the event.
+ * </li>
+ * </ul>
+ *
+ * @return {CustomEvent} the custom event
+ *
+ */
+ createEvent: function(p_type, p_config) {
+
+ this.__yui_events = this.__yui_events || {};
+ var opts = p_config || {};
+ var events = this.__yui_events;
+
+ if (events[p_type]) {
+ } else {
+
+ var scope = opts.scope || this;
+ var silent = (opts.silent);
+
+ var ce = new YAHOO.util.CustomEvent(p_type, scope, silent,
+ YAHOO.util.CustomEvent.FLAT);
+ events[p_type] = ce;
+
+ if (opts.onSubscribeCallback) {
+ ce.subscribeEvent.subscribe(opts.onSubscribeCallback);
+ }
+
+ this.__yui_subscribers = this.__yui_subscribers || {};
+ var qs = this.__yui_subscribers[p_type];
+
+ if (qs) {
+ for (var i=0; i<qs.length; ++i) {
+ ce.subscribe(qs[i].fn, qs[i].obj, qs[i].override);
+ }
+ }
+ }
+
+ return events[p_type];
+ },
+
+
+ /**
+ * Fire a custom event by name. The callback functions will be executed
+ * from the scope specified when the event was created, and with the
+ * following parameters:
+ * <ul>
+ * <li>The first argument fire() was executed with</li>
+ * <li>The custom object (if any) that was passed into the subscribe()
+ * method</li>
+ * </ul>
+ * @method fireEvent
+ * @param p_type {string} the type, or name of the event
+ * @param arguments {Object*} an arbitrary set of parameters to pass to
+ * the handler.
+ * @return {boolean} the return value from CustomEvent.fire
+ *
+ */
+ fireEvent: function(p_type, arg1, arg2, etc) {
+
+ this.__yui_events = this.__yui_events || {};
+ var ce = this.__yui_events[p_type];
+
+ if (!ce) {
+ return null;
+ }
+
+ var args = [];
+ for (var i=1; i<arguments.length; ++i) {
+ args.push(arguments[i]);
+ }
+ return ce.fire.apply(ce, args);
+ },
+
+ /**
+ * Returns true if the custom event of the provided type has been created
+ * with createEvent.
+ * @method hasEvent
+ * @param type {string} the type, or name of the event
+ */
+ hasEvent: function(type) {
+ if (this.__yui_events) {
+ if (this.__yui_events[type]) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+};
+
+//@TODO optimize
+//@TODO use event utility, lang abstractions
+//@TODO replace
+
+/**
+* KeyListener is a utility that provides an easy interface for listening for
+* keydown/keyup events fired against DOM elements.
+* @namespace YAHOO.util
+* @class KeyListener
+* @constructor
+* @param {HTMLElement} attachTo The element or element ID to which the key
+* event should be attached
+* @param {String} attachTo The element or element ID to which the key
+* event should be attached
+* @param {Object} keyData The object literal representing the key(s)
+* to detect. Possible attributes are
+* shift(boolean), alt(boolean), ctrl(boolean)
+* and keys(either an int or an array of ints
+* representing keycodes).
+* @param {Function} handler The CustomEvent handler to fire when the
+* key event is detected
+* @param {Object} handler An object literal representing the handler.
+* @param {String} event Optional. The event (keydown or keyup) to
+* listen for. Defaults automatically to keydown.
+*
+* @knownissue the "keypress" event is completely broken in Safari 2.x and below.
+* the workaround is use "keydown" for key listening. However, if
+* it is desired to prevent the default behavior of the keystroke,
+* that can only be done on the keypress event. This makes key
+* handling quite ugly.
+* @knownissue keydown is also broken in Safari 2.x and below for the ESC key.
+* There currently is no workaround other than choosing another
+* key to listen for.
+*/
+YAHOO.util.KeyListener = function(attachTo, keyData, handler, event) {
+ if (!attachTo) {
+ } else if (!keyData) {
+ } else if (!handler) {
+ }
+
+ if (!event) {
+ event = YAHOO.util.KeyListener.KEYDOWN;
+ }
+
+ /**
+ * The CustomEvent fired internally when a key is pressed
+ * @event keyEvent
+ * @private
+ * @param {Object} keyData The object literal representing the key(s) to
+ * detect. Possible attributes are shift(boolean),
+ * alt(boolean), ctrl(boolean) and keys(either an
+ * int or an array of ints representing keycodes).
+ */
+ var keyEvent = new YAHOO.util.CustomEvent("keyPressed");
+
+ /**
+ * The CustomEvent fired when the KeyListener is enabled via the enable()
+ * function
+ * @event enabledEvent
+ * @param {Object} keyData The object literal representing the key(s) to
+ * detect. Possible attributes are shift(boolean),
+ * alt(boolean), ctrl(boolean) and keys(either an
+ * int or an array of ints representing keycodes).
+ */
+ this.enabledEvent = new YAHOO.util.CustomEvent("enabled");
+
+ /**
+ * The CustomEvent fired when the KeyListener is disabled via the
+ * disable() function
+ * @event disabledEvent
+ * @param {Object} keyData The object literal representing the key(s) to
+ * detect. Possible attributes are shift(boolean),
+ * alt(boolean), ctrl(boolean) and keys(either an
+ * int or an array of ints representing keycodes).
+ */
+ this.disabledEvent = new YAHOO.util.CustomEvent("disabled");
+
+ if (typeof attachTo == 'string') {
+ attachTo = document.getElementById(attachTo);
+ }
+
+ if (typeof handler == 'function') {
+ keyEvent.subscribe(handler);
+ } else {
+ keyEvent.subscribe(handler.fn, handler.scope, handler.correctScope);
+ }
+
+ /**
+ * Handles the key event when a key is pressed.
+ * @method handleKeyPress
+ * @param {DOMEvent} e The keypress DOM event
+ * @param {Object} obj The DOM event scope object
+ * @private
+ */
+ function handleKeyPress(e, obj) {
+ if (! keyData.shift) {
+ keyData.shift = false;
+ }
+ if (! keyData.alt) {
+ keyData.alt = false;
+ }
+ if (! keyData.ctrl) {
+ keyData.ctrl = false;
+ }
+
+ // check held down modifying keys first
+ if (e.shiftKey == keyData.shift &&
+ e.altKey == keyData.alt &&
+ e.ctrlKey == keyData.ctrl) { // if we pass this, all modifiers match
+
+ var dataItem;
+
+ if (keyData.keys instanceof Array) {
+ for (var i=0;i<keyData.keys.length;i++) {
+ dataItem = keyData.keys[i];
+
+ if (dataItem == e.charCode ) {
+ keyEvent.fire(e.charCode, e);
+ break;
+ } else if (dataItem == e.keyCode) {
+ keyEvent.fire(e.keyCode, e);
+ break;
+ }
+ }
+ } else {
+ dataItem = keyData.keys;
+ if (dataItem == e.charCode ) {
+ keyEvent.fire(e.charCode, e);
+ } else if (dataItem == e.keyCode) {
+ keyEvent.fire(e.keyCode, e);
+ }
+ }
+ }
+ }
+
+ /**
+ * Enables the KeyListener by attaching the DOM event listeners to the
+ * target DOM element
+ * @method enable
+ */
+ this.enable = function() {
+ if (! this.enabled) {
+ YAHOO.util.Event.addListener(attachTo, event, handleKeyPress);
+ this.enabledEvent.fire(keyData);
+ }
+ /**
+ * Boolean indicating the enabled/disabled state of the Tooltip
+ * @property enabled
+ * @type Boolean
+ */
+ this.enabled = true;
+ };
+
+ /**
+ * Disables the KeyListener by removing the DOM event listeners from the
+ * target DOM element
+ * @method disable
+ */
+ this.disable = function() {
+ if (this.enabled) {
+ YAHOO.util.Event.removeListener(attachTo, event, handleKeyPress);
+ this.disabledEvent.fire(keyData);
+ }
+ this.enabled = false;
+ };
+
+ /**
+ * Returns a String representation of the object.
+ * @method toString
+ * @return {String} The string representation of the KeyListener
+ */
+ this.toString = function() {
+ return "KeyListener [" + keyData.keys + "] " + attachTo.tagName +
+ (attachTo.id ? "[" + attachTo.id + "]" : "");
+ };
+
+};
+
+/**
+ * Constant representing the DOM "keydown" event.
+ * @property YAHOO.util.KeyListener.KEYDOWN
+ * @static
+ * @final
+ * @type String
+ */
+YAHOO.util.KeyListener.KEYDOWN = "keydown";
+
+/**
+ * Constant representing the DOM "keyup" event.
+ * @property YAHOO.util.KeyListener.KEYUP
+ * @static
+ * @final
+ * @type String
+ */
+YAHOO.util.KeyListener.KEYUP = "keyup";
+
+/**
+ * keycode constants for a subset of the special keys
+ * @property KEY
+ * @static
+ * @final
+ */
+YAHOO.util.KeyListener.KEY = {
+ ALT : 18,
+ BACK_SPACE : 8,
+ CAPS_LOCK : 20,
+ CONTROL : 17,
+ DELETE : 46,
+ DOWN : 40,
+ END : 35,
+ ENTER : 13,
+ ESCAPE : 27,
+ HOME : 36,
+ LEFT : 37,
+ META : 224,
+ NUM_LOCK : 144,
+ PAGE_DOWN : 34,
+ PAGE_UP : 33,
+ PAUSE : 19,
+ PRINTSCREEN : 44,
+ RIGHT : 39,
+ SCROLL_LOCK : 145,
+ SHIFT : 16,
+ SPACE : 32,
+ TAB : 9,
+ UP : 38
+};
+YAHOO.register("event", YAHOO.util.Event, {version: "2.6.0", build: "1321"});
diff --git a/testing/talos/talos/tests/dromaeo/lib/yui-selector.js b/testing/talos/talos/tests/dromaeo/lib/yui-selector.js
new file mode 100644
index 0000000000..db222b5905
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/lib/yui-selector.js
@@ -0,0 +1,666 @@
+/*
+Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.6.0
+*/
+/**
+ * The selector module provides helper methods allowing CSS3 Selectors to be used with DOM elements.
+ * @module selector
+ * @title Selector Utility
+ * @namespace YAHOO.util
+ * @requires yahoo, dom
+ */
+
+(function() {
+/**
+ * Provides helper methods for collecting and filtering DOM elements.
+ * @namespace YAHOO.util
+ * @class Selector
+ * @static
+ */
+var Selector = function() {};
+
+var Y = YAHOO.util;
+
+var reNth = /^(?:([-]?\d*)(n){1}|(odd|even)$)*([-+]?\d*)$/;
+
+Selector.prototype = {
+ /**
+ * Default document for use queries
+ * @property document
+ * @type object
+ * @default window.document
+ */
+ document: window.document,
+ /**
+ * Mapping of attributes to aliases, normally to work around HTMLAttributes
+ * that conflict with JS reserved words.
+ * @property attrAliases
+ * @type object
+ */
+ attrAliases: {
+ },
+
+ /**
+ * Mapping of shorthand tokens to corresponding attribute selector
+ * @property shorthand
+ * @type object
+ */
+ shorthand: {
+ //'(?:(?:[^\\)\\]\\s*>+~,]+)(?:-?[_a-z]+[-\\w]))+#(-?[_a-z]+[-\\w]*)': '[id=$1]',
+ '\\#(-?[_a-z]+[-\\w]*)': '[id=$1]',
+ '\\.(-?[_a-z]+[-\\w]*)': '[class~=$1]'
+ },
+
+ /**
+ * List of operators and corresponding boolean functions.
+ * These functions are passed the attribute and the current node's value of the attribute.
+ * @property operators
+ * @type object
+ */
+ operators: {
+ '=': function(attr, val) { return attr === val; }, // Equality
+ '!=': function(attr, val) { return attr !== val; }, // Inequality
+ '~=': function(attr, val) { // Match one of space seperated words
+ var s = ' ';
+ return (s + attr + s).indexOf((s + val + s)) > -1;
+ },
+ '|=': function(attr, val) { return getRegExp('^' + val + '[-]?').test(attr); }, // Match start with value followed by optional hyphen
+ '^=': function(attr, val) { return attr.indexOf(val) === 0; }, // Match starts with value
+ '$=': function(attr, val) { return attr.lastIndexOf(val) === attr.length - val.length; }, // Match ends with value
+ '*=': function(attr, val) { return attr.indexOf(val) > -1; }, // Match contains value as substring
+ '': function(attr, val) { return attr; } // Just test for existence of attribute
+ },
+
+ /**
+ * List of pseudo-classes and corresponding boolean functions.
+ * These functions are called with the current node, and any value that was parsed with the pseudo regex.
+ * @property pseudos
+ * @type object
+ */
+ pseudos: {
+ 'root': function(node) {
+ return node === node.ownerDocument.documentElement;
+ },
+
+ 'nth-child': function(node, val) {
+ return getNth(node, val);
+ },
+
+ 'nth-last-child': function(node, val) {
+ return getNth(node, val, null, true);
+ },
+
+ 'nth-of-type': function(node, val) {
+ return getNth(node, val, node.tagName);
+ },
+
+ 'nth-last-of-type': function(node, val) {
+ return getNth(node, val, node.tagName, true);
+ },
+
+ 'first-child': function(node) {
+ return getChildren(node.parentNode)[0] === node;
+ },
+
+ 'last-child': function(node) {
+ var children = getChildren(node.parentNode);
+ return children[children.length - 1] === node;
+ },
+
+ 'first-of-type': function(node, val) {
+ return getChildren(node.parentNode, node.tagName.toLowerCase())[0];
+ },
+
+ 'last-of-type': function(node, val) {
+ var children = getChildren(node.parentNode, node.tagName.toLowerCase());
+ return children[children.length - 1];
+ },
+
+ 'only-child': function(node) {
+ var children = getChildren(node.parentNode);
+ return children.length === 1 && children[0] === node;
+ },
+
+ 'only-of-type': function(node) {
+ return getChildren(node.parentNode, node.tagName.toLowerCase()).length === 1;
+ },
+
+ 'empty': function(node) {
+ return node.childNodes.length === 0;
+ },
+
+ 'not': function(node, simple) {
+ return !Selector.test(node, simple);
+ },
+
+ 'contains': function(node, str) {
+ var text = node.innerText || node.textContent || '';
+ return text.indexOf(str) > -1;
+ },
+ 'checked': function(node) {
+ return node.checked === true;
+ }
+ },
+
+ /**
+ * Test if the supplied node matches the supplied selector.
+ * @method test
+ *
+ * @param {HTMLElement | String} node An id or node reference to the HTMLElement being tested.
+ * @param {string} selector The CSS Selector to test the node against.
+ * @return{boolean} Whether or not the node matches the selector.
+ * @static
+
+ */
+ test: function(node, selector) {
+ node = Selector.document.getElementById(node) || node;
+
+ if (!node) {
+ return false;
+ }
+
+ var groups = selector ? selector.split(',') : [];
+ if (groups.length) {
+ for (var i = 0, len = groups.length; i < len; ++i) {
+ if ( rTestNode(node, groups[i]) ) { // passes if ANY group matches
+ return true;
+ }
+ }
+ return false;
+ }
+ return rTestNode(node, selector);
+ },
+
+ /**
+ * Filters a set of nodes based on a given CSS selector.
+ * @method filter
+ *
+ * @param {array} nodes A set of nodes/ids to filter.
+ * @param {string} selector The selector used to test each node.
+ * @return{array} An array of nodes from the supplied array that match the given selector.
+ * @static
+ */
+ filter: function(nodes, selector) {
+ nodes = nodes || [];
+
+ var node,
+ result = [],
+ tokens = tokenize(selector);
+
+ if (!nodes.item) { // if not HTMLCollection, handle arrays of ids and/or nodes
+ for (var i = 0, len = nodes.length; i < len; ++i) {
+ if (!nodes[i].tagName) { // tagName limits to HTMLElements
+ node = Selector.document.getElementById(nodes[i]);
+ if (node) { // skip IDs that return null
+ nodes[i] = node;
+ } else {
+ }
+ }
+ }
+ }
+ result = rFilter(nodes, tokenize(selector)[0]);
+ clearParentCache();
+ return result;
+ },
+
+ /**
+ * Retrieves a set of nodes based on a given CSS selector.
+ * @method query
+ *
+ * @param {string} selector The CSS Selector to test the node against.
+ * @param {HTMLElement | String} root optional An id or HTMLElement to start the query from. Defaults to Selector.document.
+ * @param {Boolean} firstOnly optional Whether or not to return only the first match.
+ * @return {Array} An array of nodes that match the given selector.
+ * @static
+ */
+ query: function(selector, root, firstOnly) {
+ var result = query(selector, root, firstOnly);
+ return result;
+ }
+};
+
+var query = function(selector, root, firstOnly, deDupe) {
+ var result = (firstOnly) ? null : [];
+ if (!selector) {
+ return result;
+ }
+
+ var groups = selector.split(','); // TODO: handle comma in attribute/pseudo
+
+ if (groups.length > 1) {
+ var found;
+ for (var i = 0, len = groups.length; i < len; ++i) {
+ found = arguments.callee(groups[i], root, firstOnly, true);
+ result = firstOnly ? found : result.concat(found);
+ }
+ clearFoundCache();
+ return result;
+ }
+
+ if (root && !root.nodeName) { // assume ID
+ root = Selector.document.getElementById(root);
+ if (!root) {
+ return result;
+ }
+ }
+
+ root = root || Selector.document;
+ var tokens = tokenize(selector);
+ var idToken = tokens[getIdTokenIndex(tokens)],
+ nodes = [],
+ node,
+ id,
+ token = tokens.pop() || {};
+
+ if (idToken) {
+ id = getId(idToken.attributes);
+ }
+
+ // use id shortcut when possible
+ if (id) {
+ node = Selector.document.getElementById(id);
+
+ if (node && (root.nodeName == '#document' || contains(node, root))) {
+ if ( rTestNode(node, null, idToken) ) {
+ if (idToken === token) {
+ nodes = [node]; // simple selector
+ } else {
+ root = node; // start from here
+ }
+ }
+ } else {
+ return result;
+ }
+ }
+
+ if (root && !nodes.length) {
+ nodes = root.getElementsByTagName(token.tag);
+ }
+
+ if (nodes.length) {
+ result = rFilter(nodes, token, firstOnly, deDupe);
+ }
+
+ clearParentCache();
+ return result;
+};
+
+var contains = function() {
+ if (document.documentElement.contains && !YAHOO.env.ua.webkit < 422) { // IE & Opera, Safari < 3 contains is broken
+ return function(needle, haystack) {
+ return haystack.contains(needle);
+ };
+ } else if ( document.documentElement.compareDocumentPosition ) { // gecko
+ return function(needle, haystack) {
+ return !!(haystack.compareDocumentPosition(needle) & 16);
+ };
+ } else { // Safari < 3
+ return function(needle, haystack) {
+ var parent = needle.parentNode;
+ while (parent) {
+ if (needle === parent) {
+ return true;
+ }
+ parent = parent.parentNode;
+ }
+ return false;
+ };
+ }
+}();
+
+var rFilter = function(nodes, token, firstOnly, deDupe) {
+ var result = firstOnly ? null : [];
+
+ for (var i = 0, len = nodes.length; i < len; i++) {
+ if (! rTestNode(nodes[i], '', token, deDupe)) {
+ continue;
+ }
+
+ if (firstOnly) {
+ return nodes[i];
+ }
+ if (deDupe) {
+ if (nodes[i]._found) {
+ continue;
+ }
+ nodes[i]._found = true;
+ foundCache[foundCache.length] = nodes[i];
+ }
+
+ result[result.length] = nodes[i];
+ }
+
+ return result;
+};
+
+var rTestNode = function(node, selector, token, deDupe) {
+ token = token || tokenize(selector).pop() || {};
+
+ if (!node.tagName ||
+ (token.tag !== '*' && node.tagName.toUpperCase() !== token.tag) ||
+ (deDupe && node._found) ) {
+ return false;
+ }
+
+ if (token.attributes.length) {
+ var attribute;
+ for (var i = 0, len = token.attributes.length; i < len; ++i) {
+ attribute = node.getAttribute(token.attributes[i][0], 2);
+ if (attribute === null || attribute === undefined) {
+ return false;
+ }
+ if ( Selector.operators[token.attributes[i][1]] &&
+ !Selector.operators[token.attributes[i][1]](attribute, token.attributes[i][2])) {
+ return false;
+ }
+ }
+ }
+
+ if (token.pseudos.length) {
+ for (var i = 0, len = token.pseudos.length; i < len; ++i) {
+ if (Selector.pseudos[token.pseudos[i][0]] &&
+ !Selector.pseudos[token.pseudos[i][0]](node, token.pseudos[i][1])) {
+ return false;
+ }
+ }
+ }
+
+ return (token.previous && token.previous.combinator !== ',') ?
+ combinators[token.previous.combinator](node, token) :
+ true;
+};
+
+
+var foundCache = [];
+var parentCache = [];
+var regexCache = {};
+
+var clearFoundCache = function() {
+ for (var i = 0, len = foundCache.length; i < len; ++i) {
+ try { // IE no like delete
+ delete foundCache[i]._found;
+ } catch(e) {
+ foundCache[i].removeAttribute('_found');
+ }
+ }
+ foundCache = [];
+};
+
+var clearParentCache = function() {
+ if (!document.documentElement.children) { // caching children lookups for gecko
+ return function() {
+ for (var i = 0, len = parentCache.length; i < len; ++i) {
+ delete parentCache[i]._children;
+ }
+ parentCache = [];
+ };
+ } else return function() {}; // do nothing
+}();
+
+var getRegExp = function(str, flags) {
+ flags = flags || '';
+ if (!regexCache[str + flags]) {
+ regexCache[str + flags] = new RegExp(str, flags);
+ }
+ return regexCache[str + flags];
+};
+
+var combinators = {
+ ' ': function(node, token) {
+ while (node = node.parentNode) {
+ if (rTestNode(node, '', token.previous)) {
+ return true;
+ }
+ }
+ return false;
+ },
+
+ '>': function(node, token) {
+ return rTestNode(node.parentNode, null, token.previous);
+ },
+
+ '+': function(node, token) {
+ var sib = node.previousSibling;
+ while (sib && sib.nodeType !== 1) {
+ sib = sib.previousSibling;
+ }
+
+ if (sib && rTestNode(sib, null, token.previous)) {
+ return true;
+ }
+ return false;
+ },
+
+ '~': function(node, token) {
+ var sib = node.previousSibling;
+ while (sib) {
+ if (sib.nodeType === 1 && rTestNode(sib, null, token.previous)) {
+ return true;
+ }
+ sib = sib.previousSibling;
+ }
+
+ return false;
+ }
+};
+
+var getChildren = function() {
+ if (document.documentElement.children) { // document for capability test
+ return function(node, tag) {
+ return (tag) ? node.children.tags(tag) : node.children || [];
+ };
+ } else {
+ return function(node, tag) {
+ if (node._children) {
+ return node._children;
+ }
+ var children = [],
+ childNodes = node.childNodes;
+
+ for (var i = 0, len = childNodes.length; i < len; ++i) {
+ if (childNodes[i].tagName) {
+ if (!tag || childNodes[i].tagName.toLowerCase() === tag) {
+ children[children.length] = childNodes[i];
+ }
+ }
+ }
+ node._children = children;
+ parentCache[parentCache.length] = node;
+ return children;
+ };
+ }
+}();
+
+/*
+ an+b = get every _a_th node starting at the _b_th
+ 0n+b = no repeat ("0" and "n" may both be omitted (together) , e.g. "0n+1" or "1", not "0+1"), return only the _b_th element
+ 1n+b = get every element starting from b ("1" may may be omitted, e.g. "1n+0" or "n+0" or "n")
+ an+0 = get every _a_th element, "0" may be omitted
+*/
+var getNth = function(node, expr, tag, reverse) {
+ if (tag) tag = tag.toLowerCase();
+ reNth.test(expr);
+ var a = parseInt(RegExp.$1, 10), // include every _a_ elements (zero means no repeat, just first _a_)
+ n = RegExp.$2, // "n"
+ oddeven = RegExp.$3, // "odd" or "even"
+ b = parseInt(RegExp.$4, 10) || 0, // start scan from element _b_
+ result = [];
+
+ var siblings = getChildren(node.parentNode, tag);
+
+ if (oddeven) {
+ a = 2; // always every other
+ op = '+';
+ n = 'n';
+ b = (oddeven === 'odd') ? 1 : 0;
+ } else if ( isNaN(a) ) {
+ a = (n) ? 1 : 0; // start from the first or no repeat
+ }
+
+ if (a === 0) { // just the first
+ if (reverse) {
+ b = siblings.length - b + 1;
+ }
+
+ if (siblings[b - 1] === node) {
+ return true;
+ } else {
+ return false;
+ }
+
+ } else if (a < 0) {
+ reverse = !!reverse;
+ a = Math.abs(a);
+ }
+
+ if (!reverse) {
+ for (var i = b - 1, len = siblings.length; i < len; i += a) {
+ if ( i >= 0 && siblings[i] === node ) {
+ return true;
+ }
+ }
+ } else {
+ for (var i = siblings.length - b, len = siblings.length; i >= 0; i -= a) {
+ if ( i < len && siblings[i] === node ) {
+ return true;
+ }
+ }
+ }
+ return false;
+};
+
+var getId = function(attr) {
+ for (var i = 0, len = attr.length; i < len; ++i) {
+ if (attr[i][0] == 'id' && attr[i][1] === '=') {
+ return attr[i][2];
+ }
+ }
+};
+
+var getIdTokenIndex = function(tokens) {
+ for (var i = 0, len = tokens.length; i < len; ++i) {
+ if (getId(tokens[i].attributes)) {
+ return i;
+ }
+ }
+ return -1;
+};
+
+var patterns = {
+ tag: /^((?:-?[_a-z]+[\w-]*)|\*)/i,
+ attributes: /^\[([a-z]+\w*)+([~\|\^\$\*!=]=?)?['"]?([^\]]*?)['"]?\]/i,
+ //attributes: /^\[([a-z]+\w*)+([~\|\^\$\*!=]=?)?['"]?([^'"\]]*)['"]?\]*/i,
+ pseudos: /^:([-\w]+)(?:\(['"]?(.+)['"]?\))*/i,
+ combinator: /^\s*([>+~]|\s)\s*/
+};
+
+/**
+ Break selector into token units per simple selector.
+ Combinator is attached to left-hand selector.
+ */
+var tokenize = function(selector) {
+ var token = {}, // one token per simple selector (left selector holds combinator)
+ tokens = [], // array of tokens
+ id, // unique id for the simple selector (if found)
+ found = false, // whether or not any matches were found this pass
+ match; // the regex match
+
+ selector = replaceShorthand(selector); // convert ID and CLASS shortcuts to attributes
+
+ /*
+ Search for selector patterns, store, and strip them from the selector string
+ until no patterns match (invalid selector) or we run out of chars.
+
+ Multiple attributes and pseudos are allowed, in any order.
+ for example:
+ 'form:first-child[type=button]:not(button)[lang|=en]'
+ */
+ do {
+ found = false; // reset after full pass
+ for (var re in patterns) {
+ if (!YAHOO.lang.hasOwnProperty(patterns, re)) {
+ continue;
+ }
+ if (re != 'tag' && re != 'combinator') { // only one allowed
+ token[re] = token[re] || [];
+ }
+ if (match = patterns[re].exec(selector)) { // note assignment
+ found = true;
+ if (re != 'tag' && re != 'combinator') { // only one allowed
+ //token[re] = token[re] || [];
+
+ // capture ID for fast path to element
+ if (re === 'attributes' && match[1] === 'id') {
+ token.id = match[3];
+ }
+
+ token[re].push(match.slice(1));
+ } else { // single selector (tag, combinator)
+ token[re] = match[1];
+ }
+ selector = selector.replace(match[0], ''); // strip current match from selector
+ if (re === 'combinator' || !selector.length) { // next token or done
+ token.attributes = fixAttributes(token.attributes);
+ token.pseudos = token.pseudos || [];
+ token.tag = token.tag ? token.tag.toUpperCase() : '*';
+ tokens.push(token);
+
+ token = { // prep next token
+ previous: token
+ };
+ }
+ }
+ }
+ } while (found);
+
+ return tokens;
+};
+
+var fixAttributes = function(attr) {
+ var aliases = Selector.attrAliases;
+ attr = attr || [];
+ for (var i = 0, len = attr.length; i < len; ++i) {
+ if (aliases[attr[i][0]]) { // convert reserved words, etc
+ attr[i][0] = aliases[attr[i][0]];
+ }
+ if (!attr[i][1]) { // use exists operator
+ attr[i][1] = '';
+ }
+ }
+ return attr;
+};
+
+var replaceShorthand = function(selector) {
+ var shorthand = Selector.shorthand;
+ var attrs = selector.match(patterns.attributes); // pull attributes to avoid false pos on "." and "#"
+ if (attrs) {
+ selector = selector.replace(patterns.attributes, 'REPLACED_ATTRIBUTE');
+ }
+ for (var re in shorthand) {
+ if (!YAHOO.lang.hasOwnProperty(shorthand, re)) {
+ continue;
+ }
+ selector = selector.replace(getRegExp(re, 'gi'), shorthand[re]);
+ }
+
+ if (attrs) {
+ for (var i = 0, len = attrs.length; i < len; ++i) {
+ selector = selector.replace('REPLACED_ATTRIBUTE', attrs[i]);
+ }
+ }
+ return selector;
+};
+
+Selector = new Selector();
+Selector.patterns = patterns;
+Y.Selector = Selector;
+
+if (YAHOO.env.ua.ie) { // rewrite class for IE (others use getAttribute('class')
+ Y.Selector.attrAliases['class'] = 'className';
+ Y.Selector.attrAliases['for'] = 'htmlFor';
+}
+
+})();
+YAHOO.register("selector", YAHOO.util.Selector, {version: "2.6.0", build: "1321"});
diff --git a/testing/talos/talos/tests/dromaeo/pngfix.js b/testing/talos/talos/tests/dromaeo/pngfix.js
new file mode 100644
index 0000000000..ec211d1c7b
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/pngfix.js
@@ -0,0 +1,28 @@
+
+var arVersion = navigator.appVersion.split("MSIE")
+var version = parseFloat(arVersion[1])
+
+if ((version >= 5.5) && (document.body.filters))
+{
+ for(var i=0; i<document.images.length; i++)
+ {
+ var img = document.images[i]
+ var imgName = img.src.toUpperCase()
+ if (imgName.indexOf('.PNG') > -1)
+ {
+ var imgID = (img.id) ? "id='" + img.id + "' " : ""
+ var imgClass = (img.className) ? "class='" + img.className + "' " : ""
+ var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' "
+ var imgStyle = "display:inline-block;" + img.style.cssText
+ if (img.align == "left") imgStyle = "float:left;" + imgStyle
+ if (img.align == "right") imgStyle = "float:right;" + imgStyle
+ if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle
+ var strNewHTML = "<span " + imgID + imgClass + imgTitle
+ + " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";"
+ + "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
+ + "(src=\'" + img.src + "\', sizingMethod='scale');\"></span>"
+ img.outerHTML = strNewHTML
+ i = i-1
+ }
+ }
+} \ No newline at end of file
diff --git a/testing/talos/talos/tests/dromaeo/reset.css b/testing/talos/talos/tests/dromaeo/reset.css
new file mode 100644
index 0000000000..4a3cf94153
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/reset.css
@@ -0,0 +1,38 @@
+/* --------------------------------------------------------------
+
+ reset.css
+ * Resets default browser CSS.
+
+ Based on work by Eric Meyer:
+ * meyerweb.com/eric/thoughts/2007/05/01/reset-reloaded/
+
+-------------------------------------------------------------- */
+
+html, body, div, span, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+a, abbr, acronym, address, code,
+del, dfn, em, img, q, dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend,
+table, caption, tbody, tfoot, thead, tr, th, td {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font-weight: inherit;
+ font-style: inherit;
+ font-size: 100%;
+ font-family: inherit;
+ vertical-align: baseline;
+}
+
+
+body { line-height: 1.5; background: #fff; margin:1.5em 0; }
+
+/* Tables still need 'cellspacing="0"' in the markup. */
+caption, th, td { text-align: left; font-weight:400; }
+
+/* Remove possible quote marks (") from <q>, <blockquote>. */
+blockquote:before, blockquote:after, q:before, q:after { content: ""; }
+blockquote, q { quotes: "" ""; }
+
+a img { border: none; }
+
diff --git a/testing/talos/talos/tests/dromaeo/store.php b/testing/talos/talos/tests/dromaeo/store.php
new file mode 100644
index 0000000000..3d38074c84
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/store.php
@@ -0,0 +1,58 @@
+<?php
+
+ $server = 'mysql.dromaeo.com';
+ $user = 'dromaeo';
+ $pass = 'dromaeo';
+
+ require('JSON.php');
+
+ $json = new Services_JSON();
+ $sql = mysql_connect( $server, $user, $pass );
+
+ mysql_select_db( 'dromaeo' );
+
+ $id = str_replace(';', "", $_REQUEST['id']);
+
+ if ( $id ) {
+ $sets = array();
+ $ids = split(",", $id);
+
+ foreach ($ids as $i) {
+ $query = mysql_query( "SELECT * FROM runs WHERE id=$i;" );
+ $data = mysql_fetch_assoc($query);
+
+ $query = mysql_query( "SELECT * FROM results WHERE run_id=$i;" );
+ $results = array();
+
+ while ( $row = mysql_fetch_assoc($query) ) {
+ array_push($results, $row);
+ }
+
+ $data['results'] = $results;
+ $data['ip'] = '';
+
+ array_push($sets, $data);
+ }
+
+ echo $json->encode($sets);
+ } else {
+ $data = $json->decode(str_replace('\\"', '"', $_REQUEST['data']));
+
+ if ( $data ) {
+ mysql_query( sprintf("INSERT into runs VALUES(NULL,'%s','%s',NOW(),'%s');",
+ $_SERVER['HTTP_USER_AGENT'], $_SERVER['REMOTE_ADDR'], str_replace(';', "", $_REQUEST['style'])) );
+
+ $id = mysql_insert_id();
+
+ if ( $id ) {
+
+ foreach ($data as $row) {
+ mysql_query( sprintf("INSERT into results VALUES(NULL,'%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s');",
+ $id, $row->collection, $row->version, $row->name, $row->scale, $row->median, $row->min, $row->max, $row->mean, $row->deviation, $row->runs) );
+ }
+
+ echo $id;
+ }
+ }
+ }
+?>
diff --git a/testing/talos/talos/tests/dromaeo/test-head.html b/testing/talos/talos/tests/dromaeo/test-head.html
new file mode 100644
index 0000000000..481251c502
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/test-head.html
@@ -0,0 +1,4 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script>
diff --git a/testing/talos/talos/tests/dromaeo/test-head.js b/testing/talos/talos/tests/dromaeo/test-head.js
new file mode 100644
index 0000000000..9839f99315
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/test-head.js
@@ -0,0 +1,2 @@
+(function(){
+
diff --git a/testing/talos/talos/tests/dromaeo/test-tail.html b/testing/talos/talos/tests/dromaeo/test-tail.html
new file mode 100644
index 0000000000..1b4431bad6
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/test-tail.html
@@ -0,0 +1,4 @@
+</script>
+</head>
+<body></body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/test-tail.js b/testing/talos/talos/tests/dromaeo/test-tail.js
new file mode 100644
index 0000000000..0319a0fe5f
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/test-tail.js
@@ -0,0 +1 @@
+})();
diff --git a/testing/talos/talos/tests/dromaeo/tests/MANIFEST.json b/testing/talos/talos/tests/dromaeo/tests/MANIFEST.json
new file mode 100644
index 0000000000..24d6376ad6
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/MANIFEST.json
@@ -0,0 +1,442 @@
+{
+"dromaeo-3d-cube": {
+ file: "dromaeo-3d-cube.html",
+ name: "Rotating 3D Cube",
+ origin: ["Simon Speich", "http://www.speich.net/computer/moztesting/3d.htm"],
+ desc: "Rotating the individual pixels of a cube. No rendering done.",
+ category: "Dromaeo JavaScript Tests",
+ tags: ["object", "array", "property", "math"]
+},
+"dromaeo-string-base64": {
+ file: "dromaeo-string-base64.html",
+ name: "Base 64 Encoding and Decoding",
+ origin: ["Mozilla", "http://mozilla.org/"],
+ desc: "Encode and decode a random string to base 64.",
+ category: "Dromaeo JavaScript Tests",
+ tags: ["string","array","looping","bitops"]
+},
+"dromaeo-core-eval": {
+ file: "dromaeo-core-eval.html",
+ name: "Code Evaluation",
+ origin: ["John Resig", "http://ejohn.org/"],
+ desc: "Microtests of code evaluation (eval, new Function).",
+ category: "Dromaeo JavaScript Tests",
+ tags: ["eval","microtest"]
+},
+"dromaeo-object-array": {
+ file: "dromaeo-object-array.html",
+ name: "Arrays",
+ origin: ["John Resig", "http://ejohn.org/"],
+ desc: "Microtests of arrays (construction, methods, access).",
+ category: "Dromaeo JavaScript Tests",
+ tags: ["array","microtest"]
+},
+"dromaeo-object-regexp": {
+ file: "dromaeo-object-regexp.html",
+ name: "Regular Expressions",
+ origin: ["John Resig", "http://ejohn.org/"],
+ desc: "Microtests of regular expressions (construction, matching, replace).",
+ category: "Dromaeo JavaScript Tests",
+ tags: ["regexp","microtest"]
+},
+"dromaeo-object-string": {
+ file: "dromaeo-object-string.html",
+ name: "Strings",
+ origin: ["John Resig", "http://ejohn.org/"],
+ desc: "Microtests of strings (concatenation, methods).",
+ category: "Dromaeo JavaScript Tests",
+ tags: ["string","microtest"]
+},
+"v8-crypto": {
+ file: "v8-crypto.html",
+ name: "RSA Encryption/Decryption",
+ origin: ["V8 Benchmark", "http://code.google.com/apis/v8/benchmarks.html"],
+ desc: "Encrypt a string and then decrypt it again using RSA.",
+ category: "V8 Benchmark Tests",
+ tags: ["looping","string","bitops"]
+},
+"v8-deltablue": {
+ file: "v8-deltablue.html",
+ name: "DeltaBlue Constraint Solving",
+ origin: ["V8 Benchmark", "http://code.google.com/apis/v8/benchmarks.html"],
+ desc: "Computing a number of limitations on a set of values.",
+ category: "V8 Benchmark Tests",
+ tags: ["looping","functions"]
+},
+"v8-earley-boyer": {
+ file: "v8-earley-boyer.html",
+ name: "String Parsing and Searching",
+ origin: ["V8 Benchmark", "http://code.google.com/apis/v8/benchmarks.html"],
+ desc: "Tests for parsing languages and searching strings.",
+ category: "V8 Benchmark Tests",
+ tags: ["looping","functions","string"]
+},
+"v8-raytrace": {
+ file: "v8-raytrace.html",
+ name: "RayTracer",
+ origin: ["V8 Benchmark", "http://code.google.com/apis/v8/benchmarks.html"],
+ desc: "Renders a scene using raytracing (no rendering done).",
+ category: "V8 Benchmark Tests",
+ tags: ["looping","functions","object"]
+},
+"v8-richards": {
+ file: "v8-richards.html",
+ name: "Richards Benchmarks",
+ origin: ["V8 Benchmark", "http://code.google.com/apis/v8/benchmarks.html"],
+ desc: "A series of benchmarks to test the quality of system implementation languages.",
+ category: "V8 Benchmark Tests",
+ tags: ["functions","object"]
+},
+"sunspider-3d-morph": {
+ file: "sunspider-3d-morph.html",
+ name: "3D Mesh Transformation",
+ origin: ["WebKit", "http://webkit.org/misc/morph.html"],
+ desc: "Transforming the points of a matrix. No visual output.",
+ category: "SunSpider JavaScript Tests",
+ tags: ["array", "looping", "math"]
+},
+"sunspider-3d-raytrace": {
+ file: "sunspider-3d-raytrace.html",
+ name: "3D Raytrace",
+ origin: ["Apple", "http://apple.com/"],
+ desc: "Rendering a scene using raytracing techniques. No visual output.",
+ category: "SunSpider JavaScript Tests",
+ tags: ["array", "functions", "math"]
+},
+"sunspider-access-binary-trees": {
+ file: "sunspider-access-binary-trees.html",
+ name: "Traversing Binary Trees",
+ origin: ["Language Shootout", "http://shootout.alioth.debian.org/"],
+ desc: "Moving through an object representation of a binary tree.",
+ category: "SunSpider JavaScript Tests",
+ tags: ["object", "recursion"]
+},
+"sunspider-access-fannkuch": {
+ file: "sunspider-access-fannkuch.html",
+ name: "Fannkuch",
+ origin: ["Language Shootout", "http://shootout.alioth.debian.org/"],
+ desc: "Figure out the number of ways in which a set of numbers can be manipulated.",
+ category: "SunSpider JavaScript Tests",
+ tags: ["array", "looping"]
+},
+"sunspider-access-nbody": {
+ file: "sunspider-access-nbody.html",
+ name: "N-Body Rotation and Gravity",
+ origin: ["Language Shootout", "http://shootout.alioth.debian.org/"],
+ desc: "Compute the location of multiple planets based upon rotation and gravity.",
+ category: "SunSpider JavaScript Tests",
+ tags: ["object", "property", "looping", "math"]
+},
+"sunspider-access-nsieve": {
+ file: "sunspider-access-nsieve.html",
+ name: "Prime Number Computation",
+ origin: ["Language Shootout", "http://shootout.alioth.debian.org/"],
+ desc: "Compute the number of prime numbers in a specific range of numbers.",
+ category: "SunSpider JavaScript Tests",
+ tags: ["looping", "array"]
+},
+"sunspider-bitops-3bit-bits-in-byte": {
+ file: "sunspider-bitops-3bit-bits-in-byte.html",
+ name: "Compute Bits in Byte",
+ origin: ["SunSpider", "http://www2.webkit.org/perf/sunspider-0.9/sunspider.html"],
+ desc: "Compute the number of bits in a number using bitops.",
+ category: "SunSpider JavaScript Tests",
+ tags: ["looping", "bitops"]
+},
+"sunspider-bitops-bits-in-byte": {
+ file: "sunspider-bitops-bits-in-byte.html",
+ name: "Compute Bits in Byte (2)",
+ origin: ["SunSpider", "http://www2.webkit.org/perf/sunspider-0.9/sunspider.html"],
+ desc: "Compute the number of bits in a number using bitops.",
+ category: "SunSpider JavaScript Tests",
+ tags: ["looping", "bitops"]
+},
+"sunspider-bitops-bitwise-and": {
+ file: "sunspider-bitops-bitwise-and.html",
+ name: "Bitwise And",
+ origin: ["SunSpider", "http://www2.webkit.org/perf/sunspider-0.9/sunspider.html"],
+ desc: "Compute a number by using a series of 'and' bit operations.",
+ category: "SunSpider JavaScript Tests",
+ tags: ["looping", "bitops"]
+},
+"sunspider-bitops-nsieve-bits": {
+ file: "sunspider-bitops-nsieve-bits.html",
+ name: "Prime Number Computation (2)",
+ origin: ["Language Shootout", "http://shootout.alioth.debian.org/"],
+ desc: "Compute the number of prime numbers in a specific range of numbers using bit operations.",
+ category: "SunSpider JavaScript Tests",
+ tags: ["looping", "bitops", "array"]
+},
+"sunspider-controlflow-recursive": {
+ file: "sunspider-controlflow-recursive.html",
+ name: "Recursive Number Calculation",
+ origin: ["Language Shootout", "http://shootout.alioth.debian.org/"],
+ desc: "Compute various numbers in a recursive manner.",
+ category: "SunSpider JavaScript Tests",
+ tags: ["functions"]
+},
+"sunspider-crypto-aes": {
+ file: "sunspider-crypto-aes.html",
+ name: "AES Encryption/Decryption",
+ origin: ["SunSpider", "http://www2.webkit.org/perf/sunspider-0.9/sunspider.html"],
+ desc: "Encrypt a string and then decrypt it again using AES.",
+ category: "SunSpider JavaScript Tests",
+ tags: ["looping","string","bitops"]
+},
+"sunspider-crypto-md5": {
+ file: "sunspider-crypto-md5.html",
+ name: "MD5 Hashing",
+ origin: ["SunSpider", "http://www2.webkit.org/perf/sunspider-0.9/sunspider.html"],
+ desc: "Hash a long string using MD5.",
+ category: "SunSpider JavaScript Tests",
+ tags: ["looping","string"]
+},
+"sunspider-crypto-sha1": {
+ file: "sunspider-crypto-sha1.html",
+ name: "SHA1 Hashing",
+ origin: ["SunSpider", "http://www2.webkit.org/perf/sunspider-0.9/sunspider.html"],
+ desc: "Hash a long string using SHA1.",
+ category: "SunSpider JavaScript Tests",
+ tags: ["looping","string"]
+},
+"sunspider-date-format-xparb": {
+ file: "sunspider-date-format-xparb.html",
+ name: "Date Formatting",
+ origin: ["SunSpider", "http://www2.webkit.org/perf/sunspider-0.9/sunspider.html"],
+ desc: "Converting a date into a string representation.",
+ category: "SunSpider JavaScript Tests",
+ tags: ["date","string"]
+},
+"sunspider-date-format-tofte": {
+ file: "sunspider-date-format-tofte.html",
+ name: "Date Formatting (2)",
+ origin: ["SunSpider", "http://www2.webkit.org/perf/sunspider-0.9/sunspider.html"],
+ desc: "Converting a date into a string representation.",
+ category: "SunSpider JavaScript Tests",
+ tags: ["date","string"]
+},
+"sunspider-math-cordic": {
+ file: "sunspider-math-cordic.html",
+ name: "Trigonometric Calculation",
+ origin: ["SunSpider", "http://www2.webkit.org/perf/sunspider-0.9/sunspider.html"],
+ desc: "Calculate values from hyperbolic and trigonometric functions.",
+ category: "SunSpider JavaScript Tests",
+ tags: ["math","looping"]
+},
+"sunspider-math-partial-sums": {
+ file: "sunspider-math-partial-sums.html",
+ name: "Partial Sum Calculation",
+ origin: ["Language Shootout", "http://shootout.alioth.debian.org/"],
+ desc: "Calculate the partial sum of a few different number series.",
+ category: "SunSpider JavaScript Tests",
+ tags: ["math","looping"]
+},
+"sunspider-math-spectral-norm": {
+ file: "sunspider-math-spectral-norm.html",
+ name: "Spectral Norm of a Matrix",
+ origin: ["Language Shootout", "http://shootout.alioth.debian.org/"],
+ desc: "Calculate the spectral norm of a matrix of numbers.",
+ category: "SunSpider JavaScript Tests",
+ tags: ["array","looping","math"]
+},
+"sunspider-regexp-dna": {
+ file: "sunspider-regexp-dna.html",
+ name: "DNA Sequence Counting",
+ origin: ["SunSpider", "http://www2.webkit.org/perf/sunspider-0.9/sunspider.html"],
+ desc: "Counts occurences in a DNA sequence.",
+ category: "SunSpider JavaScript Tests",
+ tags: ["string","regexp"]
+},
+"sunspider-string-fasta": {
+ file: "sunspider-string-fasta.html",
+ name: "DNA Sequence Alignment",
+ origin: ["Language Shootout", "http://shootout.alioth.debian.org/"],
+ desc: "Find DNA matches within a larger sequence.",
+ category: "SunSpider JavaScript Tests",
+ tags: ["string","object","looping"]
+},
+"sunspider-string-tagcloud": {
+ file: "sunspider-string-tagcloud.html",
+ name: "Tag Cloud Creation",
+ origin: ["SunSpider", "http://www2.webkit.org/perf/sunspider-0.9/sunspider.html"],
+ desc: "Convert a JSON structure into an HTML tag cloud.",
+ category: "SunSpider JavaScript Tests",
+ tags: ["string","regexp"]
+},
+"sunspider-string-unpack-code": {
+ file: "sunspider-string-unpack-code.html",
+ name: "Script Unpacking",
+ origin: ["John Resig", "http://ejohn.org/"],
+ desc: "Decompressing scripts run through Dean Edwards' Packer.",
+ category: "SunSpider JavaScript Tests",
+ tags: ["regexp","string","looping"]
+},
+"sunspider-string-validate-input": {
+ file: "sunspider-string-validate-input.html",
+ name: "Validate User Input",
+ origin: ["SunSpider", "http://www2.webkit.org/perf/sunspider-0.9/sunspider.html"],
+ desc: "Test user input against a series of rules.",
+ category: "SunSpider JavaScript Tests",
+ tags: ["string","regexp"]
+},
+"dom-attr": {
+ file: "dom-attr.html",
+ name: "DOM Attributes",
+ origin: ["John Resig", "http://ejohn.org/"],
+ desc: "Setting and getting DOM node attributes.",
+ category: "Dromaeo DOM Tests",
+ tags: ["dom","attributes"]
+},
+"dom-modify": {
+ file: "dom-modify.html",
+ name: "DOM Modification",
+ origin: ["John Resig", "http://ejohn.org/"],
+ desc: "Creating and injecting DOM nodes into a document.",
+ category: "Dromaeo DOM Tests",
+ tags: ["dom","modify"]
+},
+"dom-query": {
+ file: "dom-query.html",
+ name: "DOM Query",
+ origin: ["John Resig", "http://ejohn.org/"],
+ desc: "Querying DOM elements in a document.",
+ category: "Dromaeo DOM Tests",
+ tags: ["dom","query"]
+},
+"dom-traverse": {
+ file: "dom-traverse.html",
+ name: "DOM Traversal",
+ origin: ["John Resig", "http://ejohn.org/"],
+ desc: "Traversing a DOM structure.",
+ category: "Dromaeo DOM Tests",
+ tags: ["dom","traverse"]
+},
+"jslib-attr-jquery": {
+ file: "jslib-attr-jquery.html",
+ name: "DOM Attributes (jQuery)",
+ origin: ["John Resig", "http://ejohn.org/"],
+ desc: "Setting and getting DOM node attributes using the jQuery JavaScript Library.",
+ category: "JavaScript Library Tests",
+ tags: ["dom","jslib","jquery","attributes"]
+},
+"jslib-attr-prototype": {
+ file: "jslib-attr-prototype.html",
+ name: "DOM Attributes (Prototype)",
+ origin: ["John Resig", "http://ejohn.org/"],
+ desc: "Setting and getting DOM node attributes using the Prototype JavaScript Library.",
+ category: "JavaScript Library Tests",
+ tags: ["dom","jslib","prototype","attributes"]
+},
+"jslib-event-jquery": {
+ file: "jslib-event-jquery.html",
+ name: "DOM Events (jQuery)",
+ origin: ["John Resig", "http://ejohn.org/"],
+ desc: "Binding, removing, and triggering DOM events using the jQuery JavaScript Library.",
+ category: "JavaScript Library Tests",
+ tags: ["dom","jslib","jquery","events"]
+},
+"jslib-event-prototype": {
+ file: "jslib-event-prototype.html",
+ name: "DOM Events (Prototype)",
+ origin: ["John Resig", "http://ejohn.org/"],
+ desc: "Binding, removing, and triggering DOM events using the Prototype JavaScript Library.",
+ category: "JavaScript Library Tests",
+ tags: ["dom","jslib","prototype","events"]
+},
+"jslib-modify-jquery": {
+ file: "jslib-modify-jquery.html",
+ name: "DOM Modification (jQuery)",
+ origin: ["John Resig", "http://ejohn.org/"],
+ desc: "Creating and injecting DOM nodes into a document using the jQuery JavaScript Library.",
+ category: "JavaScript Library Tests",
+ tags: ["dom","jslib","jquery","modify"]
+},
+"jslib-modify-prototype": {
+ file: "jslib-modify-prototype.html",
+ name: "DOM Modification (Prototype)",
+ origin: ["John Resig", "http://ejohn.org/"],
+ desc: "Creating and injecting DOM nodes into a document using the Prototype JavaScript Library.",
+ category: "JavaScript Library Tests",
+ tags: ["dom","jslib","prototype","modify"]
+},
+"jslib-style-jquery": {
+ file: "jslib-style-jquery.html",
+ name: "DOM Style (jQuery)",
+ origin: ["John Resig", "http://ejohn.org/"],
+ desc: "Getting and setting CSS information on DOM elements using the jQuery JavaScript Library.",
+ category: "JavaScript Library Tests",
+ tags: ["dom","jslib","jquery","style"]
+},
+"jslib-style-prototype": {
+ file: "jslib-style-prototype.html",
+ name: "DOM Style (Prototype)",
+ origin: ["John Resig", "http://ejohn.org/"],
+ desc: "Getting and setting CSS information on DOM elements using the Prototype JavaScript Library.",
+ category: "JavaScript Library Tests",
+ tags: ["dom","jslib","prototype","style"]
+},
+"jslib-traverse-jquery": {
+ file: "jslib-traverse-jquery.html",
+ name: "DOM Traversal (jQuery)",
+ origin: ["John Resig", "http://ejohn.org/"],
+ desc: "Traversing a DOM structure using the jQuery JavaScript Library.",
+ category: "JavaScript Library Tests",
+ tags: ["dom","jslib","jquery","traverse"]
+},
+"jslib-traverse-prototype": {
+ file: "jslib-traverse-prototype.html",
+ name: "DOM Traversal (Prototype)",
+ origin: ["John Resig", "http://ejohn.org/"],
+ desc: "Traversing a DOM structure using the Prototype JavaScript Library.",
+ category: "JavaScript Library Tests",
+ tags: ["dom","jslib","prototype","traverse"]
+},
+"cssquery-jquery": {
+ file: "cssquery-jquery.html",
+ name: "DOM Query (jQuery)",
+ origin: ["John Resig", "http://ejohn.org/"],
+ desc: "Querying DOM elements in a document using the jQuery JavaScript Library.",
+ category: "CSS Selector Tests",
+ tags: ["dom","jslib","jquery","query"]
+},
+"cssquery-prototype": {
+ file: "cssquery-prototype.html",
+ name: "DOM Query (Prototype)",
+ origin: ["John Resig", "http://ejohn.org/"],
+ desc: "Querying DOM elements in a document using the Prototype JavaScript Library.",
+ category: "CSS Selector Tests",
+ tags: ["dom","jslib","prototype","query"]
+},
+"cssquery-dojo": {
+ file: "cssquery-dojo.html",
+ name: "DOM Query (Dojo)",
+ origin: ["John Resig", "http://ejohn.org/"],
+ desc: "Querying DOM elements in a document using the Dojo JavaScript Library.",
+ category: "CSS Selector Tests",
+ tags: ["dom","jslib","dojo","query"]
+},
+"cssquery-ext": {
+ file: "cssquery-ext.html",
+ name: "DOM Query (ExtJS)",
+ origin: ["John Resig", "http://ejohn.org/"],
+ desc: "Querying DOM elements in a document using the ExtJS JavaScript Library.",
+ category: "CSS Selector Tests",
+ tags: ["dom","jslib","extjs","query"]
+},
+"cssquery-mootools": {
+ file: "cssquery-mootools.html",
+ name: "DOM Query (Mootools)",
+ origin: ["John Resig", "http://ejohn.org/"],
+ desc: "Querying DOM elements in a document using the Mootools JavaScript Library.",
+ category: "CSS Selector Tests",
+ tags: ["dom","jslib","mootools","query"]
+},
+"cssquery-yui": {
+ file: "cssquery-yui.html",
+ name: "DOM Query (Yahoo UI)",
+ origin: ["John Resig", "http://ejohn.org/"],
+ desc: "Querying DOM elements in a document using the Yahoo UI JavaScript Library.",
+ category: "CSS Selector Tests",
+ tags: ["dom","jslib","yui","query"]
+}
+}
diff --git a/testing/talos/talos/tests/dromaeo/tests/cssquery-dojo.html b/testing/talos/talos/tests/dromaeo/tests/cssquery-dojo.html
new file mode 100644
index 0000000000..e8da2d058d
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/cssquery-dojo.html
@@ -0,0 +1,3063 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script src="../lib/dojo.js"></script>
+<script>
+window.onload = function(){
+startTest("cssquery-dojo", 'ed0ed65e');
+
+// Try to force real results
+var ret, tmp;
+
+var html = document.body.innerHTML;
+var query = dojo.query;
+
+ prep(function(){
+ var div = document.createElement("div");
+ div.innerHTML = html;
+ document.body.appendChild( div );
+ });
+
+ test("Dojo - *", function(){
+ query("*");
+ });
+
+ test("Dojo - div:only-child", function(){
+ query("div:only-child");
+ });
+
+ test("Dojo - div:first-child", function(){
+ query("div:first-child");
+ });
+
+ test("Dojo - div:nth-child(even)", function(){
+ query("div:nth-child(even)");
+ });
+
+ test("Dojo - div:nth-child(2n)", function(){
+ query("div:nth-child(2n)");
+ });
+
+ test("Dojo - div:nth-child(odd)", function(){
+ query("div:nth-child(odd)");
+ });
+
+ test("Dojo - div:nth-child(2n+1)", function(){
+ query("div:nth-child(2n+1)");
+ });
+
+ test("Dojo - div:nth-child(n)", function(){
+ query("div:nth-child(n)");
+ });
+
+ test("Dojo - div:last-child", function(){
+ query("div:last-child");
+ });
+
+ test("Dojo - div > div", function(){
+ query("div > div");
+ });
+
+ test("Dojo - div + div", function(){
+ query("div + div");
+ });
+
+ test("Dojo - div ~ div", function(){
+ query("div ~ div");
+ });
+
+ test("Dojo - body", function(){
+ query("body");
+ });
+
+ test("Dojo - body div", function(){
+ query("body div");
+ });
+
+ test("Dojo - div", function(){
+ query("div");
+ });
+
+ test("Dojo - div div", function(){
+ query("div div");
+ });
+
+ test("Dojo - div div div", function(){
+ query("div div div");
+ });
+
+ test("Dojo - div, div, div", function(){
+ query("div, div, div");
+ });
+
+ test("Dojo - div, a, span", function(){
+ query("div, a, span");
+ });
+
+ test("Dojo - .dialog", function(){
+ query(".dialog");
+ });
+
+ test("Dojo - div.dialog", function(){
+ query("div.dialog");
+ });
+
+ test("Dojo - div .dialog", function(){
+ query("div .dialog");
+ });
+
+ test("Dojo - div.character, div.dialog", function(){
+ query("div.character, div.dialog");
+ });
+
+ test("Dojo - #speech5", function(){
+ query("#speech5");
+ });
+
+ //test("Dojo - div#speech5", function(){
+ //query("div#speech5");
+ //});
+
+ //test("Dojo - div #speech5", function(){
+ //query("div #speech5");
+ //});
+
+ test("Dojo - div.scene div.dialog", function(){
+ query("div.scene div.dialog");
+ });
+
+ //test("Dojo - div#scene1 div.dialog div", function(){
+ //query("div#scene1 div.dialog div");
+ //});
+
+ test("Dojo - #scene1 #speech1", function(){
+ query("#scene1 #speech1");
+ });
+
+ test("Dojo - div[class]", function(){
+ query("div[class]");
+ });
+
+ test("Dojo - div[class=dialog]", function(){
+ query("div[class=dialog]");
+ });
+
+ test("Dojo - div[class^=dia]", function(){
+ query("div[class^=dia]");
+ });
+
+ test("Dojo - div[class$=log]", function(){
+ query("div[class$=log]");
+ });
+
+ test("Dojo - div[class*=sce]", function(){
+ query("div[class*=sce]");
+ });
+
+ test("Dojo - div[class|=dialog]", function(){
+ query("div[class|=dialog]");
+ });
+
+ test("Dojo - div[class~=dialog]", function(){
+ query("div[class~=dialog]");
+ });
+
+endTest();
+};
+</script>
+</head>
+<body>
+ <div class="head">
+ <p><a href="http://www.w3.org/"><img height=48 alt=W3C src="w3c_home.png" width=72></a>
+
+ <h1 id="title">Selectors</h1>
+
+ <h2>W3C Working Draft 15 December 2005</h2>
+
+ <dl>
+
+ <dt>This version:
+
+ <dd><a href="http://www.w3.org/TR/2005/WD-css3-selectors-20051215">
+ http://www.w3.org/TR/2005/WD-css3-selectors-20051215</a>
+
+ <dt>Latest version:
+
+ <dd><a href="http://www.w3.org/TR/css3-selectors">
+ http://www.w3.org/TR/css3-selectors</a>
+
+ <dt>Previous version:
+
+ <dd><a href="http://www.w3.org/TR/2001/CR-css3-selectors-20011113">
+ http://www.w3.org/TR/2001/CR-css3-selectors-20011113</a>
+
+ <dt><a name=editors-list></a>Editors:
+
+ <dd class="vcard"><span class="fn">Daniel Glazman</span> (Invited Expert)</dd>
+
+ <dd class="vcard"><a lang="tr" class="url fn" href="http://www.tantek.com/">Tantek &Ccedil;elik</a> (Invited Expert)
+
+ <dd class="vcard"><a href="mailto:ian@hixie.ch" class="url fn">Ian Hickson</a> (<span
+ class="company"><a href="http://www.google.com/">Google</a></span>)
+
+ <dd class="vcard"><span class="fn">Peter Linss</span> (former editor, <span class="company"><a
+ href="http://www.netscape.com/">Netscape/AOL</a></span>)
+
+ <dd class="vcard"><span class="fn">John Williams</span> (former editor, <span class="company"><a
+ href="http://www.quark.com/">Quark, Inc.</a></span>)
+
+ </dl>
+
+ <p class="copyright"><a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright">
+ Copyright</a> &copy; 2005 <a href="http://www.w3.org/"><abbr
+ title="World Wide Web Consortium">W3C</abbr></a><sup>&reg;</sup>
+ (<a href="http://www.csail.mit.edu/"><abbr title="Massachusetts
+ Institute of Technology">MIT</abbr></a>, <a
+ href="http://www.ercim.org/"><acronym title="European Research
+ Consortium for Informatics and Mathematics">ERCIM</acronym></a>, <a
+ href="http://www.keio.ac.jp/">Keio</a>), All Rights Reserved. W3C
+ <a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">liability</a>,
+ <a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">trademark</a>,
+ <a
+ href="http://www.w3.org/Consortium/Legal/copyright-documents">document
+ use</a> rules apply.
+
+ <hr title="Separator for header">
+
+ </div>
+
+ <h2><a name=abstract></a>Abstract</h2>
+
+ <p><em>Selectors</em> are patterns that match against elements in a
+ tree. Selectors have been optimized for use with HTML and XML, and
+ are designed to be usable in performance-critical code.</p>
+
+ <p><acronym title="Cascading Style Sheets">CSS</acronym> (Cascading
+ Style Sheets) is a language for describing the rendering of <acronym
+ title="Hypertext Markup Language">HTML</acronym> and <acronym
+ title="Extensible Markup Language">XML</acronym> documents on
+ screen, on paper, in speech, etc. CSS uses Selectors for binding
+ style properties to elements in the document. This document
+ describes extensions to the selectors defined in CSS level 2. These
+ extended selectors will be used by CSS level 3.
+
+ <p>Selectors define the following function:</p>
+
+ <pre>expression &#x2217; element &rarr; boolean</pre>
+
+ <p>That is, given an element and a selector, this specification
+ defines whether that element matches the selector.</p>
+
+ <p>These expressions can also be used, for instance, to select a set
+ of elements, or a single element from a set of elements, by
+ evaluating the expression across all the elements in a
+ subtree. <acronym title="Simple Tree Transformation
+ Sheets">STTS</acronym> (Simple Tree Transformation Sheets), a
+ language for transforming XML trees, uses this mechanism. <a href="#refsSTTS">[STTS]</a></p>
+
+ <h2><a name=status></a>Status of this document</h2>
+
+ <p><em>This section describes the status of this document at the
+ time of its publication. Other documents may supersede this
+ document. A list of current W3C publications and the latest revision
+ of this technical report can be found in the <a
+ href="http://www.w3.org/TR/">W3C technical reports index at
+ http://www.w3.org/TR/.</a></em></p>
+
+ <p>This document describes the selectors that already exist in <a
+ href="#refsCSS1"><abbr title="CSS level 1">CSS1</abbr></a> and <a
+ href="#refsCSS21"><abbr title="CSS level 2">CSS2</abbr></a>, and
+ also proposes new selectors for <abbr title="CSS level
+ 3">CSS3</abbr> and other languages that may need them.</p>
+
+ <p>The CSS Working Group doesn't expect that all implementations of
+ CSS3 will have to implement all selectors. Instead, there will
+ probably be a small number of variants of CSS3, called profiles. For
+ example, it may be that only a profile for interactive user agents
+ will include all of the selectors.</p>
+
+ <p>This specification is a last call working draft for the the <a
+ href="http://www.w3.org/Style/CSS/members">CSS Working Group</a>
+ (<a href="/Style/">Style Activity</a>). This
+ document is a revision of the <a
+ href="http://www.w3.org/TR/2001/CR-css3-selectors-20011113/">Candidate
+ Recommendation dated 2001 November 13</a>, and has incorporated
+ implementation feedback received in the past few years. It is
+ expected that this last call will proceed straight to Proposed
+ Recommendation stage since it is believed that interoperability will
+ be demonstrable.</p>
+
+ <p>All persons are encouraged to review and implement this
+ specification and return comments to the (<a
+ href="http://lists.w3.org/Archives/Public/www-style/">archived</a>)
+ public mailing list <a
+ href="http://www.w3.org/Mail/Lists.html#www-style">www-style</a>
+ (see <a href="http://www.w3.org/Mail/Request">instructions</a>). W3C
+ Members can also send comments directly to the CSS Working
+ Group.
+ The deadline for comments is 14 January 2006.</p>
+
+ <p>This is still a draft document and may be updated, replaced, or
+ obsoleted by other documents at any time. It is inappropriate to
+ cite a W3C Working Draft as other than &quot;work in progress&quot;.
+
+ <p>This document may be available in <a
+ href="http://www.w3.org/Style/css3-selectors-updates/translations">translation</a>.
+ The English version of this specification is the only normative
+ version.
+
+ <div class="subtoc">
+
+ <h2 id="test10"><a name=contents>Table of contents</a></h2>
+
+ <ul class="toc">
+ <li class="tocline2"><a href="#context">1. Introduction</a>
+ <ul>
+ <li><a href="#dependencies">1.1. Dependencies</a> </li>
+ <li><a href="#terminology">1.2. Terminology</a> </li>
+ <li><a href="#changesFromCSS2">1.3. Changes from CSS2</a> </li>
+ </ul>
+ <li class="tocline2"><a href="#selectors">2. Selectors</a>
+ <li class="tocline2"><a href="#casesens">3. Case sensitivity</a>
+ <li class="tocline2"><a href="#selector-syntax">4. Selector syntax</a>
+ <li class="tocline2"><a href="#grouping">5. Groups of selectors</a>
+ <li class="tocline2"><a href="#simple-selectors">6. Simple selectors</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#type-selectors">6.1. Type selectors</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#typenmsp">6.1.1. Type selectors and namespaces</a></li>
+ </ul>
+ <li class="tocline3"><a href="#universal-selector">6.2. Universal selector</a>
+ <ul>
+ <li><a href="#univnmsp">6.2.1. Universal selector and namespaces</a></li>
+ </ul>
+ <li class="tocline3"><a href="#attribute-selectors">6.3. Attribute selectors</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#attribute-representation">6.3.1. Representation of attributes and attributes values</a>
+ <li><a href="#attribute-substrings">6.3.2. Substring matching attribute selectors</a>
+ <li class="tocline4"><a href="#attrnmsp">6.3.3. Attribute selectors and namespaces</a>
+ <li class="tocline4"><a href="#def-values">6.3.4. Default attribute values in DTDs</a></li>
+ </ul>
+ <li class="tocline3"><a href="#class-html">6.4. Class selectors</a>
+ <li class="tocline3"><a href="#id-selectors">6.5. ID selectors</a>
+ <li class="tocline3"><a href="#pseudo-classes">6.6. Pseudo-classes</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#dynamic-pseudos">6.6.1. Dynamic pseudo-classes</a>
+ <li class="tocline4"><a href="#target-pseudo">6.6.2. The :target pseudo-class</a>
+ <li class="tocline4"><a href="#lang-pseudo">6.6.3. The :lang() pseudo-class</a>
+ <li class="tocline4"><a href="#UIstates">6.6.4. UI element states pseudo-classes</a>
+ <li class="tocline4"><a href="#structural-pseudos">6.6.5. Structural pseudo-classes</a>
+ <ul>
+ <li><a href="#root-pseudo">:root pseudo-class</a>
+ <li><a href="#nth-child-pseudo">:nth-child() pseudo-class</a>
+ <li><a href="#nth-last-child-pseudo">:nth-last-child()</a>
+ <li><a href="#nth-of-type-pseudo">:nth-of-type() pseudo-class</a>
+ <li><a href="#nth-last-of-type-pseudo">:nth-last-of-type()</a>
+ <li><a href="#first-child-pseudo">:first-child pseudo-class</a>
+ <li><a href="#last-child-pseudo">:last-child pseudo-class</a>
+ <li><a href="#first-of-type-pseudo">:first-of-type pseudo-class</a>
+ <li><a href="#last-of-type-pseudo">:last-of-type pseudo-class</a>
+ <li><a href="#only-child-pseudo">:only-child pseudo-class</a>
+ <li><a href="#only-of-type-pseudo">:only-of-type pseudo-class</a>
+ <li><a href="#empty-pseudo">:empty pseudo-class</a></li>
+ </ul>
+ <li class="tocline4"><a href="#negation">6.6.7. The negation pseudo-class</a></li>
+ </ul>
+ </li>
+ </ul>
+ <li><a href="#pseudo-elements">7. Pseudo-elements</a>
+ <ul>
+ <li><a href="#first-line">7.1. The ::first-line pseudo-element</a>
+ <li><a href="#first-letter">7.2. The ::first-letter pseudo-element</a>
+ <li><a href="#UIfragments">7.3. The ::selection pseudo-element</a>
+ <li><a href="#gen-content">7.4. The ::before and ::after pseudo-elements</a></li>
+ </ul>
+ <li class="tocline2"><a href="#combinators">8. Combinators</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#descendant-combinators">8.1. Descendant combinators</a>
+ <li class="tocline3"><a href="#child-combinators">8.2. Child combinators</a>
+ <li class="tocline3"><a href="#sibling-combinators">8.3. Sibling combinators</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#adjacent-sibling-combinators">8.3.1. Adjacent sibling combinator</a>
+ <li class="tocline4"><a href="#general-sibling-combinators">8.3.2. General sibling combinator</a></li>
+ </ul>
+ </li>
+ </ul>
+ <li class="tocline2"><a href="#specificity">9. Calculating a selector's specificity</a>
+ <li class="tocline2"><a href="#w3cselgrammar">10. The grammar of Selectors</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#grammar">10.1. Grammar</a>
+ <li class="tocline3"><a href="#lex">10.2. Lexical scanner</a></li>
+ </ul>
+ <li class="tocline2"><a href="#downlevel">11. Namespaces and down-level clients</a>
+ <li class="tocline2"><a href="#profiling">12. Profiles</a>
+ <li><a href="#Conformance">13. Conformance and requirements</a>
+ <li><a href="#Tests">14. Tests</a>
+ <li><a href="#ACKS">15. Acknowledgements</a>
+ <li class="tocline2"><a href="#references">16. References</a>
+ </ul>
+
+ </div>
+
+ <h2><a name=context>1. Introduction</a></h2>
+
+ <h3><a name=dependencies></a>1.1. Dependencies</h3>
+
+ <p>Some features of this specification are specific to CSS, or have
+ particular limitations or rules specific to CSS. In this
+ specification, these have been described in terms of CSS2.1. <a
+ href="#refsCSS21">[CSS21]</a></p>
+
+ <h3><a name=terminology></a>1.2. Terminology</h3>
+
+ <p>All of the text of this specification is normative except
+ examples, notes, and sections explicitly marked as
+ non-normative.</p>
+
+ <h3><a name=changesFromCSS2></a>1.3. Changes from CSS2</h3>
+
+ <p><em>This section is non-normative.</em></p>
+
+ <p>The main differences between the selectors in CSS2 and those in
+ Selectors are:
+
+ <ul>
+
+ <li>the list of basic definitions (selector, group of selectors,
+ simple selector, etc.) has been changed; in particular, what was
+ referred to in CSS2 as a simple selector is now called a sequence
+ of simple selectors, and the term "simple selector" is now used for
+ the components of this sequence</li>
+
+ <li>an optional namespace component is now allowed in type element
+ selectors, the universal selector and attribute selectors</li>
+
+ <li>a <a href="#general-sibling-combinators">new combinator</a> has been introduced</li>
+
+ <li>new simple selectors including substring matching attribute
+ selectors, and new pseudo-classes</li>
+
+ <li>new pseudo-elements, and introduction of the "::" convention
+ for pseudo-elements</li>
+
+ <li>the grammar has been rewritten</li>
+
+ <li>profiles to be added to specifications integrating Selectors
+ and defining the set of selectors which is actually supported by
+ each specification</li>
+
+ <li>Selectors are now a CSS3 Module and an independent
+ specification; other specifications can now refer to this document
+ independently of CSS</li>
+
+ <li>the specification now has its own test suite</li>
+
+ </ul>
+
+<h2><a name=selectors></a>2. Selectors</h2>
+
+<p><em>This section is non-normative, as it merely summarizes the
+following sections.</em></p>
+
+<p>A Selector represents a structure. This structure can be used as a
+condition (e.g. in a CSS rule) that determines which elements a
+selector matches in the document tree, or as a flat description of the
+HTML or XML fragment corresponding to that structure.</p>
+
+<p>Selectors may range from simple element names to rich contextual
+representations.</p>
+
+<p>The following table summarizes the Selector syntax:</p>
+
+<table class="selectorsReview">
+ <thead>
+ <tr>
+ <th class="pattern">Pattern</th>
+ <th class="meaning">Meaning</th>
+ <th class="described">Described in section</th>
+ <th class="origin">First defined in CSS level</th></tr>
+ <tbody>
+ <tr>
+ <td class="pattern">*</td>
+ <td class="meaning">any element</td>
+ <td class="described"><a
+ href="#universal-selector">Universal
+ selector</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E</td>
+ <td class="meaning">an element of type E</td>
+ <td class="described"><a
+ href="#type-selectors">Type selector</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E[foo]</td>
+ <td class="meaning">an E element with a "foo" attribute</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value is exactly
+ equal to "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo~="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value is a list of
+ space-separated values, one of which is exactly equal to "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo^="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value begins exactly
+ with the string "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[foo$="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value ends exactly
+ with the string "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[foo*="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value contains the
+ substring "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[hreflang|="en"]</td>
+ <td class="meaning">an E element whose "hreflang" attribute has a hyphen-separated
+ list of values beginning (from the left) with "en"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:root</td>
+ <td class="meaning">an E element, root of the document</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-child(n)</td>
+ <td class="meaning">an E element, the n-th child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-last-child(n)</td>
+ <td class="meaning">an E element, the n-th child of its parent, counting
+ from the last one</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-of-type(n)</td>
+ <td class="meaning">an E element, the n-th sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-last-of-type(n)</td>
+ <td class="meaning">an E element, the n-th sibling of its type, counting
+ from the last one</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:first-child</td>
+ <td class="meaning">an E element, first child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:last-child</td>
+ <td class="meaning">an E element, last child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:first-of-type</td>
+ <td class="meaning">an E element, first sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:last-of-type</td>
+ <td class="meaning">an E element, last sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:only-child</td>
+ <td class="meaning">an E element, only child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:only-of-type</td>
+ <td class="meaning">an E element, only sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:empty</td>
+ <td class="meaning">an E element that has no children (including text
+ nodes)</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:link<br>E:visited</td>
+ <td class="meaning">an E element being the source anchor of a hyperlink of
+ which the target is not yet visited (:link) or already visited
+ (:visited)</td>
+ <td class="described"><a
+ href="#link">The link
+ pseudo-classes</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E:active<br>E:hover<br>E:focus</td>
+ <td class="meaning">an E element during certain user actions</td>
+ <td class="described"><a
+ href="#useraction-pseudos">The user
+ action pseudo-classes</a></td>
+ <td class="origin">1 and 2</td></tr>
+ <tr>
+ <td class="pattern">E:target</td>
+ <td class="meaning">an E element being the target of the referring URI</td>
+ <td class="described"><a
+ href="#target-pseudo">The target
+ pseudo-class</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:lang(fr)</td>
+ <td class="meaning">an element of type E in language "fr" (the document
+ language specifies how language is determined)</td>
+ <td class="described"><a
+ href="#lang-pseudo">The :lang()
+ pseudo-class</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:enabled<br>E:disabled</td>
+ <td class="meaning">a user interface element E which is enabled or
+ disabled</td>
+ <td class="described"><a
+ href="#UIstates">The UI element states
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:checked<!--<br>E:indeterminate--></td>
+ <td class="meaning">a user interface element E which is checked<!-- or in an
+ indeterminate state--> (for instance a radio-button or checkbox)</td>
+ <td class="described"><a
+ href="#UIstates">The UI element states
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E::first-line</td>
+ <td class="meaning">the first formatted line of an E element</td>
+ <td class="described"><a
+ href="#first-line">The ::first-line
+ pseudo-element</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E::first-letter</td>
+ <td class="meaning">the first formatted letter of an E element</td>
+ <td class="described"><a
+ href="#first-letter">The ::first-letter
+ pseudo-element</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E::selection</td>
+ <td class="meaning">the portion of an E element that is currently
+ selected/highlighted by the user</td>
+ <td class="described"><a
+ href="#UIfragments">The UI element
+ fragments pseudo-elements</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E::before</td>
+ <td class="meaning">generated content before an E element</td>
+ <td class="described"><a
+ href="#gen-content">The ::before
+ pseudo-element</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E::after</td>
+ <td class="meaning">generated content after an E element</td>
+ <td class="described"><a
+ href="#gen-content">The ::after
+ pseudo-element</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E.warning</td>
+ <td class="meaning">an E element whose class is
+"warning" (the document language specifies how class is determined).</td>
+ <td class="described"><a
+ href="#class-html">Class
+ selectors</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E#myid</td>
+ <td class="meaning">an E element with ID equal to "myid".</td>
+ <td class="described"><a
+ href="#id-selectors">ID
+ selectors</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E:not(s)</td>
+ <td class="meaning">an E element that does not match simple selector s</td>
+ <td class="described"><a
+ href="#negation">Negation
+ pseudo-class</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E F</td>
+ <td class="meaning">an F element descendant of an E element</td>
+ <td class="described"><a
+ href="#descendant-combinators">Descendant
+ combinator</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E &gt; F</td>
+ <td class="meaning">an F element child of an E element</td>
+ <td class="described"><a
+ href="#child-combinators">Child
+ combinator</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E + F</td>
+ <td class="meaning">an F element immediately preceded by an E element</td>
+ <td class="described"><a
+ href="#adjacent-sibling-combinators">Adjacent sibling combinator</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E ~ F</td>
+ <td class="meaning">an F element preceded by an E element</td>
+ <td class="described"><a
+ href="#general-sibling-combinators">General sibling combinator</a></td>
+ <td class="origin">3</td></tr></tbody></table>
+
+<p>The meaning of each selector is derived from the table above by
+prepending "matches" to the contents of each cell in the "Meaning"
+column.</p>
+
+<h2><a name=casesens>3. Case sensitivity</a></h2>
+
+<p>The case sensitivity of document language element names, attribute
+names, and attribute values in selectors depends on the document
+language. For example, in HTML, element names are case-insensitive,
+but in XML, they are case-sensitive.</p>
+
+<h2><a name=selector-syntax>4. Selector syntax</a></h2>
+
+<p>A <dfn><a name=selector>selector</a></dfn> is a chain of one
+or more <a href="#sequence">sequences of simple selectors</a>
+separated by <a href="#combinators">combinators</a>.</p>
+
+<p>A <dfn><a name=sequence>sequence of simple selectors</a></dfn>
+is a chain of <a href="#simple-selectors-dfn">simple selectors</a>
+that are not separated by a <a href="#combinators">combinator</a>. It
+always begins with a <a href="#type-selectors">type selector</a> or a
+<a href="#universal-selector">universal selector</a>. No other type
+selector or universal selector is allowed in the sequence.</p>
+
+<p>A <dfn><a name=simple-selectors-dfn></a><a
+href="#simple-selectors">simple selector</a></dfn> is either a <a
+href="#type-selectors">type selector</a>, <a
+href="#universal-selector">universal selector</a>, <a
+href="#attribute-selectors">attribute selector</a>, <a
+href="#class-html">class selector</a>, <a
+href="#id-selectors">ID selector</a>, <a
+href="#content-selectors">content selector</a>, or <a
+href="#pseudo-classes">pseudo-class</a>. One <a
+href="#pseudo-elements">pseudo-element</a> may be appended to the last
+sequence of simple selectors.</p>
+
+<p><dfn>Combinators</dfn> are: white space, &quot;greater-than
+sign&quot; (U+003E, <code>&gt;</code>), &quot;plus sign&quot; (U+002B,
+<code>+</code>) and &quot;tilde&quot; (U+007E, <code>~</code>). White
+space may appear between a combinator and the simple selectors around
+it. <a name=whitespace></a>Only the characters "space" (U+0020), "tab"
+(U+0009), "line feed" (U+000A), "carriage return" (U+000D), and "form
+feed" (U+000C) can occur in white space. Other space-like characters,
+such as "em-space" (U+2003) and "ideographic space" (U+3000), are
+never part of white space.</p>
+
+<p>The elements of a document tree that are represented by a selector
+are the <dfn><a name=subject></a>subjects of the selector</dfn>. A
+selector consisting of a single sequence of simple selectors
+represents any element satisfying its requirements. Prepending another
+sequence of simple selectors and a combinator to a sequence imposes
+additional matching constraints, so the subjects of a selector are
+always a subset of the elements represented by the last sequence of
+simple selectors.</p>
+
+<p>An empty selector, containing no sequence of simple selectors and
+no pseudo-element, is an <a href="#Conformance">invalid
+selector</a>.</p>
+
+<h2><a name=grouping>5. Groups of selectors</a></h2>
+
+<p>When several selectors share the same declarations, they may be
+grouped into a comma-separated list. (A comma is U+002C.)</p>
+
+<div class="example">
+<p>CSS examples:</p>
+<p>In this example, we condense three rules with identical
+declarations into one. Thus,</p>
+<pre>h1 { font-family: sans-serif }
+h2 { font-family: sans-serif }
+h3 { font-family: sans-serif }</pre>
+<p>is equivalent to:</p>
+<pre>h1, h2, h3 { font-family: sans-serif }</pre>
+</div>
+
+<p><strong>Warning</strong>: the equivalence is true in this example
+because all the selectors are valid selectors. If just one of these
+selectors were invalid, the entire group of selectors would be
+invalid. This would invalidate the rule for all three heading
+elements, whereas in the former case only one of the three individual
+heading rules would be invalidated.</p>
+
+
+<h2><a name=simple-selectors>6. Simple selectors</a></h2>
+
+<h3><a name=type-selectors>6.1. Type selector</a></h3>
+
+<p>A <dfn>type selector</dfn> is the name of a document language
+element type. A type selector represents an instance of the element
+type in the document tree.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents an <code>h1</code> element in the document tree:</p>
+ <pre>h1</pre>
+</div>
+
+
+<h4><a name=typenmsp>6.1.1. Type selectors and namespaces</a></h4>
+
+<p>Type selectors allow an optional namespace (<a
+href="#refsXMLNAMES">[XMLNAMES]</a>) component. A namespace prefix
+that has been previously declared may be prepended to the element name
+separated by the namespace separator &quot;vertical bar&quot;
+(U+007C, <code>|</code>).</p>
+
+<p>The namespace component may be left empty to indicate that the
+selector is only to represent elements with no declared namespace.</p>
+
+<p>An asterisk may be used for the namespace prefix, indicating that
+the selector represents elements in any namespace (including elements
+with no namespace).</p>
+
+<p>Element type selectors that have no namespace component (no
+namespace separator), represent elements without regard to the
+element's namespace (equivalent to "<code>*|</code>") unless a default
+namespace has been declared. If a default namespace has been declared,
+the selector will represent only elements in the default
+namespace.</p>
+
+<p>A type selector containing a namespace prefix that has not been
+previously declared is an <a href="#Conformance">invalid</a> selector.
+The mechanism for declaring a namespace prefix is left up to the
+language implementing Selectors. In CSS, such a mechanism is defined
+in the General Syntax module.</p>
+
+<p>In a namespace-aware client, element type selectors will only match
+against the <a
+href="http://www.w3.org/TR/REC-xml-names/#NT-LocalPart">local part</a>
+of the element's <a
+href="http://www.w3.org/TR/REC-xml-names/#ns-qualnames">qualified
+name</a>. See <a href="#downlevel">below</a> for notes about matching
+behaviors in down-level clients.</p>
+
+<p>In summary:</p>
+
+<dl>
+ <dt><code>ns|E</code></dt>
+ <dd>elements with name E in namespace ns</dd>
+ <dt><code>*|E</code></dt>
+ <dd>elements with name E in any namespace, including those without any
+ declared namespace</dd>
+ <dt><code>|E</code></dt>
+ <dd>elements with name E without any declared namespace</dd>
+ <dt><code>E</code></dt>
+ <dd>if no default namespace has been specified, this is equivalent to *|E.
+ Otherwise it is equivalent to ns|E where ns is the default namespace.</dd>
+</dl>
+
+<div class="example">
+ <p>CSS examples:</p>
+
+ <pre>@namespace foo url(http://www.example.com);
+ foo|h1 { color: blue }
+ foo|* { color: yellow }
+ |h1 { color: red }
+ *|h1 { color: green }
+ h1 { color: green }</pre>
+
+ <p>The first rule will match only <code>h1</code> elements in the
+ "http://www.example.com" namespace.</p>
+
+ <p>The second rule will match all elements in the
+ "http://www.example.com" namespace.</p>
+
+ <p>The third rule will match only <code>h1</code> elements without
+ any declared namespace.</p>
+
+ <p>The fourth rule will match <code>h1</code> elements in any
+ namespace (including those without any declared namespace).</p>
+
+ <p>The last rule is equivalent to the fourth rule because no default
+ namespace has been defined.</p>
+
+</div>
+
+<h3><a name=universal-selector>6.2. Universal selector</a> </h3>
+
+<p>The <dfn>universal selector</dfn>, written &quot;asterisk&quot;
+(<code>*</code>), represents the qualified name of any element
+type. It represents any single element in the document tree in any
+namespace (including those without any declared namespace) if no
+default namespace has been specified. If a default namespace has been
+specified, see <a href="#univnmsp">Universal selector and
+Namespaces</a> below.</p>
+
+<p>If the universal selector is not the only component of a sequence
+of simple selectors, the <code>*</code> may be omitted.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <ul>
+ <li><code>*[hreflang|=en]</code> and <code>[hreflang|=en]</code> are equivalent,</li>
+ <li><code>*.warning</code> and <code>.warning</code> are equivalent,</li>
+ <li><code>*#myid</code> and <code>#myid</code> are equivalent.</li>
+ </ul>
+</div>
+
+<p class="note"><strong>Note:</strong> it is recommended that the
+<code>*</code>, representing the universal selector, not be
+omitted.</p>
+
+<h4><a name=univnmsp>6.2.1. Universal selector and namespaces</a></h4>
+
+<p>The universal selector allows an optional namespace component. It
+is used as follows:</p>
+
+<dl>
+ <dt><code>ns|*</code></dt>
+ <dd>all elements in namespace ns</dd>
+ <dt><code>*|*</code></dt>
+ <dd>all elements</dd>
+ <dt><code>|*</code></dt>
+ <dd>all elements without any declared namespace</dd>
+ <dt><code>*</code></dt>
+ <dd>if no default namespace has been specified, this is equivalent to *|*.
+ Otherwise it is equivalent to ns|* where ns is the default namespace.</dd>
+</dl>
+
+<p>A universal selector containing a namespace prefix that has not
+been previously declared is an <a href="#Conformance">invalid</a>
+selector. The mechanism for declaring a namespace prefix is left up
+to the language implementing Selectors. In CSS, such a mechanism is
+defined in the General Syntax module.</p>
+
+
+<h3><a name=attribute-selectors>6.3. Attribute selectors</a></h3>
+
+<p>Selectors allow the representation of an element's attributes. When
+a selector is used as an expression to match against an element,
+attribute selectors must be considered to match an element if that
+element has an attribute that matches the attribute represented by the
+attribute selector.</p>
+
+<h4><a name=attribute-representation>6.3.1. Attribute presence and values
+selectors</a></h4>
+
+<p>CSS2 introduced four attribute selectors:</p>
+
+<dl>
+ <dt><code>[att]</code>
+ <dd>Represents an element with the <code>att</code> attribute, whatever the value of
+ the attribute.</dd>
+ <dt><code>[att=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value is exactly
+ "val".</dd>
+ <dt><code>[att~=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value is a <a
+ href="#whitespace">whitespace</a>-separated list of words, one of
+ which is exactly "val". If "val" contains whitespace, it will never
+ represent anything (since the words are <em>separated</em> by
+ spaces).</dd>
+ <dt><code>[att|=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute, its value either
+ being exactly "val" or beginning with "val" immediately followed by
+ "-" (U+002D). This is primarily intended to allow language subcode
+ matches (e.g., the <code>hreflang</code> attribute on the
+ <code>link</code> element in HTML) as described in RFC 3066 (<a
+ href="#refsRFC3066">[RFC3066]</a>). For <code>lang</code> (or
+ <code>xml:lang</code>) language subcode matching, please see <a
+ href="#lang-pseudo">the <code>:lang</code> pseudo-class</a>.</dd>
+</dl>
+
+<p>Attribute values must be identifiers or strings. The
+case-sensitivity of attribute names and values in selectors depends on
+the document language.</p>
+
+<div class="example">
+
+ <p>Examples:</p>
+
+ <p>The following attribute selector represents an <code>h1</code>
+ element that carries the <code>title</code> attribute, whatever its
+ value:</p>
+
+ <pre>h1[title]</pre>
+
+ <p>In the following example, the selector represents a
+ <code>span</code> element whose <code>class</code> attribute has
+ exactly the value "example":</p>
+
+ <pre>span[class="example"]</pre>
+
+ <p>Multiple attribute selectors can be used to represent several
+ attributes of an element, or several conditions on the same
+ attribute. Here, the selector represents a <code>span</code> element
+ whose <code>hello</code> attribute has exactly the value "Cleveland"
+ and whose <code>goodbye</code> attribute has exactly the value
+ "Columbus":</p>
+
+ <pre>span[hello="Cleveland"][goodbye="Columbus"]</pre>
+
+ <p>The following selectors illustrate the differences between "="
+ and "~=". The first selector will represent, for example, the value
+ "copyright copyleft copyeditor" on a <code>rel</code> attribute. The
+ second selector will only represent an <code>a</code> element with
+ an <code>href</code> attribute having the exact value
+ "http://www.w3.org/".</p>
+
+ <pre>a[rel~="copyright"]
+a[href="http://www.w3.org/"]</pre>
+
+ <p>The following selector represents a <code>link</code> element
+ whose <code>hreflang</code> attribute is exactly "fr".</p>
+
+ <pre>link[hreflang=fr]</pre>
+
+ <p>The following selector represents a <code>link</code> element for
+ which the values of the <code>hreflang</code> attribute begins with
+ "en", including "en", "en-US", and "en-cockney":</p>
+
+ <pre>link[hreflang|="en"]</pre>
+
+ <p>Similarly, the following selectors represents a
+ <code>DIALOGUE</code> element whenever it has one of two different
+ values for an attribute <code>character</code>:</p>
+
+ <pre>DIALOGUE[character=romeo]
+DIALOGUE[character=juliet]</pre>
+
+</div>
+
+<h4><a name=attribute-substrings></a>6.3.2. Substring matching attribute
+selectors</h4>
+
+<p>Three additional attribute selectors are provided for matching
+substrings in the value of an attribute:</p>
+
+<dl>
+ <dt><code>[att^=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value begins
+ with the prefix "val".</dd>
+ <dt><code>[att$=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute whose value ends with
+ the suffix "val".</dd>
+ <dt><code>[att*=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute whose value contains
+ at least one instance of the substring "val".</dd>
+</dl>
+
+<p>Attribute values must be identifiers or strings. The
+case-sensitivity of attribute names in selectors depends on the
+document language.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents an HTML <code>object</code>, referencing an
+ image:</p>
+ <pre>object[type^="image/"]</pre>
+ <p>The following selector represents an HTML anchor <code>a</code> with an
+ <code>href</code> attribute whose value ends with ".html".</p>
+ <pre>a[href$=".html"]</pre>
+ <p>The following selector represents an HTML paragraph with a <code>title</code>
+ attribute whose value contains the substring "hello"</p>
+ <pre>p[title*="hello"]</pre>
+</div>
+
+<h4><a name=attrnmsp>6.3.3. Attribute selectors and namespaces</a></h4>
+
+<p>Attribute selectors allow an optional namespace component to the
+attribute name. A namespace prefix that has been previously declared
+may be prepended to the attribute name separated by the namespace
+separator &quot;vertical bar&quot; (<code>|</code>). In keeping with
+the Namespaces in the XML recommendation, default namespaces do not
+apply to attributes, therefore attribute selectors without a namespace
+component apply only to attributes that have no declared namespace
+(equivalent to "<code>|attr</code>"). An asterisk may be used for the
+namespace prefix indicating that the selector is to match all
+attribute names without regard to the attribute's namespace.
+
+<p>An attribute selector with an attribute name containing a namespace
+prefix that has not been previously declared is an <a
+href="#Conformance">invalid</a> selector. The mechanism for declaring
+a namespace prefix is left up to the language implementing Selectors.
+In CSS, such a mechanism is defined in the General Syntax module.
+
+<div class="example">
+ <p>CSS examples:</p>
+ <pre>@namespace foo "http://www.example.com";
+[foo|att=val] { color: blue }
+[*|att] { color: yellow }
+[|att] { color: green }
+[att] { color: green }</pre>
+
+ <p>The first rule will match only elements with the attribute
+ <code>att</code> in the "http://www.example.com" namespace with the
+ value "val".</p>
+
+ <p>The second rule will match only elements with the attribute
+ <code>att</code> regardless of the namespace of the attribute
+ (including no declared namespace).</p>
+
+ <p>The last two rules are equivalent and will match only elements
+ with the attribute <code>att</code> where the attribute is not
+ declared to be in a namespace.</p>
+
+</div>
+
+<h4><a name=def-values>6.3.4. Default attribute values in DTDs</a></h4>
+
+<p>Attribute selectors represent explicitly set attribute values in
+the document tree. Default attribute values may be defined in a DTD or
+elsewhere, but cannot always be selected by attribute
+selectors. Selectors should be designed so that they work even if the
+default values are not included in the document tree.</p>
+
+<p>More precisely, a UA is <em>not</em> required to read an "external
+subset" of the DTD but <em>is</em> required to look for default
+attribute values in the document's "internal subset." (See <a
+href="#refsXML10">[XML10]</a> for definitions of these subsets.)</p>
+
+<p>A UA that recognizes an XML namespace <a
+href="#refsXMLNAMES">[XMLNAMES]</a> is not required to use its
+knowledge of that namespace to treat default attribute values as if
+they were present in the document. (For example, an XHTML UA is not
+required to use its built-in knowledge of the XHTML DTD.)</p>
+
+<p class="note"><strong>Note:</strong> Typically, implementations
+choose to ignore external subsets.</p>
+
+<div class="example">
+<p>Example:</p>
+
+<p>Consider an element EXAMPLE with an attribute "notation" that has a
+default value of "decimal". The DTD fragment might be</p>
+
+<pre class="dtd-example">&lt;!ATTLIST EXAMPLE notation (decimal,octal) "decimal"></pre>
+
+<p>If the style sheet contains the rules</p>
+
+<pre>EXAMPLE[notation=decimal] { /*... default property settings ...*/ }
+EXAMPLE[notation=octal] { /*... other settings...*/ }</pre>
+
+<p>the first rule will not match elements whose "notation" attribute
+is set by default, i.e. not set explicitly. To catch all cases, the
+attribute selector for the default value must be dropped:</p>
+
+<pre>EXAMPLE { /*... default property settings ...*/ }
+EXAMPLE[notation=octal] { /*... other settings...*/ }</pre>
+
+<p>Here, because the selector <code>EXAMPLE[notation=octal]</code> is
+more specific than the tag
+selector alone, the style declarations in the second rule will override
+those in the first for elements that have a "notation" attribute value
+of "octal". Care has to be taken that all property declarations that
+are to apply only to the default case are overridden in the non-default
+cases' style rules.</p>
+
+</div>
+
+<h3><a name=class-html>6.4. Class selectors</a></h3>
+
+<p>Working with HTML, authors may use the period (U+002E,
+<code>.</code>) notation as an alternative to the <code>~=</code>
+notation when representing the <code>class</code> attribute. Thus, for
+HTML, <code>div.value</code> and <code>div[class~=value]</code> have
+the same meaning. The attribute value must immediately follow the
+&quot;period&quot; (<code>.</code>).</p>
+
+<p>UAs may apply selectors using the period (.) notation in XML
+documents if the UA has namespace-specific knowledge that allows it to
+determine which attribute is the &quot;class&quot; attribute for the
+respective namespace. One such example of namespace-specific knowledge
+is the prose in the specification for a particular namespace (e.g. SVG
+1.0 <a href="#refsSVG">[SVG]</a> describes the <a
+href="http://www.w3.org/TR/2001/PR-SVG-20010719/styling.html#ClassAttribute">SVG
+&quot;class&quot; attribute</a> and how a UA should interpret it, and
+similarly MathML 1.01 <a href="#refsMATH">[MATH]</a> describes the <a
+href="http://www.w3.org/1999/07/REC-MathML-19990707/chapter2.html#sec2.3.4">MathML
+&quot;class&quot; attribute</a>.)</p>
+
+<div class="example">
+ <p>CSS examples:</p>
+
+ <p>We can assign style information to all elements with
+ <code>class~="pastoral"</code> as follows:</p>
+
+ <pre>*.pastoral { color: green } /* all elements with class~=pastoral */</pre>
+
+ <p>or just</p>
+
+ <pre>.pastoral { color: green } /* all elements with class~=pastoral */</pre>
+
+ <p>The following assigns style only to H1 elements with
+ <code>class~="pastoral"</code>:</p>
+
+ <pre>H1.pastoral { color: green } /* H1 elements with class~=pastoral */</pre>
+
+ <p>Given these rules, the first H1 instance below would not have
+ green text, while the second would:</p>
+
+ <pre>&lt;H1&gt;Not green&lt;/H1&gt;
+&lt;H1 class="pastoral"&gt;Very green&lt;/H1&gt;</pre>
+
+</div>
+
+<p>To represent a subset of "class" values, each value must be preceded
+by a ".", in any order.</P>
+
+<div class="example">
+
+ <p>CSS example:</p>
+
+ <p>The following rule matches any P element whose "class" attribute
+ has been assigned a list of <a
+ href="#whitespace">whitespace</a>-separated values that includes
+ "pastoral" and "marine":</p>
+
+ <pre>p.pastoral.marine { color: green }</pre>
+
+ <p>This rule matches when <code>class="pastoral blue aqua
+ marine"</code> but does not match for <code>class="pastoral
+ blue"</code>.</p>
+
+</div>
+
+<p class="note"><strong>Note:</strong> Because CSS gives considerable
+power to the "class" attribute, authors could conceivably design their
+own "document language" based on elements with almost no associated
+presentation (such as DIV and SPAN in HTML) and assigning style
+information through the "class" attribute. Authors should avoid this
+practice since the structural elements of a document language often
+have recognized and accepted meanings and author-defined classes may
+not.</p>
+
+<p class="note"><strong>Note:</strong> If an element has multiple
+class attributes, their values must be concatenated with spaces
+between the values before searching for the class. As of this time the
+working group is not aware of any manner in which this situation can
+be reached, however, so this behavior is explicitly non-normative in
+this specification.</p>
+
+<h3><a name=id-selectors>6.5. ID selectors</a></h3>
+
+<p>Document languages may contain attributes that are declared to be
+of type ID. What makes attributes of type ID special is that no two
+such attributes can have the same value in a document, regardless of
+the type of the elements that carry them; whatever the document
+language, an ID typed attribute can be used to uniquely identify its
+element. In HTML all ID attributes are named "id"; XML applications
+may name ID attributes differently, but the same restriction
+applies.</p>
+
+<p>An ID-typed attribute of a document language allows authors to
+assign an identifier to one element instance in the document tree. W3C
+ID selectors represent an element instance based on its identifier. An
+ID selector contains a &quot;number sign&quot; (U+0023,
+<code>#</code>) immediately followed by the ID value, which must be an
+identifier.</p>
+
+<p>Selectors does not specify how a UA knows the ID-typed attribute of
+an element. The UA may, e.g., read a document's DTD, have the
+information hard-coded or ask the user.
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following ID selector represents an <code>h1</code> element
+ whose ID-typed attribute has the value "chapter1":</p>
+ <pre>h1#chapter1</pre>
+ <p>The following ID selector represents any element whose ID-typed
+ attribute has the value "chapter1":</p>
+ <pre>#chapter1</pre>
+ <p>The following selector represents any element whose ID-typed
+ attribute has the value "z98y".</p>
+ <pre>*#z98y</pre>
+</div>
+
+<p class="note"><strong>Note.</strong> In XML 1.0 <a
+href="#refsXML10">[XML10]</a>, the information about which attribute
+contains an element's IDs is contained in a DTD or a schema. When
+parsing XML, UAs do not always read the DTD, and thus may not know
+what the ID of an element is (though a UA may have namespace-specific
+knowledge that allows it to determine which attribute is the ID
+attribute for that namespace). If a style sheet designer knows or
+suspects that a UA may not know what the ID of an element is, he
+should use normal attribute selectors instead:
+<code>[name=p371]</code> instead of <code>#p371</code>. Elements in
+XML 1.0 documents without a DTD do not have IDs at all.</p>
+
+<p>If an element has multiple ID attributes, all of them must be
+treated as IDs for that element for the purposes of the ID
+selector. Such a situation could be reached using mixtures of xml:id,
+DOM3 Core, XML DTDs, and namespace-specific knowledge.</p>
+
+<h3><a name=pseudo-classes>6.6. Pseudo-classes</a></h3>
+
+<p>The pseudo-class concept is introduced to permit selection based on
+information that lies outside of the document tree or that cannot be
+expressed using the other simple selectors.</p>
+
+<p>A pseudo-class always consists of a &quot;colon&quot;
+(<code>:</code>) followed by the name of the pseudo-class and
+optionally by a value between parentheses.</p>
+
+<p>Pseudo-classes are allowed in all sequences of simple selectors
+contained in a selector. Pseudo-classes are allowed anywhere in
+sequences of simple selectors, after the leading type selector or
+universal selector (possibly omitted). Pseudo-class names are
+case-insensitive. Some pseudo-classes are mutually exclusive, while
+others can be applied simultaneously to the same
+element. Pseudo-classes may be dynamic, in the sense that an element
+may acquire or lose a pseudo-class while a user interacts with the
+document.</p>
+
+
+<h4><a name=dynamic-pseudos>6.6.1. Dynamic pseudo-classes</a></h4>
+
+<p>Dynamic pseudo-classes classify elements on characteristics other
+than their name, attributes, or content, in principle characteristics
+that cannot be deduced from the document tree.</p>
+
+<p>Dynamic pseudo-classes do not appear in the document source or
+document tree.</p>
+
+
+<h5>The <a name=link>link pseudo-classes: :link and :visited</a></h5>
+
+<p>User agents commonly display unvisited links differently from
+previously visited ones. Selectors
+provides the pseudo-classes <code>:link</code> and
+<code>:visited</code> to distinguish them:</p>
+
+<ul>
+ <li>The <code>:link</code> pseudo-class applies to links that have
+ not yet been visited.</li>
+ <li>The <code>:visited</code> pseudo-class applies once the link has
+ been visited by the user. </li>
+</ul>
+
+<p>After some amount of time, user agents may choose to return a
+visited link to the (unvisited) ':link' state.</p>
+
+<p>The two states are mutually exclusive.</p>
+
+<div class="example">
+
+ <p>Example:</p>
+
+ <p>The following selector represents links carrying class
+ <code>external</code> and already visited:</p>
+
+ <pre>a.external:visited</pre>
+
+</div>
+
+<p class="note"><strong>Note:</strong> It is possible for style sheet
+authors to abuse the :link and :visited pseudo-classes to determine
+which sites a user has visited without the user's consent.
+
+<p>UAs may therefore treat all links as unvisited links, or implement
+other measures to preserve the user's privacy while rendering visited
+and unvisited links differently.</p>
+
+<h5>The <a name=useraction-pseudos>user action pseudo-classes
+:hover, :active, and :focus</a></h5>
+
+<p>Interactive user agents sometimes change the rendering in response
+to user actions. Selectors provides
+three pseudo-classes for the selection of an element the user is
+acting on.</p>
+
+<ul>
+
+ <li>The <code>:hover</code> pseudo-class applies while the user
+ designates an element with a pointing device, but does not activate
+ it. For example, a visual user agent could apply this pseudo-class
+ when the cursor (mouse pointer) hovers over a box generated by the
+ element. User agents not that do not support <a
+ href="http://www.w3.org/TR/REC-CSS2/media.html#interactive-media-group">interactive
+ media</a> do not have to support this pseudo-class. Some conforming
+ user agents that support <a
+ href="http://www.w3.org/TR/REC-CSS2/media.html#interactive-media-group">interactive
+ media</a> may not be able to support this pseudo-class (e.g., a pen
+ device that does not detect hovering).</li>
+
+ <li>The <code>:active</code> pseudo-class applies while an element
+ is being activated by the user. For example, between the times the
+ user presses the mouse button and releases it.</li>
+
+ <li>The <code>:focus</code> pseudo-class applies while an element
+ has the focus (accepts keyboard or mouse events, or other forms of
+ input). </li>
+
+</ul>
+
+<p>There may be document language or implementation specific limits on
+which elements can become <code>:active</code> or acquire
+<code>:focus</code>.</p>
+
+<p>These pseudo-classes are not mutually exclusive. An element may
+match several pseudo-classes at the same time.</p>
+
+<p>Selectors doesn't define if the parent of an element that is
+':active' or ':hover' is also in that state.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <pre>a:link /* unvisited links */
+a:visited /* visited links */
+a:hover /* user hovers */
+a:active /* active links */</pre>
+ <p>An example of combining dynamic pseudo-classes:</p>
+ <pre>a:focus
+a:focus:hover</pre>
+ <p>The last selector matches <code>a</code> elements that are in
+ the pseudo-class :focus and in the pseudo-class :hover.</p>
+</div>
+
+<p class="note"><strong>Note:</strong> An element can be both ':visited'
+and ':active' (or ':link' and ':active').</p>
+
+<h4><a name=target-pseudo>6.6.2. The target pseudo-class :target</a></h4>
+
+<p>Some URIs refer to a location within a resource. This kind of URI
+ends with a &quot;number sign&quot; (#) followed by an anchor
+identifier (called the fragment identifier).</p>
+
+<p>URIs with fragment identifiers link to a certain element within the
+document, known as the target element. For instance, here is a URI
+pointing to an anchor named <code>section_2</code> in an HTML
+document:</p>
+
+<pre>http://example.com/html/top.html#section_2</pre>
+
+<p>A target element can be represented by the <code>:target</code>
+pseudo-class. If the document's URI has no fragment identifier, then
+the document has no target element.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <pre>p.note:target</pre>
+ <p>This selector represents a <code>p</code> element of class
+ <code>note</code> that is the target element of the referring
+ URI.</p>
+</div>
+
+<div class="example">
+ <p>CSS example:</p>
+ <p>Here, the <code>:target</code> pseudo-class is used to make the
+ target element red and place an image before it, if there is one:</p>
+ <pre>*:target { color : red }
+*:target::before { content : url(target.png) }</pre>
+</div>
+
+<h4><a name=lang-pseudo>6.6.3. The language pseudo-class :lang</a></h4>
+
+<p>If the document language specifies how the human language of an
+element is determined, it is possible to write selectors that
+represent an element based on its language. For example, in HTML <a
+href="#refsHTML4">[HTML4]</a>, the language is determined by a
+combination of the <code>lang</code> attribute, the <code>meta</code>
+element, and possibly by information from the protocol (such as HTTP
+headers). XML uses an attribute called <code>xml:lang</code>, and
+there may be other document language-specific methods for determining
+the language.</p>
+
+<p>The pseudo-class <code>:lang(C)</code> represents an element that
+is in language C. Whether an element is represented by a
+<code>:lang()</code> selector is based solely on the identifier C
+being either equal to, or a hyphen-separated substring of, the
+element's language value, in the same way as if performed by the <a
+href="#attribute-representation">'|='</a> operator in attribute
+selectors. The identifier C does not have to be a valid language
+name.</p>
+
+<p>C must not be empty. (If it is, the selector is invalid.)</p>
+
+<p class="note"><strong>Note:</strong> It is recommended that
+documents and protocols indicate language using codes from RFC 3066 <a
+href="#refsRFC3066">[RFC3066]</a> or its successor, and by means of
+"xml:lang" attributes in the case of XML-based documents <a
+href="#refsXML10">[XML10]</a>. See <a
+href="http://www.w3.org/International/questions/qa-lang-2or3.html">
+"FAQ: Two-letter or three-letter language codes."</a></p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The two following selectors represent an HTML document that is in
+ Belgian, French, or German. The two next selectors represent
+ <code>q</code> quotations in an arbitrary element in Belgian, French,
+ or German.</p>
+ <pre>html:lang(fr-be)
+html:lang(de)
+:lang(fr-be) &gt; q
+:lang(de) &gt; q</pre>
+</div>
+
+<h4><a name=UIstates>6.6.4. The UI element states pseudo-classes</a></h4>
+
+<h5><a name=enableddisabled>The :enabled and :disabled pseudo-classes</a></h5>
+
+<p>The <code>:enabled</code> pseudo-class allows authors to customize
+the look of user interface elements that are enabled &mdash; which the
+user can select or activate in some fashion (e.g. clicking on a button
+with a mouse). There is a need for such a pseudo-class because there
+is no way to programmatically specify the default appearance of say,
+an enabled <code>input</code> element without also specifying what it
+would look like when it was disabled.</p>
+
+<p>Similar to <code>:enabled</code>, <code>:disabled</code> allows the
+author to specify precisely how a disabled or inactive user interface
+element should look.</p>
+
+<p>Most elements will be neither enabled nor disabled. An element is
+enabled if the user can either activate it or transfer the focus to
+it. An element is disabled if it could be enabled, but the user cannot
+presently activate it or transfer focus to it.</p>
+
+
+<h5><a name=checked>The :checked pseudo-class</a></h5>
+
+<p>Radio and checkbox elements can be toggled by the user. Some menu
+items are "checked" when the user selects them. When such elements are
+toggled "on" the <code>:checked</code> pseudo-class applies. The
+<code>:checked</code> pseudo-class initially applies to such elements
+that have the HTML4 <code>selected</code> and <code>checked</code>
+attributes as described in <a
+href="http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.2.1">Section
+17.2.1 of HTML4</a>, but of course the user can toggle "off" such
+elements in which case the <code>:checked</code> pseudo-class would no
+longer apply. While the <code>:checked</code> pseudo-class is dynamic
+in nature, and is altered by user action, since it can also be based
+on the presence of the semantic HTML4 <code>selected</code> and
+<code>checked</code> attributes, it applies to all media.
+
+
+<h5><a name=indeterminate>The :indeterminate pseudo-class</a></h5>
+
+<div class="note">
+
+<p>Radio and checkbox elements can be toggled by the user, but are
+sometimes in an indeterminate state, neither checked nor unchecked.
+This can be due to an element attribute, or DOM manipulation.</p>
+
+<p>A future version of this specification may introduce an
+<code>:indeterminate</code> pseudo-class that applies to such elements.
+<!--While the <code>:indeterminate</code> pseudo-class is dynamic in
+nature, and is altered by user action, since it can also be based on
+the presence of an element attribute, it applies to all media.</p>
+
+<p>Components of a radio-group initialized with no pre-selected choice
+are an example of :indeterminate state.--></p>
+
+</div>
+
+
+<h4><a name=structural-pseudos>6.6.5. Structural pseudo-classes</a></h4>
+
+<p>Selectors introduces the concept of <dfn>structural
+pseudo-classes</dfn> to permit selection based on extra information that lies in
+the document tree but cannot be represented by other simple selectors or
+combinators.
+
+<p>Note that standalone pieces of PCDATA (text nodes in the DOM) are
+not counted when calculating the position of an element in the list of
+children of its parent. When calculating the position of an element in
+the list of children of its parent, the index numbering starts at 1.
+
+
+<h5><a name=root-pseudo>:root pseudo-class</a></h5>
+
+<p>The <code>:root</code> pseudo-class represents an element that is
+the root of the document. In HTML 4, this is always the
+<code>HTML</code> element.
+
+
+<h5><a name=nth-child-pseudo>:nth-child() pseudo-class</a></h5>
+
+<p>The
+<code>:nth-child(<var>a</var><code>n</code>+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings
+<strong>before</strong> it in the document tree, for a given positive
+integer or zero value of <code>n</code>, and has a parent element. In
+other words, this matches the <var>b</var>th child of an element after
+all the children have been split into groups of <var>a</var> elements
+each. For example, this allows the selectors to address every other
+row in a table, and could be used to alternate the color
+of paragraph text in a cycle of four. The <var>a</var> and
+<var>b</var> values must be zero, negative integers or positive
+integers. The index of the first child of an element is 1.
+
+<p>In addition to this, <code>:nth-child()</code> can take
+'<code>odd</code>' and '<code>even</code>' as arguments instead.
+'<code>odd</code>' has the same signification as <code>2n+1</code>,
+and '<code>even</code>' has the same signification as <code>2n</code>.
+
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-child(2n+1) /* represents every odd row of an HTML table */
+tr:nth-child(odd) /* same */
+tr:nth-child(2n) /* represents every even row of an HTML table */
+tr:nth-child(even) /* same */
+
+/* Alternate paragraph colours in CSS */
+p:nth-child(4n+1) { color: navy; }
+p:nth-child(4n+2) { color: green; }
+p:nth-child(4n+3) { color: maroon; }
+p:nth-child(4n+4) { color: purple; }</pre>
+</div>
+
+<p>When <var>a</var>=0, no repeating is used, so for example
+<code>:nth-child(0n+5)</code> matches only the fifth child. When
+<var>a</var>=0, the <var>a</var><code>n</code> part need not be
+included, so the syntax simplifies to
+<code>:nth-child(<var>b</var>)</code> and the last example simplifies
+to <code>:nth-child(5)</code>.
+
+<div class="example">
+<p>Examples:</p>
+<pre>foo:nth-child(0n+1) /* represents an element foo, first child of its parent element */
+foo:nth-child(1) /* same */</pre>
+</div>
+
+<p>When <var>a</var>=1, the number may be omitted from the rule.
+
+<div class="example">
+<p>Examples:</p>
+<p>The following selectors are therefore equivalent:</p>
+<pre>bar:nth-child(1n+0) /* represents all bar elements, specificity (0,1,1) */
+bar:nth-child(n+0) /* same */
+bar:nth-child(n) /* same */
+bar /* same but lower specificity (0,0,1) */</pre>
+</div>
+
+<p>If <var>b</var>=0, then every <var>a</var>th element is picked. In
+such a case, the <var>b</var> part may be omitted.
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-child(2n+0) /* represents every even row of an HTML table */
+tr:nth-child(2n) /* same */</pre>
+</div>
+
+<p>If both <var>a</var> and <var>b</var> are equal to zero, the
+pseudo-class represents no element in the document tree.</p>
+
+<p>The value <var>a</var> can be negative, but only the positive
+values of <var>a</var><code>n</code>+<var>b</var>, for
+<code>n</code>&ge;0, may represent an element in the document
+tree.</p>
+
+<div class="example">
+<p>Example:</p>
+<pre>html|tr:nth-child(-n+6) /* represents the 6 first rows of XHTML tables */</pre>
+</div>
+
+<p>When the value <var>b</var> is negative, the "+" character in the
+expression must be removed (it is effectively replaced by the "-"
+character indicating the negative value of <var>b</var>).</p>
+
+<div class="example">
+<p>Examples:</p>
+<pre>:nth-child(10n-1) /* represents the 9th, 19th, 29th, etc, element */
+:nth-child(10n+9) /* Same */
+:nth-child(10n+-1) /* Syntactically invalid, and would be ignored */</pre>
+</div>
+
+
+<h5><a name=nth-last-child-pseudo>:nth-last-child() pseudo-class</a></h5>
+
+<p>The <code>:nth-last-child(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings
+<strong>after</strong> it in the document tree, for a given positive
+integer or zero value of <code>n</code>, and has a parent element. See
+<code>:nth-child()</code> pseudo-class for the syntax of its argument.
+It also accepts the '<code>even</code>' and '<code>odd</code>' values
+as arguments.
+
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-last-child(-n+2) /* represents the two last rows of an HTML table */
+
+foo:nth-last-child(odd) /* represents all odd foo elements in their parent element,
+ counting from the last one */</pre>
+</div>
+
+
+<h5><a name=nth-of-type-pseudo>:nth-of-type() pseudo-class</a></h5>
+
+<p>The <code>:nth-of-type(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings with the same
+element name <strong>before</strong> it in the document tree, for a
+given zero or positive integer value of <code>n</code>, and has a
+parent element. In other words, this matches the <var>b</var>th child
+of that type after all the children of that type have been split into
+groups of a elements each. See <code>:nth-child()</code> pseudo-class
+for the syntax of its argument. It also accepts the
+'<code>even</code>' and '<code>odd</code>' values.
+
+
+<div class="example">
+<p>CSS example:</p>
+<p>This allows an author to alternate the position of floated images:</p>
+<pre>img:nth-of-type(2n+1) { float: right; }
+img:nth-of-type(2n) { float: left; }</pre>
+</div>
+
+
+<h5><a name=nth-last-of-type-pseudo>:nth-last-of-type() pseudo-class</a></h5>
+
+<p>The <code>:nth-last-of-type(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings with the same
+element name <strong>after</strong> it in the document tree, for a
+given zero or positive integer value of <code>n</code>, and has a
+parent element. See <code>:nth-child()</code> pseudo-class for the
+syntax of its argument. It also accepts the '<code>even</code>' and '<code>odd</code>' values.
+
+
+<div class="example">
+ <p>Example:</p>
+ <p>To represent all <code>h2</code> children of an XHTML
+ <code>body</code> except the first and last, one could use the
+ following selector:</p>
+ <pre>body &gt; h2:nth-of-type(n+2):nth-last-of-type(n+2)</pre>
+ <p>In this case, one could also use <code>:not()</code>, although the
+ selector ends up being just as long:</p>
+ <pre>body &gt; h2:not(:first-of-type):not(:last-of-type)</pre>
+</div>
+
+
+<h5><a name=first-child-pseudo>:first-child pseudo-class</a></h5>
+
+<p>Same as <code>:nth-child(1)</code>. The <code>:first-child</code> pseudo-class
+represents an element that is the first child of some other element.
+
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element that is
+ the first child of a <code>div</code> element:</p>
+ <pre>div &gt; p:first-child</pre>
+ <p>This selector can represent the <code>p</code> inside the
+ <code>div</code> of the following fragment:</p>
+ <pre>&lt;p&gt; The last P before the note.&lt;/p&gt;
+&lt;div class="note"&gt;
+ &lt;p&gt; The first P inside the note.&lt;/p&gt;
+&lt;/div&gt;</pre>but cannot represent the second <code>p</code> in the following
+fragment:
+ <pre>&lt;p&gt; The last P before the note.&lt;/p&gt;
+&lt;div class="note"&gt;
+ &lt;h2&gt; Note &lt;/h2&gt;
+ &lt;p&gt; The first P inside the note.&lt;/p&gt;
+&lt;/div&gt;</pre>
+ <p>The following two selectors are usually equivalent:</p>
+ <pre>* &gt; a:first-child /* a is first child of any element */
+a:first-child /* Same (assuming a is not the root element) */</pre>
+</div>
+
+<h5><a name=last-child-pseudo>:last-child pseudo-class</a></h5>
+
+<p>Same as <code>:nth-last-child(1)</code>. The <code>:last-child</code> pseudo-class
+represents an element that is the last child of some other element.
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents a list item <code>li</code> that
+ is the last child of an ordered list <code>ol</code>.
+ <pre>ol &gt; li:last-child</pre>
+</div>
+
+<h5><a name=first-of-type-pseudo>:first-of-type pseudo-class</a></h5>
+
+<p>Same as <code>:nth-of-type(1)</code>. The <code>:first-of-type</code> pseudo-class
+represents an element that is the first sibling of its type in the list of
+children of its parent element.
+
+<div class="example">
+<p>Example:</p>
+<p>The following selector represents a definition title
+<code>dt</code> inside a definition list <code>dl</code>, this
+<code>dt</code> being the first of its type in the list of children of
+its parent element.</p>
+<pre>dl dt:first-of-type</pre>
+<p>It is a valid description for the first two <code>dt</code>
+elements in the following example but not for the third one:</p>
+<pre>&lt;dl&gt;
+ &lt;dt&gt;gigogne&lt;/dt&gt;
+ &lt;dd&gt;
+ &lt;dl&gt;
+ &lt;dt&gt;fus&eacute;e&lt;/dt&gt;
+ &lt;dd&gt;multistage rocket&lt;/dd&gt;
+ &lt;dt&gt;table&lt;/dt&gt;
+ &lt;dd&gt;nest of tables&lt;/dd&gt;
+ &lt;/dl&gt;
+ &lt;/dd&gt;
+&lt;/dl&gt;</pre>
+</div>
+
+<h5><a name=last-of-type-pseudo>:last-of-type pseudo-class</a></h5>
+
+<p>Same as <code>:nth-last-of-type(1)</code>. The
+<code>:last-of-type</code> pseudo-class represents an element that is
+the last sibling of its type in the list of children of its parent
+element.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents the last data cell
+ <code>td</code> of a table row.</p>
+ <pre>tr &gt; td:last-of-type</pre>
+</div>
+
+<h5><a name=only-child-pseudo>:only-child pseudo-class</a></h5>
+
+<p>Represents an element that has a parent element and whose parent
+element has no other element children. Same as
+<code>:first-child:last-child</code> or
+<code>:nth-child(1):nth-last-child(1)</code>, but with a lower
+specificity.</p>
+
+<h5><a name=only-of-type-pseudo>:only-of-type pseudo-class</a></h5>
+
+<p>Represents an element that has a parent element and whose parent
+element has no other element children with the same element name. Same
+as <code>:first-of-type:last-of-type</code> or
+<code>:nth-of-type(1):nth-last-of-type(1)</code>, but with a lower
+specificity.</p>
+
+
+<h5><a name=empty-pseudo></a>:empty pseudo-class</h5>
+
+<p>The <code>:empty</code> pseudo-class represents an element that has
+no children at all. In terms of the DOM, only element nodes and text
+nodes (including CDATA nodes and entity references) whose data has a
+non-zero length must be considered as affecting emptiness; comments,
+PIs, and other nodes must not affect whether an element is considered
+empty or not.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p><code>p:empty</code> is a valid representation of the following fragment:</p>
+ <pre>&lt;p&gt;&lt;/p&gt;</pre>
+ <p><code>foo:empty</code> is not a valid representation for the
+ following fragments:</p>
+ <pre>&lt;foo&gt;bar&lt;/foo&gt;</pre>
+ <pre>&lt;foo&gt;&lt;bar&gt;bla&lt;/bar&gt;&lt;/foo&gt;</pre>
+ <pre>&lt;foo&gt;this is not &lt;bar&gt;:empty&lt;/bar&gt;&lt;/foo&gt;</pre>
+</div>
+
+<h4><a name=content-selectors>6.6.6. Blank</a></h4> <!-- It's the Return of Appendix H!!! Run away! -->
+
+<p>This section intentionally left blank.</p>
+<!-- (used to be :contains()) -->
+
+<h4><a name=negation></a>6.6.7. The negation pseudo-class</h4>
+
+<p>The negation pseudo-class, <code>:not(<var>X</var>)</code>, is a
+functional notation taking a <a href="#simple-selectors-dfn">simple
+selector</a> (excluding the negation pseudo-class itself and
+pseudo-elements) as an argument. It represents an element that is not
+represented by the argument.
+
+<!-- pseudo-elements are not simple selectors, so the above paragraph
+may be a bit confusing -->
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following CSS selector matches all <code>button</code>
+ elements in an HTML document that are not disabled.</p>
+ <pre>button:not([DISABLED])</pre>
+ <p>The following selector represents all but <code>FOO</code>
+ elements.</p>
+ <pre>*:not(FOO)</pre>
+ <p>The following group of selectors represents all HTML elements
+ except links.</p>
+ <pre>html|*:not(:link):not(:visited)</pre>
+</div>
+
+<p>Default namespace declarations do not affect the argument of the
+negation pseudo-class unless the argument is a universal selector or a
+type selector.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>Assuming that the default namespace is bound to
+ "http://example.com/", the following selector represents all
+ elements that are not in that namespace:</p>
+ <pre>*|*:not(*)</pre>
+ <p>The following CSS selector matches any element being hovered,
+ regardless of its namespace. In particular, it is not limited to
+ only matching elements in the default namespace that are not being
+ hovered, and elements not in the default namespace don't match the
+ rule when they <em>are</em> being hovered.</p>
+ <pre>*|*:not(:hover)</pre>
+</div>
+
+<p class="note"><strong>Note</strong>: the :not() pseudo allows
+useless selectors to be written. For instance <code>:not(*|*)</code>,
+which represents no element at all, or <code>foo:not(bar)</code>,
+which is equivalent to <code>foo</code> but with a higher
+specificity.</p>
+
+<h3><a name=pseudo-elements>7. Pseudo-elements</a></h3>
+
+<p>Pseudo-elements create abstractions about the document tree beyond
+those specified by the document language. For instance, document
+languages do not offer mechanisms to access the first letter or first
+line of an element's content. Pseudo-elements allow designers to refer
+to this otherwise inaccessible information. Pseudo-elements may also
+provide designers a way to refer to content that does not exist in the
+source document (e.g., the <code>::before</code> and
+<code>::after</code> pseudo-elements give access to generated
+content).</p>
+
+<p>A pseudo-element is made of two colons (<code>::</code>) followed
+by the name of the pseudo-element.</p>
+
+<p>This <code>::</code> notation is introduced by the current document
+in order to establish a discrimination between pseudo-classes and
+pseudo-elements. For compatibility with existing style sheets, user
+agents must also accept the previous one-colon notation for
+pseudo-elements introduced in CSS levels 1 and 2 (namely,
+<code>:first-line</code>, <code>:first-letter</code>,
+<code>:before</code> and <code>:after</code>). This compatibility is
+not allowed for the new pseudo-elements introduced in CSS level 3.</p>
+
+<p>Only one pseudo-element may appear per selector, and if present it
+must appear after the sequence of simple selectors that represents the
+<a href="#subject">subjects</a> of the selector. <span class="note">A
+future version of this specification may allow multiple
+pesudo-elements per selector.</span></p>
+
+<h4><a name=first-line>7.1. The ::first-line pseudo-element</a></h4>
+
+<p>The <code>::first-line</code> pseudo-element describes the contents
+of the first formatted line of an element.
+
+<div class="example">
+<p>CSS example:</p>
+<pre>p::first-line { text-transform: uppercase }</pre>
+<p>The above rule means "change the letters of the first line of every
+paragraph to uppercase".</p>
+</div>
+
+<p>The selector <code>p::first-line</code> does not match any real
+HTML element. It does match a pseudo-element that conforming user
+agents will insert at the beginning of every paragraph.</p>
+
+<p>Note that the length of the first line depends on a number of
+factors, including the width of the page, the font size, etc. Thus,
+an ordinary HTML paragraph such as:</p>
+
+<pre>
+&lt;P&gt;This is a somewhat long HTML
+paragraph that will be broken into several
+lines. The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>the lines of which happen to be broken as follows:
+
+<pre>
+THIS IS A SOMEWHAT LONG HTML PARAGRAPH THAT
+will be broken into several lines. The first
+line will be identified by a fictional tag
+sequence. The other lines will be treated as
+ordinary lines in the paragraph.
+</pre>
+
+<p>This paragraph might be "rewritten" by user agents to include the
+<em>fictional tag sequence</em> for <code>::first-line</code>. This
+fictional tag sequence helps to show how properties are inherited.</p>
+
+<pre>
+&lt;P&gt;<b>&lt;P::first-line&gt;</b> This is a somewhat long HTML
+paragraph that <b>&lt;/P::first-line&gt;</b> will be broken into several
+lines. The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>If a pseudo-element breaks up a real element, the desired effect
+can often be described by a fictional tag sequence that closes and
+then re-opens the element. Thus, if we mark up the previous paragraph
+with a <code>span</code> element:</p>
+
+<pre>
+&lt;P&gt;<b>&lt;SPAN class="test"&gt;</b> This is a somewhat long HTML
+paragraph that will be broken into several
+lines.<b>&lt;/SPAN&gt;</b> The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>the user agent could simulate start and end tags for
+<code>span</code> when inserting the fictional tag sequence for
+<code>::first-line</code>.
+
+<pre>
+&lt;P&gt;&lt;P::first-line&gt;<b>&lt;SPAN class="test"&gt;</b> This is a
+somewhat long HTML
+paragraph that will <b>&lt;/SPAN&gt;</b>&lt;/P::first-line&gt;<b>&lt;SPAN class="test"&gt;</b> be
+broken into several
+lines.<b>&lt;/SPAN&gt;</b> The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>In CSS, the <code>::first-line</code> pseudo-element can only be
+attached to a block-level element, an inline-block, a table-caption,
+or a table-cell.</p>
+
+<p><a name="first-formatted-line"></a>The "first formatted line" of an
+element may occur inside a
+block-level descendant in the same flow (i.e., a block-level
+descendant that is not positioned and not a float). E.g., the first
+line of the <code>div</code> in <code>&lt;DIV>&lt;P>This
+line...&lt;/P>&lt/DIV></code> is the first line of the <code>p</code> (assuming
+that both <code>p</code> and <code>div</code> are block-level).
+
+<p>The first line of a table-cell or inline-block cannot be the first
+formatted line of an ancestor element. Thus, in <code>&lt;DIV&gt;&lt;P
+STYLE="display: inline-block">Hello&lt;BR&gt;Goodbye&lt;/P&gt;
+etcetera&lt;/DIV&gt;</code> the first formatted line of the
+<code>div</code> is not the line "Hello".
+
+<p class="note">Note that the first line of the <code>p</code> in this
+fragment: <code>&lt;p&gt&lt;br&gt;First...</code> doesn't contain any
+letters (assuming the default style for <code>br</code> in HTML
+4). The word "First" is not on the first formatted line.
+
+<p>A UA should act as if the fictional start tags of the
+<code>::first-line</code> pseudo-elements were nested just inside the
+innermost enclosing block-level element. (Since CSS1 and CSS2 were
+silent on this case, authors should not rely on this behavior.) Here
+is an example. The fictional tag sequence for</p>
+
+<pre>
+&lt;DIV>
+ &lt;P>First paragraph&lt;/P>
+ &lt;P>Second paragraph&lt;/P>
+&lt;/DIV>
+</pre>
+
+<p>is</p>
+
+<pre>
+&lt;DIV>
+ &lt;P>&lt;DIV::first-line>&lt;P::first-line>First paragraph&lt;/P::first-line>&lt;/DIV::first-line>&lt;/P>
+ &lt;P>&lt;P::first-line>Second paragraph&lt;/P::first-line>&lt;/P>
+&lt;/DIV>
+</pre>
+
+<p>The <code>::first-line</code> pseudo-element is similar to an
+inline-level element, but with certain restrictions. In CSS, the
+following properties apply to a <code>::first-line</code>
+pseudo-element: font properties, color property, background
+properties, 'word-spacing', 'letter-spacing', 'text-decoration',
+'vertical-align', 'text-transform', 'line-height'. UAs may apply other
+properties as well.</p>
+
+
+<h4><a name=first-letter>7.2. The ::first-letter pseudo-element</a></h4>
+
+<p>The <code>::first-letter</code> pseudo-element represents the first
+letter of the first line of a block, if it is not preceded by any
+other content (such as images or inline tables) on its line. The
+::first-letter pseudo-element may be used for "initial caps" and "drop
+caps", which are common typographical effects. This type of initial
+letter is similar to an inline-level element if its 'float' property
+is 'none'; otherwise, it is similar to a floated element.</p>
+
+<p>In CSS, these are the properties that apply to <code>::first-letter</code>
+pseudo-elements: font properties, 'text-decoration', 'text-transform',
+'letter-spacing', 'word-spacing' (when appropriate), 'line-height',
+'float', 'vertical-align' (only if 'float' is 'none'), margin
+properties, padding properties, border properties, color property,
+background properties. UAs may apply other properties as well. To
+allow UAs to render a typographically correct drop cap or initial cap,
+the UA may choose a line-height, width and height based on the shape
+of the letter, unlike for normal elements.</p>
+
+<div class="example">
+<p>Example:</p>
+<p>This example shows a possible rendering of an initial cap. Note
+that the 'line-height' that is inherited by the <code>::first-letter</code>
+pseudo-element is 1.1, but the UA in this example has computed the
+height of the first letter differently, so that it doesn't cause any
+unnecessary space between the first two lines. Also note that the
+fictional start tag of the first letter is inside the <span>span</span>, and thus
+the font weight of the first letter is normal, not bold as the <span>span</span>:
+<pre>
+p { line-height: 1.1 }
+p::first-letter { font-size: 3em; font-weight: normal }
+span { font-weight: bold }
+...
+&lt;p>&lt;span>Het hemelsche&lt;/span> gerecht heeft zich ten lange lesten&lt;br>
+Erbarremt over my en mijn benaeuwde vesten&lt;br>
+En arme burgery, en op mijn volcx gebed&lt;br>
+En dagelix geschrey de bange stad ontzet.
+</pre>
+<div class="figure">
+<p><img src="initial-cap.png" alt="Image illustrating the ::first-letter pseudo-element">
+</div>
+</div>
+
+<div class="example">
+<p>The following CSS will make a drop cap initial letter span about two lines:</p>
+
+<pre>
+&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"&gt;
+&lt;HTML&gt;
+ &lt;HEAD&gt;
+ &lt;TITLE&gt;Drop cap initial letter&lt;/TITLE&gt;
+ &lt;STYLE type="text/css"&gt;
+ P { font-size: 12pt; line-height: 1.2 }
+ P::first-letter { font-size: 200%; font-weight: bold; float: left }
+ SPAN { text-transform: uppercase }
+ &lt;/STYLE&gt;
+ &lt;/HEAD&gt;
+ &lt;BODY&gt;
+ &lt;P&gt;&lt;SPAN&gt;The first&lt;/SPAN&gt; few words of an article
+ in The Economist.&lt;/P&gt;
+ &lt;/BODY&gt;
+&lt;/HTML&gt;
+</pre>
+
+<p>This example might be formatted as follows:</p>
+
+<div class="figure">
+<P><img src="first-letter.gif" alt="Image illustrating the combined effect of the ::first-letter and ::first-line pseudo-elements"></p>
+</div>
+
+<p>The <span class="index-inst" title="fictional tag
+sequence">fictional tag sequence</span> is:</p>
+
+<pre>
+&lt;P&gt;
+&lt;SPAN&gt;
+&lt;P::first-letter&gt;
+T
+&lt;/P::first-letter&gt;he first
+&lt;/SPAN&gt;
+few words of an article in the Economist.
+&lt;/P&gt;
+</pre>
+
+<p>Note that the <code>::first-letter</code> pseudo-element tags abut
+the content (i.e., the initial character), while the ::first-line
+pseudo-element start tag is inserted right after the start tag of the
+block element.</p> </div>
+
+<p>In order to achieve traditional drop caps formatting, user agents
+may approximate font sizes, for example to align baselines. Also, the
+glyph outline may be taken into account when formatting.</p>
+
+<p>Punctuation (i.e, characters defined in Unicode in the "open" (Ps),
+"close" (Pe), "initial" (Pi). "final" (Pf) and "other" (Po)
+punctuation classes), that precedes or follows the first letter should
+be included. <a href="#refsUNICODE">[UNICODE]</a></p>
+
+<div class="figure">
+<P><img src="first-letter2.gif" alt="Quotes that precede the
+first letter should be included."></p>
+</div>
+
+<p>The <code>::first-letter</code> also applies if the first letter is
+in fact a digit, e.g., the "6" in "67 million dollars is a lot of
+money."</p>
+
+<p>In CSS, the <code>::first-letter</code> pseudo-element applies to
+block, list-item, table-cell, table-caption, and inline-block
+elements. <span class="note">A future version of this specification
+may allow this pesudo-element to apply to more element
+types.</span></p>
+
+<p>The <code>::first-letter</code> pseudo-element can be used with all
+such elements that contain text, or that have a descendant in the same
+flow that contains text. A UA should act as if the fictional start tag
+of the ::first-letter pseudo-element is just before the first text of
+the element, even if that first text is in a descendant.</p>
+
+<div class="example">
+<p>Example:</p>
+<p>The fictional tag sequence for this HTMLfragment:
+<pre>&lt;div>
+&lt;p>The first text.</pre>
+<p>is:
+<pre>&lt;div>
+&lt;p>&lt;div::first-letter>&lt;p::first-letter>T&lt;/...>&lt;/...>he first text.</pre>
+</div>
+
+<p>The first letter of a table-cell or inline-block cannot be the
+first letter of an ancestor element. Thus, in <code>&lt;DIV&gt;&lt;P
+STYLE="display: inline-block">Hello&lt;BR&gt;Goodbye&lt;/P&gt;
+etcetera&lt;/DIV&gt;</code> the first letter of the <code>div</code> is not the
+letter "H". In fact, the <code>div</code> doesn't have a first letter.
+
+<p>The first letter must occur on the <a
+href="#first-formatted-line">first formatted line.</a> For example, in
+this fragment: <code>&lt;p&gt&lt;br&gt;First...</code> the first line
+doesn't contain any letters and <code>::first-letter</code> doesn't
+match anything (assuming the default style for <code>br</code> in HTML
+4). In particular, it does not match the "F" of "First."
+
+<p>In CSS, if an element is a list item ('display: list-item'), the
+<code>::first-letter</code> applies to the first letter in the
+principal box after the marker. UAs may ignore
+<code>::first-letter</code> on list items with 'list-style-position:
+inside'. If an element has <code>::before</code> or
+<code>::after</code> content, the <code>::first-letter</code> applies
+to the first letter of the element <em>including</em> that content.
+
+<div class="example">
+<p>Example:</p>
+<p>After the rule 'p::before {content: "Note: "}', the selector
+'p::first-letter' matches the "N" of "Note".</p>
+</div>
+
+<p>Some languages may have specific rules about how to treat certain
+letter combinations. In Dutch, for example, if the letter combination
+"ij" appears at the beginning of a word, both letters should be
+considered within the <code>::first-letter</code> pseudo-element.
+
+<p>If the letters that would form the ::first-letter are not in the
+same element, such as "'T" in <code>&lt;p>'&lt;em>T...</code>, the UA
+may create a ::first-letter pseudo-element from one of the elements,
+both elements, or simply not create a pseudo-element.</p>
+
+<p>Similarly, if the first letter(s) of the block are not at the start
+of the line (for example due to bidirectional reordering), then the UA
+need not create the pseudo-element(s).
+
+<div class="example">
+<p>Example:</p>
+<p><a name="overlapping-example">The following example</a> illustrates
+how overlapping pseudo-elements may interact. The first letter of
+each P element will be green with a font size of '24pt'. The rest of
+the first formatted line will be 'blue' while the rest of the
+paragraph will be 'red'.</p>
+
+<pre>p { color: red; font-size: 12pt }
+p::first-letter { color: green; font-size: 200% }
+p::first-line { color: blue }
+
+&lt;P&gt;Some text that ends up on two lines&lt;/P&gt;</pre>
+
+<p>Assuming that a line break will occur before the word "ends", the
+<span class="index-inst" title="fictional tag sequence">fictional tag
+sequence</span> for this fragment might be:</p>
+
+<pre>&lt;P&gt;
+&lt;P::first-line&gt;
+&lt;P::first-letter&gt;
+S
+&lt;/P::first-letter&gt;ome text that
+&lt;/P::first-line&gt;
+ends up on two lines
+&lt;/P&gt;</pre>
+
+<p>Note that the <code>::first-letter</code> element is inside the <code>::first-line</code>
+element. Properties set on <code>::first-line</code> are inherited by
+<code>::first-letter</code>, but are overridden if the same property is set on
+<code>::first-letter</code>.</p>
+</div>
+
+
+<h4><a name=UIfragments>7.3.</a> <a name=selection>The ::selection pseudo-element</a></h4>
+
+<p>The <code>::selection</code> pseudo-element applies to the portion
+of a document that has been highlighted by the user. This also
+applies, for example, to selected text within an editable text
+field. This pseudo-element should not be confused with the <code><a
+href="#checked">:checked</a></code> pseudo-class (which used to be
+named <code>:selected</code>)
+
+<p>Although the <code>::selection</code> pseudo-element is dynamic in
+nature, and is altered by user action, it is reasonable to expect that
+when a UA re-renders to a static medium (such as a printed page, see
+<a href="#refsCSS21">[CSS21]</a>) which was originally rendered to a
+dynamic medium (like screen), the UA may wish to transfer the current
+<code>::selection</code> state to that other medium, and have all the
+appropriate formatting and rendering take effect as well. This is not
+required &mdash; UAs may omit the <code>::selection</code>
+pseudo-element for static media.
+
+<p>These are the CSS properties that apply to <code>::selection</code>
+pseudo-elements: color, background, cursor (optional), outline
+(optional). The computed value of the 'background-image' property on
+<code>::selection</code> may be ignored.
+
+
+<h4><a name=gen-content>7.4. The ::before and ::after pseudo-elements</a></h4>
+
+<p>The <code>::before</code> and <code>::after</code> pseudo-elements
+can be used to describe generated content before or after an element's
+content. They are explained in CSS 2.1 <a
+href="#refsCSS21">[CSS21]</a>.</p>
+
+<p>When the <code>::first-letter</code> and <code>::first-line</code>
+pseudo-elements are combined with <code>::before</code> and
+<code>::after</code>, they apply to the first letter or line of the
+element including the inserted text.</p>
+
+<h2><a name=combinators>8. Combinators</a></h2>
+
+<h3><a name=descendant-combinators>8.1. Descendant combinator</a></h3>
+
+<p>At times, authors may want selectors to describe an element that is
+the descendant of another element in the document tree (e.g., "an
+<code>EM</code> element that is contained within an <code>H1</code>
+element"). Descendant combinators express such a relationship. A
+descendant combinator is <a href="#whitespace">white space</a> that
+separates two sequences of simple selectors. A selector of the form
+"<code>A B</code>" represents an element <code>B</code> that is an
+arbitrary descendant of some ancestor element <code>A</code>.
+
+<div class="example">
+ <p>Examples:</p>
+ <p>For example, consider the following selector:</p>
+ <pre>h1 em</pre>
+ <p>It represents an <code>em</code> element being the descendant of
+ an <code>h1</code> element. It is a correct and valid, but partial,
+ description of the following fragment:</p>
+ <pre>&lt;h1&gt;This &lt;span class="myclass"&gt;headline
+is &lt;em&gt;very&lt;/em&gt; important&lt;/span&gt;&lt;/h1&gt;</pre>
+ <p>The following selector:</p>
+ <pre>div * p</pre>
+ <p>represents a <code>p</code> element that is a grandchild or later
+ descendant of a <code>div</code> element. Note the whitespace on
+ either side of the "*" is not part of the universal selector; the
+ whitespace is a combinator indicating that the DIV must be the
+ ancestor of some element, and that that element must be an ancestor
+ of the P.</p>
+ <p>The following selector, which combines descendant combinators and
+ <a href="#attribute-selectors">attribute selectors</a>, represents an
+ element that (1) has the <code>href</code> attribute set and (2) is
+ inside a <code>p</code> that is itself inside a <code>div</code>:</p>
+ <pre>div p *[href]</pre>
+</div>
+
+<h3><a name=child-combinators>8.2. Child combinators</a></h3>
+
+<p>A <dfn>child combinator</dfn> describes a childhood relationship
+between two elements. A child combinator is made of the
+&quot;greater-than sign&quot; (<code>&gt;</code>) character and
+separates two sequences of simple selectors.
+
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element that is
+ child of <code>body</code>:</p>
+ <pre>body &gt; p</pre>
+ <p>The following example combines descendant combinators and child
+ combinators.</p>
+ <pre>div ol&gt;li p</pre><!-- LEAVE THOSE SPACES OUT! see below -->
+ <p>It represents a <code>p</code> element that is a descendant of an
+ <code>li</code> element; the <code>li</code> element must be the
+ child of an <code>ol</code> element; the <code>ol</code> element must
+ be a descendant of a <code>div</code>. Notice that the optional white
+ space around the "&gt;" combinator has been left out.</p>
+</div>
+
+<p>For information on selecting the first child of an element, please
+see the section on the <code><a
+href="#structural-pseudos">:first-child</a></code> pseudo-class
+above.</p>
+
+<h3><a name=sibling-combinators>8.3. Sibling combinators</a></h3>
+
+<p>There are two different sibling combinators: the adjacent sibling
+combinator and the general sibling combinator. In both cases,
+non-element nodes (e.g. text between elements) are ignored when
+considering adjacency of elements.</p>
+
+<h4><a name=adjacent-sibling-combinators>8.3.1. Adjacent sibling combinator</a></h4>
+
+<p>The adjacent sibling combinator is made of the &quot;plus
+sign&quot; (U+002B, <code>+</code>) character that separates two
+sequences of simple selectors. The elements represented by the two
+sequences share the same parent in the document tree and the element
+represented by the first sequence immediately precedes the element
+represented by the second one.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element
+ immediately following a <code>math</code> element:</p>
+ <pre>math + p</pre>
+ <p>The following selector is conceptually similar to the one in the
+ previous example, except that it adds an attribute selector &mdash; it
+ adds a constraint to the <code>h1</code> element, that it must have
+ <code>class="opener"</code>:</p>
+ <pre>h1.opener + h2</pre>
+</div>
+
+
+<h4><a name=general-sibling-combinators>8.3.2. General sibling combinator</a></h4>
+
+<p>The general sibling combinator is made of the &quot;tilde&quot;
+(U+007E, <code>~</code>) character that separates two sequences of
+simple selectors. The elements represented by the two sequences share
+the same parent in the document tree and the element represented by
+the first sequence precedes (not necessarily immediately) the element
+represented by the second one.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <pre>h1 ~ pre</pre>
+ <p>represents a <code>pre</code> element following an <code>h1</code>. It
+ is a correct and valid, but partial, description of:</p>
+ <pre>&lt;h1&gt;Definition of the function a&lt;/h1&gt;
+&lt;p&gt;Function a(x) has to be applied to all figures in the table.&lt;/p&gt;
+&lt;pre&gt;function a(x) = 12x/13.5&lt;/pre&gt;</pre>
+</div>
+
+<h2><a name=specificity>9. Calculating a selector's specificity</a></h2>
+
+<p>A selector's specificity is calculated as follows:</p>
+
+<ul>
+ <li>count the number of ID selectors in the selector (= a)</li>
+ <li>count the number of class selectors, attributes selectors, and pseudo-classes in the selector (= b)</li>
+ <li>count the number of element names in the selector (= c)</li>
+ <li>ignore pseudo-elements</li>
+</ul>
+
+<p>Selectors inside <a href="#negation">the negation pseudo-class</a>
+are counted like any other, but the negation itself does not count as
+a pseudo-class.</p>
+
+<p>Concatenating the three numbers a-b-c (in a number system with a
+large base) gives the specificity.</p>
+
+<div class="example">
+<p>Examples:</p>
+<pre>* /* a=0 b=0 c=0 -&gt; specificity = 0 */
+LI /* a=0 b=0 c=1 -&gt; specificity = 1 */
+UL LI /* a=0 b=0 c=2 -&gt; specificity = 2 */
+UL OL+LI /* a=0 b=0 c=3 -&gt; specificity = 3 */
+H1 + *[REL=up] /* a=0 b=1 c=1 -&gt; specificity = 11 */
+UL OL LI.red /* a=0 b=1 c=3 -&gt; specificity = 13 */
+LI.red.level /* a=0 b=2 c=1 -&gt; specificity = 21 */
+#x34y /* a=1 b=0 c=0 -&gt; specificity = 100 */
+#s12:not(FOO) /* a=1 b=0 c=1 -&gt; specificity = 101 */
+</pre>
+</div>
+
+<p class="note"><strong>Note:</strong> the specificity of the styles
+specified in an HTML <code>style</code> attribute is described in CSS
+2.1. <a href="#refsCSS21">[CSS21]</a>.</p>
+
+<h2><a name=w3cselgrammar>10. The grammar of Selectors</a></h2>
+
+<h3><a name=grammar>10.1. Grammar</a></h3>
+
+<p>The grammar below defines the syntax of Selectors. It is globally
+LL(1) and can be locally LL(2) (but note that most UA's should not use
+it directly, since it doesn't express the parsing conventions). The
+format of the productions is optimized for human consumption and some
+shorthand notations beyond Yacc (see <a href="#refsYACC">[YACC]</a>)
+are used:</p>
+
+<ul>
+ <li><b>*</b>: 0 or more
+ <li><b>+</b>: 1 or more
+ <li><b>?</b>: 0 or 1
+ <li><b>|</b>: separates alternatives
+ <li><b>[ ]</b>: grouping </li>
+</ul>
+
+<p>The productions are:</p>
+
+<pre>selectors_group
+ : selector [ COMMA S* selector ]*
+ ;
+
+selector
+ : simple_selector_sequence [ combinator simple_selector_sequence ]*
+ ;
+
+combinator
+ /* combinators can be surrounded by white space */
+ : PLUS S* | GREATER S* | TILDE S* | S+
+ ;
+
+simple_selector_sequence
+ : [ type_selector | universal ]
+ [ HASH | class | attrib | pseudo | negation ]*
+ | [ HASH | class | attrib | pseudo | negation ]+
+ ;
+
+type_selector
+ : [ namespace_prefix ]? element_name
+ ;
+
+namespace_prefix
+ : [ IDENT | '*' ]? '|'
+ ;
+
+element_name
+ : IDENT
+ ;
+
+universal
+ : [ namespace_prefix ]? '*'
+ ;
+
+class
+ : '.' IDENT
+ ;
+
+attrib
+ : '[' S* [ namespace_prefix ]? IDENT S*
+ [ [ PREFIXMATCH |
+ SUFFIXMATCH |
+ SUBSTRINGMATCH |
+ '=' |
+ INCLUDES |
+ DASHMATCH ] S* [ IDENT | STRING ] S*
+ ]? ']'
+ ;
+
+pseudo
+ /* '::' starts a pseudo-element, ':' a pseudo-class */
+ /* Exceptions: :first-line, :first-letter, :before and :after. */
+ /* Note that pseudo-elements are restricted to one per selector and */
+ /* occur only in the last simple_selector_sequence. */
+ : ':' ':'? [ IDENT | functional_pseudo ]
+ ;
+
+functional_pseudo
+ : FUNCTION S* expression ')'
+ ;
+
+expression
+ /* In CSS3, the expressions are identifiers, strings, */
+ /* or of the form "an+b" */
+ : [ [ PLUS | '-' | DIMENSION | NUMBER | STRING | IDENT ] S* ]+
+ ;
+
+negation
+ : NOT S* negation_arg S* ')'
+ ;
+
+negation_arg
+ : type_selector | universal | HASH | class | attrib | pseudo
+ ;</pre>
+
+
+<h3><a name=lex>10.2. Lexical scanner</a></h3>
+
+<p>The following is the <a name=x3>tokenizer</a>, written in Flex (see
+<a href="#refsFLEX">[FLEX]</a>) notation. The tokenizer is
+case-insensitive.</p>
+
+<p>The two occurrences of "\377" represent the highest character
+number that current versions of Flex can deal with (decimal 255). They
+should be read as "\4177777" (decimal 1114111), which is the highest
+possible code point in Unicode/ISO-10646. <a
+href="#refsUNICODE">[UNICODE]</a></p>
+
+<pre>%option case-insensitive
+
+ident [-]?{nmstart}{nmchar}*
+name {nmchar}+
+nmstart [_a-z]|{nonascii}|{escape}
+nonascii [^\0-\177]
+unicode \\[0-9a-f]{1,6}(\r\n|[ \n\r\t\f])?
+escape {unicode}|\\[^\n\r\f0-9a-f]
+nmchar [_a-z0-9-]|{nonascii}|{escape}
+num [0-9]+|[0-9]*\.[0-9]+
+string {string1}|{string2}
+string1 \"([^\n\r\f\\"]|\\{nl}|{nonascii}|{escape})*\"
+string2 \'([^\n\r\f\\']|\\{nl}|{nonascii}|{escape})*\'
+invalid {invalid1}|{invalid2}
+invalid1 \"([^\n\r\f\\"]|\\{nl}|{nonascii}|{escape})*
+invalid2 \'([^\n\r\f\\']|\\{nl}|{nonascii}|{escape})*
+nl \n|\r\n|\r|\f
+w [ \t\r\n\f]*
+
+%%
+
+[ \t\r\n\f]+ return S;
+
+"~=" return INCLUDES;
+"|=" return DASHMATCH;
+"^=" return PREFIXMATCH;
+"$=" return SUFFIXMATCH;
+"*=" return SUBSTRINGMATCH;
+{ident} return IDENT;
+{string} return STRING;
+{ident}"(" return FUNCTION;
+{num} return NUMBER;
+"#"{name} return HASH;
+{w}"+" return PLUS;
+{w}"&gt;" return GREATER;
+{w}"," return COMMA;
+{w}"~" return TILDE;
+":not(" return NOT;
+@{ident} return ATKEYWORD;
+{invalid} return INVALID;
+{num}% return PERCENTAGE;
+{num}{ident} return DIMENSION;
+"&lt;!--" return CDO;
+"--&gt;" return CDC;
+
+"url("{w}{string}{w}")" return URI;
+"url("{w}([!#$%&*-~]|{nonascii}|{escape})*{w}")" return URI;
+U\+[0-9a-f?]{1,6}(-[0-9a-f]{1,6})? return UNICODE_RANGE;
+
+\/\*[^*]*\*+([^/*][^*]*\*+)*\/ /* ignore comments */
+
+. return *yytext;</pre>
+
+
+
+<h2><a name=downlevel>11. Namespaces and down-level clients</a></h2>
+
+<p>An important issue is the interaction of CSS selectors with XML
+documents in web clients that were produced prior to this
+document. Unfortunately, due to the fact that namespaces must be
+matched based on the URI which identifies the namespace, not the
+namespace prefix, some mechanism is required to identify namespaces in
+CSS by their URI as well. Without such a mechanism, it is impossible
+to construct a CSS style sheet which will properly match selectors in
+all cases against a random set of XML documents. However, given
+complete knowledge of the XML document to which a style sheet is to be
+applied, and a limited use of namespaces within the XML document, it
+is possible to construct a style sheet in which selectors would match
+elements and attributes correctly.</p>
+
+<p>It should be noted that a down-level CSS client will (if it
+properly conforms to CSS forward compatible parsing rules) ignore all
+<code>@namespace</code> at-rules, as well as all style rules that make
+use of namespace qualified element type or attribute selectors. The
+syntax of delimiting namespace prefixes in CSS was deliberately chosen
+so that down-level CSS clients would ignore the style rules rather
+than possibly match them incorrectly.</p>
+
+<p>The use of default namespaces in CSS makes it possible to write
+element type selectors that will function in both namespace aware CSS
+clients as well as down-level clients. It should be noted that
+down-level clients may incorrectly match selectors against XML
+elements in other namespaces.</p>
+
+<p>The following are scenarios and examples in which it is possible to
+construct style sheets which would function properly in web clients
+that do not implement this proposal.</p>
+
+<ol>
+ <li>
+
+ <p>The XML document does not use namespaces.</p>
+
+ <ul>
+
+ <li>In this case, it is obviously not necessary to declare or use
+ namespaces in the style sheet. Standard CSS element type and
+ attribute selectors will function adequately in a down-level
+ client.</li>
+
+ <li>In a CSS namespace aware client, the default behavior of
+ element selectors matching without regard to namespace will
+ function properly against all elements, since no namespaces are
+ present. However, the use of specific element type selectors that
+ match only elements that have no namespace ("<code>|name</code>")
+ will guarantee that selectors will match only XML elements that do
+ not have a declared namespace. </li>
+
+ </ul>
+
+ </li>
+
+ <li>
+
+ <p>The XML document defines a single, default namespace used
+ throughout the document. No namespace prefixes are used in element
+ names.</p>
+
+ <ul>
+
+ <li>In this case, a down-level client will function as if
+ namespaces were not used in the XML document at all. Standard CSS
+ element type and attribute selectors will match against all
+ elements. </li>
+
+ </ul>
+
+ </li>
+
+ <li>
+
+ <p>The XML document does <b>not</b> use a default namespace, all
+ namespace prefixes used are known to the style sheet author, and
+ there is a direct mapping between namespace prefixes and namespace
+ URIs. (A given prefix may only be mapped to one namespace URI
+ throughout the XML document; there may be multiple prefixes mapped
+ to the same URI).</p>
+
+ <ul>
+
+ <li>In this case, the down-level client will view and match
+ element type and attribute selectors based on their fully
+ qualified name, not the local part as outlined in the <a
+ href="#typenmsp">Type selectors and Namespaces</a> section. CSS
+ selectors may be declared using an escaped colon "<code>\:</code>"
+ to describe the fully qualified names, e.g.
+ "<code>html\:h1</code>" will match
+ <code>&lt;html:h1&gt;</code>. Selectors using the qualified name
+ will only match XML elements that use the same prefix. Other
+ namespace prefixes used in the XML that are mapped to the same URI
+ will not match as expected unless additional CSS style rules are
+ declared for them.</li>
+
+ <li>Note that selectors declared in this fashion will
+ <em>only</em> match in down-level clients. A CSS namespace aware
+ client will match element type and attribute selectors based on
+ the name's local part. Selectors declared with the fully
+ qualified name will not match (unless there is no namespace prefix
+ in the fully qualified name).</li>
+
+ </ul>
+
+ </li>
+
+ </ol>
+
+<p>In other scenarios: when the namespace prefixes used in the XML are
+not known in advance by the style sheet author; or a combination of
+elements with no namespace are used in conjunction with elements using
+a default namespace; or the same namespace prefix is mapped to
+<em>different</em> namespace URIs within the same document, or in
+different documents; it is impossible to construct a CSS style sheet
+that will function properly against all elements in those documents,
+unless, the style sheet is written using a namespace URI syntax (as
+outlined in this document or similar) and the document is processed by
+a CSS and XML namespace aware client.</p>
+
+<h2><a name=profiling>12. Profiles</a></h2>
+
+<p>Each specification using Selectors must define the subset of W3C
+Selectors it allows and excludes, and describe the local meaning of
+all the components of that subset.</p>
+
+<p>Non normative examples:
+
+<div class="profile">
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>CSS level 1</td></tr>
+ <tr>
+ <th>Accepts</th>
+ <td>type selectors<br>class selectors<br>ID selectors<br>:link,
+ :visited and :active pseudo-classes<br>descendant combinator
+ <br>::first-line and ::first-letter pseudo-elements</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>
+
+<p>universal selector<br>attribute selectors<br>:hover and :focus
+ pseudo-classes<br>:target pseudo-class<br>:lang() pseudo-class<br>all UI
+ element states pseudo-classes<br>all structural
+ pseudo-classes<br>negation pseudo-class<br>all
+ UI element fragments pseudo-elements<br>::before and ::after
+ pseudo-elements<br>child combinators<br>sibling combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>only one class selector allowed per sequence of simple
+ selectors</td></tr></tbody></table><br><br>
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>CSS level 2</td></tr>
+ <tr>
+ <th>Accepts</th>
+ <td>type selectors<br>universal selector<br>attribute presence and
+ values selectors<br>class selectors<br>ID selectors<br>:link, :visited,
+ :active, :hover, :focus, :lang() and :first-child pseudo-classes
+ <br>descendant combinator<br>child combinator<br>adjacent sibling
+ combinator<br>::first-line and ::first-letter pseudo-elements<br>::before
+ and ::after pseudo-elements</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>
+
+<p>content selectors<br>substring matching attribute
+ selectors<br>:target pseudo-classes<br>all UI element
+ states pseudo-classes<br>all structural pseudo-classes other
+ than :first-child<br>negation pseudo-class<br>all UI element
+ fragments pseudo-elements<br>general sibling combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>more than one class selector per sequence of simple selectors (CSS1
+ constraint) allowed</td></tr></tbody></table>
+
+<p>In CSS, selectors express pattern matching rules that determine which style
+rules apply to elements in the document tree.
+
+<p>The following selector (CSS level 2) will <b>match</b> all anchors <code>a</code>
+with attribute <code>name</code> set inside a section 1 header <code>h1</code>:
+<pre>h1 a[name]</pre>
+
+<p>All CSS declarations attached to such a selector are applied to elements
+matching it. </div>
+
+<div class="profile">
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>STTS 3</td>
+ </tr>
+ <tr>
+ <th>Accepts</th>
+ <td>
+
+<p>type selectors<br>universal selectors<br>attribute selectors<br>class
+ selectors<br>ID selectors<br>all structural pseudo-classes<br>
+ all combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>non-accepted pseudo-classes<br>pseudo-elements<br></td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>some selectors and combinators are not allowed in fragment
+ descriptions on the right side of STTS declarations.</td></tr></tbody></table>
+<form>
+<input type="text" name="test10"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+</form>
+
+<p>Selectors can be used in STTS 3 in two different
+ manners:
+<ol>
+ <li>a selection mechanism equivalent to CSS selection mechanism: declarations
+ attached to a given selector are applied to elements matching that selector,
+ <li>fragment descriptions that appear on the right side of declarations.
+</li></ol></div>
+
+<h2><a name=Conformance></a>13. Conformance and requirements</h2>
+
+<p>This section defines conformance with the present specification only.
+
+<p>The inability of a user agent to implement part of this specification due to
+the limitations of a particular device (e.g., non interactive user agents will
+probably not implement dynamic pseudo-classes because they make no sense without
+interactivity) does not imply non-conformance.
+
+<p>All specifications reusing Selectors must contain a <a
+href="#profiling">Profile</a> listing the
+subset of Selectors it accepts or excludes, and describing the constraints
+it adds to the current specification.
+
+<p>Invalidity is caused by a parsing error, e.g. an unrecognized token or a token
+which is not allowed at the current parsing point.
+
+<p>User agents must observe the rules for handling parsing errors:
+<ul>
+ <li>a simple selector containing an undeclared namespace prefix is invalid</li>
+ <li>a selector containing an invalid simple selector, an invalid combinator
+ or an invalid token is invalid. </li>
+ <li>a group of selectors containing an invalid selector is invalid.</li>
+</ul>
+
+<p class="foo test10 bar">Specifications reusing Selectors must define how to handle parsing
+errors. (In the case of CSS, the entire rule in which the selector is
+used is dropped.)</p>
+
+<!-- Apparently all these references are out of date:
+<p>Implementations of this specification must behave as
+"recipients of text data" as defined by <a href="#refsCWWW">[CWWW]</a>
+when parsing selectors and attempting matches. (In particular,
+implementations must assume the data is normalized and must not
+normalize it.) Normative rules for matching strings are defined in
+<a href="#refsCWWW">[CWWW]</a> and <a
+href="#refsUNICODE">[UNICODE]</a> and apply to implementations of this
+specification.</p>-->
+
+<h2><a name=Tests></a>14. Tests</h2>
+
+<p>This specification has <a
+href="http://www.w3.org/Style/CSS/Test/CSS3/Selectors/current/">a test
+suite</a> allowing user agents to verify their basic conformance to
+the specification. This test suite does not pretend to be exhaustive
+and does not cover all possible combined cases of Selectors.</p>
+
+<h2><a name=ACKS></a>15. Acknowledgements</h2>
+
+<p>The CSS working group would like to thank everyone who has sent
+comments on this specification over the years.</p>
+
+<p>The working group would like to extend special thanks to Donna
+McManus, Justin Baker, Joel Sklar, and Molly Ives Brower who perfermed
+the final editorial review.</p>
+
+<h2><a name=references>16. References</a></h2>
+
+<dl class="refs">
+
+ <dt>[CSS1]
+ <dd><a name=refsCSS1></a> Bert Bos, H&aring;kon Wium Lie; "<cite>Cascading Style Sheets, level 1</cite>", W3C Recommendation, 17 Dec 1996, revised 11 Jan 1999
+ <dd>(<code><a href="http://www.w3.org/TR/REC-CSS1">http://www.w3.org/TR/REC-CSS1</a></code>)
+
+ <dt>[CSS21]
+ <dd><a name=refsCSS21></a> Bert Bos, Tantek &Ccedil;elik, Ian Hickson, H&aring;kon Wium Lie, editors; "<cite>Cascading Style Sheets, level 2 revision 1</cite>", W3C Working Draft, 13 June 2005
+ <dd>(<code><a href="http://www.w3.org/TR/CSS21">http://www.w3.org/TR/CSS21</a></code>)
+
+ <dt>[CWWW]
+ <dd><a name=refsCWWW></a> Martin J. D&uuml;rst, Fran&ccedil;ois Yergeau, Misha Wolf, Asmus Freytag, Tex Texin, editors; "<cite>Character Model for the World Wide Web</cite>", W3C Recommendation, 15 February 2005
+ <dd>(<code><a href="http://www.w3.org/TR/charmod/">http://www.w3.org/TR/charmod/</a></code>)
+
+ <dt>[FLEX]
+ <dd><a name="refsFLEX"></a> "<cite>Flex: The Lexical Scanner Generator</cite>", Version 2.3.7, ISBN 1882114213
+
+ <dt>[HTML4]
+ <dd><a name="refsHTML4"></a> Dave Ragget, Arnaud Le Hors, Ian Jacobs, editors; "<cite>HTML 4.01 Specification</cite>", W3C Recommendation, 24 December 1999
+ <dd>(<a href="http://www.w3.org/TR/html4/"><code>http://www.w3.org/TR/html4/</code></a>)
+
+ <dt>[MATH]
+ <dd><a name="refsMATH"></a> Patrick Ion, Robert Miner, editors; "<cite>Mathematical Markup Language (MathML) 1.01</cite>", W3C Recommendation, revision of 7 July 1999
+ <dd>(<code><a href="http://www.w3.org/TR/REC-MathML/">http://www.w3.org/TR/REC-MathML/</a></code>)
+
+ <dt>[RFC3066]
+ <dd><a name="refsRFC3066"></a> H. Alvestrand; "<cite>Tags for the Identification of Languages</cite>", Request for Comments 3066, January 2001
+ <dd>(<a href="http://www.ietf.org/rfc/rfc3066.txt"><code>http://www.ietf.org/rfc/rfc3066.txt</code></a>)
+
+ <dt>[STTS]
+ <dd><a name=refsSTTS></a> Daniel Glazman; "<cite>Simple Tree Transformation Sheets 3</cite>", Electricit&eacute; de France, submission to the W3C, 11 November 1998
+ <dd>(<code><a href="http://www.w3.org/TR/NOTE-STTS3">http://www.w3.org/TR/NOTE-STTS3</a></code>)
+
+ <dt>[SVG]
+ <dd><a name="refsSVG"></a> Jon Ferraiolo, &#34276;&#27810; &#28147;, Dean Jackson, editors; "<cite>Scalable Vector Graphics (SVG) 1.1 Specification</cite>", W3C Recommendation, 14 January 2003
+ <dd>(<code><a href="http://www.w3.org/TR/SVG/">http://www.w3.org/TR/SVG/</a></code>)
+
+ <dt>[UNICODE]</dt>
+ <dd><a name="refsUNICODE"></a> <cite><a
+ href="http://www.unicode.org/versions/Unicode4.1.0/">The Unicode Standard, Version 4.1</a></cite>, The Unicode Consortium. Boston, MA, Addison-Wesley, March 2005. ISBN 0-321-18578-1, as amended by <a href="http://www.unicode.org/versions/Unicode4.0.1/">Unicode 4.0.1</a> and <a href="http://www.unicode.org/versions/Unicode4.1.0/">Unicode 4.1.0</a>.
+ <dd>(<code><a href="http://www.unicode.org/versions/">http://www.unicode.org/versions/</a></code>)</dd>
+
+ <dt>[XML10]
+ <dd><a name="refsXML10"></a> Tim Bray, Jean Paoli, C. M. Sperberg-McQueen, Eve Maler, Fran&ccedil;ois Yergeau, editors; "<cite>Extensible Markup Language (XML) 1.0 (Third Edition)</cite>", W3C Recommendation, 4 February 2004
+ <dd>(<a href="http://www.w3.org/TR/REC-xml/"><code>http://www.w3.org/TR/REC-xml/</code></a>)
+
+ <dt>[XMLNAMES]
+ <dd><a name="refsXMLNAMES"></a> Tim Bray, Dave Hollander, Andrew Layman, editors; "<cite>Namespaces in XML</cite>", W3C Recommendation, 14 January 1999
+ <dd>(<a href="http://www.w3.org/TR/REC-xml-names/"><code>http://www.w3.org/TR/REC-xml-names/</code></a>)
+
+ <dt>[YACC]
+ <dd><a name="refsYACC"></a> S. C. Johnson; "<cite>YACC &mdash; Yet another compiler compiler</cite>", Technical Report, Murray Hill, 1975
+
+</dl>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/cssquery-ext.html b/testing/talos/talos/tests/dromaeo/tests/cssquery-ext.html
new file mode 100644
index 0000000000..5653d86645
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/cssquery-ext.html
@@ -0,0 +1,3064 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script src="../lib/ext-base.js"></script>
+<script src="../lib/ext-core.js"></script>
+<script>
+window.onload = function(){
+startTest("cssquery-ext", '559e157b');
+
+// Try to force real results
+var ret, tmp;
+
+var html = document.body.innerHTML;
+var query = Ext.DomQuery.select;
+
+ prep(function(){
+ var div = document.createElement("div");
+ div.innerHTML = html;
+ document.body.appendChild( div );
+ });
+
+ test("Ext - *", function(){
+ query("*");
+ });
+
+ test("Ext - div:only-child", function(){
+ query("div:only-child");
+ });
+
+ test("Ext - div:first-child", function(){
+ query("div:first-child");
+ });
+
+ test("Ext - div:nth-child(even)", function(){
+ query("div:nth-child(even)");
+ });
+
+ test("Ext - div:nth-child(2n)", function(){
+ query("div:nth-child(2n)");
+ });
+
+ test("Ext - div:nth-child(odd)", function(){
+ query("div:nth-child(odd)");
+ });
+
+ test("Ext - div:nth-child(2n+1)", function(){
+ query("div:nth-child(2n+1)");
+ });
+
+ test("Ext - div:nth-child(n)", function(){
+ query("div:nth-child(n)");
+ });
+
+ test("Ext - div:last-child", function(){
+ query("div:last-child");
+ });
+
+ test("Ext - div > div", function(){
+ query("div > div");
+ });
+
+ test("Ext - div + div", function(){
+ query("div + div");
+ });
+
+ test("Ext - div ~ div", function(){
+ query("div ~ div");
+ });
+
+ test("Ext - body", function(){
+ query("body");
+ });
+
+ test("Ext - body div", function(){
+ query("body div");
+ });
+
+ test("Ext - div", function(){
+ query("div");
+ });
+
+ test("Ext - div div", function(){
+ query("div div");
+ });
+
+ test("Ext - div div div", function(){
+ query("div div div");
+ });
+
+ test("Ext - div, div, div", function(){
+ query("div, div, div");
+ });
+
+ test("Ext - div, a, span", function(){
+ query("div, a, span");
+ });
+
+ test("Ext - .dialog", function(){
+ query(".dialog");
+ });
+
+ test("Ext - div.dialog", function(){
+ query("div.dialog");
+ });
+
+ test("Ext - div .dialog", function(){
+ query("div .dialog");
+ });
+
+ test("Ext - div.character, div.dialog", function(){
+ query("div.character, div.dialog");
+ });
+
+ test("Ext - #speech5", function(){
+ query("#speech5");
+ });
+
+ test("Ext - div#speech5", function(){
+ query("div#speech5");
+ });
+
+ test("Ext - div #speech5", function(){
+ query("div #speech5");
+ });
+
+ test("Ext - div.scene div.dialog", function(){
+ query("div.scene div.dialog");
+ });
+
+ test("Ext - div#scene1 div.dialog div", function(){
+ query("div#scene1 div.dialog div");
+ });
+
+ test("Ext - #scene1 #speech1", function(){
+ query("#scene1 #speech1");
+ });
+
+ test("Ext - div[class]", function(){
+ query("div[class]");
+ });
+
+ test("Ext - div[class=dialog]", function(){
+ query("div[class=dialog]");
+ });
+
+ test("Ext - div[class^=dia]", function(){
+ query("div[class^=dia]");
+ });
+
+ test("Ext - div[class$=log]", function(){
+ query("div[class$=log]");
+ });
+
+ test("Ext - div[class*=sce]", function(){
+ query("div[class*=sce]");
+ });
+
+ test("Ext - div[class|=dialog]", function(){
+ query("div[class|=dialog]");
+ });
+
+ test("Ext - div[class~=dialog]", function(){
+ query("div[class~=dialog]");
+ });
+
+endTest();
+};
+</script>
+</head>
+<body>
+ <div class="head">
+ <p><a href="http://www.w3.org/"><img height=48 alt=W3C src="w3c_home.png" width=72></a>
+
+ <h1 id="title">Selectors</h1>
+
+ <h2>W3C Working Draft 15 December 2005</h2>
+
+ <dl>
+
+ <dt>This version:
+
+ <dd><a href="http://www.w3.org/TR/2005/WD-css3-selectors-20051215">
+ http://www.w3.org/TR/2005/WD-css3-selectors-20051215</a>
+
+ <dt>Latest version:
+
+ <dd><a href="http://www.w3.org/TR/css3-selectors">
+ http://www.w3.org/TR/css3-selectors</a>
+
+ <dt>Previous version:
+
+ <dd><a href="http://www.w3.org/TR/2001/CR-css3-selectors-20011113">
+ http://www.w3.org/TR/2001/CR-css3-selectors-20011113</a>
+
+ <dt><a name=editors-list></a>Editors:
+
+ <dd class="vcard"><span class="fn">Daniel Glazman</span> (Invited Expert)</dd>
+
+ <dd class="vcard"><a lang="tr" class="url fn" href="http://www.tantek.com/">Tantek &Ccedil;elik</a> (Invited Expert)
+
+ <dd class="vcard"><a href="mailto:ian@hixie.ch" class="url fn">Ian Hickson</a> (<span
+ class="company"><a href="http://www.google.com/">Google</a></span>)
+
+ <dd class="vcard"><span class="fn">Peter Linss</span> (former editor, <span class="company"><a
+ href="http://www.netscape.com/">Netscape/AOL</a></span>)
+
+ <dd class="vcard"><span class="fn">John Williams</span> (former editor, <span class="company"><a
+ href="http://www.quark.com/">Quark, Inc.</a></span>)
+
+ </dl>
+
+ <p class="copyright"><a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright">
+ Copyright</a> &copy; 2005 <a href="http://www.w3.org/"><abbr
+ title="World Wide Web Consortium">W3C</abbr></a><sup>&reg;</sup>
+ (<a href="http://www.csail.mit.edu/"><abbr title="Massachusetts
+ Institute of Technology">MIT</abbr></a>, <a
+ href="http://www.ercim.org/"><acronym title="European Research
+ Consortium for Informatics and Mathematics">ERCIM</acronym></a>, <a
+ href="http://www.keio.ac.jp/">Keio</a>), All Rights Reserved. W3C
+ <a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">liability</a>,
+ <a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">trademark</a>,
+ <a
+ href="http://www.w3.org/Consortium/Legal/copyright-documents">document
+ use</a> rules apply.
+
+ <hr title="Separator for header">
+
+ </div>
+
+ <h2><a name=abstract></a>Abstract</h2>
+
+ <p><em>Selectors</em> are patterns that match against elements in a
+ tree. Selectors have been optimized for use with HTML and XML, and
+ are designed to be usable in performance-critical code.</p>
+
+ <p><acronym title="Cascading Style Sheets">CSS</acronym> (Cascading
+ Style Sheets) is a language for describing the rendering of <acronym
+ title="Hypertext Markup Language">HTML</acronym> and <acronym
+ title="Extensible Markup Language">XML</acronym> documents on
+ screen, on paper, in speech, etc. CSS uses Selectors for binding
+ style properties to elements in the document. This document
+ describes extensions to the selectors defined in CSS level 2. These
+ extended selectors will be used by CSS level 3.
+
+ <p>Selectors define the following function:</p>
+
+ <pre>expression &#x2217; element &rarr; boolean</pre>
+
+ <p>That is, given an element and a selector, this specification
+ defines whether that element matches the selector.</p>
+
+ <p>These expressions can also be used, for instance, to select a set
+ of elements, or a single element from a set of elements, by
+ evaluating the expression across all the elements in a
+ subtree. <acronym title="Simple Tree Transformation
+ Sheets">STTS</acronym> (Simple Tree Transformation Sheets), a
+ language for transforming XML trees, uses this mechanism. <a href="#refsSTTS">[STTS]</a></p>
+
+ <h2><a name=status></a>Status of this document</h2>
+
+ <p><em>This section describes the status of this document at the
+ time of its publication. Other documents may supersede this
+ document. A list of current W3C publications and the latest revision
+ of this technical report can be found in the <a
+ href="http://www.w3.org/TR/">W3C technical reports index at
+ http://www.w3.org/TR/.</a></em></p>
+
+ <p>This document describes the selectors that already exist in <a
+ href="#refsCSS1"><abbr title="CSS level 1">CSS1</abbr></a> and <a
+ href="#refsCSS21"><abbr title="CSS level 2">CSS2</abbr></a>, and
+ also proposes new selectors for <abbr title="CSS level
+ 3">CSS3</abbr> and other languages that may need them.</p>
+
+ <p>The CSS Working Group doesn't expect that all implementations of
+ CSS3 will have to implement all selectors. Instead, there will
+ probably be a small number of variants of CSS3, called profiles. For
+ example, it may be that only a profile for interactive user agents
+ will include all of the selectors.</p>
+
+ <p>This specification is a last call working draft for the the <a
+ href="http://www.w3.org/Style/CSS/members">CSS Working Group</a>
+ (<a href="/Style/">Style Activity</a>). This
+ document is a revision of the <a
+ href="http://www.w3.org/TR/2001/CR-css3-selectors-20011113/">Candidate
+ Recommendation dated 2001 November 13</a>, and has incorporated
+ implementation feedback received in the past few years. It is
+ expected that this last call will proceed straight to Proposed
+ Recommendation stage since it is believed that interoperability will
+ be demonstrable.</p>
+
+ <p>All persons are encouraged to review and implement this
+ specification and return comments to the (<a
+ href="http://lists.w3.org/Archives/Public/www-style/">archived</a>)
+ public mailing list <a
+ href="http://www.w3.org/Mail/Lists.html#www-style">www-style</a>
+ (see <a href="http://www.w3.org/Mail/Request">instructions</a>). W3C
+ Members can also send comments directly to the CSS Working
+ Group.
+ The deadline for comments is 14 January 2006.</p>
+
+ <p>This is still a draft document and may be updated, replaced, or
+ obsoleted by other documents at any time. It is inappropriate to
+ cite a W3C Working Draft as other than &quot;work in progress&quot;.
+
+ <p>This document may be available in <a
+ href="http://www.w3.org/Style/css3-selectors-updates/translations">translation</a>.
+ The English version of this specification is the only normative
+ version.
+
+ <div class="subtoc">
+
+ <h2 id="test10"><a name=contents>Table of contents</a></h2>
+
+ <ul class="toc">
+ <li class="tocline2"><a href="#context">1. Introduction</a>
+ <ul>
+ <li><a href="#dependencies">1.1. Dependencies</a> </li>
+ <li><a href="#terminology">1.2. Terminology</a> </li>
+ <li><a href="#changesFromCSS2">1.3. Changes from CSS2</a> </li>
+ </ul>
+ <li class="tocline2"><a href="#selectors">2. Selectors</a>
+ <li class="tocline2"><a href="#casesens">3. Case sensitivity</a>
+ <li class="tocline2"><a href="#selector-syntax">4. Selector syntax</a>
+ <li class="tocline2"><a href="#grouping">5. Groups of selectors</a>
+ <li class="tocline2"><a href="#simple-selectors">6. Simple selectors</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#type-selectors">6.1. Type selectors</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#typenmsp">6.1.1. Type selectors and namespaces</a></li>
+ </ul>
+ <li class="tocline3"><a href="#universal-selector">6.2. Universal selector</a>
+ <ul>
+ <li><a href="#univnmsp">6.2.1. Universal selector and namespaces</a></li>
+ </ul>
+ <li class="tocline3"><a href="#attribute-selectors">6.3. Attribute selectors</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#attribute-representation">6.3.1. Representation of attributes and attributes values</a>
+ <li><a href="#attribute-substrings">6.3.2. Substring matching attribute selectors</a>
+ <li class="tocline4"><a href="#attrnmsp">6.3.3. Attribute selectors and namespaces</a>
+ <li class="tocline4"><a href="#def-values">6.3.4. Default attribute values in DTDs</a></li>
+ </ul>
+ <li class="tocline3"><a href="#class-html">6.4. Class selectors</a>
+ <li class="tocline3"><a href="#id-selectors">6.5. ID selectors</a>
+ <li class="tocline3"><a href="#pseudo-classes">6.6. Pseudo-classes</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#dynamic-pseudos">6.6.1. Dynamic pseudo-classes</a>
+ <li class="tocline4"><a href="#target-pseudo">6.6.2. The :target pseudo-class</a>
+ <li class="tocline4"><a href="#lang-pseudo">6.6.3. The :lang() pseudo-class</a>
+ <li class="tocline4"><a href="#UIstates">6.6.4. UI element states pseudo-classes</a>
+ <li class="tocline4"><a href="#structural-pseudos">6.6.5. Structural pseudo-classes</a>
+ <ul>
+ <li><a href="#root-pseudo">:root pseudo-class</a>
+ <li><a href="#nth-child-pseudo">:nth-child() pseudo-class</a>
+ <li><a href="#nth-last-child-pseudo">:nth-last-child()</a>
+ <li><a href="#nth-of-type-pseudo">:nth-of-type() pseudo-class</a>
+ <li><a href="#nth-last-of-type-pseudo">:nth-last-of-type()</a>
+ <li><a href="#first-child-pseudo">:first-child pseudo-class</a>
+ <li><a href="#last-child-pseudo">:last-child pseudo-class</a>
+ <li><a href="#first-of-type-pseudo">:first-of-type pseudo-class</a>
+ <li><a href="#last-of-type-pseudo">:last-of-type pseudo-class</a>
+ <li><a href="#only-child-pseudo">:only-child pseudo-class</a>
+ <li><a href="#only-of-type-pseudo">:only-of-type pseudo-class</a>
+ <li><a href="#empty-pseudo">:empty pseudo-class</a></li>
+ </ul>
+ <li class="tocline4"><a href="#negation">6.6.7. The negation pseudo-class</a></li>
+ </ul>
+ </li>
+ </ul>
+ <li><a href="#pseudo-elements">7. Pseudo-elements</a>
+ <ul>
+ <li><a href="#first-line">7.1. The ::first-line pseudo-element</a>
+ <li><a href="#first-letter">7.2. The ::first-letter pseudo-element</a>
+ <li><a href="#UIfragments">7.3. The ::selection pseudo-element</a>
+ <li><a href="#gen-content">7.4. The ::before and ::after pseudo-elements</a></li>
+ </ul>
+ <li class="tocline2"><a href="#combinators">8. Combinators</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#descendant-combinators">8.1. Descendant combinators</a>
+ <li class="tocline3"><a href="#child-combinators">8.2. Child combinators</a>
+ <li class="tocline3"><a href="#sibling-combinators">8.3. Sibling combinators</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#adjacent-sibling-combinators">8.3.1. Adjacent sibling combinator</a>
+ <li class="tocline4"><a href="#general-sibling-combinators">8.3.2. General sibling combinator</a></li>
+ </ul>
+ </li>
+ </ul>
+ <li class="tocline2"><a href="#specificity">9. Calculating a selector's specificity</a>
+ <li class="tocline2"><a href="#w3cselgrammar">10. The grammar of Selectors</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#grammar">10.1. Grammar</a>
+ <li class="tocline3"><a href="#lex">10.2. Lexical scanner</a></li>
+ </ul>
+ <li class="tocline2"><a href="#downlevel">11. Namespaces and down-level clients</a>
+ <li class="tocline2"><a href="#profiling">12. Profiles</a>
+ <li><a href="#Conformance">13. Conformance and requirements</a>
+ <li><a href="#Tests">14. Tests</a>
+ <li><a href="#ACKS">15. Acknowledgements</a>
+ <li class="tocline2"><a href="#references">16. References</a>
+ </ul>
+
+ </div>
+
+ <h2><a name=context>1. Introduction</a></h2>
+
+ <h3><a name=dependencies></a>1.1. Dependencies</h3>
+
+ <p>Some features of this specification are specific to CSS, or have
+ particular limitations or rules specific to CSS. In this
+ specification, these have been described in terms of CSS2.1. <a
+ href="#refsCSS21">[CSS21]</a></p>
+
+ <h3><a name=terminology></a>1.2. Terminology</h3>
+
+ <p>All of the text of this specification is normative except
+ examples, notes, and sections explicitly marked as
+ non-normative.</p>
+
+ <h3><a name=changesFromCSS2></a>1.3. Changes from CSS2</h3>
+
+ <p><em>This section is non-normative.</em></p>
+
+ <p>The main differences between the selectors in CSS2 and those in
+ Selectors are:
+
+ <ul>
+
+ <li>the list of basic definitions (selector, group of selectors,
+ simple selector, etc.) has been changed; in particular, what was
+ referred to in CSS2 as a simple selector is now called a sequence
+ of simple selectors, and the term "simple selector" is now used for
+ the components of this sequence</li>
+
+ <li>an optional namespace component is now allowed in type element
+ selectors, the universal selector and attribute selectors</li>
+
+ <li>a <a href="#general-sibling-combinators">new combinator</a> has been introduced</li>
+
+ <li>new simple selectors including substring matching attribute
+ selectors, and new pseudo-classes</li>
+
+ <li>new pseudo-elements, and introduction of the "::" convention
+ for pseudo-elements</li>
+
+ <li>the grammar has been rewritten</li>
+
+ <li>profiles to be added to specifications integrating Selectors
+ and defining the set of selectors which is actually supported by
+ each specification</li>
+
+ <li>Selectors are now a CSS3 Module and an independent
+ specification; other specifications can now refer to this document
+ independently of CSS</li>
+
+ <li>the specification now has its own test suite</li>
+
+ </ul>
+
+<h2><a name=selectors></a>2. Selectors</h2>
+
+<p><em>This section is non-normative, as it merely summarizes the
+following sections.</em></p>
+
+<p>A Selector represents a structure. This structure can be used as a
+condition (e.g. in a CSS rule) that determines which elements a
+selector matches in the document tree, or as a flat description of the
+HTML or XML fragment corresponding to that structure.</p>
+
+<p>Selectors may range from simple element names to rich contextual
+representations.</p>
+
+<p>The following table summarizes the Selector syntax:</p>
+
+<table class="selectorsReview">
+ <thead>
+ <tr>
+ <th class="pattern">Pattern</th>
+ <th class="meaning">Meaning</th>
+ <th class="described">Described in section</th>
+ <th class="origin">First defined in CSS level</th></tr>
+ <tbody>
+ <tr>
+ <td class="pattern">*</td>
+ <td class="meaning">any element</td>
+ <td class="described"><a
+ href="#universal-selector">Universal
+ selector</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E</td>
+ <td class="meaning">an element of type E</td>
+ <td class="described"><a
+ href="#type-selectors">Type selector</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E[foo]</td>
+ <td class="meaning">an E element with a "foo" attribute</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value is exactly
+ equal to "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo~="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value is a list of
+ space-separated values, one of which is exactly equal to "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo^="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value begins exactly
+ with the string "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[foo$="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value ends exactly
+ with the string "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[foo*="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value contains the
+ substring "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[hreflang|="en"]</td>
+ <td class="meaning">an E element whose "hreflang" attribute has a hyphen-separated
+ list of values beginning (from the left) with "en"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:root</td>
+ <td class="meaning">an E element, root of the document</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-child(n)</td>
+ <td class="meaning">an E element, the n-th child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-last-child(n)</td>
+ <td class="meaning">an E element, the n-th child of its parent, counting
+ from the last one</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-of-type(n)</td>
+ <td class="meaning">an E element, the n-th sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-last-of-type(n)</td>
+ <td class="meaning">an E element, the n-th sibling of its type, counting
+ from the last one</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:first-child</td>
+ <td class="meaning">an E element, first child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:last-child</td>
+ <td class="meaning">an E element, last child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:first-of-type</td>
+ <td class="meaning">an E element, first sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:last-of-type</td>
+ <td class="meaning">an E element, last sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:only-child</td>
+ <td class="meaning">an E element, only child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:only-of-type</td>
+ <td class="meaning">an E element, only sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:empty</td>
+ <td class="meaning">an E element that has no children (including text
+ nodes)</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:link<br>E:visited</td>
+ <td class="meaning">an E element being the source anchor of a hyperlink of
+ which the target is not yet visited (:link) or already visited
+ (:visited)</td>
+ <td class="described"><a
+ href="#link">The link
+ pseudo-classes</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E:active<br>E:hover<br>E:focus</td>
+ <td class="meaning">an E element during certain user actions</td>
+ <td class="described"><a
+ href="#useraction-pseudos">The user
+ action pseudo-classes</a></td>
+ <td class="origin">1 and 2</td></tr>
+ <tr>
+ <td class="pattern">E:target</td>
+ <td class="meaning">an E element being the target of the referring URI</td>
+ <td class="described"><a
+ href="#target-pseudo">The target
+ pseudo-class</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:lang(fr)</td>
+ <td class="meaning">an element of type E in language "fr" (the document
+ language specifies how language is determined)</td>
+ <td class="described"><a
+ href="#lang-pseudo">The :lang()
+ pseudo-class</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:enabled<br>E:disabled</td>
+ <td class="meaning">a user interface element E which is enabled or
+ disabled</td>
+ <td class="described"><a
+ href="#UIstates">The UI element states
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:checked<!--<br>E:indeterminate--></td>
+ <td class="meaning">a user interface element E which is checked<!-- or in an
+ indeterminate state--> (for instance a radio-button or checkbox)</td>
+ <td class="described"><a
+ href="#UIstates">The UI element states
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E::first-line</td>
+ <td class="meaning">the first formatted line of an E element</td>
+ <td class="described"><a
+ href="#first-line">The ::first-line
+ pseudo-element</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E::first-letter</td>
+ <td class="meaning">the first formatted letter of an E element</td>
+ <td class="described"><a
+ href="#first-letter">The ::first-letter
+ pseudo-element</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E::selection</td>
+ <td class="meaning">the portion of an E element that is currently
+ selected/highlighted by the user</td>
+ <td class="described"><a
+ href="#UIfragments">The UI element
+ fragments pseudo-elements</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E::before</td>
+ <td class="meaning">generated content before an E element</td>
+ <td class="described"><a
+ href="#gen-content">The ::before
+ pseudo-element</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E::after</td>
+ <td class="meaning">generated content after an E element</td>
+ <td class="described"><a
+ href="#gen-content">The ::after
+ pseudo-element</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E.warning</td>
+ <td class="meaning">an E element whose class is
+"warning" (the document language specifies how class is determined).</td>
+ <td class="described"><a
+ href="#class-html">Class
+ selectors</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E#myid</td>
+ <td class="meaning">an E element with ID equal to "myid".</td>
+ <td class="described"><a
+ href="#id-selectors">ID
+ selectors</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E:not(s)</td>
+ <td class="meaning">an E element that does not match simple selector s</td>
+ <td class="described"><a
+ href="#negation">Negation
+ pseudo-class</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E F</td>
+ <td class="meaning">an F element descendant of an E element</td>
+ <td class="described"><a
+ href="#descendant-combinators">Descendant
+ combinator</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E &gt; F</td>
+ <td class="meaning">an F element child of an E element</td>
+ <td class="described"><a
+ href="#child-combinators">Child
+ combinator</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E + F</td>
+ <td class="meaning">an F element immediately preceded by an E element</td>
+ <td class="described"><a
+ href="#adjacent-sibling-combinators">Adjacent sibling combinator</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E ~ F</td>
+ <td class="meaning">an F element preceded by an E element</td>
+ <td class="described"><a
+ href="#general-sibling-combinators">General sibling combinator</a></td>
+ <td class="origin">3</td></tr></tbody></table>
+
+<p>The meaning of each selector is derived from the table above by
+prepending "matches" to the contents of each cell in the "Meaning"
+column.</p>
+
+<h2><a name=casesens>3. Case sensitivity</a></h2>
+
+<p>The case sensitivity of document language element names, attribute
+names, and attribute values in selectors depends on the document
+language. For example, in HTML, element names are case-insensitive,
+but in XML, they are case-sensitive.</p>
+
+<h2><a name=selector-syntax>4. Selector syntax</a></h2>
+
+<p>A <dfn><a name=selector>selector</a></dfn> is a chain of one
+or more <a href="#sequence">sequences of simple selectors</a>
+separated by <a href="#combinators">combinators</a>.</p>
+
+<p>A <dfn><a name=sequence>sequence of simple selectors</a></dfn>
+is a chain of <a href="#simple-selectors-dfn">simple selectors</a>
+that are not separated by a <a href="#combinators">combinator</a>. It
+always begins with a <a href="#type-selectors">type selector</a> or a
+<a href="#universal-selector">universal selector</a>. No other type
+selector or universal selector is allowed in the sequence.</p>
+
+<p>A <dfn><a name=simple-selectors-dfn></a><a
+href="#simple-selectors">simple selector</a></dfn> is either a <a
+href="#type-selectors">type selector</a>, <a
+href="#universal-selector">universal selector</a>, <a
+href="#attribute-selectors">attribute selector</a>, <a
+href="#class-html">class selector</a>, <a
+href="#id-selectors">ID selector</a>, <a
+href="#content-selectors">content selector</a>, or <a
+href="#pseudo-classes">pseudo-class</a>. One <a
+href="#pseudo-elements">pseudo-element</a> may be appended to the last
+sequence of simple selectors.</p>
+
+<p><dfn>Combinators</dfn> are: white space, &quot;greater-than
+sign&quot; (U+003E, <code>&gt;</code>), &quot;plus sign&quot; (U+002B,
+<code>+</code>) and &quot;tilde&quot; (U+007E, <code>~</code>). White
+space may appear between a combinator and the simple selectors around
+it. <a name=whitespace></a>Only the characters "space" (U+0020), "tab"
+(U+0009), "line feed" (U+000A), "carriage return" (U+000D), and "form
+feed" (U+000C) can occur in white space. Other space-like characters,
+such as "em-space" (U+2003) and "ideographic space" (U+3000), are
+never part of white space.</p>
+
+<p>The elements of a document tree that are represented by a selector
+are the <dfn><a name=subject></a>subjects of the selector</dfn>. A
+selector consisting of a single sequence of simple selectors
+represents any element satisfying its requirements. Prepending another
+sequence of simple selectors and a combinator to a sequence imposes
+additional matching constraints, so the subjects of a selector are
+always a subset of the elements represented by the last sequence of
+simple selectors.</p>
+
+<p>An empty selector, containing no sequence of simple selectors and
+no pseudo-element, is an <a href="#Conformance">invalid
+selector</a>.</p>
+
+<h2><a name=grouping>5. Groups of selectors</a></h2>
+
+<p>When several selectors share the same declarations, they may be
+grouped into a comma-separated list. (A comma is U+002C.)</p>
+
+<div class="example">
+<p>CSS examples:</p>
+<p>In this example, we condense three rules with identical
+declarations into one. Thus,</p>
+<pre>h1 { font-family: sans-serif }
+h2 { font-family: sans-serif }
+h3 { font-family: sans-serif }</pre>
+<p>is equivalent to:</p>
+<pre>h1, h2, h3 { font-family: sans-serif }</pre>
+</div>
+
+<p><strong>Warning</strong>: the equivalence is true in this example
+because all the selectors are valid selectors. If just one of these
+selectors were invalid, the entire group of selectors would be
+invalid. This would invalidate the rule for all three heading
+elements, whereas in the former case only one of the three individual
+heading rules would be invalidated.</p>
+
+
+<h2><a name=simple-selectors>6. Simple selectors</a></h2>
+
+<h3><a name=type-selectors>6.1. Type selector</a></h3>
+
+<p>A <dfn>type selector</dfn> is the name of a document language
+element type. A type selector represents an instance of the element
+type in the document tree.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents an <code>h1</code> element in the document tree:</p>
+ <pre>h1</pre>
+</div>
+
+
+<h4><a name=typenmsp>6.1.1. Type selectors and namespaces</a></h4>
+
+<p>Type selectors allow an optional namespace (<a
+href="#refsXMLNAMES">[XMLNAMES]</a>) component. A namespace prefix
+that has been previously declared may be prepended to the element name
+separated by the namespace separator &quot;vertical bar&quot;
+(U+007C, <code>|</code>).</p>
+
+<p>The namespace component may be left empty to indicate that the
+selector is only to represent elements with no declared namespace.</p>
+
+<p>An asterisk may be used for the namespace prefix, indicating that
+the selector represents elements in any namespace (including elements
+with no namespace).</p>
+
+<p>Element type selectors that have no namespace component (no
+namespace separator), represent elements without regard to the
+element's namespace (equivalent to "<code>*|</code>") unless a default
+namespace has been declared. If a default namespace has been declared,
+the selector will represent only elements in the default
+namespace.</p>
+
+<p>A type selector containing a namespace prefix that has not been
+previously declared is an <a href="#Conformance">invalid</a> selector.
+The mechanism for declaring a namespace prefix is left up to the
+language implementing Selectors. In CSS, such a mechanism is defined
+in the General Syntax module.</p>
+
+<p>In a namespace-aware client, element type selectors will only match
+against the <a
+href="http://www.w3.org/TR/REC-xml-names/#NT-LocalPart">local part</a>
+of the element's <a
+href="http://www.w3.org/TR/REC-xml-names/#ns-qualnames">qualified
+name</a>. See <a href="#downlevel">below</a> for notes about matching
+behaviors in down-level clients.</p>
+
+<p>In summary:</p>
+
+<dl>
+ <dt><code>ns|E</code></dt>
+ <dd>elements with name E in namespace ns</dd>
+ <dt><code>*|E</code></dt>
+ <dd>elements with name E in any namespace, including those without any
+ declared namespace</dd>
+ <dt><code>|E</code></dt>
+ <dd>elements with name E without any declared namespace</dd>
+ <dt><code>E</code></dt>
+ <dd>if no default namespace has been specified, this is equivalent to *|E.
+ Otherwise it is equivalent to ns|E where ns is the default namespace.</dd>
+</dl>
+
+<div class="example">
+ <p>CSS examples:</p>
+
+ <pre>@namespace foo url(http://www.example.com);
+ foo|h1 { color: blue }
+ foo|* { color: yellow }
+ |h1 { color: red }
+ *|h1 { color: green }
+ h1 { color: green }</pre>
+
+ <p>The first rule will match only <code>h1</code> elements in the
+ "http://www.example.com" namespace.</p>
+
+ <p>The second rule will match all elements in the
+ "http://www.example.com" namespace.</p>
+
+ <p>The third rule will match only <code>h1</code> elements without
+ any declared namespace.</p>
+
+ <p>The fourth rule will match <code>h1</code> elements in any
+ namespace (including those without any declared namespace).</p>
+
+ <p>The last rule is equivalent to the fourth rule because no default
+ namespace has been defined.</p>
+
+</div>
+
+<h3><a name=universal-selector>6.2. Universal selector</a> </h3>
+
+<p>The <dfn>universal selector</dfn>, written &quot;asterisk&quot;
+(<code>*</code>), represents the qualified name of any element
+type. It represents any single element in the document tree in any
+namespace (including those without any declared namespace) if no
+default namespace has been specified. If a default namespace has been
+specified, see <a href="#univnmsp">Universal selector and
+Namespaces</a> below.</p>
+
+<p>If the universal selector is not the only component of a sequence
+of simple selectors, the <code>*</code> may be omitted.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <ul>
+ <li><code>*[hreflang|=en]</code> and <code>[hreflang|=en]</code> are equivalent,</li>
+ <li><code>*.warning</code> and <code>.warning</code> are equivalent,</li>
+ <li><code>*#myid</code> and <code>#myid</code> are equivalent.</li>
+ </ul>
+</div>
+
+<p class="note"><strong>Note:</strong> it is recommended that the
+<code>*</code>, representing the universal selector, not be
+omitted.</p>
+
+<h4><a name=univnmsp>6.2.1. Universal selector and namespaces</a></h4>
+
+<p>The universal selector allows an optional namespace component. It
+is used as follows:</p>
+
+<dl>
+ <dt><code>ns|*</code></dt>
+ <dd>all elements in namespace ns</dd>
+ <dt><code>*|*</code></dt>
+ <dd>all elements</dd>
+ <dt><code>|*</code></dt>
+ <dd>all elements without any declared namespace</dd>
+ <dt><code>*</code></dt>
+ <dd>if no default namespace has been specified, this is equivalent to *|*.
+ Otherwise it is equivalent to ns|* where ns is the default namespace.</dd>
+</dl>
+
+<p>A universal selector containing a namespace prefix that has not
+been previously declared is an <a href="#Conformance">invalid</a>
+selector. The mechanism for declaring a namespace prefix is left up
+to the language implementing Selectors. In CSS, such a mechanism is
+defined in the General Syntax module.</p>
+
+
+<h3><a name=attribute-selectors>6.3. Attribute selectors</a></h3>
+
+<p>Selectors allow the representation of an element's attributes. When
+a selector is used as an expression to match against an element,
+attribute selectors must be considered to match an element if that
+element has an attribute that matches the attribute represented by the
+attribute selector.</p>
+
+<h4><a name=attribute-representation>6.3.1. Attribute presence and values
+selectors</a></h4>
+
+<p>CSS2 introduced four attribute selectors:</p>
+
+<dl>
+ <dt><code>[att]</code>
+ <dd>Represents an element with the <code>att</code> attribute, whatever the value of
+ the attribute.</dd>
+ <dt><code>[att=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value is exactly
+ "val".</dd>
+ <dt><code>[att~=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value is a <a
+ href="#whitespace">whitespace</a>-separated list of words, one of
+ which is exactly "val". If "val" contains whitespace, it will never
+ represent anything (since the words are <em>separated</em> by
+ spaces).</dd>
+ <dt><code>[att|=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute, its value either
+ being exactly "val" or beginning with "val" immediately followed by
+ "-" (U+002D). This is primarily intended to allow language subcode
+ matches (e.g., the <code>hreflang</code> attribute on the
+ <code>link</code> element in HTML) as described in RFC 3066 (<a
+ href="#refsRFC3066">[RFC3066]</a>). For <code>lang</code> (or
+ <code>xml:lang</code>) language subcode matching, please see <a
+ href="#lang-pseudo">the <code>:lang</code> pseudo-class</a>.</dd>
+</dl>
+
+<p>Attribute values must be identifiers or strings. The
+case-sensitivity of attribute names and values in selectors depends on
+the document language.</p>
+
+<div class="example">
+
+ <p>Examples:</p>
+
+ <p>The following attribute selector represents an <code>h1</code>
+ element that carries the <code>title</code> attribute, whatever its
+ value:</p>
+
+ <pre>h1[title]</pre>
+
+ <p>In the following example, the selector represents a
+ <code>span</code> element whose <code>class</code> attribute has
+ exactly the value "example":</p>
+
+ <pre>span[class="example"]</pre>
+
+ <p>Multiple attribute selectors can be used to represent several
+ attributes of an element, or several conditions on the same
+ attribute. Here, the selector represents a <code>span</code> element
+ whose <code>hello</code> attribute has exactly the value "Cleveland"
+ and whose <code>goodbye</code> attribute has exactly the value
+ "Columbus":</p>
+
+ <pre>span[hello="Cleveland"][goodbye="Columbus"]</pre>
+
+ <p>The following selectors illustrate the differences between "="
+ and "~=". The first selector will represent, for example, the value
+ "copyright copyleft copyeditor" on a <code>rel</code> attribute. The
+ second selector will only represent an <code>a</code> element with
+ an <code>href</code> attribute having the exact value
+ "http://www.w3.org/".</p>
+
+ <pre>a[rel~="copyright"]
+a[href="http://www.w3.org/"]</pre>
+
+ <p>The following selector represents a <code>link</code> element
+ whose <code>hreflang</code> attribute is exactly "fr".</p>
+
+ <pre>link[hreflang=fr]</pre>
+
+ <p>The following selector represents a <code>link</code> element for
+ which the values of the <code>hreflang</code> attribute begins with
+ "en", including "en", "en-US", and "en-cockney":</p>
+
+ <pre>link[hreflang|="en"]</pre>
+
+ <p>Similarly, the following selectors represents a
+ <code>DIALOGUE</code> element whenever it has one of two different
+ values for an attribute <code>character</code>:</p>
+
+ <pre>DIALOGUE[character=romeo]
+DIALOGUE[character=juliet]</pre>
+
+</div>
+
+<h4><a name=attribute-substrings></a>6.3.2. Substring matching attribute
+selectors</h4>
+
+<p>Three additional attribute selectors are provided for matching
+substrings in the value of an attribute:</p>
+
+<dl>
+ <dt><code>[att^=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value begins
+ with the prefix "val".</dd>
+ <dt><code>[att$=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute whose value ends with
+ the suffix "val".</dd>
+ <dt><code>[att*=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute whose value contains
+ at least one instance of the substring "val".</dd>
+</dl>
+
+<p>Attribute values must be identifiers or strings. The
+case-sensitivity of attribute names in selectors depends on the
+document language.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents an HTML <code>object</code>, referencing an
+ image:</p>
+ <pre>object[type^="image/"]</pre>
+ <p>The following selector represents an HTML anchor <code>a</code> with an
+ <code>href</code> attribute whose value ends with ".html".</p>
+ <pre>a[href$=".html"]</pre>
+ <p>The following selector represents an HTML paragraph with a <code>title</code>
+ attribute whose value contains the substring "hello"</p>
+ <pre>p[title*="hello"]</pre>
+</div>
+
+<h4><a name=attrnmsp>6.3.3. Attribute selectors and namespaces</a></h4>
+
+<p>Attribute selectors allow an optional namespace component to the
+attribute name. A namespace prefix that has been previously declared
+may be prepended to the attribute name separated by the namespace
+separator &quot;vertical bar&quot; (<code>|</code>). In keeping with
+the Namespaces in the XML recommendation, default namespaces do not
+apply to attributes, therefore attribute selectors without a namespace
+component apply only to attributes that have no declared namespace
+(equivalent to "<code>|attr</code>"). An asterisk may be used for the
+namespace prefix indicating that the selector is to match all
+attribute names without regard to the attribute's namespace.
+
+<p>An attribute selector with an attribute name containing a namespace
+prefix that has not been previously declared is an <a
+href="#Conformance">invalid</a> selector. The mechanism for declaring
+a namespace prefix is left up to the language implementing Selectors.
+In CSS, such a mechanism is defined in the General Syntax module.
+
+<div class="example">
+ <p>CSS examples:</p>
+ <pre>@namespace foo "http://www.example.com";
+[foo|att=val] { color: blue }
+[*|att] { color: yellow }
+[|att] { color: green }
+[att] { color: green }</pre>
+
+ <p>The first rule will match only elements with the attribute
+ <code>att</code> in the "http://www.example.com" namespace with the
+ value "val".</p>
+
+ <p>The second rule will match only elements with the attribute
+ <code>att</code> regardless of the namespace of the attribute
+ (including no declared namespace).</p>
+
+ <p>The last two rules are equivalent and will match only elements
+ with the attribute <code>att</code> where the attribute is not
+ declared to be in a namespace.</p>
+
+</div>
+
+<h4><a name=def-values>6.3.4. Default attribute values in DTDs</a></h4>
+
+<p>Attribute selectors represent explicitly set attribute values in
+the document tree. Default attribute values may be defined in a DTD or
+elsewhere, but cannot always be selected by attribute
+selectors. Selectors should be designed so that they work even if the
+default values are not included in the document tree.</p>
+
+<p>More precisely, a UA is <em>not</em> required to read an "external
+subset" of the DTD but <em>is</em> required to look for default
+attribute values in the document's "internal subset." (See <a
+href="#refsXML10">[XML10]</a> for definitions of these subsets.)</p>
+
+<p>A UA that recognizes an XML namespace <a
+href="#refsXMLNAMES">[XMLNAMES]</a> is not required to use its
+knowledge of that namespace to treat default attribute values as if
+they were present in the document. (For example, an XHTML UA is not
+required to use its built-in knowledge of the XHTML DTD.)</p>
+
+<p class="note"><strong>Note:</strong> Typically, implementations
+choose to ignore external subsets.</p>
+
+<div class="example">
+<p>Example:</p>
+
+<p>Consider an element EXAMPLE with an attribute "notation" that has a
+default value of "decimal". The DTD fragment might be</p>
+
+<pre class="dtd-example">&lt;!ATTLIST EXAMPLE notation (decimal,octal) "decimal"></pre>
+
+<p>If the style sheet contains the rules</p>
+
+<pre>EXAMPLE[notation=decimal] { /*... default property settings ...*/ }
+EXAMPLE[notation=octal] { /*... other settings...*/ }</pre>
+
+<p>the first rule will not match elements whose "notation" attribute
+is set by default, i.e. not set explicitly. To catch all cases, the
+attribute selector for the default value must be dropped:</p>
+
+<pre>EXAMPLE { /*... default property settings ...*/ }
+EXAMPLE[notation=octal] { /*... other settings...*/ }</pre>
+
+<p>Here, because the selector <code>EXAMPLE[notation=octal]</code> is
+more specific than the tag
+selector alone, the style declarations in the second rule will override
+those in the first for elements that have a "notation" attribute value
+of "octal". Care has to be taken that all property declarations that
+are to apply only to the default case are overridden in the non-default
+cases' style rules.</p>
+
+</div>
+
+<h3><a name=class-html>6.4. Class selectors</a></h3>
+
+<p>Working with HTML, authors may use the period (U+002E,
+<code>.</code>) notation as an alternative to the <code>~=</code>
+notation when representing the <code>class</code> attribute. Thus, for
+HTML, <code>div.value</code> and <code>div[class~=value]</code> have
+the same meaning. The attribute value must immediately follow the
+&quot;period&quot; (<code>.</code>).</p>
+
+<p>UAs may apply selectors using the period (.) notation in XML
+documents if the UA has namespace-specific knowledge that allows it to
+determine which attribute is the &quot;class&quot; attribute for the
+respective namespace. One such example of namespace-specific knowledge
+is the prose in the specification for a particular namespace (e.g. SVG
+1.0 <a href="#refsSVG">[SVG]</a> describes the <a
+href="http://www.w3.org/TR/2001/PR-SVG-20010719/styling.html#ClassAttribute">SVG
+&quot;class&quot; attribute</a> and how a UA should interpret it, and
+similarly MathML 1.01 <a href="#refsMATH">[MATH]</a> describes the <a
+href="http://www.w3.org/1999/07/REC-MathML-19990707/chapter2.html#sec2.3.4">MathML
+&quot;class&quot; attribute</a>.)</p>
+
+<div class="example">
+ <p>CSS examples:</p>
+
+ <p>We can assign style information to all elements with
+ <code>class~="pastoral"</code> as follows:</p>
+
+ <pre>*.pastoral { color: green } /* all elements with class~=pastoral */</pre>
+
+ <p>or just</p>
+
+ <pre>.pastoral { color: green } /* all elements with class~=pastoral */</pre>
+
+ <p>The following assigns style only to H1 elements with
+ <code>class~="pastoral"</code>:</p>
+
+ <pre>H1.pastoral { color: green } /* H1 elements with class~=pastoral */</pre>
+
+ <p>Given these rules, the first H1 instance below would not have
+ green text, while the second would:</p>
+
+ <pre>&lt;H1&gt;Not green&lt;/H1&gt;
+&lt;H1 class="pastoral"&gt;Very green&lt;/H1&gt;</pre>
+
+</div>
+
+<p>To represent a subset of "class" values, each value must be preceded
+by a ".", in any order.</P>
+
+<div class="example">
+
+ <p>CSS example:</p>
+
+ <p>The following rule matches any P element whose "class" attribute
+ has been assigned a list of <a
+ href="#whitespace">whitespace</a>-separated values that includes
+ "pastoral" and "marine":</p>
+
+ <pre>p.pastoral.marine { color: green }</pre>
+
+ <p>This rule matches when <code>class="pastoral blue aqua
+ marine"</code> but does not match for <code>class="pastoral
+ blue"</code>.</p>
+
+</div>
+
+<p class="note"><strong>Note:</strong> Because CSS gives considerable
+power to the "class" attribute, authors could conceivably design their
+own "document language" based on elements with almost no associated
+presentation (such as DIV and SPAN in HTML) and assigning style
+information through the "class" attribute. Authors should avoid this
+practice since the structural elements of a document language often
+have recognized and accepted meanings and author-defined classes may
+not.</p>
+
+<p class="note"><strong>Note:</strong> If an element has multiple
+class attributes, their values must be concatenated with spaces
+between the values before searching for the class. As of this time the
+working group is not aware of any manner in which this situation can
+be reached, however, so this behavior is explicitly non-normative in
+this specification.</p>
+
+<h3><a name=id-selectors>6.5. ID selectors</a></h3>
+
+<p>Document languages may contain attributes that are declared to be
+of type ID. What makes attributes of type ID special is that no two
+such attributes can have the same value in a document, regardless of
+the type of the elements that carry them; whatever the document
+language, an ID typed attribute can be used to uniquely identify its
+element. In HTML all ID attributes are named "id"; XML applications
+may name ID attributes differently, but the same restriction
+applies.</p>
+
+<p>An ID-typed attribute of a document language allows authors to
+assign an identifier to one element instance in the document tree. W3C
+ID selectors represent an element instance based on its identifier. An
+ID selector contains a &quot;number sign&quot; (U+0023,
+<code>#</code>) immediately followed by the ID value, which must be an
+identifier.</p>
+
+<p>Selectors does not specify how a UA knows the ID-typed attribute of
+an element. The UA may, e.g., read a document's DTD, have the
+information hard-coded or ask the user.
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following ID selector represents an <code>h1</code> element
+ whose ID-typed attribute has the value "chapter1":</p>
+ <pre>h1#chapter1</pre>
+ <p>The following ID selector represents any element whose ID-typed
+ attribute has the value "chapter1":</p>
+ <pre>#chapter1</pre>
+ <p>The following selector represents any element whose ID-typed
+ attribute has the value "z98y".</p>
+ <pre>*#z98y</pre>
+</div>
+
+<p class="note"><strong>Note.</strong> In XML 1.0 <a
+href="#refsXML10">[XML10]</a>, the information about which attribute
+contains an element's IDs is contained in a DTD or a schema. When
+parsing XML, UAs do not always read the DTD, and thus may not know
+what the ID of an element is (though a UA may have namespace-specific
+knowledge that allows it to determine which attribute is the ID
+attribute for that namespace). If a style sheet designer knows or
+suspects that a UA may not know what the ID of an element is, he
+should use normal attribute selectors instead:
+<code>[name=p371]</code> instead of <code>#p371</code>. Elements in
+XML 1.0 documents without a DTD do not have IDs at all.</p>
+
+<p>If an element has multiple ID attributes, all of them must be
+treated as IDs for that element for the purposes of the ID
+selector. Such a situation could be reached using mixtures of xml:id,
+DOM3 Core, XML DTDs, and namespace-specific knowledge.</p>
+
+<h3><a name=pseudo-classes>6.6. Pseudo-classes</a></h3>
+
+<p>The pseudo-class concept is introduced to permit selection based on
+information that lies outside of the document tree or that cannot be
+expressed using the other simple selectors.</p>
+
+<p>A pseudo-class always consists of a &quot;colon&quot;
+(<code>:</code>) followed by the name of the pseudo-class and
+optionally by a value between parentheses.</p>
+
+<p>Pseudo-classes are allowed in all sequences of simple selectors
+contained in a selector. Pseudo-classes are allowed anywhere in
+sequences of simple selectors, after the leading type selector or
+universal selector (possibly omitted). Pseudo-class names are
+case-insensitive. Some pseudo-classes are mutually exclusive, while
+others can be applied simultaneously to the same
+element. Pseudo-classes may be dynamic, in the sense that an element
+may acquire or lose a pseudo-class while a user interacts with the
+document.</p>
+
+
+<h4><a name=dynamic-pseudos>6.6.1. Dynamic pseudo-classes</a></h4>
+
+<p>Dynamic pseudo-classes classify elements on characteristics other
+than their name, attributes, or content, in principle characteristics
+that cannot be deduced from the document tree.</p>
+
+<p>Dynamic pseudo-classes do not appear in the document source or
+document tree.</p>
+
+
+<h5>The <a name=link>link pseudo-classes: :link and :visited</a></h5>
+
+<p>User agents commonly display unvisited links differently from
+previously visited ones. Selectors
+provides the pseudo-classes <code>:link</code> and
+<code>:visited</code> to distinguish them:</p>
+
+<ul>
+ <li>The <code>:link</code> pseudo-class applies to links that have
+ not yet been visited.</li>
+ <li>The <code>:visited</code> pseudo-class applies once the link has
+ been visited by the user. </li>
+</ul>
+
+<p>After some amount of time, user agents may choose to return a
+visited link to the (unvisited) ':link' state.</p>
+
+<p>The two states are mutually exclusive.</p>
+
+<div class="example">
+
+ <p>Example:</p>
+
+ <p>The following selector represents links carrying class
+ <code>external</code> and already visited:</p>
+
+ <pre>a.external:visited</pre>
+
+</div>
+
+<p class="note"><strong>Note:</strong> It is possible for style sheet
+authors to abuse the :link and :visited pseudo-classes to determine
+which sites a user has visited without the user's consent.
+
+<p>UAs may therefore treat all links as unvisited links, or implement
+other measures to preserve the user's privacy while rendering visited
+and unvisited links differently.</p>
+
+<h5>The <a name=useraction-pseudos>user action pseudo-classes
+:hover, :active, and :focus</a></h5>
+
+<p>Interactive user agents sometimes change the rendering in response
+to user actions. Selectors provides
+three pseudo-classes for the selection of an element the user is
+acting on.</p>
+
+<ul>
+
+ <li>The <code>:hover</code> pseudo-class applies while the user
+ designates an element with a pointing device, but does not activate
+ it. For example, a visual user agent could apply this pseudo-class
+ when the cursor (mouse pointer) hovers over a box generated by the
+ element. User agents not that do not support <a
+ href="http://www.w3.org/TR/REC-CSS2/media.html#interactive-media-group">interactive
+ media</a> do not have to support this pseudo-class. Some conforming
+ user agents that support <a
+ href="http://www.w3.org/TR/REC-CSS2/media.html#interactive-media-group">interactive
+ media</a> may not be able to support this pseudo-class (e.g., a pen
+ device that does not detect hovering).</li>
+
+ <li>The <code>:active</code> pseudo-class applies while an element
+ is being activated by the user. For example, between the times the
+ user presses the mouse button and releases it.</li>
+
+ <li>The <code>:focus</code> pseudo-class applies while an element
+ has the focus (accepts keyboard or mouse events, or other forms of
+ input). </li>
+
+</ul>
+
+<p>There may be document language or implementation specific limits on
+which elements can become <code>:active</code> or acquire
+<code>:focus</code>.</p>
+
+<p>These pseudo-classes are not mutually exclusive. An element may
+match several pseudo-classes at the same time.</p>
+
+<p>Selectors doesn't define if the parent of an element that is
+':active' or ':hover' is also in that state.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <pre>a:link /* unvisited links */
+a:visited /* visited links */
+a:hover /* user hovers */
+a:active /* active links */</pre>
+ <p>An example of combining dynamic pseudo-classes:</p>
+ <pre>a:focus
+a:focus:hover</pre>
+ <p>The last selector matches <code>a</code> elements that are in
+ the pseudo-class :focus and in the pseudo-class :hover.</p>
+</div>
+
+<p class="note"><strong>Note:</strong> An element can be both ':visited'
+and ':active' (or ':link' and ':active').</p>
+
+<h4><a name=target-pseudo>6.6.2. The target pseudo-class :target</a></h4>
+
+<p>Some URIs refer to a location within a resource. This kind of URI
+ends with a &quot;number sign&quot; (#) followed by an anchor
+identifier (called the fragment identifier).</p>
+
+<p>URIs with fragment identifiers link to a certain element within the
+document, known as the target element. For instance, here is a URI
+pointing to an anchor named <code>section_2</code> in an HTML
+document:</p>
+
+<pre>http://example.com/html/top.html#section_2</pre>
+
+<p>A target element can be represented by the <code>:target</code>
+pseudo-class. If the document's URI has no fragment identifier, then
+the document has no target element.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <pre>p.note:target</pre>
+ <p>This selector represents a <code>p</code> element of class
+ <code>note</code> that is the target element of the referring
+ URI.</p>
+</div>
+
+<div class="example">
+ <p>CSS example:</p>
+ <p>Here, the <code>:target</code> pseudo-class is used to make the
+ target element red and place an image before it, if there is one:</p>
+ <pre>*:target { color : red }
+*:target::before { content : url(target.png) }</pre>
+</div>
+
+<h4><a name=lang-pseudo>6.6.3. The language pseudo-class :lang</a></h4>
+
+<p>If the document language specifies how the human language of an
+element is determined, it is possible to write selectors that
+represent an element based on its language. For example, in HTML <a
+href="#refsHTML4">[HTML4]</a>, the language is determined by a
+combination of the <code>lang</code> attribute, the <code>meta</code>
+element, and possibly by information from the protocol (such as HTTP
+headers). XML uses an attribute called <code>xml:lang</code>, and
+there may be other document language-specific methods for determining
+the language.</p>
+
+<p>The pseudo-class <code>:lang(C)</code> represents an element that
+is in language C. Whether an element is represented by a
+<code>:lang()</code> selector is based solely on the identifier C
+being either equal to, or a hyphen-separated substring of, the
+element's language value, in the same way as if performed by the <a
+href="#attribute-representation">'|='</a> operator in attribute
+selectors. The identifier C does not have to be a valid language
+name.</p>
+
+<p>C must not be empty. (If it is, the selector is invalid.)</p>
+
+<p class="note"><strong>Note:</strong> It is recommended that
+documents and protocols indicate language using codes from RFC 3066 <a
+href="#refsRFC3066">[RFC3066]</a> or its successor, and by means of
+"xml:lang" attributes in the case of XML-based documents <a
+href="#refsXML10">[XML10]</a>. See <a
+href="http://www.w3.org/International/questions/qa-lang-2or3.html">
+"FAQ: Two-letter or three-letter language codes."</a></p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The two following selectors represent an HTML document that is in
+ Belgian, French, or German. The two next selectors represent
+ <code>q</code> quotations in an arbitrary element in Belgian, French,
+ or German.</p>
+ <pre>html:lang(fr-be)
+html:lang(de)
+:lang(fr-be) &gt; q
+:lang(de) &gt; q</pre>
+</div>
+
+<h4><a name=UIstates>6.6.4. The UI element states pseudo-classes</a></h4>
+
+<h5><a name=enableddisabled>The :enabled and :disabled pseudo-classes</a></h5>
+
+<p>The <code>:enabled</code> pseudo-class allows authors to customize
+the look of user interface elements that are enabled &mdash; which the
+user can select or activate in some fashion (e.g. clicking on a button
+with a mouse). There is a need for such a pseudo-class because there
+is no way to programmatically specify the default appearance of say,
+an enabled <code>input</code> element without also specifying what it
+would look like when it was disabled.</p>
+
+<p>Similar to <code>:enabled</code>, <code>:disabled</code> allows the
+author to specify precisely how a disabled or inactive user interface
+element should look.</p>
+
+<p>Most elements will be neither enabled nor disabled. An element is
+enabled if the user can either activate it or transfer the focus to
+it. An element is disabled if it could be enabled, but the user cannot
+presently activate it or transfer focus to it.</p>
+
+
+<h5><a name=checked>The :checked pseudo-class</a></h5>
+
+<p>Radio and checkbox elements can be toggled by the user. Some menu
+items are "checked" when the user selects them. When such elements are
+toggled "on" the <code>:checked</code> pseudo-class applies. The
+<code>:checked</code> pseudo-class initially applies to such elements
+that have the HTML4 <code>selected</code> and <code>checked</code>
+attributes as described in <a
+href="http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.2.1">Section
+17.2.1 of HTML4</a>, but of course the user can toggle "off" such
+elements in which case the <code>:checked</code> pseudo-class would no
+longer apply. While the <code>:checked</code> pseudo-class is dynamic
+in nature, and is altered by user action, since it can also be based
+on the presence of the semantic HTML4 <code>selected</code> and
+<code>checked</code> attributes, it applies to all media.
+
+
+<h5><a name=indeterminate>The :indeterminate pseudo-class</a></h5>
+
+<div class="note">
+
+<p>Radio and checkbox elements can be toggled by the user, but are
+sometimes in an indeterminate state, neither checked nor unchecked.
+This can be due to an element attribute, or DOM manipulation.</p>
+
+<p>A future version of this specification may introduce an
+<code>:indeterminate</code> pseudo-class that applies to such elements.
+<!--While the <code>:indeterminate</code> pseudo-class is dynamic in
+nature, and is altered by user action, since it can also be based on
+the presence of an element attribute, it applies to all media.</p>
+
+<p>Components of a radio-group initialized with no pre-selected choice
+are an example of :indeterminate state.--></p>
+
+</div>
+
+
+<h4><a name=structural-pseudos>6.6.5. Structural pseudo-classes</a></h4>
+
+<p>Selectors introduces the concept of <dfn>structural
+pseudo-classes</dfn> to permit selection based on extra information that lies in
+the document tree but cannot be represented by other simple selectors or
+combinators.
+
+<p>Note that standalone pieces of PCDATA (text nodes in the DOM) are
+not counted when calculating the position of an element in the list of
+children of its parent. When calculating the position of an element in
+the list of children of its parent, the index numbering starts at 1.
+
+
+<h5><a name=root-pseudo>:root pseudo-class</a></h5>
+
+<p>The <code>:root</code> pseudo-class represents an element that is
+the root of the document. In HTML 4, this is always the
+<code>HTML</code> element.
+
+
+<h5><a name=nth-child-pseudo>:nth-child() pseudo-class</a></h5>
+
+<p>The
+<code>:nth-child(<var>a</var><code>n</code>+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings
+<strong>before</strong> it in the document tree, for a given positive
+integer or zero value of <code>n</code>, and has a parent element. In
+other words, this matches the <var>b</var>th child of an element after
+all the children have been split into groups of <var>a</var> elements
+each. For example, this allows the selectors to address every other
+row in a table, and could be used to alternate the color
+of paragraph text in a cycle of four. The <var>a</var> and
+<var>b</var> values must be zero, negative integers or positive
+integers. The index of the first child of an element is 1.
+
+<p>In addition to this, <code>:nth-child()</code> can take
+'<code>odd</code>' and '<code>even</code>' as arguments instead.
+'<code>odd</code>' has the same signification as <code>2n+1</code>,
+and '<code>even</code>' has the same signification as <code>2n</code>.
+
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-child(2n+1) /* represents every odd row of an HTML table */
+tr:nth-child(odd) /* same */
+tr:nth-child(2n) /* represents every even row of an HTML table */
+tr:nth-child(even) /* same */
+
+/* Alternate paragraph colours in CSS */
+p:nth-child(4n+1) { color: navy; }
+p:nth-child(4n+2) { color: green; }
+p:nth-child(4n+3) { color: maroon; }
+p:nth-child(4n+4) { color: purple; }</pre>
+</div>
+
+<p>When <var>a</var>=0, no repeating is used, so for example
+<code>:nth-child(0n+5)</code> matches only the fifth child. When
+<var>a</var>=0, the <var>a</var><code>n</code> part need not be
+included, so the syntax simplifies to
+<code>:nth-child(<var>b</var>)</code> and the last example simplifies
+to <code>:nth-child(5)</code>.
+
+<div class="example">
+<p>Examples:</p>
+<pre>foo:nth-child(0n+1) /* represents an element foo, first child of its parent element */
+foo:nth-child(1) /* same */</pre>
+</div>
+
+<p>When <var>a</var>=1, the number may be omitted from the rule.
+
+<div class="example">
+<p>Examples:</p>
+<p>The following selectors are therefore equivalent:</p>
+<pre>bar:nth-child(1n+0) /* represents all bar elements, specificity (0,1,1) */
+bar:nth-child(n+0) /* same */
+bar:nth-child(n) /* same */
+bar /* same but lower specificity (0,0,1) */</pre>
+</div>
+
+<p>If <var>b</var>=0, then every <var>a</var>th element is picked. In
+such a case, the <var>b</var> part may be omitted.
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-child(2n+0) /* represents every even row of an HTML table */
+tr:nth-child(2n) /* same */</pre>
+</div>
+
+<p>If both <var>a</var> and <var>b</var> are equal to zero, the
+pseudo-class represents no element in the document tree.</p>
+
+<p>The value <var>a</var> can be negative, but only the positive
+values of <var>a</var><code>n</code>+<var>b</var>, for
+<code>n</code>&ge;0, may represent an element in the document
+tree.</p>
+
+<div class="example">
+<p>Example:</p>
+<pre>html|tr:nth-child(-n+6) /* represents the 6 first rows of XHTML tables */</pre>
+</div>
+
+<p>When the value <var>b</var> is negative, the "+" character in the
+expression must be removed (it is effectively replaced by the "-"
+character indicating the negative value of <var>b</var>).</p>
+
+<div class="example">
+<p>Examples:</p>
+<pre>:nth-child(10n-1) /* represents the 9th, 19th, 29th, etc, element */
+:nth-child(10n+9) /* Same */
+:nth-child(10n+-1) /* Syntactically invalid, and would be ignored */</pre>
+</div>
+
+
+<h5><a name=nth-last-child-pseudo>:nth-last-child() pseudo-class</a></h5>
+
+<p>The <code>:nth-last-child(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings
+<strong>after</strong> it in the document tree, for a given positive
+integer or zero value of <code>n</code>, and has a parent element. See
+<code>:nth-child()</code> pseudo-class for the syntax of its argument.
+It also accepts the '<code>even</code>' and '<code>odd</code>' values
+as arguments.
+
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-last-child(-n+2) /* represents the two last rows of an HTML table */
+
+foo:nth-last-child(odd) /* represents all odd foo elements in their parent element,
+ counting from the last one */</pre>
+</div>
+
+
+<h5><a name=nth-of-type-pseudo>:nth-of-type() pseudo-class</a></h5>
+
+<p>The <code>:nth-of-type(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings with the same
+element name <strong>before</strong> it in the document tree, for a
+given zero or positive integer value of <code>n</code>, and has a
+parent element. In other words, this matches the <var>b</var>th child
+of that type after all the children of that type have been split into
+groups of a elements each. See <code>:nth-child()</code> pseudo-class
+for the syntax of its argument. It also accepts the
+'<code>even</code>' and '<code>odd</code>' values.
+
+
+<div class="example">
+<p>CSS example:</p>
+<p>This allows an author to alternate the position of floated images:</p>
+<pre>img:nth-of-type(2n+1) { float: right; }
+img:nth-of-type(2n) { float: left; }</pre>
+</div>
+
+
+<h5><a name=nth-last-of-type-pseudo>:nth-last-of-type() pseudo-class</a></h5>
+
+<p>The <code>:nth-last-of-type(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings with the same
+element name <strong>after</strong> it in the document tree, for a
+given zero or positive integer value of <code>n</code>, and has a
+parent element. See <code>:nth-child()</code> pseudo-class for the
+syntax of its argument. It also accepts the '<code>even</code>' and '<code>odd</code>' values.
+
+
+<div class="example">
+ <p>Example:</p>
+ <p>To represent all <code>h2</code> children of an XHTML
+ <code>body</code> except the first and last, one could use the
+ following selector:</p>
+ <pre>body &gt; h2:nth-of-type(n+2):nth-last-of-type(n+2)</pre>
+ <p>In this case, one could also use <code>:not()</code>, although the
+ selector ends up being just as long:</p>
+ <pre>body &gt; h2:not(:first-of-type):not(:last-of-type)</pre>
+</div>
+
+
+<h5><a name=first-child-pseudo>:first-child pseudo-class</a></h5>
+
+<p>Same as <code>:nth-child(1)</code>. The <code>:first-child</code> pseudo-class
+represents an element that is the first child of some other element.
+
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element that is
+ the first child of a <code>div</code> element:</p>
+ <pre>div &gt; p:first-child</pre>
+ <p>This selector can represent the <code>p</code> inside the
+ <code>div</code> of the following fragment:</p>
+ <pre>&lt;p&gt; The last P before the note.&lt;/p&gt;
+&lt;div class="note"&gt;
+ &lt;p&gt; The first P inside the note.&lt;/p&gt;
+&lt;/div&gt;</pre>but cannot represent the second <code>p</code> in the following
+fragment:
+ <pre>&lt;p&gt; The last P before the note.&lt;/p&gt;
+&lt;div class="note"&gt;
+ &lt;h2&gt; Note &lt;/h2&gt;
+ &lt;p&gt; The first P inside the note.&lt;/p&gt;
+&lt;/div&gt;</pre>
+ <p>The following two selectors are usually equivalent:</p>
+ <pre>* &gt; a:first-child /* a is first child of any element */
+a:first-child /* Same (assuming a is not the root element) */</pre>
+</div>
+
+<h5><a name=last-child-pseudo>:last-child pseudo-class</a></h5>
+
+<p>Same as <code>:nth-last-child(1)</code>. The <code>:last-child</code> pseudo-class
+represents an element that is the last child of some other element.
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents a list item <code>li</code> that
+ is the last child of an ordered list <code>ol</code>.
+ <pre>ol &gt; li:last-child</pre>
+</div>
+
+<h5><a name=first-of-type-pseudo>:first-of-type pseudo-class</a></h5>
+
+<p>Same as <code>:nth-of-type(1)</code>. The <code>:first-of-type</code> pseudo-class
+represents an element that is the first sibling of its type in the list of
+children of its parent element.
+
+<div class="example">
+<p>Example:</p>
+<p>The following selector represents a definition title
+<code>dt</code> inside a definition list <code>dl</code>, this
+<code>dt</code> being the first of its type in the list of children of
+its parent element.</p>
+<pre>dl dt:first-of-type</pre>
+<p>It is a valid description for the first two <code>dt</code>
+elements in the following example but not for the third one:</p>
+<pre>&lt;dl&gt;
+ &lt;dt&gt;gigogne&lt;/dt&gt;
+ &lt;dd&gt;
+ &lt;dl&gt;
+ &lt;dt&gt;fus&eacute;e&lt;/dt&gt;
+ &lt;dd&gt;multistage rocket&lt;/dd&gt;
+ &lt;dt&gt;table&lt;/dt&gt;
+ &lt;dd&gt;nest of tables&lt;/dd&gt;
+ &lt;/dl&gt;
+ &lt;/dd&gt;
+&lt;/dl&gt;</pre>
+</div>
+
+<h5><a name=last-of-type-pseudo>:last-of-type pseudo-class</a></h5>
+
+<p>Same as <code>:nth-last-of-type(1)</code>. The
+<code>:last-of-type</code> pseudo-class represents an element that is
+the last sibling of its type in the list of children of its parent
+element.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents the last data cell
+ <code>td</code> of a table row.</p>
+ <pre>tr &gt; td:last-of-type</pre>
+</div>
+
+<h5><a name=only-child-pseudo>:only-child pseudo-class</a></h5>
+
+<p>Represents an element that has a parent element and whose parent
+element has no other element children. Same as
+<code>:first-child:last-child</code> or
+<code>:nth-child(1):nth-last-child(1)</code>, but with a lower
+specificity.</p>
+
+<h5><a name=only-of-type-pseudo>:only-of-type pseudo-class</a></h5>
+
+<p>Represents an element that has a parent element and whose parent
+element has no other element children with the same element name. Same
+as <code>:first-of-type:last-of-type</code> or
+<code>:nth-of-type(1):nth-last-of-type(1)</code>, but with a lower
+specificity.</p>
+
+
+<h5><a name=empty-pseudo></a>:empty pseudo-class</h5>
+
+<p>The <code>:empty</code> pseudo-class represents an element that has
+no children at all. In terms of the DOM, only element nodes and text
+nodes (including CDATA nodes and entity references) whose data has a
+non-zero length must be considered as affecting emptiness; comments,
+PIs, and other nodes must not affect whether an element is considered
+empty or not.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p><code>p:empty</code> is a valid representation of the following fragment:</p>
+ <pre>&lt;p&gt;&lt;/p&gt;</pre>
+ <p><code>foo:empty</code> is not a valid representation for the
+ following fragments:</p>
+ <pre>&lt;foo&gt;bar&lt;/foo&gt;</pre>
+ <pre>&lt;foo&gt;&lt;bar&gt;bla&lt;/bar&gt;&lt;/foo&gt;</pre>
+ <pre>&lt;foo&gt;this is not &lt;bar&gt;:empty&lt;/bar&gt;&lt;/foo&gt;</pre>
+</div>
+
+<h4><a name=content-selectors>6.6.6. Blank</a></h4> <!-- It's the Return of Appendix H!!! Run away! -->
+
+<p>This section intentionally left blank.</p>
+<!-- (used to be :contains()) -->
+
+<h4><a name=negation></a>6.6.7. The negation pseudo-class</h4>
+
+<p>The negation pseudo-class, <code>:not(<var>X</var>)</code>, is a
+functional notation taking a <a href="#simple-selectors-dfn">simple
+selector</a> (excluding the negation pseudo-class itself and
+pseudo-elements) as an argument. It represents an element that is not
+represented by the argument.
+
+<!-- pseudo-elements are not simple selectors, so the above paragraph
+may be a bit confusing -->
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following CSS selector matches all <code>button</code>
+ elements in an HTML document that are not disabled.</p>
+ <pre>button:not([DISABLED])</pre>
+ <p>The following selector represents all but <code>FOO</code>
+ elements.</p>
+ <pre>*:not(FOO)</pre>
+ <p>The following group of selectors represents all HTML elements
+ except links.</p>
+ <pre>html|*:not(:link):not(:visited)</pre>
+</div>
+
+<p>Default namespace declarations do not affect the argument of the
+negation pseudo-class unless the argument is a universal selector or a
+type selector.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>Assuming that the default namespace is bound to
+ "http://example.com/", the following selector represents all
+ elements that are not in that namespace:</p>
+ <pre>*|*:not(*)</pre>
+ <p>The following CSS selector matches any element being hovered,
+ regardless of its namespace. In particular, it is not limited to
+ only matching elements in the default namespace that are not being
+ hovered, and elements not in the default namespace don't match the
+ rule when they <em>are</em> being hovered.</p>
+ <pre>*|*:not(:hover)</pre>
+</div>
+
+<p class="note"><strong>Note</strong>: the :not() pseudo allows
+useless selectors to be written. For instance <code>:not(*|*)</code>,
+which represents no element at all, or <code>foo:not(bar)</code>,
+which is equivalent to <code>foo</code> but with a higher
+specificity.</p>
+
+<h3><a name=pseudo-elements>7. Pseudo-elements</a></h3>
+
+<p>Pseudo-elements create abstractions about the document tree beyond
+those specified by the document language. For instance, document
+languages do not offer mechanisms to access the first letter or first
+line of an element's content. Pseudo-elements allow designers to refer
+to this otherwise inaccessible information. Pseudo-elements may also
+provide designers a way to refer to content that does not exist in the
+source document (e.g., the <code>::before</code> and
+<code>::after</code> pseudo-elements give access to generated
+content).</p>
+
+<p>A pseudo-element is made of two colons (<code>::</code>) followed
+by the name of the pseudo-element.</p>
+
+<p>This <code>::</code> notation is introduced by the current document
+in order to establish a discrimination between pseudo-classes and
+pseudo-elements. For compatibility with existing style sheets, user
+agents must also accept the previous one-colon notation for
+pseudo-elements introduced in CSS levels 1 and 2 (namely,
+<code>:first-line</code>, <code>:first-letter</code>,
+<code>:before</code> and <code>:after</code>). This compatibility is
+not allowed for the new pseudo-elements introduced in CSS level 3.</p>
+
+<p>Only one pseudo-element may appear per selector, and if present it
+must appear after the sequence of simple selectors that represents the
+<a href="#subject">subjects</a> of the selector. <span class="note">A
+future version of this specification may allow multiple
+pesudo-elements per selector.</span></p>
+
+<h4><a name=first-line>7.1. The ::first-line pseudo-element</a></h4>
+
+<p>The <code>::first-line</code> pseudo-element describes the contents
+of the first formatted line of an element.
+
+<div class="example">
+<p>CSS example:</p>
+<pre>p::first-line { text-transform: uppercase }</pre>
+<p>The above rule means "change the letters of the first line of every
+paragraph to uppercase".</p>
+</div>
+
+<p>The selector <code>p::first-line</code> does not match any real
+HTML element. It does match a pseudo-element that conforming user
+agents will insert at the beginning of every paragraph.</p>
+
+<p>Note that the length of the first line depends on a number of
+factors, including the width of the page, the font size, etc. Thus,
+an ordinary HTML paragraph such as:</p>
+
+<pre>
+&lt;P&gt;This is a somewhat long HTML
+paragraph that will be broken into several
+lines. The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>the lines of which happen to be broken as follows:
+
+<pre>
+THIS IS A SOMEWHAT LONG HTML PARAGRAPH THAT
+will be broken into several lines. The first
+line will be identified by a fictional tag
+sequence. The other lines will be treated as
+ordinary lines in the paragraph.
+</pre>
+
+<p>This paragraph might be "rewritten" by user agents to include the
+<em>fictional tag sequence</em> for <code>::first-line</code>. This
+fictional tag sequence helps to show how properties are inherited.</p>
+
+<pre>
+&lt;P&gt;<b>&lt;P::first-line&gt;</b> This is a somewhat long HTML
+paragraph that <b>&lt;/P::first-line&gt;</b> will be broken into several
+lines. The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>If a pseudo-element breaks up a real element, the desired effect
+can often be described by a fictional tag sequence that closes and
+then re-opens the element. Thus, if we mark up the previous paragraph
+with a <code>span</code> element:</p>
+
+<pre>
+&lt;P&gt;<b>&lt;SPAN class="test"&gt;</b> This is a somewhat long HTML
+paragraph that will be broken into several
+lines.<b>&lt;/SPAN&gt;</b> The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>the user agent could simulate start and end tags for
+<code>span</code> when inserting the fictional tag sequence for
+<code>::first-line</code>.
+
+<pre>
+&lt;P&gt;&lt;P::first-line&gt;<b>&lt;SPAN class="test"&gt;</b> This is a
+somewhat long HTML
+paragraph that will <b>&lt;/SPAN&gt;</b>&lt;/P::first-line&gt;<b>&lt;SPAN class="test"&gt;</b> be
+broken into several
+lines.<b>&lt;/SPAN&gt;</b> The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>In CSS, the <code>::first-line</code> pseudo-element can only be
+attached to a block-level element, an inline-block, a table-caption,
+or a table-cell.</p>
+
+<p><a name="first-formatted-line"></a>The "first formatted line" of an
+element may occur inside a
+block-level descendant in the same flow (i.e., a block-level
+descendant that is not positioned and not a float). E.g., the first
+line of the <code>div</code> in <code>&lt;DIV>&lt;P>This
+line...&lt;/P>&lt/DIV></code> is the first line of the <code>p</code> (assuming
+that both <code>p</code> and <code>div</code> are block-level).
+
+<p>The first line of a table-cell or inline-block cannot be the first
+formatted line of an ancestor element. Thus, in <code>&lt;DIV&gt;&lt;P
+STYLE="display: inline-block">Hello&lt;BR&gt;Goodbye&lt;/P&gt;
+etcetera&lt;/DIV&gt;</code> the first formatted line of the
+<code>div</code> is not the line "Hello".
+
+<p class="note">Note that the first line of the <code>p</code> in this
+fragment: <code>&lt;p&gt&lt;br&gt;First...</code> doesn't contain any
+letters (assuming the default style for <code>br</code> in HTML
+4). The word "First" is not on the first formatted line.
+
+<p>A UA should act as if the fictional start tags of the
+<code>::first-line</code> pseudo-elements were nested just inside the
+innermost enclosing block-level element. (Since CSS1 and CSS2 were
+silent on this case, authors should not rely on this behavior.) Here
+is an example. The fictional tag sequence for</p>
+
+<pre>
+&lt;DIV>
+ &lt;P>First paragraph&lt;/P>
+ &lt;P>Second paragraph&lt;/P>
+&lt;/DIV>
+</pre>
+
+<p>is</p>
+
+<pre>
+&lt;DIV>
+ &lt;P>&lt;DIV::first-line>&lt;P::first-line>First paragraph&lt;/P::first-line>&lt;/DIV::first-line>&lt;/P>
+ &lt;P>&lt;P::first-line>Second paragraph&lt;/P::first-line>&lt;/P>
+&lt;/DIV>
+</pre>
+
+<p>The <code>::first-line</code> pseudo-element is similar to an
+inline-level element, but with certain restrictions. In CSS, the
+following properties apply to a <code>::first-line</code>
+pseudo-element: font properties, color property, background
+properties, 'word-spacing', 'letter-spacing', 'text-decoration',
+'vertical-align', 'text-transform', 'line-height'. UAs may apply other
+properties as well.</p>
+
+
+<h4><a name=first-letter>7.2. The ::first-letter pseudo-element</a></h4>
+
+<p>The <code>::first-letter</code> pseudo-element represents the first
+letter of the first line of a block, if it is not preceded by any
+other content (such as images or inline tables) on its line. The
+::first-letter pseudo-element may be used for "initial caps" and "drop
+caps", which are common typographical effects. This type of initial
+letter is similar to an inline-level element if its 'float' property
+is 'none'; otherwise, it is similar to a floated element.</p>
+
+<p>In CSS, these are the properties that apply to <code>::first-letter</code>
+pseudo-elements: font properties, 'text-decoration', 'text-transform',
+'letter-spacing', 'word-spacing' (when appropriate), 'line-height',
+'float', 'vertical-align' (only if 'float' is 'none'), margin
+properties, padding properties, border properties, color property,
+background properties. UAs may apply other properties as well. To
+allow UAs to render a typographically correct drop cap or initial cap,
+the UA may choose a line-height, width and height based on the shape
+of the letter, unlike for normal elements.</p>
+
+<div class="example">
+<p>Example:</p>
+<p>This example shows a possible rendering of an initial cap. Note
+that the 'line-height' that is inherited by the <code>::first-letter</code>
+pseudo-element is 1.1, but the UA in this example has computed the
+height of the first letter differently, so that it doesn't cause any
+unnecessary space between the first two lines. Also note that the
+fictional start tag of the first letter is inside the <span>span</span>, and thus
+the font weight of the first letter is normal, not bold as the <span>span</span>:
+<pre>
+p { line-height: 1.1 }
+p::first-letter { font-size: 3em; font-weight: normal }
+span { font-weight: bold }
+...
+&lt;p>&lt;span>Het hemelsche&lt;/span> gerecht heeft zich ten lange lesten&lt;br>
+Erbarremt over my en mijn benaeuwde vesten&lt;br>
+En arme burgery, en op mijn volcx gebed&lt;br>
+En dagelix geschrey de bange stad ontzet.
+</pre>
+<div class="figure">
+<p><img src="initial-cap.png" alt="Image illustrating the ::first-letter pseudo-element">
+</div>
+</div>
+
+<div class="example">
+<p>The following CSS will make a drop cap initial letter span about two lines:</p>
+
+<pre>
+&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"&gt;
+&lt;HTML&gt;
+ &lt;HEAD&gt;
+ &lt;TITLE&gt;Drop cap initial letter&lt;/TITLE&gt;
+ &lt;STYLE type="text/css"&gt;
+ P { font-size: 12pt; line-height: 1.2 }
+ P::first-letter { font-size: 200%; font-weight: bold; float: left }
+ SPAN { text-transform: uppercase }
+ &lt;/STYLE&gt;
+ &lt;/HEAD&gt;
+ &lt;BODY&gt;
+ &lt;P&gt;&lt;SPAN&gt;The first&lt;/SPAN&gt; few words of an article
+ in The Economist.&lt;/P&gt;
+ &lt;/BODY&gt;
+&lt;/HTML&gt;
+</pre>
+
+<p>This example might be formatted as follows:</p>
+
+<div class="figure">
+<P><img src="first-letter.gif" alt="Image illustrating the combined effect of the ::first-letter and ::first-line pseudo-elements"></p>
+</div>
+
+<p>The <span class="index-inst" title="fictional tag
+sequence">fictional tag sequence</span> is:</p>
+
+<pre>
+&lt;P&gt;
+&lt;SPAN&gt;
+&lt;P::first-letter&gt;
+T
+&lt;/P::first-letter&gt;he first
+&lt;/SPAN&gt;
+few words of an article in the Economist.
+&lt;/P&gt;
+</pre>
+
+<p>Note that the <code>::first-letter</code> pseudo-element tags abut
+the content (i.e., the initial character), while the ::first-line
+pseudo-element start tag is inserted right after the start tag of the
+block element.</p> </div>
+
+<p>In order to achieve traditional drop caps formatting, user agents
+may approximate font sizes, for example to align baselines. Also, the
+glyph outline may be taken into account when formatting.</p>
+
+<p>Punctuation (i.e, characters defined in Unicode in the "open" (Ps),
+"close" (Pe), "initial" (Pi). "final" (Pf) and "other" (Po)
+punctuation classes), that precedes or follows the first letter should
+be included. <a href="#refsUNICODE">[UNICODE]</a></p>
+
+<div class="figure">
+<P><img src="first-letter2.gif" alt="Quotes that precede the
+first letter should be included."></p>
+</div>
+
+<p>The <code>::first-letter</code> also applies if the first letter is
+in fact a digit, e.g., the "6" in "67 million dollars is a lot of
+money."</p>
+
+<p>In CSS, the <code>::first-letter</code> pseudo-element applies to
+block, list-item, table-cell, table-caption, and inline-block
+elements. <span class="note">A future version of this specification
+may allow this pesudo-element to apply to more element
+types.</span></p>
+
+<p>The <code>::first-letter</code> pseudo-element can be used with all
+such elements that contain text, or that have a descendant in the same
+flow that contains text. A UA should act as if the fictional start tag
+of the ::first-letter pseudo-element is just before the first text of
+the element, even if that first text is in a descendant.</p>
+
+<div class="example">
+<p>Example:</p>
+<p>The fictional tag sequence for this HTMLfragment:
+<pre>&lt;div>
+&lt;p>The first text.</pre>
+<p>is:
+<pre>&lt;div>
+&lt;p>&lt;div::first-letter>&lt;p::first-letter>T&lt;/...>&lt;/...>he first text.</pre>
+</div>
+
+<p>The first letter of a table-cell or inline-block cannot be the
+first letter of an ancestor element. Thus, in <code>&lt;DIV&gt;&lt;P
+STYLE="display: inline-block">Hello&lt;BR&gt;Goodbye&lt;/P&gt;
+etcetera&lt;/DIV&gt;</code> the first letter of the <code>div</code> is not the
+letter "H". In fact, the <code>div</code> doesn't have a first letter.
+
+<p>The first letter must occur on the <a
+href="#first-formatted-line">first formatted line.</a> For example, in
+this fragment: <code>&lt;p&gt&lt;br&gt;First...</code> the first line
+doesn't contain any letters and <code>::first-letter</code> doesn't
+match anything (assuming the default style for <code>br</code> in HTML
+4). In particular, it does not match the "F" of "First."
+
+<p>In CSS, if an element is a list item ('display: list-item'), the
+<code>::first-letter</code> applies to the first letter in the
+principal box after the marker. UAs may ignore
+<code>::first-letter</code> on list items with 'list-style-position:
+inside'. If an element has <code>::before</code> or
+<code>::after</code> content, the <code>::first-letter</code> applies
+to the first letter of the element <em>including</em> that content.
+
+<div class="example">
+<p>Example:</p>
+<p>After the rule 'p::before {content: "Note: "}', the selector
+'p::first-letter' matches the "N" of "Note".</p>
+</div>
+
+<p>Some languages may have specific rules about how to treat certain
+letter combinations. In Dutch, for example, if the letter combination
+"ij" appears at the beginning of a word, both letters should be
+considered within the <code>::first-letter</code> pseudo-element.
+
+<p>If the letters that would form the ::first-letter are not in the
+same element, such as "'T" in <code>&lt;p>'&lt;em>T...</code>, the UA
+may create a ::first-letter pseudo-element from one of the elements,
+both elements, or simply not create a pseudo-element.</p>
+
+<p>Similarly, if the first letter(s) of the block are not at the start
+of the line (for example due to bidirectional reordering), then the UA
+need not create the pseudo-element(s).
+
+<div class="example">
+<p>Example:</p>
+<p><a name="overlapping-example">The following example</a> illustrates
+how overlapping pseudo-elements may interact. The first letter of
+each P element will be green with a font size of '24pt'. The rest of
+the first formatted line will be 'blue' while the rest of the
+paragraph will be 'red'.</p>
+
+<pre>p { color: red; font-size: 12pt }
+p::first-letter { color: green; font-size: 200% }
+p::first-line { color: blue }
+
+&lt;P&gt;Some text that ends up on two lines&lt;/P&gt;</pre>
+
+<p>Assuming that a line break will occur before the word "ends", the
+<span class="index-inst" title="fictional tag sequence">fictional tag
+sequence</span> for this fragment might be:</p>
+
+<pre>&lt;P&gt;
+&lt;P::first-line&gt;
+&lt;P::first-letter&gt;
+S
+&lt;/P::first-letter&gt;ome text that
+&lt;/P::first-line&gt;
+ends up on two lines
+&lt;/P&gt;</pre>
+
+<p>Note that the <code>::first-letter</code> element is inside the <code>::first-line</code>
+element. Properties set on <code>::first-line</code> are inherited by
+<code>::first-letter</code>, but are overridden if the same property is set on
+<code>::first-letter</code>.</p>
+</div>
+
+
+<h4><a name=UIfragments>7.3.</a> <a name=selection>The ::selection pseudo-element</a></h4>
+
+<p>The <code>::selection</code> pseudo-element applies to the portion
+of a document that has been highlighted by the user. This also
+applies, for example, to selected text within an editable text
+field. This pseudo-element should not be confused with the <code><a
+href="#checked">:checked</a></code> pseudo-class (which used to be
+named <code>:selected</code>)
+
+<p>Although the <code>::selection</code> pseudo-element is dynamic in
+nature, and is altered by user action, it is reasonable to expect that
+when a UA re-renders to a static medium (such as a printed page, see
+<a href="#refsCSS21">[CSS21]</a>) which was originally rendered to a
+dynamic medium (like screen), the UA may wish to transfer the current
+<code>::selection</code> state to that other medium, and have all the
+appropriate formatting and rendering take effect as well. This is not
+required &mdash; UAs may omit the <code>::selection</code>
+pseudo-element for static media.
+
+<p>These are the CSS properties that apply to <code>::selection</code>
+pseudo-elements: color, background, cursor (optional), outline
+(optional). The computed value of the 'background-image' property on
+<code>::selection</code> may be ignored.
+
+
+<h4><a name=gen-content>7.4. The ::before and ::after pseudo-elements</a></h4>
+
+<p>The <code>::before</code> and <code>::after</code> pseudo-elements
+can be used to describe generated content before or after an element's
+content. They are explained in CSS 2.1 <a
+href="#refsCSS21">[CSS21]</a>.</p>
+
+<p>When the <code>::first-letter</code> and <code>::first-line</code>
+pseudo-elements are combined with <code>::before</code> and
+<code>::after</code>, they apply to the first letter or line of the
+element including the inserted text.</p>
+
+<h2><a name=combinators>8. Combinators</a></h2>
+
+<h3><a name=descendant-combinators>8.1. Descendant combinator</a></h3>
+
+<p>At times, authors may want selectors to describe an element that is
+the descendant of another element in the document tree (e.g., "an
+<code>EM</code> element that is contained within an <code>H1</code>
+element"). Descendant combinators express such a relationship. A
+descendant combinator is <a href="#whitespace">white space</a> that
+separates two sequences of simple selectors. A selector of the form
+"<code>A B</code>" represents an element <code>B</code> that is an
+arbitrary descendant of some ancestor element <code>A</code>.
+
+<div class="example">
+ <p>Examples:</p>
+ <p>For example, consider the following selector:</p>
+ <pre>h1 em</pre>
+ <p>It represents an <code>em</code> element being the descendant of
+ an <code>h1</code> element. It is a correct and valid, but partial,
+ description of the following fragment:</p>
+ <pre>&lt;h1&gt;This &lt;span class="myclass"&gt;headline
+is &lt;em&gt;very&lt;/em&gt; important&lt;/span&gt;&lt;/h1&gt;</pre>
+ <p>The following selector:</p>
+ <pre>div * p</pre>
+ <p>represents a <code>p</code> element that is a grandchild or later
+ descendant of a <code>div</code> element. Note the whitespace on
+ either side of the "*" is not part of the universal selector; the
+ whitespace is a combinator indicating that the DIV must be the
+ ancestor of some element, and that that element must be an ancestor
+ of the P.</p>
+ <p>The following selector, which combines descendant combinators and
+ <a href="#attribute-selectors">attribute selectors</a>, represents an
+ element that (1) has the <code>href</code> attribute set and (2) is
+ inside a <code>p</code> that is itself inside a <code>div</code>:</p>
+ <pre>div p *[href]</pre>
+</div>
+
+<h3><a name=child-combinators>8.2. Child combinators</a></h3>
+
+<p>A <dfn>child combinator</dfn> describes a childhood relationship
+between two elements. A child combinator is made of the
+&quot;greater-than sign&quot; (<code>&gt;</code>) character and
+separates two sequences of simple selectors.
+
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element that is
+ child of <code>body</code>:</p>
+ <pre>body &gt; p</pre>
+ <p>The following example combines descendant combinators and child
+ combinators.</p>
+ <pre>div ol&gt;li p</pre><!-- LEAVE THOSE SPACES OUT! see below -->
+ <p>It represents a <code>p</code> element that is a descendant of an
+ <code>li</code> element; the <code>li</code> element must be the
+ child of an <code>ol</code> element; the <code>ol</code> element must
+ be a descendant of a <code>div</code>. Notice that the optional white
+ space around the "&gt;" combinator has been left out.</p>
+</div>
+
+<p>For information on selecting the first child of an element, please
+see the section on the <code><a
+href="#structural-pseudos">:first-child</a></code> pseudo-class
+above.</p>
+
+<h3><a name=sibling-combinators>8.3. Sibling combinators</a></h3>
+
+<p>There are two different sibling combinators: the adjacent sibling
+combinator and the general sibling combinator. In both cases,
+non-element nodes (e.g. text between elements) are ignored when
+considering adjacency of elements.</p>
+
+<h4><a name=adjacent-sibling-combinators>8.3.1. Adjacent sibling combinator</a></h4>
+
+<p>The adjacent sibling combinator is made of the &quot;plus
+sign&quot; (U+002B, <code>+</code>) character that separates two
+sequences of simple selectors. The elements represented by the two
+sequences share the same parent in the document tree and the element
+represented by the first sequence immediately precedes the element
+represented by the second one.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element
+ immediately following a <code>math</code> element:</p>
+ <pre>math + p</pre>
+ <p>The following selector is conceptually similar to the one in the
+ previous example, except that it adds an attribute selector &mdash; it
+ adds a constraint to the <code>h1</code> element, that it must have
+ <code>class="opener"</code>:</p>
+ <pre>h1.opener + h2</pre>
+</div>
+
+
+<h4><a name=general-sibling-combinators>8.3.2. General sibling combinator</a></h4>
+
+<p>The general sibling combinator is made of the &quot;tilde&quot;
+(U+007E, <code>~</code>) character that separates two sequences of
+simple selectors. The elements represented by the two sequences share
+the same parent in the document tree and the element represented by
+the first sequence precedes (not necessarily immediately) the element
+represented by the second one.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <pre>h1 ~ pre</pre>
+ <p>represents a <code>pre</code> element following an <code>h1</code>. It
+ is a correct and valid, but partial, description of:</p>
+ <pre>&lt;h1&gt;Definition of the function a&lt;/h1&gt;
+&lt;p&gt;Function a(x) has to be applied to all figures in the table.&lt;/p&gt;
+&lt;pre&gt;function a(x) = 12x/13.5&lt;/pre&gt;</pre>
+</div>
+
+<h2><a name=specificity>9. Calculating a selector's specificity</a></h2>
+
+<p>A selector's specificity is calculated as follows:</p>
+
+<ul>
+ <li>count the number of ID selectors in the selector (= a)</li>
+ <li>count the number of class selectors, attributes selectors, and pseudo-classes in the selector (= b)</li>
+ <li>count the number of element names in the selector (= c)</li>
+ <li>ignore pseudo-elements</li>
+</ul>
+
+<p>Selectors inside <a href="#negation">the negation pseudo-class</a>
+are counted like any other, but the negation itself does not count as
+a pseudo-class.</p>
+
+<p>Concatenating the three numbers a-b-c (in a number system with a
+large base) gives the specificity.</p>
+
+<div class="example">
+<p>Examples:</p>
+<pre>* /* a=0 b=0 c=0 -&gt; specificity = 0 */
+LI /* a=0 b=0 c=1 -&gt; specificity = 1 */
+UL LI /* a=0 b=0 c=2 -&gt; specificity = 2 */
+UL OL+LI /* a=0 b=0 c=3 -&gt; specificity = 3 */
+H1 + *[REL=up] /* a=0 b=1 c=1 -&gt; specificity = 11 */
+UL OL LI.red /* a=0 b=1 c=3 -&gt; specificity = 13 */
+LI.red.level /* a=0 b=2 c=1 -&gt; specificity = 21 */
+#x34y /* a=1 b=0 c=0 -&gt; specificity = 100 */
+#s12:not(FOO) /* a=1 b=0 c=1 -&gt; specificity = 101 */
+</pre>
+</div>
+
+<p class="note"><strong>Note:</strong> the specificity of the styles
+specified in an HTML <code>style</code> attribute is described in CSS
+2.1. <a href="#refsCSS21">[CSS21]</a>.</p>
+
+<h2><a name=w3cselgrammar>10. The grammar of Selectors</a></h2>
+
+<h3><a name=grammar>10.1. Grammar</a></h3>
+
+<p>The grammar below defines the syntax of Selectors. It is globally
+LL(1) and can be locally LL(2) (but note that most UA's should not use
+it directly, since it doesn't express the parsing conventions). The
+format of the productions is optimized for human consumption and some
+shorthand notations beyond Yacc (see <a href="#refsYACC">[YACC]</a>)
+are used:</p>
+
+<ul>
+ <li><b>*</b>: 0 or more
+ <li><b>+</b>: 1 or more
+ <li><b>?</b>: 0 or 1
+ <li><b>|</b>: separates alternatives
+ <li><b>[ ]</b>: grouping </li>
+</ul>
+
+<p>The productions are:</p>
+
+<pre>selectors_group
+ : selector [ COMMA S* selector ]*
+ ;
+
+selector
+ : simple_selector_sequence [ combinator simple_selector_sequence ]*
+ ;
+
+combinator
+ /* combinators can be surrounded by white space */
+ : PLUS S* | GREATER S* | TILDE S* | S+
+ ;
+
+simple_selector_sequence
+ : [ type_selector | universal ]
+ [ HASH | class | attrib | pseudo | negation ]*
+ | [ HASH | class | attrib | pseudo | negation ]+
+ ;
+
+type_selector
+ : [ namespace_prefix ]? element_name
+ ;
+
+namespace_prefix
+ : [ IDENT | '*' ]? '|'
+ ;
+
+element_name
+ : IDENT
+ ;
+
+universal
+ : [ namespace_prefix ]? '*'
+ ;
+
+class
+ : '.' IDENT
+ ;
+
+attrib
+ : '[' S* [ namespace_prefix ]? IDENT S*
+ [ [ PREFIXMATCH |
+ SUFFIXMATCH |
+ SUBSTRINGMATCH |
+ '=' |
+ INCLUDES |
+ DASHMATCH ] S* [ IDENT | STRING ] S*
+ ]? ']'
+ ;
+
+pseudo
+ /* '::' starts a pseudo-element, ':' a pseudo-class */
+ /* Exceptions: :first-line, :first-letter, :before and :after. */
+ /* Note that pseudo-elements are restricted to one per selector and */
+ /* occur only in the last simple_selector_sequence. */
+ : ':' ':'? [ IDENT | functional_pseudo ]
+ ;
+
+functional_pseudo
+ : FUNCTION S* expression ')'
+ ;
+
+expression
+ /* In CSS3, the expressions are identifiers, strings, */
+ /* or of the form "an+b" */
+ : [ [ PLUS | '-' | DIMENSION | NUMBER | STRING | IDENT ] S* ]+
+ ;
+
+negation
+ : NOT S* negation_arg S* ')'
+ ;
+
+negation_arg
+ : type_selector | universal | HASH | class | attrib | pseudo
+ ;</pre>
+
+
+<h3><a name=lex>10.2. Lexical scanner</a></h3>
+
+<p>The following is the <a name=x3>tokenizer</a>, written in Flex (see
+<a href="#refsFLEX">[FLEX]</a>) notation. The tokenizer is
+case-insensitive.</p>
+
+<p>The two occurrences of "\377" represent the highest character
+number that current versions of Flex can deal with (decimal 255). They
+should be read as "\4177777" (decimal 1114111), which is the highest
+possible code point in Unicode/ISO-10646. <a
+href="#refsUNICODE">[UNICODE]</a></p>
+
+<pre>%option case-insensitive
+
+ident [-]?{nmstart}{nmchar}*
+name {nmchar}+
+nmstart [_a-z]|{nonascii}|{escape}
+nonascii [^\0-\177]
+unicode \\[0-9a-f]{1,6}(\r\n|[ \n\r\t\f])?
+escape {unicode}|\\[^\n\r\f0-9a-f]
+nmchar [_a-z0-9-]|{nonascii}|{escape}
+num [0-9]+|[0-9]*\.[0-9]+
+string {string1}|{string2}
+string1 \"([^\n\r\f\\"]|\\{nl}|{nonascii}|{escape})*\"
+string2 \'([^\n\r\f\\']|\\{nl}|{nonascii}|{escape})*\'
+invalid {invalid1}|{invalid2}
+invalid1 \"([^\n\r\f\\"]|\\{nl}|{nonascii}|{escape})*
+invalid2 \'([^\n\r\f\\']|\\{nl}|{nonascii}|{escape})*
+nl \n|\r\n|\r|\f
+w [ \t\r\n\f]*
+
+%%
+
+[ \t\r\n\f]+ return S;
+
+"~=" return INCLUDES;
+"|=" return DASHMATCH;
+"^=" return PREFIXMATCH;
+"$=" return SUFFIXMATCH;
+"*=" return SUBSTRINGMATCH;
+{ident} return IDENT;
+{string} return STRING;
+{ident}"(" return FUNCTION;
+{num} return NUMBER;
+"#"{name} return HASH;
+{w}"+" return PLUS;
+{w}"&gt;" return GREATER;
+{w}"," return COMMA;
+{w}"~" return TILDE;
+":not(" return NOT;
+@{ident} return ATKEYWORD;
+{invalid} return INVALID;
+{num}% return PERCENTAGE;
+{num}{ident} return DIMENSION;
+"&lt;!--" return CDO;
+"--&gt;" return CDC;
+
+"url("{w}{string}{w}")" return URI;
+"url("{w}([!#$%&*-~]|{nonascii}|{escape})*{w}")" return URI;
+U\+[0-9a-f?]{1,6}(-[0-9a-f]{1,6})? return UNICODE_RANGE;
+
+\/\*[^*]*\*+([^/*][^*]*\*+)*\/ /* ignore comments */
+
+. return *yytext;</pre>
+
+
+
+<h2><a name=downlevel>11. Namespaces and down-level clients</a></h2>
+
+<p>An important issue is the interaction of CSS selectors with XML
+documents in web clients that were produced prior to this
+document. Unfortunately, due to the fact that namespaces must be
+matched based on the URI which identifies the namespace, not the
+namespace prefix, some mechanism is required to identify namespaces in
+CSS by their URI as well. Without such a mechanism, it is impossible
+to construct a CSS style sheet which will properly match selectors in
+all cases against a random set of XML documents. However, given
+complete knowledge of the XML document to which a style sheet is to be
+applied, and a limited use of namespaces within the XML document, it
+is possible to construct a style sheet in which selectors would match
+elements and attributes correctly.</p>
+
+<p>It should be noted that a down-level CSS client will (if it
+properly conforms to CSS forward compatible parsing rules) ignore all
+<code>@namespace</code> at-rules, as well as all style rules that make
+use of namespace qualified element type or attribute selectors. The
+syntax of delimiting namespace prefixes in CSS was deliberately chosen
+so that down-level CSS clients would ignore the style rules rather
+than possibly match them incorrectly.</p>
+
+<p>The use of default namespaces in CSS makes it possible to write
+element type selectors that will function in both namespace aware CSS
+clients as well as down-level clients. It should be noted that
+down-level clients may incorrectly match selectors against XML
+elements in other namespaces.</p>
+
+<p>The following are scenarios and examples in which it is possible to
+construct style sheets which would function properly in web clients
+that do not implement this proposal.</p>
+
+<ol>
+ <li>
+
+ <p>The XML document does not use namespaces.</p>
+
+ <ul>
+
+ <li>In this case, it is obviously not necessary to declare or use
+ namespaces in the style sheet. Standard CSS element type and
+ attribute selectors will function adequately in a down-level
+ client.</li>
+
+ <li>In a CSS namespace aware client, the default behavior of
+ element selectors matching without regard to namespace will
+ function properly against all elements, since no namespaces are
+ present. However, the use of specific element type selectors that
+ match only elements that have no namespace ("<code>|name</code>")
+ will guarantee that selectors will match only XML elements that do
+ not have a declared namespace. </li>
+
+ </ul>
+
+ </li>
+
+ <li>
+
+ <p>The XML document defines a single, default namespace used
+ throughout the document. No namespace prefixes are used in element
+ names.</p>
+
+ <ul>
+
+ <li>In this case, a down-level client will function as if
+ namespaces were not used in the XML document at all. Standard CSS
+ element type and attribute selectors will match against all
+ elements. </li>
+
+ </ul>
+
+ </li>
+
+ <li>
+
+ <p>The XML document does <b>not</b> use a default namespace, all
+ namespace prefixes used are known to the style sheet author, and
+ there is a direct mapping between namespace prefixes and namespace
+ URIs. (A given prefix may only be mapped to one namespace URI
+ throughout the XML document; there may be multiple prefixes mapped
+ to the same URI).</p>
+
+ <ul>
+
+ <li>In this case, the down-level client will view and match
+ element type and attribute selectors based on their fully
+ qualified name, not the local part as outlined in the <a
+ href="#typenmsp">Type selectors and Namespaces</a> section. CSS
+ selectors may be declared using an escaped colon "<code>\:</code>"
+ to describe the fully qualified names, e.g.
+ "<code>html\:h1</code>" will match
+ <code>&lt;html:h1&gt;</code>. Selectors using the qualified name
+ will only match XML elements that use the same prefix. Other
+ namespace prefixes used in the XML that are mapped to the same URI
+ will not match as expected unless additional CSS style rules are
+ declared for them.</li>
+
+ <li>Note that selectors declared in this fashion will
+ <em>only</em> match in down-level clients. A CSS namespace aware
+ client will match element type and attribute selectors based on
+ the name's local part. Selectors declared with the fully
+ qualified name will not match (unless there is no namespace prefix
+ in the fully qualified name).</li>
+
+ </ul>
+
+ </li>
+
+ </ol>
+
+<p>In other scenarios: when the namespace prefixes used in the XML are
+not known in advance by the style sheet author; or a combination of
+elements with no namespace are used in conjunction with elements using
+a default namespace; or the same namespace prefix is mapped to
+<em>different</em> namespace URIs within the same document, or in
+different documents; it is impossible to construct a CSS style sheet
+that will function properly against all elements in those documents,
+unless, the style sheet is written using a namespace URI syntax (as
+outlined in this document or similar) and the document is processed by
+a CSS and XML namespace aware client.</p>
+
+<h2><a name=profiling>12. Profiles</a></h2>
+
+<p>Each specification using Selectors must define the subset of W3C
+Selectors it allows and excludes, and describe the local meaning of
+all the components of that subset.</p>
+
+<p>Non normative examples:
+
+<div class="profile">
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>CSS level 1</td></tr>
+ <tr>
+ <th>Accepts</th>
+ <td>type selectors<br>class selectors<br>ID selectors<br>:link,
+ :visited and :active pseudo-classes<br>descendant combinator
+ <br>::first-line and ::first-letter pseudo-elements</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>
+
+<p>universal selector<br>attribute selectors<br>:hover and :focus
+ pseudo-classes<br>:target pseudo-class<br>:lang() pseudo-class<br>all UI
+ element states pseudo-classes<br>all structural
+ pseudo-classes<br>negation pseudo-class<br>all
+ UI element fragments pseudo-elements<br>::before and ::after
+ pseudo-elements<br>child combinators<br>sibling combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>only one class selector allowed per sequence of simple
+ selectors</td></tr></tbody></table><br><br>
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>CSS level 2</td></tr>
+ <tr>
+ <th>Accepts</th>
+ <td>type selectors<br>universal selector<br>attribute presence and
+ values selectors<br>class selectors<br>ID selectors<br>:link, :visited,
+ :active, :hover, :focus, :lang() and :first-child pseudo-classes
+ <br>descendant combinator<br>child combinator<br>adjacent sibling
+ combinator<br>::first-line and ::first-letter pseudo-elements<br>::before
+ and ::after pseudo-elements</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>
+
+<p>content selectors<br>substring matching attribute
+ selectors<br>:target pseudo-classes<br>all UI element
+ states pseudo-classes<br>all structural pseudo-classes other
+ than :first-child<br>negation pseudo-class<br>all UI element
+ fragments pseudo-elements<br>general sibling combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>more than one class selector per sequence of simple selectors (CSS1
+ constraint) allowed</td></tr></tbody></table>
+
+<p>In CSS, selectors express pattern matching rules that determine which style
+rules apply to elements in the document tree.
+
+<p>The following selector (CSS level 2) will <b>match</b> all anchors <code>a</code>
+with attribute <code>name</code> set inside a section 1 header <code>h1</code>:
+<pre>h1 a[name]</pre>
+
+<p>All CSS declarations attached to such a selector are applied to elements
+matching it. </div>
+
+<div class="profile">
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>STTS 3</td>
+ </tr>
+ <tr>
+ <th>Accepts</th>
+ <td>
+
+<p>type selectors<br>universal selectors<br>attribute selectors<br>class
+ selectors<br>ID selectors<br>all structural pseudo-classes<br>
+ all combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>non-accepted pseudo-classes<br>pseudo-elements<br></td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>some selectors and combinators are not allowed in fragment
+ descriptions on the right side of STTS declarations.</td></tr></tbody></table>
+<form>
+<input type="text" name="test10"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+</form>
+
+<p>Selectors can be used in STTS 3 in two different
+ manners:
+<ol>
+ <li>a selection mechanism equivalent to CSS selection mechanism: declarations
+ attached to a given selector are applied to elements matching that selector,
+ <li>fragment descriptions that appear on the right side of declarations.
+</li></ol></div>
+
+<h2><a name=Conformance></a>13. Conformance and requirements</h2>
+
+<p>This section defines conformance with the present specification only.
+
+<p>The inability of a user agent to implement part of this specification due to
+the limitations of a particular device (e.g., non interactive user agents will
+probably not implement dynamic pseudo-classes because they make no sense without
+interactivity) does not imply non-conformance.
+
+<p>All specifications reusing Selectors must contain a <a
+href="#profiling">Profile</a> listing the
+subset of Selectors it accepts or excludes, and describing the constraints
+it adds to the current specification.
+
+<p>Invalidity is caused by a parsing error, e.g. an unrecognized token or a token
+which is not allowed at the current parsing point.
+
+<p>User agents must observe the rules for handling parsing errors:
+<ul>
+ <li>a simple selector containing an undeclared namespace prefix is invalid</li>
+ <li>a selector containing an invalid simple selector, an invalid combinator
+ or an invalid token is invalid. </li>
+ <li>a group of selectors containing an invalid selector is invalid.</li>
+</ul>
+
+<p class="foo test10 bar">Specifications reusing Selectors must define how to handle parsing
+errors. (In the case of CSS, the entire rule in which the selector is
+used is dropped.)</p>
+
+<!-- Apparently all these references are out of date:
+<p>Implementations of this specification must behave as
+"recipients of text data" as defined by <a href="#refsCWWW">[CWWW]</a>
+when parsing selectors and attempting matches. (In particular,
+implementations must assume the data is normalized and must not
+normalize it.) Normative rules for matching strings are defined in
+<a href="#refsCWWW">[CWWW]</a> and <a
+href="#refsUNICODE">[UNICODE]</a> and apply to implementations of this
+specification.</p>-->
+
+<h2><a name=Tests></a>14. Tests</h2>
+
+<p>This specification has <a
+href="http://www.w3.org/Style/CSS/Test/CSS3/Selectors/current/">a test
+suite</a> allowing user agents to verify their basic conformance to
+the specification. This test suite does not pretend to be exhaustive
+and does not cover all possible combined cases of Selectors.</p>
+
+<h2><a name=ACKS></a>15. Acknowledgements</h2>
+
+<p>The CSS working group would like to thank everyone who has sent
+comments on this specification over the years.</p>
+
+<p>The working group would like to extend special thanks to Donna
+McManus, Justin Baker, Joel Sklar, and Molly Ives Brower who perfermed
+the final editorial review.</p>
+
+<h2><a name=references>16. References</a></h2>
+
+<dl class="refs">
+
+ <dt>[CSS1]
+ <dd><a name=refsCSS1></a> Bert Bos, H&aring;kon Wium Lie; "<cite>Cascading Style Sheets, level 1</cite>", W3C Recommendation, 17 Dec 1996, revised 11 Jan 1999
+ <dd>(<code><a href="http://www.w3.org/TR/REC-CSS1">http://www.w3.org/TR/REC-CSS1</a></code>)
+
+ <dt>[CSS21]
+ <dd><a name=refsCSS21></a> Bert Bos, Tantek &Ccedil;elik, Ian Hickson, H&aring;kon Wium Lie, editors; "<cite>Cascading Style Sheets, level 2 revision 1</cite>", W3C Working Draft, 13 June 2005
+ <dd>(<code><a href="http://www.w3.org/TR/CSS21">http://www.w3.org/TR/CSS21</a></code>)
+
+ <dt>[CWWW]
+ <dd><a name=refsCWWW></a> Martin J. D&uuml;rst, Fran&ccedil;ois Yergeau, Misha Wolf, Asmus Freytag, Tex Texin, editors; "<cite>Character Model for the World Wide Web</cite>", W3C Recommendation, 15 February 2005
+ <dd>(<code><a href="http://www.w3.org/TR/charmod/">http://www.w3.org/TR/charmod/</a></code>)
+
+ <dt>[FLEX]
+ <dd><a name="refsFLEX"></a> "<cite>Flex: The Lexical Scanner Generator</cite>", Version 2.3.7, ISBN 1882114213
+
+ <dt>[HTML4]
+ <dd><a name="refsHTML4"></a> Dave Ragget, Arnaud Le Hors, Ian Jacobs, editors; "<cite>HTML 4.01 Specification</cite>", W3C Recommendation, 24 December 1999
+ <dd>(<a href="http://www.w3.org/TR/html4/"><code>http://www.w3.org/TR/html4/</code></a>)
+
+ <dt>[MATH]
+ <dd><a name="refsMATH"></a> Patrick Ion, Robert Miner, editors; "<cite>Mathematical Markup Language (MathML) 1.01</cite>", W3C Recommendation, revision of 7 July 1999
+ <dd>(<code><a href="http://www.w3.org/TR/REC-MathML/">http://www.w3.org/TR/REC-MathML/</a></code>)
+
+ <dt>[RFC3066]
+ <dd><a name="refsRFC3066"></a> H. Alvestrand; "<cite>Tags for the Identification of Languages</cite>", Request for Comments 3066, January 2001
+ <dd>(<a href="http://www.ietf.org/rfc/rfc3066.txt"><code>http://www.ietf.org/rfc/rfc3066.txt</code></a>)
+
+ <dt>[STTS]
+ <dd><a name=refsSTTS></a> Daniel Glazman; "<cite>Simple Tree Transformation Sheets 3</cite>", Electricit&eacute; de France, submission to the W3C, 11 November 1998
+ <dd>(<code><a href="http://www.w3.org/TR/NOTE-STTS3">http://www.w3.org/TR/NOTE-STTS3</a></code>)
+
+ <dt>[SVG]
+ <dd><a name="refsSVG"></a> Jon Ferraiolo, &#34276;&#27810; &#28147;, Dean Jackson, editors; "<cite>Scalable Vector Graphics (SVG) 1.1 Specification</cite>", W3C Recommendation, 14 January 2003
+ <dd>(<code><a href="http://www.w3.org/TR/SVG/">http://www.w3.org/TR/SVG/</a></code>)
+
+ <dt>[UNICODE]</dt>
+ <dd><a name="refsUNICODE"></a> <cite><a
+ href="http://www.unicode.org/versions/Unicode4.1.0/">The Unicode Standard, Version 4.1</a></cite>, The Unicode Consortium. Boston, MA, Addison-Wesley, March 2005. ISBN 0-321-18578-1, as amended by <a href="http://www.unicode.org/versions/Unicode4.0.1/">Unicode 4.0.1</a> and <a href="http://www.unicode.org/versions/Unicode4.1.0/">Unicode 4.1.0</a>.
+ <dd>(<code><a href="http://www.unicode.org/versions/">http://www.unicode.org/versions/</a></code>)</dd>
+
+ <dt>[XML10]
+ <dd><a name="refsXML10"></a> Tim Bray, Jean Paoli, C. M. Sperberg-McQueen, Eve Maler, Fran&ccedil;ois Yergeau, editors; "<cite>Extensible Markup Language (XML) 1.0 (Third Edition)</cite>", W3C Recommendation, 4 February 2004
+ <dd>(<a href="http://www.w3.org/TR/REC-xml/"><code>http://www.w3.org/TR/REC-xml/</code></a>)
+
+ <dt>[XMLNAMES]
+ <dd><a name="refsXMLNAMES"></a> Tim Bray, Dave Hollander, Andrew Layman, editors; "<cite>Namespaces in XML</cite>", W3C Recommendation, 14 January 1999
+ <dd>(<a href="http://www.w3.org/TR/REC-xml-names/"><code>http://www.w3.org/TR/REC-xml-names/</code></a>)
+
+ <dt>[YACC]
+ <dd><a name="refsYACC"></a> S. C. Johnson; "<cite>YACC &mdash; Yet another compiler compiler</cite>", Technical Report, Murray Hill, 1975
+
+</dl>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/cssquery-jquery.html b/testing/talos/talos/tests/dromaeo/tests/cssquery-jquery.html
new file mode 100644
index 0000000000..47fe57637e
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/cssquery-jquery.html
@@ -0,0 +1,3062 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script src="../lib/jquery.js"></script>
+<script>
+window.onload = function(){
+startTest("cssquery-jquery", 'a1e81afd');
+
+// Try to force real results
+var ret, tmp;
+
+var html = document.body.innerHTML;
+
+ prep(function(){
+ var div = document.createElement("div");
+ div.innerHTML = html;
+ document.body.appendChild( div );
+ });
+
+ test("jQuery - *", function(){
+ jQuery("*");
+ });
+
+ test("jQuery - div:only-child", function(){
+ jQuery("div:only-child");
+ });
+
+ test("jQuery - div:first-child", function(){
+ jQuery("div:first-child");
+ });
+
+ test("jQuery - div:nth-child(even)", function(){
+ jQuery("div:nth-child(even)");
+ });
+
+ test("jQuery - div:nth-child(2n)", function(){
+ jQuery("div:nth-child(2n)");
+ });
+
+ test("jQuery - div:nth-child(odd)", function(){
+ jQuery("div:nth-child(odd)");
+ });
+
+ test("jQuery - div:nth-child(2n+1)", function(){
+ jQuery("div:nth-child(2n+1)");
+ });
+
+ test("jQuery - div:nth-child(n)", function(){
+ jQuery("div:nth-child(n)");
+ });
+
+ test("jQuery - div:last-child", function(){
+ jQuery("div:last-child");
+ });
+
+ test("jQuery - div > div", function(){
+ jQuery("div > div");
+ });
+
+ test("jQuery - div + div", function(){
+ jQuery("div + div");
+ });
+
+ test("jQuery - div ~ div", function(){
+ jQuery("div ~ div");
+ });
+
+ test("jQuery - body", function(){
+ jQuery("body");
+ });
+
+ test("jQuery - body div", function(){
+ jQuery("body div");
+ });
+
+ test("jQuery - div", function(){
+ jQuery("div");
+ });
+
+ test("jQuery - div div", function(){
+ jQuery("div div");
+ });
+
+ test("jQuery - div div div", function(){
+ jQuery("div div div");
+ });
+
+ test("jQuery - div, div, div", function(){
+ jQuery("div, div, div");
+ });
+
+ test("jQuery - div, a, span", function(){
+ jQuery("div, a, span");
+ });
+
+ test("jQuery - .dialog", function(){
+ jQuery(".dialog");
+ });
+
+ test("jQuery - div.dialog", function(){
+ jQuery("div.dialog");
+ });
+
+ test("jQuery - div .dialog", function(){
+ jQuery("div .dialog");
+ });
+
+ test("jQuery - div.character, div.dialog", function(){
+ jQuery("div.character, div.dialog");
+ });
+
+ test("jQuery - #speech5", function(){
+ jQuery("#speech5");
+ });
+
+ test("jQuery - div#speech5", function(){
+ jQuery("div#speech5");
+ });
+
+ test("jQuery - div #speech5", function(){
+ jQuery("div #speech5");
+ });
+
+ test("jQuery - div.scene div.dialog", function(){
+ jQuery("div.scene div.dialog");
+ });
+
+ test("jQuery - div#scene1 div.dialog div", function(){
+ jQuery("div#scene1 div.dialog div");
+ });
+
+ test("jQuery - #scene1 #speech1", function(){
+ jQuery("#scene1 #speech1");
+ });
+
+ test("jQuery - div[class]", function(){
+ jQuery("div[class]");
+ });
+
+ test("jQuery - div[class=dialog]", function(){
+ jQuery("div[class=dialog]");
+ });
+
+ test("jQuery - div[class^=dia]", function(){
+ jQuery("div[class^=dia]");
+ });
+
+ test("jQuery - div[class$=log]", function(){
+ jQuery("div[class$=log]");
+ });
+
+ test("jQuery - div[class*=sce]", function(){
+ jQuery("div[class*=sce]");
+ });
+
+ test("jQuery - div[class|=dialog]", function(){
+ jQuery("div[class|=dialog]");
+ });
+
+ test("jQuery - div[class~=dialog]", function(){
+ jQuery("div[class~=dialog]");
+ });
+
+endTest();
+};
+</script>
+</head>
+<body>
+ <div class="head">
+ <p><a href="http://www.w3.org/"><img height=48 alt=W3C src="w3c_home.png" width=72></a>
+
+ <h1 id="title">Selectors</h1>
+
+ <h2>W3C Working Draft 15 December 2005</h2>
+
+ <dl>
+
+ <dt>This version:
+
+ <dd><a href="http://www.w3.org/TR/2005/WD-css3-selectors-20051215">
+ http://www.w3.org/TR/2005/WD-css3-selectors-20051215</a>
+
+ <dt>Latest version:
+
+ <dd><a href="http://www.w3.org/TR/css3-selectors">
+ http://www.w3.org/TR/css3-selectors</a>
+
+ <dt>Previous version:
+
+ <dd><a href="http://www.w3.org/TR/2001/CR-css3-selectors-20011113">
+ http://www.w3.org/TR/2001/CR-css3-selectors-20011113</a>
+
+ <dt><a name=editors-list></a>Editors:
+
+ <dd class="vcard"><span class="fn">Daniel Glazman</span> (Invited Expert)</dd>
+
+ <dd class="vcard"><a lang="tr" class="url fn" href="http://www.tantek.com/">Tantek &Ccedil;elik</a> (Invited Expert)
+
+ <dd class="vcard"><a href="mailto:ian@hixie.ch" class="url fn">Ian Hickson</a> (<span
+ class="company"><a href="http://www.google.com/">Google</a></span>)
+
+ <dd class="vcard"><span class="fn">Peter Linss</span> (former editor, <span class="company"><a
+ href="http://www.netscape.com/">Netscape/AOL</a></span>)
+
+ <dd class="vcard"><span class="fn">John Williams</span> (former editor, <span class="company"><a
+ href="http://www.quark.com/">Quark, Inc.</a></span>)
+
+ </dl>
+
+ <p class="copyright"><a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright">
+ Copyright</a> &copy; 2005 <a href="http://www.w3.org/"><abbr
+ title="World Wide Web Consortium">W3C</abbr></a><sup>&reg;</sup>
+ (<a href="http://www.csail.mit.edu/"><abbr title="Massachusetts
+ Institute of Technology">MIT</abbr></a>, <a
+ href="http://www.ercim.org/"><acronym title="European Research
+ Consortium for Informatics and Mathematics">ERCIM</acronym></a>, <a
+ href="http://www.keio.ac.jp/">Keio</a>), All Rights Reserved. W3C
+ <a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">liability</a>,
+ <a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">trademark</a>,
+ <a
+ href="http://www.w3.org/Consortium/Legal/copyright-documents">document
+ use</a> rules apply.
+
+ <hr title="Separator for header">
+
+ </div>
+
+ <h2><a name=abstract></a>Abstract</h2>
+
+ <p><em>Selectors</em> are patterns that match against elements in a
+ tree. Selectors have been optimized for use with HTML and XML, and
+ are designed to be usable in performance-critical code.</p>
+
+ <p><acronym title="Cascading Style Sheets">CSS</acronym> (Cascading
+ Style Sheets) is a language for describing the rendering of <acronym
+ title="Hypertext Markup Language">HTML</acronym> and <acronym
+ title="Extensible Markup Language">XML</acronym> documents on
+ screen, on paper, in speech, etc. CSS uses Selectors for binding
+ style properties to elements in the document. This document
+ describes extensions to the selectors defined in CSS level 2. These
+ extended selectors will be used by CSS level 3.
+
+ <p>Selectors define the following function:</p>
+
+ <pre>expression &#x2217; element &rarr; boolean</pre>
+
+ <p>That is, given an element and a selector, this specification
+ defines whether that element matches the selector.</p>
+
+ <p>These expressions can also be used, for instance, to select a set
+ of elements, or a single element from a set of elements, by
+ evaluating the expression across all the elements in a
+ subtree. <acronym title="Simple Tree Transformation
+ Sheets">STTS</acronym> (Simple Tree Transformation Sheets), a
+ language for transforming XML trees, uses this mechanism. <a href="#refsSTTS">[STTS]</a></p>
+
+ <h2><a name=status></a>Status of this document</h2>
+
+ <p><em>This section describes the status of this document at the
+ time of its publication. Other documents may supersede this
+ document. A list of current W3C publications and the latest revision
+ of this technical report can be found in the <a
+ href="http://www.w3.org/TR/">W3C technical reports index at
+ http://www.w3.org/TR/.</a></em></p>
+
+ <p>This document describes the selectors that already exist in <a
+ href="#refsCSS1"><abbr title="CSS level 1">CSS1</abbr></a> and <a
+ href="#refsCSS21"><abbr title="CSS level 2">CSS2</abbr></a>, and
+ also proposes new selectors for <abbr title="CSS level
+ 3">CSS3</abbr> and other languages that may need them.</p>
+
+ <p>The CSS Working Group doesn't expect that all implementations of
+ CSS3 will have to implement all selectors. Instead, there will
+ probably be a small number of variants of CSS3, called profiles. For
+ example, it may be that only a profile for interactive user agents
+ will include all of the selectors.</p>
+
+ <p>This specification is a last call working draft for the the <a
+ href="http://www.w3.org/Style/CSS/members">CSS Working Group</a>
+ (<a href="/Style/">Style Activity</a>). This
+ document is a revision of the <a
+ href="http://www.w3.org/TR/2001/CR-css3-selectors-20011113/">Candidate
+ Recommendation dated 2001 November 13</a>, and has incorporated
+ implementation feedback received in the past few years. It is
+ expected that this last call will proceed straight to Proposed
+ Recommendation stage since it is believed that interoperability will
+ be demonstrable.</p>
+
+ <p>All persons are encouraged to review and implement this
+ specification and return comments to the (<a
+ href="http://lists.w3.org/Archives/Public/www-style/">archived</a>)
+ public mailing list <a
+ href="http://www.w3.org/Mail/Lists.html#www-style">www-style</a>
+ (see <a href="http://www.w3.org/Mail/Request">instructions</a>). W3C
+ Members can also send comments directly to the CSS Working
+ Group.
+ The deadline for comments is 14 January 2006.</p>
+
+ <p>This is still a draft document and may be updated, replaced, or
+ obsoleted by other documents at any time. It is inappropriate to
+ cite a W3C Working Draft as other than &quot;work in progress&quot;.
+
+ <p>This document may be available in <a
+ href="http://www.w3.org/Style/css3-selectors-updates/translations">translation</a>.
+ The English version of this specification is the only normative
+ version.
+
+ <div class="subtoc">
+
+ <h2 id="test10"><a name=contents>Table of contents</a></h2>
+
+ <ul class="toc">
+ <li class="tocline2"><a href="#context">1. Introduction</a>
+ <ul>
+ <li><a href="#dependencies">1.1. Dependencies</a> </li>
+ <li><a href="#terminology">1.2. Terminology</a> </li>
+ <li><a href="#changesFromCSS2">1.3. Changes from CSS2</a> </li>
+ </ul>
+ <li class="tocline2"><a href="#selectors">2. Selectors</a>
+ <li class="tocline2"><a href="#casesens">3. Case sensitivity</a>
+ <li class="tocline2"><a href="#selector-syntax">4. Selector syntax</a>
+ <li class="tocline2"><a href="#grouping">5. Groups of selectors</a>
+ <li class="tocline2"><a href="#simple-selectors">6. Simple selectors</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#type-selectors">6.1. Type selectors</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#typenmsp">6.1.1. Type selectors and namespaces</a></li>
+ </ul>
+ <li class="tocline3"><a href="#universal-selector">6.2. Universal selector</a>
+ <ul>
+ <li><a href="#univnmsp">6.2.1. Universal selector and namespaces</a></li>
+ </ul>
+ <li class="tocline3"><a href="#attribute-selectors">6.3. Attribute selectors</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#attribute-representation">6.3.1. Representation of attributes and attributes values</a>
+ <li><a href="#attribute-substrings">6.3.2. Substring matching attribute selectors</a>
+ <li class="tocline4"><a href="#attrnmsp">6.3.3. Attribute selectors and namespaces</a>
+ <li class="tocline4"><a href="#def-values">6.3.4. Default attribute values in DTDs</a></li>
+ </ul>
+ <li class="tocline3"><a href="#class-html">6.4. Class selectors</a>
+ <li class="tocline3"><a href="#id-selectors">6.5. ID selectors</a>
+ <li class="tocline3"><a href="#pseudo-classes">6.6. Pseudo-classes</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#dynamic-pseudos">6.6.1. Dynamic pseudo-classes</a>
+ <li class="tocline4"><a href="#target-pseudo">6.6.2. The :target pseudo-class</a>
+ <li class="tocline4"><a href="#lang-pseudo">6.6.3. The :lang() pseudo-class</a>
+ <li class="tocline4"><a href="#UIstates">6.6.4. UI element states pseudo-classes</a>
+ <li class="tocline4"><a href="#structural-pseudos">6.6.5. Structural pseudo-classes</a>
+ <ul>
+ <li><a href="#root-pseudo">:root pseudo-class</a>
+ <li><a href="#nth-child-pseudo">:nth-child() pseudo-class</a>
+ <li><a href="#nth-last-child-pseudo">:nth-last-child()</a>
+ <li><a href="#nth-of-type-pseudo">:nth-of-type() pseudo-class</a>
+ <li><a href="#nth-last-of-type-pseudo">:nth-last-of-type()</a>
+ <li><a href="#first-child-pseudo">:first-child pseudo-class</a>
+ <li><a href="#last-child-pseudo">:last-child pseudo-class</a>
+ <li><a href="#first-of-type-pseudo">:first-of-type pseudo-class</a>
+ <li><a href="#last-of-type-pseudo">:last-of-type pseudo-class</a>
+ <li><a href="#only-child-pseudo">:only-child pseudo-class</a>
+ <li><a href="#only-of-type-pseudo">:only-of-type pseudo-class</a>
+ <li><a href="#empty-pseudo">:empty pseudo-class</a></li>
+ </ul>
+ <li class="tocline4"><a href="#negation">6.6.7. The negation pseudo-class</a></li>
+ </ul>
+ </li>
+ </ul>
+ <li><a href="#pseudo-elements">7. Pseudo-elements</a>
+ <ul>
+ <li><a href="#first-line">7.1. The ::first-line pseudo-element</a>
+ <li><a href="#first-letter">7.2. The ::first-letter pseudo-element</a>
+ <li><a href="#UIfragments">7.3. The ::selection pseudo-element</a>
+ <li><a href="#gen-content">7.4. The ::before and ::after pseudo-elements</a></li>
+ </ul>
+ <li class="tocline2"><a href="#combinators">8. Combinators</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#descendant-combinators">8.1. Descendant combinators</a>
+ <li class="tocline3"><a href="#child-combinators">8.2. Child combinators</a>
+ <li class="tocline3"><a href="#sibling-combinators">8.3. Sibling combinators</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#adjacent-sibling-combinators">8.3.1. Adjacent sibling combinator</a>
+ <li class="tocline4"><a href="#general-sibling-combinators">8.3.2. General sibling combinator</a></li>
+ </ul>
+ </li>
+ </ul>
+ <li class="tocline2"><a href="#specificity">9. Calculating a selector's specificity</a>
+ <li class="tocline2"><a href="#w3cselgrammar">10. The grammar of Selectors</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#grammar">10.1. Grammar</a>
+ <li class="tocline3"><a href="#lex">10.2. Lexical scanner</a></li>
+ </ul>
+ <li class="tocline2"><a href="#downlevel">11. Namespaces and down-level clients</a>
+ <li class="tocline2"><a href="#profiling">12. Profiles</a>
+ <li><a href="#Conformance">13. Conformance and requirements</a>
+ <li><a href="#Tests">14. Tests</a>
+ <li><a href="#ACKS">15. Acknowledgements</a>
+ <li class="tocline2"><a href="#references">16. References</a>
+ </ul>
+
+ </div>
+
+ <h2><a name=context>1. Introduction</a></h2>
+
+ <h3><a name=dependencies></a>1.1. Dependencies</h3>
+
+ <p>Some features of this specification are specific to CSS, or have
+ particular limitations or rules specific to CSS. In this
+ specification, these have been described in terms of CSS2.1. <a
+ href="#refsCSS21">[CSS21]</a></p>
+
+ <h3><a name=terminology></a>1.2. Terminology</h3>
+
+ <p>All of the text of this specification is normative except
+ examples, notes, and sections explicitly marked as
+ non-normative.</p>
+
+ <h3><a name=changesFromCSS2></a>1.3. Changes from CSS2</h3>
+
+ <p><em>This section is non-normative.</em></p>
+
+ <p>The main differences between the selectors in CSS2 and those in
+ Selectors are:
+
+ <ul>
+
+ <li>the list of basic definitions (selector, group of selectors,
+ simple selector, etc.) has been changed; in particular, what was
+ referred to in CSS2 as a simple selector is now called a sequence
+ of simple selectors, and the term "simple selector" is now used for
+ the components of this sequence</li>
+
+ <li>an optional namespace component is now allowed in type element
+ selectors, the universal selector and attribute selectors</li>
+
+ <li>a <a href="#general-sibling-combinators">new combinator</a> has been introduced</li>
+
+ <li>new simple selectors including substring matching attribute
+ selectors, and new pseudo-classes</li>
+
+ <li>new pseudo-elements, and introduction of the "::" convention
+ for pseudo-elements</li>
+
+ <li>the grammar has been rewritten</li>
+
+ <li>profiles to be added to specifications integrating Selectors
+ and defining the set of selectors which is actually supported by
+ each specification</li>
+
+ <li>Selectors are now a CSS3 Module and an independent
+ specification; other specifications can now refer to this document
+ independently of CSS</li>
+
+ <li>the specification now has its own test suite</li>
+
+ </ul>
+
+<h2><a name=selectors></a>2. Selectors</h2>
+
+<p><em>This section is non-normative, as it merely summarizes the
+following sections.</em></p>
+
+<p>A Selector represents a structure. This structure can be used as a
+condition (e.g. in a CSS rule) that determines which elements a
+selector matches in the document tree, or as a flat description of the
+HTML or XML fragment corresponding to that structure.</p>
+
+<p>Selectors may range from simple element names to rich contextual
+representations.</p>
+
+<p>The following table summarizes the Selector syntax:</p>
+
+<table class="selectorsReview">
+ <thead>
+ <tr>
+ <th class="pattern">Pattern</th>
+ <th class="meaning">Meaning</th>
+ <th class="described">Described in section</th>
+ <th class="origin">First defined in CSS level</th></tr>
+ <tbody>
+ <tr>
+ <td class="pattern">*</td>
+ <td class="meaning">any element</td>
+ <td class="described"><a
+ href="#universal-selector">Universal
+ selector</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E</td>
+ <td class="meaning">an element of type E</td>
+ <td class="described"><a
+ href="#type-selectors">Type selector</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E[foo]</td>
+ <td class="meaning">an E element with a "foo" attribute</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value is exactly
+ equal to "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo~="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value is a list of
+ space-separated values, one of which is exactly equal to "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo^="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value begins exactly
+ with the string "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[foo$="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value ends exactly
+ with the string "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[foo*="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value contains the
+ substring "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[hreflang|="en"]</td>
+ <td class="meaning">an E element whose "hreflang" attribute has a hyphen-separated
+ list of values beginning (from the left) with "en"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:root</td>
+ <td class="meaning">an E element, root of the document</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-child(n)</td>
+ <td class="meaning">an E element, the n-th child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-last-child(n)</td>
+ <td class="meaning">an E element, the n-th child of its parent, counting
+ from the last one</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-of-type(n)</td>
+ <td class="meaning">an E element, the n-th sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-last-of-type(n)</td>
+ <td class="meaning">an E element, the n-th sibling of its type, counting
+ from the last one</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:first-child</td>
+ <td class="meaning">an E element, first child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:last-child</td>
+ <td class="meaning">an E element, last child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:first-of-type</td>
+ <td class="meaning">an E element, first sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:last-of-type</td>
+ <td class="meaning">an E element, last sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:only-child</td>
+ <td class="meaning">an E element, only child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:only-of-type</td>
+ <td class="meaning">an E element, only sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:empty</td>
+ <td class="meaning">an E element that has no children (including text
+ nodes)</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:link<br>E:visited</td>
+ <td class="meaning">an E element being the source anchor of a hyperlink of
+ which the target is not yet visited (:link) or already visited
+ (:visited)</td>
+ <td class="described"><a
+ href="#link">The link
+ pseudo-classes</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E:active<br>E:hover<br>E:focus</td>
+ <td class="meaning">an E element during certain user actions</td>
+ <td class="described"><a
+ href="#useraction-pseudos">The user
+ action pseudo-classes</a></td>
+ <td class="origin">1 and 2</td></tr>
+ <tr>
+ <td class="pattern">E:target</td>
+ <td class="meaning">an E element being the target of the referring URI</td>
+ <td class="described"><a
+ href="#target-pseudo">The target
+ pseudo-class</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:lang(fr)</td>
+ <td class="meaning">an element of type E in language "fr" (the document
+ language specifies how language is determined)</td>
+ <td class="described"><a
+ href="#lang-pseudo">The :lang()
+ pseudo-class</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:enabled<br>E:disabled</td>
+ <td class="meaning">a user interface element E which is enabled or
+ disabled</td>
+ <td class="described"><a
+ href="#UIstates">The UI element states
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:checked<!--<br>E:indeterminate--></td>
+ <td class="meaning">a user interface element E which is checked<!-- or in an
+ indeterminate state--> (for instance a radio-button or checkbox)</td>
+ <td class="described"><a
+ href="#UIstates">The UI element states
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E::first-line</td>
+ <td class="meaning">the first formatted line of an E element</td>
+ <td class="described"><a
+ href="#first-line">The ::first-line
+ pseudo-element</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E::first-letter</td>
+ <td class="meaning">the first formatted letter of an E element</td>
+ <td class="described"><a
+ href="#first-letter">The ::first-letter
+ pseudo-element</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E::selection</td>
+ <td class="meaning">the portion of an E element that is currently
+ selected/highlighted by the user</td>
+ <td class="described"><a
+ href="#UIfragments">The UI element
+ fragments pseudo-elements</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E::before</td>
+ <td class="meaning">generated content before an E element</td>
+ <td class="described"><a
+ href="#gen-content">The ::before
+ pseudo-element</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E::after</td>
+ <td class="meaning">generated content after an E element</td>
+ <td class="described"><a
+ href="#gen-content">The ::after
+ pseudo-element</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E.warning</td>
+ <td class="meaning">an E element whose class is
+"warning" (the document language specifies how class is determined).</td>
+ <td class="described"><a
+ href="#class-html">Class
+ selectors</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E#myid</td>
+ <td class="meaning">an E element with ID equal to "myid".</td>
+ <td class="described"><a
+ href="#id-selectors">ID
+ selectors</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E:not(s)</td>
+ <td class="meaning">an E element that does not match simple selector s</td>
+ <td class="described"><a
+ href="#negation">Negation
+ pseudo-class</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E F</td>
+ <td class="meaning">an F element descendant of an E element</td>
+ <td class="described"><a
+ href="#descendant-combinators">Descendant
+ combinator</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E &gt; F</td>
+ <td class="meaning">an F element child of an E element</td>
+ <td class="described"><a
+ href="#child-combinators">Child
+ combinator</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E + F</td>
+ <td class="meaning">an F element immediately preceded by an E element</td>
+ <td class="described"><a
+ href="#adjacent-sibling-combinators">Adjacent sibling combinator</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E ~ F</td>
+ <td class="meaning">an F element preceded by an E element</td>
+ <td class="described"><a
+ href="#general-sibling-combinators">General sibling combinator</a></td>
+ <td class="origin">3</td></tr></tbody></table>
+
+<p>The meaning of each selector is derived from the table above by
+prepending "matches" to the contents of each cell in the "Meaning"
+column.</p>
+
+<h2><a name=casesens>3. Case sensitivity</a></h2>
+
+<p>The case sensitivity of document language element names, attribute
+names, and attribute values in selectors depends on the document
+language. For example, in HTML, element names are case-insensitive,
+but in XML, they are case-sensitive.</p>
+
+<h2><a name=selector-syntax>4. Selector syntax</a></h2>
+
+<p>A <dfn><a name=selector>selector</a></dfn> is a chain of one
+or more <a href="#sequence">sequences of simple selectors</a>
+separated by <a href="#combinators">combinators</a>.</p>
+
+<p>A <dfn><a name=sequence>sequence of simple selectors</a></dfn>
+is a chain of <a href="#simple-selectors-dfn">simple selectors</a>
+that are not separated by a <a href="#combinators">combinator</a>. It
+always begins with a <a href="#type-selectors">type selector</a> or a
+<a href="#universal-selector">universal selector</a>. No other type
+selector or universal selector is allowed in the sequence.</p>
+
+<p>A <dfn><a name=simple-selectors-dfn></a><a
+href="#simple-selectors">simple selector</a></dfn> is either a <a
+href="#type-selectors">type selector</a>, <a
+href="#universal-selector">universal selector</a>, <a
+href="#attribute-selectors">attribute selector</a>, <a
+href="#class-html">class selector</a>, <a
+href="#id-selectors">ID selector</a>, <a
+href="#content-selectors">content selector</a>, or <a
+href="#pseudo-classes">pseudo-class</a>. One <a
+href="#pseudo-elements">pseudo-element</a> may be appended to the last
+sequence of simple selectors.</p>
+
+<p><dfn>Combinators</dfn> are: white space, &quot;greater-than
+sign&quot; (U+003E, <code>&gt;</code>), &quot;plus sign&quot; (U+002B,
+<code>+</code>) and &quot;tilde&quot; (U+007E, <code>~</code>). White
+space may appear between a combinator and the simple selectors around
+it. <a name=whitespace></a>Only the characters "space" (U+0020), "tab"
+(U+0009), "line feed" (U+000A), "carriage return" (U+000D), and "form
+feed" (U+000C) can occur in white space. Other space-like characters,
+such as "em-space" (U+2003) and "ideographic space" (U+3000), are
+never part of white space.</p>
+
+<p>The elements of a document tree that are represented by a selector
+are the <dfn><a name=subject></a>subjects of the selector</dfn>. A
+selector consisting of a single sequence of simple selectors
+represents any element satisfying its requirements. Prepending another
+sequence of simple selectors and a combinator to a sequence imposes
+additional matching constraints, so the subjects of a selector are
+always a subset of the elements represented by the last sequence of
+simple selectors.</p>
+
+<p>An empty selector, containing no sequence of simple selectors and
+no pseudo-element, is an <a href="#Conformance">invalid
+selector</a>.</p>
+
+<h2><a name=grouping>5. Groups of selectors</a></h2>
+
+<p>When several selectors share the same declarations, they may be
+grouped into a comma-separated list. (A comma is U+002C.)</p>
+
+<div class="example">
+<p>CSS examples:</p>
+<p>In this example, we condense three rules with identical
+declarations into one. Thus,</p>
+<pre>h1 { font-family: sans-serif }
+h2 { font-family: sans-serif }
+h3 { font-family: sans-serif }</pre>
+<p>is equivalent to:</p>
+<pre>h1, h2, h3 { font-family: sans-serif }</pre>
+</div>
+
+<p><strong>Warning</strong>: the equivalence is true in this example
+because all the selectors are valid selectors. If just one of these
+selectors were invalid, the entire group of selectors would be
+invalid. This would invalidate the rule for all three heading
+elements, whereas in the former case only one of the three individual
+heading rules would be invalidated.</p>
+
+
+<h2><a name=simple-selectors>6. Simple selectors</a></h2>
+
+<h3><a name=type-selectors>6.1. Type selector</a></h3>
+
+<p>A <dfn>type selector</dfn> is the name of a document language
+element type. A type selector represents an instance of the element
+type in the document tree.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents an <code>h1</code> element in the document tree:</p>
+ <pre>h1</pre>
+</div>
+
+
+<h4><a name=typenmsp>6.1.1. Type selectors and namespaces</a></h4>
+
+<p>Type selectors allow an optional namespace (<a
+href="#refsXMLNAMES">[XMLNAMES]</a>) component. A namespace prefix
+that has been previously declared may be prepended to the element name
+separated by the namespace separator &quot;vertical bar&quot;
+(U+007C, <code>|</code>).</p>
+
+<p>The namespace component may be left empty to indicate that the
+selector is only to represent elements with no declared namespace.</p>
+
+<p>An asterisk may be used for the namespace prefix, indicating that
+the selector represents elements in any namespace (including elements
+with no namespace).</p>
+
+<p>Element type selectors that have no namespace component (no
+namespace separator), represent elements without regard to the
+element's namespace (equivalent to "<code>*|</code>") unless a default
+namespace has been declared. If a default namespace has been declared,
+the selector will represent only elements in the default
+namespace.</p>
+
+<p>A type selector containing a namespace prefix that has not been
+previously declared is an <a href="#Conformance">invalid</a> selector.
+The mechanism for declaring a namespace prefix is left up to the
+language implementing Selectors. In CSS, such a mechanism is defined
+in the General Syntax module.</p>
+
+<p>In a namespace-aware client, element type selectors will only match
+against the <a
+href="http://www.w3.org/TR/REC-xml-names/#NT-LocalPart">local part</a>
+of the element's <a
+href="http://www.w3.org/TR/REC-xml-names/#ns-qualnames">qualified
+name</a>. See <a href="#downlevel">below</a> for notes about matching
+behaviors in down-level clients.</p>
+
+<p>In summary:</p>
+
+<dl>
+ <dt><code>ns|E</code></dt>
+ <dd>elements with name E in namespace ns</dd>
+ <dt><code>*|E</code></dt>
+ <dd>elements with name E in any namespace, including those without any
+ declared namespace</dd>
+ <dt><code>|E</code></dt>
+ <dd>elements with name E without any declared namespace</dd>
+ <dt><code>E</code></dt>
+ <dd>if no default namespace has been specified, this is equivalent to *|E.
+ Otherwise it is equivalent to ns|E where ns is the default namespace.</dd>
+</dl>
+
+<div class="example">
+ <p>CSS examples:</p>
+
+ <pre>@namespace foo url(http://www.example.com);
+ foo|h1 { color: blue }
+ foo|* { color: yellow }
+ |h1 { color: red }
+ *|h1 { color: green }
+ h1 { color: green }</pre>
+
+ <p>The first rule will match only <code>h1</code> elements in the
+ "http://www.example.com" namespace.</p>
+
+ <p>The second rule will match all elements in the
+ "http://www.example.com" namespace.</p>
+
+ <p>The third rule will match only <code>h1</code> elements without
+ any declared namespace.</p>
+
+ <p>The fourth rule will match <code>h1</code> elements in any
+ namespace (including those without any declared namespace).</p>
+
+ <p>The last rule is equivalent to the fourth rule because no default
+ namespace has been defined.</p>
+
+</div>
+
+<h3><a name=universal-selector>6.2. Universal selector</a> </h3>
+
+<p>The <dfn>universal selector</dfn>, written &quot;asterisk&quot;
+(<code>*</code>), represents the qualified name of any element
+type. It represents any single element in the document tree in any
+namespace (including those without any declared namespace) if no
+default namespace has been specified. If a default namespace has been
+specified, see <a href="#univnmsp">Universal selector and
+Namespaces</a> below.</p>
+
+<p>If the universal selector is not the only component of a sequence
+of simple selectors, the <code>*</code> may be omitted.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <ul>
+ <li><code>*[hreflang|=en]</code> and <code>[hreflang|=en]</code> are equivalent,</li>
+ <li><code>*.warning</code> and <code>.warning</code> are equivalent,</li>
+ <li><code>*#myid</code> and <code>#myid</code> are equivalent.</li>
+ </ul>
+</div>
+
+<p class="note"><strong>Note:</strong> it is recommended that the
+<code>*</code>, representing the universal selector, not be
+omitted.</p>
+
+<h4><a name=univnmsp>6.2.1. Universal selector and namespaces</a></h4>
+
+<p>The universal selector allows an optional namespace component. It
+is used as follows:</p>
+
+<dl>
+ <dt><code>ns|*</code></dt>
+ <dd>all elements in namespace ns</dd>
+ <dt><code>*|*</code></dt>
+ <dd>all elements</dd>
+ <dt><code>|*</code></dt>
+ <dd>all elements without any declared namespace</dd>
+ <dt><code>*</code></dt>
+ <dd>if no default namespace has been specified, this is equivalent to *|*.
+ Otherwise it is equivalent to ns|* where ns is the default namespace.</dd>
+</dl>
+
+<p>A universal selector containing a namespace prefix that has not
+been previously declared is an <a href="#Conformance">invalid</a>
+selector. The mechanism for declaring a namespace prefix is left up
+to the language implementing Selectors. In CSS, such a mechanism is
+defined in the General Syntax module.</p>
+
+
+<h3><a name=attribute-selectors>6.3. Attribute selectors</a></h3>
+
+<p>Selectors allow the representation of an element's attributes. When
+a selector is used as an expression to match against an element,
+attribute selectors must be considered to match an element if that
+element has an attribute that matches the attribute represented by the
+attribute selector.</p>
+
+<h4><a name=attribute-representation>6.3.1. Attribute presence and values
+selectors</a></h4>
+
+<p>CSS2 introduced four attribute selectors:</p>
+
+<dl>
+ <dt><code>[att]</code>
+ <dd>Represents an element with the <code>att</code> attribute, whatever the value of
+ the attribute.</dd>
+ <dt><code>[att=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value is exactly
+ "val".</dd>
+ <dt><code>[att~=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value is a <a
+ href="#whitespace">whitespace</a>-separated list of words, one of
+ which is exactly "val". If "val" contains whitespace, it will never
+ represent anything (since the words are <em>separated</em> by
+ spaces).</dd>
+ <dt><code>[att|=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute, its value either
+ being exactly "val" or beginning with "val" immediately followed by
+ "-" (U+002D). This is primarily intended to allow language subcode
+ matches (e.g., the <code>hreflang</code> attribute on the
+ <code>link</code> element in HTML) as described in RFC 3066 (<a
+ href="#refsRFC3066">[RFC3066]</a>). For <code>lang</code> (or
+ <code>xml:lang</code>) language subcode matching, please see <a
+ href="#lang-pseudo">the <code>:lang</code> pseudo-class</a>.</dd>
+</dl>
+
+<p>Attribute values must be identifiers or strings. The
+case-sensitivity of attribute names and values in selectors depends on
+the document language.</p>
+
+<div class="example">
+
+ <p>Examples:</p>
+
+ <p>The following attribute selector represents an <code>h1</code>
+ element that carries the <code>title</code> attribute, whatever its
+ value:</p>
+
+ <pre>h1[title]</pre>
+
+ <p>In the following example, the selector represents a
+ <code>span</code> element whose <code>class</code> attribute has
+ exactly the value "example":</p>
+
+ <pre>span[class="example"]</pre>
+
+ <p>Multiple attribute selectors can be used to represent several
+ attributes of an element, or several conditions on the same
+ attribute. Here, the selector represents a <code>span</code> element
+ whose <code>hello</code> attribute has exactly the value "Cleveland"
+ and whose <code>goodbye</code> attribute has exactly the value
+ "Columbus":</p>
+
+ <pre>span[hello="Cleveland"][goodbye="Columbus"]</pre>
+
+ <p>The following selectors illustrate the differences between "="
+ and "~=". The first selector will represent, for example, the value
+ "copyright copyleft copyeditor" on a <code>rel</code> attribute. The
+ second selector will only represent an <code>a</code> element with
+ an <code>href</code> attribute having the exact value
+ "http://www.w3.org/".</p>
+
+ <pre>a[rel~="copyright"]
+a[href="http://www.w3.org/"]</pre>
+
+ <p>The following selector represents a <code>link</code> element
+ whose <code>hreflang</code> attribute is exactly "fr".</p>
+
+ <pre>link[hreflang=fr]</pre>
+
+ <p>The following selector represents a <code>link</code> element for
+ which the values of the <code>hreflang</code> attribute begins with
+ "en", including "en", "en-US", and "en-cockney":</p>
+
+ <pre>link[hreflang|="en"]</pre>
+
+ <p>Similarly, the following selectors represents a
+ <code>DIALOGUE</code> element whenever it has one of two different
+ values for an attribute <code>character</code>:</p>
+
+ <pre>DIALOGUE[character=romeo]
+DIALOGUE[character=juliet]</pre>
+
+</div>
+
+<h4><a name=attribute-substrings></a>6.3.2. Substring matching attribute
+selectors</h4>
+
+<p>Three additional attribute selectors are provided for matching
+substrings in the value of an attribute:</p>
+
+<dl>
+ <dt><code>[att^=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value begins
+ with the prefix "val".</dd>
+ <dt><code>[att$=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute whose value ends with
+ the suffix "val".</dd>
+ <dt><code>[att*=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute whose value contains
+ at least one instance of the substring "val".</dd>
+</dl>
+
+<p>Attribute values must be identifiers or strings. The
+case-sensitivity of attribute names in selectors depends on the
+document language.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents an HTML <code>object</code>, referencing an
+ image:</p>
+ <pre>object[type^="image/"]</pre>
+ <p>The following selector represents an HTML anchor <code>a</code> with an
+ <code>href</code> attribute whose value ends with ".html".</p>
+ <pre>a[href$=".html"]</pre>
+ <p>The following selector represents an HTML paragraph with a <code>title</code>
+ attribute whose value contains the substring "hello"</p>
+ <pre>p[title*="hello"]</pre>
+</div>
+
+<h4><a name=attrnmsp>6.3.3. Attribute selectors and namespaces</a></h4>
+
+<p>Attribute selectors allow an optional namespace component to the
+attribute name. A namespace prefix that has been previously declared
+may be prepended to the attribute name separated by the namespace
+separator &quot;vertical bar&quot; (<code>|</code>). In keeping with
+the Namespaces in the XML recommendation, default namespaces do not
+apply to attributes, therefore attribute selectors without a namespace
+component apply only to attributes that have no declared namespace
+(equivalent to "<code>|attr</code>"). An asterisk may be used for the
+namespace prefix indicating that the selector is to match all
+attribute names without regard to the attribute's namespace.
+
+<p>An attribute selector with an attribute name containing a namespace
+prefix that has not been previously declared is an <a
+href="#Conformance">invalid</a> selector. The mechanism for declaring
+a namespace prefix is left up to the language implementing Selectors.
+In CSS, such a mechanism is defined in the General Syntax module.
+
+<div class="example">
+ <p>CSS examples:</p>
+ <pre>@namespace foo "http://www.example.com";
+[foo|att=val] { color: blue }
+[*|att] { color: yellow }
+[|att] { color: green }
+[att] { color: green }</pre>
+
+ <p>The first rule will match only elements with the attribute
+ <code>att</code> in the "http://www.example.com" namespace with the
+ value "val".</p>
+
+ <p>The second rule will match only elements with the attribute
+ <code>att</code> regardless of the namespace of the attribute
+ (including no declared namespace).</p>
+
+ <p>The last two rules are equivalent and will match only elements
+ with the attribute <code>att</code> where the attribute is not
+ declared to be in a namespace.</p>
+
+</div>
+
+<h4><a name=def-values>6.3.4. Default attribute values in DTDs</a></h4>
+
+<p>Attribute selectors represent explicitly set attribute values in
+the document tree. Default attribute values may be defined in a DTD or
+elsewhere, but cannot always be selected by attribute
+selectors. Selectors should be designed so that they work even if the
+default values are not included in the document tree.</p>
+
+<p>More precisely, a UA is <em>not</em> required to read an "external
+subset" of the DTD but <em>is</em> required to look for default
+attribute values in the document's "internal subset." (See <a
+href="#refsXML10">[XML10]</a> for definitions of these subsets.)</p>
+
+<p>A UA that recognizes an XML namespace <a
+href="#refsXMLNAMES">[XMLNAMES]</a> is not required to use its
+knowledge of that namespace to treat default attribute values as if
+they were present in the document. (For example, an XHTML UA is not
+required to use its built-in knowledge of the XHTML DTD.)</p>
+
+<p class="note"><strong>Note:</strong> Typically, implementations
+choose to ignore external subsets.</p>
+
+<div class="example">
+<p>Example:</p>
+
+<p>Consider an element EXAMPLE with an attribute "notation" that has a
+default value of "decimal". The DTD fragment might be</p>
+
+<pre class="dtd-example">&lt;!ATTLIST EXAMPLE notation (decimal,octal) "decimal"></pre>
+
+<p>If the style sheet contains the rules</p>
+
+<pre>EXAMPLE[notation=decimal] { /*... default property settings ...*/ }
+EXAMPLE[notation=octal] { /*... other settings...*/ }</pre>
+
+<p>the first rule will not match elements whose "notation" attribute
+is set by default, i.e. not set explicitly. To catch all cases, the
+attribute selector for the default value must be dropped:</p>
+
+<pre>EXAMPLE { /*... default property settings ...*/ }
+EXAMPLE[notation=octal] { /*... other settings...*/ }</pre>
+
+<p>Here, because the selector <code>EXAMPLE[notation=octal]</code> is
+more specific than the tag
+selector alone, the style declarations in the second rule will override
+those in the first for elements that have a "notation" attribute value
+of "octal". Care has to be taken that all property declarations that
+are to apply only to the default case are overridden in the non-default
+cases' style rules.</p>
+
+</div>
+
+<h3><a name=class-html>6.4. Class selectors</a></h3>
+
+<p>Working with HTML, authors may use the period (U+002E,
+<code>.</code>) notation as an alternative to the <code>~=</code>
+notation when representing the <code>class</code> attribute. Thus, for
+HTML, <code>div.value</code> and <code>div[class~=value]</code> have
+the same meaning. The attribute value must immediately follow the
+&quot;period&quot; (<code>.</code>).</p>
+
+<p>UAs may apply selectors using the period (.) notation in XML
+documents if the UA has namespace-specific knowledge that allows it to
+determine which attribute is the &quot;class&quot; attribute for the
+respective namespace. One such example of namespace-specific knowledge
+is the prose in the specification for a particular namespace (e.g. SVG
+1.0 <a href="#refsSVG">[SVG]</a> describes the <a
+href="http://www.w3.org/TR/2001/PR-SVG-20010719/styling.html#ClassAttribute">SVG
+&quot;class&quot; attribute</a> and how a UA should interpret it, and
+similarly MathML 1.01 <a href="#refsMATH">[MATH]</a> describes the <a
+href="http://www.w3.org/1999/07/REC-MathML-19990707/chapter2.html#sec2.3.4">MathML
+&quot;class&quot; attribute</a>.)</p>
+
+<div class="example">
+ <p>CSS examples:</p>
+
+ <p>We can assign style information to all elements with
+ <code>class~="pastoral"</code> as follows:</p>
+
+ <pre>*.pastoral { color: green } /* all elements with class~=pastoral */</pre>
+
+ <p>or just</p>
+
+ <pre>.pastoral { color: green } /* all elements with class~=pastoral */</pre>
+
+ <p>The following assigns style only to H1 elements with
+ <code>class~="pastoral"</code>:</p>
+
+ <pre>H1.pastoral { color: green } /* H1 elements with class~=pastoral */</pre>
+
+ <p>Given these rules, the first H1 instance below would not have
+ green text, while the second would:</p>
+
+ <pre>&lt;H1&gt;Not green&lt;/H1&gt;
+&lt;H1 class="pastoral"&gt;Very green&lt;/H1&gt;</pre>
+
+</div>
+
+<p>To represent a subset of "class" values, each value must be preceded
+by a ".", in any order.</P>
+
+<div class="example">
+
+ <p>CSS example:</p>
+
+ <p>The following rule matches any P element whose "class" attribute
+ has been assigned a list of <a
+ href="#whitespace">whitespace</a>-separated values that includes
+ "pastoral" and "marine":</p>
+
+ <pre>p.pastoral.marine { color: green }</pre>
+
+ <p>This rule matches when <code>class="pastoral blue aqua
+ marine"</code> but does not match for <code>class="pastoral
+ blue"</code>.</p>
+
+</div>
+
+<p class="note"><strong>Note:</strong> Because CSS gives considerable
+power to the "class" attribute, authors could conceivably design their
+own "document language" based on elements with almost no associated
+presentation (such as DIV and SPAN in HTML) and assigning style
+information through the "class" attribute. Authors should avoid this
+practice since the structural elements of a document language often
+have recognized and accepted meanings and author-defined classes may
+not.</p>
+
+<p class="note"><strong>Note:</strong> If an element has multiple
+class attributes, their values must be concatenated with spaces
+between the values before searching for the class. As of this time the
+working group is not aware of any manner in which this situation can
+be reached, however, so this behavior is explicitly non-normative in
+this specification.</p>
+
+<h3><a name=id-selectors>6.5. ID selectors</a></h3>
+
+<p>Document languages may contain attributes that are declared to be
+of type ID. What makes attributes of type ID special is that no two
+such attributes can have the same value in a document, regardless of
+the type of the elements that carry them; whatever the document
+language, an ID typed attribute can be used to uniquely identify its
+element. In HTML all ID attributes are named "id"; XML applications
+may name ID attributes differently, but the same restriction
+applies.</p>
+
+<p>An ID-typed attribute of a document language allows authors to
+assign an identifier to one element instance in the document tree. W3C
+ID selectors represent an element instance based on its identifier. An
+ID selector contains a &quot;number sign&quot; (U+0023,
+<code>#</code>) immediately followed by the ID value, which must be an
+identifier.</p>
+
+<p>Selectors does not specify how a UA knows the ID-typed attribute of
+an element. The UA may, e.g., read a document's DTD, have the
+information hard-coded or ask the user.
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following ID selector represents an <code>h1</code> element
+ whose ID-typed attribute has the value "chapter1":</p>
+ <pre>h1#chapter1</pre>
+ <p>The following ID selector represents any element whose ID-typed
+ attribute has the value "chapter1":</p>
+ <pre>#chapter1</pre>
+ <p>The following selector represents any element whose ID-typed
+ attribute has the value "z98y".</p>
+ <pre>*#z98y</pre>
+</div>
+
+<p class="note"><strong>Note.</strong> In XML 1.0 <a
+href="#refsXML10">[XML10]</a>, the information about which attribute
+contains an element's IDs is contained in a DTD or a schema. When
+parsing XML, UAs do not always read the DTD, and thus may not know
+what the ID of an element is (though a UA may have namespace-specific
+knowledge that allows it to determine which attribute is the ID
+attribute for that namespace). If a style sheet designer knows or
+suspects that a UA may not know what the ID of an element is, he
+should use normal attribute selectors instead:
+<code>[name=p371]</code> instead of <code>#p371</code>. Elements in
+XML 1.0 documents without a DTD do not have IDs at all.</p>
+
+<p>If an element has multiple ID attributes, all of them must be
+treated as IDs for that element for the purposes of the ID
+selector. Such a situation could be reached using mixtures of xml:id,
+DOM3 Core, XML DTDs, and namespace-specific knowledge.</p>
+
+<h3><a name=pseudo-classes>6.6. Pseudo-classes</a></h3>
+
+<p>The pseudo-class concept is introduced to permit selection based on
+information that lies outside of the document tree or that cannot be
+expressed using the other simple selectors.</p>
+
+<p>A pseudo-class always consists of a &quot;colon&quot;
+(<code>:</code>) followed by the name of the pseudo-class and
+optionally by a value between parentheses.</p>
+
+<p>Pseudo-classes are allowed in all sequences of simple selectors
+contained in a selector. Pseudo-classes are allowed anywhere in
+sequences of simple selectors, after the leading type selector or
+universal selector (possibly omitted). Pseudo-class names are
+case-insensitive. Some pseudo-classes are mutually exclusive, while
+others can be applied simultaneously to the same
+element. Pseudo-classes may be dynamic, in the sense that an element
+may acquire or lose a pseudo-class while a user interacts with the
+document.</p>
+
+
+<h4><a name=dynamic-pseudos>6.6.1. Dynamic pseudo-classes</a></h4>
+
+<p>Dynamic pseudo-classes classify elements on characteristics other
+than their name, attributes, or content, in principle characteristics
+that cannot be deduced from the document tree.</p>
+
+<p>Dynamic pseudo-classes do not appear in the document source or
+document tree.</p>
+
+
+<h5>The <a name=link>link pseudo-classes: :link and :visited</a></h5>
+
+<p>User agents commonly display unvisited links differently from
+previously visited ones. Selectors
+provides the pseudo-classes <code>:link</code> and
+<code>:visited</code> to distinguish them:</p>
+
+<ul>
+ <li>The <code>:link</code> pseudo-class applies to links that have
+ not yet been visited.</li>
+ <li>The <code>:visited</code> pseudo-class applies once the link has
+ been visited by the user. </li>
+</ul>
+
+<p>After some amount of time, user agents may choose to return a
+visited link to the (unvisited) ':link' state.</p>
+
+<p>The two states are mutually exclusive.</p>
+
+<div class="example">
+
+ <p>Example:</p>
+
+ <p>The following selector represents links carrying class
+ <code>external</code> and already visited:</p>
+
+ <pre>a.external:visited</pre>
+
+</div>
+
+<p class="note"><strong>Note:</strong> It is possible for style sheet
+authors to abuse the :link and :visited pseudo-classes to determine
+which sites a user has visited without the user's consent.
+
+<p>UAs may therefore treat all links as unvisited links, or implement
+other measures to preserve the user's privacy while rendering visited
+and unvisited links differently.</p>
+
+<h5>The <a name=useraction-pseudos>user action pseudo-classes
+:hover, :active, and :focus</a></h5>
+
+<p>Interactive user agents sometimes change the rendering in response
+to user actions. Selectors provides
+three pseudo-classes for the selection of an element the user is
+acting on.</p>
+
+<ul>
+
+ <li>The <code>:hover</code> pseudo-class applies while the user
+ designates an element with a pointing device, but does not activate
+ it. For example, a visual user agent could apply this pseudo-class
+ when the cursor (mouse pointer) hovers over a box generated by the
+ element. User agents not that do not support <a
+ href="http://www.w3.org/TR/REC-CSS2/media.html#interactive-media-group">interactive
+ media</a> do not have to support this pseudo-class. Some conforming
+ user agents that support <a
+ href="http://www.w3.org/TR/REC-CSS2/media.html#interactive-media-group">interactive
+ media</a> may not be able to support this pseudo-class (e.g., a pen
+ device that does not detect hovering).</li>
+
+ <li>The <code>:active</code> pseudo-class applies while an element
+ is being activated by the user. For example, between the times the
+ user presses the mouse button and releases it.</li>
+
+ <li>The <code>:focus</code> pseudo-class applies while an element
+ has the focus (accepts keyboard or mouse events, or other forms of
+ input). </li>
+
+</ul>
+
+<p>There may be document language or implementation specific limits on
+which elements can become <code>:active</code> or acquire
+<code>:focus</code>.</p>
+
+<p>These pseudo-classes are not mutually exclusive. An element may
+match several pseudo-classes at the same time.</p>
+
+<p>Selectors doesn't define if the parent of an element that is
+':active' or ':hover' is also in that state.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <pre>a:link /* unvisited links */
+a:visited /* visited links */
+a:hover /* user hovers */
+a:active /* active links */</pre>
+ <p>An example of combining dynamic pseudo-classes:</p>
+ <pre>a:focus
+a:focus:hover</pre>
+ <p>The last selector matches <code>a</code> elements that are in
+ the pseudo-class :focus and in the pseudo-class :hover.</p>
+</div>
+
+<p class="note"><strong>Note:</strong> An element can be both ':visited'
+and ':active' (or ':link' and ':active').</p>
+
+<h4><a name=target-pseudo>6.6.2. The target pseudo-class :target</a></h4>
+
+<p>Some URIs refer to a location within a resource. This kind of URI
+ends with a &quot;number sign&quot; (#) followed by an anchor
+identifier (called the fragment identifier).</p>
+
+<p>URIs with fragment identifiers link to a certain element within the
+document, known as the target element. For instance, here is a URI
+pointing to an anchor named <code>section_2</code> in an HTML
+document:</p>
+
+<pre>http://example.com/html/top.html#section_2</pre>
+
+<p>A target element can be represented by the <code>:target</code>
+pseudo-class. If the document's URI has no fragment identifier, then
+the document has no target element.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <pre>p.note:target</pre>
+ <p>This selector represents a <code>p</code> element of class
+ <code>note</code> that is the target element of the referring
+ URI.</p>
+</div>
+
+<div class="example">
+ <p>CSS example:</p>
+ <p>Here, the <code>:target</code> pseudo-class is used to make the
+ target element red and place an image before it, if there is one:</p>
+ <pre>*:target { color : red }
+*:target::before { content : url(target.png) }</pre>
+</div>
+
+<h4><a name=lang-pseudo>6.6.3. The language pseudo-class :lang</a></h4>
+
+<p>If the document language specifies how the human language of an
+element is determined, it is possible to write selectors that
+represent an element based on its language. For example, in HTML <a
+href="#refsHTML4">[HTML4]</a>, the language is determined by a
+combination of the <code>lang</code> attribute, the <code>meta</code>
+element, and possibly by information from the protocol (such as HTTP
+headers). XML uses an attribute called <code>xml:lang</code>, and
+there may be other document language-specific methods for determining
+the language.</p>
+
+<p>The pseudo-class <code>:lang(C)</code> represents an element that
+is in language C. Whether an element is represented by a
+<code>:lang()</code> selector is based solely on the identifier C
+being either equal to, or a hyphen-separated substring of, the
+element's language value, in the same way as if performed by the <a
+href="#attribute-representation">'|='</a> operator in attribute
+selectors. The identifier C does not have to be a valid language
+name.</p>
+
+<p>C must not be empty. (If it is, the selector is invalid.)</p>
+
+<p class="note"><strong>Note:</strong> It is recommended that
+documents and protocols indicate language using codes from RFC 3066 <a
+href="#refsRFC3066">[RFC3066]</a> or its successor, and by means of
+"xml:lang" attributes in the case of XML-based documents <a
+href="#refsXML10">[XML10]</a>. See <a
+href="http://www.w3.org/International/questions/qa-lang-2or3.html">
+"FAQ: Two-letter or three-letter language codes."</a></p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The two following selectors represent an HTML document that is in
+ Belgian, French, or German. The two next selectors represent
+ <code>q</code> quotations in an arbitrary element in Belgian, French,
+ or German.</p>
+ <pre>html:lang(fr-be)
+html:lang(de)
+:lang(fr-be) &gt; q
+:lang(de) &gt; q</pre>
+</div>
+
+<h4><a name=UIstates>6.6.4. The UI element states pseudo-classes</a></h4>
+
+<h5><a name=enableddisabled>The :enabled and :disabled pseudo-classes</a></h5>
+
+<p>The <code>:enabled</code> pseudo-class allows authors to customize
+the look of user interface elements that are enabled &mdash; which the
+user can select or activate in some fashion (e.g. clicking on a button
+with a mouse). There is a need for such a pseudo-class because there
+is no way to programmatically specify the default appearance of say,
+an enabled <code>input</code> element without also specifying what it
+would look like when it was disabled.</p>
+
+<p>Similar to <code>:enabled</code>, <code>:disabled</code> allows the
+author to specify precisely how a disabled or inactive user interface
+element should look.</p>
+
+<p>Most elements will be neither enabled nor disabled. An element is
+enabled if the user can either activate it or transfer the focus to
+it. An element is disabled if it could be enabled, but the user cannot
+presently activate it or transfer focus to it.</p>
+
+
+<h5><a name=checked>The :checked pseudo-class</a></h5>
+
+<p>Radio and checkbox elements can be toggled by the user. Some menu
+items are "checked" when the user selects them. When such elements are
+toggled "on" the <code>:checked</code> pseudo-class applies. The
+<code>:checked</code> pseudo-class initially applies to such elements
+that have the HTML4 <code>selected</code> and <code>checked</code>
+attributes as described in <a
+href="http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.2.1">Section
+17.2.1 of HTML4</a>, but of course the user can toggle "off" such
+elements in which case the <code>:checked</code> pseudo-class would no
+longer apply. While the <code>:checked</code> pseudo-class is dynamic
+in nature, and is altered by user action, since it can also be based
+on the presence of the semantic HTML4 <code>selected</code> and
+<code>checked</code> attributes, it applies to all media.
+
+
+<h5><a name=indeterminate>The :indeterminate pseudo-class</a></h5>
+
+<div class="note">
+
+<p>Radio and checkbox elements can be toggled by the user, but are
+sometimes in an indeterminate state, neither checked nor unchecked.
+This can be due to an element attribute, or DOM manipulation.</p>
+
+<p>A future version of this specification may introduce an
+<code>:indeterminate</code> pseudo-class that applies to such elements.
+<!--While the <code>:indeterminate</code> pseudo-class is dynamic in
+nature, and is altered by user action, since it can also be based on
+the presence of an element attribute, it applies to all media.</p>
+
+<p>Components of a radio-group initialized with no pre-selected choice
+are an example of :indeterminate state.--></p>
+
+</div>
+
+
+<h4><a name=structural-pseudos>6.6.5. Structural pseudo-classes</a></h4>
+
+<p>Selectors introduces the concept of <dfn>structural
+pseudo-classes</dfn> to permit selection based on extra information that lies in
+the document tree but cannot be represented by other simple selectors or
+combinators.
+
+<p>Note that standalone pieces of PCDATA (text nodes in the DOM) are
+not counted when calculating the position of an element in the list of
+children of its parent. When calculating the position of an element in
+the list of children of its parent, the index numbering starts at 1.
+
+
+<h5><a name=root-pseudo>:root pseudo-class</a></h5>
+
+<p>The <code>:root</code> pseudo-class represents an element that is
+the root of the document. In HTML 4, this is always the
+<code>HTML</code> element.
+
+
+<h5><a name=nth-child-pseudo>:nth-child() pseudo-class</a></h5>
+
+<p>The
+<code>:nth-child(<var>a</var><code>n</code>+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings
+<strong>before</strong> it in the document tree, for a given positive
+integer or zero value of <code>n</code>, and has a parent element. In
+other words, this matches the <var>b</var>th child of an element after
+all the children have been split into groups of <var>a</var> elements
+each. For example, this allows the selectors to address every other
+row in a table, and could be used to alternate the color
+of paragraph text in a cycle of four. The <var>a</var> and
+<var>b</var> values must be zero, negative integers or positive
+integers. The index of the first child of an element is 1.
+
+<p>In addition to this, <code>:nth-child()</code> can take
+'<code>odd</code>' and '<code>even</code>' as arguments instead.
+'<code>odd</code>' has the same signification as <code>2n+1</code>,
+and '<code>even</code>' has the same signification as <code>2n</code>.
+
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-child(2n+1) /* represents every odd row of an HTML table */
+tr:nth-child(odd) /* same */
+tr:nth-child(2n) /* represents every even row of an HTML table */
+tr:nth-child(even) /* same */
+
+/* Alternate paragraph colours in CSS */
+p:nth-child(4n+1) { color: navy; }
+p:nth-child(4n+2) { color: green; }
+p:nth-child(4n+3) { color: maroon; }
+p:nth-child(4n+4) { color: purple; }</pre>
+</div>
+
+<p>When <var>a</var>=0, no repeating is used, so for example
+<code>:nth-child(0n+5)</code> matches only the fifth child. When
+<var>a</var>=0, the <var>a</var><code>n</code> part need not be
+included, so the syntax simplifies to
+<code>:nth-child(<var>b</var>)</code> and the last example simplifies
+to <code>:nth-child(5)</code>.
+
+<div class="example">
+<p>Examples:</p>
+<pre>foo:nth-child(0n+1) /* represents an element foo, first child of its parent element */
+foo:nth-child(1) /* same */</pre>
+</div>
+
+<p>When <var>a</var>=1, the number may be omitted from the rule.
+
+<div class="example">
+<p>Examples:</p>
+<p>The following selectors are therefore equivalent:</p>
+<pre>bar:nth-child(1n+0) /* represents all bar elements, specificity (0,1,1) */
+bar:nth-child(n+0) /* same */
+bar:nth-child(n) /* same */
+bar /* same but lower specificity (0,0,1) */</pre>
+</div>
+
+<p>If <var>b</var>=0, then every <var>a</var>th element is picked. In
+such a case, the <var>b</var> part may be omitted.
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-child(2n+0) /* represents every even row of an HTML table */
+tr:nth-child(2n) /* same */</pre>
+</div>
+
+<p>If both <var>a</var> and <var>b</var> are equal to zero, the
+pseudo-class represents no element in the document tree.</p>
+
+<p>The value <var>a</var> can be negative, but only the positive
+values of <var>a</var><code>n</code>+<var>b</var>, for
+<code>n</code>&ge;0, may represent an element in the document
+tree.</p>
+
+<div class="example">
+<p>Example:</p>
+<pre>html|tr:nth-child(-n+6) /* represents the 6 first rows of XHTML tables */</pre>
+</div>
+
+<p>When the value <var>b</var> is negative, the "+" character in the
+expression must be removed (it is effectively replaced by the "-"
+character indicating the negative value of <var>b</var>).</p>
+
+<div class="example">
+<p>Examples:</p>
+<pre>:nth-child(10n-1) /* represents the 9th, 19th, 29th, etc, element */
+:nth-child(10n+9) /* Same */
+:nth-child(10n+-1) /* Syntactically invalid, and would be ignored */</pre>
+</div>
+
+
+<h5><a name=nth-last-child-pseudo>:nth-last-child() pseudo-class</a></h5>
+
+<p>The <code>:nth-last-child(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings
+<strong>after</strong> it in the document tree, for a given positive
+integer or zero value of <code>n</code>, and has a parent element. See
+<code>:nth-child()</code> pseudo-class for the syntax of its argument.
+It also accepts the '<code>even</code>' and '<code>odd</code>' values
+as arguments.
+
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-last-child(-n+2) /* represents the two last rows of an HTML table */
+
+foo:nth-last-child(odd) /* represents all odd foo elements in their parent element,
+ counting from the last one */</pre>
+</div>
+
+
+<h5><a name=nth-of-type-pseudo>:nth-of-type() pseudo-class</a></h5>
+
+<p>The <code>:nth-of-type(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings with the same
+element name <strong>before</strong> it in the document tree, for a
+given zero or positive integer value of <code>n</code>, and has a
+parent element. In other words, this matches the <var>b</var>th child
+of that type after all the children of that type have been split into
+groups of a elements each. See <code>:nth-child()</code> pseudo-class
+for the syntax of its argument. It also accepts the
+'<code>even</code>' and '<code>odd</code>' values.
+
+
+<div class="example">
+<p>CSS example:</p>
+<p>This allows an author to alternate the position of floated images:</p>
+<pre>img:nth-of-type(2n+1) { float: right; }
+img:nth-of-type(2n) { float: left; }</pre>
+</div>
+
+
+<h5><a name=nth-last-of-type-pseudo>:nth-last-of-type() pseudo-class</a></h5>
+
+<p>The <code>:nth-last-of-type(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings with the same
+element name <strong>after</strong> it in the document tree, for a
+given zero or positive integer value of <code>n</code>, and has a
+parent element. See <code>:nth-child()</code> pseudo-class for the
+syntax of its argument. It also accepts the '<code>even</code>' and '<code>odd</code>' values.
+
+
+<div class="example">
+ <p>Example:</p>
+ <p>To represent all <code>h2</code> children of an XHTML
+ <code>body</code> except the first and last, one could use the
+ following selector:</p>
+ <pre>body &gt; h2:nth-of-type(n+2):nth-last-of-type(n+2)</pre>
+ <p>In this case, one could also use <code>:not()</code>, although the
+ selector ends up being just as long:</p>
+ <pre>body &gt; h2:not(:first-of-type):not(:last-of-type)</pre>
+</div>
+
+
+<h5><a name=first-child-pseudo>:first-child pseudo-class</a></h5>
+
+<p>Same as <code>:nth-child(1)</code>. The <code>:first-child</code> pseudo-class
+represents an element that is the first child of some other element.
+
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element that is
+ the first child of a <code>div</code> element:</p>
+ <pre>div &gt; p:first-child</pre>
+ <p>This selector can represent the <code>p</code> inside the
+ <code>div</code> of the following fragment:</p>
+ <pre>&lt;p&gt; The last P before the note.&lt;/p&gt;
+&lt;div class="note"&gt;
+ &lt;p&gt; The first P inside the note.&lt;/p&gt;
+&lt;/div&gt;</pre>but cannot represent the second <code>p</code> in the following
+fragment:
+ <pre>&lt;p&gt; The last P before the note.&lt;/p&gt;
+&lt;div class="note"&gt;
+ &lt;h2&gt; Note &lt;/h2&gt;
+ &lt;p&gt; The first P inside the note.&lt;/p&gt;
+&lt;/div&gt;</pre>
+ <p>The following two selectors are usually equivalent:</p>
+ <pre>* &gt; a:first-child /* a is first child of any element */
+a:first-child /* Same (assuming a is not the root element) */</pre>
+</div>
+
+<h5><a name=last-child-pseudo>:last-child pseudo-class</a></h5>
+
+<p>Same as <code>:nth-last-child(1)</code>. The <code>:last-child</code> pseudo-class
+represents an element that is the last child of some other element.
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents a list item <code>li</code> that
+ is the last child of an ordered list <code>ol</code>.
+ <pre>ol &gt; li:last-child</pre>
+</div>
+
+<h5><a name=first-of-type-pseudo>:first-of-type pseudo-class</a></h5>
+
+<p>Same as <code>:nth-of-type(1)</code>. The <code>:first-of-type</code> pseudo-class
+represents an element that is the first sibling of its type in the list of
+children of its parent element.
+
+<div class="example">
+<p>Example:</p>
+<p>The following selector represents a definition title
+<code>dt</code> inside a definition list <code>dl</code>, this
+<code>dt</code> being the first of its type in the list of children of
+its parent element.</p>
+<pre>dl dt:first-of-type</pre>
+<p>It is a valid description for the first two <code>dt</code>
+elements in the following example but not for the third one:</p>
+<pre>&lt;dl&gt;
+ &lt;dt&gt;gigogne&lt;/dt&gt;
+ &lt;dd&gt;
+ &lt;dl&gt;
+ &lt;dt&gt;fus&eacute;e&lt;/dt&gt;
+ &lt;dd&gt;multistage rocket&lt;/dd&gt;
+ &lt;dt&gt;table&lt;/dt&gt;
+ &lt;dd&gt;nest of tables&lt;/dd&gt;
+ &lt;/dl&gt;
+ &lt;/dd&gt;
+&lt;/dl&gt;</pre>
+</div>
+
+<h5><a name=last-of-type-pseudo>:last-of-type pseudo-class</a></h5>
+
+<p>Same as <code>:nth-last-of-type(1)</code>. The
+<code>:last-of-type</code> pseudo-class represents an element that is
+the last sibling of its type in the list of children of its parent
+element.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents the last data cell
+ <code>td</code> of a table row.</p>
+ <pre>tr &gt; td:last-of-type</pre>
+</div>
+
+<h5><a name=only-child-pseudo>:only-child pseudo-class</a></h5>
+
+<p>Represents an element that has a parent element and whose parent
+element has no other element children. Same as
+<code>:first-child:last-child</code> or
+<code>:nth-child(1):nth-last-child(1)</code>, but with a lower
+specificity.</p>
+
+<h5><a name=only-of-type-pseudo>:only-of-type pseudo-class</a></h5>
+
+<p>Represents an element that has a parent element and whose parent
+element has no other element children with the same element name. Same
+as <code>:first-of-type:last-of-type</code> or
+<code>:nth-of-type(1):nth-last-of-type(1)</code>, but with a lower
+specificity.</p>
+
+
+<h5><a name=empty-pseudo></a>:empty pseudo-class</h5>
+
+<p>The <code>:empty</code> pseudo-class represents an element that has
+no children at all. In terms of the DOM, only element nodes and text
+nodes (including CDATA nodes and entity references) whose data has a
+non-zero length must be considered as affecting emptiness; comments,
+PIs, and other nodes must not affect whether an element is considered
+empty or not.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p><code>p:empty</code> is a valid representation of the following fragment:</p>
+ <pre>&lt;p&gt;&lt;/p&gt;</pre>
+ <p><code>foo:empty</code> is not a valid representation for the
+ following fragments:</p>
+ <pre>&lt;foo&gt;bar&lt;/foo&gt;</pre>
+ <pre>&lt;foo&gt;&lt;bar&gt;bla&lt;/bar&gt;&lt;/foo&gt;</pre>
+ <pre>&lt;foo&gt;this is not &lt;bar&gt;:empty&lt;/bar&gt;&lt;/foo&gt;</pre>
+</div>
+
+<h4><a name=content-selectors>6.6.6. Blank</a></h4> <!-- It's the Return of Appendix H!!! Run away! -->
+
+<p>This section intentionally left blank.</p>
+<!-- (used to be :contains()) -->
+
+<h4><a name=negation></a>6.6.7. The negation pseudo-class</h4>
+
+<p>The negation pseudo-class, <code>:not(<var>X</var>)</code>, is a
+functional notation taking a <a href="#simple-selectors-dfn">simple
+selector</a> (excluding the negation pseudo-class itself and
+pseudo-elements) as an argument. It represents an element that is not
+represented by the argument.
+
+<!-- pseudo-elements are not simple selectors, so the above paragraph
+may be a bit confusing -->
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following CSS selector matches all <code>button</code>
+ elements in an HTML document that are not disabled.</p>
+ <pre>button:not([DISABLED])</pre>
+ <p>The following selector represents all but <code>FOO</code>
+ elements.</p>
+ <pre>*:not(FOO)</pre>
+ <p>The following group of selectors represents all HTML elements
+ except links.</p>
+ <pre>html|*:not(:link):not(:visited)</pre>
+</div>
+
+<p>Default namespace declarations do not affect the argument of the
+negation pseudo-class unless the argument is a universal selector or a
+type selector.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>Assuming that the default namespace is bound to
+ "http://example.com/", the following selector represents all
+ elements that are not in that namespace:</p>
+ <pre>*|*:not(*)</pre>
+ <p>The following CSS selector matches any element being hovered,
+ regardless of its namespace. In particular, it is not limited to
+ only matching elements in the default namespace that are not being
+ hovered, and elements not in the default namespace don't match the
+ rule when they <em>are</em> being hovered.</p>
+ <pre>*|*:not(:hover)</pre>
+</div>
+
+<p class="note"><strong>Note</strong>: the :not() pseudo allows
+useless selectors to be written. For instance <code>:not(*|*)</code>,
+which represents no element at all, or <code>foo:not(bar)</code>,
+which is equivalent to <code>foo</code> but with a higher
+specificity.</p>
+
+<h3><a name=pseudo-elements>7. Pseudo-elements</a></h3>
+
+<p>Pseudo-elements create abstractions about the document tree beyond
+those specified by the document language. For instance, document
+languages do not offer mechanisms to access the first letter or first
+line of an element's content. Pseudo-elements allow designers to refer
+to this otherwise inaccessible information. Pseudo-elements may also
+provide designers a way to refer to content that does not exist in the
+source document (e.g., the <code>::before</code> and
+<code>::after</code> pseudo-elements give access to generated
+content).</p>
+
+<p>A pseudo-element is made of two colons (<code>::</code>) followed
+by the name of the pseudo-element.</p>
+
+<p>This <code>::</code> notation is introduced by the current document
+in order to establish a discrimination between pseudo-classes and
+pseudo-elements. For compatibility with existing style sheets, user
+agents must also accept the previous one-colon notation for
+pseudo-elements introduced in CSS levels 1 and 2 (namely,
+<code>:first-line</code>, <code>:first-letter</code>,
+<code>:before</code> and <code>:after</code>). This compatibility is
+not allowed for the new pseudo-elements introduced in CSS level 3.</p>
+
+<p>Only one pseudo-element may appear per selector, and if present it
+must appear after the sequence of simple selectors that represents the
+<a href="#subject">subjects</a> of the selector. <span class="note">A
+future version of this specification may allow multiple
+pesudo-elements per selector.</span></p>
+
+<h4><a name=first-line>7.1. The ::first-line pseudo-element</a></h4>
+
+<p>The <code>::first-line</code> pseudo-element describes the contents
+of the first formatted line of an element.
+
+<div class="example">
+<p>CSS example:</p>
+<pre>p::first-line { text-transform: uppercase }</pre>
+<p>The above rule means "change the letters of the first line of every
+paragraph to uppercase".</p>
+</div>
+
+<p>The selector <code>p::first-line</code> does not match any real
+HTML element. It does match a pseudo-element that conforming user
+agents will insert at the beginning of every paragraph.</p>
+
+<p>Note that the length of the first line depends on a number of
+factors, including the width of the page, the font size, etc. Thus,
+an ordinary HTML paragraph such as:</p>
+
+<pre>
+&lt;P&gt;This is a somewhat long HTML
+paragraph that will be broken into several
+lines. The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>the lines of which happen to be broken as follows:
+
+<pre>
+THIS IS A SOMEWHAT LONG HTML PARAGRAPH THAT
+will be broken into several lines. The first
+line will be identified by a fictional tag
+sequence. The other lines will be treated as
+ordinary lines in the paragraph.
+</pre>
+
+<p>This paragraph might be "rewritten" by user agents to include the
+<em>fictional tag sequence</em> for <code>::first-line</code>. This
+fictional tag sequence helps to show how properties are inherited.</p>
+
+<pre>
+&lt;P&gt;<b>&lt;P::first-line&gt;</b> This is a somewhat long HTML
+paragraph that <b>&lt;/P::first-line&gt;</b> will be broken into several
+lines. The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>If a pseudo-element breaks up a real element, the desired effect
+can often be described by a fictional tag sequence that closes and
+then re-opens the element. Thus, if we mark up the previous paragraph
+with a <code>span</code> element:</p>
+
+<pre>
+&lt;P&gt;<b>&lt;SPAN class="test"&gt;</b> This is a somewhat long HTML
+paragraph that will be broken into several
+lines.<b>&lt;/SPAN&gt;</b> The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>the user agent could simulate start and end tags for
+<code>span</code> when inserting the fictional tag sequence for
+<code>::first-line</code>.
+
+<pre>
+&lt;P&gt;&lt;P::first-line&gt;<b>&lt;SPAN class="test"&gt;</b> This is a
+somewhat long HTML
+paragraph that will <b>&lt;/SPAN&gt;</b>&lt;/P::first-line&gt;<b>&lt;SPAN class="test"&gt;</b> be
+broken into several
+lines.<b>&lt;/SPAN&gt;</b> The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>In CSS, the <code>::first-line</code> pseudo-element can only be
+attached to a block-level element, an inline-block, a table-caption,
+or a table-cell.</p>
+
+<p><a name="first-formatted-line"></a>The "first formatted line" of an
+element may occur inside a
+block-level descendant in the same flow (i.e., a block-level
+descendant that is not positioned and not a float). E.g., the first
+line of the <code>div</code> in <code>&lt;DIV>&lt;P>This
+line...&lt;/P>&lt/DIV></code> is the first line of the <code>p</code> (assuming
+that both <code>p</code> and <code>div</code> are block-level).
+
+<p>The first line of a table-cell or inline-block cannot be the first
+formatted line of an ancestor element. Thus, in <code>&lt;DIV&gt;&lt;P
+STYLE="display: inline-block">Hello&lt;BR&gt;Goodbye&lt;/P&gt;
+etcetera&lt;/DIV&gt;</code> the first formatted line of the
+<code>div</code> is not the line "Hello".
+
+<p class="note">Note that the first line of the <code>p</code> in this
+fragment: <code>&lt;p&gt&lt;br&gt;First...</code> doesn't contain any
+letters (assuming the default style for <code>br</code> in HTML
+4). The word "First" is not on the first formatted line.
+
+<p>A UA should act as if the fictional start tags of the
+<code>::first-line</code> pseudo-elements were nested just inside the
+innermost enclosing block-level element. (Since CSS1 and CSS2 were
+silent on this case, authors should not rely on this behavior.) Here
+is an example. The fictional tag sequence for</p>
+
+<pre>
+&lt;DIV>
+ &lt;P>First paragraph&lt;/P>
+ &lt;P>Second paragraph&lt;/P>
+&lt;/DIV>
+</pre>
+
+<p>is</p>
+
+<pre>
+&lt;DIV>
+ &lt;P>&lt;DIV::first-line>&lt;P::first-line>First paragraph&lt;/P::first-line>&lt;/DIV::first-line>&lt;/P>
+ &lt;P>&lt;P::first-line>Second paragraph&lt;/P::first-line>&lt;/P>
+&lt;/DIV>
+</pre>
+
+<p>The <code>::first-line</code> pseudo-element is similar to an
+inline-level element, but with certain restrictions. In CSS, the
+following properties apply to a <code>::first-line</code>
+pseudo-element: font properties, color property, background
+properties, 'word-spacing', 'letter-spacing', 'text-decoration',
+'vertical-align', 'text-transform', 'line-height'. UAs may apply other
+properties as well.</p>
+
+
+<h4><a name=first-letter>7.2. The ::first-letter pseudo-element</a></h4>
+
+<p>The <code>::first-letter</code> pseudo-element represents the first
+letter of the first line of a block, if it is not preceded by any
+other content (such as images or inline tables) on its line. The
+::first-letter pseudo-element may be used for "initial caps" and "drop
+caps", which are common typographical effects. This type of initial
+letter is similar to an inline-level element if its 'float' property
+is 'none'; otherwise, it is similar to a floated element.</p>
+
+<p>In CSS, these are the properties that apply to <code>::first-letter</code>
+pseudo-elements: font properties, 'text-decoration', 'text-transform',
+'letter-spacing', 'word-spacing' (when appropriate), 'line-height',
+'float', 'vertical-align' (only if 'float' is 'none'), margin
+properties, padding properties, border properties, color property,
+background properties. UAs may apply other properties as well. To
+allow UAs to render a typographically correct drop cap or initial cap,
+the UA may choose a line-height, width and height based on the shape
+of the letter, unlike for normal elements.</p>
+
+<div class="example">
+<p>Example:</p>
+<p>This example shows a possible rendering of an initial cap. Note
+that the 'line-height' that is inherited by the <code>::first-letter</code>
+pseudo-element is 1.1, but the UA in this example has computed the
+height of the first letter differently, so that it doesn't cause any
+unnecessary space between the first two lines. Also note that the
+fictional start tag of the first letter is inside the <span>span</span>, and thus
+the font weight of the first letter is normal, not bold as the <span>span</span>:
+<pre>
+p { line-height: 1.1 }
+p::first-letter { font-size: 3em; font-weight: normal }
+span { font-weight: bold }
+...
+&lt;p>&lt;span>Het hemelsche&lt;/span> gerecht heeft zich ten lange lesten&lt;br>
+Erbarremt over my en mijn benaeuwde vesten&lt;br>
+En arme burgery, en op mijn volcx gebed&lt;br>
+En dagelix geschrey de bange stad ontzet.
+</pre>
+<div class="figure">
+<p><img src="initial-cap.png" alt="Image illustrating the ::first-letter pseudo-element">
+</div>
+</div>
+
+<div class="example">
+<p>The following CSS will make a drop cap initial letter span about two lines:</p>
+
+<pre>
+&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"&gt;
+&lt;HTML&gt;
+ &lt;HEAD&gt;
+ &lt;TITLE&gt;Drop cap initial letter&lt;/TITLE&gt;
+ &lt;STYLE type="text/css"&gt;
+ P { font-size: 12pt; line-height: 1.2 }
+ P::first-letter { font-size: 200%; font-weight: bold; float: left }
+ SPAN { text-transform: uppercase }
+ &lt;/STYLE&gt;
+ &lt;/HEAD&gt;
+ &lt;BODY&gt;
+ &lt;P&gt;&lt;SPAN&gt;The first&lt;/SPAN&gt; few words of an article
+ in The Economist.&lt;/P&gt;
+ &lt;/BODY&gt;
+&lt;/HTML&gt;
+</pre>
+
+<p>This example might be formatted as follows:</p>
+
+<div class="figure">
+<P><img src="first-letter.gif" alt="Image illustrating the combined effect of the ::first-letter and ::first-line pseudo-elements"></p>
+</div>
+
+<p>The <span class="index-inst" title="fictional tag
+sequence">fictional tag sequence</span> is:</p>
+
+<pre>
+&lt;P&gt;
+&lt;SPAN&gt;
+&lt;P::first-letter&gt;
+T
+&lt;/P::first-letter&gt;he first
+&lt;/SPAN&gt;
+few words of an article in the Economist.
+&lt;/P&gt;
+</pre>
+
+<p>Note that the <code>::first-letter</code> pseudo-element tags abut
+the content (i.e., the initial character), while the ::first-line
+pseudo-element start tag is inserted right after the start tag of the
+block element.</p> </div>
+
+<p>In order to achieve traditional drop caps formatting, user agents
+may approximate font sizes, for example to align baselines. Also, the
+glyph outline may be taken into account when formatting.</p>
+
+<p>Punctuation (i.e, characters defined in Unicode in the "open" (Ps),
+"close" (Pe), "initial" (Pi). "final" (Pf) and "other" (Po)
+punctuation classes), that precedes or follows the first letter should
+be included. <a href="#refsUNICODE">[UNICODE]</a></p>
+
+<div class="figure">
+<P><img src="first-letter2.gif" alt="Quotes that precede the
+first letter should be included."></p>
+</div>
+
+<p>The <code>::first-letter</code> also applies if the first letter is
+in fact a digit, e.g., the "6" in "67 million dollars is a lot of
+money."</p>
+
+<p>In CSS, the <code>::first-letter</code> pseudo-element applies to
+block, list-item, table-cell, table-caption, and inline-block
+elements. <span class="note">A future version of this specification
+may allow this pesudo-element to apply to more element
+types.</span></p>
+
+<p>The <code>::first-letter</code> pseudo-element can be used with all
+such elements that contain text, or that have a descendant in the same
+flow that contains text. A UA should act as if the fictional start tag
+of the ::first-letter pseudo-element is just before the first text of
+the element, even if that first text is in a descendant.</p>
+
+<div class="example">
+<p>Example:</p>
+<p>The fictional tag sequence for this HTMLfragment:
+<pre>&lt;div>
+&lt;p>The first text.</pre>
+<p>is:
+<pre>&lt;div>
+&lt;p>&lt;div::first-letter>&lt;p::first-letter>T&lt;/...>&lt;/...>he first text.</pre>
+</div>
+
+<p>The first letter of a table-cell or inline-block cannot be the
+first letter of an ancestor element. Thus, in <code>&lt;DIV&gt;&lt;P
+STYLE="display: inline-block">Hello&lt;BR&gt;Goodbye&lt;/P&gt;
+etcetera&lt;/DIV&gt;</code> the first letter of the <code>div</code> is not the
+letter "H". In fact, the <code>div</code> doesn't have a first letter.
+
+<p>The first letter must occur on the <a
+href="#first-formatted-line">first formatted line.</a> For example, in
+this fragment: <code>&lt;p&gt&lt;br&gt;First...</code> the first line
+doesn't contain any letters and <code>::first-letter</code> doesn't
+match anything (assuming the default style for <code>br</code> in HTML
+4). In particular, it does not match the "F" of "First."
+
+<p>In CSS, if an element is a list item ('display: list-item'), the
+<code>::first-letter</code> applies to the first letter in the
+principal box after the marker. UAs may ignore
+<code>::first-letter</code> on list items with 'list-style-position:
+inside'. If an element has <code>::before</code> or
+<code>::after</code> content, the <code>::first-letter</code> applies
+to the first letter of the element <em>including</em> that content.
+
+<div class="example">
+<p>Example:</p>
+<p>After the rule 'p::before {content: "Note: "}', the selector
+'p::first-letter' matches the "N" of "Note".</p>
+</div>
+
+<p>Some languages may have specific rules about how to treat certain
+letter combinations. In Dutch, for example, if the letter combination
+"ij" appears at the beginning of a word, both letters should be
+considered within the <code>::first-letter</code> pseudo-element.
+
+<p>If the letters that would form the ::first-letter are not in the
+same element, such as "'T" in <code>&lt;p>'&lt;em>T...</code>, the UA
+may create a ::first-letter pseudo-element from one of the elements,
+both elements, or simply not create a pseudo-element.</p>
+
+<p>Similarly, if the first letter(s) of the block are not at the start
+of the line (for example due to bidirectional reordering), then the UA
+need not create the pseudo-element(s).
+
+<div class="example">
+<p>Example:</p>
+<p><a name="overlapping-example">The following example</a> illustrates
+how overlapping pseudo-elements may interact. The first letter of
+each P element will be green with a font size of '24pt'. The rest of
+the first formatted line will be 'blue' while the rest of the
+paragraph will be 'red'.</p>
+
+<pre>p { color: red; font-size: 12pt }
+p::first-letter { color: green; font-size: 200% }
+p::first-line { color: blue }
+
+&lt;P&gt;Some text that ends up on two lines&lt;/P&gt;</pre>
+
+<p>Assuming that a line break will occur before the word "ends", the
+<span class="index-inst" title="fictional tag sequence">fictional tag
+sequence</span> for this fragment might be:</p>
+
+<pre>&lt;P&gt;
+&lt;P::first-line&gt;
+&lt;P::first-letter&gt;
+S
+&lt;/P::first-letter&gt;ome text that
+&lt;/P::first-line&gt;
+ends up on two lines
+&lt;/P&gt;</pre>
+
+<p>Note that the <code>::first-letter</code> element is inside the <code>::first-line</code>
+element. Properties set on <code>::first-line</code> are inherited by
+<code>::first-letter</code>, but are overridden if the same property is set on
+<code>::first-letter</code>.</p>
+</div>
+
+
+<h4><a name=UIfragments>7.3.</a> <a name=selection>The ::selection pseudo-element</a></h4>
+
+<p>The <code>::selection</code> pseudo-element applies to the portion
+of a document that has been highlighted by the user. This also
+applies, for example, to selected text within an editable text
+field. This pseudo-element should not be confused with the <code><a
+href="#checked">:checked</a></code> pseudo-class (which used to be
+named <code>:selected</code>)
+
+<p>Although the <code>::selection</code> pseudo-element is dynamic in
+nature, and is altered by user action, it is reasonable to expect that
+when a UA re-renders to a static medium (such as a printed page, see
+<a href="#refsCSS21">[CSS21]</a>) which was originally rendered to a
+dynamic medium (like screen), the UA may wish to transfer the current
+<code>::selection</code> state to that other medium, and have all the
+appropriate formatting and rendering take effect as well. This is not
+required &mdash; UAs may omit the <code>::selection</code>
+pseudo-element for static media.
+
+<p>These are the CSS properties that apply to <code>::selection</code>
+pseudo-elements: color, background, cursor (optional), outline
+(optional). The computed value of the 'background-image' property on
+<code>::selection</code> may be ignored.
+
+
+<h4><a name=gen-content>7.4. The ::before and ::after pseudo-elements</a></h4>
+
+<p>The <code>::before</code> and <code>::after</code> pseudo-elements
+can be used to describe generated content before or after an element's
+content. They are explained in CSS 2.1 <a
+href="#refsCSS21">[CSS21]</a>.</p>
+
+<p>When the <code>::first-letter</code> and <code>::first-line</code>
+pseudo-elements are combined with <code>::before</code> and
+<code>::after</code>, they apply to the first letter or line of the
+element including the inserted text.</p>
+
+<h2><a name=combinators>8. Combinators</a></h2>
+
+<h3><a name=descendant-combinators>8.1. Descendant combinator</a></h3>
+
+<p>At times, authors may want selectors to describe an element that is
+the descendant of another element in the document tree (e.g., "an
+<code>EM</code> element that is contained within an <code>H1</code>
+element"). Descendant combinators express such a relationship. A
+descendant combinator is <a href="#whitespace">white space</a> that
+separates two sequences of simple selectors. A selector of the form
+"<code>A B</code>" represents an element <code>B</code> that is an
+arbitrary descendant of some ancestor element <code>A</code>.
+
+<div class="example">
+ <p>Examples:</p>
+ <p>For example, consider the following selector:</p>
+ <pre>h1 em</pre>
+ <p>It represents an <code>em</code> element being the descendant of
+ an <code>h1</code> element. It is a correct and valid, but partial,
+ description of the following fragment:</p>
+ <pre>&lt;h1&gt;This &lt;span class="myclass"&gt;headline
+is &lt;em&gt;very&lt;/em&gt; important&lt;/span&gt;&lt;/h1&gt;</pre>
+ <p>The following selector:</p>
+ <pre>div * p</pre>
+ <p>represents a <code>p</code> element that is a grandchild or later
+ descendant of a <code>div</code> element. Note the whitespace on
+ either side of the "*" is not part of the universal selector; the
+ whitespace is a combinator indicating that the DIV must be the
+ ancestor of some element, and that that element must be an ancestor
+ of the P.</p>
+ <p>The following selector, which combines descendant combinators and
+ <a href="#attribute-selectors">attribute selectors</a>, represents an
+ element that (1) has the <code>href</code> attribute set and (2) is
+ inside a <code>p</code> that is itself inside a <code>div</code>:</p>
+ <pre>div p *[href]</pre>
+</div>
+
+<h3><a name=child-combinators>8.2. Child combinators</a></h3>
+
+<p>A <dfn>child combinator</dfn> describes a childhood relationship
+between two elements. A child combinator is made of the
+&quot;greater-than sign&quot; (<code>&gt;</code>) character and
+separates two sequences of simple selectors.
+
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element that is
+ child of <code>body</code>:</p>
+ <pre>body &gt; p</pre>
+ <p>The following example combines descendant combinators and child
+ combinators.</p>
+ <pre>div ol&gt;li p</pre><!-- LEAVE THOSE SPACES OUT! see below -->
+ <p>It represents a <code>p</code> element that is a descendant of an
+ <code>li</code> element; the <code>li</code> element must be the
+ child of an <code>ol</code> element; the <code>ol</code> element must
+ be a descendant of a <code>div</code>. Notice that the optional white
+ space around the "&gt;" combinator has been left out.</p>
+</div>
+
+<p>For information on selecting the first child of an element, please
+see the section on the <code><a
+href="#structural-pseudos">:first-child</a></code> pseudo-class
+above.</p>
+
+<h3><a name=sibling-combinators>8.3. Sibling combinators</a></h3>
+
+<p>There are two different sibling combinators: the adjacent sibling
+combinator and the general sibling combinator. In both cases,
+non-element nodes (e.g. text between elements) are ignored when
+considering adjacency of elements.</p>
+
+<h4><a name=adjacent-sibling-combinators>8.3.1. Adjacent sibling combinator</a></h4>
+
+<p>The adjacent sibling combinator is made of the &quot;plus
+sign&quot; (U+002B, <code>+</code>) character that separates two
+sequences of simple selectors. The elements represented by the two
+sequences share the same parent in the document tree and the element
+represented by the first sequence immediately precedes the element
+represented by the second one.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element
+ immediately following a <code>math</code> element:</p>
+ <pre>math + p</pre>
+ <p>The following selector is conceptually similar to the one in the
+ previous example, except that it adds an attribute selector &mdash; it
+ adds a constraint to the <code>h1</code> element, that it must have
+ <code>class="opener"</code>:</p>
+ <pre>h1.opener + h2</pre>
+</div>
+
+
+<h4><a name=general-sibling-combinators>8.3.2. General sibling combinator</a></h4>
+
+<p>The general sibling combinator is made of the &quot;tilde&quot;
+(U+007E, <code>~</code>) character that separates two sequences of
+simple selectors. The elements represented by the two sequences share
+the same parent in the document tree and the element represented by
+the first sequence precedes (not necessarily immediately) the element
+represented by the second one.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <pre>h1 ~ pre</pre>
+ <p>represents a <code>pre</code> element following an <code>h1</code>. It
+ is a correct and valid, but partial, description of:</p>
+ <pre>&lt;h1&gt;Definition of the function a&lt;/h1&gt;
+&lt;p&gt;Function a(x) has to be applied to all figures in the table.&lt;/p&gt;
+&lt;pre&gt;function a(x) = 12x/13.5&lt;/pre&gt;</pre>
+</div>
+
+<h2><a name=specificity>9. Calculating a selector's specificity</a></h2>
+
+<p>A selector's specificity is calculated as follows:</p>
+
+<ul>
+ <li>count the number of ID selectors in the selector (= a)</li>
+ <li>count the number of class selectors, attributes selectors, and pseudo-classes in the selector (= b)</li>
+ <li>count the number of element names in the selector (= c)</li>
+ <li>ignore pseudo-elements</li>
+</ul>
+
+<p>Selectors inside <a href="#negation">the negation pseudo-class</a>
+are counted like any other, but the negation itself does not count as
+a pseudo-class.</p>
+
+<p>Concatenating the three numbers a-b-c (in a number system with a
+large base) gives the specificity.</p>
+
+<div class="example">
+<p>Examples:</p>
+<pre>* /* a=0 b=0 c=0 -&gt; specificity = 0 */
+LI /* a=0 b=0 c=1 -&gt; specificity = 1 */
+UL LI /* a=0 b=0 c=2 -&gt; specificity = 2 */
+UL OL+LI /* a=0 b=0 c=3 -&gt; specificity = 3 */
+H1 + *[REL=up] /* a=0 b=1 c=1 -&gt; specificity = 11 */
+UL OL LI.red /* a=0 b=1 c=3 -&gt; specificity = 13 */
+LI.red.level /* a=0 b=2 c=1 -&gt; specificity = 21 */
+#x34y /* a=1 b=0 c=0 -&gt; specificity = 100 */
+#s12:not(FOO) /* a=1 b=0 c=1 -&gt; specificity = 101 */
+</pre>
+</div>
+
+<p class="note"><strong>Note:</strong> the specificity of the styles
+specified in an HTML <code>style</code> attribute is described in CSS
+2.1. <a href="#refsCSS21">[CSS21]</a>.</p>
+
+<h2><a name=w3cselgrammar>10. The grammar of Selectors</a></h2>
+
+<h3><a name=grammar>10.1. Grammar</a></h3>
+
+<p>The grammar below defines the syntax of Selectors. It is globally
+LL(1) and can be locally LL(2) (but note that most UA's should not use
+it directly, since it doesn't express the parsing conventions). The
+format of the productions is optimized for human consumption and some
+shorthand notations beyond Yacc (see <a href="#refsYACC">[YACC]</a>)
+are used:</p>
+
+<ul>
+ <li><b>*</b>: 0 or more
+ <li><b>+</b>: 1 or more
+ <li><b>?</b>: 0 or 1
+ <li><b>|</b>: separates alternatives
+ <li><b>[ ]</b>: grouping </li>
+</ul>
+
+<p>The productions are:</p>
+
+<pre>selectors_group
+ : selector [ COMMA S* selector ]*
+ ;
+
+selector
+ : simple_selector_sequence [ combinator simple_selector_sequence ]*
+ ;
+
+combinator
+ /* combinators can be surrounded by white space */
+ : PLUS S* | GREATER S* | TILDE S* | S+
+ ;
+
+simple_selector_sequence
+ : [ type_selector | universal ]
+ [ HASH | class | attrib | pseudo | negation ]*
+ | [ HASH | class | attrib | pseudo | negation ]+
+ ;
+
+type_selector
+ : [ namespace_prefix ]? element_name
+ ;
+
+namespace_prefix
+ : [ IDENT | '*' ]? '|'
+ ;
+
+element_name
+ : IDENT
+ ;
+
+universal
+ : [ namespace_prefix ]? '*'
+ ;
+
+class
+ : '.' IDENT
+ ;
+
+attrib
+ : '[' S* [ namespace_prefix ]? IDENT S*
+ [ [ PREFIXMATCH |
+ SUFFIXMATCH |
+ SUBSTRINGMATCH |
+ '=' |
+ INCLUDES |
+ DASHMATCH ] S* [ IDENT | STRING ] S*
+ ]? ']'
+ ;
+
+pseudo
+ /* '::' starts a pseudo-element, ':' a pseudo-class */
+ /* Exceptions: :first-line, :first-letter, :before and :after. */
+ /* Note that pseudo-elements are restricted to one per selector and */
+ /* occur only in the last simple_selector_sequence. */
+ : ':' ':'? [ IDENT | functional_pseudo ]
+ ;
+
+functional_pseudo
+ : FUNCTION S* expression ')'
+ ;
+
+expression
+ /* In CSS3, the expressions are identifiers, strings, */
+ /* or of the form "an+b" */
+ : [ [ PLUS | '-' | DIMENSION | NUMBER | STRING | IDENT ] S* ]+
+ ;
+
+negation
+ : NOT S* negation_arg S* ')'
+ ;
+
+negation_arg
+ : type_selector | universal | HASH | class | attrib | pseudo
+ ;</pre>
+
+
+<h3><a name=lex>10.2. Lexical scanner</a></h3>
+
+<p>The following is the <a name=x3>tokenizer</a>, written in Flex (see
+<a href="#refsFLEX">[FLEX]</a>) notation. The tokenizer is
+case-insensitive.</p>
+
+<p>The two occurrences of "\377" represent the highest character
+number that current versions of Flex can deal with (decimal 255). They
+should be read as "\4177777" (decimal 1114111), which is the highest
+possible code point in Unicode/ISO-10646. <a
+href="#refsUNICODE">[UNICODE]</a></p>
+
+<pre>%option case-insensitive
+
+ident [-]?{nmstart}{nmchar}*
+name {nmchar}+
+nmstart [_a-z]|{nonascii}|{escape}
+nonascii [^\0-\177]
+unicode \\[0-9a-f]{1,6}(\r\n|[ \n\r\t\f])?
+escape {unicode}|\\[^\n\r\f0-9a-f]
+nmchar [_a-z0-9-]|{nonascii}|{escape}
+num [0-9]+|[0-9]*\.[0-9]+
+string {string1}|{string2}
+string1 \"([^\n\r\f\\"]|\\{nl}|{nonascii}|{escape})*\"
+string2 \'([^\n\r\f\\']|\\{nl}|{nonascii}|{escape})*\'
+invalid {invalid1}|{invalid2}
+invalid1 \"([^\n\r\f\\"]|\\{nl}|{nonascii}|{escape})*
+invalid2 \'([^\n\r\f\\']|\\{nl}|{nonascii}|{escape})*
+nl \n|\r\n|\r|\f
+w [ \t\r\n\f]*
+
+%%
+
+[ \t\r\n\f]+ return S;
+
+"~=" return INCLUDES;
+"|=" return DASHMATCH;
+"^=" return PREFIXMATCH;
+"$=" return SUFFIXMATCH;
+"*=" return SUBSTRINGMATCH;
+{ident} return IDENT;
+{string} return STRING;
+{ident}"(" return FUNCTION;
+{num} return NUMBER;
+"#"{name} return HASH;
+{w}"+" return PLUS;
+{w}"&gt;" return GREATER;
+{w}"," return COMMA;
+{w}"~" return TILDE;
+":not(" return NOT;
+@{ident} return ATKEYWORD;
+{invalid} return INVALID;
+{num}% return PERCENTAGE;
+{num}{ident} return DIMENSION;
+"&lt;!--" return CDO;
+"--&gt;" return CDC;
+
+"url("{w}{string}{w}")" return URI;
+"url("{w}([!#$%&*-~]|{nonascii}|{escape})*{w}")" return URI;
+U\+[0-9a-f?]{1,6}(-[0-9a-f]{1,6})? return UNICODE_RANGE;
+
+\/\*[^*]*\*+([^/*][^*]*\*+)*\/ /* ignore comments */
+
+. return *yytext;</pre>
+
+
+
+<h2><a name=downlevel>11. Namespaces and down-level clients</a></h2>
+
+<p>An important issue is the interaction of CSS selectors with XML
+documents in web clients that were produced prior to this
+document. Unfortunately, due to the fact that namespaces must be
+matched based on the URI which identifies the namespace, not the
+namespace prefix, some mechanism is required to identify namespaces in
+CSS by their URI as well. Without such a mechanism, it is impossible
+to construct a CSS style sheet which will properly match selectors in
+all cases against a random set of XML documents. However, given
+complete knowledge of the XML document to which a style sheet is to be
+applied, and a limited use of namespaces within the XML document, it
+is possible to construct a style sheet in which selectors would match
+elements and attributes correctly.</p>
+
+<p>It should be noted that a down-level CSS client will (if it
+properly conforms to CSS forward compatible parsing rules) ignore all
+<code>@namespace</code> at-rules, as well as all style rules that make
+use of namespace qualified element type or attribute selectors. The
+syntax of delimiting namespace prefixes in CSS was deliberately chosen
+so that down-level CSS clients would ignore the style rules rather
+than possibly match them incorrectly.</p>
+
+<p>The use of default namespaces in CSS makes it possible to write
+element type selectors that will function in both namespace aware CSS
+clients as well as down-level clients. It should be noted that
+down-level clients may incorrectly match selectors against XML
+elements in other namespaces.</p>
+
+<p>The following are scenarios and examples in which it is possible to
+construct style sheets which would function properly in web clients
+that do not implement this proposal.</p>
+
+<ol>
+ <li>
+
+ <p>The XML document does not use namespaces.</p>
+
+ <ul>
+
+ <li>In this case, it is obviously not necessary to declare or use
+ namespaces in the style sheet. Standard CSS element type and
+ attribute selectors will function adequately in a down-level
+ client.</li>
+
+ <li>In a CSS namespace aware client, the default behavior of
+ element selectors matching without regard to namespace will
+ function properly against all elements, since no namespaces are
+ present. However, the use of specific element type selectors that
+ match only elements that have no namespace ("<code>|name</code>")
+ will guarantee that selectors will match only XML elements that do
+ not have a declared namespace. </li>
+
+ </ul>
+
+ </li>
+
+ <li>
+
+ <p>The XML document defines a single, default namespace used
+ throughout the document. No namespace prefixes are used in element
+ names.</p>
+
+ <ul>
+
+ <li>In this case, a down-level client will function as if
+ namespaces were not used in the XML document at all. Standard CSS
+ element type and attribute selectors will match against all
+ elements. </li>
+
+ </ul>
+
+ </li>
+
+ <li>
+
+ <p>The XML document does <b>not</b> use a default namespace, all
+ namespace prefixes used are known to the style sheet author, and
+ there is a direct mapping between namespace prefixes and namespace
+ URIs. (A given prefix may only be mapped to one namespace URI
+ throughout the XML document; there may be multiple prefixes mapped
+ to the same URI).</p>
+
+ <ul>
+
+ <li>In this case, the down-level client will view and match
+ element type and attribute selectors based on their fully
+ qualified name, not the local part as outlined in the <a
+ href="#typenmsp">Type selectors and Namespaces</a> section. CSS
+ selectors may be declared using an escaped colon "<code>\:</code>"
+ to describe the fully qualified names, e.g.
+ "<code>html\:h1</code>" will match
+ <code>&lt;html:h1&gt;</code>. Selectors using the qualified name
+ will only match XML elements that use the same prefix. Other
+ namespace prefixes used in the XML that are mapped to the same URI
+ will not match as expected unless additional CSS style rules are
+ declared for them.</li>
+
+ <li>Note that selectors declared in this fashion will
+ <em>only</em> match in down-level clients. A CSS namespace aware
+ client will match element type and attribute selectors based on
+ the name's local part. Selectors declared with the fully
+ qualified name will not match (unless there is no namespace prefix
+ in the fully qualified name).</li>
+
+ </ul>
+
+ </li>
+
+ </ol>
+
+<p>In other scenarios: when the namespace prefixes used in the XML are
+not known in advance by the style sheet author; or a combination of
+elements with no namespace are used in conjunction with elements using
+a default namespace; or the same namespace prefix is mapped to
+<em>different</em> namespace URIs within the same document, or in
+different documents; it is impossible to construct a CSS style sheet
+that will function properly against all elements in those documents,
+unless, the style sheet is written using a namespace URI syntax (as
+outlined in this document or similar) and the document is processed by
+a CSS and XML namespace aware client.</p>
+
+<h2><a name=profiling>12. Profiles</a></h2>
+
+<p>Each specification using Selectors must define the subset of W3C
+Selectors it allows and excludes, and describe the local meaning of
+all the components of that subset.</p>
+
+<p>Non normative examples:
+
+<div class="profile">
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>CSS level 1</td></tr>
+ <tr>
+ <th>Accepts</th>
+ <td>type selectors<br>class selectors<br>ID selectors<br>:link,
+ :visited and :active pseudo-classes<br>descendant combinator
+ <br>::first-line and ::first-letter pseudo-elements</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>
+
+<p>universal selector<br>attribute selectors<br>:hover and :focus
+ pseudo-classes<br>:target pseudo-class<br>:lang() pseudo-class<br>all UI
+ element states pseudo-classes<br>all structural
+ pseudo-classes<br>negation pseudo-class<br>all
+ UI element fragments pseudo-elements<br>::before and ::after
+ pseudo-elements<br>child combinators<br>sibling combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>only one class selector allowed per sequence of simple
+ selectors</td></tr></tbody></table><br><br>
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>CSS level 2</td></tr>
+ <tr>
+ <th>Accepts</th>
+ <td>type selectors<br>universal selector<br>attribute presence and
+ values selectors<br>class selectors<br>ID selectors<br>:link, :visited,
+ :active, :hover, :focus, :lang() and :first-child pseudo-classes
+ <br>descendant combinator<br>child combinator<br>adjacent sibling
+ combinator<br>::first-line and ::first-letter pseudo-elements<br>::before
+ and ::after pseudo-elements</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>
+
+<p>content selectors<br>substring matching attribute
+ selectors<br>:target pseudo-classes<br>all UI element
+ states pseudo-classes<br>all structural pseudo-classes other
+ than :first-child<br>negation pseudo-class<br>all UI element
+ fragments pseudo-elements<br>general sibling combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>more than one class selector per sequence of simple selectors (CSS1
+ constraint) allowed</td></tr></tbody></table>
+
+<p>In CSS, selectors express pattern matching rules that determine which style
+rules apply to elements in the document tree.
+
+<p>The following selector (CSS level 2) will <b>match</b> all anchors <code>a</code>
+with attribute <code>name</code> set inside a section 1 header <code>h1</code>:
+<pre>h1 a[name]</pre>
+
+<p>All CSS declarations attached to such a selector are applied to elements
+matching it. </div>
+
+<div class="profile">
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>STTS 3</td>
+ </tr>
+ <tr>
+ <th>Accepts</th>
+ <td>
+
+<p>type selectors<br>universal selectors<br>attribute selectors<br>class
+ selectors<br>ID selectors<br>all structural pseudo-classes<br>
+ all combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>non-accepted pseudo-classes<br>pseudo-elements<br></td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>some selectors and combinators are not allowed in fragment
+ descriptions on the right side of STTS declarations.</td></tr></tbody></table>
+<form>
+<input type="text" name="test10"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+</form>
+
+<p>Selectors can be used in STTS 3 in two different
+ manners:
+<ol>
+ <li>a selection mechanism equivalent to CSS selection mechanism: declarations
+ attached to a given selector are applied to elements matching that selector,
+ <li>fragment descriptions that appear on the right side of declarations.
+</li></ol></div>
+
+<h2><a name=Conformance></a>13. Conformance and requirements</h2>
+
+<p>This section defines conformance with the present specification only.
+
+<p>The inability of a user agent to implement part of this specification due to
+the limitations of a particular device (e.g., non interactive user agents will
+probably not implement dynamic pseudo-classes because they make no sense without
+interactivity) does not imply non-conformance.
+
+<p>All specifications reusing Selectors must contain a <a
+href="#profiling">Profile</a> listing the
+subset of Selectors it accepts or excludes, and describing the constraints
+it adds to the current specification.
+
+<p>Invalidity is caused by a parsing error, e.g. an unrecognized token or a token
+which is not allowed at the current parsing point.
+
+<p>User agents must observe the rules for handling parsing errors:
+<ul>
+ <li>a simple selector containing an undeclared namespace prefix is invalid</li>
+ <li>a selector containing an invalid simple selector, an invalid combinator
+ or an invalid token is invalid. </li>
+ <li>a group of selectors containing an invalid selector is invalid.</li>
+</ul>
+
+<p class="foo test10 bar">Specifications reusing Selectors must define how to handle parsing
+errors. (In the case of CSS, the entire rule in which the selector is
+used is dropped.)</p>
+
+<!-- Apparently all these references are out of date:
+<p>Implementations of this specification must behave as
+"recipients of text data" as defined by <a href="#refsCWWW">[CWWW]</a>
+when parsing selectors and attempting matches. (In particular,
+implementations must assume the data is normalized and must not
+normalize it.) Normative rules for matching strings are defined in
+<a href="#refsCWWW">[CWWW]</a> and <a
+href="#refsUNICODE">[UNICODE]</a> and apply to implementations of this
+specification.</p>-->
+
+<h2><a name=Tests></a>14. Tests</h2>
+
+<p>This specification has <a
+href="http://www.w3.org/Style/CSS/Test/CSS3/Selectors/current/">a test
+suite</a> allowing user agents to verify their basic conformance to
+the specification. This test suite does not pretend to be exhaustive
+and does not cover all possible combined cases of Selectors.</p>
+
+<h2><a name=ACKS></a>15. Acknowledgements</h2>
+
+<p>The CSS working group would like to thank everyone who has sent
+comments on this specification over the years.</p>
+
+<p>The working group would like to extend special thanks to Donna
+McManus, Justin Baker, Joel Sklar, and Molly Ives Brower who perfermed
+the final editorial review.</p>
+
+<h2><a name=references>16. References</a></h2>
+
+<dl class="refs">
+
+ <dt>[CSS1]
+ <dd><a name=refsCSS1></a> Bert Bos, H&aring;kon Wium Lie; "<cite>Cascading Style Sheets, level 1</cite>", W3C Recommendation, 17 Dec 1996, revised 11 Jan 1999
+ <dd>(<code><a href="http://www.w3.org/TR/REC-CSS1">http://www.w3.org/TR/REC-CSS1</a></code>)
+
+ <dt>[CSS21]
+ <dd><a name=refsCSS21></a> Bert Bos, Tantek &Ccedil;elik, Ian Hickson, H&aring;kon Wium Lie, editors; "<cite>Cascading Style Sheets, level 2 revision 1</cite>", W3C Working Draft, 13 June 2005
+ <dd>(<code><a href="http://www.w3.org/TR/CSS21">http://www.w3.org/TR/CSS21</a></code>)
+
+ <dt>[CWWW]
+ <dd><a name=refsCWWW></a> Martin J. D&uuml;rst, Fran&ccedil;ois Yergeau, Misha Wolf, Asmus Freytag, Tex Texin, editors; "<cite>Character Model for the World Wide Web</cite>", W3C Recommendation, 15 February 2005
+ <dd>(<code><a href="http://www.w3.org/TR/charmod/">http://www.w3.org/TR/charmod/</a></code>)
+
+ <dt>[FLEX]
+ <dd><a name="refsFLEX"></a> "<cite>Flex: The Lexical Scanner Generator</cite>", Version 2.3.7, ISBN 1882114213
+
+ <dt>[HTML4]
+ <dd><a name="refsHTML4"></a> Dave Ragget, Arnaud Le Hors, Ian Jacobs, editors; "<cite>HTML 4.01 Specification</cite>", W3C Recommendation, 24 December 1999
+ <dd>(<a href="http://www.w3.org/TR/html4/"><code>http://www.w3.org/TR/html4/</code></a>)
+
+ <dt>[MATH]
+ <dd><a name="refsMATH"></a> Patrick Ion, Robert Miner, editors; "<cite>Mathematical Markup Language (MathML) 1.01</cite>", W3C Recommendation, revision of 7 July 1999
+ <dd>(<code><a href="http://www.w3.org/TR/REC-MathML/">http://www.w3.org/TR/REC-MathML/</a></code>)
+
+ <dt>[RFC3066]
+ <dd><a name="refsRFC3066"></a> H. Alvestrand; "<cite>Tags for the Identification of Languages</cite>", Request for Comments 3066, January 2001
+ <dd>(<a href="http://www.ietf.org/rfc/rfc3066.txt"><code>http://www.ietf.org/rfc/rfc3066.txt</code></a>)
+
+ <dt>[STTS]
+ <dd><a name=refsSTTS></a> Daniel Glazman; "<cite>Simple Tree Transformation Sheets 3</cite>", Electricit&eacute; de France, submission to the W3C, 11 November 1998
+ <dd>(<code><a href="http://www.w3.org/TR/NOTE-STTS3">http://www.w3.org/TR/NOTE-STTS3</a></code>)
+
+ <dt>[SVG]
+ <dd><a name="refsSVG"></a> Jon Ferraiolo, &#34276;&#27810; &#28147;, Dean Jackson, editors; "<cite>Scalable Vector Graphics (SVG) 1.1 Specification</cite>", W3C Recommendation, 14 January 2003
+ <dd>(<code><a href="http://www.w3.org/TR/SVG/">http://www.w3.org/TR/SVG/</a></code>)
+
+ <dt>[UNICODE]</dt>
+ <dd><a name="refsUNICODE"></a> <cite><a
+ href="http://www.unicode.org/versions/Unicode4.1.0/">The Unicode Standard, Version 4.1</a></cite>, The Unicode Consortium. Boston, MA, Addison-Wesley, March 2005. ISBN 0-321-18578-1, as amended by <a href="http://www.unicode.org/versions/Unicode4.0.1/">Unicode 4.0.1</a> and <a href="http://www.unicode.org/versions/Unicode4.1.0/">Unicode 4.1.0</a>.
+ <dd>(<code><a href="http://www.unicode.org/versions/">http://www.unicode.org/versions/</a></code>)</dd>
+
+ <dt>[XML10]
+ <dd><a name="refsXML10"></a> Tim Bray, Jean Paoli, C. M. Sperberg-McQueen, Eve Maler, Fran&ccedil;ois Yergeau, editors; "<cite>Extensible Markup Language (XML) 1.0 (Third Edition)</cite>", W3C Recommendation, 4 February 2004
+ <dd>(<a href="http://www.w3.org/TR/REC-xml/"><code>http://www.w3.org/TR/REC-xml/</code></a>)
+
+ <dt>[XMLNAMES]
+ <dd><a name="refsXMLNAMES"></a> Tim Bray, Dave Hollander, Andrew Layman, editors; "<cite>Namespaces in XML</cite>", W3C Recommendation, 14 January 1999
+ <dd>(<a href="http://www.w3.org/TR/REC-xml-names/"><code>http://www.w3.org/TR/REC-xml-names/</code></a>)
+
+ <dt>[YACC]
+ <dd><a name="refsYACC"></a> S. C. Johnson; "<cite>YACC &mdash; Yet another compiler compiler</cite>", Technical Report, Murray Hill, 1975
+
+</dl>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/cssquery-mootools.html b/testing/talos/talos/tests/dromaeo/tests/cssquery-mootools.html
new file mode 100644
index 0000000000..4158389787
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/cssquery-mootools.html
@@ -0,0 +1,3062 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script src="../lib/mootools.js"></script>
+<script>
+window.onload = function(){
+startTest("cssquery-mootools", 'a31d1311');
+
+// Try to force real results
+var ret, tmp;
+
+var html = document.body.innerHTML;
+
+ prep(function(){
+ var div = document.createElement("div");
+ div.innerHTML = html;
+ document.body.appendChild( div );
+ });
+
+ test("Mootools - *", function(){
+ $$("*");
+ });
+
+ test("Mootools - div:only-child", function(){
+ $$("div:only-child");
+ });
+
+ test("Mootools - div:first-child", function(){
+ $$("div:first-child");
+ });
+
+ test("Mootools - div:nth-child(even)", function(){
+ $$("div:nth-child(even)");
+ });
+
+ test("Mootools - div:nth-child(2n)", function(){
+ $$("div:nth-child(2n)");
+ });
+
+ test("Mootools - div:nth-child(odd)", function(){
+ $$("div:nth-child(odd)");
+ });
+
+ test("Mootools - div:nth-child(2n+1)", function(){
+ $$("div:nth-child(2n+1)");
+ });
+
+ test("Mootools - div:nth-child(n)", function(){
+ $$("div:nth-child(n)");
+ });
+
+ test("Mootools - div:last-child", function(){
+ $$("div:last-child");
+ });
+
+ test("Mootools - div > div", function(){
+ $$("div > div");
+ });
+
+ test("Mootools - div + div", function(){
+ $$("div + div");
+ });
+
+ test("Mootools - div ~ div", function(){
+ $$("div ~ div");
+ });
+
+ test("Mootools - body", function(){
+ $$("body");
+ });
+
+ test("Mootools - body div", function(){
+ $$("body div");
+ });
+
+ test("Mootools - div", function(){
+ $$("div");
+ });
+
+ test("Mootools - div div", function(){
+ $$("div div");
+ });
+
+ test("Mootools - div div div", function(){
+ $$("div div div");
+ });
+
+ test("Mootools - div, div, div", function(){
+ $$("div, div, div");
+ });
+
+ test("Mootools - div, a, span", function(){
+ $$("div, a, span");
+ });
+
+ test("Mootools - .dialog", function(){
+ $$(".dialog");
+ });
+
+ test("Mootools - div.dialog", function(){
+ $$("div.dialog");
+ });
+
+ test("Mootools - div .dialog", function(){
+ $$("div .dialog");
+ });
+
+ test("Mootools - div.character, div.dialog", function(){
+ $$("div.character, div.dialog");
+ });
+
+ test("Mootools - #speech5", function(){
+ $$("#speech5");
+ });
+
+ test("Mootools - div#speech5", function(){
+ $$("div#speech5");
+ });
+
+ test("Mootools - div #speech5", function(){
+ $$("div #speech5");
+ });
+
+ test("Mootools - div.scene div.dialog", function(){
+ $$("div.scene div.dialog");
+ });
+
+ test("Mootools - div#scene1 div.dialog div", function(){
+ $$("div#scene1 div.dialog div");
+ });
+
+ test("Mootools - #scene1 #speech1", function(){
+ $$("#scene1 #speech1");
+ });
+
+ test("Mootools - div[class]", function(){
+ $$("div[class]");
+ });
+
+ test("Mootools - div[class=dialog]", function(){
+ $$("div[class=dialog]");
+ });
+
+ test("Mootools - div[class^=dia]", function(){
+ $$("div[class^=dia]");
+ });
+
+ test("Mootools - div[class$=log]", function(){
+ $$("div[class$=log]");
+ });
+
+ test("Mootools - div[class*=sce]", function(){
+ $$("div[class*=sce]");
+ });
+
+ test("Mootools - div[class|=dialog]", function(){
+ $$("div[class|=dialog]");
+ });
+
+ test("Mootools - div[class~=dialog]", function(){
+ $$("div[class~=dialog]");
+ });
+
+endTest();
+};
+</script>
+</head>
+<body>
+ <div class="head">
+ <p><a href="http://www.w3.org/"><img height=48 alt=W3C src="w3c_home.png" width=72></a>
+
+ <h1 id="title">Selectors</h1>
+
+ <h2>W3C Working Draft 15 December 2005</h2>
+
+ <dl>
+
+ <dt>This version:
+
+ <dd><a href="http://www.w3.org/TR/2005/WD-css3-selectors-20051215">
+ http://www.w3.org/TR/2005/WD-css3-selectors-20051215</a>
+
+ <dt>Latest version:
+
+ <dd><a href="http://www.w3.org/TR/css3-selectors">
+ http://www.w3.org/TR/css3-selectors</a>
+
+ <dt>Previous version:
+
+ <dd><a href="http://www.w3.org/TR/2001/CR-css3-selectors-20011113">
+ http://www.w3.org/TR/2001/CR-css3-selectors-20011113</a>
+
+ <dt><a name=editors-list></a>Editors:
+
+ <dd class="vcard"><span class="fn">Daniel Glazman</span> (Invited Expert)</dd>
+
+ <dd class="vcard"><a lang="tr" class="url fn" href="http://www.tantek.com/">Tantek &Ccedil;elik</a> (Invited Expert)
+
+ <dd class="vcard"><a href="mailto:ian@hixie.ch" class="url fn">Ian Hickson</a> (<span
+ class="company"><a href="http://www.google.com/">Google</a></span>)
+
+ <dd class="vcard"><span class="fn">Peter Linss</span> (former editor, <span class="company"><a
+ href="http://www.netscape.com/">Netscape/AOL</a></span>)
+
+ <dd class="vcard"><span class="fn">John Williams</span> (former editor, <span class="company"><a
+ href="http://www.quark.com/">Quark, Inc.</a></span>)
+
+ </dl>
+
+ <p class="copyright"><a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright">
+ Copyright</a> &copy; 2005 <a href="http://www.w3.org/"><abbr
+ title="World Wide Web Consortium">W3C</abbr></a><sup>&reg;</sup>
+ (<a href="http://www.csail.mit.edu/"><abbr title="Massachusetts
+ Institute of Technology">MIT</abbr></a>, <a
+ href="http://www.ercim.org/"><acronym title="European Research
+ Consortium for Informatics and Mathematics">ERCIM</acronym></a>, <a
+ href="http://www.keio.ac.jp/">Keio</a>), All Rights Reserved. W3C
+ <a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">liability</a>,
+ <a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">trademark</a>,
+ <a
+ href="http://www.w3.org/Consortium/Legal/copyright-documents">document
+ use</a> rules apply.
+
+ <hr title="Separator for header">
+
+ </div>
+
+ <h2><a name=abstract></a>Abstract</h2>
+
+ <p><em>Selectors</em> are patterns that match against elements in a
+ tree. Selectors have been optimized for use with HTML and XML, and
+ are designed to be usable in performance-critical code.</p>
+
+ <p><acronym title="Cascading Style Sheets">CSS</acronym> (Cascading
+ Style Sheets) is a language for describing the rendering of <acronym
+ title="Hypertext Markup Language">HTML</acronym> and <acronym
+ title="Extensible Markup Language">XML</acronym> documents on
+ screen, on paper, in speech, etc. CSS uses Selectors for binding
+ style properties to elements in the document. This document
+ describes extensions to the selectors defined in CSS level 2. These
+ extended selectors will be used by CSS level 3.
+
+ <p>Selectors define the following function:</p>
+
+ <pre>expression &#x2217; element &rarr; boolean</pre>
+
+ <p>That is, given an element and a selector, this specification
+ defines whether that element matches the selector.</p>
+
+ <p>These expressions can also be used, for instance, to select a set
+ of elements, or a single element from a set of elements, by
+ evaluating the expression across all the elements in a
+ subtree. <acronym title="Simple Tree Transformation
+ Sheets">STTS</acronym> (Simple Tree Transformation Sheets), a
+ language for transforming XML trees, uses this mechanism. <a href="#refsSTTS">[STTS]</a></p>
+
+ <h2><a name=status></a>Status of this document</h2>
+
+ <p><em>This section describes the status of this document at the
+ time of its publication. Other documents may supersede this
+ document. A list of current W3C publications and the latest revision
+ of this technical report can be found in the <a
+ href="http://www.w3.org/TR/">W3C technical reports index at
+ http://www.w3.org/TR/.</a></em></p>
+
+ <p>This document describes the selectors that already exist in <a
+ href="#refsCSS1"><abbr title="CSS level 1">CSS1</abbr></a> and <a
+ href="#refsCSS21"><abbr title="CSS level 2">CSS2</abbr></a>, and
+ also proposes new selectors for <abbr title="CSS level
+ 3">CSS3</abbr> and other languages that may need them.</p>
+
+ <p>The CSS Working Group doesn't expect that all implementations of
+ CSS3 will have to implement all selectors. Instead, there will
+ probably be a small number of variants of CSS3, called profiles. For
+ example, it may be that only a profile for interactive user agents
+ will include all of the selectors.</p>
+
+ <p>This specification is a last call working draft for the the <a
+ href="http://www.w3.org/Style/CSS/members">CSS Working Group</a>
+ (<a href="/Style/">Style Activity</a>). This
+ document is a revision of the <a
+ href="http://www.w3.org/TR/2001/CR-css3-selectors-20011113/">Candidate
+ Recommendation dated 2001 November 13</a>, and has incorporated
+ implementation feedback received in the past few years. It is
+ expected that this last call will proceed straight to Proposed
+ Recommendation stage since it is believed that interoperability will
+ be demonstrable.</p>
+
+ <p>All persons are encouraged to review and implement this
+ specification and return comments to the (<a
+ href="http://lists.w3.org/Archives/Public/www-style/">archived</a>)
+ public mailing list <a
+ href="http://www.w3.org/Mail/Lists.html#www-style">www-style</a>
+ (see <a href="http://www.w3.org/Mail/Request">instructions</a>). W3C
+ Members can also send comments directly to the CSS Working
+ Group.
+ The deadline for comments is 14 January 2006.</p>
+
+ <p>This is still a draft document and may be updated, replaced, or
+ obsoleted by other documents at any time. It is inappropriate to
+ cite a W3C Working Draft as other than &quot;work in progress&quot;.
+
+ <p>This document may be available in <a
+ href="http://www.w3.org/Style/css3-selectors-updates/translations">translation</a>.
+ The English version of this specification is the only normative
+ version.
+
+ <div class="subtoc">
+
+ <h2 id="test10"><a name=contents>Table of contents</a></h2>
+
+ <ul class="toc">
+ <li class="tocline2"><a href="#context">1. Introduction</a>
+ <ul>
+ <li><a href="#dependencies">1.1. Dependencies</a> </li>
+ <li><a href="#terminology">1.2. Terminology</a> </li>
+ <li><a href="#changesFromCSS2">1.3. Changes from CSS2</a> </li>
+ </ul>
+ <li class="tocline2"><a href="#selectors">2. Selectors</a>
+ <li class="tocline2"><a href="#casesens">3. Case sensitivity</a>
+ <li class="tocline2"><a href="#selector-syntax">4. Selector syntax</a>
+ <li class="tocline2"><a href="#grouping">5. Groups of selectors</a>
+ <li class="tocline2"><a href="#simple-selectors">6. Simple selectors</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#type-selectors">6.1. Type selectors</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#typenmsp">6.1.1. Type selectors and namespaces</a></li>
+ </ul>
+ <li class="tocline3"><a href="#universal-selector">6.2. Universal selector</a>
+ <ul>
+ <li><a href="#univnmsp">6.2.1. Universal selector and namespaces</a></li>
+ </ul>
+ <li class="tocline3"><a href="#attribute-selectors">6.3. Attribute selectors</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#attribute-representation">6.3.1. Representation of attributes and attributes values</a>
+ <li><a href="#attribute-substrings">6.3.2. Substring matching attribute selectors</a>
+ <li class="tocline4"><a href="#attrnmsp">6.3.3. Attribute selectors and namespaces</a>
+ <li class="tocline4"><a href="#def-values">6.3.4. Default attribute values in DTDs</a></li>
+ </ul>
+ <li class="tocline3"><a href="#class-html">6.4. Class selectors</a>
+ <li class="tocline3"><a href="#id-selectors">6.5. ID selectors</a>
+ <li class="tocline3"><a href="#pseudo-classes">6.6. Pseudo-classes</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#dynamic-pseudos">6.6.1. Dynamic pseudo-classes</a>
+ <li class="tocline4"><a href="#target-pseudo">6.6.2. The :target pseudo-class</a>
+ <li class="tocline4"><a href="#lang-pseudo">6.6.3. The :lang() pseudo-class</a>
+ <li class="tocline4"><a href="#UIstates">6.6.4. UI element states pseudo-classes</a>
+ <li class="tocline4"><a href="#structural-pseudos">6.6.5. Structural pseudo-classes</a>
+ <ul>
+ <li><a href="#root-pseudo">:root pseudo-class</a>
+ <li><a href="#nth-child-pseudo">:nth-child() pseudo-class</a>
+ <li><a href="#nth-last-child-pseudo">:nth-last-child()</a>
+ <li><a href="#nth-of-type-pseudo">:nth-of-type() pseudo-class</a>
+ <li><a href="#nth-last-of-type-pseudo">:nth-last-of-type()</a>
+ <li><a href="#first-child-pseudo">:first-child pseudo-class</a>
+ <li><a href="#last-child-pseudo">:last-child pseudo-class</a>
+ <li><a href="#first-of-type-pseudo">:first-of-type pseudo-class</a>
+ <li><a href="#last-of-type-pseudo">:last-of-type pseudo-class</a>
+ <li><a href="#only-child-pseudo">:only-child pseudo-class</a>
+ <li><a href="#only-of-type-pseudo">:only-of-type pseudo-class</a>
+ <li><a href="#empty-pseudo">:empty pseudo-class</a></li>
+ </ul>
+ <li class="tocline4"><a href="#negation">6.6.7. The negation pseudo-class</a></li>
+ </ul>
+ </li>
+ </ul>
+ <li><a href="#pseudo-elements">7. Pseudo-elements</a>
+ <ul>
+ <li><a href="#first-line">7.1. The ::first-line pseudo-element</a>
+ <li><a href="#first-letter">7.2. The ::first-letter pseudo-element</a>
+ <li><a href="#UIfragments">7.3. The ::selection pseudo-element</a>
+ <li><a href="#gen-content">7.4. The ::before and ::after pseudo-elements</a></li>
+ </ul>
+ <li class="tocline2"><a href="#combinators">8. Combinators</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#descendant-combinators">8.1. Descendant combinators</a>
+ <li class="tocline3"><a href="#child-combinators">8.2. Child combinators</a>
+ <li class="tocline3"><a href="#sibling-combinators">8.3. Sibling combinators</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#adjacent-sibling-combinators">8.3.1. Adjacent sibling combinator</a>
+ <li class="tocline4"><a href="#general-sibling-combinators">8.3.2. General sibling combinator</a></li>
+ </ul>
+ </li>
+ </ul>
+ <li class="tocline2"><a href="#specificity">9. Calculating a selector's specificity</a>
+ <li class="tocline2"><a href="#w3cselgrammar">10. The grammar of Selectors</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#grammar">10.1. Grammar</a>
+ <li class="tocline3"><a href="#lex">10.2. Lexical scanner</a></li>
+ </ul>
+ <li class="tocline2"><a href="#downlevel">11. Namespaces and down-level clients</a>
+ <li class="tocline2"><a href="#profiling">12. Profiles</a>
+ <li><a href="#Conformance">13. Conformance and requirements</a>
+ <li><a href="#Tests">14. Tests</a>
+ <li><a href="#ACKS">15. Acknowledgements</a>
+ <li class="tocline2"><a href="#references">16. References</a>
+ </ul>
+
+ </div>
+
+ <h2><a name=context>1. Introduction</a></h2>
+
+ <h3><a name=dependencies></a>1.1. Dependencies</h3>
+
+ <p>Some features of this specification are specific to CSS, or have
+ particular limitations or rules specific to CSS. In this
+ specification, these have been described in terms of CSS2.1. <a
+ href="#refsCSS21">[CSS21]</a></p>
+
+ <h3><a name=terminology></a>1.2. Terminology</h3>
+
+ <p>All of the text of this specification is normative except
+ examples, notes, and sections explicitly marked as
+ non-normative.</p>
+
+ <h3><a name=changesFromCSS2></a>1.3. Changes from CSS2</h3>
+
+ <p><em>This section is non-normative.</em></p>
+
+ <p>The main differences between the selectors in CSS2 and those in
+ Selectors are:
+
+ <ul>
+
+ <li>the list of basic definitions (selector, group of selectors,
+ simple selector, etc.) has been changed; in particular, what was
+ referred to in CSS2 as a simple selector is now called a sequence
+ of simple selectors, and the term "simple selector" is now used for
+ the components of this sequence</li>
+
+ <li>an optional namespace component is now allowed in type element
+ selectors, the universal selector and attribute selectors</li>
+
+ <li>a <a href="#general-sibling-combinators">new combinator</a> has been introduced</li>
+
+ <li>new simple selectors including substring matching attribute
+ selectors, and new pseudo-classes</li>
+
+ <li>new pseudo-elements, and introduction of the "::" convention
+ for pseudo-elements</li>
+
+ <li>the grammar has been rewritten</li>
+
+ <li>profiles to be added to specifications integrating Selectors
+ and defining the set of selectors which is actually supported by
+ each specification</li>
+
+ <li>Selectors are now a CSS3 Module and an independent
+ specification; other specifications can now refer to this document
+ independently of CSS</li>
+
+ <li>the specification now has its own test suite</li>
+
+ </ul>
+
+<h2><a name=selectors></a>2. Selectors</h2>
+
+<p><em>This section is non-normative, as it merely summarizes the
+following sections.</em></p>
+
+<p>A Selector represents a structure. This structure can be used as a
+condition (e.g. in a CSS rule) that determines which elements a
+selector matches in the document tree, or as a flat description of the
+HTML or XML fragment corresponding to that structure.</p>
+
+<p>Selectors may range from simple element names to rich contextual
+representations.</p>
+
+<p>The following table summarizes the Selector syntax:</p>
+
+<table class="selectorsReview">
+ <thead>
+ <tr>
+ <th class="pattern">Pattern</th>
+ <th class="meaning">Meaning</th>
+ <th class="described">Described in section</th>
+ <th class="origin">First defined in CSS level</th></tr>
+ <tbody>
+ <tr>
+ <td class="pattern">*</td>
+ <td class="meaning">any element</td>
+ <td class="described"><a
+ href="#universal-selector">Universal
+ selector</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E</td>
+ <td class="meaning">an element of type E</td>
+ <td class="described"><a
+ href="#type-selectors">Type selector</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E[foo]</td>
+ <td class="meaning">an E element with a "foo" attribute</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value is exactly
+ equal to "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo~="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value is a list of
+ space-separated values, one of which is exactly equal to "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo^="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value begins exactly
+ with the string "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[foo$="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value ends exactly
+ with the string "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[foo*="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value contains the
+ substring "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[hreflang|="en"]</td>
+ <td class="meaning">an E element whose "hreflang" attribute has a hyphen-separated
+ list of values beginning (from the left) with "en"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:root</td>
+ <td class="meaning">an E element, root of the document</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-child(n)</td>
+ <td class="meaning">an E element, the n-th child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-last-child(n)</td>
+ <td class="meaning">an E element, the n-th child of its parent, counting
+ from the last one</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-of-type(n)</td>
+ <td class="meaning">an E element, the n-th sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-last-of-type(n)</td>
+ <td class="meaning">an E element, the n-th sibling of its type, counting
+ from the last one</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:first-child</td>
+ <td class="meaning">an E element, first child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:last-child</td>
+ <td class="meaning">an E element, last child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:first-of-type</td>
+ <td class="meaning">an E element, first sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:last-of-type</td>
+ <td class="meaning">an E element, last sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:only-child</td>
+ <td class="meaning">an E element, only child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:only-of-type</td>
+ <td class="meaning">an E element, only sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:empty</td>
+ <td class="meaning">an E element that has no children (including text
+ nodes)</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:link<br>E:visited</td>
+ <td class="meaning">an E element being the source anchor of a hyperlink of
+ which the target is not yet visited (:link) or already visited
+ (:visited)</td>
+ <td class="described"><a
+ href="#link">The link
+ pseudo-classes</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E:active<br>E:hover<br>E:focus</td>
+ <td class="meaning">an E element during certain user actions</td>
+ <td class="described"><a
+ href="#useraction-pseudos">The user
+ action pseudo-classes</a></td>
+ <td class="origin">1 and 2</td></tr>
+ <tr>
+ <td class="pattern">E:target</td>
+ <td class="meaning">an E element being the target of the referring URI</td>
+ <td class="described"><a
+ href="#target-pseudo">The target
+ pseudo-class</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:lang(fr)</td>
+ <td class="meaning">an element of type E in language "fr" (the document
+ language specifies how language is determined)</td>
+ <td class="described"><a
+ href="#lang-pseudo">The :lang()
+ pseudo-class</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:enabled<br>E:disabled</td>
+ <td class="meaning">a user interface element E which is enabled or
+ disabled</td>
+ <td class="described"><a
+ href="#UIstates">The UI element states
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:checked<!--<br>E:indeterminate--></td>
+ <td class="meaning">a user interface element E which is checked<!-- or in an
+ indeterminate state--> (for instance a radio-button or checkbox)</td>
+ <td class="described"><a
+ href="#UIstates">The UI element states
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E::first-line</td>
+ <td class="meaning">the first formatted line of an E element</td>
+ <td class="described"><a
+ href="#first-line">The ::first-line
+ pseudo-element</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E::first-letter</td>
+ <td class="meaning">the first formatted letter of an E element</td>
+ <td class="described"><a
+ href="#first-letter">The ::first-letter
+ pseudo-element</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E::selection</td>
+ <td class="meaning">the portion of an E element that is currently
+ selected/highlighted by the user</td>
+ <td class="described"><a
+ href="#UIfragments">The UI element
+ fragments pseudo-elements</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E::before</td>
+ <td class="meaning">generated content before an E element</td>
+ <td class="described"><a
+ href="#gen-content">The ::before
+ pseudo-element</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E::after</td>
+ <td class="meaning">generated content after an E element</td>
+ <td class="described"><a
+ href="#gen-content">The ::after
+ pseudo-element</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E.warning</td>
+ <td class="meaning">an E element whose class is
+"warning" (the document language specifies how class is determined).</td>
+ <td class="described"><a
+ href="#class-html">Class
+ selectors</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E#myid</td>
+ <td class="meaning">an E element with ID equal to "myid".</td>
+ <td class="described"><a
+ href="#id-selectors">ID
+ selectors</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E:not(s)</td>
+ <td class="meaning">an E element that does not match simple selector s</td>
+ <td class="described"><a
+ href="#negation">Negation
+ pseudo-class</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E F</td>
+ <td class="meaning">an F element descendant of an E element</td>
+ <td class="described"><a
+ href="#descendant-combinators">Descendant
+ combinator</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E &gt; F</td>
+ <td class="meaning">an F element child of an E element</td>
+ <td class="described"><a
+ href="#child-combinators">Child
+ combinator</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E + F</td>
+ <td class="meaning">an F element immediately preceded by an E element</td>
+ <td class="described"><a
+ href="#adjacent-sibling-combinators">Adjacent sibling combinator</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E ~ F</td>
+ <td class="meaning">an F element preceded by an E element</td>
+ <td class="described"><a
+ href="#general-sibling-combinators">General sibling combinator</a></td>
+ <td class="origin">3</td></tr></tbody></table>
+
+<p>The meaning of each selector is derived from the table above by
+prepending "matches" to the contents of each cell in the "Meaning"
+column.</p>
+
+<h2><a name=casesens>3. Case sensitivity</a></h2>
+
+<p>The case sensitivity of document language element names, attribute
+names, and attribute values in selectors depends on the document
+language. For example, in HTML, element names are case-insensitive,
+but in XML, they are case-sensitive.</p>
+
+<h2><a name=selector-syntax>4. Selector syntax</a></h2>
+
+<p>A <dfn><a name=selector>selector</a></dfn> is a chain of one
+or more <a href="#sequence">sequences of simple selectors</a>
+separated by <a href="#combinators">combinators</a>.</p>
+
+<p>A <dfn><a name=sequence>sequence of simple selectors</a></dfn>
+is a chain of <a href="#simple-selectors-dfn">simple selectors</a>
+that are not separated by a <a href="#combinators">combinator</a>. It
+always begins with a <a href="#type-selectors">type selector</a> or a
+<a href="#universal-selector">universal selector</a>. No other type
+selector or universal selector is allowed in the sequence.</p>
+
+<p>A <dfn><a name=simple-selectors-dfn></a><a
+href="#simple-selectors">simple selector</a></dfn> is either a <a
+href="#type-selectors">type selector</a>, <a
+href="#universal-selector">universal selector</a>, <a
+href="#attribute-selectors">attribute selector</a>, <a
+href="#class-html">class selector</a>, <a
+href="#id-selectors">ID selector</a>, <a
+href="#content-selectors">content selector</a>, or <a
+href="#pseudo-classes">pseudo-class</a>. One <a
+href="#pseudo-elements">pseudo-element</a> may be appended to the last
+sequence of simple selectors.</p>
+
+<p><dfn>Combinators</dfn> are: white space, &quot;greater-than
+sign&quot; (U+003E, <code>&gt;</code>), &quot;plus sign&quot; (U+002B,
+<code>+</code>) and &quot;tilde&quot; (U+007E, <code>~</code>). White
+space may appear between a combinator and the simple selectors around
+it. <a name=whitespace></a>Only the characters "space" (U+0020), "tab"
+(U+0009), "line feed" (U+000A), "carriage return" (U+000D), and "form
+feed" (U+000C) can occur in white space. Other space-like characters,
+such as "em-space" (U+2003) and "ideographic space" (U+3000), are
+never part of white space.</p>
+
+<p>The elements of a document tree that are represented by a selector
+are the <dfn><a name=subject></a>subjects of the selector</dfn>. A
+selector consisting of a single sequence of simple selectors
+represents any element satisfying its requirements. Prepending another
+sequence of simple selectors and a combinator to a sequence imposes
+additional matching constraints, so the subjects of a selector are
+always a subset of the elements represented by the last sequence of
+simple selectors.</p>
+
+<p>An empty selector, containing no sequence of simple selectors and
+no pseudo-element, is an <a href="#Conformance">invalid
+selector</a>.</p>
+
+<h2><a name=grouping>5. Groups of selectors</a></h2>
+
+<p>When several selectors share the same declarations, they may be
+grouped into a comma-separated list. (A comma is U+002C.)</p>
+
+<div class="example">
+<p>CSS examples:</p>
+<p>In this example, we condense three rules with identical
+declarations into one. Thus,</p>
+<pre>h1 { font-family: sans-serif }
+h2 { font-family: sans-serif }
+h3 { font-family: sans-serif }</pre>
+<p>is equivalent to:</p>
+<pre>h1, h2, h3 { font-family: sans-serif }</pre>
+</div>
+
+<p><strong>Warning</strong>: the equivalence is true in this example
+because all the selectors are valid selectors. If just one of these
+selectors were invalid, the entire group of selectors would be
+invalid. This would invalidate the rule for all three heading
+elements, whereas in the former case only one of the three individual
+heading rules would be invalidated.</p>
+
+
+<h2><a name=simple-selectors>6. Simple selectors</a></h2>
+
+<h3><a name=type-selectors>6.1. Type selector</a></h3>
+
+<p>A <dfn>type selector</dfn> is the name of a document language
+element type. A type selector represents an instance of the element
+type in the document tree.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents an <code>h1</code> element in the document tree:</p>
+ <pre>h1</pre>
+</div>
+
+
+<h4><a name=typenmsp>6.1.1. Type selectors and namespaces</a></h4>
+
+<p>Type selectors allow an optional namespace (<a
+href="#refsXMLNAMES">[XMLNAMES]</a>) component. A namespace prefix
+that has been previously declared may be prepended to the element name
+separated by the namespace separator &quot;vertical bar&quot;
+(U+007C, <code>|</code>).</p>
+
+<p>The namespace component may be left empty to indicate that the
+selector is only to represent elements with no declared namespace.</p>
+
+<p>An asterisk may be used for the namespace prefix, indicating that
+the selector represents elements in any namespace (including elements
+with no namespace).</p>
+
+<p>Element type selectors that have no namespace component (no
+namespace separator), represent elements without regard to the
+element's namespace (equivalent to "<code>*|</code>") unless a default
+namespace has been declared. If a default namespace has been declared,
+the selector will represent only elements in the default
+namespace.</p>
+
+<p>A type selector containing a namespace prefix that has not been
+previously declared is an <a href="#Conformance">invalid</a> selector.
+The mechanism for declaring a namespace prefix is left up to the
+language implementing Selectors. In CSS, such a mechanism is defined
+in the General Syntax module.</p>
+
+<p>In a namespace-aware client, element type selectors will only match
+against the <a
+href="http://www.w3.org/TR/REC-xml-names/#NT-LocalPart">local part</a>
+of the element's <a
+href="http://www.w3.org/TR/REC-xml-names/#ns-qualnames">qualified
+name</a>. See <a href="#downlevel">below</a> for notes about matching
+behaviors in down-level clients.</p>
+
+<p>In summary:</p>
+
+<dl>
+ <dt><code>ns|E</code></dt>
+ <dd>elements with name E in namespace ns</dd>
+ <dt><code>*|E</code></dt>
+ <dd>elements with name E in any namespace, including those without any
+ declared namespace</dd>
+ <dt><code>|E</code></dt>
+ <dd>elements with name E without any declared namespace</dd>
+ <dt><code>E</code></dt>
+ <dd>if no default namespace has been specified, this is equivalent to *|E.
+ Otherwise it is equivalent to ns|E where ns is the default namespace.</dd>
+</dl>
+
+<div class="example">
+ <p>CSS examples:</p>
+
+ <pre>@namespace foo url(http://www.example.com);
+ foo|h1 { color: blue }
+ foo|* { color: yellow }
+ |h1 { color: red }
+ *|h1 { color: green }
+ h1 { color: green }</pre>
+
+ <p>The first rule will match only <code>h1</code> elements in the
+ "http://www.example.com" namespace.</p>
+
+ <p>The second rule will match all elements in the
+ "http://www.example.com" namespace.</p>
+
+ <p>The third rule will match only <code>h1</code> elements without
+ any declared namespace.</p>
+
+ <p>The fourth rule will match <code>h1</code> elements in any
+ namespace (including those without any declared namespace).</p>
+
+ <p>The last rule is equivalent to the fourth rule because no default
+ namespace has been defined.</p>
+
+</div>
+
+<h3><a name=universal-selector>6.2. Universal selector</a> </h3>
+
+<p>The <dfn>universal selector</dfn>, written &quot;asterisk&quot;
+(<code>*</code>), represents the qualified name of any element
+type. It represents any single element in the document tree in any
+namespace (including those without any declared namespace) if no
+default namespace has been specified. If a default namespace has been
+specified, see <a href="#univnmsp">Universal selector and
+Namespaces</a> below.</p>
+
+<p>If the universal selector is not the only component of a sequence
+of simple selectors, the <code>*</code> may be omitted.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <ul>
+ <li><code>*[hreflang|=en]</code> and <code>[hreflang|=en]</code> are equivalent,</li>
+ <li><code>*.warning</code> and <code>.warning</code> are equivalent,</li>
+ <li><code>*#myid</code> and <code>#myid</code> are equivalent.</li>
+ </ul>
+</div>
+
+<p class="note"><strong>Note:</strong> it is recommended that the
+<code>*</code>, representing the universal selector, not be
+omitted.</p>
+
+<h4><a name=univnmsp>6.2.1. Universal selector and namespaces</a></h4>
+
+<p>The universal selector allows an optional namespace component. It
+is used as follows:</p>
+
+<dl>
+ <dt><code>ns|*</code></dt>
+ <dd>all elements in namespace ns</dd>
+ <dt><code>*|*</code></dt>
+ <dd>all elements</dd>
+ <dt><code>|*</code></dt>
+ <dd>all elements without any declared namespace</dd>
+ <dt><code>*</code></dt>
+ <dd>if no default namespace has been specified, this is equivalent to *|*.
+ Otherwise it is equivalent to ns|* where ns is the default namespace.</dd>
+</dl>
+
+<p>A universal selector containing a namespace prefix that has not
+been previously declared is an <a href="#Conformance">invalid</a>
+selector. The mechanism for declaring a namespace prefix is left up
+to the language implementing Selectors. In CSS, such a mechanism is
+defined in the General Syntax module.</p>
+
+
+<h3><a name=attribute-selectors>6.3. Attribute selectors</a></h3>
+
+<p>Selectors allow the representation of an element's attributes. When
+a selector is used as an expression to match against an element,
+attribute selectors must be considered to match an element if that
+element has an attribute that matches the attribute represented by the
+attribute selector.</p>
+
+<h4><a name=attribute-representation>6.3.1. Attribute presence and values
+selectors</a></h4>
+
+<p>CSS2 introduced four attribute selectors:</p>
+
+<dl>
+ <dt><code>[att]</code>
+ <dd>Represents an element with the <code>att</code> attribute, whatever the value of
+ the attribute.</dd>
+ <dt><code>[att=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value is exactly
+ "val".</dd>
+ <dt><code>[att~=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value is a <a
+ href="#whitespace">whitespace</a>-separated list of words, one of
+ which is exactly "val". If "val" contains whitespace, it will never
+ represent anything (since the words are <em>separated</em> by
+ spaces).</dd>
+ <dt><code>[att|=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute, its value either
+ being exactly "val" or beginning with "val" immediately followed by
+ "-" (U+002D). This is primarily intended to allow language subcode
+ matches (e.g., the <code>hreflang</code> attribute on the
+ <code>link</code> element in HTML) as described in RFC 3066 (<a
+ href="#refsRFC3066">[RFC3066]</a>). For <code>lang</code> (or
+ <code>xml:lang</code>) language subcode matching, please see <a
+ href="#lang-pseudo">the <code>:lang</code> pseudo-class</a>.</dd>
+</dl>
+
+<p>Attribute values must be identifiers or strings. The
+case-sensitivity of attribute names and values in selectors depends on
+the document language.</p>
+
+<div class="example">
+
+ <p>Examples:</p>
+
+ <p>The following attribute selector represents an <code>h1</code>
+ element that carries the <code>title</code> attribute, whatever its
+ value:</p>
+
+ <pre>h1[title]</pre>
+
+ <p>In the following example, the selector represents a
+ <code>span</code> element whose <code>class</code> attribute has
+ exactly the value "example":</p>
+
+ <pre>span[class="example"]</pre>
+
+ <p>Multiple attribute selectors can be used to represent several
+ attributes of an element, or several conditions on the same
+ attribute. Here, the selector represents a <code>span</code> element
+ whose <code>hello</code> attribute has exactly the value "Cleveland"
+ and whose <code>goodbye</code> attribute has exactly the value
+ "Columbus":</p>
+
+ <pre>span[hello="Cleveland"][goodbye="Columbus"]</pre>
+
+ <p>The following selectors illustrate the differences between "="
+ and "~=". The first selector will represent, for example, the value
+ "copyright copyleft copyeditor" on a <code>rel</code> attribute. The
+ second selector will only represent an <code>a</code> element with
+ an <code>href</code> attribute having the exact value
+ "http://www.w3.org/".</p>
+
+ <pre>a[rel~="copyright"]
+a[href="http://www.w3.org/"]</pre>
+
+ <p>The following selector represents a <code>link</code> element
+ whose <code>hreflang</code> attribute is exactly "fr".</p>
+
+ <pre>link[hreflang=fr]</pre>
+
+ <p>The following selector represents a <code>link</code> element for
+ which the values of the <code>hreflang</code> attribute begins with
+ "en", including "en", "en-US", and "en-cockney":</p>
+
+ <pre>link[hreflang|="en"]</pre>
+
+ <p>Similarly, the following selectors represents a
+ <code>DIALOGUE</code> element whenever it has one of two different
+ values for an attribute <code>character</code>:</p>
+
+ <pre>DIALOGUE[character=romeo]
+DIALOGUE[character=juliet]</pre>
+
+</div>
+
+<h4><a name=attribute-substrings></a>6.3.2. Substring matching attribute
+selectors</h4>
+
+<p>Three additional attribute selectors are provided for matching
+substrings in the value of an attribute:</p>
+
+<dl>
+ <dt><code>[att^=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value begins
+ with the prefix "val".</dd>
+ <dt><code>[att$=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute whose value ends with
+ the suffix "val".</dd>
+ <dt><code>[att*=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute whose value contains
+ at least one instance of the substring "val".</dd>
+</dl>
+
+<p>Attribute values must be identifiers or strings. The
+case-sensitivity of attribute names in selectors depends on the
+document language.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents an HTML <code>object</code>, referencing an
+ image:</p>
+ <pre>object[type^="image/"]</pre>
+ <p>The following selector represents an HTML anchor <code>a</code> with an
+ <code>href</code> attribute whose value ends with ".html".</p>
+ <pre>a[href$=".html"]</pre>
+ <p>The following selector represents an HTML paragraph with a <code>title</code>
+ attribute whose value contains the substring "hello"</p>
+ <pre>p[title*="hello"]</pre>
+</div>
+
+<h4><a name=attrnmsp>6.3.3. Attribute selectors and namespaces</a></h4>
+
+<p>Attribute selectors allow an optional namespace component to the
+attribute name. A namespace prefix that has been previously declared
+may be prepended to the attribute name separated by the namespace
+separator &quot;vertical bar&quot; (<code>|</code>). In keeping with
+the Namespaces in the XML recommendation, default namespaces do not
+apply to attributes, therefore attribute selectors without a namespace
+component apply only to attributes that have no declared namespace
+(equivalent to "<code>|attr</code>"). An asterisk may be used for the
+namespace prefix indicating that the selector is to match all
+attribute names without regard to the attribute's namespace.
+
+<p>An attribute selector with an attribute name containing a namespace
+prefix that has not been previously declared is an <a
+href="#Conformance">invalid</a> selector. The mechanism for declaring
+a namespace prefix is left up to the language implementing Selectors.
+In CSS, such a mechanism is defined in the General Syntax module.
+
+<div class="example">
+ <p>CSS examples:</p>
+ <pre>@namespace foo "http://www.example.com";
+[foo|att=val] { color: blue }
+[*|att] { color: yellow }
+[|att] { color: green }
+[att] { color: green }</pre>
+
+ <p>The first rule will match only elements with the attribute
+ <code>att</code> in the "http://www.example.com" namespace with the
+ value "val".</p>
+
+ <p>The second rule will match only elements with the attribute
+ <code>att</code> regardless of the namespace of the attribute
+ (including no declared namespace).</p>
+
+ <p>The last two rules are equivalent and will match only elements
+ with the attribute <code>att</code> where the attribute is not
+ declared to be in a namespace.</p>
+
+</div>
+
+<h4><a name=def-values>6.3.4. Default attribute values in DTDs</a></h4>
+
+<p>Attribute selectors represent explicitly set attribute values in
+the document tree. Default attribute values may be defined in a DTD or
+elsewhere, but cannot always be selected by attribute
+selectors. Selectors should be designed so that they work even if the
+default values are not included in the document tree.</p>
+
+<p>More precisely, a UA is <em>not</em> required to read an "external
+subset" of the DTD but <em>is</em> required to look for default
+attribute values in the document's "internal subset." (See <a
+href="#refsXML10">[XML10]</a> for definitions of these subsets.)</p>
+
+<p>A UA that recognizes an XML namespace <a
+href="#refsXMLNAMES">[XMLNAMES]</a> is not required to use its
+knowledge of that namespace to treat default attribute values as if
+they were present in the document. (For example, an XHTML UA is not
+required to use its built-in knowledge of the XHTML DTD.)</p>
+
+<p class="note"><strong>Note:</strong> Typically, implementations
+choose to ignore external subsets.</p>
+
+<div class="example">
+<p>Example:</p>
+
+<p>Consider an element EXAMPLE with an attribute "notation" that has a
+default value of "decimal". The DTD fragment might be</p>
+
+<pre class="dtd-example">&lt;!ATTLIST EXAMPLE notation (decimal,octal) "decimal"></pre>
+
+<p>If the style sheet contains the rules</p>
+
+<pre>EXAMPLE[notation=decimal] { /*... default property settings ...*/ }
+EXAMPLE[notation=octal] { /*... other settings...*/ }</pre>
+
+<p>the first rule will not match elements whose "notation" attribute
+is set by default, i.e. not set explicitly. To catch all cases, the
+attribute selector for the default value must be dropped:</p>
+
+<pre>EXAMPLE { /*... default property settings ...*/ }
+EXAMPLE[notation=octal] { /*... other settings...*/ }</pre>
+
+<p>Here, because the selector <code>EXAMPLE[notation=octal]</code> is
+more specific than the tag
+selector alone, the style declarations in the second rule will override
+those in the first for elements that have a "notation" attribute value
+of "octal". Care has to be taken that all property declarations that
+are to apply only to the default case are overridden in the non-default
+cases' style rules.</p>
+
+</div>
+
+<h3><a name=class-html>6.4. Class selectors</a></h3>
+
+<p>Working with HTML, authors may use the period (U+002E,
+<code>.</code>) notation as an alternative to the <code>~=</code>
+notation when representing the <code>class</code> attribute. Thus, for
+HTML, <code>div.value</code> and <code>div[class~=value]</code> have
+the same meaning. The attribute value must immediately follow the
+&quot;period&quot; (<code>.</code>).</p>
+
+<p>UAs may apply selectors using the period (.) notation in XML
+documents if the UA has namespace-specific knowledge that allows it to
+determine which attribute is the &quot;class&quot; attribute for the
+respective namespace. One such example of namespace-specific knowledge
+is the prose in the specification for a particular namespace (e.g. SVG
+1.0 <a href="#refsSVG">[SVG]</a> describes the <a
+href="http://www.w3.org/TR/2001/PR-SVG-20010719/styling.html#ClassAttribute">SVG
+&quot;class&quot; attribute</a> and how a UA should interpret it, and
+similarly MathML 1.01 <a href="#refsMATH">[MATH]</a> describes the <a
+href="http://www.w3.org/1999/07/REC-MathML-19990707/chapter2.html#sec2.3.4">MathML
+&quot;class&quot; attribute</a>.)</p>
+
+<div class="example">
+ <p>CSS examples:</p>
+
+ <p>We can assign style information to all elements with
+ <code>class~="pastoral"</code> as follows:</p>
+
+ <pre>*.pastoral { color: green } /* all elements with class~=pastoral */</pre>
+
+ <p>or just</p>
+
+ <pre>.pastoral { color: green } /* all elements with class~=pastoral */</pre>
+
+ <p>The following assigns style only to H1 elements with
+ <code>class~="pastoral"</code>:</p>
+
+ <pre>H1.pastoral { color: green } /* H1 elements with class~=pastoral */</pre>
+
+ <p>Given these rules, the first H1 instance below would not have
+ green text, while the second would:</p>
+
+ <pre>&lt;H1&gt;Not green&lt;/H1&gt;
+&lt;H1 class="pastoral"&gt;Very green&lt;/H1&gt;</pre>
+
+</div>
+
+<p>To represent a subset of "class" values, each value must be preceded
+by a ".", in any order.</P>
+
+<div class="example">
+
+ <p>CSS example:</p>
+
+ <p>The following rule matches any P element whose "class" attribute
+ has been assigned a list of <a
+ href="#whitespace">whitespace</a>-separated values that includes
+ "pastoral" and "marine":</p>
+
+ <pre>p.pastoral.marine { color: green }</pre>
+
+ <p>This rule matches when <code>class="pastoral blue aqua
+ marine"</code> but does not match for <code>class="pastoral
+ blue"</code>.</p>
+
+</div>
+
+<p class="note"><strong>Note:</strong> Because CSS gives considerable
+power to the "class" attribute, authors could conceivably design their
+own "document language" based on elements with almost no associated
+presentation (such as DIV and SPAN in HTML) and assigning style
+information through the "class" attribute. Authors should avoid this
+practice since the structural elements of a document language often
+have recognized and accepted meanings and author-defined classes may
+not.</p>
+
+<p class="note"><strong>Note:</strong> If an element has multiple
+class attributes, their values must be concatenated with spaces
+between the values before searching for the class. As of this time the
+working group is not aware of any manner in which this situation can
+be reached, however, so this behavior is explicitly non-normative in
+this specification.</p>
+
+<h3><a name=id-selectors>6.5. ID selectors</a></h3>
+
+<p>Document languages may contain attributes that are declared to be
+of type ID. What makes attributes of type ID special is that no two
+such attributes can have the same value in a document, regardless of
+the type of the elements that carry them; whatever the document
+language, an ID typed attribute can be used to uniquely identify its
+element. In HTML all ID attributes are named "id"; XML applications
+may name ID attributes differently, but the same restriction
+applies.</p>
+
+<p>An ID-typed attribute of a document language allows authors to
+assign an identifier to one element instance in the document tree. W3C
+ID selectors represent an element instance based on its identifier. An
+ID selector contains a &quot;number sign&quot; (U+0023,
+<code>#</code>) immediately followed by the ID value, which must be an
+identifier.</p>
+
+<p>Selectors does not specify how a UA knows the ID-typed attribute of
+an element. The UA may, e.g., read a document's DTD, have the
+information hard-coded or ask the user.
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following ID selector represents an <code>h1</code> element
+ whose ID-typed attribute has the value "chapter1":</p>
+ <pre>h1#chapter1</pre>
+ <p>The following ID selector represents any element whose ID-typed
+ attribute has the value "chapter1":</p>
+ <pre>#chapter1</pre>
+ <p>The following selector represents any element whose ID-typed
+ attribute has the value "z98y".</p>
+ <pre>*#z98y</pre>
+</div>
+
+<p class="note"><strong>Note.</strong> In XML 1.0 <a
+href="#refsXML10">[XML10]</a>, the information about which attribute
+contains an element's IDs is contained in a DTD or a schema. When
+parsing XML, UAs do not always read the DTD, and thus may not know
+what the ID of an element is (though a UA may have namespace-specific
+knowledge that allows it to determine which attribute is the ID
+attribute for that namespace). If a style sheet designer knows or
+suspects that a UA may not know what the ID of an element is, he
+should use normal attribute selectors instead:
+<code>[name=p371]</code> instead of <code>#p371</code>. Elements in
+XML 1.0 documents without a DTD do not have IDs at all.</p>
+
+<p>If an element has multiple ID attributes, all of them must be
+treated as IDs for that element for the purposes of the ID
+selector. Such a situation could be reached using mixtures of xml:id,
+DOM3 Core, XML DTDs, and namespace-specific knowledge.</p>
+
+<h3><a name=pseudo-classes>6.6. Pseudo-classes</a></h3>
+
+<p>The pseudo-class concept is introduced to permit selection based on
+information that lies outside of the document tree or that cannot be
+expressed using the other simple selectors.</p>
+
+<p>A pseudo-class always consists of a &quot;colon&quot;
+(<code>:</code>) followed by the name of the pseudo-class and
+optionally by a value between parentheses.</p>
+
+<p>Pseudo-classes are allowed in all sequences of simple selectors
+contained in a selector. Pseudo-classes are allowed anywhere in
+sequences of simple selectors, after the leading type selector or
+universal selector (possibly omitted). Pseudo-class names are
+case-insensitive. Some pseudo-classes are mutually exclusive, while
+others can be applied simultaneously to the same
+element. Pseudo-classes may be dynamic, in the sense that an element
+may acquire or lose a pseudo-class while a user interacts with the
+document.</p>
+
+
+<h4><a name=dynamic-pseudos>6.6.1. Dynamic pseudo-classes</a></h4>
+
+<p>Dynamic pseudo-classes classify elements on characteristics other
+than their name, attributes, or content, in principle characteristics
+that cannot be deduced from the document tree.</p>
+
+<p>Dynamic pseudo-classes do not appear in the document source or
+document tree.</p>
+
+
+<h5>The <a name=link>link pseudo-classes: :link and :visited</a></h5>
+
+<p>User agents commonly display unvisited links differently from
+previously visited ones. Selectors
+provides the pseudo-classes <code>:link</code> and
+<code>:visited</code> to distinguish them:</p>
+
+<ul>
+ <li>The <code>:link</code> pseudo-class applies to links that have
+ not yet been visited.</li>
+ <li>The <code>:visited</code> pseudo-class applies once the link has
+ been visited by the user. </li>
+</ul>
+
+<p>After some amount of time, user agents may choose to return a
+visited link to the (unvisited) ':link' state.</p>
+
+<p>The two states are mutually exclusive.</p>
+
+<div class="example">
+
+ <p>Example:</p>
+
+ <p>The following selector represents links carrying class
+ <code>external</code> and already visited:</p>
+
+ <pre>a.external:visited</pre>
+
+</div>
+
+<p class="note"><strong>Note:</strong> It is possible for style sheet
+authors to abuse the :link and :visited pseudo-classes to determine
+which sites a user has visited without the user's consent.
+
+<p>UAs may therefore treat all links as unvisited links, or implement
+other measures to preserve the user's privacy while rendering visited
+and unvisited links differently.</p>
+
+<h5>The <a name=useraction-pseudos>user action pseudo-classes
+:hover, :active, and :focus</a></h5>
+
+<p>Interactive user agents sometimes change the rendering in response
+to user actions. Selectors provides
+three pseudo-classes for the selection of an element the user is
+acting on.</p>
+
+<ul>
+
+ <li>The <code>:hover</code> pseudo-class applies while the user
+ designates an element with a pointing device, but does not activate
+ it. For example, a visual user agent could apply this pseudo-class
+ when the cursor (mouse pointer) hovers over a box generated by the
+ element. User agents not that do not support <a
+ href="http://www.w3.org/TR/REC-CSS2/media.html#interactive-media-group">interactive
+ media</a> do not have to support this pseudo-class. Some conforming
+ user agents that support <a
+ href="http://www.w3.org/TR/REC-CSS2/media.html#interactive-media-group">interactive
+ media</a> may not be able to support this pseudo-class (e.g., a pen
+ device that does not detect hovering).</li>
+
+ <li>The <code>:active</code> pseudo-class applies while an element
+ is being activated by the user. For example, between the times the
+ user presses the mouse button and releases it.</li>
+
+ <li>The <code>:focus</code> pseudo-class applies while an element
+ has the focus (accepts keyboard or mouse events, or other forms of
+ input). </li>
+
+</ul>
+
+<p>There may be document language or implementation specific limits on
+which elements can become <code>:active</code> or acquire
+<code>:focus</code>.</p>
+
+<p>These pseudo-classes are not mutually exclusive. An element may
+match several pseudo-classes at the same time.</p>
+
+<p>Selectors doesn't define if the parent of an element that is
+':active' or ':hover' is also in that state.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <pre>a:link /* unvisited links */
+a:visited /* visited links */
+a:hover /* user hovers */
+a:active /* active links */</pre>
+ <p>An example of combining dynamic pseudo-classes:</p>
+ <pre>a:focus
+a:focus:hover</pre>
+ <p>The last selector matches <code>a</code> elements that are in
+ the pseudo-class :focus and in the pseudo-class :hover.</p>
+</div>
+
+<p class="note"><strong>Note:</strong> An element can be both ':visited'
+and ':active' (or ':link' and ':active').</p>
+
+<h4><a name=target-pseudo>6.6.2. The target pseudo-class :target</a></h4>
+
+<p>Some URIs refer to a location within a resource. This kind of URI
+ends with a &quot;number sign&quot; (#) followed by an anchor
+identifier (called the fragment identifier).</p>
+
+<p>URIs with fragment identifiers link to a certain element within the
+document, known as the target element. For instance, here is a URI
+pointing to an anchor named <code>section_2</code> in an HTML
+document:</p>
+
+<pre>http://example.com/html/top.html#section_2</pre>
+
+<p>A target element can be represented by the <code>:target</code>
+pseudo-class. If the document's URI has no fragment identifier, then
+the document has no target element.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <pre>p.note:target</pre>
+ <p>This selector represents a <code>p</code> element of class
+ <code>note</code> that is the target element of the referring
+ URI.</p>
+</div>
+
+<div class="example">
+ <p>CSS example:</p>
+ <p>Here, the <code>:target</code> pseudo-class is used to make the
+ target element red and place an image before it, if there is one:</p>
+ <pre>*:target { color : red }
+*:target::before { content : url(target.png) }</pre>
+</div>
+
+<h4><a name=lang-pseudo>6.6.3. The language pseudo-class :lang</a></h4>
+
+<p>If the document language specifies how the human language of an
+element is determined, it is possible to write selectors that
+represent an element based on its language. For example, in HTML <a
+href="#refsHTML4">[HTML4]</a>, the language is determined by a
+combination of the <code>lang</code> attribute, the <code>meta</code>
+element, and possibly by information from the protocol (such as HTTP
+headers). XML uses an attribute called <code>xml:lang</code>, and
+there may be other document language-specific methods for determining
+the language.</p>
+
+<p>The pseudo-class <code>:lang(C)</code> represents an element that
+is in language C. Whether an element is represented by a
+<code>:lang()</code> selector is based solely on the identifier C
+being either equal to, or a hyphen-separated substring of, the
+element's language value, in the same way as if performed by the <a
+href="#attribute-representation">'|='</a> operator in attribute
+selectors. The identifier C does not have to be a valid language
+name.</p>
+
+<p>C must not be empty. (If it is, the selector is invalid.)</p>
+
+<p class="note"><strong>Note:</strong> It is recommended that
+documents and protocols indicate language using codes from RFC 3066 <a
+href="#refsRFC3066">[RFC3066]</a> or its successor, and by means of
+"xml:lang" attributes in the case of XML-based documents <a
+href="#refsXML10">[XML10]</a>. See <a
+href="http://www.w3.org/International/questions/qa-lang-2or3.html">
+"FAQ: Two-letter or three-letter language codes."</a></p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The two following selectors represent an HTML document that is in
+ Belgian, French, or German. The two next selectors represent
+ <code>q</code> quotations in an arbitrary element in Belgian, French,
+ or German.</p>
+ <pre>html:lang(fr-be)
+html:lang(de)
+:lang(fr-be) &gt; q
+:lang(de) &gt; q</pre>
+</div>
+
+<h4><a name=UIstates>6.6.4. The UI element states pseudo-classes</a></h4>
+
+<h5><a name=enableddisabled>The :enabled and :disabled pseudo-classes</a></h5>
+
+<p>The <code>:enabled</code> pseudo-class allows authors to customize
+the look of user interface elements that are enabled &mdash; which the
+user can select or activate in some fashion (e.g. clicking on a button
+with a mouse). There is a need for such a pseudo-class because there
+is no way to programmatically specify the default appearance of say,
+an enabled <code>input</code> element without also specifying what it
+would look like when it was disabled.</p>
+
+<p>Similar to <code>:enabled</code>, <code>:disabled</code> allows the
+author to specify precisely how a disabled or inactive user interface
+element should look.</p>
+
+<p>Most elements will be neither enabled nor disabled. An element is
+enabled if the user can either activate it or transfer the focus to
+it. An element is disabled if it could be enabled, but the user cannot
+presently activate it or transfer focus to it.</p>
+
+
+<h5><a name=checked>The :checked pseudo-class</a></h5>
+
+<p>Radio and checkbox elements can be toggled by the user. Some menu
+items are "checked" when the user selects them. When such elements are
+toggled "on" the <code>:checked</code> pseudo-class applies. The
+<code>:checked</code> pseudo-class initially applies to such elements
+that have the HTML4 <code>selected</code> and <code>checked</code>
+attributes as described in <a
+href="http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.2.1">Section
+17.2.1 of HTML4</a>, but of course the user can toggle "off" such
+elements in which case the <code>:checked</code> pseudo-class would no
+longer apply. While the <code>:checked</code> pseudo-class is dynamic
+in nature, and is altered by user action, since it can also be based
+on the presence of the semantic HTML4 <code>selected</code> and
+<code>checked</code> attributes, it applies to all media.
+
+
+<h5><a name=indeterminate>The :indeterminate pseudo-class</a></h5>
+
+<div class="note">
+
+<p>Radio and checkbox elements can be toggled by the user, but are
+sometimes in an indeterminate state, neither checked nor unchecked.
+This can be due to an element attribute, or DOM manipulation.</p>
+
+<p>A future version of this specification may introduce an
+<code>:indeterminate</code> pseudo-class that applies to such elements.
+<!--While the <code>:indeterminate</code> pseudo-class is dynamic in
+nature, and is altered by user action, since it can also be based on
+the presence of an element attribute, it applies to all media.</p>
+
+<p>Components of a radio-group initialized with no pre-selected choice
+are an example of :indeterminate state.--></p>
+
+</div>
+
+
+<h4><a name=structural-pseudos>6.6.5. Structural pseudo-classes</a></h4>
+
+<p>Selectors introduces the concept of <dfn>structural
+pseudo-classes</dfn> to permit selection based on extra information that lies in
+the document tree but cannot be represented by other simple selectors or
+combinators.
+
+<p>Note that standalone pieces of PCDATA (text nodes in the DOM) are
+not counted when calculating the position of an element in the list of
+children of its parent. When calculating the position of an element in
+the list of children of its parent, the index numbering starts at 1.
+
+
+<h5><a name=root-pseudo>:root pseudo-class</a></h5>
+
+<p>The <code>:root</code> pseudo-class represents an element that is
+the root of the document. In HTML 4, this is always the
+<code>HTML</code> element.
+
+
+<h5><a name=nth-child-pseudo>:nth-child() pseudo-class</a></h5>
+
+<p>The
+<code>:nth-child(<var>a</var><code>n</code>+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings
+<strong>before</strong> it in the document tree, for a given positive
+integer or zero value of <code>n</code>, and has a parent element. In
+other words, this matches the <var>b</var>th child of an element after
+all the children have been split into groups of <var>a</var> elements
+each. For example, this allows the selectors to address every other
+row in a table, and could be used to alternate the color
+of paragraph text in a cycle of four. The <var>a</var> and
+<var>b</var> values must be zero, negative integers or positive
+integers. The index of the first child of an element is 1.
+
+<p>In addition to this, <code>:nth-child()</code> can take
+'<code>odd</code>' and '<code>even</code>' as arguments instead.
+'<code>odd</code>' has the same signification as <code>2n+1</code>,
+and '<code>even</code>' has the same signification as <code>2n</code>.
+
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-child(2n+1) /* represents every odd row of an HTML table */
+tr:nth-child(odd) /* same */
+tr:nth-child(2n) /* represents every even row of an HTML table */
+tr:nth-child(even) /* same */
+
+/* Alternate paragraph colours in CSS */
+p:nth-child(4n+1) { color: navy; }
+p:nth-child(4n+2) { color: green; }
+p:nth-child(4n+3) { color: maroon; }
+p:nth-child(4n+4) { color: purple; }</pre>
+</div>
+
+<p>When <var>a</var>=0, no repeating is used, so for example
+<code>:nth-child(0n+5)</code> matches only the fifth child. When
+<var>a</var>=0, the <var>a</var><code>n</code> part need not be
+included, so the syntax simplifies to
+<code>:nth-child(<var>b</var>)</code> and the last example simplifies
+to <code>:nth-child(5)</code>.
+
+<div class="example">
+<p>Examples:</p>
+<pre>foo:nth-child(0n+1) /* represents an element foo, first child of its parent element */
+foo:nth-child(1) /* same */</pre>
+</div>
+
+<p>When <var>a</var>=1, the number may be omitted from the rule.
+
+<div class="example">
+<p>Examples:</p>
+<p>The following selectors are therefore equivalent:</p>
+<pre>bar:nth-child(1n+0) /* represents all bar elements, specificity (0,1,1) */
+bar:nth-child(n+0) /* same */
+bar:nth-child(n) /* same */
+bar /* same but lower specificity (0,0,1) */</pre>
+</div>
+
+<p>If <var>b</var>=0, then every <var>a</var>th element is picked. In
+such a case, the <var>b</var> part may be omitted.
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-child(2n+0) /* represents every even row of an HTML table */
+tr:nth-child(2n) /* same */</pre>
+</div>
+
+<p>If both <var>a</var> and <var>b</var> are equal to zero, the
+pseudo-class represents no element in the document tree.</p>
+
+<p>The value <var>a</var> can be negative, but only the positive
+values of <var>a</var><code>n</code>+<var>b</var>, for
+<code>n</code>&ge;0, may represent an element in the document
+tree.</p>
+
+<div class="example">
+<p>Example:</p>
+<pre>html|tr:nth-child(-n+6) /* represents the 6 first rows of XHTML tables */</pre>
+</div>
+
+<p>When the value <var>b</var> is negative, the "+" character in the
+expression must be removed (it is effectively replaced by the "-"
+character indicating the negative value of <var>b</var>).</p>
+
+<div class="example">
+<p>Examples:</p>
+<pre>:nth-child(10n-1) /* represents the 9th, 19th, 29th, etc, element */
+:nth-child(10n+9) /* Same */
+:nth-child(10n+-1) /* Syntactically invalid, and would be ignored */</pre>
+</div>
+
+
+<h5><a name=nth-last-child-pseudo>:nth-last-child() pseudo-class</a></h5>
+
+<p>The <code>:nth-last-child(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings
+<strong>after</strong> it in the document tree, for a given positive
+integer or zero value of <code>n</code>, and has a parent element. See
+<code>:nth-child()</code> pseudo-class for the syntax of its argument.
+It also accepts the '<code>even</code>' and '<code>odd</code>' values
+as arguments.
+
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-last-child(-n+2) /* represents the two last rows of an HTML table */
+
+foo:nth-last-child(odd) /* represents all odd foo elements in their parent element,
+ counting from the last one */</pre>
+</div>
+
+
+<h5><a name=nth-of-type-pseudo>:nth-of-type() pseudo-class</a></h5>
+
+<p>The <code>:nth-of-type(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings with the same
+element name <strong>before</strong> it in the document tree, for a
+given zero or positive integer value of <code>n</code>, and has a
+parent element. In other words, this matches the <var>b</var>th child
+of that type after all the children of that type have been split into
+groups of a elements each. See <code>:nth-child()</code> pseudo-class
+for the syntax of its argument. It also accepts the
+'<code>even</code>' and '<code>odd</code>' values.
+
+
+<div class="example">
+<p>CSS example:</p>
+<p>This allows an author to alternate the position of floated images:</p>
+<pre>img:nth-of-type(2n+1) { float: right; }
+img:nth-of-type(2n) { float: left; }</pre>
+</div>
+
+
+<h5><a name=nth-last-of-type-pseudo>:nth-last-of-type() pseudo-class</a></h5>
+
+<p>The <code>:nth-last-of-type(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings with the same
+element name <strong>after</strong> it in the document tree, for a
+given zero or positive integer value of <code>n</code>, and has a
+parent element. See <code>:nth-child()</code> pseudo-class for the
+syntax of its argument. It also accepts the '<code>even</code>' and '<code>odd</code>' values.
+
+
+<div class="example">
+ <p>Example:</p>
+ <p>To represent all <code>h2</code> children of an XHTML
+ <code>body</code> except the first and last, one could use the
+ following selector:</p>
+ <pre>body &gt; h2:nth-of-type(n+2):nth-last-of-type(n+2)</pre>
+ <p>In this case, one could also use <code>:not()</code>, although the
+ selector ends up being just as long:</p>
+ <pre>body &gt; h2:not(:first-of-type):not(:last-of-type)</pre>
+</div>
+
+
+<h5><a name=first-child-pseudo>:first-child pseudo-class</a></h5>
+
+<p>Same as <code>:nth-child(1)</code>. The <code>:first-child</code> pseudo-class
+represents an element that is the first child of some other element.
+
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element that is
+ the first child of a <code>div</code> element:</p>
+ <pre>div &gt; p:first-child</pre>
+ <p>This selector can represent the <code>p</code> inside the
+ <code>div</code> of the following fragment:</p>
+ <pre>&lt;p&gt; The last P before the note.&lt;/p&gt;
+&lt;div class="note"&gt;
+ &lt;p&gt; The first P inside the note.&lt;/p&gt;
+&lt;/div&gt;</pre>but cannot represent the second <code>p</code> in the following
+fragment:
+ <pre>&lt;p&gt; The last P before the note.&lt;/p&gt;
+&lt;div class="note"&gt;
+ &lt;h2&gt; Note &lt;/h2&gt;
+ &lt;p&gt; The first P inside the note.&lt;/p&gt;
+&lt;/div&gt;</pre>
+ <p>The following two selectors are usually equivalent:</p>
+ <pre>* &gt; a:first-child /* a is first child of any element */
+a:first-child /* Same (assuming a is not the root element) */</pre>
+</div>
+
+<h5><a name=last-child-pseudo>:last-child pseudo-class</a></h5>
+
+<p>Same as <code>:nth-last-child(1)</code>. The <code>:last-child</code> pseudo-class
+represents an element that is the last child of some other element.
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents a list item <code>li</code> that
+ is the last child of an ordered list <code>ol</code>.
+ <pre>ol &gt; li:last-child</pre>
+</div>
+
+<h5><a name=first-of-type-pseudo>:first-of-type pseudo-class</a></h5>
+
+<p>Same as <code>:nth-of-type(1)</code>. The <code>:first-of-type</code> pseudo-class
+represents an element that is the first sibling of its type in the list of
+children of its parent element.
+
+<div class="example">
+<p>Example:</p>
+<p>The following selector represents a definition title
+<code>dt</code> inside a definition list <code>dl</code>, this
+<code>dt</code> being the first of its type in the list of children of
+its parent element.</p>
+<pre>dl dt:first-of-type</pre>
+<p>It is a valid description for the first two <code>dt</code>
+elements in the following example but not for the third one:</p>
+<pre>&lt;dl&gt;
+ &lt;dt&gt;gigogne&lt;/dt&gt;
+ &lt;dd&gt;
+ &lt;dl&gt;
+ &lt;dt&gt;fus&eacute;e&lt;/dt&gt;
+ &lt;dd&gt;multistage rocket&lt;/dd&gt;
+ &lt;dt&gt;table&lt;/dt&gt;
+ &lt;dd&gt;nest of tables&lt;/dd&gt;
+ &lt;/dl&gt;
+ &lt;/dd&gt;
+&lt;/dl&gt;</pre>
+</div>
+
+<h5><a name=last-of-type-pseudo>:last-of-type pseudo-class</a></h5>
+
+<p>Same as <code>:nth-last-of-type(1)</code>. The
+<code>:last-of-type</code> pseudo-class represents an element that is
+the last sibling of its type in the list of children of its parent
+element.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents the last data cell
+ <code>td</code> of a table row.</p>
+ <pre>tr &gt; td:last-of-type</pre>
+</div>
+
+<h5><a name=only-child-pseudo>:only-child pseudo-class</a></h5>
+
+<p>Represents an element that has a parent element and whose parent
+element has no other element children. Same as
+<code>:first-child:last-child</code> or
+<code>:nth-child(1):nth-last-child(1)</code>, but with a lower
+specificity.</p>
+
+<h5><a name=only-of-type-pseudo>:only-of-type pseudo-class</a></h5>
+
+<p>Represents an element that has a parent element and whose parent
+element has no other element children with the same element name. Same
+as <code>:first-of-type:last-of-type</code> or
+<code>:nth-of-type(1):nth-last-of-type(1)</code>, but with a lower
+specificity.</p>
+
+
+<h5><a name=empty-pseudo></a>:empty pseudo-class</h5>
+
+<p>The <code>:empty</code> pseudo-class represents an element that has
+no children at all. In terms of the DOM, only element nodes and text
+nodes (including CDATA nodes and entity references) whose data has a
+non-zero length must be considered as affecting emptiness; comments,
+PIs, and other nodes must not affect whether an element is considered
+empty or not.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p><code>p:empty</code> is a valid representation of the following fragment:</p>
+ <pre>&lt;p&gt;&lt;/p&gt;</pre>
+ <p><code>foo:empty</code> is not a valid representation for the
+ following fragments:</p>
+ <pre>&lt;foo&gt;bar&lt;/foo&gt;</pre>
+ <pre>&lt;foo&gt;&lt;bar&gt;bla&lt;/bar&gt;&lt;/foo&gt;</pre>
+ <pre>&lt;foo&gt;this is not &lt;bar&gt;:empty&lt;/bar&gt;&lt;/foo&gt;</pre>
+</div>
+
+<h4><a name=content-selectors>6.6.6. Blank</a></h4> <!-- It's the Return of Appendix H!!! Run away! -->
+
+<p>This section intentionally left blank.</p>
+<!-- (used to be :contains()) -->
+
+<h4><a name=negation></a>6.6.7. The negation pseudo-class</h4>
+
+<p>The negation pseudo-class, <code>:not(<var>X</var>)</code>, is a
+functional notation taking a <a href="#simple-selectors-dfn">simple
+selector</a> (excluding the negation pseudo-class itself and
+pseudo-elements) as an argument. It represents an element that is not
+represented by the argument.
+
+<!-- pseudo-elements are not simple selectors, so the above paragraph
+may be a bit confusing -->
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following CSS selector matches all <code>button</code>
+ elements in an HTML document that are not disabled.</p>
+ <pre>button:not([DISABLED])</pre>
+ <p>The following selector represents all but <code>FOO</code>
+ elements.</p>
+ <pre>*:not(FOO)</pre>
+ <p>The following group of selectors represents all HTML elements
+ except links.</p>
+ <pre>html|*:not(:link):not(:visited)</pre>
+</div>
+
+<p>Default namespace declarations do not affect the argument of the
+negation pseudo-class unless the argument is a universal selector or a
+type selector.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>Assuming that the default namespace is bound to
+ "http://example.com/", the following selector represents all
+ elements that are not in that namespace:</p>
+ <pre>*|*:not(*)</pre>
+ <p>The following CSS selector matches any element being hovered,
+ regardless of its namespace. In particular, it is not limited to
+ only matching elements in the default namespace that are not being
+ hovered, and elements not in the default namespace don't match the
+ rule when they <em>are</em> being hovered.</p>
+ <pre>*|*:not(:hover)</pre>
+</div>
+
+<p class="note"><strong>Note</strong>: the :not() pseudo allows
+useless selectors to be written. For instance <code>:not(*|*)</code>,
+which represents no element at all, or <code>foo:not(bar)</code>,
+which is equivalent to <code>foo</code> but with a higher
+specificity.</p>
+
+<h3><a name=pseudo-elements>7. Pseudo-elements</a></h3>
+
+<p>Pseudo-elements create abstractions about the document tree beyond
+those specified by the document language. For instance, document
+languages do not offer mechanisms to access the first letter or first
+line of an element's content. Pseudo-elements allow designers to refer
+to this otherwise inaccessible information. Pseudo-elements may also
+provide designers a way to refer to content that does not exist in the
+source document (e.g., the <code>::before</code> and
+<code>::after</code> pseudo-elements give access to generated
+content).</p>
+
+<p>A pseudo-element is made of two colons (<code>::</code>) followed
+by the name of the pseudo-element.</p>
+
+<p>This <code>::</code> notation is introduced by the current document
+in order to establish a discrimination between pseudo-classes and
+pseudo-elements. For compatibility with existing style sheets, user
+agents must also accept the previous one-colon notation for
+pseudo-elements introduced in CSS levels 1 and 2 (namely,
+<code>:first-line</code>, <code>:first-letter</code>,
+<code>:before</code> and <code>:after</code>). This compatibility is
+not allowed for the new pseudo-elements introduced in CSS level 3.</p>
+
+<p>Only one pseudo-element may appear per selector, and if present it
+must appear after the sequence of simple selectors that represents the
+<a href="#subject">subjects</a> of the selector. <span class="note">A
+future version of this specification may allow multiple
+pesudo-elements per selector.</span></p>
+
+<h4><a name=first-line>7.1. The ::first-line pseudo-element</a></h4>
+
+<p>The <code>::first-line</code> pseudo-element describes the contents
+of the first formatted line of an element.
+
+<div class="example">
+<p>CSS example:</p>
+<pre>p::first-line { text-transform: uppercase }</pre>
+<p>The above rule means "change the letters of the first line of every
+paragraph to uppercase".</p>
+</div>
+
+<p>The selector <code>p::first-line</code> does not match any real
+HTML element. It does match a pseudo-element that conforming user
+agents will insert at the beginning of every paragraph.</p>
+
+<p>Note that the length of the first line depends on a number of
+factors, including the width of the page, the font size, etc. Thus,
+an ordinary HTML paragraph such as:</p>
+
+<pre>
+&lt;P&gt;This is a somewhat long HTML
+paragraph that will be broken into several
+lines. The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>the lines of which happen to be broken as follows:
+
+<pre>
+THIS IS A SOMEWHAT LONG HTML PARAGRAPH THAT
+will be broken into several lines. The first
+line will be identified by a fictional tag
+sequence. The other lines will be treated as
+ordinary lines in the paragraph.
+</pre>
+
+<p>This paragraph might be "rewritten" by user agents to include the
+<em>fictional tag sequence</em> for <code>::first-line</code>. This
+fictional tag sequence helps to show how properties are inherited.</p>
+
+<pre>
+&lt;P&gt;<b>&lt;P::first-line&gt;</b> This is a somewhat long HTML
+paragraph that <b>&lt;/P::first-line&gt;</b> will be broken into several
+lines. The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>If a pseudo-element breaks up a real element, the desired effect
+can often be described by a fictional tag sequence that closes and
+then re-opens the element. Thus, if we mark up the previous paragraph
+with a <code>span</code> element:</p>
+
+<pre>
+&lt;P&gt;<b>&lt;SPAN class="test"&gt;</b> This is a somewhat long HTML
+paragraph that will be broken into several
+lines.<b>&lt;/SPAN&gt;</b> The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>the user agent could simulate start and end tags for
+<code>span</code> when inserting the fictional tag sequence for
+<code>::first-line</code>.
+
+<pre>
+&lt;P&gt;&lt;P::first-line&gt;<b>&lt;SPAN class="test"&gt;</b> This is a
+somewhat long HTML
+paragraph that will <b>&lt;/SPAN&gt;</b>&lt;/P::first-line&gt;<b>&lt;SPAN class="test"&gt;</b> be
+broken into several
+lines.<b>&lt;/SPAN&gt;</b> The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>In CSS, the <code>::first-line</code> pseudo-element can only be
+attached to a block-level element, an inline-block, a table-caption,
+or a table-cell.</p>
+
+<p><a name="first-formatted-line"></a>The "first formatted line" of an
+element may occur inside a
+block-level descendant in the same flow (i.e., a block-level
+descendant that is not positioned and not a float). E.g., the first
+line of the <code>div</code> in <code>&lt;DIV>&lt;P>This
+line...&lt;/P>&lt/DIV></code> is the first line of the <code>p</code> (assuming
+that both <code>p</code> and <code>div</code> are block-level).
+
+<p>The first line of a table-cell or inline-block cannot be the first
+formatted line of an ancestor element. Thus, in <code>&lt;DIV&gt;&lt;P
+STYLE="display: inline-block">Hello&lt;BR&gt;Goodbye&lt;/P&gt;
+etcetera&lt;/DIV&gt;</code> the first formatted line of the
+<code>div</code> is not the line "Hello".
+
+<p class="note">Note that the first line of the <code>p</code> in this
+fragment: <code>&lt;p&gt&lt;br&gt;First...</code> doesn't contain any
+letters (assuming the default style for <code>br</code> in HTML
+4). The word "First" is not on the first formatted line.
+
+<p>A UA should act as if the fictional start tags of the
+<code>::first-line</code> pseudo-elements were nested just inside the
+innermost enclosing block-level element. (Since CSS1 and CSS2 were
+silent on this case, authors should not rely on this behavior.) Here
+is an example. The fictional tag sequence for</p>
+
+<pre>
+&lt;DIV>
+ &lt;P>First paragraph&lt;/P>
+ &lt;P>Second paragraph&lt;/P>
+&lt;/DIV>
+</pre>
+
+<p>is</p>
+
+<pre>
+&lt;DIV>
+ &lt;P>&lt;DIV::first-line>&lt;P::first-line>First paragraph&lt;/P::first-line>&lt;/DIV::first-line>&lt;/P>
+ &lt;P>&lt;P::first-line>Second paragraph&lt;/P::first-line>&lt;/P>
+&lt;/DIV>
+</pre>
+
+<p>The <code>::first-line</code> pseudo-element is similar to an
+inline-level element, but with certain restrictions. In CSS, the
+following properties apply to a <code>::first-line</code>
+pseudo-element: font properties, color property, background
+properties, 'word-spacing', 'letter-spacing', 'text-decoration',
+'vertical-align', 'text-transform', 'line-height'. UAs may apply other
+properties as well.</p>
+
+
+<h4><a name=first-letter>7.2. The ::first-letter pseudo-element</a></h4>
+
+<p>The <code>::first-letter</code> pseudo-element represents the first
+letter of the first line of a block, if it is not preceded by any
+other content (such as images or inline tables) on its line. The
+::first-letter pseudo-element may be used for "initial caps" and "drop
+caps", which are common typographical effects. This type of initial
+letter is similar to an inline-level element if its 'float' property
+is 'none'; otherwise, it is similar to a floated element.</p>
+
+<p>In CSS, these are the properties that apply to <code>::first-letter</code>
+pseudo-elements: font properties, 'text-decoration', 'text-transform',
+'letter-spacing', 'word-spacing' (when appropriate), 'line-height',
+'float', 'vertical-align' (only if 'float' is 'none'), margin
+properties, padding properties, border properties, color property,
+background properties. UAs may apply other properties as well. To
+allow UAs to render a typographically correct drop cap or initial cap,
+the UA may choose a line-height, width and height based on the shape
+of the letter, unlike for normal elements.</p>
+
+<div class="example">
+<p>Example:</p>
+<p>This example shows a possible rendering of an initial cap. Note
+that the 'line-height' that is inherited by the <code>::first-letter</code>
+pseudo-element is 1.1, but the UA in this example has computed the
+height of the first letter differently, so that it doesn't cause any
+unnecessary space between the first two lines. Also note that the
+fictional start tag of the first letter is inside the <span>span</span>, and thus
+the font weight of the first letter is normal, not bold as the <span>span</span>:
+<pre>
+p { line-height: 1.1 }
+p::first-letter { font-size: 3em; font-weight: normal }
+span { font-weight: bold }
+...
+&lt;p>&lt;span>Het hemelsche&lt;/span> gerecht heeft zich ten lange lesten&lt;br>
+Erbarremt over my en mijn benaeuwde vesten&lt;br>
+En arme burgery, en op mijn volcx gebed&lt;br>
+En dagelix geschrey de bange stad ontzet.
+</pre>
+<div class="figure">
+<p><img src="initial-cap.png" alt="Image illustrating the ::first-letter pseudo-element">
+</div>
+</div>
+
+<div class="example">
+<p>The following CSS will make a drop cap initial letter span about two lines:</p>
+
+<pre>
+&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"&gt;
+&lt;HTML&gt;
+ &lt;HEAD&gt;
+ &lt;TITLE&gt;Drop cap initial letter&lt;/TITLE&gt;
+ &lt;STYLE type="text/css"&gt;
+ P { font-size: 12pt; line-height: 1.2 }
+ P::first-letter { font-size: 200%; font-weight: bold; float: left }
+ SPAN { text-transform: uppercase }
+ &lt;/STYLE&gt;
+ &lt;/HEAD&gt;
+ &lt;BODY&gt;
+ &lt;P&gt;&lt;SPAN&gt;The first&lt;/SPAN&gt; few words of an article
+ in The Economist.&lt;/P&gt;
+ &lt;/BODY&gt;
+&lt;/HTML&gt;
+</pre>
+
+<p>This example might be formatted as follows:</p>
+
+<div class="figure">
+<P><img src="first-letter.gif" alt="Image illustrating the combined effect of the ::first-letter and ::first-line pseudo-elements"></p>
+</div>
+
+<p>The <span class="index-inst" title="fictional tag
+sequence">fictional tag sequence</span> is:</p>
+
+<pre>
+&lt;P&gt;
+&lt;SPAN&gt;
+&lt;P::first-letter&gt;
+T
+&lt;/P::first-letter&gt;he first
+&lt;/SPAN&gt;
+few words of an article in the Economist.
+&lt;/P&gt;
+</pre>
+
+<p>Note that the <code>::first-letter</code> pseudo-element tags abut
+the content (i.e., the initial character), while the ::first-line
+pseudo-element start tag is inserted right after the start tag of the
+block element.</p> </div>
+
+<p>In order to achieve traditional drop caps formatting, user agents
+may approximate font sizes, for example to align baselines. Also, the
+glyph outline may be taken into account when formatting.</p>
+
+<p>Punctuation (i.e, characters defined in Unicode in the "open" (Ps),
+"close" (Pe), "initial" (Pi). "final" (Pf) and "other" (Po)
+punctuation classes), that precedes or follows the first letter should
+be included. <a href="#refsUNICODE">[UNICODE]</a></p>
+
+<div class="figure">
+<P><img src="first-letter2.gif" alt="Quotes that precede the
+first letter should be included."></p>
+</div>
+
+<p>The <code>::first-letter</code> also applies if the first letter is
+in fact a digit, e.g., the "6" in "67 million dollars is a lot of
+money."</p>
+
+<p>In CSS, the <code>::first-letter</code> pseudo-element applies to
+block, list-item, table-cell, table-caption, and inline-block
+elements. <span class="note">A future version of this specification
+may allow this pesudo-element to apply to more element
+types.</span></p>
+
+<p>The <code>::first-letter</code> pseudo-element can be used with all
+such elements that contain text, or that have a descendant in the same
+flow that contains text. A UA should act as if the fictional start tag
+of the ::first-letter pseudo-element is just before the first text of
+the element, even if that first text is in a descendant.</p>
+
+<div class="example">
+<p>Example:</p>
+<p>The fictional tag sequence for this HTMLfragment:
+<pre>&lt;div>
+&lt;p>The first text.</pre>
+<p>is:
+<pre>&lt;div>
+&lt;p>&lt;div::first-letter>&lt;p::first-letter>T&lt;/...>&lt;/...>he first text.</pre>
+</div>
+
+<p>The first letter of a table-cell or inline-block cannot be the
+first letter of an ancestor element. Thus, in <code>&lt;DIV&gt;&lt;P
+STYLE="display: inline-block">Hello&lt;BR&gt;Goodbye&lt;/P&gt;
+etcetera&lt;/DIV&gt;</code> the first letter of the <code>div</code> is not the
+letter "H". In fact, the <code>div</code> doesn't have a first letter.
+
+<p>The first letter must occur on the <a
+href="#first-formatted-line">first formatted line.</a> For example, in
+this fragment: <code>&lt;p&gt&lt;br&gt;First...</code> the first line
+doesn't contain any letters and <code>::first-letter</code> doesn't
+match anything (assuming the default style for <code>br</code> in HTML
+4). In particular, it does not match the "F" of "First."
+
+<p>In CSS, if an element is a list item ('display: list-item'), the
+<code>::first-letter</code> applies to the first letter in the
+principal box after the marker. UAs may ignore
+<code>::first-letter</code> on list items with 'list-style-position:
+inside'. If an element has <code>::before</code> or
+<code>::after</code> content, the <code>::first-letter</code> applies
+to the first letter of the element <em>including</em> that content.
+
+<div class="example">
+<p>Example:</p>
+<p>After the rule 'p::before {content: "Note: "}', the selector
+'p::first-letter' matches the "N" of "Note".</p>
+</div>
+
+<p>Some languages may have specific rules about how to treat certain
+letter combinations. In Dutch, for example, if the letter combination
+"ij" appears at the beginning of a word, both letters should be
+considered within the <code>::first-letter</code> pseudo-element.
+
+<p>If the letters that would form the ::first-letter are not in the
+same element, such as "'T" in <code>&lt;p>'&lt;em>T...</code>, the UA
+may create a ::first-letter pseudo-element from one of the elements,
+both elements, or simply not create a pseudo-element.</p>
+
+<p>Similarly, if the first letter(s) of the block are not at the start
+of the line (for example due to bidirectional reordering), then the UA
+need not create the pseudo-element(s).
+
+<div class="example">
+<p>Example:</p>
+<p><a name="overlapping-example">The following example</a> illustrates
+how overlapping pseudo-elements may interact. The first letter of
+each P element will be green with a font size of '24pt'. The rest of
+the first formatted line will be 'blue' while the rest of the
+paragraph will be 'red'.</p>
+
+<pre>p { color: red; font-size: 12pt }
+p::first-letter { color: green; font-size: 200% }
+p::first-line { color: blue }
+
+&lt;P&gt;Some text that ends up on two lines&lt;/P&gt;</pre>
+
+<p>Assuming that a line break will occur before the word "ends", the
+<span class="index-inst" title="fictional tag sequence">fictional tag
+sequence</span> for this fragment might be:</p>
+
+<pre>&lt;P&gt;
+&lt;P::first-line&gt;
+&lt;P::first-letter&gt;
+S
+&lt;/P::first-letter&gt;ome text that
+&lt;/P::first-line&gt;
+ends up on two lines
+&lt;/P&gt;</pre>
+
+<p>Note that the <code>::first-letter</code> element is inside the <code>::first-line</code>
+element. Properties set on <code>::first-line</code> are inherited by
+<code>::first-letter</code>, but are overridden if the same property is set on
+<code>::first-letter</code>.</p>
+</div>
+
+
+<h4><a name=UIfragments>7.3.</a> <a name=selection>The ::selection pseudo-element</a></h4>
+
+<p>The <code>::selection</code> pseudo-element applies to the portion
+of a document that has been highlighted by the user. This also
+applies, for example, to selected text within an editable text
+field. This pseudo-element should not be confused with the <code><a
+href="#checked">:checked</a></code> pseudo-class (which used to be
+named <code>:selected</code>)
+
+<p>Although the <code>::selection</code> pseudo-element is dynamic in
+nature, and is altered by user action, it is reasonable to expect that
+when a UA re-renders to a static medium (such as a printed page, see
+<a href="#refsCSS21">[CSS21]</a>) which was originally rendered to a
+dynamic medium (like screen), the UA may wish to transfer the current
+<code>::selection</code> state to that other medium, and have all the
+appropriate formatting and rendering take effect as well. This is not
+required &mdash; UAs may omit the <code>::selection</code>
+pseudo-element for static media.
+
+<p>These are the CSS properties that apply to <code>::selection</code>
+pseudo-elements: color, background, cursor (optional), outline
+(optional). The computed value of the 'background-image' property on
+<code>::selection</code> may be ignored.
+
+
+<h4><a name=gen-content>7.4. The ::before and ::after pseudo-elements</a></h4>
+
+<p>The <code>::before</code> and <code>::after</code> pseudo-elements
+can be used to describe generated content before or after an element's
+content. They are explained in CSS 2.1 <a
+href="#refsCSS21">[CSS21]</a>.</p>
+
+<p>When the <code>::first-letter</code> and <code>::first-line</code>
+pseudo-elements are combined with <code>::before</code> and
+<code>::after</code>, they apply to the first letter or line of the
+element including the inserted text.</p>
+
+<h2><a name=combinators>8. Combinators</a></h2>
+
+<h3><a name=descendant-combinators>8.1. Descendant combinator</a></h3>
+
+<p>At times, authors may want selectors to describe an element that is
+the descendant of another element in the document tree (e.g., "an
+<code>EM</code> element that is contained within an <code>H1</code>
+element"). Descendant combinators express such a relationship. A
+descendant combinator is <a href="#whitespace">white space</a> that
+separates two sequences of simple selectors. A selector of the form
+"<code>A B</code>" represents an element <code>B</code> that is an
+arbitrary descendant of some ancestor element <code>A</code>.
+
+<div class="example">
+ <p>Examples:</p>
+ <p>For example, consider the following selector:</p>
+ <pre>h1 em</pre>
+ <p>It represents an <code>em</code> element being the descendant of
+ an <code>h1</code> element. It is a correct and valid, but partial,
+ description of the following fragment:</p>
+ <pre>&lt;h1&gt;This &lt;span class="myclass"&gt;headline
+is &lt;em&gt;very&lt;/em&gt; important&lt;/span&gt;&lt;/h1&gt;</pre>
+ <p>The following selector:</p>
+ <pre>div * p</pre>
+ <p>represents a <code>p</code> element that is a grandchild or later
+ descendant of a <code>div</code> element. Note the whitespace on
+ either side of the "*" is not part of the universal selector; the
+ whitespace is a combinator indicating that the DIV must be the
+ ancestor of some element, and that that element must be an ancestor
+ of the P.</p>
+ <p>The following selector, which combines descendant combinators and
+ <a href="#attribute-selectors">attribute selectors</a>, represents an
+ element that (1) has the <code>href</code> attribute set and (2) is
+ inside a <code>p</code> that is itself inside a <code>div</code>:</p>
+ <pre>div p *[href]</pre>
+</div>
+
+<h3><a name=child-combinators>8.2. Child combinators</a></h3>
+
+<p>A <dfn>child combinator</dfn> describes a childhood relationship
+between two elements. A child combinator is made of the
+&quot;greater-than sign&quot; (<code>&gt;</code>) character and
+separates two sequences of simple selectors.
+
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element that is
+ child of <code>body</code>:</p>
+ <pre>body &gt; p</pre>
+ <p>The following example combines descendant combinators and child
+ combinators.</p>
+ <pre>div ol&gt;li p</pre><!-- LEAVE THOSE SPACES OUT! see below -->
+ <p>It represents a <code>p</code> element that is a descendant of an
+ <code>li</code> element; the <code>li</code> element must be the
+ child of an <code>ol</code> element; the <code>ol</code> element must
+ be a descendant of a <code>div</code>. Notice that the optional white
+ space around the "&gt;" combinator has been left out.</p>
+</div>
+
+<p>For information on selecting the first child of an element, please
+see the section on the <code><a
+href="#structural-pseudos">:first-child</a></code> pseudo-class
+above.</p>
+
+<h3><a name=sibling-combinators>8.3. Sibling combinators</a></h3>
+
+<p>There are two different sibling combinators: the adjacent sibling
+combinator and the general sibling combinator. In both cases,
+non-element nodes (e.g. text between elements) are ignored when
+considering adjacency of elements.</p>
+
+<h4><a name=adjacent-sibling-combinators>8.3.1. Adjacent sibling combinator</a></h4>
+
+<p>The adjacent sibling combinator is made of the &quot;plus
+sign&quot; (U+002B, <code>+</code>) character that separates two
+sequences of simple selectors. The elements represented by the two
+sequences share the same parent in the document tree and the element
+represented by the first sequence immediately precedes the element
+represented by the second one.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element
+ immediately following a <code>math</code> element:</p>
+ <pre>math + p</pre>
+ <p>The following selector is conceptually similar to the one in the
+ previous example, except that it adds an attribute selector &mdash; it
+ adds a constraint to the <code>h1</code> element, that it must have
+ <code>class="opener"</code>:</p>
+ <pre>h1.opener + h2</pre>
+</div>
+
+
+<h4><a name=general-sibling-combinators>8.3.2. General sibling combinator</a></h4>
+
+<p>The general sibling combinator is made of the &quot;tilde&quot;
+(U+007E, <code>~</code>) character that separates two sequences of
+simple selectors. The elements represented by the two sequences share
+the same parent in the document tree and the element represented by
+the first sequence precedes (not necessarily immediately) the element
+represented by the second one.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <pre>h1 ~ pre</pre>
+ <p>represents a <code>pre</code> element following an <code>h1</code>. It
+ is a correct and valid, but partial, description of:</p>
+ <pre>&lt;h1&gt;Definition of the function a&lt;/h1&gt;
+&lt;p&gt;Function a(x) has to be applied to all figures in the table.&lt;/p&gt;
+&lt;pre&gt;function a(x) = 12x/13.5&lt;/pre&gt;</pre>
+</div>
+
+<h2><a name=specificity>9. Calculating a selector's specificity</a></h2>
+
+<p>A selector's specificity is calculated as follows:</p>
+
+<ul>
+ <li>count the number of ID selectors in the selector (= a)</li>
+ <li>count the number of class selectors, attributes selectors, and pseudo-classes in the selector (= b)</li>
+ <li>count the number of element names in the selector (= c)</li>
+ <li>ignore pseudo-elements</li>
+</ul>
+
+<p>Selectors inside <a href="#negation">the negation pseudo-class</a>
+are counted like any other, but the negation itself does not count as
+a pseudo-class.</p>
+
+<p>Concatenating the three numbers a-b-c (in a number system with a
+large base) gives the specificity.</p>
+
+<div class="example">
+<p>Examples:</p>
+<pre>* /* a=0 b=0 c=0 -&gt; specificity = 0 */
+LI /* a=0 b=0 c=1 -&gt; specificity = 1 */
+UL LI /* a=0 b=0 c=2 -&gt; specificity = 2 */
+UL OL+LI /* a=0 b=0 c=3 -&gt; specificity = 3 */
+H1 + *[REL=up] /* a=0 b=1 c=1 -&gt; specificity = 11 */
+UL OL LI.red /* a=0 b=1 c=3 -&gt; specificity = 13 */
+LI.red.level /* a=0 b=2 c=1 -&gt; specificity = 21 */
+#x34y /* a=1 b=0 c=0 -&gt; specificity = 100 */
+#s12:not(FOO) /* a=1 b=0 c=1 -&gt; specificity = 101 */
+</pre>
+</div>
+
+<p class="note"><strong>Note:</strong> the specificity of the styles
+specified in an HTML <code>style</code> attribute is described in CSS
+2.1. <a href="#refsCSS21">[CSS21]</a>.</p>
+
+<h2><a name=w3cselgrammar>10. The grammar of Selectors</a></h2>
+
+<h3><a name=grammar>10.1. Grammar</a></h3>
+
+<p>The grammar below defines the syntax of Selectors. It is globally
+LL(1) and can be locally LL(2) (but note that most UA's should not use
+it directly, since it doesn't express the parsing conventions). The
+format of the productions is optimized for human consumption and some
+shorthand notations beyond Yacc (see <a href="#refsYACC">[YACC]</a>)
+are used:</p>
+
+<ul>
+ <li><b>*</b>: 0 or more
+ <li><b>+</b>: 1 or more
+ <li><b>?</b>: 0 or 1
+ <li><b>|</b>: separates alternatives
+ <li><b>[ ]</b>: grouping </li>
+</ul>
+
+<p>The productions are:</p>
+
+<pre>selectors_group
+ : selector [ COMMA S* selector ]*
+ ;
+
+selector
+ : simple_selector_sequence [ combinator simple_selector_sequence ]*
+ ;
+
+combinator
+ /* combinators can be surrounded by white space */
+ : PLUS S* | GREATER S* | TILDE S* | S+
+ ;
+
+simple_selector_sequence
+ : [ type_selector | universal ]
+ [ HASH | class | attrib | pseudo | negation ]*
+ | [ HASH | class | attrib | pseudo | negation ]+
+ ;
+
+type_selector
+ : [ namespace_prefix ]? element_name
+ ;
+
+namespace_prefix
+ : [ IDENT | '*' ]? '|'
+ ;
+
+element_name
+ : IDENT
+ ;
+
+universal
+ : [ namespace_prefix ]? '*'
+ ;
+
+class
+ : '.' IDENT
+ ;
+
+attrib
+ : '[' S* [ namespace_prefix ]? IDENT S*
+ [ [ PREFIXMATCH |
+ SUFFIXMATCH |
+ SUBSTRINGMATCH |
+ '=' |
+ INCLUDES |
+ DASHMATCH ] S* [ IDENT | STRING ] S*
+ ]? ']'
+ ;
+
+pseudo
+ /* '::' starts a pseudo-element, ':' a pseudo-class */
+ /* Exceptions: :first-line, :first-letter, :before and :after. */
+ /* Note that pseudo-elements are restricted to one per selector and */
+ /* occur only in the last simple_selector_sequence. */
+ : ':' ':'? [ IDENT | functional_pseudo ]
+ ;
+
+functional_pseudo
+ : FUNCTION S* expression ')'
+ ;
+
+expression
+ /* In CSS3, the expressions are identifiers, strings, */
+ /* or of the form "an+b" */
+ : [ [ PLUS | '-' | DIMENSION | NUMBER | STRING | IDENT ] S* ]+
+ ;
+
+negation
+ : NOT S* negation_arg S* ')'
+ ;
+
+negation_arg
+ : type_selector | universal | HASH | class | attrib | pseudo
+ ;</pre>
+
+
+<h3><a name=lex>10.2. Lexical scanner</a></h3>
+
+<p>The following is the <a name=x3>tokenizer</a>, written in Flex (see
+<a href="#refsFLEX">[FLEX]</a>) notation. The tokenizer is
+case-insensitive.</p>
+
+<p>The two occurrences of "\377" represent the highest character
+number that current versions of Flex can deal with (decimal 255). They
+should be read as "\4177777" (decimal 1114111), which is the highest
+possible code point in Unicode/ISO-10646. <a
+href="#refsUNICODE">[UNICODE]</a></p>
+
+<pre>%option case-insensitive
+
+ident [-]?{nmstart}{nmchar}*
+name {nmchar}+
+nmstart [_a-z]|{nonascii}|{escape}
+nonascii [^\0-\177]
+unicode \\[0-9a-f]{1,6}(\r\n|[ \n\r\t\f])?
+escape {unicode}|\\[^\n\r\f0-9a-f]
+nmchar [_a-z0-9-]|{nonascii}|{escape}
+num [0-9]+|[0-9]*\.[0-9]+
+string {string1}|{string2}
+string1 \"([^\n\r\f\\"]|\\{nl}|{nonascii}|{escape})*\"
+string2 \'([^\n\r\f\\']|\\{nl}|{nonascii}|{escape})*\'
+invalid {invalid1}|{invalid2}
+invalid1 \"([^\n\r\f\\"]|\\{nl}|{nonascii}|{escape})*
+invalid2 \'([^\n\r\f\\']|\\{nl}|{nonascii}|{escape})*
+nl \n|\r\n|\r|\f
+w [ \t\r\n\f]*
+
+%%
+
+[ \t\r\n\f]+ return S;
+
+"~=" return INCLUDES;
+"|=" return DASHMATCH;
+"^=" return PREFIXMATCH;
+"$=" return SUFFIXMATCH;
+"*=" return SUBSTRINGMATCH;
+{ident} return IDENT;
+{string} return STRING;
+{ident}"(" return FUNCTION;
+{num} return NUMBER;
+"#"{name} return HASH;
+{w}"+" return PLUS;
+{w}"&gt;" return GREATER;
+{w}"," return COMMA;
+{w}"~" return TILDE;
+":not(" return NOT;
+@{ident} return ATKEYWORD;
+{invalid} return INVALID;
+{num}% return PERCENTAGE;
+{num}{ident} return DIMENSION;
+"&lt;!--" return CDO;
+"--&gt;" return CDC;
+
+"url("{w}{string}{w}")" return URI;
+"url("{w}([!#$%&*-~]|{nonascii}|{escape})*{w}")" return URI;
+U\+[0-9a-f?]{1,6}(-[0-9a-f]{1,6})? return UNICODE_RANGE;
+
+\/\*[^*]*\*+([^/*][^*]*\*+)*\/ /* ignore comments */
+
+. return *yytext;</pre>
+
+
+
+<h2><a name=downlevel>11. Namespaces and down-level clients</a></h2>
+
+<p>An important issue is the interaction of CSS selectors with XML
+documents in web clients that were produced prior to this
+document. Unfortunately, due to the fact that namespaces must be
+matched based on the URI which identifies the namespace, not the
+namespace prefix, some mechanism is required to identify namespaces in
+CSS by their URI as well. Without such a mechanism, it is impossible
+to construct a CSS style sheet which will properly match selectors in
+all cases against a random set of XML documents. However, given
+complete knowledge of the XML document to which a style sheet is to be
+applied, and a limited use of namespaces within the XML document, it
+is possible to construct a style sheet in which selectors would match
+elements and attributes correctly.</p>
+
+<p>It should be noted that a down-level CSS client will (if it
+properly conforms to CSS forward compatible parsing rules) ignore all
+<code>@namespace</code> at-rules, as well as all style rules that make
+use of namespace qualified element type or attribute selectors. The
+syntax of delimiting namespace prefixes in CSS was deliberately chosen
+so that down-level CSS clients would ignore the style rules rather
+than possibly match them incorrectly.</p>
+
+<p>The use of default namespaces in CSS makes it possible to write
+element type selectors that will function in both namespace aware CSS
+clients as well as down-level clients. It should be noted that
+down-level clients may incorrectly match selectors against XML
+elements in other namespaces.</p>
+
+<p>The following are scenarios and examples in which it is possible to
+construct style sheets which would function properly in web clients
+that do not implement this proposal.</p>
+
+<ol>
+ <li>
+
+ <p>The XML document does not use namespaces.</p>
+
+ <ul>
+
+ <li>In this case, it is obviously not necessary to declare or use
+ namespaces in the style sheet. Standard CSS element type and
+ attribute selectors will function adequately in a down-level
+ client.</li>
+
+ <li>In a CSS namespace aware client, the default behavior of
+ element selectors matching without regard to namespace will
+ function properly against all elements, since no namespaces are
+ present. However, the use of specific element type selectors that
+ match only elements that have no namespace ("<code>|name</code>")
+ will guarantee that selectors will match only XML elements that do
+ not have a declared namespace. </li>
+
+ </ul>
+
+ </li>
+
+ <li>
+
+ <p>The XML document defines a single, default namespace used
+ throughout the document. No namespace prefixes are used in element
+ names.</p>
+
+ <ul>
+
+ <li>In this case, a down-level client will function as if
+ namespaces were not used in the XML document at all. Standard CSS
+ element type and attribute selectors will match against all
+ elements. </li>
+
+ </ul>
+
+ </li>
+
+ <li>
+
+ <p>The XML document does <b>not</b> use a default namespace, all
+ namespace prefixes used are known to the style sheet author, and
+ there is a direct mapping between namespace prefixes and namespace
+ URIs. (A given prefix may only be mapped to one namespace URI
+ throughout the XML document; there may be multiple prefixes mapped
+ to the same URI).</p>
+
+ <ul>
+
+ <li>In this case, the down-level client will view and match
+ element type and attribute selectors based on their fully
+ qualified name, not the local part as outlined in the <a
+ href="#typenmsp">Type selectors and Namespaces</a> section. CSS
+ selectors may be declared using an escaped colon "<code>\:</code>"
+ to describe the fully qualified names, e.g.
+ "<code>html\:h1</code>" will match
+ <code>&lt;html:h1&gt;</code>. Selectors using the qualified name
+ will only match XML elements that use the same prefix. Other
+ namespace prefixes used in the XML that are mapped to the same URI
+ will not match as expected unless additional CSS style rules are
+ declared for them.</li>
+
+ <li>Note that selectors declared in this fashion will
+ <em>only</em> match in down-level clients. A CSS namespace aware
+ client will match element type and attribute selectors based on
+ the name's local part. Selectors declared with the fully
+ qualified name will not match (unless there is no namespace prefix
+ in the fully qualified name).</li>
+
+ </ul>
+
+ </li>
+
+ </ol>
+
+<p>In other scenarios: when the namespace prefixes used in the XML are
+not known in advance by the style sheet author; or a combination of
+elements with no namespace are used in conjunction with elements using
+a default namespace; or the same namespace prefix is mapped to
+<em>different</em> namespace URIs within the same document, or in
+different documents; it is impossible to construct a CSS style sheet
+that will function properly against all elements in those documents,
+unless, the style sheet is written using a namespace URI syntax (as
+outlined in this document or similar) and the document is processed by
+a CSS and XML namespace aware client.</p>
+
+<h2><a name=profiling>12. Profiles</a></h2>
+
+<p>Each specification using Selectors must define the subset of W3C
+Selectors it allows and excludes, and describe the local meaning of
+all the components of that subset.</p>
+
+<p>Non normative examples:
+
+<div class="profile">
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>CSS level 1</td></tr>
+ <tr>
+ <th>Accepts</th>
+ <td>type selectors<br>class selectors<br>ID selectors<br>:link,
+ :visited and :active pseudo-classes<br>descendant combinator
+ <br>::first-line and ::first-letter pseudo-elements</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>
+
+<p>universal selector<br>attribute selectors<br>:hover and :focus
+ pseudo-classes<br>:target pseudo-class<br>:lang() pseudo-class<br>all UI
+ element states pseudo-classes<br>all structural
+ pseudo-classes<br>negation pseudo-class<br>all
+ UI element fragments pseudo-elements<br>::before and ::after
+ pseudo-elements<br>child combinators<br>sibling combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>only one class selector allowed per sequence of simple
+ selectors</td></tr></tbody></table><br><br>
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>CSS level 2</td></tr>
+ <tr>
+ <th>Accepts</th>
+ <td>type selectors<br>universal selector<br>attribute presence and
+ values selectors<br>class selectors<br>ID selectors<br>:link, :visited,
+ :active, :hover, :focus, :lang() and :first-child pseudo-classes
+ <br>descendant combinator<br>child combinator<br>adjacent sibling
+ combinator<br>::first-line and ::first-letter pseudo-elements<br>::before
+ and ::after pseudo-elements</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>
+
+<p>content selectors<br>substring matching attribute
+ selectors<br>:target pseudo-classes<br>all UI element
+ states pseudo-classes<br>all structural pseudo-classes other
+ than :first-child<br>negation pseudo-class<br>all UI element
+ fragments pseudo-elements<br>general sibling combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>more than one class selector per sequence of simple selectors (CSS1
+ constraint) allowed</td></tr></tbody></table>
+
+<p>In CSS, selectors express pattern matching rules that determine which style
+rules apply to elements in the document tree.
+
+<p>The following selector (CSS level 2) will <b>match</b> all anchors <code>a</code>
+with attribute <code>name</code> set inside a section 1 header <code>h1</code>:
+<pre>h1 a[name]</pre>
+
+<p>All CSS declarations attached to such a selector are applied to elements
+matching it. </div>
+
+<div class="profile">
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>STTS 3</td>
+ </tr>
+ <tr>
+ <th>Accepts</th>
+ <td>
+
+<p>type selectors<br>universal selectors<br>attribute selectors<br>class
+ selectors<br>ID selectors<br>all structural pseudo-classes<br>
+ all combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>non-accepted pseudo-classes<br>pseudo-elements<br></td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>some selectors and combinators are not allowed in fragment
+ descriptions on the right side of STTS declarations.</td></tr></tbody></table>
+<form>
+<input type="text" name="test10"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+</form>
+
+<p>Selectors can be used in STTS 3 in two different
+ manners:
+<ol>
+ <li>a selection mechanism equivalent to CSS selection mechanism: declarations
+ attached to a given selector are applied to elements matching that selector,
+ <li>fragment descriptions that appear on the right side of declarations.
+</li></ol></div>
+
+<h2><a name=Conformance></a>13. Conformance and requirements</h2>
+
+<p>This section defines conformance with the present specification only.
+
+<p>The inability of a user agent to implement part of this specification due to
+the limitations of a particular device (e.g., non interactive user agents will
+probably not implement dynamic pseudo-classes because they make no sense without
+interactivity) does not imply non-conformance.
+
+<p>All specifications reusing Selectors must contain a <a
+href="#profiling">Profile</a> listing the
+subset of Selectors it accepts or excludes, and describing the constraints
+it adds to the current specification.
+
+<p>Invalidity is caused by a parsing error, e.g. an unrecognized token or a token
+which is not allowed at the current parsing point.
+
+<p>User agents must observe the rules for handling parsing errors:
+<ul>
+ <li>a simple selector containing an undeclared namespace prefix is invalid</li>
+ <li>a selector containing an invalid simple selector, an invalid combinator
+ or an invalid token is invalid. </li>
+ <li>a group of selectors containing an invalid selector is invalid.</li>
+</ul>
+
+<p class="foo test10 bar">Specifications reusing Selectors must define how to handle parsing
+errors. (In the case of CSS, the entire rule in which the selector is
+used is dropped.)</p>
+
+<!-- Apparently all these references are out of date:
+<p>Implementations of this specification must behave as
+"recipients of text data" as defined by <a href="#refsCWWW">[CWWW]</a>
+when parsing selectors and attempting matches. (In particular,
+implementations must assume the data is normalized and must not
+normalize it.) Normative rules for matching strings are defined in
+<a href="#refsCWWW">[CWWW]</a> and <a
+href="#refsUNICODE">[UNICODE]</a> and apply to implementations of this
+specification.</p>-->
+
+<h2><a name=Tests></a>14. Tests</h2>
+
+<p>This specification has <a
+href="http://www.w3.org/Style/CSS/Test/CSS3/Selectors/current/">a test
+suite</a> allowing user agents to verify their basic conformance to
+the specification. This test suite does not pretend to be exhaustive
+and does not cover all possible combined cases of Selectors.</p>
+
+<h2><a name=ACKS></a>15. Acknowledgements</h2>
+
+<p>The CSS working group would like to thank everyone who has sent
+comments on this specification over the years.</p>
+
+<p>The working group would like to extend special thanks to Donna
+McManus, Justin Baker, Joel Sklar, and Molly Ives Brower who perfermed
+the final editorial review.</p>
+
+<h2><a name=references>16. References</a></h2>
+
+<dl class="refs">
+
+ <dt>[CSS1]
+ <dd><a name=refsCSS1></a> Bert Bos, H&aring;kon Wium Lie; "<cite>Cascading Style Sheets, level 1</cite>", W3C Recommendation, 17 Dec 1996, revised 11 Jan 1999
+ <dd>(<code><a href="http://www.w3.org/TR/REC-CSS1">http://www.w3.org/TR/REC-CSS1</a></code>)
+
+ <dt>[CSS21]
+ <dd><a name=refsCSS21></a> Bert Bos, Tantek &Ccedil;elik, Ian Hickson, H&aring;kon Wium Lie, editors; "<cite>Cascading Style Sheets, level 2 revision 1</cite>", W3C Working Draft, 13 June 2005
+ <dd>(<code><a href="http://www.w3.org/TR/CSS21">http://www.w3.org/TR/CSS21</a></code>)
+
+ <dt>[CWWW]
+ <dd><a name=refsCWWW></a> Martin J. D&uuml;rst, Fran&ccedil;ois Yergeau, Misha Wolf, Asmus Freytag, Tex Texin, editors; "<cite>Character Model for the World Wide Web</cite>", W3C Recommendation, 15 February 2005
+ <dd>(<code><a href="http://www.w3.org/TR/charmod/">http://www.w3.org/TR/charmod/</a></code>)
+
+ <dt>[FLEX]
+ <dd><a name="refsFLEX"></a> "<cite>Flex: The Lexical Scanner Generator</cite>", Version 2.3.7, ISBN 1882114213
+
+ <dt>[HTML4]
+ <dd><a name="refsHTML4"></a> Dave Ragget, Arnaud Le Hors, Ian Jacobs, editors; "<cite>HTML 4.01 Specification</cite>", W3C Recommendation, 24 December 1999
+ <dd>(<a href="http://www.w3.org/TR/html4/"><code>http://www.w3.org/TR/html4/</code></a>)
+
+ <dt>[MATH]
+ <dd><a name="refsMATH"></a> Patrick Ion, Robert Miner, editors; "<cite>Mathematical Markup Language (MathML) 1.01</cite>", W3C Recommendation, revision of 7 July 1999
+ <dd>(<code><a href="http://www.w3.org/TR/REC-MathML/">http://www.w3.org/TR/REC-MathML/</a></code>)
+
+ <dt>[RFC3066]
+ <dd><a name="refsRFC3066"></a> H. Alvestrand; "<cite>Tags for the Identification of Languages</cite>", Request for Comments 3066, January 2001
+ <dd>(<a href="http://www.ietf.org/rfc/rfc3066.txt"><code>http://www.ietf.org/rfc/rfc3066.txt</code></a>)
+
+ <dt>[STTS]
+ <dd><a name=refsSTTS></a> Daniel Glazman; "<cite>Simple Tree Transformation Sheets 3</cite>", Electricit&eacute; de France, submission to the W3C, 11 November 1998
+ <dd>(<code><a href="http://www.w3.org/TR/NOTE-STTS3">http://www.w3.org/TR/NOTE-STTS3</a></code>)
+
+ <dt>[SVG]
+ <dd><a name="refsSVG"></a> Jon Ferraiolo, &#34276;&#27810; &#28147;, Dean Jackson, editors; "<cite>Scalable Vector Graphics (SVG) 1.1 Specification</cite>", W3C Recommendation, 14 January 2003
+ <dd>(<code><a href="http://www.w3.org/TR/SVG/">http://www.w3.org/TR/SVG/</a></code>)
+
+ <dt>[UNICODE]</dt>
+ <dd><a name="refsUNICODE"></a> <cite><a
+ href="http://www.unicode.org/versions/Unicode4.1.0/">The Unicode Standard, Version 4.1</a></cite>, The Unicode Consortium. Boston, MA, Addison-Wesley, March 2005. ISBN 0-321-18578-1, as amended by <a href="http://www.unicode.org/versions/Unicode4.0.1/">Unicode 4.0.1</a> and <a href="http://www.unicode.org/versions/Unicode4.1.0/">Unicode 4.1.0</a>.
+ <dd>(<code><a href="http://www.unicode.org/versions/">http://www.unicode.org/versions/</a></code>)</dd>
+
+ <dt>[XML10]
+ <dd><a name="refsXML10"></a> Tim Bray, Jean Paoli, C. M. Sperberg-McQueen, Eve Maler, Fran&ccedil;ois Yergeau, editors; "<cite>Extensible Markup Language (XML) 1.0 (Third Edition)</cite>", W3C Recommendation, 4 February 2004
+ <dd>(<a href="http://www.w3.org/TR/REC-xml/"><code>http://www.w3.org/TR/REC-xml/</code></a>)
+
+ <dt>[XMLNAMES]
+ <dd><a name="refsXMLNAMES"></a> Tim Bray, Dave Hollander, Andrew Layman, editors; "<cite>Namespaces in XML</cite>", W3C Recommendation, 14 January 1999
+ <dd>(<a href="http://www.w3.org/TR/REC-xml-names/"><code>http://www.w3.org/TR/REC-xml-names/</code></a>)
+
+ <dt>[YACC]
+ <dd><a name="refsYACC"></a> S. C. Johnson; "<cite>YACC &mdash; Yet another compiler compiler</cite>", Technical Report, Murray Hill, 1975
+
+</dl>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/cssquery-prototype.html b/testing/talos/talos/tests/dromaeo/tests/cssquery-prototype.html
new file mode 100644
index 0000000000..edcbe0e666
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/cssquery-prototype.html
@@ -0,0 +1,3062 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script src="../lib/prototype.js"></script>
+<script>
+window.onload = function(){
+startTest("cssquery-prototype", '5f350493');
+
+// Try to force real results
+var ret, tmp;
+
+var html = document.body.innerHTML;
+
+ prep(function(){
+ var div = document.createElement("div");
+ div.innerHTML = html;
+ document.body.appendChild( div );
+ });
+
+ test("Prototype - *", function(){
+ $$("*");
+ });
+
+ test("Prototype - div:only-child", function(){
+ $$("div:only-child");
+ });
+
+ test("Prototype - div:first-child", function(){
+ $$("div:first-child");
+ });
+
+ test("Prototype - div:nth-child(even)", function(){
+ $$("div:nth-child(even)");
+ });
+
+ test("Prototype - div:nth-child(2n)", function(){
+ $$("div:nth-child(2n)");
+ });
+
+ test("Prototype - div:nth-child(odd)", function(){
+ $$("div:nth-child(odd)");
+ });
+
+ test("Prototype - div:nth-child(2n+1)", function(){
+ $$("div:nth-child(2n+1)");
+ });
+
+ test("Prototype - div:nth-child(n)", function(){
+ $$("div:nth-child(n)");
+ });
+
+ test("Prototype - div:last-child", function(){
+ $$("div:last-child");
+ });
+
+ test("Prototype - div > div", function(){
+ $$("div > div");
+ });
+
+ test("Prototype - div + div", function(){
+ $$("div + div");
+ });
+
+ test("Prototype - div ~ div", function(){
+ $$("div ~ div");
+ });
+
+ test("Prototype - body", function(){
+ $$("body");
+ });
+
+ test("Prototype - body div", function(){
+ $$("body div");
+ });
+
+ test("Prototype - div", function(){
+ $$("div");
+ });
+
+ test("Prototype - div div", function(){
+ $$("div div");
+ });
+
+ test("Prototype - div div div", function(){
+ $$("div div div");
+ });
+
+ test("Prototype - div, div, div", function(){
+ $$("div, div, div");
+ });
+
+ test("Prototype - div, a, span", function(){
+ $$("div, a, span");
+ });
+
+ test("Prototype - .dialog", function(){
+ $$(".dialog");
+ });
+
+ test("Prototype - div.dialog", function(){
+ $$("div.dialog");
+ });
+
+ test("Prototype - div .dialog", function(){
+ $$("div .dialog");
+ });
+
+ test("Prototype - div.character, div.dialog", function(){
+ $$("div.character, div.dialog");
+ });
+
+ test("Prototype - #speech5", function(){
+ $$("#speech5");
+ });
+
+ test("Prototype - div#speech5", function(){
+ $$("div#speech5");
+ });
+
+ test("Prototype - div #speech5", function(){
+ $$("div #speech5");
+ });
+
+ test("Prototype - div.scene div.dialog", function(){
+ $$("div.scene div.dialog");
+ });
+
+ test("Prototype - div#scene1 div.dialog div", function(){
+ $$("div#scene1 div.dialog div");
+ });
+
+ test("Prototype - #scene1 #speech1", function(){
+ $$("#scene1 #speech1");
+ });
+
+ test("Prototype - div[class]", function(){
+ $$("div[class]");
+ });
+
+ test("Prototype - div[class=dialog]", function(){
+ $$("div[class=dialog]");
+ });
+
+ test("Prototype - div[class^=dia]", function(){
+ $$("div[class^=dia]");
+ });
+
+ test("Prototype - div[class$=log]", function(){
+ $$("div[class$=log]");
+ });
+
+ test("Prototype - div[class*=sce]", function(){
+ $$("div[class*=sce]");
+ });
+
+ test("Prototype - div[class|=dialog]", function(){
+ $$("div[class|=dialog]");
+ });
+
+ test("Prototype - div[class~=dialog]", function(){
+ $$("div[class~=dialog]");
+ });
+
+endTest();
+};
+</script>
+</head>
+<body>
+ <div class="head">
+ <p><a href="http://www.w3.org/"><img height=48 alt=W3C src="w3c_home.png" width=72></a>
+
+ <h1 id="title">Selectors</h1>
+
+ <h2>W3C Working Draft 15 December 2005</h2>
+
+ <dl>
+
+ <dt>This version:
+
+ <dd><a href="http://www.w3.org/TR/2005/WD-css3-selectors-20051215">
+ http://www.w3.org/TR/2005/WD-css3-selectors-20051215</a>
+
+ <dt>Latest version:
+
+ <dd><a href="http://www.w3.org/TR/css3-selectors">
+ http://www.w3.org/TR/css3-selectors</a>
+
+ <dt>Previous version:
+
+ <dd><a href="http://www.w3.org/TR/2001/CR-css3-selectors-20011113">
+ http://www.w3.org/TR/2001/CR-css3-selectors-20011113</a>
+
+ <dt><a name=editors-list></a>Editors:
+
+ <dd class="vcard"><span class="fn">Daniel Glazman</span> (Invited Expert)</dd>
+
+ <dd class="vcard"><a lang="tr" class="url fn" href="http://www.tantek.com/">Tantek &Ccedil;elik</a> (Invited Expert)
+
+ <dd class="vcard"><a href="mailto:ian@hixie.ch" class="url fn">Ian Hickson</a> (<span
+ class="company"><a href="http://www.google.com/">Google</a></span>)
+
+ <dd class="vcard"><span class="fn">Peter Linss</span> (former editor, <span class="company"><a
+ href="http://www.netscape.com/">Netscape/AOL</a></span>)
+
+ <dd class="vcard"><span class="fn">John Williams</span> (former editor, <span class="company"><a
+ href="http://www.quark.com/">Quark, Inc.</a></span>)
+
+ </dl>
+
+ <p class="copyright"><a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright">
+ Copyright</a> &copy; 2005 <a href="http://www.w3.org/"><abbr
+ title="World Wide Web Consortium">W3C</abbr></a><sup>&reg;</sup>
+ (<a href="http://www.csail.mit.edu/"><abbr title="Massachusetts
+ Institute of Technology">MIT</abbr></a>, <a
+ href="http://www.ercim.org/"><acronym title="European Research
+ Consortium for Informatics and Mathematics">ERCIM</acronym></a>, <a
+ href="http://www.keio.ac.jp/">Keio</a>), All Rights Reserved. W3C
+ <a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">liability</a>,
+ <a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">trademark</a>,
+ <a
+ href="http://www.w3.org/Consortium/Legal/copyright-documents">document
+ use</a> rules apply.
+
+ <hr title="Separator for header">
+
+ </div>
+
+ <h2><a name=abstract></a>Abstract</h2>
+
+ <p><em>Selectors</em> are patterns that match against elements in a
+ tree. Selectors have been optimized for use with HTML and XML, and
+ are designed to be usable in performance-critical code.</p>
+
+ <p><acronym title="Cascading Style Sheets">CSS</acronym> (Cascading
+ Style Sheets) is a language for describing the rendering of <acronym
+ title="Hypertext Markup Language">HTML</acronym> and <acronym
+ title="Extensible Markup Language">XML</acronym> documents on
+ screen, on paper, in speech, etc. CSS uses Selectors for binding
+ style properties to elements in the document. This document
+ describes extensions to the selectors defined in CSS level 2. These
+ extended selectors will be used by CSS level 3.
+
+ <p>Selectors define the following function:</p>
+
+ <pre>expression &#x2217; element &rarr; boolean</pre>
+
+ <p>That is, given an element and a selector, this specification
+ defines whether that element matches the selector.</p>
+
+ <p>These expressions can also be used, for instance, to select a set
+ of elements, or a single element from a set of elements, by
+ evaluating the expression across all the elements in a
+ subtree. <acronym title="Simple Tree Transformation
+ Sheets">STTS</acronym> (Simple Tree Transformation Sheets), a
+ language for transforming XML trees, uses this mechanism. <a href="#refsSTTS">[STTS]</a></p>
+
+ <h2><a name=status></a>Status of this document</h2>
+
+ <p><em>This section describes the status of this document at the
+ time of its publication. Other documents may supersede this
+ document. A list of current W3C publications and the latest revision
+ of this technical report can be found in the <a
+ href="http://www.w3.org/TR/">W3C technical reports index at
+ http://www.w3.org/TR/.</a></em></p>
+
+ <p>This document describes the selectors that already exist in <a
+ href="#refsCSS1"><abbr title="CSS level 1">CSS1</abbr></a> and <a
+ href="#refsCSS21"><abbr title="CSS level 2">CSS2</abbr></a>, and
+ also proposes new selectors for <abbr title="CSS level
+ 3">CSS3</abbr> and other languages that may need them.</p>
+
+ <p>The CSS Working Group doesn't expect that all implementations of
+ CSS3 will have to implement all selectors. Instead, there will
+ probably be a small number of variants of CSS3, called profiles. For
+ example, it may be that only a profile for interactive user agents
+ will include all of the selectors.</p>
+
+ <p>This specification is a last call working draft for the the <a
+ href="http://www.w3.org/Style/CSS/members">CSS Working Group</a>
+ (<a href="/Style/">Style Activity</a>). This
+ document is a revision of the <a
+ href="http://www.w3.org/TR/2001/CR-css3-selectors-20011113/">Candidate
+ Recommendation dated 2001 November 13</a>, and has incorporated
+ implementation feedback received in the past few years. It is
+ expected that this last call will proceed straight to Proposed
+ Recommendation stage since it is believed that interoperability will
+ be demonstrable.</p>
+
+ <p>All persons are encouraged to review and implement this
+ specification and return comments to the (<a
+ href="http://lists.w3.org/Archives/Public/www-style/">archived</a>)
+ public mailing list <a
+ href="http://www.w3.org/Mail/Lists.html#www-style">www-style</a>
+ (see <a href="http://www.w3.org/Mail/Request">instructions</a>). W3C
+ Members can also send comments directly to the CSS Working
+ Group.
+ The deadline for comments is 14 January 2006.</p>
+
+ <p>This is still a draft document and may be updated, replaced, or
+ obsoleted by other documents at any time. It is inappropriate to
+ cite a W3C Working Draft as other than &quot;work in progress&quot;.
+
+ <p>This document may be available in <a
+ href="http://www.w3.org/Style/css3-selectors-updates/translations">translation</a>.
+ The English version of this specification is the only normative
+ version.
+
+ <div class="subtoc">
+
+ <h2 id="test10"><a name=contents>Table of contents</a></h2>
+
+ <ul class="toc">
+ <li class="tocline2"><a href="#context">1. Introduction</a>
+ <ul>
+ <li><a href="#dependencies">1.1. Dependencies</a> </li>
+ <li><a href="#terminology">1.2. Terminology</a> </li>
+ <li><a href="#changesFromCSS2">1.3. Changes from CSS2</a> </li>
+ </ul>
+ <li class="tocline2"><a href="#selectors">2. Selectors</a>
+ <li class="tocline2"><a href="#casesens">3. Case sensitivity</a>
+ <li class="tocline2"><a href="#selector-syntax">4. Selector syntax</a>
+ <li class="tocline2"><a href="#grouping">5. Groups of selectors</a>
+ <li class="tocline2"><a href="#simple-selectors">6. Simple selectors</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#type-selectors">6.1. Type selectors</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#typenmsp">6.1.1. Type selectors and namespaces</a></li>
+ </ul>
+ <li class="tocline3"><a href="#universal-selector">6.2. Universal selector</a>
+ <ul>
+ <li><a href="#univnmsp">6.2.1. Universal selector and namespaces</a></li>
+ </ul>
+ <li class="tocline3"><a href="#attribute-selectors">6.3. Attribute selectors</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#attribute-representation">6.3.1. Representation of attributes and attributes values</a>
+ <li><a href="#attribute-substrings">6.3.2. Substring matching attribute selectors</a>
+ <li class="tocline4"><a href="#attrnmsp">6.3.3. Attribute selectors and namespaces</a>
+ <li class="tocline4"><a href="#def-values">6.3.4. Default attribute values in DTDs</a></li>
+ </ul>
+ <li class="tocline3"><a href="#class-html">6.4. Class selectors</a>
+ <li class="tocline3"><a href="#id-selectors">6.5. ID selectors</a>
+ <li class="tocline3"><a href="#pseudo-classes">6.6. Pseudo-classes</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#dynamic-pseudos">6.6.1. Dynamic pseudo-classes</a>
+ <li class="tocline4"><a href="#target-pseudo">6.6.2. The :target pseudo-class</a>
+ <li class="tocline4"><a href="#lang-pseudo">6.6.3. The :lang() pseudo-class</a>
+ <li class="tocline4"><a href="#UIstates">6.6.4. UI element states pseudo-classes</a>
+ <li class="tocline4"><a href="#structural-pseudos">6.6.5. Structural pseudo-classes</a>
+ <ul>
+ <li><a href="#root-pseudo">:root pseudo-class</a>
+ <li><a href="#nth-child-pseudo">:nth-child() pseudo-class</a>
+ <li><a href="#nth-last-child-pseudo">:nth-last-child()</a>
+ <li><a href="#nth-of-type-pseudo">:nth-of-type() pseudo-class</a>
+ <li><a href="#nth-last-of-type-pseudo">:nth-last-of-type()</a>
+ <li><a href="#first-child-pseudo">:first-child pseudo-class</a>
+ <li><a href="#last-child-pseudo">:last-child pseudo-class</a>
+ <li><a href="#first-of-type-pseudo">:first-of-type pseudo-class</a>
+ <li><a href="#last-of-type-pseudo">:last-of-type pseudo-class</a>
+ <li><a href="#only-child-pseudo">:only-child pseudo-class</a>
+ <li><a href="#only-of-type-pseudo">:only-of-type pseudo-class</a>
+ <li><a href="#empty-pseudo">:empty pseudo-class</a></li>
+ </ul>
+ <li class="tocline4"><a href="#negation">6.6.7. The negation pseudo-class</a></li>
+ </ul>
+ </li>
+ </ul>
+ <li><a href="#pseudo-elements">7. Pseudo-elements</a>
+ <ul>
+ <li><a href="#first-line">7.1. The ::first-line pseudo-element</a>
+ <li><a href="#first-letter">7.2. The ::first-letter pseudo-element</a>
+ <li><a href="#UIfragments">7.3. The ::selection pseudo-element</a>
+ <li><a href="#gen-content">7.4. The ::before and ::after pseudo-elements</a></li>
+ </ul>
+ <li class="tocline2"><a href="#combinators">8. Combinators</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#descendant-combinators">8.1. Descendant combinators</a>
+ <li class="tocline3"><a href="#child-combinators">8.2. Child combinators</a>
+ <li class="tocline3"><a href="#sibling-combinators">8.3. Sibling combinators</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#adjacent-sibling-combinators">8.3.1. Adjacent sibling combinator</a>
+ <li class="tocline4"><a href="#general-sibling-combinators">8.3.2. General sibling combinator</a></li>
+ </ul>
+ </li>
+ </ul>
+ <li class="tocline2"><a href="#specificity">9. Calculating a selector's specificity</a>
+ <li class="tocline2"><a href="#w3cselgrammar">10. The grammar of Selectors</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#grammar">10.1. Grammar</a>
+ <li class="tocline3"><a href="#lex">10.2. Lexical scanner</a></li>
+ </ul>
+ <li class="tocline2"><a href="#downlevel">11. Namespaces and down-level clients</a>
+ <li class="tocline2"><a href="#profiling">12. Profiles</a>
+ <li><a href="#Conformance">13. Conformance and requirements</a>
+ <li><a href="#Tests">14. Tests</a>
+ <li><a href="#ACKS">15. Acknowledgements</a>
+ <li class="tocline2"><a href="#references">16. References</a>
+ </ul>
+
+ </div>
+
+ <h2><a name=context>1. Introduction</a></h2>
+
+ <h3><a name=dependencies></a>1.1. Dependencies</h3>
+
+ <p>Some features of this specification are specific to CSS, or have
+ particular limitations or rules specific to CSS. In this
+ specification, these have been described in terms of CSS2.1. <a
+ href="#refsCSS21">[CSS21]</a></p>
+
+ <h3><a name=terminology></a>1.2. Terminology</h3>
+
+ <p>All of the text of this specification is normative except
+ examples, notes, and sections explicitly marked as
+ non-normative.</p>
+
+ <h3><a name=changesFromCSS2></a>1.3. Changes from CSS2</h3>
+
+ <p><em>This section is non-normative.</em></p>
+
+ <p>The main differences between the selectors in CSS2 and those in
+ Selectors are:
+
+ <ul>
+
+ <li>the list of basic definitions (selector, group of selectors,
+ simple selector, etc.) has been changed; in particular, what was
+ referred to in CSS2 as a simple selector is now called a sequence
+ of simple selectors, and the term "simple selector" is now used for
+ the components of this sequence</li>
+
+ <li>an optional namespace component is now allowed in type element
+ selectors, the universal selector and attribute selectors</li>
+
+ <li>a <a href="#general-sibling-combinators">new combinator</a> has been introduced</li>
+
+ <li>new simple selectors including substring matching attribute
+ selectors, and new pseudo-classes</li>
+
+ <li>new pseudo-elements, and introduction of the "::" convention
+ for pseudo-elements</li>
+
+ <li>the grammar has been rewritten</li>
+
+ <li>profiles to be added to specifications integrating Selectors
+ and defining the set of selectors which is actually supported by
+ each specification</li>
+
+ <li>Selectors are now a CSS3 Module and an independent
+ specification; other specifications can now refer to this document
+ independently of CSS</li>
+
+ <li>the specification now has its own test suite</li>
+
+ </ul>
+
+<h2><a name=selectors></a>2. Selectors</h2>
+
+<p><em>This section is non-normative, as it merely summarizes the
+following sections.</em></p>
+
+<p>A Selector represents a structure. This structure can be used as a
+condition (e.g. in a CSS rule) that determines which elements a
+selector matches in the document tree, or as a flat description of the
+HTML or XML fragment corresponding to that structure.</p>
+
+<p>Selectors may range from simple element names to rich contextual
+representations.</p>
+
+<p>The following table summarizes the Selector syntax:</p>
+
+<table class="selectorsReview">
+ <thead>
+ <tr>
+ <th class="pattern">Pattern</th>
+ <th class="meaning">Meaning</th>
+ <th class="described">Described in section</th>
+ <th class="origin">First defined in CSS level</th></tr>
+ <tbody>
+ <tr>
+ <td class="pattern">*</td>
+ <td class="meaning">any element</td>
+ <td class="described"><a
+ href="#universal-selector">Universal
+ selector</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E</td>
+ <td class="meaning">an element of type E</td>
+ <td class="described"><a
+ href="#type-selectors">Type selector</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E[foo]</td>
+ <td class="meaning">an E element with a "foo" attribute</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value is exactly
+ equal to "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo~="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value is a list of
+ space-separated values, one of which is exactly equal to "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo^="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value begins exactly
+ with the string "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[foo$="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value ends exactly
+ with the string "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[foo*="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value contains the
+ substring "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[hreflang|="en"]</td>
+ <td class="meaning">an E element whose "hreflang" attribute has a hyphen-separated
+ list of values beginning (from the left) with "en"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:root</td>
+ <td class="meaning">an E element, root of the document</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-child(n)</td>
+ <td class="meaning">an E element, the n-th child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-last-child(n)</td>
+ <td class="meaning">an E element, the n-th child of its parent, counting
+ from the last one</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-of-type(n)</td>
+ <td class="meaning">an E element, the n-th sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-last-of-type(n)</td>
+ <td class="meaning">an E element, the n-th sibling of its type, counting
+ from the last one</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:first-child</td>
+ <td class="meaning">an E element, first child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:last-child</td>
+ <td class="meaning">an E element, last child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:first-of-type</td>
+ <td class="meaning">an E element, first sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:last-of-type</td>
+ <td class="meaning">an E element, last sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:only-child</td>
+ <td class="meaning">an E element, only child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:only-of-type</td>
+ <td class="meaning">an E element, only sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:empty</td>
+ <td class="meaning">an E element that has no children (including text
+ nodes)</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:link<br>E:visited</td>
+ <td class="meaning">an E element being the source anchor of a hyperlink of
+ which the target is not yet visited (:link) or already visited
+ (:visited)</td>
+ <td class="described"><a
+ href="#link">The link
+ pseudo-classes</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E:active<br>E:hover<br>E:focus</td>
+ <td class="meaning">an E element during certain user actions</td>
+ <td class="described"><a
+ href="#useraction-pseudos">The user
+ action pseudo-classes</a></td>
+ <td class="origin">1 and 2</td></tr>
+ <tr>
+ <td class="pattern">E:target</td>
+ <td class="meaning">an E element being the target of the referring URI</td>
+ <td class="described"><a
+ href="#target-pseudo">The target
+ pseudo-class</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:lang(fr)</td>
+ <td class="meaning">an element of type E in language "fr" (the document
+ language specifies how language is determined)</td>
+ <td class="described"><a
+ href="#lang-pseudo">The :lang()
+ pseudo-class</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:enabled<br>E:disabled</td>
+ <td class="meaning">a user interface element E which is enabled or
+ disabled</td>
+ <td class="described"><a
+ href="#UIstates">The UI element states
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:checked<!--<br>E:indeterminate--></td>
+ <td class="meaning">a user interface element E which is checked<!-- or in an
+ indeterminate state--> (for instance a radio-button or checkbox)</td>
+ <td class="described"><a
+ href="#UIstates">The UI element states
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E::first-line</td>
+ <td class="meaning">the first formatted line of an E element</td>
+ <td class="described"><a
+ href="#first-line">The ::first-line
+ pseudo-element</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E::first-letter</td>
+ <td class="meaning">the first formatted letter of an E element</td>
+ <td class="described"><a
+ href="#first-letter">The ::first-letter
+ pseudo-element</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E::selection</td>
+ <td class="meaning">the portion of an E element that is currently
+ selected/highlighted by the user</td>
+ <td class="described"><a
+ href="#UIfragments">The UI element
+ fragments pseudo-elements</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E::before</td>
+ <td class="meaning">generated content before an E element</td>
+ <td class="described"><a
+ href="#gen-content">The ::before
+ pseudo-element</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E::after</td>
+ <td class="meaning">generated content after an E element</td>
+ <td class="described"><a
+ href="#gen-content">The ::after
+ pseudo-element</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E.warning</td>
+ <td class="meaning">an E element whose class is
+"warning" (the document language specifies how class is determined).</td>
+ <td class="described"><a
+ href="#class-html">Class
+ selectors</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E#myid</td>
+ <td class="meaning">an E element with ID equal to "myid".</td>
+ <td class="described"><a
+ href="#id-selectors">ID
+ selectors</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E:not(s)</td>
+ <td class="meaning">an E element that does not match simple selector s</td>
+ <td class="described"><a
+ href="#negation">Negation
+ pseudo-class</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E F</td>
+ <td class="meaning">an F element descendant of an E element</td>
+ <td class="described"><a
+ href="#descendant-combinators">Descendant
+ combinator</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E &gt; F</td>
+ <td class="meaning">an F element child of an E element</td>
+ <td class="described"><a
+ href="#child-combinators">Child
+ combinator</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E + F</td>
+ <td class="meaning">an F element immediately preceded by an E element</td>
+ <td class="described"><a
+ href="#adjacent-sibling-combinators">Adjacent sibling combinator</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E ~ F</td>
+ <td class="meaning">an F element preceded by an E element</td>
+ <td class="described"><a
+ href="#general-sibling-combinators">General sibling combinator</a></td>
+ <td class="origin">3</td></tr></tbody></table>
+
+<p>The meaning of each selector is derived from the table above by
+prepending "matches" to the contents of each cell in the "Meaning"
+column.</p>
+
+<h2><a name=casesens>3. Case sensitivity</a></h2>
+
+<p>The case sensitivity of document language element names, attribute
+names, and attribute values in selectors depends on the document
+language. For example, in HTML, element names are case-insensitive,
+but in XML, they are case-sensitive.</p>
+
+<h2><a name=selector-syntax>4. Selector syntax</a></h2>
+
+<p>A <dfn><a name=selector>selector</a></dfn> is a chain of one
+or more <a href="#sequence">sequences of simple selectors</a>
+separated by <a href="#combinators">combinators</a>.</p>
+
+<p>A <dfn><a name=sequence>sequence of simple selectors</a></dfn>
+is a chain of <a href="#simple-selectors-dfn">simple selectors</a>
+that are not separated by a <a href="#combinators">combinator</a>. It
+always begins with a <a href="#type-selectors">type selector</a> or a
+<a href="#universal-selector">universal selector</a>. No other type
+selector or universal selector is allowed in the sequence.</p>
+
+<p>A <dfn><a name=simple-selectors-dfn></a><a
+href="#simple-selectors">simple selector</a></dfn> is either a <a
+href="#type-selectors">type selector</a>, <a
+href="#universal-selector">universal selector</a>, <a
+href="#attribute-selectors">attribute selector</a>, <a
+href="#class-html">class selector</a>, <a
+href="#id-selectors">ID selector</a>, <a
+href="#content-selectors">content selector</a>, or <a
+href="#pseudo-classes">pseudo-class</a>. One <a
+href="#pseudo-elements">pseudo-element</a> may be appended to the last
+sequence of simple selectors.</p>
+
+<p><dfn>Combinators</dfn> are: white space, &quot;greater-than
+sign&quot; (U+003E, <code>&gt;</code>), &quot;plus sign&quot; (U+002B,
+<code>+</code>) and &quot;tilde&quot; (U+007E, <code>~</code>). White
+space may appear between a combinator and the simple selectors around
+it. <a name=whitespace></a>Only the characters "space" (U+0020), "tab"
+(U+0009), "line feed" (U+000A), "carriage return" (U+000D), and "form
+feed" (U+000C) can occur in white space. Other space-like characters,
+such as "em-space" (U+2003) and "ideographic space" (U+3000), are
+never part of white space.</p>
+
+<p>The elements of a document tree that are represented by a selector
+are the <dfn><a name=subject></a>subjects of the selector</dfn>. A
+selector consisting of a single sequence of simple selectors
+represents any element satisfying its requirements. Prepending another
+sequence of simple selectors and a combinator to a sequence imposes
+additional matching constraints, so the subjects of a selector are
+always a subset of the elements represented by the last sequence of
+simple selectors.</p>
+
+<p>An empty selector, containing no sequence of simple selectors and
+no pseudo-element, is an <a href="#Conformance">invalid
+selector</a>.</p>
+
+<h2><a name=grouping>5. Groups of selectors</a></h2>
+
+<p>When several selectors share the same declarations, they may be
+grouped into a comma-separated list. (A comma is U+002C.)</p>
+
+<div class="example">
+<p>CSS examples:</p>
+<p>In this example, we condense three rules with identical
+declarations into one. Thus,</p>
+<pre>h1 { font-family: sans-serif }
+h2 { font-family: sans-serif }
+h3 { font-family: sans-serif }</pre>
+<p>is equivalent to:</p>
+<pre>h1, h2, h3 { font-family: sans-serif }</pre>
+</div>
+
+<p><strong>Warning</strong>: the equivalence is true in this example
+because all the selectors are valid selectors. If just one of these
+selectors were invalid, the entire group of selectors would be
+invalid. This would invalidate the rule for all three heading
+elements, whereas in the former case only one of the three individual
+heading rules would be invalidated.</p>
+
+
+<h2><a name=simple-selectors>6. Simple selectors</a></h2>
+
+<h3><a name=type-selectors>6.1. Type selector</a></h3>
+
+<p>A <dfn>type selector</dfn> is the name of a document language
+element type. A type selector represents an instance of the element
+type in the document tree.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents an <code>h1</code> element in the document tree:</p>
+ <pre>h1</pre>
+</div>
+
+
+<h4><a name=typenmsp>6.1.1. Type selectors and namespaces</a></h4>
+
+<p>Type selectors allow an optional namespace (<a
+href="#refsXMLNAMES">[XMLNAMES]</a>) component. A namespace prefix
+that has been previously declared may be prepended to the element name
+separated by the namespace separator &quot;vertical bar&quot;
+(U+007C, <code>|</code>).</p>
+
+<p>The namespace component may be left empty to indicate that the
+selector is only to represent elements with no declared namespace.</p>
+
+<p>An asterisk may be used for the namespace prefix, indicating that
+the selector represents elements in any namespace (including elements
+with no namespace).</p>
+
+<p>Element type selectors that have no namespace component (no
+namespace separator), represent elements without regard to the
+element's namespace (equivalent to "<code>*|</code>") unless a default
+namespace has been declared. If a default namespace has been declared,
+the selector will represent only elements in the default
+namespace.</p>
+
+<p>A type selector containing a namespace prefix that has not been
+previously declared is an <a href="#Conformance">invalid</a> selector.
+The mechanism for declaring a namespace prefix is left up to the
+language implementing Selectors. In CSS, such a mechanism is defined
+in the General Syntax module.</p>
+
+<p>In a namespace-aware client, element type selectors will only match
+against the <a
+href="http://www.w3.org/TR/REC-xml-names/#NT-LocalPart">local part</a>
+of the element's <a
+href="http://www.w3.org/TR/REC-xml-names/#ns-qualnames">qualified
+name</a>. See <a href="#downlevel">below</a> for notes about matching
+behaviors in down-level clients.</p>
+
+<p>In summary:</p>
+
+<dl>
+ <dt><code>ns|E</code></dt>
+ <dd>elements with name E in namespace ns</dd>
+ <dt><code>*|E</code></dt>
+ <dd>elements with name E in any namespace, including those without any
+ declared namespace</dd>
+ <dt><code>|E</code></dt>
+ <dd>elements with name E without any declared namespace</dd>
+ <dt><code>E</code></dt>
+ <dd>if no default namespace has been specified, this is equivalent to *|E.
+ Otherwise it is equivalent to ns|E where ns is the default namespace.</dd>
+</dl>
+
+<div class="example">
+ <p>CSS examples:</p>
+
+ <pre>@namespace foo url(http://www.example.com);
+ foo|h1 { color: blue }
+ foo|* { color: yellow }
+ |h1 { color: red }
+ *|h1 { color: green }
+ h1 { color: green }</pre>
+
+ <p>The first rule will match only <code>h1</code> elements in the
+ "http://www.example.com" namespace.</p>
+
+ <p>The second rule will match all elements in the
+ "http://www.example.com" namespace.</p>
+
+ <p>The third rule will match only <code>h1</code> elements without
+ any declared namespace.</p>
+
+ <p>The fourth rule will match <code>h1</code> elements in any
+ namespace (including those without any declared namespace).</p>
+
+ <p>The last rule is equivalent to the fourth rule because no default
+ namespace has been defined.</p>
+
+</div>
+
+<h3><a name=universal-selector>6.2. Universal selector</a> </h3>
+
+<p>The <dfn>universal selector</dfn>, written &quot;asterisk&quot;
+(<code>*</code>), represents the qualified name of any element
+type. It represents any single element in the document tree in any
+namespace (including those without any declared namespace) if no
+default namespace has been specified. If a default namespace has been
+specified, see <a href="#univnmsp">Universal selector and
+Namespaces</a> below.</p>
+
+<p>If the universal selector is not the only component of a sequence
+of simple selectors, the <code>*</code> may be omitted.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <ul>
+ <li><code>*[hreflang|=en]</code> and <code>[hreflang|=en]</code> are equivalent,</li>
+ <li><code>*.warning</code> and <code>.warning</code> are equivalent,</li>
+ <li><code>*#myid</code> and <code>#myid</code> are equivalent.</li>
+ </ul>
+</div>
+
+<p class="note"><strong>Note:</strong> it is recommended that the
+<code>*</code>, representing the universal selector, not be
+omitted.</p>
+
+<h4><a name=univnmsp>6.2.1. Universal selector and namespaces</a></h4>
+
+<p>The universal selector allows an optional namespace component. It
+is used as follows:</p>
+
+<dl>
+ <dt><code>ns|*</code></dt>
+ <dd>all elements in namespace ns</dd>
+ <dt><code>*|*</code></dt>
+ <dd>all elements</dd>
+ <dt><code>|*</code></dt>
+ <dd>all elements without any declared namespace</dd>
+ <dt><code>*</code></dt>
+ <dd>if no default namespace has been specified, this is equivalent to *|*.
+ Otherwise it is equivalent to ns|* where ns is the default namespace.</dd>
+</dl>
+
+<p>A universal selector containing a namespace prefix that has not
+been previously declared is an <a href="#Conformance">invalid</a>
+selector. The mechanism for declaring a namespace prefix is left up
+to the language implementing Selectors. In CSS, such a mechanism is
+defined in the General Syntax module.</p>
+
+
+<h3><a name=attribute-selectors>6.3. Attribute selectors</a></h3>
+
+<p>Selectors allow the representation of an element's attributes. When
+a selector is used as an expression to match against an element,
+attribute selectors must be considered to match an element if that
+element has an attribute that matches the attribute represented by the
+attribute selector.</p>
+
+<h4><a name=attribute-representation>6.3.1. Attribute presence and values
+selectors</a></h4>
+
+<p>CSS2 introduced four attribute selectors:</p>
+
+<dl>
+ <dt><code>[att]</code>
+ <dd>Represents an element with the <code>att</code> attribute, whatever the value of
+ the attribute.</dd>
+ <dt><code>[att=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value is exactly
+ "val".</dd>
+ <dt><code>[att~=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value is a <a
+ href="#whitespace">whitespace</a>-separated list of words, one of
+ which is exactly "val". If "val" contains whitespace, it will never
+ represent anything (since the words are <em>separated</em> by
+ spaces).</dd>
+ <dt><code>[att|=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute, its value either
+ being exactly "val" or beginning with "val" immediately followed by
+ "-" (U+002D). This is primarily intended to allow language subcode
+ matches (e.g., the <code>hreflang</code> attribute on the
+ <code>link</code> element in HTML) as described in RFC 3066 (<a
+ href="#refsRFC3066">[RFC3066]</a>). For <code>lang</code> (or
+ <code>xml:lang</code>) language subcode matching, please see <a
+ href="#lang-pseudo">the <code>:lang</code> pseudo-class</a>.</dd>
+</dl>
+
+<p>Attribute values must be identifiers or strings. The
+case-sensitivity of attribute names and values in selectors depends on
+the document language.</p>
+
+<div class="example">
+
+ <p>Examples:</p>
+
+ <p>The following attribute selector represents an <code>h1</code>
+ element that carries the <code>title</code> attribute, whatever its
+ value:</p>
+
+ <pre>h1[title]</pre>
+
+ <p>In the following example, the selector represents a
+ <code>span</code> element whose <code>class</code> attribute has
+ exactly the value "example":</p>
+
+ <pre>span[class="example"]</pre>
+
+ <p>Multiple attribute selectors can be used to represent several
+ attributes of an element, or several conditions on the same
+ attribute. Here, the selector represents a <code>span</code> element
+ whose <code>hello</code> attribute has exactly the value "Cleveland"
+ and whose <code>goodbye</code> attribute has exactly the value
+ "Columbus":</p>
+
+ <pre>span[hello="Cleveland"][goodbye="Columbus"]</pre>
+
+ <p>The following selectors illustrate the differences between "="
+ and "~=". The first selector will represent, for example, the value
+ "copyright copyleft copyeditor" on a <code>rel</code> attribute. The
+ second selector will only represent an <code>a</code> element with
+ an <code>href</code> attribute having the exact value
+ "http://www.w3.org/".</p>
+
+ <pre>a[rel~="copyright"]
+a[href="http://www.w3.org/"]</pre>
+
+ <p>The following selector represents a <code>link</code> element
+ whose <code>hreflang</code> attribute is exactly "fr".</p>
+
+ <pre>link[hreflang=fr]</pre>
+
+ <p>The following selector represents a <code>link</code> element for
+ which the values of the <code>hreflang</code> attribute begins with
+ "en", including "en", "en-US", and "en-cockney":</p>
+
+ <pre>link[hreflang|="en"]</pre>
+
+ <p>Similarly, the following selectors represents a
+ <code>DIALOGUE</code> element whenever it has one of two different
+ values for an attribute <code>character</code>:</p>
+
+ <pre>DIALOGUE[character=romeo]
+DIALOGUE[character=juliet]</pre>
+
+</div>
+
+<h4><a name=attribute-substrings></a>6.3.2. Substring matching attribute
+selectors</h4>
+
+<p>Three additional attribute selectors are provided for matching
+substrings in the value of an attribute:</p>
+
+<dl>
+ <dt><code>[att^=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value begins
+ with the prefix "val".</dd>
+ <dt><code>[att$=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute whose value ends with
+ the suffix "val".</dd>
+ <dt><code>[att*=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute whose value contains
+ at least one instance of the substring "val".</dd>
+</dl>
+
+<p>Attribute values must be identifiers or strings. The
+case-sensitivity of attribute names in selectors depends on the
+document language.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents an HTML <code>object</code>, referencing an
+ image:</p>
+ <pre>object[type^="image/"]</pre>
+ <p>The following selector represents an HTML anchor <code>a</code> with an
+ <code>href</code> attribute whose value ends with ".html".</p>
+ <pre>a[href$=".html"]</pre>
+ <p>The following selector represents an HTML paragraph with a <code>title</code>
+ attribute whose value contains the substring "hello"</p>
+ <pre>p[title*="hello"]</pre>
+</div>
+
+<h4><a name=attrnmsp>6.3.3. Attribute selectors and namespaces</a></h4>
+
+<p>Attribute selectors allow an optional namespace component to the
+attribute name. A namespace prefix that has been previously declared
+may be prepended to the attribute name separated by the namespace
+separator &quot;vertical bar&quot; (<code>|</code>). In keeping with
+the Namespaces in the XML recommendation, default namespaces do not
+apply to attributes, therefore attribute selectors without a namespace
+component apply only to attributes that have no declared namespace
+(equivalent to "<code>|attr</code>"). An asterisk may be used for the
+namespace prefix indicating that the selector is to match all
+attribute names without regard to the attribute's namespace.
+
+<p>An attribute selector with an attribute name containing a namespace
+prefix that has not been previously declared is an <a
+href="#Conformance">invalid</a> selector. The mechanism for declaring
+a namespace prefix is left up to the language implementing Selectors.
+In CSS, such a mechanism is defined in the General Syntax module.
+
+<div class="example">
+ <p>CSS examples:</p>
+ <pre>@namespace foo "http://www.example.com";
+[foo|att=val] { color: blue }
+[*|att] { color: yellow }
+[|att] { color: green }
+[att] { color: green }</pre>
+
+ <p>The first rule will match only elements with the attribute
+ <code>att</code> in the "http://www.example.com" namespace with the
+ value "val".</p>
+
+ <p>The second rule will match only elements with the attribute
+ <code>att</code> regardless of the namespace of the attribute
+ (including no declared namespace).</p>
+
+ <p>The last two rules are equivalent and will match only elements
+ with the attribute <code>att</code> where the attribute is not
+ declared to be in a namespace.</p>
+
+</div>
+
+<h4><a name=def-values>6.3.4. Default attribute values in DTDs</a></h4>
+
+<p>Attribute selectors represent explicitly set attribute values in
+the document tree. Default attribute values may be defined in a DTD or
+elsewhere, but cannot always be selected by attribute
+selectors. Selectors should be designed so that they work even if the
+default values are not included in the document tree.</p>
+
+<p>More precisely, a UA is <em>not</em> required to read an "external
+subset" of the DTD but <em>is</em> required to look for default
+attribute values in the document's "internal subset." (See <a
+href="#refsXML10">[XML10]</a> for definitions of these subsets.)</p>
+
+<p>A UA that recognizes an XML namespace <a
+href="#refsXMLNAMES">[XMLNAMES]</a> is not required to use its
+knowledge of that namespace to treat default attribute values as if
+they were present in the document. (For example, an XHTML UA is not
+required to use its built-in knowledge of the XHTML DTD.)</p>
+
+<p class="note"><strong>Note:</strong> Typically, implementations
+choose to ignore external subsets.</p>
+
+<div class="example">
+<p>Example:</p>
+
+<p>Consider an element EXAMPLE with an attribute "notation" that has a
+default value of "decimal". The DTD fragment might be</p>
+
+<pre class="dtd-example">&lt;!ATTLIST EXAMPLE notation (decimal,octal) "decimal"></pre>
+
+<p>If the style sheet contains the rules</p>
+
+<pre>EXAMPLE[notation=decimal] { /*... default property settings ...*/ }
+EXAMPLE[notation=octal] { /*... other settings...*/ }</pre>
+
+<p>the first rule will not match elements whose "notation" attribute
+is set by default, i.e. not set explicitly. To catch all cases, the
+attribute selector for the default value must be dropped:</p>
+
+<pre>EXAMPLE { /*... default property settings ...*/ }
+EXAMPLE[notation=octal] { /*... other settings...*/ }</pre>
+
+<p>Here, because the selector <code>EXAMPLE[notation=octal]</code> is
+more specific than the tag
+selector alone, the style declarations in the second rule will override
+those in the first for elements that have a "notation" attribute value
+of "octal". Care has to be taken that all property declarations that
+are to apply only to the default case are overridden in the non-default
+cases' style rules.</p>
+
+</div>
+
+<h3><a name=class-html>6.4. Class selectors</a></h3>
+
+<p>Working with HTML, authors may use the period (U+002E,
+<code>.</code>) notation as an alternative to the <code>~=</code>
+notation when representing the <code>class</code> attribute. Thus, for
+HTML, <code>div.value</code> and <code>div[class~=value]</code> have
+the same meaning. The attribute value must immediately follow the
+&quot;period&quot; (<code>.</code>).</p>
+
+<p>UAs may apply selectors using the period (.) notation in XML
+documents if the UA has namespace-specific knowledge that allows it to
+determine which attribute is the &quot;class&quot; attribute for the
+respective namespace. One such example of namespace-specific knowledge
+is the prose in the specification for a particular namespace (e.g. SVG
+1.0 <a href="#refsSVG">[SVG]</a> describes the <a
+href="http://www.w3.org/TR/2001/PR-SVG-20010719/styling.html#ClassAttribute">SVG
+&quot;class&quot; attribute</a> and how a UA should interpret it, and
+similarly MathML 1.01 <a href="#refsMATH">[MATH]</a> describes the <a
+href="http://www.w3.org/1999/07/REC-MathML-19990707/chapter2.html#sec2.3.4">MathML
+&quot;class&quot; attribute</a>.)</p>
+
+<div class="example">
+ <p>CSS examples:</p>
+
+ <p>We can assign style information to all elements with
+ <code>class~="pastoral"</code> as follows:</p>
+
+ <pre>*.pastoral { color: green } /* all elements with class~=pastoral */</pre>
+
+ <p>or just</p>
+
+ <pre>.pastoral { color: green } /* all elements with class~=pastoral */</pre>
+
+ <p>The following assigns style only to H1 elements with
+ <code>class~="pastoral"</code>:</p>
+
+ <pre>H1.pastoral { color: green } /* H1 elements with class~=pastoral */</pre>
+
+ <p>Given these rules, the first H1 instance below would not have
+ green text, while the second would:</p>
+
+ <pre>&lt;H1&gt;Not green&lt;/H1&gt;
+&lt;H1 class="pastoral"&gt;Very green&lt;/H1&gt;</pre>
+
+</div>
+
+<p>To represent a subset of "class" values, each value must be preceded
+by a ".", in any order.</P>
+
+<div class="example">
+
+ <p>CSS example:</p>
+
+ <p>The following rule matches any P element whose "class" attribute
+ has been assigned a list of <a
+ href="#whitespace">whitespace</a>-separated values that includes
+ "pastoral" and "marine":</p>
+
+ <pre>p.pastoral.marine { color: green }</pre>
+
+ <p>This rule matches when <code>class="pastoral blue aqua
+ marine"</code> but does not match for <code>class="pastoral
+ blue"</code>.</p>
+
+</div>
+
+<p class="note"><strong>Note:</strong> Because CSS gives considerable
+power to the "class" attribute, authors could conceivably design their
+own "document language" based on elements with almost no associated
+presentation (such as DIV and SPAN in HTML) and assigning style
+information through the "class" attribute. Authors should avoid this
+practice since the structural elements of a document language often
+have recognized and accepted meanings and author-defined classes may
+not.</p>
+
+<p class="note"><strong>Note:</strong> If an element has multiple
+class attributes, their values must be concatenated with spaces
+between the values before searching for the class. As of this time the
+working group is not aware of any manner in which this situation can
+be reached, however, so this behavior is explicitly non-normative in
+this specification.</p>
+
+<h3><a name=id-selectors>6.5. ID selectors</a></h3>
+
+<p>Document languages may contain attributes that are declared to be
+of type ID. What makes attributes of type ID special is that no two
+such attributes can have the same value in a document, regardless of
+the type of the elements that carry them; whatever the document
+language, an ID typed attribute can be used to uniquely identify its
+element. In HTML all ID attributes are named "id"; XML applications
+may name ID attributes differently, but the same restriction
+applies.</p>
+
+<p>An ID-typed attribute of a document language allows authors to
+assign an identifier to one element instance in the document tree. W3C
+ID selectors represent an element instance based on its identifier. An
+ID selector contains a &quot;number sign&quot; (U+0023,
+<code>#</code>) immediately followed by the ID value, which must be an
+identifier.</p>
+
+<p>Selectors does not specify how a UA knows the ID-typed attribute of
+an element. The UA may, e.g., read a document's DTD, have the
+information hard-coded or ask the user.
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following ID selector represents an <code>h1</code> element
+ whose ID-typed attribute has the value "chapter1":</p>
+ <pre>h1#chapter1</pre>
+ <p>The following ID selector represents any element whose ID-typed
+ attribute has the value "chapter1":</p>
+ <pre>#chapter1</pre>
+ <p>The following selector represents any element whose ID-typed
+ attribute has the value "z98y".</p>
+ <pre>*#z98y</pre>
+</div>
+
+<p class="note"><strong>Note.</strong> In XML 1.0 <a
+href="#refsXML10">[XML10]</a>, the information about which attribute
+contains an element's IDs is contained in a DTD or a schema. When
+parsing XML, UAs do not always read the DTD, and thus may not know
+what the ID of an element is (though a UA may have namespace-specific
+knowledge that allows it to determine which attribute is the ID
+attribute for that namespace). If a style sheet designer knows or
+suspects that a UA may not know what the ID of an element is, he
+should use normal attribute selectors instead:
+<code>[name=p371]</code> instead of <code>#p371</code>. Elements in
+XML 1.0 documents without a DTD do not have IDs at all.</p>
+
+<p>If an element has multiple ID attributes, all of them must be
+treated as IDs for that element for the purposes of the ID
+selector. Such a situation could be reached using mixtures of xml:id,
+DOM3 Core, XML DTDs, and namespace-specific knowledge.</p>
+
+<h3><a name=pseudo-classes>6.6. Pseudo-classes</a></h3>
+
+<p>The pseudo-class concept is introduced to permit selection based on
+information that lies outside of the document tree or that cannot be
+expressed using the other simple selectors.</p>
+
+<p>A pseudo-class always consists of a &quot;colon&quot;
+(<code>:</code>) followed by the name of the pseudo-class and
+optionally by a value between parentheses.</p>
+
+<p>Pseudo-classes are allowed in all sequences of simple selectors
+contained in a selector. Pseudo-classes are allowed anywhere in
+sequences of simple selectors, after the leading type selector or
+universal selector (possibly omitted). Pseudo-class names are
+case-insensitive. Some pseudo-classes are mutually exclusive, while
+others can be applied simultaneously to the same
+element. Pseudo-classes may be dynamic, in the sense that an element
+may acquire or lose a pseudo-class while a user interacts with the
+document.</p>
+
+
+<h4><a name=dynamic-pseudos>6.6.1. Dynamic pseudo-classes</a></h4>
+
+<p>Dynamic pseudo-classes classify elements on characteristics other
+than their name, attributes, or content, in principle characteristics
+that cannot be deduced from the document tree.</p>
+
+<p>Dynamic pseudo-classes do not appear in the document source or
+document tree.</p>
+
+
+<h5>The <a name=link>link pseudo-classes: :link and :visited</a></h5>
+
+<p>User agents commonly display unvisited links differently from
+previously visited ones. Selectors
+provides the pseudo-classes <code>:link</code> and
+<code>:visited</code> to distinguish them:</p>
+
+<ul>
+ <li>The <code>:link</code> pseudo-class applies to links that have
+ not yet been visited.</li>
+ <li>The <code>:visited</code> pseudo-class applies once the link has
+ been visited by the user. </li>
+</ul>
+
+<p>After some amount of time, user agents may choose to return a
+visited link to the (unvisited) ':link' state.</p>
+
+<p>The two states are mutually exclusive.</p>
+
+<div class="example">
+
+ <p>Example:</p>
+
+ <p>The following selector represents links carrying class
+ <code>external</code> and already visited:</p>
+
+ <pre>a.external:visited</pre>
+
+</div>
+
+<p class="note"><strong>Note:</strong> It is possible for style sheet
+authors to abuse the :link and :visited pseudo-classes to determine
+which sites a user has visited without the user's consent.
+
+<p>UAs may therefore treat all links as unvisited links, or implement
+other measures to preserve the user's privacy while rendering visited
+and unvisited links differently.</p>
+
+<h5>The <a name=useraction-pseudos>user action pseudo-classes
+:hover, :active, and :focus</a></h5>
+
+<p>Interactive user agents sometimes change the rendering in response
+to user actions. Selectors provides
+three pseudo-classes for the selection of an element the user is
+acting on.</p>
+
+<ul>
+
+ <li>The <code>:hover</code> pseudo-class applies while the user
+ designates an element with a pointing device, but does not activate
+ it. For example, a visual user agent could apply this pseudo-class
+ when the cursor (mouse pointer) hovers over a box generated by the
+ element. User agents not that do not support <a
+ href="http://www.w3.org/TR/REC-CSS2/media.html#interactive-media-group">interactive
+ media</a> do not have to support this pseudo-class. Some conforming
+ user agents that support <a
+ href="http://www.w3.org/TR/REC-CSS2/media.html#interactive-media-group">interactive
+ media</a> may not be able to support this pseudo-class (e.g., a pen
+ device that does not detect hovering).</li>
+
+ <li>The <code>:active</code> pseudo-class applies while an element
+ is being activated by the user. For example, between the times the
+ user presses the mouse button and releases it.</li>
+
+ <li>The <code>:focus</code> pseudo-class applies while an element
+ has the focus (accepts keyboard or mouse events, or other forms of
+ input). </li>
+
+</ul>
+
+<p>There may be document language or implementation specific limits on
+which elements can become <code>:active</code> or acquire
+<code>:focus</code>.</p>
+
+<p>These pseudo-classes are not mutually exclusive. An element may
+match several pseudo-classes at the same time.</p>
+
+<p>Selectors doesn't define if the parent of an element that is
+':active' or ':hover' is also in that state.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <pre>a:link /* unvisited links */
+a:visited /* visited links */
+a:hover /* user hovers */
+a:active /* active links */</pre>
+ <p>An example of combining dynamic pseudo-classes:</p>
+ <pre>a:focus
+a:focus:hover</pre>
+ <p>The last selector matches <code>a</code> elements that are in
+ the pseudo-class :focus and in the pseudo-class :hover.</p>
+</div>
+
+<p class="note"><strong>Note:</strong> An element can be both ':visited'
+and ':active' (or ':link' and ':active').</p>
+
+<h4><a name=target-pseudo>6.6.2. The target pseudo-class :target</a></h4>
+
+<p>Some URIs refer to a location within a resource. This kind of URI
+ends with a &quot;number sign&quot; (#) followed by an anchor
+identifier (called the fragment identifier).</p>
+
+<p>URIs with fragment identifiers link to a certain element within the
+document, known as the target element. For instance, here is a URI
+pointing to an anchor named <code>section_2</code> in an HTML
+document:</p>
+
+<pre>http://example.com/html/top.html#section_2</pre>
+
+<p>A target element can be represented by the <code>:target</code>
+pseudo-class. If the document's URI has no fragment identifier, then
+the document has no target element.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <pre>p.note:target</pre>
+ <p>This selector represents a <code>p</code> element of class
+ <code>note</code> that is the target element of the referring
+ URI.</p>
+</div>
+
+<div class="example">
+ <p>CSS example:</p>
+ <p>Here, the <code>:target</code> pseudo-class is used to make the
+ target element red and place an image before it, if there is one:</p>
+ <pre>*:target { color : red }
+*:target::before { content : url(target.png) }</pre>
+</div>
+
+<h4><a name=lang-pseudo>6.6.3. The language pseudo-class :lang</a></h4>
+
+<p>If the document language specifies how the human language of an
+element is determined, it is possible to write selectors that
+represent an element based on its language. For example, in HTML <a
+href="#refsHTML4">[HTML4]</a>, the language is determined by a
+combination of the <code>lang</code> attribute, the <code>meta</code>
+element, and possibly by information from the protocol (such as HTTP
+headers). XML uses an attribute called <code>xml:lang</code>, and
+there may be other document language-specific methods for determining
+the language.</p>
+
+<p>The pseudo-class <code>:lang(C)</code> represents an element that
+is in language C. Whether an element is represented by a
+<code>:lang()</code> selector is based solely on the identifier C
+being either equal to, or a hyphen-separated substring of, the
+element's language value, in the same way as if performed by the <a
+href="#attribute-representation">'|='</a> operator in attribute
+selectors. The identifier C does not have to be a valid language
+name.</p>
+
+<p>C must not be empty. (If it is, the selector is invalid.)</p>
+
+<p class="note"><strong>Note:</strong> It is recommended that
+documents and protocols indicate language using codes from RFC 3066 <a
+href="#refsRFC3066">[RFC3066]</a> or its successor, and by means of
+"xml:lang" attributes in the case of XML-based documents <a
+href="#refsXML10">[XML10]</a>. See <a
+href="http://www.w3.org/International/questions/qa-lang-2or3.html">
+"FAQ: Two-letter or three-letter language codes."</a></p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The two following selectors represent an HTML document that is in
+ Belgian, French, or German. The two next selectors represent
+ <code>q</code> quotations in an arbitrary element in Belgian, French,
+ or German.</p>
+ <pre>html:lang(fr-be)
+html:lang(de)
+:lang(fr-be) &gt; q
+:lang(de) &gt; q</pre>
+</div>
+
+<h4><a name=UIstates>6.6.4. The UI element states pseudo-classes</a></h4>
+
+<h5><a name=enableddisabled>The :enabled and :disabled pseudo-classes</a></h5>
+
+<p>The <code>:enabled</code> pseudo-class allows authors to customize
+the look of user interface elements that are enabled &mdash; which the
+user can select or activate in some fashion (e.g. clicking on a button
+with a mouse). There is a need for such a pseudo-class because there
+is no way to programmatically specify the default appearance of say,
+an enabled <code>input</code> element without also specifying what it
+would look like when it was disabled.</p>
+
+<p>Similar to <code>:enabled</code>, <code>:disabled</code> allows the
+author to specify precisely how a disabled or inactive user interface
+element should look.</p>
+
+<p>Most elements will be neither enabled nor disabled. An element is
+enabled if the user can either activate it or transfer the focus to
+it. An element is disabled if it could be enabled, but the user cannot
+presently activate it or transfer focus to it.</p>
+
+
+<h5><a name=checked>The :checked pseudo-class</a></h5>
+
+<p>Radio and checkbox elements can be toggled by the user. Some menu
+items are "checked" when the user selects them. When such elements are
+toggled "on" the <code>:checked</code> pseudo-class applies. The
+<code>:checked</code> pseudo-class initially applies to such elements
+that have the HTML4 <code>selected</code> and <code>checked</code>
+attributes as described in <a
+href="http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.2.1">Section
+17.2.1 of HTML4</a>, but of course the user can toggle "off" such
+elements in which case the <code>:checked</code> pseudo-class would no
+longer apply. While the <code>:checked</code> pseudo-class is dynamic
+in nature, and is altered by user action, since it can also be based
+on the presence of the semantic HTML4 <code>selected</code> and
+<code>checked</code> attributes, it applies to all media.
+
+
+<h5><a name=indeterminate>The :indeterminate pseudo-class</a></h5>
+
+<div class="note">
+
+<p>Radio and checkbox elements can be toggled by the user, but are
+sometimes in an indeterminate state, neither checked nor unchecked.
+This can be due to an element attribute, or DOM manipulation.</p>
+
+<p>A future version of this specification may introduce an
+<code>:indeterminate</code> pseudo-class that applies to such elements.
+<!--While the <code>:indeterminate</code> pseudo-class is dynamic in
+nature, and is altered by user action, since it can also be based on
+the presence of an element attribute, it applies to all media.</p>
+
+<p>Components of a radio-group initialized with no pre-selected choice
+are an example of :indeterminate state.--></p>
+
+</div>
+
+
+<h4><a name=structural-pseudos>6.6.5. Structural pseudo-classes</a></h4>
+
+<p>Selectors introduces the concept of <dfn>structural
+pseudo-classes</dfn> to permit selection based on extra information that lies in
+the document tree but cannot be represented by other simple selectors or
+combinators.
+
+<p>Note that standalone pieces of PCDATA (text nodes in the DOM) are
+not counted when calculating the position of an element in the list of
+children of its parent. When calculating the position of an element in
+the list of children of its parent, the index numbering starts at 1.
+
+
+<h5><a name=root-pseudo>:root pseudo-class</a></h5>
+
+<p>The <code>:root</code> pseudo-class represents an element that is
+the root of the document. In HTML 4, this is always the
+<code>HTML</code> element.
+
+
+<h5><a name=nth-child-pseudo>:nth-child() pseudo-class</a></h5>
+
+<p>The
+<code>:nth-child(<var>a</var><code>n</code>+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings
+<strong>before</strong> it in the document tree, for a given positive
+integer or zero value of <code>n</code>, and has a parent element. In
+other words, this matches the <var>b</var>th child of an element after
+all the children have been split into groups of <var>a</var> elements
+each. For example, this allows the selectors to address every other
+row in a table, and could be used to alternate the color
+of paragraph text in a cycle of four. The <var>a</var> and
+<var>b</var> values must be zero, negative integers or positive
+integers. The index of the first child of an element is 1.
+
+<p>In addition to this, <code>:nth-child()</code> can take
+'<code>odd</code>' and '<code>even</code>' as arguments instead.
+'<code>odd</code>' has the same signification as <code>2n+1</code>,
+and '<code>even</code>' has the same signification as <code>2n</code>.
+
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-child(2n+1) /* represents every odd row of an HTML table */
+tr:nth-child(odd) /* same */
+tr:nth-child(2n) /* represents every even row of an HTML table */
+tr:nth-child(even) /* same */
+
+/* Alternate paragraph colours in CSS */
+p:nth-child(4n+1) { color: navy; }
+p:nth-child(4n+2) { color: green; }
+p:nth-child(4n+3) { color: maroon; }
+p:nth-child(4n+4) { color: purple; }</pre>
+</div>
+
+<p>When <var>a</var>=0, no repeating is used, so for example
+<code>:nth-child(0n+5)</code> matches only the fifth child. When
+<var>a</var>=0, the <var>a</var><code>n</code> part need not be
+included, so the syntax simplifies to
+<code>:nth-child(<var>b</var>)</code> and the last example simplifies
+to <code>:nth-child(5)</code>.
+
+<div class="example">
+<p>Examples:</p>
+<pre>foo:nth-child(0n+1) /* represents an element foo, first child of its parent element */
+foo:nth-child(1) /* same */</pre>
+</div>
+
+<p>When <var>a</var>=1, the number may be omitted from the rule.
+
+<div class="example">
+<p>Examples:</p>
+<p>The following selectors are therefore equivalent:</p>
+<pre>bar:nth-child(1n+0) /* represents all bar elements, specificity (0,1,1) */
+bar:nth-child(n+0) /* same */
+bar:nth-child(n) /* same */
+bar /* same but lower specificity (0,0,1) */</pre>
+</div>
+
+<p>If <var>b</var>=0, then every <var>a</var>th element is picked. In
+such a case, the <var>b</var> part may be omitted.
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-child(2n+0) /* represents every even row of an HTML table */
+tr:nth-child(2n) /* same */</pre>
+</div>
+
+<p>If both <var>a</var> and <var>b</var> are equal to zero, the
+pseudo-class represents no element in the document tree.</p>
+
+<p>The value <var>a</var> can be negative, but only the positive
+values of <var>a</var><code>n</code>+<var>b</var>, for
+<code>n</code>&ge;0, may represent an element in the document
+tree.</p>
+
+<div class="example">
+<p>Example:</p>
+<pre>html|tr:nth-child(-n+6) /* represents the 6 first rows of XHTML tables */</pre>
+</div>
+
+<p>When the value <var>b</var> is negative, the "+" character in the
+expression must be removed (it is effectively replaced by the "-"
+character indicating the negative value of <var>b</var>).</p>
+
+<div class="example">
+<p>Examples:</p>
+<pre>:nth-child(10n-1) /* represents the 9th, 19th, 29th, etc, element */
+:nth-child(10n+9) /* Same */
+:nth-child(10n+-1) /* Syntactically invalid, and would be ignored */</pre>
+</div>
+
+
+<h5><a name=nth-last-child-pseudo>:nth-last-child() pseudo-class</a></h5>
+
+<p>The <code>:nth-last-child(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings
+<strong>after</strong> it in the document tree, for a given positive
+integer or zero value of <code>n</code>, and has a parent element. See
+<code>:nth-child()</code> pseudo-class for the syntax of its argument.
+It also accepts the '<code>even</code>' and '<code>odd</code>' values
+as arguments.
+
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-last-child(-n+2) /* represents the two last rows of an HTML table */
+
+foo:nth-last-child(odd) /* represents all odd foo elements in their parent element,
+ counting from the last one */</pre>
+</div>
+
+
+<h5><a name=nth-of-type-pseudo>:nth-of-type() pseudo-class</a></h5>
+
+<p>The <code>:nth-of-type(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings with the same
+element name <strong>before</strong> it in the document tree, for a
+given zero or positive integer value of <code>n</code>, and has a
+parent element. In other words, this matches the <var>b</var>th child
+of that type after all the children of that type have been split into
+groups of a elements each. See <code>:nth-child()</code> pseudo-class
+for the syntax of its argument. It also accepts the
+'<code>even</code>' and '<code>odd</code>' values.
+
+
+<div class="example">
+<p>CSS example:</p>
+<p>This allows an author to alternate the position of floated images:</p>
+<pre>img:nth-of-type(2n+1) { float: right; }
+img:nth-of-type(2n) { float: left; }</pre>
+</div>
+
+
+<h5><a name=nth-last-of-type-pseudo>:nth-last-of-type() pseudo-class</a></h5>
+
+<p>The <code>:nth-last-of-type(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings with the same
+element name <strong>after</strong> it in the document tree, for a
+given zero or positive integer value of <code>n</code>, and has a
+parent element. See <code>:nth-child()</code> pseudo-class for the
+syntax of its argument. It also accepts the '<code>even</code>' and '<code>odd</code>' values.
+
+
+<div class="example">
+ <p>Example:</p>
+ <p>To represent all <code>h2</code> children of an XHTML
+ <code>body</code> except the first and last, one could use the
+ following selector:</p>
+ <pre>body &gt; h2:nth-of-type(n+2):nth-last-of-type(n+2)</pre>
+ <p>In this case, one could also use <code>:not()</code>, although the
+ selector ends up being just as long:</p>
+ <pre>body &gt; h2:not(:first-of-type):not(:last-of-type)</pre>
+</div>
+
+
+<h5><a name=first-child-pseudo>:first-child pseudo-class</a></h5>
+
+<p>Same as <code>:nth-child(1)</code>. The <code>:first-child</code> pseudo-class
+represents an element that is the first child of some other element.
+
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element that is
+ the first child of a <code>div</code> element:</p>
+ <pre>div &gt; p:first-child</pre>
+ <p>This selector can represent the <code>p</code> inside the
+ <code>div</code> of the following fragment:</p>
+ <pre>&lt;p&gt; The last P before the note.&lt;/p&gt;
+&lt;div class="note"&gt;
+ &lt;p&gt; The first P inside the note.&lt;/p&gt;
+&lt;/div&gt;</pre>but cannot represent the second <code>p</code> in the following
+fragment:
+ <pre>&lt;p&gt; The last P before the note.&lt;/p&gt;
+&lt;div class="note"&gt;
+ &lt;h2&gt; Note &lt;/h2&gt;
+ &lt;p&gt; The first P inside the note.&lt;/p&gt;
+&lt;/div&gt;</pre>
+ <p>The following two selectors are usually equivalent:</p>
+ <pre>* &gt; a:first-child /* a is first child of any element */
+a:first-child /* Same (assuming a is not the root element) */</pre>
+</div>
+
+<h5><a name=last-child-pseudo>:last-child pseudo-class</a></h5>
+
+<p>Same as <code>:nth-last-child(1)</code>. The <code>:last-child</code> pseudo-class
+represents an element that is the last child of some other element.
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents a list item <code>li</code> that
+ is the last child of an ordered list <code>ol</code>.
+ <pre>ol &gt; li:last-child</pre>
+</div>
+
+<h5><a name=first-of-type-pseudo>:first-of-type pseudo-class</a></h5>
+
+<p>Same as <code>:nth-of-type(1)</code>. The <code>:first-of-type</code> pseudo-class
+represents an element that is the first sibling of its type in the list of
+children of its parent element.
+
+<div class="example">
+<p>Example:</p>
+<p>The following selector represents a definition title
+<code>dt</code> inside a definition list <code>dl</code>, this
+<code>dt</code> being the first of its type in the list of children of
+its parent element.</p>
+<pre>dl dt:first-of-type</pre>
+<p>It is a valid description for the first two <code>dt</code>
+elements in the following example but not for the third one:</p>
+<pre>&lt;dl&gt;
+ &lt;dt&gt;gigogne&lt;/dt&gt;
+ &lt;dd&gt;
+ &lt;dl&gt;
+ &lt;dt&gt;fus&eacute;e&lt;/dt&gt;
+ &lt;dd&gt;multistage rocket&lt;/dd&gt;
+ &lt;dt&gt;table&lt;/dt&gt;
+ &lt;dd&gt;nest of tables&lt;/dd&gt;
+ &lt;/dl&gt;
+ &lt;/dd&gt;
+&lt;/dl&gt;</pre>
+</div>
+
+<h5><a name=last-of-type-pseudo>:last-of-type pseudo-class</a></h5>
+
+<p>Same as <code>:nth-last-of-type(1)</code>. The
+<code>:last-of-type</code> pseudo-class represents an element that is
+the last sibling of its type in the list of children of its parent
+element.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents the last data cell
+ <code>td</code> of a table row.</p>
+ <pre>tr &gt; td:last-of-type</pre>
+</div>
+
+<h5><a name=only-child-pseudo>:only-child pseudo-class</a></h5>
+
+<p>Represents an element that has a parent element and whose parent
+element has no other element children. Same as
+<code>:first-child:last-child</code> or
+<code>:nth-child(1):nth-last-child(1)</code>, but with a lower
+specificity.</p>
+
+<h5><a name=only-of-type-pseudo>:only-of-type pseudo-class</a></h5>
+
+<p>Represents an element that has a parent element and whose parent
+element has no other element children with the same element name. Same
+as <code>:first-of-type:last-of-type</code> or
+<code>:nth-of-type(1):nth-last-of-type(1)</code>, but with a lower
+specificity.</p>
+
+
+<h5><a name=empty-pseudo></a>:empty pseudo-class</h5>
+
+<p>The <code>:empty</code> pseudo-class represents an element that has
+no children at all. In terms of the DOM, only element nodes and text
+nodes (including CDATA nodes and entity references) whose data has a
+non-zero length must be considered as affecting emptiness; comments,
+PIs, and other nodes must not affect whether an element is considered
+empty or not.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p><code>p:empty</code> is a valid representation of the following fragment:</p>
+ <pre>&lt;p&gt;&lt;/p&gt;</pre>
+ <p><code>foo:empty</code> is not a valid representation for the
+ following fragments:</p>
+ <pre>&lt;foo&gt;bar&lt;/foo&gt;</pre>
+ <pre>&lt;foo&gt;&lt;bar&gt;bla&lt;/bar&gt;&lt;/foo&gt;</pre>
+ <pre>&lt;foo&gt;this is not &lt;bar&gt;:empty&lt;/bar&gt;&lt;/foo&gt;</pre>
+</div>
+
+<h4><a name=content-selectors>6.6.6. Blank</a></h4> <!-- It's the Return of Appendix H!!! Run away! -->
+
+<p>This section intentionally left blank.</p>
+<!-- (used to be :contains()) -->
+
+<h4><a name=negation></a>6.6.7. The negation pseudo-class</h4>
+
+<p>The negation pseudo-class, <code>:not(<var>X</var>)</code>, is a
+functional notation taking a <a href="#simple-selectors-dfn">simple
+selector</a> (excluding the negation pseudo-class itself and
+pseudo-elements) as an argument. It represents an element that is not
+represented by the argument.
+
+<!-- pseudo-elements are not simple selectors, so the above paragraph
+may be a bit confusing -->
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following CSS selector matches all <code>button</code>
+ elements in an HTML document that are not disabled.</p>
+ <pre>button:not([DISABLED])</pre>
+ <p>The following selector represents all but <code>FOO</code>
+ elements.</p>
+ <pre>*:not(FOO)</pre>
+ <p>The following group of selectors represents all HTML elements
+ except links.</p>
+ <pre>html|*:not(:link):not(:visited)</pre>
+</div>
+
+<p>Default namespace declarations do not affect the argument of the
+negation pseudo-class unless the argument is a universal selector or a
+type selector.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>Assuming that the default namespace is bound to
+ "http://example.com/", the following selector represents all
+ elements that are not in that namespace:</p>
+ <pre>*|*:not(*)</pre>
+ <p>The following CSS selector matches any element being hovered,
+ regardless of its namespace. In particular, it is not limited to
+ only matching elements in the default namespace that are not being
+ hovered, and elements not in the default namespace don't match the
+ rule when they <em>are</em> being hovered.</p>
+ <pre>*|*:not(:hover)</pre>
+</div>
+
+<p class="note"><strong>Note</strong>: the :not() pseudo allows
+useless selectors to be written. For instance <code>:not(*|*)</code>,
+which represents no element at all, or <code>foo:not(bar)</code>,
+which is equivalent to <code>foo</code> but with a higher
+specificity.</p>
+
+<h3><a name=pseudo-elements>7. Pseudo-elements</a></h3>
+
+<p>Pseudo-elements create abstractions about the document tree beyond
+those specified by the document language. For instance, document
+languages do not offer mechanisms to access the first letter or first
+line of an element's content. Pseudo-elements allow designers to refer
+to this otherwise inaccessible information. Pseudo-elements may also
+provide designers a way to refer to content that does not exist in the
+source document (e.g., the <code>::before</code> and
+<code>::after</code> pseudo-elements give access to generated
+content).</p>
+
+<p>A pseudo-element is made of two colons (<code>::</code>) followed
+by the name of the pseudo-element.</p>
+
+<p>This <code>::</code> notation is introduced by the current document
+in order to establish a discrimination between pseudo-classes and
+pseudo-elements. For compatibility with existing style sheets, user
+agents must also accept the previous one-colon notation for
+pseudo-elements introduced in CSS levels 1 and 2 (namely,
+<code>:first-line</code>, <code>:first-letter</code>,
+<code>:before</code> and <code>:after</code>). This compatibility is
+not allowed for the new pseudo-elements introduced in CSS level 3.</p>
+
+<p>Only one pseudo-element may appear per selector, and if present it
+must appear after the sequence of simple selectors that represents the
+<a href="#subject">subjects</a> of the selector. <span class="note">A
+future version of this specification may allow multiple
+pesudo-elements per selector.</span></p>
+
+<h4><a name=first-line>7.1. The ::first-line pseudo-element</a></h4>
+
+<p>The <code>::first-line</code> pseudo-element describes the contents
+of the first formatted line of an element.
+
+<div class="example">
+<p>CSS example:</p>
+<pre>p::first-line { text-transform: uppercase }</pre>
+<p>The above rule means "change the letters of the first line of every
+paragraph to uppercase".</p>
+</div>
+
+<p>The selector <code>p::first-line</code> does not match any real
+HTML element. It does match a pseudo-element that conforming user
+agents will insert at the beginning of every paragraph.</p>
+
+<p>Note that the length of the first line depends on a number of
+factors, including the width of the page, the font size, etc. Thus,
+an ordinary HTML paragraph such as:</p>
+
+<pre>
+&lt;P&gt;This is a somewhat long HTML
+paragraph that will be broken into several
+lines. The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>the lines of which happen to be broken as follows:
+
+<pre>
+THIS IS A SOMEWHAT LONG HTML PARAGRAPH THAT
+will be broken into several lines. The first
+line will be identified by a fictional tag
+sequence. The other lines will be treated as
+ordinary lines in the paragraph.
+</pre>
+
+<p>This paragraph might be "rewritten" by user agents to include the
+<em>fictional tag sequence</em> for <code>::first-line</code>. This
+fictional tag sequence helps to show how properties are inherited.</p>
+
+<pre>
+&lt;P&gt;<b>&lt;P::first-line&gt;</b> This is a somewhat long HTML
+paragraph that <b>&lt;/P::first-line&gt;</b> will be broken into several
+lines. The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>If a pseudo-element breaks up a real element, the desired effect
+can often be described by a fictional tag sequence that closes and
+then re-opens the element. Thus, if we mark up the previous paragraph
+with a <code>span</code> element:</p>
+
+<pre>
+&lt;P&gt;<b>&lt;SPAN class="test"&gt;</b> This is a somewhat long HTML
+paragraph that will be broken into several
+lines.<b>&lt;/SPAN&gt;</b> The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>the user agent could simulate start and end tags for
+<code>span</code> when inserting the fictional tag sequence for
+<code>::first-line</code>.
+
+<pre>
+&lt;P&gt;&lt;P::first-line&gt;<b>&lt;SPAN class="test"&gt;</b> This is a
+somewhat long HTML
+paragraph that will <b>&lt;/SPAN&gt;</b>&lt;/P::first-line&gt;<b>&lt;SPAN class="test"&gt;</b> be
+broken into several
+lines.<b>&lt;/SPAN&gt;</b> The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>In CSS, the <code>::first-line</code> pseudo-element can only be
+attached to a block-level element, an inline-block, a table-caption,
+or a table-cell.</p>
+
+<p><a name="first-formatted-line"></a>The "first formatted line" of an
+element may occur inside a
+block-level descendant in the same flow (i.e., a block-level
+descendant that is not positioned and not a float). E.g., the first
+line of the <code>div</code> in <code>&lt;DIV>&lt;P>This
+line...&lt;/P>&lt/DIV></code> is the first line of the <code>p</code> (assuming
+that both <code>p</code> and <code>div</code> are block-level).
+
+<p>The first line of a table-cell or inline-block cannot be the first
+formatted line of an ancestor element. Thus, in <code>&lt;DIV&gt;&lt;P
+STYLE="display: inline-block">Hello&lt;BR&gt;Goodbye&lt;/P&gt;
+etcetera&lt;/DIV&gt;</code> the first formatted line of the
+<code>div</code> is not the line "Hello".
+
+<p class="note">Note that the first line of the <code>p</code> in this
+fragment: <code>&lt;p&gt&lt;br&gt;First...</code> doesn't contain any
+letters (assuming the default style for <code>br</code> in HTML
+4). The word "First" is not on the first formatted line.
+
+<p>A UA should act as if the fictional start tags of the
+<code>::first-line</code> pseudo-elements were nested just inside the
+innermost enclosing block-level element. (Since CSS1 and CSS2 were
+silent on this case, authors should not rely on this behavior.) Here
+is an example. The fictional tag sequence for</p>
+
+<pre>
+&lt;DIV>
+ &lt;P>First paragraph&lt;/P>
+ &lt;P>Second paragraph&lt;/P>
+&lt;/DIV>
+</pre>
+
+<p>is</p>
+
+<pre>
+&lt;DIV>
+ &lt;P>&lt;DIV::first-line>&lt;P::first-line>First paragraph&lt;/P::first-line>&lt;/DIV::first-line>&lt;/P>
+ &lt;P>&lt;P::first-line>Second paragraph&lt;/P::first-line>&lt;/P>
+&lt;/DIV>
+</pre>
+
+<p>The <code>::first-line</code> pseudo-element is similar to an
+inline-level element, but with certain restrictions. In CSS, the
+following properties apply to a <code>::first-line</code>
+pseudo-element: font properties, color property, background
+properties, 'word-spacing', 'letter-spacing', 'text-decoration',
+'vertical-align', 'text-transform', 'line-height'. UAs may apply other
+properties as well.</p>
+
+
+<h4><a name=first-letter>7.2. The ::first-letter pseudo-element</a></h4>
+
+<p>The <code>::first-letter</code> pseudo-element represents the first
+letter of the first line of a block, if it is not preceded by any
+other content (such as images or inline tables) on its line. The
+::first-letter pseudo-element may be used for "initial caps" and "drop
+caps", which are common typographical effects. This type of initial
+letter is similar to an inline-level element if its 'float' property
+is 'none'; otherwise, it is similar to a floated element.</p>
+
+<p>In CSS, these are the properties that apply to <code>::first-letter</code>
+pseudo-elements: font properties, 'text-decoration', 'text-transform',
+'letter-spacing', 'word-spacing' (when appropriate), 'line-height',
+'float', 'vertical-align' (only if 'float' is 'none'), margin
+properties, padding properties, border properties, color property,
+background properties. UAs may apply other properties as well. To
+allow UAs to render a typographically correct drop cap or initial cap,
+the UA may choose a line-height, width and height based on the shape
+of the letter, unlike for normal elements.</p>
+
+<div class="example">
+<p>Example:</p>
+<p>This example shows a possible rendering of an initial cap. Note
+that the 'line-height' that is inherited by the <code>::first-letter</code>
+pseudo-element is 1.1, but the UA in this example has computed the
+height of the first letter differently, so that it doesn't cause any
+unnecessary space between the first two lines. Also note that the
+fictional start tag of the first letter is inside the <span>span</span>, and thus
+the font weight of the first letter is normal, not bold as the <span>span</span>:
+<pre>
+p { line-height: 1.1 }
+p::first-letter { font-size: 3em; font-weight: normal }
+span { font-weight: bold }
+...
+&lt;p>&lt;span>Het hemelsche&lt;/span> gerecht heeft zich ten lange lesten&lt;br>
+Erbarremt over my en mijn benaeuwde vesten&lt;br>
+En arme burgery, en op mijn volcx gebed&lt;br>
+En dagelix geschrey de bange stad ontzet.
+</pre>
+<div class="figure">
+<p><img src="initial-cap.png" alt="Image illustrating the ::first-letter pseudo-element">
+</div>
+</div>
+
+<div class="example">
+<p>The following CSS will make a drop cap initial letter span about two lines:</p>
+
+<pre>
+&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"&gt;
+&lt;HTML&gt;
+ &lt;HEAD&gt;
+ &lt;TITLE&gt;Drop cap initial letter&lt;/TITLE&gt;
+ &lt;STYLE type="text/css"&gt;
+ P { font-size: 12pt; line-height: 1.2 }
+ P::first-letter { font-size: 200%; font-weight: bold; float: left }
+ SPAN { text-transform: uppercase }
+ &lt;/STYLE&gt;
+ &lt;/HEAD&gt;
+ &lt;BODY&gt;
+ &lt;P&gt;&lt;SPAN&gt;The first&lt;/SPAN&gt; few words of an article
+ in The Economist.&lt;/P&gt;
+ &lt;/BODY&gt;
+&lt;/HTML&gt;
+</pre>
+
+<p>This example might be formatted as follows:</p>
+
+<div class="figure">
+<P><img src="first-letter.gif" alt="Image illustrating the combined effect of the ::first-letter and ::first-line pseudo-elements"></p>
+</div>
+
+<p>The <span class="index-inst" title="fictional tag
+sequence">fictional tag sequence</span> is:</p>
+
+<pre>
+&lt;P&gt;
+&lt;SPAN&gt;
+&lt;P::first-letter&gt;
+T
+&lt;/P::first-letter&gt;he first
+&lt;/SPAN&gt;
+few words of an article in the Economist.
+&lt;/P&gt;
+</pre>
+
+<p>Note that the <code>::first-letter</code> pseudo-element tags abut
+the content (i.e., the initial character), while the ::first-line
+pseudo-element start tag is inserted right after the start tag of the
+block element.</p> </div>
+
+<p>In order to achieve traditional drop caps formatting, user agents
+may approximate font sizes, for example to align baselines. Also, the
+glyph outline may be taken into account when formatting.</p>
+
+<p>Punctuation (i.e, characters defined in Unicode in the "open" (Ps),
+"close" (Pe), "initial" (Pi). "final" (Pf) and "other" (Po)
+punctuation classes), that precedes or follows the first letter should
+be included. <a href="#refsUNICODE">[UNICODE]</a></p>
+
+<div class="figure">
+<P><img src="first-letter2.gif" alt="Quotes that precede the
+first letter should be included."></p>
+</div>
+
+<p>The <code>::first-letter</code> also applies if the first letter is
+in fact a digit, e.g., the "6" in "67 million dollars is a lot of
+money."</p>
+
+<p>In CSS, the <code>::first-letter</code> pseudo-element applies to
+block, list-item, table-cell, table-caption, and inline-block
+elements. <span class="note">A future version of this specification
+may allow this pesudo-element to apply to more element
+types.</span></p>
+
+<p>The <code>::first-letter</code> pseudo-element can be used with all
+such elements that contain text, or that have a descendant in the same
+flow that contains text. A UA should act as if the fictional start tag
+of the ::first-letter pseudo-element is just before the first text of
+the element, even if that first text is in a descendant.</p>
+
+<div class="example">
+<p>Example:</p>
+<p>The fictional tag sequence for this HTMLfragment:
+<pre>&lt;div>
+&lt;p>The first text.</pre>
+<p>is:
+<pre>&lt;div>
+&lt;p>&lt;div::first-letter>&lt;p::first-letter>T&lt;/...>&lt;/...>he first text.</pre>
+</div>
+
+<p>The first letter of a table-cell or inline-block cannot be the
+first letter of an ancestor element. Thus, in <code>&lt;DIV&gt;&lt;P
+STYLE="display: inline-block">Hello&lt;BR&gt;Goodbye&lt;/P&gt;
+etcetera&lt;/DIV&gt;</code> the first letter of the <code>div</code> is not the
+letter "H". In fact, the <code>div</code> doesn't have a first letter.
+
+<p>The first letter must occur on the <a
+href="#first-formatted-line">first formatted line.</a> For example, in
+this fragment: <code>&lt;p&gt&lt;br&gt;First...</code> the first line
+doesn't contain any letters and <code>::first-letter</code> doesn't
+match anything (assuming the default style for <code>br</code> in HTML
+4). In particular, it does not match the "F" of "First."
+
+<p>In CSS, if an element is a list item ('display: list-item'), the
+<code>::first-letter</code> applies to the first letter in the
+principal box after the marker. UAs may ignore
+<code>::first-letter</code> on list items with 'list-style-position:
+inside'. If an element has <code>::before</code> or
+<code>::after</code> content, the <code>::first-letter</code> applies
+to the first letter of the element <em>including</em> that content.
+
+<div class="example">
+<p>Example:</p>
+<p>After the rule 'p::before {content: "Note: "}', the selector
+'p::first-letter' matches the "N" of "Note".</p>
+</div>
+
+<p>Some languages may have specific rules about how to treat certain
+letter combinations. In Dutch, for example, if the letter combination
+"ij" appears at the beginning of a word, both letters should be
+considered within the <code>::first-letter</code> pseudo-element.
+
+<p>If the letters that would form the ::first-letter are not in the
+same element, such as "'T" in <code>&lt;p>'&lt;em>T...</code>, the UA
+may create a ::first-letter pseudo-element from one of the elements,
+both elements, or simply not create a pseudo-element.</p>
+
+<p>Similarly, if the first letter(s) of the block are not at the start
+of the line (for example due to bidirectional reordering), then the UA
+need not create the pseudo-element(s).
+
+<div class="example">
+<p>Example:</p>
+<p><a name="overlapping-example">The following example</a> illustrates
+how overlapping pseudo-elements may interact. The first letter of
+each P element will be green with a font size of '24pt'. The rest of
+the first formatted line will be 'blue' while the rest of the
+paragraph will be 'red'.</p>
+
+<pre>p { color: red; font-size: 12pt }
+p::first-letter { color: green; font-size: 200% }
+p::first-line { color: blue }
+
+&lt;P&gt;Some text that ends up on two lines&lt;/P&gt;</pre>
+
+<p>Assuming that a line break will occur before the word "ends", the
+<span class="index-inst" title="fictional tag sequence">fictional tag
+sequence</span> for this fragment might be:</p>
+
+<pre>&lt;P&gt;
+&lt;P::first-line&gt;
+&lt;P::first-letter&gt;
+S
+&lt;/P::first-letter&gt;ome text that
+&lt;/P::first-line&gt;
+ends up on two lines
+&lt;/P&gt;</pre>
+
+<p>Note that the <code>::first-letter</code> element is inside the <code>::first-line</code>
+element. Properties set on <code>::first-line</code> are inherited by
+<code>::first-letter</code>, but are overridden if the same property is set on
+<code>::first-letter</code>.</p>
+</div>
+
+
+<h4><a name=UIfragments>7.3.</a> <a name=selection>The ::selection pseudo-element</a></h4>
+
+<p>The <code>::selection</code> pseudo-element applies to the portion
+of a document that has been highlighted by the user. This also
+applies, for example, to selected text within an editable text
+field. This pseudo-element should not be confused with the <code><a
+href="#checked">:checked</a></code> pseudo-class (which used to be
+named <code>:selected</code>)
+
+<p>Although the <code>::selection</code> pseudo-element is dynamic in
+nature, and is altered by user action, it is reasonable to expect that
+when a UA re-renders to a static medium (such as a printed page, see
+<a href="#refsCSS21">[CSS21]</a>) which was originally rendered to a
+dynamic medium (like screen), the UA may wish to transfer the current
+<code>::selection</code> state to that other medium, and have all the
+appropriate formatting and rendering take effect as well. This is not
+required &mdash; UAs may omit the <code>::selection</code>
+pseudo-element for static media.
+
+<p>These are the CSS properties that apply to <code>::selection</code>
+pseudo-elements: color, background, cursor (optional), outline
+(optional). The computed value of the 'background-image' property on
+<code>::selection</code> may be ignored.
+
+
+<h4><a name=gen-content>7.4. The ::before and ::after pseudo-elements</a></h4>
+
+<p>The <code>::before</code> and <code>::after</code> pseudo-elements
+can be used to describe generated content before or after an element's
+content. They are explained in CSS 2.1 <a
+href="#refsCSS21">[CSS21]</a>.</p>
+
+<p>When the <code>::first-letter</code> and <code>::first-line</code>
+pseudo-elements are combined with <code>::before</code> and
+<code>::after</code>, they apply to the first letter or line of the
+element including the inserted text.</p>
+
+<h2><a name=combinators>8. Combinators</a></h2>
+
+<h3><a name=descendant-combinators>8.1. Descendant combinator</a></h3>
+
+<p>At times, authors may want selectors to describe an element that is
+the descendant of another element in the document tree (e.g., "an
+<code>EM</code> element that is contained within an <code>H1</code>
+element"). Descendant combinators express such a relationship. A
+descendant combinator is <a href="#whitespace">white space</a> that
+separates two sequences of simple selectors. A selector of the form
+"<code>A B</code>" represents an element <code>B</code> that is an
+arbitrary descendant of some ancestor element <code>A</code>.
+
+<div class="example">
+ <p>Examples:</p>
+ <p>For example, consider the following selector:</p>
+ <pre>h1 em</pre>
+ <p>It represents an <code>em</code> element being the descendant of
+ an <code>h1</code> element. It is a correct and valid, but partial,
+ description of the following fragment:</p>
+ <pre>&lt;h1&gt;This &lt;span class="myclass"&gt;headline
+is &lt;em&gt;very&lt;/em&gt; important&lt;/span&gt;&lt;/h1&gt;</pre>
+ <p>The following selector:</p>
+ <pre>div * p</pre>
+ <p>represents a <code>p</code> element that is a grandchild or later
+ descendant of a <code>div</code> element. Note the whitespace on
+ either side of the "*" is not part of the universal selector; the
+ whitespace is a combinator indicating that the DIV must be the
+ ancestor of some element, and that that element must be an ancestor
+ of the P.</p>
+ <p>The following selector, which combines descendant combinators and
+ <a href="#attribute-selectors">attribute selectors</a>, represents an
+ element that (1) has the <code>href</code> attribute set and (2) is
+ inside a <code>p</code> that is itself inside a <code>div</code>:</p>
+ <pre>div p *[href]</pre>
+</div>
+
+<h3><a name=child-combinators>8.2. Child combinators</a></h3>
+
+<p>A <dfn>child combinator</dfn> describes a childhood relationship
+between two elements. A child combinator is made of the
+&quot;greater-than sign&quot; (<code>&gt;</code>) character and
+separates two sequences of simple selectors.
+
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element that is
+ child of <code>body</code>:</p>
+ <pre>body &gt; p</pre>
+ <p>The following example combines descendant combinators and child
+ combinators.</p>
+ <pre>div ol&gt;li p</pre><!-- LEAVE THOSE SPACES OUT! see below -->
+ <p>It represents a <code>p</code> element that is a descendant of an
+ <code>li</code> element; the <code>li</code> element must be the
+ child of an <code>ol</code> element; the <code>ol</code> element must
+ be a descendant of a <code>div</code>. Notice that the optional white
+ space around the "&gt;" combinator has been left out.</p>
+</div>
+
+<p>For information on selecting the first child of an element, please
+see the section on the <code><a
+href="#structural-pseudos">:first-child</a></code> pseudo-class
+above.</p>
+
+<h3><a name=sibling-combinators>8.3. Sibling combinators</a></h3>
+
+<p>There are two different sibling combinators: the adjacent sibling
+combinator and the general sibling combinator. In both cases,
+non-element nodes (e.g. text between elements) are ignored when
+considering adjacency of elements.</p>
+
+<h4><a name=adjacent-sibling-combinators>8.3.1. Adjacent sibling combinator</a></h4>
+
+<p>The adjacent sibling combinator is made of the &quot;plus
+sign&quot; (U+002B, <code>+</code>) character that separates two
+sequences of simple selectors. The elements represented by the two
+sequences share the same parent in the document tree and the element
+represented by the first sequence immediately precedes the element
+represented by the second one.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element
+ immediately following a <code>math</code> element:</p>
+ <pre>math + p</pre>
+ <p>The following selector is conceptually similar to the one in the
+ previous example, except that it adds an attribute selector &mdash; it
+ adds a constraint to the <code>h1</code> element, that it must have
+ <code>class="opener"</code>:</p>
+ <pre>h1.opener + h2</pre>
+</div>
+
+
+<h4><a name=general-sibling-combinators>8.3.2. General sibling combinator</a></h4>
+
+<p>The general sibling combinator is made of the &quot;tilde&quot;
+(U+007E, <code>~</code>) character that separates two sequences of
+simple selectors. The elements represented by the two sequences share
+the same parent in the document tree and the element represented by
+the first sequence precedes (not necessarily immediately) the element
+represented by the second one.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <pre>h1 ~ pre</pre>
+ <p>represents a <code>pre</code> element following an <code>h1</code>. It
+ is a correct and valid, but partial, description of:</p>
+ <pre>&lt;h1&gt;Definition of the function a&lt;/h1&gt;
+&lt;p&gt;Function a(x) has to be applied to all figures in the table.&lt;/p&gt;
+&lt;pre&gt;function a(x) = 12x/13.5&lt;/pre&gt;</pre>
+</div>
+
+<h2><a name=specificity>9. Calculating a selector's specificity</a></h2>
+
+<p>A selector's specificity is calculated as follows:</p>
+
+<ul>
+ <li>count the number of ID selectors in the selector (= a)</li>
+ <li>count the number of class selectors, attributes selectors, and pseudo-classes in the selector (= b)</li>
+ <li>count the number of element names in the selector (= c)</li>
+ <li>ignore pseudo-elements</li>
+</ul>
+
+<p>Selectors inside <a href="#negation">the negation pseudo-class</a>
+are counted like any other, but the negation itself does not count as
+a pseudo-class.</p>
+
+<p>Concatenating the three numbers a-b-c (in a number system with a
+large base) gives the specificity.</p>
+
+<div class="example">
+<p>Examples:</p>
+<pre>* /* a=0 b=0 c=0 -&gt; specificity = 0 */
+LI /* a=0 b=0 c=1 -&gt; specificity = 1 */
+UL LI /* a=0 b=0 c=2 -&gt; specificity = 2 */
+UL OL+LI /* a=0 b=0 c=3 -&gt; specificity = 3 */
+H1 + *[REL=up] /* a=0 b=1 c=1 -&gt; specificity = 11 */
+UL OL LI.red /* a=0 b=1 c=3 -&gt; specificity = 13 */
+LI.red.level /* a=0 b=2 c=1 -&gt; specificity = 21 */
+#x34y /* a=1 b=0 c=0 -&gt; specificity = 100 */
+#s12:not(FOO) /* a=1 b=0 c=1 -&gt; specificity = 101 */
+</pre>
+</div>
+
+<p class="note"><strong>Note:</strong> the specificity of the styles
+specified in an HTML <code>style</code> attribute is described in CSS
+2.1. <a href="#refsCSS21">[CSS21]</a>.</p>
+
+<h2><a name=w3cselgrammar>10. The grammar of Selectors</a></h2>
+
+<h3><a name=grammar>10.1. Grammar</a></h3>
+
+<p>The grammar below defines the syntax of Selectors. It is globally
+LL(1) and can be locally LL(2) (but note that most UA's should not use
+it directly, since it doesn't express the parsing conventions). The
+format of the productions is optimized for human consumption and some
+shorthand notations beyond Yacc (see <a href="#refsYACC">[YACC]</a>)
+are used:</p>
+
+<ul>
+ <li><b>*</b>: 0 or more
+ <li><b>+</b>: 1 or more
+ <li><b>?</b>: 0 or 1
+ <li><b>|</b>: separates alternatives
+ <li><b>[ ]</b>: grouping </li>
+</ul>
+
+<p>The productions are:</p>
+
+<pre>selectors_group
+ : selector [ COMMA S* selector ]*
+ ;
+
+selector
+ : simple_selector_sequence [ combinator simple_selector_sequence ]*
+ ;
+
+combinator
+ /* combinators can be surrounded by white space */
+ : PLUS S* | GREATER S* | TILDE S* | S+
+ ;
+
+simple_selector_sequence
+ : [ type_selector | universal ]
+ [ HASH | class | attrib | pseudo | negation ]*
+ | [ HASH | class | attrib | pseudo | negation ]+
+ ;
+
+type_selector
+ : [ namespace_prefix ]? element_name
+ ;
+
+namespace_prefix
+ : [ IDENT | '*' ]? '|'
+ ;
+
+element_name
+ : IDENT
+ ;
+
+universal
+ : [ namespace_prefix ]? '*'
+ ;
+
+class
+ : '.' IDENT
+ ;
+
+attrib
+ : '[' S* [ namespace_prefix ]? IDENT S*
+ [ [ PREFIXMATCH |
+ SUFFIXMATCH |
+ SUBSTRINGMATCH |
+ '=' |
+ INCLUDES |
+ DASHMATCH ] S* [ IDENT | STRING ] S*
+ ]? ']'
+ ;
+
+pseudo
+ /* '::' starts a pseudo-element, ':' a pseudo-class */
+ /* Exceptions: :first-line, :first-letter, :before and :after. */
+ /* Note that pseudo-elements are restricted to one per selector and */
+ /* occur only in the last simple_selector_sequence. */
+ : ':' ':'? [ IDENT | functional_pseudo ]
+ ;
+
+functional_pseudo
+ : FUNCTION S* expression ')'
+ ;
+
+expression
+ /* In CSS3, the expressions are identifiers, strings, */
+ /* or of the form "an+b" */
+ : [ [ PLUS | '-' | DIMENSION | NUMBER | STRING | IDENT ] S* ]+
+ ;
+
+negation
+ : NOT S* negation_arg S* ')'
+ ;
+
+negation_arg
+ : type_selector | universal | HASH | class | attrib | pseudo
+ ;</pre>
+
+
+<h3><a name=lex>10.2. Lexical scanner</a></h3>
+
+<p>The following is the <a name=x3>tokenizer</a>, written in Flex (see
+<a href="#refsFLEX">[FLEX]</a>) notation. The tokenizer is
+case-insensitive.</p>
+
+<p>The two occurrences of "\377" represent the highest character
+number that current versions of Flex can deal with (decimal 255). They
+should be read as "\4177777" (decimal 1114111), which is the highest
+possible code point in Unicode/ISO-10646. <a
+href="#refsUNICODE">[UNICODE]</a></p>
+
+<pre>%option case-insensitive
+
+ident [-]?{nmstart}{nmchar}*
+name {nmchar}+
+nmstart [_a-z]|{nonascii}|{escape}
+nonascii [^\0-\177]
+unicode \\[0-9a-f]{1,6}(\r\n|[ \n\r\t\f])?
+escape {unicode}|\\[^\n\r\f0-9a-f]
+nmchar [_a-z0-9-]|{nonascii}|{escape}
+num [0-9]+|[0-9]*\.[0-9]+
+string {string1}|{string2}
+string1 \"([^\n\r\f\\"]|\\{nl}|{nonascii}|{escape})*\"
+string2 \'([^\n\r\f\\']|\\{nl}|{nonascii}|{escape})*\'
+invalid {invalid1}|{invalid2}
+invalid1 \"([^\n\r\f\\"]|\\{nl}|{nonascii}|{escape})*
+invalid2 \'([^\n\r\f\\']|\\{nl}|{nonascii}|{escape})*
+nl \n|\r\n|\r|\f
+w [ \t\r\n\f]*
+
+%%
+
+[ \t\r\n\f]+ return S;
+
+"~=" return INCLUDES;
+"|=" return DASHMATCH;
+"^=" return PREFIXMATCH;
+"$=" return SUFFIXMATCH;
+"*=" return SUBSTRINGMATCH;
+{ident} return IDENT;
+{string} return STRING;
+{ident}"(" return FUNCTION;
+{num} return NUMBER;
+"#"{name} return HASH;
+{w}"+" return PLUS;
+{w}"&gt;" return GREATER;
+{w}"," return COMMA;
+{w}"~" return TILDE;
+":not(" return NOT;
+@{ident} return ATKEYWORD;
+{invalid} return INVALID;
+{num}% return PERCENTAGE;
+{num}{ident} return DIMENSION;
+"&lt;!--" return CDO;
+"--&gt;" return CDC;
+
+"url("{w}{string}{w}")" return URI;
+"url("{w}([!#$%&*-~]|{nonascii}|{escape})*{w}")" return URI;
+U\+[0-9a-f?]{1,6}(-[0-9a-f]{1,6})? return UNICODE_RANGE;
+
+\/\*[^*]*\*+([^/*][^*]*\*+)*\/ /* ignore comments */
+
+. return *yytext;</pre>
+
+
+
+<h2><a name=downlevel>11. Namespaces and down-level clients</a></h2>
+
+<p>An important issue is the interaction of CSS selectors with XML
+documents in web clients that were produced prior to this
+document. Unfortunately, due to the fact that namespaces must be
+matched based on the URI which identifies the namespace, not the
+namespace prefix, some mechanism is required to identify namespaces in
+CSS by their URI as well. Without such a mechanism, it is impossible
+to construct a CSS style sheet which will properly match selectors in
+all cases against a random set of XML documents. However, given
+complete knowledge of the XML document to which a style sheet is to be
+applied, and a limited use of namespaces within the XML document, it
+is possible to construct a style sheet in which selectors would match
+elements and attributes correctly.</p>
+
+<p>It should be noted that a down-level CSS client will (if it
+properly conforms to CSS forward compatible parsing rules) ignore all
+<code>@namespace</code> at-rules, as well as all style rules that make
+use of namespace qualified element type or attribute selectors. The
+syntax of delimiting namespace prefixes in CSS was deliberately chosen
+so that down-level CSS clients would ignore the style rules rather
+than possibly match them incorrectly.</p>
+
+<p>The use of default namespaces in CSS makes it possible to write
+element type selectors that will function in both namespace aware CSS
+clients as well as down-level clients. It should be noted that
+down-level clients may incorrectly match selectors against XML
+elements in other namespaces.</p>
+
+<p>The following are scenarios and examples in which it is possible to
+construct style sheets which would function properly in web clients
+that do not implement this proposal.</p>
+
+<ol>
+ <li>
+
+ <p>The XML document does not use namespaces.</p>
+
+ <ul>
+
+ <li>In this case, it is obviously not necessary to declare or use
+ namespaces in the style sheet. Standard CSS element type and
+ attribute selectors will function adequately in a down-level
+ client.</li>
+
+ <li>In a CSS namespace aware client, the default behavior of
+ element selectors matching without regard to namespace will
+ function properly against all elements, since no namespaces are
+ present. However, the use of specific element type selectors that
+ match only elements that have no namespace ("<code>|name</code>")
+ will guarantee that selectors will match only XML elements that do
+ not have a declared namespace. </li>
+
+ </ul>
+
+ </li>
+
+ <li>
+
+ <p>The XML document defines a single, default namespace used
+ throughout the document. No namespace prefixes are used in element
+ names.</p>
+
+ <ul>
+
+ <li>In this case, a down-level client will function as if
+ namespaces were not used in the XML document at all. Standard CSS
+ element type and attribute selectors will match against all
+ elements. </li>
+
+ </ul>
+
+ </li>
+
+ <li>
+
+ <p>The XML document does <b>not</b> use a default namespace, all
+ namespace prefixes used are known to the style sheet author, and
+ there is a direct mapping between namespace prefixes and namespace
+ URIs. (A given prefix may only be mapped to one namespace URI
+ throughout the XML document; there may be multiple prefixes mapped
+ to the same URI).</p>
+
+ <ul>
+
+ <li>In this case, the down-level client will view and match
+ element type and attribute selectors based on their fully
+ qualified name, not the local part as outlined in the <a
+ href="#typenmsp">Type selectors and Namespaces</a> section. CSS
+ selectors may be declared using an escaped colon "<code>\:</code>"
+ to describe the fully qualified names, e.g.
+ "<code>html\:h1</code>" will match
+ <code>&lt;html:h1&gt;</code>. Selectors using the qualified name
+ will only match XML elements that use the same prefix. Other
+ namespace prefixes used in the XML that are mapped to the same URI
+ will not match as expected unless additional CSS style rules are
+ declared for them.</li>
+
+ <li>Note that selectors declared in this fashion will
+ <em>only</em> match in down-level clients. A CSS namespace aware
+ client will match element type and attribute selectors based on
+ the name's local part. Selectors declared with the fully
+ qualified name will not match (unless there is no namespace prefix
+ in the fully qualified name).</li>
+
+ </ul>
+
+ </li>
+
+ </ol>
+
+<p>In other scenarios: when the namespace prefixes used in the XML are
+not known in advance by the style sheet author; or a combination of
+elements with no namespace are used in conjunction with elements using
+a default namespace; or the same namespace prefix is mapped to
+<em>different</em> namespace URIs within the same document, or in
+different documents; it is impossible to construct a CSS style sheet
+that will function properly against all elements in those documents,
+unless, the style sheet is written using a namespace URI syntax (as
+outlined in this document or similar) and the document is processed by
+a CSS and XML namespace aware client.</p>
+
+<h2><a name=profiling>12. Profiles</a></h2>
+
+<p>Each specification using Selectors must define the subset of W3C
+Selectors it allows and excludes, and describe the local meaning of
+all the components of that subset.</p>
+
+<p>Non normative examples:
+
+<div class="profile">
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>CSS level 1</td></tr>
+ <tr>
+ <th>Accepts</th>
+ <td>type selectors<br>class selectors<br>ID selectors<br>:link,
+ :visited and :active pseudo-classes<br>descendant combinator
+ <br>::first-line and ::first-letter pseudo-elements</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>
+
+<p>universal selector<br>attribute selectors<br>:hover and :focus
+ pseudo-classes<br>:target pseudo-class<br>:lang() pseudo-class<br>all UI
+ element states pseudo-classes<br>all structural
+ pseudo-classes<br>negation pseudo-class<br>all
+ UI element fragments pseudo-elements<br>::before and ::after
+ pseudo-elements<br>child combinators<br>sibling combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>only one class selector allowed per sequence of simple
+ selectors</td></tr></tbody></table><br><br>
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>CSS level 2</td></tr>
+ <tr>
+ <th>Accepts</th>
+ <td>type selectors<br>universal selector<br>attribute presence and
+ values selectors<br>class selectors<br>ID selectors<br>:link, :visited,
+ :active, :hover, :focus, :lang() and :first-child pseudo-classes
+ <br>descendant combinator<br>child combinator<br>adjacent sibling
+ combinator<br>::first-line and ::first-letter pseudo-elements<br>::before
+ and ::after pseudo-elements</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>
+
+<p>content selectors<br>substring matching attribute
+ selectors<br>:target pseudo-classes<br>all UI element
+ states pseudo-classes<br>all structural pseudo-classes other
+ than :first-child<br>negation pseudo-class<br>all UI element
+ fragments pseudo-elements<br>general sibling combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>more than one class selector per sequence of simple selectors (CSS1
+ constraint) allowed</td></tr></tbody></table>
+
+<p>In CSS, selectors express pattern matching rules that determine which style
+rules apply to elements in the document tree.
+
+<p>The following selector (CSS level 2) will <b>match</b> all anchors <code>a</code>
+with attribute <code>name</code> set inside a section 1 header <code>h1</code>:
+<pre>h1 a[name]</pre>
+
+<p>All CSS declarations attached to such a selector are applied to elements
+matching it. </div>
+
+<div class="profile">
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>STTS 3</td>
+ </tr>
+ <tr>
+ <th>Accepts</th>
+ <td>
+
+<p>type selectors<br>universal selectors<br>attribute selectors<br>class
+ selectors<br>ID selectors<br>all structural pseudo-classes<br>
+ all combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>non-accepted pseudo-classes<br>pseudo-elements<br></td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>some selectors and combinators are not allowed in fragment
+ descriptions on the right side of STTS declarations.</td></tr></tbody></table>
+<form>
+<input type="text" name="test10"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+</form>
+
+<p>Selectors can be used in STTS 3 in two different
+ manners:
+<ol>
+ <li>a selection mechanism equivalent to CSS selection mechanism: declarations
+ attached to a given selector are applied to elements matching that selector,
+ <li>fragment descriptions that appear on the right side of declarations.
+</li></ol></div>
+
+<h2><a name=Conformance></a>13. Conformance and requirements</h2>
+
+<p>This section defines conformance with the present specification only.
+
+<p>The inability of a user agent to implement part of this specification due to
+the limitations of a particular device (e.g., non interactive user agents will
+probably not implement dynamic pseudo-classes because they make no sense without
+interactivity) does not imply non-conformance.
+
+<p>All specifications reusing Selectors must contain a <a
+href="#profiling">Profile</a> listing the
+subset of Selectors it accepts or excludes, and describing the constraints
+it adds to the current specification.
+
+<p>Invalidity is caused by a parsing error, e.g. an unrecognized token or a token
+which is not allowed at the current parsing point.
+
+<p>User agents must observe the rules for handling parsing errors:
+<ul>
+ <li>a simple selector containing an undeclared namespace prefix is invalid</li>
+ <li>a selector containing an invalid simple selector, an invalid combinator
+ or an invalid token is invalid. </li>
+ <li>a group of selectors containing an invalid selector is invalid.</li>
+</ul>
+
+<p class="foo test10 bar">Specifications reusing Selectors must define how to handle parsing
+errors. (In the case of CSS, the entire rule in which the selector is
+used is dropped.)</p>
+
+<!-- Apparently all these references are out of date:
+<p>Implementations of this specification must behave as
+"recipients of text data" as defined by <a href="#refsCWWW">[CWWW]</a>
+when parsing selectors and attempting matches. (In particular,
+implementations must assume the data is normalized and must not
+normalize it.) Normative rules for matching strings are defined in
+<a href="#refsCWWW">[CWWW]</a> and <a
+href="#refsUNICODE">[UNICODE]</a> and apply to implementations of this
+specification.</p>-->
+
+<h2><a name=Tests></a>14. Tests</h2>
+
+<p>This specification has <a
+href="http://www.w3.org/Style/CSS/Test/CSS3/Selectors/current/">a test
+suite</a> allowing user agents to verify their basic conformance to
+the specification. This test suite does not pretend to be exhaustive
+and does not cover all possible combined cases of Selectors.</p>
+
+<h2><a name=ACKS></a>15. Acknowledgements</h2>
+
+<p>The CSS working group would like to thank everyone who has sent
+comments on this specification over the years.</p>
+
+<p>The working group would like to extend special thanks to Donna
+McManus, Justin Baker, Joel Sklar, and Molly Ives Brower who perfermed
+the final editorial review.</p>
+
+<h2><a name=references>16. References</a></h2>
+
+<dl class="refs">
+
+ <dt>[CSS1]
+ <dd><a name=refsCSS1></a> Bert Bos, H&aring;kon Wium Lie; "<cite>Cascading Style Sheets, level 1</cite>", W3C Recommendation, 17 Dec 1996, revised 11 Jan 1999
+ <dd>(<code><a href="http://www.w3.org/TR/REC-CSS1">http://www.w3.org/TR/REC-CSS1</a></code>)
+
+ <dt>[CSS21]
+ <dd><a name=refsCSS21></a> Bert Bos, Tantek &Ccedil;elik, Ian Hickson, H&aring;kon Wium Lie, editors; "<cite>Cascading Style Sheets, level 2 revision 1</cite>", W3C Working Draft, 13 June 2005
+ <dd>(<code><a href="http://www.w3.org/TR/CSS21">http://www.w3.org/TR/CSS21</a></code>)
+
+ <dt>[CWWW]
+ <dd><a name=refsCWWW></a> Martin J. D&uuml;rst, Fran&ccedil;ois Yergeau, Misha Wolf, Asmus Freytag, Tex Texin, editors; "<cite>Character Model for the World Wide Web</cite>", W3C Recommendation, 15 February 2005
+ <dd>(<code><a href="http://www.w3.org/TR/charmod/">http://www.w3.org/TR/charmod/</a></code>)
+
+ <dt>[FLEX]
+ <dd><a name="refsFLEX"></a> "<cite>Flex: The Lexical Scanner Generator</cite>", Version 2.3.7, ISBN 1882114213
+
+ <dt>[HTML4]
+ <dd><a name="refsHTML4"></a> Dave Ragget, Arnaud Le Hors, Ian Jacobs, editors; "<cite>HTML 4.01 Specification</cite>", W3C Recommendation, 24 December 1999
+ <dd>(<a href="http://www.w3.org/TR/html4/"><code>http://www.w3.org/TR/html4/</code></a>)
+
+ <dt>[MATH]
+ <dd><a name="refsMATH"></a> Patrick Ion, Robert Miner, editors; "<cite>Mathematical Markup Language (MathML) 1.01</cite>", W3C Recommendation, revision of 7 July 1999
+ <dd>(<code><a href="http://www.w3.org/TR/REC-MathML/">http://www.w3.org/TR/REC-MathML/</a></code>)
+
+ <dt>[RFC3066]
+ <dd><a name="refsRFC3066"></a> H. Alvestrand; "<cite>Tags for the Identification of Languages</cite>", Request for Comments 3066, January 2001
+ <dd>(<a href="http://www.ietf.org/rfc/rfc3066.txt"><code>http://www.ietf.org/rfc/rfc3066.txt</code></a>)
+
+ <dt>[STTS]
+ <dd><a name=refsSTTS></a> Daniel Glazman; "<cite>Simple Tree Transformation Sheets 3</cite>", Electricit&eacute; de France, submission to the W3C, 11 November 1998
+ <dd>(<code><a href="http://www.w3.org/TR/NOTE-STTS3">http://www.w3.org/TR/NOTE-STTS3</a></code>)
+
+ <dt>[SVG]
+ <dd><a name="refsSVG"></a> Jon Ferraiolo, &#34276;&#27810; &#28147;, Dean Jackson, editors; "<cite>Scalable Vector Graphics (SVG) 1.1 Specification</cite>", W3C Recommendation, 14 January 2003
+ <dd>(<code><a href="http://www.w3.org/TR/SVG/">http://www.w3.org/TR/SVG/</a></code>)
+
+ <dt>[UNICODE]</dt>
+ <dd><a name="refsUNICODE"></a> <cite><a
+ href="http://www.unicode.org/versions/Unicode4.1.0/">The Unicode Standard, Version 4.1</a></cite>, The Unicode Consortium. Boston, MA, Addison-Wesley, March 2005. ISBN 0-321-18578-1, as amended by <a href="http://www.unicode.org/versions/Unicode4.0.1/">Unicode 4.0.1</a> and <a href="http://www.unicode.org/versions/Unicode4.1.0/">Unicode 4.1.0</a>.
+ <dd>(<code><a href="http://www.unicode.org/versions/">http://www.unicode.org/versions/</a></code>)</dd>
+
+ <dt>[XML10]
+ <dd><a name="refsXML10"></a> Tim Bray, Jean Paoli, C. M. Sperberg-McQueen, Eve Maler, Fran&ccedil;ois Yergeau, editors; "<cite>Extensible Markup Language (XML) 1.0 (Third Edition)</cite>", W3C Recommendation, 4 February 2004
+ <dd>(<a href="http://www.w3.org/TR/REC-xml/"><code>http://www.w3.org/TR/REC-xml/</code></a>)
+
+ <dt>[XMLNAMES]
+ <dd><a name="refsXMLNAMES"></a> Tim Bray, Dave Hollander, Andrew Layman, editors; "<cite>Namespaces in XML</cite>", W3C Recommendation, 14 January 1999
+ <dd>(<a href="http://www.w3.org/TR/REC-xml-names/"><code>http://www.w3.org/TR/REC-xml-names/</code></a>)
+
+ <dt>[YACC]
+ <dd><a name="refsYACC"></a> S. C. Johnson; "<cite>YACC &mdash; Yet another compiler compiler</cite>", Technical Report, Murray Hill, 1975
+
+</dl>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/cssquery-yui.html b/testing/talos/talos/tests/dromaeo/tests/cssquery-yui.html
new file mode 100644
index 0000000000..ca86369e9e
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/cssquery-yui.html
@@ -0,0 +1,3065 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script src="../lib/yahoo.js"></script>
+<script src="../lib/yui-dom.js"></script>
+<script src="../lib/yui-selector.js"></script>
+<script>
+window.onload = function(){
+startTest("cssquery-yui", '8665056e');
+
+// Try to force real results
+var ret, tmp;
+
+var html = document.body.innerHTML;
+var query = YAHOO.util.Selector.query;
+
+ prep(function(){
+ var div = document.createElement("div");
+ div.innerHTML = html;
+ document.body.appendChild( div );
+ });
+
+ test("YUI - *", function(){
+ query("*");
+ });
+
+ test("YUI - div:only-child", function(){
+ query("div:only-child");
+ });
+
+ test("YUI - div:first-child", function(){
+ query("div:first-child");
+ });
+
+ test("YUI - div:nth-child(even)", function(){
+ query("div:nth-child(even)");
+ });
+
+ test("YUI - div:nth-child(2n)", function(){
+ query("div:nth-child(2n)");
+ });
+
+ test("YUI - div:nth-child(odd)", function(){
+ query("div:nth-child(odd)");
+ });
+
+ test("YUI - div:nth-child(2n+1)", function(){
+ query("div:nth-child(2n+1)");
+ });
+
+ test("YUI - div:nth-child(n)", function(){
+ query("div:nth-child(n)");
+ });
+
+ test("YUI - div:last-child", function(){
+ query("div:last-child");
+ });
+
+ test("YUI - div > div", function(){
+ query("div > div");
+ });
+
+ test("YUI - div + div", function(){
+ query("div + div");
+ });
+
+ test("YUI - div ~ div", function(){
+ query("div ~ div");
+ });
+
+ test("YUI - body", function(){
+ query("body");
+ });
+
+ test("YUI - body div", function(){
+ query("body div");
+ });
+
+ test("YUI - div", function(){
+ query("div");
+ });
+
+ test("YUI - div div", function(){
+ query("div div");
+ });
+
+ test("YUI - div div div", function(){
+ query("div div div");
+ });
+
+ test("YUI - div, div, div", function(){
+ query("div, div, div");
+ });
+
+ test("YUI - div, a, span", function(){
+ query("div, a, span");
+ });
+
+ test("YUI - .dialog", function(){
+ query(".dialog");
+ });
+
+ test("YUI - div.dialog", function(){
+ query("div.dialog");
+ });
+
+ test("YUI - div .dialog", function(){
+ query("div .dialog");
+ });
+
+ test("YUI - div.character, div.dialog", function(){
+ query("div.character, div.dialog");
+ });
+
+ test("YUI - #speech5", function(){
+ query("#speech5");
+ });
+
+ test("YUI - div#speech5", function(){
+ query("div#speech5");
+ });
+
+ test("YUI - div #speech5", function(){
+ query("div #speech5");
+ });
+
+ test("YUI - div.scene div.dialog", function(){
+ query("div.scene div.dialog");
+ });
+
+ test("YUI - div#scene1 div.dialog div", function(){
+ query("div#scene1 div.dialog div");
+ });
+
+ test("YUI - #scene1 #speech1", function(){
+ query("#scene1 #speech1");
+ });
+
+ test("YUI - div[class]", function(){
+ query("div[class]");
+ });
+
+ test("YUI - div[class=dialog]", function(){
+ query("div[class=dialog]");
+ });
+
+ test("YUI - div[class^=dia]", function(){
+ query("div[class^=dia]");
+ });
+
+ test("YUI - div[class$=log]", function(){
+ query("div[class$=log]");
+ });
+
+ test("YUI - div[class*=sce]", function(){
+ query("div[class*=sce]");
+ });
+
+ test("YUI - div[class|=dialog]", function(){
+ query("div[class|=dialog]");
+ });
+
+ test("YUI - div[class~=dialog]", function(){
+ query("div[class~=dialog]");
+ });
+
+endTest();
+};
+</script>
+</head>
+<body>
+ <div class="head">
+ <p><a href="http://www.w3.org/"><img height=48 alt=W3C src="w3c_home.png" width=72></a>
+
+ <h1 id="title">Selectors</h1>
+
+ <h2>W3C Working Draft 15 December 2005</h2>
+
+ <dl>
+
+ <dt>This version:
+
+ <dd><a href="http://www.w3.org/TR/2005/WD-css3-selectors-20051215">
+ http://www.w3.org/TR/2005/WD-css3-selectors-20051215</a>
+
+ <dt>Latest version:
+
+ <dd><a href="http://www.w3.org/TR/css3-selectors">
+ http://www.w3.org/TR/css3-selectors</a>
+
+ <dt>Previous version:
+
+ <dd><a href="http://www.w3.org/TR/2001/CR-css3-selectors-20011113">
+ http://www.w3.org/TR/2001/CR-css3-selectors-20011113</a>
+
+ <dt><a name=editors-list></a>Editors:
+
+ <dd class="vcard"><span class="fn">Daniel Glazman</span> (Invited Expert)</dd>
+
+ <dd class="vcard"><a lang="tr" class="url fn" href="http://www.tantek.com/">Tantek &Ccedil;elik</a> (Invited Expert)
+
+ <dd class="vcard"><a href="mailto:ian@hixie.ch" class="url fn">Ian Hickson</a> (<span
+ class="company"><a href="http://www.google.com/">Google</a></span>)
+
+ <dd class="vcard"><span class="fn">Peter Linss</span> (former editor, <span class="company"><a
+ href="http://www.netscape.com/">Netscape/AOL</a></span>)
+
+ <dd class="vcard"><span class="fn">John Williams</span> (former editor, <span class="company"><a
+ href="http://www.quark.com/">Quark, Inc.</a></span>)
+
+ </dl>
+
+ <p class="copyright"><a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright">
+ Copyright</a> &copy; 2005 <a href="http://www.w3.org/"><abbr
+ title="World Wide Web Consortium">W3C</abbr></a><sup>&reg;</sup>
+ (<a href="http://www.csail.mit.edu/"><abbr title="Massachusetts
+ Institute of Technology">MIT</abbr></a>, <a
+ href="http://www.ercim.org/"><acronym title="European Research
+ Consortium for Informatics and Mathematics">ERCIM</acronym></a>, <a
+ href="http://www.keio.ac.jp/">Keio</a>), All Rights Reserved. W3C
+ <a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">liability</a>,
+ <a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">trademark</a>,
+ <a
+ href="http://www.w3.org/Consortium/Legal/copyright-documents">document
+ use</a> rules apply.
+
+ <hr title="Separator for header">
+
+ </div>
+
+ <h2><a name=abstract></a>Abstract</h2>
+
+ <p><em>Selectors</em> are patterns that match against elements in a
+ tree. Selectors have been optimized for use with HTML and XML, and
+ are designed to be usable in performance-critical code.</p>
+
+ <p><acronym title="Cascading Style Sheets">CSS</acronym> (Cascading
+ Style Sheets) is a language for describing the rendering of <acronym
+ title="Hypertext Markup Language">HTML</acronym> and <acronym
+ title="Extensible Markup Language">XML</acronym> documents on
+ screen, on paper, in speech, etc. CSS uses Selectors for binding
+ style properties to elements in the document. This document
+ describes extensions to the selectors defined in CSS level 2. These
+ extended selectors will be used by CSS level 3.
+
+ <p>Selectors define the following function:</p>
+
+ <pre>expression &#x2217; element &rarr; boolean</pre>
+
+ <p>That is, given an element and a selector, this specification
+ defines whether that element matches the selector.</p>
+
+ <p>These expressions can also be used, for instance, to select a set
+ of elements, or a single element from a set of elements, by
+ evaluating the expression across all the elements in a
+ subtree. <acronym title="Simple Tree Transformation
+ Sheets">STTS</acronym> (Simple Tree Transformation Sheets), a
+ language for transforming XML trees, uses this mechanism. <a href="#refsSTTS">[STTS]</a></p>
+
+ <h2><a name=status></a>Status of this document</h2>
+
+ <p><em>This section describes the status of this document at the
+ time of its publication. Other documents may supersede this
+ document. A list of current W3C publications and the latest revision
+ of this technical report can be found in the <a
+ href="http://www.w3.org/TR/">W3C technical reports index at
+ http://www.w3.org/TR/.</a></em></p>
+
+ <p>This document describes the selectors that already exist in <a
+ href="#refsCSS1"><abbr title="CSS level 1">CSS1</abbr></a> and <a
+ href="#refsCSS21"><abbr title="CSS level 2">CSS2</abbr></a>, and
+ also proposes new selectors for <abbr title="CSS level
+ 3">CSS3</abbr> and other languages that may need them.</p>
+
+ <p>The CSS Working Group doesn't expect that all implementations of
+ CSS3 will have to implement all selectors. Instead, there will
+ probably be a small number of variants of CSS3, called profiles. For
+ example, it may be that only a profile for interactive user agents
+ will include all of the selectors.</p>
+
+ <p>This specification is a last call working draft for the the <a
+ href="http://www.w3.org/Style/CSS/members">CSS Working Group</a>
+ (<a href="/Style/">Style Activity</a>). This
+ document is a revision of the <a
+ href="http://www.w3.org/TR/2001/CR-css3-selectors-20011113/">Candidate
+ Recommendation dated 2001 November 13</a>, and has incorporated
+ implementation feedback received in the past few years. It is
+ expected that this last call will proceed straight to Proposed
+ Recommendation stage since it is believed that interoperability will
+ be demonstrable.</p>
+
+ <p>All persons are encouraged to review and implement this
+ specification and return comments to the (<a
+ href="http://lists.w3.org/Archives/Public/www-style/">archived</a>)
+ public mailing list <a
+ href="http://www.w3.org/Mail/Lists.html#www-style">www-style</a>
+ (see <a href="http://www.w3.org/Mail/Request">instructions</a>). W3C
+ Members can also send comments directly to the CSS Working
+ Group.
+ The deadline for comments is 14 January 2006.</p>
+
+ <p>This is still a draft document and may be updated, replaced, or
+ obsoleted by other documents at any time. It is inappropriate to
+ cite a W3C Working Draft as other than &quot;work in progress&quot;.
+
+ <p>This document may be available in <a
+ href="http://www.w3.org/Style/css3-selectors-updates/translations">translation</a>.
+ The English version of this specification is the only normative
+ version.
+
+ <div class="subtoc">
+
+ <h2 id="test10"><a name=contents>Table of contents</a></h2>
+
+ <ul class="toc">
+ <li class="tocline2"><a href="#context">1. Introduction</a>
+ <ul>
+ <li><a href="#dependencies">1.1. Dependencies</a> </li>
+ <li><a href="#terminology">1.2. Terminology</a> </li>
+ <li><a href="#changesFromCSS2">1.3. Changes from CSS2</a> </li>
+ </ul>
+ <li class="tocline2"><a href="#selectors">2. Selectors</a>
+ <li class="tocline2"><a href="#casesens">3. Case sensitivity</a>
+ <li class="tocline2"><a href="#selector-syntax">4. Selector syntax</a>
+ <li class="tocline2"><a href="#grouping">5. Groups of selectors</a>
+ <li class="tocline2"><a href="#simple-selectors">6. Simple selectors</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#type-selectors">6.1. Type selectors</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#typenmsp">6.1.1. Type selectors and namespaces</a></li>
+ </ul>
+ <li class="tocline3"><a href="#universal-selector">6.2. Universal selector</a>
+ <ul>
+ <li><a href="#univnmsp">6.2.1. Universal selector and namespaces</a></li>
+ </ul>
+ <li class="tocline3"><a href="#attribute-selectors">6.3. Attribute selectors</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#attribute-representation">6.3.1. Representation of attributes and attributes values</a>
+ <li><a href="#attribute-substrings">6.3.2. Substring matching attribute selectors</a>
+ <li class="tocline4"><a href="#attrnmsp">6.3.3. Attribute selectors and namespaces</a>
+ <li class="tocline4"><a href="#def-values">6.3.4. Default attribute values in DTDs</a></li>
+ </ul>
+ <li class="tocline3"><a href="#class-html">6.4. Class selectors</a>
+ <li class="tocline3"><a href="#id-selectors">6.5. ID selectors</a>
+ <li class="tocline3"><a href="#pseudo-classes">6.6. Pseudo-classes</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#dynamic-pseudos">6.6.1. Dynamic pseudo-classes</a>
+ <li class="tocline4"><a href="#target-pseudo">6.6.2. The :target pseudo-class</a>
+ <li class="tocline4"><a href="#lang-pseudo">6.6.3. The :lang() pseudo-class</a>
+ <li class="tocline4"><a href="#UIstates">6.6.4. UI element states pseudo-classes</a>
+ <li class="tocline4"><a href="#structural-pseudos">6.6.5. Structural pseudo-classes</a>
+ <ul>
+ <li><a href="#root-pseudo">:root pseudo-class</a>
+ <li><a href="#nth-child-pseudo">:nth-child() pseudo-class</a>
+ <li><a href="#nth-last-child-pseudo">:nth-last-child()</a>
+ <li><a href="#nth-of-type-pseudo">:nth-of-type() pseudo-class</a>
+ <li><a href="#nth-last-of-type-pseudo">:nth-last-of-type()</a>
+ <li><a href="#first-child-pseudo">:first-child pseudo-class</a>
+ <li><a href="#last-child-pseudo">:last-child pseudo-class</a>
+ <li><a href="#first-of-type-pseudo">:first-of-type pseudo-class</a>
+ <li><a href="#last-of-type-pseudo">:last-of-type pseudo-class</a>
+ <li><a href="#only-child-pseudo">:only-child pseudo-class</a>
+ <li><a href="#only-of-type-pseudo">:only-of-type pseudo-class</a>
+ <li><a href="#empty-pseudo">:empty pseudo-class</a></li>
+ </ul>
+ <li class="tocline4"><a href="#negation">6.6.7. The negation pseudo-class</a></li>
+ </ul>
+ </li>
+ </ul>
+ <li><a href="#pseudo-elements">7. Pseudo-elements</a>
+ <ul>
+ <li><a href="#first-line">7.1. The ::first-line pseudo-element</a>
+ <li><a href="#first-letter">7.2. The ::first-letter pseudo-element</a>
+ <li><a href="#UIfragments">7.3. The ::selection pseudo-element</a>
+ <li><a href="#gen-content">7.4. The ::before and ::after pseudo-elements</a></li>
+ </ul>
+ <li class="tocline2"><a href="#combinators">8. Combinators</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#descendant-combinators">8.1. Descendant combinators</a>
+ <li class="tocline3"><a href="#child-combinators">8.2. Child combinators</a>
+ <li class="tocline3"><a href="#sibling-combinators">8.3. Sibling combinators</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#adjacent-sibling-combinators">8.3.1. Adjacent sibling combinator</a>
+ <li class="tocline4"><a href="#general-sibling-combinators">8.3.2. General sibling combinator</a></li>
+ </ul>
+ </li>
+ </ul>
+ <li class="tocline2"><a href="#specificity">9. Calculating a selector's specificity</a>
+ <li class="tocline2"><a href="#w3cselgrammar">10. The grammar of Selectors</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#grammar">10.1. Grammar</a>
+ <li class="tocline3"><a href="#lex">10.2. Lexical scanner</a></li>
+ </ul>
+ <li class="tocline2"><a href="#downlevel">11. Namespaces and down-level clients</a>
+ <li class="tocline2"><a href="#profiling">12. Profiles</a>
+ <li><a href="#Conformance">13. Conformance and requirements</a>
+ <li><a href="#Tests">14. Tests</a>
+ <li><a href="#ACKS">15. Acknowledgements</a>
+ <li class="tocline2"><a href="#references">16. References</a>
+ </ul>
+
+ </div>
+
+ <h2><a name=context>1. Introduction</a></h2>
+
+ <h3><a name=dependencies></a>1.1. Dependencies</h3>
+
+ <p>Some features of this specification are specific to CSS, or have
+ particular limitations or rules specific to CSS. In this
+ specification, these have been described in terms of CSS2.1. <a
+ href="#refsCSS21">[CSS21]</a></p>
+
+ <h3><a name=terminology></a>1.2. Terminology</h3>
+
+ <p>All of the text of this specification is normative except
+ examples, notes, and sections explicitly marked as
+ non-normative.</p>
+
+ <h3><a name=changesFromCSS2></a>1.3. Changes from CSS2</h3>
+
+ <p><em>This section is non-normative.</em></p>
+
+ <p>The main differences between the selectors in CSS2 and those in
+ Selectors are:
+
+ <ul>
+
+ <li>the list of basic definitions (selector, group of selectors,
+ simple selector, etc.) has been changed; in particular, what was
+ referred to in CSS2 as a simple selector is now called a sequence
+ of simple selectors, and the term "simple selector" is now used for
+ the components of this sequence</li>
+
+ <li>an optional namespace component is now allowed in type element
+ selectors, the universal selector and attribute selectors</li>
+
+ <li>a <a href="#general-sibling-combinators">new combinator</a> has been introduced</li>
+
+ <li>new simple selectors including substring matching attribute
+ selectors, and new pseudo-classes</li>
+
+ <li>new pseudo-elements, and introduction of the "::" convention
+ for pseudo-elements</li>
+
+ <li>the grammar has been rewritten</li>
+
+ <li>profiles to be added to specifications integrating Selectors
+ and defining the set of selectors which is actually supported by
+ each specification</li>
+
+ <li>Selectors are now a CSS3 Module and an independent
+ specification; other specifications can now refer to this document
+ independently of CSS</li>
+
+ <li>the specification now has its own test suite</li>
+
+ </ul>
+
+<h2><a name=selectors></a>2. Selectors</h2>
+
+<p><em>This section is non-normative, as it merely summarizes the
+following sections.</em></p>
+
+<p>A Selector represents a structure. This structure can be used as a
+condition (e.g. in a CSS rule) that determines which elements a
+selector matches in the document tree, or as a flat description of the
+HTML or XML fragment corresponding to that structure.</p>
+
+<p>Selectors may range from simple element names to rich contextual
+representations.</p>
+
+<p>The following table summarizes the Selector syntax:</p>
+
+<table class="selectorsReview">
+ <thead>
+ <tr>
+ <th class="pattern">Pattern</th>
+ <th class="meaning">Meaning</th>
+ <th class="described">Described in section</th>
+ <th class="origin">First defined in CSS level</th></tr>
+ <tbody>
+ <tr>
+ <td class="pattern">*</td>
+ <td class="meaning">any element</td>
+ <td class="described"><a
+ href="#universal-selector">Universal
+ selector</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E</td>
+ <td class="meaning">an element of type E</td>
+ <td class="described"><a
+ href="#type-selectors">Type selector</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E[foo]</td>
+ <td class="meaning">an E element with a "foo" attribute</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value is exactly
+ equal to "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo~="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value is a list of
+ space-separated values, one of which is exactly equal to "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo^="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value begins exactly
+ with the string "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[foo$="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value ends exactly
+ with the string "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[foo*="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value contains the
+ substring "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[hreflang|="en"]</td>
+ <td class="meaning">an E element whose "hreflang" attribute has a hyphen-separated
+ list of values beginning (from the left) with "en"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:root</td>
+ <td class="meaning">an E element, root of the document</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-child(n)</td>
+ <td class="meaning">an E element, the n-th child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-last-child(n)</td>
+ <td class="meaning">an E element, the n-th child of its parent, counting
+ from the last one</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-of-type(n)</td>
+ <td class="meaning">an E element, the n-th sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-last-of-type(n)</td>
+ <td class="meaning">an E element, the n-th sibling of its type, counting
+ from the last one</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:first-child</td>
+ <td class="meaning">an E element, first child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:last-child</td>
+ <td class="meaning">an E element, last child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:first-of-type</td>
+ <td class="meaning">an E element, first sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:last-of-type</td>
+ <td class="meaning">an E element, last sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:only-child</td>
+ <td class="meaning">an E element, only child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:only-of-type</td>
+ <td class="meaning">an E element, only sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:empty</td>
+ <td class="meaning">an E element that has no children (including text
+ nodes)</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:link<br>E:visited</td>
+ <td class="meaning">an E element being the source anchor of a hyperlink of
+ which the target is not yet visited (:link) or already visited
+ (:visited)</td>
+ <td class="described"><a
+ href="#link">The link
+ pseudo-classes</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E:active<br>E:hover<br>E:focus</td>
+ <td class="meaning">an E element during certain user actions</td>
+ <td class="described"><a
+ href="#useraction-pseudos">The user
+ action pseudo-classes</a></td>
+ <td class="origin">1 and 2</td></tr>
+ <tr>
+ <td class="pattern">E:target</td>
+ <td class="meaning">an E element being the target of the referring URI</td>
+ <td class="described"><a
+ href="#target-pseudo">The target
+ pseudo-class</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:lang(fr)</td>
+ <td class="meaning">an element of type E in language "fr" (the document
+ language specifies how language is determined)</td>
+ <td class="described"><a
+ href="#lang-pseudo">The :lang()
+ pseudo-class</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:enabled<br>E:disabled</td>
+ <td class="meaning">a user interface element E which is enabled or
+ disabled</td>
+ <td class="described"><a
+ href="#UIstates">The UI element states
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:checked<!--<br>E:indeterminate--></td>
+ <td class="meaning">a user interface element E which is checked<!-- or in an
+ indeterminate state--> (for instance a radio-button or checkbox)</td>
+ <td class="described"><a
+ href="#UIstates">The UI element states
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E::first-line</td>
+ <td class="meaning">the first formatted line of an E element</td>
+ <td class="described"><a
+ href="#first-line">The ::first-line
+ pseudo-element</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E::first-letter</td>
+ <td class="meaning">the first formatted letter of an E element</td>
+ <td class="described"><a
+ href="#first-letter">The ::first-letter
+ pseudo-element</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E::selection</td>
+ <td class="meaning">the portion of an E element that is currently
+ selected/highlighted by the user</td>
+ <td class="described"><a
+ href="#UIfragments">The UI element
+ fragments pseudo-elements</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E::before</td>
+ <td class="meaning">generated content before an E element</td>
+ <td class="described"><a
+ href="#gen-content">The ::before
+ pseudo-element</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E::after</td>
+ <td class="meaning">generated content after an E element</td>
+ <td class="described"><a
+ href="#gen-content">The ::after
+ pseudo-element</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E.warning</td>
+ <td class="meaning">an E element whose class is
+"warning" (the document language specifies how class is determined).</td>
+ <td class="described"><a
+ href="#class-html">Class
+ selectors</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E#myid</td>
+ <td class="meaning">an E element with ID equal to "myid".</td>
+ <td class="described"><a
+ href="#id-selectors">ID
+ selectors</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E:not(s)</td>
+ <td class="meaning">an E element that does not match simple selector s</td>
+ <td class="described"><a
+ href="#negation">Negation
+ pseudo-class</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E F</td>
+ <td class="meaning">an F element descendant of an E element</td>
+ <td class="described"><a
+ href="#descendant-combinators">Descendant
+ combinator</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E &gt; F</td>
+ <td class="meaning">an F element child of an E element</td>
+ <td class="described"><a
+ href="#child-combinators">Child
+ combinator</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E + F</td>
+ <td class="meaning">an F element immediately preceded by an E element</td>
+ <td class="described"><a
+ href="#adjacent-sibling-combinators">Adjacent sibling combinator</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E ~ F</td>
+ <td class="meaning">an F element preceded by an E element</td>
+ <td class="described"><a
+ href="#general-sibling-combinators">General sibling combinator</a></td>
+ <td class="origin">3</td></tr></tbody></table>
+
+<p>The meaning of each selector is derived from the table above by
+prepending "matches" to the contents of each cell in the "Meaning"
+column.</p>
+
+<h2><a name=casesens>3. Case sensitivity</a></h2>
+
+<p>The case sensitivity of document language element names, attribute
+names, and attribute values in selectors depends on the document
+language. For example, in HTML, element names are case-insensitive,
+but in XML, they are case-sensitive.</p>
+
+<h2><a name=selector-syntax>4. Selector syntax</a></h2>
+
+<p>A <dfn><a name=selector>selector</a></dfn> is a chain of one
+or more <a href="#sequence">sequences of simple selectors</a>
+separated by <a href="#combinators">combinators</a>.</p>
+
+<p>A <dfn><a name=sequence>sequence of simple selectors</a></dfn>
+is a chain of <a href="#simple-selectors-dfn">simple selectors</a>
+that are not separated by a <a href="#combinators">combinator</a>. It
+always begins with a <a href="#type-selectors">type selector</a> or a
+<a href="#universal-selector">universal selector</a>. No other type
+selector or universal selector is allowed in the sequence.</p>
+
+<p>A <dfn><a name=simple-selectors-dfn></a><a
+href="#simple-selectors">simple selector</a></dfn> is either a <a
+href="#type-selectors">type selector</a>, <a
+href="#universal-selector">universal selector</a>, <a
+href="#attribute-selectors">attribute selector</a>, <a
+href="#class-html">class selector</a>, <a
+href="#id-selectors">ID selector</a>, <a
+href="#content-selectors">content selector</a>, or <a
+href="#pseudo-classes">pseudo-class</a>. One <a
+href="#pseudo-elements">pseudo-element</a> may be appended to the last
+sequence of simple selectors.</p>
+
+<p><dfn>Combinators</dfn> are: white space, &quot;greater-than
+sign&quot; (U+003E, <code>&gt;</code>), &quot;plus sign&quot; (U+002B,
+<code>+</code>) and &quot;tilde&quot; (U+007E, <code>~</code>). White
+space may appear between a combinator and the simple selectors around
+it. <a name=whitespace></a>Only the characters "space" (U+0020), "tab"
+(U+0009), "line feed" (U+000A), "carriage return" (U+000D), and "form
+feed" (U+000C) can occur in white space. Other space-like characters,
+such as "em-space" (U+2003) and "ideographic space" (U+3000), are
+never part of white space.</p>
+
+<p>The elements of a document tree that are represented by a selector
+are the <dfn><a name=subject></a>subjects of the selector</dfn>. A
+selector consisting of a single sequence of simple selectors
+represents any element satisfying its requirements. Prepending another
+sequence of simple selectors and a combinator to a sequence imposes
+additional matching constraints, so the subjects of a selector are
+always a subset of the elements represented by the last sequence of
+simple selectors.</p>
+
+<p>An empty selector, containing no sequence of simple selectors and
+no pseudo-element, is an <a href="#Conformance">invalid
+selector</a>.</p>
+
+<h2><a name=grouping>5. Groups of selectors</a></h2>
+
+<p>When several selectors share the same declarations, they may be
+grouped into a comma-separated list. (A comma is U+002C.)</p>
+
+<div class="example">
+<p>CSS examples:</p>
+<p>In this example, we condense three rules with identical
+declarations into one. Thus,</p>
+<pre>h1 { font-family: sans-serif }
+h2 { font-family: sans-serif }
+h3 { font-family: sans-serif }</pre>
+<p>is equivalent to:</p>
+<pre>h1, h2, h3 { font-family: sans-serif }</pre>
+</div>
+
+<p><strong>Warning</strong>: the equivalence is true in this example
+because all the selectors are valid selectors. If just one of these
+selectors were invalid, the entire group of selectors would be
+invalid. This would invalidate the rule for all three heading
+elements, whereas in the former case only one of the three individual
+heading rules would be invalidated.</p>
+
+
+<h2><a name=simple-selectors>6. Simple selectors</a></h2>
+
+<h3><a name=type-selectors>6.1. Type selector</a></h3>
+
+<p>A <dfn>type selector</dfn> is the name of a document language
+element type. A type selector represents an instance of the element
+type in the document tree.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents an <code>h1</code> element in the document tree:</p>
+ <pre>h1</pre>
+</div>
+
+
+<h4><a name=typenmsp>6.1.1. Type selectors and namespaces</a></h4>
+
+<p>Type selectors allow an optional namespace (<a
+href="#refsXMLNAMES">[XMLNAMES]</a>) component. A namespace prefix
+that has been previously declared may be prepended to the element name
+separated by the namespace separator &quot;vertical bar&quot;
+(U+007C, <code>|</code>).</p>
+
+<p>The namespace component may be left empty to indicate that the
+selector is only to represent elements with no declared namespace.</p>
+
+<p>An asterisk may be used for the namespace prefix, indicating that
+the selector represents elements in any namespace (including elements
+with no namespace).</p>
+
+<p>Element type selectors that have no namespace component (no
+namespace separator), represent elements without regard to the
+element's namespace (equivalent to "<code>*|</code>") unless a default
+namespace has been declared. If a default namespace has been declared,
+the selector will represent only elements in the default
+namespace.</p>
+
+<p>A type selector containing a namespace prefix that has not been
+previously declared is an <a href="#Conformance">invalid</a> selector.
+The mechanism for declaring a namespace prefix is left up to the
+language implementing Selectors. In CSS, such a mechanism is defined
+in the General Syntax module.</p>
+
+<p>In a namespace-aware client, element type selectors will only match
+against the <a
+href="http://www.w3.org/TR/REC-xml-names/#NT-LocalPart">local part</a>
+of the element's <a
+href="http://www.w3.org/TR/REC-xml-names/#ns-qualnames">qualified
+name</a>. See <a href="#downlevel">below</a> for notes about matching
+behaviors in down-level clients.</p>
+
+<p>In summary:</p>
+
+<dl>
+ <dt><code>ns|E</code></dt>
+ <dd>elements with name E in namespace ns</dd>
+ <dt><code>*|E</code></dt>
+ <dd>elements with name E in any namespace, including those without any
+ declared namespace</dd>
+ <dt><code>|E</code></dt>
+ <dd>elements with name E without any declared namespace</dd>
+ <dt><code>E</code></dt>
+ <dd>if no default namespace has been specified, this is equivalent to *|E.
+ Otherwise it is equivalent to ns|E where ns is the default namespace.</dd>
+</dl>
+
+<div class="example">
+ <p>CSS examples:</p>
+
+ <pre>@namespace foo url(http://www.example.com);
+ foo|h1 { color: blue }
+ foo|* { color: yellow }
+ |h1 { color: red }
+ *|h1 { color: green }
+ h1 { color: green }</pre>
+
+ <p>The first rule will match only <code>h1</code> elements in the
+ "http://www.example.com" namespace.</p>
+
+ <p>The second rule will match all elements in the
+ "http://www.example.com" namespace.</p>
+
+ <p>The third rule will match only <code>h1</code> elements without
+ any declared namespace.</p>
+
+ <p>The fourth rule will match <code>h1</code> elements in any
+ namespace (including those without any declared namespace).</p>
+
+ <p>The last rule is equivalent to the fourth rule because no default
+ namespace has been defined.</p>
+
+</div>
+
+<h3><a name=universal-selector>6.2. Universal selector</a> </h3>
+
+<p>The <dfn>universal selector</dfn>, written &quot;asterisk&quot;
+(<code>*</code>), represents the qualified name of any element
+type. It represents any single element in the document tree in any
+namespace (including those without any declared namespace) if no
+default namespace has been specified. If a default namespace has been
+specified, see <a href="#univnmsp">Universal selector and
+Namespaces</a> below.</p>
+
+<p>If the universal selector is not the only component of a sequence
+of simple selectors, the <code>*</code> may be omitted.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <ul>
+ <li><code>*[hreflang|=en]</code> and <code>[hreflang|=en]</code> are equivalent,</li>
+ <li><code>*.warning</code> and <code>.warning</code> are equivalent,</li>
+ <li><code>*#myid</code> and <code>#myid</code> are equivalent.</li>
+ </ul>
+</div>
+
+<p class="note"><strong>Note:</strong> it is recommended that the
+<code>*</code>, representing the universal selector, not be
+omitted.</p>
+
+<h4><a name=univnmsp>6.2.1. Universal selector and namespaces</a></h4>
+
+<p>The universal selector allows an optional namespace component. It
+is used as follows:</p>
+
+<dl>
+ <dt><code>ns|*</code></dt>
+ <dd>all elements in namespace ns</dd>
+ <dt><code>*|*</code></dt>
+ <dd>all elements</dd>
+ <dt><code>|*</code></dt>
+ <dd>all elements without any declared namespace</dd>
+ <dt><code>*</code></dt>
+ <dd>if no default namespace has been specified, this is equivalent to *|*.
+ Otherwise it is equivalent to ns|* where ns is the default namespace.</dd>
+</dl>
+
+<p>A universal selector containing a namespace prefix that has not
+been previously declared is an <a href="#Conformance">invalid</a>
+selector. The mechanism for declaring a namespace prefix is left up
+to the language implementing Selectors. In CSS, such a mechanism is
+defined in the General Syntax module.</p>
+
+
+<h3><a name=attribute-selectors>6.3. Attribute selectors</a></h3>
+
+<p>Selectors allow the representation of an element's attributes. When
+a selector is used as an expression to match against an element,
+attribute selectors must be considered to match an element if that
+element has an attribute that matches the attribute represented by the
+attribute selector.</p>
+
+<h4><a name=attribute-representation>6.3.1. Attribute presence and values
+selectors</a></h4>
+
+<p>CSS2 introduced four attribute selectors:</p>
+
+<dl>
+ <dt><code>[att]</code>
+ <dd>Represents an element with the <code>att</code> attribute, whatever the value of
+ the attribute.</dd>
+ <dt><code>[att=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value is exactly
+ "val".</dd>
+ <dt><code>[att~=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value is a <a
+ href="#whitespace">whitespace</a>-separated list of words, one of
+ which is exactly "val". If "val" contains whitespace, it will never
+ represent anything (since the words are <em>separated</em> by
+ spaces).</dd>
+ <dt><code>[att|=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute, its value either
+ being exactly "val" or beginning with "val" immediately followed by
+ "-" (U+002D). This is primarily intended to allow language subcode
+ matches (e.g., the <code>hreflang</code> attribute on the
+ <code>link</code> element in HTML) as described in RFC 3066 (<a
+ href="#refsRFC3066">[RFC3066]</a>). For <code>lang</code> (or
+ <code>xml:lang</code>) language subcode matching, please see <a
+ href="#lang-pseudo">the <code>:lang</code> pseudo-class</a>.</dd>
+</dl>
+
+<p>Attribute values must be identifiers or strings. The
+case-sensitivity of attribute names and values in selectors depends on
+the document language.</p>
+
+<div class="example">
+
+ <p>Examples:</p>
+
+ <p>The following attribute selector represents an <code>h1</code>
+ element that carries the <code>title</code> attribute, whatever its
+ value:</p>
+
+ <pre>h1[title]</pre>
+
+ <p>In the following example, the selector represents a
+ <code>span</code> element whose <code>class</code> attribute has
+ exactly the value "example":</p>
+
+ <pre>span[class="example"]</pre>
+
+ <p>Multiple attribute selectors can be used to represent several
+ attributes of an element, or several conditions on the same
+ attribute. Here, the selector represents a <code>span</code> element
+ whose <code>hello</code> attribute has exactly the value "Cleveland"
+ and whose <code>goodbye</code> attribute has exactly the value
+ "Columbus":</p>
+
+ <pre>span[hello="Cleveland"][goodbye="Columbus"]</pre>
+
+ <p>The following selectors illustrate the differences between "="
+ and "~=". The first selector will represent, for example, the value
+ "copyright copyleft copyeditor" on a <code>rel</code> attribute. The
+ second selector will only represent an <code>a</code> element with
+ an <code>href</code> attribute having the exact value
+ "http://www.w3.org/".</p>
+
+ <pre>a[rel~="copyright"]
+a[href="http://www.w3.org/"]</pre>
+
+ <p>The following selector represents a <code>link</code> element
+ whose <code>hreflang</code> attribute is exactly "fr".</p>
+
+ <pre>link[hreflang=fr]</pre>
+
+ <p>The following selector represents a <code>link</code> element for
+ which the values of the <code>hreflang</code> attribute begins with
+ "en", including "en", "en-US", and "en-cockney":</p>
+
+ <pre>link[hreflang|="en"]</pre>
+
+ <p>Similarly, the following selectors represents a
+ <code>DIALOGUE</code> element whenever it has one of two different
+ values for an attribute <code>character</code>:</p>
+
+ <pre>DIALOGUE[character=romeo]
+DIALOGUE[character=juliet]</pre>
+
+</div>
+
+<h4><a name=attribute-substrings></a>6.3.2. Substring matching attribute
+selectors</h4>
+
+<p>Three additional attribute selectors are provided for matching
+substrings in the value of an attribute:</p>
+
+<dl>
+ <dt><code>[att^=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value begins
+ with the prefix "val".</dd>
+ <dt><code>[att$=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute whose value ends with
+ the suffix "val".</dd>
+ <dt><code>[att*=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute whose value contains
+ at least one instance of the substring "val".</dd>
+</dl>
+
+<p>Attribute values must be identifiers or strings. The
+case-sensitivity of attribute names in selectors depends on the
+document language.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents an HTML <code>object</code>, referencing an
+ image:</p>
+ <pre>object[type^="image/"]</pre>
+ <p>The following selector represents an HTML anchor <code>a</code> with an
+ <code>href</code> attribute whose value ends with ".html".</p>
+ <pre>a[href$=".html"]</pre>
+ <p>The following selector represents an HTML paragraph with a <code>title</code>
+ attribute whose value contains the substring "hello"</p>
+ <pre>p[title*="hello"]</pre>
+</div>
+
+<h4><a name=attrnmsp>6.3.3. Attribute selectors and namespaces</a></h4>
+
+<p>Attribute selectors allow an optional namespace component to the
+attribute name. A namespace prefix that has been previously declared
+may be prepended to the attribute name separated by the namespace
+separator &quot;vertical bar&quot; (<code>|</code>). In keeping with
+the Namespaces in the XML recommendation, default namespaces do not
+apply to attributes, therefore attribute selectors without a namespace
+component apply only to attributes that have no declared namespace
+(equivalent to "<code>|attr</code>"). An asterisk may be used for the
+namespace prefix indicating that the selector is to match all
+attribute names without regard to the attribute's namespace.
+
+<p>An attribute selector with an attribute name containing a namespace
+prefix that has not been previously declared is an <a
+href="#Conformance">invalid</a> selector. The mechanism for declaring
+a namespace prefix is left up to the language implementing Selectors.
+In CSS, such a mechanism is defined in the General Syntax module.
+
+<div class="example">
+ <p>CSS examples:</p>
+ <pre>@namespace foo "http://www.example.com";
+[foo|att=val] { color: blue }
+[*|att] { color: yellow }
+[|att] { color: green }
+[att] { color: green }</pre>
+
+ <p>The first rule will match only elements with the attribute
+ <code>att</code> in the "http://www.example.com" namespace with the
+ value "val".</p>
+
+ <p>The second rule will match only elements with the attribute
+ <code>att</code> regardless of the namespace of the attribute
+ (including no declared namespace).</p>
+
+ <p>The last two rules are equivalent and will match only elements
+ with the attribute <code>att</code> where the attribute is not
+ declared to be in a namespace.</p>
+
+</div>
+
+<h4><a name=def-values>6.3.4. Default attribute values in DTDs</a></h4>
+
+<p>Attribute selectors represent explicitly set attribute values in
+the document tree. Default attribute values may be defined in a DTD or
+elsewhere, but cannot always be selected by attribute
+selectors. Selectors should be designed so that they work even if the
+default values are not included in the document tree.</p>
+
+<p>More precisely, a UA is <em>not</em> required to read an "external
+subset" of the DTD but <em>is</em> required to look for default
+attribute values in the document's "internal subset." (See <a
+href="#refsXML10">[XML10]</a> for definitions of these subsets.)</p>
+
+<p>A UA that recognizes an XML namespace <a
+href="#refsXMLNAMES">[XMLNAMES]</a> is not required to use its
+knowledge of that namespace to treat default attribute values as if
+they were present in the document. (For example, an XHTML UA is not
+required to use its built-in knowledge of the XHTML DTD.)</p>
+
+<p class="note"><strong>Note:</strong> Typically, implementations
+choose to ignore external subsets.</p>
+
+<div class="example">
+<p>Example:</p>
+
+<p>Consider an element EXAMPLE with an attribute "notation" that has a
+default value of "decimal". The DTD fragment might be</p>
+
+<pre class="dtd-example">&lt;!ATTLIST EXAMPLE notation (decimal,octal) "decimal"></pre>
+
+<p>If the style sheet contains the rules</p>
+
+<pre>EXAMPLE[notation=decimal] { /*... default property settings ...*/ }
+EXAMPLE[notation=octal] { /*... other settings...*/ }</pre>
+
+<p>the first rule will not match elements whose "notation" attribute
+is set by default, i.e. not set explicitly. To catch all cases, the
+attribute selector for the default value must be dropped:</p>
+
+<pre>EXAMPLE { /*... default property settings ...*/ }
+EXAMPLE[notation=octal] { /*... other settings...*/ }</pre>
+
+<p>Here, because the selector <code>EXAMPLE[notation=octal]</code> is
+more specific than the tag
+selector alone, the style declarations in the second rule will override
+those in the first for elements that have a "notation" attribute value
+of "octal". Care has to be taken that all property declarations that
+are to apply only to the default case are overridden in the non-default
+cases' style rules.</p>
+
+</div>
+
+<h3><a name=class-html>6.4. Class selectors</a></h3>
+
+<p>Working with HTML, authors may use the period (U+002E,
+<code>.</code>) notation as an alternative to the <code>~=</code>
+notation when representing the <code>class</code> attribute. Thus, for
+HTML, <code>div.value</code> and <code>div[class~=value]</code> have
+the same meaning. The attribute value must immediately follow the
+&quot;period&quot; (<code>.</code>).</p>
+
+<p>UAs may apply selectors using the period (.) notation in XML
+documents if the UA has namespace-specific knowledge that allows it to
+determine which attribute is the &quot;class&quot; attribute for the
+respective namespace. One such example of namespace-specific knowledge
+is the prose in the specification for a particular namespace (e.g. SVG
+1.0 <a href="#refsSVG">[SVG]</a> describes the <a
+href="http://www.w3.org/TR/2001/PR-SVG-20010719/styling.html#ClassAttribute">SVG
+&quot;class&quot; attribute</a> and how a UA should interpret it, and
+similarly MathML 1.01 <a href="#refsMATH">[MATH]</a> describes the <a
+href="http://www.w3.org/1999/07/REC-MathML-19990707/chapter2.html#sec2.3.4">MathML
+&quot;class&quot; attribute</a>.)</p>
+
+<div class="example">
+ <p>CSS examples:</p>
+
+ <p>We can assign style information to all elements with
+ <code>class~="pastoral"</code> as follows:</p>
+
+ <pre>*.pastoral { color: green } /* all elements with class~=pastoral */</pre>
+
+ <p>or just</p>
+
+ <pre>.pastoral { color: green } /* all elements with class~=pastoral */</pre>
+
+ <p>The following assigns style only to H1 elements with
+ <code>class~="pastoral"</code>:</p>
+
+ <pre>H1.pastoral { color: green } /* H1 elements with class~=pastoral */</pre>
+
+ <p>Given these rules, the first H1 instance below would not have
+ green text, while the second would:</p>
+
+ <pre>&lt;H1&gt;Not green&lt;/H1&gt;
+&lt;H1 class="pastoral"&gt;Very green&lt;/H1&gt;</pre>
+
+</div>
+
+<p>To represent a subset of "class" values, each value must be preceded
+by a ".", in any order.</P>
+
+<div class="example">
+
+ <p>CSS example:</p>
+
+ <p>The following rule matches any P element whose "class" attribute
+ has been assigned a list of <a
+ href="#whitespace">whitespace</a>-separated values that includes
+ "pastoral" and "marine":</p>
+
+ <pre>p.pastoral.marine { color: green }</pre>
+
+ <p>This rule matches when <code>class="pastoral blue aqua
+ marine"</code> but does not match for <code>class="pastoral
+ blue"</code>.</p>
+
+</div>
+
+<p class="note"><strong>Note:</strong> Because CSS gives considerable
+power to the "class" attribute, authors could conceivably design their
+own "document language" based on elements with almost no associated
+presentation (such as DIV and SPAN in HTML) and assigning style
+information through the "class" attribute. Authors should avoid this
+practice since the structural elements of a document language often
+have recognized and accepted meanings and author-defined classes may
+not.</p>
+
+<p class="note"><strong>Note:</strong> If an element has multiple
+class attributes, their values must be concatenated with spaces
+between the values before searching for the class. As of this time the
+working group is not aware of any manner in which this situation can
+be reached, however, so this behavior is explicitly non-normative in
+this specification.</p>
+
+<h3><a name=id-selectors>6.5. ID selectors</a></h3>
+
+<p>Document languages may contain attributes that are declared to be
+of type ID. What makes attributes of type ID special is that no two
+such attributes can have the same value in a document, regardless of
+the type of the elements that carry them; whatever the document
+language, an ID typed attribute can be used to uniquely identify its
+element. In HTML all ID attributes are named "id"; XML applications
+may name ID attributes differently, but the same restriction
+applies.</p>
+
+<p>An ID-typed attribute of a document language allows authors to
+assign an identifier to one element instance in the document tree. W3C
+ID selectors represent an element instance based on its identifier. An
+ID selector contains a &quot;number sign&quot; (U+0023,
+<code>#</code>) immediately followed by the ID value, which must be an
+identifier.</p>
+
+<p>Selectors does not specify how a UA knows the ID-typed attribute of
+an element. The UA may, e.g., read a document's DTD, have the
+information hard-coded or ask the user.
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following ID selector represents an <code>h1</code> element
+ whose ID-typed attribute has the value "chapter1":</p>
+ <pre>h1#chapter1</pre>
+ <p>The following ID selector represents any element whose ID-typed
+ attribute has the value "chapter1":</p>
+ <pre>#chapter1</pre>
+ <p>The following selector represents any element whose ID-typed
+ attribute has the value "z98y".</p>
+ <pre>*#z98y</pre>
+</div>
+
+<p class="note"><strong>Note.</strong> In XML 1.0 <a
+href="#refsXML10">[XML10]</a>, the information about which attribute
+contains an element's IDs is contained in a DTD or a schema. When
+parsing XML, UAs do not always read the DTD, and thus may not know
+what the ID of an element is (though a UA may have namespace-specific
+knowledge that allows it to determine which attribute is the ID
+attribute for that namespace). If a style sheet designer knows or
+suspects that a UA may not know what the ID of an element is, he
+should use normal attribute selectors instead:
+<code>[name=p371]</code> instead of <code>#p371</code>. Elements in
+XML 1.0 documents without a DTD do not have IDs at all.</p>
+
+<p>If an element has multiple ID attributes, all of them must be
+treated as IDs for that element for the purposes of the ID
+selector. Such a situation could be reached using mixtures of xml:id,
+DOM3 Core, XML DTDs, and namespace-specific knowledge.</p>
+
+<h3><a name=pseudo-classes>6.6. Pseudo-classes</a></h3>
+
+<p>The pseudo-class concept is introduced to permit selection based on
+information that lies outside of the document tree or that cannot be
+expressed using the other simple selectors.</p>
+
+<p>A pseudo-class always consists of a &quot;colon&quot;
+(<code>:</code>) followed by the name of the pseudo-class and
+optionally by a value between parentheses.</p>
+
+<p>Pseudo-classes are allowed in all sequences of simple selectors
+contained in a selector. Pseudo-classes are allowed anywhere in
+sequences of simple selectors, after the leading type selector or
+universal selector (possibly omitted). Pseudo-class names are
+case-insensitive. Some pseudo-classes are mutually exclusive, while
+others can be applied simultaneously to the same
+element. Pseudo-classes may be dynamic, in the sense that an element
+may acquire or lose a pseudo-class while a user interacts with the
+document.</p>
+
+
+<h4><a name=dynamic-pseudos>6.6.1. Dynamic pseudo-classes</a></h4>
+
+<p>Dynamic pseudo-classes classify elements on characteristics other
+than their name, attributes, or content, in principle characteristics
+that cannot be deduced from the document tree.</p>
+
+<p>Dynamic pseudo-classes do not appear in the document source or
+document tree.</p>
+
+
+<h5>The <a name=link>link pseudo-classes: :link and :visited</a></h5>
+
+<p>User agents commonly display unvisited links differently from
+previously visited ones. Selectors
+provides the pseudo-classes <code>:link</code> and
+<code>:visited</code> to distinguish them:</p>
+
+<ul>
+ <li>The <code>:link</code> pseudo-class applies to links that have
+ not yet been visited.</li>
+ <li>The <code>:visited</code> pseudo-class applies once the link has
+ been visited by the user. </li>
+</ul>
+
+<p>After some amount of time, user agents may choose to return a
+visited link to the (unvisited) ':link' state.</p>
+
+<p>The two states are mutually exclusive.</p>
+
+<div class="example">
+
+ <p>Example:</p>
+
+ <p>The following selector represents links carrying class
+ <code>external</code> and already visited:</p>
+
+ <pre>a.external:visited</pre>
+
+</div>
+
+<p class="note"><strong>Note:</strong> It is possible for style sheet
+authors to abuse the :link and :visited pseudo-classes to determine
+which sites a user has visited without the user's consent.
+
+<p>UAs may therefore treat all links as unvisited links, or implement
+other measures to preserve the user's privacy while rendering visited
+and unvisited links differently.</p>
+
+<h5>The <a name=useraction-pseudos>user action pseudo-classes
+:hover, :active, and :focus</a></h5>
+
+<p>Interactive user agents sometimes change the rendering in response
+to user actions. Selectors provides
+three pseudo-classes for the selection of an element the user is
+acting on.</p>
+
+<ul>
+
+ <li>The <code>:hover</code> pseudo-class applies while the user
+ designates an element with a pointing device, but does not activate
+ it. For example, a visual user agent could apply this pseudo-class
+ when the cursor (mouse pointer) hovers over a box generated by the
+ element. User agents not that do not support <a
+ href="http://www.w3.org/TR/REC-CSS2/media.html#interactive-media-group">interactive
+ media</a> do not have to support this pseudo-class. Some conforming
+ user agents that support <a
+ href="http://www.w3.org/TR/REC-CSS2/media.html#interactive-media-group">interactive
+ media</a> may not be able to support this pseudo-class (e.g., a pen
+ device that does not detect hovering).</li>
+
+ <li>The <code>:active</code> pseudo-class applies while an element
+ is being activated by the user. For example, between the times the
+ user presses the mouse button and releases it.</li>
+
+ <li>The <code>:focus</code> pseudo-class applies while an element
+ has the focus (accepts keyboard or mouse events, or other forms of
+ input). </li>
+
+</ul>
+
+<p>There may be document language or implementation specific limits on
+which elements can become <code>:active</code> or acquire
+<code>:focus</code>.</p>
+
+<p>These pseudo-classes are not mutually exclusive. An element may
+match several pseudo-classes at the same time.</p>
+
+<p>Selectors doesn't define if the parent of an element that is
+':active' or ':hover' is also in that state.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <pre>a:link /* unvisited links */
+a:visited /* visited links */
+a:hover /* user hovers */
+a:active /* active links */</pre>
+ <p>An example of combining dynamic pseudo-classes:</p>
+ <pre>a:focus
+a:focus:hover</pre>
+ <p>The last selector matches <code>a</code> elements that are in
+ the pseudo-class :focus and in the pseudo-class :hover.</p>
+</div>
+
+<p class="note"><strong>Note:</strong> An element can be both ':visited'
+and ':active' (or ':link' and ':active').</p>
+
+<h4><a name=target-pseudo>6.6.2. The target pseudo-class :target</a></h4>
+
+<p>Some URIs refer to a location within a resource. This kind of URI
+ends with a &quot;number sign&quot; (#) followed by an anchor
+identifier (called the fragment identifier).</p>
+
+<p>URIs with fragment identifiers link to a certain element within the
+document, known as the target element. For instance, here is a URI
+pointing to an anchor named <code>section_2</code> in an HTML
+document:</p>
+
+<pre>http://example.com/html/top.html#section_2</pre>
+
+<p>A target element can be represented by the <code>:target</code>
+pseudo-class. If the document's URI has no fragment identifier, then
+the document has no target element.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <pre>p.note:target</pre>
+ <p>This selector represents a <code>p</code> element of class
+ <code>note</code> that is the target element of the referring
+ URI.</p>
+</div>
+
+<div class="example">
+ <p>CSS example:</p>
+ <p>Here, the <code>:target</code> pseudo-class is used to make the
+ target element red and place an image before it, if there is one:</p>
+ <pre>*:target { color : red }
+*:target::before { content : url(target.png) }</pre>
+</div>
+
+<h4><a name=lang-pseudo>6.6.3. The language pseudo-class :lang</a></h4>
+
+<p>If the document language specifies how the human language of an
+element is determined, it is possible to write selectors that
+represent an element based on its language. For example, in HTML <a
+href="#refsHTML4">[HTML4]</a>, the language is determined by a
+combination of the <code>lang</code> attribute, the <code>meta</code>
+element, and possibly by information from the protocol (such as HTTP
+headers). XML uses an attribute called <code>xml:lang</code>, and
+there may be other document language-specific methods for determining
+the language.</p>
+
+<p>The pseudo-class <code>:lang(C)</code> represents an element that
+is in language C. Whether an element is represented by a
+<code>:lang()</code> selector is based solely on the identifier C
+being either equal to, or a hyphen-separated substring of, the
+element's language value, in the same way as if performed by the <a
+href="#attribute-representation">'|='</a> operator in attribute
+selectors. The identifier C does not have to be a valid language
+name.</p>
+
+<p>C must not be empty. (If it is, the selector is invalid.)</p>
+
+<p class="note"><strong>Note:</strong> It is recommended that
+documents and protocols indicate language using codes from RFC 3066 <a
+href="#refsRFC3066">[RFC3066]</a> or its successor, and by means of
+"xml:lang" attributes in the case of XML-based documents <a
+href="#refsXML10">[XML10]</a>. See <a
+href="http://www.w3.org/International/questions/qa-lang-2or3.html">
+"FAQ: Two-letter or three-letter language codes."</a></p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The two following selectors represent an HTML document that is in
+ Belgian, French, or German. The two next selectors represent
+ <code>q</code> quotations in an arbitrary element in Belgian, French,
+ or German.</p>
+ <pre>html:lang(fr-be)
+html:lang(de)
+:lang(fr-be) &gt; q
+:lang(de) &gt; q</pre>
+</div>
+
+<h4><a name=UIstates>6.6.4. The UI element states pseudo-classes</a></h4>
+
+<h5><a name=enableddisabled>The :enabled and :disabled pseudo-classes</a></h5>
+
+<p>The <code>:enabled</code> pseudo-class allows authors to customize
+the look of user interface elements that are enabled &mdash; which the
+user can select or activate in some fashion (e.g. clicking on a button
+with a mouse). There is a need for such a pseudo-class because there
+is no way to programmatically specify the default appearance of say,
+an enabled <code>input</code> element without also specifying what it
+would look like when it was disabled.</p>
+
+<p>Similar to <code>:enabled</code>, <code>:disabled</code> allows the
+author to specify precisely how a disabled or inactive user interface
+element should look.</p>
+
+<p>Most elements will be neither enabled nor disabled. An element is
+enabled if the user can either activate it or transfer the focus to
+it. An element is disabled if it could be enabled, but the user cannot
+presently activate it or transfer focus to it.</p>
+
+
+<h5><a name=checked>The :checked pseudo-class</a></h5>
+
+<p>Radio and checkbox elements can be toggled by the user. Some menu
+items are "checked" when the user selects them. When such elements are
+toggled "on" the <code>:checked</code> pseudo-class applies. The
+<code>:checked</code> pseudo-class initially applies to such elements
+that have the HTML4 <code>selected</code> and <code>checked</code>
+attributes as described in <a
+href="http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.2.1">Section
+17.2.1 of HTML4</a>, but of course the user can toggle "off" such
+elements in which case the <code>:checked</code> pseudo-class would no
+longer apply. While the <code>:checked</code> pseudo-class is dynamic
+in nature, and is altered by user action, since it can also be based
+on the presence of the semantic HTML4 <code>selected</code> and
+<code>checked</code> attributes, it applies to all media.
+
+
+<h5><a name=indeterminate>The :indeterminate pseudo-class</a></h5>
+
+<div class="note">
+
+<p>Radio and checkbox elements can be toggled by the user, but are
+sometimes in an indeterminate state, neither checked nor unchecked.
+This can be due to an element attribute, or DOM manipulation.</p>
+
+<p>A future version of this specification may introduce an
+<code>:indeterminate</code> pseudo-class that applies to such elements.
+<!--While the <code>:indeterminate</code> pseudo-class is dynamic in
+nature, and is altered by user action, since it can also be based on
+the presence of an element attribute, it applies to all media.</p>
+
+<p>Components of a radio-group initialized with no pre-selected choice
+are an example of :indeterminate state.--></p>
+
+</div>
+
+
+<h4><a name=structural-pseudos>6.6.5. Structural pseudo-classes</a></h4>
+
+<p>Selectors introduces the concept of <dfn>structural
+pseudo-classes</dfn> to permit selection based on extra information that lies in
+the document tree but cannot be represented by other simple selectors or
+combinators.
+
+<p>Note that standalone pieces of PCDATA (text nodes in the DOM) are
+not counted when calculating the position of an element in the list of
+children of its parent. When calculating the position of an element in
+the list of children of its parent, the index numbering starts at 1.
+
+
+<h5><a name=root-pseudo>:root pseudo-class</a></h5>
+
+<p>The <code>:root</code> pseudo-class represents an element that is
+the root of the document. In HTML 4, this is always the
+<code>HTML</code> element.
+
+
+<h5><a name=nth-child-pseudo>:nth-child() pseudo-class</a></h5>
+
+<p>The
+<code>:nth-child(<var>a</var><code>n</code>+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings
+<strong>before</strong> it in the document tree, for a given positive
+integer or zero value of <code>n</code>, and has a parent element. In
+other words, this matches the <var>b</var>th child of an element after
+all the children have been split into groups of <var>a</var> elements
+each. For example, this allows the selectors to address every other
+row in a table, and could be used to alternate the color
+of paragraph text in a cycle of four. The <var>a</var> and
+<var>b</var> values must be zero, negative integers or positive
+integers. The index of the first child of an element is 1.
+
+<p>In addition to this, <code>:nth-child()</code> can take
+'<code>odd</code>' and '<code>even</code>' as arguments instead.
+'<code>odd</code>' has the same signification as <code>2n+1</code>,
+and '<code>even</code>' has the same signification as <code>2n</code>.
+
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-child(2n+1) /* represents every odd row of an HTML table */
+tr:nth-child(odd) /* same */
+tr:nth-child(2n) /* represents every even row of an HTML table */
+tr:nth-child(even) /* same */
+
+/* Alternate paragraph colours in CSS */
+p:nth-child(4n+1) { color: navy; }
+p:nth-child(4n+2) { color: green; }
+p:nth-child(4n+3) { color: maroon; }
+p:nth-child(4n+4) { color: purple; }</pre>
+</div>
+
+<p>When <var>a</var>=0, no repeating is used, so for example
+<code>:nth-child(0n+5)</code> matches only the fifth child. When
+<var>a</var>=0, the <var>a</var><code>n</code> part need not be
+included, so the syntax simplifies to
+<code>:nth-child(<var>b</var>)</code> and the last example simplifies
+to <code>:nth-child(5)</code>.
+
+<div class="example">
+<p>Examples:</p>
+<pre>foo:nth-child(0n+1) /* represents an element foo, first child of its parent element */
+foo:nth-child(1) /* same */</pre>
+</div>
+
+<p>When <var>a</var>=1, the number may be omitted from the rule.
+
+<div class="example">
+<p>Examples:</p>
+<p>The following selectors are therefore equivalent:</p>
+<pre>bar:nth-child(1n+0) /* represents all bar elements, specificity (0,1,1) */
+bar:nth-child(n+0) /* same */
+bar:nth-child(n) /* same */
+bar /* same but lower specificity (0,0,1) */</pre>
+</div>
+
+<p>If <var>b</var>=0, then every <var>a</var>th element is picked. In
+such a case, the <var>b</var> part may be omitted.
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-child(2n+0) /* represents every even row of an HTML table */
+tr:nth-child(2n) /* same */</pre>
+</div>
+
+<p>If both <var>a</var> and <var>b</var> are equal to zero, the
+pseudo-class represents no element in the document tree.</p>
+
+<p>The value <var>a</var> can be negative, but only the positive
+values of <var>a</var><code>n</code>+<var>b</var>, for
+<code>n</code>&ge;0, may represent an element in the document
+tree.</p>
+
+<div class="example">
+<p>Example:</p>
+<pre>html|tr:nth-child(-n+6) /* represents the 6 first rows of XHTML tables */</pre>
+</div>
+
+<p>When the value <var>b</var> is negative, the "+" character in the
+expression must be removed (it is effectively replaced by the "-"
+character indicating the negative value of <var>b</var>).</p>
+
+<div class="example">
+<p>Examples:</p>
+<pre>:nth-child(10n-1) /* represents the 9th, 19th, 29th, etc, element */
+:nth-child(10n+9) /* Same */
+:nth-child(10n+-1) /* Syntactically invalid, and would be ignored */</pre>
+</div>
+
+
+<h5><a name=nth-last-child-pseudo>:nth-last-child() pseudo-class</a></h5>
+
+<p>The <code>:nth-last-child(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings
+<strong>after</strong> it in the document tree, for a given positive
+integer or zero value of <code>n</code>, and has a parent element. See
+<code>:nth-child()</code> pseudo-class for the syntax of its argument.
+It also accepts the '<code>even</code>' and '<code>odd</code>' values
+as arguments.
+
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-last-child(-n+2) /* represents the two last rows of an HTML table */
+
+foo:nth-last-child(odd) /* represents all odd foo elements in their parent element,
+ counting from the last one */</pre>
+</div>
+
+
+<h5><a name=nth-of-type-pseudo>:nth-of-type() pseudo-class</a></h5>
+
+<p>The <code>:nth-of-type(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings with the same
+element name <strong>before</strong> it in the document tree, for a
+given zero or positive integer value of <code>n</code>, and has a
+parent element. In other words, this matches the <var>b</var>th child
+of that type after all the children of that type have been split into
+groups of a elements each. See <code>:nth-child()</code> pseudo-class
+for the syntax of its argument. It also accepts the
+'<code>even</code>' and '<code>odd</code>' values.
+
+
+<div class="example">
+<p>CSS example:</p>
+<p>This allows an author to alternate the position of floated images:</p>
+<pre>img:nth-of-type(2n+1) { float: right; }
+img:nth-of-type(2n) { float: left; }</pre>
+</div>
+
+
+<h5><a name=nth-last-of-type-pseudo>:nth-last-of-type() pseudo-class</a></h5>
+
+<p>The <code>:nth-last-of-type(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings with the same
+element name <strong>after</strong> it in the document tree, for a
+given zero or positive integer value of <code>n</code>, and has a
+parent element. See <code>:nth-child()</code> pseudo-class for the
+syntax of its argument. It also accepts the '<code>even</code>' and '<code>odd</code>' values.
+
+
+<div class="example">
+ <p>Example:</p>
+ <p>To represent all <code>h2</code> children of an XHTML
+ <code>body</code> except the first and last, one could use the
+ following selector:</p>
+ <pre>body &gt; h2:nth-of-type(n+2):nth-last-of-type(n+2)</pre>
+ <p>In this case, one could also use <code>:not()</code>, although the
+ selector ends up being just as long:</p>
+ <pre>body &gt; h2:not(:first-of-type):not(:last-of-type)</pre>
+</div>
+
+
+<h5><a name=first-child-pseudo>:first-child pseudo-class</a></h5>
+
+<p>Same as <code>:nth-child(1)</code>. The <code>:first-child</code> pseudo-class
+represents an element that is the first child of some other element.
+
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element that is
+ the first child of a <code>div</code> element:</p>
+ <pre>div &gt; p:first-child</pre>
+ <p>This selector can represent the <code>p</code> inside the
+ <code>div</code> of the following fragment:</p>
+ <pre>&lt;p&gt; The last P before the note.&lt;/p&gt;
+&lt;div class="note"&gt;
+ &lt;p&gt; The first P inside the note.&lt;/p&gt;
+&lt;/div&gt;</pre>but cannot represent the second <code>p</code> in the following
+fragment:
+ <pre>&lt;p&gt; The last P before the note.&lt;/p&gt;
+&lt;div class="note"&gt;
+ &lt;h2&gt; Note &lt;/h2&gt;
+ &lt;p&gt; The first P inside the note.&lt;/p&gt;
+&lt;/div&gt;</pre>
+ <p>The following two selectors are usually equivalent:</p>
+ <pre>* &gt; a:first-child /* a is first child of any element */
+a:first-child /* Same (assuming a is not the root element) */</pre>
+</div>
+
+<h5><a name=last-child-pseudo>:last-child pseudo-class</a></h5>
+
+<p>Same as <code>:nth-last-child(1)</code>. The <code>:last-child</code> pseudo-class
+represents an element that is the last child of some other element.
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents a list item <code>li</code> that
+ is the last child of an ordered list <code>ol</code>.
+ <pre>ol &gt; li:last-child</pre>
+</div>
+
+<h5><a name=first-of-type-pseudo>:first-of-type pseudo-class</a></h5>
+
+<p>Same as <code>:nth-of-type(1)</code>. The <code>:first-of-type</code> pseudo-class
+represents an element that is the first sibling of its type in the list of
+children of its parent element.
+
+<div class="example">
+<p>Example:</p>
+<p>The following selector represents a definition title
+<code>dt</code> inside a definition list <code>dl</code>, this
+<code>dt</code> being the first of its type in the list of children of
+its parent element.</p>
+<pre>dl dt:first-of-type</pre>
+<p>It is a valid description for the first two <code>dt</code>
+elements in the following example but not for the third one:</p>
+<pre>&lt;dl&gt;
+ &lt;dt&gt;gigogne&lt;/dt&gt;
+ &lt;dd&gt;
+ &lt;dl&gt;
+ &lt;dt&gt;fus&eacute;e&lt;/dt&gt;
+ &lt;dd&gt;multistage rocket&lt;/dd&gt;
+ &lt;dt&gt;table&lt;/dt&gt;
+ &lt;dd&gt;nest of tables&lt;/dd&gt;
+ &lt;/dl&gt;
+ &lt;/dd&gt;
+&lt;/dl&gt;</pre>
+</div>
+
+<h5><a name=last-of-type-pseudo>:last-of-type pseudo-class</a></h5>
+
+<p>Same as <code>:nth-last-of-type(1)</code>. The
+<code>:last-of-type</code> pseudo-class represents an element that is
+the last sibling of its type in the list of children of its parent
+element.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents the last data cell
+ <code>td</code> of a table row.</p>
+ <pre>tr &gt; td:last-of-type</pre>
+</div>
+
+<h5><a name=only-child-pseudo>:only-child pseudo-class</a></h5>
+
+<p>Represents an element that has a parent element and whose parent
+element has no other element children. Same as
+<code>:first-child:last-child</code> or
+<code>:nth-child(1):nth-last-child(1)</code>, but with a lower
+specificity.</p>
+
+<h5><a name=only-of-type-pseudo>:only-of-type pseudo-class</a></h5>
+
+<p>Represents an element that has a parent element and whose parent
+element has no other element children with the same element name. Same
+as <code>:first-of-type:last-of-type</code> or
+<code>:nth-of-type(1):nth-last-of-type(1)</code>, but with a lower
+specificity.</p>
+
+
+<h5><a name=empty-pseudo></a>:empty pseudo-class</h5>
+
+<p>The <code>:empty</code> pseudo-class represents an element that has
+no children at all. In terms of the DOM, only element nodes and text
+nodes (including CDATA nodes and entity references) whose data has a
+non-zero length must be considered as affecting emptiness; comments,
+PIs, and other nodes must not affect whether an element is considered
+empty or not.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p><code>p:empty</code> is a valid representation of the following fragment:</p>
+ <pre>&lt;p&gt;&lt;/p&gt;</pre>
+ <p><code>foo:empty</code> is not a valid representation for the
+ following fragments:</p>
+ <pre>&lt;foo&gt;bar&lt;/foo&gt;</pre>
+ <pre>&lt;foo&gt;&lt;bar&gt;bla&lt;/bar&gt;&lt;/foo&gt;</pre>
+ <pre>&lt;foo&gt;this is not &lt;bar&gt;:empty&lt;/bar&gt;&lt;/foo&gt;</pre>
+</div>
+
+<h4><a name=content-selectors>6.6.6. Blank</a></h4> <!-- It's the Return of Appendix H!!! Run away! -->
+
+<p>This section intentionally left blank.</p>
+<!-- (used to be :contains()) -->
+
+<h4><a name=negation></a>6.6.7. The negation pseudo-class</h4>
+
+<p>The negation pseudo-class, <code>:not(<var>X</var>)</code>, is a
+functional notation taking a <a href="#simple-selectors-dfn">simple
+selector</a> (excluding the negation pseudo-class itself and
+pseudo-elements) as an argument. It represents an element that is not
+represented by the argument.
+
+<!-- pseudo-elements are not simple selectors, so the above paragraph
+may be a bit confusing -->
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following CSS selector matches all <code>button</code>
+ elements in an HTML document that are not disabled.</p>
+ <pre>button:not([DISABLED])</pre>
+ <p>The following selector represents all but <code>FOO</code>
+ elements.</p>
+ <pre>*:not(FOO)</pre>
+ <p>The following group of selectors represents all HTML elements
+ except links.</p>
+ <pre>html|*:not(:link):not(:visited)</pre>
+</div>
+
+<p>Default namespace declarations do not affect the argument of the
+negation pseudo-class unless the argument is a universal selector or a
+type selector.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>Assuming that the default namespace is bound to
+ "http://example.com/", the following selector represents all
+ elements that are not in that namespace:</p>
+ <pre>*|*:not(*)</pre>
+ <p>The following CSS selector matches any element being hovered,
+ regardless of its namespace. In particular, it is not limited to
+ only matching elements in the default namespace that are not being
+ hovered, and elements not in the default namespace don't match the
+ rule when they <em>are</em> being hovered.</p>
+ <pre>*|*:not(:hover)</pre>
+</div>
+
+<p class="note"><strong>Note</strong>: the :not() pseudo allows
+useless selectors to be written. For instance <code>:not(*|*)</code>,
+which represents no element at all, or <code>foo:not(bar)</code>,
+which is equivalent to <code>foo</code> but with a higher
+specificity.</p>
+
+<h3><a name=pseudo-elements>7. Pseudo-elements</a></h3>
+
+<p>Pseudo-elements create abstractions about the document tree beyond
+those specified by the document language. For instance, document
+languages do not offer mechanisms to access the first letter or first
+line of an element's content. Pseudo-elements allow designers to refer
+to this otherwise inaccessible information. Pseudo-elements may also
+provide designers a way to refer to content that does not exist in the
+source document (e.g., the <code>::before</code> and
+<code>::after</code> pseudo-elements give access to generated
+content).</p>
+
+<p>A pseudo-element is made of two colons (<code>::</code>) followed
+by the name of the pseudo-element.</p>
+
+<p>This <code>::</code> notation is introduced by the current document
+in order to establish a discrimination between pseudo-classes and
+pseudo-elements. For compatibility with existing style sheets, user
+agents must also accept the previous one-colon notation for
+pseudo-elements introduced in CSS levels 1 and 2 (namely,
+<code>:first-line</code>, <code>:first-letter</code>,
+<code>:before</code> and <code>:after</code>). This compatibility is
+not allowed for the new pseudo-elements introduced in CSS level 3.</p>
+
+<p>Only one pseudo-element may appear per selector, and if present it
+must appear after the sequence of simple selectors that represents the
+<a href="#subject">subjects</a> of the selector. <span class="note">A
+future version of this specification may allow multiple
+pesudo-elements per selector.</span></p>
+
+<h4><a name=first-line>7.1. The ::first-line pseudo-element</a></h4>
+
+<p>The <code>::first-line</code> pseudo-element describes the contents
+of the first formatted line of an element.
+
+<div class="example">
+<p>CSS example:</p>
+<pre>p::first-line { text-transform: uppercase }</pre>
+<p>The above rule means "change the letters of the first line of every
+paragraph to uppercase".</p>
+</div>
+
+<p>The selector <code>p::first-line</code> does not match any real
+HTML element. It does match a pseudo-element that conforming user
+agents will insert at the beginning of every paragraph.</p>
+
+<p>Note that the length of the first line depends on a number of
+factors, including the width of the page, the font size, etc. Thus,
+an ordinary HTML paragraph such as:</p>
+
+<pre>
+&lt;P&gt;This is a somewhat long HTML
+paragraph that will be broken into several
+lines. The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>the lines of which happen to be broken as follows:
+
+<pre>
+THIS IS A SOMEWHAT LONG HTML PARAGRAPH THAT
+will be broken into several lines. The first
+line will be identified by a fictional tag
+sequence. The other lines will be treated as
+ordinary lines in the paragraph.
+</pre>
+
+<p>This paragraph might be "rewritten" by user agents to include the
+<em>fictional tag sequence</em> for <code>::first-line</code>. This
+fictional tag sequence helps to show how properties are inherited.</p>
+
+<pre>
+&lt;P&gt;<b>&lt;P::first-line&gt;</b> This is a somewhat long HTML
+paragraph that <b>&lt;/P::first-line&gt;</b> will be broken into several
+lines. The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>If a pseudo-element breaks up a real element, the desired effect
+can often be described by a fictional tag sequence that closes and
+then re-opens the element. Thus, if we mark up the previous paragraph
+with a <code>span</code> element:</p>
+
+<pre>
+&lt;P&gt;<b>&lt;SPAN class="test"&gt;</b> This is a somewhat long HTML
+paragraph that will be broken into several
+lines.<b>&lt;/SPAN&gt;</b> The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>the user agent could simulate start and end tags for
+<code>span</code> when inserting the fictional tag sequence for
+<code>::first-line</code>.
+
+<pre>
+&lt;P&gt;&lt;P::first-line&gt;<b>&lt;SPAN class="test"&gt;</b> This is a
+somewhat long HTML
+paragraph that will <b>&lt;/SPAN&gt;</b>&lt;/P::first-line&gt;<b>&lt;SPAN class="test"&gt;</b> be
+broken into several
+lines.<b>&lt;/SPAN&gt;</b> The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>In CSS, the <code>::first-line</code> pseudo-element can only be
+attached to a block-level element, an inline-block, a table-caption,
+or a table-cell.</p>
+
+<p><a name="first-formatted-line"></a>The "first formatted line" of an
+element may occur inside a
+block-level descendant in the same flow (i.e., a block-level
+descendant that is not positioned and not a float). E.g., the first
+line of the <code>div</code> in <code>&lt;DIV>&lt;P>This
+line...&lt;/P>&lt/DIV></code> is the first line of the <code>p</code> (assuming
+that both <code>p</code> and <code>div</code> are block-level).
+
+<p>The first line of a table-cell or inline-block cannot be the first
+formatted line of an ancestor element. Thus, in <code>&lt;DIV&gt;&lt;P
+STYLE="display: inline-block">Hello&lt;BR&gt;Goodbye&lt;/P&gt;
+etcetera&lt;/DIV&gt;</code> the first formatted line of the
+<code>div</code> is not the line "Hello".
+
+<p class="note">Note that the first line of the <code>p</code> in this
+fragment: <code>&lt;p&gt&lt;br&gt;First...</code> doesn't contain any
+letters (assuming the default style for <code>br</code> in HTML
+4). The word "First" is not on the first formatted line.
+
+<p>A UA should act as if the fictional start tags of the
+<code>::first-line</code> pseudo-elements were nested just inside the
+innermost enclosing block-level element. (Since CSS1 and CSS2 were
+silent on this case, authors should not rely on this behavior.) Here
+is an example. The fictional tag sequence for</p>
+
+<pre>
+&lt;DIV>
+ &lt;P>First paragraph&lt;/P>
+ &lt;P>Second paragraph&lt;/P>
+&lt;/DIV>
+</pre>
+
+<p>is</p>
+
+<pre>
+&lt;DIV>
+ &lt;P>&lt;DIV::first-line>&lt;P::first-line>First paragraph&lt;/P::first-line>&lt;/DIV::first-line>&lt;/P>
+ &lt;P>&lt;P::first-line>Second paragraph&lt;/P::first-line>&lt;/P>
+&lt;/DIV>
+</pre>
+
+<p>The <code>::first-line</code> pseudo-element is similar to an
+inline-level element, but with certain restrictions. In CSS, the
+following properties apply to a <code>::first-line</code>
+pseudo-element: font properties, color property, background
+properties, 'word-spacing', 'letter-spacing', 'text-decoration',
+'vertical-align', 'text-transform', 'line-height'. UAs may apply other
+properties as well.</p>
+
+
+<h4><a name=first-letter>7.2. The ::first-letter pseudo-element</a></h4>
+
+<p>The <code>::first-letter</code> pseudo-element represents the first
+letter of the first line of a block, if it is not preceded by any
+other content (such as images or inline tables) on its line. The
+::first-letter pseudo-element may be used for "initial caps" and "drop
+caps", which are common typographical effects. This type of initial
+letter is similar to an inline-level element if its 'float' property
+is 'none'; otherwise, it is similar to a floated element.</p>
+
+<p>In CSS, these are the properties that apply to <code>::first-letter</code>
+pseudo-elements: font properties, 'text-decoration', 'text-transform',
+'letter-spacing', 'word-spacing' (when appropriate), 'line-height',
+'float', 'vertical-align' (only if 'float' is 'none'), margin
+properties, padding properties, border properties, color property,
+background properties. UAs may apply other properties as well. To
+allow UAs to render a typographically correct drop cap or initial cap,
+the UA may choose a line-height, width and height based on the shape
+of the letter, unlike for normal elements.</p>
+
+<div class="example">
+<p>Example:</p>
+<p>This example shows a possible rendering of an initial cap. Note
+that the 'line-height' that is inherited by the <code>::first-letter</code>
+pseudo-element is 1.1, but the UA in this example has computed the
+height of the first letter differently, so that it doesn't cause any
+unnecessary space between the first two lines. Also note that the
+fictional start tag of the first letter is inside the <span>span</span>, and thus
+the font weight of the first letter is normal, not bold as the <span>span</span>:
+<pre>
+p { line-height: 1.1 }
+p::first-letter { font-size: 3em; font-weight: normal }
+span { font-weight: bold }
+...
+&lt;p>&lt;span>Het hemelsche&lt;/span> gerecht heeft zich ten lange lesten&lt;br>
+Erbarremt over my en mijn benaeuwde vesten&lt;br>
+En arme burgery, en op mijn volcx gebed&lt;br>
+En dagelix geschrey de bange stad ontzet.
+</pre>
+<div class="figure">
+<p><img src="initial-cap.png" alt="Image illustrating the ::first-letter pseudo-element">
+</div>
+</div>
+
+<div class="example">
+<p>The following CSS will make a drop cap initial letter span about two lines:</p>
+
+<pre>
+&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"&gt;
+&lt;HTML&gt;
+ &lt;HEAD&gt;
+ &lt;TITLE&gt;Drop cap initial letter&lt;/TITLE&gt;
+ &lt;STYLE type="text/css"&gt;
+ P { font-size: 12pt; line-height: 1.2 }
+ P::first-letter { font-size: 200%; font-weight: bold; float: left }
+ SPAN { text-transform: uppercase }
+ &lt;/STYLE&gt;
+ &lt;/HEAD&gt;
+ &lt;BODY&gt;
+ &lt;P&gt;&lt;SPAN&gt;The first&lt;/SPAN&gt; few words of an article
+ in The Economist.&lt;/P&gt;
+ &lt;/BODY&gt;
+&lt;/HTML&gt;
+</pre>
+
+<p>This example might be formatted as follows:</p>
+
+<div class="figure">
+<P><img src="first-letter.gif" alt="Image illustrating the combined effect of the ::first-letter and ::first-line pseudo-elements"></p>
+</div>
+
+<p>The <span class="index-inst" title="fictional tag
+sequence">fictional tag sequence</span> is:</p>
+
+<pre>
+&lt;P&gt;
+&lt;SPAN&gt;
+&lt;P::first-letter&gt;
+T
+&lt;/P::first-letter&gt;he first
+&lt;/SPAN&gt;
+few words of an article in the Economist.
+&lt;/P&gt;
+</pre>
+
+<p>Note that the <code>::first-letter</code> pseudo-element tags abut
+the content (i.e., the initial character), while the ::first-line
+pseudo-element start tag is inserted right after the start tag of the
+block element.</p> </div>
+
+<p>In order to achieve traditional drop caps formatting, user agents
+may approximate font sizes, for example to align baselines. Also, the
+glyph outline may be taken into account when formatting.</p>
+
+<p>Punctuation (i.e, characters defined in Unicode in the "open" (Ps),
+"close" (Pe), "initial" (Pi). "final" (Pf) and "other" (Po)
+punctuation classes), that precedes or follows the first letter should
+be included. <a href="#refsUNICODE">[UNICODE]</a></p>
+
+<div class="figure">
+<P><img src="first-letter2.gif" alt="Quotes that precede the
+first letter should be included."></p>
+</div>
+
+<p>The <code>::first-letter</code> also applies if the first letter is
+in fact a digit, e.g., the "6" in "67 million dollars is a lot of
+money."</p>
+
+<p>In CSS, the <code>::first-letter</code> pseudo-element applies to
+block, list-item, table-cell, table-caption, and inline-block
+elements. <span class="note">A future version of this specification
+may allow this pesudo-element to apply to more element
+types.</span></p>
+
+<p>The <code>::first-letter</code> pseudo-element can be used with all
+such elements that contain text, or that have a descendant in the same
+flow that contains text. A UA should act as if the fictional start tag
+of the ::first-letter pseudo-element is just before the first text of
+the element, even if that first text is in a descendant.</p>
+
+<div class="example">
+<p>Example:</p>
+<p>The fictional tag sequence for this HTMLfragment:
+<pre>&lt;div>
+&lt;p>The first text.</pre>
+<p>is:
+<pre>&lt;div>
+&lt;p>&lt;div::first-letter>&lt;p::first-letter>T&lt;/...>&lt;/...>he first text.</pre>
+</div>
+
+<p>The first letter of a table-cell or inline-block cannot be the
+first letter of an ancestor element. Thus, in <code>&lt;DIV&gt;&lt;P
+STYLE="display: inline-block">Hello&lt;BR&gt;Goodbye&lt;/P&gt;
+etcetera&lt;/DIV&gt;</code> the first letter of the <code>div</code> is not the
+letter "H". In fact, the <code>div</code> doesn't have a first letter.
+
+<p>The first letter must occur on the <a
+href="#first-formatted-line">first formatted line.</a> For example, in
+this fragment: <code>&lt;p&gt&lt;br&gt;First...</code> the first line
+doesn't contain any letters and <code>::first-letter</code> doesn't
+match anything (assuming the default style for <code>br</code> in HTML
+4). In particular, it does not match the "F" of "First."
+
+<p>In CSS, if an element is a list item ('display: list-item'), the
+<code>::first-letter</code> applies to the first letter in the
+principal box after the marker. UAs may ignore
+<code>::first-letter</code> on list items with 'list-style-position:
+inside'. If an element has <code>::before</code> or
+<code>::after</code> content, the <code>::first-letter</code> applies
+to the first letter of the element <em>including</em> that content.
+
+<div class="example">
+<p>Example:</p>
+<p>After the rule 'p::before {content: "Note: "}', the selector
+'p::first-letter' matches the "N" of "Note".</p>
+</div>
+
+<p>Some languages may have specific rules about how to treat certain
+letter combinations. In Dutch, for example, if the letter combination
+"ij" appears at the beginning of a word, both letters should be
+considered within the <code>::first-letter</code> pseudo-element.
+
+<p>If the letters that would form the ::first-letter are not in the
+same element, such as "'T" in <code>&lt;p>'&lt;em>T...</code>, the UA
+may create a ::first-letter pseudo-element from one of the elements,
+both elements, or simply not create a pseudo-element.</p>
+
+<p>Similarly, if the first letter(s) of the block are not at the start
+of the line (for example due to bidirectional reordering), then the UA
+need not create the pseudo-element(s).
+
+<div class="example">
+<p>Example:</p>
+<p><a name="overlapping-example">The following example</a> illustrates
+how overlapping pseudo-elements may interact. The first letter of
+each P element will be green with a font size of '24pt'. The rest of
+the first formatted line will be 'blue' while the rest of the
+paragraph will be 'red'.</p>
+
+<pre>p { color: red; font-size: 12pt }
+p::first-letter { color: green; font-size: 200% }
+p::first-line { color: blue }
+
+&lt;P&gt;Some text that ends up on two lines&lt;/P&gt;</pre>
+
+<p>Assuming that a line break will occur before the word "ends", the
+<span class="index-inst" title="fictional tag sequence">fictional tag
+sequence</span> for this fragment might be:</p>
+
+<pre>&lt;P&gt;
+&lt;P::first-line&gt;
+&lt;P::first-letter&gt;
+S
+&lt;/P::first-letter&gt;ome text that
+&lt;/P::first-line&gt;
+ends up on two lines
+&lt;/P&gt;</pre>
+
+<p>Note that the <code>::first-letter</code> element is inside the <code>::first-line</code>
+element. Properties set on <code>::first-line</code> are inherited by
+<code>::first-letter</code>, but are overridden if the same property is set on
+<code>::first-letter</code>.</p>
+</div>
+
+
+<h4><a name=UIfragments>7.3.</a> <a name=selection>The ::selection pseudo-element</a></h4>
+
+<p>The <code>::selection</code> pseudo-element applies to the portion
+of a document that has been highlighted by the user. This also
+applies, for example, to selected text within an editable text
+field. This pseudo-element should not be confused with the <code><a
+href="#checked">:checked</a></code> pseudo-class (which used to be
+named <code>:selected</code>)
+
+<p>Although the <code>::selection</code> pseudo-element is dynamic in
+nature, and is altered by user action, it is reasonable to expect that
+when a UA re-renders to a static medium (such as a printed page, see
+<a href="#refsCSS21">[CSS21]</a>) which was originally rendered to a
+dynamic medium (like screen), the UA may wish to transfer the current
+<code>::selection</code> state to that other medium, and have all the
+appropriate formatting and rendering take effect as well. This is not
+required &mdash; UAs may omit the <code>::selection</code>
+pseudo-element for static media.
+
+<p>These are the CSS properties that apply to <code>::selection</code>
+pseudo-elements: color, background, cursor (optional), outline
+(optional). The computed value of the 'background-image' property on
+<code>::selection</code> may be ignored.
+
+
+<h4><a name=gen-content>7.4. The ::before and ::after pseudo-elements</a></h4>
+
+<p>The <code>::before</code> and <code>::after</code> pseudo-elements
+can be used to describe generated content before or after an element's
+content. They are explained in CSS 2.1 <a
+href="#refsCSS21">[CSS21]</a>.</p>
+
+<p>When the <code>::first-letter</code> and <code>::first-line</code>
+pseudo-elements are combined with <code>::before</code> and
+<code>::after</code>, they apply to the first letter or line of the
+element including the inserted text.</p>
+
+<h2><a name=combinators>8. Combinators</a></h2>
+
+<h3><a name=descendant-combinators>8.1. Descendant combinator</a></h3>
+
+<p>At times, authors may want selectors to describe an element that is
+the descendant of another element in the document tree (e.g., "an
+<code>EM</code> element that is contained within an <code>H1</code>
+element"). Descendant combinators express such a relationship. A
+descendant combinator is <a href="#whitespace">white space</a> that
+separates two sequences of simple selectors. A selector of the form
+"<code>A B</code>" represents an element <code>B</code> that is an
+arbitrary descendant of some ancestor element <code>A</code>.
+
+<div class="example">
+ <p>Examples:</p>
+ <p>For example, consider the following selector:</p>
+ <pre>h1 em</pre>
+ <p>It represents an <code>em</code> element being the descendant of
+ an <code>h1</code> element. It is a correct and valid, but partial,
+ description of the following fragment:</p>
+ <pre>&lt;h1&gt;This &lt;span class="myclass"&gt;headline
+is &lt;em&gt;very&lt;/em&gt; important&lt;/span&gt;&lt;/h1&gt;</pre>
+ <p>The following selector:</p>
+ <pre>div * p</pre>
+ <p>represents a <code>p</code> element that is a grandchild or later
+ descendant of a <code>div</code> element. Note the whitespace on
+ either side of the "*" is not part of the universal selector; the
+ whitespace is a combinator indicating that the DIV must be the
+ ancestor of some element, and that that element must be an ancestor
+ of the P.</p>
+ <p>The following selector, which combines descendant combinators and
+ <a href="#attribute-selectors">attribute selectors</a>, represents an
+ element that (1) has the <code>href</code> attribute set and (2) is
+ inside a <code>p</code> that is itself inside a <code>div</code>:</p>
+ <pre>div p *[href]</pre>
+</div>
+
+<h3><a name=child-combinators>8.2. Child combinators</a></h3>
+
+<p>A <dfn>child combinator</dfn> describes a childhood relationship
+between two elements. A child combinator is made of the
+&quot;greater-than sign&quot; (<code>&gt;</code>) character and
+separates two sequences of simple selectors.
+
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element that is
+ child of <code>body</code>:</p>
+ <pre>body &gt; p</pre>
+ <p>The following example combines descendant combinators and child
+ combinators.</p>
+ <pre>div ol&gt;li p</pre><!-- LEAVE THOSE SPACES OUT! see below -->
+ <p>It represents a <code>p</code> element that is a descendant of an
+ <code>li</code> element; the <code>li</code> element must be the
+ child of an <code>ol</code> element; the <code>ol</code> element must
+ be a descendant of a <code>div</code>. Notice that the optional white
+ space around the "&gt;" combinator has been left out.</p>
+</div>
+
+<p>For information on selecting the first child of an element, please
+see the section on the <code><a
+href="#structural-pseudos">:first-child</a></code> pseudo-class
+above.</p>
+
+<h3><a name=sibling-combinators>8.3. Sibling combinators</a></h3>
+
+<p>There are two different sibling combinators: the adjacent sibling
+combinator and the general sibling combinator. In both cases,
+non-element nodes (e.g. text between elements) are ignored when
+considering adjacency of elements.</p>
+
+<h4><a name=adjacent-sibling-combinators>8.3.1. Adjacent sibling combinator</a></h4>
+
+<p>The adjacent sibling combinator is made of the &quot;plus
+sign&quot; (U+002B, <code>+</code>) character that separates two
+sequences of simple selectors. The elements represented by the two
+sequences share the same parent in the document tree and the element
+represented by the first sequence immediately precedes the element
+represented by the second one.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element
+ immediately following a <code>math</code> element:</p>
+ <pre>math + p</pre>
+ <p>The following selector is conceptually similar to the one in the
+ previous example, except that it adds an attribute selector &mdash; it
+ adds a constraint to the <code>h1</code> element, that it must have
+ <code>class="opener"</code>:</p>
+ <pre>h1.opener + h2</pre>
+</div>
+
+
+<h4><a name=general-sibling-combinators>8.3.2. General sibling combinator</a></h4>
+
+<p>The general sibling combinator is made of the &quot;tilde&quot;
+(U+007E, <code>~</code>) character that separates two sequences of
+simple selectors. The elements represented by the two sequences share
+the same parent in the document tree and the element represented by
+the first sequence precedes (not necessarily immediately) the element
+represented by the second one.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <pre>h1 ~ pre</pre>
+ <p>represents a <code>pre</code> element following an <code>h1</code>. It
+ is a correct and valid, but partial, description of:</p>
+ <pre>&lt;h1&gt;Definition of the function a&lt;/h1&gt;
+&lt;p&gt;Function a(x) has to be applied to all figures in the table.&lt;/p&gt;
+&lt;pre&gt;function a(x) = 12x/13.5&lt;/pre&gt;</pre>
+</div>
+
+<h2><a name=specificity>9. Calculating a selector's specificity</a></h2>
+
+<p>A selector's specificity is calculated as follows:</p>
+
+<ul>
+ <li>count the number of ID selectors in the selector (= a)</li>
+ <li>count the number of class selectors, attributes selectors, and pseudo-classes in the selector (= b)</li>
+ <li>count the number of element names in the selector (= c)</li>
+ <li>ignore pseudo-elements</li>
+</ul>
+
+<p>Selectors inside <a href="#negation">the negation pseudo-class</a>
+are counted like any other, but the negation itself does not count as
+a pseudo-class.</p>
+
+<p>Concatenating the three numbers a-b-c (in a number system with a
+large base) gives the specificity.</p>
+
+<div class="example">
+<p>Examples:</p>
+<pre>* /* a=0 b=0 c=0 -&gt; specificity = 0 */
+LI /* a=0 b=0 c=1 -&gt; specificity = 1 */
+UL LI /* a=0 b=0 c=2 -&gt; specificity = 2 */
+UL OL+LI /* a=0 b=0 c=3 -&gt; specificity = 3 */
+H1 + *[REL=up] /* a=0 b=1 c=1 -&gt; specificity = 11 */
+UL OL LI.red /* a=0 b=1 c=3 -&gt; specificity = 13 */
+LI.red.level /* a=0 b=2 c=1 -&gt; specificity = 21 */
+#x34y /* a=1 b=0 c=0 -&gt; specificity = 100 */
+#s12:not(FOO) /* a=1 b=0 c=1 -&gt; specificity = 101 */
+</pre>
+</div>
+
+<p class="note"><strong>Note:</strong> the specificity of the styles
+specified in an HTML <code>style</code> attribute is described in CSS
+2.1. <a href="#refsCSS21">[CSS21]</a>.</p>
+
+<h2><a name=w3cselgrammar>10. The grammar of Selectors</a></h2>
+
+<h3><a name=grammar>10.1. Grammar</a></h3>
+
+<p>The grammar below defines the syntax of Selectors. It is globally
+LL(1) and can be locally LL(2) (but note that most UA's should not use
+it directly, since it doesn't express the parsing conventions). The
+format of the productions is optimized for human consumption and some
+shorthand notations beyond Yacc (see <a href="#refsYACC">[YACC]</a>)
+are used:</p>
+
+<ul>
+ <li><b>*</b>: 0 or more
+ <li><b>+</b>: 1 or more
+ <li><b>?</b>: 0 or 1
+ <li><b>|</b>: separates alternatives
+ <li><b>[ ]</b>: grouping </li>
+</ul>
+
+<p>The productions are:</p>
+
+<pre>selectors_group
+ : selector [ COMMA S* selector ]*
+ ;
+
+selector
+ : simple_selector_sequence [ combinator simple_selector_sequence ]*
+ ;
+
+combinator
+ /* combinators can be surrounded by white space */
+ : PLUS S* | GREATER S* | TILDE S* | S+
+ ;
+
+simple_selector_sequence
+ : [ type_selector | universal ]
+ [ HASH | class | attrib | pseudo | negation ]*
+ | [ HASH | class | attrib | pseudo | negation ]+
+ ;
+
+type_selector
+ : [ namespace_prefix ]? element_name
+ ;
+
+namespace_prefix
+ : [ IDENT | '*' ]? '|'
+ ;
+
+element_name
+ : IDENT
+ ;
+
+universal
+ : [ namespace_prefix ]? '*'
+ ;
+
+class
+ : '.' IDENT
+ ;
+
+attrib
+ : '[' S* [ namespace_prefix ]? IDENT S*
+ [ [ PREFIXMATCH |
+ SUFFIXMATCH |
+ SUBSTRINGMATCH |
+ '=' |
+ INCLUDES |
+ DASHMATCH ] S* [ IDENT | STRING ] S*
+ ]? ']'
+ ;
+
+pseudo
+ /* '::' starts a pseudo-element, ':' a pseudo-class */
+ /* Exceptions: :first-line, :first-letter, :before and :after. */
+ /* Note that pseudo-elements are restricted to one per selector and */
+ /* occur only in the last simple_selector_sequence. */
+ : ':' ':'? [ IDENT | functional_pseudo ]
+ ;
+
+functional_pseudo
+ : FUNCTION S* expression ')'
+ ;
+
+expression
+ /* In CSS3, the expressions are identifiers, strings, */
+ /* or of the form "an+b" */
+ : [ [ PLUS | '-' | DIMENSION | NUMBER | STRING | IDENT ] S* ]+
+ ;
+
+negation
+ : NOT S* negation_arg S* ')'
+ ;
+
+negation_arg
+ : type_selector | universal | HASH | class | attrib | pseudo
+ ;</pre>
+
+
+<h3><a name=lex>10.2. Lexical scanner</a></h3>
+
+<p>The following is the <a name=x3>tokenizer</a>, written in Flex (see
+<a href="#refsFLEX">[FLEX]</a>) notation. The tokenizer is
+case-insensitive.</p>
+
+<p>The two occurrences of "\377" represent the highest character
+number that current versions of Flex can deal with (decimal 255). They
+should be read as "\4177777" (decimal 1114111), which is the highest
+possible code point in Unicode/ISO-10646. <a
+href="#refsUNICODE">[UNICODE]</a></p>
+
+<pre>%option case-insensitive
+
+ident [-]?{nmstart}{nmchar}*
+name {nmchar}+
+nmstart [_a-z]|{nonascii}|{escape}
+nonascii [^\0-\177]
+unicode \\[0-9a-f]{1,6}(\r\n|[ \n\r\t\f])?
+escape {unicode}|\\[^\n\r\f0-9a-f]
+nmchar [_a-z0-9-]|{nonascii}|{escape}
+num [0-9]+|[0-9]*\.[0-9]+
+string {string1}|{string2}
+string1 \"([^\n\r\f\\"]|\\{nl}|{nonascii}|{escape})*\"
+string2 \'([^\n\r\f\\']|\\{nl}|{nonascii}|{escape})*\'
+invalid {invalid1}|{invalid2}
+invalid1 \"([^\n\r\f\\"]|\\{nl}|{nonascii}|{escape})*
+invalid2 \'([^\n\r\f\\']|\\{nl}|{nonascii}|{escape})*
+nl \n|\r\n|\r|\f
+w [ \t\r\n\f]*
+
+%%
+
+[ \t\r\n\f]+ return S;
+
+"~=" return INCLUDES;
+"|=" return DASHMATCH;
+"^=" return PREFIXMATCH;
+"$=" return SUFFIXMATCH;
+"*=" return SUBSTRINGMATCH;
+{ident} return IDENT;
+{string} return STRING;
+{ident}"(" return FUNCTION;
+{num} return NUMBER;
+"#"{name} return HASH;
+{w}"+" return PLUS;
+{w}"&gt;" return GREATER;
+{w}"," return COMMA;
+{w}"~" return TILDE;
+":not(" return NOT;
+@{ident} return ATKEYWORD;
+{invalid} return INVALID;
+{num}% return PERCENTAGE;
+{num}{ident} return DIMENSION;
+"&lt;!--" return CDO;
+"--&gt;" return CDC;
+
+"url("{w}{string}{w}")" return URI;
+"url("{w}([!#$%&*-~]|{nonascii}|{escape})*{w}")" return URI;
+U\+[0-9a-f?]{1,6}(-[0-9a-f]{1,6})? return UNICODE_RANGE;
+
+\/\*[^*]*\*+([^/*][^*]*\*+)*\/ /* ignore comments */
+
+. return *yytext;</pre>
+
+
+
+<h2><a name=downlevel>11. Namespaces and down-level clients</a></h2>
+
+<p>An important issue is the interaction of CSS selectors with XML
+documents in web clients that were produced prior to this
+document. Unfortunately, due to the fact that namespaces must be
+matched based on the URI which identifies the namespace, not the
+namespace prefix, some mechanism is required to identify namespaces in
+CSS by their URI as well. Without such a mechanism, it is impossible
+to construct a CSS style sheet which will properly match selectors in
+all cases against a random set of XML documents. However, given
+complete knowledge of the XML document to which a style sheet is to be
+applied, and a limited use of namespaces within the XML document, it
+is possible to construct a style sheet in which selectors would match
+elements and attributes correctly.</p>
+
+<p>It should be noted that a down-level CSS client will (if it
+properly conforms to CSS forward compatible parsing rules) ignore all
+<code>@namespace</code> at-rules, as well as all style rules that make
+use of namespace qualified element type or attribute selectors. The
+syntax of delimiting namespace prefixes in CSS was deliberately chosen
+so that down-level CSS clients would ignore the style rules rather
+than possibly match them incorrectly.</p>
+
+<p>The use of default namespaces in CSS makes it possible to write
+element type selectors that will function in both namespace aware CSS
+clients as well as down-level clients. It should be noted that
+down-level clients may incorrectly match selectors against XML
+elements in other namespaces.</p>
+
+<p>The following are scenarios and examples in which it is possible to
+construct style sheets which would function properly in web clients
+that do not implement this proposal.</p>
+
+<ol>
+ <li>
+
+ <p>The XML document does not use namespaces.</p>
+
+ <ul>
+
+ <li>In this case, it is obviously not necessary to declare or use
+ namespaces in the style sheet. Standard CSS element type and
+ attribute selectors will function adequately in a down-level
+ client.</li>
+
+ <li>In a CSS namespace aware client, the default behavior of
+ element selectors matching without regard to namespace will
+ function properly against all elements, since no namespaces are
+ present. However, the use of specific element type selectors that
+ match only elements that have no namespace ("<code>|name</code>")
+ will guarantee that selectors will match only XML elements that do
+ not have a declared namespace. </li>
+
+ </ul>
+
+ </li>
+
+ <li>
+
+ <p>The XML document defines a single, default namespace used
+ throughout the document. No namespace prefixes are used in element
+ names.</p>
+
+ <ul>
+
+ <li>In this case, a down-level client will function as if
+ namespaces were not used in the XML document at all. Standard CSS
+ element type and attribute selectors will match against all
+ elements. </li>
+
+ </ul>
+
+ </li>
+
+ <li>
+
+ <p>The XML document does <b>not</b> use a default namespace, all
+ namespace prefixes used are known to the style sheet author, and
+ there is a direct mapping between namespace prefixes and namespace
+ URIs. (A given prefix may only be mapped to one namespace URI
+ throughout the XML document; there may be multiple prefixes mapped
+ to the same URI).</p>
+
+ <ul>
+
+ <li>In this case, the down-level client will view and match
+ element type and attribute selectors based on their fully
+ qualified name, not the local part as outlined in the <a
+ href="#typenmsp">Type selectors and Namespaces</a> section. CSS
+ selectors may be declared using an escaped colon "<code>\:</code>"
+ to describe the fully qualified names, e.g.
+ "<code>html\:h1</code>" will match
+ <code>&lt;html:h1&gt;</code>. Selectors using the qualified name
+ will only match XML elements that use the same prefix. Other
+ namespace prefixes used in the XML that are mapped to the same URI
+ will not match as expected unless additional CSS style rules are
+ declared for them.</li>
+
+ <li>Note that selectors declared in this fashion will
+ <em>only</em> match in down-level clients. A CSS namespace aware
+ client will match element type and attribute selectors based on
+ the name's local part. Selectors declared with the fully
+ qualified name will not match (unless there is no namespace prefix
+ in the fully qualified name).</li>
+
+ </ul>
+
+ </li>
+
+ </ol>
+
+<p>In other scenarios: when the namespace prefixes used in the XML are
+not known in advance by the style sheet author; or a combination of
+elements with no namespace are used in conjunction with elements using
+a default namespace; or the same namespace prefix is mapped to
+<em>different</em> namespace URIs within the same document, or in
+different documents; it is impossible to construct a CSS style sheet
+that will function properly against all elements in those documents,
+unless, the style sheet is written using a namespace URI syntax (as
+outlined in this document or similar) and the document is processed by
+a CSS and XML namespace aware client.</p>
+
+<h2><a name=profiling>12. Profiles</a></h2>
+
+<p>Each specification using Selectors must define the subset of W3C
+Selectors it allows and excludes, and describe the local meaning of
+all the components of that subset.</p>
+
+<p>Non normative examples:
+
+<div class="profile">
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>CSS level 1</td></tr>
+ <tr>
+ <th>Accepts</th>
+ <td>type selectors<br>class selectors<br>ID selectors<br>:link,
+ :visited and :active pseudo-classes<br>descendant combinator
+ <br>::first-line and ::first-letter pseudo-elements</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>
+
+<p>universal selector<br>attribute selectors<br>:hover and :focus
+ pseudo-classes<br>:target pseudo-class<br>:lang() pseudo-class<br>all UI
+ element states pseudo-classes<br>all structural
+ pseudo-classes<br>negation pseudo-class<br>all
+ UI element fragments pseudo-elements<br>::before and ::after
+ pseudo-elements<br>child combinators<br>sibling combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>only one class selector allowed per sequence of simple
+ selectors</td></tr></tbody></table><br><br>
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>CSS level 2</td></tr>
+ <tr>
+ <th>Accepts</th>
+ <td>type selectors<br>universal selector<br>attribute presence and
+ values selectors<br>class selectors<br>ID selectors<br>:link, :visited,
+ :active, :hover, :focus, :lang() and :first-child pseudo-classes
+ <br>descendant combinator<br>child combinator<br>adjacent sibling
+ combinator<br>::first-line and ::first-letter pseudo-elements<br>::before
+ and ::after pseudo-elements</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>
+
+<p>content selectors<br>substring matching attribute
+ selectors<br>:target pseudo-classes<br>all UI element
+ states pseudo-classes<br>all structural pseudo-classes other
+ than :first-child<br>negation pseudo-class<br>all UI element
+ fragments pseudo-elements<br>general sibling combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>more than one class selector per sequence of simple selectors (CSS1
+ constraint) allowed</td></tr></tbody></table>
+
+<p>In CSS, selectors express pattern matching rules that determine which style
+rules apply to elements in the document tree.
+
+<p>The following selector (CSS level 2) will <b>match</b> all anchors <code>a</code>
+with attribute <code>name</code> set inside a section 1 header <code>h1</code>:
+<pre>h1 a[name]</pre>
+
+<p>All CSS declarations attached to such a selector are applied to elements
+matching it. </div>
+
+<div class="profile">
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>STTS 3</td>
+ </tr>
+ <tr>
+ <th>Accepts</th>
+ <td>
+
+<p>type selectors<br>universal selectors<br>attribute selectors<br>class
+ selectors<br>ID selectors<br>all structural pseudo-classes<br>
+ all combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>non-accepted pseudo-classes<br>pseudo-elements<br></td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>some selectors and combinators are not allowed in fragment
+ descriptions on the right side of STTS declarations.</td></tr></tbody></table>
+<form>
+<input type="text" name="test10"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+</form>
+
+<p>Selectors can be used in STTS 3 in two different
+ manners:
+<ol>
+ <li>a selection mechanism equivalent to CSS selection mechanism: declarations
+ attached to a given selector are applied to elements matching that selector,
+ <li>fragment descriptions that appear on the right side of declarations.
+</li></ol></div>
+
+<h2><a name=Conformance></a>13. Conformance and requirements</h2>
+
+<p>This section defines conformance with the present specification only.
+
+<p>The inability of a user agent to implement part of this specification due to
+the limitations of a particular device (e.g., non interactive user agents will
+probably not implement dynamic pseudo-classes because they make no sense without
+interactivity) does not imply non-conformance.
+
+<p>All specifications reusing Selectors must contain a <a
+href="#profiling">Profile</a> listing the
+subset of Selectors it accepts or excludes, and describing the constraints
+it adds to the current specification.
+
+<p>Invalidity is caused by a parsing error, e.g. an unrecognized token or a token
+which is not allowed at the current parsing point.
+
+<p>User agents must observe the rules for handling parsing errors:
+<ul>
+ <li>a simple selector containing an undeclared namespace prefix is invalid</li>
+ <li>a selector containing an invalid simple selector, an invalid combinator
+ or an invalid token is invalid. </li>
+ <li>a group of selectors containing an invalid selector is invalid.</li>
+</ul>
+
+<p class="foo test10 bar">Specifications reusing Selectors must define how to handle parsing
+errors. (In the case of CSS, the entire rule in which the selector is
+used is dropped.)</p>
+
+<!-- Apparently all these references are out of date:
+<p>Implementations of this specification must behave as
+"recipients of text data" as defined by <a href="#refsCWWW">[CWWW]</a>
+when parsing selectors and attempting matches. (In particular,
+implementations must assume the data is normalized and must not
+normalize it.) Normative rules for matching strings are defined in
+<a href="#refsCWWW">[CWWW]</a> and <a
+href="#refsUNICODE">[UNICODE]</a> and apply to implementations of this
+specification.</p>-->
+
+<h2><a name=Tests></a>14. Tests</h2>
+
+<p>This specification has <a
+href="http://www.w3.org/Style/CSS/Test/CSS3/Selectors/current/">a test
+suite</a> allowing user agents to verify their basic conformance to
+the specification. This test suite does not pretend to be exhaustive
+and does not cover all possible combined cases of Selectors.</p>
+
+<h2><a name=ACKS></a>15. Acknowledgements</h2>
+
+<p>The CSS working group would like to thank everyone who has sent
+comments on this specification over the years.</p>
+
+<p>The working group would like to extend special thanks to Donna
+McManus, Justin Baker, Joel Sklar, and Molly Ives Brower who perfermed
+the final editorial review.</p>
+
+<h2><a name=references>16. References</a></h2>
+
+<dl class="refs">
+
+ <dt>[CSS1]
+ <dd><a name=refsCSS1></a> Bert Bos, H&aring;kon Wium Lie; "<cite>Cascading Style Sheets, level 1</cite>", W3C Recommendation, 17 Dec 1996, revised 11 Jan 1999
+ <dd>(<code><a href="http://www.w3.org/TR/REC-CSS1">http://www.w3.org/TR/REC-CSS1</a></code>)
+
+ <dt>[CSS21]
+ <dd><a name=refsCSS21></a> Bert Bos, Tantek &Ccedil;elik, Ian Hickson, H&aring;kon Wium Lie, editors; "<cite>Cascading Style Sheets, level 2 revision 1</cite>", W3C Working Draft, 13 June 2005
+ <dd>(<code><a href="http://www.w3.org/TR/CSS21">http://www.w3.org/TR/CSS21</a></code>)
+
+ <dt>[CWWW]
+ <dd><a name=refsCWWW></a> Martin J. D&uuml;rst, Fran&ccedil;ois Yergeau, Misha Wolf, Asmus Freytag, Tex Texin, editors; "<cite>Character Model for the World Wide Web</cite>", W3C Recommendation, 15 February 2005
+ <dd>(<code><a href="http://www.w3.org/TR/charmod/">http://www.w3.org/TR/charmod/</a></code>)
+
+ <dt>[FLEX]
+ <dd><a name="refsFLEX"></a> "<cite>Flex: The Lexical Scanner Generator</cite>", Version 2.3.7, ISBN 1882114213
+
+ <dt>[HTML4]
+ <dd><a name="refsHTML4"></a> Dave Ragget, Arnaud Le Hors, Ian Jacobs, editors; "<cite>HTML 4.01 Specification</cite>", W3C Recommendation, 24 December 1999
+ <dd>(<a href="http://www.w3.org/TR/html4/"><code>http://www.w3.org/TR/html4/</code></a>)
+
+ <dt>[MATH]
+ <dd><a name="refsMATH"></a> Patrick Ion, Robert Miner, editors; "<cite>Mathematical Markup Language (MathML) 1.01</cite>", W3C Recommendation, revision of 7 July 1999
+ <dd>(<code><a href="http://www.w3.org/TR/REC-MathML/">http://www.w3.org/TR/REC-MathML/</a></code>)
+
+ <dt>[RFC3066]
+ <dd><a name="refsRFC3066"></a> H. Alvestrand; "<cite>Tags for the Identification of Languages</cite>", Request for Comments 3066, January 2001
+ <dd>(<a href="http://www.ietf.org/rfc/rfc3066.txt"><code>http://www.ietf.org/rfc/rfc3066.txt</code></a>)
+
+ <dt>[STTS]
+ <dd><a name=refsSTTS></a> Daniel Glazman; "<cite>Simple Tree Transformation Sheets 3</cite>", Electricit&eacute; de France, submission to the W3C, 11 November 1998
+ <dd>(<code><a href="http://www.w3.org/TR/NOTE-STTS3">http://www.w3.org/TR/NOTE-STTS3</a></code>)
+
+ <dt>[SVG]
+ <dd><a name="refsSVG"></a> Jon Ferraiolo, &#34276;&#27810; &#28147;, Dean Jackson, editors; "<cite>Scalable Vector Graphics (SVG) 1.1 Specification</cite>", W3C Recommendation, 14 January 2003
+ <dd>(<code><a href="http://www.w3.org/TR/SVG/">http://www.w3.org/TR/SVG/</a></code>)
+
+ <dt>[UNICODE]</dt>
+ <dd><a name="refsUNICODE"></a> <cite><a
+ href="http://www.unicode.org/versions/Unicode4.1.0/">The Unicode Standard, Version 4.1</a></cite>, The Unicode Consortium. Boston, MA, Addison-Wesley, March 2005. ISBN 0-321-18578-1, as amended by <a href="http://www.unicode.org/versions/Unicode4.0.1/">Unicode 4.0.1</a> and <a href="http://www.unicode.org/versions/Unicode4.1.0/">Unicode 4.1.0</a>.
+ <dd>(<code><a href="http://www.unicode.org/versions/">http://www.unicode.org/versions/</a></code>)</dd>
+
+ <dt>[XML10]
+ <dd><a name="refsXML10"></a> Tim Bray, Jean Paoli, C. M. Sperberg-McQueen, Eve Maler, Fran&ccedil;ois Yergeau, editors; "<cite>Extensible Markup Language (XML) 1.0 (Third Edition)</cite>", W3C Recommendation, 4 February 2004
+ <dd>(<a href="http://www.w3.org/TR/REC-xml/"><code>http://www.w3.org/TR/REC-xml/</code></a>)
+
+ <dt>[XMLNAMES]
+ <dd><a name="refsXMLNAMES"></a> Tim Bray, Dave Hollander, Andrew Layman, editors; "<cite>Namespaces in XML</cite>", W3C Recommendation, 14 January 1999
+ <dd>(<a href="http://www.w3.org/TR/REC-xml-names/"><code>http://www.w3.org/TR/REC-xml-names/</code></a>)
+
+ <dt>[YACC]
+ <dd><a name="refsYACC"></a> S. C. Johnson; "<cite>YACC &mdash; Yet another compiler compiler</cite>", Technical Report, Murray Hill, 1975
+
+</dl>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/dom-attr.html b/testing/talos/talos/tests/dromaeo/tests/dom-attr.html
new file mode 100644
index 0000000000..3415fcdcd4
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/dom-attr.html
@@ -0,0 +1,2943 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script>
+window.onload = function(){
+startTest("dom-attr", '81a4dbd0');
+
+// Try to force real results
+var ret, tmp;
+
+var elem = document.getElementById("test1");
+var a = document.getElementsByTagName("a")[0];
+var num = 10240;
+
+ test( "getAttribute", function(){
+ for ( var i = 0; i < num; i++ )
+ ret = elem.getAttribute("id");
+ });
+
+ test( "element.property", function(){
+ for ( var i = 0; i < num * 2; i++ )
+ ret = elem.id;
+ });
+
+ test( "setAttribute", function(){
+ for ( var i = 0; i < num; i++ )
+ a.setAttribute("id", "foo");
+ });
+
+ test( "element.property = value", function(){
+ for ( var i = 0; i < num; i++ )
+ a.id = "foo";
+ });
+
+ test( "element.expando = value", function(){
+ for ( var i = 0; i < num; i++ )
+ a["test" + num] = function(){};
+ });
+
+ test( "element.expando", function(){
+ for ( var i = 0; i < num; i++ )
+ ret = a["test" + num];
+ });
+
+endTest();
+};
+</script>
+</head>
+<body>
+ <div class="head">
+ <p><a href="http://www.w3.org/"><img height=48 alt=W3C src="w3c_home.png" width=72></a>
+
+ <h1 id="title">Selectors</h1>
+
+ <h2>W3C Working Draft 15 December 2005</h2>
+
+ <dl>
+
+ <dt>This version:
+
+ <dd><a href="http://www.w3.org/TR/2005/WD-css3-selectors-20051215">
+ http://www.w3.org/TR/2005/WD-css3-selectors-20051215</a>
+
+ <dt>Latest version:
+
+ <dd><a href="http://www.w3.org/TR/css3-selectors">
+ http://www.w3.org/TR/css3-selectors</a>
+
+ <dt>Previous version:
+
+ <dd><a href="http://www.w3.org/TR/2001/CR-css3-selectors-20011113">
+ http://www.w3.org/TR/2001/CR-css3-selectors-20011113</a>
+
+ <dt><a name=editors-list></a>Editors:
+
+ <dd class="vcard"><span class="fn">Daniel Glazman</span> (Invited Expert)</dd>
+
+ <dd class="vcard"><a lang="tr" class="url fn" href="http://www.tantek.com/">Tantek &Ccedil;elik</a> (Invited Expert)
+
+ <dd class="vcard"><a href="mailto:ian@hixie.ch" class="url fn">Ian Hickson</a> (<span
+ class="company"><a href="http://www.google.com/">Google</a></span>)
+
+ <dd class="vcard"><span class="fn">Peter Linss</span> (former editor, <span class="company"><a
+ href="http://www.netscape.com/">Netscape/AOL</a></span>)
+
+ <dd class="vcard"><span class="fn">John Williams</span> (former editor, <span class="company"><a
+ href="http://www.quark.com/">Quark, Inc.</a></span>)
+
+ </dl>
+
+ <p class="copyright"><a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright">
+ Copyright</a> &copy; 2005 <a href="http://www.w3.org/"><abbr
+ title="World Wide Web Consortium">W3C</abbr></a><sup>&reg;</sup>
+ (<a href="http://www.csail.mit.edu/"><abbr title="Massachusetts
+ Institute of Technology">MIT</abbr></a>, <a
+ href="http://www.ercim.org/"><acronym title="European Research
+ Consortium for Informatics and Mathematics">ERCIM</acronym></a>, <a
+ href="http://www.keio.ac.jp/">Keio</a>), All Rights Reserved. W3C
+ <a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">liability</a>,
+ <a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">trademark</a>,
+ <a
+ href="http://www.w3.org/Consortium/Legal/copyright-documents">document
+ use</a> rules apply.
+
+ <hr title="Separator for header">
+
+ </div>
+
+ <h2><a name=abstract></a>Abstract</h2>
+
+ <p><em>Selectors</em> are patterns that match against elements in a
+ tree. Selectors have been optimized for use with HTML and XML, and
+ are designed to be usable in performance-critical code.</p>
+
+ <p><acronym title="Cascading Style Sheets">CSS</acronym> (Cascading
+ Style Sheets) is a language for describing the rendering of <acronym
+ title="Hypertext Markup Language">HTML</acronym> and <acronym
+ title="Extensible Markup Language">XML</acronym> documents on
+ screen, on paper, in speech, etc. CSS uses Selectors for binding
+ style properties to elements in the document. This document
+ describes extensions to the selectors defined in CSS level 2. These
+ extended selectors will be used by CSS level 3.
+
+ <p>Selectors define the following function:</p>
+
+ <pre>expression &#x2217; element &rarr; boolean</pre>
+
+ <p>That is, given an element and a selector, this specification
+ defines whether that element matches the selector.</p>
+
+ <p>These expressions can also be used, for instance, to select a set
+ of elements, or a single element from a set of elements, by
+ evaluating the expression across all the elements in a
+ subtree. <acronym title="Simple Tree Transformation
+ Sheets">STTS</acronym> (Simple Tree Transformation Sheets), a
+ language for transforming XML trees, uses this mechanism. <a href="#refsSTTS">[STTS]</a></p>
+
+ <h2><a name=status></a>Status of this document</h2>
+
+ <p><em>This section describes the status of this document at the
+ time of its publication. Other documents may supersede this
+ document. A list of current W3C publications and the latest revision
+ of this technical report can be found in the <a
+ href="http://www.w3.org/TR/">W3C technical reports index at
+ http://www.w3.org/TR/.</a></em></p>
+
+ <p>This document describes the selectors that already exist in <a
+ href="#refsCSS1"><abbr title="CSS level 1">CSS1</abbr></a> and <a
+ href="#refsCSS21"><abbr title="CSS level 2">CSS2</abbr></a>, and
+ also proposes new selectors for <abbr title="CSS level
+ 3">CSS3</abbr> and other languages that may need them.</p>
+
+ <p>The CSS Working Group doesn't expect that all implementations of
+ CSS3 will have to implement all selectors. Instead, there will
+ probably be a small number of variants of CSS3, called profiles. For
+ example, it may be that only a profile for interactive user agents
+ will include all of the selectors.</p>
+
+ <p>This specification is a last call working draft for the the <a
+ href="http://www.w3.org/Style/CSS/members">CSS Working Group</a>
+ (<a href="/Style/">Style Activity</a>). This
+ document is a revision of the <a
+ href="http://www.w3.org/TR/2001/CR-css3-selectors-20011113/">Candidate
+ Recommendation dated 2001 November 13</a>, and has incorporated
+ implementation feedback received in the past few years. It is
+ expected that this last call will proceed straight to Proposed
+ Recommendation stage since it is believed that interoperability will
+ be demonstrable.</p>
+
+ <p>All persons are encouraged to review and implement this
+ specification and return comments to the (<a
+ href="http://lists.w3.org/Archives/Public/www-style/">archived</a>)
+ public mailing list <a
+ href="http://www.w3.org/Mail/Lists.html#www-style">www-style</a>
+ (see <a href="http://www.w3.org/Mail/Request">instructions</a>). W3C
+ Members can also send comments directly to the CSS Working
+ Group.
+ The deadline for comments is 14 January 2006.</p>
+
+ <p>This is still a draft document and may be updated, replaced, or
+ obsoleted by other documents at any time. It is inappropriate to
+ cite a W3C Working Draft as other than &quot;work in progress&quot;.
+
+ <p>This document may be available in <a
+ href="http://www.w3.org/Style/css3-selectors-updates/translations">translation</a>.
+ The English version of this specification is the only normative
+ version.
+
+ <div class="subtoc">
+
+ <h2 id="test1"><a name=contents>Table of contents</a></h2>
+
+ <ul class="toc">
+ <li class="tocline2"><a href="#context">1. Introduction</a>
+ <ul>
+ <li><a href="#dependencies">1.1. Dependencies</a> </li>
+ <li><a href="#terminology">1.2. Terminology</a> </li>
+ <li><a href="#changesFromCSS2">1.3. Changes from CSS2</a> </li>
+ </ul>
+ <li class="tocline2"><a href="#selectors">2. Selectors</a>
+ <li class="tocline2"><a href="#casesens">3. Case sensitivity</a>
+ <li class="tocline2"><a href="#selector-syntax">4. Selector syntax</a>
+ <li class="tocline2"><a href="#grouping">5. Groups of selectors</a>
+ <li class="tocline2"><a href="#simple-selectors">6. Simple selectors</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#type-selectors">6.1. Type selectors</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#typenmsp">6.1.1. Type selectors and namespaces</a></li>
+ </ul>
+ <li class="tocline3"><a href="#universal-selector">6.2. Universal selector</a>
+ <ul>
+ <li><a href="#univnmsp">6.2.1. Universal selector and namespaces</a></li>
+ </ul>
+ <li class="tocline3"><a href="#attribute-selectors">6.3. Attribute selectors</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#attribute-representation">6.3.1. Representation of attributes and attributes values</a>
+ <li><a href="#attribute-substrings">6.3.2. Substring matching attribute selectors</a>
+ <li class="tocline4"><a href="#attrnmsp">6.3.3. Attribute selectors and namespaces</a>
+ <li class="tocline4"><a href="#def-values">6.3.4. Default attribute values in DTDs</a></li>
+ </ul>
+ <li class="tocline3"><a href="#class-html">6.4. Class selectors</a>
+ <li class="tocline3"><a href="#id-selectors">6.5. ID selectors</a>
+ <li class="tocline3"><a href="#pseudo-classes">6.6. Pseudo-classes</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#dynamic-pseudos">6.6.1. Dynamic pseudo-classes</a>
+ <li class="tocline4"><a href="#target-pseudo">6.6.2. The :target pseudo-class</a>
+ <li class="tocline4"><a href="#lang-pseudo">6.6.3. The :lang() pseudo-class</a>
+ <li class="tocline4"><a href="#UIstates">6.6.4. UI element states pseudo-classes</a>
+ <li class="tocline4"><a href="#structural-pseudos">6.6.5. Structural pseudo-classes</a>
+ <ul>
+ <li><a href="#root-pseudo">:root pseudo-class</a>
+ <li><a href="#nth-child-pseudo">:nth-child() pseudo-class</a>
+ <li><a href="#nth-last-child-pseudo">:nth-last-child()</a>
+ <li><a href="#nth-of-type-pseudo">:nth-of-type() pseudo-class</a>
+ <li><a href="#nth-last-of-type-pseudo">:nth-last-of-type()</a>
+ <li><a href="#first-child-pseudo">:first-child pseudo-class</a>
+ <li><a href="#last-child-pseudo">:last-child pseudo-class</a>
+ <li><a href="#first-of-type-pseudo">:first-of-type pseudo-class</a>
+ <li><a href="#last-of-type-pseudo">:last-of-type pseudo-class</a>
+ <li><a href="#only-child-pseudo">:only-child pseudo-class</a>
+ <li><a href="#only-of-type-pseudo">:only-of-type pseudo-class</a>
+ <li><a href="#empty-pseudo">:empty pseudo-class</a></li>
+ </ul>
+ <li class="tocline4"><a href="#negation">6.6.7. The negation pseudo-class</a></li>
+ </ul>
+ </li>
+ </ul>
+ <li><a href="#pseudo-elements">7. Pseudo-elements</a>
+ <ul>
+ <li><a href="#first-line">7.1. The ::first-line pseudo-element</a>
+ <li><a href="#first-letter">7.2. The ::first-letter pseudo-element</a>
+ <li><a href="#UIfragments">7.3. The ::selection pseudo-element</a>
+ <li><a href="#gen-content">7.4. The ::before and ::after pseudo-elements</a></li>
+ </ul>
+ <li class="tocline2"><a href="#combinators">8. Combinators</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#descendant-combinators">8.1. Descendant combinators</a>
+ <li class="tocline3"><a href="#child-combinators">8.2. Child combinators</a>
+ <li class="tocline3"><a href="#sibling-combinators">8.3. Sibling combinators</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#adjacent-sibling-combinators">8.3.1. Adjacent sibling combinator</a>
+ <li class="tocline4"><a href="#general-sibling-combinators">8.3.2. General sibling combinator</a></li>
+ </ul>
+ </li>
+ </ul>
+ <li class="tocline2"><a href="#specificity">9. Calculating a selector's specificity</a>
+ <li class="tocline2"><a href="#w3cselgrammar">10. The grammar of Selectors</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#grammar">10.1. Grammar</a>
+ <li class="tocline3"><a href="#lex">10.2. Lexical scanner</a></li>
+ </ul>
+ <li class="tocline2"><a href="#downlevel">11. Namespaces and down-level clients</a>
+ <li class="tocline2"><a href="#profiling">12. Profiles</a>
+ <li><a href="#Conformance">13. Conformance and requirements</a>
+ <li><a href="#Tests">14. Tests</a>
+ <li><a href="#ACKS">15. Acknowledgements</a>
+ <li class="tocline2"><a href="#references">16. References</a>
+ </ul>
+
+ </div>
+
+ <h2><a name=context>1. Introduction</a></h2>
+
+ <h3><a name=dependencies></a>1.1. Dependencies</h3>
+
+ <p>Some features of this specification are specific to CSS, or have
+ particular limitations or rules specific to CSS. In this
+ specification, these have been described in terms of CSS2.1. <a
+ href="#refsCSS21">[CSS21]</a></p>
+
+ <h3><a name=terminology></a>1.2. Terminology</h3>
+
+ <p>All of the text of this specification is normative except
+ examples, notes, and sections explicitly marked as
+ non-normative.</p>
+
+ <h3><a name=changesFromCSS2></a>1.3. Changes from CSS2</h3>
+
+ <p><em>This section is non-normative.</em></p>
+
+ <p>The main differences between the selectors in CSS2 and those in
+ Selectors are:
+
+ <ul>
+
+ <li>the list of basic definitions (selector, group of selectors,
+ simple selector, etc.) has been changed; in particular, what was
+ referred to in CSS2 as a simple selector is now called a sequence
+ of simple selectors, and the term "simple selector" is now used for
+ the components of this sequence</li>
+
+ <li>an optional namespace component is now allowed in type element
+ selectors, the universal selector and attribute selectors</li>
+
+ <li>a <a href="#general-sibling-combinators">new combinator</a> has been introduced</li>
+
+ <li>new simple selectors including substring matching attribute
+ selectors, and new pseudo-classes</li>
+
+ <li>new pseudo-elements, and introduction of the "::" convention
+ for pseudo-elements</li>
+
+ <li>the grammar has been rewritten</li>
+
+ <li>profiles to be added to specifications integrating Selectors
+ and defining the set of selectors which is actually supported by
+ each specification</li>
+
+ <li>Selectors are now a CSS3 Module and an independent
+ specification; other specifications can now refer to this document
+ independently of CSS</li>
+
+ <li>the specification now has its own test suite</li>
+
+ </ul>
+
+<h2><a name=selectors></a>2. Selectors</h2>
+
+<p><em>This section is non-normative, as it merely summarizes the
+following sections.</em></p>
+
+<p>A Selector represents a structure. This structure can be used as a
+condition (e.g. in a CSS rule) that determines which elements a
+selector matches in the document tree, or as a flat description of the
+HTML or XML fragment corresponding to that structure.</p>
+
+<p>Selectors may range from simple element names to rich contextual
+representations.</p>
+
+<p>The following table summarizes the Selector syntax:</p>
+
+<table class="selectorsReview">
+ <thead>
+ <tr>
+ <th class="pattern">Pattern</th>
+ <th class="meaning">Meaning</th>
+ <th class="described">Described in section</th>
+ <th class="origin">First defined in CSS level</th></tr>
+ <tbody>
+ <tr>
+ <td class="pattern">*</td>
+ <td class="meaning">any element</td>
+ <td class="described"><a
+ href="#universal-selector">Universal
+ selector</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E</td>
+ <td class="meaning">an element of type E</td>
+ <td class="described"><a
+ href="#type-selectors">Type selector</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E[foo]</td>
+ <td class="meaning">an E element with a "foo" attribute</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value is exactly
+ equal to "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo~="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value is a list of
+ space-separated values, one of which is exactly equal to "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo^="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value begins exactly
+ with the string "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[foo$="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value ends exactly
+ with the string "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[foo*="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value contains the
+ substring "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[hreflang|="en"]</td>
+ <td class="meaning">an E element whose "hreflang" attribute has a hyphen-separated
+ list of values beginning (from the left) with "en"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:root</td>
+ <td class="meaning">an E element, root of the document</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-child(n)</td>
+ <td class="meaning">an E element, the n-th child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-last-child(n)</td>
+ <td class="meaning">an E element, the n-th child of its parent, counting
+ from the last one</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-of-type(n)</td>
+ <td class="meaning">an E element, the n-th sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-last-of-type(n)</td>
+ <td class="meaning">an E element, the n-th sibling of its type, counting
+ from the last one</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:first-child</td>
+ <td class="meaning">an E element, first child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:last-child</td>
+ <td class="meaning">an E element, last child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:first-of-type</td>
+ <td class="meaning">an E element, first sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:last-of-type</td>
+ <td class="meaning">an E element, last sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:only-child</td>
+ <td class="meaning">an E element, only child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:only-of-type</td>
+ <td class="meaning">an E element, only sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:empty</td>
+ <td class="meaning">an E element that has no children (including text
+ nodes)</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:link<br>E:visited</td>
+ <td class="meaning">an E element being the source anchor of a hyperlink of
+ which the target is not yet visited (:link) or already visited
+ (:visited)</td>
+ <td class="described"><a
+ href="#link">The link
+ pseudo-classes</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E:active<br>E:hover<br>E:focus</td>
+ <td class="meaning">an E element during certain user actions</td>
+ <td class="described"><a
+ href="#useraction-pseudos">The user
+ action pseudo-classes</a></td>
+ <td class="origin">1 and 2</td></tr>
+ <tr>
+ <td class="pattern">E:target</td>
+ <td class="meaning">an E element being the target of the referring URI</td>
+ <td class="described"><a
+ href="#target-pseudo">The target
+ pseudo-class</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:lang(fr)</td>
+ <td class="meaning">an element of type E in language "fr" (the document
+ language specifies how language is determined)</td>
+ <td class="described"><a
+ href="#lang-pseudo">The :lang()
+ pseudo-class</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:enabled<br>E:disabled</td>
+ <td class="meaning">a user interface element E which is enabled or
+ disabled</td>
+ <td class="described"><a
+ href="#UIstates">The UI element states
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:checked<!--<br>E:indeterminate--></td>
+ <td class="meaning">a user interface element E which is checked<!-- or in an
+ indeterminate state--> (for instance a radio-button or checkbox)</td>
+ <td class="described"><a
+ href="#UIstates">The UI element states
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E::first-line</td>
+ <td class="meaning">the first formatted line of an E element</td>
+ <td class="described"><a
+ href="#first-line">The ::first-line
+ pseudo-element</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E::first-letter</td>
+ <td class="meaning">the first formatted letter of an E element</td>
+ <td class="described"><a
+ href="#first-letter">The ::first-letter
+ pseudo-element</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E::selection</td>
+ <td class="meaning">the portion of an E element that is currently
+ selected/highlighted by the user</td>
+ <td class="described"><a
+ href="#UIfragments">The UI element
+ fragments pseudo-elements</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E::before</td>
+ <td class="meaning">generated content before an E element</td>
+ <td class="described"><a
+ href="#gen-content">The ::before
+ pseudo-element</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E::after</td>
+ <td class="meaning">generated content after an E element</td>
+ <td class="described"><a
+ href="#gen-content">The ::after
+ pseudo-element</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E.warning</td>
+ <td class="meaning">an E element whose class is
+"warning" (the document language specifies how class is determined).</td>
+ <td class="described"><a
+ href="#class-html">Class
+ selectors</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E#myid</td>
+ <td class="meaning">an E element with ID equal to "myid".</td>
+ <td class="described"><a
+ href="#id-selectors">ID
+ selectors</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E:not(s)</td>
+ <td class="meaning">an E element that does not match simple selector s</td>
+ <td class="described"><a
+ href="#negation">Negation
+ pseudo-class</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E F</td>
+ <td class="meaning">an F element descendant of an E element</td>
+ <td class="described"><a
+ href="#descendant-combinators">Descendant
+ combinator</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E &gt; F</td>
+ <td class="meaning">an F element child of an E element</td>
+ <td class="described"><a
+ href="#child-combinators">Child
+ combinator</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E + F</td>
+ <td class="meaning">an F element immediately preceded by an E element</td>
+ <td class="described"><a
+ href="#adjacent-sibling-combinators">Adjacent sibling combinator</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E ~ F</td>
+ <td class="meaning">an F element preceded by an E element</td>
+ <td class="described"><a
+ href="#general-sibling-combinators">General sibling combinator</a></td>
+ <td class="origin">3</td></tr></tbody></table>
+
+<p>The meaning of each selector is derived from the table above by
+prepending "matches" to the contents of each cell in the "Meaning"
+column.</p>
+
+<h2><a name=casesens>3. Case sensitivity</a></h2>
+
+<p>The case sensitivity of document language element names, attribute
+names, and attribute values in selectors depends on the document
+language. For example, in HTML, element names are case-insensitive,
+but in XML, they are case-sensitive.</p>
+
+<h2><a name=selector-syntax>4. Selector syntax</a></h2>
+
+<p>A <dfn><a name=selector>selector</a></dfn> is a chain of one
+or more <a href="#sequence">sequences of simple selectors</a>
+separated by <a href="#combinators">combinators</a>.</p>
+
+<p>A <dfn><a name=sequence>sequence of simple selectors</a></dfn>
+is a chain of <a href="#simple-selectors-dfn">simple selectors</a>
+that are not separated by a <a href="#combinators">combinator</a>. It
+always begins with a <a href="#type-selectors">type selector</a> or a
+<a href="#universal-selector">universal selector</a>. No other type
+selector or universal selector is allowed in the sequence.</p>
+
+<p>A <dfn><a name=simple-selectors-dfn></a><a
+href="#simple-selectors">simple selector</a></dfn> is either a <a
+href="#type-selectors">type selector</a>, <a
+href="#universal-selector">universal selector</a>, <a
+href="#attribute-selectors">attribute selector</a>, <a
+href="#class-html">class selector</a>, <a
+href="#id-selectors">ID selector</a>, <a
+href="#content-selectors">content selector</a>, or <a
+href="#pseudo-classes">pseudo-class</a>. One <a
+href="#pseudo-elements">pseudo-element</a> may be appended to the last
+sequence of simple selectors.</p>
+
+<p><dfn>Combinators</dfn> are: white space, &quot;greater-than
+sign&quot; (U+003E, <code>&gt;</code>), &quot;plus sign&quot; (U+002B,
+<code>+</code>) and &quot;tilde&quot; (U+007E, <code>~</code>). White
+space may appear between a combinator and the simple selectors around
+it. <a name=whitespace></a>Only the characters "space" (U+0020), "tab"
+(U+0009), "line feed" (U+000A), "carriage return" (U+000D), and "form
+feed" (U+000C) can occur in white space. Other space-like characters,
+such as "em-space" (U+2003) and "ideographic space" (U+3000), are
+never part of white space.</p>
+
+<p>The elements of a document tree that are represented by a selector
+are the <dfn><a name=subject></a>subjects of the selector</dfn>. A
+selector consisting of a single sequence of simple selectors
+represents any element satisfying its requirements. Prepending another
+sequence of simple selectors and a combinator to a sequence imposes
+additional matching constraints, so the subjects of a selector are
+always a subset of the elements represented by the last sequence of
+simple selectors.</p>
+
+<p>An empty selector, containing no sequence of simple selectors and
+no pseudo-element, is an <a href="#Conformance">invalid
+selector</a>.</p>
+
+<h2><a name=grouping>5. Groups of selectors</a></h2>
+
+<p>When several selectors share the same declarations, they may be
+grouped into a comma-separated list. (A comma is U+002C.)</p>
+
+<div class="example">
+<p>CSS examples:</p>
+<p>In this example, we condense three rules with identical
+declarations into one. Thus,</p>
+<pre>h1 { font-family: sans-serif }
+h2 { font-family: sans-serif }
+h3 { font-family: sans-serif }</pre>
+<p>is equivalent to:</p>
+<pre>h1, h2, h3 { font-family: sans-serif }</pre>
+</div>
+
+<p><strong>Warning</strong>: the equivalence is true in this example
+because all the selectors are valid selectors. If just one of these
+selectors were invalid, the entire group of selectors would be
+invalid. This would invalidate the rule for all three heading
+elements, whereas in the former case only one of the three individual
+heading rules would be invalidated.</p>
+
+
+<h2><a name=simple-selectors>6. Simple selectors</a></h2>
+
+<h3><a name=type-selectors>6.1. Type selector</a></h3>
+
+<p>A <dfn>type selector</dfn> is the name of a document language
+element type. A type selector represents an instance of the element
+type in the document tree.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents an <code>h1</code> element in the document tree:</p>
+ <pre>h1</pre>
+</div>
+
+
+<h4><a name=typenmsp>6.1.1. Type selectors and namespaces</a></h4>
+
+<p>Type selectors allow an optional namespace (<a
+href="#refsXMLNAMES">[XMLNAMES]</a>) component. A namespace prefix
+that has been previously declared may be prepended to the element name
+separated by the namespace separator &quot;vertical bar&quot;
+(U+007C, <code>|</code>).</p>
+
+<p>The namespace component may be left empty to indicate that the
+selector is only to represent elements with no declared namespace.</p>
+
+<p>An asterisk may be used for the namespace prefix, indicating that
+the selector represents elements in any namespace (including elements
+with no namespace).</p>
+
+<p>Element type selectors that have no namespace component (no
+namespace separator), represent elements without regard to the
+element's namespace (equivalent to "<code>*|</code>") unless a default
+namespace has been declared. If a default namespace has been declared,
+the selector will represent only elements in the default
+namespace.</p>
+
+<p>A type selector containing a namespace prefix that has not been
+previously declared is an <a href="#Conformance">invalid</a> selector.
+The mechanism for declaring a namespace prefix is left up to the
+language implementing Selectors. In CSS, such a mechanism is defined
+in the General Syntax module.</p>
+
+<p>In a namespace-aware client, element type selectors will only match
+against the <a
+href="http://www.w3.org/TR/REC-xml-names/#NT-LocalPart">local part</a>
+of the element's <a
+href="http://www.w3.org/TR/REC-xml-names/#ns-qualnames">qualified
+name</a>. See <a href="#downlevel">below</a> for notes about matching
+behaviors in down-level clients.</p>
+
+<p>In summary:</p>
+
+<dl>
+ <dt><code>ns|E</code></dt>
+ <dd>elements with name E in namespace ns</dd>
+ <dt><code>*|E</code></dt>
+ <dd>elements with name E in any namespace, including those without any
+ declared namespace</dd>
+ <dt><code>|E</code></dt>
+ <dd>elements with name E without any declared namespace</dd>
+ <dt><code>E</code></dt>
+ <dd>if no default namespace has been specified, this is equivalent to *|E.
+ Otherwise it is equivalent to ns|E where ns is the default namespace.</dd>
+</dl>
+
+<div class="example">
+ <p>CSS examples:</p>
+
+ <pre>@namespace foo url(http://www.example.com);
+ foo|h1 { color: blue }
+ foo|* { color: yellow }
+ |h1 { color: red }
+ *|h1 { color: green }
+ h1 { color: green }</pre>
+
+ <p>The first rule will match only <code>h1</code> elements in the
+ "http://www.example.com" namespace.</p>
+
+ <p>The second rule will match all elements in the
+ "http://www.example.com" namespace.</p>
+
+ <p>The third rule will match only <code>h1</code> elements without
+ any declared namespace.</p>
+
+ <p>The fourth rule will match <code>h1</code> elements in any
+ namespace (including those without any declared namespace).</p>
+
+ <p>The last rule is equivalent to the fourth rule because no default
+ namespace has been defined.</p>
+
+</div>
+
+<h3><a name=universal-selector>6.2. Universal selector</a> </h3>
+
+<p>The <dfn>universal selector</dfn>, written &quot;asterisk&quot;
+(<code>*</code>), represents the qualified name of any element
+type. It represents any single element in the document tree in any
+namespace (including those without any declared namespace) if no
+default namespace has been specified. If a default namespace has been
+specified, see <a href="#univnmsp">Universal selector and
+Namespaces</a> below.</p>
+
+<p>If the universal selector is not the only component of a sequence
+of simple selectors, the <code>*</code> may be omitted.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <ul>
+ <li><code>*[hreflang|=en]</code> and <code>[hreflang|=en]</code> are equivalent,</li>
+ <li><code>*.warning</code> and <code>.warning</code> are equivalent,</li>
+ <li><code>*#myid</code> and <code>#myid</code> are equivalent.</li>
+ </ul>
+</div>
+
+<p class="note"><strong>Note:</strong> it is recommended that the
+<code>*</code>, representing the universal selector, not be
+omitted.</p>
+
+<h4><a name=univnmsp>6.2.1. Universal selector and namespaces</a></h4>
+
+<p>The universal selector allows an optional namespace component. It
+is used as follows:</p>
+
+<dl>
+ <dt><code>ns|*</code></dt>
+ <dd>all elements in namespace ns</dd>
+ <dt><code>*|*</code></dt>
+ <dd>all elements</dd>
+ <dt><code>|*</code></dt>
+ <dd>all elements without any declared namespace</dd>
+ <dt><code>*</code></dt>
+ <dd>if no default namespace has been specified, this is equivalent to *|*.
+ Otherwise it is equivalent to ns|* where ns is the default namespace.</dd>
+</dl>
+
+<p>A universal selector containing a namespace prefix that has not
+been previously declared is an <a href="#Conformance">invalid</a>
+selector. The mechanism for declaring a namespace prefix is left up
+to the language implementing Selectors. In CSS, such a mechanism is
+defined in the General Syntax module.</p>
+
+
+<h3><a name=attribute-selectors>6.3. Attribute selectors</a></h3>
+
+<p>Selectors allow the representation of an element's attributes. When
+a selector is used as an expression to match against an element,
+attribute selectors must be considered to match an element if that
+element has an attribute that matches the attribute represented by the
+attribute selector.</p>
+
+<h4><a name=attribute-representation>6.3.1. Attribute presence and values
+selectors</a></h4>
+
+<p>CSS2 introduced four attribute selectors:</p>
+
+<dl>
+ <dt><code>[att]</code>
+ <dd>Represents an element with the <code>att</code> attribute, whatever the value of
+ the attribute.</dd>
+ <dt><code>[att=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value is exactly
+ "val".</dd>
+ <dt><code>[att~=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value is a <a
+ href="#whitespace">whitespace</a>-separated list of words, one of
+ which is exactly "val". If "val" contains whitespace, it will never
+ represent anything (since the words are <em>separated</em> by
+ spaces).</dd>
+ <dt><code>[att|=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute, its value either
+ being exactly "val" or beginning with "val" immediately followed by
+ "-" (U+002D). This is primarily intended to allow language subcode
+ matches (e.g., the <code>hreflang</code> attribute on the
+ <code>link</code> element in HTML) as described in RFC 3066 (<a
+ href="#refsRFC3066">[RFC3066]</a>). For <code>lang</code> (or
+ <code>xml:lang</code>) language subcode matching, please see <a
+ href="#lang-pseudo">the <code>:lang</code> pseudo-class</a>.</dd>
+</dl>
+
+<p>Attribute values must be identifiers or strings. The
+case-sensitivity of attribute names and values in selectors depends on
+the document language.</p>
+
+<div class="example">
+
+ <p>Examples:</p>
+
+ <p>The following attribute selector represents an <code>h1</code>
+ element that carries the <code>title</code> attribute, whatever its
+ value:</p>
+
+ <pre>h1[title]</pre>
+
+ <p>In the following example, the selector represents a
+ <code>span</code> element whose <code>class</code> attribute has
+ exactly the value "example":</p>
+
+ <pre>span[class="example"]</pre>
+
+ <p>Multiple attribute selectors can be used to represent several
+ attributes of an element, or several conditions on the same
+ attribute. Here, the selector represents a <code>span</code> element
+ whose <code>hello</code> attribute has exactly the value "Cleveland"
+ and whose <code>goodbye</code> attribute has exactly the value
+ "Columbus":</p>
+
+ <pre>span[hello="Cleveland"][goodbye="Columbus"]</pre>
+
+ <p>The following selectors illustrate the differences between "="
+ and "~=". The first selector will represent, for example, the value
+ "copyright copyleft copyeditor" on a <code>rel</code> attribute. The
+ second selector will only represent an <code>a</code> element with
+ an <code>href</code> attribute having the exact value
+ "http://www.w3.org/".</p>
+
+ <pre>a[rel~="copyright"]
+a[href="http://www.w3.org/"]</pre>
+
+ <p>The following selector represents a <code>link</code> element
+ whose <code>hreflang</code> attribute is exactly "fr".</p>
+
+ <pre>link[hreflang=fr]</pre>
+
+ <p>The following selector represents a <code>link</code> element for
+ which the values of the <code>hreflang</code> attribute begins with
+ "en", including "en", "en-US", and "en-cockney":</p>
+
+ <pre>link[hreflang|="en"]</pre>
+
+ <p>Similarly, the following selectors represents a
+ <code>DIALOGUE</code> element whenever it has one of two different
+ values for an attribute <code>character</code>:</p>
+
+ <pre>DIALOGUE[character=romeo]
+DIALOGUE[character=juliet]</pre>
+
+</div>
+
+<h4><a name=attribute-substrings></a>6.3.2. Substring matching attribute
+selectors</h4>
+
+<p>Three additional attribute selectors are provided for matching
+substrings in the value of an attribute:</p>
+
+<dl>
+ <dt><code>[att^=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value begins
+ with the prefix "val".</dd>
+ <dt><code>[att$=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute whose value ends with
+ the suffix "val".</dd>
+ <dt><code>[att*=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute whose value contains
+ at least one instance of the substring "val".</dd>
+</dl>
+
+<p>Attribute values must be identifiers or strings. The
+case-sensitivity of attribute names in selectors depends on the
+document language.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents an HTML <code>object</code>, referencing an
+ image:</p>
+ <pre>object[type^="image/"]</pre>
+ <p>The following selector represents an HTML anchor <code>a</code> with an
+ <code>href</code> attribute whose value ends with ".html".</p>
+ <pre>a[href$=".html"]</pre>
+ <p>The following selector represents an HTML paragraph with a <code>title</code>
+ attribute whose value contains the substring "hello"</p>
+ <pre>p[title*="hello"]</pre>
+</div>
+
+<h4><a name=attrnmsp>6.3.3. Attribute selectors and namespaces</a></h4>
+
+<p>Attribute selectors allow an optional namespace component to the
+attribute name. A namespace prefix that has been previously declared
+may be prepended to the attribute name separated by the namespace
+separator &quot;vertical bar&quot; (<code>|</code>). In keeping with
+the Namespaces in the XML recommendation, default namespaces do not
+apply to attributes, therefore attribute selectors without a namespace
+component apply only to attributes that have no declared namespace
+(equivalent to "<code>|attr</code>"). An asterisk may be used for the
+namespace prefix indicating that the selector is to match all
+attribute names without regard to the attribute's namespace.
+
+<p>An attribute selector with an attribute name containing a namespace
+prefix that has not been previously declared is an <a
+href="#Conformance">invalid</a> selector. The mechanism for declaring
+a namespace prefix is left up to the language implementing Selectors.
+In CSS, such a mechanism is defined in the General Syntax module.
+
+<div class="example">
+ <p>CSS examples:</p>
+ <pre>@namespace foo "http://www.example.com";
+[foo|att=val] { color: blue }
+[*|att] { color: yellow }
+[|att] { color: green }
+[att] { color: green }</pre>
+
+ <p>The first rule will match only elements with the attribute
+ <code>att</code> in the "http://www.example.com" namespace with the
+ value "val".</p>
+
+ <p>The second rule will match only elements with the attribute
+ <code>att</code> regardless of the namespace of the attribute
+ (including no declared namespace).</p>
+
+ <p>The last two rules are equivalent and will match only elements
+ with the attribute <code>att</code> where the attribute is not
+ declared to be in a namespace.</p>
+
+</div>
+
+<h4><a name=def-values>6.3.4. Default attribute values in DTDs</a></h4>
+
+<p>Attribute selectors represent explicitly set attribute values in
+the document tree. Default attribute values may be defined in a DTD or
+elsewhere, but cannot always be selected by attribute
+selectors. Selectors should be designed so that they work even if the
+default values are not included in the document tree.</p>
+
+<p>More precisely, a UA is <em>not</em> required to read an "external
+subset" of the DTD but <em>is</em> required to look for default
+attribute values in the document's "internal subset." (See <a
+href="#refsXML10">[XML10]</a> for definitions of these subsets.)</p>
+
+<p>A UA that recognizes an XML namespace <a
+href="#refsXMLNAMES">[XMLNAMES]</a> is not required to use its
+knowledge of that namespace to treat default attribute values as if
+they were present in the document. (For example, an XHTML UA is not
+required to use its built-in knowledge of the XHTML DTD.)</p>
+
+<p class="note"><strong>Note:</strong> Typically, implementations
+choose to ignore external subsets.</p>
+
+<div class="example">
+<p>Example:</p>
+
+<p>Consider an element EXAMPLE with an attribute "notation" that has a
+default value of "decimal". The DTD fragment might be</p>
+
+<pre class="dtd-example">&lt;!ATTLIST EXAMPLE notation (decimal,octal) "decimal"></pre>
+
+<p>If the style sheet contains the rules</p>
+
+<pre>EXAMPLE[notation=decimal] { /*... default property settings ...*/ }
+EXAMPLE[notation=octal] { /*... other settings...*/ }</pre>
+
+<p>the first rule will not match elements whose "notation" attribute
+is set by default, i.e. not set explicitly. To catch all cases, the
+attribute selector for the default value must be dropped:</p>
+
+<pre>EXAMPLE { /*... default property settings ...*/ }
+EXAMPLE[notation=octal] { /*... other settings...*/ }</pre>
+
+<p>Here, because the selector <code>EXAMPLE[notation=octal]</code> is
+more specific than the tag
+selector alone, the style declarations in the second rule will override
+those in the first for elements that have a "notation" attribute value
+of "octal". Care has to be taken that all property declarations that
+are to apply only to the default case are overridden in the non-default
+cases' style rules.</p>
+
+</div>
+
+<h3><a name=class-html>6.4. Class selectors</a></h3>
+
+<p>Working with HTML, authors may use the period (U+002E,
+<code>.</code>) notation as an alternative to the <code>~=</code>
+notation when representing the <code>class</code> attribute. Thus, for
+HTML, <code>div.value</code> and <code>div[class~=value]</code> have
+the same meaning. The attribute value must immediately follow the
+&quot;period&quot; (<code>.</code>).</p>
+
+<p>UAs may apply selectors using the period (.) notation in XML
+documents if the UA has namespace-specific knowledge that allows it to
+determine which attribute is the &quot;class&quot; attribute for the
+respective namespace. One such example of namespace-specific knowledge
+is the prose in the specification for a particular namespace (e.g. SVG
+1.0 <a href="#refsSVG">[SVG]</a> describes the <a
+href="http://www.w3.org/TR/2001/PR-SVG-20010719/styling.html#ClassAttribute">SVG
+&quot;class&quot; attribute</a> and how a UA should interpret it, and
+similarly MathML 1.01 <a href="#refsMATH">[MATH]</a> describes the <a
+href="http://www.w3.org/1999/07/REC-MathML-19990707/chapter2.html#sec2.3.4">MathML
+&quot;class&quot; attribute</a>.)</p>
+
+<div class="example">
+ <p>CSS examples:</p>
+
+ <p>We can assign style information to all elements with
+ <code>class~="pastoral"</code> as follows:</p>
+
+ <pre>*.pastoral { color: green } /* all elements with class~=pastoral */</pre>
+
+ <p>or just</p>
+
+ <pre>.pastoral { color: green } /* all elements with class~=pastoral */</pre>
+
+ <p>The following assigns style only to H1 elements with
+ <code>class~="pastoral"</code>:</p>
+
+ <pre>H1.pastoral { color: green } /* H1 elements with class~=pastoral */</pre>
+
+ <p>Given these rules, the first H1 instance below would not have
+ green text, while the second would:</p>
+
+ <pre>&lt;H1&gt;Not green&lt;/H1&gt;
+&lt;H1 class="pastoral"&gt;Very green&lt;/H1&gt;</pre>
+
+</div>
+
+<p>To represent a subset of "class" values, each value must be preceded
+by a ".", in any order.</P>
+
+<div class="example">
+
+ <p>CSS example:</p>
+
+ <p>The following rule matches any P element whose "class" attribute
+ has been assigned a list of <a
+ href="#whitespace">whitespace</a>-separated values that includes
+ "pastoral" and "marine":</p>
+
+ <pre>p.pastoral.marine { color: green }</pre>
+
+ <p>This rule matches when <code>class="pastoral blue aqua
+ marine"</code> but does not match for <code>class="pastoral
+ blue"</code>.</p>
+
+</div>
+
+<p class="note"><strong>Note:</strong> Because CSS gives considerable
+power to the "class" attribute, authors could conceivably design their
+own "document language" based on elements with almost no associated
+presentation (such as DIV and SPAN in HTML) and assigning style
+information through the "class" attribute. Authors should avoid this
+practice since the structural elements of a document language often
+have recognized and accepted meanings and author-defined classes may
+not.</p>
+
+<p class="note"><strong>Note:</strong> If an element has multiple
+class attributes, their values must be concatenated with spaces
+between the values before searching for the class. As of this time the
+working group is not aware of any manner in which this situation can
+be reached, however, so this behavior is explicitly non-normative in
+this specification.</p>
+
+<h3><a name=id-selectors>6.5. ID selectors</a></h3>
+
+<p>Document languages may contain attributes that are declared to be
+of type ID. What makes attributes of type ID special is that no two
+such attributes can have the same value in a document, regardless of
+the type of the elements that carry them; whatever the document
+language, an ID typed attribute can be used to uniquely identify its
+element. In HTML all ID attributes are named "id"; XML applications
+may name ID attributes differently, but the same restriction
+applies.</p>
+
+<p>An ID-typed attribute of a document language allows authors to
+assign an identifier to one element instance in the document tree. W3C
+ID selectors represent an element instance based on its identifier. An
+ID selector contains a &quot;number sign&quot; (U+0023,
+<code>#</code>) immediately followed by the ID value, which must be an
+identifier.</p>
+
+<p>Selectors does not specify how a UA knows the ID-typed attribute of
+an element. The UA may, e.g., read a document's DTD, have the
+information hard-coded or ask the user.
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following ID selector represents an <code>h1</code> element
+ whose ID-typed attribute has the value "chapter1":</p>
+ <pre>h1#chapter1</pre>
+ <p>The following ID selector represents any element whose ID-typed
+ attribute has the value "chapter1":</p>
+ <pre>#chapter1</pre>
+ <p>The following selector represents any element whose ID-typed
+ attribute has the value "z98y".</p>
+ <pre>*#z98y</pre>
+</div>
+
+<p class="note"><strong>Note.</strong> In XML 1.0 <a
+href="#refsXML10">[XML10]</a>, the information about which attribute
+contains an element's IDs is contained in a DTD or a schema. When
+parsing XML, UAs do not always read the DTD, and thus may not know
+what the ID of an element is (though a UA may have namespace-specific
+knowledge that allows it to determine which attribute is the ID
+attribute for that namespace). If a style sheet designer knows or
+suspects that a UA may not know what the ID of an element is, he
+should use normal attribute selectors instead:
+<code>[name=p371]</code> instead of <code>#p371</code>. Elements in
+XML 1.0 documents without a DTD do not have IDs at all.</p>
+
+<p>If an element has multiple ID attributes, all of them must be
+treated as IDs for that element for the purposes of the ID
+selector. Such a situation could be reached using mixtures of xml:id,
+DOM3 Core, XML DTDs, and namespace-specific knowledge.</p>
+
+<h3><a name=pseudo-classes>6.6. Pseudo-classes</a></h3>
+
+<p>The pseudo-class concept is introduced to permit selection based on
+information that lies outside of the document tree or that cannot be
+expressed using the other simple selectors.</p>
+
+<p>A pseudo-class always consists of a &quot;colon&quot;
+(<code>:</code>) followed by the name of the pseudo-class and
+optionally by a value between parentheses.</p>
+
+<p>Pseudo-classes are allowed in all sequences of simple selectors
+contained in a selector. Pseudo-classes are allowed anywhere in
+sequences of simple selectors, after the leading type selector or
+universal selector (possibly omitted). Pseudo-class names are
+case-insensitive. Some pseudo-classes are mutually exclusive, while
+others can be applied simultaneously to the same
+element. Pseudo-classes may be dynamic, in the sense that an element
+may acquire or lose a pseudo-class while a user interacts with the
+document.</p>
+
+
+<h4><a name=dynamic-pseudos>6.6.1. Dynamic pseudo-classes</a></h4>
+
+<p>Dynamic pseudo-classes classify elements on characteristics other
+than their name, attributes, or content, in principle characteristics
+that cannot be deduced from the document tree.</p>
+
+<p>Dynamic pseudo-classes do not appear in the document source or
+document tree.</p>
+
+
+<h5>The <a name=link>link pseudo-classes: :link and :visited</a></h5>
+
+<p>User agents commonly display unvisited links differently from
+previously visited ones. Selectors
+provides the pseudo-classes <code>:link</code> and
+<code>:visited</code> to distinguish them:</p>
+
+<ul>
+ <li>The <code>:link</code> pseudo-class applies to links that have
+ not yet been visited.</li>
+ <li>The <code>:visited</code> pseudo-class applies once the link has
+ been visited by the user. </li>
+</ul>
+
+<p>After some amount of time, user agents may choose to return a
+visited link to the (unvisited) ':link' state.</p>
+
+<p>The two states are mutually exclusive.</p>
+
+<div class="example">
+
+ <p>Example:</p>
+
+ <p>The following selector represents links carrying class
+ <code>external</code> and already visited:</p>
+
+ <pre>a.external:visited</pre>
+
+</div>
+
+<p class="note"><strong>Note:</strong> It is possible for style sheet
+authors to abuse the :link and :visited pseudo-classes to determine
+which sites a user has visited without the user's consent.
+
+<p>UAs may therefore treat all links as unvisited links, or implement
+other measures to preserve the user's privacy while rendering visited
+and unvisited links differently.</p>
+
+<h5>The <a name=useraction-pseudos>user action pseudo-classes
+:hover, :active, and :focus</a></h5>
+
+<p>Interactive user agents sometimes change the rendering in response
+to user actions. Selectors provides
+three pseudo-classes for the selection of an element the user is
+acting on.</p>
+
+<ul>
+
+ <li>The <code>:hover</code> pseudo-class applies while the user
+ designates an element with a pointing device, but does not activate
+ it. For example, a visual user agent could apply this pseudo-class
+ when the cursor (mouse pointer) hovers over a box generated by the
+ element. User agents not that do not support <a
+ href="http://www.w3.org/TR/REC-CSS2/media.html#interactive-media-group">interactive
+ media</a> do not have to support this pseudo-class. Some conforming
+ user agents that support <a
+ href="http://www.w3.org/TR/REC-CSS2/media.html#interactive-media-group">interactive
+ media</a> may not be able to support this pseudo-class (e.g., a pen
+ device that does not detect hovering).</li>
+
+ <li>The <code>:active</code> pseudo-class applies while an element
+ is being activated by the user. For example, between the times the
+ user presses the mouse button and releases it.</li>
+
+ <li>The <code>:focus</code> pseudo-class applies while an element
+ has the focus (accepts keyboard or mouse events, or other forms of
+ input). </li>
+
+</ul>
+
+<p>There may be document language or implementation specific limits on
+which elements can become <code>:active</code> or acquire
+<code>:focus</code>.</p>
+
+<p>These pseudo-classes are not mutually exclusive. An element may
+match several pseudo-classes at the same time.</p>
+
+<p>Selectors doesn't define if the parent of an element that is
+':active' or ':hover' is also in that state.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <pre>a:link /* unvisited links */
+a:visited /* visited links */
+a:hover /* user hovers */
+a:active /* active links */</pre>
+ <p>An example of combining dynamic pseudo-classes:</p>
+ <pre>a:focus
+a:focus:hover</pre>
+ <p>The last selector matches <code>a</code> elements that are in
+ the pseudo-class :focus and in the pseudo-class :hover.</p>
+</div>
+
+<p class="note"><strong>Note:</strong> An element can be both ':visited'
+and ':active' (or ':link' and ':active').</p>
+
+<h4><a name=target-pseudo>6.6.2. The target pseudo-class :target</a></h4>
+
+<p>Some URIs refer to a location within a resource. This kind of URI
+ends with a &quot;number sign&quot; (#) followed by an anchor
+identifier (called the fragment identifier).</p>
+
+<p>URIs with fragment identifiers link to a certain element within the
+document, known as the target element. For instance, here is a URI
+pointing to an anchor named <code>section_2</code> in an HTML
+document:</p>
+
+<pre>http://example.com/html/top.html#section_2</pre>
+
+<p>A target element can be represented by the <code>:target</code>
+pseudo-class. If the document's URI has no fragment identifier, then
+the document has no target element.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <pre>p.note:target</pre>
+ <p>This selector represents a <code>p</code> element of class
+ <code>note</code> that is the target element of the referring
+ URI.</p>
+</div>
+
+<div class="example">
+ <p>CSS example:</p>
+ <p>Here, the <code>:target</code> pseudo-class is used to make the
+ target element red and place an image before it, if there is one:</p>
+ <pre>*:target { color : red }
+*:target::before { content : url(target.png) }</pre>
+</div>
+
+<h4><a name=lang-pseudo>6.6.3. The language pseudo-class :lang</a></h4>
+
+<p>If the document language specifies how the human language of an
+element is determined, it is possible to write selectors that
+represent an element based on its language. For example, in HTML <a
+href="#refsHTML4">[HTML4]</a>, the language is determined by a
+combination of the <code>lang</code> attribute, the <code>meta</code>
+element, and possibly by information from the protocol (such as HTTP
+headers). XML uses an attribute called <code>xml:lang</code>, and
+there may be other document language-specific methods for determining
+the language.</p>
+
+<p>The pseudo-class <code>:lang(C)</code> represents an element that
+is in language C. Whether an element is represented by a
+<code>:lang()</code> selector is based solely on the identifier C
+being either equal to, or a hyphen-separated substring of, the
+element's language value, in the same way as if performed by the <a
+href="#attribute-representation">'|='</a> operator in attribute
+selectors. The identifier C does not have to be a valid language
+name.</p>
+
+<p>C must not be empty. (If it is, the selector is invalid.)</p>
+
+<p class="note"><strong>Note:</strong> It is recommended that
+documents and protocols indicate language using codes from RFC 3066 <a
+href="#refsRFC3066">[RFC3066]</a> or its successor, and by means of
+"xml:lang" attributes in the case of XML-based documents <a
+href="#refsXML10">[XML10]</a>. See <a
+href="http://www.w3.org/International/questions/qa-lang-2or3.html">
+"FAQ: Two-letter or three-letter language codes."</a></p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The two following selectors represent an HTML document that is in
+ Belgian, French, or German. The two next selectors represent
+ <code>q</code> quotations in an arbitrary element in Belgian, French,
+ or German.</p>
+ <pre>html:lang(fr-be)
+html:lang(de)
+:lang(fr-be) &gt; q
+:lang(de) &gt; q</pre>
+</div>
+
+<h4><a name=UIstates>6.6.4. The UI element states pseudo-classes</a></h4>
+
+<h5><a name=enableddisabled>The :enabled and :disabled pseudo-classes</a></h5>
+
+<p>The <code>:enabled</code> pseudo-class allows authors to customize
+the look of user interface elements that are enabled &mdash; which the
+user can select or activate in some fashion (e.g. clicking on a button
+with a mouse). There is a need for such a pseudo-class because there
+is no way to programmatically specify the default appearance of say,
+an enabled <code>input</code> element without also specifying what it
+would look like when it was disabled.</p>
+
+<p>Similar to <code>:enabled</code>, <code>:disabled</code> allows the
+author to specify precisely how a disabled or inactive user interface
+element should look.</p>
+
+<p>Most elements will be neither enabled nor disabled. An element is
+enabled if the user can either activate it or transfer the focus to
+it. An element is disabled if it could be enabled, but the user cannot
+presently activate it or transfer focus to it.</p>
+
+
+<h5><a name=checked>The :checked pseudo-class</a></h5>
+
+<p>Radio and checkbox elements can be toggled by the user. Some menu
+items are "checked" when the user selects them. When such elements are
+toggled "on" the <code>:checked</code> pseudo-class applies. The
+<code>:checked</code> pseudo-class initially applies to such elements
+that have the HTML4 <code>selected</code> and <code>checked</code>
+attributes as described in <a
+href="http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.2.1">Section
+17.2.1 of HTML4</a>, but of course the user can toggle "off" such
+elements in which case the <code>:checked</code> pseudo-class would no
+longer apply. While the <code>:checked</code> pseudo-class is dynamic
+in nature, and is altered by user action, since it can also be based
+on the presence of the semantic HTML4 <code>selected</code> and
+<code>checked</code> attributes, it applies to all media.
+
+
+<h5><a name=indeterminate>The :indeterminate pseudo-class</a></h5>
+
+<div class="note">
+
+<p>Radio and checkbox elements can be toggled by the user, but are
+sometimes in an indeterminate state, neither checked nor unchecked.
+This can be due to an element attribute, or DOM manipulation.</p>
+
+<p>A future version of this specification may introduce an
+<code>:indeterminate</code> pseudo-class that applies to such elements.
+<!--While the <code>:indeterminate</code> pseudo-class is dynamic in
+nature, and is altered by user action, since it can also be based on
+the presence of an element attribute, it applies to all media.</p>
+
+<p>Components of a radio-group initialized with no pre-selected choice
+are an example of :indeterminate state.--></p>
+
+</div>
+
+
+<h4><a name=structural-pseudos>6.6.5. Structural pseudo-classes</a></h4>
+
+<p>Selectors introduces the concept of <dfn>structural
+pseudo-classes</dfn> to permit selection based on extra information that lies in
+the document tree but cannot be represented by other simple selectors or
+combinators.
+
+<p>Note that standalone pieces of PCDATA (text nodes in the DOM) are
+not counted when calculating the position of an element in the list of
+children of its parent. When calculating the position of an element in
+the list of children of its parent, the index numbering starts at 1.
+
+
+<h5><a name=root-pseudo>:root pseudo-class</a></h5>
+
+<p>The <code>:root</code> pseudo-class represents an element that is
+the root of the document. In HTML 4, this is always the
+<code>HTML</code> element.
+
+
+<h5><a name=nth-child-pseudo>:nth-child() pseudo-class</a></h5>
+
+<p>The
+<code>:nth-child(<var>a</var><code>n</code>+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings
+<strong>before</strong> it in the document tree, for a given positive
+integer or zero value of <code>n</code>, and has a parent element. In
+other words, this matches the <var>b</var>th child of an element after
+all the children have been split into groups of <var>a</var> elements
+each. For example, this allows the selectors to address every other
+row in a table, and could be used to alternate the color
+of paragraph text in a cycle of four. The <var>a</var> and
+<var>b</var> values must be zero, negative integers or positive
+integers. The index of the first child of an element is 1.
+
+<p>In addition to this, <code>:nth-child()</code> can take
+'<code>odd</code>' and '<code>even</code>' as arguments instead.
+'<code>odd</code>' has the same signification as <code>2n+1</code>,
+and '<code>even</code>' has the same signification as <code>2n</code>.
+
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-child(2n+1) /* represents every odd row of an HTML table */
+tr:nth-child(odd) /* same */
+tr:nth-child(2n) /* represents every even row of an HTML table */
+tr:nth-child(even) /* same */
+
+/* Alternate paragraph colours in CSS */
+p:nth-child(4n+1) { color: navy; }
+p:nth-child(4n+2) { color: green; }
+p:nth-child(4n+3) { color: maroon; }
+p:nth-child(4n+4) { color: purple; }</pre>
+</div>
+
+<p>When <var>a</var>=0, no repeating is used, so for example
+<code>:nth-child(0n+5)</code> matches only the fifth child. When
+<var>a</var>=0, the <var>a</var><code>n</code> part need not be
+included, so the syntax simplifies to
+<code>:nth-child(<var>b</var>)</code> and the last example simplifies
+to <code>:nth-child(5)</code>.
+
+<div class="example">
+<p>Examples:</p>
+<pre>foo:nth-child(0n+1) /* represents an element foo, first child of its parent element */
+foo:nth-child(1) /* same */</pre>
+</div>
+
+<p>When <var>a</var>=1, the number may be omitted from the rule.
+
+<div class="example">
+<p>Examples:</p>
+<p>The following selectors are therefore equivalent:</p>
+<pre>bar:nth-child(1n+0) /* represents all bar elements, specificity (0,1,1) */
+bar:nth-child(n+0) /* same */
+bar:nth-child(n) /* same */
+bar /* same but lower specificity (0,0,1) */</pre>
+</div>
+
+<p>If <var>b</var>=0, then every <var>a</var>th element is picked. In
+such a case, the <var>b</var> part may be omitted.
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-child(2n+0) /* represents every even row of an HTML table */
+tr:nth-child(2n) /* same */</pre>
+</div>
+
+<p>If both <var>a</var> and <var>b</var> are equal to zero, the
+pseudo-class represents no element in the document tree.</p>
+
+<p>The value <var>a</var> can be negative, but only the positive
+values of <var>a</var><code>n</code>+<var>b</var>, for
+<code>n</code>&ge;0, may represent an element in the document
+tree.</p>
+
+<div class="example">
+<p>Example:</p>
+<pre>html|tr:nth-child(-n+6) /* represents the 6 first rows of XHTML tables */</pre>
+</div>
+
+<p>When the value <var>b</var> is negative, the "+" character in the
+expression must be removed (it is effectively replaced by the "-"
+character indicating the negative value of <var>b</var>).</p>
+
+<div class="example">
+<p>Examples:</p>
+<pre>:nth-child(10n-1) /* represents the 9th, 19th, 29th, etc, element */
+:nth-child(10n+9) /* Same */
+:nth-child(10n+-1) /* Syntactically invalid, and would be ignored */</pre>
+</div>
+
+
+<h5><a name=nth-last-child-pseudo>:nth-last-child() pseudo-class</a></h5>
+
+<p>The <code>:nth-last-child(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings
+<strong>after</strong> it in the document tree, for a given positive
+integer or zero value of <code>n</code>, and has a parent element. See
+<code>:nth-child()</code> pseudo-class for the syntax of its argument.
+It also accepts the '<code>even</code>' and '<code>odd</code>' values
+as arguments.
+
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-last-child(-n+2) /* represents the two last rows of an HTML table */
+
+foo:nth-last-child(odd) /* represents all odd foo elements in their parent element,
+ counting from the last one */</pre>
+</div>
+
+
+<h5><a name=nth-of-type-pseudo>:nth-of-type() pseudo-class</a></h5>
+
+<p>The <code>:nth-of-type(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings with the same
+element name <strong>before</strong> it in the document tree, for a
+given zero or positive integer value of <code>n</code>, and has a
+parent element. In other words, this matches the <var>b</var>th child
+of that type after all the children of that type have been split into
+groups of a elements each. See <code>:nth-child()</code> pseudo-class
+for the syntax of its argument. It also accepts the
+'<code>even</code>' and '<code>odd</code>' values.
+
+
+<div class="example">
+<p>CSS example:</p>
+<p>This allows an author to alternate the position of floated images:</p>
+<pre>img:nth-of-type(2n+1) { float: right; }
+img:nth-of-type(2n) { float: left; }</pre>
+</div>
+
+
+<h5><a name=nth-last-of-type-pseudo>:nth-last-of-type() pseudo-class</a></h5>
+
+<p>The <code>:nth-last-of-type(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings with the same
+element name <strong>after</strong> it in the document tree, for a
+given zero or positive integer value of <code>n</code>, and has a
+parent element. See <code>:nth-child()</code> pseudo-class for the
+syntax of its argument. It also accepts the '<code>even</code>' and '<code>odd</code>' values.
+
+
+<div class="example">
+ <p>Example:</p>
+ <p>To represent all <code>h2</code> children of an XHTML
+ <code>body</code> except the first and last, one could use the
+ following selector:</p>
+ <pre>body &gt; h2:nth-of-type(n+2):nth-last-of-type(n+2)</pre>
+ <p>In this case, one could also use <code>:not()</code>, although the
+ selector ends up being just as long:</p>
+ <pre>body &gt; h2:not(:first-of-type):not(:last-of-type)</pre>
+</div>
+
+
+<h5><a name=first-child-pseudo>:first-child pseudo-class</a></h5>
+
+<p>Same as <code>:nth-child(1)</code>. The <code>:first-child</code> pseudo-class
+represents an element that is the first child of some other element.
+
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element that is
+ the first child of a <code>div</code> element:</p>
+ <pre>div &gt; p:first-child</pre>
+ <p>This selector can represent the <code>p</code> inside the
+ <code>div</code> of the following fragment:</p>
+ <pre>&lt;p&gt; The last P before the note.&lt;/p&gt;
+&lt;div class="note"&gt;
+ &lt;p&gt; The first P inside the note.&lt;/p&gt;
+&lt;/div&gt;</pre>but cannot represent the second <code>p</code> in the following
+fragment:
+ <pre>&lt;p&gt; The last P before the note.&lt;/p&gt;
+&lt;div class="note"&gt;
+ &lt;h2&gt; Note &lt;/h2&gt;
+ &lt;p&gt; The first P inside the note.&lt;/p&gt;
+&lt;/div&gt;</pre>
+ <p>The following two selectors are usually equivalent:</p>
+ <pre>* &gt; a:first-child /* a is first child of any element */
+a:first-child /* Same (assuming a is not the root element) */</pre>
+</div>
+
+<h5><a name=last-child-pseudo>:last-child pseudo-class</a></h5>
+
+<p>Same as <code>:nth-last-child(1)</code>. The <code>:last-child</code> pseudo-class
+represents an element that is the last child of some other element.
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents a list item <code>li</code> that
+ is the last child of an ordered list <code>ol</code>.
+ <pre>ol &gt; li:last-child</pre>
+</div>
+
+<h5><a name=first-of-type-pseudo>:first-of-type pseudo-class</a></h5>
+
+<p>Same as <code>:nth-of-type(1)</code>. The <code>:first-of-type</code> pseudo-class
+represents an element that is the first sibling of its type in the list of
+children of its parent element.
+
+<div class="example">
+<p>Example:</p>
+<p>The following selector represents a definition title
+<code>dt</code> inside a definition list <code>dl</code>, this
+<code>dt</code> being the first of its type in the list of children of
+its parent element.</p>
+<pre>dl dt:first-of-type</pre>
+<p>It is a valid description for the first two <code>dt</code>
+elements in the following example but not for the third one:</p>
+<pre>&lt;dl&gt;
+ &lt;dt&gt;gigogne&lt;/dt&gt;
+ &lt;dd&gt;
+ &lt;dl&gt;
+ &lt;dt&gt;fus&eacute;e&lt;/dt&gt;
+ &lt;dd&gt;multistage rocket&lt;/dd&gt;
+ &lt;dt&gt;table&lt;/dt&gt;
+ &lt;dd&gt;nest of tables&lt;/dd&gt;
+ &lt;/dl&gt;
+ &lt;/dd&gt;
+&lt;/dl&gt;</pre>
+</div>
+
+<h5><a name=last-of-type-pseudo>:last-of-type pseudo-class</a></h5>
+
+<p>Same as <code>:nth-last-of-type(1)</code>. The
+<code>:last-of-type</code> pseudo-class represents an element that is
+the last sibling of its type in the list of children of its parent
+element.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents the last data cell
+ <code>td</code> of a table row.</p>
+ <pre>tr &gt; td:last-of-type</pre>
+</div>
+
+<h5><a name=only-child-pseudo>:only-child pseudo-class</a></h5>
+
+<p>Represents an element that has a parent element and whose parent
+element has no other element children. Same as
+<code>:first-child:last-child</code> or
+<code>:nth-child(1):nth-last-child(1)</code>, but with a lower
+specificity.</p>
+
+<h5><a name=only-of-type-pseudo>:only-of-type pseudo-class</a></h5>
+
+<p>Represents an element that has a parent element and whose parent
+element has no other element children with the same element name. Same
+as <code>:first-of-type:last-of-type</code> or
+<code>:nth-of-type(1):nth-last-of-type(1)</code>, but with a lower
+specificity.</p>
+
+
+<h5><a name=empty-pseudo></a>:empty pseudo-class</h5>
+
+<p>The <code>:empty</code> pseudo-class represents an element that has
+no children at all. In terms of the DOM, only element nodes and text
+nodes (including CDATA nodes and entity references) whose data has a
+non-zero length must be considered as affecting emptiness; comments,
+PIs, and other nodes must not affect whether an element is considered
+empty or not.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p><code>p:empty</code> is a valid representation of the following fragment:</p>
+ <pre>&lt;p&gt;&lt;/p&gt;</pre>
+ <p><code>foo:empty</code> is not a valid representation for the
+ following fragments:</p>
+ <pre>&lt;foo&gt;bar&lt;/foo&gt;</pre>
+ <pre>&lt;foo&gt;&lt;bar&gt;bla&lt;/bar&gt;&lt;/foo&gt;</pre>
+ <pre>&lt;foo&gt;this is not &lt;bar&gt;:empty&lt;/bar&gt;&lt;/foo&gt;</pre>
+</div>
+
+<h4><a name=content-selectors>6.6.6. Blank</a></h4> <!-- It's the Return of Appendix H!!! Run away! -->
+
+<p>This section intentionally left blank.</p>
+<!-- (used to be :contains()) -->
+
+<h4><a name=negation></a>6.6.7. The negation pseudo-class</h4>
+
+<p>The negation pseudo-class, <code>:not(<var>X</var>)</code>, is a
+functional notation taking a <a href="#simple-selectors-dfn">simple
+selector</a> (excluding the negation pseudo-class itself and
+pseudo-elements) as an argument. It represents an element that is not
+represented by the argument.
+
+<!-- pseudo-elements are not simple selectors, so the above paragraph
+may be a bit confusing -->
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following CSS selector matches all <code>button</code>
+ elements in an HTML document that are not disabled.</p>
+ <pre>button:not([DISABLED])</pre>
+ <p>The following selector represents all but <code>FOO</code>
+ elements.</p>
+ <pre>*:not(FOO)</pre>
+ <p>The following group of selectors represents all HTML elements
+ except links.</p>
+ <pre>html|*:not(:link):not(:visited)</pre>
+</div>
+
+<p>Default namespace declarations do not affect the argument of the
+negation pseudo-class unless the argument is a universal selector or a
+type selector.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>Assuming that the default namespace is bound to
+ "http://example.com/", the following selector represents all
+ elements that are not in that namespace:</p>
+ <pre>*|*:not(*)</pre>
+ <p>The following CSS selector matches any element being hovered,
+ regardless of its namespace. In particular, it is not limited to
+ only matching elements in the default namespace that are not being
+ hovered, and elements not in the default namespace don't match the
+ rule when they <em>are</em> being hovered.</p>
+ <pre>*|*:not(:hover)</pre>
+</div>
+
+<p class="note"><strong>Note</strong>: the :not() pseudo allows
+useless selectors to be written. For instance <code>:not(*|*)</code>,
+which represents no element at all, or <code>foo:not(bar)</code>,
+which is equivalent to <code>foo</code> but with a higher
+specificity.</p>
+
+<h3><a name=pseudo-elements>7. Pseudo-elements</a></h3>
+
+<p>Pseudo-elements create abstractions about the document tree beyond
+those specified by the document language. For instance, document
+languages do not offer mechanisms to access the first letter or first
+line of an element's content. Pseudo-elements allow designers to refer
+to this otherwise inaccessible information. Pseudo-elements may also
+provide designers a way to refer to content that does not exist in the
+source document (e.g., the <code>::before</code> and
+<code>::after</code> pseudo-elements give access to generated
+content).</p>
+
+<p>A pseudo-element is made of two colons (<code>::</code>) followed
+by the name of the pseudo-element.</p>
+
+<p>This <code>::</code> notation is introduced by the current document
+in order to establish a discrimination between pseudo-classes and
+pseudo-elements. For compatibility with existing style sheets, user
+agents must also accept the previous one-colon notation for
+pseudo-elements introduced in CSS levels 1 and 2 (namely,
+<code>:first-line</code>, <code>:first-letter</code>,
+<code>:before</code> and <code>:after</code>). This compatibility is
+not allowed for the new pseudo-elements introduced in CSS level 3.</p>
+
+<p>Only one pseudo-element may appear per selector, and if present it
+must appear after the sequence of simple selectors that represents the
+<a href="#subject">subjects</a> of the selector. <span class="note">A
+future version of this specification may allow multiple
+pesudo-elements per selector.</span></p>
+
+<h4><a name=first-line>7.1. The ::first-line pseudo-element</a></h4>
+
+<p>The <code>::first-line</code> pseudo-element describes the contents
+of the first formatted line of an element.
+
+<div class="example">
+<p>CSS example:</p>
+<pre>p::first-line { text-transform: uppercase }</pre>
+<p>The above rule means "change the letters of the first line of every
+paragraph to uppercase".</p>
+</div>
+
+<p>The selector <code>p::first-line</code> does not match any real
+HTML element. It does match a pseudo-element that conforming user
+agents will insert at the beginning of every paragraph.</p>
+
+<p>Note that the length of the first line depends on a number of
+factors, including the width of the page, the font size, etc. Thus,
+an ordinary HTML paragraph such as:</p>
+
+<pre>
+&lt;P&gt;This is a somewhat long HTML
+paragraph that will be broken into several
+lines. The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>the lines of which happen to be broken as follows:
+
+<pre>
+THIS IS A SOMEWHAT LONG HTML PARAGRAPH THAT
+will be broken into several lines. The first
+line will be identified by a fictional tag
+sequence. The other lines will be treated as
+ordinary lines in the paragraph.
+</pre>
+
+<p>This paragraph might be "rewritten" by user agents to include the
+<em>fictional tag sequence</em> for <code>::first-line</code>. This
+fictional tag sequence helps to show how properties are inherited.</p>
+
+<pre>
+&lt;P&gt;<b>&lt;P::first-line&gt;</b> This is a somewhat long HTML
+paragraph that <b>&lt;/P::first-line&gt;</b> will be broken into several
+lines. The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>If a pseudo-element breaks up a real element, the desired effect
+can often be described by a fictional tag sequence that closes and
+then re-opens the element. Thus, if we mark up the previous paragraph
+with a <code>span</code> element:</p>
+
+<pre>
+&lt;P&gt;<b>&lt;SPAN class="test"&gt;</b> This is a somewhat long HTML
+paragraph that will be broken into several
+lines.<b>&lt;/SPAN&gt;</b> The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>the user agent could simulate start and end tags for
+<code>span</code> when inserting the fictional tag sequence for
+<code>::first-line</code>.
+
+<pre>
+&lt;P&gt;&lt;P::first-line&gt;<b>&lt;SPAN class="test"&gt;</b> This is a
+somewhat long HTML
+paragraph that will <b>&lt;/SPAN&gt;</b>&lt;/P::first-line&gt;<b>&lt;SPAN class="test"&gt;</b> be
+broken into several
+lines.<b>&lt;/SPAN&gt;</b> The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>In CSS, the <code>::first-line</code> pseudo-element can only be
+attached to a block-level element, an inline-block, a table-caption,
+or a table-cell.</p>
+
+<p><a name="first-formatted-line"></a>The "first formatted line" of an
+element may occur inside a
+block-level descendant in the same flow (i.e., a block-level
+descendant that is not positioned and not a float). E.g., the first
+line of the <code>div</code> in <code>&lt;DIV>&lt;P>This
+line...&lt;/P>&lt/DIV></code> is the first line of the <code>p</code> (assuming
+that both <code>p</code> and <code>div</code> are block-level).
+
+<p>The first line of a table-cell or inline-block cannot be the first
+formatted line of an ancestor element. Thus, in <code>&lt;DIV&gt;&lt;P
+STYLE="display: inline-block">Hello&lt;BR&gt;Goodbye&lt;/P&gt;
+etcetera&lt;/DIV&gt;</code> the first formatted line of the
+<code>div</code> is not the line "Hello".
+
+<p class="note">Note that the first line of the <code>p</code> in this
+fragment: <code>&lt;p&gt&lt;br&gt;First...</code> doesn't contain any
+letters (assuming the default style for <code>br</code> in HTML
+4). The word "First" is not on the first formatted line.
+
+<p>A UA should act as if the fictional start tags of the
+<code>::first-line</code> pseudo-elements were nested just inside the
+innermost enclosing block-level element. (Since CSS1 and CSS2 were
+silent on this case, authors should not rely on this behavior.) Here
+is an example. The fictional tag sequence for</p>
+
+<pre>
+&lt;DIV>
+ &lt;P>First paragraph&lt;/P>
+ &lt;P>Second paragraph&lt;/P>
+&lt;/DIV>
+</pre>
+
+<p>is</p>
+
+<pre>
+&lt;DIV>
+ &lt;P>&lt;DIV::first-line>&lt;P::first-line>First paragraph&lt;/P::first-line>&lt;/DIV::first-line>&lt;/P>
+ &lt;P>&lt;P::first-line>Second paragraph&lt;/P::first-line>&lt;/P>
+&lt;/DIV>
+</pre>
+
+<p>The <code>::first-line</code> pseudo-element is similar to an
+inline-level element, but with certain restrictions. In CSS, the
+following properties apply to a <code>::first-line</code>
+pseudo-element: font properties, color property, background
+properties, 'word-spacing', 'letter-spacing', 'text-decoration',
+'vertical-align', 'text-transform', 'line-height'. UAs may apply other
+properties as well.</p>
+
+
+<h4><a name=first-letter>7.2. The ::first-letter pseudo-element</a></h4>
+
+<p>The <code>::first-letter</code> pseudo-element represents the first
+letter of the first line of a block, if it is not preceded by any
+other content (such as images or inline tables) on its line. The
+::first-letter pseudo-element may be used for "initial caps" and "drop
+caps", which are common typographical effects. This type of initial
+letter is similar to an inline-level element if its 'float' property
+is 'none'; otherwise, it is similar to a floated element.</p>
+
+<p>In CSS, these are the properties that apply to <code>::first-letter</code>
+pseudo-elements: font properties, 'text-decoration', 'text-transform',
+'letter-spacing', 'word-spacing' (when appropriate), 'line-height',
+'float', 'vertical-align' (only if 'float' is 'none'), margin
+properties, padding properties, border properties, color property,
+background properties. UAs may apply other properties as well. To
+allow UAs to render a typographically correct drop cap or initial cap,
+the UA may choose a line-height, width and height based on the shape
+of the letter, unlike for normal elements.</p>
+
+<div class="example">
+<p>Example:</p>
+<p>This example shows a possible rendering of an initial cap. Note
+that the 'line-height' that is inherited by the <code>::first-letter</code>
+pseudo-element is 1.1, but the UA in this example has computed the
+height of the first letter differently, so that it doesn't cause any
+unnecessary space between the first two lines. Also note that the
+fictional start tag of the first letter is inside the <span>span</span>, and thus
+the font weight of the first letter is normal, not bold as the <span>span</span>:
+<pre>
+p { line-height: 1.1 }
+p::first-letter { font-size: 3em; font-weight: normal }
+span { font-weight: bold }
+...
+&lt;p>&lt;span>Het hemelsche&lt;/span> gerecht heeft zich ten lange lesten&lt;br>
+Erbarremt over my en mijn benaeuwde vesten&lt;br>
+En arme burgery, en op mijn volcx gebed&lt;br>
+En dagelix geschrey de bange stad ontzet.
+</pre>
+<div class="figure">
+<p><img src="initial-cap.png" alt="Image illustrating the ::first-letter pseudo-element">
+</div>
+</div>
+
+<div class="example">
+<p>The following CSS will make a drop cap initial letter span about two lines:</p>
+
+<pre>
+&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"&gt;
+&lt;HTML&gt;
+ &lt;HEAD&gt;
+ &lt;TITLE&gt;Drop cap initial letter&lt;/TITLE&gt;
+ &lt;STYLE type="text/css"&gt;
+ P { font-size: 12pt; line-height: 1.2 }
+ P::first-letter { font-size: 200%; font-weight: bold; float: left }
+ SPAN { text-transform: uppercase }
+ &lt;/STYLE&gt;
+ &lt;/HEAD&gt;
+ &lt;BODY&gt;
+ &lt;P&gt;&lt;SPAN&gt;The first&lt;/SPAN&gt; few words of an article
+ in The Economist.&lt;/P&gt;
+ &lt;/BODY&gt;
+&lt;/HTML&gt;
+</pre>
+
+<p>This example might be formatted as follows:</p>
+
+<div class="figure">
+<P><img src="first-letter.gif" alt="Image illustrating the combined effect of the ::first-letter and ::first-line pseudo-elements"></p>
+</div>
+
+<p>The <span class="index-inst" title="fictional tag
+sequence">fictional tag sequence</span> is:</p>
+
+<pre>
+&lt;P&gt;
+&lt;SPAN&gt;
+&lt;P::first-letter&gt;
+T
+&lt;/P::first-letter&gt;he first
+&lt;/SPAN&gt;
+few words of an article in the Economist.
+&lt;/P&gt;
+</pre>
+
+<p>Note that the <code>::first-letter</code> pseudo-element tags abut
+the content (i.e., the initial character), while the ::first-line
+pseudo-element start tag is inserted right after the start tag of the
+block element.</p> </div>
+
+<p>In order to achieve traditional drop caps formatting, user agents
+may approximate font sizes, for example to align baselines. Also, the
+glyph outline may be taken into account when formatting.</p>
+
+<p>Punctuation (i.e, characters defined in Unicode in the "open" (Ps),
+"close" (Pe), "initial" (Pi). "final" (Pf) and "other" (Po)
+punctuation classes), that precedes or follows the first letter should
+be included. <a href="#refsUNICODE">[UNICODE]</a></p>
+
+<div class="figure">
+<P><img src="first-letter2.gif" alt="Quotes that precede the
+first letter should be included."></p>
+</div>
+
+<p>The <code>::first-letter</code> also applies if the first letter is
+in fact a digit, e.g., the "6" in "67 million dollars is a lot of
+money."</p>
+
+<p>In CSS, the <code>::first-letter</code> pseudo-element applies to
+block, list-item, table-cell, table-caption, and inline-block
+elements. <span class="note">A future version of this specification
+may allow this pesudo-element to apply to more element
+types.</span></p>
+
+<p>The <code>::first-letter</code> pseudo-element can be used with all
+such elements that contain text, or that have a descendant in the same
+flow that contains text. A UA should act as if the fictional start tag
+of the ::first-letter pseudo-element is just before the first text of
+the element, even if that first text is in a descendant.</p>
+
+<div class="example">
+<p>Example:</p>
+<p>The fictional tag sequence for this HTMLfragment:
+<pre>&lt;div>
+&lt;p>The first text.</pre>
+<p>is:
+<pre>&lt;div>
+&lt;p>&lt;div::first-letter>&lt;p::first-letter>T&lt;/...>&lt;/...>he first text.</pre>
+</div>
+
+<p>The first letter of a table-cell or inline-block cannot be the
+first letter of an ancestor element. Thus, in <code>&lt;DIV&gt;&lt;P
+STYLE="display: inline-block">Hello&lt;BR&gt;Goodbye&lt;/P&gt;
+etcetera&lt;/DIV&gt;</code> the first letter of the <code>div</code> is not the
+letter "H". In fact, the <code>div</code> doesn't have a first letter.
+
+<p>The first letter must occur on the <a
+href="#first-formatted-line">first formatted line.</a> For example, in
+this fragment: <code>&lt;p&gt&lt;br&gt;First...</code> the first line
+doesn't contain any letters and <code>::first-letter</code> doesn't
+match anything (assuming the default style for <code>br</code> in HTML
+4). In particular, it does not match the "F" of "First."
+
+<p>In CSS, if an element is a list item ('display: list-item'), the
+<code>::first-letter</code> applies to the first letter in the
+principal box after the marker. UAs may ignore
+<code>::first-letter</code> on list items with 'list-style-position:
+inside'. If an element has <code>::before</code> or
+<code>::after</code> content, the <code>::first-letter</code> applies
+to the first letter of the element <em>including</em> that content.
+
+<div class="example">
+<p>Example:</p>
+<p>After the rule 'p::before {content: "Note: "}', the selector
+'p::first-letter' matches the "N" of "Note".</p>
+</div>
+
+<p>Some languages may have specific rules about how to treat certain
+letter combinations. In Dutch, for example, if the letter combination
+"ij" appears at the beginning of a word, both letters should be
+considered within the <code>::first-letter</code> pseudo-element.
+
+<p>If the letters that would form the ::first-letter are not in the
+same element, such as "'T" in <code>&lt;p>'&lt;em>T...</code>, the UA
+may create a ::first-letter pseudo-element from one of the elements,
+both elements, or simply not create a pseudo-element.</p>
+
+<p>Similarly, if the first letter(s) of the block are not at the start
+of the line (for example due to bidirectional reordering), then the UA
+need not create the pseudo-element(s).
+
+<div class="example">
+<p>Example:</p>
+<p><a name="overlapping-example">The following example</a> illustrates
+how overlapping pseudo-elements may interact. The first letter of
+each P element will be green with a font size of '24pt'. The rest of
+the first formatted line will be 'blue' while the rest of the
+paragraph will be 'red'.</p>
+
+<pre>p { color: red; font-size: 12pt }
+p::first-letter { color: green; font-size: 200% }
+p::first-line { color: blue }
+
+&lt;P&gt;Some text that ends up on two lines&lt;/P&gt;</pre>
+
+<p>Assuming that a line break will occur before the word "ends", the
+<span class="index-inst" title="fictional tag sequence">fictional tag
+sequence</span> for this fragment might be:</p>
+
+<pre>&lt;P&gt;
+&lt;P::first-line&gt;
+&lt;P::first-letter&gt;
+S
+&lt;/P::first-letter&gt;ome text that
+&lt;/P::first-line&gt;
+ends up on two lines
+&lt;/P&gt;</pre>
+
+<p>Note that the <code>::first-letter</code> element is inside the <code>::first-line</code>
+element. Properties set on <code>::first-line</code> are inherited by
+<code>::first-letter</code>, but are overridden if the same property is set on
+<code>::first-letter</code>.</p>
+</div>
+
+
+<h4><a name=UIfragments>7.3.</a> <a name=selection>The ::selection pseudo-element</a></h4>
+
+<p>The <code>::selection</code> pseudo-element applies to the portion
+of a document that has been highlighted by the user. This also
+applies, for example, to selected text within an editable text
+field. This pseudo-element should not be confused with the <code><a
+href="#checked">:checked</a></code> pseudo-class (which used to be
+named <code>:selected</code>)
+
+<p>Although the <code>::selection</code> pseudo-element is dynamic in
+nature, and is altered by user action, it is reasonable to expect that
+when a UA re-renders to a static medium (such as a printed page, see
+<a href="#refsCSS21">[CSS21]</a>) which was originally rendered to a
+dynamic medium (like screen), the UA may wish to transfer the current
+<code>::selection</code> state to that other medium, and have all the
+appropriate formatting and rendering take effect as well. This is not
+required &mdash; UAs may omit the <code>::selection</code>
+pseudo-element for static media.
+
+<p>These are the CSS properties that apply to <code>::selection</code>
+pseudo-elements: color, background, cursor (optional), outline
+(optional). The computed value of the 'background-image' property on
+<code>::selection</code> may be ignored.
+
+
+<h4><a name=gen-content>7.4. The ::before and ::after pseudo-elements</a></h4>
+
+<p>The <code>::before</code> and <code>::after</code> pseudo-elements
+can be used to describe generated content before or after an element's
+content. They are explained in CSS 2.1 <a
+href="#refsCSS21">[CSS21]</a>.</p>
+
+<p>When the <code>::first-letter</code> and <code>::first-line</code>
+pseudo-elements are combined with <code>::before</code> and
+<code>::after</code>, they apply to the first letter or line of the
+element including the inserted text.</p>
+
+<h2><a name=combinators>8. Combinators</a></h2>
+
+<h3><a name=descendant-combinators>8.1. Descendant combinator</a></h3>
+
+<p>At times, authors may want selectors to describe an element that is
+the descendant of another element in the document tree (e.g., "an
+<code>EM</code> element that is contained within an <code>H1</code>
+element"). Descendant combinators express such a relationship. A
+descendant combinator is <a href="#whitespace">white space</a> that
+separates two sequences of simple selectors. A selector of the form
+"<code>A B</code>" represents an element <code>B</code> that is an
+arbitrary descendant of some ancestor element <code>A</code>.
+
+<div class="example">
+ <p>Examples:</p>
+ <p>For example, consider the following selector:</p>
+ <pre>h1 em</pre>
+ <p>It represents an <code>em</code> element being the descendant of
+ an <code>h1</code> element. It is a correct and valid, but partial,
+ description of the following fragment:</p>
+ <pre>&lt;h1&gt;This &lt;span class="myclass"&gt;headline
+is &lt;em&gt;very&lt;/em&gt; important&lt;/span&gt;&lt;/h1&gt;</pre>
+ <p>The following selector:</p>
+ <pre>div * p</pre>
+ <p>represents a <code>p</code> element that is a grandchild or later
+ descendant of a <code>div</code> element. Note the whitespace on
+ either side of the "*" is not part of the universal selector; the
+ whitespace is a combinator indicating that the DIV must be the
+ ancestor of some element, and that that element must be an ancestor
+ of the P.</p>
+ <p>The following selector, which combines descendant combinators and
+ <a href="#attribute-selectors">attribute selectors</a>, represents an
+ element that (1) has the <code>href</code> attribute set and (2) is
+ inside a <code>p</code> that is itself inside a <code>div</code>:</p>
+ <pre>div p *[href]</pre>
+</div>
+
+<h3><a name=child-combinators>8.2. Child combinators</a></h3>
+
+<p>A <dfn>child combinator</dfn> describes a childhood relationship
+between two elements. A child combinator is made of the
+&quot;greater-than sign&quot; (<code>&gt;</code>) character and
+separates two sequences of simple selectors.
+
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element that is
+ child of <code>body</code>:</p>
+ <pre>body &gt; p</pre>
+ <p>The following example combines descendant combinators and child
+ combinators.</p>
+ <pre>div ol&gt;li p</pre><!-- LEAVE THOSE SPACES OUT! see below -->
+ <p>It represents a <code>p</code> element that is a descendant of an
+ <code>li</code> element; the <code>li</code> element must be the
+ child of an <code>ol</code> element; the <code>ol</code> element must
+ be a descendant of a <code>div</code>. Notice that the optional white
+ space around the "&gt;" combinator has been left out.</p>
+</div>
+
+<p>For information on selecting the first child of an element, please
+see the section on the <code><a
+href="#structural-pseudos">:first-child</a></code> pseudo-class
+above.</p>
+
+<h3><a name=sibling-combinators>8.3. Sibling combinators</a></h3>
+
+<p>There are two different sibling combinators: the adjacent sibling
+combinator and the general sibling combinator. In both cases,
+non-element nodes (e.g. text between elements) are ignored when
+considering adjacency of elements.</p>
+
+<h4><a name=adjacent-sibling-combinators>8.3.1. Adjacent sibling combinator</a></h4>
+
+<p>The adjacent sibling combinator is made of the &quot;plus
+sign&quot; (U+002B, <code>+</code>) character that separates two
+sequences of simple selectors. The elements represented by the two
+sequences share the same parent in the document tree and the element
+represented by the first sequence immediately precedes the element
+represented by the second one.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element
+ immediately following a <code>math</code> element:</p>
+ <pre>math + p</pre>
+ <p>The following selector is conceptually similar to the one in the
+ previous example, except that it adds an attribute selector &mdash; it
+ adds a constraint to the <code>h1</code> element, that it must have
+ <code>class="opener"</code>:</p>
+ <pre>h1.opener + h2</pre>
+</div>
+
+
+<h4><a name=general-sibling-combinators>8.3.2. General sibling combinator</a></h4>
+
+<p>The general sibling combinator is made of the &quot;tilde&quot;
+(U+007E, <code>~</code>) character that separates two sequences of
+simple selectors. The elements represented by the two sequences share
+the same parent in the document tree and the element represented by
+the first sequence precedes (not necessarily immediately) the element
+represented by the second one.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <pre>h1 ~ pre</pre>
+ <p>represents a <code>pre</code> element following an <code>h1</code>. It
+ is a correct and valid, but partial, description of:</p>
+ <pre>&lt;h1&gt;Definition of the function a&lt;/h1&gt;
+&lt;p&gt;Function a(x) has to be applied to all figures in the table.&lt;/p&gt;
+&lt;pre&gt;function a(x) = 12x/13.5&lt;/pre&gt;</pre>
+</div>
+
+<h2><a name=specificity>9. Calculating a selector's specificity</a></h2>
+
+<p>A selector's specificity is calculated as follows:</p>
+
+<ul>
+ <li>count the number of ID selectors in the selector (= a)</li>
+ <li>count the number of class selectors, attributes selectors, and pseudo-classes in the selector (= b)</li>
+ <li>count the number of element names in the selector (= c)</li>
+ <li>ignore pseudo-elements</li>
+</ul>
+
+<p>Selectors inside <a href="#negation">the negation pseudo-class</a>
+are counted like any other, but the negation itself does not count as
+a pseudo-class.</p>
+
+<p>Concatenating the three numbers a-b-c (in a number system with a
+large base) gives the specificity.</p>
+
+<div class="example">
+<p>Examples:</p>
+<pre>* /* a=0 b=0 c=0 -&gt; specificity = 0 */
+LI /* a=0 b=0 c=1 -&gt; specificity = 1 */
+UL LI /* a=0 b=0 c=2 -&gt; specificity = 2 */
+UL OL+LI /* a=0 b=0 c=3 -&gt; specificity = 3 */
+H1 + *[REL=up] /* a=0 b=1 c=1 -&gt; specificity = 11 */
+UL OL LI.red /* a=0 b=1 c=3 -&gt; specificity = 13 */
+LI.red.level /* a=0 b=2 c=1 -&gt; specificity = 21 */
+#x34y /* a=1 b=0 c=0 -&gt; specificity = 100 */
+#s12:not(FOO) /* a=1 b=0 c=1 -&gt; specificity = 101 */
+</pre>
+</div>
+
+<p class="note"><strong>Note:</strong> the specificity of the styles
+specified in an HTML <code>style</code> attribute is described in CSS
+2.1. <a href="#refsCSS21">[CSS21]</a>.</p>
+
+<h2><a name=w3cselgrammar>10. The grammar of Selectors</a></h2>
+
+<h3><a name=grammar>10.1. Grammar</a></h3>
+
+<p>The grammar below defines the syntax of Selectors. It is globally
+LL(1) and can be locally LL(2) (but note that most UA's should not use
+it directly, since it doesn't express the parsing conventions). The
+format of the productions is optimized for human consumption and some
+shorthand notations beyond Yacc (see <a href="#refsYACC">[YACC]</a>)
+are used:</p>
+
+<ul>
+ <li><b>*</b>: 0 or more
+ <li><b>+</b>: 1 or more
+ <li><b>?</b>: 0 or 1
+ <li><b>|</b>: separates alternatives
+ <li><b>[ ]</b>: grouping </li>
+</ul>
+
+<p>The productions are:</p>
+
+<pre>selectors_group
+ : selector [ COMMA S* selector ]*
+ ;
+
+selector
+ : simple_selector_sequence [ combinator simple_selector_sequence ]*
+ ;
+
+combinator
+ /* combinators can be surrounded by white space */
+ : PLUS S* | GREATER S* | TILDE S* | S+
+ ;
+
+simple_selector_sequence
+ : [ type_selector | universal ]
+ [ HASH | class | attrib | pseudo | negation ]*
+ | [ HASH | class | attrib | pseudo | negation ]+
+ ;
+
+type_selector
+ : [ namespace_prefix ]? element_name
+ ;
+
+namespace_prefix
+ : [ IDENT | '*' ]? '|'
+ ;
+
+element_name
+ : IDENT
+ ;
+
+universal
+ : [ namespace_prefix ]? '*'
+ ;
+
+class
+ : '.' IDENT
+ ;
+
+attrib
+ : '[' S* [ namespace_prefix ]? IDENT S*
+ [ [ PREFIXMATCH |
+ SUFFIXMATCH |
+ SUBSTRINGMATCH |
+ '=' |
+ INCLUDES |
+ DASHMATCH ] S* [ IDENT | STRING ] S*
+ ]? ']'
+ ;
+
+pseudo
+ /* '::' starts a pseudo-element, ':' a pseudo-class */
+ /* Exceptions: :first-line, :first-letter, :before and :after. */
+ /* Note that pseudo-elements are restricted to one per selector and */
+ /* occur only in the last simple_selector_sequence. */
+ : ':' ':'? [ IDENT | functional_pseudo ]
+ ;
+
+functional_pseudo
+ : FUNCTION S* expression ')'
+ ;
+
+expression
+ /* In CSS3, the expressions are identifiers, strings, */
+ /* or of the form "an+b" */
+ : [ [ PLUS | '-' | DIMENSION | NUMBER | STRING | IDENT ] S* ]+
+ ;
+
+negation
+ : NOT S* negation_arg S* ')'
+ ;
+
+negation_arg
+ : type_selector | universal | HASH | class | attrib | pseudo
+ ;</pre>
+
+
+<h3><a name=lex>10.2. Lexical scanner</a></h3>
+
+<p>The following is the <a name=x3>tokenizer</a>, written in Flex (see
+<a href="#refsFLEX">[FLEX]</a>) notation. The tokenizer is
+case-insensitive.</p>
+
+<p>The two occurrences of "\377" represent the highest character
+number that current versions of Flex can deal with (decimal 255). They
+should be read as "\4177777" (decimal 1114111), which is the highest
+possible code point in Unicode/ISO-10646. <a
+href="#refsUNICODE">[UNICODE]</a></p>
+
+<pre>%option case-insensitive
+
+ident [-]?{nmstart}{nmchar}*
+name {nmchar}+
+nmstart [_a-z]|{nonascii}|{escape}
+nonascii [^\0-\177]
+unicode \\[0-9a-f]{1,6}(\r\n|[ \n\r\t\f])?
+escape {unicode}|\\[^\n\r\f0-9a-f]
+nmchar [_a-z0-9-]|{nonascii}|{escape}
+num [0-9]+|[0-9]*\.[0-9]+
+string {string1}|{string2}
+string1 \"([^\n\r\f\\"]|\\{nl}|{nonascii}|{escape})*\"
+string2 \'([^\n\r\f\\']|\\{nl}|{nonascii}|{escape})*\'
+invalid {invalid1}|{invalid2}
+invalid1 \"([^\n\r\f\\"]|\\{nl}|{nonascii}|{escape})*
+invalid2 \'([^\n\r\f\\']|\\{nl}|{nonascii}|{escape})*
+nl \n|\r\n|\r|\f
+w [ \t\r\n\f]*
+
+%%
+
+[ \t\r\n\f]+ return S;
+
+"~=" return INCLUDES;
+"|=" return DASHMATCH;
+"^=" return PREFIXMATCH;
+"$=" return SUFFIXMATCH;
+"*=" return SUBSTRINGMATCH;
+{ident} return IDENT;
+{string} return STRING;
+{ident}"(" return FUNCTION;
+{num} return NUMBER;
+"#"{name} return HASH;
+{w}"+" return PLUS;
+{w}"&gt;" return GREATER;
+{w}"," return COMMA;
+{w}"~" return TILDE;
+":not(" return NOT;
+@{ident} return ATKEYWORD;
+{invalid} return INVALID;
+{num}% return PERCENTAGE;
+{num}{ident} return DIMENSION;
+"&lt;!--" return CDO;
+"--&gt;" return CDC;
+
+"url("{w}{string}{w}")" return URI;
+"url("{w}([!#$%&*-~]|{nonascii}|{escape})*{w}")" return URI;
+U\+[0-9a-f?]{1,6}(-[0-9a-f]{1,6})? return UNICODE_RANGE;
+
+\/\*[^*]*\*+([^/*][^*]*\*+)*\/ /* ignore comments */
+
+. return *yytext;</pre>
+
+
+
+<h2><a name=downlevel>11. Namespaces and down-level clients</a></h2>
+
+<p>An important issue is the interaction of CSS selectors with XML
+documents in web clients that were produced prior to this
+document. Unfortunately, due to the fact that namespaces must be
+matched based on the URI which identifies the namespace, not the
+namespace prefix, some mechanism is required to identify namespaces in
+CSS by their URI as well. Without such a mechanism, it is impossible
+to construct a CSS style sheet which will properly match selectors in
+all cases against a random set of XML documents. However, given
+complete knowledge of the XML document to which a style sheet is to be
+applied, and a limited use of namespaces within the XML document, it
+is possible to construct a style sheet in which selectors would match
+elements and attributes correctly.</p>
+
+<p>It should be noted that a down-level CSS client will (if it
+properly conforms to CSS forward compatible parsing rules) ignore all
+<code>@namespace</code> at-rules, as well as all style rules that make
+use of namespace qualified element type or attribute selectors. The
+syntax of delimiting namespace prefixes in CSS was deliberately chosen
+so that down-level CSS clients would ignore the style rules rather
+than possibly match them incorrectly.</p>
+
+<p>The use of default namespaces in CSS makes it possible to write
+element type selectors that will function in both namespace aware CSS
+clients as well as down-level clients. It should be noted that
+down-level clients may incorrectly match selectors against XML
+elements in other namespaces.</p>
+
+<p>The following are scenarios and examples in which it is possible to
+construct style sheets which would function properly in web clients
+that do not implement this proposal.</p>
+
+<ol>
+ <li>
+
+ <p>The XML document does not use namespaces.</p>
+
+ <ul>
+
+ <li>In this case, it is obviously not necessary to declare or use
+ namespaces in the style sheet. Standard CSS element type and
+ attribute selectors will function adequately in a down-level
+ client.</li>
+
+ <li>In a CSS namespace aware client, the default behavior of
+ element selectors matching without regard to namespace will
+ function properly against all elements, since no namespaces are
+ present. However, the use of specific element type selectors that
+ match only elements that have no namespace ("<code>|name</code>")
+ will guarantee that selectors will match only XML elements that do
+ not have a declared namespace. </li>
+
+ </ul>
+
+ </li>
+
+ <li>
+
+ <p>The XML document defines a single, default namespace used
+ throughout the document. No namespace prefixes are used in element
+ names.</p>
+
+ <ul>
+
+ <li>In this case, a down-level client will function as if
+ namespaces were not used in the XML document at all. Standard CSS
+ element type and attribute selectors will match against all
+ elements. </li>
+
+ </ul>
+
+ </li>
+
+ <li>
+
+ <p>The XML document does <b>not</b> use a default namespace, all
+ namespace prefixes used are known to the style sheet author, and
+ there is a direct mapping between namespace prefixes and namespace
+ URIs. (A given prefix may only be mapped to one namespace URI
+ throughout the XML document; there may be multiple prefixes mapped
+ to the same URI).</p>
+
+ <ul>
+
+ <li>In this case, the down-level client will view and match
+ element type and attribute selectors based on their fully
+ qualified name, not the local part as outlined in the <a
+ href="#typenmsp">Type selectors and Namespaces</a> section. CSS
+ selectors may be declared using an escaped colon "<code>\:</code>"
+ to describe the fully qualified names, e.g.
+ "<code>html\:h1</code>" will match
+ <code>&lt;html:h1&gt;</code>. Selectors using the qualified name
+ will only match XML elements that use the same prefix. Other
+ namespace prefixes used in the XML that are mapped to the same URI
+ will not match as expected unless additional CSS style rules are
+ declared for them.</li>
+
+ <li>Note that selectors declared in this fashion will
+ <em>only</em> match in down-level clients. A CSS namespace aware
+ client will match element type and attribute selectors based on
+ the name's local part. Selectors declared with the fully
+ qualified name will not match (unless there is no namespace prefix
+ in the fully qualified name).</li>
+
+ </ul>
+
+ </li>
+
+ </ol>
+
+<p>In other scenarios: when the namespace prefixes used in the XML are
+not known in advance by the style sheet author; or a combination of
+elements with no namespace are used in conjunction with elements using
+a default namespace; or the same namespace prefix is mapped to
+<em>different</em> namespace URIs within the same document, or in
+different documents; it is impossible to construct a CSS style sheet
+that will function properly against all elements in those documents,
+unless, the style sheet is written using a namespace URI syntax (as
+outlined in this document or similar) and the document is processed by
+a CSS and XML namespace aware client.</p>
+
+<h2><a name=profiling>12. Profiles</a></h2>
+
+<p>Each specification using Selectors must define the subset of W3C
+Selectors it allows and excludes, and describe the local meaning of
+all the components of that subset.</p>
+
+<p>Non normative examples:
+
+<div class="profile">
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>CSS level 1</td></tr>
+ <tr>
+ <th>Accepts</th>
+ <td>type selectors<br>class selectors<br>ID selectors<br>:link,
+ :visited and :active pseudo-classes<br>descendant combinator
+ <br>::first-line and ::first-letter pseudo-elements</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>
+
+<p>universal selector<br>attribute selectors<br>:hover and :focus
+ pseudo-classes<br>:target pseudo-class<br>:lang() pseudo-class<br>all UI
+ element states pseudo-classes<br>all structural
+ pseudo-classes<br>negation pseudo-class<br>all
+ UI element fragments pseudo-elements<br>::before and ::after
+ pseudo-elements<br>child combinators<br>sibling combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>only one class selector allowed per sequence of simple
+ selectors</td></tr></tbody></table><br><br>
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>CSS level 2</td></tr>
+ <tr>
+ <th>Accepts</th>
+ <td>type selectors<br>universal selector<br>attribute presence and
+ values selectors<br>class selectors<br>ID selectors<br>:link, :visited,
+ :active, :hover, :focus, :lang() and :first-child pseudo-classes
+ <br>descendant combinator<br>child combinator<br>adjacent sibling
+ combinator<br>::first-line and ::first-letter pseudo-elements<br>::before
+ and ::after pseudo-elements</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>
+
+<p>content selectors<br>substring matching attribute
+ selectors<br>:target pseudo-classes<br>all UI element
+ states pseudo-classes<br>all structural pseudo-classes other
+ than :first-child<br>negation pseudo-class<br>all UI element
+ fragments pseudo-elements<br>general sibling combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>more than one class selector per sequence of simple selectors (CSS1
+ constraint) allowed</td></tr></tbody></table>
+
+<p>In CSS, selectors express pattern matching rules that determine which style
+rules apply to elements in the document tree.
+
+<p>The following selector (CSS level 2) will <b>match</b> all anchors <code>a</code>
+with attribute <code>name</code> set inside a section 1 header <code>h1</code>:
+<pre>h1 a[name]</pre>
+
+<p>All CSS declarations attached to such a selector are applied to elements
+matching it. </div>
+
+<div class="profile">
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>STTS 3</td>
+ </tr>
+ <tr>
+ <th>Accepts</th>
+ <td>
+
+<p>type selectors<br>universal selectors<br>attribute selectors<br>class
+ selectors<br>ID selectors<br>all structural pseudo-classes<br>
+ all combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>non-accepted pseudo-classes<br>pseudo-elements<br></td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>some selectors and combinators are not allowed in fragment
+ descriptions on the right side of STTS declarations.</td></tr></tbody></table>
+<form>
+<input type="text" name="test1"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+</form>
+
+<p>Selectors can be used in STTS 3 in two different
+ manners:
+<ol>
+ <li>a selection mechanism equivalent to CSS selection mechanism: declarations
+ attached to a given selector are applied to elements matching that selector,
+ <li>fragment descriptions that appear on the right side of declarations.
+</li></ol></div>
+
+<h2><a name=Conformance></a>13. Conformance and requirements</h2>
+
+<p>This section defines conformance with the present specification only.
+
+<p>The inability of a user agent to implement part of this specification due to
+the limitations of a particular device (e.g., non interactive user agents will
+probably not implement dynamic pseudo-classes because they make no sense without
+interactivity) does not imply non-conformance.
+
+<p>All specifications reusing Selectors must contain a <a
+href="#profiling">Profile</a> listing the
+subset of Selectors it accepts or excludes, and describing the constraints
+it adds to the current specification.
+
+<p>Invalidity is caused by a parsing error, e.g. an unrecognized token or a token
+which is not allowed at the current parsing point.
+
+<p>User agents must observe the rules for handling parsing errors:
+<ul>
+ <li>a simple selector containing an undeclared namespace prefix is invalid</li>
+ <li>a selector containing an invalid simple selector, an invalid combinator
+ or an invalid token is invalid. </li>
+ <li>a group of selectors containing an invalid selector is invalid.</li>
+</ul>
+
+<p class="foo test1 bar">Specifications reusing Selectors must define how to handle parsing
+errors. (In the case of CSS, the entire rule in which the selector is
+used is dropped.)</p>
+
+<!-- Apparently all these references are out of date:
+<p>Implementations of this specification must behave as
+"recipients of text data" as defined by <a href="#refsCWWW">[CWWW]</a>
+when parsing selectors and attempting matches. (In particular,
+implementations must assume the data is normalized and must not
+normalize it.) Normative rules for matching strings are defined in
+<a href="#refsCWWW">[CWWW]</a> and <a
+href="#refsUNICODE">[UNICODE]</a> and apply to implementations of this
+specification.</p>-->
+
+<h2><a name=Tests></a>14. Tests</h2>
+
+<p>This specification has <a
+href="http://www.w3.org/Style/CSS/Test/CSS3/Selectors/current/">a test
+suite</a> allowing user agents to verify their basic conformance to
+the specification. This test suite does not pretend to be exhaustive
+and does not cover all possible combined cases of Selectors.</p>
+
+<h2><a name=ACKS></a>15. Acknowledgements</h2>
+
+<p>The CSS working group would like to thank everyone who has sent
+comments on this specification over the years.</p>
+
+<p>The working group would like to extend special thanks to Donna
+McManus, Justin Baker, Joel Sklar, and Molly Ives Brower who perfermed
+the final editorial review.</p>
+
+<h2><a name=references>16. References</a></h2>
+
+<dl class="refs">
+
+ <dt>[CSS1]
+ <dd><a name=refsCSS1></a> Bert Bos, H&aring;kon Wium Lie; "<cite>Cascading Style Sheets, level 1</cite>", W3C Recommendation, 17 Dec 1996, revised 11 Jan 1999
+ <dd>(<code><a href="http://www.w3.org/TR/REC-CSS1">http://www.w3.org/TR/REC-CSS1</a></code>)
+
+ <dt>[CSS21]
+ <dd><a name=refsCSS21></a> Bert Bos, Tantek &Ccedil;elik, Ian Hickson, H&aring;kon Wium Lie, editors; "<cite>Cascading Style Sheets, level 2 revision 1</cite>", W3C Working Draft, 13 June 2005
+ <dd>(<code><a href="http://www.w3.org/TR/CSS21">http://www.w3.org/TR/CSS21</a></code>)
+
+ <dt>[CWWW]
+ <dd><a name=refsCWWW></a> Martin J. D&uuml;rst, Fran&ccedil;ois Yergeau, Misha Wolf, Asmus Freytag, Tex Texin, editors; "<cite>Character Model for the World Wide Web</cite>", W3C Recommendation, 15 February 2005
+ <dd>(<code><a href="http://www.w3.org/TR/charmod/">http://www.w3.org/TR/charmod/</a></code>)
+
+ <dt>[FLEX]
+ <dd><a name="refsFLEX"></a> "<cite>Flex: The Lexical Scanner Generator</cite>", Version 2.3.7, ISBN 1882114213
+
+ <dt>[HTML4]
+ <dd><a name="refsHTML4"></a> Dave Ragget, Arnaud Le Hors, Ian Jacobs, editors; "<cite>HTML 4.01 Specification</cite>", W3C Recommendation, 24 December 1999
+ <dd>(<a href="http://www.w3.org/TR/html4/"><code>http://www.w3.org/TR/html4/</code></a>)
+
+ <dt>[MATH]
+ <dd><a name="refsMATH"></a> Patrick Ion, Robert Miner, editors; "<cite>Mathematical Markup Language (MathML) 1.01</cite>", W3C Recommendation, revision of 7 July 1999
+ <dd>(<code><a href="http://www.w3.org/TR/REC-MathML/">http://www.w3.org/TR/REC-MathML/</a></code>)
+
+ <dt>[RFC3066]
+ <dd><a name="refsRFC3066"></a> H. Alvestrand; "<cite>Tags for the Identification of Languages</cite>", Request for Comments 3066, January 2001
+ <dd>(<a href="http://www.ietf.org/rfc/rfc3066.txt"><code>http://www.ietf.org/rfc/rfc3066.txt</code></a>)
+
+ <dt>[STTS]
+ <dd><a name=refsSTTS></a> Daniel Glazman; "<cite>Simple Tree Transformation Sheets 3</cite>", Electricit&eacute; de France, submission to the W3C, 11 November 1998
+ <dd>(<code><a href="http://www.w3.org/TR/NOTE-STTS3">http://www.w3.org/TR/NOTE-STTS3</a></code>)
+
+ <dt>[SVG]
+ <dd><a name="refsSVG"></a> Jon Ferraiolo, &#34276;&#27810; &#28147;, Dean Jackson, editors; "<cite>Scalable Vector Graphics (SVG) 1.1 Specification</cite>", W3C Recommendation, 14 January 2003
+ <dd>(<code><a href="http://www.w3.org/TR/SVG/">http://www.w3.org/TR/SVG/</a></code>)
+
+ <dt>[UNICODE]</dt>
+ <dd><a name="refsUNICODE"></a> <cite><a
+ href="http://www.unicode.org/versions/Unicode4.1.0/">The Unicode Standard, Version 4.1</a></cite>, The Unicode Consortium. Boston, MA, Addison-Wesley, March 2005. ISBN 0-321-18578-1, as amended by <a href="http://www.unicode.org/versions/Unicode4.0.1/">Unicode 4.0.1</a> and <a href="http://www.unicode.org/versions/Unicode4.1.0/">Unicode 4.1.0</a>.
+ <dd>(<code><a href="http://www.unicode.org/versions/">http://www.unicode.org/versions/</a></code>)</dd>
+
+ <dt>[XML10]
+ <dd><a name="refsXML10"></a> Tim Bray, Jean Paoli, C. M. Sperberg-McQueen, Eve Maler, Fran&ccedil;ois Yergeau, editors; "<cite>Extensible Markup Language (XML) 1.0 (Third Edition)</cite>", W3C Recommendation, 4 February 2004
+ <dd>(<a href="http://www.w3.org/TR/REC-xml/"><code>http://www.w3.org/TR/REC-xml/</code></a>)
+
+ <dt>[XMLNAMES]
+ <dd><a name="refsXMLNAMES"></a> Tim Bray, Dave Hollander, Andrew Layman, editors; "<cite>Namespaces in XML</cite>", W3C Recommendation, 14 January 1999
+ <dd>(<a href="http://www.w3.org/TR/REC-xml-names/"><code>http://www.w3.org/TR/REC-xml-names/</code></a>)
+
+ <dt>[YACC]
+ <dd><a name="refsYACC"></a> S. C. Johnson; "<cite>YACC &mdash; Yet another compiler compiler</cite>", Technical Report, Murray Hill, 1975
+
+</dl>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/dom-modify.html b/testing/talos/talos/tests/dromaeo/tests/dom-modify.html
new file mode 100644
index 0000000000..af895a66f2
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/dom-modify.html
@@ -0,0 +1,2973 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script>
+window.onload = function(){
+startTest("dom-modify", '9ecfa02b');
+
+// Try to force real results
+var ret, tmp, str;
+
+var elems = [];
+var htmlstr = document.body.innerHTML;
+var div = document.createElement("div");
+var num = 400;
+
+for ( var i = 0; i < 1024; i++ )
+ str += String.fromCharCode( (25 * Math.random()) + 97 );
+
+ test( "createElement", function(){
+ for ( var i = 0; i < num; i++ ) {
+ ret = document.createElement("div");
+ ret = document.createElement("span");
+ ret = document.createElement("table");
+ ret = document.createElement("tr");
+ ret = document.createElement("select");
+ }
+ });
+
+ test( "createTextNode", function(){
+ for ( var i = 0; i < num; i++ ) {
+ ret = document.createTextNode(str);
+ ret = document.createTextNode(str + "2");
+ ret = document.createTextNode(str + "3");
+ ret = document.createTextNode(str + "4");
+ ret = document.createTextNode(str + "5");
+ }
+ });
+
+ /* Need a better way to test this
+ test( "removeChild", function(){
+ while ( document.body.firstChild )
+ document.body.removeChild( document.body.firstChild );
+ });
+ */
+
+ test( "innerHTML", function(){
+ document.body.innerHTML = htmlstr;
+ });
+
+ prep(function(){
+ elems = [];
+ var telems = document.body.childNodes;
+ for ( var i = 0; i < telems.length; i++ )
+ elems.push( telems[i] );
+ });
+
+ test( "cloneNode", function(){
+ for ( var i = 0; i < elems.length; i++ ) {
+ ret = elems[i].cloneNode(false);
+ ret = elems[i].cloneNode(true);
+ ret = elems[i].cloneNode(true);
+ }
+ });
+
+ test( "appendChild", function(){
+ for ( var i = 0; i < elems.length; i++ )
+ document.body.appendChild( elems[i] );
+ });
+
+ test( "insertBefore", function(){
+ for ( var i = 0; i < elems.length; i++ )
+ document.body.insertBefore( elems[i], document.body.firstChild );
+ });
+
+endTest();
+};
+</script>
+</head>
+<body>
+ <div class="head">
+ <p><a href="http://www.w3.org/"><img height=48 alt=W3C src="w3c_home.png" width=72></a>
+
+ <h1 id="title">Selectors</h1>
+
+ <h2>W3C Working Draft 15 December 2005</h2>
+
+ <dl>
+
+ <dt>This version:
+
+ <dd><a href="http://www.w3.org/TR/2005/WD-css3-selectors-20051215">
+ http://www.w3.org/TR/2005/WD-css3-selectors-20051215</a>
+
+ <dt>Latest version:
+
+ <dd><a href="http://www.w3.org/TR/css3-selectors">
+ http://www.w3.org/TR/css3-selectors</a>
+
+ <dt>Previous version:
+
+ <dd><a href="http://www.w3.org/TR/2001/CR-css3-selectors-20011113">
+ http://www.w3.org/TR/2001/CR-css3-selectors-20011113</a>
+
+ <dt><a name=editors-list></a>Editors:
+
+ <dd class="vcard"><span class="fn">Daniel Glazman</span> (Invited Expert)</dd>
+
+ <dd class="vcard"><a lang="tr" class="url fn" href="http://www.tantek.com/">Tantek &Ccedil;elik</a> (Invited Expert)
+
+ <dd class="vcard"><a href="mailto:ian@hixie.ch" class="url fn">Ian Hickson</a> (<span
+ class="company"><a href="http://www.google.com/">Google</a></span>)
+
+ <dd class="vcard"><span class="fn">Peter Linss</span> (former editor, <span class="company"><a
+ href="http://www.netscape.com/">Netscape/AOL</a></span>)
+
+ <dd class="vcard"><span class="fn">John Williams</span> (former editor, <span class="company"><a
+ href="http://www.quark.com/">Quark, Inc.</a></span>)
+
+ </dl>
+
+ <p class="copyright"><a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright">
+ Copyright</a> &copy; 2005 <a href="http://www.w3.org/"><abbr
+ title="World Wide Web Consortium">W3C</abbr></a><sup>&reg;</sup>
+ (<a href="http://www.csail.mit.edu/"><abbr title="Massachusetts
+ Institute of Technology">MIT</abbr></a>, <a
+ href="http://www.ercim.org/"><acronym title="European Research
+ Consortium for Informatics and Mathematics">ERCIM</acronym></a>, <a
+ href="http://www.keio.ac.jp/">Keio</a>), All Rights Reserved. W3C
+ <a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">liability</a>,
+ <a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">trademark</a>,
+ <a
+ href="http://www.w3.org/Consortium/Legal/copyright-documents">document
+ use</a> rules apply.
+
+ <hr title="Separator for header">
+
+ </div>
+
+ <h2><a name=abstract></a>Abstract</h2>
+
+ <p><em>Selectors</em> are patterns that match against elements in a
+ tree. Selectors have been optimized for use with HTML and XML, and
+ are designed to be usable in performance-critical code.</p>
+
+ <p><acronym title="Cascading Style Sheets">CSS</acronym> (Cascading
+ Style Sheets) is a language for describing the rendering of <acronym
+ title="Hypertext Markup Language">HTML</acronym> and <acronym
+ title="Extensible Markup Language">XML</acronym> documents on
+ screen, on paper, in speech, etc. CSS uses Selectors for binding
+ style properties to elements in the document. This document
+ describes extensions to the selectors defined in CSS level 2. These
+ extended selectors will be used by CSS level 3.
+
+ <p>Selectors define the following function:</p>
+
+ <pre>expression &#x2217; element &rarr; boolean</pre>
+
+ <p>That is, given an element and a selector, this specification
+ defines whether that element matches the selector.</p>
+
+ <p>These expressions can also be used, for instance, to select a set
+ of elements, or a single element from a set of elements, by
+ evaluating the expression across all the elements in a
+ subtree. <acronym title="Simple Tree Transformation
+ Sheets">STTS</acronym> (Simple Tree Transformation Sheets), a
+ language for transforming XML trees, uses this mechanism. <a href="#refsSTTS">[STTS]</a></p>
+
+ <h2><a name=status></a>Status of this document</h2>
+
+ <p><em>This section describes the status of this document at the
+ time of its publication. Other documents may supersede this
+ document. A list of current W3C publications and the latest revision
+ of this technical report can be found in the <a
+ href="http://www.w3.org/TR/">W3C technical reports index at
+ http://www.w3.org/TR/.</a></em></p>
+
+ <p>This document describes the selectors that already exist in <a
+ href="#refsCSS1"><abbr title="CSS level 1">CSS1</abbr></a> and <a
+ href="#refsCSS21"><abbr title="CSS level 2">CSS2</abbr></a>, and
+ also proposes new selectors for <abbr title="CSS level
+ 3">CSS3</abbr> and other languages that may need them.</p>
+
+ <p>The CSS Working Group doesn't expect that all implementations of
+ CSS3 will have to implement all selectors. Instead, there will
+ probably be a small number of variants of CSS3, called profiles. For
+ example, it may be that only a profile for interactive user agents
+ will include all of the selectors.</p>
+
+ <p>This specification is a last call working draft for the the <a
+ href="http://www.w3.org/Style/CSS/members">CSS Working Group</a>
+ (<a href="/Style/">Style Activity</a>). This
+ document is a revision of the <a
+ href="http://www.w3.org/TR/2001/CR-css3-selectors-20011113/">Candidate
+ Recommendation dated 2001 November 13</a>, and has incorporated
+ implementation feedback received in the past few years. It is
+ expected that this last call will proceed straight to Proposed
+ Recommendation stage since it is believed that interoperability will
+ be demonstrable.</p>
+
+ <p>All persons are encouraged to review and implement this
+ specification and return comments to the (<a
+ href="http://lists.w3.org/Archives/Public/www-style/">archived</a>)
+ public mailing list <a
+ href="http://www.w3.org/Mail/Lists.html#www-style">www-style</a>
+ (see <a href="http://www.w3.org/Mail/Request">instructions</a>). W3C
+ Members can also send comments directly to the CSS Working
+ Group.
+ The deadline for comments is 14 January 2006.</p>
+
+ <p>This is still a draft document and may be updated, replaced, or
+ obsoleted by other documents at any time. It is inappropriate to
+ cite a W3C Working Draft as other than &quot;work in progress&quot;.
+
+ <p>This document may be available in <a
+ href="http://www.w3.org/Style/css3-selectors-updates/translations">translation</a>.
+ The English version of this specification is the only normative
+ version.
+
+ <div class="subtoc">
+
+ <h2 id="test1"><a name=contents>Table of contents</a></h2>
+
+ <ul class="toc">
+ <li class="tocline2"><a href="#context">1. Introduction</a>
+ <ul>
+ <li><a href="#dependencies">1.1. Dependencies</a> </li>
+ <li><a href="#terminology">1.2. Terminology</a> </li>
+ <li><a href="#changesFromCSS2">1.3. Changes from CSS2</a> </li>
+ </ul>
+ <li class="tocline2"><a href="#selectors">2. Selectors</a>
+ <li class="tocline2"><a href="#casesens">3. Case sensitivity</a>
+ <li class="tocline2"><a href="#selector-syntax">4. Selector syntax</a>
+ <li class="tocline2"><a href="#grouping">5. Groups of selectors</a>
+ <li class="tocline2"><a href="#simple-selectors">6. Simple selectors</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#type-selectors">6.1. Type selectors</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#typenmsp">6.1.1. Type selectors and namespaces</a></li>
+ </ul>
+ <li class="tocline3"><a href="#universal-selector">6.2. Universal selector</a>
+ <ul>
+ <li><a href="#univnmsp">6.2.1. Universal selector and namespaces</a></li>
+ </ul>
+ <li class="tocline3"><a href="#attribute-selectors">6.3. Attribute selectors</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#attribute-representation">6.3.1. Representation of attributes and attributes values</a>
+ <li><a href="#attribute-substrings">6.3.2. Substring matching attribute selectors</a>
+ <li class="tocline4"><a href="#attrnmsp">6.3.3. Attribute selectors and namespaces</a>
+ <li class="tocline4"><a href="#def-values">6.3.4. Default attribute values in DTDs</a></li>
+ </ul>
+ <li class="tocline3"><a href="#class-html">6.4. Class selectors</a>
+ <li class="tocline3"><a href="#id-selectors">6.5. ID selectors</a>
+ <li class="tocline3"><a href="#pseudo-classes">6.6. Pseudo-classes</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#dynamic-pseudos">6.6.1. Dynamic pseudo-classes</a>
+ <li class="tocline4"><a href="#target-pseudo">6.6.2. The :target pseudo-class</a>
+ <li class="tocline4"><a href="#lang-pseudo">6.6.3. The :lang() pseudo-class</a>
+ <li class="tocline4"><a href="#UIstates">6.6.4. UI element states pseudo-classes</a>
+ <li class="tocline4"><a href="#structural-pseudos">6.6.5. Structural pseudo-classes</a>
+ <ul>
+ <li><a href="#root-pseudo">:root pseudo-class</a>
+ <li><a href="#nth-child-pseudo">:nth-child() pseudo-class</a>
+ <li><a href="#nth-last-child-pseudo">:nth-last-child()</a>
+ <li><a href="#nth-of-type-pseudo">:nth-of-type() pseudo-class</a>
+ <li><a href="#nth-last-of-type-pseudo">:nth-last-of-type()</a>
+ <li><a href="#first-child-pseudo">:first-child pseudo-class</a>
+ <li><a href="#last-child-pseudo">:last-child pseudo-class</a>
+ <li><a href="#first-of-type-pseudo">:first-of-type pseudo-class</a>
+ <li><a href="#last-of-type-pseudo">:last-of-type pseudo-class</a>
+ <li><a href="#only-child-pseudo">:only-child pseudo-class</a>
+ <li><a href="#only-of-type-pseudo">:only-of-type pseudo-class</a>
+ <li><a href="#empty-pseudo">:empty pseudo-class</a></li>
+ </ul>
+ <li class="tocline4"><a href="#negation">6.6.7. The negation pseudo-class</a></li>
+ </ul>
+ </li>
+ </ul>
+ <li><a href="#pseudo-elements">7. Pseudo-elements</a>
+ <ul>
+ <li><a href="#first-line">7.1. The ::first-line pseudo-element</a>
+ <li><a href="#first-letter">7.2. The ::first-letter pseudo-element</a>
+ <li><a href="#UIfragments">7.3. The ::selection pseudo-element</a>
+ <li><a href="#gen-content">7.4. The ::before and ::after pseudo-elements</a></li>
+ </ul>
+ <li class="tocline2"><a href="#combinators">8. Combinators</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#descendant-combinators">8.1. Descendant combinators</a>
+ <li class="tocline3"><a href="#child-combinators">8.2. Child combinators</a>
+ <li class="tocline3"><a href="#sibling-combinators">8.3. Sibling combinators</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#adjacent-sibling-combinators">8.3.1. Adjacent sibling combinator</a>
+ <li class="tocline4"><a href="#general-sibling-combinators">8.3.2. General sibling combinator</a></li>
+ </ul>
+ </li>
+ </ul>
+ <li class="tocline2"><a href="#specificity">9. Calculating a selector's specificity</a>
+ <li class="tocline2"><a href="#w3cselgrammar">10. The grammar of Selectors</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#grammar">10.1. Grammar</a>
+ <li class="tocline3"><a href="#lex">10.2. Lexical scanner</a></li>
+ </ul>
+ <li class="tocline2"><a href="#downlevel">11. Namespaces and down-level clients</a>
+ <li class="tocline2"><a href="#profiling">12. Profiles</a>
+ <li><a href="#Conformance">13. Conformance and requirements</a>
+ <li><a href="#Tests">14. Tests</a>
+ <li><a href="#ACKS">15. Acknowledgements</a>
+ <li class="tocline2"><a href="#references">16. References</a>
+ </ul>
+
+ </div>
+
+ <h2><a name=context>1. Introduction</a></h2>
+
+ <h3><a name=dependencies></a>1.1. Dependencies</h3>
+
+ <p>Some features of this specification are specific to CSS, or have
+ particular limitations or rules specific to CSS. In this
+ specification, these have been described in terms of CSS2.1. <a
+ href="#refsCSS21">[CSS21]</a></p>
+
+ <h3><a name=terminology></a>1.2. Terminology</h3>
+
+ <p>All of the text of this specification is normative except
+ examples, notes, and sections explicitly marked as
+ non-normative.</p>
+
+ <h3><a name=changesFromCSS2></a>1.3. Changes from CSS2</h3>
+
+ <p><em>This section is non-normative.</em></p>
+
+ <p>The main differences between the selectors in CSS2 and those in
+ Selectors are:
+
+ <ul>
+
+ <li>the list of basic definitions (selector, group of selectors,
+ simple selector, etc.) has been changed; in particular, what was
+ referred to in CSS2 as a simple selector is now called a sequence
+ of simple selectors, and the term "simple selector" is now used for
+ the components of this sequence</li>
+
+ <li>an optional namespace component is now allowed in type element
+ selectors, the universal selector and attribute selectors</li>
+
+ <li>a <a href="#general-sibling-combinators">new combinator</a> has been introduced</li>
+
+ <li>new simple selectors including substring matching attribute
+ selectors, and new pseudo-classes</li>
+
+ <li>new pseudo-elements, and introduction of the "::" convention
+ for pseudo-elements</li>
+
+ <li>the grammar has been rewritten</li>
+
+ <li>profiles to be added to specifications integrating Selectors
+ and defining the set of selectors which is actually supported by
+ each specification</li>
+
+ <li>Selectors are now a CSS3 Module and an independent
+ specification; other specifications can now refer to this document
+ independently of CSS</li>
+
+ <li>the specification now has its own test suite</li>
+
+ </ul>
+
+<h2><a name=selectors></a>2. Selectors</h2>
+
+<p><em>This section is non-normative, as it merely summarizes the
+following sections.</em></p>
+
+<p>A Selector represents a structure. This structure can be used as a
+condition (e.g. in a CSS rule) that determines which elements a
+selector matches in the document tree, or as a flat description of the
+HTML or XML fragment corresponding to that structure.</p>
+
+<p>Selectors may range from simple element names to rich contextual
+representations.</p>
+
+<p>The following table summarizes the Selector syntax:</p>
+
+<table class="selectorsReview">
+ <thead>
+ <tr>
+ <th class="pattern">Pattern</th>
+ <th class="meaning">Meaning</th>
+ <th class="described">Described in section</th>
+ <th class="origin">First defined in CSS level</th></tr>
+ <tbody>
+ <tr>
+ <td class="pattern">*</td>
+ <td class="meaning">any element</td>
+ <td class="described"><a
+ href="#universal-selector">Universal
+ selector</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E</td>
+ <td class="meaning">an element of type E</td>
+ <td class="described"><a
+ href="#type-selectors">Type selector</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E[foo]</td>
+ <td class="meaning">an E element with a "foo" attribute</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value is exactly
+ equal to "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo~="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value is a list of
+ space-separated values, one of which is exactly equal to "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo^="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value begins exactly
+ with the string "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[foo$="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value ends exactly
+ with the string "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[foo*="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value contains the
+ substring "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[hreflang|="en"]</td>
+ <td class="meaning">an E element whose "hreflang" attribute has a hyphen-separated
+ list of values beginning (from the left) with "en"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:root</td>
+ <td class="meaning">an E element, root of the document</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-child(n)</td>
+ <td class="meaning">an E element, the n-th child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-last-child(n)</td>
+ <td class="meaning">an E element, the n-th child of its parent, counting
+ from the last one</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-of-type(n)</td>
+ <td class="meaning">an E element, the n-th sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-last-of-type(n)</td>
+ <td class="meaning">an E element, the n-th sibling of its type, counting
+ from the last one</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:first-child</td>
+ <td class="meaning">an E element, first child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:last-child</td>
+ <td class="meaning">an E element, last child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:first-of-type</td>
+ <td class="meaning">an E element, first sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:last-of-type</td>
+ <td class="meaning">an E element, last sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:only-child</td>
+ <td class="meaning">an E element, only child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:only-of-type</td>
+ <td class="meaning">an E element, only sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:empty</td>
+ <td class="meaning">an E element that has no children (including text
+ nodes)</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:link<br>E:visited</td>
+ <td class="meaning">an E element being the source anchor of a hyperlink of
+ which the target is not yet visited (:link) or already visited
+ (:visited)</td>
+ <td class="described"><a
+ href="#link">The link
+ pseudo-classes</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E:active<br>E:hover<br>E:focus</td>
+ <td class="meaning">an E element during certain user actions</td>
+ <td class="described"><a
+ href="#useraction-pseudos">The user
+ action pseudo-classes</a></td>
+ <td class="origin">1 and 2</td></tr>
+ <tr>
+ <td class="pattern">E:target</td>
+ <td class="meaning">an E element being the target of the referring URI</td>
+ <td class="described"><a
+ href="#target-pseudo">The target
+ pseudo-class</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:lang(fr)</td>
+ <td class="meaning">an element of type E in language "fr" (the document
+ language specifies how language is determined)</td>
+ <td class="described"><a
+ href="#lang-pseudo">The :lang()
+ pseudo-class</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:enabled<br>E:disabled</td>
+ <td class="meaning">a user interface element E which is enabled or
+ disabled</td>
+ <td class="described"><a
+ href="#UIstates">The UI element states
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:checked<!--<br>E:indeterminate--></td>
+ <td class="meaning">a user interface element E which is checked<!-- or in an
+ indeterminate state--> (for instance a radio-button or checkbox)</td>
+ <td class="described"><a
+ href="#UIstates">The UI element states
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E::first-line</td>
+ <td class="meaning">the first formatted line of an E element</td>
+ <td class="described"><a
+ href="#first-line">The ::first-line
+ pseudo-element</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E::first-letter</td>
+ <td class="meaning">the first formatted letter of an E element</td>
+ <td class="described"><a
+ href="#first-letter">The ::first-letter
+ pseudo-element</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E::selection</td>
+ <td class="meaning">the portion of an E element that is currently
+ selected/highlighted by the user</td>
+ <td class="described"><a
+ href="#UIfragments">The UI element
+ fragments pseudo-elements</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E::before</td>
+ <td class="meaning">generated content before an E element</td>
+ <td class="described"><a
+ href="#gen-content">The ::before
+ pseudo-element</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E::after</td>
+ <td class="meaning">generated content after an E element</td>
+ <td class="described"><a
+ href="#gen-content">The ::after
+ pseudo-element</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E.warning</td>
+ <td class="meaning">an E element whose class is
+"warning" (the document language specifies how class is determined).</td>
+ <td class="described"><a
+ href="#class-html">Class
+ selectors</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E#myid</td>
+ <td class="meaning">an E element with ID equal to "myid".</td>
+ <td class="described"><a
+ href="#id-selectors">ID
+ selectors</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E:not(s)</td>
+ <td class="meaning">an E element that does not match simple selector s</td>
+ <td class="described"><a
+ href="#negation">Negation
+ pseudo-class</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E F</td>
+ <td class="meaning">an F element descendant of an E element</td>
+ <td class="described"><a
+ href="#descendant-combinators">Descendant
+ combinator</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E &gt; F</td>
+ <td class="meaning">an F element child of an E element</td>
+ <td class="described"><a
+ href="#child-combinators">Child
+ combinator</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E + F</td>
+ <td class="meaning">an F element immediately preceded by an E element</td>
+ <td class="described"><a
+ href="#adjacent-sibling-combinators">Adjacent sibling combinator</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E ~ F</td>
+ <td class="meaning">an F element preceded by an E element</td>
+ <td class="described"><a
+ href="#general-sibling-combinators">General sibling combinator</a></td>
+ <td class="origin">3</td></tr></tbody></table>
+
+<p>The meaning of each selector is derived from the table above by
+prepending "matches" to the contents of each cell in the "Meaning"
+column.</p>
+
+<h2><a name=casesens>3. Case sensitivity</a></h2>
+
+<p>The case sensitivity of document language element names, attribute
+names, and attribute values in selectors depends on the document
+language. For example, in HTML, element names are case-insensitive,
+but in XML, they are case-sensitive.</p>
+
+<h2><a name=selector-syntax>4. Selector syntax</a></h2>
+
+<p>A <dfn><a name=selector>selector</a></dfn> is a chain of one
+or more <a href="#sequence">sequences of simple selectors</a>
+separated by <a href="#combinators">combinators</a>.</p>
+
+<p>A <dfn><a name=sequence>sequence of simple selectors</a></dfn>
+is a chain of <a href="#simple-selectors-dfn">simple selectors</a>
+that are not separated by a <a href="#combinators">combinator</a>. It
+always begins with a <a href="#type-selectors">type selector</a> or a
+<a href="#universal-selector">universal selector</a>. No other type
+selector or universal selector is allowed in the sequence.</p>
+
+<p>A <dfn><a name=simple-selectors-dfn></a><a
+href="#simple-selectors">simple selector</a></dfn> is either a <a
+href="#type-selectors">type selector</a>, <a
+href="#universal-selector">universal selector</a>, <a
+href="#attribute-selectors">attribute selector</a>, <a
+href="#class-html">class selector</a>, <a
+href="#id-selectors">ID selector</a>, <a
+href="#content-selectors">content selector</a>, or <a
+href="#pseudo-classes">pseudo-class</a>. One <a
+href="#pseudo-elements">pseudo-element</a> may be appended to the last
+sequence of simple selectors.</p>
+
+<p><dfn>Combinators</dfn> are: white space, &quot;greater-than
+sign&quot; (U+003E, <code>&gt;</code>), &quot;plus sign&quot; (U+002B,
+<code>+</code>) and &quot;tilde&quot; (U+007E, <code>~</code>). White
+space may appear between a combinator and the simple selectors around
+it. <a name=whitespace></a>Only the characters "space" (U+0020), "tab"
+(U+0009), "line feed" (U+000A), "carriage return" (U+000D), and "form
+feed" (U+000C) can occur in white space. Other space-like characters,
+such as "em-space" (U+2003) and "ideographic space" (U+3000), are
+never part of white space.</p>
+
+<p>The elements of a document tree that are represented by a selector
+are the <dfn><a name=subject></a>subjects of the selector</dfn>. A
+selector consisting of a single sequence of simple selectors
+represents any element satisfying its requirements. Prepending another
+sequence of simple selectors and a combinator to a sequence imposes
+additional matching constraints, so the subjects of a selector are
+always a subset of the elements represented by the last sequence of
+simple selectors.</p>
+
+<p>An empty selector, containing no sequence of simple selectors and
+no pseudo-element, is an <a href="#Conformance">invalid
+selector</a>.</p>
+
+<h2><a name=grouping>5. Groups of selectors</a></h2>
+
+<p>When several selectors share the same declarations, they may be
+grouped into a comma-separated list. (A comma is U+002C.)</p>
+
+<div class="example">
+<p>CSS examples:</p>
+<p>In this example, we condense three rules with identical
+declarations into one. Thus,</p>
+<pre>h1 { font-family: sans-serif }
+h2 { font-family: sans-serif }
+h3 { font-family: sans-serif }</pre>
+<p>is equivalent to:</p>
+<pre>h1, h2, h3 { font-family: sans-serif }</pre>
+</div>
+
+<p><strong>Warning</strong>: the equivalence is true in this example
+because all the selectors are valid selectors. If just one of these
+selectors were invalid, the entire group of selectors would be
+invalid. This would invalidate the rule for all three heading
+elements, whereas in the former case only one of the three individual
+heading rules would be invalidated.</p>
+
+
+<h2><a name=simple-selectors>6. Simple selectors</a></h2>
+
+<h3><a name=type-selectors>6.1. Type selector</a></h3>
+
+<p>A <dfn>type selector</dfn> is the name of a document language
+element type. A type selector represents an instance of the element
+type in the document tree.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents an <code>h1</code> element in the document tree:</p>
+ <pre>h1</pre>
+</div>
+
+
+<h4><a name=typenmsp>6.1.1. Type selectors and namespaces</a></h4>
+
+<p>Type selectors allow an optional namespace (<a
+href="#refsXMLNAMES">[XMLNAMES]</a>) component. A namespace prefix
+that has been previously declared may be prepended to the element name
+separated by the namespace separator &quot;vertical bar&quot;
+(U+007C, <code>|</code>).</p>
+
+<p>The namespace component may be left empty to indicate that the
+selector is only to represent elements with no declared namespace.</p>
+
+<p>An asterisk may be used for the namespace prefix, indicating that
+the selector represents elements in any namespace (including elements
+with no namespace).</p>
+
+<p>Element type selectors that have no namespace component (no
+namespace separator), represent elements without regard to the
+element's namespace (equivalent to "<code>*|</code>") unless a default
+namespace has been declared. If a default namespace has been declared,
+the selector will represent only elements in the default
+namespace.</p>
+
+<p>A type selector containing a namespace prefix that has not been
+previously declared is an <a href="#Conformance">invalid</a> selector.
+The mechanism for declaring a namespace prefix is left up to the
+language implementing Selectors. In CSS, such a mechanism is defined
+in the General Syntax module.</p>
+
+<p>In a namespace-aware client, element type selectors will only match
+against the <a
+href="http://www.w3.org/TR/REC-xml-names/#NT-LocalPart">local part</a>
+of the element's <a
+href="http://www.w3.org/TR/REC-xml-names/#ns-qualnames">qualified
+name</a>. See <a href="#downlevel">below</a> for notes about matching
+behaviors in down-level clients.</p>
+
+<p>In summary:</p>
+
+<dl>
+ <dt><code>ns|E</code></dt>
+ <dd>elements with name E in namespace ns</dd>
+ <dt><code>*|E</code></dt>
+ <dd>elements with name E in any namespace, including those without any
+ declared namespace</dd>
+ <dt><code>|E</code></dt>
+ <dd>elements with name E without any declared namespace</dd>
+ <dt><code>E</code></dt>
+ <dd>if no default namespace has been specified, this is equivalent to *|E.
+ Otherwise it is equivalent to ns|E where ns is the default namespace.</dd>
+</dl>
+
+<div class="example">
+ <p>CSS examples:</p>
+
+ <pre>@namespace foo url(http://www.example.com);
+ foo|h1 { color: blue }
+ foo|* { color: yellow }
+ |h1 { color: red }
+ *|h1 { color: green }
+ h1 { color: green }</pre>
+
+ <p>The first rule will match only <code>h1</code> elements in the
+ "http://www.example.com" namespace.</p>
+
+ <p>The second rule will match all elements in the
+ "http://www.example.com" namespace.</p>
+
+ <p>The third rule will match only <code>h1</code> elements without
+ any declared namespace.</p>
+
+ <p>The fourth rule will match <code>h1</code> elements in any
+ namespace (including those without any declared namespace).</p>
+
+ <p>The last rule is equivalent to the fourth rule because no default
+ namespace has been defined.</p>
+
+</div>
+
+<h3><a name=universal-selector>6.2. Universal selector</a> </h3>
+
+<p>The <dfn>universal selector</dfn>, written &quot;asterisk&quot;
+(<code>*</code>), represents the qualified name of any element
+type. It represents any single element in the document tree in any
+namespace (including those without any declared namespace) if no
+default namespace has been specified. If a default namespace has been
+specified, see <a href="#univnmsp">Universal selector and
+Namespaces</a> below.</p>
+
+<p>If the universal selector is not the only component of a sequence
+of simple selectors, the <code>*</code> may be omitted.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <ul>
+ <li><code>*[hreflang|=en]</code> and <code>[hreflang|=en]</code> are equivalent,</li>
+ <li><code>*.warning</code> and <code>.warning</code> are equivalent,</li>
+ <li><code>*#myid</code> and <code>#myid</code> are equivalent.</li>
+ </ul>
+</div>
+
+<p class="note"><strong>Note:</strong> it is recommended that the
+<code>*</code>, representing the universal selector, not be
+omitted.</p>
+
+<h4><a name=univnmsp>6.2.1. Universal selector and namespaces</a></h4>
+
+<p>The universal selector allows an optional namespace component. It
+is used as follows:</p>
+
+<dl>
+ <dt><code>ns|*</code></dt>
+ <dd>all elements in namespace ns</dd>
+ <dt><code>*|*</code></dt>
+ <dd>all elements</dd>
+ <dt><code>|*</code></dt>
+ <dd>all elements without any declared namespace</dd>
+ <dt><code>*</code></dt>
+ <dd>if no default namespace has been specified, this is equivalent to *|*.
+ Otherwise it is equivalent to ns|* where ns is the default namespace.</dd>
+</dl>
+
+<p>A universal selector containing a namespace prefix that has not
+been previously declared is an <a href="#Conformance">invalid</a>
+selector. The mechanism for declaring a namespace prefix is left up
+to the language implementing Selectors. In CSS, such a mechanism is
+defined in the General Syntax module.</p>
+
+
+<h3><a name=attribute-selectors>6.3. Attribute selectors</a></h3>
+
+<p>Selectors allow the representation of an element's attributes. When
+a selector is used as an expression to match against an element,
+attribute selectors must be considered to match an element if that
+element has an attribute that matches the attribute represented by the
+attribute selector.</p>
+
+<h4><a name=attribute-representation>6.3.1. Attribute presence and values
+selectors</a></h4>
+
+<p>CSS2 introduced four attribute selectors:</p>
+
+<dl>
+ <dt><code>[att]</code>
+ <dd>Represents an element with the <code>att</code> attribute, whatever the value of
+ the attribute.</dd>
+ <dt><code>[att=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value is exactly
+ "val".</dd>
+ <dt><code>[att~=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value is a <a
+ href="#whitespace">whitespace</a>-separated list of words, one of
+ which is exactly "val". If "val" contains whitespace, it will never
+ represent anything (since the words are <em>separated</em> by
+ spaces).</dd>
+ <dt><code>[att|=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute, its value either
+ being exactly "val" or beginning with "val" immediately followed by
+ "-" (U+002D). This is primarily intended to allow language subcode
+ matches (e.g., the <code>hreflang</code> attribute on the
+ <code>link</code> element in HTML) as described in RFC 3066 (<a
+ href="#refsRFC3066">[RFC3066]</a>). For <code>lang</code> (or
+ <code>xml:lang</code>) language subcode matching, please see <a
+ href="#lang-pseudo">the <code>:lang</code> pseudo-class</a>.</dd>
+</dl>
+
+<p>Attribute values must be identifiers or strings. The
+case-sensitivity of attribute names and values in selectors depends on
+the document language.</p>
+
+<div class="example">
+
+ <p>Examples:</p>
+
+ <p>The following attribute selector represents an <code>h1</code>
+ element that carries the <code>title</code> attribute, whatever its
+ value:</p>
+
+ <pre>h1[title]</pre>
+
+ <p>In the following example, the selector represents a
+ <code>span</code> element whose <code>class</code> attribute has
+ exactly the value "example":</p>
+
+ <pre>span[class="example"]</pre>
+
+ <p>Multiple attribute selectors can be used to represent several
+ attributes of an element, or several conditions on the same
+ attribute. Here, the selector represents a <code>span</code> element
+ whose <code>hello</code> attribute has exactly the value "Cleveland"
+ and whose <code>goodbye</code> attribute has exactly the value
+ "Columbus":</p>
+
+ <pre>span[hello="Cleveland"][goodbye="Columbus"]</pre>
+
+ <p>The following selectors illustrate the differences between "="
+ and "~=". The first selector will represent, for example, the value
+ "copyright copyleft copyeditor" on a <code>rel</code> attribute. The
+ second selector will only represent an <code>a</code> element with
+ an <code>href</code> attribute having the exact value
+ "http://www.w3.org/".</p>
+
+ <pre>a[rel~="copyright"]
+a[href="http://www.w3.org/"]</pre>
+
+ <p>The following selector represents a <code>link</code> element
+ whose <code>hreflang</code> attribute is exactly "fr".</p>
+
+ <pre>link[hreflang=fr]</pre>
+
+ <p>The following selector represents a <code>link</code> element for
+ which the values of the <code>hreflang</code> attribute begins with
+ "en", including "en", "en-US", and "en-cockney":</p>
+
+ <pre>link[hreflang|="en"]</pre>
+
+ <p>Similarly, the following selectors represents a
+ <code>DIALOGUE</code> element whenever it has one of two different
+ values for an attribute <code>character</code>:</p>
+
+ <pre>DIALOGUE[character=romeo]
+DIALOGUE[character=juliet]</pre>
+
+</div>
+
+<h4><a name=attribute-substrings></a>6.3.2. Substring matching attribute
+selectors</h4>
+
+<p>Three additional attribute selectors are provided for matching
+substrings in the value of an attribute:</p>
+
+<dl>
+ <dt><code>[att^=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value begins
+ with the prefix "val".</dd>
+ <dt><code>[att$=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute whose value ends with
+ the suffix "val".</dd>
+ <dt><code>[att*=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute whose value contains
+ at least one instance of the substring "val".</dd>
+</dl>
+
+<p>Attribute values must be identifiers or strings. The
+case-sensitivity of attribute names in selectors depends on the
+document language.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents an HTML <code>object</code>, referencing an
+ image:</p>
+ <pre>object[type^="image/"]</pre>
+ <p>The following selector represents an HTML anchor <code>a</code> with an
+ <code>href</code> attribute whose value ends with ".html".</p>
+ <pre>a[href$=".html"]</pre>
+ <p>The following selector represents an HTML paragraph with a <code>title</code>
+ attribute whose value contains the substring "hello"</p>
+ <pre>p[title*="hello"]</pre>
+</div>
+
+<h4><a name=attrnmsp>6.3.3. Attribute selectors and namespaces</a></h4>
+
+<p>Attribute selectors allow an optional namespace component to the
+attribute name. A namespace prefix that has been previously declared
+may be prepended to the attribute name separated by the namespace
+separator &quot;vertical bar&quot; (<code>|</code>). In keeping with
+the Namespaces in the XML recommendation, default namespaces do not
+apply to attributes, therefore attribute selectors without a namespace
+component apply only to attributes that have no declared namespace
+(equivalent to "<code>|attr</code>"). An asterisk may be used for the
+namespace prefix indicating that the selector is to match all
+attribute names without regard to the attribute's namespace.
+
+<p>An attribute selector with an attribute name containing a namespace
+prefix that has not been previously declared is an <a
+href="#Conformance">invalid</a> selector. The mechanism for declaring
+a namespace prefix is left up to the language implementing Selectors.
+In CSS, such a mechanism is defined in the General Syntax module.
+
+<div class="example">
+ <p>CSS examples:</p>
+ <pre>@namespace foo "http://www.example.com";
+[foo|att=val] { color: blue }
+[*|att] { color: yellow }
+[|att] { color: green }
+[att] { color: green }</pre>
+
+ <p>The first rule will match only elements with the attribute
+ <code>att</code> in the "http://www.example.com" namespace with the
+ value "val".</p>
+
+ <p>The second rule will match only elements with the attribute
+ <code>att</code> regardless of the namespace of the attribute
+ (including no declared namespace).</p>
+
+ <p>The last two rules are equivalent and will match only elements
+ with the attribute <code>att</code> where the attribute is not
+ declared to be in a namespace.</p>
+
+</div>
+
+<h4><a name=def-values>6.3.4. Default attribute values in DTDs</a></h4>
+
+<p>Attribute selectors represent explicitly set attribute values in
+the document tree. Default attribute values may be defined in a DTD or
+elsewhere, but cannot always be selected by attribute
+selectors. Selectors should be designed so that they work even if the
+default values are not included in the document tree.</p>
+
+<p>More precisely, a UA is <em>not</em> required to read an "external
+subset" of the DTD but <em>is</em> required to look for default
+attribute values in the document's "internal subset." (See <a
+href="#refsXML10">[XML10]</a> for definitions of these subsets.)</p>
+
+<p>A UA that recognizes an XML namespace <a
+href="#refsXMLNAMES">[XMLNAMES]</a> is not required to use its
+knowledge of that namespace to treat default attribute values as if
+they were present in the document. (For example, an XHTML UA is not
+required to use its built-in knowledge of the XHTML DTD.)</p>
+
+<p class="note"><strong>Note:</strong> Typically, implementations
+choose to ignore external subsets.</p>
+
+<div class="example">
+<p>Example:</p>
+
+<p>Consider an element EXAMPLE with an attribute "notation" that has a
+default value of "decimal". The DTD fragment might be</p>
+
+<pre class="dtd-example">&lt;!ATTLIST EXAMPLE notation (decimal,octal) "decimal"></pre>
+
+<p>If the style sheet contains the rules</p>
+
+<pre>EXAMPLE[notation=decimal] { /*... default property settings ...*/ }
+EXAMPLE[notation=octal] { /*... other settings...*/ }</pre>
+
+<p>the first rule will not match elements whose "notation" attribute
+is set by default, i.e. not set explicitly. To catch all cases, the
+attribute selector for the default value must be dropped:</p>
+
+<pre>EXAMPLE { /*... default property settings ...*/ }
+EXAMPLE[notation=octal] { /*... other settings...*/ }</pre>
+
+<p>Here, because the selector <code>EXAMPLE[notation=octal]</code> is
+more specific than the tag
+selector alone, the style declarations in the second rule will override
+those in the first for elements that have a "notation" attribute value
+of "octal". Care has to be taken that all property declarations that
+are to apply only to the default case are overridden in the non-default
+cases' style rules.</p>
+
+</div>
+
+<h3><a name=class-html>6.4. Class selectors</a></h3>
+
+<p>Working with HTML, authors may use the period (U+002E,
+<code>.</code>) notation as an alternative to the <code>~=</code>
+notation when representing the <code>class</code> attribute. Thus, for
+HTML, <code>div.value</code> and <code>div[class~=value]</code> have
+the same meaning. The attribute value must immediately follow the
+&quot;period&quot; (<code>.</code>).</p>
+
+<p>UAs may apply selectors using the period (.) notation in XML
+documents if the UA has namespace-specific knowledge that allows it to
+determine which attribute is the &quot;class&quot; attribute for the
+respective namespace. One such example of namespace-specific knowledge
+is the prose in the specification for a particular namespace (e.g. SVG
+1.0 <a href="#refsSVG">[SVG]</a> describes the <a
+href="http://www.w3.org/TR/2001/PR-SVG-20010719/styling.html#ClassAttribute">SVG
+&quot;class&quot; attribute</a> and how a UA should interpret it, and
+similarly MathML 1.01 <a href="#refsMATH">[MATH]</a> describes the <a
+href="http://www.w3.org/1999/07/REC-MathML-19990707/chapter2.html#sec2.3.4">MathML
+&quot;class&quot; attribute</a>.)</p>
+
+<div class="example">
+ <p>CSS examples:</p>
+
+ <p>We can assign style information to all elements with
+ <code>class~="pastoral"</code> as follows:</p>
+
+ <pre>*.pastoral { color: green } /* all elements with class~=pastoral */</pre>
+
+ <p>or just</p>
+
+ <pre>.pastoral { color: green } /* all elements with class~=pastoral */</pre>
+
+ <p>The following assigns style only to H1 elements with
+ <code>class~="pastoral"</code>:</p>
+
+ <pre>H1.pastoral { color: green } /* H1 elements with class~=pastoral */</pre>
+
+ <p>Given these rules, the first H1 instance below would not have
+ green text, while the second would:</p>
+
+ <pre>&lt;H1&gt;Not green&lt;/H1&gt;
+&lt;H1 class="pastoral"&gt;Very green&lt;/H1&gt;</pre>
+
+</div>
+
+<p>To represent a subset of "class" values, each value must be preceded
+by a ".", in any order.</P>
+
+<div class="example">
+
+ <p>CSS example:</p>
+
+ <p>The following rule matches any P element whose "class" attribute
+ has been assigned a list of <a
+ href="#whitespace">whitespace</a>-separated values that includes
+ "pastoral" and "marine":</p>
+
+ <pre>p.pastoral.marine { color: green }</pre>
+
+ <p>This rule matches when <code>class="pastoral blue aqua
+ marine"</code> but does not match for <code>class="pastoral
+ blue"</code>.</p>
+
+</div>
+
+<p class="note"><strong>Note:</strong> Because CSS gives considerable
+power to the "class" attribute, authors could conceivably design their
+own "document language" based on elements with almost no associated
+presentation (such as DIV and SPAN in HTML) and assigning style
+information through the "class" attribute. Authors should avoid this
+practice since the structural elements of a document language often
+have recognized and accepted meanings and author-defined classes may
+not.</p>
+
+<p class="note"><strong>Note:</strong> If an element has multiple
+class attributes, their values must be concatenated with spaces
+between the values before searching for the class. As of this time the
+working group is not aware of any manner in which this situation can
+be reached, however, so this behavior is explicitly non-normative in
+this specification.</p>
+
+<h3><a name=id-selectors>6.5. ID selectors</a></h3>
+
+<p>Document languages may contain attributes that are declared to be
+of type ID. What makes attributes of type ID special is that no two
+such attributes can have the same value in a document, regardless of
+the type of the elements that carry them; whatever the document
+language, an ID typed attribute can be used to uniquely identify its
+element. In HTML all ID attributes are named "id"; XML applications
+may name ID attributes differently, but the same restriction
+applies.</p>
+
+<p>An ID-typed attribute of a document language allows authors to
+assign an identifier to one element instance in the document tree. W3C
+ID selectors represent an element instance based on its identifier. An
+ID selector contains a &quot;number sign&quot; (U+0023,
+<code>#</code>) immediately followed by the ID value, which must be an
+identifier.</p>
+
+<p>Selectors does not specify how a UA knows the ID-typed attribute of
+an element. The UA may, e.g., read a document's DTD, have the
+information hard-coded or ask the user.
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following ID selector represents an <code>h1</code> element
+ whose ID-typed attribute has the value "chapter1":</p>
+ <pre>h1#chapter1</pre>
+ <p>The following ID selector represents any element whose ID-typed
+ attribute has the value "chapter1":</p>
+ <pre>#chapter1</pre>
+ <p>The following selector represents any element whose ID-typed
+ attribute has the value "z98y".</p>
+ <pre>*#z98y</pre>
+</div>
+
+<p class="note"><strong>Note.</strong> In XML 1.0 <a
+href="#refsXML10">[XML10]</a>, the information about which attribute
+contains an element's IDs is contained in a DTD or a schema. When
+parsing XML, UAs do not always read the DTD, and thus may not know
+what the ID of an element is (though a UA may have namespace-specific
+knowledge that allows it to determine which attribute is the ID
+attribute for that namespace). If a style sheet designer knows or
+suspects that a UA may not know what the ID of an element is, he
+should use normal attribute selectors instead:
+<code>[name=p371]</code> instead of <code>#p371</code>. Elements in
+XML 1.0 documents without a DTD do not have IDs at all.</p>
+
+<p>If an element has multiple ID attributes, all of them must be
+treated as IDs for that element for the purposes of the ID
+selector. Such a situation could be reached using mixtures of xml:id,
+DOM3 Core, XML DTDs, and namespace-specific knowledge.</p>
+
+<h3><a name=pseudo-classes>6.6. Pseudo-classes</a></h3>
+
+<p>The pseudo-class concept is introduced to permit selection based on
+information that lies outside of the document tree or that cannot be
+expressed using the other simple selectors.</p>
+
+<p>A pseudo-class always consists of a &quot;colon&quot;
+(<code>:</code>) followed by the name of the pseudo-class and
+optionally by a value between parentheses.</p>
+
+<p>Pseudo-classes are allowed in all sequences of simple selectors
+contained in a selector. Pseudo-classes are allowed anywhere in
+sequences of simple selectors, after the leading type selector or
+universal selector (possibly omitted). Pseudo-class names are
+case-insensitive. Some pseudo-classes are mutually exclusive, while
+others can be applied simultaneously to the same
+element. Pseudo-classes may be dynamic, in the sense that an element
+may acquire or lose a pseudo-class while a user interacts with the
+document.</p>
+
+
+<h4><a name=dynamic-pseudos>6.6.1. Dynamic pseudo-classes</a></h4>
+
+<p>Dynamic pseudo-classes classify elements on characteristics other
+than their name, attributes, or content, in principle characteristics
+that cannot be deduced from the document tree.</p>
+
+<p>Dynamic pseudo-classes do not appear in the document source or
+document tree.</p>
+
+
+<h5>The <a name=link>link pseudo-classes: :link and :visited</a></h5>
+
+<p>User agents commonly display unvisited links differently from
+previously visited ones. Selectors
+provides the pseudo-classes <code>:link</code> and
+<code>:visited</code> to distinguish them:</p>
+
+<ul>
+ <li>The <code>:link</code> pseudo-class applies to links that have
+ not yet been visited.</li>
+ <li>The <code>:visited</code> pseudo-class applies once the link has
+ been visited by the user. </li>
+</ul>
+
+<p>After some amount of time, user agents may choose to return a
+visited link to the (unvisited) ':link' state.</p>
+
+<p>The two states are mutually exclusive.</p>
+
+<div class="example">
+
+ <p>Example:</p>
+
+ <p>The following selector represents links carrying class
+ <code>external</code> and already visited:</p>
+
+ <pre>a.external:visited</pre>
+
+</div>
+
+<p class="note"><strong>Note:</strong> It is possible for style sheet
+authors to abuse the :link and :visited pseudo-classes to determine
+which sites a user has visited without the user's consent.
+
+<p>UAs may therefore treat all links as unvisited links, or implement
+other measures to preserve the user's privacy while rendering visited
+and unvisited links differently.</p>
+
+<h5>The <a name=useraction-pseudos>user action pseudo-classes
+:hover, :active, and :focus</a></h5>
+
+<p>Interactive user agents sometimes change the rendering in response
+to user actions. Selectors provides
+three pseudo-classes for the selection of an element the user is
+acting on.</p>
+
+<ul>
+
+ <li>The <code>:hover</code> pseudo-class applies while the user
+ designates an element with a pointing device, but does not activate
+ it. For example, a visual user agent could apply this pseudo-class
+ when the cursor (mouse pointer) hovers over a box generated by the
+ element. User agents not that do not support <a
+ href="http://www.w3.org/TR/REC-CSS2/media.html#interactive-media-group">interactive
+ media</a> do not have to support this pseudo-class. Some conforming
+ user agents that support <a
+ href="http://www.w3.org/TR/REC-CSS2/media.html#interactive-media-group">interactive
+ media</a> may not be able to support this pseudo-class (e.g., a pen
+ device that does not detect hovering).</li>
+
+ <li>The <code>:active</code> pseudo-class applies while an element
+ is being activated by the user. For example, between the times the
+ user presses the mouse button and releases it.</li>
+
+ <li>The <code>:focus</code> pseudo-class applies while an element
+ has the focus (accepts keyboard or mouse events, or other forms of
+ input). </li>
+
+</ul>
+
+<p>There may be document language or implementation specific limits on
+which elements can become <code>:active</code> or acquire
+<code>:focus</code>.</p>
+
+<p>These pseudo-classes are not mutually exclusive. An element may
+match several pseudo-classes at the same time.</p>
+
+<p>Selectors doesn't define if the parent of an element that is
+':active' or ':hover' is also in that state.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <pre>a:link /* unvisited links */
+a:visited /* visited links */
+a:hover /* user hovers */
+a:active /* active links */</pre>
+ <p>An example of combining dynamic pseudo-classes:</p>
+ <pre>a:focus
+a:focus:hover</pre>
+ <p>The last selector matches <code>a</code> elements that are in
+ the pseudo-class :focus and in the pseudo-class :hover.</p>
+</div>
+
+<p class="note"><strong>Note:</strong> An element can be both ':visited'
+and ':active' (or ':link' and ':active').</p>
+
+<h4><a name=target-pseudo>6.6.2. The target pseudo-class :target</a></h4>
+
+<p>Some URIs refer to a location within a resource. This kind of URI
+ends with a &quot;number sign&quot; (#) followed by an anchor
+identifier (called the fragment identifier).</p>
+
+<p>URIs with fragment identifiers link to a certain element within the
+document, known as the target element. For instance, here is a URI
+pointing to an anchor named <code>section_2</code> in an HTML
+document:</p>
+
+<pre>http://example.com/html/top.html#section_2</pre>
+
+<p>A target element can be represented by the <code>:target</code>
+pseudo-class. If the document's URI has no fragment identifier, then
+the document has no target element.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <pre>p.note:target</pre>
+ <p>This selector represents a <code>p</code> element of class
+ <code>note</code> that is the target element of the referring
+ URI.</p>
+</div>
+
+<div class="example">
+ <p>CSS example:</p>
+ <p>Here, the <code>:target</code> pseudo-class is used to make the
+ target element red and place an image before it, if there is one:</p>
+ <pre>*:target { color : red }
+*:target::before { content : url(target.png) }</pre>
+</div>
+
+<h4><a name=lang-pseudo>6.6.3. The language pseudo-class :lang</a></h4>
+
+<p>If the document language specifies how the human language of an
+element is determined, it is possible to write selectors that
+represent an element based on its language. For example, in HTML <a
+href="#refsHTML4">[HTML4]</a>, the language is determined by a
+combination of the <code>lang</code> attribute, the <code>meta</code>
+element, and possibly by information from the protocol (such as HTTP
+headers). XML uses an attribute called <code>xml:lang</code>, and
+there may be other document language-specific methods for determining
+the language.</p>
+
+<p>The pseudo-class <code>:lang(C)</code> represents an element that
+is in language C. Whether an element is represented by a
+<code>:lang()</code> selector is based solely on the identifier C
+being either equal to, or a hyphen-separated substring of, the
+element's language value, in the same way as if performed by the <a
+href="#attribute-representation">'|='</a> operator in attribute
+selectors. The identifier C does not have to be a valid language
+name.</p>
+
+<p>C must not be empty. (If it is, the selector is invalid.)</p>
+
+<p class="note"><strong>Note:</strong> It is recommended that
+documents and protocols indicate language using codes from RFC 3066 <a
+href="#refsRFC3066">[RFC3066]</a> or its successor, and by means of
+"xml:lang" attributes in the case of XML-based documents <a
+href="#refsXML10">[XML10]</a>. See <a
+href="http://www.w3.org/International/questions/qa-lang-2or3.html">
+"FAQ: Two-letter or three-letter language codes."</a></p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The two following selectors represent an HTML document that is in
+ Belgian, French, or German. The two next selectors represent
+ <code>q</code> quotations in an arbitrary element in Belgian, French,
+ or German.</p>
+ <pre>html:lang(fr-be)
+html:lang(de)
+:lang(fr-be) &gt; q
+:lang(de) &gt; q</pre>
+</div>
+
+<h4><a name=UIstates>6.6.4. The UI element states pseudo-classes</a></h4>
+
+<h5><a name=enableddisabled>The :enabled and :disabled pseudo-classes</a></h5>
+
+<p>The <code>:enabled</code> pseudo-class allows authors to customize
+the look of user interface elements that are enabled &mdash; which the
+user can select or activate in some fashion (e.g. clicking on a button
+with a mouse). There is a need for such a pseudo-class because there
+is no way to programmatically specify the default appearance of say,
+an enabled <code>input</code> element without also specifying what it
+would look like when it was disabled.</p>
+
+<p>Similar to <code>:enabled</code>, <code>:disabled</code> allows the
+author to specify precisely how a disabled or inactive user interface
+element should look.</p>
+
+<p>Most elements will be neither enabled nor disabled. An element is
+enabled if the user can either activate it or transfer the focus to
+it. An element is disabled if it could be enabled, but the user cannot
+presently activate it or transfer focus to it.</p>
+
+
+<h5><a name=checked>The :checked pseudo-class</a></h5>
+
+<p>Radio and checkbox elements can be toggled by the user. Some menu
+items are "checked" when the user selects them. When such elements are
+toggled "on" the <code>:checked</code> pseudo-class applies. The
+<code>:checked</code> pseudo-class initially applies to such elements
+that have the HTML4 <code>selected</code> and <code>checked</code>
+attributes as described in <a
+href="http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.2.1">Section
+17.2.1 of HTML4</a>, but of course the user can toggle "off" such
+elements in which case the <code>:checked</code> pseudo-class would no
+longer apply. While the <code>:checked</code> pseudo-class is dynamic
+in nature, and is altered by user action, since it can also be based
+on the presence of the semantic HTML4 <code>selected</code> and
+<code>checked</code> attributes, it applies to all media.
+
+
+<h5><a name=indeterminate>The :indeterminate pseudo-class</a></h5>
+
+<div class="note">
+
+<p>Radio and checkbox elements can be toggled by the user, but are
+sometimes in an indeterminate state, neither checked nor unchecked.
+This can be due to an element attribute, or DOM manipulation.</p>
+
+<p>A future version of this specification may introduce an
+<code>:indeterminate</code> pseudo-class that applies to such elements.
+<!--While the <code>:indeterminate</code> pseudo-class is dynamic in
+nature, and is altered by user action, since it can also be based on
+the presence of an element attribute, it applies to all media.</p>
+
+<p>Components of a radio-group initialized with no pre-selected choice
+are an example of :indeterminate state.--></p>
+
+</div>
+
+
+<h4><a name=structural-pseudos>6.6.5. Structural pseudo-classes</a></h4>
+
+<p>Selectors introduces the concept of <dfn>structural
+pseudo-classes</dfn> to permit selection based on extra information that lies in
+the document tree but cannot be represented by other simple selectors or
+combinators.
+
+<p>Note that standalone pieces of PCDATA (text nodes in the DOM) are
+not counted when calculating the position of an element in the list of
+children of its parent. When calculating the position of an element in
+the list of children of its parent, the index numbering starts at 1.
+
+
+<h5><a name=root-pseudo>:root pseudo-class</a></h5>
+
+<p>The <code>:root</code> pseudo-class represents an element that is
+the root of the document. In HTML 4, this is always the
+<code>HTML</code> element.
+
+
+<h5><a name=nth-child-pseudo>:nth-child() pseudo-class</a></h5>
+
+<p>The
+<code>:nth-child(<var>a</var><code>n</code>+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings
+<strong>before</strong> it in the document tree, for a given positive
+integer or zero value of <code>n</code>, and has a parent element. In
+other words, this matches the <var>b</var>th child of an element after
+all the children have been split into groups of <var>a</var> elements
+each. For example, this allows the selectors to address every other
+row in a table, and could be used to alternate the color
+of paragraph text in a cycle of four. The <var>a</var> and
+<var>b</var> values must be zero, negative integers or positive
+integers. The index of the first child of an element is 1.
+
+<p>In addition to this, <code>:nth-child()</code> can take
+'<code>odd</code>' and '<code>even</code>' as arguments instead.
+'<code>odd</code>' has the same signification as <code>2n+1</code>,
+and '<code>even</code>' has the same signification as <code>2n</code>.
+
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-child(2n+1) /* represents every odd row of an HTML table */
+tr:nth-child(odd) /* same */
+tr:nth-child(2n) /* represents every even row of an HTML table */
+tr:nth-child(even) /* same */
+
+/* Alternate paragraph colours in CSS */
+p:nth-child(4n+1) { color: navy; }
+p:nth-child(4n+2) { color: green; }
+p:nth-child(4n+3) { color: maroon; }
+p:nth-child(4n+4) { color: purple; }</pre>
+</div>
+
+<p>When <var>a</var>=0, no repeating is used, so for example
+<code>:nth-child(0n+5)</code> matches only the fifth child. When
+<var>a</var>=0, the <var>a</var><code>n</code> part need not be
+included, so the syntax simplifies to
+<code>:nth-child(<var>b</var>)</code> and the last example simplifies
+to <code>:nth-child(5)</code>.
+
+<div class="example">
+<p>Examples:</p>
+<pre>foo:nth-child(0n+1) /* represents an element foo, first child of its parent element */
+foo:nth-child(1) /* same */</pre>
+</div>
+
+<p>When <var>a</var>=1, the number may be omitted from the rule.
+
+<div class="example">
+<p>Examples:</p>
+<p>The following selectors are therefore equivalent:</p>
+<pre>bar:nth-child(1n+0) /* represents all bar elements, specificity (0,1,1) */
+bar:nth-child(n+0) /* same */
+bar:nth-child(n) /* same */
+bar /* same but lower specificity (0,0,1) */</pre>
+</div>
+
+<p>If <var>b</var>=0, then every <var>a</var>th element is picked. In
+such a case, the <var>b</var> part may be omitted.
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-child(2n+0) /* represents every even row of an HTML table */
+tr:nth-child(2n) /* same */</pre>
+</div>
+
+<p>If both <var>a</var> and <var>b</var> are equal to zero, the
+pseudo-class represents no element in the document tree.</p>
+
+<p>The value <var>a</var> can be negative, but only the positive
+values of <var>a</var><code>n</code>+<var>b</var>, for
+<code>n</code>&ge;0, may represent an element in the document
+tree.</p>
+
+<div class="example">
+<p>Example:</p>
+<pre>html|tr:nth-child(-n+6) /* represents the 6 first rows of XHTML tables */</pre>
+</div>
+
+<p>When the value <var>b</var> is negative, the "+" character in the
+expression must be removed (it is effectively replaced by the "-"
+character indicating the negative value of <var>b</var>).</p>
+
+<div class="example">
+<p>Examples:</p>
+<pre>:nth-child(10n-1) /* represents the 9th, 19th, 29th, etc, element */
+:nth-child(10n+9) /* Same */
+:nth-child(10n+-1) /* Syntactically invalid, and would be ignored */</pre>
+</div>
+
+
+<h5><a name=nth-last-child-pseudo>:nth-last-child() pseudo-class</a></h5>
+
+<p>The <code>:nth-last-child(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings
+<strong>after</strong> it in the document tree, for a given positive
+integer or zero value of <code>n</code>, and has a parent element. See
+<code>:nth-child()</code> pseudo-class for the syntax of its argument.
+It also accepts the '<code>even</code>' and '<code>odd</code>' values
+as arguments.
+
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-last-child(-n+2) /* represents the two last rows of an HTML table */
+
+foo:nth-last-child(odd) /* represents all odd foo elements in their parent element,
+ counting from the last one */</pre>
+</div>
+
+
+<h5><a name=nth-of-type-pseudo>:nth-of-type() pseudo-class</a></h5>
+
+<p>The <code>:nth-of-type(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings with the same
+element name <strong>before</strong> it in the document tree, for a
+given zero or positive integer value of <code>n</code>, and has a
+parent element. In other words, this matches the <var>b</var>th child
+of that type after all the children of that type have been split into
+groups of a elements each. See <code>:nth-child()</code> pseudo-class
+for the syntax of its argument. It also accepts the
+'<code>even</code>' and '<code>odd</code>' values.
+
+
+<div class="example">
+<p>CSS example:</p>
+<p>This allows an author to alternate the position of floated images:</p>
+<pre>img:nth-of-type(2n+1) { float: right; }
+img:nth-of-type(2n) { float: left; }</pre>
+</div>
+
+
+<h5><a name=nth-last-of-type-pseudo>:nth-last-of-type() pseudo-class</a></h5>
+
+<p>The <code>:nth-last-of-type(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings with the same
+element name <strong>after</strong> it in the document tree, for a
+given zero or positive integer value of <code>n</code>, and has a
+parent element. See <code>:nth-child()</code> pseudo-class for the
+syntax of its argument. It also accepts the '<code>even</code>' and '<code>odd</code>' values.
+
+
+<div class="example">
+ <p>Example:</p>
+ <p>To represent all <code>h2</code> children of an XHTML
+ <code>body</code> except the first and last, one could use the
+ following selector:</p>
+ <pre>body &gt; h2:nth-of-type(n+2):nth-last-of-type(n+2)</pre>
+ <p>In this case, one could also use <code>:not()</code>, although the
+ selector ends up being just as long:</p>
+ <pre>body &gt; h2:not(:first-of-type):not(:last-of-type)</pre>
+</div>
+
+
+<h5><a name=first-child-pseudo>:first-child pseudo-class</a></h5>
+
+<p>Same as <code>:nth-child(1)</code>. The <code>:first-child</code> pseudo-class
+represents an element that is the first child of some other element.
+
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element that is
+ the first child of a <code>div</code> element:</p>
+ <pre>div &gt; p:first-child</pre>
+ <p>This selector can represent the <code>p</code> inside the
+ <code>div</code> of the following fragment:</p>
+ <pre>&lt;p&gt; The last P before the note.&lt;/p&gt;
+&lt;div class="note"&gt;
+ &lt;p&gt; The first P inside the note.&lt;/p&gt;
+&lt;/div&gt;</pre>but cannot represent the second <code>p</code> in the following
+fragment:
+ <pre>&lt;p&gt; The last P before the note.&lt;/p&gt;
+&lt;div class="note"&gt;
+ &lt;h2&gt; Note &lt;/h2&gt;
+ &lt;p&gt; The first P inside the note.&lt;/p&gt;
+&lt;/div&gt;</pre>
+ <p>The following two selectors are usually equivalent:</p>
+ <pre>* &gt; a:first-child /* a is first child of any element */
+a:first-child /* Same (assuming a is not the root element) */</pre>
+</div>
+
+<h5><a name=last-child-pseudo>:last-child pseudo-class</a></h5>
+
+<p>Same as <code>:nth-last-child(1)</code>. The <code>:last-child</code> pseudo-class
+represents an element that is the last child of some other element.
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents a list item <code>li</code> that
+ is the last child of an ordered list <code>ol</code>.
+ <pre>ol &gt; li:last-child</pre>
+</div>
+
+<h5><a name=first-of-type-pseudo>:first-of-type pseudo-class</a></h5>
+
+<p>Same as <code>:nth-of-type(1)</code>. The <code>:first-of-type</code> pseudo-class
+represents an element that is the first sibling of its type in the list of
+children of its parent element.
+
+<div class="example">
+<p>Example:</p>
+<p>The following selector represents a definition title
+<code>dt</code> inside a definition list <code>dl</code>, this
+<code>dt</code> being the first of its type in the list of children of
+its parent element.</p>
+<pre>dl dt:first-of-type</pre>
+<p>It is a valid description for the first two <code>dt</code>
+elements in the following example but not for the third one:</p>
+<pre>&lt;dl&gt;
+ &lt;dt&gt;gigogne&lt;/dt&gt;
+ &lt;dd&gt;
+ &lt;dl&gt;
+ &lt;dt&gt;fus&eacute;e&lt;/dt&gt;
+ &lt;dd&gt;multistage rocket&lt;/dd&gt;
+ &lt;dt&gt;table&lt;/dt&gt;
+ &lt;dd&gt;nest of tables&lt;/dd&gt;
+ &lt;/dl&gt;
+ &lt;/dd&gt;
+&lt;/dl&gt;</pre>
+</div>
+
+<h5><a name=last-of-type-pseudo>:last-of-type pseudo-class</a></h5>
+
+<p>Same as <code>:nth-last-of-type(1)</code>. The
+<code>:last-of-type</code> pseudo-class represents an element that is
+the last sibling of its type in the list of children of its parent
+element.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents the last data cell
+ <code>td</code> of a table row.</p>
+ <pre>tr &gt; td:last-of-type</pre>
+</div>
+
+<h5><a name=only-child-pseudo>:only-child pseudo-class</a></h5>
+
+<p>Represents an element that has a parent element and whose parent
+element has no other element children. Same as
+<code>:first-child:last-child</code> or
+<code>:nth-child(1):nth-last-child(1)</code>, but with a lower
+specificity.</p>
+
+<h5><a name=only-of-type-pseudo>:only-of-type pseudo-class</a></h5>
+
+<p>Represents an element that has a parent element and whose parent
+element has no other element children with the same element name. Same
+as <code>:first-of-type:last-of-type</code> or
+<code>:nth-of-type(1):nth-last-of-type(1)</code>, but with a lower
+specificity.</p>
+
+
+<h5><a name=empty-pseudo></a>:empty pseudo-class</h5>
+
+<p>The <code>:empty</code> pseudo-class represents an element that has
+no children at all. In terms of the DOM, only element nodes and text
+nodes (including CDATA nodes and entity references) whose data has a
+non-zero length must be considered as affecting emptiness; comments,
+PIs, and other nodes must not affect whether an element is considered
+empty or not.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p><code>p:empty</code> is a valid representation of the following fragment:</p>
+ <pre>&lt;p&gt;&lt;/p&gt;</pre>
+ <p><code>foo:empty</code> is not a valid representation for the
+ following fragments:</p>
+ <pre>&lt;foo&gt;bar&lt;/foo&gt;</pre>
+ <pre>&lt;foo&gt;&lt;bar&gt;bla&lt;/bar&gt;&lt;/foo&gt;</pre>
+ <pre>&lt;foo&gt;this is not &lt;bar&gt;:empty&lt;/bar&gt;&lt;/foo&gt;</pre>
+</div>
+
+<h4><a name=content-selectors>6.6.6. Blank</a></h4> <!-- It's the Return of Appendix H!!! Run away! -->
+
+<p>This section intentionally left blank.</p>
+<!-- (used to be :contains()) -->
+
+<h4><a name=negation></a>6.6.7. The negation pseudo-class</h4>
+
+<p>The negation pseudo-class, <code>:not(<var>X</var>)</code>, is a
+functional notation taking a <a href="#simple-selectors-dfn">simple
+selector</a> (excluding the negation pseudo-class itself and
+pseudo-elements) as an argument. It represents an element that is not
+represented by the argument.
+
+<!-- pseudo-elements are not simple selectors, so the above paragraph
+may be a bit confusing -->
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following CSS selector matches all <code>button</code>
+ elements in an HTML document that are not disabled.</p>
+ <pre>button:not([DISABLED])</pre>
+ <p>The following selector represents all but <code>FOO</code>
+ elements.</p>
+ <pre>*:not(FOO)</pre>
+ <p>The following group of selectors represents all HTML elements
+ except links.</p>
+ <pre>html|*:not(:link):not(:visited)</pre>
+</div>
+
+<p>Default namespace declarations do not affect the argument of the
+negation pseudo-class unless the argument is a universal selector or a
+type selector.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>Assuming that the default namespace is bound to
+ "http://example.com/", the following selector represents all
+ elements that are not in that namespace:</p>
+ <pre>*|*:not(*)</pre>
+ <p>The following CSS selector matches any element being hovered,
+ regardless of its namespace. In particular, it is not limited to
+ only matching elements in the default namespace that are not being
+ hovered, and elements not in the default namespace don't match the
+ rule when they <em>are</em> being hovered.</p>
+ <pre>*|*:not(:hover)</pre>
+</div>
+
+<p class="note"><strong>Note</strong>: the :not() pseudo allows
+useless selectors to be written. For instance <code>:not(*|*)</code>,
+which represents no element at all, or <code>foo:not(bar)</code>,
+which is equivalent to <code>foo</code> but with a higher
+specificity.</p>
+
+<h3><a name=pseudo-elements>7. Pseudo-elements</a></h3>
+
+<p>Pseudo-elements create abstractions about the document tree beyond
+those specified by the document language. For instance, document
+languages do not offer mechanisms to access the first letter or first
+line of an element's content. Pseudo-elements allow designers to refer
+to this otherwise inaccessible information. Pseudo-elements may also
+provide designers a way to refer to content that does not exist in the
+source document (e.g., the <code>::before</code> and
+<code>::after</code> pseudo-elements give access to generated
+content).</p>
+
+<p>A pseudo-element is made of two colons (<code>::</code>) followed
+by the name of the pseudo-element.</p>
+
+<p>This <code>::</code> notation is introduced by the current document
+in order to establish a discrimination between pseudo-classes and
+pseudo-elements. For compatibility with existing style sheets, user
+agents must also accept the previous one-colon notation for
+pseudo-elements introduced in CSS levels 1 and 2 (namely,
+<code>:first-line</code>, <code>:first-letter</code>,
+<code>:before</code> and <code>:after</code>). This compatibility is
+not allowed for the new pseudo-elements introduced in CSS level 3.</p>
+
+<p>Only one pseudo-element may appear per selector, and if present it
+must appear after the sequence of simple selectors that represents the
+<a href="#subject">subjects</a> of the selector. <span class="note">A
+future version of this specification may allow multiple
+pesudo-elements per selector.</span></p>
+
+<h4><a name=first-line>7.1. The ::first-line pseudo-element</a></h4>
+
+<p>The <code>::first-line</code> pseudo-element describes the contents
+of the first formatted line of an element.
+
+<div class="example">
+<p>CSS example:</p>
+<pre>p::first-line { text-transform: uppercase }</pre>
+<p>The above rule means "change the letters of the first line of every
+paragraph to uppercase".</p>
+</div>
+
+<p>The selector <code>p::first-line</code> does not match any real
+HTML element. It does match a pseudo-element that conforming user
+agents will insert at the beginning of every paragraph.</p>
+
+<p>Note that the length of the first line depends on a number of
+factors, including the width of the page, the font size, etc. Thus,
+an ordinary HTML paragraph such as:</p>
+
+<pre>
+&lt;P&gt;This is a somewhat long HTML
+paragraph that will be broken into several
+lines. The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>the lines of which happen to be broken as follows:
+
+<pre>
+THIS IS A SOMEWHAT LONG HTML PARAGRAPH THAT
+will be broken into several lines. The first
+line will be identified by a fictional tag
+sequence. The other lines will be treated as
+ordinary lines in the paragraph.
+</pre>
+
+<p>This paragraph might be "rewritten" by user agents to include the
+<em>fictional tag sequence</em> for <code>::first-line</code>. This
+fictional tag sequence helps to show how properties are inherited.</p>
+
+<pre>
+&lt;P&gt;<b>&lt;P::first-line&gt;</b> This is a somewhat long HTML
+paragraph that <b>&lt;/P::first-line&gt;</b> will be broken into several
+lines. The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>If a pseudo-element breaks up a real element, the desired effect
+can often be described by a fictional tag sequence that closes and
+then re-opens the element. Thus, if we mark up the previous paragraph
+with a <code>span</code> element:</p>
+
+<pre>
+&lt;P&gt;<b>&lt;SPAN class="test"&gt;</b> This is a somewhat long HTML
+paragraph that will be broken into several
+lines.<b>&lt;/SPAN&gt;</b> The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>the user agent could simulate start and end tags for
+<code>span</code> when inserting the fictional tag sequence for
+<code>::first-line</code>.
+
+<pre>
+&lt;P&gt;&lt;P::first-line&gt;<b>&lt;SPAN class="test"&gt;</b> This is a
+somewhat long HTML
+paragraph that will <b>&lt;/SPAN&gt;</b>&lt;/P::first-line&gt;<b>&lt;SPAN class="test"&gt;</b> be
+broken into several
+lines.<b>&lt;/SPAN&gt;</b> The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>In CSS, the <code>::first-line</code> pseudo-element can only be
+attached to a block-level element, an inline-block, a table-caption,
+or a table-cell.</p>
+
+<p><a name="first-formatted-line"></a>The "first formatted line" of an
+element may occur inside a
+block-level descendant in the same flow (i.e., a block-level
+descendant that is not positioned and not a float). E.g., the first
+line of the <code>div</code> in <code>&lt;DIV>&lt;P>This
+line...&lt;/P>&lt/DIV></code> is the first line of the <code>p</code> (assuming
+that both <code>p</code> and <code>div</code> are block-level).
+
+<p>The first line of a table-cell or inline-block cannot be the first
+formatted line of an ancestor element. Thus, in <code>&lt;DIV&gt;&lt;P
+STYLE="display: inline-block">Hello&lt;BR&gt;Goodbye&lt;/P&gt;
+etcetera&lt;/DIV&gt;</code> the first formatted line of the
+<code>div</code> is not the line "Hello".
+
+<p class="note">Note that the first line of the <code>p</code> in this
+fragment: <code>&lt;p&gt&lt;br&gt;First...</code> doesn't contain any
+letters (assuming the default style for <code>br</code> in HTML
+4). The word "First" is not on the first formatted line.
+
+<p>A UA should act as if the fictional start tags of the
+<code>::first-line</code> pseudo-elements were nested just inside the
+innermost enclosing block-level element. (Since CSS1 and CSS2 were
+silent on this case, authors should not rely on this behavior.) Here
+is an example. The fictional tag sequence for</p>
+
+<pre>
+&lt;DIV>
+ &lt;P>First paragraph&lt;/P>
+ &lt;P>Second paragraph&lt;/P>
+&lt;/DIV>
+</pre>
+
+<p>is</p>
+
+<pre>
+&lt;DIV>
+ &lt;P>&lt;DIV::first-line>&lt;P::first-line>First paragraph&lt;/P::first-line>&lt;/DIV::first-line>&lt;/P>
+ &lt;P>&lt;P::first-line>Second paragraph&lt;/P::first-line>&lt;/P>
+&lt;/DIV>
+</pre>
+
+<p>The <code>::first-line</code> pseudo-element is similar to an
+inline-level element, but with certain restrictions. In CSS, the
+following properties apply to a <code>::first-line</code>
+pseudo-element: font properties, color property, background
+properties, 'word-spacing', 'letter-spacing', 'text-decoration',
+'vertical-align', 'text-transform', 'line-height'. UAs may apply other
+properties as well.</p>
+
+
+<h4><a name=first-letter>7.2. The ::first-letter pseudo-element</a></h4>
+
+<p>The <code>::first-letter</code> pseudo-element represents the first
+letter of the first line of a block, if it is not preceded by any
+other content (such as images or inline tables) on its line. The
+::first-letter pseudo-element may be used for "initial caps" and "drop
+caps", which are common typographical effects. This type of initial
+letter is similar to an inline-level element if its 'float' property
+is 'none'; otherwise, it is similar to a floated element.</p>
+
+<p>In CSS, these are the properties that apply to <code>::first-letter</code>
+pseudo-elements: font properties, 'text-decoration', 'text-transform',
+'letter-spacing', 'word-spacing' (when appropriate), 'line-height',
+'float', 'vertical-align' (only if 'float' is 'none'), margin
+properties, padding properties, border properties, color property,
+background properties. UAs may apply other properties as well. To
+allow UAs to render a typographically correct drop cap or initial cap,
+the UA may choose a line-height, width and height based on the shape
+of the letter, unlike for normal elements.</p>
+
+<div class="example">
+<p>Example:</p>
+<p>This example shows a possible rendering of an initial cap. Note
+that the 'line-height' that is inherited by the <code>::first-letter</code>
+pseudo-element is 1.1, but the UA in this example has computed the
+height of the first letter differently, so that it doesn't cause any
+unnecessary space between the first two lines. Also note that the
+fictional start tag of the first letter is inside the <span>span</span>, and thus
+the font weight of the first letter is normal, not bold as the <span>span</span>:
+<pre>
+p { line-height: 1.1 }
+p::first-letter { font-size: 3em; font-weight: normal }
+span { font-weight: bold }
+...
+&lt;p>&lt;span>Het hemelsche&lt;/span> gerecht heeft zich ten lange lesten&lt;br>
+Erbarremt over my en mijn benaeuwde vesten&lt;br>
+En arme burgery, en op mijn volcx gebed&lt;br>
+En dagelix geschrey de bange stad ontzet.
+</pre>
+<div class="figure">
+<p><img src="initial-cap.png" alt="Image illustrating the ::first-letter pseudo-element">
+</div>
+</div>
+
+<div class="example">
+<p>The following CSS will make a drop cap initial letter span about two lines:</p>
+
+<pre>
+&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"&gt;
+&lt;HTML&gt;
+ &lt;HEAD&gt;
+ &lt;TITLE&gt;Drop cap initial letter&lt;/TITLE&gt;
+ &lt;STYLE type="text/css"&gt;
+ P { font-size: 12pt; line-height: 1.2 }
+ P::first-letter { font-size: 200%; font-weight: bold; float: left }
+ SPAN { text-transform: uppercase }
+ &lt;/STYLE&gt;
+ &lt;/HEAD&gt;
+ &lt;BODY&gt;
+ &lt;P&gt;&lt;SPAN&gt;The first&lt;/SPAN&gt; few words of an article
+ in The Economist.&lt;/P&gt;
+ &lt;/BODY&gt;
+&lt;/HTML&gt;
+</pre>
+
+<p>This example might be formatted as follows:</p>
+
+<div class="figure">
+<P><img src="first-letter.gif" alt="Image illustrating the combined effect of the ::first-letter and ::first-line pseudo-elements"></p>
+</div>
+
+<p>The <span class="index-inst" title="fictional tag
+sequence">fictional tag sequence</span> is:</p>
+
+<pre>
+&lt;P&gt;
+&lt;SPAN&gt;
+&lt;P::first-letter&gt;
+T
+&lt;/P::first-letter&gt;he first
+&lt;/SPAN&gt;
+few words of an article in the Economist.
+&lt;/P&gt;
+</pre>
+
+<p>Note that the <code>::first-letter</code> pseudo-element tags abut
+the content (i.e., the initial character), while the ::first-line
+pseudo-element start tag is inserted right after the start tag of the
+block element.</p> </div>
+
+<p>In order to achieve traditional drop caps formatting, user agents
+may approximate font sizes, for example to align baselines. Also, the
+glyph outline may be taken into account when formatting.</p>
+
+<p>Punctuation (i.e, characters defined in Unicode in the "open" (Ps),
+"close" (Pe), "initial" (Pi). "final" (Pf) and "other" (Po)
+punctuation classes), that precedes or follows the first letter should
+be included. <a href="#refsUNICODE">[UNICODE]</a></p>
+
+<div class="figure">
+<P><img src="first-letter2.gif" alt="Quotes that precede the
+first letter should be included."></p>
+</div>
+
+<p>The <code>::first-letter</code> also applies if the first letter is
+in fact a digit, e.g., the "6" in "67 million dollars is a lot of
+money."</p>
+
+<p>In CSS, the <code>::first-letter</code> pseudo-element applies to
+block, list-item, table-cell, table-caption, and inline-block
+elements. <span class="note">A future version of this specification
+may allow this pesudo-element to apply to more element
+types.</span></p>
+
+<p>The <code>::first-letter</code> pseudo-element can be used with all
+such elements that contain text, or that have a descendant in the same
+flow that contains text. A UA should act as if the fictional start tag
+of the ::first-letter pseudo-element is just before the first text of
+the element, even if that first text is in a descendant.</p>
+
+<div class="example">
+<p>Example:</p>
+<p>The fictional tag sequence for this HTMLfragment:
+<pre>&lt;div>
+&lt;p>The first text.</pre>
+<p>is:
+<pre>&lt;div>
+&lt;p>&lt;div::first-letter>&lt;p::first-letter>T&lt;/...>&lt;/...>he first text.</pre>
+</div>
+
+<p>The first letter of a table-cell or inline-block cannot be the
+first letter of an ancestor element. Thus, in <code>&lt;DIV&gt;&lt;P
+STYLE="display: inline-block">Hello&lt;BR&gt;Goodbye&lt;/P&gt;
+etcetera&lt;/DIV&gt;</code> the first letter of the <code>div</code> is not the
+letter "H". In fact, the <code>div</code> doesn't have a first letter.
+
+<p>The first letter must occur on the <a
+href="#first-formatted-line">first formatted line.</a> For example, in
+this fragment: <code>&lt;p&gt&lt;br&gt;First...</code> the first line
+doesn't contain any letters and <code>::first-letter</code> doesn't
+match anything (assuming the default style for <code>br</code> in HTML
+4). In particular, it does not match the "F" of "First."
+
+<p>In CSS, if an element is a list item ('display: list-item'), the
+<code>::first-letter</code> applies to the first letter in the
+principal box after the marker. UAs may ignore
+<code>::first-letter</code> on list items with 'list-style-position:
+inside'. If an element has <code>::before</code> or
+<code>::after</code> content, the <code>::first-letter</code> applies
+to the first letter of the element <em>including</em> that content.
+
+<div class="example">
+<p>Example:</p>
+<p>After the rule 'p::before {content: "Note: "}', the selector
+'p::first-letter' matches the "N" of "Note".</p>
+</div>
+
+<p>Some languages may have specific rules about how to treat certain
+letter combinations. In Dutch, for example, if the letter combination
+"ij" appears at the beginning of a word, both letters should be
+considered within the <code>::first-letter</code> pseudo-element.
+
+<p>If the letters that would form the ::first-letter are not in the
+same element, such as "'T" in <code>&lt;p>'&lt;em>T...</code>, the UA
+may create a ::first-letter pseudo-element from one of the elements,
+both elements, or simply not create a pseudo-element.</p>
+
+<p>Similarly, if the first letter(s) of the block are not at the start
+of the line (for example due to bidirectional reordering), then the UA
+need not create the pseudo-element(s).
+
+<div class="example">
+<p>Example:</p>
+<p><a name="overlapping-example">The following example</a> illustrates
+how overlapping pseudo-elements may interact. The first letter of
+each P element will be green with a font size of '24pt'. The rest of
+the first formatted line will be 'blue' while the rest of the
+paragraph will be 'red'.</p>
+
+<pre>p { color: red; font-size: 12pt }
+p::first-letter { color: green; font-size: 200% }
+p::first-line { color: blue }
+
+&lt;P&gt;Some text that ends up on two lines&lt;/P&gt;</pre>
+
+<p>Assuming that a line break will occur before the word "ends", the
+<span class="index-inst" title="fictional tag sequence">fictional tag
+sequence</span> for this fragment might be:</p>
+
+<pre>&lt;P&gt;
+&lt;P::first-line&gt;
+&lt;P::first-letter&gt;
+S
+&lt;/P::first-letter&gt;ome text that
+&lt;/P::first-line&gt;
+ends up on two lines
+&lt;/P&gt;</pre>
+
+<p>Note that the <code>::first-letter</code> element is inside the <code>::first-line</code>
+element. Properties set on <code>::first-line</code> are inherited by
+<code>::first-letter</code>, but are overridden if the same property is set on
+<code>::first-letter</code>.</p>
+</div>
+
+
+<h4><a name=UIfragments>7.3.</a> <a name=selection>The ::selection pseudo-element</a></h4>
+
+<p>The <code>::selection</code> pseudo-element applies to the portion
+of a document that has been highlighted by the user. This also
+applies, for example, to selected text within an editable text
+field. This pseudo-element should not be confused with the <code><a
+href="#checked">:checked</a></code> pseudo-class (which used to be
+named <code>:selected</code>)
+
+<p>Although the <code>::selection</code> pseudo-element is dynamic in
+nature, and is altered by user action, it is reasonable to expect that
+when a UA re-renders to a static medium (such as a printed page, see
+<a href="#refsCSS21">[CSS21]</a>) which was originally rendered to a
+dynamic medium (like screen), the UA may wish to transfer the current
+<code>::selection</code> state to that other medium, and have all the
+appropriate formatting and rendering take effect as well. This is not
+required &mdash; UAs may omit the <code>::selection</code>
+pseudo-element for static media.
+
+<p>These are the CSS properties that apply to <code>::selection</code>
+pseudo-elements: color, background, cursor (optional), outline
+(optional). The computed value of the 'background-image' property on
+<code>::selection</code> may be ignored.
+
+
+<h4><a name=gen-content>7.4. The ::before and ::after pseudo-elements</a></h4>
+
+<p>The <code>::before</code> and <code>::after</code> pseudo-elements
+can be used to describe generated content before or after an element's
+content. They are explained in CSS 2.1 <a
+href="#refsCSS21">[CSS21]</a>.</p>
+
+<p>When the <code>::first-letter</code> and <code>::first-line</code>
+pseudo-elements are combined with <code>::before</code> and
+<code>::after</code>, they apply to the first letter or line of the
+element including the inserted text.</p>
+
+<h2><a name=combinators>8. Combinators</a></h2>
+
+<h3><a name=descendant-combinators>8.1. Descendant combinator</a></h3>
+
+<p>At times, authors may want selectors to describe an element that is
+the descendant of another element in the document tree (e.g., "an
+<code>EM</code> element that is contained within an <code>H1</code>
+element"). Descendant combinators express such a relationship. A
+descendant combinator is <a href="#whitespace">white space</a> that
+separates two sequences of simple selectors. A selector of the form
+"<code>A B</code>" represents an element <code>B</code> that is an
+arbitrary descendant of some ancestor element <code>A</code>.
+
+<div class="example">
+ <p>Examples:</p>
+ <p>For example, consider the following selector:</p>
+ <pre>h1 em</pre>
+ <p>It represents an <code>em</code> element being the descendant of
+ an <code>h1</code> element. It is a correct and valid, but partial,
+ description of the following fragment:</p>
+ <pre>&lt;h1&gt;This &lt;span class="myclass"&gt;headline
+is &lt;em&gt;very&lt;/em&gt; important&lt;/span&gt;&lt;/h1&gt;</pre>
+ <p>The following selector:</p>
+ <pre>div * p</pre>
+ <p>represents a <code>p</code> element that is a grandchild or later
+ descendant of a <code>div</code> element. Note the whitespace on
+ either side of the "*" is not part of the universal selector; the
+ whitespace is a combinator indicating that the DIV must be the
+ ancestor of some element, and that that element must be an ancestor
+ of the P.</p>
+ <p>The following selector, which combines descendant combinators and
+ <a href="#attribute-selectors">attribute selectors</a>, represents an
+ element that (1) has the <code>href</code> attribute set and (2) is
+ inside a <code>p</code> that is itself inside a <code>div</code>:</p>
+ <pre>div p *[href]</pre>
+</div>
+
+<h3><a name=child-combinators>8.2. Child combinators</a></h3>
+
+<p>A <dfn>child combinator</dfn> describes a childhood relationship
+between two elements. A child combinator is made of the
+&quot;greater-than sign&quot; (<code>&gt;</code>) character and
+separates two sequences of simple selectors.
+
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element that is
+ child of <code>body</code>:</p>
+ <pre>body &gt; p</pre>
+ <p>The following example combines descendant combinators and child
+ combinators.</p>
+ <pre>div ol&gt;li p</pre><!-- LEAVE THOSE SPACES OUT! see below -->
+ <p>It represents a <code>p</code> element that is a descendant of an
+ <code>li</code> element; the <code>li</code> element must be the
+ child of an <code>ol</code> element; the <code>ol</code> element must
+ be a descendant of a <code>div</code>. Notice that the optional white
+ space around the "&gt;" combinator has been left out.</p>
+</div>
+
+<p>For information on selecting the first child of an element, please
+see the section on the <code><a
+href="#structural-pseudos">:first-child</a></code> pseudo-class
+above.</p>
+
+<h3><a name=sibling-combinators>8.3. Sibling combinators</a></h3>
+
+<p>There are two different sibling combinators: the adjacent sibling
+combinator and the general sibling combinator. In both cases,
+non-element nodes (e.g. text between elements) are ignored when
+considering adjacency of elements.</p>
+
+<h4><a name=adjacent-sibling-combinators>8.3.1. Adjacent sibling combinator</a></h4>
+
+<p>The adjacent sibling combinator is made of the &quot;plus
+sign&quot; (U+002B, <code>+</code>) character that separates two
+sequences of simple selectors. The elements represented by the two
+sequences share the same parent in the document tree and the element
+represented by the first sequence immediately precedes the element
+represented by the second one.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element
+ immediately following a <code>math</code> element:</p>
+ <pre>math + p</pre>
+ <p>The following selector is conceptually similar to the one in the
+ previous example, except that it adds an attribute selector &mdash; it
+ adds a constraint to the <code>h1</code> element, that it must have
+ <code>class="opener"</code>:</p>
+ <pre>h1.opener + h2</pre>
+</div>
+
+
+<h4><a name=general-sibling-combinators>8.3.2. General sibling combinator</a></h4>
+
+<p>The general sibling combinator is made of the &quot;tilde&quot;
+(U+007E, <code>~</code>) character that separates two sequences of
+simple selectors. The elements represented by the two sequences share
+the same parent in the document tree and the element represented by
+the first sequence precedes (not necessarily immediately) the element
+represented by the second one.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <pre>h1 ~ pre</pre>
+ <p>represents a <code>pre</code> element following an <code>h1</code>. It
+ is a correct and valid, but partial, description of:</p>
+ <pre>&lt;h1&gt;Definition of the function a&lt;/h1&gt;
+&lt;p&gt;Function a(x) has to be applied to all figures in the table.&lt;/p&gt;
+&lt;pre&gt;function a(x) = 12x/13.5&lt;/pre&gt;</pre>
+</div>
+
+<h2><a name=specificity>9. Calculating a selector's specificity</a></h2>
+
+<p>A selector's specificity is calculated as follows:</p>
+
+<ul>
+ <li>count the number of ID selectors in the selector (= a)</li>
+ <li>count the number of class selectors, attributes selectors, and pseudo-classes in the selector (= b)</li>
+ <li>count the number of element names in the selector (= c)</li>
+ <li>ignore pseudo-elements</li>
+</ul>
+
+<p>Selectors inside <a href="#negation">the negation pseudo-class</a>
+are counted like any other, but the negation itself does not count as
+a pseudo-class.</p>
+
+<p>Concatenating the three numbers a-b-c (in a number system with a
+large base) gives the specificity.</p>
+
+<div class="example">
+<p>Examples:</p>
+<pre>* /* a=0 b=0 c=0 -&gt; specificity = 0 */
+LI /* a=0 b=0 c=1 -&gt; specificity = 1 */
+UL LI /* a=0 b=0 c=2 -&gt; specificity = 2 */
+UL OL+LI /* a=0 b=0 c=3 -&gt; specificity = 3 */
+H1 + *[REL=up] /* a=0 b=1 c=1 -&gt; specificity = 11 */
+UL OL LI.red /* a=0 b=1 c=3 -&gt; specificity = 13 */
+LI.red.level /* a=0 b=2 c=1 -&gt; specificity = 21 */
+#x34y /* a=1 b=0 c=0 -&gt; specificity = 100 */
+#s12:not(FOO) /* a=1 b=0 c=1 -&gt; specificity = 101 */
+</pre>
+</div>
+
+<p class="note"><strong>Note:</strong> the specificity of the styles
+specified in an HTML <code>style</code> attribute is described in CSS
+2.1. <a href="#refsCSS21">[CSS21]</a>.</p>
+
+<h2><a name=w3cselgrammar>10. The grammar of Selectors</a></h2>
+
+<h3><a name=grammar>10.1. Grammar</a></h3>
+
+<p>The grammar below defines the syntax of Selectors. It is globally
+LL(1) and can be locally LL(2) (but note that most UA's should not use
+it directly, since it doesn't express the parsing conventions). The
+format of the productions is optimized for human consumption and some
+shorthand notations beyond Yacc (see <a href="#refsYACC">[YACC]</a>)
+are used:</p>
+
+<ul>
+ <li><b>*</b>: 0 or more
+ <li><b>+</b>: 1 or more
+ <li><b>?</b>: 0 or 1
+ <li><b>|</b>: separates alternatives
+ <li><b>[ ]</b>: grouping </li>
+</ul>
+
+<p>The productions are:</p>
+
+<pre>selectors_group
+ : selector [ COMMA S* selector ]*
+ ;
+
+selector
+ : simple_selector_sequence [ combinator simple_selector_sequence ]*
+ ;
+
+combinator
+ /* combinators can be surrounded by white space */
+ : PLUS S* | GREATER S* | TILDE S* | S+
+ ;
+
+simple_selector_sequence
+ : [ type_selector | universal ]
+ [ HASH | class | attrib | pseudo | negation ]*
+ | [ HASH | class | attrib | pseudo | negation ]+
+ ;
+
+type_selector
+ : [ namespace_prefix ]? element_name
+ ;
+
+namespace_prefix
+ : [ IDENT | '*' ]? '|'
+ ;
+
+element_name
+ : IDENT
+ ;
+
+universal
+ : [ namespace_prefix ]? '*'
+ ;
+
+class
+ : '.' IDENT
+ ;
+
+attrib
+ : '[' S* [ namespace_prefix ]? IDENT S*
+ [ [ PREFIXMATCH |
+ SUFFIXMATCH |
+ SUBSTRINGMATCH |
+ '=' |
+ INCLUDES |
+ DASHMATCH ] S* [ IDENT | STRING ] S*
+ ]? ']'
+ ;
+
+pseudo
+ /* '::' starts a pseudo-element, ':' a pseudo-class */
+ /* Exceptions: :first-line, :first-letter, :before and :after. */
+ /* Note that pseudo-elements are restricted to one per selector and */
+ /* occur only in the last simple_selector_sequence. */
+ : ':' ':'? [ IDENT | functional_pseudo ]
+ ;
+
+functional_pseudo
+ : FUNCTION S* expression ')'
+ ;
+
+expression
+ /* In CSS3, the expressions are identifiers, strings, */
+ /* or of the form "an+b" */
+ : [ [ PLUS | '-' | DIMENSION | NUMBER | STRING | IDENT ] S* ]+
+ ;
+
+negation
+ : NOT S* negation_arg S* ')'
+ ;
+
+negation_arg
+ : type_selector | universal | HASH | class | attrib | pseudo
+ ;</pre>
+
+
+<h3><a name=lex>10.2. Lexical scanner</a></h3>
+
+<p>The following is the <a name=x3>tokenizer</a>, written in Flex (see
+<a href="#refsFLEX">[FLEX]</a>) notation. The tokenizer is
+case-insensitive.</p>
+
+<p>The two occurrences of "\377" represent the highest character
+number that current versions of Flex can deal with (decimal 255). They
+should be read as "\4177777" (decimal 1114111), which is the highest
+possible code point in Unicode/ISO-10646. <a
+href="#refsUNICODE">[UNICODE]</a></p>
+
+<pre>%option case-insensitive
+
+ident [-]?{nmstart}{nmchar}*
+name {nmchar}+
+nmstart [_a-z]|{nonascii}|{escape}
+nonascii [^\0-\177]
+unicode \\[0-9a-f]{1,6}(\r\n|[ \n\r\t\f])?
+escape {unicode}|\\[^\n\r\f0-9a-f]
+nmchar [_a-z0-9-]|{nonascii}|{escape}
+num [0-9]+|[0-9]*\.[0-9]+
+string {string1}|{string2}
+string1 \"([^\n\r\f\\"]|\\{nl}|{nonascii}|{escape})*\"
+string2 \'([^\n\r\f\\']|\\{nl}|{nonascii}|{escape})*\'
+invalid {invalid1}|{invalid2}
+invalid1 \"([^\n\r\f\\"]|\\{nl}|{nonascii}|{escape})*
+invalid2 \'([^\n\r\f\\']|\\{nl}|{nonascii}|{escape})*
+nl \n|\r\n|\r|\f
+w [ \t\r\n\f]*
+
+%%
+
+[ \t\r\n\f]+ return S;
+
+"~=" return INCLUDES;
+"|=" return DASHMATCH;
+"^=" return PREFIXMATCH;
+"$=" return SUFFIXMATCH;
+"*=" return SUBSTRINGMATCH;
+{ident} return IDENT;
+{string} return STRING;
+{ident}"(" return FUNCTION;
+{num} return NUMBER;
+"#"{name} return HASH;
+{w}"+" return PLUS;
+{w}"&gt;" return GREATER;
+{w}"," return COMMA;
+{w}"~" return TILDE;
+":not(" return NOT;
+@{ident} return ATKEYWORD;
+{invalid} return INVALID;
+{num}% return PERCENTAGE;
+{num}{ident} return DIMENSION;
+"&lt;!--" return CDO;
+"--&gt;" return CDC;
+
+"url("{w}{string}{w}")" return URI;
+"url("{w}([!#$%&*-~]|{nonascii}|{escape})*{w}")" return URI;
+U\+[0-9a-f?]{1,6}(-[0-9a-f]{1,6})? return UNICODE_RANGE;
+
+\/\*[^*]*\*+([^/*][^*]*\*+)*\/ /* ignore comments */
+
+. return *yytext;</pre>
+
+
+
+<h2><a name=downlevel>11. Namespaces and down-level clients</a></h2>
+
+<p>An important issue is the interaction of CSS selectors with XML
+documents in web clients that were produced prior to this
+document. Unfortunately, due to the fact that namespaces must be
+matched based on the URI which identifies the namespace, not the
+namespace prefix, some mechanism is required to identify namespaces in
+CSS by their URI as well. Without such a mechanism, it is impossible
+to construct a CSS style sheet which will properly match selectors in
+all cases against a random set of XML documents. However, given
+complete knowledge of the XML document to which a style sheet is to be
+applied, and a limited use of namespaces within the XML document, it
+is possible to construct a style sheet in which selectors would match
+elements and attributes correctly.</p>
+
+<p>It should be noted that a down-level CSS client will (if it
+properly conforms to CSS forward compatible parsing rules) ignore all
+<code>@namespace</code> at-rules, as well as all style rules that make
+use of namespace qualified element type or attribute selectors. The
+syntax of delimiting namespace prefixes in CSS was deliberately chosen
+so that down-level CSS clients would ignore the style rules rather
+than possibly match them incorrectly.</p>
+
+<p>The use of default namespaces in CSS makes it possible to write
+element type selectors that will function in both namespace aware CSS
+clients as well as down-level clients. It should be noted that
+down-level clients may incorrectly match selectors against XML
+elements in other namespaces.</p>
+
+<p>The following are scenarios and examples in which it is possible to
+construct style sheets which would function properly in web clients
+that do not implement this proposal.</p>
+
+<ol>
+ <li>
+
+ <p>The XML document does not use namespaces.</p>
+
+ <ul>
+
+ <li>In this case, it is obviously not necessary to declare or use
+ namespaces in the style sheet. Standard CSS element type and
+ attribute selectors will function adequately in a down-level
+ client.</li>
+
+ <li>In a CSS namespace aware client, the default behavior of
+ element selectors matching without regard to namespace will
+ function properly against all elements, since no namespaces are
+ present. However, the use of specific element type selectors that
+ match only elements that have no namespace ("<code>|name</code>")
+ will guarantee that selectors will match only XML elements that do
+ not have a declared namespace. </li>
+
+ </ul>
+
+ </li>
+
+ <li>
+
+ <p>The XML document defines a single, default namespace used
+ throughout the document. No namespace prefixes are used in element
+ names.</p>
+
+ <ul>
+
+ <li>In this case, a down-level client will function as if
+ namespaces were not used in the XML document at all. Standard CSS
+ element type and attribute selectors will match against all
+ elements. </li>
+
+ </ul>
+
+ </li>
+
+ <li>
+
+ <p>The XML document does <b>not</b> use a default namespace, all
+ namespace prefixes used are known to the style sheet author, and
+ there is a direct mapping between namespace prefixes and namespace
+ URIs. (A given prefix may only be mapped to one namespace URI
+ throughout the XML document; there may be multiple prefixes mapped
+ to the same URI).</p>
+
+ <ul>
+
+ <li>In this case, the down-level client will view and match
+ element type and attribute selectors based on their fully
+ qualified name, not the local part as outlined in the <a
+ href="#typenmsp">Type selectors and Namespaces</a> section. CSS
+ selectors may be declared using an escaped colon "<code>\:</code>"
+ to describe the fully qualified names, e.g.
+ "<code>html\:h1</code>" will match
+ <code>&lt;html:h1&gt;</code>. Selectors using the qualified name
+ will only match XML elements that use the same prefix. Other
+ namespace prefixes used in the XML that are mapped to the same URI
+ will not match as expected unless additional CSS style rules are
+ declared for them.</li>
+
+ <li>Note that selectors declared in this fashion will
+ <em>only</em> match in down-level clients. A CSS namespace aware
+ client will match element type and attribute selectors based on
+ the name's local part. Selectors declared with the fully
+ qualified name will not match (unless there is no namespace prefix
+ in the fully qualified name).</li>
+
+ </ul>
+
+ </li>
+
+ </ol>
+
+<p>In other scenarios: when the namespace prefixes used in the XML are
+not known in advance by the style sheet author; or a combination of
+elements with no namespace are used in conjunction with elements using
+a default namespace; or the same namespace prefix is mapped to
+<em>different</em> namespace URIs within the same document, or in
+different documents; it is impossible to construct a CSS style sheet
+that will function properly against all elements in those documents,
+unless, the style sheet is written using a namespace URI syntax (as
+outlined in this document or similar) and the document is processed by
+a CSS and XML namespace aware client.</p>
+
+<h2><a name=profiling>12. Profiles</a></h2>
+
+<p>Each specification using Selectors must define the subset of W3C
+Selectors it allows and excludes, and describe the local meaning of
+all the components of that subset.</p>
+
+<p>Non normative examples:
+
+<div class="profile">
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>CSS level 1</td></tr>
+ <tr>
+ <th>Accepts</th>
+ <td>type selectors<br>class selectors<br>ID selectors<br>:link,
+ :visited and :active pseudo-classes<br>descendant combinator
+ <br>::first-line and ::first-letter pseudo-elements</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>
+
+<p>universal selector<br>attribute selectors<br>:hover and :focus
+ pseudo-classes<br>:target pseudo-class<br>:lang() pseudo-class<br>all UI
+ element states pseudo-classes<br>all structural
+ pseudo-classes<br>negation pseudo-class<br>all
+ UI element fragments pseudo-elements<br>::before and ::after
+ pseudo-elements<br>child combinators<br>sibling combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>only one class selector allowed per sequence of simple
+ selectors</td></tr></tbody></table><br><br>
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>CSS level 2</td></tr>
+ <tr>
+ <th>Accepts</th>
+ <td>type selectors<br>universal selector<br>attribute presence and
+ values selectors<br>class selectors<br>ID selectors<br>:link, :visited,
+ :active, :hover, :focus, :lang() and :first-child pseudo-classes
+ <br>descendant combinator<br>child combinator<br>adjacent sibling
+ combinator<br>::first-line and ::first-letter pseudo-elements<br>::before
+ and ::after pseudo-elements</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>
+
+<p>content selectors<br>substring matching attribute
+ selectors<br>:target pseudo-classes<br>all UI element
+ states pseudo-classes<br>all structural pseudo-classes other
+ than :first-child<br>negation pseudo-class<br>all UI element
+ fragments pseudo-elements<br>general sibling combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>more than one class selector per sequence of simple selectors (CSS1
+ constraint) allowed</td></tr></tbody></table>
+
+<p>In CSS, selectors express pattern matching rules that determine which style
+rules apply to elements in the document tree.
+
+<p>The following selector (CSS level 2) will <b>match</b> all anchors <code>a</code>
+with attribute <code>name</code> set inside a section 1 header <code>h1</code>:
+<pre>h1 a[name]</pre>
+
+<p>All CSS declarations attached to such a selector are applied to elements
+matching it. </div>
+
+<div class="profile">
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>STTS 3</td>
+ </tr>
+ <tr>
+ <th>Accepts</th>
+ <td>
+
+<p>type selectors<br>universal selectors<br>attribute selectors<br>class
+ selectors<br>ID selectors<br>all structural pseudo-classes<br>
+ all combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>non-accepted pseudo-classes<br>pseudo-elements<br></td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>some selectors and combinators are not allowed in fragment
+ descriptions on the right side of STTS declarations.</td></tr></tbody></table>
+<form>
+<input type="text" name="test1"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+</form>
+
+<p>Selectors can be used in STTS 3 in two different
+ manners:
+<ol>
+ <li>a selection mechanism equivalent to CSS selection mechanism: declarations
+ attached to a given selector are applied to elements matching that selector,
+ <li>fragment descriptions that appear on the right side of declarations.
+</li></ol></div>
+
+<h2><a name=Conformance></a>13. Conformance and requirements</h2>
+
+<p>This section defines conformance with the present specification only.
+
+<p>The inability of a user agent to implement part of this specification due to
+the limitations of a particular device (e.g., non interactive user agents will
+probably not implement dynamic pseudo-classes because they make no sense without
+interactivity) does not imply non-conformance.
+
+<p>All specifications reusing Selectors must contain a <a
+href="#profiling">Profile</a> listing the
+subset of Selectors it accepts or excludes, and describing the constraints
+it adds to the current specification.
+
+<p>Invalidity is caused by a parsing error, e.g. an unrecognized token or a token
+which is not allowed at the current parsing point.
+
+<p>User agents must observe the rules for handling parsing errors:
+<ul>
+ <li>a simple selector containing an undeclared namespace prefix is invalid</li>
+ <li>a selector containing an invalid simple selector, an invalid combinator
+ or an invalid token is invalid. </li>
+ <li>a group of selectors containing an invalid selector is invalid.</li>
+</ul>
+
+<p class="foo test1 bar">Specifications reusing Selectors must define how to handle parsing
+errors. (In the case of CSS, the entire rule in which the selector is
+used is dropped.)</p>
+
+<!-- Apparently all these references are out of date:
+<p>Implementations of this specification must behave as
+"recipients of text data" as defined by <a href="#refsCWWW">[CWWW]</a>
+when parsing selectors and attempting matches. (In particular,
+implementations must assume the data is normalized and must not
+normalize it.) Normative rules for matching strings are defined in
+<a href="#refsCWWW">[CWWW]</a> and <a
+href="#refsUNICODE">[UNICODE]</a> and apply to implementations of this
+specification.</p>-->
+
+<h2><a name=Tests></a>14. Tests</h2>
+
+<p>This specification has <a
+href="http://www.w3.org/Style/CSS/Test/CSS3/Selectors/current/">a test
+suite</a> allowing user agents to verify their basic conformance to
+the specification. This test suite does not pretend to be exhaustive
+and does not cover all possible combined cases of Selectors.</p>
+
+<h2><a name=ACKS></a>15. Acknowledgements</h2>
+
+<p>The CSS working group would like to thank everyone who has sent
+comments on this specification over the years.</p>
+
+<p>The working group would like to extend special thanks to Donna
+McManus, Justin Baker, Joel Sklar, and Molly Ives Brower who perfermed
+the final editorial review.</p>
+
+<h2><a name=references>16. References</a></h2>
+
+<dl class="refs">
+
+ <dt>[CSS1]
+ <dd><a name=refsCSS1></a> Bert Bos, H&aring;kon Wium Lie; "<cite>Cascading Style Sheets, level 1</cite>", W3C Recommendation, 17 Dec 1996, revised 11 Jan 1999
+ <dd>(<code><a href="http://www.w3.org/TR/REC-CSS1">http://www.w3.org/TR/REC-CSS1</a></code>)
+
+ <dt>[CSS21]
+ <dd><a name=refsCSS21></a> Bert Bos, Tantek &Ccedil;elik, Ian Hickson, H&aring;kon Wium Lie, editors; "<cite>Cascading Style Sheets, level 2 revision 1</cite>", W3C Working Draft, 13 June 2005
+ <dd>(<code><a href="http://www.w3.org/TR/CSS21">http://www.w3.org/TR/CSS21</a></code>)
+
+ <dt>[CWWW]
+ <dd><a name=refsCWWW></a> Martin J. D&uuml;rst, Fran&ccedil;ois Yergeau, Misha Wolf, Asmus Freytag, Tex Texin, editors; "<cite>Character Model for the World Wide Web</cite>", W3C Recommendation, 15 February 2005
+ <dd>(<code><a href="http://www.w3.org/TR/charmod/">http://www.w3.org/TR/charmod/</a></code>)
+
+ <dt>[FLEX]
+ <dd><a name="refsFLEX"></a> "<cite>Flex: The Lexical Scanner Generator</cite>", Version 2.3.7, ISBN 1882114213
+
+ <dt>[HTML4]
+ <dd><a name="refsHTML4"></a> Dave Ragget, Arnaud Le Hors, Ian Jacobs, editors; "<cite>HTML 4.01 Specification</cite>", W3C Recommendation, 24 December 1999
+ <dd>(<a href="http://www.w3.org/TR/html4/"><code>http://www.w3.org/TR/html4/</code></a>)
+
+ <dt>[MATH]
+ <dd><a name="refsMATH"></a> Patrick Ion, Robert Miner, editors; "<cite>Mathematical Markup Language (MathML) 1.01</cite>", W3C Recommendation, revision of 7 July 1999
+ <dd>(<code><a href="http://www.w3.org/TR/REC-MathML/">http://www.w3.org/TR/REC-MathML/</a></code>)
+
+ <dt>[RFC3066]
+ <dd><a name="refsRFC3066"></a> H. Alvestrand; "<cite>Tags for the Identification of Languages</cite>", Request for Comments 3066, January 2001
+ <dd>(<a href="http://www.ietf.org/rfc/rfc3066.txt"><code>http://www.ietf.org/rfc/rfc3066.txt</code></a>)
+
+ <dt>[STTS]
+ <dd><a name=refsSTTS></a> Daniel Glazman; "<cite>Simple Tree Transformation Sheets 3</cite>", Electricit&eacute; de France, submission to the W3C, 11 November 1998
+ <dd>(<code><a href="http://www.w3.org/TR/NOTE-STTS3">http://www.w3.org/TR/NOTE-STTS3</a></code>)
+
+ <dt>[SVG]
+ <dd><a name="refsSVG"></a> Jon Ferraiolo, &#34276;&#27810; &#28147;, Dean Jackson, editors; "<cite>Scalable Vector Graphics (SVG) 1.1 Specification</cite>", W3C Recommendation, 14 January 2003
+ <dd>(<code><a href="http://www.w3.org/TR/SVG/">http://www.w3.org/TR/SVG/</a></code>)
+
+ <dt>[UNICODE]</dt>
+ <dd><a name="refsUNICODE"></a> <cite><a
+ href="http://www.unicode.org/versions/Unicode4.1.0/">The Unicode Standard, Version 4.1</a></cite>, The Unicode Consortium. Boston, MA, Addison-Wesley, March 2005. ISBN 0-321-18578-1, as amended by <a href="http://www.unicode.org/versions/Unicode4.0.1/">Unicode 4.0.1</a> and <a href="http://www.unicode.org/versions/Unicode4.1.0/">Unicode 4.1.0</a>.
+ <dd>(<code><a href="http://www.unicode.org/versions/">http://www.unicode.org/versions/</a></code>)</dd>
+
+ <dt>[XML10]
+ <dd><a name="refsXML10"></a> Tim Bray, Jean Paoli, C. M. Sperberg-McQueen, Eve Maler, Fran&ccedil;ois Yergeau, editors; "<cite>Extensible Markup Language (XML) 1.0 (Third Edition)</cite>", W3C Recommendation, 4 February 2004
+ <dd>(<a href="http://www.w3.org/TR/REC-xml/"><code>http://www.w3.org/TR/REC-xml/</code></a>)
+
+ <dt>[XMLNAMES]
+ <dd><a name="refsXMLNAMES"></a> Tim Bray, Dave Hollander, Andrew Layman, editors; "<cite>Namespaces in XML</cite>", W3C Recommendation, 14 January 1999
+ <dd>(<a href="http://www.w3.org/TR/REC-xml-names/"><code>http://www.w3.org/TR/REC-xml-names/</code></a>)
+
+ <dt>[YACC]
+ <dd><a name="refsYACC"></a> S. C. Johnson; "<cite>YACC &mdash; Yet another compiler compiler</cite>", Technical Report, Murray Hill, 1975
+
+</dl>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/dom-query.html b/testing/talos/talos/tests/dromaeo/tests/dom-query.html
new file mode 100644
index 0000000000..ea30d27afc
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/dom-query.html
@@ -0,0 +1,3000 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script>
+window.onload = function(){
+startTest("dom-query", '35cc42af');
+
+// Try to force real results
+var ret, tmp;
+var num = 40;
+var html = document.body.innerHTML;
+
+ prep(function(){
+ html = html.replace(/id="test(\w).*?"/g, 'id="test$1' + num + '"');
+ html = html.replace(/name="test.*?"/g, 'name="test' + num + '"');
+ html = html.replace(/class="foo.*?"/g, 'class="foo test' + num + ' bar"');
+ var div = document.createElement("div");
+ div.innerHTML = html;
+ document.body.appendChild( div );
+ });
+
+ test( "getElementById", function(){
+ for ( var i = 0; i < num * 30; i++ ) {
+ ret = document.getElementById("testA" + num).nodeType;
+ ret = document.getElementById("testB" + num).nodeType;
+ ret = document.getElementById("testC" + num).nodeType;
+ ret = document.getElementById("testD" + num).nodeType;
+ ret = document.getElementById("testE" + num).nodeType;
+ ret = document.getElementById("testF" + num).nodeType;
+ }
+ });
+
+ test( "getElementById (not in document)", function(){
+ for ( var i = 0; i < num * 30; i++ ) {
+ ret = document.getElementById("testA");
+ ret = document.getElementById("testB");
+ ret = document.getElementById("testC");
+ ret = document.getElementById("testD");
+ ret = document.getElementById("testE");
+ ret = document.getElementById("testF");
+ }
+ });
+
+ test( "getElementsByTagName(div)", function(){
+ for ( var i = 0; i < num; i++ ) {
+ var elems = document.getElementsByTagName("div");
+ ret = elems[elems.length-1].nodeType;
+ }
+ });
+
+ test( "getElementsByTagName(p)", function(){
+ for ( var i = 0; i < num; i++ ) {
+ var elems = document.getElementsByTagName("p");
+ ret = elems[elems.length-1].nodeType;
+ }
+ });
+
+ test( "getElementsByTagName(a)", function(){
+ for ( var i = 0; i < num; i++ ) {
+ var elems = document.getElementsByTagName("a");
+ ret = elems[elems.length-1].nodeType;
+ }
+ });
+
+ test( "getElementsByTagName(*)", function(){
+ for ( var i = 0; i < num; i++ ) {
+ var elems = document.getElementsByTagName("*");
+ ret = elems[elems.length-1].nodeType;
+ }
+ });
+
+ test( "getElementsByTagName (not in document)", function(){
+ for ( var i = 0; i < num; i++ ) {
+ var elems = document.getElementsByTagName("strong");
+ ret = elems.length == 0;
+ }
+ });
+
+ test( "getElementsByName", function(){
+ for ( var i = 0; i < num * 20; i++ ) {
+ var elems = document.getElementsByName("test" + num);
+ ret = elems[elems.length-1].nodeType;
+ var elems = document.getElementsByName("test" + num);
+ ret = elems[elems.length-1].nodeType;
+ var elems = document.getElementsByName("test" + num);
+ ret = elems[elems.length-1].nodeType;
+ var elems = document.getElementsByName("test" + num);
+ ret = elems[elems.length-1].nodeType;
+ }
+ });
+
+ test( "getElementsByName (not in document)", function(){
+ for ( var i = 0; i < num * 20; i++ ) {
+ ret = document.getElementsByName("test").length == 0;
+ ret = document.getElementsByName("test").length == 0;
+ ret = document.getElementsByName("test").length == 0;
+ ret = document.getElementsByName("test").length == 0;
+ ret = document.getElementsByName("test").length == 0;
+ }
+ });
+
+endTest();
+};
+</script>
+</head>
+<body>
+ <div class="head">
+ <p><a href="http://www.w3.org/"><img height=48 alt=W3C src="w3c_home.png" width=72></a>
+
+ <h1 id="title">Selectors</h1>
+
+ <h2>W3C Working Draft 15 December 2005</h2>
+
+ <dl>
+
+ <dt>This version:
+
+ <dd><a href="http://www.w3.org/TR/2005/WD-css3-selectors-20051215">
+ http://www.w3.org/TR/2005/WD-css3-selectors-20051215</a>
+
+ <dt>Latest version:
+
+ <dd><a href="http://www.w3.org/TR/css3-selectors">
+ http://www.w3.org/TR/css3-selectors</a>
+
+ <dt>Previous version:
+
+ <dd><a href="http://www.w3.org/TR/2001/CR-css3-selectors-20011113">
+ http://www.w3.org/TR/2001/CR-css3-selectors-20011113</a>
+
+ <dt><a name=editors-list></a>Editors:
+
+ <dd class="vcard"><span class="fn">Daniel Glazman</span> (Invited Expert)</dd>
+
+ <dd class="vcard"><a lang="tr" class="url fn" href="http://www.tantek.com/">Tantek &Ccedil;elik</a> (Invited Expert)
+
+ <dd class="vcard"><a href="mailto:ian@hixie.ch" class="url fn">Ian Hickson</a> (<span
+ class="company"><a href="http://www.google.com/">Google</a></span>)
+
+ <dd class="vcard"><span class="fn">Peter Linss</span> (former editor, <span class="company"><a
+ href="http://www.netscape.com/">Netscape/AOL</a></span>)
+
+ <dd class="vcard"><span class="fn">John Williams</span> (former editor, <span class="company"><a
+ href="http://www.quark.com/">Quark, Inc.</a></span>)
+
+ </dl>
+
+ <p class="copyright"><a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright">
+ Copyright</a> &copy; 2005 <a href="http://www.w3.org/"><abbr
+ title="World Wide Web Consortium">W3C</abbr></a><sup>&reg;</sup>
+ (<a href="http://www.csail.mit.edu/"><abbr title="Massachusetts
+ Institute of Technology">MIT</abbr></a>, <a
+ href="http://www.ercim.org/"><acronym title="European Research
+ Consortium for Informatics and Mathematics">ERCIM</acronym></a>, <a
+ href="http://www.keio.ac.jp/">Keio</a>), All Rights Reserved. W3C
+ <a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">liability</a>,
+ <a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">trademark</a>,
+ <a
+ href="http://www.w3.org/Consortium/Legal/copyright-documents">document
+ use</a> rules apply.
+
+ <hr title="Separator for header">
+
+ </div>
+
+ <h2><a name=abstract></a>Abstract</h2>
+
+ <p><em>Selectors</em> are patterns that match against elements in a
+ tree. Selectors have been optimized for use with HTML and XML, and
+ are designed to be usable in performance-critical code.</p>
+
+ <p><acronym title="Cascading Style Sheets">CSS</acronym> (Cascading
+ Style Sheets) is a language for describing the rendering of <acronym
+ title="Hypertext Markup Language">HTML</acronym> and <acronym
+ title="Extensible Markup Language">XML</acronym> documents on
+ screen, on paper, in speech, etc. CSS uses Selectors for binding
+ style properties to elements in the document. This document
+ describes extensions to the selectors defined in CSS level 2. These
+ extended selectors will be used by CSS level 3.
+
+ <p>Selectors define the following function:</p>
+
+ <pre>expression &#x2217; element &rarr; boolean</pre>
+
+ <p>That is, given an element and a selector, this specification
+ defines whether that element matches the selector.</p>
+
+ <p>These expressions can also be used, for instance, to select a set
+ of elements, or a single element from a set of elements, by
+ evaluating the expression across all the elements in a
+ subtree. <acronym title="Simple Tree Transformation
+ Sheets">STTS</acronym> (Simple Tree Transformation Sheets), a
+ language for transforming XML trees, uses this mechanism. <a href="#refsSTTS">[STTS]</a></p>
+
+ <h2><a name=status></a>Status of this document</h2>
+
+ <p><em>This section describes the status of this document at the
+ time of its publication. Other documents may supersede this
+ document. A list of current W3C publications and the latest revision
+ of this technical report can be found in the <a
+ href="http://www.w3.org/TR/">W3C technical reports index at
+ http://www.w3.org/TR/.</a></em></p>
+
+ <p>This document describes the selectors that already exist in <a
+ href="#refsCSS1"><abbr title="CSS level 1">CSS1</abbr></a> and <a
+ href="#refsCSS21"><abbr title="CSS level 2">CSS2</abbr></a>, and
+ also proposes new selectors for <abbr title="CSS level
+ 3">CSS3</abbr> and other languages that may need them.</p>
+
+ <p>The CSS Working Group doesn't expect that all implementations of
+ CSS3 will have to implement all selectors. Instead, there will
+ probably be a small number of variants of CSS3, called profiles. For
+ example, it may be that only a profile for interactive user agents
+ will include all of the selectors.</p>
+
+ <p>This specification is a last call working draft for the the <a
+ href="http://www.w3.org/Style/CSS/members">CSS Working Group</a>
+ (<a href="/Style/">Style Activity</a>). This
+ document is a revision of the <a
+ href="http://www.w3.org/TR/2001/CR-css3-selectors-20011113/">Candidate
+ Recommendation dated 2001 November 13</a>, and has incorporated
+ implementation feedback received in the past few years. It is
+ expected that this last call will proceed straight to Proposed
+ Recommendation stage since it is believed that interoperability will
+ be demonstrable.</p>
+
+ <p>All persons are encouraged to review and implement this
+ specification and return comments to the (<a
+ href="http://lists.w3.org/Archives/Public/www-style/">archived</a>)
+ public mailing list <a
+ href="http://www.w3.org/Mail/Lists.html#www-style">www-style</a>
+ (see <a href="http://www.w3.org/Mail/Request">instructions</a>). W3C
+ Members can also send comments directly to the CSS Working
+ Group.
+ The deadline for comments is 14 January 2006.</p>
+
+ <p>This is still a draft document and may be updated, replaced, or
+ obsoleted by other documents at any time. It is inappropriate to
+ cite a W3C Working Draft as other than &quot;work in progress&quot;.
+
+ <p>This document may be available in <a
+ href="http://www.w3.org/Style/css3-selectors-updates/translations">translation</a>.
+ The English version of this specification is the only normative
+ version.
+
+ <div class="subtoc">
+
+ <h2 id="testF10"><a name=contents>Table of contents</a></h2>
+
+ <ul class="toc">
+ <li class="tocline2"><a href="#context">1. Introduction</a>
+ <ul>
+ <li><a href="#dependencies">1.1. Dependencies</a> </li>
+ <li><a href="#terminology">1.2. Terminology</a> </li>
+ <li><a href="#changesFromCSS2">1.3. Changes from CSS2</a> </li>
+ </ul>
+ <li class="tocline2"><a href="#selectors">2. Selectors</a>
+ <li class="tocline2"><a href="#casesens">3. Case sensitivity</a>
+ <li class="tocline2"><a href="#selector-syntax">4. Selector syntax</a>
+ <li class="tocline2"><a href="#grouping">5. Groups of selectors</a>
+ <li class="tocline2"><a href="#simple-selectors">6. Simple selectors</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#type-selectors">6.1. Type selectors</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#typenmsp">6.1.1. Type selectors and namespaces</a></li>
+ </ul>
+ <li class="tocline3"><a href="#universal-selector">6.2. Universal selector</a>
+ <ul>
+ <li><a href="#univnmsp">6.2.1. Universal selector and namespaces</a></li>
+ </ul>
+ <li class="tocline3"><a href="#attribute-selectors">6.3. Attribute selectors</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#attribute-representation">6.3.1. Representation of attributes and attributes values</a>
+ <li><a href="#attribute-substrings">6.3.2. Substring matching attribute selectors</a>
+ <li class="tocline4"><a href="#attrnmsp">6.3.3. Attribute selectors and namespaces</a>
+ <li class="tocline4"><a href="#def-values">6.3.4. Default attribute values in DTDs</a></li>
+ </ul>
+ <li class="tocline3"><a href="#class-html">6.4. Class selectors</a>
+ <li class="tocline3"><a href="#id-selectors">6.5. ID selectors</a>
+ <li class="tocline3"><a href="#pseudo-classes">6.6. Pseudo-classes</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#dynamic-pseudos">6.6.1. Dynamic pseudo-classes</a>
+ <li class="tocline4"><a href="#target-pseudo">6.6.2. The :target pseudo-class</a>
+ <li class="tocline4"><a href="#lang-pseudo">6.6.3. The :lang() pseudo-class</a>
+ <li class="tocline4"><a href="#UIstates">6.6.4. UI element states pseudo-classes</a>
+ <li class="tocline4"><a href="#structural-pseudos">6.6.5. Structural pseudo-classes</a>
+ <ul>
+ <li><a href="#root-pseudo">:root pseudo-class</a>
+ <li><a href="#nth-child-pseudo">:nth-child() pseudo-class</a>
+ <li><a href="#nth-last-child-pseudo">:nth-last-child()</a>
+ <li><a href="#nth-of-type-pseudo">:nth-of-type() pseudo-class</a>
+ <li><a href="#nth-last-of-type-pseudo">:nth-last-of-type()</a>
+ <li><a href="#first-child-pseudo">:first-child pseudo-class</a>
+ <li><a href="#last-child-pseudo">:last-child pseudo-class</a>
+ <li><a href="#first-of-type-pseudo">:first-of-type pseudo-class</a>
+ <li><a href="#last-of-type-pseudo">:last-of-type pseudo-class</a>
+ <li><a href="#only-child-pseudo">:only-child pseudo-class</a>
+ <li><a href="#only-of-type-pseudo">:only-of-type pseudo-class</a>
+ <li><a href="#empty-pseudo">:empty pseudo-class</a></li>
+ </ul>
+ <li class="tocline4"><a href="#negation">6.6.7. The negation pseudo-class</a></li>
+ </ul>
+ </li>
+ </ul>
+ <li><a href="#pseudo-elements">7. Pseudo-elements</a>
+ <ul>
+ <li><a href="#first-line">7.1. The ::first-line pseudo-element</a>
+ <li><a href="#first-letter">7.2. The ::first-letter pseudo-element</a>
+ <li><a href="#UIfragments">7.3. The ::selection pseudo-element</a>
+ <li><a href="#gen-content">7.4. The ::before and ::after pseudo-elements</a></li>
+ </ul>
+ <li class="tocline2"><a href="#combinators">8. Combinators</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#descendant-combinators">8.1. Descendant combinators</a>
+ <li class="tocline3"><a href="#child-combinators">8.2. Child combinators</a>
+ <li class="tocline3"><a href="#sibling-combinators">8.3. Sibling combinators</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#adjacent-sibling-combinators">8.3.1. Adjacent sibling combinator</a>
+ <li class="tocline4"><a href="#general-sibling-combinators">8.3.2. General sibling combinator</a></li>
+ </ul>
+ </li>
+ </ul>
+ <li class="tocline2"><a href="#specificity">9. Calculating a selector's specificity</a>
+ <li class="tocline2"><a href="#w3cselgrammar">10. The grammar of Selectors</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#grammar">10.1. Grammar</a>
+ <li class="tocline3"><a href="#lex">10.2. Lexical scanner</a></li>
+ </ul>
+ <li class="tocline2"><a href="#downlevel">11. Namespaces and down-level clients</a>
+ <li class="tocline2"><a href="#profiling">12. Profiles</a>
+ <li><a href="#Conformance">13. Conformance and requirements</a>
+ <li><a href="#Tests">14. Tests</a>
+ <li><a href="#ACKS">15. Acknowledgements</a>
+ <li class="tocline2"><a href="#references">16. References</a>
+ </ul>
+
+ </div>
+
+ <h2 id="testA10"><a name=context>1. Introduction</a></h2>
+
+ <h3><a name=dependencies></a>1.1. Dependencies</h3>
+
+ <p>Some features of this specification are specific to CSS, or have
+ particular limitations or rules specific to CSS. In this
+ specification, these have been described in terms of CSS2.1. <a
+ href="#refsCSS21">[CSS21]</a></p>
+
+ <h3><a name=terminology></a>1.2. Terminology</h3>
+
+ <p>All of the text of this specification is normative except
+ examples, notes, and sections explicitly marked as
+ non-normative.</p>
+
+ <h3><a name=changesFromCSS2></a>1.3. Changes from CSS2</h3>
+
+ <p><em>This section is non-normative.</em></p>
+
+ <p>The main differences between the selectors in CSS2 and those in
+ Selectors are:
+
+ <ul>
+
+ <li>the list of basic definitions (selector, group of selectors,
+ simple selector, etc.) has been changed; in particular, what was
+ referred to in CSS2 as a simple selector is now called a sequence
+ of simple selectors, and the term "simple selector" is now used for
+ the components of this sequence</li>
+
+ <li>an optional namespace component is now allowed in type element
+ selectors, the universal selector and attribute selectors</li>
+
+ <li>a <a href="#general-sibling-combinators">new combinator</a> has been introduced</li>
+
+ <li>new simple selectors including substring matching attribute
+ selectors, and new pseudo-classes</li>
+
+ <li>new pseudo-elements, and introduction of the "::" convention
+ for pseudo-elements</li>
+
+ <li>the grammar has been rewritten</li>
+
+ <li>profiles to be added to specifications integrating Selectors
+ and defining the set of selectors which is actually supported by
+ each specification</li>
+
+ <li>Selectors are now a CSS3 Module and an independent
+ specification; other specifications can now refer to this document
+ independently of CSS</li>
+
+ <li>the specification now has its own test suite</li>
+
+ </ul>
+
+<h2 id="testB10"><a name=selectors></a>2. Selectors</h2>
+
+<p><em>This section is non-normative, as it merely summarizes the
+following sections.</em></p>
+
+<p>A Selector represents a structure. This structure can be used as a
+condition (e.g. in a CSS rule) that determines which elements a
+selector matches in the document tree, or as a flat description of the
+HTML or XML fragment corresponding to that structure.</p>
+
+<p>Selectors may range from simple element names to rich contextual
+representations.</p>
+
+<p>The following table summarizes the Selector syntax:</p>
+
+<table class="selectorsReview">
+ <thead>
+ <tr>
+ <th class="pattern">Pattern</th>
+ <th class="meaning">Meaning</th>
+ <th class="described">Described in section</th>
+ <th class="origin">First defined in CSS level</th></tr>
+ <tbody>
+ <tr>
+ <td class="pattern">*</td>
+ <td class="meaning">any element</td>
+ <td class="described"><a
+ href="#universal-selector">Universal
+ selector</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E</td>
+ <td class="meaning">an element of type E</td>
+ <td class="described"><a
+ href="#type-selectors">Type selector</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E[foo]</td>
+ <td class="meaning">an E element with a "foo" attribute</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value is exactly
+ equal to "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo~="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value is a list of
+ space-separated values, one of which is exactly equal to "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo^="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value begins exactly
+ with the string "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[foo$="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value ends exactly
+ with the string "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[foo*="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value contains the
+ substring "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[hreflang|="en"]</td>
+ <td class="meaning">an E element whose "hreflang" attribute has a hyphen-separated
+ list of values beginning (from the left) with "en"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:root</td>
+ <td class="meaning">an E element, root of the document</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-child(n)</td>
+ <td class="meaning">an E element, the n-th child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-last-child(n)</td>
+ <td class="meaning">an E element, the n-th child of its parent, counting
+ from the last one</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-of-type(n)</td>
+ <td class="meaning">an E element, the n-th sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-last-of-type(n)</td>
+ <td class="meaning">an E element, the n-th sibling of its type, counting
+ from the last one</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:first-child</td>
+ <td class="meaning">an E element, first child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:last-child</td>
+ <td class="meaning">an E element, last child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:first-of-type</td>
+ <td class="meaning">an E element, first sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:last-of-type</td>
+ <td class="meaning">an E element, last sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:only-child</td>
+ <td class="meaning">an E element, only child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:only-of-type</td>
+ <td class="meaning">an E element, only sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:empty</td>
+ <td class="meaning">an E element that has no children (including text
+ nodes)</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:link<br>E:visited</td>
+ <td class="meaning">an E element being the source anchor of a hyperlink of
+ which the target is not yet visited (:link) or already visited
+ (:visited)</td>
+ <td class="described"><a
+ href="#link">The link
+ pseudo-classes</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E:active<br>E:hover<br>E:focus</td>
+ <td class="meaning">an E element during certain user actions</td>
+ <td class="described"><a
+ href="#useraction-pseudos">The user
+ action pseudo-classes</a></td>
+ <td class="origin">1 and 2</td></tr>
+ <tr>
+ <td class="pattern">E:target</td>
+ <td class="meaning">an E element being the target of the referring URI</td>
+ <td class="described"><a
+ href="#target-pseudo">The target
+ pseudo-class</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:lang(fr)</td>
+ <td class="meaning">an element of type E in language "fr" (the document
+ language specifies how language is determined)</td>
+ <td class="described"><a
+ href="#lang-pseudo">The :lang()
+ pseudo-class</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:enabled<br>E:disabled</td>
+ <td class="meaning">a user interface element E which is enabled or
+ disabled</td>
+ <td class="described"><a
+ href="#UIstates">The UI element states
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:checked<!--<br>E:indeterminate--></td>
+ <td class="meaning">a user interface element E which is checked<!-- or in an
+ indeterminate state--> (for instance a radio-button or checkbox)</td>
+ <td class="described"><a
+ href="#UIstates">The UI element states
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E::first-line</td>
+ <td class="meaning">the first formatted line of an E element</td>
+ <td class="described"><a
+ href="#first-line">The ::first-line
+ pseudo-element</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E::first-letter</td>
+ <td class="meaning">the first formatted letter of an E element</td>
+ <td class="described"><a
+ href="#first-letter">The ::first-letter
+ pseudo-element</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E::selection</td>
+ <td class="meaning">the portion of an E element that is currently
+ selected/highlighted by the user</td>
+ <td class="described"><a
+ href="#UIfragments">The UI element
+ fragments pseudo-elements</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E::before</td>
+ <td class="meaning">generated content before an E element</td>
+ <td class="described"><a
+ href="#gen-content">The ::before
+ pseudo-element</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E::after</td>
+ <td class="meaning">generated content after an E element</td>
+ <td class="described"><a
+ href="#gen-content">The ::after
+ pseudo-element</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E.warning</td>
+ <td class="meaning">an E element whose class is
+"warning" (the document language specifies how class is determined).</td>
+ <td class="described"><a
+ href="#class-html">Class
+ selectors</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E#myid</td>
+ <td class="meaning">an E element with ID equal to "myid".</td>
+ <td class="described"><a
+ href="#id-selectors">ID
+ selectors</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E:not(s)</td>
+ <td class="meaning">an E element that does not match simple selector s</td>
+ <td class="described"><a
+ href="#negation">Negation
+ pseudo-class</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E F</td>
+ <td class="meaning">an F element descendant of an E element</td>
+ <td class="described"><a
+ href="#descendant-combinators">Descendant
+ combinator</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E &gt; F</td>
+ <td class="meaning">an F element child of an E element</td>
+ <td class="described"><a
+ href="#child-combinators">Child
+ combinator</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E + F</td>
+ <td class="meaning">an F element immediately preceded by an E element</td>
+ <td class="described"><a
+ href="#adjacent-sibling-combinators">Adjacent sibling combinator</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E ~ F</td>
+ <td class="meaning">an F element preceded by an E element</td>
+ <td class="described"><a
+ href="#general-sibling-combinators">General sibling combinator</a></td>
+ <td class="origin">3</td></tr></tbody></table>
+
+<p>The meaning of each selector is derived from the table above by
+prepending "matches" to the contents of each cell in the "Meaning"
+column.</p>
+
+<h2 id="testC10"><a name=casesens>3. Case sensitivity</a></h2>
+
+<p>The case sensitivity of document language element names, attribute
+names, and attribute values in selectors depends on the document
+language. For example, in HTML, element names are case-insensitive,
+but in XML, they are case-sensitive.</p>
+
+<h2 id="testD10"><a name=selector-syntax>4. Selector syntax</a></h2>
+
+<p>A <dfn><a name=selector>selector</a></dfn> is a chain of one
+or more <a href="#sequence">sequences of simple selectors</a>
+separated by <a href="#combinators">combinators</a>.</p>
+
+<p>A <dfn><a name=sequence>sequence of simple selectors</a></dfn>
+is a chain of <a href="#simple-selectors-dfn">simple selectors</a>
+that are not separated by a <a href="#combinators">combinator</a>. It
+always begins with a <a href="#type-selectors">type selector</a> or a
+<a href="#universal-selector">universal selector</a>. No other type
+selector or universal selector is allowed in the sequence.</p>
+
+<p>A <dfn><a name=simple-selectors-dfn></a><a
+href="#simple-selectors">simple selector</a></dfn> is either a <a
+href="#type-selectors">type selector</a>, <a
+href="#universal-selector">universal selector</a>, <a
+href="#attribute-selectors">attribute selector</a>, <a
+href="#class-html">class selector</a>, <a
+href="#id-selectors">ID selector</a>, <a
+href="#content-selectors">content selector</a>, or <a
+href="#pseudo-classes">pseudo-class</a>. One <a
+href="#pseudo-elements">pseudo-element</a> may be appended to the last
+sequence of simple selectors.</p>
+
+<p><dfn>Combinators</dfn> are: white space, &quot;greater-than
+sign&quot; (U+003E, <code>&gt;</code>), &quot;plus sign&quot; (U+002B,
+<code>+</code>) and &quot;tilde&quot; (U+007E, <code>~</code>). White
+space may appear between a combinator and the simple selectors around
+it. <a name=whitespace></a>Only the characters "space" (U+0020), "tab"
+(U+0009), "line feed" (U+000A), "carriage return" (U+000D), and "form
+feed" (U+000C) can occur in white space. Other space-like characters,
+such as "em-space" (U+2003) and "ideographic space" (U+3000), are
+never part of white space.</p>
+
+<p>The elements of a document tree that are represented by a selector
+are the <dfn><a name=subject></a>subjects of the selector</dfn>. A
+selector consisting of a single sequence of simple selectors
+represents any element satisfying its requirements. Prepending another
+sequence of simple selectors and a combinator to a sequence imposes
+additional matching constraints, so the subjects of a selector are
+always a subset of the elements represented by the last sequence of
+simple selectors.</p>
+
+<p>An empty selector, containing no sequence of simple selectors and
+no pseudo-element, is an <a href="#Conformance">invalid
+selector</a>.</p>
+
+<h2 id="testE10"><a name=grouping>5. Groups of selectors</a></h2>
+
+<p>When several selectors share the same declarations, they may be
+grouped into a comma-separated list. (A comma is U+002C.)</p>
+
+<div class="example">
+<p>CSS examples:</p>
+<p>In this example, we condense three rules with identical
+declarations into one. Thus,</p>
+<pre>h1 { font-family: sans-serif }
+h2 { font-family: sans-serif }
+h3 { font-family: sans-serif }</pre>
+<p>is equivalent to:</p>
+<pre>h1, h2, h3 { font-family: sans-serif }</pre>
+</div>
+
+<p><strong>Warning</strong>: the equivalence is true in this example
+because all the selectors are valid selectors. If just one of these
+selectors were invalid, the entire group of selectors would be
+invalid. This would invalidate the rule for all three heading
+elements, whereas in the former case only one of the three individual
+heading rules would be invalidated.</p>
+
+
+<h2><a name=simple-selectors>6. Simple selectors</a></h2>
+
+<h3><a name=type-selectors>6.1. Type selector</a></h3>
+
+<p>A <dfn>type selector</dfn> is the name of a document language
+element type. A type selector represents an instance of the element
+type in the document tree.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents an <code>h1</code> element in the document tree:</p>
+ <pre>h1</pre>
+</div>
+
+
+<h4><a name=typenmsp>6.1.1. Type selectors and namespaces</a></h4>
+
+<p>Type selectors allow an optional namespace (<a
+href="#refsXMLNAMES">[XMLNAMES]</a>) component. A namespace prefix
+that has been previously declared may be prepended to the element name
+separated by the namespace separator &quot;vertical bar&quot;
+(U+007C, <code>|</code>).</p>
+
+<p>The namespace component may be left empty to indicate that the
+selector is only to represent elements with no declared namespace.</p>
+
+<p>An asterisk may be used for the namespace prefix, indicating that
+the selector represents elements in any namespace (including elements
+with no namespace).</p>
+
+<p>Element type selectors that have no namespace component (no
+namespace separator), represent elements without regard to the
+element's namespace (equivalent to "<code>*|</code>") unless a default
+namespace has been declared. If a default namespace has been declared,
+the selector will represent only elements in the default
+namespace.</p>
+
+<p>A type selector containing a namespace prefix that has not been
+previously declared is an <a href="#Conformance">invalid</a> selector.
+The mechanism for declaring a namespace prefix is left up to the
+language implementing Selectors. In CSS, such a mechanism is defined
+in the General Syntax module.</p>
+
+<p>In a namespace-aware client, element type selectors will only match
+against the <a
+href="http://www.w3.org/TR/REC-xml-names/#NT-LocalPart">local part</a>
+of the element's <a
+href="http://www.w3.org/TR/REC-xml-names/#ns-qualnames">qualified
+name</a>. See <a href="#downlevel">below</a> for notes about matching
+behaviors in down-level clients.</p>
+
+<p>In summary:</p>
+
+<dl>
+ <dt><code>ns|E</code></dt>
+ <dd>elements with name E in namespace ns</dd>
+ <dt><code>*|E</code></dt>
+ <dd>elements with name E in any namespace, including those without any
+ declared namespace</dd>
+ <dt><code>|E</code></dt>
+ <dd>elements with name E without any declared namespace</dd>
+ <dt><code>E</code></dt>
+ <dd>if no default namespace has been specified, this is equivalent to *|E.
+ Otherwise it is equivalent to ns|E where ns is the default namespace.</dd>
+</dl>
+
+<div class="example">
+ <p>CSS examples:</p>
+
+ <pre>@namespace foo url(http://www.example.com);
+ foo|h1 { color: blue }
+ foo|* { color: yellow }
+ |h1 { color: red }
+ *|h1 { color: green }
+ h1 { color: green }</pre>
+
+ <p>The first rule will match only <code>h1</code> elements in the
+ "http://www.example.com" namespace.</p>
+
+ <p>The second rule will match all elements in the
+ "http://www.example.com" namespace.</p>
+
+ <p>The third rule will match only <code>h1</code> elements without
+ any declared namespace.</p>
+
+ <p>The fourth rule will match <code>h1</code> elements in any
+ namespace (including those without any declared namespace).</p>
+
+ <p>The last rule is equivalent to the fourth rule because no default
+ namespace has been defined.</p>
+
+</div>
+
+<h3><a name=universal-selector>6.2. Universal selector</a> </h3>
+
+<p>The <dfn>universal selector</dfn>, written &quot;asterisk&quot;
+(<code>*</code>), represents the qualified name of any element
+type. It represents any single element in the document tree in any
+namespace (including those without any declared namespace) if no
+default namespace has been specified. If a default namespace has been
+specified, see <a href="#univnmsp">Universal selector and
+Namespaces</a> below.</p>
+
+<p>If the universal selector is not the only component of a sequence
+of simple selectors, the <code>*</code> may be omitted.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <ul>
+ <li><code>*[hreflang|=en]</code> and <code>[hreflang|=en]</code> are equivalent,</li>
+ <li><code>*.warning</code> and <code>.warning</code> are equivalent,</li>
+ <li><code>*#myid</code> and <code>#myid</code> are equivalent.</li>
+ </ul>
+</div>
+
+<p class="note"><strong>Note:</strong> it is recommended that the
+<code>*</code>, representing the universal selector, not be
+omitted.</p>
+
+<h4><a name=univnmsp>6.2.1. Universal selector and namespaces</a></h4>
+
+<p>The universal selector allows an optional namespace component. It
+is used as follows:</p>
+
+<dl>
+ <dt><code>ns|*</code></dt>
+ <dd>all elements in namespace ns</dd>
+ <dt><code>*|*</code></dt>
+ <dd>all elements</dd>
+ <dt><code>|*</code></dt>
+ <dd>all elements without any declared namespace</dd>
+ <dt><code>*</code></dt>
+ <dd>if no default namespace has been specified, this is equivalent to *|*.
+ Otherwise it is equivalent to ns|* where ns is the default namespace.</dd>
+</dl>
+
+<p>A universal selector containing a namespace prefix that has not
+been previously declared is an <a href="#Conformance">invalid</a>
+selector. The mechanism for declaring a namespace prefix is left up
+to the language implementing Selectors. In CSS, such a mechanism is
+defined in the General Syntax module.</p>
+
+
+<h3><a name=attribute-selectors>6.3. Attribute selectors</a></h3>
+
+<p>Selectors allow the representation of an element's attributes. When
+a selector is used as an expression to match against an element,
+attribute selectors must be considered to match an element if that
+element has an attribute that matches the attribute represented by the
+attribute selector.</p>
+
+<h4><a name=attribute-representation>6.3.1. Attribute presence and values
+selectors</a></h4>
+
+<p>CSS2 introduced four attribute selectors:</p>
+
+<dl>
+ <dt><code>[att]</code>
+ <dd>Represents an element with the <code>att</code> attribute, whatever the value of
+ the attribute.</dd>
+ <dt><code>[att=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value is exactly
+ "val".</dd>
+ <dt><code>[att~=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value is a <a
+ href="#whitespace">whitespace</a>-separated list of words, one of
+ which is exactly "val". If "val" contains whitespace, it will never
+ represent anything (since the words are <em>separated</em> by
+ spaces).</dd>
+ <dt><code>[att|=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute, its value either
+ being exactly "val" or beginning with "val" immediately followed by
+ "-" (U+002D). This is primarily intended to allow language subcode
+ matches (e.g., the <code>hreflang</code> attribute on the
+ <code>link</code> element in HTML) as described in RFC 3066 (<a
+ href="#refsRFC3066">[RFC3066]</a>). For <code>lang</code> (or
+ <code>xml:lang</code>) language subcode matching, please see <a
+ href="#lang-pseudo">the <code>:lang</code> pseudo-class</a>.</dd>
+</dl>
+
+<p>Attribute values must be identifiers or strings. The
+case-sensitivity of attribute names and values in selectors depends on
+the document language.</p>
+
+<div class="example">
+
+ <p>Examples:</p>
+
+ <p>The following attribute selector represents an <code>h1</code>
+ element that carries the <code>title</code> attribute, whatever its
+ value:</p>
+
+ <pre>h1[title]</pre>
+
+ <p>In the following example, the selector represents a
+ <code>span</code> element whose <code>class</code> attribute has
+ exactly the value "example":</p>
+
+ <pre>span[class="example"]</pre>
+
+ <p>Multiple attribute selectors can be used to represent several
+ attributes of an element, or several conditions on the same
+ attribute. Here, the selector represents a <code>span</code> element
+ whose <code>hello</code> attribute has exactly the value "Cleveland"
+ and whose <code>goodbye</code> attribute has exactly the value
+ "Columbus":</p>
+
+ <pre>span[hello="Cleveland"][goodbye="Columbus"]</pre>
+
+ <p>The following selectors illustrate the differences between "="
+ and "~=". The first selector will represent, for example, the value
+ "copyright copyleft copyeditor" on a <code>rel</code> attribute. The
+ second selector will only represent an <code>a</code> element with
+ an <code>href</code> attribute having the exact value
+ "http://www.w3.org/".</p>
+
+ <pre>a[rel~="copyright"]
+a[href="http://www.w3.org/"]</pre>
+
+ <p>The following selector represents a <code>link</code> element
+ whose <code>hreflang</code> attribute is exactly "fr".</p>
+
+ <pre>link[hreflang=fr]</pre>
+
+ <p>The following selector represents a <code>link</code> element for
+ which the values of the <code>hreflang</code> attribute begins with
+ "en", including "en", "en-US", and "en-cockney":</p>
+
+ <pre>link[hreflang|="en"]</pre>
+
+ <p>Similarly, the following selectors represents a
+ <code>DIALOGUE</code> element whenever it has one of two different
+ values for an attribute <code>character</code>:</p>
+
+ <pre>DIALOGUE[character=romeo]
+DIALOGUE[character=juliet]</pre>
+
+</div>
+
+<h4><a name=attribute-substrings></a>6.3.2. Substring matching attribute
+selectors</h4>
+
+<p>Three additional attribute selectors are provided for matching
+substrings in the value of an attribute:</p>
+
+<dl>
+ <dt><code>[att^=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value begins
+ with the prefix "val".</dd>
+ <dt><code>[att$=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute whose value ends with
+ the suffix "val".</dd>
+ <dt><code>[att*=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute whose value contains
+ at least one instance of the substring "val".</dd>
+</dl>
+
+<p>Attribute values must be identifiers or strings. The
+case-sensitivity of attribute names in selectors depends on the
+document language.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents an HTML <code>object</code>, referencing an
+ image:</p>
+ <pre>object[type^="image/"]</pre>
+ <p>The following selector represents an HTML anchor <code>a</code> with an
+ <code>href</code> attribute whose value ends with ".html".</p>
+ <pre>a[href$=".html"]</pre>
+ <p>The following selector represents an HTML paragraph with a <code>title</code>
+ attribute whose value contains the substring "hello"</p>
+ <pre>p[title*="hello"]</pre>
+</div>
+
+<h4><a name=attrnmsp>6.3.3. Attribute selectors and namespaces</a></h4>
+
+<p>Attribute selectors allow an optional namespace component to the
+attribute name. A namespace prefix that has been previously declared
+may be prepended to the attribute name separated by the namespace
+separator &quot;vertical bar&quot; (<code>|</code>). In keeping with
+the Namespaces in the XML recommendation, default namespaces do not
+apply to attributes, therefore attribute selectors without a namespace
+component apply only to attributes that have no declared namespace
+(equivalent to "<code>|attr</code>"). An asterisk may be used for the
+namespace prefix indicating that the selector is to match all
+attribute names without regard to the attribute's namespace.
+
+<p>An attribute selector with an attribute name containing a namespace
+prefix that has not been previously declared is an <a
+href="#Conformance">invalid</a> selector. The mechanism for declaring
+a namespace prefix is left up to the language implementing Selectors.
+In CSS, such a mechanism is defined in the General Syntax module.
+
+<div class="example">
+ <p>CSS examples:</p>
+ <pre>@namespace foo "http://www.example.com";
+[foo|att=val] { color: blue }
+[*|att] { color: yellow }
+[|att] { color: green }
+[att] { color: green }</pre>
+
+ <p>The first rule will match only elements with the attribute
+ <code>att</code> in the "http://www.example.com" namespace with the
+ value "val".</p>
+
+ <p>The second rule will match only elements with the attribute
+ <code>att</code> regardless of the namespace of the attribute
+ (including no declared namespace).</p>
+
+ <p>The last two rules are equivalent and will match only elements
+ with the attribute <code>att</code> where the attribute is not
+ declared to be in a namespace.</p>
+
+</div>
+
+<h4><a name=def-values>6.3.4. Default attribute values in DTDs</a></h4>
+
+<p>Attribute selectors represent explicitly set attribute values in
+the document tree. Default attribute values may be defined in a DTD or
+elsewhere, but cannot always be selected by attribute
+selectors. Selectors should be designed so that they work even if the
+default values are not included in the document tree.</p>
+
+<p>More precisely, a UA is <em>not</em> required to read an "external
+subset" of the DTD but <em>is</em> required to look for default
+attribute values in the document's "internal subset." (See <a
+href="#refsXML10">[XML10]</a> for definitions of these subsets.)</p>
+
+<p>A UA that recognizes an XML namespace <a
+href="#refsXMLNAMES">[XMLNAMES]</a> is not required to use its
+knowledge of that namespace to treat default attribute values as if
+they were present in the document. (For example, an XHTML UA is not
+required to use its built-in knowledge of the XHTML DTD.)</p>
+
+<p class="note"><strong>Note:</strong> Typically, implementations
+choose to ignore external subsets.</p>
+
+<div class="example">
+<p>Example:</p>
+
+<p>Consider an element EXAMPLE with an attribute "notation" that has a
+default value of "decimal". The DTD fragment might be</p>
+
+<pre class="dtd-example">&lt;!ATTLIST EXAMPLE notation (decimal,octal) "decimal"></pre>
+
+<p>If the style sheet contains the rules</p>
+
+<pre>EXAMPLE[notation=decimal] { /*... default property settings ...*/ }
+EXAMPLE[notation=octal] { /*... other settings...*/ }</pre>
+
+<p>the first rule will not match elements whose "notation" attribute
+is set by default, i.e. not set explicitly. To catch all cases, the
+attribute selector for the default value must be dropped:</p>
+
+<pre>EXAMPLE { /*... default property settings ...*/ }
+EXAMPLE[notation=octal] { /*... other settings...*/ }</pre>
+
+<p>Here, because the selector <code>EXAMPLE[notation=octal]</code> is
+more specific than the tag
+selector alone, the style declarations in the second rule will override
+those in the first for elements that have a "notation" attribute value
+of "octal". Care has to be taken that all property declarations that
+are to apply only to the default case are overridden in the non-default
+cases' style rules.</p>
+
+</div>
+
+<h3><a name=class-html>6.4. Class selectors</a></h3>
+
+<p>Working with HTML, authors may use the period (U+002E,
+<code>.</code>) notation as an alternative to the <code>~=</code>
+notation when representing the <code>class</code> attribute. Thus, for
+HTML, <code>div.value</code> and <code>div[class~=value]</code> have
+the same meaning. The attribute value must immediately follow the
+&quot;period&quot; (<code>.</code>).</p>
+
+<p>UAs may apply selectors using the period (.) notation in XML
+documents if the UA has namespace-specific knowledge that allows it to
+determine which attribute is the &quot;class&quot; attribute for the
+respective namespace. One such example of namespace-specific knowledge
+is the prose in the specification for a particular namespace (e.g. SVG
+1.0 <a href="#refsSVG">[SVG]</a> describes the <a
+href="http://www.w3.org/TR/2001/PR-SVG-20010719/styling.html#ClassAttribute">SVG
+&quot;class&quot; attribute</a> and how a UA should interpret it, and
+similarly MathML 1.01 <a href="#refsMATH">[MATH]</a> describes the <a
+href="http://www.w3.org/1999/07/REC-MathML-19990707/chapter2.html#sec2.3.4">MathML
+&quot;class&quot; attribute</a>.)</p>
+
+<div class="example">
+ <p>CSS examples:</p>
+
+ <p>We can assign style information to all elements with
+ <code>class~="pastoral"</code> as follows:</p>
+
+ <pre>*.pastoral { color: green } /* all elements with class~=pastoral */</pre>
+
+ <p>or just</p>
+
+ <pre>.pastoral { color: green } /* all elements with class~=pastoral */</pre>
+
+ <p>The following assigns style only to H1 elements with
+ <code>class~="pastoral"</code>:</p>
+
+ <pre>H1.pastoral { color: green } /* H1 elements with class~=pastoral */</pre>
+
+ <p>Given these rules, the first H1 instance below would not have
+ green text, while the second would:</p>
+
+ <pre>&lt;H1&gt;Not green&lt;/H1&gt;
+&lt;H1 class="pastoral"&gt;Very green&lt;/H1&gt;</pre>
+
+</div>
+
+<p>To represent a subset of "class" values, each value must be preceded
+by a ".", in any order.</P>
+
+<div class="example">
+
+ <p>CSS example:</p>
+
+ <p>The following rule matches any P element whose "class" attribute
+ has been assigned a list of <a
+ href="#whitespace">whitespace</a>-separated values that includes
+ "pastoral" and "marine":</p>
+
+ <pre>p.pastoral.marine { color: green }</pre>
+
+ <p>This rule matches when <code>class="pastoral blue aqua
+ marine"</code> but does not match for <code>class="pastoral
+ blue"</code>.</p>
+
+</div>
+
+<p class="note"><strong>Note:</strong> Because CSS gives considerable
+power to the "class" attribute, authors could conceivably design their
+own "document language" based on elements with almost no associated
+presentation (such as DIV and SPAN in HTML) and assigning style
+information through the "class" attribute. Authors should avoid this
+practice since the structural elements of a document language often
+have recognized and accepted meanings and author-defined classes may
+not.</p>
+
+<p class="note"><strong>Note:</strong> If an element has multiple
+class attributes, their values must be concatenated with spaces
+between the values before searching for the class. As of this time the
+working group is not aware of any manner in which this situation can
+be reached, however, so this behavior is explicitly non-normative in
+this specification.</p>
+
+<h3><a name=id-selectors>6.5. ID selectors</a></h3>
+
+<p>Document languages may contain attributes that are declared to be
+of type ID. What makes attributes of type ID special is that no two
+such attributes can have the same value in a document, regardless of
+the type of the elements that carry them; whatever the document
+language, an ID typed attribute can be used to uniquely identify its
+element. In HTML all ID attributes are named "id"; XML applications
+may name ID attributes differently, but the same restriction
+applies.</p>
+
+<p>An ID-typed attribute of a document language allows authors to
+assign an identifier to one element instance in the document tree. W3C
+ID selectors represent an element instance based on its identifier. An
+ID selector contains a &quot;number sign&quot; (U+0023,
+<code>#</code>) immediately followed by the ID value, which must be an
+identifier.</p>
+
+<p>Selectors does not specify how a UA knows the ID-typed attribute of
+an element. The UA may, e.g., read a document's DTD, have the
+information hard-coded or ask the user.
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following ID selector represents an <code>h1</code> element
+ whose ID-typed attribute has the value "chapter1":</p>
+ <pre>h1#chapter1</pre>
+ <p>The following ID selector represents any element whose ID-typed
+ attribute has the value "chapter1":</p>
+ <pre>#chapter1</pre>
+ <p>The following selector represents any element whose ID-typed
+ attribute has the value "z98y".</p>
+ <pre>*#z98y</pre>
+</div>
+
+<p class="note"><strong>Note.</strong> In XML 1.0 <a
+href="#refsXML10">[XML10]</a>, the information about which attribute
+contains an element's IDs is contained in a DTD or a schema. When
+parsing XML, UAs do not always read the DTD, and thus may not know
+what the ID of an element is (though a UA may have namespace-specific
+knowledge that allows it to determine which attribute is the ID
+attribute for that namespace). If a style sheet designer knows or
+suspects that a UA may not know what the ID of an element is, he
+should use normal attribute selectors instead:
+<code>[name=p371]</code> instead of <code>#p371</code>. Elements in
+XML 1.0 documents without a DTD do not have IDs at all.</p>
+
+<p>If an element has multiple ID attributes, all of them must be
+treated as IDs for that element for the purposes of the ID
+selector. Such a situation could be reached using mixtures of xml:id,
+DOM3 Core, XML DTDs, and namespace-specific knowledge.</p>
+
+<h3><a name=pseudo-classes>6.6. Pseudo-classes</a></h3>
+
+<p>The pseudo-class concept is introduced to permit selection based on
+information that lies outside of the document tree or that cannot be
+expressed using the other simple selectors.</p>
+
+<p>A pseudo-class always consists of a &quot;colon&quot;
+(<code>:</code>) followed by the name of the pseudo-class and
+optionally by a value between parentheses.</p>
+
+<p>Pseudo-classes are allowed in all sequences of simple selectors
+contained in a selector. Pseudo-classes are allowed anywhere in
+sequences of simple selectors, after the leading type selector or
+universal selector (possibly omitted). Pseudo-class names are
+case-insensitive. Some pseudo-classes are mutually exclusive, while
+others can be applied simultaneously to the same
+element. Pseudo-classes may be dynamic, in the sense that an element
+may acquire or lose a pseudo-class while a user interacts with the
+document.</p>
+
+
+<h4><a name=dynamic-pseudos>6.6.1. Dynamic pseudo-classes</a></h4>
+
+<p>Dynamic pseudo-classes classify elements on characteristics other
+than their name, attributes, or content, in principle characteristics
+that cannot be deduced from the document tree.</p>
+
+<p>Dynamic pseudo-classes do not appear in the document source or
+document tree.</p>
+
+
+<h5>The <a name=link>link pseudo-classes: :link and :visited</a></h5>
+
+<p>User agents commonly display unvisited links differently from
+previously visited ones. Selectors
+provides the pseudo-classes <code>:link</code> and
+<code>:visited</code> to distinguish them:</p>
+
+<ul>
+ <li>The <code>:link</code> pseudo-class applies to links that have
+ not yet been visited.</li>
+ <li>The <code>:visited</code> pseudo-class applies once the link has
+ been visited by the user. </li>
+</ul>
+
+<p>After some amount of time, user agents may choose to return a
+visited link to the (unvisited) ':link' state.</p>
+
+<p>The two states are mutually exclusive.</p>
+
+<div class="example">
+
+ <p>Example:</p>
+
+ <p>The following selector represents links carrying class
+ <code>external</code> and already visited:</p>
+
+ <pre>a.external:visited</pre>
+
+</div>
+
+<p class="note"><strong>Note:</strong> It is possible for style sheet
+authors to abuse the :link and :visited pseudo-classes to determine
+which sites a user has visited without the user's consent.
+
+<p>UAs may therefore treat all links as unvisited links, or implement
+other measures to preserve the user's privacy while rendering visited
+and unvisited links differently.</p>
+
+<h5>The <a name=useraction-pseudos>user action pseudo-classes
+:hover, :active, and :focus</a></h5>
+
+<p>Interactive user agents sometimes change the rendering in response
+to user actions. Selectors provides
+three pseudo-classes for the selection of an element the user is
+acting on.</p>
+
+<ul>
+
+ <li>The <code>:hover</code> pseudo-class applies while the user
+ designates an element with a pointing device, but does not activate
+ it. For example, a visual user agent could apply this pseudo-class
+ when the cursor (mouse pointer) hovers over a box generated by the
+ element. User agents not that do not support <a
+ href="http://www.w3.org/TR/REC-CSS2/media.html#interactive-media-group">interactive
+ media</a> do not have to support this pseudo-class. Some conforming
+ user agents that support <a
+ href="http://www.w3.org/TR/REC-CSS2/media.html#interactive-media-group">interactive
+ media</a> may not be able to support this pseudo-class (e.g., a pen
+ device that does not detect hovering).</li>
+
+ <li>The <code>:active</code> pseudo-class applies while an element
+ is being activated by the user. For example, between the times the
+ user presses the mouse button and releases it.</li>
+
+ <li>The <code>:focus</code> pseudo-class applies while an element
+ has the focus (accepts keyboard or mouse events, or other forms of
+ input). </li>
+
+</ul>
+
+<p>There may be document language or implementation specific limits on
+which elements can become <code>:active</code> or acquire
+<code>:focus</code>.</p>
+
+<p>These pseudo-classes are not mutually exclusive. An element may
+match several pseudo-classes at the same time.</p>
+
+<p>Selectors doesn't define if the parent of an element that is
+':active' or ':hover' is also in that state.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <pre>a:link /* unvisited links */
+a:visited /* visited links */
+a:hover /* user hovers */
+a:active /* active links */</pre>
+ <p>An example of combining dynamic pseudo-classes:</p>
+ <pre>a:focus
+a:focus:hover</pre>
+ <p>The last selector matches <code>a</code> elements that are in
+ the pseudo-class :focus and in the pseudo-class :hover.</p>
+</div>
+
+<p class="note"><strong>Note:</strong> An element can be both ':visited'
+and ':active' (or ':link' and ':active').</p>
+
+<h4><a name=target-pseudo>6.6.2. The target pseudo-class :target</a></h4>
+
+<p>Some URIs refer to a location within a resource. This kind of URI
+ends with a &quot;number sign&quot; (#) followed by an anchor
+identifier (called the fragment identifier).</p>
+
+<p>URIs with fragment identifiers link to a certain element within the
+document, known as the target element. For instance, here is a URI
+pointing to an anchor named <code>section_2</code> in an HTML
+document:</p>
+
+<pre>http://example.com/html/top.html#section_2</pre>
+
+<p>A target element can be represented by the <code>:target</code>
+pseudo-class. If the document's URI has no fragment identifier, then
+the document has no target element.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <pre>p.note:target</pre>
+ <p>This selector represents a <code>p</code> element of class
+ <code>note</code> that is the target element of the referring
+ URI.</p>
+</div>
+
+<div class="example">
+ <p>CSS example:</p>
+ <p>Here, the <code>:target</code> pseudo-class is used to make the
+ target element red and place an image before it, if there is one:</p>
+ <pre>*:target { color : red }
+*:target::before { content : url(target.png) }</pre>
+</div>
+
+<h4><a name=lang-pseudo>6.6.3. The language pseudo-class :lang</a></h4>
+
+<p>If the document language specifies how the human language of an
+element is determined, it is possible to write selectors that
+represent an element based on its language. For example, in HTML <a
+href="#refsHTML4">[HTML4]</a>, the language is determined by a
+combination of the <code>lang</code> attribute, the <code>meta</code>
+element, and possibly by information from the protocol (such as HTTP
+headers). XML uses an attribute called <code>xml:lang</code>, and
+there may be other document language-specific methods for determining
+the language.</p>
+
+<p>The pseudo-class <code>:lang(C)</code> represents an element that
+is in language C. Whether an element is represented by a
+<code>:lang()</code> selector is based solely on the identifier C
+being either equal to, or a hyphen-separated substring of, the
+element's language value, in the same way as if performed by the <a
+href="#attribute-representation">'|='</a> operator in attribute
+selectors. The identifier C does not have to be a valid language
+name.</p>
+
+<p>C must not be empty. (If it is, the selector is invalid.)</p>
+
+<p class="note"><strong>Note:</strong> It is recommended that
+documents and protocols indicate language using codes from RFC 3066 <a
+href="#refsRFC3066">[RFC3066]</a> or its successor, and by means of
+"xml:lang" attributes in the case of XML-based documents <a
+href="#refsXML10">[XML10]</a>. See <a
+href="http://www.w3.org/International/questions/qa-lang-2or3.html">
+"FAQ: Two-letter or three-letter language codes."</a></p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The two following selectors represent an HTML document that is in
+ Belgian, French, or German. The two next selectors represent
+ <code>q</code> quotations in an arbitrary element in Belgian, French,
+ or German.</p>
+ <pre>html:lang(fr-be)
+html:lang(de)
+:lang(fr-be) &gt; q
+:lang(de) &gt; q</pre>
+</div>
+
+<h4><a name=UIstates>6.6.4. The UI element states pseudo-classes</a></h4>
+
+<h5><a name=enableddisabled>The :enabled and :disabled pseudo-classes</a></h5>
+
+<p>The <code>:enabled</code> pseudo-class allows authors to customize
+the look of user interface elements that are enabled &mdash; which the
+user can select or activate in some fashion (e.g. clicking on a button
+with a mouse). There is a need for such a pseudo-class because there
+is no way to programmatically specify the default appearance of say,
+an enabled <code>input</code> element without also specifying what it
+would look like when it was disabled.</p>
+
+<p>Similar to <code>:enabled</code>, <code>:disabled</code> allows the
+author to specify precisely how a disabled or inactive user interface
+element should look.</p>
+
+<p>Most elements will be neither enabled nor disabled. An element is
+enabled if the user can either activate it or transfer the focus to
+it. An element is disabled if it could be enabled, but the user cannot
+presently activate it or transfer focus to it.</p>
+
+
+<h5><a name=checked>The :checked pseudo-class</a></h5>
+
+<p>Radio and checkbox elements can be toggled by the user. Some menu
+items are "checked" when the user selects them. When such elements are
+toggled "on" the <code>:checked</code> pseudo-class applies. The
+<code>:checked</code> pseudo-class initially applies to such elements
+that have the HTML4 <code>selected</code> and <code>checked</code>
+attributes as described in <a
+href="http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.2.1">Section
+17.2.1 of HTML4</a>, but of course the user can toggle "off" such
+elements in which case the <code>:checked</code> pseudo-class would no
+longer apply. While the <code>:checked</code> pseudo-class is dynamic
+in nature, and is altered by user action, since it can also be based
+on the presence of the semantic HTML4 <code>selected</code> and
+<code>checked</code> attributes, it applies to all media.
+
+
+<h5><a name=indeterminate>The :indeterminate pseudo-class</a></h5>
+
+<div class="note">
+
+<p>Radio and checkbox elements can be toggled by the user, but are
+sometimes in an indeterminate state, neither checked nor unchecked.
+This can be due to an element attribute, or DOM manipulation.</p>
+
+<p>A future version of this specification may introduce an
+<code>:indeterminate</code> pseudo-class that applies to such elements.
+<!--While the <code>:indeterminate</code> pseudo-class is dynamic in
+nature, and is altered by user action, since it can also be based on
+the presence of an element attribute, it applies to all media.</p>
+
+<p>Components of a radio-group initialized with no pre-selected choice
+are an example of :indeterminate state.--></p>
+
+</div>
+
+
+<h4><a name=structural-pseudos>6.6.5. Structural pseudo-classes</a></h4>
+
+<p>Selectors introduces the concept of <dfn>structural
+pseudo-classes</dfn> to permit selection based on extra information that lies in
+the document tree but cannot be represented by other simple selectors or
+combinators.
+
+<p>Note that standalone pieces of PCDATA (text nodes in the DOM) are
+not counted when calculating the position of an element in the list of
+children of its parent. When calculating the position of an element in
+the list of children of its parent, the index numbering starts at 1.
+
+
+<h5><a name=root-pseudo>:root pseudo-class</a></h5>
+
+<p>The <code>:root</code> pseudo-class represents an element that is
+the root of the document. In HTML 4, this is always the
+<code>HTML</code> element.
+
+
+<h5><a name=nth-child-pseudo>:nth-child() pseudo-class</a></h5>
+
+<p>The
+<code>:nth-child(<var>a</var><code>n</code>+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings
+<strong>before</strong> it in the document tree, for a given positive
+integer or zero value of <code>n</code>, and has a parent element. In
+other words, this matches the <var>b</var>th child of an element after
+all the children have been split into groups of <var>a</var> elements
+each. For example, this allows the selectors to address every other
+row in a table, and could be used to alternate the color
+of paragraph text in a cycle of four. The <var>a</var> and
+<var>b</var> values must be zero, negative integers or positive
+integers. The index of the first child of an element is 1.
+
+<p>In addition to this, <code>:nth-child()</code> can take
+'<code>odd</code>' and '<code>even</code>' as arguments instead.
+'<code>odd</code>' has the same signification as <code>2n+1</code>,
+and '<code>even</code>' has the same signification as <code>2n</code>.
+
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-child(2n+1) /* represents every odd row of an HTML table */
+tr:nth-child(odd) /* same */
+tr:nth-child(2n) /* represents every even row of an HTML table */
+tr:nth-child(even) /* same */
+
+/* Alternate paragraph colours in CSS */
+p:nth-child(4n+1) { color: navy; }
+p:nth-child(4n+2) { color: green; }
+p:nth-child(4n+3) { color: maroon; }
+p:nth-child(4n+4) { color: purple; }</pre>
+</div>
+
+<p>When <var>a</var>=0, no repeating is used, so for example
+<code>:nth-child(0n+5)</code> matches only the fifth child. When
+<var>a</var>=0, the <var>a</var><code>n</code> part need not be
+included, so the syntax simplifies to
+<code>:nth-child(<var>b</var>)</code> and the last example simplifies
+to <code>:nth-child(5)</code>.
+
+<div class="example">
+<p>Examples:</p>
+<pre>foo:nth-child(0n+1) /* represents an element foo, first child of its parent element */
+foo:nth-child(1) /* same */</pre>
+</div>
+
+<p>When <var>a</var>=1, the number may be omitted from the rule.
+
+<div class="example">
+<p>Examples:</p>
+<p>The following selectors are therefore equivalent:</p>
+<pre>bar:nth-child(1n+0) /* represents all bar elements, specificity (0,1,1) */
+bar:nth-child(n+0) /* same */
+bar:nth-child(n) /* same */
+bar /* same but lower specificity (0,0,1) */</pre>
+</div>
+
+<p>If <var>b</var>=0, then every <var>a</var>th element is picked. In
+such a case, the <var>b</var> part may be omitted.
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-child(2n+0) /* represents every even row of an HTML table */
+tr:nth-child(2n) /* same */</pre>
+</div>
+
+<p>If both <var>a</var> and <var>b</var> are equal to zero, the
+pseudo-class represents no element in the document tree.</p>
+
+<p>The value <var>a</var> can be negative, but only the positive
+values of <var>a</var><code>n</code>+<var>b</var>, for
+<code>n</code>&ge;0, may represent an element in the document
+tree.</p>
+
+<div class="example">
+<p>Example:</p>
+<pre>html|tr:nth-child(-n+6) /* represents the 6 first rows of XHTML tables */</pre>
+</div>
+
+<p>When the value <var>b</var> is negative, the "+" character in the
+expression must be removed (it is effectively replaced by the "-"
+character indicating the negative value of <var>b</var>).</p>
+
+<div class="example">
+<p>Examples:</p>
+<pre>:nth-child(10n-1) /* represents the 9th, 19th, 29th, etc, element */
+:nth-child(10n+9) /* Same */
+:nth-child(10n+-1) /* Syntactically invalid, and would be ignored */</pre>
+</div>
+
+
+<h5><a name=nth-last-child-pseudo>:nth-last-child() pseudo-class</a></h5>
+
+<p>The <code>:nth-last-child(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings
+<strong>after</strong> it in the document tree, for a given positive
+integer or zero value of <code>n</code>, and has a parent element. See
+<code>:nth-child()</code> pseudo-class for the syntax of its argument.
+It also accepts the '<code>even</code>' and '<code>odd</code>' values
+as arguments.
+
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-last-child(-n+2) /* represents the two last rows of an HTML table */
+
+foo:nth-last-child(odd) /* represents all odd foo elements in their parent element,
+ counting from the last one */</pre>
+</div>
+
+
+<h5><a name=nth-of-type-pseudo>:nth-of-type() pseudo-class</a></h5>
+
+<p>The <code>:nth-of-type(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings with the same
+element name <strong>before</strong> it in the document tree, for a
+given zero or positive integer value of <code>n</code>, and has a
+parent element. In other words, this matches the <var>b</var>th child
+of that type after all the children of that type have been split into
+groups of a elements each. See <code>:nth-child()</code> pseudo-class
+for the syntax of its argument. It also accepts the
+'<code>even</code>' and '<code>odd</code>' values.
+
+
+<div class="example">
+<p>CSS example:</p>
+<p>This allows an author to alternate the position of floated images:</p>
+<pre>img:nth-of-type(2n+1) { float: right; }
+img:nth-of-type(2n) { float: left; }</pre>
+</div>
+
+
+<h5><a name=nth-last-of-type-pseudo>:nth-last-of-type() pseudo-class</a></h5>
+
+<p>The <code>:nth-last-of-type(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings with the same
+element name <strong>after</strong> it in the document tree, for a
+given zero or positive integer value of <code>n</code>, and has a
+parent element. See <code>:nth-child()</code> pseudo-class for the
+syntax of its argument. It also accepts the '<code>even</code>' and '<code>odd</code>' values.
+
+
+<div class="example">
+ <p>Example:</p>
+ <p>To represent all <code>h2</code> children of an XHTML
+ <code>body</code> except the first and last, one could use the
+ following selector:</p>
+ <pre>body &gt; h2:nth-of-type(n+2):nth-last-of-type(n+2)</pre>
+ <p>In this case, one could also use <code>:not()</code>, although the
+ selector ends up being just as long:</p>
+ <pre>body &gt; h2:not(:first-of-type):not(:last-of-type)</pre>
+</div>
+
+
+<h5><a name=first-child-pseudo>:first-child pseudo-class</a></h5>
+
+<p>Same as <code>:nth-child(1)</code>. The <code>:first-child</code> pseudo-class
+represents an element that is the first child of some other element.
+
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element that is
+ the first child of a <code>div</code> element:</p>
+ <pre>div &gt; p:first-child</pre>
+ <p>This selector can represent the <code>p</code> inside the
+ <code>div</code> of the following fragment:</p>
+ <pre>&lt;p&gt; The last P before the note.&lt;/p&gt;
+&lt;div class="note"&gt;
+ &lt;p&gt; The first P inside the note.&lt;/p&gt;
+&lt;/div&gt;</pre>but cannot represent the second <code>p</code> in the following
+fragment:
+ <pre>&lt;p&gt; The last P before the note.&lt;/p&gt;
+&lt;div class="note"&gt;
+ &lt;h2&gt; Note &lt;/h2&gt;
+ &lt;p&gt; The first P inside the note.&lt;/p&gt;
+&lt;/div&gt;</pre>
+ <p>The following two selectors are usually equivalent:</p>
+ <pre>* &gt; a:first-child /* a is first child of any element */
+a:first-child /* Same (assuming a is not the root element) */</pre>
+</div>
+
+<h5><a name=last-child-pseudo>:last-child pseudo-class</a></h5>
+
+<p>Same as <code>:nth-last-child(1)</code>. The <code>:last-child</code> pseudo-class
+represents an element that is the last child of some other element.
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents a list item <code>li</code> that
+ is the last child of an ordered list <code>ol</code>.
+ <pre>ol &gt; li:last-child</pre>
+</div>
+
+<h5><a name=first-of-type-pseudo>:first-of-type pseudo-class</a></h5>
+
+<p>Same as <code>:nth-of-type(1)</code>. The <code>:first-of-type</code> pseudo-class
+represents an element that is the first sibling of its type in the list of
+children of its parent element.
+
+<div class="example">
+<p>Example:</p>
+<p>The following selector represents a definition title
+<code>dt</code> inside a definition list <code>dl</code>, this
+<code>dt</code> being the first of its type in the list of children of
+its parent element.</p>
+<pre>dl dt:first-of-type</pre>
+<p>It is a valid description for the first two <code>dt</code>
+elements in the following example but not for the third one:</p>
+<pre>&lt;dl&gt;
+ &lt;dt&gt;gigogne&lt;/dt&gt;
+ &lt;dd&gt;
+ &lt;dl&gt;
+ &lt;dt&gt;fus&eacute;e&lt;/dt&gt;
+ &lt;dd&gt;multistage rocket&lt;/dd&gt;
+ &lt;dt&gt;table&lt;/dt&gt;
+ &lt;dd&gt;nest of tables&lt;/dd&gt;
+ &lt;/dl&gt;
+ &lt;/dd&gt;
+&lt;/dl&gt;</pre>
+</div>
+
+<h5><a name=last-of-type-pseudo>:last-of-type pseudo-class</a></h5>
+
+<p>Same as <code>:nth-last-of-type(1)</code>. The
+<code>:last-of-type</code> pseudo-class represents an element that is
+the last sibling of its type in the list of children of its parent
+element.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents the last data cell
+ <code>td</code> of a table row.</p>
+ <pre>tr &gt; td:last-of-type</pre>
+</div>
+
+<h5><a name=only-child-pseudo>:only-child pseudo-class</a></h5>
+
+<p>Represents an element that has a parent element and whose parent
+element has no other element children. Same as
+<code>:first-child:last-child</code> or
+<code>:nth-child(1):nth-last-child(1)</code>, but with a lower
+specificity.</p>
+
+<h5><a name=only-of-type-pseudo>:only-of-type pseudo-class</a></h5>
+
+<p>Represents an element that has a parent element and whose parent
+element has no other element children with the same element name. Same
+as <code>:first-of-type:last-of-type</code> or
+<code>:nth-of-type(1):nth-last-of-type(1)</code>, but with a lower
+specificity.</p>
+
+
+<h5><a name=empty-pseudo></a>:empty pseudo-class</h5>
+
+<p>The <code>:empty</code> pseudo-class represents an element that has
+no children at all. In terms of the DOM, only element nodes and text
+nodes (including CDATA nodes and entity references) whose data has a
+non-zero length must be considered as affecting emptiness; comments,
+PIs, and other nodes must not affect whether an element is considered
+empty or not.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p><code>p:empty</code> is a valid representation of the following fragment:</p>
+ <pre>&lt;p&gt;&lt;/p&gt;</pre>
+ <p><code>foo:empty</code> is not a valid representation for the
+ following fragments:</p>
+ <pre>&lt;foo&gt;bar&lt;/foo&gt;</pre>
+ <pre>&lt;foo&gt;&lt;bar&gt;bla&lt;/bar&gt;&lt;/foo&gt;</pre>
+ <pre>&lt;foo&gt;this is not &lt;bar&gt;:empty&lt;/bar&gt;&lt;/foo&gt;</pre>
+</div>
+
+<h4><a name=content-selectors>6.6.6. Blank</a></h4> <!-- It's the Return of Appendix H!!! Run away! -->
+
+<p>This section intentionally left blank.</p>
+<!-- (used to be :contains()) -->
+
+<h4><a name=negation></a>6.6.7. The negation pseudo-class</h4>
+
+<p>The negation pseudo-class, <code>:not(<var>X</var>)</code>, is a
+functional notation taking a <a href="#simple-selectors-dfn">simple
+selector</a> (excluding the negation pseudo-class itself and
+pseudo-elements) as an argument. It represents an element that is not
+represented by the argument.
+
+<!-- pseudo-elements are not simple selectors, so the above paragraph
+may be a bit confusing -->
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following CSS selector matches all <code>button</code>
+ elements in an HTML document that are not disabled.</p>
+ <pre>button:not([DISABLED])</pre>
+ <p>The following selector represents all but <code>FOO</code>
+ elements.</p>
+ <pre>*:not(FOO)</pre>
+ <p>The following group of selectors represents all HTML elements
+ except links.</p>
+ <pre>html|*:not(:link):not(:visited)</pre>
+</div>
+
+<p>Default namespace declarations do not affect the argument of the
+negation pseudo-class unless the argument is a universal selector or a
+type selector.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>Assuming that the default namespace is bound to
+ "http://example.com/", the following selector represents all
+ elements that are not in that namespace:</p>
+ <pre>*|*:not(*)</pre>
+ <p>The following CSS selector matches any element being hovered,
+ regardless of its namespace. In particular, it is not limited to
+ only matching elements in the default namespace that are not being
+ hovered, and elements not in the default namespace don't match the
+ rule when they <em>are</em> being hovered.</p>
+ <pre>*|*:not(:hover)</pre>
+</div>
+
+<p class="note"><strong>Note</strong>: the :not() pseudo allows
+useless selectors to be written. For instance <code>:not(*|*)</code>,
+which represents no element at all, or <code>foo:not(bar)</code>,
+which is equivalent to <code>foo</code> but with a higher
+specificity.</p>
+
+<h3><a name=pseudo-elements>7. Pseudo-elements</a></h3>
+
+<p>Pseudo-elements create abstractions about the document tree beyond
+those specified by the document language. For instance, document
+languages do not offer mechanisms to access the first letter or first
+line of an element's content. Pseudo-elements allow designers to refer
+to this otherwise inaccessible information. Pseudo-elements may also
+provide designers a way to refer to content that does not exist in the
+source document (e.g., the <code>::before</code> and
+<code>::after</code> pseudo-elements give access to generated
+content).</p>
+
+<p>A pseudo-element is made of two colons (<code>::</code>) followed
+by the name of the pseudo-element.</p>
+
+<p>This <code>::</code> notation is introduced by the current document
+in order to establish a discrimination between pseudo-classes and
+pseudo-elements. For compatibility with existing style sheets, user
+agents must also accept the previous one-colon notation for
+pseudo-elements introduced in CSS levels 1 and 2 (namely,
+<code>:first-line</code>, <code>:first-letter</code>,
+<code>:before</code> and <code>:after</code>). This compatibility is
+not allowed for the new pseudo-elements introduced in CSS level 3.</p>
+
+<p>Only one pseudo-element may appear per selector, and if present it
+must appear after the sequence of simple selectors that represents the
+<a href="#subject">subjects</a> of the selector. <span class="note">A
+future version of this specification may allow multiple
+pesudo-elements per selector.</span></p>
+
+<h4><a name=first-line>7.1. The ::first-line pseudo-element</a></h4>
+
+<p>The <code>::first-line</code> pseudo-element describes the contents
+of the first formatted line of an element.
+
+<div class="example">
+<p>CSS example:</p>
+<pre>p::first-line { text-transform: uppercase }</pre>
+<p>The above rule means "change the letters of the first line of every
+paragraph to uppercase".</p>
+</div>
+
+<p>The selector <code>p::first-line</code> does not match any real
+HTML element. It does match a pseudo-element that conforming user
+agents will insert at the beginning of every paragraph.</p>
+
+<p>Note that the length of the first line depends on a number of
+factors, including the width of the page, the font size, etc. Thus,
+an ordinary HTML paragraph such as:</p>
+
+<pre>
+&lt;P&gt;This is a somewhat long HTML
+paragraph that will be broken into several
+lines. The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>the lines of which happen to be broken as follows:
+
+<pre>
+THIS IS A SOMEWHAT LONG HTML PARAGRAPH THAT
+will be broken into several lines. The first
+line will be identified by a fictional tag
+sequence. The other lines will be treated as
+ordinary lines in the paragraph.
+</pre>
+
+<p>This paragraph might be "rewritten" by user agents to include the
+<em>fictional tag sequence</em> for <code>::first-line</code>. This
+fictional tag sequence helps to show how properties are inherited.</p>
+
+<pre>
+&lt;P&gt;<b>&lt;P::first-line&gt;</b> This is a somewhat long HTML
+paragraph that <b>&lt;/P::first-line&gt;</b> will be broken into several
+lines. The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>If a pseudo-element breaks up a real element, the desired effect
+can often be described by a fictional tag sequence that closes and
+then re-opens the element. Thus, if we mark up the previous paragraph
+with a <code>span</code> element:</p>
+
+<pre>
+&lt;P&gt;<b>&lt;SPAN class="test"&gt;</b> This is a somewhat long HTML
+paragraph that will be broken into several
+lines.<b>&lt;/SPAN&gt;</b> The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>the user agent could simulate start and end tags for
+<code>span</code> when inserting the fictional tag sequence for
+<code>::first-line</code>.
+
+<pre>
+&lt;P&gt;&lt;P::first-line&gt;<b>&lt;SPAN class="test"&gt;</b> This is a
+somewhat long HTML
+paragraph that will <b>&lt;/SPAN&gt;</b>&lt;/P::first-line&gt;<b>&lt;SPAN class="test"&gt;</b> be
+broken into several
+lines.<b>&lt;/SPAN&gt;</b> The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>In CSS, the <code>::first-line</code> pseudo-element can only be
+attached to a block-level element, an inline-block, a table-caption,
+or a table-cell.</p>
+
+<p><a name="first-formatted-line"></a>The "first formatted line" of an
+element may occur inside a
+block-level descendant in the same flow (i.e., a block-level
+descendant that is not positioned and not a float). E.g., the first
+line of the <code>div</code> in <code>&lt;DIV>&lt;P>This
+line...&lt;/P>&lt/DIV></code> is the first line of the <code>p</code> (assuming
+that both <code>p</code> and <code>div</code> are block-level).
+
+<p>The first line of a table-cell or inline-block cannot be the first
+formatted line of an ancestor element. Thus, in <code>&lt;DIV&gt;&lt;P
+STYLE="display: inline-block">Hello&lt;BR&gt;Goodbye&lt;/P&gt;
+etcetera&lt;/DIV&gt;</code> the first formatted line of the
+<code>div</code> is not the line "Hello".
+
+<p class="note">Note that the first line of the <code>p</code> in this
+fragment: <code>&lt;p&gt&lt;br&gt;First...</code> doesn't contain any
+letters (assuming the default style for <code>br</code> in HTML
+4). The word "First" is not on the first formatted line.
+
+<p>A UA should act as if the fictional start tags of the
+<code>::first-line</code> pseudo-elements were nested just inside the
+innermost enclosing block-level element. (Since CSS1 and CSS2 were
+silent on this case, authors should not rely on this behavior.) Here
+is an example. The fictional tag sequence for</p>
+
+<pre>
+&lt;DIV>
+ &lt;P>First paragraph&lt;/P>
+ &lt;P>Second paragraph&lt;/P>
+&lt;/DIV>
+</pre>
+
+<p>is</p>
+
+<pre>
+&lt;DIV>
+ &lt;P>&lt;DIV::first-line>&lt;P::first-line>First paragraph&lt;/P::first-line>&lt;/DIV::first-line>&lt;/P>
+ &lt;P>&lt;P::first-line>Second paragraph&lt;/P::first-line>&lt;/P>
+&lt;/DIV>
+</pre>
+
+<p>The <code>::first-line</code> pseudo-element is similar to an
+inline-level element, but with certain restrictions. In CSS, the
+following properties apply to a <code>::first-line</code>
+pseudo-element: font properties, color property, background
+properties, 'word-spacing', 'letter-spacing', 'text-decoration',
+'vertical-align', 'text-transform', 'line-height'. UAs may apply other
+properties as well.</p>
+
+
+<h4><a name=first-letter>7.2. The ::first-letter pseudo-element</a></h4>
+
+<p>The <code>::first-letter</code> pseudo-element represents the first
+letter of the first line of a block, if it is not preceded by any
+other content (such as images or inline tables) on its line. The
+::first-letter pseudo-element may be used for "initial caps" and "drop
+caps", which are common typographical effects. This type of initial
+letter is similar to an inline-level element if its 'float' property
+is 'none'; otherwise, it is similar to a floated element.</p>
+
+<p>In CSS, these are the properties that apply to <code>::first-letter</code>
+pseudo-elements: font properties, 'text-decoration', 'text-transform',
+'letter-spacing', 'word-spacing' (when appropriate), 'line-height',
+'float', 'vertical-align' (only if 'float' is 'none'), margin
+properties, padding properties, border properties, color property,
+background properties. UAs may apply other properties as well. To
+allow UAs to render a typographically correct drop cap or initial cap,
+the UA may choose a line-height, width and height based on the shape
+of the letter, unlike for normal elements.</p>
+
+<div class="example">
+<p>Example:</p>
+<p>This example shows a possible rendering of an initial cap. Note
+that the 'line-height' that is inherited by the <code>::first-letter</code>
+pseudo-element is 1.1, but the UA in this example has computed the
+height of the first letter differently, so that it doesn't cause any
+unnecessary space between the first two lines. Also note that the
+fictional start tag of the first letter is inside the <span>span</span>, and thus
+the font weight of the first letter is normal, not bold as the <span>span</span>:
+<pre>
+p { line-height: 1.1 }
+p::first-letter { font-size: 3em; font-weight: normal }
+span { font-weight: bold }
+...
+&lt;p>&lt;span>Het hemelsche&lt;/span> gerecht heeft zich ten lange lesten&lt;br>
+Erbarremt over my en mijn benaeuwde vesten&lt;br>
+En arme burgery, en op mijn volcx gebed&lt;br>
+En dagelix geschrey de bange stad ontzet.
+</pre>
+<div class="figure">
+<p><img src="initial-cap.png" alt="Image illustrating the ::first-letter pseudo-element">
+</div>
+</div>
+
+<div class="example">
+<p>The following CSS will make a drop cap initial letter span about two lines:</p>
+
+<pre>
+&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"&gt;
+&lt;HTML&gt;
+ &lt;HEAD&gt;
+ &lt;TITLE&gt;Drop cap initial letter&lt;/TITLE&gt;
+ &lt;STYLE type="text/css"&gt;
+ P { font-size: 12pt; line-height: 1.2 }
+ P::first-letter { font-size: 200%; font-weight: bold; float: left }
+ SPAN { text-transform: uppercase }
+ &lt;/STYLE&gt;
+ &lt;/HEAD&gt;
+ &lt;BODY&gt;
+ &lt;P&gt;&lt;SPAN&gt;The first&lt;/SPAN&gt; few words of an article
+ in The Economist.&lt;/P&gt;
+ &lt;/BODY&gt;
+&lt;/HTML&gt;
+</pre>
+
+<p>This example might be formatted as follows:</p>
+
+<div class="figure">
+<P><img src="first-letter.gif" alt="Image illustrating the combined effect of the ::first-letter and ::first-line pseudo-elements"></p>
+</div>
+
+<p>The <span class="index-inst" title="fictional tag
+sequence">fictional tag sequence</span> is:</p>
+
+<pre>
+&lt;P&gt;
+&lt;SPAN&gt;
+&lt;P::first-letter&gt;
+T
+&lt;/P::first-letter&gt;he first
+&lt;/SPAN&gt;
+few words of an article in the Economist.
+&lt;/P&gt;
+</pre>
+
+<p>Note that the <code>::first-letter</code> pseudo-element tags abut
+the content (i.e., the initial character), while the ::first-line
+pseudo-element start tag is inserted right after the start tag of the
+block element.</p> </div>
+
+<p>In order to achieve traditional drop caps formatting, user agents
+may approximate font sizes, for example to align baselines. Also, the
+glyph outline may be taken into account when formatting.</p>
+
+<p>Punctuation (i.e, characters defined in Unicode in the "open" (Ps),
+"close" (Pe), "initial" (Pi). "final" (Pf) and "other" (Po)
+punctuation classes), that precedes or follows the first letter should
+be included. <a href="#refsUNICODE">[UNICODE]</a></p>
+
+<div class="figure">
+<P><img src="first-letter2.gif" alt="Quotes that precede the
+first letter should be included."></p>
+</div>
+
+<p>The <code>::first-letter</code> also applies if the first letter is
+in fact a digit, e.g., the "6" in "67 million dollars is a lot of
+money."</p>
+
+<p>In CSS, the <code>::first-letter</code> pseudo-element applies to
+block, list-item, table-cell, table-caption, and inline-block
+elements. <span class="note">A future version of this specification
+may allow this pesudo-element to apply to more element
+types.</span></p>
+
+<p>The <code>::first-letter</code> pseudo-element can be used with all
+such elements that contain text, or that have a descendant in the same
+flow that contains text. A UA should act as if the fictional start tag
+of the ::first-letter pseudo-element is just before the first text of
+the element, even if that first text is in a descendant.</p>
+
+<div class="example">
+<p>Example:</p>
+<p>The fictional tag sequence for this HTMLfragment:
+<pre>&lt;div>
+&lt;p>The first text.</pre>
+<p>is:
+<pre>&lt;div>
+&lt;p>&lt;div::first-letter>&lt;p::first-letter>T&lt;/...>&lt;/...>he first text.</pre>
+</div>
+
+<p>The first letter of a table-cell or inline-block cannot be the
+first letter of an ancestor element. Thus, in <code>&lt;DIV&gt;&lt;P
+STYLE="display: inline-block">Hello&lt;BR&gt;Goodbye&lt;/P&gt;
+etcetera&lt;/DIV&gt;</code> the first letter of the <code>div</code> is not the
+letter "H". In fact, the <code>div</code> doesn't have a first letter.
+
+<p>The first letter must occur on the <a
+href="#first-formatted-line">first formatted line.</a> For example, in
+this fragment: <code>&lt;p&gt&lt;br&gt;First...</code> the first line
+doesn't contain any letters and <code>::first-letter</code> doesn't
+match anything (assuming the default style for <code>br</code> in HTML
+4). In particular, it does not match the "F" of "First."
+
+<p>In CSS, if an element is a list item ('display: list-item'), the
+<code>::first-letter</code> applies to the first letter in the
+principal box after the marker. UAs may ignore
+<code>::first-letter</code> on list items with 'list-style-position:
+inside'. If an element has <code>::before</code> or
+<code>::after</code> content, the <code>::first-letter</code> applies
+to the first letter of the element <em>including</em> that content.
+
+<div class="example">
+<p>Example:</p>
+<p>After the rule 'p::before {content: "Note: "}', the selector
+'p::first-letter' matches the "N" of "Note".</p>
+</div>
+
+<p>Some languages may have specific rules about how to treat certain
+letter combinations. In Dutch, for example, if the letter combination
+"ij" appears at the beginning of a word, both letters should be
+considered within the <code>::first-letter</code> pseudo-element.
+
+<p>If the letters that would form the ::first-letter are not in the
+same element, such as "'T" in <code>&lt;p>'&lt;em>T...</code>, the UA
+may create a ::first-letter pseudo-element from one of the elements,
+both elements, or simply not create a pseudo-element.</p>
+
+<p>Similarly, if the first letter(s) of the block are not at the start
+of the line (for example due to bidirectional reordering), then the UA
+need not create the pseudo-element(s).
+
+<div class="example">
+<p>Example:</p>
+<p><a name="overlapping-example">The following example</a> illustrates
+how overlapping pseudo-elements may interact. The first letter of
+each P element will be green with a font size of '24pt'. The rest of
+the first formatted line will be 'blue' while the rest of the
+paragraph will be 'red'.</p>
+
+<pre>p { color: red; font-size: 12pt }
+p::first-letter { color: green; font-size: 200% }
+p::first-line { color: blue }
+
+&lt;P&gt;Some text that ends up on two lines&lt;/P&gt;</pre>
+
+<p>Assuming that a line break will occur before the word "ends", the
+<span class="index-inst" title="fictional tag sequence">fictional tag
+sequence</span> for this fragment might be:</p>
+
+<pre>&lt;P&gt;
+&lt;P::first-line&gt;
+&lt;P::first-letter&gt;
+S
+&lt;/P::first-letter&gt;ome text that
+&lt;/P::first-line&gt;
+ends up on two lines
+&lt;/P&gt;</pre>
+
+<p>Note that the <code>::first-letter</code> element is inside the <code>::first-line</code>
+element. Properties set on <code>::first-line</code> are inherited by
+<code>::first-letter</code>, but are overridden if the same property is set on
+<code>::first-letter</code>.</p>
+</div>
+
+
+<h4><a name=UIfragments>7.3.</a> <a name=selection>The ::selection pseudo-element</a></h4>
+
+<p>The <code>::selection</code> pseudo-element applies to the portion
+of a document that has been highlighted by the user. This also
+applies, for example, to selected text within an editable text
+field. This pseudo-element should not be confused with the <code><a
+href="#checked">:checked</a></code> pseudo-class (which used to be
+named <code>:selected</code>)
+
+<p>Although the <code>::selection</code> pseudo-element is dynamic in
+nature, and is altered by user action, it is reasonable to expect that
+when a UA re-renders to a static medium (such as a printed page, see
+<a href="#refsCSS21">[CSS21]</a>) which was originally rendered to a
+dynamic medium (like screen), the UA may wish to transfer the current
+<code>::selection</code> state to that other medium, and have all the
+appropriate formatting and rendering take effect as well. This is not
+required &mdash; UAs may omit the <code>::selection</code>
+pseudo-element for static media.
+
+<p>These are the CSS properties that apply to <code>::selection</code>
+pseudo-elements: color, background, cursor (optional), outline
+(optional). The computed value of the 'background-image' property on
+<code>::selection</code> may be ignored.
+
+
+<h4><a name=gen-content>7.4. The ::before and ::after pseudo-elements</a></h4>
+
+<p>The <code>::before</code> and <code>::after</code> pseudo-elements
+can be used to describe generated content before or after an element's
+content. They are explained in CSS 2.1 <a
+href="#refsCSS21">[CSS21]</a>.</p>
+
+<p>When the <code>::first-letter</code> and <code>::first-line</code>
+pseudo-elements are combined with <code>::before</code> and
+<code>::after</code>, they apply to the first letter or line of the
+element including the inserted text.</p>
+
+<h2><a name=combinators>8. Combinators</a></h2>
+
+<h3><a name=descendant-combinators>8.1. Descendant combinator</a></h3>
+
+<p>At times, authors may want selectors to describe an element that is
+the descendant of another element in the document tree (e.g., "an
+<code>EM</code> element that is contained within an <code>H1</code>
+element"). Descendant combinators express such a relationship. A
+descendant combinator is <a href="#whitespace">white space</a> that
+separates two sequences of simple selectors. A selector of the form
+"<code>A B</code>" represents an element <code>B</code> that is an
+arbitrary descendant of some ancestor element <code>A</code>.
+
+<div class="example">
+ <p>Examples:</p>
+ <p>For example, consider the following selector:</p>
+ <pre>h1 em</pre>
+ <p>It represents an <code>em</code> element being the descendant of
+ an <code>h1</code> element. It is a correct and valid, but partial,
+ description of the following fragment:</p>
+ <pre>&lt;h1&gt;This &lt;span class="myclass"&gt;headline
+is &lt;em&gt;very&lt;/em&gt; important&lt;/span&gt;&lt;/h1&gt;</pre>
+ <p>The following selector:</p>
+ <pre>div * p</pre>
+ <p>represents a <code>p</code> element that is a grandchild or later
+ descendant of a <code>div</code> element. Note the whitespace on
+ either side of the "*" is not part of the universal selector; the
+ whitespace is a combinator indicating that the DIV must be the
+ ancestor of some element, and that that element must be an ancestor
+ of the P.</p>
+ <p>The following selector, which combines descendant combinators and
+ <a href="#attribute-selectors">attribute selectors</a>, represents an
+ element that (1) has the <code>href</code> attribute set and (2) is
+ inside a <code>p</code> that is itself inside a <code>div</code>:</p>
+ <pre>div p *[href]</pre>
+</div>
+
+<h3><a name=child-combinators>8.2. Child combinators</a></h3>
+
+<p>A <dfn>child combinator</dfn> describes a childhood relationship
+between two elements. A child combinator is made of the
+&quot;greater-than sign&quot; (<code>&gt;</code>) character and
+separates two sequences of simple selectors.
+
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element that is
+ child of <code>body</code>:</p>
+ <pre>body &gt; p</pre>
+ <p>The following example combines descendant combinators and child
+ combinators.</p>
+ <pre>div ol&gt;li p</pre><!-- LEAVE THOSE SPACES OUT! see below -->
+ <p>It represents a <code>p</code> element that is a descendant of an
+ <code>li</code> element; the <code>li</code> element must be the
+ child of an <code>ol</code> element; the <code>ol</code> element must
+ be a descendant of a <code>div</code>. Notice that the optional white
+ space around the "&gt;" combinator has been left out.</p>
+</div>
+
+<p>For information on selecting the first child of an element, please
+see the section on the <code><a
+href="#structural-pseudos">:first-child</a></code> pseudo-class
+above.</p>
+
+<h3><a name=sibling-combinators>8.3. Sibling combinators</a></h3>
+
+<p>There are two different sibling combinators: the adjacent sibling
+combinator and the general sibling combinator. In both cases,
+non-element nodes (e.g. text between elements) are ignored when
+considering adjacency of elements.</p>
+
+<h4><a name=adjacent-sibling-combinators>8.3.1. Adjacent sibling combinator</a></h4>
+
+<p>The adjacent sibling combinator is made of the &quot;plus
+sign&quot; (U+002B, <code>+</code>) character that separates two
+sequences of simple selectors. The elements represented by the two
+sequences share the same parent in the document tree and the element
+represented by the first sequence immediately precedes the element
+represented by the second one.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element
+ immediately following a <code>math</code> element:</p>
+ <pre>math + p</pre>
+ <p>The following selector is conceptually similar to the one in the
+ previous example, except that it adds an attribute selector &mdash; it
+ adds a constraint to the <code>h1</code> element, that it must have
+ <code>class="opener"</code>:</p>
+ <pre>h1.opener + h2</pre>
+</div>
+
+
+<h4><a name=general-sibling-combinators>8.3.2. General sibling combinator</a></h4>
+
+<p>The general sibling combinator is made of the &quot;tilde&quot;
+(U+007E, <code>~</code>) character that separates two sequences of
+simple selectors. The elements represented by the two sequences share
+the same parent in the document tree and the element represented by
+the first sequence precedes (not necessarily immediately) the element
+represented by the second one.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <pre>h1 ~ pre</pre>
+ <p>represents a <code>pre</code> element following an <code>h1</code>. It
+ is a correct and valid, but partial, description of:</p>
+ <pre>&lt;h1&gt;Definition of the function a&lt;/h1&gt;
+&lt;p&gt;Function a(x) has to be applied to all figures in the table.&lt;/p&gt;
+&lt;pre&gt;function a(x) = 12x/13.5&lt;/pre&gt;</pre>
+</div>
+
+<h2><a name=specificity>9. Calculating a selector's specificity</a></h2>
+
+<p>A selector's specificity is calculated as follows:</p>
+
+<ul>
+ <li>count the number of ID selectors in the selector (= a)</li>
+ <li>count the number of class selectors, attributes selectors, and pseudo-classes in the selector (= b)</li>
+ <li>count the number of element names in the selector (= c)</li>
+ <li>ignore pseudo-elements</li>
+</ul>
+
+<p>Selectors inside <a href="#negation">the negation pseudo-class</a>
+are counted like any other, but the negation itself does not count as
+a pseudo-class.</p>
+
+<p>Concatenating the three numbers a-b-c (in a number system with a
+large base) gives the specificity.</p>
+
+<div class="example">
+<p>Examples:</p>
+<pre>* /* a=0 b=0 c=0 -&gt; specificity = 0 */
+LI /* a=0 b=0 c=1 -&gt; specificity = 1 */
+UL LI /* a=0 b=0 c=2 -&gt; specificity = 2 */
+UL OL+LI /* a=0 b=0 c=3 -&gt; specificity = 3 */
+H1 + *[REL=up] /* a=0 b=1 c=1 -&gt; specificity = 11 */
+UL OL LI.red /* a=0 b=1 c=3 -&gt; specificity = 13 */
+LI.red.level /* a=0 b=2 c=1 -&gt; specificity = 21 */
+#x34y /* a=1 b=0 c=0 -&gt; specificity = 100 */
+#s12:not(FOO) /* a=1 b=0 c=1 -&gt; specificity = 101 */
+</pre>
+</div>
+
+<p class="note"><strong>Note:</strong> the specificity of the styles
+specified in an HTML <code>style</code> attribute is described in CSS
+2.1. <a href="#refsCSS21">[CSS21]</a>.</p>
+
+<h2><a name=w3cselgrammar>10. The grammar of Selectors</a></h2>
+
+<h3><a name=grammar>10.1. Grammar</a></h3>
+
+<p>The grammar below defines the syntax of Selectors. It is globally
+LL(1) and can be locally LL(2) (but note that most UA's should not use
+it directly, since it doesn't express the parsing conventions). The
+format of the productions is optimized for human consumption and some
+shorthand notations beyond Yacc (see <a href="#refsYACC">[YACC]</a>)
+are used:</p>
+
+<ul>
+ <li><b>*</b>: 0 or more
+ <li><b>+</b>: 1 or more
+ <li><b>?</b>: 0 or 1
+ <li><b>|</b>: separates alternatives
+ <li><b>[ ]</b>: grouping </li>
+</ul>
+
+<p>The productions are:</p>
+
+<pre>selectors_group
+ : selector [ COMMA S* selector ]*
+ ;
+
+selector
+ : simple_selector_sequence [ combinator simple_selector_sequence ]*
+ ;
+
+combinator
+ /* combinators can be surrounded by white space */
+ : PLUS S* | GREATER S* | TILDE S* | S+
+ ;
+
+simple_selector_sequence
+ : [ type_selector | universal ]
+ [ HASH | class | attrib | pseudo | negation ]*
+ | [ HASH | class | attrib | pseudo | negation ]+
+ ;
+
+type_selector
+ : [ namespace_prefix ]? element_name
+ ;
+
+namespace_prefix
+ : [ IDENT | '*' ]? '|'
+ ;
+
+element_name
+ : IDENT
+ ;
+
+universal
+ : [ namespace_prefix ]? '*'
+ ;
+
+class
+ : '.' IDENT
+ ;
+
+attrib
+ : '[' S* [ namespace_prefix ]? IDENT S*
+ [ [ PREFIXMATCH |
+ SUFFIXMATCH |
+ SUBSTRINGMATCH |
+ '=' |
+ INCLUDES |
+ DASHMATCH ] S* [ IDENT | STRING ] S*
+ ]? ']'
+ ;
+
+pseudo
+ /* '::' starts a pseudo-element, ':' a pseudo-class */
+ /* Exceptions: :first-line, :first-letter, :before and :after. */
+ /* Note that pseudo-elements are restricted to one per selector and */
+ /* occur only in the last simple_selector_sequence. */
+ : ':' ':'? [ IDENT | functional_pseudo ]
+ ;
+
+functional_pseudo
+ : FUNCTION S* expression ')'
+ ;
+
+expression
+ /* In CSS3, the expressions are identifiers, strings, */
+ /* or of the form "an+b" */
+ : [ [ PLUS | '-' | DIMENSION | NUMBER | STRING | IDENT ] S* ]+
+ ;
+
+negation
+ : NOT S* negation_arg S* ')'
+ ;
+
+negation_arg
+ : type_selector | universal | HASH | class | attrib | pseudo
+ ;</pre>
+
+
+<h3><a name=lex>10.2. Lexical scanner</a></h3>
+
+<p>The following is the <a name=x3>tokenizer</a>, written in Flex (see
+<a href="#refsFLEX">[FLEX]</a>) notation. The tokenizer is
+case-insensitive.</p>
+
+<p>The two occurrences of "\377" represent the highest character
+number that current versions of Flex can deal with (decimal 255). They
+should be read as "\4177777" (decimal 1114111), which is the highest
+possible code point in Unicode/ISO-10646. <a
+href="#refsUNICODE">[UNICODE]</a></p>
+
+<pre>%option case-insensitive
+
+ident [-]?{nmstart}{nmchar}*
+name {nmchar}+
+nmstart [_a-z]|{nonascii}|{escape}
+nonascii [^\0-\177]
+unicode \\[0-9a-f]{1,6}(\r\n|[ \n\r\t\f])?
+escape {unicode}|\\[^\n\r\f0-9a-f]
+nmchar [_a-z0-9-]|{nonascii}|{escape}
+num [0-9]+|[0-9]*\.[0-9]+
+string {string1}|{string2}
+string1 \"([^\n\r\f\\"]|\\{nl}|{nonascii}|{escape})*\"
+string2 \'([^\n\r\f\\']|\\{nl}|{nonascii}|{escape})*\'
+invalid {invalid1}|{invalid2}
+invalid1 \"([^\n\r\f\\"]|\\{nl}|{nonascii}|{escape})*
+invalid2 \'([^\n\r\f\\']|\\{nl}|{nonascii}|{escape})*
+nl \n|\r\n|\r|\f
+w [ \t\r\n\f]*
+
+%%
+
+[ \t\r\n\f]+ return S;
+
+"~=" return INCLUDES;
+"|=" return DASHMATCH;
+"^=" return PREFIXMATCH;
+"$=" return SUFFIXMATCH;
+"*=" return SUBSTRINGMATCH;
+{ident} return IDENT;
+{string} return STRING;
+{ident}"(" return FUNCTION;
+{num} return NUMBER;
+"#"{name} return HASH;
+{w}"+" return PLUS;
+{w}"&gt;" return GREATER;
+{w}"," return COMMA;
+{w}"~" return TILDE;
+":not(" return NOT;
+@{ident} return ATKEYWORD;
+{invalid} return INVALID;
+{num}% return PERCENTAGE;
+{num}{ident} return DIMENSION;
+"&lt;!--" return CDO;
+"--&gt;" return CDC;
+
+"url("{w}{string}{w}")" return URI;
+"url("{w}([!#$%&*-~]|{nonascii}|{escape})*{w}")" return URI;
+U\+[0-9a-f?]{1,6}(-[0-9a-f]{1,6})? return UNICODE_RANGE;
+
+\/\*[^*]*\*+([^/*][^*]*\*+)*\/ /* ignore comments */
+
+. return *yytext;</pre>
+
+
+
+<h2><a name=downlevel>11. Namespaces and down-level clients</a></h2>
+
+<p>An important issue is the interaction of CSS selectors with XML
+documents in web clients that were produced prior to this
+document. Unfortunately, due to the fact that namespaces must be
+matched based on the URI which identifies the namespace, not the
+namespace prefix, some mechanism is required to identify namespaces in
+CSS by their URI as well. Without such a mechanism, it is impossible
+to construct a CSS style sheet which will properly match selectors in
+all cases against a random set of XML documents. However, given
+complete knowledge of the XML document to which a style sheet is to be
+applied, and a limited use of namespaces within the XML document, it
+is possible to construct a style sheet in which selectors would match
+elements and attributes correctly.</p>
+
+<p>It should be noted that a down-level CSS client will (if it
+properly conforms to CSS forward compatible parsing rules) ignore all
+<code>@namespace</code> at-rules, as well as all style rules that make
+use of namespace qualified element type or attribute selectors. The
+syntax of delimiting namespace prefixes in CSS was deliberately chosen
+so that down-level CSS clients would ignore the style rules rather
+than possibly match them incorrectly.</p>
+
+<p>The use of default namespaces in CSS makes it possible to write
+element type selectors that will function in both namespace aware CSS
+clients as well as down-level clients. It should be noted that
+down-level clients may incorrectly match selectors against XML
+elements in other namespaces.</p>
+
+<p>The following are scenarios and examples in which it is possible to
+construct style sheets which would function properly in web clients
+that do not implement this proposal.</p>
+
+<ol>
+ <li>
+
+ <p>The XML document does not use namespaces.</p>
+
+ <ul>
+
+ <li>In this case, it is obviously not necessary to declare or use
+ namespaces in the style sheet. Standard CSS element type and
+ attribute selectors will function adequately in a down-level
+ client.</li>
+
+ <li>In a CSS namespace aware client, the default behavior of
+ element selectors matching without regard to namespace will
+ function properly against all elements, since no namespaces are
+ present. However, the use of specific element type selectors that
+ match only elements that have no namespace ("<code>|name</code>")
+ will guarantee that selectors will match only XML elements that do
+ not have a declared namespace. </li>
+
+ </ul>
+
+ </li>
+
+ <li>
+
+ <p>The XML document defines a single, default namespace used
+ throughout the document. No namespace prefixes are used in element
+ names.</p>
+
+ <ul>
+
+ <li>In this case, a down-level client will function as if
+ namespaces were not used in the XML document at all. Standard CSS
+ element type and attribute selectors will match against all
+ elements. </li>
+
+ </ul>
+
+ </li>
+
+ <li>
+
+ <p>The XML document does <b>not</b> use a default namespace, all
+ namespace prefixes used are known to the style sheet author, and
+ there is a direct mapping between namespace prefixes and namespace
+ URIs. (A given prefix may only be mapped to one namespace URI
+ throughout the XML document; there may be multiple prefixes mapped
+ to the same URI).</p>
+
+ <ul>
+
+ <li>In this case, the down-level client will view and match
+ element type and attribute selectors based on their fully
+ qualified name, not the local part as outlined in the <a
+ href="#typenmsp">Type selectors and Namespaces</a> section. CSS
+ selectors may be declared using an escaped colon "<code>\:</code>"
+ to describe the fully qualified names, e.g.
+ "<code>html\:h1</code>" will match
+ <code>&lt;html:h1&gt;</code>. Selectors using the qualified name
+ will only match XML elements that use the same prefix. Other
+ namespace prefixes used in the XML that are mapped to the same URI
+ will not match as expected unless additional CSS style rules are
+ declared for them.</li>
+
+ <li>Note that selectors declared in this fashion will
+ <em>only</em> match in down-level clients. A CSS namespace aware
+ client will match element type and attribute selectors based on
+ the name's local part. Selectors declared with the fully
+ qualified name will not match (unless there is no namespace prefix
+ in the fully qualified name).</li>
+
+ </ul>
+
+ </li>
+
+ </ol>
+
+<p>In other scenarios: when the namespace prefixes used in the XML are
+not known in advance by the style sheet author; or a combination of
+elements with no namespace are used in conjunction with elements using
+a default namespace; or the same namespace prefix is mapped to
+<em>different</em> namespace URIs within the same document, or in
+different documents; it is impossible to construct a CSS style sheet
+that will function properly against all elements in those documents,
+unless, the style sheet is written using a namespace URI syntax (as
+outlined in this document or similar) and the document is processed by
+a CSS and XML namespace aware client.</p>
+
+<h2><a name=profiling>12. Profiles</a></h2>
+
+<p>Each specification using Selectors must define the subset of W3C
+Selectors it allows and excludes, and describe the local meaning of
+all the components of that subset.</p>
+
+<p>Non normative examples:
+
+<div class="profile">
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>CSS level 1</td></tr>
+ <tr>
+ <th>Accepts</th>
+ <td>type selectors<br>class selectors<br>ID selectors<br>:link,
+ :visited and :active pseudo-classes<br>descendant combinator
+ <br>::first-line and ::first-letter pseudo-elements</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>
+
+<p>universal selector<br>attribute selectors<br>:hover and :focus
+ pseudo-classes<br>:target pseudo-class<br>:lang() pseudo-class<br>all UI
+ element states pseudo-classes<br>all structural
+ pseudo-classes<br>negation pseudo-class<br>all
+ UI element fragments pseudo-elements<br>::before and ::after
+ pseudo-elements<br>child combinators<br>sibling combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>only one class selector allowed per sequence of simple
+ selectors</td></tr></tbody></table><br><br>
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>CSS level 2</td></tr>
+ <tr>
+ <th>Accepts</th>
+ <td>type selectors<br>universal selector<br>attribute presence and
+ values selectors<br>class selectors<br>ID selectors<br>:link, :visited,
+ :active, :hover, :focus, :lang() and :first-child pseudo-classes
+ <br>descendant combinator<br>child combinator<br>adjacent sibling
+ combinator<br>::first-line and ::first-letter pseudo-elements<br>::before
+ and ::after pseudo-elements</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>
+
+<p>content selectors<br>substring matching attribute
+ selectors<br>:target pseudo-classes<br>all UI element
+ states pseudo-classes<br>all structural pseudo-classes other
+ than :first-child<br>negation pseudo-class<br>all UI element
+ fragments pseudo-elements<br>general sibling combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>more than one class selector per sequence of simple selectors (CSS1
+ constraint) allowed</td></tr></tbody></table>
+
+<p>In CSS, selectors express pattern matching rules that determine which style
+rules apply to elements in the document tree.
+
+<p>The following selector (CSS level 2) will <b>match</b> all anchors <code>a</code>
+with attribute <code>name</code> set inside a section 1 header <code>h1</code>:
+<pre>h1 a[name]</pre>
+
+<p>All CSS declarations attached to such a selector are applied to elements
+matching it. </div>
+
+<div class="profile">
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>STTS 3</td>
+ </tr>
+ <tr>
+ <th>Accepts</th>
+ <td>
+
+<p>type selectors<br>universal selectors<br>attribute selectors<br>class
+ selectors<br>ID selectors<br>all structural pseudo-classes<br>
+ all combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>non-accepted pseudo-classes<br>pseudo-elements<br></td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>some selectors and combinators are not allowed in fragment
+ descriptions on the right side of STTS declarations.</td></tr></tbody></table>
+<form>
+<input type="text" name="test10"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+</form>
+
+<p>Selectors can be used in STTS 3 in two different
+ manners:
+<ol>
+ <li>a selection mechanism equivalent to CSS selection mechanism: declarations
+ attached to a given selector are applied to elements matching that selector,
+ <li>fragment descriptions that appear on the right side of declarations.
+</li></ol></div>
+
+<h2><a name=Conformance></a>13. Conformance and requirements</h2>
+
+<p>This section defines conformance with the present specification only.
+
+<p>The inability of a user agent to implement part of this specification due to
+the limitations of a particular device (e.g., non interactive user agents will
+probably not implement dynamic pseudo-classes because they make no sense without
+interactivity) does not imply non-conformance.
+
+<p>All specifications reusing Selectors must contain a <a
+href="#profiling">Profile</a> listing the
+subset of Selectors it accepts or excludes, and describing the constraints
+it adds to the current specification.
+
+<p>Invalidity is caused by a parsing error, e.g. an unrecognized token or a token
+which is not allowed at the current parsing point.
+
+<p>User agents must observe the rules for handling parsing errors:
+<ul>
+ <li>a simple selector containing an undeclared namespace prefix is invalid</li>
+ <li>a selector containing an invalid simple selector, an invalid combinator
+ or an invalid token is invalid. </li>
+ <li>a group of selectors containing an invalid selector is invalid.</li>
+</ul>
+
+<p class="foo test10 bar">Specifications reusing Selectors must define how to handle parsing
+errors. (In the case of CSS, the entire rule in which the selector is
+used is dropped.)</p>
+
+<!-- Apparently all these references are out of date:
+<p>Implementations of this specification must behave as
+"recipients of text data" as defined by <a href="#refsCWWW">[CWWW]</a>
+when parsing selectors and attempting matches. (In particular,
+implementations must assume the data is normalized and must not
+normalize it.) Normative rules for matching strings are defined in
+<a href="#refsCWWW">[CWWW]</a> and <a
+href="#refsUNICODE">[UNICODE]</a> and apply to implementations of this
+specification.</p>-->
+
+<h2><a name=Tests></a>14. Tests</h2>
+
+<p>This specification has <a
+href="http://www.w3.org/Style/CSS/Test/CSS3/Selectors/current/">a test
+suite</a> allowing user agents to verify their basic conformance to
+the specification. This test suite does not pretend to be exhaustive
+and does not cover all possible combined cases of Selectors.</p>
+
+<h2><a name=ACKS></a>15. Acknowledgements</h2>
+
+<p>The CSS working group would like to thank everyone who has sent
+comments on this specification over the years.</p>
+
+<p>The working group would like to extend special thanks to Donna
+McManus, Justin Baker, Joel Sklar, and Molly Ives Brower who perfermed
+the final editorial review.</p>
+
+<h2><a name=references>16. References</a></h2>
+
+<dl class="refs">
+
+ <dt>[CSS1]
+ <dd><a name=refsCSS1></a> Bert Bos, H&aring;kon Wium Lie; "<cite>Cascading Style Sheets, level 1</cite>", W3C Recommendation, 17 Dec 1996, revised 11 Jan 1999
+ <dd>(<code><a href="http://www.w3.org/TR/REC-CSS1">http://www.w3.org/TR/REC-CSS1</a></code>)
+
+ <dt>[CSS21]
+ <dd><a name=refsCSS21></a> Bert Bos, Tantek &Ccedil;elik, Ian Hickson, H&aring;kon Wium Lie, editors; "<cite>Cascading Style Sheets, level 2 revision 1</cite>", W3C Working Draft, 13 June 2005
+ <dd>(<code><a href="http://www.w3.org/TR/CSS21">http://www.w3.org/TR/CSS21</a></code>)
+
+ <dt>[CWWW]
+ <dd><a name=refsCWWW></a> Martin J. D&uuml;rst, Fran&ccedil;ois Yergeau, Misha Wolf, Asmus Freytag, Tex Texin, editors; "<cite>Character Model for the World Wide Web</cite>", W3C Recommendation, 15 February 2005
+ <dd>(<code><a href="http://www.w3.org/TR/charmod/">http://www.w3.org/TR/charmod/</a></code>)
+
+ <dt>[FLEX]
+ <dd><a name="refsFLEX"></a> "<cite>Flex: The Lexical Scanner Generator</cite>", Version 2.3.7, ISBN 1882114213
+
+ <dt>[HTML4]
+ <dd><a name="refsHTML4"></a> Dave Ragget, Arnaud Le Hors, Ian Jacobs, editors; "<cite>HTML 4.01 Specification</cite>", W3C Recommendation, 24 December 1999
+ <dd>(<a href="http://www.w3.org/TR/html4/"><code>http://www.w3.org/TR/html4/</code></a>)
+
+ <dt>[MATH]
+ <dd><a name="refsMATH"></a> Patrick Ion, Robert Miner, editors; "<cite>Mathematical Markup Language (MathML) 1.01</cite>", W3C Recommendation, revision of 7 July 1999
+ <dd>(<code><a href="http://www.w3.org/TR/REC-MathML/">http://www.w3.org/TR/REC-MathML/</a></code>)
+
+ <dt>[RFC3066]
+ <dd><a name="refsRFC3066"></a> H. Alvestrand; "<cite>Tags for the Identification of Languages</cite>", Request for Comments 3066, January 2001
+ <dd>(<a href="http://www.ietf.org/rfc/rfc3066.txt"><code>http://www.ietf.org/rfc/rfc3066.txt</code></a>)
+
+ <dt>[STTS]
+ <dd><a name=refsSTTS></a> Daniel Glazman; "<cite>Simple Tree Transformation Sheets 3</cite>", Electricit&eacute; de France, submission to the W3C, 11 November 1998
+ <dd>(<code><a href="http://www.w3.org/TR/NOTE-STTS3">http://www.w3.org/TR/NOTE-STTS3</a></code>)
+
+ <dt>[SVG]
+ <dd><a name="refsSVG"></a> Jon Ferraiolo, &#34276;&#27810; &#28147;, Dean Jackson, editors; "<cite>Scalable Vector Graphics (SVG) 1.1 Specification</cite>", W3C Recommendation, 14 January 2003
+ <dd>(<code><a href="http://www.w3.org/TR/SVG/">http://www.w3.org/TR/SVG/</a></code>)
+
+ <dt>[UNICODE]</dt>
+ <dd><a name="refsUNICODE"></a> <cite><a
+ href="http://www.unicode.org/versions/Unicode4.1.0/">The Unicode Standard, Version 4.1</a></cite>, The Unicode Consortium. Boston, MA, Addison-Wesley, March 2005. ISBN 0-321-18578-1, as amended by <a href="http://www.unicode.org/versions/Unicode4.0.1/">Unicode 4.0.1</a> and <a href="http://www.unicode.org/versions/Unicode4.1.0/">Unicode 4.1.0</a>.
+ <dd>(<code><a href="http://www.unicode.org/versions/">http://www.unicode.org/versions/</a></code>)</dd>
+
+ <dt>[XML10]
+ <dd><a name="refsXML10"></a> Tim Bray, Jean Paoli, C. M. Sperberg-McQueen, Eve Maler, Fran&ccedil;ois Yergeau, editors; "<cite>Extensible Markup Language (XML) 1.0 (Third Edition)</cite>", W3C Recommendation, 4 February 2004
+ <dd>(<a href="http://www.w3.org/TR/REC-xml/"><code>http://www.w3.org/TR/REC-xml/</code></a>)
+
+ <dt>[XMLNAMES]
+ <dd><a name="refsXMLNAMES"></a> Tim Bray, Dave Hollander, Andrew Layman, editors; "<cite>Namespaces in XML</cite>", W3C Recommendation, 14 January 1999
+ <dd>(<a href="http://www.w3.org/TR/REC-xml-names/"><code>http://www.w3.org/TR/REC-xml-names/</code></a>)
+
+ <dt>[YACC]
+ <dd><a name="refsYACC"></a> S. C. Johnson; "<cite>YACC &mdash; Yet another compiler compiler</cite>", Technical Report, Murray Hill, 1975
+
+</dl>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/dom-traverse.html b/testing/talos/talos/tests/dromaeo/tests/dom-traverse.html
new file mode 100644
index 0000000000..b3cb66f738
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/dom-traverse.html
@@ -0,0 +1,2972 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script>
+window.onload = function(){
+startTest("dom-traverse", '1f7ac849');
+
+// Try to force real results
+var ret, tmp;
+var num = 40;
+var html = document.body.innerHTML;
+
+ prep(function(){
+ html = html.replace(/id="test.*?"/g, 'id="test' + num + '"');
+ html = html.replace(/name="test.*?"/g, 'name="test' + num + '"');
+ html = html.replace(/class="foo.*?"/g, 'class="foo test' + num + ' bar"');
+ var div = document.createElement("div");
+ div.innerHTML = html;
+ document.body.appendChild( div );
+ });
+
+ test( "firstChild", function(){
+ var nodes = document.body.childNodes, nl = nodes.length;
+
+ for ( var i = 0; i < num; i++ ) {
+ for ( var j = 0; j < nl; j++ ) {
+ var cur = nodes[j];
+ while ( cur )
+ cur = cur.firstChild;
+ ret = cur;
+ }
+ }
+ });
+
+ test( "lastChild", function(){
+ var nodes = document.body.childNodes, nl = nodes.length;
+
+ for ( var i = 0; i < num; i++ ) {
+ for ( var j = 0; j < nl; j++ ) {
+ var cur = nodes[j];
+ while ( cur )
+ cur = cur.lastChild;
+ ret = cur;
+ }
+ }
+ });
+
+ test( "nextSibling", function(){
+ for ( var i = 0; i < num * 2; i++ ) {
+ var cur = document.body.firstChild;
+ while ( cur )
+ cur = cur.nextSibling;
+ ret = cur;
+ }
+ });
+
+ test( "previousSibling", function(){
+ for ( var i = 0; i < num * 2; i++ ) {
+ var cur = document.body.lastChild;
+ while ( cur )
+ cur = cur.previousSibling;
+ ret = cur;
+ }
+ });
+
+ test( "childNodes", function(){
+ for ( var i = 0; i < num; i++ ) {
+ var nodes = document.body.childNodes;
+ for ( var j = 0; j < nodes.length; j++ )
+ ret = nodes[j];
+ }
+ });
+
+endTest();
+};
+</script>
+</head>
+<body>
+ <div class="head">
+ <p><a href="http://www.w3.org/"><img height=48 alt=W3C src="w3c_home.png" width=72></a>
+
+ <h1 id="title">Selectors</h1>
+
+ <h2>W3C Working Draft 15 December 2005</h2>
+
+ <dl>
+
+ <dt>This version:
+
+ <dd><a href="http://www.w3.org/TR/2005/WD-css3-selectors-20051215">
+ http://www.w3.org/TR/2005/WD-css3-selectors-20051215</a>
+
+ <dt>Latest version:
+
+ <dd><a href="http://www.w3.org/TR/css3-selectors">
+ http://www.w3.org/TR/css3-selectors</a>
+
+ <dt>Previous version:
+
+ <dd><a href="http://www.w3.org/TR/2001/CR-css3-selectors-20011113">
+ http://www.w3.org/TR/2001/CR-css3-selectors-20011113</a>
+
+ <dt><a name=editors-list></a>Editors:
+
+ <dd class="vcard"><span class="fn">Daniel Glazman</span> (Invited Expert)</dd>
+
+ <dd class="vcard"><a lang="tr" class="url fn" href="http://www.tantek.com/">Tantek &Ccedil;elik</a> (Invited Expert)
+
+ <dd class="vcard"><a href="mailto:ian@hixie.ch" class="url fn">Ian Hickson</a> (<span
+ class="company"><a href="http://www.google.com/">Google</a></span>)
+
+ <dd class="vcard"><span class="fn">Peter Linss</span> (former editor, <span class="company"><a
+ href="http://www.netscape.com/">Netscape/AOL</a></span>)
+
+ <dd class="vcard"><span class="fn">John Williams</span> (former editor, <span class="company"><a
+ href="http://www.quark.com/">Quark, Inc.</a></span>)
+
+ </dl>
+
+ <p class="copyright"><a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright">
+ Copyright</a> &copy; 2005 <a href="http://www.w3.org/"><abbr
+ title="World Wide Web Consortium">W3C</abbr></a><sup>&reg;</sup>
+ (<a href="http://www.csail.mit.edu/"><abbr title="Massachusetts
+ Institute of Technology">MIT</abbr></a>, <a
+ href="http://www.ercim.org/"><acronym title="European Research
+ Consortium for Informatics and Mathematics">ERCIM</acronym></a>, <a
+ href="http://www.keio.ac.jp/">Keio</a>), All Rights Reserved. W3C
+ <a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">liability</a>,
+ <a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">trademark</a>,
+ <a
+ href="http://www.w3.org/Consortium/Legal/copyright-documents">document
+ use</a> rules apply.
+
+ <hr title="Separator for header">
+
+ </div>
+
+ <h2><a name=abstract></a>Abstract</h2>
+
+ <p><em>Selectors</em> are patterns that match against elements in a
+ tree. Selectors have been optimized for use with HTML and XML, and
+ are designed to be usable in performance-critical code.</p>
+
+ <p><acronym title="Cascading Style Sheets">CSS</acronym> (Cascading
+ Style Sheets) is a language for describing the rendering of <acronym
+ title="Hypertext Markup Language">HTML</acronym> and <acronym
+ title="Extensible Markup Language">XML</acronym> documents on
+ screen, on paper, in speech, etc. CSS uses Selectors for binding
+ style properties to elements in the document. This document
+ describes extensions to the selectors defined in CSS level 2. These
+ extended selectors will be used by CSS level 3.
+
+ <p>Selectors define the following function:</p>
+
+ <pre>expression &#x2217; element &rarr; boolean</pre>
+
+ <p>That is, given an element and a selector, this specification
+ defines whether that element matches the selector.</p>
+
+ <p>These expressions can also be used, for instance, to select a set
+ of elements, or a single element from a set of elements, by
+ evaluating the expression across all the elements in a
+ subtree. <acronym title="Simple Tree Transformation
+ Sheets">STTS</acronym> (Simple Tree Transformation Sheets), a
+ language for transforming XML trees, uses this mechanism. <a href="#refsSTTS">[STTS]</a></p>
+
+ <h2><a name=status></a>Status of this document</h2>
+
+ <p><em>This section describes the status of this document at the
+ time of its publication. Other documents may supersede this
+ document. A list of current W3C publications and the latest revision
+ of this technical report can be found in the <a
+ href="http://www.w3.org/TR/">W3C technical reports index at
+ http://www.w3.org/TR/.</a></em></p>
+
+ <p>This document describes the selectors that already exist in <a
+ href="#refsCSS1"><abbr title="CSS level 1">CSS1</abbr></a> and <a
+ href="#refsCSS21"><abbr title="CSS level 2">CSS2</abbr></a>, and
+ also proposes new selectors for <abbr title="CSS level
+ 3">CSS3</abbr> and other languages that may need them.</p>
+
+ <p>The CSS Working Group doesn't expect that all implementations of
+ CSS3 will have to implement all selectors. Instead, there will
+ probably be a small number of variants of CSS3, called profiles. For
+ example, it may be that only a profile for interactive user agents
+ will include all of the selectors.</p>
+
+ <p>This specification is a last call working draft for the the <a
+ href="http://www.w3.org/Style/CSS/members">CSS Working Group</a>
+ (<a href="/Style/">Style Activity</a>). This
+ document is a revision of the <a
+ href="http://www.w3.org/TR/2001/CR-css3-selectors-20011113/">Candidate
+ Recommendation dated 2001 November 13</a>, and has incorporated
+ implementation feedback received in the past few years. It is
+ expected that this last call will proceed straight to Proposed
+ Recommendation stage since it is believed that interoperability will
+ be demonstrable.</p>
+
+ <p>All persons are encouraged to review and implement this
+ specification and return comments to the (<a
+ href="http://lists.w3.org/Archives/Public/www-style/">archived</a>)
+ public mailing list <a
+ href="http://www.w3.org/Mail/Lists.html#www-style">www-style</a>
+ (see <a href="http://www.w3.org/Mail/Request">instructions</a>). W3C
+ Members can also send comments directly to the CSS Working
+ Group.
+ The deadline for comments is 14 January 2006.</p>
+
+ <p>This is still a draft document and may be updated, replaced, or
+ obsoleted by other documents at any time. It is inappropriate to
+ cite a W3C Working Draft as other than &quot;work in progress&quot;.
+
+ <p>This document may be available in <a
+ href="http://www.w3.org/Style/css3-selectors-updates/translations">translation</a>.
+ The English version of this specification is the only normative
+ version.
+
+ <div class="subtoc">
+
+ <h2 id="test10"><a name=contents>Table of contents</a></h2>
+
+ <ul class="toc">
+ <li class="tocline2"><a href="#context">1. Introduction</a>
+ <ul>
+ <li><a href="#dependencies">1.1. Dependencies</a> </li>
+ <li><a href="#terminology">1.2. Terminology</a> </li>
+ <li><a href="#changesFromCSS2">1.3. Changes from CSS2</a> </li>
+ </ul>
+ <li class="tocline2"><a href="#selectors">2. Selectors</a>
+ <li class="tocline2"><a href="#casesens">3. Case sensitivity</a>
+ <li class="tocline2"><a href="#selector-syntax">4. Selector syntax</a>
+ <li class="tocline2"><a href="#grouping">5. Groups of selectors</a>
+ <li class="tocline2"><a href="#simple-selectors">6. Simple selectors</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#type-selectors">6.1. Type selectors</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#typenmsp">6.1.1. Type selectors and namespaces</a></li>
+ </ul>
+ <li class="tocline3"><a href="#universal-selector">6.2. Universal selector</a>
+ <ul>
+ <li><a href="#univnmsp">6.2.1. Universal selector and namespaces</a></li>
+ </ul>
+ <li class="tocline3"><a href="#attribute-selectors">6.3. Attribute selectors</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#attribute-representation">6.3.1. Representation of attributes and attributes values</a>
+ <li><a href="#attribute-substrings">6.3.2. Substring matching attribute selectors</a>
+ <li class="tocline4"><a href="#attrnmsp">6.3.3. Attribute selectors and namespaces</a>
+ <li class="tocline4"><a href="#def-values">6.3.4. Default attribute values in DTDs</a></li>
+ </ul>
+ <li class="tocline3"><a href="#class-html">6.4. Class selectors</a>
+ <li class="tocline3"><a href="#id-selectors">6.5. ID selectors</a>
+ <li class="tocline3"><a href="#pseudo-classes">6.6. Pseudo-classes</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#dynamic-pseudos">6.6.1. Dynamic pseudo-classes</a>
+ <li class="tocline4"><a href="#target-pseudo">6.6.2. The :target pseudo-class</a>
+ <li class="tocline4"><a href="#lang-pseudo">6.6.3. The :lang() pseudo-class</a>
+ <li class="tocline4"><a href="#UIstates">6.6.4. UI element states pseudo-classes</a>
+ <li class="tocline4"><a href="#structural-pseudos">6.6.5. Structural pseudo-classes</a>
+ <ul>
+ <li><a href="#root-pseudo">:root pseudo-class</a>
+ <li><a href="#nth-child-pseudo">:nth-child() pseudo-class</a>
+ <li><a href="#nth-last-child-pseudo">:nth-last-child()</a>
+ <li><a href="#nth-of-type-pseudo">:nth-of-type() pseudo-class</a>
+ <li><a href="#nth-last-of-type-pseudo">:nth-last-of-type()</a>
+ <li><a href="#first-child-pseudo">:first-child pseudo-class</a>
+ <li><a href="#last-child-pseudo">:last-child pseudo-class</a>
+ <li><a href="#first-of-type-pseudo">:first-of-type pseudo-class</a>
+ <li><a href="#last-of-type-pseudo">:last-of-type pseudo-class</a>
+ <li><a href="#only-child-pseudo">:only-child pseudo-class</a>
+ <li><a href="#only-of-type-pseudo">:only-of-type pseudo-class</a>
+ <li><a href="#empty-pseudo">:empty pseudo-class</a></li>
+ </ul>
+ <li class="tocline4"><a href="#negation">6.6.7. The negation pseudo-class</a></li>
+ </ul>
+ </li>
+ </ul>
+ <li><a href="#pseudo-elements">7. Pseudo-elements</a>
+ <ul>
+ <li><a href="#first-line">7.1. The ::first-line pseudo-element</a>
+ <li><a href="#first-letter">7.2. The ::first-letter pseudo-element</a>
+ <li><a href="#UIfragments">7.3. The ::selection pseudo-element</a>
+ <li><a href="#gen-content">7.4. The ::before and ::after pseudo-elements</a></li>
+ </ul>
+ <li class="tocline2"><a href="#combinators">8. Combinators</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#descendant-combinators">8.1. Descendant combinators</a>
+ <li class="tocline3"><a href="#child-combinators">8.2. Child combinators</a>
+ <li class="tocline3"><a href="#sibling-combinators">8.3. Sibling combinators</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#adjacent-sibling-combinators">8.3.1. Adjacent sibling combinator</a>
+ <li class="tocline4"><a href="#general-sibling-combinators">8.3.2. General sibling combinator</a></li>
+ </ul>
+ </li>
+ </ul>
+ <li class="tocline2"><a href="#specificity">9. Calculating a selector's specificity</a>
+ <li class="tocline2"><a href="#w3cselgrammar">10. The grammar of Selectors</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#grammar">10.1. Grammar</a>
+ <li class="tocline3"><a href="#lex">10.2. Lexical scanner</a></li>
+ </ul>
+ <li class="tocline2"><a href="#downlevel">11. Namespaces and down-level clients</a>
+ <li class="tocline2"><a href="#profiling">12. Profiles</a>
+ <li><a href="#Conformance">13. Conformance and requirements</a>
+ <li><a href="#Tests">14. Tests</a>
+ <li><a href="#ACKS">15. Acknowledgements</a>
+ <li class="tocline2"><a href="#references">16. References</a>
+ </ul>
+
+ </div>
+
+ <h2><a name=context>1. Introduction</a></h2>
+
+ <h3><a name=dependencies></a>1.1. Dependencies</h3>
+
+ <p>Some features of this specification are specific to CSS, or have
+ particular limitations or rules specific to CSS. In this
+ specification, these have been described in terms of CSS2.1. <a
+ href="#refsCSS21">[CSS21]</a></p>
+
+ <h3><a name=terminology></a>1.2. Terminology</h3>
+
+ <p>All of the text of this specification is normative except
+ examples, notes, and sections explicitly marked as
+ non-normative.</p>
+
+ <h3><a name=changesFromCSS2></a>1.3. Changes from CSS2</h3>
+
+ <p><em>This section is non-normative.</em></p>
+
+ <p>The main differences between the selectors in CSS2 and those in
+ Selectors are:
+
+ <ul>
+
+ <li>the list of basic definitions (selector, group of selectors,
+ simple selector, etc.) has been changed; in particular, what was
+ referred to in CSS2 as a simple selector is now called a sequence
+ of simple selectors, and the term "simple selector" is now used for
+ the components of this sequence</li>
+
+ <li>an optional namespace component is now allowed in type element
+ selectors, the universal selector and attribute selectors</li>
+
+ <li>a <a href="#general-sibling-combinators">new combinator</a> has been introduced</li>
+
+ <li>new simple selectors including substring matching attribute
+ selectors, and new pseudo-classes</li>
+
+ <li>new pseudo-elements, and introduction of the "::" convention
+ for pseudo-elements</li>
+
+ <li>the grammar has been rewritten</li>
+
+ <li>profiles to be added to specifications integrating Selectors
+ and defining the set of selectors which is actually supported by
+ each specification</li>
+
+ <li>Selectors are now a CSS3 Module and an independent
+ specification; other specifications can now refer to this document
+ independently of CSS</li>
+
+ <li>the specification now has its own test suite</li>
+
+ </ul>
+
+<h2><a name=selectors></a>2. Selectors</h2>
+
+<p><em>This section is non-normative, as it merely summarizes the
+following sections.</em></p>
+
+<p>A Selector represents a structure. This structure can be used as a
+condition (e.g. in a CSS rule) that determines which elements a
+selector matches in the document tree, or as a flat description of the
+HTML or XML fragment corresponding to that structure.</p>
+
+<p>Selectors may range from simple element names to rich contextual
+representations.</p>
+
+<p>The following table summarizes the Selector syntax:</p>
+
+<table class="selectorsReview">
+ <thead>
+ <tr>
+ <th class="pattern">Pattern</th>
+ <th class="meaning">Meaning</th>
+ <th class="described">Described in section</th>
+ <th class="origin">First defined in CSS level</th></tr>
+ <tbody>
+ <tr>
+ <td class="pattern">*</td>
+ <td class="meaning">any element</td>
+ <td class="described"><a
+ href="#universal-selector">Universal
+ selector</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E</td>
+ <td class="meaning">an element of type E</td>
+ <td class="described"><a
+ href="#type-selectors">Type selector</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E[foo]</td>
+ <td class="meaning">an E element with a "foo" attribute</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value is exactly
+ equal to "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo~="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value is a list of
+ space-separated values, one of which is exactly equal to "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo^="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value begins exactly
+ with the string "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[foo$="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value ends exactly
+ with the string "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[foo*="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value contains the
+ substring "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[hreflang|="en"]</td>
+ <td class="meaning">an E element whose "hreflang" attribute has a hyphen-separated
+ list of values beginning (from the left) with "en"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:root</td>
+ <td class="meaning">an E element, root of the document</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-child(n)</td>
+ <td class="meaning">an E element, the n-th child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-last-child(n)</td>
+ <td class="meaning">an E element, the n-th child of its parent, counting
+ from the last one</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-of-type(n)</td>
+ <td class="meaning">an E element, the n-th sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-last-of-type(n)</td>
+ <td class="meaning">an E element, the n-th sibling of its type, counting
+ from the last one</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:first-child</td>
+ <td class="meaning">an E element, first child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:last-child</td>
+ <td class="meaning">an E element, last child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:first-of-type</td>
+ <td class="meaning">an E element, first sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:last-of-type</td>
+ <td class="meaning">an E element, last sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:only-child</td>
+ <td class="meaning">an E element, only child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:only-of-type</td>
+ <td class="meaning">an E element, only sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:empty</td>
+ <td class="meaning">an E element that has no children (including text
+ nodes)</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:link<br>E:visited</td>
+ <td class="meaning">an E element being the source anchor of a hyperlink of
+ which the target is not yet visited (:link) or already visited
+ (:visited)</td>
+ <td class="described"><a
+ href="#link">The link
+ pseudo-classes</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E:active<br>E:hover<br>E:focus</td>
+ <td class="meaning">an E element during certain user actions</td>
+ <td class="described"><a
+ href="#useraction-pseudos">The user
+ action pseudo-classes</a></td>
+ <td class="origin">1 and 2</td></tr>
+ <tr>
+ <td class="pattern">E:target</td>
+ <td class="meaning">an E element being the target of the referring URI</td>
+ <td class="described"><a
+ href="#target-pseudo">The target
+ pseudo-class</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:lang(fr)</td>
+ <td class="meaning">an element of type E in language "fr" (the document
+ language specifies how language is determined)</td>
+ <td class="described"><a
+ href="#lang-pseudo">The :lang()
+ pseudo-class</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:enabled<br>E:disabled</td>
+ <td class="meaning">a user interface element E which is enabled or
+ disabled</td>
+ <td class="described"><a
+ href="#UIstates">The UI element states
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:checked<!--<br>E:indeterminate--></td>
+ <td class="meaning">a user interface element E which is checked<!-- or in an
+ indeterminate state--> (for instance a radio-button or checkbox)</td>
+ <td class="described"><a
+ href="#UIstates">The UI element states
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E::first-line</td>
+ <td class="meaning">the first formatted line of an E element</td>
+ <td class="described"><a
+ href="#first-line">The ::first-line
+ pseudo-element</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E::first-letter</td>
+ <td class="meaning">the first formatted letter of an E element</td>
+ <td class="described"><a
+ href="#first-letter">The ::first-letter
+ pseudo-element</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E::selection</td>
+ <td class="meaning">the portion of an E element that is currently
+ selected/highlighted by the user</td>
+ <td class="described"><a
+ href="#UIfragments">The UI element
+ fragments pseudo-elements</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E::before</td>
+ <td class="meaning">generated content before an E element</td>
+ <td class="described"><a
+ href="#gen-content">The ::before
+ pseudo-element</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E::after</td>
+ <td class="meaning">generated content after an E element</td>
+ <td class="described"><a
+ href="#gen-content">The ::after
+ pseudo-element</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E.warning</td>
+ <td class="meaning">an E element whose class is
+"warning" (the document language specifies how class is determined).</td>
+ <td class="described"><a
+ href="#class-html">Class
+ selectors</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E#myid</td>
+ <td class="meaning">an E element with ID equal to "myid".</td>
+ <td class="described"><a
+ href="#id-selectors">ID
+ selectors</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E:not(s)</td>
+ <td class="meaning">an E element that does not match simple selector s</td>
+ <td class="described"><a
+ href="#negation">Negation
+ pseudo-class</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E F</td>
+ <td class="meaning">an F element descendant of an E element</td>
+ <td class="described"><a
+ href="#descendant-combinators">Descendant
+ combinator</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E &gt; F</td>
+ <td class="meaning">an F element child of an E element</td>
+ <td class="described"><a
+ href="#child-combinators">Child
+ combinator</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E + F</td>
+ <td class="meaning">an F element immediately preceded by an E element</td>
+ <td class="described"><a
+ href="#adjacent-sibling-combinators">Adjacent sibling combinator</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E ~ F</td>
+ <td class="meaning">an F element preceded by an E element</td>
+ <td class="described"><a
+ href="#general-sibling-combinators">General sibling combinator</a></td>
+ <td class="origin">3</td></tr></tbody></table>
+
+<p>The meaning of each selector is derived from the table above by
+prepending "matches" to the contents of each cell in the "Meaning"
+column.</p>
+
+<h2><a name=casesens>3. Case sensitivity</a></h2>
+
+<p>The case sensitivity of document language element names, attribute
+names, and attribute values in selectors depends on the document
+language. For example, in HTML, element names are case-insensitive,
+but in XML, they are case-sensitive.</p>
+
+<h2><a name=selector-syntax>4. Selector syntax</a></h2>
+
+<p>A <dfn><a name=selector>selector</a></dfn> is a chain of one
+or more <a href="#sequence">sequences of simple selectors</a>
+separated by <a href="#combinators">combinators</a>.</p>
+
+<p>A <dfn><a name=sequence>sequence of simple selectors</a></dfn>
+is a chain of <a href="#simple-selectors-dfn">simple selectors</a>
+that are not separated by a <a href="#combinators">combinator</a>. It
+always begins with a <a href="#type-selectors">type selector</a> or a
+<a href="#universal-selector">universal selector</a>. No other type
+selector or universal selector is allowed in the sequence.</p>
+
+<p>A <dfn><a name=simple-selectors-dfn></a><a
+href="#simple-selectors">simple selector</a></dfn> is either a <a
+href="#type-selectors">type selector</a>, <a
+href="#universal-selector">universal selector</a>, <a
+href="#attribute-selectors">attribute selector</a>, <a
+href="#class-html">class selector</a>, <a
+href="#id-selectors">ID selector</a>, <a
+href="#content-selectors">content selector</a>, or <a
+href="#pseudo-classes">pseudo-class</a>. One <a
+href="#pseudo-elements">pseudo-element</a> may be appended to the last
+sequence of simple selectors.</p>
+
+<p><dfn>Combinators</dfn> are: white space, &quot;greater-than
+sign&quot; (U+003E, <code>&gt;</code>), &quot;plus sign&quot; (U+002B,
+<code>+</code>) and &quot;tilde&quot; (U+007E, <code>~</code>). White
+space may appear between a combinator and the simple selectors around
+it. <a name=whitespace></a>Only the characters "space" (U+0020), "tab"
+(U+0009), "line feed" (U+000A), "carriage return" (U+000D), and "form
+feed" (U+000C) can occur in white space. Other space-like characters,
+such as "em-space" (U+2003) and "ideographic space" (U+3000), are
+never part of white space.</p>
+
+<p>The elements of a document tree that are represented by a selector
+are the <dfn><a name=subject></a>subjects of the selector</dfn>. A
+selector consisting of a single sequence of simple selectors
+represents any element satisfying its requirements. Prepending another
+sequence of simple selectors and a combinator to a sequence imposes
+additional matching constraints, so the subjects of a selector are
+always a subset of the elements represented by the last sequence of
+simple selectors.</p>
+
+<p>An empty selector, containing no sequence of simple selectors and
+no pseudo-element, is an <a href="#Conformance">invalid
+selector</a>.</p>
+
+<h2><a name=grouping>5. Groups of selectors</a></h2>
+
+<p>When several selectors share the same declarations, they may be
+grouped into a comma-separated list. (A comma is U+002C.)</p>
+
+<div class="example">
+<p>CSS examples:</p>
+<p>In this example, we condense three rules with identical
+declarations into one. Thus,</p>
+<pre>h1 { font-family: sans-serif }
+h2 { font-family: sans-serif }
+h3 { font-family: sans-serif }</pre>
+<p>is equivalent to:</p>
+<pre>h1, h2, h3 { font-family: sans-serif }</pre>
+</div>
+
+<p><strong>Warning</strong>: the equivalence is true in this example
+because all the selectors are valid selectors. If just one of these
+selectors were invalid, the entire group of selectors would be
+invalid. This would invalidate the rule for all three heading
+elements, whereas in the former case only one of the three individual
+heading rules would be invalidated.</p>
+
+
+<h2><a name=simple-selectors>6. Simple selectors</a></h2>
+
+<h3><a name=type-selectors>6.1. Type selector</a></h3>
+
+<p>A <dfn>type selector</dfn> is the name of a document language
+element type. A type selector represents an instance of the element
+type in the document tree.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents an <code>h1</code> element in the document tree:</p>
+ <pre>h1</pre>
+</div>
+
+
+<h4><a name=typenmsp>6.1.1. Type selectors and namespaces</a></h4>
+
+<p>Type selectors allow an optional namespace (<a
+href="#refsXMLNAMES">[XMLNAMES]</a>) component. A namespace prefix
+that has been previously declared may be prepended to the element name
+separated by the namespace separator &quot;vertical bar&quot;
+(U+007C, <code>|</code>).</p>
+
+<p>The namespace component may be left empty to indicate that the
+selector is only to represent elements with no declared namespace.</p>
+
+<p>An asterisk may be used for the namespace prefix, indicating that
+the selector represents elements in any namespace (including elements
+with no namespace).</p>
+
+<p>Element type selectors that have no namespace component (no
+namespace separator), represent elements without regard to the
+element's namespace (equivalent to "<code>*|</code>") unless a default
+namespace has been declared. If a default namespace has been declared,
+the selector will represent only elements in the default
+namespace.</p>
+
+<p>A type selector containing a namespace prefix that has not been
+previously declared is an <a href="#Conformance">invalid</a> selector.
+The mechanism for declaring a namespace prefix is left up to the
+language implementing Selectors. In CSS, such a mechanism is defined
+in the General Syntax module.</p>
+
+<p>In a namespace-aware client, element type selectors will only match
+against the <a
+href="http://www.w3.org/TR/REC-xml-names/#NT-LocalPart">local part</a>
+of the element's <a
+href="http://www.w3.org/TR/REC-xml-names/#ns-qualnames">qualified
+name</a>. See <a href="#downlevel">below</a> for notes about matching
+behaviors in down-level clients.</p>
+
+<p>In summary:</p>
+
+<dl>
+ <dt><code>ns|E</code></dt>
+ <dd>elements with name E in namespace ns</dd>
+ <dt><code>*|E</code></dt>
+ <dd>elements with name E in any namespace, including those without any
+ declared namespace</dd>
+ <dt><code>|E</code></dt>
+ <dd>elements with name E without any declared namespace</dd>
+ <dt><code>E</code></dt>
+ <dd>if no default namespace has been specified, this is equivalent to *|E.
+ Otherwise it is equivalent to ns|E where ns is the default namespace.</dd>
+</dl>
+
+<div class="example">
+ <p>CSS examples:</p>
+
+ <pre>@namespace foo url(http://www.example.com);
+ foo|h1 { color: blue }
+ foo|* { color: yellow }
+ |h1 { color: red }
+ *|h1 { color: green }
+ h1 { color: green }</pre>
+
+ <p>The first rule will match only <code>h1</code> elements in the
+ "http://www.example.com" namespace.</p>
+
+ <p>The second rule will match all elements in the
+ "http://www.example.com" namespace.</p>
+
+ <p>The third rule will match only <code>h1</code> elements without
+ any declared namespace.</p>
+
+ <p>The fourth rule will match <code>h1</code> elements in any
+ namespace (including those without any declared namespace).</p>
+
+ <p>The last rule is equivalent to the fourth rule because no default
+ namespace has been defined.</p>
+
+</div>
+
+<h3><a name=universal-selector>6.2. Universal selector</a> </h3>
+
+<p>The <dfn>universal selector</dfn>, written &quot;asterisk&quot;
+(<code>*</code>), represents the qualified name of any element
+type. It represents any single element in the document tree in any
+namespace (including those without any declared namespace) if no
+default namespace has been specified. If a default namespace has been
+specified, see <a href="#univnmsp">Universal selector and
+Namespaces</a> below.</p>
+
+<p>If the universal selector is not the only component of a sequence
+of simple selectors, the <code>*</code> may be omitted.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <ul>
+ <li><code>*[hreflang|=en]</code> and <code>[hreflang|=en]</code> are equivalent,</li>
+ <li><code>*.warning</code> and <code>.warning</code> are equivalent,</li>
+ <li><code>*#myid</code> and <code>#myid</code> are equivalent.</li>
+ </ul>
+</div>
+
+<p class="note"><strong>Note:</strong> it is recommended that the
+<code>*</code>, representing the universal selector, not be
+omitted.</p>
+
+<h4><a name=univnmsp>6.2.1. Universal selector and namespaces</a></h4>
+
+<p>The universal selector allows an optional namespace component. It
+is used as follows:</p>
+
+<dl>
+ <dt><code>ns|*</code></dt>
+ <dd>all elements in namespace ns</dd>
+ <dt><code>*|*</code></dt>
+ <dd>all elements</dd>
+ <dt><code>|*</code></dt>
+ <dd>all elements without any declared namespace</dd>
+ <dt><code>*</code></dt>
+ <dd>if no default namespace has been specified, this is equivalent to *|*.
+ Otherwise it is equivalent to ns|* where ns is the default namespace.</dd>
+</dl>
+
+<p>A universal selector containing a namespace prefix that has not
+been previously declared is an <a href="#Conformance">invalid</a>
+selector. The mechanism for declaring a namespace prefix is left up
+to the language implementing Selectors. In CSS, such a mechanism is
+defined in the General Syntax module.</p>
+
+
+<h3><a name=attribute-selectors>6.3. Attribute selectors</a></h3>
+
+<p>Selectors allow the representation of an element's attributes. When
+a selector is used as an expression to match against an element,
+attribute selectors must be considered to match an element if that
+element has an attribute that matches the attribute represented by the
+attribute selector.</p>
+
+<h4><a name=attribute-representation>6.3.1. Attribute presence and values
+selectors</a></h4>
+
+<p>CSS2 introduced four attribute selectors:</p>
+
+<dl>
+ <dt><code>[att]</code>
+ <dd>Represents an element with the <code>att</code> attribute, whatever the value of
+ the attribute.</dd>
+ <dt><code>[att=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value is exactly
+ "val".</dd>
+ <dt><code>[att~=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value is a <a
+ href="#whitespace">whitespace</a>-separated list of words, one of
+ which is exactly "val". If "val" contains whitespace, it will never
+ represent anything (since the words are <em>separated</em> by
+ spaces).</dd>
+ <dt><code>[att|=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute, its value either
+ being exactly "val" or beginning with "val" immediately followed by
+ "-" (U+002D). This is primarily intended to allow language subcode
+ matches (e.g., the <code>hreflang</code> attribute on the
+ <code>link</code> element in HTML) as described in RFC 3066 (<a
+ href="#refsRFC3066">[RFC3066]</a>). For <code>lang</code> (or
+ <code>xml:lang</code>) language subcode matching, please see <a
+ href="#lang-pseudo">the <code>:lang</code> pseudo-class</a>.</dd>
+</dl>
+
+<p>Attribute values must be identifiers or strings. The
+case-sensitivity of attribute names and values in selectors depends on
+the document language.</p>
+
+<div class="example">
+
+ <p>Examples:</p>
+
+ <p>The following attribute selector represents an <code>h1</code>
+ element that carries the <code>title</code> attribute, whatever its
+ value:</p>
+
+ <pre>h1[title]</pre>
+
+ <p>In the following example, the selector represents a
+ <code>span</code> element whose <code>class</code> attribute has
+ exactly the value "example":</p>
+
+ <pre>span[class="example"]</pre>
+
+ <p>Multiple attribute selectors can be used to represent several
+ attributes of an element, or several conditions on the same
+ attribute. Here, the selector represents a <code>span</code> element
+ whose <code>hello</code> attribute has exactly the value "Cleveland"
+ and whose <code>goodbye</code> attribute has exactly the value
+ "Columbus":</p>
+
+ <pre>span[hello="Cleveland"][goodbye="Columbus"]</pre>
+
+ <p>The following selectors illustrate the differences between "="
+ and "~=". The first selector will represent, for example, the value
+ "copyright copyleft copyeditor" on a <code>rel</code> attribute. The
+ second selector will only represent an <code>a</code> element with
+ an <code>href</code> attribute having the exact value
+ "http://www.w3.org/".</p>
+
+ <pre>a[rel~="copyright"]
+a[href="http://www.w3.org/"]</pre>
+
+ <p>The following selector represents a <code>link</code> element
+ whose <code>hreflang</code> attribute is exactly "fr".</p>
+
+ <pre>link[hreflang=fr]</pre>
+
+ <p>The following selector represents a <code>link</code> element for
+ which the values of the <code>hreflang</code> attribute begins with
+ "en", including "en", "en-US", and "en-cockney":</p>
+
+ <pre>link[hreflang|="en"]</pre>
+
+ <p>Similarly, the following selectors represents a
+ <code>DIALOGUE</code> element whenever it has one of two different
+ values for an attribute <code>character</code>:</p>
+
+ <pre>DIALOGUE[character=romeo]
+DIALOGUE[character=juliet]</pre>
+
+</div>
+
+<h4><a name=attribute-substrings></a>6.3.2. Substring matching attribute
+selectors</h4>
+
+<p>Three additional attribute selectors are provided for matching
+substrings in the value of an attribute:</p>
+
+<dl>
+ <dt><code>[att^=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value begins
+ with the prefix "val".</dd>
+ <dt><code>[att$=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute whose value ends with
+ the suffix "val".</dd>
+ <dt><code>[att*=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute whose value contains
+ at least one instance of the substring "val".</dd>
+</dl>
+
+<p>Attribute values must be identifiers or strings. The
+case-sensitivity of attribute names in selectors depends on the
+document language.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents an HTML <code>object</code>, referencing an
+ image:</p>
+ <pre>object[type^="image/"]</pre>
+ <p>The following selector represents an HTML anchor <code>a</code> with an
+ <code>href</code> attribute whose value ends with ".html".</p>
+ <pre>a[href$=".html"]</pre>
+ <p>The following selector represents an HTML paragraph with a <code>title</code>
+ attribute whose value contains the substring "hello"</p>
+ <pre>p[title*="hello"]</pre>
+</div>
+
+<h4><a name=attrnmsp>6.3.3. Attribute selectors and namespaces</a></h4>
+
+<p>Attribute selectors allow an optional namespace component to the
+attribute name. A namespace prefix that has been previously declared
+may be prepended to the attribute name separated by the namespace
+separator &quot;vertical bar&quot; (<code>|</code>). In keeping with
+the Namespaces in the XML recommendation, default namespaces do not
+apply to attributes, therefore attribute selectors without a namespace
+component apply only to attributes that have no declared namespace
+(equivalent to "<code>|attr</code>"). An asterisk may be used for the
+namespace prefix indicating that the selector is to match all
+attribute names without regard to the attribute's namespace.
+
+<p>An attribute selector with an attribute name containing a namespace
+prefix that has not been previously declared is an <a
+href="#Conformance">invalid</a> selector. The mechanism for declaring
+a namespace prefix is left up to the language implementing Selectors.
+In CSS, such a mechanism is defined in the General Syntax module.
+
+<div class="example">
+ <p>CSS examples:</p>
+ <pre>@namespace foo "http://www.example.com";
+[foo|att=val] { color: blue }
+[*|att] { color: yellow }
+[|att] { color: green }
+[att] { color: green }</pre>
+
+ <p>The first rule will match only elements with the attribute
+ <code>att</code> in the "http://www.example.com" namespace with the
+ value "val".</p>
+
+ <p>The second rule will match only elements with the attribute
+ <code>att</code> regardless of the namespace of the attribute
+ (including no declared namespace).</p>
+
+ <p>The last two rules are equivalent and will match only elements
+ with the attribute <code>att</code> where the attribute is not
+ declared to be in a namespace.</p>
+
+</div>
+
+<h4><a name=def-values>6.3.4. Default attribute values in DTDs</a></h4>
+
+<p>Attribute selectors represent explicitly set attribute values in
+the document tree. Default attribute values may be defined in a DTD or
+elsewhere, but cannot always be selected by attribute
+selectors. Selectors should be designed so that they work even if the
+default values are not included in the document tree.</p>
+
+<p>More precisely, a UA is <em>not</em> required to read an "external
+subset" of the DTD but <em>is</em> required to look for default
+attribute values in the document's "internal subset." (See <a
+href="#refsXML10">[XML10]</a> for definitions of these subsets.)</p>
+
+<p>A UA that recognizes an XML namespace <a
+href="#refsXMLNAMES">[XMLNAMES]</a> is not required to use its
+knowledge of that namespace to treat default attribute values as if
+they were present in the document. (For example, an XHTML UA is not
+required to use its built-in knowledge of the XHTML DTD.)</p>
+
+<p class="note"><strong>Note:</strong> Typically, implementations
+choose to ignore external subsets.</p>
+
+<div class="example">
+<p>Example:</p>
+
+<p>Consider an element EXAMPLE with an attribute "notation" that has a
+default value of "decimal". The DTD fragment might be</p>
+
+<pre class="dtd-example">&lt;!ATTLIST EXAMPLE notation (decimal,octal) "decimal"></pre>
+
+<p>If the style sheet contains the rules</p>
+
+<pre>EXAMPLE[notation=decimal] { /*... default property settings ...*/ }
+EXAMPLE[notation=octal] { /*... other settings...*/ }</pre>
+
+<p>the first rule will not match elements whose "notation" attribute
+is set by default, i.e. not set explicitly. To catch all cases, the
+attribute selector for the default value must be dropped:</p>
+
+<pre>EXAMPLE { /*... default property settings ...*/ }
+EXAMPLE[notation=octal] { /*... other settings...*/ }</pre>
+
+<p>Here, because the selector <code>EXAMPLE[notation=octal]</code> is
+more specific than the tag
+selector alone, the style declarations in the second rule will override
+those in the first for elements that have a "notation" attribute value
+of "octal". Care has to be taken that all property declarations that
+are to apply only to the default case are overridden in the non-default
+cases' style rules.</p>
+
+</div>
+
+<h3><a name=class-html>6.4. Class selectors</a></h3>
+
+<p>Working with HTML, authors may use the period (U+002E,
+<code>.</code>) notation as an alternative to the <code>~=</code>
+notation when representing the <code>class</code> attribute. Thus, for
+HTML, <code>div.value</code> and <code>div[class~=value]</code> have
+the same meaning. The attribute value must immediately follow the
+&quot;period&quot; (<code>.</code>).</p>
+
+<p>UAs may apply selectors using the period (.) notation in XML
+documents if the UA has namespace-specific knowledge that allows it to
+determine which attribute is the &quot;class&quot; attribute for the
+respective namespace. One such example of namespace-specific knowledge
+is the prose in the specification for a particular namespace (e.g. SVG
+1.0 <a href="#refsSVG">[SVG]</a> describes the <a
+href="http://www.w3.org/TR/2001/PR-SVG-20010719/styling.html#ClassAttribute">SVG
+&quot;class&quot; attribute</a> and how a UA should interpret it, and
+similarly MathML 1.01 <a href="#refsMATH">[MATH]</a> describes the <a
+href="http://www.w3.org/1999/07/REC-MathML-19990707/chapter2.html#sec2.3.4">MathML
+&quot;class&quot; attribute</a>.)</p>
+
+<div class="example">
+ <p>CSS examples:</p>
+
+ <p>We can assign style information to all elements with
+ <code>class~="pastoral"</code> as follows:</p>
+
+ <pre>*.pastoral { color: green } /* all elements with class~=pastoral */</pre>
+
+ <p>or just</p>
+
+ <pre>.pastoral { color: green } /* all elements with class~=pastoral */</pre>
+
+ <p>The following assigns style only to H1 elements with
+ <code>class~="pastoral"</code>:</p>
+
+ <pre>H1.pastoral { color: green } /* H1 elements with class~=pastoral */</pre>
+
+ <p>Given these rules, the first H1 instance below would not have
+ green text, while the second would:</p>
+
+ <pre>&lt;H1&gt;Not green&lt;/H1&gt;
+&lt;H1 class="pastoral"&gt;Very green&lt;/H1&gt;</pre>
+
+</div>
+
+<p>To represent a subset of "class" values, each value must be preceded
+by a ".", in any order.</P>
+
+<div class="example">
+
+ <p>CSS example:</p>
+
+ <p>The following rule matches any P element whose "class" attribute
+ has been assigned a list of <a
+ href="#whitespace">whitespace</a>-separated values that includes
+ "pastoral" and "marine":</p>
+
+ <pre>p.pastoral.marine { color: green }</pre>
+
+ <p>This rule matches when <code>class="pastoral blue aqua
+ marine"</code> but does not match for <code>class="pastoral
+ blue"</code>.</p>
+
+</div>
+
+<p class="note"><strong>Note:</strong> Because CSS gives considerable
+power to the "class" attribute, authors could conceivably design their
+own "document language" based on elements with almost no associated
+presentation (such as DIV and SPAN in HTML) and assigning style
+information through the "class" attribute. Authors should avoid this
+practice since the structural elements of a document language often
+have recognized and accepted meanings and author-defined classes may
+not.</p>
+
+<p class="note"><strong>Note:</strong> If an element has multiple
+class attributes, their values must be concatenated with spaces
+between the values before searching for the class. As of this time the
+working group is not aware of any manner in which this situation can
+be reached, however, so this behavior is explicitly non-normative in
+this specification.</p>
+
+<h3><a name=id-selectors>6.5. ID selectors</a></h3>
+
+<p>Document languages may contain attributes that are declared to be
+of type ID. What makes attributes of type ID special is that no two
+such attributes can have the same value in a document, regardless of
+the type of the elements that carry them; whatever the document
+language, an ID typed attribute can be used to uniquely identify its
+element. In HTML all ID attributes are named "id"; XML applications
+may name ID attributes differently, but the same restriction
+applies.</p>
+
+<p>An ID-typed attribute of a document language allows authors to
+assign an identifier to one element instance in the document tree. W3C
+ID selectors represent an element instance based on its identifier. An
+ID selector contains a &quot;number sign&quot; (U+0023,
+<code>#</code>) immediately followed by the ID value, which must be an
+identifier.</p>
+
+<p>Selectors does not specify how a UA knows the ID-typed attribute of
+an element. The UA may, e.g., read a document's DTD, have the
+information hard-coded or ask the user.
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following ID selector represents an <code>h1</code> element
+ whose ID-typed attribute has the value "chapter1":</p>
+ <pre>h1#chapter1</pre>
+ <p>The following ID selector represents any element whose ID-typed
+ attribute has the value "chapter1":</p>
+ <pre>#chapter1</pre>
+ <p>The following selector represents any element whose ID-typed
+ attribute has the value "z98y".</p>
+ <pre>*#z98y</pre>
+</div>
+
+<p class="note"><strong>Note.</strong> In XML 1.0 <a
+href="#refsXML10">[XML10]</a>, the information about which attribute
+contains an element's IDs is contained in a DTD or a schema. When
+parsing XML, UAs do not always read the DTD, and thus may not know
+what the ID of an element is (though a UA may have namespace-specific
+knowledge that allows it to determine which attribute is the ID
+attribute for that namespace). If a style sheet designer knows or
+suspects that a UA may not know what the ID of an element is, he
+should use normal attribute selectors instead:
+<code>[name=p371]</code> instead of <code>#p371</code>. Elements in
+XML 1.0 documents without a DTD do not have IDs at all.</p>
+
+<p>If an element has multiple ID attributes, all of them must be
+treated as IDs for that element for the purposes of the ID
+selector. Such a situation could be reached using mixtures of xml:id,
+DOM3 Core, XML DTDs, and namespace-specific knowledge.</p>
+
+<h3><a name=pseudo-classes>6.6. Pseudo-classes</a></h3>
+
+<p>The pseudo-class concept is introduced to permit selection based on
+information that lies outside of the document tree or that cannot be
+expressed using the other simple selectors.</p>
+
+<p>A pseudo-class always consists of a &quot;colon&quot;
+(<code>:</code>) followed by the name of the pseudo-class and
+optionally by a value between parentheses.</p>
+
+<p>Pseudo-classes are allowed in all sequences of simple selectors
+contained in a selector. Pseudo-classes are allowed anywhere in
+sequences of simple selectors, after the leading type selector or
+universal selector (possibly omitted). Pseudo-class names are
+case-insensitive. Some pseudo-classes are mutually exclusive, while
+others can be applied simultaneously to the same
+element. Pseudo-classes may be dynamic, in the sense that an element
+may acquire or lose a pseudo-class while a user interacts with the
+document.</p>
+
+
+<h4><a name=dynamic-pseudos>6.6.1. Dynamic pseudo-classes</a></h4>
+
+<p>Dynamic pseudo-classes classify elements on characteristics other
+than their name, attributes, or content, in principle characteristics
+that cannot be deduced from the document tree.</p>
+
+<p>Dynamic pseudo-classes do not appear in the document source or
+document tree.</p>
+
+
+<h5>The <a name=link>link pseudo-classes: :link and :visited</a></h5>
+
+<p>User agents commonly display unvisited links differently from
+previously visited ones. Selectors
+provides the pseudo-classes <code>:link</code> and
+<code>:visited</code> to distinguish them:</p>
+
+<ul>
+ <li>The <code>:link</code> pseudo-class applies to links that have
+ not yet been visited.</li>
+ <li>The <code>:visited</code> pseudo-class applies once the link has
+ been visited by the user. </li>
+</ul>
+
+<p>After some amount of time, user agents may choose to return a
+visited link to the (unvisited) ':link' state.</p>
+
+<p>The two states are mutually exclusive.</p>
+
+<div class="example">
+
+ <p>Example:</p>
+
+ <p>The following selector represents links carrying class
+ <code>external</code> and already visited:</p>
+
+ <pre>a.external:visited</pre>
+
+</div>
+
+<p class="note"><strong>Note:</strong> It is possible for style sheet
+authors to abuse the :link and :visited pseudo-classes to determine
+which sites a user has visited without the user's consent.
+
+<p>UAs may therefore treat all links as unvisited links, or implement
+other measures to preserve the user's privacy while rendering visited
+and unvisited links differently.</p>
+
+<h5>The <a name=useraction-pseudos>user action pseudo-classes
+:hover, :active, and :focus</a></h5>
+
+<p>Interactive user agents sometimes change the rendering in response
+to user actions. Selectors provides
+three pseudo-classes for the selection of an element the user is
+acting on.</p>
+
+<ul>
+
+ <li>The <code>:hover</code> pseudo-class applies while the user
+ designates an element with a pointing device, but does not activate
+ it. For example, a visual user agent could apply this pseudo-class
+ when the cursor (mouse pointer) hovers over a box generated by the
+ element. User agents not that do not support <a
+ href="http://www.w3.org/TR/REC-CSS2/media.html#interactive-media-group">interactive
+ media</a> do not have to support this pseudo-class. Some conforming
+ user agents that support <a
+ href="http://www.w3.org/TR/REC-CSS2/media.html#interactive-media-group">interactive
+ media</a> may not be able to support this pseudo-class (e.g., a pen
+ device that does not detect hovering).</li>
+
+ <li>The <code>:active</code> pseudo-class applies while an element
+ is being activated by the user. For example, between the times the
+ user presses the mouse button and releases it.</li>
+
+ <li>The <code>:focus</code> pseudo-class applies while an element
+ has the focus (accepts keyboard or mouse events, or other forms of
+ input). </li>
+
+</ul>
+
+<p>There may be document language or implementation specific limits on
+which elements can become <code>:active</code> or acquire
+<code>:focus</code>.</p>
+
+<p>These pseudo-classes are not mutually exclusive. An element may
+match several pseudo-classes at the same time.</p>
+
+<p>Selectors doesn't define if the parent of an element that is
+':active' or ':hover' is also in that state.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <pre>a:link /* unvisited links */
+a:visited /* visited links */
+a:hover /* user hovers */
+a:active /* active links */</pre>
+ <p>An example of combining dynamic pseudo-classes:</p>
+ <pre>a:focus
+a:focus:hover</pre>
+ <p>The last selector matches <code>a</code> elements that are in
+ the pseudo-class :focus and in the pseudo-class :hover.</p>
+</div>
+
+<p class="note"><strong>Note:</strong> An element can be both ':visited'
+and ':active' (or ':link' and ':active').</p>
+
+<h4><a name=target-pseudo>6.6.2. The target pseudo-class :target</a></h4>
+
+<p>Some URIs refer to a location within a resource. This kind of URI
+ends with a &quot;number sign&quot; (#) followed by an anchor
+identifier (called the fragment identifier).</p>
+
+<p>URIs with fragment identifiers link to a certain element within the
+document, known as the target element. For instance, here is a URI
+pointing to an anchor named <code>section_2</code> in an HTML
+document:</p>
+
+<pre>http://example.com/html/top.html#section_2</pre>
+
+<p>A target element can be represented by the <code>:target</code>
+pseudo-class. If the document's URI has no fragment identifier, then
+the document has no target element.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <pre>p.note:target</pre>
+ <p>This selector represents a <code>p</code> element of class
+ <code>note</code> that is the target element of the referring
+ URI.</p>
+</div>
+
+<div class="example">
+ <p>CSS example:</p>
+ <p>Here, the <code>:target</code> pseudo-class is used to make the
+ target element red and place an image before it, if there is one:</p>
+ <pre>*:target { color : red }
+*:target::before { content : url(target.png) }</pre>
+</div>
+
+<h4><a name=lang-pseudo>6.6.3. The language pseudo-class :lang</a></h4>
+
+<p>If the document language specifies how the human language of an
+element is determined, it is possible to write selectors that
+represent an element based on its language. For example, in HTML <a
+href="#refsHTML4">[HTML4]</a>, the language is determined by a
+combination of the <code>lang</code> attribute, the <code>meta</code>
+element, and possibly by information from the protocol (such as HTTP
+headers). XML uses an attribute called <code>xml:lang</code>, and
+there may be other document language-specific methods for determining
+the language.</p>
+
+<p>The pseudo-class <code>:lang(C)</code> represents an element that
+is in language C. Whether an element is represented by a
+<code>:lang()</code> selector is based solely on the identifier C
+being either equal to, or a hyphen-separated substring of, the
+element's language value, in the same way as if performed by the <a
+href="#attribute-representation">'|='</a> operator in attribute
+selectors. The identifier C does not have to be a valid language
+name.</p>
+
+<p>C must not be empty. (If it is, the selector is invalid.)</p>
+
+<p class="note"><strong>Note:</strong> It is recommended that
+documents and protocols indicate language using codes from RFC 3066 <a
+href="#refsRFC3066">[RFC3066]</a> or its successor, and by means of
+"xml:lang" attributes in the case of XML-based documents <a
+href="#refsXML10">[XML10]</a>. See <a
+href="http://www.w3.org/International/questions/qa-lang-2or3.html">
+"FAQ: Two-letter or three-letter language codes."</a></p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The two following selectors represent an HTML document that is in
+ Belgian, French, or German. The two next selectors represent
+ <code>q</code> quotations in an arbitrary element in Belgian, French,
+ or German.</p>
+ <pre>html:lang(fr-be)
+html:lang(de)
+:lang(fr-be) &gt; q
+:lang(de) &gt; q</pre>
+</div>
+
+<h4><a name=UIstates>6.6.4. The UI element states pseudo-classes</a></h4>
+
+<h5><a name=enableddisabled>The :enabled and :disabled pseudo-classes</a></h5>
+
+<p>The <code>:enabled</code> pseudo-class allows authors to customize
+the look of user interface elements that are enabled &mdash; which the
+user can select or activate in some fashion (e.g. clicking on a button
+with a mouse). There is a need for such a pseudo-class because there
+is no way to programmatically specify the default appearance of say,
+an enabled <code>input</code> element without also specifying what it
+would look like when it was disabled.</p>
+
+<p>Similar to <code>:enabled</code>, <code>:disabled</code> allows the
+author to specify precisely how a disabled or inactive user interface
+element should look.</p>
+
+<p>Most elements will be neither enabled nor disabled. An element is
+enabled if the user can either activate it or transfer the focus to
+it. An element is disabled if it could be enabled, but the user cannot
+presently activate it or transfer focus to it.</p>
+
+
+<h5><a name=checked>The :checked pseudo-class</a></h5>
+
+<p>Radio and checkbox elements can be toggled by the user. Some menu
+items are "checked" when the user selects them. When such elements are
+toggled "on" the <code>:checked</code> pseudo-class applies. The
+<code>:checked</code> pseudo-class initially applies to such elements
+that have the HTML4 <code>selected</code> and <code>checked</code>
+attributes as described in <a
+href="http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.2.1">Section
+17.2.1 of HTML4</a>, but of course the user can toggle "off" such
+elements in which case the <code>:checked</code> pseudo-class would no
+longer apply. While the <code>:checked</code> pseudo-class is dynamic
+in nature, and is altered by user action, since it can also be based
+on the presence of the semantic HTML4 <code>selected</code> and
+<code>checked</code> attributes, it applies to all media.
+
+
+<h5><a name=indeterminate>The :indeterminate pseudo-class</a></h5>
+
+<div class="note">
+
+<p>Radio and checkbox elements can be toggled by the user, but are
+sometimes in an indeterminate state, neither checked nor unchecked.
+This can be due to an element attribute, or DOM manipulation.</p>
+
+<p>A future version of this specification may introduce an
+<code>:indeterminate</code> pseudo-class that applies to such elements.
+<!--While the <code>:indeterminate</code> pseudo-class is dynamic in
+nature, and is altered by user action, since it can also be based on
+the presence of an element attribute, it applies to all media.</p>
+
+<p>Components of a radio-group initialized with no pre-selected choice
+are an example of :indeterminate state.--></p>
+
+</div>
+
+
+<h4><a name=structural-pseudos>6.6.5. Structural pseudo-classes</a></h4>
+
+<p>Selectors introduces the concept of <dfn>structural
+pseudo-classes</dfn> to permit selection based on extra information that lies in
+the document tree but cannot be represented by other simple selectors or
+combinators.
+
+<p>Note that standalone pieces of PCDATA (text nodes in the DOM) are
+not counted when calculating the position of an element in the list of
+children of its parent. When calculating the position of an element in
+the list of children of its parent, the index numbering starts at 1.
+
+
+<h5><a name=root-pseudo>:root pseudo-class</a></h5>
+
+<p>The <code>:root</code> pseudo-class represents an element that is
+the root of the document. In HTML 4, this is always the
+<code>HTML</code> element.
+
+
+<h5><a name=nth-child-pseudo>:nth-child() pseudo-class</a></h5>
+
+<p>The
+<code>:nth-child(<var>a</var><code>n</code>+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings
+<strong>before</strong> it in the document tree, for a given positive
+integer or zero value of <code>n</code>, and has a parent element. In
+other words, this matches the <var>b</var>th child of an element after
+all the children have been split into groups of <var>a</var> elements
+each. For example, this allows the selectors to address every other
+row in a table, and could be used to alternate the color
+of paragraph text in a cycle of four. The <var>a</var> and
+<var>b</var> values must be zero, negative integers or positive
+integers. The index of the first child of an element is 1.
+
+<p>In addition to this, <code>:nth-child()</code> can take
+'<code>odd</code>' and '<code>even</code>' as arguments instead.
+'<code>odd</code>' has the same signification as <code>2n+1</code>,
+and '<code>even</code>' has the same signification as <code>2n</code>.
+
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-child(2n+1) /* represents every odd row of an HTML table */
+tr:nth-child(odd) /* same */
+tr:nth-child(2n) /* represents every even row of an HTML table */
+tr:nth-child(even) /* same */
+
+/* Alternate paragraph colours in CSS */
+p:nth-child(4n+1) { color: navy; }
+p:nth-child(4n+2) { color: green; }
+p:nth-child(4n+3) { color: maroon; }
+p:nth-child(4n+4) { color: purple; }</pre>
+</div>
+
+<p>When <var>a</var>=0, no repeating is used, so for example
+<code>:nth-child(0n+5)</code> matches only the fifth child. When
+<var>a</var>=0, the <var>a</var><code>n</code> part need not be
+included, so the syntax simplifies to
+<code>:nth-child(<var>b</var>)</code> and the last example simplifies
+to <code>:nth-child(5)</code>.
+
+<div class="example">
+<p>Examples:</p>
+<pre>foo:nth-child(0n+1) /* represents an element foo, first child of its parent element */
+foo:nth-child(1) /* same */</pre>
+</div>
+
+<p>When <var>a</var>=1, the number may be omitted from the rule.
+
+<div class="example">
+<p>Examples:</p>
+<p>The following selectors are therefore equivalent:</p>
+<pre>bar:nth-child(1n+0) /* represents all bar elements, specificity (0,1,1) */
+bar:nth-child(n+0) /* same */
+bar:nth-child(n) /* same */
+bar /* same but lower specificity (0,0,1) */</pre>
+</div>
+
+<p>If <var>b</var>=0, then every <var>a</var>th element is picked. In
+such a case, the <var>b</var> part may be omitted.
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-child(2n+0) /* represents every even row of an HTML table */
+tr:nth-child(2n) /* same */</pre>
+</div>
+
+<p>If both <var>a</var> and <var>b</var> are equal to zero, the
+pseudo-class represents no element in the document tree.</p>
+
+<p>The value <var>a</var> can be negative, but only the positive
+values of <var>a</var><code>n</code>+<var>b</var>, for
+<code>n</code>&ge;0, may represent an element in the document
+tree.</p>
+
+<div class="example">
+<p>Example:</p>
+<pre>html|tr:nth-child(-n+6) /* represents the 6 first rows of XHTML tables */</pre>
+</div>
+
+<p>When the value <var>b</var> is negative, the "+" character in the
+expression must be removed (it is effectively replaced by the "-"
+character indicating the negative value of <var>b</var>).</p>
+
+<div class="example">
+<p>Examples:</p>
+<pre>:nth-child(10n-1) /* represents the 9th, 19th, 29th, etc, element */
+:nth-child(10n+9) /* Same */
+:nth-child(10n+-1) /* Syntactically invalid, and would be ignored */</pre>
+</div>
+
+
+<h5><a name=nth-last-child-pseudo>:nth-last-child() pseudo-class</a></h5>
+
+<p>The <code>:nth-last-child(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings
+<strong>after</strong> it in the document tree, for a given positive
+integer or zero value of <code>n</code>, and has a parent element. See
+<code>:nth-child()</code> pseudo-class for the syntax of its argument.
+It also accepts the '<code>even</code>' and '<code>odd</code>' values
+as arguments.
+
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-last-child(-n+2) /* represents the two last rows of an HTML table */
+
+foo:nth-last-child(odd) /* represents all odd foo elements in their parent element,
+ counting from the last one */</pre>
+</div>
+
+
+<h5><a name=nth-of-type-pseudo>:nth-of-type() pseudo-class</a></h5>
+
+<p>The <code>:nth-of-type(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings with the same
+element name <strong>before</strong> it in the document tree, for a
+given zero or positive integer value of <code>n</code>, and has a
+parent element. In other words, this matches the <var>b</var>th child
+of that type after all the children of that type have been split into
+groups of a elements each. See <code>:nth-child()</code> pseudo-class
+for the syntax of its argument. It also accepts the
+'<code>even</code>' and '<code>odd</code>' values.
+
+
+<div class="example">
+<p>CSS example:</p>
+<p>This allows an author to alternate the position of floated images:</p>
+<pre>img:nth-of-type(2n+1) { float: right; }
+img:nth-of-type(2n) { float: left; }</pre>
+</div>
+
+
+<h5><a name=nth-last-of-type-pseudo>:nth-last-of-type() pseudo-class</a></h5>
+
+<p>The <code>:nth-last-of-type(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings with the same
+element name <strong>after</strong> it in the document tree, for a
+given zero or positive integer value of <code>n</code>, and has a
+parent element. See <code>:nth-child()</code> pseudo-class for the
+syntax of its argument. It also accepts the '<code>even</code>' and '<code>odd</code>' values.
+
+
+<div class="example">
+ <p>Example:</p>
+ <p>To represent all <code>h2</code> children of an XHTML
+ <code>body</code> except the first and last, one could use the
+ following selector:</p>
+ <pre>body &gt; h2:nth-of-type(n+2):nth-last-of-type(n+2)</pre>
+ <p>In this case, one could also use <code>:not()</code>, although the
+ selector ends up being just as long:</p>
+ <pre>body &gt; h2:not(:first-of-type):not(:last-of-type)</pre>
+</div>
+
+
+<h5><a name=first-child-pseudo>:first-child pseudo-class</a></h5>
+
+<p>Same as <code>:nth-child(1)</code>. The <code>:first-child</code> pseudo-class
+represents an element that is the first child of some other element.
+
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element that is
+ the first child of a <code>div</code> element:</p>
+ <pre>div &gt; p:first-child</pre>
+ <p>This selector can represent the <code>p</code> inside the
+ <code>div</code> of the following fragment:</p>
+ <pre>&lt;p&gt; The last P before the note.&lt;/p&gt;
+&lt;div class="note"&gt;
+ &lt;p&gt; The first P inside the note.&lt;/p&gt;
+&lt;/div&gt;</pre>but cannot represent the second <code>p</code> in the following
+fragment:
+ <pre>&lt;p&gt; The last P before the note.&lt;/p&gt;
+&lt;div class="note"&gt;
+ &lt;h2&gt; Note &lt;/h2&gt;
+ &lt;p&gt; The first P inside the note.&lt;/p&gt;
+&lt;/div&gt;</pre>
+ <p>The following two selectors are usually equivalent:</p>
+ <pre>* &gt; a:first-child /* a is first child of any element */
+a:first-child /* Same (assuming a is not the root element) */</pre>
+</div>
+
+<h5><a name=last-child-pseudo>:last-child pseudo-class</a></h5>
+
+<p>Same as <code>:nth-last-child(1)</code>. The <code>:last-child</code> pseudo-class
+represents an element that is the last child of some other element.
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents a list item <code>li</code> that
+ is the last child of an ordered list <code>ol</code>.
+ <pre>ol &gt; li:last-child</pre>
+</div>
+
+<h5><a name=first-of-type-pseudo>:first-of-type pseudo-class</a></h5>
+
+<p>Same as <code>:nth-of-type(1)</code>. The <code>:first-of-type</code> pseudo-class
+represents an element that is the first sibling of its type in the list of
+children of its parent element.
+
+<div class="example">
+<p>Example:</p>
+<p>The following selector represents a definition title
+<code>dt</code> inside a definition list <code>dl</code>, this
+<code>dt</code> being the first of its type in the list of children of
+its parent element.</p>
+<pre>dl dt:first-of-type</pre>
+<p>It is a valid description for the first two <code>dt</code>
+elements in the following example but not for the third one:</p>
+<pre>&lt;dl&gt;
+ &lt;dt&gt;gigogne&lt;/dt&gt;
+ &lt;dd&gt;
+ &lt;dl&gt;
+ &lt;dt&gt;fus&eacute;e&lt;/dt&gt;
+ &lt;dd&gt;multistage rocket&lt;/dd&gt;
+ &lt;dt&gt;table&lt;/dt&gt;
+ &lt;dd&gt;nest of tables&lt;/dd&gt;
+ &lt;/dl&gt;
+ &lt;/dd&gt;
+&lt;/dl&gt;</pre>
+</div>
+
+<h5><a name=last-of-type-pseudo>:last-of-type pseudo-class</a></h5>
+
+<p>Same as <code>:nth-last-of-type(1)</code>. The
+<code>:last-of-type</code> pseudo-class represents an element that is
+the last sibling of its type in the list of children of its parent
+element.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents the last data cell
+ <code>td</code> of a table row.</p>
+ <pre>tr &gt; td:last-of-type</pre>
+</div>
+
+<h5><a name=only-child-pseudo>:only-child pseudo-class</a></h5>
+
+<p>Represents an element that has a parent element and whose parent
+element has no other element children. Same as
+<code>:first-child:last-child</code> or
+<code>:nth-child(1):nth-last-child(1)</code>, but with a lower
+specificity.</p>
+
+<h5><a name=only-of-type-pseudo>:only-of-type pseudo-class</a></h5>
+
+<p>Represents an element that has a parent element and whose parent
+element has no other element children with the same element name. Same
+as <code>:first-of-type:last-of-type</code> or
+<code>:nth-of-type(1):nth-last-of-type(1)</code>, but with a lower
+specificity.</p>
+
+
+<h5><a name=empty-pseudo></a>:empty pseudo-class</h5>
+
+<p>The <code>:empty</code> pseudo-class represents an element that has
+no children at all. In terms of the DOM, only element nodes and text
+nodes (including CDATA nodes and entity references) whose data has a
+non-zero length must be considered as affecting emptiness; comments,
+PIs, and other nodes must not affect whether an element is considered
+empty or not.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p><code>p:empty</code> is a valid representation of the following fragment:</p>
+ <pre>&lt;p&gt;&lt;/p&gt;</pre>
+ <p><code>foo:empty</code> is not a valid representation for the
+ following fragments:</p>
+ <pre>&lt;foo&gt;bar&lt;/foo&gt;</pre>
+ <pre>&lt;foo&gt;&lt;bar&gt;bla&lt;/bar&gt;&lt;/foo&gt;</pre>
+ <pre>&lt;foo&gt;this is not &lt;bar&gt;:empty&lt;/bar&gt;&lt;/foo&gt;</pre>
+</div>
+
+<h4><a name=content-selectors>6.6.6. Blank</a></h4> <!-- It's the Return of Appendix H!!! Run away! -->
+
+<p>This section intentionally left blank.</p>
+<!-- (used to be :contains()) -->
+
+<h4><a name=negation></a>6.6.7. The negation pseudo-class</h4>
+
+<p>The negation pseudo-class, <code>:not(<var>X</var>)</code>, is a
+functional notation taking a <a href="#simple-selectors-dfn">simple
+selector</a> (excluding the negation pseudo-class itself and
+pseudo-elements) as an argument. It represents an element that is not
+represented by the argument.
+
+<!-- pseudo-elements are not simple selectors, so the above paragraph
+may be a bit confusing -->
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following CSS selector matches all <code>button</code>
+ elements in an HTML document that are not disabled.</p>
+ <pre>button:not([DISABLED])</pre>
+ <p>The following selector represents all but <code>FOO</code>
+ elements.</p>
+ <pre>*:not(FOO)</pre>
+ <p>The following group of selectors represents all HTML elements
+ except links.</p>
+ <pre>html|*:not(:link):not(:visited)</pre>
+</div>
+
+<p>Default namespace declarations do not affect the argument of the
+negation pseudo-class unless the argument is a universal selector or a
+type selector.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>Assuming that the default namespace is bound to
+ "http://example.com/", the following selector represents all
+ elements that are not in that namespace:</p>
+ <pre>*|*:not(*)</pre>
+ <p>The following CSS selector matches any element being hovered,
+ regardless of its namespace. In particular, it is not limited to
+ only matching elements in the default namespace that are not being
+ hovered, and elements not in the default namespace don't match the
+ rule when they <em>are</em> being hovered.</p>
+ <pre>*|*:not(:hover)</pre>
+</div>
+
+<p class="note"><strong>Note</strong>: the :not() pseudo allows
+useless selectors to be written. For instance <code>:not(*|*)</code>,
+which represents no element at all, or <code>foo:not(bar)</code>,
+which is equivalent to <code>foo</code> but with a higher
+specificity.</p>
+
+<h3><a name=pseudo-elements>7. Pseudo-elements</a></h3>
+
+<p>Pseudo-elements create abstractions about the document tree beyond
+those specified by the document language. For instance, document
+languages do not offer mechanisms to access the first letter or first
+line of an element's content. Pseudo-elements allow designers to refer
+to this otherwise inaccessible information. Pseudo-elements may also
+provide designers a way to refer to content that does not exist in the
+source document (e.g., the <code>::before</code> and
+<code>::after</code> pseudo-elements give access to generated
+content).</p>
+
+<p>A pseudo-element is made of two colons (<code>::</code>) followed
+by the name of the pseudo-element.</p>
+
+<p>This <code>::</code> notation is introduced by the current document
+in order to establish a discrimination between pseudo-classes and
+pseudo-elements. For compatibility with existing style sheets, user
+agents must also accept the previous one-colon notation for
+pseudo-elements introduced in CSS levels 1 and 2 (namely,
+<code>:first-line</code>, <code>:first-letter</code>,
+<code>:before</code> and <code>:after</code>). This compatibility is
+not allowed for the new pseudo-elements introduced in CSS level 3.</p>
+
+<p>Only one pseudo-element may appear per selector, and if present it
+must appear after the sequence of simple selectors that represents the
+<a href="#subject">subjects</a> of the selector. <span class="note">A
+future version of this specification may allow multiple
+pesudo-elements per selector.</span></p>
+
+<h4><a name=first-line>7.1. The ::first-line pseudo-element</a></h4>
+
+<p>The <code>::first-line</code> pseudo-element describes the contents
+of the first formatted line of an element.
+
+<div class="example">
+<p>CSS example:</p>
+<pre>p::first-line { text-transform: uppercase }</pre>
+<p>The above rule means "change the letters of the first line of every
+paragraph to uppercase".</p>
+</div>
+
+<p>The selector <code>p::first-line</code> does not match any real
+HTML element. It does match a pseudo-element that conforming user
+agents will insert at the beginning of every paragraph.</p>
+
+<p>Note that the length of the first line depends on a number of
+factors, including the width of the page, the font size, etc. Thus,
+an ordinary HTML paragraph such as:</p>
+
+<pre>
+&lt;P&gt;This is a somewhat long HTML
+paragraph that will be broken into several
+lines. The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>the lines of which happen to be broken as follows:
+
+<pre>
+THIS IS A SOMEWHAT LONG HTML PARAGRAPH THAT
+will be broken into several lines. The first
+line will be identified by a fictional tag
+sequence. The other lines will be treated as
+ordinary lines in the paragraph.
+</pre>
+
+<p>This paragraph might be "rewritten" by user agents to include the
+<em>fictional tag sequence</em> for <code>::first-line</code>. This
+fictional tag sequence helps to show how properties are inherited.</p>
+
+<pre>
+&lt;P&gt;<b>&lt;P::first-line&gt;</b> This is a somewhat long HTML
+paragraph that <b>&lt;/P::first-line&gt;</b> will be broken into several
+lines. The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>If a pseudo-element breaks up a real element, the desired effect
+can often be described by a fictional tag sequence that closes and
+then re-opens the element. Thus, if we mark up the previous paragraph
+with a <code>span</code> element:</p>
+
+<pre>
+&lt;P&gt;<b>&lt;SPAN class="test"&gt;</b> This is a somewhat long HTML
+paragraph that will be broken into several
+lines.<b>&lt;/SPAN&gt;</b> The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>the user agent could simulate start and end tags for
+<code>span</code> when inserting the fictional tag sequence for
+<code>::first-line</code>.
+
+<pre>
+&lt;P&gt;&lt;P::first-line&gt;<b>&lt;SPAN class="test"&gt;</b> This is a
+somewhat long HTML
+paragraph that will <b>&lt;/SPAN&gt;</b>&lt;/P::first-line&gt;<b>&lt;SPAN class="test"&gt;</b> be
+broken into several
+lines.<b>&lt;/SPAN&gt;</b> The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>In CSS, the <code>::first-line</code> pseudo-element can only be
+attached to a block-level element, an inline-block, a table-caption,
+or a table-cell.</p>
+
+<p><a name="first-formatted-line"></a>The "first formatted line" of an
+element may occur inside a
+block-level descendant in the same flow (i.e., a block-level
+descendant that is not positioned and not a float). E.g., the first
+line of the <code>div</code> in <code>&lt;DIV>&lt;P>This
+line...&lt;/P>&lt/DIV></code> is the first line of the <code>p</code> (assuming
+that both <code>p</code> and <code>div</code> are block-level).
+
+<p>The first line of a table-cell or inline-block cannot be the first
+formatted line of an ancestor element. Thus, in <code>&lt;DIV&gt;&lt;P
+STYLE="display: inline-block">Hello&lt;BR&gt;Goodbye&lt;/P&gt;
+etcetera&lt;/DIV&gt;</code> the first formatted line of the
+<code>div</code> is not the line "Hello".
+
+<p class="note">Note that the first line of the <code>p</code> in this
+fragment: <code>&lt;p&gt&lt;br&gt;First...</code> doesn't contain any
+letters (assuming the default style for <code>br</code> in HTML
+4). The word "First" is not on the first formatted line.
+
+<p>A UA should act as if the fictional start tags of the
+<code>::first-line</code> pseudo-elements were nested just inside the
+innermost enclosing block-level element. (Since CSS1 and CSS2 were
+silent on this case, authors should not rely on this behavior.) Here
+is an example. The fictional tag sequence for</p>
+
+<pre>
+&lt;DIV>
+ &lt;P>First paragraph&lt;/P>
+ &lt;P>Second paragraph&lt;/P>
+&lt;/DIV>
+</pre>
+
+<p>is</p>
+
+<pre>
+&lt;DIV>
+ &lt;P>&lt;DIV::first-line>&lt;P::first-line>First paragraph&lt;/P::first-line>&lt;/DIV::first-line>&lt;/P>
+ &lt;P>&lt;P::first-line>Second paragraph&lt;/P::first-line>&lt;/P>
+&lt;/DIV>
+</pre>
+
+<p>The <code>::first-line</code> pseudo-element is similar to an
+inline-level element, but with certain restrictions. In CSS, the
+following properties apply to a <code>::first-line</code>
+pseudo-element: font properties, color property, background
+properties, 'word-spacing', 'letter-spacing', 'text-decoration',
+'vertical-align', 'text-transform', 'line-height'. UAs may apply other
+properties as well.</p>
+
+
+<h4><a name=first-letter>7.2. The ::first-letter pseudo-element</a></h4>
+
+<p>The <code>::first-letter</code> pseudo-element represents the first
+letter of the first line of a block, if it is not preceded by any
+other content (such as images or inline tables) on its line. The
+::first-letter pseudo-element may be used for "initial caps" and "drop
+caps", which are common typographical effects. This type of initial
+letter is similar to an inline-level element if its 'float' property
+is 'none'; otherwise, it is similar to a floated element.</p>
+
+<p>In CSS, these are the properties that apply to <code>::first-letter</code>
+pseudo-elements: font properties, 'text-decoration', 'text-transform',
+'letter-spacing', 'word-spacing' (when appropriate), 'line-height',
+'float', 'vertical-align' (only if 'float' is 'none'), margin
+properties, padding properties, border properties, color property,
+background properties. UAs may apply other properties as well. To
+allow UAs to render a typographically correct drop cap or initial cap,
+the UA may choose a line-height, width and height based on the shape
+of the letter, unlike for normal elements.</p>
+
+<div class="example">
+<p>Example:</p>
+<p>This example shows a possible rendering of an initial cap. Note
+that the 'line-height' that is inherited by the <code>::first-letter</code>
+pseudo-element is 1.1, but the UA in this example has computed the
+height of the first letter differently, so that it doesn't cause any
+unnecessary space between the first two lines. Also note that the
+fictional start tag of the first letter is inside the <span>span</span>, and thus
+the font weight of the first letter is normal, not bold as the <span>span</span>:
+<pre>
+p { line-height: 1.1 }
+p::first-letter { font-size: 3em; font-weight: normal }
+span { font-weight: bold }
+...
+&lt;p>&lt;span>Het hemelsche&lt;/span> gerecht heeft zich ten lange lesten&lt;br>
+Erbarremt over my en mijn benaeuwde vesten&lt;br>
+En arme burgery, en op mijn volcx gebed&lt;br>
+En dagelix geschrey de bange stad ontzet.
+</pre>
+<div class="figure">
+<p><img src="initial-cap.png" alt="Image illustrating the ::first-letter pseudo-element">
+</div>
+</div>
+
+<div class="example">
+<p>The following CSS will make a drop cap initial letter span about two lines:</p>
+
+<pre>
+&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"&gt;
+&lt;HTML&gt;
+ &lt;HEAD&gt;
+ &lt;TITLE&gt;Drop cap initial letter&lt;/TITLE&gt;
+ &lt;STYLE type="text/css"&gt;
+ P { font-size: 12pt; line-height: 1.2 }
+ P::first-letter { font-size: 200%; font-weight: bold; float: left }
+ SPAN { text-transform: uppercase }
+ &lt;/STYLE&gt;
+ &lt;/HEAD&gt;
+ &lt;BODY&gt;
+ &lt;P&gt;&lt;SPAN&gt;The first&lt;/SPAN&gt; few words of an article
+ in The Economist.&lt;/P&gt;
+ &lt;/BODY&gt;
+&lt;/HTML&gt;
+</pre>
+
+<p>This example might be formatted as follows:</p>
+
+<div class="figure">
+<P><img src="first-letter.gif" alt="Image illustrating the combined effect of the ::first-letter and ::first-line pseudo-elements"></p>
+</div>
+
+<p>The <span class="index-inst" title="fictional tag
+sequence">fictional tag sequence</span> is:</p>
+
+<pre>
+&lt;P&gt;
+&lt;SPAN&gt;
+&lt;P::first-letter&gt;
+T
+&lt;/P::first-letter&gt;he first
+&lt;/SPAN&gt;
+few words of an article in the Economist.
+&lt;/P&gt;
+</pre>
+
+<p>Note that the <code>::first-letter</code> pseudo-element tags abut
+the content (i.e., the initial character), while the ::first-line
+pseudo-element start tag is inserted right after the start tag of the
+block element.</p> </div>
+
+<p>In order to achieve traditional drop caps formatting, user agents
+may approximate font sizes, for example to align baselines. Also, the
+glyph outline may be taken into account when formatting.</p>
+
+<p>Punctuation (i.e, characters defined in Unicode in the "open" (Ps),
+"close" (Pe), "initial" (Pi). "final" (Pf) and "other" (Po)
+punctuation classes), that precedes or follows the first letter should
+be included. <a href="#refsUNICODE">[UNICODE]</a></p>
+
+<div class="figure">
+<P><img src="first-letter2.gif" alt="Quotes that precede the
+first letter should be included."></p>
+</div>
+
+<p>The <code>::first-letter</code> also applies if the first letter is
+in fact a digit, e.g., the "6" in "67 million dollars is a lot of
+money."</p>
+
+<p>In CSS, the <code>::first-letter</code> pseudo-element applies to
+block, list-item, table-cell, table-caption, and inline-block
+elements. <span class="note">A future version of this specification
+may allow this pesudo-element to apply to more element
+types.</span></p>
+
+<p>The <code>::first-letter</code> pseudo-element can be used with all
+such elements that contain text, or that have a descendant in the same
+flow that contains text. A UA should act as if the fictional start tag
+of the ::first-letter pseudo-element is just before the first text of
+the element, even if that first text is in a descendant.</p>
+
+<div class="example">
+<p>Example:</p>
+<p>The fictional tag sequence for this HTMLfragment:
+<pre>&lt;div>
+&lt;p>The first text.</pre>
+<p>is:
+<pre>&lt;div>
+&lt;p>&lt;div::first-letter>&lt;p::first-letter>T&lt;/...>&lt;/...>he first text.</pre>
+</div>
+
+<p>The first letter of a table-cell or inline-block cannot be the
+first letter of an ancestor element. Thus, in <code>&lt;DIV&gt;&lt;P
+STYLE="display: inline-block">Hello&lt;BR&gt;Goodbye&lt;/P&gt;
+etcetera&lt;/DIV&gt;</code> the first letter of the <code>div</code> is not the
+letter "H". In fact, the <code>div</code> doesn't have a first letter.
+
+<p>The first letter must occur on the <a
+href="#first-formatted-line">first formatted line.</a> For example, in
+this fragment: <code>&lt;p&gt&lt;br&gt;First...</code> the first line
+doesn't contain any letters and <code>::first-letter</code> doesn't
+match anything (assuming the default style for <code>br</code> in HTML
+4). In particular, it does not match the "F" of "First."
+
+<p>In CSS, if an element is a list item ('display: list-item'), the
+<code>::first-letter</code> applies to the first letter in the
+principal box after the marker. UAs may ignore
+<code>::first-letter</code> on list items with 'list-style-position:
+inside'. If an element has <code>::before</code> or
+<code>::after</code> content, the <code>::first-letter</code> applies
+to the first letter of the element <em>including</em> that content.
+
+<div class="example">
+<p>Example:</p>
+<p>After the rule 'p::before {content: "Note: "}', the selector
+'p::first-letter' matches the "N" of "Note".</p>
+</div>
+
+<p>Some languages may have specific rules about how to treat certain
+letter combinations. In Dutch, for example, if the letter combination
+"ij" appears at the beginning of a word, both letters should be
+considered within the <code>::first-letter</code> pseudo-element.
+
+<p>If the letters that would form the ::first-letter are not in the
+same element, such as "'T" in <code>&lt;p>'&lt;em>T...</code>, the UA
+may create a ::first-letter pseudo-element from one of the elements,
+both elements, or simply not create a pseudo-element.</p>
+
+<p>Similarly, if the first letter(s) of the block are not at the start
+of the line (for example due to bidirectional reordering), then the UA
+need not create the pseudo-element(s).
+
+<div class="example">
+<p>Example:</p>
+<p><a name="overlapping-example">The following example</a> illustrates
+how overlapping pseudo-elements may interact. The first letter of
+each P element will be green with a font size of '24pt'. The rest of
+the first formatted line will be 'blue' while the rest of the
+paragraph will be 'red'.</p>
+
+<pre>p { color: red; font-size: 12pt }
+p::first-letter { color: green; font-size: 200% }
+p::first-line { color: blue }
+
+&lt;P&gt;Some text that ends up on two lines&lt;/P&gt;</pre>
+
+<p>Assuming that a line break will occur before the word "ends", the
+<span class="index-inst" title="fictional tag sequence">fictional tag
+sequence</span> for this fragment might be:</p>
+
+<pre>&lt;P&gt;
+&lt;P::first-line&gt;
+&lt;P::first-letter&gt;
+S
+&lt;/P::first-letter&gt;ome text that
+&lt;/P::first-line&gt;
+ends up on two lines
+&lt;/P&gt;</pre>
+
+<p>Note that the <code>::first-letter</code> element is inside the <code>::first-line</code>
+element. Properties set on <code>::first-line</code> are inherited by
+<code>::first-letter</code>, but are overridden if the same property is set on
+<code>::first-letter</code>.</p>
+</div>
+
+
+<h4><a name=UIfragments>7.3.</a> <a name=selection>The ::selection pseudo-element</a></h4>
+
+<p>The <code>::selection</code> pseudo-element applies to the portion
+of a document that has been highlighted by the user. This also
+applies, for example, to selected text within an editable text
+field. This pseudo-element should not be confused with the <code><a
+href="#checked">:checked</a></code> pseudo-class (which used to be
+named <code>:selected</code>)
+
+<p>Although the <code>::selection</code> pseudo-element is dynamic in
+nature, and is altered by user action, it is reasonable to expect that
+when a UA re-renders to a static medium (such as a printed page, see
+<a href="#refsCSS21">[CSS21]</a>) which was originally rendered to a
+dynamic medium (like screen), the UA may wish to transfer the current
+<code>::selection</code> state to that other medium, and have all the
+appropriate formatting and rendering take effect as well. This is not
+required &mdash; UAs may omit the <code>::selection</code>
+pseudo-element for static media.
+
+<p>These are the CSS properties that apply to <code>::selection</code>
+pseudo-elements: color, background, cursor (optional), outline
+(optional). The computed value of the 'background-image' property on
+<code>::selection</code> may be ignored.
+
+
+<h4><a name=gen-content>7.4. The ::before and ::after pseudo-elements</a></h4>
+
+<p>The <code>::before</code> and <code>::after</code> pseudo-elements
+can be used to describe generated content before or after an element's
+content. They are explained in CSS 2.1 <a
+href="#refsCSS21">[CSS21]</a>.</p>
+
+<p>When the <code>::first-letter</code> and <code>::first-line</code>
+pseudo-elements are combined with <code>::before</code> and
+<code>::after</code>, they apply to the first letter or line of the
+element including the inserted text.</p>
+
+<h2><a name=combinators>8. Combinators</a></h2>
+
+<h3><a name=descendant-combinators>8.1. Descendant combinator</a></h3>
+
+<p>At times, authors may want selectors to describe an element that is
+the descendant of another element in the document tree (e.g., "an
+<code>EM</code> element that is contained within an <code>H1</code>
+element"). Descendant combinators express such a relationship. A
+descendant combinator is <a href="#whitespace">white space</a> that
+separates two sequences of simple selectors. A selector of the form
+"<code>A B</code>" represents an element <code>B</code> that is an
+arbitrary descendant of some ancestor element <code>A</code>.
+
+<div class="example">
+ <p>Examples:</p>
+ <p>For example, consider the following selector:</p>
+ <pre>h1 em</pre>
+ <p>It represents an <code>em</code> element being the descendant of
+ an <code>h1</code> element. It is a correct and valid, but partial,
+ description of the following fragment:</p>
+ <pre>&lt;h1&gt;This &lt;span class="myclass"&gt;headline
+is &lt;em&gt;very&lt;/em&gt; important&lt;/span&gt;&lt;/h1&gt;</pre>
+ <p>The following selector:</p>
+ <pre>div * p</pre>
+ <p>represents a <code>p</code> element that is a grandchild or later
+ descendant of a <code>div</code> element. Note the whitespace on
+ either side of the "*" is not part of the universal selector; the
+ whitespace is a combinator indicating that the DIV must be the
+ ancestor of some element, and that that element must be an ancestor
+ of the P.</p>
+ <p>The following selector, which combines descendant combinators and
+ <a href="#attribute-selectors">attribute selectors</a>, represents an
+ element that (1) has the <code>href</code> attribute set and (2) is
+ inside a <code>p</code> that is itself inside a <code>div</code>:</p>
+ <pre>div p *[href]</pre>
+</div>
+
+<h3><a name=child-combinators>8.2. Child combinators</a></h3>
+
+<p>A <dfn>child combinator</dfn> describes a childhood relationship
+between two elements. A child combinator is made of the
+&quot;greater-than sign&quot; (<code>&gt;</code>) character and
+separates two sequences of simple selectors.
+
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element that is
+ child of <code>body</code>:</p>
+ <pre>body &gt; p</pre>
+ <p>The following example combines descendant combinators and child
+ combinators.</p>
+ <pre>div ol&gt;li p</pre><!-- LEAVE THOSE SPACES OUT! see below -->
+ <p>It represents a <code>p</code> element that is a descendant of an
+ <code>li</code> element; the <code>li</code> element must be the
+ child of an <code>ol</code> element; the <code>ol</code> element must
+ be a descendant of a <code>div</code>. Notice that the optional white
+ space around the "&gt;" combinator has been left out.</p>
+</div>
+
+<p>For information on selecting the first child of an element, please
+see the section on the <code><a
+href="#structural-pseudos">:first-child</a></code> pseudo-class
+above.</p>
+
+<h3><a name=sibling-combinators>8.3. Sibling combinators</a></h3>
+
+<p>There are two different sibling combinators: the adjacent sibling
+combinator and the general sibling combinator. In both cases,
+non-element nodes (e.g. text between elements) are ignored when
+considering adjacency of elements.</p>
+
+<h4><a name=adjacent-sibling-combinators>8.3.1. Adjacent sibling combinator</a></h4>
+
+<p>The adjacent sibling combinator is made of the &quot;plus
+sign&quot; (U+002B, <code>+</code>) character that separates two
+sequences of simple selectors. The elements represented by the two
+sequences share the same parent in the document tree and the element
+represented by the first sequence immediately precedes the element
+represented by the second one.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element
+ immediately following a <code>math</code> element:</p>
+ <pre>math + p</pre>
+ <p>The following selector is conceptually similar to the one in the
+ previous example, except that it adds an attribute selector &mdash; it
+ adds a constraint to the <code>h1</code> element, that it must have
+ <code>class="opener"</code>:</p>
+ <pre>h1.opener + h2</pre>
+</div>
+
+
+<h4><a name=general-sibling-combinators>8.3.2. General sibling combinator</a></h4>
+
+<p>The general sibling combinator is made of the &quot;tilde&quot;
+(U+007E, <code>~</code>) character that separates two sequences of
+simple selectors. The elements represented by the two sequences share
+the same parent in the document tree and the element represented by
+the first sequence precedes (not necessarily immediately) the element
+represented by the second one.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <pre>h1 ~ pre</pre>
+ <p>represents a <code>pre</code> element following an <code>h1</code>. It
+ is a correct and valid, but partial, description of:</p>
+ <pre>&lt;h1&gt;Definition of the function a&lt;/h1&gt;
+&lt;p&gt;Function a(x) has to be applied to all figures in the table.&lt;/p&gt;
+&lt;pre&gt;function a(x) = 12x/13.5&lt;/pre&gt;</pre>
+</div>
+
+<h2><a name=specificity>9. Calculating a selector's specificity</a></h2>
+
+<p>A selector's specificity is calculated as follows:</p>
+
+<ul>
+ <li>count the number of ID selectors in the selector (= a)</li>
+ <li>count the number of class selectors, attributes selectors, and pseudo-classes in the selector (= b)</li>
+ <li>count the number of element names in the selector (= c)</li>
+ <li>ignore pseudo-elements</li>
+</ul>
+
+<p>Selectors inside <a href="#negation">the negation pseudo-class</a>
+are counted like any other, but the negation itself does not count as
+a pseudo-class.</p>
+
+<p>Concatenating the three numbers a-b-c (in a number system with a
+large base) gives the specificity.</p>
+
+<div class="example">
+<p>Examples:</p>
+<pre>* /* a=0 b=0 c=0 -&gt; specificity = 0 */
+LI /* a=0 b=0 c=1 -&gt; specificity = 1 */
+UL LI /* a=0 b=0 c=2 -&gt; specificity = 2 */
+UL OL+LI /* a=0 b=0 c=3 -&gt; specificity = 3 */
+H1 + *[REL=up] /* a=0 b=1 c=1 -&gt; specificity = 11 */
+UL OL LI.red /* a=0 b=1 c=3 -&gt; specificity = 13 */
+LI.red.level /* a=0 b=2 c=1 -&gt; specificity = 21 */
+#x34y /* a=1 b=0 c=0 -&gt; specificity = 100 */
+#s12:not(FOO) /* a=1 b=0 c=1 -&gt; specificity = 101 */
+</pre>
+</div>
+
+<p class="note"><strong>Note:</strong> the specificity of the styles
+specified in an HTML <code>style</code> attribute is described in CSS
+2.1. <a href="#refsCSS21">[CSS21]</a>.</p>
+
+<h2><a name=w3cselgrammar>10. The grammar of Selectors</a></h2>
+
+<h3><a name=grammar>10.1. Grammar</a></h3>
+
+<p>The grammar below defines the syntax of Selectors. It is globally
+LL(1) and can be locally LL(2) (but note that most UA's should not use
+it directly, since it doesn't express the parsing conventions). The
+format of the productions is optimized for human consumption and some
+shorthand notations beyond Yacc (see <a href="#refsYACC">[YACC]</a>)
+are used:</p>
+
+<ul>
+ <li><b>*</b>: 0 or more
+ <li><b>+</b>: 1 or more
+ <li><b>?</b>: 0 or 1
+ <li><b>|</b>: separates alternatives
+ <li><b>[ ]</b>: grouping </li>
+</ul>
+
+<p>The productions are:</p>
+
+<pre>selectors_group
+ : selector [ COMMA S* selector ]*
+ ;
+
+selector
+ : simple_selector_sequence [ combinator simple_selector_sequence ]*
+ ;
+
+combinator
+ /* combinators can be surrounded by white space */
+ : PLUS S* | GREATER S* | TILDE S* | S+
+ ;
+
+simple_selector_sequence
+ : [ type_selector | universal ]
+ [ HASH | class | attrib | pseudo | negation ]*
+ | [ HASH | class | attrib | pseudo | negation ]+
+ ;
+
+type_selector
+ : [ namespace_prefix ]? element_name
+ ;
+
+namespace_prefix
+ : [ IDENT | '*' ]? '|'
+ ;
+
+element_name
+ : IDENT
+ ;
+
+universal
+ : [ namespace_prefix ]? '*'
+ ;
+
+class
+ : '.' IDENT
+ ;
+
+attrib
+ : '[' S* [ namespace_prefix ]? IDENT S*
+ [ [ PREFIXMATCH |
+ SUFFIXMATCH |
+ SUBSTRINGMATCH |
+ '=' |
+ INCLUDES |
+ DASHMATCH ] S* [ IDENT | STRING ] S*
+ ]? ']'
+ ;
+
+pseudo
+ /* '::' starts a pseudo-element, ':' a pseudo-class */
+ /* Exceptions: :first-line, :first-letter, :before and :after. */
+ /* Note that pseudo-elements are restricted to one per selector and */
+ /* occur only in the last simple_selector_sequence. */
+ : ':' ':'? [ IDENT | functional_pseudo ]
+ ;
+
+functional_pseudo
+ : FUNCTION S* expression ')'
+ ;
+
+expression
+ /* In CSS3, the expressions are identifiers, strings, */
+ /* or of the form "an+b" */
+ : [ [ PLUS | '-' | DIMENSION | NUMBER | STRING | IDENT ] S* ]+
+ ;
+
+negation
+ : NOT S* negation_arg S* ')'
+ ;
+
+negation_arg
+ : type_selector | universal | HASH | class | attrib | pseudo
+ ;</pre>
+
+
+<h3><a name=lex>10.2. Lexical scanner</a></h3>
+
+<p>The following is the <a name=x3>tokenizer</a>, written in Flex (see
+<a href="#refsFLEX">[FLEX]</a>) notation. The tokenizer is
+case-insensitive.</p>
+
+<p>The two occurrences of "\377" represent the highest character
+number that current versions of Flex can deal with (decimal 255). They
+should be read as "\4177777" (decimal 1114111), which is the highest
+possible code point in Unicode/ISO-10646. <a
+href="#refsUNICODE">[UNICODE]</a></p>
+
+<pre>%option case-insensitive
+
+ident [-]?{nmstart}{nmchar}*
+name {nmchar}+
+nmstart [_a-z]|{nonascii}|{escape}
+nonascii [^\0-\177]
+unicode \\[0-9a-f]{1,6}(\r\n|[ \n\r\t\f])?
+escape {unicode}|\\[^\n\r\f0-9a-f]
+nmchar [_a-z0-9-]|{nonascii}|{escape}
+num [0-9]+|[0-9]*\.[0-9]+
+string {string1}|{string2}
+string1 \"([^\n\r\f\\"]|\\{nl}|{nonascii}|{escape})*\"
+string2 \'([^\n\r\f\\']|\\{nl}|{nonascii}|{escape})*\'
+invalid {invalid1}|{invalid2}
+invalid1 \"([^\n\r\f\\"]|\\{nl}|{nonascii}|{escape})*
+invalid2 \'([^\n\r\f\\']|\\{nl}|{nonascii}|{escape})*
+nl \n|\r\n|\r|\f
+w [ \t\r\n\f]*
+
+%%
+
+[ \t\r\n\f]+ return S;
+
+"~=" return INCLUDES;
+"|=" return DASHMATCH;
+"^=" return PREFIXMATCH;
+"$=" return SUFFIXMATCH;
+"*=" return SUBSTRINGMATCH;
+{ident} return IDENT;
+{string} return STRING;
+{ident}"(" return FUNCTION;
+{num} return NUMBER;
+"#"{name} return HASH;
+{w}"+" return PLUS;
+{w}"&gt;" return GREATER;
+{w}"," return COMMA;
+{w}"~" return TILDE;
+":not(" return NOT;
+@{ident} return ATKEYWORD;
+{invalid} return INVALID;
+{num}% return PERCENTAGE;
+{num}{ident} return DIMENSION;
+"&lt;!--" return CDO;
+"--&gt;" return CDC;
+
+"url("{w}{string}{w}")" return URI;
+"url("{w}([!#$%&*-~]|{nonascii}|{escape})*{w}")" return URI;
+U\+[0-9a-f?]{1,6}(-[0-9a-f]{1,6})? return UNICODE_RANGE;
+
+\/\*[^*]*\*+([^/*][^*]*\*+)*\/ /* ignore comments */
+
+. return *yytext;</pre>
+
+
+
+<h2><a name=downlevel>11. Namespaces and down-level clients</a></h2>
+
+<p>An important issue is the interaction of CSS selectors with XML
+documents in web clients that were produced prior to this
+document. Unfortunately, due to the fact that namespaces must be
+matched based on the URI which identifies the namespace, not the
+namespace prefix, some mechanism is required to identify namespaces in
+CSS by their URI as well. Without such a mechanism, it is impossible
+to construct a CSS style sheet which will properly match selectors in
+all cases against a random set of XML documents. However, given
+complete knowledge of the XML document to which a style sheet is to be
+applied, and a limited use of namespaces within the XML document, it
+is possible to construct a style sheet in which selectors would match
+elements and attributes correctly.</p>
+
+<p>It should be noted that a down-level CSS client will (if it
+properly conforms to CSS forward compatible parsing rules) ignore all
+<code>@namespace</code> at-rules, as well as all style rules that make
+use of namespace qualified element type or attribute selectors. The
+syntax of delimiting namespace prefixes in CSS was deliberately chosen
+so that down-level CSS clients would ignore the style rules rather
+than possibly match them incorrectly.</p>
+
+<p>The use of default namespaces in CSS makes it possible to write
+element type selectors that will function in both namespace aware CSS
+clients as well as down-level clients. It should be noted that
+down-level clients may incorrectly match selectors against XML
+elements in other namespaces.</p>
+
+<p>The following are scenarios and examples in which it is possible to
+construct style sheets which would function properly in web clients
+that do not implement this proposal.</p>
+
+<ol>
+ <li>
+
+ <p>The XML document does not use namespaces.</p>
+
+ <ul>
+
+ <li>In this case, it is obviously not necessary to declare or use
+ namespaces in the style sheet. Standard CSS element type and
+ attribute selectors will function adequately in a down-level
+ client.</li>
+
+ <li>In a CSS namespace aware client, the default behavior of
+ element selectors matching without regard to namespace will
+ function properly against all elements, since no namespaces are
+ present. However, the use of specific element type selectors that
+ match only elements that have no namespace ("<code>|name</code>")
+ will guarantee that selectors will match only XML elements that do
+ not have a declared namespace. </li>
+
+ </ul>
+
+ </li>
+
+ <li>
+
+ <p>The XML document defines a single, default namespace used
+ throughout the document. No namespace prefixes are used in element
+ names.</p>
+
+ <ul>
+
+ <li>In this case, a down-level client will function as if
+ namespaces were not used in the XML document at all. Standard CSS
+ element type and attribute selectors will match against all
+ elements. </li>
+
+ </ul>
+
+ </li>
+
+ <li>
+
+ <p>The XML document does <b>not</b> use a default namespace, all
+ namespace prefixes used are known to the style sheet author, and
+ there is a direct mapping between namespace prefixes and namespace
+ URIs. (A given prefix may only be mapped to one namespace URI
+ throughout the XML document; there may be multiple prefixes mapped
+ to the same URI).</p>
+
+ <ul>
+
+ <li>In this case, the down-level client will view and match
+ element type and attribute selectors based on their fully
+ qualified name, not the local part as outlined in the <a
+ href="#typenmsp">Type selectors and Namespaces</a> section. CSS
+ selectors may be declared using an escaped colon "<code>\:</code>"
+ to describe the fully qualified names, e.g.
+ "<code>html\:h1</code>" will match
+ <code>&lt;html:h1&gt;</code>. Selectors using the qualified name
+ will only match XML elements that use the same prefix. Other
+ namespace prefixes used in the XML that are mapped to the same URI
+ will not match as expected unless additional CSS style rules are
+ declared for them.</li>
+
+ <li>Note that selectors declared in this fashion will
+ <em>only</em> match in down-level clients. A CSS namespace aware
+ client will match element type and attribute selectors based on
+ the name's local part. Selectors declared with the fully
+ qualified name will not match (unless there is no namespace prefix
+ in the fully qualified name).</li>
+
+ </ul>
+
+ </li>
+
+ </ol>
+
+<p>In other scenarios: when the namespace prefixes used in the XML are
+not known in advance by the style sheet author; or a combination of
+elements with no namespace are used in conjunction with elements using
+a default namespace; or the same namespace prefix is mapped to
+<em>different</em> namespace URIs within the same document, or in
+different documents; it is impossible to construct a CSS style sheet
+that will function properly against all elements in those documents,
+unless, the style sheet is written using a namespace URI syntax (as
+outlined in this document or similar) and the document is processed by
+a CSS and XML namespace aware client.</p>
+
+<h2><a name=profiling>12. Profiles</a></h2>
+
+<p>Each specification using Selectors must define the subset of W3C
+Selectors it allows and excludes, and describe the local meaning of
+all the components of that subset.</p>
+
+<p>Non normative examples:
+
+<div class="profile">
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>CSS level 1</td></tr>
+ <tr>
+ <th>Accepts</th>
+ <td>type selectors<br>class selectors<br>ID selectors<br>:link,
+ :visited and :active pseudo-classes<br>descendant combinator
+ <br>::first-line and ::first-letter pseudo-elements</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>
+
+<p>universal selector<br>attribute selectors<br>:hover and :focus
+ pseudo-classes<br>:target pseudo-class<br>:lang() pseudo-class<br>all UI
+ element states pseudo-classes<br>all structural
+ pseudo-classes<br>negation pseudo-class<br>all
+ UI element fragments pseudo-elements<br>::before and ::after
+ pseudo-elements<br>child combinators<br>sibling combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>only one class selector allowed per sequence of simple
+ selectors</td></tr></tbody></table><br><br>
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>CSS level 2</td></tr>
+ <tr>
+ <th>Accepts</th>
+ <td>type selectors<br>universal selector<br>attribute presence and
+ values selectors<br>class selectors<br>ID selectors<br>:link, :visited,
+ :active, :hover, :focus, :lang() and :first-child pseudo-classes
+ <br>descendant combinator<br>child combinator<br>adjacent sibling
+ combinator<br>::first-line and ::first-letter pseudo-elements<br>::before
+ and ::after pseudo-elements</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>
+
+<p>content selectors<br>substring matching attribute
+ selectors<br>:target pseudo-classes<br>all UI element
+ states pseudo-classes<br>all structural pseudo-classes other
+ than :first-child<br>negation pseudo-class<br>all UI element
+ fragments pseudo-elements<br>general sibling combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>more than one class selector per sequence of simple selectors (CSS1
+ constraint) allowed</td></tr></tbody></table>
+
+<p>In CSS, selectors express pattern matching rules that determine which style
+rules apply to elements in the document tree.
+
+<p>The following selector (CSS level 2) will <b>match</b> all anchors <code>a</code>
+with attribute <code>name</code> set inside a section 1 header <code>h1</code>:
+<pre>h1 a[name]</pre>
+
+<p>All CSS declarations attached to such a selector are applied to elements
+matching it. </div>
+
+<div class="profile">
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>STTS 3</td>
+ </tr>
+ <tr>
+ <th>Accepts</th>
+ <td>
+
+<p>type selectors<br>universal selectors<br>attribute selectors<br>class
+ selectors<br>ID selectors<br>all structural pseudo-classes<br>
+ all combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>non-accepted pseudo-classes<br>pseudo-elements<br></td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>some selectors and combinators are not allowed in fragment
+ descriptions on the right side of STTS declarations.</td></tr></tbody></table>
+<form>
+<input type="text" name="test10"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+</form>
+
+<p>Selectors can be used in STTS 3 in two different
+ manners:
+<ol>
+ <li>a selection mechanism equivalent to CSS selection mechanism: declarations
+ attached to a given selector are applied to elements matching that selector,
+ <li>fragment descriptions that appear on the right side of declarations.
+</li></ol></div>
+
+<h2><a name=Conformance></a>13. Conformance and requirements</h2>
+
+<p>This section defines conformance with the present specification only.
+
+<p>The inability of a user agent to implement part of this specification due to
+the limitations of a particular device (e.g., non interactive user agents will
+probably not implement dynamic pseudo-classes because they make no sense without
+interactivity) does not imply non-conformance.
+
+<p>All specifications reusing Selectors must contain a <a
+href="#profiling">Profile</a> listing the
+subset of Selectors it accepts or excludes, and describing the constraints
+it adds to the current specification.
+
+<p>Invalidity is caused by a parsing error, e.g. an unrecognized token or a token
+which is not allowed at the current parsing point.
+
+<p>User agents must observe the rules for handling parsing errors:
+<ul>
+ <li>a simple selector containing an undeclared namespace prefix is invalid</li>
+ <li>a selector containing an invalid simple selector, an invalid combinator
+ or an invalid token is invalid. </li>
+ <li>a group of selectors containing an invalid selector is invalid.</li>
+</ul>
+
+<p class="foo test10 bar">Specifications reusing Selectors must define how to handle parsing
+errors. (In the case of CSS, the entire rule in which the selector is
+used is dropped.)</p>
+
+<!-- Apparently all these references are out of date:
+<p>Implementations of this specification must behave as
+"recipients of text data" as defined by <a href="#refsCWWW">[CWWW]</a>
+when parsing selectors and attempting matches. (In particular,
+implementations must assume the data is normalized and must not
+normalize it.) Normative rules for matching strings are defined in
+<a href="#refsCWWW">[CWWW]</a> and <a
+href="#refsUNICODE">[UNICODE]</a> and apply to implementations of this
+specification.</p>-->
+
+<h2><a name=Tests></a>14. Tests</h2>
+
+<p>This specification has <a
+href="http://www.w3.org/Style/CSS/Test/CSS3/Selectors/current/">a test
+suite</a> allowing user agents to verify their basic conformance to
+the specification. This test suite does not pretend to be exhaustive
+and does not cover all possible combined cases of Selectors.</p>
+
+<h2><a name=ACKS></a>15. Acknowledgements</h2>
+
+<p>The CSS working group would like to thank everyone who has sent
+comments on this specification over the years.</p>
+
+<p>The working group would like to extend special thanks to Donna
+McManus, Justin Baker, Joel Sklar, and Molly Ives Brower who perfermed
+the final editorial review.</p>
+
+<h2><a name=references>16. References</a></h2>
+
+<dl class="refs">
+
+ <dt>[CSS1]
+ <dd><a name=refsCSS1></a> Bert Bos, H&aring;kon Wium Lie; "<cite>Cascading Style Sheets, level 1</cite>", W3C Recommendation, 17 Dec 1996, revised 11 Jan 1999
+ <dd>(<code><a href="http://www.w3.org/TR/REC-CSS1">http://www.w3.org/TR/REC-CSS1</a></code>)
+
+ <dt>[CSS21]
+ <dd><a name=refsCSS21></a> Bert Bos, Tantek &Ccedil;elik, Ian Hickson, H&aring;kon Wium Lie, editors; "<cite>Cascading Style Sheets, level 2 revision 1</cite>", W3C Working Draft, 13 June 2005
+ <dd>(<code><a href="http://www.w3.org/TR/CSS21">http://www.w3.org/TR/CSS21</a></code>)
+
+ <dt>[CWWW]
+ <dd><a name=refsCWWW></a> Martin J. D&uuml;rst, Fran&ccedil;ois Yergeau, Misha Wolf, Asmus Freytag, Tex Texin, editors; "<cite>Character Model for the World Wide Web</cite>", W3C Recommendation, 15 February 2005
+ <dd>(<code><a href="http://www.w3.org/TR/charmod/">http://www.w3.org/TR/charmod/</a></code>)
+
+ <dt>[FLEX]
+ <dd><a name="refsFLEX"></a> "<cite>Flex: The Lexical Scanner Generator</cite>", Version 2.3.7, ISBN 1882114213
+
+ <dt>[HTML4]
+ <dd><a name="refsHTML4"></a> Dave Ragget, Arnaud Le Hors, Ian Jacobs, editors; "<cite>HTML 4.01 Specification</cite>", W3C Recommendation, 24 December 1999
+ <dd>(<a href="http://www.w3.org/TR/html4/"><code>http://www.w3.org/TR/html4/</code></a>)
+
+ <dt>[MATH]
+ <dd><a name="refsMATH"></a> Patrick Ion, Robert Miner, editors; "<cite>Mathematical Markup Language (MathML) 1.01</cite>", W3C Recommendation, revision of 7 July 1999
+ <dd>(<code><a href="http://www.w3.org/TR/REC-MathML/">http://www.w3.org/TR/REC-MathML/</a></code>)
+
+ <dt>[RFC3066]
+ <dd><a name="refsRFC3066"></a> H. Alvestrand; "<cite>Tags for the Identification of Languages</cite>", Request for Comments 3066, January 2001
+ <dd>(<a href="http://www.ietf.org/rfc/rfc3066.txt"><code>http://www.ietf.org/rfc/rfc3066.txt</code></a>)
+
+ <dt>[STTS]
+ <dd><a name=refsSTTS></a> Daniel Glazman; "<cite>Simple Tree Transformation Sheets 3</cite>", Electricit&eacute; de France, submission to the W3C, 11 November 1998
+ <dd>(<code><a href="http://www.w3.org/TR/NOTE-STTS3">http://www.w3.org/TR/NOTE-STTS3</a></code>)
+
+ <dt>[SVG]
+ <dd><a name="refsSVG"></a> Jon Ferraiolo, &#34276;&#27810; &#28147;, Dean Jackson, editors; "<cite>Scalable Vector Graphics (SVG) 1.1 Specification</cite>", W3C Recommendation, 14 January 2003
+ <dd>(<code><a href="http://www.w3.org/TR/SVG/">http://www.w3.org/TR/SVG/</a></code>)
+
+ <dt>[UNICODE]</dt>
+ <dd><a name="refsUNICODE"></a> <cite><a
+ href="http://www.unicode.org/versions/Unicode4.1.0/">The Unicode Standard, Version 4.1</a></cite>, The Unicode Consortium. Boston, MA, Addison-Wesley, March 2005. ISBN 0-321-18578-1, as amended by <a href="http://www.unicode.org/versions/Unicode4.0.1/">Unicode 4.0.1</a> and <a href="http://www.unicode.org/versions/Unicode4.1.0/">Unicode 4.1.0</a>.
+ <dd>(<code><a href="http://www.unicode.org/versions/">http://www.unicode.org/versions/</a></code>)</dd>
+
+ <dt>[XML10]
+ <dd><a name="refsXML10"></a> Tim Bray, Jean Paoli, C. M. Sperberg-McQueen, Eve Maler, Fran&ccedil;ois Yergeau, editors; "<cite>Extensible Markup Language (XML) 1.0 (Third Edition)</cite>", W3C Recommendation, 4 February 2004
+ <dd>(<a href="http://www.w3.org/TR/REC-xml/"><code>http://www.w3.org/TR/REC-xml/</code></a>)
+
+ <dt>[XMLNAMES]
+ <dd><a name="refsXMLNAMES"></a> Tim Bray, Dave Hollander, Andrew Layman, editors; "<cite>Namespaces in XML</cite>", W3C Recommendation, 14 January 1999
+ <dd>(<a href="http://www.w3.org/TR/REC-xml-names/"><code>http://www.w3.org/TR/REC-xml-names/</code></a>)
+
+ <dt>[YACC]
+ <dd><a name="refsYACC"></a> S. C. Johnson; "<cite>YACC &mdash; Yet another compiler compiler</cite>", Technical Report, Murray Hill, 1975
+
+</dl>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/dromaeo-3d-cube.html b/testing/talos/talos/tests/dromaeo/tests/dromaeo-3d-cube.html
new file mode 100644
index 0000000000..cb0d8966e0
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/dromaeo-3d-cube.html
@@ -0,0 +1,340 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script>
+// 3D Cube Rotation
+// http://www.speich.net/computer/moztesting/3d.htm
+// Created by Simon Speich
+
+var Q = new Array();
+var MTrans = new Array(); // transformation matrix
+var MQube = new Array(); // position information of qube
+var I = new Array(); // entity matrix
+var Origin = new Object();
+var Testing = new Object();
+var LoopTimer;
+
+var DisplArea = new Object();
+DisplArea.Width = 300;
+DisplArea.Height = 300;
+
+function DrawLine(From, To) {
+ var x1 = From.V[0];
+ var x2 = To.V[0];
+ var y1 = From.V[1];
+ var y2 = To.V[1];
+ var dx = Math.abs(x2 - x1);
+ var dy = Math.abs(y2 - y1);
+ var x = x1;
+ var y = y1;
+ var IncX1, IncY1;
+ var IncX2, IncY2;
+ var Den;
+ var Num;
+ var NumAdd;
+ var NumPix;
+
+ if (x2 >= x1) { IncX1 = 1; IncX2 = 1; }
+ else { IncX1 = -1; IncX2 = -1; }
+ if (y2 >= y1) { IncY1 = 1; IncY2 = 1; }
+ else { IncY1 = -1; IncY2 = -1; }
+ if (dx >= dy) {
+ IncX1 = 0;
+ IncY2 = 0;
+ Den = dx;
+ Num = dx / 2;
+ NumAdd = dy;
+ NumPix = dx;
+ }
+ else {
+ IncX2 = 0;
+ IncY1 = 0;
+ Den = dy;
+ Num = dy / 2;
+ NumAdd = dx;
+ NumPix = dy;
+ }
+
+ NumPix = Math.round(Q.LastPx + NumPix);
+
+ var i = Q.LastPx;
+ for (; i < NumPix; i++) {
+ Num += NumAdd;
+ if (Num >= Den) {
+ Num -= Den;
+ x += IncX1;
+ y += IncY1;
+ }
+ x += IncX2;
+ y += IncY2;
+ }
+ Q.LastPx = NumPix;
+}
+
+function CalcCross(V0, V1) {
+ var Cross = new Array();
+ Cross[0] = V0[1]*V1[2] - V0[2]*V1[1];
+ Cross[1] = V0[2]*V1[0] - V0[0]*V1[2];
+ Cross[2] = V0[0]*V1[1] - V0[1]*V1[0];
+ return Cross;
+}
+
+function CalcNormal(V0, V1, V2) {
+ var A = new Array(); var B = new Array();
+ for (var i = 0; i < 3; i++) {
+ A[i] = V0[i] - V1[i];
+ B[i] = V2[i] - V1[i];
+ }
+ A = CalcCross(A, B);
+ var Length = Math.sqrt(A[0]*A[0] + A[1]*A[1] + A[2]*A[2]);
+ for (var i = 0; i < 3; i++) A[i] = A[i] / Length;
+ A[3] = 1;
+ return A;
+}
+
+function CreateP(X,Y,Z) {
+ this.V = [X,Y,Z,1];
+}
+
+// mulitplies two matrices
+function MMulti(M1, M2) {
+ var M = [[],[],[],[]];
+ var i = 0;
+ var j = 0;
+ for (; i < 4; i++) {
+ j = 0;
+ for (; j < 4; j++) M[i][j] = M1[i][0] * M2[0][j] + M1[i][1] * M2[1][j] + M1[i][2] * M2[2][j] + M1[i][3] * M2[3][j];
+ }
+ return M;
+}
+
+//multiplies matrix with vector
+function VMulti(M, V) {
+ var Vect = new Array();
+ var i = 0;
+ for (;i < 4; i++) Vect[i] = M[i][0] * V[0] + M[i][1] * V[1] + M[i][2] * V[2] + M[i][3] * V[3];
+ return Vect;
+}
+
+function VMulti2(M, V) {
+ var Vect = new Array();
+ var i = 0;
+ for (;i < 3; i++) Vect[i] = M[i][0] * V[0] + M[i][1] * V[1] + M[i][2] * V[2];
+ return Vect;
+}
+
+// add to matrices
+function MAdd(M1, M2) {
+ var M = [[],[],[],[]];
+ var i = 0;
+ var j = 0;
+ for (; i < 4; i++) {
+ j = 0;
+ for (; j < 4; j++) M[i][j] = M1[i][j] + M2[i][j];
+ }
+ return M;
+}
+
+function Translate(M, Dx, Dy, Dz) {
+ var T = [
+ [1,0,0,Dx],
+ [0,1,0,Dy],
+ [0,0,1,Dz],
+ [0,0,0,1]
+ ];
+ return MMulti(T, M);
+}
+
+function RotateX(M, Phi) {
+ var a = Phi;
+ a *= Math.PI / 180;
+ var Cos = Math.cos(a);
+ var Sin = Math.sin(a);
+ var R = [
+ [1,0,0,0],
+ [0,Cos,-Sin,0],
+ [0,Sin,Cos,0],
+ [0,0,0,1]
+ ];
+ return MMulti(R, M);
+}
+
+function RotateY(M, Phi) {
+ var a = Phi;
+ a *= Math.PI / 180;
+ var Cos = Math.cos(a);
+ var Sin = Math.sin(a);
+ var R = [
+ [Cos,0,Sin,0],
+ [0,1,0,0],
+ [-Sin,0,Cos,0],
+ [0,0,0,1]
+ ];
+ return MMulti(R, M);
+}
+
+function RotateZ(M, Phi) {
+ var a = Phi;
+ a *= Math.PI / 180;
+ var Cos = Math.cos(a);
+ var Sin = Math.sin(a);
+ var R = [
+ [Cos,-Sin,0,0],
+ [Sin,Cos,0,0],
+ [0,0,1,0],
+ [0,0,0,1]
+ ];
+ return MMulti(R, M);
+}
+
+function DrawQube() {
+ // calc current normals
+ var CurN = new Array();
+ var i = 5;
+ Q.LastPx = 0;
+ for (; i > -1; i--) CurN[i] = VMulti2(MQube, Q.Normal[i]);
+ if (CurN[0][2] < 0) {
+ if (!Q.Line[0]) { DrawLine(Q[0], Q[1]); Q.Line[0] = true; };
+ if (!Q.Line[1]) { DrawLine(Q[1], Q[2]); Q.Line[1] = true; };
+ if (!Q.Line[2]) { DrawLine(Q[2], Q[3]); Q.Line[2] = true; };
+ if (!Q.Line[3]) { DrawLine(Q[3], Q[0]); Q.Line[3] = true; };
+ }
+ if (CurN[1][2] < 0) {
+ if (!Q.Line[2]) { DrawLine(Q[3], Q[2]); Q.Line[2] = true; };
+ if (!Q.Line[9]) { DrawLine(Q[2], Q[6]); Q.Line[9] = true; };
+ if (!Q.Line[6]) { DrawLine(Q[6], Q[7]); Q.Line[6] = true; };
+ if (!Q.Line[10]) { DrawLine(Q[7], Q[3]); Q.Line[10] = true; };
+ }
+ if (CurN[2][2] < 0) {
+ if (!Q.Line[4]) { DrawLine(Q[4], Q[5]); Q.Line[4] = true; };
+ if (!Q.Line[5]) { DrawLine(Q[5], Q[6]); Q.Line[5] = true; };
+ if (!Q.Line[6]) { DrawLine(Q[6], Q[7]); Q.Line[6] = true; };
+ if (!Q.Line[7]) { DrawLine(Q[7], Q[4]); Q.Line[7] = true; };
+ }
+ if (CurN[3][2] < 0) {
+ if (!Q.Line[4]) { DrawLine(Q[4], Q[5]); Q.Line[4] = true; };
+ if (!Q.Line[8]) { DrawLine(Q[5], Q[1]); Q.Line[8] = true; };
+ if (!Q.Line[0]) { DrawLine(Q[1], Q[0]); Q.Line[0] = true; };
+ if (!Q.Line[11]) { DrawLine(Q[0], Q[4]); Q.Line[11] = true; };
+ }
+ if (CurN[4][2] < 0) {
+ if (!Q.Line[11]) { DrawLine(Q[4], Q[0]); Q.Line[11] = true; };
+ if (!Q.Line[3]) { DrawLine(Q[0], Q[3]); Q.Line[3] = true; };
+ if (!Q.Line[10]) { DrawLine(Q[3], Q[7]); Q.Line[10] = true; };
+ if (!Q.Line[7]) { DrawLine(Q[7], Q[4]); Q.Line[7] = true; };
+ }
+ if (CurN[5][2] < 0) {
+ if (!Q.Line[8]) { DrawLine(Q[1], Q[5]); Q.Line[8] = true; };
+ if (!Q.Line[5]) { DrawLine(Q[5], Q[6]); Q.Line[5] = true; };
+ if (!Q.Line[9]) { DrawLine(Q[6], Q[2]); Q.Line[9] = true; };
+ if (!Q.Line[1]) { DrawLine(Q[2], Q[1]); Q.Line[1] = true; };
+ }
+ Q.Line = [false,false,false,false,false,false,false,false,false,false,false,false];
+ Q.LastPx = 0;
+}
+
+function Loop() {
+ if (Testing.LoopCount > Testing.LoopMax) return;
+ var TestingStr = String(Testing.LoopCount);
+ while (TestingStr.length < 3) TestingStr = "0" + TestingStr;
+ MTrans = Translate(I, -Q[8].V[0], -Q[8].V[1], -Q[8].V[2]);
+ MTrans = RotateX(MTrans, 1);
+ MTrans = RotateY(MTrans, 3);
+ MTrans = RotateZ(MTrans, 5);
+ MTrans = Translate(MTrans, Q[8].V[0], Q[8].V[1], Q[8].V[2]);
+ MQube = MMulti(MTrans, MQube);
+ var i = 8;
+ for (; i > -1; i--) {
+ Q[i].V = VMulti(MTrans, Q[i].V);
+ }
+ DrawQube();
+ Testing.LoopCount++;
+ Loop();
+}
+
+function Init(CubeSize) {
+ // init/reset vars
+ Origin.V = [150,150,20,1];
+ Testing.LoopCount = 0;
+ Testing.LoopMax = 50;
+ Testing.TimeMax = 0;
+ Testing.TimeAvg = 0;
+ Testing.TimeMin = 0;
+ Testing.TimeTemp = 0;
+ Testing.TimeTotal = 0;
+ Testing.Init = false;
+
+ // transformation matrix
+ MTrans = [
+ [1,0,0,0],
+ [0,1,0,0],
+ [0,0,1,0],
+ [0,0,0,1]
+ ];
+
+ // position information of qube
+ MQube = [
+ [1,0,0,0],
+ [0,1,0,0],
+ [0,0,1,0],
+ [0,0,0,1]
+ ];
+
+ // entity matrix
+ I = [
+ [1,0,0,0],
+ [0,1,0,0],
+ [0,0,1,0],
+ [0,0,0,1]
+ ];
+
+ // create qube
+ Q[0] = new CreateP(-CubeSize,-CubeSize, CubeSize);
+ Q[1] = new CreateP(-CubeSize, CubeSize, CubeSize);
+ Q[2] = new CreateP( CubeSize, CubeSize, CubeSize);
+ Q[3] = new CreateP( CubeSize,-CubeSize, CubeSize);
+ Q[4] = new CreateP(-CubeSize,-CubeSize,-CubeSize);
+ Q[5] = new CreateP(-CubeSize, CubeSize,-CubeSize);
+ Q[6] = new CreateP( CubeSize, CubeSize,-CubeSize);
+ Q[7] = new CreateP( CubeSize,-CubeSize,-CubeSize);
+
+ // center of gravity
+ Q[8] = new CreateP(0, 0, 0);
+
+ // anti-clockwise edge check
+ Q.Edge = [[0,1,2],[3,2,6],[7,6,5],[4,5,1],[4,0,3],[1,5,6]];
+
+ // calculate squad normals
+ Q.Normal = new Array();
+ for (var i = 0; i < Q.Edge.length; i++) Q.Normal[i] = CalcNormal(Q[Q.Edge[i][0]].V, Q[Q.Edge[i][1]].V, Q[Q.Edge[i][2]].V);
+
+ // line drawn ?
+ Q.Line = [false,false,false,false,false,false,false,false,false,false,false,false];
+
+ // create line pixels
+ Q.NumPx = 9 * 2 * CubeSize;
+ for (var i = 0; i < Q.NumPx; i++) new CreateP(0,0,0);
+
+ MTrans = Translate(MTrans, Origin.V[0], Origin.V[1], Origin.V[2]);
+ MQube = MMulti(MTrans, MQube);
+
+ var i = 0;
+ for (; i < 9; i++) {
+ Q[i].V = VMulti(MTrans, Q[i].V);
+ }
+ DrawQube();
+ Testing.Init = true;
+ Loop();
+}
+
+window.onload = function(){ startTest("dromaeo-3d-cube", '979cd0f1');
+
+test("Rotate 3D Cube", function(){
+ Init(20);
+});
+
+endTest(); };
+</script>
+</head>
+<body></body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/dromaeo-core-eval.html b/testing/talos/talos/tests/dromaeo/tests/dromaeo-core-eval.html
new file mode 100644
index 0000000000..5b6cd2cee9
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/dromaeo-core-eval.html
@@ -0,0 +1,35 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script>
+window.onload = function(){ startTest("dromaeo-core-eval", 'efec1da2');
+
+// Try to force real results
+var ret, tmp;
+
+// The commands that we'll be evaling
+var cmd = 'var str="";for(var i=0;i<1000;i++){str += "a";}ret = str;';
+
+// TESTS: eval()
+var num = 4;
+
+prep(function(){
+ tmp = cmd;
+
+ for ( var n = 0; n < num; n++ )
+ tmp += tmp;
+});
+
+test( "Normal eval", function(){
+ eval(tmp);
+});
+
+test( "new Function", function(){
+ (new Function(tmp))();
+});
+
+endTest(); };
+</script>
+</head>
+<body></body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/dromaeo-object-array.html b/testing/talos/talos/tests/dromaeo/tests/dromaeo-object-array.html
new file mode 100644
index 0000000000..d45fb36b71
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/dromaeo-object-array.html
@@ -0,0 +1,64 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script>
+window.onload = function(){ startTest("dromaeo-object-array", 'bde4f5f4');
+
+var ret = [], tmp, num = 500;
+var i = 1024;
+
+ // TESTS: Array Building
+
+ test("Array Construction, []", function(){
+ for ( var j = 0; j < i * 15; j++ ) {
+ ret = [];
+ ret.length = i;
+ }
+ });
+
+ test("Array Construction, new Array()", function(){
+ for ( var j = 0; j < i * 10; j++ )
+ ret = new Array(i);
+ });
+
+ test("Array Construction, unshift", function(){
+ ret = [];
+ for ( var j = 0; j < i; j++ )
+ ret.unshift(j);
+ });
+
+ test("Array Construction, splice", function(){
+ ret = [];
+ for ( var j = 0; j < i; j++ )
+ ret.splice(0,0,j);
+ });
+
+ test("Array Deconstruction, shift", function(){
+ var a = ret.slice();
+ for ( var j = 0; j < i; j++ )
+ tmp = a.shift();
+ });
+
+ test("Array Deconstruction, splice", function(){
+ var a = ret.slice();
+ for ( var j = 0; j < i; j++ )
+ tmp = a.splice(0,1);
+ });
+
+ test("Array Construction, push", function(){
+ ret = [];
+ for ( var j = 0; j < i * 25; j++ )
+ ret.push(j);
+ });
+
+ test("Array Deconstruction, pop", function(){
+ var a = ret.slice();
+ for ( var j = 0; j < i * 25; j++ )
+ tmp = a.pop();
+ });
+
+endTest(); };
+</script>
+</head>
+<body></body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/dromaeo-object-regexp.html b/testing/talos/talos/tests/dromaeo/tests/dromaeo-object-regexp.html
new file mode 100644
index 0000000000..80773a5a89
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/dromaeo-object-regexp.html
@@ -0,0 +1,354 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script>
+window.onload = function(){ startTest("dromaeo-object-regexp", 'ceb9b2c4');
+
+// Try to force real results
+var str = [], tmp, ret, re;
+var i = 65536;
+
+for ( var i = 0; i < 16384; i++ )
+ str.push( String.fromCharCode( (25 * Math.random()) + 97 ) );
+
+str = str.join("");
+str += str;
+str += str;
+
+ // TESTS: split
+
+ prep(function(){
+ re = //;
+ tmp = str;
+ });
+
+ test( "Compiled Object Empty Split", function(){
+ for ( var i = 0; i < 100; i++ )
+ ret = tmp.split( re );
+ });
+
+ prep(function(){
+ re = /a/;
+ tmp = str;
+ });
+
+ test( "Compiled Object Char Split", function(){
+ for ( var i = 0; i < 30; i++ )
+ ret = tmp.split( re );
+ });
+
+ prep(function(){
+ re = /.*/;
+ tmp = str;
+ });
+
+ test( "Compiled Object Variable Split", function(){
+ for ( var i = 0; i < 100; i++ )
+ ret = tmp.split( re );
+ });
+
+ // TESTS: Compiled RegExps
+
+ prep(function(){
+ re = /aaaaaaaaaa/g;
+ tmp = str;
+ });
+
+ test( "Compiled Match", function(){
+ for ( var i = 0; i < 100; i++ )
+ ret = tmp.match( re );
+ });
+
+ prep(function(){
+ tmp = str;
+ });
+
+ test( "Compiled Test", function(){
+ for ( var i = 0; i < 100; i++ )
+ ret = re.test( tmp );
+ });
+
+ prep(function(){
+ tmp = str;
+ });
+
+ test( "Compiled Empty Replace", function(){
+ for ( var i = 0; i < 50; i++ )
+ ret = tmp.replace( re, "" );
+ });
+
+ prep(function(){
+ tmp = str;
+ });
+
+ test( "Compiled 12 Char Replace", function(){
+ for ( var i = 0; i < 50; i++ )
+ ret = tmp.replace( re, "asdfasdfasdf" );
+ });
+
+ prep(function(){
+ re = new RegExp("aaaaaaaaaa", "g");
+ tmp = str;
+ });
+
+ test( "Compiled Object Match", function(){
+ for ( var i = 0; i < 100; i++ )
+ ret = tmp.match( re );
+ });
+
+ prep(function(){
+ tmp = str;
+ });
+
+ test( "Compiled Object Test", function(){
+ for ( var i = 0; i < 100; i++ )
+ ret = re.test( tmp );
+ });
+
+ prep(function(){
+ tmp = str;
+ });
+
+ test( "Compiled Object Empty Replace", function(){
+ for ( var i = 0; i < 50; i++ )
+ ret = tmp.replace( re, "" );
+ });
+
+ prep(function(){
+ tmp = str;
+ });
+
+ test( "Compiled Object 12 Char Replace", function(){
+ for ( var i = 0; i < 50; i++ )
+ ret = tmp.replace( re, "asdfasdfasdf" );
+ });
+
+ prep(function(){
+ tmp = str;
+ });
+
+ test( "Compiled Object 12 Char Replace Function", function(){
+ for ( var i = 0; i < 50; i++ )
+ ret = tmp.replace( re, function(all){
+ return "asdfasdfasdf";
+ });
+ });
+
+ // TESTS: Variable Length
+
+ prep(function(){
+ re = /a.*a/;
+ tmp = str;
+ });
+
+ test( "Compiled Variable Match", function(){
+ for ( var i = 0; i < 100; i++ )
+ ret = tmp.match( re );
+ });
+
+ prep(function(){
+ tmp = str;
+ });
+
+ test( "Compiled Variable Test", function(){
+ for ( var i = 0; i < 100; i++ )
+ ret = re.test( tmp );
+ });
+
+ prep(function(){
+ tmp = str;
+ });
+
+ test( "Compiled Variable Empty Replace", function(){
+ for ( var i = 0; i < 50; i++ )
+ ret = tmp.replace( re, "" );
+ });
+
+ prep(function(){
+ tmp = str;
+ });
+
+ test( "Compiled Variable 12 Char Replace", function(){
+ for ( var i = 0; i < 50; i++ )
+ ret = tmp.replace( re, "asdfasdfasdf" );
+ });
+
+ prep(function(){
+ re = new RegExp("aaaaaaaaaa", "g");
+ tmp = str;
+ });
+
+ test( "Compiled Variable Object Match", function(){
+ for ( var i = 0; i < 100; i++ )
+ ret = tmp.match( re );
+ });
+
+ prep(function(){
+ tmp = str;
+ });
+
+ test( "Compiled Variable Object Test", function(){
+ for ( var i = 0; i < 100; i++ )
+ ret = re.test( tmp );
+ });
+
+ prep(function(){
+ tmp = str;
+ });
+
+ test( "Compiled Variable Object Empty Replace", function(){
+ for ( var i = 0; i < 50; i++ )
+ ret = tmp.replace( re, "" );
+ });
+
+ prep(function(){
+ tmp = str;
+ });
+
+ test( "Compiled Variable Object 12 Char Replace", function(){
+ for ( var i = 0; i < 50; i++ )
+ ret = tmp.replace( re, "asdfasdfasdf" );
+ });
+
+ prep(function(){
+ tmp = str;
+ });
+
+ test( "Compiled Variable Object 12 Char Replace Function", function(){
+ for ( var i = 0; i < 50; i++ )
+ ret = tmp.replace( re, function(all){
+ return "asdfasdfasdf";
+ });
+ });
+
+ // TESTS: Capturing
+
+ prep(function(){
+ re = /aa(b)aa/g;
+ tmp = str;
+ });
+
+ test( "Compiled Capture Match", function(){
+ for ( var i = 0; i < 100; i++ )
+ ret = tmp.match( re );
+ });
+
+ prep(function(){
+ tmp = str;
+ });
+
+ test( "Compiled Capture Replace", function(){
+ for ( var i = 0; i < 50; i++ )
+ ret = tmp.replace( re, "asdfasdfasdf" );
+ });
+
+ prep(function(){
+ tmp = str;
+ });
+
+ test( "Compiled Capture Replace with Capture", function(){
+ for ( var i = 0; i < 50; i++ )
+ ret = tmp.replace( re, "asdf\\1asdfasdf" );
+ });
+
+ prep(function(){
+ tmp = str;
+ });
+
+ test( "Compiled Capture Replace with Capture Function", function(){
+ for ( var i = 0; i < 50; i++ )
+ ret = tmp.replace( re, function(all,capture){
+ return "asdf" + capture + "asdfasdf";
+ });
+ });
+
+ prep(function(){
+ tmp = str;
+ });
+
+ test( "Compiled Capture Replace with Upperase Capture Function", function(){
+ for ( var i = 0; i < 50; i++ )
+ ret = tmp.replace( re, function(all,capture){
+ return capture.toUpperCase();
+ });
+ });
+
+ // TESTS: Uncompiled RegExps
+
+ prep(function(){
+ tmp = str;
+ });
+
+ test( "Uncompiled Match", function(){
+ for ( var i = 0; i < 100; i++ )
+ ret = tmp.match( /aaaaaaaaaa/g );
+ });
+
+ prep(function(){
+ tmp = str;
+ });
+
+ test( "Uncompiled Test", function(){
+ for ( var i = 0; i < 100; i++ )
+ ret = (/aaaaaaaaaa/g).test( tmp );
+ });
+
+ prep(function(){
+ tmp = str;
+ });
+
+ test( "Uncompiled Empty Replace", function(){
+ for ( var i = 0; i < 50; i++ )
+ ret = tmp.replace( /aaaaaaaaaa/g, "" );
+ });
+
+ prep(function(){
+ tmp = str;
+ });
+
+ test( "Uncompiled 12 Char Replace", function(){
+ for ( var i = 0; i < 50; i++ )
+ ret = tmp.replace( /aaaaaaaaaa/g, "asdfasdfasdf" );
+ });
+
+ prep(function(){
+ tmp = str;
+ });
+
+ test( "Uncompiled Object Match", function(){
+ for ( var i = 0; i < 100; i++ )
+ ret = tmp.match( new RegExp("aaaaaaaaaa", "g") );
+ });
+
+ prep(function(){
+ tmp = str;
+ });
+
+ test( "Uncompiled Object Test", function(){
+ for ( var i = 0; i < 100; i++ )
+ ret = (new RegExp("aaaaaaaaaa", "g")).test( tmp );
+ });
+
+ prep(function(){
+ tmp = str;
+ });
+
+ test( "Uncompiled Object Empty Replace", function(){
+ for ( var i = 0; i < 50; i++ )
+ ret = tmp.replace( new RegExp("aaaaaaaaaa", "g"), "" );
+ });
+
+ prep(function(){
+ tmp = str;
+ });
+
+ test( "Uncompiled Object 12 Char Replace", function(){
+ for ( var i = 0; i < 50; i++ )
+ ret = tmp.replace( new RegExp("aaaaaaaaaa", "g"), "asdfasdfasdf" );
+ });
+
+endTest(); };
+</script>
+</head>
+<body></body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/dromaeo-object-string.html b/testing/talos/talos/tests/dromaeo/tests/dromaeo-object-string.html
new file mode 100644
index 0000000000..433de1007c
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/dromaeo-object-string.html
@@ -0,0 +1,197 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script>
+window.onload = function(){ startTest("dromaeo-object-string", 'b5657afe');
+
+// Try to force real results
+var ret;
+var num = 80000;
+
+// TESTS: String concatenation
+
+ test( "Concat String", function(){
+ var str = "";
+ for ( var i = 0; i < num; i++ )
+ str += "a";
+ ret = str;
+ });
+
+ test( "Concat String Object", function(){
+ var str = new String();
+ for ( var i = 0; i < num; i++ )
+ str += "a";
+ ret = str;
+ });
+
+ test( "Concat String from charCode", function(){
+ var str = "";
+ for ( var i = 0; i < num / 2; i++ )
+ str += String.fromCharCode(97);
+ ret = str;
+ });
+
+ test( "Array String Join", function(){
+ var str = [];
+ for ( var i = 0; i < num / 2; i++ )
+ str.push("a");
+ ret = str.join("");
+ });
+
+var ostr = [], tmp, num = 5000, tmpstr;
+
+for ( var i = 0; i < 16384; i++ )
+ ostr.push( String.fromCharCode( (25 * Math.random()) + 97 ) );
+
+ostr = ostr.join("");
+ostr += ostr;
+ostr += ostr;
+
+var str;
+var i = 52288;
+
+ prep(function(){
+ str = new String(ostr);
+ });
+
+ // TESTS: split
+ test( "String Split", function(){
+ ret = str.split("");
+ });
+
+ prep(function(){
+ tmpstr = str;
+ tmpstr += tmpstr;
+ tmpstr += tmpstr;
+ tmpstr += tmpstr;
+ tmpstr += tmpstr;
+ });
+
+ test( "String Split on Char", function(){
+ ret = tmpstr.split("a");
+ });
+
+ prep(function(){
+ str += str;
+ });
+
+ // TESTS: characters
+
+ test( "charAt", function(){
+ for ( var j = 0; j < num; j++ ) {
+ ret = str.charAt(0);
+ ret = str.charAt(str.length - 1);
+ ret = str.charAt( 15000 );
+ ret = str.charAt( 12000 );
+ }
+ });
+
+ test( "[Number]", function(){
+ for ( var j = 0; j < num; j++ ) {
+ ret = str[0];
+ ret = str[str.length - 1];
+ ret = str[ 15000 ];
+ ret = str[ 10000 ];
+ ret = str[ 5000 ];
+ }
+ });
+
+ test( "charCodeAt", function(){
+ for ( var j = 0; j < num; j++ ) {
+ ret = str.charCodeAt(0);
+ ret = str.charCodeAt(str.length - 1);
+ ret = str.charCodeAt( 15000 );
+ ret = str.charCodeAt( 10000 );
+ ret = str.charCodeAt( 5000 );
+ }
+ });
+
+ // TESTS: indexOf
+
+ test( "indexOf", function(){
+ for ( var j = 0; j < num; j++ ) {
+ ret = str.indexOf("a");
+ ret = str.indexOf("b");
+ ret = str.indexOf("c");
+ ret = str.indexOf("d");
+ }
+ });
+
+ test( "lastIndexOf", function(){
+ for ( var j = 0; j < num; j++ ) {
+ ret = str.lastIndexOf("a");
+ ret = str.lastIndexOf("b");
+ ret = str.lastIndexOf("c");
+ ret = str.lastIndexOf("d");
+ }
+ });
+
+ // TESTS: slice
+
+ test( "slice", function(){
+ for ( var j = 0; j < num; j++ ) {
+ ret = str.slice(0);
+ ret = str.slice(0,5);
+ ret = str.slice(-1);
+ ret = str.slice(-6,-1);
+ ret = str.slice( 15000, 15005 );
+ ret = str.slice( 12000, -1 );
+ }
+ });
+
+ // TESTS: substr
+
+ test( "substr", function(){
+ for ( var j = 0; j < num; j++ ) {
+ ret = str.substr(0);
+ ret = str.substr(0,5);
+ ret = str.substr(-1);
+ ret = str.substr(-6,1);
+ ret = str.substr( 15000, 5 );
+ ret = str.substr( 12000, 5 );
+ }
+ });
+
+ // TESTS: substring
+
+ test( "substring", function(){
+ for ( var j = 0; j < num; j++ ) {
+ ret = str.substring(0);
+ ret = str.substring(0,5);
+ ret = str.substring(-1);
+ ret = str.substring(-6,-1);
+ ret = str.substring( 15000, 15005 );
+ ret = str.substring( 12000, -1 );
+ }
+ });
+
+ // TESTS: toLower/UpperCase
+
+ test( "toLowerCase", function(){
+ for ( var j = 0; j < num / 1000; j++ ) {
+ ret = str.toLowerCase();
+ }
+ });
+
+ test( "toUpperCase", function(){
+ for ( var j = 0; j < num / 1000; j++ ) {
+ ret = str.toUpperCase();
+ }
+ });
+
+ // TESTS: comparing
+
+ test( "comparing", function(){
+ var tmp = str + "a";
+ for ( var j = 0; j < num / 1000; j++ ) {
+ ret = str == tmp;
+ ret = str < tmp;
+ ret = str > tmp;
+ }
+ });
+
+endTest(); };
+</script>
+</head>
+<body></body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/dromaeo-string-base64.html b/testing/talos/talos/tests/dromaeo/tests/dromaeo-string-base64.html
new file mode 100644
index 0000000000..bb82256a1f
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/dromaeo-string-base64.html
@@ -0,0 +1,155 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script>
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla XML-RPC Client component.
+ *
+ * The Initial Developer of the Original Code is
+ * Digital Creations 2, Inc.
+ * Portions created by the Initial Developer are Copyright (C) 2000
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Martijn Pieters <mj@digicool.com> (original author)
+ * Samuel Sieb <samuel@sieb.net>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+// From: http://lxr.mozilla.org/mozilla/source/extensions/xml-rpc/src/nsXmlRpcClient.js#956
+
+/* Convert data (an array of integers) to a Base64 string. */
+var toBase64Table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
+var base64Pad = '=';
+
+function toBase64(data) {
+ var result = '';
+ var length = data.length;
+ var i;
+ // Convert every three bytes to 4 ascii characters.
+ for (i = 0; i < (length - 2); i += 3) {
+ result += toBase64Table[data.charCodeAt(i) >> 2];
+ result += toBase64Table[((data.charCodeAt(i) & 0x03) << 4) + (data.charCodeAt(i+1) >> 4)];
+ result += toBase64Table[((data.charCodeAt(i+1) & 0x0f) << 2) + (data.charCodeAt(i+2) >> 6)];
+ result += toBase64Table[data.charCodeAt(i+2) & 0x3f];
+ }
+
+ // Convert the remaining 1 or 2 bytes, pad out to 4 characters.
+ if (length%3) {
+ i = length - (length%3);
+ result += toBase64Table[data.charCodeAt(i) >> 2];
+ if ((length%3) == 2) {
+ result += toBase64Table[((data.charCodeAt(i) & 0x03) << 4) + (data.chartCodeAt(i+1) >> 4)];
+ result += toBase64Table[(data.charCodeAt(i+1) & 0x0f) << 2];
+ result += base64Pad;
+ } else {
+ result += toBase64Table[(data.charCodeAt(i) & 0x03) << 4];
+ result += base64Pad + base64Pad;
+ }
+ }
+
+ return result;
+}
+
+/* Convert Base64 data to a string */
+var toBinaryTable = [
+ -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
+ -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
+ -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,62, -1,-1,-1,63,
+ 52,53,54,55, 56,57,58,59, 60,61,-1,-1, -1, 0,-1,-1,
+ -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14,
+ 15,16,17,18, 19,20,21,22, 23,24,25,-1, -1,-1,-1,-1,
+ -1,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40,
+ 41,42,43,44, 45,46,47,48, 49,50,51,-1, -1,-1,-1,-1
+];
+
+function base64ToString(data) {
+ var result = '';
+ var leftbits = 0; // number of bits decoded, but yet to be appended
+ var leftdata = 0; // bits decoded, but yet to be appended
+
+ // Convert one by one.
+ for (var i = 0; i < data.length; i++) {
+ var c = toBinaryTable[data.charCodeAt(i) & 0x7f];
+ var padding = (data.charCodeAt(i) == base64Pad.charCodeAt(0));
+ // Skip illegal characters and whitespace
+ if (c == -1) continue;
+
+ // Collect data into leftdata, update bitcount
+ leftdata = (leftdata << 6) | c;
+ leftbits += 6;
+
+ // If we have 8 or more bits, append 8 bits to the result
+ if (leftbits >= 8) {
+ leftbits -= 8;
+ // Append if not padding.
+ if (!padding)
+ result += String.fromCharCode((leftdata >> leftbits) & 0xff);
+ leftdata &= (1 << leftbits) - 1;
+ }
+ }
+
+ // If there are any bits left, the base64 string was corrupted
+ if (leftbits)
+ throw Components.Exception('Corrupted base64 string');
+
+ return result;
+}
+
+window.onload = function(){ startTest("dromaeo-string-base64", '09340c18');
+
+var str = [];
+
+for ( var i = 0; i < 4096; i++ )
+ str.push( String.fromCharCode( (25 * Math.random()) + 97 ) );
+
+str = str.join("");
+str += str;
+str += str;
+
+var base64;
+
+test( "Convert String to Base 64", function(){
+ base64 = toBase64(str);
+});
+
+prep(function(){
+ if ( !base64 )
+ base64 = toBase64(str);
+});
+
+test( "Convert Base 64 to String", function(){
+ if ( str !== base64ToString(base64) ) {
+ throw "String conversion mis-match.";
+ }
+});
+
+endTest(); };
+</script>
+</head>
+<body></body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/jslib-attr-jquery.html b/testing/talos/talos/tests/dromaeo/tests/jslib-attr-jquery.html
new file mode 100644
index 0000000000..1fcda7a6dd
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/jslib-attr-jquery.html
@@ -0,0 +1,2949 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script src="../lib/jquery.js"></script>
+<script>
+window.onload = function(){
+startTest("jslib-attr-jquery", 'd2fbb123');
+
+// Try to force real results
+var ret, tmp, div;
+
+var html = document.body.innerHTML;
+
+ prep(function(){
+ div = jQuery("div");
+ var tmp = document.createElement("div");
+ tmp.innerHTML = html;
+ document.body.appendChild( tmp );
+ });
+
+ test("jQuery - addClass", function(){
+ for ( var i = 0; i < 10; i++ )
+ div.addClass("foo");
+ });
+
+ test("jQuery - removeClass", function(){
+ for ( var i = 0; i < 10; i++ )
+ div.removeClass("foo");
+ });
+
+ test("jQuery - hasClass x10", function(){
+ for ( var i = 0; i < 100; i++ )
+ ret = div.hasClass("test");
+ });
+
+ test("jQuery - attr(class) x100", function(){
+ for ( var i = 0; i < 1000; i++ )
+ ret = div.attr("class");
+ });
+
+ test("jQuery - attr(class,test)", function(){
+ for ( var i = 0; i < 10; i++ )
+ div.attr("class","test");
+ });
+
+ test("jQuery - removeAttribute", function(){
+ for ( var i = 0; i < 10; i++ )
+ div.removeAttr("id");
+ });
+
+endTest();
+};
+</script>
+</head>
+<body>
+ <div class="head">
+ <p><a href="http://www.w3.org/"><img height=48 alt=W3C src="w3c_home.png" width=72></a>
+
+ <h1 id="title">Selectors</h1>
+
+ <h2>W3C Working Draft 15 December 2005</h2>
+
+ <dl>
+
+ <dt>This version:
+
+ <dd><a href="http://www.w3.org/TR/2005/WD-css3-selectors-20051215">
+ http://www.w3.org/TR/2005/WD-css3-selectors-20051215</a>
+
+ <dt>Latest version:
+
+ <dd><a href="http://www.w3.org/TR/css3-selectors">
+ http://www.w3.org/TR/css3-selectors</a>
+
+ <dt>Previous version:
+
+ <dd><a href="http://www.w3.org/TR/2001/CR-css3-selectors-20011113">
+ http://www.w3.org/TR/2001/CR-css3-selectors-20011113</a>
+
+ <dt><a name=editors-list></a>Editors:
+
+ <dd class="vcard"><span class="fn">Daniel Glazman</span> (Invited Expert)</dd>
+
+ <dd class="vcard"><a lang="tr" class="url fn" href="http://www.tantek.com/">Tantek &Ccedil;elik</a> (Invited Expert)
+
+ <dd class="vcard"><a href="mailto:ian@hixie.ch" class="url fn">Ian Hickson</a> (<span
+ class="company"><a href="http://www.google.com/">Google</a></span>)
+
+ <dd class="vcard"><span class="fn">Peter Linss</span> (former editor, <span class="company"><a
+ href="http://www.netscape.com/">Netscape/AOL</a></span>)
+
+ <dd class="vcard"><span class="fn">John Williams</span> (former editor, <span class="company"><a
+ href="http://www.quark.com/">Quark, Inc.</a></span>)
+
+ </dl>
+
+ <p class="copyright"><a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright">
+ Copyright</a> &copy; 2005 <a href="http://www.w3.org/"><abbr
+ title="World Wide Web Consortium">W3C</abbr></a><sup>&reg;</sup>
+ (<a href="http://www.csail.mit.edu/"><abbr title="Massachusetts
+ Institute of Technology">MIT</abbr></a>, <a
+ href="http://www.ercim.org/"><acronym title="European Research
+ Consortium for Informatics and Mathematics">ERCIM</acronym></a>, <a
+ href="http://www.keio.ac.jp/">Keio</a>), All Rights Reserved. W3C
+ <a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">liability</a>,
+ <a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">trademark</a>,
+ <a
+ href="http://www.w3.org/Consortium/Legal/copyright-documents">document
+ use</a> rules apply.
+
+ <hr title="Separator for header">
+
+ </div>
+
+ <h2><a name=abstract></a>Abstract</h2>
+
+ <p><em>Selectors</em> are patterns that match against elements in a
+ tree. Selectors have been optimized for use with HTML and XML, and
+ are designed to be usable in performance-critical code.</p>
+
+ <p><acronym title="Cascading Style Sheets">CSS</acronym> (Cascading
+ Style Sheets) is a language for describing the rendering of <acronym
+ title="Hypertext Markup Language">HTML</acronym> and <acronym
+ title="Extensible Markup Language">XML</acronym> documents on
+ screen, on paper, in speech, etc. CSS uses Selectors for binding
+ style properties to elements in the document. This document
+ describes extensions to the selectors defined in CSS level 2. These
+ extended selectors will be used by CSS level 3.
+
+ <p>Selectors define the following function:</p>
+
+ <pre>expression &#x2217; element &rarr; boolean</pre>
+
+ <p>That is, given an element and a selector, this specification
+ defines whether that element matches the selector.</p>
+
+ <p>These expressions can also be used, for instance, to select a set
+ of elements, or a single element from a set of elements, by
+ evaluating the expression across all the elements in a
+ subtree. <acronym title="Simple Tree Transformation
+ Sheets">STTS</acronym> (Simple Tree Transformation Sheets), a
+ language for transforming XML trees, uses this mechanism. <a href="#refsSTTS">[STTS]</a></p>
+
+ <h2><a name=status></a>Status of this document</h2>
+
+ <p><em>This section describes the status of this document at the
+ time of its publication. Other documents may supersede this
+ document. A list of current W3C publications and the latest revision
+ of this technical report can be found in the <a
+ href="http://www.w3.org/TR/">W3C technical reports index at
+ http://www.w3.org/TR/.</a></em></p>
+
+ <p>This document describes the selectors that already exist in <a
+ href="#refsCSS1"><abbr title="CSS level 1">CSS1</abbr></a> and <a
+ href="#refsCSS21"><abbr title="CSS level 2">CSS2</abbr></a>, and
+ also proposes new selectors for <abbr title="CSS level
+ 3">CSS3</abbr> and other languages that may need them.</p>
+
+ <p>The CSS Working Group doesn't expect that all implementations of
+ CSS3 will have to implement all selectors. Instead, there will
+ probably be a small number of variants of CSS3, called profiles. For
+ example, it may be that only a profile for interactive user agents
+ will include all of the selectors.</p>
+
+ <p>This specification is a last call working draft for the the <a
+ href="http://www.w3.org/Style/CSS/members">CSS Working Group</a>
+ (<a href="/Style/">Style Activity</a>). This
+ document is a revision of the <a
+ href="http://www.w3.org/TR/2001/CR-css3-selectors-20011113/">Candidate
+ Recommendation dated 2001 November 13</a>, and has incorporated
+ implementation feedback received in the past few years. It is
+ expected that this last call will proceed straight to Proposed
+ Recommendation stage since it is believed that interoperability will
+ be demonstrable.</p>
+
+ <p>All persons are encouraged to review and implement this
+ specification and return comments to the (<a
+ href="http://lists.w3.org/Archives/Public/www-style/">archived</a>)
+ public mailing list <a
+ href="http://www.w3.org/Mail/Lists.html#www-style">www-style</a>
+ (see <a href="http://www.w3.org/Mail/Request">instructions</a>). W3C
+ Members can also send comments directly to the CSS Working
+ Group.
+ The deadline for comments is 14 January 2006.</p>
+
+ <p>This is still a draft document and may be updated, replaced, or
+ obsoleted by other documents at any time. It is inappropriate to
+ cite a W3C Working Draft as other than &quot;work in progress&quot;.
+
+ <p>This document may be available in <a
+ href="http://www.w3.org/Style/css3-selectors-updates/translations">translation</a>.
+ The English version of this specification is the only normative
+ version.
+
+ <div class="subtoc">
+
+ <h2 id="test10"><a name=contents>Table of contents</a></h2>
+
+ <ul class="toc">
+ <li class="tocline2"><a href="#context">1. Introduction</a>
+ <ul>
+ <li><a href="#dependencies">1.1. Dependencies</a> </li>
+ <li><a href="#terminology">1.2. Terminology</a> </li>
+ <li><a href="#changesFromCSS2">1.3. Changes from CSS2</a> </li>
+ </ul>
+ <li class="tocline2"><a href="#selectors">2. Selectors</a>
+ <li class="tocline2"><a href="#casesens">3. Case sensitivity</a>
+ <li class="tocline2"><a href="#selector-syntax">4. Selector syntax</a>
+ <li class="tocline2"><a href="#grouping">5. Groups of selectors</a>
+ <li class="tocline2"><a href="#simple-selectors">6. Simple selectors</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#type-selectors">6.1. Type selectors</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#typenmsp">6.1.1. Type selectors and namespaces</a></li>
+ </ul>
+ <li class="tocline3"><a href="#universal-selector">6.2. Universal selector</a>
+ <ul>
+ <li><a href="#univnmsp">6.2.1. Universal selector and namespaces</a></li>
+ </ul>
+ <li class="tocline3"><a href="#attribute-selectors">6.3. Attribute selectors</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#attribute-representation">6.3.1. Representation of attributes and attributes values</a>
+ <li><a href="#attribute-substrings">6.3.2. Substring matching attribute selectors</a>
+ <li class="tocline4"><a href="#attrnmsp">6.3.3. Attribute selectors and namespaces</a>
+ <li class="tocline4"><a href="#def-values">6.3.4. Default attribute values in DTDs</a></li>
+ </ul>
+ <li class="tocline3"><a href="#class-html">6.4. Class selectors</a>
+ <li class="tocline3"><a href="#id-selectors">6.5. ID selectors</a>
+ <li class="tocline3"><a href="#pseudo-classes">6.6. Pseudo-classes</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#dynamic-pseudos">6.6.1. Dynamic pseudo-classes</a>
+ <li class="tocline4"><a href="#target-pseudo">6.6.2. The :target pseudo-class</a>
+ <li class="tocline4"><a href="#lang-pseudo">6.6.3. The :lang() pseudo-class</a>
+ <li class="tocline4"><a href="#UIstates">6.6.4. UI element states pseudo-classes</a>
+ <li class="tocline4"><a href="#structural-pseudos">6.6.5. Structural pseudo-classes</a>
+ <ul>
+ <li><a href="#root-pseudo">:root pseudo-class</a>
+ <li><a href="#nth-child-pseudo">:nth-child() pseudo-class</a>
+ <li><a href="#nth-last-child-pseudo">:nth-last-child()</a>
+ <li><a href="#nth-of-type-pseudo">:nth-of-type() pseudo-class</a>
+ <li><a href="#nth-last-of-type-pseudo">:nth-last-of-type()</a>
+ <li><a href="#first-child-pseudo">:first-child pseudo-class</a>
+ <li><a href="#last-child-pseudo">:last-child pseudo-class</a>
+ <li><a href="#first-of-type-pseudo">:first-of-type pseudo-class</a>
+ <li><a href="#last-of-type-pseudo">:last-of-type pseudo-class</a>
+ <li><a href="#only-child-pseudo">:only-child pseudo-class</a>
+ <li><a href="#only-of-type-pseudo">:only-of-type pseudo-class</a>
+ <li><a href="#empty-pseudo">:empty pseudo-class</a></li>
+ </ul>
+ <li class="tocline4"><a href="#negation">6.6.7. The negation pseudo-class</a></li>
+ </ul>
+ </li>
+ </ul>
+ <li><a href="#pseudo-elements">7. Pseudo-elements</a>
+ <ul>
+ <li><a href="#first-line">7.1. The ::first-line pseudo-element</a>
+ <li><a href="#first-letter">7.2. The ::first-letter pseudo-element</a>
+ <li><a href="#UIfragments">7.3. The ::selection pseudo-element</a>
+ <li><a href="#gen-content">7.4. The ::before and ::after pseudo-elements</a></li>
+ </ul>
+ <li class="tocline2"><a href="#combinators">8. Combinators</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#descendant-combinators">8.1. Descendant combinators</a>
+ <li class="tocline3"><a href="#child-combinators">8.2. Child combinators</a>
+ <li class="tocline3"><a href="#sibling-combinators">8.3. Sibling combinators</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#adjacent-sibling-combinators">8.3.1. Adjacent sibling combinator</a>
+ <li class="tocline4"><a href="#general-sibling-combinators">8.3.2. General sibling combinator</a></li>
+ </ul>
+ </li>
+ </ul>
+ <li class="tocline2"><a href="#specificity">9. Calculating a selector's specificity</a>
+ <li class="tocline2"><a href="#w3cselgrammar">10. The grammar of Selectors</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#grammar">10.1. Grammar</a>
+ <li class="tocline3"><a href="#lex">10.2. Lexical scanner</a></li>
+ </ul>
+ <li class="tocline2"><a href="#downlevel">11. Namespaces and down-level clients</a>
+ <li class="tocline2"><a href="#profiling">12. Profiles</a>
+ <li><a href="#Conformance">13. Conformance and requirements</a>
+ <li><a href="#Tests">14. Tests</a>
+ <li><a href="#ACKS">15. Acknowledgements</a>
+ <li class="tocline2"><a href="#references">16. References</a>
+ </ul>
+
+ </div>
+
+ <h2><a name=context>1. Introduction</a></h2>
+
+ <h3><a name=dependencies></a>1.1. Dependencies</h3>
+
+ <p>Some features of this specification are specific to CSS, or have
+ particular limitations or rules specific to CSS. In this
+ specification, these have been described in terms of CSS2.1. <a
+ href="#refsCSS21">[CSS21]</a></p>
+
+ <h3><a name=terminology></a>1.2. Terminology</h3>
+
+ <p>All of the text of this specification is normative except
+ examples, notes, and sections explicitly marked as
+ non-normative.</p>
+
+ <h3><a name=changesFromCSS2></a>1.3. Changes from CSS2</h3>
+
+ <p><em>This section is non-normative.</em></p>
+
+ <p>The main differences between the selectors in CSS2 and those in
+ Selectors are:
+
+ <ul>
+
+ <li>the list of basic definitions (selector, group of selectors,
+ simple selector, etc.) has been changed; in particular, what was
+ referred to in CSS2 as a simple selector is now called a sequence
+ of simple selectors, and the term "simple selector" is now used for
+ the components of this sequence</li>
+
+ <li>an optional namespace component is now allowed in type element
+ selectors, the universal selector and attribute selectors</li>
+
+ <li>a <a href="#general-sibling-combinators">new combinator</a> has been introduced</li>
+
+ <li>new simple selectors including substring matching attribute
+ selectors, and new pseudo-classes</li>
+
+ <li>new pseudo-elements, and introduction of the "::" convention
+ for pseudo-elements</li>
+
+ <li>the grammar has been rewritten</li>
+
+ <li>profiles to be added to specifications integrating Selectors
+ and defining the set of selectors which is actually supported by
+ each specification</li>
+
+ <li>Selectors are now a CSS3 Module and an independent
+ specification; other specifications can now refer to this document
+ independently of CSS</li>
+
+ <li>the specification now has its own test suite</li>
+
+ </ul>
+
+<h2><a name=selectors></a>2. Selectors</h2>
+
+<p><em>This section is non-normative, as it merely summarizes the
+following sections.</em></p>
+
+<p>A Selector represents a structure. This structure can be used as a
+condition (e.g. in a CSS rule) that determines which elements a
+selector matches in the document tree, or as a flat description of the
+HTML or XML fragment corresponding to that structure.</p>
+
+<p>Selectors may range from simple element names to rich contextual
+representations.</p>
+
+<p>The following table summarizes the Selector syntax:</p>
+
+<table class="selectorsReview">
+ <thead>
+ <tr>
+ <th class="pattern">Pattern</th>
+ <th class="meaning">Meaning</th>
+ <th class="described">Described in section</th>
+ <th class="origin">First defined in CSS level</th></tr>
+ <tbody>
+ <tr>
+ <td class="pattern">*</td>
+ <td class="meaning">any element</td>
+ <td class="described"><a
+ href="#universal-selector">Universal
+ selector</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E</td>
+ <td class="meaning">an element of type E</td>
+ <td class="described"><a
+ href="#type-selectors">Type selector</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E[foo]</td>
+ <td class="meaning">an E element with a "foo" attribute</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value is exactly
+ equal to "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo~="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value is a list of
+ space-separated values, one of which is exactly equal to "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo^="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value begins exactly
+ with the string "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[foo$="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value ends exactly
+ with the string "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[foo*="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value contains the
+ substring "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[hreflang|="en"]</td>
+ <td class="meaning">an E element whose "hreflang" attribute has a hyphen-separated
+ list of values beginning (from the left) with "en"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:root</td>
+ <td class="meaning">an E element, root of the document</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-child(n)</td>
+ <td class="meaning">an E element, the n-th child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-last-child(n)</td>
+ <td class="meaning">an E element, the n-th child of its parent, counting
+ from the last one</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-of-type(n)</td>
+ <td class="meaning">an E element, the n-th sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-last-of-type(n)</td>
+ <td class="meaning">an E element, the n-th sibling of its type, counting
+ from the last one</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:first-child</td>
+ <td class="meaning">an E element, first child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:last-child</td>
+ <td class="meaning">an E element, last child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:first-of-type</td>
+ <td class="meaning">an E element, first sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:last-of-type</td>
+ <td class="meaning">an E element, last sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:only-child</td>
+ <td class="meaning">an E element, only child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:only-of-type</td>
+ <td class="meaning">an E element, only sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:empty</td>
+ <td class="meaning">an E element that has no children (including text
+ nodes)</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:link<br>E:visited</td>
+ <td class="meaning">an E element being the source anchor of a hyperlink of
+ which the target is not yet visited (:link) or already visited
+ (:visited)</td>
+ <td class="described"><a
+ href="#link">The link
+ pseudo-classes</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E:active<br>E:hover<br>E:focus</td>
+ <td class="meaning">an E element during certain user actions</td>
+ <td class="described"><a
+ href="#useraction-pseudos">The user
+ action pseudo-classes</a></td>
+ <td class="origin">1 and 2</td></tr>
+ <tr>
+ <td class="pattern">E:target</td>
+ <td class="meaning">an E element being the target of the referring URI</td>
+ <td class="described"><a
+ href="#target-pseudo">The target
+ pseudo-class</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:lang(fr)</td>
+ <td class="meaning">an element of type E in language "fr" (the document
+ language specifies how language is determined)</td>
+ <td class="described"><a
+ href="#lang-pseudo">The :lang()
+ pseudo-class</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:enabled<br>E:disabled</td>
+ <td class="meaning">a user interface element E which is enabled or
+ disabled</td>
+ <td class="described"><a
+ href="#UIstates">The UI element states
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:checked<!--<br>E:indeterminate--></td>
+ <td class="meaning">a user interface element E which is checked<!-- or in an
+ indeterminate state--> (for instance a radio-button or checkbox)</td>
+ <td class="described"><a
+ href="#UIstates">The UI element states
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E::first-line</td>
+ <td class="meaning">the first formatted line of an E element</td>
+ <td class="described"><a
+ href="#first-line">The ::first-line
+ pseudo-element</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E::first-letter</td>
+ <td class="meaning">the first formatted letter of an E element</td>
+ <td class="described"><a
+ href="#first-letter">The ::first-letter
+ pseudo-element</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E::selection</td>
+ <td class="meaning">the portion of an E element that is currently
+ selected/highlighted by the user</td>
+ <td class="described"><a
+ href="#UIfragments">The UI element
+ fragments pseudo-elements</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E::before</td>
+ <td class="meaning">generated content before an E element</td>
+ <td class="described"><a
+ href="#gen-content">The ::before
+ pseudo-element</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E::after</td>
+ <td class="meaning">generated content after an E element</td>
+ <td class="described"><a
+ href="#gen-content">The ::after
+ pseudo-element</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E.warning</td>
+ <td class="meaning">an E element whose class is
+"warning" (the document language specifies how class is determined).</td>
+ <td class="described"><a
+ href="#class-html">Class
+ selectors</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E#myid</td>
+ <td class="meaning">an E element with ID equal to "myid".</td>
+ <td class="described"><a
+ href="#id-selectors">ID
+ selectors</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E:not(s)</td>
+ <td class="meaning">an E element that does not match simple selector s</td>
+ <td class="described"><a
+ href="#negation">Negation
+ pseudo-class</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E F</td>
+ <td class="meaning">an F element descendant of an E element</td>
+ <td class="described"><a
+ href="#descendant-combinators">Descendant
+ combinator</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E &gt; F</td>
+ <td class="meaning">an F element child of an E element</td>
+ <td class="described"><a
+ href="#child-combinators">Child
+ combinator</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E + F</td>
+ <td class="meaning">an F element immediately preceded by an E element</td>
+ <td class="described"><a
+ href="#adjacent-sibling-combinators">Adjacent sibling combinator</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E ~ F</td>
+ <td class="meaning">an F element preceded by an E element</td>
+ <td class="described"><a
+ href="#general-sibling-combinators">General sibling combinator</a></td>
+ <td class="origin">3</td></tr></tbody></table>
+
+<p>The meaning of each selector is derived from the table above by
+prepending "matches" to the contents of each cell in the "Meaning"
+column.</p>
+
+<h2><a name=casesens>3. Case sensitivity</a></h2>
+
+<p>The case sensitivity of document language element names, attribute
+names, and attribute values in selectors depends on the document
+language. For example, in HTML, element names are case-insensitive,
+but in XML, they are case-sensitive.</p>
+
+<h2><a name=selector-syntax>4. Selector syntax</a></h2>
+
+<p>A <dfn><a name=selector>selector</a></dfn> is a chain of one
+or more <a href="#sequence">sequences of simple selectors</a>
+separated by <a href="#combinators">combinators</a>.</p>
+
+<p>A <dfn><a name=sequence>sequence of simple selectors</a></dfn>
+is a chain of <a href="#simple-selectors-dfn">simple selectors</a>
+that are not separated by a <a href="#combinators">combinator</a>. It
+always begins with a <a href="#type-selectors">type selector</a> or a
+<a href="#universal-selector">universal selector</a>. No other type
+selector or universal selector is allowed in the sequence.</p>
+
+<p>A <dfn><a name=simple-selectors-dfn></a><a
+href="#simple-selectors">simple selector</a></dfn> is either a <a
+href="#type-selectors">type selector</a>, <a
+href="#universal-selector">universal selector</a>, <a
+href="#attribute-selectors">attribute selector</a>, <a
+href="#class-html">class selector</a>, <a
+href="#id-selectors">ID selector</a>, <a
+href="#content-selectors">content selector</a>, or <a
+href="#pseudo-classes">pseudo-class</a>. One <a
+href="#pseudo-elements">pseudo-element</a> may be appended to the last
+sequence of simple selectors.</p>
+
+<p><dfn>Combinators</dfn> are: white space, &quot;greater-than
+sign&quot; (U+003E, <code>&gt;</code>), &quot;plus sign&quot; (U+002B,
+<code>+</code>) and &quot;tilde&quot; (U+007E, <code>~</code>). White
+space may appear between a combinator and the simple selectors around
+it. <a name=whitespace></a>Only the characters "space" (U+0020), "tab"
+(U+0009), "line feed" (U+000A), "carriage return" (U+000D), and "form
+feed" (U+000C) can occur in white space. Other space-like characters,
+such as "em-space" (U+2003) and "ideographic space" (U+3000), are
+never part of white space.</p>
+
+<p>The elements of a document tree that are represented by a selector
+are the <dfn><a name=subject></a>subjects of the selector</dfn>. A
+selector consisting of a single sequence of simple selectors
+represents any element satisfying its requirements. Prepending another
+sequence of simple selectors and a combinator to a sequence imposes
+additional matching constraints, so the subjects of a selector are
+always a subset of the elements represented by the last sequence of
+simple selectors.</p>
+
+<p>An empty selector, containing no sequence of simple selectors and
+no pseudo-element, is an <a href="#Conformance">invalid
+selector</a>.</p>
+
+<h2><a name=grouping>5. Groups of selectors</a></h2>
+
+<p>When several selectors share the same declarations, they may be
+grouped into a comma-separated list. (A comma is U+002C.)</p>
+
+<div class="example">
+<p>CSS examples:</p>
+<p>In this example, we condense three rules with identical
+declarations into one. Thus,</p>
+<pre>h1 { font-family: sans-serif }
+h2 { font-family: sans-serif }
+h3 { font-family: sans-serif }</pre>
+<p>is equivalent to:</p>
+<pre>h1, h2, h3 { font-family: sans-serif }</pre>
+</div>
+
+<p><strong>Warning</strong>: the equivalence is true in this example
+because all the selectors are valid selectors. If just one of these
+selectors were invalid, the entire group of selectors would be
+invalid. This would invalidate the rule for all three heading
+elements, whereas in the former case only one of the three individual
+heading rules would be invalidated.</p>
+
+
+<h2><a name=simple-selectors>6. Simple selectors</a></h2>
+
+<h3><a name=type-selectors>6.1. Type selector</a></h3>
+
+<p>A <dfn>type selector</dfn> is the name of a document language
+element type. A type selector represents an instance of the element
+type in the document tree.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents an <code>h1</code> element in the document tree:</p>
+ <pre>h1</pre>
+</div>
+
+
+<h4><a name=typenmsp>6.1.1. Type selectors and namespaces</a></h4>
+
+<p>Type selectors allow an optional namespace (<a
+href="#refsXMLNAMES">[XMLNAMES]</a>) component. A namespace prefix
+that has been previously declared may be prepended to the element name
+separated by the namespace separator &quot;vertical bar&quot;
+(U+007C, <code>|</code>).</p>
+
+<p>The namespace component may be left empty to indicate that the
+selector is only to represent elements with no declared namespace.</p>
+
+<p>An asterisk may be used for the namespace prefix, indicating that
+the selector represents elements in any namespace (including elements
+with no namespace).</p>
+
+<p>Element type selectors that have no namespace component (no
+namespace separator), represent elements without regard to the
+element's namespace (equivalent to "<code>*|</code>") unless a default
+namespace has been declared. If a default namespace has been declared,
+the selector will represent only elements in the default
+namespace.</p>
+
+<p>A type selector containing a namespace prefix that has not been
+previously declared is an <a href="#Conformance">invalid</a> selector.
+The mechanism for declaring a namespace prefix is left up to the
+language implementing Selectors. In CSS, such a mechanism is defined
+in the General Syntax module.</p>
+
+<p>In a namespace-aware client, element type selectors will only match
+against the <a
+href="http://www.w3.org/TR/REC-xml-names/#NT-LocalPart">local part</a>
+of the element's <a
+href="http://www.w3.org/TR/REC-xml-names/#ns-qualnames">qualified
+name</a>. See <a href="#downlevel">below</a> for notes about matching
+behaviors in down-level clients.</p>
+
+<p>In summary:</p>
+
+<dl>
+ <dt><code>ns|E</code></dt>
+ <dd>elements with name E in namespace ns</dd>
+ <dt><code>*|E</code></dt>
+ <dd>elements with name E in any namespace, including those without any
+ declared namespace</dd>
+ <dt><code>|E</code></dt>
+ <dd>elements with name E without any declared namespace</dd>
+ <dt><code>E</code></dt>
+ <dd>if no default namespace has been specified, this is equivalent to *|E.
+ Otherwise it is equivalent to ns|E where ns is the default namespace.</dd>
+</dl>
+
+<div class="example">
+ <p>CSS examples:</p>
+
+ <pre>@namespace foo url(http://www.example.com);
+ foo|h1 { color: blue }
+ foo|* { color: yellow }
+ |h1 { color: red }
+ *|h1 { color: green }
+ h1 { color: green }</pre>
+
+ <p>The first rule will match only <code>h1</code> elements in the
+ "http://www.example.com" namespace.</p>
+
+ <p>The second rule will match all elements in the
+ "http://www.example.com" namespace.</p>
+
+ <p>The third rule will match only <code>h1</code> elements without
+ any declared namespace.</p>
+
+ <p>The fourth rule will match <code>h1</code> elements in any
+ namespace (including those without any declared namespace).</p>
+
+ <p>The last rule is equivalent to the fourth rule because no default
+ namespace has been defined.</p>
+
+</div>
+
+<h3><a name=universal-selector>6.2. Universal selector</a> </h3>
+
+<p>The <dfn>universal selector</dfn>, written &quot;asterisk&quot;
+(<code>*</code>), represents the qualified name of any element
+type. It represents any single element in the document tree in any
+namespace (including those without any declared namespace) if no
+default namespace has been specified. If a default namespace has been
+specified, see <a href="#univnmsp">Universal selector and
+Namespaces</a> below.</p>
+
+<p>If the universal selector is not the only component of a sequence
+of simple selectors, the <code>*</code> may be omitted.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <ul>
+ <li><code>*[hreflang|=en]</code> and <code>[hreflang|=en]</code> are equivalent,</li>
+ <li><code>*.warning</code> and <code>.warning</code> are equivalent,</li>
+ <li><code>*#myid</code> and <code>#myid</code> are equivalent.</li>
+ </ul>
+</div>
+
+<p class="note"><strong>Note:</strong> it is recommended that the
+<code>*</code>, representing the universal selector, not be
+omitted.</p>
+
+<h4><a name=univnmsp>6.2.1. Universal selector and namespaces</a></h4>
+
+<p>The universal selector allows an optional namespace component. It
+is used as follows:</p>
+
+<dl>
+ <dt><code>ns|*</code></dt>
+ <dd>all elements in namespace ns</dd>
+ <dt><code>*|*</code></dt>
+ <dd>all elements</dd>
+ <dt><code>|*</code></dt>
+ <dd>all elements without any declared namespace</dd>
+ <dt><code>*</code></dt>
+ <dd>if no default namespace has been specified, this is equivalent to *|*.
+ Otherwise it is equivalent to ns|* where ns is the default namespace.</dd>
+</dl>
+
+<p>A universal selector containing a namespace prefix that has not
+been previously declared is an <a href="#Conformance">invalid</a>
+selector. The mechanism for declaring a namespace prefix is left up
+to the language implementing Selectors. In CSS, such a mechanism is
+defined in the General Syntax module.</p>
+
+
+<h3><a name=attribute-selectors>6.3. Attribute selectors</a></h3>
+
+<p>Selectors allow the representation of an element's attributes. When
+a selector is used as an expression to match against an element,
+attribute selectors must be considered to match an element if that
+element has an attribute that matches the attribute represented by the
+attribute selector.</p>
+
+<h4><a name=attribute-representation>6.3.1. Attribute presence and values
+selectors</a></h4>
+
+<p>CSS2 introduced four attribute selectors:</p>
+
+<dl>
+ <dt><code>[att]</code>
+ <dd>Represents an element with the <code>att</code> attribute, whatever the value of
+ the attribute.</dd>
+ <dt><code>[att=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value is exactly
+ "val".</dd>
+ <dt><code>[att~=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value is a <a
+ href="#whitespace">whitespace</a>-separated list of words, one of
+ which is exactly "val". If "val" contains whitespace, it will never
+ represent anything (since the words are <em>separated</em> by
+ spaces).</dd>
+ <dt><code>[att|=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute, its value either
+ being exactly "val" or beginning with "val" immediately followed by
+ "-" (U+002D). This is primarily intended to allow language subcode
+ matches (e.g., the <code>hreflang</code> attribute on the
+ <code>link</code> element in HTML) as described in RFC 3066 (<a
+ href="#refsRFC3066">[RFC3066]</a>). For <code>lang</code> (or
+ <code>xml:lang</code>) language subcode matching, please see <a
+ href="#lang-pseudo">the <code>:lang</code> pseudo-class</a>.</dd>
+</dl>
+
+<p>Attribute values must be identifiers or strings. The
+case-sensitivity of attribute names and values in selectors depends on
+the document language.</p>
+
+<div class="example">
+
+ <p>Examples:</p>
+
+ <p>The following attribute selector represents an <code>h1</code>
+ element that carries the <code>title</code> attribute, whatever its
+ value:</p>
+
+ <pre>h1[title]</pre>
+
+ <p>In the following example, the selector represents a
+ <code>span</code> element whose <code>class</code> attribute has
+ exactly the value "example":</p>
+
+ <pre>span[class="example"]</pre>
+
+ <p>Multiple attribute selectors can be used to represent several
+ attributes of an element, or several conditions on the same
+ attribute. Here, the selector represents a <code>span</code> element
+ whose <code>hello</code> attribute has exactly the value "Cleveland"
+ and whose <code>goodbye</code> attribute has exactly the value
+ "Columbus":</p>
+
+ <pre>span[hello="Cleveland"][goodbye="Columbus"]</pre>
+
+ <p>The following selectors illustrate the differences between "="
+ and "~=". The first selector will represent, for example, the value
+ "copyright copyleft copyeditor" on a <code>rel</code> attribute. The
+ second selector will only represent an <code>a</code> element with
+ an <code>href</code> attribute having the exact value
+ "http://www.w3.org/".</p>
+
+ <pre>a[rel~="copyright"]
+a[href="http://www.w3.org/"]</pre>
+
+ <p>The following selector represents a <code>link</code> element
+ whose <code>hreflang</code> attribute is exactly "fr".</p>
+
+ <pre>link[hreflang=fr]</pre>
+
+ <p>The following selector represents a <code>link</code> element for
+ which the values of the <code>hreflang</code> attribute begins with
+ "en", including "en", "en-US", and "en-cockney":</p>
+
+ <pre>link[hreflang|="en"]</pre>
+
+ <p>Similarly, the following selectors represents a
+ <code>DIALOGUE</code> element whenever it has one of two different
+ values for an attribute <code>character</code>:</p>
+
+ <pre>DIALOGUE[character=romeo]
+DIALOGUE[character=juliet]</pre>
+
+</div>
+
+<h4><a name=attribute-substrings></a>6.3.2. Substring matching attribute
+selectors</h4>
+
+<p>Three additional attribute selectors are provided for matching
+substrings in the value of an attribute:</p>
+
+<dl>
+ <dt><code>[att^=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value begins
+ with the prefix "val".</dd>
+ <dt><code>[att$=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute whose value ends with
+ the suffix "val".</dd>
+ <dt><code>[att*=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute whose value contains
+ at least one instance of the substring "val".</dd>
+</dl>
+
+<p>Attribute values must be identifiers or strings. The
+case-sensitivity of attribute names in selectors depends on the
+document language.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents an HTML <code>object</code>, referencing an
+ image:</p>
+ <pre>object[type^="image/"]</pre>
+ <p>The following selector represents an HTML anchor <code>a</code> with an
+ <code>href</code> attribute whose value ends with ".html".</p>
+ <pre>a[href$=".html"]</pre>
+ <p>The following selector represents an HTML paragraph with a <code>title</code>
+ attribute whose value contains the substring "hello"</p>
+ <pre>p[title*="hello"]</pre>
+</div>
+
+<h4><a name=attrnmsp>6.3.3. Attribute selectors and namespaces</a></h4>
+
+<p>Attribute selectors allow an optional namespace component to the
+attribute name. A namespace prefix that has been previously declared
+may be prepended to the attribute name separated by the namespace
+separator &quot;vertical bar&quot; (<code>|</code>). In keeping with
+the Namespaces in the XML recommendation, default namespaces do not
+apply to attributes, therefore attribute selectors without a namespace
+component apply only to attributes that have no declared namespace
+(equivalent to "<code>|attr</code>"). An asterisk may be used for the
+namespace prefix indicating that the selector is to match all
+attribute names without regard to the attribute's namespace.
+
+<p>An attribute selector with an attribute name containing a namespace
+prefix that has not been previously declared is an <a
+href="#Conformance">invalid</a> selector. The mechanism for declaring
+a namespace prefix is left up to the language implementing Selectors.
+In CSS, such a mechanism is defined in the General Syntax module.
+
+<div class="example">
+ <p>CSS examples:</p>
+ <pre>@namespace foo "http://www.example.com";
+[foo|att=val] { color: blue }
+[*|att] { color: yellow }
+[|att] { color: green }
+[att] { color: green }</pre>
+
+ <p>The first rule will match only elements with the attribute
+ <code>att</code> in the "http://www.example.com" namespace with the
+ value "val".</p>
+
+ <p>The second rule will match only elements with the attribute
+ <code>att</code> regardless of the namespace of the attribute
+ (including no declared namespace).</p>
+
+ <p>The last two rules are equivalent and will match only elements
+ with the attribute <code>att</code> where the attribute is not
+ declared to be in a namespace.</p>
+
+</div>
+
+<h4><a name=def-values>6.3.4. Default attribute values in DTDs</a></h4>
+
+<p>Attribute selectors represent explicitly set attribute values in
+the document tree. Default attribute values may be defined in a DTD or
+elsewhere, but cannot always be selected by attribute
+selectors. Selectors should be designed so that they work even if the
+default values are not included in the document tree.</p>
+
+<p>More precisely, a UA is <em>not</em> required to read an "external
+subset" of the DTD but <em>is</em> required to look for default
+attribute values in the document's "internal subset." (See <a
+href="#refsXML10">[XML10]</a> for definitions of these subsets.)</p>
+
+<p>A UA that recognizes an XML namespace <a
+href="#refsXMLNAMES">[XMLNAMES]</a> is not required to use its
+knowledge of that namespace to treat default attribute values as if
+they were present in the document. (For example, an XHTML UA is not
+required to use its built-in knowledge of the XHTML DTD.)</p>
+
+<p class="note"><strong>Note:</strong> Typically, implementations
+choose to ignore external subsets.</p>
+
+<div class="example">
+<p>Example:</p>
+
+<p>Consider an element EXAMPLE with an attribute "notation" that has a
+default value of "decimal". The DTD fragment might be</p>
+
+<pre class="dtd-example">&lt;!ATTLIST EXAMPLE notation (decimal,octal) "decimal"></pre>
+
+<p>If the style sheet contains the rules</p>
+
+<pre>EXAMPLE[notation=decimal] { /*... default property settings ...*/ }
+EXAMPLE[notation=octal] { /*... other settings...*/ }</pre>
+
+<p>the first rule will not match elements whose "notation" attribute
+is set by default, i.e. not set explicitly. To catch all cases, the
+attribute selector for the default value must be dropped:</p>
+
+<pre>EXAMPLE { /*... default property settings ...*/ }
+EXAMPLE[notation=octal] { /*... other settings...*/ }</pre>
+
+<p>Here, because the selector <code>EXAMPLE[notation=octal]</code> is
+more specific than the tag
+selector alone, the style declarations in the second rule will override
+those in the first for elements that have a "notation" attribute value
+of "octal". Care has to be taken that all property declarations that
+are to apply only to the default case are overridden in the non-default
+cases' style rules.</p>
+
+</div>
+
+<h3><a name=class-html>6.4. Class selectors</a></h3>
+
+<p>Working with HTML, authors may use the period (U+002E,
+<code>.</code>) notation as an alternative to the <code>~=</code>
+notation when representing the <code>class</code> attribute. Thus, for
+HTML, <code>div.value</code> and <code>div[class~=value]</code> have
+the same meaning. The attribute value must immediately follow the
+&quot;period&quot; (<code>.</code>).</p>
+
+<p>UAs may apply selectors using the period (.) notation in XML
+documents if the UA has namespace-specific knowledge that allows it to
+determine which attribute is the &quot;class&quot; attribute for the
+respective namespace. One such example of namespace-specific knowledge
+is the prose in the specification for a particular namespace (e.g. SVG
+1.0 <a href="#refsSVG">[SVG]</a> describes the <a
+href="http://www.w3.org/TR/2001/PR-SVG-20010719/styling.html#ClassAttribute">SVG
+&quot;class&quot; attribute</a> and how a UA should interpret it, and
+similarly MathML 1.01 <a href="#refsMATH">[MATH]</a> describes the <a
+href="http://www.w3.org/1999/07/REC-MathML-19990707/chapter2.html#sec2.3.4">MathML
+&quot;class&quot; attribute</a>.)</p>
+
+<div class="example">
+ <p>CSS examples:</p>
+
+ <p>We can assign style information to all elements with
+ <code>class~="pastoral"</code> as follows:</p>
+
+ <pre>*.pastoral { color: green } /* all elements with class~=pastoral */</pre>
+
+ <p>or just</p>
+
+ <pre>.pastoral { color: green } /* all elements with class~=pastoral */</pre>
+
+ <p>The following assigns style only to H1 elements with
+ <code>class~="pastoral"</code>:</p>
+
+ <pre>H1.pastoral { color: green } /* H1 elements with class~=pastoral */</pre>
+
+ <p>Given these rules, the first H1 instance below would not have
+ green text, while the second would:</p>
+
+ <pre>&lt;H1&gt;Not green&lt;/H1&gt;
+&lt;H1 class="pastoral"&gt;Very green&lt;/H1&gt;</pre>
+
+</div>
+
+<p>To represent a subset of "class" values, each value must be preceded
+by a ".", in any order.</P>
+
+<div class="example">
+
+ <p>CSS example:</p>
+
+ <p>The following rule matches any P element whose "class" attribute
+ has been assigned a list of <a
+ href="#whitespace">whitespace</a>-separated values that includes
+ "pastoral" and "marine":</p>
+
+ <pre>p.pastoral.marine { color: green }</pre>
+
+ <p>This rule matches when <code>class="pastoral blue aqua
+ marine"</code> but does not match for <code>class="pastoral
+ blue"</code>.</p>
+
+</div>
+
+<p class="note"><strong>Note:</strong> Because CSS gives considerable
+power to the "class" attribute, authors could conceivably design their
+own "document language" based on elements with almost no associated
+presentation (such as DIV and SPAN in HTML) and assigning style
+information through the "class" attribute. Authors should avoid this
+practice since the structural elements of a document language often
+have recognized and accepted meanings and author-defined classes may
+not.</p>
+
+<p class="note"><strong>Note:</strong> If an element has multiple
+class attributes, their values must be concatenated with spaces
+between the values before searching for the class. As of this time the
+working group is not aware of any manner in which this situation can
+be reached, however, so this behavior is explicitly non-normative in
+this specification.</p>
+
+<h3><a name=id-selectors>6.5. ID selectors</a></h3>
+
+<p>Document languages may contain attributes that are declared to be
+of type ID. What makes attributes of type ID special is that no two
+such attributes can have the same value in a document, regardless of
+the type of the elements that carry them; whatever the document
+language, an ID typed attribute can be used to uniquely identify its
+element. In HTML all ID attributes are named "id"; XML applications
+may name ID attributes differently, but the same restriction
+applies.</p>
+
+<p>An ID-typed attribute of a document language allows authors to
+assign an identifier to one element instance in the document tree. W3C
+ID selectors represent an element instance based on its identifier. An
+ID selector contains a &quot;number sign&quot; (U+0023,
+<code>#</code>) immediately followed by the ID value, which must be an
+identifier.</p>
+
+<p>Selectors does not specify how a UA knows the ID-typed attribute of
+an element. The UA may, e.g., read a document's DTD, have the
+information hard-coded or ask the user.
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following ID selector represents an <code>h1</code> element
+ whose ID-typed attribute has the value "chapter1":</p>
+ <pre>h1#chapter1</pre>
+ <p>The following ID selector represents any element whose ID-typed
+ attribute has the value "chapter1":</p>
+ <pre>#chapter1</pre>
+ <p>The following selector represents any element whose ID-typed
+ attribute has the value "z98y".</p>
+ <pre>*#z98y</pre>
+</div>
+
+<p class="note"><strong>Note.</strong> In XML 1.0 <a
+href="#refsXML10">[XML10]</a>, the information about which attribute
+contains an element's IDs is contained in a DTD or a schema. When
+parsing XML, UAs do not always read the DTD, and thus may not know
+what the ID of an element is (though a UA may have namespace-specific
+knowledge that allows it to determine which attribute is the ID
+attribute for that namespace). If a style sheet designer knows or
+suspects that a UA may not know what the ID of an element is, he
+should use normal attribute selectors instead:
+<code>[name=p371]</code> instead of <code>#p371</code>. Elements in
+XML 1.0 documents without a DTD do not have IDs at all.</p>
+
+<p>If an element has multiple ID attributes, all of them must be
+treated as IDs for that element for the purposes of the ID
+selector. Such a situation could be reached using mixtures of xml:id,
+DOM3 Core, XML DTDs, and namespace-specific knowledge.</p>
+
+<h3><a name=pseudo-classes>6.6. Pseudo-classes</a></h3>
+
+<p>The pseudo-class concept is introduced to permit selection based on
+information that lies outside of the document tree or that cannot be
+expressed using the other simple selectors.</p>
+
+<p>A pseudo-class always consists of a &quot;colon&quot;
+(<code>:</code>) followed by the name of the pseudo-class and
+optionally by a value between parentheses.</p>
+
+<p>Pseudo-classes are allowed in all sequences of simple selectors
+contained in a selector. Pseudo-classes are allowed anywhere in
+sequences of simple selectors, after the leading type selector or
+universal selector (possibly omitted). Pseudo-class names are
+case-insensitive. Some pseudo-classes are mutually exclusive, while
+others can be applied simultaneously to the same
+element. Pseudo-classes may be dynamic, in the sense that an element
+may acquire or lose a pseudo-class while a user interacts with the
+document.</p>
+
+
+<h4><a name=dynamic-pseudos>6.6.1. Dynamic pseudo-classes</a></h4>
+
+<p>Dynamic pseudo-classes classify elements on characteristics other
+than their name, attributes, or content, in principle characteristics
+that cannot be deduced from the document tree.</p>
+
+<p>Dynamic pseudo-classes do not appear in the document source or
+document tree.</p>
+
+
+<h5>The <a name=link>link pseudo-classes: :link and :visited</a></h5>
+
+<p>User agents commonly display unvisited links differently from
+previously visited ones. Selectors
+provides the pseudo-classes <code>:link</code> and
+<code>:visited</code> to distinguish them:</p>
+
+<ul>
+ <li>The <code>:link</code> pseudo-class applies to links that have
+ not yet been visited.</li>
+ <li>The <code>:visited</code> pseudo-class applies once the link has
+ been visited by the user. </li>
+</ul>
+
+<p>After some amount of time, user agents may choose to return a
+visited link to the (unvisited) ':link' state.</p>
+
+<p>The two states are mutually exclusive.</p>
+
+<div class="example">
+
+ <p>Example:</p>
+
+ <p>The following selector represents links carrying class
+ <code>external</code> and already visited:</p>
+
+ <pre>a.external:visited</pre>
+
+</div>
+
+<p class="note"><strong>Note:</strong> It is possible for style sheet
+authors to abuse the :link and :visited pseudo-classes to determine
+which sites a user has visited without the user's consent.
+
+<p>UAs may therefore treat all links as unvisited links, or implement
+other measures to preserve the user's privacy while rendering visited
+and unvisited links differently.</p>
+
+<h5>The <a name=useraction-pseudos>user action pseudo-classes
+:hover, :active, and :focus</a></h5>
+
+<p>Interactive user agents sometimes change the rendering in response
+to user actions. Selectors provides
+three pseudo-classes for the selection of an element the user is
+acting on.</p>
+
+<ul>
+
+ <li>The <code>:hover</code> pseudo-class applies while the user
+ designates an element with a pointing device, but does not activate
+ it. For example, a visual user agent could apply this pseudo-class
+ when the cursor (mouse pointer) hovers over a box generated by the
+ element. User agents not that do not support <a
+ href="http://www.w3.org/TR/REC-CSS2/media.html#interactive-media-group">interactive
+ media</a> do not have to support this pseudo-class. Some conforming
+ user agents that support <a
+ href="http://www.w3.org/TR/REC-CSS2/media.html#interactive-media-group">interactive
+ media</a> may not be able to support this pseudo-class (e.g., a pen
+ device that does not detect hovering).</li>
+
+ <li>The <code>:active</code> pseudo-class applies while an element
+ is being activated by the user. For example, between the times the
+ user presses the mouse button and releases it.</li>
+
+ <li>The <code>:focus</code> pseudo-class applies while an element
+ has the focus (accepts keyboard or mouse events, or other forms of
+ input). </li>
+
+</ul>
+
+<p>There may be document language or implementation specific limits on
+which elements can become <code>:active</code> or acquire
+<code>:focus</code>.</p>
+
+<p>These pseudo-classes are not mutually exclusive. An element may
+match several pseudo-classes at the same time.</p>
+
+<p>Selectors doesn't define if the parent of an element that is
+':active' or ':hover' is also in that state.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <pre>a:link /* unvisited links */
+a:visited /* visited links */
+a:hover /* user hovers */
+a:active /* active links */</pre>
+ <p>An example of combining dynamic pseudo-classes:</p>
+ <pre>a:focus
+a:focus:hover</pre>
+ <p>The last selector matches <code>a</code> elements that are in
+ the pseudo-class :focus and in the pseudo-class :hover.</p>
+</div>
+
+<p class="note"><strong>Note:</strong> An element can be both ':visited'
+and ':active' (or ':link' and ':active').</p>
+
+<h4><a name=target-pseudo>6.6.2. The target pseudo-class :target</a></h4>
+
+<p>Some URIs refer to a location within a resource. This kind of URI
+ends with a &quot;number sign&quot; (#) followed by an anchor
+identifier (called the fragment identifier).</p>
+
+<p>URIs with fragment identifiers link to a certain element within the
+document, known as the target element. For instance, here is a URI
+pointing to an anchor named <code>section_2</code> in an HTML
+document:</p>
+
+<pre>http://example.com/html/top.html#section_2</pre>
+
+<p>A target element can be represented by the <code>:target</code>
+pseudo-class. If the document's URI has no fragment identifier, then
+the document has no target element.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <pre>p.note:target</pre>
+ <p>This selector represents a <code>p</code> element of class
+ <code>note</code> that is the target element of the referring
+ URI.</p>
+</div>
+
+<div class="example">
+ <p>CSS example:</p>
+ <p>Here, the <code>:target</code> pseudo-class is used to make the
+ target element red and place an image before it, if there is one:</p>
+ <pre>*:target { color : red }
+*:target::before { content : url(target.png) }</pre>
+</div>
+
+<h4><a name=lang-pseudo>6.6.3. The language pseudo-class :lang</a></h4>
+
+<p>If the document language specifies how the human language of an
+element is determined, it is possible to write selectors that
+represent an element based on its language. For example, in HTML <a
+href="#refsHTML4">[HTML4]</a>, the language is determined by a
+combination of the <code>lang</code> attribute, the <code>meta</code>
+element, and possibly by information from the protocol (such as HTTP
+headers). XML uses an attribute called <code>xml:lang</code>, and
+there may be other document language-specific methods for determining
+the language.</p>
+
+<p>The pseudo-class <code>:lang(C)</code> represents an element that
+is in language C. Whether an element is represented by a
+<code>:lang()</code> selector is based solely on the identifier C
+being either equal to, or a hyphen-separated substring of, the
+element's language value, in the same way as if performed by the <a
+href="#attribute-representation">'|='</a> operator in attribute
+selectors. The identifier C does not have to be a valid language
+name.</p>
+
+<p>C must not be empty. (If it is, the selector is invalid.)</p>
+
+<p class="note"><strong>Note:</strong> It is recommended that
+documents and protocols indicate language using codes from RFC 3066 <a
+href="#refsRFC3066">[RFC3066]</a> or its successor, and by means of
+"xml:lang" attributes in the case of XML-based documents <a
+href="#refsXML10">[XML10]</a>. See <a
+href="http://www.w3.org/International/questions/qa-lang-2or3.html">
+"FAQ: Two-letter or three-letter language codes."</a></p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The two following selectors represent an HTML document that is in
+ Belgian, French, or German. The two next selectors represent
+ <code>q</code> quotations in an arbitrary element in Belgian, French,
+ or German.</p>
+ <pre>html:lang(fr-be)
+html:lang(de)
+:lang(fr-be) &gt; q
+:lang(de) &gt; q</pre>
+</div>
+
+<h4><a name=UIstates>6.6.4. The UI element states pseudo-classes</a></h4>
+
+<h5><a name=enableddisabled>The :enabled and :disabled pseudo-classes</a></h5>
+
+<p>The <code>:enabled</code> pseudo-class allows authors to customize
+the look of user interface elements that are enabled &mdash; which the
+user can select or activate in some fashion (e.g. clicking on a button
+with a mouse). There is a need for such a pseudo-class because there
+is no way to programmatically specify the default appearance of say,
+an enabled <code>input</code> element without also specifying what it
+would look like when it was disabled.</p>
+
+<p>Similar to <code>:enabled</code>, <code>:disabled</code> allows the
+author to specify precisely how a disabled or inactive user interface
+element should look.</p>
+
+<p>Most elements will be neither enabled nor disabled. An element is
+enabled if the user can either activate it or transfer the focus to
+it. An element is disabled if it could be enabled, but the user cannot
+presently activate it or transfer focus to it.</p>
+
+
+<h5><a name=checked>The :checked pseudo-class</a></h5>
+
+<p>Radio and checkbox elements can be toggled by the user. Some menu
+items are "checked" when the user selects them. When such elements are
+toggled "on" the <code>:checked</code> pseudo-class applies. The
+<code>:checked</code> pseudo-class initially applies to such elements
+that have the HTML4 <code>selected</code> and <code>checked</code>
+attributes as described in <a
+href="http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.2.1">Section
+17.2.1 of HTML4</a>, but of course the user can toggle "off" such
+elements in which case the <code>:checked</code> pseudo-class would no
+longer apply. While the <code>:checked</code> pseudo-class is dynamic
+in nature, and is altered by user action, since it can also be based
+on the presence of the semantic HTML4 <code>selected</code> and
+<code>checked</code> attributes, it applies to all media.
+
+
+<h5><a name=indeterminate>The :indeterminate pseudo-class</a></h5>
+
+<div class="note">
+
+<p>Radio and checkbox elements can be toggled by the user, but are
+sometimes in an indeterminate state, neither checked nor unchecked.
+This can be due to an element attribute, or DOM manipulation.</p>
+
+<p>A future version of this specification may introduce an
+<code>:indeterminate</code> pseudo-class that applies to such elements.
+<!--While the <code>:indeterminate</code> pseudo-class is dynamic in
+nature, and is altered by user action, since it can also be based on
+the presence of an element attribute, it applies to all media.</p>
+
+<p>Components of a radio-group initialized with no pre-selected choice
+are an example of :indeterminate state.--></p>
+
+</div>
+
+
+<h4><a name=structural-pseudos>6.6.5. Structural pseudo-classes</a></h4>
+
+<p>Selectors introduces the concept of <dfn>structural
+pseudo-classes</dfn> to permit selection based on extra information that lies in
+the document tree but cannot be represented by other simple selectors or
+combinators.
+
+<p>Note that standalone pieces of PCDATA (text nodes in the DOM) are
+not counted when calculating the position of an element in the list of
+children of its parent. When calculating the position of an element in
+the list of children of its parent, the index numbering starts at 1.
+
+
+<h5><a name=root-pseudo>:root pseudo-class</a></h5>
+
+<p>The <code>:root</code> pseudo-class represents an element that is
+the root of the document. In HTML 4, this is always the
+<code>HTML</code> element.
+
+
+<h5><a name=nth-child-pseudo>:nth-child() pseudo-class</a></h5>
+
+<p>The
+<code>:nth-child(<var>a</var><code>n</code>+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings
+<strong>before</strong> it in the document tree, for a given positive
+integer or zero value of <code>n</code>, and has a parent element. In
+other words, this matches the <var>b</var>th child of an element after
+all the children have been split into groups of <var>a</var> elements
+each. For example, this allows the selectors to address every other
+row in a table, and could be used to alternate the color
+of paragraph text in a cycle of four. The <var>a</var> and
+<var>b</var> values must be zero, negative integers or positive
+integers. The index of the first child of an element is 1.
+
+<p>In addition to this, <code>:nth-child()</code> can take
+'<code>odd</code>' and '<code>even</code>' as arguments instead.
+'<code>odd</code>' has the same signification as <code>2n+1</code>,
+and '<code>even</code>' has the same signification as <code>2n</code>.
+
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-child(2n+1) /* represents every odd row of an HTML table */
+tr:nth-child(odd) /* same */
+tr:nth-child(2n) /* represents every even row of an HTML table */
+tr:nth-child(even) /* same */
+
+/* Alternate paragraph colours in CSS */
+p:nth-child(4n+1) { color: navy; }
+p:nth-child(4n+2) { color: green; }
+p:nth-child(4n+3) { color: maroon; }
+p:nth-child(4n+4) { color: purple; }</pre>
+</div>
+
+<p>When <var>a</var>=0, no repeating is used, so for example
+<code>:nth-child(0n+5)</code> matches only the fifth child. When
+<var>a</var>=0, the <var>a</var><code>n</code> part need not be
+included, so the syntax simplifies to
+<code>:nth-child(<var>b</var>)</code> and the last example simplifies
+to <code>:nth-child(5)</code>.
+
+<div class="example">
+<p>Examples:</p>
+<pre>foo:nth-child(0n+1) /* represents an element foo, first child of its parent element */
+foo:nth-child(1) /* same */</pre>
+</div>
+
+<p>When <var>a</var>=1, the number may be omitted from the rule.
+
+<div class="example">
+<p>Examples:</p>
+<p>The following selectors are therefore equivalent:</p>
+<pre>bar:nth-child(1n+0) /* represents all bar elements, specificity (0,1,1) */
+bar:nth-child(n+0) /* same */
+bar:nth-child(n) /* same */
+bar /* same but lower specificity (0,0,1) */</pre>
+</div>
+
+<p>If <var>b</var>=0, then every <var>a</var>th element is picked. In
+such a case, the <var>b</var> part may be omitted.
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-child(2n+0) /* represents every even row of an HTML table */
+tr:nth-child(2n) /* same */</pre>
+</div>
+
+<p>If both <var>a</var> and <var>b</var> are equal to zero, the
+pseudo-class represents no element in the document tree.</p>
+
+<p>The value <var>a</var> can be negative, but only the positive
+values of <var>a</var><code>n</code>+<var>b</var>, for
+<code>n</code>&ge;0, may represent an element in the document
+tree.</p>
+
+<div class="example">
+<p>Example:</p>
+<pre>html|tr:nth-child(-n+6) /* represents the 6 first rows of XHTML tables */</pre>
+</div>
+
+<p>When the value <var>b</var> is negative, the "+" character in the
+expression must be removed (it is effectively replaced by the "-"
+character indicating the negative value of <var>b</var>).</p>
+
+<div class="example">
+<p>Examples:</p>
+<pre>:nth-child(10n-1) /* represents the 9th, 19th, 29th, etc, element */
+:nth-child(10n+9) /* Same */
+:nth-child(10n+-1) /* Syntactically invalid, and would be ignored */</pre>
+</div>
+
+
+<h5><a name=nth-last-child-pseudo>:nth-last-child() pseudo-class</a></h5>
+
+<p>The <code>:nth-last-child(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings
+<strong>after</strong> it in the document tree, for a given positive
+integer or zero value of <code>n</code>, and has a parent element. See
+<code>:nth-child()</code> pseudo-class for the syntax of its argument.
+It also accepts the '<code>even</code>' and '<code>odd</code>' values
+as arguments.
+
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-last-child(-n+2) /* represents the two last rows of an HTML table */
+
+foo:nth-last-child(odd) /* represents all odd foo elements in their parent element,
+ counting from the last one */</pre>
+</div>
+
+
+<h5><a name=nth-of-type-pseudo>:nth-of-type() pseudo-class</a></h5>
+
+<p>The <code>:nth-of-type(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings with the same
+element name <strong>before</strong> it in the document tree, for a
+given zero or positive integer value of <code>n</code>, and has a
+parent element. In other words, this matches the <var>b</var>th child
+of that type after all the children of that type have been split into
+groups of a elements each. See <code>:nth-child()</code> pseudo-class
+for the syntax of its argument. It also accepts the
+'<code>even</code>' and '<code>odd</code>' values.
+
+
+<div class="example">
+<p>CSS example:</p>
+<p>This allows an author to alternate the position of floated images:</p>
+<pre>img:nth-of-type(2n+1) { float: right; }
+img:nth-of-type(2n) { float: left; }</pre>
+</div>
+
+
+<h5><a name=nth-last-of-type-pseudo>:nth-last-of-type() pseudo-class</a></h5>
+
+<p>The <code>:nth-last-of-type(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings with the same
+element name <strong>after</strong> it in the document tree, for a
+given zero or positive integer value of <code>n</code>, and has a
+parent element. See <code>:nth-child()</code> pseudo-class for the
+syntax of its argument. It also accepts the '<code>even</code>' and '<code>odd</code>' values.
+
+
+<div class="example">
+ <p>Example:</p>
+ <p>To represent all <code>h2</code> children of an XHTML
+ <code>body</code> except the first and last, one could use the
+ following selector:</p>
+ <pre>body &gt; h2:nth-of-type(n+2):nth-last-of-type(n+2)</pre>
+ <p>In this case, one could also use <code>:not()</code>, although the
+ selector ends up being just as long:</p>
+ <pre>body &gt; h2:not(:first-of-type):not(:last-of-type)</pre>
+</div>
+
+
+<h5><a name=first-child-pseudo>:first-child pseudo-class</a></h5>
+
+<p>Same as <code>:nth-child(1)</code>. The <code>:first-child</code> pseudo-class
+represents an element that is the first child of some other element.
+
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element that is
+ the first child of a <code>div</code> element:</p>
+ <pre>div &gt; p:first-child</pre>
+ <p>This selector can represent the <code>p</code> inside the
+ <code>div</code> of the following fragment:</p>
+ <pre>&lt;p&gt; The last P before the note.&lt;/p&gt;
+&lt;div class="note"&gt;
+ &lt;p&gt; The first P inside the note.&lt;/p&gt;
+&lt;/div&gt;</pre>but cannot represent the second <code>p</code> in the following
+fragment:
+ <pre>&lt;p&gt; The last P before the note.&lt;/p&gt;
+&lt;div class="note"&gt;
+ &lt;h2&gt; Note &lt;/h2&gt;
+ &lt;p&gt; The first P inside the note.&lt;/p&gt;
+&lt;/div&gt;</pre>
+ <p>The following two selectors are usually equivalent:</p>
+ <pre>* &gt; a:first-child /* a is first child of any element */
+a:first-child /* Same (assuming a is not the root element) */</pre>
+</div>
+
+<h5><a name=last-child-pseudo>:last-child pseudo-class</a></h5>
+
+<p>Same as <code>:nth-last-child(1)</code>. The <code>:last-child</code> pseudo-class
+represents an element that is the last child of some other element.
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents a list item <code>li</code> that
+ is the last child of an ordered list <code>ol</code>.
+ <pre>ol &gt; li:last-child</pre>
+</div>
+
+<h5><a name=first-of-type-pseudo>:first-of-type pseudo-class</a></h5>
+
+<p>Same as <code>:nth-of-type(1)</code>. The <code>:first-of-type</code> pseudo-class
+represents an element that is the first sibling of its type in the list of
+children of its parent element.
+
+<div class="example">
+<p>Example:</p>
+<p>The following selector represents a definition title
+<code>dt</code> inside a definition list <code>dl</code>, this
+<code>dt</code> being the first of its type in the list of children of
+its parent element.</p>
+<pre>dl dt:first-of-type</pre>
+<p>It is a valid description for the first two <code>dt</code>
+elements in the following example but not for the third one:</p>
+<pre>&lt;dl&gt;
+ &lt;dt&gt;gigogne&lt;/dt&gt;
+ &lt;dd&gt;
+ &lt;dl&gt;
+ &lt;dt&gt;fus&eacute;e&lt;/dt&gt;
+ &lt;dd&gt;multistage rocket&lt;/dd&gt;
+ &lt;dt&gt;table&lt;/dt&gt;
+ &lt;dd&gt;nest of tables&lt;/dd&gt;
+ &lt;/dl&gt;
+ &lt;/dd&gt;
+&lt;/dl&gt;</pre>
+</div>
+
+<h5><a name=last-of-type-pseudo>:last-of-type pseudo-class</a></h5>
+
+<p>Same as <code>:nth-last-of-type(1)</code>. The
+<code>:last-of-type</code> pseudo-class represents an element that is
+the last sibling of its type in the list of children of its parent
+element.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents the last data cell
+ <code>td</code> of a table row.</p>
+ <pre>tr &gt; td:last-of-type</pre>
+</div>
+
+<h5><a name=only-child-pseudo>:only-child pseudo-class</a></h5>
+
+<p>Represents an element that has a parent element and whose parent
+element has no other element children. Same as
+<code>:first-child:last-child</code> or
+<code>:nth-child(1):nth-last-child(1)</code>, but with a lower
+specificity.</p>
+
+<h5><a name=only-of-type-pseudo>:only-of-type pseudo-class</a></h5>
+
+<p>Represents an element that has a parent element and whose parent
+element has no other element children with the same element name. Same
+as <code>:first-of-type:last-of-type</code> or
+<code>:nth-of-type(1):nth-last-of-type(1)</code>, but with a lower
+specificity.</p>
+
+
+<h5><a name=empty-pseudo></a>:empty pseudo-class</h5>
+
+<p>The <code>:empty</code> pseudo-class represents an element that has
+no children at all. In terms of the DOM, only element nodes and text
+nodes (including CDATA nodes and entity references) whose data has a
+non-zero length must be considered as affecting emptiness; comments,
+PIs, and other nodes must not affect whether an element is considered
+empty or not.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p><code>p:empty</code> is a valid representation of the following fragment:</p>
+ <pre>&lt;p&gt;&lt;/p&gt;</pre>
+ <p><code>foo:empty</code> is not a valid representation for the
+ following fragments:</p>
+ <pre>&lt;foo&gt;bar&lt;/foo&gt;</pre>
+ <pre>&lt;foo&gt;&lt;bar&gt;bla&lt;/bar&gt;&lt;/foo&gt;</pre>
+ <pre>&lt;foo&gt;this is not &lt;bar&gt;:empty&lt;/bar&gt;&lt;/foo&gt;</pre>
+</div>
+
+<h4><a name=content-selectors>6.6.6. Blank</a></h4> <!-- It's the Return of Appendix H!!! Run away! -->
+
+<p>This section intentionally left blank.</p>
+<!-- (used to be :contains()) -->
+
+<h4><a name=negation></a>6.6.7. The negation pseudo-class</h4>
+
+<p>The negation pseudo-class, <code>:not(<var>X</var>)</code>, is a
+functional notation taking a <a href="#simple-selectors-dfn">simple
+selector</a> (excluding the negation pseudo-class itself and
+pseudo-elements) as an argument. It represents an element that is not
+represented by the argument.
+
+<!-- pseudo-elements are not simple selectors, so the above paragraph
+may be a bit confusing -->
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following CSS selector matches all <code>button</code>
+ elements in an HTML document that are not disabled.</p>
+ <pre>button:not([DISABLED])</pre>
+ <p>The following selector represents all but <code>FOO</code>
+ elements.</p>
+ <pre>*:not(FOO)</pre>
+ <p>The following group of selectors represents all HTML elements
+ except links.</p>
+ <pre>html|*:not(:link):not(:visited)</pre>
+</div>
+
+<p>Default namespace declarations do not affect the argument of the
+negation pseudo-class unless the argument is a universal selector or a
+type selector.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>Assuming that the default namespace is bound to
+ "http://example.com/", the following selector represents all
+ elements that are not in that namespace:</p>
+ <pre>*|*:not(*)</pre>
+ <p>The following CSS selector matches any element being hovered,
+ regardless of its namespace. In particular, it is not limited to
+ only matching elements in the default namespace that are not being
+ hovered, and elements not in the default namespace don't match the
+ rule when they <em>are</em> being hovered.</p>
+ <pre>*|*:not(:hover)</pre>
+</div>
+
+<p class="note"><strong>Note</strong>: the :not() pseudo allows
+useless selectors to be written. For instance <code>:not(*|*)</code>,
+which represents no element at all, or <code>foo:not(bar)</code>,
+which is equivalent to <code>foo</code> but with a higher
+specificity.</p>
+
+<h3><a name=pseudo-elements>7. Pseudo-elements</a></h3>
+
+<p>Pseudo-elements create abstractions about the document tree beyond
+those specified by the document language. For instance, document
+languages do not offer mechanisms to access the first letter or first
+line of an element's content. Pseudo-elements allow designers to refer
+to this otherwise inaccessible information. Pseudo-elements may also
+provide designers a way to refer to content that does not exist in the
+source document (e.g., the <code>::before</code> and
+<code>::after</code> pseudo-elements give access to generated
+content).</p>
+
+<p>A pseudo-element is made of two colons (<code>::</code>) followed
+by the name of the pseudo-element.</p>
+
+<p>This <code>::</code> notation is introduced by the current document
+in order to establish a discrimination between pseudo-classes and
+pseudo-elements. For compatibility with existing style sheets, user
+agents must also accept the previous one-colon notation for
+pseudo-elements introduced in CSS levels 1 and 2 (namely,
+<code>:first-line</code>, <code>:first-letter</code>,
+<code>:before</code> and <code>:after</code>). This compatibility is
+not allowed for the new pseudo-elements introduced in CSS level 3.</p>
+
+<p>Only one pseudo-element may appear per selector, and if present it
+must appear after the sequence of simple selectors that represents the
+<a href="#subject">subjects</a> of the selector. <span class="note">A
+future version of this specification may allow multiple
+pesudo-elements per selector.</span></p>
+
+<h4><a name=first-line>7.1. The ::first-line pseudo-element</a></h4>
+
+<p>The <code>::first-line</code> pseudo-element describes the contents
+of the first formatted line of an element.
+
+<div class="example">
+<p>CSS example:</p>
+<pre>p::first-line { text-transform: uppercase }</pre>
+<p>The above rule means "change the letters of the first line of every
+paragraph to uppercase".</p>
+</div>
+
+<p>The selector <code>p::first-line</code> does not match any real
+HTML element. It does match a pseudo-element that conforming user
+agents will insert at the beginning of every paragraph.</p>
+
+<p>Note that the length of the first line depends on a number of
+factors, including the width of the page, the font size, etc. Thus,
+an ordinary HTML paragraph such as:</p>
+
+<pre>
+&lt;P&gt;This is a somewhat long HTML
+paragraph that will be broken into several
+lines. The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>the lines of which happen to be broken as follows:
+
+<pre>
+THIS IS A SOMEWHAT LONG HTML PARAGRAPH THAT
+will be broken into several lines. The first
+line will be identified by a fictional tag
+sequence. The other lines will be treated as
+ordinary lines in the paragraph.
+</pre>
+
+<p>This paragraph might be "rewritten" by user agents to include the
+<em>fictional tag sequence</em> for <code>::first-line</code>. This
+fictional tag sequence helps to show how properties are inherited.</p>
+
+<pre>
+&lt;P&gt;<b>&lt;P::first-line&gt;</b> This is a somewhat long HTML
+paragraph that <b>&lt;/P::first-line&gt;</b> will be broken into several
+lines. The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>If a pseudo-element breaks up a real element, the desired effect
+can often be described by a fictional tag sequence that closes and
+then re-opens the element. Thus, if we mark up the previous paragraph
+with a <code>span</code> element:</p>
+
+<pre>
+&lt;P&gt;<b>&lt;SPAN class="test"&gt;</b> This is a somewhat long HTML
+paragraph that will be broken into several
+lines.<b>&lt;/SPAN&gt;</b> The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>the user agent could simulate start and end tags for
+<code>span</code> when inserting the fictional tag sequence for
+<code>::first-line</code>.
+
+<pre>
+&lt;P&gt;&lt;P::first-line&gt;<b>&lt;SPAN class="test"&gt;</b> This is a
+somewhat long HTML
+paragraph that will <b>&lt;/SPAN&gt;</b>&lt;/P::first-line&gt;<b>&lt;SPAN class="test"&gt;</b> be
+broken into several
+lines.<b>&lt;/SPAN&gt;</b> The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>In CSS, the <code>::first-line</code> pseudo-element can only be
+attached to a block-level element, an inline-block, a table-caption,
+or a table-cell.</p>
+
+<p><a name="first-formatted-line"></a>The "first formatted line" of an
+element may occur inside a
+block-level descendant in the same flow (i.e., a block-level
+descendant that is not positioned and not a float). E.g., the first
+line of the <code>div</code> in <code>&lt;DIV>&lt;P>This
+line...&lt;/P>&lt/DIV></code> is the first line of the <code>p</code> (assuming
+that both <code>p</code> and <code>div</code> are block-level).
+
+<p>The first line of a table-cell or inline-block cannot be the first
+formatted line of an ancestor element. Thus, in <code>&lt;DIV&gt;&lt;P
+STYLE="display: inline-block">Hello&lt;BR&gt;Goodbye&lt;/P&gt;
+etcetera&lt;/DIV&gt;</code> the first formatted line of the
+<code>div</code> is not the line "Hello".
+
+<p class="note">Note that the first line of the <code>p</code> in this
+fragment: <code>&lt;p&gt&lt;br&gt;First...</code> doesn't contain any
+letters (assuming the default style for <code>br</code> in HTML
+4). The word "First" is not on the first formatted line.
+
+<p>A UA should act as if the fictional start tags of the
+<code>::first-line</code> pseudo-elements were nested just inside the
+innermost enclosing block-level element. (Since CSS1 and CSS2 were
+silent on this case, authors should not rely on this behavior.) Here
+is an example. The fictional tag sequence for</p>
+
+<pre>
+&lt;DIV>
+ &lt;P>First paragraph&lt;/P>
+ &lt;P>Second paragraph&lt;/P>
+&lt;/DIV>
+</pre>
+
+<p>is</p>
+
+<pre>
+&lt;DIV>
+ &lt;P>&lt;DIV::first-line>&lt;P::first-line>First paragraph&lt;/P::first-line>&lt;/DIV::first-line>&lt;/P>
+ &lt;P>&lt;P::first-line>Second paragraph&lt;/P::first-line>&lt;/P>
+&lt;/DIV>
+</pre>
+
+<p>The <code>::first-line</code> pseudo-element is similar to an
+inline-level element, but with certain restrictions. In CSS, the
+following properties apply to a <code>::first-line</code>
+pseudo-element: font properties, color property, background
+properties, 'word-spacing', 'letter-spacing', 'text-decoration',
+'vertical-align', 'text-transform', 'line-height'. UAs may apply other
+properties as well.</p>
+
+
+<h4><a name=first-letter>7.2. The ::first-letter pseudo-element</a></h4>
+
+<p>The <code>::first-letter</code> pseudo-element represents the first
+letter of the first line of a block, if it is not preceded by any
+other content (such as images or inline tables) on its line. The
+::first-letter pseudo-element may be used for "initial caps" and "drop
+caps", which are common typographical effects. This type of initial
+letter is similar to an inline-level element if its 'float' property
+is 'none'; otherwise, it is similar to a floated element.</p>
+
+<p>In CSS, these are the properties that apply to <code>::first-letter</code>
+pseudo-elements: font properties, 'text-decoration', 'text-transform',
+'letter-spacing', 'word-spacing' (when appropriate), 'line-height',
+'float', 'vertical-align' (only if 'float' is 'none'), margin
+properties, padding properties, border properties, color property,
+background properties. UAs may apply other properties as well. To
+allow UAs to render a typographically correct drop cap or initial cap,
+the UA may choose a line-height, width and height based on the shape
+of the letter, unlike for normal elements.</p>
+
+<div class="example">
+<p>Example:</p>
+<p>This example shows a possible rendering of an initial cap. Note
+that the 'line-height' that is inherited by the <code>::first-letter</code>
+pseudo-element is 1.1, but the UA in this example has computed the
+height of the first letter differently, so that it doesn't cause any
+unnecessary space between the first two lines. Also note that the
+fictional start tag of the first letter is inside the <span>span</span>, and thus
+the font weight of the first letter is normal, not bold as the <span>span</span>:
+<pre>
+p { line-height: 1.1 }
+p::first-letter { font-size: 3em; font-weight: normal }
+span { font-weight: bold }
+...
+&lt;p>&lt;span>Het hemelsche&lt;/span> gerecht heeft zich ten lange lesten&lt;br>
+Erbarremt over my en mijn benaeuwde vesten&lt;br>
+En arme burgery, en op mijn volcx gebed&lt;br>
+En dagelix geschrey de bange stad ontzet.
+</pre>
+<div class="figure">
+<p><img src="initial-cap.png" alt="Image illustrating the ::first-letter pseudo-element">
+</div>
+</div>
+
+<div class="example">
+<p>The following CSS will make a drop cap initial letter span about two lines:</p>
+
+<pre>
+&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"&gt;
+&lt;HTML&gt;
+ &lt;HEAD&gt;
+ &lt;TITLE&gt;Drop cap initial letter&lt;/TITLE&gt;
+ &lt;STYLE type="text/css"&gt;
+ P { font-size: 12pt; line-height: 1.2 }
+ P::first-letter { font-size: 200%; font-weight: bold; float: left }
+ SPAN { text-transform: uppercase }
+ &lt;/STYLE&gt;
+ &lt;/HEAD&gt;
+ &lt;BODY&gt;
+ &lt;P&gt;&lt;SPAN&gt;The first&lt;/SPAN&gt; few words of an article
+ in The Economist.&lt;/P&gt;
+ &lt;/BODY&gt;
+&lt;/HTML&gt;
+</pre>
+
+<p>This example might be formatted as follows:</p>
+
+<div class="figure">
+<P><img src="first-letter.gif" alt="Image illustrating the combined effect of the ::first-letter and ::first-line pseudo-elements"></p>
+</div>
+
+<p>The <span class="index-inst" title="fictional tag
+sequence">fictional tag sequence</span> is:</p>
+
+<pre>
+&lt;P&gt;
+&lt;SPAN&gt;
+&lt;P::first-letter&gt;
+T
+&lt;/P::first-letter&gt;he first
+&lt;/SPAN&gt;
+few words of an article in the Economist.
+&lt;/P&gt;
+</pre>
+
+<p>Note that the <code>::first-letter</code> pseudo-element tags abut
+the content (i.e., the initial character), while the ::first-line
+pseudo-element start tag is inserted right after the start tag of the
+block element.</p> </div>
+
+<p>In order to achieve traditional drop caps formatting, user agents
+may approximate font sizes, for example to align baselines. Also, the
+glyph outline may be taken into account when formatting.</p>
+
+<p>Punctuation (i.e, characters defined in Unicode in the "open" (Ps),
+"close" (Pe), "initial" (Pi). "final" (Pf) and "other" (Po)
+punctuation classes), that precedes or follows the first letter should
+be included. <a href="#refsUNICODE">[UNICODE]</a></p>
+
+<div class="figure">
+<P><img src="first-letter2.gif" alt="Quotes that precede the
+first letter should be included."></p>
+</div>
+
+<p>The <code>::first-letter</code> also applies if the first letter is
+in fact a digit, e.g., the "6" in "67 million dollars is a lot of
+money."</p>
+
+<p>In CSS, the <code>::first-letter</code> pseudo-element applies to
+block, list-item, table-cell, table-caption, and inline-block
+elements. <span class="note">A future version of this specification
+may allow this pesudo-element to apply to more element
+types.</span></p>
+
+<p>The <code>::first-letter</code> pseudo-element can be used with all
+such elements that contain text, or that have a descendant in the same
+flow that contains text. A UA should act as if the fictional start tag
+of the ::first-letter pseudo-element is just before the first text of
+the element, even if that first text is in a descendant.</p>
+
+<div class="example">
+<p>Example:</p>
+<p>The fictional tag sequence for this HTMLfragment:
+<pre>&lt;div>
+&lt;p>The first text.</pre>
+<p>is:
+<pre>&lt;div>
+&lt;p>&lt;div::first-letter>&lt;p::first-letter>T&lt;/...>&lt;/...>he first text.</pre>
+</div>
+
+<p>The first letter of a table-cell or inline-block cannot be the
+first letter of an ancestor element. Thus, in <code>&lt;DIV&gt;&lt;P
+STYLE="display: inline-block">Hello&lt;BR&gt;Goodbye&lt;/P&gt;
+etcetera&lt;/DIV&gt;</code> the first letter of the <code>div</code> is not the
+letter "H". In fact, the <code>div</code> doesn't have a first letter.
+
+<p>The first letter must occur on the <a
+href="#first-formatted-line">first formatted line.</a> For example, in
+this fragment: <code>&lt;p&gt&lt;br&gt;First...</code> the first line
+doesn't contain any letters and <code>::first-letter</code> doesn't
+match anything (assuming the default style for <code>br</code> in HTML
+4). In particular, it does not match the "F" of "First."
+
+<p>In CSS, if an element is a list item ('display: list-item'), the
+<code>::first-letter</code> applies to the first letter in the
+principal box after the marker. UAs may ignore
+<code>::first-letter</code> on list items with 'list-style-position:
+inside'. If an element has <code>::before</code> or
+<code>::after</code> content, the <code>::first-letter</code> applies
+to the first letter of the element <em>including</em> that content.
+
+<div class="example">
+<p>Example:</p>
+<p>After the rule 'p::before {content: "Note: "}', the selector
+'p::first-letter' matches the "N" of "Note".</p>
+</div>
+
+<p>Some languages may have specific rules about how to treat certain
+letter combinations. In Dutch, for example, if the letter combination
+"ij" appears at the beginning of a word, both letters should be
+considered within the <code>::first-letter</code> pseudo-element.
+
+<p>If the letters that would form the ::first-letter are not in the
+same element, such as "'T" in <code>&lt;p>'&lt;em>T...</code>, the UA
+may create a ::first-letter pseudo-element from one of the elements,
+both elements, or simply not create a pseudo-element.</p>
+
+<p>Similarly, if the first letter(s) of the block are not at the start
+of the line (for example due to bidirectional reordering), then the UA
+need not create the pseudo-element(s).
+
+<div class="example">
+<p>Example:</p>
+<p><a name="overlapping-example">The following example</a> illustrates
+how overlapping pseudo-elements may interact. The first letter of
+each P element will be green with a font size of '24pt'. The rest of
+the first formatted line will be 'blue' while the rest of the
+paragraph will be 'red'.</p>
+
+<pre>p { color: red; font-size: 12pt }
+p::first-letter { color: green; font-size: 200% }
+p::first-line { color: blue }
+
+&lt;P&gt;Some text that ends up on two lines&lt;/P&gt;</pre>
+
+<p>Assuming that a line break will occur before the word "ends", the
+<span class="index-inst" title="fictional tag sequence">fictional tag
+sequence</span> for this fragment might be:</p>
+
+<pre>&lt;P&gt;
+&lt;P::first-line&gt;
+&lt;P::first-letter&gt;
+S
+&lt;/P::first-letter&gt;ome text that
+&lt;/P::first-line&gt;
+ends up on two lines
+&lt;/P&gt;</pre>
+
+<p>Note that the <code>::first-letter</code> element is inside the <code>::first-line</code>
+element. Properties set on <code>::first-line</code> are inherited by
+<code>::first-letter</code>, but are overridden if the same property is set on
+<code>::first-letter</code>.</p>
+</div>
+
+
+<h4><a name=UIfragments>7.3.</a> <a name=selection>The ::selection pseudo-element</a></h4>
+
+<p>The <code>::selection</code> pseudo-element applies to the portion
+of a document that has been highlighted by the user. This also
+applies, for example, to selected text within an editable text
+field. This pseudo-element should not be confused with the <code><a
+href="#checked">:checked</a></code> pseudo-class (which used to be
+named <code>:selected</code>)
+
+<p>Although the <code>::selection</code> pseudo-element is dynamic in
+nature, and is altered by user action, it is reasonable to expect that
+when a UA re-renders to a static medium (such as a printed page, see
+<a href="#refsCSS21">[CSS21]</a>) which was originally rendered to a
+dynamic medium (like screen), the UA may wish to transfer the current
+<code>::selection</code> state to that other medium, and have all the
+appropriate formatting and rendering take effect as well. This is not
+required &mdash; UAs may omit the <code>::selection</code>
+pseudo-element for static media.
+
+<p>These are the CSS properties that apply to <code>::selection</code>
+pseudo-elements: color, background, cursor (optional), outline
+(optional). The computed value of the 'background-image' property on
+<code>::selection</code> may be ignored.
+
+
+<h4><a name=gen-content>7.4. The ::before and ::after pseudo-elements</a></h4>
+
+<p>The <code>::before</code> and <code>::after</code> pseudo-elements
+can be used to describe generated content before or after an element's
+content. They are explained in CSS 2.1 <a
+href="#refsCSS21">[CSS21]</a>.</p>
+
+<p>When the <code>::first-letter</code> and <code>::first-line</code>
+pseudo-elements are combined with <code>::before</code> and
+<code>::after</code>, they apply to the first letter or line of the
+element including the inserted text.</p>
+
+<h2><a name=combinators>8. Combinators</a></h2>
+
+<h3><a name=descendant-combinators>8.1. Descendant combinator</a></h3>
+
+<p>At times, authors may want selectors to describe an element that is
+the descendant of another element in the document tree (e.g., "an
+<code>EM</code> element that is contained within an <code>H1</code>
+element"). Descendant combinators express such a relationship. A
+descendant combinator is <a href="#whitespace">white space</a> that
+separates two sequences of simple selectors. A selector of the form
+"<code>A B</code>" represents an element <code>B</code> that is an
+arbitrary descendant of some ancestor element <code>A</code>.
+
+<div class="example">
+ <p>Examples:</p>
+ <p>For example, consider the following selector:</p>
+ <pre>h1 em</pre>
+ <p>It represents an <code>em</code> element being the descendant of
+ an <code>h1</code> element. It is a correct and valid, but partial,
+ description of the following fragment:</p>
+ <pre>&lt;h1&gt;This &lt;span class="myclass"&gt;headline
+is &lt;em&gt;very&lt;/em&gt; important&lt;/span&gt;&lt;/h1&gt;</pre>
+ <p>The following selector:</p>
+ <pre>div * p</pre>
+ <p>represents a <code>p</code> element that is a grandchild or later
+ descendant of a <code>div</code> element. Note the whitespace on
+ either side of the "*" is not part of the universal selector; the
+ whitespace is a combinator indicating that the DIV must be the
+ ancestor of some element, and that that element must be an ancestor
+ of the P.</p>
+ <p>The following selector, which combines descendant combinators and
+ <a href="#attribute-selectors">attribute selectors</a>, represents an
+ element that (1) has the <code>href</code> attribute set and (2) is
+ inside a <code>p</code> that is itself inside a <code>div</code>:</p>
+ <pre>div p *[href]</pre>
+</div>
+
+<h3><a name=child-combinators>8.2. Child combinators</a></h3>
+
+<p>A <dfn>child combinator</dfn> describes a childhood relationship
+between two elements. A child combinator is made of the
+&quot;greater-than sign&quot; (<code>&gt;</code>) character and
+separates two sequences of simple selectors.
+
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element that is
+ child of <code>body</code>:</p>
+ <pre>body &gt; p</pre>
+ <p>The following example combines descendant combinators and child
+ combinators.</p>
+ <pre>div ol&gt;li p</pre><!-- LEAVE THOSE SPACES OUT! see below -->
+ <p>It represents a <code>p</code> element that is a descendant of an
+ <code>li</code> element; the <code>li</code> element must be the
+ child of an <code>ol</code> element; the <code>ol</code> element must
+ be a descendant of a <code>div</code>. Notice that the optional white
+ space around the "&gt;" combinator has been left out.</p>
+</div>
+
+<p>For information on selecting the first child of an element, please
+see the section on the <code><a
+href="#structural-pseudos">:first-child</a></code> pseudo-class
+above.</p>
+
+<h3><a name=sibling-combinators>8.3. Sibling combinators</a></h3>
+
+<p>There are two different sibling combinators: the adjacent sibling
+combinator and the general sibling combinator. In both cases,
+non-element nodes (e.g. text between elements) are ignored when
+considering adjacency of elements.</p>
+
+<h4><a name=adjacent-sibling-combinators>8.3.1. Adjacent sibling combinator</a></h4>
+
+<p>The adjacent sibling combinator is made of the &quot;plus
+sign&quot; (U+002B, <code>+</code>) character that separates two
+sequences of simple selectors. The elements represented by the two
+sequences share the same parent in the document tree and the element
+represented by the first sequence immediately precedes the element
+represented by the second one.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element
+ immediately following a <code>math</code> element:</p>
+ <pre>math + p</pre>
+ <p>The following selector is conceptually similar to the one in the
+ previous example, except that it adds an attribute selector &mdash; it
+ adds a constraint to the <code>h1</code> element, that it must have
+ <code>class="opener"</code>:</p>
+ <pre>h1.opener + h2</pre>
+</div>
+
+
+<h4><a name=general-sibling-combinators>8.3.2. General sibling combinator</a></h4>
+
+<p>The general sibling combinator is made of the &quot;tilde&quot;
+(U+007E, <code>~</code>) character that separates two sequences of
+simple selectors. The elements represented by the two sequences share
+the same parent in the document tree and the element represented by
+the first sequence precedes (not necessarily immediately) the element
+represented by the second one.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <pre>h1 ~ pre</pre>
+ <p>represents a <code>pre</code> element following an <code>h1</code>. It
+ is a correct and valid, but partial, description of:</p>
+ <pre>&lt;h1&gt;Definition of the function a&lt;/h1&gt;
+&lt;p&gt;Function a(x) has to be applied to all figures in the table.&lt;/p&gt;
+&lt;pre&gt;function a(x) = 12x/13.5&lt;/pre&gt;</pre>
+</div>
+
+<h2><a name=specificity>9. Calculating a selector's specificity</a></h2>
+
+<p>A selector's specificity is calculated as follows:</p>
+
+<ul>
+ <li>count the number of ID selectors in the selector (= a)</li>
+ <li>count the number of class selectors, attributes selectors, and pseudo-classes in the selector (= b)</li>
+ <li>count the number of element names in the selector (= c)</li>
+ <li>ignore pseudo-elements</li>
+</ul>
+
+<p>Selectors inside <a href="#negation">the negation pseudo-class</a>
+are counted like any other, but the negation itself does not count as
+a pseudo-class.</p>
+
+<p>Concatenating the three numbers a-b-c (in a number system with a
+large base) gives the specificity.</p>
+
+<div class="example">
+<p>Examples:</p>
+<pre>* /* a=0 b=0 c=0 -&gt; specificity = 0 */
+LI /* a=0 b=0 c=1 -&gt; specificity = 1 */
+UL LI /* a=0 b=0 c=2 -&gt; specificity = 2 */
+UL OL+LI /* a=0 b=0 c=3 -&gt; specificity = 3 */
+H1 + *[REL=up] /* a=0 b=1 c=1 -&gt; specificity = 11 */
+UL OL LI.red /* a=0 b=1 c=3 -&gt; specificity = 13 */
+LI.red.level /* a=0 b=2 c=1 -&gt; specificity = 21 */
+#x34y /* a=1 b=0 c=0 -&gt; specificity = 100 */
+#s12:not(FOO) /* a=1 b=0 c=1 -&gt; specificity = 101 */
+</pre>
+</div>
+
+<p class="note"><strong>Note:</strong> the specificity of the styles
+specified in an HTML <code>style</code> attribute is described in CSS
+2.1. <a href="#refsCSS21">[CSS21]</a>.</p>
+
+<h2><a name=w3cselgrammar>10. The grammar of Selectors</a></h2>
+
+<h3><a name=grammar>10.1. Grammar</a></h3>
+
+<p>The grammar below defines the syntax of Selectors. It is globally
+LL(1) and can be locally LL(2) (but note that most UA's should not use
+it directly, since it doesn't express the parsing conventions). The
+format of the productions is optimized for human consumption and some
+shorthand notations beyond Yacc (see <a href="#refsYACC">[YACC]</a>)
+are used:</p>
+
+<ul>
+ <li><b>*</b>: 0 or more
+ <li><b>+</b>: 1 or more
+ <li><b>?</b>: 0 or 1
+ <li><b>|</b>: separates alternatives
+ <li><b>[ ]</b>: grouping </li>
+</ul>
+
+<p>The productions are:</p>
+
+<pre>selectors_group
+ : selector [ COMMA S* selector ]*
+ ;
+
+selector
+ : simple_selector_sequence [ combinator simple_selector_sequence ]*
+ ;
+
+combinator
+ /* combinators can be surrounded by white space */
+ : PLUS S* | GREATER S* | TILDE S* | S+
+ ;
+
+simple_selector_sequence
+ : [ type_selector | universal ]
+ [ HASH | class | attrib | pseudo | negation ]*
+ | [ HASH | class | attrib | pseudo | negation ]+
+ ;
+
+type_selector
+ : [ namespace_prefix ]? element_name
+ ;
+
+namespace_prefix
+ : [ IDENT | '*' ]? '|'
+ ;
+
+element_name
+ : IDENT
+ ;
+
+universal
+ : [ namespace_prefix ]? '*'
+ ;
+
+class
+ : '.' IDENT
+ ;
+
+attrib
+ : '[' S* [ namespace_prefix ]? IDENT S*
+ [ [ PREFIXMATCH |
+ SUFFIXMATCH |
+ SUBSTRINGMATCH |
+ '=' |
+ INCLUDES |
+ DASHMATCH ] S* [ IDENT | STRING ] S*
+ ]? ']'
+ ;
+
+pseudo
+ /* '::' starts a pseudo-element, ':' a pseudo-class */
+ /* Exceptions: :first-line, :first-letter, :before and :after. */
+ /* Note that pseudo-elements are restricted to one per selector and */
+ /* occur only in the last simple_selector_sequence. */
+ : ':' ':'? [ IDENT | functional_pseudo ]
+ ;
+
+functional_pseudo
+ : FUNCTION S* expression ')'
+ ;
+
+expression
+ /* In CSS3, the expressions are identifiers, strings, */
+ /* or of the form "an+b" */
+ : [ [ PLUS | '-' | DIMENSION | NUMBER | STRING | IDENT ] S* ]+
+ ;
+
+negation
+ : NOT S* negation_arg S* ')'
+ ;
+
+negation_arg
+ : type_selector | universal | HASH | class | attrib | pseudo
+ ;</pre>
+
+
+<h3><a name=lex>10.2. Lexical scanner</a></h3>
+
+<p>The following is the <a name=x3>tokenizer</a>, written in Flex (see
+<a href="#refsFLEX">[FLEX]</a>) notation. The tokenizer is
+case-insensitive.</p>
+
+<p>The two occurrences of "\377" represent the highest character
+number that current versions of Flex can deal with (decimal 255). They
+should be read as "\4177777" (decimal 1114111), which is the highest
+possible code point in Unicode/ISO-10646. <a
+href="#refsUNICODE">[UNICODE]</a></p>
+
+<pre>%option case-insensitive
+
+ident [-]?{nmstart}{nmchar}*
+name {nmchar}+
+nmstart [_a-z]|{nonascii}|{escape}
+nonascii [^\0-\177]
+unicode \\[0-9a-f]{1,6}(\r\n|[ \n\r\t\f])?
+escape {unicode}|\\[^\n\r\f0-9a-f]
+nmchar [_a-z0-9-]|{nonascii}|{escape}
+num [0-9]+|[0-9]*\.[0-9]+
+string {string1}|{string2}
+string1 \"([^\n\r\f\\"]|\\{nl}|{nonascii}|{escape})*\"
+string2 \'([^\n\r\f\\']|\\{nl}|{nonascii}|{escape})*\'
+invalid {invalid1}|{invalid2}
+invalid1 \"([^\n\r\f\\"]|\\{nl}|{nonascii}|{escape})*
+invalid2 \'([^\n\r\f\\']|\\{nl}|{nonascii}|{escape})*
+nl \n|\r\n|\r|\f
+w [ \t\r\n\f]*
+
+%%
+
+[ \t\r\n\f]+ return S;
+
+"~=" return INCLUDES;
+"|=" return DASHMATCH;
+"^=" return PREFIXMATCH;
+"$=" return SUFFIXMATCH;
+"*=" return SUBSTRINGMATCH;
+{ident} return IDENT;
+{string} return STRING;
+{ident}"(" return FUNCTION;
+{num} return NUMBER;
+"#"{name} return HASH;
+{w}"+" return PLUS;
+{w}"&gt;" return GREATER;
+{w}"," return COMMA;
+{w}"~" return TILDE;
+":not(" return NOT;
+@{ident} return ATKEYWORD;
+{invalid} return INVALID;
+{num}% return PERCENTAGE;
+{num}{ident} return DIMENSION;
+"&lt;!--" return CDO;
+"--&gt;" return CDC;
+
+"url("{w}{string}{w}")" return URI;
+"url("{w}([!#$%&*-~]|{nonascii}|{escape})*{w}")" return URI;
+U\+[0-9a-f?]{1,6}(-[0-9a-f]{1,6})? return UNICODE_RANGE;
+
+\/\*[^*]*\*+([^/*][^*]*\*+)*\/ /* ignore comments */
+
+. return *yytext;</pre>
+
+
+
+<h2><a name=downlevel>11. Namespaces and down-level clients</a></h2>
+
+<p>An important issue is the interaction of CSS selectors with XML
+documents in web clients that were produced prior to this
+document. Unfortunately, due to the fact that namespaces must be
+matched based on the URI which identifies the namespace, not the
+namespace prefix, some mechanism is required to identify namespaces in
+CSS by their URI as well. Without such a mechanism, it is impossible
+to construct a CSS style sheet which will properly match selectors in
+all cases against a random set of XML documents. However, given
+complete knowledge of the XML document to which a style sheet is to be
+applied, and a limited use of namespaces within the XML document, it
+is possible to construct a style sheet in which selectors would match
+elements and attributes correctly.</p>
+
+<p>It should be noted that a down-level CSS client will (if it
+properly conforms to CSS forward compatible parsing rules) ignore all
+<code>@namespace</code> at-rules, as well as all style rules that make
+use of namespace qualified element type or attribute selectors. The
+syntax of delimiting namespace prefixes in CSS was deliberately chosen
+so that down-level CSS clients would ignore the style rules rather
+than possibly match them incorrectly.</p>
+
+<p>The use of default namespaces in CSS makes it possible to write
+element type selectors that will function in both namespace aware CSS
+clients as well as down-level clients. It should be noted that
+down-level clients may incorrectly match selectors against XML
+elements in other namespaces.</p>
+
+<p>The following are scenarios and examples in which it is possible to
+construct style sheets which would function properly in web clients
+that do not implement this proposal.</p>
+
+<ol>
+ <li>
+
+ <p>The XML document does not use namespaces.</p>
+
+ <ul>
+
+ <li>In this case, it is obviously not necessary to declare or use
+ namespaces in the style sheet. Standard CSS element type and
+ attribute selectors will function adequately in a down-level
+ client.</li>
+
+ <li>In a CSS namespace aware client, the default behavior of
+ element selectors matching without regard to namespace will
+ function properly against all elements, since no namespaces are
+ present. However, the use of specific element type selectors that
+ match only elements that have no namespace ("<code>|name</code>")
+ will guarantee that selectors will match only XML elements that do
+ not have a declared namespace. </li>
+
+ </ul>
+
+ </li>
+
+ <li>
+
+ <p>The XML document defines a single, default namespace used
+ throughout the document. No namespace prefixes are used in element
+ names.</p>
+
+ <ul>
+
+ <li>In this case, a down-level client will function as if
+ namespaces were not used in the XML document at all. Standard CSS
+ element type and attribute selectors will match against all
+ elements. </li>
+
+ </ul>
+
+ </li>
+
+ <li>
+
+ <p>The XML document does <b>not</b> use a default namespace, all
+ namespace prefixes used are known to the style sheet author, and
+ there is a direct mapping between namespace prefixes and namespace
+ URIs. (A given prefix may only be mapped to one namespace URI
+ throughout the XML document; there may be multiple prefixes mapped
+ to the same URI).</p>
+
+ <ul>
+
+ <li>In this case, the down-level client will view and match
+ element type and attribute selectors based on their fully
+ qualified name, not the local part as outlined in the <a
+ href="#typenmsp">Type selectors and Namespaces</a> section. CSS
+ selectors may be declared using an escaped colon "<code>\:</code>"
+ to describe the fully qualified names, e.g.
+ "<code>html\:h1</code>" will match
+ <code>&lt;html:h1&gt;</code>. Selectors using the qualified name
+ will only match XML elements that use the same prefix. Other
+ namespace prefixes used in the XML that are mapped to the same URI
+ will not match as expected unless additional CSS style rules are
+ declared for them.</li>
+
+ <li>Note that selectors declared in this fashion will
+ <em>only</em> match in down-level clients. A CSS namespace aware
+ client will match element type and attribute selectors based on
+ the name's local part. Selectors declared with the fully
+ qualified name will not match (unless there is no namespace prefix
+ in the fully qualified name).</li>
+
+ </ul>
+
+ </li>
+
+ </ol>
+
+<p>In other scenarios: when the namespace prefixes used in the XML are
+not known in advance by the style sheet author; or a combination of
+elements with no namespace are used in conjunction with elements using
+a default namespace; or the same namespace prefix is mapped to
+<em>different</em> namespace URIs within the same document, or in
+different documents; it is impossible to construct a CSS style sheet
+that will function properly against all elements in those documents,
+unless, the style sheet is written using a namespace URI syntax (as
+outlined in this document or similar) and the document is processed by
+a CSS and XML namespace aware client.</p>
+
+<h2><a name=profiling>12. Profiles</a></h2>
+
+<p>Each specification using Selectors must define the subset of W3C
+Selectors it allows and excludes, and describe the local meaning of
+all the components of that subset.</p>
+
+<p>Non normative examples:
+
+<div class="profile">
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>CSS level 1</td></tr>
+ <tr>
+ <th>Accepts</th>
+ <td>type selectors<br>class selectors<br>ID selectors<br>:link,
+ :visited and :active pseudo-classes<br>descendant combinator
+ <br>::first-line and ::first-letter pseudo-elements</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>
+
+<p>universal selector<br>attribute selectors<br>:hover and :focus
+ pseudo-classes<br>:target pseudo-class<br>:lang() pseudo-class<br>all UI
+ element states pseudo-classes<br>all structural
+ pseudo-classes<br>negation pseudo-class<br>all
+ UI element fragments pseudo-elements<br>::before and ::after
+ pseudo-elements<br>child combinators<br>sibling combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>only one class selector allowed per sequence of simple
+ selectors</td></tr></tbody></table><br><br>
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>CSS level 2</td></tr>
+ <tr>
+ <th>Accepts</th>
+ <td>type selectors<br>universal selector<br>attribute presence and
+ values selectors<br>class selectors<br>ID selectors<br>:link, :visited,
+ :active, :hover, :focus, :lang() and :first-child pseudo-classes
+ <br>descendant combinator<br>child combinator<br>adjacent sibling
+ combinator<br>::first-line and ::first-letter pseudo-elements<br>::before
+ and ::after pseudo-elements</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>
+
+<p>content selectors<br>substring matching attribute
+ selectors<br>:target pseudo-classes<br>all UI element
+ states pseudo-classes<br>all structural pseudo-classes other
+ than :first-child<br>negation pseudo-class<br>all UI element
+ fragments pseudo-elements<br>general sibling combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>more than one class selector per sequence of simple selectors (CSS1
+ constraint) allowed</td></tr></tbody></table>
+
+<p>In CSS, selectors express pattern matching rules that determine which style
+rules apply to elements in the document tree.
+
+<p>The following selector (CSS level 2) will <b>match</b> all anchors <code>a</code>
+with attribute <code>name</code> set inside a section 1 header <code>h1</code>:
+<pre>h1 a[name]</pre>
+
+<p>All CSS declarations attached to such a selector are applied to elements
+matching it. </div>
+
+<div class="profile">
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>STTS 3</td>
+ </tr>
+ <tr>
+ <th>Accepts</th>
+ <td>
+
+<p>type selectors<br>universal selectors<br>attribute selectors<br>class
+ selectors<br>ID selectors<br>all structural pseudo-classes<br>
+ all combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>non-accepted pseudo-classes<br>pseudo-elements<br></td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>some selectors and combinators are not allowed in fragment
+ descriptions on the right side of STTS declarations.</td></tr></tbody></table>
+<form>
+<input type="text" name="test10"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+</form>
+
+<p>Selectors can be used in STTS 3 in two different
+ manners:
+<ol>
+ <li>a selection mechanism equivalent to CSS selection mechanism: declarations
+ attached to a given selector are applied to elements matching that selector,
+ <li>fragment descriptions that appear on the right side of declarations.
+</li></ol></div>
+
+<h2><a name=Conformance></a>13. Conformance and requirements</h2>
+
+<p>This section defines conformance with the present specification only.
+
+<p>The inability of a user agent to implement part of this specification due to
+the limitations of a particular device (e.g., non interactive user agents will
+probably not implement dynamic pseudo-classes because they make no sense without
+interactivity) does not imply non-conformance.
+
+<p>All specifications reusing Selectors must contain a <a
+href="#profiling">Profile</a> listing the
+subset of Selectors it accepts or excludes, and describing the constraints
+it adds to the current specification.
+
+<p>Invalidity is caused by a parsing error, e.g. an unrecognized token or a token
+which is not allowed at the current parsing point.
+
+<p>User agents must observe the rules for handling parsing errors:
+<ul>
+ <li>a simple selector containing an undeclared namespace prefix is invalid</li>
+ <li>a selector containing an invalid simple selector, an invalid combinator
+ or an invalid token is invalid. </li>
+ <li>a group of selectors containing an invalid selector is invalid.</li>
+</ul>
+
+<p class="foo test10 bar">Specifications reusing Selectors must define how to handle parsing
+errors. (In the case of CSS, the entire rule in which the selector is
+used is dropped.)</p>
+
+<!-- Apparently all these references are out of date:
+<p>Implementations of this specification must behave as
+"recipients of text data" as defined by <a href="#refsCWWW">[CWWW]</a>
+when parsing selectors and attempting matches. (In particular,
+implementations must assume the data is normalized and must not
+normalize it.) Normative rules for matching strings are defined in
+<a href="#refsCWWW">[CWWW]</a> and <a
+href="#refsUNICODE">[UNICODE]</a> and apply to implementations of this
+specification.</p>-->
+
+<h2><a name=Tests></a>14. Tests</h2>
+
+<p>This specification has <a
+href="http://www.w3.org/Style/CSS/Test/CSS3/Selectors/current/">a test
+suite</a> allowing user agents to verify their basic conformance to
+the specification. This test suite does not pretend to be exhaustive
+and does not cover all possible combined cases of Selectors.</p>
+
+<h2><a name=ACKS></a>15. Acknowledgements</h2>
+
+<p>The CSS working group would like to thank everyone who has sent
+comments on this specification over the years.</p>
+
+<p>The working group would like to extend special thanks to Donna
+McManus, Justin Baker, Joel Sklar, and Molly Ives Brower who perfermed
+the final editorial review.</p>
+
+<h2><a name=references>16. References</a></h2>
+
+<dl class="refs">
+
+ <dt>[CSS1]
+ <dd><a name=refsCSS1></a> Bert Bos, H&aring;kon Wium Lie; "<cite>Cascading Style Sheets, level 1</cite>", W3C Recommendation, 17 Dec 1996, revised 11 Jan 1999
+ <dd>(<code><a href="http://www.w3.org/TR/REC-CSS1">http://www.w3.org/TR/REC-CSS1</a></code>)
+
+ <dt>[CSS21]
+ <dd><a name=refsCSS21></a> Bert Bos, Tantek &Ccedil;elik, Ian Hickson, H&aring;kon Wium Lie, editors; "<cite>Cascading Style Sheets, level 2 revision 1</cite>", W3C Working Draft, 13 June 2005
+ <dd>(<code><a href="http://www.w3.org/TR/CSS21">http://www.w3.org/TR/CSS21</a></code>)
+
+ <dt>[CWWW]
+ <dd><a name=refsCWWW></a> Martin J. D&uuml;rst, Fran&ccedil;ois Yergeau, Misha Wolf, Asmus Freytag, Tex Texin, editors; "<cite>Character Model for the World Wide Web</cite>", W3C Recommendation, 15 February 2005
+ <dd>(<code><a href="http://www.w3.org/TR/charmod/">http://www.w3.org/TR/charmod/</a></code>)
+
+ <dt>[FLEX]
+ <dd><a name="refsFLEX"></a> "<cite>Flex: The Lexical Scanner Generator</cite>", Version 2.3.7, ISBN 1882114213
+
+ <dt>[HTML4]
+ <dd><a name="refsHTML4"></a> Dave Ragget, Arnaud Le Hors, Ian Jacobs, editors; "<cite>HTML 4.01 Specification</cite>", W3C Recommendation, 24 December 1999
+ <dd>(<a href="http://www.w3.org/TR/html4/"><code>http://www.w3.org/TR/html4/</code></a>)
+
+ <dt>[MATH]
+ <dd><a name="refsMATH"></a> Patrick Ion, Robert Miner, editors; "<cite>Mathematical Markup Language (MathML) 1.01</cite>", W3C Recommendation, revision of 7 July 1999
+ <dd>(<code><a href="http://www.w3.org/TR/REC-MathML/">http://www.w3.org/TR/REC-MathML/</a></code>)
+
+ <dt>[RFC3066]
+ <dd><a name="refsRFC3066"></a> H. Alvestrand; "<cite>Tags for the Identification of Languages</cite>", Request for Comments 3066, January 2001
+ <dd>(<a href="http://www.ietf.org/rfc/rfc3066.txt"><code>http://www.ietf.org/rfc/rfc3066.txt</code></a>)
+
+ <dt>[STTS]
+ <dd><a name=refsSTTS></a> Daniel Glazman; "<cite>Simple Tree Transformation Sheets 3</cite>", Electricit&eacute; de France, submission to the W3C, 11 November 1998
+ <dd>(<code><a href="http://www.w3.org/TR/NOTE-STTS3">http://www.w3.org/TR/NOTE-STTS3</a></code>)
+
+ <dt>[SVG]
+ <dd><a name="refsSVG"></a> Jon Ferraiolo, &#34276;&#27810; &#28147;, Dean Jackson, editors; "<cite>Scalable Vector Graphics (SVG) 1.1 Specification</cite>", W3C Recommendation, 14 January 2003
+ <dd>(<code><a href="http://www.w3.org/TR/SVG/">http://www.w3.org/TR/SVG/</a></code>)
+
+ <dt>[UNICODE]</dt>
+ <dd><a name="refsUNICODE"></a> <cite><a
+ href="http://www.unicode.org/versions/Unicode4.1.0/">The Unicode Standard, Version 4.1</a></cite>, The Unicode Consortium. Boston, MA, Addison-Wesley, March 2005. ISBN 0-321-18578-1, as amended by <a href="http://www.unicode.org/versions/Unicode4.0.1/">Unicode 4.0.1</a> and <a href="http://www.unicode.org/versions/Unicode4.1.0/">Unicode 4.1.0</a>.
+ <dd>(<code><a href="http://www.unicode.org/versions/">http://www.unicode.org/versions/</a></code>)</dd>
+
+ <dt>[XML10]
+ <dd><a name="refsXML10"></a> Tim Bray, Jean Paoli, C. M. Sperberg-McQueen, Eve Maler, Fran&ccedil;ois Yergeau, editors; "<cite>Extensible Markup Language (XML) 1.0 (Third Edition)</cite>", W3C Recommendation, 4 February 2004
+ <dd>(<a href="http://www.w3.org/TR/REC-xml/"><code>http://www.w3.org/TR/REC-xml/</code></a>)
+
+ <dt>[XMLNAMES]
+ <dd><a name="refsXMLNAMES"></a> Tim Bray, Dave Hollander, Andrew Layman, editors; "<cite>Namespaces in XML</cite>", W3C Recommendation, 14 January 1999
+ <dd>(<a href="http://www.w3.org/TR/REC-xml-names/"><code>http://www.w3.org/TR/REC-xml-names/</code></a>)
+
+ <dt>[YACC]
+ <dd><a name="refsYACC"></a> S. C. Johnson; "<cite>YACC &mdash; Yet another compiler compiler</cite>", Technical Report, Murray Hill, 1975
+
+</dl>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/jslib-attr-prototype.html b/testing/talos/talos/tests/dromaeo/tests/jslib-attr-prototype.html
new file mode 100644
index 0000000000..f86be679f7
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/jslib-attr-prototype.html
@@ -0,0 +1,2949 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script src="../lib/prototype.js"></script>
+<script>
+window.onload = function(){
+startTest("jslib-attr-prototype", 'a7983bbe');
+
+// Try to force real results
+var ret, tmp, div;
+
+var html = document.body.innerHTML;
+
+ prep(function(){
+ div = $$("div");
+ var tmp = document.createElement("div");
+ tmp.innerHTML = html;
+ document.body.appendChild( tmp );
+ });
+
+ test("Prototype - addClassName", function(){
+ for ( var i = 0; i < 10; i++ )
+ div.invoke("addClassName", "foo");
+ });
+
+ test("Prototype - removeClassName", function(){
+ for ( var i = 0; i < 10; i++ )
+ div.invoke("removeClassName", "foo");
+ });
+
+ test("Prototype - hasClassName", function(){
+ for ( var i = 0; i < 10; i++ )
+ ret = div.invoke("hasClassName", "test");
+ });
+
+ test("Prototype - readAttribute", function(){
+ for ( var i = 0; i < 10; i++ )
+ ret = div.invoke("readAttribute", "class");
+ });
+
+ test("Prototype - writeAttribute", function(){
+ for ( var i = 0; i < 10; i++ )
+ div.invoke("writeAttribute","class","test");
+ });
+
+ /* ???
+ test("Prototype - removeAttribute", function(){
+ });
+ */
+
+endTest();
+};
+</script>
+</head>
+<body>
+ <div class="head">
+ <p><a href="http://www.w3.org/"><img height=48 alt=W3C src="w3c_home.png" width=72></a>
+
+ <h1 id="title">Selectors</h1>
+
+ <h2>W3C Working Draft 15 December 2005</h2>
+
+ <dl>
+
+ <dt>This version:
+
+ <dd><a href="http://www.w3.org/TR/2005/WD-css3-selectors-20051215">
+ http://www.w3.org/TR/2005/WD-css3-selectors-20051215</a>
+
+ <dt>Latest version:
+
+ <dd><a href="http://www.w3.org/TR/css3-selectors">
+ http://www.w3.org/TR/css3-selectors</a>
+
+ <dt>Previous version:
+
+ <dd><a href="http://www.w3.org/TR/2001/CR-css3-selectors-20011113">
+ http://www.w3.org/TR/2001/CR-css3-selectors-20011113</a>
+
+ <dt><a name=editors-list></a>Editors:
+
+ <dd class="vcard"><span class="fn">Daniel Glazman</span> (Invited Expert)</dd>
+
+ <dd class="vcard"><a lang="tr" class="url fn" href="http://www.tantek.com/">Tantek &Ccedil;elik</a> (Invited Expert)
+
+ <dd class="vcard"><a href="mailto:ian@hixie.ch" class="url fn">Ian Hickson</a> (<span
+ class="company"><a href="http://www.google.com/">Google</a></span>)
+
+ <dd class="vcard"><span class="fn">Peter Linss</span> (former editor, <span class="company"><a
+ href="http://www.netscape.com/">Netscape/AOL</a></span>)
+
+ <dd class="vcard"><span class="fn">John Williams</span> (former editor, <span class="company"><a
+ href="http://www.quark.com/">Quark, Inc.</a></span>)
+
+ </dl>
+
+ <p class="copyright"><a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright">
+ Copyright</a> &copy; 2005 <a href="http://www.w3.org/"><abbr
+ title="World Wide Web Consortium">W3C</abbr></a><sup>&reg;</sup>
+ (<a href="http://www.csail.mit.edu/"><abbr title="Massachusetts
+ Institute of Technology">MIT</abbr></a>, <a
+ href="http://www.ercim.org/"><acronym title="European Research
+ Consortium for Informatics and Mathematics">ERCIM</acronym></a>, <a
+ href="http://www.keio.ac.jp/">Keio</a>), All Rights Reserved. W3C
+ <a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">liability</a>,
+ <a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">trademark</a>,
+ <a
+ href="http://www.w3.org/Consortium/Legal/copyright-documents">document
+ use</a> rules apply.
+
+ <hr title="Separator for header">
+
+ </div>
+
+ <h2><a name=abstract></a>Abstract</h2>
+
+ <p><em>Selectors</em> are patterns that match against elements in a
+ tree. Selectors have been optimized for use with HTML and XML, and
+ are designed to be usable in performance-critical code.</p>
+
+ <p><acronym title="Cascading Style Sheets">CSS</acronym> (Cascading
+ Style Sheets) is a language for describing the rendering of <acronym
+ title="Hypertext Markup Language">HTML</acronym> and <acronym
+ title="Extensible Markup Language">XML</acronym> documents on
+ screen, on paper, in speech, etc. CSS uses Selectors for binding
+ style properties to elements in the document. This document
+ describes extensions to the selectors defined in CSS level 2. These
+ extended selectors will be used by CSS level 3.
+
+ <p>Selectors define the following function:</p>
+
+ <pre>expression &#x2217; element &rarr; boolean</pre>
+
+ <p>That is, given an element and a selector, this specification
+ defines whether that element matches the selector.</p>
+
+ <p>These expressions can also be used, for instance, to select a set
+ of elements, or a single element from a set of elements, by
+ evaluating the expression across all the elements in a
+ subtree. <acronym title="Simple Tree Transformation
+ Sheets">STTS</acronym> (Simple Tree Transformation Sheets), a
+ language for transforming XML trees, uses this mechanism. <a href="#refsSTTS">[STTS]</a></p>
+
+ <h2><a name=status></a>Status of this document</h2>
+
+ <p><em>This section describes the status of this document at the
+ time of its publication. Other documents may supersede this
+ document. A list of current W3C publications and the latest revision
+ of this technical report can be found in the <a
+ href="http://www.w3.org/TR/">W3C technical reports index at
+ http://www.w3.org/TR/.</a></em></p>
+
+ <p>This document describes the selectors that already exist in <a
+ href="#refsCSS1"><abbr title="CSS level 1">CSS1</abbr></a> and <a
+ href="#refsCSS21"><abbr title="CSS level 2">CSS2</abbr></a>, and
+ also proposes new selectors for <abbr title="CSS level
+ 3">CSS3</abbr> and other languages that may need them.</p>
+
+ <p>The CSS Working Group doesn't expect that all implementations of
+ CSS3 will have to implement all selectors. Instead, there will
+ probably be a small number of variants of CSS3, called profiles. For
+ example, it may be that only a profile for interactive user agents
+ will include all of the selectors.</p>
+
+ <p>This specification is a last call working draft for the the <a
+ href="http://www.w3.org/Style/CSS/members">CSS Working Group</a>
+ (<a href="/Style/">Style Activity</a>). This
+ document is a revision of the <a
+ href="http://www.w3.org/TR/2001/CR-css3-selectors-20011113/">Candidate
+ Recommendation dated 2001 November 13</a>, and has incorporated
+ implementation feedback received in the past few years. It is
+ expected that this last call will proceed straight to Proposed
+ Recommendation stage since it is believed that interoperability will
+ be demonstrable.</p>
+
+ <p>All persons are encouraged to review and implement this
+ specification and return comments to the (<a
+ href="http://lists.w3.org/Archives/Public/www-style/">archived</a>)
+ public mailing list <a
+ href="http://www.w3.org/Mail/Lists.html#www-style">www-style</a>
+ (see <a href="http://www.w3.org/Mail/Request">instructions</a>). W3C
+ Members can also send comments directly to the CSS Working
+ Group.
+ The deadline for comments is 14 January 2006.</p>
+
+ <p>This is still a draft document and may be updated, replaced, or
+ obsoleted by other documents at any time. It is inappropriate to
+ cite a W3C Working Draft as other than &quot;work in progress&quot;.
+
+ <p>This document may be available in <a
+ href="http://www.w3.org/Style/css3-selectors-updates/translations">translation</a>.
+ The English version of this specification is the only normative
+ version.
+
+ <div class="subtoc">
+
+ <h2 id="test10"><a name=contents>Table of contents</a></h2>
+
+ <ul class="toc">
+ <li class="tocline2"><a href="#context">1. Introduction</a>
+ <ul>
+ <li><a href="#dependencies">1.1. Dependencies</a> </li>
+ <li><a href="#terminology">1.2. Terminology</a> </li>
+ <li><a href="#changesFromCSS2">1.3. Changes from CSS2</a> </li>
+ </ul>
+ <li class="tocline2"><a href="#selectors">2. Selectors</a>
+ <li class="tocline2"><a href="#casesens">3. Case sensitivity</a>
+ <li class="tocline2"><a href="#selector-syntax">4. Selector syntax</a>
+ <li class="tocline2"><a href="#grouping">5. Groups of selectors</a>
+ <li class="tocline2"><a href="#simple-selectors">6. Simple selectors</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#type-selectors">6.1. Type selectors</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#typenmsp">6.1.1. Type selectors and namespaces</a></li>
+ </ul>
+ <li class="tocline3"><a href="#universal-selector">6.2. Universal selector</a>
+ <ul>
+ <li><a href="#univnmsp">6.2.1. Universal selector and namespaces</a></li>
+ </ul>
+ <li class="tocline3"><a href="#attribute-selectors">6.3. Attribute selectors</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#attribute-representation">6.3.1. Representation of attributes and attributes values</a>
+ <li><a href="#attribute-substrings">6.3.2. Substring matching attribute selectors</a>
+ <li class="tocline4"><a href="#attrnmsp">6.3.3. Attribute selectors and namespaces</a>
+ <li class="tocline4"><a href="#def-values">6.3.4. Default attribute values in DTDs</a></li>
+ </ul>
+ <li class="tocline3"><a href="#class-html">6.4. Class selectors</a>
+ <li class="tocline3"><a href="#id-selectors">6.5. ID selectors</a>
+ <li class="tocline3"><a href="#pseudo-classes">6.6. Pseudo-classes</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#dynamic-pseudos">6.6.1. Dynamic pseudo-classes</a>
+ <li class="tocline4"><a href="#target-pseudo">6.6.2. The :target pseudo-class</a>
+ <li class="tocline4"><a href="#lang-pseudo">6.6.3. The :lang() pseudo-class</a>
+ <li class="tocline4"><a href="#UIstates">6.6.4. UI element states pseudo-classes</a>
+ <li class="tocline4"><a href="#structural-pseudos">6.6.5. Structural pseudo-classes</a>
+ <ul>
+ <li><a href="#root-pseudo">:root pseudo-class</a>
+ <li><a href="#nth-child-pseudo">:nth-child() pseudo-class</a>
+ <li><a href="#nth-last-child-pseudo">:nth-last-child()</a>
+ <li><a href="#nth-of-type-pseudo">:nth-of-type() pseudo-class</a>
+ <li><a href="#nth-last-of-type-pseudo">:nth-last-of-type()</a>
+ <li><a href="#first-child-pseudo">:first-child pseudo-class</a>
+ <li><a href="#last-child-pseudo">:last-child pseudo-class</a>
+ <li><a href="#first-of-type-pseudo">:first-of-type pseudo-class</a>
+ <li><a href="#last-of-type-pseudo">:last-of-type pseudo-class</a>
+ <li><a href="#only-child-pseudo">:only-child pseudo-class</a>
+ <li><a href="#only-of-type-pseudo">:only-of-type pseudo-class</a>
+ <li><a href="#empty-pseudo">:empty pseudo-class</a></li>
+ </ul>
+ <li class="tocline4"><a href="#negation">6.6.7. The negation pseudo-class</a></li>
+ </ul>
+ </li>
+ </ul>
+ <li><a href="#pseudo-elements">7. Pseudo-elements</a>
+ <ul>
+ <li><a href="#first-line">7.1. The ::first-line pseudo-element</a>
+ <li><a href="#first-letter">7.2. The ::first-letter pseudo-element</a>
+ <li><a href="#UIfragments">7.3. The ::selection pseudo-element</a>
+ <li><a href="#gen-content">7.4. The ::before and ::after pseudo-elements</a></li>
+ </ul>
+ <li class="tocline2"><a href="#combinators">8. Combinators</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#descendant-combinators">8.1. Descendant combinators</a>
+ <li class="tocline3"><a href="#child-combinators">8.2. Child combinators</a>
+ <li class="tocline3"><a href="#sibling-combinators">8.3. Sibling combinators</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#adjacent-sibling-combinators">8.3.1. Adjacent sibling combinator</a>
+ <li class="tocline4"><a href="#general-sibling-combinators">8.3.2. General sibling combinator</a></li>
+ </ul>
+ </li>
+ </ul>
+ <li class="tocline2"><a href="#specificity">9. Calculating a selector's specificity</a>
+ <li class="tocline2"><a href="#w3cselgrammar">10. The grammar of Selectors</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#grammar">10.1. Grammar</a>
+ <li class="tocline3"><a href="#lex">10.2. Lexical scanner</a></li>
+ </ul>
+ <li class="tocline2"><a href="#downlevel">11. Namespaces and down-level clients</a>
+ <li class="tocline2"><a href="#profiling">12. Profiles</a>
+ <li><a href="#Conformance">13. Conformance and requirements</a>
+ <li><a href="#Tests">14. Tests</a>
+ <li><a href="#ACKS">15. Acknowledgements</a>
+ <li class="tocline2"><a href="#references">16. References</a>
+ </ul>
+
+ </div>
+
+ <h2><a name=context>1. Introduction</a></h2>
+
+ <h3><a name=dependencies></a>1.1. Dependencies</h3>
+
+ <p>Some features of this specification are specific to CSS, or have
+ particular limitations or rules specific to CSS. In this
+ specification, these have been described in terms of CSS2.1. <a
+ href="#refsCSS21">[CSS21]</a></p>
+
+ <h3><a name=terminology></a>1.2. Terminology</h3>
+
+ <p>All of the text of this specification is normative except
+ examples, notes, and sections explicitly marked as
+ non-normative.</p>
+
+ <h3><a name=changesFromCSS2></a>1.3. Changes from CSS2</h3>
+
+ <p><em>This section is non-normative.</em></p>
+
+ <p>The main differences between the selectors in CSS2 and those in
+ Selectors are:
+
+ <ul>
+
+ <li>the list of basic definitions (selector, group of selectors,
+ simple selector, etc.) has been changed; in particular, what was
+ referred to in CSS2 as a simple selector is now called a sequence
+ of simple selectors, and the term "simple selector" is now used for
+ the components of this sequence</li>
+
+ <li>an optional namespace component is now allowed in type element
+ selectors, the universal selector and attribute selectors</li>
+
+ <li>a <a href="#general-sibling-combinators">new combinator</a> has been introduced</li>
+
+ <li>new simple selectors including substring matching attribute
+ selectors, and new pseudo-classes</li>
+
+ <li>new pseudo-elements, and introduction of the "::" convention
+ for pseudo-elements</li>
+
+ <li>the grammar has been rewritten</li>
+
+ <li>profiles to be added to specifications integrating Selectors
+ and defining the set of selectors which is actually supported by
+ each specification</li>
+
+ <li>Selectors are now a CSS3 Module and an independent
+ specification; other specifications can now refer to this document
+ independently of CSS</li>
+
+ <li>the specification now has its own test suite</li>
+
+ </ul>
+
+<h2><a name=selectors></a>2. Selectors</h2>
+
+<p><em>This section is non-normative, as it merely summarizes the
+following sections.</em></p>
+
+<p>A Selector represents a structure. This structure can be used as a
+condition (e.g. in a CSS rule) that determines which elements a
+selector matches in the document tree, or as a flat description of the
+HTML or XML fragment corresponding to that structure.</p>
+
+<p>Selectors may range from simple element names to rich contextual
+representations.</p>
+
+<p>The following table summarizes the Selector syntax:</p>
+
+<table class="selectorsReview">
+ <thead>
+ <tr>
+ <th class="pattern">Pattern</th>
+ <th class="meaning">Meaning</th>
+ <th class="described">Described in section</th>
+ <th class="origin">First defined in CSS level</th></tr>
+ <tbody>
+ <tr>
+ <td class="pattern">*</td>
+ <td class="meaning">any element</td>
+ <td class="described"><a
+ href="#universal-selector">Universal
+ selector</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E</td>
+ <td class="meaning">an element of type E</td>
+ <td class="described"><a
+ href="#type-selectors">Type selector</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E[foo]</td>
+ <td class="meaning">an E element with a "foo" attribute</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value is exactly
+ equal to "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo~="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value is a list of
+ space-separated values, one of which is exactly equal to "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo^="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value begins exactly
+ with the string "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[foo$="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value ends exactly
+ with the string "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[foo*="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value contains the
+ substring "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[hreflang|="en"]</td>
+ <td class="meaning">an E element whose "hreflang" attribute has a hyphen-separated
+ list of values beginning (from the left) with "en"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:root</td>
+ <td class="meaning">an E element, root of the document</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-child(n)</td>
+ <td class="meaning">an E element, the n-th child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-last-child(n)</td>
+ <td class="meaning">an E element, the n-th child of its parent, counting
+ from the last one</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-of-type(n)</td>
+ <td class="meaning">an E element, the n-th sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-last-of-type(n)</td>
+ <td class="meaning">an E element, the n-th sibling of its type, counting
+ from the last one</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:first-child</td>
+ <td class="meaning">an E element, first child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:last-child</td>
+ <td class="meaning">an E element, last child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:first-of-type</td>
+ <td class="meaning">an E element, first sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:last-of-type</td>
+ <td class="meaning">an E element, last sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:only-child</td>
+ <td class="meaning">an E element, only child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:only-of-type</td>
+ <td class="meaning">an E element, only sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:empty</td>
+ <td class="meaning">an E element that has no children (including text
+ nodes)</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:link<br>E:visited</td>
+ <td class="meaning">an E element being the source anchor of a hyperlink of
+ which the target is not yet visited (:link) or already visited
+ (:visited)</td>
+ <td class="described"><a
+ href="#link">The link
+ pseudo-classes</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E:active<br>E:hover<br>E:focus</td>
+ <td class="meaning">an E element during certain user actions</td>
+ <td class="described"><a
+ href="#useraction-pseudos">The user
+ action pseudo-classes</a></td>
+ <td class="origin">1 and 2</td></tr>
+ <tr>
+ <td class="pattern">E:target</td>
+ <td class="meaning">an E element being the target of the referring URI</td>
+ <td class="described"><a
+ href="#target-pseudo">The target
+ pseudo-class</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:lang(fr)</td>
+ <td class="meaning">an element of type E in language "fr" (the document
+ language specifies how language is determined)</td>
+ <td class="described"><a
+ href="#lang-pseudo">The :lang()
+ pseudo-class</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:enabled<br>E:disabled</td>
+ <td class="meaning">a user interface element E which is enabled or
+ disabled</td>
+ <td class="described"><a
+ href="#UIstates">The UI element states
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:checked<!--<br>E:indeterminate--></td>
+ <td class="meaning">a user interface element E which is checked<!-- or in an
+ indeterminate state--> (for instance a radio-button or checkbox)</td>
+ <td class="described"><a
+ href="#UIstates">The UI element states
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E::first-line</td>
+ <td class="meaning">the first formatted line of an E element</td>
+ <td class="described"><a
+ href="#first-line">The ::first-line
+ pseudo-element</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E::first-letter</td>
+ <td class="meaning">the first formatted letter of an E element</td>
+ <td class="described"><a
+ href="#first-letter">The ::first-letter
+ pseudo-element</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E::selection</td>
+ <td class="meaning">the portion of an E element that is currently
+ selected/highlighted by the user</td>
+ <td class="described"><a
+ href="#UIfragments">The UI element
+ fragments pseudo-elements</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E::before</td>
+ <td class="meaning">generated content before an E element</td>
+ <td class="described"><a
+ href="#gen-content">The ::before
+ pseudo-element</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E::after</td>
+ <td class="meaning">generated content after an E element</td>
+ <td class="described"><a
+ href="#gen-content">The ::after
+ pseudo-element</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E.warning</td>
+ <td class="meaning">an E element whose class is
+"warning" (the document language specifies how class is determined).</td>
+ <td class="described"><a
+ href="#class-html">Class
+ selectors</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E#myid</td>
+ <td class="meaning">an E element with ID equal to "myid".</td>
+ <td class="described"><a
+ href="#id-selectors">ID
+ selectors</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E:not(s)</td>
+ <td class="meaning">an E element that does not match simple selector s</td>
+ <td class="described"><a
+ href="#negation">Negation
+ pseudo-class</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E F</td>
+ <td class="meaning">an F element descendant of an E element</td>
+ <td class="described"><a
+ href="#descendant-combinators">Descendant
+ combinator</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E &gt; F</td>
+ <td class="meaning">an F element child of an E element</td>
+ <td class="described"><a
+ href="#child-combinators">Child
+ combinator</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E + F</td>
+ <td class="meaning">an F element immediately preceded by an E element</td>
+ <td class="described"><a
+ href="#adjacent-sibling-combinators">Adjacent sibling combinator</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E ~ F</td>
+ <td class="meaning">an F element preceded by an E element</td>
+ <td class="described"><a
+ href="#general-sibling-combinators">General sibling combinator</a></td>
+ <td class="origin">3</td></tr></tbody></table>
+
+<p>The meaning of each selector is derived from the table above by
+prepending "matches" to the contents of each cell in the "Meaning"
+column.</p>
+
+<h2><a name=casesens>3. Case sensitivity</a></h2>
+
+<p>The case sensitivity of document language element names, attribute
+names, and attribute values in selectors depends on the document
+language. For example, in HTML, element names are case-insensitive,
+but in XML, they are case-sensitive.</p>
+
+<h2><a name=selector-syntax>4. Selector syntax</a></h2>
+
+<p>A <dfn><a name=selector>selector</a></dfn> is a chain of one
+or more <a href="#sequence">sequences of simple selectors</a>
+separated by <a href="#combinators">combinators</a>.</p>
+
+<p>A <dfn><a name=sequence>sequence of simple selectors</a></dfn>
+is a chain of <a href="#simple-selectors-dfn">simple selectors</a>
+that are not separated by a <a href="#combinators">combinator</a>. It
+always begins with a <a href="#type-selectors">type selector</a> or a
+<a href="#universal-selector">universal selector</a>. No other type
+selector or universal selector is allowed in the sequence.</p>
+
+<p>A <dfn><a name=simple-selectors-dfn></a><a
+href="#simple-selectors">simple selector</a></dfn> is either a <a
+href="#type-selectors">type selector</a>, <a
+href="#universal-selector">universal selector</a>, <a
+href="#attribute-selectors">attribute selector</a>, <a
+href="#class-html">class selector</a>, <a
+href="#id-selectors">ID selector</a>, <a
+href="#content-selectors">content selector</a>, or <a
+href="#pseudo-classes">pseudo-class</a>. One <a
+href="#pseudo-elements">pseudo-element</a> may be appended to the last
+sequence of simple selectors.</p>
+
+<p><dfn>Combinators</dfn> are: white space, &quot;greater-than
+sign&quot; (U+003E, <code>&gt;</code>), &quot;plus sign&quot; (U+002B,
+<code>+</code>) and &quot;tilde&quot; (U+007E, <code>~</code>). White
+space may appear between a combinator and the simple selectors around
+it. <a name=whitespace></a>Only the characters "space" (U+0020), "tab"
+(U+0009), "line feed" (U+000A), "carriage return" (U+000D), and "form
+feed" (U+000C) can occur in white space. Other space-like characters,
+such as "em-space" (U+2003) and "ideographic space" (U+3000), are
+never part of white space.</p>
+
+<p>The elements of a document tree that are represented by a selector
+are the <dfn><a name=subject></a>subjects of the selector</dfn>. A
+selector consisting of a single sequence of simple selectors
+represents any element satisfying its requirements. Prepending another
+sequence of simple selectors and a combinator to a sequence imposes
+additional matching constraints, so the subjects of a selector are
+always a subset of the elements represented by the last sequence of
+simple selectors.</p>
+
+<p>An empty selector, containing no sequence of simple selectors and
+no pseudo-element, is an <a href="#Conformance">invalid
+selector</a>.</p>
+
+<h2><a name=grouping>5. Groups of selectors</a></h2>
+
+<p>When several selectors share the same declarations, they may be
+grouped into a comma-separated list. (A comma is U+002C.)</p>
+
+<div class="example">
+<p>CSS examples:</p>
+<p>In this example, we condense three rules with identical
+declarations into one. Thus,</p>
+<pre>h1 { font-family: sans-serif }
+h2 { font-family: sans-serif }
+h3 { font-family: sans-serif }</pre>
+<p>is equivalent to:</p>
+<pre>h1, h2, h3 { font-family: sans-serif }</pre>
+</div>
+
+<p><strong>Warning</strong>: the equivalence is true in this example
+because all the selectors are valid selectors. If just one of these
+selectors were invalid, the entire group of selectors would be
+invalid. This would invalidate the rule for all three heading
+elements, whereas in the former case only one of the three individual
+heading rules would be invalidated.</p>
+
+
+<h2><a name=simple-selectors>6. Simple selectors</a></h2>
+
+<h3><a name=type-selectors>6.1. Type selector</a></h3>
+
+<p>A <dfn>type selector</dfn> is the name of a document language
+element type. A type selector represents an instance of the element
+type in the document tree.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents an <code>h1</code> element in the document tree:</p>
+ <pre>h1</pre>
+</div>
+
+
+<h4><a name=typenmsp>6.1.1. Type selectors and namespaces</a></h4>
+
+<p>Type selectors allow an optional namespace (<a
+href="#refsXMLNAMES">[XMLNAMES]</a>) component. A namespace prefix
+that has been previously declared may be prepended to the element name
+separated by the namespace separator &quot;vertical bar&quot;
+(U+007C, <code>|</code>).</p>
+
+<p>The namespace component may be left empty to indicate that the
+selector is only to represent elements with no declared namespace.</p>
+
+<p>An asterisk may be used for the namespace prefix, indicating that
+the selector represents elements in any namespace (including elements
+with no namespace).</p>
+
+<p>Element type selectors that have no namespace component (no
+namespace separator), represent elements without regard to the
+element's namespace (equivalent to "<code>*|</code>") unless a default
+namespace has been declared. If a default namespace has been declared,
+the selector will represent only elements in the default
+namespace.</p>
+
+<p>A type selector containing a namespace prefix that has not been
+previously declared is an <a href="#Conformance">invalid</a> selector.
+The mechanism for declaring a namespace prefix is left up to the
+language implementing Selectors. In CSS, such a mechanism is defined
+in the General Syntax module.</p>
+
+<p>In a namespace-aware client, element type selectors will only match
+against the <a
+href="http://www.w3.org/TR/REC-xml-names/#NT-LocalPart">local part</a>
+of the element's <a
+href="http://www.w3.org/TR/REC-xml-names/#ns-qualnames">qualified
+name</a>. See <a href="#downlevel">below</a> for notes about matching
+behaviors in down-level clients.</p>
+
+<p>In summary:</p>
+
+<dl>
+ <dt><code>ns|E</code></dt>
+ <dd>elements with name E in namespace ns</dd>
+ <dt><code>*|E</code></dt>
+ <dd>elements with name E in any namespace, including those without any
+ declared namespace</dd>
+ <dt><code>|E</code></dt>
+ <dd>elements with name E without any declared namespace</dd>
+ <dt><code>E</code></dt>
+ <dd>if no default namespace has been specified, this is equivalent to *|E.
+ Otherwise it is equivalent to ns|E where ns is the default namespace.</dd>
+</dl>
+
+<div class="example">
+ <p>CSS examples:</p>
+
+ <pre>@namespace foo url(http://www.example.com);
+ foo|h1 { color: blue }
+ foo|* { color: yellow }
+ |h1 { color: red }
+ *|h1 { color: green }
+ h1 { color: green }</pre>
+
+ <p>The first rule will match only <code>h1</code> elements in the
+ "http://www.example.com" namespace.</p>
+
+ <p>The second rule will match all elements in the
+ "http://www.example.com" namespace.</p>
+
+ <p>The third rule will match only <code>h1</code> elements without
+ any declared namespace.</p>
+
+ <p>The fourth rule will match <code>h1</code> elements in any
+ namespace (including those without any declared namespace).</p>
+
+ <p>The last rule is equivalent to the fourth rule because no default
+ namespace has been defined.</p>
+
+</div>
+
+<h3><a name=universal-selector>6.2. Universal selector</a> </h3>
+
+<p>The <dfn>universal selector</dfn>, written &quot;asterisk&quot;
+(<code>*</code>), represents the qualified name of any element
+type. It represents any single element in the document tree in any
+namespace (including those without any declared namespace) if no
+default namespace has been specified. If a default namespace has been
+specified, see <a href="#univnmsp">Universal selector and
+Namespaces</a> below.</p>
+
+<p>If the universal selector is not the only component of a sequence
+of simple selectors, the <code>*</code> may be omitted.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <ul>
+ <li><code>*[hreflang|=en]</code> and <code>[hreflang|=en]</code> are equivalent,</li>
+ <li><code>*.warning</code> and <code>.warning</code> are equivalent,</li>
+ <li><code>*#myid</code> and <code>#myid</code> are equivalent.</li>
+ </ul>
+</div>
+
+<p class="note"><strong>Note:</strong> it is recommended that the
+<code>*</code>, representing the universal selector, not be
+omitted.</p>
+
+<h4><a name=univnmsp>6.2.1. Universal selector and namespaces</a></h4>
+
+<p>The universal selector allows an optional namespace component. It
+is used as follows:</p>
+
+<dl>
+ <dt><code>ns|*</code></dt>
+ <dd>all elements in namespace ns</dd>
+ <dt><code>*|*</code></dt>
+ <dd>all elements</dd>
+ <dt><code>|*</code></dt>
+ <dd>all elements without any declared namespace</dd>
+ <dt><code>*</code></dt>
+ <dd>if no default namespace has been specified, this is equivalent to *|*.
+ Otherwise it is equivalent to ns|* where ns is the default namespace.</dd>
+</dl>
+
+<p>A universal selector containing a namespace prefix that has not
+been previously declared is an <a href="#Conformance">invalid</a>
+selector. The mechanism for declaring a namespace prefix is left up
+to the language implementing Selectors. In CSS, such a mechanism is
+defined in the General Syntax module.</p>
+
+
+<h3><a name=attribute-selectors>6.3. Attribute selectors</a></h3>
+
+<p>Selectors allow the representation of an element's attributes. When
+a selector is used as an expression to match against an element,
+attribute selectors must be considered to match an element if that
+element has an attribute that matches the attribute represented by the
+attribute selector.</p>
+
+<h4><a name=attribute-representation>6.3.1. Attribute presence and values
+selectors</a></h4>
+
+<p>CSS2 introduced four attribute selectors:</p>
+
+<dl>
+ <dt><code>[att]</code>
+ <dd>Represents an element with the <code>att</code> attribute, whatever the value of
+ the attribute.</dd>
+ <dt><code>[att=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value is exactly
+ "val".</dd>
+ <dt><code>[att~=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value is a <a
+ href="#whitespace">whitespace</a>-separated list of words, one of
+ which is exactly "val". If "val" contains whitespace, it will never
+ represent anything (since the words are <em>separated</em> by
+ spaces).</dd>
+ <dt><code>[att|=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute, its value either
+ being exactly "val" or beginning with "val" immediately followed by
+ "-" (U+002D). This is primarily intended to allow language subcode
+ matches (e.g., the <code>hreflang</code> attribute on the
+ <code>link</code> element in HTML) as described in RFC 3066 (<a
+ href="#refsRFC3066">[RFC3066]</a>). For <code>lang</code> (or
+ <code>xml:lang</code>) language subcode matching, please see <a
+ href="#lang-pseudo">the <code>:lang</code> pseudo-class</a>.</dd>
+</dl>
+
+<p>Attribute values must be identifiers or strings. The
+case-sensitivity of attribute names and values in selectors depends on
+the document language.</p>
+
+<div class="example">
+
+ <p>Examples:</p>
+
+ <p>The following attribute selector represents an <code>h1</code>
+ element that carries the <code>title</code> attribute, whatever its
+ value:</p>
+
+ <pre>h1[title]</pre>
+
+ <p>In the following example, the selector represents a
+ <code>span</code> element whose <code>class</code> attribute has
+ exactly the value "example":</p>
+
+ <pre>span[class="example"]</pre>
+
+ <p>Multiple attribute selectors can be used to represent several
+ attributes of an element, or several conditions on the same
+ attribute. Here, the selector represents a <code>span</code> element
+ whose <code>hello</code> attribute has exactly the value "Cleveland"
+ and whose <code>goodbye</code> attribute has exactly the value
+ "Columbus":</p>
+
+ <pre>span[hello="Cleveland"][goodbye="Columbus"]</pre>
+
+ <p>The following selectors illustrate the differences between "="
+ and "~=". The first selector will represent, for example, the value
+ "copyright copyleft copyeditor" on a <code>rel</code> attribute. The
+ second selector will only represent an <code>a</code> element with
+ an <code>href</code> attribute having the exact value
+ "http://www.w3.org/".</p>
+
+ <pre>a[rel~="copyright"]
+a[href="http://www.w3.org/"]</pre>
+
+ <p>The following selector represents a <code>link</code> element
+ whose <code>hreflang</code> attribute is exactly "fr".</p>
+
+ <pre>link[hreflang=fr]</pre>
+
+ <p>The following selector represents a <code>link</code> element for
+ which the values of the <code>hreflang</code> attribute begins with
+ "en", including "en", "en-US", and "en-cockney":</p>
+
+ <pre>link[hreflang|="en"]</pre>
+
+ <p>Similarly, the following selectors represents a
+ <code>DIALOGUE</code> element whenever it has one of two different
+ values for an attribute <code>character</code>:</p>
+
+ <pre>DIALOGUE[character=romeo]
+DIALOGUE[character=juliet]</pre>
+
+</div>
+
+<h4><a name=attribute-substrings></a>6.3.2. Substring matching attribute
+selectors</h4>
+
+<p>Three additional attribute selectors are provided for matching
+substrings in the value of an attribute:</p>
+
+<dl>
+ <dt><code>[att^=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value begins
+ with the prefix "val".</dd>
+ <dt><code>[att$=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute whose value ends with
+ the suffix "val".</dd>
+ <dt><code>[att*=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute whose value contains
+ at least one instance of the substring "val".</dd>
+</dl>
+
+<p>Attribute values must be identifiers or strings. The
+case-sensitivity of attribute names in selectors depends on the
+document language.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents an HTML <code>object</code>, referencing an
+ image:</p>
+ <pre>object[type^="image/"]</pre>
+ <p>The following selector represents an HTML anchor <code>a</code> with an
+ <code>href</code> attribute whose value ends with ".html".</p>
+ <pre>a[href$=".html"]</pre>
+ <p>The following selector represents an HTML paragraph with a <code>title</code>
+ attribute whose value contains the substring "hello"</p>
+ <pre>p[title*="hello"]</pre>
+</div>
+
+<h4><a name=attrnmsp>6.3.3. Attribute selectors and namespaces</a></h4>
+
+<p>Attribute selectors allow an optional namespace component to the
+attribute name. A namespace prefix that has been previously declared
+may be prepended to the attribute name separated by the namespace
+separator &quot;vertical bar&quot; (<code>|</code>). In keeping with
+the Namespaces in the XML recommendation, default namespaces do not
+apply to attributes, therefore attribute selectors without a namespace
+component apply only to attributes that have no declared namespace
+(equivalent to "<code>|attr</code>"). An asterisk may be used for the
+namespace prefix indicating that the selector is to match all
+attribute names without regard to the attribute's namespace.
+
+<p>An attribute selector with an attribute name containing a namespace
+prefix that has not been previously declared is an <a
+href="#Conformance">invalid</a> selector. The mechanism for declaring
+a namespace prefix is left up to the language implementing Selectors.
+In CSS, such a mechanism is defined in the General Syntax module.
+
+<div class="example">
+ <p>CSS examples:</p>
+ <pre>@namespace foo "http://www.example.com";
+[foo|att=val] { color: blue }
+[*|att] { color: yellow }
+[|att] { color: green }
+[att] { color: green }</pre>
+
+ <p>The first rule will match only elements with the attribute
+ <code>att</code> in the "http://www.example.com" namespace with the
+ value "val".</p>
+
+ <p>The second rule will match only elements with the attribute
+ <code>att</code> regardless of the namespace of the attribute
+ (including no declared namespace).</p>
+
+ <p>The last two rules are equivalent and will match only elements
+ with the attribute <code>att</code> where the attribute is not
+ declared to be in a namespace.</p>
+
+</div>
+
+<h4><a name=def-values>6.3.4. Default attribute values in DTDs</a></h4>
+
+<p>Attribute selectors represent explicitly set attribute values in
+the document tree. Default attribute values may be defined in a DTD or
+elsewhere, but cannot always be selected by attribute
+selectors. Selectors should be designed so that they work even if the
+default values are not included in the document tree.</p>
+
+<p>More precisely, a UA is <em>not</em> required to read an "external
+subset" of the DTD but <em>is</em> required to look for default
+attribute values in the document's "internal subset." (See <a
+href="#refsXML10">[XML10]</a> for definitions of these subsets.)</p>
+
+<p>A UA that recognizes an XML namespace <a
+href="#refsXMLNAMES">[XMLNAMES]</a> is not required to use its
+knowledge of that namespace to treat default attribute values as if
+they were present in the document. (For example, an XHTML UA is not
+required to use its built-in knowledge of the XHTML DTD.)</p>
+
+<p class="note"><strong>Note:</strong> Typically, implementations
+choose to ignore external subsets.</p>
+
+<div class="example">
+<p>Example:</p>
+
+<p>Consider an element EXAMPLE with an attribute "notation" that has a
+default value of "decimal". The DTD fragment might be</p>
+
+<pre class="dtd-example">&lt;!ATTLIST EXAMPLE notation (decimal,octal) "decimal"></pre>
+
+<p>If the style sheet contains the rules</p>
+
+<pre>EXAMPLE[notation=decimal] { /*... default property settings ...*/ }
+EXAMPLE[notation=octal] { /*... other settings...*/ }</pre>
+
+<p>the first rule will not match elements whose "notation" attribute
+is set by default, i.e. not set explicitly. To catch all cases, the
+attribute selector for the default value must be dropped:</p>
+
+<pre>EXAMPLE { /*... default property settings ...*/ }
+EXAMPLE[notation=octal] { /*... other settings...*/ }</pre>
+
+<p>Here, because the selector <code>EXAMPLE[notation=octal]</code> is
+more specific than the tag
+selector alone, the style declarations in the second rule will override
+those in the first for elements that have a "notation" attribute value
+of "octal". Care has to be taken that all property declarations that
+are to apply only to the default case are overridden in the non-default
+cases' style rules.</p>
+
+</div>
+
+<h3><a name=class-html>6.4. Class selectors</a></h3>
+
+<p>Working with HTML, authors may use the period (U+002E,
+<code>.</code>) notation as an alternative to the <code>~=</code>
+notation when representing the <code>class</code> attribute. Thus, for
+HTML, <code>div.value</code> and <code>div[class~=value]</code> have
+the same meaning. The attribute value must immediately follow the
+&quot;period&quot; (<code>.</code>).</p>
+
+<p>UAs may apply selectors using the period (.) notation in XML
+documents if the UA has namespace-specific knowledge that allows it to
+determine which attribute is the &quot;class&quot; attribute for the
+respective namespace. One such example of namespace-specific knowledge
+is the prose in the specification for a particular namespace (e.g. SVG
+1.0 <a href="#refsSVG">[SVG]</a> describes the <a
+href="http://www.w3.org/TR/2001/PR-SVG-20010719/styling.html#ClassAttribute">SVG
+&quot;class&quot; attribute</a> and how a UA should interpret it, and
+similarly MathML 1.01 <a href="#refsMATH">[MATH]</a> describes the <a
+href="http://www.w3.org/1999/07/REC-MathML-19990707/chapter2.html#sec2.3.4">MathML
+&quot;class&quot; attribute</a>.)</p>
+
+<div class="example">
+ <p>CSS examples:</p>
+
+ <p>We can assign style information to all elements with
+ <code>class~="pastoral"</code> as follows:</p>
+
+ <pre>*.pastoral { color: green } /* all elements with class~=pastoral */</pre>
+
+ <p>or just</p>
+
+ <pre>.pastoral { color: green } /* all elements with class~=pastoral */</pre>
+
+ <p>The following assigns style only to H1 elements with
+ <code>class~="pastoral"</code>:</p>
+
+ <pre>H1.pastoral { color: green } /* H1 elements with class~=pastoral */</pre>
+
+ <p>Given these rules, the first H1 instance below would not have
+ green text, while the second would:</p>
+
+ <pre>&lt;H1&gt;Not green&lt;/H1&gt;
+&lt;H1 class="pastoral"&gt;Very green&lt;/H1&gt;</pre>
+
+</div>
+
+<p>To represent a subset of "class" values, each value must be preceded
+by a ".", in any order.</P>
+
+<div class="example">
+
+ <p>CSS example:</p>
+
+ <p>The following rule matches any P element whose "class" attribute
+ has been assigned a list of <a
+ href="#whitespace">whitespace</a>-separated values that includes
+ "pastoral" and "marine":</p>
+
+ <pre>p.pastoral.marine { color: green }</pre>
+
+ <p>This rule matches when <code>class="pastoral blue aqua
+ marine"</code> but does not match for <code>class="pastoral
+ blue"</code>.</p>
+
+</div>
+
+<p class="note"><strong>Note:</strong> Because CSS gives considerable
+power to the "class" attribute, authors could conceivably design their
+own "document language" based on elements with almost no associated
+presentation (such as DIV and SPAN in HTML) and assigning style
+information through the "class" attribute. Authors should avoid this
+practice since the structural elements of a document language often
+have recognized and accepted meanings and author-defined classes may
+not.</p>
+
+<p class="note"><strong>Note:</strong> If an element has multiple
+class attributes, their values must be concatenated with spaces
+between the values before searching for the class. As of this time the
+working group is not aware of any manner in which this situation can
+be reached, however, so this behavior is explicitly non-normative in
+this specification.</p>
+
+<h3><a name=id-selectors>6.5. ID selectors</a></h3>
+
+<p>Document languages may contain attributes that are declared to be
+of type ID. What makes attributes of type ID special is that no two
+such attributes can have the same value in a document, regardless of
+the type of the elements that carry them; whatever the document
+language, an ID typed attribute can be used to uniquely identify its
+element. In HTML all ID attributes are named "id"; XML applications
+may name ID attributes differently, but the same restriction
+applies.</p>
+
+<p>An ID-typed attribute of a document language allows authors to
+assign an identifier to one element instance in the document tree. W3C
+ID selectors represent an element instance based on its identifier. An
+ID selector contains a &quot;number sign&quot; (U+0023,
+<code>#</code>) immediately followed by the ID value, which must be an
+identifier.</p>
+
+<p>Selectors does not specify how a UA knows the ID-typed attribute of
+an element. The UA may, e.g., read a document's DTD, have the
+information hard-coded or ask the user.
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following ID selector represents an <code>h1</code> element
+ whose ID-typed attribute has the value "chapter1":</p>
+ <pre>h1#chapter1</pre>
+ <p>The following ID selector represents any element whose ID-typed
+ attribute has the value "chapter1":</p>
+ <pre>#chapter1</pre>
+ <p>The following selector represents any element whose ID-typed
+ attribute has the value "z98y".</p>
+ <pre>*#z98y</pre>
+</div>
+
+<p class="note"><strong>Note.</strong> In XML 1.0 <a
+href="#refsXML10">[XML10]</a>, the information about which attribute
+contains an element's IDs is contained in a DTD or a schema. When
+parsing XML, UAs do not always read the DTD, and thus may not know
+what the ID of an element is (though a UA may have namespace-specific
+knowledge that allows it to determine which attribute is the ID
+attribute for that namespace). If a style sheet designer knows or
+suspects that a UA may not know what the ID of an element is, he
+should use normal attribute selectors instead:
+<code>[name=p371]</code> instead of <code>#p371</code>. Elements in
+XML 1.0 documents without a DTD do not have IDs at all.</p>
+
+<p>If an element has multiple ID attributes, all of them must be
+treated as IDs for that element for the purposes of the ID
+selector. Such a situation could be reached using mixtures of xml:id,
+DOM3 Core, XML DTDs, and namespace-specific knowledge.</p>
+
+<h3><a name=pseudo-classes>6.6. Pseudo-classes</a></h3>
+
+<p>The pseudo-class concept is introduced to permit selection based on
+information that lies outside of the document tree or that cannot be
+expressed using the other simple selectors.</p>
+
+<p>A pseudo-class always consists of a &quot;colon&quot;
+(<code>:</code>) followed by the name of the pseudo-class and
+optionally by a value between parentheses.</p>
+
+<p>Pseudo-classes are allowed in all sequences of simple selectors
+contained in a selector. Pseudo-classes are allowed anywhere in
+sequences of simple selectors, after the leading type selector or
+universal selector (possibly omitted). Pseudo-class names are
+case-insensitive. Some pseudo-classes are mutually exclusive, while
+others can be applied simultaneously to the same
+element. Pseudo-classes may be dynamic, in the sense that an element
+may acquire or lose a pseudo-class while a user interacts with the
+document.</p>
+
+
+<h4><a name=dynamic-pseudos>6.6.1. Dynamic pseudo-classes</a></h4>
+
+<p>Dynamic pseudo-classes classify elements on characteristics other
+than their name, attributes, or content, in principle characteristics
+that cannot be deduced from the document tree.</p>
+
+<p>Dynamic pseudo-classes do not appear in the document source or
+document tree.</p>
+
+
+<h5>The <a name=link>link pseudo-classes: :link and :visited</a></h5>
+
+<p>User agents commonly display unvisited links differently from
+previously visited ones. Selectors
+provides the pseudo-classes <code>:link</code> and
+<code>:visited</code> to distinguish them:</p>
+
+<ul>
+ <li>The <code>:link</code> pseudo-class applies to links that have
+ not yet been visited.</li>
+ <li>The <code>:visited</code> pseudo-class applies once the link has
+ been visited by the user. </li>
+</ul>
+
+<p>After some amount of time, user agents may choose to return a
+visited link to the (unvisited) ':link' state.</p>
+
+<p>The two states are mutually exclusive.</p>
+
+<div class="example">
+
+ <p>Example:</p>
+
+ <p>The following selector represents links carrying class
+ <code>external</code> and already visited:</p>
+
+ <pre>a.external:visited</pre>
+
+</div>
+
+<p class="note"><strong>Note:</strong> It is possible for style sheet
+authors to abuse the :link and :visited pseudo-classes to determine
+which sites a user has visited without the user's consent.
+
+<p>UAs may therefore treat all links as unvisited links, or implement
+other measures to preserve the user's privacy while rendering visited
+and unvisited links differently.</p>
+
+<h5>The <a name=useraction-pseudos>user action pseudo-classes
+:hover, :active, and :focus</a></h5>
+
+<p>Interactive user agents sometimes change the rendering in response
+to user actions. Selectors provides
+three pseudo-classes for the selection of an element the user is
+acting on.</p>
+
+<ul>
+
+ <li>The <code>:hover</code> pseudo-class applies while the user
+ designates an element with a pointing device, but does not activate
+ it. For example, a visual user agent could apply this pseudo-class
+ when the cursor (mouse pointer) hovers over a box generated by the
+ element. User agents not that do not support <a
+ href="http://www.w3.org/TR/REC-CSS2/media.html#interactive-media-group">interactive
+ media</a> do not have to support this pseudo-class. Some conforming
+ user agents that support <a
+ href="http://www.w3.org/TR/REC-CSS2/media.html#interactive-media-group">interactive
+ media</a> may not be able to support this pseudo-class (e.g., a pen
+ device that does not detect hovering).</li>
+
+ <li>The <code>:active</code> pseudo-class applies while an element
+ is being activated by the user. For example, between the times the
+ user presses the mouse button and releases it.</li>
+
+ <li>The <code>:focus</code> pseudo-class applies while an element
+ has the focus (accepts keyboard or mouse events, or other forms of
+ input). </li>
+
+</ul>
+
+<p>There may be document language or implementation specific limits on
+which elements can become <code>:active</code> or acquire
+<code>:focus</code>.</p>
+
+<p>These pseudo-classes are not mutually exclusive. An element may
+match several pseudo-classes at the same time.</p>
+
+<p>Selectors doesn't define if the parent of an element that is
+':active' or ':hover' is also in that state.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <pre>a:link /* unvisited links */
+a:visited /* visited links */
+a:hover /* user hovers */
+a:active /* active links */</pre>
+ <p>An example of combining dynamic pseudo-classes:</p>
+ <pre>a:focus
+a:focus:hover</pre>
+ <p>The last selector matches <code>a</code> elements that are in
+ the pseudo-class :focus and in the pseudo-class :hover.</p>
+</div>
+
+<p class="note"><strong>Note:</strong> An element can be both ':visited'
+and ':active' (or ':link' and ':active').</p>
+
+<h4><a name=target-pseudo>6.6.2. The target pseudo-class :target</a></h4>
+
+<p>Some URIs refer to a location within a resource. This kind of URI
+ends with a &quot;number sign&quot; (#) followed by an anchor
+identifier (called the fragment identifier).</p>
+
+<p>URIs with fragment identifiers link to a certain element within the
+document, known as the target element. For instance, here is a URI
+pointing to an anchor named <code>section_2</code> in an HTML
+document:</p>
+
+<pre>http://example.com/html/top.html#section_2</pre>
+
+<p>A target element can be represented by the <code>:target</code>
+pseudo-class. If the document's URI has no fragment identifier, then
+the document has no target element.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <pre>p.note:target</pre>
+ <p>This selector represents a <code>p</code> element of class
+ <code>note</code> that is the target element of the referring
+ URI.</p>
+</div>
+
+<div class="example">
+ <p>CSS example:</p>
+ <p>Here, the <code>:target</code> pseudo-class is used to make the
+ target element red and place an image before it, if there is one:</p>
+ <pre>*:target { color : red }
+*:target::before { content : url(target.png) }</pre>
+</div>
+
+<h4><a name=lang-pseudo>6.6.3. The language pseudo-class :lang</a></h4>
+
+<p>If the document language specifies how the human language of an
+element is determined, it is possible to write selectors that
+represent an element based on its language. For example, in HTML <a
+href="#refsHTML4">[HTML4]</a>, the language is determined by a
+combination of the <code>lang</code> attribute, the <code>meta</code>
+element, and possibly by information from the protocol (such as HTTP
+headers). XML uses an attribute called <code>xml:lang</code>, and
+there may be other document language-specific methods for determining
+the language.</p>
+
+<p>The pseudo-class <code>:lang(C)</code> represents an element that
+is in language C. Whether an element is represented by a
+<code>:lang()</code> selector is based solely on the identifier C
+being either equal to, or a hyphen-separated substring of, the
+element's language value, in the same way as if performed by the <a
+href="#attribute-representation">'|='</a> operator in attribute
+selectors. The identifier C does not have to be a valid language
+name.</p>
+
+<p>C must not be empty. (If it is, the selector is invalid.)</p>
+
+<p class="note"><strong>Note:</strong> It is recommended that
+documents and protocols indicate language using codes from RFC 3066 <a
+href="#refsRFC3066">[RFC3066]</a> or its successor, and by means of
+"xml:lang" attributes in the case of XML-based documents <a
+href="#refsXML10">[XML10]</a>. See <a
+href="http://www.w3.org/International/questions/qa-lang-2or3.html">
+"FAQ: Two-letter or three-letter language codes."</a></p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The two following selectors represent an HTML document that is in
+ Belgian, French, or German. The two next selectors represent
+ <code>q</code> quotations in an arbitrary element in Belgian, French,
+ or German.</p>
+ <pre>html:lang(fr-be)
+html:lang(de)
+:lang(fr-be) &gt; q
+:lang(de) &gt; q</pre>
+</div>
+
+<h4><a name=UIstates>6.6.4. The UI element states pseudo-classes</a></h4>
+
+<h5><a name=enableddisabled>The :enabled and :disabled pseudo-classes</a></h5>
+
+<p>The <code>:enabled</code> pseudo-class allows authors to customize
+the look of user interface elements that are enabled &mdash; which the
+user can select or activate in some fashion (e.g. clicking on a button
+with a mouse). There is a need for such a pseudo-class because there
+is no way to programmatically specify the default appearance of say,
+an enabled <code>input</code> element without also specifying what it
+would look like when it was disabled.</p>
+
+<p>Similar to <code>:enabled</code>, <code>:disabled</code> allows the
+author to specify precisely how a disabled or inactive user interface
+element should look.</p>
+
+<p>Most elements will be neither enabled nor disabled. An element is
+enabled if the user can either activate it or transfer the focus to
+it. An element is disabled if it could be enabled, but the user cannot
+presently activate it or transfer focus to it.</p>
+
+
+<h5><a name=checked>The :checked pseudo-class</a></h5>
+
+<p>Radio and checkbox elements can be toggled by the user. Some menu
+items are "checked" when the user selects them. When such elements are
+toggled "on" the <code>:checked</code> pseudo-class applies. The
+<code>:checked</code> pseudo-class initially applies to such elements
+that have the HTML4 <code>selected</code> and <code>checked</code>
+attributes as described in <a
+href="http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.2.1">Section
+17.2.1 of HTML4</a>, but of course the user can toggle "off" such
+elements in which case the <code>:checked</code> pseudo-class would no
+longer apply. While the <code>:checked</code> pseudo-class is dynamic
+in nature, and is altered by user action, since it can also be based
+on the presence of the semantic HTML4 <code>selected</code> and
+<code>checked</code> attributes, it applies to all media.
+
+
+<h5><a name=indeterminate>The :indeterminate pseudo-class</a></h5>
+
+<div class="note">
+
+<p>Radio and checkbox elements can be toggled by the user, but are
+sometimes in an indeterminate state, neither checked nor unchecked.
+This can be due to an element attribute, or DOM manipulation.</p>
+
+<p>A future version of this specification may introduce an
+<code>:indeterminate</code> pseudo-class that applies to such elements.
+<!--While the <code>:indeterminate</code> pseudo-class is dynamic in
+nature, and is altered by user action, since it can also be based on
+the presence of an element attribute, it applies to all media.</p>
+
+<p>Components of a radio-group initialized with no pre-selected choice
+are an example of :indeterminate state.--></p>
+
+</div>
+
+
+<h4><a name=structural-pseudos>6.6.5. Structural pseudo-classes</a></h4>
+
+<p>Selectors introduces the concept of <dfn>structural
+pseudo-classes</dfn> to permit selection based on extra information that lies in
+the document tree but cannot be represented by other simple selectors or
+combinators.
+
+<p>Note that standalone pieces of PCDATA (text nodes in the DOM) are
+not counted when calculating the position of an element in the list of
+children of its parent. When calculating the position of an element in
+the list of children of its parent, the index numbering starts at 1.
+
+
+<h5><a name=root-pseudo>:root pseudo-class</a></h5>
+
+<p>The <code>:root</code> pseudo-class represents an element that is
+the root of the document. In HTML 4, this is always the
+<code>HTML</code> element.
+
+
+<h5><a name=nth-child-pseudo>:nth-child() pseudo-class</a></h5>
+
+<p>The
+<code>:nth-child(<var>a</var><code>n</code>+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings
+<strong>before</strong> it in the document tree, for a given positive
+integer or zero value of <code>n</code>, and has a parent element. In
+other words, this matches the <var>b</var>th child of an element after
+all the children have been split into groups of <var>a</var> elements
+each. For example, this allows the selectors to address every other
+row in a table, and could be used to alternate the color
+of paragraph text in a cycle of four. The <var>a</var> and
+<var>b</var> values must be zero, negative integers or positive
+integers. The index of the first child of an element is 1.
+
+<p>In addition to this, <code>:nth-child()</code> can take
+'<code>odd</code>' and '<code>even</code>' as arguments instead.
+'<code>odd</code>' has the same signification as <code>2n+1</code>,
+and '<code>even</code>' has the same signification as <code>2n</code>.
+
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-child(2n+1) /* represents every odd row of an HTML table */
+tr:nth-child(odd) /* same */
+tr:nth-child(2n) /* represents every even row of an HTML table */
+tr:nth-child(even) /* same */
+
+/* Alternate paragraph colours in CSS */
+p:nth-child(4n+1) { color: navy; }
+p:nth-child(4n+2) { color: green; }
+p:nth-child(4n+3) { color: maroon; }
+p:nth-child(4n+4) { color: purple; }</pre>
+</div>
+
+<p>When <var>a</var>=0, no repeating is used, so for example
+<code>:nth-child(0n+5)</code> matches only the fifth child. When
+<var>a</var>=0, the <var>a</var><code>n</code> part need not be
+included, so the syntax simplifies to
+<code>:nth-child(<var>b</var>)</code> and the last example simplifies
+to <code>:nth-child(5)</code>.
+
+<div class="example">
+<p>Examples:</p>
+<pre>foo:nth-child(0n+1) /* represents an element foo, first child of its parent element */
+foo:nth-child(1) /* same */</pre>
+</div>
+
+<p>When <var>a</var>=1, the number may be omitted from the rule.
+
+<div class="example">
+<p>Examples:</p>
+<p>The following selectors are therefore equivalent:</p>
+<pre>bar:nth-child(1n+0) /* represents all bar elements, specificity (0,1,1) */
+bar:nth-child(n+0) /* same */
+bar:nth-child(n) /* same */
+bar /* same but lower specificity (0,0,1) */</pre>
+</div>
+
+<p>If <var>b</var>=0, then every <var>a</var>th element is picked. In
+such a case, the <var>b</var> part may be omitted.
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-child(2n+0) /* represents every even row of an HTML table */
+tr:nth-child(2n) /* same */</pre>
+</div>
+
+<p>If both <var>a</var> and <var>b</var> are equal to zero, the
+pseudo-class represents no element in the document tree.</p>
+
+<p>The value <var>a</var> can be negative, but only the positive
+values of <var>a</var><code>n</code>+<var>b</var>, for
+<code>n</code>&ge;0, may represent an element in the document
+tree.</p>
+
+<div class="example">
+<p>Example:</p>
+<pre>html|tr:nth-child(-n+6) /* represents the 6 first rows of XHTML tables */</pre>
+</div>
+
+<p>When the value <var>b</var> is negative, the "+" character in the
+expression must be removed (it is effectively replaced by the "-"
+character indicating the negative value of <var>b</var>).</p>
+
+<div class="example">
+<p>Examples:</p>
+<pre>:nth-child(10n-1) /* represents the 9th, 19th, 29th, etc, element */
+:nth-child(10n+9) /* Same */
+:nth-child(10n+-1) /* Syntactically invalid, and would be ignored */</pre>
+</div>
+
+
+<h5><a name=nth-last-child-pseudo>:nth-last-child() pseudo-class</a></h5>
+
+<p>The <code>:nth-last-child(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings
+<strong>after</strong> it in the document tree, for a given positive
+integer or zero value of <code>n</code>, and has a parent element. See
+<code>:nth-child()</code> pseudo-class for the syntax of its argument.
+It also accepts the '<code>even</code>' and '<code>odd</code>' values
+as arguments.
+
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-last-child(-n+2) /* represents the two last rows of an HTML table */
+
+foo:nth-last-child(odd) /* represents all odd foo elements in their parent element,
+ counting from the last one */</pre>
+</div>
+
+
+<h5><a name=nth-of-type-pseudo>:nth-of-type() pseudo-class</a></h5>
+
+<p>The <code>:nth-of-type(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings with the same
+element name <strong>before</strong> it in the document tree, for a
+given zero or positive integer value of <code>n</code>, and has a
+parent element. In other words, this matches the <var>b</var>th child
+of that type after all the children of that type have been split into
+groups of a elements each. See <code>:nth-child()</code> pseudo-class
+for the syntax of its argument. It also accepts the
+'<code>even</code>' and '<code>odd</code>' values.
+
+
+<div class="example">
+<p>CSS example:</p>
+<p>This allows an author to alternate the position of floated images:</p>
+<pre>img:nth-of-type(2n+1) { float: right; }
+img:nth-of-type(2n) { float: left; }</pre>
+</div>
+
+
+<h5><a name=nth-last-of-type-pseudo>:nth-last-of-type() pseudo-class</a></h5>
+
+<p>The <code>:nth-last-of-type(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings with the same
+element name <strong>after</strong> it in the document tree, for a
+given zero or positive integer value of <code>n</code>, and has a
+parent element. See <code>:nth-child()</code> pseudo-class for the
+syntax of its argument. It also accepts the '<code>even</code>' and '<code>odd</code>' values.
+
+
+<div class="example">
+ <p>Example:</p>
+ <p>To represent all <code>h2</code> children of an XHTML
+ <code>body</code> except the first and last, one could use the
+ following selector:</p>
+ <pre>body &gt; h2:nth-of-type(n+2):nth-last-of-type(n+2)</pre>
+ <p>In this case, one could also use <code>:not()</code>, although the
+ selector ends up being just as long:</p>
+ <pre>body &gt; h2:not(:first-of-type):not(:last-of-type)</pre>
+</div>
+
+
+<h5><a name=first-child-pseudo>:first-child pseudo-class</a></h5>
+
+<p>Same as <code>:nth-child(1)</code>. The <code>:first-child</code> pseudo-class
+represents an element that is the first child of some other element.
+
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element that is
+ the first child of a <code>div</code> element:</p>
+ <pre>div &gt; p:first-child</pre>
+ <p>This selector can represent the <code>p</code> inside the
+ <code>div</code> of the following fragment:</p>
+ <pre>&lt;p&gt; The last P before the note.&lt;/p&gt;
+&lt;div class="note"&gt;
+ &lt;p&gt; The first P inside the note.&lt;/p&gt;
+&lt;/div&gt;</pre>but cannot represent the second <code>p</code> in the following
+fragment:
+ <pre>&lt;p&gt; The last P before the note.&lt;/p&gt;
+&lt;div class="note"&gt;
+ &lt;h2&gt; Note &lt;/h2&gt;
+ &lt;p&gt; The first P inside the note.&lt;/p&gt;
+&lt;/div&gt;</pre>
+ <p>The following two selectors are usually equivalent:</p>
+ <pre>* &gt; a:first-child /* a is first child of any element */
+a:first-child /* Same (assuming a is not the root element) */</pre>
+</div>
+
+<h5><a name=last-child-pseudo>:last-child pseudo-class</a></h5>
+
+<p>Same as <code>:nth-last-child(1)</code>. The <code>:last-child</code> pseudo-class
+represents an element that is the last child of some other element.
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents a list item <code>li</code> that
+ is the last child of an ordered list <code>ol</code>.
+ <pre>ol &gt; li:last-child</pre>
+</div>
+
+<h5><a name=first-of-type-pseudo>:first-of-type pseudo-class</a></h5>
+
+<p>Same as <code>:nth-of-type(1)</code>. The <code>:first-of-type</code> pseudo-class
+represents an element that is the first sibling of its type in the list of
+children of its parent element.
+
+<div class="example">
+<p>Example:</p>
+<p>The following selector represents a definition title
+<code>dt</code> inside a definition list <code>dl</code>, this
+<code>dt</code> being the first of its type in the list of children of
+its parent element.</p>
+<pre>dl dt:first-of-type</pre>
+<p>It is a valid description for the first two <code>dt</code>
+elements in the following example but not for the third one:</p>
+<pre>&lt;dl&gt;
+ &lt;dt&gt;gigogne&lt;/dt&gt;
+ &lt;dd&gt;
+ &lt;dl&gt;
+ &lt;dt&gt;fus&eacute;e&lt;/dt&gt;
+ &lt;dd&gt;multistage rocket&lt;/dd&gt;
+ &lt;dt&gt;table&lt;/dt&gt;
+ &lt;dd&gt;nest of tables&lt;/dd&gt;
+ &lt;/dl&gt;
+ &lt;/dd&gt;
+&lt;/dl&gt;</pre>
+</div>
+
+<h5><a name=last-of-type-pseudo>:last-of-type pseudo-class</a></h5>
+
+<p>Same as <code>:nth-last-of-type(1)</code>. The
+<code>:last-of-type</code> pseudo-class represents an element that is
+the last sibling of its type in the list of children of its parent
+element.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents the last data cell
+ <code>td</code> of a table row.</p>
+ <pre>tr &gt; td:last-of-type</pre>
+</div>
+
+<h5><a name=only-child-pseudo>:only-child pseudo-class</a></h5>
+
+<p>Represents an element that has a parent element and whose parent
+element has no other element children. Same as
+<code>:first-child:last-child</code> or
+<code>:nth-child(1):nth-last-child(1)</code>, but with a lower
+specificity.</p>
+
+<h5><a name=only-of-type-pseudo>:only-of-type pseudo-class</a></h5>
+
+<p>Represents an element that has a parent element and whose parent
+element has no other element children with the same element name. Same
+as <code>:first-of-type:last-of-type</code> or
+<code>:nth-of-type(1):nth-last-of-type(1)</code>, but with a lower
+specificity.</p>
+
+
+<h5><a name=empty-pseudo></a>:empty pseudo-class</h5>
+
+<p>The <code>:empty</code> pseudo-class represents an element that has
+no children at all. In terms of the DOM, only element nodes and text
+nodes (including CDATA nodes and entity references) whose data has a
+non-zero length must be considered as affecting emptiness; comments,
+PIs, and other nodes must not affect whether an element is considered
+empty or not.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p><code>p:empty</code> is a valid representation of the following fragment:</p>
+ <pre>&lt;p&gt;&lt;/p&gt;</pre>
+ <p><code>foo:empty</code> is not a valid representation for the
+ following fragments:</p>
+ <pre>&lt;foo&gt;bar&lt;/foo&gt;</pre>
+ <pre>&lt;foo&gt;&lt;bar&gt;bla&lt;/bar&gt;&lt;/foo&gt;</pre>
+ <pre>&lt;foo&gt;this is not &lt;bar&gt;:empty&lt;/bar&gt;&lt;/foo&gt;</pre>
+</div>
+
+<h4><a name=content-selectors>6.6.6. Blank</a></h4> <!-- It's the Return of Appendix H!!! Run away! -->
+
+<p>This section intentionally left blank.</p>
+<!-- (used to be :contains()) -->
+
+<h4><a name=negation></a>6.6.7. The negation pseudo-class</h4>
+
+<p>The negation pseudo-class, <code>:not(<var>X</var>)</code>, is a
+functional notation taking a <a href="#simple-selectors-dfn">simple
+selector</a> (excluding the negation pseudo-class itself and
+pseudo-elements) as an argument. It represents an element that is not
+represented by the argument.
+
+<!-- pseudo-elements are not simple selectors, so the above paragraph
+may be a bit confusing -->
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following CSS selector matches all <code>button</code>
+ elements in an HTML document that are not disabled.</p>
+ <pre>button:not([DISABLED])</pre>
+ <p>The following selector represents all but <code>FOO</code>
+ elements.</p>
+ <pre>*:not(FOO)</pre>
+ <p>The following group of selectors represents all HTML elements
+ except links.</p>
+ <pre>html|*:not(:link):not(:visited)</pre>
+</div>
+
+<p>Default namespace declarations do not affect the argument of the
+negation pseudo-class unless the argument is a universal selector or a
+type selector.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>Assuming that the default namespace is bound to
+ "http://example.com/", the following selector represents all
+ elements that are not in that namespace:</p>
+ <pre>*|*:not(*)</pre>
+ <p>The following CSS selector matches any element being hovered,
+ regardless of its namespace. In particular, it is not limited to
+ only matching elements in the default namespace that are not being
+ hovered, and elements not in the default namespace don't match the
+ rule when they <em>are</em> being hovered.</p>
+ <pre>*|*:not(:hover)</pre>
+</div>
+
+<p class="note"><strong>Note</strong>: the :not() pseudo allows
+useless selectors to be written. For instance <code>:not(*|*)</code>,
+which represents no element at all, or <code>foo:not(bar)</code>,
+which is equivalent to <code>foo</code> but with a higher
+specificity.</p>
+
+<h3><a name=pseudo-elements>7. Pseudo-elements</a></h3>
+
+<p>Pseudo-elements create abstractions about the document tree beyond
+those specified by the document language. For instance, document
+languages do not offer mechanisms to access the first letter or first
+line of an element's content. Pseudo-elements allow designers to refer
+to this otherwise inaccessible information. Pseudo-elements may also
+provide designers a way to refer to content that does not exist in the
+source document (e.g., the <code>::before</code> and
+<code>::after</code> pseudo-elements give access to generated
+content).</p>
+
+<p>A pseudo-element is made of two colons (<code>::</code>) followed
+by the name of the pseudo-element.</p>
+
+<p>This <code>::</code> notation is introduced by the current document
+in order to establish a discrimination between pseudo-classes and
+pseudo-elements. For compatibility with existing style sheets, user
+agents must also accept the previous one-colon notation for
+pseudo-elements introduced in CSS levels 1 and 2 (namely,
+<code>:first-line</code>, <code>:first-letter</code>,
+<code>:before</code> and <code>:after</code>). This compatibility is
+not allowed for the new pseudo-elements introduced in CSS level 3.</p>
+
+<p>Only one pseudo-element may appear per selector, and if present it
+must appear after the sequence of simple selectors that represents the
+<a href="#subject">subjects</a> of the selector. <span class="note">A
+future version of this specification may allow multiple
+pesudo-elements per selector.</span></p>
+
+<h4><a name=first-line>7.1. The ::first-line pseudo-element</a></h4>
+
+<p>The <code>::first-line</code> pseudo-element describes the contents
+of the first formatted line of an element.
+
+<div class="example">
+<p>CSS example:</p>
+<pre>p::first-line { text-transform: uppercase }</pre>
+<p>The above rule means "change the letters of the first line of every
+paragraph to uppercase".</p>
+</div>
+
+<p>The selector <code>p::first-line</code> does not match any real
+HTML element. It does match a pseudo-element that conforming user
+agents will insert at the beginning of every paragraph.</p>
+
+<p>Note that the length of the first line depends on a number of
+factors, including the width of the page, the font size, etc. Thus,
+an ordinary HTML paragraph such as:</p>
+
+<pre>
+&lt;P&gt;This is a somewhat long HTML
+paragraph that will be broken into several
+lines. The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>the lines of which happen to be broken as follows:
+
+<pre>
+THIS IS A SOMEWHAT LONG HTML PARAGRAPH THAT
+will be broken into several lines. The first
+line will be identified by a fictional tag
+sequence. The other lines will be treated as
+ordinary lines in the paragraph.
+</pre>
+
+<p>This paragraph might be "rewritten" by user agents to include the
+<em>fictional tag sequence</em> for <code>::first-line</code>. This
+fictional tag sequence helps to show how properties are inherited.</p>
+
+<pre>
+&lt;P&gt;<b>&lt;P::first-line&gt;</b> This is a somewhat long HTML
+paragraph that <b>&lt;/P::first-line&gt;</b> will be broken into several
+lines. The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>If a pseudo-element breaks up a real element, the desired effect
+can often be described by a fictional tag sequence that closes and
+then re-opens the element. Thus, if we mark up the previous paragraph
+with a <code>span</code> element:</p>
+
+<pre>
+&lt;P&gt;<b>&lt;SPAN class="test"&gt;</b> This is a somewhat long HTML
+paragraph that will be broken into several
+lines.<b>&lt;/SPAN&gt;</b> The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>the user agent could simulate start and end tags for
+<code>span</code> when inserting the fictional tag sequence for
+<code>::first-line</code>.
+
+<pre>
+&lt;P&gt;&lt;P::first-line&gt;<b>&lt;SPAN class="test"&gt;</b> This is a
+somewhat long HTML
+paragraph that will <b>&lt;/SPAN&gt;</b>&lt;/P::first-line&gt;<b>&lt;SPAN class="test"&gt;</b> be
+broken into several
+lines.<b>&lt;/SPAN&gt;</b> The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>In CSS, the <code>::first-line</code> pseudo-element can only be
+attached to a block-level element, an inline-block, a table-caption,
+or a table-cell.</p>
+
+<p><a name="first-formatted-line"></a>The "first formatted line" of an
+element may occur inside a
+block-level descendant in the same flow (i.e., a block-level
+descendant that is not positioned and not a float). E.g., the first
+line of the <code>div</code> in <code>&lt;DIV>&lt;P>This
+line...&lt;/P>&lt/DIV></code> is the first line of the <code>p</code> (assuming
+that both <code>p</code> and <code>div</code> are block-level).
+
+<p>The first line of a table-cell or inline-block cannot be the first
+formatted line of an ancestor element. Thus, in <code>&lt;DIV&gt;&lt;P
+STYLE="display: inline-block">Hello&lt;BR&gt;Goodbye&lt;/P&gt;
+etcetera&lt;/DIV&gt;</code> the first formatted line of the
+<code>div</code> is not the line "Hello".
+
+<p class="note">Note that the first line of the <code>p</code> in this
+fragment: <code>&lt;p&gt&lt;br&gt;First...</code> doesn't contain any
+letters (assuming the default style for <code>br</code> in HTML
+4). The word "First" is not on the first formatted line.
+
+<p>A UA should act as if the fictional start tags of the
+<code>::first-line</code> pseudo-elements were nested just inside the
+innermost enclosing block-level element. (Since CSS1 and CSS2 were
+silent on this case, authors should not rely on this behavior.) Here
+is an example. The fictional tag sequence for</p>
+
+<pre>
+&lt;DIV>
+ &lt;P>First paragraph&lt;/P>
+ &lt;P>Second paragraph&lt;/P>
+&lt;/DIV>
+</pre>
+
+<p>is</p>
+
+<pre>
+&lt;DIV>
+ &lt;P>&lt;DIV::first-line>&lt;P::first-line>First paragraph&lt;/P::first-line>&lt;/DIV::first-line>&lt;/P>
+ &lt;P>&lt;P::first-line>Second paragraph&lt;/P::first-line>&lt;/P>
+&lt;/DIV>
+</pre>
+
+<p>The <code>::first-line</code> pseudo-element is similar to an
+inline-level element, but with certain restrictions. In CSS, the
+following properties apply to a <code>::first-line</code>
+pseudo-element: font properties, color property, background
+properties, 'word-spacing', 'letter-spacing', 'text-decoration',
+'vertical-align', 'text-transform', 'line-height'. UAs may apply other
+properties as well.</p>
+
+
+<h4><a name=first-letter>7.2. The ::first-letter pseudo-element</a></h4>
+
+<p>The <code>::first-letter</code> pseudo-element represents the first
+letter of the first line of a block, if it is not preceded by any
+other content (such as images or inline tables) on its line. The
+::first-letter pseudo-element may be used for "initial caps" and "drop
+caps", which are common typographical effects. This type of initial
+letter is similar to an inline-level element if its 'float' property
+is 'none'; otherwise, it is similar to a floated element.</p>
+
+<p>In CSS, these are the properties that apply to <code>::first-letter</code>
+pseudo-elements: font properties, 'text-decoration', 'text-transform',
+'letter-spacing', 'word-spacing' (when appropriate), 'line-height',
+'float', 'vertical-align' (only if 'float' is 'none'), margin
+properties, padding properties, border properties, color property,
+background properties. UAs may apply other properties as well. To
+allow UAs to render a typographically correct drop cap or initial cap,
+the UA may choose a line-height, width and height based on the shape
+of the letter, unlike for normal elements.</p>
+
+<div class="example">
+<p>Example:</p>
+<p>This example shows a possible rendering of an initial cap. Note
+that the 'line-height' that is inherited by the <code>::first-letter</code>
+pseudo-element is 1.1, but the UA in this example has computed the
+height of the first letter differently, so that it doesn't cause any
+unnecessary space between the first two lines. Also note that the
+fictional start tag of the first letter is inside the <span>span</span>, and thus
+the font weight of the first letter is normal, not bold as the <span>span</span>:
+<pre>
+p { line-height: 1.1 }
+p::first-letter { font-size: 3em; font-weight: normal }
+span { font-weight: bold }
+...
+&lt;p>&lt;span>Het hemelsche&lt;/span> gerecht heeft zich ten lange lesten&lt;br>
+Erbarremt over my en mijn benaeuwde vesten&lt;br>
+En arme burgery, en op mijn volcx gebed&lt;br>
+En dagelix geschrey de bange stad ontzet.
+</pre>
+<div class="figure">
+<p><img src="initial-cap.png" alt="Image illustrating the ::first-letter pseudo-element">
+</div>
+</div>
+
+<div class="example">
+<p>The following CSS will make a drop cap initial letter span about two lines:</p>
+
+<pre>
+&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"&gt;
+&lt;HTML&gt;
+ &lt;HEAD&gt;
+ &lt;TITLE&gt;Drop cap initial letter&lt;/TITLE&gt;
+ &lt;STYLE type="text/css"&gt;
+ P { font-size: 12pt; line-height: 1.2 }
+ P::first-letter { font-size: 200%; font-weight: bold; float: left }
+ SPAN { text-transform: uppercase }
+ &lt;/STYLE&gt;
+ &lt;/HEAD&gt;
+ &lt;BODY&gt;
+ &lt;P&gt;&lt;SPAN&gt;The first&lt;/SPAN&gt; few words of an article
+ in The Economist.&lt;/P&gt;
+ &lt;/BODY&gt;
+&lt;/HTML&gt;
+</pre>
+
+<p>This example might be formatted as follows:</p>
+
+<div class="figure">
+<P><img src="first-letter.gif" alt="Image illustrating the combined effect of the ::first-letter and ::first-line pseudo-elements"></p>
+</div>
+
+<p>The <span class="index-inst" title="fictional tag
+sequence">fictional tag sequence</span> is:</p>
+
+<pre>
+&lt;P&gt;
+&lt;SPAN&gt;
+&lt;P::first-letter&gt;
+T
+&lt;/P::first-letter&gt;he first
+&lt;/SPAN&gt;
+few words of an article in the Economist.
+&lt;/P&gt;
+</pre>
+
+<p>Note that the <code>::first-letter</code> pseudo-element tags abut
+the content (i.e., the initial character), while the ::first-line
+pseudo-element start tag is inserted right after the start tag of the
+block element.</p> </div>
+
+<p>In order to achieve traditional drop caps formatting, user agents
+may approximate font sizes, for example to align baselines. Also, the
+glyph outline may be taken into account when formatting.</p>
+
+<p>Punctuation (i.e, characters defined in Unicode in the "open" (Ps),
+"close" (Pe), "initial" (Pi). "final" (Pf) and "other" (Po)
+punctuation classes), that precedes or follows the first letter should
+be included. <a href="#refsUNICODE">[UNICODE]</a></p>
+
+<div class="figure">
+<P><img src="first-letter2.gif" alt="Quotes that precede the
+first letter should be included."></p>
+</div>
+
+<p>The <code>::first-letter</code> also applies if the first letter is
+in fact a digit, e.g., the "6" in "67 million dollars is a lot of
+money."</p>
+
+<p>In CSS, the <code>::first-letter</code> pseudo-element applies to
+block, list-item, table-cell, table-caption, and inline-block
+elements. <span class="note">A future version of this specification
+may allow this pesudo-element to apply to more element
+types.</span></p>
+
+<p>The <code>::first-letter</code> pseudo-element can be used with all
+such elements that contain text, or that have a descendant in the same
+flow that contains text. A UA should act as if the fictional start tag
+of the ::first-letter pseudo-element is just before the first text of
+the element, even if that first text is in a descendant.</p>
+
+<div class="example">
+<p>Example:</p>
+<p>The fictional tag sequence for this HTMLfragment:
+<pre>&lt;div>
+&lt;p>The first text.</pre>
+<p>is:
+<pre>&lt;div>
+&lt;p>&lt;div::first-letter>&lt;p::first-letter>T&lt;/...>&lt;/...>he first text.</pre>
+</div>
+
+<p>The first letter of a table-cell or inline-block cannot be the
+first letter of an ancestor element. Thus, in <code>&lt;DIV&gt;&lt;P
+STYLE="display: inline-block">Hello&lt;BR&gt;Goodbye&lt;/P&gt;
+etcetera&lt;/DIV&gt;</code> the first letter of the <code>div</code> is not the
+letter "H". In fact, the <code>div</code> doesn't have a first letter.
+
+<p>The first letter must occur on the <a
+href="#first-formatted-line">first formatted line.</a> For example, in
+this fragment: <code>&lt;p&gt&lt;br&gt;First...</code> the first line
+doesn't contain any letters and <code>::first-letter</code> doesn't
+match anything (assuming the default style for <code>br</code> in HTML
+4). In particular, it does not match the "F" of "First."
+
+<p>In CSS, if an element is a list item ('display: list-item'), the
+<code>::first-letter</code> applies to the first letter in the
+principal box after the marker. UAs may ignore
+<code>::first-letter</code> on list items with 'list-style-position:
+inside'. If an element has <code>::before</code> or
+<code>::after</code> content, the <code>::first-letter</code> applies
+to the first letter of the element <em>including</em> that content.
+
+<div class="example">
+<p>Example:</p>
+<p>After the rule 'p::before {content: "Note: "}', the selector
+'p::first-letter' matches the "N" of "Note".</p>
+</div>
+
+<p>Some languages may have specific rules about how to treat certain
+letter combinations. In Dutch, for example, if the letter combination
+"ij" appears at the beginning of a word, both letters should be
+considered within the <code>::first-letter</code> pseudo-element.
+
+<p>If the letters that would form the ::first-letter are not in the
+same element, such as "'T" in <code>&lt;p>'&lt;em>T...</code>, the UA
+may create a ::first-letter pseudo-element from one of the elements,
+both elements, or simply not create a pseudo-element.</p>
+
+<p>Similarly, if the first letter(s) of the block are not at the start
+of the line (for example due to bidirectional reordering), then the UA
+need not create the pseudo-element(s).
+
+<div class="example">
+<p>Example:</p>
+<p><a name="overlapping-example">The following example</a> illustrates
+how overlapping pseudo-elements may interact. The first letter of
+each P element will be green with a font size of '24pt'. The rest of
+the first formatted line will be 'blue' while the rest of the
+paragraph will be 'red'.</p>
+
+<pre>p { color: red; font-size: 12pt }
+p::first-letter { color: green; font-size: 200% }
+p::first-line { color: blue }
+
+&lt;P&gt;Some text that ends up on two lines&lt;/P&gt;</pre>
+
+<p>Assuming that a line break will occur before the word "ends", the
+<span class="index-inst" title="fictional tag sequence">fictional tag
+sequence</span> for this fragment might be:</p>
+
+<pre>&lt;P&gt;
+&lt;P::first-line&gt;
+&lt;P::first-letter&gt;
+S
+&lt;/P::first-letter&gt;ome text that
+&lt;/P::first-line&gt;
+ends up on two lines
+&lt;/P&gt;</pre>
+
+<p>Note that the <code>::first-letter</code> element is inside the <code>::first-line</code>
+element. Properties set on <code>::first-line</code> are inherited by
+<code>::first-letter</code>, but are overridden if the same property is set on
+<code>::first-letter</code>.</p>
+</div>
+
+
+<h4><a name=UIfragments>7.3.</a> <a name=selection>The ::selection pseudo-element</a></h4>
+
+<p>The <code>::selection</code> pseudo-element applies to the portion
+of a document that has been highlighted by the user. This also
+applies, for example, to selected text within an editable text
+field. This pseudo-element should not be confused with the <code><a
+href="#checked">:checked</a></code> pseudo-class (which used to be
+named <code>:selected</code>)
+
+<p>Although the <code>::selection</code> pseudo-element is dynamic in
+nature, and is altered by user action, it is reasonable to expect that
+when a UA re-renders to a static medium (such as a printed page, see
+<a href="#refsCSS21">[CSS21]</a>) which was originally rendered to a
+dynamic medium (like screen), the UA may wish to transfer the current
+<code>::selection</code> state to that other medium, and have all the
+appropriate formatting and rendering take effect as well. This is not
+required &mdash; UAs may omit the <code>::selection</code>
+pseudo-element for static media.
+
+<p>These are the CSS properties that apply to <code>::selection</code>
+pseudo-elements: color, background, cursor (optional), outline
+(optional). The computed value of the 'background-image' property on
+<code>::selection</code> may be ignored.
+
+
+<h4><a name=gen-content>7.4. The ::before and ::after pseudo-elements</a></h4>
+
+<p>The <code>::before</code> and <code>::after</code> pseudo-elements
+can be used to describe generated content before or after an element's
+content. They are explained in CSS 2.1 <a
+href="#refsCSS21">[CSS21]</a>.</p>
+
+<p>When the <code>::first-letter</code> and <code>::first-line</code>
+pseudo-elements are combined with <code>::before</code> and
+<code>::after</code>, they apply to the first letter or line of the
+element including the inserted text.</p>
+
+<h2><a name=combinators>8. Combinators</a></h2>
+
+<h3><a name=descendant-combinators>8.1. Descendant combinator</a></h3>
+
+<p>At times, authors may want selectors to describe an element that is
+the descendant of another element in the document tree (e.g., "an
+<code>EM</code> element that is contained within an <code>H1</code>
+element"). Descendant combinators express such a relationship. A
+descendant combinator is <a href="#whitespace">white space</a> that
+separates two sequences of simple selectors. A selector of the form
+"<code>A B</code>" represents an element <code>B</code> that is an
+arbitrary descendant of some ancestor element <code>A</code>.
+
+<div class="example">
+ <p>Examples:</p>
+ <p>For example, consider the following selector:</p>
+ <pre>h1 em</pre>
+ <p>It represents an <code>em</code> element being the descendant of
+ an <code>h1</code> element. It is a correct and valid, but partial,
+ description of the following fragment:</p>
+ <pre>&lt;h1&gt;This &lt;span class="myclass"&gt;headline
+is &lt;em&gt;very&lt;/em&gt; important&lt;/span&gt;&lt;/h1&gt;</pre>
+ <p>The following selector:</p>
+ <pre>div * p</pre>
+ <p>represents a <code>p</code> element that is a grandchild or later
+ descendant of a <code>div</code> element. Note the whitespace on
+ either side of the "*" is not part of the universal selector; the
+ whitespace is a combinator indicating that the DIV must be the
+ ancestor of some element, and that that element must be an ancestor
+ of the P.</p>
+ <p>The following selector, which combines descendant combinators and
+ <a href="#attribute-selectors">attribute selectors</a>, represents an
+ element that (1) has the <code>href</code> attribute set and (2) is
+ inside a <code>p</code> that is itself inside a <code>div</code>:</p>
+ <pre>div p *[href]</pre>
+</div>
+
+<h3><a name=child-combinators>8.2. Child combinators</a></h3>
+
+<p>A <dfn>child combinator</dfn> describes a childhood relationship
+between two elements. A child combinator is made of the
+&quot;greater-than sign&quot; (<code>&gt;</code>) character and
+separates two sequences of simple selectors.
+
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element that is
+ child of <code>body</code>:</p>
+ <pre>body &gt; p</pre>
+ <p>The following example combines descendant combinators and child
+ combinators.</p>
+ <pre>div ol&gt;li p</pre><!-- LEAVE THOSE SPACES OUT! see below -->
+ <p>It represents a <code>p</code> element that is a descendant of an
+ <code>li</code> element; the <code>li</code> element must be the
+ child of an <code>ol</code> element; the <code>ol</code> element must
+ be a descendant of a <code>div</code>. Notice that the optional white
+ space around the "&gt;" combinator has been left out.</p>
+</div>
+
+<p>For information on selecting the first child of an element, please
+see the section on the <code><a
+href="#structural-pseudos">:first-child</a></code> pseudo-class
+above.</p>
+
+<h3><a name=sibling-combinators>8.3. Sibling combinators</a></h3>
+
+<p>There are two different sibling combinators: the adjacent sibling
+combinator and the general sibling combinator. In both cases,
+non-element nodes (e.g. text between elements) are ignored when
+considering adjacency of elements.</p>
+
+<h4><a name=adjacent-sibling-combinators>8.3.1. Adjacent sibling combinator</a></h4>
+
+<p>The adjacent sibling combinator is made of the &quot;plus
+sign&quot; (U+002B, <code>+</code>) character that separates two
+sequences of simple selectors. The elements represented by the two
+sequences share the same parent in the document tree and the element
+represented by the first sequence immediately precedes the element
+represented by the second one.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element
+ immediately following a <code>math</code> element:</p>
+ <pre>math + p</pre>
+ <p>The following selector is conceptually similar to the one in the
+ previous example, except that it adds an attribute selector &mdash; it
+ adds a constraint to the <code>h1</code> element, that it must have
+ <code>class="opener"</code>:</p>
+ <pre>h1.opener + h2</pre>
+</div>
+
+
+<h4><a name=general-sibling-combinators>8.3.2. General sibling combinator</a></h4>
+
+<p>The general sibling combinator is made of the &quot;tilde&quot;
+(U+007E, <code>~</code>) character that separates two sequences of
+simple selectors. The elements represented by the two sequences share
+the same parent in the document tree and the element represented by
+the first sequence precedes (not necessarily immediately) the element
+represented by the second one.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <pre>h1 ~ pre</pre>
+ <p>represents a <code>pre</code> element following an <code>h1</code>. It
+ is a correct and valid, but partial, description of:</p>
+ <pre>&lt;h1&gt;Definition of the function a&lt;/h1&gt;
+&lt;p&gt;Function a(x) has to be applied to all figures in the table.&lt;/p&gt;
+&lt;pre&gt;function a(x) = 12x/13.5&lt;/pre&gt;</pre>
+</div>
+
+<h2><a name=specificity>9. Calculating a selector's specificity</a></h2>
+
+<p>A selector's specificity is calculated as follows:</p>
+
+<ul>
+ <li>count the number of ID selectors in the selector (= a)</li>
+ <li>count the number of class selectors, attributes selectors, and pseudo-classes in the selector (= b)</li>
+ <li>count the number of element names in the selector (= c)</li>
+ <li>ignore pseudo-elements</li>
+</ul>
+
+<p>Selectors inside <a href="#negation">the negation pseudo-class</a>
+are counted like any other, but the negation itself does not count as
+a pseudo-class.</p>
+
+<p>Concatenating the three numbers a-b-c (in a number system with a
+large base) gives the specificity.</p>
+
+<div class="example">
+<p>Examples:</p>
+<pre>* /* a=0 b=0 c=0 -&gt; specificity = 0 */
+LI /* a=0 b=0 c=1 -&gt; specificity = 1 */
+UL LI /* a=0 b=0 c=2 -&gt; specificity = 2 */
+UL OL+LI /* a=0 b=0 c=3 -&gt; specificity = 3 */
+H1 + *[REL=up] /* a=0 b=1 c=1 -&gt; specificity = 11 */
+UL OL LI.red /* a=0 b=1 c=3 -&gt; specificity = 13 */
+LI.red.level /* a=0 b=2 c=1 -&gt; specificity = 21 */
+#x34y /* a=1 b=0 c=0 -&gt; specificity = 100 */
+#s12:not(FOO) /* a=1 b=0 c=1 -&gt; specificity = 101 */
+</pre>
+</div>
+
+<p class="note"><strong>Note:</strong> the specificity of the styles
+specified in an HTML <code>style</code> attribute is described in CSS
+2.1. <a href="#refsCSS21">[CSS21]</a>.</p>
+
+<h2><a name=w3cselgrammar>10. The grammar of Selectors</a></h2>
+
+<h3><a name=grammar>10.1. Grammar</a></h3>
+
+<p>The grammar below defines the syntax of Selectors. It is globally
+LL(1) and can be locally LL(2) (but note that most UA's should not use
+it directly, since it doesn't express the parsing conventions). The
+format of the productions is optimized for human consumption and some
+shorthand notations beyond Yacc (see <a href="#refsYACC">[YACC]</a>)
+are used:</p>
+
+<ul>
+ <li><b>*</b>: 0 or more
+ <li><b>+</b>: 1 or more
+ <li><b>?</b>: 0 or 1
+ <li><b>|</b>: separates alternatives
+ <li><b>[ ]</b>: grouping </li>
+</ul>
+
+<p>The productions are:</p>
+
+<pre>selectors_group
+ : selector [ COMMA S* selector ]*
+ ;
+
+selector
+ : simple_selector_sequence [ combinator simple_selector_sequence ]*
+ ;
+
+combinator
+ /* combinators can be surrounded by white space */
+ : PLUS S* | GREATER S* | TILDE S* | S+
+ ;
+
+simple_selector_sequence
+ : [ type_selector | universal ]
+ [ HASH | class | attrib | pseudo | negation ]*
+ | [ HASH | class | attrib | pseudo | negation ]+
+ ;
+
+type_selector
+ : [ namespace_prefix ]? element_name
+ ;
+
+namespace_prefix
+ : [ IDENT | '*' ]? '|'
+ ;
+
+element_name
+ : IDENT
+ ;
+
+universal
+ : [ namespace_prefix ]? '*'
+ ;
+
+class
+ : '.' IDENT
+ ;
+
+attrib
+ : '[' S* [ namespace_prefix ]? IDENT S*
+ [ [ PREFIXMATCH |
+ SUFFIXMATCH |
+ SUBSTRINGMATCH |
+ '=' |
+ INCLUDES |
+ DASHMATCH ] S* [ IDENT | STRING ] S*
+ ]? ']'
+ ;
+
+pseudo
+ /* '::' starts a pseudo-element, ':' a pseudo-class */
+ /* Exceptions: :first-line, :first-letter, :before and :after. */
+ /* Note that pseudo-elements are restricted to one per selector and */
+ /* occur only in the last simple_selector_sequence. */
+ : ':' ':'? [ IDENT | functional_pseudo ]
+ ;
+
+functional_pseudo
+ : FUNCTION S* expression ')'
+ ;
+
+expression
+ /* In CSS3, the expressions are identifiers, strings, */
+ /* or of the form "an+b" */
+ : [ [ PLUS | '-' | DIMENSION | NUMBER | STRING | IDENT ] S* ]+
+ ;
+
+negation
+ : NOT S* negation_arg S* ')'
+ ;
+
+negation_arg
+ : type_selector | universal | HASH | class | attrib | pseudo
+ ;</pre>
+
+
+<h3><a name=lex>10.2. Lexical scanner</a></h3>
+
+<p>The following is the <a name=x3>tokenizer</a>, written in Flex (see
+<a href="#refsFLEX">[FLEX]</a>) notation. The tokenizer is
+case-insensitive.</p>
+
+<p>The two occurrences of "\377" represent the highest character
+number that current versions of Flex can deal with (decimal 255). They
+should be read as "\4177777" (decimal 1114111), which is the highest
+possible code point in Unicode/ISO-10646. <a
+href="#refsUNICODE">[UNICODE]</a></p>
+
+<pre>%option case-insensitive
+
+ident [-]?{nmstart}{nmchar}*
+name {nmchar}+
+nmstart [_a-z]|{nonascii}|{escape}
+nonascii [^\0-\177]
+unicode \\[0-9a-f]{1,6}(\r\n|[ \n\r\t\f])?
+escape {unicode}|\\[^\n\r\f0-9a-f]
+nmchar [_a-z0-9-]|{nonascii}|{escape}
+num [0-9]+|[0-9]*\.[0-9]+
+string {string1}|{string2}
+string1 \"([^\n\r\f\\"]|\\{nl}|{nonascii}|{escape})*\"
+string2 \'([^\n\r\f\\']|\\{nl}|{nonascii}|{escape})*\'
+invalid {invalid1}|{invalid2}
+invalid1 \"([^\n\r\f\\"]|\\{nl}|{nonascii}|{escape})*
+invalid2 \'([^\n\r\f\\']|\\{nl}|{nonascii}|{escape})*
+nl \n|\r\n|\r|\f
+w [ \t\r\n\f]*
+
+%%
+
+[ \t\r\n\f]+ return S;
+
+"~=" return INCLUDES;
+"|=" return DASHMATCH;
+"^=" return PREFIXMATCH;
+"$=" return SUFFIXMATCH;
+"*=" return SUBSTRINGMATCH;
+{ident} return IDENT;
+{string} return STRING;
+{ident}"(" return FUNCTION;
+{num} return NUMBER;
+"#"{name} return HASH;
+{w}"+" return PLUS;
+{w}"&gt;" return GREATER;
+{w}"," return COMMA;
+{w}"~" return TILDE;
+":not(" return NOT;
+@{ident} return ATKEYWORD;
+{invalid} return INVALID;
+{num}% return PERCENTAGE;
+{num}{ident} return DIMENSION;
+"&lt;!--" return CDO;
+"--&gt;" return CDC;
+
+"url("{w}{string}{w}")" return URI;
+"url("{w}([!#$%&*-~]|{nonascii}|{escape})*{w}")" return URI;
+U\+[0-9a-f?]{1,6}(-[0-9a-f]{1,6})? return UNICODE_RANGE;
+
+\/\*[^*]*\*+([^/*][^*]*\*+)*\/ /* ignore comments */
+
+. return *yytext;</pre>
+
+
+
+<h2><a name=downlevel>11. Namespaces and down-level clients</a></h2>
+
+<p>An important issue is the interaction of CSS selectors with XML
+documents in web clients that were produced prior to this
+document. Unfortunately, due to the fact that namespaces must be
+matched based on the URI which identifies the namespace, not the
+namespace prefix, some mechanism is required to identify namespaces in
+CSS by their URI as well. Without such a mechanism, it is impossible
+to construct a CSS style sheet which will properly match selectors in
+all cases against a random set of XML documents. However, given
+complete knowledge of the XML document to which a style sheet is to be
+applied, and a limited use of namespaces within the XML document, it
+is possible to construct a style sheet in which selectors would match
+elements and attributes correctly.</p>
+
+<p>It should be noted that a down-level CSS client will (if it
+properly conforms to CSS forward compatible parsing rules) ignore all
+<code>@namespace</code> at-rules, as well as all style rules that make
+use of namespace qualified element type or attribute selectors. The
+syntax of delimiting namespace prefixes in CSS was deliberately chosen
+so that down-level CSS clients would ignore the style rules rather
+than possibly match them incorrectly.</p>
+
+<p>The use of default namespaces in CSS makes it possible to write
+element type selectors that will function in both namespace aware CSS
+clients as well as down-level clients. It should be noted that
+down-level clients may incorrectly match selectors against XML
+elements in other namespaces.</p>
+
+<p>The following are scenarios and examples in which it is possible to
+construct style sheets which would function properly in web clients
+that do not implement this proposal.</p>
+
+<ol>
+ <li>
+
+ <p>The XML document does not use namespaces.</p>
+
+ <ul>
+
+ <li>In this case, it is obviously not necessary to declare or use
+ namespaces in the style sheet. Standard CSS element type and
+ attribute selectors will function adequately in a down-level
+ client.</li>
+
+ <li>In a CSS namespace aware client, the default behavior of
+ element selectors matching without regard to namespace will
+ function properly against all elements, since no namespaces are
+ present. However, the use of specific element type selectors that
+ match only elements that have no namespace ("<code>|name</code>")
+ will guarantee that selectors will match only XML elements that do
+ not have a declared namespace. </li>
+
+ </ul>
+
+ </li>
+
+ <li>
+
+ <p>The XML document defines a single, default namespace used
+ throughout the document. No namespace prefixes are used in element
+ names.</p>
+
+ <ul>
+
+ <li>In this case, a down-level client will function as if
+ namespaces were not used in the XML document at all. Standard CSS
+ element type and attribute selectors will match against all
+ elements. </li>
+
+ </ul>
+
+ </li>
+
+ <li>
+
+ <p>The XML document does <b>not</b> use a default namespace, all
+ namespace prefixes used are known to the style sheet author, and
+ there is a direct mapping between namespace prefixes and namespace
+ URIs. (A given prefix may only be mapped to one namespace URI
+ throughout the XML document; there may be multiple prefixes mapped
+ to the same URI).</p>
+
+ <ul>
+
+ <li>In this case, the down-level client will view and match
+ element type and attribute selectors based on their fully
+ qualified name, not the local part as outlined in the <a
+ href="#typenmsp">Type selectors and Namespaces</a> section. CSS
+ selectors may be declared using an escaped colon "<code>\:</code>"
+ to describe the fully qualified names, e.g.
+ "<code>html\:h1</code>" will match
+ <code>&lt;html:h1&gt;</code>. Selectors using the qualified name
+ will only match XML elements that use the same prefix. Other
+ namespace prefixes used in the XML that are mapped to the same URI
+ will not match as expected unless additional CSS style rules are
+ declared for them.</li>
+
+ <li>Note that selectors declared in this fashion will
+ <em>only</em> match in down-level clients. A CSS namespace aware
+ client will match element type and attribute selectors based on
+ the name's local part. Selectors declared with the fully
+ qualified name will not match (unless there is no namespace prefix
+ in the fully qualified name).</li>
+
+ </ul>
+
+ </li>
+
+ </ol>
+
+<p>In other scenarios: when the namespace prefixes used in the XML are
+not known in advance by the style sheet author; or a combination of
+elements with no namespace are used in conjunction with elements using
+a default namespace; or the same namespace prefix is mapped to
+<em>different</em> namespace URIs within the same document, or in
+different documents; it is impossible to construct a CSS style sheet
+that will function properly against all elements in those documents,
+unless, the style sheet is written using a namespace URI syntax (as
+outlined in this document or similar) and the document is processed by
+a CSS and XML namespace aware client.</p>
+
+<h2><a name=profiling>12. Profiles</a></h2>
+
+<p>Each specification using Selectors must define the subset of W3C
+Selectors it allows and excludes, and describe the local meaning of
+all the components of that subset.</p>
+
+<p>Non normative examples:
+
+<div class="profile">
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>CSS level 1</td></tr>
+ <tr>
+ <th>Accepts</th>
+ <td>type selectors<br>class selectors<br>ID selectors<br>:link,
+ :visited and :active pseudo-classes<br>descendant combinator
+ <br>::first-line and ::first-letter pseudo-elements</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>
+
+<p>universal selector<br>attribute selectors<br>:hover and :focus
+ pseudo-classes<br>:target pseudo-class<br>:lang() pseudo-class<br>all UI
+ element states pseudo-classes<br>all structural
+ pseudo-classes<br>negation pseudo-class<br>all
+ UI element fragments pseudo-elements<br>::before and ::after
+ pseudo-elements<br>child combinators<br>sibling combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>only one class selector allowed per sequence of simple
+ selectors</td></tr></tbody></table><br><br>
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>CSS level 2</td></tr>
+ <tr>
+ <th>Accepts</th>
+ <td>type selectors<br>universal selector<br>attribute presence and
+ values selectors<br>class selectors<br>ID selectors<br>:link, :visited,
+ :active, :hover, :focus, :lang() and :first-child pseudo-classes
+ <br>descendant combinator<br>child combinator<br>adjacent sibling
+ combinator<br>::first-line and ::first-letter pseudo-elements<br>::before
+ and ::after pseudo-elements</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>
+
+<p>content selectors<br>substring matching attribute
+ selectors<br>:target pseudo-classes<br>all UI element
+ states pseudo-classes<br>all structural pseudo-classes other
+ than :first-child<br>negation pseudo-class<br>all UI element
+ fragments pseudo-elements<br>general sibling combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>more than one class selector per sequence of simple selectors (CSS1
+ constraint) allowed</td></tr></tbody></table>
+
+<p>In CSS, selectors express pattern matching rules that determine which style
+rules apply to elements in the document tree.
+
+<p>The following selector (CSS level 2) will <b>match</b> all anchors <code>a</code>
+with attribute <code>name</code> set inside a section 1 header <code>h1</code>:
+<pre>h1 a[name]</pre>
+
+<p>All CSS declarations attached to such a selector are applied to elements
+matching it. </div>
+
+<div class="profile">
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>STTS 3</td>
+ </tr>
+ <tr>
+ <th>Accepts</th>
+ <td>
+
+<p>type selectors<br>universal selectors<br>attribute selectors<br>class
+ selectors<br>ID selectors<br>all structural pseudo-classes<br>
+ all combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>non-accepted pseudo-classes<br>pseudo-elements<br></td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>some selectors and combinators are not allowed in fragment
+ descriptions on the right side of STTS declarations.</td></tr></tbody></table>
+<form>
+<input type="text" name="test10"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+</form>
+
+<p>Selectors can be used in STTS 3 in two different
+ manners:
+<ol>
+ <li>a selection mechanism equivalent to CSS selection mechanism: declarations
+ attached to a given selector are applied to elements matching that selector,
+ <li>fragment descriptions that appear on the right side of declarations.
+</li></ol></div>
+
+<h2><a name=Conformance></a>13. Conformance and requirements</h2>
+
+<p>This section defines conformance with the present specification only.
+
+<p>The inability of a user agent to implement part of this specification due to
+the limitations of a particular device (e.g., non interactive user agents will
+probably not implement dynamic pseudo-classes because they make no sense without
+interactivity) does not imply non-conformance.
+
+<p>All specifications reusing Selectors must contain a <a
+href="#profiling">Profile</a> listing the
+subset of Selectors it accepts or excludes, and describing the constraints
+it adds to the current specification.
+
+<p>Invalidity is caused by a parsing error, e.g. an unrecognized token or a token
+which is not allowed at the current parsing point.
+
+<p>User agents must observe the rules for handling parsing errors:
+<ul>
+ <li>a simple selector containing an undeclared namespace prefix is invalid</li>
+ <li>a selector containing an invalid simple selector, an invalid combinator
+ or an invalid token is invalid. </li>
+ <li>a group of selectors containing an invalid selector is invalid.</li>
+</ul>
+
+<p class="foo test10 bar">Specifications reusing Selectors must define how to handle parsing
+errors. (In the case of CSS, the entire rule in which the selector is
+used is dropped.)</p>
+
+<!-- Apparently all these references are out of date:
+<p>Implementations of this specification must behave as
+"recipients of text data" as defined by <a href="#refsCWWW">[CWWW]</a>
+when parsing selectors and attempting matches. (In particular,
+implementations must assume the data is normalized and must not
+normalize it.) Normative rules for matching strings are defined in
+<a href="#refsCWWW">[CWWW]</a> and <a
+href="#refsUNICODE">[UNICODE]</a> and apply to implementations of this
+specification.</p>-->
+
+<h2><a name=Tests></a>14. Tests</h2>
+
+<p>This specification has <a
+href="http://www.w3.org/Style/CSS/Test/CSS3/Selectors/current/">a test
+suite</a> allowing user agents to verify their basic conformance to
+the specification. This test suite does not pretend to be exhaustive
+and does not cover all possible combined cases of Selectors.</p>
+
+<h2><a name=ACKS></a>15. Acknowledgements</h2>
+
+<p>The CSS working group would like to thank everyone who has sent
+comments on this specification over the years.</p>
+
+<p>The working group would like to extend special thanks to Donna
+McManus, Justin Baker, Joel Sklar, and Molly Ives Brower who perfermed
+the final editorial review.</p>
+
+<h2><a name=references>16. References</a></h2>
+
+<dl class="refs">
+
+ <dt>[CSS1]
+ <dd><a name=refsCSS1></a> Bert Bos, H&aring;kon Wium Lie; "<cite>Cascading Style Sheets, level 1</cite>", W3C Recommendation, 17 Dec 1996, revised 11 Jan 1999
+ <dd>(<code><a href="http://www.w3.org/TR/REC-CSS1">http://www.w3.org/TR/REC-CSS1</a></code>)
+
+ <dt>[CSS21]
+ <dd><a name=refsCSS21></a> Bert Bos, Tantek &Ccedil;elik, Ian Hickson, H&aring;kon Wium Lie, editors; "<cite>Cascading Style Sheets, level 2 revision 1</cite>", W3C Working Draft, 13 June 2005
+ <dd>(<code><a href="http://www.w3.org/TR/CSS21">http://www.w3.org/TR/CSS21</a></code>)
+
+ <dt>[CWWW]
+ <dd><a name=refsCWWW></a> Martin J. D&uuml;rst, Fran&ccedil;ois Yergeau, Misha Wolf, Asmus Freytag, Tex Texin, editors; "<cite>Character Model for the World Wide Web</cite>", W3C Recommendation, 15 February 2005
+ <dd>(<code><a href="http://www.w3.org/TR/charmod/">http://www.w3.org/TR/charmod/</a></code>)
+
+ <dt>[FLEX]
+ <dd><a name="refsFLEX"></a> "<cite>Flex: The Lexical Scanner Generator</cite>", Version 2.3.7, ISBN 1882114213
+
+ <dt>[HTML4]
+ <dd><a name="refsHTML4"></a> Dave Ragget, Arnaud Le Hors, Ian Jacobs, editors; "<cite>HTML 4.01 Specification</cite>", W3C Recommendation, 24 December 1999
+ <dd>(<a href="http://www.w3.org/TR/html4/"><code>http://www.w3.org/TR/html4/</code></a>)
+
+ <dt>[MATH]
+ <dd><a name="refsMATH"></a> Patrick Ion, Robert Miner, editors; "<cite>Mathematical Markup Language (MathML) 1.01</cite>", W3C Recommendation, revision of 7 July 1999
+ <dd>(<code><a href="http://www.w3.org/TR/REC-MathML/">http://www.w3.org/TR/REC-MathML/</a></code>)
+
+ <dt>[RFC3066]
+ <dd><a name="refsRFC3066"></a> H. Alvestrand; "<cite>Tags for the Identification of Languages</cite>", Request for Comments 3066, January 2001
+ <dd>(<a href="http://www.ietf.org/rfc/rfc3066.txt"><code>http://www.ietf.org/rfc/rfc3066.txt</code></a>)
+
+ <dt>[STTS]
+ <dd><a name=refsSTTS></a> Daniel Glazman; "<cite>Simple Tree Transformation Sheets 3</cite>", Electricit&eacute; de France, submission to the W3C, 11 November 1998
+ <dd>(<code><a href="http://www.w3.org/TR/NOTE-STTS3">http://www.w3.org/TR/NOTE-STTS3</a></code>)
+
+ <dt>[SVG]
+ <dd><a name="refsSVG"></a> Jon Ferraiolo, &#34276;&#27810; &#28147;, Dean Jackson, editors; "<cite>Scalable Vector Graphics (SVG) 1.1 Specification</cite>", W3C Recommendation, 14 January 2003
+ <dd>(<code><a href="http://www.w3.org/TR/SVG/">http://www.w3.org/TR/SVG/</a></code>)
+
+ <dt>[UNICODE]</dt>
+ <dd><a name="refsUNICODE"></a> <cite><a
+ href="http://www.unicode.org/versions/Unicode4.1.0/">The Unicode Standard, Version 4.1</a></cite>, The Unicode Consortium. Boston, MA, Addison-Wesley, March 2005. ISBN 0-321-18578-1, as amended by <a href="http://www.unicode.org/versions/Unicode4.0.1/">Unicode 4.0.1</a> and <a href="http://www.unicode.org/versions/Unicode4.1.0/">Unicode 4.1.0</a>.
+ <dd>(<code><a href="http://www.unicode.org/versions/">http://www.unicode.org/versions/</a></code>)</dd>
+
+ <dt>[XML10]
+ <dd><a name="refsXML10"></a> Tim Bray, Jean Paoli, C. M. Sperberg-McQueen, Eve Maler, Fran&ccedil;ois Yergeau, editors; "<cite>Extensible Markup Language (XML) 1.0 (Third Edition)</cite>", W3C Recommendation, 4 February 2004
+ <dd>(<a href="http://www.w3.org/TR/REC-xml/"><code>http://www.w3.org/TR/REC-xml/</code></a>)
+
+ <dt>[XMLNAMES]
+ <dd><a name="refsXMLNAMES"></a> Tim Bray, Dave Hollander, Andrew Layman, editors; "<cite>Namespaces in XML</cite>", W3C Recommendation, 14 January 1999
+ <dd>(<a href="http://www.w3.org/TR/REC-xml-names/"><code>http://www.w3.org/TR/REC-xml-names/</code></a>)
+
+ <dt>[YACC]
+ <dd><a name="refsYACC"></a> S. C. Johnson; "<cite>YACC &mdash; Yet another compiler compiler</cite>", Technical Report, Murray Hill, 1975
+
+</dl>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/jslib-event-jquery.html b/testing/talos/talos/tests/dromaeo/tests/jslib-event-jquery.html
new file mode 100644
index 0000000000..f02bd84e4d
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/jslib-event-jquery.html
@@ -0,0 +1,2936 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script src="../lib/jquery.js"></script>
+<script>
+window.onload = function(){
+startTest("jslib-event-jquery", '471bfd04');
+
+// Try to force real results
+var ret, tmp, div;
+
+var html = document.body.innerHTML;
+
+function testfn(){}
+
+ prep(function(){
+ div = jQuery("div");
+ var tmp = document.createElement("div");
+ tmp.innerHTML = html;
+ document.body.appendChild( tmp );
+ });
+
+ test("jQuery - bind", function(){
+ for ( var i = 0; i < 10; i++ )
+ div.bind("click", testfn);
+ });
+
+ test("jQuery - trigger", function(){
+ for ( var i = 0; i < 10; i++ )
+ div.trigger("click");
+ });
+
+ test("jQuery - unbind x10", function(){
+ for ( var i = 0; i < 100; i++ )
+ div.unbind("click", testfn);
+ });
+
+endTest();
+};
+</script>
+</head>
+<body>
+ <div class="head">
+ <p><a href="http://www.w3.org/"><img height=48 alt=W3C src="w3c_home.png" width=72></a>
+
+ <h1 id="title">Selectors</h1>
+
+ <h2>W3C Working Draft 15 December 2005</h2>
+
+ <dl>
+
+ <dt>This version:
+
+ <dd><a href="http://www.w3.org/TR/2005/WD-css3-selectors-20051215">
+ http://www.w3.org/TR/2005/WD-css3-selectors-20051215</a>
+
+ <dt>Latest version:
+
+ <dd><a href="http://www.w3.org/TR/css3-selectors">
+ http://www.w3.org/TR/css3-selectors</a>
+
+ <dt>Previous version:
+
+ <dd><a href="http://www.w3.org/TR/2001/CR-css3-selectors-20011113">
+ http://www.w3.org/TR/2001/CR-css3-selectors-20011113</a>
+
+ <dt><a name=editors-list></a>Editors:
+
+ <dd class="vcard"><span class="fn">Daniel Glazman</span> (Invited Expert)</dd>
+
+ <dd class="vcard"><a lang="tr" class="url fn" href="http://www.tantek.com/">Tantek &Ccedil;elik</a> (Invited Expert)
+
+ <dd class="vcard"><a href="mailto:ian@hixie.ch" class="url fn">Ian Hickson</a> (<span
+ class="company"><a href="http://www.google.com/">Google</a></span>)
+
+ <dd class="vcard"><span class="fn">Peter Linss</span> (former editor, <span class="company"><a
+ href="http://www.netscape.com/">Netscape/AOL</a></span>)
+
+ <dd class="vcard"><span class="fn">John Williams</span> (former editor, <span class="company"><a
+ href="http://www.quark.com/">Quark, Inc.</a></span>)
+
+ </dl>
+
+ <p class="copyright"><a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright">
+ Copyright</a> &copy; 2005 <a href="http://www.w3.org/"><abbr
+ title="World Wide Web Consortium">W3C</abbr></a><sup>&reg;</sup>
+ (<a href="http://www.csail.mit.edu/"><abbr title="Massachusetts
+ Institute of Technology">MIT</abbr></a>, <a
+ href="http://www.ercim.org/"><acronym title="European Research
+ Consortium for Informatics and Mathematics">ERCIM</acronym></a>, <a
+ href="http://www.keio.ac.jp/">Keio</a>), All Rights Reserved. W3C
+ <a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">liability</a>,
+ <a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">trademark</a>,
+ <a
+ href="http://www.w3.org/Consortium/Legal/copyright-documents">document
+ use</a> rules apply.
+
+ <hr title="Separator for header">
+
+ </div>
+
+ <h2><a name=abstract></a>Abstract</h2>
+
+ <p><em>Selectors</em> are patterns that match against elements in a
+ tree. Selectors have been optimized for use with HTML and XML, and
+ are designed to be usable in performance-critical code.</p>
+
+ <p><acronym title="Cascading Style Sheets">CSS</acronym> (Cascading
+ Style Sheets) is a language for describing the rendering of <acronym
+ title="Hypertext Markup Language">HTML</acronym> and <acronym
+ title="Extensible Markup Language">XML</acronym> documents on
+ screen, on paper, in speech, etc. CSS uses Selectors for binding
+ style properties to elements in the document. This document
+ describes extensions to the selectors defined in CSS level 2. These
+ extended selectors will be used by CSS level 3.
+
+ <p>Selectors define the following function:</p>
+
+ <pre>expression &#x2217; element &rarr; boolean</pre>
+
+ <p>That is, given an element and a selector, this specification
+ defines whether that element matches the selector.</p>
+
+ <p>These expressions can also be used, for instance, to select a set
+ of elements, or a single element from a set of elements, by
+ evaluating the expression across all the elements in a
+ subtree. <acronym title="Simple Tree Transformation
+ Sheets">STTS</acronym> (Simple Tree Transformation Sheets), a
+ language for transforming XML trees, uses this mechanism. <a href="#refsSTTS">[STTS]</a></p>
+
+ <h2><a name=status></a>Status of this document</h2>
+
+ <p><em>This section describes the status of this document at the
+ time of its publication. Other documents may supersede this
+ document. A list of current W3C publications and the latest revision
+ of this technical report can be found in the <a
+ href="http://www.w3.org/TR/">W3C technical reports index at
+ http://www.w3.org/TR/.</a></em></p>
+
+ <p>This document describes the selectors that already exist in <a
+ href="#refsCSS1"><abbr title="CSS level 1">CSS1</abbr></a> and <a
+ href="#refsCSS21"><abbr title="CSS level 2">CSS2</abbr></a>, and
+ also proposes new selectors for <abbr title="CSS level
+ 3">CSS3</abbr> and other languages that may need them.</p>
+
+ <p>The CSS Working Group doesn't expect that all implementations of
+ CSS3 will have to implement all selectors. Instead, there will
+ probably be a small number of variants of CSS3, called profiles. For
+ example, it may be that only a profile for interactive user agents
+ will include all of the selectors.</p>
+
+ <p>This specification is a last call working draft for the the <a
+ href="http://www.w3.org/Style/CSS/members">CSS Working Group</a>
+ (<a href="/Style/">Style Activity</a>). This
+ document is a revision of the <a
+ href="http://www.w3.org/TR/2001/CR-css3-selectors-20011113/">Candidate
+ Recommendation dated 2001 November 13</a>, and has incorporated
+ implementation feedback received in the past few years. It is
+ expected that this last call will proceed straight to Proposed
+ Recommendation stage since it is believed that interoperability will
+ be demonstrable.</p>
+
+ <p>All persons are encouraged to review and implement this
+ specification and return comments to the (<a
+ href="http://lists.w3.org/Archives/Public/www-style/">archived</a>)
+ public mailing list <a
+ href="http://www.w3.org/Mail/Lists.html#www-style">www-style</a>
+ (see <a href="http://www.w3.org/Mail/Request">instructions</a>). W3C
+ Members can also send comments directly to the CSS Working
+ Group.
+ The deadline for comments is 14 January 2006.</p>
+
+ <p>This is still a draft document and may be updated, replaced, or
+ obsoleted by other documents at any time. It is inappropriate to
+ cite a W3C Working Draft as other than &quot;work in progress&quot;.
+
+ <p>This document may be available in <a
+ href="http://www.w3.org/Style/css3-selectors-updates/translations">translation</a>.
+ The English version of this specification is the only normative
+ version.
+
+ <div class="subtoc">
+
+ <h2 id="test10"><a name=contents>Table of contents</a></h2>
+
+ <ul class="toc">
+ <li class="tocline2"><a href="#context">1. Introduction</a>
+ <ul>
+ <li><a href="#dependencies">1.1. Dependencies</a> </li>
+ <li><a href="#terminology">1.2. Terminology</a> </li>
+ <li><a href="#changesFromCSS2">1.3. Changes from CSS2</a> </li>
+ </ul>
+ <li class="tocline2"><a href="#selectors">2. Selectors</a>
+ <li class="tocline2"><a href="#casesens">3. Case sensitivity</a>
+ <li class="tocline2"><a href="#selector-syntax">4. Selector syntax</a>
+ <li class="tocline2"><a href="#grouping">5. Groups of selectors</a>
+ <li class="tocline2"><a href="#simple-selectors">6. Simple selectors</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#type-selectors">6.1. Type selectors</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#typenmsp">6.1.1. Type selectors and namespaces</a></li>
+ </ul>
+ <li class="tocline3"><a href="#universal-selector">6.2. Universal selector</a>
+ <ul>
+ <li><a href="#univnmsp">6.2.1. Universal selector and namespaces</a></li>
+ </ul>
+ <li class="tocline3"><a href="#attribute-selectors">6.3. Attribute selectors</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#attribute-representation">6.3.1. Representation of attributes and attributes values</a>
+ <li><a href="#attribute-substrings">6.3.2. Substring matching attribute selectors</a>
+ <li class="tocline4"><a href="#attrnmsp">6.3.3. Attribute selectors and namespaces</a>
+ <li class="tocline4"><a href="#def-values">6.3.4. Default attribute values in DTDs</a></li>
+ </ul>
+ <li class="tocline3"><a href="#class-html">6.4. Class selectors</a>
+ <li class="tocline3"><a href="#id-selectors">6.5. ID selectors</a>
+ <li class="tocline3"><a href="#pseudo-classes">6.6. Pseudo-classes</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#dynamic-pseudos">6.6.1. Dynamic pseudo-classes</a>
+ <li class="tocline4"><a href="#target-pseudo">6.6.2. The :target pseudo-class</a>
+ <li class="tocline4"><a href="#lang-pseudo">6.6.3. The :lang() pseudo-class</a>
+ <li class="tocline4"><a href="#UIstates">6.6.4. UI element states pseudo-classes</a>
+ <li class="tocline4"><a href="#structural-pseudos">6.6.5. Structural pseudo-classes</a>
+ <ul>
+ <li><a href="#root-pseudo">:root pseudo-class</a>
+ <li><a href="#nth-child-pseudo">:nth-child() pseudo-class</a>
+ <li><a href="#nth-last-child-pseudo">:nth-last-child()</a>
+ <li><a href="#nth-of-type-pseudo">:nth-of-type() pseudo-class</a>
+ <li><a href="#nth-last-of-type-pseudo">:nth-last-of-type()</a>
+ <li><a href="#first-child-pseudo">:first-child pseudo-class</a>
+ <li><a href="#last-child-pseudo">:last-child pseudo-class</a>
+ <li><a href="#first-of-type-pseudo">:first-of-type pseudo-class</a>
+ <li><a href="#last-of-type-pseudo">:last-of-type pseudo-class</a>
+ <li><a href="#only-child-pseudo">:only-child pseudo-class</a>
+ <li><a href="#only-of-type-pseudo">:only-of-type pseudo-class</a>
+ <li><a href="#empty-pseudo">:empty pseudo-class</a></li>
+ </ul>
+ <li class="tocline4"><a href="#negation">6.6.7. The negation pseudo-class</a></li>
+ </ul>
+ </li>
+ </ul>
+ <li><a href="#pseudo-elements">7. Pseudo-elements</a>
+ <ul>
+ <li><a href="#first-line">7.1. The ::first-line pseudo-element</a>
+ <li><a href="#first-letter">7.2. The ::first-letter pseudo-element</a>
+ <li><a href="#UIfragments">7.3. The ::selection pseudo-element</a>
+ <li><a href="#gen-content">7.4. The ::before and ::after pseudo-elements</a></li>
+ </ul>
+ <li class="tocline2"><a href="#combinators">8. Combinators</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#descendant-combinators">8.1. Descendant combinators</a>
+ <li class="tocline3"><a href="#child-combinators">8.2. Child combinators</a>
+ <li class="tocline3"><a href="#sibling-combinators">8.3. Sibling combinators</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#adjacent-sibling-combinators">8.3.1. Adjacent sibling combinator</a>
+ <li class="tocline4"><a href="#general-sibling-combinators">8.3.2. General sibling combinator</a></li>
+ </ul>
+ </li>
+ </ul>
+ <li class="tocline2"><a href="#specificity">9. Calculating a selector's specificity</a>
+ <li class="tocline2"><a href="#w3cselgrammar">10. The grammar of Selectors</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#grammar">10.1. Grammar</a>
+ <li class="tocline3"><a href="#lex">10.2. Lexical scanner</a></li>
+ </ul>
+ <li class="tocline2"><a href="#downlevel">11. Namespaces and down-level clients</a>
+ <li class="tocline2"><a href="#profiling">12. Profiles</a>
+ <li><a href="#Conformance">13. Conformance and requirements</a>
+ <li><a href="#Tests">14. Tests</a>
+ <li><a href="#ACKS">15. Acknowledgements</a>
+ <li class="tocline2"><a href="#references">16. References</a>
+ </ul>
+
+ </div>
+
+ <h2><a name=context>1. Introduction</a></h2>
+
+ <h3><a name=dependencies></a>1.1. Dependencies</h3>
+
+ <p>Some features of this specification are specific to CSS, or have
+ particular limitations or rules specific to CSS. In this
+ specification, these have been described in terms of CSS2.1. <a
+ href="#refsCSS21">[CSS21]</a></p>
+
+ <h3><a name=terminology></a>1.2. Terminology</h3>
+
+ <p>All of the text of this specification is normative except
+ examples, notes, and sections explicitly marked as
+ non-normative.</p>
+
+ <h3><a name=changesFromCSS2></a>1.3. Changes from CSS2</h3>
+
+ <p><em>This section is non-normative.</em></p>
+
+ <p>The main differences between the selectors in CSS2 and those in
+ Selectors are:
+
+ <ul>
+
+ <li>the list of basic definitions (selector, group of selectors,
+ simple selector, etc.) has been changed; in particular, what was
+ referred to in CSS2 as a simple selector is now called a sequence
+ of simple selectors, and the term "simple selector" is now used for
+ the components of this sequence</li>
+
+ <li>an optional namespace component is now allowed in type element
+ selectors, the universal selector and attribute selectors</li>
+
+ <li>a <a href="#general-sibling-combinators">new combinator</a> has been introduced</li>
+
+ <li>new simple selectors including substring matching attribute
+ selectors, and new pseudo-classes</li>
+
+ <li>new pseudo-elements, and introduction of the "::" convention
+ for pseudo-elements</li>
+
+ <li>the grammar has been rewritten</li>
+
+ <li>profiles to be added to specifications integrating Selectors
+ and defining the set of selectors which is actually supported by
+ each specification</li>
+
+ <li>Selectors are now a CSS3 Module and an independent
+ specification; other specifications can now refer to this document
+ independently of CSS</li>
+
+ <li>the specification now has its own test suite</li>
+
+ </ul>
+
+<h2><a name=selectors></a>2. Selectors</h2>
+
+<p><em>This section is non-normative, as it merely summarizes the
+following sections.</em></p>
+
+<p>A Selector represents a structure. This structure can be used as a
+condition (e.g. in a CSS rule) that determines which elements a
+selector matches in the document tree, or as a flat description of the
+HTML or XML fragment corresponding to that structure.</p>
+
+<p>Selectors may range from simple element names to rich contextual
+representations.</p>
+
+<p>The following table summarizes the Selector syntax:</p>
+
+<table class="selectorsReview">
+ <thead>
+ <tr>
+ <th class="pattern">Pattern</th>
+ <th class="meaning">Meaning</th>
+ <th class="described">Described in section</th>
+ <th class="origin">First defined in CSS level</th></tr>
+ <tbody>
+ <tr>
+ <td class="pattern">*</td>
+ <td class="meaning">any element</td>
+ <td class="described"><a
+ href="#universal-selector">Universal
+ selector</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E</td>
+ <td class="meaning">an element of type E</td>
+ <td class="described"><a
+ href="#type-selectors">Type selector</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E[foo]</td>
+ <td class="meaning">an E element with a "foo" attribute</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value is exactly
+ equal to "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo~="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value is a list of
+ space-separated values, one of which is exactly equal to "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo^="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value begins exactly
+ with the string "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[foo$="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value ends exactly
+ with the string "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[foo*="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value contains the
+ substring "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[hreflang|="en"]</td>
+ <td class="meaning">an E element whose "hreflang" attribute has a hyphen-separated
+ list of values beginning (from the left) with "en"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:root</td>
+ <td class="meaning">an E element, root of the document</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-child(n)</td>
+ <td class="meaning">an E element, the n-th child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-last-child(n)</td>
+ <td class="meaning">an E element, the n-th child of its parent, counting
+ from the last one</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-of-type(n)</td>
+ <td class="meaning">an E element, the n-th sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-last-of-type(n)</td>
+ <td class="meaning">an E element, the n-th sibling of its type, counting
+ from the last one</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:first-child</td>
+ <td class="meaning">an E element, first child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:last-child</td>
+ <td class="meaning">an E element, last child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:first-of-type</td>
+ <td class="meaning">an E element, first sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:last-of-type</td>
+ <td class="meaning">an E element, last sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:only-child</td>
+ <td class="meaning">an E element, only child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:only-of-type</td>
+ <td class="meaning">an E element, only sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:empty</td>
+ <td class="meaning">an E element that has no children (including text
+ nodes)</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:link<br>E:visited</td>
+ <td class="meaning">an E element being the source anchor of a hyperlink of
+ which the target is not yet visited (:link) or already visited
+ (:visited)</td>
+ <td class="described"><a
+ href="#link">The link
+ pseudo-classes</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E:active<br>E:hover<br>E:focus</td>
+ <td class="meaning">an E element during certain user actions</td>
+ <td class="described"><a
+ href="#useraction-pseudos">The user
+ action pseudo-classes</a></td>
+ <td class="origin">1 and 2</td></tr>
+ <tr>
+ <td class="pattern">E:target</td>
+ <td class="meaning">an E element being the target of the referring URI</td>
+ <td class="described"><a
+ href="#target-pseudo">The target
+ pseudo-class</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:lang(fr)</td>
+ <td class="meaning">an element of type E in language "fr" (the document
+ language specifies how language is determined)</td>
+ <td class="described"><a
+ href="#lang-pseudo">The :lang()
+ pseudo-class</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:enabled<br>E:disabled</td>
+ <td class="meaning">a user interface element E which is enabled or
+ disabled</td>
+ <td class="described"><a
+ href="#UIstates">The UI element states
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:checked<!--<br>E:indeterminate--></td>
+ <td class="meaning">a user interface element E which is checked<!-- or in an
+ indeterminate state--> (for instance a radio-button or checkbox)</td>
+ <td class="described"><a
+ href="#UIstates">The UI element states
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E::first-line</td>
+ <td class="meaning">the first formatted line of an E element</td>
+ <td class="described"><a
+ href="#first-line">The ::first-line
+ pseudo-element</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E::first-letter</td>
+ <td class="meaning">the first formatted letter of an E element</td>
+ <td class="described"><a
+ href="#first-letter">The ::first-letter
+ pseudo-element</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E::selection</td>
+ <td class="meaning">the portion of an E element that is currently
+ selected/highlighted by the user</td>
+ <td class="described"><a
+ href="#UIfragments">The UI element
+ fragments pseudo-elements</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E::before</td>
+ <td class="meaning">generated content before an E element</td>
+ <td class="described"><a
+ href="#gen-content">The ::before
+ pseudo-element</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E::after</td>
+ <td class="meaning">generated content after an E element</td>
+ <td class="described"><a
+ href="#gen-content">The ::after
+ pseudo-element</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E.warning</td>
+ <td class="meaning">an E element whose class is
+"warning" (the document language specifies how class is determined).</td>
+ <td class="described"><a
+ href="#class-html">Class
+ selectors</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E#myid</td>
+ <td class="meaning">an E element with ID equal to "myid".</td>
+ <td class="described"><a
+ href="#id-selectors">ID
+ selectors</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E:not(s)</td>
+ <td class="meaning">an E element that does not match simple selector s</td>
+ <td class="described"><a
+ href="#negation">Negation
+ pseudo-class</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E F</td>
+ <td class="meaning">an F element descendant of an E element</td>
+ <td class="described"><a
+ href="#descendant-combinators">Descendant
+ combinator</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E &gt; F</td>
+ <td class="meaning">an F element child of an E element</td>
+ <td class="described"><a
+ href="#child-combinators">Child
+ combinator</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E + F</td>
+ <td class="meaning">an F element immediately preceded by an E element</td>
+ <td class="described"><a
+ href="#adjacent-sibling-combinators">Adjacent sibling combinator</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E ~ F</td>
+ <td class="meaning">an F element preceded by an E element</td>
+ <td class="described"><a
+ href="#general-sibling-combinators">General sibling combinator</a></td>
+ <td class="origin">3</td></tr></tbody></table>
+
+<p>The meaning of each selector is derived from the table above by
+prepending "matches" to the contents of each cell in the "Meaning"
+column.</p>
+
+<h2><a name=casesens>3. Case sensitivity</a></h2>
+
+<p>The case sensitivity of document language element names, attribute
+names, and attribute values in selectors depends on the document
+language. For example, in HTML, element names are case-insensitive,
+but in XML, they are case-sensitive.</p>
+
+<h2><a name=selector-syntax>4. Selector syntax</a></h2>
+
+<p>A <dfn><a name=selector>selector</a></dfn> is a chain of one
+or more <a href="#sequence">sequences of simple selectors</a>
+separated by <a href="#combinators">combinators</a>.</p>
+
+<p>A <dfn><a name=sequence>sequence of simple selectors</a></dfn>
+is a chain of <a href="#simple-selectors-dfn">simple selectors</a>
+that are not separated by a <a href="#combinators">combinator</a>. It
+always begins with a <a href="#type-selectors">type selector</a> or a
+<a href="#universal-selector">universal selector</a>. No other type
+selector or universal selector is allowed in the sequence.</p>
+
+<p>A <dfn><a name=simple-selectors-dfn></a><a
+href="#simple-selectors">simple selector</a></dfn> is either a <a
+href="#type-selectors">type selector</a>, <a
+href="#universal-selector">universal selector</a>, <a
+href="#attribute-selectors">attribute selector</a>, <a
+href="#class-html">class selector</a>, <a
+href="#id-selectors">ID selector</a>, <a
+href="#content-selectors">content selector</a>, or <a
+href="#pseudo-classes">pseudo-class</a>. One <a
+href="#pseudo-elements">pseudo-element</a> may be appended to the last
+sequence of simple selectors.</p>
+
+<p><dfn>Combinators</dfn> are: white space, &quot;greater-than
+sign&quot; (U+003E, <code>&gt;</code>), &quot;plus sign&quot; (U+002B,
+<code>+</code>) and &quot;tilde&quot; (U+007E, <code>~</code>). White
+space may appear between a combinator and the simple selectors around
+it. <a name=whitespace></a>Only the characters "space" (U+0020), "tab"
+(U+0009), "line feed" (U+000A), "carriage return" (U+000D), and "form
+feed" (U+000C) can occur in white space. Other space-like characters,
+such as "em-space" (U+2003) and "ideographic space" (U+3000), are
+never part of white space.</p>
+
+<p>The elements of a document tree that are represented by a selector
+are the <dfn><a name=subject></a>subjects of the selector</dfn>. A
+selector consisting of a single sequence of simple selectors
+represents any element satisfying its requirements. Prepending another
+sequence of simple selectors and a combinator to a sequence imposes
+additional matching constraints, so the subjects of a selector are
+always a subset of the elements represented by the last sequence of
+simple selectors.</p>
+
+<p>An empty selector, containing no sequence of simple selectors and
+no pseudo-element, is an <a href="#Conformance">invalid
+selector</a>.</p>
+
+<h2><a name=grouping>5. Groups of selectors</a></h2>
+
+<p>When several selectors share the same declarations, they may be
+grouped into a comma-separated list. (A comma is U+002C.)</p>
+
+<div class="example">
+<p>CSS examples:</p>
+<p>In this example, we condense three rules with identical
+declarations into one. Thus,</p>
+<pre>h1 { font-family: sans-serif }
+h2 { font-family: sans-serif }
+h3 { font-family: sans-serif }</pre>
+<p>is equivalent to:</p>
+<pre>h1, h2, h3 { font-family: sans-serif }</pre>
+</div>
+
+<p><strong>Warning</strong>: the equivalence is true in this example
+because all the selectors are valid selectors. If just one of these
+selectors were invalid, the entire group of selectors would be
+invalid. This would invalidate the rule for all three heading
+elements, whereas in the former case only one of the three individual
+heading rules would be invalidated.</p>
+
+
+<h2><a name=simple-selectors>6. Simple selectors</a></h2>
+
+<h3><a name=type-selectors>6.1. Type selector</a></h3>
+
+<p>A <dfn>type selector</dfn> is the name of a document language
+element type. A type selector represents an instance of the element
+type in the document tree.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents an <code>h1</code> element in the document tree:</p>
+ <pre>h1</pre>
+</div>
+
+
+<h4><a name=typenmsp>6.1.1. Type selectors and namespaces</a></h4>
+
+<p>Type selectors allow an optional namespace (<a
+href="#refsXMLNAMES">[XMLNAMES]</a>) component. A namespace prefix
+that has been previously declared may be prepended to the element name
+separated by the namespace separator &quot;vertical bar&quot;
+(U+007C, <code>|</code>).</p>
+
+<p>The namespace component may be left empty to indicate that the
+selector is only to represent elements with no declared namespace.</p>
+
+<p>An asterisk may be used for the namespace prefix, indicating that
+the selector represents elements in any namespace (including elements
+with no namespace).</p>
+
+<p>Element type selectors that have no namespace component (no
+namespace separator), represent elements without regard to the
+element's namespace (equivalent to "<code>*|</code>") unless a default
+namespace has been declared. If a default namespace has been declared,
+the selector will represent only elements in the default
+namespace.</p>
+
+<p>A type selector containing a namespace prefix that has not been
+previously declared is an <a href="#Conformance">invalid</a> selector.
+The mechanism for declaring a namespace prefix is left up to the
+language implementing Selectors. In CSS, such a mechanism is defined
+in the General Syntax module.</p>
+
+<p>In a namespace-aware client, element type selectors will only match
+against the <a
+href="http://www.w3.org/TR/REC-xml-names/#NT-LocalPart">local part</a>
+of the element's <a
+href="http://www.w3.org/TR/REC-xml-names/#ns-qualnames">qualified
+name</a>. See <a href="#downlevel">below</a> for notes about matching
+behaviors in down-level clients.</p>
+
+<p>In summary:</p>
+
+<dl>
+ <dt><code>ns|E</code></dt>
+ <dd>elements with name E in namespace ns</dd>
+ <dt><code>*|E</code></dt>
+ <dd>elements with name E in any namespace, including those without any
+ declared namespace</dd>
+ <dt><code>|E</code></dt>
+ <dd>elements with name E without any declared namespace</dd>
+ <dt><code>E</code></dt>
+ <dd>if no default namespace has been specified, this is equivalent to *|E.
+ Otherwise it is equivalent to ns|E where ns is the default namespace.</dd>
+</dl>
+
+<div class="example">
+ <p>CSS examples:</p>
+
+ <pre>@namespace foo url(http://www.example.com);
+ foo|h1 { color: blue }
+ foo|* { color: yellow }
+ |h1 { color: red }
+ *|h1 { color: green }
+ h1 { color: green }</pre>
+
+ <p>The first rule will match only <code>h1</code> elements in the
+ "http://www.example.com" namespace.</p>
+
+ <p>The second rule will match all elements in the
+ "http://www.example.com" namespace.</p>
+
+ <p>The third rule will match only <code>h1</code> elements without
+ any declared namespace.</p>
+
+ <p>The fourth rule will match <code>h1</code> elements in any
+ namespace (including those without any declared namespace).</p>
+
+ <p>The last rule is equivalent to the fourth rule because no default
+ namespace has been defined.</p>
+
+</div>
+
+<h3><a name=universal-selector>6.2. Universal selector</a> </h3>
+
+<p>The <dfn>universal selector</dfn>, written &quot;asterisk&quot;
+(<code>*</code>), represents the qualified name of any element
+type. It represents any single element in the document tree in any
+namespace (including those without any declared namespace) if no
+default namespace has been specified. If a default namespace has been
+specified, see <a href="#univnmsp">Universal selector and
+Namespaces</a> below.</p>
+
+<p>If the universal selector is not the only component of a sequence
+of simple selectors, the <code>*</code> may be omitted.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <ul>
+ <li><code>*[hreflang|=en]</code> and <code>[hreflang|=en]</code> are equivalent,</li>
+ <li><code>*.warning</code> and <code>.warning</code> are equivalent,</li>
+ <li><code>*#myid</code> and <code>#myid</code> are equivalent.</li>
+ </ul>
+</div>
+
+<p class="note"><strong>Note:</strong> it is recommended that the
+<code>*</code>, representing the universal selector, not be
+omitted.</p>
+
+<h4><a name=univnmsp>6.2.1. Universal selector and namespaces</a></h4>
+
+<p>The universal selector allows an optional namespace component. It
+is used as follows:</p>
+
+<dl>
+ <dt><code>ns|*</code></dt>
+ <dd>all elements in namespace ns</dd>
+ <dt><code>*|*</code></dt>
+ <dd>all elements</dd>
+ <dt><code>|*</code></dt>
+ <dd>all elements without any declared namespace</dd>
+ <dt><code>*</code></dt>
+ <dd>if no default namespace has been specified, this is equivalent to *|*.
+ Otherwise it is equivalent to ns|* where ns is the default namespace.</dd>
+</dl>
+
+<p>A universal selector containing a namespace prefix that has not
+been previously declared is an <a href="#Conformance">invalid</a>
+selector. The mechanism for declaring a namespace prefix is left up
+to the language implementing Selectors. In CSS, such a mechanism is
+defined in the General Syntax module.</p>
+
+
+<h3><a name=attribute-selectors>6.3. Attribute selectors</a></h3>
+
+<p>Selectors allow the representation of an element's attributes. When
+a selector is used as an expression to match against an element,
+attribute selectors must be considered to match an element if that
+element has an attribute that matches the attribute represented by the
+attribute selector.</p>
+
+<h4><a name=attribute-representation>6.3.1. Attribute presence and values
+selectors</a></h4>
+
+<p>CSS2 introduced four attribute selectors:</p>
+
+<dl>
+ <dt><code>[att]</code>
+ <dd>Represents an element with the <code>att</code> attribute, whatever the value of
+ the attribute.</dd>
+ <dt><code>[att=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value is exactly
+ "val".</dd>
+ <dt><code>[att~=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value is a <a
+ href="#whitespace">whitespace</a>-separated list of words, one of
+ which is exactly "val". If "val" contains whitespace, it will never
+ represent anything (since the words are <em>separated</em> by
+ spaces).</dd>
+ <dt><code>[att|=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute, its value either
+ being exactly "val" or beginning with "val" immediately followed by
+ "-" (U+002D). This is primarily intended to allow language subcode
+ matches (e.g., the <code>hreflang</code> attribute on the
+ <code>link</code> element in HTML) as described in RFC 3066 (<a
+ href="#refsRFC3066">[RFC3066]</a>). For <code>lang</code> (or
+ <code>xml:lang</code>) language subcode matching, please see <a
+ href="#lang-pseudo">the <code>:lang</code> pseudo-class</a>.</dd>
+</dl>
+
+<p>Attribute values must be identifiers or strings. The
+case-sensitivity of attribute names and values in selectors depends on
+the document language.</p>
+
+<div class="example">
+
+ <p>Examples:</p>
+
+ <p>The following attribute selector represents an <code>h1</code>
+ element that carries the <code>title</code> attribute, whatever its
+ value:</p>
+
+ <pre>h1[title]</pre>
+
+ <p>In the following example, the selector represents a
+ <code>span</code> element whose <code>class</code> attribute has
+ exactly the value "example":</p>
+
+ <pre>span[class="example"]</pre>
+
+ <p>Multiple attribute selectors can be used to represent several
+ attributes of an element, or several conditions on the same
+ attribute. Here, the selector represents a <code>span</code> element
+ whose <code>hello</code> attribute has exactly the value "Cleveland"
+ and whose <code>goodbye</code> attribute has exactly the value
+ "Columbus":</p>
+
+ <pre>span[hello="Cleveland"][goodbye="Columbus"]</pre>
+
+ <p>The following selectors illustrate the differences between "="
+ and "~=". The first selector will represent, for example, the value
+ "copyright copyleft copyeditor" on a <code>rel</code> attribute. The
+ second selector will only represent an <code>a</code> element with
+ an <code>href</code> attribute having the exact value
+ "http://www.w3.org/".</p>
+
+ <pre>a[rel~="copyright"]
+a[href="http://www.w3.org/"]</pre>
+
+ <p>The following selector represents a <code>link</code> element
+ whose <code>hreflang</code> attribute is exactly "fr".</p>
+
+ <pre>link[hreflang=fr]</pre>
+
+ <p>The following selector represents a <code>link</code> element for
+ which the values of the <code>hreflang</code> attribute begins with
+ "en", including "en", "en-US", and "en-cockney":</p>
+
+ <pre>link[hreflang|="en"]</pre>
+
+ <p>Similarly, the following selectors represents a
+ <code>DIALOGUE</code> element whenever it has one of two different
+ values for an attribute <code>character</code>:</p>
+
+ <pre>DIALOGUE[character=romeo]
+DIALOGUE[character=juliet]</pre>
+
+</div>
+
+<h4><a name=attribute-substrings></a>6.3.2. Substring matching attribute
+selectors</h4>
+
+<p>Three additional attribute selectors are provided for matching
+substrings in the value of an attribute:</p>
+
+<dl>
+ <dt><code>[att^=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value begins
+ with the prefix "val".</dd>
+ <dt><code>[att$=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute whose value ends with
+ the suffix "val".</dd>
+ <dt><code>[att*=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute whose value contains
+ at least one instance of the substring "val".</dd>
+</dl>
+
+<p>Attribute values must be identifiers or strings. The
+case-sensitivity of attribute names in selectors depends on the
+document language.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents an HTML <code>object</code>, referencing an
+ image:</p>
+ <pre>object[type^="image/"]</pre>
+ <p>The following selector represents an HTML anchor <code>a</code> with an
+ <code>href</code> attribute whose value ends with ".html".</p>
+ <pre>a[href$=".html"]</pre>
+ <p>The following selector represents an HTML paragraph with a <code>title</code>
+ attribute whose value contains the substring "hello"</p>
+ <pre>p[title*="hello"]</pre>
+</div>
+
+<h4><a name=attrnmsp>6.3.3. Attribute selectors and namespaces</a></h4>
+
+<p>Attribute selectors allow an optional namespace component to the
+attribute name. A namespace prefix that has been previously declared
+may be prepended to the attribute name separated by the namespace
+separator &quot;vertical bar&quot; (<code>|</code>). In keeping with
+the Namespaces in the XML recommendation, default namespaces do not
+apply to attributes, therefore attribute selectors without a namespace
+component apply only to attributes that have no declared namespace
+(equivalent to "<code>|attr</code>"). An asterisk may be used for the
+namespace prefix indicating that the selector is to match all
+attribute names without regard to the attribute's namespace.
+
+<p>An attribute selector with an attribute name containing a namespace
+prefix that has not been previously declared is an <a
+href="#Conformance">invalid</a> selector. The mechanism for declaring
+a namespace prefix is left up to the language implementing Selectors.
+In CSS, such a mechanism is defined in the General Syntax module.
+
+<div class="example">
+ <p>CSS examples:</p>
+ <pre>@namespace foo "http://www.example.com";
+[foo|att=val] { color: blue }
+[*|att] { color: yellow }
+[|att] { color: green }
+[att] { color: green }</pre>
+
+ <p>The first rule will match only elements with the attribute
+ <code>att</code> in the "http://www.example.com" namespace with the
+ value "val".</p>
+
+ <p>The second rule will match only elements with the attribute
+ <code>att</code> regardless of the namespace of the attribute
+ (including no declared namespace).</p>
+
+ <p>The last two rules are equivalent and will match only elements
+ with the attribute <code>att</code> where the attribute is not
+ declared to be in a namespace.</p>
+
+</div>
+
+<h4><a name=def-values>6.3.4. Default attribute values in DTDs</a></h4>
+
+<p>Attribute selectors represent explicitly set attribute values in
+the document tree. Default attribute values may be defined in a DTD or
+elsewhere, but cannot always be selected by attribute
+selectors. Selectors should be designed so that they work even if the
+default values are not included in the document tree.</p>
+
+<p>More precisely, a UA is <em>not</em> required to read an "external
+subset" of the DTD but <em>is</em> required to look for default
+attribute values in the document's "internal subset." (See <a
+href="#refsXML10">[XML10]</a> for definitions of these subsets.)</p>
+
+<p>A UA that recognizes an XML namespace <a
+href="#refsXMLNAMES">[XMLNAMES]</a> is not required to use its
+knowledge of that namespace to treat default attribute values as if
+they were present in the document. (For example, an XHTML UA is not
+required to use its built-in knowledge of the XHTML DTD.)</p>
+
+<p class="note"><strong>Note:</strong> Typically, implementations
+choose to ignore external subsets.</p>
+
+<div class="example">
+<p>Example:</p>
+
+<p>Consider an element EXAMPLE with an attribute "notation" that has a
+default value of "decimal". The DTD fragment might be</p>
+
+<pre class="dtd-example">&lt;!ATTLIST EXAMPLE notation (decimal,octal) "decimal"></pre>
+
+<p>If the style sheet contains the rules</p>
+
+<pre>EXAMPLE[notation=decimal] { /*... default property settings ...*/ }
+EXAMPLE[notation=octal] { /*... other settings...*/ }</pre>
+
+<p>the first rule will not match elements whose "notation" attribute
+is set by default, i.e. not set explicitly. To catch all cases, the
+attribute selector for the default value must be dropped:</p>
+
+<pre>EXAMPLE { /*... default property settings ...*/ }
+EXAMPLE[notation=octal] { /*... other settings...*/ }</pre>
+
+<p>Here, because the selector <code>EXAMPLE[notation=octal]</code> is
+more specific than the tag
+selector alone, the style declarations in the second rule will override
+those in the first for elements that have a "notation" attribute value
+of "octal". Care has to be taken that all property declarations that
+are to apply only to the default case are overridden in the non-default
+cases' style rules.</p>
+
+</div>
+
+<h3><a name=class-html>6.4. Class selectors</a></h3>
+
+<p>Working with HTML, authors may use the period (U+002E,
+<code>.</code>) notation as an alternative to the <code>~=</code>
+notation when representing the <code>class</code> attribute. Thus, for
+HTML, <code>div.value</code> and <code>div[class~=value]</code> have
+the same meaning. The attribute value must immediately follow the
+&quot;period&quot; (<code>.</code>).</p>
+
+<p>UAs may apply selectors using the period (.) notation in XML
+documents if the UA has namespace-specific knowledge that allows it to
+determine which attribute is the &quot;class&quot; attribute for the
+respective namespace. One such example of namespace-specific knowledge
+is the prose in the specification for a particular namespace (e.g. SVG
+1.0 <a href="#refsSVG">[SVG]</a> describes the <a
+href="http://www.w3.org/TR/2001/PR-SVG-20010719/styling.html#ClassAttribute">SVG
+&quot;class&quot; attribute</a> and how a UA should interpret it, and
+similarly MathML 1.01 <a href="#refsMATH">[MATH]</a> describes the <a
+href="http://www.w3.org/1999/07/REC-MathML-19990707/chapter2.html#sec2.3.4">MathML
+&quot;class&quot; attribute</a>.)</p>
+
+<div class="example">
+ <p>CSS examples:</p>
+
+ <p>We can assign style information to all elements with
+ <code>class~="pastoral"</code> as follows:</p>
+
+ <pre>*.pastoral { color: green } /* all elements with class~=pastoral */</pre>
+
+ <p>or just</p>
+
+ <pre>.pastoral { color: green } /* all elements with class~=pastoral */</pre>
+
+ <p>The following assigns style only to H1 elements with
+ <code>class~="pastoral"</code>:</p>
+
+ <pre>H1.pastoral { color: green } /* H1 elements with class~=pastoral */</pre>
+
+ <p>Given these rules, the first H1 instance below would not have
+ green text, while the second would:</p>
+
+ <pre>&lt;H1&gt;Not green&lt;/H1&gt;
+&lt;H1 class="pastoral"&gt;Very green&lt;/H1&gt;</pre>
+
+</div>
+
+<p>To represent a subset of "class" values, each value must be preceded
+by a ".", in any order.</P>
+
+<div class="example">
+
+ <p>CSS example:</p>
+
+ <p>The following rule matches any P element whose "class" attribute
+ has been assigned a list of <a
+ href="#whitespace">whitespace</a>-separated values that includes
+ "pastoral" and "marine":</p>
+
+ <pre>p.pastoral.marine { color: green }</pre>
+
+ <p>This rule matches when <code>class="pastoral blue aqua
+ marine"</code> but does not match for <code>class="pastoral
+ blue"</code>.</p>
+
+</div>
+
+<p class="note"><strong>Note:</strong> Because CSS gives considerable
+power to the "class" attribute, authors could conceivably design their
+own "document language" based on elements with almost no associated
+presentation (such as DIV and SPAN in HTML) and assigning style
+information through the "class" attribute. Authors should avoid this
+practice since the structural elements of a document language often
+have recognized and accepted meanings and author-defined classes may
+not.</p>
+
+<p class="note"><strong>Note:</strong> If an element has multiple
+class attributes, their values must be concatenated with spaces
+between the values before searching for the class. As of this time the
+working group is not aware of any manner in which this situation can
+be reached, however, so this behavior is explicitly non-normative in
+this specification.</p>
+
+<h3><a name=id-selectors>6.5. ID selectors</a></h3>
+
+<p>Document languages may contain attributes that are declared to be
+of type ID. What makes attributes of type ID special is that no two
+such attributes can have the same value in a document, regardless of
+the type of the elements that carry them; whatever the document
+language, an ID typed attribute can be used to uniquely identify its
+element. In HTML all ID attributes are named "id"; XML applications
+may name ID attributes differently, but the same restriction
+applies.</p>
+
+<p>An ID-typed attribute of a document language allows authors to
+assign an identifier to one element instance in the document tree. W3C
+ID selectors represent an element instance based on its identifier. An
+ID selector contains a &quot;number sign&quot; (U+0023,
+<code>#</code>) immediately followed by the ID value, which must be an
+identifier.</p>
+
+<p>Selectors does not specify how a UA knows the ID-typed attribute of
+an element. The UA may, e.g., read a document's DTD, have the
+information hard-coded or ask the user.
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following ID selector represents an <code>h1</code> element
+ whose ID-typed attribute has the value "chapter1":</p>
+ <pre>h1#chapter1</pre>
+ <p>The following ID selector represents any element whose ID-typed
+ attribute has the value "chapter1":</p>
+ <pre>#chapter1</pre>
+ <p>The following selector represents any element whose ID-typed
+ attribute has the value "z98y".</p>
+ <pre>*#z98y</pre>
+</div>
+
+<p class="note"><strong>Note.</strong> In XML 1.0 <a
+href="#refsXML10">[XML10]</a>, the information about which attribute
+contains an element's IDs is contained in a DTD or a schema. When
+parsing XML, UAs do not always read the DTD, and thus may not know
+what the ID of an element is (though a UA may have namespace-specific
+knowledge that allows it to determine which attribute is the ID
+attribute for that namespace). If a style sheet designer knows or
+suspects that a UA may not know what the ID of an element is, he
+should use normal attribute selectors instead:
+<code>[name=p371]</code> instead of <code>#p371</code>. Elements in
+XML 1.0 documents without a DTD do not have IDs at all.</p>
+
+<p>If an element has multiple ID attributes, all of them must be
+treated as IDs for that element for the purposes of the ID
+selector. Such a situation could be reached using mixtures of xml:id,
+DOM3 Core, XML DTDs, and namespace-specific knowledge.</p>
+
+<h3><a name=pseudo-classes>6.6. Pseudo-classes</a></h3>
+
+<p>The pseudo-class concept is introduced to permit selection based on
+information that lies outside of the document tree or that cannot be
+expressed using the other simple selectors.</p>
+
+<p>A pseudo-class always consists of a &quot;colon&quot;
+(<code>:</code>) followed by the name of the pseudo-class and
+optionally by a value between parentheses.</p>
+
+<p>Pseudo-classes are allowed in all sequences of simple selectors
+contained in a selector. Pseudo-classes are allowed anywhere in
+sequences of simple selectors, after the leading type selector or
+universal selector (possibly omitted). Pseudo-class names are
+case-insensitive. Some pseudo-classes are mutually exclusive, while
+others can be applied simultaneously to the same
+element. Pseudo-classes may be dynamic, in the sense that an element
+may acquire or lose a pseudo-class while a user interacts with the
+document.</p>
+
+
+<h4><a name=dynamic-pseudos>6.6.1. Dynamic pseudo-classes</a></h4>
+
+<p>Dynamic pseudo-classes classify elements on characteristics other
+than their name, attributes, or content, in principle characteristics
+that cannot be deduced from the document tree.</p>
+
+<p>Dynamic pseudo-classes do not appear in the document source or
+document tree.</p>
+
+
+<h5>The <a name=link>link pseudo-classes: :link and :visited</a></h5>
+
+<p>User agents commonly display unvisited links differently from
+previously visited ones. Selectors
+provides the pseudo-classes <code>:link</code> and
+<code>:visited</code> to distinguish them:</p>
+
+<ul>
+ <li>The <code>:link</code> pseudo-class applies to links that have
+ not yet been visited.</li>
+ <li>The <code>:visited</code> pseudo-class applies once the link has
+ been visited by the user. </li>
+</ul>
+
+<p>After some amount of time, user agents may choose to return a
+visited link to the (unvisited) ':link' state.</p>
+
+<p>The two states are mutually exclusive.</p>
+
+<div class="example">
+
+ <p>Example:</p>
+
+ <p>The following selector represents links carrying class
+ <code>external</code> and already visited:</p>
+
+ <pre>a.external:visited</pre>
+
+</div>
+
+<p class="note"><strong>Note:</strong> It is possible for style sheet
+authors to abuse the :link and :visited pseudo-classes to determine
+which sites a user has visited without the user's consent.
+
+<p>UAs may therefore treat all links as unvisited links, or implement
+other measures to preserve the user's privacy while rendering visited
+and unvisited links differently.</p>
+
+<h5>The <a name=useraction-pseudos>user action pseudo-classes
+:hover, :active, and :focus</a></h5>
+
+<p>Interactive user agents sometimes change the rendering in response
+to user actions. Selectors provides
+three pseudo-classes for the selection of an element the user is
+acting on.</p>
+
+<ul>
+
+ <li>The <code>:hover</code> pseudo-class applies while the user
+ designates an element with a pointing device, but does not activate
+ it. For example, a visual user agent could apply this pseudo-class
+ when the cursor (mouse pointer) hovers over a box generated by the
+ element. User agents not that do not support <a
+ href="http://www.w3.org/TR/REC-CSS2/media.html#interactive-media-group">interactive
+ media</a> do not have to support this pseudo-class. Some conforming
+ user agents that support <a
+ href="http://www.w3.org/TR/REC-CSS2/media.html#interactive-media-group">interactive
+ media</a> may not be able to support this pseudo-class (e.g., a pen
+ device that does not detect hovering).</li>
+
+ <li>The <code>:active</code> pseudo-class applies while an element
+ is being activated by the user. For example, between the times the
+ user presses the mouse button and releases it.</li>
+
+ <li>The <code>:focus</code> pseudo-class applies while an element
+ has the focus (accepts keyboard or mouse events, or other forms of
+ input). </li>
+
+</ul>
+
+<p>There may be document language or implementation specific limits on
+which elements can become <code>:active</code> or acquire
+<code>:focus</code>.</p>
+
+<p>These pseudo-classes are not mutually exclusive. An element may
+match several pseudo-classes at the same time.</p>
+
+<p>Selectors doesn't define if the parent of an element that is
+':active' or ':hover' is also in that state.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <pre>a:link /* unvisited links */
+a:visited /* visited links */
+a:hover /* user hovers */
+a:active /* active links */</pre>
+ <p>An example of combining dynamic pseudo-classes:</p>
+ <pre>a:focus
+a:focus:hover</pre>
+ <p>The last selector matches <code>a</code> elements that are in
+ the pseudo-class :focus and in the pseudo-class :hover.</p>
+</div>
+
+<p class="note"><strong>Note:</strong> An element can be both ':visited'
+and ':active' (or ':link' and ':active').</p>
+
+<h4><a name=target-pseudo>6.6.2. The target pseudo-class :target</a></h4>
+
+<p>Some URIs refer to a location within a resource. This kind of URI
+ends with a &quot;number sign&quot; (#) followed by an anchor
+identifier (called the fragment identifier).</p>
+
+<p>URIs with fragment identifiers link to a certain element within the
+document, known as the target element. For instance, here is a URI
+pointing to an anchor named <code>section_2</code> in an HTML
+document:</p>
+
+<pre>http://example.com/html/top.html#section_2</pre>
+
+<p>A target element can be represented by the <code>:target</code>
+pseudo-class. If the document's URI has no fragment identifier, then
+the document has no target element.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <pre>p.note:target</pre>
+ <p>This selector represents a <code>p</code> element of class
+ <code>note</code> that is the target element of the referring
+ URI.</p>
+</div>
+
+<div class="example">
+ <p>CSS example:</p>
+ <p>Here, the <code>:target</code> pseudo-class is used to make the
+ target element red and place an image before it, if there is one:</p>
+ <pre>*:target { color : red }
+*:target::before { content : url(target.png) }</pre>
+</div>
+
+<h4><a name=lang-pseudo>6.6.3. The language pseudo-class :lang</a></h4>
+
+<p>If the document language specifies how the human language of an
+element is determined, it is possible to write selectors that
+represent an element based on its language. For example, in HTML <a
+href="#refsHTML4">[HTML4]</a>, the language is determined by a
+combination of the <code>lang</code> attribute, the <code>meta</code>
+element, and possibly by information from the protocol (such as HTTP
+headers). XML uses an attribute called <code>xml:lang</code>, and
+there may be other document language-specific methods for determining
+the language.</p>
+
+<p>The pseudo-class <code>:lang(C)</code> represents an element that
+is in language C. Whether an element is represented by a
+<code>:lang()</code> selector is based solely on the identifier C
+being either equal to, or a hyphen-separated substring of, the
+element's language value, in the same way as if performed by the <a
+href="#attribute-representation">'|='</a> operator in attribute
+selectors. The identifier C does not have to be a valid language
+name.</p>
+
+<p>C must not be empty. (If it is, the selector is invalid.)</p>
+
+<p class="note"><strong>Note:</strong> It is recommended that
+documents and protocols indicate language using codes from RFC 3066 <a
+href="#refsRFC3066">[RFC3066]</a> or its successor, and by means of
+"xml:lang" attributes in the case of XML-based documents <a
+href="#refsXML10">[XML10]</a>. See <a
+href="http://www.w3.org/International/questions/qa-lang-2or3.html">
+"FAQ: Two-letter or three-letter language codes."</a></p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The two following selectors represent an HTML document that is in
+ Belgian, French, or German. The two next selectors represent
+ <code>q</code> quotations in an arbitrary element in Belgian, French,
+ or German.</p>
+ <pre>html:lang(fr-be)
+html:lang(de)
+:lang(fr-be) &gt; q
+:lang(de) &gt; q</pre>
+</div>
+
+<h4><a name=UIstates>6.6.4. The UI element states pseudo-classes</a></h4>
+
+<h5><a name=enableddisabled>The :enabled and :disabled pseudo-classes</a></h5>
+
+<p>The <code>:enabled</code> pseudo-class allows authors to customize
+the look of user interface elements that are enabled &mdash; which the
+user can select or activate in some fashion (e.g. clicking on a button
+with a mouse). There is a need for such a pseudo-class because there
+is no way to programmatically specify the default appearance of say,
+an enabled <code>input</code> element without also specifying what it
+would look like when it was disabled.</p>
+
+<p>Similar to <code>:enabled</code>, <code>:disabled</code> allows the
+author to specify precisely how a disabled or inactive user interface
+element should look.</p>
+
+<p>Most elements will be neither enabled nor disabled. An element is
+enabled if the user can either activate it or transfer the focus to
+it. An element is disabled if it could be enabled, but the user cannot
+presently activate it or transfer focus to it.</p>
+
+
+<h5><a name=checked>The :checked pseudo-class</a></h5>
+
+<p>Radio and checkbox elements can be toggled by the user. Some menu
+items are "checked" when the user selects them. When such elements are
+toggled "on" the <code>:checked</code> pseudo-class applies. The
+<code>:checked</code> pseudo-class initially applies to such elements
+that have the HTML4 <code>selected</code> and <code>checked</code>
+attributes as described in <a
+href="http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.2.1">Section
+17.2.1 of HTML4</a>, but of course the user can toggle "off" such
+elements in which case the <code>:checked</code> pseudo-class would no
+longer apply. While the <code>:checked</code> pseudo-class is dynamic
+in nature, and is altered by user action, since it can also be based
+on the presence of the semantic HTML4 <code>selected</code> and
+<code>checked</code> attributes, it applies to all media.
+
+
+<h5><a name=indeterminate>The :indeterminate pseudo-class</a></h5>
+
+<div class="note">
+
+<p>Radio and checkbox elements can be toggled by the user, but are
+sometimes in an indeterminate state, neither checked nor unchecked.
+This can be due to an element attribute, or DOM manipulation.</p>
+
+<p>A future version of this specification may introduce an
+<code>:indeterminate</code> pseudo-class that applies to such elements.
+<!--While the <code>:indeterminate</code> pseudo-class is dynamic in
+nature, and is altered by user action, since it can also be based on
+the presence of an element attribute, it applies to all media.</p>
+
+<p>Components of a radio-group initialized with no pre-selected choice
+are an example of :indeterminate state.--></p>
+
+</div>
+
+
+<h4><a name=structural-pseudos>6.6.5. Structural pseudo-classes</a></h4>
+
+<p>Selectors introduces the concept of <dfn>structural
+pseudo-classes</dfn> to permit selection based on extra information that lies in
+the document tree but cannot be represented by other simple selectors or
+combinators.
+
+<p>Note that standalone pieces of PCDATA (text nodes in the DOM) are
+not counted when calculating the position of an element in the list of
+children of its parent. When calculating the position of an element in
+the list of children of its parent, the index numbering starts at 1.
+
+
+<h5><a name=root-pseudo>:root pseudo-class</a></h5>
+
+<p>The <code>:root</code> pseudo-class represents an element that is
+the root of the document. In HTML 4, this is always the
+<code>HTML</code> element.
+
+
+<h5><a name=nth-child-pseudo>:nth-child() pseudo-class</a></h5>
+
+<p>The
+<code>:nth-child(<var>a</var><code>n</code>+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings
+<strong>before</strong> it in the document tree, for a given positive
+integer or zero value of <code>n</code>, and has a parent element. In
+other words, this matches the <var>b</var>th child of an element after
+all the children have been split into groups of <var>a</var> elements
+each. For example, this allows the selectors to address every other
+row in a table, and could be used to alternate the color
+of paragraph text in a cycle of four. The <var>a</var> and
+<var>b</var> values must be zero, negative integers or positive
+integers. The index of the first child of an element is 1.
+
+<p>In addition to this, <code>:nth-child()</code> can take
+'<code>odd</code>' and '<code>even</code>' as arguments instead.
+'<code>odd</code>' has the same signification as <code>2n+1</code>,
+and '<code>even</code>' has the same signification as <code>2n</code>.
+
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-child(2n+1) /* represents every odd row of an HTML table */
+tr:nth-child(odd) /* same */
+tr:nth-child(2n) /* represents every even row of an HTML table */
+tr:nth-child(even) /* same */
+
+/* Alternate paragraph colours in CSS */
+p:nth-child(4n+1) { color: navy; }
+p:nth-child(4n+2) { color: green; }
+p:nth-child(4n+3) { color: maroon; }
+p:nth-child(4n+4) { color: purple; }</pre>
+</div>
+
+<p>When <var>a</var>=0, no repeating is used, so for example
+<code>:nth-child(0n+5)</code> matches only the fifth child. When
+<var>a</var>=0, the <var>a</var><code>n</code> part need not be
+included, so the syntax simplifies to
+<code>:nth-child(<var>b</var>)</code> and the last example simplifies
+to <code>:nth-child(5)</code>.
+
+<div class="example">
+<p>Examples:</p>
+<pre>foo:nth-child(0n+1) /* represents an element foo, first child of its parent element */
+foo:nth-child(1) /* same */</pre>
+</div>
+
+<p>When <var>a</var>=1, the number may be omitted from the rule.
+
+<div class="example">
+<p>Examples:</p>
+<p>The following selectors are therefore equivalent:</p>
+<pre>bar:nth-child(1n+0) /* represents all bar elements, specificity (0,1,1) */
+bar:nth-child(n+0) /* same */
+bar:nth-child(n) /* same */
+bar /* same but lower specificity (0,0,1) */</pre>
+</div>
+
+<p>If <var>b</var>=0, then every <var>a</var>th element is picked. In
+such a case, the <var>b</var> part may be omitted.
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-child(2n+0) /* represents every even row of an HTML table */
+tr:nth-child(2n) /* same */</pre>
+</div>
+
+<p>If both <var>a</var> and <var>b</var> are equal to zero, the
+pseudo-class represents no element in the document tree.</p>
+
+<p>The value <var>a</var> can be negative, but only the positive
+values of <var>a</var><code>n</code>+<var>b</var>, for
+<code>n</code>&ge;0, may represent an element in the document
+tree.</p>
+
+<div class="example">
+<p>Example:</p>
+<pre>html|tr:nth-child(-n+6) /* represents the 6 first rows of XHTML tables */</pre>
+</div>
+
+<p>When the value <var>b</var> is negative, the "+" character in the
+expression must be removed (it is effectively replaced by the "-"
+character indicating the negative value of <var>b</var>).</p>
+
+<div class="example">
+<p>Examples:</p>
+<pre>:nth-child(10n-1) /* represents the 9th, 19th, 29th, etc, element */
+:nth-child(10n+9) /* Same */
+:nth-child(10n+-1) /* Syntactically invalid, and would be ignored */</pre>
+</div>
+
+
+<h5><a name=nth-last-child-pseudo>:nth-last-child() pseudo-class</a></h5>
+
+<p>The <code>:nth-last-child(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings
+<strong>after</strong> it in the document tree, for a given positive
+integer or zero value of <code>n</code>, and has a parent element. See
+<code>:nth-child()</code> pseudo-class for the syntax of its argument.
+It also accepts the '<code>even</code>' and '<code>odd</code>' values
+as arguments.
+
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-last-child(-n+2) /* represents the two last rows of an HTML table */
+
+foo:nth-last-child(odd) /* represents all odd foo elements in their parent element,
+ counting from the last one */</pre>
+</div>
+
+
+<h5><a name=nth-of-type-pseudo>:nth-of-type() pseudo-class</a></h5>
+
+<p>The <code>:nth-of-type(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings with the same
+element name <strong>before</strong> it in the document tree, for a
+given zero or positive integer value of <code>n</code>, and has a
+parent element. In other words, this matches the <var>b</var>th child
+of that type after all the children of that type have been split into
+groups of a elements each. See <code>:nth-child()</code> pseudo-class
+for the syntax of its argument. It also accepts the
+'<code>even</code>' and '<code>odd</code>' values.
+
+
+<div class="example">
+<p>CSS example:</p>
+<p>This allows an author to alternate the position of floated images:</p>
+<pre>img:nth-of-type(2n+1) { float: right; }
+img:nth-of-type(2n) { float: left; }</pre>
+</div>
+
+
+<h5><a name=nth-last-of-type-pseudo>:nth-last-of-type() pseudo-class</a></h5>
+
+<p>The <code>:nth-last-of-type(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings with the same
+element name <strong>after</strong> it in the document tree, for a
+given zero or positive integer value of <code>n</code>, and has a
+parent element. See <code>:nth-child()</code> pseudo-class for the
+syntax of its argument. It also accepts the '<code>even</code>' and '<code>odd</code>' values.
+
+
+<div class="example">
+ <p>Example:</p>
+ <p>To represent all <code>h2</code> children of an XHTML
+ <code>body</code> except the first and last, one could use the
+ following selector:</p>
+ <pre>body &gt; h2:nth-of-type(n+2):nth-last-of-type(n+2)</pre>
+ <p>In this case, one could also use <code>:not()</code>, although the
+ selector ends up being just as long:</p>
+ <pre>body &gt; h2:not(:first-of-type):not(:last-of-type)</pre>
+</div>
+
+
+<h5><a name=first-child-pseudo>:first-child pseudo-class</a></h5>
+
+<p>Same as <code>:nth-child(1)</code>. The <code>:first-child</code> pseudo-class
+represents an element that is the first child of some other element.
+
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element that is
+ the first child of a <code>div</code> element:</p>
+ <pre>div &gt; p:first-child</pre>
+ <p>This selector can represent the <code>p</code> inside the
+ <code>div</code> of the following fragment:</p>
+ <pre>&lt;p&gt; The last P before the note.&lt;/p&gt;
+&lt;div class="note"&gt;
+ &lt;p&gt; The first P inside the note.&lt;/p&gt;
+&lt;/div&gt;</pre>but cannot represent the second <code>p</code> in the following
+fragment:
+ <pre>&lt;p&gt; The last P before the note.&lt;/p&gt;
+&lt;div class="note"&gt;
+ &lt;h2&gt; Note &lt;/h2&gt;
+ &lt;p&gt; The first P inside the note.&lt;/p&gt;
+&lt;/div&gt;</pre>
+ <p>The following two selectors are usually equivalent:</p>
+ <pre>* &gt; a:first-child /* a is first child of any element */
+a:first-child /* Same (assuming a is not the root element) */</pre>
+</div>
+
+<h5><a name=last-child-pseudo>:last-child pseudo-class</a></h5>
+
+<p>Same as <code>:nth-last-child(1)</code>. The <code>:last-child</code> pseudo-class
+represents an element that is the last child of some other element.
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents a list item <code>li</code> that
+ is the last child of an ordered list <code>ol</code>.
+ <pre>ol &gt; li:last-child</pre>
+</div>
+
+<h5><a name=first-of-type-pseudo>:first-of-type pseudo-class</a></h5>
+
+<p>Same as <code>:nth-of-type(1)</code>. The <code>:first-of-type</code> pseudo-class
+represents an element that is the first sibling of its type in the list of
+children of its parent element.
+
+<div class="example">
+<p>Example:</p>
+<p>The following selector represents a definition title
+<code>dt</code> inside a definition list <code>dl</code>, this
+<code>dt</code> being the first of its type in the list of children of
+its parent element.</p>
+<pre>dl dt:first-of-type</pre>
+<p>It is a valid description for the first two <code>dt</code>
+elements in the following example but not for the third one:</p>
+<pre>&lt;dl&gt;
+ &lt;dt&gt;gigogne&lt;/dt&gt;
+ &lt;dd&gt;
+ &lt;dl&gt;
+ &lt;dt&gt;fus&eacute;e&lt;/dt&gt;
+ &lt;dd&gt;multistage rocket&lt;/dd&gt;
+ &lt;dt&gt;table&lt;/dt&gt;
+ &lt;dd&gt;nest of tables&lt;/dd&gt;
+ &lt;/dl&gt;
+ &lt;/dd&gt;
+&lt;/dl&gt;</pre>
+</div>
+
+<h5><a name=last-of-type-pseudo>:last-of-type pseudo-class</a></h5>
+
+<p>Same as <code>:nth-last-of-type(1)</code>. The
+<code>:last-of-type</code> pseudo-class represents an element that is
+the last sibling of its type in the list of children of its parent
+element.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents the last data cell
+ <code>td</code> of a table row.</p>
+ <pre>tr &gt; td:last-of-type</pre>
+</div>
+
+<h5><a name=only-child-pseudo>:only-child pseudo-class</a></h5>
+
+<p>Represents an element that has a parent element and whose parent
+element has no other element children. Same as
+<code>:first-child:last-child</code> or
+<code>:nth-child(1):nth-last-child(1)</code>, but with a lower
+specificity.</p>
+
+<h5><a name=only-of-type-pseudo>:only-of-type pseudo-class</a></h5>
+
+<p>Represents an element that has a parent element and whose parent
+element has no other element children with the same element name. Same
+as <code>:first-of-type:last-of-type</code> or
+<code>:nth-of-type(1):nth-last-of-type(1)</code>, but with a lower
+specificity.</p>
+
+
+<h5><a name=empty-pseudo></a>:empty pseudo-class</h5>
+
+<p>The <code>:empty</code> pseudo-class represents an element that has
+no children at all. In terms of the DOM, only element nodes and text
+nodes (including CDATA nodes and entity references) whose data has a
+non-zero length must be considered as affecting emptiness; comments,
+PIs, and other nodes must not affect whether an element is considered
+empty or not.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p><code>p:empty</code> is a valid representation of the following fragment:</p>
+ <pre>&lt;p&gt;&lt;/p&gt;</pre>
+ <p><code>foo:empty</code> is not a valid representation for the
+ following fragments:</p>
+ <pre>&lt;foo&gt;bar&lt;/foo&gt;</pre>
+ <pre>&lt;foo&gt;&lt;bar&gt;bla&lt;/bar&gt;&lt;/foo&gt;</pre>
+ <pre>&lt;foo&gt;this is not &lt;bar&gt;:empty&lt;/bar&gt;&lt;/foo&gt;</pre>
+</div>
+
+<h4><a name=content-selectors>6.6.6. Blank</a></h4> <!-- It's the Return of Appendix H!!! Run away! -->
+
+<p>This section intentionally left blank.</p>
+<!-- (used to be :contains()) -->
+
+<h4><a name=negation></a>6.6.7. The negation pseudo-class</h4>
+
+<p>The negation pseudo-class, <code>:not(<var>X</var>)</code>, is a
+functional notation taking a <a href="#simple-selectors-dfn">simple
+selector</a> (excluding the negation pseudo-class itself and
+pseudo-elements) as an argument. It represents an element that is not
+represented by the argument.
+
+<!-- pseudo-elements are not simple selectors, so the above paragraph
+may be a bit confusing -->
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following CSS selector matches all <code>button</code>
+ elements in an HTML document that are not disabled.</p>
+ <pre>button:not([DISABLED])</pre>
+ <p>The following selector represents all but <code>FOO</code>
+ elements.</p>
+ <pre>*:not(FOO)</pre>
+ <p>The following group of selectors represents all HTML elements
+ except links.</p>
+ <pre>html|*:not(:link):not(:visited)</pre>
+</div>
+
+<p>Default namespace declarations do not affect the argument of the
+negation pseudo-class unless the argument is a universal selector or a
+type selector.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>Assuming that the default namespace is bound to
+ "http://example.com/", the following selector represents all
+ elements that are not in that namespace:</p>
+ <pre>*|*:not(*)</pre>
+ <p>The following CSS selector matches any element being hovered,
+ regardless of its namespace. In particular, it is not limited to
+ only matching elements in the default namespace that are not being
+ hovered, and elements not in the default namespace don't match the
+ rule when they <em>are</em> being hovered.</p>
+ <pre>*|*:not(:hover)</pre>
+</div>
+
+<p class="note"><strong>Note</strong>: the :not() pseudo allows
+useless selectors to be written. For instance <code>:not(*|*)</code>,
+which represents no element at all, or <code>foo:not(bar)</code>,
+which is equivalent to <code>foo</code> but with a higher
+specificity.</p>
+
+<h3><a name=pseudo-elements>7. Pseudo-elements</a></h3>
+
+<p>Pseudo-elements create abstractions about the document tree beyond
+those specified by the document language. For instance, document
+languages do not offer mechanisms to access the first letter or first
+line of an element's content. Pseudo-elements allow designers to refer
+to this otherwise inaccessible information. Pseudo-elements may also
+provide designers a way to refer to content that does not exist in the
+source document (e.g., the <code>::before</code> and
+<code>::after</code> pseudo-elements give access to generated
+content).</p>
+
+<p>A pseudo-element is made of two colons (<code>::</code>) followed
+by the name of the pseudo-element.</p>
+
+<p>This <code>::</code> notation is introduced by the current document
+in order to establish a discrimination between pseudo-classes and
+pseudo-elements. For compatibility with existing style sheets, user
+agents must also accept the previous one-colon notation for
+pseudo-elements introduced in CSS levels 1 and 2 (namely,
+<code>:first-line</code>, <code>:first-letter</code>,
+<code>:before</code> and <code>:after</code>). This compatibility is
+not allowed for the new pseudo-elements introduced in CSS level 3.</p>
+
+<p>Only one pseudo-element may appear per selector, and if present it
+must appear after the sequence of simple selectors that represents the
+<a href="#subject">subjects</a> of the selector. <span class="note">A
+future version of this specification may allow multiple
+pesudo-elements per selector.</span></p>
+
+<h4><a name=first-line>7.1. The ::first-line pseudo-element</a></h4>
+
+<p>The <code>::first-line</code> pseudo-element describes the contents
+of the first formatted line of an element.
+
+<div class="example">
+<p>CSS example:</p>
+<pre>p::first-line { text-transform: uppercase }</pre>
+<p>The above rule means "change the letters of the first line of every
+paragraph to uppercase".</p>
+</div>
+
+<p>The selector <code>p::first-line</code> does not match any real
+HTML element. It does match a pseudo-element that conforming user
+agents will insert at the beginning of every paragraph.</p>
+
+<p>Note that the length of the first line depends on a number of
+factors, including the width of the page, the font size, etc. Thus,
+an ordinary HTML paragraph such as:</p>
+
+<pre>
+&lt;P&gt;This is a somewhat long HTML
+paragraph that will be broken into several
+lines. The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>the lines of which happen to be broken as follows:
+
+<pre>
+THIS IS A SOMEWHAT LONG HTML PARAGRAPH THAT
+will be broken into several lines. The first
+line will be identified by a fictional tag
+sequence. The other lines will be treated as
+ordinary lines in the paragraph.
+</pre>
+
+<p>This paragraph might be "rewritten" by user agents to include the
+<em>fictional tag sequence</em> for <code>::first-line</code>. This
+fictional tag sequence helps to show how properties are inherited.</p>
+
+<pre>
+&lt;P&gt;<b>&lt;P::first-line&gt;</b> This is a somewhat long HTML
+paragraph that <b>&lt;/P::first-line&gt;</b> will be broken into several
+lines. The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>If a pseudo-element breaks up a real element, the desired effect
+can often be described by a fictional tag sequence that closes and
+then re-opens the element. Thus, if we mark up the previous paragraph
+with a <code>span</code> element:</p>
+
+<pre>
+&lt;P&gt;<b>&lt;SPAN class="test"&gt;</b> This is a somewhat long HTML
+paragraph that will be broken into several
+lines.<b>&lt;/SPAN&gt;</b> The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>the user agent could simulate start and end tags for
+<code>span</code> when inserting the fictional tag sequence for
+<code>::first-line</code>.
+
+<pre>
+&lt;P&gt;&lt;P::first-line&gt;<b>&lt;SPAN class="test"&gt;</b> This is a
+somewhat long HTML
+paragraph that will <b>&lt;/SPAN&gt;</b>&lt;/P::first-line&gt;<b>&lt;SPAN class="test"&gt;</b> be
+broken into several
+lines.<b>&lt;/SPAN&gt;</b> The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>In CSS, the <code>::first-line</code> pseudo-element can only be
+attached to a block-level element, an inline-block, a table-caption,
+or a table-cell.</p>
+
+<p><a name="first-formatted-line"></a>The "first formatted line" of an
+element may occur inside a
+block-level descendant in the same flow (i.e., a block-level
+descendant that is not positioned and not a float). E.g., the first
+line of the <code>div</code> in <code>&lt;DIV>&lt;P>This
+line...&lt;/P>&lt/DIV></code> is the first line of the <code>p</code> (assuming
+that both <code>p</code> and <code>div</code> are block-level).
+
+<p>The first line of a table-cell or inline-block cannot be the first
+formatted line of an ancestor element. Thus, in <code>&lt;DIV&gt;&lt;P
+STYLE="display: inline-block">Hello&lt;BR&gt;Goodbye&lt;/P&gt;
+etcetera&lt;/DIV&gt;</code> the first formatted line of the
+<code>div</code> is not the line "Hello".
+
+<p class="note">Note that the first line of the <code>p</code> in this
+fragment: <code>&lt;p&gt&lt;br&gt;First...</code> doesn't contain any
+letters (assuming the default style for <code>br</code> in HTML
+4). The word "First" is not on the first formatted line.
+
+<p>A UA should act as if the fictional start tags of the
+<code>::first-line</code> pseudo-elements were nested just inside the
+innermost enclosing block-level element. (Since CSS1 and CSS2 were
+silent on this case, authors should not rely on this behavior.) Here
+is an example. The fictional tag sequence for</p>
+
+<pre>
+&lt;DIV>
+ &lt;P>First paragraph&lt;/P>
+ &lt;P>Second paragraph&lt;/P>
+&lt;/DIV>
+</pre>
+
+<p>is</p>
+
+<pre>
+&lt;DIV>
+ &lt;P>&lt;DIV::first-line>&lt;P::first-line>First paragraph&lt;/P::first-line>&lt;/DIV::first-line>&lt;/P>
+ &lt;P>&lt;P::first-line>Second paragraph&lt;/P::first-line>&lt;/P>
+&lt;/DIV>
+</pre>
+
+<p>The <code>::first-line</code> pseudo-element is similar to an
+inline-level element, but with certain restrictions. In CSS, the
+following properties apply to a <code>::first-line</code>
+pseudo-element: font properties, color property, background
+properties, 'word-spacing', 'letter-spacing', 'text-decoration',
+'vertical-align', 'text-transform', 'line-height'. UAs may apply other
+properties as well.</p>
+
+
+<h4><a name=first-letter>7.2. The ::first-letter pseudo-element</a></h4>
+
+<p>The <code>::first-letter</code> pseudo-element represents the first
+letter of the first line of a block, if it is not preceded by any
+other content (such as images or inline tables) on its line. The
+::first-letter pseudo-element may be used for "initial caps" and "drop
+caps", which are common typographical effects. This type of initial
+letter is similar to an inline-level element if its 'float' property
+is 'none'; otherwise, it is similar to a floated element.</p>
+
+<p>In CSS, these are the properties that apply to <code>::first-letter</code>
+pseudo-elements: font properties, 'text-decoration', 'text-transform',
+'letter-spacing', 'word-spacing' (when appropriate), 'line-height',
+'float', 'vertical-align' (only if 'float' is 'none'), margin
+properties, padding properties, border properties, color property,
+background properties. UAs may apply other properties as well. To
+allow UAs to render a typographically correct drop cap or initial cap,
+the UA may choose a line-height, width and height based on the shape
+of the letter, unlike for normal elements.</p>
+
+<div class="example">
+<p>Example:</p>
+<p>This example shows a possible rendering of an initial cap. Note
+that the 'line-height' that is inherited by the <code>::first-letter</code>
+pseudo-element is 1.1, but the UA in this example has computed the
+height of the first letter differently, so that it doesn't cause any
+unnecessary space between the first two lines. Also note that the
+fictional start tag of the first letter is inside the <span>span</span>, and thus
+the font weight of the first letter is normal, not bold as the <span>span</span>:
+<pre>
+p { line-height: 1.1 }
+p::first-letter { font-size: 3em; font-weight: normal }
+span { font-weight: bold }
+...
+&lt;p>&lt;span>Het hemelsche&lt;/span> gerecht heeft zich ten lange lesten&lt;br>
+Erbarremt over my en mijn benaeuwde vesten&lt;br>
+En arme burgery, en op mijn volcx gebed&lt;br>
+En dagelix geschrey de bange stad ontzet.
+</pre>
+<div class="figure">
+<p><img src="initial-cap.png" alt="Image illustrating the ::first-letter pseudo-element">
+</div>
+</div>
+
+<div class="example">
+<p>The following CSS will make a drop cap initial letter span about two lines:</p>
+
+<pre>
+&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"&gt;
+&lt;HTML&gt;
+ &lt;HEAD&gt;
+ &lt;TITLE&gt;Drop cap initial letter&lt;/TITLE&gt;
+ &lt;STYLE type="text/css"&gt;
+ P { font-size: 12pt; line-height: 1.2 }
+ P::first-letter { font-size: 200%; font-weight: bold; float: left }
+ SPAN { text-transform: uppercase }
+ &lt;/STYLE&gt;
+ &lt;/HEAD&gt;
+ &lt;BODY&gt;
+ &lt;P&gt;&lt;SPAN&gt;The first&lt;/SPAN&gt; few words of an article
+ in The Economist.&lt;/P&gt;
+ &lt;/BODY&gt;
+&lt;/HTML&gt;
+</pre>
+
+<p>This example might be formatted as follows:</p>
+
+<div class="figure">
+<P><img src="first-letter.gif" alt="Image illustrating the combined effect of the ::first-letter and ::first-line pseudo-elements"></p>
+</div>
+
+<p>The <span class="index-inst" title="fictional tag
+sequence">fictional tag sequence</span> is:</p>
+
+<pre>
+&lt;P&gt;
+&lt;SPAN&gt;
+&lt;P::first-letter&gt;
+T
+&lt;/P::first-letter&gt;he first
+&lt;/SPAN&gt;
+few words of an article in the Economist.
+&lt;/P&gt;
+</pre>
+
+<p>Note that the <code>::first-letter</code> pseudo-element tags abut
+the content (i.e., the initial character), while the ::first-line
+pseudo-element start tag is inserted right after the start tag of the
+block element.</p> </div>
+
+<p>In order to achieve traditional drop caps formatting, user agents
+may approximate font sizes, for example to align baselines. Also, the
+glyph outline may be taken into account when formatting.</p>
+
+<p>Punctuation (i.e, characters defined in Unicode in the "open" (Ps),
+"close" (Pe), "initial" (Pi). "final" (Pf) and "other" (Po)
+punctuation classes), that precedes or follows the first letter should
+be included. <a href="#refsUNICODE">[UNICODE]</a></p>
+
+<div class="figure">
+<P><img src="first-letter2.gif" alt="Quotes that precede the
+first letter should be included."></p>
+</div>
+
+<p>The <code>::first-letter</code> also applies if the first letter is
+in fact a digit, e.g., the "6" in "67 million dollars is a lot of
+money."</p>
+
+<p>In CSS, the <code>::first-letter</code> pseudo-element applies to
+block, list-item, table-cell, table-caption, and inline-block
+elements. <span class="note">A future version of this specification
+may allow this pesudo-element to apply to more element
+types.</span></p>
+
+<p>The <code>::first-letter</code> pseudo-element can be used with all
+such elements that contain text, or that have a descendant in the same
+flow that contains text. A UA should act as if the fictional start tag
+of the ::first-letter pseudo-element is just before the first text of
+the element, even if that first text is in a descendant.</p>
+
+<div class="example">
+<p>Example:</p>
+<p>The fictional tag sequence for this HTMLfragment:
+<pre>&lt;div>
+&lt;p>The first text.</pre>
+<p>is:
+<pre>&lt;div>
+&lt;p>&lt;div::first-letter>&lt;p::first-letter>T&lt;/...>&lt;/...>he first text.</pre>
+</div>
+
+<p>The first letter of a table-cell or inline-block cannot be the
+first letter of an ancestor element. Thus, in <code>&lt;DIV&gt;&lt;P
+STYLE="display: inline-block">Hello&lt;BR&gt;Goodbye&lt;/P&gt;
+etcetera&lt;/DIV&gt;</code> the first letter of the <code>div</code> is not the
+letter "H". In fact, the <code>div</code> doesn't have a first letter.
+
+<p>The first letter must occur on the <a
+href="#first-formatted-line">first formatted line.</a> For example, in
+this fragment: <code>&lt;p&gt&lt;br&gt;First...</code> the first line
+doesn't contain any letters and <code>::first-letter</code> doesn't
+match anything (assuming the default style for <code>br</code> in HTML
+4). In particular, it does not match the "F" of "First."
+
+<p>In CSS, if an element is a list item ('display: list-item'), the
+<code>::first-letter</code> applies to the first letter in the
+principal box after the marker. UAs may ignore
+<code>::first-letter</code> on list items with 'list-style-position:
+inside'. If an element has <code>::before</code> or
+<code>::after</code> content, the <code>::first-letter</code> applies
+to the first letter of the element <em>including</em> that content.
+
+<div class="example">
+<p>Example:</p>
+<p>After the rule 'p::before {content: "Note: "}', the selector
+'p::first-letter' matches the "N" of "Note".</p>
+</div>
+
+<p>Some languages may have specific rules about how to treat certain
+letter combinations. In Dutch, for example, if the letter combination
+"ij" appears at the beginning of a word, both letters should be
+considered within the <code>::first-letter</code> pseudo-element.
+
+<p>If the letters that would form the ::first-letter are not in the
+same element, such as "'T" in <code>&lt;p>'&lt;em>T...</code>, the UA
+may create a ::first-letter pseudo-element from one of the elements,
+both elements, or simply not create a pseudo-element.</p>
+
+<p>Similarly, if the first letter(s) of the block are not at the start
+of the line (for example due to bidirectional reordering), then the UA
+need not create the pseudo-element(s).
+
+<div class="example">
+<p>Example:</p>
+<p><a name="overlapping-example">The following example</a> illustrates
+how overlapping pseudo-elements may interact. The first letter of
+each P element will be green with a font size of '24pt'. The rest of
+the first formatted line will be 'blue' while the rest of the
+paragraph will be 'red'.</p>
+
+<pre>p { color: red; font-size: 12pt }
+p::first-letter { color: green; font-size: 200% }
+p::first-line { color: blue }
+
+&lt;P&gt;Some text that ends up on two lines&lt;/P&gt;</pre>
+
+<p>Assuming that a line break will occur before the word "ends", the
+<span class="index-inst" title="fictional tag sequence">fictional tag
+sequence</span> for this fragment might be:</p>
+
+<pre>&lt;P&gt;
+&lt;P::first-line&gt;
+&lt;P::first-letter&gt;
+S
+&lt;/P::first-letter&gt;ome text that
+&lt;/P::first-line&gt;
+ends up on two lines
+&lt;/P&gt;</pre>
+
+<p>Note that the <code>::first-letter</code> element is inside the <code>::first-line</code>
+element. Properties set on <code>::first-line</code> are inherited by
+<code>::first-letter</code>, but are overridden if the same property is set on
+<code>::first-letter</code>.</p>
+</div>
+
+
+<h4><a name=UIfragments>7.3.</a> <a name=selection>The ::selection pseudo-element</a></h4>
+
+<p>The <code>::selection</code> pseudo-element applies to the portion
+of a document that has been highlighted by the user. This also
+applies, for example, to selected text within an editable text
+field. This pseudo-element should not be confused with the <code><a
+href="#checked">:checked</a></code> pseudo-class (which used to be
+named <code>:selected</code>)
+
+<p>Although the <code>::selection</code> pseudo-element is dynamic in
+nature, and is altered by user action, it is reasonable to expect that
+when a UA re-renders to a static medium (such as a printed page, see
+<a href="#refsCSS21">[CSS21]</a>) which was originally rendered to a
+dynamic medium (like screen), the UA may wish to transfer the current
+<code>::selection</code> state to that other medium, and have all the
+appropriate formatting and rendering take effect as well. This is not
+required &mdash; UAs may omit the <code>::selection</code>
+pseudo-element for static media.
+
+<p>These are the CSS properties that apply to <code>::selection</code>
+pseudo-elements: color, background, cursor (optional), outline
+(optional). The computed value of the 'background-image' property on
+<code>::selection</code> may be ignored.
+
+
+<h4><a name=gen-content>7.4. The ::before and ::after pseudo-elements</a></h4>
+
+<p>The <code>::before</code> and <code>::after</code> pseudo-elements
+can be used to describe generated content before or after an element's
+content. They are explained in CSS 2.1 <a
+href="#refsCSS21">[CSS21]</a>.</p>
+
+<p>When the <code>::first-letter</code> and <code>::first-line</code>
+pseudo-elements are combined with <code>::before</code> and
+<code>::after</code>, they apply to the first letter or line of the
+element including the inserted text.</p>
+
+<h2><a name=combinators>8. Combinators</a></h2>
+
+<h3><a name=descendant-combinators>8.1. Descendant combinator</a></h3>
+
+<p>At times, authors may want selectors to describe an element that is
+the descendant of another element in the document tree (e.g., "an
+<code>EM</code> element that is contained within an <code>H1</code>
+element"). Descendant combinators express such a relationship. A
+descendant combinator is <a href="#whitespace">white space</a> that
+separates two sequences of simple selectors. A selector of the form
+"<code>A B</code>" represents an element <code>B</code> that is an
+arbitrary descendant of some ancestor element <code>A</code>.
+
+<div class="example">
+ <p>Examples:</p>
+ <p>For example, consider the following selector:</p>
+ <pre>h1 em</pre>
+ <p>It represents an <code>em</code> element being the descendant of
+ an <code>h1</code> element. It is a correct and valid, but partial,
+ description of the following fragment:</p>
+ <pre>&lt;h1&gt;This &lt;span class="myclass"&gt;headline
+is &lt;em&gt;very&lt;/em&gt; important&lt;/span&gt;&lt;/h1&gt;</pre>
+ <p>The following selector:</p>
+ <pre>div * p</pre>
+ <p>represents a <code>p</code> element that is a grandchild or later
+ descendant of a <code>div</code> element. Note the whitespace on
+ either side of the "*" is not part of the universal selector; the
+ whitespace is a combinator indicating that the DIV must be the
+ ancestor of some element, and that that element must be an ancestor
+ of the P.</p>
+ <p>The following selector, which combines descendant combinators and
+ <a href="#attribute-selectors">attribute selectors</a>, represents an
+ element that (1) has the <code>href</code> attribute set and (2) is
+ inside a <code>p</code> that is itself inside a <code>div</code>:</p>
+ <pre>div p *[href]</pre>
+</div>
+
+<h3><a name=child-combinators>8.2. Child combinators</a></h3>
+
+<p>A <dfn>child combinator</dfn> describes a childhood relationship
+between two elements. A child combinator is made of the
+&quot;greater-than sign&quot; (<code>&gt;</code>) character and
+separates two sequences of simple selectors.
+
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element that is
+ child of <code>body</code>:</p>
+ <pre>body &gt; p</pre>
+ <p>The following example combines descendant combinators and child
+ combinators.</p>
+ <pre>div ol&gt;li p</pre><!-- LEAVE THOSE SPACES OUT! see below -->
+ <p>It represents a <code>p</code> element that is a descendant of an
+ <code>li</code> element; the <code>li</code> element must be the
+ child of an <code>ol</code> element; the <code>ol</code> element must
+ be a descendant of a <code>div</code>. Notice that the optional white
+ space around the "&gt;" combinator has been left out.</p>
+</div>
+
+<p>For information on selecting the first child of an element, please
+see the section on the <code><a
+href="#structural-pseudos">:first-child</a></code> pseudo-class
+above.</p>
+
+<h3><a name=sibling-combinators>8.3. Sibling combinators</a></h3>
+
+<p>There are two different sibling combinators: the adjacent sibling
+combinator and the general sibling combinator. In both cases,
+non-element nodes (e.g. text between elements) are ignored when
+considering adjacency of elements.</p>
+
+<h4><a name=adjacent-sibling-combinators>8.3.1. Adjacent sibling combinator</a></h4>
+
+<p>The adjacent sibling combinator is made of the &quot;plus
+sign&quot; (U+002B, <code>+</code>) character that separates two
+sequences of simple selectors. The elements represented by the two
+sequences share the same parent in the document tree and the element
+represented by the first sequence immediately precedes the element
+represented by the second one.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element
+ immediately following a <code>math</code> element:</p>
+ <pre>math + p</pre>
+ <p>The following selector is conceptually similar to the one in the
+ previous example, except that it adds an attribute selector &mdash; it
+ adds a constraint to the <code>h1</code> element, that it must have
+ <code>class="opener"</code>:</p>
+ <pre>h1.opener + h2</pre>
+</div>
+
+
+<h4><a name=general-sibling-combinators>8.3.2. General sibling combinator</a></h4>
+
+<p>The general sibling combinator is made of the &quot;tilde&quot;
+(U+007E, <code>~</code>) character that separates two sequences of
+simple selectors. The elements represented by the two sequences share
+the same parent in the document tree and the element represented by
+the first sequence precedes (not necessarily immediately) the element
+represented by the second one.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <pre>h1 ~ pre</pre>
+ <p>represents a <code>pre</code> element following an <code>h1</code>. It
+ is a correct and valid, but partial, description of:</p>
+ <pre>&lt;h1&gt;Definition of the function a&lt;/h1&gt;
+&lt;p&gt;Function a(x) has to be applied to all figures in the table.&lt;/p&gt;
+&lt;pre&gt;function a(x) = 12x/13.5&lt;/pre&gt;</pre>
+</div>
+
+<h2><a name=specificity>9. Calculating a selector's specificity</a></h2>
+
+<p>A selector's specificity is calculated as follows:</p>
+
+<ul>
+ <li>count the number of ID selectors in the selector (= a)</li>
+ <li>count the number of class selectors, attributes selectors, and pseudo-classes in the selector (= b)</li>
+ <li>count the number of element names in the selector (= c)</li>
+ <li>ignore pseudo-elements</li>
+</ul>
+
+<p>Selectors inside <a href="#negation">the negation pseudo-class</a>
+are counted like any other, but the negation itself does not count as
+a pseudo-class.</p>
+
+<p>Concatenating the three numbers a-b-c (in a number system with a
+large base) gives the specificity.</p>
+
+<div class="example">
+<p>Examples:</p>
+<pre>* /* a=0 b=0 c=0 -&gt; specificity = 0 */
+LI /* a=0 b=0 c=1 -&gt; specificity = 1 */
+UL LI /* a=0 b=0 c=2 -&gt; specificity = 2 */
+UL OL+LI /* a=0 b=0 c=3 -&gt; specificity = 3 */
+H1 + *[REL=up] /* a=0 b=1 c=1 -&gt; specificity = 11 */
+UL OL LI.red /* a=0 b=1 c=3 -&gt; specificity = 13 */
+LI.red.level /* a=0 b=2 c=1 -&gt; specificity = 21 */
+#x34y /* a=1 b=0 c=0 -&gt; specificity = 100 */
+#s12:not(FOO) /* a=1 b=0 c=1 -&gt; specificity = 101 */
+</pre>
+</div>
+
+<p class="note"><strong>Note:</strong> the specificity of the styles
+specified in an HTML <code>style</code> attribute is described in CSS
+2.1. <a href="#refsCSS21">[CSS21]</a>.</p>
+
+<h2><a name=w3cselgrammar>10. The grammar of Selectors</a></h2>
+
+<h3><a name=grammar>10.1. Grammar</a></h3>
+
+<p>The grammar below defines the syntax of Selectors. It is globally
+LL(1) and can be locally LL(2) (but note that most UA's should not use
+it directly, since it doesn't express the parsing conventions). The
+format of the productions is optimized for human consumption and some
+shorthand notations beyond Yacc (see <a href="#refsYACC">[YACC]</a>)
+are used:</p>
+
+<ul>
+ <li><b>*</b>: 0 or more
+ <li><b>+</b>: 1 or more
+ <li><b>?</b>: 0 or 1
+ <li><b>|</b>: separates alternatives
+ <li><b>[ ]</b>: grouping </li>
+</ul>
+
+<p>The productions are:</p>
+
+<pre>selectors_group
+ : selector [ COMMA S* selector ]*
+ ;
+
+selector
+ : simple_selector_sequence [ combinator simple_selector_sequence ]*
+ ;
+
+combinator
+ /* combinators can be surrounded by white space */
+ : PLUS S* | GREATER S* | TILDE S* | S+
+ ;
+
+simple_selector_sequence
+ : [ type_selector | universal ]
+ [ HASH | class | attrib | pseudo | negation ]*
+ | [ HASH | class | attrib | pseudo | negation ]+
+ ;
+
+type_selector
+ : [ namespace_prefix ]? element_name
+ ;
+
+namespace_prefix
+ : [ IDENT | '*' ]? '|'
+ ;
+
+element_name
+ : IDENT
+ ;
+
+universal
+ : [ namespace_prefix ]? '*'
+ ;
+
+class
+ : '.' IDENT
+ ;
+
+attrib
+ : '[' S* [ namespace_prefix ]? IDENT S*
+ [ [ PREFIXMATCH |
+ SUFFIXMATCH |
+ SUBSTRINGMATCH |
+ '=' |
+ INCLUDES |
+ DASHMATCH ] S* [ IDENT | STRING ] S*
+ ]? ']'
+ ;
+
+pseudo
+ /* '::' starts a pseudo-element, ':' a pseudo-class */
+ /* Exceptions: :first-line, :first-letter, :before and :after. */
+ /* Note that pseudo-elements are restricted to one per selector and */
+ /* occur only in the last simple_selector_sequence. */
+ : ':' ':'? [ IDENT | functional_pseudo ]
+ ;
+
+functional_pseudo
+ : FUNCTION S* expression ')'
+ ;
+
+expression
+ /* In CSS3, the expressions are identifiers, strings, */
+ /* or of the form "an+b" */
+ : [ [ PLUS | '-' | DIMENSION | NUMBER | STRING | IDENT ] S* ]+
+ ;
+
+negation
+ : NOT S* negation_arg S* ')'
+ ;
+
+negation_arg
+ : type_selector | universal | HASH | class | attrib | pseudo
+ ;</pre>
+
+
+<h3><a name=lex>10.2. Lexical scanner</a></h3>
+
+<p>The following is the <a name=x3>tokenizer</a>, written in Flex (see
+<a href="#refsFLEX">[FLEX]</a>) notation. The tokenizer is
+case-insensitive.</p>
+
+<p>The two occurrences of "\377" represent the highest character
+number that current versions of Flex can deal with (decimal 255). They
+should be read as "\4177777" (decimal 1114111), which is the highest
+possible code point in Unicode/ISO-10646. <a
+href="#refsUNICODE">[UNICODE]</a></p>
+
+<pre>%option case-insensitive
+
+ident [-]?{nmstart}{nmchar}*
+name {nmchar}+
+nmstart [_a-z]|{nonascii}|{escape}
+nonascii [^\0-\177]
+unicode \\[0-9a-f]{1,6}(\r\n|[ \n\r\t\f])?
+escape {unicode}|\\[^\n\r\f0-9a-f]
+nmchar [_a-z0-9-]|{nonascii}|{escape}
+num [0-9]+|[0-9]*\.[0-9]+
+string {string1}|{string2}
+string1 \"([^\n\r\f\\"]|\\{nl}|{nonascii}|{escape})*\"
+string2 \'([^\n\r\f\\']|\\{nl}|{nonascii}|{escape})*\'
+invalid {invalid1}|{invalid2}
+invalid1 \"([^\n\r\f\\"]|\\{nl}|{nonascii}|{escape})*
+invalid2 \'([^\n\r\f\\']|\\{nl}|{nonascii}|{escape})*
+nl \n|\r\n|\r|\f
+w [ \t\r\n\f]*
+
+%%
+
+[ \t\r\n\f]+ return S;
+
+"~=" return INCLUDES;
+"|=" return DASHMATCH;
+"^=" return PREFIXMATCH;
+"$=" return SUFFIXMATCH;
+"*=" return SUBSTRINGMATCH;
+{ident} return IDENT;
+{string} return STRING;
+{ident}"(" return FUNCTION;
+{num} return NUMBER;
+"#"{name} return HASH;
+{w}"+" return PLUS;
+{w}"&gt;" return GREATER;
+{w}"," return COMMA;
+{w}"~" return TILDE;
+":not(" return NOT;
+@{ident} return ATKEYWORD;
+{invalid} return INVALID;
+{num}% return PERCENTAGE;
+{num}{ident} return DIMENSION;
+"&lt;!--" return CDO;
+"--&gt;" return CDC;
+
+"url("{w}{string}{w}")" return URI;
+"url("{w}([!#$%&*-~]|{nonascii}|{escape})*{w}")" return URI;
+U\+[0-9a-f?]{1,6}(-[0-9a-f]{1,6})? return UNICODE_RANGE;
+
+\/\*[^*]*\*+([^/*][^*]*\*+)*\/ /* ignore comments */
+
+. return *yytext;</pre>
+
+
+
+<h2><a name=downlevel>11. Namespaces and down-level clients</a></h2>
+
+<p>An important issue is the interaction of CSS selectors with XML
+documents in web clients that were produced prior to this
+document. Unfortunately, due to the fact that namespaces must be
+matched based on the URI which identifies the namespace, not the
+namespace prefix, some mechanism is required to identify namespaces in
+CSS by their URI as well. Without such a mechanism, it is impossible
+to construct a CSS style sheet which will properly match selectors in
+all cases against a random set of XML documents. However, given
+complete knowledge of the XML document to which a style sheet is to be
+applied, and a limited use of namespaces within the XML document, it
+is possible to construct a style sheet in which selectors would match
+elements and attributes correctly.</p>
+
+<p>It should be noted that a down-level CSS client will (if it
+properly conforms to CSS forward compatible parsing rules) ignore all
+<code>@namespace</code> at-rules, as well as all style rules that make
+use of namespace qualified element type or attribute selectors. The
+syntax of delimiting namespace prefixes in CSS was deliberately chosen
+so that down-level CSS clients would ignore the style rules rather
+than possibly match them incorrectly.</p>
+
+<p>The use of default namespaces in CSS makes it possible to write
+element type selectors that will function in both namespace aware CSS
+clients as well as down-level clients. It should be noted that
+down-level clients may incorrectly match selectors against XML
+elements in other namespaces.</p>
+
+<p>The following are scenarios and examples in which it is possible to
+construct style sheets which would function properly in web clients
+that do not implement this proposal.</p>
+
+<ol>
+ <li>
+
+ <p>The XML document does not use namespaces.</p>
+
+ <ul>
+
+ <li>In this case, it is obviously not necessary to declare or use
+ namespaces in the style sheet. Standard CSS element type and
+ attribute selectors will function adequately in a down-level
+ client.</li>
+
+ <li>In a CSS namespace aware client, the default behavior of
+ element selectors matching without regard to namespace will
+ function properly against all elements, since no namespaces are
+ present. However, the use of specific element type selectors that
+ match only elements that have no namespace ("<code>|name</code>")
+ will guarantee that selectors will match only XML elements that do
+ not have a declared namespace. </li>
+
+ </ul>
+
+ </li>
+
+ <li>
+
+ <p>The XML document defines a single, default namespace used
+ throughout the document. No namespace prefixes are used in element
+ names.</p>
+
+ <ul>
+
+ <li>In this case, a down-level client will function as if
+ namespaces were not used in the XML document at all. Standard CSS
+ element type and attribute selectors will match against all
+ elements. </li>
+
+ </ul>
+
+ </li>
+
+ <li>
+
+ <p>The XML document does <b>not</b> use a default namespace, all
+ namespace prefixes used are known to the style sheet author, and
+ there is a direct mapping between namespace prefixes and namespace
+ URIs. (A given prefix may only be mapped to one namespace URI
+ throughout the XML document; there may be multiple prefixes mapped
+ to the same URI).</p>
+
+ <ul>
+
+ <li>In this case, the down-level client will view and match
+ element type and attribute selectors based on their fully
+ qualified name, not the local part as outlined in the <a
+ href="#typenmsp">Type selectors and Namespaces</a> section. CSS
+ selectors may be declared using an escaped colon "<code>\:</code>"
+ to describe the fully qualified names, e.g.
+ "<code>html\:h1</code>" will match
+ <code>&lt;html:h1&gt;</code>. Selectors using the qualified name
+ will only match XML elements that use the same prefix. Other
+ namespace prefixes used in the XML that are mapped to the same URI
+ will not match as expected unless additional CSS style rules are
+ declared for them.</li>
+
+ <li>Note that selectors declared in this fashion will
+ <em>only</em> match in down-level clients. A CSS namespace aware
+ client will match element type and attribute selectors based on
+ the name's local part. Selectors declared with the fully
+ qualified name will not match (unless there is no namespace prefix
+ in the fully qualified name).</li>
+
+ </ul>
+
+ </li>
+
+ </ol>
+
+<p>In other scenarios: when the namespace prefixes used in the XML are
+not known in advance by the style sheet author; or a combination of
+elements with no namespace are used in conjunction with elements using
+a default namespace; or the same namespace prefix is mapped to
+<em>different</em> namespace URIs within the same document, or in
+different documents; it is impossible to construct a CSS style sheet
+that will function properly against all elements in those documents,
+unless, the style sheet is written using a namespace URI syntax (as
+outlined in this document or similar) and the document is processed by
+a CSS and XML namespace aware client.</p>
+
+<h2><a name=profiling>12. Profiles</a></h2>
+
+<p>Each specification using Selectors must define the subset of W3C
+Selectors it allows and excludes, and describe the local meaning of
+all the components of that subset.</p>
+
+<p>Non normative examples:
+
+<div class="profile">
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>CSS level 1</td></tr>
+ <tr>
+ <th>Accepts</th>
+ <td>type selectors<br>class selectors<br>ID selectors<br>:link,
+ :visited and :active pseudo-classes<br>descendant combinator
+ <br>::first-line and ::first-letter pseudo-elements</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>
+
+<p>universal selector<br>attribute selectors<br>:hover and :focus
+ pseudo-classes<br>:target pseudo-class<br>:lang() pseudo-class<br>all UI
+ element states pseudo-classes<br>all structural
+ pseudo-classes<br>negation pseudo-class<br>all
+ UI element fragments pseudo-elements<br>::before and ::after
+ pseudo-elements<br>child combinators<br>sibling combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>only one class selector allowed per sequence of simple
+ selectors</td></tr></tbody></table><br><br>
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>CSS level 2</td></tr>
+ <tr>
+ <th>Accepts</th>
+ <td>type selectors<br>universal selector<br>attribute presence and
+ values selectors<br>class selectors<br>ID selectors<br>:link, :visited,
+ :active, :hover, :focus, :lang() and :first-child pseudo-classes
+ <br>descendant combinator<br>child combinator<br>adjacent sibling
+ combinator<br>::first-line and ::first-letter pseudo-elements<br>::before
+ and ::after pseudo-elements</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>
+
+<p>content selectors<br>substring matching attribute
+ selectors<br>:target pseudo-classes<br>all UI element
+ states pseudo-classes<br>all structural pseudo-classes other
+ than :first-child<br>negation pseudo-class<br>all UI element
+ fragments pseudo-elements<br>general sibling combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>more than one class selector per sequence of simple selectors (CSS1
+ constraint) allowed</td></tr></tbody></table>
+
+<p>In CSS, selectors express pattern matching rules that determine which style
+rules apply to elements in the document tree.
+
+<p>The following selector (CSS level 2) will <b>match</b> all anchors <code>a</code>
+with attribute <code>name</code> set inside a section 1 header <code>h1</code>:
+<pre>h1 a[name]</pre>
+
+<p>All CSS declarations attached to such a selector are applied to elements
+matching it. </div>
+
+<div class="profile">
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>STTS 3</td>
+ </tr>
+ <tr>
+ <th>Accepts</th>
+ <td>
+
+<p>type selectors<br>universal selectors<br>attribute selectors<br>class
+ selectors<br>ID selectors<br>all structural pseudo-classes<br>
+ all combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>non-accepted pseudo-classes<br>pseudo-elements<br></td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>some selectors and combinators are not allowed in fragment
+ descriptions on the right side of STTS declarations.</td></tr></tbody></table>
+<form>
+<input type="text" name="test10"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+</form>
+
+<p>Selectors can be used in STTS 3 in two different
+ manners:
+<ol>
+ <li>a selection mechanism equivalent to CSS selection mechanism: declarations
+ attached to a given selector are applied to elements matching that selector,
+ <li>fragment descriptions that appear on the right side of declarations.
+</li></ol></div>
+
+<h2><a name=Conformance></a>13. Conformance and requirements</h2>
+
+<p>This section defines conformance with the present specification only.
+
+<p>The inability of a user agent to implement part of this specification due to
+the limitations of a particular device (e.g., non interactive user agents will
+probably not implement dynamic pseudo-classes because they make no sense without
+interactivity) does not imply non-conformance.
+
+<p>All specifications reusing Selectors must contain a <a
+href="#profiling">Profile</a> listing the
+subset of Selectors it accepts or excludes, and describing the constraints
+it adds to the current specification.
+
+<p>Invalidity is caused by a parsing error, e.g. an unrecognized token or a token
+which is not allowed at the current parsing point.
+
+<p>User agents must observe the rules for handling parsing errors:
+<ul>
+ <li>a simple selector containing an undeclared namespace prefix is invalid</li>
+ <li>a selector containing an invalid simple selector, an invalid combinator
+ or an invalid token is invalid. </li>
+ <li>a group of selectors containing an invalid selector is invalid.</li>
+</ul>
+
+<p class="foo test10 bar">Specifications reusing Selectors must define how to handle parsing
+errors. (In the case of CSS, the entire rule in which the selector is
+used is dropped.)</p>
+
+<!-- Apparently all these references are out of date:
+<p>Implementations of this specification must behave as
+"recipients of text data" as defined by <a href="#refsCWWW">[CWWW]</a>
+when parsing selectors and attempting matches. (In particular,
+implementations must assume the data is normalized and must not
+normalize it.) Normative rules for matching strings are defined in
+<a href="#refsCWWW">[CWWW]</a> and <a
+href="#refsUNICODE">[UNICODE]</a> and apply to implementations of this
+specification.</p>-->
+
+<h2><a name=Tests></a>14. Tests</h2>
+
+<p>This specification has <a
+href="http://www.w3.org/Style/CSS/Test/CSS3/Selectors/current/">a test
+suite</a> allowing user agents to verify their basic conformance to
+the specification. This test suite does not pretend to be exhaustive
+and does not cover all possible combined cases of Selectors.</p>
+
+<h2><a name=ACKS></a>15. Acknowledgements</h2>
+
+<p>The CSS working group would like to thank everyone who has sent
+comments on this specification over the years.</p>
+
+<p>The working group would like to extend special thanks to Donna
+McManus, Justin Baker, Joel Sklar, and Molly Ives Brower who perfermed
+the final editorial review.</p>
+
+<h2><a name=references>16. References</a></h2>
+
+<dl class="refs">
+
+ <dt>[CSS1]
+ <dd><a name=refsCSS1></a> Bert Bos, H&aring;kon Wium Lie; "<cite>Cascading Style Sheets, level 1</cite>", W3C Recommendation, 17 Dec 1996, revised 11 Jan 1999
+ <dd>(<code><a href="http://www.w3.org/TR/REC-CSS1">http://www.w3.org/TR/REC-CSS1</a></code>)
+
+ <dt>[CSS21]
+ <dd><a name=refsCSS21></a> Bert Bos, Tantek &Ccedil;elik, Ian Hickson, H&aring;kon Wium Lie, editors; "<cite>Cascading Style Sheets, level 2 revision 1</cite>", W3C Working Draft, 13 June 2005
+ <dd>(<code><a href="http://www.w3.org/TR/CSS21">http://www.w3.org/TR/CSS21</a></code>)
+
+ <dt>[CWWW]
+ <dd><a name=refsCWWW></a> Martin J. D&uuml;rst, Fran&ccedil;ois Yergeau, Misha Wolf, Asmus Freytag, Tex Texin, editors; "<cite>Character Model for the World Wide Web</cite>", W3C Recommendation, 15 February 2005
+ <dd>(<code><a href="http://www.w3.org/TR/charmod/">http://www.w3.org/TR/charmod/</a></code>)
+
+ <dt>[FLEX]
+ <dd><a name="refsFLEX"></a> "<cite>Flex: The Lexical Scanner Generator</cite>", Version 2.3.7, ISBN 1882114213
+
+ <dt>[HTML4]
+ <dd><a name="refsHTML4"></a> Dave Ragget, Arnaud Le Hors, Ian Jacobs, editors; "<cite>HTML 4.01 Specification</cite>", W3C Recommendation, 24 December 1999
+ <dd>(<a href="http://www.w3.org/TR/html4/"><code>http://www.w3.org/TR/html4/</code></a>)
+
+ <dt>[MATH]
+ <dd><a name="refsMATH"></a> Patrick Ion, Robert Miner, editors; "<cite>Mathematical Markup Language (MathML) 1.01</cite>", W3C Recommendation, revision of 7 July 1999
+ <dd>(<code><a href="http://www.w3.org/TR/REC-MathML/">http://www.w3.org/TR/REC-MathML/</a></code>)
+
+ <dt>[RFC3066]
+ <dd><a name="refsRFC3066"></a> H. Alvestrand; "<cite>Tags for the Identification of Languages</cite>", Request for Comments 3066, January 2001
+ <dd>(<a href="http://www.ietf.org/rfc/rfc3066.txt"><code>http://www.ietf.org/rfc/rfc3066.txt</code></a>)
+
+ <dt>[STTS]
+ <dd><a name=refsSTTS></a> Daniel Glazman; "<cite>Simple Tree Transformation Sheets 3</cite>", Electricit&eacute; de France, submission to the W3C, 11 November 1998
+ <dd>(<code><a href="http://www.w3.org/TR/NOTE-STTS3">http://www.w3.org/TR/NOTE-STTS3</a></code>)
+
+ <dt>[SVG]
+ <dd><a name="refsSVG"></a> Jon Ferraiolo, &#34276;&#27810; &#28147;, Dean Jackson, editors; "<cite>Scalable Vector Graphics (SVG) 1.1 Specification</cite>", W3C Recommendation, 14 January 2003
+ <dd>(<code><a href="http://www.w3.org/TR/SVG/">http://www.w3.org/TR/SVG/</a></code>)
+
+ <dt>[UNICODE]</dt>
+ <dd><a name="refsUNICODE"></a> <cite><a
+ href="http://www.unicode.org/versions/Unicode4.1.0/">The Unicode Standard, Version 4.1</a></cite>, The Unicode Consortium. Boston, MA, Addison-Wesley, March 2005. ISBN 0-321-18578-1, as amended by <a href="http://www.unicode.org/versions/Unicode4.0.1/">Unicode 4.0.1</a> and <a href="http://www.unicode.org/versions/Unicode4.1.0/">Unicode 4.1.0</a>.
+ <dd>(<code><a href="http://www.unicode.org/versions/">http://www.unicode.org/versions/</a></code>)</dd>
+
+ <dt>[XML10]
+ <dd><a name="refsXML10"></a> Tim Bray, Jean Paoli, C. M. Sperberg-McQueen, Eve Maler, Fran&ccedil;ois Yergeau, editors; "<cite>Extensible Markup Language (XML) 1.0 (Third Edition)</cite>", W3C Recommendation, 4 February 2004
+ <dd>(<a href="http://www.w3.org/TR/REC-xml/"><code>http://www.w3.org/TR/REC-xml/</code></a>)
+
+ <dt>[XMLNAMES]
+ <dd><a name="refsXMLNAMES"></a> Tim Bray, Dave Hollander, Andrew Layman, editors; "<cite>Namespaces in XML</cite>", W3C Recommendation, 14 January 1999
+ <dd>(<a href="http://www.w3.org/TR/REC-xml-names/"><code>http://www.w3.org/TR/REC-xml-names/</code></a>)
+
+ <dt>[YACC]
+ <dd><a name="refsYACC"></a> S. C. Johnson; "<cite>YACC &mdash; Yet another compiler compiler</cite>", Technical Report, Murray Hill, 1975
+
+</dl>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/jslib-event-prototype.html b/testing/talos/talos/tests/dromaeo/tests/jslib-event-prototype.html
new file mode 100644
index 0000000000..c1d43b023b
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/jslib-event-prototype.html
@@ -0,0 +1,2936 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script src="../lib/prototype.js"></script>
+<script>
+window.onload = function(){
+startTest("jslib-event-prototype", '05cfe7b8');
+
+// Try to force real results
+var ret, tmp, div;
+
+var html = document.body.innerHTML;
+
+function testfn(){}
+
+ prep(function(){
+ div = $$("div");
+ var tmp = document.createElement("div");
+ tmp.innerHTML = html;
+ document.body.appendChild( tmp );
+ });
+
+ test("Prototype - observe", function(){
+ for ( var i = 0; i < 10; i++ )
+ div.invoke("observe", "click", testfn);
+ });
+
+ test("Prototype - fire", function(){
+ for ( var i = 0; i < 10; i++ )
+ div.invoke("fire", "click");
+ });
+
+ test("Prototype - stopObserving", function(){
+ for ( var i = 0; i < 10; i++ )
+ div.invoke("stopObserving", "click", testfn);
+ });
+
+endTest();
+};
+</script>
+</head>
+<body>
+ <div class="head">
+ <p><a href="http://www.w3.org/"><img height=48 alt=W3C src="w3c_home.png" width=72></a>
+
+ <h1 id="title">Selectors</h1>
+
+ <h2>W3C Working Draft 15 December 2005</h2>
+
+ <dl>
+
+ <dt>This version:
+
+ <dd><a href="http://www.w3.org/TR/2005/WD-css3-selectors-20051215">
+ http://www.w3.org/TR/2005/WD-css3-selectors-20051215</a>
+
+ <dt>Latest version:
+
+ <dd><a href="http://www.w3.org/TR/css3-selectors">
+ http://www.w3.org/TR/css3-selectors</a>
+
+ <dt>Previous version:
+
+ <dd><a href="http://www.w3.org/TR/2001/CR-css3-selectors-20011113">
+ http://www.w3.org/TR/2001/CR-css3-selectors-20011113</a>
+
+ <dt><a name=editors-list></a>Editors:
+
+ <dd class="vcard"><span class="fn">Daniel Glazman</span> (Invited Expert)</dd>
+
+ <dd class="vcard"><a lang="tr" class="url fn" href="http://www.tantek.com/">Tantek &Ccedil;elik</a> (Invited Expert)
+
+ <dd class="vcard"><a href="mailto:ian@hixie.ch" class="url fn">Ian Hickson</a> (<span
+ class="company"><a href="http://www.google.com/">Google</a></span>)
+
+ <dd class="vcard"><span class="fn">Peter Linss</span> (former editor, <span class="company"><a
+ href="http://www.netscape.com/">Netscape/AOL</a></span>)
+
+ <dd class="vcard"><span class="fn">John Williams</span> (former editor, <span class="company"><a
+ href="http://www.quark.com/">Quark, Inc.</a></span>)
+
+ </dl>
+
+ <p class="copyright"><a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright">
+ Copyright</a> &copy; 2005 <a href="http://www.w3.org/"><abbr
+ title="World Wide Web Consortium">W3C</abbr></a><sup>&reg;</sup>
+ (<a href="http://www.csail.mit.edu/"><abbr title="Massachusetts
+ Institute of Technology">MIT</abbr></a>, <a
+ href="http://www.ercim.org/"><acronym title="European Research
+ Consortium for Informatics and Mathematics">ERCIM</acronym></a>, <a
+ href="http://www.keio.ac.jp/">Keio</a>), All Rights Reserved. W3C
+ <a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">liability</a>,
+ <a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">trademark</a>,
+ <a
+ href="http://www.w3.org/Consortium/Legal/copyright-documents">document
+ use</a> rules apply.
+
+ <hr title="Separator for header">
+
+ </div>
+
+ <h2><a name=abstract></a>Abstract</h2>
+
+ <p><em>Selectors</em> are patterns that match against elements in a
+ tree. Selectors have been optimized for use with HTML and XML, and
+ are designed to be usable in performance-critical code.</p>
+
+ <p><acronym title="Cascading Style Sheets">CSS</acronym> (Cascading
+ Style Sheets) is a language for describing the rendering of <acronym
+ title="Hypertext Markup Language">HTML</acronym> and <acronym
+ title="Extensible Markup Language">XML</acronym> documents on
+ screen, on paper, in speech, etc. CSS uses Selectors for binding
+ style properties to elements in the document. This document
+ describes extensions to the selectors defined in CSS level 2. These
+ extended selectors will be used by CSS level 3.
+
+ <p>Selectors define the following function:</p>
+
+ <pre>expression &#x2217; element &rarr; boolean</pre>
+
+ <p>That is, given an element and a selector, this specification
+ defines whether that element matches the selector.</p>
+
+ <p>These expressions can also be used, for instance, to select a set
+ of elements, or a single element from a set of elements, by
+ evaluating the expression across all the elements in a
+ subtree. <acronym title="Simple Tree Transformation
+ Sheets">STTS</acronym> (Simple Tree Transformation Sheets), a
+ language for transforming XML trees, uses this mechanism. <a href="#refsSTTS">[STTS]</a></p>
+
+ <h2><a name=status></a>Status of this document</h2>
+
+ <p><em>This section describes the status of this document at the
+ time of its publication. Other documents may supersede this
+ document. A list of current W3C publications and the latest revision
+ of this technical report can be found in the <a
+ href="http://www.w3.org/TR/">W3C technical reports index at
+ http://www.w3.org/TR/.</a></em></p>
+
+ <p>This document describes the selectors that already exist in <a
+ href="#refsCSS1"><abbr title="CSS level 1">CSS1</abbr></a> and <a
+ href="#refsCSS21"><abbr title="CSS level 2">CSS2</abbr></a>, and
+ also proposes new selectors for <abbr title="CSS level
+ 3">CSS3</abbr> and other languages that may need them.</p>
+
+ <p>The CSS Working Group doesn't expect that all implementations of
+ CSS3 will have to implement all selectors. Instead, there will
+ probably be a small number of variants of CSS3, called profiles. For
+ example, it may be that only a profile for interactive user agents
+ will include all of the selectors.</p>
+
+ <p>This specification is a last call working draft for the the <a
+ href="http://www.w3.org/Style/CSS/members">CSS Working Group</a>
+ (<a href="/Style/">Style Activity</a>). This
+ document is a revision of the <a
+ href="http://www.w3.org/TR/2001/CR-css3-selectors-20011113/">Candidate
+ Recommendation dated 2001 November 13</a>, and has incorporated
+ implementation feedback received in the past few years. It is
+ expected that this last call will proceed straight to Proposed
+ Recommendation stage since it is believed that interoperability will
+ be demonstrable.</p>
+
+ <p>All persons are encouraged to review and implement this
+ specification and return comments to the (<a
+ href="http://lists.w3.org/Archives/Public/www-style/">archived</a>)
+ public mailing list <a
+ href="http://www.w3.org/Mail/Lists.html#www-style">www-style</a>
+ (see <a href="http://www.w3.org/Mail/Request">instructions</a>). W3C
+ Members can also send comments directly to the CSS Working
+ Group.
+ The deadline for comments is 14 January 2006.</p>
+
+ <p>This is still a draft document and may be updated, replaced, or
+ obsoleted by other documents at any time. It is inappropriate to
+ cite a W3C Working Draft as other than &quot;work in progress&quot;.
+
+ <p>This document may be available in <a
+ href="http://www.w3.org/Style/css3-selectors-updates/translations">translation</a>.
+ The English version of this specification is the only normative
+ version.
+
+ <div class="subtoc">
+
+ <h2 id="test10"><a name=contents>Table of contents</a></h2>
+
+ <ul class="toc">
+ <li class="tocline2"><a href="#context">1. Introduction</a>
+ <ul>
+ <li><a href="#dependencies">1.1. Dependencies</a> </li>
+ <li><a href="#terminology">1.2. Terminology</a> </li>
+ <li><a href="#changesFromCSS2">1.3. Changes from CSS2</a> </li>
+ </ul>
+ <li class="tocline2"><a href="#selectors">2. Selectors</a>
+ <li class="tocline2"><a href="#casesens">3. Case sensitivity</a>
+ <li class="tocline2"><a href="#selector-syntax">4. Selector syntax</a>
+ <li class="tocline2"><a href="#grouping">5. Groups of selectors</a>
+ <li class="tocline2"><a href="#simple-selectors">6. Simple selectors</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#type-selectors">6.1. Type selectors</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#typenmsp">6.1.1. Type selectors and namespaces</a></li>
+ </ul>
+ <li class="tocline3"><a href="#universal-selector">6.2. Universal selector</a>
+ <ul>
+ <li><a href="#univnmsp">6.2.1. Universal selector and namespaces</a></li>
+ </ul>
+ <li class="tocline3"><a href="#attribute-selectors">6.3. Attribute selectors</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#attribute-representation">6.3.1. Representation of attributes and attributes values</a>
+ <li><a href="#attribute-substrings">6.3.2. Substring matching attribute selectors</a>
+ <li class="tocline4"><a href="#attrnmsp">6.3.3. Attribute selectors and namespaces</a>
+ <li class="tocline4"><a href="#def-values">6.3.4. Default attribute values in DTDs</a></li>
+ </ul>
+ <li class="tocline3"><a href="#class-html">6.4. Class selectors</a>
+ <li class="tocline3"><a href="#id-selectors">6.5. ID selectors</a>
+ <li class="tocline3"><a href="#pseudo-classes">6.6. Pseudo-classes</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#dynamic-pseudos">6.6.1. Dynamic pseudo-classes</a>
+ <li class="tocline4"><a href="#target-pseudo">6.6.2. The :target pseudo-class</a>
+ <li class="tocline4"><a href="#lang-pseudo">6.6.3. The :lang() pseudo-class</a>
+ <li class="tocline4"><a href="#UIstates">6.6.4. UI element states pseudo-classes</a>
+ <li class="tocline4"><a href="#structural-pseudos">6.6.5. Structural pseudo-classes</a>
+ <ul>
+ <li><a href="#root-pseudo">:root pseudo-class</a>
+ <li><a href="#nth-child-pseudo">:nth-child() pseudo-class</a>
+ <li><a href="#nth-last-child-pseudo">:nth-last-child()</a>
+ <li><a href="#nth-of-type-pseudo">:nth-of-type() pseudo-class</a>
+ <li><a href="#nth-last-of-type-pseudo">:nth-last-of-type()</a>
+ <li><a href="#first-child-pseudo">:first-child pseudo-class</a>
+ <li><a href="#last-child-pseudo">:last-child pseudo-class</a>
+ <li><a href="#first-of-type-pseudo">:first-of-type pseudo-class</a>
+ <li><a href="#last-of-type-pseudo">:last-of-type pseudo-class</a>
+ <li><a href="#only-child-pseudo">:only-child pseudo-class</a>
+ <li><a href="#only-of-type-pseudo">:only-of-type pseudo-class</a>
+ <li><a href="#empty-pseudo">:empty pseudo-class</a></li>
+ </ul>
+ <li class="tocline4"><a href="#negation">6.6.7. The negation pseudo-class</a></li>
+ </ul>
+ </li>
+ </ul>
+ <li><a href="#pseudo-elements">7. Pseudo-elements</a>
+ <ul>
+ <li><a href="#first-line">7.1. The ::first-line pseudo-element</a>
+ <li><a href="#first-letter">7.2. The ::first-letter pseudo-element</a>
+ <li><a href="#UIfragments">7.3. The ::selection pseudo-element</a>
+ <li><a href="#gen-content">7.4. The ::before and ::after pseudo-elements</a></li>
+ </ul>
+ <li class="tocline2"><a href="#combinators">8. Combinators</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#descendant-combinators">8.1. Descendant combinators</a>
+ <li class="tocline3"><a href="#child-combinators">8.2. Child combinators</a>
+ <li class="tocline3"><a href="#sibling-combinators">8.3. Sibling combinators</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#adjacent-sibling-combinators">8.3.1. Adjacent sibling combinator</a>
+ <li class="tocline4"><a href="#general-sibling-combinators">8.3.2. General sibling combinator</a></li>
+ </ul>
+ </li>
+ </ul>
+ <li class="tocline2"><a href="#specificity">9. Calculating a selector's specificity</a>
+ <li class="tocline2"><a href="#w3cselgrammar">10. The grammar of Selectors</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#grammar">10.1. Grammar</a>
+ <li class="tocline3"><a href="#lex">10.2. Lexical scanner</a></li>
+ </ul>
+ <li class="tocline2"><a href="#downlevel">11. Namespaces and down-level clients</a>
+ <li class="tocline2"><a href="#profiling">12. Profiles</a>
+ <li><a href="#Conformance">13. Conformance and requirements</a>
+ <li><a href="#Tests">14. Tests</a>
+ <li><a href="#ACKS">15. Acknowledgements</a>
+ <li class="tocline2"><a href="#references">16. References</a>
+ </ul>
+
+ </div>
+
+ <h2><a name=context>1. Introduction</a></h2>
+
+ <h3><a name=dependencies></a>1.1. Dependencies</h3>
+
+ <p>Some features of this specification are specific to CSS, or have
+ particular limitations or rules specific to CSS. In this
+ specification, these have been described in terms of CSS2.1. <a
+ href="#refsCSS21">[CSS21]</a></p>
+
+ <h3><a name=terminology></a>1.2. Terminology</h3>
+
+ <p>All of the text of this specification is normative except
+ examples, notes, and sections explicitly marked as
+ non-normative.</p>
+
+ <h3><a name=changesFromCSS2></a>1.3. Changes from CSS2</h3>
+
+ <p><em>This section is non-normative.</em></p>
+
+ <p>The main differences between the selectors in CSS2 and those in
+ Selectors are:
+
+ <ul>
+
+ <li>the list of basic definitions (selector, group of selectors,
+ simple selector, etc.) has been changed; in particular, what was
+ referred to in CSS2 as a simple selector is now called a sequence
+ of simple selectors, and the term "simple selector" is now used for
+ the components of this sequence</li>
+
+ <li>an optional namespace component is now allowed in type element
+ selectors, the universal selector and attribute selectors</li>
+
+ <li>a <a href="#general-sibling-combinators">new combinator</a> has been introduced</li>
+
+ <li>new simple selectors including substring matching attribute
+ selectors, and new pseudo-classes</li>
+
+ <li>new pseudo-elements, and introduction of the "::" convention
+ for pseudo-elements</li>
+
+ <li>the grammar has been rewritten</li>
+
+ <li>profiles to be added to specifications integrating Selectors
+ and defining the set of selectors which is actually supported by
+ each specification</li>
+
+ <li>Selectors are now a CSS3 Module and an independent
+ specification; other specifications can now refer to this document
+ independently of CSS</li>
+
+ <li>the specification now has its own test suite</li>
+
+ </ul>
+
+<h2><a name=selectors></a>2. Selectors</h2>
+
+<p><em>This section is non-normative, as it merely summarizes the
+following sections.</em></p>
+
+<p>A Selector represents a structure. This structure can be used as a
+condition (e.g. in a CSS rule) that determines which elements a
+selector matches in the document tree, or as a flat description of the
+HTML or XML fragment corresponding to that structure.</p>
+
+<p>Selectors may range from simple element names to rich contextual
+representations.</p>
+
+<p>The following table summarizes the Selector syntax:</p>
+
+<table class="selectorsReview">
+ <thead>
+ <tr>
+ <th class="pattern">Pattern</th>
+ <th class="meaning">Meaning</th>
+ <th class="described">Described in section</th>
+ <th class="origin">First defined in CSS level</th></tr>
+ <tbody>
+ <tr>
+ <td class="pattern">*</td>
+ <td class="meaning">any element</td>
+ <td class="described"><a
+ href="#universal-selector">Universal
+ selector</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E</td>
+ <td class="meaning">an element of type E</td>
+ <td class="described"><a
+ href="#type-selectors">Type selector</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E[foo]</td>
+ <td class="meaning">an E element with a "foo" attribute</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value is exactly
+ equal to "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo~="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value is a list of
+ space-separated values, one of which is exactly equal to "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo^="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value begins exactly
+ with the string "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[foo$="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value ends exactly
+ with the string "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[foo*="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value contains the
+ substring "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[hreflang|="en"]</td>
+ <td class="meaning">an E element whose "hreflang" attribute has a hyphen-separated
+ list of values beginning (from the left) with "en"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:root</td>
+ <td class="meaning">an E element, root of the document</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-child(n)</td>
+ <td class="meaning">an E element, the n-th child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-last-child(n)</td>
+ <td class="meaning">an E element, the n-th child of its parent, counting
+ from the last one</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-of-type(n)</td>
+ <td class="meaning">an E element, the n-th sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-last-of-type(n)</td>
+ <td class="meaning">an E element, the n-th sibling of its type, counting
+ from the last one</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:first-child</td>
+ <td class="meaning">an E element, first child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:last-child</td>
+ <td class="meaning">an E element, last child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:first-of-type</td>
+ <td class="meaning">an E element, first sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:last-of-type</td>
+ <td class="meaning">an E element, last sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:only-child</td>
+ <td class="meaning">an E element, only child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:only-of-type</td>
+ <td class="meaning">an E element, only sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:empty</td>
+ <td class="meaning">an E element that has no children (including text
+ nodes)</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:link<br>E:visited</td>
+ <td class="meaning">an E element being the source anchor of a hyperlink of
+ which the target is not yet visited (:link) or already visited
+ (:visited)</td>
+ <td class="described"><a
+ href="#link">The link
+ pseudo-classes</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E:active<br>E:hover<br>E:focus</td>
+ <td class="meaning">an E element during certain user actions</td>
+ <td class="described"><a
+ href="#useraction-pseudos">The user
+ action pseudo-classes</a></td>
+ <td class="origin">1 and 2</td></tr>
+ <tr>
+ <td class="pattern">E:target</td>
+ <td class="meaning">an E element being the target of the referring URI</td>
+ <td class="described"><a
+ href="#target-pseudo">The target
+ pseudo-class</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:lang(fr)</td>
+ <td class="meaning">an element of type E in language "fr" (the document
+ language specifies how language is determined)</td>
+ <td class="described"><a
+ href="#lang-pseudo">The :lang()
+ pseudo-class</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:enabled<br>E:disabled</td>
+ <td class="meaning">a user interface element E which is enabled or
+ disabled</td>
+ <td class="described"><a
+ href="#UIstates">The UI element states
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:checked<!--<br>E:indeterminate--></td>
+ <td class="meaning">a user interface element E which is checked<!-- or in an
+ indeterminate state--> (for instance a radio-button or checkbox)</td>
+ <td class="described"><a
+ href="#UIstates">The UI element states
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E::first-line</td>
+ <td class="meaning">the first formatted line of an E element</td>
+ <td class="described"><a
+ href="#first-line">The ::first-line
+ pseudo-element</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E::first-letter</td>
+ <td class="meaning">the first formatted letter of an E element</td>
+ <td class="described"><a
+ href="#first-letter">The ::first-letter
+ pseudo-element</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E::selection</td>
+ <td class="meaning">the portion of an E element that is currently
+ selected/highlighted by the user</td>
+ <td class="described"><a
+ href="#UIfragments">The UI element
+ fragments pseudo-elements</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E::before</td>
+ <td class="meaning">generated content before an E element</td>
+ <td class="described"><a
+ href="#gen-content">The ::before
+ pseudo-element</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E::after</td>
+ <td class="meaning">generated content after an E element</td>
+ <td class="described"><a
+ href="#gen-content">The ::after
+ pseudo-element</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E.warning</td>
+ <td class="meaning">an E element whose class is
+"warning" (the document language specifies how class is determined).</td>
+ <td class="described"><a
+ href="#class-html">Class
+ selectors</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E#myid</td>
+ <td class="meaning">an E element with ID equal to "myid".</td>
+ <td class="described"><a
+ href="#id-selectors">ID
+ selectors</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E:not(s)</td>
+ <td class="meaning">an E element that does not match simple selector s</td>
+ <td class="described"><a
+ href="#negation">Negation
+ pseudo-class</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E F</td>
+ <td class="meaning">an F element descendant of an E element</td>
+ <td class="described"><a
+ href="#descendant-combinators">Descendant
+ combinator</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E &gt; F</td>
+ <td class="meaning">an F element child of an E element</td>
+ <td class="described"><a
+ href="#child-combinators">Child
+ combinator</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E + F</td>
+ <td class="meaning">an F element immediately preceded by an E element</td>
+ <td class="described"><a
+ href="#adjacent-sibling-combinators">Adjacent sibling combinator</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E ~ F</td>
+ <td class="meaning">an F element preceded by an E element</td>
+ <td class="described"><a
+ href="#general-sibling-combinators">General sibling combinator</a></td>
+ <td class="origin">3</td></tr></tbody></table>
+
+<p>The meaning of each selector is derived from the table above by
+prepending "matches" to the contents of each cell in the "Meaning"
+column.</p>
+
+<h2><a name=casesens>3. Case sensitivity</a></h2>
+
+<p>The case sensitivity of document language element names, attribute
+names, and attribute values in selectors depends on the document
+language. For example, in HTML, element names are case-insensitive,
+but in XML, they are case-sensitive.</p>
+
+<h2><a name=selector-syntax>4. Selector syntax</a></h2>
+
+<p>A <dfn><a name=selector>selector</a></dfn> is a chain of one
+or more <a href="#sequence">sequences of simple selectors</a>
+separated by <a href="#combinators">combinators</a>.</p>
+
+<p>A <dfn><a name=sequence>sequence of simple selectors</a></dfn>
+is a chain of <a href="#simple-selectors-dfn">simple selectors</a>
+that are not separated by a <a href="#combinators">combinator</a>. It
+always begins with a <a href="#type-selectors">type selector</a> or a
+<a href="#universal-selector">universal selector</a>. No other type
+selector or universal selector is allowed in the sequence.</p>
+
+<p>A <dfn><a name=simple-selectors-dfn></a><a
+href="#simple-selectors">simple selector</a></dfn> is either a <a
+href="#type-selectors">type selector</a>, <a
+href="#universal-selector">universal selector</a>, <a
+href="#attribute-selectors">attribute selector</a>, <a
+href="#class-html">class selector</a>, <a
+href="#id-selectors">ID selector</a>, <a
+href="#content-selectors">content selector</a>, or <a
+href="#pseudo-classes">pseudo-class</a>. One <a
+href="#pseudo-elements">pseudo-element</a> may be appended to the last
+sequence of simple selectors.</p>
+
+<p><dfn>Combinators</dfn> are: white space, &quot;greater-than
+sign&quot; (U+003E, <code>&gt;</code>), &quot;plus sign&quot; (U+002B,
+<code>+</code>) and &quot;tilde&quot; (U+007E, <code>~</code>). White
+space may appear between a combinator and the simple selectors around
+it. <a name=whitespace></a>Only the characters "space" (U+0020), "tab"
+(U+0009), "line feed" (U+000A), "carriage return" (U+000D), and "form
+feed" (U+000C) can occur in white space. Other space-like characters,
+such as "em-space" (U+2003) and "ideographic space" (U+3000), are
+never part of white space.</p>
+
+<p>The elements of a document tree that are represented by a selector
+are the <dfn><a name=subject></a>subjects of the selector</dfn>. A
+selector consisting of a single sequence of simple selectors
+represents any element satisfying its requirements. Prepending another
+sequence of simple selectors and a combinator to a sequence imposes
+additional matching constraints, so the subjects of a selector are
+always a subset of the elements represented by the last sequence of
+simple selectors.</p>
+
+<p>An empty selector, containing no sequence of simple selectors and
+no pseudo-element, is an <a href="#Conformance">invalid
+selector</a>.</p>
+
+<h2><a name=grouping>5. Groups of selectors</a></h2>
+
+<p>When several selectors share the same declarations, they may be
+grouped into a comma-separated list. (A comma is U+002C.)</p>
+
+<div class="example">
+<p>CSS examples:</p>
+<p>In this example, we condense three rules with identical
+declarations into one. Thus,</p>
+<pre>h1 { font-family: sans-serif }
+h2 { font-family: sans-serif }
+h3 { font-family: sans-serif }</pre>
+<p>is equivalent to:</p>
+<pre>h1, h2, h3 { font-family: sans-serif }</pre>
+</div>
+
+<p><strong>Warning</strong>: the equivalence is true in this example
+because all the selectors are valid selectors. If just one of these
+selectors were invalid, the entire group of selectors would be
+invalid. This would invalidate the rule for all three heading
+elements, whereas in the former case only one of the three individual
+heading rules would be invalidated.</p>
+
+
+<h2><a name=simple-selectors>6. Simple selectors</a></h2>
+
+<h3><a name=type-selectors>6.1. Type selector</a></h3>
+
+<p>A <dfn>type selector</dfn> is the name of a document language
+element type. A type selector represents an instance of the element
+type in the document tree.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents an <code>h1</code> element in the document tree:</p>
+ <pre>h1</pre>
+</div>
+
+
+<h4><a name=typenmsp>6.1.1. Type selectors and namespaces</a></h4>
+
+<p>Type selectors allow an optional namespace (<a
+href="#refsXMLNAMES">[XMLNAMES]</a>) component. A namespace prefix
+that has been previously declared may be prepended to the element name
+separated by the namespace separator &quot;vertical bar&quot;
+(U+007C, <code>|</code>).</p>
+
+<p>The namespace component may be left empty to indicate that the
+selector is only to represent elements with no declared namespace.</p>
+
+<p>An asterisk may be used for the namespace prefix, indicating that
+the selector represents elements in any namespace (including elements
+with no namespace).</p>
+
+<p>Element type selectors that have no namespace component (no
+namespace separator), represent elements without regard to the
+element's namespace (equivalent to "<code>*|</code>") unless a default
+namespace has been declared. If a default namespace has been declared,
+the selector will represent only elements in the default
+namespace.</p>
+
+<p>A type selector containing a namespace prefix that has not been
+previously declared is an <a href="#Conformance">invalid</a> selector.
+The mechanism for declaring a namespace prefix is left up to the
+language implementing Selectors. In CSS, such a mechanism is defined
+in the General Syntax module.</p>
+
+<p>In a namespace-aware client, element type selectors will only match
+against the <a
+href="http://www.w3.org/TR/REC-xml-names/#NT-LocalPart">local part</a>
+of the element's <a
+href="http://www.w3.org/TR/REC-xml-names/#ns-qualnames">qualified
+name</a>. See <a href="#downlevel">below</a> for notes about matching
+behaviors in down-level clients.</p>
+
+<p>In summary:</p>
+
+<dl>
+ <dt><code>ns|E</code></dt>
+ <dd>elements with name E in namespace ns</dd>
+ <dt><code>*|E</code></dt>
+ <dd>elements with name E in any namespace, including those without any
+ declared namespace</dd>
+ <dt><code>|E</code></dt>
+ <dd>elements with name E without any declared namespace</dd>
+ <dt><code>E</code></dt>
+ <dd>if no default namespace has been specified, this is equivalent to *|E.
+ Otherwise it is equivalent to ns|E where ns is the default namespace.</dd>
+</dl>
+
+<div class="example">
+ <p>CSS examples:</p>
+
+ <pre>@namespace foo url(http://www.example.com);
+ foo|h1 { color: blue }
+ foo|* { color: yellow }
+ |h1 { color: red }
+ *|h1 { color: green }
+ h1 { color: green }</pre>
+
+ <p>The first rule will match only <code>h1</code> elements in the
+ "http://www.example.com" namespace.</p>
+
+ <p>The second rule will match all elements in the
+ "http://www.example.com" namespace.</p>
+
+ <p>The third rule will match only <code>h1</code> elements without
+ any declared namespace.</p>
+
+ <p>The fourth rule will match <code>h1</code> elements in any
+ namespace (including those without any declared namespace).</p>
+
+ <p>The last rule is equivalent to the fourth rule because no default
+ namespace has been defined.</p>
+
+</div>
+
+<h3><a name=universal-selector>6.2. Universal selector</a> </h3>
+
+<p>The <dfn>universal selector</dfn>, written &quot;asterisk&quot;
+(<code>*</code>), represents the qualified name of any element
+type. It represents any single element in the document tree in any
+namespace (including those without any declared namespace) if no
+default namespace has been specified. If a default namespace has been
+specified, see <a href="#univnmsp">Universal selector and
+Namespaces</a> below.</p>
+
+<p>If the universal selector is not the only component of a sequence
+of simple selectors, the <code>*</code> may be omitted.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <ul>
+ <li><code>*[hreflang|=en]</code> and <code>[hreflang|=en]</code> are equivalent,</li>
+ <li><code>*.warning</code> and <code>.warning</code> are equivalent,</li>
+ <li><code>*#myid</code> and <code>#myid</code> are equivalent.</li>
+ </ul>
+</div>
+
+<p class="note"><strong>Note:</strong> it is recommended that the
+<code>*</code>, representing the universal selector, not be
+omitted.</p>
+
+<h4><a name=univnmsp>6.2.1. Universal selector and namespaces</a></h4>
+
+<p>The universal selector allows an optional namespace component. It
+is used as follows:</p>
+
+<dl>
+ <dt><code>ns|*</code></dt>
+ <dd>all elements in namespace ns</dd>
+ <dt><code>*|*</code></dt>
+ <dd>all elements</dd>
+ <dt><code>|*</code></dt>
+ <dd>all elements without any declared namespace</dd>
+ <dt><code>*</code></dt>
+ <dd>if no default namespace has been specified, this is equivalent to *|*.
+ Otherwise it is equivalent to ns|* where ns is the default namespace.</dd>
+</dl>
+
+<p>A universal selector containing a namespace prefix that has not
+been previously declared is an <a href="#Conformance">invalid</a>
+selector. The mechanism for declaring a namespace prefix is left up
+to the language implementing Selectors. In CSS, such a mechanism is
+defined in the General Syntax module.</p>
+
+
+<h3><a name=attribute-selectors>6.3. Attribute selectors</a></h3>
+
+<p>Selectors allow the representation of an element's attributes. When
+a selector is used as an expression to match against an element,
+attribute selectors must be considered to match an element if that
+element has an attribute that matches the attribute represented by the
+attribute selector.</p>
+
+<h4><a name=attribute-representation>6.3.1. Attribute presence and values
+selectors</a></h4>
+
+<p>CSS2 introduced four attribute selectors:</p>
+
+<dl>
+ <dt><code>[att]</code>
+ <dd>Represents an element with the <code>att</code> attribute, whatever the value of
+ the attribute.</dd>
+ <dt><code>[att=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value is exactly
+ "val".</dd>
+ <dt><code>[att~=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value is a <a
+ href="#whitespace">whitespace</a>-separated list of words, one of
+ which is exactly "val". If "val" contains whitespace, it will never
+ represent anything (since the words are <em>separated</em> by
+ spaces).</dd>
+ <dt><code>[att|=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute, its value either
+ being exactly "val" or beginning with "val" immediately followed by
+ "-" (U+002D). This is primarily intended to allow language subcode
+ matches (e.g., the <code>hreflang</code> attribute on the
+ <code>link</code> element in HTML) as described in RFC 3066 (<a
+ href="#refsRFC3066">[RFC3066]</a>). For <code>lang</code> (or
+ <code>xml:lang</code>) language subcode matching, please see <a
+ href="#lang-pseudo">the <code>:lang</code> pseudo-class</a>.</dd>
+</dl>
+
+<p>Attribute values must be identifiers or strings. The
+case-sensitivity of attribute names and values in selectors depends on
+the document language.</p>
+
+<div class="example">
+
+ <p>Examples:</p>
+
+ <p>The following attribute selector represents an <code>h1</code>
+ element that carries the <code>title</code> attribute, whatever its
+ value:</p>
+
+ <pre>h1[title]</pre>
+
+ <p>In the following example, the selector represents a
+ <code>span</code> element whose <code>class</code> attribute has
+ exactly the value "example":</p>
+
+ <pre>span[class="example"]</pre>
+
+ <p>Multiple attribute selectors can be used to represent several
+ attributes of an element, or several conditions on the same
+ attribute. Here, the selector represents a <code>span</code> element
+ whose <code>hello</code> attribute has exactly the value "Cleveland"
+ and whose <code>goodbye</code> attribute has exactly the value
+ "Columbus":</p>
+
+ <pre>span[hello="Cleveland"][goodbye="Columbus"]</pre>
+
+ <p>The following selectors illustrate the differences between "="
+ and "~=". The first selector will represent, for example, the value
+ "copyright copyleft copyeditor" on a <code>rel</code> attribute. The
+ second selector will only represent an <code>a</code> element with
+ an <code>href</code> attribute having the exact value
+ "http://www.w3.org/".</p>
+
+ <pre>a[rel~="copyright"]
+a[href="http://www.w3.org/"]</pre>
+
+ <p>The following selector represents a <code>link</code> element
+ whose <code>hreflang</code> attribute is exactly "fr".</p>
+
+ <pre>link[hreflang=fr]</pre>
+
+ <p>The following selector represents a <code>link</code> element for
+ which the values of the <code>hreflang</code> attribute begins with
+ "en", including "en", "en-US", and "en-cockney":</p>
+
+ <pre>link[hreflang|="en"]</pre>
+
+ <p>Similarly, the following selectors represents a
+ <code>DIALOGUE</code> element whenever it has one of two different
+ values for an attribute <code>character</code>:</p>
+
+ <pre>DIALOGUE[character=romeo]
+DIALOGUE[character=juliet]</pre>
+
+</div>
+
+<h4><a name=attribute-substrings></a>6.3.2. Substring matching attribute
+selectors</h4>
+
+<p>Three additional attribute selectors are provided for matching
+substrings in the value of an attribute:</p>
+
+<dl>
+ <dt><code>[att^=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value begins
+ with the prefix "val".</dd>
+ <dt><code>[att$=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute whose value ends with
+ the suffix "val".</dd>
+ <dt><code>[att*=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute whose value contains
+ at least one instance of the substring "val".</dd>
+</dl>
+
+<p>Attribute values must be identifiers or strings. The
+case-sensitivity of attribute names in selectors depends on the
+document language.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents an HTML <code>object</code>, referencing an
+ image:</p>
+ <pre>object[type^="image/"]</pre>
+ <p>The following selector represents an HTML anchor <code>a</code> with an
+ <code>href</code> attribute whose value ends with ".html".</p>
+ <pre>a[href$=".html"]</pre>
+ <p>The following selector represents an HTML paragraph with a <code>title</code>
+ attribute whose value contains the substring "hello"</p>
+ <pre>p[title*="hello"]</pre>
+</div>
+
+<h4><a name=attrnmsp>6.3.3. Attribute selectors and namespaces</a></h4>
+
+<p>Attribute selectors allow an optional namespace component to the
+attribute name. A namespace prefix that has been previously declared
+may be prepended to the attribute name separated by the namespace
+separator &quot;vertical bar&quot; (<code>|</code>). In keeping with
+the Namespaces in the XML recommendation, default namespaces do not
+apply to attributes, therefore attribute selectors without a namespace
+component apply only to attributes that have no declared namespace
+(equivalent to "<code>|attr</code>"). An asterisk may be used for the
+namespace prefix indicating that the selector is to match all
+attribute names without regard to the attribute's namespace.
+
+<p>An attribute selector with an attribute name containing a namespace
+prefix that has not been previously declared is an <a
+href="#Conformance">invalid</a> selector. The mechanism for declaring
+a namespace prefix is left up to the language implementing Selectors.
+In CSS, such a mechanism is defined in the General Syntax module.
+
+<div class="example">
+ <p>CSS examples:</p>
+ <pre>@namespace foo "http://www.example.com";
+[foo|att=val] { color: blue }
+[*|att] { color: yellow }
+[|att] { color: green }
+[att] { color: green }</pre>
+
+ <p>The first rule will match only elements with the attribute
+ <code>att</code> in the "http://www.example.com" namespace with the
+ value "val".</p>
+
+ <p>The second rule will match only elements with the attribute
+ <code>att</code> regardless of the namespace of the attribute
+ (including no declared namespace).</p>
+
+ <p>The last two rules are equivalent and will match only elements
+ with the attribute <code>att</code> where the attribute is not
+ declared to be in a namespace.</p>
+
+</div>
+
+<h4><a name=def-values>6.3.4. Default attribute values in DTDs</a></h4>
+
+<p>Attribute selectors represent explicitly set attribute values in
+the document tree. Default attribute values may be defined in a DTD or
+elsewhere, but cannot always be selected by attribute
+selectors. Selectors should be designed so that they work even if the
+default values are not included in the document tree.</p>
+
+<p>More precisely, a UA is <em>not</em> required to read an "external
+subset" of the DTD but <em>is</em> required to look for default
+attribute values in the document's "internal subset." (See <a
+href="#refsXML10">[XML10]</a> for definitions of these subsets.)</p>
+
+<p>A UA that recognizes an XML namespace <a
+href="#refsXMLNAMES">[XMLNAMES]</a> is not required to use its
+knowledge of that namespace to treat default attribute values as if
+they were present in the document. (For example, an XHTML UA is not
+required to use its built-in knowledge of the XHTML DTD.)</p>
+
+<p class="note"><strong>Note:</strong> Typically, implementations
+choose to ignore external subsets.</p>
+
+<div class="example">
+<p>Example:</p>
+
+<p>Consider an element EXAMPLE with an attribute "notation" that has a
+default value of "decimal". The DTD fragment might be</p>
+
+<pre class="dtd-example">&lt;!ATTLIST EXAMPLE notation (decimal,octal) "decimal"></pre>
+
+<p>If the style sheet contains the rules</p>
+
+<pre>EXAMPLE[notation=decimal] { /*... default property settings ...*/ }
+EXAMPLE[notation=octal] { /*... other settings...*/ }</pre>
+
+<p>the first rule will not match elements whose "notation" attribute
+is set by default, i.e. not set explicitly. To catch all cases, the
+attribute selector for the default value must be dropped:</p>
+
+<pre>EXAMPLE { /*... default property settings ...*/ }
+EXAMPLE[notation=octal] { /*... other settings...*/ }</pre>
+
+<p>Here, because the selector <code>EXAMPLE[notation=octal]</code> is
+more specific than the tag
+selector alone, the style declarations in the second rule will override
+those in the first for elements that have a "notation" attribute value
+of "octal". Care has to be taken that all property declarations that
+are to apply only to the default case are overridden in the non-default
+cases' style rules.</p>
+
+</div>
+
+<h3><a name=class-html>6.4. Class selectors</a></h3>
+
+<p>Working with HTML, authors may use the period (U+002E,
+<code>.</code>) notation as an alternative to the <code>~=</code>
+notation when representing the <code>class</code> attribute. Thus, for
+HTML, <code>div.value</code> and <code>div[class~=value]</code> have
+the same meaning. The attribute value must immediately follow the
+&quot;period&quot; (<code>.</code>).</p>
+
+<p>UAs may apply selectors using the period (.) notation in XML
+documents if the UA has namespace-specific knowledge that allows it to
+determine which attribute is the &quot;class&quot; attribute for the
+respective namespace. One such example of namespace-specific knowledge
+is the prose in the specification for a particular namespace (e.g. SVG
+1.0 <a href="#refsSVG">[SVG]</a> describes the <a
+href="http://www.w3.org/TR/2001/PR-SVG-20010719/styling.html#ClassAttribute">SVG
+&quot;class&quot; attribute</a> and how a UA should interpret it, and
+similarly MathML 1.01 <a href="#refsMATH">[MATH]</a> describes the <a
+href="http://www.w3.org/1999/07/REC-MathML-19990707/chapter2.html#sec2.3.4">MathML
+&quot;class&quot; attribute</a>.)</p>
+
+<div class="example">
+ <p>CSS examples:</p>
+
+ <p>We can assign style information to all elements with
+ <code>class~="pastoral"</code> as follows:</p>
+
+ <pre>*.pastoral { color: green } /* all elements with class~=pastoral */</pre>
+
+ <p>or just</p>
+
+ <pre>.pastoral { color: green } /* all elements with class~=pastoral */</pre>
+
+ <p>The following assigns style only to H1 elements with
+ <code>class~="pastoral"</code>:</p>
+
+ <pre>H1.pastoral { color: green } /* H1 elements with class~=pastoral */</pre>
+
+ <p>Given these rules, the first H1 instance below would not have
+ green text, while the second would:</p>
+
+ <pre>&lt;H1&gt;Not green&lt;/H1&gt;
+&lt;H1 class="pastoral"&gt;Very green&lt;/H1&gt;</pre>
+
+</div>
+
+<p>To represent a subset of "class" values, each value must be preceded
+by a ".", in any order.</P>
+
+<div class="example">
+
+ <p>CSS example:</p>
+
+ <p>The following rule matches any P element whose "class" attribute
+ has been assigned a list of <a
+ href="#whitespace">whitespace</a>-separated values that includes
+ "pastoral" and "marine":</p>
+
+ <pre>p.pastoral.marine { color: green }</pre>
+
+ <p>This rule matches when <code>class="pastoral blue aqua
+ marine"</code> but does not match for <code>class="pastoral
+ blue"</code>.</p>
+
+</div>
+
+<p class="note"><strong>Note:</strong> Because CSS gives considerable
+power to the "class" attribute, authors could conceivably design their
+own "document language" based on elements with almost no associated
+presentation (such as DIV and SPAN in HTML) and assigning style
+information through the "class" attribute. Authors should avoid this
+practice since the structural elements of a document language often
+have recognized and accepted meanings and author-defined classes may
+not.</p>
+
+<p class="note"><strong>Note:</strong> If an element has multiple
+class attributes, their values must be concatenated with spaces
+between the values before searching for the class. As of this time the
+working group is not aware of any manner in which this situation can
+be reached, however, so this behavior is explicitly non-normative in
+this specification.</p>
+
+<h3><a name=id-selectors>6.5. ID selectors</a></h3>
+
+<p>Document languages may contain attributes that are declared to be
+of type ID. What makes attributes of type ID special is that no two
+such attributes can have the same value in a document, regardless of
+the type of the elements that carry them; whatever the document
+language, an ID typed attribute can be used to uniquely identify its
+element. In HTML all ID attributes are named "id"; XML applications
+may name ID attributes differently, but the same restriction
+applies.</p>
+
+<p>An ID-typed attribute of a document language allows authors to
+assign an identifier to one element instance in the document tree. W3C
+ID selectors represent an element instance based on its identifier. An
+ID selector contains a &quot;number sign&quot; (U+0023,
+<code>#</code>) immediately followed by the ID value, which must be an
+identifier.</p>
+
+<p>Selectors does not specify how a UA knows the ID-typed attribute of
+an element. The UA may, e.g., read a document's DTD, have the
+information hard-coded or ask the user.
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following ID selector represents an <code>h1</code> element
+ whose ID-typed attribute has the value "chapter1":</p>
+ <pre>h1#chapter1</pre>
+ <p>The following ID selector represents any element whose ID-typed
+ attribute has the value "chapter1":</p>
+ <pre>#chapter1</pre>
+ <p>The following selector represents any element whose ID-typed
+ attribute has the value "z98y".</p>
+ <pre>*#z98y</pre>
+</div>
+
+<p class="note"><strong>Note.</strong> In XML 1.0 <a
+href="#refsXML10">[XML10]</a>, the information about which attribute
+contains an element's IDs is contained in a DTD or a schema. When
+parsing XML, UAs do not always read the DTD, and thus may not know
+what the ID of an element is (though a UA may have namespace-specific
+knowledge that allows it to determine which attribute is the ID
+attribute for that namespace). If a style sheet designer knows or
+suspects that a UA may not know what the ID of an element is, he
+should use normal attribute selectors instead:
+<code>[name=p371]</code> instead of <code>#p371</code>. Elements in
+XML 1.0 documents without a DTD do not have IDs at all.</p>
+
+<p>If an element has multiple ID attributes, all of them must be
+treated as IDs for that element for the purposes of the ID
+selector. Such a situation could be reached using mixtures of xml:id,
+DOM3 Core, XML DTDs, and namespace-specific knowledge.</p>
+
+<h3><a name=pseudo-classes>6.6. Pseudo-classes</a></h3>
+
+<p>The pseudo-class concept is introduced to permit selection based on
+information that lies outside of the document tree or that cannot be
+expressed using the other simple selectors.</p>
+
+<p>A pseudo-class always consists of a &quot;colon&quot;
+(<code>:</code>) followed by the name of the pseudo-class and
+optionally by a value between parentheses.</p>
+
+<p>Pseudo-classes are allowed in all sequences of simple selectors
+contained in a selector. Pseudo-classes are allowed anywhere in
+sequences of simple selectors, after the leading type selector or
+universal selector (possibly omitted). Pseudo-class names are
+case-insensitive. Some pseudo-classes are mutually exclusive, while
+others can be applied simultaneously to the same
+element. Pseudo-classes may be dynamic, in the sense that an element
+may acquire or lose a pseudo-class while a user interacts with the
+document.</p>
+
+
+<h4><a name=dynamic-pseudos>6.6.1. Dynamic pseudo-classes</a></h4>
+
+<p>Dynamic pseudo-classes classify elements on characteristics other
+than their name, attributes, or content, in principle characteristics
+that cannot be deduced from the document tree.</p>
+
+<p>Dynamic pseudo-classes do not appear in the document source or
+document tree.</p>
+
+
+<h5>The <a name=link>link pseudo-classes: :link and :visited</a></h5>
+
+<p>User agents commonly display unvisited links differently from
+previously visited ones. Selectors
+provides the pseudo-classes <code>:link</code> and
+<code>:visited</code> to distinguish them:</p>
+
+<ul>
+ <li>The <code>:link</code> pseudo-class applies to links that have
+ not yet been visited.</li>
+ <li>The <code>:visited</code> pseudo-class applies once the link has
+ been visited by the user. </li>
+</ul>
+
+<p>After some amount of time, user agents may choose to return a
+visited link to the (unvisited) ':link' state.</p>
+
+<p>The two states are mutually exclusive.</p>
+
+<div class="example">
+
+ <p>Example:</p>
+
+ <p>The following selector represents links carrying class
+ <code>external</code> and already visited:</p>
+
+ <pre>a.external:visited</pre>
+
+</div>
+
+<p class="note"><strong>Note:</strong> It is possible for style sheet
+authors to abuse the :link and :visited pseudo-classes to determine
+which sites a user has visited without the user's consent.
+
+<p>UAs may therefore treat all links as unvisited links, or implement
+other measures to preserve the user's privacy while rendering visited
+and unvisited links differently.</p>
+
+<h5>The <a name=useraction-pseudos>user action pseudo-classes
+:hover, :active, and :focus</a></h5>
+
+<p>Interactive user agents sometimes change the rendering in response
+to user actions. Selectors provides
+three pseudo-classes for the selection of an element the user is
+acting on.</p>
+
+<ul>
+
+ <li>The <code>:hover</code> pseudo-class applies while the user
+ designates an element with a pointing device, but does not activate
+ it. For example, a visual user agent could apply this pseudo-class
+ when the cursor (mouse pointer) hovers over a box generated by the
+ element. User agents not that do not support <a
+ href="http://www.w3.org/TR/REC-CSS2/media.html#interactive-media-group">interactive
+ media</a> do not have to support this pseudo-class. Some conforming
+ user agents that support <a
+ href="http://www.w3.org/TR/REC-CSS2/media.html#interactive-media-group">interactive
+ media</a> may not be able to support this pseudo-class (e.g., a pen
+ device that does not detect hovering).</li>
+
+ <li>The <code>:active</code> pseudo-class applies while an element
+ is being activated by the user. For example, between the times the
+ user presses the mouse button and releases it.</li>
+
+ <li>The <code>:focus</code> pseudo-class applies while an element
+ has the focus (accepts keyboard or mouse events, or other forms of
+ input). </li>
+
+</ul>
+
+<p>There may be document language or implementation specific limits on
+which elements can become <code>:active</code> or acquire
+<code>:focus</code>.</p>
+
+<p>These pseudo-classes are not mutually exclusive. An element may
+match several pseudo-classes at the same time.</p>
+
+<p>Selectors doesn't define if the parent of an element that is
+':active' or ':hover' is also in that state.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <pre>a:link /* unvisited links */
+a:visited /* visited links */
+a:hover /* user hovers */
+a:active /* active links */</pre>
+ <p>An example of combining dynamic pseudo-classes:</p>
+ <pre>a:focus
+a:focus:hover</pre>
+ <p>The last selector matches <code>a</code> elements that are in
+ the pseudo-class :focus and in the pseudo-class :hover.</p>
+</div>
+
+<p class="note"><strong>Note:</strong> An element can be both ':visited'
+and ':active' (or ':link' and ':active').</p>
+
+<h4><a name=target-pseudo>6.6.2. The target pseudo-class :target</a></h4>
+
+<p>Some URIs refer to a location within a resource. This kind of URI
+ends with a &quot;number sign&quot; (#) followed by an anchor
+identifier (called the fragment identifier).</p>
+
+<p>URIs with fragment identifiers link to a certain element within the
+document, known as the target element. For instance, here is a URI
+pointing to an anchor named <code>section_2</code> in an HTML
+document:</p>
+
+<pre>http://example.com/html/top.html#section_2</pre>
+
+<p>A target element can be represented by the <code>:target</code>
+pseudo-class. If the document's URI has no fragment identifier, then
+the document has no target element.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <pre>p.note:target</pre>
+ <p>This selector represents a <code>p</code> element of class
+ <code>note</code> that is the target element of the referring
+ URI.</p>
+</div>
+
+<div class="example">
+ <p>CSS example:</p>
+ <p>Here, the <code>:target</code> pseudo-class is used to make the
+ target element red and place an image before it, if there is one:</p>
+ <pre>*:target { color : red }
+*:target::before { content : url(target.png) }</pre>
+</div>
+
+<h4><a name=lang-pseudo>6.6.3. The language pseudo-class :lang</a></h4>
+
+<p>If the document language specifies how the human language of an
+element is determined, it is possible to write selectors that
+represent an element based on its language. For example, in HTML <a
+href="#refsHTML4">[HTML4]</a>, the language is determined by a
+combination of the <code>lang</code> attribute, the <code>meta</code>
+element, and possibly by information from the protocol (such as HTTP
+headers). XML uses an attribute called <code>xml:lang</code>, and
+there may be other document language-specific methods for determining
+the language.</p>
+
+<p>The pseudo-class <code>:lang(C)</code> represents an element that
+is in language C. Whether an element is represented by a
+<code>:lang()</code> selector is based solely on the identifier C
+being either equal to, or a hyphen-separated substring of, the
+element's language value, in the same way as if performed by the <a
+href="#attribute-representation">'|='</a> operator in attribute
+selectors. The identifier C does not have to be a valid language
+name.</p>
+
+<p>C must not be empty. (If it is, the selector is invalid.)</p>
+
+<p class="note"><strong>Note:</strong> It is recommended that
+documents and protocols indicate language using codes from RFC 3066 <a
+href="#refsRFC3066">[RFC3066]</a> or its successor, and by means of
+"xml:lang" attributes in the case of XML-based documents <a
+href="#refsXML10">[XML10]</a>. See <a
+href="http://www.w3.org/International/questions/qa-lang-2or3.html">
+"FAQ: Two-letter or three-letter language codes."</a></p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The two following selectors represent an HTML document that is in
+ Belgian, French, or German. The two next selectors represent
+ <code>q</code> quotations in an arbitrary element in Belgian, French,
+ or German.</p>
+ <pre>html:lang(fr-be)
+html:lang(de)
+:lang(fr-be) &gt; q
+:lang(de) &gt; q</pre>
+</div>
+
+<h4><a name=UIstates>6.6.4. The UI element states pseudo-classes</a></h4>
+
+<h5><a name=enableddisabled>The :enabled and :disabled pseudo-classes</a></h5>
+
+<p>The <code>:enabled</code> pseudo-class allows authors to customize
+the look of user interface elements that are enabled &mdash; which the
+user can select or activate in some fashion (e.g. clicking on a button
+with a mouse). There is a need for such a pseudo-class because there
+is no way to programmatically specify the default appearance of say,
+an enabled <code>input</code> element without also specifying what it
+would look like when it was disabled.</p>
+
+<p>Similar to <code>:enabled</code>, <code>:disabled</code> allows the
+author to specify precisely how a disabled or inactive user interface
+element should look.</p>
+
+<p>Most elements will be neither enabled nor disabled. An element is
+enabled if the user can either activate it or transfer the focus to
+it. An element is disabled if it could be enabled, but the user cannot
+presently activate it or transfer focus to it.</p>
+
+
+<h5><a name=checked>The :checked pseudo-class</a></h5>
+
+<p>Radio and checkbox elements can be toggled by the user. Some menu
+items are "checked" when the user selects them. When such elements are
+toggled "on" the <code>:checked</code> pseudo-class applies. The
+<code>:checked</code> pseudo-class initially applies to such elements
+that have the HTML4 <code>selected</code> and <code>checked</code>
+attributes as described in <a
+href="http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.2.1">Section
+17.2.1 of HTML4</a>, but of course the user can toggle "off" such
+elements in which case the <code>:checked</code> pseudo-class would no
+longer apply. While the <code>:checked</code> pseudo-class is dynamic
+in nature, and is altered by user action, since it can also be based
+on the presence of the semantic HTML4 <code>selected</code> and
+<code>checked</code> attributes, it applies to all media.
+
+
+<h5><a name=indeterminate>The :indeterminate pseudo-class</a></h5>
+
+<div class="note">
+
+<p>Radio and checkbox elements can be toggled by the user, but are
+sometimes in an indeterminate state, neither checked nor unchecked.
+This can be due to an element attribute, or DOM manipulation.</p>
+
+<p>A future version of this specification may introduce an
+<code>:indeterminate</code> pseudo-class that applies to such elements.
+<!--While the <code>:indeterminate</code> pseudo-class is dynamic in
+nature, and is altered by user action, since it can also be based on
+the presence of an element attribute, it applies to all media.</p>
+
+<p>Components of a radio-group initialized with no pre-selected choice
+are an example of :indeterminate state.--></p>
+
+</div>
+
+
+<h4><a name=structural-pseudos>6.6.5. Structural pseudo-classes</a></h4>
+
+<p>Selectors introduces the concept of <dfn>structural
+pseudo-classes</dfn> to permit selection based on extra information that lies in
+the document tree but cannot be represented by other simple selectors or
+combinators.
+
+<p>Note that standalone pieces of PCDATA (text nodes in the DOM) are
+not counted when calculating the position of an element in the list of
+children of its parent. When calculating the position of an element in
+the list of children of its parent, the index numbering starts at 1.
+
+
+<h5><a name=root-pseudo>:root pseudo-class</a></h5>
+
+<p>The <code>:root</code> pseudo-class represents an element that is
+the root of the document. In HTML 4, this is always the
+<code>HTML</code> element.
+
+
+<h5><a name=nth-child-pseudo>:nth-child() pseudo-class</a></h5>
+
+<p>The
+<code>:nth-child(<var>a</var><code>n</code>+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings
+<strong>before</strong> it in the document tree, for a given positive
+integer or zero value of <code>n</code>, and has a parent element. In
+other words, this matches the <var>b</var>th child of an element after
+all the children have been split into groups of <var>a</var> elements
+each. For example, this allows the selectors to address every other
+row in a table, and could be used to alternate the color
+of paragraph text in a cycle of four. The <var>a</var> and
+<var>b</var> values must be zero, negative integers or positive
+integers. The index of the first child of an element is 1.
+
+<p>In addition to this, <code>:nth-child()</code> can take
+'<code>odd</code>' and '<code>even</code>' as arguments instead.
+'<code>odd</code>' has the same signification as <code>2n+1</code>,
+and '<code>even</code>' has the same signification as <code>2n</code>.
+
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-child(2n+1) /* represents every odd row of an HTML table */
+tr:nth-child(odd) /* same */
+tr:nth-child(2n) /* represents every even row of an HTML table */
+tr:nth-child(even) /* same */
+
+/* Alternate paragraph colours in CSS */
+p:nth-child(4n+1) { color: navy; }
+p:nth-child(4n+2) { color: green; }
+p:nth-child(4n+3) { color: maroon; }
+p:nth-child(4n+4) { color: purple; }</pre>
+</div>
+
+<p>When <var>a</var>=0, no repeating is used, so for example
+<code>:nth-child(0n+5)</code> matches only the fifth child. When
+<var>a</var>=0, the <var>a</var><code>n</code> part need not be
+included, so the syntax simplifies to
+<code>:nth-child(<var>b</var>)</code> and the last example simplifies
+to <code>:nth-child(5)</code>.
+
+<div class="example">
+<p>Examples:</p>
+<pre>foo:nth-child(0n+1) /* represents an element foo, first child of its parent element */
+foo:nth-child(1) /* same */</pre>
+</div>
+
+<p>When <var>a</var>=1, the number may be omitted from the rule.
+
+<div class="example">
+<p>Examples:</p>
+<p>The following selectors are therefore equivalent:</p>
+<pre>bar:nth-child(1n+0) /* represents all bar elements, specificity (0,1,1) */
+bar:nth-child(n+0) /* same */
+bar:nth-child(n) /* same */
+bar /* same but lower specificity (0,0,1) */</pre>
+</div>
+
+<p>If <var>b</var>=0, then every <var>a</var>th element is picked. In
+such a case, the <var>b</var> part may be omitted.
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-child(2n+0) /* represents every even row of an HTML table */
+tr:nth-child(2n) /* same */</pre>
+</div>
+
+<p>If both <var>a</var> and <var>b</var> are equal to zero, the
+pseudo-class represents no element in the document tree.</p>
+
+<p>The value <var>a</var> can be negative, but only the positive
+values of <var>a</var><code>n</code>+<var>b</var>, for
+<code>n</code>&ge;0, may represent an element in the document
+tree.</p>
+
+<div class="example">
+<p>Example:</p>
+<pre>html|tr:nth-child(-n+6) /* represents the 6 first rows of XHTML tables */</pre>
+</div>
+
+<p>When the value <var>b</var> is negative, the "+" character in the
+expression must be removed (it is effectively replaced by the "-"
+character indicating the negative value of <var>b</var>).</p>
+
+<div class="example">
+<p>Examples:</p>
+<pre>:nth-child(10n-1) /* represents the 9th, 19th, 29th, etc, element */
+:nth-child(10n+9) /* Same */
+:nth-child(10n+-1) /* Syntactically invalid, and would be ignored */</pre>
+</div>
+
+
+<h5><a name=nth-last-child-pseudo>:nth-last-child() pseudo-class</a></h5>
+
+<p>The <code>:nth-last-child(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings
+<strong>after</strong> it in the document tree, for a given positive
+integer or zero value of <code>n</code>, and has a parent element. See
+<code>:nth-child()</code> pseudo-class for the syntax of its argument.
+It also accepts the '<code>even</code>' and '<code>odd</code>' values
+as arguments.
+
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-last-child(-n+2) /* represents the two last rows of an HTML table */
+
+foo:nth-last-child(odd) /* represents all odd foo elements in their parent element,
+ counting from the last one */</pre>
+</div>
+
+
+<h5><a name=nth-of-type-pseudo>:nth-of-type() pseudo-class</a></h5>
+
+<p>The <code>:nth-of-type(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings with the same
+element name <strong>before</strong> it in the document tree, for a
+given zero or positive integer value of <code>n</code>, and has a
+parent element. In other words, this matches the <var>b</var>th child
+of that type after all the children of that type have been split into
+groups of a elements each. See <code>:nth-child()</code> pseudo-class
+for the syntax of its argument. It also accepts the
+'<code>even</code>' and '<code>odd</code>' values.
+
+
+<div class="example">
+<p>CSS example:</p>
+<p>This allows an author to alternate the position of floated images:</p>
+<pre>img:nth-of-type(2n+1) { float: right; }
+img:nth-of-type(2n) { float: left; }</pre>
+</div>
+
+
+<h5><a name=nth-last-of-type-pseudo>:nth-last-of-type() pseudo-class</a></h5>
+
+<p>The <code>:nth-last-of-type(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings with the same
+element name <strong>after</strong> it in the document tree, for a
+given zero or positive integer value of <code>n</code>, and has a
+parent element. See <code>:nth-child()</code> pseudo-class for the
+syntax of its argument. It also accepts the '<code>even</code>' and '<code>odd</code>' values.
+
+
+<div class="example">
+ <p>Example:</p>
+ <p>To represent all <code>h2</code> children of an XHTML
+ <code>body</code> except the first and last, one could use the
+ following selector:</p>
+ <pre>body &gt; h2:nth-of-type(n+2):nth-last-of-type(n+2)</pre>
+ <p>In this case, one could also use <code>:not()</code>, although the
+ selector ends up being just as long:</p>
+ <pre>body &gt; h2:not(:first-of-type):not(:last-of-type)</pre>
+</div>
+
+
+<h5><a name=first-child-pseudo>:first-child pseudo-class</a></h5>
+
+<p>Same as <code>:nth-child(1)</code>. The <code>:first-child</code> pseudo-class
+represents an element that is the first child of some other element.
+
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element that is
+ the first child of a <code>div</code> element:</p>
+ <pre>div &gt; p:first-child</pre>
+ <p>This selector can represent the <code>p</code> inside the
+ <code>div</code> of the following fragment:</p>
+ <pre>&lt;p&gt; The last P before the note.&lt;/p&gt;
+&lt;div class="note"&gt;
+ &lt;p&gt; The first P inside the note.&lt;/p&gt;
+&lt;/div&gt;</pre>but cannot represent the second <code>p</code> in the following
+fragment:
+ <pre>&lt;p&gt; The last P before the note.&lt;/p&gt;
+&lt;div class="note"&gt;
+ &lt;h2&gt; Note &lt;/h2&gt;
+ &lt;p&gt; The first P inside the note.&lt;/p&gt;
+&lt;/div&gt;</pre>
+ <p>The following two selectors are usually equivalent:</p>
+ <pre>* &gt; a:first-child /* a is first child of any element */
+a:first-child /* Same (assuming a is not the root element) */</pre>
+</div>
+
+<h5><a name=last-child-pseudo>:last-child pseudo-class</a></h5>
+
+<p>Same as <code>:nth-last-child(1)</code>. The <code>:last-child</code> pseudo-class
+represents an element that is the last child of some other element.
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents a list item <code>li</code> that
+ is the last child of an ordered list <code>ol</code>.
+ <pre>ol &gt; li:last-child</pre>
+</div>
+
+<h5><a name=first-of-type-pseudo>:first-of-type pseudo-class</a></h5>
+
+<p>Same as <code>:nth-of-type(1)</code>. The <code>:first-of-type</code> pseudo-class
+represents an element that is the first sibling of its type in the list of
+children of its parent element.
+
+<div class="example">
+<p>Example:</p>
+<p>The following selector represents a definition title
+<code>dt</code> inside a definition list <code>dl</code>, this
+<code>dt</code> being the first of its type in the list of children of
+its parent element.</p>
+<pre>dl dt:first-of-type</pre>
+<p>It is a valid description for the first two <code>dt</code>
+elements in the following example but not for the third one:</p>
+<pre>&lt;dl&gt;
+ &lt;dt&gt;gigogne&lt;/dt&gt;
+ &lt;dd&gt;
+ &lt;dl&gt;
+ &lt;dt&gt;fus&eacute;e&lt;/dt&gt;
+ &lt;dd&gt;multistage rocket&lt;/dd&gt;
+ &lt;dt&gt;table&lt;/dt&gt;
+ &lt;dd&gt;nest of tables&lt;/dd&gt;
+ &lt;/dl&gt;
+ &lt;/dd&gt;
+&lt;/dl&gt;</pre>
+</div>
+
+<h5><a name=last-of-type-pseudo>:last-of-type pseudo-class</a></h5>
+
+<p>Same as <code>:nth-last-of-type(1)</code>. The
+<code>:last-of-type</code> pseudo-class represents an element that is
+the last sibling of its type in the list of children of its parent
+element.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents the last data cell
+ <code>td</code> of a table row.</p>
+ <pre>tr &gt; td:last-of-type</pre>
+</div>
+
+<h5><a name=only-child-pseudo>:only-child pseudo-class</a></h5>
+
+<p>Represents an element that has a parent element and whose parent
+element has no other element children. Same as
+<code>:first-child:last-child</code> or
+<code>:nth-child(1):nth-last-child(1)</code>, but with a lower
+specificity.</p>
+
+<h5><a name=only-of-type-pseudo>:only-of-type pseudo-class</a></h5>
+
+<p>Represents an element that has a parent element and whose parent
+element has no other element children with the same element name. Same
+as <code>:first-of-type:last-of-type</code> or
+<code>:nth-of-type(1):nth-last-of-type(1)</code>, but with a lower
+specificity.</p>
+
+
+<h5><a name=empty-pseudo></a>:empty pseudo-class</h5>
+
+<p>The <code>:empty</code> pseudo-class represents an element that has
+no children at all. In terms of the DOM, only element nodes and text
+nodes (including CDATA nodes and entity references) whose data has a
+non-zero length must be considered as affecting emptiness; comments,
+PIs, and other nodes must not affect whether an element is considered
+empty or not.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p><code>p:empty</code> is a valid representation of the following fragment:</p>
+ <pre>&lt;p&gt;&lt;/p&gt;</pre>
+ <p><code>foo:empty</code> is not a valid representation for the
+ following fragments:</p>
+ <pre>&lt;foo&gt;bar&lt;/foo&gt;</pre>
+ <pre>&lt;foo&gt;&lt;bar&gt;bla&lt;/bar&gt;&lt;/foo&gt;</pre>
+ <pre>&lt;foo&gt;this is not &lt;bar&gt;:empty&lt;/bar&gt;&lt;/foo&gt;</pre>
+</div>
+
+<h4><a name=content-selectors>6.6.6. Blank</a></h4> <!-- It's the Return of Appendix H!!! Run away! -->
+
+<p>This section intentionally left blank.</p>
+<!-- (used to be :contains()) -->
+
+<h4><a name=negation></a>6.6.7. The negation pseudo-class</h4>
+
+<p>The negation pseudo-class, <code>:not(<var>X</var>)</code>, is a
+functional notation taking a <a href="#simple-selectors-dfn">simple
+selector</a> (excluding the negation pseudo-class itself and
+pseudo-elements) as an argument. It represents an element that is not
+represented by the argument.
+
+<!-- pseudo-elements are not simple selectors, so the above paragraph
+may be a bit confusing -->
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following CSS selector matches all <code>button</code>
+ elements in an HTML document that are not disabled.</p>
+ <pre>button:not([DISABLED])</pre>
+ <p>The following selector represents all but <code>FOO</code>
+ elements.</p>
+ <pre>*:not(FOO)</pre>
+ <p>The following group of selectors represents all HTML elements
+ except links.</p>
+ <pre>html|*:not(:link):not(:visited)</pre>
+</div>
+
+<p>Default namespace declarations do not affect the argument of the
+negation pseudo-class unless the argument is a universal selector or a
+type selector.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>Assuming that the default namespace is bound to
+ "http://example.com/", the following selector represents all
+ elements that are not in that namespace:</p>
+ <pre>*|*:not(*)</pre>
+ <p>The following CSS selector matches any element being hovered,
+ regardless of its namespace. In particular, it is not limited to
+ only matching elements in the default namespace that are not being
+ hovered, and elements not in the default namespace don't match the
+ rule when they <em>are</em> being hovered.</p>
+ <pre>*|*:not(:hover)</pre>
+</div>
+
+<p class="note"><strong>Note</strong>: the :not() pseudo allows
+useless selectors to be written. For instance <code>:not(*|*)</code>,
+which represents no element at all, or <code>foo:not(bar)</code>,
+which is equivalent to <code>foo</code> but with a higher
+specificity.</p>
+
+<h3><a name=pseudo-elements>7. Pseudo-elements</a></h3>
+
+<p>Pseudo-elements create abstractions about the document tree beyond
+those specified by the document language. For instance, document
+languages do not offer mechanisms to access the first letter or first
+line of an element's content. Pseudo-elements allow designers to refer
+to this otherwise inaccessible information. Pseudo-elements may also
+provide designers a way to refer to content that does not exist in the
+source document (e.g., the <code>::before</code> and
+<code>::after</code> pseudo-elements give access to generated
+content).</p>
+
+<p>A pseudo-element is made of two colons (<code>::</code>) followed
+by the name of the pseudo-element.</p>
+
+<p>This <code>::</code> notation is introduced by the current document
+in order to establish a discrimination between pseudo-classes and
+pseudo-elements. For compatibility with existing style sheets, user
+agents must also accept the previous one-colon notation for
+pseudo-elements introduced in CSS levels 1 and 2 (namely,
+<code>:first-line</code>, <code>:first-letter</code>,
+<code>:before</code> and <code>:after</code>). This compatibility is
+not allowed for the new pseudo-elements introduced in CSS level 3.</p>
+
+<p>Only one pseudo-element may appear per selector, and if present it
+must appear after the sequence of simple selectors that represents the
+<a href="#subject">subjects</a> of the selector. <span class="note">A
+future version of this specification may allow multiple
+pesudo-elements per selector.</span></p>
+
+<h4><a name=first-line>7.1. The ::first-line pseudo-element</a></h4>
+
+<p>The <code>::first-line</code> pseudo-element describes the contents
+of the first formatted line of an element.
+
+<div class="example">
+<p>CSS example:</p>
+<pre>p::first-line { text-transform: uppercase }</pre>
+<p>The above rule means "change the letters of the first line of every
+paragraph to uppercase".</p>
+</div>
+
+<p>The selector <code>p::first-line</code> does not match any real
+HTML element. It does match a pseudo-element that conforming user
+agents will insert at the beginning of every paragraph.</p>
+
+<p>Note that the length of the first line depends on a number of
+factors, including the width of the page, the font size, etc. Thus,
+an ordinary HTML paragraph such as:</p>
+
+<pre>
+&lt;P&gt;This is a somewhat long HTML
+paragraph that will be broken into several
+lines. The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>the lines of which happen to be broken as follows:
+
+<pre>
+THIS IS A SOMEWHAT LONG HTML PARAGRAPH THAT
+will be broken into several lines. The first
+line will be identified by a fictional tag
+sequence. The other lines will be treated as
+ordinary lines in the paragraph.
+</pre>
+
+<p>This paragraph might be "rewritten" by user agents to include the
+<em>fictional tag sequence</em> for <code>::first-line</code>. This
+fictional tag sequence helps to show how properties are inherited.</p>
+
+<pre>
+&lt;P&gt;<b>&lt;P::first-line&gt;</b> This is a somewhat long HTML
+paragraph that <b>&lt;/P::first-line&gt;</b> will be broken into several
+lines. The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>If a pseudo-element breaks up a real element, the desired effect
+can often be described by a fictional tag sequence that closes and
+then re-opens the element. Thus, if we mark up the previous paragraph
+with a <code>span</code> element:</p>
+
+<pre>
+&lt;P&gt;<b>&lt;SPAN class="test"&gt;</b> This is a somewhat long HTML
+paragraph that will be broken into several
+lines.<b>&lt;/SPAN&gt;</b> The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>the user agent could simulate start and end tags for
+<code>span</code> when inserting the fictional tag sequence for
+<code>::first-line</code>.
+
+<pre>
+&lt;P&gt;&lt;P::first-line&gt;<b>&lt;SPAN class="test"&gt;</b> This is a
+somewhat long HTML
+paragraph that will <b>&lt;/SPAN&gt;</b>&lt;/P::first-line&gt;<b>&lt;SPAN class="test"&gt;</b> be
+broken into several
+lines.<b>&lt;/SPAN&gt;</b> The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>In CSS, the <code>::first-line</code> pseudo-element can only be
+attached to a block-level element, an inline-block, a table-caption,
+or a table-cell.</p>
+
+<p><a name="first-formatted-line"></a>The "first formatted line" of an
+element may occur inside a
+block-level descendant in the same flow (i.e., a block-level
+descendant that is not positioned and not a float). E.g., the first
+line of the <code>div</code> in <code>&lt;DIV>&lt;P>This
+line...&lt;/P>&lt/DIV></code> is the first line of the <code>p</code> (assuming
+that both <code>p</code> and <code>div</code> are block-level).
+
+<p>The first line of a table-cell or inline-block cannot be the first
+formatted line of an ancestor element. Thus, in <code>&lt;DIV&gt;&lt;P
+STYLE="display: inline-block">Hello&lt;BR&gt;Goodbye&lt;/P&gt;
+etcetera&lt;/DIV&gt;</code> the first formatted line of the
+<code>div</code> is not the line "Hello".
+
+<p class="note">Note that the first line of the <code>p</code> in this
+fragment: <code>&lt;p&gt&lt;br&gt;First...</code> doesn't contain any
+letters (assuming the default style for <code>br</code> in HTML
+4). The word "First" is not on the first formatted line.
+
+<p>A UA should act as if the fictional start tags of the
+<code>::first-line</code> pseudo-elements were nested just inside the
+innermost enclosing block-level element. (Since CSS1 and CSS2 were
+silent on this case, authors should not rely on this behavior.) Here
+is an example. The fictional tag sequence for</p>
+
+<pre>
+&lt;DIV>
+ &lt;P>First paragraph&lt;/P>
+ &lt;P>Second paragraph&lt;/P>
+&lt;/DIV>
+</pre>
+
+<p>is</p>
+
+<pre>
+&lt;DIV>
+ &lt;P>&lt;DIV::first-line>&lt;P::first-line>First paragraph&lt;/P::first-line>&lt;/DIV::first-line>&lt;/P>
+ &lt;P>&lt;P::first-line>Second paragraph&lt;/P::first-line>&lt;/P>
+&lt;/DIV>
+</pre>
+
+<p>The <code>::first-line</code> pseudo-element is similar to an
+inline-level element, but with certain restrictions. In CSS, the
+following properties apply to a <code>::first-line</code>
+pseudo-element: font properties, color property, background
+properties, 'word-spacing', 'letter-spacing', 'text-decoration',
+'vertical-align', 'text-transform', 'line-height'. UAs may apply other
+properties as well.</p>
+
+
+<h4><a name=first-letter>7.2. The ::first-letter pseudo-element</a></h4>
+
+<p>The <code>::first-letter</code> pseudo-element represents the first
+letter of the first line of a block, if it is not preceded by any
+other content (such as images or inline tables) on its line. The
+::first-letter pseudo-element may be used for "initial caps" and "drop
+caps", which are common typographical effects. This type of initial
+letter is similar to an inline-level element if its 'float' property
+is 'none'; otherwise, it is similar to a floated element.</p>
+
+<p>In CSS, these are the properties that apply to <code>::first-letter</code>
+pseudo-elements: font properties, 'text-decoration', 'text-transform',
+'letter-spacing', 'word-spacing' (when appropriate), 'line-height',
+'float', 'vertical-align' (only if 'float' is 'none'), margin
+properties, padding properties, border properties, color property,
+background properties. UAs may apply other properties as well. To
+allow UAs to render a typographically correct drop cap or initial cap,
+the UA may choose a line-height, width and height based on the shape
+of the letter, unlike for normal elements.</p>
+
+<div class="example">
+<p>Example:</p>
+<p>This example shows a possible rendering of an initial cap. Note
+that the 'line-height' that is inherited by the <code>::first-letter</code>
+pseudo-element is 1.1, but the UA in this example has computed the
+height of the first letter differently, so that it doesn't cause any
+unnecessary space between the first two lines. Also note that the
+fictional start tag of the first letter is inside the <span>span</span>, and thus
+the font weight of the first letter is normal, not bold as the <span>span</span>:
+<pre>
+p { line-height: 1.1 }
+p::first-letter { font-size: 3em; font-weight: normal }
+span { font-weight: bold }
+...
+&lt;p>&lt;span>Het hemelsche&lt;/span> gerecht heeft zich ten lange lesten&lt;br>
+Erbarremt over my en mijn benaeuwde vesten&lt;br>
+En arme burgery, en op mijn volcx gebed&lt;br>
+En dagelix geschrey de bange stad ontzet.
+</pre>
+<div class="figure">
+<p><img src="initial-cap.png" alt="Image illustrating the ::first-letter pseudo-element">
+</div>
+</div>
+
+<div class="example">
+<p>The following CSS will make a drop cap initial letter span about two lines:</p>
+
+<pre>
+&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"&gt;
+&lt;HTML&gt;
+ &lt;HEAD&gt;
+ &lt;TITLE&gt;Drop cap initial letter&lt;/TITLE&gt;
+ &lt;STYLE type="text/css"&gt;
+ P { font-size: 12pt; line-height: 1.2 }
+ P::first-letter { font-size: 200%; font-weight: bold; float: left }
+ SPAN { text-transform: uppercase }
+ &lt;/STYLE&gt;
+ &lt;/HEAD&gt;
+ &lt;BODY&gt;
+ &lt;P&gt;&lt;SPAN&gt;The first&lt;/SPAN&gt; few words of an article
+ in The Economist.&lt;/P&gt;
+ &lt;/BODY&gt;
+&lt;/HTML&gt;
+</pre>
+
+<p>This example might be formatted as follows:</p>
+
+<div class="figure">
+<P><img src="first-letter.gif" alt="Image illustrating the combined effect of the ::first-letter and ::first-line pseudo-elements"></p>
+</div>
+
+<p>The <span class="index-inst" title="fictional tag
+sequence">fictional tag sequence</span> is:</p>
+
+<pre>
+&lt;P&gt;
+&lt;SPAN&gt;
+&lt;P::first-letter&gt;
+T
+&lt;/P::first-letter&gt;he first
+&lt;/SPAN&gt;
+few words of an article in the Economist.
+&lt;/P&gt;
+</pre>
+
+<p>Note that the <code>::first-letter</code> pseudo-element tags abut
+the content (i.e., the initial character), while the ::first-line
+pseudo-element start tag is inserted right after the start tag of the
+block element.</p> </div>
+
+<p>In order to achieve traditional drop caps formatting, user agents
+may approximate font sizes, for example to align baselines. Also, the
+glyph outline may be taken into account when formatting.</p>
+
+<p>Punctuation (i.e, characters defined in Unicode in the "open" (Ps),
+"close" (Pe), "initial" (Pi). "final" (Pf) and "other" (Po)
+punctuation classes), that precedes or follows the first letter should
+be included. <a href="#refsUNICODE">[UNICODE]</a></p>
+
+<div class="figure">
+<P><img src="first-letter2.gif" alt="Quotes that precede the
+first letter should be included."></p>
+</div>
+
+<p>The <code>::first-letter</code> also applies if the first letter is
+in fact a digit, e.g., the "6" in "67 million dollars is a lot of
+money."</p>
+
+<p>In CSS, the <code>::first-letter</code> pseudo-element applies to
+block, list-item, table-cell, table-caption, and inline-block
+elements. <span class="note">A future version of this specification
+may allow this pesudo-element to apply to more element
+types.</span></p>
+
+<p>The <code>::first-letter</code> pseudo-element can be used with all
+such elements that contain text, or that have a descendant in the same
+flow that contains text. A UA should act as if the fictional start tag
+of the ::first-letter pseudo-element is just before the first text of
+the element, even if that first text is in a descendant.</p>
+
+<div class="example">
+<p>Example:</p>
+<p>The fictional tag sequence for this HTMLfragment:
+<pre>&lt;div>
+&lt;p>The first text.</pre>
+<p>is:
+<pre>&lt;div>
+&lt;p>&lt;div::first-letter>&lt;p::first-letter>T&lt;/...>&lt;/...>he first text.</pre>
+</div>
+
+<p>The first letter of a table-cell or inline-block cannot be the
+first letter of an ancestor element. Thus, in <code>&lt;DIV&gt;&lt;P
+STYLE="display: inline-block">Hello&lt;BR&gt;Goodbye&lt;/P&gt;
+etcetera&lt;/DIV&gt;</code> the first letter of the <code>div</code> is not the
+letter "H". In fact, the <code>div</code> doesn't have a first letter.
+
+<p>The first letter must occur on the <a
+href="#first-formatted-line">first formatted line.</a> For example, in
+this fragment: <code>&lt;p&gt&lt;br&gt;First...</code> the first line
+doesn't contain any letters and <code>::first-letter</code> doesn't
+match anything (assuming the default style for <code>br</code> in HTML
+4). In particular, it does not match the "F" of "First."
+
+<p>In CSS, if an element is a list item ('display: list-item'), the
+<code>::first-letter</code> applies to the first letter in the
+principal box after the marker. UAs may ignore
+<code>::first-letter</code> on list items with 'list-style-position:
+inside'. If an element has <code>::before</code> or
+<code>::after</code> content, the <code>::first-letter</code> applies
+to the first letter of the element <em>including</em> that content.
+
+<div class="example">
+<p>Example:</p>
+<p>After the rule 'p::before {content: "Note: "}', the selector
+'p::first-letter' matches the "N" of "Note".</p>
+</div>
+
+<p>Some languages may have specific rules about how to treat certain
+letter combinations. In Dutch, for example, if the letter combination
+"ij" appears at the beginning of a word, both letters should be
+considered within the <code>::first-letter</code> pseudo-element.
+
+<p>If the letters that would form the ::first-letter are not in the
+same element, such as "'T" in <code>&lt;p>'&lt;em>T...</code>, the UA
+may create a ::first-letter pseudo-element from one of the elements,
+both elements, or simply not create a pseudo-element.</p>
+
+<p>Similarly, if the first letter(s) of the block are not at the start
+of the line (for example due to bidirectional reordering), then the UA
+need not create the pseudo-element(s).
+
+<div class="example">
+<p>Example:</p>
+<p><a name="overlapping-example">The following example</a> illustrates
+how overlapping pseudo-elements may interact. The first letter of
+each P element will be green with a font size of '24pt'. The rest of
+the first formatted line will be 'blue' while the rest of the
+paragraph will be 'red'.</p>
+
+<pre>p { color: red; font-size: 12pt }
+p::first-letter { color: green; font-size: 200% }
+p::first-line { color: blue }
+
+&lt;P&gt;Some text that ends up on two lines&lt;/P&gt;</pre>
+
+<p>Assuming that a line break will occur before the word "ends", the
+<span class="index-inst" title="fictional tag sequence">fictional tag
+sequence</span> for this fragment might be:</p>
+
+<pre>&lt;P&gt;
+&lt;P::first-line&gt;
+&lt;P::first-letter&gt;
+S
+&lt;/P::first-letter&gt;ome text that
+&lt;/P::first-line&gt;
+ends up on two lines
+&lt;/P&gt;</pre>
+
+<p>Note that the <code>::first-letter</code> element is inside the <code>::first-line</code>
+element. Properties set on <code>::first-line</code> are inherited by
+<code>::first-letter</code>, but are overridden if the same property is set on
+<code>::first-letter</code>.</p>
+</div>
+
+
+<h4><a name=UIfragments>7.3.</a> <a name=selection>The ::selection pseudo-element</a></h4>
+
+<p>The <code>::selection</code> pseudo-element applies to the portion
+of a document that has been highlighted by the user. This also
+applies, for example, to selected text within an editable text
+field. This pseudo-element should not be confused with the <code><a
+href="#checked">:checked</a></code> pseudo-class (which used to be
+named <code>:selected</code>)
+
+<p>Although the <code>::selection</code> pseudo-element is dynamic in
+nature, and is altered by user action, it is reasonable to expect that
+when a UA re-renders to a static medium (such as a printed page, see
+<a href="#refsCSS21">[CSS21]</a>) which was originally rendered to a
+dynamic medium (like screen), the UA may wish to transfer the current
+<code>::selection</code> state to that other medium, and have all the
+appropriate formatting and rendering take effect as well. This is not
+required &mdash; UAs may omit the <code>::selection</code>
+pseudo-element for static media.
+
+<p>These are the CSS properties that apply to <code>::selection</code>
+pseudo-elements: color, background, cursor (optional), outline
+(optional). The computed value of the 'background-image' property on
+<code>::selection</code> may be ignored.
+
+
+<h4><a name=gen-content>7.4. The ::before and ::after pseudo-elements</a></h4>
+
+<p>The <code>::before</code> and <code>::after</code> pseudo-elements
+can be used to describe generated content before or after an element's
+content. They are explained in CSS 2.1 <a
+href="#refsCSS21">[CSS21]</a>.</p>
+
+<p>When the <code>::first-letter</code> and <code>::first-line</code>
+pseudo-elements are combined with <code>::before</code> and
+<code>::after</code>, they apply to the first letter or line of the
+element including the inserted text.</p>
+
+<h2><a name=combinators>8. Combinators</a></h2>
+
+<h3><a name=descendant-combinators>8.1. Descendant combinator</a></h3>
+
+<p>At times, authors may want selectors to describe an element that is
+the descendant of another element in the document tree (e.g., "an
+<code>EM</code> element that is contained within an <code>H1</code>
+element"). Descendant combinators express such a relationship. A
+descendant combinator is <a href="#whitespace">white space</a> that
+separates two sequences of simple selectors. A selector of the form
+"<code>A B</code>" represents an element <code>B</code> that is an
+arbitrary descendant of some ancestor element <code>A</code>.
+
+<div class="example">
+ <p>Examples:</p>
+ <p>For example, consider the following selector:</p>
+ <pre>h1 em</pre>
+ <p>It represents an <code>em</code> element being the descendant of
+ an <code>h1</code> element. It is a correct and valid, but partial,
+ description of the following fragment:</p>
+ <pre>&lt;h1&gt;This &lt;span class="myclass"&gt;headline
+is &lt;em&gt;very&lt;/em&gt; important&lt;/span&gt;&lt;/h1&gt;</pre>
+ <p>The following selector:</p>
+ <pre>div * p</pre>
+ <p>represents a <code>p</code> element that is a grandchild or later
+ descendant of a <code>div</code> element. Note the whitespace on
+ either side of the "*" is not part of the universal selector; the
+ whitespace is a combinator indicating that the DIV must be the
+ ancestor of some element, and that that element must be an ancestor
+ of the P.</p>
+ <p>The following selector, which combines descendant combinators and
+ <a href="#attribute-selectors">attribute selectors</a>, represents an
+ element that (1) has the <code>href</code> attribute set and (2) is
+ inside a <code>p</code> that is itself inside a <code>div</code>:</p>
+ <pre>div p *[href]</pre>
+</div>
+
+<h3><a name=child-combinators>8.2. Child combinators</a></h3>
+
+<p>A <dfn>child combinator</dfn> describes a childhood relationship
+between two elements. A child combinator is made of the
+&quot;greater-than sign&quot; (<code>&gt;</code>) character and
+separates two sequences of simple selectors.
+
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element that is
+ child of <code>body</code>:</p>
+ <pre>body &gt; p</pre>
+ <p>The following example combines descendant combinators and child
+ combinators.</p>
+ <pre>div ol&gt;li p</pre><!-- LEAVE THOSE SPACES OUT! see below -->
+ <p>It represents a <code>p</code> element that is a descendant of an
+ <code>li</code> element; the <code>li</code> element must be the
+ child of an <code>ol</code> element; the <code>ol</code> element must
+ be a descendant of a <code>div</code>. Notice that the optional white
+ space around the "&gt;" combinator has been left out.</p>
+</div>
+
+<p>For information on selecting the first child of an element, please
+see the section on the <code><a
+href="#structural-pseudos">:first-child</a></code> pseudo-class
+above.</p>
+
+<h3><a name=sibling-combinators>8.3. Sibling combinators</a></h3>
+
+<p>There are two different sibling combinators: the adjacent sibling
+combinator and the general sibling combinator. In both cases,
+non-element nodes (e.g. text between elements) are ignored when
+considering adjacency of elements.</p>
+
+<h4><a name=adjacent-sibling-combinators>8.3.1. Adjacent sibling combinator</a></h4>
+
+<p>The adjacent sibling combinator is made of the &quot;plus
+sign&quot; (U+002B, <code>+</code>) character that separates two
+sequences of simple selectors. The elements represented by the two
+sequences share the same parent in the document tree and the element
+represented by the first sequence immediately precedes the element
+represented by the second one.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element
+ immediately following a <code>math</code> element:</p>
+ <pre>math + p</pre>
+ <p>The following selector is conceptually similar to the one in the
+ previous example, except that it adds an attribute selector &mdash; it
+ adds a constraint to the <code>h1</code> element, that it must have
+ <code>class="opener"</code>:</p>
+ <pre>h1.opener + h2</pre>
+</div>
+
+
+<h4><a name=general-sibling-combinators>8.3.2. General sibling combinator</a></h4>
+
+<p>The general sibling combinator is made of the &quot;tilde&quot;
+(U+007E, <code>~</code>) character that separates two sequences of
+simple selectors. The elements represented by the two sequences share
+the same parent in the document tree and the element represented by
+the first sequence precedes (not necessarily immediately) the element
+represented by the second one.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <pre>h1 ~ pre</pre>
+ <p>represents a <code>pre</code> element following an <code>h1</code>. It
+ is a correct and valid, but partial, description of:</p>
+ <pre>&lt;h1&gt;Definition of the function a&lt;/h1&gt;
+&lt;p&gt;Function a(x) has to be applied to all figures in the table.&lt;/p&gt;
+&lt;pre&gt;function a(x) = 12x/13.5&lt;/pre&gt;</pre>
+</div>
+
+<h2><a name=specificity>9. Calculating a selector's specificity</a></h2>
+
+<p>A selector's specificity is calculated as follows:</p>
+
+<ul>
+ <li>count the number of ID selectors in the selector (= a)</li>
+ <li>count the number of class selectors, attributes selectors, and pseudo-classes in the selector (= b)</li>
+ <li>count the number of element names in the selector (= c)</li>
+ <li>ignore pseudo-elements</li>
+</ul>
+
+<p>Selectors inside <a href="#negation">the negation pseudo-class</a>
+are counted like any other, but the negation itself does not count as
+a pseudo-class.</p>
+
+<p>Concatenating the three numbers a-b-c (in a number system with a
+large base) gives the specificity.</p>
+
+<div class="example">
+<p>Examples:</p>
+<pre>* /* a=0 b=0 c=0 -&gt; specificity = 0 */
+LI /* a=0 b=0 c=1 -&gt; specificity = 1 */
+UL LI /* a=0 b=0 c=2 -&gt; specificity = 2 */
+UL OL+LI /* a=0 b=0 c=3 -&gt; specificity = 3 */
+H1 + *[REL=up] /* a=0 b=1 c=1 -&gt; specificity = 11 */
+UL OL LI.red /* a=0 b=1 c=3 -&gt; specificity = 13 */
+LI.red.level /* a=0 b=2 c=1 -&gt; specificity = 21 */
+#x34y /* a=1 b=0 c=0 -&gt; specificity = 100 */
+#s12:not(FOO) /* a=1 b=0 c=1 -&gt; specificity = 101 */
+</pre>
+</div>
+
+<p class="note"><strong>Note:</strong> the specificity of the styles
+specified in an HTML <code>style</code> attribute is described in CSS
+2.1. <a href="#refsCSS21">[CSS21]</a>.</p>
+
+<h2><a name=w3cselgrammar>10. The grammar of Selectors</a></h2>
+
+<h3><a name=grammar>10.1. Grammar</a></h3>
+
+<p>The grammar below defines the syntax of Selectors. It is globally
+LL(1) and can be locally LL(2) (but note that most UA's should not use
+it directly, since it doesn't express the parsing conventions). The
+format of the productions is optimized for human consumption and some
+shorthand notations beyond Yacc (see <a href="#refsYACC">[YACC]</a>)
+are used:</p>
+
+<ul>
+ <li><b>*</b>: 0 or more
+ <li><b>+</b>: 1 or more
+ <li><b>?</b>: 0 or 1
+ <li><b>|</b>: separates alternatives
+ <li><b>[ ]</b>: grouping </li>
+</ul>
+
+<p>The productions are:</p>
+
+<pre>selectors_group
+ : selector [ COMMA S* selector ]*
+ ;
+
+selector
+ : simple_selector_sequence [ combinator simple_selector_sequence ]*
+ ;
+
+combinator
+ /* combinators can be surrounded by white space */
+ : PLUS S* | GREATER S* | TILDE S* | S+
+ ;
+
+simple_selector_sequence
+ : [ type_selector | universal ]
+ [ HASH | class | attrib | pseudo | negation ]*
+ | [ HASH | class | attrib | pseudo | negation ]+
+ ;
+
+type_selector
+ : [ namespace_prefix ]? element_name
+ ;
+
+namespace_prefix
+ : [ IDENT | '*' ]? '|'
+ ;
+
+element_name
+ : IDENT
+ ;
+
+universal
+ : [ namespace_prefix ]? '*'
+ ;
+
+class
+ : '.' IDENT
+ ;
+
+attrib
+ : '[' S* [ namespace_prefix ]? IDENT S*
+ [ [ PREFIXMATCH |
+ SUFFIXMATCH |
+ SUBSTRINGMATCH |
+ '=' |
+ INCLUDES |
+ DASHMATCH ] S* [ IDENT | STRING ] S*
+ ]? ']'
+ ;
+
+pseudo
+ /* '::' starts a pseudo-element, ':' a pseudo-class */
+ /* Exceptions: :first-line, :first-letter, :before and :after. */
+ /* Note that pseudo-elements are restricted to one per selector and */
+ /* occur only in the last simple_selector_sequence. */
+ : ':' ':'? [ IDENT | functional_pseudo ]
+ ;
+
+functional_pseudo
+ : FUNCTION S* expression ')'
+ ;
+
+expression
+ /* In CSS3, the expressions are identifiers, strings, */
+ /* or of the form "an+b" */
+ : [ [ PLUS | '-' | DIMENSION | NUMBER | STRING | IDENT ] S* ]+
+ ;
+
+negation
+ : NOT S* negation_arg S* ')'
+ ;
+
+negation_arg
+ : type_selector | universal | HASH | class | attrib | pseudo
+ ;</pre>
+
+
+<h3><a name=lex>10.2. Lexical scanner</a></h3>
+
+<p>The following is the <a name=x3>tokenizer</a>, written in Flex (see
+<a href="#refsFLEX">[FLEX]</a>) notation. The tokenizer is
+case-insensitive.</p>
+
+<p>The two occurrences of "\377" represent the highest character
+number that current versions of Flex can deal with (decimal 255). They
+should be read as "\4177777" (decimal 1114111), which is the highest
+possible code point in Unicode/ISO-10646. <a
+href="#refsUNICODE">[UNICODE]</a></p>
+
+<pre>%option case-insensitive
+
+ident [-]?{nmstart}{nmchar}*
+name {nmchar}+
+nmstart [_a-z]|{nonascii}|{escape}
+nonascii [^\0-\177]
+unicode \\[0-9a-f]{1,6}(\r\n|[ \n\r\t\f])?
+escape {unicode}|\\[^\n\r\f0-9a-f]
+nmchar [_a-z0-9-]|{nonascii}|{escape}
+num [0-9]+|[0-9]*\.[0-9]+
+string {string1}|{string2}
+string1 \"([^\n\r\f\\"]|\\{nl}|{nonascii}|{escape})*\"
+string2 \'([^\n\r\f\\']|\\{nl}|{nonascii}|{escape})*\'
+invalid {invalid1}|{invalid2}
+invalid1 \"([^\n\r\f\\"]|\\{nl}|{nonascii}|{escape})*
+invalid2 \'([^\n\r\f\\']|\\{nl}|{nonascii}|{escape})*
+nl \n|\r\n|\r|\f
+w [ \t\r\n\f]*
+
+%%
+
+[ \t\r\n\f]+ return S;
+
+"~=" return INCLUDES;
+"|=" return DASHMATCH;
+"^=" return PREFIXMATCH;
+"$=" return SUFFIXMATCH;
+"*=" return SUBSTRINGMATCH;
+{ident} return IDENT;
+{string} return STRING;
+{ident}"(" return FUNCTION;
+{num} return NUMBER;
+"#"{name} return HASH;
+{w}"+" return PLUS;
+{w}"&gt;" return GREATER;
+{w}"," return COMMA;
+{w}"~" return TILDE;
+":not(" return NOT;
+@{ident} return ATKEYWORD;
+{invalid} return INVALID;
+{num}% return PERCENTAGE;
+{num}{ident} return DIMENSION;
+"&lt;!--" return CDO;
+"--&gt;" return CDC;
+
+"url("{w}{string}{w}")" return URI;
+"url("{w}([!#$%&*-~]|{nonascii}|{escape})*{w}")" return URI;
+U\+[0-9a-f?]{1,6}(-[0-9a-f]{1,6})? return UNICODE_RANGE;
+
+\/\*[^*]*\*+([^/*][^*]*\*+)*\/ /* ignore comments */
+
+. return *yytext;</pre>
+
+
+
+<h2><a name=downlevel>11. Namespaces and down-level clients</a></h2>
+
+<p>An important issue is the interaction of CSS selectors with XML
+documents in web clients that were produced prior to this
+document. Unfortunately, due to the fact that namespaces must be
+matched based on the URI which identifies the namespace, not the
+namespace prefix, some mechanism is required to identify namespaces in
+CSS by their URI as well. Without such a mechanism, it is impossible
+to construct a CSS style sheet which will properly match selectors in
+all cases against a random set of XML documents. However, given
+complete knowledge of the XML document to which a style sheet is to be
+applied, and a limited use of namespaces within the XML document, it
+is possible to construct a style sheet in which selectors would match
+elements and attributes correctly.</p>
+
+<p>It should be noted that a down-level CSS client will (if it
+properly conforms to CSS forward compatible parsing rules) ignore all
+<code>@namespace</code> at-rules, as well as all style rules that make
+use of namespace qualified element type or attribute selectors. The
+syntax of delimiting namespace prefixes in CSS was deliberately chosen
+so that down-level CSS clients would ignore the style rules rather
+than possibly match them incorrectly.</p>
+
+<p>The use of default namespaces in CSS makes it possible to write
+element type selectors that will function in both namespace aware CSS
+clients as well as down-level clients. It should be noted that
+down-level clients may incorrectly match selectors against XML
+elements in other namespaces.</p>
+
+<p>The following are scenarios and examples in which it is possible to
+construct style sheets which would function properly in web clients
+that do not implement this proposal.</p>
+
+<ol>
+ <li>
+
+ <p>The XML document does not use namespaces.</p>
+
+ <ul>
+
+ <li>In this case, it is obviously not necessary to declare or use
+ namespaces in the style sheet. Standard CSS element type and
+ attribute selectors will function adequately in a down-level
+ client.</li>
+
+ <li>In a CSS namespace aware client, the default behavior of
+ element selectors matching without regard to namespace will
+ function properly against all elements, since no namespaces are
+ present. However, the use of specific element type selectors that
+ match only elements that have no namespace ("<code>|name</code>")
+ will guarantee that selectors will match only XML elements that do
+ not have a declared namespace. </li>
+
+ </ul>
+
+ </li>
+
+ <li>
+
+ <p>The XML document defines a single, default namespace used
+ throughout the document. No namespace prefixes are used in element
+ names.</p>
+
+ <ul>
+
+ <li>In this case, a down-level client will function as if
+ namespaces were not used in the XML document at all. Standard CSS
+ element type and attribute selectors will match against all
+ elements. </li>
+
+ </ul>
+
+ </li>
+
+ <li>
+
+ <p>The XML document does <b>not</b> use a default namespace, all
+ namespace prefixes used are known to the style sheet author, and
+ there is a direct mapping between namespace prefixes and namespace
+ URIs. (A given prefix may only be mapped to one namespace URI
+ throughout the XML document; there may be multiple prefixes mapped
+ to the same URI).</p>
+
+ <ul>
+
+ <li>In this case, the down-level client will view and match
+ element type and attribute selectors based on their fully
+ qualified name, not the local part as outlined in the <a
+ href="#typenmsp">Type selectors and Namespaces</a> section. CSS
+ selectors may be declared using an escaped colon "<code>\:</code>"
+ to describe the fully qualified names, e.g.
+ "<code>html\:h1</code>" will match
+ <code>&lt;html:h1&gt;</code>. Selectors using the qualified name
+ will only match XML elements that use the same prefix. Other
+ namespace prefixes used in the XML that are mapped to the same URI
+ will not match as expected unless additional CSS style rules are
+ declared for them.</li>
+
+ <li>Note that selectors declared in this fashion will
+ <em>only</em> match in down-level clients. A CSS namespace aware
+ client will match element type and attribute selectors based on
+ the name's local part. Selectors declared with the fully
+ qualified name will not match (unless there is no namespace prefix
+ in the fully qualified name).</li>
+
+ </ul>
+
+ </li>
+
+ </ol>
+
+<p>In other scenarios: when the namespace prefixes used in the XML are
+not known in advance by the style sheet author; or a combination of
+elements with no namespace are used in conjunction with elements using
+a default namespace; or the same namespace prefix is mapped to
+<em>different</em> namespace URIs within the same document, or in
+different documents; it is impossible to construct a CSS style sheet
+that will function properly against all elements in those documents,
+unless, the style sheet is written using a namespace URI syntax (as
+outlined in this document or similar) and the document is processed by
+a CSS and XML namespace aware client.</p>
+
+<h2><a name=profiling>12. Profiles</a></h2>
+
+<p>Each specification using Selectors must define the subset of W3C
+Selectors it allows and excludes, and describe the local meaning of
+all the components of that subset.</p>
+
+<p>Non normative examples:
+
+<div class="profile">
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>CSS level 1</td></tr>
+ <tr>
+ <th>Accepts</th>
+ <td>type selectors<br>class selectors<br>ID selectors<br>:link,
+ :visited and :active pseudo-classes<br>descendant combinator
+ <br>::first-line and ::first-letter pseudo-elements</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>
+
+<p>universal selector<br>attribute selectors<br>:hover and :focus
+ pseudo-classes<br>:target pseudo-class<br>:lang() pseudo-class<br>all UI
+ element states pseudo-classes<br>all structural
+ pseudo-classes<br>negation pseudo-class<br>all
+ UI element fragments pseudo-elements<br>::before and ::after
+ pseudo-elements<br>child combinators<br>sibling combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>only one class selector allowed per sequence of simple
+ selectors</td></tr></tbody></table><br><br>
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>CSS level 2</td></tr>
+ <tr>
+ <th>Accepts</th>
+ <td>type selectors<br>universal selector<br>attribute presence and
+ values selectors<br>class selectors<br>ID selectors<br>:link, :visited,
+ :active, :hover, :focus, :lang() and :first-child pseudo-classes
+ <br>descendant combinator<br>child combinator<br>adjacent sibling
+ combinator<br>::first-line and ::first-letter pseudo-elements<br>::before
+ and ::after pseudo-elements</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>
+
+<p>content selectors<br>substring matching attribute
+ selectors<br>:target pseudo-classes<br>all UI element
+ states pseudo-classes<br>all structural pseudo-classes other
+ than :first-child<br>negation pseudo-class<br>all UI element
+ fragments pseudo-elements<br>general sibling combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>more than one class selector per sequence of simple selectors (CSS1
+ constraint) allowed</td></tr></tbody></table>
+
+<p>In CSS, selectors express pattern matching rules that determine which style
+rules apply to elements in the document tree.
+
+<p>The following selector (CSS level 2) will <b>match</b> all anchors <code>a</code>
+with attribute <code>name</code> set inside a section 1 header <code>h1</code>:
+<pre>h1 a[name]</pre>
+
+<p>All CSS declarations attached to such a selector are applied to elements
+matching it. </div>
+
+<div class="profile">
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>STTS 3</td>
+ </tr>
+ <tr>
+ <th>Accepts</th>
+ <td>
+
+<p>type selectors<br>universal selectors<br>attribute selectors<br>class
+ selectors<br>ID selectors<br>all structural pseudo-classes<br>
+ all combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>non-accepted pseudo-classes<br>pseudo-elements<br></td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>some selectors and combinators are not allowed in fragment
+ descriptions on the right side of STTS declarations.</td></tr></tbody></table>
+<form>
+<input type="text" name="test10"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+</form>
+
+<p>Selectors can be used in STTS 3 in two different
+ manners:
+<ol>
+ <li>a selection mechanism equivalent to CSS selection mechanism: declarations
+ attached to a given selector are applied to elements matching that selector,
+ <li>fragment descriptions that appear on the right side of declarations.
+</li></ol></div>
+
+<h2><a name=Conformance></a>13. Conformance and requirements</h2>
+
+<p>This section defines conformance with the present specification only.
+
+<p>The inability of a user agent to implement part of this specification due to
+the limitations of a particular device (e.g., non interactive user agents will
+probably not implement dynamic pseudo-classes because they make no sense without
+interactivity) does not imply non-conformance.
+
+<p>All specifications reusing Selectors must contain a <a
+href="#profiling">Profile</a> listing the
+subset of Selectors it accepts or excludes, and describing the constraints
+it adds to the current specification.
+
+<p>Invalidity is caused by a parsing error, e.g. an unrecognized token or a token
+which is not allowed at the current parsing point.
+
+<p>User agents must observe the rules for handling parsing errors:
+<ul>
+ <li>a simple selector containing an undeclared namespace prefix is invalid</li>
+ <li>a selector containing an invalid simple selector, an invalid combinator
+ or an invalid token is invalid. </li>
+ <li>a group of selectors containing an invalid selector is invalid.</li>
+</ul>
+
+<p class="foo test10 bar">Specifications reusing Selectors must define how to handle parsing
+errors. (In the case of CSS, the entire rule in which the selector is
+used is dropped.)</p>
+
+<!-- Apparently all these references are out of date:
+<p>Implementations of this specification must behave as
+"recipients of text data" as defined by <a href="#refsCWWW">[CWWW]</a>
+when parsing selectors and attempting matches. (In particular,
+implementations must assume the data is normalized and must not
+normalize it.) Normative rules for matching strings are defined in
+<a href="#refsCWWW">[CWWW]</a> and <a
+href="#refsUNICODE">[UNICODE]</a> and apply to implementations of this
+specification.</p>-->
+
+<h2><a name=Tests></a>14. Tests</h2>
+
+<p>This specification has <a
+href="http://www.w3.org/Style/CSS/Test/CSS3/Selectors/current/">a test
+suite</a> allowing user agents to verify their basic conformance to
+the specification. This test suite does not pretend to be exhaustive
+and does not cover all possible combined cases of Selectors.</p>
+
+<h2><a name=ACKS></a>15. Acknowledgements</h2>
+
+<p>The CSS working group would like to thank everyone who has sent
+comments on this specification over the years.</p>
+
+<p>The working group would like to extend special thanks to Donna
+McManus, Justin Baker, Joel Sklar, and Molly Ives Brower who perfermed
+the final editorial review.</p>
+
+<h2><a name=references>16. References</a></h2>
+
+<dl class="refs">
+
+ <dt>[CSS1]
+ <dd><a name=refsCSS1></a> Bert Bos, H&aring;kon Wium Lie; "<cite>Cascading Style Sheets, level 1</cite>", W3C Recommendation, 17 Dec 1996, revised 11 Jan 1999
+ <dd>(<code><a href="http://www.w3.org/TR/REC-CSS1">http://www.w3.org/TR/REC-CSS1</a></code>)
+
+ <dt>[CSS21]
+ <dd><a name=refsCSS21></a> Bert Bos, Tantek &Ccedil;elik, Ian Hickson, H&aring;kon Wium Lie, editors; "<cite>Cascading Style Sheets, level 2 revision 1</cite>", W3C Working Draft, 13 June 2005
+ <dd>(<code><a href="http://www.w3.org/TR/CSS21">http://www.w3.org/TR/CSS21</a></code>)
+
+ <dt>[CWWW]
+ <dd><a name=refsCWWW></a> Martin J. D&uuml;rst, Fran&ccedil;ois Yergeau, Misha Wolf, Asmus Freytag, Tex Texin, editors; "<cite>Character Model for the World Wide Web</cite>", W3C Recommendation, 15 February 2005
+ <dd>(<code><a href="http://www.w3.org/TR/charmod/">http://www.w3.org/TR/charmod/</a></code>)
+
+ <dt>[FLEX]
+ <dd><a name="refsFLEX"></a> "<cite>Flex: The Lexical Scanner Generator</cite>", Version 2.3.7, ISBN 1882114213
+
+ <dt>[HTML4]
+ <dd><a name="refsHTML4"></a> Dave Ragget, Arnaud Le Hors, Ian Jacobs, editors; "<cite>HTML 4.01 Specification</cite>", W3C Recommendation, 24 December 1999
+ <dd>(<a href="http://www.w3.org/TR/html4/"><code>http://www.w3.org/TR/html4/</code></a>)
+
+ <dt>[MATH]
+ <dd><a name="refsMATH"></a> Patrick Ion, Robert Miner, editors; "<cite>Mathematical Markup Language (MathML) 1.01</cite>", W3C Recommendation, revision of 7 July 1999
+ <dd>(<code><a href="http://www.w3.org/TR/REC-MathML/">http://www.w3.org/TR/REC-MathML/</a></code>)
+
+ <dt>[RFC3066]
+ <dd><a name="refsRFC3066"></a> H. Alvestrand; "<cite>Tags for the Identification of Languages</cite>", Request for Comments 3066, January 2001
+ <dd>(<a href="http://www.ietf.org/rfc/rfc3066.txt"><code>http://www.ietf.org/rfc/rfc3066.txt</code></a>)
+
+ <dt>[STTS]
+ <dd><a name=refsSTTS></a> Daniel Glazman; "<cite>Simple Tree Transformation Sheets 3</cite>", Electricit&eacute; de France, submission to the W3C, 11 November 1998
+ <dd>(<code><a href="http://www.w3.org/TR/NOTE-STTS3">http://www.w3.org/TR/NOTE-STTS3</a></code>)
+
+ <dt>[SVG]
+ <dd><a name="refsSVG"></a> Jon Ferraiolo, &#34276;&#27810; &#28147;, Dean Jackson, editors; "<cite>Scalable Vector Graphics (SVG) 1.1 Specification</cite>", W3C Recommendation, 14 January 2003
+ <dd>(<code><a href="http://www.w3.org/TR/SVG/">http://www.w3.org/TR/SVG/</a></code>)
+
+ <dt>[UNICODE]</dt>
+ <dd><a name="refsUNICODE"></a> <cite><a
+ href="http://www.unicode.org/versions/Unicode4.1.0/">The Unicode Standard, Version 4.1</a></cite>, The Unicode Consortium. Boston, MA, Addison-Wesley, March 2005. ISBN 0-321-18578-1, as amended by <a href="http://www.unicode.org/versions/Unicode4.0.1/">Unicode 4.0.1</a> and <a href="http://www.unicode.org/versions/Unicode4.1.0/">Unicode 4.1.0</a>.
+ <dd>(<code><a href="http://www.unicode.org/versions/">http://www.unicode.org/versions/</a></code>)</dd>
+
+ <dt>[XML10]
+ <dd><a name="refsXML10"></a> Tim Bray, Jean Paoli, C. M. Sperberg-McQueen, Eve Maler, Fran&ccedil;ois Yergeau, editors; "<cite>Extensible Markup Language (XML) 1.0 (Third Edition)</cite>", W3C Recommendation, 4 February 2004
+ <dd>(<a href="http://www.w3.org/TR/REC-xml/"><code>http://www.w3.org/TR/REC-xml/</code></a>)
+
+ <dt>[XMLNAMES]
+ <dd><a name="refsXMLNAMES"></a> Tim Bray, Dave Hollander, Andrew Layman, editors; "<cite>Namespaces in XML</cite>", W3C Recommendation, 14 January 1999
+ <dd>(<a href="http://www.w3.org/TR/REC-xml-names/"><code>http://www.w3.org/TR/REC-xml-names/</code></a>)
+
+ <dt>[YACC]
+ <dd><a name="refsYACC"></a> S. C. Johnson; "<cite>YACC &mdash; Yet another compiler compiler</cite>", Technical Report, Murray Hill, 1975
+
+</dl>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/jslib-modify-jquery.html b/testing/talos/talos/tests/dromaeo/tests/jslib-modify-jquery.html
new file mode 100644
index 0000000000..345f031faf
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/jslib-modify-jquery.html
@@ -0,0 +1,2960 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script src="../lib/jquery.js"></script>
+<script>
+window.onload = function(){
+startTest("jslib-modify-jquery", '0e3fac95');
+
+// Try to force real results
+var ret, tmp, div, a, dd;
+
+var html = document.body.innerHTML,
+ elem = document.createElement("div"),
+ elem2 = document.createElement("strong"),
+ elemStr = "<strong>some text</strong>";
+
+ prep(function(){
+ a = jQuery("a");
+ dd = jQuery("dd");
+ div = jQuery("div");
+ var tmp = document.createElement("div");
+ tmp.innerHTML = html;
+ document.body.appendChild( tmp );
+ });
+
+ /* // Need to find a good way to test this
+ test("jQuery - wrap()", function(){
+ div.wrap( elem );
+ });
+ */
+
+ test("jQuery - html()", function(){
+ dd.html( elemStr );
+ });
+
+ test("jQuery - before()", function(){
+ div.before( elemStr );
+ });
+
+ test("jQuery - after()", function(){
+ div.before( elemStr );
+ });
+
+ test("jQuery - prepend()", function(){
+ div.prepend( elemStr );
+ });
+
+ test("jQuery - append()", function(){
+ div.append( elemStr );
+ });
+
+ /* // Need a good way to test
+ test("jQuery - replaceWith()", function(){
+ div.replaceWith( elem );
+ });
+
+ test("jQuery - remove()", function(){
+ div.remove();
+ });
+ */
+
+endTest();
+};
+</script>
+</head>
+<body>
+ <div class="head">
+ <p><a href="http://www.w3.org/"><img height=48 alt=W3C src="w3c_home.png" width=72></a>
+
+ <h1 id="title">Selectors</h1>
+
+ <h2>W3C Working Draft 15 December 2005</h2>
+
+ <dl>
+
+ <dt>This version:
+
+ <dd><a href="http://www.w3.org/TR/2005/WD-css3-selectors-20051215">
+ http://www.w3.org/TR/2005/WD-css3-selectors-20051215</a>
+
+ <dt>Latest version:
+
+ <dd><a href="http://www.w3.org/TR/css3-selectors">
+ http://www.w3.org/TR/css3-selectors</a>
+
+ <dt>Previous version:
+
+ <dd><a href="http://www.w3.org/TR/2001/CR-css3-selectors-20011113">
+ http://www.w3.org/TR/2001/CR-css3-selectors-20011113</a>
+
+ <dt><a name=editors-list></a>Editors:
+
+ <dd class="vcard"><span class="fn">Daniel Glazman</span> (Invited Expert)</dd>
+
+ <dd class="vcard"><a lang="tr" class="url fn" href="http://www.tantek.com/">Tantek &Ccedil;elik</a> (Invited Expert)
+
+ <dd class="vcard"><a href="mailto:ian@hixie.ch" class="url fn">Ian Hickson</a> (<span
+ class="company"><a href="http://www.google.com/">Google</a></span>)
+
+ <dd class="vcard"><span class="fn">Peter Linss</span> (former editor, <span class="company"><a
+ href="http://www.netscape.com/">Netscape/AOL</a></span>)
+
+ <dd class="vcard"><span class="fn">John Williams</span> (former editor, <span class="company"><a
+ href="http://www.quark.com/">Quark, Inc.</a></span>)
+
+ </dl>
+
+ <p class="copyright"><a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright">
+ Copyright</a> &copy; 2005 <a href="http://www.w3.org/"><abbr
+ title="World Wide Web Consortium">W3C</abbr></a><sup>&reg;</sup>
+ (<a href="http://www.csail.mit.edu/"><abbr title="Massachusetts
+ Institute of Technology">MIT</abbr></a>, <a
+ href="http://www.ercim.org/"><acronym title="European Research
+ Consortium for Informatics and Mathematics">ERCIM</acronym></a>, <a
+ href="http://www.keio.ac.jp/">Keio</a>), All Rights Reserved. W3C
+ <a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">liability</a>,
+ <a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">trademark</a>,
+ <a
+ href="http://www.w3.org/Consortium/Legal/copyright-documents">document
+ use</a> rules apply.
+
+ <hr title="Separator for header">
+
+ </div>
+
+ <h2><a name=abstract></a>Abstract</h2>
+
+ <p><em>Selectors</em> are patterns that match against elements in a
+ tree. Selectors have been optimized for use with HTML and XML, and
+ are designed to be usable in performance-critical code.</p>
+
+ <p><acronym title="Cascading Style Sheets">CSS</acronym> (Cascading
+ Style Sheets) is a language for describing the rendering of <acronym
+ title="Hypertext Markup Language">HTML</acronym> and <acronym
+ title="Extensible Markup Language">XML</acronym> documents on
+ screen, on paper, in speech, etc. CSS uses Selectors for binding
+ style properties to elements in the document. This document
+ describes extensions to the selectors defined in CSS level 2. These
+ extended selectors will be used by CSS level 3.
+
+ <p>Selectors define the following function:</p>
+
+ <pre>expression &#x2217; element &rarr; boolean</pre>
+
+ <p>That is, given an element and a selector, this specification
+ defines whether that element matches the selector.</p>
+
+ <p>These expressions can also be used, for instance, to select a set
+ of elements, or a single element from a set of elements, by
+ evaluating the expression across all the elements in a
+ subtree. <acronym title="Simple Tree Transformation
+ Sheets">STTS</acronym> (Simple Tree Transformation Sheets), a
+ language for transforming XML trees, uses this mechanism. <a href="#refsSTTS">[STTS]</a></p>
+
+ <h2><a name=status></a>Status of this document</h2>
+
+ <p><em>This section describes the status of this document at the
+ time of its publication. Other documents may supersede this
+ document. A list of current W3C publications and the latest revision
+ of this technical report can be found in the <a
+ href="http://www.w3.org/TR/">W3C technical reports index at
+ http://www.w3.org/TR/.</a></em></p>
+
+ <p>This document describes the selectors that already exist in <a
+ href="#refsCSS1"><abbr title="CSS level 1">CSS1</abbr></a> and <a
+ href="#refsCSS21"><abbr title="CSS level 2">CSS2</abbr></a>, and
+ also proposes new selectors for <abbr title="CSS level
+ 3">CSS3</abbr> and other languages that may need them.</p>
+
+ <p>The CSS Working Group doesn't expect that all implementations of
+ CSS3 will have to implement all selectors. Instead, there will
+ probably be a small number of variants of CSS3, called profiles. For
+ example, it may be that only a profile for interactive user agents
+ will include all of the selectors.</p>
+
+ <p>This specification is a last call working draft for the the <a
+ href="http://www.w3.org/Style/CSS/members">CSS Working Group</a>
+ (<a href="/Style/">Style Activity</a>). This
+ document is a revision of the <a
+ href="http://www.w3.org/TR/2001/CR-css3-selectors-20011113/">Candidate
+ Recommendation dated 2001 November 13</a>, and has incorporated
+ implementation feedback received in the past few years. It is
+ expected that this last call will proceed straight to Proposed
+ Recommendation stage since it is believed that interoperability will
+ be demonstrable.</p>
+
+ <p>All persons are encouraged to review and implement this
+ specification and return comments to the (<a
+ href="http://lists.w3.org/Archives/Public/www-style/">archived</a>)
+ public mailing list <a
+ href="http://www.w3.org/Mail/Lists.html#www-style">www-style</a>
+ (see <a href="http://www.w3.org/Mail/Request">instructions</a>). W3C
+ Members can also send comments directly to the CSS Working
+ Group.
+ The deadline for comments is 14 January 2006.</p>
+
+ <p>This is still a draft document and may be updated, replaced, or
+ obsoleted by other documents at any time. It is inappropriate to
+ cite a W3C Working Draft as other than &quot;work in progress&quot;.
+
+ <p>This document may be available in <a
+ href="http://www.w3.org/Style/css3-selectors-updates/translations">translation</a>.
+ The English version of this specification is the only normative
+ version.
+
+ <div class="subtoc">
+
+ <h2 id="test10"><a name=contents>Table of contents</a></h2>
+
+ <ul class="toc">
+ <li class="tocline2"><a href="#context">1. Introduction</a>
+ <ul>
+ <li><a href="#dependencies">1.1. Dependencies</a> </li>
+ <li><a href="#terminology">1.2. Terminology</a> </li>
+ <li><a href="#changesFromCSS2">1.3. Changes from CSS2</a> </li>
+ </ul>
+ <li class="tocline2"><a href="#selectors">2. Selectors</a>
+ <li class="tocline2"><a href="#casesens">3. Case sensitivity</a>
+ <li class="tocline2"><a href="#selector-syntax">4. Selector syntax</a>
+ <li class="tocline2"><a href="#grouping">5. Groups of selectors</a>
+ <li class="tocline2"><a href="#simple-selectors">6. Simple selectors</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#type-selectors">6.1. Type selectors</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#typenmsp">6.1.1. Type selectors and namespaces</a></li>
+ </ul>
+ <li class="tocline3"><a href="#universal-selector">6.2. Universal selector</a>
+ <ul>
+ <li><a href="#univnmsp">6.2.1. Universal selector and namespaces</a></li>
+ </ul>
+ <li class="tocline3"><a href="#attribute-selectors">6.3. Attribute selectors</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#attribute-representation">6.3.1. Representation of attributes and attributes values</a>
+ <li><a href="#attribute-substrings">6.3.2. Substring matching attribute selectors</a>
+ <li class="tocline4"><a href="#attrnmsp">6.3.3. Attribute selectors and namespaces</a>
+ <li class="tocline4"><a href="#def-values">6.3.4. Default attribute values in DTDs</a></li>
+ </ul>
+ <li class="tocline3"><a href="#class-html">6.4. Class selectors</a>
+ <li class="tocline3"><a href="#id-selectors">6.5. ID selectors</a>
+ <li class="tocline3"><a href="#pseudo-classes">6.6. Pseudo-classes</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#dynamic-pseudos">6.6.1. Dynamic pseudo-classes</a>
+ <li class="tocline4"><a href="#target-pseudo">6.6.2. The :target pseudo-class</a>
+ <li class="tocline4"><a href="#lang-pseudo">6.6.3. The :lang() pseudo-class</a>
+ <li class="tocline4"><a href="#UIstates">6.6.4. UI element states pseudo-classes</a>
+ <li class="tocline4"><a href="#structural-pseudos">6.6.5. Structural pseudo-classes</a>
+ <ul>
+ <li><a href="#root-pseudo">:root pseudo-class</a>
+ <li><a href="#nth-child-pseudo">:nth-child() pseudo-class</a>
+ <li><a href="#nth-last-child-pseudo">:nth-last-child()</a>
+ <li><a href="#nth-of-type-pseudo">:nth-of-type() pseudo-class</a>
+ <li><a href="#nth-last-of-type-pseudo">:nth-last-of-type()</a>
+ <li><a href="#first-child-pseudo">:first-child pseudo-class</a>
+ <li><a href="#last-child-pseudo">:last-child pseudo-class</a>
+ <li><a href="#first-of-type-pseudo">:first-of-type pseudo-class</a>
+ <li><a href="#last-of-type-pseudo">:last-of-type pseudo-class</a>
+ <li><a href="#only-child-pseudo">:only-child pseudo-class</a>
+ <li><a href="#only-of-type-pseudo">:only-of-type pseudo-class</a>
+ <li><a href="#empty-pseudo">:empty pseudo-class</a></li>
+ </ul>
+ <li class="tocline4"><a href="#negation">6.6.7. The negation pseudo-class</a></li>
+ </ul>
+ </li>
+ </ul>
+ <li><a href="#pseudo-elements">7. Pseudo-elements</a>
+ <ul>
+ <li><a href="#first-line">7.1. The ::first-line pseudo-element</a>
+ <li><a href="#first-letter">7.2. The ::first-letter pseudo-element</a>
+ <li><a href="#UIfragments">7.3. The ::selection pseudo-element</a>
+ <li><a href="#gen-content">7.4. The ::before and ::after pseudo-elements</a></li>
+ </ul>
+ <li class="tocline2"><a href="#combinators">8. Combinators</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#descendant-combinators">8.1. Descendant combinators</a>
+ <li class="tocline3"><a href="#child-combinators">8.2. Child combinators</a>
+ <li class="tocline3"><a href="#sibling-combinators">8.3. Sibling combinators</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#adjacent-sibling-combinators">8.3.1. Adjacent sibling combinator</a>
+ <li class="tocline4"><a href="#general-sibling-combinators">8.3.2. General sibling combinator</a></li>
+ </ul>
+ </li>
+ </ul>
+ <li class="tocline2"><a href="#specificity">9. Calculating a selector's specificity</a>
+ <li class="tocline2"><a href="#w3cselgrammar">10. The grammar of Selectors</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#grammar">10.1. Grammar</a>
+ <li class="tocline3"><a href="#lex">10.2. Lexical scanner</a></li>
+ </ul>
+ <li class="tocline2"><a href="#downlevel">11. Namespaces and down-level clients</a>
+ <li class="tocline2"><a href="#profiling">12. Profiles</a>
+ <li><a href="#Conformance">13. Conformance and requirements</a>
+ <li><a href="#Tests">14. Tests</a>
+ <li><a href="#ACKS">15. Acknowledgements</a>
+ <li class="tocline2"><a href="#references">16. References</a>
+ </ul>
+
+ </div>
+
+ <h2><a name=context>1. Introduction</a></h2>
+
+ <h3><a name=dependencies></a>1.1. Dependencies</h3>
+
+ <p>Some features of this specification are specific to CSS, or have
+ particular limitations or rules specific to CSS. In this
+ specification, these have been described in terms of CSS2.1. <a
+ href="#refsCSS21">[CSS21]</a></p>
+
+ <h3><a name=terminology></a>1.2. Terminology</h3>
+
+ <p>All of the text of this specification is normative except
+ examples, notes, and sections explicitly marked as
+ non-normative.</p>
+
+ <h3><a name=changesFromCSS2></a>1.3. Changes from CSS2</h3>
+
+ <p><em>This section is non-normative.</em></p>
+
+ <p>The main differences between the selectors in CSS2 and those in
+ Selectors are:
+
+ <ul>
+
+ <li>the list of basic definitions (selector, group of selectors,
+ simple selector, etc.) has been changed; in particular, what was
+ referred to in CSS2 as a simple selector is now called a sequence
+ of simple selectors, and the term "simple selector" is now used for
+ the components of this sequence</li>
+
+ <li>an optional namespace component is now allowed in type element
+ selectors, the universal selector and attribute selectors</li>
+
+ <li>a <a href="#general-sibling-combinators">new combinator</a> has been introduced</li>
+
+ <li>new simple selectors including substring matching attribute
+ selectors, and new pseudo-classes</li>
+
+ <li>new pseudo-elements, and introduction of the "::" convention
+ for pseudo-elements</li>
+
+ <li>the grammar has been rewritten</li>
+
+ <li>profiles to be added to specifications integrating Selectors
+ and defining the set of selectors which is actually supported by
+ each specification</li>
+
+ <li>Selectors are now a CSS3 Module and an independent
+ specification; other specifications can now refer to this document
+ independently of CSS</li>
+
+ <li>the specification now has its own test suite</li>
+
+ </ul>
+
+<h2><a name=selectors></a>2. Selectors</h2>
+
+<p><em>This section is non-normative, as it merely summarizes the
+following sections.</em></p>
+
+<p>A Selector represents a structure. This structure can be used as a
+condition (e.g. in a CSS rule) that determines which elements a
+selector matches in the document tree, or as a flat description of the
+HTML or XML fragment corresponding to that structure.</p>
+
+<p>Selectors may range from simple element names to rich contextual
+representations.</p>
+
+<p>The following table summarizes the Selector syntax:</p>
+
+<table class="selectorsReview">
+ <thead>
+ <tr>
+ <th class="pattern">Pattern</th>
+ <th class="meaning">Meaning</th>
+ <th class="described">Described in section</th>
+ <th class="origin">First defined in CSS level</th></tr>
+ <tbody>
+ <tr>
+ <td class="pattern">*</td>
+ <td class="meaning">any element</td>
+ <td class="described"><a
+ href="#universal-selector">Universal
+ selector</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E</td>
+ <td class="meaning">an element of type E</td>
+ <td class="described"><a
+ href="#type-selectors">Type selector</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E[foo]</td>
+ <td class="meaning">an E element with a "foo" attribute</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value is exactly
+ equal to "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo~="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value is a list of
+ space-separated values, one of which is exactly equal to "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo^="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value begins exactly
+ with the string "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[foo$="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value ends exactly
+ with the string "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[foo*="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value contains the
+ substring "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[hreflang|="en"]</td>
+ <td class="meaning">an E element whose "hreflang" attribute has a hyphen-separated
+ list of values beginning (from the left) with "en"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:root</td>
+ <td class="meaning">an E element, root of the document</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-child(n)</td>
+ <td class="meaning">an E element, the n-th child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-last-child(n)</td>
+ <td class="meaning">an E element, the n-th child of its parent, counting
+ from the last one</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-of-type(n)</td>
+ <td class="meaning">an E element, the n-th sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-last-of-type(n)</td>
+ <td class="meaning">an E element, the n-th sibling of its type, counting
+ from the last one</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:first-child</td>
+ <td class="meaning">an E element, first child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:last-child</td>
+ <td class="meaning">an E element, last child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:first-of-type</td>
+ <td class="meaning">an E element, first sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:last-of-type</td>
+ <td class="meaning">an E element, last sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:only-child</td>
+ <td class="meaning">an E element, only child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:only-of-type</td>
+ <td class="meaning">an E element, only sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:empty</td>
+ <td class="meaning">an E element that has no children (including text
+ nodes)</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:link<br>E:visited</td>
+ <td class="meaning">an E element being the source anchor of a hyperlink of
+ which the target is not yet visited (:link) or already visited
+ (:visited)</td>
+ <td class="described"><a
+ href="#link">The link
+ pseudo-classes</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E:active<br>E:hover<br>E:focus</td>
+ <td class="meaning">an E element during certain user actions</td>
+ <td class="described"><a
+ href="#useraction-pseudos">The user
+ action pseudo-classes</a></td>
+ <td class="origin">1 and 2</td></tr>
+ <tr>
+ <td class="pattern">E:target</td>
+ <td class="meaning">an E element being the target of the referring URI</td>
+ <td class="described"><a
+ href="#target-pseudo">The target
+ pseudo-class</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:lang(fr)</td>
+ <td class="meaning">an element of type E in language "fr" (the document
+ language specifies how language is determined)</td>
+ <td class="described"><a
+ href="#lang-pseudo">The :lang()
+ pseudo-class</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:enabled<br>E:disabled</td>
+ <td class="meaning">a user interface element E which is enabled or
+ disabled</td>
+ <td class="described"><a
+ href="#UIstates">The UI element states
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:checked<!--<br>E:indeterminate--></td>
+ <td class="meaning">a user interface element E which is checked<!-- or in an
+ indeterminate state--> (for instance a radio-button or checkbox)</td>
+ <td class="described"><a
+ href="#UIstates">The UI element states
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E::first-line</td>
+ <td class="meaning">the first formatted line of an E element</td>
+ <td class="described"><a
+ href="#first-line">The ::first-line
+ pseudo-element</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E::first-letter</td>
+ <td class="meaning">the first formatted letter of an E element</td>
+ <td class="described"><a
+ href="#first-letter">The ::first-letter
+ pseudo-element</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E::selection</td>
+ <td class="meaning">the portion of an E element that is currently
+ selected/highlighted by the user</td>
+ <td class="described"><a
+ href="#UIfragments">The UI element
+ fragments pseudo-elements</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E::before</td>
+ <td class="meaning">generated content before an E element</td>
+ <td class="described"><a
+ href="#gen-content">The ::before
+ pseudo-element</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E::after</td>
+ <td class="meaning">generated content after an E element</td>
+ <td class="described"><a
+ href="#gen-content">The ::after
+ pseudo-element</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E.warning</td>
+ <td class="meaning">an E element whose class is
+"warning" (the document language specifies how class is determined).</td>
+ <td class="described"><a
+ href="#class-html">Class
+ selectors</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E#myid</td>
+ <td class="meaning">an E element with ID equal to "myid".</td>
+ <td class="described"><a
+ href="#id-selectors">ID
+ selectors</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E:not(s)</td>
+ <td class="meaning">an E element that does not match simple selector s</td>
+ <td class="described"><a
+ href="#negation">Negation
+ pseudo-class</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E F</td>
+ <td class="meaning">an F element descendant of an E element</td>
+ <td class="described"><a
+ href="#descendant-combinators">Descendant
+ combinator</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E &gt; F</td>
+ <td class="meaning">an F element child of an E element</td>
+ <td class="described"><a
+ href="#child-combinators">Child
+ combinator</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E + F</td>
+ <td class="meaning">an F element immediately preceded by an E element</td>
+ <td class="described"><a
+ href="#adjacent-sibling-combinators">Adjacent sibling combinator</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E ~ F</td>
+ <td class="meaning">an F element preceded by an E element</td>
+ <td class="described"><a
+ href="#general-sibling-combinators">General sibling combinator</a></td>
+ <td class="origin">3</td></tr></tbody></table>
+
+<p>The meaning of each selector is derived from the table above by
+prepending "matches" to the contents of each cell in the "Meaning"
+column.</p>
+
+<h2><a name=casesens>3. Case sensitivity</a></h2>
+
+<p>The case sensitivity of document language element names, attribute
+names, and attribute values in selectors depends on the document
+language. For example, in HTML, element names are case-insensitive,
+but in XML, they are case-sensitive.</p>
+
+<h2><a name=selector-syntax>4. Selector syntax</a></h2>
+
+<p>A <dfn><a name=selector>selector</a></dfn> is a chain of one
+or more <a href="#sequence">sequences of simple selectors</a>
+separated by <a href="#combinators">combinators</a>.</p>
+
+<p>A <dfn><a name=sequence>sequence of simple selectors</a></dfn>
+is a chain of <a href="#simple-selectors-dfn">simple selectors</a>
+that are not separated by a <a href="#combinators">combinator</a>. It
+always begins with a <a href="#type-selectors">type selector</a> or a
+<a href="#universal-selector">universal selector</a>. No other type
+selector or universal selector is allowed in the sequence.</p>
+
+<p>A <dfn><a name=simple-selectors-dfn></a><a
+href="#simple-selectors">simple selector</a></dfn> is either a <a
+href="#type-selectors">type selector</a>, <a
+href="#universal-selector">universal selector</a>, <a
+href="#attribute-selectors">attribute selector</a>, <a
+href="#class-html">class selector</a>, <a
+href="#id-selectors">ID selector</a>, <a
+href="#content-selectors">content selector</a>, or <a
+href="#pseudo-classes">pseudo-class</a>. One <a
+href="#pseudo-elements">pseudo-element</a> may be appended to the last
+sequence of simple selectors.</p>
+
+<p><dfn>Combinators</dfn> are: white space, &quot;greater-than
+sign&quot; (U+003E, <code>&gt;</code>), &quot;plus sign&quot; (U+002B,
+<code>+</code>) and &quot;tilde&quot; (U+007E, <code>~</code>). White
+space may appear between a combinator and the simple selectors around
+it. <a name=whitespace></a>Only the characters "space" (U+0020), "tab"
+(U+0009), "line feed" (U+000A), "carriage return" (U+000D), and "form
+feed" (U+000C) can occur in white space. Other space-like characters,
+such as "em-space" (U+2003) and "ideographic space" (U+3000), are
+never part of white space.</p>
+
+<p>The elements of a document tree that are represented by a selector
+are the <dfn><a name=subject></a>subjects of the selector</dfn>. A
+selector consisting of a single sequence of simple selectors
+represents any element satisfying its requirements. Prepending another
+sequence of simple selectors and a combinator to a sequence imposes
+additional matching constraints, so the subjects of a selector are
+always a subset of the elements represented by the last sequence of
+simple selectors.</p>
+
+<p>An empty selector, containing no sequence of simple selectors and
+no pseudo-element, is an <a href="#Conformance">invalid
+selector</a>.</p>
+
+<h2><a name=grouping>5. Groups of selectors</a></h2>
+
+<p>When several selectors share the same declarations, they may be
+grouped into a comma-separated list. (A comma is U+002C.)</p>
+
+<div class="example">
+<p>CSS examples:</p>
+<p>In this example, we condense three rules with identical
+declarations into one. Thus,</p>
+<pre>h1 { font-family: sans-serif }
+h2 { font-family: sans-serif }
+h3 { font-family: sans-serif }</pre>
+<p>is equivalent to:</p>
+<pre>h1, h2, h3 { font-family: sans-serif }</pre>
+</div>
+
+<p><strong>Warning</strong>: the equivalence is true in this example
+because all the selectors are valid selectors. If just one of these
+selectors were invalid, the entire group of selectors would be
+invalid. This would invalidate the rule for all three heading
+elements, whereas in the former case only one of the three individual
+heading rules would be invalidated.</p>
+
+
+<h2><a name=simple-selectors>6. Simple selectors</a></h2>
+
+<h3><a name=type-selectors>6.1. Type selector</a></h3>
+
+<p>A <dfn>type selector</dfn> is the name of a document language
+element type. A type selector represents an instance of the element
+type in the document tree.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents an <code>h1</code> element in the document tree:</p>
+ <pre>h1</pre>
+</div>
+
+
+<h4><a name=typenmsp>6.1.1. Type selectors and namespaces</a></h4>
+
+<p>Type selectors allow an optional namespace (<a
+href="#refsXMLNAMES">[XMLNAMES]</a>) component. A namespace prefix
+that has been previously declared may be prepended to the element name
+separated by the namespace separator &quot;vertical bar&quot;
+(U+007C, <code>|</code>).</p>
+
+<p>The namespace component may be left empty to indicate that the
+selector is only to represent elements with no declared namespace.</p>
+
+<p>An asterisk may be used for the namespace prefix, indicating that
+the selector represents elements in any namespace (including elements
+with no namespace).</p>
+
+<p>Element type selectors that have no namespace component (no
+namespace separator), represent elements without regard to the
+element's namespace (equivalent to "<code>*|</code>") unless a default
+namespace has been declared. If a default namespace has been declared,
+the selector will represent only elements in the default
+namespace.</p>
+
+<p>A type selector containing a namespace prefix that has not been
+previously declared is an <a href="#Conformance">invalid</a> selector.
+The mechanism for declaring a namespace prefix is left up to the
+language implementing Selectors. In CSS, such a mechanism is defined
+in the General Syntax module.</p>
+
+<p>In a namespace-aware client, element type selectors will only match
+against the <a
+href="http://www.w3.org/TR/REC-xml-names/#NT-LocalPart">local part</a>
+of the element's <a
+href="http://www.w3.org/TR/REC-xml-names/#ns-qualnames">qualified
+name</a>. See <a href="#downlevel">below</a> for notes about matching
+behaviors in down-level clients.</p>
+
+<p>In summary:</p>
+
+<dl>
+ <dt><code>ns|E</code></dt>
+ <dd>elements with name E in namespace ns</dd>
+ <dt><code>*|E</code></dt>
+ <dd>elements with name E in any namespace, including those without any
+ declared namespace</dd>
+ <dt><code>|E</code></dt>
+ <dd>elements with name E without any declared namespace</dd>
+ <dt><code>E</code></dt>
+ <dd>if no default namespace has been specified, this is equivalent to *|E.
+ Otherwise it is equivalent to ns|E where ns is the default namespace.</dd>
+</dl>
+
+<div class="example">
+ <p>CSS examples:</p>
+
+ <pre>@namespace foo url(http://www.example.com);
+ foo|h1 { color: blue }
+ foo|* { color: yellow }
+ |h1 { color: red }
+ *|h1 { color: green }
+ h1 { color: green }</pre>
+
+ <p>The first rule will match only <code>h1</code> elements in the
+ "http://www.example.com" namespace.</p>
+
+ <p>The second rule will match all elements in the
+ "http://www.example.com" namespace.</p>
+
+ <p>The third rule will match only <code>h1</code> elements without
+ any declared namespace.</p>
+
+ <p>The fourth rule will match <code>h1</code> elements in any
+ namespace (including those without any declared namespace).</p>
+
+ <p>The last rule is equivalent to the fourth rule because no default
+ namespace has been defined.</p>
+
+</div>
+
+<h3><a name=universal-selector>6.2. Universal selector</a> </h3>
+
+<p>The <dfn>universal selector</dfn>, written &quot;asterisk&quot;
+(<code>*</code>), represents the qualified name of any element
+type. It represents any single element in the document tree in any
+namespace (including those without any declared namespace) if no
+default namespace has been specified. If a default namespace has been
+specified, see <a href="#univnmsp">Universal selector and
+Namespaces</a> below.</p>
+
+<p>If the universal selector is not the only component of a sequence
+of simple selectors, the <code>*</code> may be omitted.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <ul>
+ <li><code>*[hreflang|=en]</code> and <code>[hreflang|=en]</code> are equivalent,</li>
+ <li><code>*.warning</code> and <code>.warning</code> are equivalent,</li>
+ <li><code>*#myid</code> and <code>#myid</code> are equivalent.</li>
+ </ul>
+</div>
+
+<p class="note"><strong>Note:</strong> it is recommended that the
+<code>*</code>, representing the universal selector, not be
+omitted.</p>
+
+<h4><a name=univnmsp>6.2.1. Universal selector and namespaces</a></h4>
+
+<p>The universal selector allows an optional namespace component. It
+is used as follows:</p>
+
+<dl>
+ <dt><code>ns|*</code></dt>
+ <dd>all elements in namespace ns</dd>
+ <dt><code>*|*</code></dt>
+ <dd>all elements</dd>
+ <dt><code>|*</code></dt>
+ <dd>all elements without any declared namespace</dd>
+ <dt><code>*</code></dt>
+ <dd>if no default namespace has been specified, this is equivalent to *|*.
+ Otherwise it is equivalent to ns|* where ns is the default namespace.</dd>
+</dl>
+
+<p>A universal selector containing a namespace prefix that has not
+been previously declared is an <a href="#Conformance">invalid</a>
+selector. The mechanism for declaring a namespace prefix is left up
+to the language implementing Selectors. In CSS, such a mechanism is
+defined in the General Syntax module.</p>
+
+
+<h3><a name=attribute-selectors>6.3. Attribute selectors</a></h3>
+
+<p>Selectors allow the representation of an element's attributes. When
+a selector is used as an expression to match against an element,
+attribute selectors must be considered to match an element if that
+element has an attribute that matches the attribute represented by the
+attribute selector.</p>
+
+<h4><a name=attribute-representation>6.3.1. Attribute presence and values
+selectors</a></h4>
+
+<p>CSS2 introduced four attribute selectors:</p>
+
+<dl>
+ <dt><code>[att]</code>
+ <dd>Represents an element with the <code>att</code> attribute, whatever the value of
+ the attribute.</dd>
+ <dt><code>[att=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value is exactly
+ "val".</dd>
+ <dt><code>[att~=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value is a <a
+ href="#whitespace">whitespace</a>-separated list of words, one of
+ which is exactly "val". If "val" contains whitespace, it will never
+ represent anything (since the words are <em>separated</em> by
+ spaces).</dd>
+ <dt><code>[att|=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute, its value either
+ being exactly "val" or beginning with "val" immediately followed by
+ "-" (U+002D). This is primarily intended to allow language subcode
+ matches (e.g., the <code>hreflang</code> attribute on the
+ <code>link</code> element in HTML) as described in RFC 3066 (<a
+ href="#refsRFC3066">[RFC3066]</a>). For <code>lang</code> (or
+ <code>xml:lang</code>) language subcode matching, please see <a
+ href="#lang-pseudo">the <code>:lang</code> pseudo-class</a>.</dd>
+</dl>
+
+<p>Attribute values must be identifiers or strings. The
+case-sensitivity of attribute names and values in selectors depends on
+the document language.</p>
+
+<div class="example">
+
+ <p>Examples:</p>
+
+ <p>The following attribute selector represents an <code>h1</code>
+ element that carries the <code>title</code> attribute, whatever its
+ value:</p>
+
+ <pre>h1[title]</pre>
+
+ <p>In the following example, the selector represents a
+ <code>span</code> element whose <code>class</code> attribute has
+ exactly the value "example":</p>
+
+ <pre>span[class="example"]</pre>
+
+ <p>Multiple attribute selectors can be used to represent several
+ attributes of an element, or several conditions on the same
+ attribute. Here, the selector represents a <code>span</code> element
+ whose <code>hello</code> attribute has exactly the value "Cleveland"
+ and whose <code>goodbye</code> attribute has exactly the value
+ "Columbus":</p>
+
+ <pre>span[hello="Cleveland"][goodbye="Columbus"]</pre>
+
+ <p>The following selectors illustrate the differences between "="
+ and "~=". The first selector will represent, for example, the value
+ "copyright copyleft copyeditor" on a <code>rel</code> attribute. The
+ second selector will only represent an <code>a</code> element with
+ an <code>href</code> attribute having the exact value
+ "http://www.w3.org/".</p>
+
+ <pre>a[rel~="copyright"]
+a[href="http://www.w3.org/"]</pre>
+
+ <p>The following selector represents a <code>link</code> element
+ whose <code>hreflang</code> attribute is exactly "fr".</p>
+
+ <pre>link[hreflang=fr]</pre>
+
+ <p>The following selector represents a <code>link</code> element for
+ which the values of the <code>hreflang</code> attribute begins with
+ "en", including "en", "en-US", and "en-cockney":</p>
+
+ <pre>link[hreflang|="en"]</pre>
+
+ <p>Similarly, the following selectors represents a
+ <code>DIALOGUE</code> element whenever it has one of two different
+ values for an attribute <code>character</code>:</p>
+
+ <pre>DIALOGUE[character=romeo]
+DIALOGUE[character=juliet]</pre>
+
+</div>
+
+<h4><a name=attribute-substrings></a>6.3.2. Substring matching attribute
+selectors</h4>
+
+<p>Three additional attribute selectors are provided for matching
+substrings in the value of an attribute:</p>
+
+<dl>
+ <dt><code>[att^=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value begins
+ with the prefix "val".</dd>
+ <dt><code>[att$=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute whose value ends with
+ the suffix "val".</dd>
+ <dt><code>[att*=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute whose value contains
+ at least one instance of the substring "val".</dd>
+</dl>
+
+<p>Attribute values must be identifiers or strings. The
+case-sensitivity of attribute names in selectors depends on the
+document language.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents an HTML <code>object</code>, referencing an
+ image:</p>
+ <pre>object[type^="image/"]</pre>
+ <p>The following selector represents an HTML anchor <code>a</code> with an
+ <code>href</code> attribute whose value ends with ".html".</p>
+ <pre>a[href$=".html"]</pre>
+ <p>The following selector represents an HTML paragraph with a <code>title</code>
+ attribute whose value contains the substring "hello"</p>
+ <pre>p[title*="hello"]</pre>
+</div>
+
+<h4><a name=attrnmsp>6.3.3. Attribute selectors and namespaces</a></h4>
+
+<p>Attribute selectors allow an optional namespace component to the
+attribute name. A namespace prefix that has been previously declared
+may be prepended to the attribute name separated by the namespace
+separator &quot;vertical bar&quot; (<code>|</code>). In keeping with
+the Namespaces in the XML recommendation, default namespaces do not
+apply to attributes, therefore attribute selectors without a namespace
+component apply only to attributes that have no declared namespace
+(equivalent to "<code>|attr</code>"). An asterisk may be used for the
+namespace prefix indicating that the selector is to match all
+attribute names without regard to the attribute's namespace.
+
+<p>An attribute selector with an attribute name containing a namespace
+prefix that has not been previously declared is an <a
+href="#Conformance">invalid</a> selector. The mechanism for declaring
+a namespace prefix is left up to the language implementing Selectors.
+In CSS, such a mechanism is defined in the General Syntax module.
+
+<div class="example">
+ <p>CSS examples:</p>
+ <pre>@namespace foo "http://www.example.com";
+[foo|att=val] { color: blue }
+[*|att] { color: yellow }
+[|att] { color: green }
+[att] { color: green }</pre>
+
+ <p>The first rule will match only elements with the attribute
+ <code>att</code> in the "http://www.example.com" namespace with the
+ value "val".</p>
+
+ <p>The second rule will match only elements with the attribute
+ <code>att</code> regardless of the namespace of the attribute
+ (including no declared namespace).</p>
+
+ <p>The last two rules are equivalent and will match only elements
+ with the attribute <code>att</code> where the attribute is not
+ declared to be in a namespace.</p>
+
+</div>
+
+<h4><a name=def-values>6.3.4. Default attribute values in DTDs</a></h4>
+
+<p>Attribute selectors represent explicitly set attribute values in
+the document tree. Default attribute values may be defined in a DTD or
+elsewhere, but cannot always be selected by attribute
+selectors. Selectors should be designed so that they work even if the
+default values are not included in the document tree.</p>
+
+<p>More precisely, a UA is <em>not</em> required to read an "external
+subset" of the DTD but <em>is</em> required to look for default
+attribute values in the document's "internal subset." (See <a
+href="#refsXML10">[XML10]</a> for definitions of these subsets.)</p>
+
+<p>A UA that recognizes an XML namespace <a
+href="#refsXMLNAMES">[XMLNAMES]</a> is not required to use its
+knowledge of that namespace to treat default attribute values as if
+they were present in the document. (For example, an XHTML UA is not
+required to use its built-in knowledge of the XHTML DTD.)</p>
+
+<p class="note"><strong>Note:</strong> Typically, implementations
+choose to ignore external subsets.</p>
+
+<div class="example">
+<p>Example:</p>
+
+<p>Consider an element EXAMPLE with an attribute "notation" that has a
+default value of "decimal". The DTD fragment might be</p>
+
+<pre class="dtd-example">&lt;!ATTLIST EXAMPLE notation (decimal,octal) "decimal"></pre>
+
+<p>If the style sheet contains the rules</p>
+
+<pre>EXAMPLE[notation=decimal] { /*... default property settings ...*/ }
+EXAMPLE[notation=octal] { /*... other settings...*/ }</pre>
+
+<p>the first rule will not match elements whose "notation" attribute
+is set by default, i.e. not set explicitly. To catch all cases, the
+attribute selector for the default value must be dropped:</p>
+
+<pre>EXAMPLE { /*... default property settings ...*/ }
+EXAMPLE[notation=octal] { /*... other settings...*/ }</pre>
+
+<p>Here, because the selector <code>EXAMPLE[notation=octal]</code> is
+more specific than the tag
+selector alone, the style declarations in the second rule will override
+those in the first for elements that have a "notation" attribute value
+of "octal". Care has to be taken that all property declarations that
+are to apply only to the default case are overridden in the non-default
+cases' style rules.</p>
+
+</div>
+
+<h3><a name=class-html>6.4. Class selectors</a></h3>
+
+<p>Working with HTML, authors may use the period (U+002E,
+<code>.</code>) notation as an alternative to the <code>~=</code>
+notation when representing the <code>class</code> attribute. Thus, for
+HTML, <code>div.value</code> and <code>div[class~=value]</code> have
+the same meaning. The attribute value must immediately follow the
+&quot;period&quot; (<code>.</code>).</p>
+
+<p>UAs may apply selectors using the period (.) notation in XML
+documents if the UA has namespace-specific knowledge that allows it to
+determine which attribute is the &quot;class&quot; attribute for the
+respective namespace. One such example of namespace-specific knowledge
+is the prose in the specification for a particular namespace (e.g. SVG
+1.0 <a href="#refsSVG">[SVG]</a> describes the <a
+href="http://www.w3.org/TR/2001/PR-SVG-20010719/styling.html#ClassAttribute">SVG
+&quot;class&quot; attribute</a> and how a UA should interpret it, and
+similarly MathML 1.01 <a href="#refsMATH">[MATH]</a> describes the <a
+href="http://www.w3.org/1999/07/REC-MathML-19990707/chapter2.html#sec2.3.4">MathML
+&quot;class&quot; attribute</a>.)</p>
+
+<div class="example">
+ <p>CSS examples:</p>
+
+ <p>We can assign style information to all elements with
+ <code>class~="pastoral"</code> as follows:</p>
+
+ <pre>*.pastoral { color: green } /* all elements with class~=pastoral */</pre>
+
+ <p>or just</p>
+
+ <pre>.pastoral { color: green } /* all elements with class~=pastoral */</pre>
+
+ <p>The following assigns style only to H1 elements with
+ <code>class~="pastoral"</code>:</p>
+
+ <pre>H1.pastoral { color: green } /* H1 elements with class~=pastoral */</pre>
+
+ <p>Given these rules, the first H1 instance below would not have
+ green text, while the second would:</p>
+
+ <pre>&lt;H1&gt;Not green&lt;/H1&gt;
+&lt;H1 class="pastoral"&gt;Very green&lt;/H1&gt;</pre>
+
+</div>
+
+<p>To represent a subset of "class" values, each value must be preceded
+by a ".", in any order.</P>
+
+<div class="example">
+
+ <p>CSS example:</p>
+
+ <p>The following rule matches any P element whose "class" attribute
+ has been assigned a list of <a
+ href="#whitespace">whitespace</a>-separated values that includes
+ "pastoral" and "marine":</p>
+
+ <pre>p.pastoral.marine { color: green }</pre>
+
+ <p>This rule matches when <code>class="pastoral blue aqua
+ marine"</code> but does not match for <code>class="pastoral
+ blue"</code>.</p>
+
+</div>
+
+<p class="note"><strong>Note:</strong> Because CSS gives considerable
+power to the "class" attribute, authors could conceivably design their
+own "document language" based on elements with almost no associated
+presentation (such as DIV and SPAN in HTML) and assigning style
+information through the "class" attribute. Authors should avoid this
+practice since the structural elements of a document language often
+have recognized and accepted meanings and author-defined classes may
+not.</p>
+
+<p class="note"><strong>Note:</strong> If an element has multiple
+class attributes, their values must be concatenated with spaces
+between the values before searching for the class. As of this time the
+working group is not aware of any manner in which this situation can
+be reached, however, so this behavior is explicitly non-normative in
+this specification.</p>
+
+<h3><a name=id-selectors>6.5. ID selectors</a></h3>
+
+<p>Document languages may contain attributes that are declared to be
+of type ID. What makes attributes of type ID special is that no two
+such attributes can have the same value in a document, regardless of
+the type of the elements that carry them; whatever the document
+language, an ID typed attribute can be used to uniquely identify its
+element. In HTML all ID attributes are named "id"; XML applications
+may name ID attributes differently, but the same restriction
+applies.</p>
+
+<p>An ID-typed attribute of a document language allows authors to
+assign an identifier to one element instance in the document tree. W3C
+ID selectors represent an element instance based on its identifier. An
+ID selector contains a &quot;number sign&quot; (U+0023,
+<code>#</code>) immediately followed by the ID value, which must be an
+identifier.</p>
+
+<p>Selectors does not specify how a UA knows the ID-typed attribute of
+an element. The UA may, e.g., read a document's DTD, have the
+information hard-coded or ask the user.
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following ID selector represents an <code>h1</code> element
+ whose ID-typed attribute has the value "chapter1":</p>
+ <pre>h1#chapter1</pre>
+ <p>The following ID selector represents any element whose ID-typed
+ attribute has the value "chapter1":</p>
+ <pre>#chapter1</pre>
+ <p>The following selector represents any element whose ID-typed
+ attribute has the value "z98y".</p>
+ <pre>*#z98y</pre>
+</div>
+
+<p class="note"><strong>Note.</strong> In XML 1.0 <a
+href="#refsXML10">[XML10]</a>, the information about which attribute
+contains an element's IDs is contained in a DTD or a schema. When
+parsing XML, UAs do not always read the DTD, and thus may not know
+what the ID of an element is (though a UA may have namespace-specific
+knowledge that allows it to determine which attribute is the ID
+attribute for that namespace). If a style sheet designer knows or
+suspects that a UA may not know what the ID of an element is, he
+should use normal attribute selectors instead:
+<code>[name=p371]</code> instead of <code>#p371</code>. Elements in
+XML 1.0 documents without a DTD do not have IDs at all.</p>
+
+<p>If an element has multiple ID attributes, all of them must be
+treated as IDs for that element for the purposes of the ID
+selector. Such a situation could be reached using mixtures of xml:id,
+DOM3 Core, XML DTDs, and namespace-specific knowledge.</p>
+
+<h3><a name=pseudo-classes>6.6. Pseudo-classes</a></h3>
+
+<p>The pseudo-class concept is introduced to permit selection based on
+information that lies outside of the document tree or that cannot be
+expressed using the other simple selectors.</p>
+
+<p>A pseudo-class always consists of a &quot;colon&quot;
+(<code>:</code>) followed by the name of the pseudo-class and
+optionally by a value between parentheses.</p>
+
+<p>Pseudo-classes are allowed in all sequences of simple selectors
+contained in a selector. Pseudo-classes are allowed anywhere in
+sequences of simple selectors, after the leading type selector or
+universal selector (possibly omitted). Pseudo-class names are
+case-insensitive. Some pseudo-classes are mutually exclusive, while
+others can be applied simultaneously to the same
+element. Pseudo-classes may be dynamic, in the sense that an element
+may acquire or lose a pseudo-class while a user interacts with the
+document.</p>
+
+
+<h4><a name=dynamic-pseudos>6.6.1. Dynamic pseudo-classes</a></h4>
+
+<p>Dynamic pseudo-classes classify elements on characteristics other
+than their name, attributes, or content, in principle characteristics
+that cannot be deduced from the document tree.</p>
+
+<p>Dynamic pseudo-classes do not appear in the document source or
+document tree.</p>
+
+
+<h5>The <a name=link>link pseudo-classes: :link and :visited</a></h5>
+
+<p>User agents commonly display unvisited links differently from
+previously visited ones. Selectors
+provides the pseudo-classes <code>:link</code> and
+<code>:visited</code> to distinguish them:</p>
+
+<ul>
+ <li>The <code>:link</code> pseudo-class applies to links that have
+ not yet been visited.</li>
+ <li>The <code>:visited</code> pseudo-class applies once the link has
+ been visited by the user. </li>
+</ul>
+
+<p>After some amount of time, user agents may choose to return a
+visited link to the (unvisited) ':link' state.</p>
+
+<p>The two states are mutually exclusive.</p>
+
+<div class="example">
+
+ <p>Example:</p>
+
+ <p>The following selector represents links carrying class
+ <code>external</code> and already visited:</p>
+
+ <pre>a.external:visited</pre>
+
+</div>
+
+<p class="note"><strong>Note:</strong> It is possible for style sheet
+authors to abuse the :link and :visited pseudo-classes to determine
+which sites a user has visited without the user's consent.
+
+<p>UAs may therefore treat all links as unvisited links, or implement
+other measures to preserve the user's privacy while rendering visited
+and unvisited links differently.</p>
+
+<h5>The <a name=useraction-pseudos>user action pseudo-classes
+:hover, :active, and :focus</a></h5>
+
+<p>Interactive user agents sometimes change the rendering in response
+to user actions. Selectors provides
+three pseudo-classes for the selection of an element the user is
+acting on.</p>
+
+<ul>
+
+ <li>The <code>:hover</code> pseudo-class applies while the user
+ designates an element with a pointing device, but does not activate
+ it. For example, a visual user agent could apply this pseudo-class
+ when the cursor (mouse pointer) hovers over a box generated by the
+ element. User agents not that do not support <a
+ href="http://www.w3.org/TR/REC-CSS2/media.html#interactive-media-group">interactive
+ media</a> do not have to support this pseudo-class. Some conforming
+ user agents that support <a
+ href="http://www.w3.org/TR/REC-CSS2/media.html#interactive-media-group">interactive
+ media</a> may not be able to support this pseudo-class (e.g., a pen
+ device that does not detect hovering).</li>
+
+ <li>The <code>:active</code> pseudo-class applies while an element
+ is being activated by the user. For example, between the times the
+ user presses the mouse button and releases it.</li>
+
+ <li>The <code>:focus</code> pseudo-class applies while an element
+ has the focus (accepts keyboard or mouse events, or other forms of
+ input). </li>
+
+</ul>
+
+<p>There may be document language or implementation specific limits on
+which elements can become <code>:active</code> or acquire
+<code>:focus</code>.</p>
+
+<p>These pseudo-classes are not mutually exclusive. An element may
+match several pseudo-classes at the same time.</p>
+
+<p>Selectors doesn't define if the parent of an element that is
+':active' or ':hover' is also in that state.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <pre>a:link /* unvisited links */
+a:visited /* visited links */
+a:hover /* user hovers */
+a:active /* active links */</pre>
+ <p>An example of combining dynamic pseudo-classes:</p>
+ <pre>a:focus
+a:focus:hover</pre>
+ <p>The last selector matches <code>a</code> elements that are in
+ the pseudo-class :focus and in the pseudo-class :hover.</p>
+</div>
+
+<p class="note"><strong>Note:</strong> An element can be both ':visited'
+and ':active' (or ':link' and ':active').</p>
+
+<h4><a name=target-pseudo>6.6.2. The target pseudo-class :target</a></h4>
+
+<p>Some URIs refer to a location within a resource. This kind of URI
+ends with a &quot;number sign&quot; (#) followed by an anchor
+identifier (called the fragment identifier).</p>
+
+<p>URIs with fragment identifiers link to a certain element within the
+document, known as the target element. For instance, here is a URI
+pointing to an anchor named <code>section_2</code> in an HTML
+document:</p>
+
+<pre>http://example.com/html/top.html#section_2</pre>
+
+<p>A target element can be represented by the <code>:target</code>
+pseudo-class. If the document's URI has no fragment identifier, then
+the document has no target element.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <pre>p.note:target</pre>
+ <p>This selector represents a <code>p</code> element of class
+ <code>note</code> that is the target element of the referring
+ URI.</p>
+</div>
+
+<div class="example">
+ <p>CSS example:</p>
+ <p>Here, the <code>:target</code> pseudo-class is used to make the
+ target element red and place an image before it, if there is one:</p>
+ <pre>*:target { color : red }
+*:target::before { content : url(target.png) }</pre>
+</div>
+
+<h4><a name=lang-pseudo>6.6.3. The language pseudo-class :lang</a></h4>
+
+<p>If the document language specifies how the human language of an
+element is determined, it is possible to write selectors that
+represent an element based on its language. For example, in HTML <a
+href="#refsHTML4">[HTML4]</a>, the language is determined by a
+combination of the <code>lang</code> attribute, the <code>meta</code>
+element, and possibly by information from the protocol (such as HTTP
+headers). XML uses an attribute called <code>xml:lang</code>, and
+there may be other document language-specific methods for determining
+the language.</p>
+
+<p>The pseudo-class <code>:lang(C)</code> represents an element that
+is in language C. Whether an element is represented by a
+<code>:lang()</code> selector is based solely on the identifier C
+being either equal to, or a hyphen-separated substring of, the
+element's language value, in the same way as if performed by the <a
+href="#attribute-representation">'|='</a> operator in attribute
+selectors. The identifier C does not have to be a valid language
+name.</p>
+
+<p>C must not be empty. (If it is, the selector is invalid.)</p>
+
+<p class="note"><strong>Note:</strong> It is recommended that
+documents and protocols indicate language using codes from RFC 3066 <a
+href="#refsRFC3066">[RFC3066]</a> or its successor, and by means of
+"xml:lang" attributes in the case of XML-based documents <a
+href="#refsXML10">[XML10]</a>. See <a
+href="http://www.w3.org/International/questions/qa-lang-2or3.html">
+"FAQ: Two-letter or three-letter language codes."</a></p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The two following selectors represent an HTML document that is in
+ Belgian, French, or German. The two next selectors represent
+ <code>q</code> quotations in an arbitrary element in Belgian, French,
+ or German.</p>
+ <pre>html:lang(fr-be)
+html:lang(de)
+:lang(fr-be) &gt; q
+:lang(de) &gt; q</pre>
+</div>
+
+<h4><a name=UIstates>6.6.4. The UI element states pseudo-classes</a></h4>
+
+<h5><a name=enableddisabled>The :enabled and :disabled pseudo-classes</a></h5>
+
+<p>The <code>:enabled</code> pseudo-class allows authors to customize
+the look of user interface elements that are enabled &mdash; which the
+user can select or activate in some fashion (e.g. clicking on a button
+with a mouse). There is a need for such a pseudo-class because there
+is no way to programmatically specify the default appearance of say,
+an enabled <code>input</code> element without also specifying what it
+would look like when it was disabled.</p>
+
+<p>Similar to <code>:enabled</code>, <code>:disabled</code> allows the
+author to specify precisely how a disabled or inactive user interface
+element should look.</p>
+
+<p>Most elements will be neither enabled nor disabled. An element is
+enabled if the user can either activate it or transfer the focus to
+it. An element is disabled if it could be enabled, but the user cannot
+presently activate it or transfer focus to it.</p>
+
+
+<h5><a name=checked>The :checked pseudo-class</a></h5>
+
+<p>Radio and checkbox elements can be toggled by the user. Some menu
+items are "checked" when the user selects them. When such elements are
+toggled "on" the <code>:checked</code> pseudo-class applies. The
+<code>:checked</code> pseudo-class initially applies to such elements
+that have the HTML4 <code>selected</code> and <code>checked</code>
+attributes as described in <a
+href="http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.2.1">Section
+17.2.1 of HTML4</a>, but of course the user can toggle "off" such
+elements in which case the <code>:checked</code> pseudo-class would no
+longer apply. While the <code>:checked</code> pseudo-class is dynamic
+in nature, and is altered by user action, since it can also be based
+on the presence of the semantic HTML4 <code>selected</code> and
+<code>checked</code> attributes, it applies to all media.
+
+
+<h5><a name=indeterminate>The :indeterminate pseudo-class</a></h5>
+
+<div class="note">
+
+<p>Radio and checkbox elements can be toggled by the user, but are
+sometimes in an indeterminate state, neither checked nor unchecked.
+This can be due to an element attribute, or DOM manipulation.</p>
+
+<p>A future version of this specification may introduce an
+<code>:indeterminate</code> pseudo-class that applies to such elements.
+<!--While the <code>:indeterminate</code> pseudo-class is dynamic in
+nature, and is altered by user action, since it can also be based on
+the presence of an element attribute, it applies to all media.</p>
+
+<p>Components of a radio-group initialized with no pre-selected choice
+are an example of :indeterminate state.--></p>
+
+</div>
+
+
+<h4><a name=structural-pseudos>6.6.5. Structural pseudo-classes</a></h4>
+
+<p>Selectors introduces the concept of <dfn>structural
+pseudo-classes</dfn> to permit selection based on extra information that lies in
+the document tree but cannot be represented by other simple selectors or
+combinators.
+
+<p>Note that standalone pieces of PCDATA (text nodes in the DOM) are
+not counted when calculating the position of an element in the list of
+children of its parent. When calculating the position of an element in
+the list of children of its parent, the index numbering starts at 1.
+
+
+<h5><a name=root-pseudo>:root pseudo-class</a></h5>
+
+<p>The <code>:root</code> pseudo-class represents an element that is
+the root of the document. In HTML 4, this is always the
+<code>HTML</code> element.
+
+
+<h5><a name=nth-child-pseudo>:nth-child() pseudo-class</a></h5>
+
+<p>The
+<code>:nth-child(<var>a</var><code>n</code>+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings
+<strong>before</strong> it in the document tree, for a given positive
+integer or zero value of <code>n</code>, and has a parent element. In
+other words, this matches the <var>b</var>th child of an element after
+all the children have been split into groups of <var>a</var> elements
+each. For example, this allows the selectors to address every other
+row in a table, and could be used to alternate the color
+of paragraph text in a cycle of four. The <var>a</var> and
+<var>b</var> values must be zero, negative integers or positive
+integers. The index of the first child of an element is 1.
+
+<p>In addition to this, <code>:nth-child()</code> can take
+'<code>odd</code>' and '<code>even</code>' as arguments instead.
+'<code>odd</code>' has the same signification as <code>2n+1</code>,
+and '<code>even</code>' has the same signification as <code>2n</code>.
+
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-child(2n+1) /* represents every odd row of an HTML table */
+tr:nth-child(odd) /* same */
+tr:nth-child(2n) /* represents every even row of an HTML table */
+tr:nth-child(even) /* same */
+
+/* Alternate paragraph colours in CSS */
+p:nth-child(4n+1) { color: navy; }
+p:nth-child(4n+2) { color: green; }
+p:nth-child(4n+3) { color: maroon; }
+p:nth-child(4n+4) { color: purple; }</pre>
+</div>
+
+<p>When <var>a</var>=0, no repeating is used, so for example
+<code>:nth-child(0n+5)</code> matches only the fifth child. When
+<var>a</var>=0, the <var>a</var><code>n</code> part need not be
+included, so the syntax simplifies to
+<code>:nth-child(<var>b</var>)</code> and the last example simplifies
+to <code>:nth-child(5)</code>.
+
+<div class="example">
+<p>Examples:</p>
+<pre>foo:nth-child(0n+1) /* represents an element foo, first child of its parent element */
+foo:nth-child(1) /* same */</pre>
+</div>
+
+<p>When <var>a</var>=1, the number may be omitted from the rule.
+
+<div class="example">
+<p>Examples:</p>
+<p>The following selectors are therefore equivalent:</p>
+<pre>bar:nth-child(1n+0) /* represents all bar elements, specificity (0,1,1) */
+bar:nth-child(n+0) /* same */
+bar:nth-child(n) /* same */
+bar /* same but lower specificity (0,0,1) */</pre>
+</div>
+
+<p>If <var>b</var>=0, then every <var>a</var>th element is picked. In
+such a case, the <var>b</var> part may be omitted.
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-child(2n+0) /* represents every even row of an HTML table */
+tr:nth-child(2n) /* same */</pre>
+</div>
+
+<p>If both <var>a</var> and <var>b</var> are equal to zero, the
+pseudo-class represents no element in the document tree.</p>
+
+<p>The value <var>a</var> can be negative, but only the positive
+values of <var>a</var><code>n</code>+<var>b</var>, for
+<code>n</code>&ge;0, may represent an element in the document
+tree.</p>
+
+<div class="example">
+<p>Example:</p>
+<pre>html|tr:nth-child(-n+6) /* represents the 6 first rows of XHTML tables */</pre>
+</div>
+
+<p>When the value <var>b</var> is negative, the "+" character in the
+expression must be removed (it is effectively replaced by the "-"
+character indicating the negative value of <var>b</var>).</p>
+
+<div class="example">
+<p>Examples:</p>
+<pre>:nth-child(10n-1) /* represents the 9th, 19th, 29th, etc, element */
+:nth-child(10n+9) /* Same */
+:nth-child(10n+-1) /* Syntactically invalid, and would be ignored */</pre>
+</div>
+
+
+<h5><a name=nth-last-child-pseudo>:nth-last-child() pseudo-class</a></h5>
+
+<p>The <code>:nth-last-child(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings
+<strong>after</strong> it in the document tree, for a given positive
+integer or zero value of <code>n</code>, and has a parent element. See
+<code>:nth-child()</code> pseudo-class for the syntax of its argument.
+It also accepts the '<code>even</code>' and '<code>odd</code>' values
+as arguments.
+
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-last-child(-n+2) /* represents the two last rows of an HTML table */
+
+foo:nth-last-child(odd) /* represents all odd foo elements in their parent element,
+ counting from the last one */</pre>
+</div>
+
+
+<h5><a name=nth-of-type-pseudo>:nth-of-type() pseudo-class</a></h5>
+
+<p>The <code>:nth-of-type(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings with the same
+element name <strong>before</strong> it in the document tree, for a
+given zero or positive integer value of <code>n</code>, and has a
+parent element. In other words, this matches the <var>b</var>th child
+of that type after all the children of that type have been split into
+groups of a elements each. See <code>:nth-child()</code> pseudo-class
+for the syntax of its argument. It also accepts the
+'<code>even</code>' and '<code>odd</code>' values.
+
+
+<div class="example">
+<p>CSS example:</p>
+<p>This allows an author to alternate the position of floated images:</p>
+<pre>img:nth-of-type(2n+1) { float: right; }
+img:nth-of-type(2n) { float: left; }</pre>
+</div>
+
+
+<h5><a name=nth-last-of-type-pseudo>:nth-last-of-type() pseudo-class</a></h5>
+
+<p>The <code>:nth-last-of-type(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings with the same
+element name <strong>after</strong> it in the document tree, for a
+given zero or positive integer value of <code>n</code>, and has a
+parent element. See <code>:nth-child()</code> pseudo-class for the
+syntax of its argument. It also accepts the '<code>even</code>' and '<code>odd</code>' values.
+
+
+<div class="example">
+ <p>Example:</p>
+ <p>To represent all <code>h2</code> children of an XHTML
+ <code>body</code> except the first and last, one could use the
+ following selector:</p>
+ <pre>body &gt; h2:nth-of-type(n+2):nth-last-of-type(n+2)</pre>
+ <p>In this case, one could also use <code>:not()</code>, although the
+ selector ends up being just as long:</p>
+ <pre>body &gt; h2:not(:first-of-type):not(:last-of-type)</pre>
+</div>
+
+
+<h5><a name=first-child-pseudo>:first-child pseudo-class</a></h5>
+
+<p>Same as <code>:nth-child(1)</code>. The <code>:first-child</code> pseudo-class
+represents an element that is the first child of some other element.
+
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element that is
+ the first child of a <code>div</code> element:</p>
+ <pre>div &gt; p:first-child</pre>
+ <p>This selector can represent the <code>p</code> inside the
+ <code>div</code> of the following fragment:</p>
+ <pre>&lt;p&gt; The last P before the note.&lt;/p&gt;
+&lt;div class="note"&gt;
+ &lt;p&gt; The first P inside the note.&lt;/p&gt;
+&lt;/div&gt;</pre>but cannot represent the second <code>p</code> in the following
+fragment:
+ <pre>&lt;p&gt; The last P before the note.&lt;/p&gt;
+&lt;div class="note"&gt;
+ &lt;h2&gt; Note &lt;/h2&gt;
+ &lt;p&gt; The first P inside the note.&lt;/p&gt;
+&lt;/div&gt;</pre>
+ <p>The following two selectors are usually equivalent:</p>
+ <pre>* &gt; a:first-child /* a is first child of any element */
+a:first-child /* Same (assuming a is not the root element) */</pre>
+</div>
+
+<h5><a name=last-child-pseudo>:last-child pseudo-class</a></h5>
+
+<p>Same as <code>:nth-last-child(1)</code>. The <code>:last-child</code> pseudo-class
+represents an element that is the last child of some other element.
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents a list item <code>li</code> that
+ is the last child of an ordered list <code>ol</code>.
+ <pre>ol &gt; li:last-child</pre>
+</div>
+
+<h5><a name=first-of-type-pseudo>:first-of-type pseudo-class</a></h5>
+
+<p>Same as <code>:nth-of-type(1)</code>. The <code>:first-of-type</code> pseudo-class
+represents an element that is the first sibling of its type in the list of
+children of its parent element.
+
+<div class="example">
+<p>Example:</p>
+<p>The following selector represents a definition title
+<code>dt</code> inside a definition list <code>dl</code>, this
+<code>dt</code> being the first of its type in the list of children of
+its parent element.</p>
+<pre>dl dt:first-of-type</pre>
+<p>It is a valid description for the first two <code>dt</code>
+elements in the following example but not for the third one:</p>
+<pre>&lt;dl&gt;
+ &lt;dt&gt;gigogne&lt;/dt&gt;
+ &lt;dd&gt;
+ &lt;dl&gt;
+ &lt;dt&gt;fus&eacute;e&lt;/dt&gt;
+ &lt;dd&gt;multistage rocket&lt;/dd&gt;
+ &lt;dt&gt;table&lt;/dt&gt;
+ &lt;dd&gt;nest of tables&lt;/dd&gt;
+ &lt;/dl&gt;
+ &lt;/dd&gt;
+&lt;/dl&gt;</pre>
+</div>
+
+<h5><a name=last-of-type-pseudo>:last-of-type pseudo-class</a></h5>
+
+<p>Same as <code>:nth-last-of-type(1)</code>. The
+<code>:last-of-type</code> pseudo-class represents an element that is
+the last sibling of its type in the list of children of its parent
+element.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents the last data cell
+ <code>td</code> of a table row.</p>
+ <pre>tr &gt; td:last-of-type</pre>
+</div>
+
+<h5><a name=only-child-pseudo>:only-child pseudo-class</a></h5>
+
+<p>Represents an element that has a parent element and whose parent
+element has no other element children. Same as
+<code>:first-child:last-child</code> or
+<code>:nth-child(1):nth-last-child(1)</code>, but with a lower
+specificity.</p>
+
+<h5><a name=only-of-type-pseudo>:only-of-type pseudo-class</a></h5>
+
+<p>Represents an element that has a parent element and whose parent
+element has no other element children with the same element name. Same
+as <code>:first-of-type:last-of-type</code> or
+<code>:nth-of-type(1):nth-last-of-type(1)</code>, but with a lower
+specificity.</p>
+
+
+<h5><a name=empty-pseudo></a>:empty pseudo-class</h5>
+
+<p>The <code>:empty</code> pseudo-class represents an element that has
+no children at all. In terms of the DOM, only element nodes and text
+nodes (including CDATA nodes and entity references) whose data has a
+non-zero length must be considered as affecting emptiness; comments,
+PIs, and other nodes must not affect whether an element is considered
+empty or not.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p><code>p:empty</code> is a valid representation of the following fragment:</p>
+ <pre>&lt;p&gt;&lt;/p&gt;</pre>
+ <p><code>foo:empty</code> is not a valid representation for the
+ following fragments:</p>
+ <pre>&lt;foo&gt;bar&lt;/foo&gt;</pre>
+ <pre>&lt;foo&gt;&lt;bar&gt;bla&lt;/bar&gt;&lt;/foo&gt;</pre>
+ <pre>&lt;foo&gt;this is not &lt;bar&gt;:empty&lt;/bar&gt;&lt;/foo&gt;</pre>
+</div>
+
+<h4><a name=content-selectors>6.6.6. Blank</a></h4> <!-- It's the Return of Appendix H!!! Run away! -->
+
+<p>This section intentionally left blank.</p>
+<!-- (used to be :contains()) -->
+
+<h4><a name=negation></a>6.6.7. The negation pseudo-class</h4>
+
+<p>The negation pseudo-class, <code>:not(<var>X</var>)</code>, is a
+functional notation taking a <a href="#simple-selectors-dfn">simple
+selector</a> (excluding the negation pseudo-class itself and
+pseudo-elements) as an argument. It represents an element that is not
+represented by the argument.
+
+<!-- pseudo-elements are not simple selectors, so the above paragraph
+may be a bit confusing -->
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following CSS selector matches all <code>button</code>
+ elements in an HTML document that are not disabled.</p>
+ <pre>button:not([DISABLED])</pre>
+ <p>The following selector represents all but <code>FOO</code>
+ elements.</p>
+ <pre>*:not(FOO)</pre>
+ <p>The following group of selectors represents all HTML elements
+ except links.</p>
+ <pre>html|*:not(:link):not(:visited)</pre>
+</div>
+
+<p>Default namespace declarations do not affect the argument of the
+negation pseudo-class unless the argument is a universal selector or a
+type selector.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>Assuming that the default namespace is bound to
+ "http://example.com/", the following selector represents all
+ elements that are not in that namespace:</p>
+ <pre>*|*:not(*)</pre>
+ <p>The following CSS selector matches any element being hovered,
+ regardless of its namespace. In particular, it is not limited to
+ only matching elements in the default namespace that are not being
+ hovered, and elements not in the default namespace don't match the
+ rule when they <em>are</em> being hovered.</p>
+ <pre>*|*:not(:hover)</pre>
+</div>
+
+<p class="note"><strong>Note</strong>: the :not() pseudo allows
+useless selectors to be written. For instance <code>:not(*|*)</code>,
+which represents no element at all, or <code>foo:not(bar)</code>,
+which is equivalent to <code>foo</code> but with a higher
+specificity.</p>
+
+<h3><a name=pseudo-elements>7. Pseudo-elements</a></h3>
+
+<p>Pseudo-elements create abstractions about the document tree beyond
+those specified by the document language. For instance, document
+languages do not offer mechanisms to access the first letter or first
+line of an element's content. Pseudo-elements allow designers to refer
+to this otherwise inaccessible information. Pseudo-elements may also
+provide designers a way to refer to content that does not exist in the
+source document (e.g., the <code>::before</code> and
+<code>::after</code> pseudo-elements give access to generated
+content).</p>
+
+<p>A pseudo-element is made of two colons (<code>::</code>) followed
+by the name of the pseudo-element.</p>
+
+<p>This <code>::</code> notation is introduced by the current document
+in order to establish a discrimination between pseudo-classes and
+pseudo-elements. For compatibility with existing style sheets, user
+agents must also accept the previous one-colon notation for
+pseudo-elements introduced in CSS levels 1 and 2 (namely,
+<code>:first-line</code>, <code>:first-letter</code>,
+<code>:before</code> and <code>:after</code>). This compatibility is
+not allowed for the new pseudo-elements introduced in CSS level 3.</p>
+
+<p>Only one pseudo-element may appear per selector, and if present it
+must appear after the sequence of simple selectors that represents the
+<a href="#subject">subjects</a> of the selector. <span class="note">A
+future version of this specification may allow multiple
+pesudo-elements per selector.</span></p>
+
+<h4><a name=first-line>7.1. The ::first-line pseudo-element</a></h4>
+
+<p>The <code>::first-line</code> pseudo-element describes the contents
+of the first formatted line of an element.
+
+<div class="example">
+<p>CSS example:</p>
+<pre>p::first-line { text-transform: uppercase }</pre>
+<p>The above rule means "change the letters of the first line of every
+paragraph to uppercase".</p>
+</div>
+
+<p>The selector <code>p::first-line</code> does not match any real
+HTML element. It does match a pseudo-element that conforming user
+agents will insert at the beginning of every paragraph.</p>
+
+<p>Note that the length of the first line depends on a number of
+factors, including the width of the page, the font size, etc. Thus,
+an ordinary HTML paragraph such as:</p>
+
+<pre>
+&lt;P&gt;This is a somewhat long HTML
+paragraph that will be broken into several
+lines. The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>the lines of which happen to be broken as follows:
+
+<pre>
+THIS IS A SOMEWHAT LONG HTML PARAGRAPH THAT
+will be broken into several lines. The first
+line will be identified by a fictional tag
+sequence. The other lines will be treated as
+ordinary lines in the paragraph.
+</pre>
+
+<p>This paragraph might be "rewritten" by user agents to include the
+<em>fictional tag sequence</em> for <code>::first-line</code>. This
+fictional tag sequence helps to show how properties are inherited.</p>
+
+<pre>
+&lt;P&gt;<b>&lt;P::first-line&gt;</b> This is a somewhat long HTML
+paragraph that <b>&lt;/P::first-line&gt;</b> will be broken into several
+lines. The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>If a pseudo-element breaks up a real element, the desired effect
+can often be described by a fictional tag sequence that closes and
+then re-opens the element. Thus, if we mark up the previous paragraph
+with a <code>span</code> element:</p>
+
+<pre>
+&lt;P&gt;<b>&lt;SPAN class="test"&gt;</b> This is a somewhat long HTML
+paragraph that will be broken into several
+lines.<b>&lt;/SPAN&gt;</b> The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>the user agent could simulate start and end tags for
+<code>span</code> when inserting the fictional tag sequence for
+<code>::first-line</code>.
+
+<pre>
+&lt;P&gt;&lt;P::first-line&gt;<b>&lt;SPAN class="test"&gt;</b> This is a
+somewhat long HTML
+paragraph that will <b>&lt;/SPAN&gt;</b>&lt;/P::first-line&gt;<b>&lt;SPAN class="test"&gt;</b> be
+broken into several
+lines.<b>&lt;/SPAN&gt;</b> The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>In CSS, the <code>::first-line</code> pseudo-element can only be
+attached to a block-level element, an inline-block, a table-caption,
+or a table-cell.</p>
+
+<p><a name="first-formatted-line"></a>The "first formatted line" of an
+element may occur inside a
+block-level descendant in the same flow (i.e., a block-level
+descendant that is not positioned and not a float). E.g., the first
+line of the <code>div</code> in <code>&lt;DIV>&lt;P>This
+line...&lt;/P>&lt/DIV></code> is the first line of the <code>p</code> (assuming
+that both <code>p</code> and <code>div</code> are block-level).
+
+<p>The first line of a table-cell or inline-block cannot be the first
+formatted line of an ancestor element. Thus, in <code>&lt;DIV&gt;&lt;P
+STYLE="display: inline-block">Hello&lt;BR&gt;Goodbye&lt;/P&gt;
+etcetera&lt;/DIV&gt;</code> the first formatted line of the
+<code>div</code> is not the line "Hello".
+
+<p class="note">Note that the first line of the <code>p</code> in this
+fragment: <code>&lt;p&gt&lt;br&gt;First...</code> doesn't contain any
+letters (assuming the default style for <code>br</code> in HTML
+4). The word "First" is not on the first formatted line.
+
+<p>A UA should act as if the fictional start tags of the
+<code>::first-line</code> pseudo-elements were nested just inside the
+innermost enclosing block-level element. (Since CSS1 and CSS2 were
+silent on this case, authors should not rely on this behavior.) Here
+is an example. The fictional tag sequence for</p>
+
+<pre>
+&lt;DIV>
+ &lt;P>First paragraph&lt;/P>
+ &lt;P>Second paragraph&lt;/P>
+&lt;/DIV>
+</pre>
+
+<p>is</p>
+
+<pre>
+&lt;DIV>
+ &lt;P>&lt;DIV::first-line>&lt;P::first-line>First paragraph&lt;/P::first-line>&lt;/DIV::first-line>&lt;/P>
+ &lt;P>&lt;P::first-line>Second paragraph&lt;/P::first-line>&lt;/P>
+&lt;/DIV>
+</pre>
+
+<p>The <code>::first-line</code> pseudo-element is similar to an
+inline-level element, but with certain restrictions. In CSS, the
+following properties apply to a <code>::first-line</code>
+pseudo-element: font properties, color property, background
+properties, 'word-spacing', 'letter-spacing', 'text-decoration',
+'vertical-align', 'text-transform', 'line-height'. UAs may apply other
+properties as well.</p>
+
+
+<h4><a name=first-letter>7.2. The ::first-letter pseudo-element</a></h4>
+
+<p>The <code>::first-letter</code> pseudo-element represents the first
+letter of the first line of a block, if it is not preceded by any
+other content (such as images or inline tables) on its line. The
+::first-letter pseudo-element may be used for "initial caps" and "drop
+caps", which are common typographical effects. This type of initial
+letter is similar to an inline-level element if its 'float' property
+is 'none'; otherwise, it is similar to a floated element.</p>
+
+<p>In CSS, these are the properties that apply to <code>::first-letter</code>
+pseudo-elements: font properties, 'text-decoration', 'text-transform',
+'letter-spacing', 'word-spacing' (when appropriate), 'line-height',
+'float', 'vertical-align' (only if 'float' is 'none'), margin
+properties, padding properties, border properties, color property,
+background properties. UAs may apply other properties as well. To
+allow UAs to render a typographically correct drop cap or initial cap,
+the UA may choose a line-height, width and height based on the shape
+of the letter, unlike for normal elements.</p>
+
+<div class="example">
+<p>Example:</p>
+<p>This example shows a possible rendering of an initial cap. Note
+that the 'line-height' that is inherited by the <code>::first-letter</code>
+pseudo-element is 1.1, but the UA in this example has computed the
+height of the first letter differently, so that it doesn't cause any
+unnecessary space between the first two lines. Also note that the
+fictional start tag of the first letter is inside the <span>span</span>, and thus
+the font weight of the first letter is normal, not bold as the <span>span</span>:
+<pre>
+p { line-height: 1.1 }
+p::first-letter { font-size: 3em; font-weight: normal }
+span { font-weight: bold }
+...
+&lt;p>&lt;span>Het hemelsche&lt;/span> gerecht heeft zich ten lange lesten&lt;br>
+Erbarremt over my en mijn benaeuwde vesten&lt;br>
+En arme burgery, en op mijn volcx gebed&lt;br>
+En dagelix geschrey de bange stad ontzet.
+</pre>
+<div class="figure">
+<p><img src="initial-cap.png" alt="Image illustrating the ::first-letter pseudo-element">
+</div>
+</div>
+
+<div class="example">
+<p>The following CSS will make a drop cap initial letter span about two lines:</p>
+
+<pre>
+&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"&gt;
+&lt;HTML&gt;
+ &lt;HEAD&gt;
+ &lt;TITLE&gt;Drop cap initial letter&lt;/TITLE&gt;
+ &lt;STYLE type="text/css"&gt;
+ P { font-size: 12pt; line-height: 1.2 }
+ P::first-letter { font-size: 200%; font-weight: bold; float: left }
+ SPAN { text-transform: uppercase }
+ &lt;/STYLE&gt;
+ &lt;/HEAD&gt;
+ &lt;BODY&gt;
+ &lt;P&gt;&lt;SPAN&gt;The first&lt;/SPAN&gt; few words of an article
+ in The Economist.&lt;/P&gt;
+ &lt;/BODY&gt;
+&lt;/HTML&gt;
+</pre>
+
+<p>This example might be formatted as follows:</p>
+
+<div class="figure">
+<P><img src="first-letter.gif" alt="Image illustrating the combined effect of the ::first-letter and ::first-line pseudo-elements"></p>
+</div>
+
+<p>The <span class="index-inst" title="fictional tag
+sequence">fictional tag sequence</span> is:</p>
+
+<pre>
+&lt;P&gt;
+&lt;SPAN&gt;
+&lt;P::first-letter&gt;
+T
+&lt;/P::first-letter&gt;he first
+&lt;/SPAN&gt;
+few words of an article in the Economist.
+&lt;/P&gt;
+</pre>
+
+<p>Note that the <code>::first-letter</code> pseudo-element tags abut
+the content (i.e., the initial character), while the ::first-line
+pseudo-element start tag is inserted right after the start tag of the
+block element.</p> </div>
+
+<p>In order to achieve traditional drop caps formatting, user agents
+may approximate font sizes, for example to align baselines. Also, the
+glyph outline may be taken into account when formatting.</p>
+
+<p>Punctuation (i.e, characters defined in Unicode in the "open" (Ps),
+"close" (Pe), "initial" (Pi). "final" (Pf) and "other" (Po)
+punctuation classes), that precedes or follows the first letter should
+be included. <a href="#refsUNICODE">[UNICODE]</a></p>
+
+<div class="figure">
+<P><img src="first-letter2.gif" alt="Quotes that precede the
+first letter should be included."></p>
+</div>
+
+<p>The <code>::first-letter</code> also applies if the first letter is
+in fact a digit, e.g., the "6" in "67 million dollars is a lot of
+money."</p>
+
+<p>In CSS, the <code>::first-letter</code> pseudo-element applies to
+block, list-item, table-cell, table-caption, and inline-block
+elements. <span class="note">A future version of this specification
+may allow this pesudo-element to apply to more element
+types.</span></p>
+
+<p>The <code>::first-letter</code> pseudo-element can be used with all
+such elements that contain text, or that have a descendant in the same
+flow that contains text. A UA should act as if the fictional start tag
+of the ::first-letter pseudo-element is just before the first text of
+the element, even if that first text is in a descendant.</p>
+
+<div class="example">
+<p>Example:</p>
+<p>The fictional tag sequence for this HTMLfragment:
+<pre>&lt;div>
+&lt;p>The first text.</pre>
+<p>is:
+<pre>&lt;div>
+&lt;p>&lt;div::first-letter>&lt;p::first-letter>T&lt;/...>&lt;/...>he first text.</pre>
+</div>
+
+<p>The first letter of a table-cell or inline-block cannot be the
+first letter of an ancestor element. Thus, in <code>&lt;DIV&gt;&lt;P
+STYLE="display: inline-block">Hello&lt;BR&gt;Goodbye&lt;/P&gt;
+etcetera&lt;/DIV&gt;</code> the first letter of the <code>div</code> is not the
+letter "H". In fact, the <code>div</code> doesn't have a first letter.
+
+<p>The first letter must occur on the <a
+href="#first-formatted-line">first formatted line.</a> For example, in
+this fragment: <code>&lt;p&gt&lt;br&gt;First...</code> the first line
+doesn't contain any letters and <code>::first-letter</code> doesn't
+match anything (assuming the default style for <code>br</code> in HTML
+4). In particular, it does not match the "F" of "First."
+
+<p>In CSS, if an element is a list item ('display: list-item'), the
+<code>::first-letter</code> applies to the first letter in the
+principal box after the marker. UAs may ignore
+<code>::first-letter</code> on list items with 'list-style-position:
+inside'. If an element has <code>::before</code> or
+<code>::after</code> content, the <code>::first-letter</code> applies
+to the first letter of the element <em>including</em> that content.
+
+<div class="example">
+<p>Example:</p>
+<p>After the rule 'p::before {content: "Note: "}', the selector
+'p::first-letter' matches the "N" of "Note".</p>
+</div>
+
+<p>Some languages may have specific rules about how to treat certain
+letter combinations. In Dutch, for example, if the letter combination
+"ij" appears at the beginning of a word, both letters should be
+considered within the <code>::first-letter</code> pseudo-element.
+
+<p>If the letters that would form the ::first-letter are not in the
+same element, such as "'T" in <code>&lt;p>'&lt;em>T...</code>, the UA
+may create a ::first-letter pseudo-element from one of the elements,
+both elements, or simply not create a pseudo-element.</p>
+
+<p>Similarly, if the first letter(s) of the block are not at the start
+of the line (for example due to bidirectional reordering), then the UA
+need not create the pseudo-element(s).
+
+<div class="example">
+<p>Example:</p>
+<p><a name="overlapping-example">The following example</a> illustrates
+how overlapping pseudo-elements may interact. The first letter of
+each P element will be green with a font size of '24pt'. The rest of
+the first formatted line will be 'blue' while the rest of the
+paragraph will be 'red'.</p>
+
+<pre>p { color: red; font-size: 12pt }
+p::first-letter { color: green; font-size: 200% }
+p::first-line { color: blue }
+
+&lt;P&gt;Some text that ends up on two lines&lt;/P&gt;</pre>
+
+<p>Assuming that a line break will occur before the word "ends", the
+<span class="index-inst" title="fictional tag sequence">fictional tag
+sequence</span> for this fragment might be:</p>
+
+<pre>&lt;P&gt;
+&lt;P::first-line&gt;
+&lt;P::first-letter&gt;
+S
+&lt;/P::first-letter&gt;ome text that
+&lt;/P::first-line&gt;
+ends up on two lines
+&lt;/P&gt;</pre>
+
+<p>Note that the <code>::first-letter</code> element is inside the <code>::first-line</code>
+element. Properties set on <code>::first-line</code> are inherited by
+<code>::first-letter</code>, but are overridden if the same property is set on
+<code>::first-letter</code>.</p>
+</div>
+
+
+<h4><a name=UIfragments>7.3.</a> <a name=selection>The ::selection pseudo-element</a></h4>
+
+<p>The <code>::selection</code> pseudo-element applies to the portion
+of a document that has been highlighted by the user. This also
+applies, for example, to selected text within an editable text
+field. This pseudo-element should not be confused with the <code><a
+href="#checked">:checked</a></code> pseudo-class (which used to be
+named <code>:selected</code>)
+
+<p>Although the <code>::selection</code> pseudo-element is dynamic in
+nature, and is altered by user action, it is reasonable to expect that
+when a UA re-renders to a static medium (such as a printed page, see
+<a href="#refsCSS21">[CSS21]</a>) which was originally rendered to a
+dynamic medium (like screen), the UA may wish to transfer the current
+<code>::selection</code> state to that other medium, and have all the
+appropriate formatting and rendering take effect as well. This is not
+required &mdash; UAs may omit the <code>::selection</code>
+pseudo-element for static media.
+
+<p>These are the CSS properties that apply to <code>::selection</code>
+pseudo-elements: color, background, cursor (optional), outline
+(optional). The computed value of the 'background-image' property on
+<code>::selection</code> may be ignored.
+
+
+<h4><a name=gen-content>7.4. The ::before and ::after pseudo-elements</a></h4>
+
+<p>The <code>::before</code> and <code>::after</code> pseudo-elements
+can be used to describe generated content before or after an element's
+content. They are explained in CSS 2.1 <a
+href="#refsCSS21">[CSS21]</a>.</p>
+
+<p>When the <code>::first-letter</code> and <code>::first-line</code>
+pseudo-elements are combined with <code>::before</code> and
+<code>::after</code>, they apply to the first letter or line of the
+element including the inserted text.</p>
+
+<h2><a name=combinators>8. Combinators</a></h2>
+
+<h3><a name=descendant-combinators>8.1. Descendant combinator</a></h3>
+
+<p>At times, authors may want selectors to describe an element that is
+the descendant of another element in the document tree (e.g., "an
+<code>EM</code> element that is contained within an <code>H1</code>
+element"). Descendant combinators express such a relationship. A
+descendant combinator is <a href="#whitespace">white space</a> that
+separates two sequences of simple selectors. A selector of the form
+"<code>A B</code>" represents an element <code>B</code> that is an
+arbitrary descendant of some ancestor element <code>A</code>.
+
+<div class="example">
+ <p>Examples:</p>
+ <p>For example, consider the following selector:</p>
+ <pre>h1 em</pre>
+ <p>It represents an <code>em</code> element being the descendant of
+ an <code>h1</code> element. It is a correct and valid, but partial,
+ description of the following fragment:</p>
+ <pre>&lt;h1&gt;This &lt;span class="myclass"&gt;headline
+is &lt;em&gt;very&lt;/em&gt; important&lt;/span&gt;&lt;/h1&gt;</pre>
+ <p>The following selector:</p>
+ <pre>div * p</pre>
+ <p>represents a <code>p</code> element that is a grandchild or later
+ descendant of a <code>div</code> element. Note the whitespace on
+ either side of the "*" is not part of the universal selector; the
+ whitespace is a combinator indicating that the DIV must be the
+ ancestor of some element, and that that element must be an ancestor
+ of the P.</p>
+ <p>The following selector, which combines descendant combinators and
+ <a href="#attribute-selectors">attribute selectors</a>, represents an
+ element that (1) has the <code>href</code> attribute set and (2) is
+ inside a <code>p</code> that is itself inside a <code>div</code>:</p>
+ <pre>div p *[href]</pre>
+</div>
+
+<h3><a name=child-combinators>8.2. Child combinators</a></h3>
+
+<p>A <dfn>child combinator</dfn> describes a childhood relationship
+between two elements. A child combinator is made of the
+&quot;greater-than sign&quot; (<code>&gt;</code>) character and
+separates two sequences of simple selectors.
+
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element that is
+ child of <code>body</code>:</p>
+ <pre>body &gt; p</pre>
+ <p>The following example combines descendant combinators and child
+ combinators.</p>
+ <pre>div ol&gt;li p</pre><!-- LEAVE THOSE SPACES OUT! see below -->
+ <p>It represents a <code>p</code> element that is a descendant of an
+ <code>li</code> element; the <code>li</code> element must be the
+ child of an <code>ol</code> element; the <code>ol</code> element must
+ be a descendant of a <code>div</code>. Notice that the optional white
+ space around the "&gt;" combinator has been left out.</p>
+</div>
+
+<p>For information on selecting the first child of an element, please
+see the section on the <code><a
+href="#structural-pseudos">:first-child</a></code> pseudo-class
+above.</p>
+
+<h3><a name=sibling-combinators>8.3. Sibling combinators</a></h3>
+
+<p>There are two different sibling combinators: the adjacent sibling
+combinator and the general sibling combinator. In both cases,
+non-element nodes (e.g. text between elements) are ignored when
+considering adjacency of elements.</p>
+
+<h4><a name=adjacent-sibling-combinators>8.3.1. Adjacent sibling combinator</a></h4>
+
+<p>The adjacent sibling combinator is made of the &quot;plus
+sign&quot; (U+002B, <code>+</code>) character that separates two
+sequences of simple selectors. The elements represented by the two
+sequences share the same parent in the document tree and the element
+represented by the first sequence immediately precedes the element
+represented by the second one.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element
+ immediately following a <code>math</code> element:</p>
+ <pre>math + p</pre>
+ <p>The following selector is conceptually similar to the one in the
+ previous example, except that it adds an attribute selector &mdash; it
+ adds a constraint to the <code>h1</code> element, that it must have
+ <code>class="opener"</code>:</p>
+ <pre>h1.opener + h2</pre>
+</div>
+
+
+<h4><a name=general-sibling-combinators>8.3.2. General sibling combinator</a></h4>
+
+<p>The general sibling combinator is made of the &quot;tilde&quot;
+(U+007E, <code>~</code>) character that separates two sequences of
+simple selectors. The elements represented by the two sequences share
+the same parent in the document tree and the element represented by
+the first sequence precedes (not necessarily immediately) the element
+represented by the second one.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <pre>h1 ~ pre</pre>
+ <p>represents a <code>pre</code> element following an <code>h1</code>. It
+ is a correct and valid, but partial, description of:</p>
+ <pre>&lt;h1&gt;Definition of the function a&lt;/h1&gt;
+&lt;p&gt;Function a(x) has to be applied to all figures in the table.&lt;/p&gt;
+&lt;pre&gt;function a(x) = 12x/13.5&lt;/pre&gt;</pre>
+</div>
+
+<h2><a name=specificity>9. Calculating a selector's specificity</a></h2>
+
+<p>A selector's specificity is calculated as follows:</p>
+
+<ul>
+ <li>count the number of ID selectors in the selector (= a)</li>
+ <li>count the number of class selectors, attributes selectors, and pseudo-classes in the selector (= b)</li>
+ <li>count the number of element names in the selector (= c)</li>
+ <li>ignore pseudo-elements</li>
+</ul>
+
+<p>Selectors inside <a href="#negation">the negation pseudo-class</a>
+are counted like any other, but the negation itself does not count as
+a pseudo-class.</p>
+
+<p>Concatenating the three numbers a-b-c (in a number system with a
+large base) gives the specificity.</p>
+
+<div class="example">
+<p>Examples:</p>
+<pre>* /* a=0 b=0 c=0 -&gt; specificity = 0 */
+LI /* a=0 b=0 c=1 -&gt; specificity = 1 */
+UL LI /* a=0 b=0 c=2 -&gt; specificity = 2 */
+UL OL+LI /* a=0 b=0 c=3 -&gt; specificity = 3 */
+H1 + *[REL=up] /* a=0 b=1 c=1 -&gt; specificity = 11 */
+UL OL LI.red /* a=0 b=1 c=3 -&gt; specificity = 13 */
+LI.red.level /* a=0 b=2 c=1 -&gt; specificity = 21 */
+#x34y /* a=1 b=0 c=0 -&gt; specificity = 100 */
+#s12:not(FOO) /* a=1 b=0 c=1 -&gt; specificity = 101 */
+</pre>
+</div>
+
+<p class="note"><strong>Note:</strong> the specificity of the styles
+specified in an HTML <code>style</code> attribute is described in CSS
+2.1. <a href="#refsCSS21">[CSS21]</a>.</p>
+
+<h2><a name=w3cselgrammar>10. The grammar of Selectors</a></h2>
+
+<h3><a name=grammar>10.1. Grammar</a></h3>
+
+<p>The grammar below defines the syntax of Selectors. It is globally
+LL(1) and can be locally LL(2) (but note that most UA's should not use
+it directly, since it doesn't express the parsing conventions). The
+format of the productions is optimized for human consumption and some
+shorthand notations beyond Yacc (see <a href="#refsYACC">[YACC]</a>)
+are used:</p>
+
+<ul>
+ <li><b>*</b>: 0 or more
+ <li><b>+</b>: 1 or more
+ <li><b>?</b>: 0 or 1
+ <li><b>|</b>: separates alternatives
+ <li><b>[ ]</b>: grouping </li>
+</ul>
+
+<p>The productions are:</p>
+
+<pre>selectors_group
+ : selector [ COMMA S* selector ]*
+ ;
+
+selector
+ : simple_selector_sequence [ combinator simple_selector_sequence ]*
+ ;
+
+combinator
+ /* combinators can be surrounded by white space */
+ : PLUS S* | GREATER S* | TILDE S* | S+
+ ;
+
+simple_selector_sequence
+ : [ type_selector | universal ]
+ [ HASH | class | attrib | pseudo | negation ]*
+ | [ HASH | class | attrib | pseudo | negation ]+
+ ;
+
+type_selector
+ : [ namespace_prefix ]? element_name
+ ;
+
+namespace_prefix
+ : [ IDENT | '*' ]? '|'
+ ;
+
+element_name
+ : IDENT
+ ;
+
+universal
+ : [ namespace_prefix ]? '*'
+ ;
+
+class
+ : '.' IDENT
+ ;
+
+attrib
+ : '[' S* [ namespace_prefix ]? IDENT S*
+ [ [ PREFIXMATCH |
+ SUFFIXMATCH |
+ SUBSTRINGMATCH |
+ '=' |
+ INCLUDES |
+ DASHMATCH ] S* [ IDENT | STRING ] S*
+ ]? ']'
+ ;
+
+pseudo
+ /* '::' starts a pseudo-element, ':' a pseudo-class */
+ /* Exceptions: :first-line, :first-letter, :before and :after. */
+ /* Note that pseudo-elements are restricted to one per selector and */
+ /* occur only in the last simple_selector_sequence. */
+ : ':' ':'? [ IDENT | functional_pseudo ]
+ ;
+
+functional_pseudo
+ : FUNCTION S* expression ')'
+ ;
+
+expression
+ /* In CSS3, the expressions are identifiers, strings, */
+ /* or of the form "an+b" */
+ : [ [ PLUS | '-' | DIMENSION | NUMBER | STRING | IDENT ] S* ]+
+ ;
+
+negation
+ : NOT S* negation_arg S* ')'
+ ;
+
+negation_arg
+ : type_selector | universal | HASH | class | attrib | pseudo
+ ;</pre>
+
+
+<h3><a name=lex>10.2. Lexical scanner</a></h3>
+
+<p>The following is the <a name=x3>tokenizer</a>, written in Flex (see
+<a href="#refsFLEX">[FLEX]</a>) notation. The tokenizer is
+case-insensitive.</p>
+
+<p>The two occurrences of "\377" represent the highest character
+number that current versions of Flex can deal with (decimal 255). They
+should be read as "\4177777" (decimal 1114111), which is the highest
+possible code point in Unicode/ISO-10646. <a
+href="#refsUNICODE">[UNICODE]</a></p>
+
+<pre>%option case-insensitive
+
+ident [-]?{nmstart}{nmchar}*
+name {nmchar}+
+nmstart [_a-z]|{nonascii}|{escape}
+nonascii [^\0-\177]
+unicode \\[0-9a-f]{1,6}(\r\n|[ \n\r\t\f])?
+escape {unicode}|\\[^\n\r\f0-9a-f]
+nmchar [_a-z0-9-]|{nonascii}|{escape}
+num [0-9]+|[0-9]*\.[0-9]+
+string {string1}|{string2}
+string1 \"([^\n\r\f\\"]|\\{nl}|{nonascii}|{escape})*\"
+string2 \'([^\n\r\f\\']|\\{nl}|{nonascii}|{escape})*\'
+invalid {invalid1}|{invalid2}
+invalid1 \"([^\n\r\f\\"]|\\{nl}|{nonascii}|{escape})*
+invalid2 \'([^\n\r\f\\']|\\{nl}|{nonascii}|{escape})*
+nl \n|\r\n|\r|\f
+w [ \t\r\n\f]*
+
+%%
+
+[ \t\r\n\f]+ return S;
+
+"~=" return INCLUDES;
+"|=" return DASHMATCH;
+"^=" return PREFIXMATCH;
+"$=" return SUFFIXMATCH;
+"*=" return SUBSTRINGMATCH;
+{ident} return IDENT;
+{string} return STRING;
+{ident}"(" return FUNCTION;
+{num} return NUMBER;
+"#"{name} return HASH;
+{w}"+" return PLUS;
+{w}"&gt;" return GREATER;
+{w}"," return COMMA;
+{w}"~" return TILDE;
+":not(" return NOT;
+@{ident} return ATKEYWORD;
+{invalid} return INVALID;
+{num}% return PERCENTAGE;
+{num}{ident} return DIMENSION;
+"&lt;!--" return CDO;
+"--&gt;" return CDC;
+
+"url("{w}{string}{w}")" return URI;
+"url("{w}([!#$%&*-~]|{nonascii}|{escape})*{w}")" return URI;
+U\+[0-9a-f?]{1,6}(-[0-9a-f]{1,6})? return UNICODE_RANGE;
+
+\/\*[^*]*\*+([^/*][^*]*\*+)*\/ /* ignore comments */
+
+. return *yytext;</pre>
+
+
+
+<h2><a name=downlevel>11. Namespaces and down-level clients</a></h2>
+
+<p>An important issue is the interaction of CSS selectors with XML
+documents in web clients that were produced prior to this
+document. Unfortunately, due to the fact that namespaces must be
+matched based on the URI which identifies the namespace, not the
+namespace prefix, some mechanism is required to identify namespaces in
+CSS by their URI as well. Without such a mechanism, it is impossible
+to construct a CSS style sheet which will properly match selectors in
+all cases against a random set of XML documents. However, given
+complete knowledge of the XML document to which a style sheet is to be
+applied, and a limited use of namespaces within the XML document, it
+is possible to construct a style sheet in which selectors would match
+elements and attributes correctly.</p>
+
+<p>It should be noted that a down-level CSS client will (if it
+properly conforms to CSS forward compatible parsing rules) ignore all
+<code>@namespace</code> at-rules, as well as all style rules that make
+use of namespace qualified element type or attribute selectors. The
+syntax of delimiting namespace prefixes in CSS was deliberately chosen
+so that down-level CSS clients would ignore the style rules rather
+than possibly match them incorrectly.</p>
+
+<p>The use of default namespaces in CSS makes it possible to write
+element type selectors that will function in both namespace aware CSS
+clients as well as down-level clients. It should be noted that
+down-level clients may incorrectly match selectors against XML
+elements in other namespaces.</p>
+
+<p>The following are scenarios and examples in which it is possible to
+construct style sheets which would function properly in web clients
+that do not implement this proposal.</p>
+
+<ol>
+ <li>
+
+ <p>The XML document does not use namespaces.</p>
+
+ <ul>
+
+ <li>In this case, it is obviously not necessary to declare or use
+ namespaces in the style sheet. Standard CSS element type and
+ attribute selectors will function adequately in a down-level
+ client.</li>
+
+ <li>In a CSS namespace aware client, the default behavior of
+ element selectors matching without regard to namespace will
+ function properly against all elements, since no namespaces are
+ present. However, the use of specific element type selectors that
+ match only elements that have no namespace ("<code>|name</code>")
+ will guarantee that selectors will match only XML elements that do
+ not have a declared namespace. </li>
+
+ </ul>
+
+ </li>
+
+ <li>
+
+ <p>The XML document defines a single, default namespace used
+ throughout the document. No namespace prefixes are used in element
+ names.</p>
+
+ <ul>
+
+ <li>In this case, a down-level client will function as if
+ namespaces were not used in the XML document at all. Standard CSS
+ element type and attribute selectors will match against all
+ elements. </li>
+
+ </ul>
+
+ </li>
+
+ <li>
+
+ <p>The XML document does <b>not</b> use a default namespace, all
+ namespace prefixes used are known to the style sheet author, and
+ there is a direct mapping between namespace prefixes and namespace
+ URIs. (A given prefix may only be mapped to one namespace URI
+ throughout the XML document; there may be multiple prefixes mapped
+ to the same URI).</p>
+
+ <ul>
+
+ <li>In this case, the down-level client will view and match
+ element type and attribute selectors based on their fully
+ qualified name, not the local part as outlined in the <a
+ href="#typenmsp">Type selectors and Namespaces</a> section. CSS
+ selectors may be declared using an escaped colon "<code>\:</code>"
+ to describe the fully qualified names, e.g.
+ "<code>html\:h1</code>" will match
+ <code>&lt;html:h1&gt;</code>. Selectors using the qualified name
+ will only match XML elements that use the same prefix. Other
+ namespace prefixes used in the XML that are mapped to the same URI
+ will not match as expected unless additional CSS style rules are
+ declared for them.</li>
+
+ <li>Note that selectors declared in this fashion will
+ <em>only</em> match in down-level clients. A CSS namespace aware
+ client will match element type and attribute selectors based on
+ the name's local part. Selectors declared with the fully
+ qualified name will not match (unless there is no namespace prefix
+ in the fully qualified name).</li>
+
+ </ul>
+
+ </li>
+
+ </ol>
+
+<p>In other scenarios: when the namespace prefixes used in the XML are
+not known in advance by the style sheet author; or a combination of
+elements with no namespace are used in conjunction with elements using
+a default namespace; or the same namespace prefix is mapped to
+<em>different</em> namespace URIs within the same document, or in
+different documents; it is impossible to construct a CSS style sheet
+that will function properly against all elements in those documents,
+unless, the style sheet is written using a namespace URI syntax (as
+outlined in this document or similar) and the document is processed by
+a CSS and XML namespace aware client.</p>
+
+<h2><a name=profiling>12. Profiles</a></h2>
+
+<p>Each specification using Selectors must define the subset of W3C
+Selectors it allows and excludes, and describe the local meaning of
+all the components of that subset.</p>
+
+<p>Non normative examples:
+
+<div class="profile">
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>CSS level 1</td></tr>
+ <tr>
+ <th>Accepts</th>
+ <td>type selectors<br>class selectors<br>ID selectors<br>:link,
+ :visited and :active pseudo-classes<br>descendant combinator
+ <br>::first-line and ::first-letter pseudo-elements</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>
+
+<p>universal selector<br>attribute selectors<br>:hover and :focus
+ pseudo-classes<br>:target pseudo-class<br>:lang() pseudo-class<br>all UI
+ element states pseudo-classes<br>all structural
+ pseudo-classes<br>negation pseudo-class<br>all
+ UI element fragments pseudo-elements<br>::before and ::after
+ pseudo-elements<br>child combinators<br>sibling combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>only one class selector allowed per sequence of simple
+ selectors</td></tr></tbody></table><br><br>
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>CSS level 2</td></tr>
+ <tr>
+ <th>Accepts</th>
+ <td>type selectors<br>universal selector<br>attribute presence and
+ values selectors<br>class selectors<br>ID selectors<br>:link, :visited,
+ :active, :hover, :focus, :lang() and :first-child pseudo-classes
+ <br>descendant combinator<br>child combinator<br>adjacent sibling
+ combinator<br>::first-line and ::first-letter pseudo-elements<br>::before
+ and ::after pseudo-elements</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>
+
+<p>content selectors<br>substring matching attribute
+ selectors<br>:target pseudo-classes<br>all UI element
+ states pseudo-classes<br>all structural pseudo-classes other
+ than :first-child<br>negation pseudo-class<br>all UI element
+ fragments pseudo-elements<br>general sibling combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>more than one class selector per sequence of simple selectors (CSS1
+ constraint) allowed</td></tr></tbody></table>
+
+<p>In CSS, selectors express pattern matching rules that determine which style
+rules apply to elements in the document tree.
+
+<p>The following selector (CSS level 2) will <b>match</b> all anchors <code>a</code>
+with attribute <code>name</code> set inside a section 1 header <code>h1</code>:
+<pre>h1 a[name]</pre>
+
+<p>All CSS declarations attached to such a selector are applied to elements
+matching it. </div>
+
+<div class="profile">
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>STTS 3</td>
+ </tr>
+ <tr>
+ <th>Accepts</th>
+ <td>
+
+<p>type selectors<br>universal selectors<br>attribute selectors<br>class
+ selectors<br>ID selectors<br>all structural pseudo-classes<br>
+ all combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>non-accepted pseudo-classes<br>pseudo-elements<br></td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>some selectors and combinators are not allowed in fragment
+ descriptions on the right side of STTS declarations.</td></tr></tbody></table>
+<form>
+<input type="text" name="test10"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+</form>
+
+<p>Selectors can be used in STTS 3 in two different
+ manners:
+<ol>
+ <li>a selection mechanism equivalent to CSS selection mechanism: declarations
+ attached to a given selector are applied to elements matching that selector,
+ <li>fragment descriptions that appear on the right side of declarations.
+</li></ol></div>
+
+<h2><a name=Conformance></a>13. Conformance and requirements</h2>
+
+<p>This section defines conformance with the present specification only.
+
+<p>The inability of a user agent to implement part of this specification due to
+the limitations of a particular device (e.g., non interactive user agents will
+probably not implement dynamic pseudo-classes because they make no sense without
+interactivity) does not imply non-conformance.
+
+<p>All specifications reusing Selectors must contain a <a
+href="#profiling">Profile</a> listing the
+subset of Selectors it accepts or excludes, and describing the constraints
+it adds to the current specification.
+
+<p>Invalidity is caused by a parsing error, e.g. an unrecognized token or a token
+which is not allowed at the current parsing point.
+
+<p>User agents must observe the rules for handling parsing errors:
+<ul>
+ <li>a simple selector containing an undeclared namespace prefix is invalid</li>
+ <li>a selector containing an invalid simple selector, an invalid combinator
+ or an invalid token is invalid. </li>
+ <li>a group of selectors containing an invalid selector is invalid.</li>
+</ul>
+
+<p class="foo test10 bar">Specifications reusing Selectors must define how to handle parsing
+errors. (In the case of CSS, the entire rule in which the selector is
+used is dropped.)</p>
+
+<!-- Apparently all these references are out of date:
+<p>Implementations of this specification must behave as
+"recipients of text data" as defined by <a href="#refsCWWW">[CWWW]</a>
+when parsing selectors and attempting matches. (In particular,
+implementations must assume the data is normalized and must not
+normalize it.) Normative rules for matching strings are defined in
+<a href="#refsCWWW">[CWWW]</a> and <a
+href="#refsUNICODE">[UNICODE]</a> and apply to implementations of this
+specification.</p>-->
+
+<h2><a name=Tests></a>14. Tests</h2>
+
+<p>This specification has <a
+href="http://www.w3.org/Style/CSS/Test/CSS3/Selectors/current/">a test
+suite</a> allowing user agents to verify their basic conformance to
+the specification. This test suite does not pretend to be exhaustive
+and does not cover all possible combined cases of Selectors.</p>
+
+<h2><a name=ACKS></a>15. Acknowledgements</h2>
+
+<p>The CSS working group would like to thank everyone who has sent
+comments on this specification over the years.</p>
+
+<p>The working group would like to extend special thanks to Donna
+McManus, Justin Baker, Joel Sklar, and Molly Ives Brower who perfermed
+the final editorial review.</p>
+
+<h2><a name=references>16. References</a></h2>
+
+<dl class="refs">
+
+ <dt>[CSS1]
+ <dd><a name=refsCSS1></a> Bert Bos, H&aring;kon Wium Lie; "<cite>Cascading Style Sheets, level 1</cite>", W3C Recommendation, 17 Dec 1996, revised 11 Jan 1999
+ <dd>(<code><a href="http://www.w3.org/TR/REC-CSS1">http://www.w3.org/TR/REC-CSS1</a></code>)
+
+ <dt>[CSS21]
+ <dd><a name=refsCSS21></a> Bert Bos, Tantek &Ccedil;elik, Ian Hickson, H&aring;kon Wium Lie, editors; "<cite>Cascading Style Sheets, level 2 revision 1</cite>", W3C Working Draft, 13 June 2005
+ <dd>(<code><a href="http://www.w3.org/TR/CSS21">http://www.w3.org/TR/CSS21</a></code>)
+
+ <dt>[CWWW]
+ <dd><a name=refsCWWW></a> Martin J. D&uuml;rst, Fran&ccedil;ois Yergeau, Misha Wolf, Asmus Freytag, Tex Texin, editors; "<cite>Character Model for the World Wide Web</cite>", W3C Recommendation, 15 February 2005
+ <dd>(<code><a href="http://www.w3.org/TR/charmod/">http://www.w3.org/TR/charmod/</a></code>)
+
+ <dt>[FLEX]
+ <dd><a name="refsFLEX"></a> "<cite>Flex: The Lexical Scanner Generator</cite>", Version 2.3.7, ISBN 1882114213
+
+ <dt>[HTML4]
+ <dd><a name="refsHTML4"></a> Dave Ragget, Arnaud Le Hors, Ian Jacobs, editors; "<cite>HTML 4.01 Specification</cite>", W3C Recommendation, 24 December 1999
+ <dd>(<a href="http://www.w3.org/TR/html4/"><code>http://www.w3.org/TR/html4/</code></a>)
+
+ <dt>[MATH]
+ <dd><a name="refsMATH"></a> Patrick Ion, Robert Miner, editors; "<cite>Mathematical Markup Language (MathML) 1.01</cite>", W3C Recommendation, revision of 7 July 1999
+ <dd>(<code><a href="http://www.w3.org/TR/REC-MathML/">http://www.w3.org/TR/REC-MathML/</a></code>)
+
+ <dt>[RFC3066]
+ <dd><a name="refsRFC3066"></a> H. Alvestrand; "<cite>Tags for the Identification of Languages</cite>", Request for Comments 3066, January 2001
+ <dd>(<a href="http://www.ietf.org/rfc/rfc3066.txt"><code>http://www.ietf.org/rfc/rfc3066.txt</code></a>)
+
+ <dt>[STTS]
+ <dd><a name=refsSTTS></a> Daniel Glazman; "<cite>Simple Tree Transformation Sheets 3</cite>", Electricit&eacute; de France, submission to the W3C, 11 November 1998
+ <dd>(<code><a href="http://www.w3.org/TR/NOTE-STTS3">http://www.w3.org/TR/NOTE-STTS3</a></code>)
+
+ <dt>[SVG]
+ <dd><a name="refsSVG"></a> Jon Ferraiolo, &#34276;&#27810; &#28147;, Dean Jackson, editors; "<cite>Scalable Vector Graphics (SVG) 1.1 Specification</cite>", W3C Recommendation, 14 January 2003
+ <dd>(<code><a href="http://www.w3.org/TR/SVG/">http://www.w3.org/TR/SVG/</a></code>)
+
+ <dt>[UNICODE]</dt>
+ <dd><a name="refsUNICODE"></a> <cite><a
+ href="http://www.unicode.org/versions/Unicode4.1.0/">The Unicode Standard, Version 4.1</a></cite>, The Unicode Consortium. Boston, MA, Addison-Wesley, March 2005. ISBN 0-321-18578-1, as amended by <a href="http://www.unicode.org/versions/Unicode4.0.1/">Unicode 4.0.1</a> and <a href="http://www.unicode.org/versions/Unicode4.1.0/">Unicode 4.1.0</a>.
+ <dd>(<code><a href="http://www.unicode.org/versions/">http://www.unicode.org/versions/</a></code>)</dd>
+
+ <dt>[XML10]
+ <dd><a name="refsXML10"></a> Tim Bray, Jean Paoli, C. M. Sperberg-McQueen, Eve Maler, Fran&ccedil;ois Yergeau, editors; "<cite>Extensible Markup Language (XML) 1.0 (Third Edition)</cite>", W3C Recommendation, 4 February 2004
+ <dd>(<a href="http://www.w3.org/TR/REC-xml/"><code>http://www.w3.org/TR/REC-xml/</code></a>)
+
+ <dt>[XMLNAMES]
+ <dd><a name="refsXMLNAMES"></a> Tim Bray, Dave Hollander, Andrew Layman, editors; "<cite>Namespaces in XML</cite>", W3C Recommendation, 14 January 1999
+ <dd>(<a href="http://www.w3.org/TR/REC-xml-names/"><code>http://www.w3.org/TR/REC-xml-names/</code></a>)
+
+ <dt>[YACC]
+ <dd><a name="refsYACC"></a> S. C. Johnson; "<cite>YACC &mdash; Yet another compiler compiler</cite>", Technical Report, Murray Hill, 1975
+
+</dl>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/jslib-modify-prototype.html b/testing/talos/talos/tests/dromaeo/tests/jslib-modify-prototype.html
new file mode 100644
index 0000000000..6d3f24a7c3
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/jslib-modify-prototype.html
@@ -0,0 +1,2960 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script src="../lib/prototype.js"></script>
+<script>
+window.onload = function(){
+startTest("jslib-modify-prototype", '8fe35dff');
+
+// Try to force real results
+var ret, tmp, div, a, dd;
+
+var html = document.body.innerHTML,
+ elem = document.createElement("div"),
+ elem2 = document.createElement("strong"),
+ elemStr = "<strong>some text</strong>";
+
+ prep(function(){
+ a = $$("a");
+ dd = $$("dd");
+ div = $$("div");
+ var tmp = document.createElement("div");
+ tmp.innerHTML = html;
+ document.body.appendChild( tmp );
+ });
+
+ /* // Need a good way to test this
+ test("Prototype - wrap()", function(){
+ div.invoke("wrap", "div");
+ });
+ */
+
+ test("Prototype - update()", function(){
+ dd.invoke("update", elemStr);
+ });
+
+ test("Prototype - before", function(){
+ div.invoke("insert", {before: elemStr});
+ });
+
+ test("Prototype - after", function(){
+ div.invoke("insert", {after: elemStr});
+ });
+
+ test("Prototype - prepend", function(){
+ div.invoke("insert", {top: elemStr});
+ });
+
+ test("Prototype - append", function(){
+ div.invoke("insert", {bottom: elemStr});
+ });
+
+ /* // Need a good way to test
+ test("Prototype - replace()", function(){
+ div.invoke("replace", elem );
+ });
+
+ test("Prototype - remove()", function(){
+ div.invoke("remove");
+ });
+ */
+
+endTest();
+};
+</script>
+</head>
+<body>
+ <div class="head">
+ <p><a href="http://www.w3.org/"><img height=48 alt=W3C src="w3c_home.png" width=72></a>
+
+ <h1 id="title">Selectors</h1>
+
+ <h2>W3C Working Draft 15 December 2005</h2>
+
+ <dl>
+
+ <dt>This version:
+
+ <dd><a href="http://www.w3.org/TR/2005/WD-css3-selectors-20051215">
+ http://www.w3.org/TR/2005/WD-css3-selectors-20051215</a>
+
+ <dt>Latest version:
+
+ <dd><a href="http://www.w3.org/TR/css3-selectors">
+ http://www.w3.org/TR/css3-selectors</a>
+
+ <dt>Previous version:
+
+ <dd><a href="http://www.w3.org/TR/2001/CR-css3-selectors-20011113">
+ http://www.w3.org/TR/2001/CR-css3-selectors-20011113</a>
+
+ <dt><a name=editors-list></a>Editors:
+
+ <dd class="vcard"><span class="fn">Daniel Glazman</span> (Invited Expert)</dd>
+
+ <dd class="vcard"><a lang="tr" class="url fn" href="http://www.tantek.com/">Tantek &Ccedil;elik</a> (Invited Expert)
+
+ <dd class="vcard"><a href="mailto:ian@hixie.ch" class="url fn">Ian Hickson</a> (<span
+ class="company"><a href="http://www.google.com/">Google</a></span>)
+
+ <dd class="vcard"><span class="fn">Peter Linss</span> (former editor, <span class="company"><a
+ href="http://www.netscape.com/">Netscape/AOL</a></span>)
+
+ <dd class="vcard"><span class="fn">John Williams</span> (former editor, <span class="company"><a
+ href="http://www.quark.com/">Quark, Inc.</a></span>)
+
+ </dl>
+
+ <p class="copyright"><a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright">
+ Copyright</a> &copy; 2005 <a href="http://www.w3.org/"><abbr
+ title="World Wide Web Consortium">W3C</abbr></a><sup>&reg;</sup>
+ (<a href="http://www.csail.mit.edu/"><abbr title="Massachusetts
+ Institute of Technology">MIT</abbr></a>, <a
+ href="http://www.ercim.org/"><acronym title="European Research
+ Consortium for Informatics and Mathematics">ERCIM</acronym></a>, <a
+ href="http://www.keio.ac.jp/">Keio</a>), All Rights Reserved. W3C
+ <a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">liability</a>,
+ <a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">trademark</a>,
+ <a
+ href="http://www.w3.org/Consortium/Legal/copyright-documents">document
+ use</a> rules apply.
+
+ <hr title="Separator for header">
+
+ </div>
+
+ <h2><a name=abstract></a>Abstract</h2>
+
+ <p><em>Selectors</em> are patterns that match against elements in a
+ tree. Selectors have been optimized for use with HTML and XML, and
+ are designed to be usable in performance-critical code.</p>
+
+ <p><acronym title="Cascading Style Sheets">CSS</acronym> (Cascading
+ Style Sheets) is a language for describing the rendering of <acronym
+ title="Hypertext Markup Language">HTML</acronym> and <acronym
+ title="Extensible Markup Language">XML</acronym> documents on
+ screen, on paper, in speech, etc. CSS uses Selectors for binding
+ style properties to elements in the document. This document
+ describes extensions to the selectors defined in CSS level 2. These
+ extended selectors will be used by CSS level 3.
+
+ <p>Selectors define the following function:</p>
+
+ <pre>expression &#x2217; element &rarr; boolean</pre>
+
+ <p>That is, given an element and a selector, this specification
+ defines whether that element matches the selector.</p>
+
+ <p>These expressions can also be used, for instance, to select a set
+ of elements, or a single element from a set of elements, by
+ evaluating the expression across all the elements in a
+ subtree. <acronym title="Simple Tree Transformation
+ Sheets">STTS</acronym> (Simple Tree Transformation Sheets), a
+ language for transforming XML trees, uses this mechanism. <a href="#refsSTTS">[STTS]</a></p>
+
+ <h2><a name=status></a>Status of this document</h2>
+
+ <p><em>This section describes the status of this document at the
+ time of its publication. Other documents may supersede this
+ document. A list of current W3C publications and the latest revision
+ of this technical report can be found in the <a
+ href="http://www.w3.org/TR/">W3C technical reports index at
+ http://www.w3.org/TR/.</a></em></p>
+
+ <p>This document describes the selectors that already exist in <a
+ href="#refsCSS1"><abbr title="CSS level 1">CSS1</abbr></a> and <a
+ href="#refsCSS21"><abbr title="CSS level 2">CSS2</abbr></a>, and
+ also proposes new selectors for <abbr title="CSS level
+ 3">CSS3</abbr> and other languages that may need them.</p>
+
+ <p>The CSS Working Group doesn't expect that all implementations of
+ CSS3 will have to implement all selectors. Instead, there will
+ probably be a small number of variants of CSS3, called profiles. For
+ example, it may be that only a profile for interactive user agents
+ will include all of the selectors.</p>
+
+ <p>This specification is a last call working draft for the the <a
+ href="http://www.w3.org/Style/CSS/members">CSS Working Group</a>
+ (<a href="/Style/">Style Activity</a>). This
+ document is a revision of the <a
+ href="http://www.w3.org/TR/2001/CR-css3-selectors-20011113/">Candidate
+ Recommendation dated 2001 November 13</a>, and has incorporated
+ implementation feedback received in the past few years. It is
+ expected that this last call will proceed straight to Proposed
+ Recommendation stage since it is believed that interoperability will
+ be demonstrable.</p>
+
+ <p>All persons are encouraged to review and implement this
+ specification and return comments to the (<a
+ href="http://lists.w3.org/Archives/Public/www-style/">archived</a>)
+ public mailing list <a
+ href="http://www.w3.org/Mail/Lists.html#www-style">www-style</a>
+ (see <a href="http://www.w3.org/Mail/Request">instructions</a>). W3C
+ Members can also send comments directly to the CSS Working
+ Group.
+ The deadline for comments is 14 January 2006.</p>
+
+ <p>This is still a draft document and may be updated, replaced, or
+ obsoleted by other documents at any time. It is inappropriate to
+ cite a W3C Working Draft as other than &quot;work in progress&quot;.
+
+ <p>This document may be available in <a
+ href="http://www.w3.org/Style/css3-selectors-updates/translations">translation</a>.
+ The English version of this specification is the only normative
+ version.
+
+ <div class="subtoc">
+
+ <h2 id="test10"><a name=contents>Table of contents</a></h2>
+
+ <ul class="toc">
+ <li class="tocline2"><a href="#context">1. Introduction</a>
+ <ul>
+ <li><a href="#dependencies">1.1. Dependencies</a> </li>
+ <li><a href="#terminology">1.2. Terminology</a> </li>
+ <li><a href="#changesFromCSS2">1.3. Changes from CSS2</a> </li>
+ </ul>
+ <li class="tocline2"><a href="#selectors">2. Selectors</a>
+ <li class="tocline2"><a href="#casesens">3. Case sensitivity</a>
+ <li class="tocline2"><a href="#selector-syntax">4. Selector syntax</a>
+ <li class="tocline2"><a href="#grouping">5. Groups of selectors</a>
+ <li class="tocline2"><a href="#simple-selectors">6. Simple selectors</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#type-selectors">6.1. Type selectors</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#typenmsp">6.1.1. Type selectors and namespaces</a></li>
+ </ul>
+ <li class="tocline3"><a href="#universal-selector">6.2. Universal selector</a>
+ <ul>
+ <li><a href="#univnmsp">6.2.1. Universal selector and namespaces</a></li>
+ </ul>
+ <li class="tocline3"><a href="#attribute-selectors">6.3. Attribute selectors</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#attribute-representation">6.3.1. Representation of attributes and attributes values</a>
+ <li><a href="#attribute-substrings">6.3.2. Substring matching attribute selectors</a>
+ <li class="tocline4"><a href="#attrnmsp">6.3.3. Attribute selectors and namespaces</a>
+ <li class="tocline4"><a href="#def-values">6.3.4. Default attribute values in DTDs</a></li>
+ </ul>
+ <li class="tocline3"><a href="#class-html">6.4. Class selectors</a>
+ <li class="tocline3"><a href="#id-selectors">6.5. ID selectors</a>
+ <li class="tocline3"><a href="#pseudo-classes">6.6. Pseudo-classes</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#dynamic-pseudos">6.6.1. Dynamic pseudo-classes</a>
+ <li class="tocline4"><a href="#target-pseudo">6.6.2. The :target pseudo-class</a>
+ <li class="tocline4"><a href="#lang-pseudo">6.6.3. The :lang() pseudo-class</a>
+ <li class="tocline4"><a href="#UIstates">6.6.4. UI element states pseudo-classes</a>
+ <li class="tocline4"><a href="#structural-pseudos">6.6.5. Structural pseudo-classes</a>
+ <ul>
+ <li><a href="#root-pseudo">:root pseudo-class</a>
+ <li><a href="#nth-child-pseudo">:nth-child() pseudo-class</a>
+ <li><a href="#nth-last-child-pseudo">:nth-last-child()</a>
+ <li><a href="#nth-of-type-pseudo">:nth-of-type() pseudo-class</a>
+ <li><a href="#nth-last-of-type-pseudo">:nth-last-of-type()</a>
+ <li><a href="#first-child-pseudo">:first-child pseudo-class</a>
+ <li><a href="#last-child-pseudo">:last-child pseudo-class</a>
+ <li><a href="#first-of-type-pseudo">:first-of-type pseudo-class</a>
+ <li><a href="#last-of-type-pseudo">:last-of-type pseudo-class</a>
+ <li><a href="#only-child-pseudo">:only-child pseudo-class</a>
+ <li><a href="#only-of-type-pseudo">:only-of-type pseudo-class</a>
+ <li><a href="#empty-pseudo">:empty pseudo-class</a></li>
+ </ul>
+ <li class="tocline4"><a href="#negation">6.6.7. The negation pseudo-class</a></li>
+ </ul>
+ </li>
+ </ul>
+ <li><a href="#pseudo-elements">7. Pseudo-elements</a>
+ <ul>
+ <li><a href="#first-line">7.1. The ::first-line pseudo-element</a>
+ <li><a href="#first-letter">7.2. The ::first-letter pseudo-element</a>
+ <li><a href="#UIfragments">7.3. The ::selection pseudo-element</a>
+ <li><a href="#gen-content">7.4. The ::before and ::after pseudo-elements</a></li>
+ </ul>
+ <li class="tocline2"><a href="#combinators">8. Combinators</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#descendant-combinators">8.1. Descendant combinators</a>
+ <li class="tocline3"><a href="#child-combinators">8.2. Child combinators</a>
+ <li class="tocline3"><a href="#sibling-combinators">8.3. Sibling combinators</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#adjacent-sibling-combinators">8.3.1. Adjacent sibling combinator</a>
+ <li class="tocline4"><a href="#general-sibling-combinators">8.3.2. General sibling combinator</a></li>
+ </ul>
+ </li>
+ </ul>
+ <li class="tocline2"><a href="#specificity">9. Calculating a selector's specificity</a>
+ <li class="tocline2"><a href="#w3cselgrammar">10. The grammar of Selectors</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#grammar">10.1. Grammar</a>
+ <li class="tocline3"><a href="#lex">10.2. Lexical scanner</a></li>
+ </ul>
+ <li class="tocline2"><a href="#downlevel">11. Namespaces and down-level clients</a>
+ <li class="tocline2"><a href="#profiling">12. Profiles</a>
+ <li><a href="#Conformance">13. Conformance and requirements</a>
+ <li><a href="#Tests">14. Tests</a>
+ <li><a href="#ACKS">15. Acknowledgements</a>
+ <li class="tocline2"><a href="#references">16. References</a>
+ </ul>
+
+ </div>
+
+ <h2><a name=context>1. Introduction</a></h2>
+
+ <h3><a name=dependencies></a>1.1. Dependencies</h3>
+
+ <p>Some features of this specification are specific to CSS, or have
+ particular limitations or rules specific to CSS. In this
+ specification, these have been described in terms of CSS2.1. <a
+ href="#refsCSS21">[CSS21]</a></p>
+
+ <h3><a name=terminology></a>1.2. Terminology</h3>
+
+ <p>All of the text of this specification is normative except
+ examples, notes, and sections explicitly marked as
+ non-normative.</p>
+
+ <h3><a name=changesFromCSS2></a>1.3. Changes from CSS2</h3>
+
+ <p><em>This section is non-normative.</em></p>
+
+ <p>The main differences between the selectors in CSS2 and those in
+ Selectors are:
+
+ <ul>
+
+ <li>the list of basic definitions (selector, group of selectors,
+ simple selector, etc.) has been changed; in particular, what was
+ referred to in CSS2 as a simple selector is now called a sequence
+ of simple selectors, and the term "simple selector" is now used for
+ the components of this sequence</li>
+
+ <li>an optional namespace component is now allowed in type element
+ selectors, the universal selector and attribute selectors</li>
+
+ <li>a <a href="#general-sibling-combinators">new combinator</a> has been introduced</li>
+
+ <li>new simple selectors including substring matching attribute
+ selectors, and new pseudo-classes</li>
+
+ <li>new pseudo-elements, and introduction of the "::" convention
+ for pseudo-elements</li>
+
+ <li>the grammar has been rewritten</li>
+
+ <li>profiles to be added to specifications integrating Selectors
+ and defining the set of selectors which is actually supported by
+ each specification</li>
+
+ <li>Selectors are now a CSS3 Module and an independent
+ specification; other specifications can now refer to this document
+ independently of CSS</li>
+
+ <li>the specification now has its own test suite</li>
+
+ </ul>
+
+<h2><a name=selectors></a>2. Selectors</h2>
+
+<p><em>This section is non-normative, as it merely summarizes the
+following sections.</em></p>
+
+<p>A Selector represents a structure. This structure can be used as a
+condition (e.g. in a CSS rule) that determines which elements a
+selector matches in the document tree, or as a flat description of the
+HTML or XML fragment corresponding to that structure.</p>
+
+<p>Selectors may range from simple element names to rich contextual
+representations.</p>
+
+<p>The following table summarizes the Selector syntax:</p>
+
+<table class="selectorsReview">
+ <thead>
+ <tr>
+ <th class="pattern">Pattern</th>
+ <th class="meaning">Meaning</th>
+ <th class="described">Described in section</th>
+ <th class="origin">First defined in CSS level</th></tr>
+ <tbody>
+ <tr>
+ <td class="pattern">*</td>
+ <td class="meaning">any element</td>
+ <td class="described"><a
+ href="#universal-selector">Universal
+ selector</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E</td>
+ <td class="meaning">an element of type E</td>
+ <td class="described"><a
+ href="#type-selectors">Type selector</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E[foo]</td>
+ <td class="meaning">an E element with a "foo" attribute</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value is exactly
+ equal to "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo~="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value is a list of
+ space-separated values, one of which is exactly equal to "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo^="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value begins exactly
+ with the string "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[foo$="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value ends exactly
+ with the string "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[foo*="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value contains the
+ substring "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[hreflang|="en"]</td>
+ <td class="meaning">an E element whose "hreflang" attribute has a hyphen-separated
+ list of values beginning (from the left) with "en"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:root</td>
+ <td class="meaning">an E element, root of the document</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-child(n)</td>
+ <td class="meaning">an E element, the n-th child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-last-child(n)</td>
+ <td class="meaning">an E element, the n-th child of its parent, counting
+ from the last one</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-of-type(n)</td>
+ <td class="meaning">an E element, the n-th sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-last-of-type(n)</td>
+ <td class="meaning">an E element, the n-th sibling of its type, counting
+ from the last one</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:first-child</td>
+ <td class="meaning">an E element, first child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:last-child</td>
+ <td class="meaning">an E element, last child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:first-of-type</td>
+ <td class="meaning">an E element, first sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:last-of-type</td>
+ <td class="meaning">an E element, last sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:only-child</td>
+ <td class="meaning">an E element, only child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:only-of-type</td>
+ <td class="meaning">an E element, only sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:empty</td>
+ <td class="meaning">an E element that has no children (including text
+ nodes)</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:link<br>E:visited</td>
+ <td class="meaning">an E element being the source anchor of a hyperlink of
+ which the target is not yet visited (:link) or already visited
+ (:visited)</td>
+ <td class="described"><a
+ href="#link">The link
+ pseudo-classes</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E:active<br>E:hover<br>E:focus</td>
+ <td class="meaning">an E element during certain user actions</td>
+ <td class="described"><a
+ href="#useraction-pseudos">The user
+ action pseudo-classes</a></td>
+ <td class="origin">1 and 2</td></tr>
+ <tr>
+ <td class="pattern">E:target</td>
+ <td class="meaning">an E element being the target of the referring URI</td>
+ <td class="described"><a
+ href="#target-pseudo">The target
+ pseudo-class</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:lang(fr)</td>
+ <td class="meaning">an element of type E in language "fr" (the document
+ language specifies how language is determined)</td>
+ <td class="described"><a
+ href="#lang-pseudo">The :lang()
+ pseudo-class</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:enabled<br>E:disabled</td>
+ <td class="meaning">a user interface element E which is enabled or
+ disabled</td>
+ <td class="described"><a
+ href="#UIstates">The UI element states
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:checked<!--<br>E:indeterminate--></td>
+ <td class="meaning">a user interface element E which is checked<!-- or in an
+ indeterminate state--> (for instance a radio-button or checkbox)</td>
+ <td class="described"><a
+ href="#UIstates">The UI element states
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E::first-line</td>
+ <td class="meaning">the first formatted line of an E element</td>
+ <td class="described"><a
+ href="#first-line">The ::first-line
+ pseudo-element</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E::first-letter</td>
+ <td class="meaning">the first formatted letter of an E element</td>
+ <td class="described"><a
+ href="#first-letter">The ::first-letter
+ pseudo-element</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E::selection</td>
+ <td class="meaning">the portion of an E element that is currently
+ selected/highlighted by the user</td>
+ <td class="described"><a
+ href="#UIfragments">The UI element
+ fragments pseudo-elements</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E::before</td>
+ <td class="meaning">generated content before an E element</td>
+ <td class="described"><a
+ href="#gen-content">The ::before
+ pseudo-element</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E::after</td>
+ <td class="meaning">generated content after an E element</td>
+ <td class="described"><a
+ href="#gen-content">The ::after
+ pseudo-element</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E.warning</td>
+ <td class="meaning">an E element whose class is
+"warning" (the document language specifies how class is determined).</td>
+ <td class="described"><a
+ href="#class-html">Class
+ selectors</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E#myid</td>
+ <td class="meaning">an E element with ID equal to "myid".</td>
+ <td class="described"><a
+ href="#id-selectors">ID
+ selectors</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E:not(s)</td>
+ <td class="meaning">an E element that does not match simple selector s</td>
+ <td class="described"><a
+ href="#negation">Negation
+ pseudo-class</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E F</td>
+ <td class="meaning">an F element descendant of an E element</td>
+ <td class="described"><a
+ href="#descendant-combinators">Descendant
+ combinator</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E &gt; F</td>
+ <td class="meaning">an F element child of an E element</td>
+ <td class="described"><a
+ href="#child-combinators">Child
+ combinator</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E + F</td>
+ <td class="meaning">an F element immediately preceded by an E element</td>
+ <td class="described"><a
+ href="#adjacent-sibling-combinators">Adjacent sibling combinator</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E ~ F</td>
+ <td class="meaning">an F element preceded by an E element</td>
+ <td class="described"><a
+ href="#general-sibling-combinators">General sibling combinator</a></td>
+ <td class="origin">3</td></tr></tbody></table>
+
+<p>The meaning of each selector is derived from the table above by
+prepending "matches" to the contents of each cell in the "Meaning"
+column.</p>
+
+<h2><a name=casesens>3. Case sensitivity</a></h2>
+
+<p>The case sensitivity of document language element names, attribute
+names, and attribute values in selectors depends on the document
+language. For example, in HTML, element names are case-insensitive,
+but in XML, they are case-sensitive.</p>
+
+<h2><a name=selector-syntax>4. Selector syntax</a></h2>
+
+<p>A <dfn><a name=selector>selector</a></dfn> is a chain of one
+or more <a href="#sequence">sequences of simple selectors</a>
+separated by <a href="#combinators">combinators</a>.</p>
+
+<p>A <dfn><a name=sequence>sequence of simple selectors</a></dfn>
+is a chain of <a href="#simple-selectors-dfn">simple selectors</a>
+that are not separated by a <a href="#combinators">combinator</a>. It
+always begins with a <a href="#type-selectors">type selector</a> or a
+<a href="#universal-selector">universal selector</a>. No other type
+selector or universal selector is allowed in the sequence.</p>
+
+<p>A <dfn><a name=simple-selectors-dfn></a><a
+href="#simple-selectors">simple selector</a></dfn> is either a <a
+href="#type-selectors">type selector</a>, <a
+href="#universal-selector">universal selector</a>, <a
+href="#attribute-selectors">attribute selector</a>, <a
+href="#class-html">class selector</a>, <a
+href="#id-selectors">ID selector</a>, <a
+href="#content-selectors">content selector</a>, or <a
+href="#pseudo-classes">pseudo-class</a>. One <a
+href="#pseudo-elements">pseudo-element</a> may be appended to the last
+sequence of simple selectors.</p>
+
+<p><dfn>Combinators</dfn> are: white space, &quot;greater-than
+sign&quot; (U+003E, <code>&gt;</code>), &quot;plus sign&quot; (U+002B,
+<code>+</code>) and &quot;tilde&quot; (U+007E, <code>~</code>). White
+space may appear between a combinator and the simple selectors around
+it. <a name=whitespace></a>Only the characters "space" (U+0020), "tab"
+(U+0009), "line feed" (U+000A), "carriage return" (U+000D), and "form
+feed" (U+000C) can occur in white space. Other space-like characters,
+such as "em-space" (U+2003) and "ideographic space" (U+3000), are
+never part of white space.</p>
+
+<p>The elements of a document tree that are represented by a selector
+are the <dfn><a name=subject></a>subjects of the selector</dfn>. A
+selector consisting of a single sequence of simple selectors
+represents any element satisfying its requirements. Prepending another
+sequence of simple selectors and a combinator to a sequence imposes
+additional matching constraints, so the subjects of a selector are
+always a subset of the elements represented by the last sequence of
+simple selectors.</p>
+
+<p>An empty selector, containing no sequence of simple selectors and
+no pseudo-element, is an <a href="#Conformance">invalid
+selector</a>.</p>
+
+<h2><a name=grouping>5. Groups of selectors</a></h2>
+
+<p>When several selectors share the same declarations, they may be
+grouped into a comma-separated list. (A comma is U+002C.)</p>
+
+<div class="example">
+<p>CSS examples:</p>
+<p>In this example, we condense three rules with identical
+declarations into one. Thus,</p>
+<pre>h1 { font-family: sans-serif }
+h2 { font-family: sans-serif }
+h3 { font-family: sans-serif }</pre>
+<p>is equivalent to:</p>
+<pre>h1, h2, h3 { font-family: sans-serif }</pre>
+</div>
+
+<p><strong>Warning</strong>: the equivalence is true in this example
+because all the selectors are valid selectors. If just one of these
+selectors were invalid, the entire group of selectors would be
+invalid. This would invalidate the rule for all three heading
+elements, whereas in the former case only one of the three individual
+heading rules would be invalidated.</p>
+
+
+<h2><a name=simple-selectors>6. Simple selectors</a></h2>
+
+<h3><a name=type-selectors>6.1. Type selector</a></h3>
+
+<p>A <dfn>type selector</dfn> is the name of a document language
+element type. A type selector represents an instance of the element
+type in the document tree.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents an <code>h1</code> element in the document tree:</p>
+ <pre>h1</pre>
+</div>
+
+
+<h4><a name=typenmsp>6.1.1. Type selectors and namespaces</a></h4>
+
+<p>Type selectors allow an optional namespace (<a
+href="#refsXMLNAMES">[XMLNAMES]</a>) component. A namespace prefix
+that has been previously declared may be prepended to the element name
+separated by the namespace separator &quot;vertical bar&quot;
+(U+007C, <code>|</code>).</p>
+
+<p>The namespace component may be left empty to indicate that the
+selector is only to represent elements with no declared namespace.</p>
+
+<p>An asterisk may be used for the namespace prefix, indicating that
+the selector represents elements in any namespace (including elements
+with no namespace).</p>
+
+<p>Element type selectors that have no namespace component (no
+namespace separator), represent elements without regard to the
+element's namespace (equivalent to "<code>*|</code>") unless a default
+namespace has been declared. If a default namespace has been declared,
+the selector will represent only elements in the default
+namespace.</p>
+
+<p>A type selector containing a namespace prefix that has not been
+previously declared is an <a href="#Conformance">invalid</a> selector.
+The mechanism for declaring a namespace prefix is left up to the
+language implementing Selectors. In CSS, such a mechanism is defined
+in the General Syntax module.</p>
+
+<p>In a namespace-aware client, element type selectors will only match
+against the <a
+href="http://www.w3.org/TR/REC-xml-names/#NT-LocalPart">local part</a>
+of the element's <a
+href="http://www.w3.org/TR/REC-xml-names/#ns-qualnames">qualified
+name</a>. See <a href="#downlevel">below</a> for notes about matching
+behaviors in down-level clients.</p>
+
+<p>In summary:</p>
+
+<dl>
+ <dt><code>ns|E</code></dt>
+ <dd>elements with name E in namespace ns</dd>
+ <dt><code>*|E</code></dt>
+ <dd>elements with name E in any namespace, including those without any
+ declared namespace</dd>
+ <dt><code>|E</code></dt>
+ <dd>elements with name E without any declared namespace</dd>
+ <dt><code>E</code></dt>
+ <dd>if no default namespace has been specified, this is equivalent to *|E.
+ Otherwise it is equivalent to ns|E where ns is the default namespace.</dd>
+</dl>
+
+<div class="example">
+ <p>CSS examples:</p>
+
+ <pre>@namespace foo url(http://www.example.com);
+ foo|h1 { color: blue }
+ foo|* { color: yellow }
+ |h1 { color: red }
+ *|h1 { color: green }
+ h1 { color: green }</pre>
+
+ <p>The first rule will match only <code>h1</code> elements in the
+ "http://www.example.com" namespace.</p>
+
+ <p>The second rule will match all elements in the
+ "http://www.example.com" namespace.</p>
+
+ <p>The third rule will match only <code>h1</code> elements without
+ any declared namespace.</p>
+
+ <p>The fourth rule will match <code>h1</code> elements in any
+ namespace (including those without any declared namespace).</p>
+
+ <p>The last rule is equivalent to the fourth rule because no default
+ namespace has been defined.</p>
+
+</div>
+
+<h3><a name=universal-selector>6.2. Universal selector</a> </h3>
+
+<p>The <dfn>universal selector</dfn>, written &quot;asterisk&quot;
+(<code>*</code>), represents the qualified name of any element
+type. It represents any single element in the document tree in any
+namespace (including those without any declared namespace) if no
+default namespace has been specified. If a default namespace has been
+specified, see <a href="#univnmsp">Universal selector and
+Namespaces</a> below.</p>
+
+<p>If the universal selector is not the only component of a sequence
+of simple selectors, the <code>*</code> may be omitted.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <ul>
+ <li><code>*[hreflang|=en]</code> and <code>[hreflang|=en]</code> are equivalent,</li>
+ <li><code>*.warning</code> and <code>.warning</code> are equivalent,</li>
+ <li><code>*#myid</code> and <code>#myid</code> are equivalent.</li>
+ </ul>
+</div>
+
+<p class="note"><strong>Note:</strong> it is recommended that the
+<code>*</code>, representing the universal selector, not be
+omitted.</p>
+
+<h4><a name=univnmsp>6.2.1. Universal selector and namespaces</a></h4>
+
+<p>The universal selector allows an optional namespace component. It
+is used as follows:</p>
+
+<dl>
+ <dt><code>ns|*</code></dt>
+ <dd>all elements in namespace ns</dd>
+ <dt><code>*|*</code></dt>
+ <dd>all elements</dd>
+ <dt><code>|*</code></dt>
+ <dd>all elements without any declared namespace</dd>
+ <dt><code>*</code></dt>
+ <dd>if no default namespace has been specified, this is equivalent to *|*.
+ Otherwise it is equivalent to ns|* where ns is the default namespace.</dd>
+</dl>
+
+<p>A universal selector containing a namespace prefix that has not
+been previously declared is an <a href="#Conformance">invalid</a>
+selector. The mechanism for declaring a namespace prefix is left up
+to the language implementing Selectors. In CSS, such a mechanism is
+defined in the General Syntax module.</p>
+
+
+<h3><a name=attribute-selectors>6.3. Attribute selectors</a></h3>
+
+<p>Selectors allow the representation of an element's attributes. When
+a selector is used as an expression to match against an element,
+attribute selectors must be considered to match an element if that
+element has an attribute that matches the attribute represented by the
+attribute selector.</p>
+
+<h4><a name=attribute-representation>6.3.1. Attribute presence and values
+selectors</a></h4>
+
+<p>CSS2 introduced four attribute selectors:</p>
+
+<dl>
+ <dt><code>[att]</code>
+ <dd>Represents an element with the <code>att</code> attribute, whatever the value of
+ the attribute.</dd>
+ <dt><code>[att=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value is exactly
+ "val".</dd>
+ <dt><code>[att~=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value is a <a
+ href="#whitespace">whitespace</a>-separated list of words, one of
+ which is exactly "val". If "val" contains whitespace, it will never
+ represent anything (since the words are <em>separated</em> by
+ spaces).</dd>
+ <dt><code>[att|=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute, its value either
+ being exactly "val" or beginning with "val" immediately followed by
+ "-" (U+002D). This is primarily intended to allow language subcode
+ matches (e.g., the <code>hreflang</code> attribute on the
+ <code>link</code> element in HTML) as described in RFC 3066 (<a
+ href="#refsRFC3066">[RFC3066]</a>). For <code>lang</code> (or
+ <code>xml:lang</code>) language subcode matching, please see <a
+ href="#lang-pseudo">the <code>:lang</code> pseudo-class</a>.</dd>
+</dl>
+
+<p>Attribute values must be identifiers or strings. The
+case-sensitivity of attribute names and values in selectors depends on
+the document language.</p>
+
+<div class="example">
+
+ <p>Examples:</p>
+
+ <p>The following attribute selector represents an <code>h1</code>
+ element that carries the <code>title</code> attribute, whatever its
+ value:</p>
+
+ <pre>h1[title]</pre>
+
+ <p>In the following example, the selector represents a
+ <code>span</code> element whose <code>class</code> attribute has
+ exactly the value "example":</p>
+
+ <pre>span[class="example"]</pre>
+
+ <p>Multiple attribute selectors can be used to represent several
+ attributes of an element, or several conditions on the same
+ attribute. Here, the selector represents a <code>span</code> element
+ whose <code>hello</code> attribute has exactly the value "Cleveland"
+ and whose <code>goodbye</code> attribute has exactly the value
+ "Columbus":</p>
+
+ <pre>span[hello="Cleveland"][goodbye="Columbus"]</pre>
+
+ <p>The following selectors illustrate the differences between "="
+ and "~=". The first selector will represent, for example, the value
+ "copyright copyleft copyeditor" on a <code>rel</code> attribute. The
+ second selector will only represent an <code>a</code> element with
+ an <code>href</code> attribute having the exact value
+ "http://www.w3.org/".</p>
+
+ <pre>a[rel~="copyright"]
+a[href="http://www.w3.org/"]</pre>
+
+ <p>The following selector represents a <code>link</code> element
+ whose <code>hreflang</code> attribute is exactly "fr".</p>
+
+ <pre>link[hreflang=fr]</pre>
+
+ <p>The following selector represents a <code>link</code> element for
+ which the values of the <code>hreflang</code> attribute begins with
+ "en", including "en", "en-US", and "en-cockney":</p>
+
+ <pre>link[hreflang|="en"]</pre>
+
+ <p>Similarly, the following selectors represents a
+ <code>DIALOGUE</code> element whenever it has one of two different
+ values for an attribute <code>character</code>:</p>
+
+ <pre>DIALOGUE[character=romeo]
+DIALOGUE[character=juliet]</pre>
+
+</div>
+
+<h4><a name=attribute-substrings></a>6.3.2. Substring matching attribute
+selectors</h4>
+
+<p>Three additional attribute selectors are provided for matching
+substrings in the value of an attribute:</p>
+
+<dl>
+ <dt><code>[att^=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value begins
+ with the prefix "val".</dd>
+ <dt><code>[att$=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute whose value ends with
+ the suffix "val".</dd>
+ <dt><code>[att*=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute whose value contains
+ at least one instance of the substring "val".</dd>
+</dl>
+
+<p>Attribute values must be identifiers or strings. The
+case-sensitivity of attribute names in selectors depends on the
+document language.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents an HTML <code>object</code>, referencing an
+ image:</p>
+ <pre>object[type^="image/"]</pre>
+ <p>The following selector represents an HTML anchor <code>a</code> with an
+ <code>href</code> attribute whose value ends with ".html".</p>
+ <pre>a[href$=".html"]</pre>
+ <p>The following selector represents an HTML paragraph with a <code>title</code>
+ attribute whose value contains the substring "hello"</p>
+ <pre>p[title*="hello"]</pre>
+</div>
+
+<h4><a name=attrnmsp>6.3.3. Attribute selectors and namespaces</a></h4>
+
+<p>Attribute selectors allow an optional namespace component to the
+attribute name. A namespace prefix that has been previously declared
+may be prepended to the attribute name separated by the namespace
+separator &quot;vertical bar&quot; (<code>|</code>). In keeping with
+the Namespaces in the XML recommendation, default namespaces do not
+apply to attributes, therefore attribute selectors without a namespace
+component apply only to attributes that have no declared namespace
+(equivalent to "<code>|attr</code>"). An asterisk may be used for the
+namespace prefix indicating that the selector is to match all
+attribute names without regard to the attribute's namespace.
+
+<p>An attribute selector with an attribute name containing a namespace
+prefix that has not been previously declared is an <a
+href="#Conformance">invalid</a> selector. The mechanism for declaring
+a namespace prefix is left up to the language implementing Selectors.
+In CSS, such a mechanism is defined in the General Syntax module.
+
+<div class="example">
+ <p>CSS examples:</p>
+ <pre>@namespace foo "http://www.example.com";
+[foo|att=val] { color: blue }
+[*|att] { color: yellow }
+[|att] { color: green }
+[att] { color: green }</pre>
+
+ <p>The first rule will match only elements with the attribute
+ <code>att</code> in the "http://www.example.com" namespace with the
+ value "val".</p>
+
+ <p>The second rule will match only elements with the attribute
+ <code>att</code> regardless of the namespace of the attribute
+ (including no declared namespace).</p>
+
+ <p>The last two rules are equivalent and will match only elements
+ with the attribute <code>att</code> where the attribute is not
+ declared to be in a namespace.</p>
+
+</div>
+
+<h4><a name=def-values>6.3.4. Default attribute values in DTDs</a></h4>
+
+<p>Attribute selectors represent explicitly set attribute values in
+the document tree. Default attribute values may be defined in a DTD or
+elsewhere, but cannot always be selected by attribute
+selectors. Selectors should be designed so that they work even if the
+default values are not included in the document tree.</p>
+
+<p>More precisely, a UA is <em>not</em> required to read an "external
+subset" of the DTD but <em>is</em> required to look for default
+attribute values in the document's "internal subset." (See <a
+href="#refsXML10">[XML10]</a> for definitions of these subsets.)</p>
+
+<p>A UA that recognizes an XML namespace <a
+href="#refsXMLNAMES">[XMLNAMES]</a> is not required to use its
+knowledge of that namespace to treat default attribute values as if
+they were present in the document. (For example, an XHTML UA is not
+required to use its built-in knowledge of the XHTML DTD.)</p>
+
+<p class="note"><strong>Note:</strong> Typically, implementations
+choose to ignore external subsets.</p>
+
+<div class="example">
+<p>Example:</p>
+
+<p>Consider an element EXAMPLE with an attribute "notation" that has a
+default value of "decimal". The DTD fragment might be</p>
+
+<pre class="dtd-example">&lt;!ATTLIST EXAMPLE notation (decimal,octal) "decimal"></pre>
+
+<p>If the style sheet contains the rules</p>
+
+<pre>EXAMPLE[notation=decimal] { /*... default property settings ...*/ }
+EXAMPLE[notation=octal] { /*... other settings...*/ }</pre>
+
+<p>the first rule will not match elements whose "notation" attribute
+is set by default, i.e. not set explicitly. To catch all cases, the
+attribute selector for the default value must be dropped:</p>
+
+<pre>EXAMPLE { /*... default property settings ...*/ }
+EXAMPLE[notation=octal] { /*... other settings...*/ }</pre>
+
+<p>Here, because the selector <code>EXAMPLE[notation=octal]</code> is
+more specific than the tag
+selector alone, the style declarations in the second rule will override
+those in the first for elements that have a "notation" attribute value
+of "octal". Care has to be taken that all property declarations that
+are to apply only to the default case are overridden in the non-default
+cases' style rules.</p>
+
+</div>
+
+<h3><a name=class-html>6.4. Class selectors</a></h3>
+
+<p>Working with HTML, authors may use the period (U+002E,
+<code>.</code>) notation as an alternative to the <code>~=</code>
+notation when representing the <code>class</code> attribute. Thus, for
+HTML, <code>div.value</code> and <code>div[class~=value]</code> have
+the same meaning. The attribute value must immediately follow the
+&quot;period&quot; (<code>.</code>).</p>
+
+<p>UAs may apply selectors using the period (.) notation in XML
+documents if the UA has namespace-specific knowledge that allows it to
+determine which attribute is the &quot;class&quot; attribute for the
+respective namespace. One such example of namespace-specific knowledge
+is the prose in the specification for a particular namespace (e.g. SVG
+1.0 <a href="#refsSVG">[SVG]</a> describes the <a
+href="http://www.w3.org/TR/2001/PR-SVG-20010719/styling.html#ClassAttribute">SVG
+&quot;class&quot; attribute</a> and how a UA should interpret it, and
+similarly MathML 1.01 <a href="#refsMATH">[MATH]</a> describes the <a
+href="http://www.w3.org/1999/07/REC-MathML-19990707/chapter2.html#sec2.3.4">MathML
+&quot;class&quot; attribute</a>.)</p>
+
+<div class="example">
+ <p>CSS examples:</p>
+
+ <p>We can assign style information to all elements with
+ <code>class~="pastoral"</code> as follows:</p>
+
+ <pre>*.pastoral { color: green } /* all elements with class~=pastoral */</pre>
+
+ <p>or just</p>
+
+ <pre>.pastoral { color: green } /* all elements with class~=pastoral */</pre>
+
+ <p>The following assigns style only to H1 elements with
+ <code>class~="pastoral"</code>:</p>
+
+ <pre>H1.pastoral { color: green } /* H1 elements with class~=pastoral */</pre>
+
+ <p>Given these rules, the first H1 instance below would not have
+ green text, while the second would:</p>
+
+ <pre>&lt;H1&gt;Not green&lt;/H1&gt;
+&lt;H1 class="pastoral"&gt;Very green&lt;/H1&gt;</pre>
+
+</div>
+
+<p>To represent a subset of "class" values, each value must be preceded
+by a ".", in any order.</P>
+
+<div class="example">
+
+ <p>CSS example:</p>
+
+ <p>The following rule matches any P element whose "class" attribute
+ has been assigned a list of <a
+ href="#whitespace">whitespace</a>-separated values that includes
+ "pastoral" and "marine":</p>
+
+ <pre>p.pastoral.marine { color: green }</pre>
+
+ <p>This rule matches when <code>class="pastoral blue aqua
+ marine"</code> but does not match for <code>class="pastoral
+ blue"</code>.</p>
+
+</div>
+
+<p class="note"><strong>Note:</strong> Because CSS gives considerable
+power to the "class" attribute, authors could conceivably design their
+own "document language" based on elements with almost no associated
+presentation (such as DIV and SPAN in HTML) and assigning style
+information through the "class" attribute. Authors should avoid this
+practice since the structural elements of a document language often
+have recognized and accepted meanings and author-defined classes may
+not.</p>
+
+<p class="note"><strong>Note:</strong> If an element has multiple
+class attributes, their values must be concatenated with spaces
+between the values before searching for the class. As of this time the
+working group is not aware of any manner in which this situation can
+be reached, however, so this behavior is explicitly non-normative in
+this specification.</p>
+
+<h3><a name=id-selectors>6.5. ID selectors</a></h3>
+
+<p>Document languages may contain attributes that are declared to be
+of type ID. What makes attributes of type ID special is that no two
+such attributes can have the same value in a document, regardless of
+the type of the elements that carry them; whatever the document
+language, an ID typed attribute can be used to uniquely identify its
+element. In HTML all ID attributes are named "id"; XML applications
+may name ID attributes differently, but the same restriction
+applies.</p>
+
+<p>An ID-typed attribute of a document language allows authors to
+assign an identifier to one element instance in the document tree. W3C
+ID selectors represent an element instance based on its identifier. An
+ID selector contains a &quot;number sign&quot; (U+0023,
+<code>#</code>) immediately followed by the ID value, which must be an
+identifier.</p>
+
+<p>Selectors does not specify how a UA knows the ID-typed attribute of
+an element. The UA may, e.g., read a document's DTD, have the
+information hard-coded or ask the user.
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following ID selector represents an <code>h1</code> element
+ whose ID-typed attribute has the value "chapter1":</p>
+ <pre>h1#chapter1</pre>
+ <p>The following ID selector represents any element whose ID-typed
+ attribute has the value "chapter1":</p>
+ <pre>#chapter1</pre>
+ <p>The following selector represents any element whose ID-typed
+ attribute has the value "z98y".</p>
+ <pre>*#z98y</pre>
+</div>
+
+<p class="note"><strong>Note.</strong> In XML 1.0 <a
+href="#refsXML10">[XML10]</a>, the information about which attribute
+contains an element's IDs is contained in a DTD or a schema. When
+parsing XML, UAs do not always read the DTD, and thus may not know
+what the ID of an element is (though a UA may have namespace-specific
+knowledge that allows it to determine which attribute is the ID
+attribute for that namespace). If a style sheet designer knows or
+suspects that a UA may not know what the ID of an element is, he
+should use normal attribute selectors instead:
+<code>[name=p371]</code> instead of <code>#p371</code>. Elements in
+XML 1.0 documents without a DTD do not have IDs at all.</p>
+
+<p>If an element has multiple ID attributes, all of them must be
+treated as IDs for that element for the purposes of the ID
+selector. Such a situation could be reached using mixtures of xml:id,
+DOM3 Core, XML DTDs, and namespace-specific knowledge.</p>
+
+<h3><a name=pseudo-classes>6.6. Pseudo-classes</a></h3>
+
+<p>The pseudo-class concept is introduced to permit selection based on
+information that lies outside of the document tree or that cannot be
+expressed using the other simple selectors.</p>
+
+<p>A pseudo-class always consists of a &quot;colon&quot;
+(<code>:</code>) followed by the name of the pseudo-class and
+optionally by a value between parentheses.</p>
+
+<p>Pseudo-classes are allowed in all sequences of simple selectors
+contained in a selector. Pseudo-classes are allowed anywhere in
+sequences of simple selectors, after the leading type selector or
+universal selector (possibly omitted). Pseudo-class names are
+case-insensitive. Some pseudo-classes are mutually exclusive, while
+others can be applied simultaneously to the same
+element. Pseudo-classes may be dynamic, in the sense that an element
+may acquire or lose a pseudo-class while a user interacts with the
+document.</p>
+
+
+<h4><a name=dynamic-pseudos>6.6.1. Dynamic pseudo-classes</a></h4>
+
+<p>Dynamic pseudo-classes classify elements on characteristics other
+than their name, attributes, or content, in principle characteristics
+that cannot be deduced from the document tree.</p>
+
+<p>Dynamic pseudo-classes do not appear in the document source or
+document tree.</p>
+
+
+<h5>The <a name=link>link pseudo-classes: :link and :visited</a></h5>
+
+<p>User agents commonly display unvisited links differently from
+previously visited ones. Selectors
+provides the pseudo-classes <code>:link</code> and
+<code>:visited</code> to distinguish them:</p>
+
+<ul>
+ <li>The <code>:link</code> pseudo-class applies to links that have
+ not yet been visited.</li>
+ <li>The <code>:visited</code> pseudo-class applies once the link has
+ been visited by the user. </li>
+</ul>
+
+<p>After some amount of time, user agents may choose to return a
+visited link to the (unvisited) ':link' state.</p>
+
+<p>The two states are mutually exclusive.</p>
+
+<div class="example">
+
+ <p>Example:</p>
+
+ <p>The following selector represents links carrying class
+ <code>external</code> and already visited:</p>
+
+ <pre>a.external:visited</pre>
+
+</div>
+
+<p class="note"><strong>Note:</strong> It is possible for style sheet
+authors to abuse the :link and :visited pseudo-classes to determine
+which sites a user has visited without the user's consent.
+
+<p>UAs may therefore treat all links as unvisited links, or implement
+other measures to preserve the user's privacy while rendering visited
+and unvisited links differently.</p>
+
+<h5>The <a name=useraction-pseudos>user action pseudo-classes
+:hover, :active, and :focus</a></h5>
+
+<p>Interactive user agents sometimes change the rendering in response
+to user actions. Selectors provides
+three pseudo-classes for the selection of an element the user is
+acting on.</p>
+
+<ul>
+
+ <li>The <code>:hover</code> pseudo-class applies while the user
+ designates an element with a pointing device, but does not activate
+ it. For example, a visual user agent could apply this pseudo-class
+ when the cursor (mouse pointer) hovers over a box generated by the
+ element. User agents not that do not support <a
+ href="http://www.w3.org/TR/REC-CSS2/media.html#interactive-media-group">interactive
+ media</a> do not have to support this pseudo-class. Some conforming
+ user agents that support <a
+ href="http://www.w3.org/TR/REC-CSS2/media.html#interactive-media-group">interactive
+ media</a> may not be able to support this pseudo-class (e.g., a pen
+ device that does not detect hovering).</li>
+
+ <li>The <code>:active</code> pseudo-class applies while an element
+ is being activated by the user. For example, between the times the
+ user presses the mouse button and releases it.</li>
+
+ <li>The <code>:focus</code> pseudo-class applies while an element
+ has the focus (accepts keyboard or mouse events, or other forms of
+ input). </li>
+
+</ul>
+
+<p>There may be document language or implementation specific limits on
+which elements can become <code>:active</code> or acquire
+<code>:focus</code>.</p>
+
+<p>These pseudo-classes are not mutually exclusive. An element may
+match several pseudo-classes at the same time.</p>
+
+<p>Selectors doesn't define if the parent of an element that is
+':active' or ':hover' is also in that state.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <pre>a:link /* unvisited links */
+a:visited /* visited links */
+a:hover /* user hovers */
+a:active /* active links */</pre>
+ <p>An example of combining dynamic pseudo-classes:</p>
+ <pre>a:focus
+a:focus:hover</pre>
+ <p>The last selector matches <code>a</code> elements that are in
+ the pseudo-class :focus and in the pseudo-class :hover.</p>
+</div>
+
+<p class="note"><strong>Note:</strong> An element can be both ':visited'
+and ':active' (or ':link' and ':active').</p>
+
+<h4><a name=target-pseudo>6.6.2. The target pseudo-class :target</a></h4>
+
+<p>Some URIs refer to a location within a resource. This kind of URI
+ends with a &quot;number sign&quot; (#) followed by an anchor
+identifier (called the fragment identifier).</p>
+
+<p>URIs with fragment identifiers link to a certain element within the
+document, known as the target element. For instance, here is a URI
+pointing to an anchor named <code>section_2</code> in an HTML
+document:</p>
+
+<pre>http://example.com/html/top.html#section_2</pre>
+
+<p>A target element can be represented by the <code>:target</code>
+pseudo-class. If the document's URI has no fragment identifier, then
+the document has no target element.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <pre>p.note:target</pre>
+ <p>This selector represents a <code>p</code> element of class
+ <code>note</code> that is the target element of the referring
+ URI.</p>
+</div>
+
+<div class="example">
+ <p>CSS example:</p>
+ <p>Here, the <code>:target</code> pseudo-class is used to make the
+ target element red and place an image before it, if there is one:</p>
+ <pre>*:target { color : red }
+*:target::before { content : url(target.png) }</pre>
+</div>
+
+<h4><a name=lang-pseudo>6.6.3. The language pseudo-class :lang</a></h4>
+
+<p>If the document language specifies how the human language of an
+element is determined, it is possible to write selectors that
+represent an element based on its language. For example, in HTML <a
+href="#refsHTML4">[HTML4]</a>, the language is determined by a
+combination of the <code>lang</code> attribute, the <code>meta</code>
+element, and possibly by information from the protocol (such as HTTP
+headers). XML uses an attribute called <code>xml:lang</code>, and
+there may be other document language-specific methods for determining
+the language.</p>
+
+<p>The pseudo-class <code>:lang(C)</code> represents an element that
+is in language C. Whether an element is represented by a
+<code>:lang()</code> selector is based solely on the identifier C
+being either equal to, or a hyphen-separated substring of, the
+element's language value, in the same way as if performed by the <a
+href="#attribute-representation">'|='</a> operator in attribute
+selectors. The identifier C does not have to be a valid language
+name.</p>
+
+<p>C must not be empty. (If it is, the selector is invalid.)</p>
+
+<p class="note"><strong>Note:</strong> It is recommended that
+documents and protocols indicate language using codes from RFC 3066 <a
+href="#refsRFC3066">[RFC3066]</a> or its successor, and by means of
+"xml:lang" attributes in the case of XML-based documents <a
+href="#refsXML10">[XML10]</a>. See <a
+href="http://www.w3.org/International/questions/qa-lang-2or3.html">
+"FAQ: Two-letter or three-letter language codes."</a></p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The two following selectors represent an HTML document that is in
+ Belgian, French, or German. The two next selectors represent
+ <code>q</code> quotations in an arbitrary element in Belgian, French,
+ or German.</p>
+ <pre>html:lang(fr-be)
+html:lang(de)
+:lang(fr-be) &gt; q
+:lang(de) &gt; q</pre>
+</div>
+
+<h4><a name=UIstates>6.6.4. The UI element states pseudo-classes</a></h4>
+
+<h5><a name=enableddisabled>The :enabled and :disabled pseudo-classes</a></h5>
+
+<p>The <code>:enabled</code> pseudo-class allows authors to customize
+the look of user interface elements that are enabled &mdash; which the
+user can select or activate in some fashion (e.g. clicking on a button
+with a mouse). There is a need for such a pseudo-class because there
+is no way to programmatically specify the default appearance of say,
+an enabled <code>input</code> element without also specifying what it
+would look like when it was disabled.</p>
+
+<p>Similar to <code>:enabled</code>, <code>:disabled</code> allows the
+author to specify precisely how a disabled or inactive user interface
+element should look.</p>
+
+<p>Most elements will be neither enabled nor disabled. An element is
+enabled if the user can either activate it or transfer the focus to
+it. An element is disabled if it could be enabled, but the user cannot
+presently activate it or transfer focus to it.</p>
+
+
+<h5><a name=checked>The :checked pseudo-class</a></h5>
+
+<p>Radio and checkbox elements can be toggled by the user. Some menu
+items are "checked" when the user selects them. When such elements are
+toggled "on" the <code>:checked</code> pseudo-class applies. The
+<code>:checked</code> pseudo-class initially applies to such elements
+that have the HTML4 <code>selected</code> and <code>checked</code>
+attributes as described in <a
+href="http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.2.1">Section
+17.2.1 of HTML4</a>, but of course the user can toggle "off" such
+elements in which case the <code>:checked</code> pseudo-class would no
+longer apply. While the <code>:checked</code> pseudo-class is dynamic
+in nature, and is altered by user action, since it can also be based
+on the presence of the semantic HTML4 <code>selected</code> and
+<code>checked</code> attributes, it applies to all media.
+
+
+<h5><a name=indeterminate>The :indeterminate pseudo-class</a></h5>
+
+<div class="note">
+
+<p>Radio and checkbox elements can be toggled by the user, but are
+sometimes in an indeterminate state, neither checked nor unchecked.
+This can be due to an element attribute, or DOM manipulation.</p>
+
+<p>A future version of this specification may introduce an
+<code>:indeterminate</code> pseudo-class that applies to such elements.
+<!--While the <code>:indeterminate</code> pseudo-class is dynamic in
+nature, and is altered by user action, since it can also be based on
+the presence of an element attribute, it applies to all media.</p>
+
+<p>Components of a radio-group initialized with no pre-selected choice
+are an example of :indeterminate state.--></p>
+
+</div>
+
+
+<h4><a name=structural-pseudos>6.6.5. Structural pseudo-classes</a></h4>
+
+<p>Selectors introduces the concept of <dfn>structural
+pseudo-classes</dfn> to permit selection based on extra information that lies in
+the document tree but cannot be represented by other simple selectors or
+combinators.
+
+<p>Note that standalone pieces of PCDATA (text nodes in the DOM) are
+not counted when calculating the position of an element in the list of
+children of its parent. When calculating the position of an element in
+the list of children of its parent, the index numbering starts at 1.
+
+
+<h5><a name=root-pseudo>:root pseudo-class</a></h5>
+
+<p>The <code>:root</code> pseudo-class represents an element that is
+the root of the document. In HTML 4, this is always the
+<code>HTML</code> element.
+
+
+<h5><a name=nth-child-pseudo>:nth-child() pseudo-class</a></h5>
+
+<p>The
+<code>:nth-child(<var>a</var><code>n</code>+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings
+<strong>before</strong> it in the document tree, for a given positive
+integer or zero value of <code>n</code>, and has a parent element. In
+other words, this matches the <var>b</var>th child of an element after
+all the children have been split into groups of <var>a</var> elements
+each. For example, this allows the selectors to address every other
+row in a table, and could be used to alternate the color
+of paragraph text in a cycle of four. The <var>a</var> and
+<var>b</var> values must be zero, negative integers or positive
+integers. The index of the first child of an element is 1.
+
+<p>In addition to this, <code>:nth-child()</code> can take
+'<code>odd</code>' and '<code>even</code>' as arguments instead.
+'<code>odd</code>' has the same signification as <code>2n+1</code>,
+and '<code>even</code>' has the same signification as <code>2n</code>.
+
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-child(2n+1) /* represents every odd row of an HTML table */
+tr:nth-child(odd) /* same */
+tr:nth-child(2n) /* represents every even row of an HTML table */
+tr:nth-child(even) /* same */
+
+/* Alternate paragraph colours in CSS */
+p:nth-child(4n+1) { color: navy; }
+p:nth-child(4n+2) { color: green; }
+p:nth-child(4n+3) { color: maroon; }
+p:nth-child(4n+4) { color: purple; }</pre>
+</div>
+
+<p>When <var>a</var>=0, no repeating is used, so for example
+<code>:nth-child(0n+5)</code> matches only the fifth child. When
+<var>a</var>=0, the <var>a</var><code>n</code> part need not be
+included, so the syntax simplifies to
+<code>:nth-child(<var>b</var>)</code> and the last example simplifies
+to <code>:nth-child(5)</code>.
+
+<div class="example">
+<p>Examples:</p>
+<pre>foo:nth-child(0n+1) /* represents an element foo, first child of its parent element */
+foo:nth-child(1) /* same */</pre>
+</div>
+
+<p>When <var>a</var>=1, the number may be omitted from the rule.
+
+<div class="example">
+<p>Examples:</p>
+<p>The following selectors are therefore equivalent:</p>
+<pre>bar:nth-child(1n+0) /* represents all bar elements, specificity (0,1,1) */
+bar:nth-child(n+0) /* same */
+bar:nth-child(n) /* same */
+bar /* same but lower specificity (0,0,1) */</pre>
+</div>
+
+<p>If <var>b</var>=0, then every <var>a</var>th element is picked. In
+such a case, the <var>b</var> part may be omitted.
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-child(2n+0) /* represents every even row of an HTML table */
+tr:nth-child(2n) /* same */</pre>
+</div>
+
+<p>If both <var>a</var> and <var>b</var> are equal to zero, the
+pseudo-class represents no element in the document tree.</p>
+
+<p>The value <var>a</var> can be negative, but only the positive
+values of <var>a</var><code>n</code>+<var>b</var>, for
+<code>n</code>&ge;0, may represent an element in the document
+tree.</p>
+
+<div class="example">
+<p>Example:</p>
+<pre>html|tr:nth-child(-n+6) /* represents the 6 first rows of XHTML tables */</pre>
+</div>
+
+<p>When the value <var>b</var> is negative, the "+" character in the
+expression must be removed (it is effectively replaced by the "-"
+character indicating the negative value of <var>b</var>).</p>
+
+<div class="example">
+<p>Examples:</p>
+<pre>:nth-child(10n-1) /* represents the 9th, 19th, 29th, etc, element */
+:nth-child(10n+9) /* Same */
+:nth-child(10n+-1) /* Syntactically invalid, and would be ignored */</pre>
+</div>
+
+
+<h5><a name=nth-last-child-pseudo>:nth-last-child() pseudo-class</a></h5>
+
+<p>The <code>:nth-last-child(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings
+<strong>after</strong> it in the document tree, for a given positive
+integer or zero value of <code>n</code>, and has a parent element. See
+<code>:nth-child()</code> pseudo-class for the syntax of its argument.
+It also accepts the '<code>even</code>' and '<code>odd</code>' values
+as arguments.
+
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-last-child(-n+2) /* represents the two last rows of an HTML table */
+
+foo:nth-last-child(odd) /* represents all odd foo elements in their parent element,
+ counting from the last one */</pre>
+</div>
+
+
+<h5><a name=nth-of-type-pseudo>:nth-of-type() pseudo-class</a></h5>
+
+<p>The <code>:nth-of-type(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings with the same
+element name <strong>before</strong> it in the document tree, for a
+given zero or positive integer value of <code>n</code>, and has a
+parent element. In other words, this matches the <var>b</var>th child
+of that type after all the children of that type have been split into
+groups of a elements each. See <code>:nth-child()</code> pseudo-class
+for the syntax of its argument. It also accepts the
+'<code>even</code>' and '<code>odd</code>' values.
+
+
+<div class="example">
+<p>CSS example:</p>
+<p>This allows an author to alternate the position of floated images:</p>
+<pre>img:nth-of-type(2n+1) { float: right; }
+img:nth-of-type(2n) { float: left; }</pre>
+</div>
+
+
+<h5><a name=nth-last-of-type-pseudo>:nth-last-of-type() pseudo-class</a></h5>
+
+<p>The <code>:nth-last-of-type(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings with the same
+element name <strong>after</strong> it in the document tree, for a
+given zero or positive integer value of <code>n</code>, and has a
+parent element. See <code>:nth-child()</code> pseudo-class for the
+syntax of its argument. It also accepts the '<code>even</code>' and '<code>odd</code>' values.
+
+
+<div class="example">
+ <p>Example:</p>
+ <p>To represent all <code>h2</code> children of an XHTML
+ <code>body</code> except the first and last, one could use the
+ following selector:</p>
+ <pre>body &gt; h2:nth-of-type(n+2):nth-last-of-type(n+2)</pre>
+ <p>In this case, one could also use <code>:not()</code>, although the
+ selector ends up being just as long:</p>
+ <pre>body &gt; h2:not(:first-of-type):not(:last-of-type)</pre>
+</div>
+
+
+<h5><a name=first-child-pseudo>:first-child pseudo-class</a></h5>
+
+<p>Same as <code>:nth-child(1)</code>. The <code>:first-child</code> pseudo-class
+represents an element that is the first child of some other element.
+
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element that is
+ the first child of a <code>div</code> element:</p>
+ <pre>div &gt; p:first-child</pre>
+ <p>This selector can represent the <code>p</code> inside the
+ <code>div</code> of the following fragment:</p>
+ <pre>&lt;p&gt; The last P before the note.&lt;/p&gt;
+&lt;div class="note"&gt;
+ &lt;p&gt; The first P inside the note.&lt;/p&gt;
+&lt;/div&gt;</pre>but cannot represent the second <code>p</code> in the following
+fragment:
+ <pre>&lt;p&gt; The last P before the note.&lt;/p&gt;
+&lt;div class="note"&gt;
+ &lt;h2&gt; Note &lt;/h2&gt;
+ &lt;p&gt; The first P inside the note.&lt;/p&gt;
+&lt;/div&gt;</pre>
+ <p>The following two selectors are usually equivalent:</p>
+ <pre>* &gt; a:first-child /* a is first child of any element */
+a:first-child /* Same (assuming a is not the root element) */</pre>
+</div>
+
+<h5><a name=last-child-pseudo>:last-child pseudo-class</a></h5>
+
+<p>Same as <code>:nth-last-child(1)</code>. The <code>:last-child</code> pseudo-class
+represents an element that is the last child of some other element.
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents a list item <code>li</code> that
+ is the last child of an ordered list <code>ol</code>.
+ <pre>ol &gt; li:last-child</pre>
+</div>
+
+<h5><a name=first-of-type-pseudo>:first-of-type pseudo-class</a></h5>
+
+<p>Same as <code>:nth-of-type(1)</code>. The <code>:first-of-type</code> pseudo-class
+represents an element that is the first sibling of its type in the list of
+children of its parent element.
+
+<div class="example">
+<p>Example:</p>
+<p>The following selector represents a definition title
+<code>dt</code> inside a definition list <code>dl</code>, this
+<code>dt</code> being the first of its type in the list of children of
+its parent element.</p>
+<pre>dl dt:first-of-type</pre>
+<p>It is a valid description for the first two <code>dt</code>
+elements in the following example but not for the third one:</p>
+<pre>&lt;dl&gt;
+ &lt;dt&gt;gigogne&lt;/dt&gt;
+ &lt;dd&gt;
+ &lt;dl&gt;
+ &lt;dt&gt;fus&eacute;e&lt;/dt&gt;
+ &lt;dd&gt;multistage rocket&lt;/dd&gt;
+ &lt;dt&gt;table&lt;/dt&gt;
+ &lt;dd&gt;nest of tables&lt;/dd&gt;
+ &lt;/dl&gt;
+ &lt;/dd&gt;
+&lt;/dl&gt;</pre>
+</div>
+
+<h5><a name=last-of-type-pseudo>:last-of-type pseudo-class</a></h5>
+
+<p>Same as <code>:nth-last-of-type(1)</code>. The
+<code>:last-of-type</code> pseudo-class represents an element that is
+the last sibling of its type in the list of children of its parent
+element.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents the last data cell
+ <code>td</code> of a table row.</p>
+ <pre>tr &gt; td:last-of-type</pre>
+</div>
+
+<h5><a name=only-child-pseudo>:only-child pseudo-class</a></h5>
+
+<p>Represents an element that has a parent element and whose parent
+element has no other element children. Same as
+<code>:first-child:last-child</code> or
+<code>:nth-child(1):nth-last-child(1)</code>, but with a lower
+specificity.</p>
+
+<h5><a name=only-of-type-pseudo>:only-of-type pseudo-class</a></h5>
+
+<p>Represents an element that has a parent element and whose parent
+element has no other element children with the same element name. Same
+as <code>:first-of-type:last-of-type</code> or
+<code>:nth-of-type(1):nth-last-of-type(1)</code>, but with a lower
+specificity.</p>
+
+
+<h5><a name=empty-pseudo></a>:empty pseudo-class</h5>
+
+<p>The <code>:empty</code> pseudo-class represents an element that has
+no children at all. In terms of the DOM, only element nodes and text
+nodes (including CDATA nodes and entity references) whose data has a
+non-zero length must be considered as affecting emptiness; comments,
+PIs, and other nodes must not affect whether an element is considered
+empty or not.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p><code>p:empty</code> is a valid representation of the following fragment:</p>
+ <pre>&lt;p&gt;&lt;/p&gt;</pre>
+ <p><code>foo:empty</code> is not a valid representation for the
+ following fragments:</p>
+ <pre>&lt;foo&gt;bar&lt;/foo&gt;</pre>
+ <pre>&lt;foo&gt;&lt;bar&gt;bla&lt;/bar&gt;&lt;/foo&gt;</pre>
+ <pre>&lt;foo&gt;this is not &lt;bar&gt;:empty&lt;/bar&gt;&lt;/foo&gt;</pre>
+</div>
+
+<h4><a name=content-selectors>6.6.6. Blank</a></h4> <!-- It's the Return of Appendix H!!! Run away! -->
+
+<p>This section intentionally left blank.</p>
+<!-- (used to be :contains()) -->
+
+<h4><a name=negation></a>6.6.7. The negation pseudo-class</h4>
+
+<p>The negation pseudo-class, <code>:not(<var>X</var>)</code>, is a
+functional notation taking a <a href="#simple-selectors-dfn">simple
+selector</a> (excluding the negation pseudo-class itself and
+pseudo-elements) as an argument. It represents an element that is not
+represented by the argument.
+
+<!-- pseudo-elements are not simple selectors, so the above paragraph
+may be a bit confusing -->
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following CSS selector matches all <code>button</code>
+ elements in an HTML document that are not disabled.</p>
+ <pre>button:not([DISABLED])</pre>
+ <p>The following selector represents all but <code>FOO</code>
+ elements.</p>
+ <pre>*:not(FOO)</pre>
+ <p>The following group of selectors represents all HTML elements
+ except links.</p>
+ <pre>html|*:not(:link):not(:visited)</pre>
+</div>
+
+<p>Default namespace declarations do not affect the argument of the
+negation pseudo-class unless the argument is a universal selector or a
+type selector.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>Assuming that the default namespace is bound to
+ "http://example.com/", the following selector represents all
+ elements that are not in that namespace:</p>
+ <pre>*|*:not(*)</pre>
+ <p>The following CSS selector matches any element being hovered,
+ regardless of its namespace. In particular, it is not limited to
+ only matching elements in the default namespace that are not being
+ hovered, and elements not in the default namespace don't match the
+ rule when they <em>are</em> being hovered.</p>
+ <pre>*|*:not(:hover)</pre>
+</div>
+
+<p class="note"><strong>Note</strong>: the :not() pseudo allows
+useless selectors to be written. For instance <code>:not(*|*)</code>,
+which represents no element at all, or <code>foo:not(bar)</code>,
+which is equivalent to <code>foo</code> but with a higher
+specificity.</p>
+
+<h3><a name=pseudo-elements>7. Pseudo-elements</a></h3>
+
+<p>Pseudo-elements create abstractions about the document tree beyond
+those specified by the document language. For instance, document
+languages do not offer mechanisms to access the first letter or first
+line of an element's content. Pseudo-elements allow designers to refer
+to this otherwise inaccessible information. Pseudo-elements may also
+provide designers a way to refer to content that does not exist in the
+source document (e.g., the <code>::before</code> and
+<code>::after</code> pseudo-elements give access to generated
+content).</p>
+
+<p>A pseudo-element is made of two colons (<code>::</code>) followed
+by the name of the pseudo-element.</p>
+
+<p>This <code>::</code> notation is introduced by the current document
+in order to establish a discrimination between pseudo-classes and
+pseudo-elements. For compatibility with existing style sheets, user
+agents must also accept the previous one-colon notation for
+pseudo-elements introduced in CSS levels 1 and 2 (namely,
+<code>:first-line</code>, <code>:first-letter</code>,
+<code>:before</code> and <code>:after</code>). This compatibility is
+not allowed for the new pseudo-elements introduced in CSS level 3.</p>
+
+<p>Only one pseudo-element may appear per selector, and if present it
+must appear after the sequence of simple selectors that represents the
+<a href="#subject">subjects</a> of the selector. <span class="note">A
+future version of this specification may allow multiple
+pesudo-elements per selector.</span></p>
+
+<h4><a name=first-line>7.1. The ::first-line pseudo-element</a></h4>
+
+<p>The <code>::first-line</code> pseudo-element describes the contents
+of the first formatted line of an element.
+
+<div class="example">
+<p>CSS example:</p>
+<pre>p::first-line { text-transform: uppercase }</pre>
+<p>The above rule means "change the letters of the first line of every
+paragraph to uppercase".</p>
+</div>
+
+<p>The selector <code>p::first-line</code> does not match any real
+HTML element. It does match a pseudo-element that conforming user
+agents will insert at the beginning of every paragraph.</p>
+
+<p>Note that the length of the first line depends on a number of
+factors, including the width of the page, the font size, etc. Thus,
+an ordinary HTML paragraph such as:</p>
+
+<pre>
+&lt;P&gt;This is a somewhat long HTML
+paragraph that will be broken into several
+lines. The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>the lines of which happen to be broken as follows:
+
+<pre>
+THIS IS A SOMEWHAT LONG HTML PARAGRAPH THAT
+will be broken into several lines. The first
+line will be identified by a fictional tag
+sequence. The other lines will be treated as
+ordinary lines in the paragraph.
+</pre>
+
+<p>This paragraph might be "rewritten" by user agents to include the
+<em>fictional tag sequence</em> for <code>::first-line</code>. This
+fictional tag sequence helps to show how properties are inherited.</p>
+
+<pre>
+&lt;P&gt;<b>&lt;P::first-line&gt;</b> This is a somewhat long HTML
+paragraph that <b>&lt;/P::first-line&gt;</b> will be broken into several
+lines. The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>If a pseudo-element breaks up a real element, the desired effect
+can often be described by a fictional tag sequence that closes and
+then re-opens the element. Thus, if we mark up the previous paragraph
+with a <code>span</code> element:</p>
+
+<pre>
+&lt;P&gt;<b>&lt;SPAN class="test"&gt;</b> This is a somewhat long HTML
+paragraph that will be broken into several
+lines.<b>&lt;/SPAN&gt;</b> The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>the user agent could simulate start and end tags for
+<code>span</code> when inserting the fictional tag sequence for
+<code>::first-line</code>.
+
+<pre>
+&lt;P&gt;&lt;P::first-line&gt;<b>&lt;SPAN class="test"&gt;</b> This is a
+somewhat long HTML
+paragraph that will <b>&lt;/SPAN&gt;</b>&lt;/P::first-line&gt;<b>&lt;SPAN class="test"&gt;</b> be
+broken into several
+lines.<b>&lt;/SPAN&gt;</b> The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>In CSS, the <code>::first-line</code> pseudo-element can only be
+attached to a block-level element, an inline-block, a table-caption,
+or a table-cell.</p>
+
+<p><a name="first-formatted-line"></a>The "first formatted line" of an
+element may occur inside a
+block-level descendant in the same flow (i.e., a block-level
+descendant that is not positioned and not a float). E.g., the first
+line of the <code>div</code> in <code>&lt;DIV>&lt;P>This
+line...&lt;/P>&lt/DIV></code> is the first line of the <code>p</code> (assuming
+that both <code>p</code> and <code>div</code> are block-level).
+
+<p>The first line of a table-cell or inline-block cannot be the first
+formatted line of an ancestor element. Thus, in <code>&lt;DIV&gt;&lt;P
+STYLE="display: inline-block">Hello&lt;BR&gt;Goodbye&lt;/P&gt;
+etcetera&lt;/DIV&gt;</code> the first formatted line of the
+<code>div</code> is not the line "Hello".
+
+<p class="note">Note that the first line of the <code>p</code> in this
+fragment: <code>&lt;p&gt&lt;br&gt;First...</code> doesn't contain any
+letters (assuming the default style for <code>br</code> in HTML
+4). The word "First" is not on the first formatted line.
+
+<p>A UA should act as if the fictional start tags of the
+<code>::first-line</code> pseudo-elements were nested just inside the
+innermost enclosing block-level element. (Since CSS1 and CSS2 were
+silent on this case, authors should not rely on this behavior.) Here
+is an example. The fictional tag sequence for</p>
+
+<pre>
+&lt;DIV>
+ &lt;P>First paragraph&lt;/P>
+ &lt;P>Second paragraph&lt;/P>
+&lt;/DIV>
+</pre>
+
+<p>is</p>
+
+<pre>
+&lt;DIV>
+ &lt;P>&lt;DIV::first-line>&lt;P::first-line>First paragraph&lt;/P::first-line>&lt;/DIV::first-line>&lt;/P>
+ &lt;P>&lt;P::first-line>Second paragraph&lt;/P::first-line>&lt;/P>
+&lt;/DIV>
+</pre>
+
+<p>The <code>::first-line</code> pseudo-element is similar to an
+inline-level element, but with certain restrictions. In CSS, the
+following properties apply to a <code>::first-line</code>
+pseudo-element: font properties, color property, background
+properties, 'word-spacing', 'letter-spacing', 'text-decoration',
+'vertical-align', 'text-transform', 'line-height'. UAs may apply other
+properties as well.</p>
+
+
+<h4><a name=first-letter>7.2. The ::first-letter pseudo-element</a></h4>
+
+<p>The <code>::first-letter</code> pseudo-element represents the first
+letter of the first line of a block, if it is not preceded by any
+other content (such as images or inline tables) on its line. The
+::first-letter pseudo-element may be used for "initial caps" and "drop
+caps", which are common typographical effects. This type of initial
+letter is similar to an inline-level element if its 'float' property
+is 'none'; otherwise, it is similar to a floated element.</p>
+
+<p>In CSS, these are the properties that apply to <code>::first-letter</code>
+pseudo-elements: font properties, 'text-decoration', 'text-transform',
+'letter-spacing', 'word-spacing' (when appropriate), 'line-height',
+'float', 'vertical-align' (only if 'float' is 'none'), margin
+properties, padding properties, border properties, color property,
+background properties. UAs may apply other properties as well. To
+allow UAs to render a typographically correct drop cap or initial cap,
+the UA may choose a line-height, width and height based on the shape
+of the letter, unlike for normal elements.</p>
+
+<div class="example">
+<p>Example:</p>
+<p>This example shows a possible rendering of an initial cap. Note
+that the 'line-height' that is inherited by the <code>::first-letter</code>
+pseudo-element is 1.1, but the UA in this example has computed the
+height of the first letter differently, so that it doesn't cause any
+unnecessary space between the first two lines. Also note that the
+fictional start tag of the first letter is inside the <span>span</span>, and thus
+the font weight of the first letter is normal, not bold as the <span>span</span>:
+<pre>
+p { line-height: 1.1 }
+p::first-letter { font-size: 3em; font-weight: normal }
+span { font-weight: bold }
+...
+&lt;p>&lt;span>Het hemelsche&lt;/span> gerecht heeft zich ten lange lesten&lt;br>
+Erbarremt over my en mijn benaeuwde vesten&lt;br>
+En arme burgery, en op mijn volcx gebed&lt;br>
+En dagelix geschrey de bange stad ontzet.
+</pre>
+<div class="figure">
+<p><img src="initial-cap.png" alt="Image illustrating the ::first-letter pseudo-element">
+</div>
+</div>
+
+<div class="example">
+<p>The following CSS will make a drop cap initial letter span about two lines:</p>
+
+<pre>
+&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"&gt;
+&lt;HTML&gt;
+ &lt;HEAD&gt;
+ &lt;TITLE&gt;Drop cap initial letter&lt;/TITLE&gt;
+ &lt;STYLE type="text/css"&gt;
+ P { font-size: 12pt; line-height: 1.2 }
+ P::first-letter { font-size: 200%; font-weight: bold; float: left }
+ SPAN { text-transform: uppercase }
+ &lt;/STYLE&gt;
+ &lt;/HEAD&gt;
+ &lt;BODY&gt;
+ &lt;P&gt;&lt;SPAN&gt;The first&lt;/SPAN&gt; few words of an article
+ in The Economist.&lt;/P&gt;
+ &lt;/BODY&gt;
+&lt;/HTML&gt;
+</pre>
+
+<p>This example might be formatted as follows:</p>
+
+<div class="figure">
+<P><img src="first-letter.gif" alt="Image illustrating the combined effect of the ::first-letter and ::first-line pseudo-elements"></p>
+</div>
+
+<p>The <span class="index-inst" title="fictional tag
+sequence">fictional tag sequence</span> is:</p>
+
+<pre>
+&lt;P&gt;
+&lt;SPAN&gt;
+&lt;P::first-letter&gt;
+T
+&lt;/P::first-letter&gt;he first
+&lt;/SPAN&gt;
+few words of an article in the Economist.
+&lt;/P&gt;
+</pre>
+
+<p>Note that the <code>::first-letter</code> pseudo-element tags abut
+the content (i.e., the initial character), while the ::first-line
+pseudo-element start tag is inserted right after the start tag of the
+block element.</p> </div>
+
+<p>In order to achieve traditional drop caps formatting, user agents
+may approximate font sizes, for example to align baselines. Also, the
+glyph outline may be taken into account when formatting.</p>
+
+<p>Punctuation (i.e, characters defined in Unicode in the "open" (Ps),
+"close" (Pe), "initial" (Pi). "final" (Pf) and "other" (Po)
+punctuation classes), that precedes or follows the first letter should
+be included. <a href="#refsUNICODE">[UNICODE]</a></p>
+
+<div class="figure">
+<P><img src="first-letter2.gif" alt="Quotes that precede the
+first letter should be included."></p>
+</div>
+
+<p>The <code>::first-letter</code> also applies if the first letter is
+in fact a digit, e.g., the "6" in "67 million dollars is a lot of
+money."</p>
+
+<p>In CSS, the <code>::first-letter</code> pseudo-element applies to
+block, list-item, table-cell, table-caption, and inline-block
+elements. <span class="note">A future version of this specification
+may allow this pesudo-element to apply to more element
+types.</span></p>
+
+<p>The <code>::first-letter</code> pseudo-element can be used with all
+such elements that contain text, or that have a descendant in the same
+flow that contains text. A UA should act as if the fictional start tag
+of the ::first-letter pseudo-element is just before the first text of
+the element, even if that first text is in a descendant.</p>
+
+<div class="example">
+<p>Example:</p>
+<p>The fictional tag sequence for this HTMLfragment:
+<pre>&lt;div>
+&lt;p>The first text.</pre>
+<p>is:
+<pre>&lt;div>
+&lt;p>&lt;div::first-letter>&lt;p::first-letter>T&lt;/...>&lt;/...>he first text.</pre>
+</div>
+
+<p>The first letter of a table-cell or inline-block cannot be the
+first letter of an ancestor element. Thus, in <code>&lt;DIV&gt;&lt;P
+STYLE="display: inline-block">Hello&lt;BR&gt;Goodbye&lt;/P&gt;
+etcetera&lt;/DIV&gt;</code> the first letter of the <code>div</code> is not the
+letter "H". In fact, the <code>div</code> doesn't have a first letter.
+
+<p>The first letter must occur on the <a
+href="#first-formatted-line">first formatted line.</a> For example, in
+this fragment: <code>&lt;p&gt&lt;br&gt;First...</code> the first line
+doesn't contain any letters and <code>::first-letter</code> doesn't
+match anything (assuming the default style for <code>br</code> in HTML
+4). In particular, it does not match the "F" of "First."
+
+<p>In CSS, if an element is a list item ('display: list-item'), the
+<code>::first-letter</code> applies to the first letter in the
+principal box after the marker. UAs may ignore
+<code>::first-letter</code> on list items with 'list-style-position:
+inside'. If an element has <code>::before</code> or
+<code>::after</code> content, the <code>::first-letter</code> applies
+to the first letter of the element <em>including</em> that content.
+
+<div class="example">
+<p>Example:</p>
+<p>After the rule 'p::before {content: "Note: "}', the selector
+'p::first-letter' matches the "N" of "Note".</p>
+</div>
+
+<p>Some languages may have specific rules about how to treat certain
+letter combinations. In Dutch, for example, if the letter combination
+"ij" appears at the beginning of a word, both letters should be
+considered within the <code>::first-letter</code> pseudo-element.
+
+<p>If the letters that would form the ::first-letter are not in the
+same element, such as "'T" in <code>&lt;p>'&lt;em>T...</code>, the UA
+may create a ::first-letter pseudo-element from one of the elements,
+both elements, or simply not create a pseudo-element.</p>
+
+<p>Similarly, if the first letter(s) of the block are not at the start
+of the line (for example due to bidirectional reordering), then the UA
+need not create the pseudo-element(s).
+
+<div class="example">
+<p>Example:</p>
+<p><a name="overlapping-example">The following example</a> illustrates
+how overlapping pseudo-elements may interact. The first letter of
+each P element will be green with a font size of '24pt'. The rest of
+the first formatted line will be 'blue' while the rest of the
+paragraph will be 'red'.</p>
+
+<pre>p { color: red; font-size: 12pt }
+p::first-letter { color: green; font-size: 200% }
+p::first-line { color: blue }
+
+&lt;P&gt;Some text that ends up on two lines&lt;/P&gt;</pre>
+
+<p>Assuming that a line break will occur before the word "ends", the
+<span class="index-inst" title="fictional tag sequence">fictional tag
+sequence</span> for this fragment might be:</p>
+
+<pre>&lt;P&gt;
+&lt;P::first-line&gt;
+&lt;P::first-letter&gt;
+S
+&lt;/P::first-letter&gt;ome text that
+&lt;/P::first-line&gt;
+ends up on two lines
+&lt;/P&gt;</pre>
+
+<p>Note that the <code>::first-letter</code> element is inside the <code>::first-line</code>
+element. Properties set on <code>::first-line</code> are inherited by
+<code>::first-letter</code>, but are overridden if the same property is set on
+<code>::first-letter</code>.</p>
+</div>
+
+
+<h4><a name=UIfragments>7.3.</a> <a name=selection>The ::selection pseudo-element</a></h4>
+
+<p>The <code>::selection</code> pseudo-element applies to the portion
+of a document that has been highlighted by the user. This also
+applies, for example, to selected text within an editable text
+field. This pseudo-element should not be confused with the <code><a
+href="#checked">:checked</a></code> pseudo-class (which used to be
+named <code>:selected</code>)
+
+<p>Although the <code>::selection</code> pseudo-element is dynamic in
+nature, and is altered by user action, it is reasonable to expect that
+when a UA re-renders to a static medium (such as a printed page, see
+<a href="#refsCSS21">[CSS21]</a>) which was originally rendered to a
+dynamic medium (like screen), the UA may wish to transfer the current
+<code>::selection</code> state to that other medium, and have all the
+appropriate formatting and rendering take effect as well. This is not
+required &mdash; UAs may omit the <code>::selection</code>
+pseudo-element for static media.
+
+<p>These are the CSS properties that apply to <code>::selection</code>
+pseudo-elements: color, background, cursor (optional), outline
+(optional). The computed value of the 'background-image' property on
+<code>::selection</code> may be ignored.
+
+
+<h4><a name=gen-content>7.4. The ::before and ::after pseudo-elements</a></h4>
+
+<p>The <code>::before</code> and <code>::after</code> pseudo-elements
+can be used to describe generated content before or after an element's
+content. They are explained in CSS 2.1 <a
+href="#refsCSS21">[CSS21]</a>.</p>
+
+<p>When the <code>::first-letter</code> and <code>::first-line</code>
+pseudo-elements are combined with <code>::before</code> and
+<code>::after</code>, they apply to the first letter or line of the
+element including the inserted text.</p>
+
+<h2><a name=combinators>8. Combinators</a></h2>
+
+<h3><a name=descendant-combinators>8.1. Descendant combinator</a></h3>
+
+<p>At times, authors may want selectors to describe an element that is
+the descendant of another element in the document tree (e.g., "an
+<code>EM</code> element that is contained within an <code>H1</code>
+element"). Descendant combinators express such a relationship. A
+descendant combinator is <a href="#whitespace">white space</a> that
+separates two sequences of simple selectors. A selector of the form
+"<code>A B</code>" represents an element <code>B</code> that is an
+arbitrary descendant of some ancestor element <code>A</code>.
+
+<div class="example">
+ <p>Examples:</p>
+ <p>For example, consider the following selector:</p>
+ <pre>h1 em</pre>
+ <p>It represents an <code>em</code> element being the descendant of
+ an <code>h1</code> element. It is a correct and valid, but partial,
+ description of the following fragment:</p>
+ <pre>&lt;h1&gt;This &lt;span class="myclass"&gt;headline
+is &lt;em&gt;very&lt;/em&gt; important&lt;/span&gt;&lt;/h1&gt;</pre>
+ <p>The following selector:</p>
+ <pre>div * p</pre>
+ <p>represents a <code>p</code> element that is a grandchild or later
+ descendant of a <code>div</code> element. Note the whitespace on
+ either side of the "*" is not part of the universal selector; the
+ whitespace is a combinator indicating that the DIV must be the
+ ancestor of some element, and that that element must be an ancestor
+ of the P.</p>
+ <p>The following selector, which combines descendant combinators and
+ <a href="#attribute-selectors">attribute selectors</a>, represents an
+ element that (1) has the <code>href</code> attribute set and (2) is
+ inside a <code>p</code> that is itself inside a <code>div</code>:</p>
+ <pre>div p *[href]</pre>
+</div>
+
+<h3><a name=child-combinators>8.2. Child combinators</a></h3>
+
+<p>A <dfn>child combinator</dfn> describes a childhood relationship
+between two elements. A child combinator is made of the
+&quot;greater-than sign&quot; (<code>&gt;</code>) character and
+separates two sequences of simple selectors.
+
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element that is
+ child of <code>body</code>:</p>
+ <pre>body &gt; p</pre>
+ <p>The following example combines descendant combinators and child
+ combinators.</p>
+ <pre>div ol&gt;li p</pre><!-- LEAVE THOSE SPACES OUT! see below -->
+ <p>It represents a <code>p</code> element that is a descendant of an
+ <code>li</code> element; the <code>li</code> element must be the
+ child of an <code>ol</code> element; the <code>ol</code> element must
+ be a descendant of a <code>div</code>. Notice that the optional white
+ space around the "&gt;" combinator has been left out.</p>
+</div>
+
+<p>For information on selecting the first child of an element, please
+see the section on the <code><a
+href="#structural-pseudos">:first-child</a></code> pseudo-class
+above.</p>
+
+<h3><a name=sibling-combinators>8.3. Sibling combinators</a></h3>
+
+<p>There are two different sibling combinators: the adjacent sibling
+combinator and the general sibling combinator. In both cases,
+non-element nodes (e.g. text between elements) are ignored when
+considering adjacency of elements.</p>
+
+<h4><a name=adjacent-sibling-combinators>8.3.1. Adjacent sibling combinator</a></h4>
+
+<p>The adjacent sibling combinator is made of the &quot;plus
+sign&quot; (U+002B, <code>+</code>) character that separates two
+sequences of simple selectors. The elements represented by the two
+sequences share the same parent in the document tree and the element
+represented by the first sequence immediately precedes the element
+represented by the second one.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element
+ immediately following a <code>math</code> element:</p>
+ <pre>math + p</pre>
+ <p>The following selector is conceptually similar to the one in the
+ previous example, except that it adds an attribute selector &mdash; it
+ adds a constraint to the <code>h1</code> element, that it must have
+ <code>class="opener"</code>:</p>
+ <pre>h1.opener + h2</pre>
+</div>
+
+
+<h4><a name=general-sibling-combinators>8.3.2. General sibling combinator</a></h4>
+
+<p>The general sibling combinator is made of the &quot;tilde&quot;
+(U+007E, <code>~</code>) character that separates two sequences of
+simple selectors. The elements represented by the two sequences share
+the same parent in the document tree and the element represented by
+the first sequence precedes (not necessarily immediately) the element
+represented by the second one.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <pre>h1 ~ pre</pre>
+ <p>represents a <code>pre</code> element following an <code>h1</code>. It
+ is a correct and valid, but partial, description of:</p>
+ <pre>&lt;h1&gt;Definition of the function a&lt;/h1&gt;
+&lt;p&gt;Function a(x) has to be applied to all figures in the table.&lt;/p&gt;
+&lt;pre&gt;function a(x) = 12x/13.5&lt;/pre&gt;</pre>
+</div>
+
+<h2><a name=specificity>9. Calculating a selector's specificity</a></h2>
+
+<p>A selector's specificity is calculated as follows:</p>
+
+<ul>
+ <li>count the number of ID selectors in the selector (= a)</li>
+ <li>count the number of class selectors, attributes selectors, and pseudo-classes in the selector (= b)</li>
+ <li>count the number of element names in the selector (= c)</li>
+ <li>ignore pseudo-elements</li>
+</ul>
+
+<p>Selectors inside <a href="#negation">the negation pseudo-class</a>
+are counted like any other, but the negation itself does not count as
+a pseudo-class.</p>
+
+<p>Concatenating the three numbers a-b-c (in a number system with a
+large base) gives the specificity.</p>
+
+<div class="example">
+<p>Examples:</p>
+<pre>* /* a=0 b=0 c=0 -&gt; specificity = 0 */
+LI /* a=0 b=0 c=1 -&gt; specificity = 1 */
+UL LI /* a=0 b=0 c=2 -&gt; specificity = 2 */
+UL OL+LI /* a=0 b=0 c=3 -&gt; specificity = 3 */
+H1 + *[REL=up] /* a=0 b=1 c=1 -&gt; specificity = 11 */
+UL OL LI.red /* a=0 b=1 c=3 -&gt; specificity = 13 */
+LI.red.level /* a=0 b=2 c=1 -&gt; specificity = 21 */
+#x34y /* a=1 b=0 c=0 -&gt; specificity = 100 */
+#s12:not(FOO) /* a=1 b=0 c=1 -&gt; specificity = 101 */
+</pre>
+</div>
+
+<p class="note"><strong>Note:</strong> the specificity of the styles
+specified in an HTML <code>style</code> attribute is described in CSS
+2.1. <a href="#refsCSS21">[CSS21]</a>.</p>
+
+<h2><a name=w3cselgrammar>10. The grammar of Selectors</a></h2>
+
+<h3><a name=grammar>10.1. Grammar</a></h3>
+
+<p>The grammar below defines the syntax of Selectors. It is globally
+LL(1) and can be locally LL(2) (but note that most UA's should not use
+it directly, since it doesn't express the parsing conventions). The
+format of the productions is optimized for human consumption and some
+shorthand notations beyond Yacc (see <a href="#refsYACC">[YACC]</a>)
+are used:</p>
+
+<ul>
+ <li><b>*</b>: 0 or more
+ <li><b>+</b>: 1 or more
+ <li><b>?</b>: 0 or 1
+ <li><b>|</b>: separates alternatives
+ <li><b>[ ]</b>: grouping </li>
+</ul>
+
+<p>The productions are:</p>
+
+<pre>selectors_group
+ : selector [ COMMA S* selector ]*
+ ;
+
+selector
+ : simple_selector_sequence [ combinator simple_selector_sequence ]*
+ ;
+
+combinator
+ /* combinators can be surrounded by white space */
+ : PLUS S* | GREATER S* | TILDE S* | S+
+ ;
+
+simple_selector_sequence
+ : [ type_selector | universal ]
+ [ HASH | class | attrib | pseudo | negation ]*
+ | [ HASH | class | attrib | pseudo | negation ]+
+ ;
+
+type_selector
+ : [ namespace_prefix ]? element_name
+ ;
+
+namespace_prefix
+ : [ IDENT | '*' ]? '|'
+ ;
+
+element_name
+ : IDENT
+ ;
+
+universal
+ : [ namespace_prefix ]? '*'
+ ;
+
+class
+ : '.' IDENT
+ ;
+
+attrib
+ : '[' S* [ namespace_prefix ]? IDENT S*
+ [ [ PREFIXMATCH |
+ SUFFIXMATCH |
+ SUBSTRINGMATCH |
+ '=' |
+ INCLUDES |
+ DASHMATCH ] S* [ IDENT | STRING ] S*
+ ]? ']'
+ ;
+
+pseudo
+ /* '::' starts a pseudo-element, ':' a pseudo-class */
+ /* Exceptions: :first-line, :first-letter, :before and :after. */
+ /* Note that pseudo-elements are restricted to one per selector and */
+ /* occur only in the last simple_selector_sequence. */
+ : ':' ':'? [ IDENT | functional_pseudo ]
+ ;
+
+functional_pseudo
+ : FUNCTION S* expression ')'
+ ;
+
+expression
+ /* In CSS3, the expressions are identifiers, strings, */
+ /* or of the form "an+b" */
+ : [ [ PLUS | '-' | DIMENSION | NUMBER | STRING | IDENT ] S* ]+
+ ;
+
+negation
+ : NOT S* negation_arg S* ')'
+ ;
+
+negation_arg
+ : type_selector | universal | HASH | class | attrib | pseudo
+ ;</pre>
+
+
+<h3><a name=lex>10.2. Lexical scanner</a></h3>
+
+<p>The following is the <a name=x3>tokenizer</a>, written in Flex (see
+<a href="#refsFLEX">[FLEX]</a>) notation. The tokenizer is
+case-insensitive.</p>
+
+<p>The two occurrences of "\377" represent the highest character
+number that current versions of Flex can deal with (decimal 255). They
+should be read as "\4177777" (decimal 1114111), which is the highest
+possible code point in Unicode/ISO-10646. <a
+href="#refsUNICODE">[UNICODE]</a></p>
+
+<pre>%option case-insensitive
+
+ident [-]?{nmstart}{nmchar}*
+name {nmchar}+
+nmstart [_a-z]|{nonascii}|{escape}
+nonascii [^\0-\177]
+unicode \\[0-9a-f]{1,6}(\r\n|[ \n\r\t\f])?
+escape {unicode}|\\[^\n\r\f0-9a-f]
+nmchar [_a-z0-9-]|{nonascii}|{escape}
+num [0-9]+|[0-9]*\.[0-9]+
+string {string1}|{string2}
+string1 \"([^\n\r\f\\"]|\\{nl}|{nonascii}|{escape})*\"
+string2 \'([^\n\r\f\\']|\\{nl}|{nonascii}|{escape})*\'
+invalid {invalid1}|{invalid2}
+invalid1 \"([^\n\r\f\\"]|\\{nl}|{nonascii}|{escape})*
+invalid2 \'([^\n\r\f\\']|\\{nl}|{nonascii}|{escape})*
+nl \n|\r\n|\r|\f
+w [ \t\r\n\f]*
+
+%%
+
+[ \t\r\n\f]+ return S;
+
+"~=" return INCLUDES;
+"|=" return DASHMATCH;
+"^=" return PREFIXMATCH;
+"$=" return SUFFIXMATCH;
+"*=" return SUBSTRINGMATCH;
+{ident} return IDENT;
+{string} return STRING;
+{ident}"(" return FUNCTION;
+{num} return NUMBER;
+"#"{name} return HASH;
+{w}"+" return PLUS;
+{w}"&gt;" return GREATER;
+{w}"," return COMMA;
+{w}"~" return TILDE;
+":not(" return NOT;
+@{ident} return ATKEYWORD;
+{invalid} return INVALID;
+{num}% return PERCENTAGE;
+{num}{ident} return DIMENSION;
+"&lt;!--" return CDO;
+"--&gt;" return CDC;
+
+"url("{w}{string}{w}")" return URI;
+"url("{w}([!#$%&*-~]|{nonascii}|{escape})*{w}")" return URI;
+U\+[0-9a-f?]{1,6}(-[0-9a-f]{1,6})? return UNICODE_RANGE;
+
+\/\*[^*]*\*+([^/*][^*]*\*+)*\/ /* ignore comments */
+
+. return *yytext;</pre>
+
+
+
+<h2><a name=downlevel>11. Namespaces and down-level clients</a></h2>
+
+<p>An important issue is the interaction of CSS selectors with XML
+documents in web clients that were produced prior to this
+document. Unfortunately, due to the fact that namespaces must be
+matched based on the URI which identifies the namespace, not the
+namespace prefix, some mechanism is required to identify namespaces in
+CSS by their URI as well. Without such a mechanism, it is impossible
+to construct a CSS style sheet which will properly match selectors in
+all cases against a random set of XML documents. However, given
+complete knowledge of the XML document to which a style sheet is to be
+applied, and a limited use of namespaces within the XML document, it
+is possible to construct a style sheet in which selectors would match
+elements and attributes correctly.</p>
+
+<p>It should be noted that a down-level CSS client will (if it
+properly conforms to CSS forward compatible parsing rules) ignore all
+<code>@namespace</code> at-rules, as well as all style rules that make
+use of namespace qualified element type or attribute selectors. The
+syntax of delimiting namespace prefixes in CSS was deliberately chosen
+so that down-level CSS clients would ignore the style rules rather
+than possibly match them incorrectly.</p>
+
+<p>The use of default namespaces in CSS makes it possible to write
+element type selectors that will function in both namespace aware CSS
+clients as well as down-level clients. It should be noted that
+down-level clients may incorrectly match selectors against XML
+elements in other namespaces.</p>
+
+<p>The following are scenarios and examples in which it is possible to
+construct style sheets which would function properly in web clients
+that do not implement this proposal.</p>
+
+<ol>
+ <li>
+
+ <p>The XML document does not use namespaces.</p>
+
+ <ul>
+
+ <li>In this case, it is obviously not necessary to declare or use
+ namespaces in the style sheet. Standard CSS element type and
+ attribute selectors will function adequately in a down-level
+ client.</li>
+
+ <li>In a CSS namespace aware client, the default behavior of
+ element selectors matching without regard to namespace will
+ function properly against all elements, since no namespaces are
+ present. However, the use of specific element type selectors that
+ match only elements that have no namespace ("<code>|name</code>")
+ will guarantee that selectors will match only XML elements that do
+ not have a declared namespace. </li>
+
+ </ul>
+
+ </li>
+
+ <li>
+
+ <p>The XML document defines a single, default namespace used
+ throughout the document. No namespace prefixes are used in element
+ names.</p>
+
+ <ul>
+
+ <li>In this case, a down-level client will function as if
+ namespaces were not used in the XML document at all. Standard CSS
+ element type and attribute selectors will match against all
+ elements. </li>
+
+ </ul>
+
+ </li>
+
+ <li>
+
+ <p>The XML document does <b>not</b> use a default namespace, all
+ namespace prefixes used are known to the style sheet author, and
+ there is a direct mapping between namespace prefixes and namespace
+ URIs. (A given prefix may only be mapped to one namespace URI
+ throughout the XML document; there may be multiple prefixes mapped
+ to the same URI).</p>
+
+ <ul>
+
+ <li>In this case, the down-level client will view and match
+ element type and attribute selectors based on their fully
+ qualified name, not the local part as outlined in the <a
+ href="#typenmsp">Type selectors and Namespaces</a> section. CSS
+ selectors may be declared using an escaped colon "<code>\:</code>"
+ to describe the fully qualified names, e.g.
+ "<code>html\:h1</code>" will match
+ <code>&lt;html:h1&gt;</code>. Selectors using the qualified name
+ will only match XML elements that use the same prefix. Other
+ namespace prefixes used in the XML that are mapped to the same URI
+ will not match as expected unless additional CSS style rules are
+ declared for them.</li>
+
+ <li>Note that selectors declared in this fashion will
+ <em>only</em> match in down-level clients. A CSS namespace aware
+ client will match element type and attribute selectors based on
+ the name's local part. Selectors declared with the fully
+ qualified name will not match (unless there is no namespace prefix
+ in the fully qualified name).</li>
+
+ </ul>
+
+ </li>
+
+ </ol>
+
+<p>In other scenarios: when the namespace prefixes used in the XML are
+not known in advance by the style sheet author; or a combination of
+elements with no namespace are used in conjunction with elements using
+a default namespace; or the same namespace prefix is mapped to
+<em>different</em> namespace URIs within the same document, or in
+different documents; it is impossible to construct a CSS style sheet
+that will function properly against all elements in those documents,
+unless, the style sheet is written using a namespace URI syntax (as
+outlined in this document or similar) and the document is processed by
+a CSS and XML namespace aware client.</p>
+
+<h2><a name=profiling>12. Profiles</a></h2>
+
+<p>Each specification using Selectors must define the subset of W3C
+Selectors it allows and excludes, and describe the local meaning of
+all the components of that subset.</p>
+
+<p>Non normative examples:
+
+<div class="profile">
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>CSS level 1</td></tr>
+ <tr>
+ <th>Accepts</th>
+ <td>type selectors<br>class selectors<br>ID selectors<br>:link,
+ :visited and :active pseudo-classes<br>descendant combinator
+ <br>::first-line and ::first-letter pseudo-elements</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>
+
+<p>universal selector<br>attribute selectors<br>:hover and :focus
+ pseudo-classes<br>:target pseudo-class<br>:lang() pseudo-class<br>all UI
+ element states pseudo-classes<br>all structural
+ pseudo-classes<br>negation pseudo-class<br>all
+ UI element fragments pseudo-elements<br>::before and ::after
+ pseudo-elements<br>child combinators<br>sibling combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>only one class selector allowed per sequence of simple
+ selectors</td></tr></tbody></table><br><br>
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>CSS level 2</td></tr>
+ <tr>
+ <th>Accepts</th>
+ <td>type selectors<br>universal selector<br>attribute presence and
+ values selectors<br>class selectors<br>ID selectors<br>:link, :visited,
+ :active, :hover, :focus, :lang() and :first-child pseudo-classes
+ <br>descendant combinator<br>child combinator<br>adjacent sibling
+ combinator<br>::first-line and ::first-letter pseudo-elements<br>::before
+ and ::after pseudo-elements</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>
+
+<p>content selectors<br>substring matching attribute
+ selectors<br>:target pseudo-classes<br>all UI element
+ states pseudo-classes<br>all structural pseudo-classes other
+ than :first-child<br>negation pseudo-class<br>all UI element
+ fragments pseudo-elements<br>general sibling combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>more than one class selector per sequence of simple selectors (CSS1
+ constraint) allowed</td></tr></tbody></table>
+
+<p>In CSS, selectors express pattern matching rules that determine which style
+rules apply to elements in the document tree.
+
+<p>The following selector (CSS level 2) will <b>match</b> all anchors <code>a</code>
+with attribute <code>name</code> set inside a section 1 header <code>h1</code>:
+<pre>h1 a[name]</pre>
+
+<p>All CSS declarations attached to such a selector are applied to elements
+matching it. </div>
+
+<div class="profile">
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>STTS 3</td>
+ </tr>
+ <tr>
+ <th>Accepts</th>
+ <td>
+
+<p>type selectors<br>universal selectors<br>attribute selectors<br>class
+ selectors<br>ID selectors<br>all structural pseudo-classes<br>
+ all combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>non-accepted pseudo-classes<br>pseudo-elements<br></td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>some selectors and combinators are not allowed in fragment
+ descriptions on the right side of STTS declarations.</td></tr></tbody></table>
+<form>
+<input type="text" name="test10"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+</form>
+
+<p>Selectors can be used in STTS 3 in two different
+ manners:
+<ol>
+ <li>a selection mechanism equivalent to CSS selection mechanism: declarations
+ attached to a given selector are applied to elements matching that selector,
+ <li>fragment descriptions that appear on the right side of declarations.
+</li></ol></div>
+
+<h2><a name=Conformance></a>13. Conformance and requirements</h2>
+
+<p>This section defines conformance with the present specification only.
+
+<p>The inability of a user agent to implement part of this specification due to
+the limitations of a particular device (e.g., non interactive user agents will
+probably not implement dynamic pseudo-classes because they make no sense without
+interactivity) does not imply non-conformance.
+
+<p>All specifications reusing Selectors must contain a <a
+href="#profiling">Profile</a> listing the
+subset of Selectors it accepts or excludes, and describing the constraints
+it adds to the current specification.
+
+<p>Invalidity is caused by a parsing error, e.g. an unrecognized token or a token
+which is not allowed at the current parsing point.
+
+<p>User agents must observe the rules for handling parsing errors:
+<ul>
+ <li>a simple selector containing an undeclared namespace prefix is invalid</li>
+ <li>a selector containing an invalid simple selector, an invalid combinator
+ or an invalid token is invalid. </li>
+ <li>a group of selectors containing an invalid selector is invalid.</li>
+</ul>
+
+<p class="foo test10 bar">Specifications reusing Selectors must define how to handle parsing
+errors. (In the case of CSS, the entire rule in which the selector is
+used is dropped.)</p>
+
+<!-- Apparently all these references are out of date:
+<p>Implementations of this specification must behave as
+"recipients of text data" as defined by <a href="#refsCWWW">[CWWW]</a>
+when parsing selectors and attempting matches. (In particular,
+implementations must assume the data is normalized and must not
+normalize it.) Normative rules for matching strings are defined in
+<a href="#refsCWWW">[CWWW]</a> and <a
+href="#refsUNICODE">[UNICODE]</a> and apply to implementations of this
+specification.</p>-->
+
+<h2><a name=Tests></a>14. Tests</h2>
+
+<p>This specification has <a
+href="http://www.w3.org/Style/CSS/Test/CSS3/Selectors/current/">a test
+suite</a> allowing user agents to verify their basic conformance to
+the specification. This test suite does not pretend to be exhaustive
+and does not cover all possible combined cases of Selectors.</p>
+
+<h2><a name=ACKS></a>15. Acknowledgements</h2>
+
+<p>The CSS working group would like to thank everyone who has sent
+comments on this specification over the years.</p>
+
+<p>The working group would like to extend special thanks to Donna
+McManus, Justin Baker, Joel Sklar, and Molly Ives Brower who perfermed
+the final editorial review.</p>
+
+<h2><a name=references>16. References</a></h2>
+
+<dl class="refs">
+
+ <dt>[CSS1]
+ <dd><a name=refsCSS1></a> Bert Bos, H&aring;kon Wium Lie; "<cite>Cascading Style Sheets, level 1</cite>", W3C Recommendation, 17 Dec 1996, revised 11 Jan 1999
+ <dd>(<code><a href="http://www.w3.org/TR/REC-CSS1">http://www.w3.org/TR/REC-CSS1</a></code>)
+
+ <dt>[CSS21]
+ <dd><a name=refsCSS21></a> Bert Bos, Tantek &Ccedil;elik, Ian Hickson, H&aring;kon Wium Lie, editors; "<cite>Cascading Style Sheets, level 2 revision 1</cite>", W3C Working Draft, 13 June 2005
+ <dd>(<code><a href="http://www.w3.org/TR/CSS21">http://www.w3.org/TR/CSS21</a></code>)
+
+ <dt>[CWWW]
+ <dd><a name=refsCWWW></a> Martin J. D&uuml;rst, Fran&ccedil;ois Yergeau, Misha Wolf, Asmus Freytag, Tex Texin, editors; "<cite>Character Model for the World Wide Web</cite>", W3C Recommendation, 15 February 2005
+ <dd>(<code><a href="http://www.w3.org/TR/charmod/">http://www.w3.org/TR/charmod/</a></code>)
+
+ <dt>[FLEX]
+ <dd><a name="refsFLEX"></a> "<cite>Flex: The Lexical Scanner Generator</cite>", Version 2.3.7, ISBN 1882114213
+
+ <dt>[HTML4]
+ <dd><a name="refsHTML4"></a> Dave Ragget, Arnaud Le Hors, Ian Jacobs, editors; "<cite>HTML 4.01 Specification</cite>", W3C Recommendation, 24 December 1999
+ <dd>(<a href="http://www.w3.org/TR/html4/"><code>http://www.w3.org/TR/html4/</code></a>)
+
+ <dt>[MATH]
+ <dd><a name="refsMATH"></a> Patrick Ion, Robert Miner, editors; "<cite>Mathematical Markup Language (MathML) 1.01</cite>", W3C Recommendation, revision of 7 July 1999
+ <dd>(<code><a href="http://www.w3.org/TR/REC-MathML/">http://www.w3.org/TR/REC-MathML/</a></code>)
+
+ <dt>[RFC3066]
+ <dd><a name="refsRFC3066"></a> H. Alvestrand; "<cite>Tags for the Identification of Languages</cite>", Request for Comments 3066, January 2001
+ <dd>(<a href="http://www.ietf.org/rfc/rfc3066.txt"><code>http://www.ietf.org/rfc/rfc3066.txt</code></a>)
+
+ <dt>[STTS]
+ <dd><a name=refsSTTS></a> Daniel Glazman; "<cite>Simple Tree Transformation Sheets 3</cite>", Electricit&eacute; de France, submission to the W3C, 11 November 1998
+ <dd>(<code><a href="http://www.w3.org/TR/NOTE-STTS3">http://www.w3.org/TR/NOTE-STTS3</a></code>)
+
+ <dt>[SVG]
+ <dd><a name="refsSVG"></a> Jon Ferraiolo, &#34276;&#27810; &#28147;, Dean Jackson, editors; "<cite>Scalable Vector Graphics (SVG) 1.1 Specification</cite>", W3C Recommendation, 14 January 2003
+ <dd>(<code><a href="http://www.w3.org/TR/SVG/">http://www.w3.org/TR/SVG/</a></code>)
+
+ <dt>[UNICODE]</dt>
+ <dd><a name="refsUNICODE"></a> <cite><a
+ href="http://www.unicode.org/versions/Unicode4.1.0/">The Unicode Standard, Version 4.1</a></cite>, The Unicode Consortium. Boston, MA, Addison-Wesley, March 2005. ISBN 0-321-18578-1, as amended by <a href="http://www.unicode.org/versions/Unicode4.0.1/">Unicode 4.0.1</a> and <a href="http://www.unicode.org/versions/Unicode4.1.0/">Unicode 4.1.0</a>.
+ <dd>(<code><a href="http://www.unicode.org/versions/">http://www.unicode.org/versions/</a></code>)</dd>
+
+ <dt>[XML10]
+ <dd><a name="refsXML10"></a> Tim Bray, Jean Paoli, C. M. Sperberg-McQueen, Eve Maler, Fran&ccedil;ois Yergeau, editors; "<cite>Extensible Markup Language (XML) 1.0 (Third Edition)</cite>", W3C Recommendation, 4 February 2004
+ <dd>(<a href="http://www.w3.org/TR/REC-xml/"><code>http://www.w3.org/TR/REC-xml/</code></a>)
+
+ <dt>[XMLNAMES]
+ <dd><a name="refsXMLNAMES"></a> Tim Bray, Dave Hollander, Andrew Layman, editors; "<cite>Namespaces in XML</cite>", W3C Recommendation, 14 January 1999
+ <dd>(<a href="http://www.w3.org/TR/REC-xml-names/"><code>http://www.w3.org/TR/REC-xml-names/</code></a>)
+
+ <dt>[YACC]
+ <dd><a name="refsYACC"></a> S. C. Johnson; "<cite>YACC &mdash; Yet another compiler compiler</cite>", Technical Report, Murray Hill, 1975
+
+</dl>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/jslib-style-jquery.html b/testing/talos/talos/tests/dromaeo/tests/jslib-style-jquery.html
new file mode 100644
index 0000000000..c68b4dd2df
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/jslib-style-jquery.html
@@ -0,0 +1,2958 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script src="../lib/jquery.js"></script>
+<script>
+window.onload = function(){
+startTest("jslib-style-jquery", '47bfc8bd');
+
+// Try to force real results
+var ret, tmp, div;
+
+var html = document.body.innerHTML;
+
+ prep(function(){
+ div = jQuery("div");
+ var tmp = document.createElement("div");
+ tmp.innerHTML = html;
+ document.body.appendChild( tmp );
+ });
+
+ test("jQuery - css(color) x100", function(){
+ for ( var i = 0; i < 1000; i++ )
+ ret = div.css("color");
+ });
+
+ test("jQuery - css(color,red)", function(){
+ for ( var i = 0; i < 10; i++ )
+ div.css("color","red");
+ });
+
+ test("jQuery - height() x10", function(){
+ for ( var i = 0; i < 100; i++ )
+ ret = div.height();
+ });
+
+ test("jQuery - width() x10", function(){
+ for ( var i = 0; i < 100; i++ )
+ ret = div.width();
+ });
+
+ test("jQuery - .is(:visible)", function(){
+ for ( var i = 0; i < 10; i++ )
+ ret = div.is(":visible");
+ });
+
+ test("jQuery - .show()", function(){
+ for ( var i = 0; i < 10; i++ )
+ div.show();
+ });
+
+ test("jQuery - .hide()", function(){
+ for ( var i = 0; i < 10; i++ )
+ div.hide();
+ });
+
+ test("jQuery - .toggle()", function(){
+ div.toggle();
+ });
+
+endTest();
+};
+</script>
+</head>
+<body>
+ <div class="head">
+ <p><a href="http://www.w3.org/"><img height=48 alt=W3C src="w3c_home.png" width=72></a>
+
+ <h1 id="title">Selectors</h1>
+
+ <h2>W3C Working Draft 15 December 2005</h2>
+
+ <dl>
+
+ <dt>This version:
+
+ <dd><a href="http://www.w3.org/TR/2005/WD-css3-selectors-20051215">
+ http://www.w3.org/TR/2005/WD-css3-selectors-20051215</a>
+
+ <dt>Latest version:
+
+ <dd><a href="http://www.w3.org/TR/css3-selectors">
+ http://www.w3.org/TR/css3-selectors</a>
+
+ <dt>Previous version:
+
+ <dd><a href="http://www.w3.org/TR/2001/CR-css3-selectors-20011113">
+ http://www.w3.org/TR/2001/CR-css3-selectors-20011113</a>
+
+ <dt><a name=editors-list></a>Editors:
+
+ <dd class="vcard"><span class="fn">Daniel Glazman</span> (Invited Expert)</dd>
+
+ <dd class="vcard"><a lang="tr" class="url fn" href="http://www.tantek.com/">Tantek &Ccedil;elik</a> (Invited Expert)
+
+ <dd class="vcard"><a href="mailto:ian@hixie.ch" class="url fn">Ian Hickson</a> (<span
+ class="company"><a href="http://www.google.com/">Google</a></span>)
+
+ <dd class="vcard"><span class="fn">Peter Linss</span> (former editor, <span class="company"><a
+ href="http://www.netscape.com/">Netscape/AOL</a></span>)
+
+ <dd class="vcard"><span class="fn">John Williams</span> (former editor, <span class="company"><a
+ href="http://www.quark.com/">Quark, Inc.</a></span>)
+
+ </dl>
+
+ <p class="copyright"><a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright">
+ Copyright</a> &copy; 2005 <a href="http://www.w3.org/"><abbr
+ title="World Wide Web Consortium">W3C</abbr></a><sup>&reg;</sup>
+ (<a href="http://www.csail.mit.edu/"><abbr title="Massachusetts
+ Institute of Technology">MIT</abbr></a>, <a
+ href="http://www.ercim.org/"><acronym title="European Research
+ Consortium for Informatics and Mathematics">ERCIM</acronym></a>, <a
+ href="http://www.keio.ac.jp/">Keio</a>), All Rights Reserved. W3C
+ <a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">liability</a>,
+ <a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">trademark</a>,
+ <a
+ href="http://www.w3.org/Consortium/Legal/copyright-documents">document
+ use</a> rules apply.
+
+ <hr title="Separator for header">
+
+ </div>
+
+ <h2><a name=abstract></a>Abstract</h2>
+
+ <p><em>Selectors</em> are patterns that match against elements in a
+ tree. Selectors have been optimized for use with HTML and XML, and
+ are designed to be usable in performance-critical code.</p>
+
+ <p><acronym title="Cascading Style Sheets">CSS</acronym> (Cascading
+ Style Sheets) is a language for describing the rendering of <acronym
+ title="Hypertext Markup Language">HTML</acronym> and <acronym
+ title="Extensible Markup Language">XML</acronym> documents on
+ screen, on paper, in speech, etc. CSS uses Selectors for binding
+ style properties to elements in the document. This document
+ describes extensions to the selectors defined in CSS level 2. These
+ extended selectors will be used by CSS level 3.
+
+ <p>Selectors define the following function:</p>
+
+ <pre>expression &#x2217; element &rarr; boolean</pre>
+
+ <p>That is, given an element and a selector, this specification
+ defines whether that element matches the selector.</p>
+
+ <p>These expressions can also be used, for instance, to select a set
+ of elements, or a single element from a set of elements, by
+ evaluating the expression across all the elements in a
+ subtree. <acronym title="Simple Tree Transformation
+ Sheets">STTS</acronym> (Simple Tree Transformation Sheets), a
+ language for transforming XML trees, uses this mechanism. <a href="#refsSTTS">[STTS]</a></p>
+
+ <h2><a name=status></a>Status of this document</h2>
+
+ <p><em>This section describes the status of this document at the
+ time of its publication. Other documents may supersede this
+ document. A list of current W3C publications and the latest revision
+ of this technical report can be found in the <a
+ href="http://www.w3.org/TR/">W3C technical reports index at
+ http://www.w3.org/TR/.</a></em></p>
+
+ <p>This document describes the selectors that already exist in <a
+ href="#refsCSS1"><abbr title="CSS level 1">CSS1</abbr></a> and <a
+ href="#refsCSS21"><abbr title="CSS level 2">CSS2</abbr></a>, and
+ also proposes new selectors for <abbr title="CSS level
+ 3">CSS3</abbr> and other languages that may need them.</p>
+
+ <p>The CSS Working Group doesn't expect that all implementations of
+ CSS3 will have to implement all selectors. Instead, there will
+ probably be a small number of variants of CSS3, called profiles. For
+ example, it may be that only a profile for interactive user agents
+ will include all of the selectors.</p>
+
+ <p>This specification is a last call working draft for the the <a
+ href="http://www.w3.org/Style/CSS/members">CSS Working Group</a>
+ (<a href="/Style/">Style Activity</a>). This
+ document is a revision of the <a
+ href="http://www.w3.org/TR/2001/CR-css3-selectors-20011113/">Candidate
+ Recommendation dated 2001 November 13</a>, and has incorporated
+ implementation feedback received in the past few years. It is
+ expected that this last call will proceed straight to Proposed
+ Recommendation stage since it is believed that interoperability will
+ be demonstrable.</p>
+
+ <p>All persons are encouraged to review and implement this
+ specification and return comments to the (<a
+ href="http://lists.w3.org/Archives/Public/www-style/">archived</a>)
+ public mailing list <a
+ href="http://www.w3.org/Mail/Lists.html#www-style">www-style</a>
+ (see <a href="http://www.w3.org/Mail/Request">instructions</a>). W3C
+ Members can also send comments directly to the CSS Working
+ Group.
+ The deadline for comments is 14 January 2006.</p>
+
+ <p>This is still a draft document and may be updated, replaced, or
+ obsoleted by other documents at any time. It is inappropriate to
+ cite a W3C Working Draft as other than &quot;work in progress&quot;.
+
+ <p>This document may be available in <a
+ href="http://www.w3.org/Style/css3-selectors-updates/translations">translation</a>.
+ The English version of this specification is the only normative
+ version.
+
+ <div class="subtoc">
+
+ <h2 id="test10"><a name=contents>Table of contents</a></h2>
+
+ <ul class="toc">
+ <li class="tocline2"><a href="#context">1. Introduction</a>
+ <ul>
+ <li><a href="#dependencies">1.1. Dependencies</a> </li>
+ <li><a href="#terminology">1.2. Terminology</a> </li>
+ <li><a href="#changesFromCSS2">1.3. Changes from CSS2</a> </li>
+ </ul>
+ <li class="tocline2"><a href="#selectors">2. Selectors</a>
+ <li class="tocline2"><a href="#casesens">3. Case sensitivity</a>
+ <li class="tocline2"><a href="#selector-syntax">4. Selector syntax</a>
+ <li class="tocline2"><a href="#grouping">5. Groups of selectors</a>
+ <li class="tocline2"><a href="#simple-selectors">6. Simple selectors</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#type-selectors">6.1. Type selectors</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#typenmsp">6.1.1. Type selectors and namespaces</a></li>
+ </ul>
+ <li class="tocline3"><a href="#universal-selector">6.2. Universal selector</a>
+ <ul>
+ <li><a href="#univnmsp">6.2.1. Universal selector and namespaces</a></li>
+ </ul>
+ <li class="tocline3"><a href="#attribute-selectors">6.3. Attribute selectors</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#attribute-representation">6.3.1. Representation of attributes and attributes values</a>
+ <li><a href="#attribute-substrings">6.3.2. Substring matching attribute selectors</a>
+ <li class="tocline4"><a href="#attrnmsp">6.3.3. Attribute selectors and namespaces</a>
+ <li class="tocline4"><a href="#def-values">6.3.4. Default attribute values in DTDs</a></li>
+ </ul>
+ <li class="tocline3"><a href="#class-html">6.4. Class selectors</a>
+ <li class="tocline3"><a href="#id-selectors">6.5. ID selectors</a>
+ <li class="tocline3"><a href="#pseudo-classes">6.6. Pseudo-classes</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#dynamic-pseudos">6.6.1. Dynamic pseudo-classes</a>
+ <li class="tocline4"><a href="#target-pseudo">6.6.2. The :target pseudo-class</a>
+ <li class="tocline4"><a href="#lang-pseudo">6.6.3. The :lang() pseudo-class</a>
+ <li class="tocline4"><a href="#UIstates">6.6.4. UI element states pseudo-classes</a>
+ <li class="tocline4"><a href="#structural-pseudos">6.6.5. Structural pseudo-classes</a>
+ <ul>
+ <li><a href="#root-pseudo">:root pseudo-class</a>
+ <li><a href="#nth-child-pseudo">:nth-child() pseudo-class</a>
+ <li><a href="#nth-last-child-pseudo">:nth-last-child()</a>
+ <li><a href="#nth-of-type-pseudo">:nth-of-type() pseudo-class</a>
+ <li><a href="#nth-last-of-type-pseudo">:nth-last-of-type()</a>
+ <li><a href="#first-child-pseudo">:first-child pseudo-class</a>
+ <li><a href="#last-child-pseudo">:last-child pseudo-class</a>
+ <li><a href="#first-of-type-pseudo">:first-of-type pseudo-class</a>
+ <li><a href="#last-of-type-pseudo">:last-of-type pseudo-class</a>
+ <li><a href="#only-child-pseudo">:only-child pseudo-class</a>
+ <li><a href="#only-of-type-pseudo">:only-of-type pseudo-class</a>
+ <li><a href="#empty-pseudo">:empty pseudo-class</a></li>
+ </ul>
+ <li class="tocline4"><a href="#negation">6.6.7. The negation pseudo-class</a></li>
+ </ul>
+ </li>
+ </ul>
+ <li><a href="#pseudo-elements">7. Pseudo-elements</a>
+ <ul>
+ <li><a href="#first-line">7.1. The ::first-line pseudo-element</a>
+ <li><a href="#first-letter">7.2. The ::first-letter pseudo-element</a>
+ <li><a href="#UIfragments">7.3. The ::selection pseudo-element</a>
+ <li><a href="#gen-content">7.4. The ::before and ::after pseudo-elements</a></li>
+ </ul>
+ <li class="tocline2"><a href="#combinators">8. Combinators</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#descendant-combinators">8.1. Descendant combinators</a>
+ <li class="tocline3"><a href="#child-combinators">8.2. Child combinators</a>
+ <li class="tocline3"><a href="#sibling-combinators">8.3. Sibling combinators</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#adjacent-sibling-combinators">8.3.1. Adjacent sibling combinator</a>
+ <li class="tocline4"><a href="#general-sibling-combinators">8.3.2. General sibling combinator</a></li>
+ </ul>
+ </li>
+ </ul>
+ <li class="tocline2"><a href="#specificity">9. Calculating a selector's specificity</a>
+ <li class="tocline2"><a href="#w3cselgrammar">10. The grammar of Selectors</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#grammar">10.1. Grammar</a>
+ <li class="tocline3"><a href="#lex">10.2. Lexical scanner</a></li>
+ </ul>
+ <li class="tocline2"><a href="#downlevel">11. Namespaces and down-level clients</a>
+ <li class="tocline2"><a href="#profiling">12. Profiles</a>
+ <li><a href="#Conformance">13. Conformance and requirements</a>
+ <li><a href="#Tests">14. Tests</a>
+ <li><a href="#ACKS">15. Acknowledgements</a>
+ <li class="tocline2"><a href="#references">16. References</a>
+ </ul>
+
+ </div>
+
+ <h2><a name=context>1. Introduction</a></h2>
+
+ <h3><a name=dependencies></a>1.1. Dependencies</h3>
+
+ <p>Some features of this specification are specific to CSS, or have
+ particular limitations or rules specific to CSS. In this
+ specification, these have been described in terms of CSS2.1. <a
+ href="#refsCSS21">[CSS21]</a></p>
+
+ <h3><a name=terminology></a>1.2. Terminology</h3>
+
+ <p>All of the text of this specification is normative except
+ examples, notes, and sections explicitly marked as
+ non-normative.</p>
+
+ <h3><a name=changesFromCSS2></a>1.3. Changes from CSS2</h3>
+
+ <p><em>This section is non-normative.</em></p>
+
+ <p>The main differences between the selectors in CSS2 and those in
+ Selectors are:
+
+ <ul>
+
+ <li>the list of basic definitions (selector, group of selectors,
+ simple selector, etc.) has been changed; in particular, what was
+ referred to in CSS2 as a simple selector is now called a sequence
+ of simple selectors, and the term "simple selector" is now used for
+ the components of this sequence</li>
+
+ <li>an optional namespace component is now allowed in type element
+ selectors, the universal selector and attribute selectors</li>
+
+ <li>a <a href="#general-sibling-combinators">new combinator</a> has been introduced</li>
+
+ <li>new simple selectors including substring matching attribute
+ selectors, and new pseudo-classes</li>
+
+ <li>new pseudo-elements, and introduction of the "::" convention
+ for pseudo-elements</li>
+
+ <li>the grammar has been rewritten</li>
+
+ <li>profiles to be added to specifications integrating Selectors
+ and defining the set of selectors which is actually supported by
+ each specification</li>
+
+ <li>Selectors are now a CSS3 Module and an independent
+ specification; other specifications can now refer to this document
+ independently of CSS</li>
+
+ <li>the specification now has its own test suite</li>
+
+ </ul>
+
+<h2><a name=selectors></a>2. Selectors</h2>
+
+<p><em>This section is non-normative, as it merely summarizes the
+following sections.</em></p>
+
+<p>A Selector represents a structure. This structure can be used as a
+condition (e.g. in a CSS rule) that determines which elements a
+selector matches in the document tree, or as a flat description of the
+HTML or XML fragment corresponding to that structure.</p>
+
+<p>Selectors may range from simple element names to rich contextual
+representations.</p>
+
+<p>The following table summarizes the Selector syntax:</p>
+
+<table class="selectorsReview">
+ <thead>
+ <tr>
+ <th class="pattern">Pattern</th>
+ <th class="meaning">Meaning</th>
+ <th class="described">Described in section</th>
+ <th class="origin">First defined in CSS level</th></tr>
+ <tbody>
+ <tr>
+ <td class="pattern">*</td>
+ <td class="meaning">any element</td>
+ <td class="described"><a
+ href="#universal-selector">Universal
+ selector</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E</td>
+ <td class="meaning">an element of type E</td>
+ <td class="described"><a
+ href="#type-selectors">Type selector</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E[foo]</td>
+ <td class="meaning">an E element with a "foo" attribute</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value is exactly
+ equal to "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo~="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value is a list of
+ space-separated values, one of which is exactly equal to "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo^="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value begins exactly
+ with the string "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[foo$="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value ends exactly
+ with the string "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[foo*="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value contains the
+ substring "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[hreflang|="en"]</td>
+ <td class="meaning">an E element whose "hreflang" attribute has a hyphen-separated
+ list of values beginning (from the left) with "en"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:root</td>
+ <td class="meaning">an E element, root of the document</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-child(n)</td>
+ <td class="meaning">an E element, the n-th child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-last-child(n)</td>
+ <td class="meaning">an E element, the n-th child of its parent, counting
+ from the last one</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-of-type(n)</td>
+ <td class="meaning">an E element, the n-th sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-last-of-type(n)</td>
+ <td class="meaning">an E element, the n-th sibling of its type, counting
+ from the last one</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:first-child</td>
+ <td class="meaning">an E element, first child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:last-child</td>
+ <td class="meaning">an E element, last child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:first-of-type</td>
+ <td class="meaning">an E element, first sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:last-of-type</td>
+ <td class="meaning">an E element, last sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:only-child</td>
+ <td class="meaning">an E element, only child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:only-of-type</td>
+ <td class="meaning">an E element, only sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:empty</td>
+ <td class="meaning">an E element that has no children (including text
+ nodes)</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:link<br>E:visited</td>
+ <td class="meaning">an E element being the source anchor of a hyperlink of
+ which the target is not yet visited (:link) or already visited
+ (:visited)</td>
+ <td class="described"><a
+ href="#link">The link
+ pseudo-classes</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E:active<br>E:hover<br>E:focus</td>
+ <td class="meaning">an E element during certain user actions</td>
+ <td class="described"><a
+ href="#useraction-pseudos">The user
+ action pseudo-classes</a></td>
+ <td class="origin">1 and 2</td></tr>
+ <tr>
+ <td class="pattern">E:target</td>
+ <td class="meaning">an E element being the target of the referring URI</td>
+ <td class="described"><a
+ href="#target-pseudo">The target
+ pseudo-class</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:lang(fr)</td>
+ <td class="meaning">an element of type E in language "fr" (the document
+ language specifies how language is determined)</td>
+ <td class="described"><a
+ href="#lang-pseudo">The :lang()
+ pseudo-class</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:enabled<br>E:disabled</td>
+ <td class="meaning">a user interface element E which is enabled or
+ disabled</td>
+ <td class="described"><a
+ href="#UIstates">The UI element states
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:checked<!--<br>E:indeterminate--></td>
+ <td class="meaning">a user interface element E which is checked<!-- or in an
+ indeterminate state--> (for instance a radio-button or checkbox)</td>
+ <td class="described"><a
+ href="#UIstates">The UI element states
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E::first-line</td>
+ <td class="meaning">the first formatted line of an E element</td>
+ <td class="described"><a
+ href="#first-line">The ::first-line
+ pseudo-element</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E::first-letter</td>
+ <td class="meaning">the first formatted letter of an E element</td>
+ <td class="described"><a
+ href="#first-letter">The ::first-letter
+ pseudo-element</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E::selection</td>
+ <td class="meaning">the portion of an E element that is currently
+ selected/highlighted by the user</td>
+ <td class="described"><a
+ href="#UIfragments">The UI element
+ fragments pseudo-elements</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E::before</td>
+ <td class="meaning">generated content before an E element</td>
+ <td class="described"><a
+ href="#gen-content">The ::before
+ pseudo-element</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E::after</td>
+ <td class="meaning">generated content after an E element</td>
+ <td class="described"><a
+ href="#gen-content">The ::after
+ pseudo-element</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E.warning</td>
+ <td class="meaning">an E element whose class is
+"warning" (the document language specifies how class is determined).</td>
+ <td class="described"><a
+ href="#class-html">Class
+ selectors</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E#myid</td>
+ <td class="meaning">an E element with ID equal to "myid".</td>
+ <td class="described"><a
+ href="#id-selectors">ID
+ selectors</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E:not(s)</td>
+ <td class="meaning">an E element that does not match simple selector s</td>
+ <td class="described"><a
+ href="#negation">Negation
+ pseudo-class</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E F</td>
+ <td class="meaning">an F element descendant of an E element</td>
+ <td class="described"><a
+ href="#descendant-combinators">Descendant
+ combinator</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E &gt; F</td>
+ <td class="meaning">an F element child of an E element</td>
+ <td class="described"><a
+ href="#child-combinators">Child
+ combinator</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E + F</td>
+ <td class="meaning">an F element immediately preceded by an E element</td>
+ <td class="described"><a
+ href="#adjacent-sibling-combinators">Adjacent sibling combinator</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E ~ F</td>
+ <td class="meaning">an F element preceded by an E element</td>
+ <td class="described"><a
+ href="#general-sibling-combinators">General sibling combinator</a></td>
+ <td class="origin">3</td></tr></tbody></table>
+
+<p>The meaning of each selector is derived from the table above by
+prepending "matches" to the contents of each cell in the "Meaning"
+column.</p>
+
+<h2><a name=casesens>3. Case sensitivity</a></h2>
+
+<p>The case sensitivity of document language element names, attribute
+names, and attribute values in selectors depends on the document
+language. For example, in HTML, element names are case-insensitive,
+but in XML, they are case-sensitive.</p>
+
+<h2><a name=selector-syntax>4. Selector syntax</a></h2>
+
+<p>A <dfn><a name=selector>selector</a></dfn> is a chain of one
+or more <a href="#sequence">sequences of simple selectors</a>
+separated by <a href="#combinators">combinators</a>.</p>
+
+<p>A <dfn><a name=sequence>sequence of simple selectors</a></dfn>
+is a chain of <a href="#simple-selectors-dfn">simple selectors</a>
+that are not separated by a <a href="#combinators">combinator</a>. It
+always begins with a <a href="#type-selectors">type selector</a> or a
+<a href="#universal-selector">universal selector</a>. No other type
+selector or universal selector is allowed in the sequence.</p>
+
+<p>A <dfn><a name=simple-selectors-dfn></a><a
+href="#simple-selectors">simple selector</a></dfn> is either a <a
+href="#type-selectors">type selector</a>, <a
+href="#universal-selector">universal selector</a>, <a
+href="#attribute-selectors">attribute selector</a>, <a
+href="#class-html">class selector</a>, <a
+href="#id-selectors">ID selector</a>, <a
+href="#content-selectors">content selector</a>, or <a
+href="#pseudo-classes">pseudo-class</a>. One <a
+href="#pseudo-elements">pseudo-element</a> may be appended to the last
+sequence of simple selectors.</p>
+
+<p><dfn>Combinators</dfn> are: white space, &quot;greater-than
+sign&quot; (U+003E, <code>&gt;</code>), &quot;plus sign&quot; (U+002B,
+<code>+</code>) and &quot;tilde&quot; (U+007E, <code>~</code>). White
+space may appear between a combinator and the simple selectors around
+it. <a name=whitespace></a>Only the characters "space" (U+0020), "tab"
+(U+0009), "line feed" (U+000A), "carriage return" (U+000D), and "form
+feed" (U+000C) can occur in white space. Other space-like characters,
+such as "em-space" (U+2003) and "ideographic space" (U+3000), are
+never part of white space.</p>
+
+<p>The elements of a document tree that are represented by a selector
+are the <dfn><a name=subject></a>subjects of the selector</dfn>. A
+selector consisting of a single sequence of simple selectors
+represents any element satisfying its requirements. Prepending another
+sequence of simple selectors and a combinator to a sequence imposes
+additional matching constraints, so the subjects of a selector are
+always a subset of the elements represented by the last sequence of
+simple selectors.</p>
+
+<p>An empty selector, containing no sequence of simple selectors and
+no pseudo-element, is an <a href="#Conformance">invalid
+selector</a>.</p>
+
+<h2><a name=grouping>5. Groups of selectors</a></h2>
+
+<p>When several selectors share the same declarations, they may be
+grouped into a comma-separated list. (A comma is U+002C.)</p>
+
+<div class="example">
+<p>CSS examples:</p>
+<p>In this example, we condense three rules with identical
+declarations into one. Thus,</p>
+<pre>h1 { font-family: sans-serif }
+h2 { font-family: sans-serif }
+h3 { font-family: sans-serif }</pre>
+<p>is equivalent to:</p>
+<pre>h1, h2, h3 { font-family: sans-serif }</pre>
+</div>
+
+<p><strong>Warning</strong>: the equivalence is true in this example
+because all the selectors are valid selectors. If just one of these
+selectors were invalid, the entire group of selectors would be
+invalid. This would invalidate the rule for all three heading
+elements, whereas in the former case only one of the three individual
+heading rules would be invalidated.</p>
+
+
+<h2><a name=simple-selectors>6. Simple selectors</a></h2>
+
+<h3><a name=type-selectors>6.1. Type selector</a></h3>
+
+<p>A <dfn>type selector</dfn> is the name of a document language
+element type. A type selector represents an instance of the element
+type in the document tree.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents an <code>h1</code> element in the document tree:</p>
+ <pre>h1</pre>
+</div>
+
+
+<h4><a name=typenmsp>6.1.1. Type selectors and namespaces</a></h4>
+
+<p>Type selectors allow an optional namespace (<a
+href="#refsXMLNAMES">[XMLNAMES]</a>) component. A namespace prefix
+that has been previously declared may be prepended to the element name
+separated by the namespace separator &quot;vertical bar&quot;
+(U+007C, <code>|</code>).</p>
+
+<p>The namespace component may be left empty to indicate that the
+selector is only to represent elements with no declared namespace.</p>
+
+<p>An asterisk may be used for the namespace prefix, indicating that
+the selector represents elements in any namespace (including elements
+with no namespace).</p>
+
+<p>Element type selectors that have no namespace component (no
+namespace separator), represent elements without regard to the
+element's namespace (equivalent to "<code>*|</code>") unless a default
+namespace has been declared. If a default namespace has been declared,
+the selector will represent only elements in the default
+namespace.</p>
+
+<p>A type selector containing a namespace prefix that has not been
+previously declared is an <a href="#Conformance">invalid</a> selector.
+The mechanism for declaring a namespace prefix is left up to the
+language implementing Selectors. In CSS, such a mechanism is defined
+in the General Syntax module.</p>
+
+<p>In a namespace-aware client, element type selectors will only match
+against the <a
+href="http://www.w3.org/TR/REC-xml-names/#NT-LocalPart">local part</a>
+of the element's <a
+href="http://www.w3.org/TR/REC-xml-names/#ns-qualnames">qualified
+name</a>. See <a href="#downlevel">below</a> for notes about matching
+behaviors in down-level clients.</p>
+
+<p>In summary:</p>
+
+<dl>
+ <dt><code>ns|E</code></dt>
+ <dd>elements with name E in namespace ns</dd>
+ <dt><code>*|E</code></dt>
+ <dd>elements with name E in any namespace, including those without any
+ declared namespace</dd>
+ <dt><code>|E</code></dt>
+ <dd>elements with name E without any declared namespace</dd>
+ <dt><code>E</code></dt>
+ <dd>if no default namespace has been specified, this is equivalent to *|E.
+ Otherwise it is equivalent to ns|E where ns is the default namespace.</dd>
+</dl>
+
+<div class="example">
+ <p>CSS examples:</p>
+
+ <pre>@namespace foo url(http://www.example.com);
+ foo|h1 { color: blue }
+ foo|* { color: yellow }
+ |h1 { color: red }
+ *|h1 { color: green }
+ h1 { color: green }</pre>
+
+ <p>The first rule will match only <code>h1</code> elements in the
+ "http://www.example.com" namespace.</p>
+
+ <p>The second rule will match all elements in the
+ "http://www.example.com" namespace.</p>
+
+ <p>The third rule will match only <code>h1</code> elements without
+ any declared namespace.</p>
+
+ <p>The fourth rule will match <code>h1</code> elements in any
+ namespace (including those without any declared namespace).</p>
+
+ <p>The last rule is equivalent to the fourth rule because no default
+ namespace has been defined.</p>
+
+</div>
+
+<h3><a name=universal-selector>6.2. Universal selector</a> </h3>
+
+<p>The <dfn>universal selector</dfn>, written &quot;asterisk&quot;
+(<code>*</code>), represents the qualified name of any element
+type. It represents any single element in the document tree in any
+namespace (including those without any declared namespace) if no
+default namespace has been specified. If a default namespace has been
+specified, see <a href="#univnmsp">Universal selector and
+Namespaces</a> below.</p>
+
+<p>If the universal selector is not the only component of a sequence
+of simple selectors, the <code>*</code> may be omitted.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <ul>
+ <li><code>*[hreflang|=en]</code> and <code>[hreflang|=en]</code> are equivalent,</li>
+ <li><code>*.warning</code> and <code>.warning</code> are equivalent,</li>
+ <li><code>*#myid</code> and <code>#myid</code> are equivalent.</li>
+ </ul>
+</div>
+
+<p class="note"><strong>Note:</strong> it is recommended that the
+<code>*</code>, representing the universal selector, not be
+omitted.</p>
+
+<h4><a name=univnmsp>6.2.1. Universal selector and namespaces</a></h4>
+
+<p>The universal selector allows an optional namespace component. It
+is used as follows:</p>
+
+<dl>
+ <dt><code>ns|*</code></dt>
+ <dd>all elements in namespace ns</dd>
+ <dt><code>*|*</code></dt>
+ <dd>all elements</dd>
+ <dt><code>|*</code></dt>
+ <dd>all elements without any declared namespace</dd>
+ <dt><code>*</code></dt>
+ <dd>if no default namespace has been specified, this is equivalent to *|*.
+ Otherwise it is equivalent to ns|* where ns is the default namespace.</dd>
+</dl>
+
+<p>A universal selector containing a namespace prefix that has not
+been previously declared is an <a href="#Conformance">invalid</a>
+selector. The mechanism for declaring a namespace prefix is left up
+to the language implementing Selectors. In CSS, such a mechanism is
+defined in the General Syntax module.</p>
+
+
+<h3><a name=attribute-selectors>6.3. Attribute selectors</a></h3>
+
+<p>Selectors allow the representation of an element's attributes. When
+a selector is used as an expression to match against an element,
+attribute selectors must be considered to match an element if that
+element has an attribute that matches the attribute represented by the
+attribute selector.</p>
+
+<h4><a name=attribute-representation>6.3.1. Attribute presence and values
+selectors</a></h4>
+
+<p>CSS2 introduced four attribute selectors:</p>
+
+<dl>
+ <dt><code>[att]</code>
+ <dd>Represents an element with the <code>att</code> attribute, whatever the value of
+ the attribute.</dd>
+ <dt><code>[att=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value is exactly
+ "val".</dd>
+ <dt><code>[att~=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value is a <a
+ href="#whitespace">whitespace</a>-separated list of words, one of
+ which is exactly "val". If "val" contains whitespace, it will never
+ represent anything (since the words are <em>separated</em> by
+ spaces).</dd>
+ <dt><code>[att|=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute, its value either
+ being exactly "val" or beginning with "val" immediately followed by
+ "-" (U+002D). This is primarily intended to allow language subcode
+ matches (e.g., the <code>hreflang</code> attribute on the
+ <code>link</code> element in HTML) as described in RFC 3066 (<a
+ href="#refsRFC3066">[RFC3066]</a>). For <code>lang</code> (or
+ <code>xml:lang</code>) language subcode matching, please see <a
+ href="#lang-pseudo">the <code>:lang</code> pseudo-class</a>.</dd>
+</dl>
+
+<p>Attribute values must be identifiers or strings. The
+case-sensitivity of attribute names and values in selectors depends on
+the document language.</p>
+
+<div class="example">
+
+ <p>Examples:</p>
+
+ <p>The following attribute selector represents an <code>h1</code>
+ element that carries the <code>title</code> attribute, whatever its
+ value:</p>
+
+ <pre>h1[title]</pre>
+
+ <p>In the following example, the selector represents a
+ <code>span</code> element whose <code>class</code> attribute has
+ exactly the value "example":</p>
+
+ <pre>span[class="example"]</pre>
+
+ <p>Multiple attribute selectors can be used to represent several
+ attributes of an element, or several conditions on the same
+ attribute. Here, the selector represents a <code>span</code> element
+ whose <code>hello</code> attribute has exactly the value "Cleveland"
+ and whose <code>goodbye</code> attribute has exactly the value
+ "Columbus":</p>
+
+ <pre>span[hello="Cleveland"][goodbye="Columbus"]</pre>
+
+ <p>The following selectors illustrate the differences between "="
+ and "~=". The first selector will represent, for example, the value
+ "copyright copyleft copyeditor" on a <code>rel</code> attribute. The
+ second selector will only represent an <code>a</code> element with
+ an <code>href</code> attribute having the exact value
+ "http://www.w3.org/".</p>
+
+ <pre>a[rel~="copyright"]
+a[href="http://www.w3.org/"]</pre>
+
+ <p>The following selector represents a <code>link</code> element
+ whose <code>hreflang</code> attribute is exactly "fr".</p>
+
+ <pre>link[hreflang=fr]</pre>
+
+ <p>The following selector represents a <code>link</code> element for
+ which the values of the <code>hreflang</code> attribute begins with
+ "en", including "en", "en-US", and "en-cockney":</p>
+
+ <pre>link[hreflang|="en"]</pre>
+
+ <p>Similarly, the following selectors represents a
+ <code>DIALOGUE</code> element whenever it has one of two different
+ values for an attribute <code>character</code>:</p>
+
+ <pre>DIALOGUE[character=romeo]
+DIALOGUE[character=juliet]</pre>
+
+</div>
+
+<h4><a name=attribute-substrings></a>6.3.2. Substring matching attribute
+selectors</h4>
+
+<p>Three additional attribute selectors are provided for matching
+substrings in the value of an attribute:</p>
+
+<dl>
+ <dt><code>[att^=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value begins
+ with the prefix "val".</dd>
+ <dt><code>[att$=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute whose value ends with
+ the suffix "val".</dd>
+ <dt><code>[att*=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute whose value contains
+ at least one instance of the substring "val".</dd>
+</dl>
+
+<p>Attribute values must be identifiers or strings. The
+case-sensitivity of attribute names in selectors depends on the
+document language.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents an HTML <code>object</code>, referencing an
+ image:</p>
+ <pre>object[type^="image/"]</pre>
+ <p>The following selector represents an HTML anchor <code>a</code> with an
+ <code>href</code> attribute whose value ends with ".html".</p>
+ <pre>a[href$=".html"]</pre>
+ <p>The following selector represents an HTML paragraph with a <code>title</code>
+ attribute whose value contains the substring "hello"</p>
+ <pre>p[title*="hello"]</pre>
+</div>
+
+<h4><a name=attrnmsp>6.3.3. Attribute selectors and namespaces</a></h4>
+
+<p>Attribute selectors allow an optional namespace component to the
+attribute name. A namespace prefix that has been previously declared
+may be prepended to the attribute name separated by the namespace
+separator &quot;vertical bar&quot; (<code>|</code>). In keeping with
+the Namespaces in the XML recommendation, default namespaces do not
+apply to attributes, therefore attribute selectors without a namespace
+component apply only to attributes that have no declared namespace
+(equivalent to "<code>|attr</code>"). An asterisk may be used for the
+namespace prefix indicating that the selector is to match all
+attribute names without regard to the attribute's namespace.
+
+<p>An attribute selector with an attribute name containing a namespace
+prefix that has not been previously declared is an <a
+href="#Conformance">invalid</a> selector. The mechanism for declaring
+a namespace prefix is left up to the language implementing Selectors.
+In CSS, such a mechanism is defined in the General Syntax module.
+
+<div class="example">
+ <p>CSS examples:</p>
+ <pre>@namespace foo "http://www.example.com";
+[foo|att=val] { color: blue }
+[*|att] { color: yellow }
+[|att] { color: green }
+[att] { color: green }</pre>
+
+ <p>The first rule will match only elements with the attribute
+ <code>att</code> in the "http://www.example.com" namespace with the
+ value "val".</p>
+
+ <p>The second rule will match only elements with the attribute
+ <code>att</code> regardless of the namespace of the attribute
+ (including no declared namespace).</p>
+
+ <p>The last two rules are equivalent and will match only elements
+ with the attribute <code>att</code> where the attribute is not
+ declared to be in a namespace.</p>
+
+</div>
+
+<h4><a name=def-values>6.3.4. Default attribute values in DTDs</a></h4>
+
+<p>Attribute selectors represent explicitly set attribute values in
+the document tree. Default attribute values may be defined in a DTD or
+elsewhere, but cannot always be selected by attribute
+selectors. Selectors should be designed so that they work even if the
+default values are not included in the document tree.</p>
+
+<p>More precisely, a UA is <em>not</em> required to read an "external
+subset" of the DTD but <em>is</em> required to look for default
+attribute values in the document's "internal subset." (See <a
+href="#refsXML10">[XML10]</a> for definitions of these subsets.)</p>
+
+<p>A UA that recognizes an XML namespace <a
+href="#refsXMLNAMES">[XMLNAMES]</a> is not required to use its
+knowledge of that namespace to treat default attribute values as if
+they were present in the document. (For example, an XHTML UA is not
+required to use its built-in knowledge of the XHTML DTD.)</p>
+
+<p class="note"><strong>Note:</strong> Typically, implementations
+choose to ignore external subsets.</p>
+
+<div class="example">
+<p>Example:</p>
+
+<p>Consider an element EXAMPLE with an attribute "notation" that has a
+default value of "decimal". The DTD fragment might be</p>
+
+<pre class="dtd-example">&lt;!ATTLIST EXAMPLE notation (decimal,octal) "decimal"></pre>
+
+<p>If the style sheet contains the rules</p>
+
+<pre>EXAMPLE[notation=decimal] { /*... default property settings ...*/ }
+EXAMPLE[notation=octal] { /*... other settings...*/ }</pre>
+
+<p>the first rule will not match elements whose "notation" attribute
+is set by default, i.e. not set explicitly. To catch all cases, the
+attribute selector for the default value must be dropped:</p>
+
+<pre>EXAMPLE { /*... default property settings ...*/ }
+EXAMPLE[notation=octal] { /*... other settings...*/ }</pre>
+
+<p>Here, because the selector <code>EXAMPLE[notation=octal]</code> is
+more specific than the tag
+selector alone, the style declarations in the second rule will override
+those in the first for elements that have a "notation" attribute value
+of "octal". Care has to be taken that all property declarations that
+are to apply only to the default case are overridden in the non-default
+cases' style rules.</p>
+
+</div>
+
+<h3><a name=class-html>6.4. Class selectors</a></h3>
+
+<p>Working with HTML, authors may use the period (U+002E,
+<code>.</code>) notation as an alternative to the <code>~=</code>
+notation when representing the <code>class</code> attribute. Thus, for
+HTML, <code>div.value</code> and <code>div[class~=value]</code> have
+the same meaning. The attribute value must immediately follow the
+&quot;period&quot; (<code>.</code>).</p>
+
+<p>UAs may apply selectors using the period (.) notation in XML
+documents if the UA has namespace-specific knowledge that allows it to
+determine which attribute is the &quot;class&quot; attribute for the
+respective namespace. One such example of namespace-specific knowledge
+is the prose in the specification for a particular namespace (e.g. SVG
+1.0 <a href="#refsSVG">[SVG]</a> describes the <a
+href="http://www.w3.org/TR/2001/PR-SVG-20010719/styling.html#ClassAttribute">SVG
+&quot;class&quot; attribute</a> and how a UA should interpret it, and
+similarly MathML 1.01 <a href="#refsMATH">[MATH]</a> describes the <a
+href="http://www.w3.org/1999/07/REC-MathML-19990707/chapter2.html#sec2.3.4">MathML
+&quot;class&quot; attribute</a>.)</p>
+
+<div class="example">
+ <p>CSS examples:</p>
+
+ <p>We can assign style information to all elements with
+ <code>class~="pastoral"</code> as follows:</p>
+
+ <pre>*.pastoral { color: green } /* all elements with class~=pastoral */</pre>
+
+ <p>or just</p>
+
+ <pre>.pastoral { color: green } /* all elements with class~=pastoral */</pre>
+
+ <p>The following assigns style only to H1 elements with
+ <code>class~="pastoral"</code>:</p>
+
+ <pre>H1.pastoral { color: green } /* H1 elements with class~=pastoral */</pre>
+
+ <p>Given these rules, the first H1 instance below would not have
+ green text, while the second would:</p>
+
+ <pre>&lt;H1&gt;Not green&lt;/H1&gt;
+&lt;H1 class="pastoral"&gt;Very green&lt;/H1&gt;</pre>
+
+</div>
+
+<p>To represent a subset of "class" values, each value must be preceded
+by a ".", in any order.</P>
+
+<div class="example">
+
+ <p>CSS example:</p>
+
+ <p>The following rule matches any P element whose "class" attribute
+ has been assigned a list of <a
+ href="#whitespace">whitespace</a>-separated values that includes
+ "pastoral" and "marine":</p>
+
+ <pre>p.pastoral.marine { color: green }</pre>
+
+ <p>This rule matches when <code>class="pastoral blue aqua
+ marine"</code> but does not match for <code>class="pastoral
+ blue"</code>.</p>
+
+</div>
+
+<p class="note"><strong>Note:</strong> Because CSS gives considerable
+power to the "class" attribute, authors could conceivably design their
+own "document language" based on elements with almost no associated
+presentation (such as DIV and SPAN in HTML) and assigning style
+information through the "class" attribute. Authors should avoid this
+practice since the structural elements of a document language often
+have recognized and accepted meanings and author-defined classes may
+not.</p>
+
+<p class="note"><strong>Note:</strong> If an element has multiple
+class attributes, their values must be concatenated with spaces
+between the values before searching for the class. As of this time the
+working group is not aware of any manner in which this situation can
+be reached, however, so this behavior is explicitly non-normative in
+this specification.</p>
+
+<h3><a name=id-selectors>6.5. ID selectors</a></h3>
+
+<p>Document languages may contain attributes that are declared to be
+of type ID. What makes attributes of type ID special is that no two
+such attributes can have the same value in a document, regardless of
+the type of the elements that carry them; whatever the document
+language, an ID typed attribute can be used to uniquely identify its
+element. In HTML all ID attributes are named "id"; XML applications
+may name ID attributes differently, but the same restriction
+applies.</p>
+
+<p>An ID-typed attribute of a document language allows authors to
+assign an identifier to one element instance in the document tree. W3C
+ID selectors represent an element instance based on its identifier. An
+ID selector contains a &quot;number sign&quot; (U+0023,
+<code>#</code>) immediately followed by the ID value, which must be an
+identifier.</p>
+
+<p>Selectors does not specify how a UA knows the ID-typed attribute of
+an element. The UA may, e.g., read a document's DTD, have the
+information hard-coded or ask the user.
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following ID selector represents an <code>h1</code> element
+ whose ID-typed attribute has the value "chapter1":</p>
+ <pre>h1#chapter1</pre>
+ <p>The following ID selector represents any element whose ID-typed
+ attribute has the value "chapter1":</p>
+ <pre>#chapter1</pre>
+ <p>The following selector represents any element whose ID-typed
+ attribute has the value "z98y".</p>
+ <pre>*#z98y</pre>
+</div>
+
+<p class="note"><strong>Note.</strong> In XML 1.0 <a
+href="#refsXML10">[XML10]</a>, the information about which attribute
+contains an element's IDs is contained in a DTD or a schema. When
+parsing XML, UAs do not always read the DTD, and thus may not know
+what the ID of an element is (though a UA may have namespace-specific
+knowledge that allows it to determine which attribute is the ID
+attribute for that namespace). If a style sheet designer knows or
+suspects that a UA may not know what the ID of an element is, he
+should use normal attribute selectors instead:
+<code>[name=p371]</code> instead of <code>#p371</code>. Elements in
+XML 1.0 documents without a DTD do not have IDs at all.</p>
+
+<p>If an element has multiple ID attributes, all of them must be
+treated as IDs for that element for the purposes of the ID
+selector. Such a situation could be reached using mixtures of xml:id,
+DOM3 Core, XML DTDs, and namespace-specific knowledge.</p>
+
+<h3><a name=pseudo-classes>6.6. Pseudo-classes</a></h3>
+
+<p>The pseudo-class concept is introduced to permit selection based on
+information that lies outside of the document tree or that cannot be
+expressed using the other simple selectors.</p>
+
+<p>A pseudo-class always consists of a &quot;colon&quot;
+(<code>:</code>) followed by the name of the pseudo-class and
+optionally by a value between parentheses.</p>
+
+<p>Pseudo-classes are allowed in all sequences of simple selectors
+contained in a selector. Pseudo-classes are allowed anywhere in
+sequences of simple selectors, after the leading type selector or
+universal selector (possibly omitted). Pseudo-class names are
+case-insensitive. Some pseudo-classes are mutually exclusive, while
+others can be applied simultaneously to the same
+element. Pseudo-classes may be dynamic, in the sense that an element
+may acquire or lose a pseudo-class while a user interacts with the
+document.</p>
+
+
+<h4><a name=dynamic-pseudos>6.6.1. Dynamic pseudo-classes</a></h4>
+
+<p>Dynamic pseudo-classes classify elements on characteristics other
+than their name, attributes, or content, in principle characteristics
+that cannot be deduced from the document tree.</p>
+
+<p>Dynamic pseudo-classes do not appear in the document source or
+document tree.</p>
+
+
+<h5>The <a name=link>link pseudo-classes: :link and :visited</a></h5>
+
+<p>User agents commonly display unvisited links differently from
+previously visited ones. Selectors
+provides the pseudo-classes <code>:link</code> and
+<code>:visited</code> to distinguish them:</p>
+
+<ul>
+ <li>The <code>:link</code> pseudo-class applies to links that have
+ not yet been visited.</li>
+ <li>The <code>:visited</code> pseudo-class applies once the link has
+ been visited by the user. </li>
+</ul>
+
+<p>After some amount of time, user agents may choose to return a
+visited link to the (unvisited) ':link' state.</p>
+
+<p>The two states are mutually exclusive.</p>
+
+<div class="example">
+
+ <p>Example:</p>
+
+ <p>The following selector represents links carrying class
+ <code>external</code> and already visited:</p>
+
+ <pre>a.external:visited</pre>
+
+</div>
+
+<p class="note"><strong>Note:</strong> It is possible for style sheet
+authors to abuse the :link and :visited pseudo-classes to determine
+which sites a user has visited without the user's consent.
+
+<p>UAs may therefore treat all links as unvisited links, or implement
+other measures to preserve the user's privacy while rendering visited
+and unvisited links differently.</p>
+
+<h5>The <a name=useraction-pseudos>user action pseudo-classes
+:hover, :active, and :focus</a></h5>
+
+<p>Interactive user agents sometimes change the rendering in response
+to user actions. Selectors provides
+three pseudo-classes for the selection of an element the user is
+acting on.</p>
+
+<ul>
+
+ <li>The <code>:hover</code> pseudo-class applies while the user
+ designates an element with a pointing device, but does not activate
+ it. For example, a visual user agent could apply this pseudo-class
+ when the cursor (mouse pointer) hovers over a box generated by the
+ element. User agents not that do not support <a
+ href="http://www.w3.org/TR/REC-CSS2/media.html#interactive-media-group">interactive
+ media</a> do not have to support this pseudo-class. Some conforming
+ user agents that support <a
+ href="http://www.w3.org/TR/REC-CSS2/media.html#interactive-media-group">interactive
+ media</a> may not be able to support this pseudo-class (e.g., a pen
+ device that does not detect hovering).</li>
+
+ <li>The <code>:active</code> pseudo-class applies while an element
+ is being activated by the user. For example, between the times the
+ user presses the mouse button and releases it.</li>
+
+ <li>The <code>:focus</code> pseudo-class applies while an element
+ has the focus (accepts keyboard or mouse events, or other forms of
+ input). </li>
+
+</ul>
+
+<p>There may be document language or implementation specific limits on
+which elements can become <code>:active</code> or acquire
+<code>:focus</code>.</p>
+
+<p>These pseudo-classes are not mutually exclusive. An element may
+match several pseudo-classes at the same time.</p>
+
+<p>Selectors doesn't define if the parent of an element that is
+':active' or ':hover' is also in that state.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <pre>a:link /* unvisited links */
+a:visited /* visited links */
+a:hover /* user hovers */
+a:active /* active links */</pre>
+ <p>An example of combining dynamic pseudo-classes:</p>
+ <pre>a:focus
+a:focus:hover</pre>
+ <p>The last selector matches <code>a</code> elements that are in
+ the pseudo-class :focus and in the pseudo-class :hover.</p>
+</div>
+
+<p class="note"><strong>Note:</strong> An element can be both ':visited'
+and ':active' (or ':link' and ':active').</p>
+
+<h4><a name=target-pseudo>6.6.2. The target pseudo-class :target</a></h4>
+
+<p>Some URIs refer to a location within a resource. This kind of URI
+ends with a &quot;number sign&quot; (#) followed by an anchor
+identifier (called the fragment identifier).</p>
+
+<p>URIs with fragment identifiers link to a certain element within the
+document, known as the target element. For instance, here is a URI
+pointing to an anchor named <code>section_2</code> in an HTML
+document:</p>
+
+<pre>http://example.com/html/top.html#section_2</pre>
+
+<p>A target element can be represented by the <code>:target</code>
+pseudo-class. If the document's URI has no fragment identifier, then
+the document has no target element.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <pre>p.note:target</pre>
+ <p>This selector represents a <code>p</code> element of class
+ <code>note</code> that is the target element of the referring
+ URI.</p>
+</div>
+
+<div class="example">
+ <p>CSS example:</p>
+ <p>Here, the <code>:target</code> pseudo-class is used to make the
+ target element red and place an image before it, if there is one:</p>
+ <pre>*:target { color : red }
+*:target::before { content : url(target.png) }</pre>
+</div>
+
+<h4><a name=lang-pseudo>6.6.3. The language pseudo-class :lang</a></h4>
+
+<p>If the document language specifies how the human language of an
+element is determined, it is possible to write selectors that
+represent an element based on its language. For example, in HTML <a
+href="#refsHTML4">[HTML4]</a>, the language is determined by a
+combination of the <code>lang</code> attribute, the <code>meta</code>
+element, and possibly by information from the protocol (such as HTTP
+headers). XML uses an attribute called <code>xml:lang</code>, and
+there may be other document language-specific methods for determining
+the language.</p>
+
+<p>The pseudo-class <code>:lang(C)</code> represents an element that
+is in language C. Whether an element is represented by a
+<code>:lang()</code> selector is based solely on the identifier C
+being either equal to, or a hyphen-separated substring of, the
+element's language value, in the same way as if performed by the <a
+href="#attribute-representation">'|='</a> operator in attribute
+selectors. The identifier C does not have to be a valid language
+name.</p>
+
+<p>C must not be empty. (If it is, the selector is invalid.)</p>
+
+<p class="note"><strong>Note:</strong> It is recommended that
+documents and protocols indicate language using codes from RFC 3066 <a
+href="#refsRFC3066">[RFC3066]</a> or its successor, and by means of
+"xml:lang" attributes in the case of XML-based documents <a
+href="#refsXML10">[XML10]</a>. See <a
+href="http://www.w3.org/International/questions/qa-lang-2or3.html">
+"FAQ: Two-letter or three-letter language codes."</a></p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The two following selectors represent an HTML document that is in
+ Belgian, French, or German. The two next selectors represent
+ <code>q</code> quotations in an arbitrary element in Belgian, French,
+ or German.</p>
+ <pre>html:lang(fr-be)
+html:lang(de)
+:lang(fr-be) &gt; q
+:lang(de) &gt; q</pre>
+</div>
+
+<h4><a name=UIstates>6.6.4. The UI element states pseudo-classes</a></h4>
+
+<h5><a name=enableddisabled>The :enabled and :disabled pseudo-classes</a></h5>
+
+<p>The <code>:enabled</code> pseudo-class allows authors to customize
+the look of user interface elements that are enabled &mdash; which the
+user can select or activate in some fashion (e.g. clicking on a button
+with a mouse). There is a need for such a pseudo-class because there
+is no way to programmatically specify the default appearance of say,
+an enabled <code>input</code> element without also specifying what it
+would look like when it was disabled.</p>
+
+<p>Similar to <code>:enabled</code>, <code>:disabled</code> allows the
+author to specify precisely how a disabled or inactive user interface
+element should look.</p>
+
+<p>Most elements will be neither enabled nor disabled. An element is
+enabled if the user can either activate it or transfer the focus to
+it. An element is disabled if it could be enabled, but the user cannot
+presently activate it or transfer focus to it.</p>
+
+
+<h5><a name=checked>The :checked pseudo-class</a></h5>
+
+<p>Radio and checkbox elements can be toggled by the user. Some menu
+items are "checked" when the user selects them. When such elements are
+toggled "on" the <code>:checked</code> pseudo-class applies. The
+<code>:checked</code> pseudo-class initially applies to such elements
+that have the HTML4 <code>selected</code> and <code>checked</code>
+attributes as described in <a
+href="http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.2.1">Section
+17.2.1 of HTML4</a>, but of course the user can toggle "off" such
+elements in which case the <code>:checked</code> pseudo-class would no
+longer apply. While the <code>:checked</code> pseudo-class is dynamic
+in nature, and is altered by user action, since it can also be based
+on the presence of the semantic HTML4 <code>selected</code> and
+<code>checked</code> attributes, it applies to all media.
+
+
+<h5><a name=indeterminate>The :indeterminate pseudo-class</a></h5>
+
+<div class="note">
+
+<p>Radio and checkbox elements can be toggled by the user, but are
+sometimes in an indeterminate state, neither checked nor unchecked.
+This can be due to an element attribute, or DOM manipulation.</p>
+
+<p>A future version of this specification may introduce an
+<code>:indeterminate</code> pseudo-class that applies to such elements.
+<!--While the <code>:indeterminate</code> pseudo-class is dynamic in
+nature, and is altered by user action, since it can also be based on
+the presence of an element attribute, it applies to all media.</p>
+
+<p>Components of a radio-group initialized with no pre-selected choice
+are an example of :indeterminate state.--></p>
+
+</div>
+
+
+<h4><a name=structural-pseudos>6.6.5. Structural pseudo-classes</a></h4>
+
+<p>Selectors introduces the concept of <dfn>structural
+pseudo-classes</dfn> to permit selection based on extra information that lies in
+the document tree but cannot be represented by other simple selectors or
+combinators.
+
+<p>Note that standalone pieces of PCDATA (text nodes in the DOM) are
+not counted when calculating the position of an element in the list of
+children of its parent. When calculating the position of an element in
+the list of children of its parent, the index numbering starts at 1.
+
+
+<h5><a name=root-pseudo>:root pseudo-class</a></h5>
+
+<p>The <code>:root</code> pseudo-class represents an element that is
+the root of the document. In HTML 4, this is always the
+<code>HTML</code> element.
+
+
+<h5><a name=nth-child-pseudo>:nth-child() pseudo-class</a></h5>
+
+<p>The
+<code>:nth-child(<var>a</var><code>n</code>+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings
+<strong>before</strong> it in the document tree, for a given positive
+integer or zero value of <code>n</code>, and has a parent element. In
+other words, this matches the <var>b</var>th child of an element after
+all the children have been split into groups of <var>a</var> elements
+each. For example, this allows the selectors to address every other
+row in a table, and could be used to alternate the color
+of paragraph text in a cycle of four. The <var>a</var> and
+<var>b</var> values must be zero, negative integers or positive
+integers. The index of the first child of an element is 1.
+
+<p>In addition to this, <code>:nth-child()</code> can take
+'<code>odd</code>' and '<code>even</code>' as arguments instead.
+'<code>odd</code>' has the same signification as <code>2n+1</code>,
+and '<code>even</code>' has the same signification as <code>2n</code>.
+
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-child(2n+1) /* represents every odd row of an HTML table */
+tr:nth-child(odd) /* same */
+tr:nth-child(2n) /* represents every even row of an HTML table */
+tr:nth-child(even) /* same */
+
+/* Alternate paragraph colours in CSS */
+p:nth-child(4n+1) { color: navy; }
+p:nth-child(4n+2) { color: green; }
+p:nth-child(4n+3) { color: maroon; }
+p:nth-child(4n+4) { color: purple; }</pre>
+</div>
+
+<p>When <var>a</var>=0, no repeating is used, so for example
+<code>:nth-child(0n+5)</code> matches only the fifth child. When
+<var>a</var>=0, the <var>a</var><code>n</code> part need not be
+included, so the syntax simplifies to
+<code>:nth-child(<var>b</var>)</code> and the last example simplifies
+to <code>:nth-child(5)</code>.
+
+<div class="example">
+<p>Examples:</p>
+<pre>foo:nth-child(0n+1) /* represents an element foo, first child of its parent element */
+foo:nth-child(1) /* same */</pre>
+</div>
+
+<p>When <var>a</var>=1, the number may be omitted from the rule.
+
+<div class="example">
+<p>Examples:</p>
+<p>The following selectors are therefore equivalent:</p>
+<pre>bar:nth-child(1n+0) /* represents all bar elements, specificity (0,1,1) */
+bar:nth-child(n+0) /* same */
+bar:nth-child(n) /* same */
+bar /* same but lower specificity (0,0,1) */</pre>
+</div>
+
+<p>If <var>b</var>=0, then every <var>a</var>th element is picked. In
+such a case, the <var>b</var> part may be omitted.
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-child(2n+0) /* represents every even row of an HTML table */
+tr:nth-child(2n) /* same */</pre>
+</div>
+
+<p>If both <var>a</var> and <var>b</var> are equal to zero, the
+pseudo-class represents no element in the document tree.</p>
+
+<p>The value <var>a</var> can be negative, but only the positive
+values of <var>a</var><code>n</code>+<var>b</var>, for
+<code>n</code>&ge;0, may represent an element in the document
+tree.</p>
+
+<div class="example">
+<p>Example:</p>
+<pre>html|tr:nth-child(-n+6) /* represents the 6 first rows of XHTML tables */</pre>
+</div>
+
+<p>When the value <var>b</var> is negative, the "+" character in the
+expression must be removed (it is effectively replaced by the "-"
+character indicating the negative value of <var>b</var>).</p>
+
+<div class="example">
+<p>Examples:</p>
+<pre>:nth-child(10n-1) /* represents the 9th, 19th, 29th, etc, element */
+:nth-child(10n+9) /* Same */
+:nth-child(10n+-1) /* Syntactically invalid, and would be ignored */</pre>
+</div>
+
+
+<h5><a name=nth-last-child-pseudo>:nth-last-child() pseudo-class</a></h5>
+
+<p>The <code>:nth-last-child(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings
+<strong>after</strong> it in the document tree, for a given positive
+integer or zero value of <code>n</code>, and has a parent element. See
+<code>:nth-child()</code> pseudo-class for the syntax of its argument.
+It also accepts the '<code>even</code>' and '<code>odd</code>' values
+as arguments.
+
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-last-child(-n+2) /* represents the two last rows of an HTML table */
+
+foo:nth-last-child(odd) /* represents all odd foo elements in their parent element,
+ counting from the last one */</pre>
+</div>
+
+
+<h5><a name=nth-of-type-pseudo>:nth-of-type() pseudo-class</a></h5>
+
+<p>The <code>:nth-of-type(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings with the same
+element name <strong>before</strong> it in the document tree, for a
+given zero or positive integer value of <code>n</code>, and has a
+parent element. In other words, this matches the <var>b</var>th child
+of that type after all the children of that type have been split into
+groups of a elements each. See <code>:nth-child()</code> pseudo-class
+for the syntax of its argument. It also accepts the
+'<code>even</code>' and '<code>odd</code>' values.
+
+
+<div class="example">
+<p>CSS example:</p>
+<p>This allows an author to alternate the position of floated images:</p>
+<pre>img:nth-of-type(2n+1) { float: right; }
+img:nth-of-type(2n) { float: left; }</pre>
+</div>
+
+
+<h5><a name=nth-last-of-type-pseudo>:nth-last-of-type() pseudo-class</a></h5>
+
+<p>The <code>:nth-last-of-type(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings with the same
+element name <strong>after</strong> it in the document tree, for a
+given zero or positive integer value of <code>n</code>, and has a
+parent element. See <code>:nth-child()</code> pseudo-class for the
+syntax of its argument. It also accepts the '<code>even</code>' and '<code>odd</code>' values.
+
+
+<div class="example">
+ <p>Example:</p>
+ <p>To represent all <code>h2</code> children of an XHTML
+ <code>body</code> except the first and last, one could use the
+ following selector:</p>
+ <pre>body &gt; h2:nth-of-type(n+2):nth-last-of-type(n+2)</pre>
+ <p>In this case, one could also use <code>:not()</code>, although the
+ selector ends up being just as long:</p>
+ <pre>body &gt; h2:not(:first-of-type):not(:last-of-type)</pre>
+</div>
+
+
+<h5><a name=first-child-pseudo>:first-child pseudo-class</a></h5>
+
+<p>Same as <code>:nth-child(1)</code>. The <code>:first-child</code> pseudo-class
+represents an element that is the first child of some other element.
+
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element that is
+ the first child of a <code>div</code> element:</p>
+ <pre>div &gt; p:first-child</pre>
+ <p>This selector can represent the <code>p</code> inside the
+ <code>div</code> of the following fragment:</p>
+ <pre>&lt;p&gt; The last P before the note.&lt;/p&gt;
+&lt;div class="note"&gt;
+ &lt;p&gt; The first P inside the note.&lt;/p&gt;
+&lt;/div&gt;</pre>but cannot represent the second <code>p</code> in the following
+fragment:
+ <pre>&lt;p&gt; The last P before the note.&lt;/p&gt;
+&lt;div class="note"&gt;
+ &lt;h2&gt; Note &lt;/h2&gt;
+ &lt;p&gt; The first P inside the note.&lt;/p&gt;
+&lt;/div&gt;</pre>
+ <p>The following two selectors are usually equivalent:</p>
+ <pre>* &gt; a:first-child /* a is first child of any element */
+a:first-child /* Same (assuming a is not the root element) */</pre>
+</div>
+
+<h5><a name=last-child-pseudo>:last-child pseudo-class</a></h5>
+
+<p>Same as <code>:nth-last-child(1)</code>. The <code>:last-child</code> pseudo-class
+represents an element that is the last child of some other element.
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents a list item <code>li</code> that
+ is the last child of an ordered list <code>ol</code>.
+ <pre>ol &gt; li:last-child</pre>
+</div>
+
+<h5><a name=first-of-type-pseudo>:first-of-type pseudo-class</a></h5>
+
+<p>Same as <code>:nth-of-type(1)</code>. The <code>:first-of-type</code> pseudo-class
+represents an element that is the first sibling of its type in the list of
+children of its parent element.
+
+<div class="example">
+<p>Example:</p>
+<p>The following selector represents a definition title
+<code>dt</code> inside a definition list <code>dl</code>, this
+<code>dt</code> being the first of its type in the list of children of
+its parent element.</p>
+<pre>dl dt:first-of-type</pre>
+<p>It is a valid description for the first two <code>dt</code>
+elements in the following example but not for the third one:</p>
+<pre>&lt;dl&gt;
+ &lt;dt&gt;gigogne&lt;/dt&gt;
+ &lt;dd&gt;
+ &lt;dl&gt;
+ &lt;dt&gt;fus&eacute;e&lt;/dt&gt;
+ &lt;dd&gt;multistage rocket&lt;/dd&gt;
+ &lt;dt&gt;table&lt;/dt&gt;
+ &lt;dd&gt;nest of tables&lt;/dd&gt;
+ &lt;/dl&gt;
+ &lt;/dd&gt;
+&lt;/dl&gt;</pre>
+</div>
+
+<h5><a name=last-of-type-pseudo>:last-of-type pseudo-class</a></h5>
+
+<p>Same as <code>:nth-last-of-type(1)</code>. The
+<code>:last-of-type</code> pseudo-class represents an element that is
+the last sibling of its type in the list of children of its parent
+element.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents the last data cell
+ <code>td</code> of a table row.</p>
+ <pre>tr &gt; td:last-of-type</pre>
+</div>
+
+<h5><a name=only-child-pseudo>:only-child pseudo-class</a></h5>
+
+<p>Represents an element that has a parent element and whose parent
+element has no other element children. Same as
+<code>:first-child:last-child</code> or
+<code>:nth-child(1):nth-last-child(1)</code>, but with a lower
+specificity.</p>
+
+<h5><a name=only-of-type-pseudo>:only-of-type pseudo-class</a></h5>
+
+<p>Represents an element that has a parent element and whose parent
+element has no other element children with the same element name. Same
+as <code>:first-of-type:last-of-type</code> or
+<code>:nth-of-type(1):nth-last-of-type(1)</code>, but with a lower
+specificity.</p>
+
+
+<h5><a name=empty-pseudo></a>:empty pseudo-class</h5>
+
+<p>The <code>:empty</code> pseudo-class represents an element that has
+no children at all. In terms of the DOM, only element nodes and text
+nodes (including CDATA nodes and entity references) whose data has a
+non-zero length must be considered as affecting emptiness; comments,
+PIs, and other nodes must not affect whether an element is considered
+empty or not.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p><code>p:empty</code> is a valid representation of the following fragment:</p>
+ <pre>&lt;p&gt;&lt;/p&gt;</pre>
+ <p><code>foo:empty</code> is not a valid representation for the
+ following fragments:</p>
+ <pre>&lt;foo&gt;bar&lt;/foo&gt;</pre>
+ <pre>&lt;foo&gt;&lt;bar&gt;bla&lt;/bar&gt;&lt;/foo&gt;</pre>
+ <pre>&lt;foo&gt;this is not &lt;bar&gt;:empty&lt;/bar&gt;&lt;/foo&gt;</pre>
+</div>
+
+<h4><a name=content-selectors>6.6.6. Blank</a></h4> <!-- It's the Return of Appendix H!!! Run away! -->
+
+<p>This section intentionally left blank.</p>
+<!-- (used to be :contains()) -->
+
+<h4><a name=negation></a>6.6.7. The negation pseudo-class</h4>
+
+<p>The negation pseudo-class, <code>:not(<var>X</var>)</code>, is a
+functional notation taking a <a href="#simple-selectors-dfn">simple
+selector</a> (excluding the negation pseudo-class itself and
+pseudo-elements) as an argument. It represents an element that is not
+represented by the argument.
+
+<!-- pseudo-elements are not simple selectors, so the above paragraph
+may be a bit confusing -->
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following CSS selector matches all <code>button</code>
+ elements in an HTML document that are not disabled.</p>
+ <pre>button:not([DISABLED])</pre>
+ <p>The following selector represents all but <code>FOO</code>
+ elements.</p>
+ <pre>*:not(FOO)</pre>
+ <p>The following group of selectors represents all HTML elements
+ except links.</p>
+ <pre>html|*:not(:link):not(:visited)</pre>
+</div>
+
+<p>Default namespace declarations do not affect the argument of the
+negation pseudo-class unless the argument is a universal selector or a
+type selector.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>Assuming that the default namespace is bound to
+ "http://example.com/", the following selector represents all
+ elements that are not in that namespace:</p>
+ <pre>*|*:not(*)</pre>
+ <p>The following CSS selector matches any element being hovered,
+ regardless of its namespace. In particular, it is not limited to
+ only matching elements in the default namespace that are not being
+ hovered, and elements not in the default namespace don't match the
+ rule when they <em>are</em> being hovered.</p>
+ <pre>*|*:not(:hover)</pre>
+</div>
+
+<p class="note"><strong>Note</strong>: the :not() pseudo allows
+useless selectors to be written. For instance <code>:not(*|*)</code>,
+which represents no element at all, or <code>foo:not(bar)</code>,
+which is equivalent to <code>foo</code> but with a higher
+specificity.</p>
+
+<h3><a name=pseudo-elements>7. Pseudo-elements</a></h3>
+
+<p>Pseudo-elements create abstractions about the document tree beyond
+those specified by the document language. For instance, document
+languages do not offer mechanisms to access the first letter or first
+line of an element's content. Pseudo-elements allow designers to refer
+to this otherwise inaccessible information. Pseudo-elements may also
+provide designers a way to refer to content that does not exist in the
+source document (e.g., the <code>::before</code> and
+<code>::after</code> pseudo-elements give access to generated
+content).</p>
+
+<p>A pseudo-element is made of two colons (<code>::</code>) followed
+by the name of the pseudo-element.</p>
+
+<p>This <code>::</code> notation is introduced by the current document
+in order to establish a discrimination between pseudo-classes and
+pseudo-elements. For compatibility with existing style sheets, user
+agents must also accept the previous one-colon notation for
+pseudo-elements introduced in CSS levels 1 and 2 (namely,
+<code>:first-line</code>, <code>:first-letter</code>,
+<code>:before</code> and <code>:after</code>). This compatibility is
+not allowed for the new pseudo-elements introduced in CSS level 3.</p>
+
+<p>Only one pseudo-element may appear per selector, and if present it
+must appear after the sequence of simple selectors that represents the
+<a href="#subject">subjects</a> of the selector. <span class="note">A
+future version of this specification may allow multiple
+pesudo-elements per selector.</span></p>
+
+<h4><a name=first-line>7.1. The ::first-line pseudo-element</a></h4>
+
+<p>The <code>::first-line</code> pseudo-element describes the contents
+of the first formatted line of an element.
+
+<div class="example">
+<p>CSS example:</p>
+<pre>p::first-line { text-transform: uppercase }</pre>
+<p>The above rule means "change the letters of the first line of every
+paragraph to uppercase".</p>
+</div>
+
+<p>The selector <code>p::first-line</code> does not match any real
+HTML element. It does match a pseudo-element that conforming user
+agents will insert at the beginning of every paragraph.</p>
+
+<p>Note that the length of the first line depends on a number of
+factors, including the width of the page, the font size, etc. Thus,
+an ordinary HTML paragraph such as:</p>
+
+<pre>
+&lt;P&gt;This is a somewhat long HTML
+paragraph that will be broken into several
+lines. The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>the lines of which happen to be broken as follows:
+
+<pre>
+THIS IS A SOMEWHAT LONG HTML PARAGRAPH THAT
+will be broken into several lines. The first
+line will be identified by a fictional tag
+sequence. The other lines will be treated as
+ordinary lines in the paragraph.
+</pre>
+
+<p>This paragraph might be "rewritten" by user agents to include the
+<em>fictional tag sequence</em> for <code>::first-line</code>. This
+fictional tag sequence helps to show how properties are inherited.</p>
+
+<pre>
+&lt;P&gt;<b>&lt;P::first-line&gt;</b> This is a somewhat long HTML
+paragraph that <b>&lt;/P::first-line&gt;</b> will be broken into several
+lines. The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>If a pseudo-element breaks up a real element, the desired effect
+can often be described by a fictional tag sequence that closes and
+then re-opens the element. Thus, if we mark up the previous paragraph
+with a <code>span</code> element:</p>
+
+<pre>
+&lt;P&gt;<b>&lt;SPAN class="test"&gt;</b> This is a somewhat long HTML
+paragraph that will be broken into several
+lines.<b>&lt;/SPAN&gt;</b> The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>the user agent could simulate start and end tags for
+<code>span</code> when inserting the fictional tag sequence for
+<code>::first-line</code>.
+
+<pre>
+&lt;P&gt;&lt;P::first-line&gt;<b>&lt;SPAN class="test"&gt;</b> This is a
+somewhat long HTML
+paragraph that will <b>&lt;/SPAN&gt;</b>&lt;/P::first-line&gt;<b>&lt;SPAN class="test"&gt;</b> be
+broken into several
+lines.<b>&lt;/SPAN&gt;</b> The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>In CSS, the <code>::first-line</code> pseudo-element can only be
+attached to a block-level element, an inline-block, a table-caption,
+or a table-cell.</p>
+
+<p><a name="first-formatted-line"></a>The "first formatted line" of an
+element may occur inside a
+block-level descendant in the same flow (i.e., a block-level
+descendant that is not positioned and not a float). E.g., the first
+line of the <code>div</code> in <code>&lt;DIV>&lt;P>This
+line...&lt;/P>&lt/DIV></code> is the first line of the <code>p</code> (assuming
+that both <code>p</code> and <code>div</code> are block-level).
+
+<p>The first line of a table-cell or inline-block cannot be the first
+formatted line of an ancestor element. Thus, in <code>&lt;DIV&gt;&lt;P
+STYLE="display: inline-block">Hello&lt;BR&gt;Goodbye&lt;/P&gt;
+etcetera&lt;/DIV&gt;</code> the first formatted line of the
+<code>div</code> is not the line "Hello".
+
+<p class="note">Note that the first line of the <code>p</code> in this
+fragment: <code>&lt;p&gt&lt;br&gt;First...</code> doesn't contain any
+letters (assuming the default style for <code>br</code> in HTML
+4). The word "First" is not on the first formatted line.
+
+<p>A UA should act as if the fictional start tags of the
+<code>::first-line</code> pseudo-elements were nested just inside the
+innermost enclosing block-level element. (Since CSS1 and CSS2 were
+silent on this case, authors should not rely on this behavior.) Here
+is an example. The fictional tag sequence for</p>
+
+<pre>
+&lt;DIV>
+ &lt;P>First paragraph&lt;/P>
+ &lt;P>Second paragraph&lt;/P>
+&lt;/DIV>
+</pre>
+
+<p>is</p>
+
+<pre>
+&lt;DIV>
+ &lt;P>&lt;DIV::first-line>&lt;P::first-line>First paragraph&lt;/P::first-line>&lt;/DIV::first-line>&lt;/P>
+ &lt;P>&lt;P::first-line>Second paragraph&lt;/P::first-line>&lt;/P>
+&lt;/DIV>
+</pre>
+
+<p>The <code>::first-line</code> pseudo-element is similar to an
+inline-level element, but with certain restrictions. In CSS, the
+following properties apply to a <code>::first-line</code>
+pseudo-element: font properties, color property, background
+properties, 'word-spacing', 'letter-spacing', 'text-decoration',
+'vertical-align', 'text-transform', 'line-height'. UAs may apply other
+properties as well.</p>
+
+
+<h4><a name=first-letter>7.2. The ::first-letter pseudo-element</a></h4>
+
+<p>The <code>::first-letter</code> pseudo-element represents the first
+letter of the first line of a block, if it is not preceded by any
+other content (such as images or inline tables) on its line. The
+::first-letter pseudo-element may be used for "initial caps" and "drop
+caps", which are common typographical effects. This type of initial
+letter is similar to an inline-level element if its 'float' property
+is 'none'; otherwise, it is similar to a floated element.</p>
+
+<p>In CSS, these are the properties that apply to <code>::first-letter</code>
+pseudo-elements: font properties, 'text-decoration', 'text-transform',
+'letter-spacing', 'word-spacing' (when appropriate), 'line-height',
+'float', 'vertical-align' (only if 'float' is 'none'), margin
+properties, padding properties, border properties, color property,
+background properties. UAs may apply other properties as well. To
+allow UAs to render a typographically correct drop cap or initial cap,
+the UA may choose a line-height, width and height based on the shape
+of the letter, unlike for normal elements.</p>
+
+<div class="example">
+<p>Example:</p>
+<p>This example shows a possible rendering of an initial cap. Note
+that the 'line-height' that is inherited by the <code>::first-letter</code>
+pseudo-element is 1.1, but the UA in this example has computed the
+height of the first letter differently, so that it doesn't cause any
+unnecessary space between the first two lines. Also note that the
+fictional start tag of the first letter is inside the <span>span</span>, and thus
+the font weight of the first letter is normal, not bold as the <span>span</span>:
+<pre>
+p { line-height: 1.1 }
+p::first-letter { font-size: 3em; font-weight: normal }
+span { font-weight: bold }
+...
+&lt;p>&lt;span>Het hemelsche&lt;/span> gerecht heeft zich ten lange lesten&lt;br>
+Erbarremt over my en mijn benaeuwde vesten&lt;br>
+En arme burgery, en op mijn volcx gebed&lt;br>
+En dagelix geschrey de bange stad ontzet.
+</pre>
+<div class="figure">
+<p><img src="initial-cap.png" alt="Image illustrating the ::first-letter pseudo-element">
+</div>
+</div>
+
+<div class="example">
+<p>The following CSS will make a drop cap initial letter span about two lines:</p>
+
+<pre>
+&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"&gt;
+&lt;HTML&gt;
+ &lt;HEAD&gt;
+ &lt;TITLE&gt;Drop cap initial letter&lt;/TITLE&gt;
+ &lt;STYLE type="text/css"&gt;
+ P { font-size: 12pt; line-height: 1.2 }
+ P::first-letter { font-size: 200%; font-weight: bold; float: left }
+ SPAN { text-transform: uppercase }
+ &lt;/STYLE&gt;
+ &lt;/HEAD&gt;
+ &lt;BODY&gt;
+ &lt;P&gt;&lt;SPAN&gt;The first&lt;/SPAN&gt; few words of an article
+ in The Economist.&lt;/P&gt;
+ &lt;/BODY&gt;
+&lt;/HTML&gt;
+</pre>
+
+<p>This example might be formatted as follows:</p>
+
+<div class="figure">
+<P><img src="first-letter.gif" alt="Image illustrating the combined effect of the ::first-letter and ::first-line pseudo-elements"></p>
+</div>
+
+<p>The <span class="index-inst" title="fictional tag
+sequence">fictional tag sequence</span> is:</p>
+
+<pre>
+&lt;P&gt;
+&lt;SPAN&gt;
+&lt;P::first-letter&gt;
+T
+&lt;/P::first-letter&gt;he first
+&lt;/SPAN&gt;
+few words of an article in the Economist.
+&lt;/P&gt;
+</pre>
+
+<p>Note that the <code>::first-letter</code> pseudo-element tags abut
+the content (i.e., the initial character), while the ::first-line
+pseudo-element start tag is inserted right after the start tag of the
+block element.</p> </div>
+
+<p>In order to achieve traditional drop caps formatting, user agents
+may approximate font sizes, for example to align baselines. Also, the
+glyph outline may be taken into account when formatting.</p>
+
+<p>Punctuation (i.e, characters defined in Unicode in the "open" (Ps),
+"close" (Pe), "initial" (Pi). "final" (Pf) and "other" (Po)
+punctuation classes), that precedes or follows the first letter should
+be included. <a href="#refsUNICODE">[UNICODE]</a></p>
+
+<div class="figure">
+<P><img src="first-letter2.gif" alt="Quotes that precede the
+first letter should be included."></p>
+</div>
+
+<p>The <code>::first-letter</code> also applies if the first letter is
+in fact a digit, e.g., the "6" in "67 million dollars is a lot of
+money."</p>
+
+<p>In CSS, the <code>::first-letter</code> pseudo-element applies to
+block, list-item, table-cell, table-caption, and inline-block
+elements. <span class="note">A future version of this specification
+may allow this pesudo-element to apply to more element
+types.</span></p>
+
+<p>The <code>::first-letter</code> pseudo-element can be used with all
+such elements that contain text, or that have a descendant in the same
+flow that contains text. A UA should act as if the fictional start tag
+of the ::first-letter pseudo-element is just before the first text of
+the element, even if that first text is in a descendant.</p>
+
+<div class="example">
+<p>Example:</p>
+<p>The fictional tag sequence for this HTMLfragment:
+<pre>&lt;div>
+&lt;p>The first text.</pre>
+<p>is:
+<pre>&lt;div>
+&lt;p>&lt;div::first-letter>&lt;p::first-letter>T&lt;/...>&lt;/...>he first text.</pre>
+</div>
+
+<p>The first letter of a table-cell or inline-block cannot be the
+first letter of an ancestor element. Thus, in <code>&lt;DIV&gt;&lt;P
+STYLE="display: inline-block">Hello&lt;BR&gt;Goodbye&lt;/P&gt;
+etcetera&lt;/DIV&gt;</code> the first letter of the <code>div</code> is not the
+letter "H". In fact, the <code>div</code> doesn't have a first letter.
+
+<p>The first letter must occur on the <a
+href="#first-formatted-line">first formatted line.</a> For example, in
+this fragment: <code>&lt;p&gt&lt;br&gt;First...</code> the first line
+doesn't contain any letters and <code>::first-letter</code> doesn't
+match anything (assuming the default style for <code>br</code> in HTML
+4). In particular, it does not match the "F" of "First."
+
+<p>In CSS, if an element is a list item ('display: list-item'), the
+<code>::first-letter</code> applies to the first letter in the
+principal box after the marker. UAs may ignore
+<code>::first-letter</code> on list items with 'list-style-position:
+inside'. If an element has <code>::before</code> or
+<code>::after</code> content, the <code>::first-letter</code> applies
+to the first letter of the element <em>including</em> that content.
+
+<div class="example">
+<p>Example:</p>
+<p>After the rule 'p::before {content: "Note: "}', the selector
+'p::first-letter' matches the "N" of "Note".</p>
+</div>
+
+<p>Some languages may have specific rules about how to treat certain
+letter combinations. In Dutch, for example, if the letter combination
+"ij" appears at the beginning of a word, both letters should be
+considered within the <code>::first-letter</code> pseudo-element.
+
+<p>If the letters that would form the ::first-letter are not in the
+same element, such as "'T" in <code>&lt;p>'&lt;em>T...</code>, the UA
+may create a ::first-letter pseudo-element from one of the elements,
+both elements, or simply not create a pseudo-element.</p>
+
+<p>Similarly, if the first letter(s) of the block are not at the start
+of the line (for example due to bidirectional reordering), then the UA
+need not create the pseudo-element(s).
+
+<div class="example">
+<p>Example:</p>
+<p><a name="overlapping-example">The following example</a> illustrates
+how overlapping pseudo-elements may interact. The first letter of
+each P element will be green with a font size of '24pt'. The rest of
+the first formatted line will be 'blue' while the rest of the
+paragraph will be 'red'.</p>
+
+<pre>p { color: red; font-size: 12pt }
+p::first-letter { color: green; font-size: 200% }
+p::first-line { color: blue }
+
+&lt;P&gt;Some text that ends up on two lines&lt;/P&gt;</pre>
+
+<p>Assuming that a line break will occur before the word "ends", the
+<span class="index-inst" title="fictional tag sequence">fictional tag
+sequence</span> for this fragment might be:</p>
+
+<pre>&lt;P&gt;
+&lt;P::first-line&gt;
+&lt;P::first-letter&gt;
+S
+&lt;/P::first-letter&gt;ome text that
+&lt;/P::first-line&gt;
+ends up on two lines
+&lt;/P&gt;</pre>
+
+<p>Note that the <code>::first-letter</code> element is inside the <code>::first-line</code>
+element. Properties set on <code>::first-line</code> are inherited by
+<code>::first-letter</code>, but are overridden if the same property is set on
+<code>::first-letter</code>.</p>
+</div>
+
+
+<h4><a name=UIfragments>7.3.</a> <a name=selection>The ::selection pseudo-element</a></h4>
+
+<p>The <code>::selection</code> pseudo-element applies to the portion
+of a document that has been highlighted by the user. This also
+applies, for example, to selected text within an editable text
+field. This pseudo-element should not be confused with the <code><a
+href="#checked">:checked</a></code> pseudo-class (which used to be
+named <code>:selected</code>)
+
+<p>Although the <code>::selection</code> pseudo-element is dynamic in
+nature, and is altered by user action, it is reasonable to expect that
+when a UA re-renders to a static medium (such as a printed page, see
+<a href="#refsCSS21">[CSS21]</a>) which was originally rendered to a
+dynamic medium (like screen), the UA may wish to transfer the current
+<code>::selection</code> state to that other medium, and have all the
+appropriate formatting and rendering take effect as well. This is not
+required &mdash; UAs may omit the <code>::selection</code>
+pseudo-element for static media.
+
+<p>These are the CSS properties that apply to <code>::selection</code>
+pseudo-elements: color, background, cursor (optional), outline
+(optional). The computed value of the 'background-image' property on
+<code>::selection</code> may be ignored.
+
+
+<h4><a name=gen-content>7.4. The ::before and ::after pseudo-elements</a></h4>
+
+<p>The <code>::before</code> and <code>::after</code> pseudo-elements
+can be used to describe generated content before or after an element's
+content. They are explained in CSS 2.1 <a
+href="#refsCSS21">[CSS21]</a>.</p>
+
+<p>When the <code>::first-letter</code> and <code>::first-line</code>
+pseudo-elements are combined with <code>::before</code> and
+<code>::after</code>, they apply to the first letter or line of the
+element including the inserted text.</p>
+
+<h2><a name=combinators>8. Combinators</a></h2>
+
+<h3><a name=descendant-combinators>8.1. Descendant combinator</a></h3>
+
+<p>At times, authors may want selectors to describe an element that is
+the descendant of another element in the document tree (e.g., "an
+<code>EM</code> element that is contained within an <code>H1</code>
+element"). Descendant combinators express such a relationship. A
+descendant combinator is <a href="#whitespace">white space</a> that
+separates two sequences of simple selectors. A selector of the form
+"<code>A B</code>" represents an element <code>B</code> that is an
+arbitrary descendant of some ancestor element <code>A</code>.
+
+<div class="example">
+ <p>Examples:</p>
+ <p>For example, consider the following selector:</p>
+ <pre>h1 em</pre>
+ <p>It represents an <code>em</code> element being the descendant of
+ an <code>h1</code> element. It is a correct and valid, but partial,
+ description of the following fragment:</p>
+ <pre>&lt;h1&gt;This &lt;span class="myclass"&gt;headline
+is &lt;em&gt;very&lt;/em&gt; important&lt;/span&gt;&lt;/h1&gt;</pre>
+ <p>The following selector:</p>
+ <pre>div * p</pre>
+ <p>represents a <code>p</code> element that is a grandchild or later
+ descendant of a <code>div</code> element. Note the whitespace on
+ either side of the "*" is not part of the universal selector; the
+ whitespace is a combinator indicating that the DIV must be the
+ ancestor of some element, and that that element must be an ancestor
+ of the P.</p>
+ <p>The following selector, which combines descendant combinators and
+ <a href="#attribute-selectors">attribute selectors</a>, represents an
+ element that (1) has the <code>href</code> attribute set and (2) is
+ inside a <code>p</code> that is itself inside a <code>div</code>:</p>
+ <pre>div p *[href]</pre>
+</div>
+
+<h3><a name=child-combinators>8.2. Child combinators</a></h3>
+
+<p>A <dfn>child combinator</dfn> describes a childhood relationship
+between two elements. A child combinator is made of the
+&quot;greater-than sign&quot; (<code>&gt;</code>) character and
+separates two sequences of simple selectors.
+
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element that is
+ child of <code>body</code>:</p>
+ <pre>body &gt; p</pre>
+ <p>The following example combines descendant combinators and child
+ combinators.</p>
+ <pre>div ol&gt;li p</pre><!-- LEAVE THOSE SPACES OUT! see below -->
+ <p>It represents a <code>p</code> element that is a descendant of an
+ <code>li</code> element; the <code>li</code> element must be the
+ child of an <code>ol</code> element; the <code>ol</code> element must
+ be a descendant of a <code>div</code>. Notice that the optional white
+ space around the "&gt;" combinator has been left out.</p>
+</div>
+
+<p>For information on selecting the first child of an element, please
+see the section on the <code><a
+href="#structural-pseudos">:first-child</a></code> pseudo-class
+above.</p>
+
+<h3><a name=sibling-combinators>8.3. Sibling combinators</a></h3>
+
+<p>There are two different sibling combinators: the adjacent sibling
+combinator and the general sibling combinator. In both cases,
+non-element nodes (e.g. text between elements) are ignored when
+considering adjacency of elements.</p>
+
+<h4><a name=adjacent-sibling-combinators>8.3.1. Adjacent sibling combinator</a></h4>
+
+<p>The adjacent sibling combinator is made of the &quot;plus
+sign&quot; (U+002B, <code>+</code>) character that separates two
+sequences of simple selectors. The elements represented by the two
+sequences share the same parent in the document tree and the element
+represented by the first sequence immediately precedes the element
+represented by the second one.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element
+ immediately following a <code>math</code> element:</p>
+ <pre>math + p</pre>
+ <p>The following selector is conceptually similar to the one in the
+ previous example, except that it adds an attribute selector &mdash; it
+ adds a constraint to the <code>h1</code> element, that it must have
+ <code>class="opener"</code>:</p>
+ <pre>h1.opener + h2</pre>
+</div>
+
+
+<h4><a name=general-sibling-combinators>8.3.2. General sibling combinator</a></h4>
+
+<p>The general sibling combinator is made of the &quot;tilde&quot;
+(U+007E, <code>~</code>) character that separates two sequences of
+simple selectors. The elements represented by the two sequences share
+the same parent in the document tree and the element represented by
+the first sequence precedes (not necessarily immediately) the element
+represented by the second one.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <pre>h1 ~ pre</pre>
+ <p>represents a <code>pre</code> element following an <code>h1</code>. It
+ is a correct and valid, but partial, description of:</p>
+ <pre>&lt;h1&gt;Definition of the function a&lt;/h1&gt;
+&lt;p&gt;Function a(x) has to be applied to all figures in the table.&lt;/p&gt;
+&lt;pre&gt;function a(x) = 12x/13.5&lt;/pre&gt;</pre>
+</div>
+
+<h2><a name=specificity>9. Calculating a selector's specificity</a></h2>
+
+<p>A selector's specificity is calculated as follows:</p>
+
+<ul>
+ <li>count the number of ID selectors in the selector (= a)</li>
+ <li>count the number of class selectors, attributes selectors, and pseudo-classes in the selector (= b)</li>
+ <li>count the number of element names in the selector (= c)</li>
+ <li>ignore pseudo-elements</li>
+</ul>
+
+<p>Selectors inside <a href="#negation">the negation pseudo-class</a>
+are counted like any other, but the negation itself does not count as
+a pseudo-class.</p>
+
+<p>Concatenating the three numbers a-b-c (in a number system with a
+large base) gives the specificity.</p>
+
+<div class="example">
+<p>Examples:</p>
+<pre>* /* a=0 b=0 c=0 -&gt; specificity = 0 */
+LI /* a=0 b=0 c=1 -&gt; specificity = 1 */
+UL LI /* a=0 b=0 c=2 -&gt; specificity = 2 */
+UL OL+LI /* a=0 b=0 c=3 -&gt; specificity = 3 */
+H1 + *[REL=up] /* a=0 b=1 c=1 -&gt; specificity = 11 */
+UL OL LI.red /* a=0 b=1 c=3 -&gt; specificity = 13 */
+LI.red.level /* a=0 b=2 c=1 -&gt; specificity = 21 */
+#x34y /* a=1 b=0 c=0 -&gt; specificity = 100 */
+#s12:not(FOO) /* a=1 b=0 c=1 -&gt; specificity = 101 */
+</pre>
+</div>
+
+<p class="note"><strong>Note:</strong> the specificity of the styles
+specified in an HTML <code>style</code> attribute is described in CSS
+2.1. <a href="#refsCSS21">[CSS21]</a>.</p>
+
+<h2><a name=w3cselgrammar>10. The grammar of Selectors</a></h2>
+
+<h3><a name=grammar>10.1. Grammar</a></h3>
+
+<p>The grammar below defines the syntax of Selectors. It is globally
+LL(1) and can be locally LL(2) (but note that most UA's should not use
+it directly, since it doesn't express the parsing conventions). The
+format of the productions is optimized for human consumption and some
+shorthand notations beyond Yacc (see <a href="#refsYACC">[YACC]</a>)
+are used:</p>
+
+<ul>
+ <li><b>*</b>: 0 or more
+ <li><b>+</b>: 1 or more
+ <li><b>?</b>: 0 or 1
+ <li><b>|</b>: separates alternatives
+ <li><b>[ ]</b>: grouping </li>
+</ul>
+
+<p>The productions are:</p>
+
+<pre>selectors_group
+ : selector [ COMMA S* selector ]*
+ ;
+
+selector
+ : simple_selector_sequence [ combinator simple_selector_sequence ]*
+ ;
+
+combinator
+ /* combinators can be surrounded by white space */
+ : PLUS S* | GREATER S* | TILDE S* | S+
+ ;
+
+simple_selector_sequence
+ : [ type_selector | universal ]
+ [ HASH | class | attrib | pseudo | negation ]*
+ | [ HASH | class | attrib | pseudo | negation ]+
+ ;
+
+type_selector
+ : [ namespace_prefix ]? element_name
+ ;
+
+namespace_prefix
+ : [ IDENT | '*' ]? '|'
+ ;
+
+element_name
+ : IDENT
+ ;
+
+universal
+ : [ namespace_prefix ]? '*'
+ ;
+
+class
+ : '.' IDENT
+ ;
+
+attrib
+ : '[' S* [ namespace_prefix ]? IDENT S*
+ [ [ PREFIXMATCH |
+ SUFFIXMATCH |
+ SUBSTRINGMATCH |
+ '=' |
+ INCLUDES |
+ DASHMATCH ] S* [ IDENT | STRING ] S*
+ ]? ']'
+ ;
+
+pseudo
+ /* '::' starts a pseudo-element, ':' a pseudo-class */
+ /* Exceptions: :first-line, :first-letter, :before and :after. */
+ /* Note that pseudo-elements are restricted to one per selector and */
+ /* occur only in the last simple_selector_sequence. */
+ : ':' ':'? [ IDENT | functional_pseudo ]
+ ;
+
+functional_pseudo
+ : FUNCTION S* expression ')'
+ ;
+
+expression
+ /* In CSS3, the expressions are identifiers, strings, */
+ /* or of the form "an+b" */
+ : [ [ PLUS | '-' | DIMENSION | NUMBER | STRING | IDENT ] S* ]+
+ ;
+
+negation
+ : NOT S* negation_arg S* ')'
+ ;
+
+negation_arg
+ : type_selector | universal | HASH | class | attrib | pseudo
+ ;</pre>
+
+
+<h3><a name=lex>10.2. Lexical scanner</a></h3>
+
+<p>The following is the <a name=x3>tokenizer</a>, written in Flex (see
+<a href="#refsFLEX">[FLEX]</a>) notation. The tokenizer is
+case-insensitive.</p>
+
+<p>The two occurrences of "\377" represent the highest character
+number that current versions of Flex can deal with (decimal 255). They
+should be read as "\4177777" (decimal 1114111), which is the highest
+possible code point in Unicode/ISO-10646. <a
+href="#refsUNICODE">[UNICODE]</a></p>
+
+<pre>%option case-insensitive
+
+ident [-]?{nmstart}{nmchar}*
+name {nmchar}+
+nmstart [_a-z]|{nonascii}|{escape}
+nonascii [^\0-\177]
+unicode \\[0-9a-f]{1,6}(\r\n|[ \n\r\t\f])?
+escape {unicode}|\\[^\n\r\f0-9a-f]
+nmchar [_a-z0-9-]|{nonascii}|{escape}
+num [0-9]+|[0-9]*\.[0-9]+
+string {string1}|{string2}
+string1 \"([^\n\r\f\\"]|\\{nl}|{nonascii}|{escape})*\"
+string2 \'([^\n\r\f\\']|\\{nl}|{nonascii}|{escape})*\'
+invalid {invalid1}|{invalid2}
+invalid1 \"([^\n\r\f\\"]|\\{nl}|{nonascii}|{escape})*
+invalid2 \'([^\n\r\f\\']|\\{nl}|{nonascii}|{escape})*
+nl \n|\r\n|\r|\f
+w [ \t\r\n\f]*
+
+%%
+
+[ \t\r\n\f]+ return S;
+
+"~=" return INCLUDES;
+"|=" return DASHMATCH;
+"^=" return PREFIXMATCH;
+"$=" return SUFFIXMATCH;
+"*=" return SUBSTRINGMATCH;
+{ident} return IDENT;
+{string} return STRING;
+{ident}"(" return FUNCTION;
+{num} return NUMBER;
+"#"{name} return HASH;
+{w}"+" return PLUS;
+{w}"&gt;" return GREATER;
+{w}"," return COMMA;
+{w}"~" return TILDE;
+":not(" return NOT;
+@{ident} return ATKEYWORD;
+{invalid} return INVALID;
+{num}% return PERCENTAGE;
+{num}{ident} return DIMENSION;
+"&lt;!--" return CDO;
+"--&gt;" return CDC;
+
+"url("{w}{string}{w}")" return URI;
+"url("{w}([!#$%&*-~]|{nonascii}|{escape})*{w}")" return URI;
+U\+[0-9a-f?]{1,6}(-[0-9a-f]{1,6})? return UNICODE_RANGE;
+
+\/\*[^*]*\*+([^/*][^*]*\*+)*\/ /* ignore comments */
+
+. return *yytext;</pre>
+
+
+
+<h2><a name=downlevel>11. Namespaces and down-level clients</a></h2>
+
+<p>An important issue is the interaction of CSS selectors with XML
+documents in web clients that were produced prior to this
+document. Unfortunately, due to the fact that namespaces must be
+matched based on the URI which identifies the namespace, not the
+namespace prefix, some mechanism is required to identify namespaces in
+CSS by their URI as well. Without such a mechanism, it is impossible
+to construct a CSS style sheet which will properly match selectors in
+all cases against a random set of XML documents. However, given
+complete knowledge of the XML document to which a style sheet is to be
+applied, and a limited use of namespaces within the XML document, it
+is possible to construct a style sheet in which selectors would match
+elements and attributes correctly.</p>
+
+<p>It should be noted that a down-level CSS client will (if it
+properly conforms to CSS forward compatible parsing rules) ignore all
+<code>@namespace</code> at-rules, as well as all style rules that make
+use of namespace qualified element type or attribute selectors. The
+syntax of delimiting namespace prefixes in CSS was deliberately chosen
+so that down-level CSS clients would ignore the style rules rather
+than possibly match them incorrectly.</p>
+
+<p>The use of default namespaces in CSS makes it possible to write
+element type selectors that will function in both namespace aware CSS
+clients as well as down-level clients. It should be noted that
+down-level clients may incorrectly match selectors against XML
+elements in other namespaces.</p>
+
+<p>The following are scenarios and examples in which it is possible to
+construct style sheets which would function properly in web clients
+that do not implement this proposal.</p>
+
+<ol>
+ <li>
+
+ <p>The XML document does not use namespaces.</p>
+
+ <ul>
+
+ <li>In this case, it is obviously not necessary to declare or use
+ namespaces in the style sheet. Standard CSS element type and
+ attribute selectors will function adequately in a down-level
+ client.</li>
+
+ <li>In a CSS namespace aware client, the default behavior of
+ element selectors matching without regard to namespace will
+ function properly against all elements, since no namespaces are
+ present. However, the use of specific element type selectors that
+ match only elements that have no namespace ("<code>|name</code>")
+ will guarantee that selectors will match only XML elements that do
+ not have a declared namespace. </li>
+
+ </ul>
+
+ </li>
+
+ <li>
+
+ <p>The XML document defines a single, default namespace used
+ throughout the document. No namespace prefixes are used in element
+ names.</p>
+
+ <ul>
+
+ <li>In this case, a down-level client will function as if
+ namespaces were not used in the XML document at all. Standard CSS
+ element type and attribute selectors will match against all
+ elements. </li>
+
+ </ul>
+
+ </li>
+
+ <li>
+
+ <p>The XML document does <b>not</b> use a default namespace, all
+ namespace prefixes used are known to the style sheet author, and
+ there is a direct mapping between namespace prefixes and namespace
+ URIs. (A given prefix may only be mapped to one namespace URI
+ throughout the XML document; there may be multiple prefixes mapped
+ to the same URI).</p>
+
+ <ul>
+
+ <li>In this case, the down-level client will view and match
+ element type and attribute selectors based on their fully
+ qualified name, not the local part as outlined in the <a
+ href="#typenmsp">Type selectors and Namespaces</a> section. CSS
+ selectors may be declared using an escaped colon "<code>\:</code>"
+ to describe the fully qualified names, e.g.
+ "<code>html\:h1</code>" will match
+ <code>&lt;html:h1&gt;</code>. Selectors using the qualified name
+ will only match XML elements that use the same prefix. Other
+ namespace prefixes used in the XML that are mapped to the same URI
+ will not match as expected unless additional CSS style rules are
+ declared for them.</li>
+
+ <li>Note that selectors declared in this fashion will
+ <em>only</em> match in down-level clients. A CSS namespace aware
+ client will match element type and attribute selectors based on
+ the name's local part. Selectors declared with the fully
+ qualified name will not match (unless there is no namespace prefix
+ in the fully qualified name).</li>
+
+ </ul>
+
+ </li>
+
+ </ol>
+
+<p>In other scenarios: when the namespace prefixes used in the XML are
+not known in advance by the style sheet author; or a combination of
+elements with no namespace are used in conjunction with elements using
+a default namespace; or the same namespace prefix is mapped to
+<em>different</em> namespace URIs within the same document, or in
+different documents; it is impossible to construct a CSS style sheet
+that will function properly against all elements in those documents,
+unless, the style sheet is written using a namespace URI syntax (as
+outlined in this document or similar) and the document is processed by
+a CSS and XML namespace aware client.</p>
+
+<h2><a name=profiling>12. Profiles</a></h2>
+
+<p>Each specification using Selectors must define the subset of W3C
+Selectors it allows and excludes, and describe the local meaning of
+all the components of that subset.</p>
+
+<p>Non normative examples:
+
+<div class="profile">
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>CSS level 1</td></tr>
+ <tr>
+ <th>Accepts</th>
+ <td>type selectors<br>class selectors<br>ID selectors<br>:link,
+ :visited and :active pseudo-classes<br>descendant combinator
+ <br>::first-line and ::first-letter pseudo-elements</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>
+
+<p>universal selector<br>attribute selectors<br>:hover and :focus
+ pseudo-classes<br>:target pseudo-class<br>:lang() pseudo-class<br>all UI
+ element states pseudo-classes<br>all structural
+ pseudo-classes<br>negation pseudo-class<br>all
+ UI element fragments pseudo-elements<br>::before and ::after
+ pseudo-elements<br>child combinators<br>sibling combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>only one class selector allowed per sequence of simple
+ selectors</td></tr></tbody></table><br><br>
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>CSS level 2</td></tr>
+ <tr>
+ <th>Accepts</th>
+ <td>type selectors<br>universal selector<br>attribute presence and
+ values selectors<br>class selectors<br>ID selectors<br>:link, :visited,
+ :active, :hover, :focus, :lang() and :first-child pseudo-classes
+ <br>descendant combinator<br>child combinator<br>adjacent sibling
+ combinator<br>::first-line and ::first-letter pseudo-elements<br>::before
+ and ::after pseudo-elements</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>
+
+<p>content selectors<br>substring matching attribute
+ selectors<br>:target pseudo-classes<br>all UI element
+ states pseudo-classes<br>all structural pseudo-classes other
+ than :first-child<br>negation pseudo-class<br>all UI element
+ fragments pseudo-elements<br>general sibling combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>more than one class selector per sequence of simple selectors (CSS1
+ constraint) allowed</td></tr></tbody></table>
+
+<p>In CSS, selectors express pattern matching rules that determine which style
+rules apply to elements in the document tree.
+
+<p>The following selector (CSS level 2) will <b>match</b> all anchors <code>a</code>
+with attribute <code>name</code> set inside a section 1 header <code>h1</code>:
+<pre>h1 a[name]</pre>
+
+<p>All CSS declarations attached to such a selector are applied to elements
+matching it. </div>
+
+<div class="profile">
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>STTS 3</td>
+ </tr>
+ <tr>
+ <th>Accepts</th>
+ <td>
+
+<p>type selectors<br>universal selectors<br>attribute selectors<br>class
+ selectors<br>ID selectors<br>all structural pseudo-classes<br>
+ all combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>non-accepted pseudo-classes<br>pseudo-elements<br></td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>some selectors and combinators are not allowed in fragment
+ descriptions on the right side of STTS declarations.</td></tr></tbody></table>
+<form>
+<input type="text" name="test10"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+</form>
+
+<p>Selectors can be used in STTS 3 in two different
+ manners:
+<ol>
+ <li>a selection mechanism equivalent to CSS selection mechanism: declarations
+ attached to a given selector are applied to elements matching that selector,
+ <li>fragment descriptions that appear on the right side of declarations.
+</li></ol></div>
+
+<h2><a name=Conformance></a>13. Conformance and requirements</h2>
+
+<p>This section defines conformance with the present specification only.
+
+<p>The inability of a user agent to implement part of this specification due to
+the limitations of a particular device (e.g., non interactive user agents will
+probably not implement dynamic pseudo-classes because they make no sense without
+interactivity) does not imply non-conformance.
+
+<p>All specifications reusing Selectors must contain a <a
+href="#profiling">Profile</a> listing the
+subset of Selectors it accepts or excludes, and describing the constraints
+it adds to the current specification.
+
+<p>Invalidity is caused by a parsing error, e.g. an unrecognized token or a token
+which is not allowed at the current parsing point.
+
+<p>User agents must observe the rules for handling parsing errors:
+<ul>
+ <li>a simple selector containing an undeclared namespace prefix is invalid</li>
+ <li>a selector containing an invalid simple selector, an invalid combinator
+ or an invalid token is invalid. </li>
+ <li>a group of selectors containing an invalid selector is invalid.</li>
+</ul>
+
+<p class="foo test10 bar">Specifications reusing Selectors must define how to handle parsing
+errors. (In the case of CSS, the entire rule in which the selector is
+used is dropped.)</p>
+
+<!-- Apparently all these references are out of date:
+<p>Implementations of this specification must behave as
+"recipients of text data" as defined by <a href="#refsCWWW">[CWWW]</a>
+when parsing selectors and attempting matches. (In particular,
+implementations must assume the data is normalized and must not
+normalize it.) Normative rules for matching strings are defined in
+<a href="#refsCWWW">[CWWW]</a> and <a
+href="#refsUNICODE">[UNICODE]</a> and apply to implementations of this
+specification.</p>-->
+
+<h2><a name=Tests></a>14. Tests</h2>
+
+<p>This specification has <a
+href="http://www.w3.org/Style/CSS/Test/CSS3/Selectors/current/">a test
+suite</a> allowing user agents to verify their basic conformance to
+the specification. This test suite does not pretend to be exhaustive
+and does not cover all possible combined cases of Selectors.</p>
+
+<h2><a name=ACKS></a>15. Acknowledgements</h2>
+
+<p>The CSS working group would like to thank everyone who has sent
+comments on this specification over the years.</p>
+
+<p>The working group would like to extend special thanks to Donna
+McManus, Justin Baker, Joel Sklar, and Molly Ives Brower who perfermed
+the final editorial review.</p>
+
+<h2><a name=references>16. References</a></h2>
+
+<dl class="refs">
+
+ <dt>[CSS1]
+ <dd><a name=refsCSS1></a> Bert Bos, H&aring;kon Wium Lie; "<cite>Cascading Style Sheets, level 1</cite>", W3C Recommendation, 17 Dec 1996, revised 11 Jan 1999
+ <dd>(<code><a href="http://www.w3.org/TR/REC-CSS1">http://www.w3.org/TR/REC-CSS1</a></code>)
+
+ <dt>[CSS21]
+ <dd><a name=refsCSS21></a> Bert Bos, Tantek &Ccedil;elik, Ian Hickson, H&aring;kon Wium Lie, editors; "<cite>Cascading Style Sheets, level 2 revision 1</cite>", W3C Working Draft, 13 June 2005
+ <dd>(<code><a href="http://www.w3.org/TR/CSS21">http://www.w3.org/TR/CSS21</a></code>)
+
+ <dt>[CWWW]
+ <dd><a name=refsCWWW></a> Martin J. D&uuml;rst, Fran&ccedil;ois Yergeau, Misha Wolf, Asmus Freytag, Tex Texin, editors; "<cite>Character Model for the World Wide Web</cite>", W3C Recommendation, 15 February 2005
+ <dd>(<code><a href="http://www.w3.org/TR/charmod/">http://www.w3.org/TR/charmod/</a></code>)
+
+ <dt>[FLEX]
+ <dd><a name="refsFLEX"></a> "<cite>Flex: The Lexical Scanner Generator</cite>", Version 2.3.7, ISBN 1882114213
+
+ <dt>[HTML4]
+ <dd><a name="refsHTML4"></a> Dave Ragget, Arnaud Le Hors, Ian Jacobs, editors; "<cite>HTML 4.01 Specification</cite>", W3C Recommendation, 24 December 1999
+ <dd>(<a href="http://www.w3.org/TR/html4/"><code>http://www.w3.org/TR/html4/</code></a>)
+
+ <dt>[MATH]
+ <dd><a name="refsMATH"></a> Patrick Ion, Robert Miner, editors; "<cite>Mathematical Markup Language (MathML) 1.01</cite>", W3C Recommendation, revision of 7 July 1999
+ <dd>(<code><a href="http://www.w3.org/TR/REC-MathML/">http://www.w3.org/TR/REC-MathML/</a></code>)
+
+ <dt>[RFC3066]
+ <dd><a name="refsRFC3066"></a> H. Alvestrand; "<cite>Tags for the Identification of Languages</cite>", Request for Comments 3066, January 2001
+ <dd>(<a href="http://www.ietf.org/rfc/rfc3066.txt"><code>http://www.ietf.org/rfc/rfc3066.txt</code></a>)
+
+ <dt>[STTS]
+ <dd><a name=refsSTTS></a> Daniel Glazman; "<cite>Simple Tree Transformation Sheets 3</cite>", Electricit&eacute; de France, submission to the W3C, 11 November 1998
+ <dd>(<code><a href="http://www.w3.org/TR/NOTE-STTS3">http://www.w3.org/TR/NOTE-STTS3</a></code>)
+
+ <dt>[SVG]
+ <dd><a name="refsSVG"></a> Jon Ferraiolo, &#34276;&#27810; &#28147;, Dean Jackson, editors; "<cite>Scalable Vector Graphics (SVG) 1.1 Specification</cite>", W3C Recommendation, 14 January 2003
+ <dd>(<code><a href="http://www.w3.org/TR/SVG/">http://www.w3.org/TR/SVG/</a></code>)
+
+ <dt>[UNICODE]</dt>
+ <dd><a name="refsUNICODE"></a> <cite><a
+ href="http://www.unicode.org/versions/Unicode4.1.0/">The Unicode Standard, Version 4.1</a></cite>, The Unicode Consortium. Boston, MA, Addison-Wesley, March 2005. ISBN 0-321-18578-1, as amended by <a href="http://www.unicode.org/versions/Unicode4.0.1/">Unicode 4.0.1</a> and <a href="http://www.unicode.org/versions/Unicode4.1.0/">Unicode 4.1.0</a>.
+ <dd>(<code><a href="http://www.unicode.org/versions/">http://www.unicode.org/versions/</a></code>)</dd>
+
+ <dt>[XML10]
+ <dd><a name="refsXML10"></a> Tim Bray, Jean Paoli, C. M. Sperberg-McQueen, Eve Maler, Fran&ccedil;ois Yergeau, editors; "<cite>Extensible Markup Language (XML) 1.0 (Third Edition)</cite>", W3C Recommendation, 4 February 2004
+ <dd>(<a href="http://www.w3.org/TR/REC-xml/"><code>http://www.w3.org/TR/REC-xml/</code></a>)
+
+ <dt>[XMLNAMES]
+ <dd><a name="refsXMLNAMES"></a> Tim Bray, Dave Hollander, Andrew Layman, editors; "<cite>Namespaces in XML</cite>", W3C Recommendation, 14 January 1999
+ <dd>(<a href="http://www.w3.org/TR/REC-xml-names/"><code>http://www.w3.org/TR/REC-xml-names/</code></a>)
+
+ <dt>[YACC]
+ <dd><a name="refsYACC"></a> S. C. Johnson; "<cite>YACC &mdash; Yet another compiler compiler</cite>", Technical Report, Murray Hill, 1975
+
+</dl>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/jslib-style-prototype.html b/testing/talos/talos/tests/dromaeo/tests/jslib-style-prototype.html
new file mode 100644
index 0000000000..f680f7ab3c
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/jslib-style-prototype.html
@@ -0,0 +1,2959 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script src="../lib/prototype.js"></script>
+<script>
+window.onload = function(){
+startTest("jslib-style-prototype", 'f511098c');
+
+// Try to force real results
+var ret, tmp, div;
+
+var html = document.body.innerHTML;
+
+ prep(function(){
+ div = $$("div");
+ var tmp = document.createElement("div");
+ tmp.innerHTML = html;
+ document.body.appendChild( tmp );
+ });
+
+ test("Prototype - getStyle()", function(){
+ for ( var i = 0; i < 10; i++ )
+ ret = div.invoke("getStyle","color");
+ });
+
+ test("Prototype - setStyle()", function(){
+ for ( var i = 0; i < 10; i++ )
+ div.invoke("setStyle","color","red");
+ });
+
+ test("Prototype - getHeight()", function(){
+ for ( var i = 0; i < 10; i++ )
+ ret = div.invoke("getHeight");
+ });
+
+ test("Prototype - getWidth()", function(){
+ for ( var i = 0; i < 10; i++ )
+ ret = div.invoke("getWidth");
+ });
+
+ test("Prototype - visible()", function(){
+ for ( var i = 0; i < 10; i++ )
+ ret = div.invoke("visible");
+ });
+
+ test("Prototype - .show()", function(){
+ for ( var i = 0; i < 10; i++ )
+ div.invoke("show");
+ });
+
+ test("Prototype - .hide()", function(){
+ for ( var i = 0; i < 10; i++ )
+ div.invoke("hide");
+ });
+
+ test("Prototype - .toggle() x10", function(){
+ for ( var i = 0; i < 10; i++ )
+ div.invoke("toggle");
+ });
+
+endTest();
+};
+</script>
+</head>
+<body>
+ <div class="head">
+ <p><a href="http://www.w3.org/"><img height=48 alt=W3C src="w3c_home.png" width=72></a>
+
+ <h1 id="title">Selectors</h1>
+
+ <h2>W3C Working Draft 15 December 2005</h2>
+
+ <dl>
+
+ <dt>This version:
+
+ <dd><a href="http://www.w3.org/TR/2005/WD-css3-selectors-20051215">
+ http://www.w3.org/TR/2005/WD-css3-selectors-20051215</a>
+
+ <dt>Latest version:
+
+ <dd><a href="http://www.w3.org/TR/css3-selectors">
+ http://www.w3.org/TR/css3-selectors</a>
+
+ <dt>Previous version:
+
+ <dd><a href="http://www.w3.org/TR/2001/CR-css3-selectors-20011113">
+ http://www.w3.org/TR/2001/CR-css3-selectors-20011113</a>
+
+ <dt><a name=editors-list></a>Editors:
+
+ <dd class="vcard"><span class="fn">Daniel Glazman</span> (Invited Expert)</dd>
+
+ <dd class="vcard"><a lang="tr" class="url fn" href="http://www.tantek.com/">Tantek &Ccedil;elik</a> (Invited Expert)
+
+ <dd class="vcard"><a href="mailto:ian@hixie.ch" class="url fn">Ian Hickson</a> (<span
+ class="company"><a href="http://www.google.com/">Google</a></span>)
+
+ <dd class="vcard"><span class="fn">Peter Linss</span> (former editor, <span class="company"><a
+ href="http://www.netscape.com/">Netscape/AOL</a></span>)
+
+ <dd class="vcard"><span class="fn">John Williams</span> (former editor, <span class="company"><a
+ href="http://www.quark.com/">Quark, Inc.</a></span>)
+
+ </dl>
+
+ <p class="copyright"><a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright">
+ Copyright</a> &copy; 2005 <a href="http://www.w3.org/"><abbr
+ title="World Wide Web Consortium">W3C</abbr></a><sup>&reg;</sup>
+ (<a href="http://www.csail.mit.edu/"><abbr title="Massachusetts
+ Institute of Technology">MIT</abbr></a>, <a
+ href="http://www.ercim.org/"><acronym title="European Research
+ Consortium for Informatics and Mathematics">ERCIM</acronym></a>, <a
+ href="http://www.keio.ac.jp/">Keio</a>), All Rights Reserved. W3C
+ <a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">liability</a>,
+ <a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">trademark</a>,
+ <a
+ href="http://www.w3.org/Consortium/Legal/copyright-documents">document
+ use</a> rules apply.
+
+ <hr title="Separator for header">
+
+ </div>
+
+ <h2><a name=abstract></a>Abstract</h2>
+
+ <p><em>Selectors</em> are patterns that match against elements in a
+ tree. Selectors have been optimized for use with HTML and XML, and
+ are designed to be usable in performance-critical code.</p>
+
+ <p><acronym title="Cascading Style Sheets">CSS</acronym> (Cascading
+ Style Sheets) is a language for describing the rendering of <acronym
+ title="Hypertext Markup Language">HTML</acronym> and <acronym
+ title="Extensible Markup Language">XML</acronym> documents on
+ screen, on paper, in speech, etc. CSS uses Selectors for binding
+ style properties to elements in the document. This document
+ describes extensions to the selectors defined in CSS level 2. These
+ extended selectors will be used by CSS level 3.
+
+ <p>Selectors define the following function:</p>
+
+ <pre>expression &#x2217; element &rarr; boolean</pre>
+
+ <p>That is, given an element and a selector, this specification
+ defines whether that element matches the selector.</p>
+
+ <p>These expressions can also be used, for instance, to select a set
+ of elements, or a single element from a set of elements, by
+ evaluating the expression across all the elements in a
+ subtree. <acronym title="Simple Tree Transformation
+ Sheets">STTS</acronym> (Simple Tree Transformation Sheets), a
+ language for transforming XML trees, uses this mechanism. <a href="#refsSTTS">[STTS]</a></p>
+
+ <h2><a name=status></a>Status of this document</h2>
+
+ <p><em>This section describes the status of this document at the
+ time of its publication. Other documents may supersede this
+ document. A list of current W3C publications and the latest revision
+ of this technical report can be found in the <a
+ href="http://www.w3.org/TR/">W3C technical reports index at
+ http://www.w3.org/TR/.</a></em></p>
+
+ <p>This document describes the selectors that already exist in <a
+ href="#refsCSS1"><abbr title="CSS level 1">CSS1</abbr></a> and <a
+ href="#refsCSS21"><abbr title="CSS level 2">CSS2</abbr></a>, and
+ also proposes new selectors for <abbr title="CSS level
+ 3">CSS3</abbr> and other languages that may need them.</p>
+
+ <p>The CSS Working Group doesn't expect that all implementations of
+ CSS3 will have to implement all selectors. Instead, there will
+ probably be a small number of variants of CSS3, called profiles. For
+ example, it may be that only a profile for interactive user agents
+ will include all of the selectors.</p>
+
+ <p>This specification is a last call working draft for the the <a
+ href="http://www.w3.org/Style/CSS/members">CSS Working Group</a>
+ (<a href="/Style/">Style Activity</a>). This
+ document is a revision of the <a
+ href="http://www.w3.org/TR/2001/CR-css3-selectors-20011113/">Candidate
+ Recommendation dated 2001 November 13</a>, and has incorporated
+ implementation feedback received in the past few years. It is
+ expected that this last call will proceed straight to Proposed
+ Recommendation stage since it is believed that interoperability will
+ be demonstrable.</p>
+
+ <p>All persons are encouraged to review and implement this
+ specification and return comments to the (<a
+ href="http://lists.w3.org/Archives/Public/www-style/">archived</a>)
+ public mailing list <a
+ href="http://www.w3.org/Mail/Lists.html#www-style">www-style</a>
+ (see <a href="http://www.w3.org/Mail/Request">instructions</a>). W3C
+ Members can also send comments directly to the CSS Working
+ Group.
+ The deadline for comments is 14 January 2006.</p>
+
+ <p>This is still a draft document and may be updated, replaced, or
+ obsoleted by other documents at any time. It is inappropriate to
+ cite a W3C Working Draft as other than &quot;work in progress&quot;.
+
+ <p>This document may be available in <a
+ href="http://www.w3.org/Style/css3-selectors-updates/translations">translation</a>.
+ The English version of this specification is the only normative
+ version.
+
+ <div class="subtoc">
+
+ <h2 id="test10"><a name=contents>Table of contents</a></h2>
+
+ <ul class="toc">
+ <li class="tocline2"><a href="#context">1. Introduction</a>
+ <ul>
+ <li><a href="#dependencies">1.1. Dependencies</a> </li>
+ <li><a href="#terminology">1.2. Terminology</a> </li>
+ <li><a href="#changesFromCSS2">1.3. Changes from CSS2</a> </li>
+ </ul>
+ <li class="tocline2"><a href="#selectors">2. Selectors</a>
+ <li class="tocline2"><a href="#casesens">3. Case sensitivity</a>
+ <li class="tocline2"><a href="#selector-syntax">4. Selector syntax</a>
+ <li class="tocline2"><a href="#grouping">5. Groups of selectors</a>
+ <li class="tocline2"><a href="#simple-selectors">6. Simple selectors</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#type-selectors">6.1. Type selectors</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#typenmsp">6.1.1. Type selectors and namespaces</a></li>
+ </ul>
+ <li class="tocline3"><a href="#universal-selector">6.2. Universal selector</a>
+ <ul>
+ <li><a href="#univnmsp">6.2.1. Universal selector and namespaces</a></li>
+ </ul>
+ <li class="tocline3"><a href="#attribute-selectors">6.3. Attribute selectors</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#attribute-representation">6.3.1. Representation of attributes and attributes values</a>
+ <li><a href="#attribute-substrings">6.3.2. Substring matching attribute selectors</a>
+ <li class="tocline4"><a href="#attrnmsp">6.3.3. Attribute selectors and namespaces</a>
+ <li class="tocline4"><a href="#def-values">6.3.4. Default attribute values in DTDs</a></li>
+ </ul>
+ <li class="tocline3"><a href="#class-html">6.4. Class selectors</a>
+ <li class="tocline3"><a href="#id-selectors">6.5. ID selectors</a>
+ <li class="tocline3"><a href="#pseudo-classes">6.6. Pseudo-classes</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#dynamic-pseudos">6.6.1. Dynamic pseudo-classes</a>
+ <li class="tocline4"><a href="#target-pseudo">6.6.2. The :target pseudo-class</a>
+ <li class="tocline4"><a href="#lang-pseudo">6.6.3. The :lang() pseudo-class</a>
+ <li class="tocline4"><a href="#UIstates">6.6.4. UI element states pseudo-classes</a>
+ <li class="tocline4"><a href="#structural-pseudos">6.6.5. Structural pseudo-classes</a>
+ <ul>
+ <li><a href="#root-pseudo">:root pseudo-class</a>
+ <li><a href="#nth-child-pseudo">:nth-child() pseudo-class</a>
+ <li><a href="#nth-last-child-pseudo">:nth-last-child()</a>
+ <li><a href="#nth-of-type-pseudo">:nth-of-type() pseudo-class</a>
+ <li><a href="#nth-last-of-type-pseudo">:nth-last-of-type()</a>
+ <li><a href="#first-child-pseudo">:first-child pseudo-class</a>
+ <li><a href="#last-child-pseudo">:last-child pseudo-class</a>
+ <li><a href="#first-of-type-pseudo">:first-of-type pseudo-class</a>
+ <li><a href="#last-of-type-pseudo">:last-of-type pseudo-class</a>
+ <li><a href="#only-child-pseudo">:only-child pseudo-class</a>
+ <li><a href="#only-of-type-pseudo">:only-of-type pseudo-class</a>
+ <li><a href="#empty-pseudo">:empty pseudo-class</a></li>
+ </ul>
+ <li class="tocline4"><a href="#negation">6.6.7. The negation pseudo-class</a></li>
+ </ul>
+ </li>
+ </ul>
+ <li><a href="#pseudo-elements">7. Pseudo-elements</a>
+ <ul>
+ <li><a href="#first-line">7.1. The ::first-line pseudo-element</a>
+ <li><a href="#first-letter">7.2. The ::first-letter pseudo-element</a>
+ <li><a href="#UIfragments">7.3. The ::selection pseudo-element</a>
+ <li><a href="#gen-content">7.4. The ::before and ::after pseudo-elements</a></li>
+ </ul>
+ <li class="tocline2"><a href="#combinators">8. Combinators</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#descendant-combinators">8.1. Descendant combinators</a>
+ <li class="tocline3"><a href="#child-combinators">8.2. Child combinators</a>
+ <li class="tocline3"><a href="#sibling-combinators">8.3. Sibling combinators</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#adjacent-sibling-combinators">8.3.1. Adjacent sibling combinator</a>
+ <li class="tocline4"><a href="#general-sibling-combinators">8.3.2. General sibling combinator</a></li>
+ </ul>
+ </li>
+ </ul>
+ <li class="tocline2"><a href="#specificity">9. Calculating a selector's specificity</a>
+ <li class="tocline2"><a href="#w3cselgrammar">10. The grammar of Selectors</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#grammar">10.1. Grammar</a>
+ <li class="tocline3"><a href="#lex">10.2. Lexical scanner</a></li>
+ </ul>
+ <li class="tocline2"><a href="#downlevel">11. Namespaces and down-level clients</a>
+ <li class="tocline2"><a href="#profiling">12. Profiles</a>
+ <li><a href="#Conformance">13. Conformance and requirements</a>
+ <li><a href="#Tests">14. Tests</a>
+ <li><a href="#ACKS">15. Acknowledgements</a>
+ <li class="tocline2"><a href="#references">16. References</a>
+ </ul>
+
+ </div>
+
+ <h2><a name=context>1. Introduction</a></h2>
+
+ <h3><a name=dependencies></a>1.1. Dependencies</h3>
+
+ <p>Some features of this specification are specific to CSS, or have
+ particular limitations or rules specific to CSS. In this
+ specification, these have been described in terms of CSS2.1. <a
+ href="#refsCSS21">[CSS21]</a></p>
+
+ <h3><a name=terminology></a>1.2. Terminology</h3>
+
+ <p>All of the text of this specification is normative except
+ examples, notes, and sections explicitly marked as
+ non-normative.</p>
+
+ <h3><a name=changesFromCSS2></a>1.3. Changes from CSS2</h3>
+
+ <p><em>This section is non-normative.</em></p>
+
+ <p>The main differences between the selectors in CSS2 and those in
+ Selectors are:
+
+ <ul>
+
+ <li>the list of basic definitions (selector, group of selectors,
+ simple selector, etc.) has been changed; in particular, what was
+ referred to in CSS2 as a simple selector is now called a sequence
+ of simple selectors, and the term "simple selector" is now used for
+ the components of this sequence</li>
+
+ <li>an optional namespace component is now allowed in type element
+ selectors, the universal selector and attribute selectors</li>
+
+ <li>a <a href="#general-sibling-combinators">new combinator</a> has been introduced</li>
+
+ <li>new simple selectors including substring matching attribute
+ selectors, and new pseudo-classes</li>
+
+ <li>new pseudo-elements, and introduction of the "::" convention
+ for pseudo-elements</li>
+
+ <li>the grammar has been rewritten</li>
+
+ <li>profiles to be added to specifications integrating Selectors
+ and defining the set of selectors which is actually supported by
+ each specification</li>
+
+ <li>Selectors are now a CSS3 Module and an independent
+ specification; other specifications can now refer to this document
+ independently of CSS</li>
+
+ <li>the specification now has its own test suite</li>
+
+ </ul>
+
+<h2><a name=selectors></a>2. Selectors</h2>
+
+<p><em>This section is non-normative, as it merely summarizes the
+following sections.</em></p>
+
+<p>A Selector represents a structure. This structure can be used as a
+condition (e.g. in a CSS rule) that determines which elements a
+selector matches in the document tree, or as a flat description of the
+HTML or XML fragment corresponding to that structure.</p>
+
+<p>Selectors may range from simple element names to rich contextual
+representations.</p>
+
+<p>The following table summarizes the Selector syntax:</p>
+
+<table class="selectorsReview">
+ <thead>
+ <tr>
+ <th class="pattern">Pattern</th>
+ <th class="meaning">Meaning</th>
+ <th class="described">Described in section</th>
+ <th class="origin">First defined in CSS level</th></tr>
+ <tbody>
+ <tr>
+ <td class="pattern">*</td>
+ <td class="meaning">any element</td>
+ <td class="described"><a
+ href="#universal-selector">Universal
+ selector</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E</td>
+ <td class="meaning">an element of type E</td>
+ <td class="described"><a
+ href="#type-selectors">Type selector</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E[foo]</td>
+ <td class="meaning">an E element with a "foo" attribute</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value is exactly
+ equal to "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo~="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value is a list of
+ space-separated values, one of which is exactly equal to "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo^="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value begins exactly
+ with the string "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[foo$="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value ends exactly
+ with the string "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[foo*="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value contains the
+ substring "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[hreflang|="en"]</td>
+ <td class="meaning">an E element whose "hreflang" attribute has a hyphen-separated
+ list of values beginning (from the left) with "en"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:root</td>
+ <td class="meaning">an E element, root of the document</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-child(n)</td>
+ <td class="meaning">an E element, the n-th child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-last-child(n)</td>
+ <td class="meaning">an E element, the n-th child of its parent, counting
+ from the last one</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-of-type(n)</td>
+ <td class="meaning">an E element, the n-th sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-last-of-type(n)</td>
+ <td class="meaning">an E element, the n-th sibling of its type, counting
+ from the last one</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:first-child</td>
+ <td class="meaning">an E element, first child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:last-child</td>
+ <td class="meaning">an E element, last child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:first-of-type</td>
+ <td class="meaning">an E element, first sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:last-of-type</td>
+ <td class="meaning">an E element, last sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:only-child</td>
+ <td class="meaning">an E element, only child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:only-of-type</td>
+ <td class="meaning">an E element, only sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:empty</td>
+ <td class="meaning">an E element that has no children (including text
+ nodes)</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:link<br>E:visited</td>
+ <td class="meaning">an E element being the source anchor of a hyperlink of
+ which the target is not yet visited (:link) or already visited
+ (:visited)</td>
+ <td class="described"><a
+ href="#link">The link
+ pseudo-classes</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E:active<br>E:hover<br>E:focus</td>
+ <td class="meaning">an E element during certain user actions</td>
+ <td class="described"><a
+ href="#useraction-pseudos">The user
+ action pseudo-classes</a></td>
+ <td class="origin">1 and 2</td></tr>
+ <tr>
+ <td class="pattern">E:target</td>
+ <td class="meaning">an E element being the target of the referring URI</td>
+ <td class="described"><a
+ href="#target-pseudo">The target
+ pseudo-class</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:lang(fr)</td>
+ <td class="meaning">an element of type E in language "fr" (the document
+ language specifies how language is determined)</td>
+ <td class="described"><a
+ href="#lang-pseudo">The :lang()
+ pseudo-class</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:enabled<br>E:disabled</td>
+ <td class="meaning">a user interface element E which is enabled or
+ disabled</td>
+ <td class="described"><a
+ href="#UIstates">The UI element states
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:checked<!--<br>E:indeterminate--></td>
+ <td class="meaning">a user interface element E which is checked<!-- or in an
+ indeterminate state--> (for instance a radio-button or checkbox)</td>
+ <td class="described"><a
+ href="#UIstates">The UI element states
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E::first-line</td>
+ <td class="meaning">the first formatted line of an E element</td>
+ <td class="described"><a
+ href="#first-line">The ::first-line
+ pseudo-element</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E::first-letter</td>
+ <td class="meaning">the first formatted letter of an E element</td>
+ <td class="described"><a
+ href="#first-letter">The ::first-letter
+ pseudo-element</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E::selection</td>
+ <td class="meaning">the portion of an E element that is currently
+ selected/highlighted by the user</td>
+ <td class="described"><a
+ href="#UIfragments">The UI element
+ fragments pseudo-elements</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E::before</td>
+ <td class="meaning">generated content before an E element</td>
+ <td class="described"><a
+ href="#gen-content">The ::before
+ pseudo-element</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E::after</td>
+ <td class="meaning">generated content after an E element</td>
+ <td class="described"><a
+ href="#gen-content">The ::after
+ pseudo-element</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E.warning</td>
+ <td class="meaning">an E element whose class is
+"warning" (the document language specifies how class is determined).</td>
+ <td class="described"><a
+ href="#class-html">Class
+ selectors</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E#myid</td>
+ <td class="meaning">an E element with ID equal to "myid".</td>
+ <td class="described"><a
+ href="#id-selectors">ID
+ selectors</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E:not(s)</td>
+ <td class="meaning">an E element that does not match simple selector s</td>
+ <td class="described"><a
+ href="#negation">Negation
+ pseudo-class</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E F</td>
+ <td class="meaning">an F element descendant of an E element</td>
+ <td class="described"><a
+ href="#descendant-combinators">Descendant
+ combinator</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E &gt; F</td>
+ <td class="meaning">an F element child of an E element</td>
+ <td class="described"><a
+ href="#child-combinators">Child
+ combinator</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E + F</td>
+ <td class="meaning">an F element immediately preceded by an E element</td>
+ <td class="described"><a
+ href="#adjacent-sibling-combinators">Adjacent sibling combinator</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E ~ F</td>
+ <td class="meaning">an F element preceded by an E element</td>
+ <td class="described"><a
+ href="#general-sibling-combinators">General sibling combinator</a></td>
+ <td class="origin">3</td></tr></tbody></table>
+
+<p>The meaning of each selector is derived from the table above by
+prepending "matches" to the contents of each cell in the "Meaning"
+column.</p>
+
+<h2><a name=casesens>3. Case sensitivity</a></h2>
+
+<p>The case sensitivity of document language element names, attribute
+names, and attribute values in selectors depends on the document
+language. For example, in HTML, element names are case-insensitive,
+but in XML, they are case-sensitive.</p>
+
+<h2><a name=selector-syntax>4. Selector syntax</a></h2>
+
+<p>A <dfn><a name=selector>selector</a></dfn> is a chain of one
+or more <a href="#sequence">sequences of simple selectors</a>
+separated by <a href="#combinators">combinators</a>.</p>
+
+<p>A <dfn><a name=sequence>sequence of simple selectors</a></dfn>
+is a chain of <a href="#simple-selectors-dfn">simple selectors</a>
+that are not separated by a <a href="#combinators">combinator</a>. It
+always begins with a <a href="#type-selectors">type selector</a> or a
+<a href="#universal-selector">universal selector</a>. No other type
+selector or universal selector is allowed in the sequence.</p>
+
+<p>A <dfn><a name=simple-selectors-dfn></a><a
+href="#simple-selectors">simple selector</a></dfn> is either a <a
+href="#type-selectors">type selector</a>, <a
+href="#universal-selector">universal selector</a>, <a
+href="#attribute-selectors">attribute selector</a>, <a
+href="#class-html">class selector</a>, <a
+href="#id-selectors">ID selector</a>, <a
+href="#content-selectors">content selector</a>, or <a
+href="#pseudo-classes">pseudo-class</a>. One <a
+href="#pseudo-elements">pseudo-element</a> may be appended to the last
+sequence of simple selectors.</p>
+
+<p><dfn>Combinators</dfn> are: white space, &quot;greater-than
+sign&quot; (U+003E, <code>&gt;</code>), &quot;plus sign&quot; (U+002B,
+<code>+</code>) and &quot;tilde&quot; (U+007E, <code>~</code>). White
+space may appear between a combinator and the simple selectors around
+it. <a name=whitespace></a>Only the characters "space" (U+0020), "tab"
+(U+0009), "line feed" (U+000A), "carriage return" (U+000D), and "form
+feed" (U+000C) can occur in white space. Other space-like characters,
+such as "em-space" (U+2003) and "ideographic space" (U+3000), are
+never part of white space.</p>
+
+<p>The elements of a document tree that are represented by a selector
+are the <dfn><a name=subject></a>subjects of the selector</dfn>. A
+selector consisting of a single sequence of simple selectors
+represents any element satisfying its requirements. Prepending another
+sequence of simple selectors and a combinator to a sequence imposes
+additional matching constraints, so the subjects of a selector are
+always a subset of the elements represented by the last sequence of
+simple selectors.</p>
+
+<p>An empty selector, containing no sequence of simple selectors and
+no pseudo-element, is an <a href="#Conformance">invalid
+selector</a>.</p>
+
+<h2><a name=grouping>5. Groups of selectors</a></h2>
+
+<p>When several selectors share the same declarations, they may be
+grouped into a comma-separated list. (A comma is U+002C.)</p>
+
+<div class="example">
+<p>CSS examples:</p>
+<p>In this example, we condense three rules with identical
+declarations into one. Thus,</p>
+<pre>h1 { font-family: sans-serif }
+h2 { font-family: sans-serif }
+h3 { font-family: sans-serif }</pre>
+<p>is equivalent to:</p>
+<pre>h1, h2, h3 { font-family: sans-serif }</pre>
+</div>
+
+<p><strong>Warning</strong>: the equivalence is true in this example
+because all the selectors are valid selectors. If just one of these
+selectors were invalid, the entire group of selectors would be
+invalid. This would invalidate the rule for all three heading
+elements, whereas in the former case only one of the three individual
+heading rules would be invalidated.</p>
+
+
+<h2><a name=simple-selectors>6. Simple selectors</a></h2>
+
+<h3><a name=type-selectors>6.1. Type selector</a></h3>
+
+<p>A <dfn>type selector</dfn> is the name of a document language
+element type. A type selector represents an instance of the element
+type in the document tree.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents an <code>h1</code> element in the document tree:</p>
+ <pre>h1</pre>
+</div>
+
+
+<h4><a name=typenmsp>6.1.1. Type selectors and namespaces</a></h4>
+
+<p>Type selectors allow an optional namespace (<a
+href="#refsXMLNAMES">[XMLNAMES]</a>) component. A namespace prefix
+that has been previously declared may be prepended to the element name
+separated by the namespace separator &quot;vertical bar&quot;
+(U+007C, <code>|</code>).</p>
+
+<p>The namespace component may be left empty to indicate that the
+selector is only to represent elements with no declared namespace.</p>
+
+<p>An asterisk may be used for the namespace prefix, indicating that
+the selector represents elements in any namespace (including elements
+with no namespace).</p>
+
+<p>Element type selectors that have no namespace component (no
+namespace separator), represent elements without regard to the
+element's namespace (equivalent to "<code>*|</code>") unless a default
+namespace has been declared. If a default namespace has been declared,
+the selector will represent only elements in the default
+namespace.</p>
+
+<p>A type selector containing a namespace prefix that has not been
+previously declared is an <a href="#Conformance">invalid</a> selector.
+The mechanism for declaring a namespace prefix is left up to the
+language implementing Selectors. In CSS, such a mechanism is defined
+in the General Syntax module.</p>
+
+<p>In a namespace-aware client, element type selectors will only match
+against the <a
+href="http://www.w3.org/TR/REC-xml-names/#NT-LocalPart">local part</a>
+of the element's <a
+href="http://www.w3.org/TR/REC-xml-names/#ns-qualnames">qualified
+name</a>. See <a href="#downlevel">below</a> for notes about matching
+behaviors in down-level clients.</p>
+
+<p>In summary:</p>
+
+<dl>
+ <dt><code>ns|E</code></dt>
+ <dd>elements with name E in namespace ns</dd>
+ <dt><code>*|E</code></dt>
+ <dd>elements with name E in any namespace, including those without any
+ declared namespace</dd>
+ <dt><code>|E</code></dt>
+ <dd>elements with name E without any declared namespace</dd>
+ <dt><code>E</code></dt>
+ <dd>if no default namespace has been specified, this is equivalent to *|E.
+ Otherwise it is equivalent to ns|E where ns is the default namespace.</dd>
+</dl>
+
+<div class="example">
+ <p>CSS examples:</p>
+
+ <pre>@namespace foo url(http://www.example.com);
+ foo|h1 { color: blue }
+ foo|* { color: yellow }
+ |h1 { color: red }
+ *|h1 { color: green }
+ h1 { color: green }</pre>
+
+ <p>The first rule will match only <code>h1</code> elements in the
+ "http://www.example.com" namespace.</p>
+
+ <p>The second rule will match all elements in the
+ "http://www.example.com" namespace.</p>
+
+ <p>The third rule will match only <code>h1</code> elements without
+ any declared namespace.</p>
+
+ <p>The fourth rule will match <code>h1</code> elements in any
+ namespace (including those without any declared namespace).</p>
+
+ <p>The last rule is equivalent to the fourth rule because no default
+ namespace has been defined.</p>
+
+</div>
+
+<h3><a name=universal-selector>6.2. Universal selector</a> </h3>
+
+<p>The <dfn>universal selector</dfn>, written &quot;asterisk&quot;
+(<code>*</code>), represents the qualified name of any element
+type. It represents any single element in the document tree in any
+namespace (including those without any declared namespace) if no
+default namespace has been specified. If a default namespace has been
+specified, see <a href="#univnmsp">Universal selector and
+Namespaces</a> below.</p>
+
+<p>If the universal selector is not the only component of a sequence
+of simple selectors, the <code>*</code> may be omitted.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <ul>
+ <li><code>*[hreflang|=en]</code> and <code>[hreflang|=en]</code> are equivalent,</li>
+ <li><code>*.warning</code> and <code>.warning</code> are equivalent,</li>
+ <li><code>*#myid</code> and <code>#myid</code> are equivalent.</li>
+ </ul>
+</div>
+
+<p class="note"><strong>Note:</strong> it is recommended that the
+<code>*</code>, representing the universal selector, not be
+omitted.</p>
+
+<h4><a name=univnmsp>6.2.1. Universal selector and namespaces</a></h4>
+
+<p>The universal selector allows an optional namespace component. It
+is used as follows:</p>
+
+<dl>
+ <dt><code>ns|*</code></dt>
+ <dd>all elements in namespace ns</dd>
+ <dt><code>*|*</code></dt>
+ <dd>all elements</dd>
+ <dt><code>|*</code></dt>
+ <dd>all elements without any declared namespace</dd>
+ <dt><code>*</code></dt>
+ <dd>if no default namespace has been specified, this is equivalent to *|*.
+ Otherwise it is equivalent to ns|* where ns is the default namespace.</dd>
+</dl>
+
+<p>A universal selector containing a namespace prefix that has not
+been previously declared is an <a href="#Conformance">invalid</a>
+selector. The mechanism for declaring a namespace prefix is left up
+to the language implementing Selectors. In CSS, such a mechanism is
+defined in the General Syntax module.</p>
+
+
+<h3><a name=attribute-selectors>6.3. Attribute selectors</a></h3>
+
+<p>Selectors allow the representation of an element's attributes. When
+a selector is used as an expression to match against an element,
+attribute selectors must be considered to match an element if that
+element has an attribute that matches the attribute represented by the
+attribute selector.</p>
+
+<h4><a name=attribute-representation>6.3.1. Attribute presence and values
+selectors</a></h4>
+
+<p>CSS2 introduced four attribute selectors:</p>
+
+<dl>
+ <dt><code>[att]</code>
+ <dd>Represents an element with the <code>att</code> attribute, whatever the value of
+ the attribute.</dd>
+ <dt><code>[att=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value is exactly
+ "val".</dd>
+ <dt><code>[att~=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value is a <a
+ href="#whitespace">whitespace</a>-separated list of words, one of
+ which is exactly "val". If "val" contains whitespace, it will never
+ represent anything (since the words are <em>separated</em> by
+ spaces).</dd>
+ <dt><code>[att|=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute, its value either
+ being exactly "val" or beginning with "val" immediately followed by
+ "-" (U+002D). This is primarily intended to allow language subcode
+ matches (e.g., the <code>hreflang</code> attribute on the
+ <code>link</code> element in HTML) as described in RFC 3066 (<a
+ href="#refsRFC3066">[RFC3066]</a>). For <code>lang</code> (or
+ <code>xml:lang</code>) language subcode matching, please see <a
+ href="#lang-pseudo">the <code>:lang</code> pseudo-class</a>.</dd>
+</dl>
+
+<p>Attribute values must be identifiers or strings. The
+case-sensitivity of attribute names and values in selectors depends on
+the document language.</p>
+
+<div class="example">
+
+ <p>Examples:</p>
+
+ <p>The following attribute selector represents an <code>h1</code>
+ element that carries the <code>title</code> attribute, whatever its
+ value:</p>
+
+ <pre>h1[title]</pre>
+
+ <p>In the following example, the selector represents a
+ <code>span</code> element whose <code>class</code> attribute has
+ exactly the value "example":</p>
+
+ <pre>span[class="example"]</pre>
+
+ <p>Multiple attribute selectors can be used to represent several
+ attributes of an element, or several conditions on the same
+ attribute. Here, the selector represents a <code>span</code> element
+ whose <code>hello</code> attribute has exactly the value "Cleveland"
+ and whose <code>goodbye</code> attribute has exactly the value
+ "Columbus":</p>
+
+ <pre>span[hello="Cleveland"][goodbye="Columbus"]</pre>
+
+ <p>The following selectors illustrate the differences between "="
+ and "~=". The first selector will represent, for example, the value
+ "copyright copyleft copyeditor" on a <code>rel</code> attribute. The
+ second selector will only represent an <code>a</code> element with
+ an <code>href</code> attribute having the exact value
+ "http://www.w3.org/".</p>
+
+ <pre>a[rel~="copyright"]
+a[href="http://www.w3.org/"]</pre>
+
+ <p>The following selector represents a <code>link</code> element
+ whose <code>hreflang</code> attribute is exactly "fr".</p>
+
+ <pre>link[hreflang=fr]</pre>
+
+ <p>The following selector represents a <code>link</code> element for
+ which the values of the <code>hreflang</code> attribute begins with
+ "en", including "en", "en-US", and "en-cockney":</p>
+
+ <pre>link[hreflang|="en"]</pre>
+
+ <p>Similarly, the following selectors represents a
+ <code>DIALOGUE</code> element whenever it has one of two different
+ values for an attribute <code>character</code>:</p>
+
+ <pre>DIALOGUE[character=romeo]
+DIALOGUE[character=juliet]</pre>
+
+</div>
+
+<h4><a name=attribute-substrings></a>6.3.2. Substring matching attribute
+selectors</h4>
+
+<p>Three additional attribute selectors are provided for matching
+substrings in the value of an attribute:</p>
+
+<dl>
+ <dt><code>[att^=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value begins
+ with the prefix "val".</dd>
+ <dt><code>[att$=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute whose value ends with
+ the suffix "val".</dd>
+ <dt><code>[att*=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute whose value contains
+ at least one instance of the substring "val".</dd>
+</dl>
+
+<p>Attribute values must be identifiers or strings. The
+case-sensitivity of attribute names in selectors depends on the
+document language.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents an HTML <code>object</code>, referencing an
+ image:</p>
+ <pre>object[type^="image/"]</pre>
+ <p>The following selector represents an HTML anchor <code>a</code> with an
+ <code>href</code> attribute whose value ends with ".html".</p>
+ <pre>a[href$=".html"]</pre>
+ <p>The following selector represents an HTML paragraph with a <code>title</code>
+ attribute whose value contains the substring "hello"</p>
+ <pre>p[title*="hello"]</pre>
+</div>
+
+<h4><a name=attrnmsp>6.3.3. Attribute selectors and namespaces</a></h4>
+
+<p>Attribute selectors allow an optional namespace component to the
+attribute name. A namespace prefix that has been previously declared
+may be prepended to the attribute name separated by the namespace
+separator &quot;vertical bar&quot; (<code>|</code>). In keeping with
+the Namespaces in the XML recommendation, default namespaces do not
+apply to attributes, therefore attribute selectors without a namespace
+component apply only to attributes that have no declared namespace
+(equivalent to "<code>|attr</code>"). An asterisk may be used for the
+namespace prefix indicating that the selector is to match all
+attribute names without regard to the attribute's namespace.
+
+<p>An attribute selector with an attribute name containing a namespace
+prefix that has not been previously declared is an <a
+href="#Conformance">invalid</a> selector. The mechanism for declaring
+a namespace prefix is left up to the language implementing Selectors.
+In CSS, such a mechanism is defined in the General Syntax module.
+
+<div class="example">
+ <p>CSS examples:</p>
+ <pre>@namespace foo "http://www.example.com";
+[foo|att=val] { color: blue }
+[*|att] { color: yellow }
+[|att] { color: green }
+[att] { color: green }</pre>
+
+ <p>The first rule will match only elements with the attribute
+ <code>att</code> in the "http://www.example.com" namespace with the
+ value "val".</p>
+
+ <p>The second rule will match only elements with the attribute
+ <code>att</code> regardless of the namespace of the attribute
+ (including no declared namespace).</p>
+
+ <p>The last two rules are equivalent and will match only elements
+ with the attribute <code>att</code> where the attribute is not
+ declared to be in a namespace.</p>
+
+</div>
+
+<h4><a name=def-values>6.3.4. Default attribute values in DTDs</a></h4>
+
+<p>Attribute selectors represent explicitly set attribute values in
+the document tree. Default attribute values may be defined in a DTD or
+elsewhere, but cannot always be selected by attribute
+selectors. Selectors should be designed so that they work even if the
+default values are not included in the document tree.</p>
+
+<p>More precisely, a UA is <em>not</em> required to read an "external
+subset" of the DTD but <em>is</em> required to look for default
+attribute values in the document's "internal subset." (See <a
+href="#refsXML10">[XML10]</a> for definitions of these subsets.)</p>
+
+<p>A UA that recognizes an XML namespace <a
+href="#refsXMLNAMES">[XMLNAMES]</a> is not required to use its
+knowledge of that namespace to treat default attribute values as if
+they were present in the document. (For example, an XHTML UA is not
+required to use its built-in knowledge of the XHTML DTD.)</p>
+
+<p class="note"><strong>Note:</strong> Typically, implementations
+choose to ignore external subsets.</p>
+
+<div class="example">
+<p>Example:</p>
+
+<p>Consider an element EXAMPLE with an attribute "notation" that has a
+default value of "decimal". The DTD fragment might be</p>
+
+<pre class="dtd-example">&lt;!ATTLIST EXAMPLE notation (decimal,octal) "decimal"></pre>
+
+<p>If the style sheet contains the rules</p>
+
+<pre>EXAMPLE[notation=decimal] { /*... default property settings ...*/ }
+EXAMPLE[notation=octal] { /*... other settings...*/ }</pre>
+
+<p>the first rule will not match elements whose "notation" attribute
+is set by default, i.e. not set explicitly. To catch all cases, the
+attribute selector for the default value must be dropped:</p>
+
+<pre>EXAMPLE { /*... default property settings ...*/ }
+EXAMPLE[notation=octal] { /*... other settings...*/ }</pre>
+
+<p>Here, because the selector <code>EXAMPLE[notation=octal]</code> is
+more specific than the tag
+selector alone, the style declarations in the second rule will override
+those in the first for elements that have a "notation" attribute value
+of "octal". Care has to be taken that all property declarations that
+are to apply only to the default case are overridden in the non-default
+cases' style rules.</p>
+
+</div>
+
+<h3><a name=class-html>6.4. Class selectors</a></h3>
+
+<p>Working with HTML, authors may use the period (U+002E,
+<code>.</code>) notation as an alternative to the <code>~=</code>
+notation when representing the <code>class</code> attribute. Thus, for
+HTML, <code>div.value</code> and <code>div[class~=value]</code> have
+the same meaning. The attribute value must immediately follow the
+&quot;period&quot; (<code>.</code>).</p>
+
+<p>UAs may apply selectors using the period (.) notation in XML
+documents if the UA has namespace-specific knowledge that allows it to
+determine which attribute is the &quot;class&quot; attribute for the
+respective namespace. One such example of namespace-specific knowledge
+is the prose in the specification for a particular namespace (e.g. SVG
+1.0 <a href="#refsSVG">[SVG]</a> describes the <a
+href="http://www.w3.org/TR/2001/PR-SVG-20010719/styling.html#ClassAttribute">SVG
+&quot;class&quot; attribute</a> and how a UA should interpret it, and
+similarly MathML 1.01 <a href="#refsMATH">[MATH]</a> describes the <a
+href="http://www.w3.org/1999/07/REC-MathML-19990707/chapter2.html#sec2.3.4">MathML
+&quot;class&quot; attribute</a>.)</p>
+
+<div class="example">
+ <p>CSS examples:</p>
+
+ <p>We can assign style information to all elements with
+ <code>class~="pastoral"</code> as follows:</p>
+
+ <pre>*.pastoral { color: green } /* all elements with class~=pastoral */</pre>
+
+ <p>or just</p>
+
+ <pre>.pastoral { color: green } /* all elements with class~=pastoral */</pre>
+
+ <p>The following assigns style only to H1 elements with
+ <code>class~="pastoral"</code>:</p>
+
+ <pre>H1.pastoral { color: green } /* H1 elements with class~=pastoral */</pre>
+
+ <p>Given these rules, the first H1 instance below would not have
+ green text, while the second would:</p>
+
+ <pre>&lt;H1&gt;Not green&lt;/H1&gt;
+&lt;H1 class="pastoral"&gt;Very green&lt;/H1&gt;</pre>
+
+</div>
+
+<p>To represent a subset of "class" values, each value must be preceded
+by a ".", in any order.</P>
+
+<div class="example">
+
+ <p>CSS example:</p>
+
+ <p>The following rule matches any P element whose "class" attribute
+ has been assigned a list of <a
+ href="#whitespace">whitespace</a>-separated values that includes
+ "pastoral" and "marine":</p>
+
+ <pre>p.pastoral.marine { color: green }</pre>
+
+ <p>This rule matches when <code>class="pastoral blue aqua
+ marine"</code> but does not match for <code>class="pastoral
+ blue"</code>.</p>
+
+</div>
+
+<p class="note"><strong>Note:</strong> Because CSS gives considerable
+power to the "class" attribute, authors could conceivably design their
+own "document language" based on elements with almost no associated
+presentation (such as DIV and SPAN in HTML) and assigning style
+information through the "class" attribute. Authors should avoid this
+practice since the structural elements of a document language often
+have recognized and accepted meanings and author-defined classes may
+not.</p>
+
+<p class="note"><strong>Note:</strong> If an element has multiple
+class attributes, their values must be concatenated with spaces
+between the values before searching for the class. As of this time the
+working group is not aware of any manner in which this situation can
+be reached, however, so this behavior is explicitly non-normative in
+this specification.</p>
+
+<h3><a name=id-selectors>6.5. ID selectors</a></h3>
+
+<p>Document languages may contain attributes that are declared to be
+of type ID. What makes attributes of type ID special is that no two
+such attributes can have the same value in a document, regardless of
+the type of the elements that carry them; whatever the document
+language, an ID typed attribute can be used to uniquely identify its
+element. In HTML all ID attributes are named "id"; XML applications
+may name ID attributes differently, but the same restriction
+applies.</p>
+
+<p>An ID-typed attribute of a document language allows authors to
+assign an identifier to one element instance in the document tree. W3C
+ID selectors represent an element instance based on its identifier. An
+ID selector contains a &quot;number sign&quot; (U+0023,
+<code>#</code>) immediately followed by the ID value, which must be an
+identifier.</p>
+
+<p>Selectors does not specify how a UA knows the ID-typed attribute of
+an element. The UA may, e.g., read a document's DTD, have the
+information hard-coded or ask the user.
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following ID selector represents an <code>h1</code> element
+ whose ID-typed attribute has the value "chapter1":</p>
+ <pre>h1#chapter1</pre>
+ <p>The following ID selector represents any element whose ID-typed
+ attribute has the value "chapter1":</p>
+ <pre>#chapter1</pre>
+ <p>The following selector represents any element whose ID-typed
+ attribute has the value "z98y".</p>
+ <pre>*#z98y</pre>
+</div>
+
+<p class="note"><strong>Note.</strong> In XML 1.0 <a
+href="#refsXML10">[XML10]</a>, the information about which attribute
+contains an element's IDs is contained in a DTD or a schema. When
+parsing XML, UAs do not always read the DTD, and thus may not know
+what the ID of an element is (though a UA may have namespace-specific
+knowledge that allows it to determine which attribute is the ID
+attribute for that namespace). If a style sheet designer knows or
+suspects that a UA may not know what the ID of an element is, he
+should use normal attribute selectors instead:
+<code>[name=p371]</code> instead of <code>#p371</code>. Elements in
+XML 1.0 documents without a DTD do not have IDs at all.</p>
+
+<p>If an element has multiple ID attributes, all of them must be
+treated as IDs for that element for the purposes of the ID
+selector. Such a situation could be reached using mixtures of xml:id,
+DOM3 Core, XML DTDs, and namespace-specific knowledge.</p>
+
+<h3><a name=pseudo-classes>6.6. Pseudo-classes</a></h3>
+
+<p>The pseudo-class concept is introduced to permit selection based on
+information that lies outside of the document tree or that cannot be
+expressed using the other simple selectors.</p>
+
+<p>A pseudo-class always consists of a &quot;colon&quot;
+(<code>:</code>) followed by the name of the pseudo-class and
+optionally by a value between parentheses.</p>
+
+<p>Pseudo-classes are allowed in all sequences of simple selectors
+contained in a selector. Pseudo-classes are allowed anywhere in
+sequences of simple selectors, after the leading type selector or
+universal selector (possibly omitted). Pseudo-class names are
+case-insensitive. Some pseudo-classes are mutually exclusive, while
+others can be applied simultaneously to the same
+element. Pseudo-classes may be dynamic, in the sense that an element
+may acquire or lose a pseudo-class while a user interacts with the
+document.</p>
+
+
+<h4><a name=dynamic-pseudos>6.6.1. Dynamic pseudo-classes</a></h4>
+
+<p>Dynamic pseudo-classes classify elements on characteristics other
+than their name, attributes, or content, in principle characteristics
+that cannot be deduced from the document tree.</p>
+
+<p>Dynamic pseudo-classes do not appear in the document source or
+document tree.</p>
+
+
+<h5>The <a name=link>link pseudo-classes: :link and :visited</a></h5>
+
+<p>User agents commonly display unvisited links differently from
+previously visited ones. Selectors
+provides the pseudo-classes <code>:link</code> and
+<code>:visited</code> to distinguish them:</p>
+
+<ul>
+ <li>The <code>:link</code> pseudo-class applies to links that have
+ not yet been visited.</li>
+ <li>The <code>:visited</code> pseudo-class applies once the link has
+ been visited by the user. </li>
+</ul>
+
+<p>After some amount of time, user agents may choose to return a
+visited link to the (unvisited) ':link' state.</p>
+
+<p>The two states are mutually exclusive.</p>
+
+<div class="example">
+
+ <p>Example:</p>
+
+ <p>The following selector represents links carrying class
+ <code>external</code> and already visited:</p>
+
+ <pre>a.external:visited</pre>
+
+</div>
+
+<p class="note"><strong>Note:</strong> It is possible for style sheet
+authors to abuse the :link and :visited pseudo-classes to determine
+which sites a user has visited without the user's consent.
+
+<p>UAs may therefore treat all links as unvisited links, or implement
+other measures to preserve the user's privacy while rendering visited
+and unvisited links differently.</p>
+
+<h5>The <a name=useraction-pseudos>user action pseudo-classes
+:hover, :active, and :focus</a></h5>
+
+<p>Interactive user agents sometimes change the rendering in response
+to user actions. Selectors provides
+three pseudo-classes for the selection of an element the user is
+acting on.</p>
+
+<ul>
+
+ <li>The <code>:hover</code> pseudo-class applies while the user
+ designates an element with a pointing device, but does not activate
+ it. For example, a visual user agent could apply this pseudo-class
+ when the cursor (mouse pointer) hovers over a box generated by the
+ element. User agents not that do not support <a
+ href="http://www.w3.org/TR/REC-CSS2/media.html#interactive-media-group">interactive
+ media</a> do not have to support this pseudo-class. Some conforming
+ user agents that support <a
+ href="http://www.w3.org/TR/REC-CSS2/media.html#interactive-media-group">interactive
+ media</a> may not be able to support this pseudo-class (e.g., a pen
+ device that does not detect hovering).</li>
+
+ <li>The <code>:active</code> pseudo-class applies while an element
+ is being activated by the user. For example, between the times the
+ user presses the mouse button and releases it.</li>
+
+ <li>The <code>:focus</code> pseudo-class applies while an element
+ has the focus (accepts keyboard or mouse events, or other forms of
+ input). </li>
+
+</ul>
+
+<p>There may be document language or implementation specific limits on
+which elements can become <code>:active</code> or acquire
+<code>:focus</code>.</p>
+
+<p>These pseudo-classes are not mutually exclusive. An element may
+match several pseudo-classes at the same time.</p>
+
+<p>Selectors doesn't define if the parent of an element that is
+':active' or ':hover' is also in that state.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <pre>a:link /* unvisited links */
+a:visited /* visited links */
+a:hover /* user hovers */
+a:active /* active links */</pre>
+ <p>An example of combining dynamic pseudo-classes:</p>
+ <pre>a:focus
+a:focus:hover</pre>
+ <p>The last selector matches <code>a</code> elements that are in
+ the pseudo-class :focus and in the pseudo-class :hover.</p>
+</div>
+
+<p class="note"><strong>Note:</strong> An element can be both ':visited'
+and ':active' (or ':link' and ':active').</p>
+
+<h4><a name=target-pseudo>6.6.2. The target pseudo-class :target</a></h4>
+
+<p>Some URIs refer to a location within a resource. This kind of URI
+ends with a &quot;number sign&quot; (#) followed by an anchor
+identifier (called the fragment identifier).</p>
+
+<p>URIs with fragment identifiers link to a certain element within the
+document, known as the target element. For instance, here is a URI
+pointing to an anchor named <code>section_2</code> in an HTML
+document:</p>
+
+<pre>http://example.com/html/top.html#section_2</pre>
+
+<p>A target element can be represented by the <code>:target</code>
+pseudo-class. If the document's URI has no fragment identifier, then
+the document has no target element.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <pre>p.note:target</pre>
+ <p>This selector represents a <code>p</code> element of class
+ <code>note</code> that is the target element of the referring
+ URI.</p>
+</div>
+
+<div class="example">
+ <p>CSS example:</p>
+ <p>Here, the <code>:target</code> pseudo-class is used to make the
+ target element red and place an image before it, if there is one:</p>
+ <pre>*:target { color : red }
+*:target::before { content : url(target.png) }</pre>
+</div>
+
+<h4><a name=lang-pseudo>6.6.3. The language pseudo-class :lang</a></h4>
+
+<p>If the document language specifies how the human language of an
+element is determined, it is possible to write selectors that
+represent an element based on its language. For example, in HTML <a
+href="#refsHTML4">[HTML4]</a>, the language is determined by a
+combination of the <code>lang</code> attribute, the <code>meta</code>
+element, and possibly by information from the protocol (such as HTTP
+headers). XML uses an attribute called <code>xml:lang</code>, and
+there may be other document language-specific methods for determining
+the language.</p>
+
+<p>The pseudo-class <code>:lang(C)</code> represents an element that
+is in language C. Whether an element is represented by a
+<code>:lang()</code> selector is based solely on the identifier C
+being either equal to, or a hyphen-separated substring of, the
+element's language value, in the same way as if performed by the <a
+href="#attribute-representation">'|='</a> operator in attribute
+selectors. The identifier C does not have to be a valid language
+name.</p>
+
+<p>C must not be empty. (If it is, the selector is invalid.)</p>
+
+<p class="note"><strong>Note:</strong> It is recommended that
+documents and protocols indicate language using codes from RFC 3066 <a
+href="#refsRFC3066">[RFC3066]</a> or its successor, and by means of
+"xml:lang" attributes in the case of XML-based documents <a
+href="#refsXML10">[XML10]</a>. See <a
+href="http://www.w3.org/International/questions/qa-lang-2or3.html">
+"FAQ: Two-letter or three-letter language codes."</a></p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The two following selectors represent an HTML document that is in
+ Belgian, French, or German. The two next selectors represent
+ <code>q</code> quotations in an arbitrary element in Belgian, French,
+ or German.</p>
+ <pre>html:lang(fr-be)
+html:lang(de)
+:lang(fr-be) &gt; q
+:lang(de) &gt; q</pre>
+</div>
+
+<h4><a name=UIstates>6.6.4. The UI element states pseudo-classes</a></h4>
+
+<h5><a name=enableddisabled>The :enabled and :disabled pseudo-classes</a></h5>
+
+<p>The <code>:enabled</code> pseudo-class allows authors to customize
+the look of user interface elements that are enabled &mdash; which the
+user can select or activate in some fashion (e.g. clicking on a button
+with a mouse). There is a need for such a pseudo-class because there
+is no way to programmatically specify the default appearance of say,
+an enabled <code>input</code> element without also specifying what it
+would look like when it was disabled.</p>
+
+<p>Similar to <code>:enabled</code>, <code>:disabled</code> allows the
+author to specify precisely how a disabled or inactive user interface
+element should look.</p>
+
+<p>Most elements will be neither enabled nor disabled. An element is
+enabled if the user can either activate it or transfer the focus to
+it. An element is disabled if it could be enabled, but the user cannot
+presently activate it or transfer focus to it.</p>
+
+
+<h5><a name=checked>The :checked pseudo-class</a></h5>
+
+<p>Radio and checkbox elements can be toggled by the user. Some menu
+items are "checked" when the user selects them. When such elements are
+toggled "on" the <code>:checked</code> pseudo-class applies. The
+<code>:checked</code> pseudo-class initially applies to such elements
+that have the HTML4 <code>selected</code> and <code>checked</code>
+attributes as described in <a
+href="http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.2.1">Section
+17.2.1 of HTML4</a>, but of course the user can toggle "off" such
+elements in which case the <code>:checked</code> pseudo-class would no
+longer apply. While the <code>:checked</code> pseudo-class is dynamic
+in nature, and is altered by user action, since it can also be based
+on the presence of the semantic HTML4 <code>selected</code> and
+<code>checked</code> attributes, it applies to all media.
+
+
+<h5><a name=indeterminate>The :indeterminate pseudo-class</a></h5>
+
+<div class="note">
+
+<p>Radio and checkbox elements can be toggled by the user, but are
+sometimes in an indeterminate state, neither checked nor unchecked.
+This can be due to an element attribute, or DOM manipulation.</p>
+
+<p>A future version of this specification may introduce an
+<code>:indeterminate</code> pseudo-class that applies to such elements.
+<!--While the <code>:indeterminate</code> pseudo-class is dynamic in
+nature, and is altered by user action, since it can also be based on
+the presence of an element attribute, it applies to all media.</p>
+
+<p>Components of a radio-group initialized with no pre-selected choice
+are an example of :indeterminate state.--></p>
+
+</div>
+
+
+<h4><a name=structural-pseudos>6.6.5. Structural pseudo-classes</a></h4>
+
+<p>Selectors introduces the concept of <dfn>structural
+pseudo-classes</dfn> to permit selection based on extra information that lies in
+the document tree but cannot be represented by other simple selectors or
+combinators.
+
+<p>Note that standalone pieces of PCDATA (text nodes in the DOM) are
+not counted when calculating the position of an element in the list of
+children of its parent. When calculating the position of an element in
+the list of children of its parent, the index numbering starts at 1.
+
+
+<h5><a name=root-pseudo>:root pseudo-class</a></h5>
+
+<p>The <code>:root</code> pseudo-class represents an element that is
+the root of the document. In HTML 4, this is always the
+<code>HTML</code> element.
+
+
+<h5><a name=nth-child-pseudo>:nth-child() pseudo-class</a></h5>
+
+<p>The
+<code>:nth-child(<var>a</var><code>n</code>+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings
+<strong>before</strong> it in the document tree, for a given positive
+integer or zero value of <code>n</code>, and has a parent element. In
+other words, this matches the <var>b</var>th child of an element after
+all the children have been split into groups of <var>a</var> elements
+each. For example, this allows the selectors to address every other
+row in a table, and could be used to alternate the color
+of paragraph text in a cycle of four. The <var>a</var> and
+<var>b</var> values must be zero, negative integers or positive
+integers. The index of the first child of an element is 1.
+
+<p>In addition to this, <code>:nth-child()</code> can take
+'<code>odd</code>' and '<code>even</code>' as arguments instead.
+'<code>odd</code>' has the same signification as <code>2n+1</code>,
+and '<code>even</code>' has the same signification as <code>2n</code>.
+
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-child(2n+1) /* represents every odd row of an HTML table */
+tr:nth-child(odd) /* same */
+tr:nth-child(2n) /* represents every even row of an HTML table */
+tr:nth-child(even) /* same */
+
+/* Alternate paragraph colours in CSS */
+p:nth-child(4n+1) { color: navy; }
+p:nth-child(4n+2) { color: green; }
+p:nth-child(4n+3) { color: maroon; }
+p:nth-child(4n+4) { color: purple; }</pre>
+</div>
+
+<p>When <var>a</var>=0, no repeating is used, so for example
+<code>:nth-child(0n+5)</code> matches only the fifth child. When
+<var>a</var>=0, the <var>a</var><code>n</code> part need not be
+included, so the syntax simplifies to
+<code>:nth-child(<var>b</var>)</code> and the last example simplifies
+to <code>:nth-child(5)</code>.
+
+<div class="example">
+<p>Examples:</p>
+<pre>foo:nth-child(0n+1) /* represents an element foo, first child of its parent element */
+foo:nth-child(1) /* same */</pre>
+</div>
+
+<p>When <var>a</var>=1, the number may be omitted from the rule.
+
+<div class="example">
+<p>Examples:</p>
+<p>The following selectors are therefore equivalent:</p>
+<pre>bar:nth-child(1n+0) /* represents all bar elements, specificity (0,1,1) */
+bar:nth-child(n+0) /* same */
+bar:nth-child(n) /* same */
+bar /* same but lower specificity (0,0,1) */</pre>
+</div>
+
+<p>If <var>b</var>=0, then every <var>a</var>th element is picked. In
+such a case, the <var>b</var> part may be omitted.
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-child(2n+0) /* represents every even row of an HTML table */
+tr:nth-child(2n) /* same */</pre>
+</div>
+
+<p>If both <var>a</var> and <var>b</var> are equal to zero, the
+pseudo-class represents no element in the document tree.</p>
+
+<p>The value <var>a</var> can be negative, but only the positive
+values of <var>a</var><code>n</code>+<var>b</var>, for
+<code>n</code>&ge;0, may represent an element in the document
+tree.</p>
+
+<div class="example">
+<p>Example:</p>
+<pre>html|tr:nth-child(-n+6) /* represents the 6 first rows of XHTML tables */</pre>
+</div>
+
+<p>When the value <var>b</var> is negative, the "+" character in the
+expression must be removed (it is effectively replaced by the "-"
+character indicating the negative value of <var>b</var>).</p>
+
+<div class="example">
+<p>Examples:</p>
+<pre>:nth-child(10n-1) /* represents the 9th, 19th, 29th, etc, element */
+:nth-child(10n+9) /* Same */
+:nth-child(10n+-1) /* Syntactically invalid, and would be ignored */</pre>
+</div>
+
+
+<h5><a name=nth-last-child-pseudo>:nth-last-child() pseudo-class</a></h5>
+
+<p>The <code>:nth-last-child(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings
+<strong>after</strong> it in the document tree, for a given positive
+integer or zero value of <code>n</code>, and has a parent element. See
+<code>:nth-child()</code> pseudo-class for the syntax of its argument.
+It also accepts the '<code>even</code>' and '<code>odd</code>' values
+as arguments.
+
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-last-child(-n+2) /* represents the two last rows of an HTML table */
+
+foo:nth-last-child(odd) /* represents all odd foo elements in their parent element,
+ counting from the last one */</pre>
+</div>
+
+
+<h5><a name=nth-of-type-pseudo>:nth-of-type() pseudo-class</a></h5>
+
+<p>The <code>:nth-of-type(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings with the same
+element name <strong>before</strong> it in the document tree, for a
+given zero or positive integer value of <code>n</code>, and has a
+parent element. In other words, this matches the <var>b</var>th child
+of that type after all the children of that type have been split into
+groups of a elements each. See <code>:nth-child()</code> pseudo-class
+for the syntax of its argument. It also accepts the
+'<code>even</code>' and '<code>odd</code>' values.
+
+
+<div class="example">
+<p>CSS example:</p>
+<p>This allows an author to alternate the position of floated images:</p>
+<pre>img:nth-of-type(2n+1) { float: right; }
+img:nth-of-type(2n) { float: left; }</pre>
+</div>
+
+
+<h5><a name=nth-last-of-type-pseudo>:nth-last-of-type() pseudo-class</a></h5>
+
+<p>The <code>:nth-last-of-type(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings with the same
+element name <strong>after</strong> it in the document tree, for a
+given zero or positive integer value of <code>n</code>, and has a
+parent element. See <code>:nth-child()</code> pseudo-class for the
+syntax of its argument. It also accepts the '<code>even</code>' and '<code>odd</code>' values.
+
+
+<div class="example">
+ <p>Example:</p>
+ <p>To represent all <code>h2</code> children of an XHTML
+ <code>body</code> except the first and last, one could use the
+ following selector:</p>
+ <pre>body &gt; h2:nth-of-type(n+2):nth-last-of-type(n+2)</pre>
+ <p>In this case, one could also use <code>:not()</code>, although the
+ selector ends up being just as long:</p>
+ <pre>body &gt; h2:not(:first-of-type):not(:last-of-type)</pre>
+</div>
+
+
+<h5><a name=first-child-pseudo>:first-child pseudo-class</a></h5>
+
+<p>Same as <code>:nth-child(1)</code>. The <code>:first-child</code> pseudo-class
+represents an element that is the first child of some other element.
+
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element that is
+ the first child of a <code>div</code> element:</p>
+ <pre>div &gt; p:first-child</pre>
+ <p>This selector can represent the <code>p</code> inside the
+ <code>div</code> of the following fragment:</p>
+ <pre>&lt;p&gt; The last P before the note.&lt;/p&gt;
+&lt;div class="note"&gt;
+ &lt;p&gt; The first P inside the note.&lt;/p&gt;
+&lt;/div&gt;</pre>but cannot represent the second <code>p</code> in the following
+fragment:
+ <pre>&lt;p&gt; The last P before the note.&lt;/p&gt;
+&lt;div class="note"&gt;
+ &lt;h2&gt; Note &lt;/h2&gt;
+ &lt;p&gt; The first P inside the note.&lt;/p&gt;
+&lt;/div&gt;</pre>
+ <p>The following two selectors are usually equivalent:</p>
+ <pre>* &gt; a:first-child /* a is first child of any element */
+a:first-child /* Same (assuming a is not the root element) */</pre>
+</div>
+
+<h5><a name=last-child-pseudo>:last-child pseudo-class</a></h5>
+
+<p>Same as <code>:nth-last-child(1)</code>. The <code>:last-child</code> pseudo-class
+represents an element that is the last child of some other element.
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents a list item <code>li</code> that
+ is the last child of an ordered list <code>ol</code>.
+ <pre>ol &gt; li:last-child</pre>
+</div>
+
+<h5><a name=first-of-type-pseudo>:first-of-type pseudo-class</a></h5>
+
+<p>Same as <code>:nth-of-type(1)</code>. The <code>:first-of-type</code> pseudo-class
+represents an element that is the first sibling of its type in the list of
+children of its parent element.
+
+<div class="example">
+<p>Example:</p>
+<p>The following selector represents a definition title
+<code>dt</code> inside a definition list <code>dl</code>, this
+<code>dt</code> being the first of its type in the list of children of
+its parent element.</p>
+<pre>dl dt:first-of-type</pre>
+<p>It is a valid description for the first two <code>dt</code>
+elements in the following example but not for the third one:</p>
+<pre>&lt;dl&gt;
+ &lt;dt&gt;gigogne&lt;/dt&gt;
+ &lt;dd&gt;
+ &lt;dl&gt;
+ &lt;dt&gt;fus&eacute;e&lt;/dt&gt;
+ &lt;dd&gt;multistage rocket&lt;/dd&gt;
+ &lt;dt&gt;table&lt;/dt&gt;
+ &lt;dd&gt;nest of tables&lt;/dd&gt;
+ &lt;/dl&gt;
+ &lt;/dd&gt;
+&lt;/dl&gt;</pre>
+</div>
+
+<h5><a name=last-of-type-pseudo>:last-of-type pseudo-class</a></h5>
+
+<p>Same as <code>:nth-last-of-type(1)</code>. The
+<code>:last-of-type</code> pseudo-class represents an element that is
+the last sibling of its type in the list of children of its parent
+element.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents the last data cell
+ <code>td</code> of a table row.</p>
+ <pre>tr &gt; td:last-of-type</pre>
+</div>
+
+<h5><a name=only-child-pseudo>:only-child pseudo-class</a></h5>
+
+<p>Represents an element that has a parent element and whose parent
+element has no other element children. Same as
+<code>:first-child:last-child</code> or
+<code>:nth-child(1):nth-last-child(1)</code>, but with a lower
+specificity.</p>
+
+<h5><a name=only-of-type-pseudo>:only-of-type pseudo-class</a></h5>
+
+<p>Represents an element that has a parent element and whose parent
+element has no other element children with the same element name. Same
+as <code>:first-of-type:last-of-type</code> or
+<code>:nth-of-type(1):nth-last-of-type(1)</code>, but with a lower
+specificity.</p>
+
+
+<h5><a name=empty-pseudo></a>:empty pseudo-class</h5>
+
+<p>The <code>:empty</code> pseudo-class represents an element that has
+no children at all. In terms of the DOM, only element nodes and text
+nodes (including CDATA nodes and entity references) whose data has a
+non-zero length must be considered as affecting emptiness; comments,
+PIs, and other nodes must not affect whether an element is considered
+empty or not.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p><code>p:empty</code> is a valid representation of the following fragment:</p>
+ <pre>&lt;p&gt;&lt;/p&gt;</pre>
+ <p><code>foo:empty</code> is not a valid representation for the
+ following fragments:</p>
+ <pre>&lt;foo&gt;bar&lt;/foo&gt;</pre>
+ <pre>&lt;foo&gt;&lt;bar&gt;bla&lt;/bar&gt;&lt;/foo&gt;</pre>
+ <pre>&lt;foo&gt;this is not &lt;bar&gt;:empty&lt;/bar&gt;&lt;/foo&gt;</pre>
+</div>
+
+<h4><a name=content-selectors>6.6.6. Blank</a></h4> <!-- It's the Return of Appendix H!!! Run away! -->
+
+<p>This section intentionally left blank.</p>
+<!-- (used to be :contains()) -->
+
+<h4><a name=negation></a>6.6.7. The negation pseudo-class</h4>
+
+<p>The negation pseudo-class, <code>:not(<var>X</var>)</code>, is a
+functional notation taking a <a href="#simple-selectors-dfn">simple
+selector</a> (excluding the negation pseudo-class itself and
+pseudo-elements) as an argument. It represents an element that is not
+represented by the argument.
+
+<!-- pseudo-elements are not simple selectors, so the above paragraph
+may be a bit confusing -->
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following CSS selector matches all <code>button</code>
+ elements in an HTML document that are not disabled.</p>
+ <pre>button:not([DISABLED])</pre>
+ <p>The following selector represents all but <code>FOO</code>
+ elements.</p>
+ <pre>*:not(FOO)</pre>
+ <p>The following group of selectors represents all HTML elements
+ except links.</p>
+ <pre>html|*:not(:link):not(:visited)</pre>
+</div>
+
+<p>Default namespace declarations do not affect the argument of the
+negation pseudo-class unless the argument is a universal selector or a
+type selector.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>Assuming that the default namespace is bound to
+ "http://example.com/", the following selector represents all
+ elements that are not in that namespace:</p>
+ <pre>*|*:not(*)</pre>
+ <p>The following CSS selector matches any element being hovered,
+ regardless of its namespace. In particular, it is not limited to
+ only matching elements in the default namespace that are not being
+ hovered, and elements not in the default namespace don't match the
+ rule when they <em>are</em> being hovered.</p>
+ <pre>*|*:not(:hover)</pre>
+</div>
+
+<p class="note"><strong>Note</strong>: the :not() pseudo allows
+useless selectors to be written. For instance <code>:not(*|*)</code>,
+which represents no element at all, or <code>foo:not(bar)</code>,
+which is equivalent to <code>foo</code> but with a higher
+specificity.</p>
+
+<h3><a name=pseudo-elements>7. Pseudo-elements</a></h3>
+
+<p>Pseudo-elements create abstractions about the document tree beyond
+those specified by the document language. For instance, document
+languages do not offer mechanisms to access the first letter or first
+line of an element's content. Pseudo-elements allow designers to refer
+to this otherwise inaccessible information. Pseudo-elements may also
+provide designers a way to refer to content that does not exist in the
+source document (e.g., the <code>::before</code> and
+<code>::after</code> pseudo-elements give access to generated
+content).</p>
+
+<p>A pseudo-element is made of two colons (<code>::</code>) followed
+by the name of the pseudo-element.</p>
+
+<p>This <code>::</code> notation is introduced by the current document
+in order to establish a discrimination between pseudo-classes and
+pseudo-elements. For compatibility with existing style sheets, user
+agents must also accept the previous one-colon notation for
+pseudo-elements introduced in CSS levels 1 and 2 (namely,
+<code>:first-line</code>, <code>:first-letter</code>,
+<code>:before</code> and <code>:after</code>). This compatibility is
+not allowed for the new pseudo-elements introduced in CSS level 3.</p>
+
+<p>Only one pseudo-element may appear per selector, and if present it
+must appear after the sequence of simple selectors that represents the
+<a href="#subject">subjects</a> of the selector. <span class="note">A
+future version of this specification may allow multiple
+pesudo-elements per selector.</span></p>
+
+<h4><a name=first-line>7.1. The ::first-line pseudo-element</a></h4>
+
+<p>The <code>::first-line</code> pseudo-element describes the contents
+of the first formatted line of an element.
+
+<div class="example">
+<p>CSS example:</p>
+<pre>p::first-line { text-transform: uppercase }</pre>
+<p>The above rule means "change the letters of the first line of every
+paragraph to uppercase".</p>
+</div>
+
+<p>The selector <code>p::first-line</code> does not match any real
+HTML element. It does match a pseudo-element that conforming user
+agents will insert at the beginning of every paragraph.</p>
+
+<p>Note that the length of the first line depends on a number of
+factors, including the width of the page, the font size, etc. Thus,
+an ordinary HTML paragraph such as:</p>
+
+<pre>
+&lt;P&gt;This is a somewhat long HTML
+paragraph that will be broken into several
+lines. The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>the lines of which happen to be broken as follows:
+
+<pre>
+THIS IS A SOMEWHAT LONG HTML PARAGRAPH THAT
+will be broken into several lines. The first
+line will be identified by a fictional tag
+sequence. The other lines will be treated as
+ordinary lines in the paragraph.
+</pre>
+
+<p>This paragraph might be "rewritten" by user agents to include the
+<em>fictional tag sequence</em> for <code>::first-line</code>. This
+fictional tag sequence helps to show how properties are inherited.</p>
+
+<pre>
+&lt;P&gt;<b>&lt;P::first-line&gt;</b> This is a somewhat long HTML
+paragraph that <b>&lt;/P::first-line&gt;</b> will be broken into several
+lines. The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>If a pseudo-element breaks up a real element, the desired effect
+can often be described by a fictional tag sequence that closes and
+then re-opens the element. Thus, if we mark up the previous paragraph
+with a <code>span</code> element:</p>
+
+<pre>
+&lt;P&gt;<b>&lt;SPAN class="test"&gt;</b> This is a somewhat long HTML
+paragraph that will be broken into several
+lines.<b>&lt;/SPAN&gt;</b> The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>the user agent could simulate start and end tags for
+<code>span</code> when inserting the fictional tag sequence for
+<code>::first-line</code>.
+
+<pre>
+&lt;P&gt;&lt;P::first-line&gt;<b>&lt;SPAN class="test"&gt;</b> This is a
+somewhat long HTML
+paragraph that will <b>&lt;/SPAN&gt;</b>&lt;/P::first-line&gt;<b>&lt;SPAN class="test"&gt;</b> be
+broken into several
+lines.<b>&lt;/SPAN&gt;</b> The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>In CSS, the <code>::first-line</code> pseudo-element can only be
+attached to a block-level element, an inline-block, a table-caption,
+or a table-cell.</p>
+
+<p><a name="first-formatted-line"></a>The "first formatted line" of an
+element may occur inside a
+block-level descendant in the same flow (i.e., a block-level
+descendant that is not positioned and not a float). E.g., the first
+line of the <code>div</code> in <code>&lt;DIV>&lt;P>This
+line...&lt;/P>&lt/DIV></code> is the first line of the <code>p</code> (assuming
+that both <code>p</code> and <code>div</code> are block-level).
+
+<p>The first line of a table-cell or inline-block cannot be the first
+formatted line of an ancestor element. Thus, in <code>&lt;DIV&gt;&lt;P
+STYLE="display: inline-block">Hello&lt;BR&gt;Goodbye&lt;/P&gt;
+etcetera&lt;/DIV&gt;</code> the first formatted line of the
+<code>div</code> is not the line "Hello".
+
+<p class="note">Note that the first line of the <code>p</code> in this
+fragment: <code>&lt;p&gt&lt;br&gt;First...</code> doesn't contain any
+letters (assuming the default style for <code>br</code> in HTML
+4). The word "First" is not on the first formatted line.
+
+<p>A UA should act as if the fictional start tags of the
+<code>::first-line</code> pseudo-elements were nested just inside the
+innermost enclosing block-level element. (Since CSS1 and CSS2 were
+silent on this case, authors should not rely on this behavior.) Here
+is an example. The fictional tag sequence for</p>
+
+<pre>
+&lt;DIV>
+ &lt;P>First paragraph&lt;/P>
+ &lt;P>Second paragraph&lt;/P>
+&lt;/DIV>
+</pre>
+
+<p>is</p>
+
+<pre>
+&lt;DIV>
+ &lt;P>&lt;DIV::first-line>&lt;P::first-line>First paragraph&lt;/P::first-line>&lt;/DIV::first-line>&lt;/P>
+ &lt;P>&lt;P::first-line>Second paragraph&lt;/P::first-line>&lt;/P>
+&lt;/DIV>
+</pre>
+
+<p>The <code>::first-line</code> pseudo-element is similar to an
+inline-level element, but with certain restrictions. In CSS, the
+following properties apply to a <code>::first-line</code>
+pseudo-element: font properties, color property, background
+properties, 'word-spacing', 'letter-spacing', 'text-decoration',
+'vertical-align', 'text-transform', 'line-height'. UAs may apply other
+properties as well.</p>
+
+
+<h4><a name=first-letter>7.2. The ::first-letter pseudo-element</a></h4>
+
+<p>The <code>::first-letter</code> pseudo-element represents the first
+letter of the first line of a block, if it is not preceded by any
+other content (such as images or inline tables) on its line. The
+::first-letter pseudo-element may be used for "initial caps" and "drop
+caps", which are common typographical effects. This type of initial
+letter is similar to an inline-level element if its 'float' property
+is 'none'; otherwise, it is similar to a floated element.</p>
+
+<p>In CSS, these are the properties that apply to <code>::first-letter</code>
+pseudo-elements: font properties, 'text-decoration', 'text-transform',
+'letter-spacing', 'word-spacing' (when appropriate), 'line-height',
+'float', 'vertical-align' (only if 'float' is 'none'), margin
+properties, padding properties, border properties, color property,
+background properties. UAs may apply other properties as well. To
+allow UAs to render a typographically correct drop cap or initial cap,
+the UA may choose a line-height, width and height based on the shape
+of the letter, unlike for normal elements.</p>
+
+<div class="example">
+<p>Example:</p>
+<p>This example shows a possible rendering of an initial cap. Note
+that the 'line-height' that is inherited by the <code>::first-letter</code>
+pseudo-element is 1.1, but the UA in this example has computed the
+height of the first letter differently, so that it doesn't cause any
+unnecessary space between the first two lines. Also note that the
+fictional start tag of the first letter is inside the <span>span</span>, and thus
+the font weight of the first letter is normal, not bold as the <span>span</span>:
+<pre>
+p { line-height: 1.1 }
+p::first-letter { font-size: 3em; font-weight: normal }
+span { font-weight: bold }
+...
+&lt;p>&lt;span>Het hemelsche&lt;/span> gerecht heeft zich ten lange lesten&lt;br>
+Erbarremt over my en mijn benaeuwde vesten&lt;br>
+En arme burgery, en op mijn volcx gebed&lt;br>
+En dagelix geschrey de bange stad ontzet.
+</pre>
+<div class="figure">
+<p><img src="initial-cap.png" alt="Image illustrating the ::first-letter pseudo-element">
+</div>
+</div>
+
+<div class="example">
+<p>The following CSS will make a drop cap initial letter span about two lines:</p>
+
+<pre>
+&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"&gt;
+&lt;HTML&gt;
+ &lt;HEAD&gt;
+ &lt;TITLE&gt;Drop cap initial letter&lt;/TITLE&gt;
+ &lt;STYLE type="text/css"&gt;
+ P { font-size: 12pt; line-height: 1.2 }
+ P::first-letter { font-size: 200%; font-weight: bold; float: left }
+ SPAN { text-transform: uppercase }
+ &lt;/STYLE&gt;
+ &lt;/HEAD&gt;
+ &lt;BODY&gt;
+ &lt;P&gt;&lt;SPAN&gt;The first&lt;/SPAN&gt; few words of an article
+ in The Economist.&lt;/P&gt;
+ &lt;/BODY&gt;
+&lt;/HTML&gt;
+</pre>
+
+<p>This example might be formatted as follows:</p>
+
+<div class="figure">
+<P><img src="first-letter.gif" alt="Image illustrating the combined effect of the ::first-letter and ::first-line pseudo-elements"></p>
+</div>
+
+<p>The <span class="index-inst" title="fictional tag
+sequence">fictional tag sequence</span> is:</p>
+
+<pre>
+&lt;P&gt;
+&lt;SPAN&gt;
+&lt;P::first-letter&gt;
+T
+&lt;/P::first-letter&gt;he first
+&lt;/SPAN&gt;
+few words of an article in the Economist.
+&lt;/P&gt;
+</pre>
+
+<p>Note that the <code>::first-letter</code> pseudo-element tags abut
+the content (i.e., the initial character), while the ::first-line
+pseudo-element start tag is inserted right after the start tag of the
+block element.</p> </div>
+
+<p>In order to achieve traditional drop caps formatting, user agents
+may approximate font sizes, for example to align baselines. Also, the
+glyph outline may be taken into account when formatting.</p>
+
+<p>Punctuation (i.e, characters defined in Unicode in the "open" (Ps),
+"close" (Pe), "initial" (Pi). "final" (Pf) and "other" (Po)
+punctuation classes), that precedes or follows the first letter should
+be included. <a href="#refsUNICODE">[UNICODE]</a></p>
+
+<div class="figure">
+<P><img src="first-letter2.gif" alt="Quotes that precede the
+first letter should be included."></p>
+</div>
+
+<p>The <code>::first-letter</code> also applies if the first letter is
+in fact a digit, e.g., the "6" in "67 million dollars is a lot of
+money."</p>
+
+<p>In CSS, the <code>::first-letter</code> pseudo-element applies to
+block, list-item, table-cell, table-caption, and inline-block
+elements. <span class="note">A future version of this specification
+may allow this pesudo-element to apply to more element
+types.</span></p>
+
+<p>The <code>::first-letter</code> pseudo-element can be used with all
+such elements that contain text, or that have a descendant in the same
+flow that contains text. A UA should act as if the fictional start tag
+of the ::first-letter pseudo-element is just before the first text of
+the element, even if that first text is in a descendant.</p>
+
+<div class="example">
+<p>Example:</p>
+<p>The fictional tag sequence for this HTMLfragment:
+<pre>&lt;div>
+&lt;p>The first text.</pre>
+<p>is:
+<pre>&lt;div>
+&lt;p>&lt;div::first-letter>&lt;p::first-letter>T&lt;/...>&lt;/...>he first text.</pre>
+</div>
+
+<p>The first letter of a table-cell or inline-block cannot be the
+first letter of an ancestor element. Thus, in <code>&lt;DIV&gt;&lt;P
+STYLE="display: inline-block">Hello&lt;BR&gt;Goodbye&lt;/P&gt;
+etcetera&lt;/DIV&gt;</code> the first letter of the <code>div</code> is not the
+letter "H". In fact, the <code>div</code> doesn't have a first letter.
+
+<p>The first letter must occur on the <a
+href="#first-formatted-line">first formatted line.</a> For example, in
+this fragment: <code>&lt;p&gt&lt;br&gt;First...</code> the first line
+doesn't contain any letters and <code>::first-letter</code> doesn't
+match anything (assuming the default style for <code>br</code> in HTML
+4). In particular, it does not match the "F" of "First."
+
+<p>In CSS, if an element is a list item ('display: list-item'), the
+<code>::first-letter</code> applies to the first letter in the
+principal box after the marker. UAs may ignore
+<code>::first-letter</code> on list items with 'list-style-position:
+inside'. If an element has <code>::before</code> or
+<code>::after</code> content, the <code>::first-letter</code> applies
+to the first letter of the element <em>including</em> that content.
+
+<div class="example">
+<p>Example:</p>
+<p>After the rule 'p::before {content: "Note: "}', the selector
+'p::first-letter' matches the "N" of "Note".</p>
+</div>
+
+<p>Some languages may have specific rules about how to treat certain
+letter combinations. In Dutch, for example, if the letter combination
+"ij" appears at the beginning of a word, both letters should be
+considered within the <code>::first-letter</code> pseudo-element.
+
+<p>If the letters that would form the ::first-letter are not in the
+same element, such as "'T" in <code>&lt;p>'&lt;em>T...</code>, the UA
+may create a ::first-letter pseudo-element from one of the elements,
+both elements, or simply not create a pseudo-element.</p>
+
+<p>Similarly, if the first letter(s) of the block are not at the start
+of the line (for example due to bidirectional reordering), then the UA
+need not create the pseudo-element(s).
+
+<div class="example">
+<p>Example:</p>
+<p><a name="overlapping-example">The following example</a> illustrates
+how overlapping pseudo-elements may interact. The first letter of
+each P element will be green with a font size of '24pt'. The rest of
+the first formatted line will be 'blue' while the rest of the
+paragraph will be 'red'.</p>
+
+<pre>p { color: red; font-size: 12pt }
+p::first-letter { color: green; font-size: 200% }
+p::first-line { color: blue }
+
+&lt;P&gt;Some text that ends up on two lines&lt;/P&gt;</pre>
+
+<p>Assuming that a line break will occur before the word "ends", the
+<span class="index-inst" title="fictional tag sequence">fictional tag
+sequence</span> for this fragment might be:</p>
+
+<pre>&lt;P&gt;
+&lt;P::first-line&gt;
+&lt;P::first-letter&gt;
+S
+&lt;/P::first-letter&gt;ome text that
+&lt;/P::first-line&gt;
+ends up on two lines
+&lt;/P&gt;</pre>
+
+<p>Note that the <code>::first-letter</code> element is inside the <code>::first-line</code>
+element. Properties set on <code>::first-line</code> are inherited by
+<code>::first-letter</code>, but are overridden if the same property is set on
+<code>::first-letter</code>.</p>
+</div>
+
+
+<h4><a name=UIfragments>7.3.</a> <a name=selection>The ::selection pseudo-element</a></h4>
+
+<p>The <code>::selection</code> pseudo-element applies to the portion
+of a document that has been highlighted by the user. This also
+applies, for example, to selected text within an editable text
+field. This pseudo-element should not be confused with the <code><a
+href="#checked">:checked</a></code> pseudo-class (which used to be
+named <code>:selected</code>)
+
+<p>Although the <code>::selection</code> pseudo-element is dynamic in
+nature, and is altered by user action, it is reasonable to expect that
+when a UA re-renders to a static medium (such as a printed page, see
+<a href="#refsCSS21">[CSS21]</a>) which was originally rendered to a
+dynamic medium (like screen), the UA may wish to transfer the current
+<code>::selection</code> state to that other medium, and have all the
+appropriate formatting and rendering take effect as well. This is not
+required &mdash; UAs may omit the <code>::selection</code>
+pseudo-element for static media.
+
+<p>These are the CSS properties that apply to <code>::selection</code>
+pseudo-elements: color, background, cursor (optional), outline
+(optional). The computed value of the 'background-image' property on
+<code>::selection</code> may be ignored.
+
+
+<h4><a name=gen-content>7.4. The ::before and ::after pseudo-elements</a></h4>
+
+<p>The <code>::before</code> and <code>::after</code> pseudo-elements
+can be used to describe generated content before or after an element's
+content. They are explained in CSS 2.1 <a
+href="#refsCSS21">[CSS21]</a>.</p>
+
+<p>When the <code>::first-letter</code> and <code>::first-line</code>
+pseudo-elements are combined with <code>::before</code> and
+<code>::after</code>, they apply to the first letter or line of the
+element including the inserted text.</p>
+
+<h2><a name=combinators>8. Combinators</a></h2>
+
+<h3><a name=descendant-combinators>8.1. Descendant combinator</a></h3>
+
+<p>At times, authors may want selectors to describe an element that is
+the descendant of another element in the document tree (e.g., "an
+<code>EM</code> element that is contained within an <code>H1</code>
+element"). Descendant combinators express such a relationship. A
+descendant combinator is <a href="#whitespace">white space</a> that
+separates two sequences of simple selectors. A selector of the form
+"<code>A B</code>" represents an element <code>B</code> that is an
+arbitrary descendant of some ancestor element <code>A</code>.
+
+<div class="example">
+ <p>Examples:</p>
+ <p>For example, consider the following selector:</p>
+ <pre>h1 em</pre>
+ <p>It represents an <code>em</code> element being the descendant of
+ an <code>h1</code> element. It is a correct and valid, but partial,
+ description of the following fragment:</p>
+ <pre>&lt;h1&gt;This &lt;span class="myclass"&gt;headline
+is &lt;em&gt;very&lt;/em&gt; important&lt;/span&gt;&lt;/h1&gt;</pre>
+ <p>The following selector:</p>
+ <pre>div * p</pre>
+ <p>represents a <code>p</code> element that is a grandchild or later
+ descendant of a <code>div</code> element. Note the whitespace on
+ either side of the "*" is not part of the universal selector; the
+ whitespace is a combinator indicating that the DIV must be the
+ ancestor of some element, and that that element must be an ancestor
+ of the P.</p>
+ <p>The following selector, which combines descendant combinators and
+ <a href="#attribute-selectors">attribute selectors</a>, represents an
+ element that (1) has the <code>href</code> attribute set and (2) is
+ inside a <code>p</code> that is itself inside a <code>div</code>:</p>
+ <pre>div p *[href]</pre>
+</div>
+
+<h3><a name=child-combinators>8.2. Child combinators</a></h3>
+
+<p>A <dfn>child combinator</dfn> describes a childhood relationship
+between two elements. A child combinator is made of the
+&quot;greater-than sign&quot; (<code>&gt;</code>) character and
+separates two sequences of simple selectors.
+
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element that is
+ child of <code>body</code>:</p>
+ <pre>body &gt; p</pre>
+ <p>The following example combines descendant combinators and child
+ combinators.</p>
+ <pre>div ol&gt;li p</pre><!-- LEAVE THOSE SPACES OUT! see below -->
+ <p>It represents a <code>p</code> element that is a descendant of an
+ <code>li</code> element; the <code>li</code> element must be the
+ child of an <code>ol</code> element; the <code>ol</code> element must
+ be a descendant of a <code>div</code>. Notice that the optional white
+ space around the "&gt;" combinator has been left out.</p>
+</div>
+
+<p>For information on selecting the first child of an element, please
+see the section on the <code><a
+href="#structural-pseudos">:first-child</a></code> pseudo-class
+above.</p>
+
+<h3><a name=sibling-combinators>8.3. Sibling combinators</a></h3>
+
+<p>There are two different sibling combinators: the adjacent sibling
+combinator and the general sibling combinator. In both cases,
+non-element nodes (e.g. text between elements) are ignored when
+considering adjacency of elements.</p>
+
+<h4><a name=adjacent-sibling-combinators>8.3.1. Adjacent sibling combinator</a></h4>
+
+<p>The adjacent sibling combinator is made of the &quot;plus
+sign&quot; (U+002B, <code>+</code>) character that separates two
+sequences of simple selectors. The elements represented by the two
+sequences share the same parent in the document tree and the element
+represented by the first sequence immediately precedes the element
+represented by the second one.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element
+ immediately following a <code>math</code> element:</p>
+ <pre>math + p</pre>
+ <p>The following selector is conceptually similar to the one in the
+ previous example, except that it adds an attribute selector &mdash; it
+ adds a constraint to the <code>h1</code> element, that it must have
+ <code>class="opener"</code>:</p>
+ <pre>h1.opener + h2</pre>
+</div>
+
+
+<h4><a name=general-sibling-combinators>8.3.2. General sibling combinator</a></h4>
+
+<p>The general sibling combinator is made of the &quot;tilde&quot;
+(U+007E, <code>~</code>) character that separates two sequences of
+simple selectors. The elements represented by the two sequences share
+the same parent in the document tree and the element represented by
+the first sequence precedes (not necessarily immediately) the element
+represented by the second one.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <pre>h1 ~ pre</pre>
+ <p>represents a <code>pre</code> element following an <code>h1</code>. It
+ is a correct and valid, but partial, description of:</p>
+ <pre>&lt;h1&gt;Definition of the function a&lt;/h1&gt;
+&lt;p&gt;Function a(x) has to be applied to all figures in the table.&lt;/p&gt;
+&lt;pre&gt;function a(x) = 12x/13.5&lt;/pre&gt;</pre>
+</div>
+
+<h2><a name=specificity>9. Calculating a selector's specificity</a></h2>
+
+<p>A selector's specificity is calculated as follows:</p>
+
+<ul>
+ <li>count the number of ID selectors in the selector (= a)</li>
+ <li>count the number of class selectors, attributes selectors, and pseudo-classes in the selector (= b)</li>
+ <li>count the number of element names in the selector (= c)</li>
+ <li>ignore pseudo-elements</li>
+</ul>
+
+<p>Selectors inside <a href="#negation">the negation pseudo-class</a>
+are counted like any other, but the negation itself does not count as
+a pseudo-class.</p>
+
+<p>Concatenating the three numbers a-b-c (in a number system with a
+large base) gives the specificity.</p>
+
+<div class="example">
+<p>Examples:</p>
+<pre>* /* a=0 b=0 c=0 -&gt; specificity = 0 */
+LI /* a=0 b=0 c=1 -&gt; specificity = 1 */
+UL LI /* a=0 b=0 c=2 -&gt; specificity = 2 */
+UL OL+LI /* a=0 b=0 c=3 -&gt; specificity = 3 */
+H1 + *[REL=up] /* a=0 b=1 c=1 -&gt; specificity = 11 */
+UL OL LI.red /* a=0 b=1 c=3 -&gt; specificity = 13 */
+LI.red.level /* a=0 b=2 c=1 -&gt; specificity = 21 */
+#x34y /* a=1 b=0 c=0 -&gt; specificity = 100 */
+#s12:not(FOO) /* a=1 b=0 c=1 -&gt; specificity = 101 */
+</pre>
+</div>
+
+<p class="note"><strong>Note:</strong> the specificity of the styles
+specified in an HTML <code>style</code> attribute is described in CSS
+2.1. <a href="#refsCSS21">[CSS21]</a>.</p>
+
+<h2><a name=w3cselgrammar>10. The grammar of Selectors</a></h2>
+
+<h3><a name=grammar>10.1. Grammar</a></h3>
+
+<p>The grammar below defines the syntax of Selectors. It is globally
+LL(1) and can be locally LL(2) (but note that most UA's should not use
+it directly, since it doesn't express the parsing conventions). The
+format of the productions is optimized for human consumption and some
+shorthand notations beyond Yacc (see <a href="#refsYACC">[YACC]</a>)
+are used:</p>
+
+<ul>
+ <li><b>*</b>: 0 or more
+ <li><b>+</b>: 1 or more
+ <li><b>?</b>: 0 or 1
+ <li><b>|</b>: separates alternatives
+ <li><b>[ ]</b>: grouping </li>
+</ul>
+
+<p>The productions are:</p>
+
+<pre>selectors_group
+ : selector [ COMMA S* selector ]*
+ ;
+
+selector
+ : simple_selector_sequence [ combinator simple_selector_sequence ]*
+ ;
+
+combinator
+ /* combinators can be surrounded by white space */
+ : PLUS S* | GREATER S* | TILDE S* | S+
+ ;
+
+simple_selector_sequence
+ : [ type_selector | universal ]
+ [ HASH | class | attrib | pseudo | negation ]*
+ | [ HASH | class | attrib | pseudo | negation ]+
+ ;
+
+type_selector
+ : [ namespace_prefix ]? element_name
+ ;
+
+namespace_prefix
+ : [ IDENT | '*' ]? '|'
+ ;
+
+element_name
+ : IDENT
+ ;
+
+universal
+ : [ namespace_prefix ]? '*'
+ ;
+
+class
+ : '.' IDENT
+ ;
+
+attrib
+ : '[' S* [ namespace_prefix ]? IDENT S*
+ [ [ PREFIXMATCH |
+ SUFFIXMATCH |
+ SUBSTRINGMATCH |
+ '=' |
+ INCLUDES |
+ DASHMATCH ] S* [ IDENT | STRING ] S*
+ ]? ']'
+ ;
+
+pseudo
+ /* '::' starts a pseudo-element, ':' a pseudo-class */
+ /* Exceptions: :first-line, :first-letter, :before and :after. */
+ /* Note that pseudo-elements are restricted to one per selector and */
+ /* occur only in the last simple_selector_sequence. */
+ : ':' ':'? [ IDENT | functional_pseudo ]
+ ;
+
+functional_pseudo
+ : FUNCTION S* expression ')'
+ ;
+
+expression
+ /* In CSS3, the expressions are identifiers, strings, */
+ /* or of the form "an+b" */
+ : [ [ PLUS | '-' | DIMENSION | NUMBER | STRING | IDENT ] S* ]+
+ ;
+
+negation
+ : NOT S* negation_arg S* ')'
+ ;
+
+negation_arg
+ : type_selector | universal | HASH | class | attrib | pseudo
+ ;</pre>
+
+
+<h3><a name=lex>10.2. Lexical scanner</a></h3>
+
+<p>The following is the <a name=x3>tokenizer</a>, written in Flex (see
+<a href="#refsFLEX">[FLEX]</a>) notation. The tokenizer is
+case-insensitive.</p>
+
+<p>The two occurrences of "\377" represent the highest character
+number that current versions of Flex can deal with (decimal 255). They
+should be read as "\4177777" (decimal 1114111), which is the highest
+possible code point in Unicode/ISO-10646. <a
+href="#refsUNICODE">[UNICODE]</a></p>
+
+<pre>%option case-insensitive
+
+ident [-]?{nmstart}{nmchar}*
+name {nmchar}+
+nmstart [_a-z]|{nonascii}|{escape}
+nonascii [^\0-\177]
+unicode \\[0-9a-f]{1,6}(\r\n|[ \n\r\t\f])?
+escape {unicode}|\\[^\n\r\f0-9a-f]
+nmchar [_a-z0-9-]|{nonascii}|{escape}
+num [0-9]+|[0-9]*\.[0-9]+
+string {string1}|{string2}
+string1 \"([^\n\r\f\\"]|\\{nl}|{nonascii}|{escape})*\"
+string2 \'([^\n\r\f\\']|\\{nl}|{nonascii}|{escape})*\'
+invalid {invalid1}|{invalid2}
+invalid1 \"([^\n\r\f\\"]|\\{nl}|{nonascii}|{escape})*
+invalid2 \'([^\n\r\f\\']|\\{nl}|{nonascii}|{escape})*
+nl \n|\r\n|\r|\f
+w [ \t\r\n\f]*
+
+%%
+
+[ \t\r\n\f]+ return S;
+
+"~=" return INCLUDES;
+"|=" return DASHMATCH;
+"^=" return PREFIXMATCH;
+"$=" return SUFFIXMATCH;
+"*=" return SUBSTRINGMATCH;
+{ident} return IDENT;
+{string} return STRING;
+{ident}"(" return FUNCTION;
+{num} return NUMBER;
+"#"{name} return HASH;
+{w}"+" return PLUS;
+{w}"&gt;" return GREATER;
+{w}"," return COMMA;
+{w}"~" return TILDE;
+":not(" return NOT;
+@{ident} return ATKEYWORD;
+{invalid} return INVALID;
+{num}% return PERCENTAGE;
+{num}{ident} return DIMENSION;
+"&lt;!--" return CDO;
+"--&gt;" return CDC;
+
+"url("{w}{string}{w}")" return URI;
+"url("{w}([!#$%&*-~]|{nonascii}|{escape})*{w}")" return URI;
+U\+[0-9a-f?]{1,6}(-[0-9a-f]{1,6})? return UNICODE_RANGE;
+
+\/\*[^*]*\*+([^/*][^*]*\*+)*\/ /* ignore comments */
+
+. return *yytext;</pre>
+
+
+
+<h2><a name=downlevel>11. Namespaces and down-level clients</a></h2>
+
+<p>An important issue is the interaction of CSS selectors with XML
+documents in web clients that were produced prior to this
+document. Unfortunately, due to the fact that namespaces must be
+matched based on the URI which identifies the namespace, not the
+namespace prefix, some mechanism is required to identify namespaces in
+CSS by their URI as well. Without such a mechanism, it is impossible
+to construct a CSS style sheet which will properly match selectors in
+all cases against a random set of XML documents. However, given
+complete knowledge of the XML document to which a style sheet is to be
+applied, and a limited use of namespaces within the XML document, it
+is possible to construct a style sheet in which selectors would match
+elements and attributes correctly.</p>
+
+<p>It should be noted that a down-level CSS client will (if it
+properly conforms to CSS forward compatible parsing rules) ignore all
+<code>@namespace</code> at-rules, as well as all style rules that make
+use of namespace qualified element type or attribute selectors. The
+syntax of delimiting namespace prefixes in CSS was deliberately chosen
+so that down-level CSS clients would ignore the style rules rather
+than possibly match them incorrectly.</p>
+
+<p>The use of default namespaces in CSS makes it possible to write
+element type selectors that will function in both namespace aware CSS
+clients as well as down-level clients. It should be noted that
+down-level clients may incorrectly match selectors against XML
+elements in other namespaces.</p>
+
+<p>The following are scenarios and examples in which it is possible to
+construct style sheets which would function properly in web clients
+that do not implement this proposal.</p>
+
+<ol>
+ <li>
+
+ <p>The XML document does not use namespaces.</p>
+
+ <ul>
+
+ <li>In this case, it is obviously not necessary to declare or use
+ namespaces in the style sheet. Standard CSS element type and
+ attribute selectors will function adequately in a down-level
+ client.</li>
+
+ <li>In a CSS namespace aware client, the default behavior of
+ element selectors matching without regard to namespace will
+ function properly against all elements, since no namespaces are
+ present. However, the use of specific element type selectors that
+ match only elements that have no namespace ("<code>|name</code>")
+ will guarantee that selectors will match only XML elements that do
+ not have a declared namespace. </li>
+
+ </ul>
+
+ </li>
+
+ <li>
+
+ <p>The XML document defines a single, default namespace used
+ throughout the document. No namespace prefixes are used in element
+ names.</p>
+
+ <ul>
+
+ <li>In this case, a down-level client will function as if
+ namespaces were not used in the XML document at all. Standard CSS
+ element type and attribute selectors will match against all
+ elements. </li>
+
+ </ul>
+
+ </li>
+
+ <li>
+
+ <p>The XML document does <b>not</b> use a default namespace, all
+ namespace prefixes used are known to the style sheet author, and
+ there is a direct mapping between namespace prefixes and namespace
+ URIs. (A given prefix may only be mapped to one namespace URI
+ throughout the XML document; there may be multiple prefixes mapped
+ to the same URI).</p>
+
+ <ul>
+
+ <li>In this case, the down-level client will view and match
+ element type and attribute selectors based on their fully
+ qualified name, not the local part as outlined in the <a
+ href="#typenmsp">Type selectors and Namespaces</a> section. CSS
+ selectors may be declared using an escaped colon "<code>\:</code>"
+ to describe the fully qualified names, e.g.
+ "<code>html\:h1</code>" will match
+ <code>&lt;html:h1&gt;</code>. Selectors using the qualified name
+ will only match XML elements that use the same prefix. Other
+ namespace prefixes used in the XML that are mapped to the same URI
+ will not match as expected unless additional CSS style rules are
+ declared for them.</li>
+
+ <li>Note that selectors declared in this fashion will
+ <em>only</em> match in down-level clients. A CSS namespace aware
+ client will match element type and attribute selectors based on
+ the name's local part. Selectors declared with the fully
+ qualified name will not match (unless there is no namespace prefix
+ in the fully qualified name).</li>
+
+ </ul>
+
+ </li>
+
+ </ol>
+
+<p>In other scenarios: when the namespace prefixes used in the XML are
+not known in advance by the style sheet author; or a combination of
+elements with no namespace are used in conjunction with elements using
+a default namespace; or the same namespace prefix is mapped to
+<em>different</em> namespace URIs within the same document, or in
+different documents; it is impossible to construct a CSS style sheet
+that will function properly against all elements in those documents,
+unless, the style sheet is written using a namespace URI syntax (as
+outlined in this document or similar) and the document is processed by
+a CSS and XML namespace aware client.</p>
+
+<h2><a name=profiling>12. Profiles</a></h2>
+
+<p>Each specification using Selectors must define the subset of W3C
+Selectors it allows and excludes, and describe the local meaning of
+all the components of that subset.</p>
+
+<p>Non normative examples:
+
+<div class="profile">
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>CSS level 1</td></tr>
+ <tr>
+ <th>Accepts</th>
+ <td>type selectors<br>class selectors<br>ID selectors<br>:link,
+ :visited and :active pseudo-classes<br>descendant combinator
+ <br>::first-line and ::first-letter pseudo-elements</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>
+
+<p>universal selector<br>attribute selectors<br>:hover and :focus
+ pseudo-classes<br>:target pseudo-class<br>:lang() pseudo-class<br>all UI
+ element states pseudo-classes<br>all structural
+ pseudo-classes<br>negation pseudo-class<br>all
+ UI element fragments pseudo-elements<br>::before and ::after
+ pseudo-elements<br>child combinators<br>sibling combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>only one class selector allowed per sequence of simple
+ selectors</td></tr></tbody></table><br><br>
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>CSS level 2</td></tr>
+ <tr>
+ <th>Accepts</th>
+ <td>type selectors<br>universal selector<br>attribute presence and
+ values selectors<br>class selectors<br>ID selectors<br>:link, :visited,
+ :active, :hover, :focus, :lang() and :first-child pseudo-classes
+ <br>descendant combinator<br>child combinator<br>adjacent sibling
+ combinator<br>::first-line and ::first-letter pseudo-elements<br>::before
+ and ::after pseudo-elements</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>
+
+<p>content selectors<br>substring matching attribute
+ selectors<br>:target pseudo-classes<br>all UI element
+ states pseudo-classes<br>all structural pseudo-classes other
+ than :first-child<br>negation pseudo-class<br>all UI element
+ fragments pseudo-elements<br>general sibling combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>more than one class selector per sequence of simple selectors (CSS1
+ constraint) allowed</td></tr></tbody></table>
+
+<p>In CSS, selectors express pattern matching rules that determine which style
+rules apply to elements in the document tree.
+
+<p>The following selector (CSS level 2) will <b>match</b> all anchors <code>a</code>
+with attribute <code>name</code> set inside a section 1 header <code>h1</code>:
+<pre>h1 a[name]</pre>
+
+<p>All CSS declarations attached to such a selector are applied to elements
+matching it. </div>
+
+<div class="profile">
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>STTS 3</td>
+ </tr>
+ <tr>
+ <th>Accepts</th>
+ <td>
+
+<p>type selectors<br>universal selectors<br>attribute selectors<br>class
+ selectors<br>ID selectors<br>all structural pseudo-classes<br>
+ all combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>non-accepted pseudo-classes<br>pseudo-elements<br></td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>some selectors and combinators are not allowed in fragment
+ descriptions on the right side of STTS declarations.</td></tr></tbody></table>
+<form>
+<input type="text" name="test10"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+</form>
+
+<p>Selectors can be used in STTS 3 in two different
+ manners:
+<ol>
+ <li>a selection mechanism equivalent to CSS selection mechanism: declarations
+ attached to a given selector are applied to elements matching that selector,
+ <li>fragment descriptions that appear on the right side of declarations.
+</li></ol></div>
+
+<h2><a name=Conformance></a>13. Conformance and requirements</h2>
+
+<p>This section defines conformance with the present specification only.
+
+<p>The inability of a user agent to implement part of this specification due to
+the limitations of a particular device (e.g., non interactive user agents will
+probably not implement dynamic pseudo-classes because they make no sense without
+interactivity) does not imply non-conformance.
+
+<p>All specifications reusing Selectors must contain a <a
+href="#profiling">Profile</a> listing the
+subset of Selectors it accepts or excludes, and describing the constraints
+it adds to the current specification.
+
+<p>Invalidity is caused by a parsing error, e.g. an unrecognized token or a token
+which is not allowed at the current parsing point.
+
+<p>User agents must observe the rules for handling parsing errors:
+<ul>
+ <li>a simple selector containing an undeclared namespace prefix is invalid</li>
+ <li>a selector containing an invalid simple selector, an invalid combinator
+ or an invalid token is invalid. </li>
+ <li>a group of selectors containing an invalid selector is invalid.</li>
+</ul>
+
+<p class="foo test10 bar">Specifications reusing Selectors must define how to handle parsing
+errors. (In the case of CSS, the entire rule in which the selector is
+used is dropped.)</p>
+
+<!-- Apparently all these references are out of date:
+<p>Implementations of this specification must behave as
+"recipients of text data" as defined by <a href="#refsCWWW">[CWWW]</a>
+when parsing selectors and attempting matches. (In particular,
+implementations must assume the data is normalized and must not
+normalize it.) Normative rules for matching strings are defined in
+<a href="#refsCWWW">[CWWW]</a> and <a
+href="#refsUNICODE">[UNICODE]</a> and apply to implementations of this
+specification.</p>-->
+
+<h2><a name=Tests></a>14. Tests</h2>
+
+<p>This specification has <a
+href="http://www.w3.org/Style/CSS/Test/CSS3/Selectors/current/">a test
+suite</a> allowing user agents to verify their basic conformance to
+the specification. This test suite does not pretend to be exhaustive
+and does not cover all possible combined cases of Selectors.</p>
+
+<h2><a name=ACKS></a>15. Acknowledgements</h2>
+
+<p>The CSS working group would like to thank everyone who has sent
+comments on this specification over the years.</p>
+
+<p>The working group would like to extend special thanks to Donna
+McManus, Justin Baker, Joel Sklar, and Molly Ives Brower who perfermed
+the final editorial review.</p>
+
+<h2><a name=references>16. References</a></h2>
+
+<dl class="refs">
+
+ <dt>[CSS1]
+ <dd><a name=refsCSS1></a> Bert Bos, H&aring;kon Wium Lie; "<cite>Cascading Style Sheets, level 1</cite>", W3C Recommendation, 17 Dec 1996, revised 11 Jan 1999
+ <dd>(<code><a href="http://www.w3.org/TR/REC-CSS1">http://www.w3.org/TR/REC-CSS1</a></code>)
+
+ <dt>[CSS21]
+ <dd><a name=refsCSS21></a> Bert Bos, Tantek &Ccedil;elik, Ian Hickson, H&aring;kon Wium Lie, editors; "<cite>Cascading Style Sheets, level 2 revision 1</cite>", W3C Working Draft, 13 June 2005
+ <dd>(<code><a href="http://www.w3.org/TR/CSS21">http://www.w3.org/TR/CSS21</a></code>)
+
+ <dt>[CWWW]
+ <dd><a name=refsCWWW></a> Martin J. D&uuml;rst, Fran&ccedil;ois Yergeau, Misha Wolf, Asmus Freytag, Tex Texin, editors; "<cite>Character Model for the World Wide Web</cite>", W3C Recommendation, 15 February 2005
+ <dd>(<code><a href="http://www.w3.org/TR/charmod/">http://www.w3.org/TR/charmod/</a></code>)
+
+ <dt>[FLEX]
+ <dd><a name="refsFLEX"></a> "<cite>Flex: The Lexical Scanner Generator</cite>", Version 2.3.7, ISBN 1882114213
+
+ <dt>[HTML4]
+ <dd><a name="refsHTML4"></a> Dave Ragget, Arnaud Le Hors, Ian Jacobs, editors; "<cite>HTML 4.01 Specification</cite>", W3C Recommendation, 24 December 1999
+ <dd>(<a href="http://www.w3.org/TR/html4/"><code>http://www.w3.org/TR/html4/</code></a>)
+
+ <dt>[MATH]
+ <dd><a name="refsMATH"></a> Patrick Ion, Robert Miner, editors; "<cite>Mathematical Markup Language (MathML) 1.01</cite>", W3C Recommendation, revision of 7 July 1999
+ <dd>(<code><a href="http://www.w3.org/TR/REC-MathML/">http://www.w3.org/TR/REC-MathML/</a></code>)
+
+ <dt>[RFC3066]
+ <dd><a name="refsRFC3066"></a> H. Alvestrand; "<cite>Tags for the Identification of Languages</cite>", Request for Comments 3066, January 2001
+ <dd>(<a href="http://www.ietf.org/rfc/rfc3066.txt"><code>http://www.ietf.org/rfc/rfc3066.txt</code></a>)
+
+ <dt>[STTS]
+ <dd><a name=refsSTTS></a> Daniel Glazman; "<cite>Simple Tree Transformation Sheets 3</cite>", Electricit&eacute; de France, submission to the W3C, 11 November 1998
+ <dd>(<code><a href="http://www.w3.org/TR/NOTE-STTS3">http://www.w3.org/TR/NOTE-STTS3</a></code>)
+
+ <dt>[SVG]
+ <dd><a name="refsSVG"></a> Jon Ferraiolo, &#34276;&#27810; &#28147;, Dean Jackson, editors; "<cite>Scalable Vector Graphics (SVG) 1.1 Specification</cite>", W3C Recommendation, 14 January 2003
+ <dd>(<code><a href="http://www.w3.org/TR/SVG/">http://www.w3.org/TR/SVG/</a></code>)
+
+ <dt>[UNICODE]</dt>
+ <dd><a name="refsUNICODE"></a> <cite><a
+ href="http://www.unicode.org/versions/Unicode4.1.0/">The Unicode Standard, Version 4.1</a></cite>, The Unicode Consortium. Boston, MA, Addison-Wesley, March 2005. ISBN 0-321-18578-1, as amended by <a href="http://www.unicode.org/versions/Unicode4.0.1/">Unicode 4.0.1</a> and <a href="http://www.unicode.org/versions/Unicode4.1.0/">Unicode 4.1.0</a>.
+ <dd>(<code><a href="http://www.unicode.org/versions/">http://www.unicode.org/versions/</a></code>)</dd>
+
+ <dt>[XML10]
+ <dd><a name="refsXML10"></a> Tim Bray, Jean Paoli, C. M. Sperberg-McQueen, Eve Maler, Fran&ccedil;ois Yergeau, editors; "<cite>Extensible Markup Language (XML) 1.0 (Third Edition)</cite>", W3C Recommendation, 4 February 2004
+ <dd>(<a href="http://www.w3.org/TR/REC-xml/"><code>http://www.w3.org/TR/REC-xml/</code></a>)
+
+ <dt>[XMLNAMES]
+ <dd><a name="refsXMLNAMES"></a> Tim Bray, Dave Hollander, Andrew Layman, editors; "<cite>Namespaces in XML</cite>", W3C Recommendation, 14 January 1999
+ <dd>(<a href="http://www.w3.org/TR/REC-xml-names/"><code>http://www.w3.org/TR/REC-xml-names/</code></a>)
+
+ <dt>[YACC]
+ <dd><a name="refsYACC"></a> S. C. Johnson; "<cite>YACC &mdash; Yet another compiler compiler</cite>", Technical Report, Murray Hill, 1975
+
+</dl>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/jslib-traverse-jquery.html b/testing/talos/talos/tests/dromaeo/tests/jslib-traverse-jquery.html
new file mode 100644
index 0000000000..22b7aab241
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/jslib-traverse-jquery.html
@@ -0,0 +1,2960 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script src="../lib/jquery.js"></script>
+<script>
+window.onload = function(){
+startTest("jslib-traverse-jquery", 'c67d0b8e');
+
+// Try to force real results
+var ret, tmp, div, dd;
+
+var html = document.body.innerHTML;
+
+ prep(function(){
+ div = jQuery("div");
+ dd = jQuery("dd");
+ var tmp = document.createElement("div");
+ tmp.innerHTML = html;
+ document.body.appendChild( tmp );
+ });
+
+ test("jQuery - parent x10", function(){
+ for ( var i = 0; i < 100; i++ )
+ ret = div.parent().length;
+ });
+
+ test("jQuery - parents x10", function(){
+ for ( var i = 0; i < 100; i++ )
+ ret = div.parents().length;
+ });
+
+ test("jQuery - prev x10", function(){
+ for ( var i = 0; i < 100; i++ )
+ ret = div.prev().length;
+ });
+
+ test("jQuery - prevAll", function(){
+ for ( var i = 0; i < 10; i++ )
+ ret = dd.prevAll().length;
+ });
+
+ test("jQuery - next x10", function(){
+ for ( var i = 0; i < 100; i++ )
+ ret = div.next().length;
+ });
+
+ test("jQuery - nextAll", function(){
+ for ( var i = 0; i < 10; i++ )
+ ret = dd.nextAll().length;
+ });
+
+ test("jQuery - siblings", function(){
+ for ( var i = 0; i < 10; i++ )
+ ret = dd.siblings().length;
+ });
+
+ test("jQuery - children", function(){
+ for ( var i = 0; i < 10; i++ )
+ ret = div.children().length;
+ });
+
+endTest();
+};
+</script>
+</head>
+<body>
+ <div class="head">
+ <p><a href="http://www.w3.org/"><img height=48 alt=W3C src="w3c_home.png" width=72></a>
+
+ <h1 id="title">Selectors</h1>
+
+ <h2>W3C Working Draft 15 December 2005</h2>
+
+ <dl>
+
+ <dt>This version:
+
+ <dd><a href="http://www.w3.org/TR/2005/WD-css3-selectors-20051215">
+ http://www.w3.org/TR/2005/WD-css3-selectors-20051215</a>
+
+ <dt>Latest version:
+
+ <dd><a href="http://www.w3.org/TR/css3-selectors">
+ http://www.w3.org/TR/css3-selectors</a>
+
+ <dt>Previous version:
+
+ <dd><a href="http://www.w3.org/TR/2001/CR-css3-selectors-20011113">
+ http://www.w3.org/TR/2001/CR-css3-selectors-20011113</a>
+
+ <dt><a name=editors-list></a>Editors:
+
+ <dd class="vcard"><span class="fn">Daniel Glazman</span> (Invited Expert)</dd>
+
+ <dd class="vcard"><a lang="tr" class="url fn" href="http://www.tantek.com/">Tantek &Ccedil;elik</a> (Invited Expert)
+
+ <dd class="vcard"><a href="mailto:ian@hixie.ch" class="url fn">Ian Hickson</a> (<span
+ class="company"><a href="http://www.google.com/">Google</a></span>)
+
+ <dd class="vcard"><span class="fn">Peter Linss</span> (former editor, <span class="company"><a
+ href="http://www.netscape.com/">Netscape/AOL</a></span>)
+
+ <dd class="vcard"><span class="fn">John Williams</span> (former editor, <span class="company"><a
+ href="http://www.quark.com/">Quark, Inc.</a></span>)
+
+ </dl>
+
+ <p class="copyright"><a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright">
+ Copyright</a> &copy; 2005 <a href="http://www.w3.org/"><abbr
+ title="World Wide Web Consortium">W3C</abbr></a><sup>&reg;</sup>
+ (<a href="http://www.csail.mit.edu/"><abbr title="Massachusetts
+ Institute of Technology">MIT</abbr></a>, <a
+ href="http://www.ercim.org/"><acronym title="European Research
+ Consortium for Informatics and Mathematics">ERCIM</acronym></a>, <a
+ href="http://www.keio.ac.jp/">Keio</a>), All Rights Reserved. W3C
+ <a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">liability</a>,
+ <a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">trademark</a>,
+ <a
+ href="http://www.w3.org/Consortium/Legal/copyright-documents">document
+ use</a> rules apply.
+
+ <hr title="Separator for header">
+
+ </div>
+
+ <h2><a name=abstract></a>Abstract</h2>
+
+ <p><em>Selectors</em> are patterns that match against elements in a
+ tree. Selectors have been optimized for use with HTML and XML, and
+ are designed to be usable in performance-critical code.</p>
+
+ <p><acronym title="Cascading Style Sheets">CSS</acronym> (Cascading
+ Style Sheets) is a language for describing the rendering of <acronym
+ title="Hypertext Markup Language">HTML</acronym> and <acronym
+ title="Extensible Markup Language">XML</acronym> documents on
+ screen, on paper, in speech, etc. CSS uses Selectors for binding
+ style properties to elements in the document. This document
+ describes extensions to the selectors defined in CSS level 2. These
+ extended selectors will be used by CSS level 3.
+
+ <p>Selectors define the following function:</p>
+
+ <pre>expression &#x2217; element &rarr; boolean</pre>
+
+ <p>That is, given an element and a selector, this specification
+ defines whether that element matches the selector.</p>
+
+ <p>These expressions can also be used, for instance, to select a set
+ of elements, or a single element from a set of elements, by
+ evaluating the expression across all the elements in a
+ subtree. <acronym title="Simple Tree Transformation
+ Sheets">STTS</acronym> (Simple Tree Transformation Sheets), a
+ language for transforming XML trees, uses this mechanism. <a href="#refsSTTS">[STTS]</a></p>
+
+ <h2><a name=status></a>Status of this document</h2>
+
+ <p><em>This section describes the status of this document at the
+ time of its publication. Other documents may supersede this
+ document. A list of current W3C publications and the latest revision
+ of this technical report can be found in the <a
+ href="http://www.w3.org/TR/">W3C technical reports index at
+ http://www.w3.org/TR/.</a></em></p>
+
+ <p>This document describes the selectors that already exist in <a
+ href="#refsCSS1"><abbr title="CSS level 1">CSS1</abbr></a> and <a
+ href="#refsCSS21"><abbr title="CSS level 2">CSS2</abbr></a>, and
+ also proposes new selectors for <abbr title="CSS level
+ 3">CSS3</abbr> and other languages that may need them.</p>
+
+ <p>The CSS Working Group doesn't expect that all implementations of
+ CSS3 will have to implement all selectors. Instead, there will
+ probably be a small number of variants of CSS3, called profiles. For
+ example, it may be that only a profile for interactive user agents
+ will include all of the selectors.</p>
+
+ <p>This specification is a last call working draft for the the <a
+ href="http://www.w3.org/Style/CSS/members">CSS Working Group</a>
+ (<a href="/Style/">Style Activity</a>). This
+ document is a revision of the <a
+ href="http://www.w3.org/TR/2001/CR-css3-selectors-20011113/">Candidate
+ Recommendation dated 2001 November 13</a>, and has incorporated
+ implementation feedback received in the past few years. It is
+ expected that this last call will proceed straight to Proposed
+ Recommendation stage since it is believed that interoperability will
+ be demonstrable.</p>
+
+ <p>All persons are encouraged to review and implement this
+ specification and return comments to the (<a
+ href="http://lists.w3.org/Archives/Public/www-style/">archived</a>)
+ public mailing list <a
+ href="http://www.w3.org/Mail/Lists.html#www-style">www-style</a>
+ (see <a href="http://www.w3.org/Mail/Request">instructions</a>). W3C
+ Members can also send comments directly to the CSS Working
+ Group.
+ The deadline for comments is 14 January 2006.</p>
+
+ <p>This is still a draft document and may be updated, replaced, or
+ obsoleted by other documents at any time. It is inappropriate to
+ cite a W3C Working Draft as other than &quot;work in progress&quot;.
+
+ <p>This document may be available in <a
+ href="http://www.w3.org/Style/css3-selectors-updates/translations">translation</a>.
+ The English version of this specification is the only normative
+ version.
+
+ <div class="subtoc">
+
+ <h2 id="test10"><a name=contents>Table of contents</a></h2>
+
+ <ul class="toc">
+ <li class="tocline2"><a href="#context">1. Introduction</a>
+ <ul>
+ <li><a href="#dependencies">1.1. Dependencies</a> </li>
+ <li><a href="#terminology">1.2. Terminology</a> </li>
+ <li><a href="#changesFromCSS2">1.3. Changes from CSS2</a> </li>
+ </ul>
+ <li class="tocline2"><a href="#selectors">2. Selectors</a>
+ <li class="tocline2"><a href="#casesens">3. Case sensitivity</a>
+ <li class="tocline2"><a href="#selector-syntax">4. Selector syntax</a>
+ <li class="tocline2"><a href="#grouping">5. Groups of selectors</a>
+ <li class="tocline2"><a href="#simple-selectors">6. Simple selectors</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#type-selectors">6.1. Type selectors</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#typenmsp">6.1.1. Type selectors and namespaces</a></li>
+ </ul>
+ <li class="tocline3"><a href="#universal-selector">6.2. Universal selector</a>
+ <ul>
+ <li><a href="#univnmsp">6.2.1. Universal selector and namespaces</a></li>
+ </ul>
+ <li class="tocline3"><a href="#attribute-selectors">6.3. Attribute selectors</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#attribute-representation">6.3.1. Representation of attributes and attributes values</a>
+ <li><a href="#attribute-substrings">6.3.2. Substring matching attribute selectors</a>
+ <li class="tocline4"><a href="#attrnmsp">6.3.3. Attribute selectors and namespaces</a>
+ <li class="tocline4"><a href="#def-values">6.3.4. Default attribute values in DTDs</a></li>
+ </ul>
+ <li class="tocline3"><a href="#class-html">6.4. Class selectors</a>
+ <li class="tocline3"><a href="#id-selectors">6.5. ID selectors</a>
+ <li class="tocline3"><a href="#pseudo-classes">6.6. Pseudo-classes</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#dynamic-pseudos">6.6.1. Dynamic pseudo-classes</a>
+ <li class="tocline4"><a href="#target-pseudo">6.6.2. The :target pseudo-class</a>
+ <li class="tocline4"><a href="#lang-pseudo">6.6.3. The :lang() pseudo-class</a>
+ <li class="tocline4"><a href="#UIstates">6.6.4. UI element states pseudo-classes</a>
+ <li class="tocline4"><a href="#structural-pseudos">6.6.5. Structural pseudo-classes</a>
+ <ul>
+ <li><a href="#root-pseudo">:root pseudo-class</a>
+ <li><a href="#nth-child-pseudo">:nth-child() pseudo-class</a>
+ <li><a href="#nth-last-child-pseudo">:nth-last-child()</a>
+ <li><a href="#nth-of-type-pseudo">:nth-of-type() pseudo-class</a>
+ <li><a href="#nth-last-of-type-pseudo">:nth-last-of-type()</a>
+ <li><a href="#first-child-pseudo">:first-child pseudo-class</a>
+ <li><a href="#last-child-pseudo">:last-child pseudo-class</a>
+ <li><a href="#first-of-type-pseudo">:first-of-type pseudo-class</a>
+ <li><a href="#last-of-type-pseudo">:last-of-type pseudo-class</a>
+ <li><a href="#only-child-pseudo">:only-child pseudo-class</a>
+ <li><a href="#only-of-type-pseudo">:only-of-type pseudo-class</a>
+ <li><a href="#empty-pseudo">:empty pseudo-class</a></li>
+ </ul>
+ <li class="tocline4"><a href="#negation">6.6.7. The negation pseudo-class</a></li>
+ </ul>
+ </li>
+ </ul>
+ <li><a href="#pseudo-elements">7. Pseudo-elements</a>
+ <ul>
+ <li><a href="#first-line">7.1. The ::first-line pseudo-element</a>
+ <li><a href="#first-letter">7.2. The ::first-letter pseudo-element</a>
+ <li><a href="#UIfragments">7.3. The ::selection pseudo-element</a>
+ <li><a href="#gen-content">7.4. The ::before and ::after pseudo-elements</a></li>
+ </ul>
+ <li class="tocline2"><a href="#combinators">8. Combinators</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#descendant-combinators">8.1. Descendant combinators</a>
+ <li class="tocline3"><a href="#child-combinators">8.2. Child combinators</a>
+ <li class="tocline3"><a href="#sibling-combinators">8.3. Sibling combinators</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#adjacent-sibling-combinators">8.3.1. Adjacent sibling combinator</a>
+ <li class="tocline4"><a href="#general-sibling-combinators">8.3.2. General sibling combinator</a></li>
+ </ul>
+ </li>
+ </ul>
+ <li class="tocline2"><a href="#specificity">9. Calculating a selector's specificity</a>
+ <li class="tocline2"><a href="#w3cselgrammar">10. The grammar of Selectors</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#grammar">10.1. Grammar</a>
+ <li class="tocline3"><a href="#lex">10.2. Lexical scanner</a></li>
+ </ul>
+ <li class="tocline2"><a href="#downlevel">11. Namespaces and down-level clients</a>
+ <li class="tocline2"><a href="#profiling">12. Profiles</a>
+ <li><a href="#Conformance">13. Conformance and requirements</a>
+ <li><a href="#Tests">14. Tests</a>
+ <li><a href="#ACKS">15. Acknowledgements</a>
+ <li class="tocline2"><a href="#references">16. References</a>
+ </ul>
+
+ </div>
+
+ <h2><a name=context>1. Introduction</a></h2>
+
+ <h3><a name=dependencies></a>1.1. Dependencies</h3>
+
+ <p>Some features of this specification are specific to CSS, or have
+ particular limitations or rules specific to CSS. In this
+ specification, these have been described in terms of CSS2.1. <a
+ href="#refsCSS21">[CSS21]</a></p>
+
+ <h3><a name=terminology></a>1.2. Terminology</h3>
+
+ <p>All of the text of this specification is normative except
+ examples, notes, and sections explicitly marked as
+ non-normative.</p>
+
+ <h3><a name=changesFromCSS2></a>1.3. Changes from CSS2</h3>
+
+ <p><em>This section is non-normative.</em></p>
+
+ <p>The main differences between the selectors in CSS2 and those in
+ Selectors are:
+
+ <ul>
+
+ <li>the list of basic definitions (selector, group of selectors,
+ simple selector, etc.) has been changed; in particular, what was
+ referred to in CSS2 as a simple selector is now called a sequence
+ of simple selectors, and the term "simple selector" is now used for
+ the components of this sequence</li>
+
+ <li>an optional namespace component is now allowed in type element
+ selectors, the universal selector and attribute selectors</li>
+
+ <li>a <a href="#general-sibling-combinators">new combinator</a> has been introduced</li>
+
+ <li>new simple selectors including substring matching attribute
+ selectors, and new pseudo-classes</li>
+
+ <li>new pseudo-elements, and introduction of the "::" convention
+ for pseudo-elements</li>
+
+ <li>the grammar has been rewritten</li>
+
+ <li>profiles to be added to specifications integrating Selectors
+ and defining the set of selectors which is actually supported by
+ each specification</li>
+
+ <li>Selectors are now a CSS3 Module and an independent
+ specification; other specifications can now refer to this document
+ independently of CSS</li>
+
+ <li>the specification now has its own test suite</li>
+
+ </ul>
+
+<h2><a name=selectors></a>2. Selectors</h2>
+
+<p><em>This section is non-normative, as it merely summarizes the
+following sections.</em></p>
+
+<p>A Selector represents a structure. This structure can be used as a
+condition (e.g. in a CSS rule) that determines which elements a
+selector matches in the document tree, or as a flat description of the
+HTML or XML fragment corresponding to that structure.</p>
+
+<p>Selectors may range from simple element names to rich contextual
+representations.</p>
+
+<p>The following table summarizes the Selector syntax:</p>
+
+<table class="selectorsReview">
+ <thead>
+ <tr>
+ <th class="pattern">Pattern</th>
+ <th class="meaning">Meaning</th>
+ <th class="described">Described in section</th>
+ <th class="origin">First defined in CSS level</th></tr>
+ <tbody>
+ <tr>
+ <td class="pattern">*</td>
+ <td class="meaning">any element</td>
+ <td class="described"><a
+ href="#universal-selector">Universal
+ selector</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E</td>
+ <td class="meaning">an element of type E</td>
+ <td class="described"><a
+ href="#type-selectors">Type selector</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E[foo]</td>
+ <td class="meaning">an E element with a "foo" attribute</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value is exactly
+ equal to "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo~="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value is a list of
+ space-separated values, one of which is exactly equal to "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo^="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value begins exactly
+ with the string "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[foo$="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value ends exactly
+ with the string "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[foo*="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value contains the
+ substring "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[hreflang|="en"]</td>
+ <td class="meaning">an E element whose "hreflang" attribute has a hyphen-separated
+ list of values beginning (from the left) with "en"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:root</td>
+ <td class="meaning">an E element, root of the document</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-child(n)</td>
+ <td class="meaning">an E element, the n-th child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-last-child(n)</td>
+ <td class="meaning">an E element, the n-th child of its parent, counting
+ from the last one</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-of-type(n)</td>
+ <td class="meaning">an E element, the n-th sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-last-of-type(n)</td>
+ <td class="meaning">an E element, the n-th sibling of its type, counting
+ from the last one</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:first-child</td>
+ <td class="meaning">an E element, first child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:last-child</td>
+ <td class="meaning">an E element, last child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:first-of-type</td>
+ <td class="meaning">an E element, first sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:last-of-type</td>
+ <td class="meaning">an E element, last sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:only-child</td>
+ <td class="meaning">an E element, only child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:only-of-type</td>
+ <td class="meaning">an E element, only sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:empty</td>
+ <td class="meaning">an E element that has no children (including text
+ nodes)</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:link<br>E:visited</td>
+ <td class="meaning">an E element being the source anchor of a hyperlink of
+ which the target is not yet visited (:link) or already visited
+ (:visited)</td>
+ <td class="described"><a
+ href="#link">The link
+ pseudo-classes</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E:active<br>E:hover<br>E:focus</td>
+ <td class="meaning">an E element during certain user actions</td>
+ <td class="described"><a
+ href="#useraction-pseudos">The user
+ action pseudo-classes</a></td>
+ <td class="origin">1 and 2</td></tr>
+ <tr>
+ <td class="pattern">E:target</td>
+ <td class="meaning">an E element being the target of the referring URI</td>
+ <td class="described"><a
+ href="#target-pseudo">The target
+ pseudo-class</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:lang(fr)</td>
+ <td class="meaning">an element of type E in language "fr" (the document
+ language specifies how language is determined)</td>
+ <td class="described"><a
+ href="#lang-pseudo">The :lang()
+ pseudo-class</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:enabled<br>E:disabled</td>
+ <td class="meaning">a user interface element E which is enabled or
+ disabled</td>
+ <td class="described"><a
+ href="#UIstates">The UI element states
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:checked<!--<br>E:indeterminate--></td>
+ <td class="meaning">a user interface element E which is checked<!-- or in an
+ indeterminate state--> (for instance a radio-button or checkbox)</td>
+ <td class="described"><a
+ href="#UIstates">The UI element states
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E::first-line</td>
+ <td class="meaning">the first formatted line of an E element</td>
+ <td class="described"><a
+ href="#first-line">The ::first-line
+ pseudo-element</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E::first-letter</td>
+ <td class="meaning">the first formatted letter of an E element</td>
+ <td class="described"><a
+ href="#first-letter">The ::first-letter
+ pseudo-element</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E::selection</td>
+ <td class="meaning">the portion of an E element that is currently
+ selected/highlighted by the user</td>
+ <td class="described"><a
+ href="#UIfragments">The UI element
+ fragments pseudo-elements</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E::before</td>
+ <td class="meaning">generated content before an E element</td>
+ <td class="described"><a
+ href="#gen-content">The ::before
+ pseudo-element</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E::after</td>
+ <td class="meaning">generated content after an E element</td>
+ <td class="described"><a
+ href="#gen-content">The ::after
+ pseudo-element</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E.warning</td>
+ <td class="meaning">an E element whose class is
+"warning" (the document language specifies how class is determined).</td>
+ <td class="described"><a
+ href="#class-html">Class
+ selectors</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E#myid</td>
+ <td class="meaning">an E element with ID equal to "myid".</td>
+ <td class="described"><a
+ href="#id-selectors">ID
+ selectors</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E:not(s)</td>
+ <td class="meaning">an E element that does not match simple selector s</td>
+ <td class="described"><a
+ href="#negation">Negation
+ pseudo-class</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E F</td>
+ <td class="meaning">an F element descendant of an E element</td>
+ <td class="described"><a
+ href="#descendant-combinators">Descendant
+ combinator</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E &gt; F</td>
+ <td class="meaning">an F element child of an E element</td>
+ <td class="described"><a
+ href="#child-combinators">Child
+ combinator</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E + F</td>
+ <td class="meaning">an F element immediately preceded by an E element</td>
+ <td class="described"><a
+ href="#adjacent-sibling-combinators">Adjacent sibling combinator</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E ~ F</td>
+ <td class="meaning">an F element preceded by an E element</td>
+ <td class="described"><a
+ href="#general-sibling-combinators">General sibling combinator</a></td>
+ <td class="origin">3</td></tr></tbody></table>
+
+<p>The meaning of each selector is derived from the table above by
+prepending "matches" to the contents of each cell in the "Meaning"
+column.</p>
+
+<h2><a name=casesens>3. Case sensitivity</a></h2>
+
+<p>The case sensitivity of document language element names, attribute
+names, and attribute values in selectors depends on the document
+language. For example, in HTML, element names are case-insensitive,
+but in XML, they are case-sensitive.</p>
+
+<h2><a name=selector-syntax>4. Selector syntax</a></h2>
+
+<p>A <dfn><a name=selector>selector</a></dfn> is a chain of one
+or more <a href="#sequence">sequences of simple selectors</a>
+separated by <a href="#combinators">combinators</a>.</p>
+
+<p>A <dfn><a name=sequence>sequence of simple selectors</a></dfn>
+is a chain of <a href="#simple-selectors-dfn">simple selectors</a>
+that are not separated by a <a href="#combinators">combinator</a>. It
+always begins with a <a href="#type-selectors">type selector</a> or a
+<a href="#universal-selector">universal selector</a>. No other type
+selector or universal selector is allowed in the sequence.</p>
+
+<p>A <dfn><a name=simple-selectors-dfn></a><a
+href="#simple-selectors">simple selector</a></dfn> is either a <a
+href="#type-selectors">type selector</a>, <a
+href="#universal-selector">universal selector</a>, <a
+href="#attribute-selectors">attribute selector</a>, <a
+href="#class-html">class selector</a>, <a
+href="#id-selectors">ID selector</a>, <a
+href="#content-selectors">content selector</a>, or <a
+href="#pseudo-classes">pseudo-class</a>. One <a
+href="#pseudo-elements">pseudo-element</a> may be appended to the last
+sequence of simple selectors.</p>
+
+<p><dfn>Combinators</dfn> are: white space, &quot;greater-than
+sign&quot; (U+003E, <code>&gt;</code>), &quot;plus sign&quot; (U+002B,
+<code>+</code>) and &quot;tilde&quot; (U+007E, <code>~</code>). White
+space may appear between a combinator and the simple selectors around
+it. <a name=whitespace></a>Only the characters "space" (U+0020), "tab"
+(U+0009), "line feed" (U+000A), "carriage return" (U+000D), and "form
+feed" (U+000C) can occur in white space. Other space-like characters,
+such as "em-space" (U+2003) and "ideographic space" (U+3000), are
+never part of white space.</p>
+
+<p>The elements of a document tree that are represented by a selector
+are the <dfn><a name=subject></a>subjects of the selector</dfn>. A
+selector consisting of a single sequence of simple selectors
+represents any element satisfying its requirements. Prepending another
+sequence of simple selectors and a combinator to a sequence imposes
+additional matching constraints, so the subjects of a selector are
+always a subset of the elements represented by the last sequence of
+simple selectors.</p>
+
+<p>An empty selector, containing no sequence of simple selectors and
+no pseudo-element, is an <a href="#Conformance">invalid
+selector</a>.</p>
+
+<h2><a name=grouping>5. Groups of selectors</a></h2>
+
+<p>When several selectors share the same declarations, they may be
+grouped into a comma-separated list. (A comma is U+002C.)</p>
+
+<div class="example">
+<p>CSS examples:</p>
+<p>In this example, we condense three rules with identical
+declarations into one. Thus,</p>
+<pre>h1 { font-family: sans-serif }
+h2 { font-family: sans-serif }
+h3 { font-family: sans-serif }</pre>
+<p>is equivalent to:</p>
+<pre>h1, h2, h3 { font-family: sans-serif }</pre>
+</div>
+
+<p><strong>Warning</strong>: the equivalence is true in this example
+because all the selectors are valid selectors. If just one of these
+selectors were invalid, the entire group of selectors would be
+invalid. This would invalidate the rule for all three heading
+elements, whereas in the former case only one of the three individual
+heading rules would be invalidated.</p>
+
+
+<h2><a name=simple-selectors>6. Simple selectors</a></h2>
+
+<h3><a name=type-selectors>6.1. Type selector</a></h3>
+
+<p>A <dfn>type selector</dfn> is the name of a document language
+element type. A type selector represents an instance of the element
+type in the document tree.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents an <code>h1</code> element in the document tree:</p>
+ <pre>h1</pre>
+</div>
+
+
+<h4><a name=typenmsp>6.1.1. Type selectors and namespaces</a></h4>
+
+<p>Type selectors allow an optional namespace (<a
+href="#refsXMLNAMES">[XMLNAMES]</a>) component. A namespace prefix
+that has been previously declared may be prepended to the element name
+separated by the namespace separator &quot;vertical bar&quot;
+(U+007C, <code>|</code>).</p>
+
+<p>The namespace component may be left empty to indicate that the
+selector is only to represent elements with no declared namespace.</p>
+
+<p>An asterisk may be used for the namespace prefix, indicating that
+the selector represents elements in any namespace (including elements
+with no namespace).</p>
+
+<p>Element type selectors that have no namespace component (no
+namespace separator), represent elements without regard to the
+element's namespace (equivalent to "<code>*|</code>") unless a default
+namespace has been declared. If a default namespace has been declared,
+the selector will represent only elements in the default
+namespace.</p>
+
+<p>A type selector containing a namespace prefix that has not been
+previously declared is an <a href="#Conformance">invalid</a> selector.
+The mechanism for declaring a namespace prefix is left up to the
+language implementing Selectors. In CSS, such a mechanism is defined
+in the General Syntax module.</p>
+
+<p>In a namespace-aware client, element type selectors will only match
+against the <a
+href="http://www.w3.org/TR/REC-xml-names/#NT-LocalPart">local part</a>
+of the element's <a
+href="http://www.w3.org/TR/REC-xml-names/#ns-qualnames">qualified
+name</a>. See <a href="#downlevel">below</a> for notes about matching
+behaviors in down-level clients.</p>
+
+<p>In summary:</p>
+
+<dl>
+ <dt><code>ns|E</code></dt>
+ <dd>elements with name E in namespace ns</dd>
+ <dt><code>*|E</code></dt>
+ <dd>elements with name E in any namespace, including those without any
+ declared namespace</dd>
+ <dt><code>|E</code></dt>
+ <dd>elements with name E without any declared namespace</dd>
+ <dt><code>E</code></dt>
+ <dd>if no default namespace has been specified, this is equivalent to *|E.
+ Otherwise it is equivalent to ns|E where ns is the default namespace.</dd>
+</dl>
+
+<div class="example">
+ <p>CSS examples:</p>
+
+ <pre>@namespace foo url(http://www.example.com);
+ foo|h1 { color: blue }
+ foo|* { color: yellow }
+ |h1 { color: red }
+ *|h1 { color: green }
+ h1 { color: green }</pre>
+
+ <p>The first rule will match only <code>h1</code> elements in the
+ "http://www.example.com" namespace.</p>
+
+ <p>The second rule will match all elements in the
+ "http://www.example.com" namespace.</p>
+
+ <p>The third rule will match only <code>h1</code> elements without
+ any declared namespace.</p>
+
+ <p>The fourth rule will match <code>h1</code> elements in any
+ namespace (including those without any declared namespace).</p>
+
+ <p>The last rule is equivalent to the fourth rule because no default
+ namespace has been defined.</p>
+
+</div>
+
+<h3><a name=universal-selector>6.2. Universal selector</a> </h3>
+
+<p>The <dfn>universal selector</dfn>, written &quot;asterisk&quot;
+(<code>*</code>), represents the qualified name of any element
+type. It represents any single element in the document tree in any
+namespace (including those without any declared namespace) if no
+default namespace has been specified. If a default namespace has been
+specified, see <a href="#univnmsp">Universal selector and
+Namespaces</a> below.</p>
+
+<p>If the universal selector is not the only component of a sequence
+of simple selectors, the <code>*</code> may be omitted.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <ul>
+ <li><code>*[hreflang|=en]</code> and <code>[hreflang|=en]</code> are equivalent,</li>
+ <li><code>*.warning</code> and <code>.warning</code> are equivalent,</li>
+ <li><code>*#myid</code> and <code>#myid</code> are equivalent.</li>
+ </ul>
+</div>
+
+<p class="note"><strong>Note:</strong> it is recommended that the
+<code>*</code>, representing the universal selector, not be
+omitted.</p>
+
+<h4><a name=univnmsp>6.2.1. Universal selector and namespaces</a></h4>
+
+<p>The universal selector allows an optional namespace component. It
+is used as follows:</p>
+
+<dl>
+ <dt><code>ns|*</code></dt>
+ <dd>all elements in namespace ns</dd>
+ <dt><code>*|*</code></dt>
+ <dd>all elements</dd>
+ <dt><code>|*</code></dt>
+ <dd>all elements without any declared namespace</dd>
+ <dt><code>*</code></dt>
+ <dd>if no default namespace has been specified, this is equivalent to *|*.
+ Otherwise it is equivalent to ns|* where ns is the default namespace.</dd>
+</dl>
+
+<p>A universal selector containing a namespace prefix that has not
+been previously declared is an <a href="#Conformance">invalid</a>
+selector. The mechanism for declaring a namespace prefix is left up
+to the language implementing Selectors. In CSS, such a mechanism is
+defined in the General Syntax module.</p>
+
+
+<h3><a name=attribute-selectors>6.3. Attribute selectors</a></h3>
+
+<p>Selectors allow the representation of an element's attributes. When
+a selector is used as an expression to match against an element,
+attribute selectors must be considered to match an element if that
+element has an attribute that matches the attribute represented by the
+attribute selector.</p>
+
+<h4><a name=attribute-representation>6.3.1. Attribute presence and values
+selectors</a></h4>
+
+<p>CSS2 introduced four attribute selectors:</p>
+
+<dl>
+ <dt><code>[att]</code>
+ <dd>Represents an element with the <code>att</code> attribute, whatever the value of
+ the attribute.</dd>
+ <dt><code>[att=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value is exactly
+ "val".</dd>
+ <dt><code>[att~=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value is a <a
+ href="#whitespace">whitespace</a>-separated list of words, one of
+ which is exactly "val". If "val" contains whitespace, it will never
+ represent anything (since the words are <em>separated</em> by
+ spaces).</dd>
+ <dt><code>[att|=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute, its value either
+ being exactly "val" or beginning with "val" immediately followed by
+ "-" (U+002D). This is primarily intended to allow language subcode
+ matches (e.g., the <code>hreflang</code> attribute on the
+ <code>link</code> element in HTML) as described in RFC 3066 (<a
+ href="#refsRFC3066">[RFC3066]</a>). For <code>lang</code> (or
+ <code>xml:lang</code>) language subcode matching, please see <a
+ href="#lang-pseudo">the <code>:lang</code> pseudo-class</a>.</dd>
+</dl>
+
+<p>Attribute values must be identifiers or strings. The
+case-sensitivity of attribute names and values in selectors depends on
+the document language.</p>
+
+<div class="example">
+
+ <p>Examples:</p>
+
+ <p>The following attribute selector represents an <code>h1</code>
+ element that carries the <code>title</code> attribute, whatever its
+ value:</p>
+
+ <pre>h1[title]</pre>
+
+ <p>In the following example, the selector represents a
+ <code>span</code> element whose <code>class</code> attribute has
+ exactly the value "example":</p>
+
+ <pre>span[class="example"]</pre>
+
+ <p>Multiple attribute selectors can be used to represent several
+ attributes of an element, or several conditions on the same
+ attribute. Here, the selector represents a <code>span</code> element
+ whose <code>hello</code> attribute has exactly the value "Cleveland"
+ and whose <code>goodbye</code> attribute has exactly the value
+ "Columbus":</p>
+
+ <pre>span[hello="Cleveland"][goodbye="Columbus"]</pre>
+
+ <p>The following selectors illustrate the differences between "="
+ and "~=". The first selector will represent, for example, the value
+ "copyright copyleft copyeditor" on a <code>rel</code> attribute. The
+ second selector will only represent an <code>a</code> element with
+ an <code>href</code> attribute having the exact value
+ "http://www.w3.org/".</p>
+
+ <pre>a[rel~="copyright"]
+a[href="http://www.w3.org/"]</pre>
+
+ <p>The following selector represents a <code>link</code> element
+ whose <code>hreflang</code> attribute is exactly "fr".</p>
+
+ <pre>link[hreflang=fr]</pre>
+
+ <p>The following selector represents a <code>link</code> element for
+ which the values of the <code>hreflang</code> attribute begins with
+ "en", including "en", "en-US", and "en-cockney":</p>
+
+ <pre>link[hreflang|="en"]</pre>
+
+ <p>Similarly, the following selectors represents a
+ <code>DIALOGUE</code> element whenever it has one of two different
+ values for an attribute <code>character</code>:</p>
+
+ <pre>DIALOGUE[character=romeo]
+DIALOGUE[character=juliet]</pre>
+
+</div>
+
+<h4><a name=attribute-substrings></a>6.3.2. Substring matching attribute
+selectors</h4>
+
+<p>Three additional attribute selectors are provided for matching
+substrings in the value of an attribute:</p>
+
+<dl>
+ <dt><code>[att^=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value begins
+ with the prefix "val".</dd>
+ <dt><code>[att$=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute whose value ends with
+ the suffix "val".</dd>
+ <dt><code>[att*=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute whose value contains
+ at least one instance of the substring "val".</dd>
+</dl>
+
+<p>Attribute values must be identifiers or strings. The
+case-sensitivity of attribute names in selectors depends on the
+document language.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents an HTML <code>object</code>, referencing an
+ image:</p>
+ <pre>object[type^="image/"]</pre>
+ <p>The following selector represents an HTML anchor <code>a</code> with an
+ <code>href</code> attribute whose value ends with ".html".</p>
+ <pre>a[href$=".html"]</pre>
+ <p>The following selector represents an HTML paragraph with a <code>title</code>
+ attribute whose value contains the substring "hello"</p>
+ <pre>p[title*="hello"]</pre>
+</div>
+
+<h4><a name=attrnmsp>6.3.3. Attribute selectors and namespaces</a></h4>
+
+<p>Attribute selectors allow an optional namespace component to the
+attribute name. A namespace prefix that has been previously declared
+may be prepended to the attribute name separated by the namespace
+separator &quot;vertical bar&quot; (<code>|</code>). In keeping with
+the Namespaces in the XML recommendation, default namespaces do not
+apply to attributes, therefore attribute selectors without a namespace
+component apply only to attributes that have no declared namespace
+(equivalent to "<code>|attr</code>"). An asterisk may be used for the
+namespace prefix indicating that the selector is to match all
+attribute names without regard to the attribute's namespace.
+
+<p>An attribute selector with an attribute name containing a namespace
+prefix that has not been previously declared is an <a
+href="#Conformance">invalid</a> selector. The mechanism for declaring
+a namespace prefix is left up to the language implementing Selectors.
+In CSS, such a mechanism is defined in the General Syntax module.
+
+<div class="example">
+ <p>CSS examples:</p>
+ <pre>@namespace foo "http://www.example.com";
+[foo|att=val] { color: blue }
+[*|att] { color: yellow }
+[|att] { color: green }
+[att] { color: green }</pre>
+
+ <p>The first rule will match only elements with the attribute
+ <code>att</code> in the "http://www.example.com" namespace with the
+ value "val".</p>
+
+ <p>The second rule will match only elements with the attribute
+ <code>att</code> regardless of the namespace of the attribute
+ (including no declared namespace).</p>
+
+ <p>The last two rules are equivalent and will match only elements
+ with the attribute <code>att</code> where the attribute is not
+ declared to be in a namespace.</p>
+
+</div>
+
+<h4><a name=def-values>6.3.4. Default attribute values in DTDs</a></h4>
+
+<p>Attribute selectors represent explicitly set attribute values in
+the document tree. Default attribute values may be defined in a DTD or
+elsewhere, but cannot always be selected by attribute
+selectors. Selectors should be designed so that they work even if the
+default values are not included in the document tree.</p>
+
+<p>More precisely, a UA is <em>not</em> required to read an "external
+subset" of the DTD but <em>is</em> required to look for default
+attribute values in the document's "internal subset." (See <a
+href="#refsXML10">[XML10]</a> for definitions of these subsets.)</p>
+
+<p>A UA that recognizes an XML namespace <a
+href="#refsXMLNAMES">[XMLNAMES]</a> is not required to use its
+knowledge of that namespace to treat default attribute values as if
+they were present in the document. (For example, an XHTML UA is not
+required to use its built-in knowledge of the XHTML DTD.)</p>
+
+<p class="note"><strong>Note:</strong> Typically, implementations
+choose to ignore external subsets.</p>
+
+<div class="example">
+<p>Example:</p>
+
+<p>Consider an element EXAMPLE with an attribute "notation" that has a
+default value of "decimal". The DTD fragment might be</p>
+
+<pre class="dtd-example">&lt;!ATTLIST EXAMPLE notation (decimal,octal) "decimal"></pre>
+
+<p>If the style sheet contains the rules</p>
+
+<pre>EXAMPLE[notation=decimal] { /*... default property settings ...*/ }
+EXAMPLE[notation=octal] { /*... other settings...*/ }</pre>
+
+<p>the first rule will not match elements whose "notation" attribute
+is set by default, i.e. not set explicitly. To catch all cases, the
+attribute selector for the default value must be dropped:</p>
+
+<pre>EXAMPLE { /*... default property settings ...*/ }
+EXAMPLE[notation=octal] { /*... other settings...*/ }</pre>
+
+<p>Here, because the selector <code>EXAMPLE[notation=octal]</code> is
+more specific than the tag
+selector alone, the style declarations in the second rule will override
+those in the first for elements that have a "notation" attribute value
+of "octal". Care has to be taken that all property declarations that
+are to apply only to the default case are overridden in the non-default
+cases' style rules.</p>
+
+</div>
+
+<h3><a name=class-html>6.4. Class selectors</a></h3>
+
+<p>Working with HTML, authors may use the period (U+002E,
+<code>.</code>) notation as an alternative to the <code>~=</code>
+notation when representing the <code>class</code> attribute. Thus, for
+HTML, <code>div.value</code> and <code>div[class~=value]</code> have
+the same meaning. The attribute value must immediately follow the
+&quot;period&quot; (<code>.</code>).</p>
+
+<p>UAs may apply selectors using the period (.) notation in XML
+documents if the UA has namespace-specific knowledge that allows it to
+determine which attribute is the &quot;class&quot; attribute for the
+respective namespace. One such example of namespace-specific knowledge
+is the prose in the specification for a particular namespace (e.g. SVG
+1.0 <a href="#refsSVG">[SVG]</a> describes the <a
+href="http://www.w3.org/TR/2001/PR-SVG-20010719/styling.html#ClassAttribute">SVG
+&quot;class&quot; attribute</a> and how a UA should interpret it, and
+similarly MathML 1.01 <a href="#refsMATH">[MATH]</a> describes the <a
+href="http://www.w3.org/1999/07/REC-MathML-19990707/chapter2.html#sec2.3.4">MathML
+&quot;class&quot; attribute</a>.)</p>
+
+<div class="example">
+ <p>CSS examples:</p>
+
+ <p>We can assign style information to all elements with
+ <code>class~="pastoral"</code> as follows:</p>
+
+ <pre>*.pastoral { color: green } /* all elements with class~=pastoral */</pre>
+
+ <p>or just</p>
+
+ <pre>.pastoral { color: green } /* all elements with class~=pastoral */</pre>
+
+ <p>The following assigns style only to H1 elements with
+ <code>class~="pastoral"</code>:</p>
+
+ <pre>H1.pastoral { color: green } /* H1 elements with class~=pastoral */</pre>
+
+ <p>Given these rules, the first H1 instance below would not have
+ green text, while the second would:</p>
+
+ <pre>&lt;H1&gt;Not green&lt;/H1&gt;
+&lt;H1 class="pastoral"&gt;Very green&lt;/H1&gt;</pre>
+
+</div>
+
+<p>To represent a subset of "class" values, each value must be preceded
+by a ".", in any order.</P>
+
+<div class="example">
+
+ <p>CSS example:</p>
+
+ <p>The following rule matches any P element whose "class" attribute
+ has been assigned a list of <a
+ href="#whitespace">whitespace</a>-separated values that includes
+ "pastoral" and "marine":</p>
+
+ <pre>p.pastoral.marine { color: green }</pre>
+
+ <p>This rule matches when <code>class="pastoral blue aqua
+ marine"</code> but does not match for <code>class="pastoral
+ blue"</code>.</p>
+
+</div>
+
+<p class="note"><strong>Note:</strong> Because CSS gives considerable
+power to the "class" attribute, authors could conceivably design their
+own "document language" based on elements with almost no associated
+presentation (such as DIV and SPAN in HTML) and assigning style
+information through the "class" attribute. Authors should avoid this
+practice since the structural elements of a document language often
+have recognized and accepted meanings and author-defined classes may
+not.</p>
+
+<p class="note"><strong>Note:</strong> If an element has multiple
+class attributes, their values must be concatenated with spaces
+between the values before searching for the class. As of this time the
+working group is not aware of any manner in which this situation can
+be reached, however, so this behavior is explicitly non-normative in
+this specification.</p>
+
+<h3><a name=id-selectors>6.5. ID selectors</a></h3>
+
+<p>Document languages may contain attributes that are declared to be
+of type ID. What makes attributes of type ID special is that no two
+such attributes can have the same value in a document, regardless of
+the type of the elements that carry them; whatever the document
+language, an ID typed attribute can be used to uniquely identify its
+element. In HTML all ID attributes are named "id"; XML applications
+may name ID attributes differently, but the same restriction
+applies.</p>
+
+<p>An ID-typed attribute of a document language allows authors to
+assign an identifier to one element instance in the document tree. W3C
+ID selectors represent an element instance based on its identifier. An
+ID selector contains a &quot;number sign&quot; (U+0023,
+<code>#</code>) immediately followed by the ID value, which must be an
+identifier.</p>
+
+<p>Selectors does not specify how a UA knows the ID-typed attribute of
+an element. The UA may, e.g., read a document's DTD, have the
+information hard-coded or ask the user.
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following ID selector represents an <code>h1</code> element
+ whose ID-typed attribute has the value "chapter1":</p>
+ <pre>h1#chapter1</pre>
+ <p>The following ID selector represents any element whose ID-typed
+ attribute has the value "chapter1":</p>
+ <pre>#chapter1</pre>
+ <p>The following selector represents any element whose ID-typed
+ attribute has the value "z98y".</p>
+ <pre>*#z98y</pre>
+</div>
+
+<p class="note"><strong>Note.</strong> In XML 1.0 <a
+href="#refsXML10">[XML10]</a>, the information about which attribute
+contains an element's IDs is contained in a DTD or a schema. When
+parsing XML, UAs do not always read the DTD, and thus may not know
+what the ID of an element is (though a UA may have namespace-specific
+knowledge that allows it to determine which attribute is the ID
+attribute for that namespace). If a style sheet designer knows or
+suspects that a UA may not know what the ID of an element is, he
+should use normal attribute selectors instead:
+<code>[name=p371]</code> instead of <code>#p371</code>. Elements in
+XML 1.0 documents without a DTD do not have IDs at all.</p>
+
+<p>If an element has multiple ID attributes, all of them must be
+treated as IDs for that element for the purposes of the ID
+selector. Such a situation could be reached using mixtures of xml:id,
+DOM3 Core, XML DTDs, and namespace-specific knowledge.</p>
+
+<h3><a name=pseudo-classes>6.6. Pseudo-classes</a></h3>
+
+<p>The pseudo-class concept is introduced to permit selection based on
+information that lies outside of the document tree or that cannot be
+expressed using the other simple selectors.</p>
+
+<p>A pseudo-class always consists of a &quot;colon&quot;
+(<code>:</code>) followed by the name of the pseudo-class and
+optionally by a value between parentheses.</p>
+
+<p>Pseudo-classes are allowed in all sequences of simple selectors
+contained in a selector. Pseudo-classes are allowed anywhere in
+sequences of simple selectors, after the leading type selector or
+universal selector (possibly omitted). Pseudo-class names are
+case-insensitive. Some pseudo-classes are mutually exclusive, while
+others can be applied simultaneously to the same
+element. Pseudo-classes may be dynamic, in the sense that an element
+may acquire or lose a pseudo-class while a user interacts with the
+document.</p>
+
+
+<h4><a name=dynamic-pseudos>6.6.1. Dynamic pseudo-classes</a></h4>
+
+<p>Dynamic pseudo-classes classify elements on characteristics other
+than their name, attributes, or content, in principle characteristics
+that cannot be deduced from the document tree.</p>
+
+<p>Dynamic pseudo-classes do not appear in the document source or
+document tree.</p>
+
+
+<h5>The <a name=link>link pseudo-classes: :link and :visited</a></h5>
+
+<p>User agents commonly display unvisited links differently from
+previously visited ones. Selectors
+provides the pseudo-classes <code>:link</code> and
+<code>:visited</code> to distinguish them:</p>
+
+<ul>
+ <li>The <code>:link</code> pseudo-class applies to links that have
+ not yet been visited.</li>
+ <li>The <code>:visited</code> pseudo-class applies once the link has
+ been visited by the user. </li>
+</ul>
+
+<p>After some amount of time, user agents may choose to return a
+visited link to the (unvisited) ':link' state.</p>
+
+<p>The two states are mutually exclusive.</p>
+
+<div class="example">
+
+ <p>Example:</p>
+
+ <p>The following selector represents links carrying class
+ <code>external</code> and already visited:</p>
+
+ <pre>a.external:visited</pre>
+
+</div>
+
+<p class="note"><strong>Note:</strong> It is possible for style sheet
+authors to abuse the :link and :visited pseudo-classes to determine
+which sites a user has visited without the user's consent.
+
+<p>UAs may therefore treat all links as unvisited links, or implement
+other measures to preserve the user's privacy while rendering visited
+and unvisited links differently.</p>
+
+<h5>The <a name=useraction-pseudos>user action pseudo-classes
+:hover, :active, and :focus</a></h5>
+
+<p>Interactive user agents sometimes change the rendering in response
+to user actions. Selectors provides
+three pseudo-classes for the selection of an element the user is
+acting on.</p>
+
+<ul>
+
+ <li>The <code>:hover</code> pseudo-class applies while the user
+ designates an element with a pointing device, but does not activate
+ it. For example, a visual user agent could apply this pseudo-class
+ when the cursor (mouse pointer) hovers over a box generated by the
+ element. User agents not that do not support <a
+ href="http://www.w3.org/TR/REC-CSS2/media.html#interactive-media-group">interactive
+ media</a> do not have to support this pseudo-class. Some conforming
+ user agents that support <a
+ href="http://www.w3.org/TR/REC-CSS2/media.html#interactive-media-group">interactive
+ media</a> may not be able to support this pseudo-class (e.g., a pen
+ device that does not detect hovering).</li>
+
+ <li>The <code>:active</code> pseudo-class applies while an element
+ is being activated by the user. For example, between the times the
+ user presses the mouse button and releases it.</li>
+
+ <li>The <code>:focus</code> pseudo-class applies while an element
+ has the focus (accepts keyboard or mouse events, or other forms of
+ input). </li>
+
+</ul>
+
+<p>There may be document language or implementation specific limits on
+which elements can become <code>:active</code> or acquire
+<code>:focus</code>.</p>
+
+<p>These pseudo-classes are not mutually exclusive. An element may
+match several pseudo-classes at the same time.</p>
+
+<p>Selectors doesn't define if the parent of an element that is
+':active' or ':hover' is also in that state.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <pre>a:link /* unvisited links */
+a:visited /* visited links */
+a:hover /* user hovers */
+a:active /* active links */</pre>
+ <p>An example of combining dynamic pseudo-classes:</p>
+ <pre>a:focus
+a:focus:hover</pre>
+ <p>The last selector matches <code>a</code> elements that are in
+ the pseudo-class :focus and in the pseudo-class :hover.</p>
+</div>
+
+<p class="note"><strong>Note:</strong> An element can be both ':visited'
+and ':active' (or ':link' and ':active').</p>
+
+<h4><a name=target-pseudo>6.6.2. The target pseudo-class :target</a></h4>
+
+<p>Some URIs refer to a location within a resource. This kind of URI
+ends with a &quot;number sign&quot; (#) followed by an anchor
+identifier (called the fragment identifier).</p>
+
+<p>URIs with fragment identifiers link to a certain element within the
+document, known as the target element. For instance, here is a URI
+pointing to an anchor named <code>section_2</code> in an HTML
+document:</p>
+
+<pre>http://example.com/html/top.html#section_2</pre>
+
+<p>A target element can be represented by the <code>:target</code>
+pseudo-class. If the document's URI has no fragment identifier, then
+the document has no target element.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <pre>p.note:target</pre>
+ <p>This selector represents a <code>p</code> element of class
+ <code>note</code> that is the target element of the referring
+ URI.</p>
+</div>
+
+<div class="example">
+ <p>CSS example:</p>
+ <p>Here, the <code>:target</code> pseudo-class is used to make the
+ target element red and place an image before it, if there is one:</p>
+ <pre>*:target { color : red }
+*:target::before { content : url(target.png) }</pre>
+</div>
+
+<h4><a name=lang-pseudo>6.6.3. The language pseudo-class :lang</a></h4>
+
+<p>If the document language specifies how the human language of an
+element is determined, it is possible to write selectors that
+represent an element based on its language. For example, in HTML <a
+href="#refsHTML4">[HTML4]</a>, the language is determined by a
+combination of the <code>lang</code> attribute, the <code>meta</code>
+element, and possibly by information from the protocol (such as HTTP
+headers). XML uses an attribute called <code>xml:lang</code>, and
+there may be other document language-specific methods for determining
+the language.</p>
+
+<p>The pseudo-class <code>:lang(C)</code> represents an element that
+is in language C. Whether an element is represented by a
+<code>:lang()</code> selector is based solely on the identifier C
+being either equal to, or a hyphen-separated substring of, the
+element's language value, in the same way as if performed by the <a
+href="#attribute-representation">'|='</a> operator in attribute
+selectors. The identifier C does not have to be a valid language
+name.</p>
+
+<p>C must not be empty. (If it is, the selector is invalid.)</p>
+
+<p class="note"><strong>Note:</strong> It is recommended that
+documents and protocols indicate language using codes from RFC 3066 <a
+href="#refsRFC3066">[RFC3066]</a> or its successor, and by means of
+"xml:lang" attributes in the case of XML-based documents <a
+href="#refsXML10">[XML10]</a>. See <a
+href="http://www.w3.org/International/questions/qa-lang-2or3.html">
+"FAQ: Two-letter or three-letter language codes."</a></p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The two following selectors represent an HTML document that is in
+ Belgian, French, or German. The two next selectors represent
+ <code>q</code> quotations in an arbitrary element in Belgian, French,
+ or German.</p>
+ <pre>html:lang(fr-be)
+html:lang(de)
+:lang(fr-be) &gt; q
+:lang(de) &gt; q</pre>
+</div>
+
+<h4><a name=UIstates>6.6.4. The UI element states pseudo-classes</a></h4>
+
+<h5><a name=enableddisabled>The :enabled and :disabled pseudo-classes</a></h5>
+
+<p>The <code>:enabled</code> pseudo-class allows authors to customize
+the look of user interface elements that are enabled &mdash; which the
+user can select or activate in some fashion (e.g. clicking on a button
+with a mouse). There is a need for such a pseudo-class because there
+is no way to programmatically specify the default appearance of say,
+an enabled <code>input</code> element without also specifying what it
+would look like when it was disabled.</p>
+
+<p>Similar to <code>:enabled</code>, <code>:disabled</code> allows the
+author to specify precisely how a disabled or inactive user interface
+element should look.</p>
+
+<p>Most elements will be neither enabled nor disabled. An element is
+enabled if the user can either activate it or transfer the focus to
+it. An element is disabled if it could be enabled, but the user cannot
+presently activate it or transfer focus to it.</p>
+
+
+<h5><a name=checked>The :checked pseudo-class</a></h5>
+
+<p>Radio and checkbox elements can be toggled by the user. Some menu
+items are "checked" when the user selects them. When such elements are
+toggled "on" the <code>:checked</code> pseudo-class applies. The
+<code>:checked</code> pseudo-class initially applies to such elements
+that have the HTML4 <code>selected</code> and <code>checked</code>
+attributes as described in <a
+href="http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.2.1">Section
+17.2.1 of HTML4</a>, but of course the user can toggle "off" such
+elements in which case the <code>:checked</code> pseudo-class would no
+longer apply. While the <code>:checked</code> pseudo-class is dynamic
+in nature, and is altered by user action, since it can also be based
+on the presence of the semantic HTML4 <code>selected</code> and
+<code>checked</code> attributes, it applies to all media.
+
+
+<h5><a name=indeterminate>The :indeterminate pseudo-class</a></h5>
+
+<div class="note">
+
+<p>Radio and checkbox elements can be toggled by the user, but are
+sometimes in an indeterminate state, neither checked nor unchecked.
+This can be due to an element attribute, or DOM manipulation.</p>
+
+<p>A future version of this specification may introduce an
+<code>:indeterminate</code> pseudo-class that applies to such elements.
+<!--While the <code>:indeterminate</code> pseudo-class is dynamic in
+nature, and is altered by user action, since it can also be based on
+the presence of an element attribute, it applies to all media.</p>
+
+<p>Components of a radio-group initialized with no pre-selected choice
+are an example of :indeterminate state.--></p>
+
+</div>
+
+
+<h4><a name=structural-pseudos>6.6.5. Structural pseudo-classes</a></h4>
+
+<p>Selectors introduces the concept of <dfn>structural
+pseudo-classes</dfn> to permit selection based on extra information that lies in
+the document tree but cannot be represented by other simple selectors or
+combinators.
+
+<p>Note that standalone pieces of PCDATA (text nodes in the DOM) are
+not counted when calculating the position of an element in the list of
+children of its parent. When calculating the position of an element in
+the list of children of its parent, the index numbering starts at 1.
+
+
+<h5><a name=root-pseudo>:root pseudo-class</a></h5>
+
+<p>The <code>:root</code> pseudo-class represents an element that is
+the root of the document. In HTML 4, this is always the
+<code>HTML</code> element.
+
+
+<h5><a name=nth-child-pseudo>:nth-child() pseudo-class</a></h5>
+
+<p>The
+<code>:nth-child(<var>a</var><code>n</code>+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings
+<strong>before</strong> it in the document tree, for a given positive
+integer or zero value of <code>n</code>, and has a parent element. In
+other words, this matches the <var>b</var>th child of an element after
+all the children have been split into groups of <var>a</var> elements
+each. For example, this allows the selectors to address every other
+row in a table, and could be used to alternate the color
+of paragraph text in a cycle of four. The <var>a</var> and
+<var>b</var> values must be zero, negative integers or positive
+integers. The index of the first child of an element is 1.
+
+<p>In addition to this, <code>:nth-child()</code> can take
+'<code>odd</code>' and '<code>even</code>' as arguments instead.
+'<code>odd</code>' has the same signification as <code>2n+1</code>,
+and '<code>even</code>' has the same signification as <code>2n</code>.
+
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-child(2n+1) /* represents every odd row of an HTML table */
+tr:nth-child(odd) /* same */
+tr:nth-child(2n) /* represents every even row of an HTML table */
+tr:nth-child(even) /* same */
+
+/* Alternate paragraph colours in CSS */
+p:nth-child(4n+1) { color: navy; }
+p:nth-child(4n+2) { color: green; }
+p:nth-child(4n+3) { color: maroon; }
+p:nth-child(4n+4) { color: purple; }</pre>
+</div>
+
+<p>When <var>a</var>=0, no repeating is used, so for example
+<code>:nth-child(0n+5)</code> matches only the fifth child. When
+<var>a</var>=0, the <var>a</var><code>n</code> part need not be
+included, so the syntax simplifies to
+<code>:nth-child(<var>b</var>)</code> and the last example simplifies
+to <code>:nth-child(5)</code>.
+
+<div class="example">
+<p>Examples:</p>
+<pre>foo:nth-child(0n+1) /* represents an element foo, first child of its parent element */
+foo:nth-child(1) /* same */</pre>
+</div>
+
+<p>When <var>a</var>=1, the number may be omitted from the rule.
+
+<div class="example">
+<p>Examples:</p>
+<p>The following selectors are therefore equivalent:</p>
+<pre>bar:nth-child(1n+0) /* represents all bar elements, specificity (0,1,1) */
+bar:nth-child(n+0) /* same */
+bar:nth-child(n) /* same */
+bar /* same but lower specificity (0,0,1) */</pre>
+</div>
+
+<p>If <var>b</var>=0, then every <var>a</var>th element is picked. In
+such a case, the <var>b</var> part may be omitted.
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-child(2n+0) /* represents every even row of an HTML table */
+tr:nth-child(2n) /* same */</pre>
+</div>
+
+<p>If both <var>a</var> and <var>b</var> are equal to zero, the
+pseudo-class represents no element in the document tree.</p>
+
+<p>The value <var>a</var> can be negative, but only the positive
+values of <var>a</var><code>n</code>+<var>b</var>, for
+<code>n</code>&ge;0, may represent an element in the document
+tree.</p>
+
+<div class="example">
+<p>Example:</p>
+<pre>html|tr:nth-child(-n+6) /* represents the 6 first rows of XHTML tables */</pre>
+</div>
+
+<p>When the value <var>b</var> is negative, the "+" character in the
+expression must be removed (it is effectively replaced by the "-"
+character indicating the negative value of <var>b</var>).</p>
+
+<div class="example">
+<p>Examples:</p>
+<pre>:nth-child(10n-1) /* represents the 9th, 19th, 29th, etc, element */
+:nth-child(10n+9) /* Same */
+:nth-child(10n+-1) /* Syntactically invalid, and would be ignored */</pre>
+</div>
+
+
+<h5><a name=nth-last-child-pseudo>:nth-last-child() pseudo-class</a></h5>
+
+<p>The <code>:nth-last-child(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings
+<strong>after</strong> it in the document tree, for a given positive
+integer or zero value of <code>n</code>, and has a parent element. See
+<code>:nth-child()</code> pseudo-class for the syntax of its argument.
+It also accepts the '<code>even</code>' and '<code>odd</code>' values
+as arguments.
+
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-last-child(-n+2) /* represents the two last rows of an HTML table */
+
+foo:nth-last-child(odd) /* represents all odd foo elements in their parent element,
+ counting from the last one */</pre>
+</div>
+
+
+<h5><a name=nth-of-type-pseudo>:nth-of-type() pseudo-class</a></h5>
+
+<p>The <code>:nth-of-type(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings with the same
+element name <strong>before</strong> it in the document tree, for a
+given zero or positive integer value of <code>n</code>, and has a
+parent element. In other words, this matches the <var>b</var>th child
+of that type after all the children of that type have been split into
+groups of a elements each. See <code>:nth-child()</code> pseudo-class
+for the syntax of its argument. It also accepts the
+'<code>even</code>' and '<code>odd</code>' values.
+
+
+<div class="example">
+<p>CSS example:</p>
+<p>This allows an author to alternate the position of floated images:</p>
+<pre>img:nth-of-type(2n+1) { float: right; }
+img:nth-of-type(2n) { float: left; }</pre>
+</div>
+
+
+<h5><a name=nth-last-of-type-pseudo>:nth-last-of-type() pseudo-class</a></h5>
+
+<p>The <code>:nth-last-of-type(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings with the same
+element name <strong>after</strong> it in the document tree, for a
+given zero or positive integer value of <code>n</code>, and has a
+parent element. See <code>:nth-child()</code> pseudo-class for the
+syntax of its argument. It also accepts the '<code>even</code>' and '<code>odd</code>' values.
+
+
+<div class="example">
+ <p>Example:</p>
+ <p>To represent all <code>h2</code> children of an XHTML
+ <code>body</code> except the first and last, one could use the
+ following selector:</p>
+ <pre>body &gt; h2:nth-of-type(n+2):nth-last-of-type(n+2)</pre>
+ <p>In this case, one could also use <code>:not()</code>, although the
+ selector ends up being just as long:</p>
+ <pre>body &gt; h2:not(:first-of-type):not(:last-of-type)</pre>
+</div>
+
+
+<h5><a name=first-child-pseudo>:first-child pseudo-class</a></h5>
+
+<p>Same as <code>:nth-child(1)</code>. The <code>:first-child</code> pseudo-class
+represents an element that is the first child of some other element.
+
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element that is
+ the first child of a <code>div</code> element:</p>
+ <pre>div &gt; p:first-child</pre>
+ <p>This selector can represent the <code>p</code> inside the
+ <code>div</code> of the following fragment:</p>
+ <pre>&lt;p&gt; The last P before the note.&lt;/p&gt;
+&lt;div class="note"&gt;
+ &lt;p&gt; The first P inside the note.&lt;/p&gt;
+&lt;/div&gt;</pre>but cannot represent the second <code>p</code> in the following
+fragment:
+ <pre>&lt;p&gt; The last P before the note.&lt;/p&gt;
+&lt;div class="note"&gt;
+ &lt;h2&gt; Note &lt;/h2&gt;
+ &lt;p&gt; The first P inside the note.&lt;/p&gt;
+&lt;/div&gt;</pre>
+ <p>The following two selectors are usually equivalent:</p>
+ <pre>* &gt; a:first-child /* a is first child of any element */
+a:first-child /* Same (assuming a is not the root element) */</pre>
+</div>
+
+<h5><a name=last-child-pseudo>:last-child pseudo-class</a></h5>
+
+<p>Same as <code>:nth-last-child(1)</code>. The <code>:last-child</code> pseudo-class
+represents an element that is the last child of some other element.
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents a list item <code>li</code> that
+ is the last child of an ordered list <code>ol</code>.
+ <pre>ol &gt; li:last-child</pre>
+</div>
+
+<h5><a name=first-of-type-pseudo>:first-of-type pseudo-class</a></h5>
+
+<p>Same as <code>:nth-of-type(1)</code>. The <code>:first-of-type</code> pseudo-class
+represents an element that is the first sibling of its type in the list of
+children of its parent element.
+
+<div class="example">
+<p>Example:</p>
+<p>The following selector represents a definition title
+<code>dt</code> inside a definition list <code>dl</code>, this
+<code>dt</code> being the first of its type in the list of children of
+its parent element.</p>
+<pre>dl dt:first-of-type</pre>
+<p>It is a valid description for the first two <code>dt</code>
+elements in the following example but not for the third one:</p>
+<pre>&lt;dl&gt;
+ &lt;dt&gt;gigogne&lt;/dt&gt;
+ &lt;dd&gt;
+ &lt;dl&gt;
+ &lt;dt&gt;fus&eacute;e&lt;/dt&gt;
+ &lt;dd&gt;multistage rocket&lt;/dd&gt;
+ &lt;dt&gt;table&lt;/dt&gt;
+ &lt;dd&gt;nest of tables&lt;/dd&gt;
+ &lt;/dl&gt;
+ &lt;/dd&gt;
+&lt;/dl&gt;</pre>
+</div>
+
+<h5><a name=last-of-type-pseudo>:last-of-type pseudo-class</a></h5>
+
+<p>Same as <code>:nth-last-of-type(1)</code>. The
+<code>:last-of-type</code> pseudo-class represents an element that is
+the last sibling of its type in the list of children of its parent
+element.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents the last data cell
+ <code>td</code> of a table row.</p>
+ <pre>tr &gt; td:last-of-type</pre>
+</div>
+
+<h5><a name=only-child-pseudo>:only-child pseudo-class</a></h5>
+
+<p>Represents an element that has a parent element and whose parent
+element has no other element children. Same as
+<code>:first-child:last-child</code> or
+<code>:nth-child(1):nth-last-child(1)</code>, but with a lower
+specificity.</p>
+
+<h5><a name=only-of-type-pseudo>:only-of-type pseudo-class</a></h5>
+
+<p>Represents an element that has a parent element and whose parent
+element has no other element children with the same element name. Same
+as <code>:first-of-type:last-of-type</code> or
+<code>:nth-of-type(1):nth-last-of-type(1)</code>, but with a lower
+specificity.</p>
+
+
+<h5><a name=empty-pseudo></a>:empty pseudo-class</h5>
+
+<p>The <code>:empty</code> pseudo-class represents an element that has
+no children at all. In terms of the DOM, only element nodes and text
+nodes (including CDATA nodes and entity references) whose data has a
+non-zero length must be considered as affecting emptiness; comments,
+PIs, and other nodes must not affect whether an element is considered
+empty or not.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p><code>p:empty</code> is a valid representation of the following fragment:</p>
+ <pre>&lt;p&gt;&lt;/p&gt;</pre>
+ <p><code>foo:empty</code> is not a valid representation for the
+ following fragments:</p>
+ <pre>&lt;foo&gt;bar&lt;/foo&gt;</pre>
+ <pre>&lt;foo&gt;&lt;bar&gt;bla&lt;/bar&gt;&lt;/foo&gt;</pre>
+ <pre>&lt;foo&gt;this is not &lt;bar&gt;:empty&lt;/bar&gt;&lt;/foo&gt;</pre>
+</div>
+
+<h4><a name=content-selectors>6.6.6. Blank</a></h4> <!-- It's the Return of Appendix H!!! Run away! -->
+
+<p>This section intentionally left blank.</p>
+<!-- (used to be :contains()) -->
+
+<h4><a name=negation></a>6.6.7. The negation pseudo-class</h4>
+
+<p>The negation pseudo-class, <code>:not(<var>X</var>)</code>, is a
+functional notation taking a <a href="#simple-selectors-dfn">simple
+selector</a> (excluding the negation pseudo-class itself and
+pseudo-elements) as an argument. It represents an element that is not
+represented by the argument.
+
+<!-- pseudo-elements are not simple selectors, so the above paragraph
+may be a bit confusing -->
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following CSS selector matches all <code>button</code>
+ elements in an HTML document that are not disabled.</p>
+ <pre>button:not([DISABLED])</pre>
+ <p>The following selector represents all but <code>FOO</code>
+ elements.</p>
+ <pre>*:not(FOO)</pre>
+ <p>The following group of selectors represents all HTML elements
+ except links.</p>
+ <pre>html|*:not(:link):not(:visited)</pre>
+</div>
+
+<p>Default namespace declarations do not affect the argument of the
+negation pseudo-class unless the argument is a universal selector or a
+type selector.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>Assuming that the default namespace is bound to
+ "http://example.com/", the following selector represents all
+ elements that are not in that namespace:</p>
+ <pre>*|*:not(*)</pre>
+ <p>The following CSS selector matches any element being hovered,
+ regardless of its namespace. In particular, it is not limited to
+ only matching elements in the default namespace that are not being
+ hovered, and elements not in the default namespace don't match the
+ rule when they <em>are</em> being hovered.</p>
+ <pre>*|*:not(:hover)</pre>
+</div>
+
+<p class="note"><strong>Note</strong>: the :not() pseudo allows
+useless selectors to be written. For instance <code>:not(*|*)</code>,
+which represents no element at all, or <code>foo:not(bar)</code>,
+which is equivalent to <code>foo</code> but with a higher
+specificity.</p>
+
+<h3><a name=pseudo-elements>7. Pseudo-elements</a></h3>
+
+<p>Pseudo-elements create abstractions about the document tree beyond
+those specified by the document language. For instance, document
+languages do not offer mechanisms to access the first letter or first
+line of an element's content. Pseudo-elements allow designers to refer
+to this otherwise inaccessible information. Pseudo-elements may also
+provide designers a way to refer to content that does not exist in the
+source document (e.g., the <code>::before</code> and
+<code>::after</code> pseudo-elements give access to generated
+content).</p>
+
+<p>A pseudo-element is made of two colons (<code>::</code>) followed
+by the name of the pseudo-element.</p>
+
+<p>This <code>::</code> notation is introduced by the current document
+in order to establish a discrimination between pseudo-classes and
+pseudo-elements. For compatibility with existing style sheets, user
+agents must also accept the previous one-colon notation for
+pseudo-elements introduced in CSS levels 1 and 2 (namely,
+<code>:first-line</code>, <code>:first-letter</code>,
+<code>:before</code> and <code>:after</code>). This compatibility is
+not allowed for the new pseudo-elements introduced in CSS level 3.</p>
+
+<p>Only one pseudo-element may appear per selector, and if present it
+must appear after the sequence of simple selectors that represents the
+<a href="#subject">subjects</a> of the selector. <span class="note">A
+future version of this specification may allow multiple
+pesudo-elements per selector.</span></p>
+
+<h4><a name=first-line>7.1. The ::first-line pseudo-element</a></h4>
+
+<p>The <code>::first-line</code> pseudo-element describes the contents
+of the first formatted line of an element.
+
+<div class="example">
+<p>CSS example:</p>
+<pre>p::first-line { text-transform: uppercase }</pre>
+<p>The above rule means "change the letters of the first line of every
+paragraph to uppercase".</p>
+</div>
+
+<p>The selector <code>p::first-line</code> does not match any real
+HTML element. It does match a pseudo-element that conforming user
+agents will insert at the beginning of every paragraph.</p>
+
+<p>Note that the length of the first line depends on a number of
+factors, including the width of the page, the font size, etc. Thus,
+an ordinary HTML paragraph such as:</p>
+
+<pre>
+&lt;P&gt;This is a somewhat long HTML
+paragraph that will be broken into several
+lines. The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>the lines of which happen to be broken as follows:
+
+<pre>
+THIS IS A SOMEWHAT LONG HTML PARAGRAPH THAT
+will be broken into several lines. The first
+line will be identified by a fictional tag
+sequence. The other lines will be treated as
+ordinary lines in the paragraph.
+</pre>
+
+<p>This paragraph might be "rewritten" by user agents to include the
+<em>fictional tag sequence</em> for <code>::first-line</code>. This
+fictional tag sequence helps to show how properties are inherited.</p>
+
+<pre>
+&lt;P&gt;<b>&lt;P::first-line&gt;</b> This is a somewhat long HTML
+paragraph that <b>&lt;/P::first-line&gt;</b> will be broken into several
+lines. The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>If a pseudo-element breaks up a real element, the desired effect
+can often be described by a fictional tag sequence that closes and
+then re-opens the element. Thus, if we mark up the previous paragraph
+with a <code>span</code> element:</p>
+
+<pre>
+&lt;P&gt;<b>&lt;SPAN class="test"&gt;</b> This is a somewhat long HTML
+paragraph that will be broken into several
+lines.<b>&lt;/SPAN&gt;</b> The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>the user agent could simulate start and end tags for
+<code>span</code> when inserting the fictional tag sequence for
+<code>::first-line</code>.
+
+<pre>
+&lt;P&gt;&lt;P::first-line&gt;<b>&lt;SPAN class="test"&gt;</b> This is a
+somewhat long HTML
+paragraph that will <b>&lt;/SPAN&gt;</b>&lt;/P::first-line&gt;<b>&lt;SPAN class="test"&gt;</b> be
+broken into several
+lines.<b>&lt;/SPAN&gt;</b> The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>In CSS, the <code>::first-line</code> pseudo-element can only be
+attached to a block-level element, an inline-block, a table-caption,
+or a table-cell.</p>
+
+<p><a name="first-formatted-line"></a>The "first formatted line" of an
+element may occur inside a
+block-level descendant in the same flow (i.e., a block-level
+descendant that is not positioned and not a float). E.g., the first
+line of the <code>div</code> in <code>&lt;DIV>&lt;P>This
+line...&lt;/P>&lt/DIV></code> is the first line of the <code>p</code> (assuming
+that both <code>p</code> and <code>div</code> are block-level).
+
+<p>The first line of a table-cell or inline-block cannot be the first
+formatted line of an ancestor element. Thus, in <code>&lt;DIV&gt;&lt;P
+STYLE="display: inline-block">Hello&lt;BR&gt;Goodbye&lt;/P&gt;
+etcetera&lt;/DIV&gt;</code> the first formatted line of the
+<code>div</code> is not the line "Hello".
+
+<p class="note">Note that the first line of the <code>p</code> in this
+fragment: <code>&lt;p&gt&lt;br&gt;First...</code> doesn't contain any
+letters (assuming the default style for <code>br</code> in HTML
+4). The word "First" is not on the first formatted line.
+
+<p>A UA should act as if the fictional start tags of the
+<code>::first-line</code> pseudo-elements were nested just inside the
+innermost enclosing block-level element. (Since CSS1 and CSS2 were
+silent on this case, authors should not rely on this behavior.) Here
+is an example. The fictional tag sequence for</p>
+
+<pre>
+&lt;DIV>
+ &lt;P>First paragraph&lt;/P>
+ &lt;P>Second paragraph&lt;/P>
+&lt;/DIV>
+</pre>
+
+<p>is</p>
+
+<pre>
+&lt;DIV>
+ &lt;P>&lt;DIV::first-line>&lt;P::first-line>First paragraph&lt;/P::first-line>&lt;/DIV::first-line>&lt;/P>
+ &lt;P>&lt;P::first-line>Second paragraph&lt;/P::first-line>&lt;/P>
+&lt;/DIV>
+</pre>
+
+<p>The <code>::first-line</code> pseudo-element is similar to an
+inline-level element, but with certain restrictions. In CSS, the
+following properties apply to a <code>::first-line</code>
+pseudo-element: font properties, color property, background
+properties, 'word-spacing', 'letter-spacing', 'text-decoration',
+'vertical-align', 'text-transform', 'line-height'. UAs may apply other
+properties as well.</p>
+
+
+<h4><a name=first-letter>7.2. The ::first-letter pseudo-element</a></h4>
+
+<p>The <code>::first-letter</code> pseudo-element represents the first
+letter of the first line of a block, if it is not preceded by any
+other content (such as images or inline tables) on its line. The
+::first-letter pseudo-element may be used for "initial caps" and "drop
+caps", which are common typographical effects. This type of initial
+letter is similar to an inline-level element if its 'float' property
+is 'none'; otherwise, it is similar to a floated element.</p>
+
+<p>In CSS, these are the properties that apply to <code>::first-letter</code>
+pseudo-elements: font properties, 'text-decoration', 'text-transform',
+'letter-spacing', 'word-spacing' (when appropriate), 'line-height',
+'float', 'vertical-align' (only if 'float' is 'none'), margin
+properties, padding properties, border properties, color property,
+background properties. UAs may apply other properties as well. To
+allow UAs to render a typographically correct drop cap or initial cap,
+the UA may choose a line-height, width and height based on the shape
+of the letter, unlike for normal elements.</p>
+
+<div class="example">
+<p>Example:</p>
+<p>This example shows a possible rendering of an initial cap. Note
+that the 'line-height' that is inherited by the <code>::first-letter</code>
+pseudo-element is 1.1, but the UA in this example has computed the
+height of the first letter differently, so that it doesn't cause any
+unnecessary space between the first two lines. Also note that the
+fictional start tag of the first letter is inside the <span>span</span>, and thus
+the font weight of the first letter is normal, not bold as the <span>span</span>:
+<pre>
+p { line-height: 1.1 }
+p::first-letter { font-size: 3em; font-weight: normal }
+span { font-weight: bold }
+...
+&lt;p>&lt;span>Het hemelsche&lt;/span> gerecht heeft zich ten lange lesten&lt;br>
+Erbarremt over my en mijn benaeuwde vesten&lt;br>
+En arme burgery, en op mijn volcx gebed&lt;br>
+En dagelix geschrey de bange stad ontzet.
+</pre>
+<div class="figure">
+<p><img src="initial-cap.png" alt="Image illustrating the ::first-letter pseudo-element">
+</div>
+</div>
+
+<div class="example">
+<p>The following CSS will make a drop cap initial letter span about two lines:</p>
+
+<pre>
+&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"&gt;
+&lt;HTML&gt;
+ &lt;HEAD&gt;
+ &lt;TITLE&gt;Drop cap initial letter&lt;/TITLE&gt;
+ &lt;STYLE type="text/css"&gt;
+ P { font-size: 12pt; line-height: 1.2 }
+ P::first-letter { font-size: 200%; font-weight: bold; float: left }
+ SPAN { text-transform: uppercase }
+ &lt;/STYLE&gt;
+ &lt;/HEAD&gt;
+ &lt;BODY&gt;
+ &lt;P&gt;&lt;SPAN&gt;The first&lt;/SPAN&gt; few words of an article
+ in The Economist.&lt;/P&gt;
+ &lt;/BODY&gt;
+&lt;/HTML&gt;
+</pre>
+
+<p>This example might be formatted as follows:</p>
+
+<div class="figure">
+<P><img src="first-letter.gif" alt="Image illustrating the combined effect of the ::first-letter and ::first-line pseudo-elements"></p>
+</div>
+
+<p>The <span class="index-inst" title="fictional tag
+sequence">fictional tag sequence</span> is:</p>
+
+<pre>
+&lt;P&gt;
+&lt;SPAN&gt;
+&lt;P::first-letter&gt;
+T
+&lt;/P::first-letter&gt;he first
+&lt;/SPAN&gt;
+few words of an article in the Economist.
+&lt;/P&gt;
+</pre>
+
+<p>Note that the <code>::first-letter</code> pseudo-element tags abut
+the content (i.e., the initial character), while the ::first-line
+pseudo-element start tag is inserted right after the start tag of the
+block element.</p> </div>
+
+<p>In order to achieve traditional drop caps formatting, user agents
+may approximate font sizes, for example to align baselines. Also, the
+glyph outline may be taken into account when formatting.</p>
+
+<p>Punctuation (i.e, characters defined in Unicode in the "open" (Ps),
+"close" (Pe), "initial" (Pi). "final" (Pf) and "other" (Po)
+punctuation classes), that precedes or follows the first letter should
+be included. <a href="#refsUNICODE">[UNICODE]</a></p>
+
+<div class="figure">
+<P><img src="first-letter2.gif" alt="Quotes that precede the
+first letter should be included."></p>
+</div>
+
+<p>The <code>::first-letter</code> also applies if the first letter is
+in fact a digit, e.g., the "6" in "67 million dollars is a lot of
+money."</p>
+
+<p>In CSS, the <code>::first-letter</code> pseudo-element applies to
+block, list-item, table-cell, table-caption, and inline-block
+elements. <span class="note">A future version of this specification
+may allow this pesudo-element to apply to more element
+types.</span></p>
+
+<p>The <code>::first-letter</code> pseudo-element can be used with all
+such elements that contain text, or that have a descendant in the same
+flow that contains text. A UA should act as if the fictional start tag
+of the ::first-letter pseudo-element is just before the first text of
+the element, even if that first text is in a descendant.</p>
+
+<div class="example">
+<p>Example:</p>
+<p>The fictional tag sequence for this HTMLfragment:
+<pre>&lt;div>
+&lt;p>The first text.</pre>
+<p>is:
+<pre>&lt;div>
+&lt;p>&lt;div::first-letter>&lt;p::first-letter>T&lt;/...>&lt;/...>he first text.</pre>
+</div>
+
+<p>The first letter of a table-cell or inline-block cannot be the
+first letter of an ancestor element. Thus, in <code>&lt;DIV&gt;&lt;P
+STYLE="display: inline-block">Hello&lt;BR&gt;Goodbye&lt;/P&gt;
+etcetera&lt;/DIV&gt;</code> the first letter of the <code>div</code> is not the
+letter "H". In fact, the <code>div</code> doesn't have a first letter.
+
+<p>The first letter must occur on the <a
+href="#first-formatted-line">first formatted line.</a> For example, in
+this fragment: <code>&lt;p&gt&lt;br&gt;First...</code> the first line
+doesn't contain any letters and <code>::first-letter</code> doesn't
+match anything (assuming the default style for <code>br</code> in HTML
+4). In particular, it does not match the "F" of "First."
+
+<p>In CSS, if an element is a list item ('display: list-item'), the
+<code>::first-letter</code> applies to the first letter in the
+principal box after the marker. UAs may ignore
+<code>::first-letter</code> on list items with 'list-style-position:
+inside'. If an element has <code>::before</code> or
+<code>::after</code> content, the <code>::first-letter</code> applies
+to the first letter of the element <em>including</em> that content.
+
+<div class="example">
+<p>Example:</p>
+<p>After the rule 'p::before {content: "Note: "}', the selector
+'p::first-letter' matches the "N" of "Note".</p>
+</div>
+
+<p>Some languages may have specific rules about how to treat certain
+letter combinations. In Dutch, for example, if the letter combination
+"ij" appears at the beginning of a word, both letters should be
+considered within the <code>::first-letter</code> pseudo-element.
+
+<p>If the letters that would form the ::first-letter are not in the
+same element, such as "'T" in <code>&lt;p>'&lt;em>T...</code>, the UA
+may create a ::first-letter pseudo-element from one of the elements,
+both elements, or simply not create a pseudo-element.</p>
+
+<p>Similarly, if the first letter(s) of the block are not at the start
+of the line (for example due to bidirectional reordering), then the UA
+need not create the pseudo-element(s).
+
+<div class="example">
+<p>Example:</p>
+<p><a name="overlapping-example">The following example</a> illustrates
+how overlapping pseudo-elements may interact. The first letter of
+each P element will be green with a font size of '24pt'. The rest of
+the first formatted line will be 'blue' while the rest of the
+paragraph will be 'red'.</p>
+
+<pre>p { color: red; font-size: 12pt }
+p::first-letter { color: green; font-size: 200% }
+p::first-line { color: blue }
+
+&lt;P&gt;Some text that ends up on two lines&lt;/P&gt;</pre>
+
+<p>Assuming that a line break will occur before the word "ends", the
+<span class="index-inst" title="fictional tag sequence">fictional tag
+sequence</span> for this fragment might be:</p>
+
+<pre>&lt;P&gt;
+&lt;P::first-line&gt;
+&lt;P::first-letter&gt;
+S
+&lt;/P::first-letter&gt;ome text that
+&lt;/P::first-line&gt;
+ends up on two lines
+&lt;/P&gt;</pre>
+
+<p>Note that the <code>::first-letter</code> element is inside the <code>::first-line</code>
+element. Properties set on <code>::first-line</code> are inherited by
+<code>::first-letter</code>, but are overridden if the same property is set on
+<code>::first-letter</code>.</p>
+</div>
+
+
+<h4><a name=UIfragments>7.3.</a> <a name=selection>The ::selection pseudo-element</a></h4>
+
+<p>The <code>::selection</code> pseudo-element applies to the portion
+of a document that has been highlighted by the user. This also
+applies, for example, to selected text within an editable text
+field. This pseudo-element should not be confused with the <code><a
+href="#checked">:checked</a></code> pseudo-class (which used to be
+named <code>:selected</code>)
+
+<p>Although the <code>::selection</code> pseudo-element is dynamic in
+nature, and is altered by user action, it is reasonable to expect that
+when a UA re-renders to a static medium (such as a printed page, see
+<a href="#refsCSS21">[CSS21]</a>) which was originally rendered to a
+dynamic medium (like screen), the UA may wish to transfer the current
+<code>::selection</code> state to that other medium, and have all the
+appropriate formatting and rendering take effect as well. This is not
+required &mdash; UAs may omit the <code>::selection</code>
+pseudo-element for static media.
+
+<p>These are the CSS properties that apply to <code>::selection</code>
+pseudo-elements: color, background, cursor (optional), outline
+(optional). The computed value of the 'background-image' property on
+<code>::selection</code> may be ignored.
+
+
+<h4><a name=gen-content>7.4. The ::before and ::after pseudo-elements</a></h4>
+
+<p>The <code>::before</code> and <code>::after</code> pseudo-elements
+can be used to describe generated content before or after an element's
+content. They are explained in CSS 2.1 <a
+href="#refsCSS21">[CSS21]</a>.</p>
+
+<p>When the <code>::first-letter</code> and <code>::first-line</code>
+pseudo-elements are combined with <code>::before</code> and
+<code>::after</code>, they apply to the first letter or line of the
+element including the inserted text.</p>
+
+<h2><a name=combinators>8. Combinators</a></h2>
+
+<h3><a name=descendant-combinators>8.1. Descendant combinator</a></h3>
+
+<p>At times, authors may want selectors to describe an element that is
+the descendant of another element in the document tree (e.g., "an
+<code>EM</code> element that is contained within an <code>H1</code>
+element"). Descendant combinators express such a relationship. A
+descendant combinator is <a href="#whitespace">white space</a> that
+separates two sequences of simple selectors. A selector of the form
+"<code>A B</code>" represents an element <code>B</code> that is an
+arbitrary descendant of some ancestor element <code>A</code>.
+
+<div class="example">
+ <p>Examples:</p>
+ <p>For example, consider the following selector:</p>
+ <pre>h1 em</pre>
+ <p>It represents an <code>em</code> element being the descendant of
+ an <code>h1</code> element. It is a correct and valid, but partial,
+ description of the following fragment:</p>
+ <pre>&lt;h1&gt;This &lt;span class="myclass"&gt;headline
+is &lt;em&gt;very&lt;/em&gt; important&lt;/span&gt;&lt;/h1&gt;</pre>
+ <p>The following selector:</p>
+ <pre>div * p</pre>
+ <p>represents a <code>p</code> element that is a grandchild or later
+ descendant of a <code>div</code> element. Note the whitespace on
+ either side of the "*" is not part of the universal selector; the
+ whitespace is a combinator indicating that the DIV must be the
+ ancestor of some element, and that that element must be an ancestor
+ of the P.</p>
+ <p>The following selector, which combines descendant combinators and
+ <a href="#attribute-selectors">attribute selectors</a>, represents an
+ element that (1) has the <code>href</code> attribute set and (2) is
+ inside a <code>p</code> that is itself inside a <code>div</code>:</p>
+ <pre>div p *[href]</pre>
+</div>
+
+<h3><a name=child-combinators>8.2. Child combinators</a></h3>
+
+<p>A <dfn>child combinator</dfn> describes a childhood relationship
+between two elements. A child combinator is made of the
+&quot;greater-than sign&quot; (<code>&gt;</code>) character and
+separates two sequences of simple selectors.
+
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element that is
+ child of <code>body</code>:</p>
+ <pre>body &gt; p</pre>
+ <p>The following example combines descendant combinators and child
+ combinators.</p>
+ <pre>div ol&gt;li p</pre><!-- LEAVE THOSE SPACES OUT! see below -->
+ <p>It represents a <code>p</code> element that is a descendant of an
+ <code>li</code> element; the <code>li</code> element must be the
+ child of an <code>ol</code> element; the <code>ol</code> element must
+ be a descendant of a <code>div</code>. Notice that the optional white
+ space around the "&gt;" combinator has been left out.</p>
+</div>
+
+<p>For information on selecting the first child of an element, please
+see the section on the <code><a
+href="#structural-pseudos">:first-child</a></code> pseudo-class
+above.</p>
+
+<h3><a name=sibling-combinators>8.3. Sibling combinators</a></h3>
+
+<p>There are two different sibling combinators: the adjacent sibling
+combinator and the general sibling combinator. In both cases,
+non-element nodes (e.g. text between elements) are ignored when
+considering adjacency of elements.</p>
+
+<h4><a name=adjacent-sibling-combinators>8.3.1. Adjacent sibling combinator</a></h4>
+
+<p>The adjacent sibling combinator is made of the &quot;plus
+sign&quot; (U+002B, <code>+</code>) character that separates two
+sequences of simple selectors. The elements represented by the two
+sequences share the same parent in the document tree and the element
+represented by the first sequence immediately precedes the element
+represented by the second one.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element
+ immediately following a <code>math</code> element:</p>
+ <pre>math + p</pre>
+ <p>The following selector is conceptually similar to the one in the
+ previous example, except that it adds an attribute selector &mdash; it
+ adds a constraint to the <code>h1</code> element, that it must have
+ <code>class="opener"</code>:</p>
+ <pre>h1.opener + h2</pre>
+</div>
+
+
+<h4><a name=general-sibling-combinators>8.3.2. General sibling combinator</a></h4>
+
+<p>The general sibling combinator is made of the &quot;tilde&quot;
+(U+007E, <code>~</code>) character that separates two sequences of
+simple selectors. The elements represented by the two sequences share
+the same parent in the document tree and the element represented by
+the first sequence precedes (not necessarily immediately) the element
+represented by the second one.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <pre>h1 ~ pre</pre>
+ <p>represents a <code>pre</code> element following an <code>h1</code>. It
+ is a correct and valid, but partial, description of:</p>
+ <pre>&lt;h1&gt;Definition of the function a&lt;/h1&gt;
+&lt;p&gt;Function a(x) has to be applied to all figures in the table.&lt;/p&gt;
+&lt;pre&gt;function a(x) = 12x/13.5&lt;/pre&gt;</pre>
+</div>
+
+<h2><a name=specificity>9. Calculating a selector's specificity</a></h2>
+
+<p>A selector's specificity is calculated as follows:</p>
+
+<ul>
+ <li>count the number of ID selectors in the selector (= a)</li>
+ <li>count the number of class selectors, attributes selectors, and pseudo-classes in the selector (= b)</li>
+ <li>count the number of element names in the selector (= c)</li>
+ <li>ignore pseudo-elements</li>
+</ul>
+
+<p>Selectors inside <a href="#negation">the negation pseudo-class</a>
+are counted like any other, but the negation itself does not count as
+a pseudo-class.</p>
+
+<p>Concatenating the three numbers a-b-c (in a number system with a
+large base) gives the specificity.</p>
+
+<div class="example">
+<p>Examples:</p>
+<pre>* /* a=0 b=0 c=0 -&gt; specificity = 0 */
+LI /* a=0 b=0 c=1 -&gt; specificity = 1 */
+UL LI /* a=0 b=0 c=2 -&gt; specificity = 2 */
+UL OL+LI /* a=0 b=0 c=3 -&gt; specificity = 3 */
+H1 + *[REL=up] /* a=0 b=1 c=1 -&gt; specificity = 11 */
+UL OL LI.red /* a=0 b=1 c=3 -&gt; specificity = 13 */
+LI.red.level /* a=0 b=2 c=1 -&gt; specificity = 21 */
+#x34y /* a=1 b=0 c=0 -&gt; specificity = 100 */
+#s12:not(FOO) /* a=1 b=0 c=1 -&gt; specificity = 101 */
+</pre>
+</div>
+
+<p class="note"><strong>Note:</strong> the specificity of the styles
+specified in an HTML <code>style</code> attribute is described in CSS
+2.1. <a href="#refsCSS21">[CSS21]</a>.</p>
+
+<h2><a name=w3cselgrammar>10. The grammar of Selectors</a></h2>
+
+<h3><a name=grammar>10.1. Grammar</a></h3>
+
+<p>The grammar below defines the syntax of Selectors. It is globally
+LL(1) and can be locally LL(2) (but note that most UA's should not use
+it directly, since it doesn't express the parsing conventions). The
+format of the productions is optimized for human consumption and some
+shorthand notations beyond Yacc (see <a href="#refsYACC">[YACC]</a>)
+are used:</p>
+
+<ul>
+ <li><b>*</b>: 0 or more
+ <li><b>+</b>: 1 or more
+ <li><b>?</b>: 0 or 1
+ <li><b>|</b>: separates alternatives
+ <li><b>[ ]</b>: grouping </li>
+</ul>
+
+<p>The productions are:</p>
+
+<pre>selectors_group
+ : selector [ COMMA S* selector ]*
+ ;
+
+selector
+ : simple_selector_sequence [ combinator simple_selector_sequence ]*
+ ;
+
+combinator
+ /* combinators can be surrounded by white space */
+ : PLUS S* | GREATER S* | TILDE S* | S+
+ ;
+
+simple_selector_sequence
+ : [ type_selector | universal ]
+ [ HASH | class | attrib | pseudo | negation ]*
+ | [ HASH | class | attrib | pseudo | negation ]+
+ ;
+
+type_selector
+ : [ namespace_prefix ]? element_name
+ ;
+
+namespace_prefix
+ : [ IDENT | '*' ]? '|'
+ ;
+
+element_name
+ : IDENT
+ ;
+
+universal
+ : [ namespace_prefix ]? '*'
+ ;
+
+class
+ : '.' IDENT
+ ;
+
+attrib
+ : '[' S* [ namespace_prefix ]? IDENT S*
+ [ [ PREFIXMATCH |
+ SUFFIXMATCH |
+ SUBSTRINGMATCH |
+ '=' |
+ INCLUDES |
+ DASHMATCH ] S* [ IDENT | STRING ] S*
+ ]? ']'
+ ;
+
+pseudo
+ /* '::' starts a pseudo-element, ':' a pseudo-class */
+ /* Exceptions: :first-line, :first-letter, :before and :after. */
+ /* Note that pseudo-elements are restricted to one per selector and */
+ /* occur only in the last simple_selector_sequence. */
+ : ':' ':'? [ IDENT | functional_pseudo ]
+ ;
+
+functional_pseudo
+ : FUNCTION S* expression ')'
+ ;
+
+expression
+ /* In CSS3, the expressions are identifiers, strings, */
+ /* or of the form "an+b" */
+ : [ [ PLUS | '-' | DIMENSION | NUMBER | STRING | IDENT ] S* ]+
+ ;
+
+negation
+ : NOT S* negation_arg S* ')'
+ ;
+
+negation_arg
+ : type_selector | universal | HASH | class | attrib | pseudo
+ ;</pre>
+
+
+<h3><a name=lex>10.2. Lexical scanner</a></h3>
+
+<p>The following is the <a name=x3>tokenizer</a>, written in Flex (see
+<a href="#refsFLEX">[FLEX]</a>) notation. The tokenizer is
+case-insensitive.</p>
+
+<p>The two occurrences of "\377" represent the highest character
+number that current versions of Flex can deal with (decimal 255). They
+should be read as "\4177777" (decimal 1114111), which is the highest
+possible code point in Unicode/ISO-10646. <a
+href="#refsUNICODE">[UNICODE]</a></p>
+
+<pre>%option case-insensitive
+
+ident [-]?{nmstart}{nmchar}*
+name {nmchar}+
+nmstart [_a-z]|{nonascii}|{escape}
+nonascii [^\0-\177]
+unicode \\[0-9a-f]{1,6}(\r\n|[ \n\r\t\f])?
+escape {unicode}|\\[^\n\r\f0-9a-f]
+nmchar [_a-z0-9-]|{nonascii}|{escape}
+num [0-9]+|[0-9]*\.[0-9]+
+string {string1}|{string2}
+string1 \"([^\n\r\f\\"]|\\{nl}|{nonascii}|{escape})*\"
+string2 \'([^\n\r\f\\']|\\{nl}|{nonascii}|{escape})*\'
+invalid {invalid1}|{invalid2}
+invalid1 \"([^\n\r\f\\"]|\\{nl}|{nonascii}|{escape})*
+invalid2 \'([^\n\r\f\\']|\\{nl}|{nonascii}|{escape})*
+nl \n|\r\n|\r|\f
+w [ \t\r\n\f]*
+
+%%
+
+[ \t\r\n\f]+ return S;
+
+"~=" return INCLUDES;
+"|=" return DASHMATCH;
+"^=" return PREFIXMATCH;
+"$=" return SUFFIXMATCH;
+"*=" return SUBSTRINGMATCH;
+{ident} return IDENT;
+{string} return STRING;
+{ident}"(" return FUNCTION;
+{num} return NUMBER;
+"#"{name} return HASH;
+{w}"+" return PLUS;
+{w}"&gt;" return GREATER;
+{w}"," return COMMA;
+{w}"~" return TILDE;
+":not(" return NOT;
+@{ident} return ATKEYWORD;
+{invalid} return INVALID;
+{num}% return PERCENTAGE;
+{num}{ident} return DIMENSION;
+"&lt;!--" return CDO;
+"--&gt;" return CDC;
+
+"url("{w}{string}{w}")" return URI;
+"url("{w}([!#$%&*-~]|{nonascii}|{escape})*{w}")" return URI;
+U\+[0-9a-f?]{1,6}(-[0-9a-f]{1,6})? return UNICODE_RANGE;
+
+\/\*[^*]*\*+([^/*][^*]*\*+)*\/ /* ignore comments */
+
+. return *yytext;</pre>
+
+
+
+<h2><a name=downlevel>11. Namespaces and down-level clients</a></h2>
+
+<p>An important issue is the interaction of CSS selectors with XML
+documents in web clients that were produced prior to this
+document. Unfortunately, due to the fact that namespaces must be
+matched based on the URI which identifies the namespace, not the
+namespace prefix, some mechanism is required to identify namespaces in
+CSS by their URI as well. Without such a mechanism, it is impossible
+to construct a CSS style sheet which will properly match selectors in
+all cases against a random set of XML documents. However, given
+complete knowledge of the XML document to which a style sheet is to be
+applied, and a limited use of namespaces within the XML document, it
+is possible to construct a style sheet in which selectors would match
+elements and attributes correctly.</p>
+
+<p>It should be noted that a down-level CSS client will (if it
+properly conforms to CSS forward compatible parsing rules) ignore all
+<code>@namespace</code> at-rules, as well as all style rules that make
+use of namespace qualified element type or attribute selectors. The
+syntax of delimiting namespace prefixes in CSS was deliberately chosen
+so that down-level CSS clients would ignore the style rules rather
+than possibly match them incorrectly.</p>
+
+<p>The use of default namespaces in CSS makes it possible to write
+element type selectors that will function in both namespace aware CSS
+clients as well as down-level clients. It should be noted that
+down-level clients may incorrectly match selectors against XML
+elements in other namespaces.</p>
+
+<p>The following are scenarios and examples in which it is possible to
+construct style sheets which would function properly in web clients
+that do not implement this proposal.</p>
+
+<ol>
+ <li>
+
+ <p>The XML document does not use namespaces.</p>
+
+ <ul>
+
+ <li>In this case, it is obviously not necessary to declare or use
+ namespaces in the style sheet. Standard CSS element type and
+ attribute selectors will function adequately in a down-level
+ client.</li>
+
+ <li>In a CSS namespace aware client, the default behavior of
+ element selectors matching without regard to namespace will
+ function properly against all elements, since no namespaces are
+ present. However, the use of specific element type selectors that
+ match only elements that have no namespace ("<code>|name</code>")
+ will guarantee that selectors will match only XML elements that do
+ not have a declared namespace. </li>
+
+ </ul>
+
+ </li>
+
+ <li>
+
+ <p>The XML document defines a single, default namespace used
+ throughout the document. No namespace prefixes are used in element
+ names.</p>
+
+ <ul>
+
+ <li>In this case, a down-level client will function as if
+ namespaces were not used in the XML document at all. Standard CSS
+ element type and attribute selectors will match against all
+ elements. </li>
+
+ </ul>
+
+ </li>
+
+ <li>
+
+ <p>The XML document does <b>not</b> use a default namespace, all
+ namespace prefixes used are known to the style sheet author, and
+ there is a direct mapping between namespace prefixes and namespace
+ URIs. (A given prefix may only be mapped to one namespace URI
+ throughout the XML document; there may be multiple prefixes mapped
+ to the same URI).</p>
+
+ <ul>
+
+ <li>In this case, the down-level client will view and match
+ element type and attribute selectors based on their fully
+ qualified name, not the local part as outlined in the <a
+ href="#typenmsp">Type selectors and Namespaces</a> section. CSS
+ selectors may be declared using an escaped colon "<code>\:</code>"
+ to describe the fully qualified names, e.g.
+ "<code>html\:h1</code>" will match
+ <code>&lt;html:h1&gt;</code>. Selectors using the qualified name
+ will only match XML elements that use the same prefix. Other
+ namespace prefixes used in the XML that are mapped to the same URI
+ will not match as expected unless additional CSS style rules are
+ declared for them.</li>
+
+ <li>Note that selectors declared in this fashion will
+ <em>only</em> match in down-level clients. A CSS namespace aware
+ client will match element type and attribute selectors based on
+ the name's local part. Selectors declared with the fully
+ qualified name will not match (unless there is no namespace prefix
+ in the fully qualified name).</li>
+
+ </ul>
+
+ </li>
+
+ </ol>
+
+<p>In other scenarios: when the namespace prefixes used in the XML are
+not known in advance by the style sheet author; or a combination of
+elements with no namespace are used in conjunction with elements using
+a default namespace; or the same namespace prefix is mapped to
+<em>different</em> namespace URIs within the same document, or in
+different documents; it is impossible to construct a CSS style sheet
+that will function properly against all elements in those documents,
+unless, the style sheet is written using a namespace URI syntax (as
+outlined in this document or similar) and the document is processed by
+a CSS and XML namespace aware client.</p>
+
+<h2><a name=profiling>12. Profiles</a></h2>
+
+<p>Each specification using Selectors must define the subset of W3C
+Selectors it allows and excludes, and describe the local meaning of
+all the components of that subset.</p>
+
+<p>Non normative examples:
+
+<div class="profile">
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>CSS level 1</td></tr>
+ <tr>
+ <th>Accepts</th>
+ <td>type selectors<br>class selectors<br>ID selectors<br>:link,
+ :visited and :active pseudo-classes<br>descendant combinator
+ <br>::first-line and ::first-letter pseudo-elements</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>
+
+<p>universal selector<br>attribute selectors<br>:hover and :focus
+ pseudo-classes<br>:target pseudo-class<br>:lang() pseudo-class<br>all UI
+ element states pseudo-classes<br>all structural
+ pseudo-classes<br>negation pseudo-class<br>all
+ UI element fragments pseudo-elements<br>::before and ::after
+ pseudo-elements<br>child combinators<br>sibling combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>only one class selector allowed per sequence of simple
+ selectors</td></tr></tbody></table><br><br>
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>CSS level 2</td></tr>
+ <tr>
+ <th>Accepts</th>
+ <td>type selectors<br>universal selector<br>attribute presence and
+ values selectors<br>class selectors<br>ID selectors<br>:link, :visited,
+ :active, :hover, :focus, :lang() and :first-child pseudo-classes
+ <br>descendant combinator<br>child combinator<br>adjacent sibling
+ combinator<br>::first-line and ::first-letter pseudo-elements<br>::before
+ and ::after pseudo-elements</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>
+
+<p>content selectors<br>substring matching attribute
+ selectors<br>:target pseudo-classes<br>all UI element
+ states pseudo-classes<br>all structural pseudo-classes other
+ than :first-child<br>negation pseudo-class<br>all UI element
+ fragments pseudo-elements<br>general sibling combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>more than one class selector per sequence of simple selectors (CSS1
+ constraint) allowed</td></tr></tbody></table>
+
+<p>In CSS, selectors express pattern matching rules that determine which style
+rules apply to elements in the document tree.
+
+<p>The following selector (CSS level 2) will <b>match</b> all anchors <code>a</code>
+with attribute <code>name</code> set inside a section 1 header <code>h1</code>:
+<pre>h1 a[name]</pre>
+
+<p>All CSS declarations attached to such a selector are applied to elements
+matching it. </div>
+
+<div class="profile">
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>STTS 3</td>
+ </tr>
+ <tr>
+ <th>Accepts</th>
+ <td>
+
+<p>type selectors<br>universal selectors<br>attribute selectors<br>class
+ selectors<br>ID selectors<br>all structural pseudo-classes<br>
+ all combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>non-accepted pseudo-classes<br>pseudo-elements<br></td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>some selectors and combinators are not allowed in fragment
+ descriptions on the right side of STTS declarations.</td></tr></tbody></table>
+<form>
+<input type="text" name="test10"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+</form>
+
+<p>Selectors can be used in STTS 3 in two different
+ manners:
+<ol>
+ <li>a selection mechanism equivalent to CSS selection mechanism: declarations
+ attached to a given selector are applied to elements matching that selector,
+ <li>fragment descriptions that appear on the right side of declarations.
+</li></ol></div>
+
+<h2><a name=Conformance></a>13. Conformance and requirements</h2>
+
+<p>This section defines conformance with the present specification only.
+
+<p>The inability of a user agent to implement part of this specification due to
+the limitations of a particular device (e.g., non interactive user agents will
+probably not implement dynamic pseudo-classes because they make no sense without
+interactivity) does not imply non-conformance.
+
+<p>All specifications reusing Selectors must contain a <a
+href="#profiling">Profile</a> listing the
+subset of Selectors it accepts or excludes, and describing the constraints
+it adds to the current specification.
+
+<p>Invalidity is caused by a parsing error, e.g. an unrecognized token or a token
+which is not allowed at the current parsing point.
+
+<p>User agents must observe the rules for handling parsing errors:
+<ul>
+ <li>a simple selector containing an undeclared namespace prefix is invalid</li>
+ <li>a selector containing an invalid simple selector, an invalid combinator
+ or an invalid token is invalid. </li>
+ <li>a group of selectors containing an invalid selector is invalid.</li>
+</ul>
+
+<p class="foo test10 bar">Specifications reusing Selectors must define how to handle parsing
+errors. (In the case of CSS, the entire rule in which the selector is
+used is dropped.)</p>
+
+<!-- Apparently all these references are out of date:
+<p>Implementations of this specification must behave as
+"recipients of text data" as defined by <a href="#refsCWWW">[CWWW]</a>
+when parsing selectors and attempting matches. (In particular,
+implementations must assume the data is normalized and must not
+normalize it.) Normative rules for matching strings are defined in
+<a href="#refsCWWW">[CWWW]</a> and <a
+href="#refsUNICODE">[UNICODE]</a> and apply to implementations of this
+specification.</p>-->
+
+<h2><a name=Tests></a>14. Tests</h2>
+
+<p>This specification has <a
+href="http://www.w3.org/Style/CSS/Test/CSS3/Selectors/current/">a test
+suite</a> allowing user agents to verify their basic conformance to
+the specification. This test suite does not pretend to be exhaustive
+and does not cover all possible combined cases of Selectors.</p>
+
+<h2><a name=ACKS></a>15. Acknowledgements</h2>
+
+<p>The CSS working group would like to thank everyone who has sent
+comments on this specification over the years.</p>
+
+<p>The working group would like to extend special thanks to Donna
+McManus, Justin Baker, Joel Sklar, and Molly Ives Brower who perfermed
+the final editorial review.</p>
+
+<h2><a name=references>16. References</a></h2>
+
+<dl class="refs">
+
+ <dt>[CSS1]
+ <dd><a name=refsCSS1></a> Bert Bos, H&aring;kon Wium Lie; "<cite>Cascading Style Sheets, level 1</cite>", W3C Recommendation, 17 Dec 1996, revised 11 Jan 1999
+ <dd>(<code><a href="http://www.w3.org/TR/REC-CSS1">http://www.w3.org/TR/REC-CSS1</a></code>)
+
+ <dt>[CSS21]
+ <dd><a name=refsCSS21></a> Bert Bos, Tantek &Ccedil;elik, Ian Hickson, H&aring;kon Wium Lie, editors; "<cite>Cascading Style Sheets, level 2 revision 1</cite>", W3C Working Draft, 13 June 2005
+ <dd>(<code><a href="http://www.w3.org/TR/CSS21">http://www.w3.org/TR/CSS21</a></code>)
+
+ <dt>[CWWW]
+ <dd><a name=refsCWWW></a> Martin J. D&uuml;rst, Fran&ccedil;ois Yergeau, Misha Wolf, Asmus Freytag, Tex Texin, editors; "<cite>Character Model for the World Wide Web</cite>", W3C Recommendation, 15 February 2005
+ <dd>(<code><a href="http://www.w3.org/TR/charmod/">http://www.w3.org/TR/charmod/</a></code>)
+
+ <dt>[FLEX]
+ <dd><a name="refsFLEX"></a> "<cite>Flex: The Lexical Scanner Generator</cite>", Version 2.3.7, ISBN 1882114213
+
+ <dt>[HTML4]
+ <dd><a name="refsHTML4"></a> Dave Ragget, Arnaud Le Hors, Ian Jacobs, editors; "<cite>HTML 4.01 Specification</cite>", W3C Recommendation, 24 December 1999
+ <dd>(<a href="http://www.w3.org/TR/html4/"><code>http://www.w3.org/TR/html4/</code></a>)
+
+ <dt>[MATH]
+ <dd><a name="refsMATH"></a> Patrick Ion, Robert Miner, editors; "<cite>Mathematical Markup Language (MathML) 1.01</cite>", W3C Recommendation, revision of 7 July 1999
+ <dd>(<code><a href="http://www.w3.org/TR/REC-MathML/">http://www.w3.org/TR/REC-MathML/</a></code>)
+
+ <dt>[RFC3066]
+ <dd><a name="refsRFC3066"></a> H. Alvestrand; "<cite>Tags for the Identification of Languages</cite>", Request for Comments 3066, January 2001
+ <dd>(<a href="http://www.ietf.org/rfc/rfc3066.txt"><code>http://www.ietf.org/rfc/rfc3066.txt</code></a>)
+
+ <dt>[STTS]
+ <dd><a name=refsSTTS></a> Daniel Glazman; "<cite>Simple Tree Transformation Sheets 3</cite>", Electricit&eacute; de France, submission to the W3C, 11 November 1998
+ <dd>(<code><a href="http://www.w3.org/TR/NOTE-STTS3">http://www.w3.org/TR/NOTE-STTS3</a></code>)
+
+ <dt>[SVG]
+ <dd><a name="refsSVG"></a> Jon Ferraiolo, &#34276;&#27810; &#28147;, Dean Jackson, editors; "<cite>Scalable Vector Graphics (SVG) 1.1 Specification</cite>", W3C Recommendation, 14 January 2003
+ <dd>(<code><a href="http://www.w3.org/TR/SVG/">http://www.w3.org/TR/SVG/</a></code>)
+
+ <dt>[UNICODE]</dt>
+ <dd><a name="refsUNICODE"></a> <cite><a
+ href="http://www.unicode.org/versions/Unicode4.1.0/">The Unicode Standard, Version 4.1</a></cite>, The Unicode Consortium. Boston, MA, Addison-Wesley, March 2005. ISBN 0-321-18578-1, as amended by <a href="http://www.unicode.org/versions/Unicode4.0.1/">Unicode 4.0.1</a> and <a href="http://www.unicode.org/versions/Unicode4.1.0/">Unicode 4.1.0</a>.
+ <dd>(<code><a href="http://www.unicode.org/versions/">http://www.unicode.org/versions/</a></code>)</dd>
+
+ <dt>[XML10]
+ <dd><a name="refsXML10"></a> Tim Bray, Jean Paoli, C. M. Sperberg-McQueen, Eve Maler, Fran&ccedil;ois Yergeau, editors; "<cite>Extensible Markup Language (XML) 1.0 (Third Edition)</cite>", W3C Recommendation, 4 February 2004
+ <dd>(<a href="http://www.w3.org/TR/REC-xml/"><code>http://www.w3.org/TR/REC-xml/</code></a>)
+
+ <dt>[XMLNAMES]
+ <dd><a name="refsXMLNAMES"></a> Tim Bray, Dave Hollander, Andrew Layman, editors; "<cite>Namespaces in XML</cite>", W3C Recommendation, 14 January 1999
+ <dd>(<a href="http://www.w3.org/TR/REC-xml-names/"><code>http://www.w3.org/TR/REC-xml-names/</code></a>)
+
+ <dt>[YACC]
+ <dd><a name="refsYACC"></a> S. C. Johnson; "<cite>YACC &mdash; Yet another compiler compiler</cite>", Technical Report, Murray Hill, 1975
+
+</dl>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/jslib-traverse-prototype.html b/testing/talos/talos/tests/dromaeo/tests/jslib-traverse-prototype.html
new file mode 100644
index 0000000000..5b7b67fd94
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/jslib-traverse-prototype.html
@@ -0,0 +1,2960 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script src="../lib/prototype.js"></script>
+<script>
+window.onload = function(){
+startTest("jslib-traverse-prototype", '3358ef63');
+
+// Try to force real results
+var ret, tmp, div, dd;
+
+var html = document.body.innerHTML;
+
+ prep(function(){
+ div = $$("div");
+ dd = $$("dd");
+ var tmp = document.createElement("div");
+ tmp.innerHTML = html;
+ document.body.appendChild( tmp );
+ });
+
+ test("Prototype - up", function(){
+ for ( var i = 0; i < 10; i++ )
+ ret = div.invoke("up").length;
+ });
+
+ test("Prototype - ancestors", function(){
+ for ( var i = 0; i < 10; i++ )
+ ret = div.invoke("ancestors").length;
+ });
+
+ test("Prototype - previous", function(){
+ for ( var i = 0; i < 10; i++ )
+ ret = div.invoke("previous").length;
+ });
+
+ test("Prototype - previousSiblings", function(){
+ for ( var i = 0; i < 10; i++ )
+ ret = dd.invoke("previousSiblings").length;
+ });
+
+ test("Prototype - next", function(){
+ for ( var i = 0; i < 10; i++ )
+ ret = div.invoke("next").length;
+ });
+
+ test("Prototype - nextSiblings", function(){
+ for ( var i = 0; i < 10; i++ )
+ ret = dd.invoke("nextSiblings").length;
+ });
+
+ test("Prototype - siblings", function(){
+ for ( var i = 0; i < 10; i++ )
+ ret = dd.invoke("siblings").length;
+ });
+
+ test("Prototype - childElements", function(){
+ for ( var i = 0; i < 10; i++ )
+ ret = div.invoke("childElements").length;
+ });
+
+endTest();
+};
+</script>
+</head>
+<body>
+ <div class="head">
+ <p><a href="http://www.w3.org/"><img height=48 alt=W3C src="w3c_home.png" width=72></a>
+
+ <h1 id="title">Selectors</h1>
+
+ <h2>W3C Working Draft 15 December 2005</h2>
+
+ <dl>
+
+ <dt>This version:
+
+ <dd><a href="http://www.w3.org/TR/2005/WD-css3-selectors-20051215">
+ http://www.w3.org/TR/2005/WD-css3-selectors-20051215</a>
+
+ <dt>Latest version:
+
+ <dd><a href="http://www.w3.org/TR/css3-selectors">
+ http://www.w3.org/TR/css3-selectors</a>
+
+ <dt>Previous version:
+
+ <dd><a href="http://www.w3.org/TR/2001/CR-css3-selectors-20011113">
+ http://www.w3.org/TR/2001/CR-css3-selectors-20011113</a>
+
+ <dt><a name=editors-list></a>Editors:
+
+ <dd class="vcard"><span class="fn">Daniel Glazman</span> (Invited Expert)</dd>
+
+ <dd class="vcard"><a lang="tr" class="url fn" href="http://www.tantek.com/">Tantek &Ccedil;elik</a> (Invited Expert)
+
+ <dd class="vcard"><a href="mailto:ian@hixie.ch" class="url fn">Ian Hickson</a> (<span
+ class="company"><a href="http://www.google.com/">Google</a></span>)
+
+ <dd class="vcard"><span class="fn">Peter Linss</span> (former editor, <span class="company"><a
+ href="http://www.netscape.com/">Netscape/AOL</a></span>)
+
+ <dd class="vcard"><span class="fn">John Williams</span> (former editor, <span class="company"><a
+ href="http://www.quark.com/">Quark, Inc.</a></span>)
+
+ </dl>
+
+ <p class="copyright"><a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright">
+ Copyright</a> &copy; 2005 <a href="http://www.w3.org/"><abbr
+ title="World Wide Web Consortium">W3C</abbr></a><sup>&reg;</sup>
+ (<a href="http://www.csail.mit.edu/"><abbr title="Massachusetts
+ Institute of Technology">MIT</abbr></a>, <a
+ href="http://www.ercim.org/"><acronym title="European Research
+ Consortium for Informatics and Mathematics">ERCIM</acronym></a>, <a
+ href="http://www.keio.ac.jp/">Keio</a>), All Rights Reserved. W3C
+ <a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">liability</a>,
+ <a
+ href="http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">trademark</a>,
+ <a
+ href="http://www.w3.org/Consortium/Legal/copyright-documents">document
+ use</a> rules apply.
+
+ <hr title="Separator for header">
+
+ </div>
+
+ <h2><a name=abstract></a>Abstract</h2>
+
+ <p><em>Selectors</em> are patterns that match against elements in a
+ tree. Selectors have been optimized for use with HTML and XML, and
+ are designed to be usable in performance-critical code.</p>
+
+ <p><acronym title="Cascading Style Sheets">CSS</acronym> (Cascading
+ Style Sheets) is a language for describing the rendering of <acronym
+ title="Hypertext Markup Language">HTML</acronym> and <acronym
+ title="Extensible Markup Language">XML</acronym> documents on
+ screen, on paper, in speech, etc. CSS uses Selectors for binding
+ style properties to elements in the document. This document
+ describes extensions to the selectors defined in CSS level 2. These
+ extended selectors will be used by CSS level 3.
+
+ <p>Selectors define the following function:</p>
+
+ <pre>expression &#x2217; element &rarr; boolean</pre>
+
+ <p>That is, given an element and a selector, this specification
+ defines whether that element matches the selector.</p>
+
+ <p>These expressions can also be used, for instance, to select a set
+ of elements, or a single element from a set of elements, by
+ evaluating the expression across all the elements in a
+ subtree. <acronym title="Simple Tree Transformation
+ Sheets">STTS</acronym> (Simple Tree Transformation Sheets), a
+ language for transforming XML trees, uses this mechanism. <a href="#refsSTTS">[STTS]</a></p>
+
+ <h2><a name=status></a>Status of this document</h2>
+
+ <p><em>This section describes the status of this document at the
+ time of its publication. Other documents may supersede this
+ document. A list of current W3C publications and the latest revision
+ of this technical report can be found in the <a
+ href="http://www.w3.org/TR/">W3C technical reports index at
+ http://www.w3.org/TR/.</a></em></p>
+
+ <p>This document describes the selectors that already exist in <a
+ href="#refsCSS1"><abbr title="CSS level 1">CSS1</abbr></a> and <a
+ href="#refsCSS21"><abbr title="CSS level 2">CSS2</abbr></a>, and
+ also proposes new selectors for <abbr title="CSS level
+ 3">CSS3</abbr> and other languages that may need them.</p>
+
+ <p>The CSS Working Group doesn't expect that all implementations of
+ CSS3 will have to implement all selectors. Instead, there will
+ probably be a small number of variants of CSS3, called profiles. For
+ example, it may be that only a profile for interactive user agents
+ will include all of the selectors.</p>
+
+ <p>This specification is a last call working draft for the the <a
+ href="http://www.w3.org/Style/CSS/members">CSS Working Group</a>
+ (<a href="/Style/">Style Activity</a>). This
+ document is a revision of the <a
+ href="http://www.w3.org/TR/2001/CR-css3-selectors-20011113/">Candidate
+ Recommendation dated 2001 November 13</a>, and has incorporated
+ implementation feedback received in the past few years. It is
+ expected that this last call will proceed straight to Proposed
+ Recommendation stage since it is believed that interoperability will
+ be demonstrable.</p>
+
+ <p>All persons are encouraged to review and implement this
+ specification and return comments to the (<a
+ href="http://lists.w3.org/Archives/Public/www-style/">archived</a>)
+ public mailing list <a
+ href="http://www.w3.org/Mail/Lists.html#www-style">www-style</a>
+ (see <a href="http://www.w3.org/Mail/Request">instructions</a>). W3C
+ Members can also send comments directly to the CSS Working
+ Group.
+ The deadline for comments is 14 January 2006.</p>
+
+ <p>This is still a draft document and may be updated, replaced, or
+ obsoleted by other documents at any time. It is inappropriate to
+ cite a W3C Working Draft as other than &quot;work in progress&quot;.
+
+ <p>This document may be available in <a
+ href="http://www.w3.org/Style/css3-selectors-updates/translations">translation</a>.
+ The English version of this specification is the only normative
+ version.
+
+ <div class="subtoc">
+
+ <h2 id="test10"><a name=contents>Table of contents</a></h2>
+
+ <ul class="toc">
+ <li class="tocline2"><a href="#context">1. Introduction</a>
+ <ul>
+ <li><a href="#dependencies">1.1. Dependencies</a> </li>
+ <li><a href="#terminology">1.2. Terminology</a> </li>
+ <li><a href="#changesFromCSS2">1.3. Changes from CSS2</a> </li>
+ </ul>
+ <li class="tocline2"><a href="#selectors">2. Selectors</a>
+ <li class="tocline2"><a href="#casesens">3. Case sensitivity</a>
+ <li class="tocline2"><a href="#selector-syntax">4. Selector syntax</a>
+ <li class="tocline2"><a href="#grouping">5. Groups of selectors</a>
+ <li class="tocline2"><a href="#simple-selectors">6. Simple selectors</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#type-selectors">6.1. Type selectors</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#typenmsp">6.1.1. Type selectors and namespaces</a></li>
+ </ul>
+ <li class="tocline3"><a href="#universal-selector">6.2. Universal selector</a>
+ <ul>
+ <li><a href="#univnmsp">6.2.1. Universal selector and namespaces</a></li>
+ </ul>
+ <li class="tocline3"><a href="#attribute-selectors">6.3. Attribute selectors</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#attribute-representation">6.3.1. Representation of attributes and attributes values</a>
+ <li><a href="#attribute-substrings">6.3.2. Substring matching attribute selectors</a>
+ <li class="tocline4"><a href="#attrnmsp">6.3.3. Attribute selectors and namespaces</a>
+ <li class="tocline4"><a href="#def-values">6.3.4. Default attribute values in DTDs</a></li>
+ </ul>
+ <li class="tocline3"><a href="#class-html">6.4. Class selectors</a>
+ <li class="tocline3"><a href="#id-selectors">6.5. ID selectors</a>
+ <li class="tocline3"><a href="#pseudo-classes">6.6. Pseudo-classes</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#dynamic-pseudos">6.6.1. Dynamic pseudo-classes</a>
+ <li class="tocline4"><a href="#target-pseudo">6.6.2. The :target pseudo-class</a>
+ <li class="tocline4"><a href="#lang-pseudo">6.6.3. The :lang() pseudo-class</a>
+ <li class="tocline4"><a href="#UIstates">6.6.4. UI element states pseudo-classes</a>
+ <li class="tocline4"><a href="#structural-pseudos">6.6.5. Structural pseudo-classes</a>
+ <ul>
+ <li><a href="#root-pseudo">:root pseudo-class</a>
+ <li><a href="#nth-child-pseudo">:nth-child() pseudo-class</a>
+ <li><a href="#nth-last-child-pseudo">:nth-last-child()</a>
+ <li><a href="#nth-of-type-pseudo">:nth-of-type() pseudo-class</a>
+ <li><a href="#nth-last-of-type-pseudo">:nth-last-of-type()</a>
+ <li><a href="#first-child-pseudo">:first-child pseudo-class</a>
+ <li><a href="#last-child-pseudo">:last-child pseudo-class</a>
+ <li><a href="#first-of-type-pseudo">:first-of-type pseudo-class</a>
+ <li><a href="#last-of-type-pseudo">:last-of-type pseudo-class</a>
+ <li><a href="#only-child-pseudo">:only-child pseudo-class</a>
+ <li><a href="#only-of-type-pseudo">:only-of-type pseudo-class</a>
+ <li><a href="#empty-pseudo">:empty pseudo-class</a></li>
+ </ul>
+ <li class="tocline4"><a href="#negation">6.6.7. The negation pseudo-class</a></li>
+ </ul>
+ </li>
+ </ul>
+ <li><a href="#pseudo-elements">7. Pseudo-elements</a>
+ <ul>
+ <li><a href="#first-line">7.1. The ::first-line pseudo-element</a>
+ <li><a href="#first-letter">7.2. The ::first-letter pseudo-element</a>
+ <li><a href="#UIfragments">7.3. The ::selection pseudo-element</a>
+ <li><a href="#gen-content">7.4. The ::before and ::after pseudo-elements</a></li>
+ </ul>
+ <li class="tocline2"><a href="#combinators">8. Combinators</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#descendant-combinators">8.1. Descendant combinators</a>
+ <li class="tocline3"><a href="#child-combinators">8.2. Child combinators</a>
+ <li class="tocline3"><a href="#sibling-combinators">8.3. Sibling combinators</a>
+ <ul class="toc">
+ <li class="tocline4"><a href="#adjacent-sibling-combinators">8.3.1. Adjacent sibling combinator</a>
+ <li class="tocline4"><a href="#general-sibling-combinators">8.3.2. General sibling combinator</a></li>
+ </ul>
+ </li>
+ </ul>
+ <li class="tocline2"><a href="#specificity">9. Calculating a selector's specificity</a>
+ <li class="tocline2"><a href="#w3cselgrammar">10. The grammar of Selectors</a>
+ <ul class="toc">
+ <li class="tocline3"><a href="#grammar">10.1. Grammar</a>
+ <li class="tocline3"><a href="#lex">10.2. Lexical scanner</a></li>
+ </ul>
+ <li class="tocline2"><a href="#downlevel">11. Namespaces and down-level clients</a>
+ <li class="tocline2"><a href="#profiling">12. Profiles</a>
+ <li><a href="#Conformance">13. Conformance and requirements</a>
+ <li><a href="#Tests">14. Tests</a>
+ <li><a href="#ACKS">15. Acknowledgements</a>
+ <li class="tocline2"><a href="#references">16. References</a>
+ </ul>
+
+ </div>
+
+ <h2><a name=context>1. Introduction</a></h2>
+
+ <h3><a name=dependencies></a>1.1. Dependencies</h3>
+
+ <p>Some features of this specification are specific to CSS, or have
+ particular limitations or rules specific to CSS. In this
+ specification, these have been described in terms of CSS2.1. <a
+ href="#refsCSS21">[CSS21]</a></p>
+
+ <h3><a name=terminology></a>1.2. Terminology</h3>
+
+ <p>All of the text of this specification is normative except
+ examples, notes, and sections explicitly marked as
+ non-normative.</p>
+
+ <h3><a name=changesFromCSS2></a>1.3. Changes from CSS2</h3>
+
+ <p><em>This section is non-normative.</em></p>
+
+ <p>The main differences between the selectors in CSS2 and those in
+ Selectors are:
+
+ <ul>
+
+ <li>the list of basic definitions (selector, group of selectors,
+ simple selector, etc.) has been changed; in particular, what was
+ referred to in CSS2 as a simple selector is now called a sequence
+ of simple selectors, and the term "simple selector" is now used for
+ the components of this sequence</li>
+
+ <li>an optional namespace component is now allowed in type element
+ selectors, the universal selector and attribute selectors</li>
+
+ <li>a <a href="#general-sibling-combinators">new combinator</a> has been introduced</li>
+
+ <li>new simple selectors including substring matching attribute
+ selectors, and new pseudo-classes</li>
+
+ <li>new pseudo-elements, and introduction of the "::" convention
+ for pseudo-elements</li>
+
+ <li>the grammar has been rewritten</li>
+
+ <li>profiles to be added to specifications integrating Selectors
+ and defining the set of selectors which is actually supported by
+ each specification</li>
+
+ <li>Selectors are now a CSS3 Module and an independent
+ specification; other specifications can now refer to this document
+ independently of CSS</li>
+
+ <li>the specification now has its own test suite</li>
+
+ </ul>
+
+<h2><a name=selectors></a>2. Selectors</h2>
+
+<p><em>This section is non-normative, as it merely summarizes the
+following sections.</em></p>
+
+<p>A Selector represents a structure. This structure can be used as a
+condition (e.g. in a CSS rule) that determines which elements a
+selector matches in the document tree, or as a flat description of the
+HTML or XML fragment corresponding to that structure.</p>
+
+<p>Selectors may range from simple element names to rich contextual
+representations.</p>
+
+<p>The following table summarizes the Selector syntax:</p>
+
+<table class="selectorsReview">
+ <thead>
+ <tr>
+ <th class="pattern">Pattern</th>
+ <th class="meaning">Meaning</th>
+ <th class="described">Described in section</th>
+ <th class="origin">First defined in CSS level</th></tr>
+ <tbody>
+ <tr>
+ <td class="pattern">*</td>
+ <td class="meaning">any element</td>
+ <td class="described"><a
+ href="#universal-selector">Universal
+ selector</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E</td>
+ <td class="meaning">an element of type E</td>
+ <td class="described"><a
+ href="#type-selectors">Type selector</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E[foo]</td>
+ <td class="meaning">an E element with a "foo" attribute</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value is exactly
+ equal to "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo~="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value is a list of
+ space-separated values, one of which is exactly equal to "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E[foo^="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value begins exactly
+ with the string "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[foo$="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value ends exactly
+ with the string "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[foo*="bar"]</td>
+ <td class="meaning">an E element whose "foo" attribute value contains the
+ substring "bar"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E[hreflang|="en"]</td>
+ <td class="meaning">an E element whose "hreflang" attribute has a hyphen-separated
+ list of values beginning (from the left) with "en"</td>
+ <td class="described"><a
+ href="#attribute-selectors">Attribute
+ selectors</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:root</td>
+ <td class="meaning">an E element, root of the document</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-child(n)</td>
+ <td class="meaning">an E element, the n-th child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-last-child(n)</td>
+ <td class="meaning">an E element, the n-th child of its parent, counting
+ from the last one</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-of-type(n)</td>
+ <td class="meaning">an E element, the n-th sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:nth-last-of-type(n)</td>
+ <td class="meaning">an E element, the n-th sibling of its type, counting
+ from the last one</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:first-child</td>
+ <td class="meaning">an E element, first child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:last-child</td>
+ <td class="meaning">an E element, last child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:first-of-type</td>
+ <td class="meaning">an E element, first sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:last-of-type</td>
+ <td class="meaning">an E element, last sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:only-child</td>
+ <td class="meaning">an E element, only child of its parent</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:only-of-type</td>
+ <td class="meaning">an E element, only sibling of its type</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:empty</td>
+ <td class="meaning">an E element that has no children (including text
+ nodes)</td>
+ <td class="described"><a
+ href="#structural-pseudos">Structural
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:link<br>E:visited</td>
+ <td class="meaning">an E element being the source anchor of a hyperlink of
+ which the target is not yet visited (:link) or already visited
+ (:visited)</td>
+ <td class="described"><a
+ href="#link">The link
+ pseudo-classes</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E:active<br>E:hover<br>E:focus</td>
+ <td class="meaning">an E element during certain user actions</td>
+ <td class="described"><a
+ href="#useraction-pseudos">The user
+ action pseudo-classes</a></td>
+ <td class="origin">1 and 2</td></tr>
+ <tr>
+ <td class="pattern">E:target</td>
+ <td class="meaning">an E element being the target of the referring URI</td>
+ <td class="described"><a
+ href="#target-pseudo">The target
+ pseudo-class</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:lang(fr)</td>
+ <td class="meaning">an element of type E in language "fr" (the document
+ language specifies how language is determined)</td>
+ <td class="described"><a
+ href="#lang-pseudo">The :lang()
+ pseudo-class</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E:enabled<br>E:disabled</td>
+ <td class="meaning">a user interface element E which is enabled or
+ disabled</td>
+ <td class="described"><a
+ href="#UIstates">The UI element states
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E:checked<!--<br>E:indeterminate--></td>
+ <td class="meaning">a user interface element E which is checked<!-- or in an
+ indeterminate state--> (for instance a radio-button or checkbox)</td>
+ <td class="described"><a
+ href="#UIstates">The UI element states
+ pseudo-classes</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E::first-line</td>
+ <td class="meaning">the first formatted line of an E element</td>
+ <td class="described"><a
+ href="#first-line">The ::first-line
+ pseudo-element</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E::first-letter</td>
+ <td class="meaning">the first formatted letter of an E element</td>
+ <td class="described"><a
+ href="#first-letter">The ::first-letter
+ pseudo-element</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E::selection</td>
+ <td class="meaning">the portion of an E element that is currently
+ selected/highlighted by the user</td>
+ <td class="described"><a
+ href="#UIfragments">The UI element
+ fragments pseudo-elements</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E::before</td>
+ <td class="meaning">generated content before an E element</td>
+ <td class="described"><a
+ href="#gen-content">The ::before
+ pseudo-element</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E::after</td>
+ <td class="meaning">generated content after an E element</td>
+ <td class="described"><a
+ href="#gen-content">The ::after
+ pseudo-element</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E.warning</td>
+ <td class="meaning">an E element whose class is
+"warning" (the document language specifies how class is determined).</td>
+ <td class="described"><a
+ href="#class-html">Class
+ selectors</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E#myid</td>
+ <td class="meaning">an E element with ID equal to "myid".</td>
+ <td class="described"><a
+ href="#id-selectors">ID
+ selectors</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E:not(s)</td>
+ <td class="meaning">an E element that does not match simple selector s</td>
+ <td class="described"><a
+ href="#negation">Negation
+ pseudo-class</a></td>
+ <td class="origin">3</td></tr>
+ <tr>
+ <td class="pattern">E F</td>
+ <td class="meaning">an F element descendant of an E element</td>
+ <td class="described"><a
+ href="#descendant-combinators">Descendant
+ combinator</a></td>
+ <td class="origin">1</td></tr>
+ <tr>
+ <td class="pattern">E &gt; F</td>
+ <td class="meaning">an F element child of an E element</td>
+ <td class="described"><a
+ href="#child-combinators">Child
+ combinator</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E + F</td>
+ <td class="meaning">an F element immediately preceded by an E element</td>
+ <td class="described"><a
+ href="#adjacent-sibling-combinators">Adjacent sibling combinator</a></td>
+ <td class="origin">2</td></tr>
+ <tr>
+ <td class="pattern">E ~ F</td>
+ <td class="meaning">an F element preceded by an E element</td>
+ <td class="described"><a
+ href="#general-sibling-combinators">General sibling combinator</a></td>
+ <td class="origin">3</td></tr></tbody></table>
+
+<p>The meaning of each selector is derived from the table above by
+prepending "matches" to the contents of each cell in the "Meaning"
+column.</p>
+
+<h2><a name=casesens>3. Case sensitivity</a></h2>
+
+<p>The case sensitivity of document language element names, attribute
+names, and attribute values in selectors depends on the document
+language. For example, in HTML, element names are case-insensitive,
+but in XML, they are case-sensitive.</p>
+
+<h2><a name=selector-syntax>4. Selector syntax</a></h2>
+
+<p>A <dfn><a name=selector>selector</a></dfn> is a chain of one
+or more <a href="#sequence">sequences of simple selectors</a>
+separated by <a href="#combinators">combinators</a>.</p>
+
+<p>A <dfn><a name=sequence>sequence of simple selectors</a></dfn>
+is a chain of <a href="#simple-selectors-dfn">simple selectors</a>
+that are not separated by a <a href="#combinators">combinator</a>. It
+always begins with a <a href="#type-selectors">type selector</a> or a
+<a href="#universal-selector">universal selector</a>. No other type
+selector or universal selector is allowed in the sequence.</p>
+
+<p>A <dfn><a name=simple-selectors-dfn></a><a
+href="#simple-selectors">simple selector</a></dfn> is either a <a
+href="#type-selectors">type selector</a>, <a
+href="#universal-selector">universal selector</a>, <a
+href="#attribute-selectors">attribute selector</a>, <a
+href="#class-html">class selector</a>, <a
+href="#id-selectors">ID selector</a>, <a
+href="#content-selectors">content selector</a>, or <a
+href="#pseudo-classes">pseudo-class</a>. One <a
+href="#pseudo-elements">pseudo-element</a> may be appended to the last
+sequence of simple selectors.</p>
+
+<p><dfn>Combinators</dfn> are: white space, &quot;greater-than
+sign&quot; (U+003E, <code>&gt;</code>), &quot;plus sign&quot; (U+002B,
+<code>+</code>) and &quot;tilde&quot; (U+007E, <code>~</code>). White
+space may appear between a combinator and the simple selectors around
+it. <a name=whitespace></a>Only the characters "space" (U+0020), "tab"
+(U+0009), "line feed" (U+000A), "carriage return" (U+000D), and "form
+feed" (U+000C) can occur in white space. Other space-like characters,
+such as "em-space" (U+2003) and "ideographic space" (U+3000), are
+never part of white space.</p>
+
+<p>The elements of a document tree that are represented by a selector
+are the <dfn><a name=subject></a>subjects of the selector</dfn>. A
+selector consisting of a single sequence of simple selectors
+represents any element satisfying its requirements. Prepending another
+sequence of simple selectors and a combinator to a sequence imposes
+additional matching constraints, so the subjects of a selector are
+always a subset of the elements represented by the last sequence of
+simple selectors.</p>
+
+<p>An empty selector, containing no sequence of simple selectors and
+no pseudo-element, is an <a href="#Conformance">invalid
+selector</a>.</p>
+
+<h2><a name=grouping>5. Groups of selectors</a></h2>
+
+<p>When several selectors share the same declarations, they may be
+grouped into a comma-separated list. (A comma is U+002C.)</p>
+
+<div class="example">
+<p>CSS examples:</p>
+<p>In this example, we condense three rules with identical
+declarations into one. Thus,</p>
+<pre>h1 { font-family: sans-serif }
+h2 { font-family: sans-serif }
+h3 { font-family: sans-serif }</pre>
+<p>is equivalent to:</p>
+<pre>h1, h2, h3 { font-family: sans-serif }</pre>
+</div>
+
+<p><strong>Warning</strong>: the equivalence is true in this example
+because all the selectors are valid selectors. If just one of these
+selectors were invalid, the entire group of selectors would be
+invalid. This would invalidate the rule for all three heading
+elements, whereas in the former case only one of the three individual
+heading rules would be invalidated.</p>
+
+
+<h2><a name=simple-selectors>6. Simple selectors</a></h2>
+
+<h3><a name=type-selectors>6.1. Type selector</a></h3>
+
+<p>A <dfn>type selector</dfn> is the name of a document language
+element type. A type selector represents an instance of the element
+type in the document tree.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents an <code>h1</code> element in the document tree:</p>
+ <pre>h1</pre>
+</div>
+
+
+<h4><a name=typenmsp>6.1.1. Type selectors and namespaces</a></h4>
+
+<p>Type selectors allow an optional namespace (<a
+href="#refsXMLNAMES">[XMLNAMES]</a>) component. A namespace prefix
+that has been previously declared may be prepended to the element name
+separated by the namespace separator &quot;vertical bar&quot;
+(U+007C, <code>|</code>).</p>
+
+<p>The namespace component may be left empty to indicate that the
+selector is only to represent elements with no declared namespace.</p>
+
+<p>An asterisk may be used for the namespace prefix, indicating that
+the selector represents elements in any namespace (including elements
+with no namespace).</p>
+
+<p>Element type selectors that have no namespace component (no
+namespace separator), represent elements without regard to the
+element's namespace (equivalent to "<code>*|</code>") unless a default
+namespace has been declared. If a default namespace has been declared,
+the selector will represent only elements in the default
+namespace.</p>
+
+<p>A type selector containing a namespace prefix that has not been
+previously declared is an <a href="#Conformance">invalid</a> selector.
+The mechanism for declaring a namespace prefix is left up to the
+language implementing Selectors. In CSS, such a mechanism is defined
+in the General Syntax module.</p>
+
+<p>In a namespace-aware client, element type selectors will only match
+against the <a
+href="http://www.w3.org/TR/REC-xml-names/#NT-LocalPart">local part</a>
+of the element's <a
+href="http://www.w3.org/TR/REC-xml-names/#ns-qualnames">qualified
+name</a>. See <a href="#downlevel">below</a> for notes about matching
+behaviors in down-level clients.</p>
+
+<p>In summary:</p>
+
+<dl>
+ <dt><code>ns|E</code></dt>
+ <dd>elements with name E in namespace ns</dd>
+ <dt><code>*|E</code></dt>
+ <dd>elements with name E in any namespace, including those without any
+ declared namespace</dd>
+ <dt><code>|E</code></dt>
+ <dd>elements with name E without any declared namespace</dd>
+ <dt><code>E</code></dt>
+ <dd>if no default namespace has been specified, this is equivalent to *|E.
+ Otherwise it is equivalent to ns|E where ns is the default namespace.</dd>
+</dl>
+
+<div class="example">
+ <p>CSS examples:</p>
+
+ <pre>@namespace foo url(http://www.example.com);
+ foo|h1 { color: blue }
+ foo|* { color: yellow }
+ |h1 { color: red }
+ *|h1 { color: green }
+ h1 { color: green }</pre>
+
+ <p>The first rule will match only <code>h1</code> elements in the
+ "http://www.example.com" namespace.</p>
+
+ <p>The second rule will match all elements in the
+ "http://www.example.com" namespace.</p>
+
+ <p>The third rule will match only <code>h1</code> elements without
+ any declared namespace.</p>
+
+ <p>The fourth rule will match <code>h1</code> elements in any
+ namespace (including those without any declared namespace).</p>
+
+ <p>The last rule is equivalent to the fourth rule because no default
+ namespace has been defined.</p>
+
+</div>
+
+<h3><a name=universal-selector>6.2. Universal selector</a> </h3>
+
+<p>The <dfn>universal selector</dfn>, written &quot;asterisk&quot;
+(<code>*</code>), represents the qualified name of any element
+type. It represents any single element in the document tree in any
+namespace (including those without any declared namespace) if no
+default namespace has been specified. If a default namespace has been
+specified, see <a href="#univnmsp">Universal selector and
+Namespaces</a> below.</p>
+
+<p>If the universal selector is not the only component of a sequence
+of simple selectors, the <code>*</code> may be omitted.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <ul>
+ <li><code>*[hreflang|=en]</code> and <code>[hreflang|=en]</code> are equivalent,</li>
+ <li><code>*.warning</code> and <code>.warning</code> are equivalent,</li>
+ <li><code>*#myid</code> and <code>#myid</code> are equivalent.</li>
+ </ul>
+</div>
+
+<p class="note"><strong>Note:</strong> it is recommended that the
+<code>*</code>, representing the universal selector, not be
+omitted.</p>
+
+<h4><a name=univnmsp>6.2.1. Universal selector and namespaces</a></h4>
+
+<p>The universal selector allows an optional namespace component. It
+is used as follows:</p>
+
+<dl>
+ <dt><code>ns|*</code></dt>
+ <dd>all elements in namespace ns</dd>
+ <dt><code>*|*</code></dt>
+ <dd>all elements</dd>
+ <dt><code>|*</code></dt>
+ <dd>all elements without any declared namespace</dd>
+ <dt><code>*</code></dt>
+ <dd>if no default namespace has been specified, this is equivalent to *|*.
+ Otherwise it is equivalent to ns|* where ns is the default namespace.</dd>
+</dl>
+
+<p>A universal selector containing a namespace prefix that has not
+been previously declared is an <a href="#Conformance">invalid</a>
+selector. The mechanism for declaring a namespace prefix is left up
+to the language implementing Selectors. In CSS, such a mechanism is
+defined in the General Syntax module.</p>
+
+
+<h3><a name=attribute-selectors>6.3. Attribute selectors</a></h3>
+
+<p>Selectors allow the representation of an element's attributes. When
+a selector is used as an expression to match against an element,
+attribute selectors must be considered to match an element if that
+element has an attribute that matches the attribute represented by the
+attribute selector.</p>
+
+<h4><a name=attribute-representation>6.3.1. Attribute presence and values
+selectors</a></h4>
+
+<p>CSS2 introduced four attribute selectors:</p>
+
+<dl>
+ <dt><code>[att]</code>
+ <dd>Represents an element with the <code>att</code> attribute, whatever the value of
+ the attribute.</dd>
+ <dt><code>[att=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value is exactly
+ "val".</dd>
+ <dt><code>[att~=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value is a <a
+ href="#whitespace">whitespace</a>-separated list of words, one of
+ which is exactly "val". If "val" contains whitespace, it will never
+ represent anything (since the words are <em>separated</em> by
+ spaces).</dd>
+ <dt><code>[att|=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute, its value either
+ being exactly "val" or beginning with "val" immediately followed by
+ "-" (U+002D). This is primarily intended to allow language subcode
+ matches (e.g., the <code>hreflang</code> attribute on the
+ <code>link</code> element in HTML) as described in RFC 3066 (<a
+ href="#refsRFC3066">[RFC3066]</a>). For <code>lang</code> (or
+ <code>xml:lang</code>) language subcode matching, please see <a
+ href="#lang-pseudo">the <code>:lang</code> pseudo-class</a>.</dd>
+</dl>
+
+<p>Attribute values must be identifiers or strings. The
+case-sensitivity of attribute names and values in selectors depends on
+the document language.</p>
+
+<div class="example">
+
+ <p>Examples:</p>
+
+ <p>The following attribute selector represents an <code>h1</code>
+ element that carries the <code>title</code> attribute, whatever its
+ value:</p>
+
+ <pre>h1[title]</pre>
+
+ <p>In the following example, the selector represents a
+ <code>span</code> element whose <code>class</code> attribute has
+ exactly the value "example":</p>
+
+ <pre>span[class="example"]</pre>
+
+ <p>Multiple attribute selectors can be used to represent several
+ attributes of an element, or several conditions on the same
+ attribute. Here, the selector represents a <code>span</code> element
+ whose <code>hello</code> attribute has exactly the value "Cleveland"
+ and whose <code>goodbye</code> attribute has exactly the value
+ "Columbus":</p>
+
+ <pre>span[hello="Cleveland"][goodbye="Columbus"]</pre>
+
+ <p>The following selectors illustrate the differences between "="
+ and "~=". The first selector will represent, for example, the value
+ "copyright copyleft copyeditor" on a <code>rel</code> attribute. The
+ second selector will only represent an <code>a</code> element with
+ an <code>href</code> attribute having the exact value
+ "http://www.w3.org/".</p>
+
+ <pre>a[rel~="copyright"]
+a[href="http://www.w3.org/"]</pre>
+
+ <p>The following selector represents a <code>link</code> element
+ whose <code>hreflang</code> attribute is exactly "fr".</p>
+
+ <pre>link[hreflang=fr]</pre>
+
+ <p>The following selector represents a <code>link</code> element for
+ which the values of the <code>hreflang</code> attribute begins with
+ "en", including "en", "en-US", and "en-cockney":</p>
+
+ <pre>link[hreflang|="en"]</pre>
+
+ <p>Similarly, the following selectors represents a
+ <code>DIALOGUE</code> element whenever it has one of two different
+ values for an attribute <code>character</code>:</p>
+
+ <pre>DIALOGUE[character=romeo]
+DIALOGUE[character=juliet]</pre>
+
+</div>
+
+<h4><a name=attribute-substrings></a>6.3.2. Substring matching attribute
+selectors</h4>
+
+<p>Three additional attribute selectors are provided for matching
+substrings in the value of an attribute:</p>
+
+<dl>
+ <dt><code>[att^=val]</code></dt>
+ <dd>Represents an element with the <code>att</code> attribute whose value begins
+ with the prefix "val".</dd>
+ <dt><code>[att$=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute whose value ends with
+ the suffix "val".</dd>
+ <dt><code>[att*=val]</code>
+ <dd>Represents an element with the <code>att</code> attribute whose value contains
+ at least one instance of the substring "val".</dd>
+</dl>
+
+<p>Attribute values must be identifiers or strings. The
+case-sensitivity of attribute names in selectors depends on the
+document language.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents an HTML <code>object</code>, referencing an
+ image:</p>
+ <pre>object[type^="image/"]</pre>
+ <p>The following selector represents an HTML anchor <code>a</code> with an
+ <code>href</code> attribute whose value ends with ".html".</p>
+ <pre>a[href$=".html"]</pre>
+ <p>The following selector represents an HTML paragraph with a <code>title</code>
+ attribute whose value contains the substring "hello"</p>
+ <pre>p[title*="hello"]</pre>
+</div>
+
+<h4><a name=attrnmsp>6.3.3. Attribute selectors and namespaces</a></h4>
+
+<p>Attribute selectors allow an optional namespace component to the
+attribute name. A namespace prefix that has been previously declared
+may be prepended to the attribute name separated by the namespace
+separator &quot;vertical bar&quot; (<code>|</code>). In keeping with
+the Namespaces in the XML recommendation, default namespaces do not
+apply to attributes, therefore attribute selectors without a namespace
+component apply only to attributes that have no declared namespace
+(equivalent to "<code>|attr</code>"). An asterisk may be used for the
+namespace prefix indicating that the selector is to match all
+attribute names without regard to the attribute's namespace.
+
+<p>An attribute selector with an attribute name containing a namespace
+prefix that has not been previously declared is an <a
+href="#Conformance">invalid</a> selector. The mechanism for declaring
+a namespace prefix is left up to the language implementing Selectors.
+In CSS, such a mechanism is defined in the General Syntax module.
+
+<div class="example">
+ <p>CSS examples:</p>
+ <pre>@namespace foo "http://www.example.com";
+[foo|att=val] { color: blue }
+[*|att] { color: yellow }
+[|att] { color: green }
+[att] { color: green }</pre>
+
+ <p>The first rule will match only elements with the attribute
+ <code>att</code> in the "http://www.example.com" namespace with the
+ value "val".</p>
+
+ <p>The second rule will match only elements with the attribute
+ <code>att</code> regardless of the namespace of the attribute
+ (including no declared namespace).</p>
+
+ <p>The last two rules are equivalent and will match only elements
+ with the attribute <code>att</code> where the attribute is not
+ declared to be in a namespace.</p>
+
+</div>
+
+<h4><a name=def-values>6.3.4. Default attribute values in DTDs</a></h4>
+
+<p>Attribute selectors represent explicitly set attribute values in
+the document tree. Default attribute values may be defined in a DTD or
+elsewhere, but cannot always be selected by attribute
+selectors. Selectors should be designed so that they work even if the
+default values are not included in the document tree.</p>
+
+<p>More precisely, a UA is <em>not</em> required to read an "external
+subset" of the DTD but <em>is</em> required to look for default
+attribute values in the document's "internal subset." (See <a
+href="#refsXML10">[XML10]</a> for definitions of these subsets.)</p>
+
+<p>A UA that recognizes an XML namespace <a
+href="#refsXMLNAMES">[XMLNAMES]</a> is not required to use its
+knowledge of that namespace to treat default attribute values as if
+they were present in the document. (For example, an XHTML UA is not
+required to use its built-in knowledge of the XHTML DTD.)</p>
+
+<p class="note"><strong>Note:</strong> Typically, implementations
+choose to ignore external subsets.</p>
+
+<div class="example">
+<p>Example:</p>
+
+<p>Consider an element EXAMPLE with an attribute "notation" that has a
+default value of "decimal". The DTD fragment might be</p>
+
+<pre class="dtd-example">&lt;!ATTLIST EXAMPLE notation (decimal,octal) "decimal"></pre>
+
+<p>If the style sheet contains the rules</p>
+
+<pre>EXAMPLE[notation=decimal] { /*... default property settings ...*/ }
+EXAMPLE[notation=octal] { /*... other settings...*/ }</pre>
+
+<p>the first rule will not match elements whose "notation" attribute
+is set by default, i.e. not set explicitly. To catch all cases, the
+attribute selector for the default value must be dropped:</p>
+
+<pre>EXAMPLE { /*... default property settings ...*/ }
+EXAMPLE[notation=octal] { /*... other settings...*/ }</pre>
+
+<p>Here, because the selector <code>EXAMPLE[notation=octal]</code> is
+more specific than the tag
+selector alone, the style declarations in the second rule will override
+those in the first for elements that have a "notation" attribute value
+of "octal". Care has to be taken that all property declarations that
+are to apply only to the default case are overridden in the non-default
+cases' style rules.</p>
+
+</div>
+
+<h3><a name=class-html>6.4. Class selectors</a></h3>
+
+<p>Working with HTML, authors may use the period (U+002E,
+<code>.</code>) notation as an alternative to the <code>~=</code>
+notation when representing the <code>class</code> attribute. Thus, for
+HTML, <code>div.value</code> and <code>div[class~=value]</code> have
+the same meaning. The attribute value must immediately follow the
+&quot;period&quot; (<code>.</code>).</p>
+
+<p>UAs may apply selectors using the period (.) notation in XML
+documents if the UA has namespace-specific knowledge that allows it to
+determine which attribute is the &quot;class&quot; attribute for the
+respective namespace. One such example of namespace-specific knowledge
+is the prose in the specification for a particular namespace (e.g. SVG
+1.0 <a href="#refsSVG">[SVG]</a> describes the <a
+href="http://www.w3.org/TR/2001/PR-SVG-20010719/styling.html#ClassAttribute">SVG
+&quot;class&quot; attribute</a> and how a UA should interpret it, and
+similarly MathML 1.01 <a href="#refsMATH">[MATH]</a> describes the <a
+href="http://www.w3.org/1999/07/REC-MathML-19990707/chapter2.html#sec2.3.4">MathML
+&quot;class&quot; attribute</a>.)</p>
+
+<div class="example">
+ <p>CSS examples:</p>
+
+ <p>We can assign style information to all elements with
+ <code>class~="pastoral"</code> as follows:</p>
+
+ <pre>*.pastoral { color: green } /* all elements with class~=pastoral */</pre>
+
+ <p>or just</p>
+
+ <pre>.pastoral { color: green } /* all elements with class~=pastoral */</pre>
+
+ <p>The following assigns style only to H1 elements with
+ <code>class~="pastoral"</code>:</p>
+
+ <pre>H1.pastoral { color: green } /* H1 elements with class~=pastoral */</pre>
+
+ <p>Given these rules, the first H1 instance below would not have
+ green text, while the second would:</p>
+
+ <pre>&lt;H1&gt;Not green&lt;/H1&gt;
+&lt;H1 class="pastoral"&gt;Very green&lt;/H1&gt;</pre>
+
+</div>
+
+<p>To represent a subset of "class" values, each value must be preceded
+by a ".", in any order.</P>
+
+<div class="example">
+
+ <p>CSS example:</p>
+
+ <p>The following rule matches any P element whose "class" attribute
+ has been assigned a list of <a
+ href="#whitespace">whitespace</a>-separated values that includes
+ "pastoral" and "marine":</p>
+
+ <pre>p.pastoral.marine { color: green }</pre>
+
+ <p>This rule matches when <code>class="pastoral blue aqua
+ marine"</code> but does not match for <code>class="pastoral
+ blue"</code>.</p>
+
+</div>
+
+<p class="note"><strong>Note:</strong> Because CSS gives considerable
+power to the "class" attribute, authors could conceivably design their
+own "document language" based on elements with almost no associated
+presentation (such as DIV and SPAN in HTML) and assigning style
+information through the "class" attribute. Authors should avoid this
+practice since the structural elements of a document language often
+have recognized and accepted meanings and author-defined classes may
+not.</p>
+
+<p class="note"><strong>Note:</strong> If an element has multiple
+class attributes, their values must be concatenated with spaces
+between the values before searching for the class. As of this time the
+working group is not aware of any manner in which this situation can
+be reached, however, so this behavior is explicitly non-normative in
+this specification.</p>
+
+<h3><a name=id-selectors>6.5. ID selectors</a></h3>
+
+<p>Document languages may contain attributes that are declared to be
+of type ID. What makes attributes of type ID special is that no two
+such attributes can have the same value in a document, regardless of
+the type of the elements that carry them; whatever the document
+language, an ID typed attribute can be used to uniquely identify its
+element. In HTML all ID attributes are named "id"; XML applications
+may name ID attributes differently, but the same restriction
+applies.</p>
+
+<p>An ID-typed attribute of a document language allows authors to
+assign an identifier to one element instance in the document tree. W3C
+ID selectors represent an element instance based on its identifier. An
+ID selector contains a &quot;number sign&quot; (U+0023,
+<code>#</code>) immediately followed by the ID value, which must be an
+identifier.</p>
+
+<p>Selectors does not specify how a UA knows the ID-typed attribute of
+an element. The UA may, e.g., read a document's DTD, have the
+information hard-coded or ask the user.
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following ID selector represents an <code>h1</code> element
+ whose ID-typed attribute has the value "chapter1":</p>
+ <pre>h1#chapter1</pre>
+ <p>The following ID selector represents any element whose ID-typed
+ attribute has the value "chapter1":</p>
+ <pre>#chapter1</pre>
+ <p>The following selector represents any element whose ID-typed
+ attribute has the value "z98y".</p>
+ <pre>*#z98y</pre>
+</div>
+
+<p class="note"><strong>Note.</strong> In XML 1.0 <a
+href="#refsXML10">[XML10]</a>, the information about which attribute
+contains an element's IDs is contained in a DTD or a schema. When
+parsing XML, UAs do not always read the DTD, and thus may not know
+what the ID of an element is (though a UA may have namespace-specific
+knowledge that allows it to determine which attribute is the ID
+attribute for that namespace). If a style sheet designer knows or
+suspects that a UA may not know what the ID of an element is, he
+should use normal attribute selectors instead:
+<code>[name=p371]</code> instead of <code>#p371</code>. Elements in
+XML 1.0 documents without a DTD do not have IDs at all.</p>
+
+<p>If an element has multiple ID attributes, all of them must be
+treated as IDs for that element for the purposes of the ID
+selector. Such a situation could be reached using mixtures of xml:id,
+DOM3 Core, XML DTDs, and namespace-specific knowledge.</p>
+
+<h3><a name=pseudo-classes>6.6. Pseudo-classes</a></h3>
+
+<p>The pseudo-class concept is introduced to permit selection based on
+information that lies outside of the document tree or that cannot be
+expressed using the other simple selectors.</p>
+
+<p>A pseudo-class always consists of a &quot;colon&quot;
+(<code>:</code>) followed by the name of the pseudo-class and
+optionally by a value between parentheses.</p>
+
+<p>Pseudo-classes are allowed in all sequences of simple selectors
+contained in a selector. Pseudo-classes are allowed anywhere in
+sequences of simple selectors, after the leading type selector or
+universal selector (possibly omitted). Pseudo-class names are
+case-insensitive. Some pseudo-classes are mutually exclusive, while
+others can be applied simultaneously to the same
+element. Pseudo-classes may be dynamic, in the sense that an element
+may acquire or lose a pseudo-class while a user interacts with the
+document.</p>
+
+
+<h4><a name=dynamic-pseudos>6.6.1. Dynamic pseudo-classes</a></h4>
+
+<p>Dynamic pseudo-classes classify elements on characteristics other
+than their name, attributes, or content, in principle characteristics
+that cannot be deduced from the document tree.</p>
+
+<p>Dynamic pseudo-classes do not appear in the document source or
+document tree.</p>
+
+
+<h5>The <a name=link>link pseudo-classes: :link and :visited</a></h5>
+
+<p>User agents commonly display unvisited links differently from
+previously visited ones. Selectors
+provides the pseudo-classes <code>:link</code> and
+<code>:visited</code> to distinguish them:</p>
+
+<ul>
+ <li>The <code>:link</code> pseudo-class applies to links that have
+ not yet been visited.</li>
+ <li>The <code>:visited</code> pseudo-class applies once the link has
+ been visited by the user. </li>
+</ul>
+
+<p>After some amount of time, user agents may choose to return a
+visited link to the (unvisited) ':link' state.</p>
+
+<p>The two states are mutually exclusive.</p>
+
+<div class="example">
+
+ <p>Example:</p>
+
+ <p>The following selector represents links carrying class
+ <code>external</code> and already visited:</p>
+
+ <pre>a.external:visited</pre>
+
+</div>
+
+<p class="note"><strong>Note:</strong> It is possible for style sheet
+authors to abuse the :link and :visited pseudo-classes to determine
+which sites a user has visited without the user's consent.
+
+<p>UAs may therefore treat all links as unvisited links, or implement
+other measures to preserve the user's privacy while rendering visited
+and unvisited links differently.</p>
+
+<h5>The <a name=useraction-pseudos>user action pseudo-classes
+:hover, :active, and :focus</a></h5>
+
+<p>Interactive user agents sometimes change the rendering in response
+to user actions. Selectors provides
+three pseudo-classes for the selection of an element the user is
+acting on.</p>
+
+<ul>
+
+ <li>The <code>:hover</code> pseudo-class applies while the user
+ designates an element with a pointing device, but does not activate
+ it. For example, a visual user agent could apply this pseudo-class
+ when the cursor (mouse pointer) hovers over a box generated by the
+ element. User agents not that do not support <a
+ href="http://www.w3.org/TR/REC-CSS2/media.html#interactive-media-group">interactive
+ media</a> do not have to support this pseudo-class. Some conforming
+ user agents that support <a
+ href="http://www.w3.org/TR/REC-CSS2/media.html#interactive-media-group">interactive
+ media</a> may not be able to support this pseudo-class (e.g., a pen
+ device that does not detect hovering).</li>
+
+ <li>The <code>:active</code> pseudo-class applies while an element
+ is being activated by the user. For example, between the times the
+ user presses the mouse button and releases it.</li>
+
+ <li>The <code>:focus</code> pseudo-class applies while an element
+ has the focus (accepts keyboard or mouse events, or other forms of
+ input). </li>
+
+</ul>
+
+<p>There may be document language or implementation specific limits on
+which elements can become <code>:active</code> or acquire
+<code>:focus</code>.</p>
+
+<p>These pseudo-classes are not mutually exclusive. An element may
+match several pseudo-classes at the same time.</p>
+
+<p>Selectors doesn't define if the parent of an element that is
+':active' or ':hover' is also in that state.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <pre>a:link /* unvisited links */
+a:visited /* visited links */
+a:hover /* user hovers */
+a:active /* active links */</pre>
+ <p>An example of combining dynamic pseudo-classes:</p>
+ <pre>a:focus
+a:focus:hover</pre>
+ <p>The last selector matches <code>a</code> elements that are in
+ the pseudo-class :focus and in the pseudo-class :hover.</p>
+</div>
+
+<p class="note"><strong>Note:</strong> An element can be both ':visited'
+and ':active' (or ':link' and ':active').</p>
+
+<h4><a name=target-pseudo>6.6.2. The target pseudo-class :target</a></h4>
+
+<p>Some URIs refer to a location within a resource. This kind of URI
+ends with a &quot;number sign&quot; (#) followed by an anchor
+identifier (called the fragment identifier).</p>
+
+<p>URIs with fragment identifiers link to a certain element within the
+document, known as the target element. For instance, here is a URI
+pointing to an anchor named <code>section_2</code> in an HTML
+document:</p>
+
+<pre>http://example.com/html/top.html#section_2</pre>
+
+<p>A target element can be represented by the <code>:target</code>
+pseudo-class. If the document's URI has no fragment identifier, then
+the document has no target element.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <pre>p.note:target</pre>
+ <p>This selector represents a <code>p</code> element of class
+ <code>note</code> that is the target element of the referring
+ URI.</p>
+</div>
+
+<div class="example">
+ <p>CSS example:</p>
+ <p>Here, the <code>:target</code> pseudo-class is used to make the
+ target element red and place an image before it, if there is one:</p>
+ <pre>*:target { color : red }
+*:target::before { content : url(target.png) }</pre>
+</div>
+
+<h4><a name=lang-pseudo>6.6.3. The language pseudo-class :lang</a></h4>
+
+<p>If the document language specifies how the human language of an
+element is determined, it is possible to write selectors that
+represent an element based on its language. For example, in HTML <a
+href="#refsHTML4">[HTML4]</a>, the language is determined by a
+combination of the <code>lang</code> attribute, the <code>meta</code>
+element, and possibly by information from the protocol (such as HTTP
+headers). XML uses an attribute called <code>xml:lang</code>, and
+there may be other document language-specific methods for determining
+the language.</p>
+
+<p>The pseudo-class <code>:lang(C)</code> represents an element that
+is in language C. Whether an element is represented by a
+<code>:lang()</code> selector is based solely on the identifier C
+being either equal to, or a hyphen-separated substring of, the
+element's language value, in the same way as if performed by the <a
+href="#attribute-representation">'|='</a> operator in attribute
+selectors. The identifier C does not have to be a valid language
+name.</p>
+
+<p>C must not be empty. (If it is, the selector is invalid.)</p>
+
+<p class="note"><strong>Note:</strong> It is recommended that
+documents and protocols indicate language using codes from RFC 3066 <a
+href="#refsRFC3066">[RFC3066]</a> or its successor, and by means of
+"xml:lang" attributes in the case of XML-based documents <a
+href="#refsXML10">[XML10]</a>. See <a
+href="http://www.w3.org/International/questions/qa-lang-2or3.html">
+"FAQ: Two-letter or three-letter language codes."</a></p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The two following selectors represent an HTML document that is in
+ Belgian, French, or German. The two next selectors represent
+ <code>q</code> quotations in an arbitrary element in Belgian, French,
+ or German.</p>
+ <pre>html:lang(fr-be)
+html:lang(de)
+:lang(fr-be) &gt; q
+:lang(de) &gt; q</pre>
+</div>
+
+<h4><a name=UIstates>6.6.4. The UI element states pseudo-classes</a></h4>
+
+<h5><a name=enableddisabled>The :enabled and :disabled pseudo-classes</a></h5>
+
+<p>The <code>:enabled</code> pseudo-class allows authors to customize
+the look of user interface elements that are enabled &mdash; which the
+user can select or activate in some fashion (e.g. clicking on a button
+with a mouse). There is a need for such a pseudo-class because there
+is no way to programmatically specify the default appearance of say,
+an enabled <code>input</code> element without also specifying what it
+would look like when it was disabled.</p>
+
+<p>Similar to <code>:enabled</code>, <code>:disabled</code> allows the
+author to specify precisely how a disabled or inactive user interface
+element should look.</p>
+
+<p>Most elements will be neither enabled nor disabled. An element is
+enabled if the user can either activate it or transfer the focus to
+it. An element is disabled if it could be enabled, but the user cannot
+presently activate it or transfer focus to it.</p>
+
+
+<h5><a name=checked>The :checked pseudo-class</a></h5>
+
+<p>Radio and checkbox elements can be toggled by the user. Some menu
+items are "checked" when the user selects them. When such elements are
+toggled "on" the <code>:checked</code> pseudo-class applies. The
+<code>:checked</code> pseudo-class initially applies to such elements
+that have the HTML4 <code>selected</code> and <code>checked</code>
+attributes as described in <a
+href="http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.2.1">Section
+17.2.1 of HTML4</a>, but of course the user can toggle "off" such
+elements in which case the <code>:checked</code> pseudo-class would no
+longer apply. While the <code>:checked</code> pseudo-class is dynamic
+in nature, and is altered by user action, since it can also be based
+on the presence of the semantic HTML4 <code>selected</code> and
+<code>checked</code> attributes, it applies to all media.
+
+
+<h5><a name=indeterminate>The :indeterminate pseudo-class</a></h5>
+
+<div class="note">
+
+<p>Radio and checkbox elements can be toggled by the user, but are
+sometimes in an indeterminate state, neither checked nor unchecked.
+This can be due to an element attribute, or DOM manipulation.</p>
+
+<p>A future version of this specification may introduce an
+<code>:indeterminate</code> pseudo-class that applies to such elements.
+<!--While the <code>:indeterminate</code> pseudo-class is dynamic in
+nature, and is altered by user action, since it can also be based on
+the presence of an element attribute, it applies to all media.</p>
+
+<p>Components of a radio-group initialized with no pre-selected choice
+are an example of :indeterminate state.--></p>
+
+</div>
+
+
+<h4><a name=structural-pseudos>6.6.5. Structural pseudo-classes</a></h4>
+
+<p>Selectors introduces the concept of <dfn>structural
+pseudo-classes</dfn> to permit selection based on extra information that lies in
+the document tree but cannot be represented by other simple selectors or
+combinators.
+
+<p>Note that standalone pieces of PCDATA (text nodes in the DOM) are
+not counted when calculating the position of an element in the list of
+children of its parent. When calculating the position of an element in
+the list of children of its parent, the index numbering starts at 1.
+
+
+<h5><a name=root-pseudo>:root pseudo-class</a></h5>
+
+<p>The <code>:root</code> pseudo-class represents an element that is
+the root of the document. In HTML 4, this is always the
+<code>HTML</code> element.
+
+
+<h5><a name=nth-child-pseudo>:nth-child() pseudo-class</a></h5>
+
+<p>The
+<code>:nth-child(<var>a</var><code>n</code>+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings
+<strong>before</strong> it in the document tree, for a given positive
+integer or zero value of <code>n</code>, and has a parent element. In
+other words, this matches the <var>b</var>th child of an element after
+all the children have been split into groups of <var>a</var> elements
+each. For example, this allows the selectors to address every other
+row in a table, and could be used to alternate the color
+of paragraph text in a cycle of four. The <var>a</var> and
+<var>b</var> values must be zero, negative integers or positive
+integers. The index of the first child of an element is 1.
+
+<p>In addition to this, <code>:nth-child()</code> can take
+'<code>odd</code>' and '<code>even</code>' as arguments instead.
+'<code>odd</code>' has the same signification as <code>2n+1</code>,
+and '<code>even</code>' has the same signification as <code>2n</code>.
+
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-child(2n+1) /* represents every odd row of an HTML table */
+tr:nth-child(odd) /* same */
+tr:nth-child(2n) /* represents every even row of an HTML table */
+tr:nth-child(even) /* same */
+
+/* Alternate paragraph colours in CSS */
+p:nth-child(4n+1) { color: navy; }
+p:nth-child(4n+2) { color: green; }
+p:nth-child(4n+3) { color: maroon; }
+p:nth-child(4n+4) { color: purple; }</pre>
+</div>
+
+<p>When <var>a</var>=0, no repeating is used, so for example
+<code>:nth-child(0n+5)</code> matches only the fifth child. When
+<var>a</var>=0, the <var>a</var><code>n</code> part need not be
+included, so the syntax simplifies to
+<code>:nth-child(<var>b</var>)</code> and the last example simplifies
+to <code>:nth-child(5)</code>.
+
+<div class="example">
+<p>Examples:</p>
+<pre>foo:nth-child(0n+1) /* represents an element foo, first child of its parent element */
+foo:nth-child(1) /* same */</pre>
+</div>
+
+<p>When <var>a</var>=1, the number may be omitted from the rule.
+
+<div class="example">
+<p>Examples:</p>
+<p>The following selectors are therefore equivalent:</p>
+<pre>bar:nth-child(1n+0) /* represents all bar elements, specificity (0,1,1) */
+bar:nth-child(n+0) /* same */
+bar:nth-child(n) /* same */
+bar /* same but lower specificity (0,0,1) */</pre>
+</div>
+
+<p>If <var>b</var>=0, then every <var>a</var>th element is picked. In
+such a case, the <var>b</var> part may be omitted.
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-child(2n+0) /* represents every even row of an HTML table */
+tr:nth-child(2n) /* same */</pre>
+</div>
+
+<p>If both <var>a</var> and <var>b</var> are equal to zero, the
+pseudo-class represents no element in the document tree.</p>
+
+<p>The value <var>a</var> can be negative, but only the positive
+values of <var>a</var><code>n</code>+<var>b</var>, for
+<code>n</code>&ge;0, may represent an element in the document
+tree.</p>
+
+<div class="example">
+<p>Example:</p>
+<pre>html|tr:nth-child(-n+6) /* represents the 6 first rows of XHTML tables */</pre>
+</div>
+
+<p>When the value <var>b</var> is negative, the "+" character in the
+expression must be removed (it is effectively replaced by the "-"
+character indicating the negative value of <var>b</var>).</p>
+
+<div class="example">
+<p>Examples:</p>
+<pre>:nth-child(10n-1) /* represents the 9th, 19th, 29th, etc, element */
+:nth-child(10n+9) /* Same */
+:nth-child(10n+-1) /* Syntactically invalid, and would be ignored */</pre>
+</div>
+
+
+<h5><a name=nth-last-child-pseudo>:nth-last-child() pseudo-class</a></h5>
+
+<p>The <code>:nth-last-child(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings
+<strong>after</strong> it in the document tree, for a given positive
+integer or zero value of <code>n</code>, and has a parent element. See
+<code>:nth-child()</code> pseudo-class for the syntax of its argument.
+It also accepts the '<code>even</code>' and '<code>odd</code>' values
+as arguments.
+
+
+<div class="example">
+<p>Examples:</p>
+<pre>tr:nth-last-child(-n+2) /* represents the two last rows of an HTML table */
+
+foo:nth-last-child(odd) /* represents all odd foo elements in their parent element,
+ counting from the last one */</pre>
+</div>
+
+
+<h5><a name=nth-of-type-pseudo>:nth-of-type() pseudo-class</a></h5>
+
+<p>The <code>:nth-of-type(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings with the same
+element name <strong>before</strong> it in the document tree, for a
+given zero or positive integer value of <code>n</code>, and has a
+parent element. In other words, this matches the <var>b</var>th child
+of that type after all the children of that type have been split into
+groups of a elements each. See <code>:nth-child()</code> pseudo-class
+for the syntax of its argument. It also accepts the
+'<code>even</code>' and '<code>odd</code>' values.
+
+
+<div class="example">
+<p>CSS example:</p>
+<p>This allows an author to alternate the position of floated images:</p>
+<pre>img:nth-of-type(2n+1) { float: right; }
+img:nth-of-type(2n) { float: left; }</pre>
+</div>
+
+
+<h5><a name=nth-last-of-type-pseudo>:nth-last-of-type() pseudo-class</a></h5>
+
+<p>The <code>:nth-last-of-type(<var>a</var>n+<var>b</var>)</code>
+pseudo-class notation represents an element that has
+<var>a</var><code>n</code>+<var>b</var>-1 siblings with the same
+element name <strong>after</strong> it in the document tree, for a
+given zero or positive integer value of <code>n</code>, and has a
+parent element. See <code>:nth-child()</code> pseudo-class for the
+syntax of its argument. It also accepts the '<code>even</code>' and '<code>odd</code>' values.
+
+
+<div class="example">
+ <p>Example:</p>
+ <p>To represent all <code>h2</code> children of an XHTML
+ <code>body</code> except the first and last, one could use the
+ following selector:</p>
+ <pre>body &gt; h2:nth-of-type(n+2):nth-last-of-type(n+2)</pre>
+ <p>In this case, one could also use <code>:not()</code>, although the
+ selector ends up being just as long:</p>
+ <pre>body &gt; h2:not(:first-of-type):not(:last-of-type)</pre>
+</div>
+
+
+<h5><a name=first-child-pseudo>:first-child pseudo-class</a></h5>
+
+<p>Same as <code>:nth-child(1)</code>. The <code>:first-child</code> pseudo-class
+represents an element that is the first child of some other element.
+
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element that is
+ the first child of a <code>div</code> element:</p>
+ <pre>div &gt; p:first-child</pre>
+ <p>This selector can represent the <code>p</code> inside the
+ <code>div</code> of the following fragment:</p>
+ <pre>&lt;p&gt; The last P before the note.&lt;/p&gt;
+&lt;div class="note"&gt;
+ &lt;p&gt; The first P inside the note.&lt;/p&gt;
+&lt;/div&gt;</pre>but cannot represent the second <code>p</code> in the following
+fragment:
+ <pre>&lt;p&gt; The last P before the note.&lt;/p&gt;
+&lt;div class="note"&gt;
+ &lt;h2&gt; Note &lt;/h2&gt;
+ &lt;p&gt; The first P inside the note.&lt;/p&gt;
+&lt;/div&gt;</pre>
+ <p>The following two selectors are usually equivalent:</p>
+ <pre>* &gt; a:first-child /* a is first child of any element */
+a:first-child /* Same (assuming a is not the root element) */</pre>
+</div>
+
+<h5><a name=last-child-pseudo>:last-child pseudo-class</a></h5>
+
+<p>Same as <code>:nth-last-child(1)</code>. The <code>:last-child</code> pseudo-class
+represents an element that is the last child of some other element.
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents a list item <code>li</code> that
+ is the last child of an ordered list <code>ol</code>.
+ <pre>ol &gt; li:last-child</pre>
+</div>
+
+<h5><a name=first-of-type-pseudo>:first-of-type pseudo-class</a></h5>
+
+<p>Same as <code>:nth-of-type(1)</code>. The <code>:first-of-type</code> pseudo-class
+represents an element that is the first sibling of its type in the list of
+children of its parent element.
+
+<div class="example">
+<p>Example:</p>
+<p>The following selector represents a definition title
+<code>dt</code> inside a definition list <code>dl</code>, this
+<code>dt</code> being the first of its type in the list of children of
+its parent element.</p>
+<pre>dl dt:first-of-type</pre>
+<p>It is a valid description for the first two <code>dt</code>
+elements in the following example but not for the third one:</p>
+<pre>&lt;dl&gt;
+ &lt;dt&gt;gigogne&lt;/dt&gt;
+ &lt;dd&gt;
+ &lt;dl&gt;
+ &lt;dt&gt;fus&eacute;e&lt;/dt&gt;
+ &lt;dd&gt;multistage rocket&lt;/dd&gt;
+ &lt;dt&gt;table&lt;/dt&gt;
+ &lt;dd&gt;nest of tables&lt;/dd&gt;
+ &lt;/dl&gt;
+ &lt;/dd&gt;
+&lt;/dl&gt;</pre>
+</div>
+
+<h5><a name=last-of-type-pseudo>:last-of-type pseudo-class</a></h5>
+
+<p>Same as <code>:nth-last-of-type(1)</code>. The
+<code>:last-of-type</code> pseudo-class represents an element that is
+the last sibling of its type in the list of children of its parent
+element.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <p>The following selector represents the last data cell
+ <code>td</code> of a table row.</p>
+ <pre>tr &gt; td:last-of-type</pre>
+</div>
+
+<h5><a name=only-child-pseudo>:only-child pseudo-class</a></h5>
+
+<p>Represents an element that has a parent element and whose parent
+element has no other element children. Same as
+<code>:first-child:last-child</code> or
+<code>:nth-child(1):nth-last-child(1)</code>, but with a lower
+specificity.</p>
+
+<h5><a name=only-of-type-pseudo>:only-of-type pseudo-class</a></h5>
+
+<p>Represents an element that has a parent element and whose parent
+element has no other element children with the same element name. Same
+as <code>:first-of-type:last-of-type</code> or
+<code>:nth-of-type(1):nth-last-of-type(1)</code>, but with a lower
+specificity.</p>
+
+
+<h5><a name=empty-pseudo></a>:empty pseudo-class</h5>
+
+<p>The <code>:empty</code> pseudo-class represents an element that has
+no children at all. In terms of the DOM, only element nodes and text
+nodes (including CDATA nodes and entity references) whose data has a
+non-zero length must be considered as affecting emptiness; comments,
+PIs, and other nodes must not affect whether an element is considered
+empty or not.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p><code>p:empty</code> is a valid representation of the following fragment:</p>
+ <pre>&lt;p&gt;&lt;/p&gt;</pre>
+ <p><code>foo:empty</code> is not a valid representation for the
+ following fragments:</p>
+ <pre>&lt;foo&gt;bar&lt;/foo&gt;</pre>
+ <pre>&lt;foo&gt;&lt;bar&gt;bla&lt;/bar&gt;&lt;/foo&gt;</pre>
+ <pre>&lt;foo&gt;this is not &lt;bar&gt;:empty&lt;/bar&gt;&lt;/foo&gt;</pre>
+</div>
+
+<h4><a name=content-selectors>6.6.6. Blank</a></h4> <!-- It's the Return of Appendix H!!! Run away! -->
+
+<p>This section intentionally left blank.</p>
+<!-- (used to be :contains()) -->
+
+<h4><a name=negation></a>6.6.7. The negation pseudo-class</h4>
+
+<p>The negation pseudo-class, <code>:not(<var>X</var>)</code>, is a
+functional notation taking a <a href="#simple-selectors-dfn">simple
+selector</a> (excluding the negation pseudo-class itself and
+pseudo-elements) as an argument. It represents an element that is not
+represented by the argument.
+
+<!-- pseudo-elements are not simple selectors, so the above paragraph
+may be a bit confusing -->
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following CSS selector matches all <code>button</code>
+ elements in an HTML document that are not disabled.</p>
+ <pre>button:not([DISABLED])</pre>
+ <p>The following selector represents all but <code>FOO</code>
+ elements.</p>
+ <pre>*:not(FOO)</pre>
+ <p>The following group of selectors represents all HTML elements
+ except links.</p>
+ <pre>html|*:not(:link):not(:visited)</pre>
+</div>
+
+<p>Default namespace declarations do not affect the argument of the
+negation pseudo-class unless the argument is a universal selector or a
+type selector.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>Assuming that the default namespace is bound to
+ "http://example.com/", the following selector represents all
+ elements that are not in that namespace:</p>
+ <pre>*|*:not(*)</pre>
+ <p>The following CSS selector matches any element being hovered,
+ regardless of its namespace. In particular, it is not limited to
+ only matching elements in the default namespace that are not being
+ hovered, and elements not in the default namespace don't match the
+ rule when they <em>are</em> being hovered.</p>
+ <pre>*|*:not(:hover)</pre>
+</div>
+
+<p class="note"><strong>Note</strong>: the :not() pseudo allows
+useless selectors to be written. For instance <code>:not(*|*)</code>,
+which represents no element at all, or <code>foo:not(bar)</code>,
+which is equivalent to <code>foo</code> but with a higher
+specificity.</p>
+
+<h3><a name=pseudo-elements>7. Pseudo-elements</a></h3>
+
+<p>Pseudo-elements create abstractions about the document tree beyond
+those specified by the document language. For instance, document
+languages do not offer mechanisms to access the first letter or first
+line of an element's content. Pseudo-elements allow designers to refer
+to this otherwise inaccessible information. Pseudo-elements may also
+provide designers a way to refer to content that does not exist in the
+source document (e.g., the <code>::before</code> and
+<code>::after</code> pseudo-elements give access to generated
+content).</p>
+
+<p>A pseudo-element is made of two colons (<code>::</code>) followed
+by the name of the pseudo-element.</p>
+
+<p>This <code>::</code> notation is introduced by the current document
+in order to establish a discrimination between pseudo-classes and
+pseudo-elements. For compatibility with existing style sheets, user
+agents must also accept the previous one-colon notation for
+pseudo-elements introduced in CSS levels 1 and 2 (namely,
+<code>:first-line</code>, <code>:first-letter</code>,
+<code>:before</code> and <code>:after</code>). This compatibility is
+not allowed for the new pseudo-elements introduced in CSS level 3.</p>
+
+<p>Only one pseudo-element may appear per selector, and if present it
+must appear after the sequence of simple selectors that represents the
+<a href="#subject">subjects</a> of the selector. <span class="note">A
+future version of this specification may allow multiple
+pesudo-elements per selector.</span></p>
+
+<h4><a name=first-line>7.1. The ::first-line pseudo-element</a></h4>
+
+<p>The <code>::first-line</code> pseudo-element describes the contents
+of the first formatted line of an element.
+
+<div class="example">
+<p>CSS example:</p>
+<pre>p::first-line { text-transform: uppercase }</pre>
+<p>The above rule means "change the letters of the first line of every
+paragraph to uppercase".</p>
+</div>
+
+<p>The selector <code>p::first-line</code> does not match any real
+HTML element. It does match a pseudo-element that conforming user
+agents will insert at the beginning of every paragraph.</p>
+
+<p>Note that the length of the first line depends on a number of
+factors, including the width of the page, the font size, etc. Thus,
+an ordinary HTML paragraph such as:</p>
+
+<pre>
+&lt;P&gt;This is a somewhat long HTML
+paragraph that will be broken into several
+lines. The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>the lines of which happen to be broken as follows:
+
+<pre>
+THIS IS A SOMEWHAT LONG HTML PARAGRAPH THAT
+will be broken into several lines. The first
+line will be identified by a fictional tag
+sequence. The other lines will be treated as
+ordinary lines in the paragraph.
+</pre>
+
+<p>This paragraph might be "rewritten" by user agents to include the
+<em>fictional tag sequence</em> for <code>::first-line</code>. This
+fictional tag sequence helps to show how properties are inherited.</p>
+
+<pre>
+&lt;P&gt;<b>&lt;P::first-line&gt;</b> This is a somewhat long HTML
+paragraph that <b>&lt;/P::first-line&gt;</b> will be broken into several
+lines. The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>If a pseudo-element breaks up a real element, the desired effect
+can often be described by a fictional tag sequence that closes and
+then re-opens the element. Thus, if we mark up the previous paragraph
+with a <code>span</code> element:</p>
+
+<pre>
+&lt;P&gt;<b>&lt;SPAN class="test"&gt;</b> This is a somewhat long HTML
+paragraph that will be broken into several
+lines.<b>&lt;/SPAN&gt;</b> The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>the user agent could simulate start and end tags for
+<code>span</code> when inserting the fictional tag sequence for
+<code>::first-line</code>.
+
+<pre>
+&lt;P&gt;&lt;P::first-line&gt;<b>&lt;SPAN class="test"&gt;</b> This is a
+somewhat long HTML
+paragraph that will <b>&lt;/SPAN&gt;</b>&lt;/P::first-line&gt;<b>&lt;SPAN class="test"&gt;</b> be
+broken into several
+lines.<b>&lt;/SPAN&gt;</b> The first line will be identified
+by a fictional tag sequence. The other lines
+will be treated as ordinary lines in the
+paragraph.&lt;/P&gt;
+</pre>
+
+<p>In CSS, the <code>::first-line</code> pseudo-element can only be
+attached to a block-level element, an inline-block, a table-caption,
+or a table-cell.</p>
+
+<p><a name="first-formatted-line"></a>The "first formatted line" of an
+element may occur inside a
+block-level descendant in the same flow (i.e., a block-level
+descendant that is not positioned and not a float). E.g., the first
+line of the <code>div</code> in <code>&lt;DIV>&lt;P>This
+line...&lt;/P>&lt/DIV></code> is the first line of the <code>p</code> (assuming
+that both <code>p</code> and <code>div</code> are block-level).
+
+<p>The first line of a table-cell or inline-block cannot be the first
+formatted line of an ancestor element. Thus, in <code>&lt;DIV&gt;&lt;P
+STYLE="display: inline-block">Hello&lt;BR&gt;Goodbye&lt;/P&gt;
+etcetera&lt;/DIV&gt;</code> the first formatted line of the
+<code>div</code> is not the line "Hello".
+
+<p class="note">Note that the first line of the <code>p</code> in this
+fragment: <code>&lt;p&gt&lt;br&gt;First...</code> doesn't contain any
+letters (assuming the default style for <code>br</code> in HTML
+4). The word "First" is not on the first formatted line.
+
+<p>A UA should act as if the fictional start tags of the
+<code>::first-line</code> pseudo-elements were nested just inside the
+innermost enclosing block-level element. (Since CSS1 and CSS2 were
+silent on this case, authors should not rely on this behavior.) Here
+is an example. The fictional tag sequence for</p>
+
+<pre>
+&lt;DIV>
+ &lt;P>First paragraph&lt;/P>
+ &lt;P>Second paragraph&lt;/P>
+&lt;/DIV>
+</pre>
+
+<p>is</p>
+
+<pre>
+&lt;DIV>
+ &lt;P>&lt;DIV::first-line>&lt;P::first-line>First paragraph&lt;/P::first-line>&lt;/DIV::first-line>&lt;/P>
+ &lt;P>&lt;P::first-line>Second paragraph&lt;/P::first-line>&lt;/P>
+&lt;/DIV>
+</pre>
+
+<p>The <code>::first-line</code> pseudo-element is similar to an
+inline-level element, but with certain restrictions. In CSS, the
+following properties apply to a <code>::first-line</code>
+pseudo-element: font properties, color property, background
+properties, 'word-spacing', 'letter-spacing', 'text-decoration',
+'vertical-align', 'text-transform', 'line-height'. UAs may apply other
+properties as well.</p>
+
+
+<h4><a name=first-letter>7.2. The ::first-letter pseudo-element</a></h4>
+
+<p>The <code>::first-letter</code> pseudo-element represents the first
+letter of the first line of a block, if it is not preceded by any
+other content (such as images or inline tables) on its line. The
+::first-letter pseudo-element may be used for "initial caps" and "drop
+caps", which are common typographical effects. This type of initial
+letter is similar to an inline-level element if its 'float' property
+is 'none'; otherwise, it is similar to a floated element.</p>
+
+<p>In CSS, these are the properties that apply to <code>::first-letter</code>
+pseudo-elements: font properties, 'text-decoration', 'text-transform',
+'letter-spacing', 'word-spacing' (when appropriate), 'line-height',
+'float', 'vertical-align' (only if 'float' is 'none'), margin
+properties, padding properties, border properties, color property,
+background properties. UAs may apply other properties as well. To
+allow UAs to render a typographically correct drop cap or initial cap,
+the UA may choose a line-height, width and height based on the shape
+of the letter, unlike for normal elements.</p>
+
+<div class="example">
+<p>Example:</p>
+<p>This example shows a possible rendering of an initial cap. Note
+that the 'line-height' that is inherited by the <code>::first-letter</code>
+pseudo-element is 1.1, but the UA in this example has computed the
+height of the first letter differently, so that it doesn't cause any
+unnecessary space between the first two lines. Also note that the
+fictional start tag of the first letter is inside the <span>span</span>, and thus
+the font weight of the first letter is normal, not bold as the <span>span</span>:
+<pre>
+p { line-height: 1.1 }
+p::first-letter { font-size: 3em; font-weight: normal }
+span { font-weight: bold }
+...
+&lt;p>&lt;span>Het hemelsche&lt;/span> gerecht heeft zich ten lange lesten&lt;br>
+Erbarremt over my en mijn benaeuwde vesten&lt;br>
+En arme burgery, en op mijn volcx gebed&lt;br>
+En dagelix geschrey de bange stad ontzet.
+</pre>
+<div class="figure">
+<p><img src="initial-cap.png" alt="Image illustrating the ::first-letter pseudo-element">
+</div>
+</div>
+
+<div class="example">
+<p>The following CSS will make a drop cap initial letter span about two lines:</p>
+
+<pre>
+&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"&gt;
+&lt;HTML&gt;
+ &lt;HEAD&gt;
+ &lt;TITLE&gt;Drop cap initial letter&lt;/TITLE&gt;
+ &lt;STYLE type="text/css"&gt;
+ P { font-size: 12pt; line-height: 1.2 }
+ P::first-letter { font-size: 200%; font-weight: bold; float: left }
+ SPAN { text-transform: uppercase }
+ &lt;/STYLE&gt;
+ &lt;/HEAD&gt;
+ &lt;BODY&gt;
+ &lt;P&gt;&lt;SPAN&gt;The first&lt;/SPAN&gt; few words of an article
+ in The Economist.&lt;/P&gt;
+ &lt;/BODY&gt;
+&lt;/HTML&gt;
+</pre>
+
+<p>This example might be formatted as follows:</p>
+
+<div class="figure">
+<P><img src="first-letter.gif" alt="Image illustrating the combined effect of the ::first-letter and ::first-line pseudo-elements"></p>
+</div>
+
+<p>The <span class="index-inst" title="fictional tag
+sequence">fictional tag sequence</span> is:</p>
+
+<pre>
+&lt;P&gt;
+&lt;SPAN&gt;
+&lt;P::first-letter&gt;
+T
+&lt;/P::first-letter&gt;he first
+&lt;/SPAN&gt;
+few words of an article in the Economist.
+&lt;/P&gt;
+</pre>
+
+<p>Note that the <code>::first-letter</code> pseudo-element tags abut
+the content (i.e., the initial character), while the ::first-line
+pseudo-element start tag is inserted right after the start tag of the
+block element.</p> </div>
+
+<p>In order to achieve traditional drop caps formatting, user agents
+may approximate font sizes, for example to align baselines. Also, the
+glyph outline may be taken into account when formatting.</p>
+
+<p>Punctuation (i.e, characters defined in Unicode in the "open" (Ps),
+"close" (Pe), "initial" (Pi). "final" (Pf) and "other" (Po)
+punctuation classes), that precedes or follows the first letter should
+be included. <a href="#refsUNICODE">[UNICODE]</a></p>
+
+<div class="figure">
+<P><img src="first-letter2.gif" alt="Quotes that precede the
+first letter should be included."></p>
+</div>
+
+<p>The <code>::first-letter</code> also applies if the first letter is
+in fact a digit, e.g., the "6" in "67 million dollars is a lot of
+money."</p>
+
+<p>In CSS, the <code>::first-letter</code> pseudo-element applies to
+block, list-item, table-cell, table-caption, and inline-block
+elements. <span class="note">A future version of this specification
+may allow this pesudo-element to apply to more element
+types.</span></p>
+
+<p>The <code>::first-letter</code> pseudo-element can be used with all
+such elements that contain text, or that have a descendant in the same
+flow that contains text. A UA should act as if the fictional start tag
+of the ::first-letter pseudo-element is just before the first text of
+the element, even if that first text is in a descendant.</p>
+
+<div class="example">
+<p>Example:</p>
+<p>The fictional tag sequence for this HTMLfragment:
+<pre>&lt;div>
+&lt;p>The first text.</pre>
+<p>is:
+<pre>&lt;div>
+&lt;p>&lt;div::first-letter>&lt;p::first-letter>T&lt;/...>&lt;/...>he first text.</pre>
+</div>
+
+<p>The first letter of a table-cell or inline-block cannot be the
+first letter of an ancestor element. Thus, in <code>&lt;DIV&gt;&lt;P
+STYLE="display: inline-block">Hello&lt;BR&gt;Goodbye&lt;/P&gt;
+etcetera&lt;/DIV&gt;</code> the first letter of the <code>div</code> is not the
+letter "H". In fact, the <code>div</code> doesn't have a first letter.
+
+<p>The first letter must occur on the <a
+href="#first-formatted-line">first formatted line.</a> For example, in
+this fragment: <code>&lt;p&gt&lt;br&gt;First...</code> the first line
+doesn't contain any letters and <code>::first-letter</code> doesn't
+match anything (assuming the default style for <code>br</code> in HTML
+4). In particular, it does not match the "F" of "First."
+
+<p>In CSS, if an element is a list item ('display: list-item'), the
+<code>::first-letter</code> applies to the first letter in the
+principal box after the marker. UAs may ignore
+<code>::first-letter</code> on list items with 'list-style-position:
+inside'. If an element has <code>::before</code> or
+<code>::after</code> content, the <code>::first-letter</code> applies
+to the first letter of the element <em>including</em> that content.
+
+<div class="example">
+<p>Example:</p>
+<p>After the rule 'p::before {content: "Note: "}', the selector
+'p::first-letter' matches the "N" of "Note".</p>
+</div>
+
+<p>Some languages may have specific rules about how to treat certain
+letter combinations. In Dutch, for example, if the letter combination
+"ij" appears at the beginning of a word, both letters should be
+considered within the <code>::first-letter</code> pseudo-element.
+
+<p>If the letters that would form the ::first-letter are not in the
+same element, such as "'T" in <code>&lt;p>'&lt;em>T...</code>, the UA
+may create a ::first-letter pseudo-element from one of the elements,
+both elements, or simply not create a pseudo-element.</p>
+
+<p>Similarly, if the first letter(s) of the block are not at the start
+of the line (for example due to bidirectional reordering), then the UA
+need not create the pseudo-element(s).
+
+<div class="example">
+<p>Example:</p>
+<p><a name="overlapping-example">The following example</a> illustrates
+how overlapping pseudo-elements may interact. The first letter of
+each P element will be green with a font size of '24pt'. The rest of
+the first formatted line will be 'blue' while the rest of the
+paragraph will be 'red'.</p>
+
+<pre>p { color: red; font-size: 12pt }
+p::first-letter { color: green; font-size: 200% }
+p::first-line { color: blue }
+
+&lt;P&gt;Some text that ends up on two lines&lt;/P&gt;</pre>
+
+<p>Assuming that a line break will occur before the word "ends", the
+<span class="index-inst" title="fictional tag sequence">fictional tag
+sequence</span> for this fragment might be:</p>
+
+<pre>&lt;P&gt;
+&lt;P::first-line&gt;
+&lt;P::first-letter&gt;
+S
+&lt;/P::first-letter&gt;ome text that
+&lt;/P::first-line&gt;
+ends up on two lines
+&lt;/P&gt;</pre>
+
+<p>Note that the <code>::first-letter</code> element is inside the <code>::first-line</code>
+element. Properties set on <code>::first-line</code> are inherited by
+<code>::first-letter</code>, but are overridden if the same property is set on
+<code>::first-letter</code>.</p>
+</div>
+
+
+<h4><a name=UIfragments>7.3.</a> <a name=selection>The ::selection pseudo-element</a></h4>
+
+<p>The <code>::selection</code> pseudo-element applies to the portion
+of a document that has been highlighted by the user. This also
+applies, for example, to selected text within an editable text
+field. This pseudo-element should not be confused with the <code><a
+href="#checked">:checked</a></code> pseudo-class (which used to be
+named <code>:selected</code>)
+
+<p>Although the <code>::selection</code> pseudo-element is dynamic in
+nature, and is altered by user action, it is reasonable to expect that
+when a UA re-renders to a static medium (such as a printed page, see
+<a href="#refsCSS21">[CSS21]</a>) which was originally rendered to a
+dynamic medium (like screen), the UA may wish to transfer the current
+<code>::selection</code> state to that other medium, and have all the
+appropriate formatting and rendering take effect as well. This is not
+required &mdash; UAs may omit the <code>::selection</code>
+pseudo-element for static media.
+
+<p>These are the CSS properties that apply to <code>::selection</code>
+pseudo-elements: color, background, cursor (optional), outline
+(optional). The computed value of the 'background-image' property on
+<code>::selection</code> may be ignored.
+
+
+<h4><a name=gen-content>7.4. The ::before and ::after pseudo-elements</a></h4>
+
+<p>The <code>::before</code> and <code>::after</code> pseudo-elements
+can be used to describe generated content before or after an element's
+content. They are explained in CSS 2.1 <a
+href="#refsCSS21">[CSS21]</a>.</p>
+
+<p>When the <code>::first-letter</code> and <code>::first-line</code>
+pseudo-elements are combined with <code>::before</code> and
+<code>::after</code>, they apply to the first letter or line of the
+element including the inserted text.</p>
+
+<h2><a name=combinators>8. Combinators</a></h2>
+
+<h3><a name=descendant-combinators>8.1. Descendant combinator</a></h3>
+
+<p>At times, authors may want selectors to describe an element that is
+the descendant of another element in the document tree (e.g., "an
+<code>EM</code> element that is contained within an <code>H1</code>
+element"). Descendant combinators express such a relationship. A
+descendant combinator is <a href="#whitespace">white space</a> that
+separates two sequences of simple selectors. A selector of the form
+"<code>A B</code>" represents an element <code>B</code> that is an
+arbitrary descendant of some ancestor element <code>A</code>.
+
+<div class="example">
+ <p>Examples:</p>
+ <p>For example, consider the following selector:</p>
+ <pre>h1 em</pre>
+ <p>It represents an <code>em</code> element being the descendant of
+ an <code>h1</code> element. It is a correct and valid, but partial,
+ description of the following fragment:</p>
+ <pre>&lt;h1&gt;This &lt;span class="myclass"&gt;headline
+is &lt;em&gt;very&lt;/em&gt; important&lt;/span&gt;&lt;/h1&gt;</pre>
+ <p>The following selector:</p>
+ <pre>div * p</pre>
+ <p>represents a <code>p</code> element that is a grandchild or later
+ descendant of a <code>div</code> element. Note the whitespace on
+ either side of the "*" is not part of the universal selector; the
+ whitespace is a combinator indicating that the DIV must be the
+ ancestor of some element, and that that element must be an ancestor
+ of the P.</p>
+ <p>The following selector, which combines descendant combinators and
+ <a href="#attribute-selectors">attribute selectors</a>, represents an
+ element that (1) has the <code>href</code> attribute set and (2) is
+ inside a <code>p</code> that is itself inside a <code>div</code>:</p>
+ <pre>div p *[href]</pre>
+</div>
+
+<h3><a name=child-combinators>8.2. Child combinators</a></h3>
+
+<p>A <dfn>child combinator</dfn> describes a childhood relationship
+between two elements. A child combinator is made of the
+&quot;greater-than sign&quot; (<code>&gt;</code>) character and
+separates two sequences of simple selectors.
+
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element that is
+ child of <code>body</code>:</p>
+ <pre>body &gt; p</pre>
+ <p>The following example combines descendant combinators and child
+ combinators.</p>
+ <pre>div ol&gt;li p</pre><!-- LEAVE THOSE SPACES OUT! see below -->
+ <p>It represents a <code>p</code> element that is a descendant of an
+ <code>li</code> element; the <code>li</code> element must be the
+ child of an <code>ol</code> element; the <code>ol</code> element must
+ be a descendant of a <code>div</code>. Notice that the optional white
+ space around the "&gt;" combinator has been left out.</p>
+</div>
+
+<p>For information on selecting the first child of an element, please
+see the section on the <code><a
+href="#structural-pseudos">:first-child</a></code> pseudo-class
+above.</p>
+
+<h3><a name=sibling-combinators>8.3. Sibling combinators</a></h3>
+
+<p>There are two different sibling combinators: the adjacent sibling
+combinator and the general sibling combinator. In both cases,
+non-element nodes (e.g. text between elements) are ignored when
+considering adjacency of elements.</p>
+
+<h4><a name=adjacent-sibling-combinators>8.3.1. Adjacent sibling combinator</a></h4>
+
+<p>The adjacent sibling combinator is made of the &quot;plus
+sign&quot; (U+002B, <code>+</code>) character that separates two
+sequences of simple selectors. The elements represented by the two
+sequences share the same parent in the document tree and the element
+represented by the first sequence immediately precedes the element
+represented by the second one.</p>
+
+<div class="example">
+ <p>Examples:</p>
+ <p>The following selector represents a <code>p</code> element
+ immediately following a <code>math</code> element:</p>
+ <pre>math + p</pre>
+ <p>The following selector is conceptually similar to the one in the
+ previous example, except that it adds an attribute selector &mdash; it
+ adds a constraint to the <code>h1</code> element, that it must have
+ <code>class="opener"</code>:</p>
+ <pre>h1.opener + h2</pre>
+</div>
+
+
+<h4><a name=general-sibling-combinators>8.3.2. General sibling combinator</a></h4>
+
+<p>The general sibling combinator is made of the &quot;tilde&quot;
+(U+007E, <code>~</code>) character that separates two sequences of
+simple selectors. The elements represented by the two sequences share
+the same parent in the document tree and the element represented by
+the first sequence precedes (not necessarily immediately) the element
+represented by the second one.</p>
+
+<div class="example">
+ <p>Example:</p>
+ <pre>h1 ~ pre</pre>
+ <p>represents a <code>pre</code> element following an <code>h1</code>. It
+ is a correct and valid, but partial, description of:</p>
+ <pre>&lt;h1&gt;Definition of the function a&lt;/h1&gt;
+&lt;p&gt;Function a(x) has to be applied to all figures in the table.&lt;/p&gt;
+&lt;pre&gt;function a(x) = 12x/13.5&lt;/pre&gt;</pre>
+</div>
+
+<h2><a name=specificity>9. Calculating a selector's specificity</a></h2>
+
+<p>A selector's specificity is calculated as follows:</p>
+
+<ul>
+ <li>count the number of ID selectors in the selector (= a)</li>
+ <li>count the number of class selectors, attributes selectors, and pseudo-classes in the selector (= b)</li>
+ <li>count the number of element names in the selector (= c)</li>
+ <li>ignore pseudo-elements</li>
+</ul>
+
+<p>Selectors inside <a href="#negation">the negation pseudo-class</a>
+are counted like any other, but the negation itself does not count as
+a pseudo-class.</p>
+
+<p>Concatenating the three numbers a-b-c (in a number system with a
+large base) gives the specificity.</p>
+
+<div class="example">
+<p>Examples:</p>
+<pre>* /* a=0 b=0 c=0 -&gt; specificity = 0 */
+LI /* a=0 b=0 c=1 -&gt; specificity = 1 */
+UL LI /* a=0 b=0 c=2 -&gt; specificity = 2 */
+UL OL+LI /* a=0 b=0 c=3 -&gt; specificity = 3 */
+H1 + *[REL=up] /* a=0 b=1 c=1 -&gt; specificity = 11 */
+UL OL LI.red /* a=0 b=1 c=3 -&gt; specificity = 13 */
+LI.red.level /* a=0 b=2 c=1 -&gt; specificity = 21 */
+#x34y /* a=1 b=0 c=0 -&gt; specificity = 100 */
+#s12:not(FOO) /* a=1 b=0 c=1 -&gt; specificity = 101 */
+</pre>
+</div>
+
+<p class="note"><strong>Note:</strong> the specificity of the styles
+specified in an HTML <code>style</code> attribute is described in CSS
+2.1. <a href="#refsCSS21">[CSS21]</a>.</p>
+
+<h2><a name=w3cselgrammar>10. The grammar of Selectors</a></h2>
+
+<h3><a name=grammar>10.1. Grammar</a></h3>
+
+<p>The grammar below defines the syntax of Selectors. It is globally
+LL(1) and can be locally LL(2) (but note that most UA's should not use
+it directly, since it doesn't express the parsing conventions). The
+format of the productions is optimized for human consumption and some
+shorthand notations beyond Yacc (see <a href="#refsYACC">[YACC]</a>)
+are used:</p>
+
+<ul>
+ <li><b>*</b>: 0 or more
+ <li><b>+</b>: 1 or more
+ <li><b>?</b>: 0 or 1
+ <li><b>|</b>: separates alternatives
+ <li><b>[ ]</b>: grouping </li>
+</ul>
+
+<p>The productions are:</p>
+
+<pre>selectors_group
+ : selector [ COMMA S* selector ]*
+ ;
+
+selector
+ : simple_selector_sequence [ combinator simple_selector_sequence ]*
+ ;
+
+combinator
+ /* combinators can be surrounded by white space */
+ : PLUS S* | GREATER S* | TILDE S* | S+
+ ;
+
+simple_selector_sequence
+ : [ type_selector | universal ]
+ [ HASH | class | attrib | pseudo | negation ]*
+ | [ HASH | class | attrib | pseudo | negation ]+
+ ;
+
+type_selector
+ : [ namespace_prefix ]? element_name
+ ;
+
+namespace_prefix
+ : [ IDENT | '*' ]? '|'
+ ;
+
+element_name
+ : IDENT
+ ;
+
+universal
+ : [ namespace_prefix ]? '*'
+ ;
+
+class
+ : '.' IDENT
+ ;
+
+attrib
+ : '[' S* [ namespace_prefix ]? IDENT S*
+ [ [ PREFIXMATCH |
+ SUFFIXMATCH |
+ SUBSTRINGMATCH |
+ '=' |
+ INCLUDES |
+ DASHMATCH ] S* [ IDENT | STRING ] S*
+ ]? ']'
+ ;
+
+pseudo
+ /* '::' starts a pseudo-element, ':' a pseudo-class */
+ /* Exceptions: :first-line, :first-letter, :before and :after. */
+ /* Note that pseudo-elements are restricted to one per selector and */
+ /* occur only in the last simple_selector_sequence. */
+ : ':' ':'? [ IDENT | functional_pseudo ]
+ ;
+
+functional_pseudo
+ : FUNCTION S* expression ')'
+ ;
+
+expression
+ /* In CSS3, the expressions are identifiers, strings, */
+ /* or of the form "an+b" */
+ : [ [ PLUS | '-' | DIMENSION | NUMBER | STRING | IDENT ] S* ]+
+ ;
+
+negation
+ : NOT S* negation_arg S* ')'
+ ;
+
+negation_arg
+ : type_selector | universal | HASH | class | attrib | pseudo
+ ;</pre>
+
+
+<h3><a name=lex>10.2. Lexical scanner</a></h3>
+
+<p>The following is the <a name=x3>tokenizer</a>, written in Flex (see
+<a href="#refsFLEX">[FLEX]</a>) notation. The tokenizer is
+case-insensitive.</p>
+
+<p>The two occurrences of "\377" represent the highest character
+number that current versions of Flex can deal with (decimal 255). They
+should be read as "\4177777" (decimal 1114111), which is the highest
+possible code point in Unicode/ISO-10646. <a
+href="#refsUNICODE">[UNICODE]</a></p>
+
+<pre>%option case-insensitive
+
+ident [-]?{nmstart}{nmchar}*
+name {nmchar}+
+nmstart [_a-z]|{nonascii}|{escape}
+nonascii [^\0-\177]
+unicode \\[0-9a-f]{1,6}(\r\n|[ \n\r\t\f])?
+escape {unicode}|\\[^\n\r\f0-9a-f]
+nmchar [_a-z0-9-]|{nonascii}|{escape}
+num [0-9]+|[0-9]*\.[0-9]+
+string {string1}|{string2}
+string1 \"([^\n\r\f\\"]|\\{nl}|{nonascii}|{escape})*\"
+string2 \'([^\n\r\f\\']|\\{nl}|{nonascii}|{escape})*\'
+invalid {invalid1}|{invalid2}
+invalid1 \"([^\n\r\f\\"]|\\{nl}|{nonascii}|{escape})*
+invalid2 \'([^\n\r\f\\']|\\{nl}|{nonascii}|{escape})*
+nl \n|\r\n|\r|\f
+w [ \t\r\n\f]*
+
+%%
+
+[ \t\r\n\f]+ return S;
+
+"~=" return INCLUDES;
+"|=" return DASHMATCH;
+"^=" return PREFIXMATCH;
+"$=" return SUFFIXMATCH;
+"*=" return SUBSTRINGMATCH;
+{ident} return IDENT;
+{string} return STRING;
+{ident}"(" return FUNCTION;
+{num} return NUMBER;
+"#"{name} return HASH;
+{w}"+" return PLUS;
+{w}"&gt;" return GREATER;
+{w}"," return COMMA;
+{w}"~" return TILDE;
+":not(" return NOT;
+@{ident} return ATKEYWORD;
+{invalid} return INVALID;
+{num}% return PERCENTAGE;
+{num}{ident} return DIMENSION;
+"&lt;!--" return CDO;
+"--&gt;" return CDC;
+
+"url("{w}{string}{w}")" return URI;
+"url("{w}([!#$%&*-~]|{nonascii}|{escape})*{w}")" return URI;
+U\+[0-9a-f?]{1,6}(-[0-9a-f]{1,6})? return UNICODE_RANGE;
+
+\/\*[^*]*\*+([^/*][^*]*\*+)*\/ /* ignore comments */
+
+. return *yytext;</pre>
+
+
+
+<h2><a name=downlevel>11. Namespaces and down-level clients</a></h2>
+
+<p>An important issue is the interaction of CSS selectors with XML
+documents in web clients that were produced prior to this
+document. Unfortunately, due to the fact that namespaces must be
+matched based on the URI which identifies the namespace, not the
+namespace prefix, some mechanism is required to identify namespaces in
+CSS by their URI as well. Without such a mechanism, it is impossible
+to construct a CSS style sheet which will properly match selectors in
+all cases against a random set of XML documents. However, given
+complete knowledge of the XML document to which a style sheet is to be
+applied, and a limited use of namespaces within the XML document, it
+is possible to construct a style sheet in which selectors would match
+elements and attributes correctly.</p>
+
+<p>It should be noted that a down-level CSS client will (if it
+properly conforms to CSS forward compatible parsing rules) ignore all
+<code>@namespace</code> at-rules, as well as all style rules that make
+use of namespace qualified element type or attribute selectors. The
+syntax of delimiting namespace prefixes in CSS was deliberately chosen
+so that down-level CSS clients would ignore the style rules rather
+than possibly match them incorrectly.</p>
+
+<p>The use of default namespaces in CSS makes it possible to write
+element type selectors that will function in both namespace aware CSS
+clients as well as down-level clients. It should be noted that
+down-level clients may incorrectly match selectors against XML
+elements in other namespaces.</p>
+
+<p>The following are scenarios and examples in which it is possible to
+construct style sheets which would function properly in web clients
+that do not implement this proposal.</p>
+
+<ol>
+ <li>
+
+ <p>The XML document does not use namespaces.</p>
+
+ <ul>
+
+ <li>In this case, it is obviously not necessary to declare or use
+ namespaces in the style sheet. Standard CSS element type and
+ attribute selectors will function adequately in a down-level
+ client.</li>
+
+ <li>In a CSS namespace aware client, the default behavior of
+ element selectors matching without regard to namespace will
+ function properly against all elements, since no namespaces are
+ present. However, the use of specific element type selectors that
+ match only elements that have no namespace ("<code>|name</code>")
+ will guarantee that selectors will match only XML elements that do
+ not have a declared namespace. </li>
+
+ </ul>
+
+ </li>
+
+ <li>
+
+ <p>The XML document defines a single, default namespace used
+ throughout the document. No namespace prefixes are used in element
+ names.</p>
+
+ <ul>
+
+ <li>In this case, a down-level client will function as if
+ namespaces were not used in the XML document at all. Standard CSS
+ element type and attribute selectors will match against all
+ elements. </li>
+
+ </ul>
+
+ </li>
+
+ <li>
+
+ <p>The XML document does <b>not</b> use a default namespace, all
+ namespace prefixes used are known to the style sheet author, and
+ there is a direct mapping between namespace prefixes and namespace
+ URIs. (A given prefix may only be mapped to one namespace URI
+ throughout the XML document; there may be multiple prefixes mapped
+ to the same URI).</p>
+
+ <ul>
+
+ <li>In this case, the down-level client will view and match
+ element type and attribute selectors based on their fully
+ qualified name, not the local part as outlined in the <a
+ href="#typenmsp">Type selectors and Namespaces</a> section. CSS
+ selectors may be declared using an escaped colon "<code>\:</code>"
+ to describe the fully qualified names, e.g.
+ "<code>html\:h1</code>" will match
+ <code>&lt;html:h1&gt;</code>. Selectors using the qualified name
+ will only match XML elements that use the same prefix. Other
+ namespace prefixes used in the XML that are mapped to the same URI
+ will not match as expected unless additional CSS style rules are
+ declared for them.</li>
+
+ <li>Note that selectors declared in this fashion will
+ <em>only</em> match in down-level clients. A CSS namespace aware
+ client will match element type and attribute selectors based on
+ the name's local part. Selectors declared with the fully
+ qualified name will not match (unless there is no namespace prefix
+ in the fully qualified name).</li>
+
+ </ul>
+
+ </li>
+
+ </ol>
+
+<p>In other scenarios: when the namespace prefixes used in the XML are
+not known in advance by the style sheet author; or a combination of
+elements with no namespace are used in conjunction with elements using
+a default namespace; or the same namespace prefix is mapped to
+<em>different</em> namespace URIs within the same document, or in
+different documents; it is impossible to construct a CSS style sheet
+that will function properly against all elements in those documents,
+unless, the style sheet is written using a namespace URI syntax (as
+outlined in this document or similar) and the document is processed by
+a CSS and XML namespace aware client.</p>
+
+<h2><a name=profiling>12. Profiles</a></h2>
+
+<p>Each specification using Selectors must define the subset of W3C
+Selectors it allows and excludes, and describe the local meaning of
+all the components of that subset.</p>
+
+<p>Non normative examples:
+
+<div class="profile">
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>CSS level 1</td></tr>
+ <tr>
+ <th>Accepts</th>
+ <td>type selectors<br>class selectors<br>ID selectors<br>:link,
+ :visited and :active pseudo-classes<br>descendant combinator
+ <br>::first-line and ::first-letter pseudo-elements</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>
+
+<p>universal selector<br>attribute selectors<br>:hover and :focus
+ pseudo-classes<br>:target pseudo-class<br>:lang() pseudo-class<br>all UI
+ element states pseudo-classes<br>all structural
+ pseudo-classes<br>negation pseudo-class<br>all
+ UI element fragments pseudo-elements<br>::before and ::after
+ pseudo-elements<br>child combinators<br>sibling combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>only one class selector allowed per sequence of simple
+ selectors</td></tr></tbody></table><br><br>
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>CSS level 2</td></tr>
+ <tr>
+ <th>Accepts</th>
+ <td>type selectors<br>universal selector<br>attribute presence and
+ values selectors<br>class selectors<br>ID selectors<br>:link, :visited,
+ :active, :hover, :focus, :lang() and :first-child pseudo-classes
+ <br>descendant combinator<br>child combinator<br>adjacent sibling
+ combinator<br>::first-line and ::first-letter pseudo-elements<br>::before
+ and ::after pseudo-elements</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>
+
+<p>content selectors<br>substring matching attribute
+ selectors<br>:target pseudo-classes<br>all UI element
+ states pseudo-classes<br>all structural pseudo-classes other
+ than :first-child<br>negation pseudo-class<br>all UI element
+ fragments pseudo-elements<br>general sibling combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>more than one class selector per sequence of simple selectors (CSS1
+ constraint) allowed</td></tr></tbody></table>
+
+<p>In CSS, selectors express pattern matching rules that determine which style
+rules apply to elements in the document tree.
+
+<p>The following selector (CSS level 2) will <b>match</b> all anchors <code>a</code>
+with attribute <code>name</code> set inside a section 1 header <code>h1</code>:
+<pre>h1 a[name]</pre>
+
+<p>All CSS declarations attached to such a selector are applied to elements
+matching it. </div>
+
+<div class="profile">
+<table class="tprofile">
+ <tbody>
+ <tr>
+ <th class="title" colspan=2>Selectors profile</th></tr>
+ <tr>
+ <th>Specification</th>
+ <td>STTS 3</td>
+ </tr>
+ <tr>
+ <th>Accepts</th>
+ <td>
+
+<p>type selectors<br>universal selectors<br>attribute selectors<br>class
+ selectors<br>ID selectors<br>all structural pseudo-classes<br>
+ all combinators
+
+<p>namespaces</td></tr>
+ <tr>
+ <th>Excludes</th>
+ <td>non-accepted pseudo-classes<br>pseudo-elements<br></td></tr>
+ <tr>
+ <th>Extra constraints</th>
+ <td>some selectors and combinators are not allowed in fragment
+ descriptions on the right side of STTS declarations.</td></tr></tbody></table>
+<form>
+<input type="text" name="test10"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+<input type="text" name="foo"/>
+</form>
+
+<p>Selectors can be used in STTS 3 in two different
+ manners:
+<ol>
+ <li>a selection mechanism equivalent to CSS selection mechanism: declarations
+ attached to a given selector are applied to elements matching that selector,
+ <li>fragment descriptions that appear on the right side of declarations.
+</li></ol></div>
+
+<h2><a name=Conformance></a>13. Conformance and requirements</h2>
+
+<p>This section defines conformance with the present specification only.
+
+<p>The inability of a user agent to implement part of this specification due to
+the limitations of a particular device (e.g., non interactive user agents will
+probably not implement dynamic pseudo-classes because they make no sense without
+interactivity) does not imply non-conformance.
+
+<p>All specifications reusing Selectors must contain a <a
+href="#profiling">Profile</a> listing the
+subset of Selectors it accepts or excludes, and describing the constraints
+it adds to the current specification.
+
+<p>Invalidity is caused by a parsing error, e.g. an unrecognized token or a token
+which is not allowed at the current parsing point.
+
+<p>User agents must observe the rules for handling parsing errors:
+<ul>
+ <li>a simple selector containing an undeclared namespace prefix is invalid</li>
+ <li>a selector containing an invalid simple selector, an invalid combinator
+ or an invalid token is invalid. </li>
+ <li>a group of selectors containing an invalid selector is invalid.</li>
+</ul>
+
+<p class="foo test10 bar">Specifications reusing Selectors must define how to handle parsing
+errors. (In the case of CSS, the entire rule in which the selector is
+used is dropped.)</p>
+
+<!-- Apparently all these references are out of date:
+<p>Implementations of this specification must behave as
+"recipients of text data" as defined by <a href="#refsCWWW">[CWWW]</a>
+when parsing selectors and attempting matches. (In particular,
+implementations must assume the data is normalized and must not
+normalize it.) Normative rules for matching strings are defined in
+<a href="#refsCWWW">[CWWW]</a> and <a
+href="#refsUNICODE">[UNICODE]</a> and apply to implementations of this
+specification.</p>-->
+
+<h2><a name=Tests></a>14. Tests</h2>
+
+<p>This specification has <a
+href="http://www.w3.org/Style/CSS/Test/CSS3/Selectors/current/">a test
+suite</a> allowing user agents to verify their basic conformance to
+the specification. This test suite does not pretend to be exhaustive
+and does not cover all possible combined cases of Selectors.</p>
+
+<h2><a name=ACKS></a>15. Acknowledgements</h2>
+
+<p>The CSS working group would like to thank everyone who has sent
+comments on this specification over the years.</p>
+
+<p>The working group would like to extend special thanks to Donna
+McManus, Justin Baker, Joel Sklar, and Molly Ives Brower who perfermed
+the final editorial review.</p>
+
+<h2><a name=references>16. References</a></h2>
+
+<dl class="refs">
+
+ <dt>[CSS1]
+ <dd><a name=refsCSS1></a> Bert Bos, H&aring;kon Wium Lie; "<cite>Cascading Style Sheets, level 1</cite>", W3C Recommendation, 17 Dec 1996, revised 11 Jan 1999
+ <dd>(<code><a href="http://www.w3.org/TR/REC-CSS1">http://www.w3.org/TR/REC-CSS1</a></code>)
+
+ <dt>[CSS21]
+ <dd><a name=refsCSS21></a> Bert Bos, Tantek &Ccedil;elik, Ian Hickson, H&aring;kon Wium Lie, editors; "<cite>Cascading Style Sheets, level 2 revision 1</cite>", W3C Working Draft, 13 June 2005
+ <dd>(<code><a href="http://www.w3.org/TR/CSS21">http://www.w3.org/TR/CSS21</a></code>)
+
+ <dt>[CWWW]
+ <dd><a name=refsCWWW></a> Martin J. D&uuml;rst, Fran&ccedil;ois Yergeau, Misha Wolf, Asmus Freytag, Tex Texin, editors; "<cite>Character Model for the World Wide Web</cite>", W3C Recommendation, 15 February 2005
+ <dd>(<code><a href="http://www.w3.org/TR/charmod/">http://www.w3.org/TR/charmod/</a></code>)
+
+ <dt>[FLEX]
+ <dd><a name="refsFLEX"></a> "<cite>Flex: The Lexical Scanner Generator</cite>", Version 2.3.7, ISBN 1882114213
+
+ <dt>[HTML4]
+ <dd><a name="refsHTML4"></a> Dave Ragget, Arnaud Le Hors, Ian Jacobs, editors; "<cite>HTML 4.01 Specification</cite>", W3C Recommendation, 24 December 1999
+ <dd>(<a href="http://www.w3.org/TR/html4/"><code>http://www.w3.org/TR/html4/</code></a>)
+
+ <dt>[MATH]
+ <dd><a name="refsMATH"></a> Patrick Ion, Robert Miner, editors; "<cite>Mathematical Markup Language (MathML) 1.01</cite>", W3C Recommendation, revision of 7 July 1999
+ <dd>(<code><a href="http://www.w3.org/TR/REC-MathML/">http://www.w3.org/TR/REC-MathML/</a></code>)
+
+ <dt>[RFC3066]
+ <dd><a name="refsRFC3066"></a> H. Alvestrand; "<cite>Tags for the Identification of Languages</cite>", Request for Comments 3066, January 2001
+ <dd>(<a href="http://www.ietf.org/rfc/rfc3066.txt"><code>http://www.ietf.org/rfc/rfc3066.txt</code></a>)
+
+ <dt>[STTS]
+ <dd><a name=refsSTTS></a> Daniel Glazman; "<cite>Simple Tree Transformation Sheets 3</cite>", Electricit&eacute; de France, submission to the W3C, 11 November 1998
+ <dd>(<code><a href="http://www.w3.org/TR/NOTE-STTS3">http://www.w3.org/TR/NOTE-STTS3</a></code>)
+
+ <dt>[SVG]
+ <dd><a name="refsSVG"></a> Jon Ferraiolo, &#34276;&#27810; &#28147;, Dean Jackson, editors; "<cite>Scalable Vector Graphics (SVG) 1.1 Specification</cite>", W3C Recommendation, 14 January 2003
+ <dd>(<code><a href="http://www.w3.org/TR/SVG/">http://www.w3.org/TR/SVG/</a></code>)
+
+ <dt>[UNICODE]</dt>
+ <dd><a name="refsUNICODE"></a> <cite><a
+ href="http://www.unicode.org/versions/Unicode4.1.0/">The Unicode Standard, Version 4.1</a></cite>, The Unicode Consortium. Boston, MA, Addison-Wesley, March 2005. ISBN 0-321-18578-1, as amended by <a href="http://www.unicode.org/versions/Unicode4.0.1/">Unicode 4.0.1</a> and <a href="http://www.unicode.org/versions/Unicode4.1.0/">Unicode 4.1.0</a>.
+ <dd>(<code><a href="http://www.unicode.org/versions/">http://www.unicode.org/versions/</a></code>)</dd>
+
+ <dt>[XML10]
+ <dd><a name="refsXML10"></a> Tim Bray, Jean Paoli, C. M. Sperberg-McQueen, Eve Maler, Fran&ccedil;ois Yergeau, editors; "<cite>Extensible Markup Language (XML) 1.0 (Third Edition)</cite>", W3C Recommendation, 4 February 2004
+ <dd>(<a href="http://www.w3.org/TR/REC-xml/"><code>http://www.w3.org/TR/REC-xml/</code></a>)
+
+ <dt>[XMLNAMES]
+ <dd><a name="refsXMLNAMES"></a> Tim Bray, Dave Hollander, Andrew Layman, editors; "<cite>Namespaces in XML</cite>", W3C Recommendation, 14 January 1999
+ <dd>(<a href="http://www.w3.org/TR/REC-xml-names/"><code>http://www.w3.org/TR/REC-xml-names/</code></a>)
+
+ <dt>[YACC]
+ <dd><a name="refsYACC"></a> S. C. Johnson; "<cite>YACC &mdash; Yet another compiler compiler</cite>", Technical Report, Murray Hill, 1975
+
+</dl>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/sunspider-3d-morph.html b/testing/talos/talos/tests/dromaeo/tests/sunspider-3d-morph.html
new file mode 100644
index 0000000000..8bdacaae58
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/sunspider-3d-morph.html
@@ -0,0 +1,44 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script>
+// Test from here:
+// http://webkit.org/misc/morph.html
+
+window.onload = function(){ startTest("sunspider-3d-morph", '62915fe1');
+
+var loops = 15, nx, nz, a;
+var size = 120;
+
+function morph(a,f) {
+ var PI2nx = Math.PI * 8/nx;
+ var sin = Math.sin;
+ var f30 = -(50 * sin(f*Math.PI*2));
+
+ for (var i = 0; i < nz; ++i) {
+ for (var j = 0; j < nx; ++j) {
+ a[3*(i*nx+j)+1] = sin((j-1) * PI2nx ) * -f30
+ }
+ }
+}
+
+
+prep(function(){
+ nz = nx = size / 3;
+});
+
+test("Mesh Transform", function(){
+ a = Array();
+ for (var i=0; i < nx*nz*3; ++i)
+ a[i] = 0;
+
+ for (var i = 0; i < loops; ++i) {
+ morph(a, i/loops)
+ }
+});
+
+endTest(); };
+</script>
+</head>
+<body></body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/sunspider-3d-raytrace.html b/testing/talos/talos/tests/dromaeo/tests/sunspider-3d-raytrace.html
new file mode 100644
index 0000000000..4acc31d18a
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/sunspider-3d-raytrace.html
@@ -0,0 +1,460 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script>
+/*
+ * Copyright (C) 2007 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``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 APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS 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.
+ */
+
+function createVector(x,y,z) {
+ return new Array(x,y,z);
+}
+
+function sqrLengthVector(self) {
+ return self[0] * self[0] + self[1] * self[1] + self[2] * self[2];
+}
+
+function lengthVector(self) {
+ return Math.sqrt(self[0] * self[0] + self[1] * self[1] + self[2] * self[2]);
+}
+
+function addVector(self, v) {
+ self[0] += v[0];
+ self[1] += v[1];
+ self[2] += v[2];
+ return self;
+}
+
+function subVector(self, v) {
+ self[0] -= v[0];
+ self[1] -= v[1];
+ self[2] -= v[2];
+ return self;
+}
+
+function scaleVector(self, scale) {
+ self[0] *= scale;
+ self[1] *= scale;
+ self[2] *= scale;
+ return self;
+}
+
+function normaliseVector(self) {
+ var len = Math.sqrt(self[0] * self[0] + self[1] * self[1] + self[2] * self[2]);
+ self[0] /= len;
+ self[1] /= len;
+ self[2] /= len;
+ return self;
+}
+
+function add(v1, v2) {
+ return new Array(v1[0] + v2[0], v1[1] + v2[1], v1[2] + v2[2]);
+}
+
+function sub(v1, v2) {
+ return new Array(v1[0] - v2[0], v1[1] - v2[1], v1[2] - v2[2]);
+}
+
+function scalev(v1, v2) {
+ return new Array(v1[0] * v2[0], v1[1] * v2[1], v1[2] * v2[2]);
+}
+
+function dot(v1, v2) {
+ return v1[0] * v2[0] + v1[1] * v2[1] + v1[2] * v2[2];
+}
+
+function scale(v, scale) {
+ return [v[0] * scale, v[1] * scale, v[2] * scale];
+}
+
+function cross(v1, v2) {
+ return [v1[1] * v2[2] - v1[2] * v2[1],
+ v1[2] * v2[0] - v1[0] * v2[2],
+ v1[0] * v2[1] - v1[1] * v2[0]];
+
+}
+
+function normalise(v) {
+ var len = lengthVector(v);
+ return [v[0] / len, v[1] / len, v[2] / len];
+}
+
+function transformMatrix(self, v) {
+ var vals = self;
+ var x = vals[0] * v[0] + vals[1] * v[1] + vals[2] * v[2] + vals[3];
+ var y = vals[4] * v[0] + vals[5] * v[1] + vals[6] * v[2] + vals[7];
+ var z = vals[8] * v[0] + vals[9] * v[1] + vals[10] * v[2] + vals[11];
+ return [x, y, z];
+}
+
+function invertMatrix(self) {
+ var temp = new Array(16);
+ var tx = -self[3];
+ var ty = -self[7];
+ var tz = -self[11];
+ for (h = 0; h < 3; h++)
+ for (v = 0; v < 3; v++)
+ temp[h + v * 4] = self[v + h * 4];
+ for (i = 0; i < 11; i++)
+ self[i] = temp[i];
+ self[3] = tx * self[0] + ty * self[1] + tz * self[2];
+ self[7] = tx * self[4] + ty * self[5] + tz * self[6];
+ self[11] = tx * self[8] + ty * self[9] + tz * self[10];
+ return self;
+}
+
+
+// Triangle intersection using barycentric coord method
+function Triangle(p1, p2, p3) {
+ var edge1 = sub(p3, p1);
+ var edge2 = sub(p2, p1);
+ var normal = cross(edge1, edge2);
+ if (Math.abs(normal[0]) > Math.abs(normal[1]))
+ if (Math.abs(normal[0]) > Math.abs(normal[2]))
+ this.axis = 0;
+ else
+ this.axis = 2;
+ else
+ if (Math.abs(normal[1]) > Math.abs(normal[2]))
+ this.axis = 1;
+ else
+ this.axis = 2;
+ var u = (this.axis + 1) % 3;
+ var v = (this.axis + 2) % 3;
+ var u1 = edge1[u];
+ var v1 = edge1[v];
+
+ var u2 = edge2[u];
+ var v2 = edge2[v];
+ this.normal = normalise(normal);
+ this.nu = normal[u] / normal[this.axis];
+ this.nv = normal[v] / normal[this.axis];
+ this.nd = dot(normal, p1) / normal[this.axis];
+ var det = u1 * v2 - v1 * u2;
+ this.eu = p1[u];
+ this.ev = p1[v];
+ this.nu1 = u1 / det;
+ this.nv1 = -v1 / det;
+ this.nu2 = v2 / det;
+ this.nv2 = -u2 / det;
+ this.material = [0.7, 0.7, 0.7];
+}
+
+Triangle.prototype.intersect = function(orig, dir, near, far) {
+ var u = (this.axis + 1) % 3;
+ var v = (this.axis + 2) % 3;
+ var d = dir[this.axis] + this.nu * dir[u] + this.nv * dir[v];
+ var t = (this.nd - orig[this.axis] - this.nu * orig[u] - this.nv * orig[v]) / d;
+ if (t < near || t > far)
+ return null;
+ var Pu = orig[u] + t * dir[u] - this.eu;
+ var Pv = orig[v] + t * dir[v] - this.ev;
+ var a2 = Pv * this.nu1 + Pu * this.nv1;
+ if (a2 < 0)
+ return null;
+ var a3 = Pu * this.nu2 + Pv * this.nv2;
+ if (a3 < 0)
+ return null;
+
+ if ((a2 + a3) > 1)
+ return null;
+ return t;
+}
+
+function Scene(a_triangles) {
+ this.triangles = a_triangles;
+ this.lights = [];
+ this.ambient = [0,0,0];
+ this.background = [0.8,0.8,1];
+}
+var zero = new Array(0,0,0);
+
+Scene.prototype.intersect = function(origin, dir, near, far) {
+ var closest = null;
+ for (i = 0; i < this.triangles.length; i++) {
+ var triangle = this.triangles[i];
+ var d = triangle.intersect(origin, dir, near, far);
+ if (d == null || d > far || d < near)
+ continue;
+ far = d;
+ closest = triangle;
+ }
+
+ if (!closest)
+ return [this.background[0],this.background[1],this.background[2]];
+
+ var normal = closest.normal;
+ var hit = add(origin, scale(dir, far));
+ if (dot(dir, normal) > 0)
+ normal = [-normal[0], -normal[1], -normal[2]];
+
+ var colour = null;
+ if (closest.shader) {
+ colour = closest.shader(closest, hit, dir);
+ } else {
+ colour = closest.material;
+ }
+
+ // do reflection
+ var reflected = null;
+ if (colour.reflection > 0.001) {
+ var reflection = addVector(scale(normal, -2*dot(dir, normal)), dir);
+ reflected = this.intersect(hit, reflection, 0.0001, 1000000);
+ if (colour.reflection >= 0.999999)
+ return reflected;
+ }
+
+ var l = [this.ambient[0], this.ambient[1], this.ambient[2]];
+ for (var i = 0; i < this.lights.length; i++) {
+ var light = this.lights[i];
+ var toLight = sub(light, hit);
+ var distance = lengthVector(toLight);
+ scaleVector(toLight, 1.0/distance);
+ distance -= 0.0001;
+ if (this.blocked(hit, toLight, distance))
+ continue;
+ var nl = dot(normal, toLight);
+ if (nl > 0)
+ addVector(l, scale(light.colour, nl));
+ }
+ l = scalev(l, colour);
+ if (reflected) {
+ l = addVector(scaleVector(l, 1 - colour.reflection), scaleVector(reflected, colour.reflection));
+ }
+ return l;
+}
+
+Scene.prototype.blocked = function(O, D, far) {
+ var near = 0.0001;
+ var closest = null;
+ for (i = 0; i < this.triangles.length; i++) {
+ var triangle = this.triangles[i];
+ var d = triangle.intersect(O, D, near, far);
+ if (d == null || d > far || d < near)
+ continue;
+ return true;
+ }
+
+ return false;
+}
+
+
+// this camera code is from notes i made ages ago, it is from *somewhere* -- i cannot remember where
+// that somewhere is
+function Camera(origin, lookat, up) {
+ var zaxis = normaliseVector(subVector(lookat, origin));
+ var xaxis = normaliseVector(cross(up, zaxis));
+ var yaxis = normaliseVector(cross(xaxis, subVector([0,0,0], zaxis)));
+ var m = new Array(16);
+ m[0] = xaxis[0]; m[1] = xaxis[1]; m[2] = xaxis[2];
+ m[4] = yaxis[0]; m[5] = yaxis[1]; m[6] = yaxis[2];
+ m[8] = zaxis[0]; m[9] = zaxis[1]; m[10] = zaxis[2];
+ invertMatrix(m);
+ m[3] = 0; m[7] = 0; m[11] = 0;
+ this.origin = origin;
+ this.directions = new Array(4);
+ this.directions[0] = normalise([-0.7, 0.7, 1]);
+ this.directions[1] = normalise([ 0.7, 0.7, 1]);
+ this.directions[2] = normalise([ 0.7, -0.7, 1]);
+ this.directions[3] = normalise([-0.7, -0.7, 1]);
+ this.directions[0] = transformMatrix(m, this.directions[0]);
+ this.directions[1] = transformMatrix(m, this.directions[1]);
+ this.directions[2] = transformMatrix(m, this.directions[2]);
+ this.directions[3] = transformMatrix(m, this.directions[3]);
+}
+
+Camera.prototype.generateRayPair = function(y) {
+ rays = new Array(new Object(), new Object());
+ rays[0].origin = this.origin;
+ rays[1].origin = this.origin;
+ rays[0].dir = addVector(scale(this.directions[0], y), scale(this.directions[3], 1 - y));
+ rays[1].dir = addVector(scale(this.directions[1], y), scale(this.directions[2], 1 - y));
+ return rays;
+}
+
+function renderRows(camera, scene, pixels, width, height, starty, stopy) {
+ for (var y = starty; y < stopy; y++) {
+ var rays = camera.generateRayPair(y / height);
+ for (var x = 0; x < width; x++) {
+ var xp = x / width;
+ var origin = addVector(scale(rays[0].origin, xp), scale(rays[1].origin, 1 - xp));
+ var dir = normaliseVector(addVector(scale(rays[0].dir, xp), scale(rays[1].dir, 1 - xp)));
+ var l = scene.intersect(origin, dir);
+ pixels[y][x] = l;
+ }
+ }
+}
+
+Camera.prototype.render = function(scene, pixels, width, height) {
+ var cam = this;
+ var row = 0;
+ renderRows(cam, scene, pixels, width, height, 0, height);
+}
+
+
+
+function raytraceScene(size)
+{
+ var startDate = new Date().getTime();
+ var numTriangles = 2 * 6;
+ var triangles = new Array();//numTriangles);
+ var tfl = createVector(-10, 10, -10);
+ var tfr = createVector( 10, 10, -10);
+ var tbl = createVector(-10, 10, 10);
+ var tbr = createVector( 10, 10, 10);
+ var bfl = createVector(-10, -10, -10);
+ var bfr = createVector( 10, -10, -10);
+ var bbl = createVector(-10, -10, 10);
+ var bbr = createVector( 10, -10, 10);
+
+ // cube!!!
+ // front
+ var i = 0;
+
+ triangles[i++] = new Triangle(tfl, tfr, bfr);
+ triangles[i++] = new Triangle(tfl, bfr, bfl);
+ // back
+ triangles[i++] = new Triangle(tbl, tbr, bbr);
+ triangles[i++] = new Triangle(tbl, bbr, bbl);
+ // triangles[i-1].material = [0.7,0.2,0.2];
+ // triangles[i-1].material.reflection = 0.8;
+ // left
+ triangles[i++] = new Triangle(tbl, tfl, bbl);
+ // triangles[i-1].reflection = 0.6;
+ triangles[i++] = new Triangle(tfl, bfl, bbl);
+ // triangles[i-1].reflection = 0.6;
+ // right
+ triangles[i++] = new Triangle(tbr, tfr, bbr);
+ triangles[i++] = new Triangle(tfr, bfr, bbr);
+ // top
+ triangles[i++] = new Triangle(tbl, tbr, tfr);
+ triangles[i++] = new Triangle(tbl, tfr, tfl);
+ // bottom
+ triangles[i++] = new Triangle(bbl, bbr, bfr);
+ triangles[i++] = new Triangle(bbl, bfr, bfl);
+
+ //Floor!!!!
+ var green = createVector(0.0, 0.4, 0.0);
+ var grey = createVector(0.4, 0.4, 0.4);
+ grey.reflection = 1.0;
+ var floorShader = function(tri, pos, view) {
+ var x = ((pos[0]/32) % 2 + 2) % 2;
+ var z = ((pos[2]/32 + 0.3) % 2 + 2) % 2;
+ if (x < 1 != z < 1) {
+ //in the real world we use the fresnel term...
+ // var angle = 1-dot(view, tri.normal);
+ // angle *= angle;
+ // angle *= angle;
+ // angle *= angle;
+ //grey.reflection = angle;
+ return grey;
+ } else
+ return green;
+ }
+ var ffl = createVector(-1000, -30, -1000);
+ var ffr = createVector( 1000, -30, -1000);
+ var fbl = createVector(-1000, -30, 1000);
+ var fbr = createVector( 1000, -30, 1000);
+ triangles[i++] = new Triangle(fbl, fbr, ffr);
+ triangles[i-1].shader = floorShader;
+ triangles[i++] = new Triangle(fbl, ffr, ffl);
+ triangles[i-1].shader = floorShader;
+
+ var _scene = new Scene(triangles);
+ _scene.lights[0] = createVector(20, 38, -22);
+ _scene.lights[0].colour = createVector(0.7, 0.3, 0.3);
+ _scene.lights[1] = createVector(-23, 40, 17);
+ _scene.lights[1].colour = createVector(0.7, 0.3, 0.3);
+ _scene.lights[2] = createVector(23, 20, 17);
+ _scene.lights[2].colour = createVector(0.7, 0.7, 0.7);
+ _scene.ambient = createVector(0.1, 0.1, 0.1);
+ // _scene.background = createVector(0.7, 0.7, 1.0);
+
+ var pixels = new Array();
+ for (var y = 0; y < size; y++) {
+ pixels[y] = new Array();
+ for (var x = 0; x < size; x++) {
+ pixels[y][x] = 0;
+ }
+ }
+
+ var _camera = new Camera(createVector(-40, 40, 40), createVector(0, 0, 0), createVector(0, 1, 0));
+ _camera.render(_scene, pixels, size, size);
+
+ return pixels;
+}
+
+function arrayToCanvasCommands(pixels, size)
+{
+ var s = '<canvas id="renderCanvas" width="30px" height="30px"></canvas><scr' + 'ipt>\nvar pixels = [';
+ for (var y = 0; y < size; y++) {
+ s += "[";
+ for (var x = 0; x < size; x++) {
+ s += "[" + pixels[y][x] + "],";
+ }
+ s+= "],";
+ }
+ s += '];\n var canvas = document.getElementById("renderCanvas").getContext("2d");\n\
+\n\
+\n\
+ var size = 20;\n\
+ canvas.fillStyle = "red";\n\
+ canvas.fillRect(0, 0, size, size);\n\
+ canvas.scale(1, -1);\n\
+ canvas.translate(0, -size);\n\
+\n\
+ if (!canvas.setFillColor)\n\
+ canvas.setFillColor = function(r, g, b, a) {\n\
+ this.fillStyle = "rgb("+[Math.floor(r * 255), Math.floor(g * 255), Math.floor(b * 255)]+")";\n\
+ }\n\
+\n\
+for (var y = 0; y < size; y++) {\n\
+ for (var x = 0; x < size; x++) {\n\
+ var l = pixels[y][x];\n\
+ canvas.setFillColor(l[0], l[1], l[2], 1);\n\
+ canvas.fillRect(x, y, 1, 1);\n\
+ }\n\
+}</scr' + 'ipt>';
+
+ return s;
+}
+
+window.onload = function(){ startTest("sunspider-3d-raytrace", '8f9b64d5');
+
+var rayoutput;
+
+test("3D Raytrace", function(){
+ rayoutput = raytraceScene(15);
+});
+
+test("Convert pixels to canvas", function(){
+ for ( var i = 0; i < 10; i++ )
+ testOutput = arrayToCanvasCommands(rayoutput, 15);
+});
+
+endTest(); };
+</script>
+</head>
+<body></body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/sunspider-access-binary-trees.html b/testing/talos/talos/tests/dromaeo/tests/sunspider-access-binary-trees.html
new file mode 100644
index 0000000000..d0c8777c94
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/sunspider-access-binary-trees.html
@@ -0,0 +1,64 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script>
+/* The Great Computer Language Shootout
+ http://shootout.alioth.debian.org/
+ contributed by Isaac Gouy */
+
+function TreeNode(left,right,item){
+ this.left = left;
+ this.right = right;
+ this.item = item;
+}
+
+TreeNode.prototype.itemCheck = function(){
+ if (this.left==null) return this.item;
+ else return this.item + this.left.itemCheck() - this.right.itemCheck();
+}
+
+function bottomUpTree(item,depth){
+ if (depth>0){
+ return new TreeNode(
+ bottomUpTree(2*item-1, depth-1)
+ ,bottomUpTree(2*item, depth-1)
+ ,item
+ );
+ }
+ else {
+ return new TreeNode(null,null,item);
+ }
+}
+
+window.onload = function(){ startTest("sunspider-access-binary-trees", 'c1dfeea3');
+
+var ret;
+
+test( "Binary Trees", function(){
+ for ( var n = 4; n <= 5; n += 1 ) {
+ var minDepth = 4;
+ var maxDepth = Math.max(minDepth + 2, n);
+ var stretchDepth = maxDepth + 1;
+
+ var check = bottomUpTree(0,stretchDepth).itemCheck();
+
+ var longLivedTree = bottomUpTree(0,maxDepth);
+ for (var depth=minDepth; depth<=maxDepth; depth+=2){
+ var iterations = 1 << (maxDepth - depth + minDepth);
+
+ check = 0;
+ for (var i=1; i<=iterations; i++){
+ check += bottomUpTree(i,depth).itemCheck();
+ check += bottomUpTree(-i,depth).itemCheck();
+ }
+ }
+
+ ret = longLivedTree.itemCheck();
+ }
+});
+
+endTest(); };
+</script>
+</head>
+<body></body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/sunspider-access-fannkuch.html b/testing/talos/talos/tests/dromaeo/tests/sunspider-access-fannkuch.html
new file mode 100644
index 0000000000..55044289a3
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/sunspider-access-fannkuch.html
@@ -0,0 +1,80 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script>
+/* The Great Computer Language Shootout
+ http://shootout.alioth.debian.org/
+ contributed by Isaac Gouy */
+
+function fannkuch(n) {
+ var check = 0;
+ var perm = Array(n);
+ var perm1 = Array(n);
+ var count = Array(n);
+ var maxPerm = Array(n);
+ var maxFlipsCount = 0;
+ var m = n - 1;
+
+ for (var i = 0; i < n; i++) perm1[i] = i;
+ var r = n;
+
+ while (true) {
+ // write-out the first 30 permutations
+ if (check < 30){
+ var s = "";
+ for(var i=0; i<n; i++) s += (perm1[i]+1).toString();
+ check++;
+ }
+
+ while (r != 1) { count[r - 1] = r; r--; }
+ if (!(perm1[0] == 0 || perm1[m] == m)) {
+ for (var i = 0; i < n; i++) perm[i] = perm1[i];
+
+ var flipsCount = 0;
+ var k;
+
+ while (!((k = perm[0]) == 0)) {
+ var k2 = (k + 1) >> 1;
+ for (var i = 0; i < k2; i++) {
+ var temp = perm[i]; perm[i] = perm[k - i]; perm[k - i] = temp;
+ }
+ flipsCount++;
+ }
+
+ if (flipsCount > maxFlipsCount) {
+ maxFlipsCount = flipsCount;
+ for (var i = 0; i < n; i++) maxPerm[i] = perm1[i];
+ }
+ }
+
+ while (true) {
+ if (r == n) return maxFlipsCount;
+ var perm0 = perm1[0];
+ var i = 0;
+ while (i < r) {
+ var j = i + 1;
+ perm1[i] = perm1[j];
+ i = j;
+ }
+ perm1[r] = perm0;
+
+ count[r] = count[r] - 1;
+ if (count[r] > 0) break;
+ r++;
+ }
+ }
+}
+
+window.onload = function(){ startTest("sunspider-access-fannkuch", '786198fd');
+
+var ret;
+
+test( "Pfannkuchen", function(){
+ ret = fannkuch(7);
+});
+
+endTest(); };
+</script>
+</head>
+<body></body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/sunspider-access-nbody.html b/testing/talos/talos/tests/dromaeo/tests/sunspider-access-nbody.html
new file mode 100644
index 0000000000..3ebb6c0989
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/sunspider-access-nbody.html
@@ -0,0 +1,181 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script>
+/* The Great Computer Language Shootout
+ http://shootout.alioth.debian.org/
+ contributed by Isaac Gouy */
+
+var PI = 3.141592653589793;
+var SOLAR_MASS = 4 * PI * PI;
+var DAYS_PER_YEAR = 365.24;
+
+function Body(x,y,z,vx,vy,vz,mass){
+ this.x = x;
+ this.y = y;
+ this.z = z;
+ this.vx = vx;
+ this.vy = vy;
+ this.vz = vz;
+ this.mass = mass;
+}
+
+Body.prototype.offsetMomentum = function(px,py,pz) {
+ this.vx = -px / SOLAR_MASS;
+ this.vy = -py / SOLAR_MASS;
+ this.vz = -pz / SOLAR_MASS;
+ return this;
+}
+
+function Jupiter(){
+ return new Body(
+ 4.84143144246472090e+00,
+ -1.16032004402742839e+00,
+ -1.03622044471123109e-01,
+ 1.66007664274403694e-03 * DAYS_PER_YEAR,
+ 7.69901118419740425e-03 * DAYS_PER_YEAR,
+ -6.90460016972063023e-05 * DAYS_PER_YEAR,
+ 9.54791938424326609e-04 * SOLAR_MASS
+ );
+}
+
+function Saturn(){
+ return new Body(
+ 8.34336671824457987e+00,
+ 4.12479856412430479e+00,
+ -4.03523417114321381e-01,
+ -2.76742510726862411e-03 * DAYS_PER_YEAR,
+ 4.99852801234917238e-03 * DAYS_PER_YEAR,
+ 2.30417297573763929e-05 * DAYS_PER_YEAR,
+ 2.85885980666130812e-04 * SOLAR_MASS
+ );
+}
+
+function Uranus(){
+ return new Body(
+ 1.28943695621391310e+01,
+ -1.51111514016986312e+01,
+ -2.23307578892655734e-01,
+ 2.96460137564761618e-03 * DAYS_PER_YEAR,
+ 2.37847173959480950e-03 * DAYS_PER_YEAR,
+ -2.96589568540237556e-05 * DAYS_PER_YEAR,
+ 4.36624404335156298e-05 * SOLAR_MASS
+ );
+}
+
+function Neptune(){
+ return new Body(
+ 1.53796971148509165e+01,
+ -2.59193146099879641e+01,
+ 1.79258772950371181e-01,
+ 2.68067772490389322e-03 * DAYS_PER_YEAR,
+ 1.62824170038242295e-03 * DAYS_PER_YEAR,
+ -9.51592254519715870e-05 * DAYS_PER_YEAR,
+ 5.15138902046611451e-05 * SOLAR_MASS
+ );
+}
+
+function Sun(){
+ return new Body(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, SOLAR_MASS);
+}
+
+
+function NBodySystem(bodies){
+ this.bodies = bodies;
+ var px = 0.0;
+ var py = 0.0;
+ var pz = 0.0;
+ var size = this.bodies.length;
+ for (var i=0; i<size; i++){
+ var b = this.bodies[i];
+ var m = b.mass;
+ px += b.vx * m;
+ py += b.vy * m;
+ pz += b.vz * m;
+ }
+ this.bodies[0].offsetMomentum(px,py,pz);
+}
+
+NBodySystem.prototype.advance = function(dt){
+ var dx, dy, dz, distance, mag;
+ var size = this.bodies.length;
+
+ for (var i=0; i<size; i++) {
+ var bodyi = this.bodies[i];
+ for (var j=i+1; j<size; j++) {
+ var bodyj = this.bodies[j];
+ dx = bodyi.x - bodyj.x;
+ dy = bodyi.y - bodyj.y;
+ dz = bodyi.z - bodyj.z;
+
+ distance = Math.sqrt(dx*dx + dy*dy + dz*dz);
+ mag = dt / (distance * distance * distance);
+
+ bodyi.vx -= dx * bodyj.mass * mag;
+ bodyi.vy -= dy * bodyj.mass * mag;
+ bodyi.vz -= dz * bodyj.mass * mag;
+
+ bodyj.vx += dx * bodyi.mass * mag;
+ bodyj.vy += dy * bodyi.mass * mag;
+ bodyj.vz += dz * bodyi.mass * mag;
+ }
+ }
+
+ for (var i=0; i<size; i++) {
+ var body = this.bodies[i];
+ body.x += dt * body.vx;
+ body.y += dt * body.vy;
+ body.z += dt * body.vz;
+ }
+}
+
+NBodySystem.prototype.energy = function(){
+ var dx, dy, dz, distance;
+ var e = 0.0;
+ var size = this.bodies.length;
+
+ for (var i=0; i<size; i++) {
+ var bodyi = this.bodies[i];
+
+ e += 0.5 * bodyi.mass *
+ ( bodyi.vx * bodyi.vx
+ + bodyi.vy * bodyi.vy
+ + bodyi.vz * bodyi.vz );
+
+ for (var j=i+1; j<size; j++) {
+ var bodyj = this.bodies[j];
+ dx = bodyi.x - bodyj.x;
+ dy = bodyi.y - bodyj.y;
+ dz = bodyi.z - bodyj.z;
+
+ distance = Math.sqrt(dx*dx + dy*dy + dz*dz);
+ e -= (bodyi.mass * bodyj.mass) / distance;
+ }
+ }
+ return e;
+}
+
+window.onload = function(){ startTest("sunspider-access-nbody", '38cd3387');
+
+var ret;
+
+test( "N-Body", function(){
+ for ( var n = 3; n <= 6; n *= 2 ) {
+ var bodies = new NBodySystem( Array(
+ Sun(),Jupiter(),Saturn(),Uranus(),Neptune()
+ ));
+ var max = n * 100;
+
+ ret = bodies.energy();
+ for (var i=0; i<max; i++){
+ bodies.advance(0.01);
+ }
+ ret = bodies.energy();
+ }
+});
+
+endTest(); };
+</script>
+</head>
+<body></body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/sunspider-access-nsieve.html b/testing/talos/talos/tests/dromaeo/tests/sunspider-access-nsieve.html
new file mode 100644
index 0000000000..00dc1cc91e
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/sunspider-access-nsieve.html
@@ -0,0 +1,48 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script>
+// The Great Computer Language Shootout
+// http://shootout.alioth.debian.org/
+//
+// modified by Isaac Gouy
+
+function pad(number,width){
+ var s = number.toString();
+ var prefixWidth = width - s.length;
+ if (prefixWidth>0){
+ for (var i=1; i<=prefixWidth; i++) s = " " + s;
+ }
+ return s;
+}
+
+function nsieve(m, isPrime){
+ var i, k, count;
+
+ for (i=2; i<=m; i++) { isPrime[i] = true; }
+ count = 0;
+
+ for (i=2; i<=m; i++){
+ if (isPrime[i]) {
+ for (k=i+i; k<=m; k+=i) isPrime[k] = false;
+ count++;
+ }
+ }
+ return count;
+}
+
+window.onload = function(){ startTest("sunspider-access-nsieve", 'efeee6f3');
+
+test( "N-Sieve", function(){
+ for ( var i = 1; i <= 2; i++ ) {
+ var m = (1<<i)*10000;
+ var flags = Array(m+1);
+ nsieve(m,flags);
+ }
+});
+
+endTest(); };
+</script>
+</head>
+<body></body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/sunspider-bitops-3bit-bits-in-byte.html b/testing/talos/talos/tests/dromaeo/tests/sunspider-bitops-3bit-bits-in-byte.html
new file mode 100644
index 0000000000..f3caffc795
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/sunspider-bitops-3bit-bits-in-byte.html
@@ -0,0 +1,46 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script>
+// Copyright (c) 2004 by Arthur Langereis (arthur_ext at domain xfinitegames, tld com
+
+// 1 op = 6 ANDs, 3 SHRs, 3 SHLs, 4 assigns, 2 ADDs
+// O(1)
+function fast3bitlookup(b) {
+var c, bi3b = 0xE994; // 0b1110 1001 1001 0100; // 3 2 2 1 2 1 1 0
+c = 3 & (bi3b >> ((b << 1) & 14));
+c += 3 & (bi3b >> ((b >> 2) & 14));
+c += 3 & (bi3b >> ((b >> 5) & 6));
+return c;
+
+/*
+lir4,0xE994; 9 instructions, no memory access, minimal register dependence, 6 shifts, 2 adds, 1 inline assign
+rlwinmr5,r3,1,28,30
+rlwinmr6,r3,30,28,30
+rlwinmr7,r3,27,29,30
+rlwnmr8,r4,r5,30,31
+rlwnmr9,r4,r6,30,31
+rlwnmr10,r4,r7,30,31
+addr3,r8,r9
+addr3,r3,r10
+*/
+}
+
+
+function TimeFunc(func) {
+var x, y, t;
+for(var x=0; x<250; x++)
+for(var y=0; y<256; y++) func(y);
+}
+
+window.onload = function(){ startTest("sunspider-bitops-3bit-bits-in-byte", '3664f684');
+
+test("3bit bits in byte", function(){
+ TimeFunc(fast3bitlookup);
+});
+
+endTest(); };
+</script>
+</head>
+<body></body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/sunspider-bitops-bits-in-byte.html b/testing/talos/talos/tests/dromaeo/tests/sunspider-bitops-bits-in-byte.html
new file mode 100644
index 0000000000..f3cbf2127e
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/sunspider-bitops-bits-in-byte.html
@@ -0,0 +1,35 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script>
+// Copyright (c) 2004 by Arthur Langereis (arthur_ext at domain xfinitegames, tld com)
+
+
+// 1 op = 2 assigns, 16 compare/branches, 8 ANDs, (0-8) ADDs, 8 SHLs
+// O(n)
+function bitsinbyte(b) {
+var m = 1, c = 0;
+while(m<0x100) {
+if(b & m) c++;
+m <<= 1;
+}
+return c;
+}
+
+function TimeFunc(func) {
+var x, y, t;
+for(var x=0; x<100; x++)
+for(var y=0; y<256; y++) func(y);
+}
+
+window.onload = function(){ startTest("sunspider-bitops-bits-in-byte", '245fac8a');
+
+test("Bit in byte (2)", function(){
+ TimeFunc(bitsinbyte);
+});
+
+endTest(); };
+</script>
+</head>
+<body></body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/sunspider-bitops-bitwise-and.html b/testing/talos/talos/tests/dromaeo/tests/sunspider-bitops-bitwise-and.html
new file mode 100644
index 0000000000..a6e10e4c11
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/sunspider-bitops-bitwise-and.html
@@ -0,0 +1,42 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script>
+/*
+ * Copyright (C) 2007 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``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 APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS 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.
+ */
+
+window.onload = function(){ startTest("sunspider-bitops-bitwise-and", '17d2bd38');
+
+test("Bitwise And", function(){
+ bitwiseAndValue = 4294967296;
+ for (var i = 0; i < 60000; i++)
+ bitwiseAndValue = bitwiseAndValue & i;
+});
+
+endTest(); };
+</script>
+</head>
+<body></body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/sunspider-bitops-nsieve-bits.html b/testing/talos/talos/tests/dromaeo/tests/sunspider-bitops-nsieve-bits.html
new file mode 100644
index 0000000000..42e414cd15
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/sunspider-bitops-nsieve-bits.html
@@ -0,0 +1,42 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script>
+// The Great Computer Language Shootout
+// http://shootout.alioth.debian.org
+//
+// Contributed by Ian Osgood
+
+function pad(n,width) {
+ var s = n.toString();
+ while (s.length < width) s = ' ' + s;
+ return s;
+}
+
+function primes(isPrime, n) {
+ var i, count = 0, m = 10000<<n, size = m+31>>5;
+
+ for (i=0; i<size; i++) isPrime[i] = 0xffffffff;
+
+ for (i=2; i<m; i++)
+ if (isPrime[i>>5] & 1<<(i&31)) {
+ for (var j=i+i; j<m; j+=i)
+ isPrime[j>>5] &= ~(1<<(j&31));
+ count++;
+ }
+}
+
+window.onload = function(){ startTest("sunspider-bitops-nsieve-bits", '35973a6b');
+
+var i = 2;
+
+test( "N-Sieve Bits", function(){
+ var isPrime = new Array((10000<<i)+31>>5);
+ primes(isPrime, i);
+});
+
+endTest(); };
+</script>
+</head>
+<body></body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/sunspider-controlflow-recursive.html b/testing/talos/talos/tests/dromaeo/tests/sunspider-controlflow-recursive.html
new file mode 100644
index 0000000000..b0162481bc
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/sunspider-controlflow-recursive.html
@@ -0,0 +1,46 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script>
+// The Computer Language Shootout
+// http://shootout.alioth.debian.org/
+// contributed by Isaac Gouy
+
+function ack(m,n){
+ if (m==0) { return n+1; }
+ if (n==0) { return ack(m-1,1); }
+ return ack(m-1, ack(m,n-1) );
+}
+
+function fib(n) {
+ if (n < 2){ return 1; }
+ return fib(n-2) + fib(n-1);
+}
+
+function tak(x,y,z) {
+ if (y >= x) return z;
+ return tak(tak(x-1,y,z), tak(y-1,z,x), tak(z-1,x,y));
+}
+
+window.onload = function(){ startTest("sunspider-controlflow-recursive", '558ed308');
+
+ test("Ack", function(){
+ for ( var i = 3; i <= 5; i++ )
+ ack(3,i);
+ });
+
+ test("Fib", function(){
+ for ( var i = 3; i <= 5; i++ )
+ fib(17.0+i);
+ });
+
+ test("Tak", function(){
+ for ( var i = 3; i <= 5; i++ )
+ tak(3*i+3,2*i+2,i+1);
+ });
+
+endTest(); };
+</script>
+</head>
+<body></body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/sunspider-crypto-aes.html b/testing/talos/talos/tests/dromaeo/tests/sunspider-crypto-aes.html
new file mode 100644
index 0000000000..758a150f80
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/sunspider-crypto-aes.html
@@ -0,0 +1,443 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script>
+/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
+
+/*
+ * AES Cipher function: encrypt 'input' with Rijndael algorithm
+ *
+ * takes byte-array 'input' (16 bytes)
+ * 2D byte-array key schedule 'w' (Nr+1 x Nb bytes)
+ *
+ * applies Nr rounds (10/12/14) using key schedule w for 'add round key' stage
+ *
+ * returns byte-array encrypted value (16 bytes)
+ */
+function Cipher(input, w) { // main Cipher function [§5.1]
+ var Nb = 4; // block size (in words): no of columns in state (fixed at 4 for AES)
+ var Nr = w.length/Nb - 1; // no of rounds: 10/12/14 for 128/192/256-bit keys
+
+ var state = [[],[],[],[]]; // initialise 4xNb byte-array 'state' with input [§3.4]
+ for (var i=0; i<4*Nb; i++) state[i%4][Math.floor(i/4)] = input[i];
+
+ state = AddRoundKey(state, w, 0, Nb);
+
+ for (var round=1; round<Nr; round++) {
+ state = SubBytes(state, Nb);
+ state = ShiftRows(state, Nb);
+ state = MixColumns(state, Nb);
+ state = AddRoundKey(state, w, round, Nb);
+ }
+
+ state = SubBytes(state, Nb);
+ state = ShiftRows(state, Nb);
+ state = AddRoundKey(state, w, Nr, Nb);
+
+ var output = new Array(4*Nb); // convert state to 1-d array before returning [§3.4]
+ for (var i=0; i<4*Nb; i++) output[i] = state[i%4][Math.floor(i/4)];
+ return output;
+}
+
+
+function SubBytes(s, Nb) { // apply SBox to state S [§5.1.1]
+ for (var r=0; r<4; r++) {
+ for (var c=0; c<Nb; c++) s[r][c] = Sbox[s[r][c]];
+ }
+ return s;
+}
+
+
+function ShiftRows(s, Nb) { // shift row r of state S left by r bytes [§5.1.2]
+ var t = new Array(4);
+ for (var r=1; r<4; r++) {
+ for (var c=0; c<4; c++) t[c] = s[r][(c+r)%Nb]; // shift into temp copy
+ for (var c=0; c<4; c++) s[r][c] = t[c]; // and copy back
+ } // note that this will work for Nb=4,5,6, but not 7,8 (always 4 for AES):
+ return s; // see fp.gladman.plus.com/cryptography_technology/rijndael/aes.spec.311.pdf
+}
+
+
+function MixColumns(s, Nb) { // combine bytes of each col of state S [§5.1.3]
+ for (var c=0; c<4; c++) {
+ var a = new Array(4); // 'a' is a copy of the current column from 's'
+ var b = new Array(4); // 'b' is a•{02} in GF(2^8)
+ for (var i=0; i<4; i++) {
+ a[i] = s[i][c];
+ b[i] = s[i][c]&0x80 ? s[i][c]<<1 ^ 0x011b : s[i][c]<<1;
+ }
+ // a[n] ^ b[n] is a•{03} in GF(2^8)
+ s[0][c] = b[0] ^ a[1] ^ b[1] ^ a[2] ^ a[3]; // 2*a0 + 3*a1 + a2 + a3
+ s[1][c] = a[0] ^ b[1] ^ a[2] ^ b[2] ^ a[3]; // a0 * 2*a1 + 3*a2 + a3
+ s[2][c] = a[0] ^ a[1] ^ b[2] ^ a[3] ^ b[3]; // a0 + a1 + 2*a2 + 3*a3
+ s[3][c] = a[0] ^ b[0] ^ a[1] ^ a[2] ^ b[3]; // 3*a0 + a1 + a2 + 2*a3
+ }
+ return s;
+}
+
+
+function AddRoundKey(state, w, rnd, Nb) { // xor Round Key into state S [§5.1.4]
+ for (var r=0; r<4; r++) {
+ for (var c=0; c<Nb; c++) state[r][c] ^= w[rnd*4+c][r];
+ }
+ return state;
+}
+
+
+function KeyExpansion(key) { // generate Key Schedule (byte-array Nr+1 x Nb) from Key [§5.2]
+ var Nb = 4; // block size (in words): no of columns in state (fixed at 4 for AES)
+ var Nk = key.length/4 // key length (in words): 4/6/8 for 128/192/256-bit keys
+ var Nr = Nk + 6; // no of rounds: 10/12/14 for 128/192/256-bit keys
+
+ var w = new Array(Nb*(Nr+1));
+ var temp = new Array(4);
+
+ for (var i=0; i<Nk; i++) {
+ var r = [key[4*i], key[4*i+1], key[4*i+2], key[4*i+3]];
+ w[i] = r;
+ }
+
+ for (var i=Nk; i<(Nb*(Nr+1)); i++) {
+ w[i] = new Array(4);
+ for (var t=0; t<4; t++) temp[t] = w[i-1][t];
+ if (i % Nk == 0) {
+ temp = SubWord(RotWord(temp));
+ for (var t=0; t<4; t++) temp[t] ^= Rcon[i/Nk][t];
+ } else if (Nk > 6 && i%Nk == 4) {
+ temp = SubWord(temp);
+ }
+ for (var t=0; t<4; t++) w[i][t] = w[i-Nk][t] ^ temp[t];
+ }
+
+ return w;
+}
+
+function SubWord(w) { // apply SBox to 4-byte word w
+ for (var i=0; i<4; i++) w[i] = Sbox[w[i]];
+ return w;
+}
+
+function RotWord(w) { // rotate 4-byte word w left by one byte
+ w[4] = w[0];
+ for (var i=0; i<4; i++) w[i] = w[i+1];
+ return w;
+}
+
+
+// Sbox is pre-computed multiplicative inverse in GF(2^8) used in SubBytes and KeyExpansion [§5.1.1]
+var Sbox = [0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5,0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76,
+ 0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0,0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0,
+ 0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc,0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15,
+ 0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a,0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75,
+ 0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0,0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84,
+ 0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b,0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf,
+ 0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85,0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8,
+ 0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5,0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2,
+ 0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17,0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73,
+ 0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88,0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb,
+ 0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c,0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79,
+ 0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9,0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08,
+ 0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6,0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a,
+ 0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e,0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e,
+ 0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94,0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf,
+ 0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68,0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16];
+
+// Rcon is Round Constant used for the Key Expansion [1st col is 2^(r-1) in GF(2^8)] [§5.2]
+var Rcon = [ [0x00, 0x00, 0x00, 0x00],
+ [0x01, 0x00, 0x00, 0x00],
+ [0x02, 0x00, 0x00, 0x00],
+ [0x04, 0x00, 0x00, 0x00],
+ [0x08, 0x00, 0x00, 0x00],
+ [0x10, 0x00, 0x00, 0x00],
+ [0x20, 0x00, 0x00, 0x00],
+ [0x40, 0x00, 0x00, 0x00],
+ [0x80, 0x00, 0x00, 0x00],
+ [0x1b, 0x00, 0x00, 0x00],
+ [0x36, 0x00, 0x00, 0x00] ];
+
+
+/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
+
+/*
+ * Use AES to encrypt 'plaintext' with 'password' using 'nBits' key, in 'Counter' mode of operation
+ * - see http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf
+ * for each block
+ * - outputblock = cipher(counter, key)
+ * - cipherblock = plaintext xor outputblock
+ */
+function AESEncryptCtr(plaintext, password, nBits) {
+ if (!(nBits==128 || nBits==192 || nBits==256)) return ''; // standard allows 128/192/256 bit keys
+
+ // for this example script, generate the key by applying Cipher to 1st 16/24/32 chars of password;
+ // for real-world applications, a more secure approach would be to hash the password e.g. with SHA-1
+ var nBytes = nBits/8; // no bytes in key
+ var pwBytes = new Array(nBytes);
+ for (var i=0; i<nBytes; i++) pwBytes[i] = password.charCodeAt(i) & 0xff;
+ var key = Cipher(pwBytes, KeyExpansion(pwBytes));
+ key = key.concat(key.slice(0, nBytes-16)); // key is now 16/24/32 bytes long
+
+ // initialise counter block (NIST SP800-38A §B.2): millisecond time-stamp for nonce in 1st 8 bytes,
+ // block counter in 2nd 8 bytes
+ var blockSize = 16; // block size fixed at 16 bytes / 128 bits (Nb=4) for AES
+ var counterBlock = new Array(blockSize); // block size fixed at 16 bytes / 128 bits (Nb=4) for AES
+ var nonce = (new Date()).getTime(); // milliseconds since 1-Jan-1970
+
+ // encode nonce in two stages to cater for JavaScript 32-bit limit on bitwise ops
+ for (var i=0; i<4; i++) counterBlock[i] = (nonce >>> i*8) & 0xff;
+ for (var i=0; i<4; i++) counterBlock[i+4] = (nonce/0x100000000 >>> i*8) & 0xff;
+
+ // generate key schedule - an expansion of the key into distinct Key Rounds for each round
+ var keySchedule = KeyExpansion(key);
+
+ var blockCount = Math.ceil(plaintext.length/blockSize);
+ var ciphertext = new Array(blockCount); // ciphertext as array of strings
+
+ for (var b=0; b<blockCount; b++) {
+ // set counter (block #) in last 8 bytes of counter block (leaving nonce in 1st 8 bytes)
+ // again done in two stages for 32-bit ops
+ for (var c=0; c<4; c++) counterBlock[15-c] = (b >>> c*8) & 0xff;
+ for (var c=0; c<4; c++) counterBlock[15-c-4] = (b/0x100000000 >>> c*8)
+
+ var cipherCntr = Cipher(counterBlock, keySchedule); // -- encrypt counter block --
+
+ // calculate length of final block:
+ var blockLength = b<blockCount-1 ? blockSize : (plaintext.length-1)%blockSize+1;
+
+ var ct = '';
+ for (var i=0; i<blockLength; i++) { // -- xor plaintext with ciphered counter byte-by-byte --
+ var plaintextByte = plaintext.charCodeAt(b*blockSize+i);
+ var cipherByte = plaintextByte ^ cipherCntr[i];
+ ct += String.fromCharCode(cipherByte);
+ }
+ // ct is now ciphertext for this block
+
+ ciphertext[b] = escCtrlChars(ct); // escape troublesome characters in ciphertext
+ }
+
+ // convert the nonce to a string to go on the front of the ciphertext
+ var ctrTxt = '';
+ for (var i=0; i<8; i++) ctrTxt += String.fromCharCode(counterBlock[i]);
+ ctrTxt = escCtrlChars(ctrTxt);
+
+ // use '-' to separate blocks, use Array.join to concatenate arrays of strings for efficiency
+ return ctrTxt + '-' + ciphertext.join('-');
+}
+
+
+/*
+ * Use AES to decrypt 'ciphertext' with 'password' using 'nBits' key, in Counter mode of operation
+ *
+ * for each block
+ * - outputblock = cipher(counter, key)
+ * - cipherblock = plaintext xor outputblock
+ */
+function AESDecryptCtr(ciphertext, password, nBits) {
+ if (!(nBits==128 || nBits==192 || nBits==256)) return ''; // standard allows 128/192/256 bit keys
+
+ var nBytes = nBits/8; // no bytes in key
+ var pwBytes = new Array(nBytes);
+ for (var i=0; i<nBytes; i++) pwBytes[i] = password.charCodeAt(i) & 0xff;
+ var pwKeySchedule = KeyExpansion(pwBytes);
+ var key = Cipher(pwBytes, pwKeySchedule);
+ key = key.concat(key.slice(0, nBytes-16)); // key is now 16/24/32 bytes long
+
+ var keySchedule = KeyExpansion(key);
+
+ ciphertext = ciphertext.split('-'); // split ciphertext into array of block-length strings
+
+ // recover nonce from 1st element of ciphertext
+ var blockSize = 16; // block size fixed at 16 bytes / 128 bits (Nb=4) for AES
+ var counterBlock = new Array(blockSize);
+ var ctrTxt = unescCtrlChars(ciphertext[0]);
+ for (var i=0; i<8; i++) counterBlock[i] = ctrTxt.charCodeAt(i);
+
+ var plaintext = new Array(ciphertext.length-1);
+
+ for (var b=1; b<ciphertext.length; b++) {
+ // set counter (block #) in last 8 bytes of counter block (leaving nonce in 1st 8 bytes)
+ for (var c=0; c<4; c++) counterBlock[15-c] = ((b-1) >>> c*8) & 0xff;
+ for (var c=0; c<4; c++) counterBlock[15-c-4] = ((b/0x100000000-1) >>> c*8) & 0xff;
+
+ var cipherCntr = Cipher(counterBlock, keySchedule); // encrypt counter block
+
+ ciphertext[b] = unescCtrlChars(ciphertext[b]);
+
+ var pt = '';
+ for (var i=0; i<ciphertext[b].length; i++) {
+ // -- xor plaintext with ciphered counter byte-by-byte --
+ var ciphertextByte = ciphertext[b].charCodeAt(i);
+ var plaintextByte = ciphertextByte ^ cipherCntr[i];
+ pt += String.fromCharCode(plaintextByte);
+ }
+ // pt is now plaintext for this block
+
+ plaintext[b-1] = pt; // b-1 'cos no initial nonce block in plaintext
+ }
+
+ return plaintext.join('');
+}
+
+/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
+
+function escCtrlChars(str) { // escape control chars which might cause problems handling ciphertext
+ return str.replace(/[\0\t\n\v\f\r\xa0'"!-]/g, function(c) { return '!' + c.charCodeAt(0) + '!'; });
+} // \xa0 to cater for bug in Firefox; include '-' to leave it free for use as a block marker
+
+function unescCtrlChars(str) { // unescape potentially problematic control characters
+ return str.replace(/!\d\d?\d?!/g, function(c) { return String.fromCharCode(c.slice(1,-1)); });
+}
+/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
+
+/*
+ * if escCtrlChars()/unescCtrlChars() still gives problems, use encodeBase64()/decodeBase64() instead
+ */
+var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
+
+function encodeBase64(str) { // http://tools.ietf.org/html/rfc4648
+ var o1, o2, o3, h1, h2, h3, h4, bits, i=0, enc='';
+
+ str = encodeUTF8(str); // encode multi-byte chars into UTF-8 for byte-array
+
+ do { // pack three octets into four hexets
+ o1 = str.charCodeAt(i++);
+ o2 = str.charCodeAt(i++);
+ o3 = str.charCodeAt(i++);
+
+ bits = o1<<16 | o2<<8 | o3;
+
+ h1 = bits>>18 & 0x3f;
+ h2 = bits>>12 & 0x3f;
+ h3 = bits>>6 & 0x3f;
+ h4 = bits & 0x3f;
+
+ // end of string? index to '=' in b64
+ if (isNaN(o3)) h4 = 64;
+ if (isNaN(o2)) h3 = 64;
+
+ // use hexets to index into b64, and append result to encoded string
+ enc += b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);
+ } while (i < str.length);
+
+ return enc;
+}
+
+function decodeBase64(str) {
+ var o1, o2, o3, h1, h2, h3, h4, bits, i=0, enc='';
+
+ do { // unpack four hexets into three octets using index points in b64
+ h1 = b64.indexOf(str.charAt(i++));
+ h2 = b64.indexOf(str.charAt(i++));
+ h3 = b64.indexOf(str.charAt(i++));
+ h4 = b64.indexOf(str.charAt(i++));
+
+ bits = h1<<18 | h2<<12 | h3<<6 | h4;
+
+ o1 = bits>>16 & 0xff;
+ o2 = bits>>8 & 0xff;
+ o3 = bits & 0xff;
+
+ if (h3 == 64) enc += String.fromCharCode(o1);
+ else if (h4 == 64) enc += String.fromCharCode(o1, o2);
+ else enc += String.fromCharCode(o1, o2, o3);
+ } while (i < str.length);
+
+ return decodeUTF8(enc); // decode UTF-8 byte-array back to Unicode
+}
+
+function encodeUTF8(str) { // encode multi-byte string into utf-8 multiple single-byte characters
+ str = str.replace(
+ /[\u0080-\u07ff]/g, // U+0080 - U+07FF = 2-byte chars
+ function(c) {
+ var cc = c.charCodeAt(0);
+ return String.fromCharCode(0xc0 | cc>>6, 0x80 | cc&0x3f); }
+ );
+ str = str.replace(
+ /[\u0800-\uffff]/g, // U+0800 - U+FFFF = 3-byte chars
+ function(c) {
+ var cc = c.charCodeAt(0);
+ return String.fromCharCode(0xe0 | cc>>12, 0x80 | cc>>6&0x3F, 0x80 | cc&0x3f); }
+ );
+ return str;
+}
+
+function decodeUTF8(str) { // decode utf-8 encoded string back into multi-byte characters
+ str = str.replace(
+ /[\u00c0-\u00df][\u0080-\u00bf]/g, // 2-byte chars
+ function(c) {
+ var cc = (c.charCodeAt(0)&0x1f)<<6 | c.charCodeAt(1)&0x3f;
+ return String.fromCharCode(cc); }
+ );
+ str = str.replace(
+ /[\u00e0-\u00ef][\u0080-\u00bf][\u0080-\u00bf]/g, // 3-byte chars
+ function(c) {
+ var cc = (c.charCodeAt(0)&0x0f)<<12 | (c.charCodeAt(1)&0x3f<<6) | c.charCodeAt(2)&0x3f;
+ return String.fromCharCode(cc); }
+ );
+ return str;
+}
+
+
+function byteArrayToHexStr(b) { // convert byte array to hex string for displaying test vectors
+ var s = '';
+ for (var i=0; i<b.length; i++) s += b[i].toString(16) + ' ';
+ return s;
+}
+
+/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
+
+
+var plainText = "ROMEO: But, soft! what light through yonder window breaks?\n\
+It is the east, and Juliet is the sun.\n\
+Arise, fair sun, and kill the envious moon,\n\
+Who is already sick and pale with grief,\n\
+That thou her maid art far more fair than she:\n\
+Be not her maid, since she is envious;\n\
+Her vestal livery is but sick and green\n\
+And none but fools do wear it; cast it off.\n\
+It is my lady, O, it is my love!\n\
+O, that she knew she were!\n\
+She speaks yet she says nothing: what of that?\n\
+Her eye discourses; I will answer it.\n\
+I am too bold, 'tis not to me she speaks:\n\
+Two of the fairest stars in all the heaven,\n\
+Having some business, do entreat her eyes\n\
+To twinkle in their spheres till they return.\n\
+What if her eyes were there, they in her head?\n\
+The brightness of her cheek would shame those stars,\n\
+As daylight doth a lamp; her eyes in heaven\n\
+Would through the airy region stream so bright\n\
+That birds would sing and think it were not night.\n\
+See, how she leans her cheek upon her hand!\n\
+O, that I were a glove upon that hand,\n\
+That I might touch that cheek!\n\
+JULIET: Ay me!\n\
+ROMEO: She speaks:\n\
+O, speak again, bright angel! for thou art\n\
+As glorious to this night, being o'er my head\n\
+As is a winged messenger of heaven\n\
+Unto the white-upturned wondering eyes\n\
+Of mortals that fall back to gaze on him\n\
+When he bestrides the lazy-pacing clouds\n\
+And sails upon the bosom of the air.";
+
+var password = "O Romeo, Romeo! wherefore art thou Romeo?";
+var cipherText, decryptedText;
+
+window.onload = function(){ startTest("sunspider-crypto-aes", 'e80e78f2');
+
+test("AES Encrypt", function(){
+ cipherText = AESEncryptCtr(plainText, password, 256);
+});
+
+test("AES Decrypt", function(){
+ decryptedText = AESDecryptCtr(cipherText, password, 256);
+
+ if ( decryptedText !== plainText )
+ throw "Decryption failed.";
+});
+
+endTest(); };
+</script>
+</head>
+<body></body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/sunspider-crypto-md5.html b/testing/talos/talos/tests/dromaeo/tests/sunspider-crypto-md5.html
new file mode 100644
index 0000000000..18bcbeff56
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/sunspider-crypto-md5.html
@@ -0,0 +1,300 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script>
+/*
+ * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
+ * Digest Algorithm, as defined in RFC 1321.
+ * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
+ * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
+ * Distributed under the BSD License
+ * See http://pajhome.org.uk/crypt/md5 for more info.
+ */
+
+/*
+ * Configurable variables. You may need to tweak these to be compatible with
+ * the server-side, but the defaults work in most cases.
+ */
+var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */
+var b64pad = ""; /* base-64 pad character. "=" for strict RFC compliance */
+var chrsz = 8; /* bits per input character. 8 - ASCII; 16 - Unicode */
+
+/*
+ * These are the functions you'll usually want to call
+ * They take string arguments and return either hex or base-64 encoded strings
+ */
+function hex_md5(s){ return binl2hex(core_md5(str2binl(s), s.length * chrsz));}
+function b64_md5(s){ return binl2b64(core_md5(str2binl(s), s.length * chrsz));}
+function str_md5(s){ return binl2str(core_md5(str2binl(s), s.length * chrsz));}
+function hex_hmac_md5(key, data) { return binl2hex(core_hmac_md5(key, data)); }
+function b64_hmac_md5(key, data) { return binl2b64(core_hmac_md5(key, data)); }
+function str_hmac_md5(key, data) { return binl2str(core_hmac_md5(key, data)); }
+
+/*
+ * Perform a simple self-test to see if the VM is working
+ */
+function md5_vm_test()
+{
+ return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72";
+}
+
+/*
+ * Calculate the MD5 of an array of little-endian words, and a bit length
+ */
+function core_md5(x, len)
+{
+ /* append padding */
+ x[len >> 5] |= 0x80 << ((len) % 32);
+ x[(((len + 64) >>> 9) << 4) + 14] = len;
+
+ var a = 1732584193;
+ var b = -271733879;
+ var c = -1732584194;
+ var d = 271733878;
+
+ for(var i = 0; i < x.length; i += 16)
+ {
+ var olda = a;
+ var oldb = b;
+ var oldc = c;
+ var oldd = d;
+
+ a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
+ d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
+ c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
+ b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
+ a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
+ d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
+ c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
+ b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
+ a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
+ d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
+ c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
+ b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
+ a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
+ d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
+ c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
+ b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
+
+ a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
+ d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
+ c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
+ b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
+ a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
+ d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
+ c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
+ b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
+ a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
+ d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
+ c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
+ b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
+ a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
+ d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
+ c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
+ b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
+
+ a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
+ d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
+ c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
+ b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
+ a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
+ d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
+ c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
+ b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
+ a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
+ d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
+ c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
+ b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
+ a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
+ d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
+ c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
+ b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
+
+ a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
+ d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
+ c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
+ b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
+ a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
+ d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
+ c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
+ b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
+ a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
+ d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
+ c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
+ b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
+ a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
+ d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
+ c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
+ b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
+
+ a = safe_add(a, olda);
+ b = safe_add(b, oldb);
+ c = safe_add(c, oldc);
+ d = safe_add(d, oldd);
+ }
+ return Array(a, b, c, d);
+
+}
+
+/*
+ * These functions implement the four basic operations the algorithm uses.
+ */
+function md5_cmn(q, a, b, x, s, t)
+{
+ return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
+}
+function md5_ff(a, b, c, d, x, s, t)
+{
+ return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
+}
+function md5_gg(a, b, c, d, x, s, t)
+{
+ return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
+}
+function md5_hh(a, b, c, d, x, s, t)
+{
+ return md5_cmn(b ^ c ^ d, a, b, x, s, t);
+}
+function md5_ii(a, b, c, d, x, s, t)
+{
+ return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
+}
+
+/*
+ * Calculate the HMAC-MD5, of a key and some data
+ */
+function core_hmac_md5(key, data)
+{
+ var bkey = str2binl(key);
+ if(bkey.length > 16) bkey = core_md5(bkey, key.length * chrsz);
+
+ var ipad = Array(16), opad = Array(16);
+ for(var i = 0; i < 16; i++)
+ {
+ ipad[i] = bkey[i] ^ 0x36363636;
+ opad[i] = bkey[i] ^ 0x5C5C5C5C;
+ }
+
+ var hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * chrsz);
+ return core_md5(opad.concat(hash), 512 + 128);
+}
+
+/*
+ * Add integers, wrapping at 2^32. This uses 16-bit operations internally
+ * to work around bugs in some JS interpreters.
+ */
+function safe_add(x, y)
+{
+ var lsw = (x & 0xFFFF) + (y & 0xFFFF);
+ var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
+ return (msw << 16) | (lsw & 0xFFFF);
+}
+
+/*
+ * Bitwise rotate a 32-bit number to the left.
+ */
+function bit_rol(num, cnt)
+{
+ return (num << cnt) | (num >>> (32 - cnt));
+}
+
+/*
+ * Convert a string to an array of little-endian words
+ * If chrsz is ASCII, characters >255 have their hi-byte silently ignored.
+ */
+function str2binl(str)
+{
+ var bin = Array();
+ var mask = (1 << chrsz) - 1;
+ for(var i = 0; i < str.length * chrsz; i += chrsz)
+ bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (i%32);
+ return bin;
+}
+
+/*
+ * Convert an array of little-endian words to a string
+ */
+function binl2str(bin)
+{
+ var str = "";
+ var mask = (1 << chrsz) - 1;
+ for(var i = 0; i < bin.length * 32; i += chrsz)
+ str += String.fromCharCode((bin[i>>5] >>> (i % 32)) & mask);
+ return str;
+}
+
+/*
+ * Convert an array of little-endian words to a hex string.
+ */
+function binl2hex(binarray)
+{
+ var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
+ var str = "";
+ for(var i = 0; i < binarray.length * 4; i++)
+ {
+ str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) +
+ hex_tab.charAt((binarray[i>>2] >> ((i%4)*8 )) & 0xF);
+ }
+ return str;
+}
+
+/*
+ * Convert an array of little-endian words to a base-64 string
+ */
+function binl2b64(binarray)
+{
+ var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+ var str = "";
+ for(var i = 0; i < binarray.length * 4; i += 3)
+ {
+ var triplet = (((binarray[i >> 2] >> 8 * ( i %4)) & 0xFF) << 16)
+ | (((binarray[i+1 >> 2] >> 8 * ((i+1)%4)) & 0xFF) << 8 )
+ | ((binarray[i+2 >> 2] >> 8 * ((i+2)%4)) & 0xFF);
+ for(var j = 0; j < 4; j++)
+ {
+ if(i * 8 + j * 6 > binarray.length * 32) str += b64pad;
+ else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F);
+ }
+ }
+ return str;
+}
+
+var plainText = "Rebellious subjects, enemies to peace,\n\
+Profaners of this neighbour-stained steel,--\n\
+Will they not hear? What, ho! you men, you beasts,\n\
+That quench the fire of your pernicious rage\n\
+With purple fountains issuing from your veins,\n\
+On pain of torture, from those bloody hands\n\
+Throw your mistemper'd weapons to the ground,\n\
+And hear the sentence of your moved prince.\n\
+Three civil brawls, bred of an airy word,\n\
+By thee, old Capulet, and Montague,\n\
+Have thrice disturb'd the quiet of our streets,\n\
+And made Verona's ancient citizens\n\
+Cast by their grave beseeming ornaments,\n\
+To wield old partisans, in hands as old,\n\
+Canker'd with peace, to part your canker'd hate:\n\
+If ever you disturb our streets again,\n\
+Your lives shall pay the forfeit of the peace.\n\
+For this time, all the rest depart away:\n\
+You Capulet; shall go along with me:\n\
+And, Montague, come you this afternoon,\n\
+To know our further pleasure in this case,\n\
+To old Free-town, our common judgment-place.\n\
+Once more, on pain of death, all men depart."
+
+for (var i = 0; i <2; i++) {
+ plainText += plainText;
+}
+
+window.onload = function(){ startTest("sunspider-crypto-md5", 'bd4d08e1');
+
+test("MD5", function(){
+ var md5Output = hex_md5(plainText);
+});
+
+endTest(); };
+</script>
+</head>
+<body></body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/sunspider-crypto-sha1.html b/testing/talos/talos/tests/dromaeo/tests/sunspider-crypto-sha1.html
new file mode 100644
index 0000000000..12a966b90f
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/sunspider-crypto-sha1.html
@@ -0,0 +1,238 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script>
+/*
+ * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
+ * in FIPS PUB 180-1
+ * Version 2.1a Copyright Paul Johnston 2000 - 2002.
+ * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
+ * Distributed under the BSD License
+ * See http://pajhome.org.uk/crypt/md5 for details.
+ */
+
+/*
+ * Configurable variables. You may need to tweak these to be compatible with
+ * the server-side, but the defaults work in most cases.
+ */
+var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */
+var b64pad = ""; /* base-64 pad character. "=" for strict RFC compliance */
+var chrsz = 8; /* bits per input character. 8 - ASCII; 16 - Unicode */
+
+/*
+ * These are the functions you'll usually want to call
+ * They take string arguments and return either hex or base-64 encoded strings
+ */
+function hex_sha1(s){return binb2hex(core_sha1(str2binb(s),s.length * chrsz));}
+function b64_sha1(s){return binb2b64(core_sha1(str2binb(s),s.length * chrsz));}
+function str_sha1(s){return binb2str(core_sha1(str2binb(s),s.length * chrsz));}
+function hex_hmac_sha1(key, data){ return binb2hex(core_hmac_sha1(key, data));}
+function b64_hmac_sha1(key, data){ return binb2b64(core_hmac_sha1(key, data));}
+function str_hmac_sha1(key, data){ return binb2str(core_hmac_sha1(key, data));}
+
+/*
+ * Perform a simple self-test to see if the VM is working
+ */
+function sha1_vm_test()
+{
+ return hex_sha1("abc") == "a9993e364706816aba3e25717850c26c9cd0d89d";
+}
+
+/*
+ * Calculate the SHA-1 of an array of big-endian words, and a bit length
+ */
+function core_sha1(x, len)
+{
+ /* append padding */
+ x[len >> 5] |= 0x80 << (24 - len % 32);
+ x[((len + 64 >> 9) << 4) + 15] = len;
+
+ var w = Array(80);
+ var a = 1732584193;
+ var b = -271733879;
+ var c = -1732584194;
+ var d = 271733878;
+ var e = -1009589776;
+
+ for(var i = 0; i < x.length; i += 16)
+ {
+ var olda = a;
+ var oldb = b;
+ var oldc = c;
+ var oldd = d;
+ var olde = e;
+
+ for(var j = 0; j < 80; j++)
+ {
+ if(j < 16) w[j] = x[i + j];
+ else w[j] = rol(w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16], 1);
+ var t = safe_add(safe_add(rol(a, 5), sha1_ft(j, b, c, d)),
+ safe_add(safe_add(e, w[j]), sha1_kt(j)));
+ e = d;
+ d = c;
+ c = rol(b, 30);
+ b = a;
+ a = t;
+ }
+
+ a = safe_add(a, olda);
+ b = safe_add(b, oldb);
+ c = safe_add(c, oldc);
+ d = safe_add(d, oldd);
+ e = safe_add(e, olde);
+ }
+ return Array(a, b, c, d, e);
+
+}
+
+/*
+ * Perform the appropriate triplet combination function for the current
+ * iteration
+ */
+function sha1_ft(t, b, c, d)
+{
+ if(t < 20) return (b & c) | ((~b) & d);
+ if(t < 40) return b ^ c ^ d;
+ if(t < 60) return (b & c) | (b & d) | (c & d);
+ return b ^ c ^ d;
+}
+
+/*
+ * Determine the appropriate additive constant for the current iteration
+ */
+function sha1_kt(t)
+{
+ return (t < 20) ? 1518500249 : (t < 40) ? 1859775393 :
+ (t < 60) ? -1894007588 : -899497514;
+}
+
+/*
+ * Calculate the HMAC-SHA1 of a key and some data
+ */
+function core_hmac_sha1(key, data)
+{
+ var bkey = str2binb(key);
+ if(bkey.length > 16) bkey = core_sha1(bkey, key.length * chrsz);
+
+ var ipad = Array(16), opad = Array(16);
+ for(var i = 0; i < 16; i++)
+ {
+ ipad[i] = bkey[i] ^ 0x36363636;
+ opad[i] = bkey[i] ^ 0x5C5C5C5C;
+ }
+
+ var hash = core_sha1(ipad.concat(str2binb(data)), 512 + data.length * chrsz);
+ return core_sha1(opad.concat(hash), 512 + 160);
+}
+
+/*
+ * Add integers, wrapping at 2^32. This uses 16-bit operations internally
+ * to work around bugs in some JS interpreters.
+ */
+function safe_add(x, y)
+{
+ var lsw = (x & 0xFFFF) + (y & 0xFFFF);
+ var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
+ return (msw << 16) | (lsw & 0xFFFF);
+}
+
+/*
+ * Bitwise rotate a 32-bit number to the left.
+ */
+function rol(num, cnt)
+{
+ return (num << cnt) | (num >>> (32 - cnt));
+}
+
+/*
+ * Convert an 8-bit or 16-bit string to an array of big-endian words
+ * In 8-bit function, characters >255 have their hi-byte silently ignored.
+ */
+function str2binb(str)
+{
+ var bin = Array();
+ var mask = (1 << chrsz) - 1;
+ for(var i = 0; i < str.length * chrsz; i += chrsz)
+ bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (32 - chrsz - i%32);
+ return bin;
+}
+
+/*
+ * Convert an array of big-endian words to a string
+ */
+function binb2str(bin)
+{
+ var str = "";
+ var mask = (1 << chrsz) - 1;
+ for(var i = 0; i < bin.length * 32; i += chrsz)
+ str += String.fromCharCode((bin[i>>5] >>> (32 - chrsz - i%32)) & mask);
+ return str;
+}
+
+/*
+ * Convert an array of big-endian words to a hex string.
+ */
+function binb2hex(binarray)
+{
+ var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
+ var str = "";
+ for(var i = 0; i < binarray.length * 4; i++)
+ {
+ str += hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8+4)) & 0xF) +
+ hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8 )) & 0xF);
+ }
+ return str;
+}
+
+/*
+ * Convert an array of big-endian words to a base-64 string
+ */
+function binb2b64(binarray)
+{
+ var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+ var str = "";
+ for(var i = 0; i < binarray.length * 4; i += 3)
+ {
+ var triplet = (((binarray[i >> 2] >> 8 * (3 - i %4)) & 0xFF) << 16)
+ | (((binarray[i+1 >> 2] >> 8 * (3 - (i+1)%4)) & 0xFF) << 8 )
+ | ((binarray[i+2 >> 2] >> 8 * (3 - (i+2)%4)) & 0xFF);
+ for(var j = 0; j < 4; j++)
+ {
+ if(i * 8 + j * 6 > binarray.length * 32) str += b64pad;
+ else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F);
+ }
+ }
+ return str;
+}
+
+
+var plainText = "Two households, both alike in dignity,\n\
+In fair Verona, where we lay our scene,\n\
+From ancient grudge break to new mutiny,\n\
+Where civil blood makes civil hands unclean.\n\
+From forth the fatal loins of these two foes\n\
+A pair of star-cross'd lovers take their life;\n\
+Whole misadventured piteous overthrows\n\
+Do with their death bury their parents' strife.\n\
+The fearful passage of their death-mark'd love,\n\
+And the continuance of their parents' rage,\n\
+Which, but their children's end, nought could remove,\n\
+Is now the two hours' traffic of our stage;\n\
+The which if you with patient ears attend,\n\
+What here shall miss, our toil shall strive to mend.";
+
+for (var i = 0; i <2; i++) {
+ plainText += plainText;
+}
+
+window.onload = function(){ startTest("sunspider-crypto-sha1", 'b1fc168a');
+
+test("SHA1 Hashing", function(){
+ var sha1Output = hex_sha1(plainText);
+});
+
+endTest(); };
+</script>
+</head>
+<body></body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/sunspider-date-format-tofte.html b/testing/talos/talos/tests/dromaeo/tests/sunspider-date-format-tofte.html
new file mode 100644
index 0000000000..acda2c0b42
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/sunspider-date-format-tofte.html
@@ -0,0 +1,312 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script>
+function arrayExists(array, x) {
+ for (var i = 0; i < array.length; i++) {
+ if (array[i] == x) return true;
+ }
+ return false;
+}
+
+Date.prototype.formatDate = function (input,time) {
+ // formatDate :
+ // a PHP date like function, for formatting date strings
+ // See: http://www.php.net/date
+ //
+ // input : format string
+ // time : epoch time (seconds, and optional)
+ //
+ // if time is not passed, formatting is based on
+ // the current "this" date object's set time.
+ //
+ // supported:
+ // a, A, B, d, D, F, g, G, h, H, i, j, l (lowercase L), L,
+ // m, M, n, O, r, s, S, t, U, w, W, y, Y, z
+ //
+ // unsupported:
+ // I (capital i), T, Z
+
+ var switches = ["a", "A", "B", "d", "D", "F", "g", "G", "h", "H",
+ "i", "j", "l", "L", "m", "M", "n", "O", "r", "s",
+ "S", "t", "U", "w", "W", "y", "Y", "z"];
+ var daysLong = ["Sunday", "Monday", "Tuesday", "Wednesday",
+ "Thursday", "Friday", "Saturday"];
+ var daysShort = ["Sun", "Mon", "Tue", "Wed",
+ "Thu", "Fri", "Sat"];
+ var monthsShort = ["Jan", "Feb", "Mar", "Apr",
+ "May", "Jun", "Jul", "Aug", "Sep",
+ "Oct", "Nov", "Dec"];
+ var monthsLong = ["January", "February", "March", "April",
+ "May", "June", "July", "August", "September",
+ "October", "November", "December"];
+ var daysSuffix = ["st", "nd", "rd", "th", "th", "th", "th", // 1st - 7th
+ "th", "th", "th", "th", "th", "th", "th", // 8th - 14th
+ "th", "th", "th", "th", "th", "th", "st", // 15th - 21st
+ "nd", "rd", "th", "th", "th", "th", "th", // 22nd - 28th
+ "th", "th", "st"]; // 29th - 31st
+
+ function a() {
+ // Lowercase Ante meridiem and Post meridiem
+ return self.getHours() > 11? "pm" : "am";
+ }
+ function A() {
+ // Uppercase Ante meridiem and Post meridiem
+ return self.getHours() > 11? "PM" : "AM";
+ }
+
+ function B(){
+ // Swatch internet time. code simply grabbed from ppk,
+ // since I was feeling lazy:
+ // http://www.xs4all.nl/~ppk/js/beat.html
+ var off = (self.getTimezoneOffset() + 60)*60;
+ var theSeconds = (self.getHours() * 3600) +
+ (self.getMinutes() * 60) +
+ self.getSeconds() + off;
+ var beat = Math.floor(theSeconds/86.4);
+ if (beat > 1000) beat -= 1000;
+ if (beat < 0) beat += 1000;
+ if ((""+beat).length == 1) beat = "00"+beat;
+ if ((""+beat).length == 2) beat = "0"+beat;
+ return beat;
+ }
+
+ function d() {
+ // Day of the month, 2 digits with leading zeros
+ return new String(self.getDate()).length == 1?
+ "0"+self.getDate() : self.getDate();
+ }
+ function D() {
+ // A textual representation of a day, three letters
+ return daysShort[self.getDay()];
+ }
+ function F() {
+ // A full textual representation of a month
+ return monthsLong[self.getMonth()];
+ }
+ function g() {
+ // 12-hour format of an hour without leading zeros
+ return self.getHours() > 12? self.getHours()-12 : self.getHours();
+ }
+ function G() {
+ // 24-hour format of an hour without leading zeros
+ return self.getHours();
+ }
+ function h() {
+ // 12-hour format of an hour with leading zeros
+ if (self.getHours() > 12) {
+ var s = new String(self.getHours()-12);
+ return s.length == 1?
+ "0"+ (self.getHours()-12) : self.getHours()-12;
+ } else {
+ var s = new String(self.getHours());
+ return s.length == 1?
+ "0"+self.getHours() : self.getHours();
+ }
+ }
+ function H() {
+ // 24-hour format of an hour with leading zeros
+ return new String(self.getHours()).length == 1?
+ "0"+self.getHours() : self.getHours();
+ }
+ function i() {
+ // Minutes with leading zeros
+ return new String(self.getMinutes()).length == 1?
+ "0"+self.getMinutes() : self.getMinutes();
+ }
+ function j() {
+ // Day of the month without leading zeros
+ return self.getDate();
+ }
+ function l() {
+ // A full textual representation of the day of the week
+ return daysLong[self.getDay()];
+ }
+ function L() {
+ // leap year or not. 1 if leap year, 0 if not.
+ // the logic should match iso's 8601 standard.
+ var y_ = Y();
+ if (
+ (y_ % 4 == 0 && y_ % 100 != 0) ||
+ (y_ % 4 == 0 && y_ % 100 == 0 && y_ % 400 == 0)
+ ) {
+ return 1;
+ } else {
+ return 0;
+ }
+ }
+ function m() {
+ // Numeric representation of a month, with leading zeros
+ return self.getMonth() < 9?
+ "0"+(self.getMonth()+1) :
+ self.getMonth()+1;
+ }
+ function M() {
+ // A short textual representation of a month, three letters
+ return monthsShort[self.getMonth()];
+ }
+ function n() {
+ // Numeric representation of a month, without leading zeros
+ return self.getMonth()+1;
+ }
+ function O() {
+ // Difference to Greenwich time (GMT) in hours
+ var os = Math.abs(self.getTimezoneOffset());
+ var h = ""+Math.floor(os/60);
+ var m = ""+(os%60);
+ h.length == 1? h = "0"+h:1;
+ m.length == 1? m = "0"+m:1;
+ return self.getTimezoneOffset() < 0 ? "+"+h+m : "-"+h+m;
+ }
+ function r() {
+ // RFC 822 formatted date
+ var r; // result
+ // Thu , 21 Dec 2000
+ r = D() + ", " + j() + " " + M() + " " + Y() +
+ // 16 : 01 : 07 +0200
+ " " + H() + ":" + i() + ":" + s() + " " + O();
+ return r;
+ }
+ function S() {
+ // English ordinal suffix for the day of the month, 2 characters
+ return daysSuffix[self.getDate()-1];
+ }
+ function s() {
+ // Seconds, with leading zeros
+ return new String(self.getSeconds()).length == 1?
+ "0"+self.getSeconds() : self.getSeconds();
+ }
+ function t() {
+
+ // thanks to Matt Bannon for some much needed code-fixes here!
+ var daysinmonths = [null,31,28,31,30,31,30,31,31,30,31,30,31];
+ if (L()==1 && n()==2) return 29; // leap day
+ return daysinmonths[n()];
+ }
+ function U() {
+ // Seconds since the Unix Epoch (January 1 1970 00:00:00 GMT)
+ return Math.round(self.getTime()/1000);
+ }
+ function W() {
+ // Weeknumber, as per ISO specification:
+ // http://www.cl.cam.ac.uk/~mgk25/iso-time.html
+
+ // if the day is three days before newyears eve,
+ // there's a chance it's "week 1" of next year.
+ // here we check for that.
+ var beforeNY = 364+L() - z();
+ var afterNY = z();
+ var weekday = w()!=0?w()-1:6; // makes sunday (0), into 6.
+ if (beforeNY <= 2 && weekday <= 2-beforeNY) {
+ return 1;
+ }
+ // similarly, if the day is within threedays of newyears
+ // there's a chance it belongs in the old year.
+ var ny = new Date("January 1 " + Y() + " 00:00:00");
+ var nyDay = ny.getDay()!=0?ny.getDay()-1:6;
+ if (
+ (afterNY <= 2) &&
+ (nyDay >=4) &&
+ (afterNY >= (6-nyDay))
+ ) {
+ // Since I'm not sure we can just always return 53,
+ // i call the function here again, using the last day
+ // of the previous year, as the date, and then just
+ // return that week.
+ var prevNY = new Date("December 31 " + (Y()-1) + " 00:00:00");
+ return prevNY.formatDate("W");
+ }
+
+ // week 1, is the week that has the first thursday in it.
+ // note that this value is not zero index.
+ if (nyDay <= 3) {
+ // first day of the year fell on a thursday, or earlier.
+ return 1 + Math.floor( ( z() + nyDay ) / 7 );
+ } else {
+ // first day of the year fell on a friday, or later.
+ return 1 + Math.floor( ( z() - ( 7 - nyDay ) ) / 7 );
+ }
+ }
+ function w() {
+ // Numeric representation of the day of the week
+ return self.getDay();
+ }
+
+ function Y() {
+ // A full numeric representation of a year, 4 digits
+
+ // we first check, if getFullYear is supported. if it
+ // is, we just use that. ppks code is nice, but wont
+ // work with dates outside 1900-2038, or something like that
+ if (self.getFullYear) {
+ var newDate = new Date("January 1 2001 00:00:00 +0000");
+ var x = newDate .getFullYear();
+ if (x == 2001) {
+ // i trust the method now
+ return self.getFullYear();
+ }
+ }
+ // else, do this:
+ // codes thanks to ppk:
+ // http://www.xs4all.nl/~ppk/js/introdate.html
+ var x = self.getYear();
+ var y = x % 100;
+ y += (y < 38) ? 2000 : 1900;
+ return y;
+ }
+ function y() {
+ // A two-digit representation of a year
+ var y = Y()+"";
+ return y.substring(y.length-2,y.length);
+ }
+ function z() {
+ // The day of the year, zero indexed! 0 through 366
+ var t = new Date("January 1 " + Y() + " 00:00:00");
+ var diff = self.getTime() - t.getTime();
+ return Math.floor(diff/1000/60/60/24);
+ }
+
+ var self = this;
+ if (time) {
+ // save time
+ var prevTime = self.getTime();
+ self.setTime(time);
+ }
+
+ var ia = input.split("");
+ var ij = 0;
+ while (ia[ij]) {
+ if (ia[ij] == "\\") {
+ // this is our way of allowing users to escape stuff
+ ia.splice(ij,1);
+ } else {
+ if (arrayExists(switches,ia[ij])) {
+ ia[ij] = eval(ia[ij] + "()");
+ }
+ }
+ ij++;
+ }
+ // reset time, back to what it was
+ if (prevTime) {
+ self.setTime(prevTime);
+ }
+ return ia.join("");
+}
+
+var date = new Date("1/1/2007 1:11:11");
+
+window.onload = function(){ startTest("sunspider-date-format-tofte", '393fb742');
+
+test("Format Date", function(){
+ for (var i = 0; i < 50; ++i) {
+ var shortFormat = date.formatDate("Y-m-d");
+ var longFormat = date.formatDate("l, F d, Y g:i:s A");
+ date.setTime(date.getTime() + 84266956);
+ }
+});
+
+endTest(); };
+</script>
+</head>
+<body></body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/sunspider-date-format-xparb.html b/testing/talos/talos/tests/dromaeo/tests/sunspider-date-format-xparb.html
new file mode 100644
index 0000000000..036ec21d98
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/sunspider-date-format-xparb.html
@@ -0,0 +1,431 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script>
+/*
+ * Copyright (C) 2004 Baron Schwartz <baron at sequent dot org>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published by the
+ * Free Software Foundation, version 2.1.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ * details.
+ */
+
+Date.parseFunctions = {count:0};
+Date.parseRegexes = [];
+Date.formatFunctions = {count:0};
+
+Date.prototype.dateFormat = function(format) {
+ if (Date.formatFunctions[format] == null) {
+ Date.createNewFormat(format);
+ }
+ var func = Date.formatFunctions[format];
+ return this[func]();
+}
+
+Date.createNewFormat = function(format) {
+ var funcName = "format" + Date.formatFunctions.count++;
+ Date.formatFunctions[format] = funcName;
+ var code = "Date.prototype." + funcName + " = function(){return ";
+ var special = false;
+ var ch = '';
+ for (var i = 0; i < format.length; ++i) {
+ ch = format.charAt(i);
+ if (!special && ch == "\\") {
+ special = true;
+ }
+ else if (special) {
+ special = false;
+ code += "'" + String.escape(ch) + "' + ";
+ }
+ else {
+ code += Date.getFormatCode(ch);
+ }
+ }
+ eval(code.substring(0, code.length - 3) + ";}");
+}
+
+Date.getFormatCode = function(character) {
+ switch (character) {
+ case "d":
+ return "String.leftPad(this.getDate(), 2, '0') + ";
+ case "D":
+ return "Date.dayNames[this.getDay()].substring(0, 3) + ";
+ case "j":
+ return "this.getDate() + ";
+ case "l":
+ return "Date.dayNames[this.getDay()] + ";
+ case "S":
+ return "this.getSuffix() + ";
+ case "w":
+ return "this.getDay() + ";
+ case "z":
+ return "this.getDayOfYear() + ";
+ case "W":
+ return "this.getWeekOfYear() + ";
+ case "F":
+ return "Date.monthNames[this.getMonth()] + ";
+ case "m":
+ return "String.leftPad(this.getMonth() + 1, 2, '0') + ";
+ case "M":
+ return "Date.monthNames[this.getMonth()].substring(0, 3) + ";
+ case "n":
+ return "(this.getMonth() + 1) + ";
+ case "t":
+ return "this.getDaysInMonth() + ";
+ case "L":
+ return "(this.isLeapYear() ? 1 : 0) + ";
+ case "Y":
+ return "this.getFullYear() + ";
+ case "y":
+ return "('' + this.getFullYear()).substring(2, 4) + ";
+ case "a":
+ return "(this.getHours() < 12 ? 'am' : 'pm') + ";
+ case "A":
+ return "(this.getHours() < 12 ? 'AM' : 'PM') + ";
+ case "g":
+ return "((this.getHours() %12) ? this.getHours() % 12 : 12) + ";
+ case "G":
+ return "this.getHours() + ";
+ case "h":
+ return "String.leftPad((this.getHours() %12) ? this.getHours() % 12 : 12, 2, '0') + ";
+ case "H":
+ return "String.leftPad(this.getHours(), 2, '0') + ";
+ case "i":
+ return "String.leftPad(this.getMinutes(), 2, '0') + ";
+ case "s":
+ return "String.leftPad(this.getSeconds(), 2, '0') + ";
+ case "O":
+ return "this.getGMTOffset() + ";
+ case "T":
+ return "this.getTimezone() + ";
+ case "Z":
+ return "(this.getTimezoneOffset() * -60) + ";
+ default:
+ return "'" + String.escape(character) + "' + ";
+ }
+}
+
+Date.parseDate = function(input, format) {
+ if (Date.parseFunctions[format] == null) {
+ Date.createParser(format);
+ }
+ var func = Date.parseFunctions[format];
+ return Date[func](input);
+}
+
+Date.createParser = function(format) {
+ var funcName = "parse" + Date.parseFunctions.count++;
+ var regexNum = Date.parseRegexes.length;
+ var currentGroup = 1;
+ Date.parseFunctions[format] = funcName;
+
+ var code = "Date." + funcName + " = function(input){\n"
+ + "var y = -1, m = -1, d = -1, h = -1, i = -1, s = -1;\n"
+ + "var d = new Date();\n"
+ + "y = d.getFullYear();\n"
+ + "m = d.getMonth();\n"
+ + "d = d.getDate();\n"
+ + "var results = input.match(Date.parseRegexes[" + regexNum + "]);\n"
+ + "if (results && results.length > 0) {"
+ var regex = "";
+
+ var special = false;
+ var ch = '';
+ for (var i = 0; i < format.length; ++i) {
+ ch = format.charAt(i);
+ if (!special && ch == "\\") {
+ special = true;
+ }
+ else if (special) {
+ special = false;
+ regex += String.escape(ch);
+ }
+ else {
+ obj = Date.formatCodeToRegex(ch, currentGroup);
+ currentGroup += obj.g;
+ regex += obj.s;
+ if (obj.g && obj.c) {
+ code += obj.c;
+ }
+ }
+ }
+
+ code += "if (y > 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0)\n"
+ + "{return new Date(y, m, d, h, i, s);}\n"
+ + "else if (y > 0 && m >= 0 && d > 0 && h >= 0 && i >= 0)\n"
+ + "{return new Date(y, m, d, h, i);}\n"
+ + "else if (y > 0 && m >= 0 && d > 0 && h >= 0)\n"
+ + "{return new Date(y, m, d, h);}\n"
+ + "else if (y > 0 && m >= 0 && d > 0)\n"
+ + "{return new Date(y, m, d);}\n"
+ + "else if (y > 0 && m >= 0)\n"
+ + "{return new Date(y, m);}\n"
+ + "else if (y > 0)\n"
+ + "{return new Date(y);}\n"
+ + "}return null;}";
+
+ Date.parseRegexes[regexNum] = new RegExp("^" + regex + "$");
+ eval(code);
+}
+
+Date.formatCodeToRegex = function(character, currentGroup) {
+ switch (character) {
+ case "D":
+ return {g:0,
+ c:null,
+ s:"(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)"};
+ case "j":
+ case "d":
+ return {g:1,
+ c:"d = parseInt(results[" + currentGroup + "], 10);\n",
+ s:"(\\d{1,2})"};
+ case "l":
+ return {g:0,
+ c:null,
+ s:"(?:" + Date.dayNames.join("|") + ")"};
+ case "S":
+ return {g:0,
+ c:null,
+ s:"(?:st|nd|rd|th)"};
+ case "w":
+ return {g:0,
+ c:null,
+ s:"\\d"};
+ case "z":
+ return {g:0,
+ c:null,
+ s:"(?:\\d{1,3})"};
+ case "W":
+ return {g:0,
+ c:null,
+ s:"(?:\\d{2})"};
+ case "F":
+ return {g:1,
+ c:"m = parseInt(Date.monthNumbers[results[" + currentGroup + "].substring(0, 3)], 10);\n",
+ s:"(" + Date.monthNames.join("|") + ")"};
+ case "M":
+ return {g:1,
+ c:"m = parseInt(Date.monthNumbers[results[" + currentGroup + "]], 10);\n",
+ s:"(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)"};
+ case "n":
+ case "m":
+ return {g:1,
+ c:"m = parseInt(results[" + currentGroup + "], 10) - 1;\n",
+ s:"(\\d{1,2})"};
+ case "t":
+ return {g:0,
+ c:null,
+ s:"\\d{1,2}"};
+ case "L":
+ return {g:0,
+ c:null,
+ s:"(?:1|0)"};
+ case "Y":
+ return {g:1,
+ c:"y = parseInt(results[" + currentGroup + "], 10);\n",
+ s:"(\\d{4})"};
+ case "y":
+ return {g:1,
+ c:"var ty = parseInt(results[" + currentGroup + "], 10);\n"
+ + "y = ty > Date.y2kYear ? 1900 + ty : 2000 + ty;\n",
+ s:"(\\d{1,2})"};
+ case "a":
+ return {g:1,
+ c:"if (results[" + currentGroup + "] == 'am') {\n"
+ + "if (h == 12) { h = 0; }\n"
+ + "} else { if (h < 12) { h += 12; }}",
+ s:"(am|pm)"};
+ case "A":
+ return {g:1,
+ c:"if (results[" + currentGroup + "] == 'AM') {\n"
+ + "if (h == 12) { h = 0; }\n"
+ + "} else { if (h < 12) { h += 12; }}",
+ s:"(AM|PM)"};
+ case "g":
+ case "G":
+ case "h":
+ case "H":
+ return {g:1,
+ c:"h = parseInt(results[" + currentGroup + "], 10);\n",
+ s:"(\\d{1,2})"};
+ case "i":
+ return {g:1,
+ c:"i = parseInt(results[" + currentGroup + "], 10);\n",
+ s:"(\\d{2})"};
+ case "s":
+ return {g:1,
+ c:"s = parseInt(results[" + currentGroup + "], 10);\n",
+ s:"(\\d{2})"};
+ case "O":
+ return {g:0,
+ c:null,
+ s:"[+-]\\d{4}"};
+ case "T":
+ return {g:0,
+ c:null,
+ s:"[A-Z]{3}"};
+ case "Z":
+ return {g:0,
+ c:null,
+ s:"[+-]\\d{1,5}"};
+ default:
+ return {g:0,
+ c:null,
+ s:String.escape(character)};
+ }
+}
+
+Date.prototype.getTimezone = function() {
+ return this.toString().replace(
+ /^.*? ([A-Z]{3}) [0-9]{4}.*$/, "$1").replace(
+ /^.*?\(([A-Z])[a-z]+ ([A-Z])[a-z]+ ([A-Z])[a-z]+\)$/, "$1$2$3");
+}
+
+Date.prototype.getGMTOffset = function() {
+ return (this.getTimezoneOffset() > 0 ? "-" : "+")
+ + String.leftPad(Math.floor(this.getTimezoneOffset() / 60), 2, "0")
+ + String.leftPad(this.getTimezoneOffset() % 60, 2, "0");
+}
+
+Date.prototype.getDayOfYear = function() {
+ var num = 0;
+ Date.daysInMonth[1] = this.isLeapYear() ? 29 : 28;
+ for (var i = 0; i < this.getMonth(); ++i) {
+ num += Date.daysInMonth[i];
+ }
+ return num + this.getDate() - 1;
+}
+
+Date.prototype.getWeekOfYear = function() {
+ // Skip to Thursday of this week
+ var now = this.getDayOfYear() + (4 - this.getDay());
+ // Find the first Thursday of the year
+ var jan1 = new Date(this.getFullYear(), 0, 1);
+ var then = (7 - jan1.getDay() + 4);
+ document.write(then);
+ return String.leftPad(((now - then) / 7) + 1, 2, "0");
+}
+
+Date.prototype.isLeapYear = function() {
+ var year = this.getFullYear();
+ return ((year & 3) == 0 && (year % 100 || (year % 400 == 0 && year)));
+}
+
+Date.prototype.getFirstDayOfMonth = function() {
+ var day = (this.getDay() - (this.getDate() - 1)) % 7;
+ return (day < 0) ? (day + 7) : day;
+}
+
+Date.prototype.getLastDayOfMonth = function() {
+ var day = (this.getDay() + (Date.daysInMonth[this.getMonth()] - this.getDate())) % 7;
+ return (day < 0) ? (day + 7) : day;
+}
+
+Date.prototype.getDaysInMonth = function() {
+ Date.daysInMonth[1] = this.isLeapYear() ? 29 : 28;
+ return Date.daysInMonth[this.getMonth()];
+}
+
+Date.prototype.getSuffix = function() {
+ switch (this.getDate()) {
+ case 1:
+ case 21:
+ case 31:
+ return "st";
+ case 2:
+ case 22:
+ return "nd";
+ case 3:
+ case 23:
+ return "rd";
+ default:
+ return "th";
+ }
+}
+
+String.escape = function(string) {
+ return string.replace(/('|\\)/g, "\\$1");
+}
+
+String.leftPad = function (val, size, ch) {
+ var result = new String(val);
+ if (ch == null) {
+ ch = " ";
+ }
+ while (result.length < size) {
+ result = ch + result;
+ }
+ return result;
+}
+
+Date.daysInMonth = [31,28,31,30,31,30,31,31,30,31,30,31];
+Date.monthNames =
+ ["January",
+ "February",
+ "March",
+ "April",
+ "May",
+ "June",
+ "July",
+ "August",
+ "September",
+ "October",
+ "November",
+ "December"];
+Date.dayNames =
+ ["Sunday",
+ "Monday",
+ "Tuesday",
+ "Wednesday",
+ "Thursday",
+ "Friday",
+ "Saturday"];
+Date.y2kYear = 50;
+Date.monthNumbers = {
+ Jan:0,
+ Feb:1,
+ Mar:2,
+ Apr:3,
+ May:4,
+ Jun:5,
+ Jul:6,
+ Aug:7,
+ Sep:8,
+ Oct:9,
+ Nov:10,
+ Dec:11};
+Date.patterns = {
+ ISO8601LongPattern:"Y-m-d H:i:s",
+ ISO8601ShortPattern:"Y-m-d",
+ ShortDatePattern: "n/j/Y",
+ LongDatePattern: "l, F d, Y",
+ FullDateTimePattern: "l, F d, Y g:i:s A",
+ MonthDayPattern: "F d",
+ ShortTimePattern: "g:i A",
+ LongTimePattern: "g:i:s A",
+ SortableDateTimePattern: "Y-m-d\\TH:i:s",
+ UniversalSortableDateTimePattern: "Y-m-d H:i:sO",
+ YearMonthPattern: "F, Y"};
+
+var date = new Date("1/1/2007 1:11:11");
+
+window.onload = function(){ startTest("sunspider-date-format-xparb", 'e2a44595');
+
+test("Date Format (2)", function(){
+ for (i = 0; i < 400; ++i) {
+ var shortFormat = date.dateFormat("Y-m-d");
+ var longFormat = date.dateFormat("l, F d, Y g:i:s A");
+ date.setTime(date.getTime() + 84266956);
+ }
+});
+
+endTest(); };
+</script>
+</head>
+<body></body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/sunspider-math-cordic.html b/testing/talos/talos/tests/dromaeo/tests/sunspider-math-cordic.html
new file mode 100644
index 0000000000..c71964efe6
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/sunspider-math-cordic.html
@@ -0,0 +1,103 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script>
+/*
+ * Copyright (C) Rich Moore. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY 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 APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS 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.
+ */
+
+/////. Start CORDIC
+
+var AG_CONST = 0.6072529350;
+
+function FIXED(X)
+{
+ return X * 65536.0;
+}
+
+function FLOAT(X)
+{
+ return X / 65536.0;
+}
+
+function DEG2RAD(X)
+{
+ return 0.017453 * (X);
+}
+
+var Angles = [
+ FIXED(45.0), FIXED(26.565), FIXED(14.0362), FIXED(7.12502),
+ FIXED(3.57633), FIXED(1.78991), FIXED(0.895174), FIXED(0.447614),
+ FIXED(0.223811), FIXED(0.111906), FIXED(0.055953),
+ FIXED(0.027977)
+ ];
+
+
+function cordicsincos() {
+ var X;
+ var Y;
+ var TargetAngle;
+ var CurrAngle;
+ var Step;
+
+ X = FIXED(AG_CONST); /* AG_CONST * cos(0) */
+ Y = 0; /* AG_CONST * sin(0) */
+
+ TargetAngle = FIXED(28.027);
+ CurrAngle = 0;
+ for (Step = 0; Step < 12; Step++) {
+ var NewX;
+ if (TargetAngle > CurrAngle) {
+ NewX = X - (Y >> Step);
+ Y = (X >> Step) + Y;
+ X = NewX;
+ CurrAngle += Angles[Step];
+ } else {
+ NewX = X + (Y >> Step);
+ Y = -(X >> Step) + Y;
+ X = NewX;
+ CurrAngle -= Angles[Step];
+ }
+ }
+}
+
+///// End CORDIC
+
+function cordic( runs ) {
+ for ( var i = 0 ; i < runs ; i++ ) {
+ cordicsincos();
+ }
+}
+
+window.onload = function(){ startTest("sunspider-math-cordic", '211c9ee6');
+
+test("Cordic", function(){
+ cordic(2500);
+});
+
+endTest(); };
+</script>
+</head>
+<body></body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/sunspider-math-partial-sums.html b/testing/talos/talos/tests/dromaeo/tests/sunspider-math-partial-sums.html
new file mode 100644
index 0000000000..582265cb0d
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/sunspider-math-partial-sums.html
@@ -0,0 +1,44 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script>
+// The Computer Language Shootout
+// http://shootout.alioth.debian.org/
+// contributed by Isaac Gouy
+
+function partial(n){
+ var a1 = a2 = a3 = a4 = a5 = a6 = a7 = a8 = a9 = 0.0;
+ var twothirds = 2.0/3.0;
+ var alt = -1.0;
+ var k2 = k3 = sk = ck = 0.0;
+
+ for (var k = 1; k <= n; k++){
+ k2 = k*k;
+ k3 = k2*k;
+ sk = Math.sin(k);
+ ck = Math.cos(k);
+ alt = -alt;
+
+ a1 += Math.pow(twothirds,k-1);
+ a2 += Math.pow(k,-0.5);
+ a3 += 1.0/(k*(k+1.0));
+ a4 += 1.0/(k3 * sk*sk);
+ a5 += 1.0/(k3 * ck*ck);
+ a6 += 1.0/k;
+ a7 += 1.0/k2;
+ a8 += alt/k;
+ a9 += alt/(2*k -1);
+ }
+}
+
+window.onload = function(){ startTest("sunspider-math-partial-sums", 'a31c1c44');
+
+test( "Partial Sums", function(){
+ partial(2048);
+});
+
+endTest(); };
+</script>
+</head>
+<body></body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/sunspider-math-spectral-norm.html b/testing/talos/talos/tests/dromaeo/tests/sunspider-math-spectral-norm.html
new file mode 100644
index 0000000000..f44a906d47
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/sunspider-math-spectral-norm.html
@@ -0,0 +1,64 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script>
+// The Great Computer Language Shootout
+// http://shootout.alioth.debian.org/
+//
+// contributed by Ian Osgood
+
+function A(i,j) {
+ return 1/((i+j)*(i+j+1)/2+i+1);
+}
+
+function Au(u,v) {
+ for (var i=0; i<u.length; ++i) {
+ var t = 0;
+ for (var j=0; j<u.length; ++j)
+ t += A(i,j) * u[j];
+ v[i] = t;
+ }
+}
+
+function Atu(u,v) {
+ for (var i=0; i<u.length; ++i) {
+ var t = 0;
+ for (var j=0; j<u.length; ++j)
+ t += A(j,i) * u[j];
+ v[i] = t;
+ }
+}
+
+function AtAu(u,v,w) {
+ Au(u,w);
+ Atu(w,v);
+}
+
+function spectralnorm(n) {
+ var i, u=[], v=[], w=[], vv=0, vBv=0;
+ for (i=0; i<n; ++i) {
+ u[i] = 1; v[i] = w[i] = 0;
+ }
+ for (i=0; i<10; ++i) {
+ AtAu(u,v,w);
+ AtAu(v,u,w);
+ }
+ for (i=0; i<n; ++i) {
+ vBv += u[i]*v[i];
+ vv += v[i]*v[i];
+ }
+ return Math.sqrt(vBv/vv);
+}
+
+window.onload = function(){ startTest("sunspider-math-spectral-norm", 'e740809d');
+
+test( "Spectral Norm", function(){
+ for (var i = 12; i <= 24; i *= 2)
+ spectralnorm(i);
+});
+
+endTest(); };
+</script>
+</head>
+<body></body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/sunspider-regexp-dna.html b/testing/talos/talos/tests/dromaeo/tests/sunspider-regexp-dna.html
new file mode 100644
index 0000000000..036865936c
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/sunspider-regexp-dna.html
@@ -0,0 +1,1740 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script>
+// The Computer Language Shootout
+// http://shootout.alioth.debian.org/
+//
+// contributed by Jesse Millikan
+// Base on the Ruby version by jose fco. gonzalez
+
+var l;
+var dnaInput = ">ONE Homo sapiens alu\n\
+GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA\n\
+TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT\n\
+AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG\n\
+GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG\n\
+CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT\n\
+GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA\n\
+GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA\n\
+TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG\n\
+AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA\n\
+GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT\n\
+AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC\n\
+AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG\n\
+GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC\n\
+CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG\n\
+AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT\n\
+TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA\n\
+TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT\n\
+GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG\n\
+TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT\n\
+CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG\n\
+CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG\n\
+TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA\n\
+CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG\n\
+AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG\n\
+GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC\n\
+TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA\n\
+TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA\n\
+GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT\n\
+GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC\n\
+ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT\n\
+TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC\n\
+CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG\n\
+CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG\n\
+GGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCC\n\
+CAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCT\n\
+GGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGC\n\
+GCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGA\n\
+GGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGA\n\
+GACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGA\n\
+GGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTG\n\
+AAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT\n\
+CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCA\n\
+GTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAA\n\
+AAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGC\n\
+GGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCT\n\
+ACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGG\n\
+GAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATC\n\
+GCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGC\n\
+GGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGG\n\
+TCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAA\n\
+AAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAG\n\
+GAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACT\n\
+CCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCC\n\
+TGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAG\n\
+ACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGC\n\
+GTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGA\n\
+ACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGA\n\
+CAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCA\n\
+CTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCA\n\
+ACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCG\n\
+CCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGG\n\
+AGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTC\n\
+CGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCG\n\
+AGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACC\n\
+CCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAG\n\
+CTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAG\n\
+CCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGG\n\
+CCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATC\n\
+ACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAA\n\
+AAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGC\n\
+TGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCC\n\
+ACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGG\n\
+CTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGG\n\
+AGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATT\n\
+AGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAA\n\
+TCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGC\n\
+CTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAA\n\
+TCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAG\n\
+CCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGT\n\
+GGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCG\n\
+GGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAG\n\
+CGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTG\n\
+GGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATG\n\
+GTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGT\n\
+AATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTT\n\
+GCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCT\n\
+CAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCG\n\
+GGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTC\n\
+TCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACT\n\
+CGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAG\n\
+ATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGG\n\
+CGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTG\n\
+AGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATA\n\
+CAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGG\n\
+CAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGC\n\
+ACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCAC\n\
+GCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTC\n\
+GAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCG\n\
+GGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCT\n\
+TGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGG\n\
+CGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCA\n\
+GCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGG\n\
+CCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGC\n\
+GCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGG\n\
+CGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGA\n\
+CTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGG\n\
+CCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAA\n\
+ACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCC\n\
+CAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGT\n\
+GAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAA\n\
+AGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGG\n\
+ATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTAC\n\
+TAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGA\n\
+GGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGC\n\
+GCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGG\n\
+TGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTC\n\
+AGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAA\n\
+ATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGA\n\
+GAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC\n\
+AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTG\n\
+TAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGAC\n\
+CAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGT\n\
+GGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAAC\n\
+CCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACA\n\
+GAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACT\n\
+TTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAAC\n\
+ATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCC\n\
+TGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAG\n\
+GTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCG\n\
+TCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAG\n\
+GCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCC\n\
+GTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCT\n\
+ACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCC\n\
+GAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCC\n\
+GGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCAC\n\
+CTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAA\n\
+ATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTG\n\
+AGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCAC\n\
+TGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCT\n\
+CACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAG\n\
+TTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAG\n\
+CCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATC\n\
+GCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCT\n\
+GGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATC\n\
+CCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCC\n\
+TGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGG\n\
+CGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG\n\
+AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCG\n\
+AGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGG\n\
+AGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGT\n\
+GAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAA\n\
+TCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGC\n\
+AGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCA\n\
+AAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGG\n\
+CGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTC\n\
+TACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCG\n\
+GGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGAT\n\
+CGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCG\n\
+CGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAG\n\
+GTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACA\n\
+AAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCA\n\
+GGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCAC\n\
+TCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGC\n\
+CTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGA\n\
+GACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGG\n\
+CGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTG\n\
+AACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCG\n\
+ACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGC\n\
+ACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCC\n\
+AACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGC\n\
+GCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCG\n\
+GAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACT\n\
+CCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCC\n\
+GAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAAC\n\
+CCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA\n\
+GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGA\n\
+GCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAG\n\
+GCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGAT\n\
+CACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTA\n\
+AAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGG\n\
+CTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGC\n\
+CACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTG\n\
+GCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAG\n\
+GAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAAT\n\
+TAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGA\n\
+ATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAG\n\
+CCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTA\n\
+ATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCA\n\
+GCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGG\n\
+TGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCC\n\
+GGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGA\n\
+GCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTT\n\
+GGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACAT\n\
+GGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTG\n\
+TAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGT\n\
+TGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTC\n\
+TCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGC\n\
+GGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGT\n\
+CTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTAC\n\
+TCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGA\n\
+GATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGG\n\
+GCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCT\n\
+GAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT\n\
+ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAG\n\
+GCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTG\n\
+CACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCA\n\
+CGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTT\n\
+CGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCC\n\
+GGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGC\n\
+TTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGG\n\
+GCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCC\n\
+AGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTG\n\
+GCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCG\n\
+CGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAG\n\
+GCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAG\n\
+ACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAG\n\
+GCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGA\n\
+AACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATC\n\
+CCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAG\n\
+TGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAA\n\
+AAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCG\n\
+GATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTA\n\
+CTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGG\n\
+AGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCG\n\
+CGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCG\n\
+GTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGT\n\
+CAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAA\n\
+AATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGG\n\
+AGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTC\n\
+CAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCT\n\
+GTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA\n\
+CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCG\n\
+TGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAA\n\
+CCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGAC\n\
+AGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCAC\n\
+TTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAA\n\
+CATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGC\n\
+CTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGA\n\
+GGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCC\n\
+GTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGA\n\
+GGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCC\n\
+CGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGC\n\
+TACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGC\n\
+CGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGC\n\
+CGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCA\n\
+CCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAA\n\
+AATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCT\n\
+GAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCA\n\
+CTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGC\n\
+TCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGA\n\
+GTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTA\n\
+GCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAAT\n\
+CGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCC\n\
+TGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAAT\n\
+CCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGC\n\
+CTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTG\n\
+GCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGG\n\
+GAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGC\n\
+GAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG\n\
+GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGG\n\
+TGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTA\n\
+ATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTG\n\
+CAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTC\n\
+AAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGG\n\
+GCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCT\n\
+CTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTC\n\
+GGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGA\n\
+TCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGC\n\
+GCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGA\n\
+GGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATAC\n\
+AAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGC\n\
+AGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCA\n\
+CTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACG\n\
+CCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCG\n\
+AGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGG\n\
+GCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTT\n\
+GAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGC\n\
+GACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAG\n\
+CACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGC\n\
+CAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCG\n\
+CGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGC\n\
+GGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGAC\n\
+TCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGC\n\
+CGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAA\n\
+CCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCC\n\
+AGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTG\n\
+AGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA\n\
+GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGA\n\
+TCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACT\n\
+AAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAG\n\
+GCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCG\n\
+CCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGT\n\
+GGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCA\n\
+GGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAA\n\
+TTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAG\n\
+AATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCA\n\
+GCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGT\n\
+AATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACC\n\
+AGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTG\n\
+GTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACC\n\
+CGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAG\n\
+AGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTT\n\
+TGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACA\n\
+TGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCT\n\
+GTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGG\n\
+TTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGT\n\
+CTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGG\n\
+CGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCG\n\
+TCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTA\n\
+CTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCG\n\
+AGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCG\n\
+GGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACC\n\
+TGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAA\n\
+TACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGA\n\
+GGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACT\n\
+GCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTC\n\
+ACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGT\n\
+TCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGC\n\
+CGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCG\n\
+CTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTG\n\
+GGCGACAGAGCGAGACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCC\n\
+CAGCACTTTGGGAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCT\n\
+GGCCAACATGGTGAAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGC\n\
+GCGCGCCTGTAATCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGA\n\
+GGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGA\n\
+GACTCCGTCTCAAAAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGA\n\
+GGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTG\n\
+AAACCCCGTCTCTACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAAT\n\
+CCCAGCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGCGGAGGTTGCA\n\
+GTGAGCCGAGATCGCGCCACTGCACTCCAGCCTGGGCGACAGAGCGAGACTCCGTCTCAA\n\
+AAAGGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCGAGGCGGGC\n\
+GGATCACCTGAGGTCAGGAGTTCGAGACCAGCCTGGCCAACATGGTGAAACCCCGTCTCT\n\
+ACTAAAAATACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCAGCTACTCGG\n\
+GAGGCTGAGGCAGGAGAATC\n\
+>TWO IUB ambiguity codes\n\
+cttBtatcatatgctaKggNcataaaSatgtaaaDcDRtBggDtctttataattcBgtcg\n\
+tactDtDagcctatttSVHtHttKtgtHMaSattgWaHKHttttagacatWatgtRgaaa\n\
+NtactMcSMtYtcMgRtacttctWBacgaaatatagScDtttgaagacacatagtVgYgt\n\
+cattHWtMMWcStgttaggKtSgaYaaccWStcgBttgcgaMttBYatcWtgacaYcaga\n\
+gtaBDtRacttttcWatMttDBcatWtatcttactaBgaYtcttgttttttttYaaScYa\n\
+HgtgttNtSatcMtcVaaaStccRcctDaataataStcYtRDSaMtDttgttSagtRRca\n\
+tttHatSttMtWgtcgtatSSagactYaaattcaMtWatttaSgYttaRgKaRtccactt\n\
+tattRggaMcDaWaWagttttgacatgttctacaaaRaatataataaMttcgDacgaSSt\n\
+acaStYRctVaNMtMgtaggcKatcttttattaaaaagVWaHKYagtttttatttaacct\n\
+tacgtVtcVaattVMBcttaMtttaStgacttagattWWacVtgWYagWVRctDattBYt\n\
+gtttaagaagattattgacVatMaacattVctgtBSgaVtgWWggaKHaatKWcBScSWa\n\
+accRVacacaaactaccScattRatatKVtactatatttHttaagtttSKtRtacaaagt\n\
+RDttcaaaaWgcacatWaDgtDKacgaacaattacaRNWaatHtttStgttattaaMtgt\n\
+tgDcgtMgcatBtgcttcgcgaDWgagctgcgaggggVtaaScNatttacttaatgacag\n\
+cccccacatYScaMgtaggtYaNgttctgaMaacNaMRaacaaacaKctacatagYWctg\n\
+ttWaaataaaataRattagHacacaagcgKatacBttRttaagtatttccgatctHSaat\n\
+actcNttMaagtattMtgRtgaMgcataatHcMtaBSaRattagttgatHtMttaaKagg\n\
+YtaaBataSaVatactWtataVWgKgttaaaacagtgcgRatatacatVtHRtVYataSa\n\
+KtWaStVcNKHKttactatccctcatgWHatWaRcttactaggatctataDtDHBttata\n\
+aaaHgtacVtagaYttYaKcctattcttcttaataNDaaggaaaDYgcggctaaWSctBa\n\
+aNtgctggMBaKctaMVKagBaactaWaDaMaccYVtNtaHtVWtKgRtcaaNtYaNacg\n\
+gtttNattgVtttctgtBaWgtaattcaagtcaVWtactNggattctttaYtaaagccgc\n\
+tcttagHVggaYtgtNcDaVagctctctKgacgtatagYcctRYHDtgBattDaaDgccK\n\
+tcHaaStttMcctagtattgcRgWBaVatHaaaataYtgtttagMDMRtaataaggatMt\n\
+ttctWgtNtgtgaaaaMaatatRtttMtDgHHtgtcattttcWattRSHcVagaagtacg\n\
+ggtaKVattKYagactNaatgtttgKMMgYNtcccgSKttctaStatatNVataYHgtNa\n\
+BKRgNacaactgatttcctttaNcgatttctctataScaHtataRagtcRVttacDSDtt\n\
+aRtSatacHgtSKacYagttMHtWataggatgactNtatSaNctataVtttRNKtgRacc\n\
+tttYtatgttactttttcctttaaacatacaHactMacacggtWataMtBVacRaSaatc\n\
+cgtaBVttccagccBcttaRKtgtgcctttttRtgtcagcRttKtaaacKtaaatctcac\n\
+aattgcaNtSBaaccgggttattaaBcKatDagttactcttcattVtttHaaggctKKga\n\
+tacatcBggScagtVcacattttgaHaDSgHatRMaHWggtatatRgccDttcgtatcga\n\
+aacaHtaagttaRatgaVacttagattVKtaaYttaaatcaNatccRttRRaMScNaaaD\n\
+gttVHWgtcHaaHgacVaWtgttScactaagSgttatcttagggDtaccagWattWtRtg\n\
+ttHWHacgattBtgVcaYatcggttgagKcWtKKcaVtgaYgWctgYggVctgtHgaNcV\n\
+taBtWaaYatcDRaaRtSctgaHaYRttagatMatgcatttNattaDttaattgttctaa\n\
+ccctcccctagaWBtttHtBccttagaVaatMcBHagaVcWcagBVttcBtaYMccagat\n\
+gaaaaHctctaacgttagNWRtcggattNatcRaNHttcagtKttttgWatWttcSaNgg\n\
+gaWtactKKMaacatKatacNattgctWtatctaVgagctatgtRaHtYcWcttagccaa\n\
+tYttWttaWSSttaHcaaaaagVacVgtaVaRMgattaVcDactttcHHggHRtgNcctt\n\
+tYatcatKgctcctctatVcaaaaKaaaagtatatctgMtWtaaaacaStttMtcgactt\n\
+taSatcgDataaactaaacaagtaaVctaggaSccaatMVtaaSKNVattttgHccatca\n\
+cBVctgcaVatVttRtactgtVcaattHgtaaattaaattttYtatattaaRSgYtgBag\n\
+aHSBDgtagcacRHtYcBgtcacttacactaYcgctWtattgSHtSatcataaatataHt\n\
+cgtYaaMNgBaatttaRgaMaatatttBtttaaaHHKaatctgatWatYaacttMctctt\n\
+ttVctagctDaaagtaVaKaKRtaacBgtatccaaccactHHaagaagaaggaNaaatBW\n\
+attccgStaMSaMatBttgcatgRSacgttVVtaaDMtcSgVatWcaSatcttttVatag\n\
+ttactttacgatcaccNtaDVgSRcgVcgtgaacgaNtaNatatagtHtMgtHcMtagaa\n\
+attBgtataRaaaacaYKgtRccYtatgaagtaataKgtaaMttgaaRVatgcagaKStc\n\
+tHNaaatctBBtcttaYaBWHgtVtgacagcaRcataWctcaBcYacYgatDgtDHccta\n\
+aagacYRcaggattHaYgtKtaatgcVcaataMYacccatatcacgWDBtgaatcBaata\n\
+cKcttRaRtgatgaBDacggtaattaaYtataStgVHDtDctgactcaaatKtacaatgc\n\
+gYatBtRaDatHaactgtttatatDttttaaaKVccYcaaccNcBcgHaaVcattHctcg\n\
+attaaatBtatgcaaaaatYMctSactHatacgaWacattacMBgHttcgaatVaaaaca\n\
+BatatVtctgaaaaWtctRacgBMaatSgRgtgtcgactatcRtattaScctaStagKga\n\
+DcWgtYtDDWKRgRtHatRtggtcgaHgggcgtattaMgtcagccaBggWVcWctVaaat\n\
+tcgNaatcKWagcNaHtgaaaSaaagctcYctttRVtaaaatNtataaccKtaRgtttaM\n\
+tgtKaBtRtNaggaSattHatatWactcagtgtactaKctatttgRYYatKatgtccgtR\n\
+tttttatttaatatVgKtttgtatgtNtataRatWYNgtRtHggtaaKaYtKSDcatcKg\n\
+taaYatcSRctaVtSMWtVtRWHatttagataDtVggacagVcgKWagBgatBtaaagNc\n\
+aRtagcataBggactaacacRctKgttaatcctHgDgttKHHagttgttaatgHBtatHc\n\
+DaagtVaBaRccctVgtgDtacRHSctaagagcggWYaBtSaKtHBtaaactYacgNKBa\n\
+VYgtaacttagtVttcttaatgtBtatMtMtttaattaatBWccatRtttcatagVgMMt\n\
+agctStKctaMactacDNYgKYHgaWcgaHgagattacVgtttgtRaSttaWaVgataat\n\
+gtgtYtaStattattMtNgWtgttKaccaatagNYttattcgtatHcWtctaaaNVYKKt\n\
+tWtggcDtcgaagtNcagatacgcattaagaccWctgcagcttggNSgaNcHggatgtVt\n\
+catNtRaaBNcHVagagaaBtaaSggDaatWaatRccaVgggStctDaacataKttKatt\n\
+tggacYtattcSatcttagcaatgaVBMcttDattctYaaRgatgcattttNgVHtKcYR\n\
+aatRKctgtaaacRatVSagctgtWacBtKVatctgttttKcgtctaaDcaagtatcSat\n\
+aWVgcKKataWaYttcccSaatgaaaacccWgcRctWatNcWtBRttYaattataaNgac\n\
+acaatagtttVNtataNaYtaatRaVWKtBatKagtaatataDaNaaaaataMtaagaaS\n\
+tccBcaatNgaataWtHaNactgtcDtRcYaaVaaaaaDgtttRatctatgHtgttKtga\n\
+aNSgatactttcgagWaaatctKaaDaRttgtggKKagcDgataaattgSaacWaVtaNM\n\
+acKtcaDaaatttctRaaVcagNacaScRBatatctRatcctaNatWgRtcDcSaWSgtt\n\
+RtKaRtMtKaatgttBHcYaaBtgatSgaSWaScMgatNtctcctatttctYtatMatMt\n\
+RRtSaattaMtagaaaaStcgVgRttSVaScagtgDtttatcatcatacRcatatDctta\n\
+tcatVRtttataaHtattcYtcaaaatactttgVctagtaaYttagatagtSYacKaaac\n\
+gaaKtaaatagataatSatatgaaatSgKtaatVtttatcctgKHaatHattagaaccgt\n\
+YaaHactRcggSBNgtgctaaBagBttgtRttaaattYtVRaaaattgtaatVatttctc\n\
+ttcatgBcVgtgKgaHaaatattYatagWacNctgaaMcgaattStagWaSgtaaKagtt\n\
+ttaagaDgatKcctgtaHtcatggKttVDatcaaggtYcgccagNgtgcVttttagagat\n\
+gctaccacggggtNttttaSHaNtatNcctcatSaaVgtactgBHtagcaYggYVKNgta\n\
+KBcRttgaWatgaatVtagtcgattYgatgtaatttacDacSctgctaaaStttaWMagD\n\
+aaatcaVYctccgggcgaVtaaWtStaKMgDtttcaaMtVgBaatccagNaaatcYRMBg\n\
+gttWtaaScKttMWtYataRaDBMaDataatHBcacDaaKDactaMgagttDattaHatH\n\
+taYatDtattDcRNStgaatattSDttggtattaaNSYacttcDMgYgBatWtaMagact\n\
+VWttctttgYMaYaacRgHWaattgRtaagcattctMKVStatactacHVtatgatcBtV\n\
+NataaBttYtSttacKgggWgYDtgaVtYgatDaacattYgatggtRDaVDttNactaSa\n\
+MtgNttaacaaSaBStcDctaccacagacgcaHatMataWKYtaYattMcaMtgSttDag\n\
+cHacgatcaHttYaKHggagttccgatYcaatgatRaVRcaagatcagtatggScctata\n\
+ttaNtagcgacgtgKaaWaactSgagtMYtcttccaKtStaacggMtaagNttattatcg\n\
+tctaRcactctctDtaacWYtgaYaSaagaWtNtatttRacatgNaatgttattgWDDcN\n\
+aHcctgaaHacSgaataaRaataMHttatMtgaSDSKatatHHaNtacagtccaYatWtc\n\
+actaactatKDacSaStcggataHgYatagKtaatKagStaNgtatactatggRHacttg\n\
+tattatgtDVagDVaRctacMYattDgtttYgtctatggtKaRSttRccRtaaccttaga\n\
+gRatagSaaMaacgcaNtatgaaatcaRaagataatagatactcHaaYKBctccaagaRa\n\
+BaStNagataggcgaatgaMtagaatgtcaKttaaatgtaWcaBttaatRcggtgNcaca\n\
+aKtttScRtWtgcatagtttWYaagBttDKgcctttatMggNttattBtctagVtacata\n\
+aaYttacacaaRttcYtWttgHcaYYtaMgBaBatctNgcDtNttacgacDcgataaSat\n\
+YaSttWtcctatKaatgcagHaVaacgctgcatDtgttaSataaaaYSNttatagtaNYt\n\
+aDaaaNtggggacttaBggcHgcgtNtaaMcctggtVtaKcgNacNtatVaSWctWtgaW\n\
+cggNaBagctctgaYataMgaagatBSttctatacttgtgtKtaattttRagtDtacata\n\
+tatatgatNHVgBMtKtaKaNttDHaagatactHaccHtcatttaaagttVaMcNgHata\n\
+tKtaNtgYMccttatcaaNagctggacStttcNtggcaVtattactHaSttatgNMVatt\n\
+MMDtMactattattgWMSgtHBttStStgatatRaDaagattttctatMtaaaaaggtac\n\
+taaVttaSacNaatactgMttgacHaHRttgMacaaaatagttaatatWKRgacDgaRta\n\
+tatttattatcYttaWtgtBRtWatgHaaattHataagtVaDtWaVaWtgStcgtMSgaS\n\
+RgMKtaaataVacataatgtaSaatttagtcgaaHtaKaatgcacatcggRaggSKctDc\n\
+agtcSttcccStYtccRtctctYtcaaKcgagtaMttttcRaYDttgttatctaatcata\n\
+NctctgctatcaMatactataggDaHaaSttMtaDtcNatataattctMcStaaBYtaNa\n\
+gatgtaatHagagSttgWHVcttatKaYgDctcttggtgttMcRaVgSgggtagacaata\n\
+aDtaattSaDaNaHaBctattgNtaccaaRgaVtKNtaaYggHtaKKgHcatctWtctDt\n\
+ttctttggSDtNtaStagttataaacaattgcaBaBWggHgcaaaBtYgctaatgaaatW\n\
+cDcttHtcMtWWattBHatcatcaaatctKMagtDNatttWaBtHaaaNgMttaaStagt\n\
+tctctaatDtcRVaYttgttMtRtgtcaSaaYVgSWDRtaatagctcagDgcWWaaaBaa\n\
+RaBctgVgggNgDWStNaNBKcBctaaKtttDcttBaaggBttgaccatgaaaNgttttt\n\
+tttatctatgttataccaaDRaaSagtaVtDtcaWatBtacattaWacttaSgtattggD\n\
+gKaaatScaattacgWcagKHaaccaYcRcaRttaDttRtttHgaHVggcttBaRgtccc\n\
+tDatKaVtKtcRgYtaKttacgtatBtStaagcaattaagaRgBagSaattccSWYttta\n\
+ttVaataNctgHgttaaNBgcVYgtRtcccagWNaaaacaDNaBcaaaaRVtcWMgBagM\n\
+tttattacgDacttBtactatcattggaaatVccggttRttcatagttVYcatYaSHaHc\n\
+ttaaagcNWaHataaaRWtctVtRYtagHtaaaYMataHYtNBctNtKaatattStgaMc\n\
+BtRgctaKtgcScSttDgYatcVtggaaKtaagatWccHccgKYctaNNctacaWctttt\n\
+gcRtgtVcgaKttcMRHgctaHtVaataaDtatgKDcttatBtDttggNtacttttMtga\n\
+acRattaaNagaactcaaaBBVtcDtcgaStaDctgaaaSgttMaDtcgttcaccaaaag\n\
+gWtcKcgSMtcDtatgtttStaaBtatagDcatYatWtaaaBacaKgcaDatgRggaaYc\n\
+taRtccagattDaWtttggacBaVcHtHtaacDacYgtaatataMagaatgHMatcttat\n\
+acgtatttttatattacHactgttataMgStYaattYaccaattgagtcaaattaYtgta\n\
+tcatgMcaDcgggtcttDtKgcatgWRtataatatRacacNRBttcHtBgcRttgtgcgt\n\
+catacMtttBctatctBaatcattMttMYgattaaVYatgDaatVagtattDacaacDMa\n\
+tcMtHcccataagatgBggaccattVWtRtSacatgctcaaggggYtttDtaaNgNtaaB\n\
+atggaatgtctRtaBgBtcNYatatNRtagaacMgagSaSDDSaDcctRagtVWSHtVSR\n\
+ggaacaBVaccgtttaStagaacaMtactccagtttVctaaRaaHttNcttagcaattta\n\
+ttaatRtaaaatctaacDaBttggSagagctacHtaaRWgattcaaBtctRtSHaNtgta\n\
+cattVcaHaNaagtataccacaWtaRtaaVKgMYaWgttaKggKMtKcgWatcaDatYtK\n\
+SttgtacgaccNctSaattcDcatcttcaaaDKttacHtggttHggRRaRcaWacaMtBW\n\
+VHSHgaaMcKattgtaRWttScNattBBatYtaNRgcggaagacHSaattRtttcYgacc\n\
+BRccMacccKgatgaacttcgDgHcaaaaaRtatatDtatYVtttttHgSHaSaatagct\n\
+NYtaHYaVYttattNtttgaaaYtaKttWtctaNtgagaaaNctNDctaaHgttagDcRt\n\
+tatagccBaacgcaRBtRctRtggtaMYYttWtgataatcgaataattattataVaaaaa\n\
+ttacNRVYcaaMacNatRttcKatMctgaagactaattataaYgcKcaSYaatMNctcaa\n\
+cgtgatttttBacNtgatDccaattattKWWcattttatatatgatBcDtaaaagttgaa\n\
+VtaHtaHHtBtataRBgtgDtaataMttRtDgDcttattNtggtctatctaaBcatctaR\n\
+atgNacWtaatgaagtcMNaacNgHttatactaWgcNtaStaRgttaaHacccgaYStac\n\
+aaaatWggaYaWgaattattcMaactcBKaaaRVNcaNRDcYcgaBctKaacaaaaaSgc\n\
+tccYBBHYaVagaatagaaaacagYtctVccaMtcgtttVatcaatttDRtgWctagtac\n\
+RttMctgtDctttcKtWttttataaatgVttgBKtgtKWDaWagMtaaagaaattDVtag\n\
+gttacatcatttatgtcgMHaVcttaBtVRtcgtaYgBRHatttHgaBcKaYWaatcNSc\n\
+tagtaaaaatttacaatcactSWacgtaatgKttWattagttttNaggtctcaagtcact\n\
+attcttctaagKggaataMgtttcataagataaaaatagattatDgcBVHWgaBKttDgc\n\
+atRHaagcaYcRaattattatgtMatatattgHDtcaDtcaaaHctStattaatHaccga\n\
+cNattgatatattttgtgtDtRatagSacaMtcRtcattcccgacacSattgttKaWatt\n\
+NHcaacttccgtttSRtgtctgDcgctcaaMagVtBctBMcMcWtgtaacgactctcttR\n\
+ggRKSttgYtYatDccagttDgaKccacgVatWcataVaaagaataMgtgataaKYaaat\n\
+cHDaacgataYctRtcYatcgcaMgtNttaBttttgatttaRtStgcaacaaaataccVg\n\
+aaDgtVgDcStctatatttattaaaaRKDatagaaagaKaaYYcaYSgKStctccSttac\n\
+agtcNactttDVttagaaagMHttRaNcSaRaMgBttattggtttaRMggatggcKDgWR\n\
+tNaataataWKKacttcKWaaagNaBttaBatMHtccattaacttccccYtcBcYRtaga\n\
+ttaagctaaYBDttaNtgaaaccHcaRMtKtaaHMcNBttaNaNcVcgVttWNtDaBatg\n\
+ataaVtcWKcttRggWatcattgaRagHgaattNtatttctctattaattaatgaDaaMa\n\
+tacgttgggcHaYVaaNaDDttHtcaaHtcVVDgBVagcMacgtgttaaBRNtatRtcag\n\
+taagaggtttaagacaVaaggttaWatctccgtVtaDtcDatttccVatgtacNtttccg\n\
+tHttatKgScBatgtVgHtYcWagcaKtaMYaaHgtaattaSaHcgcagtWNaatNccNN\n\
+YcacgVaagaRacttctcattcccRtgtgtaattagcSttaaStWaMtctNNcSMacatt\n\
+ataaactaDgtatWgtagtttaagaaaattgtagtNagtcaataaatttgatMMYactaa\n\
+tatcggBWDtVcYttcDHtVttatacYaRgaMaacaStaatcRttttVtagaDtcacWat\n\
+ttWtgaaaagaaagNRacDtttStVatBaDNtaactatatcBSMcccaSttccggaMatg\n\
+attaaWatKMaBaBatttgataNctgttKtVaagtcagScgaaaDggaWgtgttttKtWt\n\
+atttHaatgtagttcactaaKMagttSYBtKtaYgaactcagagRtatagtVtatcaaaW\n\
+YagcgNtaDagtacNSaaYDgatBgtcgataacYDtaaactacagWDcYKaagtttatta\n\
+gcatcgagttKcatDaattgattatDtcagRtWSKtcgNtMaaaaacaMttKcaWcaaSV\n\
+MaaaccagMVtaMaDtMaHaBgaacataBBVtaatVYaNSWcSgNtDNaaKacacBttta\n\
+tKtgtttcaaHaMctcagtaacgtcgYtactDcgcctaNgagagcYgatattttaaattt\n\
+ccattttacatttDaaRctattttWctttacgtDatYtttcagacgcaaVttagtaaKaa\n\
+aRtgVtccataBggacttatttgtttaWNtgttVWtaWNVDaattgtatttBaagcBtaa\n\
+BttaaVatcHcaVgacattccNggtcgacKttaaaRtagRtctWagaYggtgMtataatM\n\
+tgaaRttattttgWcttNtDRRgMDKacagaaaaggaaaRStcccagtYccVattaNaaK\n\
+StNWtgacaVtagaagcttSaaDtcacaacgDYacWDYtgtttKatcVtgcMaDaSKStV\n\
+cgtagaaWaKaagtttcHaHgMgMtctataagBtKaaaKKcactggagRRttaagaBaaN\n\
+atVVcgRcKSttDaactagtSttSattgttgaaRYatggttVttaataaHttccaagDtg\n\
+atNWtaagHtgcYtaactRgcaatgMgtgtRaatRaNaacHKtagactactggaatttcg\n\
+ccataacgMctRgatgttaccctaHgtgWaYcactcacYaattcttaBtgacttaaacct\n\
+gYgaWatgBttcttVttcgttWttMcNYgtaaaatctYgMgaaattacNgaHgaacDVVM\n\
+tttggtHtctaaRgtacagacgHtVtaBMNBgattagcttaRcttacaHcRctgttcaaD\n\
+BggttKaacatgKtttYataVaNattccgMcgcgtagtRaVVaattaKaatggttRgaMc\n\
+agtatcWBttNtHagctaatctagaaNaaacaYBctatcgcVctBtgcaaagDgttVtga\n\
+HtactSNYtaaNccatgtgDacgaVtDcgKaRtacDcttgctaagggcagMDagggtBWR\n\
+tttSgccttttttaacgtcHctaVtVDtagatcaNMaVtcVacatHctDWNaataRgcgt\n\
+aVHaggtaaaaSgtttMtattDgBtctgatSgtRagagYtctSaKWaataMgattRKtaa\n\
+catttYcgtaacacattRWtBtcggtaaatMtaaacBatttctKagtcDtttgcBtKYYB\n\
+aKttctVttgttaDtgattttcttccacttgSaaacggaaaNDaattcYNNaWcgaaYat\n\
+tttMgcBtcatRtgtaaagatgaWtgaccaYBHgaatagataVVtHtttVgYBtMctaMt\n\
+cctgaDcYttgtccaaaRNtacagcMctKaaaggatttacatgtttaaWSaYaKttBtag\n\
+DacactagctMtttNaKtctttcNcSattNacttggaacaatDagtattRtgSHaataat\n\
+gccVgacccgatactatccctgtRctttgagaSgatcatatcgDcagWaaHSgctYYWta\n\
+tHttggttctttatVattatcgactaagtgtagcatVgtgHMtttgtttcgttaKattcM\n\
+atttgtttWcaaStNatgtHcaaaDtaagBaKBtRgaBgDtSagtatMtaacYaatYtVc\n\
+KatgtgcaacVaaaatactKcRgtaYtgtNgBBNcKtcttaccttKgaRaYcaNKtactt\n\
+tgagSBtgtRagaNgcaaaNcacagtVtttHWatgttaNatBgtttaatNgVtctgaata\n\
+tcaRtattcttttttttRaaKcRStctcggDgKagattaMaaaKtcaHacttaataataK\n\
+taRgDtKVBttttcgtKaggHHcatgttagHggttNctcgtatKKagVagRaaaggaaBt\n\
+NatttVKcRttaHctaHtcaaatgtaggHccaBataNaNaggttgcWaatctgatYcaaa\n\
+HaatWtaVgaaBttagtaagaKKtaaaKtRHatMaDBtBctagcatWtatttgWttVaaa\n\
+ScMNattRactttgtYtttaaaagtaagtMtaMaSttMBtatgaBtttaKtgaatgagYg\n\
+tNNacMtcNRacMMHcttWtgtRtctttaacaacattattcYaMagBaacYttMatcttK\n\
+cRMtgMNccattaRttNatHaHNaSaaHMacacaVaatacaKaSttHatattMtVatWga\n\
+ttttttaYctttKttHgScWaacgHtttcaVaaMgaacagNatcgttaacaaaaagtaca\n\
+HBNaattgttKtcttVttaaBtctgctacgBgcWtttcaggacacatMgacatcccagcg\n\
+gMgaVKaBattgacttaatgacacacaaaaaatRKaaBctacgtRaDcgtagcVBaacDS\n\
+BHaaaaSacatatacagacRNatcttNaaVtaaaataHattagtaaaaSWccgtatWatg\n\
+gDttaactattgcccatcttHaSgYataBttBaactattBtcHtgatcaataSttaBtat\n\
+KSHYttWggtcYtttBttaataccRgVatStaHaKagaatNtagRMNgtcttYaaSaact\n\
+cagDSgagaaYtMttDtMRVgWKWtgMaKtKaDttttgactatacataatcNtatNaHat\n\
+tVagacgYgatatatttttgtStWaaatctWaMgagaRttRatacgStgattcttaagaD\n\
+taWccaaatRcagcagaaNKagtaaDggcgccBtYtagSBMtactaaataMataBSacRM\n\
+gDgattMMgtcHtcaYDtRaDaacggttDaggcMtttatgttaNctaattaVacgaaMMt\n\
+aatDccSgtattgaRtWWaccaccgagtactMcgVNgctDctaMScatagcgtcaactat\n\
+acRacgHRttgctatttaatgaattataYKttgtaagWgtYttgcHgMtaMattWaWVta\n\
+RgcttgYgttBHtYataSccStBtgtagMgtDtggcVaaSBaatagDttgBgtctttctc\n\
+attttaNagtHKtaMWcYactVcgcgtatMVtttRacVagDaatcttgctBBcRDgcaac\n\
+KttgatSKtYtagBMagaRtcgBattHcBWcaactgatttaatttWDccatttatcgagS\n\
+KaWttataHactaHMttaatHtggaHtHagaatgtKtaaRactgtttMatacgatcaagD\n\
+gatKaDctataMggtHDtggHacctttRtatcttYattttgacttgaaSaataaatYcgB\n\
+aaaaccgNatVBttMacHaKaataagtatKgtcaagactcttaHttcggaattgttDtct\n\
+aaccHttttWaaatgaaatataaaWattccYDtKtaaaacggtgaggWVtctattagtga\n\
+ctattaagtMgtttaagcatttgSgaaatatccHaaggMaaaattttcWtatKctagDtY\n\
+tMcctagagHcactttactatacaaacattaacttaHatcVMYattYgVgtMttaaRtga\n\
+aataaDatcaHgtHHatKcDYaatcttMtNcgatYatgSaMaNtcttKcWataScKggta\n\
+tcttacgcttWaaagNatgMgHtctttNtaacVtgttcMaaRatccggggactcMtttaY\n\
+MtcWRgNctgNccKatcttgYDcMgattNYaRagatHaaHgKctcataRDttacatBatc\n\
+cattgDWttatttaWgtcggagaaaaatacaatacSNtgggtttccttacSMaagBatta\n\
+caMaNcactMttatgaRBacYcYtcaaaWtagctSaacttWgDMHgaggatgBVgcHaDt\n\
+ggaactttggtcNatNgtaKaBcccaNtaagttBaacagtatacDYttcctNgWgcgSMc\n\
+acatStctHatgRcNcgtacacaatRttMggaNKKggataaaSaYcMVcMgtaMaHtgat\n\
+tYMatYcggtcttcctHtcDccgtgRatcattgcgccgatatMaaYaataaYSggatagc\n\
+gcBtNtaaaScaKgttBgagVagttaKagagtatVaactaSacWactSaKatWccaKaaa\n\
+atBKgaaKtDMattttgtaaatcRctMatcaaMagMttDgVatggMaaWgttcgaWatga\n\
+aatttgRtYtattaWHKcRgctacatKttctaccaaHttRatctaYattaaWatVNccat\n\
+NgagtcKttKataStRaatatattcctRWatDctVagttYDgSBaatYgttttgtVaatt\n\
+taatagcagMatRaacttBctattgtMagagattaaactaMatVtHtaaatctRgaaaaa\n\
+aaatttWacaacaYccYDSaattMatgaccKtaBKWBattgtcaagcHKaagttMMtaat\n\
+ttcKcMagNaaKagattggMagaggtaatttYacatcWaaDgatMgKHacMacgcVaaca\n\
+DtaDatatYggttBcgtatgWgaSatttgtagaHYRVacaRtctHaaRtatgaactaata\n\
+tctSSBgggaaHMWtcaagatKgagtDaSatagttgattVRatNtctMtcSaagaSHaat\n\
+aNataataRaaRgattctttaataaagWaRHcYgcatgtWRcttgaaggaMcaataBRaa\n\
+ccagStaaacNtttcaatataYtaatatgHaDgcStcWttaacctaRgtYaRtataKtgM\n\
+ttttatgactaaaatttacYatcccRWtttHRtattaaatgtttatatttgttYaatMca\n\
+RcSVaaDatcgtaYMcatgtagacatgaaattgRtcaaYaaYtRBatKacttataccaNa\n\
+aattVaBtctggacaagKaaYaaatatWtMtatcYaaVNtcgHaactBaagKcHgtctac\n\
+aatWtaDtSgtaHcataHtactgataNctRgttMtDcDttatHtcgtacatcccaggStt\n\
+aBgtcacacWtccNMcNatMVaVgtccDYStatMaccDatggYaRKaaagataRatttHK\n\
+tSaaatDgataaacttaHgttgVBtcttVttHgDacgaKatgtatatNYataactctSat\n\
+atatattgcHRRYttStggaactHgttttYtttaWtatMcttttctatctDtagVHYgMR\n\
+BgtHttcctaatYRttKtaagatggaVRataKDctaMtKBNtMtHNtWtttYcVtattMc\n\
+gRaacMcctNSctcatttaaagDcaHtYccSgatgcaatYaaaaDcttcgtaWtaattct\n\
+cgttttScttggtaatctttYgtctaactKataHacctMctcttacHtKataacacagcN\n\
+RatgKatttttSaaatRYcgDttaMRcgaaattactMtgcgtaagcgttatBtttttaat\n\
+taagtNacatHgttcRgacKcBBtVgatKttcgaBaatactDRgtRtgaNacWtcacYtt\n\
+aaKcgttctHaKttaNaMgWgWaggtctRgaKgWttSttBtDcNtgtttacaaatYcDRt\n\
+gVtgcctattcNtctaaaDMNttttNtggctgagaVctDaacVtWccaagtaacacaNct\n\
+gaScattccDHcVBatcgatgtMtaatBgHaatDctMYgagaatgYWKcctaatNaStHa\n\
+aaKccgHgcgtYaaYtattgtStgtgcaaRtattaKatattagaWVtcaMtBagttatta\n\
+gNaWHcVgcaattttDcMtgtaRHVYtHtctgtaaaaHVtMKacatcgNaatttMatatg\n\
+ttgttactagWYtaRacgataKagYNKcattataNaRtgaacKaYgcaaYYacaNccHat\n\
+MatDcNgtHttRaWttagaaDcaaaaaatagggtKDtStaDaRtaVtHWKNtgtattVct\n\
+SVgRgataDaRaWataBgaagaaKtaataaYgDcaStaNgtaDaaggtattHaRaWMYaY\n\
+aWtggttHYgagVtgtgcttttcaaDKcagVcgttagacNaaWtagtaataDttctggtt\n\
+VcatcataaagtgKaaaNaMtaBBaattaatWaattgctHaVKaSgDaaVKaHtatatat\n\
+HatcatSBagNgHtatcHYMHgttDgtaHtBttWatcgtttaRaattgStKgSKNWKatc\n\
+agDtctcagatttctRtYtBatBgHHtKaWtgYBgacVVWaKtacKcDttKMaKaVcggt\n\
+gttataagaataaHaatattagtataatMHgttYgaRttagtaRtcaaVatacggtcMcg\n\
+agtaaRttacWgactKRYataaaagSattYaWgagatYagKagatgSaagKgttaatMgg\n\
+tataatgttWYttatgagaaacctNVataatHcccKtDctcctaatactggctHggaSag\n\
+gRtKHaWaattcgSatMatttagaggcYtctaMcgctcataSatatgRagacNaaDagga\n\
+VBagaYttKtacNaKgtSYtagttggaWcatcWttaatctatgaVtcgtgtMtatcaYcg\n\
+tRccaaYgDctgcMgtgtWgacWtgataacacgcgctBtgttaKtYDtatDcatcagKaV\n\
+MctaatcttgVcaaRgcRMtDcgattaHttcaNatgaatMtactacVgtRgatggaWttt\n\
+actaaKatgagSaaKggtaNtactVaYtaaKRagaacccacaMtaaMtKtatBcttgtaa\n\
+WBtMctaataaVcDaaYtcRHBtcgttNtaaHatttBNgRStVDattBatVtaagttaYa\n\
+tVattaagaBcacggtSgtVtatttaRattgatgtaHDKgcaatattKtggcctatgaWD\n\
+KRYcggattgRctatNgatacaatMNttctgtcRBYRaaaHctNYattcHtaWcaattct\n\
+BtMKtVgYataatMgYtcagcttMDataVtggRtKtgaatgccNcRttcaMtRgattaac\n\
+attRcagcctHtWMtgtDRagaKaBtgDttYaaaaKatKgatctVaaYaacWcgcatagB\n\
+VtaNtRtYRaggBaaBtgKgttacataagagcatgtRattccacttaccatRaaatgWgD\n\
+aMHaYVgVtaSctatcgKaatatattaDgacccYagtgtaYNaaatKcagtBRgagtcca\n\
+tgKgaaaccBgaagBtgSttWtacgatWHaYatcgatttRaaNRgcaNaKVacaNtDgat\n\
+tgHVaatcDaagcgtatgcNttaDataatcSataaKcaataaHWataBtttatBtcaKtK\n\
+tatagttaDgSaYctacaRatNtaWctSaatatttYaKaKtaccWtatcRagacttaYtt\n\
+VcKgSDcgagaagatccHtaattctSttatggtKYgtMaHagVaBRatttctgtRgtcta\n\
+tgggtaHKgtHacHtSYacgtacacHatacKaaBaVaccaDtatcSaataaHaagagaat\n\
+ScagactataaRttagcaaVcaHataKgDacatWccccaagcaBgagWatctaYttgaaa\n\
+tctVNcYtttWagHcgcgcDcVaaatgttKcHtNtcaatagtgtNRaactttttcaatgg\n\
+WgBcgDtgVgtttctacMtaaataaaRggaaacWaHttaRtNtgctaaRRtVBctYtVta\n\
+tDcattDtgaccYatagatYRKatNYKttNgcctagtaWtgaactaMVaacctgaStttc\n\
+tgaKVtaaVaRKDttVtVctaDNtataaaDtccccaagtWtcgatcactDgYaBcatcct\n\
+MtVtacDaaBtYtMaKNatNtcaNacgDatYcatcgcaRatWBgaacWttKttagYtaat\n\
+tcggttgSWttttDWctttacYtatatWtcatDtMgtBttgRtVDggttaacYtacgtac\n\
+atgaattgaaWcttMStaDgtatattgaDtcRBcattSgaaVBRgagccaaKtttcDgcg\n\
+aSMtatgWattaKttWtgDBMaggBBttBaatWttRtgcNtHcgttttHtKtcWtagHSt\n\
+aacagttgatatBtaWSaWggtaataaMttaKacDaatactcBttcaatatHttcBaaSa\n\
+aatYggtaRtatNtHcaatcaHtagVtgtattataNggaMtcttHtNagctaaaggtaga\n\
+YctMattNaMVNtcKtactBKcaHHcBttaSagaKacataYgctaKaYgttYcgacWVtt\n\
+WtSagcaacatcccHaccKtcttaacgaKttcacKtNtacHtatatRtaaatacactaBt\n\
+ttgaHaRttggttWtatYagcatYDatcggagagcWBataagRtacctataRKgtBgatg\n\
+aDatataSttagBaHtaatNtaDWcWtgtaattacagKttcNtMagtattaNgtctcgtc\n\
+ctcttBaHaKcKccgtRcaaYagSattaagtKataDatatatagtcDtaacaWHcaKttD\n\
+gaaRcgtgYttgtcatatNtatttttatggccHtgDtYHtWgttatYaacaattcaWtat\n\
+NgctcaaaSttRgctaatcaaatNatcgtttaBtNNVtgttataagcaaagattBacgtD\n\
+atttNatttaaaDcBgtaSKgacgtagataatttcHMVNttgttBtDtgtaWKaaRMcKM\n\
+tHtaVtagataWctccNNaSWtVaHatctcMgggDgtNHtDaDttatatVWttgttattt\n\
+aacctttcacaaggaSaDcggttttttatatVtctgVtaacaStDVaKactaMtttaSNa\n\
+gtgaaattaNacttSKctattcctctaSagKcaVttaagNaVcttaVaaRNaHaaHttat\n\
+gtHttgtgatMccaggtaDcgaccgtWgtWMtttaHcRtattgScctatttKtaaccaag\n\
+tYagaHgtWcHaatgccKNRtttagtMYSgaDatctgtgaWDtccMNcgHgcaaacNDaa\n\
+aRaStDWtcaaaaHKtaNBctagBtgtattaactaattttVctagaatggcWSatMaccc\n\
+ttHttaSgSgtgMRcatRVKtatctgaaaccDNatYgaaVHNgatMgHRtacttaaaRta\n\
+tStRtDtatDttYatattHggaBcttHgcgattgaKcKtttcRataMtcgaVttWacatN\n\
+catacctRataDDatVaWNcggttgaHtgtMacVtttaBHtgagVttMaataattatgtt\n\
+cttagtttgtgcDtSatttgBtcaacHattaaBagVWcgcaSYttMgcttacYKtVtatc\n\
+aYaKctgBatgcgggcYcaaaaacgNtctagKBtattatctttKtaVttatagtaYtRag\n\
+NtaYataaVtgaatatcHgcaaRataHtacacatgtaNtgtcgYatWMatttgaactacR\n\
+ctaWtWtatacaatctBatatgYtaagtatgtgtatSttactVatcttYtaBcKgRaSgg\n\
+RaaaaatgcagtaaaWgtaRgcgataatcBaataccgtatttttccatcNHtatWYgatH\n\
+SaaaDHttgctgtccHtggggcctaataatttttctatattYWtcattBtgBRcVttaVM\n\
+RSgctaatMagtYtttaaaaatBRtcBttcaaVtaacagctccSaaSttKNtHtKYcagc\n\
+agaaaccccRtttttaaDcDtaStatccaagcgctHtatcttaDRYgatDHtWcaaaBcW\n\
+gKWHttHataagHacgMNKttMKHccaYcatMVaacgttaKgYcaVaaBtacgcaacttt\n\
+MctaaHaatgtBatgagaSatgtatgSRgHgWaVWgataaatatttccKagVgataattW\n\
+aHNcYggaaatgctHtKtaDtctaaagtMaatVDVactWtSaaWaaMtaHtaSKtcBRaN\n\
+cttStggtBttacNagcatagRgtKtgcgaacaacBcgKaatgataagatgaaaattgta\n\
+ctgcgggtccHHWHaaNacaBttNKtKtcaaBatatgctaHNgtKcDWgtttatNgVDHg\n\
+accaacWctKaaggHttgaRgYaatHcaBacaatgagcaaattactgtaVaaYaDtagat\n\
+tgagNKggtggtgKtWKaatacagDRtatRaMRtgattDggtcaaYRtatttNtagaDtc\n\
+acaaSDctDtataatcgtactaHttatacaatYaacaaHttHatHtgcgatRRttNgcat\n\
+SVtacWWgaaggagtatVMaVaaattScDDKNcaYBYaDatHgtctatBagcaacaagaa\n\
+tgagaaRcataaKNaRtBDatcaaacgcattttttaaBtcSgtacaRggatgtMNaattg\n\
+gatatWtgagtattaaaVctgcaYMtatgatttttYgaHtgtcttaagWBttHttgtctt\n\
+attDtcgtatWtataataSgctaHagcDVcNtaatcaagtaBDaWaDgtttagYctaNcc\n\
+DtaKtaHcttaataacccaRKtacaVaatNgcWRaMgaattatgaBaaagattVYaHMDc\n\
+aDHtcRcgYtcttaaaWaaaVKgatacRtttRRKYgaatacaWVacVcRtatMacaBtac\n\
+tggMataaattttHggNagSctacHgtBagcgtcgtgattNtttgatSaaggMttctttc\n\
+ttNtYNagBtaaacaaatttMgaccttacataattgYtcgacBtVMctgStgMDtagtaR\n\
+ctHtatgttcatatVRNWataDKatWcgaaaaagttaaaagcacgHNacgtaatctttMR\n\
+tgacttttDacctataaacgaaatatgattagaactccSYtaBctttaataacWgaaaYa\n\
+tagatgWttcatKtNgatttttcaagHtaYgaaRaDaagtaggagcttatVtagtctttc\n\
+attaaaatcgKtattaRttacagVaDatgcatVgattgggtctttHVtagKaaRBtaHta\n\
+aggccccaaaaKatggtttaMWgtBtaaacttcactttKHtcgatctccctaYaBacMgt\n\
+cttBaBaNgcgaaacaatctagtHccHtKttcRtRVttccVctttcatacYagMVtMcag\n\
+aMaaacaataBctgYtaatRaaagattaaccatVRatHtaRagcgcaBcgDttStttttc\n\
+VtttaDtKgcaaWaaaaatSccMcVatgtKgtaKgcgatatgtagtSaaaDttatacaaa\n\
+catYaRRcVRHctKtcgacKttaaVctaDaatgttMggRcWaacttttHaDaKaDaBctg\n\
+taggcgtttaHBccatccattcNHtDaYtaataMttacggctNVaacDattgatatttta\n\
+cVttSaattacaaRtataNDgacVtgaacataVRttttaDtcaaacataYDBtttaatBa\n\
+DtttYDaDaMccMttNBttatatgagaaMgaNtattHccNataattcaHagtgaaggDga\n\
+tgtatatatgYatgaStcataaBStWacgtcccataRMaaDattggttaaattcMKtctM\n\
+acaBSactcggaatDDgatDgcWctaacaccgggaVcacWKVacggtaNatatacctMta\n\
+tgatagtgcaKagggVaDtgtaacttggagtcKatatcgMcttRaMagcattaBRaStct\n\
+YSggaHYtacaactMBaagDcaBDRaaacMYacaHaattagcattaaaHgcgctaaggSc\n\
+cKtgaaKtNaBtatDDcKBSaVtgatVYaagVtctSgMctacgttaacWaaattctSgtD\n\
+actaaStaaattgcagBBRVctaatatacctNttMcRggctttMttagacRaHcaBaacV\n\
+KgaataHttttMgYgattcYaNRgttMgcVaaacaVVcDHaatttgKtMYgtatBtVVct\n\
+WgVtatHtacaaHttcacgatagcagtaaNattBatatatttcVgaDagcggttMaagtc\n\
+ScHagaaatgcYNggcgtttttMtStggtRatctacttaaatVVtBacttHNttttaRca\n\
+aatcacagHgagagtMgatcSWaNRacagDtatactaaDKaSRtgattctccatSaaRtt\n\
+aaYctacacNtaRtaactggatgaccYtacactttaattaattgattYgttcagDtNKtt\n\
+agDttaaaaaaaBtttaaNaYWKMBaaaacVcBMtatWtgBatatgaacVtattMtYatM\n\
+NYDKNcKgDttDaVtaaaatgggatttctgtaaatWtctcWgtVVagtcgRgacttcccc\n\
+taDcacagcRcagagtgtWSatgtacatgttaaSttgtaaHcgatgggMagtgaacttat\n\
+RtttaVcaccaWaMgtactaatSSaHtcMgaaYtatcgaaggYgggcgtgaNDtgttMNg\n\
+aNDMtaattcgVttttaacatgVatgtWVMatatcaKgaaattcaBcctccWcttgaaWH\n\
+tWgHtcgNWgaRgctcBgSgaattgcaaHtgattgtgNagtDttHHgBttaaWcaaWagc\n\
+aSaHHtaaaVctRaaMagtaDaatHtDMtcVaWMtagSagcttHSattaacaaagtRacM\n\
+tRtctgttagcMtcaBatVKtKtKacgagaSNatSactgtatatcBctgagVtYactgta\n\
+aattaaaggcYgDHgtaacatSRDatMMccHatKgttaacgactKtgKagtcttcaaHRV\n\
+tccttKgtSataatttacaactggatDNgaacttcaRtVaagDcaWatcBctctHYatHa\n\
+DaaatttagYatSatccaWtttagaaatVaacBatHcatcgtacaatatcgcNYRcaata\n\
+YaRaYtgattVttgaatgaVaactcRcaNStgtgtattMtgaggtNttBaDRcgaaaagc\n\
+tNgBcWaWgtSaDcVtgVaatMKBtttcgtttctaaHctaaagYactgMtatBDtcStga\n\
+ccgtSDattYaataHctgggaYYttcggttaWaatctggtRagWMaDagtaacBccacta\n\
+cgHWMKaatgatWatcctgHcaBaSctVtcMtgtDttacctaVgatYcWaDRaaaaRtag\n\
+atcgaMagtggaRaWctctgMgcWttaagKBRtaaDaaWtctgtaagYMttactaHtaat\n\
+cttcataacggcacBtSgcgttNHtgtHccatgttttaaagtatcgaKtMttVcataYBB\n\
+aKtaMVaVgtattNDSataHcagtWMtaggtaSaaKgttgBtVtttgttatcatKcgHac\n\
+acRtctHatNVagSBgatgHtgaRaSgttRcctaacaaattDNttgacctaaYtBgaaaa\n\
+tagttattactcttttgatgtNNtVtgtatMgtcttRttcatttgatgacacttcHSaaa\n\
+ccaWWDtWagtaRDDVNacVaRatgttBccttaatHtgtaaacStcVNtcacaSRttcYa\n\
+gacagaMMttttgMcNttBcgWBtactgVtaRttctccaaYHBtaaagaBattaYacgat\n\
+ttacatctgtaaMKaRYtttttactaaVatWgctBtttDVttctggcDaHaggDaagtcg\n\
+aWcaagtagtWttHtgKtVataStccaMcWcaagataagatcactctHatgtcYgaKcat\n\
+cagatactaagNSStHcctRRNtattgtccttagttagMVgtatagactaactctVcaat\n\
+MctgtttgtgttgccttatWgtaBVtttctggMcaaKgDWtcgtaaYStgSactatttHg\n\
+atctgKagtagBtVacRaagRtMctatgggcaaaKaaaatacttcHctaRtgtDcttDat\n\
+taggaaatttcYHaRaaBttaatggcacKtgctHVcaDcaaaVDaaaVcgMttgtNagcg\n\
+taDWgtcgttaatDgKgagcSatatcSHtagtagttggtgtHaWtaHKtatagctgtVga\n\
+ttaBVaatgaataagtaatVatSttaHctttKtttgtagttaccttaatcgtagtcctgB\n\
+cgactatttVcMacHaaaggaatgDatggKtaHtgStatattaaSagctWcctccRtata\n\
+BaDYcgttgcNaagaggatRaaaYtaWgNtSMcaatttactaacatttaaWttHtatBat\n\
+tgtcgacaatNgattgcNgtMaaaKaBDattHacttggtRtttaYaacgVactBtaBaKt\n\
+gBttatgVttgtVttcaatcWcNctDBaaBgaDHacBttattNtgtDtatttVSaaacag\n\
+gatgcRatSgtaSaNtgBatagttcHBgcBBaaattaHgtDattatDaKaatBaaYaaMa\n\
+ataaataKtttYtagtBgMatNcatgtttgaNagtgttgtgKaNaSagtttgaSMaYBca\n\
+aaacDStagttVacaaaaactaaWttBaagtctgtgcgtMgtaattctcctacctcaNtt\n\
+taaccaaaaVtBcacataacaccccBcWMtatVtggaatgaWtcaaWaaaaaaaaWtDta\n\
+atatRcctDWtcctaccMtVVatKttaWaaKaaatataaagScHBagaggBaSMtaWaVt\n\
+atattactSaaaKNaactatNatccttgaYctattcaaaVgatttYHcRagattttaSat\n\
+aggttattcVtaaagaKgtattattKtRttNcggcRgtgtgtWYtaacHgKatKgatYta\n\
+cYagDtWcHBDctctgRaYKaYagcactKcacSaRtBttttBHKcMtNtcBatttatttt\n\
+tgSatVgaaagaWtcDtagDatatgMacaacRgatatatgtttgtKtNRaatatNatgYc\n\
+aHtgHataacKtgagtagtaacYttaNccaaatHcacaacaVDtagtaYtccagcattNt\n\
+acKtBtactaaagaBatVtKaaHBctgStgtBgtatgaSNtgDataaccctgtagcaBgt\n\
+gatcttaDataStgaMaccaSBBgWagtacKcgattgaDgNNaaaacacagtSatBacKD\n\
+gcgtataBKcatacactaSaatYtYcDaactHttcatRtttaatcaattataRtttgtaa\n\
+gMcgNttcatcBtYBagtNWNMtSHcattcRctttttRWgaKacKttgggagBcgttcgc\n\
+MaWHtaatactgtctctatttataVgtttaBScttttaBMaNaatMacactYtBMggtHa\n\
+cMagtaRtctgcatttaHtcaaaatttgagKtgNtactBacaHtcgtatttctMaSRagc\n\
+agttaatgtNtaaattgagagWcKtaNttagVtacgatttgaatttcgRtgtWcVatcgt\n\
+taaDVctgtttBWgaccagaaagtcSgtVtatagaBccttttcctaaattgHtatcggRa\n\
+ttttcaaggcYSKaagWaWtRactaaaacccBatMtttBaatYtaagaactSttcgaaSc\n\
+aatagtattgaccaagtgttttctaacatgtttNVaatcaaagagaaaNattaaRtttta\n\
+VaaaccgcaggNMtatattVctcaagaggaacgBgtttaacaagttcKcYaatatactaa\n\
+ccBaaaSggttcNtattctagttRtBacgScVctcaatttaatYtaaaaaaatgSaatga\n\
+tagaMBRatgRcMcgttgaWHtcaVYgaatYtaatctttYttatRaWtctgBtDcgatNa\n\
+tcKaBaDgatgtaNatWKctccgatattaacattNaaacDatgBgttctgtDtaaaMggt\n\
+gaBaSHataacgccSctaBtttaRBtcNHcDatcDcctagagtcRtaBgWttDRVHagat\n\
+tYatgtatcWtaHtttYcattWtaaagtctNgtStggRNcgcggagSSaaagaaaatYcH\n\
+DtcgctttaatgYcKBVSgtattRaYBaDaaatBgtatgaHtaaRaRgcaSWNtagatHa\n\
+acttNctBtcaccatctMcatattccaSatttgcgaDagDgtatYtaaaVDtaagtttWV\n\
+aagtagYatRttaagDcNgacKBcScagHtattatcDaDactaaaaaYgHttBcgaDttg\n\
+gataaaKSRcBMaBcgaBSttcWtgNBatRaccgattcatttataacggHVtaattcaca\n\
+agagVttaaRaatVVRKcgWtVgacctgDgYaaHaWtctttcacMagggatVgactagMa\n\
+aataKaaNWagKatagNaaWtaaaatttgaattttatttgctaaVgaHatBatcaaBWcB\n\
+gttcMatcgBaaNgttcgSNaggSaRtttgHtRtattaNttcDcatSaVttttcgaaaaa\n\
+ttgHatctaRaggSaNatMDaaatDcacgattttagaHgHaWtYgattaatHNSttatMS\n\
+gggNtcKtYatRggtttgtMWVtttaYtagcagBagHaYagttatatggtBacYcattaR\n\
+SataBatMtttaaatctHcaaaSaaaagttNSaaWcWRccRtKaagtBWtcaaattSttM\n\
+tattggaaaccttaacgttBtWatttatatWcDaatagattcctScacctaagggRaaYt\n\
+aNaatgVtBcttaaBaacaMVaaattatStYgRcctgtactatcMcVKatttcgSgatRH\n\
+MaaaHtagtaaHtVgcaaataatatcgKKtgccaatBNgaaWcVttgagttaKatagttc\n\
+aggKDatDtattgaKaVcaKtaataDataataHSaHcattagttaatRVYcNaHtaRcaa\n\
+ggtNHcgtcaaccaBaaagYtHWaaaRcKgaYaaDttgcWYtataRgaatatgtYtgcKt\n\
+aNttWacatYHctRaDtYtattcBttttatcSataYaYgttWaRagcacHMgtttHtYtt\n\
+YaatcggtatStttcgtRSattaaDaKMaatatactaNBaWgctacacYtgaYVgtgHta\n\
+aaRaaRgHtagtWattataaaSDaaWtgMattatcgaaaagtaYRSaWtSgNtBgagcRY\n\
+aMDtactaacttaWgtatctagacaagNtattHggataatYttYatcataDcgHgttBtt\n\
+ctttVttgccgaaWtaaaacgKgtatctaaaaaNtccDtaDatBMaMggaatNKtatBaa\n\
+atVtccRaHtaSacataHattgtttKVYattcataVaattWtcgtgMttcttKtgtctaa\n\
+cVtatctatatBRataactcgKatStatattcatHHRttKtccaacgtgggtgRgtgaMt\n\
+attattggctatcgtgacMtRcBDtcttgtactaatRHttttaagatcgVMDStattatY\n\
+BtttDttgtBtNttgRcMtYtgBacHaWaBaatDKctaagtgaaactaatgRaaKgatcc\n\
+aagNaaaatattaggWNtaagtatacttttKcgtcggSYtcttgRctataYcttatataa\n\
+agtatattaatttataVaacacaDHatctatttttKYVatHRactttaBHccaWagtact\n\
+BtcacgaVgcgttRtttttttSVgtSagtBaaattctgaHgactcttgMcattttagVta\n\
+agaattHctHtcaDaaNtaacRggWatagttcgtSttgaDatcNgNagctagDgatcNtt\n\
+KgttgtaDtctttRaaYStRatDtgMggactSttaDtagSaVtBDttgtDgccatcacaM\n\
+attaaaMtNacaVcgSWcVaaDatcaHaatgaattaMtatccVtctBtaattgtWattat\n\
+BRcWcaatgNNtactWYtDaKttaaatcactcagtRaaRgatggtKgcgccaaHgaggat\n\
+StattYcaNMtcaBttacttatgagDaNtaMgaaWtgtttcttctaHtMNgttatctaWW\n\
+atMtBtaaatagDVatgtBYtatcggcttaagacMRtaHScgatatYgRDtcattatSDa\n\
+HggaaataNgaWSRRaaaBaatagBattaDctttgHWNttacaataaaaaaatacggttt\n\
+gHgVtaHtWMttNtBtctagtMcgKMgHgYtataHaNagWtcaacYattaataYRgtaWK\n\
+gaBctataaccgatttaHaNBRaRaMtccggtNgacMtctcatttgcaattcWgMactta\n\
+caaDaaNtactWatVtttagccttMaatcagVaagtctVaaDaBtattaattaYtNaYtg\n\
+gattaKtaKctYaMtattYgatattataatKtVgDcttatatNBtcgttgtStttttMag\n\
+aggttaHYSttcKgtcKtDNtataagttataagSgttatDtRttattgttttSNggRtca\n\
+aKMNatgaatattgtBWtaMacctgggYgaSgaagYataagattacgagaatBtggtRcV\n\
+HtgYggaDgaYaKagWagctatagacgaaHgtWaNgacttHRatVaWacKYtgRVNgVcS\n\
+gRWctacatcKSactctgWYtBggtataagcttNRttVtgRcaWaaatDMatYattaact\n\
+ttcgaagRatSctgccttgcRKaccHtttSNVagtagHagBagttagaccaRtataBcca\n\
+taatSHatRtcHagacBWatagcaMtacaRtgtgaaBatctKRtScttccaNaatcNgta\n\
+atatWtcaMgactctBtWtaaNactHaaaaRctcgcatggctMcaaNtcagaaaaacaca\n\
+gtggggWttRttagtaagaVctVMtcgaatcttcMaaaHcaHBttcgattatgtcaDagc\n\
+YRtBtYcgacMgtDcagcgaNgttaataatagcagKYYtcgtaBtYctMaRtaRtDagaa\n\
+aacacatgYaBttgattattcgaaNttBctSataaMataWRgaHtttccgtDgaYtatgg\n\
+tDgHKgMtatttVtMtVagttaRatMattRagataaccctKctMtSttgaHagtcStcta\n\
+tttccSagatgttccacgaggYNttHRacgattcDatatDcataaaatBBttatcgaHtN\n\
+HaaatatDNaggctgaNcaaggagttBttMgRagVatBcRtaWgatgBtSgaKtcgHttt\n\
+gaatcaaDaHttcSBgHcagtVaaSttDcagccgttNBtgttHagYtattctttRWaaVt\n\
+SttcatatKaaRaaaNacaVtVctMtSDtDtRHRcgtaatgctcttaaatSacacaatcg\n\
+HattcaWcttaaaatHaaatcNctWttaNMcMtaKctVtcctaagYgatgatcYaaaRac\n\
+tctaRDaYagtaacgtDgaggaaatctcaaacatcaScttcKttNtaccatNtaNataca\n\
+tttHaaDHgcaDatMWaaBttcRggctMaagctVYcacgatcaDttatYtaatcKatWat\n\
+caatVYtNagatttgattgaYttttYgacttVtcKaRagaaaHVgDtaMatKYagagttN\n\
+atWttaccNtYtcDWgSatgaRgtMatgKtcgacaagWtacttaagtcgKtgatccttNc\n\
+ttatagMatHVggtagcgHctatagccctYttggtaattKNaacgaaYatatVctaataM\n\
+aaaYtgVtcKaYtaataacagaatHcacVagatYWHttagaaSMaatWtYtgtaaagNaa\n\
+acaVgaWtcacNWgataNttcaSagctMDaRttgNactaccgataMaaatgtttattDtc\n\
+aagacgctDHYYatggttcaagccNctccttcMctttagacBtaaWtaWVHggaaaaNat\n\
+ttaDtDtgctaaHHtMtatNtMtagtcatttgcaaaRatacagRHtatDNtgtDgaatVg\n\
+tVNtcaaatYBMaaaagcaKgtgatgatMgWWMaHttttMgMagatDtataaattaacca\n\
+actMtacataaattgRataatacgBtKtaataattRgtatDagDtcRDacctatRcagag\n\
+cSHatNtcaScNtttggacNtaaggaccgtgKNttgttNcttgaaRgYgRtNtcagttBc\n\
+ttttcHtKtgcttYaaNgYagtaaatgaatggWaMattBHtatctatSgtcYtgcHtaat\n\
+tHgaaMtHcagaaSatggtatgccaHBtYtcNattWtgtNgctttaggtttgtWatNtgH\n\
+tgcDttactttttttgcNtactKtWRaVcttcatagtgSNKaNccgaataaBttataata\n\
+YtSagctttaaatSttggctaaKSaatRccgWHgagDttaaatcatgagMtcgagtVtaD\n\
+ggaBtatttgDacataaacgtagYRagBWtgDStKDgatgaagttcattatttaKWcata\n\
+aatWRgatataRgttRacaaNKttNtKagaaYaStaactScattattaacgatttaaatg\n\
+DtaattagatHgaYataaactatggggatVHtgccgtNgatNYcaStRtagaccacWcaM\n\
+tatRagHgVactYtWHtcttcatgatWgagaKggagtatgaWtDtVtNaNtcgYYgtaaa\n\
+ctttaDtBactagtaDctatagtaatatttatatataacgHaaaRagKattSagttYtSt\n\
+>THREE Homo sapiens frequency\n\
+agagagacgatgaaaattaatcgtcaatacgctggcgaacactgagggggacccaatgct\n\
+cttctcggtctaaaaaggaatgtgtcagaaattggtcagttcaaaagtagaccggatctt\n\
+tgcggagaacaattcacggaacgtagcgttgggaaatatcctttctaccacacatcggat\n\
+tttcgccctctcccattatttattgtgttctcacatagaattattgtttagacatccctc\n\
+gttgtatggagagttgcccgagcgtaaaggcataatccatataccgccgggtgagtgacc\n\
+tgaaattgtttttagttgggatttcgctatggattagcttacacgaagagattctaatgg\n\
+tactataggataattataatgctgcgtggcgcagtacaccgttacaaacgtcgttcgcat\n\
+atgtggctaacacggtgaaaatacctacatcgtatttgcaatttcggtcgtttcatagag\n\
+cgcattgaattactcaaaaattatatatgttgattatttgattagactgcgtggaaagaa\n\
+ggggtactcaagccatttgtaaaagctgcatctcgcttaagtttgagagcttacattagt\n\
+ctatttcagtcttctaggaaatgtctgtgtgagtggttgtcgtccataggtcactggcat\n\
+atgcgattcatgacatgctaaactaagaaagtagattactattaccggcatgcctaatgc\n\
+gattgcactgctatgaaggtgcggacgtcgcgcccatgtagccctgataataccaatact\n\
+tacatttggtcagcaattctgacattatacctagcacccataaatttactcagacttgag\n\
+gacaggctcttggagtcgatcttctgtttgtatgcatgtgatcatatagatgaataagcg\n\
+atgcgactagttagggcatagtatagatctgtgtatacagttcagctgaacgtccgcgag\n\
+tggaagtacagctgagatctatcctaaaatgcaaccatatcgttcacacatgatatgaac\n\
+ccagggggaaacattgagttcagttaaattggcagcgaatcccccaagaagaaggcggag\n\
+tgacgttgaacgggcttatggtttttcagtacttcctccgtataagttgagcgaaatgta\n\
+aacagaataatcgttgtgttaacaacattaaaatcgcggaatatgatgagaatacacagt\n\
+gtgagcatttcacttgtaaaatatctttggtagaacttactttgctttaaatatgttaaa\n\
+ccgatctaataatctacaaaacggtagattttgcctagcacattgcgtccttctctattc\n\
+agatagaggcaatactcagaaggttttatccaaagcactgtgttgactaacctaagtttt\n\
+agtctaataatcatgattgattataggtgccgtggactacatgactcgtccacaaataat\n\
+acttagcagatcagcaattggccaagcacccgacttttatttaatggttgtgcaatagtc\n\
+cagattcgtattcgggactctttcaaataatagtttcctggcatctaagtaagaaaagct\n\
+cataaggaagcgatattatgacacgctcttccgccgctgttttgaaacttgagtattgct\n\
+cgtccgaaattgagggtcacttcaaaatttactgagaagacgaagatcgactaaagttaa\n\
+aatgctagtccacagttggtcaagttgaattcatccacgagttatatagctattttaatt\n\
+tatagtcgagtgtacaaaaaacatccacaataagatttatcttagaataacaacccccgt\n\
+atcatcgaaatcctccgttatggcctgactcctcgagcttatagcatttgtgctggcgct\n\
+cttgccaggaacttgctcgcgaggtggtgacgagtgagatgatcagtttcattatgatga\n\
+tacgattttatcgcgactagttaatcatcatagcaagtaaaatttgaattatgtcattat\n\
+catgctccattaacaggttatttaattgatactgacgaaattttttcacaatgggttttc\n\
+tagaatttaatatcagtaattgaagccttcataggggtcctactagtatcctacacgacg\n\
+caggtccgcagtatcctggagggacgtgttactgattaaaagggtcaaaggaatgaaggc\n\
+tcacaatgttacctgcttcaccatagtgagccgatgagttttacattagtactaaatccc\n\
+aaatcatactttacgatgaggcttgctagcgctaaagagaatacatacaccaccacatag\n\
+aattgttagcgatgatatcaaatagactcctggaagtgtcagggggaaactgttcaatat\n\
+ttcgtccacaggactgaccaggcatggaaaagactgacgttggaaactataccatctcac\n\
+gcccgacgcttcactaattgatgatccaaaaaatatagcccggattcctgattagcaaag\n\
+ggttcacagagaaagatattatcgacgtatatcccaaaaaacagacgtaatgtgcatctt\n\
+cgaatcgggatgaatacttgtatcataaaaatgtgacctctagtatacaggttaatgtta\n\
+gtgatacacaatactcgtgggccatgggttctcaaataaaatgtaatattgcgtcgatca\n\
+ctcacccacgtatttggtctaattatgttttatttagtgacaatccaatagataaccggt\n\
+cctattaagggctatatttttagcgaccacgcgtttaaacaaaggattgtatgtagatgg\n\
+taccagtttaattgccagtgggcaatcctaagcaaaatgagattctatcctaaagtttgg\n\
+gcttgatataagatttcggatgtatgggttttataatcgttggagagctcaatcatgagc\n\
+taatacatggatttcgctacctcaccgagagaccttgcatgaagaattctaaccaaaagt\n\
+ttaataggccggattggattgagttaattaagaccttgttcagtcatagtaaaaaccctt\n\
+aaattttaccgattgacaaagtgagcagtcgcaataccctatgcgaaacgcctcgatagt\n\
+gactaggtatacaaggtttttgagttcctttgaaatagttaactaatttaaaattaatta\n\
+acgacatggaaatcacagaacctaatgctttgtaggagttatttatgctgtttactgcct\n\
+ctacaaccctaataaagcagtcctaagaatgaaacgcatcttttagttcagaaagtggta\n\
+tccagggtggtcaatttaataaattcaacatcgggtctcaggatattcggtcatataatt\n\
+tattaagggctcttcgagtcttactctgagtgaaattggaaacagtcatccttttcgttg\n\
+tgaggcatcttacaccgctatcgatatacaatgcattccaccgcggtgtcccgtacacaa\n\
+ggaaacttgttaccttggggatataagaaaactcacacgtctcattattaaactgagtac\n\
+aatttttgcacgagaaagtaatgcaatacaatatgatgaaagccagctaatgaaaaggga\n\
+tggaacgcacctcggatctgttgcactggattaaaatccgattatttttaaaaatattca\n\
+gtgctagagcatatcaggtctacttttttatctggtatgtaaagcccacggagcgatagt\n\
+gagatccttacgactcaacgaaaagttataacataactcccgttagccaaagcccaatcc\n\
+cgattactgccctaccctaacgtctgccatctaaatatcgaacttgttatgatcaatgtg\n\
+actacctcccaccctttccccttcatttgttccactggggataagctagcgttttcagaa\n\
+tcaatgcaataagaatagccaattgtctcacttcatcagagctcttggcaattccaggcg\n\
+ctacgtggttctggaatatattcatttttcaaatagtaatacgtttagtgttgctattgt\n\
+ctacacgtttggatattacgttatgtgagcggacatcaatagttgtctaactctttagta\n\
+agccagagatagcactcttagcgaatggataccatcttccataagtttagttaatagtcc\n\
+gaaacaactgcttcgagcatatttgaacctccttgtaggcaaatagcctcttcaaagcaa\n\
+tcttactaatagatagagtttgttttaagggactactagaaatgggacaatcttaatagt\n\
+atgacctaaactgacatttaaagatatatccaggtggcaagcataaagatcattgcgcca\n\
+cctccaccgtgggattacttatcagtcgatatcctatatgctaagtttgcgacggcagaa\n\
+tacaaactaagctgagttgatgctaaccttacctatgataccccattggaccggttaaca\n\
+gccctacttattccaaataaaagaacttttatgctgtagaagctattatagtgatgcctg\n\
+gtaacttcagtatattaaaatgacacacatacgccatatagagctcctggaactttgaat\n\
+aatgagcgaacttcgaagttgaagagcaagaaaccatatgtcacggttgcctaaagcccg\n\
+gtaaccagacatgtgctatcattgatcattatcgaggttttcataaccttgacccattat\n\
+cggctgtgcgcggacaagtacttaaatcactagtttcttcacctgcttatcggtaagaaa\n\
+taaggttggcaaagaatcgcataagacggacgtagagccgcagcgttgtgcgagtccagg\n\
+tgcatgcgcagcaataggattttaaattttgttccatttttaatttagccgtaaggatgt\n\
+ccgtaaatgattgaaaattggattcaatctttgggcctatgctactggaacctgatcgac\n\
+aaaatttcaaacatacgttaactccgaaagaccgtatttttgcggctagaatagtcagtc\n\
+gcttggagccatataccttaccacttaaacgacgtgctcctgtagttgaaatataaacag\n\
+aacacaaagactaccgatcatatcaactgaagatctttgtaactttgaggcgaagcaccc\n\
+tcttcgagacaactaagagtaaagtaccgggcgccgcaaggagtcgattgggaccctaaa\n\
+tcttgacgaattgctaagaggctcagagctaccactgtaatttctctagagcccataata\n\
+aatgaacgatacatccgtaggtagcacctaagggattataatggaagccaaatgcagtta\n\
+ataatattatatactggcgtacacgattcgacggatctctcacatagtgattcacgaccc\n\
+ccccctttgattgacacagcgtcagcattttgcaagaacgatcttctgcatagggtgcgc\n\
+caccgtaaggatgacgtcgaagctacaactgggtataatttaccatgcttccctgatgct\n\
+gagtgcaatacactaagaatgagtttttaccccatatcaccagtatttgttctgttattg\n\
+cgaagaaatggctatgctgagttggcgactaaagtcacccatcctttttattaggtaacc\n\
+ccctcccttaaactaactgatttgctggagctgccctgcatacatatactttatcattta\n\
+tggacgtccgtgacgcttattatccaccatagtcgatatgctacacggattcattaatgg\n\
+atcgtaggagtttaagttatatttactaagatcggtctcggctactatcccgccttaccc\n\
+ggcgctatttacggccatttttaatatattgacggtaattattcctatggtttcgaccgc\n\
+acgtccttggacaagaaagaatggcaaaaaaaatgtaaaagaaaaaaaatattgagtccc\n\
+taccatcatataaaaaatatgtgatgagtaacttgacgaaatgttagtggttattaaaga\n\
+ctatctattacaccttttgttttctgtcgtagtatattaaagtctagaagccttacagga\n\
+aaatcagggttatacagccgatactccgcagcatgaatcatcgaggaggtgtcctaccat\n\
+cgcgccttgtaatcttgtctgtgtatactgtatttagaccttttatacaaagtaaatatc\n\
+tcggctttatgtgattgggaggggcctactcaaacatgatgacttgacctaataatcact\n\
+gtgcgggcgtcttatgactagctattccttgaaatccaccaccaaatggttaatatgtaa\n\
+aaactttgacgatgaaacaaggtgaatgtgtagttactttgtgtaattagctgcgtcgag\n\
+cattgcttgtaaaaccgtcaatcgcacacgttacttccataaaatttctacgaatacacc\n\
+cttcttaaaaaaaacgtaggaattcacgagtttaacaaacgataactgtataaagtggaa\n\
+gtccgaagaaagcagatgcccgaactactcgaagatgtttcgttttcttaaccatagggg\n\
+cttcttaatggcccactacgcacattttgttcaagcccgagagggacatccccattacgg\n\
+gagtattactaaaactgttccgtaatacgttcagcaagggatgaaaaaggccactgctca\n\
+agttattgacgtgggagtattacatcggaagcctgaatcccacactatgatggtctgtac\n\
+aggcctagggactgcgtctagacggtattaccggcttctaatcatacgatcgtgagtctt\n\
+aacgggaagtaaggctcacacctaccccaaaccatttatctatgtaagtataaaattgtg\n\
+cgtaagtgttcaaagtggacaataaagacgtggcaaaaacccccgcacataagccgcttt\n\
+agatttcacaaataccaatgcggttaaaaacatccttgagtcgtacatacaccatactcg\n\
+cgttaaacggatataacagaagataataaatccggatgtggagtcggtgtaactatagaa\n\
+agccaagtgaaataatgcttaccagtcatttagctatacggctttcatttcatgtcaaga\n\
+gggtggagtttgacctgtacagttgatatatcaccgatacttagaactcacctaaagcta\n\
+aaattgctcgcagcgtgtaatccgcatattacaaacaatagatgggattcattatacata\n\
+agacacgatgatctgctttttcaggttgcgagatgttgcctatcgtcaatcgagtcctgc\n\
+cttacaccacttaaacaaaagtattgacagggaacctattttcgaggtattatatagtcc\n\
+agcttgaatatcaatttgacagttaacctagtgaaaatcagtaagaggaaatacgccaca\n\
+ttctccagtgaaattctacgggttatcgtctagtccaactatcaattataactcacgaga\n\
+tataagtaaattctcgtacttggcctgatttttattatactttggatccttagtaaacag\n\
+gaagggagaaaccttcaacgaaaaacactggattttgttttactctcaaagctcttatat\n\
+gacggaaataccctgtcaagtcttaactttattactagactaatgaaatgggcttggggt\n\
+ggccagaatcatagtacaatttagcggatacactattcggactttcctatcggctgtctg\n\
+gttggataagtatggggactaataggctagacatacctatacttaaactatacaggcgtc\n\
+atctatctctgcaactttggagttccctgatgttctcccgccctttgggttcacatcttc\n\
+tataccgacacccctaataacgattagtttgtgggttagagtaaattaatacggttaata\n\
+ttaatgtatcgttgaaaagctggtgtcgccaataaggtaaccggctaggcagagtatatg\n\
+tcacgaagtataactaccctaatgataagctgtaggaataaaattaatgctgtctctaag\n\
+cgaagagatatttccgactctgttttaatgacgaatctcattacttctgacttgcaaatg\n\
+ttcaatatggcacggtttcacggcacctttgtgacgcatataatgaacttagaagattat\n\
+aacgacggaactttatatgataatccgttacgattaaagaatctgttaaatatcataatg\n\
+gcattcagttctagaccgtgcatcatggtaaacttactttctctgcatggcgacatacat\n\
+ttcgctattcaaattcgcgtgtggttacacccactcgcacctttggaatattaagagaag\n\
+atgatcagaaaatccattcgctcaatttttctgacgtacgtctaatttatcctaggagac\n\
+aaatcgttttatgtctctcacatttttgaagaaaggttcgagagacaatactcaggtcct\n\
+gaactgctagaagatactcggtggagcgtggcaacaatgaaaaactcgtgacataaatga\n\
+atgatacttttccaagttcagttaagtgaatatgtttaacatacccggcttttcgatctt\n\
+aagctgacgctggacgtgcgagtaatgtcagtctcttacatacactagtgactccaagtt\n\
+tcgtcaaaaacgccccctcccttctcgagcccactcacgctatgtattgacgcgaacttg\n\
+ttcgggatcagacttttcaggagttcggtcgcgtgtccctatgtgctaatatataagtta\n\
+gatcgcattagatgctaatctgaatacttatagacgaccttcaacgagaacgggtaccac\n\
+cttgaggctagagttaggtgtgaaacgacaggtagggacatataaaatttgagtgcggct\n\
+ttagttaagggtttaattacctactcaaacatcacgctcgcgcccttcgtacgtaatcga\n\
+ccatctagaggctaaggggactgtactaggtagtgattaatgatatcctagacgcacgtg\n\
+ccttagatcttcagactctgatggtccgcgatcaccgtaattgtagtcctccaactcgat\n\
+cactttgttggcgtcaaagaaattacgatatctaaatacttataatacaataaccaagga\n\
+tgagaatgactcatcgcgttggagttatattgcttgaagttctatggaatgaaagcacgt\n\
+tatctgccgtcccaatatctccagtgagctaattcattggacggtccactttgatcaatc\n\
+cccgaggagatgttcggacactttagtctgtaacacttagcgttgagaccacgaacaatt\n\
+gattactcagtcttgaaggtgttttccaaagttcattttaaataagactacgataggcct\n\
+ttcctattgatataaactacccggctctgttgttcgtgtgagtcgtacttctctgtgttt\n\
+ttctgattatagcaagattcgattcttagtgtaaacagcgatttttatttgacccgtcaa\n\
+tgagaagcgcataggatctaagcaaaattatcaagttgtgccacaaggtaagatctttcc\n\
+agttattgcaggtaggatgtatcccacgttgatagtatgaggtctgacgtcaactgtcta\n\
+ggagagttgaccgcgtgcgggtacaccggatttgcatcgatgttgagaacgcagaactcc\n\
+cactgtcgtggcggcgttcctgatatttagcaagaggcgttgataaagccctcatcatct\n\
+agatctcgacctcatctgccctcttgctccatcattttctacacagactactttcctatc\n\
+tacgttagtataattgctttctatcttagtatcatttagagcttctccgtcaacaggttc\n\
+gtgctattaaagttagtacgaaagggacaacttgtagcaacgcatttaatcggttttcga\n\
+ctacttcgcacaaaatcagataaagaagtttgtcattctattagacattgaattgcgcaa\n\
+ttgacttgtaccacttatgatcgaacactgaatcaagactgtgattaactaaaatagaca\n\
+agccactatatcaactaataaaaacgcccctggtggtcgaacatagttgactacaggata\n\
+attaattggactggagccattacattctctacaatcgtatcacttcccaagtagacaact\n\
+ttgaccttgtagtttcatgtacaaaaaaatgctttcgcaggagcacattggtagttcaat\n\
+agtttcatgggaacctcttgagccgtcttctgtgggtgtgttcggatagtaggtactgat\n\
+aaagtcgtgtcgctttcgatgagagggaattcaccggaaaacaccttggttaacaggata\n\
+gtctatgtaaacttcgagacatgtttaagagttaccagcttaatccacggtgctctacta\n\
+gtatcatcagctgtcttgcctcgcctagaaatatgcattctatcgttatcctatcaacgg\n\
+ttgccgtactgagcagccttattgtggaagagtaatatataaatgtagtcttgtctttac\n\
+gaagcagacgtaagtaataatgacttggaataccaaaactaaacatagtggattatcata\n\
+ctcaagaactctccagataaataacagtttttacgatacgtcaccaatgagcttaaagat\n\
+taggatcctcaaaactgatacaaacgctaattcatttgttattggatccagtatcagtta\n\
+aactgaatggagtgaagattgtagaatgttgttctggcctcgcatggggtctaggtgata\n\
+tacaatttctcatacttacacggtagtggaaatctgattctagcttcgtagctgactata\n\
+ctcaaggaaccactgctcaaggtaggagactagttccgaccctacagtcaaagtggccga\n\
+agcttaaactatagactagttgttaaatgctgatttcaagatatcatctatatacagttt\n\
+ggacaattatgtgtgcgaaactaaaattcatgctattcagatggatttcacttatgcctt\n\
+agaaacagatattgcccgagctcaatcaacagttttagccggaaacaatcgaagcatagg\n\
+gacaatgtatcttttcctaaattgccatgtgcagatttctgagtgtcacgaagcgcataa\n\
+tagaatcttgtgttgcctcaactcgttgaaaagtttaaaacaatcgcagcagtctttttg\n\
+gggtctactgtgtgtttgcaaaataactgaaagaaacgcttgaacaactctgaagtagct\n\
+cgagtactcattaaagtgtaacacattagtgaatatcggccaatgaaccaaacgcttccc\n\
+ggtacgctatctctctcatcgggaggcgatgtgcaggttatctacgaaagcatcccttta\n\
+cgttgagagtgtcgatgcatgaacctcattgtaacaatagcccagcaaattctcatacgt\n\
+gcctcagggtccgggcgtactcctccatggaagggcgcgcatctagtgttataccaactc\n\
+gctttttaactactatgctgtagttctacaggcatagtggccagtattttctaacttctc\n\
+tggatagatgctctcactcctcatccatcacggcttcagtttacgtcttacttgcttgtt\n\
+cagcaacggatggaggcattaagtatcttcactgttccctaaaattgctgttcaatatca\n\
+aagtaaggacgatacagggaaagctcaagcacactcattgaatactgccccagttgcaac\n\
+ctcacttaatctgacaaaaataatgactactctaagtgttgcggaagcagtctcttccac\n\
+gagcttgtctgtatcacttcgtataggcatgtaactcgatagacacgaacaccgagtgag\n\
+aaactatattcttgcttccgtgtgtgtgacaccaggtaattgatgcggatataagctgga\n\
+gatcactcacgcccacacaaggcgctgctacctctttattccaatgtgtaagaatttgct\n\
+aacttcatttctagaccgcagctttgcggtcataatttcacggtacggacccttgggtta\n\
+gagacttgataacacacttcgcagtttccaccgcgcacatgttttagtggcttctaacat\n\
+agaatttttgttgtgacataaagagtgcgtgggagacttgcccgaccgttaagccataat\n\
+caattgaaagccccgtgagtcacatctaattggttgtactgcgcatttagctatccttta\n\
+gctgactcgaagagattcgattcctaatataggttaattagatggctgccgcgcgaagta\n\
+aaacgtgaaaaacgtagtgcgcagatctgcataactcgcgcttaattacttatgagtagt\n\
+tccaagttcgctacgttatgagagagattggaattaagcaaatatgttttatggtgattt\n\
+tgggatgagaaggactgctaagtacggctactaaacaaatttctaaaaccgccatctacc\n\
+ttatcttggagacatttaagttgtatatgtcactagtctagcttttgtctgtgggacgcg\n\
+ttctcggaatgagggaaatgcaagagccgattcatcaaatgcttatctaagaaagtagtg\n\
+gactattacaccaagcacgaatgccagggaactgctttcttgctcaggacctcgcgacaa\n\
+ggtaccccgcataagtcctagaattacatttggtcagcaatgctgacatttgaccgtgaa\n\
+aacataattttaatcagaaggcagctcacccgcttgctctagatcttatctttgtatgaa\n\
+tgtcagaatttactgcaatatccgttccgaatagtgagggcttagtatagttctctgtat\n\
+acaggtcacatcaaactccccctgtcctagtacagctctgagctttaattaattgcatac\n\
+atttccttcaatcatcagatgaaaacaccgcgaatcatgctcttctcgtatagggcaaga\n\
+gaagcaacaaacaactagcccgactcacgttcatccgccgtatccttgttcagttcttac\n\
+tccgtattaggtcagcgaaatctaatcagaataatcggtcgcgtatcaaaattaaaatcc\n\
+cgcttgaggttgacaattaaaacgctgagcagttatcggctattagatagtggggtgaaa\n\
+gtaattggctggaattatgttaaaacgtgatattaagctaaaatacgctacttgttgccg\n\
+acctaattcagtcattcgatattcagttagagccaagaataacaagcttgtataaattga\n\
+acggggtgcactaaacgatgtgttactctaatattcagcttggagtatacctgaaggcga\n\
+attcatgtatcggccaataataagacgttgaagatcacaatttggactagcaaaagaagg\n\
+tgatttatgcgtggggattgagtccactgtacgagtacggtctctggaaaattataggtt\n\
+cagggaatataaggaagtaaagataattaccaagagatttttggtatcgctatgacccag\n\
+aggtgttctaacgtctgttttgatccgcagaatttctgcctcaatgcatatttgacggac\n\
+ttgaactagagcctctaaagttaaatggcgacgcaactgttcctaaacttcaattattac\n\
+tactctttttttcctagggtattgtagaggccagtggacaaaataaatcaaatttaagat\n\
+gtttcggacattaacatcccccgtagcatagaaatcatcagttatccaatctctcatcga\n\
+gcttttacaatttctgctggcgctatggacagcatatgccgcgagacctccgcaagactc\n\
+acttgatcactgtaagtatcttcattagaggttagagcctatagttaagctgctgaccta\n\
+gtaaaattggtattttctaattttattgctcaagttaaaggttagtgaagggataatgac\n\
+gttatttttgaacaatgggttgtattcaattttatatcacgaatggaacccttcattccc\n\
+ggcataatactagacgacacgaacaagctccgatctatcagccaggcacgtgttaaggtt\n\
+taattccggcaaaccaatgaagcatcaaaaggtgacctgatgcaacttagggtcacgatg\n\
+agtttttcaggactacttattacctattaataagttaacatgagccttcataccccgtaa\n\
+gacaatacatactccaccaattagaattctgagccatcttatctttttgtatcatcgaag\n\
+ggtatggccgaataggttaattagttactcctaacgtctctacaggcatgcatttgacgc\n\
+accttcgaaaatagtcaatctctcgccacacgcgtctagtatgcagcatcaaaaatatag\n\
+tccacggtttccggattaccaaacgcggcaaagagaaacattgtatcgacggagataact\n\
+taatacagaaggaaggggcatcttcgaatacggatgaataattctatctgtttattctga\n\
+catcttgttttcaggttaatcttacgcattcaaatgacgcctgccccatgcgtgcgcaat\n\
+tattttctaatattgacgagagcaatctcactccttttgggtctatttatgttttattga\n\
+ggcacaagcctatacagaacaggtactattaaggccgtgagtgtgagactcaaaccgtgg\n\
+aaacaaaggatgggttgttcttggtacaagttttagtgcatgtgggcaatccttaccaaa\n\
+atcagatgctatccttaactttgggctgcatttaagatggcggttggaggcctgtgagaa\n\
+tcctgcgtgtcatctttaatgaccgaattcatccatgtagattcagatcacacactcatt\n\
+ccttgatgttgtctaaacaaaagttgttgtggacgcattggagggagttaagtaacaact\n\
+tgggatcgcatacttataaaaattatatgttaaactttcacaaacgctgaagtccaaagt\n\
+aactagcccaaacgcctcgagagtcactaggtattaatggtgtttgagttcctgtgaaat\n\
+agtgttcgaaggtaaaatttatgtaccaaatcgaaagaacacttaataaggcttgcttgc\n\
+acggaggtatgatgtttactgactctacaaccctaattttccagtacgtacattcattcc\n\
+aataggttagttctcaaagtgctatacaggctcctcaattgatgatatgcttcagccgct\n\
+ctatggatattagctcattttatttaggaagcccgcttagaggcttactatgagggaaat\n\
+gccaaaatgtcatacttttcggtgtgtcccatatgacaccgctttacatagaatttgaat\n\
+taaaacgcgctctcccgttcactaccatacttggtaccgtgcgcatattacatatagata\n\
+taggatcattttttaaagctgtactaggtttgatcgacaatcttatgctatactatatga\n\
+tgtaaccctcataatcaataccgatcgtacgatcctagcataggtggcaagcgattttat\n\
+gccgattattgtgttaaatagtctgtgagtgtgattatcagggctacgttggtagagggg\n\
+ttgtatagacctcgcacacattgtgacatacttaacaatatacgaaaactgatataataa\n\
+atccccttacccaaacaccaatcccgttgaatcaactaccataacgtctcccatataaat\n\
+tgcctacttgtttgcataaatctgaatacataacaccattgcaccttcttgtgttccaat\n\
+cccgttaagattgccttgtcagatgatatgcaagaacaatagcatttgctagcaattatt\n\
+aacagctcttcgaattgcctccacataacgcgggagggtatattttaatttggcaaatac\n\
+taagtactgttggcgtcatatgctattaacggttggatattaagttatgtcagccgtaag\n\
+caagagtgggcgaaatattttgttacccagtgagagcactcttagagtttggatacaata\n\
+ggccatatgttgacttaagaggacgtaactacgccgtacaccattgttcaaccgacttct\n\
+tggcaaatagaatcgtattagcaatcttaagaatagagacacgttcgtgttagggtatac\n\
+tacaaatccgaaaatcttaagaggatcacctaaactgaaatttatacatatttcaacgtg\n\
+gatagatttaacataattcagccacctccaacctgggagtaattttcagtagatttacta\n\
+gatgattagtggcccaacgcacttgactatataagatctggggatcctaacctgacctat\n\
+gagacaaaattggaaacgttaacagcccttatgtgtacaaagaaaagtaagttgttgctg\n\
+ttcaacagatgatagtcatgacgcgtaacttcactatagtaaattgaaacaaatacgcaa\n\
+tttagacagaatggtacggtcatgaatgacagtaattcgaagtgctagaccaacttaaaa\n\
+taggtaaacgtgcccgaaaccccccttaacagaaagctgctatcatggtgcagtatcgac\n\
+gtgttcagaaacttgtaacttttgagcaggtccgagcacatggaagtatatcacgtgttt\n\
+ctgaaccggcttatccctaagatatatccgtcgcaaactttcgatttagtcccacgtaga\n\
+gcccaagcgttgtgcgactccacgtgcatgcccagaaatacgagtttaaatttggttaca\n\
+tggttaattttgaccgaagcatcgcactttatgattgataattggattcaatatgtcgcc\n\
+ctatgcgaatgcaacatgatccacaatttggctataagacgtttaatccgtatcacactt\n\
+tgtttgcggctagtatagtaacgcccgtgcaccaagagtcagtaacaattataagtactc\n\
+cgcaggtacttcaaatataaaaactaatcaaacacgacccatatgatcatctgaagatat\n\
+ttggaactttctcgacaaccaccctcgtactcaatacttacactaatcgacaggcacacg\n\
+caacgtgtacagtcgcaccatattgagtcaagatttgcttagtggcgatgagcgtacacg\n\
+cttatttctctagtcacaattagttatctacgagacatcacgagggagcaaataagcgat\n\
+gttatggctacacataggcacgtatgaatatgatataagccagttaaacagtcgaaccat\n\
+cgagcaaattctcatgcaccaacccacacgttgaggcacaaagagtaagctgtttgaatg\n\
+taacttcttctgctgagcgggccccaacgtaaggatcaactagaagagaaaactcggtat\n\
+tagtttaaatgcgtcacggagcatgagtgcatttcactaagaatgtctgtgtaaccaata\n\
+taacatctatttgttatctgattgcctacttatggctttgcggtcgtggcgactaatgtc\n\
+tccaatccttttgaggtcggtaccaactccctttaaattacgctgtgcaggctcatgcac\n\
+tgcatacatatacggtagcaggtagggacctcacgcacccttattataatcaatagtagt\n\
+tatcagtcaacgaggcaggaatgctgaggtcgaggtgttggtatattttctatgtgccgt\n\
+ctaggcgactatcacgcattaccaggcgagatttaagccaattttgaatatagtcaacgt\n\
+aatttttactatgggttccaccgaaacgccttgcacaactaagaatcccataaaatatcg\n\
+atatcaaataaaagattgtgtcaataccttcatatatattttttcggttgactaacgtga\n\
+actaaggttaggggttttgtatgtctatataggaaacagtttcttttctgtcctacttta\n\
+gtaaagtcttcaagccttactccaaaatcacggtgattaagccgttactcagcagcatga\n\
+ttctgcctgctcgggtcctaaaatccagccttgtaagagtcgctgtgtattagctaggga\n\
+gacctttgttaaaaaggatatatcgcggcgggatgtgagtgcgtggcgcatactcaatct\n\
+tcagctcgtgtcattataatatctctcccccacgcttttcactagatatgccgtgtaagc\n\
+aaacaccttatgcttaatttcgaaaatattggtacttgaaaaaagctgtaggggtactta\n\
+atgtctggtaggagatcaggagagaattgagtgtaaaaccgtaaagccctcacctgactt\n\
+catgtaaatggcttagaagactccatgatttaataaatactacgaaggaaagactggatc\n\
+taaagataactctagtaaggccaactcccttcaatgctgttgccagttataatccaagag\n\
+ctgtccttttctgaaccatagcggcttctgaagcgaactagaagcaaagttggttctagc\n\
+cagacagccacataccctgtacgggtgtattactaaaactggtccggtattagttcacca\n\
+agggaggaattaggcaaaggatctaggtatgcaagtcggagtattacatccctaccctga\n\
+atccatcaataggttcctctgtactggccttcgcaatgagtattcaaggttgtacagccg\n\
+tataataataagatagtgactatgaacgggaagtaacccgctcaccttccccaaaacatt\n\
+gttatatctaagtattaaagtctgccgtagtgttaatactcgaaaataaacaactggcaa\n\
+attacaccgcacttaagccgcttttgatttatatttttccaatgcgcttttaaaaataat\n\
+tcagtcctacatactaattaagacccttaaacggagatatcacaagttaagttttaacca\n\
+tctcgactaggtggaactatagatacccaactcaatttatcattacctgtaatgttccta\n\
+gaaggattgcatttcatgtcaagacggtggagtttcacagcgaaacttcagtgtgaacag\n\
+attctgagaaatcacctaaacctattagtcagagcacccggttagaaccagttgtcaaaa\n\
+aatagagcggttgcatgagacagaagtaacgatgagatccgttgtaacgttgagacatct\n\
+ggcctatcgtcaatacagtcctcccttaaaaatatttttaaatactaggcaaacccaaca\n\
+taggttagtcctatgtgatacgccacatggtatatcattttgtaacgttacctagggata\n\
+atcaggaagtggaattacgcaaaagtagacagtgaaatgcttagggttatagtctagtcc\n\
+aaagataaaggataaagcacgtcagagaactatattagccgaatgggaatcattgttagg\n\
+agactgtggatcatgtctaaaaagcaacgcagaaacagtcatcgaaaaaatctcgttttt\n\
+gtttgaatctaaaagagctttgatgaccgatagtacctgtatactagttactgtattacg\n\
+tgtctaatgatttcggattggggtccccagaatcagacgtcattgtagacgattcaagtt\n\
+taccaatttaatttcccagctctccttggagaactatcgccaataattgcagtcactttc\n\
+cttttctgaaacgataaagccgtcagagttctctgcaacgttggacttacctgaggttct\n\
+aacccactttcggttctaatagtagttaacgacacaacgaataacctttactgtggggct\n\
+ttcacgatattttttcgcttattattaatggttacgtcataagctggtgtccaaattaag\n\
+gttaccggcttcgcagagtagttgtatccaagtataacttccctaatcataagatcgagg\n\
+tagaaaattaatgctgtctctaaccgaacagatatgtcccactatgtggtatggacgttg\n\
+ctaattacttctgaagggaaattggtcattatggatacgtgtctaccatcaggtcggacg\n\
+cagatatggttctgtcttcagttgatccaccgttctttataggataataactgacgatta\n\
+aagattatggtaaatagattaagccaattctcttcttgtcagtgaagcatccttaactga\n\
+cttgctctgcagcccctcatacatttagctattcaaagtaccggctcgtttcaaactctc\n\
+ccacctttggaagaggttgtcaacttgataagtatatcatttacagcattttttcggacg\n\
+tacctctaatgtttcattgcagaaaattagttttttctatcgcacattttgcaagtaacg\n\
+ttagagacacaattatctgcgaatgaactgctagatctgacgaccgggagcctcgcaaat\n\
+atcaaaaaagactgacatatatcaaggagtcgttgacaagtgctggtaagtcaattggtt\n\
+tatctgtcccggcgtttcgatcttaagctgaccatgcacggcagagtaatgtcactctcg\n\
+ttcttacaagtctgtctccaagggtcggcaaaaaagacccctccattctcgagcccactc\n\
+acgatatgtagggacgacaacttgtgcggcttatgaattgtctggactgcgggcgagggt\n\
+ccatatctccgaagttagaagggacatacctttagatgataagatcaattcttattgacg\n\
+aaattcatccacaacggggaacaacttcaccctagacttacgtctgaaaagacacctagc\n\
+gtcttataaaaggtcagtgccccgtttcgtaaggctggaattacctacgcaaacttaaac\n\
+ctcgcgcccttccttacgtatcgacaagatagaggctatcgcgaatgtactacggaggca\n\
+tgaatcatatactagaaccaagtgcctgtgatattaacaagatgatccgacgcgagcacc\n\
+gtaattctaggcataaaactccagcaatttgggggccgaaaacaaatgacgttagctaat\n\
+taattatatgacatgatcaaaggaggtcaatcacgcatcgagttcgacgtatattcattg\n\
+aacttcgtgcgtttgaaagaaacttttatgaaggcaaaattgatcctgtctcctatttca\n\
+tgcgtacctcctagttgataattccccgagcagtggttaggacacttttgtcggtatcaa\n\
+gttccggtctcaaaacgtaaaattctgtaatctgtatggatggtctgtgaattagttaat\n\
+ttttatgaagtcgtcgagacgcagttcctattgatttattctaaacggagatgtgcttcg\n\
+tgggactcggaagtagatctgtgtttatgattattgctactttagatgctgactgttaac\n\
+tccgtgttgtttttcaaccgtatatcacaaccgaattggatagaacctatagtttcaagt\n\
+tctgccacaaggtatcatatttacagttagtgctggttgcttctttcaaacgtggtgagt\n\
+ttgtgctatcacgtcaacggtagagctcagtggaccgagtgcgcgttcaaccctgttcca\n\
+gagagggtgtgatagcacatataccacgctcgtcgaggcgttcatgatagtttgcaagag\n\
+ccggtgttaaacacatattattattgttatccaactaatcggacctatgcataaagcatt\n\
+gtctaaacagaataattgcctatatacggtagttttagtgatttatatcttagtatcagt\n\
+tagagcttcgaactcttcaggttcctcatatttaacgttcttcgaaagcgaaaacttcta\n\
+caaacgaatgtaagcggttttccaagtagtacctataaatcacagaaagatctgtctcag\n\
+tatagttgaaatggtattcagctagtgacgtgtaccaattatcatagttcactcaagcaa\n\
+gacgctcattaacgaatatagacaagacactatatcatataataaaaaagaacatggtgc\n\
+tcgaacatagttgaattcaccatattgaaggggaatgctgacatgtaattcgctactaga\n\
+cgatcaattccctacttgtcaaagttgaactggtacgttcttggaattaaatatgattgc\n\
+gctggaccaaattgcgacttcttgagtttcagggcaaacgattgagccggaggatgtccg\n\
+tctcttacctttcttgcttatgataaacgacggtccctgtacatcactgggaattctcag\n\
+caaaaataattgggtaaatcgagactcgatgtattcggccacaaaggtgttagacgttaa\n\
+agattattcaacggggcgataataggatcataaccggtatgcaagcgcattgaaagagcc\n\
+atgagatccttatccgataaacgctgcacggtatgtgcagccttattgtcgatcacgaat\n\
+ttataaatgtagtctgggctgtaagttgaagacctaagttataatgaagtgcaataccaa\n\
+atcgattcatagtggattatcagactcaagatatctcctgataaattacagttgttaaga\n\
+tacggataaaatgagatttaagattagcagcctctaatctgtttcaatcccgttggaatg\n\
+tggtatgcgatcaaggttaagttaaaatcaagcctgtcttcagtcttgattcttgttctg\n\
+ccatcgcatgcggtctacgtgagttaatatgtagcttacgttctagcttgtgctaatctg\n\
+agtatagattcgtagaggaatattatcaagcttccacgcctcaacgtacgtgtattggtc\n\
+acacaagacactaaaagtggaagtagcgtaaactatagtctagttgttaaatgctcagtt\n\
+cttgttatattcgatatactcttggctaatttatgtctgagtatataaaattaatgatat\n\
+taacttgcatttcacggatcccttagaaaaagattttgaccgagcgcattataaacggtt\n\
+acaccgaatcaatagaagcatacccaatagctttctttgaatttattgcctgcgcaactt\n\
+ggctgactctctagatccgaataattctatatggtcgtgacgaaactagttcattactgt\n\
+ttaaaatgccaacatgtcttttgggccgataatggctctttgcaaaattactcaatgata\n\
+cgattgatcaaagcggtagttgctagtggtagcatgtaagtctatcaaatgtctgattat\n\
+ccgaaaatcttccaaaagagtccacgtaccatatctatctcatagcgacgcgaggggaac\n\
+cttatctaactatcattccatttaccgggtgactctcgatgcaggatccgattgggataa\n\
+attgcccagaaatggctcattcctgactaagggtaaggccgttctcagcaagggaacccc\n\
+gcgaatctaggcttataccatctagattgttaactacttgcctgtagttctacagccata\n\
+ctggacagttgtttctaaatgatcgggattcatgctagcactcctctgaatgcaccgcgt\n\
+aagtttaactattacgtccgtgggcagataaggatggaggctgtatgtatcttaactgtt\n\
+acctaatatggctggtaattatcaaagtaaggaccttaatgccatagcgctagcaatcgc\n\
+tttgtatactgaccatgtgccaacctctcttaatctgtaaaatataatgtcttagctaac\n\
+tgtggacgatcatgtctctgcctagagcttcgctgtatcaattcctatagccagcgtact\n\
+agtgacacaacaacaccgtgtgagaaaagatattagtccttacgtctgtctctctacagc\n\
+ttattgatgaggattgaacatggacatatagctccccctcaaaagcagatgctacctctt\n\
+tattccattctcgaacatttgccgaacttaatttcgacaaacctgaggtcacgtcttaat\n\
+ttatcggtaacgtcacgtccctttgagactggataaatatattaccaggggccaacgagc\n\
+aattgttggaggcgcttctataatacaaggtgtcttgtcaaagaaagacggcgtgcgtct\n\
+cgtgcaactcacttaaccaatattaatgtgaaacccccctctctcacatcttatgcggtg\n\
+tactgccctggtacatttcctgtacaggactccaacagtgtagattcctaagatagctgt\n\
+tggagttgcctcacgccagatcgaaaaactgaataaactagtgagctgagctgcagaaat\n\
+accgcttaattacttatgactagttcaaagggacctacgtgatgtcagacattgcaagga\n\
+agaaattaggtttgtgcgtcattttggctggactagcactccttacttcccctactattc\n\
+aaatgtcgtaaacagcatgagacaggatcgtgctgacatttaaggtctattgggaacgag\n\
+gctacctttggtcgcgcgctcgcgttctccgaatgaccgaaatgcatgagcacagtatgc\n\
+aattgcttatagatctaaggtctggtcgttgaaaccaagcacgtaggcctgggaaatcag\n\
+ttcttcctcagcaactacacaaaagcgtccaagcattagtacttgtagtaaatgtccgaa\n\
+cctatgcgctcatttgaaagtcaaaaaatatttttaagcagtaggcacctaacccgattc\n\
+ctctacttagtagctttctttgattctcagaattgactgcaatatcactgcacaattctg\n\
+tgccattactagacttctctgtattaacgtctcatcttactaacactcgcctaggacaca\n\
+tctgagagtgaagtatttcaatacatttactgaaatcttcagttctaaaatccccgaata\n\
+aggctcttatcggtttggccaacacaagaaaaaaacttcttgcaccactcaccttcatac\n\
+gcaggagcctggggaacttagtaataactatttcggcagacaaagcttataacaagttgc\n\
+cggcgcgtataatatttaaaagaccccttgagctgctcaattaaaacgctcacctggtat\n\
+aggctattagatagtgccgtcttagtaaggggcgggaattatcggataaactgatatttt\n\
+gataaaataaccgacttgttcacgacataagtcactaaggagattttatctttctccaaa\n\
+gtatatcttccttggataatttcaaagcgctgcaatttaagttctgttactagtttatgc\n\
+tgctgggaggtgaccggaaggcgtagtaatctagaggcaaattataagaagttcatcata\n\
+tcattttcgactacaaaaacaaggtgttgtatgccggcgcattgtgtaaactggacgagt\n\
+accctagatggaaaattatacgttaagccaagatttcgatgtaatgataattacctacac\n\
+atttttgctatccataggaacaagagctgttctataggctcgtggcatacgaacatttgc\n\
+tgccgctatgaatattggaagctcttcaactacagactctattcttaattgccgtcgaaa\n\
+atgggccgaatcggctattattaatactcggtttttccgaggggattgttgtcgacagtc\n\
+gtaattattattaatattgatgttggtgaggtcatttaaatacaaccttgcagacaatga\n\
+ataagggatccaatctctcatactccttttacaattgctcatgcccctatgcaaacctta\n\
+tgccgccacacctccgcaactctctcttctgaactgtaagtagcttcattactggtttga\n\
+gactatactgaagctgatgacattctaaaatggctattttcgaatgtgattcataatgtt\n\
+tatcgtttgggatggcagaatcacgttatttttgatatagcccgggtattctattgtata\n\
+gaacgtatgctacaagtcattccccgaagaagactagaagtaaacaacatgcgaccatcg\n\
+ttaagccacgcaaggctgtagctttatttcccgataacctatcttccataaatagcggac\n\
+agcaggatactgacgctcaacatcagtggttatggtctaatttttaacttttaataaggt\n\
+aacttcagcaggcatacacagtaactctttaatttataatcaaattagaagtctgacact\n\
+tcttatatttttctatcatccaacgcgatcgcccattagcttattgtgttactaataacg\n\
+tatctaaaccaatccttttcaagctactgcctatattgtcaatatatacaaacaacagga\n\
+tagtaggctgcttaaaaaatattgtcaaccgtgtacgctttacaatacccggaaatcaca\n\
+aactttgtagacaacgagtgaaatttatacactacgaagggccagcgtacaagacccatg\n\
+aattaggcgatatgtttattctgacatattggtttatccttaatctgtcgctgtaaaatg\n\
+aagccgcccccatccctgcgaattttttttcgaagattcacgactgaaatataaatacgt\n\
+ttggctatatttatgttggagggaggcaatagcctttactgttaaccgaagatttagcca\n\
+gtgagtgtgacactaaaacactggaataaatgcaggcgttcttctgggtaaaaggtttag\n\
+tcaatctcgcctataagttcatatagctctggatataattatctggcccatgcatttatc\n\
+atggcgcttggtgccctgtgtgaagccggcctctcatattgaaggtccgaagtattccat\n\
+gtacattaagatcactctctcattcatgcatcttggcttaacaaatctggttgtccaagc\n\
+tttccaggcacgtatggtacaaattcggatcgaatacttataaaaatgatatgttaaact\n\
+gtctaaaacgctcatctacaaagtaaagtgcactaaccaatagagtctcaagaccgtgta\n\
+atgctggtgcactgaatgtgtaatacggttagaagggattagttatgttacaaatccatt\n\
+gaaaacttaagaagcattgcgtgctcggagggtgcatcttttatcaagagactaacatta\n\
+ttttcaacgacgtacatgctttacaatagggtacttatcaaacgccgagaaacgcgccta\n\
+tagtgatgttatgattatgacccgatatccattggaccgaattttatgtaggttcccagc\n\
+gtactcgcgtaatatctcggtattgccataatgtaatacttgtcggtctctcccagatga\n\
+aaaagcgttacagagtatttcaatgaaaaacagcgcgcaacgtcaatacctttaggggta\n\
+acggccgctgatttcatatagatatacgataagttggtatagctctactaggtggcatcc\n\
+acaatcgttgcatttactatagctggttacaatcataatctataccgttccttacatact\n\
+accatagcgggatagcgtttttttgccgttgattgggtttaagaggatgtcagtctcatt\n\
+atatccgattcggtgggagagccgttgttttcaaatcgcacactttgtgacataatgtac\n\
+aagataacaaaactgatataagatataaactgtcaatatcaccttgacacttgaatcaaa\n\
+gtaaattaactcgcaaatataatttgactaattgggtgcagatttctcaattaataaaaa\n\
+aatggcaccggatgggcttacaagccccttatcattcacttgtatcatgatttccaagaa\n\
+caatagaatttgctagcaagtatgaacagagattcgaattgcatccacagtacgccggag\n\
+cgtttattttaatgtggatatgacgatgtactgttggcggcatttgctagtaaccggtcc\n\
+ttatttacgtagcgcacacgtaagcatgtctgggagaaatatggtggtacaatctcagag\n\
+aaagattacagtttggtttaaataggacttatcgggtcggaagtggaacttaataagcag\n\
+tacacaattgggcaacagacgtcttgcctattacaataggattacaatgcgttagatttc\n\
+agacacgttcgtgtttggctattcgtcaattccctaaatagttagacgatcaactattat\n\
+caaagtgattctttgttcatcctccattcatgtaacagatggcacactacgcataacgcc\n\
+gaggaattttaacgagatttaagagagcagttcgggcacaacccacttgactttataaca\n\
+gctcggcagcataaacggtaatatgtgacaaatttccaaacgttataagaacgtatgtgt\n\
+acttagaaaactaagtggttcatgttcaacagatgtgacgcagcaagcctaacttatcta\n\
+ttggttttgctataaaagaacaaagttacacagaatcctaagggcttgtttcacacttat\n\
+gcctagtgcttcaccatcttaaaatagcgaaaccggcacgaatcaaaccttaaaacaatg\n\
+cgcagatattggtgatggtgactccgggtatgataatggtaactgttgaccagcgcccac\n\
+ctcatcgaagtatagaaagtggttaggataaggatgagaccgaacttatttccggccata\n\
+actttagattttctacctagtacacaacatcagggcggacacgaaaccgccatcacatca\n\
+tataccaggtttaatttgcttaatgggggaagtgtcaacgaaccttcgaactttagcagg\n\
+catatggccattatatatggccccagagcagaatgctacagcagacaaaatttggattta\n\
+tgtagtttaatacctatcaaacttggtgtgaccatacttgtctaacgacagtgcacaaag\n\
+tgtaagttacaattattactactcagcagcttctgcaatgataaaatcttatcatacacg\n\
+tcacatatgataatatctacttagggggaacgggctccacaacctacatagtactcaata\n\
+cttacactattcgacaggcacaccaaacctgtacagtcccaaaagattgagtcaactttg\n\
+cagtactgcagatcacagtaatagcttagttagcgagtcaaaattagttttctacgagac\n\
+tgcacgaccgtgcaaatttccgatgtgttggctacaaatagcaacgtatgaatttgtttg\n\
+aagccacgtaaactgtacaaccttagagataagtctcaggctactaaaaacacgttgtgg\n\
+cactaacaggatcatggttgattcttacttattcggctgaccggcccaataagtaacctt\n\
+caactagaacagaataatcgggagtagtttaattcagtcaaggtgcaggtctcattgtaa\n\
+ctaacaagctctgtgtaaccaagttaaaatcgttttcttagcggattccctacttatgga\n\
+tttgagctcgtccacaatattcgatacaagaagtttgtggtccgtaacaacgaaatttta\n\
+attacgctgtgcagcctcatccaaggaattaatagaaggttgatggtaggctccgaacgc\n\
+tccatgattataatcaagtggactgtgcagtaaacgaggaaggtatcctgacgtcgtggt\n\
+gttcgtttttgttatttgtgccctatacgagtagataaaccatgaacagcacagtgtgaa\n\
+cccatggttgattttaggctaccttatttttaatttccgttacacagaaacgaattccac\n\
+aactaacatgccattaatttttcgatatcttataaaagatggtcgaaattcattcattta\n\
+ttttttttcggttctcgaaagtcaactaagctgtcgcgttttgtttctctttagaggtaa\n\
+aagtggctttgatctcctacgtttggatactagtcaaccattactccatttgatccgtga\n\
+gtatcacctgtctaacatccagcattatgactcctcggcgaagaaaagacacacttctta\n\
+gagtcgatgtgtattagctagggacacagttgtttaatacgatagtgagcccagggaggg\n\
+cagtgcgtcccccagtagatttattcagctagtgtaagtataagatatctcacccacgag\n\
+gttcaagtgatatgcagtcttagaataatacttatcctgaatttcgatattatgggtact\n\
+tcaataatccgctagcgctactttatgtctcgttggacagcaggacacatggcagtctta\n\
+aacactaaagacatcacctgaatgaatgtaatgggattacaagaatcaatgaggtattat\n\
+atacgacgtaggaaactctggatatatacagtaatctagttacgccatcgcacttcattc\n\
+ctctggaaacttagaagacatcagctgtacgtggaggaaccagacccccgtatgtagcca\n\
+aatagaaccaaagttgcttatacaaacacacccaatgacaatggaccgctggagttcgta\n\
+aactcggaacgtagtactgcacaaacccagcatttagcaataggagctacgtatgcaact\n\
+cccacgtggtaataccttcaagctatcaatatataggtgcctagctaatcgcattcgcaa\n\
+gcagtattcaagcttgtaaaccagtataataattacagaggctctatgaaacccaacttt\n\
+ccagctaaaagtcccaattaaatggttatttcgtacttttaaagtcgcccgttctgttat\n\
+tacgcgaattgattctactccaaaattaaacacaaattatcaaccgtttcatttatattt\n\
+gtcaatgcagctgtttaaaataaggctctactaaattataattaagacacttattaccag\n\
+atttctctagttaagtttgaaccagctcgactaccgcgaaagatacattcccttctctat\n\
+ttttcagttcatctatgggtcagagaagcattgaatttattctattcaccctcgtcgttc\n\
+acagcgaatcgtcagtgtgatcagtgtatgagaaatatcctaaaccgtttagtcagacca\n\
+cacgcttagaacaagtggtctaaaaagactgccctggaaggagtaagaagtatacagctg\n\
+atccggtgtatccttcagtcatctgccctatactaattacacgacgcaaggaaaaatagg\n\
+tttattttctaggcaaacccttcataggtgactccgatgtgttacgaatcatgcttgaga\n\
+atgtgctatcgttaccgacggataataacgatctccaatgaaccaaatgtagaatgtcta\n\
+ttgattacccttttactattcgacttagagataggagatagaacctcagtgtactttttt\n\
+agccgaatgggaatctttgggaggtgaatggccataaggtcgtaaatccaaccctcttaa\n\
+agtcttccatattatatcgttgttcgtggaatcgataacagatttgttgacccatagtaa\n\
+atgtatactagtttatgttgtaagtgtagattgttttccgattgccgtccaaactttatg\n\
+tcgtaattgtagaccagtaaagttgaccaaggtaagtgcccagcgatcctgcgagatcga\n\
+tcgccaatttttccagtcactgtaagtgtaggtttagataaagccgtatgagttatatca\n\
+taagggcctcggaaagcagcttcgaaccaaagttcccttataatagtagtttaactataa\n\
+aagtatatactggtctgtcgccctttcacgatttgttttaccggtttatgaagcgttacg\n\
+tcattagagcggctccaatttaaggttaacggcttccatgtgtagttgtatacaaggata\n\
+acttaaagtatctgttcagcgagctagttaagttatcctcgatagaacacaactcagagg\n\
+tcccaagatcgggtttgcaacttgctaatttattctcaaggcaaattgggaattatcgat\n\
+acctgtataccataaggtcgctcgatgtgatgcttatgtcttctggtgatcctaccttag\n\
+ttagtgctgattaacggaacattaatgtttatcgttttgagatttagccaattctctgat\n\
+tctaactcaagatgccttatctgacgtgctatgcagcccctaagtattttacattgtaat\n\
+aggacacgctcctttaaaactcgccaaaaggtcgttgtggttctctactggttaactata\n\
+taatttacagctttgttgagctagttcctctttggtttaagtcctcaatattagttggtt\n\
+cgagcgataagttggctagttaccttagtcactatattagatccgaatgttatgcttcat\n\
+ctgaagaccgccaccctccaaaatttcttttaagactcacttattgcaaggtgtaggtga\n\
+attcggctcgtttctcaagtggtgtatctgtacacgagtttccatattttcatcaacagc\n\
+caccgcacacttatgtcactctaggtattaaaagtcgctctacaaggggacgcaattaag\n\
+aaacagacatgctagtcaaaaataaacatagcgaggcaccactaattcggccgcttatca\n\
+atgggatgctctgcgcgagacgcgccagagctcagtagttagttcggacatacatttact\n\
+tcagatgatcaattagttttctacaaatgcttactctaccccgaaaaaagtcaccagact\n\
+cttacgtctctttagtatccttccgtcttatataaggtcagtcccccgtttcggtaccct\n\
+ggaatttactaagaataatgaaacagcccccaaggacgtacgtttacaaatgatagacca\n\
+gatcgcctagcttattccgacgcatgttgcatagaattgaaccaacggaatgtgagagta\n\
+actagatgagccgaccacagcacccgtttgcgtcgcagaatacgcctgatagttcggcca\n\
+cgaaatcatatgtcctttgagtattaagtatttgtaatgatcaatcgagctcaagcaagc\n\
+ttacacttcctcggatattcagggaacttagtgcctttgaaagatacgttgatcaacgaa\n\
+aaattgataatggctcatatggaatgcctacctcatagtgctgaattaacacagcactgc\n\
+ggacctaacttttcgaggtttcaagttcacgtctcaaaacctaataggctggaatatgta\n\
+gggatcctcggtgaatttgtgattgggtttgttgtagtactgaccaagtgaatattcttt\n\
+ttttctaaaagcagatctgctgccgggcactacgaaggagatctctgtgtatcattattg\n\
+cttcttgacatgatgactcttaaatcactgtgggtgtgcaaaacgatagcacaacccaat\n\
+tcgatagtacatattgttgatacttcgcactaaaccgttcatatttaaaggttgtgctcc\n\
+ttccttcgttaaatactggtgacttggtcctatctactattagctagacctctggggaac\n\
+cacgcccccgtaaaacctgtgcaagagagggggtcatacatcttagacatcgcgcctcca\n\
+ccagggaagcattgggtgattgaccaggtgtgtaacaaatatgattattcttatactaat\n\
+attagcaaagatgcataatgatttgtattaaatgtataattgaattgataagggtctttt\n\
+agtcagtgatagagtagtataaggtagacattagaactcttaaccggacgcagatttttc\n\
+ggtcttagtaagccaattagtcgacaaaacaaggtaagagcggttactagtagtacctat\n\
+aatgcactgaatcttcggtcgaagtatagttctaatgctatgcagattgtgacggcgaca\n\
+aatgttcagacttatatcatgaaacaagctcttgtaagtattgacaaatgaaaagattga\n\
+atatttttaaatacaaaatgcgcctacttattaggggaattaaccagattgaaggccaat\n\
+cctcacatgtaatgagataatagacgataaatgaaattcttgtaatagttgaactgctac\n\
+gtgatgggtattatatatgattgagatcctccaattgccgacgtcttgtcttgatgccca\n\
+aaagattgtcaacgaggagctccctcgcgtacctgtcgtccgtatcataaacgacgcgac\n\
+atgtacagcactccgaagtataagcaataataatgcgggtaatccagactagatcttttc\n\
+ggactcaatgcggtttcacggtaaacatgattaataccggagagtagtcgagcttatcag\n\
+cgatgcaagcgaattcattgtgccaggagatacgttgcagataaaaccggcaacgtatgt\n\
+caacaagttttggcgatctcgttgtttgtattcgacgaggcgcgggaacttcaagaacta\n\
+tcgtatattcaagtccattaccttttagtttcagactggtggagctgactaaagttatat\n\
+catcattttgtacactggtttagttaacgataatttcagatttaacatgaccagacgata\n\
+atcgctgtatatccagttggaatgtggtttgccagaaaggttaacttataatcaagcctc\n\
+tcttcagtcttgattcgtcgtatcccatccattgcgctatacctcagtgtatttggagct\n\
+gtagttataccgtgtgctaagatcagtagacatgacgagagcaatattatctaccttaca\n\
+agcatcaacggacgtctagtcggaacaaaagactctaaaactcgaacttcaggttaatat\n\
+actatagttctgtattcagcagttattcttatattcgatattatcttgcctattggatgt\n\
+ctgactttagtatattaatcatagtatctgccatgtaaaggtgccagtactaaatctgtt\n\
+tcacagtgcgaattataaacggttacaaccattaaagacaacaagaccctatagctttat\n\
+ttgaattttgtcaatgcgcaacttggagctcgcgatacatcccaattagtctatagggtc\n\
+gggacgattctacggcatttctggttataatgacaacatggattgtggcccgagaatcgc\n\
+tctttcattaattaagcaatcattacagtcttataagcgctacttccgagtggtagcagg\n\
+taactcgatataaggtcgcatgagccgaatagcttaaaaaacaggccaccgaacattgat\n\
+agagaataccgaccacagcgcaacctttgattactttcattaaattgtacggctcactcg\n\
+acatcaagcttaagattgcgataatgtgaactcaaatggatcagtactgaagaaccgtaa\n\
+cccacttcgcagaaagcgtacccagagaagatacgctgttacaatatacagggtgaaatt\n\
+attgcctgttcttcgtaaccatttcgccaaacttggttagaaatgatagccattcatgat\n\
+agaaataagctgaatgataccagtatctttaactatgtagtcagggggaagataacgatg\n\
+gtccatgtatgtttctgatatgtgacagtattggccgcgtaatttgctaacgaagctact\n\
+taatgcctttgagcttcatatagatttctttaatcaaaatcggcaaaaagatagtatgag\n\
+ctataatatatgctagtagagaactctggaccatcatctatatgaatactgattcgagcg\n\
+tgcaattactttagcctgcgtactactgactctacaaaacactctgagataagtttgtag\n\
+tcagtaagtcgctctctataaaccttttggatgaccattgtacagccacttatagatccc\n\
+aataaatagcacaggagacagagtttttcaatgctcgatcatttgccgatagtattttcg\n\
+tctaacctcagggcacctattatttgatacctaacctaacggccctttcacaatggagaa\n\
+atatatgacatcgggacaaacacaaatggtgggtggccaggagatatgacatggtggcgt\n\
+ctctaagaaacacggactccctctaggcaaactcacgtaaccaattttaatgtcaaacaa\n\
+aacgctcgaaaagattttgccgtgtaatgacctggtacattgactggtcaggaatacatc\n\
+actgtagttgccgtagtgtcctgttggtgttccatcaagacacatcgtataacgcaattt\n\
+acgacggacatcagatcaagttatacagattatttaagtatcacgtgtgcattgggacat\n\
+aagggatctcacacatgccttggaacatttttgctttgtgccgctttttcgctgcactac\n\
+caatccttacttaccagtatattcaaaggtcgttaacagaatgagaaaggttagggctct\n\
+aagttatcgtcgattgggatagacgagacatttgcgagcgccctccacggatacgaatct\n\
+cccatatcaatgtgaactggatgctatgcagtttagttcttacgtctcctagtggtaaaa\n\
+atcaaagtagcactcgcatagcagttattcagaacctaatacacaaaaccgtcaaacatt\n\
+ttctaattctaggtatgggccgatcataggagctaaggtgaaactcataaatgttttgtt\n\
+agatctagcatcctaaaaagatgcatatactgagtagctggcgtgcattctctcaattgt\n\
+atcctttttaactgaactagtcggtcccatttcgtgactgagatctattaaccgataaga\n\
+ttaataacactcgcattcgtatcagctcagagtgaagtttttcaataatttgactgatat\n\
+attaacttctaaaataaccctttaagcctcggatccgtttcccaatcacatcaaaaattc\n\
+ttattccaactatctacggattaacaacgtgcatggggatcgtagtaagaacttgttccg\n\
+atcactttgagtatatcaagttgacggcccggttattattgaatagaaacattcacctgc\n\
+taaattaaataccgcacatcggatacccgatttcagagggccgtcttactaagggcaggc\n\
+tttgttcggtttaactgagatgttcattattttacagtatgcttcaactaatatgtaacg\n\
+aaggacagtggatctgtctccatagtagatcttcagtcgtgaatttcataccgctcctat\n\
+ttaagttcgcgttcgagttgttgatcatggcacgtgaaagcaacccctagtattctagac\n\
+gaaaattttttctagttcatctgataatttgccaattcaaaaacaaccgctggtttcccg\n\
+gcgcattctctaaaatggaagtcgaacctagagccattatttgtcggtaacccatgagtt\n\
+ccttcttttcagaagttaatacactgtggtcctatacagaggaaaaacagcggttatata\n\
+cgatcgtggcataacaacattggatcaagatagcaatttggctacctattctaattctca\n\
+ctagattcggtattccactacaatatcggcagattaggattggatgaataatcggtgttt\n\
+aagtccggttgcgtctccaatctcctaatttttattaatattgatcttggtgacctattg\n\
+taaataaaaacttcaagactttgaataacggtgaaaagatagaagactcatttgaaaatg\n\
+gatcatccacagatccaaacattagcaagacactaatccccaactagctattctgatcgc\n\
+gatcgtgctgcagtactcctgtcacaatagtctgttcatgatctaattctttttgggctt\n\
+tgttcgatggtgattcagaatctttatccggtcgcttccctgtagctactttgtggggat\n\
+attgcccggggattatagggttgagatcgtttcctaaaagtatttaaaccaagtagactt\n\
+caactaaactacatcagaacatcgtgaagacaccatacgcggtacctttatttaccgata\n\
+acatttcttcaagaaataccggtaagcagcataatgaccctaaacagctcggggtatcgt\n\
+cgtagttttaaattttatttaggttactgctcaaggaataaaaactaactatttaattta\n\
+taataatattacaaggctcacactgattagatttgtctataagacttcgcgatcccccat\n\
+taccggattgtcttaagaataaactagataaaccatgcattttctagataaggcctttag\n\
+tctaattagatacaaaaaacacgatagttgcatccttaatttattgtgtcaaacctggaa\n\
+ccttttaattacccgcaaatcactttatgtcgagactacctctgaaatttattatctacc\n\
+taccgcatgaggacttgaaccatcttgtaggagttatgtttattagctaagattcgttta\n\
+tcctgtagcggtccatgtatattcaacaagcaaaaagcactcagaattgtttttagttga\n\
+gtcaagactgatatataaataagtttccctagttttttcgtggtgggacgatattgaatt\n\
+gaatcttaaccgaagagtttcccactctgtcgcacaataatacacgccaatatttccagc\n\
+cctgcttatgccttaatcggttactcaatctcccattgaagttcattttgatctgcatag\n\
+aagtttcgggcccagccttttttctgccaccttcctccaagctctgtagacgcactctaa\n\
+gattgatgctcacatgtattaattctacattaacataaatatataagtcatgcatcttcg\n\
+agtaaaatatctggttctccaacatgtcctggcacgtatcgttataatgcccatacatgt\n\
+agtattaaaatgattgggttaactggatattaagatcatcgaaattgtaaagtcaaatta\n\
+acaatactgtctcaagaccgtgtattcctcgtgctcggaagggctattacgcttacttcc\n\
+gttttggtatcttaatatgactttcaaaaattaagttgcagtgagtcctacctgcgtgca\n\
+tcggttagcaagagtataaaagttgtttaaacgaactacttgctttacaataccggtcgt\n\
+atatatcgccgtgaatccagaagattgtcttctttggattatcaaccgagatcctgtgga\n\
+ccgatgttttgggaccttcacagaggactccaggtagagctcgcttttgcattaatctaa\n\
+gaattgtacctctctaaaagatctaaaacagtgaatgtgtatttcatggaaaaacacaga\n\
+gaaacgtaaattactttaggccgaaaggcacatgagttattatacatatacgagatggtg\n\
+gtatacatcgaattcggggcatacactatagttgcattgtatttagctgctttaaataat\n\
+atgatattaccttccttacataagacattaccggcataccctggttttcaacttgtgggg\n\
+ctttttgacgatcgcactctcatttgatccgagtagggcggtgacccctgcttttcaaat\n\
+acaaaaatttcgctatgaaggtaatagattacttttcgctgttatgatagaaacggtaaa\n\
+tttaaaattgaaacttctagaaaagtaaagtaacgagaaatgattttgtgaataatgcgg\n\
+tcatgattgcgcaagtaagaaaaaaaggcaaaaggatgcgcggaatagaaacttatcagt\n\
+cacgggtatcttgatttcattcttcttgtcaattgccgacataggatgaaatcagattcc\n\
+aatgcaatacacagtaacccccacccttgattgtaatgtcgatttgaagttgtacgcgtc\n\
+gacgaagtggatagtatacgggccttttgtacggtgcgatcaactatgaatctcggcgag\n\
+ttagatggtcgtacaatctcacacatagaggtcacttgcctgtaatgacgaattttcggc\n\
+taggtactcgaactttattagaagtaaaaatgtgggcaaaagaaggattccattttacaa\n\
+gacgattacaatgagttacatgtctctcaacgtagtctttccctagtagtctttgaacta\n\
+tttaggtactccagaaaattttagcaaagggtttctgtgtgaatccgccattcatgttta\n\
+tgatggaacaataagaataacgccctcgtatgttatcgacagtgaagtcagcagttcggc\n\
+caaaaacatattcaatttagtacagatccccagaagttaagctaagtgctctaaaatggc\n\
+ctaaacggttatcaaagtaggtctaattactatactaacgggtgcatcgtaataactgct\n\
+gtcgatgcaacactatatgatagtgtcgttttgctatatatgtacaatgtgacaaagaag\n\
+ccttagcgattcttgcaaacttaggacttcggattctcaatcttaaatgtccgaaaacgc\n\
+aaagattcaaaaatttaatctatgagcagatatgcctgatggtgactacgcgtatgttaa\n\
+ggctaaatgttgacaaccgcacacataatcgaactattgatagtcgggagcataaccagg\n\
+tgaacgtactttgttcacgacatttattgacatgttctaaatacgtctcaaaatcacggc\n\
+gcactagaaaacgcaatcaaatcattgtcctggtttaagggccgtaatgccggtagtgtc\n\
+aaacttcatgagaactttagctggcttttggccagtatttagggaccaagagcactagcc\n\
+ttaagctgaatattttgccatttatctactgttataactttaaaacttggtggcaccaga\n\
+cttgtcgatacacacgcatcaatctgtaacgtaaaaggtttactaagaacaagcgtagga\n\
+attgagtttatattatatttaaactaaaagatgatattagcttctgagggcgatagggct\n\
+ccaaatcataaagaggaatatattattacacgattagaaacccacaacatacctcgaatc\n\
+gcccaaaagtttgacgaaacttggcagtactccacatctcagtaatacagttgggagagt\n\
+ctcaaatgttgttttattactcaatgaaccaccctcataatttcactgctgttccattaa\n\
+atttgcaaacgatcatttgctttgaagaaacgtaaaatcgacaaaattacagataagtag\n\
+atgcataataaaaaaaactgctcgctataacacgatcatcgtgcattcttacttaggagc\n\
+atcacccgcacaataacgtaccttaaactacaacactattagaccgagtactgtaattca\n\
+cgaaagctcaagctcgcattgtaaagaacttgctctctcgtaaaatgtgataatagtttg\n\
+cggagaggattcaattattttccattgcacctactccactagattcgataaaagaaggtg\n\
+gtcctcccttaaaaagaaatgttaagtaacatcggaaccataagcaaagcatgtaagtga\n\
+accgtcatccttccctaagaaacataaaggtttttaataatgtcgactgtgaactataac\n\
+tgcatcctttcctgacctactccggttccttgttgttatttctgaacgagaccagtagat\n\
+aaacaatgtaaaccacagtgggtaccaatggtgcatgtgacgctaccgttgttttaagtg\n\
+cccgtacaaacataagaagtcataatcttacttgaaattaattttgccttttattttttt\n\
+tcaggctcgaaattaatgatttgttttttttgaccttctagttacgctaatatgcggtcg\n\
+cctgtggtttctattgagtcctataacgggatgggatctaatacgtttggttactagtaa\n\
+acaaggtataaatttgataccggagtatcaactgtataacatcaagctttatgactcata\n\
+cgcgaagtaatgacacaaggctttcaggagatcgcgagtacagagccactaaggggtgta\n\
+ttacgatagtgacaccaccgagcgcactcactccccaagtagatttatgatcctacgcta\n\
+agtattagatatataaccaaagaggttctagtcagtgcaactcttagaataataattagc\n\
+cggttttgcctttttaggcctaatgcaatattcagctagcccttatgtatctcgcgttcc\n\
+acagcaccactcatggcacgcgtttaaactaatcaaatataatctatgaatgttatgcca\n\
+gtacttgaataaatcaggttttttataagtccttgcatactctcgttatatactgttaga\n\
+gtcttaccccatagaaattctttcatctgcaaacttagaagaattctcagctacggggag\n\
+cataaagtccccaggatgttgacaaatacaacaaatgtggcttatacaaacactccatat\n\
+gaaaatcgaaccctcgtggtagttttagccgaaccttgtacggataaatccctccatttt\n\
+ccaatagcagatacctatcctactacctcgtggtattaaattaaagcttgaaatatagag\n\
+ctgcatagcttatccaattcccaagcacgagtctaccgtcgtaaccacgatttgatttac\n\
+agacgctagagcaaacccatctttaaacatataagtaaaaattaaagggtgagtgcgtac\n\
+gtgtttactagcaacttcgcttattaagacaattgtttataagccataattaaaaacata\n\
+tgttcaacaggttcattgatatttgtaattgcacaggtttttaataaggatctacgtaag\n\
+tataatgaacaaactttttaccagagttatattctgtactttgaaaatgctcctctaccg\n\
+ccttagagactttcaattagattttttgcagttaatctatgcgtaagtgaaccatgcaag\n\
+ggatgcgattcaaccgcctcgtgctaaccctatcgtctgtctcataactgtaggtctaat\n\
+ataattttcagttttcgaacacataaccctttgaaaatctgctatttaatgtctcacctg\n\
+catgcactatcttctatactgctcagaacggctatacgtcactatgctccaagtgacgat\n\
+ttaaacgaagcaaggaataataggtttattttagtgcaaaacaattaagtgcggactacg\n\
+tgctctttacaataagccttgtgattgggctataggttaagtcccatattaacgatctcc\n\
+aatgtacaaaatcgacaatcgctttgcattacccggttactagtcgaattacagatagct\n\
+gttagatactcactctaattttggacaacaatcccaatcttggggtcgtctatcgcctga\n\
+agctcgtaaatccttccatcttaaacgattacatattatagacttgttcggggtagagat\n\
+atcacagttgtgcaaacattgtaaatcgatactagtttatgttggtagtctagttgcttt\n\
+taccattccccgaaaaacttgatctactatttcgacaacagtaaacttgaactaggtaag\n\
+tgaaaacagagaatgcctcatagtgccactatttgtccactatatgtaagtgtagcttta\n\
+cataatccactatgactgagatcattacggcctaggaaagcagcgtagaaaaaaagggcc\n\
+cggatattacgactgtaactataaaactagttactggtagcgcgccatgtatagatttgt\n\
+tttaccggttgtggttgcgttaacgaatttcagccgcgaaaattgatccgttaaccagtc\n\
+catctcgacttctataaaacgataaagtaaagttgatgttcagcctccttcttatggttg\n\
+catcgagagtacactactcagtgggaaatagatcggggttcctacttcagattgtattat\n\
+ctaggcaattgccgattgtgccatacctggataaaataagctacctacatgtgatgctta\n\
+tctattatcgtcatactaccttagggtgtcctgttgaacgctacattaatctttagccgt\n\
+ttgagatgttccaatggataggagtctaacgcatgatgaagtttaggaaggcagagcatc\n\
+ccactaagtatgtgacagtgtatttcgaaacgagacgttataaatagaaaaaaggtcctt\n\
+ctggttctattctgctgaactattgaatggaaagattggttgacctacgtactatttgct\n\
+tgaagtcatcaatttgacggggtgagagacatatggtgcatactttacggactctatatt\n\
+ttagatcagaagcttagcagtcttctctacaccccctcacgacataattgcttttaagaa\n\
+tctatgtttgattcctctacgggaattcggatccgttcgcatgtgcggtttatctaaacc\n\
+aggggacatatgttcagctaaagcatacgaacactttgctaactagacgtatgtatagta\n\
+gctataaatcccgacgatatttacaaaaagaaatgagactcaaatatatacatagcgacc\n\
+ctacacttattcgcaccctgatctaggcgatcctagcacccacacccgaaagtgagcact\n\
+agtgtcttccgtattaaatttactgcagttgagattttagttgtctactaaggattactc\n\
+taacccgtaataaggatcaagactcggtactagctttactatcattccctatgtgttttc\n\
+ctaactcacaagggtacgtaccagcctatgtaattacaataatgataaagacacaaagga\n\
+agtaactttacaaatgagtctccagttacactagcttagtccctcccatcttgctttgaa\n\
+gtctaaatacgcaatctctgaggatatacagcagaagaacactcataacgttggagtcca\n\
+agaattagactcatagggcccccaacatttaatatgtactgtgagtttgaaggtgttcta\n\
+ttgttaattcctgctcttgatacatgacacgtactccgtgtttaaggcttcggactgact\n\
+ttctttcataagttgagcaacgaaaatttcagaatcgataagttggattcactaactaat\n\
+acggctgattgaaaactccactccggacctatatggtcgacctttatacgtaaccgatat\n\
+aaaacttataggctggtatatcgagccttcctagcgcaatttcggatggggtttcttcta\n\
+ctactcaacaacggaatagtctttgtttagtaaaccagagctcaggacgcccaatacgta\n\
+ggagagcgctgtggagcatgtgtcattatggactggagcactcttaaatcactctgcgtg\n\
+tgctaaacgatagatcataacatgtcctgagtaaattttcttgatacgtcgcaatatacc\n\
+gttattagttaaacgttctcatccgtcatgcgtgaaatacggctgtcgtgctcagatata\n\
+ctattagcgactcatctcgcctaacacgcacacgtataaactcggaatgactgccgctct\n\
+tacatattagaaatacagactacaccacggaagcattgggtcattctcaaccgctgtata\n\
+aaagatgattagtcttataataagattaccaaagaggcagaatcatgggtagtaaatcta\n\
+ttattcaagtgattaccgtcgtgtaggcagggagtgaggacgagatggtactcaggacaa\n\
+atattaaccggacgaagtggtttacgtcgtactttcactattagtagtaaatacaaggta\n\
+acaccggggaatagtactaaatataatgatatctatcttcgggagaacgagtcgtctatt\n\
+gctttgaacattctcaaggcgtaaaatgtgctgacttatagcatgatacaaccgattgtt\n\
+acttttgtctattcaaaagattgaatagttttttatacaaaagccgcatacttatgacgg\n\
+ctagtatacagtttcatcccctagcatcaatgctatggacagtattgaacttataggaaa\n\
+ttcttctaatagggcaaatccgtcgtgatgcctattttttttcagtcacatcctcaaatg\n\
+gcactagtattgtcgggatcccattaacaggctcaaccacgagctcacgcgaggacatgt\n\
+agtccgtatctttaacgaagcgacagcgacagaactcccatggataaccaattataaggc\n\
+ccgtaatcctctagacatcgtttaccaataaatccgctttctccgtaatcatgttgaata\n\
+ccccagagtagtccagatgataaccgatgaaacacaagtctttctcaatgcacttacggt\n\
+gaacttattaccgccaacgtagctcatcaaggttgcgacatctagttgtgtgtttgcgac\n\
+gagcccagcgaacttcatcaactttcgtatattcaacgccttgtaattttactttaagac\n\
+gcctggtgatgtagattcttagataatcagtttgttatcggctgtactttaccataattt\n\
+cacaggtttcaggtcaagaagattatagctgtatatacagttccatgctcggtgcacaga\n\
+aacgtgatcggataataatcaatcgcttatgtcgtctttaggcgtatccaatacatgccc\n\
+cgataccgcagtgtatttcgacatgtaggtataccgtcgcatttgagctcgagtcaggac\n\
+gtcagctagattagattccttaatagaatataccgacctctagtccgaactaaactatag\n\
+ataacgccaacttcaggttaattgtctagtcgtctgtttgcagatgggattcttagatga\n\
+gtgagtatcggccatattggttcgagcactttagtttttgatgcataggatatgcaatgt\n\
+atagctgaaagtactttatctgtttcaaactcacattgattaaaccggtaaacctttaaa\n\
+gactacaagaaaatattcagtgagggcaattttgtcaatcacaatcttccagctagagat\n\
+acttcacaatttgtcttgaggctacgcaacattagacggattttcgcgttttattgaaat\n\
+aatcgaggggcccaagagtatccatagttcattttgtaagatttctttacaggcttatta\n\
+cagcttcttcagactcctacatgcttacgagttatatgctagcatgtgaacaatagatta\n\
+atatacaggaaaacgtacattgagagagatgaccctacacagcgcaaccgttgagtactt\n\
+tcattaaagggtaacgctctcgagacagcatccttaagatggccttattgtcaaatcatt\n\
+tgcagaagtacgcaagatccctaaccaacgtagaagaatccctacaaacacatgagacgc\n\
+ggtgaaaatagacagggtgttagtattcaatcttcggagtatcaatttcgccaatcttgg\n\
+tgagaaagcataccctttcttcagagaaagaagatcaatcataacactatctttaacgag\n\
+gtacgcacgcgcatcattacctgcctccatggatctttaggatagcggaaagtattggca\n\
+gcgtattgtgatttcgttcctactttatcaatttcacattcatatacatgtcttttatca\n\
+aaatcgccaataagataggatgagctatattagatgctagtagagttcgcgccaacatca\n\
+tcgataggaatactcaggacagcgtgataggacttttcaatccctaatactctctataat\n\
+tataactctctcttaagtttggaggcagtaacgcgctctatataatcagtttgctgcacc\n\
+attcttcagcctctgatacatacaaataaattccacagcagtaagagggtttaattgaga\n\
+catcttgggaacttaggattttactctaacatcaccgaaacgattattggataccgtacc\n\
+taaacgaactttctcaaggcagtaatataggacatccgcaataacacaaatgctgcctcc\n\
+ccaggagttatgtcttcctggaggctatatcttacacccactcactataggcaaactaaa\n\
+gtttaaatgttgattgtctaaaaaaaagatagataagagttggccggcgtagcacatgcg\n\
+aaagtgaatcgtaagctataattctctggacttgaagttctgtcctgttcctctgcaaga\n\
+aacaaacttcctttaaagctatttacgacgcacatctcagcaagttataaacatgttgga\n\
+agtttctagtcggaattcccaaagaacggatctatctaatgcattcctacatttttcctg\n\
+tctgccgatggtgccatcctattcaaagaatttcttaaaagtagattaaatgggactttt\n\
+aacaatgagtaaccttacgcctctaagggttcctcgagtgccatacaccagtcaggtccg\n\
+agccacatacacggagaacattctaacatagcattctcaactcgatcatttgcaggttac\n\
+ttctttcctatcctagtgctaaaaatcatacttgcaatcccatagcacggattaagaacc\n\
+taagaaacaattcagtaaaacatgttcgaattcttggtatgggaacatcattgcagctat\n\
+ggtctaacgcattaatgtttgggtacatcttccatcatataaacaggaagagtctgacga\n\
+cagggagtgcttgcgatcatgtctatcattgtgaaatcaaattgtagctcacatgtcgtc\n\
+tatgagagcgtgtatccgataagatttagaaaaatagaagtcgtataagatctcactgaa\n\
+cttttgaatgaatgtgaagcatatatgatctgctttaataaaactttatccataggatac\n\
+gtttccaaatcaattcaataattattagtcaaaatagataaggatgaacaacctgaaggc\n\
+cgatcggacgtagaaagtggtcccatcactttgagttgatattgttgaaccacacgttat\n\
+tatggttttcaaacagtctcaggatattgtatatacagataatccgataccagttgtctg\n\
+acgcccctcttacgtaccccaccctttgtgacgtttaaagcagttgttcagtattttaaa\n\
+ctaggcggcaactaatttggaaagaagcacagtggatatgtctaaattcttgttattcag\n\
+gcctgaatttaatacaccgcatagttaacttcgcggtagagttgttcatcatgcctcctc\n\
+taagctaccacttctatgatacaccaatagttgttctacggaatctgataattggccaag\n\
+tcataaacttccgctgcgttcaacccccttgctcgaatatccaactcgaaaagacagcct\n\
+tttggtgtccggaacaaatcagttacttcttttctgatgttaattctctgtggtcagata\n\
+cagaccaaaaactccgcggatttaccatcctccaagaacaaatttgcatcaacatagcat\n\
+tttggctacatattctaagtctcaatagtttaggttttcaactacattatcccaacatta\n\
+ggattggaggaataatagctgggtaagtccccttgcgtctacaatcgactattttttatg\n\
+aatatgcttctgccgcacctatggttattaaaaaagtcatgactttgaagaaccctgaaa\n\
+agatagatgaatcaggtgtaatggcagcagccaaagagcatataattagcaacactctaa\n\
+gaacattatagatatgatgatagcgatcgtcatgatgttatccggtcacaatagtagctt\n\
+catcagctaattcgttttgccagtggtgacttgcgctggaagaatcgttatacggtccct\n\
+tccctcttgatacggtgggggcttattcaaccgcgtggattgggttgtcatacttgcatt\n\
+aaacgatgtaaaccatctagtagtcaactatactaaatcacaaaatagtgatcaatacat\n\
+acccgcttcatggttttaaccatttaattgattaaagatattccgctaagaaccattatc\n\
+tacctaaactgatcgccgtatcctagtagtttgaaatttgatgtaccgtaatgatcaacg\n\
+aagtaaaacgttatattgtatgtagaataataggtcttggagctaaatgatgtgattggt\n\
+agtgaagacttacccttacaactttaccggtttctcggaagaatatactagagaatcaat\n\
+gcatgggctacataagcactttagtctaatgagataaaaaatacacgagtcttccatcat\n\
+gaattttttgtcgaaaaactcgaacctggtaatttaaaccatatatctttatgtcgtcaa\n\
+taactctcatatgttttatataacttcccaatcacgacttgtaactgcttgttcgactga\n\
+gctgtttgagctatgaggccgggatccggttgagctacatctatttgctacaagaaaaat\n\
+gaaagcacatttgttgggagttctggctacactcatagagaaataagtggcccgagtggg\n\
+tgcggcctgcctccatattcaagtgtatcttaaaccaagtggttccaacgctcgcgctaa\n\
+agaattaaagcctttatttcctccacggagtagcccgtaatccggttcgaaagagaccat\n\
+tgaagttaattttcatatccagtgaagtttaggcacaagcatgtgttctgccacatgcct\n\
+caaagcgctcttcaaccaagatatgattcatcctaacttcgatgaatgcgtctgtaacat\n\
+aaatatagaaggaatgattcggcgagttaattttcgccttctccaacatggcatccctac\n\
+gttcgttataaggaccatacatgtaggttttaaaggtttgcggttaatcgatatttacat\n\
+catagaaattctatagtcaaatttacaagactctagatactcactcgttgcagccggcta\n\
+ggaagcgctttgtaccttacttcccttttcgttgcgtaatatgaatttcatatagtaagt\n\
+tcaaggcactcatacctccgtgaagagggtagatagactattaaagttgtttaatagtac\n\
+gtattgatggaaatgacccgtaggagatttaccactcaatccacaagattcgctgctgtg\n\
+cattatcaaaacagtgcatgtcgaaacatgggttgggtccttcaaacacgaatccaggta\n\
+gagatacctttgcaattttt\n";
+
+dnaInput = dnaInput + dnaInput + dnaInput;
+
+var ilen, clen,
+ seqs = [
+ /agggtaaa|tttaccct/ig,
+ /[cgt]gggtaaa|tttaccc[acg]/ig,
+ /a[act]ggtaaa|tttacc[agt]t/ig],
+ seqs2 = [/ag[act]gtaaa|tttac[agt]ct/ig,
+ /agg[act]taaa|ttta[agt]cct/ig,
+ /aggg[acg]aaa|ttt[cgt]ccct/ig],
+ seqs3 = [/agggt[cgt]aa|tt[acg]accct/ig,
+ /agggta[cgt]a|t[acg]taccct/ig,
+ /agggtaa[cgt]|[acg]ttaccct/ig],
+ subs = {
+ B: '(c|g|t)', D: '(a|g|t)', H: '(a|c|t)', K: '(g|t)',
+ M: '(a|c)', N: '(a|c|g|t)', R: '(a|g)', S: '(c|t)',
+ V: '(a|c|g)', W: '(a|t)', Y: '(c|t)' }
+
+ilen = dnaInput.length;
+
+// There is no in-place substitution
+dnaInput = dnaInput.replace(/>.*\n|\n/g,"")
+clen = dnaInput.length
+
+var dnaOutputString;
+
+window.onload = function(){ startTest("sunspider-regexp-dna", '4a9a13f2');
+
+test("DNA Match (1)", function(){
+ for(i in seqs)
+ dnaOutputString += seqs[i].source + " " + (dnaInput.match(seqs[i]) || []).length + "\n";
+ // match returns null if no matches, so replace with empty
+});
+
+test("DNA Match (2)", function(){
+ for(i in seqs2)
+ dnaOutputString += seqs2[i].source + " " + (dnaInput.match(seqs2[i]) || []).length + "\n";
+ // match returns null if no matches, so replace with empty
+});
+
+test("DNA Match (3)", function(){
+ for(i in seqs3)
+ dnaOutputString += seqs3[i].source + " " + (dnaInput.match(seqs3[i]) || []).length + "\n";
+ // match returns null if no matches, so replace with empty
+});
+
+test("DNA Replace", function(){
+ for(k in subs)
+ dnaInput = dnaInput.replace(k, subs[k]) // FIXME: Would like this to be a global substitution in a future version of SunSpider.
+ // search string, replacement string, flags
+});
+
+endTest(); };
+</script>
+</head>
+<body></body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/sunspider-string-fasta.html b/testing/talos/talos/tests/dromaeo/tests/sunspider-string-fasta.html
new file mode 100644
index 0000000000..3f4395f70b
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/sunspider-string-fasta.html
@@ -0,0 +1,104 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script>
+// The Great Computer Language Shootout
+// http://shootout.alioth.debian.org
+//
+// Contributed by Ian Osgood
+
+var last = 42, A = 3877, C = 29573, M = 139968;
+
+function rand(max) {
+ last = (last * A + C) % M;
+ return max * last / M;
+}
+
+var ALU =
+ "GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG" +
+ "GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA" +
+ "CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT" +
+ "ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA" +
+ "GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG" +
+ "AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC" +
+ "AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA";
+
+var IUB = {
+ a:0.27, c:0.12, g:0.12, t:0.27,
+ B:0.02, D:0.02, H:0.02, K:0.02,
+ M:0.02, N:0.02, R:0.02, S:0.02,
+ V:0.02, W:0.02, Y:0.02
+}
+
+var HomoSap = {
+ a: 0.3029549426680,
+ c: 0.1979883004921,
+ g: 0.1975473066391,
+ t: 0.3015094502008
+}
+
+function makeCumulative(table) {
+ var last = null;
+ for (var c in table) {
+ if (last) table[c] += table[last];
+ last = c;
+ }
+}
+
+function fastaRepeat(n, seq) {
+ var seqi = 0, lenOut = 60;
+ while (n>0) {
+ if (n<lenOut) lenOut = n;
+ if (seqi + lenOut < seq.length) {
+ ret = seq.substring(seqi, seqi+lenOut);
+ seqi += lenOut;
+ } else {
+ var s = seq.substring(seqi);
+ seqi = lenOut - s.length;
+ ret = s + seq.substring(0, seqi);
+ }
+ n -= lenOut;
+ }
+}
+
+function fastaRandom(n, table) {
+ var line = new Array(60);
+ makeCumulative(table);
+ while (n>0) {
+ if (n<line.length) line = new Array(n);
+ for (var i=0; i<line.length; i++) {
+ var r = rand(1);
+ for (var c in table) {
+ if (r < table[c]) {
+ line[i] = c;
+ break;
+ }
+ }
+ }
+ ret = line.join('');
+ n -= line.length;
+ }
+}
+
+window.onload = function(){ startTest("sunspider-string-fasta", '8d52ecfc');
+
+var ret;
+var n = 16;
+
+test( "Homo sapiens alu", function(){
+ ret = fastaRepeat(4*n*10000, ALU);
+});
+
+test( "IUB ambiguity codes", function(){
+ ret = fastaRandom(3*n*100, IUB);
+});
+
+test( "Homo sapiens frequency", function(){
+ ret = fastaRandom(5*n*100, HomoSap);
+});
+
+endTest(); };
+</script>
+</head>
+<body></body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/sunspider-string-tagcloud.html b/testing/talos/talos/tests/dromaeo/tests/sunspider-string-tagcloud.html
new file mode 100644
index 0000000000..38158facb3
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/sunspider-string-tagcloud.html
@@ -0,0 +1,282 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script>
+/*
+ * Copyright (C) 2007 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``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 APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS 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.
+ */
+
+/*
+ Portions from:
+ json.js
+ 2007-10-10
+
+ Public Domain
+*/
+
+// This test parses a JSON string giving tag names and popularity, and
+// generates html markup for a "tagcloud" view.
+
+if (!Object.prototype.toJSONString) {
+
+ Array.prototype.toJSONString = function (w) {
+ var a = [], // The array holding the partial texts.
+ i, // Loop counter.
+ l = this.length,
+ v; // The value to be stringified.
+
+ for (i = 0; i < l; i += 1) {
+ v = this[i];
+ switch (typeof v) {
+ case 'object':
+
+ if (v && typeof v.toJSONString === 'function') {
+ a.push(v.toJSONString(w));
+ } else {
+ a.push('null');
+ }
+ break;
+
+ case 'string':
+ case 'number':
+ case 'boolean':
+ a.push(v.toJSONString());
+ break;
+ default:
+ a.push('null');
+ }
+ }
+
+ return '[' + a.join(',') + ']';
+ };
+
+
+ Boolean.prototype.toJSONString = function () {
+ return String(this);
+ };
+
+
+ Date.prototype.toJSONString = function () {
+
+ function f(n) {
+
+ return n < 10 ? '0' + n : n;
+ }
+
+ return '"' + this.getUTCFullYear() + '-' +
+ f(this.getUTCMonth() + 1) + '-' +
+ f(this.getUTCDate()) + 'T' +
+ f(this.getUTCHours()) + ':' +
+ f(this.getUTCMinutes()) + ':' +
+ f(this.getUTCSeconds()) + 'Z"';
+ };
+
+
+ Number.prototype.toJSONString = function () {
+
+ return isFinite(this) ? String(this) : 'null';
+ };
+
+
+ Object.prototype.toJSONString = function (w) {
+ var a = [], // The array holding the partial texts.
+ k, // The current key.
+ i, // The loop counter.
+ v; // The current value.
+
+ if (w) {
+ for (i = 0; i < w.length; i += 1) {
+ k = w[i];
+ if (typeof k === 'string') {
+ v = this[k];
+ switch (typeof v) {
+ case 'object':
+
+ if (v) {
+ if (typeof v.toJSONString === 'function') {
+ a.push(k.toJSONString() + ':' +
+ v.toJSONString(w));
+ }
+ } else {
+ a.push(k.toJSONString() + ':null');
+ }
+ break;
+
+ case 'string':
+ case 'number':
+ case 'boolean':
+ a.push(k.toJSONString() + ':' + v.toJSONString());
+
+ }
+ }
+ }
+ } else {
+
+ for (k in this) {
+ if (typeof k === 'string' &&
+ Object.prototype.hasOwnProperty.apply(this, [k])) {
+ v = this[k];
+ switch (typeof v) {
+ case 'object':
+
+ if (v) {
+ if (typeof v.toJSONString === 'function') {
+ a.push(k.toJSONString() + ':' +
+ v.toJSONString());
+ }
+ } else {
+ a.push(k.toJSONString() + ':null');
+ }
+ break;
+
+ case 'string':
+ case 'number':
+ case 'boolean':
+ a.push(k.toJSONString() + ':' + v.toJSONString());
+
+ }
+ }
+ }
+ }
+
+ return '{' + a.join(',') + '}';
+ };
+
+
+ (function (s) {
+
+ var m = {
+ '\b': '\\b',
+ '\t': '\\t',
+ '\n': '\\n',
+ '\f': '\\f',
+ '\r': '\\r',
+ '"' : '\\"',
+ '\\': '\\\\'
+ };
+
+
+ s.parseJSON = function (filter) {
+ var j;
+
+ function walk(k, v) {
+ var i, n;
+ if (v && typeof v === 'object') {
+ for (i in v) {
+ if (Object.prototype.hasOwnProperty.apply(v, [i])) {
+ n = walk(i, v[i]);
+ if (n !== undefined) {
+ v[i] = n;
+ }
+ }
+ }
+ }
+ return filter(k, v);
+ }
+
+ if (/^[\],:{}\s]*$/.test(this.replace(/\\./g, '@').
+ replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(:?[eE][+\-]?\d+)?/g, ']').
+ replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
+
+ j = eval('(' + this + ')');
+
+ return typeof filter === 'function' ? walk('', j) : j;
+ }
+
+ throw new SyntaxError('parseJSON');
+ };
+
+
+ s.toJSONString = function () {
+
+ if (/["\\\x00-\x1f]/.test(this)) {
+ return '"' + this.replace(/[\x00-\x1f\\"]/g, function (a) {
+ var c = m[a];
+ if (c) {
+ return c;
+ }
+ c = a.charCodeAt();
+ return '\\u00' + Math.floor(c / 16).toString(16) +
+ (c % 16).toString(16);
+ }) + '"';
+ }
+ return '"' + this + '"';
+ };
+ })(String.prototype);
+}
+
+var tagInfoJSON = '[\n {\n \"tag\": "titillation",\n \"popularity\": 4294967296\n },\n {\n \"tag\": "foamless",\n \"popularity\": 1257718401\n },\n {\n \"tag\": "snarler",\n \"popularity\": 613166183\n },\n {\n \"tag\": "multangularness",\n \"popularity\": 368304452\n },\n {\n \"tag\": "Fesapo unventurous",\n \"popularity\": 248026512\n },\n {\n \"tag\": "esthesioblast",\n \"popularity\": 179556755\n },\n {\n \"tag\": "echeneidoid",\n \"popularity\": 136641578\n },\n {\n \"tag\": "embryoctony",\n \"popularity\": 107852576\n },\n {\n \"tag\": "undilatory",\n \"popularity\": 87537981\n },\n {\n \"tag\": "predisregard",\n \"popularity\": 72630939\n },\n {\n \"tag\": "allergenic",\n \"popularity\": 61345190\n },\n {\n \"tag\": "uncloudy",\n \"popularity\": 52580571\n },\n {\n \"tag\": "unforeseeably",\n \"popularity\": 45628109\n },\n {\n \"tag\": "sturniform",\n \"popularity\": 40013489\n },\n {\n \"tag\": "anesthetize",\n \"popularity\": 35409226\n },\n {\n \"tag\": "ametabolia",\n \"popularity\": 31583050\n },\n {\n \"tag\": "angiopathy",\n \"popularity\": 28366350\n },\n {\n \"tag\": "sultanaship",\n \"popularity\": 25634218\n },\n {\n \"tag\": "Frenchwise",\n \"popularity\": 23292461\n },\n {\n \"tag\": "cerviconasal",\n \"popularity\": 21268909\n },\n {\n \"tag\": "mercurialness",\n \"popularity\": 19507481\n },\n {\n \"tag\": "glutelin venditate",\n \"popularity\": 17964042\n },\n {\n \"tag\": "acred overblack",\n \"popularity\": 16603454\n },\n {\n \"tag\": "Atik",\n \"popularity\": 15397451\n },\n {\n \"tag\": "puncturer",\n \"popularity\": 14323077\n },\n {\n \"tag\": "pukatea",\n \"popularity\": 13361525\n },\n {\n \"tag\": "suberize",\n \"popularity\": 12497261\n },\n {\n \"tag\": "Godfrey",\n \"popularity\": 11717365\n },\n {\n \"tag\": "tetraptote",\n \"popularity\": 11011011\n },\n {\n \"tag\": "lucidness",\n \"popularity\": 10369074\n },\n {\n \"tag\": "tartness",\n \"popularity\": 9783815\n },\n {\n \"tag\": "axfetch",\n \"popularity\": 9248634\n },\n {\n \"tag\": "preacquittal",\n \"popularity\": 8757877\n },\n {\n \"tag\": "matris",\n \"popularity\": 8306671\n },\n {\n \"tag\": "hyphenate",\n \"popularity\": 7890801\n },\n {\n \"tag\": "semifabulous",\n \"popularity\": 7506606\n },\n {\n \"tag\": "oppressiveness",\n \"popularity\": 7150890\n },\n {\n \"tag\": "Protococcales",\n \"popularity\": 6820856\n },\n {\n \"tag\": "unpreventive",\n \"popularity\": 6514045\n },\n {\n \"tag\": "Cordia",\n \"popularity\": 6228289\n },\n {\n \"tag\": "Wakamba leaflike",\n \"popularity\": 5961668\n },\n {\n \"tag\": "dacryoma",\n \"popularity\": 5712480\n },\n {\n \"tag\": "inguinal",\n \"popularity\": 5479211\n },\n {\n \"tag\": "responseless",\n \"popularity\": 5260507\n },\n {\n \"tag\": "supplementarily",\n \"popularity\": 5055158\n },\n {\n \"tag\": "emu",\n \"popularity\": 4862079\n },\n {\n \"tag\": "countermeet",\n \"popularity\": 4680292\n },\n {\n \"tag\": "purrer",\n \"popularity\": 4508918\n },\n {\n \"tag\": "Corallinaceae",\n \"popularity\": 4347162\n },\n {\n \"tag\": "speculum",\n \"popularity\": 4194304\n },\n {\n \"tag\": "crimpness",\n \"popularity\": 4049690\n },\n {\n \"tag\": "antidetonant",\n \"popularity\": 3912727\n },\n {\n \"tag\": "topeewallah",\n \"popularity\": 3782875\n },\n {\n \"tag\": "fidalgo ballant",\n \"popularity\": 3659640\n },\n {\n \"tag\": "utriculose",\n \"popularity\": 3542572\n },\n {\n \"tag\": "testata",\n \"popularity\": 3431259\n },\n {\n \"tag\": "beltmaking",\n \"popularity\": 3325322\n },\n {\n \"tag\": "necrotype",\n \"popularity\": 3224413\n },\n {\n \"tag\": "ovistic",\n \"popularity\": 3128215\n },\n {\n \"tag\": "swindlership",\n \"popularity\": 3036431\n },\n {\n \"tag\": "augustal",\n \"popularity\": 2948792\n },\n {\n \"tag\": "Titoist",\n \"popularity\": 2865047\n },\n {\n \"tag\": "trisoctahedral",\n \"popularity\": 2784963\n },\n {\n \"tag\": "sequestrator",\n \"popularity\": 2708327\n },\n {\n \"tag\": "sideburns",\n \"popularity\": 2634939\n },\n {\n \"tag\": "paraphrasia",\n \"popularity\": 2564616\n },\n {\n \"tag\": "graminology unbay",\n \"popularity\": 2497185\n },\n {\n \"tag\": "acaridomatium emargination",\n \"popularity\": 2432487\n },\n {\n \"tag\": "roofward",\n \"popularity\": 2370373\n },\n {\n \"tag\": "lauder",\n \"popularity\": 2310705\n },\n {\n \"tag\": "subjunctive",\n \"popularity\": 2253354\n },\n {\n \"tag\": "subelongate",\n \"popularity\": 2198199\n },\n {\n \"tag\": "guacimo",\n \"popularity\": 2145128\n },\n {\n \"tag\": "cockade",\n \"popularity\": 2094033\n },\n {\n \"tag\": "misgauge",\n \"popularity\": 2044818\n },\n {\n \"tag\": "unexpensive",\n \"popularity\": 1997388\n },\n {\n \"tag\": "chebel",\n \"popularity\": 1951657\n },\n {\n \"tag\": "unpursuing",\n \"popularity\": 1907543\n },\n {\n \"tag\": "kilobar",\n \"popularity\": 1864969\n },\n {\n \"tag\": "obsecration",\n \"popularity\": 1823863\n },\n {\n \"tag\": "nacarine",\n \"popularity\": 1784157\n },\n {\n \"tag\": "spirituosity",\n \"popularity\": 1745787\n },\n {\n \"tag\": "movableness deity",\n \"popularity\": 1708692\n },\n {\n \"tag\": "exostracism",\n \"popularity\": 1672816\n },\n {\n \"tag\": "archipterygium",\n \"popularity\": 1638104\n },\n {\n \"tag\": "monostrophic",\n \"popularity\": 1604506\n },\n {\n \"tag\": "gynecide",\n \"popularity\": 1571974\n },\n {\n \"tag\": "gladden",\n \"popularity\": 1540462\n },\n {\n \"tag\": "throughbred",\n \"popularity\": 1509927\n },\n {\n \"tag\": "groper",\n \"popularity\": 1480329\n },\n {\n \"tag\": "Xenosaurus",\n \"popularity\": 1451628\n },\n {\n \"tag\": "photoetcher",\n \"popularity\": 1423788\n },\n {\n \"tag\": "glucosid",\n \"popularity\": 1396775\n },\n {\n \"tag\": "Galtonian",\n \"popularity\": 1370555\n },\n {\n \"tag\": "mesosporic",\n \"popularity\": 1345097\n },\n {\n \"tag\": "theody",\n \"popularity\": 1320370\n },\n {\n \"tag\": "zaffer",\n \"popularity\": 1296348\n },\n {\n \"tag\": "probiology",\n \"popularity\": 1273003\n },\n {\n \"tag\": "rhizomic",\n \"popularity\": 1250308\n },\n {\n \"tag\": "superphosphate",\n \"popularity\": 1228240\n },\n {\n \"tag\": "Hippolytan",\n \"popularity\": 1206776\n },\n {\n \"tag\": "garget",\n \"popularity\": 1185892\n },\n {\n \"tag\": "diploplacula",\n \"popularity\": 1165568\n },\n {\n \"tag\": "orohydrographical",\n \"popularity\": 1145785\n },\n {\n \"tag\": "enhypostatize",\n \"popularity\": 1126521\n },\n {\n \"tag\": "polisman",\n \"popularity\": 1107759\n },\n {\n \"tag\": "acetometer",\n \"popularity\": 1089482\n },\n {\n \"tag\": "unsnatched",\n \"popularity\": 1071672\n },\n {\n \"tag\": "yabber",\n \"popularity\": 1054313\n },\n {\n \"tag\": "demiwolf",\n \"popularity\": 1037390\n },\n {\n \"tag\": "chromascope",\n \"popularity\": 1020888\n },\n {\n \"tag\": "seamanship",\n \"popularity\": 1004794\n },\n {\n \"tag\": "nonfenestrated",\n \"popularity\": 989092\n },\n {\n \"tag\": "hydrophytism",\n \"popularity\": 973771\n },\n {\n \"tag\": "dotter",\n \"popularity\": 958819\n },\n {\n \"tag\": "thermoperiodism",\n \"popularity\": 944222\n },\n {\n \"tag\": "unlawyerlike",\n \"popularity\": 929970\n },\n {\n \"tag\": "enantiomeride citywards",\n \"popularity\": 916052\n },\n {\n \"tag\": "unmetallurgical",\n \"popularity\": 902456\n },\n {\n \"tag\": "prickled",\n \"popularity\": 889174\n },\n {\n \"tag\": "strangerwise manioc",\n \"popularity\": 876195\n },\n {\n \"tag\": "incisorial",\n \"popularity\": 863510\n },\n {\n \"tag\": "irrationalize",\n \"popularity\": 851110\n },\n {\n \"tag\": "nasology",\n \"popularity\": 838987\n },\n {\n \"tag\": "fatuism",\n \"popularity\": 827131\n },\n {\n \"tag\": "Huk",\n \"popularity\": 815535\n },\n {\n \"tag\": "properispomenon",\n \"popularity\": 804192\n },\n {\n \"tag\": "unpummelled",\n \"popularity\": 793094\n },\n {\n \"tag\": "technographically",\n \"popularity\": 782233\n },\n {\n \"tag\": "underfurnish",\n \"popularity\": 771603\n },\n {\n \"tag\": "sinter",\n \"popularity\": 761198\n },\n {\n \"tag\": "lateroanterior",\n \"popularity\": 751010\n },\n {\n \"tag\": "nonpersonification",\n \"popularity\": 741034\n },\n {\n \"tag\": "Sitophilus",\n \"popularity\": 731264\n },\n {\n \"tag\": "unstudded overexerted",\n \"popularity\": 721694\n },\n {\n \"tag\": "tracheation",\n \"popularity\": 712318\n },\n {\n \"tag\": "thirteenth begloze",\n \"popularity\": 703131\n },\n {\n \"tag\": "bespice",\n \"popularity\": 694129\n },\n {\n \"tag\": "doppia",\n \"popularity\": 685305\n },\n {\n \"tag\": "unadorned",\n \"popularity\": 676656\n },\n {\n \"tag\": "dovelet engraff",\n \"popularity\": 668176\n },\n {\n \"tag\": "diphyozooid",\n \"popularity\": 659862\n },\n {\n \"tag\": "mure",\n \"popularity\": 651708\n },\n {\n \"tag\": "Tripitaka",\n \"popularity\": 643710\n },\n {\n \"tag\": "Billjim",\n \"popularity\": 635865\n },\n {\n \"tag\": "pyramidical",\n \"popularity\": 628169\n },\n {\n \"tag\": "circumlocutionist",\n \"popularity\": 620617\n },\n {\n \"tag\": "slapstick",\n \"popularity\": 613207\n },\n {\n \"tag\": "preobedience",\n \"popularity\": 605934\n },\n {\n \"tag\": "unfriarlike",\n \"popularity\": 598795\n },\n {\n \"tag\": "microchromosome",\n \"popularity\": 591786\n },\n {\n \"tag\": "Orphicism",\n \"popularity\": 584905\n },\n {\n \"tag\": "peel",\n \"popularity\": 578149\n },\n {\n \"tag\": "obediential",\n \"popularity\": 571514\n },\n {\n \"tag\": "Peripatidea",\n \"popularity\": 564997\n },\n {\n \"tag\": "undoubtful",\n \"popularity\": 558596\n },\n {\n \"tag\": "lodgeable",\n \"popularity\": 552307\n },\n {\n \"tag\": "pustulated woodchat",\n \"popularity\": 546129\n },\n {\n \"tag\": "antepast",\n \"popularity\": 540057\n },\n {\n \"tag\": "sagittoid matrimoniously",\n \"popularity\": 534091\n },\n {\n \"tag\": "Albizzia",\n \"popularity\": 528228\n },\n {\n \"tag\": "Elateridae unnewness",\n \"popularity\": 522464\n },\n {\n \"tag\": "convertingness",\n \"popularity\": 516798\n },\n {\n \"tag\": "Pelew",\n \"popularity\": 511228\n },\n {\n \"tag\": "recapitulation",\n \"popularity\": 505751\n },\n {\n \"tag\": "shack",\n \"popularity\": 500365\n },\n {\n \"tag\": "unmellowed",\n \"popularity\": 495069\n },\n {\n \"tag\": "pavis capering",\n \"popularity\": 489859\n },\n {\n \"tag\": "fanfare",\n \"popularity\": 484735\n },\n {\n \"tag\": "sole",\n \"popularity\": 479695\n },\n {\n \"tag\": "subarcuate",\n \"popularity\": 474735\n },\n {\n \"tag\": "multivious",\n \"popularity\": 469856\n },\n {\n \"tag\": "squandermania",\n \"popularity\": 465054\n },\n {\n \"tag\": "scintle",\n \"popularity\": 460329\n },\n {\n \"tag\": "hash chirognomic",\n \"popularity\": 455679\n },\n {\n \"tag\": "linseed",\n \"popularity\": 451101\n },\n {\n \"tag\": "redoubtable",\n \"popularity\": 446596\n },\n {\n \"tag\": "poachy reimpact",\n \"popularity\": 442160\n },\n {\n \"tag\": "limestone",\n \"popularity\": 437792\n },\n {\n \"tag\": "serranid",\n \"popularity\": 433492\n },\n {\n \"tag\": "pohna",\n \"popularity\": 429258\n },\n {\n \"tag\": "warwolf",\n \"popularity\": 425088\n },\n {\n \"tag\": "ruthenous",\n \"popularity\": 420981\n },\n {\n \"tag\": "dover",\n \"popularity\": 416935\n },\n {\n \"tag\": "deuteroalbumose",\n \"popularity\": 412950\n },\n {\n \"tag\": "pseudoprophetic",\n \"popularity\": 409025\n },\n {\n \"tag\": "dissoluteness",\n \"popularity\": 405157\n },\n {\n \"tag\": "preinvention",\n \"popularity\": 401347\n },\n {\n \"tag\": "swagbellied",\n \"popularity\": 397592\n },\n {\n \"tag\": "Ophidia",\n \"popularity\": 393892\n },\n {\n \"tag\": "equanimity",\n \"popularity\": 390245\n },\n {\n \"tag\": "troutful",\n \"popularity\": 386651\n },\n {\n \"tag\": "uke",\n \"popularity\": 383108\n },\n {\n \"tag\": "preacquaint",\n \"popularity\": 379616\n },\n {\n \"tag\": "shoq",\n \"popularity\": 376174\n },\n {\n \"tag\": "yox",\n \"popularity\": 372780\n },\n {\n \"tag\": "unelemental",\n \"popularity\": 369434\n },\n {\n \"tag\": "Yavapai",\n \"popularity\": 366134\n },\n {\n \"tag\": "joulean",\n \"popularity\": 362880\n },\n {\n \"tag\": "dracontine",\n \"popularity\": 359672\n },\n {\n \"tag\": "hardmouth",\n \"popularity\": 356507\n },\n {\n \"tag\": "sylvanize",\n \"popularity\": 353386\n },\n {\n \"tag\": "intraparenchymatous meadowbur",\n \"popularity\": 350308\n },\n {\n \"tag\": "uncharily",\n \"popularity\": 347271\n },\n {\n \"tag\": "redtab flexibly",\n \"popularity\": 344275\n },\n {\n \"tag\": "centervelic",\n \"popularity\": 341319\n },\n {\n \"tag\": "unravellable",\n \"popularity\": 338403\n },\n {\n \"tag\": "infortunately",\n \"popularity\": 335526\n },\n {\n \"tag\": "cannel",\n \"popularity\": 332687\n },\n {\n \"tag\": "oxyblepsia",\n \"popularity\": 329885\n },\n {\n \"tag\": "Damon",\n \"popularity\": 327120\n },\n {\n \"tag\": "etherin",\n \"popularity\": 324391\n },\n {\n \"tag\": "luminal",\n \"popularity\": 321697\n },\n {\n \"tag\": "interrogatorily presbyte",\n \"popularity\": 319038\n },\n {\n \"tag\": "hemiclastic",\n \"popularity\": 316414\n },\n {\n \"tag\": "poh flush",\n \"popularity\": 313823\n },\n {\n \"tag\": "Psoroptes",\n \"popularity\": 311265\n },\n {\n \"tag\": "dispirit",\n \"popularity\": 308740\n },\n {\n \"tag\": "nashgab",\n \"popularity\": 306246\n },\n {\n \"tag\": "Aphidiinae",\n \"popularity\": 303784\n },\n {\n \"tag\": "rhapsody nonconstruction",\n \"popularity\": 301353\n },\n {\n \"tag\": "Osmond",\n \"popularity\": 298952\n },\n {\n \"tag\": "Leonis",\n \"popularity\": 296581\n },\n {\n \"tag\": "Lemnian",\n \"popularity\": 294239\n },\n {\n \"tag\": "acetonic gnathonic",\n \"popularity\": 291926\n },\n {\n \"tag\": "surculus",\n \"popularity\": 289641\n },\n {\n \"tag\": "diagonally",\n \"popularity\": 287384\n },\n {\n \"tag\": "counterpenalty",\n \"popularity\": 285154\n },\n {\n \"tag\": "Eugenie",\n \"popularity\": 282952\n },\n {\n \"tag\": "hornbook",\n \"popularity\": 280776\n },\n {\n \"tag\": "miscoin",\n \"popularity\": 278626\n },\n {\n \"tag\": "admi",\n \"popularity\": 276501\n },\n {\n \"tag\": "Tarmac",\n \"popularity\": 274402\n },\n {\n \"tag\": "inexplicable",\n \"popularity\": 272328\n },\n {\n \"tag\": "rascallion",\n \"popularity\": 270278\n },\n {\n \"tag\": "dusterman",\n \"popularity\": 268252\n },\n {\n \"tag\": "osteostomous unhoroscopic",\n \"popularity\": 266250\n },\n {\n \"tag\": "spinibulbar",\n \"popularity\": 264271\n },\n {\n \"tag\": "phototelegraphically",\n \"popularity\": 262315\n },\n {\n \"tag\": "Manihot",\n \"popularity\": 260381\n },\n {\n \"tag\": "neighborhood",\n \"popularity\": 258470\n },\n {\n \"tag\": "Vincetoxicum",\n \"popularity\": 256581\n },\n {\n \"tag\": "khirka",\n \"popularity\": 254713\n },\n {\n \"tag\": "conscriptive",\n \"popularity\": 252866\n },\n {\n \"tag\": "synechthran",\n \"popularity\": 251040\n },\n {\n \"tag\": "Guttiferales",\n \"popularity\": 249235\n },\n {\n \"tag\": "roomful",\n \"popularity\": 247450\n },\n {\n \"tag\": "germinal",\n \"popularity\": 245685\n },\n {\n \"tag\": "untraitorous",\n \"popularity\": 243939\n },\n {\n \"tag\": "nondissenting",\n \"popularity\": 242213\n },\n {\n \"tag\": "amotion",\n \"popularity\": 240506\n },\n {\n \"tag\": "badious",\n \"popularity\": 238817\n },\n {\n \"tag\": "sumpit",\n \"popularity\": 237147\n },\n {\n \"tag\": "ectozoic",\n \"popularity\": 235496\n },\n {\n \"tag\": "elvet",\n \"popularity\": 233862\n },\n {\n \"tag\": "underclerk",\n \"popularity\": 232246\n },\n {\n \"tag\": "reticency",\n \"popularity\": 230647\n },\n {\n \"tag\": "neutroclusion",\n \"popularity\": 229065\n },\n {\n \"tag\": "unbelieving",\n \"popularity\": 227500\n },\n {\n \"tag\": "histogenetic",\n \"popularity\": 225952\n },\n {\n \"tag\": "dermamyiasis",\n \"popularity\": 224421\n },\n {\n \"tag\": "telenergy",\n \"popularity\": 222905\n },\n {\n \"tag\": "axiomatic",\n \"popularity\": 221406\n },\n {\n \"tag\": "undominoed",\n \"popularity\": 219922\n },\n {\n \"tag\": "periosteoma",\n \"popularity\": 218454\n },\n {\n \"tag\": "justiciaryship",\n \"popularity\": 217001\n },\n {\n \"tag\": "autoluminescence",\n \"popularity\": 215563\n },\n {\n \"tag\": "osmous",\n \"popularity\": 214140\n },\n {\n \"tag\": "borgh",\n \"popularity\": 212731\n },\n {\n \"tag\": "bedebt",\n \"popularity\": 211337\n },\n {\n \"tag\": "considerableness adenoidism",\n \"popularity\": 209957\n },\n {\n \"tag\": "sailorizing",\n \"popularity\": 208592\n },\n {\n \"tag\": "Montauk",\n \"popularity\": 207240\n },\n {\n \"tag\": "Bridget",\n \"popularity\": 205901\n },\n {\n \"tag\": "Gekkota",\n \"popularity\": 204577\n },\n {\n \"tag\": "subcorymbose",\n \"popularity\": 203265\n },\n {\n \"tag\": "undersap",\n \"popularity\": 201967\n },\n {\n \"tag\": "poikilothermic",\n \"popularity\": 200681\n },\n {\n \"tag\": "enneatical",\n \"popularity\": 199409\n },\n {\n \"tag\": "martinetism",\n \"popularity\": 198148\n },\n {\n \"tag\": "sustanedly",\n \"popularity\": 196901\n },\n {\n \"tag\": "declaration",\n \"popularity\": 195665\n },\n {\n \"tag\": "myringoplasty",\n \"popularity\": 194442\n },\n {\n \"tag\": "Ginkgo",\n \"popularity\": 193230\n },\n {\n \"tag\": "unrecurrent",\n \"popularity\": 192031\n },\n {\n \"tag\": "proprecedent",\n \"popularity\": 190843\n },\n {\n \"tag\": "roadman",\n \"popularity\": 189666\n },\n {\n \"tag\": "elemin",\n \"popularity\": 188501\n },\n {\n \"tag\": "maggot",\n \"popularity\": 187347\n },\n {\n \"tag\": "alitrunk",\n \"popularity\": 186204\n },\n {\n \"tag\": "introspection",\n \"popularity\": 185071\n },\n {\n \"tag\": "batiker",\n \"popularity\": 183950\n },\n {\n \"tag\": "backhatch oversettle",\n \"popularity\": 182839\n },\n {\n \"tag\": "thresherman",\n \"popularity\": 181738\n },\n {\n \"tag\": "protemperance",\n \"popularity\": 180648\n },\n {\n \"tag\": "undern",\n \"popularity\": 179568\n },\n {\n \"tag\": "tweeg",\n \"popularity\": 178498\n },\n {\n \"tag\": "crosspath",\n \"popularity\": 177438\n },\n {\n \"tag\": "Tangaridae",\n \"popularity\": 176388\n },\n {\n \"tag\": "scrutation",\n \"popularity\": 175348\n },\n {\n \"tag\": "piecemaker",\n \"popularity\": 174317\n },\n {\n \"tag\": "paster",\n \"popularity\": 173296\n },\n {\n \"tag\": "unpretendingness",\n \"popularity\": 172284\n },\n {\n \"tag\": "inframundane",\n \"popularity\": 171281\n },\n {\n \"tag\": "kiblah",\n \"popularity\": 170287\n },\n {\n \"tag\": "playwrighting",\n \"popularity\": 169302\n },\n {\n \"tag\": "gonepoiesis snowslip",\n \"popularity\": 168326\n },\n {\n \"tag\": "hoodwise",\n \"popularity\": 167359\n },\n {\n \"tag\": "postseason",\n \"popularity\": 166401\n },\n {\n \"tag\": "equivocality",\n \"popularity\": 165451\n },\n {\n \"tag\": "Opiliaceae nuclease",\n \"popularity\": 164509\n },\n {\n \"tag\": "sextipara",\n \"popularity\": 163576\n },\n {\n \"tag\": "weeper",\n \"popularity\": 162651\n },\n {\n \"tag\": "frambesia",\n \"popularity\": 161735\n },\n {\n \"tag\": "answerable",\n \"popularity\": 160826\n },\n {\n \"tag\": "Trichosporum",\n \"popularity\": 159925\n },\n {\n \"tag\": "cajuputol",\n \"popularity\": 159033\n },\n {\n \"tag\": "pleomorphous",\n \"popularity\": 158148\n },\n {\n \"tag\": "aculeolate",\n \"popularity\": 157270\n },\n {\n \"tag\": "wherever",\n \"popularity\": 156400\n },\n {\n \"tag\": "collapse",\n \"popularity\": 155538\n },\n {\n \"tag\": "porky",\n \"popularity\": 154683\n },\n {\n \"tag\": "perule",\n \"popularity\": 153836\n },\n {\n \"tag\": "Nevada",\n \"popularity\": 152996\n },\n {\n \"tag\": "conalbumin",\n \"popularity\": 152162\n },\n {\n \"tag\": "tsunami",\n \"popularity\": 151336\n },\n {\n \"tag\": "Gulf",\n \"popularity\": 150517\n },\n {\n \"tag\": "hertz",\n \"popularity\": 149705\n },\n {\n \"tag\": "limmock",\n \"popularity\": 148900\n },\n {\n \"tag\": "Tartarize",\n \"popularity\": 148101\n },\n {\n \"tag\": "entosphenoid",\n \"popularity\": 147310\n },\n {\n \"tag\": "ibis",\n \"popularity\": 146524\n },\n {\n \"tag\": "unyeaned",\n \"popularity\": 145746\n },\n {\n \"tag\": "tritural",\n \"popularity\": 144973\n },\n {\n \"tag\": "hundredary",\n \"popularity\": 144207\n },\n {\n \"tag\": "stolonlike",\n \"popularity\": 143448\n },\n {\n \"tag\": "chorister",\n \"popularity\": 142694\n },\n {\n \"tag\": "mismove",\n \"popularity\": 141947\n },\n {\n \"tag\": "Andine",\n \"popularity\": 141206\n },\n {\n \"tag\": "Annette proneur escribe",\n \"popularity\": 140471\n },\n {\n \"tag\": "exoperidium",\n \"popularity\": 139742\n },\n {\n \"tag\": "disedge",\n \"popularity\": 139019\n },\n {\n \"tag\": "hypochloruria",\n \"popularity\": 138302\n },\n {\n \"tag\": "prepupa",\n \"popularity\": 137590\n },\n {\n \"tag\": "assent",\n \"popularity\": 136884\n },\n {\n \"tag\": "hydrazobenzene",\n \"popularity\": 136184\n },\n {\n \"tag\": "emballonurid",\n \"popularity\": 135489\n },\n {\n \"tag\": "roselle",\n \"popularity\": 134800\n },\n {\n \"tag\": "unifiedly",\n \"popularity\": 134117\n },\n {\n \"tag\": "clang",\n \"popularity\": 133439\n },\n {\n \"tag\": "acetolytic",\n \"popularity\": 132766\n },\n {\n \"tag\": "cladodont",\n \"popularity\": 132098\n },\n {\n \"tag\": "recoast",\n \"popularity\": 131436\n },\n {\n \"tag\": "celebrated tydie Eocarboniferous",\n \"popularity\": 130779\n },\n {\n \"tag\": "superconsciousness",\n \"popularity\": 130127\n },\n {\n \"tag\": "soberness",\n \"popularity\": 129480\n },\n {\n \"tag\": "panoramist",\n \"popularity\": 128838\n },\n {\n \"tag\": "Orbitolina",\n \"popularity\": 128201\n },\n {\n \"tag\": "overlewd",\n \"popularity\": 127569\n },\n {\n \"tag\": "demiquaver",\n \"popularity\": 126942\n },\n {\n \"tag\": "kamelaukion",\n \"popularity\": 126319\n },\n {\n \"tag\": "flancard",\n \"popularity\": 125702\n },\n {\n \"tag\": "tricuspid",\n \"popularity\": 125089\n },\n {\n \"tag\": "bepelt",\n \"popularity\": 124480\n },\n {\n \"tag\": "decuplet",\n \"popularity\": 123877\n },\n {\n \"tag\": "Rockies",\n \"popularity\": 123278\n },\n {\n \"tag\": "unforgeability",\n \"popularity\": 122683\n },\n {\n \"tag\": "mocha",\n \"popularity\": 122093\n },\n {\n \"tag\": "scrunge",\n \"popularity\": 121507\n },\n {\n \"tag\": "delighter",\n \"popularity\": 120926\n },\n {\n \"tag\": "willey Microtinae",\n \"popularity\": 120349\n },\n {\n \"tag\": "unhuntable",\n \"popularity\": 119777\n },\n {\n \"tag\": "historically",\n \"popularity\": 119208\n },\n {\n \"tag\": "vicegerentship",\n \"popularity\": 118644\n },\n {\n \"tag\": "hemangiosarcoma",\n \"popularity\": 118084\n },\n {\n \"tag\": "harpago",\n \"popularity\": 117528\n },\n {\n \"tag\": "unionoid",\n \"popularity\": 116976\n },\n {\n \"tag\": "wiseman",\n \"popularity\": 116429\n },\n {\n \"tag\": "diclinism",\n \"popularity\": 115885\n },\n {\n \"tag\": "Maud",\n \"popularity\": 115345\n },\n {\n \"tag\": "scaphocephalism",\n \"popularity\": 114809\n },\n {\n \"tag\": "obtenebration",\n \"popularity\": 114277\n },\n {\n \"tag\": "cymar predreadnought",\n \"popularity\": 113749\n },\n {\n \"tag\": "discommend",\n \"popularity\": 113225\n },\n {\n \"tag\": "crude",\n \"popularity\": 112704\n },\n {\n \"tag\": "upflash",\n \"popularity\": 112187\n },\n {\n \"tag\": "saltimbank",\n \"popularity\": 111674\n },\n {\n \"tag\": "posthysterical",\n \"popularity\": 111165\n },\n {\n \"tag\": "trample",\n \"popularity\": 110659\n },\n {\n \"tag\": "ungirthed",\n \"popularity\": 110157\n },\n {\n \"tag\": "unshakable",\n \"popularity\": 109658\n },\n {\n \"tag\": "hepatocystic",\n \"popularity\": 109163\n },\n {\n \"tag\": "psammophyte",\n \"popularity\": 108671\n },\n {\n \"tag\": "millionfold",\n \"popularity\": 108183\n },\n {\n \"tag\": "outtaste",\n \"popularity\": 107698\n },\n {\n \"tag\": "poppycockish",\n \"popularity\": 107217\n },\n {\n \"tag\": "viduine",\n \"popularity\": 106739\n },\n {\n \"tag\": "pleasureman",\n \"popularity\": 106264\n },\n {\n \"tag\": "cholesterolemia",\n \"popularity\": 105792\n },\n {\n \"tag\": "hostlerwife",\n \"popularity\": 105324\n },\n {\n \"tag\": "figure undergrass",\n \"popularity\": 104859\n },\n {\n \"tag\": "bedrape",\n \"popularity\": 104398\n },\n {\n \"tag\": "nuttishness",\n \"popularity\": 103939\n },\n {\n \"tag\": "fow",\n \"popularity\": 103484\n },\n {\n \"tag\": "rachianesthesia",\n \"popularity\": 103031\n },\n {\n \"tag\": "recruitable",\n \"popularity\": 102582\n },\n {\n \"tag\": "semianatomical Oenotheraceae",\n \"popularity\": 102136\n },\n {\n \"tag\": "extracapsular",\n \"popularity\": 101693\n },\n {\n \"tag\": "unsigneted",\n \"popularity\": 101253\n },\n {\n \"tag\": "fissural",\n \"popularity\": 100816\n },\n {\n \"tag\": "ayous",\n \"popularity\": 100381\n },\n {\n \"tag\": "crestfallenness odontograph",\n \"popularity\": 99950\n },\n {\n \"tag\": "monopodium",\n \"popularity\": 99522\n },\n {\n \"tag\": "germfree",\n \"popularity\": 99096\n },\n {\n \"tag\": "dauphin",\n \"popularity\": 98673\n },\n {\n \"tag\": "nonagesimal",\n \"popularity\": 98254\n },\n {\n \"tag\": "waterchat",\n \"popularity\": 97836\n },\n {\n \"tag\": "Entelodon",\n \"popularity\": 97422\n },\n {\n \"tag\": "semischolastic",\n \"popularity\": 97010\n },\n {\n \"tag\": "somata",\n \"popularity\": 96602\n },\n {\n \"tag\": "expositorily",\n \"popularity\": 96195\n },\n {\n \"tag\": "bass",\n \"popularity\": 95792\n },\n {\n \"tag\": "calorimetry",\n \"popularity\": 95391\n },\n {\n \"tag\": "entireness",\n \"popularity\": 94993\n },\n {\n \"tag\": "ratline soppiness",\n \"popularity\": 94597\n },\n {\n \"tag\": "shor",\n \"popularity\": 94204\n },\n {\n \"tag\": "coprecipitation",\n \"popularity\": 93813\n },\n {\n \"tag\": "unblushingly",\n \"popularity\": 93425\n },\n {\n \"tag\": "macarize",\n \"popularity\": 93040\n },\n {\n \"tag\": "scruplesomeness",\n \"popularity\": 92657\n },\n {\n \"tag\": "offsaddle",\n \"popularity\": 92276\n },\n {\n \"tag\": "hypertragical",\n \"popularity\": 91898\n },\n {\n \"tag\": "uncassock loined",\n \"popularity\": 91522\n },\n {\n \"tag\": "interlobate",\n \"popularity\": 91149\n },\n {\n \"tag\": "releasor orrisroot stoloniferously",\n \"popularity\": 90778\n },\n {\n \"tag\": "elementoid",\n \"popularity\": 90410\n },\n {\n \"tag\": "Lentilla",\n \"popularity\": 90043\n },\n {\n \"tag\": "distressing",\n \"popularity\": 89679\n },\n {\n \"tag\": "hydrodrome",\n \"popularity\": 89318\n },\n {\n \"tag\": "Jeannette",\n \"popularity\": 88958\n },\n {\n \"tag\": "Kuli",\n \"popularity\": 88601\n },\n {\n \"tag\": "taxinomist",\n \"popularity\": 88246\n },\n {\n \"tag\": "southwestwardly",\n \"popularity\": 87894\n },\n {\n \"tag\": "polyparia",\n \"popularity\": 87543\n },\n {\n \"tag\": "exmeridian",\n \"popularity\": 87195\n },\n {\n \"tag\": "splenius regimentaled",\n \"popularity\": 86849\n },\n {\n \"tag\": "Sphaeropsidaceae",\n \"popularity\": 86505\n },\n {\n \"tag\": "unbegun",\n \"popularity\": 86163\n },\n {\n \"tag\": "something",\n \"popularity\": 85823\n },\n {\n \"tag\": "contaminable nonexpulsion",\n \"popularity\": 85486\n },\n {\n \"tag\": "douser",\n \"popularity\": 85150\n },\n {\n \"tag\": "prostrike",\n \"popularity\": 84817\n },\n {\n \"tag\": "worky",\n \"popularity\": 84485\n },\n {\n \"tag\": "folliful",\n \"popularity\": 84156\n },\n {\n \"tag\": "prioracy",\n \"popularity\": 83828\n },\n {\n \"tag\": "undermentioned",\n \"popularity\": 83503\n },\n {\n \"tag\": "Judaica",\n \"popularity\": 83179\n },\n {\n \"tag\": "multifarious",\n \"popularity\": 82858\n },\n {\n \"tag\": "poogye",\n \"popularity\": 82538\n },\n {\n \"tag\": "Sparganium",\n \"popularity\": 82221\n },\n {\n \"tag\": "thurrock",\n \"popularity\": 81905\n },\n {\n \"tag\": "outblush",\n \"popularity\": 81591\n },\n {\n \"tag\": "Strophanthus supraordination",\n \"popularity\": 81279\n },\n {\n \"tag\": "gingerroot",\n \"popularity\": 80969\n },\n {\n \"tag\": "unconscient",\n \"popularity\": 80661\n },\n {\n \"tag\": "unconstitutionally",\n \"popularity\": 80354\n },\n {\n \"tag\": "plaguily",\n \"popularity\": 80050\n },\n {\n \"tag\": "waterily equatorwards",\n \"popularity\": 79747\n },\n {\n \"tag\": "nondeposition",\n \"popularity\": 79446\n },\n {\n \"tag\": "dronishly",\n \"popularity\": 79147\n },\n {\n \"tag\": "gateado",\n \"popularity\": 78849\n },\n {\n \"tag\": "dislink",\n \"popularity\": 78553\n },\n {\n \"tag\": "Joceline",\n \"popularity\": 78259\n },\n {\n \"tag\": "amphiboliferous",\n \"popularity\": 77967\n },\n {\n \"tag\": "bushrope",\n \"popularity\": 77676\n },\n {\n \"tag\": "plumicorn sulphosalicylic",\n \"popularity\": 77387\n },\n {\n \"tag\": "nonefficiency",\n \"popularity\": 77100\n },\n {\n \"tag\": "hieroscopy",\n \"popularity\": 76815\n },\n {\n \"tag\": "causativeness",\n \"popularity\": 76531\n },\n {\n \"tag\": "swird paleoeremology",\n \"popularity\": 76249\n },\n {\n \"tag\": "camphoric",\n \"popularity\": 75968\n },\n {\n \"tag\": "retaining",\n \"popularity\": 75689\n },\n {\n \"tag\": "thyreoprotein",\n \"popularity\": 75411\n },\n {\n \"tag\": "carbona",\n \"popularity\": 75136\n },\n {\n \"tag\": "protectively",\n \"popularity\": 74861\n },\n {\n \"tag\": "mosasaur",\n \"popularity\": 74589\n },\n {\n \"tag\": "reciprocator",\n \"popularity\": 74317\n },\n {\n \"tag\": "detentive",\n \"popularity\": 74048\n },\n {\n \"tag\": "supravital",\n \"popularity\": 73780\n },\n {\n \"tag\": "Vespertilionidae",\n \"popularity\": 73513\n },\n {\n \"tag\": "parka",\n \"popularity\": 73248\n },\n {\n \"tag\": "pickaway",\n \"popularity\": 72984\n },\n {\n \"tag\": "oleaceous",\n \"popularity\": 72722\n },\n {\n \"tag\": "anticogitative",\n \"popularity\": 72462\n },\n {\n \"tag\": "woe",\n \"popularity\": 72203\n },\n {\n \"tag\": "skeuomorph",\n \"popularity\": 71945\n },\n {\n \"tag\": "helpmeet",\n \"popularity\": 71689\n },\n {\n \"tag\": "Hexactinellida brickmaking",\n \"popularity\": 71434\n },\n {\n \"tag\": "resink",\n \"popularity\": 71180\n },\n {\n \"tag\": "diluter",\n \"popularity\": 70928\n },\n {\n \"tag\": "micromicron",\n \"popularity\": 70677\n },\n {\n \"tag\": "parentage",\n \"popularity\": 70428\n },\n {\n \"tag\": "galactorrhoea",\n \"popularity\": 70180\n },\n {\n \"tag\": "gey",\n \"popularity\": 69934\n },\n {\n \"tag\": "gesticulatory",\n \"popularity\": 69689\n },\n {\n \"tag\": "wergil",\n \"popularity\": 69445\n },\n {\n \"tag\": "Lecanora",\n \"popularity\": 69202\n },\n {\n \"tag\": "malanders karst",\n \"popularity\": 68961\n },\n {\n \"tag\": "vibetoite",\n \"popularity\": 68721\n },\n {\n \"tag\": "unrequitedness",\n \"popularity\": 68483\n },\n {\n \"tag\": "outwash",\n \"popularity\": 68245\n },\n {\n \"tag\": "unsacred",\n \"popularity\": 68009\n },\n {\n \"tag\": "unabetted dividend",\n \"popularity\": 67775\n },\n {\n \"tag\": "untraveling",\n \"popularity\": 67541\n },\n {\n \"tag\": "thermobattery",\n \"popularity\": 67309\n },\n {\n \"tag\": "polypragmist",\n \"popularity\": 67078\n },\n {\n \"tag\": "irrefutableness",\n \"popularity\": 66848\n },\n {\n \"tag\": "remiges",\n \"popularity\": 66620\n },\n {\n \"tag\": "implode",\n \"popularity\": 66393\n },\n {\n \"tag\": "superfluousness",\n \"popularity\": 66166\n },\n {\n \"tag\": "croakily unalleviated",\n \"popularity\": 65942\n },\n {\n \"tag\": "edicule",\n \"popularity\": 65718\n },\n {\n \"tag\": "entophytous",\n \"popularity\": 65495\n },\n {\n \"tag\": "benefactorship Toryish",\n \"popularity\": 65274\n },\n {\n \"tag\": "pseudoamateurish",\n \"popularity\": 65054\n },\n {\n \"tag\": "flueless Iguanodontoidea snipnose",\n \"popularity\": 64835\n },\n {\n \"tag\": "zealotical Zamicrus interpole",\n \"popularity\": 64617\n },\n {\n \"tag\": "whereabout",\n \"popularity\": 64401\n },\n {\n \"tag\": "benzazide",\n \"popularity\": 64185\n },\n {\n \"tag\": "pokeweed",\n \"popularity\": 63971\n },\n {\n \"tag\": "calamitoid",\n \"popularity\": 63757\n },\n {\n \"tag\": "sporozoal",\n \"popularity\": 63545\n },\n {\n \"tag\": "physcioid Welshwoman",\n \"popularity\": 63334\n },\n {\n \"tag\": "wanting",\n \"popularity\": 63124\n },\n {\n \"tag\": "unencumbering",\n \"popularity\": 62915\n },\n {\n \"tag\": "Tupi",\n \"popularity\": 62707\n },\n {\n \"tag\": "potbank",\n \"popularity\": 62501\n },\n {\n \"tag\": "bulked",\n \"popularity\": 62295\n },\n {\n \"tag\": "uparise",\n \"popularity\": 62090\n },\n {\n \"tag\": "Sudra",\n \"popularity\": 61887\n },\n {\n \"tag\": "hyperscrupulosity",\n \"popularity\": 61684\n },\n {\n \"tag\": "subterraneously unmaid",\n \"popularity\": 61483\n },\n {\n \"tag\": "poisonousness",\n \"popularity\": 61282\n },\n {\n \"tag\": "phare",\n \"popularity\": 61083\n },\n {\n \"tag\": "dicynodont",\n \"popularity\": 60884\n },\n {\n \"tag\": "chewer",\n \"popularity\": 60687\n },\n {\n \"tag\": "uliginous",\n \"popularity\": 60490\n },\n {\n \"tag\": "tinman",\n \"popularity\": 60295\n },\n {\n \"tag\": "coconut",\n \"popularity\": 60100\n },\n {\n \"tag\": "phryganeoid",\n \"popularity\": 59907\n },\n {\n \"tag\": "bismillah",\n \"popularity\": 59714\n },\n {\n \"tag\": "tautomeric",\n \"popularity\": 59523\n },\n {\n \"tag\": "jerquer",\n \"popularity\": 59332\n },\n {\n \"tag\": "Dryopithecinae",\n \"popularity\": 59143\n },\n {\n \"tag\": "ghizite",\n \"popularity\": 58954\n },\n {\n \"tag\": "unliveable",\n \"popularity\": 58766\n },\n {\n \"tag\": "craftsmaster",\n \"popularity\": 58579\n },\n {\n \"tag\": "semiscenic",\n \"popularity\": 58394\n },\n {\n \"tag\": "danaid",\n \"popularity\": 58209\n },\n {\n \"tag\": "flawful",\n \"popularity\": 58025\n },\n {\n \"tag\": "risibleness",\n \"popularity\": 57841\n },\n {\n \"tag\": "Muscovite",\n \"popularity\": 57659\n },\n {\n \"tag\": "snaringly",\n \"popularity\": 57478\n },\n {\n \"tag\": "brilliantwise",\n \"popularity\": 57297\n },\n {\n \"tag\": "plebeity",\n \"popularity\": 57118\n },\n {\n \"tag\": "historicalness",\n \"popularity\": 56939\n },\n {\n \"tag\": "piecemeal",\n \"popularity\": 56761\n },\n {\n \"tag\": "maxillipedary",\n \"popularity\": 56584\n },\n {\n \"tag\": "Hypenantron",\n \"popularity\": 56408\n },\n {\n \"tag\": "quaintness avigate",\n \"popularity\": 56233\n },\n {\n \"tag\": "ave",\n \"popularity\": 56059\n },\n {\n \"tag\": "mediaevally",\n \"popularity\": 55885\n },\n {\n \"tag\": "brucite",\n \"popularity\": 55712\n },\n {\n \"tag\": "Schwendenerian",\n \"popularity\": 55541\n },\n {\n \"tag\": "julole",\n \"popularity\": 55370\n },\n {\n \"tag\": "palaeolith",\n \"popularity\": 55199\n },\n {\n \"tag\": "cotyledonary",\n \"popularity\": 55030\n },\n {\n \"tag\": "rond",\n \"popularity\": 54861\n },\n {\n \"tag\": "boomster tassoo",\n \"popularity\": 54694\n },\n {\n \"tag\": "cattishly",\n \"popularity\": 54527\n },\n {\n \"tag\": "tonguefence",\n \"popularity\": 54360\n },\n {\n \"tag\": "hexastylar triskele",\n \"popularity\": 54195\n },\n {\n \"tag\": "ariot",\n \"popularity\": 54030\n },\n {\n \"tag\": "intarsist",\n \"popularity\": 53867\n },\n {\n \"tag\": "Oscines",\n \"popularity\": 53704\n },\n {\n \"tag\": "Spaniolize",\n \"popularity\": 53541\n },\n {\n \"tag\": "smellfungus",\n \"popularity\": 53380\n },\n {\n \"tag\": "redisplay",\n \"popularity\": 53219\n },\n {\n \"tag\": "phosphene",\n \"popularity\": 53059\n },\n {\n \"tag\": "phycomycete",\n \"popularity\": 52900\n },\n {\n \"tag\": "prophetic",\n \"popularity\": 52741\n },\n {\n \"tag\": "overtrustful",\n \"popularity\": 52584\n },\n {\n \"tag\": "pinitol",\n \"popularity\": 52427\n },\n {\n \"tag\": "asthmatic",\n \"popularity\": 52270\n },\n {\n \"tag\": "convulsive",\n \"popularity\": 52115\n },\n {\n \"tag\": "draughtswoman",\n \"popularity\": 51960\n },\n {\n \"tag\": "unetymologizable",\n \"popularity\": 51806\n },\n {\n \"tag\": "centrarchoid",\n \"popularity\": 51652\n },\n {\n \"tag\": "mesioincisal",\n \"popularity\": 51500\n },\n {\n \"tag\": "transbaikal",\n \"popularity\": 51348\n },\n {\n \"tag\": "silveriness",\n \"popularity\": 51196\n },\n {\n \"tag\": "costotomy",\n \"popularity\": 51046\n },\n {\n \"tag\": "caracore",\n \"popularity\": 50896\n },\n {\n \"tag\": "depotentiation",\n \"popularity\": 50747\n },\n {\n \"tag\": "glossoepiglottidean",\n \"popularity\": 50598\n },\n {\n \"tag\": "upswell",\n \"popularity\": 50450\n },\n {\n \"tag\": "flecnodal",\n \"popularity\": 50303\n },\n {\n \"tag\": "coventrate",\n \"popularity\": 50157\n },\n {\n \"tag\": "duchesse",\n \"popularity\": 50011\n },\n {\n \"tag\": "excisemanship trophied",\n \"popularity\": 49866\n },\n {\n \"tag\": "cytinaceous",\n \"popularity\": 49721\n },\n {\n \"tag\": "assuringly",\n \"popularity\": 49577\n },\n {\n \"tag\": "unconducted upliftitis",\n \"popularity\": 49434\n },\n {\n \"tag\": "rachicentesis",\n \"popularity\": 49292\n },\n {\n \"tag\": "antiangular",\n \"popularity\": 49150\n },\n {\n \"tag\": "advisal",\n \"popularity\": 49008\n },\n {\n \"tag\": "birdcatcher",\n \"popularity\": 48868\n },\n {\n \"tag\": "secularistic",\n \"popularity\": 48728\n },\n {\n \"tag\": "grandeeism superinformal",\n \"popularity\": 48588\n },\n {\n \"tag\": "unapprehension",\n \"popularity\": 48449\n },\n {\n \"tag\": "excipulum",\n \"popularity\": 48311\n },\n {\n \"tag\": "decimole",\n \"popularity\": 48174\n },\n {\n \"tag\": "semidrachm",\n \"popularity\": 48037\n },\n {\n \"tag\": "uvulotome",\n \"popularity\": 47901\n },\n {\n \"tag\": "Lemaneaceae",\n \"popularity\": 47765\n },\n {\n \"tag\": "corrade",\n \"popularity\": 47630\n },\n {\n \"tag\": "Kuroshio",\n \"popularity\": 47495\n },\n {\n \"tag\": "Araliophyllum",\n \"popularity\": 47361\n },\n {\n \"tag\": "victoriousness cardiosphygmograph",\n \"popularity\": 47228\n },\n {\n \"tag\": "reinvent",\n \"popularity\": 47095\n },\n {\n \"tag\": "Macrotolagus",\n \"popularity\": 46963\n },\n {\n \"tag\": "strenuousness",\n \"popularity\": 46831\n },\n {\n \"tag\": "deviability",\n \"popularity\": 46700\n },\n {\n \"tag\": "phyllospondylous",\n \"popularity\": 46570\n },\n {\n \"tag\": "bisect rudderhole",\n \"popularity\": 46440\n },\n {\n \"tag\": "crownwork",\n \"popularity\": 46311\n },\n {\n \"tag\": "Ascalabota",\n \"popularity\": 46182\n },\n {\n \"tag\": "prostatomyomectomy",\n \"popularity\": 46054\n },\n {\n \"tag\": "neurosyphilis",\n \"popularity\": 45926\n },\n {\n \"tag\": "tabloid scraplet",\n \"popularity\": 45799\n },\n {\n \"tag\": "nonmedullated servility",\n \"popularity\": 45673\n },\n {\n \"tag\": "melopoeic practicalization",\n \"popularity\": 45547\n },\n {\n \"tag\": "nonrhythmic",\n \"popularity\": 45421\n },\n {\n \"tag\": "deplorer",\n \"popularity\": 45296\n },\n {\n \"tag\": "Ophion",\n \"popularity\": 45172\n },\n {\n \"tag\": "subprioress",\n \"popularity\": 45048\n },\n {\n \"tag\": "semiregular",\n \"popularity\": 44925\n },\n {\n \"tag\": "praelection",\n \"popularity\": 44802\n },\n {\n \"tag\": "discinct",\n \"popularity\": 44680\n },\n {\n \"tag\": "preplace",\n \"popularity\": 44558\n },\n {\n \"tag\": "paternoster",\n \"popularity\": 44437\n },\n {\n \"tag\": "suboccipital",\n \"popularity\": 44316\n },\n {\n \"tag\": "Teutophil",\n \"popularity\": 44196\n },\n {\n \"tag\": "tracheole",\n \"popularity\": 44076\n },\n {\n \"tag\": "subsmile",\n \"popularity\": 43957\n },\n {\n \"tag\": "nonapostatizing",\n \"popularity\": 43839\n },\n {\n \"tag\": "cleidotomy",\n \"popularity\": 43720\n },\n {\n \"tag\": "hingle",\n \"popularity\": 43603\n },\n {\n \"tag\": "jocoque",\n \"popularity\": 43486\n },\n {\n \"tag\": "trundler notidanian",\n \"popularity\": 43369\n },\n {\n \"tag\": "strangling misdaub",\n \"popularity\": 43253\n },\n {\n \"tag\": "noncancellable",\n \"popularity\": 43137\n },\n {\n \"tag\": "lavabo",\n \"popularity\": 43022\n },\n {\n \"tag\": "lanterloo",\n \"popularity\": 42907\n },\n {\n \"tag\": "uncitizenly",\n \"popularity\": 42793\n },\n {\n \"tag\": "autoturning",\n \"popularity\": 42679\n },\n {\n \"tag\": "Haganah",\n \"popularity\": 42566\n },\n {\n \"tag\": "Glecoma",\n \"popularity\": 42453\n },\n {\n \"tag\": "membered",\n \"popularity\": 42341\n },\n {\n \"tag\": "consuetudinal",\n \"popularity\": 42229\n },\n {\n \"tag\": "gatehouse",\n \"popularity\": 42117\n },\n {\n \"tag\": "tetherball",\n \"popularity\": 42006\n },\n {\n \"tag\": "counterrevolutionist numismatical",\n \"popularity\": 41896\n },\n {\n \"tag\": "pagehood plateiasmus",\n \"popularity\": 41786\n },\n {\n \"tag\": "pelterer",\n \"popularity\": 41676\n },\n {\n \"tag\": "splenemphraxis",\n \"popularity\": 41567\n },\n {\n \"tag\": "Crypturidae",\n \"popularity\": 41458\n },\n {\n \"tag\": "caboodle",\n \"popularity\": 41350\n },\n {\n \"tag\": "Filaria",\n \"popularity\": 41242\n },\n {\n \"tag\": "noninvincibility",\n \"popularity\": 41135\n },\n {\n \"tag\": "preadvertisement",\n \"popularity\": 41028\n },\n {\n \"tag\": "bathrobe",\n \"popularity\": 40921\n },\n {\n \"tag\": "nitrifier",\n \"popularity\": 40815\n },\n {\n \"tag\": "furthermore",\n \"popularity\": 40709\n },\n {\n \"tag\": "recrate",\n \"popularity\": 40604\n },\n {\n \"tag\": "inexist",\n \"popularity\": 40499\n },\n {\n \"tag\": "Mocoan",\n \"popularity\": 40395\n },\n {\n \"tag\": "forint",\n \"popularity\": 40291\n },\n {\n \"tag\": "cardiomyoliposis",\n \"popularity\": 40187\n },\n {\n \"tag\": "channeling",\n \"popularity\": 40084\n },\n {\n \"tag\": "quebrachine",\n \"popularity\": 39981\n },\n {\n \"tag\": "magistery",\n \"popularity\": 39879\n },\n {\n \"tag\": "koko",\n \"popularity\": 39777\n },\n {\n \"tag\": "nobilify",\n \"popularity\": 39676\n },\n {\n \"tag\": "articulate taprooted",\n \"popularity\": 39575\n },\n {\n \"tag\": "cardiotonic Nicaragua",\n \"popularity\": 39474\n },\n {\n \"tag\": "assertiveness",\n \"popularity\": 39374\n },\n {\n \"tag\": "springtail",\n \"popularity\": 39274\n },\n {\n \"tag\": "spontoon",\n \"popularity\": 39174\n },\n {\n \"tag\": "plesiobiosis",\n \"popularity\": 39075\n },\n {\n \"tag\": "rooinek",\n \"popularity\": 38976\n },\n {\n \"tag\": "hairif falsehood",\n \"popularity\": 38878\n },\n {\n \"tag\": "synodally",\n \"popularity\": 38780\n },\n {\n \"tag\": "biodynamics",\n \"popularity\": 38683\n },\n {\n \"tag\": "trickling",\n \"popularity\": 38585\n },\n {\n \"tag\": "oxfly daystar",\n \"popularity\": 38489\n },\n {\n \"tag\": "epicycloidal",\n \"popularity\": 38392\n },\n {\n \"tag\": "shorthand",\n \"popularity\": 38296\n },\n {\n \"tag\": "herpolhode",\n \"popularity\": 38201\n },\n {\n \"tag\": "polysynthesism",\n \"popularity\": 38105\n },\n {\n \"tag\": "cany",\n \"popularity\": 38010\n },\n {\n \"tag\": "sideage",\n \"popularity\": 37916\n },\n {\n \"tag\": "strainableness",\n \"popularity\": 37822\n },\n {\n \"tag\": "superformidable",\n \"popularity\": 37728\n },\n {\n \"tag\": "slendang",\n \"popularity\": 37634\n },\n {\n \"tag\": "impropriation",\n \"popularity\": 37541\n },\n {\n \"tag\": "ficklehearted",\n \"popularity\": 37449\n },\n {\n \"tag\": "wintrify",\n \"popularity\": 37356\n },\n {\n \"tag\": "geomorphogenist",\n \"popularity\": 37264\n },\n {\n \"tag\": "smuggleable",\n \"popularity\": 37173\n },\n {\n \"tag\": "delapsion",\n \"popularity\": 37081\n },\n {\n \"tag\": "projective",\n \"popularity\": 36990\n },\n {\n \"tag\": "unglue exfoliation",\n \"popularity\": 36900\n },\n {\n \"tag\": "Acerae",\n \"popularity\": 36810\n },\n {\n \"tag\": "unstaged",\n \"popularity\": 36720\n },\n {\n \"tag\": "ranal",\n \"popularity\": 36630\n },\n {\n \"tag\": "worrier",\n \"popularity\": 36541\n },\n {\n \"tag\": "unhid",\n \"popularity\": 36452\n },\n {\n \"tag\": "adequation",\n \"popularity\": 36363\n },\n {\n \"tag\": "strongylid Sokotri",\n \"popularity\": 36275\n },\n {\n \"tag\": "fumingly",\n \"popularity\": 36187\n },\n {\n \"tag\": "gynosporangium phaenogenetic",\n \"popularity\": 36100\n },\n {\n \"tag\": "uniunguiculate",\n \"popularity\": 36012\n },\n {\n \"tag\": "prudelike",\n \"popularity\": 35926\n },\n {\n \"tag\": "seminomata",\n \"popularity\": 35839\n },\n {\n \"tag\": "trinklet",\n \"popularity\": 35753\n },\n {\n \"tag\": "risorial",\n \"popularity\": 35667\n },\n {\n \"tag\": "pericardiocentesis",\n \"popularity\": 35581\n },\n {\n \"tag\": "filmist",\n \"popularity\": 35496\n },\n {\n \"tag\": "Nana",\n \"popularity\": 35411\n }]'; //,\n {\n \"tag\": "cynipoid",\n \"popularity\": 35326\n },\n {\n \"tag\": "cteniform",\n \"popularity\": 35242\n },\n {\n \"tag\": "semiflex",\n \"popularity\": 35158\n },\n {\n \"tag\": "solstitially",\n \"popularity\": 35074\n },\n {\n \"tag\": "Algarsife",\n \"popularity\": 34991\n },\n {\n \"tag\": "noncriminal",\n \"popularity\": 34908\n },\n {\n \"tag\": "compassion",\n \"popularity\": 34825\n },\n {\n \"tag\": "Buddhic",\n \"popularity\": 34743\n },\n {\n \"tag\": "vellicative dactylically hotfoot",\n \"popularity\": 34661\n },\n {\n \"tag\": "chicory",\n \"popularity\": 34579\n },\n {\n \"tag\": "transperitoneally",\n \"popularity\": 34497\n },\n {\n \"tag\": "pennae",\n \"popularity\": 34416\n },\n {\n \"tag\": "Flamandize",\n \"popularity\": 34335\n },\n {\n \"tag\": "underviewer",\n \"popularity\": 34254\n },\n {\n \"tag\": "assoil",\n \"popularity\": 34174\n },\n {\n \"tag\": "saccharobacillus",\n \"popularity\": 34094\n },\n {\n \"tag\": "biacetylene",\n \"popularity\": 34014\n },\n {\n \"tag\": "mouchardism",\n \"popularity\": 33935\n },\n {\n \"tag\": "anisomeric",\n \"popularity\": 33856\n },\n {\n \"tag\": "digestive",\n \"popularity\": 33777\n },\n {\n \"tag\": "darlingly",\n \"popularity\": 33698\n },\n {\n \"tag\": "liman",\n \"popularity\": 33620\n },\n {\n \"tag\": "soldanrie",\n \"popularity\": 33542\n },\n {\n \"tag\": "sully",\n \"popularity\": 33464\n },\n {\n \"tag\": "brightsmith",\n \"popularity\": 33387\n },\n {\n \"tag\": "inwrap antiliturgist ureterocervical",\n \"popularity\": 33309\n },\n {\n \"tag\": "discommodity",\n \"popularity\": 33232\n },\n {\n \"tag\": "typical aggrandizer",\n \"popularity\": 33156\n },\n {\n \"tag\": "xenogeny",\n \"popularity\": 33079\n },\n {\n \"tag\": "uncountrified",\n \"popularity\": 33003\n },\n {\n \"tag\": "Podarge",\n \"popularity\": 32928\n },\n {\n \"tag\": "uninterviewed",\n \"popularity\": 32852\n },\n {\n \"tag\": "underprior",\n \"popularity\": 32777\n },\n {\n \"tag\": "leiomyomatous",\n \"popularity\": 32702\n },\n {\n \"tag\": "postdysenteric",\n \"popularity\": 32627\n },\n {\n \"tag\": "Fusicladium",\n \"popularity\": 32553\n },\n {\n \"tag\": "Dulcinea",\n \"popularity\": 32478\n },\n {\n \"tag\": "interspersion",\n \"popularity\": 32404\n },\n {\n \"tag\": "preobligate",\n \"popularity\": 32331\n },\n {\n \"tag\": "subaggregate",\n \"popularity\": 32257\n },\n {\n \"tag\": "grammarianism",\n \"popularity\": 32184\n },\n {\n \"tag\": "palikar",\n \"popularity\": 32111\n },\n {\n \"tag\": "facileness",\n \"popularity\": 32039\n },\n {\n \"tag\": "deuterofibrinose",\n \"popularity\": 31966\n },\n {\n \"tag\": "pseudesthesia",\n \"popularity\": 31894\n },\n {\n \"tag\": "sedimentary",\n \"popularity\": 31822\n },\n {\n \"tag\": "typewrite",\n \"popularity\": 31751\n },\n {\n \"tag\": "immemorable",\n \"popularity\": 31679\n },\n {\n \"tag\": "Myrtus",\n \"popularity\": 31608\n },\n {\n \"tag\": "hauchecornite",\n \"popularity\": 31537\n },\n {\n \"tag\": "galleylike",\n \"popularity\": 31467\n },\n {\n \"tag\": "thimber",\n \"popularity\": 31396\n },\n {\n \"tag\": "Hegelianism",\n \"popularity\": 31326\n },\n {\n \"tag\": "strig",\n \"popularity\": 31256\n },\n {\n \"tag\": "skyre",\n \"popularity\": 31187\n },\n {\n \"tag\": "eupepticism",\n \"popularity\": 31117\n },\n {\n \"tag\": "eponymism",\n \"popularity\": 31048\n },\n {\n \"tag\": "flunkeyhood",\n \"popularity\": 30979\n },\n {\n \"tag\": "Abama",\n \"popularity\": 30911\n },\n {\n \"tag\": "adiadochokinesis",\n \"popularity\": 30842\n },\n {\n \"tag\": "spendthrifty",\n \"popularity\": 30774\n },\n {\n \"tag\": "chalcedony",\n \"popularity\": 30706\n },\n {\n \"tag\": "authorism",\n \"popularity\": 30638\n },\n {\n \"tag\": "nasturtium",\n \"popularity\": 30571\n },\n {\n \"tag\": "Acanthocereus",\n \"popularity\": 30504\n },\n {\n \"tag\": "uncollapsible",\n \"popularity\": 30437\n },\n {\n \"tag\": "excursionist",\n \"popularity\": 30370\n },\n {\n \"tag\": "fogbow",\n \"popularity\": 30303\n },\n {\n \"tag\": "overlie",\n \"popularity\": 30237\n },\n {\n \"tag\": "velours",\n \"popularity\": 30171\n },\n {\n \"tag\": "zoodendria madrigal stagbush",\n \"popularity\": 30105\n },\n {\n \"tag\": "imi",\n \"popularity\": 30039\n },\n {\n \"tag\": "cojudge",\n \"popularity\": 29974\n },\n {\n \"tag\": "depurate argal",\n \"popularity\": 29909\n },\n {\n \"tag\": "unrecognition",\n \"popularity\": 29844\n },\n {\n \"tag\": "paunchful",\n \"popularity\": 29779\n },\n {\n \"tag\": "invalued",\n \"popularity\": 29714\n },\n {\n \"tag\": "probang",\n \"popularity\": 29650\n },\n {\n \"tag\": "chetvert",\n \"popularity\": 29586\n },\n {\n \"tag\": "enactable",\n \"popularity\": 29522\n },\n {\n \"tag\": "detoxicate adhibit",\n \"popularity\": 29458\n },\n {\n \"tag\": "kullaite",\n \"popularity\": 29395\n },\n {\n \"tag\": "undazzling",\n \"popularity\": 29332\n },\n {\n \"tag\": "excalation",\n \"popularity\": 29269\n },\n {\n \"tag\": "sievings",\n \"popularity\": 29206\n },\n {\n \"tag\": "disenthral",\n \"popularity\": 29143\n },\n {\n \"tag\": "disinterestedly",\n \"popularity\": 29081\n },\n {\n \"tag\": "stanner",\n \"popularity\": 29018\n },\n {\n \"tag\": "recapitulative",\n \"popularity\": 28956\n },\n {\n \"tag\": "objectivist",\n \"popularity\": 28895\n },\n {\n \"tag\": "hypermetropia",\n \"popularity\": 28833\n },\n {\n \"tag\": "incumbency",\n \"popularity\": 28772\n },\n {\n \"tag\": "protegee",\n \"popularity\": 28711\n },\n {\n \"tag\": "zealotic",\n \"popularity\": 28650\n },\n {\n \"tag\": "predebit",\n \"popularity\": 28589\n },\n {\n \"tag\": "cupolar",\n \"popularity\": 28528\n },\n {\n \"tag\": "unattributed",\n \"popularity\": 28468\n },\n {\n \"tag\": "louisine",\n \"popularity\": 28408\n },\n {\n \"tag\": "illustrate",\n \"popularity\": 28348\n },\n {\n \"tag\": "inofficiousness",\n \"popularity\": 28288\n },\n {\n \"tag\": "Americawards",\n \"popularity\": 28228\n },\n {\n \"tag\": "foreflap",\n \"popularity\": 28169\n },\n {\n \"tag\": "eruditeness",\n \"popularity\": 28110\n },\n {\n \"tag\": "copiopsia",\n \"popularity\": 28051\n },\n {\n \"tag\": "sporuliferous",\n \"popularity\": 27992\n },\n {\n \"tag\": "muttering",\n \"popularity\": 27934\n },\n {\n \"tag\": "prepsychology adrip",\n \"popularity\": 27875\n },\n {\n \"tag\": "unfriendly",\n \"popularity\": 27817\n },\n {\n \"tag\": "sulphanilic",\n \"popularity\": 27759\n },\n {\n \"tag\": "Coelococcus",\n \"popularity\": 27701\n },\n {\n \"tag\": "undoubtfulness",\n \"popularity\": 27643\n },\n {\n \"tag\": "flaringly",\n \"popularity\": 27586\n },\n {\n \"tag\": "unordain",\n \"popularity\": 27529\n },\n {\n \"tag\": "fratchety",\n \"popularity\": 27472\n },\n {\n \"tag\": "decadentism dolefully",\n \"popularity\": 27415\n },\n {\n \"tag\": "synthronus",\n \"popularity\": 27358\n },\n {\n \"tag\": "maiid",\n \"popularity\": 27301\n },\n {\n \"tag\": "rhinobyon",\n \"popularity\": 27245\n },\n {\n \"tag\": "Didynamia",\n \"popularity\": 27189\n },\n {\n \"tag\": "millionairedom",\n \"popularity\": 27133\n },\n {\n \"tag\": "mulierine",\n \"popularity\": 27077\n },\n {\n \"tag\": "Mayo",\n \"popularity\": 27021\n },\n {\n \"tag\": "perceivedness",\n \"popularity\": 26966\n },\n {\n \"tag\": "unadoration",\n \"popularity\": 26911\n },\n {\n \"tag\": "regraft",\n \"popularity\": 26856\n },\n {\n \"tag\": "witch",\n \"popularity\": 26801\n },\n {\n \"tag\": "ungrow",\n \"popularity\": 26746\n },\n {\n \"tag\": "glossopharyngeus",\n \"popularity\": 26691\n },\n {\n \"tag\": "unstirrable",\n \"popularity\": 26637\n },\n {\n \"tag\": "synodsman",\n \"popularity\": 26583\n },\n {\n \"tag\": "placentalian",\n \"popularity\": 26529\n },\n {\n \"tag\": "corpulently",\n \"popularity\": 26475\n },\n {\n \"tag\": "photochromoscope",\n \"popularity\": 26421\n },\n {\n \"tag\": "indusiate retinasphaltum chokestrap",\n \"popularity\": 26368\n },\n {\n \"tag\": "murdrum",\n \"popularity\": 26314\n },\n {\n \"tag\": "belatedness",\n \"popularity\": 26261\n },\n {\n \"tag\": "Cochin",\n \"popularity\": 26208\n },\n {\n \"tag\": "Leonist",\n \"popularity\": 26155\n },\n {\n \"tag\": "keeker confined",\n \"popularity\": 26102\n },\n {\n \"tag\": "unintellectual",\n \"popularity\": 26050\n },\n {\n \"tag\": "nymphaline bait",\n \"popularity\": 25997\n },\n {\n \"tag\": "sarcosporidiosis",\n \"popularity\": 25945\n },\n {\n \"tag\": "catawamptiously",\n \"popularity\": 25893\n },\n {\n \"tag\": "outshame",\n \"popularity\": 25841\n },\n {\n \"tag\": "animalism",\n \"popularity\": 25790\n },\n {\n \"tag\": "epithalamial",\n \"popularity\": 25738\n },\n {\n \"tag\": "ganner",\n \"popularity\": 25687\n },\n {\n \"tag\": "desilicify",\n \"popularity\": 25635\n },\n {\n \"tag\": "dandyism",\n \"popularity\": 25584\n },\n {\n \"tag\": "hyleg",\n \"popularity\": 25533\n },\n {\n \"tag\": "photophysical",\n \"popularity\": 25483\n },\n {\n \"tag\": "underload",\n \"popularity\": 25432\n },\n {\n \"tag\": "unintrusive",\n \"popularity\": 25382\n },\n {\n \"tag\": "succinamic",\n \"popularity\": 25331\n },\n {\n \"tag\": "matchy",\n \"popularity\": 25281\n },\n {\n \"tag\": "concordal",\n \"popularity\": 25231\n },\n {\n \"tag\": "exteriority",\n \"popularity\": 25181\n },\n {\n \"tag\": "sterculiad",\n \"popularity\": 25132\n },\n {\n \"tag\": "sulfoxylic",\n \"popularity\": 25082\n },\n {\n \"tag\": "oversubscription",\n \"popularity\": 25033\n },\n {\n \"tag\": "chiasmic",\n \"popularity\": 24984\n },\n {\n \"tag\": "pseudoparthenogenesis",\n \"popularity\": 24935\n },\n {\n \"tag\": "indorse",\n \"popularity\": 24886\n },\n {\n \"tag\": "Krishnaite",\n \"popularity\": 24837\n },\n {\n \"tag\": "calcinize",\n \"popularity\": 24788\n },\n {\n \"tag\": "rhodium",\n \"popularity\": 24740\n },\n {\n \"tag\": "tragopan",\n \"popularity\": 24692\n },\n {\n \"tag\": "overwhelmingly",\n \"popularity\": 24643\n },\n {\n \"tag\": "procidence accorporate",\n \"popularity\": 24595\n },\n {\n \"tag\": "polemize speelless",\n \"popularity\": 24548\n },\n {\n \"tag\": "radiocarpal goran",\n \"popularity\": 24500\n },\n {\n \"tag\": "counteroffer Pelodytes",\n \"popularity\": 24452\n },\n {\n \"tag\": "lionhearted",\n \"popularity\": 24405\n },\n {\n \"tag\": "paramastoid",\n \"popularity\": 24358\n },\n {\n \"tag\": "murine",\n \"popularity\": 24310\n },\n {\n \"tag\": "woodbined",\n \"popularity\": 24263\n },\n {\n \"tag\": "packthread",\n \"popularity\": 24217\n },\n {\n \"tag\": "citreous",\n \"popularity\": 24170\n },\n {\n \"tag\": "unfallaciously",\n \"popularity\": 24123\n },\n {\n \"tag\": "tentwork reincarnadine",\n \"popularity\": 24077\n },\n {\n \"tag\": "verminousness",\n \"popularity\": 24030\n },\n {\n \"tag\": "sillometer",\n \"popularity\": 23984\n },\n {\n \"tag\": "jointy",\n \"popularity\": 23938\n },\n {\n \"tag\": "streptolysin",\n \"popularity\": 23892\n },\n {\n \"tag\": "Florentinism",\n \"popularity\": 23847\n },\n {\n \"tag\": "monosomatous",\n \"popularity\": 23801\n },\n {\n \"tag\": "capsulociliary",\n \"popularity\": 23756\n },\n {\n \"tag\": "organum",\n \"popularity\": 23710\n },\n {\n \"tag\": "overtly",\n \"popularity\": 23665\n },\n {\n \"tag\": "ophthalmoscopical",\n \"popularity\": 23620\n },\n {\n \"tag\": "supposititiously",\n \"popularity\": 23575\n },\n {\n \"tag\": "radiochemistry",\n \"popularity\": 23530\n },\n {\n \"tag\": "flaxtail",\n \"popularity\": 23486\n },\n {\n \"tag\": "pretympanic",\n \"popularity\": 23441\n },\n {\n \"tag\": "auscultation",\n \"popularity\": 23397\n },\n {\n \"tag\": "hairdresser",\n \"popularity\": 23352\n },\n {\n \"tag\": "chaffless",\n \"popularity\": 23308\n },\n {\n \"tag\": "polioencephalitis",\n \"popularity\": 23264\n },\n {\n \"tag\": "axolotl",\n \"popularity\": 23220\n },\n {\n \"tag\": "smous",\n \"popularity\": 23177\n },\n {\n \"tag\": "morgen disenamour toothed",\n \"popularity\": 23133\n },\n {\n \"tag\": "chaiseless",\n \"popularity\": 23089\n },\n {\n \"tag\": "frugally",\n \"popularity\": 23046\n },\n {\n \"tag\": "combustive antievolutionist cinenegative",\n \"popularity\": 23003\n },\n {\n \"tag\": "malacolite",\n \"popularity\": 22960\n },\n {\n \"tag\": "borne",\n \"popularity\": 22917\n },\n {\n \"tag\": "mercaptole",\n \"popularity\": 22874\n },\n {\n \"tag\": "judicatory",\n \"popularity\": 22831\n },\n {\n \"tag\": "noctivagation",\n \"popularity\": 22789\n },\n {\n \"tag\": "synthete",\n \"popularity\": 22746\n },\n {\n \"tag\": "tomboyism",\n \"popularity\": 22704\n },\n {\n \"tag\": "serranoid",\n \"popularity\": 22661\n },\n {\n \"tag\": "impostorism",\n \"popularity\": 22619\n },\n {\n \"tag\": "flagellosis Talitha",\n \"popularity\": 22577\n },\n {\n \"tag\": "pseudoviscous",\n \"popularity\": 22535\n },\n {\n \"tag\": "Galleriidae",\n \"popularity\": 22494\n },\n {\n \"tag\": "undulation didelph Comintern",\n \"popularity\": 22452\n },\n {\n \"tag\": "triangulopyramidal",\n \"popularity\": 22411\n },\n {\n \"tag\": "middlings",\n \"popularity\": 22369\n },\n {\n \"tag\": "piperazin",\n \"popularity\": 22328\n },\n {\n \"tag\": "endostitis",\n \"popularity\": 22287\n },\n {\n \"tag\": "swordlike",\n \"popularity\": 22246\n },\n {\n \"tag\": "forthwith",\n \"popularity\": 22205\n },\n {\n \"tag\": "menaceful",\n \"popularity\": 22164\n },\n {\n \"tag\": "explantation defective",\n \"popularity\": 22123\n },\n {\n \"tag\": "arrear",\n \"popularity\": 22083\n },\n {\n \"tag\": "engraft",\n \"popularity\": 22042\n },\n {\n \"tag\": "revolunteer",\n \"popularity\": 22002\n },\n {\n \"tag\": "foliaceous",\n \"popularity\": 21962\n },\n {\n \"tag\": "pseudograph",\n \"popularity\": 21922\n },\n {\n \"tag\": "maenaite",\n \"popularity\": 21882\n },\n {\n \"tag\": "interfinger",\n \"popularity\": 21842\n },\n {\n \"tag\": "macroscopically",\n \"popularity\": 21802\n },\n {\n \"tag\": "bluewood",\n \"popularity\": 21762\n },\n {\n \"tag\": "chikara",\n \"popularity\": 21723\n },\n {\n \"tag\": "reprehension diazeuxis nickelous",\n \"popularity\": 21683\n },\n {\n \"tag\": "vacuation",\n \"popularity\": 21644\n },\n {\n \"tag\": "Sartish",\n \"popularity\": 21605\n },\n {\n \"tag\": "pseudogyny",\n \"popularity\": 21566\n },\n {\n \"tag\": "friedcake",\n \"popularity\": 21527\n },\n {\n \"tag\": "thraw",\n \"popularity\": 21488\n },\n {\n \"tag\": "bifid",\n \"popularity\": 21449\n },\n {\n \"tag\": "truthlessly",\n \"popularity\": 21411\n },\n {\n \"tag\": "lungy",\n \"popularity\": 21372\n },\n {\n \"tag\": "fluoborite",\n \"popularity\": 21334\n },\n {\n \"tag\": "anthropolithic",\n \"popularity\": 21295\n },\n {\n \"tag\": "coachee straw",\n \"popularity\": 21257\n },\n {\n \"tag\": "dehorner Grecize",\n \"popularity\": 21219\n },\n {\n \"tag\": "spondylopyosis",\n \"popularity\": 21181\n },\n {\n \"tag\": "institutionary",\n \"popularity\": 21143\n },\n {\n \"tag\": "agentry",\n \"popularity\": 21105\n },\n {\n \"tag\": "musing bietle",\n \"popularity\": 21068\n },\n {\n \"tag\": "cormophyte",\n \"popularity\": 21030\n },\n {\n \"tag\": "semielliptic",\n \"popularity\": 20993\n },\n {\n \"tag\": "ependytes",\n \"popularity\": 20955\n },\n {\n \"tag\": "coachmaster",\n \"popularity\": 20918\n },\n {\n \"tag\": "overexuberant",\n \"popularity\": 20881\n },\n {\n \"tag\": "selectable",\n \"popularity\": 20844\n },\n {\n \"tag\": "saclike",\n \"popularity\": 20807\n },\n {\n \"tag\": "mullion",\n \"popularity\": 20770\n },\n {\n \"tag\": "pantheonize prevalency",\n \"popularity\": 20733\n },\n {\n \"tag\": "trophosperm",\n \"popularity\": 20697\n },\n {\n \"tag\": "paraphrasist",\n \"popularity\": 20660\n },\n {\n \"tag\": "undercarry",\n \"popularity\": 20624\n },\n {\n \"tag\": "thallogenic",\n \"popularity\": 20587\n },\n {\n \"tag\": "bulgy forbid",\n \"popularity\": 20551\n },\n {\n \"tag\": "proliquor gratulatory",\n \"popularity\": 20515\n },\n {\n \"tag\": "booker",\n \"popularity\": 20479\n },\n {\n \"tag\": "wizen",\n \"popularity\": 20443\n },\n {\n \"tag\": "synchondrosially",\n \"popularity\": 20407\n },\n {\n \"tag\": "herbless",\n \"popularity\": 20371\n },\n {\n \"tag\": "arfvedsonite",\n \"popularity\": 20336\n },\n {\n \"tag\": "Neuroptera",\n \"popularity\": 20300\n },\n {\n \"tag\": "fingerstone",\n \"popularity\": 20265\n },\n {\n \"tag\": "Odontoglossae",\n \"popularity\": 20229\n },\n {\n \"tag\": "transmigrator",\n \"popularity\": 20194\n },\n {\n \"tag\": "Dehaites",\n \"popularity\": 20159\n },\n {\n \"tag\": "Molinist",\n \"popularity\": 20124\n },\n {\n \"tag\": "novelistic",\n \"popularity\": 20089\n },\n {\n \"tag\": "astelic",\n \"popularity\": 20054\n },\n {\n \"tag\": "pyelometry",\n \"popularity\": 20019\n },\n {\n \"tag\": "pigmentation",\n \"popularity\": 19984\n },\n {\n \"tag\": "epinaos",\n \"popularity\": 19950\n },\n {\n \"tag\": "outdare",\n \"popularity\": 19915\n },\n {\n \"tag\": "Funje philaristocracy",\n \"popularity\": 19881\n },\n {\n \"tag\": "keddah",\n \"popularity\": 19846\n },\n {\n \"tag\": "axoidean",\n \"popularity\": 19812\n },\n {\n \"tag\": "ovule",\n \"popularity\": 19778\n },\n {\n \"tag\": "solidify",\n \"popularity\": 19744\n },\n {\n \"tag\": "noncelestial",\n \"popularity\": 19710\n },\n {\n \"tag\": "overmultiplication",\n \"popularity\": 19676\n },\n {\n \"tag\": "hexatetrahedron",\n \"popularity\": 19642\n },\n {\n \"tag\": "pliciform",\n \"popularity\": 19609\n },\n {\n \"tag\": "zimbalon",\n \"popularity\": 19575\n },\n {\n \"tag\": "annexational",\n \"popularity\": 19542\n },\n {\n \"tag\": "eurhodol",\n \"popularity\": 19508\n },\n {\n \"tag\": "yark",\n \"popularity\": 19475\n },\n {\n \"tag\": "illegality nitroalizarin",\n \"popularity\": 19442\n },\n {\n \"tag\": "quadratum",\n \"popularity\": 19409\n },\n {\n \"tag\": "saccharine",\n \"popularity\": 19376\n },\n {\n \"tag\": "unemploy",\n \"popularity\": 19343\n },\n {\n \"tag\": "uniclinal unipotent",\n \"popularity\": 19310\n },\n {\n \"tag\": "turbo",\n \"popularity\": 19277\n },\n {\n \"tag\": "sybarism",\n \"popularity\": 19244\n },\n {\n \"tag\": "motacilline",\n \"popularity\": 19212\n },\n {\n \"tag\": "weaselly",\n \"popularity\": 19179\n },\n {\n \"tag\": "plastid",\n \"popularity\": 19147\n },\n {\n \"tag\": "wasting",\n \"popularity\": 19114\n },\n {\n \"tag\": "begrime fluting",\n \"popularity\": 19082\n },\n {\n \"tag\": "Nephilinae",\n \"popularity\": 19050\n },\n {\n \"tag\": "disregardance",\n \"popularity\": 19018\n },\n {\n \"tag\": "Shakerlike",\n \"popularity\": 18986\n },\n {\n \"tag\": "uniped",\n \"popularity\": 18954\n },\n {\n \"tag\": "knap",\n \"popularity\": 18922\n },\n {\n \"tag\": "electivism undergardener",\n \"popularity\": 18890\n },\n {\n \"tag\": "hulverheaded",\n \"popularity\": 18858\n },\n {\n \"tag\": "unruptured",\n \"popularity\": 18827\n },\n {\n \"tag\": "solemnize credently",\n \"popularity\": 18795\n },\n {\n \"tag\": "pentastomoid possessingly",\n \"popularity\": 18764\n },\n {\n \"tag\": "octose",\n \"popularity\": 18733\n },\n {\n \"tag\": "psithurism indefensibility",\n \"popularity\": 18701\n },\n {\n \"tag\": "torrentuous cyanometer subcrenate",\n \"popularity\": 18670\n },\n {\n \"tag\": "photoplaywright tapaculo",\n \"popularity\": 18639\n },\n {\n \"tag\": "univalence",\n \"popularity\": 18608\n },\n {\n \"tag\": "Porthetria",\n \"popularity\": 18577\n },\n {\n \"tag\": "funambulo",\n \"popularity\": 18546\n },\n {\n \"tag\": "pedion",\n \"popularity\": 18515\n },\n {\n \"tag\": "horticulturally",\n \"popularity\": 18485\n },\n {\n \"tag\": "marennin",\n \"popularity\": 18454\n },\n {\n \"tag\": "horselaugh",\n \"popularity\": 18423\n },\n {\n \"tag\": "semiexecutive",\n \"popularity\": 18393\n },\n {\n \"tag\": "Monopteridae",\n \"popularity\": 18363\n },\n {\n \"tag\": "commonable",\n \"popularity\": 18332\n },\n {\n \"tag\": "dreariment",\n \"popularity\": 18302\n },\n {\n \"tag\": "disbud",\n \"popularity\": 18272\n },\n {\n \"tag\": "monocled",\n \"popularity\": 18242\n },\n {\n \"tag\": "hurlbarrow",\n \"popularity\": 18212\n },\n {\n \"tag\": "opiateproof",\n \"popularity\": 18182\n },\n {\n \"tag\": "Fahrenheit",\n \"popularity\": 18152\n },\n {\n \"tag\": "writhed",\n \"popularity\": 18122\n },\n {\n \"tag\": "Volstead",\n \"popularity\": 18093\n },\n {\n \"tag\": "yesternight",\n \"popularity\": 18063\n },\n {\n \"tag\": "readmittance",\n \"popularity\": 18033\n },\n {\n \"tag\": "reiterable",\n \"popularity\": 18004\n },\n {\n \"tag\": "triquetral",\n \"popularity\": 17975\n },\n {\n \"tag\": "guillotinement",\n \"popularity\": 17945\n },\n {\n \"tag\": "repermission",\n \"popularity\": 17916\n },\n {\n \"tag\": "assishly",\n \"popularity\": 17887\n },\n {\n \"tag\": "daidle",\n \"popularity\": 17858\n },\n {\n \"tag\": "prismatoid",\n \"popularity\": 17829\n },\n {\n \"tag\": "irreptitious",\n \"popularity\": 17800\n },\n {\n \"tag\": "sourdeline",\n \"popularity\": 17771\n },\n {\n \"tag\": "Austrian",\n \"popularity\": 17742\n },\n {\n \"tag\": "psychorrhagic",\n \"popularity\": 17713\n },\n {\n \"tag\": "Monumbo",\n \"popularity\": 17685\n },\n {\n \"tag\": "cloiochoanitic",\n \"popularity\": 17656\n },\n {\n \"tag\": "hant",\n \"popularity\": 17628\n },\n {\n \"tag\": "roily pulldown",\n \"popularity\": 17599\n },\n {\n \"tag\": "recongratulation",\n \"popularity\": 17571\n },\n {\n \"tag\": "Peking",\n \"popularity\": 17543\n },\n {\n \"tag\": "erdvark",\n \"popularity\": 17514\n },\n {\n \"tag\": "antimnemonic",\n \"popularity\": 17486\n },\n {\n \"tag\": "noncapillarity",\n \"popularity\": 17458\n },\n {\n \"tag\": "irrepressive",\n \"popularity\": 17430\n },\n {\n \"tag\": "Petromyzontes",\n \"popularity\": 17402\n },\n {\n \"tag\": "piscatorially",\n \"popularity\": 17374\n },\n {\n \"tag\": "cholesterosis",\n \"popularity\": 17346\n },\n {\n \"tag\": "denunciate",\n \"popularity\": 17319\n },\n {\n \"tag\": "unmetalled",\n \"popularity\": 17291\n },\n {\n \"tag\": "Tigris enruin",\n \"popularity\": 17263\n },\n {\n \"tag\": "anaspalin",\n \"popularity\": 17236\n },\n {\n \"tag\": "monodromy",\n \"popularity\": 17208\n },\n {\n \"tag\": "Canichanan",\n \"popularity\": 17181\n },\n {\n \"tag\": "mesolabe",\n \"popularity\": 17154\n },\n {\n \"tag\": "trichothallic overcunningness",\n \"popularity\": 17127\n },\n {\n \"tag\": "spinsterishly",\n \"popularity\": 17099\n },\n {\n \"tag\": "sensilla",\n \"popularity\": 17072\n },\n {\n \"tag\": "wifelkin",\n \"popularity\": 17045\n },\n {\n \"tag\": "suppositionless",\n \"popularity\": 17018\n },\n {\n \"tag\": "irksomeness",\n \"popularity\": 16991\n },\n {\n \"tag\": "sanbenito",\n \"popularity\": 16964\n },\n {\n \"tag\": "nonstatement",\n \"popularity\": 16938\n },\n {\n \"tag\": "phenoloid",\n \"popularity\": 16911\n },\n {\n \"tag\": "Steinberger",\n \"popularity\": 16884\n },\n {\n \"tag\": "replicated boom",\n \"popularity\": 16858\n },\n {\n \"tag\": "sciomachiology",\n \"popularity\": 16831\n },\n {\n \"tag\": "starwise",\n \"popularity\": 16805\n },\n {\n \"tag\": "prerich",\n \"popularity\": 16778\n },\n {\n \"tag\": "unspawned",\n \"popularity\": 16752\n },\n {\n \"tag\": "unindentable",\n \"popularity\": 16726\n },\n {\n \"tag\": "stromatic",\n \"popularity\": 16700\n },\n {\n \"tag\": "fetishize",\n \"popularity\": 16673\n },\n {\n \"tag\": "dihydroxy",\n \"popularity\": 16647\n },\n {\n \"tag\": "precaudal",\n \"popularity\": 16621\n },\n {\n \"tag\": "Madagascar",\n \"popularity\": 16595\n },\n {\n \"tag\": "repinement",\n \"popularity\": 16570\n },\n {\n \"tag\": "noncathedral wenzel",\n \"popularity\": 16544\n },\n {\n \"tag\": "corollike",\n \"popularity\": 16518\n },\n {\n \"tag\": "pubes unamortization",\n \"popularity\": 16492\n },\n {\n \"tag\": "brickcroft",\n \"popularity\": 16467\n },\n {\n \"tag\": "intertrabecular",\n \"popularity\": 16441\n },\n {\n \"tag\": "formulaic",\n \"popularity\": 16416\n },\n {\n \"tag\": "arienzo",\n \"popularity\": 16390\n },\n {\n \"tag\": "Mazzinian",\n \"popularity\": 16365\n },\n {\n \"tag\": "wallowishly",\n \"popularity\": 16339\n },\n {\n \"tag\": "sysselman",\n \"popularity\": 16314\n },\n {\n \"tag\": "seligmannite",\n \"popularity\": 16289\n },\n {\n \"tag\": "harlequinery",\n \"popularity\": 16264\n },\n {\n \"tag\": "zucchetto",\n \"popularity\": 16239\n },\n {\n \"tag\": "malonyl",\n \"popularity\": 16214\n },\n {\n \"tag\": "patwari",\n \"popularity\": 16189\n },\n {\n \"tag\": "neoholmia venturesomeness",\n \"popularity\": 16164\n },\n {\n \"tag\": "Dehwar",\n \"popularity\": 16139\n },\n {\n \"tag\": "fetiferous",\n \"popularity\": 16114\n },\n {\n \"tag\": "chromatophore",\n \"popularity\": 16090\n },\n {\n \"tag\": "reregistration",\n \"popularity\": 16065\n },\n {\n \"tag\": "alienor",\n \"popularity\": 16040\n },\n {\n \"tag\": "Hexagynia",\n \"popularity\": 16016\n },\n {\n \"tag\": "cerebrotonia",\n \"popularity\": 15991\n },\n {\n \"tag\": "deedbox",\n \"popularity\": 15967\n },\n {\n \"tag\": "staab",\n \"popularity\": 15943\n },\n {\n \"tag\": "uratemia",\n \"popularity\": 15918\n },\n {\n \"tag\": "flaunt",\n \"popularity\": 15894\n },\n {\n \"tag\": "bogy",\n \"popularity\": 15870\n },\n {\n \"tag\": "subcartilaginous",\n \"popularity\": 15846\n },\n {\n \"tag\": "protonephridial",\n \"popularity\": 15822\n },\n {\n \"tag\": "Boswellia",\n \"popularity\": 15798\n },\n {\n \"tag\": "relaxant untiaraed protoepiphyte",\n \"popularity\": 15774\n },\n {\n \"tag\": "nesslerization",\n \"popularity\": 15750\n },\n {\n \"tag\": "precession",\n \"popularity\": 15726\n },\n {\n \"tag\": "peat",\n \"popularity\": 15702\n },\n {\n \"tag\": "unbit",\n \"popularity\": 15678\n },\n {\n \"tag\": "snailish",\n \"popularity\": 15655\n },\n {\n \"tag\": "porismatical",\n \"popularity\": 15631\n },\n {\n \"tag\": "hooflike",\n \"popularity\": 15608\n },\n {\n \"tag\": "resuppose phene cranic",\n \"popularity\": 15584\n },\n {\n \"tag\": "peptonization kipskin",\n \"popularity\": 15561\n },\n {\n \"tag\": "birdstone",\n \"popularity\": 15537\n },\n {\n \"tag\": "empty inferoanterior",\n \"popularity\": 15514\n },\n {\n \"tag\": "androtauric",\n \"popularity\": 15491\n },\n {\n \"tag\": "triamide",\n \"popularity\": 15467\n },\n {\n \"tag\": "showmanry",\n \"popularity\": 15444\n },\n {\n \"tag\": "doing",\n \"popularity\": 15421\n },\n {\n \"tag\": "bouchaleen",\n \"popularity\": 15398\n },\n {\n \"tag\": "precollude",\n \"popularity\": 15375\n },\n {\n \"tag\": "finger",\n \"popularity\": 15352\n },\n {\n \"tag\": "limnetic intermessenger",\n \"popularity\": 15329\n },\n {\n \"tag\": "uncharitable picrotoxic",\n \"popularity\": 15306\n },\n {\n \"tag\": "nationalizer Phasmidae",\n \"popularity\": 15283\n },\n {\n \"tag\": "laughingstock",\n \"popularity\": 15261\n },\n {\n \"tag\": "nondeferential",\n \"popularity\": 15238\n },\n {\n \"tag\": "uproariously",\n \"popularity\": 15215\n },\n {\n \"tag\": "manzanilla",\n \"popularity\": 15193\n },\n {\n \"tag\": "khahoon",\n \"popularity\": 15170\n },\n {\n \"tag\": "olericulturally longshanks",\n \"popularity\": 15148\n },\n {\n \"tag\": "enthusiastically methionic",\n \"popularity\": 15125\n },\n {\n \"tag\": "pobs",\n \"popularity\": 15103\n },\n {\n \"tag\": "tricarpellate",\n \"popularity\": 15081\n },\n {\n \"tag\": "souterrain",\n \"popularity\": 15058\n },\n {\n \"tag\": "tethelin",\n \"popularity\": 15036\n },\n {\n \"tag\": "tartle",\n \"popularity\": 15014\n },\n {\n \"tag\": "tidelike",\n \"popularity\": 14992\n },\n {\n \"tag\": "cosmoramic",\n \"popularity\": 14970\n },\n {\n \"tag\": "pretardiness",\n \"popularity\": 14948\n },\n {\n \"tag\": "insoul",\n \"popularity\": 14926\n },\n {\n \"tag\": "anthroxan",\n \"popularity\": 14904\n },\n {\n \"tag\": "jilter",\n \"popularity\": 14882\n },\n {\n \"tag\": "pectinibranchian trematode",\n \"popularity\": 14860\n },\n {\n \"tag\": "Renaissancist",\n \"popularity\": 14838\n },\n {\n \"tag\": "imaginant",\n \"popularity\": 14817\n },\n {\n \"tag\": "supercensure",\n \"popularity\": 14795\n },\n {\n \"tag\": "festilogy",\n \"popularity\": 14773\n },\n {\n \"tag\": "regression",\n \"popularity\": 14752\n },\n {\n \"tag\": "mesobregmate languorously",\n \"popularity\": 14730\n },\n {\n \"tag\": "unsupernaturalized",\n \"popularity\": 14709\n },\n {\n \"tag\": "boobyish",\n \"popularity\": 14687\n },\n {\n \"tag\": "scopolamine",\n \"popularity\": 14666\n },\n {\n \"tag\": "reamputation unchristianly",\n \"popularity\": 14645\n },\n {\n \"tag\": "cuneatic",\n \"popularity\": 14623\n },\n {\n \"tag\": "heathberry",\n \"popularity\": 14602\n },\n {\n \"tag\": "hate",\n \"popularity\": 14581\n },\n {\n \"tag\": "redeemableness",\n \"popularity\": 14560\n },\n {\n \"tag\": "damasse",\n \"popularity\": 14539\n },\n {\n \"tag\": "thrillsome",\n \"popularity\": 14518\n },\n {\n \"tag\": "disseverment",\n \"popularity\": 14497\n },\n {\n \"tag\": "underbishopric Ostyak",\n \"popularity\": 14476\n },\n {\n \"tag\": "Exoascales",\n \"popularity\": 14455\n },\n {\n \"tag\": "soiled",\n \"popularity\": 14434\n },\n {\n \"tag\": "Cain",\n \"popularity\": 14413\n },\n {\n \"tag\": "mismanageable arenae",\n \"popularity\": 14392\n },\n {\n \"tag\": "manducate unhinderably",\n \"popularity\": 14372\n },\n {\n \"tag\": "peregrin",\n \"popularity\": 14351\n },\n {\n \"tag\": "musicianly",\n \"popularity\": 14330\n },\n {\n \"tag\": "aln",\n \"popularity\": 14310\n },\n {\n \"tag\": "intercentrum",\n \"popularity\": 14289\n },\n {\n \"tag\": "roothold",\n \"popularity\": 14269\n },\n {\n \"tag\": "jane aneurism",\n \"popularity\": 14248\n },\n {\n \"tag\": "insinuatively forefeel phytolatrous",\n \"popularity\": 14228\n },\n {\n \"tag\": "kanchil",\n \"popularity\": 14208\n },\n {\n \"tag\": "Austrophile",\n \"popularity\": 14187\n },\n {\n \"tag\": "unterrorized",\n \"popularity\": 14167\n },\n {\n \"tag\": "admeasure",\n \"popularity\": 14147\n },\n {\n \"tag\": "electrodissolution",\n \"popularity\": 14127\n },\n {\n \"tag\": "unweddedly",\n \"popularity\": 14107\n },\n {\n \"tag\": "unannoying",\n \"popularity\": 14087\n },\n {\n \"tag\": "uningenuous",\n \"popularity\": 14067\n },\n {\n \"tag\": "omnibenevolent",\n \"popularity\": 14047\n },\n {\n \"tag\": "commissure",\n \"popularity\": 14027\n },\n {\n \"tag\": "tellureted",\n \"popularity\": 14007\n },\n {\n \"tag\": "suffragan",\n \"popularity\": 13987\n },\n {\n \"tag\": "sphaeriaceous",\n \"popularity\": 13967\n },\n {\n \"tag\": "unfearing",\n \"popularity\": 13947\n },\n {\n \"tag\": "stentoriousness precounsellor",\n \"popularity\": 13928\n },\n {\n \"tag\": "haemaspectroscope",\n \"popularity\": 13908\n },\n {\n \"tag\": "teras",\n \"popularity\": 13888\n },\n {\n \"tag\": "pulicine",\n \"popularity\": 13869\n },\n {\n \"tag\": "colicystopyelitis",\n \"popularity\": 13849\n },\n {\n \"tag\": "Physalia",\n \"popularity\": 13830\n },\n {\n \"tag\": "Saxicolidae",\n \"popularity\": 13810\n },\n {\n \"tag\": "peritonital",\n \"popularity\": 13791\n },\n {\n \"tag\": "dysphotic",\n \"popularity\": 13771\n },\n {\n \"tag\": "unabandoned",\n \"popularity\": 13752\n },\n {\n \"tag\": "rashful",\n \"popularity\": 13733\n },\n {\n \"tag\": "goodyness Manobo",\n \"popularity\": 13714\n },\n {\n \"tag\": "glaring",\n \"popularity\": 13694\n },\n {\n \"tag\": "horrorful",\n \"popularity\": 13675\n },\n {\n \"tag\": "intercepting",\n \"popularity\": 13656\n },\n {\n \"tag\": "semifine",\n \"popularity\": 13637\n },\n {\n \"tag\": "Gaypoo",\n \"popularity\": 13618\n },\n {\n \"tag\": "Metrosideros",\n \"popularity\": 13599\n },\n {\n \"tag\": "thoracicolumbar",\n \"popularity\": 13580\n },\n {\n \"tag\": "unserried",\n \"popularity\": 13561\n },\n {\n \"tag\": "keeperess cauterization",\n \"popularity\": 13542\n },\n {\n \"tag\": "administrant",\n \"popularity\": 13523\n },\n {\n \"tag\": "unpropitiatedness",\n \"popularity\": 13505\n },\n {\n \"tag\": "pensileness",\n \"popularity\": 13486\n },\n {\n \"tag\": "quinaldic unreceivable",\n \"popularity\": 13467\n },\n {\n \"tag\": "Carnaria",\n \"popularity\": 13448\n },\n {\n \"tag\": "azothionium wurrus",\n \"popularity\": 13430\n },\n {\n \"tag\": "mistresshood",\n \"popularity\": 13411\n },\n {\n \"tag\": "Savara",\n \"popularity\": 13393\n },\n {\n \"tag\": "dasyurine",\n \"popularity\": 13374\n },\n {\n \"tag\": "superideal",\n \"popularity\": 13356\n },\n {\n \"tag\": "Parisianize",\n \"popularity\": 13337\n },\n {\n \"tag\": "underearth",\n \"popularity\": 13319\n },\n {\n \"tag\": "athrogenic",\n \"popularity\": 13301\n },\n {\n \"tag\": "communicate",\n \"popularity\": 13282\n },\n {\n \"tag\": "denervation enworthed",\n \"popularity\": 13264\n },\n {\n \"tag\": "subbromide",\n \"popularity\": 13246\n },\n {\n \"tag\": "stenocoriasis",\n \"popularity\": 13228\n },\n {\n \"tag\": "facetiousness",\n \"popularity\": 13209\n },\n {\n \"tag\": "twaddling",\n \"popularity\": 13191\n },\n {\n \"tag\": "tetartoconid",\n \"popularity\": 13173\n },\n {\n \"tag\": "audiophile",\n \"popularity\": 13155\n },\n {\n \"tag\": "fustigate",\n \"popularity\": 13137\n },\n {\n \"tag\": "Sorbian cacophonia",\n \"popularity\": 13119\n },\n {\n \"tag\": "fondish",\n \"popularity\": 13101\n },\n {\n \"tag\": "endomastoiditis",\n \"popularity\": 13084\n },\n {\n \"tag\": "sniptious",\n \"popularity\": 13066\n },\n {\n \"tag\": "glochidiate",\n \"popularity\": 13048\n },\n {\n \"tag\": "polycarboxylic",\n \"popularity\": 13030\n },\n {\n \"tag\": "stamp",\n \"popularity\": 13012\n },\n {\n \"tag\": "tritonymph endotoxoid",\n \"popularity\": 12995\n },\n {\n \"tag\": "wolfskin",\n \"popularity\": 12977\n },\n {\n \"tag\": "oncosimeter",\n \"popularity\": 12959\n },\n {\n \"tag\": "outward",\n \"popularity\": 12942\n },\n {\n \"tag\": "circumscribed",\n \"popularity\": 12924\n },\n {\n \"tag\": "autohemolytic",\n \"popularity\": 12907\n },\n {\n \"tag\": "isorhamnose",\n \"popularity\": 12889\n },\n {\n \"tag\": "monarchomachic",\n \"popularity\": 12872\n },\n {\n \"tag\": "phaenomenon",\n \"popularity\": 12855\n },\n {\n \"tag\": "angiopressure",\n \"popularity\": 12837\n },\n {\n \"tag\": "similarize",\n \"popularity\": 12820\n },\n {\n \"tag\": "unseeable",\n \"popularity\": 12803\n },\n {\n \"tag\": "Toryize",\n \"popularity\": 12785\n },\n {\n \"tag\": "fruitling",\n \"popularity\": 12768\n },\n {\n \"tag\": "axle",\n \"popularity\": 12751\n },\n {\n \"tag\": "priestal cocked",\n \"popularity\": 12734\n },\n {\n \"tag\": "serotoxin",\n \"popularity\": 12717\n },\n {\n \"tag\": "unmovably",\n \"popularity\": 12700\n },\n {\n \"tag\": "darbha",\n \"popularity\": 12683\n },\n {\n \"tag\": "Mongolize",\n \"popularity\": 12666\n },\n {\n \"tag\": "clusteringly",\n \"popularity\": 12649\n },\n {\n \"tag\": "tendence",\n \"popularity\": 12632\n },\n {\n \"tag\": "foziness",\n \"popularity\": 12615\n },\n {\n \"tag\": "brickkiln lithify",\n \"popularity\": 12598\n },\n {\n \"tag\": "unpriest",\n \"popularity\": 12581\n },\n {\n \"tag\": "convincer",\n \"popularity\": 12564\n },\n {\n \"tag\": "mornlike",\n \"popularity\": 12548\n },\n {\n \"tag\": "overaddiction ostentatiousness",\n \"popularity\": 12531\n },\n {\n \"tag\": "diffusively moccasin pendom",\n \"popularity\": 12514\n },\n {\n \"tag\": "boose",\n \"popularity\": 12498\n },\n {\n \"tag\": "myonosus",\n \"popularity\": 12481\n },\n {\n \"tag\": "handsome",\n \"popularity\": 12464\n },\n {\n \"tag\": "paroxysmic",\n \"popularity\": 12448\n },\n {\n \"tag\": "Ulidian",\n \"popularity\": 12431\n },\n {\n \"tag\": "heartache",\n \"popularity\": 12415\n },\n {\n \"tag\": "torporize",\n \"popularity\": 12398\n },\n {\n \"tag\": "hippish",\n \"popularity\": 12382\n },\n {\n \"tag\": "stigmal militation",\n \"popularity\": 12366\n },\n {\n \"tag\": "matmaker",\n \"popularity\": 12349\n },\n {\n \"tag\": "marantaceous bivoluminous",\n \"popularity\": 12333\n },\n {\n \"tag\": "Uraniidae",\n \"popularity\": 12317\n },\n {\n \"tag\": "risper",\n \"popularity\": 12301\n },\n {\n \"tag\": "tintinnabulation",\n \"popularity\": 12284\n },\n {\n \"tag\": "tributorian",\n \"popularity\": 12268\n },\n {\n \"tag\": "ashamedly",\n \"popularity\": 12252\n },\n {\n \"tag\": "Macrourus",\n \"popularity\": 12236\n },\n {\n \"tag\": "Chora",\n \"popularity\": 12220\n },\n {\n \"tag\": "caul",\n \"popularity\": 12204\n },\n {\n \"tag\": "exsector",\n \"popularity\": 12188\n },\n {\n \"tag\": "acutish",\n \"popularity\": 12172\n },\n {\n \"tag\": "amphichrome",\n \"popularity\": 12156\n },\n {\n \"tag\": "guarder",\n \"popularity\": 12140\n },\n {\n \"tag\": "sculpturally",\n \"popularity\": 12124\n },\n {\n \"tag\": "benightmare",\n \"popularity\": 12108\n },\n {\n \"tag\": "chucky",\n \"popularity\": 12093\n },\n {\n \"tag\": "Venetian",\n \"popularity\": 12077\n },\n {\n \"tag\": "autotheater",\n \"popularity\": 12061\n },\n {\n \"tag\": "planarioid",\n \"popularity\": 12045\n },\n {\n \"tag\": "handkerchiefful",\n \"popularity\": 12030\n },\n {\n \"tag\": "fuliginousness potentize",\n \"popularity\": 12014\n },\n {\n \"tag\": "pantheum",\n \"popularity\": 11998\n },\n {\n \"tag\": "heavyweight",\n \"popularity\": 11983\n },\n {\n \"tag\": "unbrick",\n \"popularity\": 11967\n },\n {\n \"tag\": "duomachy",\n \"popularity\": 11952\n },\n {\n \"tag\": "polyphyodont",\n \"popularity\": 11936\n },\n {\n \"tag\": "hibernacle",\n \"popularity\": 11921\n },\n {\n \"tag\": "undistend",\n \"popularity\": 11905\n },\n {\n \"tag\": "hystericky",\n \"popularity\": 11890\n },\n {\n \"tag\": "paleolimnology",\n \"popularity\": 11875\n },\n {\n \"tag\": "cedarware",\n \"popularity\": 11859\n },\n {\n \"tag\": "overwrested",\n \"popularity\": 11844\n },\n {\n \"tag\": "Syriacism",\n \"popularity\": 11829\n },\n {\n \"tag\": "pretan",\n \"popularity\": 11813\n },\n {\n \"tag\": "formant",\n \"popularity\": 11798\n },\n {\n \"tag\": "pharmacopoeist Fedia",\n \"popularity\": 11783\n },\n {\n \"tag\": "exorcist eerisome",\n \"popularity\": 11768\n },\n {\n \"tag\": "separation",\n \"popularity\": 11753\n },\n {\n \"tag\": "infancy",\n \"popularity\": 11738\n },\n {\n \"tag\": "ecrasite",\n \"popularity\": 11723\n },\n {\n \"tag\": "propolize",\n \"popularity\": 11708\n },\n {\n \"tag\": "uncram phyllin",\n \"popularity\": 11693\n },\n {\n \"tag\": "thymopathy",\n \"popularity\": 11678\n },\n {\n \"tag\": "omniscient",\n \"popularity\": 11663\n },\n {\n \"tag\": "coussinet hazer",\n \"popularity\": 11648\n },\n {\n \"tag\": "contributiveness",\n \"popularity\": 11633\n },\n {\n \"tag\": "septifluous",\n \"popularity\": 11618\n },\n {\n \"tag\": "halfness",\n \"popularity\": 11603\n },\n {\n \"tag\": "tocher",\n \"popularity\": 11589\n },\n {\n \"tag\": "monotonist",\n \"popularity\": 11574\n },\n {\n \"tag\": "headchair",\n \"popularity\": 11559\n },\n {\n \"tag\": "everywhence",\n \"popularity\": 11544\n },\n {\n \"tag\": "gerate",\n \"popularity\": 11530\n },\n {\n \"tag\": "unrepellent",\n \"popularity\": 11515\n },\n {\n \"tag\": "inidoneous",\n \"popularity\": 11500\n },\n {\n \"tag\": "Rifi",\n \"popularity\": 11486\n },\n {\n \"tag\": "unstop",\n \"popularity\": 11471\n },\n {\n \"tag\": "conformer",\n \"popularity\": 11457\n },\n {\n \"tag\": "vivisectionally",\n \"popularity\": 11442\n },\n {\n \"tag\": "nonfinishing",\n \"popularity\": 11428\n },\n {\n \"tag\": "tyranness",\n \"popularity\": 11413\n },\n {\n \"tag\": "shepherdage havoc",\n \"popularity\": 11399\n },\n {\n \"tag\": "coronale",\n \"popularity\": 11385\n },\n {\n \"tag\": "airmarker",\n \"popularity\": 11370\n },\n {\n \"tag\": "subpanel",\n \"popularity\": 11356\n },\n {\n \"tag\": "conciliation",\n \"popularity\": 11342\n },\n {\n \"tag\": "supergun",\n \"popularity\": 11327\n },\n {\n \"tag\": "photoheliography",\n \"popularity\": 11313\n },\n {\n \"tag\": "cacosmia",\n \"popularity\": 11299\n },\n {\n \"tag\": "caressant",\n \"popularity\": 11285\n },\n {\n \"tag\": "swivet",\n \"popularity\": 11270\n },\n {\n \"tag\": "coddler",\n \"popularity\": 11256\n },\n {\n \"tag\": "rakehellish",\n \"popularity\": 11242\n },\n {\n \"tag\": "recohabitation",\n \"popularity\": 11228\n },\n {\n \"tag\": "postillator",\n \"popularity\": 11214\n },\n {\n \"tag\": "receipt",\n \"popularity\": 11200\n },\n {\n \"tag\": "nonconformistical",\n \"popularity\": 11186\n },\n {\n \"tag\": "unglorified",\n \"popularity\": 11172\n },\n {\n \"tag\": "unordinariness",\n \"popularity\": 11158\n },\n {\n \"tag\": "tetrahydroxy",\n \"popularity\": 11144\n },\n {\n \"tag\": "haploperistomic corporeity",\n \"popularity\": 11130\n },\n {\n \"tag\": "varical",\n \"popularity\": 11117\n },\n {\n \"tag\": "pilferment",\n \"popularity\": 11103\n },\n {\n \"tag\": "reverentially playcraft",\n \"popularity\": 11089\n },\n {\n \"tag\": "unretentive",\n \"popularity\": 11075\n },\n {\n \"tag\": "readiness",\n \"popularity\": 11061\n },\n {\n \"tag\": "thermomagnetism",\n \"popularity\": 11048\n },\n {\n \"tag\": "spotless",\n \"popularity\": 11034\n },\n {\n \"tag\": "semishrubby",\n \"popularity\": 11020\n },\n {\n \"tag\": "metrotomy",\n \"popularity\": 11007\n },\n {\n \"tag\": "hocker",\n \"popularity\": 10993\n },\n {\n \"tag\": "anecdotal",\n \"popularity\": 10979\n },\n {\n \"tag\": "tetrabelodont",\n \"popularity\": 10966\n },\n {\n \"tag\": "Ramillied",\n \"popularity\": 10952\n },\n {\n \"tag\": "sympatheticism",\n \"popularity\": 10939\n },\n {\n \"tag\": "kiskatom",\n \"popularity\": 10925\n },\n {\n \"tag\": "concyclically",\n \"popularity\": 10912\n },\n {\n \"tag\": "tunicless",\n \"popularity\": 10899\n },\n {\n \"tag\": "formalistic",\n \"popularity\": 10885\n },\n {\n \"tag\": "thermacogenesis",\n \"popularity\": 10872\n },\n {\n \"tag\": "multimotored",\n \"popularity\": 10858\n },\n {\n \"tag\": "inversive",\n \"popularity\": 10845\n },\n {\n \"tag\": "Jatki",\n \"popularity\": 10832\n },\n {\n \"tag\": "highest",\n \"popularity\": 10818\n },\n {\n \"tag\": "rubidic",\n \"popularity\": 10805\n },\n {\n \"tag\": "acranial",\n \"popularity\": 10792\n },\n {\n \"tag\": "pulvinulus",\n \"popularity\": 10779\n },\n {\n \"tag\": "nattiness",\n \"popularity\": 10766\n },\n {\n \"tag\": "antisimoniacal",\n \"popularity\": 10752\n },\n {\n \"tag\": "tetanize",\n \"popularity\": 10739\n },\n {\n \"tag\": "spectrophobia",\n \"popularity\": 10726\n },\n {\n \"tag\": "monopolitical",\n \"popularity\": 10713\n },\n {\n \"tag\": "teallite",\n \"popularity\": 10700\n },\n {\n \"tag\": "alicyclic interpellator",\n \"popularity\": 10687\n },\n {\n \"tag\": "nonsynthesized",\n \"popularity\": 10674\n },\n {\n \"tag\": "wheelwrighting",\n \"popularity\": 10661\n },\n {\n \"tag\": "pelliculate",\n \"popularity\": 10648\n },\n {\n \"tag\": "Euphyllopoda",\n \"popularity\": 10635\n },\n {\n \"tag\": "graver",\n \"popularity\": 10622\n },\n {\n \"tag\": "automorph",\n \"popularity\": 10609\n },\n {\n \"tag\": "underhanded",\n \"popularity\": 10597\n },\n {\n \"tag\": "causal",\n \"popularity\": 10584\n },\n {\n \"tag\": "odoom",\n \"popularity\": 10571\n },\n {\n \"tag\": "apodictical",\n \"popularity\": 10558\n },\n {\n \"tag\": "foundery",\n \"popularity\": 10545\n },\n {\n \"tag\": "unneighbored",\n \"popularity\": 10533\n },\n {\n \"tag\": "woolshearing",\n \"popularity\": 10520\n },\n {\n \"tag\": "boschveld",\n \"popularity\": 10507\n },\n {\n \"tag\": "unhardened lipopod",\n \"popularity\": 10495\n },\n {\n \"tag\": "unenriching",\n \"popularity\": 10482\n },\n {\n \"tag\": "spak",\n \"popularity\": 10469\n },\n {\n \"tag\": "yogasana",\n \"popularity\": 10457\n },\n {\n \"tag\": "depoetize",\n \"popularity\": 10444\n },\n {\n \"tag\": "parousiamania",\n \"popularity\": 10432\n },\n {\n \"tag\": "longlegs",\n \"popularity\": 10419\n },\n {\n \"tag\": "gelatinizability",\n \"popularity\": 10407\n },\n {\n \"tag\": "edeology",\n \"popularity\": 10394\n },\n {\n \"tag\": "sodwork",\n \"popularity\": 10382\n },\n {\n \"tag\": "somnambule",\n \"popularity\": 10369\n },\n {\n \"tag\": "antiquing",\n \"popularity\": 10357\n },\n {\n \"tag\": "intaker",\n \"popularity\": 10344\n },\n {\n \"tag\": "Gerberia",\n \"popularity\": 10332\n },\n {\n \"tag\": "preadmit",\n \"popularity\": 10320\n },\n {\n \"tag\": "bullhorn",\n \"popularity\": 10307\n },\n {\n \"tag\": "sororal",\n \"popularity\": 10295\n },\n {\n \"tag\": "phaeophyceous",\n \"popularity\": 10283\n },\n {\n \"tag\": "omphalopsychite",\n \"popularity\": 10271\n },\n {\n \"tag\": "substantious",\n \"popularity\": 10258\n },\n {\n \"tag\": "undemonstratively",\n \"popularity\": 10246\n },\n {\n \"tag\": "corallike blackit",\n \"popularity\": 10234\n },\n {\n \"tag\": "amoebous",\n \"popularity\": 10222\n },\n {\n \"tag\": "Polypodium",\n \"popularity\": 10210\n },\n {\n \"tag\": "blodite",\n \"popularity\": 10198\n },\n {\n \"tag\": "hordarian",\n \"popularity\": 10186\n },\n {\n \"tag\": "nonmoral",\n \"popularity\": 10174\n },\n {\n \"tag\": "dredgeful",\n \"popularity\": 10162\n },\n {\n \"tag\": "nourishingly",\n \"popularity\": 10150\n },\n {\n \"tag\": "seamy",\n \"popularity\": 10138\n },\n {\n \"tag\": "vara",\n \"popularity\": 10126\n },\n {\n \"tag\": "incorruptibleness",\n \"popularity\": 10114\n },\n {\n \"tag\": "manipulator",\n \"popularity\": 10102\n },\n {\n \"tag\": "chromodiascope uncountably",\n \"popularity\": 10090\n },\n {\n \"tag\": "typhemia",\n \"popularity\": 10078\n },\n {\n \"tag\": "Smalcaldic",\n \"popularity\": 10066\n },\n {\n \"tag\": "precontrive",\n \"popularity\": 10054\n },\n {\n \"tag\": "sowarry",\n \"popularity\": 10042\n },\n {\n \"tag\": "monopodic",\n \"popularity\": 10031\n },\n {\n \"tag\": "recodify",\n \"popularity\": 10019\n },\n {\n \"tag\": "phosphowolframic rimple",\n \"popularity\": 10007\n },\n {\n \"tag\": "triconch",\n \"popularity\": 9995\n },\n {\n \"tag\": "pycnodontoid",\n \"popularity\": 9984\n },\n {\n \"tag\": "bradyspermatism",\n \"popularity\": 9972\n },\n {\n \"tag\": "extensionist",\n \"popularity\": 9960\n },\n {\n \"tag\": "characterize",\n \"popularity\": 9949\n },\n {\n \"tag\": "anatreptic proteolytic",\n \"popularity\": 9937\n },\n {\n \"tag\": "waterboard",\n \"popularity\": 9925\n },\n {\n \"tag\": "allopathically",\n \"popularity\": 9914\n },\n {\n \"tag\": "arithmetician",\n \"popularity\": 9902\n },\n {\n \"tag\": "subsist",\n \"popularity\": 9891\n },\n {\n \"tag\": "Islamitish",\n \"popularity\": 9879\n },\n {\n \"tag\": "biddy",\n \"popularity\": 9868\n },\n {\n \"tag\": "reverberation",\n \"popularity\": 9856\n },\n {\n \"tag\": "Zaporogue",\n \"popularity\": 9845\n },\n {\n \"tag\": "soapberry",\n \"popularity\": 9833\n },\n {\n \"tag\": "physiognomics",\n \"popularity\": 9822\n },\n {\n \"tag\": "hospitalization",\n \"popularity\": 9810\n },\n {\n \"tag\": "dissembler",\n \"popularity\": 9799\n },\n {\n \"tag\": "festinate",\n \"popularity\": 9788\n },\n {\n \"tag\": "angiectopia",\n \"popularity\": 9776\n },\n {\n \"tag\": "Pulicidae",\n \"popularity\": 9765\n },\n {\n \"tag\": "beslimer",\n \"popularity\": 9754\n },\n {\n \"tag\": "nontreaty",\n \"popularity\": 9743\n },\n {\n \"tag\": "unhaggled",\n \"popularity\": 9731\n },\n {\n \"tag\": "catfall",\n \"popularity\": 9720\n },\n {\n \"tag\": "stola",\n \"popularity\": 9709\n },\n {\n \"tag\": "pataco",\n \"popularity\": 9698\n },\n {\n \"tag\": "ontologistic",\n \"popularity\": 9686\n },\n {\n \"tag\": "aerosphere",\n \"popularity\": 9675\n },\n {\n \"tag\": "deobstruent",\n \"popularity\": 9664\n },\n {\n \"tag\": "threepence",\n \"popularity\": 9653\n },\n {\n \"tag\": "cyprinoid",\n \"popularity\": 9642\n },\n {\n \"tag\": "overbank",\n \"popularity\": 9631\n },\n {\n \"tag\": "prostyle",\n \"popularity\": 9620\n },\n {\n \"tag\": "photoactivation",\n \"popularity\": 9609\n },\n {\n \"tag\": "homothetic",\n \"popularity\": 9598\n },\n {\n \"tag\": "roguedom",\n \"popularity\": 9587\n },\n {\n \"tag\": "underschool",\n \"popularity\": 9576\n },\n {\n \"tag\": "tractility",\n \"popularity\": 9565\n },\n {\n \"tag\": "gardenin",\n \"popularity\": 9554\n },\n {\n \"tag\": "Micromastictora",\n \"popularity\": 9543\n },\n {\n \"tag\": "gossypine",\n \"popularity\": 9532\n },\n {\n \"tag\": "amylodyspepsia",\n \"popularity\": 9521\n },\n {\n \"tag\": "Luciana",\n \"popularity\": 9510\n },\n {\n \"tag\": "meetly nonfisherman",\n \"popularity\": 9500\n },\n {\n \"tag\": "backhanded",\n \"popularity\": 9489\n },\n {\n \"tag\": "decrustation",\n \"popularity\": 9478\n },\n {\n \"tag\": "pinrail",\n \"popularity\": 9467\n },\n {\n \"tag\": "Mahori",\n \"popularity\": 9456\n },\n {\n \"tag\": "unsizable",\n \"popularity\": 9446\n },\n {\n \"tag\": "disawa",\n \"popularity\": 9435\n },\n {\n \"tag\": "launderability inconsidered",\n \"popularity\": 9424\n },\n {\n \"tag\": "unclassical",\n \"popularity\": 9414\n },\n {\n \"tag\": "inobtrusiveness",\n \"popularity\": 9403\n },\n {\n \"tag\": "sialogenous",\n \"popularity\": 9392\n },\n {\n \"tag\": "sulphonamide",\n \"popularity\": 9382\n },\n {\n \"tag\": "diluvion",\n \"popularity\": 9371\n },\n {\n \"tag\": "deuteranope",\n \"popularity\": 9361\n },\n {\n \"tag\": "addition",\n \"popularity\": 9350\n },\n {\n \"tag\": "bockeret",\n \"popularity\": 9339\n },\n {\n \"tag\": "unidentified",\n \"popularity\": 9329\n },\n {\n \"tag\": "caryatic",\n \"popularity\": 9318\n },\n {\n \"tag\": "misattribution",\n \"popularity\": 9308\n },\n {\n \"tag\": "outray",\n \"popularity\": 9297\n },\n {\n \"tag\": "areometrical",\n \"popularity\": 9287\n },\n {\n \"tag\": "antilogism",\n \"popularity\": 9277\n },\n {\n \"tag\": "inadjustable",\n \"popularity\": 9266\n },\n {\n \"tag\": "byssus",\n \"popularity\": 9256\n },\n {\n \"tag\": "trun",\n \"popularity\": 9245\n },\n {\n \"tag\": "thereology",\n \"popularity\": 9235\n },\n {\n \"tag\": "extort",\n \"popularity\": 9225\n },\n {\n \"tag\": "bumpkin",\n \"popularity\": 9214\n },\n {\n \"tag\": "sulphobenzide",\n \"popularity\": 9204\n },\n {\n \"tag\": "hydrogeology",\n \"popularity\": 9194\n },\n {\n \"tag\": "nidulariaceous",\n \"popularity\": 9183\n },\n {\n \"tag\": "propodiale",\n \"popularity\": 9173\n },\n {\n \"tag\": "fierily",\n \"popularity\": 9163\n },\n {\n \"tag\": "aerotonometry",\n \"popularity\": 9153\n },\n {\n \"tag\": "pelobatid oversuperstitious",\n \"popularity\": 9142\n },\n {\n \"tag\": "restringent",\n \"popularity\": 9132\n },\n {\n \"tag\": "tetrapodic",\n \"popularity\": 9122\n },\n {\n \"tag\": "heroicness Vendidad",\n \"popularity\": 9112\n },\n {\n \"tag\": "Sphingurus",\n \"popularity\": 9102\n },\n {\n \"tag\": "sclerote",\n \"popularity\": 9092\n },\n {\n \"tag\": "unkeyed",\n \"popularity\": 9082\n },\n {\n \"tag\": "superparliamentary",\n \"popularity\": 9072\n },\n {\n \"tag\": "hetericism",\n \"popularity\": 9061\n },\n {\n \"tag\": "hucklebone",\n \"popularity\": 9051\n },\n {\n \"tag\": "yojan",\n \"popularity\": 9041\n },\n {\n \"tag\": "bossed",\n \"popularity\": 9031\n },\n {\n \"tag\": "spiderwork",\n \"popularity\": 9021\n },\n {\n \"tag\": "millfeed dullery",\n \"popularity\": 9011\n },\n {\n \"tag\": "adnoun",\n \"popularity\": 9001\n },\n {\n \"tag\": "mesometric",\n \"popularity\": 8992\n },\n {\n \"tag\": "doublehandedness",\n \"popularity\": 8982\n },\n {\n \"tag\": "suppurant",\n \"popularity\": 8972\n },\n {\n \"tag\": "Berlinize",\n \"popularity\": 8962\n },\n {\n \"tag\": "sontag",\n \"popularity\": 8952\n },\n {\n \"tag\": "biplane",\n \"popularity\": 8942\n },\n {\n \"tag\": "insula",\n \"popularity\": 8932\n },\n {\n \"tag\": "unbrand",\n \"popularity\": 8922\n },\n {\n \"tag\": "Basilosaurus",\n \"popularity\": 8913\n },\n {\n \"tag\": "prenomination",\n \"popularity\": 8903\n },\n {\n \"tag\": "untextual",\n \"popularity\": 8893\n },\n {\n \"tag\": "coleslaw",\n \"popularity\": 8883\n },\n {\n \"tag\": "langsyne",\n \"popularity\": 8874\n },\n {\n \"tag\": "impede",\n \"popularity\": 8864\n },\n {\n \"tag\": "irrigator",\n \"popularity\": 8854\n },\n {\n \"tag\": "deflocculation",\n \"popularity\": 8844\n },\n {\n \"tag\": "narghile",\n \"popularity\": 8835\n },\n {\n \"tag\": "unguardedly ebenaceous",\n \"popularity\": 8825\n },\n {\n \"tag\": "conversantly subocular",\n \"popularity\": 8815\n },\n {\n \"tag\": "hydroponic",\n \"popularity\": 8806\n },\n {\n \"tag\": "anthropopsychism",\n \"popularity\": 8796\n },\n {\n \"tag\": "panoptic",\n \"popularity\": 8787\n },\n {\n \"tag\": "insufferable",\n \"popularity\": 8777\n },\n {\n \"tag\": "salema",\n \"popularity\": 8768\n },\n {\n \"tag\": "Myriapoda",\n \"popularity\": 8758\n },\n {\n \"tag\": "regarrison",\n \"popularity\": 8748\n },\n {\n \"tag\": "overlearned",\n \"popularity\": 8739\n },\n {\n \"tag\": "ultraroyalist conventical bureaucratical",\n \"popularity\": 8729\n },\n {\n \"tag\": "epicaridan",\n \"popularity\": 8720\n },\n {\n \"tag\": "poetastress",\n \"popularity\": 8711\n },\n {\n \"tag\": "monophthalmus",\n \"popularity\": 8701\n },\n {\n \"tag\": "simnel",\n \"popularity\": 8692\n },\n {\n \"tag\": "compotor",\n \"popularity\": 8682\n },\n {\n \"tag\": "hydrolase",\n \"popularity\": 8673\n },\n {\n \"tag\": "attemptless",\n \"popularity\": 8663\n },\n {\n \"tag\": "visceroptosis",\n \"popularity\": 8654\n },\n {\n \"tag\": "unpreparedly",\n \"popularity\": 8645\n },\n {\n \"tag\": "mastage",\n \"popularity\": 8635\n },\n {\n \"tag\": "preinfluence",\n \"popularity\": 8626\n },\n {\n \"tag\": "Siwan",\n \"popularity\": 8617\n },\n {\n \"tag\": "ceratotheca belvedere",\n \"popularity\": 8607\n },\n {\n \"tag\": "disenablement",\n \"popularity\": 8598\n },\n {\n \"tag\": "nine",\n \"popularity\": 8589\n },\n {\n \"tag\": "spellingdown abridgment",\n \"popularity\": 8580\n },\n {\n \"tag\": "twilightless",\n \"popularity\": 8571\n },\n {\n \"tag\": "overflow",\n \"popularity\": 8561\n },\n {\n \"tag\": "mismeasurement",\n \"popularity\": 8552\n },\n {\n \"tag\": "nawabship",\n \"popularity\": 8543\n },\n {\n \"tag\": "Phrynosoma",\n \"popularity\": 8534\n },\n {\n \"tag\": "unanticipatingly",\n \"popularity\": 8525\n },\n {\n \"tag\": "blankite",\n \"popularity\": 8516\n },\n {\n \"tag\": "role",\n \"popularity\": 8506\n },\n {\n \"tag\": "peperine edelweiss",\n \"popularity\": 8497\n },\n {\n \"tag\": "unhysterical",\n \"popularity\": 8488\n },\n {\n \"tag\": "attentiveness",\n \"popularity\": 8479\n },\n {\n \"tag\": "scintillant",\n \"popularity\": 8470\n },\n {\n \"tag\": "stenostomatous",\n \"popularity\": 8461\n },\n {\n \"tag\": "pectinite",\n \"popularity\": 8452\n },\n {\n \"tag\": "herring",\n \"popularity\": 8443\n },\n {\n \"tag\": "interroom",\n \"popularity\": 8434\n },\n {\n \"tag\": "laccol",\n \"popularity\": 8425\n },\n {\n \"tag\": "unpartably kylite",\n \"popularity\": 8416\n },\n {\n \"tag\": "spirivalve",\n \"popularity\": 8407\n },\n {\n \"tag\": "hoosegow",\n \"popularity\": 8398\n },\n {\n \"tag\": "doat",\n \"popularity\": 8389\n },\n {\n \"tag\": "amphibian",\n \"popularity\": 8380\n },\n {\n \"tag\": "exposit",\n \"popularity\": 8371\n },\n {\n \"tag\": "canopy",\n \"popularity\": 8363\n },\n {\n \"tag\": "houndlike",\n \"popularity\": 8354\n },\n {\n \"tag\": "spikebill",\n \"popularity\": 8345\n },\n {\n \"tag\": "wiseacre pyrotechnic",\n \"popularity\": 8336\n },\n {\n \"tag\": "confessingly woodman",\n \"popularity\": 8327\n },\n {\n \"tag\": "overside",\n \"popularity\": 8318\n },\n {\n \"tag\": "oftwhiles",\n \"popularity\": 8310\n },\n {\n \"tag\": "Musophagidae",\n \"popularity\": 8301\n },\n {\n \"tag\": "slumberer",\n \"popularity\": 8292\n },\n {\n \"tag\": "leiotrichy",\n \"popularity\": 8283\n },\n {\n \"tag\": "Mantispidae",\n \"popularity\": 8275\n },\n {\n \"tag\": "perceptually",\n \"popularity\": 8266\n },\n {\n \"tag\": "biller",\n \"popularity\": 8257\n },\n {\n \"tag\": "eudaemonical",\n \"popularity\": 8249\n },\n {\n \"tag\": "underfiend",\n \"popularity\": 8240\n },\n {\n \"tag\": "impartible",\n \"popularity\": 8231\n },\n {\n \"tag\": "saxicavous",\n \"popularity\": 8223\n },\n {\n \"tag\": "yapster",\n \"popularity\": 8214\n },\n {\n \"tag\": "aliseptal",\n \"popularity\": 8205\n },\n {\n \"tag\": "omniparient",\n \"popularity\": 8197\n },\n {\n \"tag\": "nishiki",\n \"popularity\": 8188\n },\n {\n \"tag\": "yuzluk",\n \"popularity\": 8180\n },\n {\n \"tag\": "solderer",\n \"popularity\": 8171\n },\n {\n \"tag\": "Pinna",\n \"popularity\": 8162\n },\n {\n \"tag\": "reinterfere",\n \"popularity\": 8154\n },\n {\n \"tag\": "superepic",\n \"popularity\": 8145\n },\n {\n \"tag\": "ronquil",\n \"popularity\": 8137\n },\n {\n \"tag\": "bratstvo",\n \"popularity\": 8128\n },\n {\n \"tag\": "Thea",\n \"popularity\": 8120\n },\n {\n \"tag\": "hermaphroditical",\n \"popularity\": 8111\n },\n {\n \"tag\": "enlief",\n \"popularity\": 8103\n },\n {\n \"tag\": "Jesuate",\n \"popularity\": 8095\n },\n {\n \"tag\": "gaysome",\n \"popularity\": 8086\n },\n {\n \"tag\": "iliohypogastric",\n \"popularity\": 8078\n },\n {\n \"tag\": "regardance",\n \"popularity\": 8069\n },\n {\n \"tag\": "cumulately",\n \"popularity\": 8061\n },\n {\n \"tag\": "haustorial nucleolocentrosome",\n \"popularity\": 8053\n },\n {\n \"tag\": "cosmocrat",\n \"popularity\": 8044\n },\n {\n \"tag\": "onyxitis",\n \"popularity\": 8036\n },\n {\n \"tag\": "Cabinda",\n \"popularity\": 8028\n },\n {\n \"tag\": "coresort",\n \"popularity\": 8019\n },\n {\n \"tag\": "drusy preformant",\n \"popularity\": 8011\n },\n {\n \"tag\": "piningly",\n \"popularity\": 8003\n },\n {\n \"tag\": "bootlessly",\n \"popularity\": 7994\n },\n {\n \"tag\": "talari",\n \"popularity\": 7986\n },\n {\n \"tag\": "amidoacetal",\n \"popularity\": 7978\n },\n {\n \"tag\": "pschent",\n \"popularity\": 7970\n },\n {\n \"tag\": "consumptional scarer titivate",\n \"popularity\": 7962\n },\n {\n \"tag\": "Anserinae",\n \"popularity\": 7953\n },\n {\n \"tag\": "flaunter",\n \"popularity\": 7945\n },\n {\n \"tag\": "reindeer",\n \"popularity\": 7937\n },\n {\n \"tag\": "disparage",\n \"popularity\": 7929\n },\n {\n \"tag\": "superheat",\n \"popularity\": 7921\n },\n {\n \"tag\": "Chromatium",\n \"popularity\": 7912\n },\n {\n \"tag\": "Tina",\n \"popularity\": 7904\n },\n {\n \"tag\": "rededicatory",\n \"popularity\": 7896\n },\n {\n \"tag\": "nontransient",\n \"popularity\": 7888\n },\n {\n \"tag\": "Phocaean brinkless",\n \"popularity\": 7880\n },\n {\n \"tag\": "ventriculose",\n \"popularity\": 7872\n },\n {\n \"tag\": "upplough",\n \"popularity\": 7864\n },\n {\n \"tag\": "succorless",\n \"popularity\": 7856\n },\n {\n \"tag\": "hayrake",\n \"popularity\": 7848\n },\n {\n \"tag\": "merriness amorphia",\n \"popularity\": 7840\n },\n {\n \"tag\": "merycism",\n \"popularity\": 7832\n },\n {\n \"tag\": "checkrow",\n \"popularity\": 7824\n },\n {\n \"tag\": "scry",\n \"popularity\": 7816\n },\n {\n \"tag\": "obvolve",\n \"popularity\": 7808\n },\n {\n \"tag\": "orchard",\n \"popularity\": 7800\n },\n {\n \"tag\": "isomerize",\n \"popularity\": 7792\n },\n {\n \"tag\": "competitrix",\n \"popularity\": 7784\n },\n {\n \"tag\": "unbannered",\n \"popularity\": 7776\n },\n {\n \"tag\": "undoctrined",\n \"popularity\": 7768\n },\n {\n \"tag\": "theologian",\n \"popularity\": 7760\n },\n {\n \"tag\": "nebby",\n \"popularity\": 7752\n },\n {\n \"tag\": "Cardiazol",\n \"popularity\": 7745\n },\n {\n \"tag\": "phagedenic",\n \"popularity\": 7737\n },\n {\n \"tag\": "nostalgic",\n \"popularity\": 7729\n },\n {\n \"tag\": "orthodoxy",\n \"popularity\": 7721\n },\n {\n \"tag\": "oversanguine",\n \"popularity\": 7713\n },\n {\n \"tag\": "lish",\n \"popularity\": 7705\n },\n {\n \"tag\": "ketogenic",\n \"popularity\": 7698\n },\n {\n \"tag\": "syndicalize",\n \"popularity\": 7690\n },\n {\n \"tag\": "leeftail",\n \"popularity\": 7682\n },\n {\n \"tag\": "bulbomedullary",\n \"popularity\": 7674\n },\n {\n \"tag\": "reletter",\n \"popularity\": 7667\n },\n {\n \"tag\": "bitterly",\n \"popularity\": 7659\n },\n {\n \"tag\": "participatory",\n \"popularity\": 7651\n },\n {\n \"tag\": "baldberry",\n \"popularity\": 7643\n },\n {\n \"tag\": "prowaterpower",\n \"popularity\": 7636\n },\n {\n \"tag\": "lexicographical",\n \"popularity\": 7628\n },\n {\n \"tag\": "Anisodactyli",\n \"popularity\": 7620\n },\n {\n \"tag\": "amphipodous",\n \"popularity\": 7613\n },\n {\n \"tag\": "triglandular",\n \"popularity\": 7605\n },\n {\n \"tag\": "xanthopsin",\n \"popularity\": 7597\n },\n {\n \"tag\": "indefinitude",\n \"popularity\": 7590\n },\n {\n \"tag\": "bookworm",\n \"popularity\": 7582\n },\n {\n \"tag\": "suffocative",\n \"popularity\": 7574\n },\n {\n \"tag\": "uncongested tyrant",\n \"popularity\": 7567\n },\n {\n \"tag\": "alow harmoniously Pamir",\n \"popularity\": 7559\n },\n {\n \"tag\": "monander",\n \"popularity\": 7552\n },\n {\n \"tag\": "bagatelle",\n \"popularity\": 7544\n },\n {\n \"tag\": "membranology",\n \"popularity\": 7537\n },\n {\n \"tag\": "parturifacient",\n \"popularity\": 7529\n },\n {\n \"tag\": "excitovascular",\n \"popularity\": 7522\n },\n {\n \"tag\": "homopolar",\n \"popularity\": 7514\n },\n {\n \"tag\": "phobiac",\n \"popularity\": 7507\n },\n {\n \"tag\": "clype",\n \"popularity\": 7499\n },\n {\n \"tag\": "unsubversive",\n \"popularity\": 7492\n },\n {\n \"tag\": "bostrychoidal scorpionwort",\n \"popularity\": 7484\n },\n {\n \"tag\": "biliteralism",\n \"popularity\": 7477\n },\n {\n \"tag\": "dentatocostate",\n \"popularity\": 7469\n },\n {\n \"tag\": "Pici",\n \"popularity\": 7462\n },\n {\n \"tag\": "sideritic",\n \"popularity\": 7454\n },\n {\n \"tag\": "syntaxis",\n \"popularity\": 7447\n },\n {\n \"tag\": "ingest",\n \"popularity\": 7440\n },\n {\n \"tag\": "rigmarolish",\n \"popularity\": 7432\n },\n {\n \"tag\": "ocreaceous",\n \"popularity\": 7425\n },\n {\n \"tag\": "hyperbrachyskelic",\n \"popularity\": 7418\n },\n {\n \"tag\": "basophobia",\n \"popularity\": 7410\n },\n {\n \"tag\": "substantialness",\n \"popularity\": 7403\n },\n {\n \"tag\": "agglutinoid",\n \"popularity\": 7396\n },\n {\n \"tag\": "longleaf",\n \"popularity\": 7388\n },\n {\n \"tag\": "electroengraving",\n \"popularity\": 7381\n },\n {\n \"tag\": "laparoenterotomy",\n \"popularity\": 7374\n },\n {\n \"tag\": "oxalylurea",\n \"popularity\": 7366\n },\n {\n \"tag\": "unattaintedly",\n \"popularity\": 7359\n },\n {\n \"tag\": "pennystone",\n \"popularity\": 7352\n },\n {\n \"tag\": "Plumbaginaceae",\n \"popularity\": 7345\n },\n {\n \"tag\": "horntip",\n \"popularity\": 7337\n },\n {\n \"tag\": "begrudge",\n \"popularity\": 7330\n },\n {\n \"tag\": "bechignoned",\n \"popularity\": 7323\n },\n {\n \"tag\": "hologonidium",\n \"popularity\": 7316\n },\n {\n \"tag\": "Pulian",\n \"popularity\": 7309\n },\n {\n \"tag\": "gratulation",\n \"popularity\": 7301\n },\n {\n \"tag\": "Sebright",\n \"popularity\": 7294\n },\n {\n \"tag\": "coinstantaneous emotionally",\n \"popularity\": 7287\n },\n {\n \"tag\": "thoracostracan",\n \"popularity\": 7280\n },\n {\n \"tag\": "saurodont",\n \"popularity\": 7273\n },\n {\n \"tag\": "coseat",\n \"popularity\": 7266\n },\n {\n \"tag\": "irascibility",\n \"popularity\": 7259\n },\n {\n \"tag\": "occlude",\n \"popularity\": 7251\n },\n {\n \"tag\": "metallurgist",\n \"popularity\": 7244\n },\n {\n \"tag\": "extraviolet",\n \"popularity\": 7237\n },\n {\n \"tag\": "clinic",\n \"popularity\": 7230\n },\n {\n \"tag\": "skater",\n \"popularity\": 7223\n },\n {\n \"tag\": "linguistic",\n \"popularity\": 7216\n },\n {\n \"tag\": "attacheship",\n \"popularity\": 7209\n },\n {\n \"tag\": "Rachianectes",\n \"popularity\": 7202\n },\n {\n \"tag\": "foliolose",\n \"popularity\": 7195\n },\n {\n \"tag\": "claudetite",\n \"popularity\": 7188\n },\n {\n \"tag\": "aphidian scratching",\n \"popularity\": 7181\n },\n {\n \"tag\": "Carida",\n \"popularity\": 7174\n },\n {\n \"tag\": "tiepin polymicroscope",\n \"popularity\": 7167\n },\n {\n \"tag\": "telpherage",\n \"popularity\": 7160\n },\n {\n \"tag\": "meek",\n \"popularity\": 7153\n },\n {\n \"tag\": "swiftness",\n \"popularity\": 7146\n },\n {\n \"tag\": "gentes",\n \"popularity\": 7139\n },\n {\n \"tag\": "uncommemorated",\n \"popularity\": 7132\n },\n {\n \"tag\": "Lazarus",\n \"popularity\": 7125\n },\n {\n \"tag\": "redivive",\n \"popularity\": 7119\n },\n {\n \"tag\": "nonfebrile",\n \"popularity\": 7112\n },\n {\n \"tag\": "nymphet",\n \"popularity\": 7105\n },\n {\n \"tag\": "areologically",\n \"popularity\": 7098\n },\n {\n \"tag\": "undonkey",\n \"popularity\": 7091\n },\n {\n \"tag\": "projecting",\n \"popularity\": 7084\n },\n {\n \"tag\": "pinnigrade",\n \"popularity\": 7077\n },\n {\n \"tag\": "butylation",\n \"popularity\": 7071\n },\n {\n \"tag\": "philologistic lenticle",\n \"popularity\": 7064\n },\n {\n \"tag\": "nooky",\n \"popularity\": 7057\n },\n {\n \"tag\": "incestuousness",\n \"popularity\": 7050\n },\n {\n \"tag\": "palingenetically",\n \"popularity\": 7043\n },\n {\n \"tag\": "mitochondria",\n \"popularity\": 7037\n },\n {\n \"tag\": "truthify",\n \"popularity\": 7030\n },\n {\n \"tag\": "titanyl",\n \"popularity\": 7023\n },\n {\n \"tag\": "bestride",\n \"popularity\": 7016\n },\n {\n \"tag\": "chende",\n \"popularity\": 7010\n },\n {\n \"tag\": "Chaucerian monophote",\n \"popularity\": 7003\n },\n {\n \"tag\": "cutback",\n \"popularity\": 6996\n },\n {\n \"tag\": "unpatiently",\n \"popularity\": 6989\n },\n {\n \"tag\": "subvitreous",\n \"popularity\": 6983\n },\n {\n \"tag\": "organizable",\n \"popularity\": 6976\n },\n {\n \"tag\": "anniverse uncomprehensible",\n \"popularity\": 6969\n },\n {\n \"tag\": "hyalescence",\n \"popularity\": 6963\n },\n {\n \"tag\": "amniochorial",\n \"popularity\": 6956\n },\n {\n \"tag\": "Corybantian",\n \"popularity\": 6949\n },\n {\n \"tag\": "genocide Scaphitidae",\n \"popularity\": 6943\n },\n {\n \"tag\": "accordionist",\n \"popularity\": 6936\n },\n {\n \"tag\": "becheck",\n \"popularity\": 6930\n },\n {\n \"tag\": "overproduce",\n \"popularity\": 6923\n },\n {\n \"tag\": "unmaniac frijolillo",\n \"popularity\": 6916\n },\n {\n \"tag\": "multisulcated",\n \"popularity\": 6910\n },\n {\n \"tag\": "wennebergite",\n \"popularity\": 6903\n },\n {\n \"tag\": "tautousious mowth",\n \"popularity\": 6897\n },\n {\n \"tag\": "marigold",\n \"popularity\": 6890\n },\n {\n \"tag\": "affray",\n \"popularity\": 6884\n },\n {\n \"tag\": "nonidolatrous",\n \"popularity\": 6877\n },\n {\n \"tag\": "aphrasia",\n \"popularity\": 6871\n },\n {\n \"tag\": "muddlingly",\n \"popularity\": 6864\n },\n {\n \"tag\": "clear",\n \"popularity\": 6858\n },\n {\n \"tag\": "Clitoria",\n \"popularity\": 6851\n },\n {\n \"tag\": "apportionment underwaist",\n \"popularity\": 6845\n },\n {\n \"tag\": "kodakist",\n \"popularity\": 6838\n },\n {\n \"tag\": "Momotidae",\n \"popularity\": 6832\n },\n {\n \"tag\": "cryptovalency",\n \"popularity\": 6825\n },\n {\n \"tag\": "floe",\n \"popularity\": 6819\n },\n {\n \"tag\": "aphagia",\n \"popularity\": 6812\n },\n {\n \"tag\": "brontograph",\n \"popularity\": 6806\n },\n {\n \"tag\": "tubulous",\n \"popularity\": 6799\n },\n {\n \"tag\": "unhorse",\n \"popularity\": 6793\n },\n {\n \"tag\": "chlordane",\n \"popularity\": 6787\n },\n {\n \"tag\": "colloquy brochan",\n \"popularity\": 6780\n },\n {\n \"tag\": "sloosh",\n \"popularity\": 6774\n },\n {\n \"tag\": "battered",\n \"popularity\": 6767\n },\n {\n \"tag\": "monocularity pluriguttulate",\n \"popularity\": 6761\n },\n {\n \"tag\": "chiastoneury",\n \"popularity\": 6755\n },\n {\n \"tag\": "Sanguinaria",\n \"popularity\": 6748\n },\n {\n \"tag\": "confessionary",\n \"popularity\": 6742\n },\n {\n \"tag\": "enzymic",\n \"popularity\": 6736\n },\n {\n \"tag\": "cord",\n \"popularity\": 6729\n },\n {\n \"tag\": "oviducal",\n \"popularity\": 6723\n },\n {\n \"tag\": "crozzle outsea",\n \"popularity\": 6717\n },\n {\n \"tag\": "balladical",\n \"popularity\": 6710\n },\n {\n \"tag\": "uncollectibleness",\n \"popularity\": 6704\n },\n {\n \"tag\": "predorsal",\n \"popularity\": 6698\n },\n {\n \"tag\": "reauthenticate",\n \"popularity\": 6692\n },\n {\n \"tag\": "ravissant",\n \"popularity\": 6685\n },\n {\n \"tag\": "advantageousness",\n \"popularity\": 6679\n },\n {\n \"tag\": "rung",\n \"popularity\": 6673\n },\n {\n \"tag\": "duncedom",\n \"popularity\": 6667\n },\n {\n \"tag\": "hematolite",\n \"popularity\": 6660\n },\n {\n \"tag\": "thisness",\n \"popularity\": 6654\n },\n {\n \"tag\": "mapau",\n \"popularity\": 6648\n },\n {\n \"tag\": "Hecatic",\n \"popularity\": 6642\n },\n {\n \"tag\": "meningoencephalocele",\n \"popularity\": 6636\n },\n {\n \"tag\": "confection sorra",\n \"popularity\": 6630\n },\n {\n \"tag\": "unsedate",\n \"popularity\": 6623\n },\n {\n \"tag\": "meningocerebritis",\n \"popularity\": 6617\n },\n {\n \"tag\": "biopsychological",\n \"popularity\": 6611\n },\n {\n \"tag\": "clavicithern",\n \"popularity\": 6605\n },\n {\n \"tag\": "resun",\n \"popularity\": 6599\n },\n {\n \"tag\": "bayamo",\n \"popularity\": 6593\n },\n {\n \"tag\": "seeableness",\n \"popularity\": 6587\n },\n {\n \"tag\": "hypsidolichocephalism",\n \"popularity\": 6581\n },\n {\n \"tag\": "salivous",\n \"popularity\": 6574\n },\n {\n \"tag\": "neumatize",\n \"popularity\": 6568\n },\n {\n \"tag\": "stree",\n \"popularity\": 6562\n },\n {\n \"tag\": "markshot",\n \"popularity\": 6556\n },\n {\n \"tag\": "phraseologically",\n \"popularity\": 6550\n },\n {\n \"tag\": "yealing",\n \"popularity\": 6544\n },\n {\n \"tag\": "puggy",\n \"popularity\": 6538\n },\n {\n \"tag\": "sexadecimal",\n \"popularity\": 6532\n },\n {\n \"tag\": "unofficerlike",\n \"popularity\": 6526\n },\n {\n \"tag\": "curiosa",\n \"popularity\": 6520\n },\n {\n \"tag\": "pedomotor",\n \"popularity\": 6514\n },\n {\n \"tag\": "astrally",\n \"popularity\": 6508\n },\n {\n \"tag\": "prosomatic",\n \"popularity\": 6502\n },\n {\n \"tag\": "bulletheaded",\n \"popularity\": 6496\n },\n {\n \"tag\": "fortuned",\n \"popularity\": 6490\n },\n {\n \"tag\": "pixy",\n \"popularity\": 6484\n },\n {\n \"tag\": "protectrix",\n \"popularity\": 6478\n },\n {\n \"tag\": "arthritical",\n \"popularity\": 6472\n },\n {\n \"tag\": "coction",\n \"popularity\": 6466\n },\n {\n \"tag\": "Anthropos",\n \"popularity\": 6460\n },\n {\n \"tag\": "runer",\n \"popularity\": 6454\n },\n {\n \"tag\": "prenotify",\n \"popularity\": 6449\n },\n {\n \"tag\": "microspheric gastroparalysis",\n \"popularity\": 6443\n },\n {\n \"tag\": "Jovicentrical",\n \"popularity\": 6437\n },\n {\n \"tag\": "ceratopsid",\n \"popularity\": 6431\n },\n {\n \"tag\": "Theodoric",\n \"popularity\": 6425\n },\n {\n \"tag\": "Pactolus",\n \"popularity\": 6419\n },\n {\n \"tag\": "spawning",\n \"popularity\": 6413\n },\n {\n \"tag\": "nonconfidential",\n \"popularity\": 6407\n },\n {\n \"tag\": "halotrichite infumate",\n \"popularity\": 6402\n },\n {\n \"tag\": "undiscriminatingly",\n \"popularity\": 6396\n },\n {\n \"tag\": "unexasperated",\n \"popularity\": 6390\n },\n {\n \"tag\": "isoeugenol",\n \"popularity\": 6384\n },\n {\n \"tag\": "pressboard",\n \"popularity\": 6378\n },\n {\n \"tag\": "unshrew",\n \"popularity\": 6372\n },\n {\n \"tag\": "huffingly",\n \"popularity\": 6367\n },\n {\n \"tag\": "wagaun",\n \"popularity\": 6361\n },\n {\n \"tag\": "squirt Philistine",\n \"popularity\": 6355\n },\n {\n \"tag\": "kryptic",\n \"popularity\": 6349\n },\n {\n \"tag\": "paraform",\n \"popularity\": 6344\n },\n {\n \"tag\": "preverify",\n \"popularity\": 6338\n },\n {\n \"tag\": "dalar",\n \"popularity\": 6332\n },\n {\n \"tag\": "interdictor appraisingly",\n \"popularity\": 6326\n },\n {\n \"tag\": "chipped",\n \"popularity\": 6321\n },\n {\n \"tag\": "Pteropoda",\n \"popularity\": 6315\n },\n {\n \"tag\": "Bohairic",\n \"popularity\": 6309\n },\n {\n \"tag\": "felting",\n \"popularity\": 6303\n },\n {\n \"tag\": "compurgatorial",\n \"popularity\": 6298\n },\n {\n \"tag\": "unclead",\n \"popularity\": 6292\n },\n {\n \"tag\": "stockish",\n \"popularity\": 6286\n },\n {\n \"tag\": "mulligatawny",\n \"popularity\": 6281\n },\n {\n \"tag\": "Monotheletism",\n \"popularity\": 6275\n },\n {\n \"tag\": "lutanist",\n \"popularity\": 6269\n },\n {\n \"tag\": "gluttonize",\n \"popularity\": 6264\n },\n {\n \"tag\": "hackneyed",\n \"popularity\": 6258\n },\n {\n \"tag\": "yield",\n \"popularity\": 6253\n },\n {\n \"tag\": "sulphonamido",\n \"popularity\": 6247\n },\n {\n \"tag\": "granulative",\n \"popularity\": 6241\n },\n {\n \"tag\": "swingy",\n \"popularity\": 6236\n },\n {\n \"tag\": "Desmidiales",\n \"popularity\": 6230\n },\n {\n \"tag\": "tootlish",\n \"popularity\": 6224\n },\n {\n \"tag\": "unsatisfiedly",\n \"popularity\": 6219\n },\n {\n \"tag\": "burucha",\n \"popularity\": 6213\n },\n {\n \"tag\": "premeditatingly",\n \"popularity\": 6208\n },\n {\n \"tag\": "cowrie",\n \"popularity\": 6202\n },\n {\n \"tag\": "pleurolysis",\n \"popularity\": 6197\n },\n {\n \"tag\": "nationalist",\n \"popularity\": 6191\n },\n {\n \"tag\": "Pholadacea",\n \"popularity\": 6186\n },\n {\n \"tag\": "anakrousis",\n \"popularity\": 6180\n },\n {\n \"tag\": "proctorial",\n \"popularity\": 6175\n },\n {\n \"tag\": "cavillation",\n \"popularity\": 6169\n },\n {\n \"tag\": "cervicobregmatic",\n \"popularity\": 6163\n },\n {\n \"tag\": "interspecific",\n \"popularity\": 6158\n },\n {\n \"tag\": "Teutonity",\n \"popularity\": 6152\n },\n {\n \"tag\": "snakeholing",\n \"popularity\": 6147\n },\n {\n \"tag\": "balcony",\n \"popularity\": 6142\n },\n {\n \"tag\": "latchless",\n \"popularity\": 6136\n },\n {\n \"tag\": "Mithraea",\n \"popularity\": 6131\n },\n {\n \"tag\": "pseudepigraph",\n \"popularity\": 6125\n },\n {\n \"tag\": "flosser",\n \"popularity\": 6120\n },\n {\n \"tag\": "kotyle",\n \"popularity\": 6114\n },\n {\n \"tag\": "outdo",\n \"popularity\": 6109\n },\n {\n \"tag\": "interclerical",\n \"popularity\": 6103\n },\n {\n \"tag\": "aurar",\n \"popularity\": 6098\n },\n {\n \"tag\": "apophyseal",\n \"popularity\": 6093\n },\n {\n \"tag\": "Miro",\n \"popularity\": 6087\n },\n {\n \"tag\": "Priscillian",\n \"popularity\": 6082\n },\n {\n \"tag\": "alluvia",\n \"popularity\": 6076\n },\n {\n \"tag\": "exordize",\n \"popularity\": 6071\n },\n {\n \"tag\": "breakage",\n \"popularity\": 6066\n },\n {\n \"tag\": "unclosable",\n \"popularity\": 6060\n },\n {\n \"tag\": "monocondylous",\n \"popularity\": 6055\n },\n {\n \"tag\": "dyarchy",\n \"popularity\": 6050\n },\n {\n \"tag\": "subchelate",\n \"popularity\": 6044\n },\n {\n \"tag\": "hearsay",\n \"popularity\": 6039\n },\n {\n \"tag\": "prestigiously",\n \"popularity\": 6034\n },\n {\n \"tag\": "unimuscular",\n \"popularity\": 6028\n },\n {\n \"tag\": "lingwort",\n \"popularity\": 6023\n },\n {\n \"tag\": "jealous",\n \"popularity\": 6018\n },\n {\n \"tag\": "artilleryman",\n \"popularity\": 6012\n },\n {\n \"tag\": "phantasmagorially",\n \"popularity\": 6007\n },\n {\n \"tag\": "stagnum",\n \"popularity\": 6002\n },\n {\n \"tag\": "organotropism shatteringly",\n \"popularity\": 5997\n },\n {\n \"tag\": "Mytilus Hebraist",\n \"popularity\": 5991\n },\n {\n \"tag\": "returf",\n \"popularity\": 5986\n },\n {\n \"tag\": "townfolk",\n \"popularity\": 5981\n },\n {\n \"tag\": "propitiative",\n \"popularity\": 5976\n },\n {\n \"tag\": "Anita unsullied",\n \"popularity\": 5970\n },\n {\n \"tag\": "bandoleered",\n \"popularity\": 5965\n },\n {\n \"tag\": "cubby",\n \"popularity\": 5960\n },\n {\n \"tag\": "Hexanchus",\n \"popularity\": 5955\n },\n {\n \"tag\": "circuminsular",\n \"popularity\": 5949\n },\n {\n \"tag\": "chamberletted eumycete",\n \"popularity\": 5944\n },\n {\n \"tag\": "secure",\n \"popularity\": 5939\n },\n {\n \"tag\": "Edwardean",\n \"popularity\": 5934\n },\n {\n \"tag\": "strenth",\n \"popularity\": 5929\n },\n {\n \"tag\": "exhaustless",\n \"popularity\": 5923\n },\n {\n \"tag\": "electioneerer",\n \"popularity\": 5918\n },\n {\n \"tag\": "estoile",\n \"popularity\": 5913\n },\n {\n \"tag\": "redden",\n \"popularity\": 5908\n },\n {\n \"tag\": "solicitee",\n \"popularity\": 5903\n },\n {\n \"tag\": "nonpatented",\n \"popularity\": 5898\n },\n {\n \"tag\": "lemming",\n \"popularity\": 5893\n },\n {\n \"tag\": "marled subalate",\n \"popularity\": 5887\n },\n {\n \"tag\": "premial horizonward",\n \"popularity\": 5882\n },\n {\n \"tag\": "nonrefueling",\n \"popularity\": 5877\n },\n {\n \"tag\": "rupturewort",\n \"popularity\": 5872\n },\n {\n \"tag\": "unfed",\n \"popularity\": 5867\n },\n {\n \"tag\": "empanelment",\n \"popularity\": 5862\n },\n {\n \"tag\": "isoosmosis",\n \"popularity\": 5857\n },\n {\n \"tag\": "jipijapa",\n \"popularity\": 5852\n },\n {\n \"tag\": "Fiji",\n \"popularity\": 5847\n },\n {\n \"tag\": "interferant",\n \"popularity\": 5842\n },\n {\n \"tag\": "reconstitution",\n \"popularity\": 5837\n },\n {\n \"tag\": "dockyardman",\n \"popularity\": 5832\n },\n {\n \"tag\": "dolichopodous",\n \"popularity\": 5826\n },\n {\n \"tag\": "whiteworm",\n \"popularity\": 5821\n },\n {\n \"tag\": "atheistically",\n \"popularity\": 5816\n },\n {\n \"tag\": "nonconcern",\n \"popularity\": 5811\n },\n {\n \"tag\": "scarabaeidoid",\n \"popularity\": 5806\n },\n {\n \"tag\": "triumviri",\n \"popularity\": 5801\n },\n {\n \"tag\": "rakit",\n \"popularity\": 5796\n },\n {\n \"tag\": "leecheater",\n \"popularity\": 5791\n },\n {\n \"tag\": "Arthrostraca",\n \"popularity\": 5786\n },\n {\n \"tag\": "upknit",\n \"popularity\": 5781\n },\n {\n \"tag\": "tymbalon",\n \"popularity\": 5776\n },\n {\n \"tag\": "inventurous",\n \"popularity\": 5771\n },\n {\n \"tag\": "perradiate",\n \"popularity\": 5766\n },\n {\n \"tag\": "seer",\n \"popularity\": 5762\n },\n {\n \"tag\": "Auricularia",\n \"popularity\": 5757\n },\n {\n \"tag\": "wettish exclusivity",\n \"popularity\": 5752\n },\n {\n \"tag\": "arteriosympathectomy",\n \"popularity\": 5747\n },\n {\n \"tag\": "tunlike",\n \"popularity\": 5742\n },\n {\n \"tag\": "cephalocercal",\n \"popularity\": 5737\n },\n {\n \"tag\": "meaninglessness",\n \"popularity\": 5732\n },\n {\n \"tag\": "fountful",\n \"popularity\": 5727\n },\n {\n \"tag\": "appraisement",\n \"popularity\": 5722\n },\n {\n \"tag\": "geniculated",\n \"popularity\": 5717\n },\n {\n \"tag\": "rotator",\n \"popularity\": 5712\n },\n {\n \"tag\": "foremarch biography",\n \"popularity\": 5707\n },\n {\n \"tag\": "arid",\n \"popularity\": 5703\n },\n {\n \"tag\": "inapprehensible",\n \"popularity\": 5698\n },\n {\n \"tag\": "chlorosulphonic",\n \"popularity\": 5693\n },\n {\n \"tag\": "braguette",\n \"popularity\": 5688\n },\n {\n \"tag\": "panophthalmitis",\n \"popularity\": 5683\n },\n {\n \"tag\": "pro objurgatorily",\n \"popularity\": 5678\n },\n {\n \"tag\": "zooplasty",\n \"popularity\": 5673\n },\n {\n \"tag\": "Terebratulidae",\n \"popularity\": 5669\n },\n {\n \"tag\": "Mahran",\n \"popularity\": 5664\n },\n {\n \"tag\": "anthologize merocele",\n \"popularity\": 5659\n },\n {\n \"tag\": "firecracker chiropractic",\n \"popularity\": 5654\n },\n {\n \"tag\": "tenorist",\n \"popularity\": 5649\n },\n {\n \"tag\": "amphitene",\n \"popularity\": 5645\n },\n {\n \"tag\": "silverbush toadstone",\n \"popularity\": 5640\n },\n {\n \"tag\": "entozoological",\n \"popularity\": 5635\n },\n {\n \"tag\": "trustlessness",\n \"popularity\": 5630\n },\n {\n \"tag\": "reassay",\n \"popularity\": 5625\n },\n {\n \"tag\": "chrysalides",\n \"popularity\": 5621\n },\n {\n \"tag\": "truncation",\n \"popularity\": 5616\n },\n {\n \"tag\": "unwavered mausoleal",\n \"popularity\": 5611\n },\n {\n \"tag\": "unserrated",\n \"popularity\": 5606\n },\n {\n \"tag\": "frampler",\n \"popularity\": 5602\n },\n {\n \"tag\": "celestial",\n \"popularity\": 5597\n },\n {\n \"tag\": "depreter",\n \"popularity\": 5592\n },\n {\n \"tag\": "retaliate",\n \"popularity\": 5588\n },\n {\n \"tag\": "decempunctate",\n \"popularity\": 5583\n },\n {\n \"tag\": "submitter",\n \"popularity\": 5578\n },\n {\n \"tag\": "phenothiazine",\n \"popularity\": 5573\n },\n {\n \"tag\": "hobbledehoyish",\n \"popularity\": 5569\n },\n {\n \"tag\": "erraticness",\n \"popularity\": 5564\n },\n {\n \"tag\": "ovariodysneuria",\n \"popularity\": 5559\n },\n {\n \"tag\": "puja",\n \"popularity\": 5555\n },\n {\n \"tag\": "cesspool",\n \"popularity\": 5550\n },\n {\n \"tag\": "sonation",\n \"popularity\": 5545\n },\n {\n \"tag\": "moggan",\n \"popularity\": 5541\n },\n {\n \"tag\": "overjutting",\n \"popularity\": 5536\n },\n {\n \"tag\": "cohobate",\n \"popularity\": 5531\n },\n {\n \"tag\": "Distoma",\n \"popularity\": 5527\n },\n {\n \"tag\": "Plectognathi",\n \"popularity\": 5522\n },\n {\n \"tag\": "dumple caliphate",\n \"popularity\": 5517\n },\n {\n \"tag\": "shiko",\n \"popularity\": 5513\n },\n {\n \"tag\": "downness",\n \"popularity\": 5508\n },\n {\n \"tag\": "whippletree",\n \"popularity\": 5504\n },\n {\n \"tag\": "nymphaeum",\n \"popularity\": 5499\n },\n {\n \"tag\": "there trest",\n \"popularity\": 5494\n },\n {\n \"tag\": "psychrometer",\n \"popularity\": 5490\n },\n {\n \"tag\": "pyelograph",\n \"popularity\": 5485\n },\n {\n \"tag\": "unsalvable",\n \"popularity\": 5481\n },\n {\n \"tag\": "bescreen",\n \"popularity\": 5476\n },\n {\n \"tag\": "cushy",\n \"popularity\": 5471\n },\n {\n \"tag\": "plicatolobate",\n \"popularity\": 5467\n },\n {\n \"tag\": "lakie",\n \"popularity\": 5462\n },\n {\n \"tag\": "anthropodeoxycholic",\n \"popularity\": 5458\n },\n {\n \"tag\": "resatisfaction",\n \"popularity\": 5453\n },\n {\n \"tag\": "unravelment unaccidental",\n \"popularity\": 5449\n },\n {\n \"tag\": "telewriter monogeneous",\n \"popularity\": 5444\n },\n {\n \"tag\": "unsabred",\n \"popularity\": 5440\n },\n {\n \"tag\": "startlingly",\n \"popularity\": 5435\n },\n {\n \"tag\": "Aralia",\n \"popularity\": 5431\n },\n {\n \"tag\": "alamonti",\n \"popularity\": 5426\n },\n {\n \"tag\": "Franklinization",\n \"popularity\": 5422\n },\n {\n \"tag\": "parliament",\n \"popularity\": 5417\n },\n {\n \"tag\": "schoolkeeper",\n \"popularity\": 5413\n },\n {\n \"tag\": "nonsociety",\n \"popularity\": 5408\n },\n {\n \"tag\": "parenthetic",\n \"popularity\": 5404\n },\n {\n \"tag\": "stog",\n \"popularity\": 5399\n },\n {\n \"tag\": "Pristipomidae",\n \"popularity\": 5395\n },\n {\n \"tag\": "exocarp",\n \"popularity\": 5390\n },\n {\n \"tag\": "monaxonial",\n \"popularity\": 5386\n },\n {\n \"tag\": "tramroad",\n \"popularity\": 5381\n },\n {\n \"tag\": "hookah",\n \"popularity\": 5377\n },\n {\n \"tag\": "saccharonic",\n \"popularity\": 5372\n },\n {\n \"tag\": "perimetrium",\n \"popularity\": 5368\n },\n {\n \"tag\": "libelluloid",\n \"popularity\": 5364\n },\n {\n \"tag\": "overrunningly",\n \"popularity\": 5359\n },\n {\n \"tag\": "untwister",\n \"popularity\": 5355\n },\n {\n \"tag\": "ninnyhammer",\n \"popularity\": 5350\n },\n {\n \"tag\": "metranate",\n \"popularity\": 5346\n },\n {\n \"tag\": "sarcoblast",\n \"popularity\": 5341\n },\n {\n \"tag\": "porkish",\n \"popularity\": 5337\n },\n {\n \"tag\": "chauvinistic",\n \"popularity\": 5333\n },\n {\n \"tag\": "sexagesimal",\n \"popularity\": 5328\n },\n {\n \"tag\": "hematogenic",\n \"popularity\": 5324\n },\n {\n \"tag\": "selfpreservatory",\n \"popularity\": 5320\n },\n {\n \"tag\": "myelauxe",\n \"popularity\": 5315\n },\n {\n \"tag\": "triply",\n \"popularity\": 5311\n },\n {\n \"tag\": "metaphysicous",\n \"popularity\": 5306\n },\n {\n \"tag\": "vitrinoid",\n \"popularity\": 5302\n },\n {\n \"tag\": "glabellae",\n \"popularity\": 5298\n },\n {\n \"tag\": "moonlighter",\n \"popularity\": 5293\n },\n {\n \"tag\": "monotheistically epexegetical",\n \"popularity\": 5289\n },\n {\n \"tag\": "pseudolateral",\n \"popularity\": 5285\n },\n {\n \"tag\": "heptamethylene",\n \"popularity\": 5280\n },\n {\n \"tag\": "salvadora",\n \"popularity\": 5276\n },\n {\n \"tag\": "unjovial diphenylthiourea",\n \"popularity\": 5272\n },\n {\n \"tag\": "thievishness",\n \"popularity\": 5268\n },\n {\n \"tag\": "unridable",\n \"popularity\": 5263\n },\n {\n \"tag\": "underhandedly",\n \"popularity\": 5259\n },\n {\n \"tag\": "fungiform",\n \"popularity\": 5255\n },\n {\n \"tag\": "scruffle",\n \"popularity\": 5250\n },\n {\n \"tag\": "preindisposition",\n \"popularity\": 5246\n },\n {\n \"tag\": "Amadis",\n \"popularity\": 5242\n },\n {\n \"tag\": "Culex",\n \"popularity\": 5238\n },\n {\n \"tag\": "churning",\n \"popularity\": 5233\n },\n {\n \"tag\": "imperite",\n \"popularity\": 5229\n },\n {\n \"tag\": "levorotation",\n \"popularity\": 5225\n },\n {\n \"tag\": "barbate",\n \"popularity\": 5221\n },\n {\n \"tag\": "knotwort",\n \"popularity\": 5216\n },\n {\n \"tag\": "gypsiferous",\n \"popularity\": 5212\n },\n {\n \"tag\": "tourmalinic",\n \"popularity\": 5208\n },\n {\n \"tag\": "helleboric",\n \"popularity\": 5204\n },\n {\n \"tag\": "pneumograph",\n \"popularity\": 5199\n },\n {\n \"tag\": "Peltigeraceae",\n \"popularity\": 5195\n },\n {\n \"tag\": "busine",\n \"popularity\": 5191\n },\n {\n \"tag\": "Ailuridae",\n \"popularity\": 5187\n },\n {\n \"tag\": "azotate",\n \"popularity\": 5183\n },\n {\n \"tag\": "unlikable",\n \"popularity\": 5178\n },\n {\n \"tag\": "sloyd",\n \"popularity\": 5174\n },\n {\n \"tag\": "biblioclasm",\n \"popularity\": 5170\n },\n {\n \"tag\": "Seres",\n \"popularity\": 5166\n },\n {\n \"tag\": "unaccurateness",\n \"popularity\": 5162\n },\n {\n \"tag\": "scrollwise",\n \"popularity\": 5157\n },\n {\n \"tag\": "flandowser",\n \"popularity\": 5153\n },\n {\n \"tag\": "unblackened",\n \"popularity\": 5149\n },\n {\n \"tag\": "schistosternia",\n \"popularity\": 5145\n },\n {\n \"tag\": "fuse",\n \"popularity\": 5141\n },\n {\n \"tag\": "narthecal",\n \"popularity\": 5137\n },\n {\n \"tag\": "Cueva",\n \"popularity\": 5133\n },\n {\n \"tag\": "appositeness",\n \"popularity\": 5128\n },\n {\n \"tag\": "proindustrial",\n \"popularity\": 5124\n },\n {\n \"tag\": "dermatorrhoea",\n \"popularity\": 5120\n },\n {\n \"tag\": "oxyurous tendential",\n \"popularity\": 5116\n },\n {\n \"tag\": "isopurpurin",\n \"popularity\": 5112\n },\n {\n \"tag\": "impose",\n \"popularity\": 5108\n },\n {\n \"tag\": "wordsmanship",\n \"popularity\": 5104\n },\n {\n \"tag\": "saturator",\n \"popularity\": 5100\n },\n {\n \"tag\": "Nordicity",\n \"popularity\": 5096\n },\n {\n \"tag\": "interaccuse",\n \"popularity\": 5092\n },\n {\n \"tag\": "acridinic",\n \"popularity\": 5087\n },\n {\n \"tag\": "scholion",\n \"popularity\": 5083\n },\n {\n \"tag\": "pseudoaconitine",\n \"popularity\": 5079\n },\n {\n \"tag\": "doctorial",\n \"popularity\": 5075\n },\n {\n \"tag\": "Etchimin",\n \"popularity\": 5071\n },\n {\n \"tag\": "oliviform",\n \"popularity\": 5067\n },\n {\n \"tag\": "Pele",\n \"popularity\": 5063\n },\n {\n \"tag\": "Chiromantis Progymnasium",\n \"popularity\": 5059\n },\n {\n \"tag\": "toxosis",\n \"popularity\": 5055\n },\n {\n \"tag\": "spadilla",\n \"popularity\": 5051\n },\n {\n \"tag\": "Actinopterygii",\n \"popularity\": 5047\n },\n {\n \"tag\": "untiring",\n \"popularity\": 5043\n },\n {\n \"tag\": "butyral",\n \"popularity\": 5039\n },\n {\n \"tag\": "Gymnoderinae",\n \"popularity\": 5035\n },\n {\n \"tag\": "testudo",\n \"popularity\": 5031\n },\n {\n \"tag\": "frigorify",\n \"popularity\": 5027\n },\n {\n \"tag\": "aliency",\n \"popularity\": 5023\n },\n {\n \"tag\": "jargon",\n \"popularity\": 5019\n },\n {\n \"tag\": "counterservice",\n \"popularity\": 5015\n },\n {\n \"tag\": "isostrychnine",\n \"popularity\": 5011\n },\n {\n \"tag\": "tellership",\n \"popularity\": 5007\n },\n {\n \"tag\": "miscegenetic",\n \"popularity\": 5003\n },\n {\n \"tag\": "sorcer",\n \"popularity\": 4999\n },\n {\n \"tag\": "tilewright",\n \"popularity\": 4995\n },\n {\n \"tag\": "cyanoplastid",\n \"popularity\": 4991\n },\n {\n \"tag\": "fluxionally",\n \"popularity\": 4987\n },\n {\n \"tag\": "proudhearted",\n \"popularity\": 4983\n },\n {\n \"tag\": "blithely",\n \"popularity\": 4979\n },\n {\n \"tag\": "jestproof",\n \"popularity\": 4975\n },\n {\n \"tag\": "jestwise",\n \"popularity\": 4971\n },\n {\n \"tag\": "nonassimilable",\n \"popularity\": 4967\n },\n {\n \"tag\": "compurgation",\n \"popularity\": 4964\n },\n {\n \"tag\": "unhate",\n \"popularity\": 4960\n },\n {\n \"tag\": "haplodonty",\n \"popularity\": 4956\n },\n {\n \"tag\": "cardholder",\n \"popularity\": 4952\n },\n {\n \"tag\": "rainlight megohmmeter overstout",\n \"popularity\": 4948\n },\n {\n \"tag\": "itchless",\n \"popularity\": 4944\n },\n {\n \"tag\": "begiggle",\n \"popularity\": 4940\n },\n {\n \"tag\": "chromatosphere",\n \"popularity\": 4936\n },\n {\n \"tag\": "typicality",\n \"popularity\": 4932\n },\n {\n \"tag\": "overgrown",\n \"popularity\": 4928\n },\n {\n \"tag\": "envolume",\n \"popularity\": 4925\n },\n {\n \"tag\": "pachycholia",\n \"popularity\": 4921\n },\n {\n \"tag\": "passageable",\n \"popularity\": 4917\n },\n {\n \"tag\": "pathopoiesis",\n \"popularity\": 4913\n },\n {\n \"tag\": "overbreak",\n \"popularity\": 4909\n },\n {\n \"tag\": "satyric",\n \"popularity\": 4905\n },\n {\n \"tag\": "unaudited",\n \"popularity\": 4901\n },\n {\n \"tag\": "whimble",\n \"popularity\": 4898\n },\n {\n \"tag\": "pressureless",\n \"popularity\": 4894\n },\n {\n \"tag\": "Selene",\n \"popularity\": 4890\n },\n {\n \"tag\": "slithery",\n \"popularity\": 4886\n },\n {\n \"tag\": "nondisfigurement",\n \"popularity\": 4882\n },\n {\n \"tag\": "overdelicious",\n \"popularity\": 4878\n },\n {\n \"tag\": "Perca",\n \"popularity\": 4875\n },\n {\n \"tag\": "Palladium",\n \"popularity\": 4871\n },\n {\n \"tag\": "insagacity",\n \"popularity\": 4867\n },\n {\n \"tag\": "peristoma",\n \"popularity\": 4863\n },\n {\n \"tag\": "uncreativeness",\n \"popularity\": 4859\n },\n {\n \"tag\": "incomparability surfboarding",\n \"popularity\": 4856\n },\n {\n \"tag\": "bacillar",\n \"popularity\": 4852\n },\n {\n \"tag\": "ulcerative",\n \"popularity\": 4848\n },\n {\n \"tag\": "stychomythia",\n \"popularity\": 4844\n },\n {\n \"tag\": "sesma somatics nonentry",\n \"popularity\": 4840\n },\n {\n \"tag\": "unsepulchred",\n \"popularity\": 4837\n },\n {\n \"tag\": "cephalanthium",\n \"popularity\": 4833\n },\n {\n \"tag\": "Asiaticization",\n \"popularity\": 4829\n },\n {\n \"tag\": "killeen",\n \"popularity\": 4825\n },\n {\n \"tag\": "Pseudococcus",\n \"popularity\": 4822\n },\n {\n \"tag\": "untractable",\n \"popularity\": 4818\n },\n {\n \"tag\": "apolegamic",\n \"popularity\": 4814\n },\n {\n \"tag\": "hyperpnea",\n \"popularity\": 4810\n },\n {\n \"tag\": "martyrolatry",\n \"popularity\": 4807\n },\n {\n \"tag\": "Sarmatic",\n \"popularity\": 4803\n },\n {\n \"tag\": "nonsurface",\n \"popularity\": 4799\n },\n {\n \"tag\": "adjoined",\n \"popularity\": 4796\n },\n {\n \"tag\": "vasiform",\n \"popularity\": 4792\n },\n {\n \"tag\": "tastelessness",\n \"popularity\": 4788\n },\n {\n \"tag\": "rumbo",\n \"popularity\": 4784\n },\n {\n \"tag\": "subdititious",\n \"popularity\": 4781\n },\n {\n \"tag\": "reparticipation",\n \"popularity\": 4777\n },\n {\n \"tag\": "Yorkshireism",\n \"popularity\": 4773\n },\n {\n \"tag\": "outcrow",\n \"popularity\": 4770\n },\n {\n \"tag\": "casserole",\n \"popularity\": 4766\n },\n {\n \"tag\": "semideltaic",\n \"popularity\": 4762\n },\n {\n \"tag\": "freemason",\n \"popularity\": 4759\n },\n {\n \"tag\": "catkin",\n \"popularity\": 4755\n },\n {\n \"tag\": "conscient",\n \"popularity\": 4751\n },\n {\n \"tag\": "reliably",\n \"popularity\": 4748\n },\n {\n \"tag\": "Telembi",\n \"popularity\": 4744\n },\n {\n \"tag\": "hide",\n \"popularity\": 4740\n },\n {\n \"tag\": "social",\n \"popularity\": 4737\n },\n {\n \"tag\": "ichneutic",\n \"popularity\": 4733\n },\n {\n \"tag\": "polypotome blouse pentagrammatic",\n \"popularity\": 4729\n },\n {\n \"tag\": "airdrome pesthole",\n \"popularity\": 4726\n },\n {\n \"tag\": "unportended",\n \"popularity\": 4722\n },\n {\n \"tag\": "sheerly",\n \"popularity\": 4719\n },\n {\n \"tag\": "acardiac",\n \"popularity\": 4715\n },\n {\n \"tag\": "fetor",\n \"popularity\": 4711\n },\n {\n \"tag\": "storax",\n \"popularity\": 4708\n },\n {\n \"tag\": "syndactylic",\n \"popularity\": 4704\n },\n {\n \"tag\": "otiatrics",\n \"popularity\": 4700\n },\n {\n \"tag\": "range",\n \"popularity\": 4697\n },\n {\n \"tag\": "branchway",\n \"popularity\": 4693\n },\n {\n \"tag\": "beatific",\n \"popularity\": 4690\n },\n {\n \"tag\": "Rugosa",\n \"popularity\": 4686\n },\n {\n \"tag\": "rafty",\n \"popularity\": 4682\n },\n {\n \"tag\": "gapy",\n \"popularity\": 4679\n },\n {\n \"tag\": "heterocercal",\n \"popularity\": 4675\n },\n {\n \"tag\": "actinopterygious",\n \"popularity\": 4672\n },\n {\n \"tag\": "glauconite",\n \"popularity\": 4668\n },\n {\n \"tag\": "limbless priest",\n \"popularity\": 4665\n },\n {\n \"tag\": "chrysene",\n \"popularity\": 4661\n },\n {\n \"tag\": "isentropic",\n \"popularity\": 4658\n },\n {\n \"tag\": "lairdess",\n \"popularity\": 4654\n },\n {\n \"tag\": "butterhead choliambic",\n \"popularity\": 4650\n },\n {\n \"tag\": "hexaseme",\n \"popularity\": 4647\n },\n {\n \"tag\": "treeify",\n \"popularity\": 4643\n },\n {\n \"tag\": "coronetted fructify",\n \"popularity\": 4640\n },\n {\n \"tag\": "admiralty",\n \"popularity\": 4636\n },\n {\n \"tag\": "Flosculariidae",\n \"popularity\": 4633\n },\n {\n \"tag\": "limaceous",\n \"popularity\": 4629\n },\n {\n \"tag\": "subterconscious",\n \"popularity\": 4626\n },\n {\n \"tag\": "stayless",\n \"popularity\": 4622\n },\n {\n \"tag\": "psha",\n \"popularity\": 4619\n },\n {\n \"tag\": "Mediterraneanize",\n \"popularity\": 4615\n },\n {\n \"tag\": "impenetrably",\n \"popularity\": 4612\n },\n {\n \"tag\": "Myrmeleonidae",\n \"popularity\": 4608\n },\n {\n \"tag\": "germander",\n \"popularity\": 4605\n },\n {\n \"tag\": "Buri",\n \"popularity\": 4601\n },\n {\n \"tag\": "papyrotamia",\n \"popularity\": 4598\n },\n {\n \"tag\": "Toxylon",\n \"popularity\": 4594\n },\n {\n \"tag\": "batatilla",\n \"popularity\": 4591\n },\n {\n \"tag\": "fabella assumer",\n \"popularity\": 4587\n },\n {\n \"tag\": "macromethod",\n \"popularity\": 4584\n },\n {\n \"tag\": "Blechnum",\n \"popularity\": 4580\n },\n {\n \"tag\": "pantography",\n \"popularity\": 4577\n },\n {\n \"tag\": "seminovel",\n \"popularity\": 4574\n },\n {\n \"tag\": "disembarrassment",\n \"popularity\": 4570\n },\n {\n \"tag\": "bushmaking",\n \"popularity\": 4567\n },\n {\n \"tag\": "neurosis",\n \"popularity\": 4563\n },\n {\n \"tag\": "Animalia",\n \"popularity\": 4560\n },\n {\n \"tag\": "Bernice",\n \"popularity\": 4556\n },\n {\n \"tag\": "wisen",\n \"popularity\": 4553\n },\n {\n \"tag\": "subhymenium",\n \"popularity\": 4549\n },\n {\n \"tag\": "esophagomycosis",\n \"popularity\": 4546\n },\n {\n \"tag\": "wireworks",\n \"popularity\": 4543\n },\n {\n \"tag\": "Sabellidae",\n \"popularity\": 4539\n },\n {\n \"tag\": "fustianish",\n \"popularity\": 4536\n },\n {\n \"tag\": "professively",\n \"popularity\": 4532\n },\n {\n \"tag\": "overcorruptly",\n \"popularity\": 4529\n },\n {\n \"tag\": "overcreep",\n \"popularity\": 4526\n },\n {\n \"tag\": "Castilloa",\n \"popularity\": 4522\n },\n {\n \"tag\": "forelady Georgie",\n \"popularity\": 4519\n },\n {\n \"tag\": "outsider",\n \"popularity\": 4515\n },\n {\n \"tag\": "Enukki",\n \"popularity\": 4512\n },\n {\n \"tag\": "gypsy",\n \"popularity\": 4509\n },\n {\n \"tag\": "Passamaquoddy",\n \"popularity\": 4505\n },\n {\n \"tag\": "reposit",\n \"popularity\": 4502\n },\n {\n \"tag\": "overtenderness",\n \"popularity\": 4499\n },\n {\n \"tag\": "keratome",\n \"popularity\": 4495\n },\n {\n \"tag\": "interclavicular hypermonosyllable Susanna",\n \"popularity\": 4492\n },\n {\n \"tag\": "mispropose",\n \"popularity\": 4489\n },\n {\n \"tag\": "Membranipora",\n \"popularity\": 4485\n },\n {\n \"tag\": "lampad",\n \"popularity\": 4482\n },\n {\n \"tag\": "header",\n \"popularity\": 4479\n },\n {\n \"tag\": "triseriate",\n \"popularity\": 4475\n },\n {\n \"tag\": "distrainment",\n \"popularity\": 4472\n },\n {\n \"tag\": "staphyloplastic",\n \"popularity\": 4469\n },\n {\n \"tag\": "outscour",\n \"popularity\": 4465\n },\n {\n \"tag\": "tallowmaking",\n \"popularity\": 4462\n },\n {\n \"tag\": "plugger",\n \"popularity\": 4459\n },\n {\n \"tag\": "fashionize",\n \"popularity\": 4455\n },\n {\n \"tag\": "puzzle",\n \"popularity\": 4452\n },\n {\n \"tag\": "imbrue",\n \"popularity\": 4449\n },\n {\n \"tag\": "osteoblast",\n \"popularity\": 4445\n },\n {\n \"tag\": "Hydrocores",\n \"popularity\": 4442\n },\n {\n \"tag\": "Lutra",\n \"popularity\": 4439\n },\n {\n \"tag\": "upridge scarfy",\n \"popularity\": 4435\n },\n {\n \"tag\": "ancon taffle",\n \"popularity\": 4432\n },\n {\n \"tag\": "impest",\n \"popularity\": 4429\n },\n {\n \"tag\": "uncollatedness",\n \"popularity\": 4426\n },\n {\n \"tag\": "hypersensitize",\n \"popularity\": 4422\n },\n {\n \"tag\": "autographically",\n \"popularity\": 4419\n },\n {\n \"tag\": "louther",\n \"popularity\": 4416\n },\n {\n \"tag\": "Ollie",\n \"popularity\": 4413\n },\n {\n \"tag\": "recompensate",\n \"popularity\": 4409\n },\n {\n \"tag\": "Shan",\n \"popularity\": 4406\n },\n {\n \"tag\": "brachycnemic",\n \"popularity\": 4403\n },\n {\n \"tag\": "Carinatae",\n \"popularity\": 4399\n },\n {\n \"tag\": "geotherm",\n \"popularity\": 4396\n },\n {\n \"tag\": "sawback",\n \"popularity\": 4393\n },\n {\n \"tag\": "Novatianist",\n \"popularity\": 4390\n },\n {\n \"tag\": "reapproach",\n \"popularity\": 4387\n },\n {\n \"tag\": "myelopoietic",\n \"popularity\": 4383\n },\n {\n \"tag\": "cyanin",\n \"popularity\": 4380\n },\n {\n \"tag\": "unsmutted",\n \"popularity\": 4377\n },\n {\n \"tag\": "nonpapist",\n \"popularity\": 4374\n },\n {\n \"tag\": "transbaikalian",\n \"popularity\": 4370\n },\n {\n \"tag\": "connately",\n \"popularity\": 4367\n },\n {\n \"tag\": "tenderize iterance",\n \"popularity\": 4364\n },\n {\n \"tag\": "hydrostatical",\n \"popularity\": 4361\n },\n {\n \"tag\": "unflag",\n \"popularity\": 4358\n },\n {\n \"tag\": "translate",\n \"popularity\": 4354\n },\n {\n \"tag\": "Scorzonera",\n \"popularity\": 4351\n },\n {\n \"tag\": "uncomforted",\n \"popularity\": 4348\n },\n {\n \"tag\": "risser varied",\n \"popularity\": 4345\n },\n {\n \"tag\": "plumbate",\n \"popularity\": 4342\n },\n {\n \"tag\": "Usneaceae",\n \"popularity\": 4338\n },\n {\n \"tag\": "fohat",\n \"popularity\": 4335\n },\n {\n \"tag\": "slagging",\n \"popularity\": 4332\n },\n {\n \"tag\": "superserious",\n \"popularity\": 4329\n },\n {\n \"tag\": "theocracy",\n \"popularity\": 4326\n },\n {\n \"tag\": "valonia",\n \"popularity\": 4323\n },\n {\n \"tag\": "Sapindales",\n \"popularity\": 4319\n },\n {\n \"tag\": "palaeozoologist",\n \"popularity\": 4316\n },\n {\n \"tag\": "yalb",\n \"popularity\": 4313\n },\n {\n \"tag\": "unviewed",\n \"popularity\": 4310\n },\n {\n \"tag\": "polyarteritis",\n \"popularity\": 4307\n },\n {\n \"tag\": "vectorial",\n \"popularity\": 4304\n },\n {\n \"tag\": "skimpingly",\n \"popularity\": 4301\n },\n {\n \"tag\": "athort",\n \"popularity\": 4297\n },\n {\n \"tag\": "tribofluorescence",\n \"popularity\": 4294\n },\n {\n \"tag\": "benzonitrol",\n \"popularity\": 4291\n },\n {\n \"tag\": "swiller subobtuse subjacency",\n \"popularity\": 4288\n },\n {\n \"tag\": "uncompassed",\n \"popularity\": 4285\n },\n {\n \"tag\": "cacochymia",\n \"popularity\": 4282\n },\n {\n \"tag\": "commensalist butadiene",\n \"popularity\": 4279\n },\n {\n \"tag\": "culpable",\n \"popularity\": 4276\n },\n {\n \"tag\": "contributive",\n \"popularity\": 4273\n },\n {\n \"tag\": "attemperately",\n \"popularity\": 4269\n },\n {\n \"tag\": "spelt",\n \"popularity\": 4266\n },\n {\n \"tag\": "exoneration",\n \"popularity\": 4263\n },\n {\n \"tag\": "antivivisectionist",\n \"popularity\": 4260\n },\n {\n \"tag\": "granitification",\n \"popularity\": 4257\n },\n {\n \"tag\": "palladize",\n \"popularity\": 4254\n },\n {\n \"tag\": "marksmanship",\n \"popularity\": 4251\n },\n {\n \"tag\": "bullydom",\n \"popularity\": 4248\n },\n {\n \"tag\": "spirality",\n \"popularity\": 4245\n },\n {\n \"tag\": "caliginous",\n \"popularity\": 4242\n },\n {\n \"tag\": "reportedly",\n \"popularity\": 4239\n },\n {\n \"tag\": "polyad",\n \"popularity\": 4236\n },\n {\n \"tag\": "arthroempyesis",\n \"popularity\": 4233\n },\n {\n \"tag\": "semibay facultatively",\n \"popularity\": 4229\n },\n {\n \"tag\": "metastatically",\n \"popularity\": 4226\n },\n {\n \"tag\": "prophetically",\n \"popularity\": 4223\n },\n {\n \"tag\": "Linguatula elapid",\n \"popularity\": 4220\n },\n {\n \"tag\": "pyknatom",\n \"popularity\": 4217\n },\n {\n \"tag\": "centimeter",\n \"popularity\": 4214\n },\n {\n \"tag\": "mensurate",\n \"popularity\": 4211\n },\n {\n \"tag\": "migraine",\n \"popularity\": 4208\n },\n {\n \"tag\": "pentagamist",\n \"popularity\": 4205\n },\n {\n \"tag\": "querken",\n \"popularity\": 4202\n },\n {\n \"tag\": "ambulance",\n \"popularity\": 4199\n },\n {\n \"tag\": "Stokavian",\n \"popularity\": 4196\n },\n {\n \"tag\": "malvasian",\n \"popularity\": 4193\n },\n {\n \"tag\": "uncouthsome",\n \"popularity\": 4190\n },\n {\n \"tag\": "readable",\n \"popularity\": 4187\n },\n {\n \"tag\": "enlodge",\n \"popularity\": 4184\n },\n {\n \"tag\": "plasterwise Appendiculariidae perspectograph",\n \"popularity\": 4181\n },\n {\n \"tag\": "inkweed",\n \"popularity\": 4178\n },\n {\n \"tag\": "streep",\n \"popularity\": 4175\n },\n {\n \"tag\": "diadelphian cultured",\n \"popularity\": 4172\n },\n {\n \"tag\": "hymenopterous",\n \"popularity\": 4169\n },\n {\n \"tag\": "unexorableness",\n \"popularity\": 4166\n },\n {\n \"tag\": "cascaron",\n \"popularity\": 4163\n },\n {\n \"tag\": "undaintiness",\n \"popularity\": 4160\n },\n {\n \"tag\": "Curtana",\n \"popularity\": 4157\n },\n {\n \"tag\": "scurvied",\n \"popularity\": 4154\n },\n {\n \"tag\": "molluscoidal",\n \"popularity\": 4151\n },\n {\n \"tag\": "yurt",\n \"popularity\": 4148\n },\n {\n \"tag\": "deciduitis",\n \"popularity\": 4145\n },\n {\n \"tag\": "creephole",\n \"popularity\": 4142\n },\n {\n \"tag\": "quatrefeuille",\n \"popularity\": 4139\n },\n {\n \"tag\": "bicapitate adenomatome",\n \"popularity\": 4136\n },\n {\n \"tag\": "damassin",\n \"popularity\": 4134\n },\n {\n \"tag\": "planching",\n \"popularity\": 4131\n },\n {\n \"tag\": "dashedly inferential",\n \"popularity\": 4128\n },\n {\n \"tag\": "lobe",\n \"popularity\": 4125\n },\n {\n \"tag\": "Hyrachyus",\n \"popularity\": 4122\n },\n {\n \"tag\": "knab",\n \"popularity\": 4119\n },\n {\n \"tag\": "discohexaster",\n \"popularity\": 4116\n },\n {\n \"tag\": "malign",\n \"popularity\": 4113\n },\n {\n \"tag\": "pedagoguism",\n \"popularity\": 4110\n },\n {\n \"tag\": "shrubbery",\n \"popularity\": 4107\n },\n {\n \"tag\": "undershrub",\n \"popularity\": 4104\n },\n {\n \"tag\": "bureaucrat",\n \"popularity\": 4101\n },\n {\n \"tag\": "pantaleon",\n \"popularity\": 4098\n },\n {\n \"tag\": "mesoventral",\n \"popularity\": 4096\n }]';
+
+function makeTagCloud(tagInfo)
+{
+ var output = '<div class="tagCloud" style="width: 100%">';
+
+ tagInfo.sort(function(a, b) { if (a.tag < b.tag) { return -1; } else if (a.tag == b.tag) { return 0; } else return 1; });
+
+ for (var i = 0; i < tagInfo.length; i++) {
+ var tag = tagInfo[i].tag;
+
+ var validates = true;
+ for (var j = 0; j < tag.length; j++) {
+ var ch = tag.charCodeAt(j);
+ if (ch < 0x20 || ch >= 0x7f) {
+ validates = false;
+ break;
+ }
+ }
+
+ if (!validates)
+ continue;
+
+ var url = "http://example.com/tag/" + tag.replace(" ", "").toLowerCase();
+ var popularity = tagInfo[i].popularity;
+ var color = 'rgb(' + Math.floor(255 * (popularity - 12) / 20) + ', 0, 255)';
+ output += ' <a href="' + url + '" style="font-size: ' + popularity + 'px; color: ' + color + '">' + tag + '</a> \n';
+ }
+
+ output += '</div>';
+ output.replace(" ", "&nbsp;");
+
+ return output;
+}
+
+window.onload = function(){
+startTest("sunspider-string-tagcloud", 'f05543ff');
+
+var tagInfo;
+
+test("Parse JSON", function(){
+ var log2 = Math.log(2);
+ tagInfo = tagInfoJSON.parseJSON(function(a, b) { if (a == "popularity") { return Math.log(b) / log2; } else {return b; } });
+});
+
+test("Make Tag Cloud", function(){
+ var tagcloud = makeTagCloud(tagInfo);
+});
+
+endTest();
+};
+</script>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/sunspider-string-unpack-code.html b/testing/talos/talos/tests/dromaeo/tests/sunspider-string-unpack-code.html
new file mode 100644
index 0000000000..ec4f797880
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/sunspider-string-unpack-code.html
@@ -0,0 +1,81 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script>
+// This test case unpacks the compressed code for the MochiKit,
+// jQuery, Dojo and Prototype JavaScript libraries.
+
+window.onload = function(){ startTest("sunspider-string-unpack-code", '5e425aed');
+
+test("Unpack Code", function(){
+
+/***
+ MochiKit.MochiKit 1.3.1 : PACKED VERSION
+ THIS FILE IS AUTOMATICALLY GENERATED. If creating patches, please
+ diff against the source tree, not this file.
+
+ See <http://mochikit.com/> for documentation, downloads, license, etc.
+
+ (c) 2005 Bob Ippolito. All rights Reserved.
+***/
+
+
+var decompressedMochiKit = function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('if(H(1q)!="L"){1q.2X("B.J")}if(H(B)=="L"){B={}}if(H(B.J)=="L"){B.J={}}B.J.1Y="1.3.1";B.J.1r="B.J";B.J.2l=G(7V,vR){if(7V===O){7V={}}R(u i=1;i<M.K;i++){u o=M[i];if(H(o)!="L"&&o!==O){R(u k in o){7V[k]=o[k]}}}F 7V};B.J.2l(B.J,{1K:G(){F"["+D.1r+" "+D.1Y+"]"},1l:G(){F D.1K()},4f:G(n){if(M.K===0){n=1}F G(){F n++}},4L:G(mw){u me=M.2U;if(M.K==1){me.1U=mw;F Y me()}},bg:G(vQ){u X=[];u m=B.J;u aw=m.1R(O,M);1M(aw.K){u o=aw.2P();if(o&&H(o)=="3n"&&H(o.K)=="2y"){R(u i=o.K-1;i>=0;i--){aw.e9(o[i])}}N{X.1c(o)}}F X},1R:G(7U,1i,av){if(!av){av=0}if(1i){u l=1i.K;if(H(l)!="2y"){if(H(B.15)!="L"){1i=B.15.2G(1i);l=1i.K}N{14 Y 3p("au 2E an at-as 3W B.15 2E ar")}}if(!7U){7U=[]}R(u i=av;i<l;i++){7U.1c(1i[i])}}F 7U},8Z:G(5g,1i){if(5g===O){5g={}}R(u i=1;i<M.K;i++){u o=M[i];if(H(o)!="L"&&o!==O){R(u k in o){u v=o[k];if(H(5g[k])=="3n"&&H(v)=="3n"){M.2U(5g[k],v)}N{5g[k]=v}}}}F 5g},lO:G(6c,1i){if(6c===O){6c={}}R(u i=1;i<M.K;i++){u o=M[i];R(u k in o){if(!(k in 6c)){6c[k]=o[k]}}}F 6c},lN:G(1i){u fj=[];R(u mv in 1i){fj.1c(mv)}F fj},lM:G(1i){u fh=[];u e;R(u fi in 1i){u v;1f{v=1i[fi]}1e(e){2V}fh.1c([fi,v])}F fh},jq:G(fg,ff,fe){fe.1U=Y B.J.5a(fg.1r+"."+ff);fg[ff]=fe},4i:{7L:G(a){F!!a},vP:G(a){F!a},eE:G(a){F a},2E:G(a){F~a},vO:G(a){F-a},vN:G(a,b){F a+b},vM:G(a,b){F a-b},4u:G(a,b){F a/b},vL:G(a,b){F a%b},vK:G(a,b){F a*b},3W:G(a,b){F a&b},or:G(a,b){F a|b},vJ:G(a,b){F a^b},vI:G(a,b){F a<<b},vH:G(a,b){F a>>b},vG:G(a,b){F a>>>b},eq:G(a,b){F a==b},ne:G(a,b){F a!=b},gt:G(a,b){F a>b},ge:G(a,b){F a>=b},lt:G(a,b){F a<b},le:G(a,b){F a<=b},vF:G(a,b){F B.J.2f(a,b)===0},vE:G(a,b){F B.J.2f(a,b)!==0},vD:G(a,b){F B.J.2f(a,b)==1},vC:G(a,b){F B.J.2f(a,b)!=-1},vB:G(a,b){F B.J.2f(a,b)==-1},vA:G(a,b){F B.J.2f(a,b)!=1},vz:G(a,b){F a&&b},vy:G(a,b){F a||b},vx:G(a,b){F b in a}},24:G(mu){F G(){F D[mu].1w(D,M)}},lL:G(mt){F G(a9){F a9[mt]}},66:G(){u fd={};R(u i=0;i<M.K;i++){u 6b=M[i];fd[6b]=6b}F G(){R(u i=0;i<M.K;i++){if(!(H(M[i])in fd)){F 1m}}F 1h}},lJ:G(){R(u i=0;i<M.K;i++){if(M[i]!==O){F 1m}}F 1h},lK:G(){R(u i=0;i<M.K;i++){u o=M[i];if(!(H(o)=="L"||o===O)){F 1m}}F 1h},lI:G(1i){F!B.J.7e.1w(D,M)},7e:G(1i){R(u i=0;i<M.K;i++){u o=M[i];if(!(o&&o.K)){F 1m}}F 1h},3A:G(){R(u i=0;i<M.K;i++){u o=M[i];u 6b=H(o);if((6b!="3n"&&!(6b=="G"&&H(o.vw)=="G"))||o===O||H(o.K)!="2y"){F 1m}}F 1h},eN:G(){R(u i=0;i<M.K;i++){u o=M[i];if(H(o)!="3n"||o===O||H(o.9P)!="G"){F 1m}}F 1h},lH:G(fn){if(fn===O){F B.J.1R(O,M,1)}u fc=[];R(u i=1;i<M.K;i++){fc.1c(fn(M[i]))}F fc},2r:G(fn,1g){u m=B.J;u 6a=B.15;u fb=m.3A;if(M.K<=2){if(!fb(1g)){if(6a){1g=6a.2G(1g);if(fn===O){F 1g}}N{14 Y 3p("au 2E an at-as 3W B.15 2E ar")}}if(fn===O){F m.1R(O,1g)}u 69=[];R(u i=0;i<1g.K;i++){69.1c(fn(1g[i]))}F 69}N{if(fn===O){fn=7o}u 7T=O;R(i=1;i<M.K;i++){if(!fb(M[i])){if(6a){F 6a.2G(6a.4c.1w(O,M))}N{14 Y 3p("au 2E an at-as 3W B.15 2E ar")}}u l=M[i].K;if(7T===O||7T>l){7T=l}}69=[];R(i=0;i<7T;i++){u fa=[];R(u j=1;j<M.K;j++){fa.1c(M[j][i])}69.1c(fn.1w(D,fa))}F 69}},lG:G(fn){u f9=[];if(fn===O){fn=B.J.4i.7L}R(u i=1;i<M.K;i++){u o=M[i];if(fn(o)){f9.1c(o)}}F f9},47:G(fn,1g,7S){u aq=[];u m=B.J;if(!m.3A(1g)){if(B.15){1g=B.15.2G(1g)}N{14 Y 3p("au 2E an at-as 3W B.15 2E ar")}}if(fn===O){fn=m.4i.7L}if(H(7o.1U.47)=="G"){F 7o.1U.47.cz(1g,fn,7S)}N{if(H(7S)=="L"||7S===O){R(u i=0;i<1g.K;i++){u o=1g[i];if(fn(o)){aq.1c(o)}}}N{R(i=0;i<1g.K;i++){o=1g[i];if(fn.cz(7S,o)){aq.1c(o)}}}}F aq},mq:G(7R){F G(){hd(M.K){3j 0:F 7R();3j 1:F 7R(M[0]);3j 2:F 7R(M[0],M[1]);3j 3:F 7R(M[0],M[1],M[2])}u f8=[];R(u i=0;i<M.K;i++){f8.1c("M["+i+"]")}F dB("(1A("+f8.2b(",")+"))")}},lv:G(mr,ms){u m=B.J;F m.1O.1w(D,m.1R([ms,mr],M,2))},1O:G(3c,4o){if(H(3c)=="1n"){3c=4o[3c]}u ao=3c.f5;u 5f=3c.am;u f6=3c.f7;u m=B.J;if(H(3c)=="G"&&H(3c.1w)=="L"){3c=m.mq(3c)}if(H(ao)!="G"){ao=3c}if(H(4o)!="L"){f6=4o}if(H(5f)=="L"){5f=[]}N{5f=5f.9T()}m.1R(5f,M,2);u 7Q=G(){u ap=M;u me=M.2U;if(me.am.K>0){ap=m.2o(me.am,ap)}u 4o=me.f7;if(!4o){4o=D}F me.f5.1w(4o,ap)};7Q.f7=f6;7Q.f5=ao;7Q.am=5f;F 7Q},lF:G(7P){u mp=B.J.1O;R(u k in 7P){u f4=7P[k];if(H(f4)=="G"){7P[k]=mp(f4,7P)}}},5u:G(mo,mn,ml,mk){B.J.ae.5M(mo,mn,ml,mk)},mj:{"5L":1h,"1n":1h,"2y":1h},2f:G(a,b){if(a==b){F 0}u f3=(H(a)=="L"||a===O);u f2=(H(b)=="L"||b===O);if(f3&&f2){F 0}N{if(f3){F-1}N{if(f2){F 1}}}u m=B.J;u f1=m.mj;if(!(H(a)in f1&&H(b)in f1)){1f{F m.ae.3C(a,b)}1e(e){if(e!=m.4d){14 e}}}if(a<b){F-1}N{if(a>b){F 1}}u f0=m.U;14 Y 3p(f0(a)+" 3W "+f0(b)+" 9v 2E be vv")},eM:G(a,b){F B.J.2f(a.9P(),b.9P())},eL:G(a,b){u mi=B.J.2f;u 7O=a.K;u al=0;if(7O>b.K){al=1;7O=b.K}N{if(7O<b.K){al=-1}}R(u i=0;i<7O;i++){u 4j=mi(a[i],b[i]);if(4j){F 4j}}F al},7M:G(mh,mg,mf,md){B.J.ad.5M(mh,mg,mf,md)},U:G(o){if(H(o)=="L"){F"L"}N{if(o===O){F"O"}}1f{if(H(o.1K)=="G"){F o.1K()}N{if(H(o.U)=="G"&&o.U!=M.2U){F o.U()}}F B.J.ad.3C(o)}1e(e){if(H(o.1r)=="1n"&&(o.1l==cZ.1U.1l||o.1l==vu.1U.1l)){F o.1r}}1f{u eZ=(o+"")}1e(e){F"["+H(o)+"]"}if(H(o)=="G"){o=eZ.23(/^\\s+/,"");u 5n=o.2A("{");if(5n!=-1){o=o.3H(0,5n)+"{...}"}}F eZ},eK:G(o){u m=B.J;F"["+m.2r(m.U,o).2b(", ")+"]"},ac:G(o){F("\\""+o.23(/(["\\\\])/g,"\\\\$1")+"\\"").23(/[\\f]/g,"\\\\f").23(/[\\b]/g,"\\\\b").23(/[\\n]/g,"\\\\n").23(/[\\t]/g,"\\\\t").23(/[\\r]/g,"\\\\r")},eJ:G(o){F o+""},ly:G(mc,mb,ma,m9){B.J.ab.5M(mc,mb,ma,m9)},lx:G(){F dB("("+M[0]+")")},lz:G(o){u 5e=H(o);if(5e=="L"){F"L"}N{if(5e=="2y"||5e=="5L"){F o+""}N{if(o===O){F"O"}}}u m=B.J;u eY=m.ac;if(5e=="1n"){F eY(o)}u me=M.2U;u 3S;if(H(o.m8)=="G"){3S=o.m8();if(o!==3S){F me(3S)}}if(H(o.m7)=="G"){3S=o.m7();if(o!==3S){F me(3S)}}if(5e!="G"&&H(o.K)=="2y"){u X=[];R(u i=0;i<o.K;i++){u 2i=me(o[i]);if(H(2i)!="1n"){2i="L"}X.1c(2i)}F"["+X.2b(", ")+"]"}1f{3S=m.ab.3C(o);F me(3S)}1e(e){if(e!=m.4d){14 e}}if(5e=="G"){F O}X=[];R(u k in o){u ak;if(H(k)=="2y"){ak="\\""+k+"\\""}N{if(H(k)=="1n"){ak=eY(k)}N{2V}}2i=me(o[k]);if(H(2i)!="1n"){2V}X.1c(ak+":"+2i)}F"{"+X.2b(", ")+"}"},lE:G(a,b){F(B.J.2f(a,b)===0)},lD:G(eX,4n){if(eX.K!=4n.K){F 1m}F(B.J.2f(eX,4n)===0)},2o:G(){u eW=[];u m6=B.J.1R;R(u i=0;i<M.K;i++){m6(eW,M[i])}F eW},eR:G(2h){u m=B.J;u eU=m.2f;if(M.K==1){F G(a,b){F eU(a[2h],b[2h])}}u eV=m.1R(O,M);F G(a,b){u aj=0;R(u i=0;(aj===0)&&(i<eV.K);i++){u 2h=eV[i];aj=eU(a[2h],b[2h])}F aj}},lC:G(2h){u m5=B.J.eR.1w(D,M);F G(a,b){F m5(b,a)}},2z:G(m4){u m=B.J;F m.1O.1w(D,m.1R([m4,L],M,1))},67:G(m0,1g){if(1g.K===0){F O}u ai=1g[0];u m3=B.J.2f;R(u i=1;i<1g.K;i++){u o=1g[i];if(m3(o,ai)==m0){ai=o}}F ai},lB:G(){F B.J.67(1,M)},lA:G(){F B.J.67(-1,M)},bi:G(1g,lY,lZ,3B){if(H(3B)=="L"||3B===O){3B=1g.K}R(u i=(lZ||0);i<3B;i++){if(1g[i]===lY){F i}}F-1},eO:G(1g,lW,lX,3B){if(H(3B)=="L"||3B===O){3B=1g.K}u 4j=B.J.2f;R(u i=(lX||0);i<3B;i++){if(4j(1g[i],lW)===0){F i}}F-1},d4:G(1j,lV){u ah=[1j];u lU=B.J.1R;1M(ah.K){u X=lV(ah.2P());if(X){lU(ah,X)}}},3f:G(ag){u 2w=ag.1r;if(H(2w)=="L"){2w=""}N{2w=2w+"."}R(u 1b in ag){u o=ag[1b];if(H(o)=="G"&&H(o.1r)=="L"){1f{o.1r=2w+1b}1e(e){}}}},dw:G(3s,68){if(H(B.S)!="L"&&M.K==1&&(H(3s)=="1n"||(H(3s.3T)!="L"&&3s.3T>0))){u kv=B.S.d5(3s);3s=kv[0];68=kv[1]}N{if(M.K==1){u o=3s;3s=[];68=[];R(u k in o){u v=o[k];if(H(v)!="G"){3s.1c(k);68.1c(v)}}}}u W=[];u lT=28.2a(3s.K,68.K);u eT=B.J.af;R(u i=0;i<lT;i++){v=68[i];if(H(v)!="L"&&v!==O){W.1c(eT(3s[i])+"="+eT(v))}}F W.2b("&")},lw:G(lS,lQ){u 7N=lS.23(/\\+/g,"%20").2R("&");u o={};u 5d;if(H(lR)!="L"){5d=lR}N{5d=vt}if(lQ){R(u i=0;i<7N.K;i++){u 2n=7N[i].2R("=");u 1b=5d(2n[0]);u 4n=o[1b];if(!(4n 2C 7o)){4n=[];o[1b]=4n}4n.1c(5d(2n[1]))}}N{R(i=0;i<7N.K;i++){2n=7N[i].2R("=");o[5d(2n[0])]=5d(2n[1])}}F o}});B.J.4a=G(){D.4m=[]};B.J.4a.1U={5M:G(1b,eS,3y,lP){if(lP){D.4m.e9([1b,eS,3y])}N{D.4m.1c([1b,eS,3y])}},3C:G(){R(u i=0;i<D.4m.K;i++){u 2n=D.4m[i];if(2n[1].1w(D,M)){F 2n[2].1w(D,M)}}14 B.J.4d},vs:G(1b){R(u i=0;i<D.4m.K;i++){u 2n=D.4m[i];if(2n[0]==1b){D.4m.4y(i,1);F 1h}}F 1m}};B.J.1z=["4f","4L","1R","2l","8Z","lO","lN","lM","5a","4i","24","lL","66","lo","ln","lK","lJ","lI","7e","3A","eN","lH","2r","lG","47","1O","lF","4d","4a","5u","2f","7M","U","lE","lD","2o","eR","lC","2z","lm","67","lp","eI","lB","lA","d4","ll","af","dw","lz","ly","lx","lw","eO","bi","bg","lv"];B.J.1W=["3f","ae","ad","ab","eM","eL","eK","ac","eJ"];B.J.2Y=G(lu,eP){if(H(B.eQ)=="L"){B.eQ=(B.3d||(H(1x)=="L"&&H(1q)=="L"))}if(!B.eQ){F}u 1p=eP.2k[":1p"];R(u i=0;i<1p.K;i++){lu[1p[i]]=eP[1p[i]]}};B.J.2d=G(){u m=D;m.vr=m.24;m.vq=m.eO;if(H(ls)!="L"){m.af=G(lr){F ls(lr).23(/\\\'/g,"%27")}}N{m.af=G(lq){F vp(lq).23(/\\+/g,"%2B").23(/\\"/g,"%22").W.23(/\\\'/g,"%27")}}m.5a=G(1b){D.43=1b;D.1b=1b};m.5a.1U=Y 2x();m.2l(m.5a.1U,{U:G(){if(D.43&&D.43!=D.1b){F D.1b+"("+m.U(D.43)+")"}N{F D.1b+"()"}},1l:m.24("U")});m.4d=Y m.5a("B.J.4d");m.lp=m.2z(m.67,1);m.eI=m.2z(m.67,-1);m.lo=m.66("G");m.ln=m.66("L");m.lm=m.2z(m.2l,O);m.ll=m.2z(m.2r,O);m.ae=Y m.4a();m.5u("vo",m.eN,m.eM);m.5u("ej",m.3A,m.eL);m.ad=Y m.4a();m.7M("ej",m.3A,m.eK);m.7M("1n",m.66("1n"),m.ac);m.7M("vn",m.66("2y","5L"),m.eJ);m.ab=Y m.4a();u 1p=m.2o(m.1z,m.1W);m.2k={":3e":m.2o(m.1W),":1p":1p};m.3f(D)};B.J.2d();if(!B.3d){2f=B.J.2f}B.J.2Y(D,B.J);if(H(1q)!="L"){1q.2X("B.15");1q.2M("B.J")}if(H(1x)!="L"){1x.26("B.J",[])}1f{if(H(B.J)=="L"){14""}}1e(e){14"B.15 3F on B.J!"}if(H(B.15)=="L"){B.15={}}B.15.1r="B.15";B.15.1Y="1.3.1";B.J.2l(B.15,{1K:G(){F"["+D.1r+" "+D.1Y+"]"},1l:G(){F D.1K()},9W:G(1b,lk,lj,lh){B.15.9Y.5M(1b,lk,lj,lh)},1Q:G(3R,lg){u I=B.15;if(M.K==2){F I.9Z(G(a){F a!=lg},3R)}if(H(3R.1a)=="G"){F 3R}N{if(H(3R.1Q)=="G"){F 3R.1Q()}}1f{F I.9Y.3C(3R)}1e(e){u m=B.J;if(e==m.4d){e=Y 3p(H(3R)+": "+m.U(3R)+" is 2E vm")}14 e}},eu:G(n){if(!n){n=0}u m=B.J;F{U:G(){F"eu("+n+")"},1l:m.24("U"),1a:m.4f(n)}},et:G(p){u I=B.15;u m=B.J;u 1g=[];u lf=I.1Q(p);F{U:G(){F"et(...)"},1l:m.24("U"),1a:G(){1f{u W=lf.1a();1g.1c(W);F W}1e(e){if(e!=I.25){14 e}if(1g.K===0){D.1a=G(){14 I.25}}N{u i=-1;D.1a=G(){i=(i+1)%1g.K;F 1g[i]}}F D.1a()}}}},7b:G(Q,n){u m=B.J;if(H(n)=="L"){F{U:G(){F"7b("+m.U(Q)+")"},1l:m.24("U"),1a:G(){F Q}}}F{U:G(){F"7b("+m.U(Q)+", "+n+")"},1l:m.24("U"),1a:G(){if(n<=0){14 B.15.25}n-=1;F Q}}},1a:G(ld){F ld.1a()},es:G(p,q){u m=B.J;u 1a=B.15.1a;u lc=m.2r(1Q,M);F{U:G(){F"es(...)"},1l:m.24("U"),1a:G(){F m.2r(1a,lc)}}},a1:G(3b,1V){u m=B.J;1V=B.15.1Q(1V);if(3b===O){3b=m.4i.7L}F{U:G(){F"a1(...)"},1l:m.24("U"),1a:G(){1M(1h){u W=1V.1a();if(3b(W)){F W}}F L}}},a0:G(3b,1V){u m=B.J;1V=B.15.1Q(1V);if(3b===O){3b=m.4i.7L}F{U:G(){F"a0(...)"},1l:m.24("U"),1a:G(){1M(1h){u W=1V.1a();if(!3b(W)){F W}}F L}}},er:G(1V){u I=B.15;u m=B.J;1V=I.1Q(1V);u 5c=0;u 2J=0;u 3a=1;u i=-1;if(M.K==2){2J=M[1]}N{if(M.K==3){5c=M[1];2J=M[2]}N{5c=M[1];2J=M[2];3a=M[3]}}F{U:G(){F"er("+["...",5c,2J,3a].2b(", ")+")"},1l:m.24("U"),1a:G(){u W;1M(i<5c){W=1V.1a();i++}if(5c>=2J){14 I.25}5c+=3a;F W}}},4c:G(aa,p,q){u m=B.J;u I=B.15;u lb=m.2r(I.1Q,m.1R(O,M,1));u 2r=m.2r;u 1a=I.1a;F{U:G(){F"4c(...)"},1l:m.24("U"),1a:G(){F aa.1w(D,2r(1a,lb))}}},ep:G(aa,1V,I){1V=B.15.1Q(1V);u m=B.J;F{U:G(){F"ep(...)"},1l:m.24("U"),1a:G(){F aa.1w(I,1V.1a())}}},55:G(p,q){u I=B.15;u m=B.J;if(M.K==1){F I.1Q(M[0])}u 64=m.2r(I.1Q,M);F{U:G(){F"55(...)"},1l:m.24("U"),1a:G(){1M(64.K>1){1f{F 64[0].1a()}1e(e){if(e!=I.25){14 e}64.2P()}}if(64.K==1){u a9=64.2P();D.1a=m.1O("1a",a9);F D.1a()}14 I.25}}},9Z:G(3b,1V){u I=B.15;1V=I.1Q(1V);F{U:G(){F"9Z(...)"},1l:B.J.24("U"),1a:G(){u W=1V.1a();if(!3b(W)){D.1a=G(){14 I.25};D.1a()}F W}}},eo:G(3b,1V){1V=B.15.1Q(1V);u m=B.J;u 1O=m.1O;F{"U":G(){F"eo(...)"},"1l":m.24("U"),"1a":G(){1M(1h){u W=1V.1a();if(!3b(W)){2K}}D.1a=1O("1a",1V);F W}}},a7:G(63,2u,la){2u.62[63]=-1;u m=B.J;u l9=m.eI;F{U:G(){F"en("+63+", ...)"},1l:m.24("U"),1a:G(){u W;u i=2u.62[63];if(i==2u.29){W=la.1a();2u.a8.1c(W);2u.29+=1;2u.62[63]+=1}N{W=2u.a8[i-2u.2a];2u.62[63]+=1;if(i==2u.2a&&l9(2u.62)!=2u.2a){2u.2a+=1;2u.a8.2P()}}F W}}},en:G(a6,n){u W=[];u 2u={"62":[],"a8":[],"29":-1,"2a":-1};if(M.K==1){n=2}u I=B.15;a6=I.1Q(a6);u a7=I.a7;R(u i=0;i<n;i++){W.1c(a7(i,2u,a6))}F W},2G:G(4l){u m=B.J;if(H(4l.9T)=="G"){F 4l.9T()}N{if(m.3A(4l)){F m.2o(4l)}}u I=B.15;4l=I.1Q(4l);u W=[];1f{1M(1h){W.1c(4l.1a())}}1e(e){if(e!=I.25){14 e}F W}F L},7H:G(fn,7K,l8){u i=0;u x=l8;u I=B.15;7K=I.1Q(7K);if(M.K<3){1f{x=7K.1a()}1e(e){if(e==I.25){e=Y 3p("7H() of vl vk vj no vi 3m")}14 e}i++}1f{1M(1h){x=fn(x,7K.1a())}}1e(e){if(e!=I.25){14 e}}F x},7I:G(){u 4k=0;u 2J=0;u 3a=1;if(M.K==1){2J=M[0]}N{if(M.K==2){4k=M[0];2J=M[1]}N{if(M.K==3){4k=M[0];2J=M[1];3a=M[2]}N{14 Y 3p("7I() vh 1, 2, or 3 M!")}}}if(3a===0){14 Y 3p("7I() 3a 5p 2E be 0")}F{1a:G(){if((3a>0&&4k>=2J)||(3a<0&&4k<=2J)){14 B.15.25}u W=4k;4k+=3a;F W},U:G(){F"7I("+[4k,2J,3a].2b(", ")+")"},1l:B.J.24("U")}},l0:G(a5,l7){u x=l7||0;u I=B.15;a5=I.1Q(a5);1f{1M(1h){x+=a5.1a()}}1e(e){if(e!=I.25){14 e}}F x},em:G(a4){u I=B.15;a4=I.1Q(a4);1f{1M(1h){a4.1a()}}1e(e){if(e!=I.25){14 e}}},9a:G(7J,1A,I){u m=B.J;if(M.K>2){1A=m.1O(1A,I)}if(m.3A(7J)){1f{R(u i=0;i<7J.K;i++){1A(7J[i])}}1e(e){if(e!=B.15.25){14 e}}}N{I=B.15;I.em(I.4c(1A,7J))}},kZ:G(l6,1A){u I=B.15;1f{I.a0(1A,l6).1a();F 1m}1e(e){if(e!=I.25){14 e}F 1h}},kY:G(l5,4j){u W=B.15.2G(l5);if(M.K==1){4j=B.J.2f}W.iz(4j);F W},kX:G(l4){u W=B.15.2G(l4);W.vg();F W},kW:G(l3,1A){u I=B.15;1f{I.a1(1A,l3).1a();F 1h}1e(e){if(e!=I.25){14 e}F 1m}},kV:G(1g,5b){if(B.J.3A(5b)){R(u i=0;i<5b.K;i++){1g.1c(5b[i])}}N{u I=B.15;5b=I.1Q(5b);1f{1M(1h){1g.1c(5b.1a())}}1e(e){if(e!=I.25){14 e}}}F 1g},ek:G(a3,eH){u m=B.J;u I=B.15;if(M.K<2){eH=m.4i.eE}a3=I.1Q(a3);u pk=L;u k=L;u v;G eF(){v=a3.1a();k=eH(v)}G l2(){u 7j=v;v=L;F 7j}u eG=1h;F{U:G(){F"ek(...)"},1a:G(){1M(k==pk){eF();if(eG){eG=1m;2K}}pk=k;F[k,{1a:G(){if(v==L){eF()}if(k!=pk){14 I.25}F l2()}}]}}},kU:G(a2,eD){u m=B.J;u I=B.15;if(M.K<2){eD=m.4i.eE}a2=I.1Q(a2);u ey=[];u eA=1h;u ez;1M(1h){1f{u eB=a2.1a();u 2h=eD(eB)}1e(e){if(e==I.25){2K}14 e}if(eA||2h!=ez){u eC=[];ey.1c([2h,eC])}eC.1c(eB);eA=1m;ez=2h}F ey},9X:G(ex){u i=0;F{U:G(){F"9X(...)"},1l:B.J.24("U"),1a:G(){if(i>=ex.K){14 B.15.25}F ex[i++]}}},eh:G(ew){F(ew&&H(ew.ei)=="G")},9V:G(l1){F{U:G(){F"9V(...)"},1l:B.J.24("U"),1a:G(){u W=l1.ei();if(W===O||W===L){14 B.15.25}F W}}}});B.15.1W=["9Y","9X","eh","9V",];B.15.1z=["25","9W","1Q","eu","et","7b","1a","es","a1","a0","er","4c","ep","55","9Z","eo","en","2G","7H","7I","l0","em","9a","kZ","kY","kX","kW","kV","ek","kU"];B.15.2d=G(){u m=B.J;D.25=Y m.5a("25");D.9Y=Y m.4a();D.9W("ej",m.3A,D.9X);D.9W("ei",D.eh,D.9V);D.2k={":3e":D.1z,":1p":m.2o(D.1z,D.1W)};m.3f(D)};B.15.2d();if(!B.3d){7H=B.15.7H}B.J.2Y(D,B.15);if(H(1q)!="L"){1q.2X("B.1H");1q.2M("B.J")}if(H(1x)!="L"){1x.26("B.J",[])}1f{if(H(B.J)=="L"){14""}}1e(e){14"B.1H 3F on B.J!"}if(H(B.1H)=="L"){B.1H={}}B.1H.1r="B.1H";B.1H.1Y="1.3.1";B.1H.1K=G(){F"["+D.1r+" "+D.1Y+"]"};B.1H.1l=G(){F D.1K()};B.1H.1z=["5C","49","7A","kR","2L","5Z","kG","ch","kE","kC"];B.1H.1W=["ef","e8","e7"];B.1H.49=G(1P,kT,3z){D.1P=1P;D.3N=kT;D.3z=3z;D.vf=Y 3Q()};B.1H.49.1U={U:G(){u m=B.J;F"49("+m.2r(m.U,[D.1P,D.3N,D.3z]).2b(", ")+")"},1l:B.J.24("U")};B.J.2l(B.1H,{ef:G(7F){u I=B.1H;if(H(7F)=="1n"){7F=I.5C[7F]}F G(1t){u 7G=1t.3N;if(H(7G)=="1n"){7G=I.5C[7G]}F 7G>=7F}},e8:G(){u kS=B.1H.49;R(u i=0;i<M.K;i++){if(!(M[i]2C kS)){F 1m}}F 1h},e7:G(a,b){F B.J.2f([a.3N,a.3z],[b.3N,b.3z])},kR:G(1t){cq("1P: "+1t.1P+"\\ve: "+1t.3N+"\\vd: "+1t.3z.2b(" "))}});B.1H.7A=G(7E){D.4f=0;if(H(7E)=="L"||7E===O){7E=-1}D.ec=7E;D.4h=[];D.7C={};D.e5=1m};B.1H.7A.1U={vc:G(){D.4h.4y(0,D.4h.K)},kK:G(1t){if(H(2O)!="L"&&2O.eg&&2O.eg.5Z){2O.eg.5Z(1t)}N{if(H(7h)!="L"&&7h.kQ){7h.kQ(1t)}N{if(H(5X)=="G"){5X(1t)}}}},kL:G(1t){R(u k in D.7C){u 2n=D.7C[k];if(2n.kO!=k||(2n[0]&&!2n[0](1t))){2V}2n[1](1t)}},hE:G(ee,7D,kP){if(H(7D)=="1n"){7D=B.1H.ef(7D)}u ed=[7D,kP];ed.kO=ee;D.7C[ee]=ed},c9:G(kN){gi D.7C[kN]},kH:G(kM,vb){u 1t=Y B.1H.49(D.4f,kM,B.J.1R(O,M,1));D.4h.1c(1t);D.kL(1t);if(D.e5){D.kK(1t.3N+": "+1t.3z.2b(" "))}D.4f+=1;1M(D.ec>=0&&D.4h.K>D.ec){D.4h.2P()}},c8:G(9U){u ea=0;if(!(H(9U)=="L"||9U===O)){ea=28.29(0,D.4h.K-9U)}F D.4h.9T(ea)},kJ:G(7B){if(H(7B)=="L"||7B===O){7B=30}u 9S=D.c8(7B);if(9S.K){u 1g=2r(G(m){F"\\n ["+m.1P+"] "+m.3N+": "+m.3z.2b(" ")},9S);1g.e9("va "+9S.K+" v9:");F 1g.2b("")}F""},v8:G(kI){if(H(B.1I)=="L"){cq(D.kJ())}N{B.1I.bY(kI||1m)}}};B.1H.2d=G(){D.5C={8M:40,8L:50,8K:30,8J:20,8I:10};u m=B.J;m.5u("49",D.e8,D.e7);u 61=m.2z;u e6=D.7A;u 60=e6.1U.kH;m.2l(D.7A.1U,{kF:61(60,"8I"),5Z:61(60,"8J"),dE:61(60,"8M"),kD:61(60,"8L"),kB:61(60,"8K")});u I=D;u 5Y=G(1b){F G(){I.2L[1b].1w(I.2L,M)}};D.5Z=5Y("5Z");D.kG=5Y("dE");D.ch=5Y("kF");D.kE=5Y("kD");D.kC=5Y("kB");D.2L=Y e6();D.2L.e5=1h;D.2k={":3e":D.1z,":1p":m.2o(D.1z,D.1W)};m.3f(D)};if(H(5X)=="L"&&H(2v)!="L"&&2v.kA&&H(kz)!="L"){5X=G(){5X.3G=M;u ev=2v.kA("v7");ev.v6("5X",1m,1h);kz(ev)}}B.1H.2d();B.J.2Y(D,B.1H);if(H(1q)!="L"){1q.2X("B.1D")}if(H(B)=="L"){B={}}if(H(B.1D)=="L"){B.1D={}}B.1D.1r="B.1D";B.1D.1Y="1.3.1";B.1D.1K=G(){F"["+D.1r+" "+D.1Y+"]"};B.1D.1l=G(){F D.1K()};B.1D.ks=G(1y){1y=1y+"";if(H(1y)!="1n"||1y.K===0){F O}u 7z=1y.2R("-");if(7z.K===0){F O}F Y 3Q(7z[0],7z[1]-1,7z[2])};B.1D.ky=/(\\d{4,})(?:-(\\d{1,2})(?:-(\\d{1,2})(?:[T ](\\d{1,2}):(\\d{1,2})(?::(\\d{1,2})(?:\\.(\\d+))?)?(?:(Z)|([+-])(\\d{1,2})(?::(\\d{1,2}))?)?)?)?)?/;B.1D.kr=G(1y){1y=1y+"";if(H(1y)!="1n"||1y.K===0){F O}u X=1y.3C(B.1D.ky);if(H(X)=="L"||X===O){F O}u 5W,7y,7x,9R,2a,9Q,7w;5W=3w(X[1],10);if(H(X[2])=="L"||X[2]===""){F Y 3Q(5W)}7y=3w(X[2],10)-1;7x=3w(X[3],10);if(H(X[4])=="L"||X[4]===""){F Y 3Q(5W,7y,7x)}9R=3w(X[4],10);2a=3w(X[5],10);9Q=(H(X[6])!="L"&&X[6]!=="")?3w(X[6],10):0;if(H(X[7])!="L"&&X[7]!==""){7w=28.ha(c5*4M("0."+X[7]))}N{7w=0}if((H(X[8])=="L"||X[8]==="")&&(H(X[9])=="L"||X[9]==="")){F Y 3Q(5W,7y,7x,9R,2a,9Q,7w)}u 58;if(H(X[9])!="L"&&X[9]!==""){58=3w(X[10],10)*v5;if(H(X[11])!="L"&&X[11]!==""){58+=3w(X[11],10)*kw}if(X[9]=="-"){58=-58}}N{58=0}F Y 3Q(3Q.v4(5W,7y,7x,9R,2a,9Q,7w)-58)};B.1D.dY=G(2g,kx){if(H(2g)=="L"||2g===O){F O}u hh=2g.v3();u mm=2g.v2();u ss=2g.v1();u 1g=[((kx&&(hh<10))?"0"+hh:hh),((mm<10)?"0"+mm:mm),((ss<10)?"0"+ss:ss)];F 1g.2b(":")};B.1D.kq=G(2g,7v){if(H(2g)=="L"||2g===O){F O}u ku=7v?"T":" ";u kt=7v?"Z":"";if(7v){2g=Y 3Q(2g.9P()+(2g.v0()*kw))}F B.1D.dX(2g)+ku+B.1D.dY(2g,7v)+kt};B.1D.dX=G(2g){if(H(2g)=="L"||2g===O){F O}u e4=B.1D.e3;F[2g.dZ(),e4(2g.e1()+1),e4(2g.e0())].2b("-")};B.1D.kp=G(d){d=d+"";if(H(d)!="1n"||d.K===0){F O}u a=d.2R("/");F Y 3Q(a[2],a[0]-1,a[1])};B.1D.e3=G(n){F(n>9)?n:"0"+n};B.1D.ko=G(d){if(H(d)=="L"||d===O){F O}u e2=B.1D.e3;F[e2(d.e1()+1),e2(d.e0()),d.dZ()].2b("/")};B.1D.kn=G(d){if(H(d)=="L"||d===O){F O}F[d.e1()+1,d.e0(),d.dZ()].2b("/")};B.1D.1z=["ks","kr","dY","kq","dX","kp","ko","kn"];B.1D.1W=[];B.1D.2k={":3e":B.1D.1z,":1p":B.1D.1z};B.1D.2d=G(){u 2w=D.1r+".";R(u k in D){u o=D[k];if(H(o)=="G"&&H(o.1r)=="L"){1f{o.1r=2w+k}1e(e){}}}};B.1D.2d();if(H(B.J)!="L"){B.J.2Y(D,B.1D)}N{(G(km,dW){if((H(1x)=="L"&&H(1q)=="L")||(H(B.3d)=="5L"&&B.3d)){u 1p=dW.2k[":1p"];R(u i=0;i<1p.K;i++){km[1p[i]]=dW[1p[i]]}}})(D,B.1D)}if(H(1q)!="L"){1q.2X("B.1s")}if(H(B)=="L"){B={}}if(H(B.1s)=="L"){B.1s={}}B.1s.1r="B.1s";B.1s.1Y="1.3.1";B.1s.1K=G(){F"["+D.1r+" "+D.1Y+"]"};B.1s.1l=G(){F D.1K()};B.1s.ke=G(kl,kk,kj,ki,kh,dV,kg,9N,kf){F G(1P){1P=4M(1P);if(H(1P)=="L"||1P===O||k8(1P)){F kl}u 9L=kk;u 9K=kj;if(1P<0){1P=-1P}N{9L=9L.23(/-/,"")}u me=M.2U;u 9M=B.1s.dJ(ki);if(kh){1P=1P*3k;9K=9M.9y+9K}1P=B.1s.dK(1P,dV);u 9O=1P.2R(/\\./);u 3r=9O[0];u 3P=(9O.K==1)?"":9O[1];u X="";1M(3r.K<kg){3r="0"+3r}if(9N){1M(3r.K>9N){u i=3r.K-9N;X=9M.9A+3r.2W(i,3r.K)+X;3r=3r.2W(0,i)}}X=3r+X;if(dV>0){1M(3P.K<kf){3P=3P+"0"}X=X+9M.9z+3P}F 9L+X+9K}};B.1s.k5=G(9J,9H,9G){if(H(9H)=="L"){9H=""}u 3q=9J.3C(/((?:[0#]+,)?[0#]+)(?:\\.([0#]+))?(%)?/);if(!3q){14 3p("uZ uY")}u 7u=9J.3H(0,3q.c6);u kd=9J.3H(3q.c6+3q[0].K);if(7u.uX(/-/)==-1){7u=7u+"-"}u 9I=3q[1];u 3P=(H(3q[2])=="1n"&&3q[2]!="")?3q[2]:"";u kc=(H(3q[3])=="1n"&&3q[3]!="");u dU=9I.2R(/,/);u 9F;if(H(9G)=="L"){9G="dG"}if(dU.K==1){9F=O}N{9F=dU[1].K}u ka=9I.K-9I.23(/0/g,"").K;u k9=3P.K-3P.23(/0/g,"").K;u kb=3P.K;u W=B.1s.ke(9H,7u,kd,9G,kc,kb,ka,9F,k9);u m=B.J;if(m){u fn=M.2U;u 3G=m.2o(M);W.U=G(){F[I.1r,"(",2r(m.U,3G).2b(", "),")"].2b("")}}F W};B.1s.dJ=G(4g){if(H(4g)=="L"||4g===O){4g="dG"}if(H(4g)=="1n"){u W=B.1s.5V[4g];if(H(W)=="1n"){W=M.2U(W);B.1s.5V[4g]=W}F W}N{F 4g}};B.1s.k4=G(dT,9E){if(9E){u X=dT/9E;if(!k8(X)){F B.1s.9B(dT/9E)}}F"0"};B.1s.9B=G(dS){u dR=(dS<0?"-":"");u s=28.8B(28.uW(dS)*3k).1l();if(s=="0"){F s}if(s.K<3){1M(s.3Z(s.K-1)=="0"){s=s.2W(0,s.K-1)}F dR+"0."+s}u 5E=dR+s.2W(0,s.K-2);u 7t=s.2W(s.K-2,s.K);if(7t=="uV"){F 5E}N{if(7t.3Z(1)=="0"){F 5E+"."+7t.3Z(0)}N{F 5E+"."+7t}}};B.1s.dI=G(1y,dQ){1y=1y+"";if(H(1y)!="1n"){F O}if(!dQ){F 1y.23(/^\\s+/,"")}N{F 1y.23(Y 8V("^["+dQ+"]+"),"")}};B.1s.dH=G(1y,dP){1y=1y+"";if(H(1y)!="1n"){F O}if(!dP){F 1y.23(/\\s+$/,"")}N{F 1y.23(Y 8V("["+dP+"]+$"),"")}};B.1s.k2=G(1y,dO){u I=B.1s;F I.dH(I.dI(1y,dO),dO)};B.1s.dL=G(9D,9C){9D=28.8B(9D*28.dN(10,9C));u X=(9D*28.dN(10,-9C)).6I(9C);if(X.3Z(0)=="."){X="0"+X}F X};B.1s.dK=G(k7,dM){F B.1s.dL(k7+0.5*28.dN(10,-dM),dM)};B.1s.k3=G(k6){F B.1s.9B(3k*k6)+"%"};B.1s.1z=["dL","dK","k5","dJ","k4","9B","k3","dI","dH","k2"];B.1s.5V={k1:{9A:",",9z:".",9y:"%"},uU:{9A:".",9z:",",9y:"%"},uT:{9A:" ",9z:",",9y:"%"},"dG":"k1"};B.1s.1W=[];B.1s.2k={":1p":B.1s.1z,":3e":B.1s.1z};B.1s.2d=G(){u 2w=D.1r+".";u k,v,o;R(k in D.5V){o=D.5V[k];if(H(o)=="3n"){o.U=G(){F D.1r};o.1r=2w+"5V."+k}}R(k in D){o=D[k];if(H(o)=="G"&&H(o.1r)=="L"){1f{o.1r=2w+k}1e(e){}}}};B.1s.2d();if(H(B.J)!="L"){B.J.2Y(D,B.1s)}N{(G(k0,dF){if((H(1x)=="L"&&H(1q)=="L")||(H(B.3d)=="5L"&&B.3d)){u 1p=dF.2k[":1p"];R(u i=0;i<1p.K;i++){k0[1p[i]]=dF[1p[i]]}}})(D,B.1s)}if(H(1q)!="L"){1q.2X("B.1k");1q.2M("B.J")}if(H(1x)!="L"){1x.26("B.J",[])}1f{if(H(B.J)=="L"){14""}}1e(e){14"B.1k 3F on B.J!"}if(H(B.1k)=="L"){B.1k={}}B.1k.1r="B.1k";B.1k.1Y="1.3.1";B.1k.1K=G(){F"["+D.1r+" "+D.1Y+"]"};B.1k.1l=G(){F D.1K()};B.1k.2t=G(jZ){D.55=[];D.id=D.7n();D.2H=-1;D.54=0;D.53=[O,O];D.7m=jZ;D.7l=1m;D.7r=1m};B.1k.2t.1U={U:G(){u 7s;if(D.2H==-1){7s="uS"}N{if(D.2H===0){7s="uR"}N{7s="dE"}}F"2t("+D.id+", "+7s+")"},1l:B.J.24("U"),7n:B.J.4f(),jY:G(){u I=B.1k;if(D.2H==-1){if(D.7m){D.7m(D)}N{D.7l=1h}if(D.2H==-1){D.52(Y I.di(D))}}N{if((D.2H===0)&&(D.53[0]2C I.2t)){D.53[0].jY()}}},jQ:G(){D.54++},jX:G(){D.54--;if((D.54===0)&&(D.2H>=0)){D.9u()}},jR:G(X){D.9x(X);D.jX()},9x:G(X){D.2H=((X 2C 2x)?1:0);D.53[D.2H]=X;D.9u()},dD:G(){if(D.2H!=-1){if(!D.7l){14 Y B.1k.dj(D)}D.7l=1m;F}},3o:G(X){D.dD();if(X 2C B.1k.2t){14 Y 2x("2t jW 9v aB be 7r if jV jU jT jS of a 3o")}D.9x(X)},52:G(X){D.dD();u I=B.1k;if(X 2C I.2t){14 Y 2x("2t jW 9v aB be 7r if jV jU jT jS of a 3o")}if(!(X 2C 2x)){X=Y I.9p(X)}D.9x(X)},jP:G(fn){if(M.K>1){fn=B.J.2z.1w(O,M)}F D.9w(fn,fn)},5Q:G(fn){if(M.K>1){fn=B.J.2z.1w(O,M)}F D.9w(fn,O)},jA:G(fn){if(M.K>1){fn=B.J.2z.1w(O,M)}F D.9w(O,fn)},9w:G(cb,eb){if(D.7r){14 Y 2x("uQ uP 9v 2E be re-uO")}D.55.1c([cb,eb]);if(D.2H>=0){D.9u()}F D},9u:G(){u dC=D.55;u 56=D.2H;u X=D.53[56];u I=D;u cb=O;1M(dC.K>0&&D.54===0){u 2n=dC.2P();u f=2n[56];if(f===O){2V}1f{X=f(X);56=((X 2C 2x)?1:0);if(X 2C B.1k.2t){cb=G(X){I.jR(X)};D.jQ()}}1e(3O){56=1;if(!(3O 2C 2x)){3O=Y B.1k.9p(3O)}X=3O}}D.2H=56;D.53[56]=X;if(cb&&D.54){X.jP(cb);X.7r=1h}}};B.J.2l(B.1k,{dk:G(){F dB("("+M[0].jN+")")},dp:G(uN){u d=Y B.1k.2t();d.3o.1w(d,M);F d},9q:G(uM){u d=Y B.1k.2t();d.52.1w(d,M);F d},do:G(){u I=M.2U;if(!I.7q){u dy=[G(){F Y 7q()},G(){F Y dA("jO.dz")},G(){F Y dA("uL.dz")},G(){F Y dA("jO.dz.4.0")},G(){14 Y B.1k.dh("uK uJ 2E uI 7q")}];R(u i=0;i<dy.K;i++){u 1A=dy[i];1f{I.7q=1A;F 1A()}1e(e){}}}F I.7q()},dx:G(){},jK:G(d){if(D.uH==4){1f{D.5T=O}1e(e){1f{D.5T=B.1k.dx}1e(e){}}u 5U=O;1f{5U=D.jm;if(!5U&&B.J.7e(D.jN)){5U=jM}}1e(e){}if(5U==hQ||5U==jM){d.3o(D)}N{u 3O=Y B.1k.dg(D,"uG uF");if(3O.2y){d.52(3O)}N{d.52(3O)}}}},jL:G(2s){1f{2s.5T=O}1e(e){1f{2s.5T=B.1k.dx}1e(e){}}2s.uE()},dl:G(2s,7p){if(H(7p)=="L"||7p===O){7p=""}u m=B.J;u I=B.1k;u d=Y I.2t(m.2z(I.jL,2s));1f{2s.5T=m.1O(I.jK,2s,d);2s.uD(7p)}1e(e){1f{2s.5T=O}1e(uC){}d.52(e)}F d},dn:G(5F){u I=B.1k;u 2s=I.do();if(M.K>1){u m=B.J;u qs=m.dw.1w(O,m.1R(O,M,1));if(qs){5F+="?"+qs}}2s.cp("uB",5F,1h);F I.dl(2s)},jv:G(5F){u I=B.1k;u d=I.dn.1w(I,M);d=d.5Q(I.dk);F d},dm:G(jJ,dv){u d=Y B.1k.2t();u m=B.J;if(H(dv)!="L"){d.5Q(G(){F dv})}u jI=uA(m.1O("3o",d),28.8B(jJ*c5));d.7m=G(){1f{uz(jI)}1e(e){}};F d},ju:G(jH,1A){u m=B.J;u jG=m.2z.1w(m,m.1R(O,M,1));F B.1k.dm(jH).5Q(G(X){F jG()})}});B.1k.5O=G(){D.5S=[];D.4e=1m;D.id=D.7n()};B.1k.5O.1U={bX:B.1k.5O,uy:G(){d=Y B.1k.2t();if(D.4e){D.5S.1c(d)}N{D.4e=1h;d.3o(D)}F d},jF:G(){if(!D.4e){14 3p("ux to jF an jE 5O")}D.4e=1m;if(D.5S.K>0){D.4e=1h;D.5S.2P().3o(D)}},7n:B.J.4f(),U:G(){u 9t;if(D.4e){9t="4e, "+D.5S.K+" 5S"}N{9t="jE"}F"5O("+D.id+", "+9t+")"},1l:B.J.24("U")};B.1k.7i=G(2G,du,jC,jB,jD){D.2G=2G;D.9r=Y 7o(D.2G.K);D.55=[];D.id=D.7n();D.2H=-1;D.54=0;D.53=[O,O];D.7m=jD;D.7l=1m;if(D.2G.K===0&&!du){D.3o(D.9r)}D.dr=0;D.jz=du;D.jy=jC;D.jx=jB;u 9s=0;B.J.2r(B.J.1O(G(d){d.5Q(B.J.1O(D.dt,D),9s,1h);d.jA(B.J.1O(D.dt,D),9s,1m);9s+=1},D),D.2G)};B.J.2l(B.1k.7i.1U,B.1k.2t.1U);B.J.2l(B.1k.7i.1U,{dt:G(ds,7k,5R){D.9r[ds]=[7k,5R];D.dr+=1;if(D.2H!==0){if(7k&&D.jz){D.3o([ds,5R])}N{if(!7k&&D.jy){D.52(5R)}N{if(D.dr==D.2G.K){D.3o(D.9r)}}}}if(!7k&&D.jx){5R=O}F 5R}});B.1k.jt=G(jw){u d=Y B.1k.7i(jw,1m,1h,1m);d.5Q(G(dq){u 7j=[];R(u i=0;i<dq.K;i++){7j.1c(dq[i][1])}F 7j});F d};B.1k.jr=G(1A){u I=B.1k;u 5P;1f{u r=1A.1w(O,B.J.1R([],M,1));if(r 2C I.2t){5P=r}N{if(r 2C 2x){5P=I.9q(r)}N{5P=I.dp(r)}}}1e(e){5P=I.9q(e)}F 5P};B.1k.1z=["dj","di","dh","9p","dg","2t","dp","9q","do","dn","jv","dm","ju","dl","5O","7i","jt","jr"];B.1k.1W=["dk"];B.1k.2d=G(){u m=B.J;u ne=m.2z(m.jq,D);ne("dj",G(jp){D.jo=jp});ne("di",G(jn){D.jo=jn});ne("dh",G(1t){D.43=1t});ne("9p",G(1t){D.43=1t});ne("dg",G(2s,1t){D.2s=2s;D.43=1t;1f{D.2y=2s.jm}1e(e){}});D.2k={":3e":D.1z,":1p":m.2o(D.1z,D.1W)};m.3f(D)};B.1k.2d();B.J.2Y(D,B.1k);if(H(1q)!="L"){1q.2X("B.S");1q.2M("B.15")}if(H(1x)!="L"){1x.26("B.15",[])}1f{if(H(B.15)=="L"){14""}}1e(e){14"B.S 3F on B.15!"}if(H(B.S)=="L"){B.S={}}B.S.1r="B.S";B.S.1Y="1.3.1";B.S.1K=G(){F"["+D.1r+" "+D.1Y+"]"};B.S.1l=G(){F D.1K()};B.S.1z=["d5","cr","b9","95","94","j3","9k","cX","cw","iT","iV","4X","9j","iQ","hS","cs","ia","i9","i8","i7","i6","i5","i4","hV","i3","i2","i1","cu","hW","ct","i0","hZ","hY","hX","P","io","il","ik","ij","cm","ih","ii","ig","ie","ic","cv","8d","A","6m","ib","1E","$","4q","aH","cO","cN","iM","5G","iK","9d","9e","iH","iD","9c","iB","cG","97","hU","hT","iw","jh","jb","j6","j5","jk","jl"];B.S.1W=["9b"];B.S.5N=G(w,h){D.w=w;D.h=h};B.S.5N.1U.U=G(){u U=B.J.U;F"{w: "+U(D.w)+", h: "+U(D.h)+"}"};B.S.5t=G(x,y){D.x=x;D.y=y};B.S.5t.1U.U=G(){u U=B.J.U;F"{x: "+U(D.x)+", y: "+U(D.y)+"}"};B.S.5t.1U.1l=G(){F D.U()};B.J.2l(B.S,{jl:G(Q,o){Q=B.S.1E(Q);B.S.4X(Q,{"1T":{"9o":o,"-hL-9o":o,"-uw-9o":o,"47":" uv(9o="+(o*3k)+")"}})},jk:G(){u d=Y B.S.5N();u w=B.S.3X;u b=B.S.1Z.5s;if(w.jj){d.w=w.jj;d.h=w.uu}N{if(b.dd.9n){d.w=b.dd.9n;d.h=b.dd.ji}N{if(b&&b.9n){d.w=b.9n;d.h=b.ji}}}F d},jh:G(Q){u I=B.S;if(H(Q.w)=="2y"||H(Q.h)=="2y"){F Y I.5N(Q.w||0,Q.h||0)}Q=I.1E(Q);if(!Q){F L}if(I.4q(Q,"3u")!="98"){F Y I.5N(Q.jg||0,Q.ci||0)}u s=Q.1T;u je=s.dc;u jf=s.6P;s.dc="fR";s.6P="j8";s.3u="";u jd=Q.jg;u jc=Q.ci;s.3u="98";s.6P=jf;s.dc=je;F Y I.5N(jd,jc)},jb:G(Q,4Z){u I=B.S;Q=I.1E(Q);if(!Q){F L}u c=Y I.5t(0,0);if(Q.x&&Q.y){c.x+=Q.x||0;c.y+=Q.y||0;F c}N{if(Q.3t===O||I.4q(Q,"3u")=="98"){F L}}u 51=O;u 2j=O;u d=B.S.1Z;u de=d.7Z;u b=d.5s;if(Q.ja){51=Q.ja();c.x+=51.2I+(de.6y||b.6y)-(de.8q||b.8q);c.y+=51.3D+(de.4C||b.4C)-(de.8p||b.8p)}N{if(d.j9){51=d.j9(Q);c.x+=51.x;c.y+=51.y}N{if(Q.8g){c.x+=Q.db;c.y+=Q.da;2j=Q.8g;if(2j!=Q){1M(2j){c.x+=2j.db;c.y+=2j.da;2j=2j.8g}}u ua=ut.us.8G();if((H(7h)!="L"&&4M(7h.ur())<9)||(ua.2A("uq")!=-1&&I.4q(Q,"6P")=="j8")){c.x-=b.db;c.y-=b.da}}}}if(H(4Z)!="L"){4Z=M.2U(4Z);if(4Z){c.x-=(4Z.x||0);c.y-=(4Z.y||0)}}if(Q.3t){2j=Q.3t}N{2j=O}1M(2j&&2j.j7!="uo"&&2j.j7!="co"){c.x-=2j.6y;c.y-=2j.4C;if(2j.3t){2j=2j.3t}N{2j=O}}F c},j6:G(Q,d9,7g){Q=B.S.1E(Q);if(H(7g)=="L"){7g="px"}B.S.4X(Q,{"1T":{"5A":d9.w+7g,"3V":d9.h+7g}})},j5:G(Q,d8,7f){Q=B.S.1E(Q);if(H(7f)=="L"){7f="px"}B.S.4X(Q,{"1T":{"2I":d8.x+7f,"3D":d8.y+7f}})},cr:G(){F B.S.3X},b9:G(){F B.S.1Z},95:G(2m,1A){u I=B.S;u d6=I.1Z;u d7=I.un;u W;1f{I.3X=2m;I.1Z=2m.2v;W=1A()}1e(e){I.3X=d7;I.1Z=d6;14 e}I.3X=d7;I.1Z=d6;F W},d5:G(Q){u 7d=[];u 7c=[];u m=B.J;u I=B.S;if(H(Q)=="L"||Q===O){Q=I.1Z}N{Q=I.1E(Q)}m.d4(Q,G(Q){u 1b=Q.1b;if(m.7e(1b)){u 4Y=Q.cD;if(4Y=="cv"&&(Q.1J=="um"||Q.1J=="uk")&&!Q.ip){F O}if(4Y=="ct"){if(Q.j4>=0){u 9m=Q.1S[Q.j4];7d.1c(1b);7c.1c((9m.3m)?9m.3m:9m.7X);F O}7d.1c(1b);7c.1c("");F O}if(4Y=="cu"||4Y=="P"||4Y=="8d"||4Y=="6m"){F Q.5h}7d.1c(1b);7c.1c(Q.3m||"");F O}F Q.5h});F[7d,7c]},94:G(1N,1A){u I=B.S;u d3=I.1Z;u W;1f{I.1Z=1N;W=1A()}1e(e){I.1Z=d3;14 e}I.1Z=d3;F W},j3:G(1b,j2,3y,j1){B.S.9b.5M(1b,j2,3y,j1)},9k:G(1j,7a){u im=B.15;u I=B.S;u 1Q=im.1Q;u iY=im.7b;u 4c=im.4c;u iX=I.9b;u iZ=I.9k;u iW=B.J.4d;1M(1h){if(H(1j)=="L"||1j===O){F O}if(H(1j.3T)!="L"&&1j.3T>0){F 1j}if(H(1j)=="2y"||H(1j)=="5L"){1j=1j.1l()}if(H(1j)=="1n"){F I.1Z.4S(1j)}if(H(1j.j0)=="G"){1j=1j.j0(7a);2V}if(H(1j)=="G"){1j=1j(7a);2V}u 9l=O;1f{9l=1Q(1j)}1e(e){}if(9l){F 4c(iZ,9l,iY(7a))}1f{1j=iX.3C(1j,7a);2V}1e(e){if(e!=iW){14 e}}F I.1Z.4S(1j.1l())}F L},iV:G(1j,79,iU){u o={};o[79]=iU;1f{F B.S.4X(1j,o)}1e(e){}F O},iT:G(1j,79){u I=B.S;u d2=I.4U.99[79];1j=I.1E(1j);1f{if(d2){F 1j[d2]}F 1j.fm(79)}1e(e){}F O},4X:G(1j,5K){u Q=1j;u I=B.S;if(H(1j)=="1n"){Q=I.1E(1j)}if(5K){u d0=B.J.8Z;if(I.4U.6X){R(u k in 5K){u v=5K[k];if(H(v)=="3n"&&H(Q[k])=="3n"){d0(Q[k],v)}N{if(k.2W(0,2)=="on"){if(H(v)=="1n"){v=Y cZ(v)}Q[k]=v}N{Q.4p(k,v)}}}}N{u iS=I.4U.99;R(k in 5K){v=5K[k];u d1=iS[k];if(k=="1T"&&H(v)=="1n"){Q.1T.3x=v}N{if(H(d1)=="1n"){Q[d1]=v}N{if(H(Q[k])=="3n"&&H(v)=="3n"){d0(Q[k],v)}N{if(k.2W(0,2)=="on"){if(H(v)=="1n"){v=Y cZ(v)}Q[k]=v}N{Q.4p(k,v)}}}}}}}F Q},9j:G(1j){u Q=1j;u I=B.S;if(H(1j)=="1n"){Q=I.1E(1j)}u 78=[I.9k(B.J.1R(O,M,1),Q)];u iR=B.J.2o;1M(78.K){u n=78.2P();if(H(n)=="L"||n===O){}N{if(H(n.3T)=="2y"){Q.2c(n)}N{78=iR(n,78)}}}F Q},iQ:G(1j){u Q=1j;u I=B.S;if(H(1j)=="1n"){Q=I.1E(1j);M[0]=Q}u cY;1M((cY=Q.6n)){Q.6S(cY)}if(M.K<2){F Q}N{F I.9j.1w(D,M)}},cX:G(1b,4b){u Q;u I=B.S;u m=B.J;if(H(4b)=="1n"||H(4b)=="2y"){u 3G=m.1R([1b,O],M,1);F M.2U.1w(D,3G)}if(H(1b)=="1n"){if(4b&&"1b"in 4b&&!I.4U.6X){1b=("<"+1b+" 1b=\\""+I.9c(4b.1b)+"\\">")}Q=I.1Z.2S(1b)}N{Q=1b}if(4b){I.4X(Q,4b)}if(M.K<=2){F Q}N{u 3G=m.1R([Q],M,2);F I.9j.1w(D,3G)}},cw:G(){u m=B.J;F m.2z.1w(D,m.1R([B.S.cX],M))},cs:G(5J,1d){u I=B.S;5J=I.1E(5J);u cW=5J.3t;if(1d){1d=I.1E(1d);cW.uj(1d,5J)}N{cW.6S(5J)}F 1d},1E:G(id){u I=B.S;if(M.K==1){F((H(id)=="1n")?I.1Z.hN(id):id)}N{F B.J.2r(I.1E,M)}},4q:G(iP,cV,cU){if(M.K==2){cU=cV}u I=B.S;u el=I.1E(iP);u 77=I.1Z;if(!el||el==77){F L}if(el.iO){F el.iO[cV]}if(H(77.5k)=="L"){F L}if(77.5k===O){F L}u 9i=77.5k.g4(el,O);if(H(9i)=="L"||9i===O){F L}F 9i.6q(cU)},aH:G(76,9g,4W){u I=B.S;if(H(76)=="L"||76===O){76="*"}if(H(4W)=="L"||4W===O){4W=I.1Z}4W=I.1E(4W);u 9h=(4W.fr(76)||I.1Z.1p);if(H(9g)=="L"||9g===O){F B.J.1R(O,9h)}u cR=[];R(u i=0;i<9h.K;i++){u cS=9h[i];u cT=cS.3M.2R(" ");R(u j=0;j<cT.K;j++){if(cT[j]==9g){cR.1c(cS);2K}}}F cR},iN:G(5I,9f){u W=G(){u cQ=M.2U.5H;R(u i=0;i<cQ.K;i++){if(cQ[i].1w(D,M)===1m){2K}}if(9f){1f{D[5I]=O}1e(e){}}};W.5H=[];F W},cO:G(cP,5I,1A,9f){u I=B.S;u 4V=cP[5I];u 75=4V;if(!(H(4V)=="G"&&H(4V.5H)=="3n"&&4V.5H!==O)){75=I.iN(5I,9f);if(H(4V)=="G"){75.5H.1c(4V)}cP[5I]=75}75.5H.1c(1A)},cN:G(1A){u I=B.S;I.cO(I.3X,"gh",1A,1h)},iM:G(74){u I=B.S;I.cN(G(){74=I.1E(74);if(74){74.ui()}})},5G:G(iL,cM){u I=B.S;u 1i=I.1E(iL);if(I.4U.6X){1i.4p("iq",cM)}N{1i.4p("3M",cM)}},iK:G(cL){u I=B.S;R(u i=1;i<M.K;i++){u 1i=I.1E(M[i]);if(!I.9d(1i,cL)){I.9e(1i,cL)}}},9d:G(iJ,73){u I=B.S;u 1i=I.1E(iJ);u 2F=1i.3M;if(2F.K===0){I.5G(1i,73);F 1h}if(2F==73){F 1m}u cK=1i.3M.2R(" ");R(u i=0;i<cK.K;i++){if(cK[i]==73){F 1m}}I.5G(1i,2F+" "+73);F 1h},9e:G(iI,cJ){u I=B.S;u 1i=I.1E(iI);u 2F=1i.3M;if(2F.K===0){F 1m}if(2F==cJ){I.5G(1i,"");F 1h}u 72=1i.3M.2R(" ");R(u i=0;i<72.K;i++){if(72[i]==cJ){72.4y(i,1);I.5G(1i,72.2b(" "));F 1h}}F 1m},iH:G(iG,iF,iE){u 1i=B.S.1E(iG);u X=B.S.9e(1i,iF);if(X){B.S.9d(1i,iE)}F X},iD:G(iC,uh){u 1i=B.S.1E(iC);u cI=1i.3M.2R(" ");R(u i=1;i<M.K;i++){u cH=1m;R(u j=0;j<cI.K;j++){if(cI[j]==M[i]){cH=1h;2K}}if(!cH){F 1m}}F 1h},9c:G(s){F s.23(/&/g,"&ug;").23(/"/g,"&uf;").23(/</g,"&lt;").23(/>/g,"&gt;")},iB:G(2q){F B.S.cG(2q).2b("")},cG:G(2q,1g){if(H(1g)=="L"||1g===O){1g=[]}u 70=[2q];u I=B.S;u cB=I.9c;u iA=I.4U;1M(70.K){2q=70.hP();if(H(2q)=="1n"){1g.1c(2q)}N{if(2q.3T==1){1g.1c("<"+2q.cD.8G());u 71=[];u cF=iA(2q);R(u i=0;i<cF.K;i++){u a=cF[i];71.1c([" ",a.1b,"=\\"",cB(a.3m),"\\""])}71.iz();R(i=0;i<71.K;i++){u cE=71[i];R(u j=0;j<cE.K;j++){1g.1c(cE[j])}}if(2q.ue()){1g.1c(">");70.1c("</"+2q.cD.8G()+">");u cC=2q.5h;R(i=cC.K-1;i>=0;i--){70.1c(cC[i])}}N{1g.1c("/>")}}N{if(2q.3T==3){1g.1c(cB(2q.iv))}}}}F 1g},97:G(ix,cA){u m=B.J;u iy=m.1R(O,M,1);B.15.9a(m.47(O,m.2r(B.S.1E,iy)),G(cA){cA.1T.3u=ix})},iw:G(1j,iu){u W=[];(G(1j){u cn=1j.5h;if(cn){R(u i=0;i<cn.K;i++){M.2U.cz(D,cn[i])}}u cy=1j.iv;if(H(cy)=="1n"){W.1c(cy)}})(B.S.1E(1j));if(iu){F W}N{F W.2b("")}},2d:G(2m){u m=B.J;D.1Z=2v;D.3X=2m;D.9b=Y m.4a();u 6Z=D.1Z.2S("cj");u 2T;if(6Z&&6Z.6Y&&6Z.6Y.K>0){u it=m.47;2T=G(1j){F it(2T.ir,1j.6Y)};2T.cx={};B.15.9a(6Z.6Y,G(a){2T.cx[a.1b]=a.3m});2T.ir=G(a){F(2T.cx[a.1b]!=a.3m)};2T.6X=1m;2T.99={"iq":"3M","ip":"ud","uc":"ub","R":"u9"}}N{2T=G(1j){F 1j.6Y};2T.6X=1h;2T.99={}}D.4U=2T;u 1C=D.cw;D.io=1C("ul");D.il=1C("ol");D.ik=1C("li");D.ij=1C("td");D.cm=1C("tr");D.ii=1C("u8");D.ih=1C("u7");D.ig=1C("u6");D.ie=1C("u5");D.ic=1C("th");D.cv=1C("ck");D.8d=1C("cj");D.A=1C("a");D.6m=1C("4u");D.ib=1C("u4");D.ia=1C("2e");D.i9=1C("tt");D.i8=1C("4O");D.i7=1C("h1");D.i6=1C("h2");D.i5=1C("h3");D.i4=1C("br");D.i3=1C("hr");D.i2=1C("u3");D.i1=1C("u2");D.cu=1C("u1");D.P=1C("p");D.ct=1C("u0");D.i0=1C("hJ");D.hZ=1C("tZ");D.hY=1C("tY");D.hX=1C("tX");D.hW=1C("tW");D.hV=1C("tV");D.hU=m.2z(D.97,"98");D.hT=m.2z(D.97,"8c");D.hS=D.cs;D.$=D.1E;D.2k={":3e":D.1z,":1p":m.2o(D.1z,D.1W)};m.3f(D)}});B.S.2d(((H(2O)=="L")?D:2O));if(!B.3d){95=B.S.95;94=B.S.94}B.J.2Y(D,B.S);if(H(1q)!="L"){1q.2X("B.1I");1q.2M("B.1H");1q.2M("B.J")}if(H(1x)!="L"){1x.26("B.1H",[]);1x.26("B.J",[])}1f{if(H(B.J)=="L"||H(B.1H)=="L"){14""}}1e(e){14"B.1I 3F on B.J 3W B.1H!"}if(H(B.1I)=="L"){B.1I={}}B.1I.1r="B.1I";B.1I.1Y="1.3.1";B.1I.1K=G(){F"["+D.1r+" "+D.1Y+"]"};B.1I.1l=G(){F D.1K()};B.1I.bY=G(6W){u m=B.1I;6W=!(!6W);if(m.3l&&m.3l.8Q!=6W){m.3l.hA();m.3l=O}if(!m.3l||m.3l.8P){m.3l=Y m.1I(6W,B.1H.2L)}F m.3l};B.1I.1I=G(4R,6V){if(H(6V)=="L"||6V===O){6V=B.1H.2L}D.2L=6V;u tU=B.J.2l;u c3=B.J.8Z;u 1O=B.J.1O;u hM=B.J.4L;u 2m=2O;u 6U="tT";if(H(B.S)!="L"){2m=B.S.cr()}if(!4R){u 5F=2m.tS.tR.2R("?")[0].23(/[:\\/.><&]/g,"hR");u 1b=6U+"hR"+5F;u 5D=2m.cp("",1b,"tQ,tP,3V=hQ");if(!5D){cq("tO tN to cp tM 2O tL to hP-up tK.");F L}5D.2v.fl("<!tJ co tI \\"-//tH//tG co 4.0 tF//tE\\" "+"\\"fq://fp.tD.fo/cm/tC/tB.tA\\">"+"<hO><5E><8Y>[B.1I]</8Y></5E>"+"<5s></5s></hO>");5D.2v.hG();5D.2v.8Y+=" "+2m.2v.8Y;2m=5D}u 1N=2m.2v;D.1N=1N;u 21=1N.hN(6U);u c4=!!21;if(21&&H(21.5B)!="L"){21.5B.2L=D.2L;21.5B.6K();F 21.5B}if(c4){u cl;1M((cl=21.6n)){21.6S(cl)}}N{21=1N.2S("4u");21.id=6U}21.5B=D;u 8T=1N.2S("ck");u 8S=1N.2S("ck");u 6O=1N.2S("2e");u 6N=1N.2S("2e");u 6M=1N.2S("2e");u 6L=1N.2S("2e");u 3L=1N.2S("4u");u 42=1N.2S("4u");u 8U=6U+"tz";D.8N=hM(D.8N);u 4T=[];u 6R=O;u cf=G(1t){u 6T=1t.3N;if(H(6T)=="2y"){6T=B.1H.5C[6T]}F 6T};u cd=G(1t){F 1t.3z.2b(" ")};u ca=1O(G(1t){u 8W=cf(1t);u 7X=cd(1t);u c=D.8N[8W];u p=1N.2S("cj");p.3M="B-49 B-5C-"+8W;p.1T.3x="ty: 2N; 4F-8X: -hL-4O-3y; 4F-8X: -o-4O-3y; 4F-8X: 4O-3y; 4F-8X: 4O-tx; hK-3y: 2K-hK; 3y-hJ: tw; 3U: "+c;p.2c(1N.4S(8W+": "+7X));42.2c(p);42.2c(1N.2S("br"));if(3L.ci>3L.hI){3L.4C=0}N{3L.4C=3L.hI}},D);u hD=G(1t){4T[4T.K]=1t;ca(1t)};u hF=G(){u cg,ce;1f{cg=Y 8V(8T.3m);ce=Y 8V(8S.3m)}1e(e){ch("2x in 47 tv: "+e.43);F O}F G(1t){F(cg.hH(cf(1t))&&ce.hH(cd(1t)))}};u cc=G(){1M(42.6n){42.6S(42.6n)}};u hB=G(){4T=[];cc()};u bZ=1O(G(){if(D.8P){F}D.8P=1h;if(B.1I.3l==D){B.1I.3l=O}D.2L.c9(8U);21.5B=O;if(4R){21.3t.6S(21)}N{D.2m.hG()}},D);u c7=G(){cc();R(u i=0;i<4T.K;i++){u 1t=4T[i];if(6R===O||6R(1t)){ca(1t)}}};D.6K=G(){6R=hF();c7();D.2L.c9(8U);D.2L.hE(8U,6R,hD)};u c0=1O(G(){4T=D.2L.c8();c7()},D);u c2=1O(G(6Q){6Q=6Q||2O.6D;2h=6Q.6w||6Q.8t;if(2h==13){D.6K()}},D);u 31="3u: 8c; z-c6: c5; 2I: 2N; 6f: 2N; 6P: tu; 5A: 3k%; he-3U: 4F; c1: "+D.8O;if(4R){31+="; 3V: ts; 3E-3D: fO 8a 8y"}N{31+="; 3V: 3k%;"}21.1T.3x=31;if(!c4){1N.5s.2c(21)}31={"3x":"5A: 33%; 3u: 8Q; c1: "+D.8O};c3(8T,{"3m":"8L|8M|8K|8J|8I","hC":c2,"1T":31});21.2c(8T);c3(8S,{"3m":".*","hC":c2,"1T":31});21.2c(8S);31="5A: 8%; 3u:8Q; c1: "+D.8O;6O.2c(1N.4S("tq"));6O.8R=1O("6K",D);6O.1T.3x=31;21.2c(6O);6N.2c(1N.4S("tp"));6N.8R=c0;6N.1T.3x=31;21.2c(6N);6M.2c(1N.4S("tn"));6M.8R=hB;6M.1T.3x=31;21.2c(6M);6L.2c(1N.4S("tm"));6L.8R=bZ;6L.1T.3x=31;21.2c(6L);3L.1T.3x="fS: tk; 5A: 3k%";42.1T.3x="5A: 3k%; 3V: "+(4R?"tj":"3k%");3L.2c(42);21.2c(3L);D.6K();c0();if(4R){D.2m=L}N{D.2m=2m}D.8Q=4R;D.hA=bZ;D.8P=1m;F D};B.1I.1I.1U={"8O":"ti tg,tf-te","8N":{"8M":"1v","8L":"gU","8K":"1F","8J":"8y","8I":"bx"}};B.1I.1W=["1I"];B.1I.1z=["bY"];B.1I.2d=G(){D.2k={":3e":D.1z,":1p":B.J.2o(D.1z,D.1W)};B.J.3f(D);B.1I.3l=O};B.1I.2d();B.J.2Y(D,B.1I);if(H(1q)!="L"){1q.2X("B.V");1q.2M("B.J")}if(H(1x)!="L"){1x.26("B.J",[])}1f{if(H(B.J)=="L"){14""}}1e(e){14"B.V 3F on B.J"}if(H(B.V)=="L"){B.V={}}B.V.1r="B.V";B.V.1Y="1.3.1";B.V.1K=G(){F"["+D.1r+" "+D.1Y+"]"};B.V.1l=G(){F D.1K()};B.V.V=G(1v,hz,1F,6J){if(H(6J)=="L"||6J===O){6J=1}D.1B={r:1v,g:hz,b:1F,a:6J}};B.V.V.1U={bX:B.V.V,tc:G(hy){u 1B=D.1B;u m=B.V;F m.V.3Y(1B.r,1B.g,1B.b,hy)},tb:G(1o){u 1G=D.41();1G.h=1o;u m=B.V;F m.V.4H(1G)},ta:G(hx){u 1G=D.41();1G.s=hx;u m=B.V;F m.V.4H(1G)},t9:G(hw){u 1G=D.41();1G.l=hw;u m=B.V;F m.V.4H(1G)},t8:G(hv){u 1G=D.41();1G.l=28.29(1G.l-hv,0);u m=B.V;F m.V.4H(1G)},t7:G(hu){u 1G=D.41();1G.l=28.2a(1G.l+hu,1);u m=B.V;F m.V.4H(1G)},fJ:G(ht,5z){if(H(5z)=="L"||5z===O){5z=0.5}u sf=1-5z;u s=D.1B;u d=ht.1B;u df=5z;F B.V.V.3Y((s.r*sf)+(d.r*df),(s.g*sf)+(d.g*df),(s.b*sf)+(d.b*df),(s.a*sf)+(d.a*df))},h4:G(hs){u a=D.6r();u b=hs.6r();F B.J.2f([a.r,a.g,a.b,a.a],[b.r,b.g,b.b,b.a])},hq:G(){F D.41().b>0.5},t6:G(){F(!D.hq())},t5:G(){u c=D.41();u 2Z=B.V.6F;u W=D.ho;if(!W){u 5y=(2Z(c.h,bF).6I(0)+","+2Z(c.s,3k).hp(4)+"%"+","+2Z(c.l,3k).hp(4)+"%");u a=c.a;if(a>=1){a=1;W="1G("+5y+")"}N{if(a<=0){a=0}W="t4("+5y+","+a+")"}D.ho=W}F W},hl:G(){u c=D.1B;u 2Z=B.V.6F;u W=D.hn;if(!W){u 5y=(2Z(c.r,3h).6I(0)+","+2Z(c.g,3h).6I(0)+","+2Z(c.b,3h).6I(0));if(c.a!=1){W="t3("+5y+","+c.a+")"}N{W="1B("+5y+")"}D.hn=W}F W},6r:G(){F B.J.4L(D.1B)},t2:G(){u m=B.V;u c=D.1B;u 2Z=B.V.6F;u W=D.hm;if(!W){W=("#"+m.6E(2Z(c.r,3h))+m.6E(2Z(c.g,3h))+m.6E(2Z(c.b,3h)));D.hm=W}F W},t1:G(){u 2Q=D.2Q;u c=D.1B;if(H(2Q)=="L"||2Q===O){2Q=B.V.bA(D.1B);D.2Q=2Q}F B.J.4L(2Q)},41:G(){u 1G=D.1G;u c=D.1B;if(H(1G)=="L"||1G===O){1G=B.V.bC(D.1B);D.1G=1G}F B.J.4L(1G)},1l:G(){F D.hl()},U:G(){u c=D.1B;u hk=[c.r,c.g,c.b,c.a];F D.bX.1r+"("+hk.2b(", ")+")"}};B.J.2l(B.V.V,{3Y:G(1v,bW,1F,8H){u hj=B.V.V;if(M.K==1){u 1B=1v;1v=1B.r;bW=1B.g;1F=1B.b;if(H(1B.a)=="L"){8H=L}N{8H=1B.a}}F Y hj(1v,bW,1F,8H)},4H:G(1o,t0,sZ,sY){u m=B.V;F m.V.3Y(m.bB.1w(m,M))},sX:G(1o,sW,sV,sU){u m=B.V;F m.V.3Y(m.bz.1w(m,M))},hi:G(1b){u 8F=B.V.V;if(1b.3Z(0)=="\\""){1b=1b.3H(1,1b.K-2)}u bV=8F.by[1b.8G()];if(H(bV)=="1n"){F 8F.bT(bV)}N{if(1b=="aP"){F 8F.sT()}}F O},8f:G(4Q){u I=B.V.V;u bU=4Q.3H(0,3);if(bU=="1B"){F I.h9(4Q)}N{if(bU=="1G"){F I.h8(4Q)}N{if(4Q.3Z(0)=="#"){F I.bT(4Q)}}}F I.hi(4Q)},bT:G(4P){if(4P.3Z(0)=="#"){4P=4P.2W(1)}u 8E=[];u i,5x;if(4P.K==3){R(i=0;i<3;i++){5x=4P.3H(i,1);8E.1c(3w(5x+5x,16)/3h)}}N{R(i=0;i<6;i+=2){5x=4P.3H(i,2);8E.1c(3w(5x,16)/3h)}}u bS=B.V.V;F bS.3Y.1w(bS,8E)},bG:G(4O,hf,hg,4N){if(4N.2A(4O)===0){4N=4N.2W(4N.2A("(",3)+1,4N.K-1)}u bR=4N.2R(/\\s*,\\s*/);u bP=[];R(u i=0;i<bR.K;i++){u c=bR[i];u 2i;u bQ=c.2W(c.K-3);if(c.3Z(c.K-1)=="%"){2i=0.bE*4M(c.2W(0,c.K-1))}N{if(bQ=="sS"){2i=4M(c)/bF}N{if(bQ=="sR"){2i=4M(c)/(28.sQ*2)}N{2i=hg[i]*4M(c)}}}bP.1c(2i)}F D[hf].1w(D,bP)},bN:G(Q,sP,sO){u d=B.S;u 2F=B.V.V;R(Q=d.1E(Q);Q;Q=Q.3t){u bO=d.4q.1w(d,M);if(!bO){2V}u 8D=2F.8f(bO);if(!8D){2K}if(8D.6r().a>0){F 8D}}F O},ba:G(Q){u 2F=B.V.V;F 2F.bN(Q,"aZ","he-3U")||2F.sN()},sM:G(Q){u 2F=B.V.V;F 2F.bN(Q,"3U","3U")||2F.sL()},sK:G(){F B.J.4L(B.V.V.by)}});B.J.2l(B.V,{6F:G(v,8C){v*=8C;if(v<0){F 0}N{if(v>8C){F 8C}N{F v}}},hc:G(n1,n2,1o){if(1o>6){1o-=6}N{if(1o<0){1o+=6}}u 2i;if(1o<1){2i=n1+(n2-n1)*1o}N{if(1o<3){2i=n2}N{if(1o<4){2i=n1+(n2-n1)*(4-1o)}N{2i=n1}}}F 2i},bz:G(1o,5w,3i,bM){if(M.K==1){u 2Q=1o;1o=2Q.h;5w=2Q.s;3i=2Q.v;bM=2Q.a}u 1v;u 3K;u 1F;if(5w===0){1v=0;3K=0;1F=0}N{u i=28.8B(1o*6);u f=(1o*6)-i;u p=3i*(1-5w);u q=3i*(1-(5w*f));u t=3i*(1-(5w*(1-f)));hd(i){3j 1:1v=q;3K=3i;1F=p;2K;3j 2:1v=p;3K=3i;1F=t;2K;3j 3:1v=p;3K=q;1F=3i;2K;3j 4:1v=t;3K=p;1F=3i;2K;3j 5:1v=3i;3K=p;1F=q;2K;3j 6:3j 0:1v=3i;3K=t;1F=p;2K}}F{r:1v,g:3K,b:1F,a:bM}},bB:G(1o,5v,3v,bL){if(M.K==1){u 1G=1o;1o=1G.h;5v=1G.s;3v=1G.l;bL=1G.a}u 1v;u 8A;u 1F;if(5v===0){1v=3v;8A=3v;1F=3v}N{u m2;if(3v<=0.5){m2=3v*(1+5v)}N{m2=3v+5v-(3v*5v)}u m1=(2*3v)-m2;u f=B.V.hc;u h6=1o*6;1v=f(m1,m2,h6+2);8A=f(m1,m2,h6);1F=f(m1,m2,h6-2)}F{r:1v,g:8A,b:1F,a:bL}},bA:G(1v,4K,1F,bK){if(M.K==1){u 1B=1v;1v=1B.r;4K=1B.g;1F=1B.b;bK=1B.a}u 29=28.29(28.29(1v,4K),1F);u 2a=28.2a(28.2a(1v,4K),1F);u 1o;u 8z;u hb=29;if(2a==29){1o=0;8z=0}N{u 6H=(29-2a);8z=6H/29;if(1v==29){1o=(4K-1F)/6H}N{if(4K==29){1o=2+((1F-1v)/6H)}N{1o=4+((1v-4K)/6H)}}1o/=6;if(1o<0){1o+=1}if(1o>1){1o-=1}}F{h:1o,s:8z,v:hb,a:bK}},bC:G(1v,4J,1F,bI){if(M.K==1){u 1B=1v;1v=1B.r;4J=1B.g;1F=1B.b;bI=1B.a}u 29=28.29(1v,28.29(4J,1F));u 2a=28.2a(1v,28.2a(4J,1F));u 1o;u 6G;u bJ=(29+2a)/2;u 4I=29-2a;if(4I===0){1o=0;6G=0}N{if(bJ<=0.5){6G=4I/(29+2a)}N{6G=4I/(2-29-2a)}if(1v==29){1o=(4J-1F)/4I}N{if(4J==29){1o=2+((1F-1v)/4I)}N{1o=4+((1v-4J)/4I)}}1o/=6;if(1o<0){1o+=1}if(1o>1){1o-=1}}F{h:1o,s:6G,l:bJ,a:bI}},6E:G(1P){1P=28.ha(1P);u bH=1P.1l(16);if(1P<16){F"0"+bH}F bH},2d:G(){u m=B.J;D.V.h9=m.1O(D.V.bG,D.V,"1B","3Y",[1/3h,1/3h,1/3h,1]);D.V.h8=m.1O(D.V.bG,D.V,"1G","4H",[1/bF,0.bE,0.bE,1]);u 4G=1/3;u bD={8y:[0,0,0],1F:[0,0,1],gY:[0.6,0.4,0.2],gX:[0,1,1],sJ:[4G,4G,4G],gR:[0.5,0.5,0.5],bx:[0,1,0],sI:[2*4G,2*4G,2*4G],gN:[1,0,1],gL:[1,0.5,0],gK:[0.5,0,0.5],1v:[1,0,0],aP:[0,0,0,0],4F:[1,1,1],gI:[1,1,0]};u h7=G(1b,r,g,b,a){u W=D.3Y(r,g,b,a);D[1b]=G(){F W};F W};R(u k in bD){u 1b=k+"V";u h5=m.2o([h7,D.V,1b],bD[k]);D.V[1b]=m.1O.1w(O,h5)}u h0=G(){R(u i=0;i<M.K;i++){if(!(M[i]2C V)){F 1m}}F 1h};u gZ=G(a,b){F a.h4(b)};m.3f(D);m.5u(D.V.1r,h0,gZ);D.2k={":3e":D.1z,":1p":m.2o(D.1z,D.1W)}}});B.V.1z=["V"];B.V.1W=["6F","bC","bB","bA","bz","6E"];B.V.2d();B.J.2Y(D,B.V);B.V.V.by={sH:"#sG",sF:"#sE",sD:"#gW",sC:"#sB",sA:"#sz",sy:"#sx",sw:"#sv",8y:"#su",st:"#sr",1F:"#sq",sp:"#so",gY:"#sn",sm:"#sl",sk:"#sj",si:"#sh",sg:"#se",sd:"#sc",sb:"#sa",s9:"#s8",s7:"#s6",gX:"#gW",s5:"#s4",s3:"#s2",s1:"#s0",rZ:"#gV",rY:"#rX",rW:"#gV",rV:"#rU",rT:"#rS",rR:"#rQ",rP:"#rO",rN:"#rM",gU:"#rL",rK:"#rJ",rI:"#rH",rG:"#rF",rE:"#gT",rD:"#gT",rC:"#rB",rA:"#rz",ry:"#rx",rw:"#rv",ru:"#gS",rt:"#gS",rs:"#rr",rq:"#rp",ro:"#rn",rm:"#rl",rk:"#gM",rj:"#ri",rh:"#rg",rf:"#rd",rc:"#rb",gR:"#gQ",bx:"#ra",r9:"#r8",r7:"#gQ",r6:"#r5",r4:"#r3",r2:"#r1",r0:"#qZ",qY:"#qX",qW:"#qV",qU:"#qT",qS:"#qR",qQ:"#qP",qO:"#qN",qM:"#qL",qK:"#qJ",qI:"#qH",qG:"#qF",qE:"#gP",qD:"#qC",qB:"#gP",qA:"#qz",qy:"#qx",qw:"#qv",qu:"#qt",qr:"#gO",qq:"#gO",qp:"#qo",qn:"#qm",ql:"#qk",qj:"#qi",qh:"#qg",gN:"#gM",qf:"#qe",qd:"#qc",qb:"#qa",q9:"#q8",q7:"#q6",q5:"#q4",q3:"#q2",q1:"#q0",pZ:"#pY",pX:"#pW",pV:"#pU",pT:"#pS",pR:"#pQ",pP:"#pO",pN:"#pM",pL:"#pK",pJ:"#pI",pH:"#pG",pF:"#pE",gL:"#pD",pC:"#pB",pA:"#pz",py:"#pw",pv:"#pu",pt:"#ps",pr:"#pq",pp:"#po",pn:"#pm",pl:"#pj",pi:"#ph",pg:"#pf",pe:"#pd",gK:"#pc",1v:"#pb",pa:"#p9",p8:"#p7",p6:"#p5",p4:"#p3",p2:"#p1",p0:"#oZ",oY:"#oX",oW:"#oV",oU:"#oT",oS:"#oR",oQ:"#oP",oO:"#gJ",oN:"#gJ",oM:"#oL",oK:"#oJ",oI:"#oH",oG:"#oF",oE:"#oD",oC:"#oB",oA:"#oz",oy:"#ox",ow:"#ov",ou:"#ot",4F:"#os",oq:"#op",gI:"#oo",om:"#ok"};if(H(1q)!="L"){1q.2X("B.1u");1q.2M("B.J");1q.2M("B.S")}if(H(1x)!="L"){1x.26("B.J",[]);1x.26("B.S",[])}1f{if(H(B.J)=="L"){14""}}1e(e){14"B.1u 3F on B.J!"}1f{if(H(B.S)=="L"){14""}}1e(e){14"B.1u 3F on B.S!"}if(H(B.1u)=="L"){B.1u={}}B.1u.1r="B.1u";B.1u.1Y="1.3.1";B.1u.4x=[];B.1u.bq=G(1d,e){D.1L=e||2O.6D;D.gH=1d};B.J.2l(B.1u.bq.1U,{1K:G(){u U=B.J.U;u 1y="{6D(): "+U(D.6D())+", 1d(): "+U(D.1d())+", 1J(): "+U(D.1J())+", 8x(): "+U(D.8x())+", 4E(): "+"{8w: "+U(D.4E().8w)+", 8v: "+U(D.4E().8v)+", 8u: "+U(D.4E().8u)+", 2P: "+U(D.4E().2P)+", bw: "+U(D.4E().bw)+"}";if(D.1J()&&D.1J().2A("2h")===0){1y+=", 2h(): {3J: "+U(D.2h().3J)+", 1n: "+U(D.2h().1n)+"}"}if(D.1J()&&(D.1J().2A("3I")===0||D.1J().2A("gE")!=-1||D.1J()=="gD")){1y+=", 3I(): {4D: "+U(D.3I().4D)+", 6A: "+U(D.3I().6A);if(D.1J()!="gC"){1y+=", 2e: {2I: "+U(D.3I().2e.2I)+", 6v: "+U(D.3I().2e.6v)+", 3g: "+U(D.3I().2e.3g)+"}}"}N{1y+="}"}}if(D.1J()=="gG"||D.1J()=="gF"){1y+=", 6C(): "+U(D.6C())}1y+="}";F 1y},1l:G(){F D.1K()},1d:G(){F D.gH},6D:G(){F D.1L},1J:G(){F D.1L.1J||L},8x:G(){F D.1L.8x||D.1L.oj},6C:G(){if(D.1J()=="gG"){F(D.1L.6C||D.1L.aW)}N{if(D.1J()=="gF"){F(D.1L.6C||D.1L.oi)}}F L},4E:G(){u m={};m.8w=D.1L.oh;m.8v=D.1L.og;m.8u=D.1L.oe||1m;m.2P=D.1L.od;m.bw=m.8w||m.8v||m.2P||m.8u;F m},2h:G(){u k={};if(D.1J()&&D.1J().2A("2h")===0){if(D.1J()=="oc"||D.1J()=="ob"){k.3J=D.1L.8t;k.1n=(B.1u.5r[k.3J]||"oa");F k}N{if(D.1J()=="o9"){k.3J=0;k.1n="";if(H(D.1L.6B)!="L"&&D.1L.6B!==0&&!B.1u.bv[D.1L.6B]){k.3J=D.1L.6B;k.1n=bu.bt(k.3J)}N{if(D.1L.8t&&H(D.1L.6B)=="L"){k.3J=D.1L.8t;k.1n=bu.bt(k.3J)}}F k}}}F L},3I:G(){u m={};u e=D.1L;if(D.1J()&&(D.1J().2A("3I")===0||D.1J().2A("gE")!=-1||D.1J()=="gD")){m.6A=Y B.S.5t(0,0);if(e.6z||e.6x){m.6A.x=(!e.6z||e.6z<0)?0:e.6z;m.6A.y=(!e.6x||e.6x<0)?0:e.6x}m.4D=Y B.S.5t(0,0);if(e.8s||e.8r){m.4D.x=(!e.8s||e.8s<0)?0:e.8s;m.4D.y=(!e.8r||e.8r<0)?0:e.8r}N{u de=B.S.1Z.7Z;u b=B.S.1Z.5s;m.4D.x=e.6z+(de.6y||b.6y)-(de.8q||b.8q);m.4D.y=e.6x+(de.4C||b.4C)-(de.8p||b.8p)}if(D.1J()!="gC"){m.2e={};m.2e.2I=1m;m.2e.3g=1m;m.2e.6v=1m;if(e.6w){m.2e.2I=(e.6w==1);m.2e.6v=(e.6w==2);m.2e.3g=(e.6w==3)}N{m.2e.2I=!!(e.2e&1);m.2e.3g=!!(e.2e&2);m.2e.6v=!!(e.2e&4)}}F m}F L},2J:G(){D.8o();D.8n()},8o:G(){if(D.1L.8o){D.1L.8o()}N{D.1L.o8=1h}},8n:G(){if(D.1L.8n){D.1L.8n()}N{D.1L.o7=1m}}});B.1u.bv={3:"gz",o6:"gA",o5:"gy",o4:"gx",o3:"gw",o2:"gv",o1:"gu",o0:"gs",nZ:"gr",nY:"gq",nX:"gp",nW:"go"};R(i=gB;i<=nV;i++){B.1u.bv[i]="gk"+(i-gB+1)}B.1u.5r={8:"nU",9:"nT",12:"gA",13:"gz",16:"nS",17:"nR",18:"nQ",19:"nP",20:"nO",27:"nN",32:"nM",33:"gy",34:"gx",35:"gw",36:"gv",37:"gu",38:"gs",39:"gr",40:"gq",44:"nL",45:"gp",46:"go",59:"gn",91:"nK",92:"nJ",93:"nI",nH:"nG",nF:"nE",nD:"nC-gm",nB:"nA",nz:"ny",nx:"nw",nv:"nu",nt:"gn",ns:"nr",nq:"np",nn:"nm-gm",nl:"nk",nj:"ni",nh:"ng",nf:"nd",nc:"nb",na:"n9",n8:"n7"};R(u i=48;i<=57;i++){B.1u.5r[i]="gl"+(i-48)}R(i=65;i<=90;i++){B.1u.5r[i]="gl"+bu.bt(i)}R(i=96;i<=n6;i++){B.1u.5r[i]="n5"+(i-96)}R(i=gj;i<=n4;i++){B.1u.5r[i]="gk"+(i-gj+1)}B.J.2l(B.1u,{1K:G(){F"["+D.1r+" "+D.1Y+"]"},1l:G(){F D.1K()},g7:G(){u I=B.1u;u bs=I.4x;R(u i=0;i<bs.K;i++){I.6t(bs[i])}gi I.4x;1f{2O.gh=L}1e(e){}1f{2O.g8=L}1e(e){}},gb:G(1d,1A,1i,gg){u E=B.1u.bq;if(!gg){F B.J.1O(1A,1i)}1i=1i||1d;if(H(1A)=="1n"){F G(gf){1i[1A].1w(1i,[Y E(1d,gf)])}}N{F G(gd){1A.1w(1i,[Y E(1d,gd)])}}},6s:G(1d,2D,5q,4B){1d=B.S.1E(1d);u I=B.1u;if(H(2D)!="1n"){14 Y 2x("\'2D\' 5p be a 1n")}u 1i=O;u 1A=O;if(H(4B)!="L"){1i=5q;1A=4B;if(H(4B)=="1n"){if(H(5q[4B])!="G"){14 Y 2x("\'bp\' 5p be a G on \'gc\'")}}N{if(H(4B)!="G"){14 Y 2x("\'bp\' 5p be a G or 1n")}}}N{if(H(5q)!="G"){14 Y 2x("\'gc\' 5p be a G if \'bp\' is 2E n3")}N{1A=5q}}if(H(1i)=="L"||1i===O){1i=1d}u bm=!!(1d.bo||1d.bn);u 8m=I.gb(1d,1A,1i,bm);if(1d.bo){1d.bo(2D.3H(2),8m,1m)}N{if(1d.bn){1d.bn(2D,8m)}}u bk=[1d,2D,8m,bm,5q,4B];I.4x.1c(bk);F bk},6t:G(6u){if(!6u[3]){F}u 1d=6u[0];u 2D=6u[1];u bj=6u[2];if(1d.ga){1d.ga(2D.3H(2),bj,1m)}N{if(1d.g9){1d.g9(2D,bj)}N{14 Y 2x("\'1d\' 5p be a S n0")}}},8j:G(bh){u I=B.1u;u 5o=I.4x;u m=B.J;if(M.K>1){u 1d=B.S.1E(M[0]);u 2D=M[1];u 1i=M[2];u 1A=M[3];R(u i=5o.K-1;i>=0;i--){u o=5o[i];if(o[0]===1d&&o[1]===2D&&o[4]===1i&&o[5]===1A){I.6t(o);5o.4y(i,1);F 1h}}}N{u 5n=m.bi(5o,bh);if(5n>=0){I.6t(bh);5o.4y(5n,1);F 1h}}F 1m},8i:G(1d,2D){1d=B.S.1E(1d);u m=B.J;u 8l=m.bg(m.1R(O,M,1));u I=B.1u;u bd=I.6t;u 4z=I.4x;if(8l.K===0){R(u i=4z.K-1;i>=0;i--){u 4A=4z[i];if(4A[0]===1d){bd(4A);4z.4y(i,1)}}}N{u bf={};R(u i=0;i<8l.K;i++){bf[8l[i]]=1h}R(u i=4z.K-1;i>=0;i--){u 4A=4z[i];if(4A[0]===1d&&4A[1]in bf){bd(4A);4z.4y(i,1)}}}},8h:G(1d,2D){u bc=B.1u.4x;1d=B.S.1E(1d);u 3G=B.J.1R(O,M,2);u 5m=[];R(u i=0;i<bc.K;i++){u 8k=bc[i];if(8k[0]===1d&&8k[1]===2D){1f{8k[2].1w(1d,3G)}1e(e){5m.1c(e)}}}if(5m.K==1){14 5m[0]}N{if(5m.K>1){u e=Y 2x("mZ bb mY in mX \'2D\', mW bb mV");e.bb=5m;14 e}}}});B.1u.1W=[];B.1u.1z=["6s","8j","8h","8i"];B.1u.2d=G(2m){u m=B.J;D.1Z=2v;D.3X=2m;1f{D.6s(2O,"g8",D.g7)}1e(e){}D.2k={":3e":D.1z,":1p":m.2o(D.1z,D.1W)};m.3f(D)};B.1u.2d(D);if(!B.3d){6s=B.1u.6s;8j=B.1u.8j;8i=B.1u.8i;8h=B.1u.8h}B.J.2Y(D,B.1u);if(H(1q)!="L"){1q.2X("B.1X");1q.2M("B.J");1q.2M("B.S");1q.2M("B.V")}if(H(1x)!="L"){1x.26("B.J",[]);1x.26("B.S",[]);1x.26("B.V",[])}1f{if(H(B.J)=="L"||H(B.S)=="L"||H(B.V)=="L"){14""}}1e(e){14"B.1X 3F on B.J, B.S 3W B.V!"}if(H(B.1X)=="L"){B.1X={}}B.1X.1r="B.1X";B.1X.1Y="1.3.1";B.1X.1K=G(){F"["+D.1r+" "+D.1Y+"]"};B.1X.1l=G(){F D.1K()};B.1X.aI=G(e,g6){e=B.S.1E(e);D.fN(g6);if(D.1S.fL){e=D.g5(e)}u 4w=D.1S.3U;u C=B.V.V;if(D.1S.3U=="aW"){4w=C.ba(e)}N{if(!(4w 2C C)){4w=C.8f(4w)}}D.82=(4w.6r().a<=0);u 5l=D.1S.aV;if(D.1S.aV=="fM"){5l=C.ba(e.8g)}N{if(!(5l 2C C)){5l=C.8f(5l)}}D.g3(e,4w,5l)};B.1X.aI.1U={g5:G(e){u mU=e.3t;u 1N=B.S.b9();if(H(1N.5k)=="L"||1N.5k===O){F e}u 4v=1N.5k.g4(e,O);if(H(4v)=="L"||4v===O){F e}u b8=B.S.6m({"1T":{3u:"8c",mT:4v.6q("6p-3D"),85:4v.6q("6p-3g"),mS:4v.6q("6p-6f"),86:4v.6q("6p-2I"),6p:"2N"}});b8.6o=e.6o;e.6o="";e.2c(b8);F e},g3:G(e,b7,8e){if(D.1S.3E){D.g2(e,8e)}if(D.fy()){D.fX(e,b7,8e)}if(D.fx()){D.fV(e,b7,8e)}},g2:G(el,g1){u b6="6l 8a "+D.aQ(g1);u g0="3E-2I: "+b6;u fZ="3E-3g: "+b6;u fY="1T=\'"+g0+";"+fZ+"\'";el.6o="<4u "+fY+">"+el.6o+"</4u>"},fX:G(el,fW,b5){u b4=D.b1(b5);R(u i=0;i<D.1S.89;i++){b4.2c(D.b0(fW,b5,i,"3D"))}el.1T.mR=0;el.mQ(b4,el.6n)},fV:G(el,fU,b3){u b2=D.b1(b3);R(u i=(D.1S.89-1);i>=0;i--){b2.2c(D.b0(fU,b3,i,"6f"))}el.1T.mP=0;el.2c(b2)},b1:G(fT){u 2q=B.S;F 2q.6m({1T:{aZ:fT.1l()}})},b0:G(aY,fQ,n,aX){u 6k=B.S.8d();u 2p=6k.1T;2p.aZ=aY.1l();2p.3u="8c";2p.3V="6l";2p.fS="fR";2p.mO="6l";u 8b=D.aQ(aY,fQ);if(D.1S.3E&&n===0){2p.mN="8a";2p.mM="6l";2p.84="2N";2p.83="2N";2p.mL="2N";2p.3V="2N";2p.fP=8b.1l()}N{if(8b){2p.fP=8b.1l();2p.mK="8a";2p.mJ="2N 6l"}}if(!D.1S.4r&&(n==(D.1S.89-1))){2p.3V="fO"}D.fI(6k,n,aX);D.fG(6k,n,aX);F 6k},fN:G(fK){D.1S={6g:"1p",3U:"aW",aV:"fM",5j:1h,3E:1m,4r:1m,fL:1m};B.J.2l(D.1S,fK);D.1S.89=(D.1S.4r?2:4)},aL:G(){u 88=D.1S.6g;if(D.6h(88,"1p","3D")){F""}u aU=(88.2A("tl")!=-1);u aT=(88.2A("tr")!=-1);if(aU&&aT){F""}if(aU){F"2I"}if(aT){F"3g"}F""},aK:G(){u 87=D.1S.6g;if(D.6h(87,"1p","6f")){F""}u aS=(87.2A("bl")!=-1);u aR=(87.2A("br")!=-1);if(aS&&aR){F""}if(aS){F"2I"}if(aR){F"3g"}F""},aQ:G(aN,aO){if(aN=="aP"){F aO}N{if(D.1S.3E){F D.1S.3E}N{if(D.1S.5j){F aO.fJ(aN)}}}F""},fI:G(el,n,fH){u 6j=D.fE(n)+"px";u aM=(fH=="3D"?D.aL():D.aK());u 4t=el.1T;if(aM=="2I"){4t.86=6j;4t.85="2N"}N{if(aM=="3g"){4t.85=6j;4t.86="2N"}N{4t.86=6j;4t.85=6j}}},fG:G(el,n,fF){u 6i=D.fz(n)+"px";u aJ=(fF=="3D"?D.aL():D.aK());u 4s=el.1T;if(aJ=="2I"){4s.84=6i;4s.83="2N"}N{if(aJ=="3g"){4s.83=6i;4s.84="2N"}N{4s.84=6i;4s.83=6i}}},fE:G(n){if(D.82){F 0}u o=D.1S;if(o.4r&&o.5j){u fD=[1,0];F fD[n]}N{if(o.4r){u fC=[2,1];F fC[n]}N{if(o.5j){u fB=[3,2,1,0];F fB[n]}N{u fA=[5,3,2,1];F fA[n]}}}},fz:G(n){u o=D.1S;u 5i;if(o.4r&&(o.5j||D.82)){F 1}N{if(o.4r){5i=[1,0]}N{if(o.5j){5i=[2,1,1,1]}N{if(o.3E){5i=[0,2,0,0]}N{if(D.82){5i=[5,3,2,1]}N{F 0}}}}}F 5i[n]},6h:G(1y){R(u i=1;i<M.K;i++){if(1y.2A(M[i])!=-1){F 1h}}F 1m},fy:G(){F D.6h(D.1S.6g,"1p","3D","tl","tr")},fx:G(){F D.6h(D.1S.6g,"1p","6f","bl","br")},mI:G(el){F(el.5h.K==1&&el.5h[0].3T==3)}};B.1X.aF=G(e,fw){Y B.1X.aI(e,fw)};B.1X.fs=G(fv,fu,ft){u aG=B.S.aH(fv,fu);R(u i=0;i<aG.K;i++){B.1X.aF(aG[i],ft)}};B.1X.V=B.V.V;B.1X.mH=B.S.4q;B.1X.2d=G(){u m=B.J;m.3f(D);D.2k={":3e":D.1z,":1p":m.2o(D.1z,D.1W)}};B.1X.1z=["aF","fs"];B.1X.1W=[];B.1X.2d();B.J.2Y(D,B.1X);if(H(B)=="L"){B={}}if(H(B.B)=="L"){B.B={}}B.B.1r="B.B";B.B.1Y="1.3.1";B.B.1K=G(){F"["+D.1r+" "+D.1Y+"]"};B.B.1l=G(){F D.1K()};B.B.aA=["J","15","1H","1D","1s","1k","S","1I","V","1u","1X"];if(H(1x)!="L"||H(1q)!="L"){if(H(1q)!="L"){1q.2X("B.B");1q.2M("B.*")}if(H(1x)!="L"){1x.26("B.J",[]);1x.26("B.15",[]);1x.26("B.1H",[]);1x.26("B.1D",[]);1x.26("B.1s",[]);1x.26("B.1k",[]);1x.26("B.S",[]);1x.26("B.1I",[]);1x.26("B.V",[]);1x.26("B.1u",[]);1x.26("B.1X",[])}(G(){u 6e=B.J.1R;u I=B.B;u aE=I.aA;u aD=[];u aC=[];u 81={};u i,k,m,1p;R(i=0;i<aE.K;i++){m=B[aE[i]];6e(aD,m.1z);6e(aC,m.1W);R(k in m.2k){81[k]=6e(81[k],m.2k[k])}1p=m.2k[":1p"];if(!1p){1p=6e(O,m.1z,m.1W)}u j;R(j=0;j<1p.K;j++){k=1p[j];I[k]=m[k]}}I.1z=aD;I.1W=aC;I.2k=81}())}N{if(H(B.3d)=="L"){B.3d=1h}(G(){u 80=2v.fr("7W");u ay="fq://fp.mG.fo/mF/mE/mD.is.aB.mC";u 2w=O;u ax=O;u az={};u i;R(i=0;i<80.K;i++){u 1d=80[i].fm("1d");if(!1d){2V}az[1d]=1h;if(1d.3C(/B.js$/)){2w=1d.2W(0,1d.mB("B.js"));ax=80[i]}}if(2w===O){F}u 6d=B.B.aA;R(u i=0;i<6d.K;i++){if(B[6d[i]]){2V}u 7Y=2w+6d[i]+".js";if(7Y in az){2V}if(2v.7Z&&2v.7Z.mA==ay){u s=2v.mz(ay,"7W");s.4p("id","my"+2w+6d[i]);s.4p("1d",7Y);s.4p("1J","mx/x-fk");ax.3t.2c(s)}N{2v.fl("<7W 1d=\\""+7Y+"\\" 1J=\\"7X/fk\\"></7W>")}}})()}',62,1976,'||||||||||||||||||||||||||||||var|||||||MochiKit||this||return|function|typeof|self|Base|length|undefined|arguments|else|null||elem|for|DOM||repr|Color|rval|res|new||||||throw|Iter|||||next|name|push|src|catch|try|lst|true|obj|node|Async|toString|false|string|hue|all|dojo|NAME|Format|msg|Signal|red|apply|JSAN|str|EXPORT|func|rgb|_425|DateTime|getElement|blue|hsl|Logging|LoggingPane|type|__repr__|_event|while|doc|bind|num|iter|extend|options|style|prototype|seq|EXPORT_OK|Visual|VERSION|_document||_434||replace|forwardCall|StopIteration|use||Math|max|min|join|appendChild|__new__|button|compare|date|key|val|_329|EXPORT_TAGS|update|win|pair|concat|_596|dom|map|req|Deferred|sync|document|base|Error|number|partial|indexOf||instanceof|sig|not|cls|list|fired|left|stop|break|logger|require|0px|window|shift|hsv|split|createElement|_423|callee|continue|substring|provide|_exportSymbols|ccc||_464|||||||||step|pred|_51|__compat__|common|nameFunctions|right|255|_517|case|100|_loggingPane|value|object|callback|TypeError|_251|_246|_113|parentNode|display|_522|parseInt|cssText|wrap|info|isArrayLike|end|match|top|border|depends|args|substr|mouse|code|_519|_443|className|level|err|frac|Date|_135|_85|nodeType|color|height|and|_window|fromRGB|charAt||asHSL|_444|message||||filter||LogMessage|AdapterRegistry|_366|imap|NotFound|locked|counter|_262|_messages|operator|cmp|_165|_161|pairs|arr|_52|setAttribute|computedStyle|compact|_614|_610|div|_576|_572|_observers|splice|_565|_566|_555|scrollTop|page|modifier|white|_541|fromHSL|_539|_535|_528|clone|parseFloat|_505|pre|_499|_497|_427|createTextNode|_446|attributeArray|_388|_379|updateNodeAttributes|_341|_326||box|errback|results|paused|chain|_285||ofs||NamedError|_175|_147|_122|_83|_54|_17|childNodes|_619|blend|defaultView|_574|_569|idx|_562|must|_554|_specialKeys|body|Coordinates|registerComparator|_521|_516|hex|mid|_478|width|loggingPane|LogLevel|nwin|head|url|setElementClass|callStack|path|dest|_359|boolean|register|Dimensions|DeferredLock|_313|addCallback|_310|waiting|onreadystatechange|_290|LOCALE|year|printfire|_214|log|_213|_211|pos|_155|_153||typeMatcher|listMinMax|_114|_40|itr|typ|_19|_634|_625|bottom|corners|_hasString|_612|_608|_595|1px|DIV|firstChild|innerHTML|padding|getPropertyValue|asRGB|connect|_disconnect|_559|middle|which|clientY|scrollLeft|clientX|client|charCode|relatedTarget|event|toColorPart|clampColorComponent|_537|_534|toFixed|_468|buildAndApplyFilter|_442|_441|_440|_439|position|_463|_447|removeChild|_449|uid|_428|_426|compliant|attributes|_422|_409|_412|_400|_395|_390|_389|_377|_375|_363|attr|ctx|repeat|_340|_339|isNotEmpty|_335|_333|opera|DeferredList|ret|_309|silentlyCancelled|canceller|_nextId|Array|_293|XMLHttpRequest|chained|_281|tail|_252|_225|msec|day|month|iso|Logger|_208|listeners|_200|_198|_194|_196|reduce|range|_169|_162|truth|registerRepr|_121|_70|_58|_56|_47|_45|_41|_13|_1|script|text|uri|documentElement|_630|_629|isTransparent|borderRightWidth|borderLeftWidth|marginRight|marginLeft|_602|_599|numSlices|solid|_597|block|SPAN|_579|fromString|offsetParent|signal|disconnectAll|disconnect|_570|_563|_557|preventDefault|stopPropagation|clientTop|clientLeft|pageY|pageX|keyCode|meta|ctrl|alt|target|black|_532|_524|floor|_513|_512|_500|_495|toLowerCase|_487|DEBUG|INFO|WARNING|FATAL|ERROR|colorTable|logFont|closed|inline|onclick|_438|_437|_445|RegExp|_452|space|title|updatetree|||||withDocument|withWindow||setDisplayForElement|none|renames|forEach|domConverters|escapeHTML|addElementClass|removeElementClass|once|_378|_380|_376|appendChildNodes|coerceToDOM|_355|opt|clientWidth|opacity|GenericError|fail|resultList|_307|_301|_fire|can|addCallbacks|_resback|percent|decimal|separator|twoDigitFloat|_274|_273|_264|_257|_250|_249|_254|_248|_243|_242|fmt|_240|_245|getTime|sec|hour|_209|slice|_206|iterateNextIter|registerIteratorFactory|arrayLikeIter|iteratorRegistry|takewhile|ifilterfalse|ifilter|_181|_176|_168|_166|_159|_tee|deque|arg|fun|jsonRegistry|reprString|reprRegistry|comparatorRegistry|urlEncode|_110|_108|cur|_95|_87|_71|im_preargs||_53|_57|_46|present|like|array|Argument|_15|_12|_632|_631|_633|SUBMODULES|only|_628|_627|_626|roundElement|_624|getElementsByTagAndClassName|_RoundCorners|_613|_whichSideBottom|_whichSideTop|_609|_605|_606|transparent|_borderColor|_604|_603|_601|_600|bgColor|fromElement|_594|_592|backgroundColor|_createCornerSlice|_createCorner|_590|_589|_587|_586|_581|_578|_577|currentDocument|fromBackground|errors|_568|_564||sigs|flattenArguments|_561|findIdentical|_560|_558||_556|attachEvent|addEventListener|funcOrStr|Event||_548|fromCharCode|String|_specialMacKeys|any|green|_namedColors|hsvToRGB|rgbToHSV|hslToRGB|rgbToHSL|_542|01|360|_fromColorString|_540|_536|_538|_529|_523|_518|fromComputedStyle|_511|_507|_508|_506|_501|fromHexString|_498|_496|_486|__class__|createLoggingPane|_459|_461|font|_462|_430|_435|1000|index|_460|getMessages|removeListener|_451||_457|_450|infore|_448|_456|logDebug|offsetHeight|span|input|_436|TR||HTML|open|alert|currentWindow|swapDOM|SELECT|FORM|INPUT|createDOMFunc|ignoreAttr|_421|call|_417|_410|_415|nodeName|_414|_413|emitHTML|good|_406|_399|_397|_393|_392|addLoadEvent|addToCallStack|_387|_386|_381|_382|_383|_373|_372|_369|createDOM|_365|Function|_360|_362|_358|_344|nodeWalk|formContents|_337|_338|_334|_332|offsetTop|offsetLeft|visibility|parentElement|||XMLHttpRequestError|BrowserComplianceError|CancelledError|AlreadyCalledError|evalJSONRequest|sendXMLHttpRequest|wait|doSimpleXMLHttpRequest|getXMLHttpRequest|succeed|_312|finishedCount|_308|_cbDeferred|_303|_297|queryString|_nothing|_289|XMLHTTP|ActiveXObject|eval|_284|_check|error|_279|default|rstrip|lstrip|formatLocale|roundToFixed|truncToFixed|_276|pow|_272|_271|_270|sign|_265|_263|tmp|_238|_232|toISODate|toISOTime|getFullYear|getDate|getMonth|_230|_padTwo|_228|useNativeConsole|_212|compareLogMessage|isLogMessage|unshift|_207||maxSize|_202|_199|logLevelAtLeast|console|hasIterateNext|iterateNext|arrayLike|groupby||exhaust|tee|dropwhile|applymap||islice|izip|cycle|count||_189|_188|_183|_185|_184|_186|_187|_182|identity|fetch|_180|_177|listMin|reprNumber|reprArrayLike|compareArrayLike|compareDateLike|isDateLike|findValue|_128|__export__|keyComparator|_124|_118|_93|_94|_90|_88|_84|_77|_68|_67|_66|_65|_60|im_func|_55|im_self|_48|_44|_42|_39|_36|_33|_27|_26|_25|_22|_24|_20|javascript|write|getAttribute||org|www|http|getElementsByTagName|roundClass|_623|_622|_621|_620|_isBottomRounded|_isTopRounded|_borderSize|_618|_617|_616|_615|_marginSize|_611|_setBorder|_607|_setMargin|blendedColor|_598|__unstable__wrapElement|fromParent|_setOptions|2px|borderColor|_593|hidden|overflow|_591|_588|_roundBottomCorners|_585|_roundTopCorners|_584|_583|_582|_580|_renderBorder|_roundCornersImpl|getComputedStyle|_doWrap|_571|_unloadCache|onunload|detachEvent|removeEventListener|_listener|objOrFunc|_552||_551|_549|onload|delete|112|KEY_F|KEY_|MINUS|KEY_SEMICOLON|KEY_DELETE|KEY_INSERT|KEY_ARROW_DOWN|KEY_ARROW_RIGHT|KEY_ARROW_UP||KEY_ARROW_LEFT|KEY_HOME|KEY_END|KEY_PAGE_DOWN|KEY_PAGE_UP|KEY_ENTER|KEY_NUM_PAD_CLEAR|63236|mousemove|contextmenu|click|mouseout|mouseover|_src|yellow|708090|purple|orange|ff00ff|magenta|778899|d3d3d3|808080|gray|696969|2f4f4f|darkred|a9a9a9|00ffff|cyan|brown|_547|_546||||compareRGB|_545||_543|fromHSLString|fromRGBString|round|_533|_hslValue|switch|background|_503|_504||fromName|_488|col|toRGBString|_hexString|_rgbString|_hslString|toPrecision|isLight||_481|_477|_476|_475|_474|_473|_469|_466|closePane|_458|onkeypress|_454|addListener|_455|close|test|scrollHeight|option|word|moz|_431|getElementById|html|pop|200|_|removeElement|showElement|hideElement|CANVAS|STRONG|FIELDSET|LEGEND|OPTGROUP|OPTION|TEXTAREA|LABEL|HR|BR|H3|H2|H1|PRE|TT|BUTTON|IMG|TH||TABLE||TFOOT|THEAD|TBODY|TD|LI|OL|||UL|checked|class|ignoreAttrFilter||_424|_419|nodeValue|scrapeText|_416|_418|sort|_411|toHTML|_404|hasElementClass|_403|_402|_401|swapElementClass|_398|_394|toggleElementClass|_391|focusOnLoad|_newCallStack|currentStyle|_371|replaceChildNodes|_364|_361|getNodeAttribute|_357|setNodeAttribute|_354|_352|_350|_353|toDOM|_346|_345|registerDOMConverter|selectedIndex|setElementPosition|setElementDimensions|tagName|absolute|getBoxObjectFor|getBoundingClientRect|elementPosition|_325|_324|_322|_323|offsetWidth|elementDimensions|clientHeight|innerWidth|getViewportDimensions|setOpacity|status|_317|deferred|_316|_newNamedError|maybeDeferred||gatherResults|callLater|loadJSONDoc|_311|consumeErrors|fireOnOneErrback|fireOnOneCallback|addErrback|_305|_304|_306|unlocked|release|_300|_299|_298|_296|_xhr_onreadystatechange|_xhr_canceller|304|responseText|Msxml2|addBoth|_pause|_continue|result|the|are|they|instances|_unpause|cancel|_280|_278|en_US|strip|percentFormat|twoDigitAverage|numberFormatter|_277|_275|isNaN|_259|_258|_260|_255|_253|_numberFormatter|_241|_239|_237|_236|_235|_234|_233|_231|toAmericanDate|toPaddedAmericanDate|americanDate|toISOTimestamp|isoTimestamp|isoDate|foot|sep||60000|_221|_isoRegexp|dispatchEvent|createEvent|warning|logWarning|fatal|logFatal|debug|logError|baseLog|_210|getMessageText|logToConsole|dispatchListeners|_204|_203|ident|_201|postError|alertListener|_197|_192|groupby_as_array|iextend|some|reversed|sorted|every|sum|_190|eat|_174|_173|_172|_171|_167|_163|_158|_157|_151|_144|_141||_139|_136|_134||_133|_132|zip|merge|isUndefined|isCallable|listMax|_131|_130|encodeURIComponent||_127|method|parseQueryString|evalJSON|registerJSON|serializeJSON|objMin|objMax|reverseKeyComparator|arrayEqual|objEqual|bindMethods|xfilter|xmap|isEmpty|isNull|isUndefinedOrNull|itemgetter|items|keys|setdefault|_126|_120|decodeURIComponent|_119|len|_109|_107|_104|_105|_101|_102|_98|||_100|_97|_96|_91|json|__json__|_82|_81|_80|_79|_76||_75|_74|_73|_69|_primitives|_64|_63||_62|_61|_59|_wrapDumbFunction|_49|_50|_31|_30|_21|_7|application|MochiKit_|createElementNS|namespaceURI|lastIndexOf|xul|there|gatekeeper|keymaster|mozilla|getElementsComputedStyle|_hasSingleTextChild|borderWidth|borderStyle|borderBottomWidth|borderTopWidth|borderTopStyle|fontSize|paddingBottom|insertBefore|paddingTop|marginBottom|marginTop|_575|property|see|handling|thrown|Multiple|element|||given|123|KEY_NUM_PAD_|105|KEY_APOSTROPHE|222|KEY_RIGHT_SQUARE_BRACKET|221|KEY_REVERSE_SOLIDUS|220|KEY_LEFT_SQUARE_BRACKET||219|KEY_GRAVE_ACCENT|192|KEY_SOLIDUS|191|KEY_FULL_STOP|190|KEY_HYPHEN|189||KEY_COMMA|188|KEY_EQUALS_SIGN|187|186|KEY_SCROLL_LOCK|145|KEY_NUM_LOCK|144|KEY_NUM_PAD_SOLIDUS|111|KEY_NUM_PAD_FULL_STOP|110|KEY_NUM_PAD_HYPHEN|109|KEY_NUM_PAD_PLUS_SIGN|107|KEY_NUM_PAD_ASTERISK|106|KEY_SELECT|KEY_WINDOWS_RIGHT|KEY_WINDOWS_LEFT|KEY_PRINT_SCREEN|KEY_SPACEBAR|KEY_ESCAPE|KEY_CAPS_LOCK|KEY_PAUSE|KEY_ALT|KEY_CTRL|KEY_SHIFT|KEY_TAB|KEY_BACKSPACE|63242|63272|63302|63233|63235|63232|63234|63273|63275|63277|63276|63289|returnValue|cancelBubble|keypress|KEY_UNKNOWN|keyup|keydown|shiftKey|metaKey||ctrlKey|altKey|toElement|srcElement|9acd32||yellowgreen||ffff00|f5f5f5|whitesmoke||ffffff|f5deb3|wheat|ee82ee|violet|40e0d0|turquoise|ff6347|tomato|d8bfd8|thistle|008080|teal|d2b48c|tan|4682b4|steelblue|00ff7f|springgreen|fffafa|snow|slategrey|slategray|6a5acd|slateblue|87ceeb|skyblue|c0c0c0|silver|a0522d|sienna|fff5ee|seashell|2e8b57|seagreen|f4a460|sandybrown|fa8072|salmon|8b4513|saddlebrown|4169e1|royalblue|bc8f8f|rosybrown|ff0000|800080|b0e0e6|powderblue|dda0dd|plum|ffc0cb|pink|cd853f||peru|ffdab9|peachpuff|ffefd5|papayawhip|db7093|palevioletred|afeeee|paleturquoise|98fb98|palegreen|eee8aa||palegoldenrod|da70d6|orchid|ff4500|orangered|ffa500|6b8e23|olivedrab|808000|olive|fdf5e6|oldlace|000080|navy|ffdead|navajowhite|ffe4b5|moccasin|ffe4e1|mistyrose|f5fffa|mintcream|191970|midnightblue|c71585|mediumvioletred|48d1cc|mediumturquoise|00fa9a|mediumspringgreen|7b68ee|mediumslateblue|3cb371|mediumseagreen|9370db|mediumpurple|ba55d3|mediumorchid|0000cd|mediumblue|66cdaa|mediumaquamarine|800000|maroon|faf0e6|linen|32cd32|limegreen|00ff00|lime|ffffe0|lightyellow|b0c4de|lightsteelblue|lightslategrey|lightslategray||87cefa|lightskyblue|20b2aa|lightseagreen|ffa07a|lightsalmon|ffb6c1|lightpink|lightgrey|90ee90|lightgreen|lightgray|fafad2|lightgoldenrodyellow|e0ffff|lightcyan|f08080|lightcoral|add8e6|lightblue|fffacd|lemonchiffon|7cfc00|lawngreen|fff0f5|lavenderblush|e6e6fa|lavender|f0e68c|khaki|fffff0|ivory|4b0082|indigo|cd5c5c|indianred|ff69b4|hotpink|f0fff0|honeydew|grey|adff2f|greenyellow|008000|daa520|goldenrod|ffd700||gold|f8f8ff|ghostwhite|dcdcdc|gainsboro|fuchsia|228b22|forestgreen|fffaf0|floralwhite|b22222|firebrick|1e90ff|dodgerblue|dimgrey|dimgray|00bfff|deepskyblue|ff1493|deeppink|9400d3|darkviolet|00ced1|darkturquoise|darkslategrey|darkslategray|483d8b|darkslateblue|8fbc8f|darkseagreen|e9967a|darksalmon|8b0000|9932cc|darkorchid|ff8c00|darkorange|556b2f|darkolivegreen|8b008b|darkmagenta|bdb76b|darkkhaki|darkgrey|006400|darkgreen|darkgray|b8860b|darkgoldenrod|008b8b|darkcyan|00008b|darkblue|dc143c|crimson|fff8dc|cornsilk|6495ed|cornflowerblue|ff7f50|coral|d2691e||chocolate|7fff00|chartreuse|5f9ea0|cadetblue|deb887|burlywood|a52a2a|8a2be2|blueviolet|0000ff|ffebcd||blanchedalmond|000000|ffe4c4|bisque|f5f5dc|beige|f0ffff|azure|7fffd4|aquamarine|aqua|faebd7|antiquewhite|f0f8ff|aliceblue|lightGray|darkGray|namedColors|blackColor|fromText|whiteColor|_510|_509|PI|rad|deg|transparentColor|_494|_493|_492|fromHSV|_491|_490|_489|asHSV|toHexString|rgba|hsla|toHSLString|isDark|lighterColorWithLevel|darkerColorWithLevel|colorWithLightness|colorWithSaturation|colorWithHue|colorWithAlpha||serif|sans|Verdana||8pt|8em|auto||Close|Clear||Load|Filter||10em||fixed|regex|emergency|line|margin|_Listener|dtd|loose|html4|w3|EN|Transitional|DTD|W3C|PUBLIC|DOCTYPE|blocking|due|debugging|able|Not|resizable|dependent|href|location|_MochiKit_LoggingPane|_429|canvas|strong|fieldset|legend|optgroup|select|form|textarea|label|img|table|tfoot|thead|tbody|htmlFor||useMap|usemap|defaultChecked|hasChildNodes|quot|amp|_405|focus|replaceChild|checkbox||radio|_win|BODY||safari|version|userAgent|navigator|innerHeight|alpha|khtml|Tried|acquire|clearTimeout|setTimeout|GET|ignore|send|abort|failed|Request|readyState|support|does|Browser|Microsoft|_288|_287|used|Deferreds|Chained|success|unfired|fr_FR|de_DE|00|abs|search|pattern|Invalid|getTimezoneOffset|getSeconds|getMinutes|getHours|UTC|3600000|initEvent|Events|debuggingBookmarklet|MESSAGES|LAST|_205|clear|ninfo|nlevel|timestamp|reverse|takes|initial|with|sequence|empty|iterable|numbers|dateLike|escape|find|forward|unregister|unescape|Object|compared|item|contains|logor|logand|cle|clt|cge|cgt|cne|ceq|zrshift|rshift|lshift|xor|mul|mod|sub|add|neg|lognot|_9|_2'.split('|'),0,{})
+
+
+/*
+ * jQuery 1.2.1 - New Wave Javascript
+ *
+ * Copyright (c) 2007 John Resig (jquery.com)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * $Date$
+ * $Rev: 3353 $
+ */
+
+var decompressedJQuery = function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(G(){9(1m E!="W")H w=E;H E=18.15=G(a,b){I 6 7u E?6.5N(a,b):1u E(a,b)};9(1m $!="W")H D=$;18.$=E;H u=/^[^<]*(<(.|\\s)+>)[^>]*$|^#(\\w+)$/;E.1b=E.3A={5N:G(c,a){c=c||U;9(1m c=="1M"){H m=u.2S(c);9(m&&(m[1]||!a)){9(m[1])c=E.4D([m[1]],a);J{H b=U.3S(m[3]);9(b)9(b.22!=m[3])I E().1Y(c);J{6[0]=b;6.K=1;I 6}J c=[]}}J I 1u E(a).1Y(c)}J 9(E.1n(c))I 1u E(U)[E.1b.2d?"2d":"39"](c);I 6.6v(c.1c==1B&&c||(c.4c||c.K&&c!=18&&!c.1y&&c[0]!=W&&c[0].1y)&&E.2h(c)||[c])},4c:"1.2.1",7Y:G(){I 6.K},K:0,21:G(a){I a==W?E.2h(6):6[a]},2o:G(a){H b=E(a);b.4Y=6;I b},6v:G(a){6.K=0;1B.3A.1a.16(6,a);I 6},N:G(a,b){I E.N(6,a,b)},4I:G(a){H b=-1;6.N(G(i){9(6==a)b=i});I b},1x:G(f,d,e){H c=f;9(f.1c==3X)9(d==W)I 6.K&&E[e||"1x"](6[0],f)||W;J{c={};c[f]=d}I 6.N(G(a){L(H b 1i c)E.1x(e?6.R:6,b,E.1e(6,c[b],e,a,b))})},17:G(b,a){I 6.1x(b,a,"3C")},2g:G(e){9(1m e!="5i"&&e!=S)I 6.4n().3g(U.6F(e));H t="";E.N(e||6,G(){E.N(6.3j,G(){9(6.1y!=8)t+=6.1y!=1?6.6x:E.1b.2g([6])})});I t},5m:G(b){9(6[0])E(b,6[0].3H).6u().3d(6[0]).1X(G(){H a=6;1W(a.1w)a=a.1w;I a}).3g(6);I 6},8m:G(a){I 6.N(G(){E(6).6q().5m(a)})},8d:G(a){I 6.N(G(){E(6).5m(a)})},3g:G(){I 6.3z(1q,Q,1,G(a){6.58(a)})},6j:G(){I 6.3z(1q,Q,-1,G(a){6.3d(a,6.1w)})},6g:G(){I 6.3z(1q,P,1,G(a){6.12.3d(a,6)})},50:G(){I 6.3z(1q,P,-1,G(a){6.12.3d(a,6.2q)})},2D:G(){I 6.4Y||E([])},1Y:G(t){H b=E.1X(6,G(a){I E.1Y(t,a)});I 6.2o(/[^+>] [^+>]/.14(t)||t.1g("..")>-1?E.4V(b):b)},6u:G(e){H f=6.1X(G(){I 6.67?E(6.67)[0]:6.4R(Q)});H d=f.1Y("*").4O().N(G(){9(6[F]!=W)6[F]=S});9(e===Q)6.1Y("*").4O().N(G(i){H c=E.M(6,"2P");L(H a 1i c)L(H b 1i c[a])E.1j.1f(d[i],a,c[a][b],c[a][b].M)});I f},1E:G(t){I 6.2o(E.1n(t)&&E.2W(6,G(b,a){I t.16(b,[a])})||E.3m(t,6))},5V:G(t){I 6.2o(t.1c==3X&&E.3m(t,6,Q)||E.2W(6,G(a){I(t.1c==1B||t.4c)?E.2A(a,t)<0:a!=t}))},1f:G(t){I 6.2o(E.1R(6.21(),t.1c==3X?E(t).21():t.K!=W&&(!t.11||E.11(t,"2Y"))?t:[t]))},3t:G(a){I a?E.3m(a,6).K>0:P},7c:G(a){I 6.3t("."+a)},3i:G(b){9(b==W){9(6.K){H c=6[0];9(E.11(c,"24")){H e=c.4Z,a=[],Y=c.Y,2G=c.O=="24-2G";9(e<0)I S;L(H i=2G?e:0,33=2G?e+1:Y.K;i<33;i++){H d=Y[i];9(d.26){H b=E.V.1h&&!d.9V["1Q"].9L?d.2g:d.1Q;9(2G)I b;a.1a(b)}}I a}J I 6[0].1Q.1p(/\\r/g,"")}}J I 6.N(G(){9(b.1c==1B&&/4k|5j/.14(6.O))6.2Q=(E.2A(6.1Q,b)>=0||E.2A(6.2H,b)>=0);J 9(E.11(6,"24")){H a=b.1c==1B?b:[b];E("9h",6).N(G(){6.26=(E.2A(6.1Q,a)>=0||E.2A(6.2g,a)>=0)});9(!a.K)6.4Z=-1}J 6.1Q=b})},4o:G(a){I a==W?(6.K?6[0].3O:S):6.4n().3g(a)},6H:G(a){I 6.50(a).28()},6E:G(i){I 6.2J(i,i+1)},2J:G(){I 6.2o(1B.3A.2J.16(6,1q))},1X:G(b){I 6.2o(E.1X(6,G(a,i){I b.2O(a,i,a)}))},4O:G(){I 6.1f(6.4Y)},3z:G(f,d,g,e){H c=6.K>1,a;I 6.N(G(){9(!a){a=E.4D(f,6.3H);9(g<0)a.8U()}H b=6;9(d&&E.11(6,"1I")&&E.11(a[0],"4m"))b=6.4l("1K")[0]||6.58(U.5B("1K"));E.N(a,G(){H a=c?6.4R(Q):6;9(!5A(0,a))e.2O(b,a)})})}};G 5A(i,b){H a=E.11(b,"1J");9(a){9(b.3k)E.3G({1d:b.3k,3e:P,1V:"1J"});J E.5f(b.2g||b.6s||b.3O||"");9(b.12)b.12.3b(b)}J 9(b.1y==1)E("1J",b).N(5A);I a}E.1k=E.1b.1k=G(){H c=1q[0]||{},a=1,2c=1q.K,5e=P;9(c.1c==8o){5e=c;c=1q[1]||{}}9(2c==1){c=6;a=0}H b;L(;a<2c;a++)9((b=1q[a])!=S)L(H i 1i b){9(c==b[i])6r;9(5e&&1m b[i]==\'5i\'&&c[i])E.1k(c[i],b[i]);J 9(b[i]!=W)c[i]=b[i]}I c};H F="15"+(1u 3D()).3B(),6p=0,5c={};E.1k({8a:G(a){18.$=D;9(a)18.15=w;I E},1n:G(a){I!!a&&1m a!="1M"&&!a.11&&a.1c!=1B&&/G/i.14(a+"")},4a:G(a){I a.2V&&!a.1G||a.37&&a.3H&&!a.3H.1G},5f:G(a){a=E.36(a);9(a){9(18.6l)18.6l(a);J 9(E.V.1N)18.56(a,0);J 3w.2O(18,a)}},11:G(b,a){I b.11&&b.11.27()==a.27()},1L:{},M:G(c,d,b){c=c==18?5c:c;H a=c[F];9(!a)a=c[F]=++6p;9(d&&!E.1L[a])E.1L[a]={};9(b!=W)E.1L[a][d]=b;I d?E.1L[a][d]:a},30:G(c,b){c=c==18?5c:c;H a=c[F];9(b){9(E.1L[a]){2E E.1L[a][b];b="";L(b 1i E.1L[a])1T;9(!b)E.30(c)}}J{2a{2E c[F]}29(e){9(c.53)c.53(F)}2E E.1L[a]}},N:G(a,b,c){9(c){9(a.K==W)L(H i 1i a)b.16(a[i],c);J L(H i=0,48=a.K;i<48;i++)9(b.16(a[i],c)===P)1T}J{9(a.K==W)L(H i 1i a)b.2O(a[i],i,a[i]);J L(H i=0,48=a.K,3i=a[0];i<48&&b.2O(3i,i,3i)!==P;3i=a[++i]){}}I a},1e:G(c,b,d,e,a){9(E.1n(b))b=b.2O(c,[e]);H f=/z-?4I|7T-?7Q|1r|69|7P-?1H/i;I b&&b.1c==4W&&d=="3C"&&!f.14(a)?b+"2T":b},1o:{1f:G(b,c){E.N((c||"").2l(/\\s+/),G(i,a){9(!E.1o.3K(b.1o,a))b.1o+=(b.1o?" ":"")+a})},28:G(b,c){b.1o=c!=W?E.2W(b.1o.2l(/\\s+/),G(a){I!E.1o.3K(c,a)}).66(" "):""},3K:G(t,c){I E.2A(c,(t.1o||t).3s().2l(/\\s+/))>-1}},2k:G(e,o,f){L(H i 1i o){e.R["3r"+i]=e.R[i];e.R[i]=o[i]}f.16(e,[]);L(H i 1i o)e.R[i]=e.R["3r"+i]},17:G(e,p){9(p=="1H"||p=="2N"){H b={},42,41,d=["7J","7I","7G","7F"];E.N(d,G(){b["7C"+6]=0;b["7B"+6+"5Z"]=0});E.2k(e,b,G(){9(E(e).3t(\':3R\')){42=e.7A;41=e.7w}J{e=E(e.4R(Q)).1Y(":4k").5W("2Q").2D().17({4C:"1P",2X:"4F",19:"2Z",7o:"0",1S:"0"}).5R(e.12)[0];H a=E.17(e.12,"2X")||"3V";9(a=="3V")e.12.R.2X="7g";42=e.7e;41=e.7b;9(a=="3V")e.12.R.2X="3V";e.12.3b(e)}});I p=="1H"?42:41}I E.3C(e,p)},3C:G(h,j,i){H g,2w=[],2k=[];G 3n(a){9(!E.V.1N)I P;H b=U.3o.3Z(a,S);I!b||b.4y("3n")==""}9(j=="1r"&&E.V.1h){g=E.1x(h.R,"1r");I g==""?"1":g}9(j.1t(/4u/i))j=y;9(!i&&h.R[j])g=h.R[j];J 9(U.3o&&U.3o.3Z){9(j.1t(/4u/i))j="4u";j=j.1p(/([A-Z])/g,"-$1").2p();H d=U.3o.3Z(h,S);9(d&&!3n(h))g=d.4y(j);J{L(H a=h;a&&3n(a);a=a.12)2w.4w(a);L(a=0;a<2w.K;a++)9(3n(2w[a])){2k[a]=2w[a].R.19;2w[a].R.19="2Z"}g=j=="19"&&2k[2w.K-1]!=S?"2s":U.3o.3Z(h,S).4y(j)||"";L(a=0;a<2k.K;a++)9(2k[a]!=S)2w[a].R.19=2k[a]}9(j=="1r"&&g=="")g="1"}J 9(h.3Q){H f=j.1p(/\\-(\\w)/g,G(m,c){I c.27()});g=h.3Q[j]||h.3Q[f];9(!/^\\d+(2T)?$/i.14(g)&&/^\\d/.14(g)){H k=h.R.1S;H e=h.4v.1S;h.4v.1S=h.3Q.1S;h.R.1S=g||0;g=h.R.71+"2T";h.R.1S=k;h.4v.1S=e}}I g},4D:G(a,e){H r=[];e=e||U;E.N(a,G(i,d){9(!d)I;9(d.1c==4W)d=d.3s();9(1m d=="1M"){d=d.1p(/(<(\\w+)[^>]*?)\\/>/g,G(m,a,b){I b.1t(/^(70|6Z|6Y|9Q|4t|9N|9K|3a|9G|9E)$/i)?m:a+"></"+b+">"});H s=E.36(d).2p(),1s=e.5B("1s"),2x=[];H c=!s.1g("<9y")&&[1,"<24>","</24>"]||!s.1g("<9w")&&[1,"<6T>","</6T>"]||s.1t(/^<(9u|1K|9t|9r|9p)/)&&[1,"<1I>","</1I>"]||!s.1g("<4m")&&[2,"<1I><1K>","</1K></1I>"]||(!s.1g("<9m")||!s.1g("<9k"))&&[3,"<1I><1K><4m>","</4m></1K></1I>"]||!s.1g("<6Y")&&[2,"<1I><1K></1K><6L>","</6L></1I>"]||E.V.1h&&[1,"1s<1s>","</1s>"]||[0,"",""];1s.3O=c[1]+d+c[2];1W(c[0]--)1s=1s.5p;9(E.V.1h){9(!s.1g("<1I")&&s.1g("<1K")<0)2x=1s.1w&&1s.1w.3j;J 9(c[1]=="<1I>"&&s.1g("<1K")<0)2x=1s.3j;L(H n=2x.K-1;n>=0;--n)9(E.11(2x[n],"1K")&&!2x[n].3j.K)2x[n].12.3b(2x[n]);9(/^\\s/.14(d))1s.3d(e.6F(d.1t(/^\\s*/)[0]),1s.1w)}d=E.2h(1s.3j)}9(0===d.K&&(!E.11(d,"2Y")&&!E.11(d,"24")))I;9(d[0]==W||E.11(d,"2Y")||d.Y)r.1a(d);J r=E.1R(r,d)});I r},1x:G(c,d,a){H e=E.4a(c)?{}:E.5o;9(d=="26"&&E.V.1N)c.12.4Z;9(e[d]){9(a!=W)c[e[d]]=a;I c[e[d]]}J 9(E.V.1h&&d=="R")I E.1x(c.R,"9e",a);J 9(a==W&&E.V.1h&&E.11(c,"2Y")&&(d=="9d"||d=="9a"))I c.97(d).6x;J 9(c.37){9(a!=W){9(d=="O"&&E.11(c,"4t")&&c.12)6G"O 94 93\'t 92 91";c.90(d,a)}9(E.V.1h&&/6C|3k/.14(d)&&!E.4a(c))I c.4p(d,2);I c.4p(d)}J{9(d=="1r"&&E.V.1h){9(a!=W){c.69=1;c.1E=(c.1E||"").1p(/6O\\([^)]*\\)/,"")+(3I(a).3s()=="8S"?"":"6O(1r="+a*6A+")")}I c.1E?(3I(c.1E.1t(/1r=([^)]*)/)[1])/6A).3s():""}d=d.1p(/-([a-z])/8Q,G(z,b){I b.27()});9(a!=W)c[d]=a;I c[d]}},36:G(t){I(t||"").1p(/^\\s+|\\s+$/g,"")},2h:G(a){H r=[];9(1m a!="8P")L(H i=0,2c=a.K;i<2c;i++)r.1a(a[i]);J r=a.2J(0);I r},2A:G(b,a){L(H i=0,2c=a.K;i<2c;i++)9(a[i]==b)I i;I-1},1R:G(a,b){9(E.V.1h){L(H i=0;b[i];i++)9(b[i].1y!=8)a.1a(b[i])}J L(H i=0;b[i];i++)a.1a(b[i]);I a},4V:G(b){H r=[],2f={};2a{L(H i=0,6y=b.K;i<6y;i++){H a=E.M(b[i]);9(!2f[a]){2f[a]=Q;r.1a(b[i])}}}29(e){r=b}I r},2W:G(b,a,c){9(1m a=="1M")a=3w("P||G(a,i){I "+a+"}");H d=[];L(H i=0,4g=b.K;i<4g;i++)9(!c&&a(b[i],i)||c&&!a(b[i],i))d.1a(b[i]);I d},1X:G(c,b){9(1m b=="1M")b=3w("P||G(a){I "+b+"}");H d=[];L(H i=0,4g=c.K;i<4g;i++){H a=b(c[i],i);9(a!==S&&a!=W){9(a.1c!=1B)a=[a];d=d.8M(a)}}I d}});H v=8K.8I.2p();E.V={4s:(v.1t(/.+(?:8F|8E|8C|8B)[\\/: ]([\\d.]+)/)||[])[1],1N:/6w/.14(v),34:/34/.14(v),1h:/1h/.14(v)&&!/34/.14(v),35:/35/.14(v)&&!/(8z|6w)/.14(v)};H y=E.V.1h?"4h":"5h";E.1k({5g:!E.V.1h||U.8y=="8x",4h:E.V.1h?"4h":"5h",5o:{"L":"8w","8v":"1o","4u":y,5h:y,4h:y,3O:"3O",1o:"1o",1Q:"1Q",3c:"3c",2Q:"2Q",8u:"8t",26:"26",8s:"8r"}});E.N({1D:"a.12",8q:"15.4e(a,\'12\')",8p:"15.2I(a,2,\'2q\')",8n:"15.2I(a,2,\'4d\')",8l:"15.4e(a,\'2q\')",8k:"15.4e(a,\'4d\')",8j:"15.5d(a.12.1w,a)",8i:"15.5d(a.1w)",6q:"15.11(a,\'8h\')?a.8f||a.8e.U:15.2h(a.3j)"},G(i,n){E.1b[i]=G(a){H b=E.1X(6,n);9(a&&1m a=="1M")b=E.3m(a,b);I 6.2o(E.4V(b))}});E.N({5R:"3g",8c:"6j",3d:"6g",8b:"50",89:"6H"},G(i,n){E.1b[i]=G(){H a=1q;I 6.N(G(){L(H j=0,2c=a.K;j<2c;j++)E(a[j])[n](6)})}});E.N({5W:G(a){E.1x(6,a,"");6.53(a)},88:G(c){E.1o.1f(6,c)},87:G(c){E.1o.28(6,c)},86:G(c){E.1o[E.1o.3K(6,c)?"28":"1f"](6,c)},28:G(a){9(!a||E.1E(a,[6]).r.K){E.30(6);6.12.3b(6)}},4n:G(){E("*",6).N(G(){E.30(6)});1W(6.1w)6.3b(6.1w)}},G(i,n){E.1b[i]=G(){I 6.N(n,1q)}});E.N(["85","5Z"],G(i,a){H n=a.2p();E.1b[n]=G(h){I 6[0]==18?E.V.1N&&3y["84"+a]||E.5g&&38.33(U.2V["5a"+a],U.1G["5a"+a])||U.1G["5a"+a]:6[0]==U?38.33(U.1G["6n"+a],U.1G["6m"+a]):h==W?(6.K?E.17(6[0],n):S):6.17(n,h.1c==3X?h:h+"2T")}});H C=E.V.1N&&3x(E.V.4s)<83?"(?:[\\\\w*57-]|\\\\\\\\.)":"(?:[\\\\w\\82-\\81*57-]|\\\\\\\\.)",6k=1u 47("^>\\\\s*("+C+"+)"),6i=1u 47("^("+C+"+)(#)("+C+"+)"),6h=1u 47("^([#.]?)("+C+"*)");E.1k({55:{"":"m[2]==\'*\'||15.11(a,m[2])","#":"a.4p(\'22\')==m[2]",":":{80:"i<m[3]-0",7Z:"i>m[3]-0",2I:"m[3]-0==i",6E:"m[3]-0==i",3v:"i==0",3u:"i==r.K-1",6f:"i%2==0",6e:"i%2","3v-46":"a.12.4l(\'*\')[0]==a","3u-46":"15.2I(a.12.5p,1,\'4d\')==a","7X-46":"!15.2I(a.12.5p,2,\'4d\')",1D:"a.1w",4n:"!a.1w",7W:"(a.6s||a.7V||15(a).2g()||\'\').1g(m[3])>=0",3R:\'"1P"!=a.O&&15.17(a,"19")!="2s"&&15.17(a,"4C")!="1P"\',1P:\'"1P"==a.O||15.17(a,"19")=="2s"||15.17(a,"4C")=="1P"\',7U:"!a.3c",3c:"a.3c",2Q:"a.2Q",26:"a.26||15.1x(a,\'26\')",2g:"\'2g\'==a.O",4k:"\'4k\'==a.O",5j:"\'5j\'==a.O",54:"\'54\'==a.O",52:"\'52\'==a.O",51:"\'51\'==a.O",6d:"\'6d\'==a.O",6c:"\'6c\'==a.O",2r:\'"2r"==a.O||15.11(a,"2r")\',4t:"/4t|24|6b|2r/i.14(a.11)",3K:"15.1Y(m[3],a).K",7S:"/h\\\\d/i.14(a.11)",7R:"15.2W(15.32,G(1b){I a==1b.T;}).K"}},6a:[/^(\\[) *@?([\\w-]+) *([!*$^~=]*) *(\'?"?)(.*?)\\4 *\\]/,/^(:)([\\w-]+)\\("?\'?(.*?(\\(.*?\\))?[^(]*?)"?\'?\\)/,1u 47("^([:.#]*)("+C+"+)")],3m:G(a,c,b){H d,2b=[];1W(a&&a!=d){d=a;H f=E.1E(a,c,b);a=f.t.1p(/^\\s*,\\s*/,"");2b=b?c=f.r:E.1R(2b,f.r)}I 2b},1Y:G(t,o){9(1m t!="1M")I[t];9(o&&!o.1y)o=S;o=o||U;H d=[o],2f=[],3u;1W(t&&3u!=t){H r=[];3u=t;t=E.36(t);H l=P;H g=6k;H m=g.2S(t);9(m){H p=m[1].27();L(H i=0;d[i];i++)L(H c=d[i].1w;c;c=c.2q)9(c.1y==1&&(p=="*"||c.11.27()==p.27()))r.1a(c);d=r;t=t.1p(g,"");9(t.1g(" ")==0)6r;l=Q}J{g=/^([>+~])\\s*(\\w*)/i;9((m=g.2S(t))!=S){r=[];H p=m[2],1R={};m=m[1];L(H j=0,31=d.K;j<31;j++){H n=m=="~"||m=="+"?d[j].2q:d[j].1w;L(;n;n=n.2q)9(n.1y==1){H h=E.M(n);9(m=="~"&&1R[h])1T;9(!p||n.11.27()==p.27()){9(m=="~")1R[h]=Q;r.1a(n)}9(m=="+")1T}}d=r;t=E.36(t.1p(g,""));l=Q}}9(t&&!l){9(!t.1g(",")){9(o==d[0])d.44();2f=E.1R(2f,d);r=d=[o];t=" "+t.68(1,t.K)}J{H k=6i;H m=k.2S(t);9(m){m=[0,m[2],m[3],m[1]]}J{k=6h;m=k.2S(t)}m[2]=m[2].1p(/\\\\/g,"");H f=d[d.K-1];9(m[1]=="#"&&f&&f.3S&&!E.4a(f)){H q=f.3S(m[2]);9((E.V.1h||E.V.34)&&q&&1m q.22=="1M"&&q.22!=m[2])q=E(\'[@22="\'+m[2]+\'"]\',f)[0];d=r=q&&(!m[3]||E.11(q,m[3]))?[q]:[]}J{L(H i=0;d[i];i++){H a=m[1]=="#"&&m[3]?m[3]:m[1]!=""||m[0]==""?"*":m[2];9(a=="*"&&d[i].11.2p()=="5i")a="3a";r=E.1R(r,d[i].4l(a))}9(m[1]==".")r=E.4X(r,m[2]);9(m[1]=="#"){H e=[];L(H i=0;r[i];i++)9(r[i].4p("22")==m[2]){e=[r[i]];1T}r=e}d=r}t=t.1p(k,"")}}9(t){H b=E.1E(t,r);d=r=b.r;t=E.36(b.t)}}9(t)d=[];9(d&&o==d[0])d.44();2f=E.1R(2f,d);I 2f},4X:G(r,m,a){m=" "+m+" ";H c=[];L(H i=0;r[i];i++){H b=(" "+r[i].1o+" ").1g(m)>=0;9(!a&&b||a&&!b)c.1a(r[i])}I c},1E:G(t,r,h){H d;1W(t&&t!=d){d=t;H p=E.6a,m;L(H i=0;p[i];i++){m=p[i].2S(t);9(m){t=t.7O(m[0].K);m[2]=m[2].1p(/\\\\/g,"");1T}}9(!m)1T;9(m[1]==":"&&m[2]=="5V")r=E.1E(m[3],r,Q).r;J 9(m[1]==".")r=E.4X(r,m[2],h);J 9(m[1]=="["){H g=[],O=m[3];L(H i=0,31=r.K;i<31;i++){H a=r[i],z=a[E.5o[m[2]]||m[2]];9(z==S||/6C|3k|26/.14(m[2]))z=E.1x(a,m[2])||\'\';9((O==""&&!!z||O=="="&&z==m[5]||O=="!="&&z!=m[5]||O=="^="&&z&&!z.1g(m[5])||O=="$="&&z.68(z.K-m[5].K)==m[5]||(O=="*="||O=="~=")&&z.1g(m[5])>=0)^h)g.1a(a)}r=g}J 9(m[1]==":"&&m[2]=="2I-46"){H e={},g=[],14=/(\\d*)n\\+?(\\d*)/.2S(m[3]=="6f"&&"2n"||m[3]=="6e"&&"2n+1"||!/\\D/.14(m[3])&&"n+"+m[3]||m[3]),3v=(14[1]||1)-0,d=14[2]-0;L(H i=0,31=r.K;i<31;i++){H j=r[i],12=j.12,22=E.M(12);9(!e[22]){H c=1;L(H n=12.1w;n;n=n.2q)9(n.1y==1)n.4U=c++;e[22]=Q}H b=P;9(3v==1){9(d==0||j.4U==d)b=Q}J 9((j.4U+d)%3v==0)b=Q;9(b^h)g.1a(j)}r=g}J{H f=E.55[m[1]];9(1m f!="1M")f=E.55[m[1]][m[2]];f=3w("P||G(a,i){I "+f+"}");r=E.2W(r,f,h)}}I{r:r,t:t}},4e:G(b,c){H d=[];H a=b[c];1W(a&&a!=U){9(a.1y==1)d.1a(a);a=a[c]}I d},2I:G(a,e,c,b){e=e||1;H d=0;L(;a;a=a[c])9(a.1y==1&&++d==e)1T;I a},5d:G(n,a){H r=[];L(;n;n=n.2q){9(n.1y==1&&(!a||n!=a))r.1a(n)}I r}});E.1j={1f:G(g,e,c,h){9(E.V.1h&&g.4j!=W)g=18;9(!c.2u)c.2u=6.2u++;9(h!=W){H d=c;c=G(){I d.16(6,1q)};c.M=h;c.2u=d.2u}H i=e.2l(".");e=i[0];c.O=i[1];H b=E.M(g,"2P")||E.M(g,"2P",{});H f=E.M(g,"2t",G(){H a;9(1m E=="W"||E.1j.4T)I a;a=E.1j.2t.16(g,1q);I a});H j=b[e];9(!j){j=b[e]={};9(g.4S)g.4S(e,f,P);J g.7N("43"+e,f)}j[c.2u]=c;6.1Z[e]=Q},2u:1,1Z:{},28:G(d,c,b){H e=E.M(d,"2P"),2L,4I;9(1m c=="1M"){H a=c.2l(".");c=a[0]}9(e){9(c&&c.O){b=c.4Q;c=c.O}9(!c){L(c 1i e)6.28(d,c)}J 9(e[c]){9(b)2E e[c][b.2u];J L(b 1i e[c])9(!a[1]||e[c][b].O==a[1])2E e[c][b];L(2L 1i e[c])1T;9(!2L){9(d.4P)d.4P(c,E.M(d,"2t"),P);J d.7M("43"+c,E.M(d,"2t"));2L=S;2E e[c]}}L(2L 1i e)1T;9(!2L){E.30(d,"2P");E.30(d,"2t")}}},1F:G(d,b,e,c,f){b=E.2h(b||[]);9(!e){9(6.1Z[d])E("*").1f([18,U]).1F(d,b)}J{H a,2L,1b=E.1n(e[d]||S),4N=!b[0]||!b[0].2M;9(4N)b.4w(6.4M({O:d,2m:e}));b[0].O=d;9(E.1n(E.M(e,"2t")))a=E.M(e,"2t").16(e,b);9(!1b&&e["43"+d]&&e["43"+d].16(e,b)===P)a=P;9(4N)b.44();9(f&&f.16(e,b)===P)a=P;9(1b&&c!==P&&a!==P&&!(E.11(e,\'a\')&&d=="4L")){6.4T=Q;e[d]()}6.4T=P}I a},2t:G(d){H a;d=E.1j.4M(d||18.1j||{});H b=d.O.2l(".");d.O=b[0];H c=E.M(6,"2P")&&E.M(6,"2P")[d.O],3q=1B.3A.2J.2O(1q,1);3q.4w(d);L(H j 1i c){3q[0].4Q=c[j];3q[0].M=c[j].M;9(!b[1]||c[j].O==b[1]){H e=c[j].16(6,3q);9(a!==P)a=e;9(e===P){d.2M();d.3p()}}}9(E.V.1h)d.2m=d.2M=d.3p=d.4Q=d.M=S;I a},4M:G(c){H a=c;c=E.1k({},a);c.2M=G(){9(a.2M)a.2M();a.7L=P};c.3p=G(){9(a.3p)a.3p();a.7K=Q};9(!c.2m&&c.65)c.2m=c.65;9(E.V.1N&&c.2m.1y==3)c.2m=a.2m.12;9(!c.4K&&c.4J)c.4K=c.4J==c.2m?c.7H:c.4J;9(c.64==S&&c.63!=S){H e=U.2V,b=U.1G;c.64=c.63+(e&&e.2R||b.2R||0);c.7E=c.7D+(e&&e.2B||b.2B||0)}9(!c.3Y&&(c.61||c.60))c.3Y=c.61||c.60;9(!c.5F&&c.5D)c.5F=c.5D;9(!c.3Y&&c.2r)c.3Y=(c.2r&1?1:(c.2r&2?3:(c.2r&4?2:0)));I c}};E.1b.1k({3W:G(c,a,b){I c=="5Y"?6.2G(c,a,b):6.N(G(){E.1j.1f(6,c,b||a,b&&a)})},2G:G(d,b,c){I 6.N(G(){E.1j.1f(6,d,G(a){E(6).5X(a);I(c||b).16(6,1q)},c&&b)})},5X:G(a,b){I 6.N(G(){E.1j.28(6,a,b)})},1F:G(c,a,b){I 6.N(G(){E.1j.1F(c,a,6,Q,b)})},7x:G(c,a,b){9(6[0])I E.1j.1F(c,a,6[0],P,b)},25:G(){H a=1q;I 6.4L(G(e){6.4H=0==6.4H?1:0;e.2M();I a[6.4H].16(6,[e])||P})},7v:G(f,g){G 4G(e){H p=e.4K;1W(p&&p!=6)2a{p=p.12}29(e){p=6};9(p==6)I P;I(e.O=="4x"?f:g).16(6,[e])}I 6.4x(4G).5U(4G)},2d:G(f){5T();9(E.3T)f.16(U,[E]);J E.3l.1a(G(){I f.16(6,[E])});I 6}});E.1k({3T:P,3l:[],2d:G(){9(!E.3T){E.3T=Q;9(E.3l){E.N(E.3l,G(){6.16(U)});E.3l=S}9(E.V.35||E.V.34)U.4P("5S",E.2d,P);9(!18.7t.K)E(18).39(G(){E("#4E").28()})}}});E.N(("7s,7r,39,7q,6n,5Y,4L,7p,"+"7n,7m,7l,4x,5U,7k,24,"+"51,7j,7i,7h,3U").2l(","),G(i,o){E.1b[o]=G(f){I f?6.3W(o,f):6.1F(o)}});H x=P;G 5T(){9(x)I;x=Q;9(E.V.35||E.V.34)U.4S("5S",E.2d,P);J 9(E.V.1h){U.7f("<7d"+"7y 22=4E 7z=Q "+"3k=//:><\\/1J>");H a=U.3S("4E");9(a)a.62=G(){9(6.2C!="1l")I;E.2d()};a=S}J 9(E.V.1N)E.4B=4j(G(){9(U.2C=="5Q"||U.2C=="1l"){4A(E.4B);E.4B=S;E.2d()}},10);E.1j.1f(18,"39",E.2d)}E.1b.1k({39:G(g,d,c){9(E.1n(g))I 6.3W("39",g);H e=g.1g(" ");9(e>=0){H i=g.2J(e,g.K);g=g.2J(0,e)}c=c||G(){};H f="4z";9(d)9(E.1n(d)){c=d;d=S}J{d=E.3a(d);f="5P"}H h=6;E.3G({1d:g,O:f,M:d,1l:G(a,b){9(b=="1C"||b=="5O")h.4o(i?E("<1s/>").3g(a.40.1p(/<1J(.|\\s)*?\\/1J>/g,"")).1Y(i):a.40);56(G(){h.N(c,[a.40,b,a])},13)}});I 6},7a:G(){I E.3a(6.5M())},5M:G(){I 6.1X(G(){I E.11(6,"2Y")?E.2h(6.79):6}).1E(G(){I 6.2H&&!6.3c&&(6.2Q||/24|6b/i.14(6.11)||/2g|1P|52/i.14(6.O))}).1X(G(i,c){H b=E(6).3i();I b==S?S:b.1c==1B?E.1X(b,G(a,i){I{2H:c.2H,1Q:a}}):{2H:c.2H,1Q:b}}).21()}});E.N("5L,5K,6t,5J,5I,5H".2l(","),G(i,o){E.1b[o]=G(f){I 6.3W(o,f)}});H B=(1u 3D).3B();E.1k({21:G(d,b,a,c){9(E.1n(b)){a=b;b=S}I E.3G({O:"4z",1d:d,M:b,1C:a,1V:c})},78:G(b,a){I E.21(b,S,a,"1J")},77:G(c,b,a){I E.21(c,b,a,"45")},76:G(d,b,a,c){9(E.1n(b)){a=b;b={}}I E.3G({O:"5P",1d:d,M:b,1C:a,1V:c})},75:G(a){E.1k(E.59,a)},59:{1Z:Q,O:"4z",2z:0,5G:"74/x-73-2Y-72",6o:Q,3e:Q,M:S},49:{},3G:G(s){H f,2y=/=(\\?|%3F)/g,1v,M;s=E.1k(Q,s,E.1k(Q,{},E.59,s));9(s.M&&s.6o&&1m s.M!="1M")s.M=E.3a(s.M);9(s.1V=="4b"){9(s.O.2p()=="21"){9(!s.1d.1t(2y))s.1d+=(s.1d.1t(/\\?/)?"&":"?")+(s.4b||"5E")+"=?"}J 9(!s.M||!s.M.1t(2y))s.M=(s.M?s.M+"&":"")+(s.4b||"5E")+"=?";s.1V="45"}9(s.1V=="45"&&(s.M&&s.M.1t(2y)||s.1d.1t(2y))){f="4b"+B++;9(s.M)s.M=s.M.1p(2y,"="+f);s.1d=s.1d.1p(2y,"="+f);s.1V="1J";18[f]=G(a){M=a;1C();1l();18[f]=W;2a{2E 18[f]}29(e){}}}9(s.1V=="1J"&&s.1L==S)s.1L=P;9(s.1L===P&&s.O.2p()=="21")s.1d+=(s.1d.1t(/\\?/)?"&":"?")+"57="+(1u 3D()).3B();9(s.M&&s.O.2p()=="21"){s.1d+=(s.1d.1t(/\\?/)?"&":"?")+s.M;s.M=S}9(s.1Z&&!E.5b++)E.1j.1F("5L");9(!s.1d.1g("8g")&&s.1V=="1J"){H h=U.4l("9U")[0];H g=U.5B("1J");g.3k=s.1d;9(!f&&(s.1C||s.1l)){H j=P;g.9R=g.62=G(){9(!j&&(!6.2C||6.2C=="5Q"||6.2C=="1l")){j=Q;1C();1l();h.3b(g)}}}h.58(g);I}H k=P;H i=18.6X?1u 6X("9P.9O"):1u 6W();i.9M(s.O,s.1d,s.3e);9(s.M)i.5C("9J-9I",s.5G);9(s.5y)i.5C("9H-5x-9F",E.49[s.1d]||"9D, 9C 9B 9A 5v:5v:5v 9z");i.5C("X-9x-9v","6W");9(s.6U)s.6U(i);9(s.1Z)E.1j.1F("5H",[i,s]);H c=G(a){9(!k&&i&&(i.2C==4||a=="2z")){k=Q;9(d){4A(d);d=S}1v=a=="2z"&&"2z"||!E.6S(i)&&"3U"||s.5y&&E.6R(i,s.1d)&&"5O"||"1C";9(1v=="1C"){2a{M=E.6Q(i,s.1V)}29(e){1v="5k"}}9(1v=="1C"){H b;2a{b=i.5s("6P-5x")}29(e){}9(s.5y&&b)E.49[s.1d]=b;9(!f)1C()}J E.5r(s,i,1v);1l();9(s.3e)i=S}};9(s.3e){H d=4j(c,13);9(s.2z>0)56(G(){9(i){i.9q();9(!k)c("2z")}},s.2z)}2a{i.9o(s.M)}29(e){E.5r(s,i,S,e)}9(!s.3e)c();I i;G 1C(){9(s.1C)s.1C(M,1v);9(s.1Z)E.1j.1F("5I",[i,s])}G 1l(){9(s.1l)s.1l(i,1v);9(s.1Z)E.1j.1F("6t",[i,s]);9(s.1Z&&!--E.5b)E.1j.1F("5K")}},5r:G(s,a,b,e){9(s.3U)s.3U(a,b,e);9(s.1Z)E.1j.1F("5J",[a,s,e])},5b:0,6S:G(r){2a{I!r.1v&&9n.9l=="54:"||(r.1v>=6N&&r.1v<9j)||r.1v==6M||E.V.1N&&r.1v==W}29(e){}I P},6R:G(a,c){2a{H b=a.5s("6P-5x");I a.1v==6M||b==E.49[c]||E.V.1N&&a.1v==W}29(e){}I P},6Q:G(r,b){H c=r.5s("9i-O");H d=b=="6K"||!b&&c&&c.1g("6K")>=0;H a=d?r.9g:r.40;9(d&&a.2V.37=="5k")6G"5k";9(b=="1J")E.5f(a);9(b=="45")a=3w("("+a+")");I a},3a:G(a){H s=[];9(a.1c==1B||a.4c)E.N(a,G(){s.1a(3f(6.2H)+"="+3f(6.1Q))});J L(H j 1i a)9(a[j]&&a[j].1c==1B)E.N(a[j],G(){s.1a(3f(j)+"="+3f(6))});J s.1a(3f(j)+"="+3f(a[j]));I s.66("&").1p(/%20/g,"+")}});E.1b.1k({1A:G(b,a){I b?6.1U({1H:"1A",2N:"1A",1r:"1A"},b,a):6.1E(":1P").N(G(){6.R.19=6.3h?6.3h:"";9(E.17(6,"19")=="2s")6.R.19="2Z"}).2D()},1z:G(b,a){I b?6.1U({1H:"1z",2N:"1z",1r:"1z"},b,a):6.1E(":3R").N(G(){6.3h=6.3h||E.17(6,"19");9(6.3h=="2s")6.3h="2Z";6.R.19="2s"}).2D()},6J:E.1b.25,25:G(a,b){I E.1n(a)&&E.1n(b)?6.6J(a,b):a?6.1U({1H:"25",2N:"25",1r:"25"},a,b):6.N(G(){E(6)[E(6).3t(":1P")?"1A":"1z"]()})},9c:G(b,a){I 6.1U({1H:"1A"},b,a)},9b:G(b,a){I 6.1U({1H:"1z"},b,a)},99:G(b,a){I 6.1U({1H:"25"},b,a)},98:G(b,a){I 6.1U({1r:"1A"},b,a)},96:G(b,a){I 6.1U({1r:"1z"},b,a)},95:G(c,a,b){I 6.1U({1r:a},c,b)},1U:G(k,i,h,g){H j=E.6D(i,h,g);I 6[j.3L===P?"N":"3L"](G(){j=E.1k({},j);H f=E(6).3t(":1P"),3y=6;L(H p 1i k){9(k[p]=="1z"&&f||k[p]=="1A"&&!f)I E.1n(j.1l)&&j.1l.16(6);9(p=="1H"||p=="2N"){j.19=E.17(6,"19");j.2U=6.R.2U}}9(j.2U!=S)6.R.2U="1P";j.3M=E.1k({},k);E.N(k,G(c,a){H e=1u E.2j(3y,j,c);9(/25|1A|1z/.14(a))e[a=="25"?f?"1A":"1z":a](k);J{H b=a.3s().1t(/^([+-]=)?([\\d+-.]+)(.*)$/),1O=e.2b(Q)||0;9(b){H d=3I(b[2]),2i=b[3]||"2T";9(2i!="2T"){3y.R[c]=(d||1)+2i;1O=((d||1)/e.2b(Q))*1O;3y.R[c]=1O+2i}9(b[1])d=((b[1]=="-="?-1:1)*d)+1O;e.3N(1O,d,2i)}J e.3N(1O,a,"")}});I Q})},3L:G(a,b){9(E.1n(a)){b=a;a="2j"}9(!a||(1m a=="1M"&&!b))I A(6[0],a);I 6.N(G(){9(b.1c==1B)A(6,a,b);J{A(6,a).1a(b);9(A(6,a).K==1)b.16(6)}})},9f:G(){H a=E.32;I 6.N(G(){L(H i=0;i<a.K;i++)9(a[i].T==6)a.6I(i--,1)}).5n()}});H A=G(b,c,a){9(!b)I;H q=E.M(b,c+"3L");9(!q||a)q=E.M(b,c+"3L",a?E.2h(a):[]);I q};E.1b.5n=G(a){a=a||"2j";I 6.N(G(){H q=A(6,a);q.44();9(q.K)q[0].16(6)})};E.1k({6D:G(b,a,c){H d=b&&b.1c==8Z?b:{1l:c||!c&&a||E.1n(b)&&b,2e:b,3J:c&&a||a&&a.1c!=8Y&&a};d.2e=(d.2e&&d.2e.1c==4W?d.2e:{8X:8W,8V:6N}[d.2e])||8T;d.3r=d.1l;d.1l=G(){E(6).5n();9(E.1n(d.3r))d.3r.16(6)};I d},3J:{6B:G(p,n,b,a){I b+a*p},5q:G(p,n,b,a){I((-38.9s(p*38.8R)/2)+0.5)*a+b}},32:[],2j:G(b,c,a){6.Y=c;6.T=b;6.1e=a;9(!c.3P)c.3P={}}});E.2j.3A={4r:G(){9(6.Y.2F)6.Y.2F.16(6.T,[6.2v,6]);(E.2j.2F[6.1e]||E.2j.2F.6z)(6);9(6.1e=="1H"||6.1e=="2N")6.T.R.19="2Z"},2b:G(a){9(6.T[6.1e]!=S&&6.T.R[6.1e]==S)I 6.T[6.1e];H r=3I(E.3C(6.T,6.1e,a));I r&&r>-8O?r:3I(E.17(6.T,6.1e))||0},3N:G(c,b,e){6.5u=(1u 3D()).3B();6.1O=c;6.2D=b;6.2i=e||6.2i||"2T";6.2v=6.1O;6.4q=6.4i=0;6.4r();H f=6;G t(){I f.2F()}t.T=6.T;E.32.1a(t);9(E.32.K==1){H d=4j(G(){H a=E.32;L(H i=0;i<a.K;i++)9(!a[i]())a.6I(i--,1);9(!a.K)4A(d)},13)}},1A:G(){6.Y.3P[6.1e]=E.1x(6.T.R,6.1e);6.Y.1A=Q;6.3N(0,6.2b());9(6.1e=="2N"||6.1e=="1H")6.T.R[6.1e]="8N";E(6.T).1A()},1z:G(){6.Y.3P[6.1e]=E.1x(6.T.R,6.1e);6.Y.1z=Q;6.3N(6.2b(),0)},2F:G(){H t=(1u 3D()).3B();9(t>6.Y.2e+6.5u){6.2v=6.2D;6.4q=6.4i=1;6.4r();6.Y.3M[6.1e]=Q;H a=Q;L(H i 1i 6.Y.3M)9(6.Y.3M[i]!==Q)a=P;9(a){9(6.Y.19!=S){6.T.R.2U=6.Y.2U;6.T.R.19=6.Y.19;9(E.17(6.T,"19")=="2s")6.T.R.19="2Z"}9(6.Y.1z)6.T.R.19="2s";9(6.Y.1z||6.Y.1A)L(H p 1i 6.Y.3M)E.1x(6.T.R,p,6.Y.3P[p])}9(a&&E.1n(6.Y.1l))6.Y.1l.16(6.T);I P}J{H n=t-6.5u;6.4i=n/6.Y.2e;6.4q=E.3J[6.Y.3J||(E.3J.5q?"5q":"6B")](6.4i,n,0,1,6.Y.2e);6.2v=6.1O+((6.2D-6.1O)*6.4q);6.4r()}I Q}};E.2j.2F={2R:G(a){a.T.2R=a.2v},2B:G(a){a.T.2B=a.2v},1r:G(a){E.1x(a.T.R,"1r",a.2v)},6z:G(a){a.T.R[a.1e]=a.2v+a.2i}};E.1b.6m=G(){H c=0,3E=0,T=6[0],5t;9(T)8L(E.V){H b=E.17(T,"2X")=="4F",1D=T.12,23=T.23,2K=T.3H,4f=1N&&3x(4s)<8J;9(T.6V){5w=T.6V();1f(5w.1S+38.33(2K.2V.2R,2K.1G.2R),5w.3E+38.33(2K.2V.2B,2K.1G.2B));9(1h){H d=E("4o").17("8H");d=(d=="8G"||E.5g&&3x(4s)>=7)&&2||d;1f(-d,-d)}}J{1f(T.5l,T.5z);1W(23){1f(23.5l,23.5z);9(35&&/^t[d|h]$/i.14(1D.37)||!4f)d(23);9(4f&&!b&&E.17(23,"2X")=="4F")b=Q;23=23.23}1W(1D.37&&!/^1G|4o$/i.14(1D.37)){9(!/^8D|1I-9S.*$/i.14(E.17(1D,"19")))1f(-1D.2R,-1D.2B);9(35&&E.17(1D,"2U")!="3R")d(1D);1D=1D.12}9(4f&&b)1f(-2K.1G.5l,-2K.1G.5z)}5t={3E:3E,1S:c}}I 5t;G d(a){1f(E.17(a,"9T"),E.17(a,"8A"))}G 1f(l,t){c+=3x(l)||0;3E+=3x(t)||0}}})();',62,616,'||||||this|||if|||||||||||||||||||||||||||||||||function|var|return|else|length|for|data|each|type|false|true|style|null|elem|document|browser|undefined||options|||nodeName|parentNode||test|jQuery|apply|css|window|display|push|fn|constructor|url|prop|add|indexOf|msie|in|event|extend|complete|typeof|isFunction|className|replace|arguments|opacity|div|match|new|status|firstChild|attr|nodeType|hide|show|Array|success|parent|filter|trigger|body|height|table|script|tbody|cache|string|safari|start|hidden|value|merge|left|break|animate|dataType|while|map|find|global||get|id|offsetParent|select|toggle|selected|toUpperCase|remove|catch|try|cur|al|ready|duration|done|text|makeArray|unit|fx|swap|split|target||pushStack|toLowerCase|nextSibling|button|none|handle|guid|now|stack|tb|jsre|timeout|inArray|scrollTop|readyState|end|delete|step|one|name|nth|slice|doc|ret|preventDefault|width|call|events|checked|scrollLeft|exec|px|overflow|documentElement|grep|position|form|block|removeData|rl|timers|max|opera|mozilla|trim|tagName|Math|load|param|removeChild|disabled|insertBefore|async|encodeURIComponent|append|oldblock|val|childNodes|src|readyList|multiFilter|color|defaultView|stopPropagation|args|old|toString|is|last|first|eval|parseInt|self|domManip|prototype|getTime|curCSS|Date|top||ajax|ownerDocument|parseFloat|easing|has|queue|curAnim|custom|innerHTML|orig|currentStyle|visible|getElementById|isReady|error|static|bind|String|which|getComputedStyle|responseText|oWidth|oHeight|on|shift|json|child|RegExp|ol|lastModified|isXMLDoc|jsonp|jquery|previousSibling|dir|safari2|el|styleFloat|state|setInterval|radio|getElementsByTagName|tr|empty|html|getAttribute|pos|update|version|input|float|runtimeStyle|unshift|mouseover|getPropertyValue|GET|clearInterval|safariTimer|visibility|clean|__ie_init|absolute|handleHover|lastToggle|index|fromElement|relatedTarget|click|fix|evt|andSelf|removeEventListener|handler|cloneNode|addEventListener|triggered|nodeIndex|unique|Number|classFilter|prevObject|selectedIndex|after|submit|password|removeAttribute|file|expr|setTimeout|_|appendChild|ajaxSettings|client|active|win|sibling|deep|globalEval|boxModel|cssFloat|object|checkbox|parsererror|offsetLeft|wrapAll|dequeue|props|lastChild|swing|handleError|getResponseHeader|results|startTime|00|box|Modified|ifModified|offsetTop|evalScript|createElement|setRequestHeader|ctrlKey|callback|metaKey|contentType|ajaxSend|ajaxSuccess|ajaxError|ajaxStop|ajaxStart|serializeArray|init|notmodified|POST|loaded|appendTo|DOMContentLoaded|bindReady|mouseout|not|removeAttr|unbind|unload|Width|keyCode|charCode|onreadystatechange|clientX|pageX|srcElement|join|outerHTML|substr|zoom|parse|textarea|reset|image|odd|even|before|quickClass|quickID|prepend|quickChild|execScript|offset|scroll|processData|uuid|contents|continue|textContent|ajaxComplete|clone|setArray|webkit|nodeValue|fl|_default|100|linear|href|speed|eq|createTextNode|throw|replaceWith|splice|_toggle|xml|colgroup|304|200|alpha|Last|httpData|httpNotModified|httpSuccess|fieldset|beforeSend|getBoundingClientRect|XMLHttpRequest|ActiveXObject|col|br|abbr|pixelLeft|urlencoded|www|application|ajaxSetup|post|getJSON|getScript|elements|serialize|clientWidth|hasClass|scr|clientHeight|write|relative|keyup|keypress|keydown|change|mousemove|mouseup|mousedown|right|dblclick|resize|focus|blur|frames|instanceof|hover|offsetWidth|triggerHandler|ipt|defer|offsetHeight|border|padding|clientY|pageY|Left|Right|toElement|Bottom|Top|cancelBubble|returnValue|detachEvent|attachEvent|substring|line|weight|animated|header|font|enabled|innerText|contains|only|size|gt|lt|uFFFF|u0128|417|inner|Height|toggleClass|removeClass|addClass|replaceAll|noConflict|insertAfter|prependTo|wrap|contentWindow|contentDocument|http|iframe|children|siblings|prevAll|nextAll|wrapInner|prev|Boolean|next|parents|maxLength|maxlength|readOnly|readonly|class|htmlFor|CSS1Compat|compatMode|compatible|borderTopWidth|ie|ra|inline|it|rv|medium|borderWidth|userAgent|522|navigator|with|concat|1px|10000|array|ig|PI|NaN|400|reverse|fast|600|slow|Function|Object|setAttribute|changed|be|can|property|fadeTo|fadeOut|getAttributeNode|fadeIn|slideToggle|method|slideUp|slideDown|action|cssText|stop|responseXML|option|content|300|th|protocol|td|location|send|cap|abort|colg|cos|tfoot|thead|With|leg|Requested|opt|GMT|1970|Jan|01|Thu|area|Since|hr|If|Type|Content|meta|specified|open|link|XMLHTTP|Microsoft|img|onload|row|borderLeftWidth|head|attributes'.split('|'),0,{});
+
+/*
+ Copyright (c) 2004-2007, The Dojo Foundation
+ All Rights Reserved.
+
+ Licensed under the Academic Free License version 2.1 or above OR the
+ modified BSD license. For more information on Dojo licensing, see:
+
+ http://dojotoolkit.org/community/licensing.shtml
+*/
+
+/*
+ This is a compiled version of Dojo, built for deployment and not for
+ development. To get an editable version, please visit:
+
+ http://dojotoolkit.org
+
+ for documentation and information on getting the source.
+*/
+
+var decompressedDojo = function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('if(V z=="1k"){(B(){if(V D["1o"]=="1k"){D.1o={}}if((!D["1z"])||(!1z["ca"])){D.1z={}}A cn=["rA","rz","1K","ry","rx","9f","rw","rv","ru","rt","rs","rr","rq","ro","rn","rm"];A i=0,24;1s(24=cn[i++]){if(!1z[24]){1z[24]=B(){}}}if(V D["z"]=="1k"){D.z={}}z.1W=D;A d3={im:U,rl:U,rk:"",rj:"",ri:"",rh:K,rg:U};R(A 8z in d3){if(V 1o[8z]=="1k"){1o[8z]=d3[8z]}}A jK=["rf","rd","rc","rb"];A t;1s(t=jK.3a()){z["is"+t]=U}})();z.8h=1o.8h;z.cY={jJ:0,jI:9,jH:0,jG:"",jF:2V("$ra: r9 $".1f(/[0-9]+/)[0]),2i:B(){4G(z.cY){C jJ+"."+jI+"."+jH+jG+" ("+jF+")"}}};z.d1=B(jE,jD,1V){A 2h=1V||z.1W;R(A i=0,p;2h&&(p=jE[i]);i++){2h=(p in 2h?2h[p]:(jD?2h[p]={}:1k))}C 2h};z.88=B(jC,jA,jB){A d2=jC.1A("."),p=d2.8q(),M=z.d1(d2,K,jB);C(M&&p?(M[p]=jA):1k)};z.6q=B(jz,jy,jx){C z.d1(jz.1A("."),jy,jx)};z.r8=B(jw,M){C!!z.6q(jw,U,M)};z["3u"]=B(d0){C z.1W.3u?z.1W.3u(d0):3u(d0)};z.ia=B(jv,cZ,cX){A 8y="r7: "+jv;if(cZ){8y+=" "+cZ}if(cX){8y+=" -- r6 be r5 in cY: "+cX}1z.1K(8y)};z.r4=B(ju,cW){A cV="r3: "+ju+" -- r2 r1 4F r0 qZ qY.";if(cW){cV+=" "+cW}1z.1K(cV)};(B(){A cR={53:{},6p:0,1h:{},8k:{z:{1p:"z",1Z:"."},cU:{1p:"cU",1Z:"../qX/cU"},cT:{1p:"cT",1Z:"cT"}},cN:B(cS){A mp=D.8k;C jp(mp[cS]&&mp[cS].1Z)},jk:B(8x){A mp=D.8k;if(D.cN(8x)){C mp[8x].1Z}C 8x},8v:[],6t:U,56:[],8t:[],8u:U};R(A cQ in cR){z[cQ]=cR[cQ]}})();z.jg=B(8w,cP,cb){A 1g=(((8w.2s(0)=="/"||8w.1f(/^\\w+:/)))?"":D.51)+8w;if(1o.jt&&z.c8){1g+="?"+67(1o.jt).2f(/\\W+/g,"")}1u{C!cP?D.cO(1g,cb):D.jq(1g,cP,cb)}1y(e){1z.1K(e);C U}};z.cO=B(1g,cb){if(D.8v[1g]){C K}A 6u=D.iR(1g,K);if(!6u){C U}D.8v[1g]=K;D.8v.Y(1g);if(cb){6u="("+6u+")"}A jr=z["3u"](6u+"\\r\\n//@ qW="+1g);if(cb){cb(jr)}C K};z.jq=B(1g,jo,cb){A ok=U;1u{ok=D.cO(1g,cb)}1y(e){1z.1K("qV je ",1g," 4G 9f: ",e)}C jp(ok&&D.53[jo])};z.6m=B(){D.8u=K;D.6t=K;A 57=D.56;D.56=[];R(A x=0;x<57.G;x++){57[x]()}D.8u=U;if(z.6t&&z.6p==0&&D.56.G>0){z.8s()}};z.ck=B(){A 57=D.8t;1s(57.G){(57.8q())()}};z.qU=B(M,jn){A d=z;if(P.G==1){d.56.Y(M)}I{if(P.G>1){d.56.Y(B(){M[jn]()})}}if(d.6t&&d.6p==0&&!d.8u){d.8s()}};z.dW=B(M,jm){A d=z;if(P.G==1){d.8t.Y(M)}I{if(P.G>1){d.8t.Y(B(){M[jm]()})}}};z.iM=B(){if(D.6t){C}if(D.6p>0){1z.1K("qT qS in qR!");C}z.8s()};z.8s=B(){if(V 5c=="8b"||(1o["qQ"]&&z.2M)){5c("z.6m();",0)}I{z.6m()}};z.cF=B(jl){A 4v=jl.1A(".");R(A i=4v.G;i>0;i--){A 8r=4v.2w(0,i).22(".");if((i==1)&&!D.cN(8r)){4v[0]="../"+4v[0]}I{A cM=D.jk(8r);if(cM!=8r){4v.3S(0,i,cM);3f}}}C 4v};z.jj=U;z.8m=B(2T,qP,55){55=D.jj||55;A 54=D.53[2T];if(54){C 54}A cL=2T.1A(".");A 3L=D.cF(2T);A jh=((3L[0].2s(0)!="/")&&!3L[0].1f(/^\\w+:/));A ji=3L[3L.G-1];A 3m;if(ji=="*"){2T=cL.2w(0,-1).22(".");3L.8q();3m=3L.22("/")+"/"+(1o["qO"]||"qN")+".js";if(jh&&3m.2s(0)=="/"){3m=3m.2w(1)}}I{3m=3L.22("/")+".js";2T=cL.22(".")}A jf=(!55)?2T:L;A ok=D.jg(3m,jf);if((!ok)&&(!55)){2m S 1O("qM 3O 4E \'"+2T+"\'; 72 qL \'"+3m+"\'")}if((!55)&&(!D["qK"])){54=D.53[2T];if(!54){2m S 1O("qJ \'"+2T+"\' is 3O qI a8 je \'"+3m+"\'")}}C 54};z.8c=z.8m;z.1Q=B(cK){A cJ=cK+"";A 8p=cJ;A 6s=cK.1A(/\\./);if(6s[6s.G-1]=="*"){6s.8q();8p=6s.22(".")}A 8o=z.6q(8p,K);D.53[cJ]=8o;D.53[8p]=8o;C 8o};z.qH=B(8n){A jd=8n["qG"]||[];A cI=jd.3U(8n[z.j4]||8n["aY"]||[]);R(A x=0;x<cI.G;x++){A 8l=cI[x];if(8l.1P==4e){z.8m.14(z,8l)}I{z.8m(8l)}}};z.jb=B(jc,qF){if(jc===K){A cH=[];R(A i=1;i<P.G;i++){cH.Y(P[i])}z.8c.14(z,cH)}};z.qE=z.jb;z.io=B(cG,ja){D.8k[cG]={1p:cG,1Z:ja}};z.qD=B(qC,qB,qA,qz){z.8c("z.j9");z.j9.qy.14(z.qx,P)};(B(){A j7=S 9G("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\\\?([^#]*))?(#(.*))?$");A j6=S 9G("^((([^:]+:)?([^@]+))@)?([^:]*)(:([0-9]+))?$");z.4r=B(){A n=L;A 1V=P;A 1g=1V[0];R(A i=1;i<1V.G;i++){if(!1V[i]){6c}A 1t=S z.4r(1V[i]+"");A 4u=S z.4r(1g+"");if((1t.28=="")&&(!1t.4t)&&(!1t.3l)&&(!1t.1r)){if(1t.52!=n){4u.52=1t.52}1t=4u}I{if(!1t.4t){1t.4t=4u.4t;if(!1t.3l){1t.3l=4u.3l;if(1t.28.2s(0)!="/"){A j8=4u.28.21(0,4u.28.31("/")+1)+1t.28;A 1X=j8.1A("/");R(A j=0;j<1X.G;j++){if(1X[j]=="."){if(j==1X.G-1){1X[j]=""}I{1X.3S(j,1);j--}}I{if(j>0&&!(j==1&&1X[0]=="")&&1X[j]==".."&&1X[j-1]!=".."){if(j==(1X.G-1)){1X.3S(j,1);1X[j-1]=""}I{1X.3S(j-1,2);j-=2}}}}1t.28=1X.22("/")}}}}1g="";if(1t.4t){1g+=1t.4t+":"}if(1t.3l){1g+="//"+1t.3l}1g+=1t.28;if(1t.1r){1g+="?"+1t.1r}if(1t.52){1g+="#"+1t.52}}D.1g=1g.2i();A r=D.1g.1f(j7);D.4t=r[2]||(r[1]?"":n);D.3l=r[4]||(r[3]?"":n);D.28=r[5];D.1r=r[7]||(r[6]?"":n);D.52=r[9]||(r[8]?"":n);if(D.3l!=n){r=D.3l.1f(j6);D.8X=r[3]||n;D.8W=r[4]||n;D.qw=r[5];D.qv=r[7]||n}};z.4r.1C.2i=B(){C D.1g}})();z.qu=B(j5,2E){A 2B=z.cF(j5).22("/");if(!2B){C L}if(2B.31("/")!=2B.G-1){2B+="/"}A cE=2B.T(":");if(2B.2s(0)!="/"&&(cE==-1||cE>2B.T("/"))){2B=z.51+2B}C S z.4r(2B,2E)};if(V 26!="1k"){z.c8=K;z.j4="qt";(B(){A d=z;if(1q&&1q.4I){A 8j=1q.4I("ak");A j3=/z(\\.qs)?\\.js([\\?\\.]|$)/i;R(A i=0;i<8j.G;i++){A 4X=8j[i].5t("4X");if(!4X){6c}A m=4X.1f(j3);if(m){if(!1o["51"]){1o["51"]=4X.21(0,m.hK)}A cD=8j[i].5t("1o");if(cD){A cC=3u("({ "+cD+" })");R(A x in cC){1o[x]=cC[x]}}3f}}}d.51=1o["51"];A n=cq;A 8i=n.iL;A 4Z=n.qr;A 6r=2k(4Z);d.2M=(8i.T("qq")>=0)?6r:0;d.6B=(4Z.T("qo")>=0)||(4Z.T("j2")>=0)?6r:0;d.3o=(4Z.T("j2")>=0)?6r:0;A j1=8i.T("qn");d.gu=d.7B=((j1>=0)&&(!d.6B))?6r:0;d.j0=0;d.1l=0;d.iV=0;1u{if(d.7B){d.j0=2k(8i.1A("qm/")[1].1A(" ")[0])}if((1q.gx)&&(!d.2M)){d.1l=2k(4Z.1A("qk ")[1].1A(";")[0])}}1y(e){}if(z.1l&&(26.8f.cu==="9q:")){1o.iT=K}d.iX=B(){A 2A;A qj;A cB=d.6q("cz.cy");if(cB){C cB}if(V iZ!="1k"){2A=S iZ()}I{if(d.1l){1u{2A=S 9j("qi.qh")}1y(e){}}I{if(cq.qg["8Z/x-iY"]){2A=1q.a9("8b");2A.cA("Z","8Z/x-iY");2A.cA("3n",0);2A.cA("58",0);2A.1c.gq="7C";1q.5K.4c(2A)}}}if(!2A){C L}z.88("cz.cy.qf",2A);C z.6q("cz.cy")};A iW=d.iX();if(iW){d.iV=K}A cm=1q["aX"];d.qe=(cm=="aW")||(cm=="gr")||(d.1l<6);d.8h=1o.8h||(d.1l?n.qd:n.qc).1M();d.qb=1z.1K;d.cx=["iU.8g","em.8g","iU.8g.4.0"];d.9b=B(){A 4s=L;A cv=L;if(!z.1l||!1o.iT){1u{4s=S qa()}1y(e){}}if(!4s){R(A i=0;i<3;++i){A cw=z.cx[i];1u{4s=S 9j(cw)}1y(e){cv=e}if(4s){z.cx=[cw];3f}}}if(!4s){2m S 1O("8g 3O q9: "+cv)}C 4s};d.8Y=B(iS){A 4Y=iS.3N||0;C((4Y>=q8)&&(4Y<q7))||(4Y==q6)||(4Y==q5)||(!4Y&&(8f.cu=="9q:"||8f.cu=="q4:"))};A cs=1q.4I("q3");A iQ=(cs&&cs.G>0);d.iR=B(1g,iP){A 3K=D.9b();if(!iQ&&z.4r){1g=(S z.4r(26.8f,1g)).2i()}3K.dL("dD",1g,U);1u{3K.dI(L);if(!d.8Y(3K)){A 1G=1O("q2 4F 4E "+1g+" 3N:"+3K.3N);1G.3N=3K.3N;1G.2G=3K.2G;2m 1G}}1y(e){if(iP){C L}2m e}C 3K.2G}})();z.iO=U;z.6o=B(e){z.iO=K;A cr=(e&&e.Z)?e.Z.1M():"4E";if(P.2O.iN||(cr!="q1"&&cr!="4E")){C}P.2O.iN=K;if(V z["8e"]!="1k"){dX(z.8e);63 z.8e}if(z.6p==0){z.iM()}};if(1q.66){if(z.2M||(z.7B&&(1o["q0"]===K))){1q.66("pZ",z.6o,L)}26.66("4E",z.6o,L)}if(/(pY|pX)/i.6Z(cq.iL)){z.8e=dN(B(){if(/6m|iJ/.6Z(1q.6F)){z.6o()}},10)}(B(){A 3g=26;A 8d=B(cp,fp){A iK=3g[cp]||B(){};3g[cp]=B(){fp.14(3g,P);iK.14(3g,P)}};if(z.1l){1q.fJ("<iI"+"iH pW 4X=\\"//:\\" "+"pV=\\"if(D.6F==\'iJ\'){z.6o();}\\">"+"</iI"+"iH>");A co=K;8d("iG",B(){3g.5c(B(){co=U},0)});8d("pU",B(){if(co){z.ck()}});1u{1q.pT.2P("v","pS:pR-pQ-pP:pO");1q.pN().pM("v\\\\:*","pL:2E(#aY#pK)")}1y(e){}}I{8d("iG",B(){z.ck()})}})();z.pJ=B(){};z.1e=26["1q"]||L;z.3E=B(){C z.1e.3E||z.1e.4I("3E")[0]};z.ch=B(iF,iE){z.1W=iF;z.1e=iE};z.cf=B(4q,6n,iD){if((6n)&&((V 4q=="3c")||(4q 1N 67))){4q=6n[4q]}C(6n?4q.14(6n,iD||[]):4q())};z.pI=B(cj,iC,iB,iA){A cg;A iz=z.1W;A iy=z.1e;1u{z.ch(cj,cj.1q);cg=z.cf(iC,iB,iA)}ir{z.ch(iz,iy)}C cg};z.pH=B(ix,iw,iv,iu){A ce;A ip=z.1e;1u{z.1e=ix;ce=z.cf(iw,iv,iu)}ir{z.1e=ip}C ce};if(1o["cd"]){R(A cc in 1o["cd"]){z.io(cc,1o["cd"][cc])}}}if(1o.im){if(!1z.ca){z.8c("z.pG.ca")}}}if(!z.1h["z.X.c9"]){z.1h["z.X.c9"]=K;z.1Q("z.X.c9");z.1R=B(it){C(V it=="3c"||it 1N 67)};z.2l=B(it){C(it&&it 1N 4e||V it=="6a"||((V z["1H"]!="1k")&&(it 1N z.1H)))};if(z.c8&&z.3o){z.1Y=B(it){if((V(it)=="B")&&(it=="[8b 1H]")){C U}C(V it=="B"||it 1N bI)}}I{z.1Y=B(it){C(V it=="B"||it 1N bI)}}z.ib=B(it){if(V it=="1k"){C U}C(it===L||V it=="8b"||z.2l(it)||z.1Y(it))};z.pF=B(it){A d=z;if((!it)||(V it=="1k")){C U}if(d.1R(it)){C U}if(d.1Y(it)){C U}if(d.2l(it)){C K}if((it.5w)&&(it.5w.1M()=="3R")){C U}if(pE(it.G)){C K}C U};z.pD=B(it){if(!it){C U}C!z.1Y(it)&&/\\{\\s*\\[il 5h\\]\\s*\\}/.6Z(67(it))};z.c7=B(M,4W){A 8a={};R(A x in 4W){if((V 8a[x]=="1k")||(8a[x]!=4W[x])){M[x]=4W[x]}}if(z.1l){A p=4W.2i;if((V(p)=="B")&&(p!=M.2i)&&(p!=8a.2i)&&(p!="\\pC 2i() {\\n [il 5h]\\n}\\n")){M.2i=4W.2i}}C M};z.1x=B(M,pB){R(A i=1,l=P.G;i<l;i++){z.c7(M,P[i])}C M};z.4M=B(c6,pA){R(A i=1,l=P.G;i<l;i++){z.c7(c6.1C,P[i])}C c6};z.ig=B(c5,89){A ij=z.4d(P,2);A ik=z.1R(89);C B(){A ih=z.4d(P);A f=(ik?(c5||z.1W)[89]:89);C(f)&&(f.14(c5||D,ij.3U(ih)))}};z.2p=B(2z,3k){if(P.G>2){C z.ig.14(z,P)}if(!3k){3k=2z;2z=L}if(z.1R(3k)){2z=2z||z.1W;if(!2z[3k]){2m(["z.2p: ie[\\"",3k,"\\"] is L (ie=\\"",2z,"\\")"].22(""))}C B(){C 2z[3k].14(2z,P||[])}}I{C(!2z?3k:B(){C 3k.14(2z,P||[])})}};z.6j=B(M,c3){B c4(){};c4.1C=M;A c2=S c4();if(c3){z.1x(c2,c3)}C c2};z.7X=B(pz){A Q=[L];C z.2p.14(z,Q.3U(z.4d(P)))};z.4d=B(M,ic){A Q=[];R(A x=ic||0;x<M.G;x++){Q.Y(M[x])}C Q};z.c1=B(o){if(!o){C o}if(z.2l(o)){A r=[];R(A i=0;i<o.G;++i){r.Y(z.c1(o[i]))}C r}I{if(z.ib(o)){if(o.2t&&o.a7){C o.a7(K)}I{A r=S o.1P();R(A i in o){if(!(i in r)||r[i]!=o[i]){r[i]=z.c1(o[i])}}C r}}}C o};z.7g=B(2H){C 2H.2f(/^\\s\\s*/,"").2f(/\\s\\s*$/,"")}}if(!z.1h["z.X.2r"]){z.1h["z.X.2r"]=K;z.1Q("z.X.2r");z.2r=B(6l,4p,3j){if(z.1Y(3j)||(P.G>3)){z.ia("z.2r: R 9P \'"+6l+"\' py pw B as \'1P\' pv pu of as a pt i3.","","1.0");A c=3j;3j=P[3]||{};3j.1P=c}A dd=P.2O,4V=L;if(z.2l(4p)){4V=4p;4p=4V.3a()}if(4V){R(A i=0,m;i<4V.G;i++){m=4V[i];if(!m){2m("ps #"+i+" 4F pr of "+6l+" is L. pq\'s pp a po pl is 3O 6m.")}4p=dd.6j(4p,m)}}A i9=(3j||0).1P,6k=dd.6j(4p),fn;R(A i in 3j){if(z.1Y(fn=3j[i])&&(!0[i])){fn.i4=i}}z.4M(6k,{4o:6l,bY:i9,bZ:L},3j||0);6k.1C.1P=6k;C z.88(6l,6k)};z.1x(z.2r,{6j:B(c0,i8){A bp=(c0||0).1C,mp=(i8||0).1C;A 2S=z.2r.i7();z.1x(2S,{84:bp,1x:mp});if(c0){2S.1C=z.6j(bp)}z.4M(2S,z.2r.i6,mp||0,{bY:L});2S.1C.1P=2S;2S.1C.4o=(bp||0).4o+"pk"+(mp||0).4o;z.88(2S.1C.4o,2S);C 2S},i7:B(){C B(){D.i5(P)}},i6:{i5:B(86){A c=86.2O,s=c.84,ct=s&&s.1P,m=c.1x,87=m&&m.1P,a=86,ii,fn;if(a[0]){if((fn=a[0]["bZ"])){a=fn.14(D,a)||a}}if(fn=c.1C.bZ){a=fn.14(D,a)||a}if(ct&&ct.14){ct.14(D,a)}if(87&&87.14){87.14(D,a)}if(ii=c.1C.bY){ii.14(D,86)}},bX:B(85){A c=D.1P,p,m;1s(c){p=c.84;m=c.1x;if(m==85||(m 1N 85.1P)){C p}if(m&&(m=m.bX(85))){C m}c=p&&p.1P}},6h:B(83,82,bW,6i){A p=bW,c,m,f;do{c=p.1P;m=c.1x;if(m&&(m=D.6h(83,82,m,6i))){C m}if((f=p[83])&&(6i==(f==82))){C p}p=c.84}1s(p);C!6i&&(p=D.bX(bW))&&D.6h(83,82,p,6i)},bU:B(2R,4U,bV){A a=P;if(!z.1R(a[0])){bV=4U;4U=2R;2R=4U.2O.i4}A c=4U.2O,p=D.1P.1C,a=bV||4U,fn,mp;if(D[2R]!=c||p[2R]==c){mp=D.6h(2R,c,p,K);if(!mp){2m(D.4o+": 1p i3 (\\""+2R+"\\") 4F bU pj 1f 2O (2r.js)")}p=D.6h(2R,c,mp,U)}fn=p&&p[2R];if(!fn){1z.1K(mp.4o+": no bU \\""+2R+"\\" ph pg (2r.js)");C}C fn.14(D,a)}}})}if(!z.1h["z.X.2c"]){z.1h["z.X.2c"]=K;z.1Q("z.X.2c");z.3i={i2:B(){C B(){A ap=4e.1C,c=P.2O,ls=c.2b,t=c.5V;A r=t&&t.14(D,P);R(A i in ls){if(!(i in ap)){ls[i].14(D,P)}}C r}},2P:B(6g,bT,i1){6g=6g||z.1W;A f=6g[bT];if(!f||!f.2b){A d=z.3i.i2();d.5V=f;d.2b=[];f=6g[bT]=d}C f.2b.Y(i1)},3J:B(i0,hZ,bS){A f=(i0||z.1W)[hZ];if(f&&f.2b&&bS--){63 f.2b[bS]}}};z.2c=B(M,pd,pc,pa,p9){A a=P,F=[],i=0;F.Y(z.1R(a[0])?L:a[i++],a[i++]);A a1=a[i+1];F.Y(z.1R(a1)||z.1Y(a1)?a[i++]:L,a[i++]);R(A l=a.G;i<l;i++){F.Y(a[i])}C z.by.14(D,F)};z.by=B(M,bR,hY,hX){A l=z.3i,h=l.2P(M,bR,z.2p(hY,hX));C[M,bR,h,l]};z.p8=B(6f){if(6f&&6f[0]!==1k){z.bv.14(D,6f);63 6f[0]}};z.bv=B(M,hV,hU,hW){hW.3J(M,hV,hU)};z.80={};z.p7=B(bQ,hT,hS){C[bQ,z.3i.2P(z.80,bQ,z.2p(hT,hS))]};z.p6=B(81){if(81){z.3i.3J(z.80,81[0],81[1])}};z.hQ=B(hR,F){A f=z.80[hR];(f)&&(f.14(D,F||[]))};z.p5=B(hP,M,bP){A pf=B(){z.hQ(hP,P)};C(bP)?z.2c(M,bP,pf):z.2c(M,pf)}}if(!z.1h["z.X.30"]){z.1h["z.X.30"]=K;z.1Q("z.X.30");z.30=B(hO){D.bM=[];D.id=D.hN();D.2y=-1;D.3M=0;D.4R=[L,L];D.bO=hO;D.7Z=U};z.4M(z.30,{hN:(B(){A n=1;C B(){C n++}})(),4C:B(){if(D.2y==-1){if(D.bO){D.bO(D)}I{D.7Z=K}if(D.2y==-1){A 1G=S 1O("30 p4");1G.dY="4C";D.5i(1G)}}I{if((D.2y==0)&&(D.4R[0]1N z.30)){D.4R[0].4C()}}},7V:B(1v){D.2y=((1v 1N 1O)?1:0);D.4R[D.2y]=1v;D.7U()},bN:B(){if(D.2y!=-1){if(!D.7Z){2m S 1O("p3 p2!")}D.7Z=U;C}},dM:B(1v){D.bN();D.7V(1v)},5i:B(1v){D.bN();if(!(1v 1N 1O)){1v=S 1O(1v)}D.7V(1v)},9e:B(cb,4T){A 6e=z.2p(cb,4T);if(P.G>2){6e=z.7X(6e,P,2)}C D.5k(6e,6e)},ef:B(cb,4T){A 7Y=z.2p(cb,4T);if(P.G>2){7Y=z.7X(7Y,P,2)}C D.5k(7Y,L)},ed:B(cb,4T){A 7W=z.2p(cb,4T);if(P.G>2){7W=z.7X(7W,P,2)}C D.5k(L,7W)},5k:B(cb,eb){D.bM.Y([cb,eb]);if(D.2y>=0){D.7U()}C D},7U:B(){A bL=D.bM;A 4n=D.2y;A 1v=D.4R[4n];A 4S=D;A cb=L;1s((bL.G>0)&&(D.3M==0)){A f=bL.3a()[4n];if(!f){6c}1u{1v=f(1v);4n=((1v 1N 1O)?1:0);if(1v 1N z.30){cb=B(1v){4S.7V(1v);4S.3M--;if((4S.3M==0)&&(4S.2y>=0)){4S.7U()}};D.3M++}}1y(1G){1z.1K(1G);4n=1;1v=1G}}D.2y=4n;D.4R[4n]=1v;if((cb)&&(D.3M)){1v.9e(cb)}}})}if(!z.1h["z.X.2e"]){z.1h["z.X.2e"]=K;z.1Q("z.X.2e");z.5m=B(2e){1u{C 3u("("+2e+")")}1y(e){1z.1K(e);C 2e}};z.bK=B(2H){C("\\""+2H.2f(/(["\\\\])/g,"\\\\$1")+"\\"").2f(/[\\f]/g,"\\\\f").2f(/[\\b]/g,"\\\\b").2f(/[\\n]/g,"\\\\n").2f(/[\\t]/g,"\\\\t").2f(/[\\r]/g,"\\\\r")};z.hM="\\t";z.eq=B(it,4l,4P){4P=4P||"";A 4k=(4l?4P+z.hM:"");A 6b=(4l?"\\n":"");A 4Q=V(it);if(4Q=="1k"){C"1k"}I{if((4Q=="4J")||(4Q=="p1")){C it+""}I{if(it===L){C"L"}}}if(4Q=="3c"){C z.bK(it)}A 6d=P.2O;A 4m;if(V it.hL=="B"){4m=it.hL();if(it!==4m){C 6d(4m,4l,4k)}}if(V it.2e=="B"){4m=it.2e();if(it!==4m){C 6d(4m,4l,4k)}}if(z.2l(it)){A 1v=[];R(A i=0;i<it.G;i++){A 1U=6d(it[i],4l,4k);if(V(1U)!="3c"){1U="1k"}1v.Y(6b+4k+1U)}C"["+1v.22(", ")+6b+4P+"]"}if(4Q=="B"){C L}A bJ=[];R(A 1i in it){A 7T;if(V(1i)=="4J"){7T="\\""+1i+"\\""}I{if(V(1i)=="3c"){7T=z.bK(1i)}I{6c}}1U=6d(it[1i],4l,4k);if(V(1U)!="3c"){6c}bJ.Y(6b+4k+7T+": "+1U)}C"{"+bJ.22(", ")+6b+4P+"}"}}if(!z.1h["z.X.6a"]){z.1h["z.X.6a"]=K;z.1Q("z.X.6a");(B(){A 69=B(Q,M,cb){C[(z.1R(Q)?Q.1A(""):Q),(M||z.1W),(z.1R(cb)?(S bI("1m","hK","6a",cb)):cb)]};z.1x(z,{T:B(bH,hH,hI,hJ){A i=0,2q=1,1d=bH.G;if(hJ){i=1d-1;2q=1d=-1}R(i=hI||i;i!=1d;i+=2q){if(bH[i]==hH){C i}}C-1},31:B(hG,hF,hE){C z.T(hG,hF,hE,K)},1n:B(Q,hD,M){if(!Q||!Q.G){C}A 1I=69(Q,M,hD);Q=1I[0];R(A i=0,l=1I[0].G;i<l;i++){1I[2].2d(1I[1],Q[i],i,Q)}},bE:B(bF,Q,hC,M){A 1I=69(Q,M,hC);Q=1I[0];R(A i=0,l=Q.G;i<l;i++){A bG=!!1I[2].2d(1I[1],Q[i],i,Q);if(bF^bG){C bG}}C bF},ah:B(Q,hB,hA){C D.bE(K,Q,hB,hA)},ag:B(Q,hz,hy){C D.bE(U,Q,hz,hy)},23:B(Q,7t,M){A 1I=69(Q,M,7t);Q=1I[0];A bD=((P[3])?(S P[3]()):[]);R(A i=0;i<Q.G;++i){bD.Y(1I[2].2d(1I[1],Q[i],i,Q))}C bD},3T:B(Q,hx,M){A 1I=69(Q,M,hx);Q=1I[0];A bC=[];R(A i=0;i<Q.G;i++){if(1I[2].2d(1I[1],Q[i],i,Q)){bC.Y(Q[i])}}C bC}})})()}if(!z.1h["z.X.1J"]){z.1h["z.X.1J"]=K;z.1Q("z.X.1J");z.1J=B(bB){if(bB){D.hw(bB)}};z.1J.hp={p0:[0,0,0],oZ:[60,60,60],oY:[2j,2j,2j],oX:[1T,1T,1T],oW:[2j,0,0],oV:[1T,0,0],oU:[2j,0,2j],oT:[1T,0,1T],oS:[0,2j,0],oR:[0,1T,0],oQ:[2j,2j,0],oP:[1T,1T,0],oO:[0,0,2j],oN:[0,0,1T],oM:[0,2j,2j],oL:[0,1T,1T]};z.4M(z.1J,{r:1T,g:1T,b:1T,a:1,bz:B(r,g,b,a){A t=D;t.r=r;t.g=g;t.b=b;t.a=a},hw:B(2Q){A d=z;if(d.1R(2Q)){d.hq(2Q,D)}I{if(d.2l(2Q)){d.7P(2Q,D)}I{D.bz(2Q.r,2Q.g,2Q.b,2Q.a);if(!(2Q 1N d.1J)){D.7Q()}}}C D},7Q:B(){C D},oK:B(){A t=D;C[t.r,t.g,t.b]},oJ:B(){A t=D;C[t.r,t.g,t.b,t.a]},oI:B(){A Q=z.23(["r","g","b"],B(x){A s=D[x].2i(16);C s.G<2?"0"+s:s},D);C"#"+Q.22("")},8F:B(hv){A t=D,7S=t.r+", "+t.g+", "+t.b;C(hv?"hs("+7S+", "+t.a:"7S("+7S)+")"},2i:B(){C D.8F(K)}});z.d8=B(bA,1d,hu,M){A d=z,t=M||S z.1J();d.1n(["r","g","b","a"],B(x){t[x]=bA[x]+(1d[x]-bA[x])*hu;if(x!="a"){t[x]=2Y.oH(t[x])}});C t.7Q()};z.ho=B(ht,M){A m=ht.1M().1f(/^hs?\\(([\\s\\.,0-9]+)\\)/);C m&&z.7P(m[1].1A(/\\s*,\\s*/),M)};z.hn=B(4j,M){A d=z,t=M||S d.1J(),7R=(4j.G==4)?4:8,hr=(1<<7R)-1;4j=2V("oG"+4j.3b(1));if(2L(4j)){C L}d.1n(["b","g","r"],B(x){A c=4j&hr;4j>>=7R;t[x]=7R==4?17*c:c});t.a=1;C t};z.7P=B(a,M){A t=M||S z.1J();t.bz(2V(a[0]),2V(a[1]),2V(a[2]),2V(a[3]));if(2L(t.a)){t.a=1}C t.7Q()};z.hq=B(2H,M){A a=z.1J.hp[2H];C a&&z.7P(a,M)||z.ho(2H,M)||z.hn(2H,M)}}if(!z.1h["z.X"]){z.1h["z.X"]=K;z.1Q("z.X")}if(!z.1h["z.X.5Z"]){z.1h["z.X.5Z"]=K;z.1Q("z.X.5Z");(B(){A 1j=z.b2={2P:B(E,68,fp){if(!E){C}68=1j.4O(68);fp=1j.7G(68,fp);E.66(68,fp,U);C fp},3J:B(E,hm,hl){(E)&&(E.oF(1j.4O(hm),hl,U))},4O:B(1p){C(1p.2w(0,2)=="on"?1p.2w(2):1p)},7G:B(1p,fp){C(1p!="4b"?fp:B(e){C fp.2d(D,1j.4i(e,D))})},4i:B(H,oE){4w(H.Z){2X"4b":1j.7K(H);3f}C H},7K:B(H){H.oD=(H.3h?67.oC(H.3h):"")}};z.oB=B(H,hk){C 1j.4i(H,hk)};z.gY=B(H){H.7J();H.7I()};A 7O=z.3i;z.by=B(M,bx,hh,hg,hi){A hj=M&&(M.2t||M.oA||M.66);A bw=!hj?0:(!hi?1:2),l=[z.3i,1j,7O][bw];A h=l.2P(M,bx,z.2p(hh,hg));C[M,bx,h,bw]};z.bv=B(M,he,hd,hf){([z.3i,1j,7O][hf]).3J(M,he,hd)};z.5W={oz:8,gV:9,oy:12,ox:13,ow:16,ov:17,ou:18,gG:19,ot:20,os:27,or:32,b5:33,b4:34,gE:35,gF:36,b7:37,b9:38,b6:39,b8:40,gD:45,8S:46,oq:47,oo:91,om:92,ol:93,oj:96,oi:97,oh:98,og:99,oe:6D,od:oc,ob:oa,o9:o8,o7:o6,o5:o4,o3:bi,o2:o1,o0:nZ,nY:nX,nW:nV,nU:bk,gS:nT,gR:nS,gQ:nR,gP:nQ,gO:nP,gN:nO,gM:nN,gL:nM,gK:nL,gJ:nK,gI:nJ,gH:nI,nH:nG,nF:nE,nD:nC,gB:nB,gC:nA};if(z.1l){bf=B(e,5h){1u{C(e.3I=5h)}1y(e){C 0}};A 61=z.3i;if(!1o.nz){7O=61=z.gy={b3:[],2P:B(64,bu,hc){64=64||z.1W;A f=64[bu];if(!f||!f.2b){A d=z.gz();d.5V=f&&(7M.Y(f)-1);d.2b=[];f=64[bu]=d}C f.2b.Y(7M.Y(hc)-1)},3J:B(hb,ha,7N){A f=(hb||z.1W)[ha],l=f&&f.2b;if(f&&l&&7N--){63 7M[l[7N]];63 l[7N]}}};A 7M=61.b3}z.1x(1j,{2P:B(E,62,fp){if(!E){C}62=1j.4O(62);if(62=="h3"){A kd=E.bs;if(!kd||!kd.2b||!kd.h9){1j.2P(E,"bs",1j.h4);E.bs.h9=K}}C 61.2P(E,62,1j.7G(fp))},3J:B(E,h8,h7){61.3J(E,1j.4O(h8),h7)},4O:B(7L){C(7L.2w(0,2)!="on"?"on"+7L:7L)},ny:B(){},4i:B(H,4N){if(!H){A w=(4N)&&((4N.aD||4N.1q||4N).nx)||26;H=w.5Z}if(!H){C(H)}H.5V=H.br;H.bh=(4N||H.br);H.nw=H.nv;H.nu=H.nr;A bq=H.br,1e=(bq&&bq.aD)||1q;A bn=((z.1l<6)||(1e["aX"]=="aW"))?1e.3E:1e.5K;A bm=z.aB();H.nq=H.np+z.aH(bn.5I||0)-bm.x;H.nn=H.nm+(bn.5G||0)-bm.y;if(H.Z=="fk"){H.h6=H.nl}if(H.Z=="fj"){H.h6=H.nk}H.7I=1j.bc;H.7J=1j.ba;C 1j.h5(H)},h5:B(H){4w(H.Z){2X"4b":A c=("3h"in H?H.3h:H.3I);if(c==10){c=0;H.3I=13}I{if(c==13||c==27){c=0}I{if(c==3){c=99}}}H.3h=c;1j.7K(H);3f}C H},gZ:{bi:42,bk:47,h2:59,nj:43,ni:44,nh:45,ng:46,nf:47,60:96,h1:91,nb:92,na:93,h0:39},h4:B(H){A kp=H.bh.h3;if(!kp||!kp.2b){C}A k=H.3I;A bj=(k!=13)&&(k!=32)&&(k!=27)&&(k<48||k>90)&&(k<96||k>bk)&&(k<h2||k>60)&&(k<h1||k>h0);if(bj||H.5Y){A c=(bj?0:k);if(H.5Y){if(k==3||k==13){C}I{if(c>95&&c<bi){c-=48}I{if((!H.5X)&&(c>=65&&c<=90)){c+=32}I{c=1j.gZ[c]||c}}}}A 2x=1j.7H(H,{Z:"4b",2x:K,3h:c});kp.2d(H.bh,2x);H.bg=2x.bg;H.bd=2x.bd;bf(H,2x.3I)}},bc:B(){D.bg=K},ba:B(){D.n9=D.3I;if(D.5Y){bf(D,0)}D.bd=U}});z.gY=B(H){H=H||26.5Z;1j.bc.2d(H);1j.ba.2d(H)}}1j.7H=B(H,gX){A 2x=z.1x({},H,gX);1j.7K(2x);2x.7J=B(){H.7J()};2x.7I=B(){H.7I()};C 2x};if(z.2M){z.1x(1j,{4i:B(H,n8){4w(H.Z){2X"4b":A c=H.n7;if(c==3){c=99}c=((c<41)&&(!H.5X)?0:c);if((H.5Y)&&(!H.5X)&&(c>=65)&&(c<=90)){c+=32}C 1j.7H(H,{3h:c})}C H}})}if(z.3o){z.1x(1j,{4i:B(H,n6){4w(H.Z){2X"4b":A c=H.3h,s=H.5X,k=H.3I;k=k||gA[H.gW]||0;if(H.gW=="n5"){c=0}I{if((H.5Y)&&(c>0)&&(c<27)){c+=96}I{if(c==z.5W.gU){c=z.5W.gV;s=K}I{c=(c>=32&&c<gT?c:0)}}}C 1j.7H(H,{3h:c,5X:s,3I:k})}C H}});z.1x(z.5W,{gU:25,b9:gT,b8:n4,b7:n3,b6:n2,gS:n1,gR:n0,gQ:mZ,gP:mY,gO:mX,gN:mW,gM:mV,gL:mU,gK:mT,gJ:mS,gI:mR,gH:mQ,gG:mP,8S:mO,gF:mN,gE:mM,b5:mL,b4:mK,gD:mJ,mI:mH,gC:mG,gB:mF});A dk=z.5W,gA={"mE":dk.b9,"mD":dk.b8,"mC":dk.b7,"mB":dk.b6,"mA":dk.b5,"mz":dk.b4}}})();if(z.1l){z.gz=B(){C B(){A ap=4e.1C,h=z.gy.b3,c=P.2O,ls=c.2b,t=h[c.5V];A r=t&&t.14(D,P);R(A i in ls){if(!(i in ap)){h[ls[i]].14(D,P)}}C r}};z.b2.7G=B(fp){A f=z.b2.4i;C B(e){C fp.2d(D,f(e,D))}}}}if(!z.1h["z.X.b1"]){z.1h["z.X.b1"]=K;z.1Q("z.X.b1");1u{1q.my("mx",U,K)}1y(e){}if(z.1l||z.2M){z.1D=B(id,1e){if(z.1R(id)){A b0=(1e||z.1e);A 11=b0.gv(id);if((11)&&(11.gw.id.1Z==id)){C 11}I{A 5U=b0.gx[id];if(!5U){C}if(!5U.G){C 5U}A i=0;1s(11=5U[i++]){if(11.gw.id.1Z==id){C 11}}}}I{C id}}}I{z.1D=B(id,1e){if(z.1R(id)){C(1e||z.1e).gv(id)}I{C id}}}(B(){A 5T=L;z.mw=B(E){E=z.1D(E);1u{if(!5T){5T=1q.a9("mv")}5T.4c(E.1L?E.1L.fs(E):E);5T.9L=""}1y(e){}};z.mu=B(E,7F){1u{E=z.1D(E);7F=z.1D(7F);1s(E){if(E===7F){C K}E=E.1L}}1y(e){}C U};z.mt=B(E,5S){E=z.1D(E);if(z.gu){E.1c.ms=(5S)?"dg":"7C"}I{if(z.6B){E.1c.mr=(5S)?"8K":"7C"}I{if(z.1l){E.gs=(5S)?"":"on";z.1r("*",E).1n(B(gt){gt.gs=(5S)?"":"on"})}}}};A 5R=B(E,4h){4h.1L.mq(E,4h);C K};A aZ=B(E,4h){A pn=4h.1L;if(4h==pn.fm){pn.4c(E)}I{C 5R(E,4h.71)}C K};z.5E=B(E,2a,3H){if((!E)||(!2a)||(V 3H=="1k")){C U}E=z.1D(E);2a=z.1D(2a);if(V 3H=="4J"){A cn=2a.3W;if(((3H==0)&&(cn.G==0))||(cn.G==3H)){2a.4c(E);C K}if(3H==0){C 5R(E,2a.5A)}C aZ(E,cn[3H-1])}4w(3H.1M()){2X"mo":C 5R(E,2a);2X"a8":C aZ(E,2a);2X"9M":if(2a.5A){C 5R(E,2a.5A)}I{2a.4c(E);C K}3f;aY:2a.4c(E);C K}};z.aP="5g-3G";if(z.1l){A aV=1q.aX;z.aP=(aV=="aW")||(aV=="gr")||(z.1l<6)?"g5-3G":"5g-3G"}A 1E,dv=1q.mn;if(z.3o){1E=B(E){A s=dv.3F(E,L);if(!s&&E.1c){E.1c.gq="";s=dv.3F(E,L)}C s||{}}}I{if(z.1l){1E=B(E){C E.gn}}I{1E=B(E){C dv.3F(E,L)}}}z.3F=1E;if(!z.1l){z.4g=B(mm,gp){C 2k(gp)||0}}I{z.4g=B(go,2N){if(!2N){C 0}if(2N=="ml"){C 4}if(2N.2w&&(2N.2w(-2)=="px")){C 2k(2N)}4G(go){A gm=1c.2g;A gl=aU.2g;aU.2g=gn.2g;1u{1c.2g=2N;2N=1c.mk}1y(e){2N=0}1c.2g=gm;aU.2g=gl}C 2N}}z.ge=(z.1l?B(E){1u{C(E.mj.mi.2W/6D)}1y(e){C 1}}:B(E){C z.3F(E).2W});z.gf=(z.1l?B(E,7D){if(7D==1){E.1c.7E=E.1c.7E.2f(/gk:[^;]*;/i,"");if(E.gj.1M()=="gi"){z.1r("> gh",E).1n(B(i){i.1c.7E=i.1c.7E.2f(/gk:[^;]*;/i,"")})}}I{A o="mh(mg="+(7D*6D)+")";E.1c.3T=o}if(E.gj.1M()=="gi"){z.1r("> gh",E).1n(B(i){i.1c.3T=o})}C 7D}:B(E,gg){C E.1c.2W=gg});A 5Q={3n:K,58:K,2g:K,5J:K};A gd=B(E,Z,5P){Z=Z.1M();if(5Q[Z]===K){C z.4g(E,5P)}I{if(5Q[Z]===U){C 5P}I{if((Z.T("mf")>=0)||(Z.T("md")>=0)||(Z.T("3n")>=0)||(Z.T("58")>=0)||(Z.T("5q")>=0)||(Z.T("mc")>=0)||(Z.T("ma")>=0)){5Q[Z]=K;C z.4g(E,5P)}I{5Q[Z]=U;C 5P}}}};z.1c=B(E,5O,aT){A n=z.1D(E),F=P.G,op=(5O=="2W");if(F==3){C op?z.gf(n,aT):n.1c[5O]=aT}if(F==2&&op){C z.ge(n)}A s=z.3F(n);C(F==1)?s:gd(n,5O,s[5O])};z.7A=B(n,gc){A s=gc||1E(n),px=z.4g,l=px(n,s.m9),t=px(n,s.m8);C{l:l,t:t,w:l+px(n,s.m7),h:t+px(n,s.m6)}};z.5N=B(n,gb){A ne="7C",px=z.4g,s=gb||1E(n),bl=(s.m5!=ne?px(n,s.m4):0),bt=(s.m3!=ne?px(n,s.m2):0);C{l:bl,t:bt,w:bl+(s.m1!=ne?px(n,s.m0):0),h:bt+(s.lZ!=ne?px(n,s.lY):0)}};z.aN=B(n,ga){A s=ga||1E(n),p=z.7A(n,s),b=z.5N(n,s);C{l:p.l+b.l,t:p.t+b.t,w:p.w+b.w,h:p.h+b.h}};z.aM=B(n,g9){A s=g9||1E(n),px=z.4g,l=px(n,s.lX),t=px(n,s.lW),r=px(n,s.lV),b=px(n,s.lU);if(z.3o&&(s.ax!="fU")){r=l}C{l:l,t:t,w:l+r,h:t+b}};z.au=B(E,g8){A s=g8||1E(E),me=z.aM(E,s);A l=E.fT-me.l,t=E.fS-me.t;if(z.7B){A aS=2k(s.2g),aR=2k(s.5J);if(!2L(aS)&&!2L(aR)){l=aS,t=aR}I{A p=E.1L;if(p&&p.1c){A aQ=1E(p);if(aQ.lT!="lS"){A be=z.5N(p,aQ);l+=be.l,t+=be.t}}}}I{if(z.2M){A p=E.1L;if(p){A be=z.5N(p);l-=be.l,t-=be.t}}}C{l:l,t:t,w:E.6v+me.w,h:E.8D+me.h}};z.aK=B(E,g7){A s=g7||1E(E),pe=z.7A(E,s),be=z.5N(E,s),w=E.aF,h;if(!w){w=E.6v,h=E.8D}I{h=E.lR,be.w=be.h=0}if(z.2M){pe.l+=be.l;pe.t+=be.t}C{l:pe.l,t:pe.t,w:w-pe.w-be.w,h:h-pe.h-be.h}};z.lQ=B(E,g6){A s=g6||1E(E),pe=z.7A(E,s),cb=z.aK(E,s);C{l:cb.l-pe.l,t:cb.t-pe.t,w:cb.w+pe.w,h:cb.h+pe.h}};z.aL=B(E,l,t,w,h,u){u=u||"px";4G(E.1c){if(!2L(l)){2g=l+u}if(!2L(t)){5J=t+u}if(w>=0){3n=w+u}if(h>=0){58=h+u}}};z.aO=B(E){A n=E.5w;C(z.aP=="g5-3G")||(n=="lP")||(n=="lO")};z.fX=B(E,7z,7y,g4){A bb=z.aO(E);if(bb){A pb=z.aN(E,g4);if(7z>=0){7z+=pb.w}if(7y>=0){7y+=pb.h}}z.aL(E,g3,g3,7z,7y)};z.fY=B(E,g1,g0,5M,5L,g2){A s=g2||z.3F(E);A bb=z.aO(E),pb=bb?fZ:z.aN(E,s),mb=z.aM(E,s);if(5M>=0){5M=2Y.5q(5M-pb.w-mb.w,0)}if(5L>=0){5L=2Y.5q(5L-pb.h-mb.h,0)}z.aL(E,g1,g0,5M,5L)};A fZ={l:0,t:0,w:0,h:0};z.lN=B(E,3G){A n=z.1D(E),s=1E(n),b=3G;C!b?z.au(n,s):z.fY(n,b.l,b.t,b.w,b.h,s)};z.lM=B(E,3G){A n=z.1D(E),s=1E(n),b=3G;C!b?z.aK(n,s):z.fX(n,b.w,b.h,s)};A 5H=B(E,1a){if(!(E=(E||0).1L)){C 0}A 1U,aJ=0,2h=z.3E();1s(E&&E.1c){if(1E(E).ax=="lL"){C 0}1U=E[1a];if(1U){aJ+=1U-0;if(E==2h){3f}}E=E.1L}C aJ};z.fQ=B(){A 2h=z.3E();A 3g=z.1W;A de=z.1e.5K;C{y:(3g.lK||de.5G||2h.5G||0),x:(3g.lJ||z.aH(de.5I)||2h.5I||0)}};z.aG=B(){C V z.aI=="1k"?(z.aI=z.3F(z.3E()).lI=="lH"):z.aI};z.aB=B(){A de=z.1e.5K;if(z.1l>=7){C{x:de.aC().2g,y:de.aC().5J}}I{C{x:z.aG()||26.am==26?de.fW:de.6v-de.aF-de.fW,y:de.lG}}};z.aH=B(aE){if(z.1l&&!z.aG()){A de=z.1e.5K;C aE+de.aF-de.lF}C aE};z.fP=B(E,aw){A ay=E.aD;A J={x:0,y:0};A 7w=U;A db=z.3E();if(z.1l){A aA=E.aC();A az=z.aB();J.x=aA.2g-az.x;J.y=aA.5J-az.y}I{if(ay["fV"]){A bo=ay.fV(E);J.x=bo.x-5H(E,"5I");J.y=bo.y-5H(E,"5G")}I{if(E["fR"]){7w=K;A 7x;if(z.3o&&(1E(E).ax=="fU")&&(E.1L==db)){7x=db}I{7x=db.1L}if(E.1L!=db){A nd=E;if(z.2M){nd=db}J.x-=5H(nd,"5I");J.y-=5H(nd,"5G")}A 4f=E;do{A n=4f["fT"];if(!z.2M||n>0){J.x+=2L(n)?0:n}A m=4f["fS"];J.y+=2L(m)?0:m;4f=4f.fR}1s((4f!=7x)&&4f)}I{if(E["x"]&&E["y"]){J.x+=2L(E.x)?0:E.x;J.y+=2L(E.y)?0:E.y}}}}if(7w||aw){A av=z.fQ();A m=7w?(!aw?-1:0):1;J.y+=m*av.y;J.x+=m*av.x}C J};z.af=B(E,fO){A n=z.1D(E),s=1E(n),mb=z.au(n,s);A at=z.fP(n,fO);mb.x=at.x;mb.y=at.y;C mb}})();z.fL=B(E,fN){C((" "+E.3A+" ").T(" "+fN+" ")>=0)};z.7s=B(E,ar){A 7v=E.3A;if((" "+7v+" ").T(" "+ar+" ")<0){E.3A=7v+(7v?" ":"")+ar}};z.7r=B(E,fM){A t=z.7g((" "+E.3A+" ").2f(" "+fM+" "," "));if(E.3A!=t){E.3A=t}};z.lE=B(E,aq,7u){if(V 7u=="1k"){7u=!z.fL(E,aq)}z[7u?"7s":"7r"](E,aq)}}if(!z.1h["z.X.1H"]){z.1h["z.X.1H"]=K;z.1Q("z.X.1H");(B(){A d=z;z.1H=B(){A F=P;if((F.G==1)&&(V F[0]=="4J")){D.G=eK(F[0])}I{if(F.G){d.1n(F,B(i){D.Y(i)},D)}}};z.1H.1C=S 4e;if(d.1l){A fK=B(al){C("A a2 = am."+al+"; "+"A ap = 4e.1C; "+"A ao = a2.1C; "+"R(A x in ao){ ap[x] = ao[x]; } "+"am."+al+" = 4e; ")};A fI=fK("z.1H");A aj=26.lD();aj.1q.fJ("<ak>"+fI+"</ak>");aj.lC(1,1,1,1)}z.4M(z.1H,{T:B(fH,fG){C d.T(D,fH,fG)},31:B(lB,lA){A aa=d.4d(P);aa.ae(D);C d.31.14(d,aa)},ah:B(fF,fE){C d.ah(D,fF,fE)},ag:B(fD,fC){C d.ag(D,fD,fC)},1n:B(fB,fA){d.1n(D,fB,fA);C D},23:B(7t,M){C d.23(D,7t,M,d.1H)},af:B(){C d.23(D,d.af)},1c:B(lz,ly){A aa=d.4d(P);aa.ae(D[0]);A s=d.1c.14(d,aa);C(P.G>1)?D:s},lx:B(lw,lv){A aa=d.4d(P);aa.ae(L);A s=D.23(B(i){aa[0]=i;C d.1c.14(d,aa)});C(P.G>1)?D:s},7s:B(fz){C D.1n(B(i){z.7s(i,fz)})},7r:B(fy){C D.1n(B(i){z.7r(i,fy)})},5E:B(fw,7q){A 1m=d.1r(fw)[0];7q=7q||"72";R(A x=0;x<D.G;x++){d.5E(D[x],1m,7q)}C D},2c:B(fv,fu,ft){D.1n(B(1m){d.2c(1m,fv,fu,ft)});C D},lu:B(ad){A ac=(ad)?d.9t(D,ad):D;ac.1n(B(1m){if(1m["1L"]){1m.1L.fs(1m)}});C ac},lt:B(fr,fq){A 1m=D[0];C d.1r(fr).1n(B(ai){d.5E(ai,1m,(fq||"72"))})},1r:B(7p){7p=7p||"";A J=S d.1H();D.1n(B(1m){d.1r(7p,1m).1n(B(ab){if(V ab!="1k"){J.Y(ab)}})});C J},3T:B(fo){A 5F=D;A 1V=P;A r=S d.1H();A rp=B(t){if(V t!="1k"){r.Y(t)}};if(d.1R(fo)){5F=d.9t(D,1V[0]);if(1V.G==1){C 5F}d.1n(d.3T(5F,1V[1],1V[2]),rp);C r}d.1n(d.3T(5F,1V[0],1V[1]),rp);C r},lr:B(7o,7n){A 1S=d.1e.a9("lq");if(d.1R(7o)){1S.9L=7o}I{1S.4c(7o)}A ct=((7n=="9M")||(7n=="a8"))?"fm":"5A";D.1n(B(1m){A 24=1S.a7(K);1s(24[ct]){d.5E(24[ct],1m,7n)}});C D},7m:B(fl,F){A a5=[];F=F||{};D.1n(B(1m){A a6={E:1m};d.1x(a6,F);a5.Y(d[fl](a6))});C d.fx.lp(a5)},8I:B(F){C D.7m("8I",F)},8H:B(F){C D.7m("8H",F)},6y:B(F){C D.7m("6y",F)}});z.1n(["fk","lo","fj","fi","ln","lm","ll","fi","lk","lj","4b"],B(H){A a4="on"+H;z.1H.1C[a4]=B(a,b){C D.2c(a4,a,b)}})})()}if(!z.1h["z.X.1r"]){z.1h["z.X.1r"]=K;z.1Q("z.X.1r");(B(){A d=z;A 2I=B(q){C[q.T("#"),q.T("."),q.T("["),q.T(":")]};A a0=B(a3,fh){A ql=a3.G;A i=2I(a3);A 1d=ql;R(A x=fh;x<i.G;x++){if(i[x]>=0){if(i[x]<1d){1d=i[x]}}}C(1d<0)?ql:1d};A 6X=B(7l){A i=2I(7l);if(i[0]!=-1){C 7l.21(i[0]+1,a0(7l,1))}I{C""}};A 5r=B(7k){A 5D;A i=2I(7k);if((i[0]==0)||(i[1]==0)){5D=0}I{5D=a0(7k,0)}C((5D>0)?7k.3b(0,5D).1M():"*")};A fg=B(Q){A J=-1;R(A x=0;x<Q.G;x++){A 1S=Q[x];if(1S>=0){if((1S>J)||(J==-1)){J=1S}}}C J};A 9H=B(7i){A i=2I(7i);if(-1==i[1]){C""}A di=i[1]+1;A 7j=fg(i.2w(2));if(di<7j){C 7i.21(di,7j)}I{if(-1==7j){C 7i.3b(di)}I{C""}}};A f3=[{1i:"|=",1f:B(15,fe){C"[5z(3U(\' \',@"+15+",\' \'), \' "+fe+"-\')]"}},{1i:"~=",1f:B(15,fd){C"[5z(3U(\' \',@"+15+",\' \'), \' "+fd+" \')]"}},{1i:"^=",1f:B(15,fb){C"[li-4G(@"+15+", \'"+fb+"\')]"}},{1i:"*=",1f:B(15,fa){C"[5z(@"+15+", \'"+fa+"\')]"}},{1i:"$=",1f:B(15,9Z){C"[21(@"+15+", 3c-G(@"+15+")-"+(9Z.G-1)+")=\'"+9Z+"\']"}},{1i:"!=",1f:B(15,f9){C"[3O(@"+15+"=\'"+f9+"\')]"}},{1i:"=",1f:B(15,f8){C"[@"+15+"=\'"+f8+"\']"}}];A 9C=B(9Y,3Z,f7,f6){A 49;A i=2I(3Z);if(i[2]>=0){A 4L=3Z.T("]",i[2]);A 29=3Z.21(i[2]+1,4L);1s(29&&29.G){if(29.2s(0)=="@"){29=29.2w(1)}49=L;R(A x=0;x<9Y.G;x++){A 1S=9Y[x];A 7h=29.T(1S.1i);if(7h>=0){A 15=29.21(0,7h);A 4a=29.21(7h+1S.1i.G);if((4a.2s(0)=="\\"")||(4a.2s(0)=="\'")){4a=4a.21(1,4a.G-1)}49=1S.1f(d.7g(15),d.7g(4a));3f}}if((!49)&&(29.G)){49=f7(29)}if(49){f6(49)}29=L;A 7f=3Z.T("[",4L);if(0<=7f){4L=3Z.T("]",7f);if(0<=4L){29=3Z.21(7f+1,4L)}}}}};A f0=B(f5){A 4K=".";A 7e=f5.1A(" ");1s(7e.G){A 2K=7e.3a();A 7d;if(2K==">"){7d="/";2K=7e.3a()}I{7d="//"}A f4=5r(2K);4K+=7d+f4;A id=6X(2K);if(id.G){4K+="[@id=\'"+id+"\'][1]"}A cn=9H(2K);if(cn.G){A 9X=" ";if(cn.2s(cn.G-1)=="*"){9X="";cn=cn.3b(0,cn.G-1)}4K+="[5z(3U(\' \',@9P,\' \'), \' "+cn+9X+"\')]"}9C(f3,2K,B(f2){C"[@"+f2+"]"},B(f1){4K+=f1})}C 4K};A 7a={};A eC=B(28){if(7a[28]){C 7a[28]}A 1e=d.1e;A 9W=f0(28);A 4H=B(9V){A J=[];A 7b;1u{7b=1e.9x(9W,9V,L,lh.lg,L)}1y(e){1z.1K("lf in le:",9W,"lc:",9V);1z.1K(e)}A 7c=7b.eZ();1s(7c){J.Y(7c);7c=7b.eZ()}C J};C 7a[28]=4H};A 5x={};A 9B={};A 3y=B(79,78){if(!79){C 78}if(!78){C 79}C B(){C 79.14(26,P)&&78.14(26,P)}};A 75=B(9U,3Y,5B,2J){A 2v=2J+1;A 76=(3Y.G==2v);A 2K=3Y[2J];if(2K==">"){A 77=9U.3W;if(!77.G){C}2v++;76=(3Y.G==2v);A 4H=6O(3Y[2J+1]);R(A x=0,11;x<77.G,11=77[x];x++){if(4H(11)){if(76){5B.Y(11)}I{75(11,3Y,5B,2v)}}}}A 5C=6U(2K)(9U);if(76){1s(5C.G){5B.Y(5C.3a())}}I{1s(5C.G){75(5C.3a(),3Y,5B,2v)}}};A eE=B(9T,eY){A J=[];A x=9T.G-1,11;1s(11=9T[x--]){75(11,eY,J,0)}C J};A 6O=B(3D){if(5x[3D]){C 5x[3D]}A ff=L;A 9S=5r(3D);if(9S!="*"){ff=3y(ff,B(N){C((N.2t==1)&&(9S==N.5w.1M()))})}A 9R=6X(3D);if(9R.G){ff=3y(ff,B(N){C((N.2t==1)&&(N.id==9R))})}if(2Y.5q.14(D,2I(3D).2w(1))>=0){ff=3y(ff,9z(3D))}C 5x[3D]=ff};A 5y=B(E){A pn=E.1L;A 9Q=pn.3W;A 2v=-1;A 3C=pn.5A;if(!3C){C 2v}A ci=E["eW"];A cl=pn["eX"];if(((V cl=="4J")&&(cl!=9Q.G))||(V ci!="4J")){pn["eX"]=9Q.G;A 2J=1;do{if(3C===E){2v=2J}if(3C.2t==1){3C["eW"]=2J;2J++}3C=3C.71}1s(3C)}I{2v=ci}C 2v};A lb=0;A 3X=B(N,15){A 74="";if(15=="9P"){C N.3A||74}if(15=="R"){C N.la||74}C N.5t(15,2)||74};A eH=[{1i:"|=",1f:B(15,9O){A eV=" "+9O+"-";C B(N){A ea=" "+(N.5t(15,2)||"");C((ea==9O)||(ea.T(eV)==0))}}},{1i:"^=",1f:B(15,eU){C B(N){C(3X(N,15).T(eU)==0)}}},{1i:"*=",1f:B(15,eT){C B(N){C(3X(N,15).T(eT)>=0)}}},{1i:"~=",1f:B(15,eS){A 9N=" "+eS+" ";C B(N){A ea=" "+3X(N,15)+" ";C(ea.T(9N)>=0)}}},{1i:"$=",1f:B(15,73){A 9N=" "+73;C B(N){A ea=" "+3X(N,15);C(ea.31(73)==(ea.G-73.G))}}},{1i:"!=",1f:B(15,eR){C B(N){C(3X(N,15)!=eR)}}},{1i:"=",1f:B(15,eQ){C B(N){C(3X(N,15)==eQ)}}}];A 9E=[{1i:"9M-9K",1f:B(1p,l9){C B(N){if(N.2t!=1){C U}A fc=N.eP;1s(fc&&(fc.2t!=1)){fc=fc.eP}C(!fc)}}},{1i:"72-9K",1f:B(1p,l8){C B(N){if(N.2t!=1){C U}A nc=N.71;1s(nc&&(nc.2t!=1)){nc=nc.71}C(!nc)}}},{1i:"l7",1f:B(1p,l6){C B(N){A cn=N.3W;A eO=N.3W.G;R(A x=eO-1;x>=0;x--){A nt=cn[x].2t;if((nt==1)||(nt==3)){C U}}C K}}},{1i:"5z",1f:B(1p,eN){C B(N){C(N.9L.T(eN)>=0)}}},{1i:"3O",1f:B(1p,eM){A eL=6O(eM);C B(N){C(!eL(N))}}},{1i:"l5-9K",1f:B(1p,2u){A pi=eK;if(2u=="l4"){C B(N){C(((5y(N))%2)==1)}}I{if((2u=="2n")||(2u=="l3")){C B(N){C((5y(N)%2)==0)}}I{if(2u.T("l2+")==0){A 70=pi(2u.3b(3));C B(N){C(N.1L.3W[70-1]===N)}}I{if((2u.T("n+")>0)&&(2u.G>3)){A 9J=2u.1A("n+",2);A eJ=pi(9J[0]);A 2J=pi(9J[1]);C B(N){C((5y(N)%eJ)==2J)}}I{if(2u.T("n")==-1){A 70=pi(2u);C B(N){C(5y(N)==70)}}}}}}}}];A 9z=B(3e){A 9I=(9B[3e]||5x[3e]);if(9I){C 9I}A ff=L;A i=2I(3e);if(i[0]>=0){A 24=5r(3e);if(24!="*"){ff=3y(ff,B(N){C(N.5w.1M()==24)})}}A 5u;A 3B=9H(3e);if(3B.G){A 9F=3B.2s(3B.G-1)=="*";if(9F){3B=3B.3b(0,3B.G-1)}A re=S 9G("(?:^|\\\\s)"+3B+(9F?".*":"")+"(?:\\\\s|$)");ff=3y(ff,B(N){C re.6Z(N.3A)})}if(i[3]>=0){A 3z=3e.3b(i[3]+1);A 9D="";A 5v=3z.T("(");A 6Y=3z.31(")");if((0<=5v)&&(0<=6Y)&&(6Y>5v)){9D=3z.21(5v+1,6Y);3z=3z.3b(0,5v)}5u=L;R(A x=0;x<9E.G;x++){A 1S=9E[x];if(1S.1i==3z){5u=1S.1f(3z,9D);3f}}if(5u){ff=3y(ff,5u)}}A eG=(d.1l)?B(5s){A eI=5s.1M();C B(N){C N[5s]||N[eI]}}:B(5s){C B(N){C(N&&N.5t&&N.l1(5s))}};9C(eH,3e,eG,B(eF){ff=3y(ff,eF)});if(!ff){ff=B(){C K}}C 9B[3e]=ff};A 6W={};A 6U=B(3d,1B){A 9A=6W[3d];if(9A){C 9A}A i=2I(3d);A id=6X(3d);if(i[0]==0){C 6W[3d]=B(1B){C[d.1D(id)]}}A 9y=9z(3d);A 5p;if(i[0]>=0){5p=B(1B){A 11=d.1D(id);if(9y(11)){C[11]}}}I{A 3V;A 24=5r(3d);if(2Y.5q.14(D,2I(3d))==-1){5p=B(1B){A J=[];A 11,x=0,3V=1B.4I(24);1s(11=3V[x++]){J.Y(11)}C J}}I{5p=B(1B){A J=[];A 11,x=0,3V=1B.4I(24);1s(11=3V[x++]){if(9y(11)){J.Y(11)}}C J}}}C 6W[3d]=5p};A l0={};A 5o={">":B(1B){A J=[];A 11,x=0,3V=1B.3W;1s(11=3V[x++]){if(11.2t==1){J.Y(11)}}C J}};A 9w=B(6V){if(0>6V.T(" ")){C 6U(6V)}A eD=B(1B){A 6S=6V.1A(" ");A 6T;if(6S[0]==">"){6T=[1B]}I{6T=6U(6S.3a())(1B)}C eE(6T,6S)};C eD};A 9v=((1q["9x"]&&!d.3o)?B(3x){A 6R=3x.1A(" ");if((1q["9x"])&&(3x.T(":")==-1)&&((K))){if(((6R.G>2)&&(3x.T(">")==-1))||(6R.G>3)||(3x.T("[")>=0)||((1==6R.G)&&(0<=3x.T(".")))){C eC(3x)}}C 9w(3x)}:9w);A ey=B(3w){if(5o[3w]){C 5o[3w]}if(0>3w.T(",")){C 5o[3w]=9v(3w)}I{A eB=3w.1A(/\\s*,\\s*/);A 4H=B(1B){A eA=0;A J=[];A 6Q;1s(6Q=eB[eA++]){J=J.3U(9v(6Q,6Q.T(" "))(1B))}C J};C 5o[3w]=4H}};A 5n=0;A ez=B(Q){A J=S d.1H();if(!Q){C J}if(Q[0]){J.Y(Q[0])}if(Q.G<2){C J}5n++;Q[0]["9u"]=5n;R(A x=1,11;11=Q[x];x++){if(Q[x]["9u"]!=5n){J.Y(11)}11["9u"]=5n}C J};d.1r=B(6P,1B){if(V 6P!="3c"){C S d.1H(6P)}if(V 1B=="3c"){1B=d.1D(1B)}C ez(ey(6P)(1B||d.1e))};d.9t=B(ex,9s){A 9r=S d.1H();A ff=(9s)?6O(9s):B(){C K};R(A x=0,11;11=ex[x];x++){if(ff(11)){9r.Y(11)}}C 9r}})()}if(!z.1h["z.X.1b"]){z.1h["z.X.1b"]=K;z.1Q("z.X.1b");z.6K=B(ew){A J={};A iq="kZ[Z!=9q][Z!=kY][Z!=et][Z!=kX][Z!=kW], kV, kU";z.1r(iq,ew).3T(B(E){C(!E.kT)}).1n(B(1m){A 3v=1m.1p;A Z=(1m.Z||"").1M();if((Z=="kS")||(Z=="kR")){if(1m.kQ){J[3v]=1m.1Z}}I{if(1m.kP){A ev=J[3v]=[];z.1r("kO[kN]",1m).1n(B(eu){ev.Y(eu.1Z)})}I{J[3v]=1m.1Z;if(Z=="et"){J[3v+".x"]=J[3v+".y"]=J[3v].x=J[3v].y=0}}}});C J};z.9h=B(23){A ec=kM;A J="";A es={};R(A x in 23){if(23[x]!=es[x]){if(z.2l(23[x])){R(A y=0;y<23[x].G;y++){J+=ec(x)+"="+ec(23[x][y])+"&"}}I{J+=ec(x)+"="+ec(23[x])+"&"}}}if((J.G)&&(J.2s(J.G-1)=="&")){J=J.3b(0,J.G-1)}C J};z.kL=B(er){C z.9h(z.6K(er))};z.kK=B(ep){C z.eq(z.6K(ep))};z.kJ=B(2H){A J={};A qp=2H.1A("&");A dc=kI;z.1n(qp,B(1m){if(1m.G){A 9p=1m.1A("=");A 1p=dc(9p.3a());A 1U=dc(9p.22("="));if(z.1R(J[1p])){J[1p]=[J[1p]]}if(z.2l(J[1p])){J[1p].Y(1U)}I{J[1p]=1U}}});C J};z.e1=U;z.e6={"9g":B(1b){C 1b.2G},"2e":B(1b){if(!1o.eo){1z.1K("kH kG kF a kE of 9g/2e-6M-9m"+" 4F kD kC kB kA 4G en kz"+" (ky 1o.eo=K 4F kx kw D kv)")}C z.5m(1b.2G)},"2e-6M-ku":B(1b){A 6N=1b.2G;A 9o=6N.T("/*");A 9n=6N.31("*/");if((9o==-1)||(9n==-1)){C z.5m(1b.2G)}C z.5m(6N.21(9o+2,9n))},"2e-6M-9m":B(1b){A 6L=1b.2G;A 9l=6L.T("/*");A 9k=6L.31("*/");if((9l==-1)||(9k==-1)){1z.1K("kt en ks\'t 6M 9m!");C""}C z.5m(6L.21(9l+2,9k))},"kr":B(1b){C z.3u(1b.2G)},"kq":B(1b){if(z.1l&&!1b.el){z.1n(["ko","em","kn","km"],B(i){1u{A 1e=S 9j(kl[i]+".kk");1e.kj=U;1e.ki(1b.2G);C 1e}1y(e){}})}I{C 1b.el}}};(B(){z.e5=B(F,ej,ei,eh){A 2F={};2F.F=F;A 6J=L;if(F.3R){A 3R=z.1D(F.3R);A 9i=3R.kh("kg");2F.2E=F.2E||(9i?9i.1Z:L);6J=z.6K(3R)}I{2F.2E=F.2E}A 5l=[{}];if(6J){5l.Y(6J)}if(F.5g){5l.Y(F.5g)}if(F.ek){5l.Y({"z.ek":S 5d().8O()})}2F.1r=z.9h(z.1x.14(L,5l));2F.9d=F.9d||"9g";A d=S z.30(ej);d.5k(ei,B(eg){C eh(eg,d)});A ld=F.4E;if(ld&&z.1Y(ld)){d.ef(B(ee){C ld.2d(F,ee,2F)})}A 1G=F.9f;if(1G&&z.1Y(1G)){d.ed(B(e9){C 1G.2d(F,e9,2F)})}A 6I=F.kf;if(6I&&z.1Y(6I)){d.9e(B(e8){C 6I.2d(F,e8,2F)})}d.1F=2F;C d};A e4=B(O){O.e0=K;A 1b=O.1F.1b;if(V 1b.e7=="B"){1b.e7()}};A e3=B(O){C z.e6[O.1F.9d](O.1F.1b)};A e2=B(9c,O){1z.1K(9c);C 9c};A 3Q=B(F){A O=z.e5(F,e4,e3,e2);O.1F.1b=z.9b(O.1F.F);C O};A 5j=L;A 3t=[];A 94=B(){A dZ=(S 5d()).dU();if(!z.e1){z.1n(3t,B(4D,6H){if(!4D){C}A O=4D.O;1u{if(!O||O.e0||!4D.dT(O)){3t.3S(6H,1);C}if(4D.dR(O)){3t.3S(6H,1);4D.dP(O)}I{if(O.9a){if(O.9a+(O.1F.F.6G||0)<dZ){3t.3S(6H,1);A 1G=S 1O("6G ke");1G.dY="6G";O.5i(1G);O.4C()}}}}1y(e){1z.1K(e);O.5i(S 1O("kc!"))}})}if(!3t.G){dX(5j);5j=L;C}};z.dV=B(){1u{z.1n(3t,B(i){i.O.4C()})}1y(e){}};if(z.1l){z.dW(z.dV)}z.dH=B(O,dS,dQ,dO){if(O.1F.F.6G){O.9a=(S 5d()).dU()}3t.Y({O:O,dT:dS,dR:dQ,dP:dO});if(!5j){5j=dN(94,50)}94()};A dJ="8Z/x-kb-3R-ka";A dG=B(O){C O.1F.1b.6F};A dF=B(O){C 4==O.1F.1b.6F};A dE=B(O){if(z.8Y(O.1F.1b)){O.dM(O)}I{O.5i(S 1O("k9 k8 k7 5h:"+O.1F.1b.3N))}};A 3P=B(Z,O){A 3s=O.1F;A F=3s.F;3s.1b.dL(Z,3s.2E,(F.k6!==K),(F.8X?F.8X:1k),(F.8W?F.8W:1k));if(F.6E){R(A 5f in F.6E){if(5f.1M()==="5g-Z"&&!F.8V){F.8V=F.6E[5f]}I{3s.1b.dK(5f,F.6E[5f])}}}3s.1b.dK("k5-k4",(F.8V||dJ));1u{3s.1b.dI(3s.1r)}1y(e){O.4C()}z.dH(O,dG,dF,dE);C O};z.8T=B(4B){if(4B.1r.G){4B.2E+=(4B.2E.T("?")==-1?"?":"&")+4B.1r;4B.1r=L}};z.k3=B(F){A O=3Q(F);z.8T(O.1F);C 3P("dD",O)};z.k2=B(F){C 3P("dC",3Q(F))};z.k1=B(F){A O=3Q(F);O.1F.1r=F.k0;C 3P("dC",O)};z.jZ=B(F){C 3P("dA",3Q(F))};z.jY=B(F){A O=3Q(F);A dB=O.1F;if(F["8U"]){dB.1r=F.8U;F.8U=L}C 3P("dA",O)};z.jX=B(F){A O=3Q(F);z.8T(O.1F);C 3P("8S",O)};z.dz=B(jW){2m S 1O("z.dz 3O jV jU")}})()}if(!z.1h["z.X.fx"]){z.1h["z.X.fx"]=K;z.1Q("z.X.fx");z.dx=B(dy,1d){D.1w=dy;D.1d=1d;D.4x=B(n){C((D.1d-D.1w)*n)+D.1w}};z.2r("z.d6",L,{1P:B(F){z.1x(D,F);if(z.2l(D.2C)){D.2C=S z.dx(D.2C[0],D.2C[1])}},2C:L,8Q:jT,5a:L,4z:0,dj:10,du:L,6x:L,dt:L,8B:L,dh:L,ds:L,dr:L,dm:L,2D:U,2Z:U,4A:L,8N:L,3r:L,2o:0,4y:0,3q:B(H,F){if(D[H]){D[H].14(D,F||[])}C D},5b:B(dw,8R){if(8R){5e(D.3r);D.2D=D.2Z=U;D.2o=0}I{if(D.2D&&!D.2Z){C D}}D.3q("6x");A d=dw||D.du;if(d>0){5c(z.2p(D,B(){D.5b(L,8R)}),d);C D}D.4A=S 5d().8O();if(D.2Z){D.4A-=D.8Q*D.2o}D.8N=D.4A+D.8Q;D.2D=K;D.2Z=U;A 8P=D.2C.4x(D.2o);if(!D.2o){if(!D.4y){D.4y=D.4z}D.3q("dt",[8P])}D.3q("ds",[8P]);D.8M();C D},jS:B(){5e(D.3r);if(!D.2D){C D}D.2Z=K;D.3q("dr",[D.2C.4x(D.2o)]);C D},jR:B(dq,dp){5e(D.3r);D.2D=D.2Z=K;D.2o=dq*6D;if(dp){D.5b()}C D},jQ:B(dn){if(!D.3r){C}5e(D.3r);if(dn){D.2o=1}D.3q("dm",[D.2C.4x(D.2o)]);D.2D=D.2Z=U;C D},3N:B(){if(D.2D){C D.2Z?"3M":"jP"}C"jO"},8M:B(){5e(D.3r);if(D.2D){A dl=S 5d().8O();A 2q=(dl-D.4A)/(D.8N-D.4A);if(2q>=1){2q=1}D.2o=2q;if(D.5a){2q=D.5a(2q)}D.3q("8B",[D.2C.4x(2q)]);if(2q<1){D.3r=5c(z.2p(D,"8M"),D.dj)}I{D.2D=U;if(D.4z>0){D.4z--;D.5b(L,K)}I{if(D.4z==-1){D.5b(L,K)}I{if(D.4y){D.4z=D.4y;D.4y=0}}}D.2o=0;D.3q("dh")}}C D}});(B(){A df=B(E){if(z.1l){A ns=E.1c;if(!ns.8L.G&&z.1c(E,"8L")=="dg"){ns.8L="1"}if(!ns.3n.G&&z.1c(E,"3n")=="8K"){ns.3n="8K"}}};z.6C=B(F){if(V F.1d=="1k"){2m S 1O("z.6C jN an 1d 1Z")}F.E=z.1D(F.E);A 3p=z.1x({6w:{}},F);A 8J=(3p.6w.2W={});8J.1w=(V 3p.1w=="1k")?B(){C 2V(z.1c(3p.E,"2W"))}:3p.1w;8J.1d=3p.1d;A 2U=z.6y(3p);z.2c(2U,"6x",L,B(){df(3p.E)});C 2U};z.8I=B(F){C z.6C(z.1x({1d:1},F))};z.8H=B(F){C z.6C(z.1x({1d:0},F))};if(z.6B&&!z.3o){z.8E=B(n){C 2k("0.5")+((2Y.da((n+2k("1.5"))*2Y.d9))/2)}}I{z.8E=B(n){C 0.5+((2Y.da((n+1.5)*2Y.d9))/2)}}A d4=B(6A){D.8G=6A;R(A p in 6A){A 1a=6A[p];if(1a.1w 1N z.1J){1a.d7=S z.1J()}}D.4x=B(r){A J={};R(A p in D.8G){A 1a=D.8G[p];A 6z=L;if(1a.1w 1N z.1J){6z=z.d8(1a.1w,1a.1d,r,1a.d7).8F()}I{if(!z.2l(1a.1w)){6z=((1a.1d-1a.1w)*r)+1a.1w+(p!="2W"?1a.jM||"px":"")}}J[p]=6z}C J}};z.6y=B(F){F.E=z.1D(F.E);if(!F.5a){F.5a=z.8E}A 2U=S z.d6(F);z.2c(2U,"6x",2U,B(){A pm={};R(A p in D.6w){A 1a=pm[p]=z.1x({},D.6w[p]);if(z.1Y(1a.1w)){1a.1w=1a.1w()}if(z.1Y(1a.1d)){1a.1d=1a.1d()}A d5=(p.1M().T("jL")>=0);B 8C(E,p){4w(p){2X"58":C E.8D;2X"3n":C E.6v}A v=z.1c(E,p);C(p=="2W")?2V(v):2k(v)};if(V 1a.1d=="1k"){1a.1d=8C(D.E,p)}I{if(V 1a.1w=="1k"){1a.1w=8C(D.E,p)}}if(d5){1a.1w=S z.1J(1a.1w);1a.1d=S z.1J(1a.1d)}I{1a.1w=(p=="2W")?2V(1a.1w):2k(1a.1w)}}D.2C=S d4(pm)});z.2c(2U,"8B",2U,B(8A){R(A s in 8A){z.1c(D.E,s,8A[s])}});C 2U}})()}',62,1711,'|||||||||||||||||||||||||||||||||||dojo|var|function|return|this|node|args|length|evt|else|ret|true|null|obj|elem|dfd|arguments|arr|for|new|indexOf|false|typeof||_base|push|type||te|||apply|attr|||||prop|xhr|style|end|doc|match|uri|_hasResource|key|del|undefined|isIE|item|forEach|djConfig|name|document|query|while|_66|try|res|start|mixin|catch|console|split|root|prototype|byId|gcs|ioArgs|err|NodeList|_p|Color|debug|parentNode|toLowerCase|instanceof|Error|constructor|provide|isString|ta|255|val|_a|global|_69|isFunction|value||substring|join|map|tn||window||path|_343|_220|_listeners|connect|call|json|replace|left|_b|toString|128|parseFloat|isArray|throw||_percent|hitch|step|declare|charAt|nodeType|_3c3|nidx|slice|faux|fired|_c4|_7e|loc|curve|_active|url|_44c|responseText|str|_312|idx|tqp|isNaN|isOpera|_22d|callee|add|_18b|_f8|_e2|_41|anim|Number|opacity|case|Math|_paused|Deferred|lastIndexOf|||||||||shift|substr|string|_3e7|_3ce|break|_w|charCode|_listener|_d5|_c5|authority|_49|width|isSafari|_49e|fire|_timer|_47b|_465|eval|_in|_40c|_409|_362|_3d9|className|_3d5|_386|_37a|body|getComputedStyle|box|_221|keyCode|remove|_8d|_46|paused|status|not|_478|_461|form|splice|filter|concat|tret|childNodes|_38b|_367|_33d||||||||||_340|_348|keypress|appendChild|_toArray|Array|_2b0|_toPixelValue|ref|_fixEvent|_19f|_14c|_14a|_150|_141|declaredClass|_d4|_99|_Url|_83|scheme|_67|_3d|switch|getValue|_startRepeatCount|repeat|_startTime|_47e|cancel|tif|load|to|with|tf|getElementsByTagName|number|_34c|_342|extend|_1e3|_normalizeEventName|_14b|_14e|results|self|cbfn|_f9|_d8|_b2|src|_88|dav||baseUrl|fragment|_loadedModules|_44|_43|_loaders|mll|height||easing|play|setTimeout|Date|clearTimeout|hdr|content|code|errback|_464|addCallbacks|_450|fromJson|_413|_3fc|_3ee|max|_31e|cond|getAttribute|_3d4|obi|tagName|_360|_381|contains|firstChild|_368|_372|_320|place|_2fa|scrollTop|_299|scrollLeft|top|documentElement|_288|_287|_getBorderExtents|_23f|_23d|_239|_218|_216|_211|eles|target|keys|shiftKey|ctrlKey|event|192|iel|_1db|delete|_1cf||addEventListener|String|_1af|_157|array|_14d|continue|_14f|_137|_11f|_106|_findMethod|has|_delegate|_dc|_d3|loaded|_9a|_loadInit|_inFlightCount|getObject|tv|_4f|_postLoad|_2d|offsetWidth|properties|beforeBegin|animateProperty|_4ad|_4a6|isKhtml|_fade|100|headers|readyState|timeout|_469|_457|_44d|formToObject|_441|comment|_43d|_36f|_419|tp|_40a|_406|_407|_373|_403|_3e6|_31b|cbi|test|_3c7|nextSibling|last|_3a1|_38e|_365|_36b|ecn|_364|_363|_356|_35e|_35f|_34f|_34d|_349|trim|tci|_328|_32b|_31f|_31c|_anim|_300|_2ff|_2f5|_2e7|removeClass|addClass|func|_2c4|cls|_2a9|_2ae|_280|_27f|_getPadExtents|isMoz|none|_233|cssText|_214|_fixCallback|_synthesizeEvent|stopPropagation|preventDefault|_setKeyChar|_1e1|ieh|_1d7|_1be|colorFromArray|sanitize|bits|rgb|_156|_fire|_resback|_13d|partial|_13a|silentlyCancelled|_topics|_127|_f1|_f0|superclass|_ec|_e3|mct|setObject|_bf|_b3|object|require|_92|_khtmlTimer|location|XMLHTTP|locale|dua|_71|_modulePrefixes|_55|_loadModule|_51|_50|_4e|pop|_3f|_callLoaded|_unloaders|_loadNotifying|_loadedUrls|_27|_24|_1d|_5|_4b7|onAnimate|getStyle|offsetHeight|_defaultEasing|toCss|_properties|fadeOut|fadeIn|_49f|auto|zoom|_cycle|_endTime|valueOf|_494|duration|_492|DELETE|_ioAddQueryToUrl|putData|contentType|password|user|_isDocumentOk|application|||||_466||||||startTime|_xhrObj|_45f|handleAs|addBoth|error|text|objectToQuery|_44f|ActiveXObject|_443|_442|filtered|_43f|_43e|_437|file|tnl|_41c|_filterQueryResult|_zipIdx|_408|_402|evaluate|_3ed|_380|fHit|_361|_33b|_3da|_3ab|_3d6|RegExp|_327|_3cf|_3c9|child|innerHTML|first|tval|_391|class|pnc|_37e|_37c|_375|_366|_35c|_35a|_353|_33c|_336|_314|||_315|_oe|_307|_309|cloneNode|after|createElement||_2f8|_2ef|_2ee|unshift|coords|some|every||_2cb|script|_2c9|parent||a2p||_2c3|_2bd||abs|_getMarginBox|_2b3|_2a6|position|_2a7|_2ac|_2ab|_getIeDocumentElementOffset|getBoundingClientRect|ownerDocument|_2a3|clientWidth|_isBodyLtr|_fixIeBiDiScrollLeft|_bodyLtr|_29d|_getContentBox|_setBox|_getMarginExtents|_getPadBorderExtents|_usesBorderBox|boxModel|pcs|st|sl|_240|runtimeStyle|_dcm|BackCompat|compatMode|default|_21b|_d|html|_event_listener|handlers|PAGE_DOWN|PAGE_UP|RIGHT_ARROW|LEFT_ARROW|DOWN_ARROW|UP_ARROW|_preventDefault||_stopPropagation|returnValue||_trySetKeyCode|cancelBubble|currentTarget|106|_1ee|111||_1e8|_1e7|||se|srcElement|onkeydown||_1d0|_disconnect|lid|_1c0|_connect|_set|_195|_185|_183|_17d|_everyOrSome|_16b|_172|_15b|Function|_154|_escapeString|_140|chain|_check|canceller|_12d|_124|_11a|_10d|_107|inherited|_fa|_f2|_findMixin|_constructor|preamble|_de|clone|tmp|_c7|TMP|_be|_ba|_mixin|isBrowser|lang|firebug||param|modulePaths|_a7|_fireCallback|_a0|setContext||_9c|unloaded||||_96|_93|navigator|_90|_89||protocol|_84|_86|_XMLHTTP_PROGIDS|gears|google|setAttribute|_80|_77|cfg|_6f|_getModuleSymbols|_5a|_58|_53|_4d|_4c|_45|_40|_moduleHasPrefix|_loadUri|_28|_26|_21|_22|tests|doh|_20|_1f|_1c|version|_1b|_19|_getProp|_11|_4|_4a5|_4b3|_Animation|tempColor|blendColors|PI|sin|||||_49a|normal|onEnd||rate||curr|onStop|_497||_496|pct|onPause|onPlay|onBegin|delay||_491|_Line|_48b|wrapForm|PUT|_487|POST|GET|_476|_474|_472|_ioWatch|send|_471|setRequestHeader|open|callback|setInterval|_470|resHandle|_46f|ioCheck|_46e|validCheck|getTime|_ioCancelAll|addOnUnload|clearInterval|dojoType|now|canceled|_blockAsync|_45e|_45c|_459|_ioSetArgs|_contentHandlers|abort|_458|_456||||addErrback|_454|addCallback|_452|_44b|_44a|_449|preventCache|responseXML|Microsoft|JSON|usePlainJson|_431|toJson|_430|_42d|image|opt|ria|_421|_41b|_40b|_zip|_410|_40d|_357|sqf|_374|_3e5|_3df|_38f|clc|pred|parseInt|ntf|_3bf|_3bc|cnl|previousSibling|_3a9|_3a6|_39c|_399|_396|_392|__cachedIndex|__cachedLength|_376|iterateNext|_34a|_355|_354|_32c|_350|_34b|_33f|_33e|_33a|_338|_334|_332||_330|_32e||_322|_316|mousemove|mouseout|mouseover|_305|lastChild||_2f9||_2f2|_2f1|removeChild|_2ec|_2eb|_2ea|_2e6||_2e4|_2e2|_2d6|_2d5|_2d4|_2d3|_2d2|_2d1|_2cd|_2cc|scs|write|_2c8|hasClass|_2c0|_2bb|_2b5|_abs|_docScroll|offsetParent|offsetTop|offsetLeft|absolute|getBoxObjectFor|clientLeft|_setContentSize|_setMarginBox|_28d|_286|_285|_289|NaN|_281|border|_272|_26b|_260|_258|_253|_24c|_246|_23a|_getOpacity|_setOpacity|_238|td|tr|nodeName|FILTER|_22f|_22e|currentStyle|_22c|_22b|display|QuirksMode|unselectable|_217|isMozilla|getElementById|attributes|all|_ie_listener|_getIeDispatcher|_1fd|NUM_LOCK|SCROLL_LOCK|INSERT|END|HOME|PAUSE|F12|F11|F10|F9|F8|F7|F6|F5|F4|F3|F2|F1|63232|SHIFT_TAB|TAB|keyIdentifier|_1f3|stopEvent|_punctMap|222|219|186|onkeypress|_stealthKeyDown|_fixKeys|relatedTarget|_1e0|_1df|_stealthKeydown|_1d6|_1d5|_1d1|_1ca|_1c9|_1cb|_1c2|_1c1|_1c3|_1c4|_1bc|_1b3|_1b2|colorFromHex|colorFromRgb|named|colorFromString|mask|rgba|_19c|_197|_192|setColor|_180|_178|_177|_175|_174|_16d|_166|_164|_163|_162|_15c|_15d|_15e|index|__json__|toJsonIndentStr|_nextId|_12f|_12b|publish|_128|_126|_125|_122|_121|_123|_11c|_11b|_10c|_10b|_108|getDispatcher|argument|nom|_construct|_core|_makeCtor|_df|_db|deprecated|isObject|_cc||scope||_hitchArgs|_c2||pre|_c1|native|isDebug||registerModulePath|_a8||finally|||_a6|_a5|_a4|_a3|_a2|_a1|_9f|_9e|_9d|_9b|_98|_97|onbeforeunload|ipt|scr|complete|_95|userAgent|_modulesLoaded|initialized|_initFired|_8c|_8a|_getText|_87|ieForceActiveXXhr|Msxml2|isGears|_81|_gearsObject|googlegears|GearsFactory|isFF|_7d|Safari|_72|_name|_6c|ire|ore|_68|i18n|_5b|requireIf|_56|_52|loading|_4a|_loadPath|_47|_48|_global_omit_module_check|_getModulePrefix|_3c|_3a|_37|_30|Boolean|_loadUriAndCheck|_2e||cacheBust|_1e|_1a|_17|_16|_15|_14|_f|_10|_e|_9|_8|revision|flag|patch|minor|major|_6|color|units|needs|stopped|playing|stop|gotoPercent|pause|1000|implemented|yet|_48a|xhrDelete|rawXhrPut|xhrPut|postData|rawXhrPost|xhrPost|xhrGet|Type|Content|sync|response|http|bad|urlencoded|www|_watchInFlightError||exceeded|handle|action|getAttributeNode|loadXML|async|XMLDOM|prefixes|MSXML3|MSXML|MSXML2||xml|javascript|wasn|your|optional|message|off|turn|use|endpoints|issues|security|potential|avoid|mimetype|using|consider|please|decodeURIComponent|queryToObject|formToJson|formToQuery|encodeURIComponent|selected|option|multiple|checked|checkbox|radio|disabled|textarea|select|button|reset|submit|input|_3fb|hasAttribute|0n|even|odd|nth|_3b5|empty|_3b1|_3ad|htmlFor|_38a|under||exprssion|failure|ANY_TYPE|XPathResult|starts|keyup|keydown|mouseup|mousedown|blur|click|combine|span|addContent||adopt|orphan|_2de|_2dd|styles|_2da|_2d9|_2cf|_2ce|show|createPopup|toggleClass|scrollWidth|clientTop|ltr|direction|pageXOffset|pageYOffset|fixed|contentBox|marginBox|BUTTON|TABLE|_getBorderBox|clientHeight|visible|overflow|marginBottom|marginRight|marginTop|marginLeft|borderBottomWidth|borderBottomStyle|borderRightWidth|borderRightStyle|borderTopWidth|borderTopStyle|borderLeftWidth|borderLeftStyle|paddingBottom|paddingRight|paddingTop|paddingLeft|offset||min|padding||margin|Opacity|Alpha|alpha|filters|pixelLeft|medium|_22a|defaultView|before||insertBefore|KhtmlUserSelect|MozUserSelect|setSelectable|isDescendant|div|_destroyElement|BackgroundImageCache|execCommand|PageDown|PageUp|Right|Left|Down|Up|63289|63249|63248|PRINT_SCREEN|63302|63277|63276|63275|63273|63272|63250|63247|63246|63245|63244|63243|63242|63241|63240|63239|63238|63237|63236|63235|63234|63233|Enter|_1f9|which|_1f6|bubbledKeyCode|221|220||||191|190|189|188|187|toElement|fromElement|clientY|pageY||clientX|pageX|offsetY|||layerY|offsetX|layerX|parentWindow|_nop|_allow_leaks|145|144|126|F15|125|F14|124|F13|123|122|121|120|119|118|117|116|115|114|113|112|NUMPAD_DIVIDE|110|NUMPAD_PERIOD|109|NUMPAD_MINUS|108|NUMPAD_ENTER|107|NUMPAD_PLUS|NUMPAD_MULTIPLY|105|NUMPAD_9|104|NUMPAD_8|103|NUMPAD_7|102|NUMPAD_6|101|NUMPAD_5|NUMPAD_4||NUMPAD_3|NUMPAD_2|NUMPAD_1|NUMPAD_0||SELECT|RIGHT_WINDOW||LEFT_WINDOW||HELP|SPACE|ESCAPE|CAPS_LOCK|ALT|CTRL|SHIFT|ENTER|CLEAR|BACKSPACE|attachEvent|fixEvent|fromCharCode|keyChar|_1b9|removeEventListener|0x|round|toHex|toRgba|toRgb|aqua|teal|blue|navy|yellow|olive|lime|green|fuchsia|purple|red|maroon|white|gray|silver|black|boolean|called|already|Cancelled|connectPublisher|unsubscribe|subscribe|disconnect|_113|_112||_111|_110|||found|was||must|_|module|||required|likely|It|declaration|Mixin|separate|instead|property|initializer||pass|_c9|_bb|_b7|nfunction|isAlien|isFinite|isArrayLike|_firebug|withDoc|withGlobal|_writeIncludes|VML|behavior|addRule|createStyleSheet|vml|com|microsoft|schemas|urn|namespaces|onunload|onreadystatechange|defer|khtml|WebKit|DOMContentLoaded|enableMozDomContentLoaded|domcontentloaded|Unable|base|chrome|1223|304|300|200|available|XMLHttpRequest|_println|language|userLanguage|isQuirks|factory|mimeTypes|Factory|Gears|_7f|MSIE||Firefox|Gecko|Konqueror||Opera|appVersion|xd|browser|moduleUrl|port|host|hostenv|_requireLocalization|_5f|_5e|_5d|_5c|requireLocalization|requireAfterIf|_57|common|platformRequire|defined|symbol|_isXDomain|tried|Could|__package__|packageFileName|_42|useXDomain|flight|still|files|addOnLoad|failed|sourceURL|util|notice|without|change|subject|APIs|EXPERIMENTAL|experimental|removed|will|DEPRECATED|exists|10315|Rev|Mobile|Spidermonkey|Rhino||Browser|delayMozLoadingFix|preventBackButtonFix|libraryScriptUri|baseRelativePath|baseScriptUri|allowQueryConfig|warn|trace|timeEnd||time|profileEnd|profile|log|info|groupEnd|group|dirxml|dir|count|assert'.split('|'),0,{});
+
+
+/*
+
+Prototype 1.5 rc0
+ - Adapted from Ruby on Rails - http://dev.rubyonrails.org/browser/spinoffs/prototype/src
+ - By Lunarmedia, 06 August, 2006
+ - Available at (and packed with) JavascriptCompressor.com
+
+Please note this version is missing the selector.js component of the full Prototype library.
+You can get the compressed version of selector at JavascriptCompressor.com
+
+*/
+
+var decompressedPrototype = function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[(function(e){return d[e]})];e=(function(){return'\\w+'});c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('d T={4l:\'1.5.8P\',3E:\'(?:<3G.*?>)((\\n|\\r|.)*?)(?:<\\/3G>)\',2v:7(){},K:7(x){c x}};d 1b={17:7(){c 7(){6.1I.2n(6,N)}}};d 1e=z q();q.u=7(5d,O){G(d 1G 2M O){5d[1G]=O[1G]}c 5d};q.1U=7(U){1j{f(U==1v)c\'1v\';f(U==1L)c\'1L\';c U.1U?U.1U():U.2C()}1s(e){f(e 8R 9l)c\'...\';25 e}};7j.v.1d=7(){d 43=6,23=$A(N),U=23.8S();c 7(){c 43.2n(U,23.3s($A(N)))}};7j.v.8U=7(U){d 43=6;c 7(C){c 43.8V(U,C||1W.C)}};q.u(8Q.v,{8W:7(){d 4Z=6.2C(16);f(6<16)c\'0\'+4Z;c 4Z},5j:7(){c 6+1},8Y:7(o){$R(0,6,11).V(o);c 6}});d 6s={6j:7(){d 48;G(d i=0;i<N.t;i++){d 6L=N[i];1j{48=6L();1y}1s(e){}}c 48}};d 6Q=1b.17();6Q.v={1I:7(1a,1J){6.1a=1a;6.1J=1J;6.41=Y;6.2A()},2A:7(){5Z(6.2D.1d(6),6.1J*4z)},2D:7(){f(!6.41){1j{6.41=11;6.1a()}8Z{6.41=Y}}}};q.u(4b.v,{2T:7(1A,1z){d L=\'\',O=6,I;1z=N.90.52(1z);1H(O.t>0){f(I=O.I(1A)){L+=O.47(0,I.w);L+=(1z(I)||\'\').2C();O=O.47(I.w+I[0].t)}1D{L+=O,O=\'\'}}c L},92:7(1A,1z,3i){1z=6.2T.52(1z);3i=3i===1v?1:3i;c 6.2T(1A,7(I){f(--3i<0)c I[0];c 1z(I)})},93:7(1A,o){6.2T(1A,o);c 6},94:7(t,2S){t=t||30;2S=2S===1v?\'...\':2S;c 6.t>t?6.47(0,t-2S.t)+2S:6},9F:7(){c 6.2y(/^\\s+/,\'\').2y(/\\s+$/,\'\')},71:7(){c 6.2y(/<\\/?[^>]+>/7Y,\'\')},2Q:7(){c 6.2y(z 3O(T.3E,\'5P\'),\'\')},70:7(){d 6Y=z 3O(T.3E,\'5P\');d 5p=z 3O(T.3E,\'98\');c(6.I(6Y)||[]).1C(7(5o){c(5o.I(5p)||[\'\',\'\'])[1]})},3q:7(){c 6.70().1C(7(3G){c 4q(3G)})},9E:7(){d 1q=J.4Y(\'1q\');d 1Y=J.9D(6);1q.75(1Y);c 1q.3h},9c:7(){d 1q=J.4Y(\'1q\');1q.3h=6.71();c 1q.2z[0]?1q.2z[0].6q:\'\'},78:7(){d 7i=6.I(/^\\??(.*)$/)[1].3j(\'&\');c 7i.36({},7(5b,72){d 1i=72.3j(\'=\');5b[1i[0]]=1i[1];c 5b})},1Z:7(){c 6.3j(\'\')},3P:7(){d 2l=6.3j(\'-\');f(2l.t==1)c 2l[0];d 54=6.5g(\'-\')==0?2l[0].7e(0).3Y()+2l[0].7g(1):2l[0];G(d i=1,73=2l.t;i<73;i++){d s=2l[i];54+=s.7e(0).3Y()+s.7g(1)}c 54},1U:7(){c"\'"+6.2y(/\\\\/g,\'\\\\\\\\\').2y(/\'/g,\'\\\\\\\'\')+"\'"}});4b.v.2T.52=7(1z){f(2i 1z==\'7\')c 1z;d 2U=z 3n(1z);c 7(I){c 2U.7a(I)}};4b.v.9h=4b.v.78;d 3n=1b.17();3n.79=/(^|.|\\r|\\n)(#\\{(.*?)\\})/;3n.v={1I:7(2U,1A){6.2U=2U.2C();6.1A=1A||3n.79},7a:7(U){c 6.2U.2T(6.1A,7(I){d 53=I[1];f(53==\'\\\\\')c I[2];c 53+(U[I[3]]||\'\').2C()})}};d $1y=z q();d $49=z q();d 1p={V:7(o){d w=0;1j{6.2m(7(h){1j{o(h,w++)}1s(e){f(e!=$49)25 e}})}1s(e){f(e!=$1y)25 e}},9n:7(o){d L=11;6.V(7(h,w){L=L&&!!(o||T.K)(h,w);f(!L)25 $1y});c L},9o:7(o){d L=11;6.V(7(h,w){f(L=!!(o||T.K)(h,w))25 $1y});c L},3e:7(o){d P=[];6.V(7(h,w){P.W(o(h,w))});c P},7n:7(o){d L;6.V(7(h,w){f(o(h,w)){L=h;25 $1y}});c L},7o:7(o){d P=[];6.V(7(h,w){f(o(h,w))P.W(h)});c P},9p:7(1A,o){d P=[];6.V(7(h,w){d 7c=h.2C();f(7c.I(1A))P.W((o||T.K)(h,w))});c P},1M:7(U){d 51=Y;6.V(7(h){f(h==U){51=11;25 $1y}});c 51},36:7(45,o){6.V(7(h,w){45=o(45,h,w)});c 45},9q:7(1F){d 23=$A(N).47(1);c 6.3e(7(h){c h[1F].2n(h,23)})},9s:7(o){d L;6.V(7(h,w){h=(o||T.K)(h,w);f(L==1v||h>=L)L=h});c L},9u:7(o){d L;6.V(7(h,w){h=(o||T.K)(h,w);f(L==1v||h<L)L=h});c L},9v:7(o){d 50=[],58=[];6.V(7(h,w){((o||T.K)(h,w)?50:58).W(h)});c[50,58]},3r:7(1G){d P=[];6.V(7(h,w){P.W(h[1G])});c P},9x:7(o){d P=[];6.V(7(h,w){f(!o(h,w))P.W(h)});c P},9y:7(o){c 6.3e(7(h,w){c{h:h,59:o(h,w)}}).9z(7(18,3U){d a=18.59,b=3U.59;c a<b?-1:a>b?1:0}).3r(\'h\')},1Z:7(){c 6.3e(T.K)},9B:7(){d o=T.K,23=$A(N);f(2i 23.5e()==\'7\')o=23.9C();d 7l=[6].3s(23).1C($A);c 6.1C(7(h,w){c o(7l.3r(w))})},1U:7(){c\'#<1p:\'+6.1Z().1U()+\'>\'}};q.u(1p,{1C:1p.3e,5v:1p.7n,1k:1p.7o,8M:1p.1M,7p:1p.1Z});d $A=1E.7q=7(2R){f(!2R)c[];f(2R.1Z){c 2R.1Z()}1D{d P=[];G(d i=0;i<2R.t;i++)P.W(2R[i]);c P}};q.u(1E.v,1p);f(!1E.v.4d)1E.v.4d=1E.v.4m;q.u(1E.v,{2m:7(o){G(d i=0;i<6.t;i++)o(6[i])},5i:7(){6.t=0;c 6},7r:7(){c 6[0]},5e:7(){c 6[6.t-1]},7s:7(){c 6.1k(7(h){c h!=1v||h!=1L})},6J:7(){c 6.36([],7(6H,h){c 6H.3s(h&&h.5D==1E?h.6J():[h])})},5s:7(){d 4N=$A(N);c 6.1k(7(h){c!4N.1M(h)})},5g:7(U){G(d i=0;i<6.t;i++)f(6[i]==U)c i;c-1},4m:7(5h){c(5h!==Y?6:6.1Z()).4d()},1U:7(){c\'[\'+6.1C(q.1U).1N(\', \')+\']\'}});d 4h={2m:7(o){G(d 1O 2M 6){d h=6[1O];f(2i h==\'7\')49;d 1i=[1O,h];1i.1O=1O;1i.h=h;o(1i)}},7t:7(){c 6.3r(\'1O\')},4N:7(){c 6.3r(\'h\')},7u:7(2N){c $H(2N).36($H(6),7(4Q,1i){4Q[1i.1O]=1i.h;c 4Q})},7w:7(){c 6.1C(7(1i){c 1i.1C(4n).1N(\'=\')}).1N(\'&\')},1U:7(){c\'#<4h:{\'+6.1C(7(1i){c 1i.1C(q.1U).1N(\': \')}).1N(\', \')+\'}>\'}};7 $H(U){d 2N=q.u({},U||{});q.u(2N,1p);q.u(2N,4h);c 2N};3L=1b.17();q.u(3L.v,1p);q.u(3L.v,{1I:7(22,2x,2H){6.22=22;6.2x=2x;6.2H=2H},2m:7(o){d h=6.22;2q{o(h);h=h.5j()}1H(6.1M(h))},1M:7(h){f(h<6.22)c Y;f(6.2H)c h<6.2x;c h<=6.2x}});d $R=7(22,2x,2H){c z 3L(22,2x,2H)};d M={4w:7(){c 6s.6j(7(){c z 5C()},7(){c z 5n(\'7y.6d\')},7(){c z 5n(\'7z.6d\')})||Y},4s:0};M.2W={3b:[],2m:7(o){6.3b.2m(o)},69:7(4F){f(!6.1M(4F))6.3b.W(4F)},7A:7(5t){6.3b=6.3b.5s(5t)},3y:7(1a,26,E,2Z){6.V(7(3o){f(3o[1a]&&2i 3o[1a]==\'7\'){1j{3o[1a].2n(3o,[26,E,2Z])}1s(e){}}})}};q.u(M.2W,1p);M.2W.69({5G:7(){M.4s++},1B:7(){M.4s--}});M.44=7(){};M.44.v={4a:7(m){6.m={1F:\'4j\',4p:11,5H:\'5E/x-86-Q-7C\',28:\'\'};q.u(6.m,m||{})},3l:7(){c 6.E.32==1v||6.E.32==0||(6.E.32>=84&&6.E.32<7E)},7G:7(){c!6.3l()}};M.3t=1b.17();M.3t.5L=[\'7H\',\'80\',\'7I\',\'7J\',\'4t\'];M.3t.v=q.u(z M.44(),{1I:7(1l,m){6.E=M.4w();6.4a(m);6.26(1l)},26:7(1l){d 28=6.m.28||\'\';f(28.t>0)28+=\'&7K=\';1j{6.1l=1l;f(6.m.1F==\'7L\'&&28.t>0)6.1l+=(6.1l.I(/\\?/)?\'&\':\'?\')+28;M.2W.3y(\'5G\',6,6.E);6.E.7N(6.m.1F,6.1l,6.m.4p);f(6.m.4p){6.E.5T=6.5J.1d(6);2Y((7(){6.4r(1)}).1d(6),10)}6.5A();d 1c=6.m.5V?6.m.5V:28;6.E.7O(6.m.1F==\'4j\'?1c:1L)}1s(e){6.3p(e)}},5A:7(){d 1P=[\'X-7P-7Q\',\'5C\',\'X-T-4l\',T.4l,\'7R\',\'1Y/7m, 1Y/2e, 5E/5F, 1Y/5F, */*\'];f(6.m.1F==\'4j\'){1P.W(\'5Q-2g\',6.m.5H);f(6.E.7S)1P.W(\'7T\',\'7U\')}f(6.m.1P)1P.W.2n(1P,6.m.1P);G(d i=0;i<1P.t;i+=2)6.E.7V(1P[i],1P[i+1])},5J:7(){d 2F=6.E.2F;f(2F!=1)6.4r(6.E.2F)},4A:7(B){1j{c 6.E.7W(B)}1s(e){}},5M:7(){1j{c 4q(\'(\'+6.4A(\'X-7X\')+\')\')}1s(e){}},5R:7(){1j{c 4q(6.E.3F)}1s(e){6.3p(e)}},4r:7(2F){d C=M.3t.5L[2F];d E=6.E,2Z=6.5M();f(C==\'4t\'){1j{(6.m[\'2I\'+6.E.32]||6.m[\'2I\'+(6.3l()?\'81\':\'82\')]||T.2v)(E,2Z)}1s(e){6.3p(e)}f((6.4A(\'5Q-2g\')||\'\').I(/^1Y\\/7m/i))6.5R()}1j{(6.m[\'2I\'+C]||T.2v)(E,2Z);M.2W.3y(\'2I\'+C,6,E,2Z)}1s(e){6.3p(e)}f(C==\'4t\')6.E.5T=T.2v},3p:7(57){(6.m.5W||T.2v)(6,57);M.2W.3y(\'5W\',6,57)}});M.4C=1b.17();q.u(q.u(M.4C.v,M.3t.v),{1I:7(1w,1l,m){6.4x={3m:1w.3m?$(1w.3m):$(1w),3z:1w.3z?$(1w.3z):(1w.3m?1L:$(1w))};6.E=M.4w();6.4a(m);d 1B=6.m.1B||T.2v;6.m.1B=(7(E,U){6.5Y();1B(E,U)}).1d(6);6.26(1l)},5Y:7(){d 3A=6.3l()?6.4x.3m:6.4x.3z;d 3k=6.E.3F;f(!6.m.3q)3k=3k.2Q();f(3A){f(6.m.60){z 6.m.60(3A,3k)}1D{k.6h(3A,3k)}}f(6.3l()){f(6.1B)2Y(6.1B.1d(6),10)}}});M.61=1b.17();M.61.v=q.u(z M.44(),{1I:7(1w,1l,m){6.4a(m);6.1B=6.m.1B;6.1J=(6.m.1J||2);6.2s=(6.m.2s||1);6.4B={};6.1w=1w;6.1l=1l;6.22()},22:7(){6.m.1B=6.63.1d(6);6.2D()},7b:7(){6.4B.1B=1v;89(6.65);(6.1B||T.2v).2n(6,N)},63:7(26){f(6.m.2s){6.2s=(26.3F==6.64?6.2s*6.m.2s:1);6.64=26.3F}6.65=2Y(6.2D.1d(6),6.2s*6.1J*4z)},2D:7(){6.4B=z M.4C(6.1w,6.1l,6.m)}});7 $(){d P=[],4;G(d i=0;i<N.t;i++){4=N[i];f(2i 4==\'8c\')4=J.8d(4);P.W(k.u(4))}c P.t<2?P[0]:P};J.8f=7(1f,6a){d 6b=($(6a)||J.1c).4D(\'*\');c $A(6b).36([],7(12,4E){f(4E.1f.I(z 3O("(^|\\\\s)"+1f+"(\\\\s|$)")))12.W(k.u(4E));c 12})};f(!1W.k)d k=z q();k.u=7(4){f(!4)c;f(4X)c 4;f(!4.6e&&4.1h&&4!=1W){d 2a=k.3d,2r=k.u.2r;G(d 1G 2M 2a){d h=2a[1G];f(2i h==\'7\')4[1G]=2r.4W(h)}}4.6e=11;c 4};k.u.2r={4W:7(h){c 6[h]=6[h]||7(){c h.2n(1L,[6].3s($A(N)))}}};k.3d={4U:7(4){c $(4).l.2B!=\'3Q\'},6N:7(){G(d i=0;i<N.t;i++){d 4=$(N[i]);k[k.4U(4)?\'6f\':\'6w\'](4)}},6f:7(){G(d i=0;i<N.t;i++){d 4=$(N[i]);4.l.2B=\'3Q\'}},6w:7(){G(d i=0;i<N.t;i++){d 4=$(N[i]);4.l.2B=\'\'}},42:7(4){4=$(4);4.1X.8h(4)},6h:7(4,2e){$(4).3h=2e.2Q();2Y(7(){2e.3q()},10)},2y:7(4,2e){4=$(4);f(4.6k){4.6k=2e.2Q()}1D{d 1K=4.6R.6S();1K.56(4);4.1X.8i(1K.6T(2e.2Q()),4)}2Y(7(){2e.3q()},10)},8k:7(4){4=$(4);c 4.2k},3K:7(4){c z k.3S(4)},8l:7(4,1f){f(!(4=$(4)))c;c k.3K(4).1M(1f)},8m:7(4,1f){f(!(4=$(4)))c;c k.3K(4).7k(1f)},8n:7(4,1f){f(!(4=$(4)))c;c k.3K(4).42(1f)},8p:7(4){4=$(4);G(d i=0;i<4.2z.t;i++){d 3M=4.2z[i];f(3M.8q==3&&!/\\S/.4v(3M.6q))k.42(3M)}},8r:7(4){c $(4).3h.I(/^\\s*$/)},8s:7(4,3I){4=$(4),3I=$(3I);1H(4=4.1X)f(4==3I)c 11;c Y},6t:7(4){4=$(4);d x=4.x?4.x:4.2f,y=4.y?4.y:4.29;1W.6t(x,y)},1R:7(4,l){4=$(4);d h=4.l[l.3P()];f(!h){f(J.4J&&J.4J.6v){d 4L=J.4J.6v(4,1L);h=4L?4L.8v(l):1L}1D f(4.6x){h=4.6x[l.3P()]}}f(1W.6E&&[\'18\',\'1n\',\'3U\',\'6G\'].1M(l))f(k.1R(4,\'14\')==\'4G\')h=\'6y\';c h==\'6y\'?1L:h},8x:7(4,l){4=$(4);G(d B 2M l)4.l[B.3P()]=l[B]},8y:7(4){4=$(4);f(k.1R(4,\'2B\')!=\'3Q\')c{21:4.2p,24:4.2k};d 20=4.l;d 6B=20.4O;d 6A=20.14;20.4O=\'31\';20.14=\'2o\';20.2B=\'\';d 6C=4.6m;d 6D=4.6p;20.2B=\'3Q\';20.14=6A;20.4O=6B;c{21:6C,24:6D}},8z:7(4){4=$(4);d 4R=k.1R(4,\'14\');f(4R==\'4G\'||!4R){4.4T=11;4.l.14=\'3T\';f(1W.6E){4.l.1n=0;4.l.18=0}}},8A:7(4){4=$(4);f(4.4T){4.4T=1v;4.l.14=4.l.1n=4.l.18=4.l.6G=4.l.3U=\'\'}},8B:7(4){4=$(4);f(4.3c)c;4.3c=4.l.3V;f((k.1R(4,\'3V\')||\'4U\')!=\'31\')4.l.3V=\'31\'},8D:7(4){4=$(4);f(4.3c)c;4.l.3V=4.3c;4.3c=1v}};q.u(k,k.3d);d 4X=Y;f(!3W&&/3x|3w|3u/.4v(33.62)){d 3W={}};k.6K=7(2a){q.u(k.3d,2a||{});f(2i 3W!=\'1v\'){d 2a=k.3d,2r=k.u.2r;G(d 1G 2M 2a){d h=2a[1G];f(2i h==\'7\')3W.v[1G]=2r.4W(h)}4X=11}};k.6K();d 6M=z q();6M.2B=k.6N;1e.1g=7(3f){6.3f=3f};1e.1g.v={1I:7(4,2t){6.4=$(4);6.2t=2t.2Q();f(6.3f&&6.4.6O){1j{6.4.6O(6.3f,6.2t)}1s(e){d 1h=6.4.1h.2w();f(1h==\'4V\'||1h==\'8N\'){6.2X(6.6U())}1D{25 e}}}1D{6.1K=6.4.6R.6S();f(6.2V)6.2V();6.2X([6.1K.6T(6.2t)])}2Y(7(){2t.3q()},10)},6U:7(){d 1q=J.4Y(\'1q\');1q.3h=\'<6V><4V>\'+6.2t+\'</4V></6V>\';c $A(1q.2z[0].2z[0].2z)}};d 1g=z q();1g.6W=1b.17();1g.6W.v=q.u(z 1e.1g(\'96\'),{2V:7(){6.1K.97(6.4)},2X:7(2h){2h.V((7(2j){6.4.1X.55(2j,6.4)}).1d(6))}});1g.5m=1b.17();1g.5m.v=q.u(z 1e.1g(\'99\'),{2V:7(){6.1K.56(6.4);6.1K.74(11)},2X:7(2h){2h.4m(Y).V((7(2j){6.4.55(2j,6.4.9a)}).1d(6))}});1g.7h=1b.17();1g.7h.v=q.u(z 1e.1g(\'9d\'),{2V:7(){6.1K.56(6.4);6.1K.74(6.4)},2X:7(2h){2h.V((7(2j){6.4.75(2j)}).1d(6))}});1g.76=1b.17();1g.76.v=q.u(z 1e.1g(\'9i\'),{2V:7(){6.1K.9m(6.4)},2X:7(2h){2h.V((7(2j){6.4.1X.55(2j,6.4.9t)}).1d(6))}});k.3S=1b.17();k.3S.v={1I:7(4){6.4=$(4)},2m:7(o){6.4.1f.3j(/\\s+/).1k(7(B){c B.t>0}).2m(o)},5c:7(1f){6.4.1f=1f},7k:7(5a){f(6.1M(5a))c;6.5c(6.1Z().3s(5a).1N(\' \'))},42:7(4c){f(!6.1M(4c))c;6.5c(6.1k(7(1f){c 1f!=4c}).1N(\' \'))},2C:7(){c 6.1Z().1N(\' \')}};q.u(k.3S.v,1p);d 5I={5i:7(){G(d i=0;i<N.t;i++)$(N[i]).h=\'\'},4f:7(4){$(4).4f()},7v:7(){G(d i=0;i<N.t;i++)f($(N[i]).h==\'\')c Y;c 11},1k:7(4){$(4).1k()},5y:7(4){4=$(4);4.4f();f(4.1k)4.1k()}};d D={3a:7(Q){d 12=D.2L($(Q));d 4I=z 1E();G(d i=0;i<12.t;i++){d 4g=D.k.3a(12[i]);f(4g)4I.W(4g)}c 4I.1N(\'&\')},2L:7(Q){Q=$(Q);d 12=z 1E();G(d 1h 2M D.k.2E){d 4H=Q.4D(1h);G(d j=0;j<4H.t;j++)12.W(4H[j])}c 12},7x:7(Q,3N,B){Q=$(Q);d 3H=Q.4D(\'2u\');f(!3N&&!B)c 3H;d 4y=z 1E();G(d i=0;i<3H.t;i++){d 2u=3H[i];f((3N&&2u.2g!=3N)||(B&&2u.B!=B))49;4y.W(2u)}c 4y},7B:7(Q){d 12=D.2L(Q);G(d i=0;i<12.t;i++){d 4=12[i];4.7D();4.4o=\'11\'}},7F:7(Q){d 12=D.2L(Q);G(d i=0;i<12.t;i++){d 4=12[i];4.4o=\'\'}},5z:7(Q){c D.2L(Q).5v(7(4){c 4.2g!=\'31\'&&!4.4o&&[\'2u\',\'1k\',\'3J\'].1M(4.1h.2w())})},7M:7(Q){5I.5y(D.5z(Q))},5w:7(Q){$(Q).5w()}};D.k={3a:7(4){4=$(4);d 1F=4.1h.2w();d 1S=D.k.2E[1F](4);f(1S){d 1O=4n(1S[0]);f(1O.t==0)c;f(1S[1].5D!=1E)1S[1]=[1S[1]];c 1S[1].1C(7(h){c 1O+\'=\'+4n(h)}).1N(\'&\')}},1x:7(4){4=$(4);d 1F=4.1h.2w();d 1S=D.k.2E[1F](4);f(1S)c 1S[1]}};D.k.2E={2u:7(4){6c(4.2g.2w()){1r\'7Z\':1r\'31\':1r\'6l\':1r\'1Y\':c D.k.2E.3J(4);1r\'6g\':1r\'6i\':c D.k.2E.5O(4)}c Y},5O:7(4){f(4.83)c[4.B,4.h]},3J:7(4){c[4.B,4.h]},1k:7(4){c D.k.2E[4.2g==\'1k-6n\'?\'5S\':\'5X\'](4)},5S:7(4){d h=\'\',2b,w=4.85;f(w>=0){2b=4.m[w];h=2b.h||2b.1Y}c[4.B,h]},5X:7(4){d h=[];G(d i=0;i<4.t;i++){d 2b=4.m[i];f(2b.87)h.W(2b.h||2b.1Y)}c[4.B,h]}};d $F=D.k.1x;1e.3D=7(){};1e.3D.v={1I:7(4,1J,1a){6.1J=1J;6.4=$(4);6.1a=1a;6.2K=6.1x();6.2A()},2A:7(){5Z(6.2D.1d(6),6.1J*4z)},2D:7(){d h=6.1x();f(6.2K!=h){6.1a(6.4,h);6.2K=h}}};D.k.3C=1b.17();D.k.3C.v=q.u(z 1e.3D(),{1x:7(){c D.k.1x(6.4)}});D.3C=1b.17();D.3C.v=q.u(z 1e.3D(),{1x:7(){c D.3a(6.4)}});1e.2c=7(){};1e.2c.v={1I:7(4,1a){6.4=$(4);6.1a=1a;6.2K=6.1x();f(6.4.1h.2w()==\'Q\')6.67();1D 6.2A(6.4)},4K:7(){d h=6.1x();f(6.2K!=h){6.1a(6.4,h);6.2K=h}},67:7(){d 12=D.2L(6.4);G(d i=0;i<12.t;i++)6.2A(12[i])},2A:7(4){f(4.2g){6c(4.2g.2w()){1r\'6g\':1r\'6i\':1o.3B(4,\'8j\',6.4K.1d(6));1y;1r\'6l\':1r\'1Y\':1r\'3J\':1r\'1k-6n\':1r\'1k-8t\':1o.3B(4,\'8u\',6.4K.1d(6));1y}}}};D.k.2c=1b.17();D.k.2c.v=q.u(z 1e.2c(),{1x:7(){c D.k.1x(6.4)}});D.2c=1b.17();D.2c.v=q.u(z 1e.2c(),{1x:7(){c D.3a(6.4)}});f(!1W.1o){d 1o=z q()}q.u(1o,{8C:8,8F:9,8H:13,8I:27,8J:37,8L:38,8O:39,8T:40,8X:46,4:7(C){c C.Z||C.91},95:7(C){c(((C.6X)&&(C.6X==1))||((C.6Z)&&(C.6Z==1)))},9b:7(C){c C.9e||(C.9f+(J.3R.2G||J.1c.2G))},9g:7(C){c C.9j||(C.9k+(J.3R.2O||J.1c.2O))},7b:7(C){f(C.7d){C.7d();C.9r()}1D{C.48=Y;C.9w=11}},9A:7(C,1h){d 4=1o.4(C);1H(4.1X&&(!4.1h||(4.1h.3Y()!=1h.3Y())))4=4.1X;c 4},1T:Y,5u:7(4,B,1V,1u){f(!6.1T)6.1T=[];f(4.5f){6.1T.W([4,B,1V,1u]);4.5f(B,1V,1u)}1D f(4.4i){6.1T.W([4,B,1V,1u]);4.4i(\'2I\'+B,1V)}},66:7(){f(!1o.1T)c;G(d i=0;i<1o.1T.t;i++){1o.5N.2n(6,1o.1T[i]);1o.1T[i][0]=1L}1o.1T=Y},3B:7(4,B,1V,1u){d 4=$(4);1u=1u||Y;f(B==\'5U\'&&(33.4u.I(/3x|3w|3u/)||4.4i))B=\'5K\';6.5u(4,B,1V,1u)},5N:7(4,B,1V,1u){d 4=$(4);1u=1u||Y;f(B==\'5U\'&&(33.4u.I(/3x|3w|3u/)||4.4k))B=\'5K\';f(4.5x){4.5x(B,1V,1u)}1D f(4.4k){1j{4.4k(\'2I\'+B,1V)}1s(e){}}}});f(33.4u.I(/\\88\\b/))1o.3B(1W,\'8a\',1o.66,Y);d 2d={6o:Y,4P:7(){6.6z=1W.8e||J.3R.2G||J.1c.2G||0;6.6F=1W.8g||J.3R.2O||J.1c.2O||0},6u:7(4){d 19=0,15=0;2q{19+=4.2O||0;15+=4.2G||0;4=4.1X}1H(4);c[15,19]},35:7(4){d 19=0,15=0;2q{19+=4.29||0;15+=4.2f||0;4=4.1Q}1H(4);c[15,19]},68:7(4){d 19=0,15=0;2q{19+=4.29||0;15+=4.2f||0;4=4.1Q;f(4){p=k.1R(4,\'14\');f(p==\'3T\'||p==\'2o\')1y}}1H(4);c[15,19]},1Q:7(4){f(4.1Q)c 4.1Q;f(4==J.1c)c 4;1H((4=4.1X)&&4!=J.1c)f(k.1R(4,\'14\')!=\'4G\')c 4;c J.1c},8o:7(4,x,y){f(6.6o)c 6.6r(4,x,y);6.3g=x;6.34=y;6.1t=6.35(4);c(y>=6.1t[1]&&y<6.1t[1]+4.2k&&x>=6.1t[0]&&x<6.1t[0]+4.2p)},6r:7(4,x,y){d 4S=6.6u(4);6.3g=x+4S[0]-6.6z;6.34=y+4S[1]-6.6F;6.1t=6.35(4);c(6.34>=6.1t[1]&&6.34<6.1t[1]+4.2k&&6.3g>=6.1t[0]&&6.3g<6.1t[0]+4.2p)},8E:7(3Z,4){f(!3Z)c 0;f(3Z==\'8G\')c((6.1t[1]+4.2k)-6.34)/4.2k;f(3Z==\'8K\')c((6.1t[0]+4.2p)-6.3g)/4.2p},77:7(O,Z){O=$(O);Z=$(Z);Z.l.14=\'2o\';d 2P=6.35(O);Z.l.1n=2P[1]+\'1m\';Z.l.18=2P[0]+\'1m\';Z.l.21=O.2p+\'1m\';Z.l.24=O.2k+\'1m\'},4e:7(4M){d 19=0,15=0;d 4=4M;2q{19+=4.29||0;15+=4.2f||0;f(4.1Q==J.1c)f(k.1R(4,\'14\')==\'2o\')1y}1H(4=4.1Q);4=4M;2q{19-=4.2O||0;15-=4.2G||0}1H(4=4.1X);c[15,19]},77:7(O,Z){d m=q.u({5l:11,5r:11,5B:11,5q:11,29:0,2f:0},N[2]||{});O=$(O);d p=2d.4e(O);Z=$(Z);d 2J=[0,0];d 3v=1L;f(k.1R(Z,\'14\')==\'2o\'){3v=2d.1Q(Z);2J=2d.4e(3v)}f(3v==J.1c){2J[0]-=J.1c.2f;2J[1]-=J.1c.29}f(m.5l)Z.l.18=(p[0]-2J[0]+m.2f)+\'1m\';f(m.5r)Z.l.1n=(p[1]-2J[1]+m.29)+\'1m\';f(m.5B)Z.l.21=O.2p+\'1m\';f(m.5q)Z.l.24=O.2k+\'1m\'},8b:7(4){4=$(4);f(4.l.14==\'2o\')c;2d.4P();d 2P=2d.68(4);d 1n=2P[1];d 18=2P[0];d 21=4.6m;d 24=4.6p;4.6P=18-3X(4.l.18||0);4.6I=1n-3X(4.l.1n||0);4.5k=4.l.21;4.7f=4.l.24;4.l.14=\'2o\';4.l.1n=1n+\'1m\';4.l.18=18+\'1m\';4.l.21=21+\'1m\';4.l.24=24+\'1m\'},8w:7(4){4=$(4);f(4.l.14==\'3T\')c;2d.4P();4.l.14=\'3T\';d 1n=3X(4.l.1n||0)-(4.6I||0);d 18=3X(4.l.18||0)-(4.6P||0);4.l.1n=1n+\'1m\';4.l.18=18+\'1m\';4.l.24=4.7f;4.l.21=4.5k}};f(/3x|3w|3u/.4v(33.62)){2d.35=7(4){d 19=0,15=0;2q{19+=4.29||0;15+=4.2f||0;f(4.1Q==J.1c)f(k.1R(4,\'14\')==\'2o\')1y;4=4.1Q}1H(4);c[15,19]}};',62,600,'||||element||this|function|||||return|var||if||value|||Element|style|options||iterator||Object|||length|extend|prototype|index|||new||name|event|Form|transport||for||match|document||result|Ajax|arguments|source|results|form|||Prototype|object|each|push||false|target||true|elements||position|valueL||create|left|valueT|callback|Class|body|bind|Abstract|className|Insertion|tagName|pair|try|select|url|px|top|Event|Enumerable|div|case|catch|offset|useCapture|undefined|container|getValue|break|replacement|pattern|onComplete|map|else|Array|method|property|while|initialize|frequency|range|null|include|join|key|requestHeaders|offsetParent|getStyle|parameter|observers|inspect|observer|window|parentNode|text|toArray|els|width|start|args|height|throw|request||parameters|offsetTop|methods|opt|EventObserver|Position|html|offsetLeft|type|fragments|typeof|fragment|offsetHeight|oStringList|_each|apply|absolute|offsetWidth|do|cache|decay|content|input|emptyFunction|toLowerCase|end|replace|childNodes|registerCallback|display|toString|onTimerEvent|Serializers|readyState|scrollLeft|exclusive|on|delta|lastValue|getElements|in|hash|scrollTop|offsets|stripScripts|iterable|truncation|gsub|template|initializeRange|Responders|insertContent|setTimeout|json||hidden|status|navigator|ycomp|cumulativeOffset|inject||||serialize|responders|_overflow|Methods|collect|adjacency|xcomp|innerHTML|count|split|response|responseIsSuccess|success|Template|responder|dispatchException|evalScripts|pluck|concat|Request|KHTML|parent|Safari|Konqueror|dispatch|failure|receiver|observe|Observer|TimedObserver|ScriptFragment|responseText|script|inputs|ancestor|textarea|classNames|ObjectRange|node|typeName|RegExp|camelize|none|documentElement|ClassNames|relative|right|overflow|HTMLElement|parseFloat|toUpperCase|mode||currentlyExecuting|remove|__method|Base|memo||slice|returnValue|continue|setOptions|String|classNameToRemove|_reverse|page|focus|queryComponent|Hash|attachEvent|post|detachEvent|Version|reverse|encodeURIComponent|disabled|asynchronous|eval|respondToReadyState|activeRequestCount|Complete|appVersion|test|getTransport|containers|matchingInputs|1000|header|updater|Updater|getElementsByTagName|child|responderToAdd|static|tagElements|queryComponents|defaultView|onElementEvent|css|forElement|values|visibility|prepare|mergedHash|pos|offsetcache|_madePositioned|visible|tbody|findOrStore|_nativeExtensions|createElement|digits|trues|found|prepareReplacement|before|camelizedString|insertBefore|selectNodeContents|exception|falses|criteria|classNameToAdd|params|set|destination|last|addEventListener|indexOf|inline|clear|succ|_originalWidth|setLeft|Top|ActiveXObject|scriptTag|matchOne|setHeight|setTop|without|responderToRemove|_observeAndCache|find|reset|removeEventListener|activate|findFirstElement|setRequestHeaders|setWidth|XMLHttpRequest|constructor|application|xml|onCreate|contentType|Field|onStateChange|keydown|Events|evalJSON|stopObserving|inputSelector|img|Content|evalResponse|selectOne|onreadystatechange|keypress|postBody|onException|selectMany|updateContent|setInterval|insertion|PeriodicalUpdater|userAgent|updateComplete|lastText|timer|unloadCache|registerFormCallbacks|positionedOffset|register|parentElement|children|switch|XMLHTTP|_extended|hide|checkbox|update|radio|these|outerHTML|password|clientWidth|one|includeScrollOffsets|clientHeight|nodeValue|withinIncludingScrolloffsets|Try|scrollTo|realOffset|getComputedStyle|show|currentStyle|auto|deltaX|originalPosition|originalVisibility|originalWidth|originalHeight|opera|deltaY|bottom|array|_originalTop|flatten|addMethods|lambda|Toggle|toggle|insertAdjacentHTML|_originalLeft|PeriodicalExecuter|ownerDocument|createRange|createContextualFragment|contentFromAnonymousTable|table|Before|which|matchAll|button|extractScripts|stripTags|pairString|len|collapse|appendChild|After|clone|toQueryParams|Pattern|evaluate|stop|stringValue|preventDefault|charAt|_originalHeight|substring|Bottom|pairs|Function|add|collections|javascript|detect|findAll|entries|from|first|compact|keys|merge|present|toQueryString|getInputs|Msxml2|Microsoft|unregister|disable|urlencoded|blur|300|enable|responseIsFailure|Uninitialized|Loaded|Interactive|_|get|focusFirstElement|open|send|Requested|With|Accept|overrideMimeType|Connection|close|setRequestHeader|getResponseHeader|JSON|gi|submit|Loading|Success|Failure|checked|200|selectedIndex|www|selected|bMSIE|clearTimeout|unload|absolutize|string|getElementById|pageXOffset|getElementsByClassName|pageYOffset|removeChild|replaceChild|click|getHeight|hasClassName|addClassName|removeClassName|within|cleanWhitespace|nodeType|empty|childOf|multiple|change|getPropertyValue|relativize|setStyle|getDimensions|makePositioned|undoPositioned|makeClipping|KEY_BACKSPACE|undoClipping|overlap|KEY_TAB|vertical|KEY_RETURN|KEY_ESC|KEY_LEFT|horizontal|KEY_UP|member|tr|KEY_RIGHT|0_RC_0|Number|instanceof|shift|KEY_DOWN|bindAsEventListener|call|toColorPart|KEY_DELETE|times|finally|callee|srcElement|sub|scan|truncate|isLeftClick|beforeBegin|setStartBefore|im|afterBegin|firstChild|pointerX|unescapeHTML|beforeEnd|pageX|clientX|pointerY|parseQuery|afterEnd|pageY|clientY|RangeError|setStartAfter|all|any|grep|invoke|stopPropagation|max|nextSibling|min|partition|cancelBubble|reject|sortBy|sort|findElement|zip|pop|createTextNode|escapeHTML|strip'.split('|'),0,{})
+
+});
+
+endTest(); };
+</script>
+</head>
+<body></body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/sunspider-string-validate-input.html b/testing/talos/talos/tests/dromaeo/tests/sunspider-string-validate-input.html
new file mode 100644
index 0000000000..1efc80ae27
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/sunspider-string-validate-input.html
@@ -0,0 +1,109 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script>
+var letters = new Array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z");
+var numbers = new Array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26);
+var colors = new Array("FF","CC","99","66","33","00");
+
+var endResult;
+
+function testEmail()
+{
+ endResult = "";
+ var r;
+
+ // make up email address
+ for (var k=0;k<2000;k++)
+ {
+ var name = makeName(6);
+ var email = (k%2)?name+"@mac.com":name+"(at)mac.com";
+
+ // validate the email address
+ var pattern = /^[a-zA-Z0-9\-\._]+@[a-zA-Z0-9\-_]+(\.?[a-zA-Z0-9\-_]*)\.[a-zA-Z]{2,3}$/;
+
+ if(pattern.test(email))
+ {
+ r = email + " appears to be a valid email address.";
+ addResult(r);
+ }
+ else
+ {
+ r = email + " does NOT appear to be a valid email address.";
+ addResult(r);
+ }
+ }
+}
+
+function testZip()
+{
+ endResult = "";
+ var r;
+
+ // make up ZIP codes
+ for (var s=0;s<2000;s++)
+ {
+ var zipGood = true;
+ var zip = makeNumber(4);
+ (s%2)?zip=zip+"xyz":zip=zip.concat("7");
+
+ // validate the zip code
+ for (var i = 0; i < zip.length; i++) {
+ var ch = zip.charAt(i);
+ if (ch < "0" || ch > "9") {
+ zipGood = false;
+ r = zip + " contains letters.";
+ addResult(r);
+ }
+ }
+ if (zipGood && zip.length>5)
+ {
+ zipGood = false;
+ r = zip + " is longer than five characters.";
+ addResult(r);
+ }
+ if (zipGood)
+ {
+ r = zip + " appears to be a valid ZIP code.";
+ addResult(r);
+ }
+ }
+}
+
+function makeName(n)
+{
+ var tmp = "";
+ for (var i=0;i<n;i++)
+ {
+ var l = Math.floor(26*Math.random());
+ tmp += letters[l];
+ }
+ return tmp;
+}
+
+function makeNumber(n)
+{
+ var tmp = "";
+ for (var i=0;i<n;i++)
+ {
+ var l = Math.floor(9*Math.random());
+ tmp = tmp.concat(l);
+ }
+ return tmp;
+}
+
+function addResult(r)
+{
+ endResult += "\n" + r;
+}
+
+window.onload = function(){ startTest("sunspider-string-validate-input", '7e409a49');
+
+test("Validate Email Input", testEmail);
+test("Validate Zipcode Input", testEmail);
+
+endTest(); };
+</script>
+</head>
+<body></body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/v8-crypto.html b/testing/talos/talos/tests/dromaeo/tests/v8-crypto.html
new file mode 100644
index 0000000000..19a8ea6018
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/v8-crypto.html
@@ -0,0 +1,1705 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script>
+/*
+ * Copyright (c) 2003-2005 Tom Wu
+ * All Rights Reserved.
+ *
+ * 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" AND WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
+ * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
+ * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER
+ * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF
+ * THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT
+ * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * In addition, the following condition applies:
+ *
+ * All redistributions must retain an intact copy of this copyright notice
+ * and disclaimer.
+ */
+
+
+// The code has been adapted for use as a benchmark by Google.
+
+// Basic JavaScript BN library - subset useful for RSA encryption.
+
+// Bits per digit
+var dbits;
+var BI_DB;
+var BI_DM;
+var BI_DV;
+
+var BI_FP;
+var BI_FV;
+var BI_F1;
+var BI_F2;
+
+// JavaScript engine analysis
+var canary = 0xdeadbeefcafe;
+var j_lm = ((canary&0xffffff)==0xefcafe);
+
+// (public) Constructor
+function BigInteger(a,b,c) {
+ this.array = new Array();
+ if(a != null)
+ if("number" == typeof a) this.fromNumber(a,b,c);
+ else if(b == null && "string" != typeof a) this.fromString(a,256);
+ else this.fromString(a,b);
+}
+
+// return new, unset BigInteger
+function nbi() { return new BigInteger(null); }
+
+// am: Compute w_j += (x*this_i), propagate carries,
+// c is initial carry, returns final carry.
+// c < 3*dvalue, x < 2*dvalue, this_i < dvalue
+// We need to select the fastest one that works in this environment.
+
+// am1: use a single mult and divide to get the high bits,
+// max digit bits should be 26 because
+// max internal value = 2*dvalue^2-2*dvalue (< 2^53)
+function am1(i,x,w,j,c,n) {
+ var this_array = this.array;
+ var w_array = w.array;
+ while(--n >= 0) {
+ var v = x*this_array[i++]+w_array[j]+c;
+ c = Math.floor(v/0x4000000);
+ w_array[j++] = v&0x3ffffff;
+ }
+ return c;
+}
+
+// am2 avoids a big mult-and-extract completely.
+// Max digit bits should be <= 30 because we do bitwise ops
+// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
+function am2(i,x,w,j,c,n) {
+ var this_array = this.array;
+ var w_array = w.array;
+ var xl = x&0x7fff, xh = x>>15;
+ while(--n >= 0) {
+ var l = this_array[i]&0x7fff;
+ var h = this_array[i++]>>15;
+ var m = xh*l+h*xl;
+ l = xl*l+((m&0x7fff)<<15)+w_array[j]+(c&0x3fffffff);
+ c = (l>>>30)+(m>>>15)+xh*h+(c>>>30);
+ w_array[j++] = l&0x3fffffff;
+ }
+ return c;
+}
+
+// Alternately, set max digit bits to 28 since some
+// browsers slow down when dealing with 32-bit numbers.
+function am3(i,x,w,j,c,n) {
+ var this_array = this.array;
+ var w_array = w.array;
+
+ var xl = x&0x3fff, xh = x>>14;
+ while(--n >= 0) {
+ var l = this_array[i]&0x3fff;
+ var h = this_array[i++]>>14;
+ var m = xh*l+h*xl;
+ l = xl*l+((m&0x3fff)<<14)+w_array[j]+c;
+ c = (l>>28)+(m>>14)+xh*h;
+ w_array[j++] = l&0xfffffff;
+ }
+ return c;
+}
+
+// This is tailored to VMs with 2-bit tagging. It makes sure
+// that all the computations stay within the 29 bits available.
+function am4(i,x,w,j,c,n) {
+ var this_array = this.array;
+ var w_array = w.array;
+
+ var xl = x&0x1fff, xh = x>>13;
+ while(--n >= 0) {
+ var l = this_array[i]&0x1fff;
+ var h = this_array[i++]>>13;
+ var m = xh*l+h*xl;
+ l = xl*l+((m&0x1fff)<<13)+w_array[j]+c;
+ c = (l>>26)+(m>>13)+xh*h;
+ w_array[j++] = l&0x3ffffff;
+ }
+ return c;
+}
+
+// am3/28 is best for SM, Rhino, but am4/26 is best for v8.
+// Kestrel (Opera 9.5) gets its best result with am4/26.
+// IE7 does 9% better with am3/28 than with am4/26.
+// Firefox (SM) gets 10% faster with am3/28 than with am4/26.
+
+setupEngine = function(fn, bits) {
+ BigInteger.prototype.am = fn;
+ dbits = bits;
+
+ BI_DB = dbits;
+ BI_DM = ((1<<dbits)-1);
+ BI_DV = (1<<dbits);
+
+ BI_FP = 52;
+ BI_FV = Math.pow(2,BI_FP);
+ BI_F1 = BI_FP-dbits;
+ BI_F2 = 2*dbits-BI_FP;
+}
+
+
+// Digit conversions
+var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz";
+var BI_RC = new Array();
+var rr,vv;
+rr = "0".charCodeAt(0);
+for(vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv;
+rr = "a".charCodeAt(0);
+for(vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv;
+rr = "A".charCodeAt(0);
+for(vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv;
+
+function int2char(n) { return BI_RM.charAt(n); }
+function intAt(s,i) {
+ var c = BI_RC[s.charCodeAt(i)];
+ return (c==null)?-1:c;
+}
+
+// (protected) copy this to r
+function bnpCopyTo(r) {
+ var this_array = this.array;
+ var r_array = r.array;
+
+ for(var i = this.t-1; i >= 0; --i) r_array[i] = this_array[i];
+ r.t = this.t;
+ r.s = this.s;
+}
+
+// (protected) set from integer value x, -DV <= x < DV
+function bnpFromInt(x) {
+ var this_array = this.array;
+ this.t = 1;
+ this.s = (x<0)?-1:0;
+ if(x > 0) this_array[0] = x;
+ else if(x < -1) this_array[0] = x+DV;
+ else this.t = 0;
+}
+
+// return bigint initialized to value
+function nbv(i) { var r = nbi(); r.fromInt(i); return r; }
+
+// (protected) set from string and radix
+function bnpFromString(s,b) {
+ var this_array = this.array;
+ var k;
+ if(b == 16) k = 4;
+ else if(b == 8) k = 3;
+ else if(b == 256) k = 8; // byte array
+ else if(b == 2) k = 1;
+ else if(b == 32) k = 5;
+ else if(b == 4) k = 2;
+ else { this.fromRadix(s,b); return; }
+ this.t = 0;
+ this.s = 0;
+ var i = s.length, mi = false, sh = 0;
+ while(--i >= 0) {
+ var x = (k==8)?s[i]&0xff:intAt(s,i);
+ if(x < 0) {
+ if(s.charAt(i) == "-") mi = true;
+ continue;
+ }
+ mi = false;
+ if(sh == 0)
+ this_array[this.t++] = x;
+ else if(sh+k > BI_DB) {
+ this_array[this.t-1] |= (x&((1<<(BI_DB-sh))-1))<<sh;
+ this_array[this.t++] = (x>>(BI_DB-sh));
+ }
+ else
+ this_array[this.t-1] |= x<<sh;
+ sh += k;
+ if(sh >= BI_DB) sh -= BI_DB;
+ }
+ if(k == 8 && (s[0]&0x80) != 0) {
+ this.s = -1;
+ if(sh > 0) this_array[this.t-1] |= ((1<<(BI_DB-sh))-1)<<sh;
+ }
+ this.clamp();
+ if(mi) BigInteger.ZERO.subTo(this,this);
+}
+
+// (protected) clamp off excess high words
+function bnpClamp() {
+ var this_array = this.array;
+ var c = this.s&BI_DM;
+ while(this.t > 0 && this_array[this.t-1] == c) --this.t;
+}
+
+// (public) return string representation in given radix
+function bnToString(b) {
+ var this_array = this.array;
+ if(this.s < 0) return "-"+this.negate().toString(b);
+ var k;
+ if(b == 16) k = 4;
+ else if(b == 8) k = 3;
+ else if(b == 2) k = 1;
+ else if(b == 32) k = 5;
+ else if(b == 4) k = 2;
+ else return this.toRadix(b);
+ var km = (1<<k)-1, d, m = false, r = "", i = this.t;
+ var p = BI_DB-(i*BI_DB)%k;
+ if(i-- > 0) {
+ if(p < BI_DB && (d = this_array[i]>>p) > 0) { m = true; r = int2char(d); }
+ while(i >= 0) {
+ if(p < k) {
+ d = (this_array[i]&((1<<p)-1))<<(k-p);
+ d |= this_array[--i]>>(p+=BI_DB-k);
+ }
+ else {
+ d = (this_array[i]>>(p-=k))&km;
+ if(p <= 0) { p += BI_DB; --i; }
+ }
+ if(d > 0) m = true;
+ if(m) r += int2char(d);
+ }
+ }
+ return m?r:"0";
+}
+
+// (public) -this
+function bnNegate() { var r = nbi(); BigInteger.ZERO.subTo(this,r); return r; }
+
+// (public) |this|
+function bnAbs() { return (this.s<0)?this.negate():this; }
+
+// (public) return + if this > a, - if this < a, 0 if equal
+function bnCompareTo(a) {
+ var this_array = this.array;
+ var a_array = a.array;
+
+ var r = this.s-a.s;
+ if(r != 0) return r;
+ var i = this.t;
+ r = i-a.t;
+ if(r != 0) return r;
+ while(--i >= 0) if((r=this_array[i]-a_array[i]) != 0) return r;
+ return 0;
+}
+
+// returns bit length of the integer x
+function nbits(x) {
+ var r = 1, t;
+ if((t=x>>>16) != 0) { x = t; r += 16; }
+ if((t=x>>8) != 0) { x = t; r += 8; }
+ if((t=x>>4) != 0) { x = t; r += 4; }
+ if((t=x>>2) != 0) { x = t; r += 2; }
+ if((t=x>>1) != 0) { x = t; r += 1; }
+ return r;
+}
+
+// (public) return the number of bits in "this"
+function bnBitLength() {
+ var this_array = this.array;
+ if(this.t <= 0) return 0;
+ return BI_DB*(this.t-1)+nbits(this_array[this.t-1]^(this.s&BI_DM));
+}
+
+// (protected) r = this << n*DB
+function bnpDLShiftTo(n,r) {
+ var this_array = this.array;
+ var r_array = r.array;
+ var i;
+ for(i = this.t-1; i >= 0; --i) r_array[i+n] = this_array[i];
+ for(i = n-1; i >= 0; --i) r_array[i] = 0;
+ r.t = this.t+n;
+ r.s = this.s;
+}
+
+// (protected) r = this >> n*DB
+function bnpDRShiftTo(n,r) {
+ var this_array = this.array;
+ var r_array = r.array;
+ for(var i = n; i < this.t; ++i) r_array[i-n] = this_array[i];
+ r.t = Math.max(this.t-n,0);
+ r.s = this.s;
+}
+
+// (protected) r = this << n
+function bnpLShiftTo(n,r) {
+ var this_array = this.array;
+ var r_array = r.array;
+ var bs = n%BI_DB;
+ var cbs = BI_DB-bs;
+ var bm = (1<<cbs)-1;
+ var ds = Math.floor(n/BI_DB), c = (this.s<<bs)&BI_DM, i;
+ for(i = this.t-1; i >= 0; --i) {
+ r_array[i+ds+1] = (this_array[i]>>cbs)|c;
+ c = (this_array[i]&bm)<<bs;
+ }
+ for(i = ds-1; i >= 0; --i) r_array[i] = 0;
+ r_array[ds] = c;
+ r.t = this.t+ds+1;
+ r.s = this.s;
+ r.clamp();
+}
+
+// (protected) r = this >> n
+function bnpRShiftTo(n,r) {
+ var this_array = this.array;
+ var r_array = r.array;
+ r.s = this.s;
+ var ds = Math.floor(n/BI_DB);
+ if(ds >= this.t) { r.t = 0; return; }
+ var bs = n%BI_DB;
+ var cbs = BI_DB-bs;
+ var bm = (1<<bs)-1;
+ r_array[0] = this_array[ds]>>bs;
+ for(var i = ds+1; i < this.t; ++i) {
+ r_array[i-ds-1] |= (this_array[i]&bm)<<cbs;
+ r_array[i-ds] = this_array[i]>>bs;
+ }
+ if(bs > 0) r_array[this.t-ds-1] |= (this.s&bm)<<cbs;
+ r.t = this.t-ds;
+ r.clamp();
+}
+
+// (protected) r = this - a
+function bnpSubTo(a,r) {
+ var this_array = this.array;
+ var r_array = r.array;
+ var a_array = a.array;
+ var i = 0, c = 0, m = Math.min(a.t,this.t);
+ while(i < m) {
+ c += this_array[i]-a_array[i];
+ r_array[i++] = c&BI_DM;
+ c >>= BI_DB;
+ }
+ if(a.t < this.t) {
+ c -= a.s;
+ while(i < this.t) {
+ c += this_array[i];
+ r_array[i++] = c&BI_DM;
+ c >>= BI_DB;
+ }
+ c += this.s;
+ }
+ else {
+ c += this.s;
+ while(i < a.t) {
+ c -= a_array[i];
+ r_array[i++] = c&BI_DM;
+ c >>= BI_DB;
+ }
+ c -= a.s;
+ }
+ r.s = (c<0)?-1:0;
+ if(c < -1) r_array[i++] = BI_DV+c;
+ else if(c > 0) r_array[i++] = c;
+ r.t = i;
+ r.clamp();
+}
+
+// (protected) r = this * a, r != this,a (HAC 14.12)
+// "this" should be the larger one if appropriate.
+function bnpMultiplyTo(a,r) {
+ var this_array = this.array;
+ var r_array = r.array;
+ var x = this.abs(), y = a.abs();
+ var y_array = y.array;
+
+ var i = x.t;
+ r.t = i+y.t;
+ while(--i >= 0) r_array[i] = 0;
+ for(i = 0; i < y.t; ++i) r_array[i+x.t] = x.am(0,y_array[i],r,i,0,x.t);
+ r.s = 0;
+ r.clamp();
+ if(this.s != a.s) BigInteger.ZERO.subTo(r,r);
+}
+
+// (protected) r = this^2, r != this (HAC 14.16)
+function bnpSquareTo(r) {
+ var x = this.abs();
+ var x_array = x.array;
+ var r_array = r.array;
+
+ var i = r.t = 2*x.t;
+ while(--i >= 0) r_array[i] = 0;
+ for(i = 0; i < x.t-1; ++i) {
+ var c = x.am(i,x_array[i],r,2*i,0,1);
+ if((r_array[i+x.t]+=x.am(i+1,2*x_array[i],r,2*i+1,c,x.t-i-1)) >= BI_DV) {
+ r_array[i+x.t] -= BI_DV;
+ r_array[i+x.t+1] = 1;
+ }
+ }
+ if(r.t > 0) r_array[r.t-1] += x.am(i,x_array[i],r,2*i,0,1);
+ r.s = 0;
+ r.clamp();
+}
+
+// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
+// r != q, this != m. q or r may be null.
+function bnpDivRemTo(m,q,r) {
+ var pm = m.abs();
+ if(pm.t <= 0) return;
+ var pt = this.abs();
+ if(pt.t < pm.t) {
+ if(q != null) q.fromInt(0);
+ if(r != null) this.copyTo(r);
+ return;
+ }
+ if(r == null) r = nbi();
+ var y = nbi(), ts = this.s, ms = m.s;
+ var pm_array = pm.array;
+ var nsh = BI_DB-nbits(pm_array[pm.t-1]); // normalize modulus
+ if(nsh > 0) { pm.lShiftTo(nsh,y); pt.lShiftTo(nsh,r); }
+ else { pm.copyTo(y); pt.copyTo(r); }
+ var ys = y.t;
+
+ var y_array = y.array;
+ var y0 = y_array[ys-1];
+ if(y0 == 0) return;
+ var yt = y0*(1<<BI_F1)+((ys>1)?y_array[ys-2]>>BI_F2:0);
+ var d1 = BI_FV/yt, d2 = (1<<BI_F1)/yt, e = 1<<BI_F2;
+ var i = r.t, j = i-ys, t = (q==null)?nbi():q;
+ y.dlShiftTo(j,t);
+
+ var r_array = r.array;
+ if(r.compareTo(t) >= 0) {
+ r_array[r.t++] = 1;
+ r.subTo(t,r);
+ }
+ BigInteger.ONE.dlShiftTo(ys,t);
+ t.subTo(y,y); // "negative" y so we can replace sub with am later
+ while(y.t < ys) y_array[y.t++] = 0;
+ while(--j >= 0) {
+ // Estimate quotient digit
+ var qd = (r_array[--i]==y0)?BI_DM:Math.floor(r_array[i]*d1+(r_array[i-1]+e)*d2);
+ if((r_array[i]+=y.am(0,qd,r,j,0,ys)) < qd) { // Try it out
+ y.dlShiftTo(j,t);
+ r.subTo(t,r);
+ while(r_array[i] < --qd) r.subTo(t,r);
+ }
+ }
+ if(q != null) {
+ r.drShiftTo(ys,q);
+ if(ts != ms) BigInteger.ZERO.subTo(q,q);
+ }
+ r.t = ys;
+ r.clamp();
+ if(nsh > 0) r.rShiftTo(nsh,r); // Denormalize remainder
+ if(ts < 0) BigInteger.ZERO.subTo(r,r);
+}
+
+// (public) this mod a
+function bnMod(a) {
+ var r = nbi();
+ this.abs().divRemTo(a,null,r);
+ if(this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r,r);
+ return r;
+}
+
+// Modular reduction using "classic" algorithm
+function Classic(m) { this.m = m; }
+function cConvert(x) {
+ if(x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m);
+ else return x;
+}
+function cRevert(x) { return x; }
+function cReduce(x) { x.divRemTo(this.m,null,x); }
+function cMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }
+function cSqrTo(x,r) { x.squareTo(r); this.reduce(r); }
+
+Classic.prototype.convert = cConvert;
+Classic.prototype.revert = cRevert;
+Classic.prototype.reduce = cReduce;
+Classic.prototype.mulTo = cMulTo;
+Classic.prototype.sqrTo = cSqrTo;
+
+// (protected) return "-1/this % 2^DB"; useful for Mont. reduction
+// justification:
+// xy == 1 (mod m)
+// xy = 1+km
+// xy(2-xy) = (1+km)(1-km)
+// x[y(2-xy)] = 1-k^2m^2
+// x[y(2-xy)] == 1 (mod m^2)
+// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
+// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
+// JS multiply "overflows" differently from C/C++, so care is needed here.
+function bnpInvDigit() {
+ var this_array = this.array;
+ if(this.t < 1) return 0;
+ var x = this_array[0];
+ if((x&1) == 0) return 0;
+ var y = x&3; // y == 1/x mod 2^2
+ y = (y*(2-(x&0xf)*y))&0xf; // y == 1/x mod 2^4
+ y = (y*(2-(x&0xff)*y))&0xff; // y == 1/x mod 2^8
+ y = (y*(2-(((x&0xffff)*y)&0xffff)))&0xffff; // y == 1/x mod 2^16
+ // last step - calculate inverse mod DV directly;
+ // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
+ y = (y*(2-x*y%BI_DV))%BI_DV; // y == 1/x mod 2^dbits
+ // we really want the negative inverse, and -DV < y < DV
+ return (y>0)?BI_DV-y:-y;
+}
+
+// Montgomery reduction
+function Montgomery(m) {
+ this.m = m;
+ this.mp = m.invDigit();
+ this.mpl = this.mp&0x7fff;
+ this.mph = this.mp>>15;
+ this.um = (1<<(BI_DB-15))-1;
+ this.mt2 = 2*m.t;
+}
+
+// xR mod m
+function montConvert(x) {
+ var r = nbi();
+ x.abs().dlShiftTo(this.m.t,r);
+ r.divRemTo(this.m,null,r);
+ if(x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r,r);
+ return r;
+}
+
+// x/R mod m
+function montRevert(x) {
+ var r = nbi();
+ x.copyTo(r);
+ this.reduce(r);
+ return r;
+}
+
+// x = x/R mod m (HAC 14.32)
+function montReduce(x) {
+ var x_array = x.array;
+ while(x.t <= this.mt2) // pad x so am has enough room later
+ x_array[x.t++] = 0;
+ for(var i = 0; i < this.m.t; ++i) {
+ // faster way of calculating u0 = x[i]*mp mod DV
+ var j = x_array[i]&0x7fff;
+ var u0 = (j*this.mpl+(((j*this.mph+(x_array[i]>>15)*this.mpl)&this.um)<<15))&BI_DM;
+ // use am to combine the multiply-shift-add into one call
+ j = i+this.m.t;
+ x_array[j] += this.m.am(0,u0,x,i,0,this.m.t);
+ // propagate carry
+ while(x_array[j] >= BI_DV) { x_array[j] -= BI_DV; x_array[++j]++; }
+ }
+ x.clamp();
+ x.drShiftTo(this.m.t,x);
+ if(x.compareTo(this.m) >= 0) x.subTo(this.m,x);
+}
+
+// r = "x^2/R mod m"; x != r
+function montSqrTo(x,r) { x.squareTo(r); this.reduce(r); }
+
+// r = "xy/R mod m"; x,y != r
+function montMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }
+
+Montgomery.prototype.convert = montConvert;
+Montgomery.prototype.revert = montRevert;
+Montgomery.prototype.reduce = montReduce;
+Montgomery.prototype.mulTo = montMulTo;
+Montgomery.prototype.sqrTo = montSqrTo;
+
+// (protected) true iff this is even
+function bnpIsEven() {
+ var this_array = this.array;
+ return ((this.t>0)?(this_array[0]&1):this.s) == 0;
+}
+
+// (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
+function bnpExp(e,z) {
+ if(e > 0xffffffff || e < 1) return BigInteger.ONE;
+ var r = nbi(), r2 = nbi(), g = z.convert(this), i = nbits(e)-1;
+ g.copyTo(r);
+ while(--i >= 0) {
+ z.sqrTo(r,r2);
+ if((e&(1<<i)) > 0) z.mulTo(r2,g,r);
+ else { var t = r; r = r2; r2 = t; }
+ }
+ return z.revert(r);
+}
+
+// (public) this^e % m, 0 <= e < 2^32
+function bnModPowInt(e,m) {
+ var z;
+ if(e < 256 || m.isEven()) z = new Classic(m); else z = new Montgomery(m);
+ return this.exp(e,z);
+}
+
+// protected
+BigInteger.prototype.copyTo = bnpCopyTo;
+BigInteger.prototype.fromInt = bnpFromInt;
+BigInteger.prototype.fromString = bnpFromString;
+BigInteger.prototype.clamp = bnpClamp;
+BigInteger.prototype.dlShiftTo = bnpDLShiftTo;
+BigInteger.prototype.drShiftTo = bnpDRShiftTo;
+BigInteger.prototype.lShiftTo = bnpLShiftTo;
+BigInteger.prototype.rShiftTo = bnpRShiftTo;
+BigInteger.prototype.subTo = bnpSubTo;
+BigInteger.prototype.multiplyTo = bnpMultiplyTo;
+BigInteger.prototype.squareTo = bnpSquareTo;
+BigInteger.prototype.divRemTo = bnpDivRemTo;
+BigInteger.prototype.invDigit = bnpInvDigit;
+BigInteger.prototype.isEven = bnpIsEven;
+BigInteger.prototype.exp = bnpExp;
+
+// public
+BigInteger.prototype.toString = bnToString;
+BigInteger.prototype.negate = bnNegate;
+BigInteger.prototype.abs = bnAbs;
+BigInteger.prototype.compareTo = bnCompareTo;
+BigInteger.prototype.bitLength = bnBitLength;
+BigInteger.prototype.mod = bnMod;
+BigInteger.prototype.modPowInt = bnModPowInt;
+
+// "constants"
+BigInteger.ZERO = nbv(0);
+BigInteger.ONE = nbv(1);
+// Copyright (c) 2005 Tom Wu
+// All Rights Reserved.
+// See "LICENSE" for details.
+
+// Extended JavaScript BN functions, required for RSA private ops.
+
+// (public)
+function bnClone() { var r = nbi(); this.copyTo(r); return r; }
+
+// (public) return value as integer
+function bnIntValue() {
+ var this_array = this.array;
+ if(this.s < 0) {
+ if(this.t == 1) return this_array[0]-BI_DV;
+ else if(this.t == 0) return -1;
+ }
+ else if(this.t == 1) return this_array[0];
+ else if(this.t == 0) return 0;
+ // assumes 16 < DB < 32
+ return ((this_array[1]&((1<<(32-BI_DB))-1))<<BI_DB)|this_array[0];
+}
+
+// (public) return value as byte
+function bnByteValue() {
+ var this_array = this.array;
+ return (this.t==0)?this.s:(this_array[0]<<24)>>24;
+}
+
+// (public) return value as short (assumes DB>=16)
+function bnShortValue() {
+ var this_array = this.array;
+ return (this.t==0)?this.s:(this_array[0]<<16)>>16;
+}
+
+// (protected) return x s.t. r^x < DV
+function bnpChunkSize(r) { return Math.floor(Math.LN2*BI_DB/Math.log(r)); }
+
+// (public) 0 if this == 0, 1 if this > 0
+function bnSigNum() {
+ var this_array = this.array;
+ if(this.s < 0) return -1;
+ else if(this.t <= 0 || (this.t == 1 && this_array[0] <= 0)) return 0;
+ else return 1;
+}
+
+// (protected) convert to radix string
+function bnpToRadix(b) {
+ if(b == null) b = 10;
+ if(this.signum() == 0 || b < 2 || b > 36) return "0";
+ var cs = this.chunkSize(b);
+ var a = Math.pow(b,cs);
+ var d = nbv(a), y = nbi(), z = nbi(), r = "";
+ this.divRemTo(d,y,z);
+ while(y.signum() > 0) {
+ r = (a+z.intValue()).toString(b).substr(1) + r;
+ y.divRemTo(d,y,z);
+ }
+ return z.intValue().toString(b) + r;
+}
+
+// (protected) convert from radix string
+function bnpFromRadix(s,b) {
+ this.fromInt(0);
+ if(b == null) b = 10;
+ var cs = this.chunkSize(b);
+ var d = Math.pow(b,cs), mi = false, j = 0, w = 0;
+ for(var i = 0; i < s.length; ++i) {
+ var x = intAt(s,i);
+ if(x < 0) {
+ if(s.charAt(i) == "-" && this.signum() == 0) mi = true;
+ continue;
+ }
+ w = b*w+x;
+ if(++j >= cs) {
+ this.dMultiply(d);
+ this.dAddOffset(w,0);
+ j = 0;
+ w = 0;
+ }
+ }
+ if(j > 0) {
+ this.dMultiply(Math.pow(b,j));
+ this.dAddOffset(w,0);
+ }
+ if(mi) BigInteger.ZERO.subTo(this,this);
+}
+
+// (protected) alternate constructor
+function bnpFromNumber(a,b,c) {
+ if("number" == typeof b) {
+ // new BigInteger(int,int,RNG)
+ if(a < 2) this.fromInt(1);
+ else {
+ this.fromNumber(a,c);
+ if(!this.testBit(a-1)) // force MSB set
+ this.bitwiseTo(BigInteger.ONE.shiftLeft(a-1),op_or,this);
+ if(this.isEven()) this.dAddOffset(1,0); // force odd
+ while(!this.isProbablePrime(b)) {
+ this.dAddOffset(2,0);
+ if(this.bitLength() > a) this.subTo(BigInteger.ONE.shiftLeft(a-1),this);
+ }
+ }
+ }
+ else {
+ // new BigInteger(int,RNG)
+ var x = new Array(), t = a&7;
+ x.length = (a>>3)+1;
+ b.nextBytes(x);
+ if(t > 0) x[0] &= ((1<<t)-1); else x[0] = 0;
+ this.fromString(x,256);
+ }
+}
+
+// (public) convert to bigendian byte array
+function bnToByteArray() {
+ var this_array = this.array;
+ var i = this.t, r = new Array();
+ r[0] = this.s;
+ var p = BI_DB-(i*BI_DB)%8, d, k = 0;
+ if(i-- > 0) {
+ if(p < BI_DB && (d = this_array[i]>>p) != (this.s&BI_DM)>>p)
+ r[k++] = d|(this.s<<(BI_DB-p));
+ while(i >= 0) {
+ if(p < 8) {
+ d = (this_array[i]&((1<<p)-1))<<(8-p);
+ d |= this_array[--i]>>(p+=BI_DB-8);
+ }
+ else {
+ d = (this_array[i]>>(p-=8))&0xff;
+ if(p <= 0) { p += BI_DB; --i; }
+ }
+ if((d&0x80) != 0) d |= -256;
+ if(k == 0 && (this.s&0x80) != (d&0x80)) ++k;
+ if(k > 0 || d != this.s) r[k++] = d;
+ }
+ }
+ return r;
+}
+
+function bnEquals(a) { return(this.compareTo(a)==0); }
+function bnMin(a) { return(this.compareTo(a)<0)?this:a; }
+function bnMax(a) { return(this.compareTo(a)>0)?this:a; }
+
+// (protected) r = this op a (bitwise)
+function bnpBitwiseTo(a,op,r) {
+ var this_array = this.array;
+ var a_array = a.array;
+ var r_array = r.array;
+ var i, f, m = Math.min(a.t,this.t);
+ for(i = 0; i < m; ++i) r_array[i] = op(this_array[i],a_array[i]);
+ if(a.t < this.t) {
+ f = a.s&BI_DM;
+ for(i = m; i < this.t; ++i) r_array[i] = op(this_array[i],f);
+ r.t = this.t;
+ }
+ else {
+ f = this.s&BI_DM;
+ for(i = m; i < a.t; ++i) r_array[i] = op(f,a_array[i]);
+ r.t = a.t;
+ }
+ r.s = op(this.s,a.s);
+ r.clamp();
+}
+
+// (public) this & a
+function op_and(x,y) { return x&y; }
+function bnAnd(a) { var r = nbi(); this.bitwiseTo(a,op_and,r); return r; }
+
+// (public) this | a
+function op_or(x,y) { return x|y; }
+function bnOr(a) { var r = nbi(); this.bitwiseTo(a,op_or,r); return r; }
+
+// (public) this ^ a
+function op_xor(x,y) { return x^y; }
+function bnXor(a) { var r = nbi(); this.bitwiseTo(a,op_xor,r); return r; }
+
+// (public) this & ~a
+function op_andnot(x,y) { return x&~y; }
+function bnAndNot(a) { var r = nbi(); this.bitwiseTo(a,op_andnot,r); return r; }
+
+// (public) ~this
+function bnNot() {
+ var this_array = this.array;
+ var r = nbi();
+ var r_array = r.array;
+
+ for(var i = 0; i < this.t; ++i) r_array[i] = BI_DM&~this_array[i];
+ r.t = this.t;
+ r.s = ~this.s;
+ return r;
+}
+
+// (public) this << n
+function bnShiftLeft(n) {
+ var r = nbi();
+ if(n < 0) this.rShiftTo(-n,r); else this.lShiftTo(n,r);
+ return r;
+}
+
+// (public) this >> n
+function bnShiftRight(n) {
+ var r = nbi();
+ if(n < 0) this.lShiftTo(-n,r); else this.rShiftTo(n,r);
+ return r;
+}
+
+// return index of lowest 1-bit in x, x < 2^31
+function lbit(x) {
+ if(x == 0) return -1;
+ var r = 0;
+ if((x&0xffff) == 0) { x >>= 16; r += 16; }
+ if((x&0xff) == 0) { x >>= 8; r += 8; }
+ if((x&0xf) == 0) { x >>= 4; r += 4; }
+ if((x&3) == 0) { x >>= 2; r += 2; }
+ if((x&1) == 0) ++r;
+ return r;
+}
+
+// (public) returns index of lowest 1-bit (or -1 if none)
+function bnGetLowestSetBit() {
+ var this_array = this.array;
+ for(var i = 0; i < this.t; ++i)
+ if(this_array[i] != 0) return i*BI_DB+lbit(this_array[i]);
+ if(this.s < 0) return this.t*BI_DB;
+ return -1;
+}
+
+// return number of 1 bits in x
+function cbit(x) {
+ var r = 0;
+ while(x != 0) { x &= x-1; ++r; }
+ return r;
+}
+
+// (public) return number of set bits
+function bnBitCount() {
+ var r = 0, x = this.s&BI_DM;
+ for(var i = 0; i < this.t; ++i) r += cbit(this_array[i]^x);
+ return r;
+}
+
+// (public) true iff nth bit is set
+function bnTestBit(n) {
+ var this_array = this.array;
+ var j = Math.floor(n/BI_DB);
+ if(j >= this.t) return(this.s!=0);
+ return((this_array[j]&(1<<(n%BI_DB)))!=0);
+}
+
+// (protected) this op (1<<n)
+function bnpChangeBit(n,op) {
+ var r = BigInteger.ONE.shiftLeft(n);
+ this.bitwiseTo(r,op,r);
+ return r;
+}
+
+// (public) this | (1<<n)
+function bnSetBit(n) { return this.changeBit(n,op_or); }
+
+// (public) this & ~(1<<n)
+function bnClearBit(n) { return this.changeBit(n,op_andnot); }
+
+// (public) this ^ (1<<n)
+function bnFlipBit(n) { return this.changeBit(n,op_xor); }
+
+// (protected) r = this + a
+function bnpAddTo(a,r) {
+ var this_array = this.array;
+ var a_array = a.array;
+ var r_array = r.array;
+ var i = 0, c = 0, m = Math.min(a.t,this.t);
+ while(i < m) {
+ c += this_array[i]+a_array[i];
+ r_array[i++] = c&BI_DM;
+ c >>= BI_DB;
+ }
+ if(a.t < this.t) {
+ c += a.s;
+ while(i < this.t) {
+ c += this_array[i];
+ r_array[i++] = c&BI_DM;
+ c >>= BI_DB;
+ }
+ c += this.s;
+ }
+ else {
+ c += this.s;
+ while(i < a.t) {
+ c += a_array[i];
+ r_array[i++] = c&BI_DM;
+ c >>= BI_DB;
+ }
+ c += a.s;
+ }
+ r.s = (c<0)?-1:0;
+ if(c > 0) r_array[i++] = c;
+ else if(c < -1) r_array[i++] = BI_DV+c;
+ r.t = i;
+ r.clamp();
+}
+
+// (public) this + a
+function bnAdd(a) { var r = nbi(); this.addTo(a,r); return r; }
+
+// (public) this - a
+function bnSubtract(a) { var r = nbi(); this.subTo(a,r); return r; }
+
+// (public) this * a
+function bnMultiply(a) { var r = nbi(); this.multiplyTo(a,r); return r; }
+
+// (public) this / a
+function bnDivide(a) { var r = nbi(); this.divRemTo(a,r,null); return r; }
+
+// (public) this % a
+function bnRemainder(a) { var r = nbi(); this.divRemTo(a,null,r); return r; }
+
+// (public) [this/a,this%a]
+function bnDivideAndRemainder(a) {
+ var q = nbi(), r = nbi();
+ this.divRemTo(a,q,r);
+ return new Array(q,r);
+}
+
+// (protected) this *= n, this >= 0, 1 < n < DV
+function bnpDMultiply(n) {
+ var this_array = this.array;
+ this_array[this.t] = this.am(0,n-1,this,0,0,this.t);
+ ++this.t;
+ this.clamp();
+}
+
+// (protected) this += n << w words, this >= 0
+function bnpDAddOffset(n,w) {
+ var this_array = this.array;
+ while(this.t <= w) this_array[this.t++] = 0;
+ this_array[w] += n;
+ while(this_array[w] >= BI_DV) {
+ this_array[w] -= BI_DV;
+ if(++w >= this.t) this_array[this.t++] = 0;
+ ++this_array[w];
+ }
+}
+
+// A "null" reducer
+function NullExp() {}
+function nNop(x) { return x; }
+function nMulTo(x,y,r) { x.multiplyTo(y,r); }
+function nSqrTo(x,r) { x.squareTo(r); }
+
+NullExp.prototype.convert = nNop;
+NullExp.prototype.revert = nNop;
+NullExp.prototype.mulTo = nMulTo;
+NullExp.prototype.sqrTo = nSqrTo;
+
+// (public) this^e
+function bnPow(e) { return this.exp(e,new NullExp()); }
+
+// (protected) r = lower n words of "this * a", a.t <= n
+// "this" should be the larger one if appropriate.
+function bnpMultiplyLowerTo(a,n,r) {
+ var r_array = r.array;
+ var a_array = a.array;
+ var i = Math.min(this.t+a.t,n);
+ r.s = 0; // assumes a,this >= 0
+ r.t = i;
+ while(i > 0) r_array[--i] = 0;
+ var j;
+ for(j = r.t-this.t; i < j; ++i) r_array[i+this.t] = this.am(0,a_array[i],r,i,0,this.t);
+ for(j = Math.min(a.t,n); i < j; ++i) this.am(0,a_array[i],r,i,0,n-i);
+ r.clamp();
+}
+
+// (protected) r = "this * a" without lower n words, n > 0
+// "this" should be the larger one if appropriate.
+function bnpMultiplyUpperTo(a,n,r) {
+ var r_array = r.array;
+ var a_array = a.array;
+ --n;
+ var i = r.t = this.t+a.t-n;
+ r.s = 0; // assumes a,this >= 0
+ while(--i >= 0) r_array[i] = 0;
+ for(i = Math.max(n-this.t,0); i < a.t; ++i)
+ r_array[this.t+i-n] = this.am(n-i,a_array[i],r,0,0,this.t+i-n);
+ r.clamp();
+ r.drShiftTo(1,r);
+}
+
+// Barrett modular reduction
+function Barrett(m) {
+ // setup Barrett
+ this.r2 = nbi();
+ this.q3 = nbi();
+ BigInteger.ONE.dlShiftTo(2*m.t,this.r2);
+ this.mu = this.r2.divide(m);
+ this.m = m;
+}
+
+function barrettConvert(x) {
+ if(x.s < 0 || x.t > 2*this.m.t) return x.mod(this.m);
+ else if(x.compareTo(this.m) < 0) return x;
+ else { var r = nbi(); x.copyTo(r); this.reduce(r); return r; }
+}
+
+function barrettRevert(x) { return x; }
+
+// x = x mod m (HAC 14.42)
+function barrettReduce(x) {
+ x.drShiftTo(this.m.t-1,this.r2);
+ if(x.t > this.m.t+1) { x.t = this.m.t+1; x.clamp(); }
+ this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3);
+ this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);
+ while(x.compareTo(this.r2) < 0) x.dAddOffset(1,this.m.t+1);
+ x.subTo(this.r2,x);
+ while(x.compareTo(this.m) >= 0) x.subTo(this.m,x);
+}
+
+// r = x^2 mod m; x != r
+function barrettSqrTo(x,r) { x.squareTo(r); this.reduce(r); }
+
+// r = x*y mod m; x,y != r
+function barrettMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }
+
+Barrett.prototype.convert = barrettConvert;
+Barrett.prototype.revert = barrettRevert;
+Barrett.prototype.reduce = barrettReduce;
+Barrett.prototype.mulTo = barrettMulTo;
+Barrett.prototype.sqrTo = barrettSqrTo;
+
+// (public) this^e % m (HAC 14.85)
+function bnModPow(e,m) {
+ var e_array = e.array;
+ var i = e.bitLength(), k, r = nbv(1), z;
+ if(i <= 0) return r;
+ else if(i < 18) k = 1;
+ else if(i < 48) k = 3;
+ else if(i < 144) k = 4;
+ else if(i < 768) k = 5;
+ else k = 6;
+ if(i < 8)
+ z = new Classic(m);
+ else if(m.isEven())
+ z = new Barrett(m);
+ else
+ z = new Montgomery(m);
+
+ // precomputation
+ var g = new Array(), n = 3, k1 = k-1, km = (1<<k)-1;
+ g[1] = z.convert(this);
+ if(k > 1) {
+ var g2 = nbi();
+ z.sqrTo(g[1],g2);
+ while(n <= km) {
+ g[n] = nbi();
+ z.mulTo(g2,g[n-2],g[n]);
+ n += 2;
+ }
+ }
+
+ var j = e.t-1, w, is1 = true, r2 = nbi(), t;
+ i = nbits(e_array[j])-1;
+ while(j >= 0) {
+ if(i >= k1) w = (e_array[j]>>(i-k1))&km;
+ else {
+ w = (e_array[j]&((1<<(i+1))-1))<<(k1-i);
+ if(j > 0) w |= e_array[j-1]>>(BI_DB+i-k1);
+ }
+
+ n = k;
+ while((w&1) == 0) { w >>= 1; --n; }
+ if((i -= n) < 0) { i += BI_DB; --j; }
+ if(is1) { // ret == 1, don't bother squaring or multiplying it
+ g[w].copyTo(r);
+ is1 = false;
+ }
+ else {
+ while(n > 1) { z.sqrTo(r,r2); z.sqrTo(r2,r); n -= 2; }
+ if(n > 0) z.sqrTo(r,r2); else { t = r; r = r2; r2 = t; }
+ z.mulTo(r2,g[w],r);
+ }
+
+ while(j >= 0 && (e_array[j]&(1<<i)) == 0) {
+ z.sqrTo(r,r2); t = r; r = r2; r2 = t;
+ if(--i < 0) { i = BI_DB-1; --j; }
+ }
+ }
+ return z.revert(r);
+}
+
+// (public) gcd(this,a) (HAC 14.54)
+function bnGCD(a) {
+ var x = (this.s<0)?this.negate():this.clone();
+ var y = (a.s<0)?a.negate():a.clone();
+ if(x.compareTo(y) < 0) { var t = x; x = y; y = t; }
+ var i = x.getLowestSetBit(), g = y.getLowestSetBit();
+ if(g < 0) return x;
+ if(i < g) g = i;
+ if(g > 0) {
+ x.rShiftTo(g,x);
+ y.rShiftTo(g,y);
+ }
+ while(x.signum() > 0) {
+ if((i = x.getLowestSetBit()) > 0) x.rShiftTo(i,x);
+ if((i = y.getLowestSetBit()) > 0) y.rShiftTo(i,y);
+ if(x.compareTo(y) >= 0) {
+ x.subTo(y,x);
+ x.rShiftTo(1,x);
+ }
+ else {
+ y.subTo(x,y);
+ y.rShiftTo(1,y);
+ }
+ }
+ if(g > 0) y.lShiftTo(g,y);
+ return y;
+}
+
+// (protected) this % n, n < 2^26
+function bnpModInt(n) {
+ var this_array = this.array;
+ if(n <= 0) return 0;
+ var d = BI_DV%n, r = (this.s<0)?n-1:0;
+ if(this.t > 0)
+ if(d == 0) r = this_array[0]%n;
+ else for(var i = this.t-1; i >= 0; --i) r = (d*r+this_array[i])%n;
+ return r;
+}
+
+// (public) 1/this % m (HAC 14.61)
+function bnModInverse(m) {
+ var ac = m.isEven();
+ if((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO;
+ var u = m.clone(), v = this.clone();
+ var a = nbv(1), b = nbv(0), c = nbv(0), d = nbv(1);
+ while(u.signum() != 0) {
+ while(u.isEven()) {
+ u.rShiftTo(1,u);
+ if(ac) {
+ if(!a.isEven() || !b.isEven()) { a.addTo(this,a); b.subTo(m,b); }
+ a.rShiftTo(1,a);
+ }
+ else if(!b.isEven()) b.subTo(m,b);
+ b.rShiftTo(1,b);
+ }
+ while(v.isEven()) {
+ v.rShiftTo(1,v);
+ if(ac) {
+ if(!c.isEven() || !d.isEven()) { c.addTo(this,c); d.subTo(m,d); }
+ c.rShiftTo(1,c);
+ }
+ else if(!d.isEven()) d.subTo(m,d);
+ d.rShiftTo(1,d);
+ }
+ if(u.compareTo(v) >= 0) {
+ u.subTo(v,u);
+ if(ac) a.subTo(c,a);
+ b.subTo(d,b);
+ }
+ else {
+ v.subTo(u,v);
+ if(ac) c.subTo(a,c);
+ d.subTo(b,d);
+ }
+ }
+ if(v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO;
+ if(d.compareTo(m) >= 0) return d.subtract(m);
+ if(d.signum() < 0) d.addTo(m,d); else return d;
+ if(d.signum() < 0) return d.add(m); else return d;
+}
+
+var lowprimes = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509];
+var lplim = (1<<26)/lowprimes[lowprimes.length-1];
+
+// (public) test primality with certainty >= 1-.5^t
+function bnIsProbablePrime(t) {
+ var i, x = this.abs();
+ var x_array = x.array;
+ if(x.t == 1 && x_array[0] <= lowprimes[lowprimes.length-1]) {
+ for(i = 0; i < lowprimes.length; ++i)
+ if(x_array[0] == lowprimes[i]) return true;
+ return false;
+ }
+ if(x.isEven()) return false;
+ i = 1;
+ while(i < lowprimes.length) {
+ var m = lowprimes[i], j = i+1;
+ while(j < lowprimes.length && m < lplim) m *= lowprimes[j++];
+ m = x.modInt(m);
+ while(i < j) if(m%lowprimes[i++] == 0) return false;
+ }
+ return x.millerRabin(t);
+}
+
+// (protected) true if probably prime (HAC 4.24, Miller-Rabin)
+function bnpMillerRabin(t) {
+ var n1 = this.subtract(BigInteger.ONE);
+ var k = n1.getLowestSetBit();
+ if(k <= 0) return false;
+ var r = n1.shiftRight(k);
+ t = (t+1)>>1;
+ if(t > lowprimes.length) t = lowprimes.length;
+ var a = nbi();
+ for(var i = 0; i < t; ++i) {
+ a.fromInt(lowprimes[i]);
+ var y = a.modPow(r,this);
+ if(y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
+ var j = 1;
+ while(j++ < k && y.compareTo(n1) != 0) {
+ y = y.modPowInt(2,this);
+ if(y.compareTo(BigInteger.ONE) == 0) return false;
+ }
+ if(y.compareTo(n1) != 0) return false;
+ }
+ }
+ return true;
+}
+
+// protected
+BigInteger.prototype.chunkSize = bnpChunkSize;
+BigInteger.prototype.toRadix = bnpToRadix;
+BigInteger.prototype.fromRadix = bnpFromRadix;
+BigInteger.prototype.fromNumber = bnpFromNumber;
+BigInteger.prototype.bitwiseTo = bnpBitwiseTo;
+BigInteger.prototype.changeBit = bnpChangeBit;
+BigInteger.prototype.addTo = bnpAddTo;
+BigInteger.prototype.dMultiply = bnpDMultiply;
+BigInteger.prototype.dAddOffset = bnpDAddOffset;
+BigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo;
+BigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo;
+BigInteger.prototype.modInt = bnpModInt;
+BigInteger.prototype.millerRabin = bnpMillerRabin;
+
+// public
+BigInteger.prototype.clone = bnClone;
+BigInteger.prototype.intValue = bnIntValue;
+BigInteger.prototype.byteValue = bnByteValue;
+BigInteger.prototype.shortValue = bnShortValue;
+BigInteger.prototype.signum = bnSigNum;
+BigInteger.prototype.toByteArray = bnToByteArray;
+BigInteger.prototype.equals = bnEquals;
+BigInteger.prototype.min = bnMin;
+BigInteger.prototype.max = bnMax;
+BigInteger.prototype.and = bnAnd;
+BigInteger.prototype.or = bnOr;
+BigInteger.prototype.xor = bnXor;
+BigInteger.prototype.andNot = bnAndNot;
+BigInteger.prototype.not = bnNot;
+BigInteger.prototype.shiftLeft = bnShiftLeft;
+BigInteger.prototype.shiftRight = bnShiftRight;
+BigInteger.prototype.getLowestSetBit = bnGetLowestSetBit;
+BigInteger.prototype.bitCount = bnBitCount;
+BigInteger.prototype.testBit = bnTestBit;
+BigInteger.prototype.setBit = bnSetBit;
+BigInteger.prototype.clearBit = bnClearBit;
+BigInteger.prototype.flipBit = bnFlipBit;
+BigInteger.prototype.add = bnAdd;
+BigInteger.prototype.subtract = bnSubtract;
+BigInteger.prototype.multiply = bnMultiply;
+BigInteger.prototype.divide = bnDivide;
+BigInteger.prototype.remainder = bnRemainder;
+BigInteger.prototype.divideAndRemainder = bnDivideAndRemainder;
+BigInteger.prototype.modPow = bnModPow;
+BigInteger.prototype.modInverse = bnModInverse;
+BigInteger.prototype.pow = bnPow;
+BigInteger.prototype.gcd = bnGCD;
+BigInteger.prototype.isProbablePrime = bnIsProbablePrime;
+
+// BigInteger interfaces not implemented in jsbn:
+
+// BigInteger(int signum, byte[] magnitude)
+// double doubleValue()
+// float floatValue()
+// int hashCode()
+// long longValue()
+// static BigInteger valueOf(long val)
+// prng4.js - uses Arcfour as a PRNG
+
+function Arcfour() {
+ this.i = 0;
+ this.j = 0;
+ this.S = new Array();
+}
+
+// Initialize arcfour context from key, an array of ints, each from [0..255]
+function ARC4init(key) {
+ var i, j, t;
+ for(i = 0; i < 256; ++i)
+ this.S[i] = i;
+ j = 0;
+ for(i = 0; i < 256; ++i) {
+ j = (j + this.S[i] + key[i % key.length]) & 255;
+ t = this.S[i];
+ this.S[i] = this.S[j];
+ this.S[j] = t;
+ }
+ this.i = 0;
+ this.j = 0;
+}
+
+function ARC4next() {
+ var t;
+ this.i = (this.i + 1) & 255;
+ this.j = (this.j + this.S[this.i]) & 255;
+ t = this.S[this.i];
+ this.S[this.i] = this.S[this.j];
+ this.S[this.j] = t;
+ return this.S[(t + this.S[this.i]) & 255];
+}
+
+Arcfour.prototype.init = ARC4init;
+Arcfour.prototype.next = ARC4next;
+
+// Plug in your RNG constructor here
+function prng_newstate() {
+ return new Arcfour();
+}
+
+// Pool size must be a multiple of 4 and greater than 32.
+// An array of bytes the size of the pool will be passed to init()
+var rng_psize = 256;
+// Random number generator - requires a PRNG backend, e.g. prng4.js
+
+// For best results, put code like
+// <body onClick='rng_seed_time();' onKeyPress='rng_seed_time();'>
+// in your main HTML document.
+
+var rng_state;
+var rng_pool;
+var rng_pptr;
+
+// Mix in a 32-bit integer into the pool
+function rng_seed_int(x) {
+ rng_pool[rng_pptr++] ^= x & 255;
+ rng_pool[rng_pptr++] ^= (x >> 8) & 255;
+ rng_pool[rng_pptr++] ^= (x >> 16) & 255;
+ rng_pool[rng_pptr++] ^= (x >> 24) & 255;
+ if(rng_pptr >= rng_psize) rng_pptr -= rng_psize;
+}
+
+// Mix in the current time (w/milliseconds) into the pool
+function rng_seed_time() {
+ // Use pre-computed date to avoid making the benchmark
+ // results dependent on the current date.
+ rng_seed_int(1122926989487);
+}
+
+// Initialize the pool with junk if needed.
+if(rng_pool == null) {
+ rng_pool = new Array();
+ rng_pptr = 0;
+ var t;
+ while(rng_pptr < rng_psize) { // extract some randomness from Math.random()
+ t = Math.floor(65536 * Math.random());
+ rng_pool[rng_pptr++] = t >>> 8;
+ rng_pool[rng_pptr++] = t & 255;
+ }
+ rng_pptr = 0;
+ rng_seed_time();
+ //rng_seed_int(window.screenX);
+ //rng_seed_int(window.screenY);
+}
+
+function rng_get_byte() {
+ if(rng_state == null) {
+ rng_seed_time();
+ rng_state = prng_newstate();
+ rng_state.init(rng_pool);
+ for(rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr)
+ rng_pool[rng_pptr] = 0;
+ rng_pptr = 0;
+ //rng_pool = null;
+ }
+ // TODO: allow reseeding after first request
+ return rng_state.next();
+}
+
+function rng_get_bytes(ba) {
+ var i;
+ for(i = 0; i < ba.length; ++i) ba[i] = rng_get_byte();
+}
+
+function SecureRandom() {}
+
+SecureRandom.prototype.nextBytes = rng_get_bytes;
+// Depends on jsbn.js and rng.js
+
+// convert a (hex) string to a bignum object
+function parseBigInt(str,r) {
+ return new BigInteger(str,r);
+}
+
+function linebrk(s,n) {
+ var ret = "";
+ var i = 0;
+ while(i + n < s.length) {
+ ret += s.substring(i,i+n) + "\n";
+ i += n;
+ }
+ return ret + s.substring(i,s.length);
+}
+
+function byte2Hex(b) {
+ if(b < 0x10)
+ return "0" + b.toString(16);
+ else
+ return b.toString(16);
+}
+
+// PKCS#1 (type 2, random) pad input string s to n bytes, and return a bigint
+function pkcs1pad2(s,n) {
+ if(n < s.length + 11) {
+ alert("Message too long for RSA");
+ return null;
+ }
+ var ba = new Array();
+ var i = s.length - 1;
+ while(i >= 0 && n > 0) ba[--n] = s.charCodeAt(i--);
+ ba[--n] = 0;
+ var rng = new SecureRandom();
+ var x = new Array();
+ while(n > 2) { // random non-zero pad
+ x[0] = 0;
+ while(x[0] == 0) rng.nextBytes(x);
+ ba[--n] = x[0];
+ }
+ ba[--n] = 2;
+ ba[--n] = 0;
+ return new BigInteger(ba);
+}
+
+// "empty" RSA key constructor
+function RSAKey() {
+ this.n = null;
+ this.e = 0;
+ this.d = null;
+ this.p = null;
+ this.q = null;
+ this.dmp1 = null;
+ this.dmq1 = null;
+ this.coeff = null;
+}
+
+// Set the public key fields N and e from hex strings
+function RSASetPublic(N,E) {
+ if(N != null && E != null && N.length > 0 && E.length > 0) {
+ this.n = parseBigInt(N,16);
+ this.e = parseInt(E,16);
+ }
+ else
+ alert("Invalid RSA public key");
+}
+
+// Perform raw public operation on "x": return x^e (mod n)
+function RSADoPublic(x) {
+ return x.modPowInt(this.e, this.n);
+}
+
+// Return the PKCS#1 RSA encryption of "text" as an even-length hex string
+function RSAEncrypt(text) {
+ var m = pkcs1pad2(text,(this.n.bitLength()+7)>>3);
+ if(m == null) return null;
+ var c = this.doPublic(m);
+ if(c == null) return null;
+ var h = c.toString(16);
+ if((h.length & 1) == 0) return h; else return "0" + h;
+}
+
+// Return the PKCS#1 RSA encryption of "text" as a Base64-encoded string
+//function RSAEncryptB64(text) {
+// var h = this.encrypt(text);
+// if(h) return hex2b64(h); else return null;
+//}
+
+// protected
+RSAKey.prototype.doPublic = RSADoPublic;
+
+// public
+RSAKey.prototype.setPublic = RSASetPublic;
+RSAKey.prototype.encrypt = RSAEncrypt;
+//RSAKey.prototype.encrypt_b64 = RSAEncryptB64;
+// Depends on rsa.js and jsbn2.js
+
+// Undo PKCS#1 (type 2, random) padding and, if valid, return the plaintext
+function pkcs1unpad2(d,n) {
+ var b = d.toByteArray();
+ var i = 0;
+ while(i < b.length && b[i] == 0) ++i;
+ if(b.length-i != n-1 || b[i] != 2)
+ return null;
+ ++i;
+ while(b[i] != 0)
+ if(++i >= b.length) return null;
+ var ret = "";
+ while(++i < b.length)
+ ret += String.fromCharCode(b[i]);
+ return ret;
+}
+
+// Set the private key fields N, e, and d from hex strings
+function RSASetPrivate(N,E,D) {
+ if(N != null && E != null && N.length > 0 && E.length > 0) {
+ this.n = parseBigInt(N,16);
+ this.e = parseInt(E,16);
+ this.d = parseBigInt(D,16);
+ }
+ else
+ alert("Invalid RSA private key");
+}
+
+// Set the private key fields N, e, d and CRT params from hex strings
+function RSASetPrivateEx(N,E,D,P,Q,DP,DQ,C) {
+ if(N != null && E != null && N.length > 0 && E.length > 0) {
+ this.n = parseBigInt(N,16);
+ this.e = parseInt(E,16);
+ this.d = parseBigInt(D,16);
+ this.p = parseBigInt(P,16);
+ this.q = parseBigInt(Q,16);
+ this.dmp1 = parseBigInt(DP,16);
+ this.dmq1 = parseBigInt(DQ,16);
+ this.coeff = parseBigInt(C,16);
+ }
+ else
+ alert("Invalid RSA private key");
+}
+
+// Generate a new random private key B bits long, using public expt E
+function RSAGenerate(B,E) {
+ var rng = new SecureRandom();
+ var qs = B>>1;
+ this.e = parseInt(E,16);
+ var ee = new BigInteger(E,16);
+ for(;;) {
+ for(;;) {
+ this.p = new BigInteger(B-qs,1,rng);
+ if(this.p.subtract(BigInteger.ONE).gcd(ee).compareTo(BigInteger.ONE) == 0 && this.p.isProbablePrime(10)) break;
+ }
+ for(;;) {
+ this.q = new BigInteger(qs,1,rng);
+ if(this.q.subtract(BigInteger.ONE).gcd(ee).compareTo(BigInteger.ONE) == 0 && this.q.isProbablePrime(10)) break;
+ }
+ if(this.p.compareTo(this.q) <= 0) {
+ var t = this.p;
+ this.p = this.q;
+ this.q = t;
+ }
+ var p1 = this.p.subtract(BigInteger.ONE);
+ var q1 = this.q.subtract(BigInteger.ONE);
+ var phi = p1.multiply(q1);
+ if(phi.gcd(ee).compareTo(BigInteger.ONE) == 0) {
+ this.n = this.p.multiply(this.q);
+ this.d = ee.modInverse(phi);
+ this.dmp1 = this.d.mod(p1);
+ this.dmq1 = this.d.mod(q1);
+ this.coeff = this.q.modInverse(this.p);
+ break;
+ }
+ }
+}
+
+// Perform raw private operation on "x": return x^d (mod n)
+function RSADoPrivate(x) {
+ if(this.p == null || this.q == null)
+ return x.modPow(this.d, this.n);
+
+ // TODO: re-calculate any missing CRT params
+ var xp = x.mod(this.p).modPow(this.dmp1, this.p);
+ var xq = x.mod(this.q).modPow(this.dmq1, this.q);
+
+ while(xp.compareTo(xq) < 0)
+ xp = xp.add(this.p);
+ return xp.subtract(xq).multiply(this.coeff).mod(this.p).multiply(this.q).add(xq);
+}
+
+// Return the PKCS#1 RSA decryption of "ctext".
+// "ctext" is an even-length hex string and the output is a plain string.
+function RSADecrypt(ctext) {
+ var c = parseBigInt(ctext, 16);
+ var m = this.doPrivate(c);
+ if(m == null) return null;
+ return pkcs1unpad2(m, (this.n.bitLength()+7)>>3);
+}
+
+// Return the PKCS#1 RSA decryption of "ctext".
+// "ctext" is a Base64-encoded string and the output is a plain string.
+//function RSAB64Decrypt(ctext) {
+// var h = b64tohex(ctext);
+// if(h) return this.decrypt(h); else return null;
+//}
+
+// protected
+RSAKey.prototype.doPrivate = RSADoPrivate;
+
+// public
+RSAKey.prototype.setPrivate = RSASetPrivate;
+RSAKey.prototype.setPrivateEx = RSASetPrivateEx;
+RSAKey.prototype.generate = RSAGenerate;
+RSAKey.prototype.decrypt = RSADecrypt;
+//RSAKey.prototype.b64_decrypt = RSAB64Decrypt;
+
+
+nValue="a5261939975948bb7a58dffe5ff54e65f0498f9175f5a09288810b8975871e99af3b5dd94057b0fc07535f5f97444504fa35169d461d0d30cf0192e307727c065168c788771c561a9400fb49175e9e6aa4e23fe11af69e9412dd23b0cb6684c4c2429bce139e848ab26d0829073351f4acd36074eafd036a5eb83359d2a698d3";
+eValue="10001";
+dValue="8e9912f6d3645894e8d38cb58c0db81ff516cf4c7e5a14c7f1eddb1459d2cded4d8d293fc97aee6aefb861859c8b6a3d1dfe710463e1f9ddc72048c09751971c4a580aa51eb523357a3cc48d31cfad1d4a165066ed92d4748fb6571211da5cb14bc11b6e2df7c1a559e6d5ac1cd5c94703a22891464fba23d0d965086277a161";
+pValue="d090ce58a92c75233a6486cb0a9209bf3583b64f540c76f5294bb97d285eed33aec220bde14b2417951178ac152ceab6da7090905b478195498b352048f15e7d";
+qValue="cab575dc652bb66df15a0359609d51d1db184750c00c6698b90ef3465c99655103edbf0d54c56aec0ce3c4d22592338092a126a0cc49f65a4a30d222b411e58f";
+dmp1Value="1a24bca8e273df2f0e47c199bbf678604e7df7215480c77c8db39f49b000ce2cf7500038acfff5433b7d582a01f1826e6f4d42e1c57f5e1fef7b12aabc59fd25";
+dmq1Value="3d06982efbbe47339e1f6d36b1216b8a741d410b0c662f54f7118b27b9a4ec9d914337eb39841d8666f3034408cf94f5b62f11c402fc994fe15a05493150d9fd";
+coeffValue="3a3e731acd8960b7ff9eb81a7ff93bd1cfa74cbd56987db58b4594fb09c09084db1734c8143f98b602b981aaa9243ca28deb69b5b280ee8dcee0fd2625e53250";
+
+setupEngine(am3, 28);
+
+var TEXT = "The quick brown fox jumped over the extremely lazy frog! " +
+ "Now is the time for all good men to come to the party.";
+var encrypted;
+
+window.onload = function(){ startTest("v8-crypto", 'f0250ffa');
+
+test("RSA Encrypt", function encrypt() {
+ var RSA = new RSAKey();
+ RSA.setPublic(nValue, eValue);
+ RSA.setPrivateEx(nValue, eValue, dValue, pValue, qValue, dmp1Value, dmq1Value, coeffValue);
+ encrypted = RSA.encrypt(TEXT);
+});
+
+test("RSA Decrypt", function decrypt() {
+ var RSA = new RSAKey();
+ RSA.setPublic(nValue, eValue);
+ RSA.setPrivateEx(nValue, eValue, dValue, pValue, qValue, dmp1Value, dmq1Value, coeffValue);
+ var decrypted = RSA.decrypt(encrypted);
+ if (decrypted != TEXT) {
+ throw new Error("Crypto operation failed");
+ }
+});
+
+endTest(); };
+</script>
+</head>
+<body></body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/v8-deltablue.html b/testing/talos/talos/tests/dromaeo/tests/v8-deltablue.html
new file mode 100644
index 0000000000..69e6348cb2
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/v8-deltablue.html
@@ -0,0 +1,887 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script>
+// Copyright 2008 the V8 project authors. All rights reserved.
+// Copyright 1996 John Maloney and Mario Wolczko.
+
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+// This implementation of the DeltaBlue benchmark is derived
+// from the Smalltalk implementation by John Maloney and Mario
+// Wolczko. Some parts have been translated directly, whereas
+// others have been modified more aggresively to make it feel
+// more like a JavaScript program.
+
+
+/**
+ * A JavaScript implementation of the DeltaBlue constrain-solving
+ * algorithm, as described in:
+ *
+ * "The DeltaBlue Algorithm: An Incremental Constraint Hierarchy Solver"
+ * Bjorn N. Freeman-Benson and John Maloney
+ * January 1990 Communications of the ACM,
+ * also available as University of Washington TR 89-08-06.
+ *
+ * Beware: this benchmark is written in a grotesque style where
+ * the constraint model is built by side-effects from constructors.
+ * I've kept it this way to avoid deviating too much from the original
+ * implementation.
+ */
+
+
+/* --- O b j e c t M o d e l --- */
+
+function inherits(orig, shuper) {
+ function Inheriter() { }
+ Inheriter.prototype = shuper.prototype;
+ orig.prototype = new Inheriter();
+ orig.superConstructor = shuper;
+}
+
+function OrderedCollection() {
+ this.elms = new Array();
+}
+
+OrderedCollection.prototype.add = function (elm) {
+ this.elms.push(elm);
+}
+
+OrderedCollection.prototype.at = function (index) {
+ return this.elms[index];
+}
+
+OrderedCollection.prototype.size = function () {
+ return this.elms.length;
+}
+
+OrderedCollection.prototype.removeFirst = function () {
+ return this.elms.pop();
+}
+
+OrderedCollection.prototype.remove = function (elm) {
+ var index = 0, skipped = 0;
+ for (var i = 0; i < this.elms.length; i++) {
+ var value = this.elms[i];
+ if (value != elm) {
+ this.elms[index] = value;
+ index++;
+ } else {
+ skipped++;
+ }
+ }
+ for (var i = 0; i < skipped; i++)
+ this.elms.pop();
+}
+
+/* --- *
+ * S t r e n g t h
+ * --- */
+
+/**
+ * Strengths are used to measure the relative importance of constraints.
+ * New strengths may be inserted in the strength hierarchy without
+ * disrupting current constraints. Strengths cannot be created outside
+ * this class, so pointer comparison can be used for value comparison.
+ */
+function Strength(strengthValue, name) {
+ this.strengthValue = strengthValue;
+ this.name = name;
+}
+
+Strength.stronger = function (s1, s2) {
+ return s1.strengthValue < s2.strengthValue;
+}
+
+Strength.weaker = function (s1, s2) {
+ return s1.strengthValue > s2.strengthValue;
+}
+
+Strength.weakestOf = function (s1, s2) {
+ return this.weaker(s1, s2) ? s1 : s2;
+}
+
+Strength.strongest = function (s1, s2) {
+ return this.stronger(s1, s2) ? s1 : s2;
+}
+
+Strength.prototype.nextWeaker = function () {
+ switch (this.strengthValue) {
+ case 0: return Strength.WEAKEST;
+ case 1: return Strength.WEAK_DEFAULT;
+ case 2: return Strength.NORMAL;
+ case 3: return Strength.STRONG_DEFAULT;
+ case 4: return Strength.PREFERRED;
+ case 5: return Strength.REQUIRED;
+ }
+}
+
+// Strength constants.
+Strength.REQUIRED = new Strength(0, "required");
+Strength.STONG_PREFERRED = new Strength(1, "strongPreferred");
+Strength.PREFERRED = new Strength(2, "preferred");
+Strength.STRONG_DEFAULT = new Strength(3, "strongDefault");
+Strength.NORMAL = new Strength(4, "normal");
+Strength.WEAK_DEFAULT = new Strength(5, "weakDefault");
+Strength.WEAKEST = new Strength(6, "weakest");
+
+/* --- *
+ * C o n s t r a i n t
+ * --- */
+
+/**
+ * An abstract class representing a system-maintainable relationship
+ * (or "constraint") between a set of variables. A constraint supplies
+ * a strength instance variable; concrete subclasses provide a means
+ * of storing the constrained variables and other information required
+ * to represent a constraint.
+ */
+function Constraint(strength) {
+ this.strength = strength;
+}
+
+/**
+ * Activate this constraint and attempt to satisfy it.
+ */
+Constraint.prototype.addConstraint = function () {
+ this.addToGraph();
+ planner.incrementalAdd(this);
+}
+
+/**
+ * Attempt to find a way to enforce this constraint. If successful,
+ * record the solution, perhaps modifying the current dataflow
+ * graph. Answer the constraint that this constraint overrides, if
+ * there is one, or nil, if there isn't.
+ * Assume: I am not already satisfied.
+ */
+Constraint.prototype.satisfy = function (mark) {
+ this.chooseMethod(mark);
+ if (!this.isSatisfied()) {
+ if (this.strength == Strength.REQUIRED)
+ alert("Could not satisfy a required constraint!");
+ return null;
+ }
+ this.markInputs(mark);
+ var out = this.output();
+ var overridden = out.determinedBy;
+ if (overridden != null) overridden.markUnsatisfied();
+ out.determinedBy = this;
+ if (!planner.addPropagate(this, mark))
+ alert("Cycle encountered");
+ out.mark = mark;
+ return overridden;
+}
+
+Constraint.prototype.destroyConstraint = function () {
+ if (this.isSatisfied()) planner.incrementalRemove(this);
+ else this.removeFromGraph();
+}
+
+/**
+ * Normal constraints are not input constraints. An input constraint
+ * is one that depends on external state, such as the mouse, the
+ * keybord, a clock, or some arbitraty piece of imperative code.
+ */
+Constraint.prototype.isInput = function () {
+ return false;
+}
+
+/* --- *
+ * U n a r y C o n s t r a i n t
+ * --- */
+
+/**
+ * Abstract superclass for constraints having a single possible output
+ * variable.
+ */
+function UnaryConstraint(v, strength) {
+ UnaryConstraint.superConstructor.call(this, strength);
+ this.myOutput = v;
+ this.satisfied = false;
+ this.addConstraint();
+}
+
+inherits(UnaryConstraint,Constraint);
+
+/**
+ * Adds this constraint to the constraint graph
+ */
+UnaryConstraint.prototype.addToGraph = function () {
+ this.myOutput.addConstraint(this);
+ this.satisfied = false;
+}
+
+/**
+ * Decides if this constraint can be satisfied and records that
+ * decision.
+ */
+UnaryConstraint.prototype.chooseMethod = function (mark) {
+ this.satisfied = (this.myOutput.mark != mark)
+ && Strength.stronger(this.strength, this.myOutput.walkStrength);
+}
+
+/**
+ * Returns true if this constraint is satisfied in the current solution.
+ */
+UnaryConstraint.prototype.isSatisfied = function () {
+ return this.satisfied;
+}
+
+UnaryConstraint.prototype.markInputs = function (mark) {
+ // has no inputs
+}
+
+/**
+ * Returns the current output variable.
+ */
+UnaryConstraint.prototype.output = function () {
+ return this.myOutput;
+}
+
+/**
+ * Calculate the walkabout strength, the stay flag, and, if it is
+ * 'stay', the value for the current output of this constraint. Assume
+ * this constraint is satisfied.
+ */
+UnaryConstraint.prototype.recalculate = function () {
+ this.myOutput.walkStrength = this.strength;
+ this.myOutput.stay = !this.isInput();
+ if (this.myOutput.stay) this.execute(); // Stay optimization
+}
+
+/**
+ * Records that this constraint is unsatisfied
+ */
+UnaryConstraint.prototype.markUnsatisfied = function () {
+ this.satisfied = false;
+}
+
+UnaryConstraint.prototype.inputsKnown = function () {
+ return true;
+}
+
+UnaryConstraint.prototype.removeFromGraph = function () {
+ if (this.myOutput != null) this.myOutput.removeConstraint(this);
+ this.satisfied = false;
+}
+
+/* --- *
+ * S t a y C o n s t r a i n t
+ * --- */
+
+/**
+ * Variables that should, with some level of preference, stay the same.
+ * Planners may exploit the fact that instances, if satisfied, will not
+ * change their output during plan execution. This is called "stay
+ * optimization".
+ */
+function StayConstraint(v, str) {
+ StayConstraint.superConstructor.call(this, v, str);
+}
+
+inherits(StayConstraint,UnaryConstraint);
+
+StayConstraint.prototype.execute = function () {
+ // Stay constraints do nothing
+}
+
+/* --- *
+ * E d i t C o n s t r a i n t
+ * --- */
+
+/**
+ * A unary input constraint used to mark a variable that the client
+ * wishes to change.
+ */
+function EditConstraint(v, str) {
+ EditConstraint.superConstructor.call(this, v, str);
+}
+
+inherits(EditConstraint,UnaryConstraint);
+
+/**
+ * Edits indicate that a variable is to be changed by imperative code.
+ */
+EditConstraint.prototype.isInput = function () {
+ return true;
+}
+
+EditConstraint.prototype.execute = function () {
+ // Edit constraints do nothing
+}
+
+/* --- *
+ * B i n a r y C o n s t r a i n t
+ * --- */
+
+var Direction = new Object();
+Direction.NONE = 0;
+Direction.FORWARD = 1;
+Direction.BACKWARD = -1;
+
+/**
+ * Abstract superclass for constraints having two possible output
+ * variables.
+ */
+function BinaryConstraint(var1, var2, strength) {
+ BinaryConstraint.superConstructor.call(this, strength);
+ this.v1 = var1;
+ this.v2 = var2;
+ this.direction = Direction.NONE;
+ this.addConstraint();
+}
+
+inherits(BinaryConstraint,Constraint);
+
+/**
+ * Decides if this constratint can be satisfied and which way it
+ * should flow based on the relative strength of the variables related,
+ * and record that decision.
+ */
+BinaryConstraint.prototype.chooseMethod = function (mark) {
+ if (this.v1.mark == mark) {
+ this.direction = (this.v1.mark != mark && Strength.stronger(this.strength, this.v2.walkStrength))
+ ? Direction.FORWARD
+ : Direction.NONE;
+ }
+ if (this.v2.mark == mark) {
+ this.direction = (this.v1.mark != mark && Strength.stronger(this.strength, this.v1.walkStrength))
+ ? Direction.BACKWARD
+ : Direction.NONE;
+ }
+ if (Strength.weaker(this.v1.walkStrength, this.v2.walkStrength)) {
+ this.direction = Strength.stronger(this.strength, this.v1.walkStrength)
+ ? Direction.BACKWARD
+ : Direction.NONE;
+ } else {
+ this.direction = Strength.stronger(this.strength, this.v2.walkStrength)
+ ? Direction.FORWARD
+ : Direction.BACKWARD
+ }
+}
+
+/**
+ * Add this constraint to the constraint graph
+ */
+BinaryConstraint.prototype.addToGraph = function () {
+ this.v1.addConstraint(this);
+ this.v2.addConstraint(this);
+ this.direction = Direction.NONE;
+}
+
+/**
+ * Answer true if this constraint is satisfied in the current solution.
+ */
+BinaryConstraint.prototype.isSatisfied = function () {
+ return this.direction != Direction.NONE;
+}
+
+/**
+ * Mark the input variable with the given mark.
+ */
+BinaryConstraint.prototype.markInputs = function (mark) {
+ this.input().mark = mark;
+}
+
+/**
+ * Returns the current input variable
+ */
+BinaryConstraint.prototype.input = function () {
+ return (this.direction == Direction.FORWARD) ? this.v1 : this.v2;
+}
+
+/**
+ * Returns the current output variable
+ */
+BinaryConstraint.prototype.output = function () {
+ return (this.direction == Direction.FORWARD) ? this.v2 : this.v1;
+}
+
+/**
+ * Calculate the walkabout strength, the stay flag, and, if it is
+ * 'stay', the value for the current output of this
+ * constraint. Assume this constraint is satisfied.
+ */
+BinaryConstraint.prototype.recalculate = function () {
+ var ihn = this.input(), out = this.output();
+ out.walkStrength = Strength.weakestOf(this.strength, ihn.walkStrength);
+ out.stay = ihn.stay;
+ if (out.stay) this.execute();
+}
+
+/**
+ * Record the fact that this constraint is unsatisfied.
+ */
+BinaryConstraint.prototype.markUnsatisfied = function () {
+ this.direction = Direction.NONE;
+}
+
+BinaryConstraint.prototype.inputsKnown = function (mark) {
+ var i = this.input();
+ return i.mark == mark || i.stay || i.determinedBy == null;
+}
+
+BinaryConstraint.prototype.removeFromGraph = function () {
+ if (this.v1 != null) this.v1.removeConstraint(this);
+ if (this.v2 != null) this.v2.removeConstraint(this);
+ this.direction = Direction.NONE;
+}
+
+/* --- *
+ * S c a l e C o n s t r a i n t
+ * --- */
+
+/**
+ * Relates two variables by the linear scaling relationship: "v2 =
+ * (v1 * scale) + offset". Either v1 or v2 may be changed to maintain
+ * this relationship but the scale factor and offset are considered
+ * read-only.
+ */
+function ScaleConstraint(src, scale, offset, dest, strength) {
+ this.direction = Direction.NONE;
+ this.scale = scale;
+ this.offset = offset;
+ ScaleConstraint.superConstructor.call(this, src, dest, strength);
+}
+
+inherits(ScaleConstraint,BinaryConstraint);
+
+/**
+ * Adds this constraint to the constraint graph.
+ */
+ScaleConstraint.prototype.addToGraph = function () {
+ ScaleConstraint.superConstructor.prototype.addToGraph.call(this);
+ this.scale.addConstraint(this);
+ this.offset.addConstraint(this);
+}
+
+ScaleConstraint.prototype.removeFromGraph = function () {
+ ScaleConstraint.superConstructor.prototype.removeFromGraph.call(this);
+ if (this.scale != null) this.scale.removeConstraint(this);
+ if (this.offset != null) this.offset.removeConstraint(this);
+}
+
+ScaleConstraint.prototype.markInputs = function (mark) {
+ ScaleConstraint.superConstructor.prototype.markInputs.call(this, mark);
+ this.scale.mark = this.offset.mark = mark;
+}
+
+/**
+ * Enforce this constraint. Assume that it is satisfied.
+ */
+ScaleConstraint.prototype.execute = function () {
+ if (this.direction == Direction.FORWARD) {
+ this.v2.value = this.v1.value * this.scale.value + this.offset.value;
+ } else {
+ this.v1.value = (this.v2.value - this.offset.value) / this.scale.value;
+ }
+}
+
+/**
+ * Calculate the walkabout strength, the stay flag, and, if it is
+ * 'stay', the value for the current output of this constraint. Assume
+ * this constraint is satisfied.
+ */
+ScaleConstraint.prototype.recalculate = function () {
+ var ihn = this.input(), out = this.output();
+ out.walkStrength = Strength.weakestOf(this.strength, ihn.walkStrength);
+ out.stay = ihn.stay && this.scale.stay && this.offset.stay;
+ if (out.stay) this.execute();
+}
+
+/* --- *
+ * E q u a l i t y C o n s t r a i n t
+ * --- */
+
+/**
+ * Constrains two variables to have the same value.
+ */
+function EqualityConstraint(var1, var2, strength) {
+ EqualityConstraint.superConstructor.call(this, var1, var2, strength);
+}
+
+inherits(EqualityConstraint,BinaryConstraint);
+
+/**
+ * Enforce this constraint. Assume that it is satisfied.
+ */
+EqualityConstraint.prototype.execute = function () {
+ this.output().value = this.input().value;
+}
+
+/* --- *
+ * V a r i a b l e
+ * --- */
+
+/**
+ * A constrained variable. In addition to its value, it maintain the
+ * structure of the constraint graph, the current dataflow graph, and
+ * various parameters of interest to the DeltaBlue incremental
+ * constraint solver.
+ **/
+function Variable(name, initialValue) {
+ this.value = initialValue || 0;
+ this.constraints = new OrderedCollection();
+ this.determinedBy = null;
+ this.mark = 0;
+ this.walkStrength = Strength.WEAKEST;
+ this.stay = true;
+ this.name = name;
+}
+
+/**
+ * Add the given constraint to the set of all constraints that refer
+ * this variable.
+ */
+Variable.prototype.addConstraint = function (c) {
+ this.constraints.add(c);
+}
+
+/**
+ * Removes all traces of c from this variable.
+ */
+Variable.prototype.removeConstraint = function (c) {
+ this.constraints.remove(c);
+ if (this.determinedBy == c) this.determinedBy = null;
+}
+
+/* --- *
+ * P l a n n e r
+ * --- */
+
+/**
+ * The DeltaBlue planner
+ */
+function Planner() {
+ this.currentMark = 0;
+}
+
+/**
+ * Attempt to satisfy the given constraint and, if successful,
+ * incrementally update the dataflow graph. Details: If satifying
+ * the constraint is successful, it may override a weaker constraint
+ * on its output. The algorithm attempts to resatisfy that
+ * constraint using some other method. This process is repeated
+ * until either a) it reaches a variable that was not previously
+ * determined by any constraint or b) it reaches a constraint that
+ * is too weak to be satisfied using any of its methods. The
+ * variables of constraints that have been processed are marked with
+ * a unique mark value so that we know where we've been. This allows
+ * the algorithm to avoid getting into an infinite loop even if the
+ * constraint graph has an inadvertent cycle.
+ */
+Planner.prototype.incrementalAdd = function (c) {
+ var mark = this.newMark();
+ var overridden = c.satisfy(mark);
+ while (overridden != null)
+ overridden = overridden.satisfy(mark);
+}
+
+/**
+ * Entry point for retracting a constraint. Remove the given
+ * constraint and incrementally update the dataflow graph.
+ * Details: Retracting the given constraint may allow some currently
+ * unsatisfiable downstream constraint to be satisfied. We therefore collect
+ * a list of unsatisfied downstream constraints and attempt to
+ * satisfy each one in turn. This list is traversed by constraint
+ * strength, strongest first, as a heuristic for avoiding
+ * unnecessarily adding and then overriding weak constraints.
+ * Assume: c is satisfied.
+ */
+Planner.prototype.incrementalRemove = function (c) {
+ var out = c.output();
+ c.markUnsatisfied();
+ c.removeFromGraph();
+ var unsatisfied = this.removePropagateFrom(out);
+ var strength = Strength.REQUIRED;
+ do {
+ for (var i = 0; i < unsatisfied.size(); i++) {
+ var u = unsatisfied.at(i);
+ if (u.strength == strength)
+ this.incrementalAdd(u);
+ }
+ strength = strength.nextWeaker();
+ } while (strength != Strength.WEAKEST);
+}
+
+/**
+ * Select a previously unused mark value.
+ */
+Planner.prototype.newMark = function () {
+ return ++this.currentMark;
+}
+
+/**
+ * Extract a plan for resatisfaction starting from the given source
+ * constraints, usually a set of input constraints. This method
+ * assumes that stay optimization is desired; the plan will contain
+ * only constraints whose output variables are not stay. Constraints
+ * that do no computation, such as stay and edit constraints, are
+ * not included in the plan.
+ * Details: The outputs of a constraint are marked when it is added
+ * to the plan under construction. A constraint may be appended to
+ * the plan when all its input variables are known. A variable is
+ * known if either a) the variable is marked (indicating that has
+ * been computed by a constraint appearing earlier in the plan), b)
+ * the variable is 'stay' (i.e. it is a constant at plan execution
+ * time), or c) the variable is not determined by any
+ * constraint. The last provision is for past states of history
+ * variables, which are not stay but which are also not computed by
+ * any constraint.
+ * Assume: sources are all satisfied.
+ */
+Planner.prototype.makePlan = function (sources) {
+ var mark = this.newMark();
+ var plan = new Plan();
+ var todo = sources;
+ while (todo.size() > 0) {
+ var c = todo.removeFirst();
+ if (c.output().mark != mark && c.inputsKnown(mark)) {
+ plan.addConstraint(c);
+ c.output().mark = mark;
+ this.addConstraintsConsumingTo(c.output(), todo);
+ }
+ }
+ return plan;
+}
+
+/**
+ * Extract a plan for resatisfying starting from the output of the
+ * given constraints, usually a set of input constraints.
+ */
+Planner.prototype.extractPlanFromConstraints = function (constraints) {
+ var sources = new OrderedCollection();
+ for (var i = 0; i < constraints.size(); i++) {
+ var c = constraints.at(i);
+ if (c.isInput() && c.isSatisfied())
+ // not in plan already and eligible for inclusion
+ sources.add(c);
+ }
+ return this.makePlan(sources);
+}
+
+/**
+ * Recompute the walkabout strengths and stay flags of all variables
+ * downstream of the given constraint and recompute the actual
+ * values of all variables whose stay flag is true. If a cycle is
+ * detected, remove the given constraint and answer
+ * false. Otherwise, answer true.
+ * Details: Cycles are detected when a marked variable is
+ * encountered downstream of the given constraint. The sender is
+ * assumed to have marked the inputs of the given constraint with
+ * the given mark. Thus, encountering a marked node downstream of
+ * the output constraint means that there is a path from the
+ * constraint's output to one of its inputs.
+ */
+Planner.prototype.addPropagate = function (c, mark) {
+ var todo = new OrderedCollection();
+ todo.add(c);
+ while (todo.size() > 0) {
+ var d = todo.removeFirst();
+ if (d.output().mark == mark) {
+ this.incrementalRemove(c);
+ return false;
+ }
+ d.recalculate();
+ this.addConstraintsConsumingTo(d.output(), todo);
+ }
+ return true;
+}
+
+
+/**
+ * Update the walkabout strengths and stay flags of all variables
+ * downstream of the given constraint. Answer a collection of
+ * unsatisfied constraints sorted in order of decreasing strength.
+ */
+Planner.prototype.removePropagateFrom = function (out) {
+ out.determinedBy = null;
+ out.walkStrength = Strength.WEAKEST;
+ out.stay = true;
+ var unsatisfied = new OrderedCollection();
+ var todo = new OrderedCollection();
+ todo.add(out);
+ while (todo.size() > 0) {
+ var v = todo.removeFirst();
+ for (var i = 0; i < v.constraints.size(); i++) {
+ var c = v.constraints.at(i);
+ if (!c.isSatisfied())
+ unsatisfied.add(c);
+ }
+ var determining = v.determinedBy;
+ for (var i = 0; i < v.constraints.size(); i++) {
+ var next = v.constraints.at(i);
+ if (next != determining && next.isSatisfied()) {
+ next.recalculate();
+ todo.add(next.output());
+ }
+ }
+ }
+ return unsatisfied;
+}
+
+Planner.prototype.addConstraintsConsumingTo = function (v, coll) {
+ var determining = v.determinedBy;
+ var cc = v.constraints;
+ for (var i = 0; i < cc.size(); i++) {
+ var c = cc.at(i);
+ if (c != determining && c.isSatisfied())
+ coll.add(c);
+ }
+}
+
+/* --- *
+ * P l a n
+ * --- */
+
+/**
+ * A Plan is an ordered list of constraints to be executed in sequence
+ * to resatisfy all currently satisfiable constraints in the face of
+ * one or more changing inputs.
+ */
+function Plan() {
+ this.v = new OrderedCollection();
+}
+
+Plan.prototype.addConstraint = function (c) {
+ this.v.add(c);
+}
+
+Plan.prototype.size = function () {
+ return this.v.size();
+}
+
+Plan.prototype.constraintAt = function (index) {
+ return this.v.at(index);
+}
+
+Plan.prototype.execute = function () {
+ for (var i = 0; i < this.size(); i++) {
+ var c = this.constraintAt(i);
+ c.execute();
+ }
+}
+
+/* --- *
+ * M a i n
+ * --- */
+
+/**
+ * This is the standard DeltaBlue benchmark. A long chain of equality
+ * constraints is constructed with a stay constraint on one end. An
+ * edit constraint is then added to the opposite end and the time is
+ * measured for adding and removing this constraint, and extracting
+ * and executing a constraint satisfaction plan. There are two cases.
+ * In case 1, the added constraint is stronger than the stay
+ * constraint and values must propagate down the entire length of the
+ * chain. In case 2, the added constraint is weaker than the stay
+ * constraint so it cannot be accomodated. The cost in this case is,
+ * of course, very low. Typical situations lie somewhere between these
+ * two extremes.
+ */
+function chainTest(n) {
+ planner = new Planner();
+ var prev = null, first = null, last = null;
+
+ // Build chain of n equality constraints
+ for (var i = 0; i <= n; i++) {
+ var name = "v" + i;
+ var v = new Variable(name);
+ if (prev != null)
+ new EqualityConstraint(prev, v, Strength.REQUIRED);
+ if (i == 0) first = v;
+ if (i == n) last = v;
+ prev = v;
+ }
+
+ new StayConstraint(last, Strength.STRONG_DEFAULT);
+ var edit = new EditConstraint(first, Strength.PREFERRED);
+ var edits = new OrderedCollection();
+ edits.add(edit);
+ var plan = planner.extractPlanFromConstraints(edits);
+ for (var i = 0; i < 100; i++) {
+ first.value = i;
+ plan.execute();
+ if (last.value != i)
+ alert("Chain test failed.");
+ }
+}
+
+/**
+ * This test constructs a two sets of variables related to each
+ * other by a simple linear transformation (scale and offset). The
+ * time is measured to change a variable on either side of the
+ * mapping and to change the scale and offset factors.
+ */
+function projectionTest(n) {
+ planner = new Planner();
+ var scale = new Variable("scale", 10);
+ var offset = new Variable("offset", 1000);
+ var src = null, dst = null;
+
+ var dests = new OrderedCollection();
+ for (var i = 0; i < n; i++) {
+ src = new Variable("src" + i, i);
+ dst = new Variable("dst" + i, i);
+ dests.add(dst);
+ new StayConstraint(src, Strength.NORMAL);
+ new ScaleConstraint(src, scale, offset, dst, Strength.REQUIRED);
+ }
+
+ change(src, 17);
+ if (dst.value != 1170) alert("Projection 1 failed");
+ change(dst, 1050);
+ if (src.value != 5) alert("Projection 2 failed");
+ change(scale, 5);
+ for (var i = 0; i < n - 1; i++) {
+ if (dests.at(i).value != i * 5 + 1000)
+ alert("Projection 3 failed");
+ }
+ change(offset, 2000);
+ for (var i = 0; i < n - 1; i++) {
+ if (dests.at(i).value != i * 5 + 2000)
+ alert("Projection 4 failed");
+ }
+}
+
+function change(v, newValue) {
+ var edit = new EditConstraint(v, Strength.PREFERRED);
+ var edits = new OrderedCollection();
+ edits.add(edit);
+ var plan = planner.extractPlanFromConstraints(edits);
+ for (var i = 0; i < 10; i++) {
+ v.value = newValue;
+ plan.execute();
+ }
+ edit.destroyConstraint();
+}
+
+// Global variable holding the current planner.
+var planner = null;
+
+window.onload = function(){ startTest("v8-deltablue", 'b95228dc');
+
+test("Constraint Solving", function deltaBlue() {
+ chainTest(100);
+ projectionTest(100);
+});
+
+endTest(); };
+</script>
+</head>
+<body></body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/v8-earley-boyer.html b/testing/talos/talos/tests/dromaeo/tests/v8-earley-boyer.html
new file mode 100644
index 0000000000..6324417fee
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/v8-earley-boyer.html
@@ -0,0 +1,4693 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script>
+// This file is automatically generated by scheme2js, except for the
+// benchmark harness code at the beginning and end of the file.
+
+/************* GENERATED FILE - DO NOT EDIT *************/
+/************* GENERATED FILE - DO NOT EDIT *************/
+/************* GENERATED FILE - DO NOT EDIT *************/
+/************* GENERATED FILE - DO NOT EDIT *************/
+/************* GENERATED FILE - DO NOT EDIT *************/
+/************* GENERATED FILE - DO NOT EDIT *************/
+/************* GENERATED FILE - DO NOT EDIT *************/
+/************* GENERATED FILE - DO NOT EDIT *************/
+/*
+ * To use write/prints/... the default-output port has to be set first.
+ * Simply setting SC_DEFAULT_OUT and SC_ERROR_OUT to the desired values
+ * should do the trick.
+ * In the following example the std-out and error-port are redirected to
+ * a DIV.
+function initRuntime() {
+ function escapeHTML(s) {
+ var tmp = s;
+ tmp = tmp.replace(/&/g, "&amp;");
+ tmp = tmp.replace(/</g, "&lt;");
+ tmp = tmp.replace(/>/g, "&gt;");
+ tmp = tmp.replace(/ /g, "&nbsp;");
+ tmp = tmp.replace(/\n/g, "<br />");
+ tmp = tmp.replace(/\t/g, "&nbsp;&nbsp;&nbsp;&nbsp");
+ return tmp;
+
+ }
+
+ document.write("<div id='stdout'></div>");
+ SC_DEFAULT_OUT = new sc_GenericOutputPort(
+ function(s) {
+ var stdout = document.getElementById('stdout');
+ stdout.innerHTML = stdout.innerHTML + escapeHTML(s);
+ });
+ SC_ERROR_OUT = SC_DEFAULT_OUT;
+}
+*/
+
+
+function sc_print_debug() {
+ sc_print.apply(null, arguments);
+}
+/*** META ((export *js*)) */
+var sc_JS_GLOBALS = this;
+
+var __sc_LINE=-1;
+var __sc_FILE="";
+
+/*** META ((export #t)) */
+function sc_alert() {
+ var len = arguments.length;
+ var s = "";
+ var i;
+
+ for( i = 0; i < len; i++ ) {
+ s += sc_toDisplayString(arguments[ i ]);
+ }
+
+ return alert( s );
+}
+
+/*** META ((export #t)) */
+function sc_typeof( x ) {
+ return typeof x;
+}
+
+/*** META ((export #t)) */
+function sc_error() {
+ var a = [sc_jsstring2symbol("*error*")];
+ for (var i = 0; i < arguments.length; i++) {
+ a[i+1] = arguments[i];
+ }
+ throw a;
+}
+
+/*** META ((export #t)
+ (peephole (prefix "throw ")))
+*/
+function sc_raise(obj) {
+ throw obj;
+}
+
+/*** META ((export with-handler-lambda)) */
+function sc_withHandlerLambda(handler, body) {
+ try {
+ return body();
+ } catch(e) {
+ if (!e._internalException)
+ return handler(e);
+ else
+ throw e;
+ }
+}
+
+var sc_properties = new Object();
+
+/*** META ((export #t)) */
+function sc_putpropBang(sym, key, val) {
+ var ht = sc_properties[sym];
+ if (!ht) {
+ ht = new Object();
+ sc_properties[sym] = ht;
+ }
+ ht[key] = val;
+}
+
+/*** META ((export #t)) */
+function sc_getprop(sym, key) {
+ var ht = sc_properties[sym];
+ if (ht) {
+ if (key in ht)
+ return ht[key];
+ else
+ return false;
+ } else
+ return false;
+}
+
+/*** META ((export #t)) */
+function sc_rempropBang(sym, key) {
+ var ht = sc_properties[sym];
+ if (ht)
+ delete ht[key];
+}
+
+/*** META ((export #t)) */
+function sc_any2String(o) {
+ return jsstring2string(sc_toDisplayString(o));
+}
+
+/*** META ((export #t)
+ (peephole (infix 2 2 "==="))
+ (type bool))
+*/
+function sc_isEqv(o1, o2) {
+ return (o1 === o2);
+}
+
+/*** META ((export #t)
+ (peephole (infix 2 2 "==="))
+ (type bool))
+*/
+function sc_isEq(o1, o2) {
+ return (o1 === o2);
+}
+
+/*** META ((export #t)
+ (type bool))
+*/
+function sc_isNumber(n) {
+ return (typeof n === "number");
+}
+
+/*** META ((export #t)
+ (type bool))
+*/
+function sc_isComplex(n) {
+ return sc_isNumber(n);
+}
+
+/*** META ((export #t)
+ (type bool))
+*/
+function sc_isReal(n) {
+ return sc_isNumber(n);
+}
+
+/*** META ((export #t)
+ (type bool))
+*/
+function sc_isRational(n) {
+ return sc_isReal(n);
+}
+
+/*** META ((export #t)
+ (type bool))
+*/
+function sc_isInteger(n) {
+ return (parseInt(n) === n);
+}
+
+/*** META ((export #t)
+ (type bool)
+ (peephole (postfix ", false")))
+*/
+// we don't have exact numbers...
+function sc_isExact(n) {
+ return false;
+}
+
+/*** META ((export #t)
+ (peephole (postfix ", true"))
+ (type bool))
+*/
+function sc_isInexact(n) {
+ return true;
+}
+
+/*** META ((export = =fx =fl)
+ (type bool)
+ (peephole (infix 2 2 "===")))
+*/
+function sc_equal(x) {
+ for (var i = 1; i < arguments.length; i++)
+ if (x !== arguments[i])
+ return false;
+ return true;
+}
+
+/*** META ((export < <fx <fl)
+ (type bool)
+ (peephole (infix 2 2 "<")))
+*/
+function sc_less(x) {
+ for (var i = 1; i < arguments.length; i++) {
+ if (x >= arguments[i])
+ return false;
+ x = arguments[i];
+ }
+ return true;
+}
+
+/*** META ((export > >fx >fl)
+ (type bool)
+ (peephole (infix 2 2 ">")))
+*/
+function sc_greater(x, y) {
+ for (var i = 1; i < arguments.length; i++) {
+ if (x <= arguments[i])
+ return false;
+ x = arguments[i];
+ }
+ return true;
+}
+
+/*** META ((export <= <=fx <=fl)
+ (type bool)
+ (peephole (infix 2 2 "<=")))
+*/
+function sc_lessEqual(x, y) {
+ for (var i = 1; i < arguments.length; i++) {
+ if (x > arguments[i])
+ return false;
+ x = arguments[i];
+ }
+ return true;
+}
+
+/*** META ((export >= >=fl >=fx)
+ (type bool)
+ (peephole (infix 2 2 ">=")))
+*/
+function sc_greaterEqual(x, y) {
+ for (var i = 1; i < arguments.length; i++) {
+ if (x < arguments[i])
+ return false;
+ x = arguments[i];
+ }
+ return true;
+}
+
+/*** META ((export #t)
+ (type bool)
+ (peephole (postfix "=== 0")))
+*/
+function sc_isZero(x) {
+ return (x === 0);
+}
+
+/*** META ((export #t)
+ (type bool)
+ (peephole (postfix "> 0")))
+*/
+function sc_isPositive(x) {
+ return (x > 0);
+}
+
+/*** META ((export #t)
+ (type bool)
+ (peephole (postfix "< 0")))
+*/
+function sc_isNegative(x) {
+ return (x < 0);
+}
+
+/*** META ((export #t)
+ (type bool)
+ (peephole (postfix "%2===1")))
+*/
+function sc_isOdd(x) {
+ return (x % 2 === 1);
+}
+
+/*** META ((export #t)
+ (type bool)
+ (peephole (postfix "%2===0")))
+*/
+function sc_isEven(x) {
+ return (x % 2 === 0);
+}
+
+/*** META ((export #t)) */
+var sc_max = Math.max;
+/*** META ((export #t)) */
+var sc_min = Math.min;
+
+/*** META ((export + +fx +fl)
+ (peephole (infix 0 #f "+" "0")))
+*/
+function sc_plus() {
+ var sum = 0;
+ for (var i = 0; i < arguments.length; i++)
+ sum += arguments[i];
+ return sum;
+}
+
+/*** META ((export * *fx *fl)
+ (peephole (infix 0 #f "*" "1")))
+*/
+function sc_multi() {
+ var product = 1;
+ for (var i = 0; i < arguments.length; i++)
+ product *= arguments[i];
+ return product;
+}
+
+/*** META ((export - -fx -fl)
+ (peephole (minus)))
+*/
+function sc_minus(x) {
+ if (arguments.length === 1)
+ return -x;
+ else {
+ var res = x;
+ for (var i = 1; i < arguments.length; i++)
+ res -= arguments[i];
+ return res;
+ }
+}
+
+/*** META ((export / /fl)
+ (peephole (div)))
+*/
+function sc_div(x) {
+ if (arguments.length === 1)
+ return 1/x;
+ else {
+ var res = x;
+ for (var i = 1; i < arguments.length; i++)
+ res /= arguments[i];
+ return res;
+ }
+}
+
+/*** META ((export #t)) */
+var sc_abs = Math.abs;
+
+/*** META ((export quotient /fx)
+ (peephole (hole 2 "parseInt(" x "/" y ")")))
+*/
+function sc_quotient(x, y) {
+ return parseInt(x / y);
+}
+
+/*** META ((export #t)
+ (peephole (infix 2 2 "%")))
+*/
+function sc_remainder(x, y) {
+ return x % y;
+}
+
+/*** META ((export #t)
+ (peephole (modulo)))
+*/
+function sc_modulo(x, y) {
+ var remainder = x % y;
+ // if they don't have the same sign
+ if ((remainder * y) < 0)
+ return remainder + y;
+ else
+ return remainder;
+}
+
+function sc_euclid_gcd(a, b) {
+ var temp;
+ if (a === 0) return b;
+ if (b === 0) return a;
+ if (a < 0) {a = -a;};
+ if (b < 0) {b = -b;};
+ if (b > a) {temp = a; a = b; b = temp;};
+ while (true) {
+ a %= b;
+ if(a === 0) {return b;};
+ b %= a;
+ if(b === 0) {return a;};
+ };
+ return b;
+}
+
+/*** META ((export #t)) */
+function sc_gcd() {
+ var gcd = 0;
+ for (var i = 0; i < arguments.length; i++)
+ gcd = sc_euclid_gcd(gcd, arguments[i]);
+ return gcd;
+}
+
+/*** META ((export #t)) */
+function sc_lcm() {
+ var lcm = 1;
+ for (var i = 0; i < arguments.length; i++) {
+ var f = Math.round(arguments[i] / sc_euclid_gcd(arguments[i], lcm));
+ lcm *= Math.abs(f);
+ }
+ return lcm;
+}
+
+// LIMITATION: numerator and denominator don't make sense in floating point world.
+//var SC_MAX_DECIMALS = 1000000
+//
+// function sc_numerator(x) {
+// var rounded = Math.round(x * SC_MAX_DECIMALS);
+// return Math.round(rounded / sc_euclid_gcd(rounded, SC_MAX_DECIMALS));
+// }
+
+// function sc_denominator(x) {
+// var rounded = Math.round(x * SC_MAX_DECIMALS);
+// return Math.round(SC_MAX_DECIMALS / sc_euclid_gcd(rounded, SC_MAX_DECIMALS));
+// }
+
+/*** META ((export #t)) */
+var sc_floor = Math.floor;
+/*** META ((export #t)) */
+var sc_ceiling = Math.ceil;
+/*** META ((export #t)) */
+var sc_truncate = parseInt;
+/*** META ((export #t)) */
+var sc_round = Math.round;
+
+// LIMITATION: sc_rationalize doesn't make sense in a floating point world.
+
+/*** META ((export #t)) */
+var sc_exp = Math.exp;
+/*** META ((export #t)) */
+var sc_log = Math.log;
+/*** META ((export #t)) */
+var sc_sin = Math.sin;
+/*** META ((export #t)) */
+var sc_cos = Math.cos;
+/*** META ((export #t)) */
+var sc_tan = Math.tan;
+/*** META ((export #t)) */
+var sc_asin = Math.asin;
+/*** META ((export #t)) */
+var sc_acos = Math.acos;
+/*** META ((export #t)) */
+var sc_atan = Math.atan;
+
+/*** META ((export #t)) */
+var sc_sqrt = Math.sqrt;
+/*** META ((export #t)) */
+var sc_expt = Math.pow;
+
+// LIMITATION: we don't have complex numbers.
+// LIMITATION: the following functions are hence not implemented.
+// LIMITATION: make-rectangular, make-polar, real-part, imag-part, magnitude, angle
+// LIMITATION: 2 argument atan
+
+/*** META ((export #t)
+ (peephole (id)))
+*/
+function sc_exact2inexact(x) {
+ return x;
+}
+
+/*** META ((export #t)
+ (peephole (id)))
+*/
+function sc_inexact2exact(x) {
+ return x;
+}
+
+function sc_number2jsstring(x, radix) {
+ if (radix)
+ return x.toString(radix);
+ else
+ return x.toString();
+}
+
+function sc_jsstring2number(s, radix) {
+ if (s === "") return false;
+
+ if (radix) {
+ var t = parseInt(s, radix);
+ if (!t && t !== 0) return false;
+ // verify that each char is in range. (parseInt ignores leading
+ // white and trailing chars)
+ var allowedChars = "01234567890abcdefghijklmnopqrstuvwxyz".substring(0, radix+1);
+ if ((new RegExp("^["+allowedChars+"]*$", "i")).test(s))
+ return t;
+ else return false;
+ } else {
+ var t = +s; // does not ignore trailing chars.
+ if (!t && t !== 0) return false;
+ // simply verify that first char is not whitespace.
+ var c = s.charAt(0);
+ // if +c is 0, but the char is not "0", then we have a whitespace.
+ if (+c === 0 && c !== "0") return false;
+ return t;
+ }
+}
+
+/*** META ((export #t)
+ (type bool)
+ (peephole (not)))
+*/
+function sc_not(b) {
+ return b === false;
+}
+
+/*** META ((export #t)
+ (type bool))
+*/
+function sc_isBoolean(b) {
+ return (b === true) || (b === false);
+}
+
+function sc_Pair(car, cdr) {
+ this.car = car;
+ this.cdr = cdr;
+}
+
+sc_Pair.prototype.toString = function() {
+ return sc_toDisplayString(this);
+};
+sc_Pair.prototype.sc_toWriteOrDisplayString = function(writeOrDisplay) {
+ var current = this;
+
+ var res = "(";
+
+ while(true) {
+ res += writeOrDisplay(current.car);
+ if (sc_isPair(current.cdr)) {
+ res += " ";
+ current = current.cdr;
+ } else if (current.cdr !== null) {
+ res += " . " + writeOrDisplay(current.cdr);
+ break;
+ } else // current.cdr == null
+ break;
+ }
+
+ res += ")";
+
+ return res;
+};
+sc_Pair.prototype.sc_toDisplayString = function() {
+ return this.sc_toWriteOrDisplayString(sc_toDisplayString);
+};
+sc_Pair.prototype.sc_toWriteString = function() {
+ return this.sc_toWriteOrDisplayString(sc_toWriteString);
+};
+// sc_Pair.prototype.sc_toWriteCircleString in IO.js
+
+/*** META ((export #t)
+ (type bool)
+ (peephole (postfix " instanceof sc_Pair")))
+*/
+function sc_isPair(p) {
+ return (p instanceof sc_Pair);
+}
+
+function sc_isPairEqual(p1, p2, comp) {
+ return (comp(p1.car, p2.car) && comp(p1.cdr, p2.cdr));
+}
+
+/*** META ((export #t)
+ (peephole (hole 2 "new sc_Pair(" car ", " cdr ")")))
+*/
+function sc_cons(car, cdr) {
+ return new sc_Pair(car, cdr);
+}
+
+/*** META ((export cons*)) */
+function sc_consStar() {
+ var res = arguments[arguments.length - 1];
+ for (var i = arguments.length-2; i >= 0; i--)
+ res = new sc_Pair(arguments[i], res);
+ return res;
+}
+
+/*** META ((export #t)
+ (peephole (postfix ".car")))
+*/
+function sc_car(p) {
+ return p.car;
+}
+
+/*** META ((export #t)
+ (peephole (postfix ".cdr")))
+*/
+function sc_cdr(p) {
+ return p.cdr;
+}
+
+/*** META ((export #t)
+ (peephole (hole 2 p ".car = " val)))
+*/
+function sc_setCarBang(p, val) {
+ p.car = val;
+}
+
+/*** META ((export #t)
+ (peephole (hole 2 p ".cdr = " val)))
+*/
+function sc_setCdrBang(p, val) {
+ p.cdr = val;
+}
+
+/*** META ((export #t)
+ (peephole (postfix ".car.car")))
+*/
+function sc_caar(p) { return p.car.car; }
+/*** META ((export #t)
+ (peephole (postfix ".cdr.car")))
+*/
+function sc_cadr(p) { return p.cdr.car; }
+/*** META ((export #t)
+ (peephole (postfix ".car.cdr")))
+*/
+function sc_cdar(p) { return p.car.cdr; }
+/*** META ((export #t)
+ (peephole (postfix ".cdr.cdr")))
+*/
+function sc_cddr(p) { return p.cdr.cdr; }
+/*** META ((export #t)
+ (peephole (postfix ".car.car.car")))
+*/
+function sc_caaar(p) { return p.car.car.car; }
+/*** META ((export #t)
+ (peephole (postfix ".car.cdr.car")))
+*/
+function sc_cadar(p) { return p.car.cdr.car; }
+/*** META ((export #t)
+ (peephole (postfix ".cdr.car.car")))
+*/
+function sc_caadr(p) { return p.cdr.car.car; }
+/*** META ((export #t)
+ (peephole (postfix ".cdr.cdr.car")))
+*/
+function sc_caddr(p) { return p.cdr.cdr.car; }
+/*** META ((export #t)
+ (peephole (postfix ".car.car.cdr")))
+*/
+function sc_cdaar(p) { return p.car.car.cdr; }
+/*** META ((export #t)
+ (peephole (postfix ".cdr.car.cdr")))
+*/
+function sc_cdadr(p) { return p.cdr.car.cdr; }
+/*** META ((export #t)
+ (peephole (postfix ".car.cdr.cdr")))
+*/
+function sc_cddar(p) { return p.car.cdr.cdr; }
+/*** META ((export #t)
+ (peephole (postfix ".cdr.cdr.cdr")))
+*/
+function sc_cdddr(p) { return p.cdr.cdr.cdr; }
+/*** META ((export #t)
+ (peephole (postfix ".car.car.car.car")))
+*/
+function sc_caaaar(p) { return p.car.car.car.car; }
+/*** META ((export #t)
+ (peephole (postfix ".car.cdr.car.car")))
+*/
+function sc_caadar(p) { return p.car.cdr.car.car; }
+/*** META ((export #t)
+ (peephole (postfix ".cdr.car.car.car")))
+*/
+function sc_caaadr(p) { return p.cdr.car.car.car; }
+/*** META ((export #t)
+ (peephole (postfix ".cdr.cdr.car.car")))
+*/
+function sc_caaddr(p) { return p.cdr.cdr.car.car; }
+/*** META ((export #t)
+ (peephole (postfix ".car.car.car.cdr")))
+*/
+function sc_cdaaar(p) { return p.car.car.car.cdr; }
+/*** META ((export #t)
+ (peephole (postfix ".car.cdr.car.cdr")))
+*/
+function sc_cdadar(p) { return p.car.cdr.car.cdr; }
+/*** META ((export #t)
+ (peephole (postfix ".cdr.car.car.cdr")))
+*/
+function sc_cdaadr(p) { return p.cdr.car.car.cdr; }
+/*** META ((export #t)
+ (peephole (postfix ".cdr.cdr.car.cdr")))
+*/
+function sc_cdaddr(p) { return p.cdr.cdr.car.cdr; }
+/*** META ((export #t)
+ (peephole (postfix ".car.car.cdr.car")))
+*/
+function sc_cadaar(p) { return p.car.car.cdr.car; }
+/*** META ((export #t)
+ (peephole (postfix ".car.cdr.cdr.car")))
+*/
+function sc_caddar(p) { return p.car.cdr.cdr.car; }
+/*** META ((export #t)
+ (peephole (postfix ".cdr.car.cdr.car")))
+*/
+function sc_cadadr(p) { return p.cdr.car.cdr.car; }
+/*** META ((export #t)
+ (peephole (postfix ".cdr.cdr.cdr.car")))
+*/
+function sc_cadddr(p) { return p.cdr.cdr.cdr.car; }
+/*** META ((export #t)
+ (peephole (postfix ".car.car.cdr.cdr")))
+*/
+function sc_cddaar(p) { return p.car.car.cdr.cdr; }
+/*** META ((export #t)
+ (peephole (postfix ".car.cdr.cdr.cdr")))
+*/
+function sc_cdddar(p) { return p.car.cdr.cdr.cdr; }
+/*** META ((export #t)
+ (peephole (postfix ".cdr.car.cdr.cdr")))
+*/
+function sc_cddadr(p) { return p.cdr.car.cdr.cdr; }
+/*** META ((export #t)
+ (peephole (postfix ".cdr.cdr.cdr.cdr")))
+*/
+function sc_cddddr(p) { return p.cdr.cdr.cdr.cdr; }
+
+/*** META ((export #t)) */
+function sc_lastPair(l) {
+ if (!sc_isPair(l)) sc_error("sc_lastPair: pair expected");
+ var res = l;
+ var cdr = l.cdr;
+ while (sc_isPair(cdr)) {
+ res = cdr;
+ cdr = res.cdr;
+ }
+ return res;
+}
+
+/*** META ((export #t)
+ (type bool)
+ (peephole (postfix " === null")))
+*/
+function sc_isNull(o) {
+ return (o === null);
+}
+
+/*** META ((export #t)
+ (type bool))
+*/
+function sc_isList(o) {
+ var rabbit;
+ var turtle;
+
+ var rabbit = o;
+ var turtle = o;
+ while (true) {
+ if (rabbit === null ||
+ (rabbit instanceof sc_Pair && rabbit.cdr === null))
+ return true; // end of list
+ else if ((rabbit instanceof sc_Pair) &&
+ (rabbit.cdr instanceof sc_Pair)) {
+ rabbit = rabbit.cdr.cdr;
+ turtle = turtle.cdr;
+ if (rabbit === turtle) return false; // cycle
+ } else
+ return false; // not pair
+ }
+}
+
+/*** META ((export #t)) */
+function sc_list() {
+ var res = null;
+ var a = arguments;
+ for (var i = a.length-1; i >= 0; i--)
+ res = new sc_Pair(a[i], res);
+ return res;
+}
+
+/*** META ((export #t)) */
+function sc_iota(num, init) {
+ var res = null;
+ if (!init) init = 0;
+ for (var i = num - 1; i >= 0; i--)
+ res = new sc_Pair(i + init, res);
+ return res;
+}
+
+/*** META ((export #t)) */
+function sc_makeList(nbEls, fill) {
+ var res = null;
+ for (var i = 0; i < nbEls; i++)
+ res = new sc_Pair(fill, res);
+ return res;
+}
+
+/*** META ((export #t)) */
+function sc_length(l) {
+ var res = 0;
+ while (l !== null) {
+ res++;
+ l = l.cdr;
+ }
+ return res;
+}
+
+/*** META ((export #t)) */
+function sc_remq(o, l) {
+ var dummy = { cdr : null };
+ var tail = dummy;
+ while (l !== null) {
+ if (l.car !== o) {
+ tail.cdr = sc_cons(l.car, null);
+ tail = tail.cdr;
+ }
+ l = l.cdr;
+ }
+ return dummy.cdr;
+}
+
+/*** META ((export #t)) */
+function sc_remqBang(o, l) {
+ var dummy = { cdr : null };
+ var tail = dummy;
+ var needsAssig = true;
+ while (l !== null) {
+ if (l.car === o) {
+ needsAssig = true;
+ } else {
+ if (needsAssig) {
+ tail.cdr = l;
+ needsAssig = false;
+ }
+ tail = l;
+ }
+ l = l.cdr;
+ }
+ tail.cdr = null;
+ return dummy.cdr;
+}
+
+/*** META ((export #t)) */
+function sc_delete(o, l) {
+ var dummy = { cdr : null };
+ var tail = dummy;
+ while (l !== null) {
+ if (!sc_isEqual(l.car, o)) {
+ tail.cdr = sc_cons(l.car, null);
+ tail = tail.cdr;
+ }
+ l = l.cdr;
+ }
+ return dummy.cdr;
+}
+
+/*** META ((export #t)) */
+function sc_deleteBang(o, l) {
+ var dummy = { cdr : null };
+ var tail = dummy;
+ var needsAssig = true;
+ while (l !== null) {
+ if (sc_isEqual(l.car, o)) {
+ needsAssig = true;
+ } else {
+ if (needsAssig) {
+ tail.cdr = l;
+ needsAssig = false;
+ }
+ tail = l;
+ }
+ l = l.cdr;
+ }
+ tail.cdr = null;
+ return dummy.cdr;
+}
+
+function sc_reverseAppendBang(l1, l2) {
+ var res = l2;
+ while (l1 !== null) {
+ var tmp = res;
+ res = l1;
+ l1 = l1.cdr;
+ res.cdr = tmp;
+ }
+ return res;
+}
+
+function sc_dualAppend(l1, l2) {
+ if (l1 === null) return l2;
+ if (l2 === null) return l1;
+ var rev = sc_reverse(l1);
+ return sc_reverseAppendBang(rev, l2);
+}
+
+/*** META ((export #t)) */
+function sc_append() {
+ if (arguments.length === 0)
+ return null;
+ var res = arguments[arguments.length - 1];
+ for (var i = arguments.length - 2; i >= 0; i--)
+ res = sc_dualAppend(arguments[i], res);
+ return res;
+}
+
+function sc_dualAppendBang(l1, l2) {
+ if (l1 === null) return l2;
+ if (l2 === null) return l1;
+ var tmp = l1;
+ while (tmp.cdr !== null) tmp=tmp.cdr;
+ tmp.cdr = l2;
+ return l1;
+}
+
+/*** META ((export #t)) */
+function sc_appendBang() {
+ var res = null;
+ for (var i = 0; i < arguments.length; i++)
+ res = sc_dualAppendBang(res, arguments[i]);
+ return res;
+}
+
+/*** META ((export #t)) */
+function sc_reverse(l1) {
+ var res = null;
+ while (l1 !== null) {
+ res = sc_cons(l1.car, res);
+ l1 = l1.cdr;
+ }
+ return res;
+}
+
+/*** META ((export #t)) */
+function sc_reverseBang(l) {
+ return sc_reverseAppendBang(l, null);
+}
+
+/*** META ((export #t)) */
+function sc_listTail(l, k) {
+ var res = l;
+ for (var i = 0; i < k; i++) {
+ res = res.cdr;
+ }
+ return res;
+}
+
+/*** META ((export #t)) */
+function sc_listRef(l, k) {
+ return sc_listTail(l, k).car;
+}
+
+/* // unoptimized generic versions
+function sc_memX(o, l, comp) {
+ while (l != null) {
+ if (comp(l.car, o))
+ return l;
+ l = l.cdr;
+ }
+ return false;
+}
+function sc_memq(o, l) { return sc_memX(o, l, sc_isEq); }
+function sc_memv(o, l) { return sc_memX(o, l, sc_isEqv); }
+function sc_member(o, l) { return sc_memX(o, l, sc_isEqual); }
+*/
+
+/* optimized versions */
+/*** META ((export #t)) */
+function sc_memq(o, l) {
+ while (l !== null) {
+ if (l.car === o)
+ return l;
+ l = l.cdr;
+ }
+ return false;
+}
+/*** META ((export #t)) */
+function sc_memv(o, l) {
+ while (l !== null) {
+ if (l.car === o)
+ return l;
+ l = l.cdr;
+ }
+ return false;
+}
+/*** META ((export #t)) */
+function sc_member(o, l) {
+ while (l !== null) {
+ if (sc_isEqual(l.car,o))
+ return l;
+ l = l.cdr;
+ }
+ return false;
+}
+
+/* // generic unoptimized versions
+function sc_assX(o, al, comp) {
+ while (al != null) {
+ if (comp(al.car.car, o))
+ return al.car;
+ al = al.cdr;
+ }
+ return false;
+}
+function sc_assq(o, al) { return sc_assX(o, al, sc_isEq); }
+function sc_assv(o, al) { return sc_assX(o, al, sc_isEqv); }
+function sc_assoc(o, al) { return sc_assX(o, al, sc_isEqual); }
+*/
+// optimized versions
+/*** META ((export #t)) */
+function sc_assq(o, al) {
+ while (al !== null) {
+ if (al.car.car === o)
+ return al.car;
+ al = al.cdr;
+ }
+ return false;
+}
+/*** META ((export #t)) */
+function sc_assv(o, al) {
+ while (al !== null) {
+ if (al.car.car === o)
+ return al.car;
+ al = al.cdr;
+ }
+ return false;
+}
+/*** META ((export #t)) */
+function sc_assoc(o, al) {
+ while (al !== null) {
+ if (sc_isEqual(al.car.car, o))
+ return al.car;
+ al = al.cdr;
+ }
+ return false;
+}
+
+/* can be used for mutable strings and characters */
+function sc_isCharStringEqual(cs1, cs2) { return cs1.val === cs2.val; }
+function sc_isCharStringLess(cs1, cs2) { return cs1.val < cs2.val; }
+function sc_isCharStringGreater(cs1, cs2) { return cs1.val > cs2.val; }
+function sc_isCharStringLessEqual(cs1, cs2) { return cs1.val <= cs2.val; }
+function sc_isCharStringGreaterEqual(cs1, cs2) { return cs1.val >= cs2.val; }
+function sc_isCharStringCIEqual(cs1, cs2)
+ { return cs1.val.toLowerCase() === cs2.val.toLowerCase(); }
+function sc_isCharStringCILess(cs1, cs2)
+ { return cs1.val.toLowerCase() < cs2.val.toLowerCase(); }
+function sc_isCharStringCIGreater(cs1, cs2)
+ { return cs1.val.toLowerCase() > cs2.val.toLowerCase(); }
+function sc_isCharStringCILessEqual(cs1, cs2)
+ { return cs1.val.toLowerCase() <= cs2.val.toLowerCase(); }
+function sc_isCharStringCIGreaterEqual(cs1, cs2)
+ { return cs1.val.toLowerCase() >= cs2.val.toLowerCase(); }
+
+
+
+
+function sc_Char(c) {
+ var cached = sc_Char.lazy[c];
+ if (cached)
+ return cached;
+ this.val = c;
+ sc_Char.lazy[c] = this;
+ // add return, so FF does not complain.
+ return undefined;
+}
+sc_Char.lazy = new Object();
+// thanks to Eric
+sc_Char.char2readable = {
+ "\000": "#\\null",
+ "\007": "#\\bell",
+ "\010": "#\\backspace",
+ "\011": "#\\tab",
+ "\012": "#\\newline",
+ "\014": "#\\page",
+ "\015": "#\\return",
+ "\033": "#\\escape",
+ "\040": "#\\space",
+ "\177": "#\\delete",
+
+ /* poeticless names */
+ "\001": "#\\soh",
+ "\002": "#\\stx",
+ "\003": "#\\etx",
+ "\004": "#\\eot",
+ "\005": "#\\enq",
+ "\006": "#\\ack",
+
+ "\013": "#\\vt",
+ "\016": "#\\so",
+ "\017": "#\\si",
+
+ "\020": "#\\dle",
+ "\021": "#\\dc1",
+ "\022": "#\\dc2",
+ "\023": "#\\dc3",
+ "\024": "#\\dc4",
+ "\025": "#\\nak",
+ "\026": "#\\syn",
+ "\027": "#\\etb",
+
+ "\030": "#\\can",
+ "\031": "#\\em",
+ "\032": "#\\sub",
+ "\033": "#\\esc",
+ "\034": "#\\fs",
+ "\035": "#\\gs",
+ "\036": "#\\rs",
+ "\037": "#\\us"};
+
+sc_Char.readable2char = {
+ "null": "\000",
+ "bell": "\007",
+ "backspace": "\010",
+ "tab": "\011",
+ "newline": "\012",
+ "page": "\014",
+ "return": "\015",
+ "escape": "\033",
+ "space": "\040",
+ "delete": "\000",
+ "soh": "\001",
+ "stx": "\002",
+ "etx": "\003",
+ "eot": "\004",
+ "enq": "\005",
+ "ack": "\006",
+ "bel": "\007",
+ "bs": "\010",
+ "ht": "\011",
+ "nl": "\012",
+ "vt": "\013",
+ "np": "\014",
+ "cr": "\015",
+ "so": "\016",
+ "si": "\017",
+ "dle": "\020",
+ "dc1": "\021",
+ "dc2": "\022",
+ "dc3": "\023",
+ "dc4": "\024",
+ "nak": "\025",
+ "syn": "\026",
+ "etb": "\027",
+ "can": "\030",
+ "em": "\031",
+ "sub": "\032",
+ "esc": "\033",
+ "fs": "\034",
+ "gs": "\035",
+ "rs": "\036",
+ "us": "\037",
+ "sp": "\040",
+ "del": "\177"};
+
+sc_Char.prototype.toString = function() {
+ return this.val;
+};
+// sc_toDisplayString == toString
+sc_Char.prototype.sc_toWriteString = function() {
+ var entry = sc_Char.char2readable[this.val];
+ if (entry)
+ return entry;
+ else
+ return "#\\" + this.val;
+};
+
+/*** META ((export #t)
+ (type bool)
+ (peephole (postfix "instanceof sc_Char")))
+*/
+function sc_isChar(c) {
+ return (c instanceof sc_Char);
+}
+
+/*** META ((export char=?)
+ (type bool)
+ (peephole (hole 2 c1 ".val === " c2 ".val")))
+*/
+var sc_isCharEqual = sc_isCharStringEqual;
+/*** META ((export char<?)
+ (type bool)
+ (peephole (hole 2 c1 ".val < " c2 ".val")))
+*/
+var sc_isCharLess = sc_isCharStringLess;
+/*** META ((export char>?)
+ (type bool)
+ (peephole (hole 2 c1 ".val > " c2 ".val")))
+*/
+var sc_isCharGreater = sc_isCharStringGreater;
+/*** META ((export char<=?)
+ (type bool)
+ (peephole (hole 2 c1 ".val <= " c2 ".val")))
+*/
+var sc_isCharLessEqual = sc_isCharStringLessEqual;
+/*** META ((export char>=?)
+ (type bool)
+ (peephole (hole 2 c1 ".val >= " c2 ".val")))
+*/
+var sc_isCharGreaterEqual = sc_isCharStringGreaterEqual;
+/*** META ((export char-ci=?)
+ (type bool)
+ (peephole (hole 2 c1 ".val.toLowerCase() === " c2 ".val.toLowerCase()")))
+*/
+var sc_isCharCIEqual = sc_isCharStringCIEqual;
+/*** META ((export char-ci<?)
+ (type bool)
+ (peephole (hole 2 c1 ".val.toLowerCase() < " c2 ".val.toLowerCase()")))
+*/
+var sc_isCharCILess = sc_isCharStringCILess;
+/*** META ((export char-ci>?)
+ (type bool)
+ (peephole (hole 2 c1 ".val.toLowerCase() > " c2 ".val.toLowerCase()")))
+*/
+var sc_isCharCIGreater = sc_isCharStringCIGreater;
+/*** META ((export char-ci<=?)
+ (type bool)
+ (peephole (hole 2 c1 ".val.toLowerCase() <= " c2 ".val.toLowerCase()")))
+*/
+var sc_isCharCILessEqual = sc_isCharStringCILessEqual;
+/*** META ((export char-ci>=?)
+ (type bool)
+ (peephole (hole 2 c1 ".val.toLowerCase() >= " c2 ".val.toLowerCase()")))
+*/
+var sc_isCharCIGreaterEqual = sc_isCharStringCIGreaterEqual;
+
+var SC_NUMBER_CLASS = "0123456789";
+var SC_WHITESPACE_CLASS = ' \r\n\t\f';
+var SC_LOWER_CLASS = 'abcdefghijklmnopqrstuvwxyz';
+var SC_UPPER_CLASS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
+
+function sc_isCharOfClass(c, cl) { return (cl.indexOf(c) != -1); }
+/*** META ((export #t)
+ (type bool))
+*/
+function sc_isCharAlphabetic(c)
+ { return sc_isCharOfClass(c.val, SC_LOWER_CLASS) ||
+ sc_isCharOfClass(c.val, SC_UPPER_CLASS); }
+/*** META ((export #t)
+ (type bool)
+ (peephole (hole 1 "SC_NUMBER_CLASS.indexOf(" c ".val) != -1")))
+*/
+function sc_isCharNumeric(c)
+ { return sc_isCharOfClass(c.val, SC_NUMBER_CLASS); }
+/*** META ((export #t)
+ (type bool))
+*/
+function sc_isCharWhitespace(c) {
+ var tmp = c.val;
+ return tmp === " " || tmp === "\r" || tmp === "\n" || tmp === "\t" || tmp === "\f";
+}
+/*** META ((export #t)
+ (type bool)
+ (peephole (hole 1 "SC_UPPER_CLASS.indexOf(" c ".val) != -1")))
+*/
+function sc_isCharUpperCase(c)
+ { return sc_isCharOfClass(c.val, SC_UPPER_CLASS); }
+/*** META ((export #t)
+ (type bool)
+ (peephole (hole 1 "SC_LOWER_CLASS.indexOf(" c ".val) != -1")))
+*/
+function sc_isCharLowerCase(c)
+ { return sc_isCharOfClass(c.val, SC_LOWER_CLASS); }
+
+/*** META ((export #t)
+ (peephole (postfix ".val.charCodeAt(0)")))
+*/
+function sc_char2integer(c)
+ { return c.val.charCodeAt(0); }
+/*** META ((export #t)
+ (peephole (hole 1 "new sc_Char(String.fromCharCode(" n "))")))
+*/
+function sc_integer2char(n)
+ { return new sc_Char(String.fromCharCode(n)); }
+
+/*** META ((export #t)
+ (peephole (hole 1 "new sc_Char(" c ".val.toUpperCase())")))
+*/
+function sc_charUpcase(c)
+ { return new sc_Char(c.val.toUpperCase()); }
+/*** META ((export #t)
+ (peephole (hole 1 "new sc_Char(" c ".val.toLowerCase())")))
+*/
+function sc_charDowncase(c)
+ { return new sc_Char(c.val.toLowerCase()); }
+
+function sc_makeJSStringOfLength(k, c) {
+ var fill;
+ if (c === undefined)
+ fill = " ";
+ else
+ fill = c;
+ var res = "";
+ var len = 1;
+ // every round doubles the size of fill.
+ while (k >= len) {
+ if (k & len)
+ res = res.concat(fill);
+ fill = fill.concat(fill);
+ len *= 2;
+ }
+ return res;
+}
+
+function sc_makejsString(k, c) {
+ var fill;
+ if (c)
+ fill = c.val;
+ else
+ fill = " ";
+ return sc_makeJSStringOfLength(k, fill);
+}
+
+function sc_jsstring2list(s) {
+ var res = null;
+ for (var i = s.length - 1; i >= 0; i--)
+ res = sc_cons(new sc_Char(s.charAt(i)), res);
+ return res;
+}
+
+function sc_list2jsstring(l) {
+ var a = new Array();
+ while(l !== null) {
+ a.push(l.car.val);
+ l = l.cdr;
+ }
+ return "".concat.apply("", a);
+}
+
+var sc_Vector = Array;
+
+sc_Vector.prototype.sc_toWriteOrDisplayString = function(writeOrDisplay) {
+ if (this.length === 0) return "#()";
+
+ var res = "#(" + writeOrDisplay(this[0]);
+ for (var i = 1; i < this.length; i++)
+ res += " " + writeOrDisplay(this[i]);
+ res += ")";
+ return res;
+};
+sc_Vector.prototype.sc_toDisplayString = function() {
+ return this.sc_toWriteOrDisplayString(sc_toDisplayString);
+};
+sc_Vector.prototype.sc_toWriteString = function() {
+ return this.sc_toWriteOrDisplayString(sc_toWriteString);
+};
+
+/*** META ((export vector? array?)
+ (type bool)
+ (peephole (postfix " instanceof sc_Vector")))
+*/
+function sc_isVector(v) {
+ return (v instanceof sc_Vector);
+}
+
+// only applies to vectors
+function sc_isVectorEqual(v1, v2, comp) {
+ if (v1.length !== v2.length) return false;
+ for (var i = 0; i < v1.length; i++)
+ if (!comp(v1[i], v2[i])) return false;
+ return true;
+}
+
+/*** META ((export make-vector make-array)) */
+function sc_makeVector(size, fill) {
+ var a = new sc_Vector(size);
+ if (fill !== undefined)
+ sc_vectorFillBang(a, fill);
+ return a;
+}
+
+/*** META ((export vector array)
+ (peephole (vector)))
+*/
+function sc_vector() {
+ var a = new sc_Vector();
+ for (var i = 0; i < arguments.length; i++)
+ a.push(arguments[i]);
+ return a;
+}
+
+/*** META ((export vector-length array-length)
+ (peephole (postfix ".length")))
+*/
+function sc_vectorLength(v) {
+ return v.length;
+}
+
+/*** META ((export vector-ref array-ref)
+ (peephole (hole 2 v "[" pos "]")))
+*/
+function sc_vectorRef(v, pos) {
+ return v[pos];
+}
+
+/*** META ((export vector-set! array-set!)
+ (peephole (hole 3 v "[" pos "] = " val)))
+*/
+function sc_vectorSetBang(v, pos, val) {
+ v[pos] = val;
+}
+
+/*** META ((export vector->list array->list)) */
+function sc_vector2list(a) {
+ var res = null;
+ for (var i = a.length-1; i >= 0; i--)
+ res = sc_cons(a[i], res);
+ return res;
+}
+
+/*** META ((export list->vector list->array)) */
+function sc_list2vector(l) {
+ var a = new sc_Vector();
+ while(l !== null) {
+ a.push(l.car);
+ l = l.cdr;
+ }
+ return a;
+}
+
+/*** META ((export vector-fill! array-fill!)) */
+function sc_vectorFillBang(a, fill) {
+ for (var i = 0; i < a.length; i++)
+ a[i] = fill;
+}
+
+
+/*** META ((export #t)) */
+function sc_copyVector(a, len) {
+ if (len <= a.length)
+ return a.slice(0, len);
+ else {
+ var tmp = a.concat();
+ tmp.length = len;
+ return tmp;
+ }
+}
+
+/*** META ((export #t)
+ (peephole (hole 3 a ".slice(" start "," end ")")))
+*/
+function sc_vectorCopy(a, start, end) {
+ return a.slice(start, end);
+}
+
+/*** META ((export #t)) */
+function sc_vectorCopyBang(target, tstart, source, sstart, send) {
+ if (!sstart) sstart = 0;
+ if (!send) send = source.length;
+
+ // if target == source we don't want to overwrite not yet copied elements.
+ if (tstart <= sstart) {
+ for (var i = tstart, j = sstart; j < send; i++, j++) {
+ target[i] = source[j];
+ }
+ } else {
+ var diff = send - sstart;
+ for (var i = tstart + diff - 1, j = send - 1;
+ j >= sstart;
+ i--, j--) {
+ target[i] = source[j];
+ }
+ }
+ return target;
+}
+
+/*** META ((export #t)
+ (type bool)
+ (peephole (hole 1 "typeof " o " === 'function'")))
+*/
+function sc_isProcedure(o) {
+ return (typeof o === "function");
+}
+
+/*** META ((export #t)) */
+function sc_apply(proc) {
+ var args = new Array();
+ // first part of arguments are not in list-form.
+ for (var i = 1; i < arguments.length - 1; i++)
+ args.push(arguments[i]);
+ var l = arguments[arguments.length - 1];
+ while (l !== null) {
+ args.push(l.car);
+ l = l.cdr;
+ }
+ return proc.apply(null, args);
+}
+
+/*** META ((export #t)) */
+function sc_map(proc, l1) {
+ if (l1 === undefined)
+ return null;
+ // else
+ var nbApplyArgs = arguments.length - 1;
+ var applyArgs = new Array(nbApplyArgs);
+ var revres = null;
+ while (l1 !== null) {
+ for (var i = 0; i < nbApplyArgs; i++) {
+ applyArgs[i] = arguments[i + 1].car;
+ arguments[i + 1] = arguments[i + 1].cdr;
+ }
+ revres = sc_cons(proc.apply(null, applyArgs), revres);
+ }
+ return sc_reverseAppendBang(revres, null);
+}
+
+/*** META ((export #t)) */
+function sc_mapBang(proc, l1) {
+ if (l1 === undefined)
+ return null;
+ // else
+ var l1_orig = l1;
+ var nbApplyArgs = arguments.length - 1;
+ var applyArgs = new Array(nbApplyArgs);
+ while (l1 !== null) {
+ var tmp = l1;
+ for (var i = 0; i < nbApplyArgs; i++) {
+ applyArgs[i] = arguments[i + 1].car;
+ arguments[i + 1] = arguments[i + 1].cdr;
+ }
+ tmp.car = proc.apply(null, applyArgs);
+ }
+ return l1_orig;
+}
+
+/*** META ((export #t)) */
+function sc_forEach(proc, l1) {
+ if (l1 === undefined)
+ return undefined;
+ // else
+ var nbApplyArgs = arguments.length - 1;
+ var applyArgs = new Array(nbApplyArgs);
+ while (l1 !== null) {
+ for (var i = 0; i < nbApplyArgs; i++) {
+ applyArgs[i] = arguments[i + 1].car;
+ arguments[i + 1] = arguments[i + 1].cdr;
+ }
+ proc.apply(null, applyArgs);
+ }
+ // add return so FF does not complain.
+ return undefined;
+}
+
+/*** META ((export #t)) */
+function sc_filter(proc, l1) {
+ var dummy = { cdr : null };
+ var tail = dummy;
+ while (l1 !== null) {
+ if (proc(l1.car) !== false) {
+ tail.cdr = sc_cons(l1.car, null);
+ tail = tail.cdr;
+ }
+ l1 = l1.cdr;
+ }
+ return dummy.cdr;
+}
+
+/*** META ((export #t)) */
+function sc_filterBang(proc, l1) {
+ var head = sc_cons("dummy", l1);
+ var it = head;
+ var next = l1;
+ while (next !== null) {
+ if (proc(next.car) !== false) {
+ it.cdr = next
+ it = next;
+ }
+ next = next.cdr;
+ }
+ it.cdr = null;
+ return head.cdr;
+}
+
+function sc_filterMap1(proc, l1) {
+ var revres = null;
+ while (l1 !== null) {
+ var tmp = proc(l1.car)
+ if (tmp !== false) revres = sc_cons(tmp, revres);
+ l1 = l1.cdr;
+ }
+ return sc_reverseAppendBang(revres, null);
+}
+function sc_filterMap2(proc, l1, l2) {
+ var revres = null;
+ while (l1 !== null) {
+ var tmp = proc(l1.car, l2.car);
+ if(tmp !== false) revres = sc_cons(tmp, revres);
+ l1 = l1.cdr;
+ l2 = l2.cdr
+ }
+ return sc_reverseAppendBang(revres, null);
+}
+
+/*** META ((export #t)) */
+function sc_filterMap(proc, l1, l2, l3) {
+ if (l2 === undefined)
+ return sc_filterMap1(proc, l1);
+ else if (l3 === undefined)
+ return sc_filterMap2(proc, l1, l2);
+ // else
+ var nbApplyArgs = arguments.length - 1;
+ var applyArgs = new Array(nbApplyArgs);
+ var revres = null;
+ while (l1 !== null) {
+ for (var i = 0; i < nbApplyArgs; i++) {
+ applyArgs[i] = arguments[i + 1].car;
+ arguments[i + 1] = arguments[i + 1].cdr;
+ }
+ var tmp = proc.apply(null, applyArgs);
+ if(tmp !== false) revres = sc_cons(tmp, revres);
+ }
+ return sc_reverseAppendBang(revres, null);
+}
+
+/*** META ((export #t)) */
+function sc_any(proc, l) {
+ var revres = null;
+ while (l !== null) {
+ var tmp = proc(l.car);
+ if(tmp !== false) return tmp;
+ l = l.cdr;
+ }
+ return false;
+}
+
+/*** META ((export any?)
+ (peephole (hole 2 "sc_any(" proc "," l ") !== false")))
+*/
+function sc_anyPred(proc, l) {
+ return sc_any(proc, l)!== false;
+}
+
+/*** META ((export #t)) */
+function sc_every(proc, l) {
+ var revres = null;
+ var tmp = true;
+ while (l !== null) {
+ tmp = proc(l.car);
+ if (tmp === false) return false;
+ l = l.cdr;
+ }
+ return tmp;
+}
+
+/*** META ((export every?)
+ (peephole (hole 2 "sc_every(" proc "," l ") !== false")))
+*/
+function sc_everyPred(proc, l) {
+ var tmp = sc_every(proc, l);
+ if (tmp !== false) return true;
+ return false;
+}
+
+/*** META ((export #t)
+ (peephole (postfix "()")))
+*/
+function sc_force(o) {
+ return o();
+}
+
+/*** META ((export #t)) */
+function sc_makePromise(proc) {
+ var isResultReady = false;
+ var result = undefined;
+ return function() {
+ if (!isResultReady) {
+ var tmp = proc();
+ if (!isResultReady) {
+ isResultReady = true;
+ result = tmp;
+ }
+ }
+ return result;
+ };
+}
+
+function sc_Values(values) {
+ this.values = values;
+}
+
+/*** META ((export #t)
+ (peephole (values)))
+*/
+function sc_values() {
+ if (arguments.length === 1)
+ return arguments[0];
+ else
+ return new sc_Values(arguments);
+}
+
+/*** META ((export #t)) */
+function sc_callWithValues(producer, consumer) {
+ var produced = producer();
+ if (produced instanceof sc_Values)
+ return consumer.apply(null, produced.values);
+ else
+ return consumer(produced);
+}
+
+/*** META ((export #t)) */
+function sc_dynamicWind(before, thunk, after) {
+ before();
+ try {
+ var res = thunk();
+ return res;
+ } finally {
+ after();
+ }
+}
+
+
+// TODO: eval/scheme-report-environment/null-environment/interaction-environment
+
+// LIMITATION: 'load' doesn't exist without files.
+// LIMITATION: transcript-on/transcript-off doesn't exist without files.
+
+
+function sc_Struct(name) {
+ this.name = name;
+}
+sc_Struct.prototype.sc_toDisplayString = function() {
+ return "#<struct" + sc_hash(this) + ">";
+};
+sc_Struct.prototype.sc_toWriteString = sc_Struct.prototype.sc_toDisplayString;
+
+/*** META ((export #t)
+ (peephole (hole 1 "new sc_Struct(" name ")")))
+*/
+function sc_makeStruct(name) {
+ return new sc_Struct(name);
+}
+
+/*** META ((export #t)
+ (type bool)
+ (peephole (postfix " instanceof sc_Struct")))
+*/
+function sc_isStruct(o) {
+ return (o instanceof sc_Struct);
+}
+
+/*** META ((export #t)
+ (type bool)
+ (peephole (hole 2 "(" 1 " instanceof sc_Struct) && ( " 1 ".name === " 0 ")")))
+*/
+function sc_isStructNamed(name, s) {
+ return ((s instanceof sc_Struct) && (s.name === name));
+}
+
+/*** META ((export struct-field)
+ (peephole (hole 3 0 "[" 2 "]")))
+*/
+function sc_getStructField(s, name, field) {
+ return s[field];
+}
+
+/*** META ((export struct-field-set!)
+ (peephole (hole 4 0 "[" 2 "] = " 3)))
+*/
+function sc_setStructFieldBang(s, name, field, val) {
+ s[field] = val;
+}
+
+/*** META ((export #t)
+ (peephole (prefix "~")))
+*/
+function sc_bitNot(x) {
+ return ~x;
+}
+
+/*** META ((export #t)
+ (peephole (infix 2 2 "&")))
+*/
+function sc_bitAnd(x, y) {
+ return x & y;
+}
+
+/*** META ((export #t)
+ (peephole (infix 2 2 "|")))
+*/
+function sc_bitOr(x, y) {
+ return x | y;
+}
+
+/*** META ((export #t)
+ (peephole (infix 2 2 "^")))
+*/
+function sc_bitXor(x, y) {
+ return x ^ y;
+}
+
+/*** META ((export #t)
+ (peephole (infix 2 2 "<<")))
+*/
+function sc_bitLsh(x, y) {
+ return x << y;
+}
+
+/*** META ((export #t)
+ (peephole (infix 2 2 ">>")))
+*/
+function sc_bitRsh(x, y) {
+ return x >> y;
+}
+
+/*** META ((export #t)
+ (peephole (infix 2 2 ">>>")))
+*/
+function sc_bitUrsh(x, y) {
+ return x >>> y;
+}
+
+/*** META ((export js-field js-property)
+ (peephole (hole 2 o "[" field "]")))
+*/
+function sc_jsField(o, field) {
+ return o[field];
+}
+
+/*** META ((export js-field-set! js-property-set!)
+ (peephole (hole 3 o "[" field "] = " val)))
+*/
+function sc_setJsFieldBang(o, field, val) {
+ return o[field] = val;
+}
+
+/*** META ((export js-field-delete! js-property-delete!)
+ (peephole (hole 2 "delete" o "[" field "]")))
+*/
+function sc_deleteJsFieldBang(o, field) {
+ delete o[field];
+}
+
+/*** META ((export #t)
+ (peephole (jsCall)))
+*/
+function sc_jsCall(o, fun) {
+ var args = new Array();
+ for (var i = 2; i < arguments.length; i++)
+ args[i-2] = arguments[i];
+ return fun.apply(o, args);
+}
+
+/*** META ((export #t)
+ (peephole (jsMethodCall)))
+*/
+function sc_jsMethodCall(o, field) {
+ var args = new Array();
+ for (var i = 2; i < arguments.length; i++)
+ args[i-2] = arguments[i];
+ return o[field].apply(o, args);
+}
+
+/*** META ((export new js-new)
+ (peephole (jsNew)))
+*/
+function sc_jsNew(c) {
+ var evalStr = "new c(";
+ evalStr +=arguments.length > 1? "arguments[1]": "";
+ for (var i = 2; i < arguments.length; i++)
+ evalStr += ", arguments[" + i + "]";
+ evalStr +=")";
+ return eval(evalStr);
+}
+
+// ======================== RegExp ====================
+/*** META ((export #t)) */
+function sc_pregexp(re) {
+ return new RegExp(sc_string2jsstring(re));
+}
+
+/*** META ((export #t)) */
+function sc_pregexpMatch(re, s) {
+ var reg = (re instanceof RegExp) ? re : sc_pregexp(re);
+ var tmp = reg.exec(sc_string2jsstring(s));
+
+ if (tmp == null) return false;
+
+ var res = null;
+ for (var i = tmp.length-1; i >= 0; i--) {
+ if (tmp[i] !== null) {
+ res = sc_cons(sc_jsstring2string(tmp[i]), res);
+ } else {
+ res = sc_cons(false, res);
+ }
+ }
+ return res;
+}
+
+/*** META ((export #t)) */
+function sc_pregexpReplace(re, s1, s2) {
+ var reg;
+ var jss1 = sc_string2jsstring(s1);
+ var jss2 = sc_string2jsstring(s2);
+
+ if (re instanceof RegExp) {
+ if (re.global)
+ reg = re;
+ else
+ reg = new RegExp(re.source);
+ } else {
+ reg = new RegExp(sc_string2jsstring(re));
+ }
+
+ return jss1.replace(reg, jss2);
+}
+
+/*** META ((export pregexp-replace*)) */
+function sc_pregexpReplaceAll(re, s1, s2) {
+ var reg;
+ var jss1 = sc_string2jsstring(s1);
+ var jss2 = sc_string2jsstring(s2);
+
+ if (re instanceof RegExp) {
+ if (re.global)
+ reg = re;
+ else
+ reg = new RegExp(re.source, "g");
+ } else {
+ reg = new RegExp(sc_string2jsstring(re), "g");
+ }
+
+ return jss1.replace(reg, jss2);
+}
+
+/*** META ((export #t)) */
+function sc_pregexpSplit(re, s) {
+ var reg = ((re instanceof RegExp) ?
+ re :
+ new RegExp(sc_string2jsstring(re)));
+ var jss = sc_string2jsstring(s);
+ var tmp = jss.split(reg);
+
+ if (tmp == null) return false;
+
+ return sc_vector2list(tmp);
+}
+
+
+/* =========================================================================== */
+/* Other library stuff */
+/* =========================================================================== */
+
+/*** META ((export #t)
+ (peephole (hole 1 "Math.floor(Math.random()*" 'n ")")))
+*/
+function sc_random(n) {
+ return Math.floor(Math.random()*n);
+}
+
+/*** META ((export current-date)
+ (peephole (hole 0 "new Date()")))
+*/
+function sc_currentDate() {
+ return new Date();
+}
+
+function sc_Hashtable() {
+}
+sc_Hashtable.prototype.toString = function() {
+ return "#{%hashtable}";
+};
+// sc_toWriteString == sc_toDisplayString == toString
+
+function sc_HashtableElement(key, val) {
+ this.key = key;
+ this.val = val;
+}
+
+/*** META ((export #t)
+ (peephole (hole 0 "new sc_Hashtable()")))
+*/
+function sc_makeHashtable() {
+ return new sc_Hashtable();
+}
+
+/*** META ((export #t)) */
+function sc_hashtablePutBang(ht, key, val) {
+ var hash = sc_hash(key);
+ ht[hash] = new sc_HashtableElement(key, val);
+}
+
+/*** META ((export #t)) */
+function sc_hashtableGet(ht, key) {
+ var hash = sc_hash(key);
+ if (hash in ht)
+ return ht[hash].val;
+ else
+ return false;
+}
+
+/*** META ((export #t)) */
+function sc_hashtableForEach(ht, f) {
+ for (var v in ht) {
+ if (ht[v] instanceof sc_HashtableElement)
+ f(ht[v].key, ht[v].val);
+ }
+}
+
+/*** META ((export hashtable-contains?)
+ (peephole (hole 2 "sc_hash(" 1 ") in " 0)))
+*/
+function sc_hashtableContains(ht, key) {
+ var hash = sc_hash(key);
+ if (hash in ht)
+ return true;
+ else
+ return false;
+}
+
+var SC_HASH_COUNTER = 0;
+
+function sc_hash(o) {
+ if (o === null)
+ return "null";
+ else if (o === undefined)
+ return "undefined";
+ else if (o === true)
+ return "true";
+ else if (o === false)
+ return "false";
+ else if (typeof o === "number")
+ return "num-" + o;
+ else if (typeof o === "string")
+ return "jsstr-" + o;
+ else if (o.sc_getHash)
+ return o.sc_getHash();
+ else
+ return sc_counterHash.call(o);
+}
+function sc_counterHash() {
+ if (!this.sc_hash) {
+ this.sc_hash = "hash-" + SC_HASH_COUNTER;
+ SC_HASH_COUNTER++;
+ }
+ return this.sc_hash;
+}
+
+function sc_Trampoline(args, maxTailCalls) {
+ this['__trampoline return__'] = true;
+ this.args = args;
+ this.MAX_TAIL_CALLs = maxTailCalls;
+}
+// TODO: call/cc stuff
+sc_Trampoline.prototype.restart = function() {
+ var o = this;
+ while (true) {
+ // set both globals.
+ SC_TAIL_OBJECT.calls = o.MAX_TAIL_CALLs-1;
+ var fun = o.args.callee;
+ var res = fun.apply(SC_TAIL_OBJECT, o.args);
+ if (res instanceof sc_Trampoline)
+ o = res;
+ else
+ return res;
+ }
+}
+
+/*** META ((export bind-exit-lambda)) */
+function sc_bindExitLambda(proc) {
+ var escape_obj = new sc_BindExitException();
+ var escape = function(res) {
+ escape_obj.res = res;
+ throw escape_obj;
+ };
+ try {
+ return proc(escape);
+ } catch(e) {
+ if (e === escape_obj) {
+ return e.res;
+ }
+ throw e;
+ }
+}
+function sc_BindExitException() {
+ this._internalException = true;
+}
+
+var SC_SCM2JS_GLOBALS = new Object();
+
+// default tail-call depth.
+// normally the program should set it again. but just in case...
+var SC_TAIL_OBJECT = new Object();
+SC_SCM2JS_GLOBALS.TAIL_OBJECT = SC_TAIL_OBJECT;
+// ======================== I/O =======================
+
+/*------------------------------------------------------------------*/
+
+function sc_EOF() {
+}
+var SC_EOF_OBJECT = new sc_EOF();
+
+function sc_Port() {
+}
+
+/* --------------- Input ports -------------------------------------*/
+
+function sc_InputPort() {
+}
+sc_InputPort.prototype = new sc_Port();
+
+sc_InputPort.prototype.peekChar = function() {
+ if (!("peeked" in this))
+ this.peeked = this.getNextChar();
+ return this.peeked;
+}
+sc_InputPort.prototype.readChar = function() {
+ var tmp = this.peekChar();
+ delete this.peeked;
+ return tmp;
+}
+sc_InputPort.prototype.isCharReady = function() {
+ return true;
+}
+sc_InputPort.prototype.close = function() {
+ // do nothing
+}
+
+/* .............. String port ..........................*/
+function sc_ErrorInputPort() {
+};
+sc_ErrorInputPort.prototype = new sc_InputPort();
+sc_ErrorInputPort.prototype.getNextChar = function() {
+ throw "can't read from error-port.";
+};
+sc_ErrorInputPort.prototype.isCharReady = function() {
+ return false;
+};
+
+
+/* .............. String port ..........................*/
+
+function sc_StringInputPort(jsStr) {
+ // we are going to do some charAts on the str.
+ // instead of recreating all the time a String-object, we
+ // create one in the beginning. (not sure, if this is really an optim)
+ this.str = new String(jsStr);
+ this.pos = 0;
+}
+sc_StringInputPort.prototype = new sc_InputPort();
+sc_StringInputPort.prototype.getNextChar = function() {
+ if (this.pos >= this.str.length)
+ return SC_EOF_OBJECT;
+ return this.str.charAt(this.pos++);
+};
+
+/* ------------- Read and other lib-funs -------------------------------*/
+function sc_Token(type, val, pos) {
+ this.type = type;
+ this.val = val;
+ this.pos = pos;
+}
+sc_Token.EOF = 0/*EOF*/;
+sc_Token.OPEN_PAR = 1/*OPEN_PAR*/;
+sc_Token.CLOSE_PAR = 2/*CLOSE_PAR*/;
+sc_Token.OPEN_BRACE = 3/*OPEN_BRACE*/;
+sc_Token.CLOSE_BRACE = 4/*CLOSE_BRACE*/;
+sc_Token.OPEN_BRACKET = 5/*OPEN_BRACKET*/;
+sc_Token.CLOSE_BRACKET = 6/*CLOSE_BRACKET*/;
+sc_Token.WHITESPACE = 7/*WHITESPACE*/;
+sc_Token.QUOTE = 8/*QUOTE*/;
+sc_Token.ID = 9/*ID*/;
+sc_Token.DOT = 10/*DOT*/;
+sc_Token.STRING = 11/*STRING*/;
+sc_Token.NUMBER = 12/*NUMBER*/;
+sc_Token.ERROR = 13/*ERROR*/;
+sc_Token.VECTOR_BEGIN = 14/*VECTOR_BEGIN*/;
+sc_Token.TRUE = 15/*TRUE*/;
+sc_Token.FALSE = 16/*FALSE*/;
+sc_Token.UNSPECIFIED = 17/*UNSPECIFIED*/;
+sc_Token.REFERENCE = 18/*REFERENCE*/;
+sc_Token.STORE = 19/*STORE*/;
+sc_Token.CHAR = 20/*CHAR*/;
+
+var SC_ID_CLASS = SC_LOWER_CLASS + SC_UPPER_CLASS + "!$%*+-./:<=>?@^_~";
+function sc_Tokenizer(port) {
+ this.port = port;
+}
+sc_Tokenizer.prototype.peekToken = function() {
+ if (this.peeked)
+ return this.peeked;
+ var newToken = this.nextToken();
+ this.peeked = newToken;
+ return newToken;
+};
+sc_Tokenizer.prototype.readToken = function() {
+ var tmp = this.peekToken();
+ delete this.peeked;
+ return tmp;
+};
+sc_Tokenizer.prototype.nextToken = function() {
+ var port = this.port;
+
+ function isNumberChar(c) {
+ return (c >= "0" && c <= "9");
+ };
+ function isIdOrNumberChar(c) {
+ return SC_ID_CLASS.indexOf(c) != -1 || // ID-char
+ (c >= "0" && c <= "9");
+ }
+ function isWhitespace(c) {
+ return c === " " || c === "\r" || c === "\n" || c === "\t" || c === "\f";
+ };
+ function isWhitespaceOrEOF(c) {
+ return isWhitespace(c) || c === SC_EOF_OBJECT;
+ };
+
+ function readString() {
+ res = "";
+ while (true) {
+ var c = port.readChar();
+ switch (c) {
+ case '"':
+ return new sc_Token(11/*STRING*/, res);
+ case "\\":
+ var tmp = port.readChar();
+ switch (tmp) {
+ case '0': res += "\0"; break;
+ case 'a': res += "\a"; break;
+ case 'b': res += "\b"; break;
+ case 'f': res += "\f"; break;
+ case 'n': res += "\n"; break;
+ case 'r': res += "\r"; break;
+ case 't': res += "\t"; break;
+ case 'v': res += "\v"; break;
+ case '"': res += '"'; break;
+ case '\\': res += '\\'; break;
+ case 'x':
+ /* hexa-number */
+ var nb = 0;
+ while (true) {
+ var hexC = port.peekChar();
+ if (hexC >= '0' && hexC <= '9') {
+ port.readChar();
+ nb = nb * 16 + hexC.charCodeAt(0) - '0'.charCodeAt(0);
+ } else if (hexC >= 'a' && hexC <= 'f') {
+ port.readChar();
+ nb = nb * 16 + hexC.charCodeAt(0) - 'a'.charCodeAt(0);
+ } else if (hexC >= 'A' && hexC <= 'F') {
+ port.readChar();
+ nb = nb * 16 + hexC.charCodeAt(0) - 'A'.charCodeAt(0);
+ } else {
+ // next char isn't part of hex.
+ res += String.fromCharCode(nb);
+ break;
+ }
+ }
+ break;
+ default:
+ if (tmp === SC_EOF_OBJECT) {
+ return new sc_Token(13/*ERROR*/, "unclosed string-literal" + res);
+ }
+ res += tmp;
+ }
+ break;
+ default:
+ if (c === SC_EOF_OBJECT) {
+ return new sc_Token(13/*ERROR*/, "unclosed string-literal" + res);
+ }
+ res += c;
+ }
+ }
+ };
+ function readIdOrNumber(firstChar) {
+ var res = firstChar;
+ while (isIdOrNumberChar(port.peekChar()))
+ res += port.readChar();
+ if (isNaN(res))
+ return new sc_Token(9/*ID*/, res);
+ else
+ return new sc_Token(12/*NUMBER*/, res - 0);
+ };
+
+ function skipWhitespaceAndComments() {
+ var done = false;
+ while (!done) {
+ done = true;
+ while (isWhitespace(port.peekChar()))
+ port.readChar();
+ if (port.peekChar() === ';') {
+ port.readChar();
+ done = false;
+ while (true) {
+ curChar = port.readChar();
+ if (curChar === SC_EOF_OBJECT ||
+ curChar === '\n')
+ break;
+ }
+ }
+ }
+ };
+
+ function readDot() {
+ if (isWhitespace(port.peekChar()))
+ return new sc_Token(10/*DOT*/);
+ else
+ return readIdOrNumber(".");
+ };
+
+ function readSharp() {
+ var c = port.readChar();
+ if (isWhitespace(c))
+ return new sc_Token(13/*ERROR*/, "bad #-pattern0.");
+
+ // reference
+ if (isNumberChar(c)) {
+ var nb = c - 0;
+ while (isNumberChar(port.peekChar()))
+ nb = nb*10 + (port.readChar() - 0);
+ switch (port.readChar()) {
+ case '#':
+ return new sc_Token(18/*REFERENCE*/, nb);
+ case '=':
+ return new sc_Token(19/*STORE*/, nb);
+ default:
+ return new sc_Token(13/*ERROR*/, "bad #-pattern1." + nb);
+ }
+ }
+
+ if (c === "(")
+ return new sc_Token(14/*VECTOR_BEGIN*/);
+
+ if (c === "\\") { // character
+ var tmp = ""
+ while (!isWhitespaceOrEOF(port.peekChar()))
+ tmp += port.readChar();
+ switch (tmp.length) {
+ case 0: // it's escaping a whitespace char:
+ if (sc_isEOFObject(port.peekChar))
+ return new sc_Token(13/*ERROR*/, "bad #-pattern2.");
+ else
+ return new sc_Token(20/*CHAR*/, port.readChar());
+ case 1:
+ return new sc_Token(20/*CHAR*/, tmp);
+ default:
+ var entry = sc_Char.readable2char[tmp.toLowerCase()];
+ if (entry)
+ return new sc_Token(20/*CHAR*/, entry);
+ else
+ return new sc_Token(13/*ERROR*/, "unknown character description: #\\" + tmp);
+ }
+ }
+
+ // some constants (#t, #f, #unspecified)
+ var res;
+ var needing;
+ switch (c) {
+ case 't': res = new sc_Token(15/*TRUE*/, true); needing = ""; break;
+ case 'f': res = new sc_Token(16/*FALSE*/, false); needing = ""; break;
+ case 'u': res = new sc_Token(17/*UNSPECIFIED*/, undefined); needing = "nspecified"; break;
+ default:
+ return new sc_Token(13/*ERROR*/, "bad #-pattern3: " + c);
+ }
+ while(true) {
+ c = port.peekChar();
+ if ((isWhitespaceOrEOF(c) || c === ')') &&
+ needing == "")
+ return res;
+ else if (isWhitespace(c) || needing == "")
+ return new sc_Token(13/*ERROR*/, "bad #-pattern4 " + c + " " + needing);
+ else if (needing.charAt(0) == c) {
+ port.readChar(); // consume
+ needing = needing.slice(1);
+ } else
+ return new sc_Token(13/*ERROR*/, "bad #-pattern5");
+ }
+
+ };
+
+ skipWhitespaceAndComments();
+ var curChar = port.readChar();
+ if (curChar === SC_EOF_OBJECT)
+ return new sc_Token(0/*EOF*/, curChar);
+ switch (curChar)
+ {
+ case " ":
+ case "\n":
+ case "\t":
+ return readWhitespace();
+ case "(":
+ return new sc_Token(1/*OPEN_PAR*/);
+ case ")":
+ return new sc_Token(2/*CLOSE_PAR*/);
+ case "{":
+ return new sc_Token(3/*OPEN_BRACE*/);
+ case "}":
+ return new sc_Token(4/*CLOSE_BRACE*/);
+ case "[":
+ return new sc_Token(5/*OPEN_BRACKET*/);
+ case "]":
+ return new sc_Token(6/*CLOSE_BRACKET*/);
+ case "'":
+ return new sc_Token(8/*QUOTE*/);
+ case "#":
+ return readSharp();
+ case ".":
+ return readDot();
+ case '"':
+ return readString();
+ default:
+ if (isIdOrNumberChar(curChar))
+ return readIdOrNumber(curChar);
+ throw "unexpected character: " + curChar;
+ }
+};
+
+function sc_Reader(tokenizer) {
+ this.tokenizer = tokenizer;
+ this.backref = new Array();
+}
+sc_Reader.prototype.read = function() {
+ function readList(listBeginType) {
+ function matchesPeer(open, close) {
+ return open === 1/*OPEN_PAR*/ && close === 2/*CLOSE_PAR*/
+ || open === 3/*OPEN_BRACE*/ && close === 4/*CLOSE_BRACE*/
+ || open === 5/*OPEN_BRACKET*/ && close === 6/*CLOSE_BRACKET*/;
+ };
+ var res = null;
+
+ while (true) {
+ var token = tokenizer.peekToken();
+
+ switch (token.type) {
+ case 2/*CLOSE_PAR*/:
+ case 4/*CLOSE_BRACE*/:
+ case 6/*CLOSE_BRACKET*/:
+ if (matchesPeer(listBeginType, token.type)) {
+ tokenizer.readToken(); // consume token
+ return sc_reverseBang(res);
+ } else
+ throw "closing par doesn't match: " + listBeginType
+ + " " + listEndType;
+
+ case 0/*EOF*/:
+ throw "unexpected end of file";
+
+ case 10/*DOT*/:
+ tokenizer.readToken(); // consume token
+ var cdr = this.read();
+ var par = tokenizer.readToken();
+ if (!matchesPeer(listBeginType, par.type))
+ throw "closing par doesn't match: " + listBeginType
+ + " " + par.type;
+ else
+ return sc_reverseAppendBang(res, cdr);
+
+
+ default:
+ res = sc_cons(this.read(), res);
+ }
+ }
+ };
+ function readQuote() {
+ return sc_cons("quote", sc_cons(this.read(), null));
+ };
+ function readVector() {
+ // opening-parenthesis is already consumed
+ var a = new Array();
+ while (true) {
+ var token = tokenizer.peekToken();
+ switch (token.type) {
+ case 2/*CLOSE_PAR*/:
+ tokenizer.readToken();
+ return a;
+
+ default:
+ a.push(this.read());
+ }
+ }
+ };
+
+ function storeRefence(nb) {
+ var tmp = this.read();
+ this.backref[nb] = tmp;
+ return tmp;
+ };
+
+ function readReference(nb) {
+ if (nb in this.backref)
+ return this.backref[nb];
+ else
+ throw "bad reference: " + nb;
+ };
+
+ var tokenizer = this.tokenizer;
+
+ var token = tokenizer.readToken();
+
+ // handle error
+ if (token.type === 13/*ERROR*/)
+ throw token.val;
+
+ switch (token.type) {
+ case 1/*OPEN_PAR*/:
+ case 3/*OPEN_BRACE*/:
+ case 5/*OPEN_BRACKET*/:
+ return readList.call(this, token.type);
+ case 8/*QUOTE*/:
+ return readQuote.call(this);
+ case 11/*STRING*/:
+ return sc_jsstring2string(token.val);
+ case 20/*CHAR*/:
+ return new sc_Char(token.val);
+ case 14/*VECTOR_BEGIN*/:
+ return readVector.call(this);
+ case 18/*REFERENCE*/:
+ return readReference.call(this, token.val);
+ case 19/*STORE*/:
+ return storeRefence.call(this, token.val);
+ case 9/*ID*/:
+ return sc_jsstring2symbol(token.val);
+ case 0/*EOF*/:
+ case 12/*NUMBER*/:
+ case 15/*TRUE*/:
+ case 16/*FALSE*/:
+ case 17/*UNSPECIFIED*/:
+ return token.val;
+ default:
+ throw "unexpected token " + token.type + " " + token.val;
+ }
+};
+
+/*** META ((export #t)) */
+function sc_read(port) {
+ if (port === undefined) // we assume the port hasn't been given.
+ port = SC_DEFAULT_IN; // THREAD: shared var...
+ var reader = new sc_Reader(new sc_Tokenizer(port));
+ return reader.read();
+}
+/*** META ((export #t)) */
+function sc_readChar(port) {
+ if (port === undefined) // we assume the port hasn't been given.
+ port = SC_DEFAULT_IN; // THREAD: shared var...
+ var t = port.readChar();
+ return t === SC_EOF_OBJECT? t: new sc_Char(t);
+}
+/*** META ((export #t)) */
+function sc_peekChar(port) {
+ if (port === undefined) // we assume the port hasn't been given.
+ port = SC_DEFAULT_IN; // THREAD: shared var...
+ var t = port.peekChar();
+ return t === SC_EOF_OBJECT? t: new sc_Char(t);
+}
+/*** META ((export #t)
+ (type bool))
+*/
+function sc_isCharReady(port) {
+ if (port === undefined) // we assume the port hasn't been given.
+ port = SC_DEFAULT_IN; // THREAD: shared var...
+ return port.isCharReady();
+}
+/*** META ((export #t)
+ (peephole (postfix ".close()")))
+*/
+function sc_closeInputPort(p) {
+ return p.close();
+}
+
+/*** META ((export #t)
+ (type bool)
+ (peephole (postfix " instanceof sc_InputPort")))
+*/
+function sc_isInputPort(o) {
+ return (o instanceof sc_InputPort);
+}
+
+/*** META ((export eof-object?)
+ (type bool)
+ (peephole (postfix " === SC_EOF_OBJECT")))
+*/
+function sc_isEOFObject(o) {
+ return o === SC_EOF_OBJECT;
+}
+
+/*** META ((export #t)
+ (peephole (hole 0 "SC_DEFAULT_IN")))
+*/
+function sc_currentInputPort() {
+ return SC_DEFAULT_IN;
+}
+
+/* ------------ file operations are not supported -----------*/
+/*** META ((export #t)) */
+function sc_callWithInputFile(s, proc) {
+ throw "can't open " + s;
+}
+
+/*** META ((export #t)) */
+function sc_callWithOutputFile(s, proc) {
+ throw "can't open " + s;
+}
+
+/*** META ((export #t)) */
+function sc_withInputFromFile(s, thunk) {
+ throw "can't open " + s;
+}
+
+/*** META ((export #t)) */
+function sc_withOutputToFile(s, thunk) {
+ throw "can't open " + s;
+}
+
+/*** META ((export #t)) */
+function sc_openInputFile(s) {
+ throw "can't open " + s;
+}
+
+/*** META ((export #t)) */
+function sc_openOutputFile(s) {
+ throw "can't open " + s;
+}
+
+/* ----------------------------------------------------------------------------*/
+/*** META ((export #t)) */
+function sc_basename(p) {
+ var i = p.lastIndexOf('/');
+
+ if(i >= 0)
+ return p.substring(i + 1, p.length);
+ else
+ return '';
+}
+
+/*** META ((export #t)) */
+function sc_dirname(p) {
+ var i = p.lastIndexOf('/');
+
+ if(i >= 0)
+ return p.substring(0, i);
+ else
+ return '';
+}
+
+/* ----------------------------------------------------------------------------*/
+
+/*** META ((export #t)) */
+function sc_withInputFromPort(p, thunk) {
+ try {
+ var tmp = SC_DEFAULT_IN; // THREAD: shared var.
+ SC_DEFAULT_IN = p;
+ return thunk();
+ } finally {
+ SC_DEFAULT_IN = tmp;
+ }
+}
+
+/*** META ((export #t)) */
+function sc_withInputFromString(s, thunk) {
+ return sc_withInputFromPort(new sc_StringInputPort(sc_string2jsstring(s)), thunk);
+}
+
+/*** META ((export #t)) */
+function sc_withOutputToPort(p, thunk) {
+ try {
+ var tmp = SC_DEFAULT_OUT; // THREAD: shared var.
+ SC_DEFAULT_OUT = p;
+ return thunk();
+ } finally {
+ SC_DEFAULT_OUT = tmp;
+ }
+}
+
+/*** META ((export #t)) */
+function sc_withOutputToString(thunk) {
+ var p = new sc_StringOutputPort();
+ sc_withOutputToPort(p, thunk);
+ return p.close();
+}
+
+/*** META ((export #t)) */
+function sc_withOutputToProcedure(proc, thunk) {
+ var t = function(s) { proc(sc_jsstring2string(s)); };
+ return sc_withOutputToPort(new sc_GenericOutputPort(t), thunk);
+}
+
+/*** META ((export #t)
+ (peephole (hole 0 "new sc_StringOutputPort()")))
+*/
+function sc_openOutputString() {
+ return new sc_StringOutputPort();
+}
+
+/*** META ((export #t)) */
+function sc_openInputString(str) {
+ return new sc_StringInputPort(sc_string2jsstring(str));
+}
+
+/* ----------------------------------------------------------------------------*/
+
+function sc_OutputPort() {
+}
+sc_OutputPort.prototype = new sc_Port();
+sc_OutputPort.prototype.appendJSString = function(obj) {
+ /* do nothing */
+}
+sc_OutputPort.prototype.close = function() {
+ /* do nothing */
+}
+
+function sc_StringOutputPort() {
+ this.res = "";
+}
+sc_StringOutputPort.prototype = new sc_OutputPort();
+sc_StringOutputPort.prototype.appendJSString = function(s) {
+ this.res += s;
+}
+sc_StringOutputPort.prototype.close = function() {
+ return sc_jsstring2string(this.res);
+}
+
+/*** META ((export #t)) */
+function sc_getOutputString(sp) {
+ return sc_jsstring2string(sp.res);
+}
+
+
+function sc_ErrorOutputPort() {
+}
+sc_ErrorOutputPort.prototype = new sc_OutputPort();
+sc_ErrorOutputPort.prototype.appendJSString = function(s) {
+ throw "don't write on ErrorPort!";
+}
+sc_ErrorOutputPort.prototype.close = function() {
+ /* do nothing */
+}
+
+function sc_GenericOutputPort(appendJSString, close) {
+ this.appendJSString = appendJSString;
+ if (close)
+ this.close = close;
+}
+sc_GenericOutputPort.prototype = new sc_OutputPort();
+
+/*** META ((export #t)
+ (type bool)
+ (peephole (postfix " instanceof sc_OutputPort")))
+*/
+function sc_isOutputPort(o) {
+ return (o instanceof sc_OutputPort);
+}
+
+/*** META ((export #t)
+ (peephole (postfix ".close()")))
+*/
+function sc_closeOutputPort(p) {
+ return p.close();
+}
+
+/* ------------------ write ---------------------------------------------------*/
+
+/*** META ((export #t)) */
+function sc_write(o, p) {
+ if (p === undefined) // we assume not given
+ p = SC_DEFAULT_OUT;
+ p.appendJSString(sc_toWriteString(o));
+}
+
+function sc_toWriteString(o) {
+ if (o === null)
+ return "()";
+ else if (o === true)
+ return "#t";
+ else if (o === false)
+ return "#f";
+ else if (o === undefined)
+ return "#unspecified";
+ else if (typeof o === 'function')
+ return "#<procedure " + sc_hash(o) + ">";
+ else if (o.sc_toWriteString)
+ return o.sc_toWriteString();
+ else
+ return o.toString();
+}
+
+function sc_escapeWriteString(s) {
+ var res = "";
+ var j = 0;
+ for (i = 0; i < s.length; i++) {
+ switch (s.charAt(i)) {
+ case "\0": res += s.substring(j, i) + "\\0"; j = i + 1; break;
+ case "\b": res += s.substring(j, i) + "\\b"; j = i + 1; break;
+ case "\f": res += s.substring(j, i) + "\\f"; j = i + 1; break;
+ case "\n": res += s.substring(j, i) + "\\n"; j = i + 1; break;
+ case "\r": res += s.substring(j, i) + "\\r"; j = i + 1; break;
+ case "\t": res += s.substring(j, i) + "\\t"; j = i + 1; break;
+ case "\v": res += s.substring(j, i) + "\\v"; j = i + 1; break;
+ case '"': res += s.substring(j, i) + '\\"'; j = i + 1; break;
+ case "\\": res += s.substring(j, i) + "\\\\"; j = i + 1; break;
+ default:
+ var c = s.charAt(i);
+ if ("\a" !== "a" && c == "\a") {
+ res += s.substring(j, i) + "\\a"; j = i + 1; continue;
+ }
+ if ("\v" !== "v" && c == "\v") {
+ res += s.substring(j, i) + "\\v"; j = i + 1; continue;
+ }
+ //if (s.charAt(i) < ' ' || s.charCodeAt(i) > 127) {
+ // CARE: Manuel is this OK with HOP?
+ if (s.charAt(i) < ' ') {
+ /* non printable character and special chars */
+ res += s.substring(j, i) + "\\x" + s.charCodeAt(i).toString(16);
+ j = i + 1;
+ }
+ // else just let i increase...
+ }
+ }
+ res += s.substring(j, i);
+ return res;
+}
+
+/* ------------------ display ---------------------------------------------------*/
+
+/*** META ((export #t)) */
+function sc_display(o, p) {
+ if (p === undefined) // we assume not given
+ p = SC_DEFAULT_OUT;
+ p.appendJSString(sc_toDisplayString(o));
+}
+
+function sc_toDisplayString(o) {
+ if (o === null)
+ return "()";
+ else if (o === true)
+ return "#t";
+ else if (o === false)
+ return "#f";
+ else if (o === undefined)
+ return "#unspecified";
+ else if (typeof o === 'function')
+ return "#<procedure " + sc_hash(o) + ">";
+ else if (o.sc_toDisplayString)
+ return o.sc_toDisplayString();
+ else
+ return o.toString();
+}
+
+/* ------------------ newline ---------------------------------------------------*/
+
+/*** META ((export #t)) */
+function sc_newline(p) {
+ if (p === undefined) // we assume not given
+ p = SC_DEFAULT_OUT;
+ p.appendJSString("\n");
+}
+
+/* ------------------ write-char ---------------------------------------------------*/
+
+/*** META ((export #t)) */
+function sc_writeChar(c, p) {
+ if (p === undefined) // we assume not given
+ p = SC_DEFAULT_OUT;
+ p.appendJSString(c.val);
+}
+
+/* ------------------ write-circle ---------------------------------------------------*/
+
+/*** META ((export #t)) */
+function sc_writeCircle(o, p) {
+ if (p === undefined) // we assume not given
+ p = SC_DEFAULT_OUT;
+ p.appendJSString(sc_toWriteCircleString(o));
+}
+
+function sc_toWriteCircleString(o) {
+ var symb = sc_gensym("writeCircle");
+ var nbPointer = new Object();
+ nbPointer.nb = 0;
+ sc_prepWriteCircle(o, symb, nbPointer);
+ return sc_genToWriteCircleString(o, symb);
+}
+
+function sc_prepWriteCircle(o, symb, nbPointer) {
+ // TODO sc_Struct
+ if (o instanceof sc_Pair ||
+ o instanceof sc_Vector) {
+ if (o[symb] !== undefined) {
+ // not the first visit.
+ o[symb]++;
+ // unless there is already a number, assign one.
+ if (!o[symb + "nb"]) o[symb + "nb"] = nbPointer.nb++;
+ return;
+ }
+ o[symb] = 0;
+ if (o instanceof sc_Pair) {
+ sc_prepWriteCircle(o.car, symb, nbPointer);
+ sc_prepWriteCircle(o.cdr, symb, nbPointer);
+ } else {
+ for (var i = 0; i < o.length; i++)
+ sc_prepWriteCircle(o[i], symb, nbPointer);
+ }
+ }
+}
+
+function sc_genToWriteCircleString(o, symb) {
+ if (!(o instanceof sc_Pair ||
+ o instanceof sc_Vector))
+ return sc_toWriteString(o);
+ return o.sc_toWriteCircleString(symb);
+}
+sc_Pair.prototype.sc_toWriteCircleString = function(symb, inList) {
+ if (this[symb + "use"]) { // use-flag is set. Just use it.
+ var nb = this[symb + "nb"];
+ if (this[symb]-- === 0) { // if we are the last use. remove all fields.
+ delete this[symb];
+ delete this[symb + "nb"];
+ delete this[symb + "use"];
+ }
+ if (inList)
+ return '. #' + nb + '#';
+ else
+ return '#' + nb + '#';
+ }
+ if (this[symb]-- === 0) { // if we are the last use. remove all fields.
+ delete this[symb];
+ delete this[symb + "nb"];
+ delete this[symb + "use"];
+ }
+
+ var res = "";
+
+ if (this[symb] !== undefined) { // implies > 0
+ this[symb + "use"] = true;
+ if (inList)
+ res += '. #' + this[symb + "nb"] + '=';
+ else
+ res += '#' + this[symb + "nb"] + '=';
+ inList = false;
+ }
+
+ if (!inList)
+ res += "(";
+
+ // print car
+ res += sc_genToWriteCircleString(this.car, symb);
+
+ if (sc_isPair(this.cdr)) {
+ res += " " + this.cdr.sc_toWriteCircleString(symb, true);
+ } else if (this.cdr !== null) {
+ res += " . " + sc_genToWriteCircleString(this.cdr, symb);
+ }
+ if (!inList)
+ res += ")";
+ return res;
+};
+sc_Vector.prototype.sc_toWriteCircleString = function(symb) {
+ if (this[symb + "use"]) { // use-flag is set. Just use it.
+ var nb = this[symb + "nb"];
+ if (this[symb]-- === 0) { // if we are the last use. remove all fields.
+ delete this[symb];
+ delete this[symb + "nb"];
+ delete this[symb + "use"];
+ }
+ return '#' + nb + '#';
+ }
+ if (this[symb]-- === 0) { // if we are the last use. remove all fields.
+ delete this[symb];
+ delete this[symb + "nb"];
+ delete this[symb + "use"];
+ }
+
+ var res = "";
+ if (this[symb] !== undefined) { // implies > 0
+ this[symb + "use"] = true;
+ res += '#' + this[symb + "nb"] + '=';
+ }
+ res += "#(";
+ for (var i = 0; i < this.length; i++) {
+ res += sc_genToWriteCircleString(this[i], symb);
+ if (i < this.length - 1) res += " ";
+ }
+ res += ")";
+ return res;
+};
+
+
+/* ------------------ print ---------------------------------------------------*/
+
+/*** META ((export #t)) */
+function sc_print(s) {
+ if (arguments.length === 1) {
+ sc_display(s);
+ sc_newline();
+ }
+ else {
+ for (var i = 0; i < arguments.length; i++)
+ sc_display(arguments[i]);
+ sc_newline();
+ }
+}
+
+/* ------------------ format ---------------------------------------------------*/
+/*** META ((export #t)) */
+function sc_format(s, args) {
+ var len = s.length;
+ var p = new sc_StringOutputPort();
+ var i = 0, j = 1;
+
+ while( i < len ) {
+ var i2 = s.indexOf("~", i);
+
+ if (i2 == -1) {
+ p.appendJSString( s.substring( i, len ) );
+ return p.close();
+ } else {
+ if (i2 > i) {
+ if (i2 == (len - 1)) {
+ p.appendJSString(s.substring(i, len));
+ return p.close();
+ } else {
+ p.appendJSString(s.substring(i, i2));
+ i = i2;
+ }
+ }
+
+ switch(s.charCodeAt(i2 + 1)) {
+ case 65:
+ case 97:
+ // a
+ sc_display(arguments[j], p);
+ i += 2; j++;
+ break;
+
+ case 83:
+ case 115:
+ // s
+ sc_write(arguments[j], p);
+ i += 2; j++;
+ break;
+
+ case 86:
+ case 118:
+ // v
+ sc_display(arguments[j], p);
+ p.appendJSString("\n");
+ i += 2; j++;
+ break;
+
+ case 67:
+ case 99:
+ // c
+ p.appendJSString(String.fromCharCode(arguments[j]));
+ i += 2; j++;
+ break;
+
+ case 88:
+ case 120:
+ // x
+ p.appendJSString(arguments[j].toString(6));
+ i += 2; j++;
+ break;
+
+ case 79:
+ case 111:
+ // o
+ p.appendJSString(arguments[j].toString(8));
+ i += 2; j++;
+ break;
+
+ case 66:
+ case 98:
+ // b
+ p.appendJSString(arguments[j].toString(2));
+ i += 2; j++;
+ break;
+
+ case 37:
+ case 110:
+ // %, n
+ p.appendJSString("\n");
+ i += 2; break;
+
+ case 114:
+ // r
+ p.appendJSString("\r");
+ i += 2; break;
+
+ case 126:
+ // ~
+ p.appendJSString("~");
+ i += 2; break;
+
+ default:
+ sc_error( "format: illegal ~"
+ + String.fromCharCode(s.charCodeAt(i2 + 1))
+ + " sequence" );
+ return "";
+ }
+ }
+ }
+
+ return p.close();
+}
+
+/* ------------------ global ports ---------------------------------------------------*/
+
+var SC_DEFAULT_IN = new sc_ErrorInputPort();
+var SC_DEFAULT_OUT = new sc_ErrorOutputPort();
+var SC_ERROR_OUT = new sc_ErrorOutputPort();
+
+var sc_SYMBOL_PREFIX = "\u1E9C";
+var sc_KEYWORD_PREFIX = "\u1E9D";
+
+/*** META ((export #t)
+ (peephole (id))) */
+function sc_jsstring2string(s) {
+ return s;
+}
+
+/*** META ((export #t)
+ (peephole (prefix "'\\u1E9C' +")))
+*/
+function sc_jsstring2symbol(s) {
+ return sc_SYMBOL_PREFIX + s;
+}
+
+/*** META ((export #t)
+ (peephole (id)))
+*/
+function sc_string2jsstring(s) {
+ return s;
+}
+
+/*** META ((export #t)
+ (peephole (symbol2jsstring_immutable)))
+*/
+function sc_symbol2jsstring(s) {
+ return s.slice(1);
+}
+
+/*** META ((export #t)
+ (peephole (postfix ".slice(1)")))
+*/
+function sc_keyword2jsstring(k) {
+ return k.slice(1);
+}
+
+/*** META ((export #t)
+ (peephole (prefix "'\\u1E9D' +")))
+*/
+function sc_jsstring2keyword(s) {
+ return sc_KEYWORD_PREFIX + s;
+}
+
+/*** META ((export #t)
+ (type bool))
+*/
+function sc_isKeyword(s) {
+ return (typeof s === "string") &&
+ (s.charAt(0) === sc_KEYWORD_PREFIX);
+}
+
+
+/*** META ((export #t)) */
+var sc_gensym = function() {
+ var counter = 1000;
+ return function(sym) {
+ counter++;
+ if (!sym) sym = sc_SYMBOL_PREFIX;
+ return sym + "s" + counter + "~" + "^sC-GeNsYm ";
+ };
+}();
+
+
+/*** META ((export #t)
+ (type bool))
+*/
+function sc_isEqual(o1, o2) {
+ return ((o1 === o2) ||
+ (sc_isPair(o1) && sc_isPair(o2)
+ && sc_isPairEqual(o1, o2, sc_isEqual)) ||
+ (sc_isVector(o1) && sc_isVector(o2)
+ && sc_isVectorEqual(o1, o2, sc_isEqual)));
+}
+
+/*** META ((export number->symbol integer->symbol)) */
+function sc_number2symbol(x, radix) {
+ return sc_SYMBOL_PREFIX + sc_number2jsstring(x, radix);
+}
+
+/*** META ((export number->string integer->string)) */
+var sc_number2string = sc_number2jsstring;
+
+/*** META ((export #t)) */
+function sc_symbol2number(s, radix) {
+ return sc_jsstring2number(s.slice(1), radix);
+}
+
+/*** META ((export #t)) */
+var sc_string2number = sc_jsstring2number;
+
+/*** META ((export #t)
+ (peephole (prefix "+" s)))
+ ;; peephole will only apply if no radix is given.
+*/
+function sc_string2integer(s, radix) {
+ if (!radix) return +s;
+ return parseInt(s, radix);
+}
+
+/*** META ((export #t)
+ (peephole (prefix "+")))
+*/
+function sc_string2real(s) {
+ return +s;
+}
+
+
+/*** META ((export #t)
+ (type bool))
+*/
+function sc_isSymbol(s) {
+ return (typeof s === "string") &&
+ (s.charAt(0) === sc_SYMBOL_PREFIX);
+}
+
+/*** META ((export #t)
+ (peephole (symbol2string_immutable)))
+*/
+function sc_symbol2string(s) {
+ return s.slice(1);
+}
+
+/*** META ((export #t)
+ (peephole (prefix "'\\u1E9C' +")))
+*/
+function sc_string2symbol(s) {
+ return sc_SYMBOL_PREFIX + s;
+}
+
+/*** META ((export symbol-append)
+ (peephole (symbolAppend_immutable)))
+*/
+function sc_symbolAppend() {
+ var res = sc_SYMBOL_PREFIX;
+ for (var i = 0; i < arguments.length; i++)
+ res += arguments[i].slice(1);
+ return res;
+}
+
+/*** META ((export #t)
+ (peephole (postfix ".val")))
+*/
+function sc_char2string(c) { return c.val; }
+
+/*** META ((export #t)
+ (peephole (hole 1 "'\\u1E9C' + " c ".val")))
+*/
+function sc_char2symbol(c) { return sc_SYMBOL_PREFIX + c.val; }
+
+/*** META ((export #t)
+ (type bool))
+*/
+function sc_isString(s) {
+ return (typeof s === "string") &&
+ (s.charAt(0) !== sc_SYMBOL_PREFIX);
+}
+
+/*** META ((export #t)) */
+var sc_makeString = sc_makejsString;
+
+
+/*** META ((export #t)) */
+function sc_string() {
+ for (var i = 0; i < arguments.length; i++)
+ arguments[i] = arguments[i].val;
+ return "".concat.apply("", arguments);
+}
+
+/*** META ((export #t)
+ (peephole (postfix ".length")))
+*/
+function sc_stringLength(s) { return s.length; }
+
+/*** META ((export #t)) */
+function sc_stringRef(s, k) {
+ return new sc_Char(s.charAt(k));
+}
+
+/* there's no stringSet in the immutable version
+function sc_stringSet(s, k, c)
+*/
+
+
+/*** META ((export string=?)
+ (type bool)
+ (peephole (hole 2 str1 " === " str2)))
+*/
+function sc_isStringEqual(s1, s2) {
+ return s1 === s2;
+}
+/*** META ((export string<?)
+ (type bool)
+ (peephole (hole 2 str1 " < " str2)))
+*/
+function sc_isStringLess(s1, s2) {
+ return s1 < s2;
+}
+/*** META ((export string>?)
+ (type bool)
+ (peephole (hole 2 str1 " > " str2)))
+*/
+function sc_isStringGreater(s1, s2) {
+ return s1 > s2;
+}
+/*** META ((export string<=?)
+ (type bool)
+ (peephole (hole 2 str1 " <= " str2)))
+*/
+function sc_isStringLessEqual(s1, s2) {
+ return s1 <= s2;
+}
+/*** META ((export string>=?)
+ (type bool)
+ (peephole (hole 2 str1 " >= " str2)))
+*/
+function sc_isStringGreaterEqual(s1, s2) {
+ return s1 >= s2;
+}
+/*** META ((export string-ci=?)
+ (type bool)
+ (peephole (hole 2 str1 ".toLowerCase() === " str2 ".toLowerCase()")))
+*/
+function sc_isStringCIEqual(s1, s2) {
+ return s1.toLowerCase() === s2.toLowerCase();
+}
+/*** META ((export string-ci<?)
+ (type bool)
+ (peephole (hole 2 str1 ".toLowerCase() < " str2 ".toLowerCase()")))
+*/
+function sc_isStringCILess(s1, s2) {
+ return s1.toLowerCase() < s2.toLowerCase();
+}
+/*** META ((export string-ci>?)
+ (type bool)
+ (peephole (hole 2 str1 ".toLowerCase() > " str2 ".toLowerCase()")))
+*/
+function sc_isStringCIGreater(s1, s2) {
+ return s1.toLowerCase() > s2.toLowerCase();
+}
+/*** META ((export string-ci<=?)
+ (type bool)
+ (peephole (hole 2 str1 ".toLowerCase() <= " str2 ".toLowerCase()")))
+*/
+function sc_isStringCILessEqual(s1, s2) {
+ return s1.toLowerCase() <= s2.toLowerCase();
+}
+/*** META ((export string-ci>=?)
+ (type bool)
+ (peephole (hole 2 str1 ".toLowerCase() >= " str2 ".toLowerCase()")))
+*/
+function sc_isStringCIGreaterEqual(s1, s2) {
+ return s1.toLowerCase() >= s2.toLowerCase();
+}
+
+/*** META ((export #t)
+ (peephole (hole 3 s ".substring(" start ", " end ")")))
+*/
+function sc_substring(s, start, end) {
+ return s.substring(start, end);
+}
+
+/*** META ((export #t))
+*/
+function sc_isSubstring_at(s1, s2, i) {
+ return s2 == s1.substring(i, i+ s2.length);
+}
+
+/*** META ((export #t)
+ (peephole (infix 0 #f "+" "''")))
+*/
+function sc_stringAppend() {
+ return "".concat.apply("", arguments);
+}
+
+/*** META ((export #t)) */
+var sc_string2list = sc_jsstring2list;
+
+/*** META ((export #t)) */
+var sc_list2string = sc_list2jsstring;
+
+/*** META ((export #t)
+ (peephole (id)))
+*/
+function sc_stringCopy(s) {
+ return s;
+}
+
+/* there's no string-fill in the immutable version
+function sc_stringFill(s, c)
+*/
+
+/*** META ((export #t)
+ (peephole (postfix ".slice(1)")))
+*/
+function sc_keyword2string(o) {
+ return o.slice(1);
+}
+
+/*** META ((export #t)
+ (peephole (prefix "'\\u1E9D' +")))
+*/
+function sc_string2keyword(o) {
+ return sc_KEYWORD_PREFIX + o;
+}
+
+String.prototype.sc_toDisplayString = function() {
+ if (this.charAt(0) === sc_SYMBOL_PREFIX)
+ // TODO: care for symbols with spaces (escape-chars symbols).
+ return this.slice(1);
+ else if (this.charAt(0) === sc_KEYWORD_PREFIX)
+ return ":" + this.slice(1);
+ else
+ return this.toString();
+};
+
+String.prototype.sc_toWriteString = function() {
+ if (this.charAt(0) === sc_SYMBOL_PREFIX)
+ // TODO: care for symbols with spaces (escape-chars symbols).
+ return this.slice(1);
+ else if (this.charAt(0) === sc_KEYWORD_PREFIX)
+ return ":" + this.slice(1);
+ else
+ return '"' + sc_escapeWriteString(this) + '"';
+};
+/* Exported Variables */
+var BgL_testzd2boyerzd2;
+var BgL_nboyerzd2benchmarkzd2;
+var BgL_setupzd2boyerzd2;
+/* End Exports */
+
+var translate_term_nboyer;
+var translate_args_nboyer;
+var untranslate_term_nboyer;
+var BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer;
+var BgL_sc_za2symbolzd2recordszd2alistza2_2z00_nboyer;
+var translate_alist_nboyer;
+var apply_subst_nboyer;
+var apply_subst_lst_nboyer;
+var tautologyp_nboyer;
+var if_constructor_nboyer;
+var rewrite_count_nboyer;
+var rewrite_nboyer;
+var rewrite_args_nboyer;
+var unify_subst_nboyer;
+var one_way_unify1_nboyer;
+var false_term_nboyer;
+var true_term_nboyer;
+var trans_of_implies1_nboyer;
+var is_term_equal_nboyer;
+var is_term_member_nboyer;
+var const_nboyer;
+var sc_const_3_nboyer;
+var sc_const_4_nboyer;
+{
+ (sc_const_4_nboyer = (new sc_Pair("\u1E9Cimplies",(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cz",(new sc_Pair("\u1E9Cu",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cu",(new sc_Pair("\u1E9Cw",null)))))),null)))))),null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cw",null)))))),null)))))));
+ (sc_const_3_nboyer = sc_list((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ccompile",(new sc_Pair("\u1E9Cform",null)))),(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair((new sc_Pair("\u1E9Ccodegen",(new sc_Pair((new sc_Pair("\u1E9Coptimize",(new sc_Pair("\u1E9Cform",null)))),(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ceqp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cy",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgreaterp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clesseqp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgreatereqp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cboolean",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cf",null)),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ciff",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ceven1",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Ct",null)),(new sc_Pair((new sc_Pair("\u1E9Codd",(new sc_Pair((new sc_Pair("\u1E9Csub1",(new sc_Pair("\u1E9Cx",null)))),null)))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ccountps-",(new sc_Pair("\u1E9Cl",(new sc_Pair("\u1E9Cpred",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ccountps-loop",(new sc_Pair("\u1E9Cl",(new sc_Pair("\u1E9Cpred",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cfact-",(new sc_Pair("\u1E9Ci",null)))),(new sc_Pair((new sc_Pair("\u1E9Cfact-loop",(new sc_Pair("\u1E9Ci",(new sc_Pair((1),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Creverse-",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Creverse-loop",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdivides",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cassume-true",(new sc_Pair("\u1E9Cvar",(new sc_Pair("\u1E9Calist",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cvar",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),null)))))),(new sc_Pair("\u1E9Calist",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cassume-false",(new sc_Pair("\u1E9Cvar",(new sc_Pair("\u1E9Calist",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cvar",(new sc_Pair((new sc_Pair("\u1E9Cf",null)),null)))))),(new sc_Pair("\u1E9Calist",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctautology-checker",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Ctautologyp",(new sc_Pair((new sc_Pair("\u1E9Cnormalize",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cfalsify",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cfalsify1",(new sc_Pair((new sc_Pair("\u1E9Cnormalize",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cprime",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))),null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cprime1",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Csub1",(new sc_Pair("\u1E9Cx",null)))),null)))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair("\u1E9Cp",(new sc_Pair("\u1E9Cq",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cp",(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cq",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),(new sc_Pair((new sc_Pair("\u1E9Cf",null)),null)))))))),(new sc_Pair((new sc_Pair("\u1E9Cf",null)),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair("\u1E9Cp",(new sc_Pair("\u1E9Cq",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cp",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cq",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),(new sc_Pair((new sc_Pair("\u1E9Cf",null)),null)))))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair("\u1E9Cp",null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cp",(new sc_Pair((new sc_Pair("\u1E9Cf",null)),(new sc_Pair((new sc_Pair("\u1E9Ct",null)),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cp",(new sc_Pair("\u1E9Cq",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cp",(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cq",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),(new sc_Pair((new sc_Pair("\u1E9Cf",null)),null)))))))),(new sc_Pair((new sc_Pair("\u1E9Ct",null)),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",(new sc_Pair("\u1E9Cc",null)))))))),(new sc_Pair("\u1E9Cd",(new sc_Pair("\u1E9Ce",null)))))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Ca",(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cb",(new sc_Pair("\u1E9Cd",(new sc_Pair("\u1E9Ce",null)))))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cc",(new sc_Pair("\u1E9Cd",(new sc_Pair("\u1E9Ce",null)))))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cx",null)))),null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Ca",null)))),(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cb",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cc",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cb",null)))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cc",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair((new sc_Pair("\u1E9Cplus-tree",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair((new sc_Pair("\u1E9Cplus-tree",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair((new sc_Pair("\u1E9Cplus-tree",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair("\u1E9Ca",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair((new sc_Pair("\u1E9Cplus-tree",(new sc_Pair((new sc_Pair("\u1E9Cplus-fringe",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Ca",null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair("\u1E9Cb",null)))),(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair("\u1E9Ca",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cz",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cexec",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cpds",(new sc_Pair("\u1E9Cenvrn",null)))))))),(new sc_Pair((new sc_Pair("\u1E9Cexec",(new sc_Pair("\u1E9Cy",(new sc_Pair((new sc_Pair("\u1E9Cexec",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cpds",(new sc_Pair("\u1E9Cenvrn",null)))))))),(new sc_Pair("\u1E9Cenvrn",null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmc-flatten",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair((new sc_Pair("\u1E9Cflatten",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair("\u1E9Cy",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cb",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair("\u1E9Cy",null)))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair("\u1E9Cx",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Ca",(new sc_Pair((new sc_Pair("\u1E9Cintersect",(new sc_Pair("\u1E9Cb",(new sc_Pair("\u1E9Cc",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cc",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cnth",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),(new sc_Pair("\u1E9Ci",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cexp",(new sc_Pair("\u1E9Ci",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cj",(new sc_Pair("\u1E9Ck",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair((new sc_Pair("\u1E9Cexp",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cj",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cexp",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Ck",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cexp",(new sc_Pair("\u1E9Ci",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cj",(new sc_Pair("\u1E9Ck",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cexp",(new sc_Pair((new sc_Pair("\u1E9Cexp",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cj",null)))))),(new sc_Pair("\u1E9Ck",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Creverse-loop",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair("\u1E9Cy",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Creverse-loop",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair("\u1E9Cx",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ccount-list",(new sc_Pair("\u1E9Cz",(new sc_Pair((new sc_Pair("\u1E9Csort-lp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Ccount-list",(new sc_Pair("\u1E9Cz",(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ccount-list",(new sc_Pair("\u1E9Cz",(new sc_Pair("\u1E9Cy",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cc",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cb",(new sc_Pair("\u1E9Cc",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cy",(new sc_Pair((new sc_Pair("\u1E9Cquotient",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cx",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair((new sc_Pair("\u1E9Cbig-plus1",(new sc_Pair("\u1E9Cl",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cbase",null)))))))),(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair("\u1E9Cl",(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair("\u1E9Ci",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair((new sc_Pair("\u1E9Cbig-plus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cbase",null)))))))))),(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ci",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cbase",null)))))),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Cy",(new sc_Pair((1),null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair((new sc_Pair("\u1E9Cquotient",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cj",null)))))),(new sc_Pair("\u1E9Ci",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Ci",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cj",null)))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cj",(new sc_Pair((1),null)))))),null)))),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair((new sc_Pair("\u1E9Cpower-rep",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Ci",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair((new sc_Pair("\u1E9Cbig-plus",(new sc_Pair((new sc_Pair("\u1E9Cpower-rep",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cpower-rep",(new sc_Pair("\u1E9Cj",(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),(new sc_Pair("\u1E9Cbase",null)))))))))),(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cj",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgcd",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cgcd",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cnth",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair("\u1E9Ci",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair((new sc_Pair("\u1E9Cnth",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Ci",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnth",(new sc_Pair("\u1E9Cb",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Ci",(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair("\u1E9Ca",null)))),null)))))),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cy",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cy",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cz",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cc",(new sc_Pair("\u1E9Cw",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cc",(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cw",(new sc_Pair("\u1E9Cx",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cb",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cc",null)))))),null)))))),(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cb",(new sc_Pair("\u1E9Cc",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))),(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair("\u1E9Cy",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cz",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cz",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cy",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cx",null)))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgcd",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cz",(new sc_Pair((new sc_Pair("\u1E9Cgcd",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cvalue",(new sc_Pair((new sc_Pair("\u1E9Cnormalize",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cvalue",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Ca",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cflatten",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cy",(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnlistp",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clistp",(new sc_Pair((new sc_Pair("\u1E9Cgopher",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Clistp",(new sc_Pair("\u1E9Cx",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Csamefringe",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cflatten",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cflatten",(new sc_Pair("\u1E9Cy",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgreatest-factor",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cy",(new sc_Pair((1),null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgreatest-factor",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((1),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((1),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair((new sc_Pair("\u1E9Cgreatest-factor",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cy",(new sc_Pair((1),null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cx",null)))),null)))),null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctimes-list",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair((new sc_Pair("\u1E9Ctimes-list",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Ctimes-list",(new sc_Pair("\u1E9Cy",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cprime-list",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cprime-list",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cprime-list",(new sc_Pair("\u1E9Cy",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cz",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cw",(new sc_Pair("\u1E9Cz",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cz",null)))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cz",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cw",(new sc_Pair((1),null)))))),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgreatereqp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cy",(new sc_Pair((1),null)))))),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((1),null)))))),(new sc_Pair(sc_list("\u1E9Cand", (new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Ca",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),null)))), (new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cb",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),null)))), (new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Ca",null)))), (new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cb",null)))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Csub1",(new sc_Pair("\u1E9Ca",null)))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Csub1",(new sc_Pair("\u1E9Cb",null)))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair((new sc_Pair("\u1E9Cdelete",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cl",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair("\u1E9Cl",null)))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cl",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Csort2",(new sc_Pair((new sc_Pair("\u1E9Cdelete",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cl",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cdelete",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Csort2",(new sc_Pair("\u1E9Cl",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdsort",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Csort2",(new sc_Pair("\u1E9Cx",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cx1",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cx2",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cx3",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cx4",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cx5",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cx6",(new sc_Pair("\u1E9Cx7",null)))))),null)))))),null)))))),null)))))),null)))))),null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((6),(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair("\u1E9Cx7",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((2),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cx",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cquotient",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((2),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cquotient",(new sc_Pair("\u1E9Cy",(new sc_Pair((2),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Csigma",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),(new sc_Pair("\u1E9Ci",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cquotient",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Ci",(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair("\u1E9Ci",null)))),null)))))),(new sc_Pair((2),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair("\u1E9Cy",null)))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair("\u1E9Cx",null)))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cz",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cz",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cz",null)))),null)))))),null)))))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair((new sc_Pair("\u1E9Cplus-tree",(new sc_Pair((new sc_Pair("\u1E9Cdelete",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair((new sc_Pair("\u1E9Cplus-tree",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Ca",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair((new sc_Pair("\u1E9Cplus-tree",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair("\u1E9Ca",null)))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair("\u1E9Cy",null)))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cx",null)))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cnth",(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),(new sc_Pair("\u1E9Ci",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Ci",null)))),(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clast",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Clistp",(new sc_Pair("\u1E9Cb",null)))),(new sc_Pair((new sc_Pair("\u1E9Clast",(new sc_Pair("\u1E9Cb",null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Clistp",(new sc_Pair("\u1E9Ca",null)))),(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair((new sc_Pair("\u1E9Ccar",(new sc_Pair((new sc_Pair("\u1E9Clast",(new sc_Pair("\u1E9Ca",null)))),null)))),(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair("\u1E9Cb",null)))))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cf",null)),(new sc_Pair("\u1E9Cz",null)))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cassignment",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Cassignedp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cassignment",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cassignment",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cb",null)))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ccar",(new sc_Pair((new sc_Pair("\u1E9Cgopher",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Clistp",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Ccar",(new sc_Pair((new sc_Pair("\u1E9Cflatten",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cflatten",(new sc_Pair((new sc_Pair("\u1E9Ccdr",(new sc_Pair((new sc_Pair("\u1E9Cgopher",(new sc_Pair("\u1E9Cx",null)))),null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Clistp",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Ccdr",(new sc_Pair((new sc_Pair("\u1E9Cflatten",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cquotient",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cx",null)))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cget",(new sc_Pair("\u1E9Cj",(new sc_Pair((new sc_Pair("\u1E9Cset",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cval",(new sc_Pair("\u1E9Cmem",null)))))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Ceqp",(new sc_Pair("\u1E9Cj",(new sc_Pair("\u1E9Ci",null)))))),(new sc_Pair("\u1E9Cval",(new sc_Pair((new sc_Pair("\u1E9Cget",(new sc_Pair("\u1E9Cj",(new sc_Pair("\u1E9Cmem",null)))))),null)))))))),null))))))));
+ (const_nboyer = (new sc_Pair((new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cf",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cc",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cf",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cc",(new sc_Pair("\u1E9Cd",null)))))),null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cz",(new sc_Pair("\u1E9Cf",(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),null)))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cu",(new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))))),(new sc_Pair((new sc_Pair("\u1E9Cw",(new sc_Pair("\u1E9Clessp",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Ca",(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair("\u1E9Cb",null)))),null)))))),null)))))))),null)))))))))));
+ BgL_nboyerzd2benchmarkzd2 = function() {
+ var args = null;
+ for (var sc_tmp = arguments.length - 1; sc_tmp >= 0; sc_tmp--) {
+ args = sc_cons(arguments[sc_tmp], args);
+ }
+ var n;
+ return ((n = ((args === null)?(0):(args.car))), (BgL_setupzd2boyerzd2()), (BgL_runzd2benchmarkzd2(("nboyer"+(sc_number2string(n))), (1), function() {
+ return (BgL_testzd2boyerzd2(n));
+ }, function(rewrites) {
+ if ((sc_isNumber(rewrites)))
+ switch (n) {
+ case (0):
+ return (rewrites===(95024));
+ break;
+ case (1):
+ return (rewrites===(591777));
+ break;
+ case (2):
+ return (rewrites===(1813975));
+ break;
+ case (3):
+ return (rewrites===(5375678));
+ break;
+ case (4):
+ return (rewrites===(16445406));
+ break;
+ case (5):
+ return (rewrites===(51507739));
+ break;
+ default:
+ return true;
+ break;
+ }
+ else
+ return false;
+ })));
+ };
+ BgL_setupzd2boyerzd2 = function() {
+ return true;
+ };
+ BgL_testzd2boyerzd2 = function() {
+ return true;
+ };
+ translate_term_nboyer = function(term) {
+ var lst;
+ return (!(term instanceof sc_Pair)?term:(new sc_Pair((BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer((term.car))), ((lst = (term.cdr)), ((lst === null)?null:(new sc_Pair((translate_term_nboyer((lst.car))), (translate_args_nboyer((lst.cdr))))))))));
+ };
+ translate_args_nboyer = function(lst) {
+ var sc_lst_5;
+ var term;
+ return ((lst === null)?null:(new sc_Pair(((term = (lst.car)), (!(term instanceof sc_Pair)?term:(new sc_Pair((BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer((term.car))), (translate_args_nboyer((term.cdr))))))), ((sc_lst_5 = (lst.cdr)), ((sc_lst_5 === null)?null:(new sc_Pair((translate_term_nboyer((sc_lst_5.car))), (translate_args_nboyer((sc_lst_5.cdr))))))))));
+ };
+ untranslate_term_nboyer = function(term) {
+ var optrOpnd;
+ var tail1131;
+ var L1127;
+ var falseHead1130;
+ var symbol_record;
+ if (!(term instanceof sc_Pair))
+ return term;
+ else
+ {
+ (falseHead1130 = (new sc_Pair(null, null)));
+ (L1127 = (term.cdr));
+ (tail1131 = falseHead1130);
+ while (!(L1127 === null)) {
+ {
+ (tail1131.cdr = (new sc_Pair((untranslate_term_nboyer((L1127.car))), null)));
+ (tail1131 = (tail1131.cdr));
+ (L1127 = (L1127.cdr));
+ }
+ }
+ (optrOpnd = (falseHead1130.cdr));
+ return (new sc_Pair(((symbol_record = (term.car)), (symbol_record[(0)])), optrOpnd));
+ }
+ };
+ BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer = function(sym) {
+ var r;
+ var x;
+ return ((x = (sc_assq(sym, BgL_sc_za2symbolzd2recordszd2alistza2_2z00_nboyer))), ((x!== false)?(x.cdr):((r = [sym, null]), (BgL_sc_za2symbolzd2recordszd2alistza2_2z00_nboyer = (new sc_Pair((new sc_Pair(sym, r)), BgL_sc_za2symbolzd2recordszd2alistza2_2z00_nboyer))), r)));
+ };
+ (BgL_sc_za2symbolzd2recordszd2alistza2_2z00_nboyer = null);
+ translate_alist_nboyer = function(alist) {
+ var sc_alist_6;
+ var term;
+ return ((alist === null)?null:(new sc_Pair((new sc_Pair((alist.car.car), ((term = (alist.car.cdr)), (!(term instanceof sc_Pair)?term:(new sc_Pair((BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer((term.car))), (translate_args_nboyer((term.cdr))))))))), ((sc_alist_6 = (alist.cdr)), ((sc_alist_6 === null)?null:(new sc_Pair((new sc_Pair((sc_alist_6.car.car), (translate_term_nboyer((sc_alist_6.car.cdr))))), (translate_alist_nboyer((sc_alist_6.cdr))))))))));
+ };
+ apply_subst_nboyer = function(alist, term) {
+ var lst;
+ var temp_temp;
+ return (!(term instanceof sc_Pair)?((temp_temp = (sc_assq(term, alist))), ((temp_temp!== false)?(temp_temp.cdr):term)):(new sc_Pair((term.car), ((lst = (term.cdr)), ((lst === null)?null:(new sc_Pair((apply_subst_nboyer(alist, (lst.car))), (apply_subst_lst_nboyer(alist, (lst.cdr))))))))));
+ };
+ apply_subst_lst_nboyer = function(alist, lst) {
+ var sc_lst_7;
+ return ((lst === null)?null:(new sc_Pair((apply_subst_nboyer(alist, (lst.car))), ((sc_lst_7 = (lst.cdr)), ((sc_lst_7 === null)?null:(new sc_Pair((apply_subst_nboyer(alist, (sc_lst_7.car))), (apply_subst_lst_nboyer(alist, (sc_lst_7.cdr))))))))));
+ };
+ tautologyp_nboyer = function(sc_x_11, true_lst, false_lst) {
+ var tmp1125;
+ var x;
+ var tmp1126;
+ var sc_x_8;
+ var sc_tmp1125_9;
+ var sc_tmp1126_10;
+ var sc_x_11;
+ var true_lst;
+ var false_lst;
+ while (true) {
+ if ((((sc_tmp1126_10 = (is_term_equal_nboyer(sc_x_11, true_term_nboyer))), ((sc_tmp1126_10!== false)?sc_tmp1126_10:(is_term_member_nboyer(sc_x_11, true_lst))))!== false))
+ return true;
+ else
+ if ((((sc_tmp1125_9 = (is_term_equal_nboyer(sc_x_11, false_term_nboyer))), ((sc_tmp1125_9!== false)?sc_tmp1125_9:(is_term_member_nboyer(sc_x_11, false_lst))))!== false))
+ return false;
+ else
+ if (!(sc_x_11 instanceof sc_Pair))
+ return false;
+ else
+ if (((sc_x_11.car)===if_constructor_nboyer))
+ if ((((sc_x_8 = (sc_x_11.cdr.car)), (tmp1126 = (is_term_equal_nboyer(sc_x_8, true_term_nboyer))), ((tmp1126!== false)?tmp1126:(is_term_member_nboyer(sc_x_8, true_lst))))!== false))
+ (sc_x_11 = (sc_x_11.cdr.cdr.car));
+ else
+ if ((((x = (sc_x_11.cdr.car)), (tmp1125 = (is_term_equal_nboyer(x, false_term_nboyer))), ((tmp1125!== false)?tmp1125:(is_term_member_nboyer(x, false_lst))))!== false))
+ (sc_x_11 = (sc_x_11.cdr.cdr.cdr.car));
+ else
+ if (((tautologyp_nboyer((sc_x_11.cdr.cdr.car), (new sc_Pair((sc_x_11.cdr.car), true_lst)), false_lst))!== false))
+ {
+ (false_lst = (new sc_Pair((sc_x_11.cdr.car), false_lst)));
+ (sc_x_11 = (sc_x_11.cdr.cdr.cdr.car));
+ }
+ else
+ return false;
+ else
+ return false;
+ }
+ };
+ (if_constructor_nboyer = "\u1E9C*");
+ (rewrite_count_nboyer = (0));
+ rewrite_nboyer = function(term) {
+ var term2;
+ var sc_term_12;
+ var lst;
+ var symbol_record;
+ var sc_lst_13;
+ {
+ (++rewrite_count_nboyer);
+ if (!(term instanceof sc_Pair))
+ return term;
+ else
+ {
+ (sc_term_12 = (new sc_Pair((term.car), ((sc_lst_13 = (term.cdr)), ((sc_lst_13 === null)?null:(new sc_Pair((rewrite_nboyer((sc_lst_13.car))), (rewrite_args_nboyer((sc_lst_13.cdr))))))))));
+ (lst = ((symbol_record = (term.car)), (symbol_record[(1)])));
+ while (true) {
+ if ((lst === null))
+ return sc_term_12;
+ else
+ if ((((term2 = ((lst.car).cdr.car)), (unify_subst_nboyer = null), (one_way_unify1_nboyer(sc_term_12, term2)))!== false))
+ return (rewrite_nboyer((apply_subst_nboyer(unify_subst_nboyer, ((lst.car).cdr.cdr.car)))));
+ else
+ (lst = (lst.cdr));
+ }
+ }
+ }
+ };
+ rewrite_args_nboyer = function(lst) {
+ var sc_lst_14;
+ return ((lst === null)?null:(new sc_Pair((rewrite_nboyer((lst.car))), ((sc_lst_14 = (lst.cdr)), ((sc_lst_14 === null)?null:(new sc_Pair((rewrite_nboyer((sc_lst_14.car))), (rewrite_args_nboyer((sc_lst_14.cdr))))))))));
+ };
+ (unify_subst_nboyer = "\u1E9C*");
+ one_way_unify1_nboyer = function(term1, term2) {
+ var lst1;
+ var lst2;
+ var temp_temp;
+ if (!(term2 instanceof sc_Pair))
+ {
+ (temp_temp = (sc_assq(term2, unify_subst_nboyer)));
+ if ((temp_temp!== false))
+ return (is_term_equal_nboyer(term1, (temp_temp.cdr)));
+ else
+ if ((sc_isNumber(term2)))
+ return (sc_isEqual(term1, term2));
+ else
+ {
+ (unify_subst_nboyer = (new sc_Pair((new sc_Pair(term2, term1)), unify_subst_nboyer)));
+ return true;
+ }
+ }
+ else
+ if (!(term1 instanceof sc_Pair))
+ return false;
+ else
+ if (((term1.car)===(term2.car)))
+ {
+ (lst1 = (term1.cdr));
+ (lst2 = (term2.cdr));
+ while (true) {
+ if ((lst1 === null))
+ return (lst2 === null);
+ else
+ if ((lst2 === null))
+ return false;
+ else
+ if (((one_way_unify1_nboyer((lst1.car), (lst2.car)))!== false))
+ {
+ (lst1 = (lst1.cdr));
+ (lst2 = (lst2.cdr));
+ }
+ else
+ return false;
+ }
+ }
+ else
+ return false;
+ };
+ (false_term_nboyer = "\u1E9C*");
+ (true_term_nboyer = "\u1E9C*");
+ trans_of_implies1_nboyer = function(n) {
+ var sc_n_15;
+ return ((sc_isEqual(n, (1)))?(sc_list("\u1E9Cimplies", (0), (1))):(sc_list("\u1E9Cand", (sc_list("\u1E9Cimplies", (n-(1)), n)), ((sc_n_15 = (n-(1))), ((sc_isEqual(sc_n_15, (1)))?(sc_list("\u1E9Cimplies", (0), (1))):(sc_list("\u1E9Cand", (sc_list("\u1E9Cimplies", (sc_n_15-(1)), sc_n_15)), (trans_of_implies1_nboyer((sc_n_15-(1)))))))))));
+ };
+ is_term_equal_nboyer = function(x, y) {
+ var lst1;
+ var lst2;
+ var r2;
+ var r1;
+ if ((x instanceof sc_Pair))
+ if ((y instanceof sc_Pair))
+ if ((((r1 = (x.car)), (r2 = (y.car)), (r1===r2))!== false))
+ {
+ (lst1 = (x.cdr));
+ (lst2 = (y.cdr));
+ while (true) {
+ if ((lst1 === null))
+ return (lst2 === null);
+ else
+ if ((lst2 === null))
+ return false;
+ else
+ if (((is_term_equal_nboyer((lst1.car), (lst2.car)))!== false))
+ {
+ (lst1 = (lst1.cdr));
+ (lst2 = (lst2.cdr));
+ }
+ else
+ return false;
+ }
+ }
+ else
+ return false;
+ else
+ return false;
+ else
+ return (sc_isEqual(x, y));
+ };
+ is_term_member_nboyer = function(x, lst) {
+ var x;
+ var lst;
+ while (true) {
+ if ((lst === null))
+ return false;
+ else
+ if (((is_term_equal_nboyer(x, (lst.car)))!== false))
+ return true;
+ else
+ (lst = (lst.cdr));
+ }
+ };
+ BgL_setupzd2boyerzd2 = function() {
+ var symbol_record;
+ var value;
+ var BgL_sc_symbolzd2record_16zd2;
+ var sym;
+ var sc_sym_17;
+ var term;
+ var lst;
+ var sc_term_18;
+ var sc_term_19;
+ {
+ (BgL_sc_za2symbolzd2recordszd2alistza2_2z00_nboyer = null);
+ (if_constructor_nboyer = (BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer("\u1E9Cif")));
+ (false_term_nboyer = ((sc_term_19 = (new sc_Pair("\u1E9Cf",null))), (!(sc_term_19 instanceof sc_Pair)?sc_term_19:(new sc_Pair((BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer((sc_term_19.car))), (translate_args_nboyer((sc_term_19.cdr))))))));
+ (true_term_nboyer = ((sc_term_18 = (new sc_Pair("\u1E9Ct",null))), (!(sc_term_18 instanceof sc_Pair)?sc_term_18:(new sc_Pair((BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer((sc_term_18.car))), (translate_args_nboyer((sc_term_18.cdr))))))));
+ (lst = sc_const_3_nboyer);
+ while (!(lst === null)) {
+ {
+ (term = (lst.car));
+ if (((term instanceof sc_Pair)&&(((term.car)==="\u1E9Cequal")&&((term.cdr.car) instanceof sc_Pair))))
+ {
+ (sc_sym_17 = ((term.cdr.car).car));
+ (value = (new sc_Pair((!(term instanceof sc_Pair)?term:(new sc_Pair((BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer((term.car))), (translate_args_nboyer((term.cdr)))))), ((sym = ((term.cdr.car).car)), (BgL_sc_symbolzd2record_16zd2 = (BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer(sym))), (BgL_sc_symbolzd2record_16zd2[(1)])))));
+ (symbol_record = (BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer(sc_sym_17)));
+ (symbol_record[(1)] = value);
+ }
+ else
+ (sc_error("ADD-LEMMA did not like term: ", term));
+ (lst = (lst.cdr));
+ }
+ }
+ return true;
+ }
+ };
+ BgL_testzd2boyerzd2 = function(n) {
+ var optrOpnd;
+ var term;
+ var sc_n_20;
+ var answer;
+ var sc_term_21;
+ var sc_term_22;
+ {
+ (rewrite_count_nboyer = (0));
+ (term = sc_const_4_nboyer);
+ (sc_n_20 = n);
+ while (!(sc_n_20=== 0)) {
+ {
+ (term = (sc_list("\u1E9Cor", term, (new sc_Pair("\u1E9Cf",null)))));
+ (--sc_n_20);
+ }
+ }
+ (sc_term_22 = term);
+ if (!(sc_term_22 instanceof sc_Pair))
+ (optrOpnd = sc_term_22);
+ else
+ (optrOpnd = (new sc_Pair((BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer((sc_term_22.car))), (translate_args_nboyer((sc_term_22.cdr))))));
+ (sc_term_21 = (apply_subst_nboyer(((const_nboyer === null)?null:(new sc_Pair((new sc_Pair((const_nboyer.car.car), (translate_term_nboyer((const_nboyer.car.cdr))))), (translate_alist_nboyer((const_nboyer.cdr)))))), optrOpnd)));
+ (answer = (tautologyp_nboyer((rewrite_nboyer(sc_term_21)), null, null)));
+ (sc_write(rewrite_count_nboyer));
+ (sc_display(" rewrites"));
+ (sc_newline());
+ if ((answer!== false))
+ return rewrite_count_nboyer;
+ else
+ return false;
+ }
+ };
+}
+/* Exported Variables */
+var BgL_parsezd2ze3nbzd2treesze3;
+var BgL_earleyzd2benchmarkzd2;
+var BgL_parsezd2ze3parsedzf3zc2;
+var test2;
+var BgL_parsezd2ze3treesz31;
+var BgL_makezd2parserzd2;
+/* End Exports */
+
+var const_earley;
+{
+ (const_earley = (new sc_Pair((new sc_Pair("\u1E9Cs",(new sc_Pair((new sc_Pair("\u1E9Ca",null)),(new sc_Pair((new sc_Pair("\u1E9Cs",(new sc_Pair("\u1E9Cs",null)))),null)))))),null)));
+ BgL_makezd2parserzd2 = function(grammar, lexer) {
+ var i;
+ var parser_descr;
+ var def_loop;
+ var nb_nts;
+ var names;
+ var steps;
+ var predictors;
+ var enders;
+ var starters;
+ var nts;
+ var sc_names_1;
+ var sc_steps_2;
+ var sc_predictors_3;
+ var sc_enders_4;
+ var sc_starters_5;
+ var nb_confs;
+ var BgL_sc_defzd2loop_6zd2;
+ var BgL_sc_nbzd2nts_7zd2;
+ var sc_nts_8;
+ var BgL_sc_defzd2loop_9zd2;
+ var ind;
+ {
+ ind = function(nt, sc_nts_10) {
+ var i;
+ {
+ (i = ((sc_nts_10.length)-(1)));
+ while (true) {
+ if ((i>=(0)))
+ if ((sc_isEqual((sc_nts_10[i]), nt)))
+ return i;
+ else
+ (--i);
+ else
+ return false;
+ }
+ }
+ };
+ (sc_nts_8 = ((BgL_sc_defzd2loop_9zd2 = function(defs, sc_nts_11) {
+ var rule_loop;
+ var head;
+ var def;
+ return ((defs instanceof sc_Pair)?((def = (defs.car)), (head = (def.car)), (rule_loop = function(rules, sc_nts_12) {
+ var nt;
+ var l;
+ var sc_nts_13;
+ var rule;
+ if ((rules instanceof sc_Pair))
+ {
+ (rule = (rules.car));
+ (l = rule);
+ (sc_nts_13 = sc_nts_12);
+ while ((l instanceof sc_Pair)) {
+ {
+ (nt = (l.car));
+ (l = (l.cdr));
+ (sc_nts_13 = (((sc_member(nt, sc_nts_13))!== false)?sc_nts_13:(new sc_Pair(nt, sc_nts_13))));
+ }
+ }
+ return (rule_loop((rules.cdr), sc_nts_13));
+ }
+ else
+ return (BgL_sc_defzd2loop_9zd2((defs.cdr), sc_nts_12));
+ }), (rule_loop((def.cdr), (((sc_member(head, sc_nts_11))!== false)?sc_nts_11:(new sc_Pair(head, sc_nts_11)))))):(sc_list2vector((sc_reverse(sc_nts_11)))));
+ }), (BgL_sc_defzd2loop_9zd2(grammar, null))));
+ (BgL_sc_nbzd2nts_7zd2 = (sc_nts_8.length));
+ (nb_confs = (((BgL_sc_defzd2loop_6zd2 = function(defs, BgL_sc_nbzd2confs_14zd2) {
+ var rule_loop;
+ var def;
+ return ((defs instanceof sc_Pair)?((def = (defs.car)), (rule_loop = function(rules, BgL_sc_nbzd2confs_15zd2) {
+ var l;
+ var BgL_sc_nbzd2confs_16zd2;
+ var rule;
+ if ((rules instanceof sc_Pair))
+ {
+ (rule = (rules.car));
+ (l = rule);
+ (BgL_sc_nbzd2confs_16zd2 = BgL_sc_nbzd2confs_15zd2);
+ while ((l instanceof sc_Pair)) {
+ {
+ (l = (l.cdr));
+ (++BgL_sc_nbzd2confs_16zd2);
+ }
+ }
+ return (rule_loop((rules.cdr), (BgL_sc_nbzd2confs_16zd2+(1))));
+ }
+ else
+ return (BgL_sc_defzd2loop_6zd2((defs.cdr), BgL_sc_nbzd2confs_15zd2));
+ }), (rule_loop((def.cdr), BgL_sc_nbzd2confs_14zd2))):BgL_sc_nbzd2confs_14zd2);
+ }), (BgL_sc_defzd2loop_6zd2(grammar, (0))))+BgL_sc_nbzd2nts_7zd2));
+ (sc_starters_5 = (sc_makeVector(BgL_sc_nbzd2nts_7zd2, null)));
+ (sc_enders_4 = (sc_makeVector(BgL_sc_nbzd2nts_7zd2, null)));
+ (sc_predictors_3 = (sc_makeVector(BgL_sc_nbzd2nts_7zd2, null)));
+ (sc_steps_2 = (sc_makeVector(nb_confs, false)));
+ (sc_names_1 = (sc_makeVector(nb_confs, false)));
+ (nts = sc_nts_8);
+ (starters = sc_starters_5);
+ (enders = sc_enders_4);
+ (predictors = sc_predictors_3);
+ (steps = sc_steps_2);
+ (names = sc_names_1);
+ (nb_nts = (sc_nts_8.length));
+ (i = (nb_nts-(1)));
+ while ((i>=(0))) {
+ {
+ (sc_steps_2[i] = (i-nb_nts));
+ (sc_names_1[i] = (sc_list((sc_nts_8[i]), (0))));
+ (sc_enders_4[i] = (sc_list(i)));
+ (--i);
+ }
+ }
+ def_loop = function(defs, conf) {
+ var rule_loop;
+ var head;
+ var def;
+ return ((defs instanceof sc_Pair)?((def = (defs.car)), (head = (def.car)), (rule_loop = function(rules, conf, rule_num) {
+ var i;
+ var sc_i_17;
+ var nt;
+ var l;
+ var sc_conf_18;
+ var sc_i_19;
+ var rule;
+ if ((rules instanceof sc_Pair))
+ {
+ (rule = (rules.car));
+ (names[conf] = (sc_list(head, rule_num)));
+ (sc_i_19 = (ind(head, nts)));
+ (starters[sc_i_19] = (new sc_Pair(conf, (starters[sc_i_19]))));
+ (l = rule);
+ (sc_conf_18 = conf);
+ while ((l instanceof sc_Pair)) {
+ {
+ (nt = (l.car));
+ (steps[sc_conf_18] = (ind(nt, nts)));
+ (sc_i_17 = (ind(nt, nts)));
+ (predictors[sc_i_17] = (new sc_Pair(sc_conf_18, (predictors[sc_i_17]))));
+ (l = (l.cdr));
+ (++sc_conf_18);
+ }
+ }
+ (steps[sc_conf_18] = ((ind(head, nts))-nb_nts));
+ (i = (ind(head, nts)));
+ (enders[i] = (new sc_Pair(sc_conf_18, (enders[i]))));
+ return (rule_loop((rules.cdr), (sc_conf_18+(1)), (rule_num+(1))));
+ }
+ else
+ return (def_loop((defs.cdr), conf));
+ }), (rule_loop((def.cdr), conf, (1)))):undefined);
+ };
+ (def_loop(grammar, (sc_nts_8.length)));
+ (parser_descr = [lexer, sc_nts_8, sc_starters_5, sc_enders_4, sc_predictors_3, sc_steps_2, sc_names_1]);
+ return function(input) {
+ var optrOpnd;
+ var sc_optrOpnd_20;
+ var sc_optrOpnd_21;
+ var sc_optrOpnd_22;
+ var loop1;
+ var BgL_sc_stateza2_23za2;
+ var toks;
+ var BgL_sc_nbzd2nts_24zd2;
+ var sc_steps_25;
+ var sc_enders_26;
+ var state_num;
+ var BgL_sc_statesza2_27za2;
+ var states;
+ var i;
+ var conf;
+ var l;
+ var tok_nts;
+ var sc_i_28;
+ var sc_i_29;
+ var l1;
+ var l2;
+ var tok;
+ var tail1129;
+ var L1125;
+ var goal_enders;
+ var BgL_sc_statesza2_30za2;
+ var BgL_sc_nbzd2nts_31zd2;
+ var BgL_sc_nbzd2confs_32zd2;
+ var nb_toks;
+ var goal_starters;
+ var sc_states_33;
+ var BgL_sc_nbzd2confs_34zd2;
+ var BgL_sc_nbzd2toks_35zd2;
+ var sc_toks_36;
+ var falseHead1128;
+ var sc_names_37;
+ var sc_steps_38;
+ var sc_predictors_39;
+ var sc_enders_40;
+ var sc_starters_41;
+ var sc_nts_42;
+ var lexer;
+ var sc_ind_43;
+ var make_states;
+ var BgL_sc_confzd2setzd2getza2_44za2;
+ var conf_set_merge_new_bang;
+ var conf_set_adjoin;
+ var BgL_sc_confzd2setzd2adjoinza2_45za2;
+ var BgL_sc_confzd2setzd2adjoinza2za2_46z00;
+ var conf_set_union;
+ var forw;
+ var is_parsed;
+ var deriv_trees;
+ var BgL_sc_derivzd2treesza2_47z70;
+ var nb_deriv_trees;
+ var BgL_sc_nbzd2derivzd2treesza2_48za2;
+ {
+ sc_ind_43 = function(nt, sc_nts_49) {
+ var i;
+ {
+ (i = ((sc_nts_49.length)-(1)));
+ while (true) {
+ if ((i>=(0)))
+ if ((sc_isEqual((sc_nts_49[i]), nt)))
+ return i;
+ else
+ (--i);
+ else
+ return false;
+ }
+ }
+ };
+ make_states = function(BgL_sc_nbzd2toks_50zd2, BgL_sc_nbzd2confs_51zd2) {
+ var v;
+ var i;
+ var sc_states_52;
+ {
+ (sc_states_52 = (sc_makeVector((BgL_sc_nbzd2toks_50zd2+(1)), false)));
+ (i = BgL_sc_nbzd2toks_50zd2);
+ while ((i>=(0))) {
+ {
+ (v = (sc_makeVector((BgL_sc_nbzd2confs_51zd2+(1)), false)));
+ (v[(0)] = (-1));
+ (sc_states_52[i] = v);
+ (--i);
+ }
+ }
+ return sc_states_52;
+ }
+ };
+ BgL_sc_confzd2setzd2getza2_44za2 = function(state, BgL_sc_statezd2num_53zd2, sc_conf_54) {
+ var conf_set;
+ var BgL_sc_confzd2set_55zd2;
+ return ((BgL_sc_confzd2set_55zd2 = (state[(sc_conf_54+(1))])), ((BgL_sc_confzd2set_55zd2!== false)?BgL_sc_confzd2set_55zd2:((conf_set = (sc_makeVector((BgL_sc_statezd2num_53zd2+(6)), false))), (conf_set[(1)] = (-3)), (conf_set[(2)] = (-1)), (conf_set[(3)] = (-1)), (conf_set[(4)] = (-1)), (state[(sc_conf_54+(1))] = conf_set), conf_set)));
+ };
+ conf_set_merge_new_bang = function(conf_set) {
+ return ((conf_set[((conf_set[(1)])+(5))] = (conf_set[(4)])), (conf_set[(1)] = (conf_set[(3)])), (conf_set[(3)] = (-1)), (conf_set[(4)] = (-1)));
+ };
+ conf_set_adjoin = function(state, conf_set, sc_conf_56, i) {
+ var tail;
+ return ((tail = (conf_set[(3)])), (conf_set[(i+(5))] = (-1)), (conf_set[(tail+(5))] = i), (conf_set[(3)] = i), ((tail<(0))?((conf_set[(0)] = (state[(0)])), (state[(0)] = sc_conf_56)):undefined));
+ };
+ BgL_sc_confzd2setzd2adjoinza2_45za2 = function(sc_states_57, BgL_sc_statezd2num_58zd2, l, i) {
+ var conf_set;
+ var sc_conf_59;
+ var l1;
+ var state;
+ {
+ (state = (sc_states_57[BgL_sc_statezd2num_58zd2]));
+ (l1 = l);
+ while ((l1 instanceof sc_Pair)) {
+ {
+ (sc_conf_59 = (l1.car));
+ (conf_set = (BgL_sc_confzd2setzd2getza2_44za2(state, BgL_sc_statezd2num_58zd2, sc_conf_59)));
+ if (((conf_set[(i+(5))])=== false))
+ {
+ (conf_set_adjoin(state, conf_set, sc_conf_59, i));
+ (l1 = (l1.cdr));
+ }
+ else
+ (l1 = (l1.cdr));
+ }
+ }
+ return undefined;
+ }
+ };
+ BgL_sc_confzd2setzd2adjoinza2za2_46z00 = function(sc_states_60, BgL_sc_statesza2_61za2, BgL_sc_statezd2num_62zd2, sc_conf_63, i) {
+ var BgL_sc_confzd2setza2_64z70;
+ var BgL_sc_stateza2_65za2;
+ var conf_set;
+ var state;
+ return ((state = (sc_states_60[BgL_sc_statezd2num_62zd2])), ((((conf_set = (state[(sc_conf_63+(1))])), ((conf_set!== false)?(conf_set[(i+(5))]):false))!== false)?((BgL_sc_stateza2_65za2 = (BgL_sc_statesza2_61za2[BgL_sc_statezd2num_62zd2])), (BgL_sc_confzd2setza2_64z70 = (BgL_sc_confzd2setzd2getza2_44za2(BgL_sc_stateza2_65za2, BgL_sc_statezd2num_62zd2, sc_conf_63))), (((BgL_sc_confzd2setza2_64z70[(i+(5))])=== false)?(conf_set_adjoin(BgL_sc_stateza2_65za2, BgL_sc_confzd2setza2_64z70, sc_conf_63, i)):undefined), true):false));
+ };
+ conf_set_union = function(state, conf_set, sc_conf_66, other_set) {
+ var i;
+ {
+ (i = (other_set[(2)]));
+ while ((i>=(0))) {
+ if (((conf_set[(i+(5))])=== false))
+ {
+ (conf_set_adjoin(state, conf_set, sc_conf_66, i));
+ (i = (other_set[(i+(5))]));
+ }
+ else
+ (i = (other_set[(i+(5))]));
+ }
+ return undefined;
+ }
+ };
+ forw = function(sc_states_67, BgL_sc_statezd2num_68zd2, sc_starters_69, sc_enders_70, sc_predictors_71, sc_steps_72, sc_nts_73) {
+ var next_set;
+ var next;
+ var conf_set;
+ var ender;
+ var l;
+ var starter_set;
+ var starter;
+ var sc_l_74;
+ var sc_loop1_75;
+ var head;
+ var BgL_sc_confzd2set_76zd2;
+ var BgL_sc_statezd2num_77zd2;
+ var state;
+ var sc_states_78;
+ var preds;
+ var BgL_sc_confzd2set_79zd2;
+ var step;
+ var sc_conf_80;
+ var BgL_sc_nbzd2nts_81zd2;
+ var sc_state_82;
+ {
+ (sc_state_82 = (sc_states_67[BgL_sc_statezd2num_68zd2]));
+ (BgL_sc_nbzd2nts_81zd2 = (sc_nts_73.length));
+ while (true) {
+ {
+ (sc_conf_80 = (sc_state_82[(0)]));
+ if ((sc_conf_80>=(0)))
+ {
+ (step = (sc_steps_72[sc_conf_80]));
+ (BgL_sc_confzd2set_79zd2 = (sc_state_82[(sc_conf_80+(1))]));
+ (head = (BgL_sc_confzd2set_79zd2[(4)]));
+ (sc_state_82[(0)] = (BgL_sc_confzd2set_79zd2[(0)]));
+ (conf_set_merge_new_bang(BgL_sc_confzd2set_79zd2));
+ if ((step>=(0)))
+ {
+ (sc_l_74 = (sc_starters_69[step]));
+ while ((sc_l_74 instanceof sc_Pair)) {
+ {
+ (starter = (sc_l_74.car));
+ (starter_set = (BgL_sc_confzd2setzd2getza2_44za2(sc_state_82, BgL_sc_statezd2num_68zd2, starter)));
+ if (((starter_set[(BgL_sc_statezd2num_68zd2+(5))])=== false))
+ {
+ (conf_set_adjoin(sc_state_82, starter_set, starter, BgL_sc_statezd2num_68zd2));
+ (sc_l_74 = (sc_l_74.cdr));
+ }
+ else
+ (sc_l_74 = (sc_l_74.cdr));
+ }
+ }
+ (l = (sc_enders_70[step]));
+ while ((l instanceof sc_Pair)) {
+ {
+ (ender = (l.car));
+ if ((((conf_set = (sc_state_82[(ender+(1))])), ((conf_set!== false)?(conf_set[(BgL_sc_statezd2num_68zd2+(5))]):false))!== false))
+ {
+ (next = (sc_conf_80+(1)));
+ (next_set = (BgL_sc_confzd2setzd2getza2_44za2(sc_state_82, BgL_sc_statezd2num_68zd2, next)));
+ (conf_set_union(sc_state_82, next_set, next, BgL_sc_confzd2set_79zd2));
+ (l = (l.cdr));
+ }
+ else
+ (l = (l.cdr));
+ }
+ }
+ }
+ else
+ {
+ (preds = (sc_predictors_71[(step+BgL_sc_nbzd2nts_81zd2)]));
+ (sc_states_78 = sc_states_67);
+ (state = sc_state_82);
+ (BgL_sc_statezd2num_77zd2 = BgL_sc_statezd2num_68zd2);
+ (BgL_sc_confzd2set_76zd2 = BgL_sc_confzd2set_79zd2);
+ sc_loop1_75 = function(l) {
+ var sc_state_83;
+ var BgL_sc_nextzd2set_84zd2;
+ var sc_next_85;
+ var pred_set;
+ var i;
+ var pred;
+ if ((l instanceof sc_Pair))
+ {
+ (pred = (l.car));
+ (i = head);
+ while ((i>=(0))) {
+ {
+ (pred_set = ((sc_state_83 = (sc_states_78[i])), (sc_state_83[(pred+(1))])));
+ if ((pred_set!== false))
+ {
+ (sc_next_85 = (pred+(1)));
+ (BgL_sc_nextzd2set_84zd2 = (BgL_sc_confzd2setzd2getza2_44za2(state, BgL_sc_statezd2num_77zd2, sc_next_85)));
+ (conf_set_union(state, BgL_sc_nextzd2set_84zd2, sc_next_85, pred_set));
+ }
+ (i = (BgL_sc_confzd2set_76zd2[(i+(5))]));
+ }
+ }
+ return (sc_loop1_75((l.cdr)));
+ }
+ else
+ return undefined;
+ };
+ (sc_loop1_75(preds));
+ }
+ }
+ else
+ return undefined;
+ }
+ }
+ }
+ };
+ is_parsed = function(nt, i, j, sc_nts_86, sc_enders_87, sc_states_88) {
+ var conf_set;
+ var state;
+ var sc_conf_89;
+ var l;
+ var BgL_sc_ntza2_90za2;
+ {
+ (BgL_sc_ntza2_90za2 = (sc_ind_43(nt, sc_nts_86)));
+ if ((BgL_sc_ntza2_90za2!== false))
+ {
+ (sc_nts_86.length);
+ (l = (sc_enders_87[BgL_sc_ntza2_90za2]));
+ while (true) {
+ if ((l instanceof sc_Pair))
+ {
+ (sc_conf_89 = (l.car));
+ if ((((state = (sc_states_88[j])), (conf_set = (state[(sc_conf_89+(1))])), ((conf_set!== false)?(conf_set[(i+(5))]):false))!== false))
+ return true;
+ else
+ (l = (l.cdr));
+ }
+ else
+ return false;
+ }
+ }
+ else
+ return false;
+ }
+ };
+ deriv_trees = function(sc_conf_91, i, j, sc_enders_92, sc_steps_93, sc_names_94, sc_toks_95, sc_states_96, BgL_sc_nbzd2nts_97zd2) {
+ var sc_loop1_98;
+ var prev;
+ var name;
+ return ((name = (sc_names_94[sc_conf_91])), ((name!== false)?((sc_conf_91<BgL_sc_nbzd2nts_97zd2)?(sc_list((sc_list(name, ((sc_toks_95[i]).car))))):(sc_list((sc_list(name))))):((prev = (sc_conf_91-(1))), (sc_loop1_98 = function(l1, l2) {
+ var loop2;
+ var ender_set;
+ var state;
+ var ender;
+ var l1;
+ var l2;
+ while (true) {
+ if ((l1 instanceof sc_Pair))
+ {
+ (ender = (l1.car));
+ (ender_set = ((state = (sc_states_96[j])), (state[(ender+(1))])));
+ if ((ender_set!== false))
+ {
+ loop2 = function(k, l2) {
+ var loop3;
+ var ender_trees;
+ var prev_trees;
+ var conf_set;
+ var sc_state_99;
+ var k;
+ var l2;
+ while (true) {
+ if ((k>=(0)))
+ if (((k>=i)&&(((sc_state_99 = (sc_states_96[k])), (conf_set = (sc_state_99[(prev+(1))])), ((conf_set!== false)?(conf_set[(i+(5))]):false))!== false)))
+ {
+ (prev_trees = (deriv_trees(prev, i, k, sc_enders_92, sc_steps_93, sc_names_94, sc_toks_95, sc_states_96, BgL_sc_nbzd2nts_97zd2)));
+ (ender_trees = (deriv_trees(ender, k, j, sc_enders_92, sc_steps_93, sc_names_94, sc_toks_95, sc_states_96, BgL_sc_nbzd2nts_97zd2)));
+ loop3 = function(l3, l2) {
+ var l4;
+ var sc_l2_100;
+ var ender_tree;
+ if ((l3 instanceof sc_Pair))
+ {
+ (ender_tree = (sc_list((l3.car))));
+ (l4 = prev_trees);
+ (sc_l2_100 = l2);
+ while ((l4 instanceof sc_Pair)) {
+ {
+ (sc_l2_100 = (new sc_Pair((sc_append((l4.car), ender_tree)), sc_l2_100)));
+ (l4 = (l4.cdr));
+ }
+ }
+ return (loop3((l3.cdr), sc_l2_100));
+ }
+ else
+ return (loop2((ender_set[(k+(5))]), l2));
+ };
+ return (loop3(ender_trees, l2));
+ }
+ else
+ (k = (ender_set[(k+(5))]));
+ else
+ return (sc_loop1_98((l1.cdr), l2));
+ }
+ };
+ return (loop2((ender_set[(2)]), l2));
+ }
+ else
+ (l1 = (l1.cdr));
+ }
+ else
+ return l2;
+ }
+ }), (sc_loop1_98((sc_enders_92[(sc_steps_93[prev])]), null)))));
+ };
+ BgL_sc_derivzd2treesza2_47z70 = function(nt, i, j, sc_nts_101, sc_enders_102, sc_steps_103, sc_names_104, sc_toks_105, sc_states_106) {
+ var conf_set;
+ var state;
+ var sc_conf_107;
+ var l;
+ var trees;
+ var BgL_sc_nbzd2nts_108zd2;
+ var BgL_sc_ntza2_109za2;
+ {
+ (BgL_sc_ntza2_109za2 = (sc_ind_43(nt, sc_nts_101)));
+ if ((BgL_sc_ntza2_109za2!== false))
+ {
+ (BgL_sc_nbzd2nts_108zd2 = (sc_nts_101.length));
+ (l = (sc_enders_102[BgL_sc_ntza2_109za2]));
+ (trees = null);
+ while ((l instanceof sc_Pair)) {
+ {
+ (sc_conf_107 = (l.car));
+ if ((((state = (sc_states_106[j])), (conf_set = (state[(sc_conf_107+(1))])), ((conf_set!== false)?(conf_set[(i+(5))]):false))!== false))
+ {
+ (l = (l.cdr));
+ (trees = (sc_append((deriv_trees(sc_conf_107, i, j, sc_enders_102, sc_steps_103, sc_names_104, sc_toks_105, sc_states_106, BgL_sc_nbzd2nts_108zd2)), trees)));
+ }
+ else
+ (l = (l.cdr));
+ }
+ }
+ return trees;
+ }
+ else
+ return false;
+ }
+ };
+ nb_deriv_trees = function(sc_conf_110, i, j, sc_enders_111, sc_steps_112, sc_toks_113, sc_states_114, BgL_sc_nbzd2nts_115zd2) {
+ var sc_loop1_116;
+ var tmp1124;
+ var prev;
+ return ((prev = (sc_conf_110-(1))), ((((tmp1124 = (sc_conf_110<BgL_sc_nbzd2nts_115zd2)), ((tmp1124!== false)?tmp1124:((sc_steps_112[prev])<(0))))!== false)?(1):((sc_loop1_116 = function(l, sc_n_118) {
+ var nb_ender_trees;
+ var nb_prev_trees;
+ var conf_set;
+ var state;
+ var k;
+ var n;
+ var ender_set;
+ var sc_state_117;
+ var ender;
+ var l;
+ var sc_n_118;
+ while (true) {
+ if ((l instanceof sc_Pair))
+ {
+ (ender = (l.car));
+ (ender_set = ((sc_state_117 = (sc_states_114[j])), (sc_state_117[(ender+(1))])));
+ if ((ender_set!== false))
+ {
+ (k = (ender_set[(2)]));
+ (n = sc_n_118);
+ while ((k>=(0))) {
+ if (((k>=i)&&(((state = (sc_states_114[k])), (conf_set = (state[(prev+(1))])), ((conf_set!== false)?(conf_set[(i+(5))]):false))!== false)))
+ {
+ (nb_prev_trees = (nb_deriv_trees(prev, i, k, sc_enders_111, sc_steps_112, sc_toks_113, sc_states_114, BgL_sc_nbzd2nts_115zd2)));
+ (nb_ender_trees = (nb_deriv_trees(ender, k, j, sc_enders_111, sc_steps_112, sc_toks_113, sc_states_114, BgL_sc_nbzd2nts_115zd2)));
+ (k = (ender_set[(k+(5))]));
+ (n +=(nb_prev_trees*nb_ender_trees));
+ }
+ else
+ (k = (ender_set[(k+(5))]));
+ }
+ return (sc_loop1_116((l.cdr), n));
+ }
+ else
+ (l = (l.cdr));
+ }
+ else
+ return sc_n_118;
+ }
+ }), (sc_loop1_116((sc_enders_111[(sc_steps_112[prev])]), (0))))));
+ };
+ BgL_sc_nbzd2derivzd2treesza2_48za2 = function(nt, i, j, sc_nts_119, sc_enders_120, sc_steps_121, sc_toks_122, sc_states_123) {
+ var conf_set;
+ var state;
+ var sc_conf_124;
+ var l;
+ var nb_trees;
+ var BgL_sc_nbzd2nts_125zd2;
+ var BgL_sc_ntza2_126za2;
+ {
+ (BgL_sc_ntza2_126za2 = (sc_ind_43(nt, sc_nts_119)));
+ if ((BgL_sc_ntza2_126za2!== false))
+ {
+ (BgL_sc_nbzd2nts_125zd2 = (sc_nts_119.length));
+ (l = (sc_enders_120[BgL_sc_ntza2_126za2]));
+ (nb_trees = (0));
+ while ((l instanceof sc_Pair)) {
+ {
+ (sc_conf_124 = (l.car));
+ if ((((state = (sc_states_123[j])), (conf_set = (state[(sc_conf_124+(1))])), ((conf_set!== false)?(conf_set[(i+(5))]):false))!== false))
+ {
+ (l = (l.cdr));
+ (nb_trees = ((nb_deriv_trees(sc_conf_124, i, j, sc_enders_120, sc_steps_121, sc_toks_122, sc_states_123, BgL_sc_nbzd2nts_125zd2))+nb_trees));
+ }
+ else
+ (l = (l.cdr));
+ }
+ }
+ return nb_trees;
+ }
+ else
+ return false;
+ }
+ };
+ (lexer = (parser_descr[(0)]));
+ (sc_nts_42 = (parser_descr[(1)]));
+ (sc_starters_41 = (parser_descr[(2)]));
+ (sc_enders_40 = (parser_descr[(3)]));
+ (sc_predictors_39 = (parser_descr[(4)]));
+ (sc_steps_38 = (parser_descr[(5)]));
+ (sc_names_37 = (parser_descr[(6)]));
+ (falseHead1128 = (new sc_Pair(null, null)));
+ (L1125 = (lexer(input)));
+ (tail1129 = falseHead1128);
+ while (!(L1125 === null)) {
+ {
+ (tok = (L1125.car));
+ (l1 = (tok.cdr));
+ (l2 = null);
+ while ((l1 instanceof sc_Pair)) {
+ {
+ (sc_i_29 = (sc_ind_43((l1.car), sc_nts_42)));
+ if ((sc_i_29!== false))
+ {
+ (l1 = (l1.cdr));
+ (l2 = (new sc_Pair(sc_i_29, l2)));
+ }
+ else
+ (l1 = (l1.cdr));
+ }
+ }
+ (sc_optrOpnd_22 = (new sc_Pair((tok.car), (sc_reverse(l2)))));
+ (sc_optrOpnd_21 = (new sc_Pair(sc_optrOpnd_22, null)));
+ (tail1129.cdr = sc_optrOpnd_21);
+ (tail1129 = (tail1129.cdr));
+ (L1125 = (L1125.cdr));
+ }
+ }
+ (sc_optrOpnd_20 = (falseHead1128.cdr));
+ (sc_toks_36 = (sc_list2vector(sc_optrOpnd_20)));
+ (BgL_sc_nbzd2toks_35zd2 = (sc_toks_36.length));
+ (BgL_sc_nbzd2confs_34zd2 = (sc_steps_38.length));
+ (sc_states_33 = (make_states(BgL_sc_nbzd2toks_35zd2, BgL_sc_nbzd2confs_34zd2)));
+ (goal_starters = (sc_starters_41[(0)]));
+ (BgL_sc_confzd2setzd2adjoinza2_45za2(sc_states_33, (0), goal_starters, (0)));
+ (forw(sc_states_33, (0), sc_starters_41, sc_enders_40, sc_predictors_39, sc_steps_38, sc_nts_42));
+ (sc_i_28 = (0));
+ while ((sc_i_28<BgL_sc_nbzd2toks_35zd2)) {
+ {
+ (tok_nts = ((sc_toks_36[sc_i_28]).cdr));
+ (BgL_sc_confzd2setzd2adjoinza2_45za2(sc_states_33, (sc_i_28+(1)), tok_nts, sc_i_28));
+ (forw(sc_states_33, (sc_i_28+(1)), sc_starters_41, sc_enders_40, sc_predictors_39, sc_steps_38, sc_nts_42));
+ (++sc_i_28);
+ }
+ }
+ (nb_toks = (sc_toks_36.length));
+ (BgL_sc_nbzd2confs_32zd2 = (sc_steps_38.length));
+ (BgL_sc_nbzd2nts_31zd2 = (sc_nts_42.length));
+ (BgL_sc_statesza2_30za2 = (make_states(nb_toks, BgL_sc_nbzd2confs_32zd2)));
+ (goal_enders = (sc_enders_40[(0)]));
+ (l = goal_enders);
+ while ((l instanceof sc_Pair)) {
+ {
+ (conf = (l.car));
+ (BgL_sc_confzd2setzd2adjoinza2za2_46z00(sc_states_33, BgL_sc_statesza2_30za2, nb_toks, conf, (0)));
+ (l = (l.cdr));
+ }
+ }
+ (i = nb_toks);
+ while ((i>=(0))) {
+ {
+ (states = sc_states_33);
+ (BgL_sc_statesza2_27za2 = BgL_sc_statesza2_30za2);
+ (state_num = i);
+ (sc_enders_26 = sc_enders_40);
+ (sc_steps_25 = sc_steps_38);
+ (BgL_sc_nbzd2nts_24zd2 = BgL_sc_nbzd2nts_31zd2);
+ (toks = sc_toks_36);
+ (BgL_sc_stateza2_23za2 = (BgL_sc_statesza2_30za2[i]));
+ loop1 = function() {
+ var sc_loop1_127;
+ var prev;
+ var BgL_sc_statesza2_128za2;
+ var sc_states_129;
+ var j;
+ var i;
+ var sc_i_130;
+ var head;
+ var conf_set;
+ var sc_conf_131;
+ {
+ (sc_conf_131 = (BgL_sc_stateza2_23za2[(0)]));
+ if ((sc_conf_131>=(0)))
+ {
+ (conf_set = (BgL_sc_stateza2_23za2[(sc_conf_131+(1))]));
+ (head = (conf_set[(4)]));
+ (BgL_sc_stateza2_23za2[(0)] = (conf_set[(0)]));
+ (conf_set_merge_new_bang(conf_set));
+ (sc_i_130 = head);
+ while ((sc_i_130>=(0))) {
+ {
+ (i = sc_i_130);
+ (j = state_num);
+ (sc_states_129 = states);
+ (BgL_sc_statesza2_128za2 = BgL_sc_statesza2_27za2);
+ (prev = (sc_conf_131-(1)));
+ if (((sc_conf_131>=BgL_sc_nbzd2nts_24zd2)&&((sc_steps_25[prev])>=(0))))
+ {
+ sc_loop1_127 = function(l) {
+ var k;
+ var ender_set;
+ var state;
+ var ender;
+ var l;
+ while (true) {
+ if ((l instanceof sc_Pair))
+ {
+ (ender = (l.car));
+ (ender_set = ((state = (sc_states_129[j])), (state[(ender+(1))])));
+ if ((ender_set!== false))
+ {
+ (k = (ender_set[(2)]));
+ while ((k>=(0))) {
+ {
+ if ((k>=i))
+ if (((BgL_sc_confzd2setzd2adjoinza2za2_46z00(sc_states_129, BgL_sc_statesza2_128za2, k, prev, i))!== false))
+ (BgL_sc_confzd2setzd2adjoinza2za2_46z00(sc_states_129, BgL_sc_statesza2_128za2, j, ender, k));
+ (k = (ender_set[(k+(5))]));
+ }
+ }
+ return (sc_loop1_127((l.cdr)));
+ }
+ else
+ (l = (l.cdr));
+ }
+ else
+ return undefined;
+ }
+ };
+ (sc_loop1_127((sc_enders_26[(sc_steps_25[prev])])));
+ }
+ (sc_i_130 = (conf_set[(sc_i_130+(5))]));
+ }
+ }
+ return (loop1());
+ }
+ else
+ return undefined;
+ }
+ };
+ (loop1());
+ (--i);
+ }
+ }
+ (optrOpnd = BgL_sc_statesza2_30za2);
+ return [sc_nts_42, sc_starters_41, sc_enders_40, sc_predictors_39, sc_steps_38, sc_names_37, sc_toks_36, optrOpnd, is_parsed, BgL_sc_derivzd2treesza2_47z70, BgL_sc_nbzd2derivzd2treesza2_48za2];
+ }
+ };
+ }
+ };
+ BgL_parsezd2ze3parsedzf3zc2 = function(parse, nt, i, j) {
+ var is_parsed;
+ var states;
+ var enders;
+ var nts;
+ return ((nts = (parse[(0)])), (enders = (parse[(2)])), (states = (parse[(7)])), (is_parsed = (parse[(8)])), (is_parsed(nt, i, j, nts, enders, states)));
+ };
+ BgL_parsezd2ze3treesz31 = function(parse, nt, i, j) {
+ var BgL_sc_derivzd2treesza2_132z70;
+ var states;
+ var toks;
+ var names;
+ var steps;
+ var enders;
+ var nts;
+ return ((nts = (parse[(0)])), (enders = (parse[(2)])), (steps = (parse[(4)])), (names = (parse[(5)])), (toks = (parse[(6)])), (states = (parse[(7)])), (BgL_sc_derivzd2treesza2_132z70 = (parse[(9)])), (BgL_sc_derivzd2treesza2_132z70(nt, i, j, nts, enders, steps, names, toks, states)));
+ };
+ BgL_parsezd2ze3nbzd2treesze3 = function(parse, nt, i, j) {
+ var BgL_sc_nbzd2derivzd2treesza2_133za2;
+ var states;
+ var toks;
+ var steps;
+ var enders;
+ var nts;
+ return ((nts = (parse[(0)])), (enders = (parse[(2)])), (steps = (parse[(4)])), (toks = (parse[(6)])), (states = (parse[(7)])), (BgL_sc_nbzd2derivzd2treesza2_133za2 = (parse[(10)])), (BgL_sc_nbzd2derivzd2treesza2_133za2(nt, i, j, nts, enders, steps, toks, states)));
+ };
+ test2 = function(k) {
+ var x;
+ var p;
+ return ((p = (BgL_makezd2parserzd2(const_earley, function(l) {
+ var sc_x_134;
+ var tail1134;
+ var L1130;
+ var falseHead1133;
+ {
+ (falseHead1133 = (new sc_Pair(null, null)));
+ (tail1134 = falseHead1133);
+ (L1130 = l);
+ while (!(L1130 === null)) {
+ {
+ (tail1134.cdr = (new sc_Pair(((sc_x_134 = (L1130.car)), (sc_list(sc_x_134, sc_x_134))), null)));
+ (tail1134 = (tail1134.cdr));
+ (L1130 = (L1130.cdr));
+ }
+ }
+ return (falseHead1133.cdr);
+ }
+ }))), (x = (p((sc_vector2list((sc_makeVector(k, "\u1E9Ca"))))))), (sc_length((BgL_parsezd2ze3treesz31(x, "\u1E9Cs", (0), k)))));
+ };
+ BgL_earleyzd2benchmarkzd2 = function() {
+ var args = null;
+ for (var sc_tmp = arguments.length - 1; sc_tmp >= 0; sc_tmp--) {
+ args = sc_cons(arguments[sc_tmp], args);
+ }
+ var k;
+ return ((k = ((args === null)?(7):(args.car))), (BgL_runzd2benchmarkzd2("earley", (1), function() {
+ return (test2(k));
+ }, function(result) {
+ return ((sc_display(result)), (sc_newline()), result == 132);
+ })));
+ };
+}
+
+
+/************* END OF GENERATED CODE *************/
+// Invoke this function to run a benchmark.
+// The first argument is a string identifying the benchmark.
+// The second argument is the number of times to run the benchmark.
+// The third argument is a function that runs the benchmark.
+// The fourth argument is a unary function that warns if the result
+// returned by the benchmark is incorrect.
+//
+// Example:
+// RunBenchmark("new Array()",
+// 1,
+// function () { new Array(1000000); }
+// function (v) {
+// return (v instanceof Array) && (v.length == 1000000);
+// });
+
+SC_DEFAULT_OUT = new sc_GenericOutputPort(function(s) {});
+SC_ERROR_OUT = SC_DEFAULT_OUT;
+
+function RunBenchmark(name, count, run, warn) {
+ for (var n = 0; n < count; ++n) {
+ result = run();
+ if (!warn(result)) {
+ throw new Error("Earley or Boyer did incorrect number of rewrites");
+ }
+ }
+}
+
+var BgL_runzd2benchmarkzd2 = RunBenchmark;
+
+window.onload = function(){ startTest("v8-earley-boyer", 'd4c16950');
+
+test("Earley", BgL_earleyzd2benchmarkzd2);
+test("Boyer", BgL_nboyerzd2benchmarkzd2);
+
+endTest(); };
+</script>
+</head>
+<body></body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/v8-raytrace.html b/testing/talos/talos/tests/dromaeo/tests/v8-raytrace.html
new file mode 100644
index 0000000000..55c18257e5
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/v8-raytrace.html
@@ -0,0 +1,3444 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script>
+// The ray tracer code in this file is written by Adam Burmister. It
+// is available in its original form from:
+//
+// http://labs.flog.nz.co/raytracer/
+//
+// It has been modified slightly by Google to work as a standalone
+// benchmark, but the all the computational code remains
+// untouched. This file also contains a copy of the Prototype
+// JavaScript framework which is used by the ray tracer.
+
+
+var checkNumber;
+
+// Create dummy objects if we're not running in a browser.
+if (typeof document == 'undefined') {
+ document = { };
+ window = { opera: null };
+ navigator = { userAgent: null, appVersion: "" };
+}
+
+
+// ------------------------------------------------------------------------
+// ------------------------------------------------------------------------
+
+
+/* Prototype JavaScript framework, version 1.5.0
+ * (c) 2005-2007 Sam Stephenson
+ *
+ * Prototype is freely distributable under the terms of an MIT-style license.
+ * For details, see the Prototype web site: http://prototype.conio.net/
+ *
+/*--------------------------------------------------------------------------*/
+
+//--------------------
+var Prototype = {
+ Version: '1.5.0',
+ BrowserFeatures: {
+ XPath: !!document.evaluate
+ },
+
+ ScriptFragment: '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)',
+ emptyFunction: function() {},
+ K: function(x) { return x }
+}
+
+var Class = {
+ create: function() {
+ return function() {
+ this.initialize.apply(this, arguments);
+ }
+ }
+}
+
+var Abstract = new Object();
+
+Object.extend = function(destination, source) {
+ for (var property in source) {
+ destination[property] = source[property];
+ }
+ return destination;
+}
+
+Object.extend(Object, {
+ inspect: function(object) {
+ try {
+ if (object === undefined) return 'undefined';
+ if (object === null) return 'null';
+ return object.inspect ? object.inspect() : object.toString();
+ } catch (e) {
+ if (e instanceof RangeError) return '...';
+ throw e;
+ }
+ },
+
+ keys: function(object) {
+ var keys = [];
+ for (var property in object)
+ keys.push(property);
+ return keys;
+ },
+
+ values: function(object) {
+ var values = [];
+ for (var property in object)
+ values.push(object[property]);
+ return values;
+ },
+
+ clone: function(object) {
+ return Object.extend({}, object);
+ }
+});
+
+Function.prototype.bind = function() {
+ var __method = this, args = $A(arguments), object = args.shift();
+ return function() {
+ return __method.apply(object, args.concat($A(arguments)));
+ }
+}
+
+Function.prototype.bindAsEventListener = function(object) {
+ var __method = this, args = $A(arguments), object = args.shift();
+ return function(event) {
+ return __method.apply(object, [( event || window.event)].concat(args).concat($A(arguments)));
+ }
+}
+
+Object.extend(Number.prototype, {
+ toColorPart: function() {
+ var digits = this.toString(16);
+ if (this < 16) return '0' + digits;
+ return digits;
+ },
+
+ succ: function() {
+ return this + 1;
+ },
+
+ times: function(iterator) {
+ $R(0, this, true).each(iterator);
+ return this;
+ }
+});
+
+var Try = {
+ these: function() {
+ var returnValue;
+
+ for (var i = 0, length = arguments.length; i < length; i++) {
+ var lambda = arguments[i];
+ try {
+ returnValue = lambda();
+ break;
+ } catch (e) {}
+ }
+
+ return returnValue;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+var PeriodicalExecuter = Class.create();
+PeriodicalExecuter.prototype = {
+ initialize: function(callback, frequency) {
+ this.callback = callback;
+ this.frequency = frequency;
+ this.currentlyExecuting = false;
+
+ this.registerCallback();
+ },
+
+ registerCallback: function() {
+ this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
+ },
+
+ stop: function() {
+ if (!this.timer) return;
+ clearInterval(this.timer);
+ this.timer = null;
+ },
+
+ onTimerEvent: function() {
+ if (!this.currentlyExecuting) {
+ try {
+ this.currentlyExecuting = true;
+ this.callback(this);
+ } finally {
+ this.currentlyExecuting = false;
+ }
+ }
+ }
+}
+String.interpret = function(value){
+ return value == null ? '' : String(value);
+}
+
+Object.extend(String.prototype, {
+ gsub: function(pattern, replacement) {
+ var result = '', source = this, match;
+ replacement = arguments.callee.prepareReplacement(replacement);
+
+ while (source.length > 0) {
+ if (match = source.match(pattern)) {
+ result += source.slice(0, match.index);
+ result += String.interpret(replacement(match));
+ source = source.slice(match.index + match[0].length);
+ } else {
+ result += source, source = '';
+ }
+ }
+ return result;
+ },
+
+ sub: function(pattern, replacement, count) {
+ replacement = this.gsub.prepareReplacement(replacement);
+ count = count === undefined ? 1 : count;
+
+ return this.gsub(pattern, function(match) {
+ if (--count < 0) return match[0];
+ return replacement(match);
+ });
+ },
+
+ scan: function(pattern, iterator) {
+ this.gsub(pattern, iterator);
+ return this;
+ },
+
+ truncate: function(length, truncation) {
+ length = length || 30;
+ truncation = truncation === undefined ? '...' : truncation;
+ return this.length > length ?
+ this.slice(0, length - truncation.length) + truncation : this;
+ },
+
+ strip: function() {
+ return this.replace(/^\s+/, '').replace(/\s+$/, '');
+ },
+
+ stripTags: function() {
+ return this.replace(/<\/?[^>]+>/gi, '');
+ },
+
+ stripScripts: function() {
+ return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
+ },
+
+ extractScripts: function() {
+ var matchAll = new RegExp(Prototype.ScriptFragment, 'img');
+ var matchOne = new RegExp(Prototype.ScriptFragment, 'im');
+ return (this.match(matchAll) || []).map(function(scriptTag) {
+ return (scriptTag.match(matchOne) || ['', ''])[1];
+ });
+ },
+
+ evalScripts: function() {
+ return this.extractScripts().map(function(script) { return eval(script) });
+ },
+
+ escapeHTML: function() {
+ var div = document.createElement('div');
+ var text = document.createTextNode(this);
+ div.appendChild(text);
+ return div.innerHTML;
+ },
+
+ unescapeHTML: function() {
+ var div = document.createElement('div');
+ div.innerHTML = this.stripTags();
+ return div.childNodes[0] ? (div.childNodes.length > 1 ?
+ $A(div.childNodes).inject('',function(memo,node){ return memo+node.nodeValue }) :
+ div.childNodes[0].nodeValue) : '';
+ },
+
+ toQueryParams: function(separator) {
+ var match = this.strip().match(/([^?#]*)(#.*)?$/);
+ if (!match) return {};
+
+ return match[1].split(separator || '&').inject({}, function(hash, pair) {
+ if ((pair = pair.split('='))[0]) {
+ var name = decodeURIComponent(pair[0]);
+ var value = pair[1] ? decodeURIComponent(pair[1]) : undefined;
+
+ if (hash[name] !== undefined) {
+ if (hash[name].constructor != Array)
+ hash[name] = [hash[name]];
+ if (value) hash[name].push(value);
+ }
+ else hash[name] = value;
+ }
+ return hash;
+ });
+ },
+
+ toArray: function() {
+ return this.split('');
+ },
+
+ succ: function() {
+ return this.slice(0, this.length - 1) +
+ String.fromCharCode(this.charCodeAt(this.length - 1) + 1);
+ },
+
+ camelize: function() {
+ var parts = this.split('-'), len = parts.length;
+ if (len == 1) return parts[0];
+
+ var camelized = this.charAt(0) == '-'
+ ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)
+ : parts[0];
+
+ for (var i = 1; i < len; i++)
+ camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1);
+
+ return camelized;
+ },
+
+ capitalize: function(){
+ return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
+ },
+
+ underscore: function() {
+ return this.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase();
+ },
+
+ dasherize: function() {
+ return this.gsub(/_/,'-');
+ },
+
+ inspect: function(useDoubleQuotes) {
+ var escapedString = this.replace(/\\/g, '\\\\');
+ if (useDoubleQuotes)
+ return '"' + escapedString.replace(/"/g, '\\"') + '"';
+ else
+ return "'" + escapedString.replace(/'/g, '\\\'') + "'";
+ }
+});
+
+String.prototype.gsub.prepareReplacement = function(replacement) {
+ if (typeof replacement == 'function') return replacement;
+ var template = new Template(replacement);
+ return function(match) { return template.evaluate(match) };
+}
+
+String.prototype.parseQuery = String.prototype.toQueryParams;
+
+var Template = Class.create();
+Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;
+Template.prototype = {
+ initialize: function(template, pattern) {
+ this.template = template.toString();
+ this.pattern = pattern || Template.Pattern;
+ },
+
+ evaluate: function(object) {
+ return this.template.gsub(this.pattern, function(match) {
+ var before = match[1];
+ if (before == '\\') return match[2];
+ return before + String.interpret(object[match[3]]);
+ });
+ }
+}
+
+var $break = new Object();
+var $continue = new Object();
+
+var Enumerable = {
+ each: function(iterator) {
+ var index = 0;
+ try {
+ this._each(function(value) {
+ try {
+ iterator(value, index++);
+ } catch (e) {
+ if (e != $continue) throw e;
+ }
+ });
+ } catch (e) {
+ if (e != $break) throw e;
+ }
+ return this;
+ },
+
+ eachSlice: function(number, iterator) {
+ var index = -number, slices = [], array = this.toArray();
+ while ((index += number) < array.length)
+ slices.push(array.slice(index, index+number));
+ return slices.map(iterator);
+ },
+
+ all: function(iterator) {
+ var result = true;
+ this.each(function(value, index) {
+ result = result && !!(iterator || Prototype.K)(value, index);
+ if (!result) throw $break;
+ });
+ return result;
+ },
+
+ any: function(iterator) {
+ var result = false;
+ this.each(function(value, index) {
+ if (result = !!(iterator || Prototype.K)(value, index))
+ throw $break;
+ });
+ return result;
+ },
+
+ collect: function(iterator) {
+ var results = [];
+ this.each(function(value, index) {
+ results.push((iterator || Prototype.K)(value, index));
+ });
+ return results;
+ },
+
+ detect: function(iterator) {
+ var result;
+ this.each(function(value, index) {
+ if (iterator(value, index)) {
+ result = value;
+ throw $break;
+ }
+ });
+ return result;
+ },
+
+ findAll: function(iterator) {
+ var results = [];
+ this.each(function(value, index) {
+ if (iterator(value, index))
+ results.push(value);
+ });
+ return results;
+ },
+
+ grep: function(pattern, iterator) {
+ var results = [];
+ this.each(function(value, index) {
+ var stringValue = value.toString();
+ if (stringValue.match(pattern))
+ results.push((iterator || Prototype.K)(value, index));
+ })
+ return results;
+ },
+
+ include: function(object) {
+ var found = false;
+ this.each(function(value) {
+ if (value == object) {
+ found = true;
+ throw $break;
+ }
+ });
+ return found;
+ },
+
+ inGroupsOf: function(number, fillWith) {
+ fillWith = fillWith === undefined ? null : fillWith;
+ return this.eachSlice(number, function(slice) {
+ while(slice.length < number) slice.push(fillWith);
+ return slice;
+ });
+ },
+
+ inject: function(memo, iterator) {
+ this.each(function(value, index) {
+ memo = iterator(memo, value, index);
+ });
+ return memo;
+ },
+
+ invoke: function(method) {
+ var args = $A(arguments).slice(1);
+ return this.map(function(value) {
+ return value[method].apply(value, args);
+ });
+ },
+
+ max: function(iterator) {
+ var result;
+ this.each(function(value, index) {
+ value = (iterator || Prototype.K)(value, index);
+ if (result == undefined || value >= result)
+ result = value;
+ });
+ return result;
+ },
+
+ min: function(iterator) {
+ var result;
+ this.each(function(value, index) {
+ value = (iterator || Prototype.K)(value, index);
+ if (result == undefined || value < result)
+ result = value;
+ });
+ return result;
+ },
+
+ partition: function(iterator) {
+ var trues = [], falses = [];
+ this.each(function(value, index) {
+ ((iterator || Prototype.K)(value, index) ?
+ trues : falses).push(value);
+ });
+ return [trues, falses];
+ },
+
+ pluck: function(property) {
+ var results = [];
+ this.each(function(value, index) {
+ results.push(value[property]);
+ });
+ return results;
+ },
+
+ reject: function(iterator) {
+ var results = [];
+ this.each(function(value, index) {
+ if (!iterator(value, index))
+ results.push(value);
+ });
+ return results;
+ },
+
+ sortBy: function(iterator) {
+ return this.map(function(value, index) {
+ return {value: value, criteria: iterator(value, index)};
+ }).sort(function(left, right) {
+ var a = left.criteria, b = right.criteria;
+ return a < b ? -1 : a > b ? 1 : 0;
+ }).pluck('value');
+ },
+
+ toArray: function() {
+ return this.map();
+ },
+
+ zip: function() {
+ var iterator = Prototype.K, args = $A(arguments);
+ if (typeof args.last() == 'function')
+ iterator = args.pop();
+
+ var collections = [this].concat(args).map($A);
+ return this.map(function(value, index) {
+ return iterator(collections.pluck(index));
+ });
+ },
+
+ size: function() {
+ return this.toArray().length;
+ },
+
+ inspect: function() {
+ return '#<Enumerable:' + this.toArray().inspect() + '>';
+ }
+}
+
+Object.extend(Enumerable, {
+ map: Enumerable.collect,
+ find: Enumerable.detect,
+ select: Enumerable.findAll,
+ member: Enumerable.include,
+ entries: Enumerable.toArray
+});
+var $A = Array.from = function(iterable) {
+ if (!iterable) return [];
+ if (iterable.toArray) {
+ return iterable.toArray();
+ } else {
+ var results = [];
+ for (var i = 0, length = iterable.length; i < length; i++)
+ results.push(iterable[i]);
+ return results;
+ }
+}
+
+Object.extend(Array.prototype, Enumerable);
+
+if (!Array.prototype._reverse)
+ Array.prototype._reverse = Array.prototype.reverse;
+
+Object.extend(Array.prototype, {
+ _each: function(iterator) {
+ for (var i = 0, length = this.length; i < length; i++)
+ iterator(this[i]);
+ },
+
+ clear: function() {
+ this.length = 0;
+ return this;
+ },
+
+ first: function() {
+ return this[0];
+ },
+
+ last: function() {
+ return this[this.length - 1];
+ },
+
+ compact: function() {
+ return this.select(function(value) {
+ return value != null;
+ });
+ },
+
+ flatten: function() {
+ return this.inject([], function(array, value) {
+ return array.concat(value && value.constructor == Array ?
+ value.flatten() : [value]);
+ });
+ },
+
+ without: function() {
+ var values = $A(arguments);
+ return this.select(function(value) {
+ return !values.include(value);
+ });
+ },
+
+ indexOf: function(object) {
+ for (var i = 0, length = this.length; i < length; i++)
+ if (this[i] == object) return i;
+ return -1;
+ },
+
+ reverse: function(inline) {
+ return (inline !== false ? this : this.toArray())._reverse();
+ },
+
+ reduce: function() {
+ return this.length > 1 ? this : this[0];
+ },
+
+ uniq: function() {
+ return this.inject([], function(array, value) {
+ return array.include(value) ? array : array.concat([value]);
+ });
+ },
+
+ clone: function() {
+ return [].concat(this);
+ },
+
+ size: function() {
+ return this.length;
+ },
+
+ inspect: function() {
+ return '[' + this.map(Object.inspect).join(', ') + ']';
+ }
+});
+
+Array.prototype.toArray = Array.prototype.clone;
+
+function $w(string){
+ string = string.strip();
+ return string ? string.split(/\s+/) : [];
+}
+
+if(window.opera){
+ Array.prototype.concat = function(){
+ var array = [];
+ for(var i = 0, length = this.length; i < length; i++) array.push(this[i]);
+ for(var i = 0, length = arguments.length; i < length; i++) {
+ if(arguments[i].constructor == Array) {
+ for(var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++)
+ array.push(arguments[i][j]);
+ } else {
+ array.push(arguments[i]);
+ }
+ }
+ return array;
+ }
+}
+var Hash = function(obj) {
+ Object.extend(this, obj || {});
+};
+
+Object.extend(Hash, {
+ toQueryString: function(obj) {
+ var parts = [];
+
+ this.prototype._each.call(obj, function(pair) {
+ if (!pair.key) return;
+
+ if (pair.value && pair.value.constructor == Array) {
+ var values = pair.value.compact();
+ if (values.length < 2) pair.value = values.reduce();
+ else {
+ key = encodeURIComponent(pair.key);
+ values.each(function(value) {
+ value = value != undefined ? encodeURIComponent(value) : '';
+ parts.push(key + '=' + encodeURIComponent(value));
+ });
+ return;
+ }
+ }
+ if (pair.value == undefined) pair[1] = '';
+ parts.push(pair.map(encodeURIComponent).join('='));
+ });
+
+ return parts.join('&');
+ }
+});
+
+Object.extend(Hash.prototype, Enumerable);
+Object.extend(Hash.prototype, {
+ _each: function(iterator) {
+ for (var key in this) {
+ var value = this[key];
+ if (value && value == Hash.prototype[key]) continue;
+
+ var pair = [key, value];
+ pair.key = key;
+ pair.value = value;
+ iterator(pair);
+ }
+ },
+
+ keys: function() {
+ return this.pluck('key');
+ },
+
+ values: function() {
+ return this.pluck('value');
+ },
+
+ merge: function(hash) {
+ return $H(hash).inject(this, function(mergedHash, pair) {
+ mergedHash[pair.key] = pair.value;
+ return mergedHash;
+ });
+ },
+
+ remove: function() {
+ var result;
+ for(var i = 0, length = arguments.length; i < length; i++) {
+ var value = this[arguments[i]];
+ if (value !== undefined){
+ if (result === undefined) result = value;
+ else {
+ if (result.constructor != Array) result = [result];
+ result.push(value)
+ }
+ }
+ delete this[arguments[i]];
+ }
+ return result;
+ },
+
+ toQueryString: function() {
+ return Hash.toQueryString(this);
+ },
+
+ inspect: function() {
+ return '#<Hash:{' + this.map(function(pair) {
+ return pair.map(Object.inspect).join(': ');
+ }).join(', ') + '}>';
+ }
+});
+
+function $H(object) {
+ if (object && object.constructor == Hash) return object;
+ return new Hash(object);
+};
+ObjectRange = Class.create();
+Object.extend(ObjectRange.prototype, Enumerable);
+Object.extend(ObjectRange.prototype, {
+ initialize: function(start, end, exclusive) {
+ this.start = start;
+ this.end = end;
+ this.exclusive = exclusive;
+ },
+
+ _each: function(iterator) {
+ var value = this.start;
+ while (this.include(value)) {
+ iterator(value);
+ value = value.succ();
+ }
+ },
+
+ include: function(value) {
+ if (value < this.start)
+ return false;
+ if (this.exclusive)
+ return value < this.end;
+ return value <= this.end;
+ }
+});
+
+var $R = function(start, end, exclusive) {
+ return new ObjectRange(start, end, exclusive);
+}
+
+var Ajax = {
+ getTransport: function() {
+ return Try.these(
+ function() {return new XMLHttpRequest()},
+ function() {return new ActiveXObject('Msxml2.XMLHTTP')},
+ function() {return new ActiveXObject('Microsoft.XMLHTTP')}
+ ) || false;
+ },
+
+ activeRequestCount: 0
+}
+
+Ajax.Responders = {
+ responders: [],
+
+ _each: function(iterator) {
+ this.responders._each(iterator);
+ },
+
+ register: function(responder) {
+ if (!this.include(responder))
+ this.responders.push(responder);
+ },
+
+ unregister: function(responder) {
+ this.responders = this.responders.without(responder);
+ },
+
+ dispatch: function(callback, request, transport, json) {
+ this.each(function(responder) {
+ if (typeof responder[callback] == 'function') {
+ try {
+ responder[callback].apply(responder, [request, transport, json]);
+ } catch (e) {}
+ }
+ });
+ }
+};
+
+Object.extend(Ajax.Responders, Enumerable);
+
+Ajax.Responders.register({
+ onCreate: function() {
+ Ajax.activeRequestCount++;
+ },
+ onComplete: function() {
+ Ajax.activeRequestCount--;
+ }
+});
+
+Ajax.Base = function() {};
+Ajax.Base.prototype = {
+ setOptions: function(options) {
+ this.options = {
+ method: 'post',
+ asynchronous: true,
+ contentType: 'application/x-www-form-urlencoded',
+ encoding: 'UTF-8',
+ parameters: ''
+ }
+ Object.extend(this.options, options || {});
+
+ this.options.method = this.options.method.toLowerCase();
+ if (typeof this.options.parameters == 'string')
+ this.options.parameters = this.options.parameters.toQueryParams();
+ }
+}
+
+Ajax.Request = Class.create();
+Ajax.Request.Events =
+ ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
+
+Ajax.Request.prototype = Object.extend(new Ajax.Base(), {
+ _complete: false,
+
+ initialize: function(url, options) {
+ this.transport = Ajax.getTransport();
+ this.setOptions(options);
+ this.request(url);
+ },
+
+ request: function(url) {
+ this.url = url;
+ this.method = this.options.method;
+ var params = this.options.parameters;
+
+ if (!['get', 'post'].include(this.method)) {
+ // simulate other verbs over post
+ params['_method'] = this.method;
+ this.method = 'post';
+ }
+
+ params = Hash.toQueryString(params);
+ if (params && /Konqueror|Safari|KHTML/.test(navigator.userAgent)) params += '&_='
+
+ // when GET, append parameters to URL
+ if (this.method == 'get' && params)
+ this.url += (this.url.indexOf('?') > -1 ? '&' : '?') + params;
+
+ try {
+ Ajax.Responders.dispatch('onCreate', this, this.transport);
+
+ this.transport.open(this.method.toUpperCase(), this.url,
+ this.options.asynchronous);
+
+ if (this.options.asynchronous)
+ setTimeout(function() { this.respondToReadyState(1) }.bind(this), 10);
+
+ this.transport.onreadystatechange = this.onStateChange.bind(this);
+ this.setRequestHeaders();
+
+ var body = this.method == 'post' ? (this.options.postBody || params) : null;
+
+ this.transport.send(body);
+
+ /* Force Firefox to handle ready state 4 for synchronous requests */
+ if (!this.options.asynchronous && this.transport.overrideMimeType)
+ this.onStateChange();
+
+ }
+ catch (e) {
+ this.dispatchException(e);
+ }
+ },
+
+ onStateChange: function() {
+ var readyState = this.transport.readyState;
+ if (readyState > 1 && !((readyState == 4) && this._complete))
+ this.respondToReadyState(this.transport.readyState);
+ },
+
+ setRequestHeaders: function() {
+ var headers = {
+ 'X-Requested-With': 'XMLHttpRequest',
+ 'X-Prototype-Version': Prototype.Version,
+ 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
+ };
+
+ if (this.method == 'post') {
+ headers['Content-type'] = this.options.contentType +
+ (this.options.encoding ? '; charset=' + this.options.encoding : '');
+
+ /* Force "Connection: close" for older Mozilla browsers to work
+ * around a bug where XMLHttpRequest sends an incorrect
+ * Content-length header. See Mozilla Bugzilla #246651.
+ */
+ if (this.transport.overrideMimeType &&
+ (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005)
+ headers['Connection'] = 'close';
+ }
+
+ // user-defined headers
+ if (typeof this.options.requestHeaders == 'object') {
+ var extras = this.options.requestHeaders;
+
+ if (typeof extras.push == 'function')
+ for (var i = 0, length = extras.length; i < length; i += 2)
+ headers[extras[i]] = extras[i+1];
+ else
+ $H(extras).each(function(pair) { headers[pair.key] = pair.value });
+ }
+
+ for (var name in headers)
+ this.transport.setRequestHeader(name, headers[name]);
+ },
+
+ success: function() {
+ return !this.transport.status
+ || (this.transport.status >= 200 && this.transport.status < 300);
+ },
+
+ respondToReadyState: function(readyState) {
+ var state = Ajax.Request.Events[readyState];
+ var transport = this.transport, json = this.evalJSON();
+
+ if (state == 'Complete') {
+ try {
+ this._complete = true;
+ (this.options['on' + this.transport.status]
+ || this.options['on' + (this.success() ? 'Success' : 'Failure')]
+ || Prototype.emptyFunction)(transport, json);
+ } catch (e) {
+ this.dispatchException(e);
+ }
+
+ if ((this.getHeader('Content-type') || 'text/javascript').strip().
+ match(/^(text|application)\/(x-)?(java|ecma)script(;.*)?$/i))
+ this.evalResponse();
+ }
+
+ try {
+ (this.options['on' + state] || Prototype.emptyFunction)(transport, json);
+ Ajax.Responders.dispatch('on' + state, this, transport, json);
+ } catch (e) {
+ this.dispatchException(e);
+ }
+
+ if (state == 'Complete') {
+ // avoid memory leak in MSIE: clean up
+ this.transport.onreadystatechange = Prototype.emptyFunction;
+ }
+ },
+
+ getHeader: function(name) {
+ try {
+ return this.transport.getResponseHeader(name);
+ } catch (e) { return null }
+ },
+
+ evalJSON: function() {
+ try {
+ var json = this.getHeader('X-JSON');
+ return json ? eval('(' + json + ')') : null;
+ } catch (e) { return null }
+ },
+
+ evalResponse: function() {
+ try {
+ return eval(this.transport.responseText);
+ } catch (e) {
+ this.dispatchException(e);
+ }
+ },
+
+ dispatchException: function(exception) {
+ (this.options.onException || Prototype.emptyFunction)(this, exception);
+ Ajax.Responders.dispatch('onException', this, exception);
+ }
+});
+
+Ajax.Updater = Class.create();
+
+Object.extend(Object.extend(Ajax.Updater.prototype, Ajax.Request.prototype), {
+ initialize: function(container, url, options) {
+ this.container = {
+ success: (container.success || container),
+ failure: (container.failure || (container.success ? null : container))
+ }
+
+ this.transport = Ajax.getTransport();
+ this.setOptions(options);
+
+ var onComplete = this.options.onComplete || Prototype.emptyFunction;
+ this.options.onComplete = (function(transport, param) {
+ this.updateContent();
+ onComplete(transport, param);
+ }).bind(this);
+
+ this.request(url);
+ },
+
+ updateContent: function() {
+ var receiver = this.container[this.success() ? 'success' : 'failure'];
+ var response = this.transport.responseText;
+
+ if (!this.options.evalScripts) response = response.stripScripts();
+
+ if (receiver = $(receiver)) {
+ if (this.options.insertion)
+ new this.options.insertion(receiver, response);
+ else
+ receiver.update(response);
+ }
+
+ if (this.success()) {
+ if (this.onComplete)
+ setTimeout(this.onComplete.bind(this), 10);
+ }
+ }
+});
+
+Ajax.PeriodicalUpdater = Class.create();
+Ajax.PeriodicalUpdater.prototype = Object.extend(new Ajax.Base(), {
+ initialize: function(container, url, options) {
+ this.setOptions(options);
+ this.onComplete = this.options.onComplete;
+
+ this.frequency = (this.options.frequency || 2);
+ this.decay = (this.options.decay || 1);
+
+ this.updater = {};
+ this.container = container;
+ this.url = url;
+
+ this.start();
+ },
+
+ start: function() {
+ this.options.onComplete = this.updateComplete.bind(this);
+ this.onTimerEvent();
+ },
+
+ stop: function() {
+ this.updater.options.onComplete = undefined;
+ clearTimeout(this.timer);
+ (this.onComplete || Prototype.emptyFunction).apply(this, arguments);
+ },
+
+ updateComplete: function(request) {
+ if (this.options.decay) {
+ this.decay = (request.responseText == this.lastText ?
+ this.decay * this.options.decay : 1);
+
+ this.lastText = request.responseText;
+ }
+ this.timer = setTimeout(this.onTimerEvent.bind(this),
+ this.decay * this.frequency * 1000);
+ },
+
+ onTimerEvent: function() {
+ this.updater = new Ajax.Updater(this.container, this.url, this.options);
+ }
+});
+function $(element) {
+ if (arguments.length > 1) {
+ for (var i = 0, elements = [], length = arguments.length; i < length; i++)
+ elements.push($(arguments[i]));
+ return elements;
+ }
+ if (typeof element == 'string')
+ element = document.getElementById(element);
+ return Element.extend(element);
+}
+
+if (Prototype.BrowserFeatures.XPath) {
+ document._getElementsByXPath = function(expression, parentElement) {
+ var results = [];
+ var query = document.evaluate(expression, $(parentElement) || document,
+ null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
+ for (var i = 0, length = query.snapshotLength; i < length; i++)
+ results.push(query.snapshotItem(i));
+ return results;
+ };
+}
+
+document.getElementsByClassName = function(className, parentElement) {
+ if (Prototype.BrowserFeatures.XPath) {
+ var q = ".//*[contains(concat(' ', @class, ' '), ' " + className + " ')]";
+ return document._getElementsByXPath(q, parentElement);
+ } else {
+ var children = ($(parentElement) || document.body).getElementsByTagName('*');
+ var elements = [], child;
+ for (var i = 0, length = children.length; i < length; i++) {
+ child = children[i];
+ if (Element.hasClassName(child, className))
+ elements.push(Element.extend(child));
+ }
+ return elements;
+ }
+};
+
+/*--------------------------------------------------------------------------*/
+
+if (!window.Element)
+ var Element = new Object();
+
+Element.extend = function(element) {
+ if (!element || _nativeExtensions || element.nodeType == 3) return element;
+
+ if (!element._extended && element.tagName && element != window) {
+ var methods = Object.clone(Element.Methods), cache = Element.extend.cache;
+
+ if (element.tagName == 'FORM')
+ Object.extend(methods, Form.Methods);
+ if (['INPUT', 'TEXTAREA', 'SELECT'].include(element.tagName))
+ Object.extend(methods, Form.Element.Methods);
+
+ Object.extend(methods, Element.Methods.Simulated);
+
+ for (var property in methods) {
+ var value = methods[property];
+ if (typeof value == 'function' && !(property in element))
+ element[property] = cache.findOrStore(value);
+ }
+ }
+
+ element._extended = true;
+ return element;
+};
+
+Element.extend.cache = {
+ findOrStore: function(value) {
+ return this[value] = this[value] || function() {
+ return value.apply(null, [this].concat($A(arguments)));
+ }
+ }
+};
+
+Element.Methods = {
+ visible: function(element) {
+ return $(element).style.display != 'none';
+ },
+
+ toggle: function(element) {
+ element = $(element);
+ Element[Element.visible(element) ? 'hide' : 'show'](element);
+ return element;
+ },
+
+ hide: function(element) {
+ $(element).style.display = 'none';
+ return element;
+ },
+
+ show: function(element) {
+ $(element).style.display = '';
+ return element;
+ },
+
+ remove: function(element) {
+ element = $(element);
+ element.parentNode.removeChild(element);
+ return element;
+ },
+
+ update: function(element, html) {
+ html = typeof html == 'undefined' ? '' : html.toString();
+ $(element).innerHTML = html.stripScripts();
+ setTimeout(function() {html.evalScripts()}, 10);
+ return element;
+ },
+
+ replace: function(element, html) {
+ element = $(element);
+ html = typeof html == 'undefined' ? '' : html.toString();
+ if (element.outerHTML) {
+ element.outerHTML = html.stripScripts();
+ } else {
+ var range = element.ownerDocument.createRange();
+ range.selectNodeContents(element);
+ element.parentNode.replaceChild(
+ range.createContextualFragment(html.stripScripts()), element);
+ }
+ setTimeout(function() {html.evalScripts()}, 10);
+ return element;
+ },
+
+ inspect: function(element) {
+ element = $(element);
+ var result = '<' + element.tagName.toLowerCase();
+ $H({'id': 'id', 'className': 'class'}).each(function(pair) {
+ var property = pair.first(), attribute = pair.last();
+ var value = (element[property] || '').toString();
+ if (value) result += ' ' + attribute + '=' + value.inspect(true);
+ });
+ return result + '>';
+ },
+
+ recursivelyCollect: function(element, property) {
+ element = $(element);
+ var elements = [];
+ while (element = element[property])
+ if (element.nodeType == 1)
+ elements.push(Element.extend(element));
+ return elements;
+ },
+
+ ancestors: function(element) {
+ return $(element).recursivelyCollect('parentNode');
+ },
+
+ descendants: function(element) {
+ return $A($(element).getElementsByTagName('*'));
+ },
+
+ immediateDescendants: function(element) {
+ if (!(element = $(element).firstChild)) return [];
+ while (element && element.nodeType != 1) element = element.nextSibling;
+ if (element) return [element].concat($(element).nextSiblings());
+ return [];
+ },
+
+ previousSiblings: function(element) {
+ return $(element).recursivelyCollect('previousSibling');
+ },
+
+ nextSiblings: function(element) {
+ return $(element).recursivelyCollect('nextSibling');
+ },
+
+ siblings: function(element) {
+ element = $(element);
+ return element.previousSiblings().reverse().concat(element.nextSiblings());
+ },
+
+ match: function(element, selector) {
+ if (typeof selector == 'string')
+ selector = new Selector(selector);
+ return selector.match($(element));
+ },
+
+ up: function(element, expression, index) {
+ return Selector.findElement($(element).ancestors(), expression, index);
+ },
+
+ down: function(element, expression, index) {
+ return Selector.findElement($(element).descendants(), expression, index);
+ },
+
+ previous: function(element, expression, index) {
+ return Selector.findElement($(element).previousSiblings(), expression, index);
+ },
+
+ next: function(element, expression, index) {
+ return Selector.findElement($(element).nextSiblings(), expression, index);
+ },
+
+ getElementsBySelector: function() {
+ var args = $A(arguments), element = $(args.shift());
+ return Selector.findChildElements(element, args);
+ },
+
+ getElementsByClassName: function(element, className) {
+ return document.getElementsByClassName(className, element);
+ },
+
+ readAttribute: function(element, name) {
+ element = $(element);
+ if (document.all && !window.opera) {
+ var t = Element._attributeTranslations;
+ if (t.values[name]) return t.values[name](element, name);
+ if (t.names[name]) name = t.names[name];
+ var attribute = element.attributes[name];
+ if(attribute) return attribute.nodeValue;
+ }
+ return element.getAttribute(name);
+ },
+
+ getHeight: function(element) {
+ return $(element).getDimensions().height;
+ },
+
+ getWidth: function(element) {
+ return $(element).getDimensions().width;
+ },
+
+ classNames: function(element) {
+ return new Element.ClassNames(element);
+ },
+
+ hasClassName: function(element, className) {
+ if (!(element = $(element))) return;
+ var elementClassName = element.className;
+ if (elementClassName.length == 0) return false;
+ if (elementClassName == className ||
+ elementClassName.match(new RegExp("(^|\\s)" + className + "(\\s|$)")))
+ return true;
+ return false;
+ },
+
+ addClassName: function(element, className) {
+ if (!(element = $(element))) return;
+ Element.classNames(element).add(className);
+ return element;
+ },
+
+ removeClassName: function(element, className) {
+ if (!(element = $(element))) return;
+ Element.classNames(element).remove(className);
+ return element;
+ },
+
+ toggleClassName: function(element, className) {
+ if (!(element = $(element))) return;
+ Element.classNames(element)[element.hasClassName(className) ? 'remove' : 'add'](className);
+ return element;
+ },
+
+ observe: function() {
+ Event.observe.apply(Event, arguments);
+ return $A(arguments).first();
+ },
+
+ stopObserving: function() {
+ Event.stopObserving.apply(Event, arguments);
+ return $A(arguments).first();
+ },
+
+ // removes whitespace-only text node children
+ cleanWhitespace: function(element) {
+ element = $(element);
+ var node = element.firstChild;
+ while (node) {
+ var nextNode = node.nextSibling;
+ if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
+ element.removeChild(node);
+ node = nextNode;
+ }
+ return element;
+ },
+
+ empty: function(element) {
+ return $(element).innerHTML.match(/^\s*$/);
+ },
+
+ descendantOf: function(element, ancestor) {
+ element = $(element), ancestor = $(ancestor);
+ while (element = element.parentNode)
+ if (element == ancestor) return true;
+ return false;
+ },
+
+ scrollTo: function(element) {
+ element = $(element);
+ var pos = Position.cumulativeOffset(element);
+ window.scrollTo(pos[0], pos[1]);
+ return element;
+ },
+
+ getStyle: function(element, style) {
+ element = $(element);
+ if (['float','cssFloat'].include(style))
+ style = (typeof element.style.styleFloat != 'undefined' ? 'styleFloat' : 'cssFloat');
+ style = style.camelize();
+ var value = element.style[style];
+ if (!value) {
+ if (document.defaultView && document.defaultView.getComputedStyle) {
+ var css = document.defaultView.getComputedStyle(element, null);
+ value = css ? css[style] : null;
+ } else if (element.currentStyle) {
+ value = element.currentStyle[style];
+ }
+ }
+
+ if((value == 'auto') && ['width','height'].include(style) && (element.getStyle('display') != 'none'))
+ value = element['offset'+style.capitalize()] + 'px';
+
+ if (window.opera && ['left', 'top', 'right', 'bottom'].include(style))
+ if (Element.getStyle(element, 'position') == 'static') value = 'auto';
+ if(style == 'opacity') {
+ if(value) return parseFloat(value);
+ if(value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/))
+ if(value[1]) return parseFloat(value[1]) / 100;
+ return 1.0;
+ }
+ return value == 'auto' ? null : value;
+ },
+
+ setStyle: function(element, style) {
+ element = $(element);
+ for (var name in style) {
+ var value = style[name];
+ if(name == 'opacity') {
+ if (value == 1) {
+ value = (/Gecko/.test(navigator.userAgent) &&
+ !/Konqueror|Safari|KHTML/.test(navigator.userAgent)) ? 0.999999 : 1.0;
+ if(/MSIE/.test(navigator.userAgent) && !window.opera)
+ element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,'');
+ } else if(value == '') {
+ if(/MSIE/.test(navigator.userAgent) && !window.opera)
+ element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,'');
+ } else {
+ if(value < 0.00001) value = 0;
+ if(/MSIE/.test(navigator.userAgent) && !window.opera)
+ element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,'') +
+ 'alpha(opacity='+value*100+')';
+ }
+ } else if(['float','cssFloat'].include(name)) name = (typeof element.style.styleFloat != 'undefined') ? 'styleFloat' : 'cssFloat';
+ element.style[name.camelize()] = value;
+ }
+ return element;
+ },
+
+ getDimensions: function(element) {
+ element = $(element);
+ var display = $(element).getStyle('display');
+ if (display != 'none' && display != null) // Safari bug
+ return {width: element.offsetWidth, height: element.offsetHeight};
+
+ // All *Width and *Height properties give 0 on elements with display none,
+ // so enable the element temporarily
+ var els = element.style;
+ var originalVisibility = els.visibility;
+ var originalPosition = els.position;
+ var originalDisplay = els.display;
+ els.visibility = 'hidden';
+ els.position = 'absolute';
+ els.display = 'block';
+ var originalWidth = element.clientWidth;
+ var originalHeight = element.clientHeight;
+ els.display = originalDisplay;
+ els.position = originalPosition;
+ els.visibility = originalVisibility;
+ return {width: originalWidth, height: originalHeight};
+ },
+
+ makePositioned: function(element) {
+ element = $(element);
+ var pos = Element.getStyle(element, 'position');
+ if (pos == 'static' || !pos) {
+ element._madePositioned = true;
+ element.style.position = 'relative';
+ // Opera returns the offset relative to the positioning context, when an
+ // element is position relative but top and left have not been defined
+ if (window.opera) {
+ element.style.top = 0;
+ element.style.left = 0;
+ }
+ }
+ return element;
+ },
+
+ undoPositioned: function(element) {
+ element = $(element);
+ if (element._madePositioned) {
+ element._madePositioned = undefined;
+ element.style.position =
+ element.style.top =
+ element.style.left =
+ element.style.bottom =
+ element.style.right = '';
+ }
+ return element;
+ },
+
+ makeClipping: function(element) {
+ element = $(element);
+ if (element._overflow) return element;
+ element._overflow = element.style.overflow || 'auto';
+ if ((Element.getStyle(element, 'overflow') || 'visible') != 'hidden')
+ element.style.overflow = 'hidden';
+ return element;
+ },
+
+ undoClipping: function(element) {
+ element = $(element);
+ if (!element._overflow) return element;
+ element.style.overflow = element._overflow == 'auto' ? '' : element._overflow;
+ element._overflow = null;
+ return element;
+ }
+};
+
+Object.extend(Element.Methods, {childOf: Element.Methods.descendantOf});
+
+Element._attributeTranslations = {};
+
+Element._attributeTranslations.names = {
+ colspan: "colSpan",
+ rowspan: "rowSpan",
+ valign: "vAlign",
+ datetime: "dateTime",
+ accesskey: "accessKey",
+ tabindex: "tabIndex",
+ enctype: "encType",
+ maxlength: "maxLength",
+ readonly: "readOnly",
+ longdesc: "longDesc"
+};
+
+Element._attributeTranslations.values = {
+ _getAttr: function(element, attribute) {
+ return element.getAttribute(attribute, 2);
+ },
+
+ _flag: function(element, attribute) {
+ return $(element).hasAttribute(attribute) ? attribute : null;
+ },
+
+ style: function(element) {
+ return element.style.cssText.toLowerCase();
+ },
+
+ title: function(element) {
+ var node = element.getAttributeNode('title');
+ return node.specified ? node.nodeValue : null;
+ }
+};
+
+Object.extend(Element._attributeTranslations.values, {
+ href: Element._attributeTranslations.values._getAttr,
+ src: Element._attributeTranslations.values._getAttr,
+ disabled: Element._attributeTranslations.values._flag,
+ checked: Element._attributeTranslations.values._flag,
+ readonly: Element._attributeTranslations.values._flag,
+ multiple: Element._attributeTranslations.values._flag
+});
+
+Element.Methods.Simulated = {
+ hasAttribute: function(element, attribute) {
+ var t = Element._attributeTranslations;
+ attribute = t.names[attribute] || attribute;
+ return $(element).getAttributeNode(attribute).specified;
+ }
+};
+
+// IE is missing .innerHTML support for TABLE-related elements
+if (document.all && !window.opera){
+ Element.Methods.update = function(element, html) {
+ element = $(element);
+ html = typeof html == 'undefined' ? '' : html.toString();
+ var tagName = element.tagName.toUpperCase();
+ if (['THEAD','TBODY','TR','TD'].include(tagName)) {
+ var div = document.createElement('div');
+ switch (tagName) {
+ case 'THEAD':
+ case 'TBODY':
+ div.innerHTML = '<table><tbody>' + html.stripScripts() + '</tbody></table>';
+ depth = 2;
+ break;
+ case 'TR':
+ div.innerHTML = '<table><tbody><tr>' + html.stripScripts() + '</tr></tbody></table>';
+ depth = 3;
+ break;
+ case 'TD':
+ div.innerHTML = '<table><tbody><tr><td>' + html.stripScripts() + '</td></tr></tbody></table>';
+ depth = 4;
+ }
+ $A(element.childNodes).each(function(node){
+ element.removeChild(node)
+ });
+ depth.times(function(){ div = div.firstChild });
+
+ $A(div.childNodes).each(
+ function(node){ element.appendChild(node) });
+ } else {
+ element.innerHTML = html.stripScripts();
+ }
+ setTimeout(function() {html.evalScripts()}, 10);
+ return element;
+ }
+};
+
+Object.extend(Element, Element.Methods);
+
+var _nativeExtensions = false;
+
+if(/Konqueror|Safari|KHTML/.test(navigator.userAgent))
+ ['', 'Form', 'Input', 'TextArea', 'Select'].each(function(tag) {
+ var className = 'HTML' + tag + 'Element';
+ if(window[className]) return;
+ var klass = window[className] = {};
+ klass.prototype = document.createElement(tag ? tag.toLowerCase() : 'div').__proto__;
+ });
+
+Element.addMethods = function(methods) {
+ Object.extend(Element.Methods, methods || {});
+
+ function copy(methods, destination, onlyIfAbsent) {
+ onlyIfAbsent = onlyIfAbsent || false;
+ var cache = Element.extend.cache;
+ for (var property in methods) {
+ var value = methods[property];
+ if (!onlyIfAbsent || !(property in destination))
+ destination[property] = cache.findOrStore(value);
+ }
+ }
+
+ if (typeof HTMLElement != 'undefined') {
+ copy(Element.Methods, HTMLElement.prototype);
+ copy(Element.Methods.Simulated, HTMLElement.prototype, true);
+ copy(Form.Methods, HTMLFormElement.prototype);
+ [HTMLInputElement, HTMLTextAreaElement, HTMLSelectElement].each(function(klass) {
+ copy(Form.Element.Methods, klass.prototype);
+ });
+ _nativeExtensions = true;
+ }
+}
+
+var Toggle = new Object();
+Toggle.display = Element.toggle;
+
+/*--------------------------------------------------------------------------*/
+
+Abstract.Insertion = function(adjacency) {
+ this.adjacency = adjacency;
+}
+
+Abstract.Insertion.prototype = {
+ initialize: function(element, content) {
+ this.element = $(element);
+ this.content = content.stripScripts();
+
+ if (this.adjacency && this.element.insertAdjacentHTML) {
+ try {
+ this.element.insertAdjacentHTML(this.adjacency, this.content);
+ } catch (e) {
+ var tagName = this.element.tagName.toUpperCase();
+ if (['TBODY', 'TR'].include(tagName)) {
+ this.insertContent(this.contentFromAnonymousTable());
+ } else {
+ throw e;
+ }
+ }
+ } else {
+ this.range = this.element.ownerDocument.createRange();
+ if (this.initializeRange) this.initializeRange();
+ this.insertContent([this.range.createContextualFragment(this.content)]);
+ }
+
+ setTimeout(function() {content.evalScripts()}, 10);
+ },
+
+ contentFromAnonymousTable: function() {
+ var div = document.createElement('div');
+ div.innerHTML = '<table><tbody>' + this.content + '</tbody></table>';
+ return $A(div.childNodes[0].childNodes[0].childNodes);
+ }
+}
+
+var Insertion = new Object();
+
+Insertion.Before = Class.create();
+Insertion.Before.prototype = Object.extend(new Abstract.Insertion('beforeBegin'), {
+ initializeRange: function() {
+ this.range.setStartBefore(this.element);
+ },
+
+ insertContent: function(fragments) {
+ fragments.each((function(fragment) {
+ this.element.parentNode.insertBefore(fragment, this.element);
+ }).bind(this));
+ }
+});
+
+Insertion.Top = Class.create();
+Insertion.Top.prototype = Object.extend(new Abstract.Insertion('afterBegin'), {
+ initializeRange: function() {
+ this.range.selectNodeContents(this.element);
+ this.range.collapse(true);
+ },
+
+ insertContent: function(fragments) {
+ fragments.reverse(false).each((function(fragment) {
+ this.element.insertBefore(fragment, this.element.firstChild);
+ }).bind(this));
+ }
+});
+
+Insertion.Bottom = Class.create();
+Insertion.Bottom.prototype = Object.extend(new Abstract.Insertion('beforeEnd'), {
+ initializeRange: function() {
+ this.range.selectNodeContents(this.element);
+ this.range.collapse(this.element);
+ },
+
+ insertContent: function(fragments) {
+ fragments.each((function(fragment) {
+ this.element.appendChild(fragment);
+ }).bind(this));
+ }
+});
+
+Insertion.After = Class.create();
+Insertion.After.prototype = Object.extend(new Abstract.Insertion('afterEnd'), {
+ initializeRange: function() {
+ this.range.setStartAfter(this.element);
+ },
+
+ insertContent: function(fragments) {
+ fragments.each((function(fragment) {
+ this.element.parentNode.insertBefore(fragment,
+ this.element.nextSibling);
+ }).bind(this));
+ }
+});
+
+/*--------------------------------------------------------------------------*/
+
+Element.ClassNames = Class.create();
+Element.ClassNames.prototype = {
+ initialize: function(element) {
+ this.element = $(element);
+ },
+
+ _each: function(iterator) {
+ this.element.className.split(/\s+/).select(function(name) {
+ return name.length > 0;
+ })._each(iterator);
+ },
+
+ set: function(className) {
+ this.element.className = className;
+ },
+
+ add: function(classNameToAdd) {
+ if (this.include(classNameToAdd)) return;
+ this.set($A(this).concat(classNameToAdd).join(' '));
+ },
+
+ remove: function(classNameToRemove) {
+ if (!this.include(classNameToRemove)) return;
+ this.set($A(this).without(classNameToRemove).join(' '));
+ },
+
+ toString: function() {
+ return $A(this).join(' ');
+ }
+};
+
+Object.extend(Element.ClassNames.prototype, Enumerable);
+var Selector = Class.create();
+Selector.prototype = {
+ initialize: function(expression) {
+ this.params = {classNames: []};
+ this.expression = expression.toString().strip();
+ this.parseExpression();
+ this.compileMatcher();
+ },
+
+ parseExpression: function() {
+ function abort(message) { throw 'Parse error in selector: ' + message; }
+
+ if (this.expression == '') abort('empty expression');
+
+ var params = this.params, expr = this.expression, match, modifier, clause, rest;
+ while (match = expr.match(/^(.*)\[([a-z0-9_:-]+?)(?:([~\|!]?=)(?:"([^"]*)"|([^\]\s]*)))?\]$/i)) {
+ params.attributes = params.attributes || [];
+ params.attributes.push({name: match[2], operator: match[3], value: match[4] || match[5] || ''});
+ expr = match[1];
+ }
+
+ if (expr == '*') return this.params.wildcard = true;
+
+ while (match = expr.match(/^([^a-z0-9_-])?([a-z0-9_-]+)(.*)/i)) {
+ modifier = match[1], clause = match[2], rest = match[3];
+ switch (modifier) {
+ case '#': params.id = clause; break;
+ case '.': params.classNames.push(clause); break;
+ case '':
+ case undefined: params.tagName = clause.toUpperCase(); break;
+ default: abort(expr.inspect());
+ }
+ expr = rest;
+ }
+
+ if (expr.length > 0) abort(expr.inspect());
+ },
+
+ buildMatchExpression: function() {
+ var params = this.params, conditions = [], clause;
+
+ if (params.wildcard)
+ conditions.push('true');
+ if (clause = params.id)
+ conditions.push('element.readAttribute("id") == ' + clause.inspect());
+ if (clause = params.tagName)
+ conditions.push('element.tagName.toUpperCase() == ' + clause.inspect());
+ if ((clause = params.classNames).length > 0)
+ for (var i = 0, length = clause.length; i < length; i++)
+ conditions.push('element.hasClassName(' + clause[i].inspect() + ')');
+ if (clause = params.attributes) {
+ clause.each(function(attribute) {
+ var value = 'element.readAttribute(' + attribute.name.inspect() + ')';
+ var splitValueBy = function(delimiter) {
+ return value + ' && ' + value + '.split(' + delimiter.inspect() + ')';
+ }
+
+ switch (attribute.operator) {
+ case '=': conditions.push(value + ' == ' + attribute.value.inspect()); break;
+ case '~=': conditions.push(splitValueBy(' ') + '.include(' + attribute.value.inspect() + ')'); break;
+ case '|=': conditions.push(
+ splitValueBy('-') + '.first().toUpperCase() == ' + attribute.value.toUpperCase().inspect()
+ ); break;
+ case '!=': conditions.push(value + ' != ' + attribute.value.inspect()); break;
+ case '':
+ case undefined: conditions.push('element.hasAttribute(' + attribute.name.inspect() + ')'); break;
+ default: throw 'Unknown operator ' + attribute.operator + ' in selector';
+ }
+ });
+ }
+
+ return conditions.join(' && ');
+ },
+
+ compileMatcher: function() {
+ this.match = new Function('element', 'if (!element.tagName) return false; \
+ element = $(element); \
+ return ' + this.buildMatchExpression());
+ },
+
+ findElements: function(scope) {
+ var element;
+
+ if (element = $(this.params.id))
+ if (this.match(element))
+ if (!scope || Element.childOf(element, scope))
+ return [element];
+
+ scope = (scope || document).getElementsByTagName(this.params.tagName || '*');
+
+ var results = [];
+ for (var i = 0, length = scope.length; i < length; i++)
+ if (this.match(element = scope[i]))
+ results.push(Element.extend(element));
+
+ return results;
+ },
+
+ toString: function() {
+ return this.expression;
+ }
+}
+
+Object.extend(Selector, {
+ matchElements: function(elements, expression) {
+ var selector = new Selector(expression);
+ return elements.select(selector.match.bind(selector)).map(Element.extend);
+ },
+
+ findElement: function(elements, expression, index) {
+ if (typeof expression == 'number') index = expression, expression = false;
+ return Selector.matchElements(elements, expression || '*')[index || 0];
+ },
+
+ findChildElements: function(element, expressions) {
+ return expressions.map(function(expression) {
+ return expression.match(/[^\s"]+(?:"[^"]*"[^\s"]+)*/g).inject([null], function(results, expr) {
+ var selector = new Selector(expr);
+ return results.inject([], function(elements, result) {
+ return elements.concat(selector.findElements(result || element));
+ });
+ });
+ }).flatten();
+ }
+});
+
+function $$() {
+ return Selector.findChildElements(document, $A(arguments));
+}
+var Form = {
+ reset: function(form) {
+ $(form).reset();
+ return form;
+ },
+
+ serializeElements: function(elements, getHash) {
+ var data = elements.inject({}, function(result, element) {
+ if (!element.disabled && element.name) {
+ var key = element.name, value = $(element).getValue();
+ if (value != undefined) {
+ if (result[key]) {
+ if (result[key].constructor != Array) result[key] = [result[key]];
+ result[key].push(value);
+ }
+ else result[key] = value;
+ }
+ }
+ return result;
+ });
+
+ return getHash ? data : Hash.toQueryString(data);
+ }
+};
+
+Form.Methods = {
+ serialize: function(form, getHash) {
+ return Form.serializeElements(Form.getElements(form), getHash);
+ },
+
+ getElements: function(form) {
+ return $A($(form).getElementsByTagName('*')).inject([],
+ function(elements, child) {
+ if (Form.Element.Serializers[child.tagName.toLowerCase()])
+ elements.push(Element.extend(child));
+ return elements;
+ }
+ );
+ },
+
+ getInputs: function(form, typeName, name) {
+ form = $(form);
+ var inputs = form.getElementsByTagName('input');
+
+ if (!typeName && !name) return $A(inputs).map(Element.extend);
+
+ for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) {
+ var input = inputs[i];
+ if ((typeName && input.type != typeName) || (name && input.name != name))
+ continue;
+ matchingInputs.push(Element.extend(input));
+ }
+
+ return matchingInputs;
+ },
+
+ disable: function(form) {
+ form = $(form);
+ form.getElements().each(function(element) {
+ element.blur();
+ element.disabled = 'true';
+ });
+ return form;
+ },
+
+ enable: function(form) {
+ form = $(form);
+ form.getElements().each(function(element) {
+ element.disabled = '';
+ });
+ return form;
+ },
+
+ findFirstElement: function(form) {
+ return $(form).getElements().find(function(element) {
+ return element.type != 'hidden' && !element.disabled &&
+ ['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
+ });
+ },
+
+ focusFirstElement: function(form) {
+ form = $(form);
+ form.findFirstElement().activate();
+ return form;
+ }
+}
+
+Object.extend(Form, Form.Methods);
+
+/*--------------------------------------------------------------------------*/
+
+Form.Element = {
+ focus: function(element) {
+ $(element).focus();
+ return element;
+ },
+
+ select: function(element) {
+ $(element).select();
+ return element;
+ }
+}
+
+Form.Element.Methods = {
+ serialize: function(element) {
+ element = $(element);
+ if (!element.disabled && element.name) {
+ var value = element.getValue();
+ if (value != undefined) {
+ var pair = {};
+ pair[element.name] = value;
+ return Hash.toQueryString(pair);
+ }
+ }
+ return '';
+ },
+
+ getValue: function(element) {
+ element = $(element);
+ var method = element.tagName.toLowerCase();
+ return Form.Element.Serializers[method](element);
+ },
+
+ clear: function(element) {
+ $(element).value = '';
+ return element;
+ },
+
+ present: function(element) {
+ return $(element).value != '';
+ },
+
+ activate: function(element) {
+ element = $(element);
+ element.focus();
+ if (element.select && ( element.tagName.toLowerCase() != 'input' ||
+ !['button', 'reset', 'submit'].include(element.type) ) )
+ element.select();
+ return element;
+ },
+
+ disable: function(element) {
+ element = $(element);
+ element.disabled = true;
+ return element;
+ },
+
+ enable: function(element) {
+ element = $(element);
+ element.blur();
+ element.disabled = false;
+ return element;
+ }
+}
+
+Object.extend(Form.Element, Form.Element.Methods);
+var Field = Form.Element;
+var $F = Form.Element.getValue;
+
+/*--------------------------------------------------------------------------*/
+
+Form.Element.Serializers = {
+ input: function(element) {
+ switch (element.type.toLowerCase()) {
+ case 'checkbox':
+ case 'radio':
+ return Form.Element.Serializers.inputSelector(element);
+ default:
+ return Form.Element.Serializers.textarea(element);
+ }
+ },
+
+ inputSelector: function(element) {
+ return element.checked ? element.value : null;
+ },
+
+ textarea: function(element) {
+ return element.value;
+ },
+
+ select: function(element) {
+ return this[element.type == 'select-one' ?
+ 'selectOne' : 'selectMany'](element);
+ },
+
+ selectOne: function(element) {
+ var index = element.selectedIndex;
+ return index >= 0 ? this.optionValue(element.options[index]) : null;
+ },
+
+ selectMany: function(element) {
+ var values, length = element.length;
+ if (!length) return null;
+
+ for (var i = 0, values = []; i < length; i++) {
+ var opt = element.options[i];
+ if (opt.selected) values.push(this.optionValue(opt));
+ }
+ return values;
+ },
+
+ optionValue: function(opt) {
+ // extend element because hasAttribute may not be native
+ return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+Abstract.TimedObserver = function() {}
+Abstract.TimedObserver.prototype = {
+ initialize: function(element, frequency, callback) {
+ this.frequency = frequency;
+ this.element = $(element);
+ this.callback = callback;
+
+ this.lastValue = this.getValue();
+ this.registerCallback();
+ },
+
+ registerCallback: function() {
+ setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
+ },
+
+ onTimerEvent: function() {
+ var value = this.getValue();
+ var changed = ('string' == typeof this.lastValue && 'string' == typeof value
+ ? this.lastValue != value : String(this.lastValue) != String(value));
+ if (changed) {
+ this.callback(this.element, value);
+ this.lastValue = value;
+ }
+ }
+}
+
+Form.Element.Observer = Class.create();
+Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
+ getValue: function() {
+ return Form.Element.getValue(this.element);
+ }
+});
+
+Form.Observer = Class.create();
+Form.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
+ getValue: function() {
+ return Form.serialize(this.element);
+ }
+});
+
+/*--------------------------------------------------------------------------*/
+
+Abstract.EventObserver = function() {}
+Abstract.EventObserver.prototype = {
+ initialize: function(element, callback) {
+ this.element = $(element);
+ this.callback = callback;
+
+ this.lastValue = this.getValue();
+ if (this.element.tagName.toLowerCase() == 'form')
+ this.registerFormCallbacks();
+ else
+ this.registerCallback(this.element);
+ },
+
+ onElementEvent: function() {
+ var value = this.getValue();
+ if (this.lastValue != value) {
+ this.callback(this.element, value);
+ this.lastValue = value;
+ }
+ },
+
+ registerFormCallbacks: function() {
+ Form.getElements(this.element).each(this.registerCallback.bind(this));
+ },
+
+ registerCallback: function(element) {
+ if (element.type) {
+ switch (element.type.toLowerCase()) {
+ case 'checkbox':
+ case 'radio':
+ Event.observe(element, 'click', this.onElementEvent.bind(this));
+ break;
+ default:
+ Event.observe(element, 'change', this.onElementEvent.bind(this));
+ break;
+ }
+ }
+ }
+}
+
+Form.Element.EventObserver = Class.create();
+Form.Element.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
+ getValue: function() {
+ return Form.Element.getValue(this.element);
+ }
+});
+
+Form.EventObserver = Class.create();
+Form.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
+ getValue: function() {
+ return Form.serialize(this.element);
+ }
+});
+if (!window.Event) {
+ var Event = new Object();
+}
+
+Object.extend(Event, {
+ KEY_BACKSPACE: 8,
+ KEY_TAB: 9,
+ KEY_RETURN: 13,
+ KEY_ESC: 27,
+ KEY_LEFT: 37,
+ KEY_UP: 38,
+ KEY_RIGHT: 39,
+ KEY_DOWN: 40,
+ KEY_DELETE: 46,
+ KEY_HOME: 36,
+ KEY_END: 35,
+ KEY_PAGEUP: 33,
+ KEY_PAGEDOWN: 34,
+
+ element: function(event) {
+ return event.target || event.srcElement;
+ },
+
+ isLeftClick: function(event) {
+ return (((event.which) && (event.which == 1)) ||
+ ((event.button) && (event.button == 1)));
+ },
+
+ pointerX: function(event) {
+ return event.pageX || (event.clientX +
+ (document.documentElement.scrollLeft || document.body.scrollLeft));
+ },
+
+ pointerY: function(event) {
+ return event.pageY || (event.clientY +
+ (document.documentElement.scrollTop || document.body.scrollTop));
+ },
+
+ stop: function(event) {
+ if (event.preventDefault) {
+ event.preventDefault();
+ event.stopPropagation();
+ } else {
+ event.returnValue = false;
+ event.cancelBubble = true;
+ }
+ },
+
+ // find the first node with the given tagName, starting from the
+ // node the event was triggered on; traverses the DOM upwards
+ findElement: function(event, tagName) {
+ var element = Event.element(event);
+ while (element.parentNode && (!element.tagName ||
+ (element.tagName.toUpperCase() != tagName.toUpperCase())))
+ element = element.parentNode;
+ return element;
+ },
+
+ observers: false,
+
+ _observeAndCache: function(element, name, observer, useCapture) {
+ if (!this.observers) this.observers = [];
+ if (element.addEventListener) {
+ this.observers.push([element, name, observer, useCapture]);
+ element.addEventListener(name, observer, useCapture);
+ } else if (element.attachEvent) {
+ this.observers.push([element, name, observer, useCapture]);
+ element.attachEvent('on' + name, observer);
+ }
+ },
+
+ unloadCache: function() {
+ if (!Event.observers) return;
+ for (var i = 0, length = Event.observers.length; i < length; i++) {
+ Event.stopObserving.apply(this, Event.observers[i]);
+ Event.observers[i][0] = null;
+ }
+ Event.observers = false;
+ },
+
+ observe: function(element, name, observer, useCapture) {
+ element = $(element);
+ useCapture = useCapture || false;
+
+ if (name == 'keypress' &&
+ (navigator.appVersion.match(/Konqueror|Safari|KHTML/)
+ || element.attachEvent))
+ name = 'keydown';
+
+ Event._observeAndCache(element, name, observer, useCapture);
+ },
+
+ stopObserving: function(element, name, observer, useCapture) {
+ element = $(element);
+ useCapture = useCapture || false;
+
+ if (name == 'keypress' &&
+ (navigator.appVersion.match(/Konqueror|Safari|KHTML/)
+ || element.detachEvent))
+ name = 'keydown';
+
+ if (element.removeEventListener) {
+ element.removeEventListener(name, observer, useCapture);
+ } else if (element.detachEvent) {
+ try {
+ element.detachEvent('on' + name, observer);
+ } catch (e) {}
+ }
+ }
+});
+
+/* prevent memory leaks in IE */
+if (navigator.appVersion.match(/\bMSIE\b/))
+ Event.observe(window, 'unload', Event.unloadCache, false);
+var Position = {
+ // set to true if needed, warning: firefox performance problems
+ // NOT neeeded for page scrolling, only if draggable contained in
+ // scrollable elements
+ includeScrollOffsets: false,
+
+ // must be called before calling withinIncludingScrolloffset, every time the
+ // page is scrolled
+ prepare: function() {
+ this.deltaX = window.pageXOffset
+ || document.documentElement.scrollLeft
+ || document.body.scrollLeft
+ || 0;
+ this.deltaY = window.pageYOffset
+ || document.documentElement.scrollTop
+ || document.body.scrollTop
+ || 0;
+ },
+
+ realOffset: function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.scrollTop || 0;
+ valueL += element.scrollLeft || 0;
+ element = element.parentNode;
+ } while (element);
+ return [valueL, valueT];
+ },
+
+ cumulativeOffset: function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+ element = element.offsetParent;
+ } while (element);
+ return [valueL, valueT];
+ },
+
+ positionedOffset: function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+ element = element.offsetParent;
+ if (element) {
+ if(element.tagName=='BODY') break;
+ var p = Element.getStyle(element, 'position');
+ if (p == 'relative' || p == 'absolute') break;
+ }
+ } while (element);
+ return [valueL, valueT];
+ },
+
+ offsetParent: function(element) {
+ if (element.offsetParent) return element.offsetParent;
+ if (element == document.body) return element;
+
+ while ((element = element.parentNode) && element != document.body)
+ if (Element.getStyle(element, 'position') != 'static')
+ return element;
+
+ return document.body;
+ },
+
+ // caches x/y coordinate pair to use with overlap
+ within: function(element, x, y) {
+ if (this.includeScrollOffsets)
+ return this.withinIncludingScrolloffsets(element, x, y);
+ this.xcomp = x;
+ this.ycomp = y;
+ this.offset = this.cumulativeOffset(element);
+
+ return (y >= this.offset[1] &&
+ y < this.offset[1] + element.offsetHeight &&
+ x >= this.offset[0] &&
+ x < this.offset[0] + element.offsetWidth);
+ },
+
+ withinIncludingScrolloffsets: function(element, x, y) {
+ var offsetcache = this.realOffset(element);
+
+ this.xcomp = x + offsetcache[0] - this.deltaX;
+ this.ycomp = y + offsetcache[1] - this.deltaY;
+ this.offset = this.cumulativeOffset(element);
+
+ return (this.ycomp >= this.offset[1] &&
+ this.ycomp < this.offset[1] + element.offsetHeight &&
+ this.xcomp >= this.offset[0] &&
+ this.xcomp < this.offset[0] + element.offsetWidth);
+ },
+
+ // within must be called directly before
+ overlap: function(mode, element) {
+ if (!mode) return 0;
+ if (mode == 'vertical')
+ return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
+ element.offsetHeight;
+ if (mode == 'horizontal')
+ return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
+ element.offsetWidth;
+ },
+
+ page: function(forElement) {
+ var valueT = 0, valueL = 0;
+
+ var element = forElement;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+
+ // Safari fix
+ if (element.offsetParent==document.body)
+ if (Element.getStyle(element,'position')=='absolute') break;
+
+ } while (element = element.offsetParent);
+
+ element = forElement;
+ do {
+ if (!window.opera || element.tagName=='BODY') {
+ valueT -= element.scrollTop || 0;
+ valueL -= element.scrollLeft || 0;
+ }
+ } while (element = element.parentNode);
+
+ return [valueL, valueT];
+ },
+
+ clone: function(source, target) {
+ var options = Object.extend({
+ setLeft: true,
+ setTop: true,
+ setWidth: true,
+ setHeight: true,
+ offsetTop: 0,
+ offsetLeft: 0
+ }, arguments[2] || {})
+
+ // find page position of source
+ source = $(source);
+ var p = Position.page(source);
+
+ // find coordinate system to use
+ target = $(target);
+ var delta = [0, 0];
+ var parent = null;
+ // delta [0,0] will do fine with position: fixed elements,
+ // position:absolute needs offsetParent deltas
+ if (Element.getStyle(target,'position') == 'absolute') {
+ parent = Position.offsetParent(target);
+ delta = Position.page(parent);
+ }
+
+ // correct by body offsets (fixes Safari)
+ if (parent == document.body) {
+ delta[0] -= document.body.offsetLeft;
+ delta[1] -= document.body.offsetTop;
+ }
+
+ // set position
+ if(options.setLeft) target.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px';
+ if(options.setTop) target.style.top = (p[1] - delta[1] + options.offsetTop) + 'px';
+ if(options.setWidth) target.style.width = source.offsetWidth + 'px';
+ if(options.setHeight) target.style.height = source.offsetHeight + 'px';
+ },
+
+ absolutize: function(element) {
+ element = $(element);
+ if (element.style.position == 'absolute') return;
+ Position.prepare();
+
+ var offsets = Position.positionedOffset(element);
+ var top = offsets[1];
+ var left = offsets[0];
+ var width = element.clientWidth;
+ var height = element.clientHeight;
+
+ element._originalLeft = left - parseFloat(element.style.left || 0);
+ element._originalTop = top - parseFloat(element.style.top || 0);
+ element._originalWidth = element.style.width;
+ element._originalHeight = element.style.height;
+
+ element.style.position = 'absolute';
+ element.style.top = top + 'px';
+ element.style.left = left + 'px';
+ element.style.width = width + 'px';
+ element.style.height = height + 'px';
+ },
+
+ relativize: function(element) {
+ element = $(element);
+ if (element.style.position == 'relative') return;
+ Position.prepare();
+
+ element.style.position = 'relative';
+ var top = parseFloat(element.style.top || 0) - (element._originalTop || 0);
+ var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);
+
+ element.style.top = top + 'px';
+ element.style.left = left + 'px';
+ element.style.height = element._originalHeight;
+ element.style.width = element._originalWidth;
+ }
+}
+
+// Safari returns margins on body which is incorrect if the child is absolutely
+// positioned. For performance reasons, redefine Position.cumulativeOffset for
+// KHTML/WebKit only.
+if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) {
+ Position.cumulativeOffset = function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+ if (element.offsetParent == document.body)
+ if (Element.getStyle(element, 'position') == 'absolute') break;
+
+ element = element.offsetParent;
+ } while (element);
+
+ return [valueL, valueT];
+ }
+}
+
+Element.addMethods();
+
+
+// ------------------------------------------------------------------------
+// ------------------------------------------------------------------------
+
+// The rest of this file is the actual ray tracer written by Adam
+// Burmister. It's a concatenation of the following files:
+//
+// flog/color.js
+// flog/light.js
+// flog/vector.js
+// flog/ray.js
+// flog/scene.js
+// flog/material/basematerial.js
+// flog/material/solid.js
+// flog/material/chessboard.js
+// flog/shape/baseshape.js
+// flog/shape/sphere.js
+// flog/shape/plane.js
+// flog/intersectioninfo.js
+// flog/camera.js
+// flog/background.js
+// flog/engine.js
+
+
+/* Fake a Flog.* namespace */
+if(typeof(Flog) == 'undefined') var Flog = {};
+if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {};
+
+Flog.RayTracer.Color = Class.create();
+
+Flog.RayTracer.Color.prototype = {
+ red : 0.0,
+ green : 0.0,
+ blue : 0.0,
+
+ initialize : function(r, g, b) {
+ if(!r) r = 0.0;
+ if(!g) g = 0.0;
+ if(!b) b = 0.0;
+
+ this.red = r;
+ this.green = g;
+ this.blue = b;
+ },
+
+ add : function(c1, c2){
+ var result = new Flog.RayTracer.Color(0,0,0);
+
+ result.red = c1.red + c2.red;
+ result.green = c1.green + c2.green;
+ result.blue = c1.blue + c2.blue;
+
+ return result;
+ },
+
+ addScalar: function(c1, s){
+ var result = new Flog.RayTracer.Color(0,0,0);
+
+ result.red = c1.red + s;
+ result.green = c1.green + s;
+ result.blue = c1.blue + s;
+
+ result.limit();
+
+ return result;
+ },
+
+ subtract: function(c1, c2){
+ var result = new Flog.RayTracer.Color(0,0,0);
+
+ result.red = c1.red - c2.red;
+ result.green = c1.green - c2.green;
+ result.blue = c1.blue - c2.blue;
+
+ return result;
+ },
+
+ multiply : function(c1, c2) {
+ var result = new Flog.RayTracer.Color(0,0,0);
+
+ result.red = c1.red * c2.red;
+ result.green = c1.green * c2.green;
+ result.blue = c1.blue * c2.blue;
+
+ return result;
+ },
+
+ multiplyScalar : function(c1, f) {
+ var result = new Flog.RayTracer.Color(0,0,0);
+
+ result.red = c1.red * f;
+ result.green = c1.green * f;
+ result.blue = c1.blue * f;
+
+ return result;
+ },
+
+ divideFactor : function(c1, f) {
+ var result = new Flog.RayTracer.Color(0,0,0);
+
+ result.red = c1.red / f;
+ result.green = c1.green / f;
+ result.blue = c1.blue / f;
+
+ return result;
+ },
+
+ limit: function(){
+ this.red = (this.red > 0.0) ? ( (this.red > 1.0) ? 1.0 : this.red ) : 0.0;
+ this.green = (this.green > 0.0) ? ( (this.green > 1.0) ? 1.0 : this.green ) : 0.0;
+ this.blue = (this.blue > 0.0) ? ( (this.blue > 1.0) ? 1.0 : this.blue ) : 0.0;
+ },
+
+ distance : function(color) {
+ var d = Math.abs(this.red - color.red) + Math.abs(this.green - color.green) + Math.abs(this.blue - color.blue);
+ return d;
+ },
+
+ blend: function(c1, c2, w){
+ var result = new Flog.RayTracer.Color(0,0,0);
+ result = Flog.RayTracer.Color.prototype.add(
+ Flog.RayTracer.Color.prototype.multiplyScalar(c1, 1 - w),
+ Flog.RayTracer.Color.prototype.multiplyScalar(c2, w)
+ );
+ return result;
+ },
+
+ brightness : function() {
+ var r = Math.floor(this.red*255);
+ var g = Math.floor(this.green*255);
+ var b = Math.floor(this.blue*255);
+ return (r * 77 + g * 150 + b * 29) >> 8;
+ },
+
+ toString : function () {
+ var r = Math.floor(this.red*255);
+ var g = Math.floor(this.green*255);
+ var b = Math.floor(this.blue*255);
+
+ return "rgb("+ r +","+ g +","+ b +")";
+ }
+}
+/* Fake a Flog.* namespace */
+if(typeof(Flog) == 'undefined') var Flog = {};
+if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {};
+
+Flog.RayTracer.Light = Class.create();
+
+Flog.RayTracer.Light.prototype = {
+ position: null,
+ color: null,
+ intensity: 10.0,
+
+ initialize : function(pos, color, intensity) {
+ this.position = pos;
+ this.color = color;
+ this.intensity = (intensity ? intensity : 10.0);
+ },
+
+ getIntensity: function(distance){
+ if(distance >= intensity) return 0;
+
+ return Math.pow((intensity - distance) / strength, 0.2);
+ },
+
+ toString : function () {
+ return 'Light [' + this.position.x + ',' + this.position.y + ',' + this.position.z + ']';
+ }
+}
+/* Fake a Flog.* namespace */
+if(typeof(Flog) == 'undefined') var Flog = {};
+if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {};
+
+Flog.RayTracer.Vector = Class.create();
+
+Flog.RayTracer.Vector.prototype = {
+ x : 0.0,
+ y : 0.0,
+ z : 0.0,
+
+ initialize : function(x, y, z) {
+ this.x = (x ? x : 0);
+ this.y = (y ? y : 0);
+ this.z = (z ? z : 0);
+ },
+
+ copy: function(vector){
+ this.x = vector.x;
+ this.y = vector.y;
+ this.z = vector.z;
+ },
+
+ normalize : function() {
+ var m = this.magnitude();
+ return new Flog.RayTracer.Vector(this.x / m, this.y / m, this.z / m);
+ },
+
+ magnitude : function() {
+ return Math.sqrt((this.x * this.x) + (this.y * this.y) + (this.z * this.z));
+ },
+
+ cross : function(w) {
+ return new Flog.RayTracer.Vector(
+ -this.z * w.y + this.y * w.z,
+ this.z * w.x - this.x * w.z,
+ -this.y * w.x + this.x * w.y);
+ },
+
+ dot : function(w) {
+ return this.x * w.x + this.y * w.y + this.z * w.z;
+ },
+
+ add : function(v, w) {
+ return new Flog.RayTracer.Vector(w.x + v.x, w.y + v.y, w.z + v.z);
+ },
+
+ subtract : function(v, w) {
+ if(!w || !v) throw 'Vectors must be defined [' + v + ',' + w + ']';
+ return new Flog.RayTracer.Vector(v.x - w.x, v.y - w.y, v.z - w.z);
+ },
+
+ multiplyVector : function(v, w) {
+ return new Flog.RayTracer.Vector(v.x * w.x, v.y * w.y, v.z * w.z);
+ },
+
+ multiplyScalar : function(v, w) {
+ return new Flog.RayTracer.Vector(v.x * w, v.y * w, v.z * w);
+ },
+
+ toString : function () {
+ return 'Vector [' + this.x + ',' + this.y + ',' + this.z + ']';
+ }
+}
+/* Fake a Flog.* namespace */
+if(typeof(Flog) == 'undefined') var Flog = {};
+if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {};
+
+Flog.RayTracer.Ray = Class.create();
+
+Flog.RayTracer.Ray.prototype = {
+ position : null,
+ direction : null,
+ initialize : function(pos, dir) {
+ this.position = pos;
+ this.direction = dir;
+ },
+
+ toString : function () {
+ return 'Ray [' + this.position + ',' + this.direction + ']';
+ }
+}
+/* Fake a Flog.* namespace */
+if(typeof(Flog) == 'undefined') var Flog = {};
+if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {};
+
+Flog.RayTracer.Scene = Class.create();
+
+Flog.RayTracer.Scene.prototype = {
+ camera : null,
+ shapes : [],
+ lights : [],
+ background : null,
+
+ initialize : function() {
+ this.camera = new Flog.RayTracer.Camera(
+ new Flog.RayTracer.Vector(0,0,-5),
+ new Flog.RayTracer.Vector(0,0,1),
+ new Flog.RayTracer.Vector(0,1,0)
+ );
+ this.shapes = new Array();
+ this.lights = new Array();
+ this.background = new Flog.RayTracer.Background(new Flog.RayTracer.Color(0,0,0.5), 0.2);
+ }
+}
+/* Fake a Flog.* namespace */
+if(typeof(Flog) == 'undefined') var Flog = {};
+if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {};
+if(typeof(Flog.RayTracer.Material) == 'undefined') Flog.RayTracer.Material = {};
+
+Flog.RayTracer.Material.BaseMaterial = Class.create();
+
+Flog.RayTracer.Material.BaseMaterial.prototype = {
+
+ gloss: 2.0, // [0...infinity] 0 = matt
+ transparency: 0.0, // 0=opaque
+ reflection: 0.0, // [0...infinity] 0 = no reflection
+ refraction: 0.50,
+ hasTexture: false,
+
+ initialize : function() {
+
+ },
+
+ getColor: function(u, v){
+
+ },
+
+ wrapUp: function(t){
+ t = t % 2.0;
+ if(t < -1) t += 2.0;
+ if(t >= 1) t -= 2.0;
+ return t;
+ },
+
+ toString : function () {
+ return 'Material [gloss=' + this.gloss + ', transparency=' + this.transparency + ', hasTexture=' + this.hasTexture +']';
+ }
+}
+/* Fake a Flog.* namespace */
+if(typeof(Flog) == 'undefined') var Flog = {};
+if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {};
+
+Flog.RayTracer.Material.Solid = Class.create();
+
+Flog.RayTracer.Material.Solid.prototype = Object.extend(
+ new Flog.RayTracer.Material.BaseMaterial(), {
+ initialize : function(color, reflection, refraction, transparency, gloss) {
+ this.color = color;
+ this.reflection = reflection;
+ this.transparency = transparency;
+ this.gloss = gloss;
+ this.hasTexture = false;
+ },
+
+ getColor: function(u, v){
+ return this.color;
+ },
+
+ toString : function () {
+ return 'SolidMaterial [gloss=' + this.gloss + ', transparency=' + this.transparency + ', hasTexture=' + this.hasTexture +']';
+ }
+ }
+);
+/* Fake a Flog.* namespace */
+if(typeof(Flog) == 'undefined') var Flog = {};
+if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {};
+
+Flog.RayTracer.Material.Chessboard = Class.create();
+
+Flog.RayTracer.Material.Chessboard.prototype = Object.extend(
+ new Flog.RayTracer.Material.BaseMaterial(), {
+ colorEven: null,
+ colorOdd: null,
+ density: 0.5,
+
+ initialize : function(colorEven, colorOdd, reflection, transparency, gloss, density) {
+ this.colorEven = colorEven;
+ this.colorOdd = colorOdd;
+ this.reflection = reflection;
+ this.transparency = transparency;
+ this.gloss = gloss;
+ this.density = density;
+ this.hasTexture = true;
+ },
+
+ getColor: function(u, v){
+ var t = this.wrapUp(u * this.density) * this.wrapUp(v * this.density);
+
+ if(t < 0.0)
+ return this.colorEven;
+ else
+ return this.colorOdd;
+ },
+
+ toString : function () {
+ return 'ChessMaterial [gloss=' + this.gloss + ', transparency=' + this.transparency + ', hasTexture=' + this.hasTexture +']';
+ }
+ }
+);
+/* Fake a Flog.* namespace */
+if(typeof(Flog) == 'undefined') var Flog = {};
+if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {};
+if(typeof(Flog.RayTracer.Shape) == 'undefined') Flog.RayTracer.Shape = {};
+
+Flog.RayTracer.Shape.BaseShape = Class.create();
+
+Flog.RayTracer.Shape.BaseShape.prototype = {
+ position: null,
+ material: null,
+
+ initialize : function() {
+ this.position = new Vector(0,0,0);
+ this.material = new Flog.RayTracer.Material.SolidMaterial(
+ new Flog.RayTracer.Color(1,0,1),
+ 0,
+ 0,
+ 0
+ );
+ },
+
+ toString : function () {
+ return 'Material [gloss=' + this.gloss + ', transparency=' + this.transparency + ', hasTexture=' + this.hasTexture +']';
+ }
+}
+/* Fake a Flog.* namespace */
+if(typeof(Flog) == 'undefined') var Flog = {};
+if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {};
+if(typeof(Flog.RayTracer.Shape) == 'undefined') Flog.RayTracer.Shape = {};
+
+Flog.RayTracer.Shape.Sphere = Class.create();
+
+Flog.RayTracer.Shape.Sphere.prototype = {
+ initialize : function(pos, radius, material) {
+ this.radius = radius;
+ this.position = pos;
+ this.material = material;
+ },
+
+ intersect: function(ray){
+ var info = new Flog.RayTracer.IntersectionInfo();
+ info.shape = this;
+
+ var dst = Flog.RayTracer.Vector.prototype.subtract(ray.position, this.position);
+
+ var B = dst.dot(ray.direction);
+ var C = dst.dot(dst) - (this.radius * this.radius);
+ var D = (B * B) - C;
+
+ if(D > 0){ // intersection!
+ info.isHit = true;
+ info.distance = (-B) - Math.sqrt(D);
+ info.position = Flog.RayTracer.Vector.prototype.add(
+ ray.position,
+ Flog.RayTracer.Vector.prototype.multiplyScalar(
+ ray.direction,
+ info.distance
+ )
+ );
+ info.normal = Flog.RayTracer.Vector.prototype.subtract(
+ info.position,
+ this.position
+ ).normalize();
+
+ info.color = this.material.getColor(0,0);
+ } else {
+ info.isHit = false;
+ }
+ return info;
+ },
+
+ toString : function () {
+ return 'Sphere [position=' + this.position + ', radius=' + this.radius + ']';
+ }
+}
+/* Fake a Flog.* namespace */
+if(typeof(Flog) == 'undefined') var Flog = {};
+if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {};
+if(typeof(Flog.RayTracer.Shape) == 'undefined') Flog.RayTracer.Shape = {};
+
+Flog.RayTracer.Shape.Plane = Class.create();
+
+Flog.RayTracer.Shape.Plane.prototype = {
+ d: 0.0,
+
+ initialize : function(pos, d, material) {
+ this.position = pos;
+ this.d = d;
+ this.material = material;
+ },
+
+ intersect: function(ray){
+ var info = new Flog.RayTracer.IntersectionInfo();
+
+ var Vd = this.position.dot(ray.direction);
+ if(Vd == 0) return info; // no intersection
+
+ var t = -(this.position.dot(ray.position) + this.d) / Vd;
+ if(t <= 0) return info;
+
+ info.shape = this;
+ info.isHit = true;
+ info.position = Flog.RayTracer.Vector.prototype.add(
+ ray.position,
+ Flog.RayTracer.Vector.prototype.multiplyScalar(
+ ray.direction,
+ t
+ )
+ );
+ info.normal = this.position;
+ info.distance = t;
+
+ if(this.material.hasTexture){
+ var vU = new Flog.RayTracer.Vector(this.position.y, this.position.z, -this.position.x);
+ var vV = vU.cross(this.position);
+ var u = info.position.dot(vU);
+ var v = info.position.dot(vV);
+ info.color = this.material.getColor(u,v);
+ } else {
+ info.color = this.material.getColor(0,0);
+ }
+
+ return info;
+ },
+
+ toString : function () {
+ return 'Plane [' + this.position + ', d=' + this.d + ']';
+ }
+}
+/* Fake a Flog.* namespace */
+if(typeof(Flog) == 'undefined') var Flog = {};
+if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {};
+
+Flog.RayTracer.IntersectionInfo = Class.create();
+
+Flog.RayTracer.IntersectionInfo.prototype = {
+ isHit: false,
+ hitCount: 0,
+ shape: null,
+ position: null,
+ normal: null,
+ color: null,
+ distance: null,
+
+ initialize : function() {
+ this.color = new Flog.RayTracer.Color(0,0,0);
+ },
+
+ toString : function () {
+ return 'Intersection [' + this.position + ']';
+ }
+}
+/* Fake a Flog.* namespace */
+if(typeof(Flog) == 'undefined') var Flog = {};
+if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {};
+
+Flog.RayTracer.Camera = Class.create();
+
+Flog.RayTracer.Camera.prototype = {
+ position: null,
+ lookAt: null,
+ equator: null,
+ up: null,
+ screen: null,
+
+ initialize : function(pos, lookAt, up) {
+ this.position = pos;
+ this.lookAt = lookAt;
+ this.up = up;
+ this.equator = lookAt.normalize().cross(this.up);
+ this.screen = Flog.RayTracer.Vector.prototype.add(this.position, this.lookAt);
+ },
+
+ getRay: function(vx, vy){
+ var pos = Flog.RayTracer.Vector.prototype.subtract(
+ this.screen,
+ Flog.RayTracer.Vector.prototype.subtract(
+ Flog.RayTracer.Vector.prototype.multiplyScalar(this.equator, vx),
+ Flog.RayTracer.Vector.prototype.multiplyScalar(this.up, vy)
+ )
+ );
+ pos.y = pos.y * -1;
+ var dir = Flog.RayTracer.Vector.prototype.subtract(
+ pos,
+ this.position
+ );
+
+ var ray = new Flog.RayTracer.Ray(pos, dir.normalize());
+
+ return ray;
+ },
+
+ toString : function () {
+ return 'Ray []';
+ }
+}
+/* Fake a Flog.* namespace */
+if(typeof(Flog) == 'undefined') var Flog = {};
+if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {};
+
+Flog.RayTracer.Background = Class.create();
+
+Flog.RayTracer.Background.prototype = {
+ color : null,
+ ambience : 0.0,
+
+ initialize : function(color, ambience) {
+ this.color = color;
+ this.ambience = ambience;
+ }
+}
+/* Fake a Flog.* namespace */
+if(typeof(Flog) == 'undefined') var Flog = {};
+if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {};
+
+Flog.RayTracer.Engine = Class.create();
+
+Flog.RayTracer.Engine.prototype = {
+ canvas: null, /* 2d context we can render to */
+
+ initialize: function(options){
+ this.options = Object.extend({
+ canvasHeight: 100,
+ canvasWidth: 100,
+ pixelWidth: 2,
+ pixelHeight: 2,
+ renderDiffuse: false,
+ renderShadows: false,
+ renderHighlights: false,
+ renderReflections: false,
+ rayDepth: 2
+ }, options || {});
+
+ this.options.canvasHeight /= this.options.pixelHeight;
+ this.options.canvasWidth /= this.options.pixelWidth;
+
+ /* TODO: dynamically include other scripts */
+ },
+
+ setPixel: function(x, y, color){
+ var pxW, pxH;
+ pxW = this.options.pixelWidth;
+ pxH = this.options.pixelHeight;
+
+ if (this.canvas) {
+ this.canvas.fillStyle = color.toString();
+ this.canvas.fillRect (x * pxW, y * pxH, pxW, pxH);
+ } else {
+ if (x === y) {
+ checkNumber += color.brightness();
+ }
+ // print(x * pxW, y * pxH, pxW, pxH);
+ }
+ },
+
+ renderScene: function(scene, canvas){
+ checkNumber = 0;
+ /* Get canvas */
+ if (canvas) {
+ this.canvas = canvas.getContext("2d");
+ } else {
+ this.canvas = null;
+ }
+
+ var canvasHeight = this.options.canvasHeight;
+ var canvasWidth = this.options.canvasWidth;
+
+ for(var y=0; y < canvasHeight; y++){
+ for(var x=0; x < canvasWidth; x++){
+ var yp = y * 1.0 / canvasHeight * 2 - 1;
+ var xp = x * 1.0 / canvasWidth * 2 - 1;
+
+ var ray = scene.camera.getRay(xp, yp);
+
+ var color = this.getPixelColor(ray, scene);
+
+ this.setPixel(x, y, color);
+ }
+ }
+ if (checkNumber !== 2321) {
+ throw new Error("Scene rendered incorrectly");
+ }
+ },
+
+ getPixelColor: function(ray, scene){
+ var info = this.testIntersection(ray, scene, null);
+ if(info.isHit){
+ var color = this.rayTrace(info, ray, scene, 0);
+ return color;
+ }
+ return scene.background.color;
+ },
+
+ testIntersection: function(ray, scene, exclude){
+ var hits = 0;
+ var best = new Flog.RayTracer.IntersectionInfo();
+ best.distance = 2000;
+
+ for(var i=0; i<scene.shapes.length; i++){
+ var shape = scene.shapes[i];
+
+ if(shape != exclude){
+ var info = shape.intersect(ray);
+ if(info.isHit && info.distance >= 0 && info.distance < best.distance){
+ best = info;
+ hits++;
+ }
+ }
+ }
+ best.hitCount = hits;
+ return best;
+ },
+
+ getReflectionRay: function(P,N,V){
+ var c1 = -N.dot(V);
+ var R1 = Flog.RayTracer.Vector.prototype.add(
+ Flog.RayTracer.Vector.prototype.multiplyScalar(N, 2*c1),
+ V
+ );
+ return new Flog.RayTracer.Ray(P, R1);
+ },
+
+ rayTrace: function(info, ray, scene, depth){
+ // Calc ambient
+ var color = Flog.RayTracer.Color.prototype.multiplyScalar(info.color, scene.background.ambience);
+ var oldColor = color;
+ var shininess = Math.pow(10, info.shape.material.gloss + 1);
+
+ for(var i=0; i<scene.lights.length; i++){
+ var light = scene.lights[i];
+
+ // Calc diffuse lighting
+ var v = Flog.RayTracer.Vector.prototype.subtract(
+ light.position,
+ info.position
+ ).normalize();
+
+ if(this.options.renderDiffuse){
+ var L = v.dot(info.normal);
+ if(L > 0.0){
+ color = Flog.RayTracer.Color.prototype.add(
+ color,
+ Flog.RayTracer.Color.prototype.multiply(
+ info.color,
+ Flog.RayTracer.Color.prototype.multiplyScalar(
+ light.color,
+ L
+ )
+ )
+ );
+ }
+ }
+
+ // The greater the depth the more accurate the colours, but
+ // this is exponentially (!) expensive
+ if(depth <= this.options.rayDepth){
+ // calculate reflection ray
+ if(this.options.renderReflections && info.shape.material.reflection > 0)
+ {
+ var reflectionRay = this.getReflectionRay(info.position, info.normal, ray.direction);
+ var refl = this.testIntersection(reflectionRay, scene, info.shape);
+
+ if (refl.isHit && refl.distance > 0){
+ refl.color = this.rayTrace(refl, reflectionRay, scene, depth + 1);
+ } else {
+ refl.color = scene.background.color;
+ }
+
+ color = Flog.RayTracer.Color.prototype.blend(
+ color,
+ refl.color,
+ info.shape.material.reflection
+ );
+ }
+
+ // Refraction
+ /* TODO */
+ }
+
+ /* Render shadows and highlights */
+
+ var shadowInfo = new Flog.RayTracer.IntersectionInfo();
+
+ if(this.options.renderShadows){
+ var shadowRay = new Flog.RayTracer.Ray(info.position, v);
+
+ shadowInfo = this.testIntersection(shadowRay, scene, info.shape);
+ if(shadowInfo.isHit && shadowInfo.shape != info.shape /*&& shadowInfo.shape.type != 'PLANE'*/){
+ var vA = Flog.RayTracer.Color.prototype.multiplyScalar(color, 0.5);
+ var dB = (0.5 * Math.pow(shadowInfo.shape.material.transparency, 0.5));
+ color = Flog.RayTracer.Color.prototype.addScalar(vA,dB);
+ }
+ }
+
+ // Phong specular highlights
+ if(this.options.renderHighlights && !shadowInfo.isHit && info.shape.material.gloss > 0){
+ var Lv = Flog.RayTracer.Vector.prototype.subtract(
+ info.shape.position,
+ light.position
+ ).normalize();
+
+ var E = Flog.RayTracer.Vector.prototype.subtract(
+ scene.camera.position,
+ info.shape.position
+ ).normalize();
+
+ var H = Flog.RayTracer.Vector.prototype.subtract(
+ E,
+ Lv
+ ).normalize();
+
+ var glossWeight = Math.pow(Math.max(info.normal.dot(H), 0), shininess);
+ color = Flog.RayTracer.Color.prototype.add(
+ Flog.RayTracer.Color.prototype.multiplyScalar(light.color, glossWeight),
+ color
+ );
+ }
+ }
+ color.limit();
+ return color;
+ }
+};
+
+
+function renderScene(){
+ var scene = new Flog.RayTracer.Scene();
+
+ scene.camera = new Flog.RayTracer.Camera(
+ new Flog.RayTracer.Vector(0, 0, -15),
+ new Flog.RayTracer.Vector(-0.2, 0, 5),
+ new Flog.RayTracer.Vector(0, 1, 0)
+ );
+
+ scene.background = new Flog.RayTracer.Background(
+ new Flog.RayTracer.Color(0.5, 0.5, 0.5),
+ 0.4
+ );
+
+ var sphere = new Flog.RayTracer.Shape.Sphere(
+ new Flog.RayTracer.Vector(-1.5, 1.5, 2),
+ 1.5,
+ new Flog.RayTracer.Material.Solid(
+ new Flog.RayTracer.Color(0,0.5,0.5),
+ 0.3,
+ 0.0,
+ 0.0,
+ 2.0
+ )
+ );
+
+ var sphere1 = new Flog.RayTracer.Shape.Sphere(
+ new Flog.RayTracer.Vector(1, 0.25, 1),
+ 0.5,
+ new Flog.RayTracer.Material.Solid(
+ new Flog.RayTracer.Color(0.9,0.9,0.9),
+ 0.1,
+ 0.0,
+ 0.0,
+ 1.5
+ )
+ );
+
+ var plane = new Flog.RayTracer.Shape.Plane(
+ new Flog.RayTracer.Vector(0.1, 0.9, -0.5).normalize(),
+ 1.2,
+ new Flog.RayTracer.Material.Chessboard(
+ new Flog.RayTracer.Color(1,1,1),
+ new Flog.RayTracer.Color(0,0,0),
+ 0.2,
+ 0.0,
+ 1.0,
+ 0.7
+ )
+ );
+
+ scene.shapes.push(plane);
+ scene.shapes.push(sphere);
+ scene.shapes.push(sphere1);
+
+ var light = new Flog.RayTracer.Light(
+ new Flog.RayTracer.Vector(5, 10, -1),
+ new Flog.RayTracer.Color(0.8, 0.8, 0.8)
+ );
+
+ var light1 = new Flog.RayTracer.Light(
+ new Flog.RayTracer.Vector(-3, 5, -15),
+ new Flog.RayTracer.Color(0.8, 0.8, 0.8),
+ 100
+ );
+
+ scene.lights.push(light);
+ scene.lights.push(light1);
+
+ var imageWidth = 100; // $F('imageWidth');
+ var imageHeight = 100; // $F('imageHeight');
+ var pixelSize = "5,5".split(','); // $F('pixelSize').split(',');
+ var renderDiffuse = true; // $F('renderDiffuse');
+ var renderShadows = true; // $F('renderShadows');
+ var renderHighlights = true; // $F('renderHighlights');
+ var renderReflections = true; // $F('renderReflections');
+ var rayDepth = 2;//$F('rayDepth');
+
+ var raytracer = new Flog.RayTracer.Engine(
+ {
+ canvasWidth: imageWidth,
+ canvasHeight: imageHeight,
+ pixelWidth: pixelSize[0],
+ pixelHeight: pixelSize[1],
+ "renderDiffuse": renderDiffuse,
+ "renderHighlights": renderHighlights,
+ "renderShadows": renderShadows,
+ "renderReflections": renderReflections,
+ "rayDepth": rayDepth
+ }
+ );
+
+ raytracer.renderScene(scene, null, 0);
+}
+
+window.onload = function(){
+startTest("v8-raytrace", '39e09d10');
+
+test("RayTrace", renderScene);
+
+endTest();
+};
+</script>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/v8-richards.html b/testing/talos/talos/tests/dromaeo/tests/v8-richards.html
new file mode 100644
index 0000000000..9d1a5a847a
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/v8-richards.html
@@ -0,0 +1,549 @@
+<html>
+<head>
+<script src="../htmlrunner.js"></script>
+<script>
+// Copyright 2006-2008 the V8 project authors. All rights reserved.
+// 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 Google Inc. 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 THE COPYRIGHT
+// OWNER OR CONTRIBUTORS 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.
+
+
+// This is a JavaScript implementation of the Richards
+// benchmark from:
+//
+// http://www.cl.cam.ac.uk/~mr10/Bench.html
+//
+// The benchmark was originally implemented in BCPL by
+// Martin Richards.
+
+
+window.onload = function(){ startTest("v8-richards", 'ca0410e0');
+
+test("Richards", runRichards);
+
+endTest(); };
+
+
+/**
+ * The Richards benchmark simulates the task dispatcher of an
+ * operating system.
+ **/
+function runRichards() {
+ var scheduler = new Scheduler();
+ scheduler.addIdleTask(ID_IDLE, 0, null, COUNT);
+
+ var queue = new Packet(null, ID_WORKER, KIND_WORK);
+ queue = new Packet(queue, ID_WORKER, KIND_WORK);
+ scheduler.addWorkerTask(ID_WORKER, 1000, queue);
+
+ queue = new Packet(null, ID_DEVICE_A, KIND_DEVICE);
+ queue = new Packet(queue, ID_DEVICE_A, KIND_DEVICE);
+ queue = new Packet(queue, ID_DEVICE_A, KIND_DEVICE);
+ scheduler.addHandlerTask(ID_HANDLER_A, 2000, queue);
+
+ queue = new Packet(null, ID_DEVICE_B, KIND_DEVICE);
+ queue = new Packet(queue, ID_DEVICE_B, KIND_DEVICE);
+ queue = new Packet(queue, ID_DEVICE_B, KIND_DEVICE);
+ scheduler.addHandlerTask(ID_HANDLER_B, 3000, queue);
+
+ scheduler.addDeviceTask(ID_DEVICE_A, 4000, null);
+
+ scheduler.addDeviceTask(ID_DEVICE_B, 5000, null);
+
+ scheduler.schedule();
+
+ if (scheduler.queueCount != EXPECTED_QUEUE_COUNT ||
+ scheduler.holdCount != EXPECTED_HOLD_COUNT) {
+ var msg =
+ "Error during execution: queueCount = " + scheduler.queueCount +
+ ", holdCount = " + scheduler.holdCount + ".";
+ throw new Error(msg);
+ }
+}
+
+var COUNT = 1000;
+
+/**
+ * These two constants specify how many times a packet is queued and
+ * how many times a task is put on hold in a correct run of richards.
+ * They don't have any meaning a such but are characteristic of a
+ * correct run so if the actual queue or hold count is different from
+ * the expected there must be a bug in the implementation.
+ **/
+var EXPECTED_QUEUE_COUNT = 2322;
+var EXPECTED_HOLD_COUNT = 928;
+
+
+/**
+ * A scheduler can be used to schedule a set of tasks based on their relative
+ * priorities. Scheduling is done by maintaining a list of task control blocks
+ * which holds tasks and the data queue they are processing.
+ * @constructor
+ */
+function Scheduler() {
+ this.queueCount = 0;
+ this.holdCount = 0;
+ this.blocks = new Array(NUMBER_OF_IDS);
+ this.list = null;
+ this.currentTcb = null;
+ this.currentId = null;
+}
+
+var ID_IDLE = 0;
+var ID_WORKER = 1;
+var ID_HANDLER_A = 2;
+var ID_HANDLER_B = 3;
+var ID_DEVICE_A = 4;
+var ID_DEVICE_B = 5;
+var NUMBER_OF_IDS = 6;
+
+var KIND_DEVICE = 0;
+var KIND_WORK = 1;
+
+/**
+ * Add an idle task to this scheduler.
+ * @param {int} id the identity of the task
+ * @param {int} priority the task's priority
+ * @param {Packet} queue the queue of work to be processed by the task
+ * @param {int} count the number of times to schedule the task
+ */
+Scheduler.prototype.addIdleTask = function (id, priority, queue, count) {
+ this.addRunningTask(id, priority, queue, new IdleTask(this, 1, count));
+};
+
+/**
+ * Add a work task to this scheduler.
+ * @param {int} id the identity of the task
+ * @param {int} priority the task's priority
+ * @param {Packet} queue the queue of work to be processed by the task
+ */
+Scheduler.prototype.addWorkerTask = function (id, priority, queue) {
+ this.addTask(id, priority, queue, new WorkerTask(this, ID_HANDLER_A, 0));
+};
+
+/**
+ * Add a handler task to this scheduler.
+ * @param {int} id the identity of the task
+ * @param {int} priority the task's priority
+ * @param {Packet} queue the queue of work to be processed by the task
+ */
+Scheduler.prototype.addHandlerTask = function (id, priority, queue) {
+ this.addTask(id, priority, queue, new HandlerTask(this));
+};
+
+/**
+ * Add a handler task to this scheduler.
+ * @param {int} id the identity of the task
+ * @param {int} priority the task's priority
+ * @param {Packet} queue the queue of work to be processed by the task
+ */
+Scheduler.prototype.addDeviceTask = function (id, priority, queue) {
+ this.addTask(id, priority, queue, new DeviceTask(this))
+};
+
+/**
+ * Add the specified task and mark it as running.
+ * @param {int} id the identity of the task
+ * @param {int} priority the task's priority
+ * @param {Packet} queue the queue of work to be processed by the task
+ * @param {Task} task the task to add
+ */
+Scheduler.prototype.addRunningTask = function (id, priority, queue, task) {
+ this.addTask(id, priority, queue, task);
+ this.currentTcb.setRunning();
+};
+
+/**
+ * Add the specified task to this scheduler.
+ * @param {int} id the identity of the task
+ * @param {int} priority the task's priority
+ * @param {Packet} queue the queue of work to be processed by the task
+ * @param {Task} task the task to add
+ */
+Scheduler.prototype.addTask = function (id, priority, queue, task) {
+ this.currentTcb = new TaskControlBlock(this.list, id, priority, queue, task);
+ this.list = this.currentTcb;
+ this.blocks[id] = this.currentTcb;
+};
+
+/**
+ * Execute the tasks managed by this scheduler.
+ */
+Scheduler.prototype.schedule = function () {
+ this.currentTcb = this.list;
+ while (this.currentTcb != null) {
+ if (this.currentTcb.isHeldOrSuspended()) {
+ this.currentTcb = this.currentTcb.link;
+ } else {
+ this.currentId = this.currentTcb.id;
+ this.currentTcb = this.currentTcb.run();
+ }
+ }
+};
+
+/**
+ * Release a task that is currently blocked and return the next block to run.
+ * @param {int} id the id of the task to suspend
+ */
+Scheduler.prototype.release = function (id) {
+ var tcb = this.blocks[id];
+ if (tcb == null) return tcb;
+ tcb.markAsNotHeld();
+ if (tcb.priority > this.currentTcb.priority) {
+ return tcb;
+ } else {
+ return this.currentTcb;
+ }
+};
+
+/**
+ * Block the currently executing task and return the next task control block
+ * to run. The blocked task will not be made runnable until it is explicitly
+ * released, even if new work is added to it.
+ */
+Scheduler.prototype.holdCurrent = function () {
+ this.holdCount++;
+ this.currentTcb.markAsHeld();
+ return this.currentTcb.link;
+};
+
+/**
+ * Suspend the currently executing task and return the next task control block
+ * to run. If new work is added to the suspended task it will be made runnable.
+ */
+Scheduler.prototype.suspendCurrent = function () {
+ this.currentTcb.markAsSuspended();
+ return this.currentTcb;
+};
+
+/**
+ * Add the specified packet to the end of the worklist used by the task
+ * associated with the packet and make the task runnable if it is currently
+ * suspended.
+ * @param {Packet} packet the packet to add
+ */
+Scheduler.prototype.queue = function (packet) {
+ var t = this.blocks[packet.id];
+ if (t == null) return t;
+ this.queueCount++;
+ packet.link = null;
+ packet.id = this.currentId;
+ return t.checkPriorityAdd(this.currentTcb, packet);
+};
+
+/**
+ * A task control block manages a task and the queue of work packages associated
+ * with it.
+ * @param {TaskControlBlock} link the preceding block in the linked block list
+ * @param {int} id the id of this block
+ * @param {int} priority the priority of this block
+ * @param {Packet} queue the queue of packages to be processed by the task
+ * @param {Task} task the task
+ * @constructor
+ */
+function TaskControlBlock(link, id, priority, queue, task) {
+ this.link = link;
+ this.id = id;
+ this.priority = priority;
+ this.queue = queue;
+ this.task = task;
+ if (queue == null) {
+ this.state = STATE_SUSPENDED;
+ } else {
+ this.state = STATE_SUSPENDED_RUNNABLE;
+ }
+}
+
+/**
+ * The task is running and is currently scheduled.
+ */
+var STATE_RUNNING = 0;
+
+/**
+ * The task has packets left to process.
+ */
+var STATE_RUNNABLE = 1;
+
+/**
+ * The task is not currently running. The task is not blocked as such and may
+* be started by the scheduler.
+ */
+var STATE_SUSPENDED = 2;
+
+/**
+ * The task is blocked and cannot be run until it is explicitly released.
+ */
+var STATE_HELD = 4;
+
+var STATE_SUSPENDED_RUNNABLE = STATE_SUSPENDED | STATE_RUNNABLE;
+var STATE_NOT_HELD = ~STATE_HELD;
+
+TaskControlBlock.prototype.setRunning = function () {
+ this.state = STATE_RUNNING;
+};
+
+TaskControlBlock.prototype.markAsNotHeld = function () {
+ this.state = this.state & STATE_NOT_HELD;
+};
+
+TaskControlBlock.prototype.markAsHeld = function () {
+ this.state = this.state | STATE_HELD;
+};
+
+TaskControlBlock.prototype.isHeldOrSuspended = function () {
+ return (this.state & STATE_HELD) != 0 || (this.state == STATE_SUSPENDED);
+};
+
+TaskControlBlock.prototype.markAsSuspended = function () {
+ this.state = this.state | STATE_SUSPENDED;
+};
+
+TaskControlBlock.prototype.markAsRunnable = function () {
+ this.state = this.state | STATE_RUNNABLE;
+};
+
+/**
+ * Runs this task, if it is ready to be run, and returns the next task to run.
+ */
+TaskControlBlock.prototype.run = function () {
+ var packet;
+ if (this.state == STATE_SUSPENDED_RUNNABLE) {
+ packet = this.queue;
+ this.queue = packet.link;
+ if (this.queue == null) {
+ this.state = STATE_RUNNING;
+ } else {
+ this.state = STATE_RUNNABLE;
+ }
+ } else {
+ packet = null;
+ }
+ return this.task.run(packet);
+};
+
+/**
+ * Adds a packet to the worklist of this block's task, marks this as runnable if
+ * necessary, and returns the next runnable object to run (the one
+ * with the highest priority).
+ */
+TaskControlBlock.prototype.checkPriorityAdd = function (task, packet) {
+ if (this.queue == null) {
+ this.queue = packet;
+ this.markAsRunnable();
+ if (this.priority > task.priority) return this;
+ } else {
+ this.queue = packet.addTo(this.queue);
+ }
+ return task;
+};
+
+TaskControlBlock.prototype.toString = function () {
+ return "tcb { " + this.task + "@" + this.state + " }";
+};
+
+/**
+ * An idle task doesn't do any work itself but cycles control between the two
+ * device tasks.
+ * @param {Scheduler} scheduler the scheduler that manages this task
+ * @param {int} v1 a seed value that controls how the device tasks are scheduled
+ * @param {int} count the number of times this task should be scheduled
+ * @constructor
+ */
+function IdleTask(scheduler, v1, count) {
+ this.scheduler = scheduler;
+ this.v1 = v1;
+ this.count = count;
+}
+
+IdleTask.prototype.run = function (packet) {
+ this.count--;
+ if (this.count == 0) return this.scheduler.holdCurrent();
+ if ((this.v1 & 1) == 0) {
+ this.v1 = this.v1 >> 1;
+ return this.scheduler.release(ID_DEVICE_A);
+ } else {
+ this.v1 = (this.v1 >> 1) ^ 0xD008;
+ return this.scheduler.release(ID_DEVICE_B);
+ }
+};
+
+IdleTask.prototype.toString = function () {
+ return "IdleTask"
+};
+
+/**
+ * A task that suspends itself after each time it has been run to simulate
+ * waiting for data from an external device.
+ * @param {Scheduler} scheduler the scheduler that manages this task
+ * @constructor
+ */
+function DeviceTask(scheduler) {
+ this.scheduler = scheduler;
+ this.v1 = null;
+}
+
+DeviceTask.prototype.run = function (packet) {
+ if (packet == null) {
+ if (this.v1 == null) return this.scheduler.suspendCurrent();
+ var v = this.v1;
+ this.v1 = null;
+ return this.scheduler.queue(v);
+ } else {
+ this.v1 = packet;
+ return this.scheduler.holdCurrent();
+ }
+};
+
+DeviceTask.prototype.toString = function () {
+ return "DeviceTask";
+};
+
+/**
+ * A task that manipulates work packets.
+ * @param {Scheduler} scheduler the scheduler that manages this task
+ * @param {int} v1 a seed used to specify how work packets are manipulated
+ * @param {int} v2 another seed used to specify how work packets are manipulated
+ * @constructor
+ */
+function WorkerTask(scheduler, v1, v2) {
+ this.scheduler = scheduler;
+ this.v1 = v1;
+ this.v2 = v2;
+}
+
+WorkerTask.prototype.run = function (packet) {
+ if (packet == null) {
+ return this.scheduler.suspendCurrent();
+ } else {
+ if (this.v1 == ID_HANDLER_A) {
+ this.v1 = ID_HANDLER_B;
+ } else {
+ this.v1 = ID_HANDLER_A;
+ }
+ packet.id = this.v1;
+ packet.a1 = 0;
+ for (var i = 0; i < DATA_SIZE; i++) {
+ this.v2++;
+ if (this.v2 > 26) this.v2 = 1;
+ packet.a2[i] = this.v2;
+ }
+ return this.scheduler.queue(packet);
+ }
+};
+
+WorkerTask.prototype.toString = function () {
+ return "WorkerTask";
+};
+
+/**
+ * A task that manipulates work packets and then suspends itself.
+ * @param {Scheduler} scheduler the scheduler that manages this task
+ * @constructor
+ */
+function HandlerTask(scheduler) {
+ this.scheduler = scheduler;
+ this.v1 = null;
+ this.v2 = null;
+}
+
+HandlerTask.prototype.run = function (packet) {
+ if (packet != null) {
+ if (packet.kind == KIND_WORK) {
+ this.v1 = packet.addTo(this.v1);
+ } else {
+ this.v2 = packet.addTo(this.v2);
+ }
+ }
+ if (this.v1 != null) {
+ var count = this.v1.a1;
+ var v;
+ if (count < DATA_SIZE) {
+ if (this.v2 != null) {
+ v = this.v2;
+ this.v2 = this.v2.link;
+ v.a1 = this.v1.a2[count];
+ this.v1.a1 = count + 1;
+ return this.scheduler.queue(v);
+ }
+ } else {
+ v = this.v1;
+ this.v1 = this.v1.link;
+ return this.scheduler.queue(v);
+ }
+ }
+ return this.scheduler.suspendCurrent();
+};
+
+HandlerTask.prototype.toString = function () {
+ return "HandlerTask";
+};
+
+/* --- *
+ * P a c k e t
+ * --- */
+
+var DATA_SIZE = 4;
+
+/**
+ * A simple package of data that is manipulated by the tasks. The exact layout
+ * of the payload data carried by a packet is not importaint, and neither is the
+ * nature of the work performed on packets by the tasks.
+ *
+ * Besides carrying data, packets form linked lists and are hence used both as
+ * data and worklists.
+ * @param {Packet} link the tail of the linked list of packets
+ * @param {int} id an ID for this packet
+ * @param {int} kind the type of this packet
+ * @constructor
+ */
+function Packet(link, id, kind) {
+ this.link = link;
+ this.id = id;
+ this.kind = kind;
+ this.a1 = 0;
+ this.a2 = new Array(DATA_SIZE);
+}
+
+/**
+ * Add this packet to the end of a worklist, and return the worklist.
+ * @param {Packet} queue the worklist to add this packet to
+ */
+Packet.prototype.addTo = function (queue) {
+ this.link = null;
+ if (queue == null) return this;
+ var peek, next = queue;
+ while ((peek = next.link) != null)
+ next = peek;
+ next.link = this;
+ return queue;
+};
+
+Packet.prototype.toString = function () {
+ return "Packet";
+};
+</script>
+</head>
+<body></body>
+</html>
diff --git a/testing/talos/talos/tests/dromaeo/tests/w3c_home.png b/testing/talos/talos/tests/dromaeo/tests/w3c_home.png
new file mode 100644
index 0000000000..f70c2b0847
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/tests/w3c_home.png
Binary files differ
diff --git a/testing/talos/talos/tests/dromaeo/web-style.css b/testing/talos/talos/tests/dromaeo/web-style.css
new file mode 100644
index 0000000000..c439dc0ec8
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/web-style.css
@@ -0,0 +1,24 @@
+
+a { color: orange; }
+div.test { overflow: hidden; margin: 4px; }
+div.test b { display: block; float: left; width: 150px; text-align: right; margin-right: 10px; }
+div.bar { float: left; width: 400px; border: 1px inset; text-align: left; }
+div.bar div { height: 1em; background: url(orange-stripe.png); }
+div.bar span { padding-left: 5px; padding-right: 5px; }
+body { font-family: Arial; font-size: 12px; background: url(gray-stripe.png); text-align: center; }
+
+/*#main { margin: 0 auto; width: 600px; padding: 10px; background: #FFF; }*/
+
+ol.results { text-align: left; display: none; font-size: 10px; margin-left: 120px; list-style: none; }
+ol.results li { clear: both; overflow: auto; }
+ol.results b { display: block; width: 200px; float: left; text-align: right; padding-right: 15px; }
+#info, div.results { clear:both;width:420px;margin:10 auto;text-align:left; padding: 10px 10px 10px 110px; }
+#info span { background: #FFF; color: #000; padding: 8px 4px 4px 4px; }
+h1 { text-align: left; }
+h1 img { float:left;margin-right: 15px;margin-top: -10px; border: 0; }
+h1 small { font-weight:normal; }
+iframe { display: none; }
+div.resultwrap { text-align: center; }
+table.results { font-size: 12px; margin: 0 auto; }
+table.results td, table.results th.name { text-align: right; }
+table.results .winner { background-color: #c7331d; }
diff --git a/testing/talos/talos/tests/dromaeo/webrunner.js b/testing/talos/talos/tests/dromaeo/webrunner.js
new file mode 100644
index 0000000000..a0819d3f89
--- /dev/null
+++ b/testing/talos/talos/tests/dromaeo/webrunner.js
@@ -0,0 +1,807 @@
+(function(){
+
+ // Populated from: http://www.medcalc.be/manual/t-distribution.php
+ // 95% confidence for N - 1 = 4
+ var tDistribution = 2.776;
+
+ // The number of individual test iterations to do
+ var numTests = 5;
+
+ // The type of run that we're doing (options are "runs/s" or "ms")
+ var runStyle = "runs/s";
+
+ // A rough estimate, in seconds, of how long it'll take each test
+ // iteration to run
+ var timePerTest = runStyle === "runs/s" ? 1 : 0.5;
+
+ // Initialize a batch of tests
+ // name = The name of the test collection
+ this.startTest = function(name, version){
+ numloaded++;
+ if ( numloaded == totalTests )
+ setTimeout( init, 100 );
+
+ testName = name;
+ if ( !queues[testName] ) return;
+ testID = testName;
+ testNames[testID] = testName;
+ testVersions[testID] = version || 0;
+ testSummary[testID] = testSummaryNum[testID] = testDone[testID] = testNum[testID] = 0;
+
+ queues[testID].push(function(){
+ summary = 0;
+ dequeue();
+ });
+ };
+
+ // Anything that you want to have run in order, but not actually test
+ this.prep = function(fn){
+ if ( !queues[testName] ) return;
+ queues[testID].push(function(){
+ fn();
+ dequeue();
+ });
+ };
+
+ // End the tests and finalize the report
+ this.endTest = function(){
+ if ( !queues[testName] ) return;
+ // Save the summary output until all the test are complete
+ queues[testID].push(function(){
+ dequeue();
+ });
+ };
+
+ // Run a new test
+ // name = The unique name of the test
+ // num = The 'length' of the test (length of string, # of tests, etc.)
+ // fn = A function holding the test to run
+ this.test = function(name, num, fn){
+ if ( !queues[testName] ) return;
+ // Save the summary output until all the test are complete
+ var curTest = testName, curID = testID;
+
+ if ( arguments.length === 3 ) {
+ if ( !nameDone[name] )
+ nameDone[name] = 0;
+ nameDone[name]++;
+
+ if ( nameDone[name] != 3 )
+ return;
+ } else {
+ fn = num;
+ num = 1;
+ }
+
+ time += timePerTest * numTests;
+
+ testNum[curID]++;
+
+ // Don't execute the test immediately
+ queues[testID].push(function() {
+ title = name;
+ var times = [], start, pos = 0, cur;
+
+ setTimeout(function() {
+ // run tests
+ try {
+ if (doShark(name)) {
+ connectShark();
+ startShark();
+ }
+ } catch( e ) {
+ alert("FAIL " + name + " " + num + e);
+ return;
+ }
+
+ TalosContentProfiler.subtestStart("dromaeo: begin test [" + name + "]", name, true).then(() => {
+ start = performance.now();
+
+ if (runStyle === "runs/s") {
+ var runs = 0;
+
+ cur = performance.now();
+
+ while ( (cur - start) < 1000 ) {
+ fn();
+ cur = performance.now();
+ runs++;
+ }
+ } else {
+ fn();
+ cur = performance.now();
+ }
+
+ try {
+ if (doShark(name)) {
+ stopShark();
+ disconnectShark();
+ }
+ } catch(e) {
+ alert("FAIL " + name + " " + num + e);
+ return;
+ }
+
+ TalosContentProfiler.subtestEnd("dromaeo: test [" + name + "]", name, true).then(() => {
+ // For making Median and Variance
+ if (runStyle === "runs/s") {
+ times.push((runs * 1000) / (cur - start));
+ } else {
+ times.push(cur - start);
+ }
+
+ if (pos < numTests) {
+ updateTime();
+ updateTestPos({curID: curID, collection: testNames[curID], version: testVersions[curID]});
+ }
+
+ if (++pos < numTests) {
+ setTimeout(arguments.callee, 1);
+ } else {
+ var data = compute(times, numTests);
+
+ data.curID = curID;
+ data.collection = testNames[curID];
+ data.version = testVersions[curID];
+ data.name = title;
+ data.scale = num;
+
+ logTest(data);
+
+ dequeue();
+ }
+ });
+ });
+ }, 1);
+ });
+
+ function compute(times, runs){
+ var results = {runs: runs}, num = times.length;
+
+ times = times.sort(function(a,b){
+ return a - b;
+ });
+ results.raw = times
+
+ // Make Sum
+ results.sum = 0;
+
+ for ( var i = 0; i < num; i++ )
+ results.sum += times[i];
+
+ // Make Min
+ results.min = times[0];
+
+ // Make Max
+ results.max = times[ num - 1 ];
+
+ // Make Mean
+ results.mean = results.sum / num;
+
+ // Make Median
+ results.median = num % 2 == 0 ?
+ (times[Math.floor(num/2)] + times[Math.ceil(num/2)]) / 2 :
+ times[Math.round(num/2)];
+
+ // Make Variance
+ results.variance = 0;
+
+ for ( var i = 0; i < num; i++ )
+ results.variance += Math.pow(times[i] - results.mean, 2);
+
+ results.variance /= num - 1;
+
+ // Make Standard Deviation
+ results.deviation = Math.sqrt( results.variance );
+
+ // Compute Standard Errors Mean
+ results.sem = (results.deviation / Math.sqrt(results.runs)) * tDistribution;
+
+ // Error
+ results.error = ((results.sem / results.mean) * 100) || 0;
+
+ return results;
+ }
+ };
+
+ // All the test data
+ var tests;
+
+ // The number of test files to load
+ var totalTests = 0;
+
+ // The number of test files loaded
+ var numloaded = 0;
+
+ // Queue of functions to run
+ var queue = [];
+ var queues = {};
+
+ var catnames = {
+ dromaeo: "Dromaeo JavaScript Tests",
+ sunspider: "SunSpider JavaScript Tests",
+ "v8": "V8 JavaScript Tests",
+ dom: "DOM Core Tests",
+ jslib: "JavaScript Library Tests",
+ cssquery: "CSS Selector Tests"
+ };
+
+
+ var testElems = {};
+ var testNum = {};
+ var testDone = {};
+ var testNames = {};
+ var testVersions = {};
+ var dataStore = [];
+ var names = [];
+ var interval;
+ var totalTime = 0;
+ var time = 0;
+ var title, testName, testID, testSummary = {} , testSummaryNum = {}, maxTotal = 0, maxTotalNum = 0;
+ var meanValues = [];
+ var nameDone = {};
+
+ // Query String Parsing
+ var search = window.limitSearch || (window.location.search || "?").substr(1);
+
+ search = search.replace(/&runStyle=([^&]+)/, function(all, type){
+ runStyle = type;
+ return "";
+ });
+
+ var parts = search.split("&");
+
+ if ( parts[0] === "recommended" ) {
+ parts[0] = "dromaeo|sunspider|v8|dom|jslib";
+ }
+
+ var none = !parts[0] || parts[0].match(/=/);
+ var filter = parts.length && !parts[0].match(/=/) && parts[0] !== "all" ?
+ new RegExp(parts.shift(), "i") :
+ /./;
+
+ // To enable shark debugging add &shark to the end of the URL
+ var doShark = function(name) { return false; };
+ for ( var i = 0; i < parts.length; i++ ) {
+ var m = /^shark(?:=(.*))?$/.exec(parts[i]);
+ if (m) {
+ if (m[1] === undefined) {
+ doShark = function(name) { return true; };
+ }
+ else {
+ var sharkMatch = new RegExp(m[1]);
+ doShark = function(name) {
+ return sharkMatch.test(name);
+ };
+ }
+ }
+
+ m = /^numTests=(\d+)$/.exec(parts[i]);
+ if (m)
+ numTests = Number(m[1]);
+ }
+
+ jQuery(window).load(function(){
+ var id = search.match(/id=([\d,]+)/);
+
+ if ( none && !id ) {
+ $("#overview").hide();
+ return;
+ }
+
+ var cat = filter.toString().slice(1,-2);
+
+ if ( catnames[cat] ) {
+ $("#overview span:first").html( catnames[cat] );
+
+ if ( catnames[cat].length > 22 ) {
+ $("#overview span:first").css("font-size", 22);
+ }
+ }
+
+ $("#tests").hide();
+
+ jQuery.getJSON("tests/MANIFEST.json", function(json){
+ tests = json;
+
+ names = [];
+
+ for ( var name in tests )
+ // Don't load tests that we aren't looking for
+ if ( filter.test( name ) )
+ names.push( name );
+
+ names = names.sort(function(a, b){
+ return tests[a].name < tests[b].name ? -1 :
+ tests[a].name == tests[b].name ? 0 : 1;
+ });
+
+ // Check if we're loading a specific result set
+ // ?id=NUM
+ if ( id ) {
+ jQuery.ajax({
+ url: "store.php?id=" + id[1],
+ dataType: "json",
+ success: function(data){
+ resultsLoaded(id[1], data);
+ }
+ });
+
+ // Otherwise we're loading a normal set of tests
+ } else {
+ $("#wrapper").append("<br style='clear:both;'/><center><a href='?" + names.join("|") + "'>Re-run tests</a></center>");
+
+ for ( var i = 0; i < names.length; i++ ) (function(name){
+ var test = tests[name];
+
+ queues[name] = [];
+ makeElem(name);
+ initTest(name);
+
+ totalTests++;
+
+ // Check if we're loading an HTML file
+ if ( test.file.match(/html$/) ) {
+ var iframe = document.createElement("iframe");
+ iframe.style.height = "1px";
+ iframe.style.width = "1px";
+ iframe.src = "tests/" + test.file;
+ document.body.appendChild( iframe );
+
+ // Otherwise we're loading a pure-JS test
+ } else {
+ jQuery.getScript("tests/" + test.file);
+ }
+ })(names[i]);
+ }
+ });
+ });
+
+ // Remove the next test from the queue and execute it
+ function dequeue(){
+ if ( interval && queue.length ) {
+ if (typeof plGarbageCollect !== "undefined") {
+ plGarbageCollect();
+ }
+ queue.shift()();
+
+ } else if ( queue.length == 0 ) {
+ interval = false;
+ time = 0;
+
+ $("#overview input").remove();
+ updateTimebar();
+
+ if ( window.limitSearch ) {
+ var summary = (runStyle === "runs/s" ? Math.pow(Math.E, maxTotal / maxTotalNum) : maxTotal).toFixed(2);
+
+ if ( typeof tpRecordTime !== "undefined" ) {
+ first = true;
+ meanString = "";
+ for (var i=0;i<meanValues.length; i++) {
+ if (first == true) {
+ meanString = meanValues[i];
+ first = false;
+ } else {
+ meanString += "," + meanValues[i];
+ }
+ }
+ tpRecordTime( meanString );
+
+ } else {
+ var pre = document.createElement("pre");
+ pre.style.display = "none";
+ pre.innerHTML = "__start_report" + summary + "__end_report";
+ document.body.appendChild( pre );
+ }
+
+ if ( typeof goQuitApplication !== "undefined" ) {
+ goQuitApplication();
+ }
+
+ } else if ( dataStore && dataStore.length ) {
+ $("body").addClass("alldone");
+ var div = jQuery("<div class='results'>Saving...</div>").insertBefore("#overview");
+ jQuery.ajax({
+ type: "POST",
+ url: "store.php",
+ data: "data=" + encodeURIComponent(JSON.stringify(dataStore)) + "&style=" + runStyle,
+ success: function(id){
+ var url = window.location.href.replace(/\?.*$/, "") + "?id=" + id;
+ div.html("Results saved. You can access them at a later time at the following URL:<br/><strong><a href='" + url + "'>" + url + "</a></strong></div>");
+ }
+ });
+ }
+ }
+ }
+
+ function updateTimebar(){
+ $("#timebar").html("<span><strong>" + (runStyle === "runs/s" ? Math.pow(Math.E, maxTotal / maxTotalNum) : maxTotal).toFixed(2) + "</strong>" + runStyle + " (Total)</span>");
+ }
+
+ // Run once all the test files are fully loaded
+ function init(){
+ for ( var n = 0; n < names.length; n++ ) {
+ queue = queue.concat( queues[ names[n] ] );
+ }
+
+ totalTime = time;
+ time += timePerTest;
+ updateTime();
+
+ $("#pause")
+ .val("Run")
+ .click(function(){
+ if ( interval ) {
+ interval = null;
+ this.value = "Run";
+ } else {
+ if ( !interval ) {
+ interval = true;
+ dequeue();
+ }
+ this.value = "Pause";
+ }
+ });
+
+ if ( window.limitSearch ) {
+ $("#pause").click();
+ }
+ }
+
+ function initTest(curID){
+ $("<div class='result-item'></div>")
+ .append( testElems[ curID ] )
+ .append( "<p>" + (tests[curID] ? tests[ curID ].desc : "") + "<br/><a href='" +
+ (tests[curID] && tests[curID].origin ? tests[ curID ].origin[1] : "") + "'>Origin</a>, <a href='tests/" +
+ (tests[curID] ? tests[ curID ].file : "") + "'>Source</a>, <b>Tests:</b> " +
+ (tests[curID] && tests[curID].tags ? tests[ curID ].tags.join(", ") : "") + "</p>" )
+ .append( "<ol class='results'></ol>" )
+ .appendTo("#main");
+ }
+
+ function resultsLoaded(id, datas){
+ var results = {};
+ var runs = {};
+ var output = "";
+ var excluded = [];
+ var overview = document.getElementById("overview");
+
+ for ( var d = 0; d < datas.length; d++ ) {
+ var data = datas[d];
+
+ runStyle = data.style;
+
+ if ( datas.length == 1 ) {
+ $("#overview").before("<div class='results'>Viewing test run #" + id +
+ ", run on: " + data.created_at + " by:<br>" + data.useragent + "</div>");
+ }
+
+ runs[data.id] = data;
+ runs[data.id].mean = 0;
+ runs[data.id].error = 0;
+ runs[data.id].num = 0;
+ runs[data.id].name = (data.useragent.match(/(MSIE [\d.]+)/) ||
+ data.useragent.match(/((?:WebKit|Firefox|Shiretoko|Opera)\/[\w.]+)/) || [0,data.id])[1];
+
+ for ( var i = 0; i < data.results.length; i++ ) {
+ var result = data.results[i];
+ var curID = result.collection;
+ var run = result.run_id;
+
+ result.version += data.style;
+
+ if ( !results[curID] )
+ results[curID] = {tests:{}, total:{}, version: result.version};
+
+ if ( results[curID].version == result.version ) {
+ if ( !results[curID].total[run] ) {
+ results[curID].total[run] = {max:0, mean:0, median:0, min:0, deviation:0, error:0, num:0};
+ results[curID].tests[run] = [];
+ }
+
+ result.error = ((((result.deviation / Math.sqrt(result.runs)) * tDistribution) / result.mean) * 100) || 0;
+ results[curID].tests[run].push( result );
+
+ var error = (parseFloat(result.error) / 100) * parseFloat(result.mean);
+ error = (runStyle === "ms" ? error : error == 0 ? 0 : Math.log(error));
+ var total = results[curID].total[run];
+ total.num++;
+
+ for ( var type in total ) {
+ if ( type == "error" ) {
+ total.error += error;
+ } else if ( type == "mean" ) {
+ total.mean += (runStyle === "ms" ? parseFloat(result.mean) : Math.log(parseFloat(result.mean)));
+ } else if ( type !== "num" ) {
+ total[type] += parseFloat(result[type]);
+ }
+ }
+
+ runs[run].num++;
+ runs[run].mean += runStyle === "ms" ? parseFloat(result.mean) : Math.log(parseFloat(result.mean));
+ runs[run].error += error;
+ }
+ }
+ }
+
+ var runTests = [];
+
+ if ( datas.length == 1 ) {
+ $("body").addClass("alldone");
+
+ for ( var i = 0; i < data.results.length; i++ ) {
+ var item = data.results[i];
+ var result = item.curID = item.collection;
+
+ if ( !filter.test(result) )
+ continue;
+
+ if ( !testElems[result] ) {
+ runTests.push(result);
+ makeElem( result );
+ initTest( result );
+ }
+
+ // Compute Standard Errors Mean
+ item.sem = (item.deviation / Math.sqrt(item.runs)) * tDistribution;
+
+ // Error
+ item.error = ((item.sem / item.mean) * 100) || 0;
+
+ logTest( item );
+
+ // testDone, testNum, testSummary
+ testDone[ result ] = numTests - 1;
+ testNum[ result ] = 1;
+
+ updateTestPos( item );
+ }
+
+ $("div.result-item").addClass("done");
+
+ totalTime = time = timePerTest;
+ updateTime();
+
+ $("#overview input").remove();
+ updateTimebar();
+ } else {
+ // Remove results where there is only one comparison set
+ for ( var id in results ) {
+ var num = 0;
+
+ for ( var ntest in results[id].tests ) {
+ num++;
+ if ( num > 1 )
+ break;
+ }
+
+ if ( num <= 1 ) {
+ excluded.push( id );
+ delete results[id];
+ }
+ }
+
+ var preoutput = "<tr><td></td>";
+ for ( var run in runs )
+ preoutput += "<th><a href='?id=" + run + "'>" + runs[run].name + "</a></th>";
+ //preoutput += "<th>Winning %</th></tr>";
+ preoutput += "</tr>";
+
+ for ( var result in results ) {
+ // Skip results that we're filtering out
+ if ( !filter.test(result) )
+ continue;
+
+ runTests.push(result);
+
+ if ( runStyle === "runs/s" ) {
+ for ( var run in runs ) {
+ var mean = results[result].total[run].mean - 0;
+ var error = results[result].total[run].error - 0;
+
+ mean = Math.pow(Math.E, mean / results[result].total[run].num);
+ error = Math.pow(Math.E, error / results[result].total[run].num);
+ results[result].total[run].mean = mean;
+ results[result].total[run].error = error;
+ }
+ }
+
+ var name = tests[result] ? tests[result].name : result;
+ var tmp = processWinner(results[result].total);
+
+ output += "<tr><th class='name'><span onclick='toggleResults(this.nextSibling);'>&#9654; </span>" +
+ "<a href='' onclick='return toggleResults(this);'>" + name + "</a></th>";
+
+ for ( var run in runs ) {
+ var mean = results[result].total[run].mean - 0;
+ var error = results[result].total[run].error - 0;
+
+ output += "<td class='" + (tmp[run] || '') + "'>" + mean.toFixed(2) + "<small>" + runStyle + " &#177;" + ((error / mean) * 100).toFixed(2) + "%</small></td>";
+ }
+
+ //showWinner(tmp);
+ output += "</tr>";
+
+ var _tests = results[result].tests, _data = _tests[run], _num = _data.length;
+ for ( var i = 0; i < _num; i++ ) {
+ output += "<tr class='onetest hidden'><td><small>" + _data[i].name + "</small></td>";
+ for ( var run in runs ) {
+ output += "<td>" + (_tests[run][i].mean - 0).toFixed(2) + "<small>" + runStyle + " &#177;" + (_tests[run][i].error - 0).toFixed(2) + "%</small></td>";
+ }
+ output += "<td></td></tr>";
+ }
+ }
+
+ if ( runStyle === "runs/s" ) {
+ for ( var run in runs ) {
+ runs[run].mean = Math.pow(Math.E, runs[run].mean / runs[run].num);
+ runs[run].error = Math.pow(Math.E, runs[run].error / runs[run].num);
+ }
+ }
+
+ var tmp = processWinner(runs);
+ var totaloutput = "";
+
+ if ( runStyle === "ms" ) {
+ totaloutput += "<tr><th class='name'>Total:</th>";
+ } else {
+ totaloutput += "<tr><th class='name'>Total Score:</th>";
+ }
+
+ for ( var run in runs ) {
+ totaloutput += "<th class='name " + (tmp[run] || '') + "' title='" + (tmp[run + "title"] || '') + "'>" + runs[run].mean.toFixed(2) + "<small>" + runStyle + " &#177;" + ((runs[run].error / runs[run].mean) * 100).toFixed(2) + "%</small></th>";
+ }
+
+ //showWinner(tmp);
+ totaloutput += "</tr>";
+
+ overview.className = "";
+ overview.innerHTML = "<div class='resultwrap'><table class='results'>" + preoutput + totaloutput + output + totaloutput + "</table>" + (excluded.length ? "<div style='text-align:left;'><small><b>Excluded Tests:</b> " + excluded.sort().join(", ") + "</small></div>" : "") + "</div>";
+ }
+
+ $("#wrapper").append("<center><a href='?" + runTests.join("|") + "'>Re-run tests</a></center>");
+
+ function showWinner(tmp){
+ if ( datas.length > 1 ) {
+ if ( tmp.tie )
+ output += "<th>Tie</th>";
+ else
+ output += "<th>" + tmp.diff + "%</th>";
+ }
+ }
+ }
+
+ this.toggleResults = function(elem){
+ var span = elem.previousSibling;
+
+ elem.blur();
+ elem = elem.parentNode.parentNode.nextSibling;
+
+ span.innerHTML = elem.className.indexOf("hidden") < 0 ? "&#9654; " : "&#9660; ";
+
+ while ( elem && elem.className.indexOf("onetest") >= 0 ) {
+ elem.className = "onetest" + (elem.className.indexOf("hidden") >= 0 ? " " : " hidden");
+ elem = elem.nextSibling;
+ }
+
+ return false;
+ };
+
+ function updateTime(){
+ time -= timePerTest;
+ $("#left").html(Math.floor(time / 60) + ":" + (time % 60 < 10 ? "0" : "" ) + Math.floor(time % 60));
+
+ var w = ((totalTime - time) / totalTime) * 100;
+
+ $("#timebar").width((w < 1 ? 1 : w) + "%");
+ }
+
+ function logTest(data){
+ // Keep a running summary going
+ data.mean = parseFloat(data.mean);
+ var mean = (runStyle === "runs/s" ? Math.log(data.mean) : data.mean);
+ testSummary[data.curID] = (testSummary[data.curID] || 0) + mean;
+ testSummaryNum[data.curID] = (testSummaryNum[data.curID] || 0) + 1;
+
+ for (var data_iter = 0; data_iter < data.raw.length; data_iter++) {
+ meanValues.push(data.raw[data_iter]);
+ }
+ maxTotal += mean;
+ maxTotalNum++;
+
+ testDone[data.curID]--;
+ updateTestPos(data);
+
+ testElems[data.curID].next().next().append("<li><b>" + data.name +
+ ":</b> " + data.mean.toFixed(2) + "<small>" + runStyle + " &#177;" + data.error.toFixed(2) + "%</small></li>");
+
+ dataStore.push(data);
+ }
+
+ function updateTestPos(data, update){
+ if ( !update )
+ testDone[data.curID]++;
+
+ var per = (testDone[data.curID] / (testNum[data.curID] * numTests)) * 100;
+
+ if ( update )
+ per = 1;
+
+ var mean = (runStyle === "runs/s" ?
+ Math.pow(Math.E, testSummary[data.curID] / testSummaryNum[data.curID]) :
+ testSummary[data.curID]);
+
+ testElems[data.curID].html("<b>" + (tests[data.curID] ? tests[data.curID].name : data.curID) +
+ ":</b> <div class='bar'><div style='width:" +
+ per + "%;'>" + (per >= 100 ? "<span>" + mean.toFixed(2) + runStyle + "</span>" : "") + "</div></div>");
+
+ if ( per >= 100 && testSummary[data.curID] > 0 ) {
+ testElems[data.curID].parent().addClass("done");
+ }
+ }
+
+ function processWinner(data){
+ var minVal = -1, min2Val = -1, min, min2;
+
+ for ( var i in data ) {
+ var total = data[i].mean;
+ if ( minVal == -1 || (runStyle === "ms" && total <= minVal || runStyle === "runs/s" && total >= minVal) ) {
+ min2Val = minVal;
+ min2 = min;
+ minVal = total;
+ min = i;
+ } else if ( min2Val == -1 || (runStyle === "ms" && total <= minVal || runStyle === "runs/s" && total >= min2Val) ) {
+ min2Val = total;
+ min2 = i;
+ }
+ }
+
+ var tieVal = (runStyle === "ms" ? minVal : min2Val) + data[min].error + data[min2].error;
+
+ var ret = {
+ winner: min,
+ diff: runStyle === "ms" ?
+ -1 * Math.round((1 - (min2Val / minVal)) * 100) :
+ Math.round(((minVal / min2Val) - 1) * 100),
+ tie: minVal == min2Val || (runStyle === "ms" ? tieVal >= min2Val : tieVal >= minVal)
+ };
+
+ ret.tie = ret.tie || ret.diff == 0;
+
+ if ( ret.tie ) {
+ ret[ min ] = 'tie';
+ ret[ min2 ] = 'tie';
+ ret[ min + 'title' ] = "Tied with another run.";
+ ret[ min2 + 'title' ] = "Tied with another run.";
+ } else {
+ ret[ min ] = 'winner';
+ if ( min2Val > -1 ) {
+ ret[ min + 'title' ] = "Won by " + ret.diff + "%.";
+ }
+ }
+
+ return ret;
+ }
+
+ function makeElem(testID){
+/*
+ if ( tests[testID] ) {
+ var cat = tests[testID].category, catsm = cat.replace(/[^\w]/g, "-");
+ if ( !$("#" + catsm).length ) {
+ $("#main").append("<h2 id='" + catsm + "' class='test'><a href='?cat=" + cat +"'>" + cat + '</a><div class="bar"><div id="timebar" style="width:25%;"><span class="left">Est.&nbsp;Time:&nbsp;<strong id="left">0:00</strong></span></div></div>');
+ }
+ }
+*/
+
+ testElems[testID] = $("<div class='test'></div>")
+ .click(function(){
+ var next = jQuery(this).next().next();
+ if ( next.children().length == 0 ) return;
+ var display = next.css("display");
+ next.css("display", display == 'none' ? 'block' : 'none');
+ });
+
+ updateTestPos({curID: testID, collection: tests[testID] ? tests[testID].name : testID, version: testVersions[testID]}, true);
+ }
+})();
diff --git a/testing/talos/talos/tests/gfx/benchmarks/rasterflood_gradient.html b/testing/talos/talos/tests/gfx/benchmarks/rasterflood_gradient.html
new file mode 100644
index 0000000000..dfa71562c4
--- /dev/null
+++ b/testing/talos/talos/tests/gfx/benchmarks/rasterflood_gradient.html
@@ -0,0 +1,120 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+ <title>Paint-In-Time 2</title>
+ <style>
+ .gradient {
+ position: absolute;
+ width: 800px;
+ height: 600px;
+ opacity: 0.4;
+ }
+ </style>
+</head>
+<body>
+ <div id="grid">
+ </div>
+</body>
+<script>
+
+// Only allow painting a tiny slice of the frame - here, 15ms.
+var kFrameBudgetMs = 14;
+var kDivCount = 10;
+var kMaxTime = 20 * 1000;
+
+var gCrazyCounter = 0;
+var gIterations = 0;
+var gStart;
+var gDivs = [];
+
+function GetColor() {
+ var color = GetColor.kColors[GetColor.Index];
+ GetColor.Index++;
+ GetColor.Index = (GetColor.Index % GetColor.kColors.length);
+ return color;
+}
+GetColor.Index = 0;
+GetColor.kColors = ["red", "white", "green", "yellow", "orange", "brown"];
+
+function RadialGradient(offset) {
+ this.colors = [GetColor(), GetColor()];
+ this.percents = [0 + offset, 20 + offset];
+ this.toStyle = function() {
+ return "radial-gradient(" +
+ this.colors[0] + " " + this.percents[0] + "%, " +
+ this.colors[1] + " " + this.percents[1] + "%)";
+ };
+ this.advance = function() {
+ this.percents[0] += 1;
+ this.percents[0] %= 80;
+ this.percents[1] = this.percents[0] + 20;
+ };
+}
+
+function runFrame() {
+ var start = performance.now();
+
+ // Spin loop.
+ while (performance.now() - start < kFrameBudgetMs)
+ gCrazyCounter++;
+
+ for (var i = 0; i < gDivs.length; i++) {
+ var info = gDivs[i];
+ info.gradient.advance();
+ info.element.style.background = info.gradient.toStyle();
+ }
+
+ gIterations++;
+
+ if (performance.now() - gStart >= kMaxTime) {
+ if (window.tpRecordTime) {
+ window.tpRecordTime(gIterations);
+ }
+ return;
+ }
+
+ TalosContentProfiler.mark("rasterflood_gradient", true, start);
+
+ window.requestAnimationFrame(runFrame);
+}
+
+function setup() {
+ var root = document.getElementById("grid");
+ for (var i = 0; i < kDivCount; i++) {
+ var gradient = new RadialGradient(i * 10 / 2);
+
+ var div = document.createElement("div");
+ var info = {};
+ info.element = div;
+ info.gradient = gradient;
+
+ div.classList.add("gradient");
+ div.style.left = "10px";
+ div.style.top = "10px";
+ div.style.background = gradient.toStyle();
+ root.appendChild(div);
+
+ gDivs.push(info);
+ }
+}
+
+function startTest() {
+ setup();
+ gStart = performance.now();
+ window.requestAnimationFrame(runFrame);
+}
+
+addEventListener("load", function() {
+ try {
+ TalosContentProfiler.subtestStart("rasterflood_gradient.html loaded", true).then(() => {
+ startTest();
+ });
+ } catch (e) {
+ TalosContentProfiler.subtestStart("rasterflood_gradient.html loaded", true);
+ startTest();
+ }
+});
+</script>
+<script type="text/javascript" src="resource://talos-powers/TalosContentProfiler.js"></script>
+</html>
diff --git a/testing/talos/talos/tests/gfx/benchmarks/rasterflood_svg.html b/testing/talos/talos/tests/gfx/benchmarks/rasterflood_svg.html
new file mode 100644
index 0000000000..96ed1ab3ee
--- /dev/null
+++ b/testing/talos/talos/tests/gfx/benchmarks/rasterflood_svg.html
@@ -0,0 +1,146 @@
+<!DOCTYPE html>
+<html><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <title>Paint-In-Time</title>
+ <style>
+ svg {
+ width: 600px;
+ height: 800px;
+ }
+ </style>
+</head>
+<body>
+ <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <filter id="filter1">
+ <feGaussianBlur stdDeviation=".5"></feGaussianBlur>
+ </filter>
+ <filter id="filter2">
+ <feGaussianBlur in="SourceAlpha" stdDeviation="4" result="blur1"></feGaussianBlur>
+ <feSpecularLighting result="specOut" in="blur1" specularExponent="20" lighting-color="#cccccc">
+ <fePointLight x="50" y="50" z="1"></fePointLight>
+ </feSpecularLighting>
+ <feComposite in="SourceGraphic" in2="specOut" operator="arithmetic" k1="0" k2="1" k3="1" k4="0"></feComposite>
+ </filter>
+ </defs>
+ <g fill="none" stroke="blue" stroke-width="20" stroke-dasharray="1" class="rotating">
+ <rect x="50" y="50" width="80px" height="80px" fill="blue" id="rect1" opacity="0.25" filter="url(#filter2)" transform="rotate(202 64 64)">
+ </rect>
+ </g>
+ <g fill="none" stroke="red" stroke-width="20" lass="rotating">
+ <rect x="75" y="75" width="80px" height="80px" fill="blue" id="rect2" opacity="0.5" filter="url(#filter1)" transform="rotate(202 89 89)">
+ </rect>
+ </g>
+ <g fill="none" stroke="green" stroke-width="20" class="rotating">
+ <rect x="100" y="100" width="80px" height="80px" fill="green" id="rect3" opacity="0.75" filter="url(#filter1)" transform="rotate(202 114 114)">
+ </rect>
+ </g>
+ <g fill="none" stroke="yellow" stroke-width="20" stroke-dasharray="1" class="rotating">
+ <rect x="125" y="125" width="80px" height="80px" fill="green" id="rect4" opacity="1" filter="url(#filter2)" transform="rotate(202 139 139)">
+ </rect>
+ </g>
+ <g fill="none" stroke="pink" stroke-width="20" stroke-dasharray="1" class="rotating">
+ <rect x="75" y="125" width="80px" height="80px" fill="green" id="rect5" opacity="1" filter="url(#filter2)" transform="rotate(202 89 139)">
+ </rect>
+ </g>
+ </svg>
+
+<script>
+
+// Only allow painting a tiny slice of the frame - here, 15ms.
+var kFrameBudgetMs = 14;
+var kDegPerFrame = 1;
+var kCurrentRotation = 0;
+var kMaxIterations = 600;
+var kMinSize = 80;
+var kMaxSize = 200;
+var kOpacityPerFrame = [0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05];
+
+var gCrazyCounter = 0;
+var gStart;
+var gSizeChangePerFrame = 1;
+var gCurrentSize = 50;
+var gIterations = 0;
+
+function runFrame() {
+ var start = performance.now();
+
+ // Spin loop.
+ while (performance.now() - start < kFrameBudgetMs)
+ gCrazyCounter++;
+
+ // Change rotation.
+ var elts = [
+ document.getElementById("rect1"),
+ document.getElementById("rect2"),
+ document.getElementById("rect3"),
+ document.getElementById("rect4"),
+ document.getElementById("rect5"),
+ ];
+
+ kCurrentRotation = (kCurrentRotation + kDegPerFrame) % 360;
+
+ // Change size.
+ if (gCurrentSize >= kMaxSize)
+ gSizeChangePerFrame = -1;
+ else if (gCurrentSize <= kMinSize)
+ gSizeChangePerFrame = 1;
+ gCurrentSize += gSizeChangePerFrame;
+
+ for (var i = 0; i < elts.length; i++) {
+ var elt = elts[i];
+
+ elt.setAttribute("height", gCurrentSize + "px");
+ elt.setAttribute("width", gCurrentSize + "px");
+
+ var bb = elt.getBBox();
+ var x = bb.x + bb.width / 2;
+ var y = bb.y + bb.height / 2;
+ var origin = x + " " + y;
+ elt.setAttribute("transform", "rotate(" + kCurrentRotation + " " + origin + ")");
+
+ var opacity = parseFloat(window.getComputedStyle(elt).getPropertyValue("opacity"));
+ if (opacity + kOpacityPerFrame[i] >= 1.0) {
+ opacity = 1.0;
+ kOpacityPerFrame[i] = -kOpacityPerFrame[i];
+ } else if (opacity + kOpacityPerFrame[i] < 0.1) {
+ opacity = 1.0;
+ kOpacityPerFrame[i] = -kOpacityPerFrame[i];
+ }
+ elt.setAttribute("opacity", opacity);
+ }
+
+ if (gIterations >= kMaxIterations) {
+ var end = performance.now();
+ if (window.tpRecordTime) {
+ window.tpRecordTime(end - gStart, gStart);
+ }
+ if (parent.reportResults) {
+ parent.reportResults(end - gStart, gStart);
+ }
+ return;
+ }
+
+ window.requestAnimationFrame(runFrame);
+ gIterations++;
+ TalosContentProfiler.mark("rasterflood svg", gStart);
+}
+
+function startTest() {
+ gStart = performance.now();
+ window.requestAnimationFrame(runFrame);
+}
+
+addEventListener("load", function() {
+ try {
+ TalosContentProfiler.subtestStart("rasterflood_svg.html loaded", true).then(() => {
+ startTest();
+ });
+ } catch (e) {
+ startTest();
+ }
+});
+</script>
+<script type="text/javascript" src="resource://talos-powers/TalosContentProfiler.js"></script>
+
+</body></html>
diff --git a/testing/talos/talos/tests/gfx/rasterflood_gradient.manifest b/testing/talos/talos/tests/gfx/rasterflood_gradient.manifest
new file mode 100644
index 0000000000..2351c5653f
--- /dev/null
+++ b/testing/talos/talos/tests/gfx/rasterflood_gradient.manifest
@@ -0,0 +1 @@
+% http://localhost/tests/gfx/benchmarks/rasterflood_gradient.html
diff --git a/testing/talos/talos/tests/gfx/rasterflood_svg.manifest b/testing/talos/talos/tests/gfx/rasterflood_svg.manifest
new file mode 100644
index 0000000000..9398300b86
--- /dev/null
+++ b/testing/talos/talos/tests/gfx/rasterflood_svg.manifest
@@ -0,0 +1 @@
+% http://localhost/tests/gfx/benchmarks/rasterflood_svg.html
diff --git a/testing/talos/talos/tests/jetstream/jetstream.manifest b/testing/talos/talos/tests/jetstream/jetstream.manifest
new file mode 100644
index 0000000000..3b6a706f1b
--- /dev/null
+++ b/testing/talos/talos/tests/jetstream/jetstream.manifest
@@ -0,0 +1 @@
+% http://localhost/tests/JetStream/JetStream-1.1/index.html?gecko#long
diff --git a/testing/talos/talos/tests/kraken/driver.html b/testing/talos/talos/tests/kraken/driver.html
new file mode 100644
index 0000000000..690cc4eca7
--- /dev/null
+++ b/testing/talos/talos/tests/kraken/driver.html
@@ -0,0 +1,192 @@
+<!DOCTYPE html>
+<html>
+<head>
+
+<meta charset=utf8>
+
+<!--
+ Copyright (C) 2007 Apple Inc. All rights reserved.
+ Copyright (C) 2010 Mozilla Foundation
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. 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.
+
+ THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``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 APPLE COMPUTER, INC. OR
+ CONTRIBUTORS 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.
+-->
+
+<title>Kraken JavaScript Benchmark (kraken-1.1 test suite - In Progress...)</title>
+<link rel="stylesheet" href="kraken.css">
+</head>
+
+<body onload="start()">
+<div id="content">
+<h2>Kraken JavaScript Benchmark <small>(In Progress...)</small></h2>
+<div id="results">
+
+<h3>Content Version: kraken-1.1</h3>
+
+<script src="resource://talos-powers/TalosContentProfiler.js"></script>
+<script src="test-prefix.js"></script>
+<script src="test-contents.js"></script>
+<script>
+var testIndex = -1;
+var currentRepeat = -1;
+var repeatCount = 10;
+
+var currentSquare = 1;
+
+var testName = null;
+var param_index = -1;
+function parseParams() {
+ var s = document.location.search.substring(1);
+ var params = s.replace("%26", "&").split('&');
+ for (var i = 0; i < params.length; ++i) {
+ var fields = params[i].split('=');
+ switch (fields[0]) {
+ case 'testName':
+ testName = fields[1];
+ break;
+ }
+ }
+}
+parseParams();
+for (var i=0; i < tests.length; i++) {
+ if (tests[i] == testName) break;
+}
+if (i < tests.length) {
+ tests = [testName];
+ param_index = i;
+}
+
+var output = [];
+output.length = repeatCount;
+for (var i = 0; i < output.length; i++) {
+ output[i] = {};
+}
+
+function initSquares() {
+ var squaresDiv = document.getElementById("squares");
+ var id = 0;
+ for (var i = 0; i < repeatCount; i++) {
+ for (var j = 0; j <= tests.length; j++) {
+ id++;
+ squaresDiv.innerHTML += "<span class='incomplete-square' id='square-" + id + "'>\u25A0</span>";
+ }
+ squaresDiv.innerHTML += "<br>";
+ }
+}
+
+function completeSquare() {
+ var square = document.getElementById("square-" + currentSquare);
+ if (square) {
+ square.className = "complete-square";
+ currentSquare++;
+ }
+}
+
+function start()
+{
+ initSquares();
+ window.setTimeout(reallyNext, 500);
+}
+
+function next()
+{
+ window.setTimeout(reallyNext, 10);
+}
+
+function reallyNext()
+{
+ completeSquare();
+ document.getElementById("frameparent").innerHTML = "";
+ document.getElementById("frameparent").innerHTML = "<iframe id='testframe'>";
+ var testFrame = document.getElementById("testframe");
+ testIndex++;
+ var test_data = testContents[testIndex];
+ if (param_index >= 0) {
+ test_data = testContents[param_index];
+ }
+
+ if (testIndex < tests.length) {
+ testFrame.contentDocument.open();
+ testFrame.contentDocument.write(test_data);
+ testFrame.contentDocument.close;
+ } else if (++currentRepeat < repeatCount) {
+ testIndex = 0;
+ if (param_index < 0) {
+ test_data = testContents[testIndex];
+ }
+ testFrame.contentDocument.open();
+ testFrame.contentDocument.write(test_data);
+ testFrame.contentDocument.close;
+ } else {
+ finish();
+ }
+}
+
+function recordResult(time)
+{
+ if (currentRepeat >= 0) // negative repeats are warmups
+ output[currentRepeat][tests[testIndex]] = time;
+ next();
+}
+
+function finish()
+{
+ if ( typeof tpRecordTime !== "undefined" ) {
+ for (var test in output[0]) {
+ first = true;
+ rawValues = "";
+ for (var i=0;i<output.length; i++) {
+ if (first == true) {
+ rawValues = output[i][test];
+ first = false;
+ } else {
+ rawValues += "," + output[i][test];
+ }
+ }
+ tpRecordTime( rawValues );
+ }
+ } else {
+ var outputString = "{";
+ outputString += '"v": "kraken-1.1", ';
+ for (var test in output[0]) {
+ outputString += '"' + test + '":[';
+ for (var i = 0; i < output.length; i++) {
+ outputString += output[i][test] + ",";
+ }
+ outputString = outputString.substring(0, outputString.length - 1);
+ outputString += "],";
+ }
+ outputString = outputString.substring(0, outputString.length - 1);
+ outputString += "}";
+
+ location = "results.html?" + encodeURI(outputString);
+ }
+}
+
+</script>
+
+<div id="frameparent">
+</div>
+<div id="squares"></div>
+</div>
+</div>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/kraken/kraken.css b/testing/talos/talos/tests/kraken/kraken.css
new file mode 100644
index 0000000000..9cf6bedd8a
--- /dev/null
+++ b/testing/talos/talos/tests/kraken/kraken.css
@@ -0,0 +1,54 @@
+
+body {
+ font-family: Helvetica, Arial, sans-serif;
+ margin: 20px;
+ background-color: #ffffff;
+ color: #1B0636
+}
+
+h2 {
+ background-color: #fff;
+ padding: 30px 20px 20px 20px;
+ border-bottom: 3px solid white;
+ color: black;
+ zoom: 1.0 /* I CAN HAS LAYOUT? (ie hack) */
+}
+
+#content {
+ width: 1000px;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+#results {
+ padding: 0 20px 20px 20px;
+}
+
+
+:link { color: #1363A1 }
+:visited { color: #1363A1 }
+
+#testframe { float: left;
+ margin-top: 20px;
+ width: 500px;
+ height: 200px;
+ background-color: white;
+ border: 1px solid #1B0636;}
+
+#squares {
+ float: left;
+ margin-left: 10px;
+ margin-top: 20px;
+}
+
+span.incomplete-square {
+ color: #cccccc;
+}
+
+span.complete-square {
+ color: #e7c0c0;
+}
+
+small.fine {
+ color: #cccccc;
+}
diff --git a/testing/talos/talos/tests/kraken/kraken.manifest b/testing/talos/talos/tests/kraken/kraken.manifest
new file mode 100644
index 0000000000..2d99cbca4b
--- /dev/null
+++ b/testing/talos/talos/tests/kraken/kraken.manifest
@@ -0,0 +1,14 @@
+% http://localhost/tests/kraken/driver.html?testName=ai-astar
+% http://localhost/tests/kraken/driver.html?testName=audio-beat-detection
+% http://localhost/tests/kraken/driver.html?testName=audio-dft
+% http://localhost/tests/kraken/driver.html?testName=audio-fft
+% http://localhost/tests/kraken/driver.html?testName=audio-oscillator
+% http://localhost/tests/kraken/driver.html?testName=imaging-gaussian-blur
+% http://localhost/tests/kraken/driver.html?testName=imaging-darkroom
+% http://localhost/tests/kraken/driver.html?testName=imaging-desaturate
+% http://localhost/tests/kraken/driver.html?testName=json-parse-financial
+% http://localhost/tests/kraken/driver.html?testName=json-stringify-tinderbox
+% http://localhost/tests/kraken/driver.html?testName=stanford-crypto-aes
+% http://localhost/tests/kraken/driver.html?testName=stanford-crypto-ccm
+% http://localhost/tests/kraken/driver.html?testName=stanford-crypto-pbkdf2
+% http://localhost/tests/kraken/driver.html?testName=stanford-crypto-sha256-iterative
diff --git a/testing/talos/talos/tests/kraken/test-contents.js b/testing/talos/talos/tests/kraken/test-contents.js
new file mode 100644
index 0000000000..6a616c4ed1
--- /dev/null
+++ b/testing/talos/talos/tests/kraken/test-contents.js
@@ -0,0 +1,74412 @@
+var testContents = [ "<!DOCTYPE html>\n\
+<head>\n\
+\n\
+<meta charset=utf8>\n\
+\n\
+<!--\n\
+ Copyright (C) 2007 Apple Inc. All rights reserved.\n\
+\n\
+ Redistribution and use in source and binary forms, with or without\n\
+ modification, are permitted provided that the following conditions\n\
+ are met:\n\
+ 1. Redistributions of source code must retain the above copyright\n\
+ notice, this list of conditions and the following disclaimer.\n\
+ 2. Redistributions in binary form must reproduce the above copyright\n\
+ notice, this list of conditions and the following disclaimer in the\n\
+ documentation and/or other materials provided with the distribution.\n\
+\n\
+ THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY\n\
+ EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n\
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n\
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR\n\
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n\
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n\
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n\
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n\
+ OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n\
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \n\
+-->\n\
+\n\
+<title>SunSpider ai-astar</title>\n\
+<link rel=\"stylesheet\" href=\"../kraken.css\">\n\
+</head>\n\
+\n\
+<body>\n\
+<h3>ai-astar</h3>\n\
+<div id=\"console\">\n\
+</div>\n\
+<script>\n\
+var TalosContentProfiler = parent.TalosContentProfiler;\n\
+function record(time) {\n\
+ document.getElementById(\"console\").innerHTML = time + \"ms\";\n\
+ if (window.parent) {\n\
+ parent.recordResult(time);\n\
+ }\n\
+}\n\
+\n\
+var g1 = [\n\
+[\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 2,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 7,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 21,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 22,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 28,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 33,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 36,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 37,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 38,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 41,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 44,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 51,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 54,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 55,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 60,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 61,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 62,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 65,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 68,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 72,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 78,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 85,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 88,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 96,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 97,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 0,\n\
+ \"y\": 99,\n\
+ \"isWall\": true\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 0,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 10,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 15,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 24,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 26,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 27,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 31,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 32,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 40,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 46,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 48,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 49,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 53,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 56,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 58,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 60,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 61,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 64,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 85,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 88,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 94,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 96,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 98,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 1,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 6,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 9,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 11,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 18,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 21,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 22,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 24,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 28,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 32,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 35,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 37,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 38,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 39,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 41,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 43,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 45,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 46,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 48,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 54,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 55,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 57,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 62,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 64,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 65,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 66,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 67,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 73,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 76,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 79,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 82,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 87,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 2,\n\
+ \"y\": 99,\n\
+ \"isWall\": true\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 3,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 8,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 23,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 29,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 35,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 38,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 50,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 53,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 54,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 61,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 63,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 67,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 68,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 70,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 77,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 78,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 79,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 82,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 87,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 91,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 3,\n\
+ \"y\": 99,\n\
+ \"isWall\": true\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 0,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 5,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 9,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 10,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 12,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 18,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 20,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 24,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 28,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 29,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 32,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 33,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 34,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 37,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 38,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 41,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 45,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 46,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 48,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 52,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 58,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 65,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 67,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 68,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 74,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 77,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 78,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 87,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 89,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 93,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 95,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 98,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 4,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 5,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 8,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 15,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 19,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 21,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 25,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 26,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 29,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 32,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 33,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 35,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 37,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 43,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 48,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 49,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 51,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 54,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 58,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 59,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 64,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 65,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 67,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 68,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 71,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 78,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 82,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 87,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 88,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 91,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 93,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 98,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 5,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 1,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 11,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 12,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 15,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 20,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 22,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 27,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 34,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 37,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 39,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 40,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 43,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 46,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 48,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 49,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 51,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 52,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 56,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 59,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 64,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 69,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 71,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 82,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 84,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 93,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 96,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 6,\n\
+ \"y\": 99,\n\
+ \"isWall\": true\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 2,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 7,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 12,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 13,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 19,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 21,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 31,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 48,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 50,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 52,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 53,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 54,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 57,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 58,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 60,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 64,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 66,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 67,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 73,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 75,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 79,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 81,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 87,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 90,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 91,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 97,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 7,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 7,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 10,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 11,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 12,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 13,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 27,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 30,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 31,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 32,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 36,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 47,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 49,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 53,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 54,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 56,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 58,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 61,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 62,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 64,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 68,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 71,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 72,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 73,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 78,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 80,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 90,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 97,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 8,\n\
+ \"y\": 99,\n\
+ \"isWall\": true\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 1,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 15,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 16,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 23,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 26,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 31,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 38,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 41,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 46,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 48,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 49,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 54,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 63,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 64,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 71,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 77,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 79,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 80,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 81,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 84,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 86,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 87,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 90,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 92,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 9,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 1,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 4,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 8,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 9,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 13,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 22,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 29,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 35,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 37,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 38,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 42,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 45,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 46,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 51,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 52,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 53,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 59,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 60,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 61,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 62,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 65,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 70,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 71,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 76,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 79,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 80,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 82,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 85,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 86,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 87,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 90,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 93,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 98,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 10,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 1,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 3,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 4,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 6,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 15,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 18,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 20,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 26,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 28,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 33,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 34,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 35,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 37,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 53,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 54,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 55,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 61,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 66,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 68,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 70,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 81,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 84,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 90,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 92,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 94,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 98,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 11,\n\
+ \"y\": 99,\n\
+ \"isWall\": true\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 1,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 5,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 6,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 7,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 9,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 17,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 25,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 34,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 40,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 41,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 46,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 51,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 53,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 56,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 66,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 67,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 70,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 82,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 85,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 89,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 90,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 91,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 93,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 97,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 12,\n\
+ \"y\": 99,\n\
+ \"isWall\": true\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 6,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 7,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 15,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 17,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 18,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 20,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 21,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 26,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 30,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 31,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 36,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 38,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 41,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 45,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 48,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 49,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 50,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 55,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 68,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 70,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 71,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 74,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 76,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 77,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 88,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 91,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 93,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 95,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 97,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 13,\n\
+ \"y\": 99,\n\
+ \"isWall\": true\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 7,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 9,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 12,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 16,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 20,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 23,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 25,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 27,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 28,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 29,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 32,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 35,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 40,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 46,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 47,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 53,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 55,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 59,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 61,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 64,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 68,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 71,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 74,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 76,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 77,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 83,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 88,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 91,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 14,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 1,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 11,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 12,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 13,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 21,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 23,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 24,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 29,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 36,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 37,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 38,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 39,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 42,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 46,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 48,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 49,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 54,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 59,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 63,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 65,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 68,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 69,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 75,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 76,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 80,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 81,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 84,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 86,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 87,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 89,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 96,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 15,\n\
+ \"y\": 99,\n\
+ \"isWall\": true\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 0,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 2,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 5,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 9,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 10,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 16,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 17,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 21,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 25,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 26,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 31,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 34,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 35,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 36,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 38,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 39,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 40,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 41,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 42,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 46,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 49,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 59,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 62,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 68,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 70,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 71,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 82,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 87,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 90,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 91,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 16,\n\
+ \"y\": 99,\n\
+ \"isWall\": true\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 0,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 4,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 7,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 9,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 12,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 13,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 16,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 23,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 25,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 27,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 29,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 33,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 36,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 39,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 47,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 49,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 57,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 58,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 59,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 61,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 65,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 70,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 71,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 72,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 73,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 76,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 77,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 79,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 80,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 83,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 84,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 89,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 90,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 93,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 95,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 17,\n\
+ \"y\": 99,\n\
+ \"isWall\": true\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 3,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 5,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 6,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 14,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 18,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 24,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 31,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 41,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 46,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 51,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 52,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 55,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 56,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 60,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 62,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 63,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 65,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 67,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 72,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 73,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 77,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 78,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 79,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 81,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 85,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 88,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 93,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 95,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 18,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 2,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 7,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 8,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 9,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 10,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 14,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 17,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 18,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 20,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 22,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 23,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 26,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 28,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 30,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 32,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 39,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 43,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 51,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 52,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 54,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 58,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 64,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 67,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 75,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 76,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 82,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 86,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 88,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 90,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 92,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 97,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 19,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 1,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 2,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 3,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 7,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 8,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 14,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 17,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 19,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 21,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 25,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 29,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 33,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 35,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 37,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 46,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 47,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 49,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 52,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 58,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 59,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 60,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 61,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 64,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 65,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 72,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 78,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 79,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 88,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 94,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 95,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 20,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 0,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 7,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 16,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 20,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 24,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 27,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 30,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 31,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 34,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 38,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 40,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 42,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 47,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 49,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 51,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 53,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 57,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 61,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 63,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 67,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 73,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 79,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 84,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 85,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 93,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 21,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 4,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 20,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 27,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 29,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 33,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 51,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 52,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 54,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 60,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 64,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 70,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 71,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 72,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 77,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 78,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 79,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 84,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 86,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 87,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 89,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 92,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 97,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 98,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 22,\n\
+ \"y\": 99,\n\
+ \"isWall\": true\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 3,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 6,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 14,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 16,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 19,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 20,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 27,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 28,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 30,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 32,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 37,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 44,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 50,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 51,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 52,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 53,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 56,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 60,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 63,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 64,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 65,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 68,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 69,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 72,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 74,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 76,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 78,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 86,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 89,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 91,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 23,\n\
+ \"y\": 99,\n\
+ \"isWall\": true\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 0,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 1,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 2,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 3,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 4,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 5,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 6,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 7,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 8,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 9,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 10,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 11,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 12,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 13,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 14,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 15,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 16,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 17,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 18,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 19,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 20,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 21,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 22,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 23,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 24,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 25,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 26,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 27,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 28,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 29,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 30,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 31,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 32,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 33,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 34,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 35,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 36,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 37,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 38,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 39,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 40,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 41,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 42,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 43,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 44,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 45,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 46,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 47,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 48,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 49,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 50,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 51,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 52,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 53,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 54,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 55,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 56,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 57,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 58,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 59,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 60,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 61,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 62,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 63,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 64,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 65,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 66,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 67,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 68,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 69,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 70,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 71,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 72,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 73,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 75,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 77,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 82,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 86,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 88,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 89,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 92,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 95,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 24,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 0,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 4,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 7,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 8,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 9,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 12,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 19,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 22,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 24,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 27,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 35,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 37,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 39,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 41,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 49,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 50,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 51,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 53,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 54,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 57,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 59,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 68,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 69,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 74,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 78,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 80,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 81,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 84,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 91,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 95,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 96,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 25,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 0,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 4,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 11,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 20,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 22,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 29,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 35,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 37,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 38,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 40,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 45,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 51,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 60,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 61,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 64,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 65,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 67,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 69,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 71,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 74,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 82,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 86,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 87,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 26,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 6,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 10,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 19,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 22,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 26,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 28,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 31,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 33,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 37,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 40,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 42,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 43,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 44,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 46,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 52,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 53,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 57,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 59,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 63,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 67,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 68,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 71,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 74,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 77,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 80,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 81,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 86,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 88,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 91,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 92,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 94,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 27,\n\
+ \"y\": 99,\n\
+ \"isWall\": true\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 0,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 5,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 6,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 8,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 11,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 12,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 15,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 25,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 28,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 31,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 36,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 37,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 39,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 41,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 45,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 52,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 54,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 55,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 58,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 59,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 61,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 67,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 69,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 76,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 78,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 79,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 80,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 81,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 82,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 83,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 85,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 87,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 93,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 98,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 28,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 0,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 3,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 4,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 8,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 9,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 10,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 12,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 20,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 28,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 33,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 44,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 54,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 58,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 62,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 65,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 75,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 76,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 78,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 79,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 80,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 83,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 84,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 89,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 91,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 29,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 5,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 9,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 10,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 13,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 16,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 17,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 18,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 20,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 24,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 25,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 28,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 33,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 39,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 41,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 49,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 51,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 57,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 59,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 60,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 63,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 70,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 71,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 85,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 87,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 88,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 91,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 94,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 96,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 30,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 10,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 11,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 12,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 14,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 16,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 18,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 20,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 25,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 26,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 27,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 30,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 31,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 33,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 35,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 43,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 45,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 48,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 53,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 56,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 58,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 66,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 68,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 70,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 73,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 77,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 84,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 88,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 89,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 98,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 31,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 2,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 3,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 5,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 11,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 18,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 27,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 37,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 38,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 41,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 43,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 53,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 56,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 59,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 60,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 63,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 66,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 68,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 69,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 70,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 80,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 82,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 85,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 87,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 88,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 89,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 91,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 93,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 95,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 98,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 32,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 1,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 5,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 11,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 12,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 13,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 15,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 18,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 19,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 26,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 30,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 35,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 39,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 41,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 44,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 48,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 51,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 52,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 55,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 57,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 58,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 62,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 63,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 66,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 67,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 73,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 74,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 75,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 79,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 80,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 89,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 98,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 33,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 1,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 2,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 7,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 12,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 14,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 19,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 24,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 26,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 28,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 29,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 30,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 41,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 43,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 45,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 49,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 57,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 61,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 63,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 64,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 70,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 83,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 85,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 87,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 89,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 90,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 91,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 95,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 34,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 2,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 11,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 18,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 19,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 22,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 24,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 26,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 28,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 30,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 34,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 36,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 38,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 43,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 49,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 58,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 63,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 64,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 65,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 67,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 88,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 94,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 96,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 97,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 35,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 3,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 8,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 9,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 17,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 21,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 22,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 24,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 28,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 29,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 30,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 32,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 36,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 37,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 40,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 43,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 46,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 47,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 52,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 59,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 60,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 61,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 65,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 69,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 75,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 77,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 78,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 79,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 82,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 83,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 87,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 96,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 36,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 1,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 3,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 16,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 17,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 23,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 24,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 28,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 31,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 36,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 37,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 38,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 39,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 48,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 53,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 62,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 63,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 64,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 65,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 67,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 68,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 71,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 72,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 76,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 83,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 84,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 85,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 90,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 98,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 37,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 0,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 4,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 6,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 12,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 14,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 15,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 17,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 18,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 20,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 21,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 22,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 25,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 26,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 27,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 39,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 41,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 42,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 53,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 57,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 59,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 74,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 85,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 86,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 90,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 91,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 92,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 94,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 96,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 38,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 0,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 3,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 5,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 11,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 14,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 16,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 19,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 20,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 21,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 23,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 25,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 52,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 55,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 57,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 58,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 63,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 70,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 71,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 73,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 74,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 75,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 80,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 81,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 87,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 91,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 92,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 39,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 0,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 1,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 2,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 4,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 6,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 7,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 9,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 11,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 16,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 24,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 28,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 29,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 33,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 37,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 40,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 41,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 43,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 44,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 46,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 49,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 51,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 52,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 53,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 63,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 65,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 76,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 78,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 90,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 95,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 96,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 40,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 1,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 2,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 4,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 8,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 10,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 25,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 26,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 37,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 45,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 47,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 61,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 69,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 70,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 72,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 75,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 76,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 81,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 83,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 92,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 41,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 4,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 5,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 7,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 8,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 10,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 13,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 15,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 20,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 21,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 22,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 23,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 24,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 25,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 27,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 31,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 32,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 34,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 35,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 36,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 38,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 39,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 41,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 42,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 44,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 47,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 48,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 51,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 54,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 55,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 58,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 61,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 64,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 69,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 71,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 82,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 88,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 91,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 92,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 93,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 96,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 42,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 10,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 17,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 24,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 25,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 27,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 32,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 37,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 42,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 50,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 54,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 55,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 57,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 58,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 59,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 65,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 68,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 71,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 77,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 81,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 85,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 89,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 91,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 96,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 43,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 10,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 15,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 16,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 18,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 25,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 28,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 29,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 32,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 33,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 40,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 44,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 47,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 52,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 55,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 62,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 64,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 67,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 71,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 72,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 75,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 80,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 81,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 86,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 87,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 88,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 93,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 94,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 95,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 44,\n\
+ \"y\": 99,\n\
+ \"isWall\": true\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 1,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 5,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 7,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 17,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 22,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 24,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 25,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 26,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 28,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 30,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 33,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 39,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 40,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 45,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 48,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 50,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 51,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 55,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 57,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 63,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 67,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 77,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 81,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 82,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 87,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 89,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 90,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 91,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 96,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 97,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 45,\n\
+ \"y\": 99,\n\
+ \"isWall\": true\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 0,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 8,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 9,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 12,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 20,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 28,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 32,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 40,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 43,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 50,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 53,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 59,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 67,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 69,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 71,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 75,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 79,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 82,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 93,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 46,\n\
+ \"y\": 99,\n\
+ \"isWall\": true\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 2,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 5,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 7,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 14,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 19,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 20,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 22,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 25,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 32,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 34,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 37,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 46,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 50,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 52,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 57,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 62,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 68,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 71,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 73,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 86,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 88,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 91,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 97,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 98,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 47,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 0,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 4,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 5,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 9,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 14,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 16,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 17,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 19,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 20,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 21,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 23,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 26,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 28,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 29,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 34,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 36,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 40,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 43,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 46,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 51,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 53,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 56,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 60,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 61,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 62,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 64,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 86,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 89,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 91,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 95,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 98,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 48,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 2,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 9,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 10,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 12,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 13,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 19,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 20,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 22,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 23,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 25,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 27,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 29,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 36,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 37,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 40,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 47,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 50,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 60,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 61,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 65,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 67,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 69,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 72,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 77,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 78,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 94,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 95,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 96,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 49,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 3,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 15,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 17,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 20,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 24,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 25,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 26,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 29,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 37,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 38,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 40,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 41,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 46,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 49,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 54,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 60,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 61,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 72,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 75,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 77,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 85,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 91,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 97,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 50,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 0,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 3,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 4,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 5,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 6,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 7,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 8,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 9,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 10,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 11,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 12,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 13,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 14,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 15,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 16,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 17,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 18,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 19,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 20,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 21,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 22,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 23,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 24,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 25,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 26,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 27,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 28,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 29,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 30,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 31,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 32,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 33,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 34,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 35,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 36,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 37,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 38,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 39,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 40,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 41,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 42,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 43,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 44,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 45,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 46,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 47,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 48,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 49,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 50,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 51,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 52,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 53,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 54,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 55,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 56,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 57,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 58,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 59,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 60,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 61,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 62,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 63,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 64,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 65,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 66,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 67,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 68,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 69,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 70,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 71,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 72,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 73,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 74,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 75,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 76,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 77,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 78,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 79,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 80,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 81,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 82,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 83,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 84,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 85,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 86,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 87,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 88,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 89,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 90,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 91,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 92,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 93,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 94,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 95,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 96,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 97,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 98,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 51,\n\
+ \"y\": 99,\n\
+ \"isWall\": true\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 4,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 6,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 10,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 11,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 13,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 19,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 21,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 40,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 41,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 43,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 46,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 48,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 49,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 50,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 54,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 60,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 61,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 71,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 72,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 73,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 76,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 81,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 82,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 86,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 93,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 97,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 98,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 52,\n\
+ \"y\": 99,\n\
+ \"isWall\": true\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 1,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 5,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 10,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 12,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 16,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 18,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 19,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 20,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 22,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 24,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 28,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 29,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 32,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 36,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 37,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 44,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 45,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 48,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 54,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 55,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 60,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 64,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 66,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 67,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 69,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 79,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 83,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 84,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 87,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 88,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 90,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 93,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 96,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 97,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 98,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 53,\n\
+ \"y\": 99,\n\
+ \"isWall\": true\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 1,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 8,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 13,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 15,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 19,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 20,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 21,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 24,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 25,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 26,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 35,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 40,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 47,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 53,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 54,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 55,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 56,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 57,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 58,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 59,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 60,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 61,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 62,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 63,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 64,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 65,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 66,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 67,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 72,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 84,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 85,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 89,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 91,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 92,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 93,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 98,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 54,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 2,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 3,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 5,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 8,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 19,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 20,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 22,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 23,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 26,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 31,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 32,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 33,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 35,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 40,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 42,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 45,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 46,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 48,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 51,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 56,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 62,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 75,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 79,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 80,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 85,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 86,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 88,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 90,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 91,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 95,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 98,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 55,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 1,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 4,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 5,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 9,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 16,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 17,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 23,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 26,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 27,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 31,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 38,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 42,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 46,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 49,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 51,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 52,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 60,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 62,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 65,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 67,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 76,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 77,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 78,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 80,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 81,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 86,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 88,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 89,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 90,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 92,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 96,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 56,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 2,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 5,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 9,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 12,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 14,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 18,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 20,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 22,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 27,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 31,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 34,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 39,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 41,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 42,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 44,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 45,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 46,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 48,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 49,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 50,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 51,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 53,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 55,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 56,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 58,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 63,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 64,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 72,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 79,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 94,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 57,\n\
+ \"y\": 99,\n\
+ \"isWall\": true\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 1,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 22,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 24,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 27,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 28,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 31,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 33,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 44,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 54,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 56,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 60,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 63,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 67,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 73,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 76,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 82,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 85,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 88,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 92,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 93,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 94,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 96,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 97,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 98,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 58,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 0,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 2,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 7,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 8,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 12,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 14,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 22,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 24,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 34,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 41,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 42,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 44,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 47,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 48,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 49,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 52,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 55,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 62,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 64,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 72,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 75,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 81,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 82,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 83,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 90,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 97,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 98,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 59,\n\
+ \"y\": 99,\n\
+ \"isWall\": true\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 2,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 4,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 5,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 10,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 11,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 15,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 21,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 26,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 27,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 28,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 33,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 36,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 43,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 44,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 49,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 50,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 53,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 58,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 64,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 71,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 74,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 75,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 80,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 86,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 93,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 96,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 97,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 60,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 5,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 13,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 15,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 17,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 19,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 23,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 32,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 34,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 43,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 44,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 45,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 49,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 56,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 58,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 66,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 67,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 72,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 84,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 88,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 89,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 96,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 97,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 61,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 0,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 4,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 5,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 7,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 8,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 9,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 11,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 12,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 13,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 15,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 21,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 25,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 29,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 40,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 54,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 57,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 61,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 62,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 63,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 64,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 65,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 66,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 67,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 78,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 84,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 86,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 88,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 91,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 92,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 95,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 62,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 2,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 3,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 8,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 9,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 10,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 11,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 14,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 15,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 16,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 17,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 19,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 21,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 23,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 25,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 28,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 30,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 32,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 34,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 41,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 42,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 46,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 48,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 49,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 53,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 55,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 65,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 72,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 77,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 82,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 86,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 88,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 91,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 95,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 97,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 98,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 63,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 5,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 9,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 16,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 21,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 22,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 25,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 26,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 33,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 35,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 40,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 42,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 43,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 44,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 48,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 52,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 57,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 58,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 61,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 68,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 71,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 79,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 82,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 83,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 89,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 93,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 95,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 97,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 64,\n\
+ \"y\": 99,\n\
+ \"isWall\": true\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 0,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 1,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 4,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 8,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 16,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 42,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 47,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 51,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 53,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 56,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 68,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 73,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 78,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 79,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 80,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 84,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 87,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 88,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 90,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 65,\n\
+ \"y\": 99,\n\
+ \"isWall\": true\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 0,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 2,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 4,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 7,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 8,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 12,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 20,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 22,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 25,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 29,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 31,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 35,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 38,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 41,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 44,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 46,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 48,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 52,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 55,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 59,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 61,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 68,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 69,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 70,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 74,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 76,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 78,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 80,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 82,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 83,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 86,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 87,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 92,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 94,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 96,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 97,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 66,\n\
+ \"y\": 99,\n\
+ \"isWall\": true\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 3,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 8,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 11,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 12,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 18,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 22,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 23,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 25,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 27,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 31,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 33,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 36,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 43,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 46,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 48,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 49,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 53,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 56,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 58,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 60,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 61,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 66,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 67,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 68,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 70,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 73,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 77,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 80,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 85,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 94,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 96,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 67,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 3,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 5,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 16,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 20,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 27,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 28,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 32,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 33,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 38,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 39,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 42,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 43,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 45,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 47,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 49,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 50,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 54,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 56,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 57,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 63,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 69,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 70,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 75,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 77,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 81,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 82,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 86,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 90,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 92,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 97,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 68,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 0,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 1,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 2,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 5,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 7,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 12,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 18,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 21,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 24,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 27,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 28,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 30,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 31,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 34,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 36,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 48,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 51,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 54,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 55,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 61,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 64,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 68,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 73,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 76,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 77,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 90,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 91,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 97,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 69,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 0,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 1,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 6,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 11,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 12,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 14,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 18,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 26,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 30,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 35,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 42,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 44,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 46,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 47,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 51,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 52,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 55,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 57,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 62,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 63,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 68,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 69,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 70,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 73,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 75,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 76,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 78,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 80,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 85,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 86,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 89,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 92,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 95,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 96,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 70,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 2,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 4,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 5,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 8,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 10,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 11,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 15,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 16,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 23,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 26,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 27,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 33,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 37,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 39,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 43,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 47,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 48,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 52,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 57,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 60,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 66,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 67,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 71,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 73,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 76,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 78,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 84,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 85,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 90,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 91,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 92,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 93,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 94,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 96,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 71,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 3,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 6,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 8,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 10,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 18,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 22,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 26,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 30,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 31,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 36,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 39,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 41,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 47,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 51,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 57,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 58,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 60,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 61,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 65,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 68,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 81,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 82,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 83,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 87,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 92,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 72,\n\
+ \"y\": 99,\n\
+ \"isWall\": true\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 0,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 6,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 8,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 11,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 13,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 17,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 20,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 22,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 25,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 26,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 28,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 30,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 32,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 33,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 35,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 38,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 48,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 49,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 51,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 54,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 66,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 76,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 78,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 79,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 80,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 82,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 86,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 87,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 93,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 73,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 2,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 3,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 8,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 11,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 12,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 13,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 23,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 30,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 32,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 33,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 34,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 44,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 45,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 47,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 50,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 51,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 54,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 68,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 71,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 73,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 85,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 88,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 90,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 92,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 95,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 74,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 0,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 1,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 5,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 9,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 10,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 13,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 15,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 16,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 19,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 24,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 25,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 26,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 27,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 33,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 34,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 38,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 39,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 40,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 45,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 47,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 48,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 63,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 72,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 75,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 76,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 83,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 84,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 85,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 91,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 95,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 75,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 1,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 16,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 17,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 20,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 21,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 22,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 27,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 30,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 31,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 32,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 36,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 39,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 41,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 42,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 43,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 46,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 50,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 52,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 57,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 58,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 62,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 63,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 66,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 68,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 70,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 71,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 75,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 78,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 81,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 83,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 88,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 91,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 94,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 97,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 76,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 0,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 3,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 6,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 7,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 18,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 20,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 21,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 26,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 27,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 36,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 37,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 42,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 43,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 44,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 62,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 65,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 66,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 75,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 79,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 80,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 81,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 87,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 88,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 92,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 93,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 96,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 98,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 77,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 3,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 9,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 10,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 12,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 13,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 18,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 24,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 25,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 26,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 28,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 29,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 38,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 40,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 43,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 44,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 45,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 51,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 57,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 64,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 68,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 69,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 71,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 73,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 76,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 77,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 79,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 80,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 81,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 82,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 88,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 98,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 78,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 8,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 9,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 11,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 15,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 21,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 30,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 35,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 44,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 47,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 49,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 52,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 55,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 64,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 65,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 71,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 78,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 81,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 82,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 83,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 88,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 90,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 97,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 98,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 79,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 4,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 10,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 11,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 17,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 20,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 23,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 25,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 31,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 35,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 36,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 38,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 40,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 49,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 52,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 53,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 54,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 56,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 60,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 61,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 64,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 66,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 67,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 69,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 74,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 82,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 83,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 84,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 87,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 95,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 80,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 6,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 11,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 12,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 19,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 24,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 30,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 33,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 34,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 41,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 45,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 46,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 48,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 52,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 54,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 59,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 60,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 64,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 76,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 85,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 94,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 95,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 96,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 97,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 98,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 81,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 2,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 9,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 17,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 18,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 20,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 22,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 24,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 26,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 27,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 30,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 37,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 42,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 43,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 46,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 48,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 52,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 53,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 54,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 60,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 63,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 78,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 83,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 87,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 90,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 91,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 92,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 96,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 97,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 82,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 0,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 6,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 10,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 24,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 25,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 27,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 36,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 44,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 46,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 48,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 50,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 58,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 59,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 60,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 66,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 68,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 71,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 75,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 76,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 80,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 83,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 85,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 86,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 87,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 90,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 91,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 93,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 94,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 97,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 98,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 83,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 2,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 3,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 7,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 16,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 17,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 23,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 27,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 28,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 30,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 33,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 35,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 44,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 45,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 47,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 51,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 52,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 53,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 55,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 56,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 58,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 59,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 71,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 73,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 79,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 87,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 88,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 91,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 97,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 84,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 2,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 3,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 6,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 8,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 16,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 21,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 22,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 24,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 25,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 27,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 30,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 33,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 38,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 40,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 44,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 51,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 53,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 59,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 60,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 63,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 70,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 74,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 75,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 78,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 79,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 82,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 83,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 84,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 91,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 93,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 94,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 97,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 85,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 1,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 2,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 3,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 4,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 6,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 7,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 11,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 12,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 17,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 21,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 23,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 24,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 28,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 33,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 35,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 38,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 41,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 43,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 47,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 58,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 59,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 63,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 65,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 66,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 73,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 75,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 86,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 93,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 94,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 86,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 0,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 2,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 5,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 11,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 12,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 17,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 20,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 21,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 23,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 27,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 30,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 36,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 40,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 46,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 47,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 48,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 49,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 52,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 64,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 65,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 66,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 70,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 75,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 78,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 80,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 85,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 91,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 97,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 87,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 1,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 2,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 6,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 12,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 13,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 15,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 20,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 29,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 30,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 33,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 42,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 43,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 45,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 47,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 50,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 51,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 54,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 59,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 62,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 65,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 66,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 67,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 69,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 74,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 75,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 79,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 81,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 84,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 86,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 89,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 90,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 91,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 93,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 94,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 96,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 88,\n\
+ \"y\": 99,\n\
+ \"isWall\": true\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 9,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 14,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 17,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 20,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 23,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 24,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 28,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 30,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 31,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 33,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 36,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 39,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 42,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 43,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 49,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 50,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 54,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 57,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 58,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 60,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 61,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 69,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 70,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 72,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 73,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 79,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 85,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 90,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 89,\n\
+ \"y\": 99,\n\
+ \"isWall\": true\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 4,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 5,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 9,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 20,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 27,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 30,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 34,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 35,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 49,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 56,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 60,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 65,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 73,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 78,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 85,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 89,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 92,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 93,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 95,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 97,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 90,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 10,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 24,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 28,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 29,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 31,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 34,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 36,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 37,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 42,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 48,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 49,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 53,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 54,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 59,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 60,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 64,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 66,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 81,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 85,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 86,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 89,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 91,\n\
+ \"y\": 99,\n\
+ \"isWall\": true\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 5,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 9,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 10,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 11,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 15,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 23,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 26,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 28,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 31,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 32,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 34,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 37,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 39,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 43,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 50,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 56,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 61,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 67,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 68,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 70,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 71,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 74,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 75,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 76,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 77,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 78,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 80,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 81,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 83,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 87,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 88,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 89,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 90,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 93,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 94,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 95,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 92,\n\
+ \"y\": 99,\n\
+ \"isWall\": true\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 1,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 8,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 9,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 13,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 14,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 16,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 17,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 18,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 19,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 21,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 22,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 25,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 26,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 28,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 29,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 30,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 31,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 34,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 39,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 40,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 41,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 42,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 51,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 54,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 57,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 58,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 66,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 68,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 70,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 72,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 78,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 83,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 87,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 88,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 92,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 95,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 98,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 93,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 1,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 8,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 15,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 18,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 23,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 26,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 28,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 32,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 37,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 43,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 51,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 53,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 54,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 56,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 57,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 59,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 61,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 62,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 63,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 64,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 66,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 68,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 70,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 71,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 79,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 83,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 84,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 90,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 94,\n\
+ \"y\": 99,\n\
+ \"isWall\": true\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 0,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 1,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 5,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 6,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 12,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 20,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 21,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 28,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 30,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 34,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 35,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 38,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 42,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 47,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 49,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 56,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 65,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 66,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 67,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 71,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 72,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 76,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 77,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 81,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 82,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 84,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 85,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 89,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 92,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 95,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 97,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 95,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 4,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 5,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 9,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 13,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 17,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 18,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 20,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 21,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 24,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 26,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 27,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 30,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 31,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 32,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 33,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 34,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 35,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 39,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 43,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 55,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 60,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 61,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 62,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 67,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 70,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 73,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 74,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 78,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 81,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 84,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 87,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 89,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 90,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 92,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 94,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 98,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 96,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 2,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 4,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 7,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 12,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 13,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 17,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 22,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 29,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 34,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 37,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 40,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 52,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 54,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 60,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 63,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 64,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 65,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 67,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 68,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 74,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 77,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 78,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 80,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 81,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 82,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 84,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 85,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 87,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 91,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 92,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 97,\n\
+ \"y\": 99,\n\
+ \"isWall\": true\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 0,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 4,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 6,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 7,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 8,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 12,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 13,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 14,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 19,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 21,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 22,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 24,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 25,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 27,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 28,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 32,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 33,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 34,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 36,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 37,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 38,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 40,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 41,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 45,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 46,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 47,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 48,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 49,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 50,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 52,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 54,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 56,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 58,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 60,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 63,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 64,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 65,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 66,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 70,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 71,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 74,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 75,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 76,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 78,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 79,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 80,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 81,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 85,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 94,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 97,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 98,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 98,\n\
+ \"y\": 99,\n\
+ \"isWall\": false\n\
+ }\n\
+],\n\
+[\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 0,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 1,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 2,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 3,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 4,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 5,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 6,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 7,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 8,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 9,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 10,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 11,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 12,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 13,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 14,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 15,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 16,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 17,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 18,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 19,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 20,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 21,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 22,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 23,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 24,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 25,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 26,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 27,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 28,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 29,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 30,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 31,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 32,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 33,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 34,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 35,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 36,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 37,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 38,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 39,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 40,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 41,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 42,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 43,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 44,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 45,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 46,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 47,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 48,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 49,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 50,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 51,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 52,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 53,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 54,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 55,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 56,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 57,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 58,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 59,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 60,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 61,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 62,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 63,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 64,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 65,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 66,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 67,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 68,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 69,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 70,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 71,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 72,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 73,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 74,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 75,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 76,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 77,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 78,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 79,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 80,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 81,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 82,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 83,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 84,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 85,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 86,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 87,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 88,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 89,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 90,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 91,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 92,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 93,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 94,\n\
+ \"isWall\": true\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 95,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 96,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 97,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 98,\n\
+ \"isWall\": false\n\
+ },\n\
+ {\n\
+ \"x\": 99,\n\
+ \"y\": 99,\n\
+ \"isWall\": true\n\
+ }\n\
+]\n\
+];\n\
+\n\
+function GraphNode(x,y,isWall) {\n\
+ this.x = x;\n\
+ this.y = y;\n\
+ this._isWall = isWall;\n\
+ this.pos = {x:x,y:y};\n\
+ this.debug = \"\";\n\
+}\n\
+\n\
+GraphNode.prototype.toJSON = function() {\n\
+ return {\"x\": this.x, \"y\": this.y, \"isWall\": this._isWall};\n\
+}\n\
+\n\
+GraphNode.prototype.toString = function() {\n\
+ return \"[\" + this.x + \" \" + this.y + \"]\";\n\
+}\n\
+GraphNode.prototype.isAt = function(x,y) { \n\
+ return (x == this.x) && (y == this.y); \n\
+};\n\
+GraphNode.prototype.isWall = function() {\n\
+ return this._isWall;\n\
+};\n\
+\n\
+for (var i=0; i < g1.length; i++) {\n\
+ for (var j=0; j<g1[i].length; j++) {\n\
+ g1[i][j] = new GraphNode(g1[i][j].x, g1[i][j].y, g1[i][j].isWall);\n\
+ }\n\
+}\n\
+\n\
+function getStartingCell(graphSet) {\n\
+ for (var j = 0; j < graphSet.length; j++) {\n\
+ for (var k = 0; k < graphSet[j].length; k++ ) {\n\
+ if (!graphSet[j][k].isWall())\n\
+ return graphSet[j][k];\n\
+ }\n\
+ }\n\
+ throw \"No start?\";\n\
+}\n\
+\n\
+function getEndingCell(graphSet) {\n\
+ for (var j = graphSet.length - 1; j >= 0; j--) {\n\
+ for (var k = graphSet[j].length - 1; k >= 0; k-- ) {\n\
+ if (!graphSet[j][k].isWall())\n\
+ return graphSet[j][k];\n\
+ }\n\
+ }\n\
+ throw \"No end?\";\n\
+}\n\
+\n\
+var start = getStartingCell(g1);\n\
+var end = getEndingCell(g1);\n\
+var path = [];\n\
+\n\
+\n\
+\n\
+\n\
+TalosContentProfiler.subtestStart('astar', true).then(() => {\n\
+ var _sunSpiderStartDate = new Date();\n\
+\n\
+ Array.prototype.each = function(f) {\n\
+ if(!f.apply) return;\n\
+ for(var i=0;i<this.length;i++) {\n\
+ f.apply(this[i], [i, this]); \n\
+ }\n\
+ }\n\
+ Array.prototype.findGraphNode = function(obj) {\n\
+ for(var i=0;i<this.length;i++) {\n\
+ if(this[i].pos == obj.pos) { return this[i]; }\n\
+ }\n\
+ return false;\n\
+ };\n\
+ Array.prototype.removeGraphNode = function(obj) {\n\
+ for(var i=0;i<this.length;i++) {\n\
+ if(this[i].pos == obj.pos) { this.splice(i,1); }\n\
+ }\n\
+ return false;\n\
+ };\n\
+\n\
+ function createGraphSet(gridSize, wallFrequency) {\n\
+ var graphSet = [];\n\
+ for(var x=0;x<gridSize;x++) {\n\
+ var row = [];\n\
+ for(var y=0;y<gridSize;y++) {\n\
+ // maybe set this node to be wall\n\
+ var rand = Math.floor(Math.random()*(1/wallFrequency));\n\
+ row.push(new GraphNode(x,y,(rand == 0)));\n\
+ }\n\
+ graphSet.push(row);\n\
+ }\n\
+ return graphSet;\n\
+ }\n\
+\n\
+ // astar.js\n\
+ // Implements the astar search algorithm in javascript\n\
+\n\
+ var astar = {\n\
+ init: function(grid) {\n\
+ for(var x = 0; x < grid.length; x++) {\n\
+ for(var y = 0; y < grid[x].length; y++) {\n\
+ grid[x][y].f = 0;\n\
+ grid[x][y].g = 0;\n\
+ grid[x][y].h = 0;\n\
+ grid[x][y].parent = null;\n\
+ } \n\
+ }\n\
+ },\n\
+ search: function(grid, start, end) {\n\
+ astar.init(grid);\n\
+ \n\
+ var openList = [];\n\
+ var closedList = [];\n\
+ openList.push(start);\n\
+ \n\
+ while(openList.length > 0) {\n\
+ \n\
+ // Grab the lowest f(x) to process next\n\
+ var lowInd = 0;\n\
+ for(var i=0; i<openList.length; i++) {\n\
+ if(openList[i].f < openList[lowInd].f) { lowInd = i; }\n\
+ }\n\
+ var currentNode = openList[lowInd];\n\
+ \n\
+ // End case -- result has been found, return the traced path\n\
+ if(currentNode.pos == end.pos) {\n\
+ var curr = currentNode;\n\
+ var ret = [];\n\
+ while(curr.parent) {\n\
+ ret.push(curr);\n\
+ curr = curr.parent;\n\
+ }\n\
+ return ret.reverse();\n\
+ }\n\
+ \n\
+ // Normal case -- move currentNode from open to closed, process each of its neighbors\n\
+ openList.removeGraphNode(currentNode);\n\
+ closedList.push(currentNode);\n\
+ var neighbors = astar.neighbors(grid, currentNode);\n\
+ \n\
+ for(var j=0; j<neighbors.length;j++) {\n\
+ var neighbor = neighbors[j];\n\
+ if(closedList.findGraphNode(neighbor) || neighbor.isWall()) {\n\
+ // not a valid node to process, skip to next neighbor\n\
+ continue;\n\
+ }\n\
+ \n\
+ // g score is the shortest distance from start to current node, we need to check if\n\
+ // the path we have arrived at this neighbor is the shortest one we have seen yet\n\
+ var gScore = currentNode.g + 1; // 1 is the distance from a node to it's neighbor\n\
+ var gScoreIsBest = false;\n\
+ \n\
+ \n\
+ if(!openList.findGraphNode(neighbor)) {\n\
+ // This the the first time we have arrived at this node, it must be the best\n\
+ // Also, we need to take the h (heuristic) score since we haven't done so yet\n\
+ \n\
+ gScoreIsBest = true;\n\
+ neighbor.h = astar.heuristic(neighbor.pos, end.pos);\n\
+ openList.push(neighbor);\n\
+ }\n\
+ else if(gScore < neighbor.g) {\n\
+ // We have already seen the node, but last time it had a worse g (distance from start)\n\
+ gScoreIsBest = true;\n\
+ }\n\
+ \n\
+ if(gScoreIsBest) {\n\
+ // Found an optimal (so far) path to this node. Store info on how we got here and\n\
+ // just how good it really is...\n\
+ neighbor.parent = currentNode;\n\
+ neighbor.g = gScore;\n\
+ neighbor.f = neighbor.g + neighbor.h;\n\
+ }\n\
+ }\n\
+ }\n\
+ \n\
+ // No result was found -- empty array signifies failure to find path\n\
+ return [];\n\
+ },\n\
+ heuristic: function(pos0, pos1) {\n\
+ // This is the Manhattan distance\n\
+ var d1 = Math.abs (pos1.x - pos0.x);\n\
+ var d2 = Math.abs (pos1.y - pos0.y);\n\
+ return d1 + d2;\n\
+ },\n\
+ neighbors: function(grid, node) {\n\
+ var ret = [];\n\
+ var x = node.pos.x;\n\
+ var y = node.pos.y;\n\
+ \n\
+ if(grid[x-1] && grid[x-1][y]) {\n\
+ ret.push(grid[x-1][y]);\n\
+ }\n\
+ if(grid[x+1] && grid[x+1][y]) {\n\
+ ret.push(grid[x+1][y]);\n\
+ }\n\
+ if(grid[x][y-1] && grid[x][y-1]) {\n\
+ ret.push(grid[x][y-1]);\n\
+ }\n\
+ if(grid[x][y+1] && grid[x][y+1]) {\n\
+ ret.push(grid[x][y+1]);\n\
+ }\n\
+ return ret;\n\
+ }\n\
+ };\n\
+\n\
+ function go() {\n\
+ path = astar.search(g1, start, end);\n\
+ };\n\
+\n\
+ go();\n\
+\n\
+ var _sunSpiderInterval = new Date() - _sunSpiderStartDate;\n\
+ TalosContentProfiler.subtestEnd('astar', true).then(() => {\n\
+ record(_sunSpiderInterval);\n\
+ });\n\
+\n\
+});\n\
+\n\
+</script>\n\
+\n\
+\n\
+</body>\n\
+</html>\n\
+", "<!DOCTYPE html>\n\
+<head>\n\
+\n\
+<meta charset=utf8>\n\
+\n\
+<!--\n\
+ Copyright (C) 2007 Apple Inc. All rights reserved.\n\
+\n\
+ Redistribution and use in source and binary forms, with or without\n\
+ modification, are permitted provided that the following conditions\n\
+ are met:\n\
+ 1. Redistributions of source code must retain the above copyright\n\
+ notice, this list of conditions and the following disclaimer.\n\
+ 2. Redistributions in binary form must reproduce the above copyright\n\
+ notice, this list of conditions and the following disclaimer in the\n\
+ documentation and/or other materials provided with the distribution.\n\
+\n\
+ THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY\n\
+ EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n\
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n\
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR\n\
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n\
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n\
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n\
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n\
+ OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n\
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \n\
+-->\n\
+\n\
+<title>SunSpider audio-beat-detection</title>\n\
+<link rel=\"stylesheet\" href=\"../kraken.css\">\n\
+</head>\n\
+\n\
+<body>\n\
+<h3>audio-beat-detection</h3>\n\
+<div id=\"console\">\n\
+</div>\n\
+<script>\n\
+var TalosContentProfiler = parent.TalosContentProfiler;\n\
+function record(time) {\n\
+ document.getElementById(\"console\").innerHTML = time + \"ms\";\n\
+ if (window.parent) {\n\
+ parent.recordResult(time);\n\
+ }\n\
+}\n\
+\n\
+var console = undefined;\n\
+// Audio sample data.\n\
+var channels = 2,\n\
+ rate = 44100,\n\
+ frameBufferLength = 2048,\n\
+ getFramebuffer = (function(f) {\n\
+ var frames = f,\n\
+ current = 0,\n\
+ max = frames.length - 1;\n\
+\n\
+ return function() {\n\
+ if (current == max) {\n\
+ current = 0;\n\
+ }\n\
+ return frames[current++];\n\
+ };\n\
+ })([\n\
+new Array(-9.063918018914485e-12,-3.261597155551632e-12,-7.691810383070319e-11,-4.440857404031107e-12,-1.680772881984538e-10,6.000556301843929e-11,-1.9150961372282893e-10,2.4246665786265e-10,-4.565171851655947e-11,5.450795370620654e-10,3.362514988669574e-10,9.004306744664348e-10,9.466241124300723e-10,1.175186170598863e-9,1.6831636084901902e-9,1.1990984871701471e-9,2.3562511941577213e-9,8.144737662085788e-10,2.725613068577104e-9,-6.554523590551753e-11,2.5597279851297117e-9,-1.405781158148045e-9,1.7045438394092116e-9,-3.0212734536405605e-9,1.442163333198465e-10,-4.585516411026447e-9,-1.9632779846290305e-9,-5.679597681051973e-9,-4.288398525176262e-9,-5.877284880995148e-9,-6.374909933271056e-9,-4.851113288850684e-9,-7.722416484057248e-9,-2.47689069254875e-9,-7.892031916867381e-9,1.0892343693669204e-9,-6.61385790579061e-9,5.384448886758264e-9,-3.872107523505974e-9,9.678744916641335e-9,5.3583804060508555e-11,1.3082328997882087e-8,4.604661096863083e-9,1.4708005480201791e-8,9.020721947194943e-9,1.3861386705116274e-8,1.2467070042987416e-8,1.0221797630549645e-8,1.4191283703723911e-8,3.973642304089253e-9,1.3679061439120233e-8,-4.147063581427801e-9,1.0777899461800189e-8,-1.2912646063512057e-8,5.7606563963474855e-9,-2.0772752407083317e-8,-6.882053815715494e-10,-2.6112324746918603e-8,-7.566866244701487e-9,-2.7557987891668745e-8,-1.3718089775238695e-8,-2.427747425315374e-8,-1.8031725446121527e-8,-1.6211833653301255e-8,-1.965133300529942e-8,-4.18648893329987e-9,-1.8145057012475263e-8,1.0134575845199834e-8,-1.3606820559175503e-8,2.4460184988583933e-8,-6.6646101970491145e-9,3.6226321498133984e-8,1.6094849897285712e-9,4.304074607830444e-8,9.874586481828374e-9,4.314259527404829e-8,1.6751737774711728e-8,3.579163276867803e-8,2.1068517597200298e-8,2.1507027270217804e-8,2.2072077499046827e-8,2.0971653302837012e-9,1.9569721843026855e-8,-1.95445934991767e-8,1.3969719603323938e-8,-3.986041718917477e-8,6.212331538080207e-9,-5.5206413662745035e-8,-2.396835618867499e-9,-6.249566553151453e-8,-1.0421006280125766e-8,-5.979339334771794e-8,-1.6550259829273273e-8,-4.6752756333034995e-8,-1.9834619280345578e-8,-2.479977112557208e-8,-1.9848005905487298e-8,2.9843314486299732e-9,-1.6751785736346392e-8,3.2283470119409685e-8,-1.124725823586914e-8,5.8215224640889573e-8,-4.4262269405237475e-9,7.614446673187558e-8,2.4491135786064433e-9,8.2506318221931e-8,8.19313505928676e-9,7.549270009121756e-8,1.1920842091228678e-8,5.54726611312617e-8,1.3204600968208524e-8,2.5057047992049775e-8,1.2132561622024696e-8,-1.1224615015237305e-8,9.258342537066255e-9,-4.759798244435842e-8,5.454737994625702e-9,-7.796932521841882e-8,1.702851637475078e-9,-9.695299496570442e-8,-1.136488791964041e-9,-1.0082637658115345e-7,-2.519120245736417e-9,-8.824257946571379e-8,-2.3383373015661846e-9,-6.056658463649e-8,-9.41838385060123e-10,-2.176004265663778e-8,9.601706096873386e-10,2.218358652328334e-8,2.4775965723478066e-9,6.417361220201201e-8,2.774252605419747e-9,9.717964388755718e-8,1.3009872068536765e-9,1.1542026356892165e-7,-2.0265045197476184e-9,1.153803879105908e-7,-6.7495498079495064e-9,9.647719423355738e-8,-1.1913705577626388e-8,6.124944462726489e-8,-1.623966028319046e-8,1.502435864608742e-8,-1.8389696876397466e-8,-3.4896281420060404e-8,-1.7278706465617688e-8,-8.040503729489501e-8,-1.2363916113145024e-8,-1.1392285870215346e-7,-3.8492862231009894e-9,-1.2967566931365582e-7,7.248555089489628e-9,-1.2469702426187723e-7,1.920039238711979e-8,-9.9380230267343e-8,2.98255180553042e-8,-5.747872222627848e-8,3.68760453284267e-8,-5.544654957390094e-9,3.8477701025385613e-8,4.810972953350756e-8,3.3544857558354124e-8,9.4760721935927e-8,2.2083437301034792e-8,1.2670979288031958e-7,5.314396478439676e-9,1.3856883640528395e-7,-1.442367381088161e-8,1.2817720573821134e-7,-3.3992773040836255e-8,9.6993083786856e-8,-4.995281699393672e-8,4.988867274846598e-8,-5.91591415854964e-8,-5.620970799924407e-9,-5.9357120107961236e-8,-6.059254786805468e-8,-4.9664652834735534e-8,-1.0611310585773026e-7,-3.084448252366201e-8,-1.3476119420374744e-7,-5.303653960453403e-9,-1.4182997176703793e-7,2.3200103171916453e-8,-1.26107053688429e-7,5.0111530924823455e-8,-9.008256540710136e-8,7.080907948875392e-8,-3.954905736236469e-8,8.139625862213506e-8,1.7340529012699335e-8,7.941753921159034e-8,7.14021481940108e-8,6.436970778622708e-8,1.1391774989988335e-7,3.790681546433916e-8,1.3805393450638803e-7,3.6889740151480055e-9,1.399694014025954e-7,-3.312028695745539e-8,1.1943076572151767e-7,-6.66380657321497e-8,7.98368589016718e-8,-9.120827826336608e-8,2.7651497092051613e-8,-1.023566014168864e-7,-2.8660446460548883e-8,-9.759249763874323e-8,-8.001645568356253e-8,-7.691699011047604e-8,-1.1819189182915579e-7,-4.293638866670335e-8,-1.3714550561871874e-7,-5.487733045761445e-10,-1.3398140197296016e-7,4.376378370807288e-8,-1.0939224637240841e-7,8.29331057161653e-8,-6.751718473196888e-8,1.1043897529816604e-7,-1.5242454409758466e-8,1.2139599903093767e-7,3.8936597945848916e-8,1.1341180794488537e-7,8.630295411649058e-8,8.706772547384389e-8,1.193270264820967e-7,4.592902058675463e-8,1.3286879152474285e-7,-3.930692660247814e-9,1.2498067292199266e-7,-5.482997877948037e-8,9.718515769918668e-8,-9.866953121218103e-8,5.418847948135408e-8,-1.28227270579373e-7,3.083594934949474e-9,-1.3834954870617366e-7,-4.782260987212794e-8,-1.26842650161052e-7,-9.036366321879541e-8,-9.491133567962606e-8,-1.1782764630652309e-7,-4.70599381685588e-8,-1.2601940113654564e-7,9.539609990838471e-9,-1.1390253007448337e-7,6.612728498112119e-8,-8.372249027388534e-8,1.1371697183903962e-7,-4.059829450397956e-8,1.4452912466822454e-7,8.344371416058038e-9,1.5326465074849693e-7,5.515137502243306e-8,1.3801113141198584e-7,9.23356182624957e-8,1.0062770883223493e-7,1.1407795597051518e-7,4.653392693398928e-8,1.1714049463762422e-7,-1.6075322406550185e-8,1.0134900918501444e-7,-7.747640040633996e-8,6.957183984468429e-8,-1.2793385906206822e-7,2.7206713326677345e-8,-1.5925049012821546e-7,-1.8734009898935255e-8,-1.6610192687949166e-7,-6.078472836179571e-8,-1.4693922878450394e-7,-9.224238795013662e-8,-1.0430580488218766e-7,-1.0823826812611514e-7,-4.45076224764307e-8,-1.0649359438730244e-7,2.3321303999068732e-8,-8.764186532062013e-8,8.862036082746272e-8,-5.5072241877951456e-8,1.410538743584766e-7,-1.4327970809802082e-8,1.7215407410731132e-7,2.783478691981145e-8,1.7669236740402994e-7,6.45675726218542e-8,1.5355695381913392e-7,9.00446011087297e-8,1.0598996880162304e-7,1.0038979780802038e-7,4.1135439943218444e-8,9.426747737961705e-8,-3.103694723449735e-8,7.304740989866332e-8,-9.927160249389999e-8,4.052454016800766e-8,-1.5279019294212048e-7,2.248076613753369e-9,-1.8300160320450232e-7,-3.542269766398931e-8,-1.8488543673811364e-7,-6.637513649820903e-8,-1.578263635337862e-7,-8.573766052677456e-8,-1.0576047060339988e-7,-9.064876138609179e-8,-3.660183267584216e-8,-8.067998180649738e-8,3.896485267773642e-8,-5.78489469660326e-8,1.091430661404047e-7,-2.6230463134879756e-8,1.6287407333948067e-7,8.762894410097033e-9,1.9158729003265762e-7,4.1304232922811934e-8,1.9057252131915448e-7,6.612271619133026e-8,1.597534549091506e-7,7.93595944514891e-8,1.0373634040661273e-7,7.916997901702416e-8,3.1118556620413074e-8,6.597691282195228e-8,-4.683636234403821e-8,4.234251704815506e-8,-1.1795428633831762e-7,1.2487103795422172e-8,-1.7106017935475393e-7,-1.8456139727618392e-8,-1.9774194015553803e-7,-4.5320295072315275e-8,-1.936883222697361e-7,-6.376741623626003e-8,-1.5938736908083229e-7,-7.099095000739908e-8,-1.0007260442534971e-7,-6.614403957883042e-8,-2.4920090879732015e-8,-5.042738848715089e-8,5.4377210290113e-8,-2.6831063593135696e-8,1.2543733873826568e-7,4.190550129123949e-10,1.7713182387524284e-7,2.660926767816818e-8,2.0133609268668806e-7,4.734960157293244e-8,1.9421217700710258e-7,5.9309229527571006e-8,1.568193965795217e-7,6.075319447518268e-8,9.495667541159492e-8,5.1793612954043056e-8,1.8258184297792468e-8,3.4318482278195006e-8,-6.131359242544931e-8,1.1618418227499205e-8,-1.3134261678260373e-7,-1.2217928002655754e-8,-1.8090540265802701e-7,-3.3030893575869413e-8,-2.0228301877978083e-7,-4.731122515977404e-8,-1.9216858504478296e-7,-5.279125758761438e-8,-1.5218093096791563e-7,-4.880642023863402e-8,-8.86045441461647e-8,-3.636942480511607e-8,-1.1396908305982834e-8,-1.794975901248108e-8,6.737802493717027e-8,2.9967353043502953e-9,1.354440257728129e-7,2.2661327037099e-8,1.8223443021270214e-7,3.756455413395088e-8,2.0054038429861976e-7,4.51666153367114e-8,1.8762639797387237e-7,4.429934108429734e-8,1.4564022876584204e-7,3.534657722070733e-8,8.125561379301871e-8,2.0145094481449632e-8,4.6065018466379115e-9,1.627221024591563e-9,-7.23151174497616e-8,-1.672687943710116e-8,-1.3754423378031788e-7,-3.1527999766467474e-8,-1.8101286514138337e-7,-4.0092068331887276e-8,-1.9611144352893461e-7,-4.0920408395095365e-8,-1.8069772522721905e-7,-3.3960340317662485e-8,-1.373995388576077e-7,-2.060184201013726e-8,-7.316809558233217e-8,-3.4121434566714015e-9,1.8424062275812503e-9,1.4342575127557211e-8,7.58872715778125e-8,2.930133291556558e-8,1.3747893490290153e-7,3.862820463496064e-8,1.771775828274258e-7,4.053629965028449e-8,1.8904509602180042e-7,3.4620917688243935e-8,1.7153544717984914e-7,2.1940055106028922e-8,1.2769024237968551e-7,4.8280348607931955e-9,6.461311841121642e-8,-1.3525756514809473e-8,-7.684699099286263e-9,-2.9658723477155036e-8,-7.788023737020922e-8,-4.047191026756991e-8,-1.3512089935829863e-7,-4.380772722356596e-8,-1.7071022284653736e-7,-3.8862765450176084e-8,-1.794353323703035e-7,-2.6359270322018347e-8,-1.6033061456255382e-7,-8.440215637506299e-9,-1.1676839051233401e-7,1.1695799884137159e-8,-5.586884554986682e-8,3.035879103663319e-8,1.2666705906383413e-8,4.4031899903984595e-8,7.810783131390053e-8,5.001792047210074e-8,1.3038322776992572e-7,4.6951285526120046e-8,1.6163825478088256e-7,3.50808093685373e-8,1.6741982733492478e-7,1.6268021596488325e-8,1.4730845521171432e-7,-6.305238997583729e-9,1.0490954593933566e-7,-2.867316517551899e-8,4.721489688108704e-8,-4.677700715660649e-8,-1.6551972237266455e-8,-5.7190277402696665e-8,-7.641661170509906e-8,-5.775084588321988e-8,-1.232217812230374e-7,-4.798507191594581e-8,-1.500348929539541e-7,-2.9243762966757458e-8,-1.531775808416569e-7,-4.518951435272811e-9,-1.327244092408364e-7,2.2034459590258848e-8,-9.240281428901653e-8,4.5795644609825104e-8,-3.8925911383103085e-8,6.247649508850373e-8,1.9126481731746026e-8,6.888492265488821e-8,7.268964452578075e-8,6.35182573205384e-8,1.1363691498900153e-7,4.687864318952961e-8,1.360183716769825e-7,2.144827604411148e-8,1.3692603317849716e-7,-8.680026475360592e-9,1.1685883549716891e-7,-3.846272988994315e-8,7.954528058462529e-8,-6.274878217027435e-8,3.126580239154464e-8,-7.716540295632512e-8,-2.020383149670124e-8,-7.889514108683215e-8,-6.68497079914232e-8,-6.720723888520297e-8,-1.0167435959829163e-7,-4.3645762559663126e-8,-1.1975075153713988e-7,-1.1832858248794764e-8,-1.1891678042275089e-7,2.308856750232735e-8,-1.0001188144315165e-7,5.528772462071174e-8,-6.663564988684811e-8,7.921842382074828e-8,-2.4482059046704308e-8,9.056988403699506e-8,1.9629631253792468e-8,8.703290887979165e-8,5.8861960638978417e-8,6.874705604786868e-8,8.742540558159817e-8,3.8344889929931014e-8,1.0143502748860556e-7,5.755360632520024e-10,9.94316948776941e-8,-3.843843643380751e-8,8.249778460367452e-8,-7.219536968250395e-8,5.3968339130960885e-8,-9.489680508067977e-8,1.8800008660946332e-8,-1.0243961412470526e-7,-1.728548326696e-8,-9.314704385587902e-8,-4.873542280847687e-8,-6.811089292568795e-8,-7.102593002628055e-8,-3.107823687287237e-8,-8.131225115448615e-8,1.2109261149362283e-8,-7.877756758034593e-8,5.4438466179362877e-8,-6.463856294658399e-8,8.88658746589499e-8,-4.182719237633137e-8,1.0948871675964256e-7,-1.441798502810343e-8,1.1255299625645421e-7,1.309215491573923e-8,9.71264810800676e-8,3.652399271913964e-8,6.531689678013208e-8,5.2654801407925333e-8,2.1990270937521927e-8,5.965749494407646e-8,-2.597437287477078e-8,5.7280796994518823e-8,-7.077982644432268e-8,4.6758000138424904e-8,-1.0498003177872306e-7,3.0479803569960495e-8,-1.2271735272406659e-7,1.1502635288707097e-8,-1.207218360832485e-7,-7.012232572378707e-9,-9.89030155551518e-8,-2.232631501897231e-8,-6.042829170382902e-8,-3.253148150861307e-8,-1.126556270492074e-8,-3.677537208091053e-8,4.0744591700558885e-8,-3.5281200183590045e-8,8.714194166259404e-8,-2.9175275528814382e-8,1.2022522355437104e-7,-2.0171768255750067e-8,1.3433009371510707e-7,-1.0184898258103203e-8,1.2679538485826924e-7,-9.48340073136933e-10,9.845307857858643e-8,6.285233666858403e-9,5.355287413522092e-8,1.0912705405985434e-8,-8.745786317376769e-10,1.2994831877222168e-8,-5.6121411518006425e-8,1.3126058462376022e-8,-1.0319883614329228e-7,1.2198796639495413e-8,-1.3430187095764268e-7,1.1121471743535949e-8,-1.4410350956950424e-7,1.0556746588008536e-8,-1.306638210962774e-7,1.0739150013705512e-8,-9.579873250231685e-8,1.1414194034387037e-8,-4.4841215185442707e-8,1.1911470920722422e-8,1.4175789431192243e-8,1.1336403815676022e-8,7.178886107794824e-8,8.836241960352709e-9,1.186250813134393e-7,3.879819132635021e-9,1.4692922434278444e-7,-3.515509661156102e-9,1.5184838275672519e-7,-1.2668508020396985e-8,1.3226078010575293e-7,-2.226547479722285e-8,9.100791231730909e-8,-3.054695696391718e-8,3.4484436639559135e-8,-3.5622434779725154e-8,-2.835523815747365e-8,-3.585806140904424e-8,-8.741915280552348e-8,-3.0262789607604645e-8,-1.331023611328419e-7,-1.8791553202390787e-8,-1.5785127516210196e-7,-2.495440298844187e-9,-1.5741350978260016e-7,1.6527152979506354e-8,-1.315653577194098e-7,3.5388893593335524e-8,-8.419365826739522e-8,5.085162513296382e-8,-2.2711049041390652e-8,5.987803319840168e-8,4.3106652469759865e-8,6.020332676826001e-8,1.0267898886695548e-7,5.082233300868211e-8,1.4632553302362794e-7,3.229512657298983e-8,1.6684182924109336e-7,6.800249252592039e-9,1.6068939601154852e-7,-2.209532112829038e-8,1.2860309084317123e-7,-4.9929113288271765e-8,7.551252423354526e-8,-7.203408358691377e-8,9.782965548765787e-9,-8.431845088807677e-8,-5.810602488054428e-8,-8.400549944553859e-8,-1.1723588499990001e-7,-7.020152992254225e-8,-1.5800895880602184e-7,-4.4182222325162e-8,-1.737094663667449e-7,-9.329681915914989e-9,-1.6161074256615393e-7,2.929103004589706e-8,-1.2344602851044328e-7,6.566628485416004e-8,-6.51622968916854e-8,9.377239962304884e-8,4.008910536867916e-9,1.0857223031734975e-7,7.30174321006416e-8,1.0690452256767458e-7,1.3076454763449874e-7,8.811070983938407e-8,1.6789185508514493e-7,5.428115912309295e-8,1.7830146248343226e-7,1.0058755606223713e-8,1.6015852111195272e-7,-3.7988669987498724e-8,1.1621219186963572e-7,-8.234437132159655e-8,5.337874142696819e-8,-1.1572207370136312e-7,-1.8349950892115885e-8,-1.3226288331225078e-7,-8.749950097808323e-8,-1.2855345232765103e-7,-1.429532971997105e-7,-1.0428958319153026e-7,-1.757441623340128e-7,-6.246106920571037e-8,-1.8050761241283908e-7,-9.007450785247784e-9,-1.5636099703897344e-7,4.8020453391472984e-8,-1.0706388309245085e-7,9.967530445464945e-8,-4.043157275646081e-8,1.3752170957559429e-7,3.290755046236882e-8,1.5501495909120422e-7,1.0121155469278165e-7,1.4862459352116275e-7,1.535100864202832e-7,1.18511877644778e-7,1.8137095025849703e-7,6.863422186142998e-8,1.8026273096438672e-7,6.241009486984694e-9,1.502937152508821e-7,-5.9178759670430736e-8,9.6205269528582e-8,-1.1734320537470921e-7,2.661998621533712e-8,-1.587992954910078e-7,-4.7336740749415185e-8,-1.7646118521952303e-7,-1.1382016396055405e-7,-1.6681565284670796e-7,-1.621684049268879e-7,-1.305898820191942e-7,-1.8461685158399632e-7,-7.275829716490989e-8,-1.7754862824403972e-7,-1.8693526726565324e-9,-1.4207904541763128e-7,7.12196168706214e-8,-8.387929995024024e-8,1.350101968000672e-7,-1.226757717631699e-8,1.791784427496168e-7,6.128705365426868e-8,1.9624867775291932e-7,1.2500586876740272e-7,1.8285521719008102e-7,1.6869270780262013e-7,1.4037811979505932e-7,1.8536968582338886e-7,7.483755837256467e-8,1.7239531757695659e-7,-3.954397698180401e-9,1.3188457614887739e-7,-8.386642491586827e-8,7.036361182599649e-8,-1.523217889598527e-7,-2.283826461280114e-9,-1.982851216553172e-7,-7.440858951213158e-8,-2.140455137578101e-7,-1.3446904745251231e-7,-1.9650781268865103e-7,-1.7288331832787662e-7,-1.4777623391637462e-7,-1.8356305986344523e-7,-7.492307929624076e-8,-1.648810297183445e-7,1.1036519254048471e-8,-1.199205286184224e-7,9.681468782218872e-8,-5.59659980581273e-8,1.689130897375435e-7,1.6679663872309902e-8,2.1575439745902258e-7,8.635897330577791e-8,2.2954650091833173e-7,1.419358568455209e-7,2.0757832430717826e-7,1.745807907127528e-7,1.5273110420821467e-7,1.791784427496168e-7,7.311207639304484e-8,1.5513171547354432e-7,-1.9145318219671026e-8,1.064367722847237e-7,-1.0973732855745766e-7,4.1019006857823115e-8,-1.8441545535097248e-7,-3.0559448305211845e-8,-2.3123673997815786e-7,-9.680942980594409e-8,-2.424790750410466e-7,-1.4716398766267957e-7,-2.15915846979442e-7,-1.7366949123243103e-7,-1.5523812635365175e-7,-1.7224643045210541e-7,-6.954682874038554e-8,-1.4331929776290053e-7,2.801593268486613e-8,-9.171864689960785e-8,1.2229020285303704e-7,-2.5874314246721042e-8,1.9846278576096665e-7,4.356334670774231e-8,2.4440464585495647e-7,1.054514413567631e-7,2.5260820279982e-7,1.4994745356489148e-7,2.214165988334571e-7,1.7008042618726904e-7,1.5534149611085013e-7,1.6284681692013692e-7,6.44118358650303e-8,1.2965963946953707e-7,-3.735416953531967e-8,7.608232976963336e-8,-1.3411838040156e-7,1.0896656021941453e-8,-2.1069845956844802e-7,-5.533853197903227e-8,-2.5495873501313326e-7,-1.1200258853705236e-7,-2.5974125605898735e-7,-1.5012123810720368e-7,-2.2402615229566436e-7,-1.6379334510929766e-7,-1.5313399615024537e-7,-1.5110805406948202e-7,-5.793131663267559e-8,-1.1440880598456715e-7,4.684170562541112e-8,-5.986959195070085e-8,1.4486286659121106e-7,3.543078719303594e-9,2.207816862664913e-7,6.554610365583358e-8,2.626331934152404e-7,1.1621221318591779e-7,2.637312945807935e-7,1.4756460586795583e-7,2.2374074148956424e-7,1.548379913174358e-7,1.487551344325766e-7,1.372055606907452e-7,5.036477546127571e-8,9.785939880657679e-8,-5.614236897599767e-8,4.344204285189335e-8,-1.5416648579957837e-7,-1.707385877125489e-8,-2.2839421376374958e-7,-7.386714173662767e-8,-2.672012158200232e-7,-1.1786644904532295e-7,-2.6448051926308835e-7,-1.4220435673450993e-7,-2.2060758908537537e-7,-1.4329432929116592e-7,-1.423892257435e-7,-1.2135944871261017e-7,-4.200282432975655e-8,-8.033579490529519e-8,6.490785153800971e-8,-2.7174962724529905e-8,1.6168131367066962e-7,2.9331772566365544e-8,2.3324616904574214e-7,8.000931472906814e-8,2.684793400931085e-7,1.1679284739329887e-7,2.619423185024061e-7,1.3401688647718402e-7,2.1472467892635905e-7,1.2929177728437935e-7,1.3426242162495328e-7,1.0383159576576872e-7,3.3161711598950205e-8,6.218888870535011e-8,-7.2784388294167e-8,1.1450310921645723e-8,-1.6707475936073024e-7,-3.9966550957615254e-8,-2.350818988361425e-7,-8.37119387142593e-8,-2.6633134098119626e-7,-1.1286404344446055e-7,-2.5612271770114603e-7,-1.2302950835874071e-7,-2.062390649371082e-7,-1.1300813440584534e-7,-1.2463814869079215e-7,-8.492092717915511e-8,-2.4177921886803233e-8,-4.378986773190263e-8,7.941886792650621e-8,3.3493563478259603e-9,1.7003641517021606e-7,4.864789104885858e-8,2.3368514234789473e-7,8.475183221889893e-8,2.606714133435162e-7,1.0600088984347167e-7,2.47080549797829e-7,1.093205383995155e-7,1.9534485318217776e-7,9.466675976455008e-8,1.1381365538909449e-7,6.495940851891646e-8,1.540166749691707e-8,2.5524627744744066e-8,-8.446616561741394e-8,-1.6848247241796344e-8,-1.7028382615080773e-7,-5.507182265773736e-8,-2.2888355033501284e-7,-8.29474018360088e-8,-2.5146613324977807e-7,-9.61746167149613e-8,-2.3492745526709768e-7,-9.30190964254507e-8,-1.8228004705633793e-7,-7.453374450960837e-8,-1.0211371659352153e-7,-4.430629019225307e-8,-7.190720907601644e-9,-7.786582045810064e-9,8.7595566355958e-8,2.868361548280518e-8,1.6756843024268164e-7,5.8966605820387485e-8,2.2055249360164453e-7,7.816283442707572e-8,2.387361348610284e-7,8.340805379702942e-8,2.1982599207603926e-7,7.430342918723909e-8,1.6732249719098036e-7,5.291352067615662e-8,8.988544664134679e-8,2.3342494159805938e-8,-9.657696864451282e-11,-9.029974989971379e-9,-8.849696087054326e-8,-3.851283736366895e-8,-1.6168071681477159e-7,-6.009787512084586e-8,-2.086184167637839e-7,-7.031114535038796e-8,-2.2255642306845402e-7,-6.777638361654681e-8,-2.0198783090563666e-7,-5.339874320497984e-8,-1.5078565240855824e-7,-3.0144647666929814e-8,-7.74920465573814e-8,-2.4640200990688754e-9,6.107484296080656e-9,2.4536632281524362e-8,8.688752473062777e-8,4.6019223987059377e-8,1.5245490203597e-7,5.827331506225164e-8,1.930607993472222e-7,5.9356413117939155e-8,2.0305571979406523e-7,4.9406320812295235e-8,1.8167025928050862e-7,3.057391495531192e-8,1.3301294643497386e-7,6.593907642127306e-9,6.530615337396739e-8,-1.7924634221344604e-8,-1.0502304803594598e-8,-3.8357740095307236e-8,-8.251703320638626e-8,-5.09184445718347e-8,-1.3977266632991814e-7,-5.334685226898728e-8,-1.7391343476447219e-7,-4.531527508788713e-8,-1.8041541238744685e-7,-2.847492908131244e-8,-1.5917244411411957e-7,-6.137511832093878e-9,-1.1437219882282079e-7,1.7349023551105347e-8,-5.37032178726804e-8,3.741698151316086e-8,1.296049845223024e-8,5.013745862925134e-8,7.517348876717733e-8,5.296352867389942e-8,1.2356650813671877e-7,4.5221725031296955e-8,1.512654534963076e-7,2.825746747703306e-8,1.548669530393454e-7,5.2072621770093974e-9,1.3483074212672364e-7,-1.9566755327105056e-8,9.524914901248849e-8,-4.127851127577742e-8,4.305459810893808e-8,-5.561204829973576e-8,-1.3186848946133978e-8,-5.95453570895188e-8,-6.468775382018066e-8,-5.194998209390178e-8,-1.0382181869772467e-7,-3.385292757229763e-8,-1.252602146450954e-7,-8.305409693321053e-9,-1.266889739781618e-7,2.01266487920293e-8,-1.0901331393142755e-7,4.616561000148067e-8,-7.604103302583098e-8,6.477917224856355e-8,-3.372076662344625e-8,7.212108243948023e-8,1.0917915460595395e-8,6.628347648529598e-8,5.093718868920405e-8,4.771956696458801e-8,8.057844524955726e-8,1.924885140169863e-8,9.609434670210248e-8,-1.4367117273650365e-8,9.62030739515285e-8,-4.7215870324635034e-8,8.211441127059516e-8,-7.326191564516193e-8,5.714957751479233e-8,-8.743310786485381e-8,2.6044631340482738e-8,-8.657399064304627e-8,-5.926722224103287e-9,-7.00910334217042e-8,-3.384931801519997e-8,-4.016405341644713e-8,-5.3931231036585814e-8,-1.4717116414431075e-9,-6.401522512078373e-8,3.953713800797232e-8,-6.376927785822772e-8,7.571323124011542e-8,-5.454768370327656e-8,1.0044124110208941e-7,-3.897437750310928e-8,1.0882675383072637e-7,-2.034499857472838e-8,9.862651495495811e-8,-1.9718697785719996e-9,7.074959285091609e-8,1.3404161336438847e-8,2.9227308573354094e-8,2.4029375822465227e-8,-1.9362573766557034e-8,2.931786724502672e-8,-6.693563392445867e-8,2.9780522936562193e-8,-1.0524054516736214e-7,2.673979793144099e-8,-1.2727836917747481e-7,2.1905208313910407e-8,-1.2855795716859575e-7,1.6910888689380954e-8,-1.0796576077609643e-7,1.2917411140733748e-8,-6.808754449139087e-8,1.0364715308242012e-8,-1.4907442391631776e-8,8.924573080548726e-9,4.308567014277287e-8,7.658934819687602e-9,9.625129138157718e-8,5.343167686078232e-9,1.3539460042011342e-7,8.767813142185332e-10,1.5334450154114165e-7,-6.316128065009252e-9,1.4624281163833075e-7,-1.5995510693755932e-8,1.1431623647695233e-7,-2.7000339741789503e-8,6.198324342676642e-8,-3.7368934613368765e-8,-2.7429507554188604e-9,-4.467732850343964e-8,-6.947900033082988e-8,-4.65375258329459e-8,-1.271353227139116e-7,-4.11612219863855e-8,-1.657535761978579e-7,-2.787074038224091e-8,-1.7821416520291677e-7,-7.4418835538381245e-9,-1.6152242210409895e-7,1.78118000349059e-8,-1.174446140339569e-7,4.425945121511177e-8,-5.236780964423815e-8,6.74662032906781e-8,2.361669260153576e-8,8.292775532936503e-8,9.827665792272455e-8,8.690673070077537e-8,1.5920657858714549e-7,7.721943973137968e-8,1.9588374300383293e-7,5.381905054946401e-8,2.01472317939988e-7,1.9046609622819233e-8,1.7406878782821877e-7,-2.252760111787211e-8,1.1716433334640897e-7,-6.468043523000233e-8,3.9226861758834275e-8,-1.0046120735296427e-7,-4.755322891014657e-8,-1.2333094900895958e-7,-1.291692797167343e-7,-1.283278550090472e-7,-1.920576551128761e-7,-1.1305681368867226e-7,-2.2534644017468963e-7,-7.831395976154454e-8,-2.2272135424827866e-7,-2.8210422442498384e-8,-1.835907994518493e-7,3.026283934559615e-8,-1.1333888494391431e-7,8.819482388844335e-8,-2.2601398086408153e-8,1.3610795690510713e-7,7.434063320488349e-8,1.6550283987726289e-7,1.6180867135062726e-7,1.70341195371293e-7,2.2526110399212484e-7,1.482129619034822e-7,2.537052807838336e-7,1.0096973568352041e-7,2.415877418115997e-7,3.468574050202733e-8,1.8983951122208964e-7,-4.1086096302933584e-8,1.0588495058527769e-7,-1.1468043936702088e-7,2.5876758513732057e-9,-1.7411272779099818e-7,-1.0371854131108194e-7,-2.0902572828163102e-7,-1.9581293031478708e-7,-2.124729689967353e-7,-2.5837624662017333e-7,-1.8223526865313033e-7,-2.805332712796371e-7,-1.2142896821387694e-7,-2.5772834533199784e-7,-3.826910699444852e-8,-1.9261226213984628e-7,5.501317446032772e-8,-9.477400908508571e-8,1.4396246683645586e-7,2.0663790678554506e-8,2.141380548437155e-7,1.353819669702716e-7,2.5345423182443483e-7,2.3077254240888578e-7,2.542422521401022e-7,2.909561942487926e-7,2.1468599697982427e-7,3.054196326957026e-7,1.3936859488694608e-7,2.708362671910436e-7,3.880498411490407e-8,1.9175661236658925e-7,-7.20061592573984e-8,8.003340923323776e-8,-1.7581527345100767e-7,-4.695015576317019e-8,-2.5569300987626775e-7,-1.6888239429135865e-7,-2.9772394327665097e-7,-2.6572107003630663e-7,-2.942533399163949e-7,-3.216046877696499e-7,-2.4395217224082444e-7,-3.2649120385030983e-7,-1.5415402287999314e-7,-2.794814122353273e-7,-3.692490579965124e-8,-1.8526327494328143e-7,9.23838996413906e-8,-5.7667513431169937e-8,2.1058662014183938e-7,7.687667391564901e-8,2.963788858778571e-7,2.0058980965131923e-7,3.4519857194936776e-7,3.073854202284565e-7,3.573021274405619e-7,3.7416907616716344e-7,3.1087432716958574e-7,3.706501559008757e-7,1.8159762760205922e-7,2.960990173050959e-7,3.2668427962789792e-9,1.7206878055731067e-7,-1.4935011449779267e-7,2.215257310922425e-8,-2.558177527589578e-7,-1.244094391950057e-7,-3.4790230074577266e-7,-2.48221766696588e-7,-4.0844787463356624e-7,-3.424703720611433e-7,-3.83691684646692e-7,-3.784057298616972e-7,-3.049817678402178e-7,-3.52345750798122e-7,-2.4648699081808445e-7,-3.195747524387116e-7,-1.5783344053943438e-7,-2.518800101825036e-7,3.3997068271673925e-8,-6.30552534630624e-8,2.2121484732906538e-7,1.4892148669787275e-7,3.141547040286241e-7,2.5954253146664996e-7,4.2449011061762576e-7,3.912932697858196e-7,5.711276571673807e-7,5.997012522129808e-7,5.73685213112185e-7,6.688356961603859e-7,3.7676232977901236e-7,5.146665671418305e-7,1.2447100061763194e-7,2.9143745905457763e-7,-7.52123909819602e-8,5.3134645128238844e-8,-2.977363067202532e-7,-2.6843949285648705e-7,-6.520573947454977e-7,-6.28192310614395e-7,-9.370967291033594e-7,-8.570544878239161e-7,-8.548654477635864e-7,-9.001176977108116e-7,-5.94005030052358e-7,-8.865962399795535e-7,-4.7458777885367454e-7,-8.468994110444328e-7,-3.512149930884334e-7,-6.936784302524757e-7,-8.961339403867896e-8,-4.980943231203128e-7,1.230076236424793e-7,-3.2142719419425703e-7,2.4483753691129095e-7,-8.036778353925911e-8,3.2601849397906335e-7,1.5931499319776776e-7,2.634457132444368e-7,3.075739698488178e-7,1.0006087336478231e-7,4.02592405635005e-7,-1.3917727414991532e-8,2.7964540549874073e-7,-1.6491451049205352e-7,-1.252113293048751e-7,-4.322458266869944e-7,-3.4416802918713074e-7,-5.973930683467188e-7,-1.608441806411065e-7,-5.607481625702349e-7,-9.189005822918261e-8,-6.423296667890099e-7,-4.1814701035036705e-7,-8.845384513733734e-7,-6.042727704880235e-7,-6.649395345448283e-7,-1.4977459272813576e-7,2.076261296224402e-7,6.342019105431973e-7,9.887080523185432e-7,0.0000011756283129216172,0.0000012178294355180697,0.0000014045423313291394,0.0000012169082310720114,0.0000014515543398374575,0.0000013197013686294667,0.0000013726862562180031,0.0000014580078868675628,0.0000013222773986854008,0.0000011356053164490731,0.0000010844875077964389,1.0777938541650656e-7,2.2619612138896628e-7,-7.482602768504876e-7,-7.17060970600869e-7,-6.657965059275739e-7,-8.349057907253155e-7,-3.209282795069157e-7,-3.6607696074497653e-7,-3.680989948406932e-7,-1.1575120595352928e-7,-4.95609242534556e-7,-3.544887476891745e-7,-5.947504178038798e-7,-8.185001547644788e-7,-7.568756359432882e-7,-9.477171829530562e-7,-7.301545679183619e-7,-6.806443479945301e-7,-6.662963869530358e-7,-7.349966608671821e-7,-9.223255688084464e-7,-0.0000011680775742206606,-9.623134928915533e-7,-0.0000011299755442450987,-5.716998430216336e-8,-4.1727275856828783e-7,0.0000012798651596312993,4.575892944558291e-7,0.0000017962800029636128,0.0000010811531865329016,0.0000012475534276745748,0.0000010263622698403196,6.50961169412767e-7,3.0017449148544983e-7,6.232056648514117e-7,-2.1072614231343323e-7,5.681872607965488e-7,-1.0082136014943899e-7,5.6389637848042184e-8,-3.821854477337183e-8,-1.9356215830157453e-7,-8.707064580448787e-8,3.1259128263627645e-7,3.307707174826646e-7,6.644752374995733e-7,5.657690280713723e-7,2.2780943709221901e-7,-9.992874083764036e-8,-3.080589294768288e-8,-4.176954746526462e-7,3.027119532816869e-7,2.994362375829951e-7,2.1587086962426838e-7,4.623799156888708e-7,-6.439171329475357e-8,-1.8978136040459503e-7,6.838890840299428e-7,1.823492823405104e-7,0.0000016455330751341535,0.000001461430429117172,0.0000012464244036891614,0.0000017142567685368704,1.521793251413328e-7,8.734431844459323e-7,-2.2615671468884102e-7,3.06045933484711e-7,-2.8238775939826155e-7,7.30272518012498e-8,-0.00000103277864127449,-6.274767088143562e-7,-0.0000019067788343818393,-0.0000013300996215548366,-0.0000018798998553393176,-0.0000011391654197723255,-0.0000017127154023910407,-0.0000010173259852308547,-0.000002217254632341792,-0.0000019248880107625155,-0.0000020913898879371118,-0.0000021242335606075358,-5.66933863410668e-7,-2.713406956900144e-7,8.740189514355734e-7,0.0000017201797390953288,0.000001283963001696975,0.0000020493916963459924,0.000001458434553569532,0.0000017541703982715262,0.0000023141244582802756,0.0000024709238459763583,0.000003410554882066208,0.0000036500086935120635,0.000002940127160400152,0.0000032614680094411597,9.374844012199901e-7,0.0000014839671393929166,5.367808171286015e-7,0.0000010193630259891506,0.0000026928789793601027,0.000002544775270507671,0.0000042918609324260615,0.000004003791673312662,0.0000036620276659959927,0.000004126029125472996,0.0000026585357773001306,0.0000032682805795047898,0.000002984725369969965,0.000002696561978154932,0.0000035732336982619017,0.0000029659092888323357,0.0000024645387384225614,0.0000024580745048297103,7.03024511494732e-7,8.939995268519851e-7,3.9872708157417946e-7,4.0552660607318103e-7,2.736072133302514e-7,5.195767585064459e-7,-6.794140290367068e-7,-3.420753387217701e-7,-8.344152320205467e-7,-9.72813950284035e-7,-8.701111937625683e-7,-0.0000012382436125335516,-0.0000019544306724128546,-0.0000023187603801488876,-0.000002346559995203279,-0.0000032190364436246455,-0.000002146023462046287,-0.0000034883794342022156,-0.000002175008376070764,-0.0000032290981835103594,-7.618077688675839e-7,-0.0000014997837070040987,3.1260697141988203e-7,-6.726122592226602e-7,-0.0000018081600501318462,-0.0000030780636279814644,-0.0000033705023270158563,-0.0000045586630221805535,-0.0000017679449229035527,-0.0000024891428438422736,-7.876126346673118e-7,-8.457274702777795e-7,-0.000001939183221111307,-0.0000018313490954824374,-0.0000030375533697224455,-0.0000032928546715993434,-0.000002612765911180759,-0.0000027941657663177466,-1.2583780062414007e-7,-1.304837837778905e-7,0.000002071829158012406,0.0000012727984994853614,0.0000010511553227843251,-1.8225119902126607e-7,-8.205987001019821e-7,-6.519076123367995e-7,-5.326791665538622e-7,7.292591703844664e-7,3.8590383155678865e-7,6.530359542011865e-7,8.554245312097919e-8,-2.893132773351681e-7,-0.0000011364130614310852,-3.044409879748855e-7,-0.0000015163764146564063,-2.6364565997027967e-7,2.97657777537097e-7,6.473703706433298e-8,0.000001827797973419365,7.450047974089102e-7,0.0000011695537978084758,8.898541636881419e-7,0.0000016373277276215958,0.00000214285728361574,0.000004091570190212224,0.000004667096163757378,0.000004342218744568527,0.000004851250650972361,0.0000016070987385319313,0.000002105672592733754,-8.746696380512731e-7,-4.304055778447946e-7,-9.53932840275229e-7,-0.000001061122361534217,9.499452744421433e-7,-3.891087771989987e-7,0.0000013530089972846326,-2.494775799277704e-7,-0.0000016349131328752264,-0.00000132011086861894,-0.0000037219176647340646,-0.0000016550230839129654,-0.0000018801339365381864,-5.213034341977618e-7,3.8171768323991273e-7,4.5613657562171284e-7,5.042894031248579e-7,8.237010433731484e-7,3.6334296282802825e-7,8.760717378208938e-7,0.0000012198424883536063,2.7994315132673364e-7,0.000002176149791921489,-5.067900019639637e-7,0.000002342127800147864,-8.856314934746479e-7,0.0000014781663821850088,-0.0000013078295069135493,-3.082652710872935e-7,-0.0000021032362838013796,-0.000002368892637605313,-0.000002730813321250025,-0.0000034160445920861093,-0.0000024211738036683528,-0.0000029086347694828874,-0.000001562975739943795,-0.0000019350463844602928,-0.0000014834488410997437,-0.0000014534834917867556,-0.0000016977220411718008,-0.000001213783093589882,-6.728521384502528e-7,-5.774323881269083e-7,6.11771270087047e-7,9.30576675273187e-7,8.939668418861402e-7,0.0000027284738735033898,0.0000018481326833352796,0.000003407468284422066,0.000004100708338228287,0.000003105833684458048,0.000004962969796906691,0.0000029469849778251955,0.0000037807042190252105,0.000002233268787676934,0.0000031275560559151927,8.682991392561235e-8,0.0000028762378860847093,-0.0000017796860447560903,6.71204247737478e-7,-0.000001924816388054751,-0.0000020046747977175983,-0.0000019394990431464976,-0.000002175224835809786,-0.000002797315119096311,-9.022790550261561e-7,-0.0000029163450108171673,-4.2059861016241484e-7,-0.000002293946636200417,-8.709507710591424e-7,-0.000002271910261697485,-0.000001970868197531672,-0.000001801297685233294,-0.0000029321738566068234,-4.773514774569776e-7,-0.000002368856030443567,5.963245541806828e-8,-3.129603953766491e-7,8.343644140040851e-7,0.000001990498731174739,0.0000029133886982890544,0.0000031243421290128026,0.0000034031081668217666,0.0000025283086415583966,0.0000014670375776404398,0.0000014539837138727307,1.7197021406900603e-7,6.120799866948801e-7,7.339646117543452e-7,-1.7980983102461323e-7,0.00000206096865440486,2.195063188992208e-7,0.0000024490736905136146,9.115740340348566e-7,0.000001012251686915988,-7.794897669555212e-7,2.7506416699907277e-8,-0.0000024963355826912448,4.2787877418959397e-7,-0.0000011866404747706838,-6.74784530474426e-7,1.879491264844546e-7,-0.000002654897798493039,-3.367568979228963e-7,-0.0000023314582904276904,-6.135625199021888e-7,-7.370135222117824e-7,5.8683184533947497e-8,8.916401839087484e-7,0.0000014124995004749508,0.000002813352239172673,0.0000026935217647405807,0.0000029301741051313,0.0000022357385205395985,0.000001388805912938551,0.0000018279930600328953,0.000001394297441947856,0.0000029639745662279893,0.0000018493608422431862,0.0000016150321471286588,3.5992877656099154e-7,-0.000002704265398278949,-0.0000010994443755407701,-0.000004828819328395184,-0.0000013743367617280455,-0.000005059882369096158,-0.000002426815854050801,-0.000006455979018937796,-0.000003922141331713647,-0.000006152407877380028,-0.0000028160709462099476,-0.0000024322541776200524,0.0000010553062566032168,3.0933875905247987e-7,0.0000034888794289145153,4.5727097131020855e-7,0.000002063457259282586,0.0000012197371006550384,-2.0020483049165705e-8,0.0000027144808427692624,2.0493121155595873e-7,0.000002951913074866752,5.058386705059092e-7,0.0000032117116006702418,-0.0000018270185364599456,0.0000033168328172905603,-0.000004480983534449479,4.185849320492707e-7,-0.000003851749170280527,-0.0000025518065740470774,-0.000001983080892387079,-0.0000010308563105354551,-0.000002553476633693208,0.0000011045649443985894,-0.000003134451389996684,-7.845445111342997e-7,-0.0000015007548199719167,-0.000004307928065827582,-7.732348876743345e-7,-0.000005889574822504073,-6.64547201267851e-7,-0.0000036463213746174006,0.0000014335303148982348,9.660944897404988e-7,0.0000030718933885509614,0.000002293975967404549,0.000004045246441819472,4.4917024411006423e-7,0.00000643897510599345,0.000001357122073386563,0.000005552279162657214,0.000003269643684689072,7.760314701954485e-8,9.674236025603022e-7,-0.000001983548600037466,-0.000003136755140076275,6.122683657849848e-7,-0.000005188488557905657,0.0000012430969036358874,-0.000005397181666921824,-0.0000011439969966886565,-0.000004655254997487646,-0.0000034371810215816367,-0.0000031633135222364217,-0.000004312693818064872,-4.008234952834755e-7,-0.0000041818429963313974,0.0000022276451545621967,-0.000004215441549604293,0.0000017187583125632955,-0.0000034841016258724267,6.790135671508324e-7,-0.0000010553040965533,0.0000027846174361911835,2.2888437456458632e-7,0.0000037306460853869794,-3.539622639436857e-7,4.354231180059287e-7,-4.999796487936692e-8,-0.000002381189915467985,3.447065068939992e-7,-0.0000015586550716761849,-0.000001388713258165808,0.0000010854568017748534,-0.0000035118382584187202,0.0000024505141027475474,-0.0000027599924123933306,0.0000012928514934174018,3.452988153185288e-7,9.147630066763668e-7,4.678361165133538e-8,0.0000029235700367280515,-0.000004951607479597442,0.000002497083642083453,-0.0000061007790463918354,-0.000002038024604189559,-8.928830084187211e-7,-0.000005155670351086883,0.0000024980663511087187,-0.0000027834005322802113,0.0000030437615805567475,0.0000020207432953611715,0.000005872328074474353,0.0000023667914774705423,0.000008525761586497538,-0.000001744319888530299,0.000006328796189336572,-0.0000031836743801250122,5.817118449158443e-7,-0.000002760403958745883,-0.0000035621792449092027,-0.000005721019078919198,-0.0000031907666198094375,-0.00000798531254986301,-0.0000031328777367889415,-0.000007057904895191314,-0.000006145962288428564,-0.0000067292294261278585,-0.000004455939688341459,-0.0000036864155390503583,0.0000028903127713419963,0.000003648249503385159,0.0000055629725466133095,0.0000065096337493741885,0.000002313576715096133,0.000003299622903796262,-7.386475431303552e-7,0.0000011346337487339042,-0.000002999298430950148,0.0000012600233958437457,-0.000004482871645450359,0.0000012339850172793376,-0.000005028339273849269,-3.190280040143989e-8,-0.0000065708190959412605,-0.000002137759793185978,-0.000007463507699867478,-0.000002253582579214708,-0.000006214255336089991,-7.441607294822461e-7,-0.000005036740731156897,-8.026523801163421e-7,-0.0000038829380173410755,-0.0000014424687151404214,-0.000002219082944066031,-0.0000020632605810533278,-2.967931038710958e-7,-0.0000033134051591332536,0.000003112592821707949,-0.000001956977257577819,0.000004888274361292133,0.000001258301949746965,0.000002539396518841386,0.0000012315238109295024,0.0000029573939173133112,-3.9749210145600955e-7,0.000007965088116179686,-3.201979836831015e-7,0.000008430645721091423,-5.8561276716773136e-8,0.0000023614306883246172,-6.812036303927016e-7,-0.000002683240154510713,-0.000002635863893374335,-0.000002422957550152205,-0.000004931941020913655,6.032428245816845e-7,-0.000004697282747656573,9.093607786780922e-7,-0.000004782049927598564,-0.0000014407632988877594,-0.0000074239114837837406,-7.167645890149288e-7,-0.000005518366833712207,0.0000017230380535693257,0.0000018537798496254254,3.114373328116926e-7,0.00000475042725156527,-0.000002284921265527373,0.000001991696535696974,-0.0000018958348846354056,0.0000018167754660680657,-4.297342002246296e-7,0.000005431287263490958,-2.5431930339436803e-7,0.000006547586508531822,-0.0000019510043784976006,0.0000021715609364036936,-0.000005160231921763625,-0.000003922723863070132,-0.00000864976755110547,-0.0000069777229327883106,-0.00001098142092814669,-0.000004680390702560544,-0.000009758781743585132,0.0000025811777959461324,-0.0000064820569605217315,0.000006200225016073091,-0.0000068604194893850945,-0.000001493326294621511,-0.000008256333785539027,-0.00000808436016086489,-0.000005116302872920642,-0.0000019706062630575616,-0.0000036357112094265176,9.638056326366495e-7,-0.000006723561000399059,-0.000010043848305940628,-0.000005082299139758106,-0.000017330961782136,0.0000022783654003433185,-0.000010823952834471129,0.000007848390850995202,4.930726049678924e-8,0.000009791321645025164,0.000010214233043370768,0.000006767637387383729,0.000014693004231958184,6.522810167552962e-7,0.00000584156759941834,0.000001056483142747311,-0.0000061027412812109105,0.000005941973086009966,-0.000003799846808760776,0.0000032200546229432803,0.000007958360583870672,-0.000002986663048432092,0.000010821105206559878,-0.0000017829129319579806,5.535289915314934e-7,0.000002348450379940914,-0.000008360521860595327,0.0000030174969651852734,-0.0000035998295970784966,0.000003019416453753365,0.000005565047104028054,0.0000018894493223342579,0.0000023230936676554848,-0.0000034996205613424536,-0.000009694063919596374,-0.000008751128007133957,-0.000014601409930037335,-0.000007933239430713002,-0.000009449898243474308,-0.000002970120021927869,-0.000001097449057851918,-9.543623491481412e-7,0.00000434171261076699,-0.000004111882390134269,6.79061088249e-7,-0.000004496859673963627,-0.000008936454833019525,0.0000034232402867928613,-0.00000979360265773721,0.000009566062544763554,-3.9706472421130456e-7,0.000004433742105902638,0.000003042325033675297,-0.0000030128887829050655,-0.0000029714519769186154,-0.000003187324637110578,-0.000004348108632257208,-0.0000033043913845176576,0.000002110427658408298,-0.000010759151336969808,0.0000043579448174568824,-0.00001797520599211566,-8.999119245345355e-7,-0.000014672106772195548,-0.0000032756438486103434,-0.000003837559233943466,7.575903282486252e-7,0.0000024387154553551227,0.0000023866900846769568,0.00000110207599846035,-3.6517462831398007e-7,8.478238555653661e-7,3.2741291988713783e-7,0.000003992907295469195,0.0000034631802918738686,0.0000039670776459388435,0.000002545645429563592,0.0000018931576732938993,0.000001866697971308895,0.000004212356543575879,0.0000053428002502187155,0.000007821597137080971,0.000004359905233286554,0.000005222345862421207,-0.000005469212737807538,-0.0000021719831693189917,-0.000014025296877662186,-0.000007200156233011512,-0.000013071728062641341,-0.000008534292646800168,-0.00000858534622238949,-0.00000976859428192256,-0.000009199759006150998,-0.000009531527211947832,-0.000010971834853990003,-0.000005088163561595138,-0.000006511634637718089,-0.000001014210738503607,-0.0000015070510244186153,-3.342962884289591e-7,-0.0000030100443382252706,8.833947049424751e-7,-0.000003861757249978837,0.000002195649585701176,0.000002458319613651838,-1.23842681887254e-7,0.00000901737621461507,-0.000003161710992571898,0.000009653032066125888,-0.0000028306942567724036,0.000009005831088870764,9.146923218850134e-9,0.000010942871995212045,0.0000025969563921535155,0.000009264066648029257,0.0000022111939870228525,6.530254381686973e-8,-9.742769861986744e-7,-0.000006675535132671939,-0.000003203911774107837,-0.000003444060439505847,-0.0000023708191747573437,0.000001115949544328032,5.889252463475714e-8,-4.270693807484349e-7,0.000001317725491389865,-0.0000026383902422821848,0.0000010433889201522106,1.8245710009523464e-7,0.0000014354809536598623,0.000004203336175123695,0.000001658768496781704,6.893950512676383e-7,0.0000023416355361405294,-0.000008033041922317352,0.000007374636879831087,-0.000007646023732377216,0.000008112931027426384,5.110888992021501e-7,-0.0000038381062950065825,0.0000019791827980952803,-0.000011966791134909727,8.282994201636029e-8,-0.00000741668827686226,-9.075603202290949e-7,-0.000007570427897007903,-0.000009879624485620297,-0.000012811858141503762,-0.000015449104466824792,-0.000011708017154887784,-0.000005085837074148003,-0.000013832926015311386,-0.000002735949237830937,-0.00001657587563386187,-0.000017186963304993697,-0.0000036362621358421165,-0.000018992810510098934,0.000007856337106204592,-0.0000052445338951656595,0.0000016284280945910723,0.0000011946658560191281,-1.574869372689136e-7,0.0000027136939024785534,0.00000893616470420966,0.000007166011528170202,0.000008467269253742415,0.0000052992504606663715,0.000002132426743628457,-0.0000022123847429611487,0.0000036260689739719965,-0.000002493302417860832,0.0000036938338325853692,0.000005352163043426117,-0.000002791706265270477,0.000009312153451901395,-0.000001128120175053482,0.0000035371313060750253,0.00001125568087445572,-0.0000020741836124216206,0.000012978097402083222,2.395776448338438e-7,-0.000004805451681022532,0.000002885989260903443,-0.00001947880446095951,-1.5120596685846976e-7,-0.000016683519788784906,-0.000007136851309041958,-0.000011193683349119965,-0.000014262281183619052,-0.000010445800398883875,-0.000009302071703132242,-0.000006918155577295693,0.000010121770174009725,-0.0000032635687148285797,0.000020283247067709453,-0.0000016351533531633322,0.000010875545740418602,0.000003298426008768729,7.659355674149992e-7,0.000006105294687586138,-0.0000028685344659606926,0.0000018908134507000796,-0.000006559243047377095,-0.0000019376418549654773,-0.000005664392574544763,-0.000003935931545129279,2.3137319260513323e-7,-0.00000724212304703542,-4.4132727339274425e-7,-0.000008509233339282218,-0.000007299334811250446,-0.000008296520718431566,-0.00000775383068685187,-0.000009888088243314996,-6.643310825893423e-7,-0.000009194859558192547,0.0000012217028597660828,-0.0000027014796160074184,-0.000005580995548370993,0.000005727384177589556,-0.000007603383437526645,0.000008626728231320158,6.461232260335237e-8,0.0000024963719624793157,0.00000464674667455256,-0.0000041028060877579264,2.581153353276022e-7,2.623970658532926e-7,-0.000006722665148117812,0.000012226168109918945,-0.000011507665476528928,0.000016527443222003058,-0.000011158333109051455,0.0000042172537177975755,-0.0000065073568293883,-0.000012681543921644334,-0.0000026030968456325354,-0.000012896824046038091,2.7767310939452727e-7,-7.741859917587135e-7,1.6417632764387236e-7,-2.5143609150291013e-7,-0.000006684098025289131,-0.000011173764505656436,-0.000009685449185781181,-0.000015014666132628918,-0.0000022032122615200933,-0.000009355964721180499,-1.9668235040626314e-7,-0.0000019861199689330533,-0.000008735361916478723,2.1953218265480245e-7,-0.000010307759112038184,-0.000009043864338309504,-7.931564027785498e-7,-0.00001973225880647078,0.0000075621992436936125,-0.000012366611372272018,0.000009776677870831918,0.00000898778216651408,0.000007269413345056819,0.0000215316831599921,0.0000028081617529096548,0.00001463560329284519,0.0000013555286386690568,-8.18370210708963e-7,0.000003976112566306256,-0.000005741392214986263,0.000006475459940702422,0.0000016396104456362082,0.0000032634761737426743)\n\
+\n\
+,\n\
+\n\
+new Array(0.000003079756197621464,-0.000007045533948257798,-0.000005584218797594076,-0.000014535641639668029,-0.000009336939911008812,-0.000009002875231090002,-0.000005781885192845948,0.00000253107532444119,-0.000002653517412909423,0.0000052440332183323335,2.61081083863246e-7,-0.000004180499217909528,-0.000001123604306485504,-0.00001392687681800453,-0.000013051283531240188,-0.000008770004569669254,-0.00002213554034824483,0.000006507052603410557,-0.000012553733540698886,0.000008663148946652655,0.0000043216405174462125,-0.000003365547172506922,0.000009666131518315524,-0.0000036936494325345848,0.000008714309842616785,0.000011746677955670748,0.00001345210421277443,0.000016736059478716925,0.000014740943697688635,0.0000011494975069581415,0.0000037885874917265028,-0.000013101015611027833,-0.0000028683189157163724,-0.000007050486146908952,0.000006106271939643193,0.000007029236712696729,0.000013492718608176801,0.000005168927600607276,0.000007264246960403398,-0.000009827103895077016,-0.00000253483312917524,-0.000016045227312133648,-0.000009338813470094465,-0.000011414746950322296,-0.000013670570297108497,-0.000009242834494216368,-0.000013137173482391518,-0.000009129987120104488,-0.000011171797268616501,-0.0000058122036534768995,-0.000011200489097973332,-0.000004491418167162919,-0.00000646262924419716,-0.000006156059498607647,3.744167713648494e-7,-0.000003603997356549371,-0.0000037651313959941035,9.045492106452002e-7,-0.000011486084076750558,-0.0000013693146456716931,-0.000005032851731812116,-0.000007804138476785738,0.000005861616500624223,-0.000010557558198343031,0.000001025069195748074,-0.000010377891157986596,-0.00001071288625098532,-0.000007369986633420922,-0.000011507268027344253,0.0000020538736862363294,-0.000008385878572880756,0.000009365067853650544,-0.000009505479283689056,0.000005552293714572443,-0.000003929438207705971,0.000001957044105438399,0.000007157846994232386,0.000005618156137643382,0.000008056893420871347,0.000004114352577744285,0.000004444902970135445,-0.0000015129552366488497,0.000009714583939057775,0.0000034346257962170057,0.000016184803826035932,0.000013940394637756981,0.000017429176295991056,0.0000162159776664339,0.000018516269847168587,0.000009985662472900003,0.00001675341081863735,-5.474975068864296e-7,0.000010761052180896513,-0.000010513853339944035,0.000006836903139628703,-0.000015860308849369176,0.0000032462696708535077,-0.000019273027646704577,-0.0000022639590042672353,-0.0000182041221705731,-0.00000642911572867888,-0.000009331621185992844,-0.000010752169146144297,-0.000006398724053724436,-0.00001092150341719389,-0.000013978446986584459,-0.0000019830717974400613,-0.000011518278370203916,-7.679133773308422e-7,0.00000411232394981198,-0.000015622126738890074,0.00001020661602524342,-0.000023934420823934488,0.000003655438376881648,-0.000017996595488511957,0.000005628106464428129,-0.000014397246559383348,0.000023149037588154897,-0.000012422369763953611,0.00003686188574647531,-0.000005164674803381786,0.000029579034162452444,-0.000004279142558516469,0.000011904862731171306,-0.000011054169590352103,0.0000026817510843102355,-0.000007146421012294013,7.300119477804401e-7,0.00000716379463483463,-9.475870115238649e-7,0.000011135504792036954,-0.0000028848432975792093,0.000004333846391091356,-0.00001217265071318252,0.00000525720497535076,-0.000030126569981803186,0.000012700701518042479,-0.000037628265999956056,0.000014790118257224094,-0.00002364890133321751,0.000018574042769614607,-0.000005623247034236556,0.00002481713454471901,-0.0000035716459478862816,0.000016272791981464252,-0.00001041365885612322,7.962548806972336e-7,-0.000004117006483284058,0.000002073728182949708,0.000012243942364875693,0.000011528453796927352,0.000014823122910456732,0.00001140338645200245,0.000006756795755791245,0.000006846646101621445,0.000009838297046371736,0.0000024178214061976178,0.000019338038327987306,-0.0000035010277770197717,0.000020548633983707987,-0.00000739722554499167,0.000016951227735262364,-0.000011693926353473216,0.00001124812479247339,-0.000018294836991117336,4.6700102984686964e-7,-0.000020315797883085907,-0.00001102216265280731,-0.000019213801351725124,-0.000017865449990495108,-0.000017930700778379105,-0.00001534548937343061,-0.000010813826520461589,-0.000003645355718617793,-0.000004975350748281926,0.0000019148487808706705,-0.000009077783943212125,-0.000004406498646858381,-0.000008117423021758441,-0.000006159430995467119,0.0000044337293729768135,-0.0000020885263438685797,0.00001081783830159111,-0.0000062843064370099455,0.000009586233318259474,-0.000010778067007777281,0.000013238699466455728,-0.0000024827570541674504,0.000012394535588100553,0.000008359386811207514,-0.0000011964989425905515,0.000011864392945426516,-0.000006844144081696868,0.00001212747156387195,0.000005946681085333694,0.000008978144251159392,0.000013611196663987357,0.0000014777727983528166,0.000004516868557402631,-0.000001135800971496792,-4.0124223232851364e-7,0.000004324659130361397,0.000007783763066981919,0.0000074882691478705965,0.00001351374066871358,0.000005585980943578761,0.000013525607755582314,0.0000072519515015301295,0.00001596198126208037,0.000011330633242323529,0.00001667377546255011,0.000011497910236357711,0.00001142141263699159,0.00001416644317941973,0.0000030732642244402086,0.000019874687495757826,-0.000009063298421096988,0.000012172569768154062,-0.00001685972347331699,-0.000006543353720189771,-0.000007671710591239389,-0.00000897354129847372,0.0000036098872442380525,0.000008662557775096502,-0.000004769496172229992,0.000016347627024515532,-0.000018694472601055168,-0.0000016639005480101332,-0.00001712615448923316,-0.000021529813238885254,-0.00001112355494115036,-0.00001515701660537161,-0.000012410739145707339,0.000004771038675244199,-0.000005557539680012269,0.000004452776920516044,0.00001637774403207004,-0.000011125454875582363,0.000028977285182918422,-0.00000831189208838623,0.000017143711374956183,0.00001176083787868265,0.0000014372878922586096,0.000018619317415868863,-4.095253984814917e-7,0.0000057142856348946225,0.000003475568746580393,-0.0000069119478212087415,0.000007696536158618983,-0.000003389268840692239,0.000012544330274977256,0.000012063308531651273,0.0000075440393629833125,0.00001954874096554704,-0.000004191128937236499,0.000009394925655215047,-0.000002214434289271594,-0.000004688718945544679,0.000007948830898385495,-0.000009118418347497936,0.0000011970444120379398,-0.0000056666431191843,-0.00002026224865403492,-0.0000019875728867191356,-0.00002999846219609026,-0.000003943970114050899,-0.000012564681128424127,-0.000010138632205780596,0.00001746085581544321,-0.000013649312677443959,0.000027959269573329948,-0.000010523734999878798,0.000012849625818489585,0.000001351437390439969,-3.670769785912853e-7,0.00001497308949183207,0.000002791178758343449,0.000012750263522320893,0.000013458100511343218,4.066057215368346e-7,0.00002175646659452468,0.0000032445300348626915,0.00001627408346394077,0.000014102012755756732,3.48547814610356e-7,0.000009687917554401793,0.0000011480459534141119,-4.2791418763954425e-7,0.000019152239474351518,-6.341405196508276e-7,0.000018948061551782303,0.0000036513481518340996,-0.0000062531571529689245,0.000009545680768496823,-0.000024813129130052403,0.000016652278645779006,-0.000018440034182276577,0.000017343440049444325,-3.587248897929385e-7,0.000010243666110909544,0.00000628847419648082,-2.8749840907948965e-7,-0.000003840634690277511,-0.000006959578513487941,-0.000013347347703529522,1.2497545753831218e-7,-0.000008933499884733465,0.000012038509339618031,0.000004157961939199595,0.00000892525349627249,0.000014358175576489884,-0.0000017458401089243125,0.000015531888493569568,0.0000011401114079490071,0.000013105558537063189,0.000012283217984077055,0.000013530539945350029,0.000011530215488164686,0.00001159277690021554,5.350490255295881e-7,0.0000063530819716106635,-6.013257234371849e-7,0.0000031688239232607884,0.000008902071385819,-0.0000030289324968180154,0.0000104135970104835,-0.000009928397048497573,0.000004485893896344351,-0.000005377505658543669,-0.0000013817983699482284,0.0000027258081445324933,-0.00001797814547899179,0.000005427595169749111,-0.00003357703462825157,0.00001153597349912161,-0.000016713764125597663,0.00001749700095388107,0.00001582923869136721,0.000018839591575670056,0.000024307311832671985,0.000028232167096575722,0.000012363442692731041,0.00003313900015200488,4.921504341837135e-7,0.000008201181117328815,-0.000004780452854902251,-0.00002234796374978032,-3.537929842423182e-7,-0.000019479883121675812,0.0000035339492114871973,0.0000019553631318558473,-0.000006310787284746766,0.0000048780952965898905,-0.000016523783415323123,-0.000006488742656074464,-0.00000970436303759925,-0.000006401556220225757,0.0000040938898564490955,-0.0000037819918361492455,0.0000036536346215143567,-0.000015109381820366252,-0.000009658116141508799,-0.000016028870959416963,-0.000012950125892530195,2.9602941253870085e-7,-0.0000048607880671625026,-0.0000029371478831308195,-0.000002008118826779537,-0.000014304634532891214,0.000009825911547522992,0.000006691116141155362,0.00003514895070111379,0.00003057632056879811,0.00003202812513336539,0.0000256546882155817,0.000005390306341723772,0.00002182609387091361,0.000009715551641420461,0.000023998347387532704,0.000029058137442916632,0.000014241700228012633,0.000018586209989734925,0.000014010002814757172,0.0000015582974128847127,0.000022730857381247915,-4.4055727244085574e-7,0.000007286446361831622,-0.000004155114311288344,-0.000015673245798097923,-0.0000013827599332216778,-0.000014323575669550337,0.000014420313164009713,-0.000004594429810822476,0.00001533803515485488,-0.000003257871640016674,-0.0000015057372593219043,-0.000002804571522574406,-0.000008264756615972146,-0.000002011342530749971,-1.9574802934130275e-7,-0.0000025387560071976623,0.0000055548180171172135,-1.6860264295814886e-8,0.0000012650032203964656,0.000004872145836998243,-0.0000017890718027047114,0.000006571066933247494,0.000007390759037662065,0.0000020470258732530056,0.000013906128515372984,-0.000004494631411944283,5.931532598424383e-8,-0.000005363530362956226,-0.000019025612346013077,-9.746487705797335e-8,-0.000022788828573538922,0.000005759361101809191,-0.000019057089957641438,0.000006455238690250553,-0.000020634686734410934,1.0177009812650795e-7,-0.000019465514924377203,-0.000004779817118105711,-0.000005687471002602251,-0.000001974281985894777,0.000007814288437657524,6.800347023272479e-7,0.000006204283181432402,0.0000022189678929862566,0.000003214903017578763,0.000011109933439001907,0.000014264518540585414,0.000020891659005428664,0.000024231410861830227,0.000021565774659393355,0.00002063306419586297,0.000018980705135618336,0.000019460489056655206,0.000016109910575323738,0.00002946244967461098,0.000004959099442203296,0.000031635663617635146,-0.000011636377166723832,0.000012494529073592275,-0.000017649961591814645,-0.000009775249054655433,-0.000009684803444542922,-0.000012299901754886378,-0.0000045431584112520795,-0.000004680217443819856,-0.000009361619959236123,-0.000006417827080440475,-0.000009478884749114513,-0.000008635995982331224,-0.000002210264710811316,-0.0000013944970760348951,-0.0000027300702640786767,3.419471852339484e-7,-0.000005760077328886837,-0.000005887148290639743,0.000009123318704951089,-0.0000018179079006586107,0.000034976685128640383,0.00000800656562205404,0.00004315484329708852,0.0000026375134893896757,0.000026162653739447705,-0.000009777288141776808,0.000008337022336490918,-0.0000043383224692661315,0.000008042879017011728,0.000011266129149589688,0.000007552520855824696,0.000007821462531865109,-0.000010834794011316262,-0.0000071405156631954014,-0.000023741020413581282,0.0000010096468940901104,-0.000008777444236329757,0.000024047909391811118,0.00001084489394997945,0.000021773150365334004,0.000009878775927063543,-0.000002468845650582807,0.0000019583242192311445,-0.000011829857612610795,0.000007180449301813496,0.0000019898930077033583,0.00002007572038564831,0.000023562599380966276,0.000022493708456750028,0.00003725415081134997,0.000009227091140928678,0.000025104887754423544,-0.000004577635081659537,-0.0000057226006902055815,-0.000007426877800753573,-0.000013954405403637793,-0.000007396818546112627,0.000010363718502048869,-0.000005682496066583553,0.000023153961592470296,0.000005215436885919189,-5.851776450072066e-7,0.000008301271009258926,-0.00002839875378413126,-0.000008671786417835392,-0.00002114908602379728,-0.000016385081835323945,0.000010340518201701343,-0.000003332814912937465,0.00001631920167710632,-0.00000240609824686544,-0.00001683917253103573,-0.000019458128008409403,-0.00004172520129941404,-0.00002798895184241701,-0.00002957127071567811,-0.00002257167943753302,-0.0000011277380735918996,-0.000006745275186403887,0.000029834796805516817,0.00001443145356461173,0.00004889423871645704,0.000019520353816915303,0.000028781312721548602,0.00001101738143916009,-0.000002304964709765045,0.000015570509276585653,0.000006559727353305789,0.00002491160194040276,0.0000246861109189922,0.00002092513932439033,0.000005571321253228234,0.000019767994672292843,-0.000017234433471458033,0.000029364162401179783,-0.000006860925623186631,0.00003287310028099455,0.000014419410035770852,0.00002570765900600236,0.000020948997189407237,0.000014982444554334506,0.00001133622572524473,0.000005069058261142345,-0.000007599034233862767,-1.9249199567639153e-7,-0.00002135621070920024,4.192748974674032e-7,-0.00001811559559428133,0.000005204026820138097,-0.00000684716133037,0.000006793804459448438,-0.000007115300377336098,-9.464126833336195e-7,-0.000015396170056192204,-0.000005022252480557654,-0.0000057560728237149306,0.00000310011228066287,0.00001830806468205992,0.000005690162652172148,0.000025002680558827706,-0.0000018066829170493293,0.000016883142961887643,-9.190588343699346e-7,0.00001677891305007506,0.000008744715159991756,0.000017492679035058245,0.000009262767889595125,0.000009641324140829965,-0.000007944317985675298,0.0000026682307634473545,-0.000028819362341891974,-5.567349248281062e-9,-0.000027849970138049684,2.9275554425112205e-7,-0.000011288384484942071,8.639408122235182e-8,-0.000010010178812080994,-0.0000057664710766403005,-0.000018038146663457155,-0.000005938334197708173,-0.000011676184840325732,0.00000538736594535294,6.286371672103996e-7,0.000010601774192764424,0.00000795031610323349,0.000006878713065816555,0.000014448815818468574,0.0000053991193453839514,0.000019121212972095236,0.0000037922372939647175,0.00002377148666710127,0.000004110886493435828,0.000028523567380034365,0.000009884578503260855,0.000025298351829405874,0.000009547493391437456,0.000019423143385211006,0.0000016244050584646175,0.00001698599044175353,-0.0000035492291772243334,0.000010943429515464231,-0.000004347200501797488,0.0000019216581677028444,-0.000004650058144761715,-0.000010098739949171431,-0.000013551755728258286,-0.00002283834692207165,-0.000026392148356535472,-0.000012812127351935487,-0.000015902620361885056,0.00001567458821227774,0.000012308804798522033,0.00002283371395606082,0.000024552044123993255,0.000011854270269395784,0.00002660317659319844,0.000012907260497740936,0.00003121679401374422,0.000015185296433628537,0.00002326429785171058,-7.34506613753183e-7,0.000012328557204455137,-0.000023603226509294473,0.000014685990208818112,-0.00003268428554292768,0.000009220393621944822,-0.00002234849307569675,-0.000007605170594615629,-0.000011407089004933368,-0.000006624821708101081,-0.000009982724805013277,0.00001263109425053699,0.000003306656026325072,0.00002181891250074841,0.000024524020773242228,0.000007929559615149628,0.000019206416254746728,-0.000012103923836548347,-0.000002410376964689931,-0.000014605987416871358,-0.000003715801540238317,-0.000006302369911281858,0.000010128199392056558,-0.000007889429980423301,0.000014167191693559289,-0.00001256161522178445,0.0000057639072110760026,-0.000005861424597242149,-9.619938055038801e-7,0.00000681865458318498,0.0000016880826478882227,0.000011544870176294353,0.0000037514641917368863,-2.56049020208593e-7,0.0000014714703411300434,-0.000014694560377392918,0.000007349543466261821,-0.000010221549928246532,0.000018233196897199377,-7.090650342433946e-7,0.00002102341750287451,-0.000006131372174422722,0.000020034074623254128,-0.000009446019248571247,0.000019742274162126705,0.0000019139167761750286,0.000014728439964528661,0.000014092046512814704,0.000003048159214813495,0.000020496132492553443,-0.000008900403372535948,0.000023662334569962695,-0.000005791300736746052,0.000022625017663813196,0.0000075333286986278836,0.000012899877219751943,-0.0000017856511931313435,-0.000006809377737226896,-0.000028199405278428458,-0.00001746432280924637,-0.00003172568540321663,-0.000006750207376171602,-0.00001866254024207592,-0.0000010079621688419138,-0.000013011737792112399,-0.00000956672738539055,-0.000004242810973664746,-0.000002119594682881143,0.000006584605671378085,0.00002223004776169546,0.000006579176442755852,0.000033968506613746285,0.000009475802471570205,0.000025046378141269088,0.000017056823708117008,0.000005184896053833654,0.000012699285434791818,-0.000006306862815108616,0.000008491949301969726,0.000004087344223080436,0.000018048402125714347,0.000011509853720781393,0.000021365476641221903,-0.000005565815172303701,0.000006844592917332193,-0.000022027259547030553,-0.000005569290806306526,-0.00002120573481079191,-0.000002695209104786045,-0.00001900665483844932,4.4863107007131475e-8,-0.000016556557966396213,-0.000010590822967060376,-0.0000065892354541574605,-0.000017760654372978024,-8.225159149333194e-7,-0.0000025858541903289733,0.0000011124238881166093,0.000020903720724163577,0.00001814771349017974,0.000027480426069814712,0.00004084043393959291,0.0000177144720510114,0.00004253354563843459,0.000010023189133789856,0.000033290092687821016,0.0000067583277996163815,0.000030763236281927675,-0.000003997994099336211,0.00001618833266547881,-0.000014886847566231154,-0.000012435123608156573,-0.00001306923968513729,-0.00002227741242677439,-0.000013466869859257713,-0.000015753304978716187,-0.000023232454623212107,-0.00001852498644439038,-0.00002162655619031284,-0.0000210459329537116,-0.00000750824165152153,-0.000011541855201357976,0.000005184509518585401,-0.0000010159284329347429,0.000017868627764983103,0.000005208628408581717,0.000021801406546728685,0.000004908810751658166,0.00000935355910769431,0.000002482380750734592,0.0000020374698124214774,0.000012640602108149324,0.0000043602076402748935,0.000021848769392818213,-0.000003835069946944714,0.000009052029781742021,-0.000015977773728081957,-0.00000437899689131882,-0.000015400755728478543,-0.0000011541671938175568,-0.000007877672032918781,-8.166315268454127e-8,-0.000005477804279507836,-0.0000075803836807608604,-0.000016252544810413383,-0.000015123989214771427,-0.00003125966031802818,-0.000023901306121842936,-0.00002719650547078345,-0.00002844541631930042,-0.000010009978723246604,-0.000019015275029232726,-0.000002046205736405682,3.0927870398045343e-7,0.000004475987225305289,0.000018435192032484338,0.000017293778000748716,0.000025111336071859114,0.00002306950045749545,0.000019393164620851167,0.000024574750568717718,0.000011862235623993911,0.00003010806358361151,0.000008740132216189522,0.000028634845875785686,0.000012442340448615141,0.00002007111288548913,0.000022071695639169775,0.00001786083885235712,0.000019058017642237246,0.000014229030057322234,-0.000005833061550220009,-0.0000042547835619188845,-0.00002718412179092411,-0.000025061946871574037,-0.00003152936915284954,-0.00003277888026786968,-0.00003887666389346123,-0.000034648659493541345,-0.000050274011300643906,-0.00003677815038827248,-0.00004247226388542913,-0.00002903110726037994,-0.000020898798538837582,-0.000010089145689562429,-0.000010234728506475221,0.000006811966159148142,-0.000005313822384778177,0.0000156254736793926,0.000009165262781607453,0.00002019751991610974,0.00002104634950228501,0.000026244979380862787,0.000020415984181454405,0.00003609451960073784,0.000021696680050808936,0.0000403553967771586,0.00002973491973534692,0.00002806495649565477,0.000031540897907689214,0.000004485058980208123,0.000023197349946713075,-0.00001706145121715963,0.000012635712664632592,-0.0000292308959615184,0.0000058418190747033805,-0.000030073091693338938,-1.1923079057396535e-7,-0.00002137258525181096,-0.000009712542123452295,-0.000012220786629768554,-0.000016407961084041744,-0.000012456388503778726,-0.000015059623365232255,-0.000008678027370478958,-0.000009216743819706608,0.000019928700567106716,0.000004287425326765515,0.00004467799226404168,0.00002016187136177905,0.000024435452360194176,0.000019308243281557225,-0.000007724876013526227,0.000009188834155793302,-0.0000019114108908979688,0.000012105027053621598,0.00002055629374808632,0.000020270883396733552,0.000018115131751983427,0.00001163760225608712,-0.00001510960100858938,-0.000021670934074791148,-0.00005311196582624689,-0.00005914847133681178,-0.00005459808380692266,-0.00006084770575398579,-0.000027462207071948797,-0.00003233471579733305,-0.000024315484552062117,-0.00001873439396149479,-0.00003443852983764373,-0.00001817194242903497,-0.000014029920748725999,-0.000009114837666857056,0.000012373760910122655,-0.000003239905254304176,0.000010735915566328913,-5.519689239008585e-8,-0.0000018883721395468456,0.00000311321650769969,-0.0000017775488458937616,-0.000006557762844749959,0.000015179120964603499,-0.00000455604003946064,0.000022281594283413142,0.000017691370885586366,-0.0000038258062886598054,0.000012033361599605996,-0.000019834642444038764,-0.000010000385373132303,0.000010684007975214627,0.000009171661986329127,0.00004517719935392961,0.00004714382521342486,0.0000477431713079568,0.00005181042797630653,0.000026211499061901122,0.00002550805947976187,0.000003884897068928694,0.00000662306683807401,0.000017071641195798293,0.00003120501423836686,0.00004284991882741451,0.00006512828258564696,0.000018203174477093853,0.00004200913826934993,-0.000014842201380815823,0.000003909772658516886,0.000008061370863288175,0.000021963762264931574,0.00003848099004244432,0.00005715851148124784,0.000043984284275211394,0.00006707866123178974,0.000052957908337702975,0.00006693915202049538,0.000049615926400292665,0.00005375961336540058,0.0000309937859128695,0.00003500019374769181,0.000029505476049962454,0.000029334600185393356,0.000023507789592258632,0.00001465066452510655,-1.0310985487649305e-7,-0.000006374973509082338,-0.000008675759090692736,-0.000009088520528166555,-0.000021084319087094627,-0.000024063272576313466,-0.0000631984366918914,-0.0000610212046012748,-0.00009105104982154444,-0.00007528847345383838,-0.00008082981366897002,-0.00007128059951355681,-0.00007338736031670123,-0.00008348179107997566,-0.00009302627586293966,-0.00010063370427815244,-0.00010311997175449505,-0.00009475899423705414,-0.00006107790977694094,-0.00005710756522603333,-0.0000045567167035187595,-0.000016807351130410098,-0.000008728594366402831,-0.000024047727492870763,-0.000054534481023438275,-0.00006562787166330963,-0.00006661251245532185,-0.0000764136275392957,-0.00004220175833324902,-0.00005006900755688548,-0.000025705265215947293,-0.000036733610613737255,-0.00002846791539923288,-0.0000510317986481823,-0.000025806351914070547,-0.00004952012750436552,0.000005754276116931578,-0.0000016414161336797406,0.0000425573016400449,0.00004579619053401984,0.00004338672079029493,0.000038616690289927647,0.000029018654458923265,0.000013091679647914134,0.00003744493369595148,0.000019917650206480175,0.000044882068323204294,0.00003138934698654339,0.00002662312181200832,0.000016957039406406693,0.000012313065781199839,0.000002333392103537335,0.00001934301690198481,0.0000014684613915960654,0.000014003498108650092,-0.000012435083590389695,-0.00001898372829600703,-0.000038960213714744896,-0.00003305000063846819,-0.00003180839848937467,-0.000003220078497179202,0.000009098755072045606,0.00001692907972028479,0.00001644175426918082,-0.0000025018243832164444,-0.000015483534298255108,-0.00001627800338610541,-0.000018092352547682822,-0.000013463391951518133,0.0000019396563857299043,-0.00003174218363710679,-0.0000160226827574661,-0.00005453410267364234,-0.00004583518239087425,-0.000040986185922520235,-0.000035656023101182655,-0.00001567927210999187,-0.000013575969205703586,-0.000018654585801414214,-0.000008182525562006049,-0.000031149891583481804,0.000004068513590027578,-0.000022341226213029586,0.000019159466319251806,-0.00001293922196055064,0.000003855884187942138,-0.00003387294782442041,-0.00002583240348030813,-0.000057961613492807373,-0.000027385123757994734,-0.000033527012419654056,0.0000016514985645699198,0.00003071745595661923,0.000041599003452574834,0.00007069997809594497,0.00007186799484770745,0.00005709023025701754,0.00006439198477892205,0.000029486905987141654,0.000029499340598704293,0.0000209078880288871,0.000017297805243288167,0.000013292264156916644,0.000027950874937232584,-0.0000013293877145770239,0.000019151208107359707,-0.000006482500339188846,-0.0000067296255110704806,-0.000007697241926507559,-0.000014276416550274007,0.0000016702936136425706,0.000015172436178545468,0.00004288800846552476,0.00006377120007527992,0.00006793632928747684,0.00007132426253519952,0.00002048872920568101,0.000012990089089726098,-0.000048709236580180004,-0.000047732733946759254,-0.00007167227886384353,-0.00006812359788455069,-0.000064849853515625,-0.00008061769040068612,-0.00006814341759309173,-0.00010230079351458699,-0.00008719259494682774,-0.0001180777617264539,-0.00008941548003349453,-0.00011921609257115051,-0.00003779408143600449,-0.00008811964653432369,0.000030435225198743865,-0.000025285318770329468,0.00004108916618861258,0.000014433621799980756,0.00001024217635858804,-0.000005194896857574349,0.000005180342213861877,-0.000034165761462645605,0.000023372396753984503,-0.000010869540346902795,0.00002539250453992281,0.00003357906825840473,0.000018433291188557632,0.00003062555697397329,0.000026741767214844003,-7.219643407552212e-7,0.00003656093031167984,-0.000001136163632509124,0.00003117337473668158,0.000021541796741075814,0.0000293058437819127,0.000043496882426552474,0.000037782541767228395,0.00007139385706977919,0.0000416023212892469,0.00009288021101383492,0.00005254682037048042,0.00009893468813970685,0.00006880204455228522,0.00010826986544998363,0.00005927990423515439,0.00011457254731794819,0.00005459919702843763,0.00010707223555073142,0.000094101473223418,0.00010680824925657362,0.00011209934746148065,0.00010920516069745645,0.000056838165619410574,0.00008033691119635478,-0.0000068494009610731155,0.000025022674890351482,-0.00002701147059269715,-0.000019174229237250984,-0.00003586516322684474,-0.00004372096373117529,-0.0000652634262223728,-0.00007542935782112181,-0.00009048141509993002,-0.00010400706378277391,-0.00006278631190070882,-0.00007421393820550293,0.0000025940585146599915,-0.000008294062354252674,0.0000325960099871736,0.000008096650162769947,0.00003069816739298403,-0.0000037499498830584344,0.000056778833823045716,0.000025616709535825066,0.00007991064921952784,0.00004987000284017995,0.000045740198402199894,0.000019337981939315796,0.000004544684998109005,-0.000008798326234682463,0.000008757365321798716,-0.0000021096132059028605,0.00001856036215031054,0.000004826958502235357,0.000005461828550323844,0.000007710723366471939,0.000010949572242680006,0.000018963972252095118,0.000044504369725473225,0.00002303562177985441,0.00004023867586511187,0.000010020921763498336,-0.000025972738512791693,-0.00001586198777658865,-0.00007700323476456106,-0.00004665309825213626,-0.000055274140322580934,-0.000052602150390157476,-0.0000061497439673985355,-0.00001668721961323172,0.000008728478860575706,0.000013330021829460748,-0.0000029871407605241984,-0.000004125208306504646,-0.0000026293639621144393,-0.00002612005664559547,0.0000065824074226839,-0.000017083671991713345,-0.0000046906184252293315,-0.00001556396091473289,-0.00002643541301949881,-0.00003281334284110926,-0.000039624956116313115,-0.00004113918112125248,-0.00007187780283857137,-0.00006438163109123707,-0.0001236143143614754,-0.00011173521488672122,-0.00012688638526014984,-0.00011649612861219794,-0.00006469413347076625,-0.00005987553595332429,-0.000014351888239616528,-0.000007210273906821385,-0.000016002846678020433,0.000014015030501468573,-0.000009058734576683491,0.00003463930625002831,0.000044094260374549776,0.00006039829531800933,0.00007179840031312779,0.00006237921479623765,0.000030082985176704824,0.000039645121432840824,-0.0000010439434845466167,0.000020206653061904944,0.00001813493508961983,-8.59565261634998e-7,0.000021399320758064277,-0.000031689640309195966,0.000003812285285675898,-0.00003198267222614959,0.00001682609217823483,0.0000013957578630652279,0.00004154344787821174,0.000013956621842226014,0.00004097841519978829,9.028317435877398e-7,0.000013097586816002149,-0.000017888380170916207,-0.000026429661375004798,-0.000042822484829230234,-0.00003054921762668528,-0.00004142971010878682,-0.000001531986526970286,-0.00001933212115545757,-0.0000132069308165228,-0.000039306974940700457,-0.00004899566920357756,-0.000061745238781441,-0.000037255726056173444,-0.000020425879483809695,-0.000015082103345775977,0.000013367198334890418,-0.00003093281702604145,-0.000012532468645076733,-0.000054078089306131005,-0.00003815422678599134,-0.00006230008148122579,-0.000032039140933193266,-0.000044264997995924205,9.833966032601893e-7,-5.77034370508045e-7,0.000045075670641381294,0.000020452816897886805,0.00004831075420952402,0.000016518073607585393,0.00002406950807198882,0.000028525224479380995,0.000029365415684878826,0.00002138098716386594,0.000015089812222868204,-0.00003114295031991787,-0.00005498417158378288,-0.00005744315421907231,-0.00008467251609545201,-0.000022096755856182426,-0.000038503785617649555,0.000013987733836984262,-0.000011090352927567437,0.000002372082235524431,-0.000031918280001264066,-0.000031449904781766236,-0.000032338593882741407,-0.00003993864811491221,-0.000005635174602502957,-0.00003002981611643918,-0.000012256874470040202,-0.00002950612542917952,-0.000029784107027808204,-0.000014617784472648054,0.00001263211561308708,0.00002073836003546603,0.000060902915720362216,0.00002685291474335827,0.00002972178117488511,0.000003865030521410517,-0.000011656133210635744,-0.0000019173003238392994,0.000016705547750461847,0.000012224107194924727,0.000058518213336355984,0.000023397415134240873,0.00006208814738783985,0.000014334675142890774,0.000048294361477019265,-0.000011518812243593857,0.00003706568531924859,-0.000009435871106688865,0.00004311736120143905,0.000036349370930111036,0.00005881915785721503,0.0000780311384005472,0.00005478940511238761,0.00009043554018717259,0.00005104908996145241,0.00008298666216433048,0.00006888940697535872,0.00006298254447756335,0.00007044045923976228,0.000054575710237259045,0.00005354037421057001,0.000060902479162905365,0.00005536368189495988,0.00004294863174436614,0.00005029814929002896,0.000005725249138777144,0.000005086803867015988,-0.000010700321581680328,-0.00004252125654602423,-0.000021980682504363358,-0.000058042256569024175,-0.00005544697341974825,-0.000054441989050246775,-0.00008118953701341525,-0.00004292158700991422,-0.00007777901191730052,-0.000035333177947904915,-0.00007716101390542462,-0.00005428513395600021,-0.00008297056774608791,-0.0000670280642225407,-0.00005144996976014227,-0.000014605345313611906,-0.00000779076071921736,0.0000432292181358207,-0.00003144462971249595,0.000004673118382925168,-0.00008541214629076421,-0.00005519864134839736,-0.00006174968439154327,-0.000014400528016267344,0.000012012095794489142,0.000047868241381365806,0.000030405124562093988,0.00002368395507801324,0.000001922777300933376,-0.000011832757991214748,0.0000026430798243382014,0.000012279679140192457,0.00003241767262807116,0.000024375991415581666,0.00003544256105669774,-0.00002144496829714626,0.0000066679922383627854,-0.00006405106250895187,-0.000002957086053356761,-0.00005756971222581342,0.000015621615602867678,-0.00003508651934680529,0.00001469517155783251,-0.00004308757706894539,-0.000010895128070842475,-0.0000762795825721696,-0.00001937178421940189,-0.00009255228360416368,-0.000009577730452292599,-0.00007198793900897726,-0.00001064251409843564,-0.00004143540354561992,-0.000017639989891904406,-0.00002866461181838531,-0.000003194289547536755,-0.00001008950584946433,0.000025677494704723358,0.0000337935853167437,0.00002025209141720552,0.00004816519140149467,-0.00003013358946191147,0.000005368628990254365,-0.00005807228444609791,-0.000014198250937624834,-0.000024669036065461114,0.00002980853787448723,0.00001305967180087464,0.0000615404496784322,0.000003169276169501245,0.000039045036828611046,-0.000026213239834760316,0.000006035425030859187,-0.000030444816729868762,-0.000012050156328768935,-0.000019078106561210006,-0.000029675369660253637,-0.000031799194402992725,-0.000055997508752625436,-0.0000721602700650692,-0.00009207191760651767,-0.00010938722698483616,-0.00013436700101010501,-0.00012641138164326549,-0.0001619315444258973,-0.00012095387501176447,-0.00015179513138718903,-0.00009973258420359343,-0.00012022676673950627,-0.00008012935722945258,-0.0001016552560031414,-0.000054741190979257226,-0.00008083759166765958,-0.00000593823006056482,-0.00002722652061493136,0.000044529537262860686,0.000031446641514776275,0.00007436021405737847,0.00005673569467035122,0.00008370971045223996,0.000051376631745370105,0.00005631861131405458,0.0000279171799775213,-0.0000013176068023312837,0.0000014861398085486144,-0.000035487813875079155,-0.00001107328716898337,-0.000028035083232680336,-0.000009004481398733333,-0.000013428236343315803,0.000007951015504659154,-0.000012215399692649953,0.000026802747015608475,-0.000010574289262876846,0.00001737370803311933,0.000018003340301220305,5.736237653763965e-7,0.00006992507405811921,0.00002058242716884706,0.00009748925367603078,0.000049604932428337634,0.00007757225830573589,0.0000480062335554976,0.000046539622417185456,0.000040741320844972506,0.0000359866680810228,0.000044753498514182866,0.00003149465555907227,0.00003402285074116662,0.000016869544197106734,0.000012217524272273295,0.000014416894373425748,0.00001694033562671393,0.00002633786789374426,0.00003387614560779184,-0.0000031246981961885467,0.000006746628059772775,-0.00006808514444855973,-0.0000424836362071801,-0.00007945387915242463,-0.000040809682104736567,-0.00004131623427383602,-0.000006584262791875517,-0.000027186131774215028,0.000009418003173777834,-0.00001379865534545388,0.000029131773771950975,0.00003061928873648867,0.00005724620132241398,0.00004902021464658901,0.0000633458184893243,0.000014305432159744669,0.000058562731283018366,-0.000027793557819677517,0.000046056477003730834,-0.000024998287699418142,0.00002725913145695813,0.000025247172743547708,0.000039892023778520525,0.00004112611713935621,0.000050569287850521505,-0.000014535172340401914,0.0000067802211560774595,-0.00004382204497233033,-0.000026799832994583994,-0.000016543841411476023,-0.0000244089933403302,-0.000021907017071498558,-0.00005314009467838332,-0.00005711687481380068,-0.00007939628267195076,-0.00006287739233812317,-0.00005297015013638884,-0.000055925644119270146,-0.0000416878356190864,-0.000044781805627280846,-0.00005816018165205605,-0.000014692141121486202,-0.000038615464291069657,0.000015342511687777005,-0.0000019092221918981522,0.00004032142896903679,0.000013651363587996457,0.0000466067940578796,0.000017852991732070222,1.3027107570451335e-7,0.0000011722290764737409,-0.0000434878165833652,-0.000021812964405398816,0.000001429963049304206,0.00001604595672688447,0.00008827573037706316,0.00010605066927382722,0.00011196303967153654,0.00014238811854738742,0.00007170428580138832,0.00009203513036482036,0.00005030815373174846,0.00005320513810147531,0.00006844555173302069,0.00007133291364880279,0.00004482951044337824,0.000057309403928229585,-0.00004976908894605003,-0.000016540670912945643,-0.00012368492025416344,-0.00006704733095830306,-0.00012687843991443515,-0.00008667777001392096,-0.00010667263995856047,-0.00010933732846751809,-0.0000810641358839348,-0.0000843552261358127,-0.00003626633406383917,-0.000011461594112915918,-0.000003800034392043017,0.000010872363418457098,-0.00001115972099796636,-0.000024820123144309036,-0.000016356738342437893,-0.00003160407504765317,0.000021647872927132994,0.00000160533340931579,0.000044044452806701884,0.000006865130671940278,-0.000021276600818964653,-0.00004543062095763162,-0.0001009973420877941,-0.00010950845899060369,-0.00008220582094509155,-0.00012713325850199908,-0.000009265588232665323,-0.00009223717643180862,0.00001942663948284462,-0.00004278800042811781,0.000014971864402468782,-0.000015608507965225726,0.000012556516594486311,-0.00001997295839828439,-0.00001677776890574023,-0.00004871925193583593,-0.00008439271186944097,-0.00009608511754777282,-0.00012681048247031868,-0.00012660387437790632,-0.00009491848322795704,-0.00009672807937022299,-0.000038584679714404047,-0.00004915422323392704,-0.000011407275451347232,-0.00003619683411670849,0.000020544717699522153,-0.000004877408628090052,0.000057512861530994996,0.00005082879215478897,0.000023422402591677383,0.00003235676922486164,-0.00007216427911771461,-0.000044125583372078836,-0.00013907243555877358,-0.00007763699250062928,-0.0001589777530170977,-0.00009526571375317872,-0.0001702349109109491,-0.00015039237041492015,-0.00018199183978140354,-0.00018227424880024046,-0.0001656827371334657,-0.00014178658602759242,-0.00009661682270234451,-0.00006982849299674854,-0.000024176955776056275,-0.000023143686121329665,-0.000021666413886123337,-0.000022818921934231184,-0.00004684945088229142,-0.00003441434455453418,-0.000010103430213348474,0.0000032032912713475525,0.00006675547047052532,0.00008603621245129034,0.00010718784324126318,0.0001322274620179087,0.00010200230462942272,0.00010818237205967307,0.00009606129606254399,0.00009692880848888308,0.00011241745960433036,0.00014431362797040492,0.00011704491771524772,0.00014793468290008605,0.00008428628643741831,0.000059725869505200535,0.00006823895819252357,0.00001569482628838159,0.00011798230116255581,0.00008751583663979545,0.00017217642744071782,0.00014552491484209895,0.00014642594032920897,0.00009886995394481346,0.0000820255299913697,0.0000389802225981839,0.0000945738865993917,0.00006543559720739722,0.00017948643653653562,0.00013175995263736695,0.000207908742595464,0.00013581017265096307,0.0001348408404737711,0.00007278104749275371,0.000048818663344718516,0.000009134634638030548,0.00001749626790115144,-0.000027329901058692485,0.000009467278687225189,-0.000057572869991417974,-0.000054372627346310765,-0.00011624617764027789,-0.00017348630353808403,-0.00019637461809907109,-0.00020912816398777068,-0.00020959861285518855,-0.00009173363650916144,-0.00011212546814931557,0.000036042500141775236,2.3283064365386963e-8,0.00005594479080173187,0.00004100982187082991,0.000023640137442271225,0.00002810826299537439,0.000004636331141227856,0.0000017502184164186474,-0.0000016116446204250678,-0.000008960413651948329,-0.00001896120375022292,-0.000017643205865169875,-0.00007192717748694122,-0.00006774204666726291,-0.00011022477701772004,-0.0001006519451038912,-0.00004939598875353113,-0.000025064480723813176,0.00006950402894290164,0.00008736859308555722,0.00013112671149428934,0.00011726255615940318,0.00009332889749202877,0.00006975586438784376,-0.000007504016139137093,-0.0000017577287962922128,-0.0000711821558070369,-0.00003985501825809479,-0.000008704300853423774,0.00001219889509229688,0.00010966281115543097,0.00010688483598642051,0.0001459826744394377,0.00014799759082961828,0.00012049888755427673,0.00015319800877477974,0.0001315882836934179,0.0001693947851890698,0.00013466438394971192,0.00013570465671364218,0.00003885695696226321,0.000019557321138563566,-0.0000759758404456079,-0.00006659913924522698,-0.00009499234874965623,-0.00006112013215897605,-0.00007698169065406546,-0.000060936577938264236,-0.00006680353544652462,-0.00007666349119972438,0.000022440679458668455,0.000004864556558459299,0.00012551239342428744,0.00011123484728159383,0.00006374843360390514,0.0000694217742420733,-0.00006522072362713516,-0.000034445423807483166,-0.000056505523389205337,-0.00003903900505974889,0.000005489092927746242,-0.000015380668628495187,-0.000013067590771242976,-0.000028134491003584117,-0.000019961922589573078,0.00001111600886360975,0.00003626819307100959,0.00007595207716803998,0.00005631609747069888,0.000051114606321789324,0.000038434911402873695,4.5267279347172007e-7,0.000059726120525738224,0.00003945884600398131,0.00009166861127596349,0.00010432150884298608,0.00008447789878118783,0.00009268712892662734,0.00006632134318351746,0.000032154312066268176,0.00006209970160853118,3.4997174225281924e-7,0.00007809824455762282,0.0000330825278069824,0.00011409471335355192,0.00009687244892120361,0.00010992292664013803,0.00010118685167981312,0.000043402149458415806,0.00003681848829728551,0.00002333584961888846,0.00002146193219232373,0.00008825006807455793,0.00008878691733116284,0.00010468476102687418,0.00011617453128565103,0.000010868432582356036,0.00003768633177969605,-0.0000832886653370224,-0.00006463406316470355,-0.00009575632429914549,-0.00009790592594072223,-0.00008047091250773519,-0.00008127279579639435,-0.00011930312030017376,-0.00010817989095812663,-0.00019761906878557056,-0.00018406282470095903,-0.00025037425803020597,-0.00022929937404114753,-0.00028175031184218824,-0.00026143481954932213,-0.00030704058008268476,-0.00032354859285987914,-0.00028720812406390905,-0.0003314026980660856,-0.00023685301130171865,-0.0002623709151521325,-0.00020041537936776876,-0.00023299336316995323,-0.0001476819161325693,-0.0002481380943208933,-0.00007395316060865298,-0.00019933024304918945,-0.00001707856063148938,-0.00007966350676724687,0.00003398122498765588,0.000010577972716419026,0.00004213210195302963,-0.000016719475752324797,-0.00003703224865603261,-0.00011134900705656037,-0.00007891521818237379,-0.00010674398799892515,-0.000002282263267261442,0.000002869634954549838,0.00004155691203777678,0.00003237165219616145,-0.000040039492887444794,-0.00005632107422570698,-0.00011622216698015109,-0.00010217920498689637,-0.000052099829190410674,-0.000006442031008191407,0.00011611672380240634,0.00016018351016100496,0.0002177420974476263,0.00024585469509474933,0.00016871566185727715,0.0002069331967504695,0.00009723335824673995,0.00016305266763083637,0.00010130155715160072,0.0001628038880880922,0.00009905041952151805,0.00012441941362340003,0.00005324347148416564,0.00006661077350145206,0.000056269716878887266,0.00009563506318954751,0.0001445938105462119,0.00020467364811338484,0.00022031216940376908,0.00027645783848129213,0.00018519532750360668,0.00023159629199653864,0.00010800627205753699,0.0001519494253443554,0.00012027759657939896,0.00017234316328540444,0.00015244039241224527,0.00021870264026802033,0.000060043548728572205,0.00012630523997358978,-0.00008305638039018959,-0.00003651895167422481,-0.00011915012873942032,-0.0000871685188030824,-0.000041786948713706806,-0.000004809240635950118,0.00004110886584385298,0.000093799018941354,0.00001830440669436939,0.00009007014887174591,-0.00008894543861970305,-0.000008388842616113834,-0.00012280653754714876,-0.000059225996665190905,-0.00004686256579589099,-0.000004007886218460044,0.000010301017027813941,0.00006117883458500728,-0.000004959066245646682,0.00006308007868938148,-0.00005623497781925835,0.0000016901053641049657,-0.00012405106099322438,-0.00009191863500745967,-0.00018024181190412492,-0.0001593408960616216,-0.00019957635959144682,-0.00017160963034257293,-0.00017814745660871267,-0.00013509401469491422,-0.00011708180682035163,-0.00006468065839726478,-0.00006644428503932431,-0.000022329521016217768,-0.00005872109250049107,-0.000030379385862033814,-0.00001940926449606195,-9.50950834521791e-7,0.00007214264041977003,0.00007613632624270394,0.00011203531175851822,0.00009669607970863581,0.00008747195533942431,0.00006836865213699639,0.000107871564978268,0.00009087040234589949,0.00019871782569680363,0.00016566846170462668,0.0002717904862947762,0.0002240440808236599,0.00026444465038366616,0.00022366063785739243,0.0002072927018161863,0.00016754464013502002,0.00017488887533545494,0.00011745865049306303,0.00018788142187986523,0.00012361693370621651,0.00018892365915235132,0.0001353108964394778,0.00012977307778783143,0.00008753158908803016,0.00003708814620040357,0.000010673960787244141,-0.00001981318746402394,-0.00003052715692319907,0.0000012943901310791261,-0.000012440191312634852,0.00007004603685345501,0.000053042742365505546,0.00011080254625994712,0.00010929033305728808,0.00010538451169850305,0.00010385063797002658,0.0001238908589584753,0.00009580529876984656,0.00019793650426436216,0.00016720773419365287,0.00024815084179863334,0.0002446943544782698,0.00019588206487242132,0.00019575741316657513,0.00005647114085149951,0.000033640259061940014,-0.00008082586282398552,-0.00010941842629108578,-0.000123425226774998,-0.0001422984933014959,-0.00009261527156922966,-0.00010913527512457222,-0.00009859810234047472,-0.00011477481893962249,-0.00013260109699331224,-0.00014256648137234151,-0.00009395734377903864,-0.00008956607052823529,-0.000003257652451793547,0.000024219256374635734,0.00006157296593300998,0.00009329195017926395,0.0000909910086193122,0.00009424033487448469,0.00007284159801201895,0.00006831511564087123,0.00001874280314950738,0.00005567546031670645,0.000005360243903851369,0.00006956124707357958,0.00004115957926842384,0.00008636829443275928,0.00006720854435116053,0.00010175880743190646,0.000058497971622273326,0.00010565094271441922,-0.00000532744888914749,0.00003650475264294073,-0.00008412737224716693,-0.00005737183892051689,-0.00004074765456607565,-0.000015765856005600654,0.00012070624507032335,0.00012950683594681323,0.0002018612576648593,0.0001815898867789656,0.0001366319484077394,0.00012036338011967018,0.00008128847548505291,0.00008533558138879016,0.00012598736793734133,0.00011848862050101161,0.0001826434163376689,0.00015625306696165353,0.00019109569257125258,0.00017093791393563151,0.00020420609507709742,0.00018747098511084914,0.00021713862952310592,0.00019607768626883626,0.00015462526062037796,0.00015112361870706081,0.00005944148142589256,0.00007137679494917393,0.00002383520950388629,0.00001862557473941706,-0.0000068000390456290916,-0.000017121023120125756,-0.00010218597890343517,-0.00007586612628074363,-0.0001744521432556212,-0.0001242063590325415,-0.0001295977272093296,-0.00010483716323506087,-0.00002151472472178284,-0.000034661545214476064,0.00004824878487852402,0.000019321976651553996,0.000060638627473963425,0.000033946442272281274,0.000049855512770591304,0.00003052474494324997,0.00003425036265980452,0.000019722010620171204,0.00003538441160344519,0.00002866454451577738,0.00006024901085766032,0.00007192634075181559,0.00005440136737888679,0.00007213866047095507,0.000019199043890694156,0.000010913217920460738,0.000045549073547590524,0.000012097194485249929,0.00010095175093738362,0.00006870793731650338,0.00007156033825594932,0.00003835436291410588,0.000020153316654614173,-0.000019508930563461035,0.0000535928484168835,0.00003740128158824518,0.00010149527952307835,0.00011497524246806279,0.00008390550647163764,0.0000843971865833737,0.00003986573210568167,0.000023354001314146444,0.000007602353434776887,0.000020408371710800566,-0.000010802616088767536,0.000026732461265055463,-0.000005622944627248216,0.0000034467293517082,0.000030874678486725315,0.000010173034752369858,0.00007900789205450565,0.0000685180420987308,0.00007322894089156762,0.00007221940177259967,-0.000027310783480061218,-0.000044682725274469703,-0.0001466236572014168,-0.00017769132682587951,-0.00018490885850042105,-0.00021317791834007949,-0.00014575586828868836,-0.00016396366117987782,-0.00008703183266334236,-0.000096126452262979,-0.00003868097337544896,-0.00006154235597932711,0.0000013577704294220894,-0.00006000530629535206,0.00003719485175679438,-0.000029292279577930458,0.00005176669219508767,0.000037953537685098127,0.00004797007568413392,0.0000610950737609528,0.00007513132004532963,0.000035335040593054146,0.00014191074296832085,0.000057879464293364435,0.00018908843048848212,0.0001475651515647769,0.00020764136570505798,0.00022060774790588766,0.00025390449445694685,0.0002503087744116783,0.00030238457839004695,0.0002672707778401673,0.0002528578625060618,0.000237257219851017,0.00013433310959953815,0.00013784827024210244,0.00008091441122815013,0.000059937723563052714,0.00008225104829762131,0.00005401169983088039,0.00003974448191002011,0.00004953946336172521,-0.000010107636626344174,0.00001073527801054297,-0.000020950206817360595,-0.00003656994522316381,-0.00005993116428726353,-0.0000808492986834608,-0.00011625375918811187,-0.0000944273269851692,-0.00010681073763407767,-0.00007551605085609481,-0.00007586299034301192,-0.00009075189882423729,-0.00008544810407329351,-0.00012747022265102714,-0.00006861256406409666,-0.00007860875484766439,0.000004575975708576152,0.00004120101948501542,0.00003772617856157012,0.0000848198906169273,-0.000009577727723808493,0.000012361198059807066,-0.00005892533590667881,-0.00005592560046352446,-0.00008714772411622107,-0.00006369994662236422,-0.0001394686260027811,-0.00008136204269248992,-0.00015996844740584493,-0.00010361209569964558,-0.00011126687604701146,-0.00008401738159591332,-0.00014169493806548417,-0.00011784620437538251,-0.0002762835065368563,-0.00022666376025881618,-0.0002874225901905447,-0.00022627771249972284)\n\
+\n\
+,\n\
+\n\
+new Array(-0.00014015505439601839,-0.00009424725431017578,-0.0000367982174793724,-0.000012330742720223498,-0.000009979183232644573,-0.000005074737146060215,0.000015334489944507368,0.000006053265224181814,0.000033470423659309745,0.000029470638764905743,0.00009303881961386651,0.00010694590309867635,0.00022122845984995365,0.00022976046602707356,0.00027943524764850736,0.00024943548487499356,0.000181631650775671,0.00012874089588876814,0.000033948716009035707,0.00001643829637032468,-0.000038822603528387845,-0.000005076801244285889,-0.000026619280106388032,-0.000004013060788565781,-0.000020743873392348178,-0.000060739057516912,-0.00009209522977471352,-0.00015305288252420723,-0.0001557939249323681,-0.00016957358457148075,-0.00011526542220963165,-0.00008990408241515979,-0.00003546544030541554,-0.000018380367691861466,0.000005372870873543434,0.000013720681636186782,0.000005543797669815831,0.00003979273242293857,-0.000014010610357217956,0.00005891008913749829,-0.00001633692954783328,0.00006351392949000001,-0.000011691547115333378,0.000035224747989559546,-0.00004958381759934127,-0.000023805565433576703,-0.00012163100473117083,-0.00007665240264032036,-0.00016238178068306297,-0.00010357973224017769,-0.00012000015703961253,-0.00009269107249565423,-0.000049141810450237244,-0.00005715646693715826,-0.00004356173303676769,-0.00003632663720054552,-0.00001985907510970719,0.0000020384477465995587,0.00012762073311023414,0.00011586706386879086,0.00021797671797685325,0.00020374754967633635,0.00008666064240969718,0.00011644592450466007,-0.00006568098615389317,-0.000046202490921132267,-0.00004137075302423909,-0.00007593315240228549,0.000004579069354804233,-0.00002532761573093012,-0.00009905502520268783,-0.00007579676457680762,-0.00019283377332612872,-0.00017823997768573463,-0.00014772501890547574,-0.00019722098659258336,-0.00013216372462920845,-0.000167879305081442,-0.00019680026161950082,-0.00015686158440075815,-0.0002077507524518296,-0.00015023740706965327,-0.00017501234833616763,-0.00013415997091215104,-0.00017168966587632895,-0.00013525885879062116,-0.00015167739184107631,-0.00012130104005336761,-0.00008563465962652117,-0.000041452833102084696,-0.00007153890328481793,-0.000001365100615657866,-0.00008754107693675905,-0.0000252203899435699,-0.00003187061520293355,-0.000009977433364838362,0.000022157373678055592,0.00003242286038585007,0.00003615911191445775,0.00009324029088020325,0.000014359744454850443,0.00007800778257660568,-0.000049274443881586194,-0.00005691000842489302,-0.00007130674202926457,-0.00010760929581010714,-0.000036453122447710484,-0.000047757712309248745,0.000054562337027164176,0.000027955291443504393,0.00009254179894924164,0.00002200369090132881,-0.00004265725874574855,-0.00010851425759028643,-0.0001688027841737494,-0.00016441606567241251,-0.00021186693629715592,-0.0001573815243318677,-0.00018332900071982294,-0.0001501880760770291,-0.00010138592188013718,-0.00008154666284099221,-0.00013429764658212662,-0.00008883286500349641,-0.0001400368637405336,-0.00010151389869861305,-0.000043619606003630906,-0.00004538596476777457,-0.000031638654036214575,-0.00003416767867747694,-0.00006974972347961739,-0.00005143813177710399,-0.00010723905870690942,-0.00012572293053381145,-0.00002397704156464897,-0.00009767053415998816,0.00011572502262424678,0.00005432979014585726,0.00007883126090746373,0.0000620109640294686,0.00007341729360632598,0.00004993831316824071,0.00011931547487620264,0.00005841327947564423,0.00005921594856772572,0.00001511409482191084,0.000033078180422307923,0.000019489067199174315,0.000033935510145965964,-0.000011722012459358666,0.00004304029425838962,-0.000035746488720178604,0.00003718510197359137,-0.000058436104154679924,-0.00001174940280179726,-0.00013024899817537516,0.000020506238797679543,-0.00007963776442920789,0.00003176229074597359,-0.00005422571848612279,-0.00002636853423609864,-0.00014182373706717044,-0.000049795104132499546,-0.00017246516654267907,-0.00009185299859382212,-0.00017978546384256333,-0.00013231371121946722,-0.00016474576841574162,-0.0001400558976456523,-0.00015335241914726794,-0.0001470029092160985,-0.00018156964506488293,-0.00014865070988889784,-0.0001718680141493678,-0.00012142615742050111,-0.00014900251699145883,-0.00007435568841174245,-0.00012459667050279677,-0.00008725070802029222,-0.00011005691339960322,-0.00008626709313830361,-0.00012864137534052134,-0.00004616122896550223,-0.0001554132904857397,-0.00009952057007467374,-0.00021355791250243783,-0.0001459539489587769,-0.00023241406597662717,-0.00013092698645778,-0.00017168368503917009,-0.00015152087144088,-0.00015848565089982003,-0.0001564635313116014,-0.00018872391956392676,-0.00011087577149737626,-0.00015771349717397243,-0.0000527798110852018,-0.00008749643166083843,-0.000036134504625806585,-0.00004221020935801789,-0.00008243389311246574,-0.00005874632915947586,-0.0001164921632152982,-0.00013457277964334935,-0.0001483543310314417,-0.00019349232024978846,-0.00023352073912974447,-0.00023075437638908625,-0.00028925627702847123,-0.00027289867284707725,-0.00029771780828014016,-0.0003031028318218887,-0.0002913945645559579,-0.0003263660764787346,-0.00015898887068033218,-0.00020953141211066395,0.000021462499717017636,0.000016161218809429556,0.00006929994560778141,0.00007043606456136331,0.000042957883124472573,-0.000021664078303729184,0.000008055478247115389,-0.00008845835691317916,0.00006582804780919105,-0.000016302576113957912,0.00015406384773086756,0.00010176366777159274,0.00009414566011400893,0.0000354732692358084,0.00007631623884662986,-0.000012391613381623756,0.00007941365765873343,0.0000648690911475569,0.00001397199412167538,0.00010448538523633033,0.000029168595574446954,0.00008860438538249582,-0.00006609586125705391,-0.00006593324360437691,-0.0002065992885036394,-0.0001552091707708314,-0.00018771870236378163,-0.00007774525874992833,-0.00012997548037674278,-0.00007887235551606864,-0.0000391396097256802,-0.000076210533734411,-0.0000876762715051882,-0.0000996374583337456,-0.00014420422667171806,-0.0001080437286873348,0.000032678239222150296,0.00001941799564519897,0.00008381356747122481,0.000031045052310219035,0.00006379729165928438,0.000027837693778565153,0.00006071649841032922,0.00002810096339089796,-0.000023521930415881798,-0.000042365853005321696,0.000022846543288324028,-0.000005697456799680367,0.00003526679938659072,-0.00004256410466041416,-0.0000757251400500536,-0.00013366315397433937,-0.00011955667287111282,-0.00011828384594991803,-0.00017747009405866265,-0.00016866534133441746,-0.0001741003361530602,-0.00016113329911604524,-0.00020356231834739447,-0.0001154246274381876,-0.00034802500158548355,-0.00014464158448390663,-0.0003696058120112866,-0.00011752495629480109,-0.00038095645140856504,-0.00015291014278773218,-0.0003850535140372813,-0.00025106975226663053,-0.00019905260705854744,-0.0002682860067579895,0.0000021677478798665106,-0.0002483882417436689,0.0001757844293024391,-0.0002012909681070596,0.00042002167901955545,-0.00011912333138752729,0.000566192960832268,0.000036280973290558904,0.0006151891429908574,0.000419270625570789,0.0007446972886100411,0.0009848694317042828,0.0007311853696592152,0.0014010249869897962,0.000447156373411417,0.001734805991873145,0.000048851674364414066,0.002086761873215437,-0.00039686530362814665,0.002081888262182474,-0.0007315071416087449,0.0017690588720142841,-0.0011235257843509316,0.0012453674571588635,-0.001530013862065971,0.0005929881590418518,-0.0015843822620809078,0.00013364609912969172,-0.001662310678511858,-0.0004051764262840152,-0.0017336646560579538,-0.0008209687657654285,-0.0017958111129701138,-0.0008799072238616645,-0.0023105277214199305,-0.0009375008521601558,-0.0026750226970762014,-0.00045945230522193015,-0.00301142456009984,0.00032612154609523714,-0.0037594083696603775,0.000844741880428046,-0.004248717334121466,0.001590814790688455,-0.004585081245750189,0.0022387588396668434,-0.004611271433532238,0.002747831167653203,-0.004052754957228899,0.0032969240564852953,-0.003427402814850211,0.0034304591827094555,-0.0024721764493733644,0.003596643218770623,-0.001401375513523817,0.003709446405991912,-0.0006295255152508616,0.0034894035197794437,0.000059773577959276736,0.003397291759029031,0.00038508654688484967,0.0033650926779955626,0.0005159653373993933,0.003734476398676634,0.00030270108254626393,0.0044049047864973545,-0.0007104952237568796,0.004650060087442398,-0.0020415415056049824,0.004571670666337013,-0.003501879284158349,0.004163370467722416,-0.00479539530351758,0.0036168238148093224,-0.005974814295768738,0.002774751279503107,-0.007256212644279003,0.001289845909923315,-0.007495714817196131,0.00010230821499135345,-0.006734591443091631,-0.0007406961522065103,-0.00581145565956831,-0.0016243165591731668,-0.00462182704359293,-0.002173752523958683,-0.0036379247903823853,-0.002846694318577647,-0.002800004556775093,-0.0035107601433992386,-0.0017736477311700583,-0.003419754095375538,-0.0011825866531580687,-0.0027814360801130533,-0.0008575308602303267,-0.0018417327664792538,-0.0002217306027887389,-0.000598331680521369,0.0005840326775796711,0.0008799363858997822,0.0010996086057275534,0.0021491702646017075,0.001309904851950705,0.0030024773441255093,0.0020673295948654413,0.003890095977112651,0.003430642420426011,0.004317090380936861,0.004580176901072264,0.003661549184471369,0.00580180948600173,0.0027171203400939703,0.007631687913089991,0.0020412683952599764,0.009570170193910599,0.0011816845508292317,0.010828486643731594,-0.00026033760514110327,0.010754303075373173,-0.0022562353406101465,0.009428870864212513,-0.00440824031829834,0.00784861296415329,-0.006088739261031151,0.006158956792205572,-0.007177523337304592,0.003770801005885005,-0.00812677014619112,0.0011826830450445414,-0.008794397115707397,-0.0005873069749213755,-0.008513960987329483,-0.0010649776086211205,-0.007513529155403376,-0.0007121718372218311,-0.007079744245857,-0.0002848606090992689,-0.007748864591121674,0.0008878273656591773,-0.008503956720232964,0.0035180600825697184,-0.008739612065255642,0.006504544522613287,-0.009005337953567505,0.008940945379436016,-0.00949372723698616,0.0112361591309309,-0.009555941447615623,0.01331779919564724,-0.008684584870934486,0.014238296076655388,-0.007197503000497818,0.013849114067852497,-0.005386539734899998,0.012764517217874527,-0.003275955095887184,0.01142237801104784,-0.0009684885153546929,0.010298161767423153,0.0016993064200505614,0.009333365596830845,0.00391809456050396,0.008427868597209454,0.0044991616159677505,0.008336156606674194,0.0039911759085953236,0.008962663821876049,0.0027452115900814533,0.009156675077974796,0.00011548047768883407,0.008277789689600468,-0.00374692864716053,0.006709702778607607,-0.008039569482207298,0.00510604539886117,-0.011835870333015919,0.0028857786674052477,-0.014525201171636581,-0.0005683306371793151,-0.015833331272006035,-0.004239668603986502,-0.015388516709208488,-0.006670473609119654,-0.012940594926476479,-0.007479296065866947,-0.008850338868796825,-0.007622465491294861,-0.004532064776867628,-0.0072344085201621056,-0.0008344601956196129,-0.0057411170564591885,0.0022335564717650414,-0.0032891982700675726,0.004121846053749323,0.0008299641194753349,0.005279644392430782,0.003736786311492324,0.0047928947024047375,0.0013215296203270555,0.0010782248573377728,-0.000013336036317923572,-0.0011458239750936627,0.0031413149554282427,-0.00009486293856753036,-0.0011687587248161435,-0.0041114469058811665,-0.017392633482813835,-0.015722988173365593,-0.034477073699235916,-0.027795441448688507,-0.04571573808789253,-0.036322321742773056,-0.05450707674026489,-0.0428432859480381,-0.06265253573656082,-0.047500766813755035,-0.05975385755300522,-0.041561610996723175,-0.032463666051626205,-0.013804420828819275,0.01827487349510193,0.03537826985120773,0.08266807347536087,0.097795769572258,0.15217961370944977,0.1658187061548233,0.22064581513404846,0.23351822793483734,0.28683555126190186,0.298629492521286,0.3469022810459137,0.35707736015319824,0.3909241557121277,0.4009797275066376,0.4156057834625244,0.4274917244911194,0.4247729480266571,0.43869462609291077,0.42078956961631775,0.43660423159599304,0.4062882959842682,0.42413580417633057,0.3860650956630707,0.4054466187953949,0.36459267139434814,0.38485953211784363,0.34501156210899353,0.3655964732170105,0.32996436953544617,0.34972891211509705,0.3208392858505249,0.3385865390300751,0.31652164459228516,0.3319227993488312,0.31623896956443787,0.3296041488647461,0.3198554813861847,0.3315024673938751,0.32542842626571655,0.3357532024383545,0.3314844071865082,0.3411482274532318,0.33733949065208435,0.3469061255455017,0.3416065573692322,0.3515341877937317,0.34387338161468506,0.35465532541275024,0.3446221947669983,0.3560125529766083,0.3444567918777466,0.35549405217170715,0.3434079587459564,0.3537798523902893,0.34088873863220215,0.35074639320373535,0.3382267653942108,0.34693875908851624,0.3369491696357727,0.3435756266117096,0.33618712425231934,0.3405708968639374,0.3352181017398834,0.337916761636734,0.3344864845275879,0.3360024392604828,0.3347020149230957,0.33500710129737854,0.33559557795524597,0.3345468044281006,0.3356438875198364,0.33335721492767334,0.33476224541664124,0.3313899040222168,0.33328360319137573,0.3290165960788727,0.33022430539131165,0.325093150138855,0.3257369101047516,0.3194625973701477,0.32044002413749695,0.3130733370780945,0.3142836391925812,0.3061066269874573,0.3078814744949341,0.2988135516643524,0.30184903740882874,0.2917783856391907,0.2964288294315338,0.2853374481201172,0.2916559875011444,0.27951890230178833,0.2874945402145386,0.274495929479599,0.2842196524143219,0.27030646800994873,0.28150874376296997,0.26606911420822144,0.27893924713134766,0.26149675250053406,0.2760584354400635,0.2568477988243103,0.27202627062797546,0.2516094148159027,0.26775065064430237,0.24617767333984375,0.26375263929367065,0.240883007645607,0.2583709955215454,0.2348024845123291,0.2521602511405945,0.22854775190353394,0.24681374430656433,0.22324083745479584,0.24198345839977264,0.21861906349658966,0.23773431777954102,0.21457253396511078,0.23431454598903656,0.2108982503414154,0.23115283250808716,0.20731040835380554,0.22855831682682037,0.20408383011817932,0.22669631242752075,0.2009020447731018,0.22472351789474487,0.19726240634918213,0.22214411199092865,0.19329386949539185,0.2187594175338745,0.1889563798904419,0.21419735252857208,0.18386077880859375,0.20839394629001617,0.17786459624767303,0.2017228603363037,0.1712917685508728,0.19439153373241425,0.16436927020549774,0.18625706434249878,0.1569976955652237,0.17753638327121735,0.14927631616592407,0.16906782984733582,0.14145801961421967,0.16131752729415894,0.13372083008289337,0.15394407510757446,0.1261877566576004,0.14700950682163239,0.11899550259113312,0.14078551530838013,0.11220572888851166,0.13472723960876465,0.10562274605035782,0.1288258135318756,0.09939584136009216,0.12334570288658142,0.09371078014373779,0.11740842461585999,0.08796590566635132,0.11085216701030731,0.08191831409931183,0.10430294275283813,0.0758076012134552,0.09747365862131119,0.06946639716625214,0.09014172852039337,0.06285040080547333,0.08244733512401581,0.05589297041296959,0.0747237503528595,0.0486995093524456,0.06748583912849426,0.04179181903600693,0.06031538173556328,0.034901268780231476,0.05304372310638428,0.02791520208120346,0.04633215442299843,0.021517589688301086,0.039766762405633926,0.015343964099884033,0.03282143175601959,0.008753910660743713,0.0258503258228302,0.0020630136132240295,0.01878304034471512,-0.004641629755496979,0.011329539120197296,-0.01166088879108429,0.003378555178642273,-0.019190803170204163,-0.005097053945064545,-0.027227118611335754,-0.013719238340854645,-0.03537680208683014,-0.022374339401721954,-0.043488986790180206,-0.03137648105621338,-0.05187668651342392,-0.04053819179534912,-0.0604567751288414,-0.049499429762363434,-0.06884048134088516,-0.05849288031458855,-0.07712171971797943,-0.06773670017719269,-0.08554264158010483,-0.07693895697593689,-0.09397900104522705,-0.08596764504909515,-0.10236804187297821,-0.09495700895786285,-0.11071249842643738,-0.10388500988483429,-0.11891487240791321,-0.11278313398361206,-0.1271471083164215,-0.12161137163639069,-0.1353926956653595,-0.1302194446325302,-0.14331747591495514,-0.13882678747177124,-0.15112300217151642,-0.14760717749595642,-0.15909935534000397,-0.1563674807548523,-0.1669865846633911,-0.1650761067867279,-0.17466247081756592,-0.1739044189453125,-0.1824301928281784,-0.18288172781467438,-0.19044317305088043,-0.19180621206760406,-0.1984090507030487,-0.2006174921989441,-0.2061910629272461,-0.2095491737127304,-0.2141258418560028,-0.2184688150882721,-0.22216469049453735,-0.22707563638687134,-0.2299291044473648,-0.23560881614685059,-0.23756471276283264,-0.24421198666095734,-0.24524550139904022,-0.2526945173740387,-0.252858430147171,-0.2611212730407715,-0.2604433596134186,-0.26948052644729614,-0.2679097056388855,-0.27768683433532715,-0.2752090096473694,-0.2859497666358948,-0.28264039754867554,-0.29414576292037964,-0.29005101323127747,-0.30205854773521423,-0.2971515655517578,-0.31004756689071655,-0.30430930852890015,-0.3181053400039673,-0.3115376830101013,-0.32590630650520325,-0.31850019097328186,-0.33365267515182495,-0.32542774081230164,-0.3414079546928406,-0.33242523670196533,-0.34893766045570374,-0.33921313285827637,-0.3563483953475952,-0.3458234965801239,-0.36362698674201965,-0.35227999091148376,-0.3707098960876465,-0.3586232364177704,-0.37783506512641907,-0.36508598923683167,-0.3848576247692108,-0.3714151680469513,-0.3916032016277313,-0.3774167597293854,-0.3983784317970276,-0.38348257541656494,-0.4050813317298889,-0.38953205943107605,-0.4114915728569031,-0.3952938914299011,-0.41792139410972595,-0.40107113122940063,-0.4242797791957855,-0.4067872166633606,-0.430213063955307,-0.4120813012123108,-0.4359695613384247,-0.41720691323280334,-0.4416967034339905,-0.4222995638847351,-0.44718682765960693,-0.42709559202194214,-0.45248913764953613,-0.43165889382362366,-0.45770472288131714,-0.4361976385116577,-0.4627995789051056,-0.4406948685646057,-0.467723548412323,-0.4449848532676697,-0.4723993241786957,-0.4489439129829407,-0.47690653800964355,-0.4527551233768463,-0.4812902808189392,-0.4565407931804657,-0.48539483547210693,-0.4600854218006134,-0.48930904269218445,-0.4634152054786682,-0.4931594729423523,-0.4667051434516907,-0.49675899744033813,-0.46982237696647644,-0.5000807046890259,-0.4727060794830322,-0.5032362341880798,-0.47544509172439575,-0.5061864256858826,-0.4780427813529968,-0.5089499354362488,-0.4805164635181427,-0.5115028023719788,-0.4827759861946106,-0.513809084892273,-0.48477935791015625,-0.5159985423088074,-0.48671194911003113,-0.5179522633552551,-0.4884487986564636,-0.5195164084434509,-0.4897882044315338,-0.520979642868042,-0.4910416007041931,-0.5224595069885254,-0.492371529340744,-0.5237541198730469,-0.4935266375541687,-0.5248284339904785,-0.4944034814834595,-0.5256340503692627,-0.4950096309185028,-0.5261802077293396,-0.4954404830932617,-0.5266210436820984,-0.4957996904850006,-0.5268115997314453,-0.4958656430244446,-0.5266780257225037,-0.4956287741661072,-0.5264650583267212,-0.4954100549221039,-0.526107668876648,-0.495071142911911,-0.5254742503166199,-0.49441009759902954,-0.5246858596801758,-0.4936348795890808,-0.523658812046051,-0.4927383065223694,-0.5223727226257324,-0.4916102886199951,-0.5210084915161133,-0.4903441369533539,-0.5194172263145447,-0.4888645112514496,-0.5174907445907593,-0.4871516525745392,-0.5154325366020203,-0.48535043001174927,-0.5132569074630737,-0.4833911061286926,-0.5109375715255737,-0.4812907576560974,-0.5085335969924927,-0.47917601466178894,-0.5059165954589844,-0.4768742620944977,-0.5030509233474731,-0.4742845892906189,-0.500028669834137,-0.4715332090854645,-0.4968000054359436,-0.46862754225730896,-0.49335336685180664,-0.46553701162338257,-0.4896450638771057,-0.46218371391296387,-0.48560720682144165,-0.4585230052471161,-0.4814741313457489,-0.4548163115978241,-0.47733908891677856,-0.45113861560821533,-0.47292858362197876,-0.44719982147216797,-0.46825575828552246,-0.4430288076400757,-0.46353116631507874,-0.43884843587875366,-0.4587159752845764,-0.43462270498275757,-0.45373016595840454,-0.43027472496032715,-0.44851088523864746,-0.4257199764251709,-0.4430246949195862,-0.42090100049972534,-0.4373963177204132,-0.41597795486450195,-0.43161025643348694,-0.4109745919704437,-0.42553985118865967,-0.40570569038391113,-0.4193096160888672,-0.4002203345298767,-0.41303032636642456,-0.39467763900756836,-0.4066188335418701,-0.38908135890960693,-0.4000610113143921,-0.38337835669517517,-0.3933746814727783,-0.37749603390693665,-0.3865426182746887,-0.37144654989242554,-0.3795803189277649,-0.36532968282699585,-0.37244653701782227,-0.3590787649154663,-0.36512744426727295,-0.3526001274585724,-0.35773417353630066,-0.3460187315940857,-0.3503147065639496,-0.339443564414978,-0.3428031802177429,-0.3328033685684204,-0.33511918783187866,-0.32598936557769775,-0.3272414207458496,-0.318989634513855,-0.319307416677475,-0.31192755699157715,-0.3114268183708191,-0.30487531423568726,-0.3034377694129944,-0.29770565032958984,-0.2951779365539551,-0.29031598567962646,-0.28677380084991455,-0.2827863097190857,-0.2784140706062317,-0.27522894740104675,-0.2700554132461548,-0.26765698194503784,-0.26152825355529785,-0.2599930167198181,-0.25285422801971436,-0.2521980106830597,-0.24422062933444977,-0.2443566769361496,-0.2356354296207428,-0.23653943836688995,-0.22694560885429382,-0.2287016212940216,-0.218154639005661,-0.22078363597393036,-0.20938779413700104,-0.2128010392189026,-0.20065683126449585,-0.20482154190540314,-0.19187307357788086,-0.19685180485248566,-0.18300488591194153,-0.18880067765712738,-0.17411771416664124,-0.1806454360485077,-0.16525717079639435,-0.17248183488845825,-0.15638071298599243,-0.1643337905406952,-0.14744843542575836,-0.15611480176448822,-0.13846251368522644,-0.14778637886047363,-0.12942667305469513,-0.1394030600786209,-0.12038421630859375,-0.13102714717388153,-0.11140423268079758,-0.12266922742128372,-0.10246630012989044,-0.11430176347494125,-0.09349130839109421,-0.10590529441833496,-0.08449366688728333,-0.09749168902635574,-0.07557141780853271,-0.08910224586725235,-0.06675387918949127,-0.0807742029428482,-0.057972121983766556,-0.07248006016016006,-0.0491742342710495,-0.06414788961410522,-0.04038545489311218,-0.05578262731432915,-0.031651221215724945,-0.04744748771190643,-0.023004386574029922,-0.03917189687490463,-0.014445883221924305,-0.03089878335595131,-0.005930168554186821,-0.022583838552236557,0.002562102861702442,-0.014277668669819832,0.010952816344797611,-0.0060509974136948586,0.01916518434882164,0.002093313727527857,0.027261536568403244,0.010179467499256134,0.03536767512559891,0.01820770837366581,0.043512094765901566,0.026199307292699814,0.05165395140647888,0.03420865908265114,0.059800952672958374,0.04223240911960602,0.06799114495515823,0.05020764097571373,0.0762426033616066,0.05816218629479408,0.08457324653863907,0.06622572243213654,0.09293084591627121,0.07437774538993835,0.10108152031898499,0.08233530074357986,0.10879091918468475,0.08987627178430557,0.11614792048931122,0.09715694189071655,0.1234435960650444,0.10448165237903595,0.13069337606430054,0.11183199286460876,0.137596994638443,0.11889855563640594,0.1440371870994568,0.12557530403137207,0.15028083324432373,0.13212789595127106,0.15657037496566772,0.13878726959228516,0.1628297120332718,0.1454436331987381,0.16891765594482422,0.15190395712852478,0.1749131679534912,0.15824180841445923,0.1809864193201065,0.16467547416687012,0.18716280162334442,0.17122480273246765,0.19334079325199127,0.17770837247371674,0.19944238662719727,0.18403005599975586,0.2054712474346161,0.19027374684810638,0.21147370338439941,0.1965131163597107,0.21746426820755005,0.202686607837677,0.22337956726551056,0.2087024450302124,0.22914519906044006,0.2145642787218094,0.23477570712566376,0.22034037113189697,0.2403235286474228,0.22606170177459717,0.24574553966522217,0.23169220983982086,0.25093889236450195,0.23718631267547607,0.25590190291404724,0.242568701505661,0.2607375681400299,0.24794656038284302,0.26550406217575073,0.25342273712158203,0.27017199993133545,0.25899767875671387,0.27470505237579346,0.2645891606807709,0.27907735109329224,0.27013954520225525,0.28324833512306213,0.27565181255340576,0.2872246503829956,0.28112611174583435,0.2910986542701721,0.28652048110961914,0.29492753744125366,0.2917826473712921,0.2986379861831665,0.2968660891056061,0.30215686559677124,0.3017169237136841,0.30556589365005493,0.306292861700058,0.30898672342300415,0.3105788826942444,0.31235742568969727,0.31453004479408264,0.31548088788986206,0.3180347979068756,0.31830263137817383,0.3210201859474182,0.3209911286830902,0.32356560230255127,0.32369938492774963,0.32582664489746094,0.3263929486274719,0.3278847932815552,0.3289925754070282,0.32976004481315613,0.33154329657554626,0.33151277899742126,0.33410102128982544,0.33320218324661255,0.3365638256072998,0.3347967565059662,0.3387991189956665,0.3362775146961212,0.3408724367618561,0.33779776096343994,0.34296247363090515,0.33957409858703613,0.3450830578804016,0.34163421392440796,0.34706878662109375,0.3438357412815094,0.348814994096756,0.34612223505973816,0.35035955905914307,0.34857824444770813,0.3517402708530426,0.3512190878391266,0.35293614864349365,0.35391637682914734,0.35395580530166626,0.3565821945667267,0.35486266016960144,0.35927093029022217,0.35572633147239685,0.36204156279563904,0.356637567281723,0.3648494482040405,0.3577037751674652,0.36761653423309326,0.3589226007461548,0.3702812194824219,0.3601362705230713,0.37273502349853516,0.3612326383590698,0.37484031915664673,0.36232203245162964,0.37658295035362244,0.36361539363861084,0.37812894582748413,0.3651997447013855,0.3796727657318115,0.3670227825641632,0.3812750577926636,0.3690119981765747,0.38286787271499634,0.3711033761501312,0.3843686878681183,0.37321075797080994,0.3857674300670624,0.37523677945137024,0.38710513710975647,0.37706899642944336,0.3883553445339203,0.37854859232902527,0.3893587589263916,0.37954261898994446,0.38997459411621094,0.3800737261772156,0.3902926743030548,0.3802680969238281,0.39055025577545166,0.38013553619384766,0.39079850912094116,0.37950754165649414,0.3908044993877411,0.3782094717025757,0.3903343379497528,0.3761543035507202,0.389335036277771,0.3732477128505707,0.3877517879009247,0.3694034218788147,0.38540199398994446,0.36476823687553406,0.38222476840019226,0.3597945272922516,0.3785027265548706,0.35500597953796387,0.37467244267463684,0.3508549928665161,0.371074914932251,0.3479050397872925,0.3680570721626282,0.3469204604625702,0.3661377429962158,0.34853217005729675,0.3658168911933899,0.3528748154640198,0.36726272106170654,0.35964274406433105,0.3702837824821472,0.36830464005470276,0.37445157766342163,0.37805625796318054,0.37910306453704834,0.38772836327552795,0.3833930492401123,0.3960375189781189,0.38656750321388245,0.4019690752029419,0.3881657123565674,0.4048866331577301,0.38796383142471313,0.40447235107421875,0.38597115874290466,0.40075889229774475,0.3825986981391907,0.394109308719635,0.3785688579082489,0.3850228786468506,0.3744800388813019,0.3740721046924591,0.37065625190734863,0.3620791435241699,0.3674893379211426,0.3500944972038269,0.3655659258365631,0.33906349539756775,0.3652535676956177,0.3297199308872223,0.36647671461105347,0.3227653205394745,0.36900168657302856,0.3185165226459503,0.372326135635376,0.31588882207870483,0.37477192282676697,0.31177088618278503,0.37278440594673157,0.3019689917564392,0.36187323927879333,0.2825281023979187,0.3380492031574249,0.25039106607437134,0.29856887459754944,0.20400939881801605,0.24250024557113647,0.14459776878356934,0.17187324166297913,0.07684291154146194,0.09231474250555038,0.00776814017444849,0.011855741031467915,-0.05500537157058716,-0.060879603028297424,-0.1035246029496193,-0.1170259341597557,-0.12914299964904785,-0.14721639454364777,-0.12436288595199585,-0.14353066682815552,-0.08681271970272064,-0.1035139262676239,-0.021452229470014572,-0.032334811985492706,0.06164011359214783,0.05947559326887131,0.15169209241867065,0.16042886674404144,0.2398754358291626,0.2607254385948181,0.3191983103752136,0.3522929549217224,0.3837544322013855,0.42822763323783875,0.4290175437927246,0.4831486642360687,0.4528612196445465,0.514176607131958,0.4562394618988037,0.521668553352356,0.44294753670692444,0.5091447830200195,0.41847264766693115,0.4822106659412384,0.3884967267513275,0.44692263007164,0.3579346537590027,0.40867704153060913,0.3308313190937042,0.37211814522743225,0.31042635440826416,0.34127500653266907,0.2987293004989624,0.31904998421669006,0.2959997057914734,0.30647990107536316,0.30091267824172974,0.3027843236923218,0.3113101124763489,0.306190550327301,0.3247837424278259,0.31460651755332947,0.3388565182685852,0.32574155926704407,0.3511863946914673,0.33718350529670715,0.35997089743614197,0.34681347012519836,0.3642255961894989,0.3532503843307495,0.3637520968914032,0.35595330595970154,0.3590213358402252,0.3550752103328705,0.351114958524704,0.35131362080574036,0.3415455222129822,0.3457548916339874,0.3318597078323364,0.3396145701408386,0.32324835658073425,0.33392757177352905,0.31639763712882996,0.32932248711586,0.3115268051624298,0.3259360194206238,0.3084493577480316,0.32346779108047485,0.3066614270210266,0.3213740587234497,0.3055570721626282,0.3191356658935547,0.30470365285873413,0.3164435923099518,0.3039399981498718,0.313181608915329,0.30320900678634644,0.30928266048431396,0.3023843467235565,0.3046846091747284,0.3013804256916046,0.2994810938835144,0.3003881573677063,0.29404520988464355,0.2997879981994629,0.28885146975517273,0.2997121810913086,0.28411442041397095,0.2998063862323761,0.2796758711338043,0.2995368540287018,0.2752785384654999,0.2986152470111847,0.2708359360694885,0.2969832122325897,0.2663668990135193,0.29451480507850647,0.26180583238601685,0.2909870147705078,0.25703945755958557,0.2863495647907257,0.25208550691604614,0.2808309495449066,0.24710004031658173,0.27474072575569153,0.2422293871641159,0.26830995082855225,0.23756276071071625,0.261757493019104,0.23320716619491577,0.25537675619125366,0.22930194437503815,0.2494843453168869,0.22595880925655365,0.24431155622005463,0.22322537004947662,0.23989641666412354,0.2210220843553543,0.235987588763237,0.2190142273902893,0.2321094125509262,0.21664059162139893,0.22785964608192444,0.2134196013212204,0.2231336086988449,0.20920293033123016,0.21797817945480347,0.20404097437858582,0.2123415470123291,0.19792068004608154,0.20616373419761658,0.19082854688167572,0.19966572523117065,0.18301355838775635,0.19332806766033173,0.1749725341796875,0.18755415081977844,0.16715316474437714,0.18249043822288513,0.15979434549808502,0.1781284064054489,0.15299631655216217,0.17435649037361145,0.14673756062984467,0.1708746999502182,0.1408073604106903,0.16724835336208344,0.13490109145641327,0.16312113404273987,0.1288263201713562,0.1582898050546646,0.12252052128314972,0.1526111662387848,0.11592620611190796,0.14601793885231018,0.109025739133358,0.1386347860097885,0.10197537392377853,0.13071639835834503,0.09501562267541885,0.12245433777570724,0.08824774622917175,0.11396884173154831,0.0816502720117569,0.10543704777956009,0.0752602368593216,0.09703152626752853,0.06912031024694443,0.08874747902154922,0.06306732445955276,0.0804801806807518,0.05680617690086365,0.07224872708320618,0.050199929624795914,0.06413860619068146,0.04326504096388817,0.056058719754219055,0.03589431941509247,0.04781285300850868,0.02787492424249649,0.03942457586526871,0.019239455461502075,0.031131481751799583,0.010328397154808044,0.023022381588816643,0.001407034695148468,0.014940470457077026,-0.007533639669418335,0.006808610633015633,-0.016492079943418503,-0.0012192577123641968,-0.025234082713723183,-0.009038610383868217,-0.03353056684136391,-0.016785575076937675,-0.041423678398132324,-0.024613576009869576,-0.04908459633588791,-0.03248251974582672,-0.056559376418590546,-0.04031608998775482,-0.0638224333524704,-0.04819875210523605,-0.07095935940742493,-0.05626891925930977,-0.07813222706317902,-0.06454124301671982,-0.08543310314416885,-0.0729595273733139,-0.09288822114467621,-0.0815194621682167,-0.10053624212741852,-0.09023560583591461,-0.10840082168579102,-0.09907303005456924,-0.11644048988819122,-0.1079840436577797,-0.12459170818328857,-0.11693437397480011,-0.1328069120645523,-0.12586098909378052,-0.14102135598659515,-0.1347116231918335,-0.14916948974132538,-0.14354576170444489,-0.15726426243782043,-0.15246544778347015,-0.16536462306976318,-0.16142883896827698,-0.1734473705291748,-0.17029942572116852,-0.18144424259662628,-0.17903432250022888,-0.18932628631591797,-0.18777750432491302,-0.19719542562961578,-0.1966264843940735,-0.2051265984773636,-0.20549310743808746,-0.21306931972503662,-0.2142835110425949,-0.22096262872219086,-0.2230629175901413,-0.2288345843553543,-0.23193064332008362,-0.23672154545783997,-0.24084587395191193,-0.24458253383636475,-0.24968738853931427,-0.2523565888404846,-0.25840240716934204,-0.26002565026283264,-0.2669919431209564,-0.2675635516643524,-0.2754093110561371,-0.2748936712741852,-0.2835761606693268,-0.28195685148239136,-0.2914767563343048,-0.2887730896472931,-0.29917678236961365,-0.2954060733318329,-0.3067672550678253,-0.30192068219184875,-0.31432220339775085,-0.30839264392852783,-0.32188379764556885,-0.31489381194114685,-0.3294561803340912,-0.3214408755302429,-0.3370295464992523,-0.328012615442276,-0.3446136713027954,-0.33462363481521606,-0.35221201181411743,-0.34130868315696716,-0.3597670793533325,-0.34802311658859253,-0.36719390749931335,-0.3546490967273712,-0.3744781017303467,-0.36113351583480835,-0.38167330622673035,-0.36753392219543457,-0.3887888789176941,-0.37389105558395386,-0.39575546979904175,-0.38014477491378784,-0.40252387523651123,-0.38622432947158813,-0.4091200828552246,-0.39214345812797546,-0.4155809283256531,-0.3979530334472656,-0.42190879583358765,-0.40365856885910034,-0.4280899465084076,-0.40922433137893677,-0.43409258127212524,-0.4146045446395874,-0.43986040353775024,-0.4197533428668976,-0.44537705183029175,-0.42464694380760193,-0.4506929814815521,-0.4293072521686554,-0.4558223783969879,-0.43376216292381287,-0.4606941044330597,-0.43799930810928345,-0.4652884602546692,-0.442005455493927,-0.4697306454181671,-0.4458353519439697,-0.4741453230381012,-0.44958731532096863,-0.47850847244262695,-0.45330822467803955,-0.4827500581741333,-0.4569667875766754,-0.4869179129600525,-0.46052834391593933,-0.4911094307899475,-0.4640166759490967,-0.49528059363365173,-0.4674590229988098,-0.49924901127815247,-0.4707924723625183,-0.5029004216194153,-0.4738979935646057,-0.5062958002090454,-0.4767228066921234,-0.5095095038414001,-0.47928720712661743,-0.5124505758285522,-0.4815814197063446,-0.5149758458137512,-0.48357388377189636,-0.5171502828598022,-0.48531922698020935,-0.5192136764526367,-0.4869314432144165,-0.5212603807449341,-0.488446980714798,-0.5231381058692932,-0.48984047770500183,-0.52472984790802,-0.4911395013332367,-0.5261441469192505,-0.4923926889896393,-0.527509868144989,-0.49356329441070557,-0.5287466049194336,-0.49457594752311707,-0.5296869277954102,-0.49541616439819336,-0.5303183197975159,-0.49609023332595825,-0.5307528972625732,-0.49656811356544495,-0.5310207605361938,-0.4968433976173401,-0.5310498476028442,-0.496968537569046,-0.530831515789032,-0.49698033928871155,-0.5304620265960693,-0.49686378240585327,-0.5299873352050781,-0.4966042637825012,-0.5293381810188293,-0.4962059259414673,-0.5284557342529297,-0.49565649032592773,-0.5273529887199402,-0.4949106276035309,-0.526007354259491,-0.4938989281654358,-0.5243396759033203,-0.49257004261016846,-0.5223512649536133,-0.49095845222473145,-0.5201387405395508,-0.48915889859199524,-0.5177398324012756,-0.48719456791877747,-0.5151124596595764,-0.4850119352340698,-0.5122785568237305,-0.482637494802475,-0.5093286633491516,-0.4801918864250183,-0.5062897801399231,-0.4777042865753174,-0.5031248927116394,-0.475080281496048,-0.49982544779777527,-0.4722902476787567,-0.4963882863521576,-0.46941402554512024,-0.49277254939079285,-0.46646642684936523,-0.48896169662475586,-0.46334540843963623,-0.48497438430786133,-0.45997869968414307,-0.48077625036239624,-0.4563928246498108,-0.4763081669807434,-0.45262888073921204,-0.47160157561302185,-0.4486851990222931,-0.4667295813560486,-0.4445449113845825,-0.46167927980422974,-0.4402090609073639,-0.45640772581100464,-0.4357064366340637,-0.45095518231391907,-0.43107399344444275,-0.4453774094581604,-0.4263157844543457,-0.43965455889701843,-0.4214092791080475,-0.43376171588897705,-0.4163581430912018,-0.427729070186615,-0.4111863970756531,-0.42157092690467834,-0.40588706731796265,-0.41525986790657043,-0.40044105052948,-0.4087994396686554,-0.3948689103126526,-0.4022263288497925,-0.38919609785079956,-0.3955446183681488,-0.38339942693710327,-0.3887292444705963,-0.3774532377719879,-0.3817715644836426,-0.37138763070106506,-0.37467828392982483,-0.3652406632900238,-0.36746498942375183,-0.3589944839477539,-0.36015987396240234,-0.35260990262031555,-0.3527684509754181,-0.3460889160633087,-0.3452497124671936,-0.33946171402931213,-0.3375682830810547,-0.3327275514602661,-0.3297394812107086,-0.32584986090660095,-0.3218045234680176,-0.3188246786594391,-0.31380194425582886,-0.31171417236328125,-0.3057512938976288,-0.3045653700828552,-0.29762595891952515,-0.29733529686927795,-0.28938376903533936,-0.28996893763542175,-0.2810479402542114,-0.28250637650489807,-0.2726821303367615,-0.27501970529556274,-0.2642843723297119,-0.26749780774116516,-0.2558106482028961,-0.25989100337028503,-0.24728626012802124,-0.25220686197280884,-0.23876431584358215,-0.24447709321975708,-0.23021483421325684,-0.23670168220996857,-0.22157728672027588,-0.22887814044952393,-0.21286465227603912,-0.221002995967865,-0.20411089062690735,-0.21303793787956238,-0.19533251225948334,-0.20500221848487854,-0.1864926666021347,-0.19693033397197723,-0.1776198148727417,-0.18884466588497162,-0.16875708103179932,-0.1807192862033844,-0.15989913046360016,-0.1725713461637497,-0.15102531015872955,-0.16447541117668152,-0.14213839173316956,-0.15643048286437988,-0.13326241075992584,-0.1483512669801712,-0.12442145496606827,-0.1402113437652588,-0.11559772491455078,-0.13205887377262115,-0.10671859979629517,-0.12390013784170151,-0.09771277010440826,-0.11567951738834381,-0.08856542408466339,-0.10734037309885025,-0.07931990921497345,-0.09885535389184952,-0.07004343718290329,-0.09027108550071716,-0.06076359748840332,-0.08171606063842773,-0.051445167511701584,-0.07325153797864914,-0.042089834809303284,-0.0647740513086319,-0.03280926123261452,-0.056217558681964874,-0.02369919791817665,-0.04774121567606926,-0.014719998463988304,-0.03951798379421234,-0.005831114947795868,-0.031474702060222626,0.0028619803488254547,-0.023466356098651886,0.011266704648733139,-0.015539433807134628,0.019486743956804276,-0.007796190679073334,0.02764134854078293,-0.0002129673957824707,0.035642001777887344,0.007213525474071503,0.043391402810811996,0.014408908784389496,0.051025353372097015,0.021428555250167847,0.05867929756641388,0.028416655957698822,0.0662369579076767,0.03535858541727066,0.07358866930007935,0.042189568281173706,0.08084963262081146,0.0490066260099411,0.08807537704706192,0.05589109659194946,0.09510941803455353,0.06279647350311279,0.10187757015228271,0.06977587193250656,0.10846224427223206,0.07693607360124588,0.11485867202281952,0.08415903151035309,0.12102552503347397,0.09127787500619888,0.12707127630710602,0.09834423661231995,0.13310644030570984,0.10538395494222641,0.1391477882862091,0.11228538304567337,0.14532488584518433,0.11914981156587601,0.15184150636196136,0.12623929977416992,0.15870630741119385,0.13356147706508636,0.16585108637809753,0.14108172059059143,0.17339038848876953,0.1491435021162033,0.1814194768667221,0.15807709097862244,0.18974897265434265,0.16768202185630798,0.198135644197464,0.17754817008972168,0.20657123625278473,0.18749697506427765,0.2151017040014267,0.1973915696144104,0.22352728247642517,0.20688694715499878,0.2315070927143097,0.21554161608219147,0.23887209594249725,0.22295071184635162,0.24563157558441162,0.22886541485786438,0.25171032547950745,0.23340195417404175,0.2569041848182678,0.23695433139801025,0.261075884103775,0.23977386951446533,0.26421427726745605,0.24187617003917694,0.2663898468017578,0.24339160323143005,0.2677948474884033,0.24464905261993408,0.26866623759269714,0.24582798779010773,0.2691427767276764,0.24681979417800903,0.26940131187438965,0.24747145175933838,0.26977843046188354,0.2477508783340454,0.2705434560775757,0.24775663018226624,0.27185192704200745,0.24776995182037354,0.2739870250225067,0.2481580376625061,0.27716192603111267,0.2491474449634552,0.28118157386779785,0.25096777081489563,0.28582748770713806,0.25415366888046265,0.29126155376434326,0.2592353820800781,0.29756784439086914,0.2661699652671814,0.30439600348472595,0.274442195892334,0.3113973140716553,0.2835386097431183,0.3184615671634674,0.2930457592010498,0.3254229426383972,0.3025587797164917,0.33204150199890137,0.3116576075553894,0.33815014362335205,0.3198394179344177,0.3434916138648987,0.3266984820365906,0.34775760769844055,0.3323238790035248,0.35095351934432983,0.33714330196380615,0.35330039262771606,0.34139373898506165,0.3547760844230652,0.3451768755912781,0.35519939661026,0.34872883558273315,0.354733943939209,0.3521868586540222,0.35391494631767273,0.35551464557647705,0.3531007468700409,0.3588149845600128,0.35216692090034485,0.362111359834671,0.3509524166584015,0.3649575114250183,0.3497481942176819,0.3669162392616272,0.34890446066856384,0.3680737018585205,0.34819650650024414,0.36864179372787476,0.34714847803115845,0.3686122000217438,0.34571465849876404,0.36799123883247375,0.34409332275390625,0.36683329939842224,0.34221574664115906,0.36515533924102783,0.33987826108932495,0.3631545305252075,0.33708736300468445,0.36112385988235474,0.33407649397850037,0.3591340482234955,0.33116063475608826,0.35727792978286743,0.3285318911075592,0.35586118698120117,0.3262489140033722,0.35493436455726624,0.3246261179447174,0.3543103337287903,0.324245810508728,0.3542410731315613,0.3252984285354614,0.35525748133659363,0.3275124430656433,0.35742220282554626,0.3308638334274292,0.3604626953601837,0.33558639883995056,0.3642706573009491,0.34152770042419434,0.3687928318977356,0.34815678000450134,0.37390872836112976,0.3549131751060486,0.3794596493244171,0.36118724942207336,0.3849322199821472,0.3664550185203552,0.3894926607608795,0.3704560697078705,0.39263832569122314,0.37284305691719055,0.3941919207572937,0.3731362521648407,0.39371824264526367,0.3713011145591736,0.39081722497940063,0.36774566769599915,0.3857673704624176,0.36292165517807007,0.3792005181312561,0.35753628611564636,0.37164250016212463,0.35247477889060974,0.3638255000114441,0.34811195731163025,0.3568190634250641,0.34460335969924927,0.35156095027923584,0.342583566904068,0.3486330211162567,0.3424295485019684,0.3483543395996094)\n\
+\n\
+,\n\
+\n\
+new Array(0.3436359763145447,0.3507392704486847,0.3458445370197296,0.35553568601608276,0.349070280790329,0.36218830943107605,0.3529009521007538,0.36989903450012207,0.3567352890968323,0.3776802718639374,0.3602409362792969,0.3845756947994232,0.3624301850795746,0.38984495401382446,0.36204901337623596,0.3930245339870453,0.35958513617515564,0.39386096596717834,0.35623884201049805,0.39222022891044617,0.35106125473976135,0.3883177638053894,0.34256747364997864,0.38292935490608215,0.3323298692703247,0.3768877685070038,0.323260098695755,0.37063145637512207,0.3156992495059967,0.3646821975708008,0.3084883987903595,0.35974499583244324,0.3018919825553894,0.35562121868133545,0.29641395807266235,0.3507556915283203,0.2904132902622223,0.34314075112342834,0.28101786971092224,0.33097949624061584,0.26616284251213074,0.31287649273872375,0.2446533590555191,0.2879803478717804,0.21516236662864685,0.255038857460022,0.17608602344989777,0.21176795661449432,0.12704282999038696,0.15780548751354218,0.07108964771032333,0.09810417890548706,0.014752926304936409,0.040358446538448334,-0.035008858889341354,-0.010328201577067375,-0.07317540794610977,-0.05101863294839859,-0.09570048749446869,-0.07671763747930527,-0.09804818034172058,-0.08093484491109848,-0.0764317587018013,-0.06037058308720589,-0.03042197786271572,-0.01648930460214615,0.03596554324030876,0.0465453676879406,0.11531345546245575,0.12299899756908417,0.1989039182662964,0.20528899133205414,0.27868446707725525,0.28483620285987854,0.34824496507644653,0.3541155457496643,0.40280720591545105,0.40809503197669983,0.43914052844047546,0.4442239999771118,0.45606517791748047,0.46168196201324463,0.4549923837184906,0.4612167477607727,0.43956613540649414,0.4456948935985565,0.41455766558647156,0.41990524530410767,0.3848838806152344,0.3890814185142517,0.35493040084838867,0.35762137174606323,0.32800400257110596,0.3289647400379181,0.30628281831741333,0.3057825565338135,0.291183739900589,0.2896957993507385,0.28327441215515137,0.2809591591358185,0.2818855345249176,0.2787399888038635,0.2854923605918884,0.28177735209465027,0.2925439476966858,0.2886710464954376,0.30161160230636597,0.2977151870727539,0.31119534373283386,0.30709391832351685,0.31999343633651733,0.31554341316223145,0.3271985352039337,0.3224572539329529,0.3323807716369629,0.3273491859436035,0.3353782892227173,0.32981887459754944,0.3363034129142761,0.33001670241355896,0.33541586995124817,0.32849812507629395,0.33304548263549805,0.32565680146217346,0.32961732149124146,0.3217451870441437,0.3255370557308197,0.31720080971717834,0.3211156129837036,0.31249549984931946,0.3166646659374237,0.30782362818717957,0.3124258816242218,0.30318742990493774,0.3084467351436615,0.29864123463630676,0.304767370223999,0.29430586099624634,0.3015163242816925,0.290192186832428,0.29865914583206177,0.28612279891967773,0.2959946393966675,0.28194108605384827,0.29342013597488403,0.27772849798202515,0.2908669412136078,0.273634672164917,0.2881903052330017,0.26963305473327637,0.2853950262069702,0.2656824290752411,0.2825847864151001,0.2619113028049469,0.27963492274284363,0.2584269642829895,0.2764520049095154,0.2552037239074707,0.2733556032180786,0.25225701928138733,0.27060335874557495,0.24962079524993896,0.2679532766342163,0.24718371033668518,0.26519572734832764,0.24481931328773499,0.26249805092811584,0.2424980103969574,0.25986188650131226,0.2400670051574707,0.25692054629325867,0.23722389340400696,0.2534322142601013,0.23384401202201843,0.2493741512298584,0.2300342619419098,0.24467289447784424,0.2258572280406952,0.23934808373451233,0.22128351032733917,0.23365342617034912,0.21636269986629486,0.22778062522411346,0.21126005053520203,0.22179719805717468,0.2061673104763031,0.21593421697616577,0.20118600130081177,0.2105105221271515,0.19625036418437958,0.2056254893541336,0.19125910103321075,0.20119091868400574,0.1862357258796692,0.1970648467540741,0.18117842078208923,0.19303493201732635,0.17590683698654175,0.1889193207025528,0.17028747498989105,0.18464966118335724,0.16439872980117798,0.18007981777191162,0.1582980751991272,0.17496532201766968,0.15188351273536682,0.16928313672542572,0.14509545266628265,0.1632496416568756,0.13801680505275726,0.1569652110338211,0.13074497878551483,0.1503717601299286,0.1233326643705368,0.1435215175151825,0.11582323908805847,0.1365867406129837,0.10827413201332092,0.12966367602348328,0.10077520459890366,0.12275254726409912,0.0934087336063385,0.11584542691707611,0.08619605004787445,0.10892727971076965,0.07917298376560211,0.10195941478013992,0.07243507355451584,0.09491272270679474,0.06601165235042572,0.08778388798236847,0.05983836576342583,0.0805385559797287,0.05387263000011444,0.07305917888879776,0.04803667962551117,0.06523420661687851,0.04212284833192825,0.057080116122961044,0.03594566509127617,0.04865209758281708,0.029429901391267776,0.039905570447444916,0.022460641339421272,0.03080851025879383,0.014893142506480217,0.02146265283226967,0.006716256495565176,0.011982964351773262,-0.001997239887714386,0.0024438141845166683,-0.011165347881615162,-0.007014747243374586,-0.020593587309122086,-0.016242871060967445,-0.030016787350177765,-0.025171050801873207,-0.039254624396562576,-0.03368787094950676,-0.04812806844711304,-0.041668251156806946,-0.056405309587717056,-0.04917296767234802,-0.0640219897031784,-0.056338705122470856,-0.07114075869321823,-0.06319992244243622,-0.07793767005205154,-0.06988830864429474,-0.08454476296901703,-0.07669203728437424,-0.09115692973136902,-0.08373631536960602,-0.09804609417915344,-0.09103355556726456,-0.10550685971975327,-0.09883319586515427,-0.11369960010051727,-0.10741837322711945,-0.12249250710010529,-0.11673317849636078,-0.1316787600517273,-0.1266242116689682,-0.14125868678092957,-0.1370970606803894,-0.15116144716739655,-0.1480569839477539,-0.16098646819591522,-0.1592252403497696,-0.1704384982585907,-0.17041613161563873,-0.17959284782409668,-0.18150544166564941,-0.18844667077064514,-0.19222383201122284,-0.1967857927083969,-0.20232486724853516,-0.20461004972457886,-0.21179530024528503,-0.21210674941539764,-0.2207169234752655,-0.21930965781211853,-0.22912082076072693,-0.2262527346611023,-0.23705273866653442,-0.23312364518642426,-0.244648739695549,-0.23997023701667786,-0.25211477279663086,-0.24670550227165222,-0.2596213221549988,-0.2534589469432831,-0.2672247886657715,-0.2604459822177887,-0.27498531341552734,-0.26765093207359314,-0.2830657362937927,-0.2750389277935028,-0.29154103994369507,-0.2827794849872589,-0.3002829849720001,-0.29098790884017944,-0.3091878592967987,-0.29958197474479675,-0.31826746463775635,-0.3085162043571472,-0.32745054364204407,-0.31784147024154663,-0.336588978767395,-0.32749396562576294,-0.34562060236930847,-0.3372446596622467,-0.35447514057159424,-0.3468747138977051,-0.36298662424087524,-0.35627293586730957,-0.3710893392562866,-0.3653349280357361,-0.37888044118881226,-0.3738906681537628,-0.3864019513130188,-0.38183271884918213,-0.3935663104057312,-0.38917502760887146,-0.40029746294021606,-0.39585989713668823,-0.4066075086593628,-0.40175122022628784,-0.4125635325908661,-0.4069103002548218,-0.41820240020751953,-0.41154420375823975,-0.42346662282943726,-0.415698766708374,-0.4283090829849243,-0.4193916618824005,-0.4328407943248749,-0.42285987734794617,-0.4372495412826538,-0.42631256580352783,-0.4416581094264984,-0.4297977387905121,-0.4461841285228729,-0.4335118532180786,-0.451017290353775,-0.43769797682762146,-0.4563363194465637,-0.4422340989112854,-0.46220043301582336,-0.4469219446182251,-0.4685121476650238,-0.4519149363040924,-0.4750834107398987,-0.4572798013687134,-0.4817622900009155,-0.46262893080711365,-0.4883791208267212,-0.4676629602909088,-0.4945853352546692,-0.4724624752998352,-0.5000262260437012,-0.47698476910591125,-0.5046371221542358,-0.4809568226337433,-0.5084781646728516,-0.48434996604919434,-0.5114843249320984,-0.4873488247394562,-0.5136945247650146,-0.48995310068130493,-0.5154111385345459,-0.49210289120674133,-0.516903281211853,-0.4939757287502289,-0.5183118581771851,-0.4957995116710663,-0.5198625922203064,-0.4976169764995575,-0.521746039390564,-0.49945729970932007,-0.5239163041114807,-0.5014687180519104,-0.5263248682022095,-0.5037275552749634,-0.5290380120277405,-0.5061351656913757,-0.5319313406944275,-0.5085968375205994,-0.5346949696540833,-0.5110976099967957,-0.5372004508972168,-0.5135430693626404,-0.5394700765609741,-0.5157400369644165,-0.5414009094238281,-0.5175819993019104,-0.542862057685852,-0.5190489888191223,-0.5438710451126099,-0.5200487375259399,-0.5444741249084473,-0.5204949378967285,-0.5446802377700806,-0.520462155342102,-0.544552206993103,-0.5200443267822266,-0.5441441535949707,-0.5192134380340576,-0.5434141755104065,-0.5179857611656189,-0.542346179485321,-0.5164980292320251,-0.541022777557373,-0.5148156881332397,-0.5394992828369141,-0.5129062533378601,-0.5377427935600281,-0.5108166337013245,-0.5357125997543335,-0.5086457133293152,-0.5334264039993286,-0.5064231157302856,-0.5309809446334839,-0.5041735768318176,-0.5284898281097412,-0.501957893371582,-0.5259407162666321,-0.4997645318508148,-0.5232195854187012,-0.49752259254455566,-0.5203320384025574,-0.4952189326286316,-0.5174044966697693,-0.4928598403930664,-0.5144237279891968,-0.49038657546043396,-0.5112305283546448,-0.48774129152297974,-0.5077933073043823,-0.48493388295173645,-0.5042111873626709,-0.4819803535938263,-0.5004695653915405,-0.47884082794189453,-0.49646249413490295,-0.4754530191421509,-0.4921858608722687,-0.47181081771850586,-0.48766329884529114,-0.4679860472679138,-0.4828302264213562,-0.4640211760997772,-0.4776991307735443,-0.45984530448913574,-0.4724256694316864,-0.4554009437561035,-0.4670521914958954,-0.45078036189079285,-0.46145713329315186,-0.44608256220817566,-0.45564666390419006,-0.4412424862384796,-0.4497779309749603,-0.43617334961891174,-0.44387221336364746,-0.43095916509628296,-0.4378197193145752,-0.4257330596446991,-0.43161824345588684,-0.4204648733139038,-0.4253285229206085,-0.4150194823741913,-0.4189133048057556,-0.4093530774116516,-0.41232648491859436,-0.40354013442993164,-0.40559619665145874,-0.39763739705085754,-0.3987126648426056,-0.3915990889072418,-0.3916330635547638,-0.3853526711463928,-0.38440752029418945,-0.3789190351963043,-0.37710270285606384,-0.37238672375679016,-0.36967653036117554,-0.36577948927879333,-0.3620924651622772,-0.3590465188026428,-0.35440847277641296,-0.3521696627140045,-0.3466413915157318,-0.3451785445213318,-0.3387884497642517,-0.33814793825149536,-0.3308127522468567,-0.33104076981544495,-0.3227776885032654,-0.32384273409843445,-0.31471219658851624,-0.31652259826660156,-0.30657118558883667,-0.3090512454509735,-0.2983539402484894,-0.30152422189712524,-0.2901151776313782,-0.2940562069416046,-0.2818600535392761,-0.2865472733974457,-0.273529976606369,-0.2788337171077728,-0.2650870978832245,-0.27100440859794617,-0.2565560042858124,-0.2632352113723755,-0.2479782998561859,-0.25543200969696045,-0.2393481284379959,-0.24740611016750336,-0.2306208461523056,-0.23924009501934052,-0.22179831564426422,-0.23113234341144562,-0.21295014023780823,-0.22305995225906372,-0.20411615073680878,-0.21488721668720245,-0.19526320695877075,-0.20662233233451843,-0.1863834410905838,-0.19836333394050598,-0.17753858864307404,-0.19014336168766022,-0.16875573992729187,-0.18192589282989502,-0.1599741280078888,-0.17364239692687988,-0.15114164352416992,-0.16524434089660645,-0.14228147268295288,-0.15676435828208923,-0.13342416286468506,-0.1482381820678711,-0.12454365193843842,-0.13959383964538574,-0.11561007052659988,-0.13077281415462494,-0.10667137056589127,-0.12187683582305908,-0.09781067073345184,-0.11302471160888672,-0.08900970220565796,-0.10418687015771866,-0.08015486598014832,-0.09531546384096146,-0.07122906297445297,-0.08648769557476044,-0.06236971542239189,-0.07779493927955627,-0.05368009954690933,-0.0692458227276802,-0.04515216499567032,-0.0608653724193573,-0.036801550537347794,-0.05274923890829086,-0.028654571622610092,-0.04495047777891159,-0.020618632435798645,-0.03741208463907242,-0.012603923678398132,-0.03005238249897957,-0.004660770297050476,-0.022837206721305847,0.0032375603914260864,-0.01571357250213623,0.011317364871501923,-0.008542641997337341,0.01970715820789337,-0.0011973455548286438,0.028333887457847595,0.0063246265053749084,0.0372132882475853,0.014011144638061523,0.04643452912569046,0.021950438618659973,0.05588231235742569,0.03010193258523941,0.06538072973489761,0.03810767084360123,0.07491307705640793,0.04572763293981552,0.08436762541532516,0.05330805480480194,0.09348076581954956,0.06125878542661667,0.10222368687391281,0.06920412927865982,0.11063101887702942,0.07641875743865967,0.11829406023025513,0.08306580036878586,0.1248847246170044,0.09005635231733322,0.1309305727481842,0.09756209701299667,0.13703811168670654,0.10473161935806274,0.14279481768608093,0.11117547750473022,0.1475921869277954,0.11762325465679169,0.15196004509925842,0.1246354728937149,0.15684883296489716,0.1316998451948166,0.1621231585741043,0.1381763368844986,0.1669425070285797,0.1442692130804062,0.17123211920261383,0.15050184726715088,0.17575912177562714,0.15688656270503998,0.18093281984329224,0.16307076811790466,0.18630343675613403,0.16888675093650818,0.19129076600074768,0.17447316646575928,0.1959274560213089,0.1800549030303955,0.2006806880235672,0.18569731712341309,0.20578977465629578,0.1912769377231598,0.21109235286712646,0.19677548110485077,0.21643885970115662,0.20245715975761414,0.22195398807525635,0.20854544639587402,0.22783887386322021,0.21492406725883484,0.23414868116378784,0.22138294577598572,0.2408096045255661,0.22791072726249695,0.24772141873836517,0.2345348745584488,0.2548198699951172,0.24109560251235962,0.26203206181526184,0.24734240770339966,0.26913875341415405,0.2531210780143738,0.2757990062236786,0.25837716460227966,0.2817825675010681,0.26302066445350647,0.28703317046165466,0.26686960458755493,0.2914980947971344,0.2698267996311188,0.2951238453388214,0.27205488085746765,0.29802095890045166,0.27380669116973877,0.3004281520843506,0.27521419525146484,0.30253762006759644,0.2764592170715332,0.3044890761375427,0.2779090106487274,0.30645057559013367,0.27983519434928894,0.3086082339286804,0.2822890281677246,0.31110501289367676,0.28536826372146606,0.31396785378456116,0.28918546438217163,0.3170616328716278,0.29356107115745544,0.3201717436313629,0.29820433259010315,0.3231307864189148,0.3030858337879181,0.3258450925350189,0.308247447013855,0.328314870595932,0.31352299451828003,0.33062970638275146,0.31873950362205505,0.33277279138565063,0.32381922006607056,0.33449500799179077,0.3285626173019409,0.3355770409107208,0.3327631652355194,0.33607345819473267,0.3364887833595276,0.3361404836177826,0.33987191319465637,0.3358767628669739,0.3428524136543274,0.3354545533657074,0.3454176187515259,0.3351161479949951,0.34774285554885864,0.33497175574302673,0.3499442934989929,0.33502712845802307,0.35206130146980286,0.33532264828681946,0.3542133569717407,0.3358570337295532,0.3563973605632782,0.33655038475990295,0.35835447907447815,0.33737021684646606,0.35992562770843506,0.3382839858531952,0.36120814085006714,0.3391556143760681,0.3622129559516907,0.3399306535720825,0.3627970814704895,0.340738445520401,0.36299434304237366,0.34162911772727966,0.36302265524864197,0.34250450134277344,0.3629917502403259,0.34339553117752075,0.36288395524024963,0.3444414734840393,0.36270594596862793,0.34560033679008484,0.3624858260154724,0.34673959016799927,0.3622548580169678,0.3479076623916626,0.3620994985103607,0.349197655916214,0.3621264100074768,0.3505156636238098,0.36238744854927063,0.3517214357852936,0.3628728985786438,0.35284072160720825,0.3635386526584625,0.3538372218608856,0.3641984164714813,0.354625403881073,0.36477917432785034,0.35517418384552,0.3654242753982544,0.35551297664642334,0.3663182854652405,0.3556709885597229,0.36749815940856934,0.3556704521179199,0.3688485622406006,0.35551950335502625,0.37021782994270325,0.3551963269710541,0.3715476989746094,0.3546697497367859,0.37288153171539307,0.35392022132873535,0.37423309683799744,0.3529627323150635,0.37555593252182007,0.3518728017807007,0.37683695554733276,0.3507084548473358,0.3780277371406555,0.34938400983810425,0.3789185583591461,0.34771719574928284,0.3792995512485504,0.3455829322338104,0.3791392147541046,0.3429500460624695,0.37842699885368347,0.33985161781311035,0.3770616948604584,0.3363795876502991,0.37503236532211304,0.33264100551605225,0.3724556863307953,0.32876861095428467,0.3694303035736084,0.3250260651111603,0.36613425612449646,0.32172974944114685,0.3629182279109955,0.31904760003089905,0.36003610491752625,0.3171144723892212,0.3575168550014496,0.3162133991718292,0.3554316759109497,0.31647419929504395,0.35392361879348755,0.31762418150901794,0.35296547412872314,0.31939736008644104,0.3524459898471832,0.32169878482818604,0.3522231876850128,0.32382136583328247,0.3515649437904358,0.323943555355072,0.34879955649375916,0.31993407011032104,0.3419891595840454,0.31043753027915955,0.3298355042934418,0.29507070779800415,0.3119099736213684,0.27397388219833374,0.28838664293289185,0.24728214740753174,0.2595595121383667,0.21489554643630981,0.2254326194524765,0.17702044546604156,0.1861249804496765,0.13509336113929749,0.14292919635772705,0.09184535592794418,0.0985659807920456,0.05040176957845688,0.05621499568223953,0.01354043185710907,0.018598206341266632,-0.016510628163814545,-0.012152232229709625,-0.03795430064201355,-0.03417684882879257,-0.048723407089710236,-0.045258983969688416,-0.045718543231487274,-0.04232113063335419,-0.025622978806495667,-0.022208139300346375,0.012788698077201843,0.016318827867507935,0.067243292927742,0.07123502343893051,0.13267022371292114,0.13764043152332306,0.20275083184242249,0.209126278758049,0.27113276720046997,0.27916431427001953,0.33227863907814026,0.3421016037464142,0.38191530108451843,0.3935193717479706,0.41712698340415955,0.4302797317504883,0.4366118311882019,0.45090678334236145,0.4410606920719147,0.45601534843444824,0.4329354763031006,0.44800302386283875,0.4156544506549835,0.43021994829177856,0.39290153980255127,0.40635135769844055,0.36821553111076355,0.3800208568572998,0.3446190655231476,0.3543797731399536,0.32438135147094727,0.3318696916103363,0.30896732211112976,0.31416574120521545,0.2989675998687744,0.302045077085495,0.29409757256507874,0.2953417897224426,0.29348260164260864,0.29323530197143555,0.2960135340690613,0.2946128845214844,0.3005402088165283,0.2982521057128906,0.3060187101364136,0.3029651343822479,0.31161439418792725,0.30772703886032104,0.31662559509277344,0.31167834997177124,0.32043734192848206,0.31415697932243347,0.3227097988128662,0.31484824419021606,0.32350826263427734,0.313800573348999,0.3231211006641388,0.3112623393535614,0.3218221068382263,0.3076017498970032,0.319834440946579,0.3033114969730377,0.31740814447402954,0.2989150285720825,0.31485068798065186,0.2948548495769501,0.3124483525753021,0.2914617955684662,0.31033024191856384,0.2889053225517273,0.3084651231765747,0.28716087341308594,0.3068024814128876,0.2860954999923706,0.3052840530872345,0.2855125665664673,0.30369892716407776,0.28507593274116516,0.30171483755111694,0.2843456566333771,0.2990935146808624,0.2829536199569702,0.295750230550766,0.28065529465675354,0.29166868329048157,0.2772802710533142,0.2869117259979248,0.2727862298488617,0.28164681792259216,0.2673061490058899,0.2760713994503021,0.2610625922679901,0.27038443088531494,0.25432145595550537,0.26479262113571167,0.24741120636463165,0.2594027817249298,0.24062642455101013,0.25418317317962646,0.23414039611816406,0.24914424121379852,0.22811943292617798,0.24441100656986237,0.2227998822927475,0.2400449812412262,0.21833443641662598,0.2359958440065384,0.2146882712841034,0.23225922882556915,0.2117394655942917,0.2288622409105301,0.20933091640472412,0.22570477426052094,0.20720435678958893,0.22260309755802155,0.20500941574573517,0.21942651271820068,0.2023804634809494,0.21604958176612854,0.1989881694316864,0.2122812718153,0.1946185678243637,0.20795966684818268,0.18923088908195496,0.20303267240524292,0.1828848272562027,0.19751881062984467,0.1756948083639145,0.1914731115102768,0.16792836785316467,0.18498684465885162,0.1600073128938675,0.17818424105644226,0.15231330692768097,0.17123626172542572,0.14508582651615143,0.16434428095817566,0.13850338757038116,0.15764987468719482,0.1326969563961029,0.1512037068605423,0.12764720618724823,0.14503470063209534,0.12316109985113144,0.13916251063346863,0.11896595358848572,0.13355253636837006,0.11481080204248428,0.12815110385417938,0.11050844192504883,0.12291742116212845,0.10589440912008286,0.11774105578660965,0.10077223181724548,0.11239765584468842,0.09496051073074341,0.10665403306484222,0.08838188648223877,0.1003800556063652,0.08106671273708344,0.09346766024827957,0.07306445389986038,0.08584439754486084,0.06449486315250397,0.07751166075468063,0.0555633008480072,0.06856295466423035,0.046484850347042084,0.059176962822675705,0.03744354099035263,0.04958879575133324,0.02862597443163395,0.0400613471865654,0.020237747579813004,0.03086978569626808,0.012458212673664093,0.02223091758787632,0.0053418781608343124,0.01419978216290474,-0.001248285174369812,0.006708775646984577,-0.0075348149985075,-0.0002906918525695801,-0.013653511181473732,-0.006836937740445137,-0.01968599110841751,-0.013062719255685806,-0.02580053173005581,-0.019140519201755524,-0.03219126909971237,-0.025186140090227127,-0.038921840488910675,-0.03132248297333717,-0.04595652595162392,-0.03771370276808739,-0.05326448380947113,-0.044453129172325134,-0.060802243649959564,-0.05154811590909958,-0.06848271191120148,-0.05902509018778801,-0.07619261741638184,-0.06691370159387589,-0.08379656076431274,-0.0751795619726181,-0.09120871871709824,-0.08378754556179047,-0.0985087901353836,-0.09274525940418243,-0.10586851090192795,-0.10203513503074646,-0.11339233070611954,-0.1116054505109787,-0.12117552012205124,-0.12139799445867538,-0.12939989566802979,-0.1313091218471527,-0.1381993591785431,-0.1412314921617508,-0.147567480802536,-0.1511681228876114,-0.15748564898967743,-0.16116419434547424,-0.16794219613075256,-0.1711844801902771,-0.178798109292984,-0.18121357262134552,-0.18982529640197754,-0.1913289576768875,-0.2008262723684311,-0.20152945816516876,-0.21157817542552948,-0.21168290078639984,-0.22180645167827606,-0.22168974578380585,-0.2313070297241211,-0.23146215081214905,-0.23995310068130493,-0.24079033732414246,-0.24763138592243195,-0.24947047233581543,-0.25434255599975586,-0.2574461102485657,-0.2602357864379883,-0.26465606689453125,-0.2654263377189636,-0.2709711790084839,-0.26997777819633484,-0.27640077471733093,-0.2740896940231323,-0.28114989399909973,-0.27805638313293457,-0.2854735553264618,-0.28208595514297485,-0.2896733283996582,-0.2863636612892151,-0.2941269874572754,-0.2911421060562134,-0.299156129360199,-0.2965962886810303,-0.30497097969055176,-0.30276089906692505,-0.31174346804618835,-0.3096446990966797,-0.3195430338382721,-0.3172059655189514,-0.32825422286987305,-0.3252774477005005,-0.3376973867416382,-0.33369049429893494,-0.34769386053085327,-0.3423401415348053,-0.3579603135585785,-0.3510512709617615,-0.3681504428386688,-0.3595849275588989,-0.37799546122550964,-0.36778882145881653,-0.38724061846733093,-0.3755456507205963,-0.3955906927585602,-0.3826776444911957,-0.40288683772087097,-0.3890700340270996,-0.4091619551181793,-0.3947434425354004,-0.41446515917778015,-0.3997305929660797,-0.4188607931137085,-0.40407246351242065,-0.4225817620754242,-0.4079211950302124,-0.42594799399375916,-0.4114592969417572,-0.42920154333114624,-0.41479772329330444,-0.4325565695762634,-0.41806554794311523,-0.4362483620643616,-0.4214438498020172,-0.4404276907444,-0.4250420928001404,-0.4451479911804199,-0.42889899015426636,-0.45045268535614014,-0.43308261036872864,-0.4563312530517578,-0.4376424252986908,-0.4626504182815552,-0.44253748655319214,-0.4692232012748718,-0.44769778847694397,-0.47585803270339966,-0.45304206013679504,-0.4823276400566101,-0.4584178030490875,-0.4884132742881775,-0.4636516273021698,-0.493976354598999,-0.4686329960823059,-0.4989304542541504,-0.47326552867889404,-0.5032305717468262,-0.4774376451969147,-0.5069249272346497,-0.4811008870601654,-0.5101109147071838,-0.4842684268951416,-0.5128448009490967,-0.48692530393600464,-0.5151772499084473,-0.489045113325119,-0.5172102451324463,-0.4906660318374634,-0.5190343856811523,-0.4918709993362427,-0.5206844806671143,-0.4927436411380768,-0.522188127040863,-0.49338048696517944,-0.5235728621482849,-0.493878036737442,-0.524824857711792,-0.49429672956466675,-0.5259182453155518,-0.4946802854537964,-0.5268622040748596,-0.4950801134109497,-0.5276737809181213,-0.4955251216888428,-0.5283466577529907,-0.4960111081600189,-0.5288761854171753,-0.4965241551399231,-0.5292695164680481,-0.49703070521354675,-0.5295256972312927,-0.4974631071090698,-0.5296366214752197,-0.49775710701942444,-0.5296010971069336,-0.4978855848312378,-0.5294173359870911,-0.4978395700454712,-0.5290791988372803,-0.49760928750038147,-0.5285782217979431,-0.4971923828125,-0.5278950333595276,-0.4965905249118805,-0.5270002484321594,-0.4957980513572693,-0.5258727073669434,-0.4948074221611023,-0.5245072245597839,-0.4936217963695526,-0.5229060649871826,-0.49225279688835144,-0.5210745334625244,-0.49071353673934937,-0.5190219283103943,-0.489006906747818,-0.5167518258094788,-0.4871183931827545,-0.5142611265182495,-0.4850262403488159,-0.5115514397621155,-0.4827241599559784,-0.5086349248886108,-0.4802265465259552,-0.5055283308029175,-0.47755685448646545,-0.5022464990615845,-0.47473302483558655,-0.4987978935241699,-0.4717614948749542,-0.49517983198165894,-0.4686356782913208,-0.4913797676563263,-0.4653436839580536,-0.487384557723999,-0.4618803858757019,-0.4831897020339966,-0.4582536518573761,-0.47879987955093384,-0.4544786214828491,-0.4742203950881958,-0.4505634307861328,-0.46944403648376465,-0.4464946985244751,-0.46444201469421387,-0.44223523139953613,-0.4591920077800751,-0.43775704503059387,-0.45380234718322754,-0.4331594705581665,-0.4482576847076416,-0.4284302294254303,-0.44253525137901306,-0.42354726791381836,-0.4366333782672882,-0.4185048043727875,-0.43056467175483704,-0.4133080244064331,-0.42434409260749817,-0.4079691767692566,-0.41797903180122375,-0.4025009870529175,-0.41146841645240784,-0.3969133198261261,-0.40480536222457886,-0.3912079930305481,-0.39798280596733093,-0.3853793740272522,-0.3909948766231537,-0.37941497564315796,-0.3838372826576233,-0.3733018636703491,-0.3765070140361786,-0.3670300245285034,-0.3690025210380554,-0.3605952560901642,-0.36132562160491943,-0.35399699211120605,-0.3534850478172302,-0.347239226102829,-0.3455008566379547,-0.3403315842151642,-0.3374013602733612,-0.3332901895046234,-0.3292185664176941,-0.32613515853881836,-0.3209799826145172,-0.31888967752456665,-0.312707781791687,-0.3115767538547516,-0.3044171929359436,-0.30421483516693115,-0.2961137294769287,-0.2968105673789978,-0.287792831659317,-0.28936243057250977,-0.2794452905654907,-0.2818763852119446,-0.2710641622543335,-0.2743810713291168,-0.26264554262161255,-0.26692333817481995,-0.25418442487716675,-0.25954583287239075,-0.2456752061843872,-0.2522677481174469,-0.23711907863616943,-0.24508249759674072,-0.22852902114391327,-0.2379646897315979,-0.21992439031600952,-0.23087120056152344,-0.21132147312164307,-0.2237369269132614,-0.2027295082807541,-0.21647736430168152,-0.1941550076007843,-0.20900630950927734,-0.18560859560966492,-0.2012595534324646,-0.17710696160793304,-0.1932099461555481,-0.16866502165794373,-0.18486526608467102,-0.16027802228927612,-0.17625293135643005,-0.15190652012825012,-0.16740408539772034,-0.14347873628139496,-0.1583499312400818,-0.13491913676261902,-0.1491309106349945,-0.1261826902627945,-0.13980576395988464,-0.11727005243301392,-0.13044916093349457,-0.10821488499641418,-0.12113991379737854,-0.09906162321567535,-0.11194673925638199,-0.08985001593828201,-0.10291466861963272,-0.08060862869024277,-0.09405313432216644,-0.07135115563869476,-0.08533615618944168,-0.06207706779241562,-0.07672415673732758,-0.0527779683470726,-0.06819739192724228,-0.04344412684440613,-0.0597696527838707,-0.03406934440135956,-0.05147016420960426,-0.024658385664224625,-0.04331723600625992,-0.015245087444782257,-0.035315826535224915,-0.0059119537472724915,-0.02747313305735588,0.0032121874392032623,-0.01980186440050602,0.011983063071966171,-0.012294502928853035,0.020283903926610947,-0.004899730905890465,0.02805602177977562,0.0024668164551258087,0.035305388271808624,0.009879233315587044,0.04209442436695099,0.017361540347337723,0.048530109226703644,0.024878814816474915,0.054752327501773834,0.03234849125146866,0.060921311378479004,0.039657074958086014,0.06720253825187683,0.04667987674474716,0.0737491250038147,0.053318336606025696,0.08068063110113144,0.05954745411872864,0.08805586397647858,0.06543652713298798,0.09584701061248779,0.07112129032611847,0.10393153131008148,0.0767485499382019,0.11212043464183807,0.08244599401950836,0.12021806091070175,0.08833739906549454,0.1280810832977295,0.09456155449151993,0.13564449548721313,0.10125024616718292,0.1429145187139511,0.10847346484661102,0.14995212852954865,0.11621200293302536,0.15686100721359253,0.12438612431287766,0.1637716144323349,0.13290725648403168,0.17080920934677124,0.1417008340358734,0.17805525660514832,0.15069368481636047,0.18551437556743622,0.15979520976543427,0.19309350848197937,0.16889125108718872,0.20060132443904877,0.1778457760810852,0.20778822898864746,0.1865084320306778,0.2144312858581543,0.1947418451309204,0.22041860222816467,0.20246091485023499,0.22577153146266937,0.20964892208576202,0.2305883765220642,0.21632149815559387,0.23496666550636292,0.22246390581130981,0.23896241188049316,0.22799497842788696,0.24260258674621582,0.23279574513435364,0.24591892957687378,0.23678524792194366,0.248972088098526,0.23999035358428955,0.2518520653247833,0.24255631864070892,0.2546519935131073,0.2446899116039276,0.2574346661567688,0.24658453464508057,0.26022133231163025,0.24839113652706146,0.26301535964012146,0.25023961067199707,0.2658284306526184,0.2522519826889038,0.268677294254303,0.25450819730758667,0.2715691924095154,0.25701192021369934,0.27451860904693604,0.2597254514694214,0.2775866389274597,0.2626533806324005,0.2808864414691925,0.2658756375312805,0.28452950716018677,0.2694924473762512,0.28857049345970154,0.27355408668518066,0.29300549626350403,0.2780616283416748,0.29779940843582153,0.28300735354423523,0.3028869032859802,0.28836995363235474,0.3081473112106323,0.2940548062324524,0.3134058713912964,0.2998628318309784,0.3184770941734314,0.30553561449050903,0.3232085108757019,0.31082984805107117,0.3274981677532196,0.3155636787414551,0.33131009340286255,0.3196343183517456,0.334693044424057,0.3230331242084503,0.3377578556537628,0.3258383572101593,0.34059277176856995,0.3281615078449249,0.3431852161884308,0.3300800919532776,0.3454265296459198,0.3316163420677185,0.34718337655067444,0.33276650309562683,0.34835436940193176,0.33353832364082336,0.3488852083683014,0.33397525548934937,0.34878212213516235,0.33417609333992004,0.34813082218170166,0.3342997133731842,0.3470771014690399,0.33452531695365906,0.3457757234573364,0.3350061774253845,0.34440669417381287,0.33591654896736145,0.34304994344711304,0.3373476266860962,0.3417830169200897,0.3393924832344055,0.34067779779434204,0.34211084246635437,0.33976149559020996,0.3454728424549103,0.3390282690525055,0.3493778705596924,0.33848339319229126,0.3537086248397827,0.33814239501953125,0.35832053422927856,0.33798927068710327,0.36298319697380066,0.3379756510257721,0.367387592792511,0.33807292580604553,0.37124550342559814,0.33829233050346375,0.37436410784721375,0.3386392295360565,0.37662485241889954,0.3390907347202301,0.3779562711715698,0.3396499454975128,0.3783873915672302,0.34038105607032776,0.3781013786792755,0.3413267135620117,0.37735795974731445,0.3423877954483032,0.3763378858566284,0.3433307409286499,0.3750898241996765,0.34391772747039795,0.37361714243888855,0.3439900279045105,0.3719516694545746,0.3434370756149292,0.37012267112731934,0.34218382835388184,0.36813002824783325,0.3402870297431946,0.3660232126712799,0.3380109965801239,0.36398354172706604,0.3357272148132324,0.36226099729537964,0.33372917771339417,0.3610217273235321,0.3321700394153595,0.36028921604156494,0.3311302959918976,0.36000531911849976,0.33064302802085876,0.36006680130958557,0.3306368291378021,0.3602849245071411,0.33094003796577454,0.36038947105407715,0.3313939571380615,0.36014264822006226,0.3319329023361206,0.3594413101673126,0.33255091309547424,0.3583035469055176,0.333262175321579,0.35682225227355957,0.33412057161331177,0.35518160462379456,0.33519402146339417,0.3536582589149475,0.33643603324890137,0.35249993205070496,0.33761170506477356,0.3517909646034241,0.338399201631546,0.3514852523803711,0.3385346829891205,0.35154107213020325,0.3378342092037201,0.35194092988967896,0.3361801505088806,0.35261058807373047,0.3336349129676819,0.35345658659935,0.3305266201496124,0.35447537899017334,0.32715994119644165,0.3555591106414795,0.32322508096694946,0.3559531271457672,0.3175520896911621,0.3540116250514984,0.3086777627468109,0.3478134274482727,0.2957591712474823,0.33618342876434326,0.2788720726966858,0.31906312704086304,0.25848230719566345,0.29696816205978394,0.23497503995895386,0.2704699635505676,0.20897898077964783,0.24048924446105957,0.18193909525871277,0.20885144174098969,0.1558382213115692,0.17798171937465668,0.13207562267780304,0.14971758425235748,0.11074550449848175,0.12449001520872116,0.09111859649419785,0.10174734145402908,0.07264640182256699,0.0810067430138588,0.055400654673576355,0.06237410008907318,0.03992924839258194,0.04639582708477974,0.02733016386628151,0.034069087356328964,0.019738657400012016,0.027350082993507385,0.020428039133548737,0.02936420403420925,0.03283391892910004,0.04347808286547661,0.058930449187755585,0.0716032087802887,0.09811178594827652,0.11300875246524811,0.14728772640228271,0.1644417643547058,0.20188573002815247,0.2211862951517105,0.25695711374282837,0.27817416191101074,0.30791592597961426,0.33069124817848206,0.350985586643219,0.3748006820678711,0.3835350275039673,0.40769463777542114,0.40427765250205994,0.4279574751853943,0.4132527709007263,0.4356182813644409,0.41165298223495483,0.43197256326675415,0.4015686511993408,0.41925567388534546,0.38561078906059265,0.4002455770969391,0.366449773311615,0.37785640358924866,0.34647783637046814,0.3547900319099426,0.3276962637901306,0.3333113193511963,0.3116696774959564,0.3151399791240692,0.29941827058792114,0.3013957142829895,0.2913617491722107,0.2925622761249542,0.2874203622341156,0.28850555419921875,0.2871525287628174,0.2885909676551819,0.2898179292678833,0.29186418652534485,0.29446321725845337,0.297207772731781,0.30010247230529785,0.3034416735172272,0.3058544397354126,0.30943411588668823,0.3109593391418457,0.314269483089447,0.31481796503067017,0.31740063428878784,0.3171224594116211,0.3186621069908142,0.3178839385509491,0.3181406259536743,0.31725195050239563,0.316037118434906,0.31534016132354736,0.31262126564979553,0.31226426362991333,0.3082268536090851,0.308246910572052,0.30319613218307495,0.3035838305950165,0.29779696464538574,0.2985372245311737,0.29221609234809875,0.29333794116973877,0.2866310179233551,0.2882595360279083,0.281252384185791,0.28361350297927856,0.27627500891685486,0.27966001629829407,0.2718202471733093,0.27655261754989624,0.2679551839828491,0.2743443250656128,0.26474589109420776,0.2729955017566681,0.26223862171173096,0.27235203981399536,0.2603779137134552,0.2721307873725891,0.2589706778526306,0.2719634175300598,0.2577463686466217,0.27150285243988037,0.2564413845539093,0.27051520347595215,0.25483351945877075,0.26887375116348267,0.2527434229850769,0.26650017499923706,0.25004786252975464,0.2633804380893707,0.2466958910226822,0.25963321328163147,0.2426961213350296,0.2554643154144287,0.23809194564819336,0.2510066032409668,0.23295894265174866,0.24626436829566956,0.227402463555336,0.24122701585292816,0.2215176224708557,0.23593056201934814,0.2153458595275879,0.23035825788974762,0.20890077948570251,0.2243967056274414,0.20224258303642273,0.21798449754714966,0.19549128413200378,0.2112288475036621,0.1887451559305191,0.20431013405323029,0.18202441930770874,0.19738520681858063,0.17536643147468567,0.19055110216140747,0.16883938014507294,0.1839984655380249,0.16257824003696442,0.17794819176197052,0.15667736530303955,0.1724846512079239,0.15111711621284485,0.16753928363323212,0.14582769572734833,0.1630040556192398,0.14079080522060394,0.1587768942117691,0.13602802157402039,0.15470734238624573,0.13150058686733246,0.1505787968635559,0.1270667314529419,0.1461588740348816,0.12255257368087769,0.14124834537506104,0.11782138049602509,0.1357063204050064,0.1127522885799408,0.12947916984558105,0.10719695687294006,0.12260617315769196,0.10102201998233795,0.11518053710460663,0.09419147670269012,0.1073247492313385,0.08678228408098221,0.09920886158943176,0.07892881333827972,0.09102530777454376,0.07078107446432114,0.08291636407375336,0.06251612305641174,0.07497084140777588,0.054358579218387604,0.06728880852460861,0.0465414822101593,0.05996242165565491,0.03921813145279884,0.05297655612230301,0.03241787850856781,0.046202197670936584,0.026083573698997498,0.03949197754263878,0.020098615437746048,0.03272058069705963,0.01425711065530777,0.025761678814888,0.0082787424325943,0.01850035786628723,0.0019084513187408447,0.010851874947547913,-0.005016744136810303,0.0027487576007843018,-0.01258590817451477,-0.005826480686664581,-0.020820386707782745,-0.014778167009353638,-0.02963588386774063,-0.023947954177856445,-0.03883322328329086,-0.03323911130428314,-0.04814644157886505,-0.04261285811662674,-0.05732439458370209,-0.05197104811668396,-0.06621380895376205,-0.061148837208747864,-0.07475987076759338,-0.07004342973232269,-0.0829121470451355,-0.07866489887237549,-0.09059935808181763,-0.08702351152896881,-0.0978403389453888,-0.0950472503900528,-0.10478620231151581,-0.10268557071685791,-0.1115979254245758,-0.11004021763801575,-0.11836123466491699,-0.11728629469871521,-0.1251428872346878,-0.12451077997684479,-0.1320313811302185,-0.1317625343799591,-0.13910743594169617,-0.1392054706811905,-0.14642347395420074,-0.1470346599817276,-0.1539798080921173,-0.15527844429016113,-0.16170451045036316,-0.16384781897068024,-0.16952913999557495,-0.17271344363689423,-0.17747634649276733,-0.181866854429245,-0.18558655679225922,-0.19120028614997864,-0.1938110888004303,-0.20056191086769104,-0.20207038521766663,-0.20982769131660461,-0.21033170819282532,-0.21886520087718964,-0.21855482459068298,-0.2275872528553009,-0.22667238116264343,-0.2360503226518631,-0.23466581106185913,-0.24435371160507202,-0.24255190789699554,-0.2525116801261902,-0.2503094971179962,-0.26056379079818726,-0.25791803002357483,-0.2686459720134735,-0.265402227640152,-0.2768164277076721,-0.2727625370025635,-0.2849910259246826,-0.27996397018432617,-0.2931184768676758,-0.28702080249786377,-0.3011983036994934,-0.29396578669548035,-0.3091249167919159,-0.3007667064666748,-0.3167557120323181,-0.3074030876159668,-0.32409340143203735,-0.3139421045780182,-0.33121705055236816,-0.32043159008026123,-0.3381509780883789,-0.32684582471847534,-0.34494221210479736,-0.3331971764564514,-0.3517029881477356,-0.3395477533340454,-0.35848891735076904,-0.345898300409317,-0.3653014898300171,-0.35221612453460693,-0.37220367789268494,-0.3585188388824463,-0.3792582154273987,-0.3648207187652588,-0.38640761375427246,-0.37110307812690735,-0.393545538187027,-0.37739109992980957,-0.40060749650001526,-0.3837079405784607,-0.4075193405151367,-0.3899625539779663,-0.4141964614391327,-0.3960525691509247,-0.42061641812324524,-0.4020005464553833,-0.42677319049835205,-0.40783387422561646,-0.4326091706752777,-0.4134617745876312,-0.4380987286567688,-0.4187893271446228,-0.44331538677215576,-0.4238043427467346,-0.4483404755592346,-0.42851030826568604,-0.45318907499313354,-0.4329345226287842,-0.45785045623779297,-0.4371677339076996,-0.46233269572257996,-0.4412577748298645,-0.46668684482574463,-0.4451722502708435,-0.47099173069000244,-0.44895413517951965,-0.47526106238365173,-0.45273566246032715,-0.4794234335422516,-0.4565529525279999,-0.48346206545829773,-0.460336834192276,-0.487442284822464,-0.4640561640262604,-0.49133917689323425,-0.4676953852176666,-0.49503153562545776,-0.4711844027042389,-0.49849700927734375,-0.4744860529899597,-0.5017921328544617,-0.4776119589805603,-0.5048731565475464,-0.48050105571746826,-0.5076683163642883,-0.48306500911712646,-0.5102288126945496,-0.4853420853614807,-0.5126030445098877,-0.48742344975471497,-0.5147296190261841,-0.4893101155757904,-0.5166022181510925,-0.49098825454711914,-0.518316924571991,-0.4925043284893036,-0.519883930683136,-0.4938730001449585,-0.5212352275848389,-0.4950759708881378,-0.522398829460144,-0.4961559772491455,-0.5234311819076538,-0.4971415400505066,-0.5242810845375061,-0.4979563057422638,-0.5249060392379761,-0.49855610728263855,-0.5253487229347229,-0.4990082085132599,-0.525596022605896,-0.4993344843387604,-0.5255888104438782,-0.49945956468582153,-0.5253779292106628,-0.49935832619667053,-0.5250194072723389,-0.4990674555301666,-0.5244154930114746,-0.4985846281051636,-0.5235034823417664,-0.4979121685028076,-0.522404134273529,-0.49709317088127136,-0.5211771130561829,-0.49610140919685364,-0.5196942687034607,-0.4948584735393524,-0.517902135848999,-0.4933931529521942,-0.5159035325050354,-0.4917854070663452)\n\
+\n\
+,\n\
+\n\
+new Array(-0.5137231945991516,-0.49000853300094604,-0.5113903284072876,-0.488100528717041,-0.5088633298873901,-0.48603248596191406,-0.5061661005020142,-0.4837847948074341,-0.5032707452774048,-0.4813406467437744,-0.5001466274261475,-0.4787534177303314,-0.49685049057006836,-0.4760761260986328,-0.49342668056488037,-0.4732472896575928,-0.4898289442062378,-0.47021234035491943,-0.4860019385814667,-0.467038094997406,-0.48194417357444763,-0.4637599587440491,-0.4776892066001892,-0.46030497550964355,-0.4732748866081238,-0.45665597915649414,-0.46869802474975586,-0.4528677761554718,-0.46391454339027405,-0.4489230215549469,-0.45892152190208435,-0.4447893500328064,-0.4537576138973236,-0.44052648544311523,-0.4484187066555023,-0.4361549913883209,-0.44290804862976074,-0.4315980076789856,-0.4373047649860382,-0.4268632233142853,-0.4316164255142212,-0.42204850912094116,-0.42571672797203064,-0.41714534163475037,-0.4195888936519623,-0.41207751631736755,-0.4133991301059723,-0.40687015652656555,-0.40720468759536743,-0.401580274105072,-0.4008715748786926,-0.39620015025138855,-0.3943476378917694,-0.39074966311454773,-0.3877306580543518,-0.3852769136428833,-0.38106489181518555,-0.3797324001789093,-0.3743053674697876,-0.3740321695804596,-0.3674202561378479,-0.3681885004043579,-0.3603806793689728,-0.36222216486930847,-0.3531627357006073,-0.35607028007507324,-0.34580618143081665,-0.3496861755847931,-0.3383495807647705,-0.3430899977684021,-0.3307521343231201,-0.3362985849380493,-0.3229793906211853,-0.3293401896953583,-0.315058171749115,-0.32228440046310425,-0.30699875950813293,-0.315151184797287,-0.2987874746322632,-0.30789127945899963,-0.29045185446739197,-0.30051279067993164,-0.28202396631240845,-0.29308781027793884,-0.2735027074813843,-0.2856077551841736,-0.2649257779121399,-0.27798640727996826,-0.2563796639442444,-0.2702132761478424,-0.24790993332862854,-0.2623620629310608,-0.23951497673988342,-0.2544562816619873,-0.23120757937431335,-0.24646149575710297,-0.22298353910446167,-0.2383953332901001,-0.21476247906684875,-0.2303106039762497,-0.20644812285900116,-0.22219493985176086,-0.1980222761631012,-0.21401672065258026,-0.18950195610523224,-0.2058141976594925,-0.18083666265010834,-0.19762080907821655,-0.17196400463581085,-0.18940521776676178,-0.1629542112350464,-0.18119071424007416,-0.15394656360149384,-0.17307928204536438,-0.14496801793575287,-0.16509070992469788,-0.13598699867725372,-0.1571563482284546,-0.12707515060901642,-0.14925628900527954,-0.11832299828529358,-0.14137746393680573,-0.10971798002719879,-0.13344717025756836,-0.10125025361776352,-0.1254633218050003,-0.09293901920318604,-0.11750493198633194,-0.08468332141637802,-0.10955502837896347,-0.07634306699037552,-0.10155733674764633,-0.06794353574514389,-0.09359082579612732,-0.0595434196293354,-0.08573566377162933,-0.0510471872985363,-0.0779324322938919,-0.042377568781375885,-0.07014453411102295,-0.03362184390425682,-0.06238359585404396,-0.02486787736415863,-0.05453343316912651,-0.01613004505634308,-0.0464804507791996,-0.007472425699234009,-0.03832215070724487,0.0009909719228744507,-0.030160509049892426,0.00918087363243103,-0.0219377800822258,0.01705806702375412,-0.013661175966262817,0.024636313319206238,-0.0054317861795425415,0.031981587409973145,0.002793937921524048,0.03918281942605972,0.011097252368927002,0.0463932529091835,0.01936565339565277,0.05372148007154465,0.02748739719390869,0.0609898716211319,0.03553415834903717,0.06804285198450089,0.04353989660739899,0.07528826594352722,0.05137953907251358,0.08313757926225662,0.05894308537244797,0.09104142338037491,0.06621246039867401,0.09819495677947998,0.07324355840682983,0.10493610799312592,0.08019237220287323,0.11213169991970062,0.08720662444829941,0.11955674737691879,0.09431906044483185,0.1262604296207428,0.10157740116119385,0.13215814530849457,0.10906890779733658,0.1380482316017151,0.11671863496303558,0.14434769749641418,0.12434201687574387,0.15068860352039337,0.13187485933303833,0.15661653876304626,0.13927049934864044,0.1622142195701599,0.14633619785308838,0.16797444224357605,0.15291756391525269,0.17413830757141113,0.15904036164283752,0.18042199313640594,0.16477809846401215,0.18657466769218445,0.17019487917423248,0.19275277853012085,0.1753728985786438,0.1990659385919571,0.1803634762763977,0.20531892776489258,0.18523544073104858,0.21139419078826904,0.19012044370174408,0.21729907393455505,0.1950494647026062,0.222874253988266,0.1999734342098236,0.228011816740036,0.2050219029188156,0.23290342092514038,0.210371196269989,0.23768731951713562,0.21597397327423096,0.24231691658496857,0.2218102216720581,0.2469380795955658,0.2279721051454544,0.2518135607242584,0.23417289555072784,0.25691327452659607,0.23994697630405426,0.26207083463668823,0.24547690153121948,0.2672507166862488,0.25112250447273254,0.27232447266578674,0.25628194212913513,0.27704593539237976,0.260145902633667,0.28139808773994446,0.26323676109313965,0.28550174832344055,0.2666539251804352,0.2893005907535553,0.27030205726623535,0.29275497794151306,0.27338463068008423,0.29604265093803406,0.2760785222053528,0.29927703738212585,0.27935171127319336,0.302398145198822,0.2835429012775421,0.30541032552719116,0.28810322284698486,0.3083387315273285,0.29246801137924194,0.31105777621269226,0.2966208755970001,0.3135039806365967,0.3009149432182312,0.31568992137908936,0.30537116527557373,0.3176348805427551,0.30956944823265076,0.3193422853946686,0.31316643953323364,0.3208901584148407,0.3162834644317627,0.3223532438278198,0.31914156675338745,0.32372766733169556,0.3216931223869324,0.3250102996826172,0.3238937258720398,0.32619887590408325,0.32591819763183594,0.32724729180336,0.32787463068962097,0.32814714312553406,0.32968413829803467,0.3289378583431244,0.3313487470149994,0.32962244749069214,0.33299732208251953,0.33025267720222473,0.33466023206710815,0.3309943675994873,0.33627644181251526,0.33193162083625793,0.33788472414016724,0.3330099880695343,0.3396027088165283,0.33427178859710693,0.34145987033843994,0.33584967255592346,0.3433850407600403,0.3376842141151428,0.34532588720321655,0.3395330309867859,0.34727874398231506,0.34122443199157715,0.3492124080657959,0.3427020013332367,0.3510623872280121,0.34393221139907837,0.35280218720436096,0.3448846936225891,0.3544255197048187,0.345511257648468,0.35589224100112915,0.3457866907119751,0.35723280906677246,0.34584540128707886,0.3586302697658539,0.34591227769851685,0.3602270781993866,0.3460692763328552,0.36193689703941345,0.3463064730167389,0.36358287930488586,0.34671613574028015,0.36508455872535706,0.3473617732524872,0.3663909435272217,0.3480914235115051,0.36737513542175293,0.34872686862945557,0.36788907647132874,0.3492404818534851,0.3678523302078247,0.34957072138786316,0.3672947287559509,0.3495337665081024,0.3663550615310669,0.349063515663147,0.36519855260849,0.34828177094459534,0.3639591932296753,0.34726089239120483,0.3627973198890686,0.3459911048412323,0.36188578605651855,0.3445943593978882,0.36128389835357666,0.3432638645172119,0.360962837934494,0.3419889211654663,0.36096450686454773,0.3406458795070648,0.36137494444847107,0.33931952714920044,0.36218199133872986,0.3382019102573395,0.36331093311309814,0.3372468650341034,0.36474165320396423,0.33627501130104065,0.3664785623550415,0.33529964089393616,0.36844712495803833,0.3344076871871948,0.3704620599746704,0.33351296186447144,0.37229543924331665,0.3325388431549072,0.3738071024417877,0.3315884470939636,0.37496477365493774,0.33070746064186096,0.3756759762763977,0.32981252670288086,0.37573686242103577,0.3289702832698822,0.3750419616699219,0.3283597528934479,0.37365415692329407,0.32795339822769165,0.37158074975013733,0.32762959599494934,0.36872994899749756,0.32744911313056946,0.36513349413871765,0.327328085899353,0.36083292961120605,0.32647183537483215,0.3553459048271179,0.3234274387359619,0.3475061357021332,0.3167162835597992,0.3361029028892517,0.30550384521484375,0.3206931948661804,0.289927214384079,0.301763653755188,0.2707938551902771,0.28021207451820374,0.2489292174577713,0.25686004757881165,0.22513742744922638,0.23259875178337097,0.2009105384349823,0.20892499387264252,0.17861606180667877,0.18800251185894012,0.16042542457580566,0.1717921644449234,0.14698050916194916,0.16082054376602173,0.1370360553264618,0.15366528928279877,0.12817446887493134,0.14766347408294678,0.11803093552589417,0.14030992984771729,0.10540719330310822,0.1303406059741974,0.09064079821109772,0.11794678121805191,0.07512999325990677,0.1043713390827179,0.06083159148693085,0.09155081957578659,0.05038084089756012,0.08213365077972412,0.047207534313201904,0.0794491171836853,0.05470795929431915,0.08676983416080475,0.07482234388589859,0.1060170903801918,0.10722704231739044,0.13688474893569946,0.1495549976825714,0.17697802186012268,0.19809097051620483,0.22259706258773804,0.24851331114768982,0.2695668935775757,0.29662609100341797,0.3139076828956604,0.3389118015766144,0.3523290455341339,0.37274593114852905,0.3825106620788574,0.39645275473594666,0.4031810462474823,0.40939658880233765,0.414045125246048,0.41200780868530273,0.41564178466796875,0.40561020374298096,0.4092215895652771,0.3921266198158264,0.3965846300125122,0.3738146126270294,0.37977224588394165,0.3530846834182739,0.360776424407959,0.33230307698249817,0.34146547317504883,0.3134949207305908,0.3235333561897278,0.29809248447418213,0.30826473236083984,0.2869272828102112,0.2963654398918152,0.2803330719470978,0.2880798876285553,0.2781458795070648,0.2833423912525177,0.2797280550003052,0.28175947070121765,0.28418320417404175,0.2826170325279236,0.29055237770080566,0.28502604365348816,0.29783299565315247,0.2880639433860779,0.3050537407398224,0.2908852994441986,0.31150898337364197,0.29286256432533264,0.31685498356819153,0.29363778233528137,0.3209408223628998,0.29303422570228577,0.3236549198627472,0.2910189926624298,0.3249479830265045,0.2877538502216339,0.3248835802078247,0.28355008363723755,0.3236102759838104,0.2787551283836365,0.3212985694408417,0.27375152707099915,0.31806454062461853,0.2689562439918518,0.31393393874168396,0.2646617591381073,0.30892059206962585,0.2609400451183319,0.3031262159347534,0.2577987313270569,0.2967284619808197,0.2553180754184723,0.2899474501609802,0.2535468339920044,0.2830822467803955,0.2523913085460663,0.27646496891975403,0.2516772150993347,0.27031591534614563,0.2512190043926239,0.2647823095321655,0.2508447468280792,0.25996577739715576,0.25032496452331543,0.25594156980514526,0.24949151277542114,0.2525883615016937,0.24821141362190247,0.24961310625076294,0.24631737172603607,0.24674704670906067,0.24365116655826569,0.24378450214862823,0.24015013873577118,0.2405320256948471,0.23586493730545044,0.23689839243888855,0.23092935979366302,0.23295597732067108,0.22551023960113525,0.22881460189819336,0.2197560966014862,0.22456791996955872,0.21381458640098572,0.22040949761867523,0.20788267254829407,0.21659861505031586,0.20215559005737305,0.2132403701543808,0.19671525061130524,0.21023744344711304,0.19153043627738953,0.20741993188858032,0.18653440475463867,0.20455028116703033,0.18163129687309265,0.2012627124786377,0.17666466534137726,0.19717349112033844,0.17145000398159027,0.19201600551605225,0.1658248007297516,0.18561972677707672,0.15966778993606567,0.1779114007949829,0.15292170643806458,0.1690191626548767,0.14558954536914825,0.15924739837646484,0.13767898082733154,0.14891751110553741,0.12920112907886505,0.1383480280637741,0.12023596465587616,0.12793944776058197,0.1109166145324707,0.11810696125030518,0.10136047005653381,0.10913249105215073,0.09172657132148743,0.1011713445186615,0.08230516314506531,0.0943390354514122,0.07342809438705444,0.08870010823011398,0.06534087657928467,0.08421285450458527,0.058251891285181046,0.0807342454791069,0.0523688979446888,0.07804303616285324,0.047738026827573776,0.07584884017705917,0.04413424804806709,0.07380872964859009,0.04118501394987106,0.07154276967048645,0.038487426936626434,0.0686652734875679,0.03558041900396347,0.06486204266548157,0.0319744274020195,0.05993484705686569,0.027289263904094696,0.05376472324132919,0.021312803030014038,0.04630828648805618,0.013984277844429016,0.03766322135925293,0.005423426628112793,0.02805314213037491,-0.0040769875049591064,0.01772705465555191,-0.014155000448226929,0.0069579556584358215,-0.024425312876701355,-0.003892548382282257,-0.034451521933078766,-0.014451511204242706,-0.04383676499128342,-0.024486973881721497,-0.05239381641149521,-0.03391285985708237,-0.06015949696302414,-0.04270743578672409,-0.06728138774633408,-0.05091959983110428,-0.07397614419460297,-0.0586925745010376,-0.0805329903960228,-0.0662003830075264,-0.08724270761013031,-0.07359982281923294,-0.09432008862495422,-0.08105243742465973,-0.10188722610473633,-0.08869340270757675,-0.10994412750005722,-0.09654761105775833,-0.11832835525274277,-0.10454189777374268,-0.1267707496881485,-0.11260934174060822,-0.13502219319343567,-0.12074155360460281,-0.14292706549167633,-0.12895497679710388,-0.15042932331562042,-0.13724792003631592,-0.15755988657474518,-0.14559385180473328,-0.16441892087459564,-0.1539762169122696,-0.1711602807044983,-0.16242380440235138,-0.17798106372356415,-0.17097726464271545,-0.1850680112838745,-0.17961308360099792,-0.19250938296318054,-0.1882379651069641,-0.20026762783527374,-0.19674423336982727,-0.20821866393089294,-0.2050238698720932,-0.21618175506591797,-0.2129627764225006,-0.22394722700119019,-0.22049042582511902,-0.23134419322013855,-0.22762390971183777,-0.2382839024066925,-0.23443394899368286,-0.24473749101161957,-0.24101610481739044,-0.2507375478744507,-0.24751800298690796,-0.25642403960227966,-0.2541276514530182,-0.26202377676963806,-0.26100021600723267,-0.26775965094566345,-0.2682335376739502,-0.2738083004951477,-0.27590224146842957,-0.28030723333358765,-0.2840461730957031,-0.2873222529888153,-0.2926250100135803,-0.2948102355003357,-0.30153170228004456,-0.30264827609062195,-0.3106444776058197,-0.31068146228790283,-0.31983932852745056,-0.3187355399131775,-0.328976571559906,-0.32663577795028687,-0.337910920381546,-0.334236741065979,-0.3465123176574707,-0.34141790866851807,-0.3546822965145111,-0.34808236360549927,-0.3623671531677246,-0.3542081117630005,-0.3695635199546814,-0.3598801791667938,-0.3763040602207184,-0.36523255705833435,-0.3826392590999603,-0.37037503719329834,-0.38862234354019165,-0.3753855526447296,-0.394300252199173,-0.38032299280166626,-0.3997267782688141,-0.3852221369743347,-0.40498611330986023,-0.39010003209114075,-0.41017886996269226,-0.39498022198677063,-0.41537636518478394,-0.3998861610889435,-0.4206025004386902,-0.404814749956131,-0.42585769295692444,-0.4097353518009186,-0.4311356544494629,-0.4146151840686798,-0.43641966581344604,-0.4194323718547821,-0.44168272614479065,-0.42417213320732117,-0.44688862562179565,-0.4288170039653778,-0.45198318362236023,-0.4333416223526001,-0.45690152049064636,-0.43771636486053467,-0.46159815788269043,-0.4419223368167877,-0.46606379747390747,-0.4459584057331085,-0.4703110158443451,-0.4498317539691925,-0.4743539094924927,-0.45354267954826355,-0.4781973659992218,-0.4570796489715576,-0.4818352460861206,-0.4604245722293854,-0.4852607846260071,-0.4635674059391022,-0.4884822368621826,-0.46651771664619446,-0.49152228236198425,-0.46929827332496643,-0.4943970739841461,-0.4719245731830597,-0.4971011281013489,-0.4743885397911072,-0.4996146559715271,-0.47666504979133606,-0.5019261240959167,-0.47873517870903015,-0.5040473341941833,-0.4806043803691864,-0.5060036182403564,-0.4822950065135956,-0.5078047513961792,-0.4838182032108307,-0.5094174146652222,-0.48514917492866516,-0.5107952952384949,-0.48625442385673523,-0.5120333433151245,-0.4872269034385681,-0.5131012201309204,-0.48804327845573425,-0.5139797925949097,-0.48869040608406067,-0.5146780014038086,-0.4891781508922577,-0.5152041912078857,-0.48951324820518494,-0.515548050403595,-0.4896860122680664,-0.5156898498535156,-0.4896797835826874,-0.5156195759773254,-0.4894915819168091,-0.5153493285179138,-0.4891391396522522,-0.5149028897285461,-0.48864948749542236,-0.5142913460731506,-0.4880334436893463,-0.5134984850883484,-0.4872722327709198,-0.512488603591919,-0.4863273799419403,-0.5112295150756836,-0.4851687550544739,-0.5097134113311768,-0.48379451036453247,-0.5079579949378967,-0.48222753405570984,-0.5059928894042969,-0.4804929196834564,-0.5038410425186157,-0.47860074043273926,-0.5015115737915039,-0.4765486717224121,-0.49900615215301514,-0.474336177110672,-0.4963277280330658,-0.4719712436199188,-0.4934810698032379,-0.46946513652801514,-0.49046316742897034,-0.4668181240558624,-0.48725906014442444,-0.46401435136795044,-0.48385322093963623,-0.46102750301361084,-0.48024654388427734,-0.45783665776252747,-0.47645989060401917,-0.45443978905677795,-0.4725186824798584,-0.4508539140224457,-0.4684355556964874,-0.44709959626197815,-0.46420466899871826,-0.44318661093711853,-0.4598103165626526,-0.43911513686180115,-0.4552389979362488,-0.43489035964012146,-0.45048898458480835,-0.43053045868873596,-0.4455726444721222,-0.42605772614479065,-0.44050833582878113,-0.42148131132125854,-0.4353029131889343,-0.4167920649051666,-0.4299459159374237,-0.41197001934051514,-0.4244259297847748,-0.40699324011802673,-0.41875192523002625,-0.40184569358825684,-0.41294997930526733,-0.39652132987976074,-0.40703457593917847,-0.39102911949157715,-0.40099236369132996,-0.3853883147239685,-0.3947983682155609,-0.379618763923645,-0.38843998312950134,-0.3737398684024811,-0.38192009925842285,-0.3677789866924286,-0.3752404749393463,-0.3617693781852722,-0.3683972954750061,-0.3557269871234894,-0.3613896369934082,-0.34962818026542664,-0.3542184829711914,-0.3434188663959503,-0.3468770682811737,-0.33705273270606995,-0.33935868740081787,-0.3305167555809021,-0.3316848576068878,-0.3238251209259033,-0.32391107082366943,-0.31700414419174194,-0.3160881996154785,-0.3100919723510742,-0.30822646617889404,-0.30314183235168457,-0.30031096935272217,-0.29620152711868286,-0.29234418272972107,-0.28928154706954956,-0.2843485474586487,-0.28234970569610596,-0.2763228714466095,-0.2753610908985138,-0.26822763681411743,-0.2682851552963257,-0.2600266933441162,-0.26110294461250305,-0.2517269551753998,-0.25379523634910583,-0.2433546781539917,-0.24635474383831024,-0.23491129279136658,-0.2388077676296234,-0.22638581693172455,-0.23121139407157898,-0.21780720353126526,-0.22362297773361206,-0.20924493670463562,-0.2160770297050476,-0.20073820650577545,-0.20858462154865265,-0.19224850833415985,-0.20113219320774078,-0.18370383977890015,-0.19366946816444397,-0.17507335543632507,-0.1861170083284378,-0.16637077927589417,-0.17841219902038574,-0.1576009839773178,-0.17055565118789673,-0.148741215467453,-0.16260384023189545,-0.1397855281829834,-0.15461835265159607,-0.13077619671821594,-0.14663778245449066,-0.12177445739507675,-0.1386960744857788,-0.11282160133123398,-0.1308393031358719,-0.10394816100597382,-0.1230967789888382,-0.09519916772842407,-0.11543876677751541,-0.08661489933729172,-0.10778286308050156,-0.07818744331598282,-0.10004876554012299,-0.06986398994922638,-0.09220118820667267,-0.06159941852092743,-0.08424758911132812,-0.053382694721221924,-0.07621950656175613,-0.045204222202301025,-0.06816849112510681,-0.03702538460493088,-0.06016238033771515,-0.02880621701478958,-0.05225931107997894,-0.020550966262817383,-0.04448086768388748,-0.012302905321121216,-0.0368179976940155,-0.004100114107131958,-0.029257260262966156,0.004040226340293884,-0.021784842014312744,0.012096323072910309,-0.014362379908561707,0.020029857754707336,-0.0069222599267959595,0.027816027402877808,0.0005943924188613892,0.035470448434352875,0.008194826543331146,0.043032705783843994,0.01583489030599594,0.05053168535232544,0.023451924324035645,0.05797713249921799,0.030986033380031586,0.0653659775853157,0.0383775532245636,0.07267146557569504,0.04556902498006821,0.07983017712831497,0.052524030208587646,0.08677184581756592,0.05924297124147415,0.09348134696483612,0.06576123833656311,0.10002323985099792,0.07214471697807312,0.10649779438972473,0.07848785817623138,0.11298158764839172,0.08489495515823364,0.11951449513435364,0.09144071489572525,0.12612414360046387,0.09814945608377457,0.13283410668373108,0.10502535849809647,0.13964423537254333,0.11209312081336975,0.1465175449848175,0.11938157677650452,0.15339161455631256,0.12685833871364594,0.16019673645496368,0.13440126180648804,0.16686761379241943,0.14185304939746857,0.1733635812997818,0.14909660816192627,0.1796974241733551,0.15606801211833954,0.1859397441148758,0.16272011399269104,0.19217726588249207,0.16901637613773346,0.19845536351203918,0.17497338354587555,0.20475313067436218,0.1806771457195282,0.21099962294101715,0.1862298846244812,0.21710392832756042,0.19168782234191895,0.22298064827919006,0.19706708192825317,0.22857160866260529,0.20239682495594025,0.23385636508464813,0.20773008465766907,0.23883312940597534,0.21309153735637665,0.24349918961524963,0.2184503823518753,0.24790242314338684,0.22379642724990845,0.2520396411418915,0.22907114028930664,0.2559488117694855,0.23422284424304962,0.25970956683158875,0.23919197916984558,0.263393372297287,0.24391581118106842,0.267034649848938,0.24837423861026764,0.2706506550312042,0.25261327624320984,0.2742699086666107,0.25670841336250305,0.27793049812316895,0.2607170045375824,0.2816528379917145,0.26468127965927124,0.28542274236679077,0.26866281032562256,0.2891985774040222,0.2727433443069458,0.292927622795105,0.27697640657424927,0.2965553402900696,0.281343013048172,0.3000248968601227,0.2857591211795807,0.3032781183719635,0.2901217043399811,0.30626803636550903,0.29434892535209656,0.3089806139469147,0.2983919382095337,0.31145021319389343,0.30222588777542114,0.3137483298778534,0.30583545565605164,0.31595122814178467,0.3092058300971985,0.31811270117759705,0.31232768297195435,0.3202593922615051,0.31520572304725647,0.3223975598812103,0.31785526871681213,0.3245071470737457,0.3202867805957794,0.3265295624732971,0.32250121235847473,0.3283746540546417,0.3245077431201935,0.32995209097862244,0.3263428807258606,0.33120396733283997,0.32806700468063354,0.3321175277233124,0.32974594831466675,0.332724928855896,0.3314400613307953,0.3331047594547272,0.3331981897354126,0.33337944746017456,0.33504244685173035,0.33369430899620056,0.33695265650749207,0.3341796398162842,0.3388760983943939,0.33491915464401245,0.3407588005065918,0.33593639731407166,0.3425574004650116,0.3371926546096802,0.3442245423793793,0.3385861814022064,0.3457033038139343,0.33996182680130005,0.3469533324241638,0.3411432206630707,0.34797245264053345,0.3419831097126007,0.34877270460128784,0.34240439534187317,0.349345326423645,0.3424091935157776,0.3496764302253723,0.34206104278564453,0.3498052656650543,0.3414638340473175,0.34984588623046875,0.3407500982284546,0.3499334454536438,0.340066134929657,0.3501625061035156,0.33954519033432007,0.35058847069740295,0.33927953243255615,0.3512694835662842,0.3393147885799408,0.3522685766220093,0.33966028690338135,0.35359981656074524,0.3402900993824005,0.3551881015300751,0.34113386273384094,0.356891930103302,0.3420846462249756,0.3585565388202667,0.34303149580955505,0.36004331707954407,0.34388241171836853,0.3612383306026459,0.344550758600235,0.3620738983154297,0.34493643045425415,0.3625553846359253,0.34495019912719727,0.3627432882785797,0.3445638120174408,0.3626939058303833,0.3438241183757782,0.3624250590801239,0.3428187668323517,0.361955851316452,0.3416540026664734,0.36136651039123535,0.3404766321182251,0.36078914999961853,0.33948343992233276,0.36033061146736145,0.3388586640357971,0.3600243926048279,0.3386785686016083,0.35987240076065063,0.3388814926147461,0.3599116802215576,0.3393232822418213,0.3602134883403778,0.3398509621620178,0.3608211874961853,0.34033000469207764,0.36171820759773254,0.3406338095664978,0.3628429174423218,0.3406321406364441,0.36408504843711853,0.34020528197288513,0.36525389552116394,0.3392985761165619,0.3661157488822937,0.33797401189804077,0.36651450395584106,0.33633241057395935,0.3663865327835083,0.33423125743865967,0.3655090928077698,0.33098775148391724,0.36318421363830566,0.3254320025444031,0.3582824468612671,0.31642067432403564,0.3497524857521057,0.3034154772758484,0.33714884519577026,0.2866259813308716,0.3206908106803894,0.2667217552661896,0.3009462058544159,0.24460870027542114,0.2786709666252136,0.22157062590122223,0.2550315260887146,0.19945719838142395,0.2318165898323059,0.18042144179344177,0.21116450428962708,0.16621296107769012,0.19487625360488892,0.15751305222511292,0.18379129469394684,0.15367744863033295,0.1775275021791458,0.1528540998697281,0.17453670501708984,0.1523725986480713,0.17242954671382904,0.14946037530899048,0.16865786910057068,0.1421966850757599,0.1614331305027008,0.13021358847618103,0.1503685712814331,0.1146666407585144,0.13641898334026337,0.09762406349182129,0.12132522463798523,0.08152692764997482,0.10719214379787445,0.0690765306353569,0.09647108614444733,0.06320425868034363,0.09195809066295624,0.06661736965179443,0.09632152318954468,0.08097830414772034,0.11124186217784882,0.10628615319728851,0.13673646748065948,0.1408746838569641,0.17110836505889893,0.18190903961658478,0.2114475965499878,0.22600501775741577,0.25431403517723083,0.269742876291275,0.29631057381629944,0.3100496232509613,0.334465891122818,0.3444552719593048,0.3664591610431671,0.3712193965911865,0.3907356262207031,0.3893691599369049,0.4065472185611725,0.39870530366897583,0.4139246642589569,0.399762898683548,0.4135751724243164,0.393675297498703,0.4067177474498749,0.38196316361427307,0.3948909044265747,0.36633679270744324,0.37975722551345825,0.3485592305660248,0.36291125416755676,0.330335408449173,0.3457352817058563,0.3131875991821289,0.3293605446815491,0.29833319783210754,0.314715713262558,0.28659963607788086,0.3025423586368561,0.27838796377182007,0.29330089688301086,0.27369534969329834,0.2870592176914215,0.2722085118293762,0.2835167944431305,0.27343297004699707,0.28217101097106934,0.2767919898033142,0.2824866473674774,0.28169888257980347,0.2839967906475067,0.287453293800354,0.28617313504219055,0.29337456822395325,0.2885313928127289,0.29889997839927673,0.2907150387763977,0.30358970165252686,0.2924956679344177,0.3070765733718872,0.2937161922454834,0.3090613782405853,0.2942705750465393,0.30936959385871887,0.2941321134567261,0.3079759478569031,0.29334330558776855,0.30495354533195496,0.29192981123924255,0.30042779445648193,0.28982827067375183,0.2946094274520874,0.28691163659095764,0.28784412145614624,0.2830761671066284,0.2805746793746948,0.27829596400260925,0.2732338309288025,0.27262943983078003,0.26617667078971863,0.2662232518196106,0.25967875123023987,0.2593178451061249,0.25392982363700867,0.25221049785614014,0.24899810552597046,0.24517767131328583,0.24483585357666016,0.2384195476770401,0.2413596510887146,0.23206254839897156,0.23851251602172852,0.2261812388896942,0.2362290471792221,0.22080402076244354,0.2343699336051941,0.21592116355895996,0.2327447235584259,0.21152155101299286,0.23120062053203583,0.20762799680233002,0.22964338958263397,0.20428478717803955,0.22795343399047852,0.20150336623191833,0.2259225845336914,0.19921478629112244,0.22331036627292633,0.19725462794303894,0.2199501097202301,0.19537846744060516,0.2157791703939438,0.19330155849456787,0.2107958346605301,0.1907530426979065,0.2050483673810959,0.18751242756843567,0.1986832618713379,0.18341392278671265,0.19196321070194244,0.17835724353790283,0.18518690764904022,0.1723581850528717,0.17857202887535095,0.1655905842781067,0.17220304906368256,0.15833452343940735,0.1660631000995636,0.1508517861366272,0.16009025275707245,0.14331141114234924,0.15421250462532043,0.13582764565944672,0.14836138486862183,0.12851488590240479,0.1424730122089386,0.12145394831895828,0.13647493720054626,0.11461437493562698,0.13027110695838928,0.10786096751689911,0.12374910712242126,0.10105203837156296,0.11681777238845825,0.09411272406578064,0.10944677889347076,0.0870223417878151,0.10168059915304184,0.07978898286819458,0.09362272918224335,0.07247429341077805,0.08540672063827515,0.06521251797676086,0.07717220485210419,0.05815443769097328,0.06905745714902878,0.05138806998729706,0.06120937690138817,0.044933073222637177,0.053783953189849854,0.03879239410161972,0.04690658301115036,0.032958440482616425,0.040596701204776764,0.02735314890742302,0.03471525385975838,0.021802255883812904,0.028989167883992195,0.01609962061047554,0.023105600848793983,0.010090738534927368,0.016811873763799667,0.003688353579491377,0.009963242337107658,-0.0031575006432831287,0.002516126027330756,-0.01046459749341011,-0.005494528915733099,-0.018199991434812546,-0.013961371034383774,-0.02628650888800621,-0.02269870787858963,-0.03463251143693924,-0.03145888075232506,-0.043135449290275574,-0.039992015808820724,-0.051663435995578766,-0.0481300912797451,-0.060072120279073715,-0.05583951249718666,-0.06826416403055191,-0.063203364610672,-0.0762188732624054,-0.07035306096076965,-0.08395205438137054,-0.077405646443367,-0.09146834164857864,-0.0844445675611496,-0.09877212345600128,-0.09153379499912262,-0.1059095486998558,-0.09873364865779877,-0.1129670962691307,-0.1060994565486908,-0.12002304196357727,-0.11366908252239227,-0.12711678445339203,-0.12144944071769714,-0.13426116108894348,-0.12941238284111023,-0.1414547860622406,-0.13750536739826202,-0.1486705243587494,-0.14567208290100098,-0.1558549851179123,-0.1538686901330948,-0.16296620666980743,-0.16206611692905426,-0.17001113295555115,-0.17024314403533936,-0.17703497409820557,-0.17837992310523987,-0.1840820014476776,-0.18645545840263367,-0.1911834478378296,-0.19444873929023743,-0.19838199019432068,-0.2023506760597229,-0.20574374496936798,-0.21018409729003906,-0.21332889795303345,-0.21801145374774933,-0.22115075588226318,-0.2259119749069214,-0.2291652262210846,-0.23393920063972473,-0.23729002475738525,-0.24209696054458618,-0.24542775750160217,-0.25034987926483154,-0.2534793019294739,-0.2586488425731659,-0.2613561749458313,-0.26694440841674805,-0.2689962685108185,-0.2751891016960144,-0.2763730585575104,-0.2833440899848938,-0.28349441289901733,-0.2913866341114044,-0.29039308428764343,-0.29930567741394043,-0.2971133589744568,-0.307087779045105,-0.30369770526885986,-0.3147141635417938,-0.31017762422561646,-0.322174072265625,-0.31657397747039795,-0.3294750452041626,-0.32290157675743103,-0.3366340100765228,-0.32917243242263794,-0.34366050362586975,-0.33539602160453796,-0.3505537211894989,-0.34157902002334595,-0.35731732845306396,-0.34772777557373047,-0.3639681339263916,-0.35384660959243774,-0.37052851915359497,-0.3599322438240051,-0.3770109713077545,-0.36596933007240295,-0.38341113924980164,-0.3719328045845032,-0.38971376419067383,-0.3777962625026703,-0.395904541015625,-0.3835383355617523,-0.4019785523414612,-0.3891465663909912,-0.4079378843307495,-0.39461749792099,-0.4137786626815796,-0.3999519944190979,-0.41947999596595764,-0.4051479697227478,-0.42500901222229004,-0.4101989269256592,-0.43034130334854126,-0.41509705781936646,-0.43548041582107544,-0.419841468334198,-0.44045743346214294,-0.42443957924842834,-0.4453069567680359,-0.4289010763168335,-0.4500356912612915,-0.4332244396209717,-0.45460939407348633,-0.4373864233493805,-0.4589867889881134,-0.4413633644580841,-0.46323850750923157,-0.44523024559020996,-0.4673311710357666,-0.448950856924057,-0.47124043107032776,-0.4524918496608734,-0.47496506571769714,-0.4558508098125458,-0.47851237654685974,-0.45904505252838135,-0.4818895757198334,-0.46209385991096497,-0.48510071635246277,-0.465003103017807,-0.48814600706100464,-0.46776124835014343,-0.4910202920436859,-0.4703477919101715,-0.4937116503715515,-0.4727475941181183,-0.49620547890663147,-0.4749591052532196,-0.4984930157661438,-0.47699394822120667,-0.5005773305892944,-0.47886550426483154,-0.5024701356887817,-0.48057854175567627,-0.5041794180870056,-0.4821264445781708,-0.5057013034820557,-0.48349958658218384,-0.5070251822471619,-0.4846949577331543,-0.5081486105918884,-0.48571905493736267,-0.509087085723877,-0.48658329248428345,-0.5098643898963928,-0.48729389905929565,-0.5104926228523254,-0.4878467321395874,-0.5109565854072571,-0.48822930455207825,-0.5112249851226807,-0.48842892050743103,-0.5112738013267517,-0.4884416460990906,-0.5111058354377747,-0.4882757067680359,-0.510748028755188,-0.48794835805892944,-0.510232150554657,-0.4874734580516815,-0.5095677971839905,-0.4868512451648712,-0.5087315440177917,-0.4860653281211853,-0.507678210735321,-0.48509278893470764,-0.5063723921775818,-0.48391830921173096,-0.5048164129257202,-0.4825429618358612,-0.5030500292778015,-0.48098352551460266,-0.5011188387870789,-0.4792636036872864,-0.49903959035873413,-0.47740641236305237,-0.49679604172706604,-0.47542843222618103,-0.4943670630455017,-0.4733349680900574,-0.4917532801628113,-0.4711179733276367,-0.4889707863330841,-0.4687599241733551,-0.4860231280326843,-0.46624556183815,-0.48288673162460327,-0.46356797218322754,-0.4795306921005249,-0.4607272446155548,-0.47594529390335083,-0.4577200412750244,-0.4721463918685913,-0.45453545451164246,-0.46815428137779236,-0.45116257667541504,-0.4639756381511688,-0.44760099053382874,-0.45960667729377747,-0.4438607692718506,-0.4550493359565735,-0.43995341658592224,-0.4503166675567627,-0.43588492274284363,-0.44542694091796875,-0.43166229128837585,-0.4403962194919586,-0.42730194330215454,-0.4352371096611023,-0.4228253960609436,-0.42995357513427734,-0.41824057698249817,-0.4245334267616272,-0.4135271906852722,-0.4189499616622925,-0.40864601731300354,-0.41317906975746155,-0.4035632312297821,-0.40721848607063293,-0.3982691168785095,-0.4010874032974243,-0.3927765190601349,-0.394808292388916,-0.38710835576057434,-0.388395220041275,-0.3812902271747589,-0.38185957074165344,-0.3753519058227539,-0.3752199113368988,-0.36932194232940674,-0.3684973418712616,-0.3632151782512665,-0.36169925332069397,-0.3570241928100586,-0.3548104763031006,-0.35072851181030273,-0.34780266880989075,-0.3443145751953125,-0.34065306186676025,-0.33778634667396545,-0.33335644006729126,-0.33115726709365845,-0.3259279131889343,-0.3244384527206421,-0.318397581577301,-0.31764116883277893,-0.31079593300819397,-0.3107862174510956,-0.3031361997127533,-0.3039014935493469,-0.2954109013080597,-0.2970024645328522,-0.2876105010509491,-0.2900755703449249,-0.2797442376613617,-0.28308728337287903,-0.27183473110198975,-0.276012122631073,-0.26388534903526306,-0.2688480317592621,-0.2558617889881134,-0.2616053521633148,-0.2477174997329712,-0.2542847990989685,-0.23943772912025452,-0.24687598645687103,-0.23105037212371826,-0.23937740921974182,-0.22259145975112915,-0.23180991411209106,-0.2140737771987915,-0.22420412302017212,-0.20549969375133514,-0.2165747880935669,-0.1968955248594284,-0.20891325175762177,-0.18831145763397217,-0.20120587944984436,-0.1797809600830078,-0.19345428049564362,-0.17129217088222504,-0.18567350506782532,-0.16281338036060333,-0.17787405848503113,-0.15433865785598755,-0.17005404829978943,-0.14589308202266693,-0.16221165657043457,-0.1374913901090622,-0.1543581485748291,-0.1291087418794632,-0.1465117484331131,-0.12070388346910477,-0.1386767327785492,-0.11226113140583038,-0.13083478808403015,-0.10379426181316376,-0.12296002358198166,-0.09531185775995255,-0.115040622651577,-0.08679930120706558,-0.10708432644605637,-0.07824482023715973,-0.09910604357719421,-0.06966972351074219,-0.09111578017473221,-0.061114951968193054,-0.08311952650547028,-0.052599892020225525,-0.0751243606209755,-0.04410962760448456,-0.06713724881410599,-0.03562984615564346,-0.05916077643632889,-0.027179516851902008,-0.05119534954428673,-0.01879652589559555,-0.04324730113148689,-0.010496310889720917,-0.03532908856868744,-0.002260833978652954,-0.027447693049907684,0.0059290193021297455,-0.019598383456468582,0.014061875641345978,-0.011778898537158966,0.022105101495981216,-0.004013461992144585,0.03003648668527603,0.0036457106471061707,0.03785426914691925,0.011150557547807693,0.04555843397974968,0.018492722883820534,0.053134094923734665,0.02570323459804058,0.060557737946510315,0.03281550854444504,0.06780894100666046,0.039834704250097275,0.07486822456121445,0.04675022140145302,0.0817132443189621,0.053574249148368835,0.08833374828100204,0.060355111956596375,0.0947575718164444,0.06714500486850739,0.10105312615633011,0.07395663857460022,0.10729896277189255,0.08076008409261703,0.11355335265398026,0.0875229686498642,0.11985470354557037,0.09424670785665512,0.12623825669288635,0.10095816850662231,0.1327301263809204,0.10766972601413727,0.1393246352672577,0.11436689645051956,0.14602354168891907,0.12108242511749268,0.15275464951992035,0.12784253060817719,0.15944001078605652,0.13467952609062195,0.166034996509552,0.1416047364473343,0.17252594232559204,0.1485820859670639,0.17891503870487213,0.15553797781467438,0.18521401286125183,0.162397101521492,0.19144229590892792,0.1691051870584488,0.19761662185192108,0.1756211370229721,0.20373423397541046,0.1818981170654297,0.20976819097995758,0.18788672983646393,0.21567688882350922,0.19356295466423035,0.22141236066818237,0.1989491879940033,0.22691985964775085,0.20410071313381195,0.23214197158813477,0.2090718001127243,0.23703992366790771,0.2138986885547638,0.24161241948604584,0.21860937774181366,0.24588878452777863,0.2232365906238556,0.24990510940551758,0.2278122901916504,0.25369614362716675,0.23235124349594116,0.25730907917022705,0.23684369027614594,0.2608065903186798,0.24126189947128296,0.26424169540405273,0.24557729065418243,0.26763802766799927,0.2497827410697937,0.2710042893886566,0.2539080083370209,0.2743600904941559,0.2580043077468872,0.27772846817970276,0.2621048092842102,0.28109848499298096,0.2662014663219452,0.2844138741493225,0.27026814222335815,0.28761327266693115,0.27430057525634766,0.2906782627105713,0.2783187925815582,0.2936345636844635,0.2823316752910614,0.29650774598121643,0.28631120920181274,0.2992847263813019,0.2902001440525055,0.30191662907600403,0.29392778873443604,0.30435478687286377,0.2974175214767456,0.3065836429595947,0.3006058931350708,0.30862122774124146,0.30347740650177,0.31049442291259766,0.306072473526001,0.312222421169281,0.3084503412246704,0.31383374333381653,0.31065377593040466,0.3153923749923706,0.31272828578948975,0.31698936223983765,0.31476086378097534,0.3186992406845093,0.3168686330318451,0.3205533027648926,0.31914153695106506,0.3225567936897278,0.3216134309768677,0.3247084319591522,0.324289470911026,0.3269837200641632,0.3271740972995758,0.3293130397796631,0.33025112748146057,0.33160120248794556,0.3334524631500244,0.3337690830230713,0.3366631269454956,0.3357566297054291,0.33975350856781006,0.33749690651893616,0.34260159730911255,0.3389246463775635,0.3451049029827118,0.34002384543418884,0.3472021222114563,0.34083592891693115,0.3488919138908386,0.34139955043792725,0.3502168655395508,0.3416992127895355,0.35122162103652954,0.3416895866394043,0.35192933678627014,0.3413449227809906,0.3523486256599426,0.3406597077846527,0.35248973965644836,0.3396291136741638,0.3523767590522766,0.3382820785045624,0.352059006690979,0.3367357850074768,0.35161373019218445,0.33517172932624817,0.3511255085468292,0.3337372839450836,0.35066133737564087,0.33248984813690186,0.3502699136734009,0.33143895864486694,0.3499961793422699,0.33060356974601746,0.34987717866897583,0.33000418543815613,0.3499266803264618,0.3296352028846741,0.3501513600349426,0.32948991656303406,0.350592702627182,0.329603374004364,0.3513304591178894,0.33003976941108704,0.35242897272109985,0.33083397150039673,0.35388806462287903,0.3319631814956665,0.35565000772476196,0.3333580195903778,0.35762736201286316,0.334903359413147,0.35970258712768555,0.33642998337745667,0.3617240786552429,0.3377501368522644,0.3635392487049103,0.33872780203819275,0.365033894777298,0.3393082618713379,0.36612892150878906,0.33948349952697754,0.3667609691619873,0.339260458946228,0.3669013977050781,0.33867549896240234,0.366586297750473,0.3378073573112488,0.3658924102783203,0.33674895763397217,0.364884614944458,0.3355695903301239,0.3636193573474884,0.33430618047714233,0.36218708753585815,0.33296605944633484,0.3606922924518585,0.3315345048904419,0.35918036103248596,0.3300207853317261,0.35764509439468384,0.3285069167613983,0.35611510276794434,0.3270561099052429,0.3546077311038971,0.3254457414150238,0.352856308221817,0.3229660391807556,0.350090354681015,0.3185683786869049,0.3452148139476776,0.3112976551055908,0.33729299902915955,0.30062180757522583,0.32587888836860657,0.28643596172332764,0.3109724819660187,0.2689546048641205,0.2928783595561981,0.24881073832511902,0.2723010778427124,0.22731277346611023,0.25058284401893616,0.20648010075092316,0.22969430685043335,0.18861271440982819,0.21180330216884613,0.17556962370872498,0.1986304223537445,0.1681668758392334,0.19092623889446259,0.1659921258687973,0.18827880918979645,0.16763757169246674,0.18928979337215424,0.17113277316093445,0.19200463593006134,0.1743386834859848,0.1943642944097519,0.175251305103302,0.19451621174812317,0.17233914136886597,0.1910596489906311,0.16496074199676514,0.18336881697177887,0.15363140404224396,0.17187567055225372,0.1398496776819229,0.157985121011734,0.12555719912052155,0.1435789316892624,0.11268371343612671,0.13053175806999207,0.10308875143527985,0.12063667923212051,0.09868810325860977,0.11577457934617996,0.10131668299436569,0.11781617254018784,0.11223071813583374,0.12809985876083374,0.1316116750240326,0.14688126742839813,0.15844237804412842,0.17319311201572418,0.19076986610889435,0.20511654019355774,0.2261192500591278,0.24018003046512604,0.2618753910064697,0.2757151126861572)\n\
+\n\
+]);\n\
+\n\
+function runTest(test, iterations) {\n\
+ for (var i = 0; i < iterations; i++) {\n\
+ test();\n\
+ }\n\
+}\n\
+\n\
+/* \n\
+ * DSP.js - a comprehensive digital signal processing library for javascript \n\
+ * \n\
+ * Created by Corban Brook <corbanbrook@gmail.com> on 2010-01-01.\n\
+ * Copyright 2010 Corban Brook. All rights reserved.\n\
+ *\n\
+ */\n\
+\n\
+////////////////////////////////////////////////////////////////////////////////\n\
+// CONSTANTS //\n\
+////////////////////////////////////////////////////////////////////////////////\n\
+\n\
+/**\n\
+ * DSP is an object which contains general purpose utility functions and constants\n\
+ */\n\
+DSP = {\n\
+ // Channels\n\
+ LEFT: 0,\n\
+ RIGHT: 1,\n\
+ MIX: 2,\n\
+\n\
+ // Waveforms\n\
+ SINE: 1,\n\
+ TRIANGLE: 2,\n\
+ SAW: 3,\n\
+ SQUARE: 4,\n\
+\n\
+ // Filters \n\
+ LOWPASS: 0,\n\
+ HIGHPASS: 1,\n\
+ BANDPASS: 2,\n\
+ NOTCH: 3,\n\
+\n\
+ // Window functions\n\
+ BARTLETT: 1,\n\
+ BARTLETTHANN: 2,\n\
+ BLACKMAN: 3,\n\
+ COSINE: 4,\n\
+ GAUSS: 5,\n\
+ HAMMING: 6,\n\
+ HANN: 7,\n\
+ LANCZOS: 8,\n\
+ RECTANGULAR: 9,\n\
+ TRIANGULAR: 10,\n\
+\n\
+ // Loop modes\n\
+ OFF: 0,\n\
+ FW: 1,\n\
+ BW: 2,\n\
+ FWBW: 3,\n\
+\n\
+ // Math\n\
+ TWO_PI: 2*Math.PI\n\
+};\n\
+\n\
+////////////////////////////////////////////////////////////////////////////////\n\
+// DSP UTILITY FUNCTIONS //\n\
+////////////////////////////////////////////////////////////////////////////////\n\
+\n\
+/**\n\
+ * Inverts the phase of a signal\n\
+ *\n\
+ * @param {Array} buffer A sample buffer\n\
+ *\n\
+ * @returns The inverted sample buffer\n\
+ */\n\
+DSP.invert = function(buffer) {\n\
+ for ( var i = 0, len = buffer.length; i < len; i++ ) {\n\
+ buffer[i] *= -1;\n\
+ }\n\
+\n\
+ return buffer;\n\
+};\n\
+\n\
+/**\n\
+ * Converts split-stereo (dual mono) sample buffers into a stereo interleaved sample buffer\n\
+ *\n\
+ * @param {Array} left A sample buffer\n\
+ * @param {Array} right A sample buffer\n\
+ *\n\
+ * @returns The stereo interleaved buffer\n\
+ */\n\
+DSP.interleave = function(left, right) {\n\
+ if ( left.length !== right.length ) {\n\
+ throw \"Can not interleave. Channel lengths differ.\";\n\
+ }\n\
+ \n\
+ var stereoInterleaved = new Array(left.length * 2);\n\
+ \n\
+ for (var i = 0, len = left.length; i < len; i++ ) {\n\
+ stereoInterleaved[2*i] = left[i];\n\
+ stereoInterleaved[2*i+1] = right[i];\n\
+ }\n\
+ \n\
+ return stereoInterleaved;\n\
+};\n\
+\n\
+/**\n\
+ * Converts a stereo-interleaved sample buffer into split-stereo (dual mono) sample buffers\n\
+ *\n\
+ * @param {Array} buffer A stereo-interleaved sample buffer\n\
+ *\n\
+ * @returns an Array containing left and right channels\n\
+ */\n\
+DSP.deinterleave = function(buffer) {\n\
+ var left = new Array(buffer.length/2);\n\
+ var right = new Array(buffer.length/2);\n\
+ var mix = new Array(buffer.length/2);\n\
+ \n\
+ for (var i = 0, len = buffer.length/2; i < len; i ++ ) {\n\
+ left[i] = buffer[2*i];\n\
+ right[i] = buffer[2*i+1];\n\
+ mix[i] = (left[i] + right[i]) / 2;\n\
+ }\n\
+ \n\
+ return [left, right, mix];\n\
+};\n\
+\n\
+/**\n\
+ * Separates a channel from a stereo-interleaved sample buffer\n\
+ *\n\
+ * @param {Array} buffer A stereo-interleaved sample buffer\n\
+ * @param {Number} channel A channel constant (LEFT, RIGHT, MIX)\n\
+ *\n\
+ * @returns an Array containing a signal mono sample buffer\n\
+ */\n\
+DSP.getChannel = function(channel, buffer) {\n\
+ return DSP.deinterleave(buffer)[channel];\n\
+};\n\
+\n\
+// Biquad filter types\n\
+DSP.LPF = 0; // H(s) = 1 / (s^2 + s/Q + 1)\n\
+DSP.HPF = 1; // H(s) = s^2 / (s^2 + s/Q + 1)\n\
+DSP.BPF_CONSTANT_SKIRT = 2; // H(s) = s / (s^2 + s/Q + 1) (constant skirt gain, peak gain = Q)\n\
+DSP.BPF_CONSTANT_PEAK = 3; // H(s) = (s/Q) / (s^2 + s/Q + 1) (constant 0 dB peak gain)\n\
+DSP.NOTCH = 4; // H(s) = (s^2 + 1) / (s^2 + s/Q + 1)\n\
+DSP.APF = 5; // H(s) = (s^2 - s/Q + 1) / (s^2 + s/Q + 1)\n\
+DSP.PEAKING_EQ = 6; // H(s) = (s^2 + s*(A/Q) + 1) / (s^2 + s/(A*Q) + 1)\n\
+DSP.LOW_SHELF = 7; // H(s) = A * (s^2 + (sqrt(A)/Q)*s + A)/(A*s^2 + (sqrt(A)/Q)*s + 1)\n\
+DSP.HIGH_SHELF = 8; // H(s) = A * (A*s^2 + (sqrt(A)/Q)*s + 1)/(s^2 + (sqrt(A)/Q)*s + A)\n\
+\n\
+// Biquad filter parameter types\n\
+DSP.Q = 1;\n\
+DSP.BW = 2; // SHARED with BACKWARDS LOOP MODE\n\
+DSP.S = 3;\n\
+\n\
+\n\
+/** \n\
+ * DFT is a class for calculating the Discrete Fourier Transform of a signal.\n\
+ *\n\
+ * @param {Number} bufferSize The size of the sample buffer to be computed\n\
+ * @param {Number} sampleRate The sampleRate of the buffer (eg. 44100)\n\
+ *\n\
+ * @constructor\n\
+ */\n\
+DFT = function(bufferSize, sampleRate) {\n\
+ this.bufferSize = bufferSize;\n\
+ this.sampleRate = sampleRate;\n\
+\n\
+ var N = bufferSize/2 * bufferSize;\n\
+ \n\
+ this.sinTable = new Array(N);\n\
+ this.cosTable = new Array(N);\n\
+ \n\
+ for ( var i = 0; i < N; i++ ) {\n\
+ this.sinTable[i] = Math.sin(i * DSP.TWO_PI / bufferSize);\n\
+ this.cosTable[i] = Math.cos(i * DSP.TWO_PI / bufferSize);\n\
+ }\n\
+ \n\
+ this.spectrum = new Array(bufferSize/2);\n\
+ this.complexValues = new Array(bufferSize/2);\n\
+};\n\
+\n\
+/**\n\
+ * Performs a forward tranform on the sample buffer. \n\
+ * Converts a time domain signal to frequency domain spectra.\n\
+ *\n\
+ * @param {Array} buffer The sample buffer\n\
+ *\n\
+ * @returns The frequency spectrum array\n\
+ */\n\
+DFT.prototype.forward = function(buffer) {\n\
+ var real, imag;\n\
+\n\
+ for ( var k = 0; k < this.bufferSize/2; k++ ) {\n\
+ real = 0.0;\n\
+ imag = 0.0;\n\
+\n\
+ for ( var n = 0; n < buffer.length; n++ ) {\n\
+ real += this.cosTable[k*n] * buffer[n];\n\
+ imag += this.sinTable[k*n] * buffer[n];\n\
+ }\n\
+\n\
+ this.complexValues[k] = {real: real, imag: imag};\n\
+ }\n\
+ \n\
+ for ( var i = 0; i < this.bufferSize/2; i++ ) {\n\
+ this.spectrum[i] = 2 * Math.sqrt(Math.pow(this.complexValues[i].real, 2) + Math.pow(this.complexValues[i].imag, 2)) / this.bufferSize;\n\
+ }\n\
+\n\
+ return this.spectrum;\n\
+};\n\
+\n\
+\n\
+/** \n\
+ * FFT is a class for calculating the Discrete Fourier Transform of a signal \n\
+ * with the Fast Fourier Transform algorithm.\n\
+ *\n\
+ * @param {Number} bufferSize The size of the sample buffer to be computed. Must be power of 2\n\
+ * @param {Number} sampleRate The sampleRate of the buffer (eg. 44100)\n\
+ *\n\
+ * @constructor\n\
+ */\n\
+FFT = function(bufferSize, sampleRate) {\n\
+ this.bufferSize = bufferSize;\n\
+ this.sampleRate = sampleRate;\n\
+ this.spectrum = new Array(bufferSize/2);\n\
+ this.real = new Array(bufferSize);\n\
+ this.imag = new Array(bufferSize);\n\
+ \n\
+ this.reverseTable = new Array(bufferSize);\n\
+ for (var i = 0; i < this.reverseTable.length; i++) {\n\
+ this.reverseTable[i] = 0;\n\
+ }\n\
+\n\
+ var limit = 1;\n\
+ var bit = bufferSize >> 1;\n\
+\n\
+ while ( limit < bufferSize ) {\n\
+ for ( var i = 0; i < limit; i++ ) {\n\
+ this.reverseTable[i + limit] = this.reverseTable[i] + bit;\n\
+ }\n\
+\n\
+ limit = limit << 1;\n\
+ bit = bit >> 1;\n\
+ }\n\
+\n\
+ this.sinTable = new Array(bufferSize);\n\
+ this.cosTable = new Array(bufferSize);\n\
+\n\
+ for ( var i = 0; i < bufferSize; i++ ) {\n\
+ this.sinTable[i] = Math.sin(-Math.PI/i);\n\
+ this.cosTable[i] = Math.cos(-Math.PI/i);\n\
+ }\n\
+};\n\
+\n\
+/**\n\
+ * Performs a forward tranform on the sample buffer. \n\
+ * Converts a time domain signal to frequency domain spectra.\n\
+ *\n\
+ * @param {Array} buffer The sample buffer. Buffer Length must be power of 2\n\
+ *\n\
+ * @returns The frequency spectrum array\n\
+ */\n\
+FFT.prototype.forward = function(buffer) {\n\
+ // Locally scope variables for speed up\n\
+ var bufferSize = this.bufferSize,\n\
+ cosTable = this.cosTable,\n\
+ sinTable = this.sinTable,\n\
+ reverseTable = this.reverseTable,\n\
+ real = this.real,\n\
+ imag = this.imag,\n\
+ spectrum = this.spectrum;\n\
+\n\
+ var k = Math.floor(Math.log(bufferSize) / Math.LN2);\n\
+ if ( Math.pow(2, k) !== bufferSize ) { throw \"Invalid buffer size, must be a power of 2.\"; }\n\
+ if ( bufferSize !== buffer.length ) { throw \"Supplied buffer is not the same size as defined FFT. FFT Size: \" + bufferSize + \" Buffer Size: \" + buffer.length; }\n\
+\n\
+ for ( var i = 0; i < bufferSize; i++ ) {\n\
+ real[i] = buffer[reverseTable[i]];\n\
+ imag[i] = 0;\n\
+ }\n\
+\n\
+ var halfSize = 1, \n\
+ phaseShiftStepReal, \n\
+ phaseShiftStepImag, \n\
+ currentPhaseShiftReal, \n\
+ currentPhaseShiftImag, \n\
+ off, \n\
+ tr, \n\
+ ti, \n\
+ tmpReal, \n\
+ i;\n\
+\n\
+ while ( halfSize < bufferSize ) {\n\
+ phaseShiftStepReal = cosTable[halfSize];\n\
+ phaseShiftStepImag = sinTable[halfSize];\n\
+ currentPhaseShiftReal = 1;\n\
+ currentPhaseShiftImag = 0;\n\
+\n\
+ for ( var fftStep = 0; fftStep < halfSize; fftStep++ ) {\n\
+ i = fftStep;\n\
+\n\
+ while ( i < bufferSize ) {\n\
+ off = i + halfSize;\n\
+ tr = (currentPhaseShiftReal * real[off]) - (currentPhaseShiftImag * imag[off]);\n\
+ ti = (currentPhaseShiftReal * imag[off]) + (currentPhaseShiftImag * real[off]);\n\
+\n\
+ real[off] = real[i] - tr;\n\
+ imag[off] = imag[i] - ti;\n\
+ real[i] += tr;\n\
+ imag[i] += ti;\n\
+\n\
+ i += halfSize << 1;\n\
+ }\n\
+\n\
+ tmpReal = currentPhaseShiftReal;\n\
+ currentPhaseShiftReal = (tmpReal * phaseShiftStepReal) - (currentPhaseShiftImag * phaseShiftStepImag);\n\
+ currentPhaseShiftImag = (tmpReal * phaseShiftStepImag) + (currentPhaseShiftImag * phaseShiftStepReal);\n\
+ }\n\
+\n\
+ halfSize = halfSize << 1;\n\
+ }\n\
+\n\
+ i = bufferSize/2;\n\
+ while(i--) {\n\
+ spectrum[i] = 2 * Math.sqrt(real[i] * real[i] + imag[i] * imag[i]) / bufferSize;\n\
+ }\n\
+\n\
+ return spectrum;\n\
+};\n\
+\n\
+FFT.prototype.inverse = function(real, imag) {\n\
+ // Locally scope variables for speed up\n\
+ var bufferSize = this.bufferSize,\n\
+ cosTable = this.cosTable,\n\
+ sinTable = this.sinTable,\n\
+ reverseTable = this.reverseTable,\n\
+ spectrum = this.spectrum;\n\
+ \n\
+ real = real || this.real;\n\
+ imag = imag || this.imag;\n\
+\n\
+ for (var i = 0; i < bufferSize; i++) {\n\
+ imag[i] *= -1;\n\
+ }\n\
+\n\
+ var revReal = new Array(bufferSize);\n\
+ var revImag = new Array(bufferSize);\n\
+ \n\
+ for (var i = 0; i < real.length; i++) {\n\
+ revReal[i] = real[reverseTable[i]];\n\
+ revImag[i] = imag[reverseTable[i]];\n\
+ }\n\
+ \n\
+ real = revReal;\n\
+ imag = revImag;\n\
+\n\
+ var halfSize = 1, \n\
+ phaseShiftStepReal, \n\
+ phaseShiftStepImag, \n\
+ currentPhaseShiftReal, \n\
+ currentPhaseShiftImag, \n\
+ off, \n\
+ tr, \n\
+ ti, \n\
+ tmpReal, \n\
+ i;\n\
+\n\
+ while ( halfSize < bufferSize ) {\n\
+ phaseShiftStepReal = cosTable[halfSize];\n\
+ phaseShiftStepImag = sinTable[halfSize];\n\
+ currentPhaseShiftReal = 1;\n\
+ currentPhaseShiftImag = 0;\n\
+\n\
+ for ( var fftStep = 0; fftStep < halfSize; fftStep++ ) {\n\
+ i = fftStep;\n\
+\n\
+ while ( i < bufferSize ) {\n\
+ off = i + halfSize;\n\
+ tr = (currentPhaseShiftReal * real[off]) - (currentPhaseShiftImag * imag[off]);\n\
+ ti = (currentPhaseShiftReal * imag[off]) + (currentPhaseShiftImag * real[off]);\n\
+\n\
+ real[off] = real[i] - tr;\n\
+ imag[off] = imag[i] - ti;\n\
+ real[i] += tr;\n\
+ imag[i] += ti;\n\
+\n\
+ i += halfSize << 1;\n\
+ }\n\
+\n\
+ tmpReal = currentPhaseShiftReal;\n\
+ currentPhaseShiftReal = (tmpReal * phaseShiftStepReal) - (currentPhaseShiftImag * phaseShiftStepImag);\n\
+ currentPhaseShiftImag = (tmpReal * phaseShiftStepImag) + (currentPhaseShiftImag * phaseShiftStepReal);\n\
+ }\n\
+\n\
+ halfSize = halfSize << 1;\n\
+ }\n\
+\n\
+ var buffer = new Array(bufferSize);\n\
+ for (var i = 0; i < bufferSize; i++) {\n\
+ buffer[i] = real[i] / bufferSize;\n\
+ }\n\
+\n\
+ return buffer;\n\
+};\n\
+\n\
+Sampler = function Sampler(file, bufferSize, sampleRate, playStart, playEnd, loopStart, loopEnd, loopMode) {\n\
+ this.file = file;\n\
+ this.bufferSize = bufferSize;\n\
+ this.sampleRate = sampleRate;\n\
+ this.playStart = playStart || 0; // 0%\n\
+ this.playEnd = playEnd || 1; // 100%\n\
+ this.loopStart = loopStart || 0;\n\
+ this.loopEnd = loopEnd || 1;\n\
+ this.loopMode = loopMode || DSP.OFF;\n\
+ this.loaded = false;\n\
+ this.samples = [];\n\
+ this.signal = new Array(bufferSize);\n\
+ this.frameCount = 0;\n\
+ this.envelope = null;\n\
+ this.amplitude = 1;\n\
+ this.rootFrequency = 110; // A2 110\n\
+ this.frequency = 550;\n\
+ this.step = this.frequency / this.rootFrequency;\n\
+ this.duration = 0;\n\
+ this.samplesProcessed = 0;\n\
+ this.playhead = 0;\n\
+ \n\
+ var audio = /* new Audio();*/ document.createElement(\"AUDIO\");\n\
+ var self = this;\n\
+ \n\
+ this.loadSamples = function(event) {\n\
+ var buffer = DSP.getChannel(DSP.MIX, event.frameBuffer);\n\
+ for ( var i = 0; i < buffer.length; i++) {\n\
+ self.samples.push(buffer[i]);\n\
+ }\n\
+ };\n\
+ \n\
+ this.loadComplete = function() {\n\
+ // convert flexible js array into a fast typed array\n\
+ self.samples = new Array(self.samples);\n\
+ self.loaded = true;\n\
+ };\n\
+ \n\
+ this.loadMetaData = function() {\n\
+ self.duration = audio.duration;\n\
+ };\n\
+ \n\
+ audio.addEventListener(\"MozAudioAvailable\", this.loadSamples, false);\n\
+ audio.addEventListener(\"loadedmetadata\", this.loadMetaData, false)\n\
+ audio.addEventListener(\"ended\", this.loadComplete, false);\n\
+ audio.muted = true;\n\
+ audio.src = file;\n\
+ audio.play();\n\
+};\n\
+\n\
+Sampler.prototype.applyEnvelope = function() {\n\
+ this.envelope.process(this.signal);\n\
+ return this.signal;\n\
+};\n\
+\n\
+Sampler.prototype.generate = function() {\n\
+ var frameOffset = this.frameCount * this.bufferSize;\n\
+ \n\
+ var loopWidth = this.playEnd * this.samples.length - this.playStart * this.samples.length;\n\
+ var playStartSamples = this.playStart * this.samples.length; // ie 0.5 -> 50% of the length\n\
+ var playEndSamples = this.playEnd * this.samples.length; // ie 0.5 -> 50% of the length\n\
+ var offset;\n\
+\n\
+ for ( var i = 0; i < this.bufferSize; i++ ) {\n\
+ switch (this.loopMode) {\n\
+ case DSP.OFF:\n\
+ this.playhead = Math.round(this.samplesProcessed * this.step + playStartSamples);\n\
+ if (this.playhead < (this.playEnd * this.samples.length) ) {\n\
+ this.signal[i] = this.samples[this.playhead] * this.amplitude;\n\
+ } else {\n\
+ this.signal[i] = 0;\n\
+ }\n\
+ break;\n\
+ \n\
+ case DSP.FW:\n\
+ this.playhead = Math.round((this.samplesProcessed * this.step) % loopWidth + playStartSamples);\n\
+ if (this.playhead < (this.playEnd * this.samples.length) ) {\n\
+ this.signal[i] = this.samples[this.playhead] * this.amplitude;\n\
+ }\n\
+ break;\n\
+ \n\
+ case DSP.BW:\n\
+ this.playhead = playEndSamples - Math.round((this.samplesProcessed * this.step) % loopWidth);\n\
+ if (this.playhead < (this.playEnd * this.samples.length) ) {\n\
+ this.signal[i] = this.samples[this.playhead] * this.amplitude;\n\
+ }\n\
+ break;\n\
+ \n\
+ case DSP.FWBW:\n\
+ if ( Math.floor(this.samplesProcessed * this.step / loopWidth) % 2 == 0 ) {\n\
+ this.playhead = Math.round((this.samplesProcessed * this.step) % loopWidth + playStartSamples);\n\
+ } else {\n\
+ this.playhead = playEndSamples - Math.round((this.samplesProcessed * this.step) % loopWidth);\n\
+ } \n\
+ if (this.playhead < (this.playEnd * this.samples.length) ) {\n\
+ this.signal[i] = this.samples[this.playhead] * this.amplitude;\n\
+ }\n\
+ break;\n\
+ }\n\
+ this.samplesProcessed++;\n\
+ }\n\
+\n\
+ this.frameCount++;\n\
+\n\
+ return this.signal;\n\
+};\n\
+\n\
+Sampler.prototype.setFreq = function(frequency) {\n\
+ this.frequency = frequency;\n\
+ this.step = this.frequency / this.rootFrequency;\n\
+};\n\
+\n\
+Sampler.prototype.reset = function() {\n\
+ this.samplesProcessed = 0;\n\
+ this.playhead = 0;\n\
+};\n\
+\n\
+/**\n\
+ * Oscillator class for generating and modifying signals\n\
+ *\n\
+ * @param {Number} type A waveform constant (eg. DSP.SINE)\n\
+ * @param {Number} frequency Initial frequency of the signal\n\
+ * @param {Number} amplitude Initial amplitude of the signal\n\
+ * @param {Number} bufferSize Size of the sample buffer to generate\n\
+ * @param {Number} sampleRate The sample rate of the signal\n\
+ *\n\
+ * @contructor\n\
+ */\n\
+Oscillator = function Oscillator(type, frequency, amplitude, bufferSize, sampleRate) {\n\
+ this.frequency = frequency;\n\
+ this.amplitude = amplitude;\n\
+ this.bufferSize = bufferSize;\n\
+ this.sampleRate = sampleRate;\n\
+ //this.pulseWidth = pulseWidth;\n\
+ this.frameCount = 0;\n\
+ \n\
+ this.waveTableLength = 2048;\n\
+\n\
+ this.cyclesPerSample = frequency / sampleRate;\n\
+\n\
+ this.signal = new Array(bufferSize);\n\
+ this.envelope = null;\n\
+\n\
+ switch(parseInt(type)) {\n\
+ case DSP.TRIANGLE:\n\
+ this.func = Oscillator.Triangle;\n\
+ break;\n\
+\n\
+ case DSP.SAW:\n\
+ this.func = Oscillator.Saw;\n\
+ break;\n\
+\n\
+ case DSP.SQUARE:\n\
+ this.func = Oscillator.Square;\n\
+ break;\n\
+\n\
+ case DSP.SINE:\n\
+ default:\n\
+ this.func = Oscillator.Sine;\n\
+ break;\n\
+ }\n\
+\n\
+ this.generateWaveTable = function() {\n\
+ Oscillator.waveTable[this.func] = new Array(2048);\n\
+ var waveTableTime = this.waveTableLength / this.sampleRate;\n\
+ var waveTableHz = 1 / waveTableTime;\n\
+\n\
+ for (var i = 0; i < this.waveTableLength; i++) {\n\
+ Oscillator.waveTable[this.func][i] = this.func(i * waveTableHz/this.sampleRate);\n\
+ }\n\
+ };\n\
+\n\
+ if ( typeof Oscillator.waveTable === 'undefined' ) {\n\
+ Oscillator.waveTable = {};\n\
+ }\n\
+\n\
+ if ( typeof Oscillator.waveTable[this.func] === 'undefined' ) { \n\
+ this.generateWaveTable();\n\
+ }\n\
+ \n\
+ this.waveTable = Oscillator.waveTable[this.func];\n\
+}; \n\
+\n\
+/**\n\
+ * Set the amplitude of the signal\n\
+ *\n\
+ * @param {Number} amplitude The amplitude of the signal (between 0 and 1)\n\
+ */\n\
+Oscillator.prototype.setAmp = function(amplitude) {\n\
+ if (amplitude >= 0 && amplitude <= 1) {\n\
+ this.amplitude = amplitude;\n\
+ } else {\n\
+ throw \"Amplitude out of range (0..1).\";\n\
+ }\n\
+};\n\
+ \n\
+/**\n\
+ * Set the frequency of the signal\n\
+ * \n\
+ * @param {Number} frequency The frequency of the signal\n\
+ */ \n\
+Oscillator.prototype.setFreq = function(frequency) {\n\
+ this.frequency = frequency;\n\
+ this.cyclesPerSample = frequency / this.sampleRate;\n\
+};\n\
+ \n\
+// Add an oscillator\n\
+Oscillator.prototype.add = function(oscillator) {\n\
+ for ( var i = 0; i < this.bufferSize; i++ ) {\n\
+ //this.signal[i] += oscillator.valueAt(i);\n\
+ this.signal[i] += oscillator.signal[i];\n\
+ }\n\
+ \n\
+ return this.signal;\n\
+};\n\
+ \n\
+// Add a signal to the current generated osc signal\n\
+Oscillator.prototype.addSignal = function(signal) {\n\
+ for ( var i = 0; i < signal.length; i++ ) {\n\
+ if ( i >= this.bufferSize ) {\n\
+ break;\n\
+ }\n\
+ this.signal[i] += signal[i];\n\
+ \n\
+ /*\n\
+ // Constrain amplitude\n\
+ if ( this.signal[i] > 1 ) {\n\
+ this.signal[i] = 1;\n\
+ } else if ( this.signal[i] < -1 ) {\n\
+ this.signal[i] = -1;\n\
+ }\n\
+ */\n\
+ }\n\
+ return this.signal;\n\
+};\n\
+ \n\
+// Add an envelope to the oscillator\n\
+Oscillator.prototype.addEnvelope = function(envelope) {\n\
+ this.envelope = envelope;\n\
+};\n\
+\n\
+Oscillator.prototype.applyEnvelope = function() {\n\
+ this.envelope.process(this.signal);\n\
+};\n\
+ \n\
+Oscillator.prototype.valueAt = function(offset) {\n\
+ return this.waveTable[offset % this.waveTableLength];\n\
+};\n\
+ \n\
+Oscillator.prototype.generate = function() {\n\
+ var frameOffset = this.frameCount * this.bufferSize;\n\
+ var step = this.waveTableLength * this.frequency / this.sampleRate;\n\
+ var offset;\n\
+\n\
+ for ( var i = 0; i < this.bufferSize; i++ ) {\n\
+ //var step = (frameOffset + i) * this.cyclesPerSample % 1;\n\
+ //this.signal[i] = this.func(step) * this.amplitude;\n\
+ //this.signal[i] = this.valueAt(Math.round((frameOffset + i) * step)) * this.amplitude; \n\
+ offset = Math.round((frameOffset + i) * step);\n\
+ this.signal[i] = this.waveTable[offset % this.waveTableLength] * this.amplitude;\n\
+ }\n\
+\n\
+ this.frameCount++;\n\
+\n\
+ return this.signal;\n\
+};\n\
+\n\
+Oscillator.Sine = function(step) {\n\
+ return Math.sin(DSP.TWO_PI * step);\n\
+};\n\
+\n\
+Oscillator.Square = function(step) {\n\
+ return step < 0.5 ? 1 : -1;\n\
+};\n\
+\n\
+Oscillator.Saw = function(step) {\n\
+ return 2 * (step - Math.round(step));\n\
+};\n\
+\n\
+Oscillator.Triangle = function(step) {\n\
+ return 1 - 4 * Math.abs(Math.round(step) - step);\n\
+};\n\
+\n\
+Oscillator.Pulse = function(step) {\n\
+ // stub\n\
+};\n\
+ \n\
+ADSR = function(attackLength, decayLength, sustainLevel, sustainLength, releaseLength, sampleRate) {\n\
+ this.sampleRate = sampleRate;\n\
+ // Length in seconds\n\
+ this.attackLength = attackLength;\n\
+ this.decayLength = decayLength;\n\
+ this.sustainLevel = sustainLevel;\n\
+ this.sustainLength = sustainLength;\n\
+ this.releaseLength = releaseLength;\n\
+ this.sampleRate = sampleRate;\n\
+ \n\
+ // Length in samples\n\
+ this.attackSamples = attackLength * sampleRate;\n\
+ this.decaySamples = decayLength * sampleRate;\n\
+ this.sustainSamples = sustainLength * sampleRate;\n\
+ this.releaseSamples = releaseLength * sampleRate;\n\
+ \n\
+ // Updates the envelope sample positions\n\
+ this.update = function() {\n\
+ this.attack = this.attackSamples;\n\
+ this.decay = this.attack + this.decaySamples;\n\
+ this.sustain = this.decay + this.sustainSamples;\n\
+ this.release = this.sustain + this.releaseSamples;\n\
+ };\n\
+ \n\
+ this.update();\n\
+ \n\
+ this.samplesProcessed = 0;\n\
+};\n\
+\n\
+\n\
+ADSR.prototype.noteOn = function() {\n\
+ this.samplesProcessed = 0;\n\
+ this.sustainSamples = this.sustainLength * this.sampleRate;\n\
+ this.update();\n\
+};\n\
+\n\
+// Send a note off when using a sustain of infinity to let the envelope enter the release phase\n\
+ADSR.prototype.noteOff = function() {\n\
+ this.sustainSamples = this.samplesProcessed - this.decaySamples;\n\
+ this.update();\n\
+};\n\
+\n\
+ADSR.prototype.processSample = function(sample) {\n\
+ var amplitude = 0;\n\
+\n\
+ if ( this.samplesProcessed <= this.attack ) {\n\
+ amplitude = 0 + (1 - 0) * ((this.samplesProcessed - 0) / (this.attack - 0));\n\
+ } else if ( this.samplesProcessed > this.attack && this.samplesProcessed <= this.decay ) {\n\
+ amplitude = 1 + (this.sustainLevel - 1) * ((this.samplesProcessed - this.attack) / (this.decay - this.attack));\n\
+ } else if ( this.samplesProcessed > this.decay && this.samplesProcessed <= this.sustain ) {\n\
+ amplitude = this.sustainLevel;\n\
+ } else if ( this.samplesProcessed > this.sustain && this.samplesProcessed <= this.release ) {\n\
+ amplitude = this.sustainLevel + (0 - this.sustainLevel) * ((this.samplesProcessed - this.sustain) / (this.release - this.sustain));\n\
+ }\n\
+ \n\
+ return sample * amplitude;\n\
+};\n\
+\n\
+ADSR.prototype.value = function() {\n\
+ var amplitude = 0;\n\
+\n\
+ if ( this.samplesProcessed <= this.attack ) {\n\
+ amplitude = 0 + (1 - 0) * ((this.samplesProcessed - 0) / (this.attack - 0));\n\
+ } else if ( this.samplesProcessed > this.attack && this.samplesProcessed <= this.decay ) {\n\
+ amplitude = 1 + (this.sustainLevel - 1) * ((this.samplesProcessed - this.attack) / (this.decay - this.attack));\n\
+ } else if ( this.samplesProcessed > this.decay && this.samplesProcessed <= this.sustain ) {\n\
+ amplitude = this.sustainLevel;\n\
+ } else if ( this.samplesProcessed > this.sustain && this.samplesProcessed <= this.release ) {\n\
+ amplitude = this.sustainLevel + (0 - this.sustainLevel) * ((this.samplesProcessed - this.sustain) / (this.release - this.sustain));\n\
+ }\n\
+ \n\
+ return amplitude;\n\
+};\n\
+ \n\
+ADSR.prototype.process = function(buffer) {\n\
+ for ( var i = 0; i < buffer.length; i++ ) {\n\
+ buffer[i] *= this.value();\n\
+\n\
+ this.samplesProcessed++;\n\
+ }\n\
+ \n\
+ return buffer;\n\
+};\n\
+ \n\
+ \n\
+ADSR.prototype.isActive = function() {\n\
+ if ( this.samplesProcessed > this.release || this.samplesProcessed === -1 ) {\n\
+ return false;\n\
+ } else {\n\
+ return true;\n\
+ }\n\
+};\n\
+\n\
+ADSR.prototype.disable = function() {\n\
+ this.samplesProcessed = -1;\n\
+};\n\
+ \n\
+IIRFilter = function(type, cutoff, resonance, sampleRate) {\n\
+ this.sampleRate = sampleRate;\n\
+ this.cutoff = cutoff;\n\
+ this.resonance = resonance;\n\
+\n\
+ switch(type) {\n\
+ case DSP.LOWPASS:\n\
+ case DSP.LP12:\n\
+ this.func = new IIRFilter.LP12(cutoff, resonance, sampleRate);\n\
+ break;\n\
+ }\n\
+}\n\
+\n\
+IIRFilter.prototype.set = function(cutoff, resonance) {\n\
+ this.func.calcCoeff(cutoff, resonance);\n\
+}\n\
+\n\
+IIRFilter.prototype.process = function(buffer) {\n\
+ this.func.process(buffer);\n\
+}\n\
+\n\
+// Add an envelope to the filter\n\
+IIRFilter.prototype.addEnvelope = function(envelope) {\n\
+ if ( envelope instanceof ADSR ) {\n\
+ this.func.addEnvelope(envelope);\n\
+ } else {\n\
+ throw \"Not an envelope.\";\n\
+ }\n\
+};\n\
+\n\
+IIRFilter.LP12 = function(cutoff, resonance, sampleRate) {\n\
+ this.sampleRate = sampleRate;\n\
+ this.vibraPos = 0; \n\
+ this.vibraSpeed = 0;\n\
+ this.envelope = false;\n\
+ \n\
+ this.calcCoeff = function(cutoff, resonance) {\n\
+ this.w = 2.0 * Math.PI * cutoff / this.sampleRate;\n\
+ this.q = 1.0 - this.w / (2.0 * (resonance + 0.5 / (1.0 + this.w)) + this.w - 2.0);\n\
+ this.r = this.q * this.q;\n\
+ this.c = this.r + 1.0 - 2.0 * Math.cos(this.w) * this.q;\n\
+ \n\
+ this.cutoff = cutoff;\n\
+ this.resonance = resonance;\n\
+ };\n\
+\n\
+ this.calcCoeff(cutoff, resonance);\n\
+\n\
+ this.process = function(buffer) {\n\
+ for ( var i = 0; i < buffer.length; i++ ) {\n\
+ this.vibraSpeed += (buffer[i] - this.vibraPos) * this.c;\n\
+ this.vibraPos += this.vibraSpeed;\n\
+ this.vibraSpeed *= this.r;\n\
+ \n\
+ /* \n\
+ var temp = this.vibraPos;\n\
+ \n\
+ if ( temp > 1.0 ) {\n\
+ temp = 1.0;\n\
+ } else if ( temp < -1.0 ) {\n\
+ temp = -1.0;\n\
+ } else if ( temp != temp ) {\n\
+ temp = 1;\n\
+ }\n\
+ \n\
+ buffer[i] = temp;\n\
+ */ \n\
+\n\
+ if (this.envelope) {\n\
+ buffer[i] = (buffer[i] * (1 - this.envelope.value())) + (this.vibraPos * this.envelope.value());\n\
+ this.envelope.samplesProcessed++;\n\
+ } else {\n\
+ buffer[i] = this.vibraPos;\n\
+ }\n\
+ }\n\
+ }\n\
+}; \n\
+\n\
+IIRFilter.LP12.prototype.addEnvelope = function(envelope) {\n\
+ this.envelope = envelope;\n\
+};\n\
+\n\
+\n\
+\n\
+IIRFilter2 = function(type, cutoff, resonance, sampleRate) {\n\
+ this.type = type; \n\
+ this.cutoff = cutoff;\n\
+ this.resonance = resonance;\n\
+ this.sampleRate = sampleRate;\n\
+\n\
+ this.f = Array(4);\n\
+ this.f[0] = 0.0; // lp\n\
+ this.f[1] = 0.0; // hp\n\
+ this.f[2] = 0.0; // bp\n\
+ this.f[3] = 0.0; // br \n\
+ \n\
+ this.calcCoeff = function(cutoff, resonance) {\n\
+ this.freq = 2 * Math.sin(Math.PI * Math.min(0.25, cutoff/(this.sampleRate*2))); \n\
+ this.damp = Math.min(2 * (1 - Math.pow(resonance, 0.25)), Math.min(2, 2/this.freq - this.freq * 0.5));\n\
+ };\n\
+\n\
+ this.calcCoeff(cutoff, resonance);\n\
+};\n\
+\n\
+IIRFilter2.prototype.process = function(buffer) {\n\
+ var input, output;\n\
+ var f = this.f;\n\
+\n\
+ for ( var i = 0; i < buffer.length; i++ ) {\n\
+ input = buffer[i]; \n\
+\n\
+ // first pass\n\
+ f[3] = input - this.damp * f[2];\n\
+ f[0] = f[0] + this.freq * f[2];\n\
+ f[1] = f[3] - f[0];\n\
+ f[2] = this.freq * f[1] + f[2];\n\
+ output = 0.5 * f[this.type];\n\
+\n\
+ // second pass\n\
+ f[3] = input - this.damp * f[2];\n\
+ f[0] = f[0] + this.freq * f[2];\n\
+ f[1] = f[3] - f[0];\n\
+ f[2] = this.freq * f[1] + f[2];\n\
+ output += 0.5 * f[this.type];\n\
+\n\
+ if (this.envelope) {\n\
+ buffer[i] = (buffer[i] * (1 - this.envelope.value())) + (output * this.envelope.value());\n\
+ this.envelope.samplesProcessed++;\n\
+ } else {\n\
+ buffer[i] = output;\n\
+ }\n\
+ }\n\
+};\n\
+\n\
+IIRFilter2.prototype.addEnvelope = function(envelope) {\n\
+ if ( envelope instanceof ADSR ) {\n\
+ this.envelope = envelope;\n\
+ } else {\n\
+ throw \"This is not an envelope.\";\n\
+ }\n\
+};\n\
+\n\
+IIRFilter2.prototype.set = function(cutoff, resonance) {\n\
+ this.calcCoeff(cutoff, resonance); \n\
+};\n\
+\n\
+\n\
+\n\
+WindowFunction = function(type, alpha) {\n\
+ this.alpha = alpha;\n\
+ \n\
+ switch(type) {\n\
+ case DSP.BARTLETT:\n\
+ this.func = WindowFunction.Bartlett;\n\
+ break;\n\
+ \n\
+ case DSP.BARTLETTHANN:\n\
+ this.func = WindowFunction.BartlettHann;\n\
+ break;\n\
+ \n\
+ case DSP.BLACKMAN:\n\
+ this.func = WindowFunction.Blackman;\n\
+ this.alpha = this.alpha || 0.16;\n\
+ break;\n\
+ \n\
+ case DSP.COSINE:\n\
+ this.func = WindowFunction.Cosine;\n\
+ break;\n\
+ \n\
+ case DSP.GAUSS:\n\
+ this.func = WindowFunction.Gauss;\n\
+ this.alpha = this.alpha || 0.25;\n\
+ break;\n\
+ \n\
+ case DSP.HAMMING:\n\
+ this.func = WindowFunction.Hamming;\n\
+ break;\n\
+ \n\
+ case DSP.HANN:\n\
+ this.func = WindowFunction.Hann;\n\
+ break;\n\
+ \n\
+ case DSP.LANCZOS:\n\
+ this.func = WindowFunction.Lanczoz;\n\
+ break;\n\
+ \n\
+ case DSP.RECTANGULAR:\n\
+ this.func = WindowFunction.Rectangular;\n\
+ break;\n\
+ \n\
+ case DSP.TRIANGULAR:\n\
+ this.func = WindowFunction.Triangular;\n\
+ break;\n\
+ }\n\
+};\n\
+\n\
+WindowFunction.prototype.process = function(buffer) {\n\
+ var length = buffer.length;\n\
+ for ( var i = 0; i < length; i++ ) {\n\
+ buffer[i] *= this.func(length, i, this.alpha);\n\
+ }\n\
+ return buffer;\n\
+};\n\
+\n\
+WindowFunction.Bartlett = function(length, index) {\n\
+ return 2 / (length - 1) * ((length - 1) / 2 - Math.abs(index - (length - 1) / 2));\n\
+};\n\
+\n\
+WindowFunction.BartlettHann = function(length, index) {\n\
+ return 0.62 - 0.48 * Math.abs(index / (length - 1) - 0.5) - 0.38 * Math.cos(DSP.TWO_PI * index / (length - 1));\n\
+};\n\
+\n\
+WindowFunction.Blackman = function(length, index, alpha) {\n\
+ var a0 = (1 - alpha) / 2;\n\
+ var a1 = 0.5;\n\
+ var a2 = alpha / 2;\n\
+\n\
+ return a0 - a1 * Math.cos(DSP.TWO_PI * index / (length - 1)) + a2 * Math.cos(4 * Math.PI * index / (length - 1));\n\
+};\n\
+\n\
+WindowFunction.Cosine = function(length, index) {\n\
+ return Math.cos(Math.PI * index / (length - 1) - Math.PI / 2);\n\
+};\n\
+\n\
+WindowFunction.Gauss = function(length, index, alpha) {\n\
+ return Math.pow(Math.E, -0.5 * Math.pow((index - (length - 1) / 2) / (alpha * (length - 1) / 2), 2));\n\
+};\n\
+\n\
+WindowFunction.Hamming = function(length, index) {\n\
+ return 0.54 - 0.46 * Math.cos(DSP.TWO_PI * index / (length - 1));\n\
+};\n\
+\n\
+WindowFunction.Hann = function(length, index) {\n\
+ return 0.5 * (1 - Math.cos(DSP.TWO_PI * index / (length - 1)));\n\
+};\n\
+\n\
+WindowFunction.Lanczos = function(length, index) {\n\
+ var x = 2 * index / (length - 1) - 1;\n\
+ return Math.sin(Math.PI * x) / (Math.PI * x);\n\
+};\n\
+\n\
+WindowFunction.Rectangular = function(length, index) {\n\
+ return 1;\n\
+};\n\
+\n\
+WindowFunction.Triangular = function(length, index) {\n\
+ return 2 / length * (length / 2 - Math.abs(index - (length - 1) / 2));\n\
+};\n\
+\n\
+function sinh (arg) {\n\
+ // Returns the hyperbolic sine of the number, defined as (exp(number) - exp(-number))/2 \n\
+ // \n\
+ // version: 1004.2314\n\
+ // discuss at: http://phpjs.org/functions/sinh // + original by: Onno Marsman\n\
+ // * example 1: sinh(-0.9834330348825909);\n\
+ // * returns 1: -1.1497971402636502\n\
+ return (Math.exp(arg) - Math.exp(-arg))/2;\n\
+}\n\
+\n\
+\n\
+/* \n\
+ * Biquad filter\n\
+ * \n\
+ * Created by Ricard Marxer <email@ricardmarxer.com> on 2010-05-23.\n\
+ * Copyright 2010 Ricard Marxer. All rights reserved.\n\
+ *\n\
+ */\n\
+// Implementation based on:\n\
+// http://www.musicdsp.org/files/Audio-EQ-Cookbook.txt\n\
+Biquad = function(type, sampleRate) {\n\
+ this.Fs = sampleRate;\n\
+ this.type = type; // type of the filter\n\
+ this.parameterType = DSP.Q; // type of the parameter\n\
+\n\
+ this.x_1_l = 0;\n\
+ this.x_2_l = 0;\n\
+ this.y_1_l = 0;\n\
+ this.y_2_l = 0;\n\
+\n\
+ this.x_1_r = 0;\n\
+ this.x_2_r = 0;\n\
+ this.y_1_r = 0;\n\
+ this.y_2_r = 0;\n\
+\n\
+ this.b0 = 1;\n\
+ this.a0 = 1;\n\
+\n\
+ this.b1 = 0;\n\
+ this.a1 = 0;\n\
+\n\
+ this.b2 = 0;\n\
+ this.a2 = 0;\n\
+\n\
+ this.b0a0 = this.b0 / this.a0;\n\
+ this.b1a0 = this.b1 / this.a0;\n\
+ this.b2a0 = this.b2 / this.a0;\n\
+ this.a1a0 = this.a1 / this.a0;\n\
+ this.a2a0 = this.a2 / this.a0;\n\
+\n\
+ this.f0 = 3000; // \"wherever it's happenin', man.\" Center Frequency or\n\
+ // Corner Frequency, or shelf midpoint frequency, depending\n\
+ // on which filter type. The \"significant frequency\".\n\
+\n\
+ this.dBgain = 12; // used only for peaking and shelving filters\n\
+\n\
+ this.Q = 1; // the EE kind of definition, except for peakingEQ in which A*Q is\n\
+ // the classic EE Q. That adjustment in definition was made so that\n\
+ // a boost of N dB followed by a cut of N dB for identical Q and\n\
+ // f0/Fs results in a precisely flat unity gain filter or \"wire\".\n\
+\n\
+ this.BW = -3; // the bandwidth in octaves (between -3 dB frequencies for BPF\n\
+ // and notch or between midpoint (dBgain/2) gain frequencies for\n\
+ // peaking EQ\n\
+\n\
+ this.S = 1; // a \"shelf slope\" parameter (for shelving EQ only). When S = 1,\n\
+ // the shelf slope is as steep as it can be and remain monotonically\n\
+ // increasing or decreasing gain with frequency. The shelf slope, in\n\
+ // dB/octave, remains proportional to S for all other values for a\n\
+ // fixed f0/Fs and dBgain.\n\
+\n\
+ this.coefficients = function() {\n\
+ var b = [this.b0, this.b1, this.b2];\n\
+ var a = [this.a0, this.a1, this.a2];\n\
+ return {b: b, a:a};\n\
+ }\n\
+\n\
+ this.setFilterType = function(type) {\n\
+ this.type = type;\n\
+ this.recalculateCoefficients();\n\
+ }\n\
+\n\
+ this.setSampleRate = function(rate) {\n\
+ this.Fs = rate;\n\
+ this.recalculateCoefficients();\n\
+ }\n\
+\n\
+ this.setQ = function(q) {\n\
+ this.parameterType = DSP.Q;\n\
+ this.Q = Math.max(Math.min(q, 115.0), 0.001);\n\
+ this.recalculateCoefficients();\n\
+ }\n\
+\n\
+ this.setBW = function(bw) {\n\
+ this.parameterType = DSP.BW;\n\
+ this.BW = bw;\n\
+ this.recalculateCoefficients();\n\
+ } \n\
+\n\
+ this.setS = function(s) {\n\
+ this.parameterType = DSP.S;\n\
+ this.S = Math.max(Math.min(s, 5.0), 0.0001);\n\
+ this.recalculateCoefficients();\n\
+ } \n\
+\n\
+ this.setF0 = function(freq) {\n\
+ this.f0 = freq;\n\
+ this.recalculateCoefficients();\n\
+ } \n\
+ \n\
+ this.setDbGain = function(g) {\n\
+ this.dBgain = g;\n\
+ this.recalculateCoefficients();\n\
+ }\n\
+\n\
+ this.recalculateCoefficients = function() {\n\
+ var A;\n\
+ if (type == DSP.PEAKING_EQ || type == DSP.LOW_SHELF || type == DSP.HIGH_SHELF ) {\n\
+ A = Math.pow(10, (this.dBgain/40)); // for peaking and shelving EQ filters only\n\
+ } else {\n\
+ A = Math.sqrt( Math.pow(10, (this.dBgain/20)) ); \n\
+ }\n\
+\n\
+ var w0 = DSP.TWO_PI * this.f0 / this.Fs;\n\
+\n\
+ var cosw0 = Math.cos(w0);\n\
+ var sinw0 = Math.sin(w0);\n\
+\n\
+ var alpha = 0;\n\
+ \n\
+ switch (this.parameterType) {\n\
+ case DSP.Q:\n\
+ alpha = sinw0/(2*this.Q);\n\
+ break;\n\
+ \n\
+ case DSP.BW:\n\
+ alpha = sinw0 * sinh( Math.LN2/2 * this.BW * w0/sinw0 );\n\
+ break;\n\
+\n\
+ case DSP.S:\n\
+ alpha = sinw0/2 * Math.sqrt( (A + 1/A)*(1/this.S - 1) + 2 );\n\
+ break;\n\
+ }\n\
+\n\
+ /**\n\
+ FYI: The relationship between bandwidth and Q is\n\
+ 1/Q = 2*sinh(ln(2)/2*BW*w0/sin(w0)) (digital filter w BLT)\n\
+ or 1/Q = 2*sinh(ln(2)/2*BW) (analog filter prototype)\n\
+\n\
+ The relationship between shelf slope and Q is\n\
+ 1/Q = sqrt((A + 1/A)*(1/S - 1) + 2)\n\
+ */\n\
+\n\
+ switch (this.type) {\n\
+ case DSP.LPF: // H(s) = 1 / (s^2 + s/Q + 1)\n\
+ this.b0 = (1 - cosw0)/2;\n\
+ this.b1 = 1 - cosw0;\n\
+ this.b2 = (1 - cosw0)/2;\n\
+ this.a0 = 1 + alpha;\n\
+ this.a1 = -2 * cosw0;\n\
+ this.a2 = 1 - alpha;\n\
+ break;\n\
+\n\
+ case DSP.HPF: // H(s) = s^2 / (s^2 + s/Q + 1)\n\
+ this.b0 = (1 + cosw0)/2;\n\
+ this.b1 = -(1 + cosw0);\n\
+ this.b2 = (1 + cosw0)/2;\n\
+ this.a0 = 1 + alpha;\n\
+ this.a1 = -2 * cosw0;\n\
+ this.a2 = 1 - alpha;\n\
+ break;\n\
+\n\
+ case DSP.BPF_CONSTANT_SKIRT: // H(s) = s / (s^2 + s/Q + 1) (constant skirt gain, peak gain = Q)\n\
+ this.b0 = sinw0/2;\n\
+ this.b1 = 0;\n\
+ this.b2 = -sinw0/2;\n\
+ this.a0 = 1 + alpha;\n\
+ this.a1 = -2*cosw0;\n\
+ this.a2 = 1 - alpha;\n\
+ break;\n\
+\n\
+ case DSP.BPF_CONSTANT_PEAK: // H(s) = (s/Q) / (s^2 + s/Q + 1) (constant 0 dB peak gain)\n\
+ this.b0 = alpha;\n\
+ this.b1 = 0;\n\
+ this.b2 = -alpha;\n\
+ this.a0 = 1 + alpha;\n\
+ this.a1 = -2*cosw0;\n\
+ this.a2 = 1 - alpha;\n\
+ break;\n\
+\n\
+ case DSP.NOTCH: // H(s) = (s^2 + 1) / (s^2 + s/Q + 1)\n\
+ this.b0 = 1;\n\
+ this.b1 = -2*cosw0;\n\
+ this.b2 = 1;\n\
+ this.a0 = 1 + alpha;\n\
+ this.a1 = -2*cosw0;\n\
+ this.a2 = 1 - alpha;\n\
+ break;\n\
+\n\
+ case DSP.APF: // H(s) = (s^2 - s/Q + 1) / (s^2 + s/Q + 1)\n\
+ this.b0 = 1 - alpha;\n\
+ this.b1 = -2*cosw0;\n\
+ this.b2 = 1 + alpha;\n\
+ this.a0 = 1 + alpha;\n\
+ this.a1 = -2*cosw0;\n\
+ this.a2 = 1 - alpha;\n\
+ break;\n\
+\n\
+ case DSP.PEAKING_EQ: // H(s) = (s^2 + s*(A/Q) + 1) / (s^2 + s/(A*Q) + 1)\n\
+ this.b0 = 1 + alpha*A;\n\
+ this.b1 = -2*cosw0;\n\
+ this.b2 = 1 - alpha*A;\n\
+ this.a0 = 1 + alpha/A;\n\
+ this.a1 = -2*cosw0;\n\
+ this.a2 = 1 - alpha/A;\n\
+ break;\n\
+\n\
+ case DSP.LOW_SHELF: // H(s) = A * (s^2 + (sqrt(A)/Q)*s + A)/(A*s^2 + (sqrt(A)/Q)*s + 1)\n\
+ var coeff = sinw0 * Math.sqrt( (A^2 + 1)*(1/this.S - 1) + 2*A );\n\
+ this.b0 = A*( (A+1) - (A-1)*cosw0 + coeff );\n\
+ this.b1 = 2*A*( (A-1) - (A+1)*cosw0 );\n\
+ this.b2 = A*( (A+1) - (A-1)*cosw0 - coeff );\n\
+ this.a0 = (A+1) + (A-1)*cosw0 + coeff;\n\
+ this.a1 = -2*( (A-1) + (A+1)*cosw0 );\n\
+ this.a2 = (A+1) + (A-1)*cosw0 - coeff;\n\
+ break;\n\
+\n\
+ case DSP.HIGH_SHELF: // H(s) = A * (A*s^2 + (sqrt(A)/Q)*s + 1)/(s^2 + (sqrt(A)/Q)*s + A)\n\
+ var coeff = sinw0 * Math.sqrt( (A^2 + 1)*(1/this.S - 1) + 2*A );\n\
+ this.b0 = A*( (A+1) + (A-1)*cosw0 + coeff );\n\
+ this.b1 = -2*A*( (A-1) + (A+1)*cosw0 );\n\
+ this.b2 = A*( (A+1) + (A-1)*cosw0 - coeff );\n\
+ this.a0 = (A+1) - (A-1)*cosw0 + coeff;\n\
+ this.a1 = 2*( (A-1) - (A+1)*cosw0 );\n\
+ this.a2 = (A+1) - (A-1)*cosw0 - coeff;\n\
+ break;\n\
+ }\n\
+ \n\
+ this.b0a0 = this.b0/this.a0;\n\
+ this.b1a0 = this.b1/this.a0;\n\
+ this.b2a0 = this.b2/this.a0;\n\
+ this.a1a0 = this.a1/this.a0;\n\
+ this.a2a0 = this.a2/this.a0;\n\
+ }\n\
+\n\
+ this.process = function(buffer) {\n\
+ //y[n] = (b0/a0)*x[n] + (b1/a0)*x[n-1] + (b2/a0)*x[n-2]\n\
+ // - (a1/a0)*y[n-1] - (a2/a0)*y[n-2]\n\
+\n\
+ var len = buffer.length;\n\
+ var output = new Array(len);\n\
+\n\
+ for ( var i=0; i<buffer.length; i++ ) {\n\
+ output[i] = this.b0a0*buffer[i] + this.b1a0*this.x_1_l + this.b2a0*this.x_2_l - this.a1a0*this.y_1_l - this.a2a0*this.y_2_l;\n\
+ this.y_2_l = this.y_1_l;\n\
+ this.y_1_l = output[i];\n\
+ this.x_2_l = this.x_1_l;\n\
+ this.x_1_l = buffer[i];\n\
+ }\n\
+\n\
+ return output;\n\
+ }\n\
+\n\
+ this.processStereo = function(buffer) {\n\
+ //y[n] = (b0/a0)*x[n] + (b1/a0)*x[n-1] + (b2/a0)*x[n-2]\n\
+ // - (a1/a0)*y[n-1] - (a2/a0)*y[n-2]\n\
+\n\
+ var len = buffer.length;\n\
+ var output = new Array(len);\n\
+ \n\
+ for ( var i=0; i<len/2; i++ ) {\n\
+ output[2*i] = this.b0a0*buffer[2*i] + this.b1a0*this.x_1_l + this.b2a0*this.x_2_l - this.a1a0*this.y_1_l - this.a2a0*this.y_2_l;\n\
+ this.y_2_l = this.y_1_l;\n\
+ this.y_1_l = output[2*i];\n\
+ this.x_2_l = this.x_1_l;\n\
+ this.x_1_l = buffer[2*i];\n\
+\n\
+ output[2*i+1] = this.b0a0*buffer[2*i+1] + this.b1a0*this.x_1_r + this.b2a0*this.x_2_r - this.a1a0*this.y_1_r - this.a2a0*this.y_2_r;\n\
+ this.y_2_r = this.y_1_r;\n\
+ this.y_1_r = output[2*i+1];\n\
+ this.x_2_r = this.x_1_r;\n\
+ this.x_1_r = buffer[2*i+1];\n\
+ }\n\
+\n\
+ return output;\n\
+ }\n\
+};\n\
+\n\
+\n\
+/* \n\
+ * Magnitude to decibels\n\
+ * \n\
+ * Created by Ricard Marxer <email@ricardmarxer.com> on 2010-05-23.\n\
+ * Copyright 2010 Ricard Marxer. All rights reserved.\n\
+ *\n\
+ * @buffer array of magnitudes to convert to decibels\n\
+ * \n\
+ * @returns the array in decibels\n\
+ *\n\
+ */\n\
+DSP.mag2db = function(buffer) {\n\
+ var minDb = -120;\n\
+ var minMag = Math.pow(10.0, minDb / 20.0);\n\
+\n\
+ var log = Math.log;\n\
+ var max = Math.max;\n\
+ \n\
+ var result = Array(buffer.length);\n\
+ for (var i=0; i<buffer.length; i++) {\n\
+ result[i] = 20.0*log(max(buffer[i], minMag));\n\
+ }\n\
+\n\
+ return result;\n\
+};\n\
+\n\
+/* \n\
+ * Frequency response\n\
+ * \n\
+ * Created by Ricard Marxer <email@ricardmarxer.com> on 2010-05-23.\n\
+ * Copyright 2010 Ricard Marxer. All rights reserved.\n\
+ *\n\
+ * Calculates the frequency response at the given points.\n\
+ *\n\
+ * @b b coefficients of the filter\n\
+ * @a a coefficients of the filter\n\
+ * @w w points (normally between -PI and PI) where to calculate the frequency response\n\
+ * \n\
+ * @returns the frequency response in magnitude\n\
+ *\n\
+ */\n\
+DSP.freqz = function(b, a, w) {\n\
+ if (!w) {\n\
+ w = Array(200);\n\
+ for (var i=0;i<w.length; i++) {\n\
+ w[i] = DSP.TWO_PI/w.length * i - Math.PI;\n\
+ }\n\
+ }\n\
+\n\
+ var result = Array(w.length);\n\
+ \n\
+ var sqrt = Math.sqrt;\n\
+ var cos = Math.cos;\n\
+ var sin = Math.sin;\n\
+ \n\
+ for (var i=0; i<w.length; i++) {\n\
+ var numerator = {real:0.0, imag:0.0};\n\
+ for (var j=0; j<b.length; j++) {\n\
+ numerator.real += b[j] * cos(-j*w[i]);\n\
+ numerator.imag += b[j] * sin(-j*w[i]);\n\
+ }\n\
+\n\
+ var denominator = {real:0.0, imag:0.0};\n\
+ for (var j=0; j<a.length; j++) {\n\
+ denominator.real += a[j] * cos(-j*w[i]);\n\
+ denominator.imag += a[j] * sin(-j*w[i]);\n\
+ }\n\
+ \n\
+ result[i] = sqrt(numerator.real*numerator.real + numerator.imag*numerator.imag) / sqrt(denominator.real*denominator.real + denominator.imag*denominator.imag);\n\
+ }\n\
+\n\
+ return result;\n\
+};\n\
+\n\
+/* \n\
+ * Graphical Equalizer\n\
+ * \n\
+ * Created by Ricard Marxer <email@ricardmarxer.com> on 2010-05-23.\n\
+ * Copyright 2010 Ricard Marxer. All rights reserved.\n\
+ *\n\
+ */\n\
+// Implementation of a graphic equalizer with a configurable bands-per-octave\n\
+// and minimum and maximum frequencies\n\
+GraphicalEq = function(sampleRate) {\n\
+ this.FS = sampleRate;\n\
+ this.minFreq = 40.0;\n\
+ this.maxFreq = 16000.0;\n\
+\n\
+ this.bandsPerOctave = 1.0;\n\
+\n\
+ this.filters = []\n\
+ this.freqzs = []\n\
+\n\
+ this.calculateFreqzs = true;\n\
+\n\
+ this.recalculateFilters = function() {\n\
+ var bandCount = Math.round(Math.log(this.maxFreq/this.minFreq) * this.bandsPerOctave/ Math.LN2);\n\
+\n\
+ this.filters = [];\n\
+ for (var i=0; i<bandCount; i++) {\n\
+ var freq = this.minFreq*(Math.pow(2, i/this.bandsPerOctave));\n\
+ var newFilter = new Biquad(DSP.PEAKING_EQ, this.FS);\n\
+ newFilter.setDbGain(0);\n\
+ newFilter.setBW(1/this.bandsPerOctave);\n\
+ newFilter.setF0(freq);\n\
+ this.filters[i] = newFilter;\n\
+ this.recalculateFreqz(i);\n\
+ }\n\
+ }\n\
+\n\
+ this.setMinimumFrequency = function(freq) {\n\
+ this.minFreq = freq;\n\
+ this.recalculateFilters();\n\
+ }\n\
+\n\
+ this.setMaximumFrequency = function(freq) {\n\
+ this.maxFreq = freq;\n\
+ this.recalculateFilters();\n\
+ }\n\
+\n\
+ this.setBandsPerOctave = function(bands) {\n\
+ this.bandsPerOctave = bands;\n\
+ this.recalculateFilters();\n\
+ }\n\
+\n\
+ this.setBandGain = function(bandIndex, gain) {\n\
+ if (bandIndex < 0 || bandIndex > (this.filters.length-1)) {\n\
+ throw \"The band index of the graphical equalizer is out of bounds.\";\n\
+ return;\n\
+ }\n\
+\n\
+ if (!gain) {\n\
+ throw \"A gain must be passed.\"\n\
+ return;\n\
+ }\n\
+ \n\
+ \n\
+ this.filters[bandIndex].setDbGain(gain);\n\
+ this.recalculateFreqz(bandIndex);\n\
+ }\n\
+ \n\
+ this.recalculateFreqz = function(bandIndex) {\n\
+ if (!this.calculateFreqzs) {\n\
+ return;\n\
+ }\n\
+\n\
+ \n\
+ if (bandIndex < 0 || bandIndex > (this.filters.length-1)) {\n\
+ throw \"The band index of the graphical equalizer is out of bounds. \" + bandIndex + \" is out of [\" + 0 + \", \" + this.filters.length-1 + \"]\"\n\
+ return;\n\
+ }\n\
+ \n\
+ if (!this.w) {\n\
+ this.w = Array(400);\n\
+ for (var i=0; i<this.w.length; i++) {\n\
+ this.w[i] = Math.PI/this.w.length * i;\n\
+ }\n\
+ }\n\
+ \n\
+ var b = [this.filters[bandIndex].b0, this.filters[bandIndex].b1, this.filters[bandIndex].b2];\n\
+ var a = [this.filters[bandIndex].a0, this.filters[bandIndex].a1, this.filters[bandIndex].a2];\n\
+\n\
+ this.freqzs[bandIndex] = DSP.mag2db(DSP.freqz(b, a, this.w));\n\
+ }\n\
+\n\
+ this.process = function(buffer) {\n\
+ var output = buffer;\n\
+ \n\
+ for ( var i=0; i<this.filters.length; i++ ) {\n\
+ output = this.filters[i].process(output);\n\
+ }\n\
+\n\
+ return output;\n\
+ }\n\
+\n\
+ this.processStereo = function(buffer) {\n\
+ var output = buffer;\n\
+ \n\
+ for ( var i=0; i<this.filters.length; i++ ) {\n\
+ output = this.filters[i].processStereo(output);\n\
+ }\n\
+\n\
+ return output;\n\
+ }\n\
+\n\
+}\n\
+\n\
+\n\
+\n\
+/**\n\
+ * MultiDelay effect by Almer Thie (http://code.almeros.com).\n\
+ * Copyright 2010 Almer Thie. All rights reserved.\n\
+ * Example: http://code.almeros.com/code-examples/delay-firefox-audio-api/\n\
+ * \n\
+ * This is a delay that feeds it's own delayed signal back into its circular \n\
+ * buffer. Also known as a CombFilter.\n\
+ *\n\
+ * Compatible with interleaved stereo (or more channel) buffers and \n\
+ * non-interleaved mono buffers.\n\
+ * \n\
+ * @param {Number} maxDelayInSamplesSize Maximum possible delay in samples (size of circular buffer)\n\
+ * @param {Number} delayInSamples Initial delay in samples\n\
+ * @param {Number} masterVolume Initial master volume. Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ * @param {Number} delayVolume Initial feedback delay volume. Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ * \n\
+ * @constructor\n\
+ */\n\
+MultiDelay = function(maxDelayInSamplesSize, delayInSamples, masterVolume, delayVolume){\n\
+ this.delayBufferSamples = new Array(maxDelayInSamplesSize); // The maximum size of delay\n\
+ this.delayInputPointer = delayInSamples; \n\
+ this.delayOutputPointer = 0;\n\
+ \n\
+ this.delayInSamples = delayInSamples;\n\
+ this.masterVolume = masterVolume;\n\
+ this.delayVolume = delayVolume;\n\
+}\n\
+\n\
+/**\n\
+ * Change the delay time in samples.\n\
+ *\n\
+ * @param {Number} delayInSamples Delay in samples\n\
+ */\n\
+MultiDelay.prototype.setDelayInSamples = function (delayInSamples){\n\
+ this.delayInSamples = delayInSamples;\n\
+ \n\
+ this.delayInputPointer = this.delayOutputPointer + delayInSamples;\n\
+ if(this.delayInputPointer >= this.delayBufferSamples.length-1)\n\
+ this.delayInputPointer = this.delayInputPointer - this.delayBufferSamples.length; \n\
+}\n\
+\n\
+/**\n\
+ * Change the master volume.\n\
+ *\n\
+ * @param {Number} masterVolume Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ */\n\
+MultiDelay.prototype.setMasterVolume = function (masterVolume){\n\
+ this.masterVolume = masterVolume;\n\
+}\n\
+\n\
+/**\n\
+ * Change the delay feedback volume.\n\
+ *\n\
+ * @param {Number} delayVolume Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ */\n\
+MultiDelay.prototype.setDelayVolume = function (delayVolume){\n\
+ this.delayVolume = delayVolume;\n\
+}\n\
+\n\
+/**\n\
+ * Process a given interleaved or mono non-interleaved float value Array and adds the delayed audio.\n\
+ *\n\
+ * @param {Array} samples Array containing Float values or a Float32Array\n\
+ * \n\
+ * @returns A new Float32Array interleaved or mono non-interleaved as was fed to this function.\n\
+ */\n\
+MultiDelay.prototype.process = function (samples){\n\
+ // NB. Make a copy to put in the output samples to return. \n\
+ var outputSamples = new Array(samples.length);\n\
+\n\
+ for(var i=0; i<samples.length; i++){\n\
+ \n\
+ // delayBufferSamples could contain initial NULL's, return silence in that case\n\
+ var delaySample = (this.delayBufferSamples[this.delayOutputPointer]==null ? 0.0 : this.delayBufferSamples[this.delayOutputPointer]);\n\
+ \n\
+ // Mix normal audio data with delayed audio\n\
+ var sample = (delaySample * this.delayVolume) + samples[i]; \n\
+ \n\
+ // Add audio data with the delay in the delay buffer\n\
+ this.delayBufferSamples[this.delayInputPointer] = sample;\n\
+ \n\
+ // Return the audio with delay mix\n\
+ outputSamples[i] = sample * this.masterVolume;\n\
+ \n\
+ // Manage circulair delay buffer pointers\n\
+ this.delayInputPointer++;\n\
+ if(this.delayInputPointer >= this.delayBufferSamples.length-1)\n\
+ this.delayInputPointer = 0;\n\
+ \n\
+ this.delayOutputPointer++;\n\
+ if(this.delayOutputPointer >= this.delayBufferSamples.length-1)\n\
+ this.delayOutputPointer = 0; \n\
+ \n\
+ }\n\
+ \n\
+ return outputSamples;\n\
+}\n\
+\n\
+\n\
+\n\
+\n\
+/**\n\
+ * SingleDelay effect by Almer Thie (http://code.almeros.com).\n\
+ * Copyright 2010 Almer Thie. All rights reserved.\n\
+ * Example: See usage in Reverb class\n\
+ * \n\
+ * This is a delay that does NOT feeds it's own delayed signal back into its \n\
+ * circular buffer, neither does it return the original signal. Also known as \n\
+ * an AllPassFilter(?).\n\
+ *\n\
+ * Compatible with interleaved stereo (or more channel) buffers and \n\
+ * non-interleaved mono buffers.\n\
+ * \n\
+ * @param {Number} maxDelayInSamplesSize Maximum possible delay in samples (size of circular buffer)\n\
+ * @param {Number} delayInSamples Initial delay in samples\n\
+ * @param {Number} delayVolume Initial feedback delay volume. Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ * \n\
+ * @constructor\n\
+ */\n\
+SingleDelay = function(maxDelayInSamplesSize, delayInSamples, delayVolume){\n\
+ this.delayBufferSamples = new Array(maxDelayInSamplesSize); // The maximum size of delay\n\
+ this.delayInputPointer = delayInSamples; \n\
+ this.delayOutputPointer = 0;\n\
+ \n\
+ this.delayInSamples = delayInSamples;\n\
+ this.delayVolume = delayVolume;\n\
+}\n\
+\n\
+/**\n\
+ * Change the delay time in samples.\n\
+ *\n\
+ * @param {Number} delayInSamples Delay in samples\n\
+ */\n\
+SingleDelay.prototype.setDelayInSamples = function (delayInSamples){\n\
+ this.delayInSamples = delayInSamples;\n\
+ \n\
+ this.delayInputPointer = this.delayOutputPointer + delayInSamples;\n\
+ if(this.delayInputPointer >= this.delayBufferSamples.length-1)\n\
+ this.delayInputPointer = this.delayInputPointer - this.delayBufferSamples.length; \n\
+}\n\
+\n\
+/**\n\
+ * Change the return signal volume.\n\
+ *\n\
+ * @param {Number} delayVolume Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ */\n\
+SingleDelay.prototype.setDelayVolume = function (delayVolume){\n\
+ this.delayVolume = delayVolume;\n\
+}\n\
+\n\
+/**\n\
+ * Process a given interleaved or mono non-interleaved float value Array and \n\
+ * returns the delayed audio.\n\
+ *\n\
+ * @param {Array} samples Array containing Float values or a Float32Array\n\
+ * \n\
+ * @returns A new Float32Array interleaved or mono non-interleaved as was fed to this function.\n\
+ */\n\
+SingleDelay.prototype.process = function (samples){\n\
+ // NB. Make a copy to put in the output samples to return. \n\
+ var outputSamples = new Array(samples.length);\n\
+\n\
+ for(var i=0; i<samples.length; i++){\n\
+\n\
+ // Add audio data with the delay in the delay buffer\n\
+ this.delayBufferSamples[this.delayInputPointer] = samples[i];\n\
+ \n\
+ // delayBufferSamples could contain initial NULL's, return silence in that case\n\
+ var delaySample = this.delayBufferSamples[this.delayOutputPointer];\n\
+\n\
+ // Return the audio with delay mix\n\
+ outputSamples[i] = delaySample * this.delayVolume;\n\
+\n\
+ \n\
+ // Manage circulair delay buffer pointers\n\
+ this.delayInputPointer++;\n\
+ if(this.delayInputPointer >= this.delayBufferSamples.length-1)\n\
+ this.delayInputPointer = 0;\n\
+ \n\
+ this.delayOutputPointer++;\n\
+ if(this.delayOutputPointer >= this.delayBufferSamples.length-1)\n\
+ this.delayOutputPointer = 0; \n\
+ \n\
+ }\n\
+ \n\
+ return outputSamples;\n\
+}\n\
+\n\
+\n\
+\n\
+\n\
+\n\
+/**\n\
+ * Reverb effect by Almer Thie (http://code.almeros.com).\n\
+ * Copyright 2010 Almer Thie. All rights reserved.\n\
+ * Example: http://code.almeros.com/code-examples/reverb-firefox-audio-api/\n\
+ * \n\
+ * This reverb consists of 6 SingleDelays, 6 MultiDelays and an IIRFilter2 \n\
+ * for each of the two stereo channels.\n\
+ *\n\
+ * Compatible with interleaved stereo buffers only!\n\
+ * \n\
+ * @param {Number} maxDelayInSamplesSize Maximum possible delay in samples (size of circular buffers)\n\
+ * @param {Number} delayInSamples Initial delay in samples for internal (Single/Multi)delays\n\
+ * @param {Number} masterVolume Initial master volume. Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ * @param {Number} mixVolume Initial reverb signal mix volume. Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ * @param {Number} delayVolume Initial feedback delay volume for internal (Single/Multi)delays. Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ * @param {Number} dampFrequency Initial low pass filter frequency. 0 to 44100 (depending on your maximum sampling frequency)\n\
+ * \n\
+ * @constructor\n\
+ */\n\
+Reverb = function(maxDelayInSamplesSize, delayInSamples, masterVolume, mixVolume, delayVolume, dampFrequency){\n\
+ this.delayInSamples = delayInSamples;\n\
+ this.masterVolume = masterVolume;\n\
+ this.mixVolume = mixVolume;\n\
+ this.delayVolume = delayVolume;\n\
+ this.dampFrequency = dampFrequency;\n\
+ \n\
+ this.NR_OF_MULTIDELAYS = 6;\n\
+ this.NR_OF_SINGLEDELAYS = 6;\n\
+ \n\
+ this.LOWPASSL = new IIRFilter2(DSP.LOWPASS, dampFrequency, 0, 44100);\n\
+ this.LOWPASSR = new IIRFilter2(DSP.LOWPASS, dampFrequency, 0, 44100);\n\
+ \n\
+ this.singleDelays = [];\n\
+ for(var i = 0; i<this.NR_OF_SINGLEDELAYS; i++){\n\
+ var delayMultiply = 1.0 + (i/7.0); // 1.0, 1.1, 1.2... \n\
+ this.singleDelays[i] = new SingleDelay(maxDelayInSamplesSize, Math.round(this.delayInSamples * delayMultiply), this.delayVolume);\n\
+ }\n\
+ \n\
+ this.multiDelays = [];\n\
+ for(var i = 0; i<this.NR_OF_MULTIDELAYS; i++){\n\
+ var delayMultiply = 1.0 + (i/10.0); // 1.0, 1.1, 1.2... \n\
+ this.multiDelays[i] = new MultiDelay(maxDelayInSamplesSize, Math.round(this.delayInSamples * delayMultiply), this.masterVolume, this.delayVolume);\n\
+ }\n\
+}\n\
+\n\
+/**\n\
+ * Change the delay time in samples as a base for all delays.\n\
+ *\n\
+ * @param {Number} delayInSamples Delay in samples\n\
+ */\n\
+Reverb.prototype.setDelayInSamples = function (delayInSamples){\n\
+ this.delayInSamples = delayInSamples;\n\
+ \n\
+ for(var i = 0; i<this.NR_OF_SINGLEDELAYS; i++){\n\
+ var delayMultiply = 1.0 + (i/7.0); // 1.0, 1.1, 1.2...\n\
+ this.singleDelays[i].setDelayInSamples( Math.round(this.delayInSamples * delayMultiply) );\n\
+ }\n\
+ \n\
+ for(var i = 0; i<this.NR_OF_MULTIDELAYS; i++){\n\
+ var delayMultiply = 1.0 + (i/10.0); // 1.0, 1.1, 1.2...\n\
+ this.multiDelays[i].setDelayInSamples( Math.round(this.delayInSamples * delayMultiply) );\n\
+ }\n\
+}\n\
+\n\
+/**\n\
+ * Change the master volume.\n\
+ *\n\
+ * @param {Number} masterVolume Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ */\n\
+Reverb.prototype.setMasterVolume = function (masterVolume){\n\
+ this.masterVolume = masterVolume;\n\
+}\n\
+\n\
+/**\n\
+ * Change the reverb signal mix level.\n\
+ *\n\
+ * @param {Number} mixVolume Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ */\n\
+Reverb.prototype.setMixVolume = function (mixVolume){\n\
+ this.mixVolume = mixVolume;\n\
+}\n\
+\n\
+/**\n\
+ * Change all delays feedback volume.\n\
+ *\n\
+ * @param {Number} delayVolume Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ */\n\
+Reverb.prototype.setDelayVolume = function (delayVolume){\n\
+ this.delayVolume = delayVolume;\n\
+ \n\
+ for(var i = 0; i<this.NR_OF_SINGLEDELAYS; i++){\n\
+ this.singleDelays[i].setDelayVolume(this.delayVolume);\n\
+ } \n\
+ \n\
+ for(var i = 0; i<this.NR_OF_MULTIDELAYS; i++){\n\
+ this.multiDelays[i].setDelayVolume(this.delayVolume);\n\
+ } \n\
+}\n\
+\n\
+/**\n\
+ * Change the Low Pass filter frequency.\n\
+ *\n\
+ * @param {Number} dampFrequency low pass filter frequency. 0 to 44100 (depending on your maximum sampling frequency)\n\
+ */\n\
+Reverb.prototype.setDampFrequency = function (dampFrequency){\n\
+ this.dampFrequency = dampFrequency;\n\
+ \n\
+ this.LOWPASSL.set(dampFrequency, 0);\n\
+ this.LOWPASSR.set(dampFrequency, 0); \n\
+}\n\
+\n\
+/**\n\
+ * Process a given interleaved float value Array and copies and adds the reverb signal.\n\
+ *\n\
+ * @param {Array} samples Array containing Float values or a Float32Array\n\
+ * \n\
+ * @returns A new Float32Array interleaved buffer.\n\
+ */\n\
+Reverb.prototype.process = function (interleavedSamples){ \n\
+ // NB. Make a copy to put in the output samples to return. \n\
+ var outputSamples = new Array(interleavedSamples.length);\n\
+ \n\
+ // Perform low pass on the input samples to mimick damp\n\
+ var leftRightMix = DSP.deinterleave(interleavedSamples);\n\
+ this.LOWPASSL.process( leftRightMix[DSP.LEFT] );\n\
+ this.LOWPASSR.process( leftRightMix[DSP.RIGHT] ); \n\
+ var filteredSamples = DSP.interleave(leftRightMix[DSP.LEFT], leftRightMix[DSP.RIGHT]);\n\
+\n\
+ // Process MultiDelays in parallel\n\
+ for(var i = 0; i<this.NR_OF_MULTIDELAYS; i++){\n\
+ // Invert the signal of every even multiDelay\n\
+ outputSamples = mixSampleBuffers(outputSamples, this.multiDelays[i].process(filteredSamples), 2%i==0, this.NR_OF_MULTIDELAYS);\n\
+ }\n\
+ \n\
+ // Process SingleDelays in series\n\
+ var singleDelaySamples = new Array(outputSamples.length);\n\
+ for(var i = 0; i<this.NR_OF_SINGLEDELAYS; i++){\n\
+ // Invert the signal of every even singleDelay\n\
+ singleDelaySamples = mixSampleBuffers(singleDelaySamples, this.singleDelays[i].process(outputSamples), 2%i==0, 1); \n\
+ }\n\
+\n\
+ // Apply the volume of the reverb signal\n\
+ for(var i = 0; i<singleDelaySamples.length; i++){\n\
+ singleDelaySamples[i] *= this.mixVolume;\n\
+ }\n\
+ \n\
+ // Mix the original signal with the reverb signal\n\
+ outputSamples = mixSampleBuffers(singleDelaySamples, interleavedSamples, 0, 1); \n\
+\n\
+ // Apply the master volume to the complete signal\n\
+ for(var i = 0; i<outputSamples.length; i++){\n\
+ outputSamples[i] *= this.masterVolume;\n\
+ }\n\
+ \n\
+ return outputSamples;\n\
+}\n\
+\n\
+/**\n\
+ * Helper method (for Reverb) to mix two (interleaved) samplebuffers. It's possible \n\
+ * to negate the second buffer while mixing and to perform a volume correction \n\
+ * on the final signal.\n\
+ * \n\
+ * @param {Array} sampleBuffer1 Array containing Float values or a Float32Array\n\
+ * @param {Array} sampleBuffer2 Array containing Float values or a Float32Array\n\
+ * @param {Boolean} negate When true inverts/flips the audio signal\n\
+ * @param {Number} volumeCorrection When you add multiple sample buffers, use this to tame your signal ;)\n\
+ * \n\
+ * @returns A new Float32Array interleaved buffer.\n\
+ */\n\
+function mixSampleBuffers(sampleBuffer1, sampleBuffer2, negate, volumeCorrection){\n\
+ var outputSamples = new Array(sampleBuffer1);\n\
+\n\
+ for(var i = 0; i<sampleBuffer1.length; i++){\n\
+ outputSamples[i] += (negate ? -sampleBuffer2[i] : sampleBuffer2[i]) / volumeCorrection;\n\
+ }\n\
+ \n\
+ return outputSamples;\n\
+} \n\
+\n\
+/*\n\
+ * BeatDetektor.js\n\
+ *\n\
+ * BeatDetektor - CubicFX Visualizer Beat Detection & Analysis Algorithm\n\
+ * Javascript port by Charles J. Cliffe and Corban Brook\n\
+ *\n\
+ * Created by Charles J. Cliffe on 09-11-30.\n\
+ * Copyright 2009 Charles J. Cliffe. All rights reserved.\n\
+ *\n\
+ * BeatDetektor is free software: you can redistribute it and/or modify\n\
+ * it under the terms of the GNU Lesser General Public License as published by\n\
+ * the Free Software Foundation, either version 3 of the License, or\n\
+ * (at your option) any later version.\n\
+ *\n\
+ * Please note that only the Javascript version of BeatDetektor is licensed\n\
+ * under the terms of LGPL version 3; ports of BeatDetektor or derivatives\n\
+ * in other languages are licensed under the terms of GPL version 3.\n\
+ *\n\
+ * BeatDetektor is distributed in the hope that it will be useful,\n\
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\n\
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\
+ * GNU Lesser General Public License for more details.\n\
+ *\n\
+ * You should have received a copy of the GNU Lesser General Public License\n\
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.\n\
+ *\n\
+ * Please contact cj@cubicproductions.com if you seek alternate\n\
+ * licensing terms for your project.\n\
+ *\n\
+ */\n\
+\n\
+\n\
+/* \n\
+ BeatDetektor class\n\
+\n\
+\n\
+ Theory:\n\
+\n\
+ Trigger detection is performed using a trail of moving averages, \n\
+ \n\
+ The FFT input is broken up into 128 ranges and averaged, each range has two moving \n\
+ averages that tail each other at a rate of (1.0 / BD_DETECTION_RATE) seconds. \n\
+\n\
+ Each time the moving average for a range exceeds it's own tailing average by:\n\
+\n\
+ (moving_average[range] * BD_DETECTION_FACTOR >= moving_average[range])\n\
+\n\
+ if this is true there's a rising edge and a detection is flagged for that range. \n\
+ Next a trigger gap test is performed between rising edges and timestamp recorded. \n\
+\n\
+ If the gap is larger than our BPM window (in seconds) then we can discard it and\n\
+ reset the timestamp for a new detection -- but only after checking to see if it's a \n\
+ reasonable match for 2* the current detection in case it's only triggered every\n\
+ other beat. Gaps that are lower than the BPM window are ignored and the last \n\
+ timestamp will not be reset. \n\
+\n\
+ Gaps that are within a reasonable window are run through a quality stage to determine \n\
+ how 'close' they are to that channel's current prediction and are incremented or \n\
+ decremented by a weighted value depending on accuracy. Repeated hits of low accuracy \n\
+ will still move a value towards erroneous detection but it's quality will be lowered \n\
+ and will not be eligible for the gap time quality draft.\n\
+ \n\
+ Once quality has been assigned ranges are reviewed for good match candidates and if \n\
+ BD_MINIMUM_CONTRIBUTIONS or more ranges achieve a decent ratio (with a factor of \n\
+ BD_QUALITY_TOLERANCE) of contribution to the overall quality we take them into the \n\
+ contest round. Note that the contest round won't run on a given process() call if \n\
+ the total quality achieved does not meet or exceed BD_QUALITY_TOLERANCE.\n\
+ \n\
+ Each time through if a select draft of BPM ranges has achieved a reasonable quality \n\
+ above others it's awarded a value in the BPM contest. The BPM contest is a hash \n\
+ array indexed by an integer BPM value, each draft winner is awarded BD_QUALITY_REWARD.\n\
+\n\
+ Finally the BPM contest is examined to determine a leader and all contest entries \n\
+ are normalized to a total value of BD_FINISH_LINE, whichever range is closest to \n\
+ BD_FINISH_LINE at any given point is considered to be the best guess however waiting \n\
+ until a minimum contest winning value of about 20.0-25.0 will provide more accurate \n\
+ results. Note that the 20-25 rule may vary with lower and higher input ranges. \n\
+ A winning value that exceeds 40 or hovers around 60 (the finish line) is pretty much\n\
+ a guaranteed match.\n\
+\n\
+\n\
+ Configuration Kernel Notes:\n\
+\n\
+ The majority of the ratios and values have been reverse-engineered from my own \n\
+ observation and visualization of information from various aspects of the detection \n\
+ triggers; so not all parameters have a perfect definition nor perhaps the best value yet.\n\
+ However despite this it performs very well; I had expected several more layers \n\
+ before a reasonable detection would be achieved. Comments for these parameters will be \n\
+ updated as analysis of their direct effect is explored.\n\
+\n\
+\n\
+ Input Restrictions:\n\
+\n\
+ bpm_maximum must be within the range of (bpm_minimum*2)-1\n\
+ i.e. minimum of 50 must have a maximum of 99 because 50*2 = 100\n\
+\n\
+\n\
+ Changelog: \n\
+ \n\
+ 01/17/2010 - Charles J. Cliffe \n\
+ - Tested and tweaked default kernel values for tighter detection\n\
+ - Added BeatDetektor.config_48_95, BeatDetektor.config_90_179 and BeatDetektor.config_150_280 for more refined detection ranges\n\
+ - Updated unit test to include new range config example\n\
+\n\
+02/21/2010 - Charles J. Cliffe \n\
+ - Fixed numerous bugs and divide by 0 on 1% match causing poor accuracy\n\
+ - Re-worked the quality calulations, accuracy improved 8-10x\n\
+ - Primary value is now a fractional reading (*10, just divide by 10), added win_bpm_int_lo for integral readings\n\
+ - Added feedback loop for current_bpm to help back-up low quality channels\n\
+ - Unified range configs, now single default should be fine\n\
+ - Extended quality reward 'funnel'\n\
+\n\
+*/\n\
+BeatDetektor = function(bpm_minimum, bpm_maximum, alt_config)\n\
+{\n\
+ if (typeof(bpm_minimum)=='undefined') bpm_minimum = 85.0;\n\
+ if (typeof(bpm_maximum)=='undefined') bpm_maximum = 169.0\n\
+ \n\
+ this.config = (typeof(alt_config)!='undefined')?alt_config:BeatDetektor.config;\n\
+ \n\
+ this.BPM_MIN = bpm_minimum;\n\
+ this.BPM_MAX = bpm_maximum;\n\
+\n\
+ this.beat_counter = 0;\n\
+ this.half_counter = 0;\n\
+ this.quarter_counter = 0;\n\
+\n\
+ // current average (this sample) for range n\n\
+ this.a_freq_range = new Array(this.config.BD_DETECTION_RANGES);\n\
+ // moving average of frequency range n\n\
+ this.ma_freq_range = new Array(this.config.BD_DETECTION_RANGES);\n\
+ // moving average of moving average of frequency range n\n\
+ this.maa_freq_range = new Array(this.config.BD_DETECTION_RANGES);\n\
+ // timestamp of last detection for frequecy range n\n\
+ this.last_detection = new Array(this.config.BD_DETECTION_RANGES);\n\
+\n\
+ // moving average of gap lengths\n\
+ this.ma_bpm_range = new Array(this.config.BD_DETECTION_RANGES);\n\
+ // moving average of moving average of gap lengths\n\
+ this.maa_bpm_range = new Array(this.config.BD_DETECTION_RANGES);\n\
+\n\
+ // range n quality attribute, good match = quality+, bad match = quality-, min = 0\n\
+ this.detection_quality = new Array(this.config.BD_DETECTION_RANGES);\n\
+\n\
+ // current trigger state for range n\n\
+ this.detection = new Array(this.config.BD_DETECTION_RANGES); \n\
+ \n\
+ this.reset();\n\
+ \n\
+\n\
+}\n\
+\n\
+BeatDetektor.prototype.reset = function()\n\
+{\n\
+// var bpm_avg = 60.0/((this.BPM_MIN+this.BPM_MAX)/2.0);\n\
+\n\
+ for (var i = 0; i < this.config.BD_DETECTION_RANGES; i++)\n\
+ {\n\
+ this.a_freq_range[i] = 0.0;\n\
+ this.ma_freq_range[i] = 0.0;\n\
+ this.maa_freq_range[i] = 0.0;\n\
+ this.last_detection[i] = 0.0;\n\
+ \n\
+ this.ma_bpm_range[i] = \n\
+ this.maa_bpm_range[i] = 60.0/this.BPM_MIN + ((60.0/this.BPM_MAX-60.0/this.BPM_MIN) * (i/this.config.BD_DETECTION_RANGES)); \n\
+ \n\
+ this.detection_quality[i] = 0.0;\n\
+ this.detection[i] = false;\n\
+ }\n\
+ \n\
+ this.ma_quality_avg = 0;\n\
+ this.ma_quality_total = 0;\n\
+ \n\
+ this.bpm_contest = new Array();\n\
+ this.bpm_contest_lo = new Array();\n\
+ \n\
+ this.quality_total = 0.0;\n\
+ this.quality_avg = 0.0;\n\
+\n\
+ this.current_bpm = 0.0; \n\
+ this.current_bpm_lo = 0.0; \n\
+\n\
+ this.winning_bpm = 0.0; \n\
+ this.win_val = 0.0;\n\
+ this.winning_bpm_lo = 0.0; \n\
+ this.win_val_lo = 0.0;\n\
+\n\
+ this.win_bpm_int = 0;\n\
+ this.win_bpm_int_lo = 0;\n\
+\n\
+ this.bpm_predict = 0;\n\
+\n\
+ this.is_erratic = false;\n\
+ this.bpm_offset = 0.0;\n\
+ this.last_timer = 0.0;\n\
+ this.last_update = 0.0;\n\
+\n\
+ this.bpm_timer = 0.0;\n\
+ this.beat_counter = 0;\n\
+ this.half_counter = 0;\n\
+ this.quarter_counter = 0;\n\
+}\n\
+\n\
+\n\
+BeatDetektor.config_default = {\n\
+ BD_DETECTION_RANGES : 128, // How many ranges to quantize the FFT into\n\
+ BD_DETECTION_RATE : 12.0, // Rate in 1.0 / BD_DETECTION_RATE seconds\n\
+ BD_DETECTION_FACTOR : 0.915, // Trigger ratio\n\
+ BD_QUALITY_DECAY : 0.6, // range and contest decay\n\
+ BD_QUALITY_TOLERANCE : 0.96,// Use the top x % of contest results\n\
+ BD_QUALITY_REWARD : 10.0, // Award weight\n\
+ BD_QUALITY_STEP : 0.1, // Award step (roaming speed)\n\
+ BD_MINIMUM_CONTRIBUTIONS : 6, // At least x ranges must agree to process a result\n\
+ BD_FINISH_LINE : 60.0, // Contest values wil be normalized to this finish line\n\
+ // this is the 'funnel' that pulls ranges in / out of alignment based on trigger detection\n\
+ BD_REWARD_TOLERANCES : [ 0.001, 0.005, 0.01, 0.02, 0.04, 0.08, 0.10, 0.15, 0.30 ], // .1%, .5%, 1%, 2%, 4%, 8%, 10%, 15%\n\
+ BD_REWARD_MULTIPLIERS : [ 20.0, 10.0, 8.0, 1.0, 1.0/2.0, 1.0/4.0, 1.0/8.0, 1/16.0, 1/32.0 ]\n\
+};\n\
+\n\
+\n\
+// Default configuration kernel\n\
+BeatDetektor.config = BeatDetektor.config_default;\n\
+\n\
+\n\
+BeatDetektor.prototype.process = function(timer_seconds, fft_data)\n\
+{\n\
+ if (!this.last_timer) { this.last_timer = timer_seconds; return; } // ignore 0 start time\n\
+ if (this.last_timer > timer_seconds) { this.reset(); return; }\n\
+ \n\
+ var timestamp = timer_seconds;\n\
+ \n\
+ this.last_update = timer_seconds - this.last_timer;\n\
+ this.last_timer = timer_seconds;\n\
+\n\
+ if (this.last_update > 1.0) { this.reset(); return; }\n\
+\n\
+ var i,x;\n\
+ var v;\n\
+ \n\
+ var bpm_floor = 60.0/this.BPM_MAX;\n\
+ var bpm_ceil = 60.0/this.BPM_MIN;\n\
+ \n\
+ var range_step = (fft_data.length / this.config.BD_DETECTION_RANGES);\n\
+ var range = 0;\n\
+ \n\
+ \n\
+ for (x=0; x<fft_data.length; x+=range_step)\n\
+ {\n\
+ this.a_freq_range[range] = 0;\n\
+ \n\
+ // accumulate frequency values for this range\n\
+ for (i = x; i<x+range_step; i++)\n\
+ {\n\
+ v = Math.abs(fft_data[i]);\n\
+ this.a_freq_range[range] += v;\n\
+ }\n\
+ \n\
+ // average for range\n\
+ this.a_freq_range[range] /= range_step;\n\
+ \n\
+ // two sets of averages chase this one at a \n\
+ \n\
+ // moving average, increment closer to a_freq_range at a rate of 1.0 / BD_DETECTION_RATE seconds\n\
+ this.ma_freq_range[range] -= (this.ma_freq_range[range]-this.a_freq_range[range])*this.last_update*this.config.BD_DETECTION_RATE;\n\
+ // moving average of moving average, increment closer to this.ma_freq_range at a rate of 1.0 / BD_DETECTION_RATE seconds\n\
+ this.maa_freq_range[range] -= (this.maa_freq_range[range]-this.ma_freq_range[range])*this.last_update*this.config.BD_DETECTION_RATE;\n\
+ \n\
+ // if closest moving average peaks above trailing (with a tolerance of BD_DETECTION_FACTOR) then trigger a detection for this range \n\
+ var det = (this.ma_freq_range[range]*this.config.BD_DETECTION_FACTOR >= this.maa_freq_range[range]);\n\
+ \n\
+ // compute bpm clamps for comparison to gap lengths\n\
+ \n\
+ // clamp detection averages to input ranges\n\
+ if (this.ma_bpm_range[range] > bpm_ceil) this.ma_bpm_range[range] = bpm_ceil;\n\
+ if (this.ma_bpm_range[range] < bpm_floor) this.ma_bpm_range[range] = bpm_floor;\n\
+ if (this.maa_bpm_range[range] > bpm_ceil) this.maa_bpm_range[range] = bpm_ceil;\n\
+ if (this.maa_bpm_range[range] < bpm_floor) this.maa_bpm_range[range] = bpm_floor;\n\
+ \n\
+ var rewarded = false;\n\
+ \n\
+ // new detection since last, test it's quality\n\
+ if (!this.detection[range] && det)\n\
+ {\n\
+ // calculate length of gap (since start of last trigger)\n\
+ var trigger_gap = timestamp-this.last_detection[range];\n\
+ \n\
+ // trigger falls within acceptable range, \n\
+ if (trigger_gap < bpm_ceil && trigger_gap > (bpm_floor))\n\
+ { \n\
+ // compute gap and award quality\n\
+ \n\
+ // use our tolerances as a funnel to edge detection towards the most likely value\n\
+ for (i = 0; i < this.config.BD_REWARD_TOLERANCES.length; i++)\n\
+ {\n\
+ if (Math.abs(this.ma_bpm_range[range]-trigger_gap) < this.ma_bpm_range[range]*this.config.BD_REWARD_TOLERANCES[i])\n\
+ {\n\
+ this.detection_quality[range] += this.config.BD_QUALITY_REWARD * this.config.BD_REWARD_MULTIPLIERS[i]; \n\
+ rewarded = true;\n\
+ }\n\
+ } \n\
+ \n\
+ if (rewarded) \n\
+ {\n\
+ this.last_detection[range] = timestamp;\n\
+ }\n\
+ }\n\
+ else if (trigger_gap >= bpm_ceil) // low quality, gap exceeds maximum time\n\
+ {\n\
+ // start a new gap test, next gap is guaranteed to be longer\n\
+ \n\
+ // test for 1/2 beat\n\
+ trigger_gap /= 2.0;\n\
+\n\
+ if (trigger_gap < bpm_ceil && trigger_gap > (bpm_floor)) for (i = 0; i < this.config.BD_REWARD_TOLERANCES.length; i++)\n\
+ {\n\
+ if (Math.abs(this.ma_bpm_range[range]-trigger_gap) < this.ma_bpm_range[range]*this.config.BD_REWARD_TOLERANCES[i])\n\
+ {\n\
+ this.detection_quality[range] += this.config.BD_QUALITY_REWARD * this.config.BD_REWARD_MULTIPLIERS[i]; \n\
+ rewarded = true;\n\
+ }\n\
+ }\n\
+ \n\
+ \n\
+ // decrement quality if no 1/2 beat reward\n\
+ if (!rewarded) \n\
+ {\n\
+ trigger_gap *= 2.0;\n\
+ }\n\
+ this.last_detection[range] = timestamp; \n\
+ }\n\
+ \n\
+ if (rewarded)\n\
+ {\n\
+ var qmp = (this.detection_quality[range]/this.quality_avg)*this.config.BD_QUALITY_STEP;\n\
+ if (qmp > 1.0)\n\
+ {\n\
+ qmp = 1.0;\n\
+ }\n\
+\n\
+ this.ma_bpm_range[range] -= (this.ma_bpm_range[range]-trigger_gap) * qmp; \n\
+ this.maa_bpm_range[range] -= (this.maa_bpm_range[range]-this.ma_bpm_range[range]) * qmp;\n\
+ }\n\
+ else if (trigger_gap >= bpm_floor && trigger_gap <= bpm_ceil)\n\
+ {\n\
+ if (this.detection_quality[range] < this.quality_avg*this.config.BD_QUALITY_TOLERANCE && this.current_bpm)\n\
+ {\n\
+ this.ma_bpm_range[range] -= (this.ma_bpm_range[range]-trigger_gap) * this.config.BD_QUALITY_STEP;\n\
+ this.maa_bpm_range[range] -= (this.maa_bpm_range[range]-this.ma_bpm_range[range]) * this.config.BD_QUALITY_STEP;\n\
+ }\n\
+ this.detection_quality[range] -= this.config.BD_QUALITY_STEP;\n\
+ }\n\
+ else if (trigger_gap >= bpm_ceil)\n\
+ {\n\
+ if ((this.detection_quality[range] < this.quality_avg*this.config.BD_QUALITY_TOLERANCE) && this.current_bpm)\n\
+ {\n\
+ this.ma_bpm_range[range] -= (this.ma_bpm_range[range]-this.current_bpm) * 0.5;\n\
+ this.maa_bpm_range[range] -= (this.maa_bpm_range[range]-this.ma_bpm_range[range]) * 0.5 ;\n\
+ }\n\
+ this.detection_quality[range]-= this.config.BD_QUALITY_STEP;\n\
+ }\n\
+ \n\
+ }\n\
+ \n\
+ if ((!rewarded && timestamp-this.last_detection[range] > bpm_ceil) || (det && Math.abs(this.ma_bpm_range[range]-this.current_bpm) > this.bpm_offset)) \n\
+ this.detection_quality[range] -= this.detection_quality[range]*this.config.BD_QUALITY_STEP*this.config.BD_QUALITY_DECAY*this.last_update;\n\
+ \n\
+ // quality bottomed out, set to 0\n\
+ if (this.detection_quality[range] < 0.001) this.detection_quality[range]=0.001;\n\
+ \n\
+ this.detection[range] = det; \n\
+ \n\
+ range++;\n\
+ }\n\
+ \n\
+ // total contribution weight\n\
+ this.quality_total = 0;\n\
+ \n\
+ // total of bpm values\n\
+ var bpm_total = 0;\n\
+ // number of bpm ranges that contributed to this test\n\
+ var bpm_contributions = 0;\n\
+ \n\
+ \n\
+ // accumulate quality weight total\n\
+ for (var x=0; x<this.config.BD_DETECTION_RANGES; x++)\n\
+ {\n\
+ this.quality_total += this.detection_quality[x];\n\
+ }\n\
+ \n\
+ \n\
+ this.quality_avg = this.quality_total / this.config.BD_DETECTION_RANGES;\n\
+ \n\
+ \n\
+ if (this.quality_total)\n\
+ {\n\
+ // determine the average weight of each quality range\n\
+ this.ma_quality_avg += (this.quality_avg - this.ma_quality_avg) * this.last_update * this.config.BD_DETECTION_RATE/2.0;\n\
+\n\
+ this.maa_quality_avg += (this.ma_quality_avg - this.maa_quality_avg) * this.last_update;\n\
+ this.ma_quality_total += (this.quality_total - this.ma_quality_total) * this.last_update * this.config.BD_DETECTION_RATE/2.0;\n\
+\n\
+ this.ma_quality_avg -= 0.98*this.ma_quality_avg*this.last_update*3.0;\n\
+ }\n\
+ else\n\
+ {\n\
+ this.quality_avg = 0.001;\n\
+ }\n\
+\n\
+ if (this.ma_quality_total <= 0) this.ma_quality_total = 0.001;\n\
+ if (this.ma_quality_avg <= 0) this.ma_quality_avg = 0.001;\n\
+ \n\
+ var avg_bpm_offset = 0.0;\n\
+ var offset_test_bpm = this.current_bpm;\n\
+ var draft = new Array();\n\
+ \n\
+ if (this.quality_avg) for (x=0; x<this.config.BD_DETECTION_RANGES; x++)\n\
+ {\n\
+ // if this detection range weight*tolerance is higher than the average weight then add it's moving average contribution \n\
+ if (this.detection_quality[x]*this.config.BD_QUALITY_TOLERANCE >= this.ma_quality_avg)\n\
+ {\n\
+ if (this.ma_bpm_range[x] < bpm_ceil && this.ma_bpm_range[x] > bpm_floor)\n\
+ {\n\
+ bpm_total += this.maa_bpm_range[x];\n\
+\n\
+ var draft_float = Math.round((60.0/this.maa_bpm_range[x])*1000.0);\n\
+ \n\
+ draft_float = (Math.abs(Math.ceil(draft_float)-(60.0/this.current_bpm)*1000.0)<(Math.abs(Math.floor(draft_float)-(60.0/this.current_bpm)*1000.0)))?Math.ceil(draft_float/10.0):Math.floor(draft_float/10.0);\n\
+ var draft_int = parseInt(draft_float/10.0);\n\
+ // if (draft_int) console.log(draft_int);\n\
+ if (typeof(draft[draft_int]=='undefined')) draft[draft_int] = 0;\n\
+ \n\
+ draft[draft_int]+=this.detection_quality[x]/this.quality_avg;\n\
+ bpm_contributions++;\n\
+ if (offset_test_bpm == 0.0) offset_test_bpm = this.maa_bpm_range[x];\n\
+ else \n\
+ {\n\
+ avg_bpm_offset += Math.abs(offset_test_bpm-this.maa_bpm_range[x]);\n\
+ }\n\
+ \n\
+ \n\
+ }\n\
+ }\n\
+ }\n\
+ \n\
+ // if we have one or more contributions that pass criteria then attempt to display a guess\n\
+ var has_prediction = (bpm_contributions>=this.config.BD_MINIMUM_CONTRIBUTIONS)?true:false;\n\
+\n\
+ var draft_winner=0;\n\
+ var win_val = 0;\n\
+ \n\
+ if (has_prediction) \n\
+ {\n\
+ for (var draft_i in draft)\n\
+ {\n\
+ if (draft[draft_i] > win_val)\n\
+ {\n\
+ win_val = draft[draft_i];\n\
+ draft_winner = draft_i;\n\
+ }\n\
+ }\n\
+ \n\
+ this.bpm_predict = 60.0/(draft_winner/10.0);\n\
+ \n\
+ avg_bpm_offset /= bpm_contributions;\n\
+ this.bpm_offset = avg_bpm_offset;\n\
+ \n\
+ if (!this.current_bpm) \n\
+ {\n\
+ this.current_bpm = this.bpm_predict; \n\
+ }\n\
+ }\n\
+ \n\
+ if (this.current_bpm && this.bpm_predict) this.current_bpm -= (this.current_bpm-this.bpm_predict)*this.last_update; \n\
+ \n\
+ // hold a contest for bpm to find the current mode\n\
+ var contest_max=0;\n\
+ \n\
+ for (var contest_i in this.bpm_contest)\n\
+ {\n\
+ if (contest_max < this.bpm_contest[contest_i]) contest_max = this.bpm_contest[contest_i]; \n\
+ if (this.bpm_contest[contest_i] > this.config.BD_FINISH_LINE/2.0)\n\
+ {\n\
+ var draft_int_lo = parseInt(Math.round((contest_i)/10.0));\n\
+ if (this.bpm_contest_lo[draft_int_lo] != this.bpm_contest_lo[draft_int_lo]) this.bpm_contest_lo[draft_int_lo] = 0;\n\
+ this.bpm_contest_lo[draft_int_lo]+= (this.bpm_contest[contest_i]/6.0)*this.last_update;\n\
+ }\n\
+ }\n\
+ \n\
+ // normalize to a finish line\n\
+ if (contest_max > this.config.BD_FINISH_LINE) \n\
+ {\n\
+ for (var contest_i in this.bpm_contest)\n\
+ {\n\
+ this.bpm_contest[contest_i]=(this.bpm_contest[contest_i]/contest_max)*this.config.BD_FINISH_LINE;\n\
+ }\n\
+ }\n\
+\n\
+ contest_max = 0;\n\
+ for (var contest_i in this.bpm_contest_lo)\n\
+ {\n\
+ if (contest_max < this.bpm_contest_lo[contest_i]) contest_max = this.bpm_contest_lo[contest_i]; \n\
+ }\n\
+\n\
+ // normalize to a finish line\n\
+ if (contest_max > this.config.BD_FINISH_LINE) \n\
+ {\n\
+ for (var contest_i in this.bpm_contest_lo)\n\
+ {\n\
+ this.bpm_contest_lo[contest_i]=(this.bpm_contest_lo[contest_i]/contest_max)*this.config.BD_FINISH_LINE;\n\
+ }\n\
+ }\n\
+\n\
+ \n\
+ // decay contest values from last loop\n\
+ for (contest_i in this.bpm_contest)\n\
+ {\n\
+ this.bpm_contest[contest_i]-=this.bpm_contest[contest_i]*(this.last_update/this.config.BD_DETECTION_RATE);\n\
+ }\n\
+ \n\
+ // decay contest values from last loop\n\
+ for (contest_i in this.bpm_contest_lo)\n\
+ {\n\
+ this.bpm_contest_lo[contest_i]-=this.bpm_contest_lo[contest_i]*(this.last_update/this.config.BD_DETECTION_RATE);\n\
+ }\n\
+ \n\
+ this.bpm_timer+=this.last_update;\n\
+ \n\
+ var winner = 0;\n\
+ var winner_lo = 0;\n\
+ \n\
+ // attempt to display the beat at the beat interval ;)\n\
+ if (this.bpm_timer > this.winning_bpm/4.0 && this.current_bpm)\n\
+ { \n\
+ this.win_val = 0;\n\
+ this.win_val_lo = 0;\n\
+\n\
+ if (this.winning_bpm) while (this.bpm_timer > this.winning_bpm/4.0) this.bpm_timer -= this.winning_bpm/4.0;\n\
+ \n\
+ // increment beat counter\n\
+ \n\
+ this.quarter_counter++; \n\
+ this.half_counter= parseInt(this.quarter_counter/2);\n\
+ this.beat_counter = parseInt(this.quarter_counter/4);\n\
+ \n\
+ // award the winner of this iteration\n\
+ var idx = parseInt(Math.round((60.0/this.current_bpm)*10.0));\n\
+ if (typeof(this.bpm_contest[idx])=='undefined') this.bpm_contest[idx] = 0;\n\
+ this.bpm_contest[idx]+=this.config.BD_QUALITY_REWARD;\n\
+ \n\
+ \n\
+ // find the overall winner so far\n\
+ for (var contest_i in this.bpm_contest)\n\
+ {\n\
+ if (this.win_val < this.bpm_contest[contest_i])\n\
+ {\n\
+ winner = contest_i;\n\
+ this.win_val = this.bpm_contest[contest_i];\n\
+ }\n\
+ }\n\
+ \n\
+ if (winner)\n\
+ {\n\
+ this.win_bpm_int = parseInt(winner);\n\
+ this.winning_bpm = (60.0/(winner/10.0));\n\
+ }\n\
+ \n\
+ // find the overall winner so far\n\
+ for (var contest_i in this.bpm_contest_lo)\n\
+ {\n\
+ if (this.win_val_lo < this.bpm_contest_lo[contest_i])\n\
+ {\n\
+ winner_lo = contest_i;\n\
+ this.win_val_lo = this.bpm_contest_lo[contest_i];\n\
+ }\n\
+ }\n\
+ \n\
+ if (winner_lo)\n\
+ {\n\
+ this.win_bpm_int_lo = parseInt(winner_lo);\n\
+ this.winning_bpm_lo = 60.0/winner_lo;\n\
+ }\n\
+ \n\
+ \n\
+ //if (typeof(console)!='undefined' && (this.beat_counter % 4) == 0) console.log(\"BeatDetektor(\"+this.BPM_MIN+\",\"+this.BPM_MAX+\"): [ Current Estimate: \"+winner+\" BPM ] [ Time: \"+(parseInt(timer_seconds*1000.0)/1000.0)+\"s, Quality: \"+(parseInt(this.quality_total*1000.0)/1000.0)+\", Rank: \"+(parseInt(this.win_val*1000.0)/1000.0)+\", Jitter: \"+(parseInt(this.bpm_offset*1000000.0)/1000000.0)+\" ]\");\n\
+ }\n\
+\n\
+}\n\
+\n\
+// Sample Modules\n\
+BeatDetektor.modules = new Object(); \n\
+BeatDetektor.modules.vis = new Object();\n\
+\n\
+// simple bass kick visualizer assistant module\n\
+BeatDetektor.modules.vis.BassKick = function()\n\
+{\n\
+ this.is_kick = false;\n\
+}\n\
+\n\
+BeatDetektor.modules.vis.BassKick.prototype.process = function(det)\n\
+{\n\
+ this.is_kick = ((det.detection[0] && det.detection[1]) || (det.ma_freq_range[0]/det.maa_freq_range[0])>1.4);\n\
+}\n\
+\n\
+BeatDetektor.modules.vis.BassKick.prototype.isKick = function()\n\
+{\n\
+ return this.is_kick;\n\
+}\n\
+\n\
+\n\
+// simple vu spectrum visualizer assistant module\n\
+BeatDetektor.modules.vis.VU = function()\n\
+{\n\
+ this.vu_levels = new Array(); \n\
+}\n\
+\n\
+BeatDetektor.modules.vis.VU.prototype.process = function(det,lus)\n\
+{\n\
+ var i,det_val,det_max = 0.0;\n\
+ if (typeof(lus)=='undefined') lus = det.last_update;\n\
+\n\
+ for (i = 0; i < det.config.BD_DETECTION_RANGES; i++)\n\
+ {\n\
+ det_val = (det.ma_freq_range[i]/det.maa_freq_range[i]); \n\
+ if (det_val > det_max) det_max = det_val;\n\
+ } \n\
+\n\
+ if (det_max <= 0) det_max = 1.0;\n\
+\n\
+ for (i = 0; i < det.config.BD_DETECTION_RANGES; i++)\n\
+ {\n\
+ det_val = (det.ma_freq_range[i]/det.maa_freq_range[i]); //fabs(fftData[i*2]/2.0);\n\
+\n\
+ if (det_val != det_val) det_val = 0;\n\
+\n\
+ //&& (det_val > this.vu_levels[i])\n\
+ if (det_val>1.0)\n\
+ {\n\
+ det_val -= 1.0;\n\
+ if (det_val>1.0) det_val = 1.0;\n\
+\n\
+ if (det_val > this.vu_levels[i]) \n\
+ this.vu_levels[i] = det_val;\n\
+ else if (det.current_bpm) this.vu_levels[i] -= (this.vu_levels[i]-det_val)*lus*(1.0/det.current_bpm)*3.0;\n\
+ }\n\
+ else \n\
+ {\n\
+ if (det.current_bpm) this.vu_levels[i] -= (lus/det.current_bpm)*2.0;\n\
+ }\n\
+\n\
+ if (this.vu_levels[i] < 0 || this.vu_levels[i] != this.vu_levels[i]) this.vu_levels[i] = 0;\n\
+ }\n\
+}\n\
+\n\
+\n\
+// returns vu level for BD_DETECTION_RANGES range[x]\n\
+BeatDetektor.modules.vis.VU.prototype.getLevel = function(x)\n\
+{\n\
+ return this.vu_levels[x];\n\
+}\n\
+\n\
+\n\
+TalosContentProfiler.subtestStart('audio-beat-detection', true).then(() => {\n\
+ var _sunSpiderStartDate = new Date();\n\
+\n\
+ var iterations = 1000;\n\
+\n\
+ var fft = fft = new FFT(frameBufferLength / channels, rate);\n\
+ var bd = new BeatDetektor();\n\
+ var kick_det = new BeatDetektor.modules.vis.BassKick();\n\
+ var vu = new BeatDetektor.modules.vis.VU();\n\
+\n\
+ var calcBeat = function() {\n\
+ var fb = getFramebuffer(), signal = DSP.getChannel(DSP.MIX, fb);\n\
+\n\
+ fft.forward(signal);\n\
+\n\
+ var timestamp = (new Date()).getTime();\n\
+ bd.process(timestamp, fft.spectrum);\n\
+ kick_det.process(bd);\n\
+ vu.process(bd);\n\
+ };\n\
+\n\
+ runTest(calcBeat, iterations);\n\
+\n\
+ var _sunSpiderInterval = new Date() - _sunSpiderStartDate;\n\
+ TalosContentProfiler.subtestEnd('audio-beat-detection', true).then(() => {\n\
+\n\
+ record(_sunSpiderInterval);\n\
+ });\n\
+});\n\
+</script>\n\
+\n\
+\n\
+</body>\n\
+</html>\n\
+", "<!DOCTYPE html>\n\
+<head>\n\
+\n\
+<meta charset=utf8>\n\
+\n\
+<!--\n\
+ Copyright (C) 2007 Apple Inc. All rights reserved.\n\
+\n\
+ Redistribution and use in source and binary forms, with or without\n\
+ modification, are permitted provided that the following conditions\n\
+ are met:\n\
+ 1. Redistributions of source code must retain the above copyright\n\
+ notice, this list of conditions and the following disclaimer.\n\
+ 2. Redistributions in binary form must reproduce the above copyright\n\
+ notice, this list of conditions and the following disclaimer in the\n\
+ documentation and/or other materials provided with the distribution.\n\
+\n\
+ THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY\n\
+ EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n\
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n\
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR\n\
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n\
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n\
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n\
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n\
+ OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n\
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \n\
+-->\n\
+\n\
+<title>SunSpider audio-dft</title>\n\
+<link rel=\"stylesheet\" href=\"../kraken.css\">\n\
+</head>\n\
+\n\
+<body>\n\
+<h3>audio-dft</h3>\n\
+<div id=\"console\">\n\
+</div>\n\
+<script>\n\
+var TalosContentProfiler = parent.TalosContentProfiler;\n\
+function record(time) {\n\
+ document.getElementById(\"console\").innerHTML = time + \"ms\";\n\
+ if (window.parent) {\n\
+ parent.recordResult(time);\n\
+ }\n\
+}\n\
+\n\
+\n\
+// Audio sample data.\n\
+var channels = 2,\n\
+ rate = 44100,\n\
+ frameBufferLength = 2048,\n\
+ getFramebuffer = (function(f) {\n\
+ var frames = f,\n\
+ current = 0,\n\
+ max = frames.length - 1;\n\
+\n\
+ return function() {\n\
+ if (current == max) {\n\
+ current = 0;\n\
+ }\n\
+ return frames[current++];\n\
+ };\n\
+ })([\n\
+new Array(-9.063918018914485e-12,-3.261597155551632e-12,-7.691810383070319e-11,-4.440857404031107e-12,-1.680772881984538e-10,6.000556301843929e-11,-1.9150961372282893e-10,2.4246665786265e-10,-4.565171851655947e-11,5.450795370620654e-10,3.362514988669574e-10,9.004306744664348e-10,9.466241124300723e-10,1.175186170598863e-9,1.6831636084901902e-9,1.1990984871701471e-9,2.3562511941577213e-9,8.144737662085788e-10,2.725613068577104e-9,-6.554523590551753e-11,2.5597279851297117e-9,-1.405781158148045e-9,1.7045438394092116e-9,-3.0212734536405605e-9,1.442163333198465e-10,-4.585516411026447e-9,-1.9632779846290305e-9,-5.679597681051973e-9,-4.288398525176262e-9,-5.877284880995148e-9,-6.374909933271056e-9,-4.851113288850684e-9,-7.722416484057248e-9,-2.47689069254875e-9,-7.892031916867381e-9,1.0892343693669204e-9,-6.61385790579061e-9,5.384448886758264e-9,-3.872107523505974e-9,9.678744916641335e-9,5.3583804060508555e-11,1.3082328997882087e-8,4.604661096863083e-9,1.4708005480201791e-8,9.020721947194943e-9,1.3861386705116274e-8,1.2467070042987416e-8,1.0221797630549645e-8,1.4191283703723911e-8,3.973642304089253e-9,1.3679061439120233e-8,-4.147063581427801e-9,1.0777899461800189e-8,-1.2912646063512057e-8,5.7606563963474855e-9,-2.0772752407083317e-8,-6.882053815715494e-10,-2.6112324746918603e-8,-7.566866244701487e-9,-2.7557987891668745e-8,-1.3718089775238695e-8,-2.427747425315374e-8,-1.8031725446121527e-8,-1.6211833653301255e-8,-1.965133300529942e-8,-4.18648893329987e-9,-1.8145057012475263e-8,1.0134575845199834e-8,-1.3606820559175503e-8,2.4460184988583933e-8,-6.6646101970491145e-9,3.6226321498133984e-8,1.6094849897285712e-9,4.304074607830444e-8,9.874586481828374e-9,4.314259527404829e-8,1.6751737774711728e-8,3.579163276867803e-8,2.1068517597200298e-8,2.1507027270217804e-8,2.2072077499046827e-8,2.0971653302837012e-9,1.9569721843026855e-8,-1.95445934991767e-8,1.3969719603323938e-8,-3.986041718917477e-8,6.212331538080207e-9,-5.5206413662745035e-8,-2.396835618867499e-9,-6.249566553151453e-8,-1.0421006280125766e-8,-5.979339334771794e-8,-1.6550259829273273e-8,-4.6752756333034995e-8,-1.9834619280345578e-8,-2.479977112557208e-8,-1.9848005905487298e-8,2.9843314486299732e-9,-1.6751785736346392e-8,3.2283470119409685e-8,-1.124725823586914e-8,5.8215224640889573e-8,-4.4262269405237475e-9,7.614446673187558e-8,2.4491135786064433e-9,8.2506318221931e-8,8.19313505928676e-9,7.549270009121756e-8,1.1920842091228678e-8,5.54726611312617e-8,1.3204600968208524e-8,2.5057047992049775e-8,1.2132561622024696e-8,-1.1224615015237305e-8,9.258342537066255e-9,-4.759798244435842e-8,5.454737994625702e-9,-7.796932521841882e-8,1.702851637475078e-9,-9.695299496570442e-8,-1.136488791964041e-9,-1.0082637658115345e-7,-2.519120245736417e-9,-8.824257946571379e-8,-2.3383373015661846e-9,-6.056658463649e-8,-9.41838385060123e-10,-2.176004265663778e-8,9.601706096873386e-10,2.218358652328334e-8,2.4775965723478066e-9,6.417361220201201e-8,2.774252605419747e-9,9.717964388755718e-8,1.3009872068536765e-9,1.1542026356892165e-7,-2.0265045197476184e-9,1.153803879105908e-7,-6.7495498079495064e-9,9.647719423355738e-8,-1.1913705577626388e-8,6.124944462726489e-8,-1.623966028319046e-8,1.502435864608742e-8,-1.8389696876397466e-8,-3.4896281420060404e-8,-1.7278706465617688e-8,-8.040503729489501e-8,-1.2363916113145024e-8,-1.1392285870215346e-7,-3.8492862231009894e-9,-1.2967566931365582e-7,7.248555089489628e-9,-1.2469702426187723e-7,1.920039238711979e-8,-9.9380230267343e-8,2.98255180553042e-8,-5.747872222627848e-8,3.68760453284267e-8,-5.544654957390094e-9,3.8477701025385613e-8,4.810972953350756e-8,3.3544857558354124e-8,9.4760721935927e-8,2.2083437301034792e-8,1.2670979288031958e-7,5.314396478439676e-9,1.3856883640528395e-7,-1.442367381088161e-8,1.2817720573821134e-7,-3.3992773040836255e-8,9.6993083786856e-8,-4.995281699393672e-8,4.988867274846598e-8,-5.91591415854964e-8,-5.620970799924407e-9,-5.9357120107961236e-8,-6.059254786805468e-8,-4.9664652834735534e-8,-1.0611310585773026e-7,-3.084448252366201e-8,-1.3476119420374744e-7,-5.303653960453403e-9,-1.4182997176703793e-7,2.3200103171916453e-8,-1.26107053688429e-7,5.0111530924823455e-8,-9.008256540710136e-8,7.080907948875392e-8,-3.954905736236469e-8,8.139625862213506e-8,1.7340529012699335e-8,7.941753921159034e-8,7.14021481940108e-8,6.436970778622708e-8,1.1391774989988335e-7,3.790681546433916e-8,1.3805393450638803e-7,3.6889740151480055e-9,1.399694014025954e-7,-3.312028695745539e-8,1.1943076572151767e-7,-6.66380657321497e-8,7.98368589016718e-8,-9.120827826336608e-8,2.7651497092051613e-8,-1.023566014168864e-7,-2.8660446460548883e-8,-9.759249763874323e-8,-8.001645568356253e-8,-7.691699011047604e-8,-1.1819189182915579e-7,-4.293638866670335e-8,-1.3714550561871874e-7,-5.487733045761445e-10,-1.3398140197296016e-7,4.376378370807288e-8,-1.0939224637240841e-7,8.29331057161653e-8,-6.751718473196888e-8,1.1043897529816604e-7,-1.5242454409758466e-8,1.2139599903093767e-7,3.8936597945848916e-8,1.1341180794488537e-7,8.630295411649058e-8,8.706772547384389e-8,1.193270264820967e-7,4.592902058675463e-8,1.3286879152474285e-7,-3.930692660247814e-9,1.2498067292199266e-7,-5.482997877948037e-8,9.718515769918668e-8,-9.866953121218103e-8,5.418847948135408e-8,-1.28227270579373e-7,3.083594934949474e-9,-1.3834954870617366e-7,-4.782260987212794e-8,-1.26842650161052e-7,-9.036366321879541e-8,-9.491133567962606e-8,-1.1782764630652309e-7,-4.70599381685588e-8,-1.2601940113654564e-7,9.539609990838471e-9,-1.1390253007448337e-7,6.612728498112119e-8,-8.372249027388534e-8,1.1371697183903962e-7,-4.059829450397956e-8,1.4452912466822454e-7,8.344371416058038e-9,1.5326465074849693e-7,5.515137502243306e-8,1.3801113141198584e-7,9.23356182624957e-8,1.0062770883223493e-7,1.1407795597051518e-7,4.653392693398928e-8,1.1714049463762422e-7,-1.6075322406550185e-8,1.0134900918501444e-7,-7.747640040633996e-8,6.957183984468429e-8,-1.2793385906206822e-7,2.7206713326677345e-8,-1.5925049012821546e-7,-1.8734009898935255e-8,-1.6610192687949166e-7,-6.078472836179571e-8,-1.4693922878450394e-7,-9.224238795013662e-8,-1.0430580488218766e-7,-1.0823826812611514e-7,-4.45076224764307e-8,-1.0649359438730244e-7,2.3321303999068732e-8,-8.764186532062013e-8,8.862036082746272e-8,-5.5072241877951456e-8,1.410538743584766e-7,-1.4327970809802082e-8,1.7215407410731132e-7,2.783478691981145e-8,1.7669236740402994e-7,6.45675726218542e-8,1.5355695381913392e-7,9.00446011087297e-8,1.0598996880162304e-7,1.0038979780802038e-7,4.1135439943218444e-8,9.426747737961705e-8,-3.103694723449735e-8,7.304740989866332e-8,-9.927160249389999e-8,4.052454016800766e-8,-1.5279019294212048e-7,2.248076613753369e-9,-1.8300160320450232e-7,-3.542269766398931e-8,-1.8488543673811364e-7,-6.637513649820903e-8,-1.578263635337862e-7,-8.573766052677456e-8,-1.0576047060339988e-7,-9.064876138609179e-8,-3.660183267584216e-8,-8.067998180649738e-8,3.896485267773642e-8,-5.78489469660326e-8,1.091430661404047e-7,-2.6230463134879756e-8,1.6287407333948067e-7,8.762894410097033e-9,1.9158729003265762e-7,4.1304232922811934e-8,1.9057252131915448e-7,6.612271619133026e-8,1.597534549091506e-7,7.93595944514891e-8,1.0373634040661273e-7,7.916997901702416e-8,3.1118556620413074e-8,6.597691282195228e-8,-4.683636234403821e-8,4.234251704815506e-8,-1.1795428633831762e-7,1.2487103795422172e-8,-1.7106017935475393e-7,-1.8456139727618392e-8,-1.9774194015553803e-7,-4.5320295072315275e-8,-1.936883222697361e-7,-6.376741623626003e-8,-1.5938736908083229e-7,-7.099095000739908e-8,-1.0007260442534971e-7,-6.614403957883042e-8,-2.4920090879732015e-8,-5.042738848715089e-8,5.4377210290113e-8,-2.6831063593135696e-8,1.2543733873826568e-7,4.190550129123949e-10,1.7713182387524284e-7,2.660926767816818e-8,2.0133609268668806e-7,4.734960157293244e-8,1.9421217700710258e-7,5.9309229527571006e-8,1.568193965795217e-7,6.075319447518268e-8,9.495667541159492e-8,5.1793612954043056e-8,1.8258184297792468e-8,3.4318482278195006e-8,-6.131359242544931e-8,1.1618418227499205e-8,-1.3134261678260373e-7,-1.2217928002655754e-8,-1.8090540265802701e-7,-3.3030893575869413e-8,-2.0228301877978083e-7,-4.731122515977404e-8,-1.9216858504478296e-7,-5.279125758761438e-8,-1.5218093096791563e-7,-4.880642023863402e-8,-8.86045441461647e-8,-3.636942480511607e-8,-1.1396908305982834e-8,-1.794975901248108e-8,6.737802493717027e-8,2.9967353043502953e-9,1.354440257728129e-7,2.2661327037099e-8,1.8223443021270214e-7,3.756455413395088e-8,2.0054038429861976e-7,4.51666153367114e-8,1.8762639797387237e-7,4.429934108429734e-8,1.4564022876584204e-7,3.534657722070733e-8,8.125561379301871e-8,2.0145094481449632e-8,4.6065018466379115e-9,1.627221024591563e-9,-7.23151174497616e-8,-1.672687943710116e-8,-1.3754423378031788e-7,-3.1527999766467474e-8,-1.8101286514138337e-7,-4.0092068331887276e-8,-1.9611144352893461e-7,-4.0920408395095365e-8,-1.8069772522721905e-7,-3.3960340317662485e-8,-1.373995388576077e-7,-2.060184201013726e-8,-7.316809558233217e-8,-3.4121434566714015e-9,1.8424062275812503e-9,1.4342575127557211e-8,7.58872715778125e-8,2.930133291556558e-8,1.3747893490290153e-7,3.862820463496064e-8,1.771775828274258e-7,4.053629965028449e-8,1.8904509602180042e-7,3.4620917688243935e-8,1.7153544717984914e-7,2.1940055106028922e-8,1.2769024237968551e-7,4.8280348607931955e-9,6.461311841121642e-8,-1.3525756514809473e-8,-7.684699099286263e-9,-2.9658723477155036e-8,-7.788023737020922e-8,-4.047191026756991e-8,-1.3512089935829863e-7,-4.380772722356596e-8,-1.7071022284653736e-7,-3.8862765450176084e-8,-1.794353323703035e-7,-2.6359270322018347e-8,-1.6033061456255382e-7,-8.440215637506299e-9,-1.1676839051233401e-7,1.1695799884137159e-8,-5.586884554986682e-8,3.035879103663319e-8,1.2666705906383413e-8,4.4031899903984595e-8,7.810783131390053e-8,5.001792047210074e-8,1.3038322776992572e-7,4.6951285526120046e-8,1.6163825478088256e-7,3.50808093685373e-8,1.6741982733492478e-7,1.6268021596488325e-8,1.4730845521171432e-7,-6.305238997583729e-9,1.0490954593933566e-7,-2.867316517551899e-8,4.721489688108704e-8,-4.677700715660649e-8,-1.6551972237266455e-8,-5.7190277402696665e-8,-7.641661170509906e-8,-5.775084588321988e-8,-1.232217812230374e-7,-4.798507191594581e-8,-1.500348929539541e-7,-2.9243762966757458e-8,-1.531775808416569e-7,-4.518951435272811e-9,-1.327244092408364e-7,2.2034459590258848e-8,-9.240281428901653e-8,4.5795644609825104e-8,-3.8925911383103085e-8,6.247649508850373e-8,1.9126481731746026e-8,6.888492265488821e-8,7.268964452578075e-8,6.35182573205384e-8,1.1363691498900153e-7,4.687864318952961e-8,1.360183716769825e-7,2.144827604411148e-8,1.3692603317849716e-7,-8.680026475360592e-9,1.1685883549716891e-7,-3.846272988994315e-8,7.954528058462529e-8,-6.274878217027435e-8,3.126580239154464e-8,-7.716540295632512e-8,-2.020383149670124e-8,-7.889514108683215e-8,-6.68497079914232e-8,-6.720723888520297e-8,-1.0167435959829163e-7,-4.3645762559663126e-8,-1.1975075153713988e-7,-1.1832858248794764e-8,-1.1891678042275089e-7,2.308856750232735e-8,-1.0001188144315165e-7,5.528772462071174e-8,-6.663564988684811e-8,7.921842382074828e-8,-2.4482059046704308e-8,9.056988403699506e-8,1.9629631253792468e-8,8.703290887979165e-8,5.8861960638978417e-8,6.874705604786868e-8,8.742540558159817e-8,3.8344889929931014e-8,1.0143502748860556e-7,5.755360632520024e-10,9.94316948776941e-8,-3.843843643380751e-8,8.249778460367452e-8,-7.219536968250395e-8,5.3968339130960885e-8,-9.489680508067977e-8,1.8800008660946332e-8,-1.0243961412470526e-7,-1.728548326696e-8,-9.314704385587902e-8,-4.873542280847687e-8,-6.811089292568795e-8,-7.102593002628055e-8,-3.107823687287237e-8,-8.131225115448615e-8,1.2109261149362283e-8,-7.877756758034593e-8,5.4438466179362877e-8,-6.463856294658399e-8,8.88658746589499e-8,-4.182719237633137e-8,1.0948871675964256e-7,-1.441798502810343e-8,1.1255299625645421e-7,1.309215491573923e-8,9.71264810800676e-8,3.652399271913964e-8,6.531689678013208e-8,5.2654801407925333e-8,2.1990270937521927e-8,5.965749494407646e-8,-2.597437287477078e-8,5.7280796994518823e-8,-7.077982644432268e-8,4.6758000138424904e-8,-1.0498003177872306e-7,3.0479803569960495e-8,-1.2271735272406659e-7,1.1502635288707097e-8,-1.207218360832485e-7,-7.012232572378707e-9,-9.89030155551518e-8,-2.232631501897231e-8,-6.042829170382902e-8,-3.253148150861307e-8,-1.126556270492074e-8,-3.677537208091053e-8,4.0744591700558885e-8,-3.5281200183590045e-8,8.714194166259404e-8,-2.9175275528814382e-8,1.2022522355437104e-7,-2.0171768255750067e-8,1.3433009371510707e-7,-1.0184898258103203e-8,1.2679538485826924e-7,-9.48340073136933e-10,9.845307857858643e-8,6.285233666858403e-9,5.355287413522092e-8,1.0912705405985434e-8,-8.745786317376769e-10,1.2994831877222168e-8,-5.6121411518006425e-8,1.3126058462376022e-8,-1.0319883614329228e-7,1.2198796639495413e-8,-1.3430187095764268e-7,1.1121471743535949e-8,-1.4410350956950424e-7,1.0556746588008536e-8,-1.306638210962774e-7,1.0739150013705512e-8,-9.579873250231685e-8,1.1414194034387037e-8,-4.4841215185442707e-8,1.1911470920722422e-8,1.4175789431192243e-8,1.1336403815676022e-8,7.178886107794824e-8,8.836241960352709e-9,1.186250813134393e-7,3.879819132635021e-9,1.4692922434278444e-7,-3.515509661156102e-9,1.5184838275672519e-7,-1.2668508020396985e-8,1.3226078010575293e-7,-2.226547479722285e-8,9.100791231730909e-8,-3.054695696391718e-8,3.4484436639559135e-8,-3.5622434779725154e-8,-2.835523815747365e-8,-3.585806140904424e-8,-8.741915280552348e-8,-3.0262789607604645e-8,-1.331023611328419e-7,-1.8791553202390787e-8,-1.5785127516210196e-7,-2.495440298844187e-9,-1.5741350978260016e-7,1.6527152979506354e-8,-1.315653577194098e-7,3.5388893593335524e-8,-8.419365826739522e-8,5.085162513296382e-8,-2.2711049041390652e-8,5.987803319840168e-8,4.3106652469759865e-8,6.020332676826001e-8,1.0267898886695548e-7,5.082233300868211e-8,1.4632553302362794e-7,3.229512657298983e-8,1.6684182924109336e-7,6.800249252592039e-9,1.6068939601154852e-7,-2.209532112829038e-8,1.2860309084317123e-7,-4.9929113288271765e-8,7.551252423354526e-8,-7.203408358691377e-8,9.782965548765787e-9,-8.431845088807677e-8,-5.810602488054428e-8,-8.400549944553859e-8,-1.1723588499990001e-7,-7.020152992254225e-8,-1.5800895880602184e-7,-4.4182222325162e-8,-1.737094663667449e-7,-9.329681915914989e-9,-1.6161074256615393e-7,2.929103004589706e-8,-1.2344602851044328e-7,6.566628485416004e-8,-6.51622968916854e-8,9.377239962304884e-8,4.008910536867916e-9,1.0857223031734975e-7,7.30174321006416e-8,1.0690452256767458e-7,1.3076454763449874e-7,8.811070983938407e-8,1.6789185508514493e-7,5.428115912309295e-8,1.7830146248343226e-7,1.0058755606223713e-8,1.6015852111195272e-7,-3.7988669987498724e-8,1.1621219186963572e-7,-8.234437132159655e-8,5.337874142696819e-8,-1.1572207370136312e-7,-1.8349950892115885e-8,-1.3226288331225078e-7,-8.749950097808323e-8,-1.2855345232765103e-7,-1.429532971997105e-7,-1.0428958319153026e-7,-1.757441623340128e-7,-6.246106920571037e-8,-1.8050761241283908e-7,-9.007450785247784e-9,-1.5636099703897344e-7,4.8020453391472984e-8,-1.0706388309245085e-7,9.967530445464945e-8,-4.043157275646081e-8,1.3752170957559429e-7,3.290755046236882e-8,1.5501495909120422e-7,1.0121155469278165e-7,1.4862459352116275e-7,1.535100864202832e-7,1.18511877644778e-7,1.8137095025849703e-7,6.863422186142998e-8,1.8026273096438672e-7,6.241009486984694e-9,1.502937152508821e-7,-5.9178759670430736e-8,9.6205269528582e-8,-1.1734320537470921e-7,2.661998621533712e-8,-1.587992954910078e-7,-4.7336740749415185e-8,-1.7646118521952303e-7,-1.1382016396055405e-7,-1.6681565284670796e-7,-1.621684049268879e-7,-1.305898820191942e-7,-1.8461685158399632e-7,-7.275829716490989e-8,-1.7754862824403972e-7,-1.8693526726565324e-9,-1.4207904541763128e-7,7.12196168706214e-8,-8.387929995024024e-8,1.350101968000672e-7,-1.226757717631699e-8,1.791784427496168e-7,6.128705365426868e-8,1.9624867775291932e-7,1.2500586876740272e-7,1.8285521719008102e-7,1.6869270780262013e-7,1.4037811979505932e-7,1.8536968582338886e-7,7.483755837256467e-8,1.7239531757695659e-7,-3.954397698180401e-9,1.3188457614887739e-7,-8.386642491586827e-8,7.036361182599649e-8,-1.523217889598527e-7,-2.283826461280114e-9,-1.982851216553172e-7,-7.440858951213158e-8,-2.140455137578101e-7,-1.3446904745251231e-7,-1.9650781268865103e-7,-1.7288331832787662e-7,-1.4777623391637462e-7,-1.8356305986344523e-7,-7.492307929624076e-8,-1.648810297183445e-7,1.1036519254048471e-8,-1.199205286184224e-7,9.681468782218872e-8,-5.59659980581273e-8,1.689130897375435e-7,1.6679663872309902e-8,2.1575439745902258e-7,8.635897330577791e-8,2.2954650091833173e-7,1.419358568455209e-7,2.0757832430717826e-7,1.745807907127528e-7,1.5273110420821467e-7,1.791784427496168e-7,7.311207639304484e-8,1.5513171547354432e-7,-1.9145318219671026e-8,1.064367722847237e-7,-1.0973732855745766e-7,4.1019006857823115e-8,-1.8441545535097248e-7,-3.0559448305211845e-8,-2.3123673997815786e-7,-9.680942980594409e-8,-2.424790750410466e-7,-1.4716398766267957e-7,-2.15915846979442e-7,-1.7366949123243103e-7,-1.5523812635365175e-7,-1.7224643045210541e-7,-6.954682874038554e-8,-1.4331929776290053e-7,2.801593268486613e-8,-9.171864689960785e-8,1.2229020285303704e-7,-2.5874314246721042e-8,1.9846278576096665e-7,4.356334670774231e-8,2.4440464585495647e-7,1.054514413567631e-7,2.5260820279982e-7,1.4994745356489148e-7,2.214165988334571e-7,1.7008042618726904e-7,1.5534149611085013e-7,1.6284681692013692e-7,6.44118358650303e-8,1.2965963946953707e-7,-3.735416953531967e-8,7.608232976963336e-8,-1.3411838040156e-7,1.0896656021941453e-8,-2.1069845956844802e-7,-5.533853197903227e-8,-2.5495873501313326e-7,-1.1200258853705236e-7,-2.5974125605898735e-7,-1.5012123810720368e-7,-2.2402615229566436e-7,-1.6379334510929766e-7,-1.5313399615024537e-7,-1.5110805406948202e-7,-5.793131663267559e-8,-1.1440880598456715e-7,4.684170562541112e-8,-5.986959195070085e-8,1.4486286659121106e-7,3.543078719303594e-9,2.207816862664913e-7,6.554610365583358e-8,2.626331934152404e-7,1.1621221318591779e-7,2.637312945807935e-7,1.4756460586795583e-7,2.2374074148956424e-7,1.548379913174358e-7,1.487551344325766e-7,1.372055606907452e-7,5.036477546127571e-8,9.785939880657679e-8,-5.614236897599767e-8,4.344204285189335e-8,-1.5416648579957837e-7,-1.707385877125489e-8,-2.2839421376374958e-7,-7.386714173662767e-8,-2.672012158200232e-7,-1.1786644904532295e-7,-2.6448051926308835e-7,-1.4220435673450993e-7,-2.2060758908537537e-7,-1.4329432929116592e-7,-1.423892257435e-7,-1.2135944871261017e-7,-4.200282432975655e-8,-8.033579490529519e-8,6.490785153800971e-8,-2.7174962724529905e-8,1.6168131367066962e-7,2.9331772566365544e-8,2.3324616904574214e-7,8.000931472906814e-8,2.684793400931085e-7,1.1679284739329887e-7,2.619423185024061e-7,1.3401688647718402e-7,2.1472467892635905e-7,1.2929177728437935e-7,1.3426242162495328e-7,1.0383159576576872e-7,3.3161711598950205e-8,6.218888870535011e-8,-7.2784388294167e-8,1.1450310921645723e-8,-1.6707475936073024e-7,-3.9966550957615254e-8,-2.350818988361425e-7,-8.37119387142593e-8,-2.6633134098119626e-7,-1.1286404344446055e-7,-2.5612271770114603e-7,-1.2302950835874071e-7,-2.062390649371082e-7,-1.1300813440584534e-7,-1.2463814869079215e-7,-8.492092717915511e-8,-2.4177921886803233e-8,-4.378986773190263e-8,7.941886792650621e-8,3.3493563478259603e-9,1.7003641517021606e-7,4.864789104885858e-8,2.3368514234789473e-7,8.475183221889893e-8,2.606714133435162e-7,1.0600088984347167e-7,2.47080549797829e-7,1.093205383995155e-7,1.9534485318217776e-7,9.466675976455008e-8,1.1381365538909449e-7,6.495940851891646e-8,1.540166749691707e-8,2.5524627744744066e-8,-8.446616561741394e-8,-1.6848247241796344e-8,-1.7028382615080773e-7,-5.507182265773736e-8,-2.2888355033501284e-7,-8.29474018360088e-8,-2.5146613324977807e-7,-9.61746167149613e-8,-2.3492745526709768e-7,-9.30190964254507e-8,-1.8228004705633793e-7,-7.453374450960837e-8,-1.0211371659352153e-7,-4.430629019225307e-8,-7.190720907601644e-9,-7.786582045810064e-9,8.7595566355958e-8,2.868361548280518e-8,1.6756843024268164e-7,5.8966605820387485e-8,2.2055249360164453e-7,7.816283442707572e-8,2.387361348610284e-7,8.340805379702942e-8,2.1982599207603926e-7,7.430342918723909e-8,1.6732249719098036e-7,5.291352067615662e-8,8.988544664134679e-8,2.3342494159805938e-8,-9.657696864451282e-11,-9.029974989971379e-9,-8.849696087054326e-8,-3.851283736366895e-8,-1.6168071681477159e-7,-6.009787512084586e-8,-2.086184167637839e-7,-7.031114535038796e-8,-2.2255642306845402e-7,-6.777638361654681e-8,-2.0198783090563666e-7,-5.339874320497984e-8,-1.5078565240855824e-7,-3.0144647666929814e-8,-7.74920465573814e-8,-2.4640200990688754e-9,6.107484296080656e-9,2.4536632281524362e-8,8.688752473062777e-8,4.6019223987059377e-8,1.5245490203597e-7,5.827331506225164e-8,1.930607993472222e-7,5.9356413117939155e-8,2.0305571979406523e-7,4.9406320812295235e-8,1.8167025928050862e-7,3.057391495531192e-8,1.3301294643497386e-7,6.593907642127306e-9,6.530615337396739e-8,-1.7924634221344604e-8,-1.0502304803594598e-8,-3.8357740095307236e-8,-8.251703320638626e-8,-5.09184445718347e-8,-1.3977266632991814e-7,-5.334685226898728e-8,-1.7391343476447219e-7,-4.531527508788713e-8,-1.8041541238744685e-7,-2.847492908131244e-8,-1.5917244411411957e-7,-6.137511832093878e-9,-1.1437219882282079e-7,1.7349023551105347e-8,-5.37032178726804e-8,3.741698151316086e-8,1.296049845223024e-8,5.013745862925134e-8,7.517348876717733e-8,5.296352867389942e-8,1.2356650813671877e-7,4.5221725031296955e-8,1.512654534963076e-7,2.825746747703306e-8,1.548669530393454e-7,5.2072621770093974e-9,1.3483074212672364e-7,-1.9566755327105056e-8,9.524914901248849e-8,-4.127851127577742e-8,4.305459810893808e-8,-5.561204829973576e-8,-1.3186848946133978e-8,-5.95453570895188e-8,-6.468775382018066e-8,-5.194998209390178e-8,-1.0382181869772467e-7,-3.385292757229763e-8,-1.252602146450954e-7,-8.305409693321053e-9,-1.266889739781618e-7,2.01266487920293e-8,-1.0901331393142755e-7,4.616561000148067e-8,-7.604103302583098e-8,6.477917224856355e-8,-3.372076662344625e-8,7.212108243948023e-8,1.0917915460595395e-8,6.628347648529598e-8,5.093718868920405e-8,4.771956696458801e-8,8.057844524955726e-8,1.924885140169863e-8,9.609434670210248e-8,-1.4367117273650365e-8,9.62030739515285e-8,-4.7215870324635034e-8,8.211441127059516e-8,-7.326191564516193e-8,5.714957751479233e-8,-8.743310786485381e-8,2.6044631340482738e-8,-8.657399064304627e-8,-5.926722224103287e-9,-7.00910334217042e-8,-3.384931801519997e-8,-4.016405341644713e-8,-5.3931231036585814e-8,-1.4717116414431075e-9,-6.401522512078373e-8,3.953713800797232e-8,-6.376927785822772e-8,7.571323124011542e-8,-5.454768370327656e-8,1.0044124110208941e-7,-3.897437750310928e-8,1.0882675383072637e-7,-2.034499857472838e-8,9.862651495495811e-8,-1.9718697785719996e-9,7.074959285091609e-8,1.3404161336438847e-8,2.9227308573354094e-8,2.4029375822465227e-8,-1.9362573766557034e-8,2.931786724502672e-8,-6.693563392445867e-8,2.9780522936562193e-8,-1.0524054516736214e-7,2.673979793144099e-8,-1.2727836917747481e-7,2.1905208313910407e-8,-1.2855795716859575e-7,1.6910888689380954e-8,-1.0796576077609643e-7,1.2917411140733748e-8,-6.808754449139087e-8,1.0364715308242012e-8,-1.4907442391631776e-8,8.924573080548726e-9,4.308567014277287e-8,7.658934819687602e-9,9.625129138157718e-8,5.343167686078232e-9,1.3539460042011342e-7,8.767813142185332e-10,1.5334450154114165e-7,-6.316128065009252e-9,1.4624281163833075e-7,-1.5995510693755932e-8,1.1431623647695233e-7,-2.7000339741789503e-8,6.198324342676642e-8,-3.7368934613368765e-8,-2.7429507554188604e-9,-4.467732850343964e-8,-6.947900033082988e-8,-4.65375258329459e-8,-1.271353227139116e-7,-4.11612219863855e-8,-1.657535761978579e-7,-2.787074038224091e-8,-1.7821416520291677e-7,-7.4418835538381245e-9,-1.6152242210409895e-7,1.78118000349059e-8,-1.174446140339569e-7,4.425945121511177e-8,-5.236780964423815e-8,6.74662032906781e-8,2.361669260153576e-8,8.292775532936503e-8,9.827665792272455e-8,8.690673070077537e-8,1.5920657858714549e-7,7.721943973137968e-8,1.9588374300383293e-7,5.381905054946401e-8,2.01472317939988e-7,1.9046609622819233e-8,1.7406878782821877e-7,-2.252760111787211e-8,1.1716433334640897e-7,-6.468043523000233e-8,3.9226861758834275e-8,-1.0046120735296427e-7,-4.755322891014657e-8,-1.2333094900895958e-7,-1.291692797167343e-7,-1.283278550090472e-7,-1.920576551128761e-7,-1.1305681368867226e-7,-2.2534644017468963e-7,-7.831395976154454e-8,-2.2272135424827866e-7,-2.8210422442498384e-8,-1.835907994518493e-7,3.026283934559615e-8,-1.1333888494391431e-7,8.819482388844335e-8,-2.2601398086408153e-8,1.3610795690510713e-7,7.434063320488349e-8,1.6550283987726289e-7,1.6180867135062726e-7,1.70341195371293e-7,2.2526110399212484e-7,1.482129619034822e-7,2.537052807838336e-7,1.0096973568352041e-7,2.415877418115997e-7,3.468574050202733e-8,1.8983951122208964e-7,-4.1086096302933584e-8,1.0588495058527769e-7,-1.1468043936702088e-7,2.5876758513732057e-9,-1.7411272779099818e-7,-1.0371854131108194e-7,-2.0902572828163102e-7,-1.9581293031478708e-7,-2.124729689967353e-7,-2.5837624662017333e-7,-1.8223526865313033e-7,-2.805332712796371e-7,-1.2142896821387694e-7,-2.5772834533199784e-7,-3.826910699444852e-8,-1.9261226213984628e-7,5.501317446032772e-8,-9.477400908508571e-8,1.4396246683645586e-7,2.0663790678554506e-8,2.141380548437155e-7,1.353819669702716e-7,2.5345423182443483e-7,2.3077254240888578e-7,2.542422521401022e-7,2.909561942487926e-7,2.1468599697982427e-7,3.054196326957026e-7,1.3936859488694608e-7,2.708362671910436e-7,3.880498411490407e-8,1.9175661236658925e-7,-7.20061592573984e-8,8.003340923323776e-8,-1.7581527345100767e-7,-4.695015576317019e-8,-2.5569300987626775e-7,-1.6888239429135865e-7,-2.9772394327665097e-7,-2.6572107003630663e-7,-2.942533399163949e-7,-3.216046877696499e-7,-2.4395217224082444e-7,-3.2649120385030983e-7,-1.5415402287999314e-7,-2.794814122353273e-7,-3.692490579965124e-8,-1.8526327494328143e-7,9.23838996413906e-8,-5.7667513431169937e-8,2.1058662014183938e-7,7.687667391564901e-8,2.963788858778571e-7,2.0058980965131923e-7,3.4519857194936776e-7,3.073854202284565e-7,3.573021274405619e-7,3.7416907616716344e-7,3.1087432716958574e-7,3.706501559008757e-7,1.8159762760205922e-7,2.960990173050959e-7,3.2668427962789792e-9,1.7206878055731067e-7,-1.4935011449779267e-7,2.215257310922425e-8,-2.558177527589578e-7,-1.244094391950057e-7,-3.4790230074577266e-7,-2.48221766696588e-7,-4.0844787463356624e-7,-3.424703720611433e-7,-3.83691684646692e-7,-3.784057298616972e-7,-3.049817678402178e-7,-3.52345750798122e-7,-2.4648699081808445e-7,-3.195747524387116e-7,-1.5783344053943438e-7,-2.518800101825036e-7,3.3997068271673925e-8,-6.30552534630624e-8,2.2121484732906538e-7,1.4892148669787275e-7,3.141547040286241e-7,2.5954253146664996e-7,4.2449011061762576e-7,3.912932697858196e-7,5.711276571673807e-7,5.997012522129808e-7,5.73685213112185e-7,6.688356961603859e-7,3.7676232977901236e-7,5.146665671418305e-7,1.2447100061763194e-7,2.9143745905457763e-7,-7.52123909819602e-8,5.3134645128238844e-8,-2.977363067202532e-7,-2.6843949285648705e-7,-6.520573947454977e-7,-6.28192310614395e-7,-9.370967291033594e-7,-8.570544878239161e-7,-8.548654477635864e-7,-9.001176977108116e-7,-5.94005030052358e-7,-8.865962399795535e-7,-4.7458777885367454e-7,-8.468994110444328e-7,-3.512149930884334e-7,-6.936784302524757e-7,-8.961339403867896e-8,-4.980943231203128e-7,1.230076236424793e-7,-3.2142719419425703e-7,2.4483753691129095e-7,-8.036778353925911e-8,3.2601849397906335e-7,1.5931499319776776e-7,2.634457132444368e-7,3.075739698488178e-7,1.0006087336478231e-7,4.02592405635005e-7,-1.3917727414991532e-8,2.7964540549874073e-7,-1.6491451049205352e-7,-1.252113293048751e-7,-4.322458266869944e-7,-3.4416802918713074e-7,-5.973930683467188e-7,-1.608441806411065e-7,-5.607481625702349e-7,-9.189005822918261e-8,-6.423296667890099e-7,-4.1814701035036705e-7,-8.845384513733734e-7,-6.042727704880235e-7,-6.649395345448283e-7,-1.4977459272813576e-7,2.076261296224402e-7,6.342019105431973e-7,9.887080523185432e-7,0.0000011756283129216172,0.0000012178294355180697,0.0000014045423313291394,0.0000012169082310720114,0.0000014515543398374575,0.0000013197013686294667,0.0000013726862562180031,0.0000014580078868675628,0.0000013222773986854008,0.0000011356053164490731,0.0000010844875077964389,1.0777938541650656e-7,2.2619612138896628e-7,-7.482602768504876e-7,-7.17060970600869e-7,-6.657965059275739e-7,-8.349057907253155e-7,-3.209282795069157e-7,-3.6607696074497653e-7,-3.680989948406932e-7,-1.1575120595352928e-7,-4.95609242534556e-7,-3.544887476891745e-7,-5.947504178038798e-7,-8.185001547644788e-7,-7.568756359432882e-7,-9.477171829530562e-7,-7.301545679183619e-7,-6.806443479945301e-7,-6.662963869530358e-7,-7.349966608671821e-7,-9.223255688084464e-7,-0.0000011680775742206606,-9.623134928915533e-7,-0.0000011299755442450987,-5.716998430216336e-8,-4.1727275856828783e-7,0.0000012798651596312993,4.575892944558291e-7,0.0000017962800029636128,0.0000010811531865329016,0.0000012475534276745748,0.0000010263622698403196,6.50961169412767e-7,3.0017449148544983e-7,6.232056648514117e-7,-2.1072614231343323e-7,5.681872607965488e-7,-1.0082136014943899e-7,5.6389637848042184e-8,-3.821854477337183e-8,-1.9356215830157453e-7,-8.707064580448787e-8,3.1259128263627645e-7,3.307707174826646e-7,6.644752374995733e-7,5.657690280713723e-7,2.2780943709221901e-7,-9.992874083764036e-8,-3.080589294768288e-8,-4.176954746526462e-7,3.027119532816869e-7,2.994362375829951e-7,2.1587086962426838e-7,4.623799156888708e-7,-6.439171329475357e-8,-1.8978136040459503e-7,6.838890840299428e-7,1.823492823405104e-7,0.0000016455330751341535,0.000001461430429117172,0.0000012464244036891614,0.0000017142567685368704,1.521793251413328e-7,8.734431844459323e-7,-2.2615671468884102e-7,3.06045933484711e-7,-2.8238775939826155e-7,7.30272518012498e-8,-0.00000103277864127449,-6.274767088143562e-7,-0.0000019067788343818393,-0.0000013300996215548366,-0.0000018798998553393176,-0.0000011391654197723255,-0.0000017127154023910407,-0.0000010173259852308547,-0.000002217254632341792,-0.0000019248880107625155,-0.0000020913898879371118,-0.0000021242335606075358,-5.66933863410668e-7,-2.713406956900144e-7,8.740189514355734e-7,0.0000017201797390953288,0.000001283963001696975,0.0000020493916963459924,0.000001458434553569532,0.0000017541703982715262,0.0000023141244582802756,0.0000024709238459763583,0.000003410554882066208,0.0000036500086935120635,0.000002940127160400152,0.0000032614680094411597,9.374844012199901e-7,0.0000014839671393929166,5.367808171286015e-7,0.0000010193630259891506,0.0000026928789793601027,0.000002544775270507671,0.0000042918609324260615,0.000004003791673312662,0.0000036620276659959927,0.000004126029125472996,0.0000026585357773001306,0.0000032682805795047898,0.000002984725369969965,0.000002696561978154932,0.0000035732336982619017,0.0000029659092888323357,0.0000024645387384225614,0.0000024580745048297103,7.03024511494732e-7,8.939995268519851e-7,3.9872708157417946e-7,4.0552660607318103e-7,2.736072133302514e-7,5.195767585064459e-7,-6.794140290367068e-7,-3.420753387217701e-7,-8.344152320205467e-7,-9.72813950284035e-7,-8.701111937625683e-7,-0.0000012382436125335516,-0.0000019544306724128546,-0.0000023187603801488876,-0.000002346559995203279,-0.0000032190364436246455,-0.000002146023462046287,-0.0000034883794342022156,-0.000002175008376070764,-0.0000032290981835103594,-7.618077688675839e-7,-0.0000014997837070040987,3.1260697141988203e-7,-6.726122592226602e-7,-0.0000018081600501318462,-0.0000030780636279814644,-0.0000033705023270158563,-0.0000045586630221805535,-0.0000017679449229035527,-0.0000024891428438422736,-7.876126346673118e-7,-8.457274702777795e-7,-0.000001939183221111307,-0.0000018313490954824374,-0.0000030375533697224455,-0.0000032928546715993434,-0.000002612765911180759,-0.0000027941657663177466,-1.2583780062414007e-7,-1.304837837778905e-7,0.000002071829158012406,0.0000012727984994853614,0.0000010511553227843251,-1.8225119902126607e-7,-8.205987001019821e-7,-6.519076123367995e-7,-5.326791665538622e-7,7.292591703844664e-7,3.8590383155678865e-7,6.530359542011865e-7,8.554245312097919e-8,-2.893132773351681e-7,-0.0000011364130614310852,-3.044409879748855e-7,-0.0000015163764146564063,-2.6364565997027967e-7,2.97657777537097e-7,6.473703706433298e-8,0.000001827797973419365,7.450047974089102e-7,0.0000011695537978084758,8.898541636881419e-7,0.0000016373277276215958,0.00000214285728361574,0.000004091570190212224,0.000004667096163757378,0.000004342218744568527,0.000004851250650972361,0.0000016070987385319313,0.000002105672592733754,-8.746696380512731e-7,-4.304055778447946e-7,-9.53932840275229e-7,-0.000001061122361534217,9.499452744421433e-7,-3.891087771989987e-7,0.0000013530089972846326,-2.494775799277704e-7,-0.0000016349131328752264,-0.00000132011086861894,-0.0000037219176647340646,-0.0000016550230839129654,-0.0000018801339365381864,-5.213034341977618e-7,3.8171768323991273e-7,4.5613657562171284e-7,5.042894031248579e-7,8.237010433731484e-7,3.6334296282802825e-7,8.760717378208938e-7,0.0000012198424883536063,2.7994315132673364e-7,0.000002176149791921489,-5.067900019639637e-7,0.000002342127800147864,-8.856314934746479e-7,0.0000014781663821850088,-0.0000013078295069135493,-3.082652710872935e-7,-0.0000021032362838013796,-0.000002368892637605313,-0.000002730813321250025,-0.0000034160445920861093,-0.0000024211738036683528,-0.0000029086347694828874,-0.000001562975739943795,-0.0000019350463844602928,-0.0000014834488410997437,-0.0000014534834917867556,-0.0000016977220411718008,-0.000001213783093589882,-6.728521384502528e-7,-5.774323881269083e-7,6.11771270087047e-7,9.30576675273187e-7,8.939668418861402e-7,0.0000027284738735033898,0.0000018481326833352796,0.000003407468284422066,0.000004100708338228287,0.000003105833684458048,0.000004962969796906691,0.0000029469849778251955,0.0000037807042190252105,0.000002233268787676934,0.0000031275560559151927,8.682991392561235e-8,0.0000028762378860847093,-0.0000017796860447560903,6.71204247737478e-7,-0.000001924816388054751,-0.0000020046747977175983,-0.0000019394990431464976,-0.000002175224835809786,-0.000002797315119096311,-9.022790550261561e-7,-0.0000029163450108171673,-4.2059861016241484e-7,-0.000002293946636200417,-8.709507710591424e-7,-0.000002271910261697485,-0.000001970868197531672,-0.000001801297685233294,-0.0000029321738566068234,-4.773514774569776e-7,-0.000002368856030443567,5.963245541806828e-8,-3.129603953766491e-7,8.343644140040851e-7,0.000001990498731174739,0.0000029133886982890544,0.0000031243421290128026,0.0000034031081668217666,0.0000025283086415583966,0.0000014670375776404398,0.0000014539837138727307,1.7197021406900603e-7,6.120799866948801e-7,7.339646117543452e-7,-1.7980983102461323e-7,0.00000206096865440486,2.195063188992208e-7,0.0000024490736905136146,9.115740340348566e-7,0.000001012251686915988,-7.794897669555212e-7,2.7506416699907277e-8,-0.0000024963355826912448,4.2787877418959397e-7,-0.0000011866404747706838,-6.74784530474426e-7,1.879491264844546e-7,-0.000002654897798493039,-3.367568979228963e-7,-0.0000023314582904276904,-6.135625199021888e-7,-7.370135222117824e-7,5.8683184533947497e-8,8.916401839087484e-7,0.0000014124995004749508,0.000002813352239172673,0.0000026935217647405807,0.0000029301741051313,0.0000022357385205395985,0.000001388805912938551,0.0000018279930600328953,0.000001394297441947856,0.0000029639745662279893,0.0000018493608422431862,0.0000016150321471286588,3.5992877656099154e-7,-0.000002704265398278949,-0.0000010994443755407701,-0.000004828819328395184,-0.0000013743367617280455,-0.000005059882369096158,-0.000002426815854050801,-0.000006455979018937796,-0.000003922141331713647,-0.000006152407877380028,-0.0000028160709462099476,-0.0000024322541776200524,0.0000010553062566032168,3.0933875905247987e-7,0.0000034888794289145153,4.5727097131020855e-7,0.000002063457259282586,0.0000012197371006550384,-2.0020483049165705e-8,0.0000027144808427692624,2.0493121155595873e-7,0.000002951913074866752,5.058386705059092e-7,0.0000032117116006702418,-0.0000018270185364599456,0.0000033168328172905603,-0.000004480983534449479,4.185849320492707e-7,-0.000003851749170280527,-0.0000025518065740470774,-0.000001983080892387079,-0.0000010308563105354551,-0.000002553476633693208,0.0000011045649443985894,-0.000003134451389996684,-7.845445111342997e-7,-0.0000015007548199719167,-0.000004307928065827582,-7.732348876743345e-7,-0.000005889574822504073,-6.64547201267851e-7,-0.0000036463213746174006,0.0000014335303148982348,9.660944897404988e-7,0.0000030718933885509614,0.000002293975967404549,0.000004045246441819472,4.4917024411006423e-7,0.00000643897510599345,0.000001357122073386563,0.000005552279162657214,0.000003269643684689072,7.760314701954485e-8,9.674236025603022e-7,-0.000001983548600037466,-0.000003136755140076275,6.122683657849848e-7,-0.000005188488557905657,0.0000012430969036358874,-0.000005397181666921824,-0.0000011439969966886565,-0.000004655254997487646,-0.0000034371810215816367,-0.0000031633135222364217,-0.000004312693818064872,-4.008234952834755e-7,-0.0000041818429963313974,0.0000022276451545621967,-0.000004215441549604293,0.0000017187583125632955,-0.0000034841016258724267,6.790135671508324e-7,-0.0000010553040965533,0.0000027846174361911835,2.2888437456458632e-7,0.0000037306460853869794,-3.539622639436857e-7,4.354231180059287e-7,-4.999796487936692e-8,-0.000002381189915467985,3.447065068939992e-7,-0.0000015586550716761849,-0.000001388713258165808,0.0000010854568017748534,-0.0000035118382584187202,0.0000024505141027475474,-0.0000027599924123933306,0.0000012928514934174018,3.452988153185288e-7,9.147630066763668e-7,4.678361165133538e-8,0.0000029235700367280515,-0.000004951607479597442,0.000002497083642083453,-0.0000061007790463918354,-0.000002038024604189559,-8.928830084187211e-7,-0.000005155670351086883,0.0000024980663511087187,-0.0000027834005322802113,0.0000030437615805567475,0.0000020207432953611715,0.000005872328074474353,0.0000023667914774705423,0.000008525761586497538,-0.000001744319888530299,0.000006328796189336572,-0.0000031836743801250122,5.817118449158443e-7,-0.000002760403958745883,-0.0000035621792449092027,-0.000005721019078919198,-0.0000031907666198094375,-0.00000798531254986301,-0.0000031328777367889415,-0.000007057904895191314,-0.000006145962288428564,-0.0000067292294261278585,-0.000004455939688341459,-0.0000036864155390503583,0.0000028903127713419963,0.000003648249503385159,0.0000055629725466133095,0.0000065096337493741885,0.000002313576715096133,0.000003299622903796262,-7.386475431303552e-7,0.0000011346337487339042,-0.000002999298430950148,0.0000012600233958437457,-0.000004482871645450359,0.0000012339850172793376,-0.000005028339273849269,-3.190280040143989e-8,-0.0000065708190959412605,-0.000002137759793185978,-0.000007463507699867478,-0.000002253582579214708,-0.000006214255336089991,-7.441607294822461e-7,-0.000005036740731156897,-8.026523801163421e-7,-0.0000038829380173410755,-0.0000014424687151404214,-0.000002219082944066031,-0.0000020632605810533278,-2.967931038710958e-7,-0.0000033134051591332536,0.000003112592821707949,-0.000001956977257577819,0.000004888274361292133,0.000001258301949746965,0.000002539396518841386,0.0000012315238109295024,0.0000029573939173133112,-3.9749210145600955e-7,0.000007965088116179686,-3.201979836831015e-7,0.000008430645721091423,-5.8561276716773136e-8,0.0000023614306883246172,-6.812036303927016e-7,-0.000002683240154510713,-0.000002635863893374335,-0.000002422957550152205,-0.000004931941020913655,6.032428245816845e-7,-0.000004697282747656573,9.093607786780922e-7,-0.000004782049927598564,-0.0000014407632988877594,-0.0000074239114837837406,-7.167645890149288e-7,-0.000005518366833712207,0.0000017230380535693257,0.0000018537798496254254,3.114373328116926e-7,0.00000475042725156527,-0.000002284921265527373,0.000001991696535696974,-0.0000018958348846354056,0.0000018167754660680657,-4.297342002246296e-7,0.000005431287263490958,-2.5431930339436803e-7,0.000006547586508531822,-0.0000019510043784976006,0.0000021715609364036936,-0.000005160231921763625,-0.000003922723863070132,-0.00000864976755110547,-0.0000069777229327883106,-0.00001098142092814669,-0.000004680390702560544,-0.000009758781743585132,0.0000025811777959461324,-0.0000064820569605217315,0.000006200225016073091,-0.0000068604194893850945,-0.000001493326294621511,-0.000008256333785539027,-0.00000808436016086489,-0.000005116302872920642,-0.0000019706062630575616,-0.0000036357112094265176,9.638056326366495e-7,-0.000006723561000399059,-0.000010043848305940628,-0.000005082299139758106,-0.000017330961782136,0.0000022783654003433185,-0.000010823952834471129,0.000007848390850995202,4.930726049678924e-8,0.000009791321645025164,0.000010214233043370768,0.000006767637387383729,0.000014693004231958184,6.522810167552962e-7,0.00000584156759941834,0.000001056483142747311,-0.0000061027412812109105,0.000005941973086009966,-0.000003799846808760776,0.0000032200546229432803,0.000007958360583870672,-0.000002986663048432092,0.000010821105206559878,-0.0000017829129319579806,5.535289915314934e-7,0.000002348450379940914,-0.000008360521860595327,0.0000030174969651852734,-0.0000035998295970784966,0.000003019416453753365,0.000005565047104028054,0.0000018894493223342579,0.0000023230936676554848,-0.0000034996205613424536,-0.000009694063919596374,-0.000008751128007133957,-0.000014601409930037335,-0.000007933239430713002,-0.000009449898243474308,-0.000002970120021927869,-0.000001097449057851918,-9.543623491481412e-7,0.00000434171261076699,-0.000004111882390134269,6.79061088249e-7,-0.000004496859673963627,-0.000008936454833019525,0.0000034232402867928613,-0.00000979360265773721,0.000009566062544763554,-3.9706472421130456e-7,0.000004433742105902638,0.000003042325033675297,-0.0000030128887829050655,-0.0000029714519769186154,-0.000003187324637110578,-0.000004348108632257208,-0.0000033043913845176576,0.000002110427658408298,-0.000010759151336969808,0.0000043579448174568824,-0.00001797520599211566,-8.999119245345355e-7,-0.000014672106772195548,-0.0000032756438486103434,-0.000003837559233943466,7.575903282486252e-7,0.0000024387154553551227,0.0000023866900846769568,0.00000110207599846035,-3.6517462831398007e-7,8.478238555653661e-7,3.2741291988713783e-7,0.000003992907295469195,0.0000034631802918738686,0.0000039670776459388435,0.000002545645429563592,0.0000018931576732938993,0.000001866697971308895,0.000004212356543575879,0.0000053428002502187155,0.000007821597137080971,0.000004359905233286554,0.000005222345862421207,-0.000005469212737807538,-0.0000021719831693189917,-0.000014025296877662186,-0.000007200156233011512,-0.000013071728062641341,-0.000008534292646800168,-0.00000858534622238949,-0.00000976859428192256,-0.000009199759006150998,-0.000009531527211947832,-0.000010971834853990003,-0.000005088163561595138,-0.000006511634637718089,-0.000001014210738503607,-0.0000015070510244186153,-3.342962884289591e-7,-0.0000030100443382252706,8.833947049424751e-7,-0.000003861757249978837,0.000002195649585701176,0.000002458319613651838,-1.23842681887254e-7,0.00000901737621461507,-0.000003161710992571898,0.000009653032066125888,-0.0000028306942567724036,0.000009005831088870764,9.146923218850134e-9,0.000010942871995212045,0.0000025969563921535155,0.000009264066648029257,0.0000022111939870228525,6.530254381686973e-8,-9.742769861986744e-7,-0.000006675535132671939,-0.000003203911774107837,-0.000003444060439505847,-0.0000023708191747573437,0.000001115949544328032,5.889252463475714e-8,-4.270693807484349e-7,0.000001317725491389865,-0.0000026383902422821848,0.0000010433889201522106,1.8245710009523464e-7,0.0000014354809536598623,0.000004203336175123695,0.000001658768496781704,6.893950512676383e-7,0.0000023416355361405294,-0.000008033041922317352,0.000007374636879831087,-0.000007646023732377216,0.000008112931027426384,5.110888992021501e-7,-0.0000038381062950065825,0.0000019791827980952803,-0.000011966791134909727,8.282994201636029e-8,-0.00000741668827686226,-9.075603202290949e-7,-0.000007570427897007903,-0.000009879624485620297,-0.000012811858141503762,-0.000015449104466824792,-0.000011708017154887784,-0.000005085837074148003,-0.000013832926015311386,-0.000002735949237830937,-0.00001657587563386187,-0.000017186963304993697,-0.0000036362621358421165,-0.000018992810510098934,0.000007856337106204592,-0.0000052445338951656595,0.0000016284280945910723,0.0000011946658560191281,-1.574869372689136e-7,0.0000027136939024785534,0.00000893616470420966,0.000007166011528170202,0.000008467269253742415,0.0000052992504606663715,0.000002132426743628457,-0.0000022123847429611487,0.0000036260689739719965,-0.000002493302417860832,0.0000036938338325853692,0.000005352163043426117,-0.000002791706265270477,0.000009312153451901395,-0.000001128120175053482,0.0000035371313060750253,0.00001125568087445572,-0.0000020741836124216206,0.000012978097402083222,2.395776448338438e-7,-0.000004805451681022532,0.000002885989260903443,-0.00001947880446095951,-1.5120596685846976e-7,-0.000016683519788784906,-0.000007136851309041958,-0.000011193683349119965,-0.000014262281183619052,-0.000010445800398883875,-0.000009302071703132242,-0.000006918155577295693,0.000010121770174009725,-0.0000032635687148285797,0.000020283247067709453,-0.0000016351533531633322,0.000010875545740418602,0.000003298426008768729,7.659355674149992e-7,0.000006105294687586138,-0.0000028685344659606926,0.0000018908134507000796,-0.000006559243047377095,-0.0000019376418549654773,-0.000005664392574544763,-0.000003935931545129279,2.3137319260513323e-7,-0.00000724212304703542,-4.4132727339274425e-7,-0.000008509233339282218,-0.000007299334811250446,-0.000008296520718431566,-0.00000775383068685187,-0.000009888088243314996,-6.643310825893423e-7,-0.000009194859558192547,0.0000012217028597660828,-0.0000027014796160074184,-0.000005580995548370993,0.000005727384177589556,-0.000007603383437526645,0.000008626728231320158,6.461232260335237e-8,0.0000024963719624793157,0.00000464674667455256,-0.0000041028060877579264,2.581153353276022e-7,2.623970658532926e-7,-0.000006722665148117812,0.000012226168109918945,-0.000011507665476528928,0.000016527443222003058,-0.000011158333109051455,0.0000042172537177975755,-0.0000065073568293883,-0.000012681543921644334,-0.0000026030968456325354,-0.000012896824046038091,2.7767310939452727e-7,-7.741859917587135e-7,1.6417632764387236e-7,-2.5143609150291013e-7,-0.000006684098025289131,-0.000011173764505656436,-0.000009685449185781181,-0.000015014666132628918,-0.0000022032122615200933,-0.000009355964721180499,-1.9668235040626314e-7,-0.0000019861199689330533,-0.000008735361916478723,2.1953218265480245e-7,-0.000010307759112038184,-0.000009043864338309504,-7.931564027785498e-7,-0.00001973225880647078,0.0000075621992436936125,-0.000012366611372272018,0.000009776677870831918,0.00000898778216651408,0.000007269413345056819,0.0000215316831599921,0.0000028081617529096548,0.00001463560329284519,0.0000013555286386690568,-8.18370210708963e-7,0.000003976112566306256,-0.000005741392214986263,0.000006475459940702422,0.0000016396104456362082,0.0000032634761737426743)\n\
+\n\
+,\n\
+\n\
+new Array(0.000003079756197621464,-0.000007045533948257798,-0.000005584218797594076,-0.000014535641639668029,-0.000009336939911008812,-0.000009002875231090002,-0.000005781885192845948,0.00000253107532444119,-0.000002653517412909423,0.0000052440332183323335,2.61081083863246e-7,-0.000004180499217909528,-0.000001123604306485504,-0.00001392687681800453,-0.000013051283531240188,-0.000008770004569669254,-0.00002213554034824483,0.000006507052603410557,-0.000012553733540698886,0.000008663148946652655,0.0000043216405174462125,-0.000003365547172506922,0.000009666131518315524,-0.0000036936494325345848,0.000008714309842616785,0.000011746677955670748,0.00001345210421277443,0.000016736059478716925,0.000014740943697688635,0.0000011494975069581415,0.0000037885874917265028,-0.000013101015611027833,-0.0000028683189157163724,-0.000007050486146908952,0.000006106271939643193,0.000007029236712696729,0.000013492718608176801,0.000005168927600607276,0.000007264246960403398,-0.000009827103895077016,-0.00000253483312917524,-0.000016045227312133648,-0.000009338813470094465,-0.000011414746950322296,-0.000013670570297108497,-0.000009242834494216368,-0.000013137173482391518,-0.000009129987120104488,-0.000011171797268616501,-0.0000058122036534768995,-0.000011200489097973332,-0.000004491418167162919,-0.00000646262924419716,-0.000006156059498607647,3.744167713648494e-7,-0.000003603997356549371,-0.0000037651313959941035,9.045492106452002e-7,-0.000011486084076750558,-0.0000013693146456716931,-0.000005032851731812116,-0.000007804138476785738,0.000005861616500624223,-0.000010557558198343031,0.000001025069195748074,-0.000010377891157986596,-0.00001071288625098532,-0.000007369986633420922,-0.000011507268027344253,0.0000020538736862363294,-0.000008385878572880756,0.000009365067853650544,-0.000009505479283689056,0.000005552293714572443,-0.000003929438207705971,0.000001957044105438399,0.000007157846994232386,0.000005618156137643382,0.000008056893420871347,0.000004114352577744285,0.000004444902970135445,-0.0000015129552366488497,0.000009714583939057775,0.0000034346257962170057,0.000016184803826035932,0.000013940394637756981,0.000017429176295991056,0.0000162159776664339,0.000018516269847168587,0.000009985662472900003,0.00001675341081863735,-5.474975068864296e-7,0.000010761052180896513,-0.000010513853339944035,0.000006836903139628703,-0.000015860308849369176,0.0000032462696708535077,-0.000019273027646704577,-0.0000022639590042672353,-0.0000182041221705731,-0.00000642911572867888,-0.000009331621185992844,-0.000010752169146144297,-0.000006398724053724436,-0.00001092150341719389,-0.000013978446986584459,-0.0000019830717974400613,-0.000011518278370203916,-7.679133773308422e-7,0.00000411232394981198,-0.000015622126738890074,0.00001020661602524342,-0.000023934420823934488,0.000003655438376881648,-0.000017996595488511957,0.000005628106464428129,-0.000014397246559383348,0.000023149037588154897,-0.000012422369763953611,0.00003686188574647531,-0.000005164674803381786,0.000029579034162452444,-0.000004279142558516469,0.000011904862731171306,-0.000011054169590352103,0.0000026817510843102355,-0.000007146421012294013,7.300119477804401e-7,0.00000716379463483463,-9.475870115238649e-7,0.000011135504792036954,-0.0000028848432975792093,0.000004333846391091356,-0.00001217265071318252,0.00000525720497535076,-0.000030126569981803186,0.000012700701518042479,-0.000037628265999956056,0.000014790118257224094,-0.00002364890133321751,0.000018574042769614607,-0.000005623247034236556,0.00002481713454471901,-0.0000035716459478862816,0.000016272791981464252,-0.00001041365885612322,7.962548806972336e-7,-0.000004117006483284058,0.000002073728182949708,0.000012243942364875693,0.000011528453796927352,0.000014823122910456732,0.00001140338645200245,0.000006756795755791245,0.000006846646101621445,0.000009838297046371736,0.0000024178214061976178,0.000019338038327987306,-0.0000035010277770197717,0.000020548633983707987,-0.00000739722554499167,0.000016951227735262364,-0.000011693926353473216,0.00001124812479247339,-0.000018294836991117336,4.6700102984686964e-7,-0.000020315797883085907,-0.00001102216265280731,-0.000019213801351725124,-0.000017865449990495108,-0.000017930700778379105,-0.00001534548937343061,-0.000010813826520461589,-0.000003645355718617793,-0.000004975350748281926,0.0000019148487808706705,-0.000009077783943212125,-0.000004406498646858381,-0.000008117423021758441,-0.000006159430995467119,0.0000044337293729768135,-0.0000020885263438685797,0.00001081783830159111,-0.0000062843064370099455,0.000009586233318259474,-0.000010778067007777281,0.000013238699466455728,-0.0000024827570541674504,0.000012394535588100553,0.000008359386811207514,-0.0000011964989425905515,0.000011864392945426516,-0.000006844144081696868,0.00001212747156387195,0.000005946681085333694,0.000008978144251159392,0.000013611196663987357,0.0000014777727983528166,0.000004516868557402631,-0.000001135800971496792,-4.0124223232851364e-7,0.000004324659130361397,0.000007783763066981919,0.0000074882691478705965,0.00001351374066871358,0.000005585980943578761,0.000013525607755582314,0.0000072519515015301295,0.00001596198126208037,0.000011330633242323529,0.00001667377546255011,0.000011497910236357711,0.00001142141263699159,0.00001416644317941973,0.0000030732642244402086,0.000019874687495757826,-0.000009063298421096988,0.000012172569768154062,-0.00001685972347331699,-0.000006543353720189771,-0.000007671710591239389,-0.00000897354129847372,0.0000036098872442380525,0.000008662557775096502,-0.000004769496172229992,0.000016347627024515532,-0.000018694472601055168,-0.0000016639005480101332,-0.00001712615448923316,-0.000021529813238885254,-0.00001112355494115036,-0.00001515701660537161,-0.000012410739145707339,0.000004771038675244199,-0.000005557539680012269,0.000004452776920516044,0.00001637774403207004,-0.000011125454875582363,0.000028977285182918422,-0.00000831189208838623,0.000017143711374956183,0.00001176083787868265,0.0000014372878922586096,0.000018619317415868863,-4.095253984814917e-7,0.0000057142856348946225,0.000003475568746580393,-0.0000069119478212087415,0.000007696536158618983,-0.000003389268840692239,0.000012544330274977256,0.000012063308531651273,0.0000075440393629833125,0.00001954874096554704,-0.000004191128937236499,0.000009394925655215047,-0.000002214434289271594,-0.000004688718945544679,0.000007948830898385495,-0.000009118418347497936,0.0000011970444120379398,-0.0000056666431191843,-0.00002026224865403492,-0.0000019875728867191356,-0.00002999846219609026,-0.000003943970114050899,-0.000012564681128424127,-0.000010138632205780596,0.00001746085581544321,-0.000013649312677443959,0.000027959269573329948,-0.000010523734999878798,0.000012849625818489585,0.000001351437390439969,-3.670769785912853e-7,0.00001497308949183207,0.000002791178758343449,0.000012750263522320893,0.000013458100511343218,4.066057215368346e-7,0.00002175646659452468,0.0000032445300348626915,0.00001627408346394077,0.000014102012755756732,3.48547814610356e-7,0.000009687917554401793,0.0000011480459534141119,-4.2791418763954425e-7,0.000019152239474351518,-6.341405196508276e-7,0.000018948061551782303,0.0000036513481518340996,-0.0000062531571529689245,0.000009545680768496823,-0.000024813129130052403,0.000016652278645779006,-0.000018440034182276577,0.000017343440049444325,-3.587248897929385e-7,0.000010243666110909544,0.00000628847419648082,-2.8749840907948965e-7,-0.000003840634690277511,-0.000006959578513487941,-0.000013347347703529522,1.2497545753831218e-7,-0.000008933499884733465,0.000012038509339618031,0.000004157961939199595,0.00000892525349627249,0.000014358175576489884,-0.0000017458401089243125,0.000015531888493569568,0.0000011401114079490071,0.000013105558537063189,0.000012283217984077055,0.000013530539945350029,0.000011530215488164686,0.00001159277690021554,5.350490255295881e-7,0.0000063530819716106635,-6.013257234371849e-7,0.0000031688239232607884,0.000008902071385819,-0.0000030289324968180154,0.0000104135970104835,-0.000009928397048497573,0.000004485893896344351,-0.000005377505658543669,-0.0000013817983699482284,0.0000027258081445324933,-0.00001797814547899179,0.000005427595169749111,-0.00003357703462825157,0.00001153597349912161,-0.000016713764125597663,0.00001749700095388107,0.00001582923869136721,0.000018839591575670056,0.000024307311832671985,0.000028232167096575722,0.000012363442692731041,0.00003313900015200488,4.921504341837135e-7,0.000008201181117328815,-0.000004780452854902251,-0.00002234796374978032,-3.537929842423182e-7,-0.000019479883121675812,0.0000035339492114871973,0.0000019553631318558473,-0.000006310787284746766,0.0000048780952965898905,-0.000016523783415323123,-0.000006488742656074464,-0.00000970436303759925,-0.000006401556220225757,0.0000040938898564490955,-0.0000037819918361492455,0.0000036536346215143567,-0.000015109381820366252,-0.000009658116141508799,-0.000016028870959416963,-0.000012950125892530195,2.9602941253870085e-7,-0.0000048607880671625026,-0.0000029371478831308195,-0.000002008118826779537,-0.000014304634532891214,0.000009825911547522992,0.000006691116141155362,0.00003514895070111379,0.00003057632056879811,0.00003202812513336539,0.0000256546882155817,0.000005390306341723772,0.00002182609387091361,0.000009715551641420461,0.000023998347387532704,0.000029058137442916632,0.000014241700228012633,0.000018586209989734925,0.000014010002814757172,0.0000015582974128847127,0.000022730857381247915,-4.4055727244085574e-7,0.000007286446361831622,-0.000004155114311288344,-0.000015673245798097923,-0.0000013827599332216778,-0.000014323575669550337,0.000014420313164009713,-0.000004594429810822476,0.00001533803515485488,-0.000003257871640016674,-0.0000015057372593219043,-0.000002804571522574406,-0.000008264756615972146,-0.000002011342530749971,-1.9574802934130275e-7,-0.0000025387560071976623,0.0000055548180171172135,-1.6860264295814886e-8,0.0000012650032203964656,0.000004872145836998243,-0.0000017890718027047114,0.000006571066933247494,0.000007390759037662065,0.0000020470258732530056,0.000013906128515372984,-0.000004494631411944283,5.931532598424383e-8,-0.000005363530362956226,-0.000019025612346013077,-9.746487705797335e-8,-0.000022788828573538922,0.000005759361101809191,-0.000019057089957641438,0.000006455238690250553,-0.000020634686734410934,1.0177009812650795e-7,-0.000019465514924377203,-0.000004779817118105711,-0.000005687471002602251,-0.000001974281985894777,0.000007814288437657524,6.800347023272479e-7,0.000006204283181432402,0.0000022189678929862566,0.000003214903017578763,0.000011109933439001907,0.000014264518540585414,0.000020891659005428664,0.000024231410861830227,0.000021565774659393355,0.00002063306419586297,0.000018980705135618336,0.000019460489056655206,0.000016109910575323738,0.00002946244967461098,0.000004959099442203296,0.000031635663617635146,-0.000011636377166723832,0.000012494529073592275,-0.000017649961591814645,-0.000009775249054655433,-0.000009684803444542922,-0.000012299901754886378,-0.0000045431584112520795,-0.000004680217443819856,-0.000009361619959236123,-0.000006417827080440475,-0.000009478884749114513,-0.000008635995982331224,-0.000002210264710811316,-0.0000013944970760348951,-0.0000027300702640786767,3.419471852339484e-7,-0.000005760077328886837,-0.000005887148290639743,0.000009123318704951089,-0.0000018179079006586107,0.000034976685128640383,0.00000800656562205404,0.00004315484329708852,0.0000026375134893896757,0.000026162653739447705,-0.000009777288141776808,0.000008337022336490918,-0.0000043383224692661315,0.000008042879017011728,0.000011266129149589688,0.000007552520855824696,0.000007821462531865109,-0.000010834794011316262,-0.0000071405156631954014,-0.000023741020413581282,0.0000010096468940901104,-0.000008777444236329757,0.000024047909391811118,0.00001084489394997945,0.000021773150365334004,0.000009878775927063543,-0.000002468845650582807,0.0000019583242192311445,-0.000011829857612610795,0.000007180449301813496,0.0000019898930077033583,0.00002007572038564831,0.000023562599380966276,0.000022493708456750028,0.00003725415081134997,0.000009227091140928678,0.000025104887754423544,-0.000004577635081659537,-0.0000057226006902055815,-0.000007426877800753573,-0.000013954405403637793,-0.000007396818546112627,0.000010363718502048869,-0.000005682496066583553,0.000023153961592470296,0.000005215436885919189,-5.851776450072066e-7,0.000008301271009258926,-0.00002839875378413126,-0.000008671786417835392,-0.00002114908602379728,-0.000016385081835323945,0.000010340518201701343,-0.000003332814912937465,0.00001631920167710632,-0.00000240609824686544,-0.00001683917253103573,-0.000019458128008409403,-0.00004172520129941404,-0.00002798895184241701,-0.00002957127071567811,-0.00002257167943753302,-0.0000011277380735918996,-0.000006745275186403887,0.000029834796805516817,0.00001443145356461173,0.00004889423871645704,0.000019520353816915303,0.000028781312721548602,0.00001101738143916009,-0.000002304964709765045,0.000015570509276585653,0.000006559727353305789,0.00002491160194040276,0.0000246861109189922,0.00002092513932439033,0.000005571321253228234,0.000019767994672292843,-0.000017234433471458033,0.000029364162401179783,-0.000006860925623186631,0.00003287310028099455,0.000014419410035770852,0.00002570765900600236,0.000020948997189407237,0.000014982444554334506,0.00001133622572524473,0.000005069058261142345,-0.000007599034233862767,-1.9249199567639153e-7,-0.00002135621070920024,4.192748974674032e-7,-0.00001811559559428133,0.000005204026820138097,-0.00000684716133037,0.000006793804459448438,-0.000007115300377336098,-9.464126833336195e-7,-0.000015396170056192204,-0.000005022252480557654,-0.0000057560728237149306,0.00000310011228066287,0.00001830806468205992,0.000005690162652172148,0.000025002680558827706,-0.0000018066829170493293,0.000016883142961887643,-9.190588343699346e-7,0.00001677891305007506,0.000008744715159991756,0.000017492679035058245,0.000009262767889595125,0.000009641324140829965,-0.000007944317985675298,0.0000026682307634473545,-0.000028819362341891974,-5.567349248281062e-9,-0.000027849970138049684,2.9275554425112205e-7,-0.000011288384484942071,8.639408122235182e-8,-0.000010010178812080994,-0.0000057664710766403005,-0.000018038146663457155,-0.000005938334197708173,-0.000011676184840325732,0.00000538736594535294,6.286371672103996e-7,0.000010601774192764424,0.00000795031610323349,0.000006878713065816555,0.000014448815818468574,0.0000053991193453839514,0.000019121212972095236,0.0000037922372939647175,0.00002377148666710127,0.000004110886493435828,0.000028523567380034365,0.000009884578503260855,0.000025298351829405874,0.000009547493391437456,0.000019423143385211006,0.0000016244050584646175,0.00001698599044175353,-0.0000035492291772243334,0.000010943429515464231,-0.000004347200501797488,0.0000019216581677028444,-0.000004650058144761715,-0.000010098739949171431,-0.000013551755728258286,-0.00002283834692207165,-0.000026392148356535472,-0.000012812127351935487,-0.000015902620361885056,0.00001567458821227774,0.000012308804798522033,0.00002283371395606082,0.000024552044123993255,0.000011854270269395784,0.00002660317659319844,0.000012907260497740936,0.00003121679401374422,0.000015185296433628537,0.00002326429785171058,-7.34506613753183e-7,0.000012328557204455137,-0.000023603226509294473,0.000014685990208818112,-0.00003268428554292768,0.000009220393621944822,-0.00002234849307569675,-0.000007605170594615629,-0.000011407089004933368,-0.000006624821708101081,-0.000009982724805013277,0.00001263109425053699,0.000003306656026325072,0.00002181891250074841,0.000024524020773242228,0.000007929559615149628,0.000019206416254746728,-0.000012103923836548347,-0.000002410376964689931,-0.000014605987416871358,-0.000003715801540238317,-0.000006302369911281858,0.000010128199392056558,-0.000007889429980423301,0.000014167191693559289,-0.00001256161522178445,0.0000057639072110760026,-0.000005861424597242149,-9.619938055038801e-7,0.00000681865458318498,0.0000016880826478882227,0.000011544870176294353,0.0000037514641917368863,-2.56049020208593e-7,0.0000014714703411300434,-0.000014694560377392918,0.000007349543466261821,-0.000010221549928246532,0.000018233196897199377,-7.090650342433946e-7,0.00002102341750287451,-0.000006131372174422722,0.000020034074623254128,-0.000009446019248571247,0.000019742274162126705,0.0000019139167761750286,0.000014728439964528661,0.000014092046512814704,0.000003048159214813495,0.000020496132492553443,-0.000008900403372535948,0.000023662334569962695,-0.000005791300736746052,0.000022625017663813196,0.0000075333286986278836,0.000012899877219751943,-0.0000017856511931313435,-0.000006809377737226896,-0.000028199405278428458,-0.00001746432280924637,-0.00003172568540321663,-0.000006750207376171602,-0.00001866254024207592,-0.0000010079621688419138,-0.000013011737792112399,-0.00000956672738539055,-0.000004242810973664746,-0.000002119594682881143,0.000006584605671378085,0.00002223004776169546,0.000006579176442755852,0.000033968506613746285,0.000009475802471570205,0.000025046378141269088,0.000017056823708117008,0.000005184896053833654,0.000012699285434791818,-0.000006306862815108616,0.000008491949301969726,0.000004087344223080436,0.000018048402125714347,0.000011509853720781393,0.000021365476641221903,-0.000005565815172303701,0.000006844592917332193,-0.000022027259547030553,-0.000005569290806306526,-0.00002120573481079191,-0.000002695209104786045,-0.00001900665483844932,4.4863107007131475e-8,-0.000016556557966396213,-0.000010590822967060376,-0.0000065892354541574605,-0.000017760654372978024,-8.225159149333194e-7,-0.0000025858541903289733,0.0000011124238881166093,0.000020903720724163577,0.00001814771349017974,0.000027480426069814712,0.00004084043393959291,0.0000177144720510114,0.00004253354563843459,0.000010023189133789856,0.000033290092687821016,0.0000067583277996163815,0.000030763236281927675,-0.000003997994099336211,0.00001618833266547881,-0.000014886847566231154,-0.000012435123608156573,-0.00001306923968513729,-0.00002227741242677439,-0.000013466869859257713,-0.000015753304978716187,-0.000023232454623212107,-0.00001852498644439038,-0.00002162655619031284,-0.0000210459329537116,-0.00000750824165152153,-0.000011541855201357976,0.000005184509518585401,-0.0000010159284329347429,0.000017868627764983103,0.000005208628408581717,0.000021801406546728685,0.000004908810751658166,0.00000935355910769431,0.000002482380750734592,0.0000020374698124214774,0.000012640602108149324,0.0000043602076402748935,0.000021848769392818213,-0.000003835069946944714,0.000009052029781742021,-0.000015977773728081957,-0.00000437899689131882,-0.000015400755728478543,-0.0000011541671938175568,-0.000007877672032918781,-8.166315268454127e-8,-0.000005477804279507836,-0.0000075803836807608604,-0.000016252544810413383,-0.000015123989214771427,-0.00003125966031802818,-0.000023901306121842936,-0.00002719650547078345,-0.00002844541631930042,-0.000010009978723246604,-0.000019015275029232726,-0.000002046205736405682,3.0927870398045343e-7,0.000004475987225305289,0.000018435192032484338,0.000017293778000748716,0.000025111336071859114,0.00002306950045749545,0.000019393164620851167,0.000024574750568717718,0.000011862235623993911,0.00003010806358361151,0.000008740132216189522,0.000028634845875785686,0.000012442340448615141,0.00002007111288548913,0.000022071695639169775,0.00001786083885235712,0.000019058017642237246,0.000014229030057322234,-0.000005833061550220009,-0.0000042547835619188845,-0.00002718412179092411,-0.000025061946871574037,-0.00003152936915284954,-0.00003277888026786968,-0.00003887666389346123,-0.000034648659493541345,-0.000050274011300643906,-0.00003677815038827248,-0.00004247226388542913,-0.00002903110726037994,-0.000020898798538837582,-0.000010089145689562429,-0.000010234728506475221,0.000006811966159148142,-0.000005313822384778177,0.0000156254736793926,0.000009165262781607453,0.00002019751991610974,0.00002104634950228501,0.000026244979380862787,0.000020415984181454405,0.00003609451960073784,0.000021696680050808936,0.0000403553967771586,0.00002973491973534692,0.00002806495649565477,0.000031540897907689214,0.000004485058980208123,0.000023197349946713075,-0.00001706145121715963,0.000012635712664632592,-0.0000292308959615184,0.0000058418190747033805,-0.000030073091693338938,-1.1923079057396535e-7,-0.00002137258525181096,-0.000009712542123452295,-0.000012220786629768554,-0.000016407961084041744,-0.000012456388503778726,-0.000015059623365232255,-0.000008678027370478958,-0.000009216743819706608,0.000019928700567106716,0.000004287425326765515,0.00004467799226404168,0.00002016187136177905,0.000024435452360194176,0.000019308243281557225,-0.000007724876013526227,0.000009188834155793302,-0.0000019114108908979688,0.000012105027053621598,0.00002055629374808632,0.000020270883396733552,0.000018115131751983427,0.00001163760225608712,-0.00001510960100858938,-0.000021670934074791148,-0.00005311196582624689,-0.00005914847133681178,-0.00005459808380692266,-0.00006084770575398579,-0.000027462207071948797,-0.00003233471579733305,-0.000024315484552062117,-0.00001873439396149479,-0.00003443852983764373,-0.00001817194242903497,-0.000014029920748725999,-0.000009114837666857056,0.000012373760910122655,-0.000003239905254304176,0.000010735915566328913,-5.519689239008585e-8,-0.0000018883721395468456,0.00000311321650769969,-0.0000017775488458937616,-0.000006557762844749959,0.000015179120964603499,-0.00000455604003946064,0.000022281594283413142,0.000017691370885586366,-0.0000038258062886598054,0.000012033361599605996,-0.000019834642444038764,-0.000010000385373132303,0.000010684007975214627,0.000009171661986329127,0.00004517719935392961,0.00004714382521342486,0.0000477431713079568,0.00005181042797630653,0.000026211499061901122,0.00002550805947976187,0.000003884897068928694,0.00000662306683807401,0.000017071641195798293,0.00003120501423836686,0.00004284991882741451,0.00006512828258564696,0.000018203174477093853,0.00004200913826934993,-0.000014842201380815823,0.000003909772658516886,0.000008061370863288175,0.000021963762264931574,0.00003848099004244432,0.00005715851148124784,0.000043984284275211394,0.00006707866123178974,0.000052957908337702975,0.00006693915202049538,0.000049615926400292665,0.00005375961336540058,0.0000309937859128695,0.00003500019374769181,0.000029505476049962454,0.000029334600185393356,0.000023507789592258632,0.00001465066452510655,-1.0310985487649305e-7,-0.000006374973509082338,-0.000008675759090692736,-0.000009088520528166555,-0.000021084319087094627,-0.000024063272576313466,-0.0000631984366918914,-0.0000610212046012748,-0.00009105104982154444,-0.00007528847345383838,-0.00008082981366897002,-0.00007128059951355681,-0.00007338736031670123,-0.00008348179107997566,-0.00009302627586293966,-0.00010063370427815244,-0.00010311997175449505,-0.00009475899423705414,-0.00006107790977694094,-0.00005710756522603333,-0.0000045567167035187595,-0.000016807351130410098,-0.000008728594366402831,-0.000024047727492870763,-0.000054534481023438275,-0.00006562787166330963,-0.00006661251245532185,-0.0000764136275392957,-0.00004220175833324902,-0.00005006900755688548,-0.000025705265215947293,-0.000036733610613737255,-0.00002846791539923288,-0.0000510317986481823,-0.000025806351914070547,-0.00004952012750436552,0.000005754276116931578,-0.0000016414161336797406,0.0000425573016400449,0.00004579619053401984,0.00004338672079029493,0.000038616690289927647,0.000029018654458923265,0.000013091679647914134,0.00003744493369595148,0.000019917650206480175,0.000044882068323204294,0.00003138934698654339,0.00002662312181200832,0.000016957039406406693,0.000012313065781199839,0.000002333392103537335,0.00001934301690198481,0.0000014684613915960654,0.000014003498108650092,-0.000012435083590389695,-0.00001898372829600703,-0.000038960213714744896,-0.00003305000063846819,-0.00003180839848937467,-0.000003220078497179202,0.000009098755072045606,0.00001692907972028479,0.00001644175426918082,-0.0000025018243832164444,-0.000015483534298255108,-0.00001627800338610541,-0.000018092352547682822,-0.000013463391951518133,0.0000019396563857299043,-0.00003174218363710679,-0.0000160226827574661,-0.00005453410267364234,-0.00004583518239087425,-0.000040986185922520235,-0.000035656023101182655,-0.00001567927210999187,-0.000013575969205703586,-0.000018654585801414214,-0.000008182525562006049,-0.000031149891583481804,0.000004068513590027578,-0.000022341226213029586,0.000019159466319251806,-0.00001293922196055064,0.000003855884187942138,-0.00003387294782442041,-0.00002583240348030813,-0.000057961613492807373,-0.000027385123757994734,-0.000033527012419654056,0.0000016514985645699198,0.00003071745595661923,0.000041599003452574834,0.00007069997809594497,0.00007186799484770745,0.00005709023025701754,0.00006439198477892205,0.000029486905987141654,0.000029499340598704293,0.0000209078880288871,0.000017297805243288167,0.000013292264156916644,0.000027950874937232584,-0.0000013293877145770239,0.000019151208107359707,-0.000006482500339188846,-0.0000067296255110704806,-0.000007697241926507559,-0.000014276416550274007,0.0000016702936136425706,0.000015172436178545468,0.00004288800846552476,0.00006377120007527992,0.00006793632928747684,0.00007132426253519952,0.00002048872920568101,0.000012990089089726098,-0.000048709236580180004,-0.000047732733946759254,-0.00007167227886384353,-0.00006812359788455069,-0.000064849853515625,-0.00008061769040068612,-0.00006814341759309173,-0.00010230079351458699,-0.00008719259494682774,-0.0001180777617264539,-0.00008941548003349453,-0.00011921609257115051,-0.00003779408143600449,-0.00008811964653432369,0.000030435225198743865,-0.000025285318770329468,0.00004108916618861258,0.000014433621799980756,0.00001024217635858804,-0.000005194896857574349,0.000005180342213861877,-0.000034165761462645605,0.000023372396753984503,-0.000010869540346902795,0.00002539250453992281,0.00003357906825840473,0.000018433291188557632,0.00003062555697397329,0.000026741767214844003,-7.219643407552212e-7,0.00003656093031167984,-0.000001136163632509124,0.00003117337473668158,0.000021541796741075814,0.0000293058437819127,0.000043496882426552474,0.000037782541767228395,0.00007139385706977919,0.0000416023212892469,0.00009288021101383492,0.00005254682037048042,0.00009893468813970685,0.00006880204455228522,0.00010826986544998363,0.00005927990423515439,0.00011457254731794819,0.00005459919702843763,0.00010707223555073142,0.000094101473223418,0.00010680824925657362,0.00011209934746148065,0.00010920516069745645,0.000056838165619410574,0.00008033691119635478,-0.0000068494009610731155,0.000025022674890351482,-0.00002701147059269715,-0.000019174229237250984,-0.00003586516322684474,-0.00004372096373117529,-0.0000652634262223728,-0.00007542935782112181,-0.00009048141509993002,-0.00010400706378277391,-0.00006278631190070882,-0.00007421393820550293,0.0000025940585146599915,-0.000008294062354252674,0.0000325960099871736,0.000008096650162769947,0.00003069816739298403,-0.0000037499498830584344,0.000056778833823045716,0.000025616709535825066,0.00007991064921952784,0.00004987000284017995,0.000045740198402199894,0.000019337981939315796,0.000004544684998109005,-0.000008798326234682463,0.000008757365321798716,-0.0000021096132059028605,0.00001856036215031054,0.000004826958502235357,0.000005461828550323844,0.000007710723366471939,0.000010949572242680006,0.000018963972252095118,0.000044504369725473225,0.00002303562177985441,0.00004023867586511187,0.000010020921763498336,-0.000025972738512791693,-0.00001586198777658865,-0.00007700323476456106,-0.00004665309825213626,-0.000055274140322580934,-0.000052602150390157476,-0.0000061497439673985355,-0.00001668721961323172,0.000008728478860575706,0.000013330021829460748,-0.0000029871407605241984,-0.000004125208306504646,-0.0000026293639621144393,-0.00002612005664559547,0.0000065824074226839,-0.000017083671991713345,-0.0000046906184252293315,-0.00001556396091473289,-0.00002643541301949881,-0.00003281334284110926,-0.000039624956116313115,-0.00004113918112125248,-0.00007187780283857137,-0.00006438163109123707,-0.0001236143143614754,-0.00011173521488672122,-0.00012688638526014984,-0.00011649612861219794,-0.00006469413347076625,-0.00005987553595332429,-0.000014351888239616528,-0.000007210273906821385,-0.000016002846678020433,0.000014015030501468573,-0.000009058734576683491,0.00003463930625002831,0.000044094260374549776,0.00006039829531800933,0.00007179840031312779,0.00006237921479623765,0.000030082985176704824,0.000039645121432840824,-0.0000010439434845466167,0.000020206653061904944,0.00001813493508961983,-8.59565261634998e-7,0.000021399320758064277,-0.000031689640309195966,0.000003812285285675898,-0.00003198267222614959,0.00001682609217823483,0.0000013957578630652279,0.00004154344787821174,0.000013956621842226014,0.00004097841519978829,9.028317435877398e-7,0.000013097586816002149,-0.000017888380170916207,-0.000026429661375004798,-0.000042822484829230234,-0.00003054921762668528,-0.00004142971010878682,-0.000001531986526970286,-0.00001933212115545757,-0.0000132069308165228,-0.000039306974940700457,-0.00004899566920357756,-0.000061745238781441,-0.000037255726056173444,-0.000020425879483809695,-0.000015082103345775977,0.000013367198334890418,-0.00003093281702604145,-0.000012532468645076733,-0.000054078089306131005,-0.00003815422678599134,-0.00006230008148122579,-0.000032039140933193266,-0.000044264997995924205,9.833966032601893e-7,-5.77034370508045e-7,0.000045075670641381294,0.000020452816897886805,0.00004831075420952402,0.000016518073607585393,0.00002406950807198882,0.000028525224479380995,0.000029365415684878826,0.00002138098716386594,0.000015089812222868204,-0.00003114295031991787,-0.00005498417158378288,-0.00005744315421907231,-0.00008467251609545201,-0.000022096755856182426,-0.000038503785617649555,0.000013987733836984262,-0.000011090352927567437,0.000002372082235524431,-0.000031918280001264066,-0.000031449904781766236,-0.000032338593882741407,-0.00003993864811491221,-0.000005635174602502957,-0.00003002981611643918,-0.000012256874470040202,-0.00002950612542917952,-0.000029784107027808204,-0.000014617784472648054,0.00001263211561308708,0.00002073836003546603,0.000060902915720362216,0.00002685291474335827,0.00002972178117488511,0.000003865030521410517,-0.000011656133210635744,-0.0000019173003238392994,0.000016705547750461847,0.000012224107194924727,0.000058518213336355984,0.000023397415134240873,0.00006208814738783985,0.000014334675142890774,0.000048294361477019265,-0.000011518812243593857,0.00003706568531924859,-0.000009435871106688865,0.00004311736120143905,0.000036349370930111036,0.00005881915785721503,0.0000780311384005472,0.00005478940511238761,0.00009043554018717259,0.00005104908996145241,0.00008298666216433048,0.00006888940697535872,0.00006298254447756335,0.00007044045923976228,0.000054575710237259045,0.00005354037421057001,0.000060902479162905365,0.00005536368189495988,0.00004294863174436614,0.00005029814929002896,0.000005725249138777144,0.000005086803867015988,-0.000010700321581680328,-0.00004252125654602423,-0.000021980682504363358,-0.000058042256569024175,-0.00005544697341974825,-0.000054441989050246775,-0.00008118953701341525,-0.00004292158700991422,-0.00007777901191730052,-0.000035333177947904915,-0.00007716101390542462,-0.00005428513395600021,-0.00008297056774608791,-0.0000670280642225407,-0.00005144996976014227,-0.000014605345313611906,-0.00000779076071921736,0.0000432292181358207,-0.00003144462971249595,0.000004673118382925168,-0.00008541214629076421,-0.00005519864134839736,-0.00006174968439154327,-0.000014400528016267344,0.000012012095794489142,0.000047868241381365806,0.000030405124562093988,0.00002368395507801324,0.000001922777300933376,-0.000011832757991214748,0.0000026430798243382014,0.000012279679140192457,0.00003241767262807116,0.000024375991415581666,0.00003544256105669774,-0.00002144496829714626,0.0000066679922383627854,-0.00006405106250895187,-0.000002957086053356761,-0.00005756971222581342,0.000015621615602867678,-0.00003508651934680529,0.00001469517155783251,-0.00004308757706894539,-0.000010895128070842475,-0.0000762795825721696,-0.00001937178421940189,-0.00009255228360416368,-0.000009577730452292599,-0.00007198793900897726,-0.00001064251409843564,-0.00004143540354561992,-0.000017639989891904406,-0.00002866461181838531,-0.000003194289547536755,-0.00001008950584946433,0.000025677494704723358,0.0000337935853167437,0.00002025209141720552,0.00004816519140149467,-0.00003013358946191147,0.000005368628990254365,-0.00005807228444609791,-0.000014198250937624834,-0.000024669036065461114,0.00002980853787448723,0.00001305967180087464,0.0000615404496784322,0.000003169276169501245,0.000039045036828611046,-0.000026213239834760316,0.000006035425030859187,-0.000030444816729868762,-0.000012050156328768935,-0.000019078106561210006,-0.000029675369660253637,-0.000031799194402992725,-0.000055997508752625436,-0.0000721602700650692,-0.00009207191760651767,-0.00010938722698483616,-0.00013436700101010501,-0.00012641138164326549,-0.0001619315444258973,-0.00012095387501176447,-0.00015179513138718903,-0.00009973258420359343,-0.00012022676673950627,-0.00008012935722945258,-0.0001016552560031414,-0.000054741190979257226,-0.00008083759166765958,-0.00000593823006056482,-0.00002722652061493136,0.000044529537262860686,0.000031446641514776275,0.00007436021405737847,0.00005673569467035122,0.00008370971045223996,0.000051376631745370105,0.00005631861131405458,0.0000279171799775213,-0.0000013176068023312837,0.0000014861398085486144,-0.000035487813875079155,-0.00001107328716898337,-0.000028035083232680336,-0.000009004481398733333,-0.000013428236343315803,0.000007951015504659154,-0.000012215399692649953,0.000026802747015608475,-0.000010574289262876846,0.00001737370803311933,0.000018003340301220305,5.736237653763965e-7,0.00006992507405811921,0.00002058242716884706,0.00009748925367603078,0.000049604932428337634,0.00007757225830573589,0.0000480062335554976,0.000046539622417185456,0.000040741320844972506,0.0000359866680810228,0.000044753498514182866,0.00003149465555907227,0.00003402285074116662,0.000016869544197106734,0.000012217524272273295,0.000014416894373425748,0.00001694033562671393,0.00002633786789374426,0.00003387614560779184,-0.0000031246981961885467,0.000006746628059772775,-0.00006808514444855973,-0.0000424836362071801,-0.00007945387915242463,-0.000040809682104736567,-0.00004131623427383602,-0.000006584262791875517,-0.000027186131774215028,0.000009418003173777834,-0.00001379865534545388,0.000029131773771950975,0.00003061928873648867,0.00005724620132241398,0.00004902021464658901,0.0000633458184893243,0.000014305432159744669,0.000058562731283018366,-0.000027793557819677517,0.000046056477003730834,-0.000024998287699418142,0.00002725913145695813,0.000025247172743547708,0.000039892023778520525,0.00004112611713935621,0.000050569287850521505,-0.000014535172340401914,0.0000067802211560774595,-0.00004382204497233033,-0.000026799832994583994,-0.000016543841411476023,-0.0000244089933403302,-0.000021907017071498558,-0.00005314009467838332,-0.00005711687481380068,-0.00007939628267195076,-0.00006287739233812317,-0.00005297015013638884,-0.000055925644119270146,-0.0000416878356190864,-0.000044781805627280846,-0.00005816018165205605,-0.000014692141121486202,-0.000038615464291069657,0.000015342511687777005,-0.0000019092221918981522,0.00004032142896903679,0.000013651363587996457,0.0000466067940578796,0.000017852991732070222,1.3027107570451335e-7,0.0000011722290764737409,-0.0000434878165833652,-0.000021812964405398816,0.000001429963049304206,0.00001604595672688447,0.00008827573037706316,0.00010605066927382722,0.00011196303967153654,0.00014238811854738742,0.00007170428580138832,0.00009203513036482036,0.00005030815373174846,0.00005320513810147531,0.00006844555173302069,0.00007133291364880279,0.00004482951044337824,0.000057309403928229585,-0.00004976908894605003,-0.000016540670912945643,-0.00012368492025416344,-0.00006704733095830306,-0.00012687843991443515,-0.00008667777001392096,-0.00010667263995856047,-0.00010933732846751809,-0.0000810641358839348,-0.0000843552261358127,-0.00003626633406383917,-0.000011461594112915918,-0.000003800034392043017,0.000010872363418457098,-0.00001115972099796636,-0.000024820123144309036,-0.000016356738342437893,-0.00003160407504765317,0.000021647872927132994,0.00000160533340931579,0.000044044452806701884,0.000006865130671940278,-0.000021276600818964653,-0.00004543062095763162,-0.0001009973420877941,-0.00010950845899060369,-0.00008220582094509155,-0.00012713325850199908,-0.000009265588232665323,-0.00009223717643180862,0.00001942663948284462,-0.00004278800042811781,0.000014971864402468782,-0.000015608507965225726,0.000012556516594486311,-0.00001997295839828439,-0.00001677776890574023,-0.00004871925193583593,-0.00008439271186944097,-0.00009608511754777282,-0.00012681048247031868,-0.00012660387437790632,-0.00009491848322795704,-0.00009672807937022299,-0.000038584679714404047,-0.00004915422323392704,-0.000011407275451347232,-0.00003619683411670849,0.000020544717699522153,-0.000004877408628090052,0.000057512861530994996,0.00005082879215478897,0.000023422402591677383,0.00003235676922486164,-0.00007216427911771461,-0.000044125583372078836,-0.00013907243555877358,-0.00007763699250062928,-0.0001589777530170977,-0.00009526571375317872,-0.0001702349109109491,-0.00015039237041492015,-0.00018199183978140354,-0.00018227424880024046,-0.0001656827371334657,-0.00014178658602759242,-0.00009661682270234451,-0.00006982849299674854,-0.000024176955776056275,-0.000023143686121329665,-0.000021666413886123337,-0.000022818921934231184,-0.00004684945088229142,-0.00003441434455453418,-0.000010103430213348474,0.0000032032912713475525,0.00006675547047052532,0.00008603621245129034,0.00010718784324126318,0.0001322274620179087,0.00010200230462942272,0.00010818237205967307,0.00009606129606254399,0.00009692880848888308,0.00011241745960433036,0.00014431362797040492,0.00011704491771524772,0.00014793468290008605,0.00008428628643741831,0.000059725869505200535,0.00006823895819252357,0.00001569482628838159,0.00011798230116255581,0.00008751583663979545,0.00017217642744071782,0.00014552491484209895,0.00014642594032920897,0.00009886995394481346,0.0000820255299913697,0.0000389802225981839,0.0000945738865993917,0.00006543559720739722,0.00017948643653653562,0.00013175995263736695,0.000207908742595464,0.00013581017265096307,0.0001348408404737711,0.00007278104749275371,0.000048818663344718516,0.000009134634638030548,0.00001749626790115144,-0.000027329901058692485,0.000009467278687225189,-0.000057572869991417974,-0.000054372627346310765,-0.00011624617764027789,-0.00017348630353808403,-0.00019637461809907109,-0.00020912816398777068,-0.00020959861285518855,-0.00009173363650916144,-0.00011212546814931557,0.000036042500141775236,2.3283064365386963e-8,0.00005594479080173187,0.00004100982187082991,0.000023640137442271225,0.00002810826299537439,0.000004636331141227856,0.0000017502184164186474,-0.0000016116446204250678,-0.000008960413651948329,-0.00001896120375022292,-0.000017643205865169875,-0.00007192717748694122,-0.00006774204666726291,-0.00011022477701772004,-0.0001006519451038912,-0.00004939598875353113,-0.000025064480723813176,0.00006950402894290164,0.00008736859308555722,0.00013112671149428934,0.00011726255615940318,0.00009332889749202877,0.00006975586438784376,-0.000007504016139137093,-0.0000017577287962922128,-0.0000711821558070369,-0.00003985501825809479,-0.000008704300853423774,0.00001219889509229688,0.00010966281115543097,0.00010688483598642051,0.0001459826744394377,0.00014799759082961828,0.00012049888755427673,0.00015319800877477974,0.0001315882836934179,0.0001693947851890698,0.00013466438394971192,0.00013570465671364218,0.00003885695696226321,0.000019557321138563566,-0.0000759758404456079,-0.00006659913924522698,-0.00009499234874965623,-0.00006112013215897605,-0.00007698169065406546,-0.000060936577938264236,-0.00006680353544652462,-0.00007666349119972438,0.000022440679458668455,0.000004864556558459299,0.00012551239342428744,0.00011123484728159383,0.00006374843360390514,0.0000694217742420733,-0.00006522072362713516,-0.000034445423807483166,-0.000056505523389205337,-0.00003903900505974889,0.000005489092927746242,-0.000015380668628495187,-0.000013067590771242976,-0.000028134491003584117,-0.000019961922589573078,0.00001111600886360975,0.00003626819307100959,0.00007595207716803998,0.00005631609747069888,0.000051114606321789324,0.000038434911402873695,4.5267279347172007e-7,0.000059726120525738224,0.00003945884600398131,0.00009166861127596349,0.00010432150884298608,0.00008447789878118783,0.00009268712892662734,0.00006632134318351746,0.000032154312066268176,0.00006209970160853118,3.4997174225281924e-7,0.00007809824455762282,0.0000330825278069824,0.00011409471335355192,0.00009687244892120361,0.00010992292664013803,0.00010118685167981312,0.000043402149458415806,0.00003681848829728551,0.00002333584961888846,0.00002146193219232373,0.00008825006807455793,0.00008878691733116284,0.00010468476102687418,0.00011617453128565103,0.000010868432582356036,0.00003768633177969605,-0.0000832886653370224,-0.00006463406316470355,-0.00009575632429914549,-0.00009790592594072223,-0.00008047091250773519,-0.00008127279579639435,-0.00011930312030017376,-0.00010817989095812663,-0.00019761906878557056,-0.00018406282470095903,-0.00025037425803020597,-0.00022929937404114753,-0.00028175031184218824,-0.00026143481954932213,-0.00030704058008268476,-0.00032354859285987914,-0.00028720812406390905,-0.0003314026980660856,-0.00023685301130171865,-0.0002623709151521325,-0.00020041537936776876,-0.00023299336316995323,-0.0001476819161325693,-0.0002481380943208933,-0.00007395316060865298,-0.00019933024304918945,-0.00001707856063148938,-0.00007966350676724687,0.00003398122498765588,0.000010577972716419026,0.00004213210195302963,-0.000016719475752324797,-0.00003703224865603261,-0.00011134900705656037,-0.00007891521818237379,-0.00010674398799892515,-0.000002282263267261442,0.000002869634954549838,0.00004155691203777678,0.00003237165219616145,-0.000040039492887444794,-0.00005632107422570698,-0.00011622216698015109,-0.00010217920498689637,-0.000052099829190410674,-0.000006442031008191407,0.00011611672380240634,0.00016018351016100496,0.0002177420974476263,0.00024585469509474933,0.00016871566185727715,0.0002069331967504695,0.00009723335824673995,0.00016305266763083637,0.00010130155715160072,0.0001628038880880922,0.00009905041952151805,0.00012441941362340003,0.00005324347148416564,0.00006661077350145206,0.000056269716878887266,0.00009563506318954751,0.0001445938105462119,0.00020467364811338484,0.00022031216940376908,0.00027645783848129213,0.00018519532750360668,0.00023159629199653864,0.00010800627205753699,0.0001519494253443554,0.00012027759657939896,0.00017234316328540444,0.00015244039241224527,0.00021870264026802033,0.000060043548728572205,0.00012630523997358978,-0.00008305638039018959,-0.00003651895167422481,-0.00011915012873942032,-0.0000871685188030824,-0.000041786948713706806,-0.000004809240635950118,0.00004110886584385298,0.000093799018941354,0.00001830440669436939,0.00009007014887174591,-0.00008894543861970305,-0.000008388842616113834,-0.00012280653754714876,-0.000059225996665190905,-0.00004686256579589099,-0.000004007886218460044,0.000010301017027813941,0.00006117883458500728,-0.000004959066245646682,0.00006308007868938148,-0.00005623497781925835,0.0000016901053641049657,-0.00012405106099322438,-0.00009191863500745967,-0.00018024181190412492,-0.0001593408960616216,-0.00019957635959144682,-0.00017160963034257293,-0.00017814745660871267,-0.00013509401469491422,-0.00011708180682035163,-0.00006468065839726478,-0.00006644428503932431,-0.000022329521016217768,-0.00005872109250049107,-0.000030379385862033814,-0.00001940926449606195,-9.50950834521791e-7,0.00007214264041977003,0.00007613632624270394,0.00011203531175851822,0.00009669607970863581,0.00008747195533942431,0.00006836865213699639,0.000107871564978268,0.00009087040234589949,0.00019871782569680363,0.00016566846170462668,0.0002717904862947762,0.0002240440808236599,0.00026444465038366616,0.00022366063785739243,0.0002072927018161863,0.00016754464013502002,0.00017488887533545494,0.00011745865049306303,0.00018788142187986523,0.00012361693370621651,0.00018892365915235132,0.0001353108964394778,0.00012977307778783143,0.00008753158908803016,0.00003708814620040357,0.000010673960787244141,-0.00001981318746402394,-0.00003052715692319907,0.0000012943901310791261,-0.000012440191312634852,0.00007004603685345501,0.000053042742365505546,0.00011080254625994712,0.00010929033305728808,0.00010538451169850305,0.00010385063797002658,0.0001238908589584753,0.00009580529876984656,0.00019793650426436216,0.00016720773419365287,0.00024815084179863334,0.0002446943544782698,0.00019588206487242132,0.00019575741316657513,0.00005647114085149951,0.000033640259061940014,-0.00008082586282398552,-0.00010941842629108578,-0.000123425226774998,-0.0001422984933014959,-0.00009261527156922966,-0.00010913527512457222,-0.00009859810234047472,-0.00011477481893962249,-0.00013260109699331224,-0.00014256648137234151,-0.00009395734377903864,-0.00008956607052823529,-0.000003257652451793547,0.000024219256374635734,0.00006157296593300998,0.00009329195017926395,0.0000909910086193122,0.00009424033487448469,0.00007284159801201895,0.00006831511564087123,0.00001874280314950738,0.00005567546031670645,0.000005360243903851369,0.00006956124707357958,0.00004115957926842384,0.00008636829443275928,0.00006720854435116053,0.00010175880743190646,0.000058497971622273326,0.00010565094271441922,-0.00000532744888914749,0.00003650475264294073,-0.00008412737224716693,-0.00005737183892051689,-0.00004074765456607565,-0.000015765856005600654,0.00012070624507032335,0.00012950683594681323,0.0002018612576648593,0.0001815898867789656,0.0001366319484077394,0.00012036338011967018,0.00008128847548505291,0.00008533558138879016,0.00012598736793734133,0.00011848862050101161,0.0001826434163376689,0.00015625306696165353,0.00019109569257125258,0.00017093791393563151,0.00020420609507709742,0.00018747098511084914,0.00021713862952310592,0.00019607768626883626,0.00015462526062037796,0.00015112361870706081,0.00005944148142589256,0.00007137679494917393,0.00002383520950388629,0.00001862557473941706,-0.0000068000390456290916,-0.000017121023120125756,-0.00010218597890343517,-0.00007586612628074363,-0.0001744521432556212,-0.0001242063590325415,-0.0001295977272093296,-0.00010483716323506087,-0.00002151472472178284,-0.000034661545214476064,0.00004824878487852402,0.000019321976651553996,0.000060638627473963425,0.000033946442272281274,0.000049855512770591304,0.00003052474494324997,0.00003425036265980452,0.000019722010620171204,0.00003538441160344519,0.00002866454451577738,0.00006024901085766032,0.00007192634075181559,0.00005440136737888679,0.00007213866047095507,0.000019199043890694156,0.000010913217920460738,0.000045549073547590524,0.000012097194485249929,0.00010095175093738362,0.00006870793731650338,0.00007156033825594932,0.00003835436291410588,0.000020153316654614173,-0.000019508930563461035,0.0000535928484168835,0.00003740128158824518,0.00010149527952307835,0.00011497524246806279,0.00008390550647163764,0.0000843971865833737,0.00003986573210568167,0.000023354001314146444,0.000007602353434776887,0.000020408371710800566,-0.000010802616088767536,0.000026732461265055463,-0.000005622944627248216,0.0000034467293517082,0.000030874678486725315,0.000010173034752369858,0.00007900789205450565,0.0000685180420987308,0.00007322894089156762,0.00007221940177259967,-0.000027310783480061218,-0.000044682725274469703,-0.0001466236572014168,-0.00017769132682587951,-0.00018490885850042105,-0.00021317791834007949,-0.00014575586828868836,-0.00016396366117987782,-0.00008703183266334236,-0.000096126452262979,-0.00003868097337544896,-0.00006154235597932711,0.0000013577704294220894,-0.00006000530629535206,0.00003719485175679438,-0.000029292279577930458,0.00005176669219508767,0.000037953537685098127,0.00004797007568413392,0.0000610950737609528,0.00007513132004532963,0.000035335040593054146,0.00014191074296832085,0.000057879464293364435,0.00018908843048848212,0.0001475651515647769,0.00020764136570505798,0.00022060774790588766,0.00025390449445694685,0.0002503087744116783,0.00030238457839004695,0.0002672707778401673,0.0002528578625060618,0.000237257219851017,0.00013433310959953815,0.00013784827024210244,0.00008091441122815013,0.000059937723563052714,0.00008225104829762131,0.00005401169983088039,0.00003974448191002011,0.00004953946336172521,-0.000010107636626344174,0.00001073527801054297,-0.000020950206817360595,-0.00003656994522316381,-0.00005993116428726353,-0.0000808492986834608,-0.00011625375918811187,-0.0000944273269851692,-0.00010681073763407767,-0.00007551605085609481,-0.00007586299034301192,-0.00009075189882423729,-0.00008544810407329351,-0.00012747022265102714,-0.00006861256406409666,-0.00007860875484766439,0.000004575975708576152,0.00004120101948501542,0.00003772617856157012,0.0000848198906169273,-0.000009577727723808493,0.000012361198059807066,-0.00005892533590667881,-0.00005592560046352446,-0.00008714772411622107,-0.00006369994662236422,-0.0001394686260027811,-0.00008136204269248992,-0.00015996844740584493,-0.00010361209569964558,-0.00011126687604701146,-0.00008401738159591332,-0.00014169493806548417,-0.00011784620437538251,-0.0002762835065368563,-0.00022666376025881618,-0.0002874225901905447,-0.00022627771249972284)\n\
+\n\
+,\n\
+\n\
+new Array(-0.00014015505439601839,-0.00009424725431017578,-0.0000367982174793724,-0.000012330742720223498,-0.000009979183232644573,-0.000005074737146060215,0.000015334489944507368,0.000006053265224181814,0.000033470423659309745,0.000029470638764905743,0.00009303881961386651,0.00010694590309867635,0.00022122845984995365,0.00022976046602707356,0.00027943524764850736,0.00024943548487499356,0.000181631650775671,0.00012874089588876814,0.000033948716009035707,0.00001643829637032468,-0.000038822603528387845,-0.000005076801244285889,-0.000026619280106388032,-0.000004013060788565781,-0.000020743873392348178,-0.000060739057516912,-0.00009209522977471352,-0.00015305288252420723,-0.0001557939249323681,-0.00016957358457148075,-0.00011526542220963165,-0.00008990408241515979,-0.00003546544030541554,-0.000018380367691861466,0.000005372870873543434,0.000013720681636186782,0.000005543797669815831,0.00003979273242293857,-0.000014010610357217956,0.00005891008913749829,-0.00001633692954783328,0.00006351392949000001,-0.000011691547115333378,0.000035224747989559546,-0.00004958381759934127,-0.000023805565433576703,-0.00012163100473117083,-0.00007665240264032036,-0.00016238178068306297,-0.00010357973224017769,-0.00012000015703961253,-0.00009269107249565423,-0.000049141810450237244,-0.00005715646693715826,-0.00004356173303676769,-0.00003632663720054552,-0.00001985907510970719,0.0000020384477465995587,0.00012762073311023414,0.00011586706386879086,0.00021797671797685325,0.00020374754967633635,0.00008666064240969718,0.00011644592450466007,-0.00006568098615389317,-0.000046202490921132267,-0.00004137075302423909,-0.00007593315240228549,0.000004579069354804233,-0.00002532761573093012,-0.00009905502520268783,-0.00007579676457680762,-0.00019283377332612872,-0.00017823997768573463,-0.00014772501890547574,-0.00019722098659258336,-0.00013216372462920845,-0.000167879305081442,-0.00019680026161950082,-0.00015686158440075815,-0.0002077507524518296,-0.00015023740706965327,-0.00017501234833616763,-0.00013415997091215104,-0.00017168966587632895,-0.00013525885879062116,-0.00015167739184107631,-0.00012130104005336761,-0.00008563465962652117,-0.000041452833102084696,-0.00007153890328481793,-0.000001365100615657866,-0.00008754107693675905,-0.0000252203899435699,-0.00003187061520293355,-0.000009977433364838362,0.000022157373678055592,0.00003242286038585007,0.00003615911191445775,0.00009324029088020325,0.000014359744454850443,0.00007800778257660568,-0.000049274443881586194,-0.00005691000842489302,-0.00007130674202926457,-0.00010760929581010714,-0.000036453122447710484,-0.000047757712309248745,0.000054562337027164176,0.000027955291443504393,0.00009254179894924164,0.00002200369090132881,-0.00004265725874574855,-0.00010851425759028643,-0.0001688027841737494,-0.00016441606567241251,-0.00021186693629715592,-0.0001573815243318677,-0.00018332900071982294,-0.0001501880760770291,-0.00010138592188013718,-0.00008154666284099221,-0.00013429764658212662,-0.00008883286500349641,-0.0001400368637405336,-0.00010151389869861305,-0.000043619606003630906,-0.00004538596476777457,-0.000031638654036214575,-0.00003416767867747694,-0.00006974972347961739,-0.00005143813177710399,-0.00010723905870690942,-0.00012572293053381145,-0.00002397704156464897,-0.00009767053415998816,0.00011572502262424678,0.00005432979014585726,0.00007883126090746373,0.0000620109640294686,0.00007341729360632598,0.00004993831316824071,0.00011931547487620264,0.00005841327947564423,0.00005921594856772572,0.00001511409482191084,0.000033078180422307923,0.000019489067199174315,0.000033935510145965964,-0.000011722012459358666,0.00004304029425838962,-0.000035746488720178604,0.00003718510197359137,-0.000058436104154679924,-0.00001174940280179726,-0.00013024899817537516,0.000020506238797679543,-0.00007963776442920789,0.00003176229074597359,-0.00005422571848612279,-0.00002636853423609864,-0.00014182373706717044,-0.000049795104132499546,-0.00017246516654267907,-0.00009185299859382212,-0.00017978546384256333,-0.00013231371121946722,-0.00016474576841574162,-0.0001400558976456523,-0.00015335241914726794,-0.0001470029092160985,-0.00018156964506488293,-0.00014865070988889784,-0.0001718680141493678,-0.00012142615742050111,-0.00014900251699145883,-0.00007435568841174245,-0.00012459667050279677,-0.00008725070802029222,-0.00011005691339960322,-0.00008626709313830361,-0.00012864137534052134,-0.00004616122896550223,-0.0001554132904857397,-0.00009952057007467374,-0.00021355791250243783,-0.0001459539489587769,-0.00023241406597662717,-0.00013092698645778,-0.00017168368503917009,-0.00015152087144088,-0.00015848565089982003,-0.0001564635313116014,-0.00018872391956392676,-0.00011087577149737626,-0.00015771349717397243,-0.0000527798110852018,-0.00008749643166083843,-0.000036134504625806585,-0.00004221020935801789,-0.00008243389311246574,-0.00005874632915947586,-0.0001164921632152982,-0.00013457277964334935,-0.0001483543310314417,-0.00019349232024978846,-0.00023352073912974447,-0.00023075437638908625,-0.00028925627702847123,-0.00027289867284707725,-0.00029771780828014016,-0.0003031028318218887,-0.0002913945645559579,-0.0003263660764787346,-0.00015898887068033218,-0.00020953141211066395,0.000021462499717017636,0.000016161218809429556,0.00006929994560778141,0.00007043606456136331,0.000042957883124472573,-0.000021664078303729184,0.000008055478247115389,-0.00008845835691317916,0.00006582804780919105,-0.000016302576113957912,0.00015406384773086756,0.00010176366777159274,0.00009414566011400893,0.0000354732692358084,0.00007631623884662986,-0.000012391613381623756,0.00007941365765873343,0.0000648690911475569,0.00001397199412167538,0.00010448538523633033,0.000029168595574446954,0.00008860438538249582,-0.00006609586125705391,-0.00006593324360437691,-0.0002065992885036394,-0.0001552091707708314,-0.00018771870236378163,-0.00007774525874992833,-0.00012997548037674278,-0.00007887235551606864,-0.0000391396097256802,-0.000076210533734411,-0.0000876762715051882,-0.0000996374583337456,-0.00014420422667171806,-0.0001080437286873348,0.000032678239222150296,0.00001941799564519897,0.00008381356747122481,0.000031045052310219035,0.00006379729165928438,0.000027837693778565153,0.00006071649841032922,0.00002810096339089796,-0.000023521930415881798,-0.000042365853005321696,0.000022846543288324028,-0.000005697456799680367,0.00003526679938659072,-0.00004256410466041416,-0.0000757251400500536,-0.00013366315397433937,-0.00011955667287111282,-0.00011828384594991803,-0.00017747009405866265,-0.00016866534133441746,-0.0001741003361530602,-0.00016113329911604524,-0.00020356231834739447,-0.0001154246274381876,-0.00034802500158548355,-0.00014464158448390663,-0.0003696058120112866,-0.00011752495629480109,-0.00038095645140856504,-0.00015291014278773218,-0.0003850535140372813,-0.00025106975226663053,-0.00019905260705854744,-0.0002682860067579895,0.0000021677478798665106,-0.0002483882417436689,0.0001757844293024391,-0.0002012909681070596,0.00042002167901955545,-0.00011912333138752729,0.000566192960832268,0.000036280973290558904,0.0006151891429908574,0.000419270625570789,0.0007446972886100411,0.0009848694317042828,0.0007311853696592152,0.0014010249869897962,0.000447156373411417,0.001734805991873145,0.000048851674364414066,0.002086761873215437,-0.00039686530362814665,0.002081888262182474,-0.0007315071416087449,0.0017690588720142841,-0.0011235257843509316,0.0012453674571588635,-0.001530013862065971,0.0005929881590418518,-0.0015843822620809078,0.00013364609912969172,-0.001662310678511858,-0.0004051764262840152,-0.0017336646560579538,-0.0008209687657654285,-0.0017958111129701138,-0.0008799072238616645,-0.0023105277214199305,-0.0009375008521601558,-0.0026750226970762014,-0.00045945230522193015,-0.00301142456009984,0.00032612154609523714,-0.0037594083696603775,0.000844741880428046,-0.004248717334121466,0.001590814790688455,-0.004585081245750189,0.0022387588396668434,-0.004611271433532238,0.002747831167653203,-0.004052754957228899,0.0032969240564852953,-0.003427402814850211,0.0034304591827094555,-0.0024721764493733644,0.003596643218770623,-0.001401375513523817,0.003709446405991912,-0.0006295255152508616,0.0034894035197794437,0.000059773577959276736,0.003397291759029031,0.00038508654688484967,0.0033650926779955626,0.0005159653373993933,0.003734476398676634,0.00030270108254626393,0.0044049047864973545,-0.0007104952237568796,0.004650060087442398,-0.0020415415056049824,0.004571670666337013,-0.003501879284158349,0.004163370467722416,-0.00479539530351758,0.0036168238148093224,-0.005974814295768738,0.002774751279503107,-0.007256212644279003,0.001289845909923315,-0.007495714817196131,0.00010230821499135345,-0.006734591443091631,-0.0007406961522065103,-0.00581145565956831,-0.0016243165591731668,-0.00462182704359293,-0.002173752523958683,-0.0036379247903823853,-0.002846694318577647,-0.002800004556775093,-0.0035107601433992386,-0.0017736477311700583,-0.003419754095375538,-0.0011825866531580687,-0.0027814360801130533,-0.0008575308602303267,-0.0018417327664792538,-0.0002217306027887389,-0.000598331680521369,0.0005840326775796711,0.0008799363858997822,0.0010996086057275534,0.0021491702646017075,0.001309904851950705,0.0030024773441255093,0.0020673295948654413,0.003890095977112651,0.003430642420426011,0.004317090380936861,0.004580176901072264,0.003661549184471369,0.00580180948600173,0.0027171203400939703,0.007631687913089991,0.0020412683952599764,0.009570170193910599,0.0011816845508292317,0.010828486643731594,-0.00026033760514110327,0.010754303075373173,-0.0022562353406101465,0.009428870864212513,-0.00440824031829834,0.00784861296415329,-0.006088739261031151,0.006158956792205572,-0.007177523337304592,0.003770801005885005,-0.00812677014619112,0.0011826830450445414,-0.008794397115707397,-0.0005873069749213755,-0.008513960987329483,-0.0010649776086211205,-0.007513529155403376,-0.0007121718372218311,-0.007079744245857,-0.0002848606090992689,-0.007748864591121674,0.0008878273656591773,-0.008503956720232964,0.0035180600825697184,-0.008739612065255642,0.006504544522613287,-0.009005337953567505,0.008940945379436016,-0.00949372723698616,0.0112361591309309,-0.009555941447615623,0.01331779919564724,-0.008684584870934486,0.014238296076655388,-0.007197503000497818,0.013849114067852497,-0.005386539734899998,0.012764517217874527,-0.003275955095887184,0.01142237801104784,-0.0009684885153546929,0.010298161767423153,0.0016993064200505614,0.009333365596830845,0.00391809456050396,0.008427868597209454,0.0044991616159677505,0.008336156606674194,0.0039911759085953236,0.008962663821876049,0.0027452115900814533,0.009156675077974796,0.00011548047768883407,0.008277789689600468,-0.00374692864716053,0.006709702778607607,-0.008039569482207298,0.00510604539886117,-0.011835870333015919,0.0028857786674052477,-0.014525201171636581,-0.0005683306371793151,-0.015833331272006035,-0.004239668603986502,-0.015388516709208488,-0.006670473609119654,-0.012940594926476479,-0.007479296065866947,-0.008850338868796825,-0.007622465491294861,-0.004532064776867628,-0.0072344085201621056,-0.0008344601956196129,-0.0057411170564591885,0.0022335564717650414,-0.0032891982700675726,0.004121846053749323,0.0008299641194753349,0.005279644392430782,0.003736786311492324,0.0047928947024047375,0.0013215296203270555,0.0010782248573377728,-0.000013336036317923572,-0.0011458239750936627,0.0031413149554282427,-0.00009486293856753036,-0.0011687587248161435,-0.0041114469058811665,-0.017392633482813835,-0.015722988173365593,-0.034477073699235916,-0.027795441448688507,-0.04571573808789253,-0.036322321742773056,-0.05450707674026489,-0.0428432859480381,-0.06265253573656082,-0.047500766813755035,-0.05975385755300522,-0.041561610996723175,-0.032463666051626205,-0.013804420828819275,0.01827487349510193,0.03537826985120773,0.08266807347536087,0.097795769572258,0.15217961370944977,0.1658187061548233,0.22064581513404846,0.23351822793483734,0.28683555126190186,0.298629492521286,0.3469022810459137,0.35707736015319824,0.3909241557121277,0.4009797275066376,0.4156057834625244,0.4274917244911194,0.4247729480266571,0.43869462609291077,0.42078956961631775,0.43660423159599304,0.4062882959842682,0.42413580417633057,0.3860650956630707,0.4054466187953949,0.36459267139434814,0.38485953211784363,0.34501156210899353,0.3655964732170105,0.32996436953544617,0.34972891211509705,0.3208392858505249,0.3385865390300751,0.31652164459228516,0.3319227993488312,0.31623896956443787,0.3296041488647461,0.3198554813861847,0.3315024673938751,0.32542842626571655,0.3357532024383545,0.3314844071865082,0.3411482274532318,0.33733949065208435,0.3469061255455017,0.3416065573692322,0.3515341877937317,0.34387338161468506,0.35465532541275024,0.3446221947669983,0.3560125529766083,0.3444567918777466,0.35549405217170715,0.3434079587459564,0.3537798523902893,0.34088873863220215,0.35074639320373535,0.3382267653942108,0.34693875908851624,0.3369491696357727,0.3435756266117096,0.33618712425231934,0.3405708968639374,0.3352181017398834,0.337916761636734,0.3344864845275879,0.3360024392604828,0.3347020149230957,0.33500710129737854,0.33559557795524597,0.3345468044281006,0.3356438875198364,0.33335721492767334,0.33476224541664124,0.3313899040222168,0.33328360319137573,0.3290165960788727,0.33022430539131165,0.325093150138855,0.3257369101047516,0.3194625973701477,0.32044002413749695,0.3130733370780945,0.3142836391925812,0.3061066269874573,0.3078814744949341,0.2988135516643524,0.30184903740882874,0.2917783856391907,0.2964288294315338,0.2853374481201172,0.2916559875011444,0.27951890230178833,0.2874945402145386,0.274495929479599,0.2842196524143219,0.27030646800994873,0.28150874376296997,0.26606911420822144,0.27893924713134766,0.26149675250053406,0.2760584354400635,0.2568477988243103,0.27202627062797546,0.2516094148159027,0.26775065064430237,0.24617767333984375,0.26375263929367065,0.240883007645607,0.2583709955215454,0.2348024845123291,0.2521602511405945,0.22854775190353394,0.24681374430656433,0.22324083745479584,0.24198345839977264,0.21861906349658966,0.23773431777954102,0.21457253396511078,0.23431454598903656,0.2108982503414154,0.23115283250808716,0.20731040835380554,0.22855831682682037,0.20408383011817932,0.22669631242752075,0.2009020447731018,0.22472351789474487,0.19726240634918213,0.22214411199092865,0.19329386949539185,0.2187594175338745,0.1889563798904419,0.21419735252857208,0.18386077880859375,0.20839394629001617,0.17786459624767303,0.2017228603363037,0.1712917685508728,0.19439153373241425,0.16436927020549774,0.18625706434249878,0.1569976955652237,0.17753638327121735,0.14927631616592407,0.16906782984733582,0.14145801961421967,0.16131752729415894,0.13372083008289337,0.15394407510757446,0.1261877566576004,0.14700950682163239,0.11899550259113312,0.14078551530838013,0.11220572888851166,0.13472723960876465,0.10562274605035782,0.1288258135318756,0.09939584136009216,0.12334570288658142,0.09371078014373779,0.11740842461585999,0.08796590566635132,0.11085216701030731,0.08191831409931183,0.10430294275283813,0.0758076012134552,0.09747365862131119,0.06946639716625214,0.09014172852039337,0.06285040080547333,0.08244733512401581,0.05589297041296959,0.0747237503528595,0.0486995093524456,0.06748583912849426,0.04179181903600693,0.06031538173556328,0.034901268780231476,0.05304372310638428,0.02791520208120346,0.04633215442299843,0.021517589688301086,0.039766762405633926,0.015343964099884033,0.03282143175601959,0.008753910660743713,0.0258503258228302,0.0020630136132240295,0.01878304034471512,-0.004641629755496979,0.011329539120197296,-0.01166088879108429,0.003378555178642273,-0.019190803170204163,-0.005097053945064545,-0.027227118611335754,-0.013719238340854645,-0.03537680208683014,-0.022374339401721954,-0.043488986790180206,-0.03137648105621338,-0.05187668651342392,-0.04053819179534912,-0.0604567751288414,-0.049499429762363434,-0.06884048134088516,-0.05849288031458855,-0.07712171971797943,-0.06773670017719269,-0.08554264158010483,-0.07693895697593689,-0.09397900104522705,-0.08596764504909515,-0.10236804187297821,-0.09495700895786285,-0.11071249842643738,-0.10388500988483429,-0.11891487240791321,-0.11278313398361206,-0.1271471083164215,-0.12161137163639069,-0.1353926956653595,-0.1302194446325302,-0.14331747591495514,-0.13882678747177124,-0.15112300217151642,-0.14760717749595642,-0.15909935534000397,-0.1563674807548523,-0.1669865846633911,-0.1650761067867279,-0.17466247081756592,-0.1739044189453125,-0.1824301928281784,-0.18288172781467438,-0.19044317305088043,-0.19180621206760406,-0.1984090507030487,-0.2006174921989441,-0.2061910629272461,-0.2095491737127304,-0.2141258418560028,-0.2184688150882721,-0.22216469049453735,-0.22707563638687134,-0.2299291044473648,-0.23560881614685059,-0.23756471276283264,-0.24421198666095734,-0.24524550139904022,-0.2526945173740387,-0.252858430147171,-0.2611212730407715,-0.2604433596134186,-0.26948052644729614,-0.2679097056388855,-0.27768683433532715,-0.2752090096473694,-0.2859497666358948,-0.28264039754867554,-0.29414576292037964,-0.29005101323127747,-0.30205854773521423,-0.2971515655517578,-0.31004756689071655,-0.30430930852890015,-0.3181053400039673,-0.3115376830101013,-0.32590630650520325,-0.31850019097328186,-0.33365267515182495,-0.32542774081230164,-0.3414079546928406,-0.33242523670196533,-0.34893766045570374,-0.33921313285827637,-0.3563483953475952,-0.3458234965801239,-0.36362698674201965,-0.35227999091148376,-0.3707098960876465,-0.3586232364177704,-0.37783506512641907,-0.36508598923683167,-0.3848576247692108,-0.3714151680469513,-0.3916032016277313,-0.3774167597293854,-0.3983784317970276,-0.38348257541656494,-0.4050813317298889,-0.38953205943107605,-0.4114915728569031,-0.3952938914299011,-0.41792139410972595,-0.40107113122940063,-0.4242797791957855,-0.4067872166633606,-0.430213063955307,-0.4120813012123108,-0.4359695613384247,-0.41720691323280334,-0.4416967034339905,-0.4222995638847351,-0.44718682765960693,-0.42709559202194214,-0.45248913764953613,-0.43165889382362366,-0.45770472288131714,-0.4361976385116577,-0.4627995789051056,-0.4406948685646057,-0.467723548412323,-0.4449848532676697,-0.4723993241786957,-0.4489439129829407,-0.47690653800964355,-0.4527551233768463,-0.4812902808189392,-0.4565407931804657,-0.48539483547210693,-0.4600854218006134,-0.48930904269218445,-0.4634152054786682,-0.4931594729423523,-0.4667051434516907,-0.49675899744033813,-0.46982237696647644,-0.5000807046890259,-0.4727060794830322,-0.5032362341880798,-0.47544509172439575,-0.5061864256858826,-0.4780427813529968,-0.5089499354362488,-0.4805164635181427,-0.5115028023719788,-0.4827759861946106,-0.513809084892273,-0.48477935791015625,-0.5159985423088074,-0.48671194911003113,-0.5179522633552551,-0.4884487986564636,-0.5195164084434509,-0.4897882044315338,-0.520979642868042,-0.4910416007041931,-0.5224595069885254,-0.492371529340744,-0.5237541198730469,-0.4935266375541687,-0.5248284339904785,-0.4944034814834595,-0.5256340503692627,-0.4950096309185028,-0.5261802077293396,-0.4954404830932617,-0.5266210436820984,-0.4957996904850006,-0.5268115997314453,-0.4958656430244446,-0.5266780257225037,-0.4956287741661072,-0.5264650583267212,-0.4954100549221039,-0.526107668876648,-0.495071142911911,-0.5254742503166199,-0.49441009759902954,-0.5246858596801758,-0.4936348795890808,-0.523658812046051,-0.4927383065223694,-0.5223727226257324,-0.4916102886199951,-0.5210084915161133,-0.4903441369533539,-0.5194172263145447,-0.4888645112514496,-0.5174907445907593,-0.4871516525745392,-0.5154325366020203,-0.48535043001174927,-0.5132569074630737,-0.4833911061286926,-0.5109375715255737,-0.4812907576560974,-0.5085335969924927,-0.47917601466178894,-0.5059165954589844,-0.4768742620944977,-0.5030509233474731,-0.4742845892906189,-0.500028669834137,-0.4715332090854645,-0.4968000054359436,-0.46862754225730896,-0.49335336685180664,-0.46553701162338257,-0.4896450638771057,-0.46218371391296387,-0.48560720682144165,-0.4585230052471161,-0.4814741313457489,-0.4548163115978241,-0.47733908891677856,-0.45113861560821533,-0.47292858362197876,-0.44719982147216797,-0.46825575828552246,-0.4430288076400757,-0.46353116631507874,-0.43884843587875366,-0.4587159752845764,-0.43462270498275757,-0.45373016595840454,-0.43027472496032715,-0.44851088523864746,-0.4257199764251709,-0.4430246949195862,-0.42090100049972534,-0.4373963177204132,-0.41597795486450195,-0.43161025643348694,-0.4109745919704437,-0.42553985118865967,-0.40570569038391113,-0.4193096160888672,-0.4002203345298767,-0.41303032636642456,-0.39467763900756836,-0.4066188335418701,-0.38908135890960693,-0.4000610113143921,-0.38337835669517517,-0.3933746814727783,-0.37749603390693665,-0.3865426182746887,-0.37144654989242554,-0.3795803189277649,-0.36532968282699585,-0.37244653701782227,-0.3590787649154663,-0.36512744426727295,-0.3526001274585724,-0.35773417353630066,-0.3460187315940857,-0.3503147065639496,-0.339443564414978,-0.3428031802177429,-0.3328033685684204,-0.33511918783187866,-0.32598936557769775,-0.3272414207458496,-0.318989634513855,-0.319307416677475,-0.31192755699157715,-0.3114268183708191,-0.30487531423568726,-0.3034377694129944,-0.29770565032958984,-0.2951779365539551,-0.29031598567962646,-0.28677380084991455,-0.2827863097190857,-0.2784140706062317,-0.27522894740104675,-0.2700554132461548,-0.26765698194503784,-0.26152825355529785,-0.2599930167198181,-0.25285422801971436,-0.2521980106830597,-0.24422062933444977,-0.2443566769361496,-0.2356354296207428,-0.23653943836688995,-0.22694560885429382,-0.2287016212940216,-0.218154639005661,-0.22078363597393036,-0.20938779413700104,-0.2128010392189026,-0.20065683126449585,-0.20482154190540314,-0.19187307357788086,-0.19685180485248566,-0.18300488591194153,-0.18880067765712738,-0.17411771416664124,-0.1806454360485077,-0.16525717079639435,-0.17248183488845825,-0.15638071298599243,-0.1643337905406952,-0.14744843542575836,-0.15611480176448822,-0.13846251368522644,-0.14778637886047363,-0.12942667305469513,-0.1394030600786209,-0.12038421630859375,-0.13102714717388153,-0.11140423268079758,-0.12266922742128372,-0.10246630012989044,-0.11430176347494125,-0.09349130839109421,-0.10590529441833496,-0.08449366688728333,-0.09749168902635574,-0.07557141780853271,-0.08910224586725235,-0.06675387918949127,-0.0807742029428482,-0.057972121983766556,-0.07248006016016006,-0.0491742342710495,-0.06414788961410522,-0.04038545489311218,-0.05578262731432915,-0.031651221215724945,-0.04744748771190643,-0.023004386574029922,-0.03917189687490463,-0.014445883221924305,-0.03089878335595131,-0.005930168554186821,-0.022583838552236557,0.002562102861702442,-0.014277668669819832,0.010952816344797611,-0.0060509974136948586,0.01916518434882164,0.002093313727527857,0.027261536568403244,0.010179467499256134,0.03536767512559891,0.01820770837366581,0.043512094765901566,0.026199307292699814,0.05165395140647888,0.03420865908265114,0.059800952672958374,0.04223240911960602,0.06799114495515823,0.05020764097571373,0.0762426033616066,0.05816218629479408,0.08457324653863907,0.06622572243213654,0.09293084591627121,0.07437774538993835,0.10108152031898499,0.08233530074357986,0.10879091918468475,0.08987627178430557,0.11614792048931122,0.09715694189071655,0.1234435960650444,0.10448165237903595,0.13069337606430054,0.11183199286460876,0.137596994638443,0.11889855563640594,0.1440371870994568,0.12557530403137207,0.15028083324432373,0.13212789595127106,0.15657037496566772,0.13878726959228516,0.1628297120332718,0.1454436331987381,0.16891765594482422,0.15190395712852478,0.1749131679534912,0.15824180841445923,0.1809864193201065,0.16467547416687012,0.18716280162334442,0.17122480273246765,0.19334079325199127,0.17770837247371674,0.19944238662719727,0.18403005599975586,0.2054712474346161,0.19027374684810638,0.21147370338439941,0.1965131163597107,0.21746426820755005,0.202686607837677,0.22337956726551056,0.2087024450302124,0.22914519906044006,0.2145642787218094,0.23477570712566376,0.22034037113189697,0.2403235286474228,0.22606170177459717,0.24574553966522217,0.23169220983982086,0.25093889236450195,0.23718631267547607,0.25590190291404724,0.242568701505661,0.2607375681400299,0.24794656038284302,0.26550406217575073,0.25342273712158203,0.27017199993133545,0.25899767875671387,0.27470505237579346,0.2645891606807709,0.27907735109329224,0.27013954520225525,0.28324833512306213,0.27565181255340576,0.2872246503829956,0.28112611174583435,0.2910986542701721,0.28652048110961914,0.29492753744125366,0.2917826473712921,0.2986379861831665,0.2968660891056061,0.30215686559677124,0.3017169237136841,0.30556589365005493,0.306292861700058,0.30898672342300415,0.3105788826942444,0.31235742568969727,0.31453004479408264,0.31548088788986206,0.3180347979068756,0.31830263137817383,0.3210201859474182,0.3209911286830902,0.32356560230255127,0.32369938492774963,0.32582664489746094,0.3263929486274719,0.3278847932815552,0.3289925754070282,0.32976004481315613,0.33154329657554626,0.33151277899742126,0.33410102128982544,0.33320218324661255,0.3365638256072998,0.3347967565059662,0.3387991189956665,0.3362775146961212,0.3408724367618561,0.33779776096343994,0.34296247363090515,0.33957409858703613,0.3450830578804016,0.34163421392440796,0.34706878662109375,0.3438357412815094,0.348814994096756,0.34612223505973816,0.35035955905914307,0.34857824444770813,0.3517402708530426,0.3512190878391266,0.35293614864349365,0.35391637682914734,0.35395580530166626,0.3565821945667267,0.35486266016960144,0.35927093029022217,0.35572633147239685,0.36204156279563904,0.356637567281723,0.3648494482040405,0.3577037751674652,0.36761653423309326,0.3589226007461548,0.3702812194824219,0.3601362705230713,0.37273502349853516,0.3612326383590698,0.37484031915664673,0.36232203245162964,0.37658295035362244,0.36361539363861084,0.37812894582748413,0.3651997447013855,0.3796727657318115,0.3670227825641632,0.3812750577926636,0.3690119981765747,0.38286787271499634,0.3711033761501312,0.3843686878681183,0.37321075797080994,0.3857674300670624,0.37523677945137024,0.38710513710975647,0.37706899642944336,0.3883553445339203,0.37854859232902527,0.3893587589263916,0.37954261898994446,0.38997459411621094,0.3800737261772156,0.3902926743030548,0.3802680969238281,0.39055025577545166,0.38013553619384766,0.39079850912094116,0.37950754165649414,0.3908044993877411,0.3782094717025757,0.3903343379497528,0.3761543035507202,0.389335036277771,0.3732477128505707,0.3877517879009247,0.3694034218788147,0.38540199398994446,0.36476823687553406,0.38222476840019226,0.3597945272922516,0.3785027265548706,0.35500597953796387,0.37467244267463684,0.3508549928665161,0.371074914932251,0.3479050397872925,0.3680570721626282,0.3469204604625702,0.3661377429962158,0.34853217005729675,0.3658168911933899,0.3528748154640198,0.36726272106170654,0.35964274406433105,0.3702837824821472,0.36830464005470276,0.37445157766342163,0.37805625796318054,0.37910306453704834,0.38772836327552795,0.3833930492401123,0.3960375189781189,0.38656750321388245,0.4019690752029419,0.3881657123565674,0.4048866331577301,0.38796383142471313,0.40447235107421875,0.38597115874290466,0.40075889229774475,0.3825986981391907,0.394109308719635,0.3785688579082489,0.3850228786468506,0.3744800388813019,0.3740721046924591,0.37065625190734863,0.3620791435241699,0.3674893379211426,0.3500944972038269,0.3655659258365631,0.33906349539756775,0.3652535676956177,0.3297199308872223,0.36647671461105347,0.3227653205394745,0.36900168657302856,0.3185165226459503,0.372326135635376,0.31588882207870483,0.37477192282676697,0.31177088618278503,0.37278440594673157,0.3019689917564392,0.36187323927879333,0.2825281023979187,0.3380492031574249,0.25039106607437134,0.29856887459754944,0.20400939881801605,0.24250024557113647,0.14459776878356934,0.17187324166297913,0.07684291154146194,0.09231474250555038,0.00776814017444849,0.011855741031467915,-0.05500537157058716,-0.060879603028297424,-0.1035246029496193,-0.1170259341597557,-0.12914299964904785,-0.14721639454364777,-0.12436288595199585,-0.14353066682815552,-0.08681271970272064,-0.1035139262676239,-0.021452229470014572,-0.032334811985492706,0.06164011359214783,0.05947559326887131,0.15169209241867065,0.16042886674404144,0.2398754358291626,0.2607254385948181,0.3191983103752136,0.3522929549217224,0.3837544322013855,0.42822763323783875,0.4290175437927246,0.4831486642360687,0.4528612196445465,0.514176607131958,0.4562394618988037,0.521668553352356,0.44294753670692444,0.5091447830200195,0.41847264766693115,0.4822106659412384,0.3884967267513275,0.44692263007164,0.3579346537590027,0.40867704153060913,0.3308313190937042,0.37211814522743225,0.31042635440826416,0.34127500653266907,0.2987293004989624,0.31904998421669006,0.2959997057914734,0.30647990107536316,0.30091267824172974,0.3027843236923218,0.3113101124763489,0.306190550327301,0.3247837424278259,0.31460651755332947,0.3388565182685852,0.32574155926704407,0.3511863946914673,0.33718350529670715,0.35997089743614197,0.34681347012519836,0.3642255961894989,0.3532503843307495,0.3637520968914032,0.35595330595970154,0.3590213358402252,0.3550752103328705,0.351114958524704,0.35131362080574036,0.3415455222129822,0.3457548916339874,0.3318597078323364,0.3396145701408386,0.32324835658073425,0.33392757177352905,0.31639763712882996,0.32932248711586,0.3115268051624298,0.3259360194206238,0.3084493577480316,0.32346779108047485,0.3066614270210266,0.3213740587234497,0.3055570721626282,0.3191356658935547,0.30470365285873413,0.3164435923099518,0.3039399981498718,0.313181608915329,0.30320900678634644,0.30928266048431396,0.3023843467235565,0.3046846091747284,0.3013804256916046,0.2994810938835144,0.3003881573677063,0.29404520988464355,0.2997879981994629,0.28885146975517273,0.2997121810913086,0.28411442041397095,0.2998063862323761,0.2796758711338043,0.2995368540287018,0.2752785384654999,0.2986152470111847,0.2708359360694885,0.2969832122325897,0.2663668990135193,0.29451480507850647,0.26180583238601685,0.2909870147705078,0.25703945755958557,0.2863495647907257,0.25208550691604614,0.2808309495449066,0.24710004031658173,0.27474072575569153,0.2422293871641159,0.26830995082855225,0.23756276071071625,0.261757493019104,0.23320716619491577,0.25537675619125366,0.22930194437503815,0.2494843453168869,0.22595880925655365,0.24431155622005463,0.22322537004947662,0.23989641666412354,0.2210220843553543,0.235987588763237,0.2190142273902893,0.2321094125509262,0.21664059162139893,0.22785964608192444,0.2134196013212204,0.2231336086988449,0.20920293033123016,0.21797817945480347,0.20404097437858582,0.2123415470123291,0.19792068004608154,0.20616373419761658,0.19082854688167572,0.19966572523117065,0.18301355838775635,0.19332806766033173,0.1749725341796875,0.18755415081977844,0.16715316474437714,0.18249043822288513,0.15979434549808502,0.1781284064054489,0.15299631655216217,0.17435649037361145,0.14673756062984467,0.1708746999502182,0.1408073604106903,0.16724835336208344,0.13490109145641327,0.16312113404273987,0.1288263201713562,0.1582898050546646,0.12252052128314972,0.1526111662387848,0.11592620611190796,0.14601793885231018,0.109025739133358,0.1386347860097885,0.10197537392377853,0.13071639835834503,0.09501562267541885,0.12245433777570724,0.08824774622917175,0.11396884173154831,0.0816502720117569,0.10543704777956009,0.0752602368593216,0.09703152626752853,0.06912031024694443,0.08874747902154922,0.06306732445955276,0.0804801806807518,0.05680617690086365,0.07224872708320618,0.050199929624795914,0.06413860619068146,0.04326504096388817,0.056058719754219055,0.03589431941509247,0.04781285300850868,0.02787492424249649,0.03942457586526871,0.019239455461502075,0.031131481751799583,0.010328397154808044,0.023022381588816643,0.001407034695148468,0.014940470457077026,-0.007533639669418335,0.006808610633015633,-0.016492079943418503,-0.0012192577123641968,-0.025234082713723183,-0.009038610383868217,-0.03353056684136391,-0.016785575076937675,-0.041423678398132324,-0.024613576009869576,-0.04908459633588791,-0.03248251974582672,-0.056559376418590546,-0.04031608998775482,-0.0638224333524704,-0.04819875210523605,-0.07095935940742493,-0.05626891925930977,-0.07813222706317902,-0.06454124301671982,-0.08543310314416885,-0.0729595273733139,-0.09288822114467621,-0.0815194621682167,-0.10053624212741852,-0.09023560583591461,-0.10840082168579102,-0.09907303005456924,-0.11644048988819122,-0.1079840436577797,-0.12459170818328857,-0.11693437397480011,-0.1328069120645523,-0.12586098909378052,-0.14102135598659515,-0.1347116231918335,-0.14916948974132538,-0.14354576170444489,-0.15726426243782043,-0.15246544778347015,-0.16536462306976318,-0.16142883896827698,-0.1734473705291748,-0.17029942572116852,-0.18144424259662628,-0.17903432250022888,-0.18932628631591797,-0.18777750432491302,-0.19719542562961578,-0.1966264843940735,-0.2051265984773636,-0.20549310743808746,-0.21306931972503662,-0.2142835110425949,-0.22096262872219086,-0.2230629175901413,-0.2288345843553543,-0.23193064332008362,-0.23672154545783997,-0.24084587395191193,-0.24458253383636475,-0.24968738853931427,-0.2523565888404846,-0.25840240716934204,-0.26002565026283264,-0.2669919431209564,-0.2675635516643524,-0.2754093110561371,-0.2748936712741852,-0.2835761606693268,-0.28195685148239136,-0.2914767563343048,-0.2887730896472931,-0.29917678236961365,-0.2954060733318329,-0.3067672550678253,-0.30192068219184875,-0.31432220339775085,-0.30839264392852783,-0.32188379764556885,-0.31489381194114685,-0.3294561803340912,-0.3214408755302429,-0.3370295464992523,-0.328012615442276,-0.3446136713027954,-0.33462363481521606,-0.35221201181411743,-0.34130868315696716,-0.3597670793533325,-0.34802311658859253,-0.36719390749931335,-0.3546490967273712,-0.3744781017303467,-0.36113351583480835,-0.38167330622673035,-0.36753392219543457,-0.3887888789176941,-0.37389105558395386,-0.39575546979904175,-0.38014477491378784,-0.40252387523651123,-0.38622432947158813,-0.4091200828552246,-0.39214345812797546,-0.4155809283256531,-0.3979530334472656,-0.42190879583358765,-0.40365856885910034,-0.4280899465084076,-0.40922433137893677,-0.43409258127212524,-0.4146045446395874,-0.43986040353775024,-0.4197533428668976,-0.44537705183029175,-0.42464694380760193,-0.4506929814815521,-0.4293072521686554,-0.4558223783969879,-0.43376216292381287,-0.4606941044330597,-0.43799930810928345,-0.4652884602546692,-0.442005455493927,-0.4697306454181671,-0.4458353519439697,-0.4741453230381012,-0.44958731532096863,-0.47850847244262695,-0.45330822467803955,-0.4827500581741333,-0.4569667875766754,-0.4869179129600525,-0.46052834391593933,-0.4911094307899475,-0.4640166759490967,-0.49528059363365173,-0.4674590229988098,-0.49924901127815247,-0.4707924723625183,-0.5029004216194153,-0.4738979935646057,-0.5062958002090454,-0.4767228066921234,-0.5095095038414001,-0.47928720712661743,-0.5124505758285522,-0.4815814197063446,-0.5149758458137512,-0.48357388377189636,-0.5171502828598022,-0.48531922698020935,-0.5192136764526367,-0.4869314432144165,-0.5212603807449341,-0.488446980714798,-0.5231381058692932,-0.48984047770500183,-0.52472984790802,-0.4911395013332367,-0.5261441469192505,-0.4923926889896393,-0.527509868144989,-0.49356329441070557,-0.5287466049194336,-0.49457594752311707,-0.5296869277954102,-0.49541616439819336,-0.5303183197975159,-0.49609023332595825,-0.5307528972625732,-0.49656811356544495,-0.5310207605361938,-0.4968433976173401,-0.5310498476028442,-0.496968537569046,-0.530831515789032,-0.49698033928871155,-0.5304620265960693,-0.49686378240585327,-0.5299873352050781,-0.4966042637825012,-0.5293381810188293,-0.4962059259414673,-0.5284557342529297,-0.49565649032592773,-0.5273529887199402,-0.4949106276035309,-0.526007354259491,-0.4938989281654358,-0.5243396759033203,-0.49257004261016846,-0.5223512649536133,-0.49095845222473145,-0.5201387405395508,-0.48915889859199524,-0.5177398324012756,-0.48719456791877747,-0.5151124596595764,-0.4850119352340698,-0.5122785568237305,-0.482637494802475,-0.5093286633491516,-0.4801918864250183,-0.5062897801399231,-0.4777042865753174,-0.5031248927116394,-0.475080281496048,-0.49982544779777527,-0.4722902476787567,-0.4963882863521576,-0.46941402554512024,-0.49277254939079285,-0.46646642684936523,-0.48896169662475586,-0.46334540843963623,-0.48497438430786133,-0.45997869968414307,-0.48077625036239624,-0.4563928246498108,-0.4763081669807434,-0.45262888073921204,-0.47160157561302185,-0.4486851990222931,-0.4667295813560486,-0.4445449113845825,-0.46167927980422974,-0.4402090609073639,-0.45640772581100464,-0.4357064366340637,-0.45095518231391907,-0.43107399344444275,-0.4453774094581604,-0.4263157844543457,-0.43965455889701843,-0.4214092791080475,-0.43376171588897705,-0.4163581430912018,-0.427729070186615,-0.4111863970756531,-0.42157092690467834,-0.40588706731796265,-0.41525986790657043,-0.40044105052948,-0.4087994396686554,-0.3948689103126526,-0.4022263288497925,-0.38919609785079956,-0.3955446183681488,-0.38339942693710327,-0.3887292444705963,-0.3774532377719879,-0.3817715644836426,-0.37138763070106506,-0.37467828392982483,-0.3652406632900238,-0.36746498942375183,-0.3589944839477539,-0.36015987396240234,-0.35260990262031555,-0.3527684509754181,-0.3460889160633087,-0.3452497124671936,-0.33946171402931213,-0.3375682830810547,-0.3327275514602661,-0.3297394812107086,-0.32584986090660095,-0.3218045234680176,-0.3188246786594391,-0.31380194425582886,-0.31171417236328125,-0.3057512938976288,-0.3045653700828552,-0.29762595891952515,-0.29733529686927795,-0.28938376903533936,-0.28996893763542175,-0.2810479402542114,-0.28250637650489807,-0.2726821303367615,-0.27501970529556274,-0.2642843723297119,-0.26749780774116516,-0.2558106482028961,-0.25989100337028503,-0.24728626012802124,-0.25220686197280884,-0.23876431584358215,-0.24447709321975708,-0.23021483421325684,-0.23670168220996857,-0.22157728672027588,-0.22887814044952393,-0.21286465227603912,-0.221002995967865,-0.20411089062690735,-0.21303793787956238,-0.19533251225948334,-0.20500221848487854,-0.1864926666021347,-0.19693033397197723,-0.1776198148727417,-0.18884466588497162,-0.16875708103179932,-0.1807192862033844,-0.15989913046360016,-0.1725713461637497,-0.15102531015872955,-0.16447541117668152,-0.14213839173316956,-0.15643048286437988,-0.13326241075992584,-0.1483512669801712,-0.12442145496606827,-0.1402113437652588,-0.11559772491455078,-0.13205887377262115,-0.10671859979629517,-0.12390013784170151,-0.09771277010440826,-0.11567951738834381,-0.08856542408466339,-0.10734037309885025,-0.07931990921497345,-0.09885535389184952,-0.07004343718290329,-0.09027108550071716,-0.06076359748840332,-0.08171606063842773,-0.051445167511701584,-0.07325153797864914,-0.042089834809303284,-0.0647740513086319,-0.03280926123261452,-0.056217558681964874,-0.02369919791817665,-0.04774121567606926,-0.014719998463988304,-0.03951798379421234,-0.005831114947795868,-0.031474702060222626,0.0028619803488254547,-0.023466356098651886,0.011266704648733139,-0.015539433807134628,0.019486743956804276,-0.007796190679073334,0.02764134854078293,-0.0002129673957824707,0.035642001777887344,0.007213525474071503,0.043391402810811996,0.014408908784389496,0.051025353372097015,0.021428555250167847,0.05867929756641388,0.028416655957698822,0.0662369579076767,0.03535858541727066,0.07358866930007935,0.042189568281173706,0.08084963262081146,0.0490066260099411,0.08807537704706192,0.05589109659194946,0.09510941803455353,0.06279647350311279,0.10187757015228271,0.06977587193250656,0.10846224427223206,0.07693607360124588,0.11485867202281952,0.08415903151035309,0.12102552503347397,0.09127787500619888,0.12707127630710602,0.09834423661231995,0.13310644030570984,0.10538395494222641,0.1391477882862091,0.11228538304567337,0.14532488584518433,0.11914981156587601,0.15184150636196136,0.12623929977416992,0.15870630741119385,0.13356147706508636,0.16585108637809753,0.14108172059059143,0.17339038848876953,0.1491435021162033,0.1814194768667221,0.15807709097862244,0.18974897265434265,0.16768202185630798,0.198135644197464,0.17754817008972168,0.20657123625278473,0.18749697506427765,0.2151017040014267,0.1973915696144104,0.22352728247642517,0.20688694715499878,0.2315070927143097,0.21554161608219147,0.23887209594249725,0.22295071184635162,0.24563157558441162,0.22886541485786438,0.25171032547950745,0.23340195417404175,0.2569041848182678,0.23695433139801025,0.261075884103775,0.23977386951446533,0.26421427726745605,0.24187617003917694,0.2663898468017578,0.24339160323143005,0.2677948474884033,0.24464905261993408,0.26866623759269714,0.24582798779010773,0.2691427767276764,0.24681979417800903,0.26940131187438965,0.24747145175933838,0.26977843046188354,0.2477508783340454,0.2705434560775757,0.24775663018226624,0.27185192704200745,0.24776995182037354,0.2739870250225067,0.2481580376625061,0.27716192603111267,0.2491474449634552,0.28118157386779785,0.25096777081489563,0.28582748770713806,0.25415366888046265,0.29126155376434326,0.2592353820800781,0.29756784439086914,0.2661699652671814,0.30439600348472595,0.274442195892334,0.3113973140716553,0.2835386097431183,0.3184615671634674,0.2930457592010498,0.3254229426383972,0.3025587797164917,0.33204150199890137,0.3116576075553894,0.33815014362335205,0.3198394179344177,0.3434916138648987,0.3266984820365906,0.34775760769844055,0.3323238790035248,0.35095351934432983,0.33714330196380615,0.35330039262771606,0.34139373898506165,0.3547760844230652,0.3451768755912781,0.35519939661026,0.34872883558273315,0.354733943939209,0.3521868586540222,0.35391494631767273,0.35551464557647705,0.3531007468700409,0.3588149845600128,0.35216692090034485,0.362111359834671,0.3509524166584015,0.3649575114250183,0.3497481942176819,0.3669162392616272,0.34890446066856384,0.3680737018585205,0.34819650650024414,0.36864179372787476,0.34714847803115845,0.3686122000217438,0.34571465849876404,0.36799123883247375,0.34409332275390625,0.36683329939842224,0.34221574664115906,0.36515533924102783,0.33987826108932495,0.3631545305252075,0.33708736300468445,0.36112385988235474,0.33407649397850037,0.3591340482234955,0.33116063475608826,0.35727792978286743,0.3285318911075592,0.35586118698120117,0.3262489140033722,0.35493436455726624,0.3246261179447174,0.3543103337287903,0.324245810508728,0.3542410731315613,0.3252984285354614,0.35525748133659363,0.3275124430656433,0.35742220282554626,0.3308638334274292,0.3604626953601837,0.33558639883995056,0.3642706573009491,0.34152770042419434,0.3687928318977356,0.34815678000450134,0.37390872836112976,0.3549131751060486,0.3794596493244171,0.36118724942207336,0.3849322199821472,0.3664550185203552,0.3894926607608795,0.3704560697078705,0.39263832569122314,0.37284305691719055,0.3941919207572937,0.3731362521648407,0.39371824264526367,0.3713011145591736,0.39081722497940063,0.36774566769599915,0.3857673704624176,0.36292165517807007,0.3792005181312561,0.35753628611564636,0.37164250016212463,0.35247477889060974,0.3638255000114441,0.34811195731163025,0.3568190634250641,0.34460335969924927,0.35156095027923584,0.342583566904068,0.3486330211162567,0.3424295485019684,0.3483543395996094)\n\
+\n\
+,\n\
+\n\
+new Array(0.3436359763145447,0.3507392704486847,0.3458445370197296,0.35553568601608276,0.349070280790329,0.36218830943107605,0.3529009521007538,0.36989903450012207,0.3567352890968323,0.3776802718639374,0.3602409362792969,0.3845756947994232,0.3624301850795746,0.38984495401382446,0.36204901337623596,0.3930245339870453,0.35958513617515564,0.39386096596717834,0.35623884201049805,0.39222022891044617,0.35106125473976135,0.3883177638053894,0.34256747364997864,0.38292935490608215,0.3323298692703247,0.3768877685070038,0.323260098695755,0.37063145637512207,0.3156992495059967,0.3646821975708008,0.3084883987903595,0.35974499583244324,0.3018919825553894,0.35562121868133545,0.29641395807266235,0.3507556915283203,0.2904132902622223,0.34314075112342834,0.28101786971092224,0.33097949624061584,0.26616284251213074,0.31287649273872375,0.2446533590555191,0.2879803478717804,0.21516236662864685,0.255038857460022,0.17608602344989777,0.21176795661449432,0.12704282999038696,0.15780548751354218,0.07108964771032333,0.09810417890548706,0.014752926304936409,0.040358446538448334,-0.035008858889341354,-0.010328201577067375,-0.07317540794610977,-0.05101863294839859,-0.09570048749446869,-0.07671763747930527,-0.09804818034172058,-0.08093484491109848,-0.0764317587018013,-0.06037058308720589,-0.03042197786271572,-0.01648930460214615,0.03596554324030876,0.0465453676879406,0.11531345546245575,0.12299899756908417,0.1989039182662964,0.20528899133205414,0.27868446707725525,0.28483620285987854,0.34824496507644653,0.3541155457496643,0.40280720591545105,0.40809503197669983,0.43914052844047546,0.4442239999771118,0.45606517791748047,0.46168196201324463,0.4549923837184906,0.4612167477607727,0.43956613540649414,0.4456948935985565,0.41455766558647156,0.41990524530410767,0.3848838806152344,0.3890814185142517,0.35493040084838867,0.35762137174606323,0.32800400257110596,0.3289647400379181,0.30628281831741333,0.3057825565338135,0.291183739900589,0.2896957993507385,0.28327441215515137,0.2809591591358185,0.2818855345249176,0.2787399888038635,0.2854923605918884,0.28177735209465027,0.2925439476966858,0.2886710464954376,0.30161160230636597,0.2977151870727539,0.31119534373283386,0.30709391832351685,0.31999343633651733,0.31554341316223145,0.3271985352039337,0.3224572539329529,0.3323807716369629,0.3273491859436035,0.3353782892227173,0.32981887459754944,0.3363034129142761,0.33001670241355896,0.33541586995124817,0.32849812507629395,0.33304548263549805,0.32565680146217346,0.32961732149124146,0.3217451870441437,0.3255370557308197,0.31720080971717834,0.3211156129837036,0.31249549984931946,0.3166646659374237,0.30782362818717957,0.3124258816242218,0.30318742990493774,0.3084467351436615,0.29864123463630676,0.304767370223999,0.29430586099624634,0.3015163242816925,0.290192186832428,0.29865914583206177,0.28612279891967773,0.2959946393966675,0.28194108605384827,0.29342013597488403,0.27772849798202515,0.2908669412136078,0.273634672164917,0.2881903052330017,0.26963305473327637,0.2853950262069702,0.2656824290752411,0.2825847864151001,0.2619113028049469,0.27963492274284363,0.2584269642829895,0.2764520049095154,0.2552037239074707,0.2733556032180786,0.25225701928138733,0.27060335874557495,0.24962079524993896,0.2679532766342163,0.24718371033668518,0.26519572734832764,0.24481931328773499,0.26249805092811584,0.2424980103969574,0.25986188650131226,0.2400670051574707,0.25692054629325867,0.23722389340400696,0.2534322142601013,0.23384401202201843,0.2493741512298584,0.2300342619419098,0.24467289447784424,0.2258572280406952,0.23934808373451233,0.22128351032733917,0.23365342617034912,0.21636269986629486,0.22778062522411346,0.21126005053520203,0.22179719805717468,0.2061673104763031,0.21593421697616577,0.20118600130081177,0.2105105221271515,0.19625036418437958,0.2056254893541336,0.19125910103321075,0.20119091868400574,0.1862357258796692,0.1970648467540741,0.18117842078208923,0.19303493201732635,0.17590683698654175,0.1889193207025528,0.17028747498989105,0.18464966118335724,0.16439872980117798,0.18007981777191162,0.1582980751991272,0.17496532201766968,0.15188351273536682,0.16928313672542572,0.14509545266628265,0.1632496416568756,0.13801680505275726,0.1569652110338211,0.13074497878551483,0.1503717601299286,0.1233326643705368,0.1435215175151825,0.11582323908805847,0.1365867406129837,0.10827413201332092,0.12966367602348328,0.10077520459890366,0.12275254726409912,0.0934087336063385,0.11584542691707611,0.08619605004787445,0.10892727971076965,0.07917298376560211,0.10195941478013992,0.07243507355451584,0.09491272270679474,0.06601165235042572,0.08778388798236847,0.05983836576342583,0.0805385559797287,0.05387263000011444,0.07305917888879776,0.04803667962551117,0.06523420661687851,0.04212284833192825,0.057080116122961044,0.03594566509127617,0.04865209758281708,0.029429901391267776,0.039905570447444916,0.022460641339421272,0.03080851025879383,0.014893142506480217,0.02146265283226967,0.006716256495565176,0.011982964351773262,-0.001997239887714386,0.0024438141845166683,-0.011165347881615162,-0.007014747243374586,-0.020593587309122086,-0.016242871060967445,-0.030016787350177765,-0.025171050801873207,-0.039254624396562576,-0.03368787094950676,-0.04812806844711304,-0.041668251156806946,-0.056405309587717056,-0.04917296767234802,-0.0640219897031784,-0.056338705122470856,-0.07114075869321823,-0.06319992244243622,-0.07793767005205154,-0.06988830864429474,-0.08454476296901703,-0.07669203728437424,-0.09115692973136902,-0.08373631536960602,-0.09804609417915344,-0.09103355556726456,-0.10550685971975327,-0.09883319586515427,-0.11369960010051727,-0.10741837322711945,-0.12249250710010529,-0.11673317849636078,-0.1316787600517273,-0.1266242116689682,-0.14125868678092957,-0.1370970606803894,-0.15116144716739655,-0.1480569839477539,-0.16098646819591522,-0.1592252403497696,-0.1704384982585907,-0.17041613161563873,-0.17959284782409668,-0.18150544166564941,-0.18844667077064514,-0.19222383201122284,-0.1967857927083969,-0.20232486724853516,-0.20461004972457886,-0.21179530024528503,-0.21210674941539764,-0.2207169234752655,-0.21930965781211853,-0.22912082076072693,-0.2262527346611023,-0.23705273866653442,-0.23312364518642426,-0.244648739695549,-0.23997023701667786,-0.25211477279663086,-0.24670550227165222,-0.2596213221549988,-0.2534589469432831,-0.2672247886657715,-0.2604459822177887,-0.27498531341552734,-0.26765093207359314,-0.2830657362937927,-0.2750389277935028,-0.29154103994369507,-0.2827794849872589,-0.3002829849720001,-0.29098790884017944,-0.3091878592967987,-0.29958197474479675,-0.31826746463775635,-0.3085162043571472,-0.32745054364204407,-0.31784147024154663,-0.336588978767395,-0.32749396562576294,-0.34562060236930847,-0.3372446596622467,-0.35447514057159424,-0.3468747138977051,-0.36298662424087524,-0.35627293586730957,-0.3710893392562866,-0.3653349280357361,-0.37888044118881226,-0.3738906681537628,-0.3864019513130188,-0.38183271884918213,-0.3935663104057312,-0.38917502760887146,-0.40029746294021606,-0.39585989713668823,-0.4066075086593628,-0.40175122022628784,-0.4125635325908661,-0.4069103002548218,-0.41820240020751953,-0.41154420375823975,-0.42346662282943726,-0.415698766708374,-0.4283090829849243,-0.4193916618824005,-0.4328407943248749,-0.42285987734794617,-0.4372495412826538,-0.42631256580352783,-0.4416581094264984,-0.4297977387905121,-0.4461841285228729,-0.4335118532180786,-0.451017290353775,-0.43769797682762146,-0.4563363194465637,-0.4422340989112854,-0.46220043301582336,-0.4469219446182251,-0.4685121476650238,-0.4519149363040924,-0.4750834107398987,-0.4572798013687134,-0.4817622900009155,-0.46262893080711365,-0.4883791208267212,-0.4676629602909088,-0.4945853352546692,-0.4724624752998352,-0.5000262260437012,-0.47698476910591125,-0.5046371221542358,-0.4809568226337433,-0.5084781646728516,-0.48434996604919434,-0.5114843249320984,-0.4873488247394562,-0.5136945247650146,-0.48995310068130493,-0.5154111385345459,-0.49210289120674133,-0.516903281211853,-0.4939757287502289,-0.5183118581771851,-0.4957995116710663,-0.5198625922203064,-0.4976169764995575,-0.521746039390564,-0.49945729970932007,-0.5239163041114807,-0.5014687180519104,-0.5263248682022095,-0.5037275552749634,-0.5290380120277405,-0.5061351656913757,-0.5319313406944275,-0.5085968375205994,-0.5346949696540833,-0.5110976099967957,-0.5372004508972168,-0.5135430693626404,-0.5394700765609741,-0.5157400369644165,-0.5414009094238281,-0.5175819993019104,-0.542862057685852,-0.5190489888191223,-0.5438710451126099,-0.5200487375259399,-0.5444741249084473,-0.5204949378967285,-0.5446802377700806,-0.520462155342102,-0.544552206993103,-0.5200443267822266,-0.5441441535949707,-0.5192134380340576,-0.5434141755104065,-0.5179857611656189,-0.542346179485321,-0.5164980292320251,-0.541022777557373,-0.5148156881332397,-0.5394992828369141,-0.5129062533378601,-0.5377427935600281,-0.5108166337013245,-0.5357125997543335,-0.5086457133293152,-0.5334264039993286,-0.5064231157302856,-0.5309809446334839,-0.5041735768318176,-0.5284898281097412,-0.501957893371582,-0.5259407162666321,-0.4997645318508148,-0.5232195854187012,-0.49752259254455566,-0.5203320384025574,-0.4952189326286316,-0.5174044966697693,-0.4928598403930664,-0.5144237279891968,-0.49038657546043396,-0.5112305283546448,-0.48774129152297974,-0.5077933073043823,-0.48493388295173645,-0.5042111873626709,-0.4819803535938263,-0.5004695653915405,-0.47884082794189453,-0.49646249413490295,-0.4754530191421509,-0.4921858608722687,-0.47181081771850586,-0.48766329884529114,-0.4679860472679138,-0.4828302264213562,-0.4640211760997772,-0.4776991307735443,-0.45984530448913574,-0.4724256694316864,-0.4554009437561035,-0.4670521914958954,-0.45078036189079285,-0.46145713329315186,-0.44608256220817566,-0.45564666390419006,-0.4412424862384796,-0.4497779309749603,-0.43617334961891174,-0.44387221336364746,-0.43095916509628296,-0.4378197193145752,-0.4257330596446991,-0.43161824345588684,-0.4204648733139038,-0.4253285229206085,-0.4150194823741913,-0.4189133048057556,-0.4093530774116516,-0.41232648491859436,-0.40354013442993164,-0.40559619665145874,-0.39763739705085754,-0.3987126648426056,-0.3915990889072418,-0.3916330635547638,-0.3853526711463928,-0.38440752029418945,-0.3789190351963043,-0.37710270285606384,-0.37238672375679016,-0.36967653036117554,-0.36577948927879333,-0.3620924651622772,-0.3590465188026428,-0.35440847277641296,-0.3521696627140045,-0.3466413915157318,-0.3451785445213318,-0.3387884497642517,-0.33814793825149536,-0.3308127522468567,-0.33104076981544495,-0.3227776885032654,-0.32384273409843445,-0.31471219658851624,-0.31652259826660156,-0.30657118558883667,-0.3090512454509735,-0.2983539402484894,-0.30152422189712524,-0.2901151776313782,-0.2940562069416046,-0.2818600535392761,-0.2865472733974457,-0.273529976606369,-0.2788337171077728,-0.2650870978832245,-0.27100440859794617,-0.2565560042858124,-0.2632352113723755,-0.2479782998561859,-0.25543200969696045,-0.2393481284379959,-0.24740611016750336,-0.2306208461523056,-0.23924009501934052,-0.22179831564426422,-0.23113234341144562,-0.21295014023780823,-0.22305995225906372,-0.20411615073680878,-0.21488721668720245,-0.19526320695877075,-0.20662233233451843,-0.1863834410905838,-0.19836333394050598,-0.17753858864307404,-0.19014336168766022,-0.16875573992729187,-0.18192589282989502,-0.1599741280078888,-0.17364239692687988,-0.15114164352416992,-0.16524434089660645,-0.14228147268295288,-0.15676435828208923,-0.13342416286468506,-0.1482381820678711,-0.12454365193843842,-0.13959383964538574,-0.11561007052659988,-0.13077281415462494,-0.10667137056589127,-0.12187683582305908,-0.09781067073345184,-0.11302471160888672,-0.08900970220565796,-0.10418687015771866,-0.08015486598014832,-0.09531546384096146,-0.07122906297445297,-0.08648769557476044,-0.06236971542239189,-0.07779493927955627,-0.05368009954690933,-0.0692458227276802,-0.04515216499567032,-0.0608653724193573,-0.036801550537347794,-0.05274923890829086,-0.028654571622610092,-0.04495047777891159,-0.020618632435798645,-0.03741208463907242,-0.012603923678398132,-0.03005238249897957,-0.004660770297050476,-0.022837206721305847,0.0032375603914260864,-0.01571357250213623,0.011317364871501923,-0.008542641997337341,0.01970715820789337,-0.0011973455548286438,0.028333887457847595,0.0063246265053749084,0.0372132882475853,0.014011144638061523,0.04643452912569046,0.021950438618659973,0.05588231235742569,0.03010193258523941,0.06538072973489761,0.03810767084360123,0.07491307705640793,0.04572763293981552,0.08436762541532516,0.05330805480480194,0.09348076581954956,0.06125878542661667,0.10222368687391281,0.06920412927865982,0.11063101887702942,0.07641875743865967,0.11829406023025513,0.08306580036878586,0.1248847246170044,0.09005635231733322,0.1309305727481842,0.09756209701299667,0.13703811168670654,0.10473161935806274,0.14279481768608093,0.11117547750473022,0.1475921869277954,0.11762325465679169,0.15196004509925842,0.1246354728937149,0.15684883296489716,0.1316998451948166,0.1621231585741043,0.1381763368844986,0.1669425070285797,0.1442692130804062,0.17123211920261383,0.15050184726715088,0.17575912177562714,0.15688656270503998,0.18093281984329224,0.16307076811790466,0.18630343675613403,0.16888675093650818,0.19129076600074768,0.17447316646575928,0.1959274560213089,0.1800549030303955,0.2006806880235672,0.18569731712341309,0.20578977465629578,0.1912769377231598,0.21109235286712646,0.19677548110485077,0.21643885970115662,0.20245715975761414,0.22195398807525635,0.20854544639587402,0.22783887386322021,0.21492406725883484,0.23414868116378784,0.22138294577598572,0.2408096045255661,0.22791072726249695,0.24772141873836517,0.2345348745584488,0.2548198699951172,0.24109560251235962,0.26203206181526184,0.24734240770339966,0.26913875341415405,0.2531210780143738,0.2757990062236786,0.25837716460227966,0.2817825675010681,0.26302066445350647,0.28703317046165466,0.26686960458755493,0.2914980947971344,0.2698267996311188,0.2951238453388214,0.27205488085746765,0.29802095890045166,0.27380669116973877,0.3004281520843506,0.27521419525146484,0.30253762006759644,0.2764592170715332,0.3044890761375427,0.2779090106487274,0.30645057559013367,0.27983519434928894,0.3086082339286804,0.2822890281677246,0.31110501289367676,0.28536826372146606,0.31396785378456116,0.28918546438217163,0.3170616328716278,0.29356107115745544,0.3201717436313629,0.29820433259010315,0.3231307864189148,0.3030858337879181,0.3258450925350189,0.308247447013855,0.328314870595932,0.31352299451828003,0.33062970638275146,0.31873950362205505,0.33277279138565063,0.32381922006607056,0.33449500799179077,0.3285626173019409,0.3355770409107208,0.3327631652355194,0.33607345819473267,0.3364887833595276,0.3361404836177826,0.33987191319465637,0.3358767628669739,0.3428524136543274,0.3354545533657074,0.3454176187515259,0.3351161479949951,0.34774285554885864,0.33497175574302673,0.3499442934989929,0.33502712845802307,0.35206130146980286,0.33532264828681946,0.3542133569717407,0.3358570337295532,0.3563973605632782,0.33655038475990295,0.35835447907447815,0.33737021684646606,0.35992562770843506,0.3382839858531952,0.36120814085006714,0.3391556143760681,0.3622129559516907,0.3399306535720825,0.3627970814704895,0.340738445520401,0.36299434304237366,0.34162911772727966,0.36302265524864197,0.34250450134277344,0.3629917502403259,0.34339553117752075,0.36288395524024963,0.3444414734840393,0.36270594596862793,0.34560033679008484,0.3624858260154724,0.34673959016799927,0.3622548580169678,0.3479076623916626,0.3620994985103607,0.349197655916214,0.3621264100074768,0.3505156636238098,0.36238744854927063,0.3517214357852936,0.3628728985786438,0.35284072160720825,0.3635386526584625,0.3538372218608856,0.3641984164714813,0.354625403881073,0.36477917432785034,0.35517418384552,0.3654242753982544,0.35551297664642334,0.3663182854652405,0.3556709885597229,0.36749815940856934,0.3556704521179199,0.3688485622406006,0.35551950335502625,0.37021782994270325,0.3551963269710541,0.3715476989746094,0.3546697497367859,0.37288153171539307,0.35392022132873535,0.37423309683799744,0.3529627323150635,0.37555593252182007,0.3518728017807007,0.37683695554733276,0.3507084548473358,0.3780277371406555,0.34938400983810425,0.3789185583591461,0.34771719574928284,0.3792995512485504,0.3455829322338104,0.3791392147541046,0.3429500460624695,0.37842699885368347,0.33985161781311035,0.3770616948604584,0.3363795876502991,0.37503236532211304,0.33264100551605225,0.3724556863307953,0.32876861095428467,0.3694303035736084,0.3250260651111603,0.36613425612449646,0.32172974944114685,0.3629182279109955,0.31904760003089905,0.36003610491752625,0.3171144723892212,0.3575168550014496,0.3162133991718292,0.3554316759109497,0.31647419929504395,0.35392361879348755,0.31762418150901794,0.35296547412872314,0.31939736008644104,0.3524459898471832,0.32169878482818604,0.3522231876850128,0.32382136583328247,0.3515649437904358,0.323943555355072,0.34879955649375916,0.31993407011032104,0.3419891595840454,0.31043753027915955,0.3298355042934418,0.29507070779800415,0.3119099736213684,0.27397388219833374,0.28838664293289185,0.24728214740753174,0.2595595121383667,0.21489554643630981,0.2254326194524765,0.17702044546604156,0.1861249804496765,0.13509336113929749,0.14292919635772705,0.09184535592794418,0.0985659807920456,0.05040176957845688,0.05621499568223953,0.01354043185710907,0.018598206341266632,-0.016510628163814545,-0.012152232229709625,-0.03795430064201355,-0.03417684882879257,-0.048723407089710236,-0.045258983969688416,-0.045718543231487274,-0.04232113063335419,-0.025622978806495667,-0.022208139300346375,0.012788698077201843,0.016318827867507935,0.067243292927742,0.07123502343893051,0.13267022371292114,0.13764043152332306,0.20275083184242249,0.209126278758049,0.27113276720046997,0.27916431427001953,0.33227863907814026,0.3421016037464142,0.38191530108451843,0.3935193717479706,0.41712698340415955,0.4302797317504883,0.4366118311882019,0.45090678334236145,0.4410606920719147,0.45601534843444824,0.4329354763031006,0.44800302386283875,0.4156544506549835,0.43021994829177856,0.39290153980255127,0.40635135769844055,0.36821553111076355,0.3800208568572998,0.3446190655231476,0.3543797731399536,0.32438135147094727,0.3318696916103363,0.30896732211112976,0.31416574120521545,0.2989675998687744,0.302045077085495,0.29409757256507874,0.2953417897224426,0.29348260164260864,0.29323530197143555,0.2960135340690613,0.2946128845214844,0.3005402088165283,0.2982521057128906,0.3060187101364136,0.3029651343822479,0.31161439418792725,0.30772703886032104,0.31662559509277344,0.31167834997177124,0.32043734192848206,0.31415697932243347,0.3227097988128662,0.31484824419021606,0.32350826263427734,0.313800573348999,0.3231211006641388,0.3112623393535614,0.3218221068382263,0.3076017498970032,0.319834440946579,0.3033114969730377,0.31740814447402954,0.2989150285720825,0.31485068798065186,0.2948548495769501,0.3124483525753021,0.2914617955684662,0.31033024191856384,0.2889053225517273,0.3084651231765747,0.28716087341308594,0.3068024814128876,0.2860954999923706,0.3052840530872345,0.2855125665664673,0.30369892716407776,0.28507593274116516,0.30171483755111694,0.2843456566333771,0.2990935146808624,0.2829536199569702,0.295750230550766,0.28065529465675354,0.29166868329048157,0.2772802710533142,0.2869117259979248,0.2727862298488617,0.28164681792259216,0.2673061490058899,0.2760713994503021,0.2610625922679901,0.27038443088531494,0.25432145595550537,0.26479262113571167,0.24741120636463165,0.2594027817249298,0.24062642455101013,0.25418317317962646,0.23414039611816406,0.24914424121379852,0.22811943292617798,0.24441100656986237,0.2227998822927475,0.2400449812412262,0.21833443641662598,0.2359958440065384,0.2146882712841034,0.23225922882556915,0.2117394655942917,0.2288622409105301,0.20933091640472412,0.22570477426052094,0.20720435678958893,0.22260309755802155,0.20500941574573517,0.21942651271820068,0.2023804634809494,0.21604958176612854,0.1989881694316864,0.2122812718153,0.1946185678243637,0.20795966684818268,0.18923088908195496,0.20303267240524292,0.1828848272562027,0.19751881062984467,0.1756948083639145,0.1914731115102768,0.16792836785316467,0.18498684465885162,0.1600073128938675,0.17818424105644226,0.15231330692768097,0.17123626172542572,0.14508582651615143,0.16434428095817566,0.13850338757038116,0.15764987468719482,0.1326969563961029,0.1512037068605423,0.12764720618724823,0.14503470063209534,0.12316109985113144,0.13916251063346863,0.11896595358848572,0.13355253636837006,0.11481080204248428,0.12815110385417938,0.11050844192504883,0.12291742116212845,0.10589440912008286,0.11774105578660965,0.10077223181724548,0.11239765584468842,0.09496051073074341,0.10665403306484222,0.08838188648223877,0.1003800556063652,0.08106671273708344,0.09346766024827957,0.07306445389986038,0.08584439754486084,0.06449486315250397,0.07751166075468063,0.0555633008480072,0.06856295466423035,0.046484850347042084,0.059176962822675705,0.03744354099035263,0.04958879575133324,0.02862597443163395,0.0400613471865654,0.020237747579813004,0.03086978569626808,0.012458212673664093,0.02223091758787632,0.0053418781608343124,0.01419978216290474,-0.001248285174369812,0.006708775646984577,-0.0075348149985075,-0.0002906918525695801,-0.013653511181473732,-0.006836937740445137,-0.01968599110841751,-0.013062719255685806,-0.02580053173005581,-0.019140519201755524,-0.03219126909971237,-0.025186140090227127,-0.038921840488910675,-0.03132248297333717,-0.04595652595162392,-0.03771370276808739,-0.05326448380947113,-0.044453129172325134,-0.060802243649959564,-0.05154811590909958,-0.06848271191120148,-0.05902509018778801,-0.07619261741638184,-0.06691370159387589,-0.08379656076431274,-0.0751795619726181,-0.09120871871709824,-0.08378754556179047,-0.0985087901353836,-0.09274525940418243,-0.10586851090192795,-0.10203513503074646,-0.11339233070611954,-0.1116054505109787,-0.12117552012205124,-0.12139799445867538,-0.12939989566802979,-0.1313091218471527,-0.1381993591785431,-0.1412314921617508,-0.147567480802536,-0.1511681228876114,-0.15748564898967743,-0.16116419434547424,-0.16794219613075256,-0.1711844801902771,-0.178798109292984,-0.18121357262134552,-0.18982529640197754,-0.1913289576768875,-0.2008262723684311,-0.20152945816516876,-0.21157817542552948,-0.21168290078639984,-0.22180645167827606,-0.22168974578380585,-0.2313070297241211,-0.23146215081214905,-0.23995310068130493,-0.24079033732414246,-0.24763138592243195,-0.24947047233581543,-0.25434255599975586,-0.2574461102485657,-0.2602357864379883,-0.26465606689453125,-0.2654263377189636,-0.2709711790084839,-0.26997777819633484,-0.27640077471733093,-0.2740896940231323,-0.28114989399909973,-0.27805638313293457,-0.2854735553264618,-0.28208595514297485,-0.2896733283996582,-0.2863636612892151,-0.2941269874572754,-0.2911421060562134,-0.299156129360199,-0.2965962886810303,-0.30497097969055176,-0.30276089906692505,-0.31174346804618835,-0.3096446990966797,-0.3195430338382721,-0.3172059655189514,-0.32825422286987305,-0.3252774477005005,-0.3376973867416382,-0.33369049429893494,-0.34769386053085327,-0.3423401415348053,-0.3579603135585785,-0.3510512709617615,-0.3681504428386688,-0.3595849275588989,-0.37799546122550964,-0.36778882145881653,-0.38724061846733093,-0.3755456507205963,-0.3955906927585602,-0.3826776444911957,-0.40288683772087097,-0.3890700340270996,-0.4091619551181793,-0.3947434425354004,-0.41446515917778015,-0.3997305929660797,-0.4188607931137085,-0.40407246351242065,-0.4225817620754242,-0.4079211950302124,-0.42594799399375916,-0.4114592969417572,-0.42920154333114624,-0.41479772329330444,-0.4325565695762634,-0.41806554794311523,-0.4362483620643616,-0.4214438498020172,-0.4404276907444,-0.4250420928001404,-0.4451479911804199,-0.42889899015426636,-0.45045268535614014,-0.43308261036872864,-0.4563312530517578,-0.4376424252986908,-0.4626504182815552,-0.44253748655319214,-0.4692232012748718,-0.44769778847694397,-0.47585803270339966,-0.45304206013679504,-0.4823276400566101,-0.4584178030490875,-0.4884132742881775,-0.4636516273021698,-0.493976354598999,-0.4686329960823059,-0.4989304542541504,-0.47326552867889404,-0.5032305717468262,-0.4774376451969147,-0.5069249272346497,-0.4811008870601654,-0.5101109147071838,-0.4842684268951416,-0.5128448009490967,-0.48692530393600464,-0.5151772499084473,-0.489045113325119,-0.5172102451324463,-0.4906660318374634,-0.5190343856811523,-0.4918709993362427,-0.5206844806671143,-0.4927436411380768,-0.522188127040863,-0.49338048696517944,-0.5235728621482849,-0.493878036737442,-0.524824857711792,-0.49429672956466675,-0.5259182453155518,-0.4946802854537964,-0.5268622040748596,-0.4950801134109497,-0.5276737809181213,-0.4955251216888428,-0.5283466577529907,-0.4960111081600189,-0.5288761854171753,-0.4965241551399231,-0.5292695164680481,-0.49703070521354675,-0.5295256972312927,-0.4974631071090698,-0.5296366214752197,-0.49775710701942444,-0.5296010971069336,-0.4978855848312378,-0.5294173359870911,-0.4978395700454712,-0.5290791988372803,-0.49760928750038147,-0.5285782217979431,-0.4971923828125,-0.5278950333595276,-0.4965905249118805,-0.5270002484321594,-0.4957980513572693,-0.5258727073669434,-0.4948074221611023,-0.5245072245597839,-0.4936217963695526,-0.5229060649871826,-0.49225279688835144,-0.5210745334625244,-0.49071353673934937,-0.5190219283103943,-0.489006906747818,-0.5167518258094788,-0.4871183931827545,-0.5142611265182495,-0.4850262403488159,-0.5115514397621155,-0.4827241599559784,-0.5086349248886108,-0.4802265465259552,-0.5055283308029175,-0.47755685448646545,-0.5022464990615845,-0.47473302483558655,-0.4987978935241699,-0.4717614948749542,-0.49517983198165894,-0.4686356782913208,-0.4913797676563263,-0.4653436839580536,-0.487384557723999,-0.4618803858757019,-0.4831897020339966,-0.4582536518573761,-0.47879987955093384,-0.4544786214828491,-0.4742203950881958,-0.4505634307861328,-0.46944403648376465,-0.4464946985244751,-0.46444201469421387,-0.44223523139953613,-0.4591920077800751,-0.43775704503059387,-0.45380234718322754,-0.4331594705581665,-0.4482576847076416,-0.4284302294254303,-0.44253525137901306,-0.42354726791381836,-0.4366333782672882,-0.4185048043727875,-0.43056467175483704,-0.4133080244064331,-0.42434409260749817,-0.4079691767692566,-0.41797903180122375,-0.4025009870529175,-0.41146841645240784,-0.3969133198261261,-0.40480536222457886,-0.3912079930305481,-0.39798280596733093,-0.3853793740272522,-0.3909948766231537,-0.37941497564315796,-0.3838372826576233,-0.3733018636703491,-0.3765070140361786,-0.3670300245285034,-0.3690025210380554,-0.3605952560901642,-0.36132562160491943,-0.35399699211120605,-0.3534850478172302,-0.347239226102829,-0.3455008566379547,-0.3403315842151642,-0.3374013602733612,-0.3332901895046234,-0.3292185664176941,-0.32613515853881836,-0.3209799826145172,-0.31888967752456665,-0.312707781791687,-0.3115767538547516,-0.3044171929359436,-0.30421483516693115,-0.2961137294769287,-0.2968105673789978,-0.287792831659317,-0.28936243057250977,-0.2794452905654907,-0.2818763852119446,-0.2710641622543335,-0.2743810713291168,-0.26264554262161255,-0.26692333817481995,-0.25418442487716675,-0.25954583287239075,-0.2456752061843872,-0.2522677481174469,-0.23711907863616943,-0.24508249759674072,-0.22852902114391327,-0.2379646897315979,-0.21992439031600952,-0.23087120056152344,-0.21132147312164307,-0.2237369269132614,-0.2027295082807541,-0.21647736430168152,-0.1941550076007843,-0.20900630950927734,-0.18560859560966492,-0.2012595534324646,-0.17710696160793304,-0.1932099461555481,-0.16866502165794373,-0.18486526608467102,-0.16027802228927612,-0.17625293135643005,-0.15190652012825012,-0.16740408539772034,-0.14347873628139496,-0.1583499312400818,-0.13491913676261902,-0.1491309106349945,-0.1261826902627945,-0.13980576395988464,-0.11727005243301392,-0.13044916093349457,-0.10821488499641418,-0.12113991379737854,-0.09906162321567535,-0.11194673925638199,-0.08985001593828201,-0.10291466861963272,-0.08060862869024277,-0.09405313432216644,-0.07135115563869476,-0.08533615618944168,-0.06207706779241562,-0.07672415673732758,-0.0527779683470726,-0.06819739192724228,-0.04344412684440613,-0.0597696527838707,-0.03406934440135956,-0.05147016420960426,-0.024658385664224625,-0.04331723600625992,-0.015245087444782257,-0.035315826535224915,-0.0059119537472724915,-0.02747313305735588,0.0032121874392032623,-0.01980186440050602,0.011983063071966171,-0.012294502928853035,0.020283903926610947,-0.004899730905890465,0.02805602177977562,0.0024668164551258087,0.035305388271808624,0.009879233315587044,0.04209442436695099,0.017361540347337723,0.048530109226703644,0.024878814816474915,0.054752327501773834,0.03234849125146866,0.060921311378479004,0.039657074958086014,0.06720253825187683,0.04667987674474716,0.0737491250038147,0.053318336606025696,0.08068063110113144,0.05954745411872864,0.08805586397647858,0.06543652713298798,0.09584701061248779,0.07112129032611847,0.10393153131008148,0.0767485499382019,0.11212043464183807,0.08244599401950836,0.12021806091070175,0.08833739906549454,0.1280810832977295,0.09456155449151993,0.13564449548721313,0.10125024616718292,0.1429145187139511,0.10847346484661102,0.14995212852954865,0.11621200293302536,0.15686100721359253,0.12438612431287766,0.1637716144323349,0.13290725648403168,0.17080920934677124,0.1417008340358734,0.17805525660514832,0.15069368481636047,0.18551437556743622,0.15979520976543427,0.19309350848197937,0.16889125108718872,0.20060132443904877,0.1778457760810852,0.20778822898864746,0.1865084320306778,0.2144312858581543,0.1947418451309204,0.22041860222816467,0.20246091485023499,0.22577153146266937,0.20964892208576202,0.2305883765220642,0.21632149815559387,0.23496666550636292,0.22246390581130981,0.23896241188049316,0.22799497842788696,0.24260258674621582,0.23279574513435364,0.24591892957687378,0.23678524792194366,0.248972088098526,0.23999035358428955,0.2518520653247833,0.24255631864070892,0.2546519935131073,0.2446899116039276,0.2574346661567688,0.24658453464508057,0.26022133231163025,0.24839113652706146,0.26301535964012146,0.25023961067199707,0.2658284306526184,0.2522519826889038,0.268677294254303,0.25450819730758667,0.2715691924095154,0.25701192021369934,0.27451860904693604,0.2597254514694214,0.2775866389274597,0.2626533806324005,0.2808864414691925,0.2658756375312805,0.28452950716018677,0.2694924473762512,0.28857049345970154,0.27355408668518066,0.29300549626350403,0.2780616283416748,0.29779940843582153,0.28300735354423523,0.3028869032859802,0.28836995363235474,0.3081473112106323,0.2940548062324524,0.3134058713912964,0.2998628318309784,0.3184770941734314,0.30553561449050903,0.3232085108757019,0.31082984805107117,0.3274981677532196,0.3155636787414551,0.33131009340286255,0.3196343183517456,0.334693044424057,0.3230331242084503,0.3377578556537628,0.3258383572101593,0.34059277176856995,0.3281615078449249,0.3431852161884308,0.3300800919532776,0.3454265296459198,0.3316163420677185,0.34718337655067444,0.33276650309562683,0.34835436940193176,0.33353832364082336,0.3488852083683014,0.33397525548934937,0.34878212213516235,0.33417609333992004,0.34813082218170166,0.3342997133731842,0.3470771014690399,0.33452531695365906,0.3457757234573364,0.3350061774253845,0.34440669417381287,0.33591654896736145,0.34304994344711304,0.3373476266860962,0.3417830169200897,0.3393924832344055,0.34067779779434204,0.34211084246635437,0.33976149559020996,0.3454728424549103,0.3390282690525055,0.3493778705596924,0.33848339319229126,0.3537086248397827,0.33814239501953125,0.35832053422927856,0.33798927068710327,0.36298319697380066,0.3379756510257721,0.367387592792511,0.33807292580604553,0.37124550342559814,0.33829233050346375,0.37436410784721375,0.3386392295360565,0.37662485241889954,0.3390907347202301,0.3779562711715698,0.3396499454975128,0.3783873915672302,0.34038105607032776,0.3781013786792755,0.3413267135620117,0.37735795974731445,0.3423877954483032,0.3763378858566284,0.3433307409286499,0.3750898241996765,0.34391772747039795,0.37361714243888855,0.3439900279045105,0.3719516694545746,0.3434370756149292,0.37012267112731934,0.34218382835388184,0.36813002824783325,0.3402870297431946,0.3660232126712799,0.3380109965801239,0.36398354172706604,0.3357272148132324,0.36226099729537964,0.33372917771339417,0.3610217273235321,0.3321700394153595,0.36028921604156494,0.3311302959918976,0.36000531911849976,0.33064302802085876,0.36006680130958557,0.3306368291378021,0.3602849245071411,0.33094003796577454,0.36038947105407715,0.3313939571380615,0.36014264822006226,0.3319329023361206,0.3594413101673126,0.33255091309547424,0.3583035469055176,0.333262175321579,0.35682225227355957,0.33412057161331177,0.35518160462379456,0.33519402146339417,0.3536582589149475,0.33643603324890137,0.35249993205070496,0.33761170506477356,0.3517909646034241,0.338399201631546,0.3514852523803711,0.3385346829891205,0.35154107213020325,0.3378342092037201,0.35194092988967896,0.3361801505088806,0.35261058807373047,0.3336349129676819,0.35345658659935,0.3305266201496124,0.35447537899017334,0.32715994119644165,0.3555591106414795,0.32322508096694946,0.3559531271457672,0.3175520896911621,0.3540116250514984,0.3086777627468109,0.3478134274482727,0.2957591712474823,0.33618342876434326,0.2788720726966858,0.31906312704086304,0.25848230719566345,0.29696816205978394,0.23497503995895386,0.2704699635505676,0.20897898077964783,0.24048924446105957,0.18193909525871277,0.20885144174098969,0.1558382213115692,0.17798171937465668,0.13207562267780304,0.14971758425235748,0.11074550449848175,0.12449001520872116,0.09111859649419785,0.10174734145402908,0.07264640182256699,0.0810067430138588,0.055400654673576355,0.06237410008907318,0.03992924839258194,0.04639582708477974,0.02733016386628151,0.034069087356328964,0.019738657400012016,0.027350082993507385,0.020428039133548737,0.02936420403420925,0.03283391892910004,0.04347808286547661,0.058930449187755585,0.0716032087802887,0.09811178594827652,0.11300875246524811,0.14728772640228271,0.1644417643547058,0.20188573002815247,0.2211862951517105,0.25695711374282837,0.27817416191101074,0.30791592597961426,0.33069124817848206,0.350985586643219,0.3748006820678711,0.3835350275039673,0.40769463777542114,0.40427765250205994,0.4279574751853943,0.4132527709007263,0.4356182813644409,0.41165298223495483,0.43197256326675415,0.4015686511993408,0.41925567388534546,0.38561078906059265,0.4002455770969391,0.366449773311615,0.37785640358924866,0.34647783637046814,0.3547900319099426,0.3276962637901306,0.3333113193511963,0.3116696774959564,0.3151399791240692,0.29941827058792114,0.3013957142829895,0.2913617491722107,0.2925622761249542,0.2874203622341156,0.28850555419921875,0.2871525287628174,0.2885909676551819,0.2898179292678833,0.29186418652534485,0.29446321725845337,0.297207772731781,0.30010247230529785,0.3034416735172272,0.3058544397354126,0.30943411588668823,0.3109593391418457,0.314269483089447,0.31481796503067017,0.31740063428878784,0.3171224594116211,0.3186621069908142,0.3178839385509491,0.3181406259536743,0.31725195050239563,0.316037118434906,0.31534016132354736,0.31262126564979553,0.31226426362991333,0.3082268536090851,0.308246910572052,0.30319613218307495,0.3035838305950165,0.29779696464538574,0.2985372245311737,0.29221609234809875,0.29333794116973877,0.2866310179233551,0.2882595360279083,0.281252384185791,0.28361350297927856,0.27627500891685486,0.27966001629829407,0.2718202471733093,0.27655261754989624,0.2679551839828491,0.2743443250656128,0.26474589109420776,0.2729955017566681,0.26223862171173096,0.27235203981399536,0.2603779137134552,0.2721307873725891,0.2589706778526306,0.2719634175300598,0.2577463686466217,0.27150285243988037,0.2564413845539093,0.27051520347595215,0.25483351945877075,0.26887375116348267,0.2527434229850769,0.26650017499923706,0.25004786252975464,0.2633804380893707,0.2466958910226822,0.25963321328163147,0.2426961213350296,0.2554643154144287,0.23809194564819336,0.2510066032409668,0.23295894265174866,0.24626436829566956,0.227402463555336,0.24122701585292816,0.2215176224708557,0.23593056201934814,0.2153458595275879,0.23035825788974762,0.20890077948570251,0.2243967056274414,0.20224258303642273,0.21798449754714966,0.19549128413200378,0.2112288475036621,0.1887451559305191,0.20431013405323029,0.18202441930770874,0.19738520681858063,0.17536643147468567,0.19055110216140747,0.16883938014507294,0.1839984655380249,0.16257824003696442,0.17794819176197052,0.15667736530303955,0.1724846512079239,0.15111711621284485,0.16753928363323212,0.14582769572734833,0.1630040556192398,0.14079080522060394,0.1587768942117691,0.13602802157402039,0.15470734238624573,0.13150058686733246,0.1505787968635559,0.1270667314529419,0.1461588740348816,0.12255257368087769,0.14124834537506104,0.11782138049602509,0.1357063204050064,0.1127522885799408,0.12947916984558105,0.10719695687294006,0.12260617315769196,0.10102201998233795,0.11518053710460663,0.09419147670269012,0.1073247492313385,0.08678228408098221,0.09920886158943176,0.07892881333827972,0.09102530777454376,0.07078107446432114,0.08291636407375336,0.06251612305641174,0.07497084140777588,0.054358579218387604,0.06728880852460861,0.0465414822101593,0.05996242165565491,0.03921813145279884,0.05297655612230301,0.03241787850856781,0.046202197670936584,0.026083573698997498,0.03949197754263878,0.020098615437746048,0.03272058069705963,0.01425711065530777,0.025761678814888,0.0082787424325943,0.01850035786628723,0.0019084513187408447,0.010851874947547913,-0.005016744136810303,0.0027487576007843018,-0.01258590817451477,-0.005826480686664581,-0.020820386707782745,-0.014778167009353638,-0.02963588386774063,-0.023947954177856445,-0.03883322328329086,-0.03323911130428314,-0.04814644157886505,-0.04261285811662674,-0.05732439458370209,-0.05197104811668396,-0.06621380895376205,-0.061148837208747864,-0.07475987076759338,-0.07004342973232269,-0.0829121470451355,-0.07866489887237549,-0.09059935808181763,-0.08702351152896881,-0.0978403389453888,-0.0950472503900528,-0.10478620231151581,-0.10268557071685791,-0.1115979254245758,-0.11004021763801575,-0.11836123466491699,-0.11728629469871521,-0.1251428872346878,-0.12451077997684479,-0.1320313811302185,-0.1317625343799591,-0.13910743594169617,-0.1392054706811905,-0.14642347395420074,-0.1470346599817276,-0.1539798080921173,-0.15527844429016113,-0.16170451045036316,-0.16384781897068024,-0.16952913999557495,-0.17271344363689423,-0.17747634649276733,-0.181866854429245,-0.18558655679225922,-0.19120028614997864,-0.1938110888004303,-0.20056191086769104,-0.20207038521766663,-0.20982769131660461,-0.21033170819282532,-0.21886520087718964,-0.21855482459068298,-0.2275872528553009,-0.22667238116264343,-0.2360503226518631,-0.23466581106185913,-0.24435371160507202,-0.24255190789699554,-0.2525116801261902,-0.2503094971179962,-0.26056379079818726,-0.25791803002357483,-0.2686459720134735,-0.265402227640152,-0.2768164277076721,-0.2727625370025635,-0.2849910259246826,-0.27996397018432617,-0.2931184768676758,-0.28702080249786377,-0.3011983036994934,-0.29396578669548035,-0.3091249167919159,-0.3007667064666748,-0.3167557120323181,-0.3074030876159668,-0.32409340143203735,-0.3139421045780182,-0.33121705055236816,-0.32043159008026123,-0.3381509780883789,-0.32684582471847534,-0.34494221210479736,-0.3331971764564514,-0.3517029881477356,-0.3395477533340454,-0.35848891735076904,-0.345898300409317,-0.3653014898300171,-0.35221612453460693,-0.37220367789268494,-0.3585188388824463,-0.3792582154273987,-0.3648207187652588,-0.38640761375427246,-0.37110307812690735,-0.393545538187027,-0.37739109992980957,-0.40060749650001526,-0.3837079405784607,-0.4075193405151367,-0.3899625539779663,-0.4141964614391327,-0.3960525691509247,-0.42061641812324524,-0.4020005464553833,-0.42677319049835205,-0.40783387422561646,-0.4326091706752777,-0.4134617745876312,-0.4380987286567688,-0.4187893271446228,-0.44331538677215576,-0.4238043427467346,-0.4483404755592346,-0.42851030826568604,-0.45318907499313354,-0.4329345226287842,-0.45785045623779297,-0.4371677339076996,-0.46233269572257996,-0.4412577748298645,-0.46668684482574463,-0.4451722502708435,-0.47099173069000244,-0.44895413517951965,-0.47526106238365173,-0.45273566246032715,-0.4794234335422516,-0.4565529525279999,-0.48346206545829773,-0.460336834192276,-0.487442284822464,-0.4640561640262604,-0.49133917689323425,-0.4676953852176666,-0.49503153562545776,-0.4711844027042389,-0.49849700927734375,-0.4744860529899597,-0.5017921328544617,-0.4776119589805603,-0.5048731565475464,-0.48050105571746826,-0.5076683163642883,-0.48306500911712646,-0.5102288126945496,-0.4853420853614807,-0.5126030445098877,-0.48742344975471497,-0.5147296190261841,-0.4893101155757904,-0.5166022181510925,-0.49098825454711914,-0.518316924571991,-0.4925043284893036,-0.519883930683136,-0.4938730001449585,-0.5212352275848389,-0.4950759708881378,-0.522398829460144,-0.4961559772491455,-0.5234311819076538,-0.4971415400505066,-0.5242810845375061,-0.4979563057422638,-0.5249060392379761,-0.49855610728263855,-0.5253487229347229,-0.4990082085132599,-0.525596022605896,-0.4993344843387604,-0.5255888104438782,-0.49945956468582153,-0.5253779292106628,-0.49935832619667053,-0.5250194072723389,-0.4990674555301666,-0.5244154930114746,-0.4985846281051636,-0.5235034823417664,-0.4979121685028076,-0.522404134273529,-0.49709317088127136,-0.5211771130561829,-0.49610140919685364,-0.5196942687034607,-0.4948584735393524,-0.517902135848999,-0.4933931529521942,-0.5159035325050354,-0.4917854070663452)\n\
+\n\
+,\n\
+\n\
+new Array(-0.5137231945991516,-0.49000853300094604,-0.5113903284072876,-0.488100528717041,-0.5088633298873901,-0.48603248596191406,-0.5061661005020142,-0.4837847948074341,-0.5032707452774048,-0.4813406467437744,-0.5001466274261475,-0.4787534177303314,-0.49685049057006836,-0.4760761260986328,-0.49342668056488037,-0.4732472896575928,-0.4898289442062378,-0.47021234035491943,-0.4860019385814667,-0.467038094997406,-0.48194417357444763,-0.4637599587440491,-0.4776892066001892,-0.46030497550964355,-0.4732748866081238,-0.45665597915649414,-0.46869802474975586,-0.4528677761554718,-0.46391454339027405,-0.4489230215549469,-0.45892152190208435,-0.4447893500328064,-0.4537576138973236,-0.44052648544311523,-0.4484187066555023,-0.4361549913883209,-0.44290804862976074,-0.4315980076789856,-0.4373047649860382,-0.4268632233142853,-0.4316164255142212,-0.42204850912094116,-0.42571672797203064,-0.41714534163475037,-0.4195888936519623,-0.41207751631736755,-0.4133991301059723,-0.40687015652656555,-0.40720468759536743,-0.401580274105072,-0.4008715748786926,-0.39620015025138855,-0.3943476378917694,-0.39074966311454773,-0.3877306580543518,-0.3852769136428833,-0.38106489181518555,-0.3797324001789093,-0.3743053674697876,-0.3740321695804596,-0.3674202561378479,-0.3681885004043579,-0.3603806793689728,-0.36222216486930847,-0.3531627357006073,-0.35607028007507324,-0.34580618143081665,-0.3496861755847931,-0.3383495807647705,-0.3430899977684021,-0.3307521343231201,-0.3362985849380493,-0.3229793906211853,-0.3293401896953583,-0.315058171749115,-0.32228440046310425,-0.30699875950813293,-0.315151184797287,-0.2987874746322632,-0.30789127945899963,-0.29045185446739197,-0.30051279067993164,-0.28202396631240845,-0.29308781027793884,-0.2735027074813843,-0.2856077551841736,-0.2649257779121399,-0.27798640727996826,-0.2563796639442444,-0.2702132761478424,-0.24790993332862854,-0.2623620629310608,-0.23951497673988342,-0.2544562816619873,-0.23120757937431335,-0.24646149575710297,-0.22298353910446167,-0.2383953332901001,-0.21476247906684875,-0.2303106039762497,-0.20644812285900116,-0.22219493985176086,-0.1980222761631012,-0.21401672065258026,-0.18950195610523224,-0.2058141976594925,-0.18083666265010834,-0.19762080907821655,-0.17196400463581085,-0.18940521776676178,-0.1629542112350464,-0.18119071424007416,-0.15394656360149384,-0.17307928204536438,-0.14496801793575287,-0.16509070992469788,-0.13598699867725372,-0.1571563482284546,-0.12707515060901642,-0.14925628900527954,-0.11832299828529358,-0.14137746393680573,-0.10971798002719879,-0.13344717025756836,-0.10125025361776352,-0.1254633218050003,-0.09293901920318604,-0.11750493198633194,-0.08468332141637802,-0.10955502837896347,-0.07634306699037552,-0.10155733674764633,-0.06794353574514389,-0.09359082579612732,-0.0595434196293354,-0.08573566377162933,-0.0510471872985363,-0.0779324322938919,-0.042377568781375885,-0.07014453411102295,-0.03362184390425682,-0.06238359585404396,-0.02486787736415863,-0.05453343316912651,-0.01613004505634308,-0.0464804507791996,-0.007472425699234009,-0.03832215070724487,0.0009909719228744507,-0.030160509049892426,0.00918087363243103,-0.0219377800822258,0.01705806702375412,-0.013661175966262817,0.024636313319206238,-0.0054317861795425415,0.031981587409973145,0.002793937921524048,0.03918281942605972,0.011097252368927002,0.0463932529091835,0.01936565339565277,0.05372148007154465,0.02748739719390869,0.0609898716211319,0.03553415834903717,0.06804285198450089,0.04353989660739899,0.07528826594352722,0.05137953907251358,0.08313757926225662,0.05894308537244797,0.09104142338037491,0.06621246039867401,0.09819495677947998,0.07324355840682983,0.10493610799312592,0.08019237220287323,0.11213169991970062,0.08720662444829941,0.11955674737691879,0.09431906044483185,0.1262604296207428,0.10157740116119385,0.13215814530849457,0.10906890779733658,0.1380482316017151,0.11671863496303558,0.14434769749641418,0.12434201687574387,0.15068860352039337,0.13187485933303833,0.15661653876304626,0.13927049934864044,0.1622142195701599,0.14633619785308838,0.16797444224357605,0.15291756391525269,0.17413830757141113,0.15904036164283752,0.18042199313640594,0.16477809846401215,0.18657466769218445,0.17019487917423248,0.19275277853012085,0.1753728985786438,0.1990659385919571,0.1803634762763977,0.20531892776489258,0.18523544073104858,0.21139419078826904,0.19012044370174408,0.21729907393455505,0.1950494647026062,0.222874253988266,0.1999734342098236,0.228011816740036,0.2050219029188156,0.23290342092514038,0.210371196269989,0.23768731951713562,0.21597397327423096,0.24231691658496857,0.2218102216720581,0.2469380795955658,0.2279721051454544,0.2518135607242584,0.23417289555072784,0.25691327452659607,0.23994697630405426,0.26207083463668823,0.24547690153121948,0.2672507166862488,0.25112250447273254,0.27232447266578674,0.25628194212913513,0.27704593539237976,0.260145902633667,0.28139808773994446,0.26323676109313965,0.28550174832344055,0.2666539251804352,0.2893005907535553,0.27030205726623535,0.29275497794151306,0.27338463068008423,0.29604265093803406,0.2760785222053528,0.29927703738212585,0.27935171127319336,0.302398145198822,0.2835429012775421,0.30541032552719116,0.28810322284698486,0.3083387315273285,0.29246801137924194,0.31105777621269226,0.2966208755970001,0.3135039806365967,0.3009149432182312,0.31568992137908936,0.30537116527557373,0.3176348805427551,0.30956944823265076,0.3193422853946686,0.31316643953323364,0.3208901584148407,0.3162834644317627,0.3223532438278198,0.31914156675338745,0.32372766733169556,0.3216931223869324,0.3250102996826172,0.3238937258720398,0.32619887590408325,0.32591819763183594,0.32724729180336,0.32787463068962097,0.32814714312553406,0.32968413829803467,0.3289378583431244,0.3313487470149994,0.32962244749069214,0.33299732208251953,0.33025267720222473,0.33466023206710815,0.3309943675994873,0.33627644181251526,0.33193162083625793,0.33788472414016724,0.3330099880695343,0.3396027088165283,0.33427178859710693,0.34145987033843994,0.33584967255592346,0.3433850407600403,0.3376842141151428,0.34532588720321655,0.3395330309867859,0.34727874398231506,0.34122443199157715,0.3492124080657959,0.3427020013332367,0.3510623872280121,0.34393221139907837,0.35280218720436096,0.3448846936225891,0.3544255197048187,0.345511257648468,0.35589224100112915,0.3457866907119751,0.35723280906677246,0.34584540128707886,0.3586302697658539,0.34591227769851685,0.3602270781993866,0.3460692763328552,0.36193689703941345,0.3463064730167389,0.36358287930488586,0.34671613574028015,0.36508455872535706,0.3473617732524872,0.3663909435272217,0.3480914235115051,0.36737513542175293,0.34872686862945557,0.36788907647132874,0.3492404818534851,0.3678523302078247,0.34957072138786316,0.3672947287559509,0.3495337665081024,0.3663550615310669,0.349063515663147,0.36519855260849,0.34828177094459534,0.3639591932296753,0.34726089239120483,0.3627973198890686,0.3459911048412323,0.36188578605651855,0.3445943593978882,0.36128389835357666,0.3432638645172119,0.360962837934494,0.3419889211654663,0.36096450686454773,0.3406458795070648,0.36137494444847107,0.33931952714920044,0.36218199133872986,0.3382019102573395,0.36331093311309814,0.3372468650341034,0.36474165320396423,0.33627501130104065,0.3664785623550415,0.33529964089393616,0.36844712495803833,0.3344076871871948,0.3704620599746704,0.33351296186447144,0.37229543924331665,0.3325388431549072,0.3738071024417877,0.3315884470939636,0.37496477365493774,0.33070746064186096,0.3756759762763977,0.32981252670288086,0.37573686242103577,0.3289702832698822,0.3750419616699219,0.3283597528934479,0.37365415692329407,0.32795339822769165,0.37158074975013733,0.32762959599494934,0.36872994899749756,0.32744911313056946,0.36513349413871765,0.327328085899353,0.36083292961120605,0.32647183537483215,0.3553459048271179,0.3234274387359619,0.3475061357021332,0.3167162835597992,0.3361029028892517,0.30550384521484375,0.3206931948661804,0.289927214384079,0.301763653755188,0.2707938551902771,0.28021207451820374,0.2489292174577713,0.25686004757881165,0.22513742744922638,0.23259875178337097,0.2009105384349823,0.20892499387264252,0.17861606180667877,0.18800251185894012,0.16042542457580566,0.1717921644449234,0.14698050916194916,0.16082054376602173,0.1370360553264618,0.15366528928279877,0.12817446887493134,0.14766347408294678,0.11803093552589417,0.14030992984771729,0.10540719330310822,0.1303406059741974,0.09064079821109772,0.11794678121805191,0.07512999325990677,0.1043713390827179,0.06083159148693085,0.09155081957578659,0.05038084089756012,0.08213365077972412,0.047207534313201904,0.0794491171836853,0.05470795929431915,0.08676983416080475,0.07482234388589859,0.1060170903801918,0.10722704231739044,0.13688474893569946,0.1495549976825714,0.17697802186012268,0.19809097051620483,0.22259706258773804,0.24851331114768982,0.2695668935775757,0.29662609100341797,0.3139076828956604,0.3389118015766144,0.3523290455341339,0.37274593114852905,0.3825106620788574,0.39645275473594666,0.4031810462474823,0.40939658880233765,0.414045125246048,0.41200780868530273,0.41564178466796875,0.40561020374298096,0.4092215895652771,0.3921266198158264,0.3965846300125122,0.3738146126270294,0.37977224588394165,0.3530846834182739,0.360776424407959,0.33230307698249817,0.34146547317504883,0.3134949207305908,0.3235333561897278,0.29809248447418213,0.30826473236083984,0.2869272828102112,0.2963654398918152,0.2803330719470978,0.2880798876285553,0.2781458795070648,0.2833423912525177,0.2797280550003052,0.28175947070121765,0.28418320417404175,0.2826170325279236,0.29055237770080566,0.28502604365348816,0.29783299565315247,0.2880639433860779,0.3050537407398224,0.2908852994441986,0.31150898337364197,0.29286256432533264,0.31685498356819153,0.29363778233528137,0.3209408223628998,0.29303422570228577,0.3236549198627472,0.2910189926624298,0.3249479830265045,0.2877538502216339,0.3248835802078247,0.28355008363723755,0.3236102759838104,0.2787551283836365,0.3212985694408417,0.27375152707099915,0.31806454062461853,0.2689562439918518,0.31393393874168396,0.2646617591381073,0.30892059206962585,0.2609400451183319,0.3031262159347534,0.2577987313270569,0.2967284619808197,0.2553180754184723,0.2899474501609802,0.2535468339920044,0.2830822467803955,0.2523913085460663,0.27646496891975403,0.2516772150993347,0.27031591534614563,0.2512190043926239,0.2647823095321655,0.2508447468280792,0.25996577739715576,0.25032496452331543,0.25594156980514526,0.24949151277542114,0.2525883615016937,0.24821141362190247,0.24961310625076294,0.24631737172603607,0.24674704670906067,0.24365116655826569,0.24378450214862823,0.24015013873577118,0.2405320256948471,0.23586493730545044,0.23689839243888855,0.23092935979366302,0.23295597732067108,0.22551023960113525,0.22881460189819336,0.2197560966014862,0.22456791996955872,0.21381458640098572,0.22040949761867523,0.20788267254829407,0.21659861505031586,0.20215559005737305,0.2132403701543808,0.19671525061130524,0.21023744344711304,0.19153043627738953,0.20741993188858032,0.18653440475463867,0.20455028116703033,0.18163129687309265,0.2012627124786377,0.17666466534137726,0.19717349112033844,0.17145000398159027,0.19201600551605225,0.1658248007297516,0.18561972677707672,0.15966778993606567,0.1779114007949829,0.15292170643806458,0.1690191626548767,0.14558954536914825,0.15924739837646484,0.13767898082733154,0.14891751110553741,0.12920112907886505,0.1383480280637741,0.12023596465587616,0.12793944776058197,0.1109166145324707,0.11810696125030518,0.10136047005653381,0.10913249105215073,0.09172657132148743,0.1011713445186615,0.08230516314506531,0.0943390354514122,0.07342809438705444,0.08870010823011398,0.06534087657928467,0.08421285450458527,0.058251891285181046,0.0807342454791069,0.0523688979446888,0.07804303616285324,0.047738026827573776,0.07584884017705917,0.04413424804806709,0.07380872964859009,0.04118501394987106,0.07154276967048645,0.038487426936626434,0.0686652734875679,0.03558041900396347,0.06486204266548157,0.0319744274020195,0.05993484705686569,0.027289263904094696,0.05376472324132919,0.021312803030014038,0.04630828648805618,0.013984277844429016,0.03766322135925293,0.005423426628112793,0.02805314213037491,-0.0040769875049591064,0.01772705465555191,-0.014155000448226929,0.0069579556584358215,-0.024425312876701355,-0.003892548382282257,-0.034451521933078766,-0.014451511204242706,-0.04383676499128342,-0.024486973881721497,-0.05239381641149521,-0.03391285985708237,-0.06015949696302414,-0.04270743578672409,-0.06728138774633408,-0.05091959983110428,-0.07397614419460297,-0.0586925745010376,-0.0805329903960228,-0.0662003830075264,-0.08724270761013031,-0.07359982281923294,-0.09432008862495422,-0.08105243742465973,-0.10188722610473633,-0.08869340270757675,-0.10994412750005722,-0.09654761105775833,-0.11832835525274277,-0.10454189777374268,-0.1267707496881485,-0.11260934174060822,-0.13502219319343567,-0.12074155360460281,-0.14292706549167633,-0.12895497679710388,-0.15042932331562042,-0.13724792003631592,-0.15755988657474518,-0.14559385180473328,-0.16441892087459564,-0.1539762169122696,-0.1711602807044983,-0.16242380440235138,-0.17798106372356415,-0.17097726464271545,-0.1850680112838745,-0.17961308360099792,-0.19250938296318054,-0.1882379651069641,-0.20026762783527374,-0.19674423336982727,-0.20821866393089294,-0.2050238698720932,-0.21618175506591797,-0.2129627764225006,-0.22394722700119019,-0.22049042582511902,-0.23134419322013855,-0.22762390971183777,-0.2382839024066925,-0.23443394899368286,-0.24473749101161957,-0.24101610481739044,-0.2507375478744507,-0.24751800298690796,-0.25642403960227966,-0.2541276514530182,-0.26202377676963806,-0.26100021600723267,-0.26775965094566345,-0.2682335376739502,-0.2738083004951477,-0.27590224146842957,-0.28030723333358765,-0.2840461730957031,-0.2873222529888153,-0.2926250100135803,-0.2948102355003357,-0.30153170228004456,-0.30264827609062195,-0.3106444776058197,-0.31068146228790283,-0.31983932852745056,-0.3187355399131775,-0.328976571559906,-0.32663577795028687,-0.337910920381546,-0.334236741065979,-0.3465123176574707,-0.34141790866851807,-0.3546822965145111,-0.34808236360549927,-0.3623671531677246,-0.3542081117630005,-0.3695635199546814,-0.3598801791667938,-0.3763040602207184,-0.36523255705833435,-0.3826392590999603,-0.37037503719329834,-0.38862234354019165,-0.3753855526447296,-0.394300252199173,-0.38032299280166626,-0.3997267782688141,-0.3852221369743347,-0.40498611330986023,-0.39010003209114075,-0.41017886996269226,-0.39498022198677063,-0.41537636518478394,-0.3998861610889435,-0.4206025004386902,-0.404814749956131,-0.42585769295692444,-0.4097353518009186,-0.4311356544494629,-0.4146151840686798,-0.43641966581344604,-0.4194323718547821,-0.44168272614479065,-0.42417213320732117,-0.44688862562179565,-0.4288170039653778,-0.45198318362236023,-0.4333416223526001,-0.45690152049064636,-0.43771636486053467,-0.46159815788269043,-0.4419223368167877,-0.46606379747390747,-0.4459584057331085,-0.4703110158443451,-0.4498317539691925,-0.4743539094924927,-0.45354267954826355,-0.4781973659992218,-0.4570796489715576,-0.4818352460861206,-0.4604245722293854,-0.4852607846260071,-0.4635674059391022,-0.4884822368621826,-0.46651771664619446,-0.49152228236198425,-0.46929827332496643,-0.4943970739841461,-0.4719245731830597,-0.4971011281013489,-0.4743885397911072,-0.4996146559715271,-0.47666504979133606,-0.5019261240959167,-0.47873517870903015,-0.5040473341941833,-0.4806043803691864,-0.5060036182403564,-0.4822950065135956,-0.5078047513961792,-0.4838182032108307,-0.5094174146652222,-0.48514917492866516,-0.5107952952384949,-0.48625442385673523,-0.5120333433151245,-0.4872269034385681,-0.5131012201309204,-0.48804327845573425,-0.5139797925949097,-0.48869040608406067,-0.5146780014038086,-0.4891781508922577,-0.5152041912078857,-0.48951324820518494,-0.515548050403595,-0.4896860122680664,-0.5156898498535156,-0.4896797835826874,-0.5156195759773254,-0.4894915819168091,-0.5153493285179138,-0.4891391396522522,-0.5149028897285461,-0.48864948749542236,-0.5142913460731506,-0.4880334436893463,-0.5134984850883484,-0.4872722327709198,-0.512488603591919,-0.4863273799419403,-0.5112295150756836,-0.4851687550544739,-0.5097134113311768,-0.48379451036453247,-0.5079579949378967,-0.48222753405570984,-0.5059928894042969,-0.4804929196834564,-0.5038410425186157,-0.47860074043273926,-0.5015115737915039,-0.4765486717224121,-0.49900615215301514,-0.474336177110672,-0.4963277280330658,-0.4719712436199188,-0.4934810698032379,-0.46946513652801514,-0.49046316742897034,-0.4668181240558624,-0.48725906014442444,-0.46401435136795044,-0.48385322093963623,-0.46102750301361084,-0.48024654388427734,-0.45783665776252747,-0.47645989060401917,-0.45443978905677795,-0.4725186824798584,-0.4508539140224457,-0.4684355556964874,-0.44709959626197815,-0.46420466899871826,-0.44318661093711853,-0.4598103165626526,-0.43911513686180115,-0.4552389979362488,-0.43489035964012146,-0.45048898458480835,-0.43053045868873596,-0.4455726444721222,-0.42605772614479065,-0.44050833582878113,-0.42148131132125854,-0.4353029131889343,-0.4167920649051666,-0.4299459159374237,-0.41197001934051514,-0.4244259297847748,-0.40699324011802673,-0.41875192523002625,-0.40184569358825684,-0.41294997930526733,-0.39652132987976074,-0.40703457593917847,-0.39102911949157715,-0.40099236369132996,-0.3853883147239685,-0.3947983682155609,-0.379618763923645,-0.38843998312950134,-0.3737398684024811,-0.38192009925842285,-0.3677789866924286,-0.3752404749393463,-0.3617693781852722,-0.3683972954750061,-0.3557269871234894,-0.3613896369934082,-0.34962818026542664,-0.3542184829711914,-0.3434188663959503,-0.3468770682811737,-0.33705273270606995,-0.33935868740081787,-0.3305167555809021,-0.3316848576068878,-0.3238251209259033,-0.32391107082366943,-0.31700414419174194,-0.3160881996154785,-0.3100919723510742,-0.30822646617889404,-0.30314183235168457,-0.30031096935272217,-0.29620152711868286,-0.29234418272972107,-0.28928154706954956,-0.2843485474586487,-0.28234970569610596,-0.2763228714466095,-0.2753610908985138,-0.26822763681411743,-0.2682851552963257,-0.2600266933441162,-0.26110294461250305,-0.2517269551753998,-0.25379523634910583,-0.2433546781539917,-0.24635474383831024,-0.23491129279136658,-0.2388077676296234,-0.22638581693172455,-0.23121139407157898,-0.21780720353126526,-0.22362297773361206,-0.20924493670463562,-0.2160770297050476,-0.20073820650577545,-0.20858462154865265,-0.19224850833415985,-0.20113219320774078,-0.18370383977890015,-0.19366946816444397,-0.17507335543632507,-0.1861170083284378,-0.16637077927589417,-0.17841219902038574,-0.1576009839773178,-0.17055565118789673,-0.148741215467453,-0.16260384023189545,-0.1397855281829834,-0.15461835265159607,-0.13077619671821594,-0.14663778245449066,-0.12177445739507675,-0.1386960744857788,-0.11282160133123398,-0.1308393031358719,-0.10394816100597382,-0.1230967789888382,-0.09519916772842407,-0.11543876677751541,-0.08661489933729172,-0.10778286308050156,-0.07818744331598282,-0.10004876554012299,-0.06986398994922638,-0.09220118820667267,-0.06159941852092743,-0.08424758911132812,-0.053382694721221924,-0.07621950656175613,-0.045204222202301025,-0.06816849112510681,-0.03702538460493088,-0.06016238033771515,-0.02880621701478958,-0.05225931107997894,-0.020550966262817383,-0.04448086768388748,-0.012302905321121216,-0.0368179976940155,-0.004100114107131958,-0.029257260262966156,0.004040226340293884,-0.021784842014312744,0.012096323072910309,-0.014362379908561707,0.020029857754707336,-0.0069222599267959595,0.027816027402877808,0.0005943924188613892,0.035470448434352875,0.008194826543331146,0.043032705783843994,0.01583489030599594,0.05053168535232544,0.023451924324035645,0.05797713249921799,0.030986033380031586,0.0653659775853157,0.0383775532245636,0.07267146557569504,0.04556902498006821,0.07983017712831497,0.052524030208587646,0.08677184581756592,0.05924297124147415,0.09348134696483612,0.06576123833656311,0.10002323985099792,0.07214471697807312,0.10649779438972473,0.07848785817623138,0.11298158764839172,0.08489495515823364,0.11951449513435364,0.09144071489572525,0.12612414360046387,0.09814945608377457,0.13283410668373108,0.10502535849809647,0.13964423537254333,0.11209312081336975,0.1465175449848175,0.11938157677650452,0.15339161455631256,0.12685833871364594,0.16019673645496368,0.13440126180648804,0.16686761379241943,0.14185304939746857,0.1733635812997818,0.14909660816192627,0.1796974241733551,0.15606801211833954,0.1859397441148758,0.16272011399269104,0.19217726588249207,0.16901637613773346,0.19845536351203918,0.17497338354587555,0.20475313067436218,0.1806771457195282,0.21099962294101715,0.1862298846244812,0.21710392832756042,0.19168782234191895,0.22298064827919006,0.19706708192825317,0.22857160866260529,0.20239682495594025,0.23385636508464813,0.20773008465766907,0.23883312940597534,0.21309153735637665,0.24349918961524963,0.2184503823518753,0.24790242314338684,0.22379642724990845,0.2520396411418915,0.22907114028930664,0.2559488117694855,0.23422284424304962,0.25970956683158875,0.23919197916984558,0.263393372297287,0.24391581118106842,0.267034649848938,0.24837423861026764,0.2706506550312042,0.25261327624320984,0.2742699086666107,0.25670841336250305,0.27793049812316895,0.2607170045375824,0.2816528379917145,0.26468127965927124,0.28542274236679077,0.26866281032562256,0.2891985774040222,0.2727433443069458,0.292927622795105,0.27697640657424927,0.2965553402900696,0.281343013048172,0.3000248968601227,0.2857591211795807,0.3032781183719635,0.2901217043399811,0.30626803636550903,0.29434892535209656,0.3089806139469147,0.2983919382095337,0.31145021319389343,0.30222588777542114,0.3137483298778534,0.30583545565605164,0.31595122814178467,0.3092058300971985,0.31811270117759705,0.31232768297195435,0.3202593922615051,0.31520572304725647,0.3223975598812103,0.31785526871681213,0.3245071470737457,0.3202867805957794,0.3265295624732971,0.32250121235847473,0.3283746540546417,0.3245077431201935,0.32995209097862244,0.3263428807258606,0.33120396733283997,0.32806700468063354,0.3321175277233124,0.32974594831466675,0.332724928855896,0.3314400613307953,0.3331047594547272,0.3331981897354126,0.33337944746017456,0.33504244685173035,0.33369430899620056,0.33695265650749207,0.3341796398162842,0.3388760983943939,0.33491915464401245,0.3407588005065918,0.33593639731407166,0.3425574004650116,0.3371926546096802,0.3442245423793793,0.3385861814022064,0.3457033038139343,0.33996182680130005,0.3469533324241638,0.3411432206630707,0.34797245264053345,0.3419831097126007,0.34877270460128784,0.34240439534187317,0.349345326423645,0.3424091935157776,0.3496764302253723,0.34206104278564453,0.3498052656650543,0.3414638340473175,0.34984588623046875,0.3407500982284546,0.3499334454536438,0.340066134929657,0.3501625061035156,0.33954519033432007,0.35058847069740295,0.33927953243255615,0.3512694835662842,0.3393147885799408,0.3522685766220093,0.33966028690338135,0.35359981656074524,0.3402900993824005,0.3551881015300751,0.34113386273384094,0.356891930103302,0.3420846462249756,0.3585565388202667,0.34303149580955505,0.36004331707954407,0.34388241171836853,0.3612383306026459,0.344550758600235,0.3620738983154297,0.34493643045425415,0.3625553846359253,0.34495019912719727,0.3627432882785797,0.3445638120174408,0.3626939058303833,0.3438241183757782,0.3624250590801239,0.3428187668323517,0.361955851316452,0.3416540026664734,0.36136651039123535,0.3404766321182251,0.36078914999961853,0.33948343992233276,0.36033061146736145,0.3388586640357971,0.3600243926048279,0.3386785686016083,0.35987240076065063,0.3388814926147461,0.3599116802215576,0.3393232822418213,0.3602134883403778,0.3398509621620178,0.3608211874961853,0.34033000469207764,0.36171820759773254,0.3406338095664978,0.3628429174423218,0.3406321406364441,0.36408504843711853,0.34020528197288513,0.36525389552116394,0.3392985761165619,0.3661157488822937,0.33797401189804077,0.36651450395584106,0.33633241057395935,0.3663865327835083,0.33423125743865967,0.3655090928077698,0.33098775148391724,0.36318421363830566,0.3254320025444031,0.3582824468612671,0.31642067432403564,0.3497524857521057,0.3034154772758484,0.33714884519577026,0.2866259813308716,0.3206908106803894,0.2667217552661896,0.3009462058544159,0.24460870027542114,0.2786709666252136,0.22157062590122223,0.2550315260887146,0.19945719838142395,0.2318165898323059,0.18042144179344177,0.21116450428962708,0.16621296107769012,0.19487625360488892,0.15751305222511292,0.18379129469394684,0.15367744863033295,0.1775275021791458,0.1528540998697281,0.17453670501708984,0.1523725986480713,0.17242954671382904,0.14946037530899048,0.16865786910057068,0.1421966850757599,0.1614331305027008,0.13021358847618103,0.1503685712814331,0.1146666407585144,0.13641898334026337,0.09762406349182129,0.12132522463798523,0.08152692764997482,0.10719214379787445,0.0690765306353569,0.09647108614444733,0.06320425868034363,0.09195809066295624,0.06661736965179443,0.09632152318954468,0.08097830414772034,0.11124186217784882,0.10628615319728851,0.13673646748065948,0.1408746838569641,0.17110836505889893,0.18190903961658478,0.2114475965499878,0.22600501775741577,0.25431403517723083,0.269742876291275,0.29631057381629944,0.3100496232509613,0.334465891122818,0.3444552719593048,0.3664591610431671,0.3712193965911865,0.3907356262207031,0.3893691599369049,0.4065472185611725,0.39870530366897583,0.4139246642589569,0.399762898683548,0.4135751724243164,0.393675297498703,0.4067177474498749,0.38196316361427307,0.3948909044265747,0.36633679270744324,0.37975722551345825,0.3485592305660248,0.36291125416755676,0.330335408449173,0.3457352817058563,0.3131875991821289,0.3293605446815491,0.29833319783210754,0.314715713262558,0.28659963607788086,0.3025423586368561,0.27838796377182007,0.29330089688301086,0.27369534969329834,0.2870592176914215,0.2722085118293762,0.2835167944431305,0.27343297004699707,0.28217101097106934,0.2767919898033142,0.2824866473674774,0.28169888257980347,0.2839967906475067,0.287453293800354,0.28617313504219055,0.29337456822395325,0.2885313928127289,0.29889997839927673,0.2907150387763977,0.30358970165252686,0.2924956679344177,0.3070765733718872,0.2937161922454834,0.3090613782405853,0.2942705750465393,0.30936959385871887,0.2941321134567261,0.3079759478569031,0.29334330558776855,0.30495354533195496,0.29192981123924255,0.30042779445648193,0.28982827067375183,0.2946094274520874,0.28691163659095764,0.28784412145614624,0.2830761671066284,0.2805746793746948,0.27829596400260925,0.2732338309288025,0.27262943983078003,0.26617667078971863,0.2662232518196106,0.25967875123023987,0.2593178451061249,0.25392982363700867,0.25221049785614014,0.24899810552597046,0.24517767131328583,0.24483585357666016,0.2384195476770401,0.2413596510887146,0.23206254839897156,0.23851251602172852,0.2261812388896942,0.2362290471792221,0.22080402076244354,0.2343699336051941,0.21592116355895996,0.2327447235584259,0.21152155101299286,0.23120062053203583,0.20762799680233002,0.22964338958263397,0.20428478717803955,0.22795343399047852,0.20150336623191833,0.2259225845336914,0.19921478629112244,0.22331036627292633,0.19725462794303894,0.2199501097202301,0.19537846744060516,0.2157791703939438,0.19330155849456787,0.2107958346605301,0.1907530426979065,0.2050483673810959,0.18751242756843567,0.1986832618713379,0.18341392278671265,0.19196321070194244,0.17835724353790283,0.18518690764904022,0.1723581850528717,0.17857202887535095,0.1655905842781067,0.17220304906368256,0.15833452343940735,0.1660631000995636,0.1508517861366272,0.16009025275707245,0.14331141114234924,0.15421250462532043,0.13582764565944672,0.14836138486862183,0.12851488590240479,0.1424730122089386,0.12145394831895828,0.13647493720054626,0.11461437493562698,0.13027110695838928,0.10786096751689911,0.12374910712242126,0.10105203837156296,0.11681777238845825,0.09411272406578064,0.10944677889347076,0.0870223417878151,0.10168059915304184,0.07978898286819458,0.09362272918224335,0.07247429341077805,0.08540672063827515,0.06521251797676086,0.07717220485210419,0.05815443769097328,0.06905745714902878,0.05138806998729706,0.06120937690138817,0.044933073222637177,0.053783953189849854,0.03879239410161972,0.04690658301115036,0.032958440482616425,0.040596701204776764,0.02735314890742302,0.03471525385975838,0.021802255883812904,0.028989167883992195,0.01609962061047554,0.023105600848793983,0.010090738534927368,0.016811873763799667,0.003688353579491377,0.009963242337107658,-0.0031575006432831287,0.002516126027330756,-0.01046459749341011,-0.005494528915733099,-0.018199991434812546,-0.013961371034383774,-0.02628650888800621,-0.02269870787858963,-0.03463251143693924,-0.03145888075232506,-0.043135449290275574,-0.039992015808820724,-0.051663435995578766,-0.0481300912797451,-0.060072120279073715,-0.05583951249718666,-0.06826416403055191,-0.063203364610672,-0.0762188732624054,-0.07035306096076965,-0.08395205438137054,-0.077405646443367,-0.09146834164857864,-0.0844445675611496,-0.09877212345600128,-0.09153379499912262,-0.1059095486998558,-0.09873364865779877,-0.1129670962691307,-0.1060994565486908,-0.12002304196357727,-0.11366908252239227,-0.12711678445339203,-0.12144944071769714,-0.13426116108894348,-0.12941238284111023,-0.1414547860622406,-0.13750536739826202,-0.1486705243587494,-0.14567208290100098,-0.1558549851179123,-0.1538686901330948,-0.16296620666980743,-0.16206611692905426,-0.17001113295555115,-0.17024314403533936,-0.17703497409820557,-0.17837992310523987,-0.1840820014476776,-0.18645545840263367,-0.1911834478378296,-0.19444873929023743,-0.19838199019432068,-0.2023506760597229,-0.20574374496936798,-0.21018409729003906,-0.21332889795303345,-0.21801145374774933,-0.22115075588226318,-0.2259119749069214,-0.2291652262210846,-0.23393920063972473,-0.23729002475738525,-0.24209696054458618,-0.24542775750160217,-0.25034987926483154,-0.2534793019294739,-0.2586488425731659,-0.2613561749458313,-0.26694440841674805,-0.2689962685108185,-0.2751891016960144,-0.2763730585575104,-0.2833440899848938,-0.28349441289901733,-0.2913866341114044,-0.29039308428764343,-0.29930567741394043,-0.2971133589744568,-0.307087779045105,-0.30369770526885986,-0.3147141635417938,-0.31017762422561646,-0.322174072265625,-0.31657397747039795,-0.3294750452041626,-0.32290157675743103,-0.3366340100765228,-0.32917243242263794,-0.34366050362586975,-0.33539602160453796,-0.3505537211894989,-0.34157902002334595,-0.35731732845306396,-0.34772777557373047,-0.3639681339263916,-0.35384660959243774,-0.37052851915359497,-0.3599322438240051,-0.3770109713077545,-0.36596933007240295,-0.38341113924980164,-0.3719328045845032,-0.38971376419067383,-0.3777962625026703,-0.395904541015625,-0.3835383355617523,-0.4019785523414612,-0.3891465663909912,-0.4079378843307495,-0.39461749792099,-0.4137786626815796,-0.3999519944190979,-0.41947999596595764,-0.4051479697227478,-0.42500901222229004,-0.4101989269256592,-0.43034130334854126,-0.41509705781936646,-0.43548041582107544,-0.419841468334198,-0.44045743346214294,-0.42443957924842834,-0.4453069567680359,-0.4289010763168335,-0.4500356912612915,-0.4332244396209717,-0.45460939407348633,-0.4373864233493805,-0.4589867889881134,-0.4413633644580841,-0.46323850750923157,-0.44523024559020996,-0.4673311710357666,-0.448950856924057,-0.47124043107032776,-0.4524918496608734,-0.47496506571769714,-0.4558508098125458,-0.47851237654685974,-0.45904505252838135,-0.4818895757198334,-0.46209385991096497,-0.48510071635246277,-0.465003103017807,-0.48814600706100464,-0.46776124835014343,-0.4910202920436859,-0.4703477919101715,-0.4937116503715515,-0.4727475941181183,-0.49620547890663147,-0.4749591052532196,-0.4984930157661438,-0.47699394822120667,-0.5005773305892944,-0.47886550426483154,-0.5024701356887817,-0.48057854175567627,-0.5041794180870056,-0.4821264445781708,-0.5057013034820557,-0.48349958658218384,-0.5070251822471619,-0.4846949577331543,-0.5081486105918884,-0.48571905493736267,-0.509087085723877,-0.48658329248428345,-0.5098643898963928,-0.48729389905929565,-0.5104926228523254,-0.4878467321395874,-0.5109565854072571,-0.48822930455207825,-0.5112249851226807,-0.48842892050743103,-0.5112738013267517,-0.4884416460990906,-0.5111058354377747,-0.4882757067680359,-0.510748028755188,-0.48794835805892944,-0.510232150554657,-0.4874734580516815,-0.5095677971839905,-0.4868512451648712,-0.5087315440177917,-0.4860653281211853,-0.507678210735321,-0.48509278893470764,-0.5063723921775818,-0.48391830921173096,-0.5048164129257202,-0.4825429618358612,-0.5030500292778015,-0.48098352551460266,-0.5011188387870789,-0.4792636036872864,-0.49903959035873413,-0.47740641236305237,-0.49679604172706604,-0.47542843222618103,-0.4943670630455017,-0.4733349680900574,-0.4917532801628113,-0.4711179733276367,-0.4889707863330841,-0.4687599241733551,-0.4860231280326843,-0.46624556183815,-0.48288673162460327,-0.46356797218322754,-0.4795306921005249,-0.4607272446155548,-0.47594529390335083,-0.4577200412750244,-0.4721463918685913,-0.45453545451164246,-0.46815428137779236,-0.45116257667541504,-0.4639756381511688,-0.44760099053382874,-0.45960667729377747,-0.4438607692718506,-0.4550493359565735,-0.43995341658592224,-0.4503166675567627,-0.43588492274284363,-0.44542694091796875,-0.43166229128837585,-0.4403962194919586,-0.42730194330215454,-0.4352371096611023,-0.4228253960609436,-0.42995357513427734,-0.41824057698249817,-0.4245334267616272,-0.4135271906852722,-0.4189499616622925,-0.40864601731300354,-0.41317906975746155,-0.4035632312297821,-0.40721848607063293,-0.3982691168785095,-0.4010874032974243,-0.3927765190601349,-0.394808292388916,-0.38710835576057434,-0.388395220041275,-0.3812902271747589,-0.38185957074165344,-0.3753519058227539,-0.3752199113368988,-0.36932194232940674,-0.3684973418712616,-0.3632151782512665,-0.36169925332069397,-0.3570241928100586,-0.3548104763031006,-0.35072851181030273,-0.34780266880989075,-0.3443145751953125,-0.34065306186676025,-0.33778634667396545,-0.33335644006729126,-0.33115726709365845,-0.3259279131889343,-0.3244384527206421,-0.318397581577301,-0.31764116883277893,-0.31079593300819397,-0.3107862174510956,-0.3031361997127533,-0.3039014935493469,-0.2954109013080597,-0.2970024645328522,-0.2876105010509491,-0.2900755703449249,-0.2797442376613617,-0.28308728337287903,-0.27183473110198975,-0.276012122631073,-0.26388534903526306,-0.2688480317592621,-0.2558617889881134,-0.2616053521633148,-0.2477174997329712,-0.2542847990989685,-0.23943772912025452,-0.24687598645687103,-0.23105037212371826,-0.23937740921974182,-0.22259145975112915,-0.23180991411209106,-0.2140737771987915,-0.22420412302017212,-0.20549969375133514,-0.2165747880935669,-0.1968955248594284,-0.20891325175762177,-0.18831145763397217,-0.20120587944984436,-0.1797809600830078,-0.19345428049564362,-0.17129217088222504,-0.18567350506782532,-0.16281338036060333,-0.17787405848503113,-0.15433865785598755,-0.17005404829978943,-0.14589308202266693,-0.16221165657043457,-0.1374913901090622,-0.1543581485748291,-0.1291087418794632,-0.1465117484331131,-0.12070388346910477,-0.1386767327785492,-0.11226113140583038,-0.13083478808403015,-0.10379426181316376,-0.12296002358198166,-0.09531185775995255,-0.115040622651577,-0.08679930120706558,-0.10708432644605637,-0.07824482023715973,-0.09910604357719421,-0.06966972351074219,-0.09111578017473221,-0.061114951968193054,-0.08311952650547028,-0.052599892020225525,-0.0751243606209755,-0.04410962760448456,-0.06713724881410599,-0.03562984615564346,-0.05916077643632889,-0.027179516851902008,-0.05119534954428673,-0.01879652589559555,-0.04324730113148689,-0.010496310889720917,-0.03532908856868744,-0.002260833978652954,-0.027447693049907684,0.0059290193021297455,-0.019598383456468582,0.014061875641345978,-0.011778898537158966,0.022105101495981216,-0.004013461992144585,0.03003648668527603,0.0036457106471061707,0.03785426914691925,0.011150557547807693,0.04555843397974968,0.018492722883820534,0.053134094923734665,0.02570323459804058,0.060557737946510315,0.03281550854444504,0.06780894100666046,0.039834704250097275,0.07486822456121445,0.04675022140145302,0.0817132443189621,0.053574249148368835,0.08833374828100204,0.060355111956596375,0.0947575718164444,0.06714500486850739,0.10105312615633011,0.07395663857460022,0.10729896277189255,0.08076008409261703,0.11355335265398026,0.0875229686498642,0.11985470354557037,0.09424670785665512,0.12623825669288635,0.10095816850662231,0.1327301263809204,0.10766972601413727,0.1393246352672577,0.11436689645051956,0.14602354168891907,0.12108242511749268,0.15275464951992035,0.12784253060817719,0.15944001078605652,0.13467952609062195,0.166034996509552,0.1416047364473343,0.17252594232559204,0.1485820859670639,0.17891503870487213,0.15553797781467438,0.18521401286125183,0.162397101521492,0.19144229590892792,0.1691051870584488,0.19761662185192108,0.1756211370229721,0.20373423397541046,0.1818981170654297,0.20976819097995758,0.18788672983646393,0.21567688882350922,0.19356295466423035,0.22141236066818237,0.1989491879940033,0.22691985964775085,0.20410071313381195,0.23214197158813477,0.2090718001127243,0.23703992366790771,0.2138986885547638,0.24161241948604584,0.21860937774181366,0.24588878452777863,0.2232365906238556,0.24990510940551758,0.2278122901916504,0.25369614362716675,0.23235124349594116,0.25730907917022705,0.23684369027614594,0.2608065903186798,0.24126189947128296,0.26424169540405273,0.24557729065418243,0.26763802766799927,0.2497827410697937,0.2710042893886566,0.2539080083370209,0.2743600904941559,0.2580043077468872,0.27772846817970276,0.2621048092842102,0.28109848499298096,0.2662014663219452,0.2844138741493225,0.27026814222335815,0.28761327266693115,0.27430057525634766,0.2906782627105713,0.2783187925815582,0.2936345636844635,0.2823316752910614,0.29650774598121643,0.28631120920181274,0.2992847263813019,0.2902001440525055,0.30191662907600403,0.29392778873443604,0.30435478687286377,0.2974175214767456,0.3065836429595947,0.3006058931350708,0.30862122774124146,0.30347740650177,0.31049442291259766,0.306072473526001,0.312222421169281,0.3084503412246704,0.31383374333381653,0.31065377593040466,0.3153923749923706,0.31272828578948975,0.31698936223983765,0.31476086378097534,0.3186992406845093,0.3168686330318451,0.3205533027648926,0.31914153695106506,0.3225567936897278,0.3216134309768677,0.3247084319591522,0.324289470911026,0.3269837200641632,0.3271740972995758,0.3293130397796631,0.33025112748146057,0.33160120248794556,0.3334524631500244,0.3337690830230713,0.3366631269454956,0.3357566297054291,0.33975350856781006,0.33749690651893616,0.34260159730911255,0.3389246463775635,0.3451049029827118,0.34002384543418884,0.3472021222114563,0.34083592891693115,0.3488919138908386,0.34139955043792725,0.3502168655395508,0.3416992127895355,0.35122162103652954,0.3416895866394043,0.35192933678627014,0.3413449227809906,0.3523486256599426,0.3406597077846527,0.35248973965644836,0.3396291136741638,0.3523767590522766,0.3382820785045624,0.352059006690979,0.3367357850074768,0.35161373019218445,0.33517172932624817,0.3511255085468292,0.3337372839450836,0.35066133737564087,0.33248984813690186,0.3502699136734009,0.33143895864486694,0.3499961793422699,0.33060356974601746,0.34987717866897583,0.33000418543815613,0.3499266803264618,0.3296352028846741,0.3501513600349426,0.32948991656303406,0.350592702627182,0.329603374004364,0.3513304591178894,0.33003976941108704,0.35242897272109985,0.33083397150039673,0.35388806462287903,0.3319631814956665,0.35565000772476196,0.3333580195903778,0.35762736201286316,0.334903359413147,0.35970258712768555,0.33642998337745667,0.3617240786552429,0.3377501368522644,0.3635392487049103,0.33872780203819275,0.365033894777298,0.3393082618713379,0.36612892150878906,0.33948349952697754,0.3667609691619873,0.339260458946228,0.3669013977050781,0.33867549896240234,0.366586297750473,0.3378073573112488,0.3658924102783203,0.33674895763397217,0.364884614944458,0.3355695903301239,0.3636193573474884,0.33430618047714233,0.36218708753585815,0.33296605944633484,0.3606922924518585,0.3315345048904419,0.35918036103248596,0.3300207853317261,0.35764509439468384,0.3285069167613983,0.35611510276794434,0.3270561099052429,0.3546077311038971,0.3254457414150238,0.352856308221817,0.3229660391807556,0.350090354681015,0.3185683786869049,0.3452148139476776,0.3112976551055908,0.33729299902915955,0.30062180757522583,0.32587888836860657,0.28643596172332764,0.3109724819660187,0.2689546048641205,0.2928783595561981,0.24881073832511902,0.2723010778427124,0.22731277346611023,0.25058284401893616,0.20648010075092316,0.22969430685043335,0.18861271440982819,0.21180330216884613,0.17556962370872498,0.1986304223537445,0.1681668758392334,0.19092623889446259,0.1659921258687973,0.18827880918979645,0.16763757169246674,0.18928979337215424,0.17113277316093445,0.19200463593006134,0.1743386834859848,0.1943642944097519,0.175251305103302,0.19451621174812317,0.17233914136886597,0.1910596489906311,0.16496074199676514,0.18336881697177887,0.15363140404224396,0.17187567055225372,0.1398496776819229,0.157985121011734,0.12555719912052155,0.1435789316892624,0.11268371343612671,0.13053175806999207,0.10308875143527985,0.12063667923212051,0.09868810325860977,0.11577457934617996,0.10131668299436569,0.11781617254018784,0.11223071813583374,0.12809985876083374,0.1316116750240326,0.14688126742839813,0.15844237804412842,0.17319311201572418,0.19076986610889435,0.20511654019355774,0.2261192500591278,0.24018003046512604,0.2618753910064697,0.2757151126861572)\n\
+\n\
+]);\n\
+\n\
+function runTest(test, iterations) {\n\
+ for (var i = 0; i < iterations; i++) {\n\
+ test();\n\
+ }\n\
+}\n\
+\n\
+/* \n\
+ * DSP.js - a comprehensive digital signal processing library for javascript \n\
+ * \n\
+ * Created by Corban Brook <corbanbrook@gmail.com> on 2010-01-01.\n\
+ * Copyright 2010 Corban Brook. All rights reserved.\n\
+ *\n\
+ */\n\
+\n\
+////////////////////////////////////////////////////////////////////////////////\n\
+// CONSTANTS //\n\
+////////////////////////////////////////////////////////////////////////////////\n\
+\n\
+/**\n\
+ * DSP is an object which contains general purpose utility functions and constants\n\
+ */\n\
+DSP = {\n\
+ // Channels\n\
+ LEFT: 0,\n\
+ RIGHT: 1,\n\
+ MIX: 2,\n\
+\n\
+ // Waveforms\n\
+ SINE: 1,\n\
+ TRIANGLE: 2,\n\
+ SAW: 3,\n\
+ SQUARE: 4,\n\
+\n\
+ // Filters \n\
+ LOWPASS: 0,\n\
+ HIGHPASS: 1,\n\
+ BANDPASS: 2,\n\
+ NOTCH: 3,\n\
+\n\
+ // Window functions\n\
+ BARTLETT: 1,\n\
+ BARTLETTHANN: 2,\n\
+ BLACKMAN: 3,\n\
+ COSINE: 4,\n\
+ GAUSS: 5,\n\
+ HAMMING: 6,\n\
+ HANN: 7,\n\
+ LANCZOS: 8,\n\
+ RECTANGULAR: 9,\n\
+ TRIANGULAR: 10,\n\
+\n\
+ // Loop modes\n\
+ OFF: 0,\n\
+ FW: 1,\n\
+ BW: 2,\n\
+ FWBW: 3,\n\
+\n\
+ // Math\n\
+ TWO_PI: 2*Math.PI\n\
+};\n\
+\n\
+////////////////////////////////////////////////////////////////////////////////\n\
+// DSP UTILITY FUNCTIONS //\n\
+////////////////////////////////////////////////////////////////////////////////\n\
+\n\
+/**\n\
+ * Inverts the phase of a signal\n\
+ *\n\
+ * @param {Array} buffer A sample buffer\n\
+ *\n\
+ * @returns The inverted sample buffer\n\
+ */\n\
+DSP.invert = function(buffer) {\n\
+ for ( var i = 0, len = buffer.length; i < len; i++ ) {\n\
+ buffer[i] *= -1;\n\
+ }\n\
+\n\
+ return buffer;\n\
+};\n\
+\n\
+/**\n\
+ * Converts split-stereo (dual mono) sample buffers into a stereo interleaved sample buffer\n\
+ *\n\
+ * @param {Array} left A sample buffer\n\
+ * @param {Array} right A sample buffer\n\
+ *\n\
+ * @returns The stereo interleaved buffer\n\
+ */\n\
+DSP.interleave = function(left, right) {\n\
+ if ( left.length !== right.length ) {\n\
+ throw \"Can not interleave. Channel lengths differ.\";\n\
+ }\n\
+ \n\
+ var stereoInterleaved = new Array(left.length * 2);\n\
+ \n\
+ for (var i = 0, len = left.length; i < len; i++ ) {\n\
+ stereoInterleaved[2*i] = left[i];\n\
+ stereoInterleaved[2*i+1] = right[i];\n\
+ }\n\
+ \n\
+ return stereoInterleaved;\n\
+};\n\
+\n\
+/**\n\
+ * Converts a stereo-interleaved sample buffer into split-stereo (dual mono) sample buffers\n\
+ *\n\
+ * @param {Array} buffer A stereo-interleaved sample buffer\n\
+ *\n\
+ * @returns an Array containing left and right channels\n\
+ */\n\
+DSP.deinterleave = function(buffer) {\n\
+ var left = new Array(buffer.length/2);\n\
+ var right = new Array(buffer.length/2);\n\
+ var mix = new Array(buffer.length/2);\n\
+ \n\
+ for (var i = 0, len = buffer.length/2; i < len; i ++ ) {\n\
+ left[i] = buffer[2*i];\n\
+ right[i] = buffer[2*i+1];\n\
+ mix[i] = (left[i] + right[i]) / 2;\n\
+ }\n\
+ \n\
+ return [left, right, mix];\n\
+};\n\
+\n\
+/**\n\
+ * Separates a channel from a stereo-interleaved sample buffer\n\
+ *\n\
+ * @param {Array} buffer A stereo-interleaved sample buffer\n\
+ * @param {Number} channel A channel constant (LEFT, RIGHT, MIX)\n\
+ *\n\
+ * @returns an Array containing a signal mono sample buffer\n\
+ */\n\
+DSP.getChannel = function(channel, buffer) {\n\
+ return DSP.deinterleave(buffer)[channel];\n\
+};\n\
+\n\
+// Biquad filter types\n\
+DSP.LPF = 0; // H(s) = 1 / (s^2 + s/Q + 1)\n\
+DSP.HPF = 1; // H(s) = s^2 / (s^2 + s/Q + 1)\n\
+DSP.BPF_CONSTANT_SKIRT = 2; // H(s) = s / (s^2 + s/Q + 1) (constant skirt gain, peak gain = Q)\n\
+DSP.BPF_CONSTANT_PEAK = 3; // H(s) = (s/Q) / (s^2 + s/Q + 1) (constant 0 dB peak gain)\n\
+DSP.NOTCH = 4; // H(s) = (s^2 + 1) / (s^2 + s/Q + 1)\n\
+DSP.APF = 5; // H(s) = (s^2 - s/Q + 1) / (s^2 + s/Q + 1)\n\
+DSP.PEAKING_EQ = 6; // H(s) = (s^2 + s*(A/Q) + 1) / (s^2 + s/(A*Q) + 1)\n\
+DSP.LOW_SHELF = 7; // H(s) = A * (s^2 + (sqrt(A)/Q)*s + A)/(A*s^2 + (sqrt(A)/Q)*s + 1)\n\
+DSP.HIGH_SHELF = 8; // H(s) = A * (A*s^2 + (sqrt(A)/Q)*s + 1)/(s^2 + (sqrt(A)/Q)*s + A)\n\
+\n\
+// Biquad filter parameter types\n\
+DSP.Q = 1;\n\
+DSP.BW = 2; // SHARED with BACKWARDS LOOP MODE\n\
+DSP.S = 3;\n\
+\n\
+\n\
+/** \n\
+ * DFT is a class for calculating the Discrete Fourier Transform of a signal.\n\
+ *\n\
+ * @param {Number} bufferSize The size of the sample buffer to be computed\n\
+ * @param {Number} sampleRate The sampleRate of the buffer (eg. 44100)\n\
+ *\n\
+ * @constructor\n\
+ */\n\
+DFT = function(bufferSize, sampleRate) {\n\
+ this.bufferSize = bufferSize;\n\
+ this.sampleRate = sampleRate;\n\
+\n\
+ var N = bufferSize/2 * bufferSize;\n\
+ \n\
+ this.sinTable = new Array(N);\n\
+ this.cosTable = new Array(N);\n\
+ \n\
+ for ( var i = 0; i < N; i++ ) {\n\
+ this.sinTable[i] = Math.sin(i * DSP.TWO_PI / bufferSize);\n\
+ this.cosTable[i] = Math.cos(i * DSP.TWO_PI / bufferSize);\n\
+ }\n\
+ \n\
+ this.spectrum = new Array(bufferSize/2);\n\
+ this.complexValues = new Array(bufferSize/2);\n\
+};\n\
+\n\
+/**\n\
+ * Performs a forward tranform on the sample buffer. \n\
+ * Converts a time domain signal to frequency domain spectra.\n\
+ *\n\
+ * @param {Array} buffer The sample buffer\n\
+ *\n\
+ * @returns The frequency spectrum array\n\
+ */\n\
+DFT.prototype.forward = function(buffer) {\n\
+ var real, imag;\n\
+\n\
+ for ( var k = 0; k < this.bufferSize/2; k++ ) {\n\
+ real = 0.0;\n\
+ imag = 0.0;\n\
+\n\
+ for ( var n = 0; n < buffer.length; n++ ) {\n\
+ real += this.cosTable[k*n] * buffer[n];\n\
+ imag += this.sinTable[k*n] * buffer[n];\n\
+ }\n\
+\n\
+ this.complexValues[k] = {real: real, imag: imag};\n\
+ }\n\
+ \n\
+ for ( var i = 0; i < this.bufferSize/2; i++ ) {\n\
+ this.spectrum[i] = 2 * Math.sqrt(Math.pow(this.complexValues[i].real, 2) + Math.pow(this.complexValues[i].imag, 2)) / this.bufferSize;\n\
+ }\n\
+\n\
+ return this.spectrum;\n\
+};\n\
+\n\
+\n\
+/** \n\
+ * FFT is a class for calculating the Discrete Fourier Transform of a signal \n\
+ * with the Fast Fourier Transform algorithm.\n\
+ *\n\
+ * @param {Number} bufferSize The size of the sample buffer to be computed. Must be power of 2\n\
+ * @param {Number} sampleRate The sampleRate of the buffer (eg. 44100)\n\
+ *\n\
+ * @constructor\n\
+ */\n\
+FFT = function(bufferSize, sampleRate) {\n\
+ this.bufferSize = bufferSize;\n\
+ this.sampleRate = sampleRate;\n\
+ this.spectrum = new Array(bufferSize/2);\n\
+ this.real = new Array(bufferSize);\n\
+ this.imag = new Array(bufferSize);\n\
+ \n\
+ this.reverseTable = new Array(bufferSize);\n\
+\n\
+ var limit = 1;\n\
+ var bit = bufferSize >> 1;\n\
+\n\
+ while ( limit < bufferSize ) {\n\
+ for ( var i = 0; i < limit; i++ ) {\n\
+ this.reverseTable[i + limit] = this.reverseTable[i] + bit;\n\
+ }\n\
+\n\
+ limit = limit << 1;\n\
+ bit = bit >> 1;\n\
+ }\n\
+\n\
+ this.sinTable = new Array(bufferSize);\n\
+ this.cosTable = new Array(bufferSize);\n\
+\n\
+ for ( var i = 0; i < bufferSize; i++ ) {\n\
+ this.sinTable[i] = Math.sin(-Math.PI/i);\n\
+ this.cosTable[i] = Math.cos(-Math.PI/i);\n\
+ }\n\
+};\n\
+\n\
+/**\n\
+ * Performs a forward tranform on the sample buffer. \n\
+ * Converts a time domain signal to frequency domain spectra.\n\
+ *\n\
+ * @param {Array} buffer The sample buffer. Buffer Length must be power of 2\n\
+ *\n\
+ * @returns The frequency spectrum array\n\
+ */\n\
+FFT.prototype.forward = function(buffer) {\n\
+ // Locally scope variables for speed up\n\
+ var bufferSize = this.bufferSize,\n\
+ cosTable = this.cosTable,\n\
+ sinTable = this.sinTable,\n\
+ reverseTable = this.reverseTable,\n\
+ real = this.real,\n\
+ imag = this.imag,\n\
+ spectrum = this.spectrum;\n\
+\n\
+ var k = Math.floor(Math.log(bufferSize) / Math.LN2);\n\
+ if ( Math.pow(2, k) !== bufferSize ) { throw \"Invalid buffer size, must be a power of 2.\"; }\n\
+ if ( bufferSize !== buffer.length ) { throw \"Supplied buffer is not the same size as defined FFT. FFT Size: \" + bufferSize + \" Buffer Size: \" + buffer.length; }\n\
+\n\
+ for ( var i = 0; i < bufferSize; i++ ) {\n\
+ real[i] = buffer[reverseTable[i]];\n\
+ imag[i] = 0;\n\
+ }\n\
+\n\
+ var halfSize = 1, \n\
+ phaseShiftStepReal, \n\
+ phaseShiftStepImag, \n\
+ currentPhaseShiftReal, \n\
+ currentPhaseShiftImag, \n\
+ off, \n\
+ tr, \n\
+ ti, \n\
+ tmpReal, \n\
+ i;\n\
+\n\
+ while ( halfSize < bufferSize ) {\n\
+ phaseShiftStepReal = cosTable[halfSize];\n\
+ phaseShiftStepImag = sinTable[halfSize];\n\
+ currentPhaseShiftReal = 1;\n\
+ currentPhaseShiftImag = 0;\n\
+\n\
+ for ( var fftStep = 0; fftStep < halfSize; fftStep++ ) {\n\
+ i = fftStep;\n\
+\n\
+ while ( i < bufferSize ) {\n\
+ off = i + halfSize;\n\
+ tr = (currentPhaseShiftReal * real[off]) - (currentPhaseShiftImag * imag[off]);\n\
+ ti = (currentPhaseShiftReal * imag[off]) + (currentPhaseShiftImag * real[off]);\n\
+\n\
+ real[off] = real[i] - tr;\n\
+ imag[off] = imag[i] - ti;\n\
+ real[i] += tr;\n\
+ imag[i] += ti;\n\
+\n\
+ i += halfSize << 1;\n\
+ }\n\
+\n\
+ tmpReal = currentPhaseShiftReal;\n\
+ currentPhaseShiftReal = (tmpReal * phaseShiftStepReal) - (currentPhaseShiftImag * phaseShiftStepImag);\n\
+ currentPhaseShiftImag = (tmpReal * phaseShiftStepImag) + (currentPhaseShiftImag * phaseShiftStepReal);\n\
+ }\n\
+\n\
+ halfSize = halfSize << 1;\n\
+ }\n\
+\n\
+ i = bufferSize/2;\n\
+ while(i--) {\n\
+ spectrum[i] = 2 * Math.sqrt(real[i] * real[i] + imag[i] * imag[i]) / bufferSize;\n\
+ }\n\
+\n\
+ return spectrum;\n\
+};\n\
+\n\
+FFT.prototype.inverse = function(real, imag) {\n\
+ // Locally scope variables for speed up\n\
+ var bufferSize = this.bufferSize,\n\
+ cosTable = this.cosTable,\n\
+ sinTable = this.sinTable,\n\
+ reverseTable = this.reverseTable,\n\
+ spectrum = this.spectrum;\n\
+ \n\
+ real = real || this.real;\n\
+ imag = imag || this.imag;\n\
+\n\
+ for (var i = 0; i < bufferSize; i++) {\n\
+ imag[i] *= -1;\n\
+ }\n\
+\n\
+ var revReal = new Array(bufferSize);\n\
+ var revImag = new Array(bufferSize);\n\
+ \n\
+ for (var i = 0; i < real.length; i++) {\n\
+ revReal[i] = real[reverseTable[i]];\n\
+ revImag[i] = imag[reverseTable[i]];\n\
+ }\n\
+ \n\
+ real = revReal;\n\
+ imag = revImag;\n\
+\n\
+ var halfSize = 1, \n\
+ phaseShiftStepReal, \n\
+ phaseShiftStepImag, \n\
+ currentPhaseShiftReal, \n\
+ currentPhaseShiftImag, \n\
+ off, \n\
+ tr, \n\
+ ti, \n\
+ tmpReal, \n\
+ i;\n\
+\n\
+ while ( halfSize < bufferSize ) {\n\
+ phaseShiftStepReal = cosTable[halfSize];\n\
+ phaseShiftStepImag = sinTable[halfSize];\n\
+ currentPhaseShiftReal = 1;\n\
+ currentPhaseShiftImag = 0;\n\
+\n\
+ for ( var fftStep = 0; fftStep < halfSize; fftStep++ ) {\n\
+ i = fftStep;\n\
+\n\
+ while ( i < bufferSize ) {\n\
+ off = i + halfSize;\n\
+ tr = (currentPhaseShiftReal * real[off]) - (currentPhaseShiftImag * imag[off]);\n\
+ ti = (currentPhaseShiftReal * imag[off]) + (currentPhaseShiftImag * real[off]);\n\
+\n\
+ real[off] = real[i] - tr;\n\
+ imag[off] = imag[i] - ti;\n\
+ real[i] += tr;\n\
+ imag[i] += ti;\n\
+\n\
+ i += halfSize << 1;\n\
+ }\n\
+\n\
+ tmpReal = currentPhaseShiftReal;\n\
+ currentPhaseShiftReal = (tmpReal * phaseShiftStepReal) - (currentPhaseShiftImag * phaseShiftStepImag);\n\
+ currentPhaseShiftImag = (tmpReal * phaseShiftStepImag) + (currentPhaseShiftImag * phaseShiftStepReal);\n\
+ }\n\
+\n\
+ halfSize = halfSize << 1;\n\
+ }\n\
+\n\
+ var buffer = new Array(bufferSize);\n\
+ for (var i = 0; i < bufferSize; i++) {\n\
+ buffer[i] = real[i] / bufferSize;\n\
+ }\n\
+\n\
+ return buffer;\n\
+};\n\
+\n\
+Sampler = function Sampler(file, bufferSize, sampleRate, playStart, playEnd, loopStart, loopEnd, loopMode) {\n\
+ this.file = file;\n\
+ this.bufferSize = bufferSize;\n\
+ this.sampleRate = sampleRate;\n\
+ this.playStart = playStart || 0; // 0%\n\
+ this.playEnd = playEnd || 1; // 100%\n\
+ this.loopStart = loopStart || 0;\n\
+ this.loopEnd = loopEnd || 1;\n\
+ this.loopMode = loopMode || DSP.OFF;\n\
+ this.loaded = false;\n\
+ this.samples = [];\n\
+ this.signal = new Array(bufferSize);\n\
+ this.frameCount = 0;\n\
+ this.envelope = null;\n\
+ this.amplitude = 1;\n\
+ this.rootFrequency = 110; // A2 110\n\
+ this.frequency = 550;\n\
+ this.step = this.frequency / this.rootFrequency;\n\
+ this.duration = 0;\n\
+ this.samplesProcessed = 0;\n\
+ this.playhead = 0;\n\
+ \n\
+ var audio = /* new Audio();*/ document.createElement(\"AUDIO\");\n\
+ var self = this;\n\
+ \n\
+ this.loadSamples = function(event) {\n\
+ var buffer = DSP.getChannel(DSP.MIX, event.frameBuffer);\n\
+ for ( var i = 0; i < buffer.length; i++) {\n\
+ self.samples.push(buffer[i]);\n\
+ }\n\
+ };\n\
+ \n\
+ this.loadComplete = function() {\n\
+ // convert flexible js array into a fast typed array\n\
+ self.samples = new Array(self.samples);\n\
+ self.loaded = true;\n\
+ };\n\
+ \n\
+ this.loadMetaData = function() {\n\
+ self.duration = audio.duration;\n\
+ };\n\
+ \n\
+ audio.addEventListener(\"MozAudioAvailable\", this.loadSamples, false);\n\
+ audio.addEventListener(\"loadedmetadata\", this.loadMetaData, false)\n\
+ audio.addEventListener(\"ended\", this.loadComplete, false);\n\
+ audio.muted = true;\n\
+ audio.src = file;\n\
+ audio.play();\n\
+};\n\
+\n\
+Sampler.prototype.applyEnvelope = function() {\n\
+ this.envelope.process(this.signal);\n\
+ return this.signal;\n\
+};\n\
+\n\
+Sampler.prototype.generate = function() {\n\
+ var frameOffset = this.frameCount * this.bufferSize;\n\
+ \n\
+ var loopWidth = this.playEnd * this.samples.length - this.playStart * this.samples.length;\n\
+ var playStartSamples = this.playStart * this.samples.length; // ie 0.5 -> 50% of the length\n\
+ var playEndSamples = this.playEnd * this.samples.length; // ie 0.5 -> 50% of the length\n\
+ var offset;\n\
+\n\
+ for ( var i = 0; i < this.bufferSize; i++ ) {\n\
+ switch (this.loopMode) {\n\
+ case DSP.OFF:\n\
+ this.playhead = Math.round(this.samplesProcessed * this.step + playStartSamples);\n\
+ if (this.playhead < (this.playEnd * this.samples.length) ) {\n\
+ this.signal[i] = this.samples[this.playhead] * this.amplitude;\n\
+ } else {\n\
+ this.signal[i] = 0;\n\
+ }\n\
+ break;\n\
+ \n\
+ case DSP.FW:\n\
+ this.playhead = Math.round((this.samplesProcessed * this.step) % loopWidth + playStartSamples);\n\
+ if (this.playhead < (this.playEnd * this.samples.length) ) {\n\
+ this.signal[i] = this.samples[this.playhead] * this.amplitude;\n\
+ }\n\
+ break;\n\
+ \n\
+ case DSP.BW:\n\
+ this.playhead = playEndSamples - Math.round((this.samplesProcessed * this.step) % loopWidth);\n\
+ if (this.playhead < (this.playEnd * this.samples.length) ) {\n\
+ this.signal[i] = this.samples[this.playhead] * this.amplitude;\n\
+ }\n\
+ break;\n\
+ \n\
+ case DSP.FWBW:\n\
+ if ( Math.floor(this.samplesProcessed * this.step / loopWidth) % 2 == 0 ) {\n\
+ this.playhead = Math.round((this.samplesProcessed * this.step) % loopWidth + playStartSamples);\n\
+ } else {\n\
+ this.playhead = playEndSamples - Math.round((this.samplesProcessed * this.step) % loopWidth);\n\
+ } \n\
+ if (this.playhead < (this.playEnd * this.samples.length) ) {\n\
+ this.signal[i] = this.samples[this.playhead] * this.amplitude;\n\
+ }\n\
+ break;\n\
+ }\n\
+ this.samplesProcessed++;\n\
+ }\n\
+\n\
+ this.frameCount++;\n\
+\n\
+ return this.signal;\n\
+};\n\
+\n\
+Sampler.prototype.setFreq = function(frequency) {\n\
+ this.frequency = frequency;\n\
+ this.step = this.frequency / this.rootFrequency;\n\
+};\n\
+\n\
+Sampler.prototype.reset = function() {\n\
+ this.samplesProcessed = 0;\n\
+ this.playhead = 0;\n\
+};\n\
+\n\
+/**\n\
+ * Oscillator class for generating and modifying signals\n\
+ *\n\
+ * @param {Number} type A waveform constant (eg. DSP.SINE)\n\
+ * @param {Number} frequency Initial frequency of the signal\n\
+ * @param {Number} amplitude Initial amplitude of the signal\n\
+ * @param {Number} bufferSize Size of the sample buffer to generate\n\
+ * @param {Number} sampleRate The sample rate of the signal\n\
+ *\n\
+ * @contructor\n\
+ */\n\
+Oscillator = function Oscillator(type, frequency, amplitude, bufferSize, sampleRate) {\n\
+ this.frequency = frequency;\n\
+ this.amplitude = amplitude;\n\
+ this.bufferSize = bufferSize;\n\
+ this.sampleRate = sampleRate;\n\
+ //this.pulseWidth = pulseWidth;\n\
+ this.frameCount = 0;\n\
+ \n\
+ this.waveTableLength = 2048;\n\
+\n\
+ this.cyclesPerSample = frequency / sampleRate;\n\
+\n\
+ this.signal = new Array(bufferSize);\n\
+ this.envelope = null;\n\
+\n\
+ switch(parseInt(type)) {\n\
+ case DSP.TRIANGLE:\n\
+ this.func = Oscillator.Triangle;\n\
+ break;\n\
+\n\
+ case DSP.SAW:\n\
+ this.func = Oscillator.Saw;\n\
+ break;\n\
+\n\
+ case DSP.SQUARE:\n\
+ this.func = Oscillator.Square;\n\
+ break;\n\
+\n\
+ case DSP.SINE:\n\
+ default:\n\
+ this.func = Oscillator.Sine;\n\
+ break;\n\
+ }\n\
+\n\
+ this.generateWaveTable = function() {\n\
+ Oscillator.waveTable[this.func] = new Array(2048);\n\
+ var waveTableTime = this.waveTableLength / this.sampleRate;\n\
+ var waveTableHz = 1 / waveTableTime;\n\
+\n\
+ for (var i = 0; i < this.waveTableLength; i++) {\n\
+ Oscillator.waveTable[this.func][i] = this.func(i * waveTableHz/this.sampleRate);\n\
+ }\n\
+ };\n\
+\n\
+ if ( typeof Oscillator.waveTable === 'undefined' ) {\n\
+ Oscillator.waveTable = {};\n\
+ }\n\
+\n\
+ if ( typeof Oscillator.waveTable[this.func] === 'undefined' ) { \n\
+ this.generateWaveTable();\n\
+ }\n\
+ \n\
+ this.waveTable = Oscillator.waveTable[this.func];\n\
+}; \n\
+\n\
+/**\n\
+ * Set the amplitude of the signal\n\
+ *\n\
+ * @param {Number} amplitude The amplitude of the signal (between 0 and 1)\n\
+ */\n\
+Oscillator.prototype.setAmp = function(amplitude) {\n\
+ if (amplitude >= 0 && amplitude <= 1) {\n\
+ this.amplitude = amplitude;\n\
+ } else {\n\
+ throw \"Amplitude out of range (0..1).\";\n\
+ }\n\
+};\n\
+ \n\
+/**\n\
+ * Set the frequency of the signal\n\
+ * \n\
+ * @param {Number} frequency The frequency of the signal\n\
+ */ \n\
+Oscillator.prototype.setFreq = function(frequency) {\n\
+ this.frequency = frequency;\n\
+ this.cyclesPerSample = frequency / this.sampleRate;\n\
+};\n\
+ \n\
+// Add an oscillator\n\
+Oscillator.prototype.add = function(oscillator) {\n\
+ for ( var i = 0; i < this.bufferSize; i++ ) {\n\
+ //this.signal[i] += oscillator.valueAt(i);\n\
+ this.signal[i] += oscillator.signal[i];\n\
+ }\n\
+ \n\
+ return this.signal;\n\
+};\n\
+ \n\
+// Add a signal to the current generated osc signal\n\
+Oscillator.prototype.addSignal = function(signal) {\n\
+ for ( var i = 0; i < signal.length; i++ ) {\n\
+ if ( i >= this.bufferSize ) {\n\
+ break;\n\
+ }\n\
+ this.signal[i] += signal[i];\n\
+ \n\
+ /*\n\
+ // Constrain amplitude\n\
+ if ( this.signal[i] > 1 ) {\n\
+ this.signal[i] = 1;\n\
+ } else if ( this.signal[i] < -1 ) {\n\
+ this.signal[i] = -1;\n\
+ }\n\
+ */\n\
+ }\n\
+ return this.signal;\n\
+};\n\
+ \n\
+// Add an envelope to the oscillator\n\
+Oscillator.prototype.addEnvelope = function(envelope) {\n\
+ this.envelope = envelope;\n\
+};\n\
+\n\
+Oscillator.prototype.applyEnvelope = function() {\n\
+ this.envelope.process(this.signal);\n\
+};\n\
+ \n\
+Oscillator.prototype.valueAt = function(offset) {\n\
+ return this.waveTable[offset % this.waveTableLength];\n\
+};\n\
+ \n\
+Oscillator.prototype.generate = function() {\n\
+ var frameOffset = this.frameCount * this.bufferSize;\n\
+ var step = this.waveTableLength * this.frequency / this.sampleRate;\n\
+ var offset;\n\
+\n\
+ for ( var i = 0; i < this.bufferSize; i++ ) {\n\
+ //var step = (frameOffset + i) * this.cyclesPerSample % 1;\n\
+ //this.signal[i] = this.func(step) * this.amplitude;\n\
+ //this.signal[i] = this.valueAt(Math.round((frameOffset + i) * step)) * this.amplitude; \n\
+ offset = Math.round((frameOffset + i) * step);\n\
+ this.signal[i] = this.waveTable[offset % this.waveTableLength] * this.amplitude;\n\
+ }\n\
+\n\
+ this.frameCount++;\n\
+\n\
+ return this.signal;\n\
+};\n\
+\n\
+Oscillator.Sine = function(step) {\n\
+ return Math.sin(DSP.TWO_PI * step);\n\
+};\n\
+\n\
+Oscillator.Square = function(step) {\n\
+ return step < 0.5 ? 1 : -1;\n\
+};\n\
+\n\
+Oscillator.Saw = function(step) {\n\
+ return 2 * (step - Math.round(step));\n\
+};\n\
+\n\
+Oscillator.Triangle = function(step) {\n\
+ return 1 - 4 * Math.abs(Math.round(step) - step);\n\
+};\n\
+\n\
+Oscillator.Pulse = function(step) {\n\
+ // stub\n\
+};\n\
+ \n\
+ADSR = function(attackLength, decayLength, sustainLevel, sustainLength, releaseLength, sampleRate) {\n\
+ this.sampleRate = sampleRate;\n\
+ // Length in seconds\n\
+ this.attackLength = attackLength;\n\
+ this.decayLength = decayLength;\n\
+ this.sustainLevel = sustainLevel;\n\
+ this.sustainLength = sustainLength;\n\
+ this.releaseLength = releaseLength;\n\
+ this.sampleRate = sampleRate;\n\
+ \n\
+ // Length in samples\n\
+ this.attackSamples = attackLength * sampleRate;\n\
+ this.decaySamples = decayLength * sampleRate;\n\
+ this.sustainSamples = sustainLength * sampleRate;\n\
+ this.releaseSamples = releaseLength * sampleRate;\n\
+ \n\
+ // Updates the envelope sample positions\n\
+ this.update = function() {\n\
+ this.attack = this.attackSamples;\n\
+ this.decay = this.attack + this.decaySamples;\n\
+ this.sustain = this.decay + this.sustainSamples;\n\
+ this.release = this.sustain + this.releaseSamples;\n\
+ };\n\
+ \n\
+ this.update();\n\
+ \n\
+ this.samplesProcessed = 0;\n\
+};\n\
+\n\
+\n\
+ADSR.prototype.noteOn = function() {\n\
+ this.samplesProcessed = 0;\n\
+ this.sustainSamples = this.sustainLength * this.sampleRate;\n\
+ this.update();\n\
+};\n\
+\n\
+// Send a note off when using a sustain of infinity to let the envelope enter the release phase\n\
+ADSR.prototype.noteOff = function() {\n\
+ this.sustainSamples = this.samplesProcessed - this.decaySamples;\n\
+ this.update();\n\
+};\n\
+\n\
+ADSR.prototype.processSample = function(sample) {\n\
+ var amplitude = 0;\n\
+\n\
+ if ( this.samplesProcessed <= this.attack ) {\n\
+ amplitude = 0 + (1 - 0) * ((this.samplesProcessed - 0) / (this.attack - 0));\n\
+ } else if ( this.samplesProcessed > this.attack && this.samplesProcessed <= this.decay ) {\n\
+ amplitude = 1 + (this.sustainLevel - 1) * ((this.samplesProcessed - this.attack) / (this.decay - this.attack));\n\
+ } else if ( this.samplesProcessed > this.decay && this.samplesProcessed <= this.sustain ) {\n\
+ amplitude = this.sustainLevel;\n\
+ } else if ( this.samplesProcessed > this.sustain && this.samplesProcessed <= this.release ) {\n\
+ amplitude = this.sustainLevel + (0 - this.sustainLevel) * ((this.samplesProcessed - this.sustain) / (this.release - this.sustain));\n\
+ }\n\
+ \n\
+ return sample * amplitude;\n\
+};\n\
+\n\
+ADSR.prototype.value = function() {\n\
+ var amplitude = 0;\n\
+\n\
+ if ( this.samplesProcessed <= this.attack ) {\n\
+ amplitude = 0 + (1 - 0) * ((this.samplesProcessed - 0) / (this.attack - 0));\n\
+ } else if ( this.samplesProcessed > this.attack && this.samplesProcessed <= this.decay ) {\n\
+ amplitude = 1 + (this.sustainLevel - 1) * ((this.samplesProcessed - this.attack) / (this.decay - this.attack));\n\
+ } else if ( this.samplesProcessed > this.decay && this.samplesProcessed <= this.sustain ) {\n\
+ amplitude = this.sustainLevel;\n\
+ } else if ( this.samplesProcessed > this.sustain && this.samplesProcessed <= this.release ) {\n\
+ amplitude = this.sustainLevel + (0 - this.sustainLevel) * ((this.samplesProcessed - this.sustain) / (this.release - this.sustain));\n\
+ }\n\
+ \n\
+ return amplitude;\n\
+};\n\
+ \n\
+ADSR.prototype.process = function(buffer) {\n\
+ for ( var i = 0; i < buffer.length; i++ ) {\n\
+ buffer[i] *= this.value();\n\
+\n\
+ this.samplesProcessed++;\n\
+ }\n\
+ \n\
+ return buffer;\n\
+};\n\
+ \n\
+ \n\
+ADSR.prototype.isActive = function() {\n\
+ if ( this.samplesProcessed > this.release || this.samplesProcessed === -1 ) {\n\
+ return false;\n\
+ } else {\n\
+ return true;\n\
+ }\n\
+};\n\
+\n\
+ADSR.prototype.disable = function() {\n\
+ this.samplesProcessed = -1;\n\
+};\n\
+ \n\
+IIRFilter = function(type, cutoff, resonance, sampleRate) {\n\
+ this.sampleRate = sampleRate;\n\
+ this.cutoff = cutoff;\n\
+ this.resonance = resonance;\n\
+\n\
+ switch(type) {\n\
+ case DSP.LOWPASS:\n\
+ case DSP.LP12:\n\
+ this.func = new IIRFilter.LP12(cutoff, resonance, sampleRate);\n\
+ break;\n\
+ }\n\
+}\n\
+\n\
+IIRFilter.prototype.set = function(cutoff, resonance) {\n\
+ this.func.calcCoeff(cutoff, resonance);\n\
+}\n\
+\n\
+IIRFilter.prototype.process = function(buffer) {\n\
+ this.func.process(buffer);\n\
+}\n\
+\n\
+// Add an envelope to the filter\n\
+IIRFilter.prototype.addEnvelope = function(envelope) {\n\
+ if ( envelope instanceof ADSR ) {\n\
+ this.func.addEnvelope(envelope);\n\
+ } else {\n\
+ throw \"Not an envelope.\";\n\
+ }\n\
+};\n\
+\n\
+IIRFilter.LP12 = function(cutoff, resonance, sampleRate) {\n\
+ this.sampleRate = sampleRate;\n\
+ this.vibraPos = 0; \n\
+ this.vibraSpeed = 0;\n\
+ this.envelope = false;\n\
+ \n\
+ this.calcCoeff = function(cutoff, resonance) {\n\
+ this.w = 2.0 * Math.PI * cutoff / this.sampleRate;\n\
+ this.q = 1.0 - this.w / (2.0 * (resonance + 0.5 / (1.0 + this.w)) + this.w - 2.0);\n\
+ this.r = this.q * this.q;\n\
+ this.c = this.r + 1.0 - 2.0 * Math.cos(this.w) * this.q;\n\
+ \n\
+ this.cutoff = cutoff;\n\
+ this.resonance = resonance;\n\
+ };\n\
+\n\
+ this.calcCoeff(cutoff, resonance);\n\
+\n\
+ this.process = function(buffer) {\n\
+ for ( var i = 0; i < buffer.length; i++ ) {\n\
+ this.vibraSpeed += (buffer[i] - this.vibraPos) * this.c;\n\
+ this.vibraPos += this.vibraSpeed;\n\
+ this.vibraSpeed *= this.r;\n\
+ \n\
+ /* \n\
+ var temp = this.vibraPos;\n\
+ \n\
+ if ( temp > 1.0 ) {\n\
+ temp = 1.0;\n\
+ } else if ( temp < -1.0 ) {\n\
+ temp = -1.0;\n\
+ } else if ( temp != temp ) {\n\
+ temp = 1;\n\
+ }\n\
+ \n\
+ buffer[i] = temp;\n\
+ */ \n\
+\n\
+ if (this.envelope) {\n\
+ buffer[i] = (buffer[i] * (1 - this.envelope.value())) + (this.vibraPos * this.envelope.value());\n\
+ this.envelope.samplesProcessed++;\n\
+ } else {\n\
+ buffer[i] = this.vibraPos;\n\
+ }\n\
+ }\n\
+ }\n\
+}; \n\
+\n\
+IIRFilter.LP12.prototype.addEnvelope = function(envelope) {\n\
+ this.envelope = envelope;\n\
+};\n\
+\n\
+\n\
+\n\
+IIRFilter2 = function(type, cutoff, resonance, sampleRate) {\n\
+ this.type = type; \n\
+ this.cutoff = cutoff;\n\
+ this.resonance = resonance;\n\
+ this.sampleRate = sampleRate;\n\
+\n\
+ this.f = Array(4);\n\
+ this.f[0] = 0.0; // lp\n\
+ this.f[1] = 0.0; // hp\n\
+ this.f[2] = 0.0; // bp\n\
+ this.f[3] = 0.0; // br \n\
+ \n\
+ this.calcCoeff = function(cutoff, resonance) {\n\
+ this.freq = 2 * Math.sin(Math.PI * Math.min(0.25, cutoff/(this.sampleRate*2))); \n\
+ this.damp = Math.min(2 * (1 - Math.pow(resonance, 0.25)), Math.min(2, 2/this.freq - this.freq * 0.5));\n\
+ };\n\
+\n\
+ this.calcCoeff(cutoff, resonance);\n\
+};\n\
+\n\
+IIRFilter2.prototype.process = function(buffer) {\n\
+ var input, output;\n\
+ var f = this.f;\n\
+\n\
+ for ( var i = 0; i < buffer.length; i++ ) {\n\
+ input = buffer[i]; \n\
+\n\
+ // first pass\n\
+ f[3] = input - this.damp * f[2];\n\
+ f[0] = f[0] + this.freq * f[2];\n\
+ f[1] = f[3] - f[0];\n\
+ f[2] = this.freq * f[1] + f[2];\n\
+ output = 0.5 * f[this.type];\n\
+\n\
+ // second pass\n\
+ f[3] = input - this.damp * f[2];\n\
+ f[0] = f[0] + this.freq * f[2];\n\
+ f[1] = f[3] - f[0];\n\
+ f[2] = this.freq * f[1] + f[2];\n\
+ output += 0.5 * f[this.type];\n\
+\n\
+ if (this.envelope) {\n\
+ buffer[i] = (buffer[i] * (1 - this.envelope.value())) + (output * this.envelope.value());\n\
+ this.envelope.samplesProcessed++;\n\
+ } else {\n\
+ buffer[i] = output;\n\
+ }\n\
+ }\n\
+};\n\
+\n\
+IIRFilter2.prototype.addEnvelope = function(envelope) {\n\
+ if ( envelope instanceof ADSR ) {\n\
+ this.envelope = envelope;\n\
+ } else {\n\
+ throw \"This is not an envelope.\";\n\
+ }\n\
+};\n\
+\n\
+IIRFilter2.prototype.set = function(cutoff, resonance) {\n\
+ this.calcCoeff(cutoff, resonance); \n\
+};\n\
+\n\
+\n\
+\n\
+WindowFunction = function(type, alpha) {\n\
+ this.alpha = alpha;\n\
+ \n\
+ switch(type) {\n\
+ case DSP.BARTLETT:\n\
+ this.func = WindowFunction.Bartlett;\n\
+ break;\n\
+ \n\
+ case DSP.BARTLETTHANN:\n\
+ this.func = WindowFunction.BartlettHann;\n\
+ break;\n\
+ \n\
+ case DSP.BLACKMAN:\n\
+ this.func = WindowFunction.Blackman;\n\
+ this.alpha = this.alpha || 0.16;\n\
+ break;\n\
+ \n\
+ case DSP.COSINE:\n\
+ this.func = WindowFunction.Cosine;\n\
+ break;\n\
+ \n\
+ case DSP.GAUSS:\n\
+ this.func = WindowFunction.Gauss;\n\
+ this.alpha = this.alpha || 0.25;\n\
+ break;\n\
+ \n\
+ case DSP.HAMMING:\n\
+ this.func = WindowFunction.Hamming;\n\
+ break;\n\
+ \n\
+ case DSP.HANN:\n\
+ this.func = WindowFunction.Hann;\n\
+ break;\n\
+ \n\
+ case DSP.LANCZOS:\n\
+ this.func = WindowFunction.Lanczoz;\n\
+ break;\n\
+ \n\
+ case DSP.RECTANGULAR:\n\
+ this.func = WindowFunction.Rectangular;\n\
+ break;\n\
+ \n\
+ case DSP.TRIANGULAR:\n\
+ this.func = WindowFunction.Triangular;\n\
+ break;\n\
+ }\n\
+};\n\
+\n\
+WindowFunction.prototype.process = function(buffer) {\n\
+ var length = buffer.length;\n\
+ for ( var i = 0; i < length; i++ ) {\n\
+ buffer[i] *= this.func(length, i, this.alpha);\n\
+ }\n\
+ return buffer;\n\
+};\n\
+\n\
+WindowFunction.Bartlett = function(length, index) {\n\
+ return 2 / (length - 1) * ((length - 1) / 2 - Math.abs(index - (length - 1) / 2));\n\
+};\n\
+\n\
+WindowFunction.BartlettHann = function(length, index) {\n\
+ return 0.62 - 0.48 * Math.abs(index / (length - 1) - 0.5) - 0.38 * Math.cos(DSP.TWO_PI * index / (length - 1));\n\
+};\n\
+\n\
+WindowFunction.Blackman = function(length, index, alpha) {\n\
+ var a0 = (1 - alpha) / 2;\n\
+ var a1 = 0.5;\n\
+ var a2 = alpha / 2;\n\
+\n\
+ return a0 - a1 * Math.cos(DSP.TWO_PI * index / (length - 1)) + a2 * Math.cos(4 * Math.PI * index / (length - 1));\n\
+};\n\
+\n\
+WindowFunction.Cosine = function(length, index) {\n\
+ return Math.cos(Math.PI * index / (length - 1) - Math.PI / 2);\n\
+};\n\
+\n\
+WindowFunction.Gauss = function(length, index, alpha) {\n\
+ return Math.pow(Math.E, -0.5 * Math.pow((index - (length - 1) / 2) / (alpha * (length - 1) / 2), 2));\n\
+};\n\
+\n\
+WindowFunction.Hamming = function(length, index) {\n\
+ return 0.54 - 0.46 * Math.cos(DSP.TWO_PI * index / (length - 1));\n\
+};\n\
+\n\
+WindowFunction.Hann = function(length, index) {\n\
+ return 0.5 * (1 - Math.cos(DSP.TWO_PI * index / (length - 1)));\n\
+};\n\
+\n\
+WindowFunction.Lanczos = function(length, index) {\n\
+ var x = 2 * index / (length - 1) - 1;\n\
+ return Math.sin(Math.PI * x) / (Math.PI * x);\n\
+};\n\
+\n\
+WindowFunction.Rectangular = function(length, index) {\n\
+ return 1;\n\
+};\n\
+\n\
+WindowFunction.Triangular = function(length, index) {\n\
+ return 2 / length * (length / 2 - Math.abs(index - (length - 1) / 2));\n\
+};\n\
+\n\
+function sinh (arg) {\n\
+ // Returns the hyperbolic sine of the number, defined as (exp(number) - exp(-number))/2 \n\
+ // \n\
+ // version: 1004.2314\n\
+ // discuss at: http://phpjs.org/functions/sinh // + original by: Onno Marsman\n\
+ // * example 1: sinh(-0.9834330348825909);\n\
+ // * returns 1: -1.1497971402636502\n\
+ return (Math.exp(arg) - Math.exp(-arg))/2;\n\
+}\n\
+\n\
+\n\
+/* \n\
+ * Biquad filter\n\
+ * \n\
+ * Created by Ricard Marxer <email@ricardmarxer.com> on 2010-05-23.\n\
+ * Copyright 2010 Ricard Marxer. All rights reserved.\n\
+ *\n\
+ */\n\
+// Implementation based on:\n\
+// http://www.musicdsp.org/files/Audio-EQ-Cookbook.txt\n\
+Biquad = function(type, sampleRate) {\n\
+ this.Fs = sampleRate;\n\
+ this.type = type; // type of the filter\n\
+ this.parameterType = DSP.Q; // type of the parameter\n\
+\n\
+ this.x_1_l = 0;\n\
+ this.x_2_l = 0;\n\
+ this.y_1_l = 0;\n\
+ this.y_2_l = 0;\n\
+\n\
+ this.x_1_r = 0;\n\
+ this.x_2_r = 0;\n\
+ this.y_1_r = 0;\n\
+ this.y_2_r = 0;\n\
+\n\
+ this.b0 = 1;\n\
+ this.a0 = 1;\n\
+\n\
+ this.b1 = 0;\n\
+ this.a1 = 0;\n\
+\n\
+ this.b2 = 0;\n\
+ this.a2 = 0;\n\
+\n\
+ this.b0a0 = this.b0 / this.a0;\n\
+ this.b1a0 = this.b1 / this.a0;\n\
+ this.b2a0 = this.b2 / this.a0;\n\
+ this.a1a0 = this.a1 / this.a0;\n\
+ this.a2a0 = this.a2 / this.a0;\n\
+\n\
+ this.f0 = 3000; // \"wherever it's happenin', man.\" Center Frequency or\n\
+ // Corner Frequency, or shelf midpoint frequency, depending\n\
+ // on which filter type. The \"significant frequency\".\n\
+\n\
+ this.dBgain = 12; // used only for peaking and shelving filters\n\
+\n\
+ this.Q = 1; // the EE kind of definition, except for peakingEQ in which A*Q is\n\
+ // the classic EE Q. That adjustment in definition was made so that\n\
+ // a boost of N dB followed by a cut of N dB for identical Q and\n\
+ // f0/Fs results in a precisely flat unity gain filter or \"wire\".\n\
+\n\
+ this.BW = -3; // the bandwidth in octaves (between -3 dB frequencies for BPF\n\
+ // and notch or between midpoint (dBgain/2) gain frequencies for\n\
+ // peaking EQ\n\
+\n\
+ this.S = 1; // a \"shelf slope\" parameter (for shelving EQ only). When S = 1,\n\
+ // the shelf slope is as steep as it can be and remain monotonically\n\
+ // increasing or decreasing gain with frequency. The shelf slope, in\n\
+ // dB/octave, remains proportional to S for all other values for a\n\
+ // fixed f0/Fs and dBgain.\n\
+\n\
+ this.coefficients = function() {\n\
+ var b = [this.b0, this.b1, this.b2];\n\
+ var a = [this.a0, this.a1, this.a2];\n\
+ return {b: b, a:a};\n\
+ }\n\
+\n\
+ this.setFilterType = function(type) {\n\
+ this.type = type;\n\
+ this.recalculateCoefficients();\n\
+ }\n\
+\n\
+ this.setSampleRate = function(rate) {\n\
+ this.Fs = rate;\n\
+ this.recalculateCoefficients();\n\
+ }\n\
+\n\
+ this.setQ = function(q) {\n\
+ this.parameterType = DSP.Q;\n\
+ this.Q = Math.max(Math.min(q, 115.0), 0.001);\n\
+ this.recalculateCoefficients();\n\
+ }\n\
+\n\
+ this.setBW = function(bw) {\n\
+ this.parameterType = DSP.BW;\n\
+ this.BW = bw;\n\
+ this.recalculateCoefficients();\n\
+ } \n\
+\n\
+ this.setS = function(s) {\n\
+ this.parameterType = DSP.S;\n\
+ this.S = Math.max(Math.min(s, 5.0), 0.0001);\n\
+ this.recalculateCoefficients();\n\
+ } \n\
+\n\
+ this.setF0 = function(freq) {\n\
+ this.f0 = freq;\n\
+ this.recalculateCoefficients();\n\
+ } \n\
+ \n\
+ this.setDbGain = function(g) {\n\
+ this.dBgain = g;\n\
+ this.recalculateCoefficients();\n\
+ }\n\
+\n\
+ this.recalculateCoefficients = function() {\n\
+ var A;\n\
+ if (type == DSP.PEAKING_EQ || type == DSP.LOW_SHELF || type == DSP.HIGH_SHELF ) {\n\
+ A = Math.pow(10, (this.dBgain/40)); // for peaking and shelving EQ filters only\n\
+ } else {\n\
+ A = Math.sqrt( Math.pow(10, (this.dBgain/20)) ); \n\
+ }\n\
+\n\
+ var w0 = DSP.TWO_PI * this.f0 / this.Fs;\n\
+\n\
+ var cosw0 = Math.cos(w0);\n\
+ var sinw0 = Math.sin(w0);\n\
+\n\
+ var alpha = 0;\n\
+ \n\
+ switch (this.parameterType) {\n\
+ case DSP.Q:\n\
+ alpha = sinw0/(2*this.Q);\n\
+ break;\n\
+ \n\
+ case DSP.BW:\n\
+ alpha = sinw0 * sinh( Math.LN2/2 * this.BW * w0/sinw0 );\n\
+ break;\n\
+\n\
+ case DSP.S:\n\
+ alpha = sinw0/2 * Math.sqrt( (A + 1/A)*(1/this.S - 1) + 2 );\n\
+ break;\n\
+ }\n\
+\n\
+ /**\n\
+ FYI: The relationship between bandwidth and Q is\n\
+ 1/Q = 2*sinh(ln(2)/2*BW*w0/sin(w0)) (digital filter w BLT)\n\
+ or 1/Q = 2*sinh(ln(2)/2*BW) (analog filter prototype)\n\
+\n\
+ The relationship between shelf slope and Q is\n\
+ 1/Q = sqrt((A + 1/A)*(1/S - 1) + 2)\n\
+ */\n\
+\n\
+ switch (this.type) {\n\
+ case DSP.LPF: // H(s) = 1 / (s^2 + s/Q + 1)\n\
+ this.b0 = (1 - cosw0)/2;\n\
+ this.b1 = 1 - cosw0;\n\
+ this.b2 = (1 - cosw0)/2;\n\
+ this.a0 = 1 + alpha;\n\
+ this.a1 = -2 * cosw0;\n\
+ this.a2 = 1 - alpha;\n\
+ break;\n\
+\n\
+ case DSP.HPF: // H(s) = s^2 / (s^2 + s/Q + 1)\n\
+ this.b0 = (1 + cosw0)/2;\n\
+ this.b1 = -(1 + cosw0);\n\
+ this.b2 = (1 + cosw0)/2;\n\
+ this.a0 = 1 + alpha;\n\
+ this.a1 = -2 * cosw0;\n\
+ this.a2 = 1 - alpha;\n\
+ break;\n\
+\n\
+ case DSP.BPF_CONSTANT_SKIRT: // H(s) = s / (s^2 + s/Q + 1) (constant skirt gain, peak gain = Q)\n\
+ this.b0 = sinw0/2;\n\
+ this.b1 = 0;\n\
+ this.b2 = -sinw0/2;\n\
+ this.a0 = 1 + alpha;\n\
+ this.a1 = -2*cosw0;\n\
+ this.a2 = 1 - alpha;\n\
+ break;\n\
+\n\
+ case DSP.BPF_CONSTANT_PEAK: // H(s) = (s/Q) / (s^2 + s/Q + 1) (constant 0 dB peak gain)\n\
+ this.b0 = alpha;\n\
+ this.b1 = 0;\n\
+ this.b2 = -alpha;\n\
+ this.a0 = 1 + alpha;\n\
+ this.a1 = -2*cosw0;\n\
+ this.a2 = 1 - alpha;\n\
+ break;\n\
+\n\
+ case DSP.NOTCH: // H(s) = (s^2 + 1) / (s^2 + s/Q + 1)\n\
+ this.b0 = 1;\n\
+ this.b1 = -2*cosw0;\n\
+ this.b2 = 1;\n\
+ this.a0 = 1 + alpha;\n\
+ this.a1 = -2*cosw0;\n\
+ this.a2 = 1 - alpha;\n\
+ break;\n\
+\n\
+ case DSP.APF: // H(s) = (s^2 - s/Q + 1) / (s^2 + s/Q + 1)\n\
+ this.b0 = 1 - alpha;\n\
+ this.b1 = -2*cosw0;\n\
+ this.b2 = 1 + alpha;\n\
+ this.a0 = 1 + alpha;\n\
+ this.a1 = -2*cosw0;\n\
+ this.a2 = 1 - alpha;\n\
+ break;\n\
+\n\
+ case DSP.PEAKING_EQ: // H(s) = (s^2 + s*(A/Q) + 1) / (s^2 + s/(A*Q) + 1)\n\
+ this.b0 = 1 + alpha*A;\n\
+ this.b1 = -2*cosw0;\n\
+ this.b2 = 1 - alpha*A;\n\
+ this.a0 = 1 + alpha/A;\n\
+ this.a1 = -2*cosw0;\n\
+ this.a2 = 1 - alpha/A;\n\
+ break;\n\
+\n\
+ case DSP.LOW_SHELF: // H(s) = A * (s^2 + (sqrt(A)/Q)*s + A)/(A*s^2 + (sqrt(A)/Q)*s + 1)\n\
+ var coeff = sinw0 * Math.sqrt( (A^2 + 1)*(1/this.S - 1) + 2*A );\n\
+ this.b0 = A*( (A+1) - (A-1)*cosw0 + coeff );\n\
+ this.b1 = 2*A*( (A-1) - (A+1)*cosw0 );\n\
+ this.b2 = A*( (A+1) - (A-1)*cosw0 - coeff );\n\
+ this.a0 = (A+1) + (A-1)*cosw0 + coeff;\n\
+ this.a1 = -2*( (A-1) + (A+1)*cosw0 );\n\
+ this.a2 = (A+1) + (A-1)*cosw0 - coeff;\n\
+ break;\n\
+\n\
+ case DSP.HIGH_SHELF: // H(s) = A * (A*s^2 + (sqrt(A)/Q)*s + 1)/(s^2 + (sqrt(A)/Q)*s + A)\n\
+ var coeff = sinw0 * Math.sqrt( (A^2 + 1)*(1/this.S - 1) + 2*A );\n\
+ this.b0 = A*( (A+1) + (A-1)*cosw0 + coeff );\n\
+ this.b1 = -2*A*( (A-1) + (A+1)*cosw0 );\n\
+ this.b2 = A*( (A+1) + (A-1)*cosw0 - coeff );\n\
+ this.a0 = (A+1) - (A-1)*cosw0 + coeff;\n\
+ this.a1 = 2*( (A-1) - (A+1)*cosw0 );\n\
+ this.a2 = (A+1) - (A-1)*cosw0 - coeff;\n\
+ break;\n\
+ }\n\
+ \n\
+ this.b0a0 = this.b0/this.a0;\n\
+ this.b1a0 = this.b1/this.a0;\n\
+ this.b2a0 = this.b2/this.a0;\n\
+ this.a1a0 = this.a1/this.a0;\n\
+ this.a2a0 = this.a2/this.a0;\n\
+ }\n\
+\n\
+ this.process = function(buffer) {\n\
+ //y[n] = (b0/a0)*x[n] + (b1/a0)*x[n-1] + (b2/a0)*x[n-2]\n\
+ // - (a1/a0)*y[n-1] - (a2/a0)*y[n-2]\n\
+\n\
+ var len = buffer.length;\n\
+ var output = new Array(len);\n\
+\n\
+ for ( var i=0; i<buffer.length; i++ ) {\n\
+ output[i] = this.b0a0*buffer[i] + this.b1a0*this.x_1_l + this.b2a0*this.x_2_l - this.a1a0*this.y_1_l - this.a2a0*this.y_2_l;\n\
+ this.y_2_l = this.y_1_l;\n\
+ this.y_1_l = output[i];\n\
+ this.x_2_l = this.x_1_l;\n\
+ this.x_1_l = buffer[i];\n\
+ }\n\
+\n\
+ return output;\n\
+ }\n\
+\n\
+ this.processStereo = function(buffer) {\n\
+ //y[n] = (b0/a0)*x[n] + (b1/a0)*x[n-1] + (b2/a0)*x[n-2]\n\
+ // - (a1/a0)*y[n-1] - (a2/a0)*y[n-2]\n\
+\n\
+ var len = buffer.length;\n\
+ var output = new Array(len);\n\
+ \n\
+ for ( var i=0; i<len/2; i++ ) {\n\
+ output[2*i] = this.b0a0*buffer[2*i] + this.b1a0*this.x_1_l + this.b2a0*this.x_2_l - this.a1a0*this.y_1_l - this.a2a0*this.y_2_l;\n\
+ this.y_2_l = this.y_1_l;\n\
+ this.y_1_l = output[2*i];\n\
+ this.x_2_l = this.x_1_l;\n\
+ this.x_1_l = buffer[2*i];\n\
+\n\
+ output[2*i+1] = this.b0a0*buffer[2*i+1] + this.b1a0*this.x_1_r + this.b2a0*this.x_2_r - this.a1a0*this.y_1_r - this.a2a0*this.y_2_r;\n\
+ this.y_2_r = this.y_1_r;\n\
+ this.y_1_r = output[2*i+1];\n\
+ this.x_2_r = this.x_1_r;\n\
+ this.x_1_r = buffer[2*i+1];\n\
+ }\n\
+\n\
+ return output;\n\
+ }\n\
+};\n\
+\n\
+\n\
+/* \n\
+ * Magnitude to decibels\n\
+ * \n\
+ * Created by Ricard Marxer <email@ricardmarxer.com> on 2010-05-23.\n\
+ * Copyright 2010 Ricard Marxer. All rights reserved.\n\
+ *\n\
+ * @buffer array of magnitudes to convert to decibels\n\
+ * \n\
+ * @returns the array in decibels\n\
+ *\n\
+ */\n\
+DSP.mag2db = function(buffer) {\n\
+ var minDb = -120;\n\
+ var minMag = Math.pow(10.0, minDb / 20.0);\n\
+\n\
+ var log = Math.log;\n\
+ var max = Math.max;\n\
+ \n\
+ var result = Array(buffer.length);\n\
+ for (var i=0; i<buffer.length; i++) {\n\
+ result[i] = 20.0*log(max(buffer[i], minMag));\n\
+ }\n\
+\n\
+ return result;\n\
+};\n\
+\n\
+/* \n\
+ * Frequency response\n\
+ * \n\
+ * Created by Ricard Marxer <email@ricardmarxer.com> on 2010-05-23.\n\
+ * Copyright 2010 Ricard Marxer. All rights reserved.\n\
+ *\n\
+ * Calculates the frequency response at the given points.\n\
+ *\n\
+ * @b b coefficients of the filter\n\
+ * @a a coefficients of the filter\n\
+ * @w w points (normally between -PI and PI) where to calculate the frequency response\n\
+ * \n\
+ * @returns the frequency response in magnitude\n\
+ *\n\
+ */\n\
+DSP.freqz = function(b, a, w) {\n\
+ if (!w) {\n\
+ w = Array(200);\n\
+ for (var i=0;i<w.length; i++) {\n\
+ w[i] = DSP.TWO_PI/w.length * i - Math.PI;\n\
+ }\n\
+ }\n\
+\n\
+ var result = Array(w.length);\n\
+ \n\
+ var sqrt = Math.sqrt;\n\
+ var cos = Math.cos;\n\
+ var sin = Math.sin;\n\
+ \n\
+ for (var i=0; i<w.length; i++) {\n\
+ var numerator = {real:0.0, imag:0.0};\n\
+ for (var j=0; j<b.length; j++) {\n\
+ numerator.real += b[j] * cos(-j*w[i]);\n\
+ numerator.imag += b[j] * sin(-j*w[i]);\n\
+ }\n\
+\n\
+ var denominator = {real:0.0, imag:0.0};\n\
+ for (var j=0; j<a.length; j++) {\n\
+ denominator.real += a[j] * cos(-j*w[i]);\n\
+ denominator.imag += a[j] * sin(-j*w[i]);\n\
+ }\n\
+ \n\
+ result[i] = sqrt(numerator.real*numerator.real + numerator.imag*numerator.imag) / sqrt(denominator.real*denominator.real + denominator.imag*denominator.imag);\n\
+ }\n\
+\n\
+ return result;\n\
+};\n\
+\n\
+/* \n\
+ * Graphical Equalizer\n\
+ * \n\
+ * Created by Ricard Marxer <email@ricardmarxer.com> on 2010-05-23.\n\
+ * Copyright 2010 Ricard Marxer. All rights reserved.\n\
+ *\n\
+ */\n\
+// Implementation of a graphic equalizer with a configurable bands-per-octave\n\
+// and minimum and maximum frequencies\n\
+GraphicalEq = function(sampleRate) {\n\
+ this.FS = sampleRate;\n\
+ this.minFreq = 40.0;\n\
+ this.maxFreq = 16000.0;\n\
+\n\
+ this.bandsPerOctave = 1.0;\n\
+\n\
+ this.filters = []\n\
+ this.freqzs = []\n\
+\n\
+ this.calculateFreqzs = true;\n\
+\n\
+ this.recalculateFilters = function() {\n\
+ var bandCount = Math.round(Math.log(this.maxFreq/this.minFreq) * this.bandsPerOctave/ Math.LN2);\n\
+\n\
+ this.filters = [];\n\
+ for (var i=0; i<bandCount; i++) {\n\
+ var freq = this.minFreq*(Math.pow(2, i/this.bandsPerOctave));\n\
+ var newFilter = new Biquad(DSP.PEAKING_EQ, this.FS);\n\
+ newFilter.setDbGain(0);\n\
+ newFilter.setBW(1/this.bandsPerOctave);\n\
+ newFilter.setF0(freq);\n\
+ this.filters[i] = newFilter;\n\
+ this.recalculateFreqz(i);\n\
+ }\n\
+ }\n\
+\n\
+ this.setMinimumFrequency = function(freq) {\n\
+ this.minFreq = freq;\n\
+ this.recalculateFilters();\n\
+ }\n\
+\n\
+ this.setMaximumFrequency = function(freq) {\n\
+ this.maxFreq = freq;\n\
+ this.recalculateFilters();\n\
+ }\n\
+\n\
+ this.setBandsPerOctave = function(bands) {\n\
+ this.bandsPerOctave = bands;\n\
+ this.recalculateFilters();\n\
+ }\n\
+\n\
+ this.setBandGain = function(bandIndex, gain) {\n\
+ if (bandIndex < 0 || bandIndex > (this.filters.length-1)) {\n\
+ throw \"The band index of the graphical equalizer is out of bounds.\";\n\
+ return;\n\
+ }\n\
+\n\
+ if (!gain) {\n\
+ throw \"A gain must be passed.\"\n\
+ return;\n\
+ }\n\
+ \n\
+ \n\
+ this.filters[bandIndex].setDbGain(gain);\n\
+ this.recalculateFreqz(bandIndex);\n\
+ }\n\
+ \n\
+ this.recalculateFreqz = function(bandIndex) {\n\
+ if (!this.calculateFreqzs) {\n\
+ return;\n\
+ }\n\
+\n\
+ \n\
+ if (bandIndex < 0 || bandIndex > (this.filters.length-1)) {\n\
+ throw \"The band index of the graphical equalizer is out of bounds. \" + bandIndex + \" is out of [\" + 0 + \", \" + this.filters.length-1 + \"]\"\n\
+ return;\n\
+ }\n\
+ \n\
+ if (!this.w) {\n\
+ this.w = Array(400);\n\
+ for (var i=0; i<this.w.length; i++) {\n\
+ this.w[i] = Math.PI/this.w.length * i;\n\
+ }\n\
+ }\n\
+ \n\
+ var b = [this.filters[bandIndex].b0, this.filters[bandIndex].b1, this.filters[bandIndex].b2];\n\
+ var a = [this.filters[bandIndex].a0, this.filters[bandIndex].a1, this.filters[bandIndex].a2];\n\
+\n\
+ this.freqzs[bandIndex] = DSP.mag2db(DSP.freqz(b, a, this.w));\n\
+ }\n\
+\n\
+ this.process = function(buffer) {\n\
+ var output = buffer;\n\
+ \n\
+ for ( var i=0; i<this.filters.length; i++ ) {\n\
+ output = this.filters[i].process(output);\n\
+ }\n\
+\n\
+ return output;\n\
+ }\n\
+\n\
+ this.processStereo = function(buffer) {\n\
+ var output = buffer;\n\
+ \n\
+ for ( var i=0; i<this.filters.length; i++ ) {\n\
+ output = this.filters[i].processStereo(output);\n\
+ }\n\
+\n\
+ return output;\n\
+ }\n\
+\n\
+}\n\
+\n\
+\n\
+\n\
+/**\n\
+ * MultiDelay effect by Almer Thie (http://code.almeros.com).\n\
+ * Copyright 2010 Almer Thie. All rights reserved.\n\
+ * Example: http://code.almeros.com/code-examples/delay-firefox-audio-api/\n\
+ * \n\
+ * This is a delay that feeds it's own delayed signal back into its circular \n\
+ * buffer. Also known as a CombFilter.\n\
+ *\n\
+ * Compatible with interleaved stereo (or more channel) buffers and \n\
+ * non-interleaved mono buffers.\n\
+ * \n\
+ * @param {Number} maxDelayInSamplesSize Maximum possible delay in samples (size of circular buffer)\n\
+ * @param {Number} delayInSamples Initial delay in samples\n\
+ * @param {Number} masterVolume Initial master volume. Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ * @param {Number} delayVolume Initial feedback delay volume. Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ * \n\
+ * @constructor\n\
+ */\n\
+MultiDelay = function(maxDelayInSamplesSize, delayInSamples, masterVolume, delayVolume){\n\
+ this.delayBufferSamples = new Array(maxDelayInSamplesSize); // The maximum size of delay\n\
+ this.delayInputPointer = delayInSamples; \n\
+ this.delayOutputPointer = 0;\n\
+ \n\
+ this.delayInSamples = delayInSamples;\n\
+ this.masterVolume = masterVolume;\n\
+ this.delayVolume = delayVolume;\n\
+}\n\
+\n\
+/**\n\
+ * Change the delay time in samples.\n\
+ *\n\
+ * @param {Number} delayInSamples Delay in samples\n\
+ */\n\
+MultiDelay.prototype.setDelayInSamples = function (delayInSamples){\n\
+ this.delayInSamples = delayInSamples;\n\
+ \n\
+ this.delayInputPointer = this.delayOutputPointer + delayInSamples;\n\
+ if(this.delayInputPointer >= this.delayBufferSamples.length-1)\n\
+ this.delayInputPointer = this.delayInputPointer - this.delayBufferSamples.length; \n\
+}\n\
+\n\
+/**\n\
+ * Change the master volume.\n\
+ *\n\
+ * @param {Number} masterVolume Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ */\n\
+MultiDelay.prototype.setMasterVolume = function (masterVolume){\n\
+ this.masterVolume = masterVolume;\n\
+}\n\
+\n\
+/**\n\
+ * Change the delay feedback volume.\n\
+ *\n\
+ * @param {Number} delayVolume Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ */\n\
+MultiDelay.prototype.setDelayVolume = function (delayVolume){\n\
+ this.delayVolume = delayVolume;\n\
+}\n\
+\n\
+/**\n\
+ * Process a given interleaved or mono non-interleaved float value Array and adds the delayed audio.\n\
+ *\n\
+ * @param {Array} samples Array containing Float values or a Float32Array\n\
+ * \n\
+ * @returns A new Float32Array interleaved or mono non-interleaved as was fed to this function.\n\
+ */\n\
+MultiDelay.prototype.process = function (samples){\n\
+ // NB. Make a copy to put in the output samples to return. \n\
+ var outputSamples = new Array(samples.length);\n\
+\n\
+ for(var i=0; i<samples.length; i++){\n\
+ \n\
+ // delayBufferSamples could contain initial NULL's, return silence in that case\n\
+ var delaySample = (this.delayBufferSamples[this.delayOutputPointer]==null ? 0.0 : this.delayBufferSamples[this.delayOutputPointer]);\n\
+ \n\
+ // Mix normal audio data with delayed audio\n\
+ var sample = (delaySample * this.delayVolume) + samples[i]; \n\
+ \n\
+ // Add audio data with the delay in the delay buffer\n\
+ this.delayBufferSamples[this.delayInputPointer] = sample;\n\
+ \n\
+ // Return the audio with delay mix\n\
+ outputSamples[i] = sample * this.masterVolume;\n\
+ \n\
+ // Manage circulair delay buffer pointers\n\
+ this.delayInputPointer++;\n\
+ if(this.delayInputPointer >= this.delayBufferSamples.length-1)\n\
+ this.delayInputPointer = 0;\n\
+ \n\
+ this.delayOutputPointer++;\n\
+ if(this.delayOutputPointer >= this.delayBufferSamples.length-1)\n\
+ this.delayOutputPointer = 0; \n\
+ \n\
+ }\n\
+ \n\
+ return outputSamples;\n\
+}\n\
+\n\
+\n\
+\n\
+\n\
+/**\n\
+ * SingleDelay effect by Almer Thie (http://code.almeros.com).\n\
+ * Copyright 2010 Almer Thie. All rights reserved.\n\
+ * Example: See usage in Reverb class\n\
+ * \n\
+ * This is a delay that does NOT feeds it's own delayed signal back into its \n\
+ * circular buffer, neither does it return the original signal. Also known as \n\
+ * an AllPassFilter(?).\n\
+ *\n\
+ * Compatible with interleaved stereo (or more channel) buffers and \n\
+ * non-interleaved mono buffers.\n\
+ * \n\
+ * @param {Number} maxDelayInSamplesSize Maximum possible delay in samples (size of circular buffer)\n\
+ * @param {Number} delayInSamples Initial delay in samples\n\
+ * @param {Number} delayVolume Initial feedback delay volume. Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ * \n\
+ * @constructor\n\
+ */\n\
+SingleDelay = function(maxDelayInSamplesSize, delayInSamples, delayVolume){\n\
+ this.delayBufferSamples = new Array(maxDelayInSamplesSize); // The maximum size of delay\n\
+ this.delayInputPointer = delayInSamples; \n\
+ this.delayOutputPointer = 0;\n\
+ \n\
+ this.delayInSamples = delayInSamples;\n\
+ this.delayVolume = delayVolume;\n\
+}\n\
+\n\
+/**\n\
+ * Change the delay time in samples.\n\
+ *\n\
+ * @param {Number} delayInSamples Delay in samples\n\
+ */\n\
+SingleDelay.prototype.setDelayInSamples = function (delayInSamples){\n\
+ this.delayInSamples = delayInSamples;\n\
+ \n\
+ this.delayInputPointer = this.delayOutputPointer + delayInSamples;\n\
+ if(this.delayInputPointer >= this.delayBufferSamples.length-1)\n\
+ this.delayInputPointer = this.delayInputPointer - this.delayBufferSamples.length; \n\
+}\n\
+\n\
+/**\n\
+ * Change the return signal volume.\n\
+ *\n\
+ * @param {Number} delayVolume Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ */\n\
+SingleDelay.prototype.setDelayVolume = function (delayVolume){\n\
+ this.delayVolume = delayVolume;\n\
+}\n\
+\n\
+/**\n\
+ * Process a given interleaved or mono non-interleaved float value Array and \n\
+ * returns the delayed audio.\n\
+ *\n\
+ * @param {Array} samples Array containing Float values or a Float32Array\n\
+ * \n\
+ * @returns A new Float32Array interleaved or mono non-interleaved as was fed to this function.\n\
+ */\n\
+SingleDelay.prototype.process = function (samples){\n\
+ // NB. Make a copy to put in the output samples to return. \n\
+ var outputSamples = new Array(samples.length);\n\
+\n\
+ for(var i=0; i<samples.length; i++){\n\
+\n\
+ // Add audio data with the delay in the delay buffer\n\
+ this.delayBufferSamples[this.delayInputPointer] = samples[i];\n\
+ \n\
+ // delayBufferSamples could contain initial NULL's, return silence in that case\n\
+ var delaySample = this.delayBufferSamples[this.delayOutputPointer];\n\
+\n\
+ // Return the audio with delay mix\n\
+ outputSamples[i] = delaySample * this.delayVolume;\n\
+\n\
+ \n\
+ // Manage circulair delay buffer pointers\n\
+ this.delayInputPointer++;\n\
+ if(this.delayInputPointer >= this.delayBufferSamples.length-1)\n\
+ this.delayInputPointer = 0;\n\
+ \n\
+ this.delayOutputPointer++;\n\
+ if(this.delayOutputPointer >= this.delayBufferSamples.length-1)\n\
+ this.delayOutputPointer = 0; \n\
+ \n\
+ }\n\
+ \n\
+ return outputSamples;\n\
+}\n\
+\n\
+\n\
+\n\
+\n\
+\n\
+/**\n\
+ * Reverb effect by Almer Thie (http://code.almeros.com).\n\
+ * Copyright 2010 Almer Thie. All rights reserved.\n\
+ * Example: http://code.almeros.com/code-examples/reverb-firefox-audio-api/\n\
+ * \n\
+ * This reverb consists of 6 SingleDelays, 6 MultiDelays and an IIRFilter2 \n\
+ * for each of the two stereo channels.\n\
+ *\n\
+ * Compatible with interleaved stereo buffers only!\n\
+ * \n\
+ * @param {Number} maxDelayInSamplesSize Maximum possible delay in samples (size of circular buffers)\n\
+ * @param {Number} delayInSamples Initial delay in samples for internal (Single/Multi)delays\n\
+ * @param {Number} masterVolume Initial master volume. Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ * @param {Number} mixVolume Initial reverb signal mix volume. Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ * @param {Number} delayVolume Initial feedback delay volume for internal (Single/Multi)delays. Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ * @param {Number} dampFrequency Initial low pass filter frequency. 0 to 44100 (depending on your maximum sampling frequency)\n\
+ * \n\
+ * @constructor\n\
+ */\n\
+Reverb = function(maxDelayInSamplesSize, delayInSamples, masterVolume, mixVolume, delayVolume, dampFrequency){\n\
+ this.delayInSamples = delayInSamples;\n\
+ this.masterVolume = masterVolume;\n\
+ this.mixVolume = mixVolume;\n\
+ this.delayVolume = delayVolume;\n\
+ this.dampFrequency = dampFrequency;\n\
+ \n\
+ this.NR_OF_MULTIDELAYS = 6;\n\
+ this.NR_OF_SINGLEDELAYS = 6;\n\
+ \n\
+ this.LOWPASSL = new IIRFilter2(DSP.LOWPASS, dampFrequency, 0, 44100);\n\
+ this.LOWPASSR = new IIRFilter2(DSP.LOWPASS, dampFrequency, 0, 44100);\n\
+ \n\
+ this.singleDelays = [];\n\
+ for(var i = 0; i<this.NR_OF_SINGLEDELAYS; i++){\n\
+ var delayMultiply = 1.0 + (i/7.0); // 1.0, 1.1, 1.2... \n\
+ this.singleDelays[i] = new SingleDelay(maxDelayInSamplesSize, Math.round(this.delayInSamples * delayMultiply), this.delayVolume);\n\
+ }\n\
+ \n\
+ this.multiDelays = [];\n\
+ for(var i = 0; i<this.NR_OF_MULTIDELAYS; i++){\n\
+ var delayMultiply = 1.0 + (i/10.0); // 1.0, 1.1, 1.2... \n\
+ this.multiDelays[i] = new MultiDelay(maxDelayInSamplesSize, Math.round(this.delayInSamples * delayMultiply), this.masterVolume, this.delayVolume);\n\
+ }\n\
+}\n\
+\n\
+/**\n\
+ * Change the delay time in samples as a base for all delays.\n\
+ *\n\
+ * @param {Number} delayInSamples Delay in samples\n\
+ */\n\
+Reverb.prototype.setDelayInSamples = function (delayInSamples){\n\
+ this.delayInSamples = delayInSamples;\n\
+ \n\
+ for(var i = 0; i<this.NR_OF_SINGLEDELAYS; i++){\n\
+ var delayMultiply = 1.0 + (i/7.0); // 1.0, 1.1, 1.2...\n\
+ this.singleDelays[i].setDelayInSamples( Math.round(this.delayInSamples * delayMultiply) );\n\
+ }\n\
+ \n\
+ for(var i = 0; i<this.NR_OF_MULTIDELAYS; i++){\n\
+ var delayMultiply = 1.0 + (i/10.0); // 1.0, 1.1, 1.2...\n\
+ this.multiDelays[i].setDelayInSamples( Math.round(this.delayInSamples * delayMultiply) );\n\
+ }\n\
+}\n\
+\n\
+/**\n\
+ * Change the master volume.\n\
+ *\n\
+ * @param {Number} masterVolume Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ */\n\
+Reverb.prototype.setMasterVolume = function (masterVolume){\n\
+ this.masterVolume = masterVolume;\n\
+}\n\
+\n\
+/**\n\
+ * Change the reverb signal mix level.\n\
+ *\n\
+ * @param {Number} mixVolume Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ */\n\
+Reverb.prototype.setMixVolume = function (mixVolume){\n\
+ this.mixVolume = mixVolume;\n\
+}\n\
+\n\
+/**\n\
+ * Change all delays feedback volume.\n\
+ *\n\
+ * @param {Number} delayVolume Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ */\n\
+Reverb.prototype.setDelayVolume = function (delayVolume){\n\
+ this.delayVolume = delayVolume;\n\
+ \n\
+ for(var i = 0; i<this.NR_OF_SINGLEDELAYS; i++){\n\
+ this.singleDelays[i].setDelayVolume(this.delayVolume);\n\
+ } \n\
+ \n\
+ for(var i = 0; i<this.NR_OF_MULTIDELAYS; i++){\n\
+ this.multiDelays[i].setDelayVolume(this.delayVolume);\n\
+ } \n\
+}\n\
+\n\
+/**\n\
+ * Change the Low Pass filter frequency.\n\
+ *\n\
+ * @param {Number} dampFrequency low pass filter frequency. 0 to 44100 (depending on your maximum sampling frequency)\n\
+ */\n\
+Reverb.prototype.setDampFrequency = function (dampFrequency){\n\
+ this.dampFrequency = dampFrequency;\n\
+ \n\
+ this.LOWPASSL.set(dampFrequency, 0);\n\
+ this.LOWPASSR.set(dampFrequency, 0); \n\
+}\n\
+\n\
+/**\n\
+ * Process a given interleaved float value Array and copies and adds the reverb signal.\n\
+ *\n\
+ * @param {Array} samples Array containing Float values or a Float32Array\n\
+ * \n\
+ * @returns A new Float32Array interleaved buffer.\n\
+ */\n\
+Reverb.prototype.process = function (interleavedSamples){ \n\
+ // NB. Make a copy to put in the output samples to return. \n\
+ var outputSamples = new Array(interleavedSamples.length);\n\
+ \n\
+ // Perform low pass on the input samples to mimick damp\n\
+ var leftRightMix = DSP.deinterleave(interleavedSamples);\n\
+ this.LOWPASSL.process( leftRightMix[DSP.LEFT] );\n\
+ this.LOWPASSR.process( leftRightMix[DSP.RIGHT] ); \n\
+ var filteredSamples = DSP.interleave(leftRightMix[DSP.LEFT], leftRightMix[DSP.RIGHT]);\n\
+\n\
+ // Process MultiDelays in parallel\n\
+ for(var i = 0; i<this.NR_OF_MULTIDELAYS; i++){\n\
+ // Invert the signal of every even multiDelay\n\
+ outputSamples = mixSampleBuffers(outputSamples, this.multiDelays[i].process(filteredSamples), 2%i==0, this.NR_OF_MULTIDELAYS);\n\
+ }\n\
+ \n\
+ // Process SingleDelays in series\n\
+ var singleDelaySamples = new Array(outputSamples.length);\n\
+ for(var i = 0; i<this.NR_OF_SINGLEDELAYS; i++){\n\
+ // Invert the signal of every even singleDelay\n\
+ singleDelaySamples = mixSampleBuffers(singleDelaySamples, this.singleDelays[i].process(outputSamples), 2%i==0, 1); \n\
+ }\n\
+\n\
+ // Apply the volume of the reverb signal\n\
+ for(var i = 0; i<singleDelaySamples.length; i++){\n\
+ singleDelaySamples[i] *= this.mixVolume;\n\
+ }\n\
+ \n\
+ // Mix the original signal with the reverb signal\n\
+ outputSamples = mixSampleBuffers(singleDelaySamples, interleavedSamples, 0, 1); \n\
+\n\
+ // Apply the master volume to the complete signal\n\
+ for(var i = 0; i<outputSamples.length; i++){\n\
+ outputSamples[i] *= this.masterVolume;\n\
+ }\n\
+ \n\
+ return outputSamples;\n\
+}\n\
+\n\
+/**\n\
+ * Helper method (for Reverb) to mix two (interleaved) samplebuffers. It's possible \n\
+ * to negate the second buffer while mixing and to perform a volume correction \n\
+ * on the final signal.\n\
+ * \n\
+ * @param {Array} sampleBuffer1 Array containing Float values or a Float32Array\n\
+ * @param {Array} sampleBuffer2 Array containing Float values or a Float32Array\n\
+ * @param {Boolean} negate When true inverts/flips the audio signal\n\
+ * @param {Number} volumeCorrection When you add multiple sample buffers, use this to tame your signal ;)\n\
+ * \n\
+ * @returns A new Float32Array interleaved buffer.\n\
+ */\n\
+function mixSampleBuffers(sampleBuffer1, sampleBuffer2, negate, volumeCorrection){\n\
+ var outputSamples = new Array(sampleBuffer1);\n\
+\n\
+ for(var i = 0; i<sampleBuffer1.length; i++){\n\
+ outputSamples[i] += (negate ? -sampleBuffer2[i] : sampleBuffer2[i]) / volumeCorrection;\n\
+ }\n\
+ \n\
+ return outputSamples;\n\
+} \n\
+\n\
+\n\
+TalosContentProfiler.subtestStart('audio-dft', true).then(() => {\n\
+ var _sunSpiderStartDate = new Date();\n\
+\n\
+ var iterations = 20;\n\
+\n\
+ var dft = new DFT(frameBufferLength / channels, rate);\n\
+\n\
+ var calcDFT = function() {\n\
+ var fb = getFramebuffer(), signal = DSP.getChannel(DSP.MIX, fb);\n\
+ dft.forward(signal);\n\
+ };\n\
+\n\
+ runTest(calcDFT, iterations);\n\
+\n\
+\n\
+ var _sunSpiderInterval = new Date() - _sunSpiderStartDate;\n\
+ TalosContentProfiler.subtestEnd('audio-dft', true).then(() => {\n\
+ record(_sunSpiderInterval);\n\
+ });\n\
+});\n\
+</script>\n\
+\n\
+\n\
+</body>\n\
+</html>\n\
+", "<!DOCTYPE html>\n\
+<head>\n\
+\n\
+<meta charset=utf8>\n\
+\n\
+<!--\n\
+ Copyright (C) 2007 Apple Inc. All rights reserved.\n\
+\n\
+ Redistribution and use in source and binary forms, with or without\n\
+ modification, are permitted provided that the following conditions\n\
+ are met:\n\
+ 1. Redistributions of source code must retain the above copyright\n\
+ notice, this list of conditions and the following disclaimer.\n\
+ 2. Redistributions in binary form must reproduce the above copyright\n\
+ notice, this list of conditions and the following disclaimer in the\n\
+ documentation and/or other materials provided with the distribution.\n\
+\n\
+ THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY\n\
+ EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n\
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n\
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR\n\
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n\
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n\
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n\
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n\
+ OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n\
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \n\
+-->\n\
+\n\
+<title>SunSpider audio-fft</title>\n\
+<link rel=\"stylesheet\" href=\"../kraken.css\">\n\
+</head>\n\
+\n\
+<body>\n\
+<h3>audio-fft</h3>\n\
+<div id=\"console\">\n\
+</div>\n\
+<script>\n\
+var TalosContentProfiler = parent.TalosContentProfiler;\n\
+function record(time) {\n\
+ document.getElementById(\"console\").innerHTML = time + \"ms\";\n\
+ if (window.parent) {\n\
+ parent.recordResult(time);\n\
+ }\n\
+}\n\
+\n\
+\n\
+// Audio sample data.\n\
+var channels = 2,\n\
+ rate = 44100,\n\
+ frameBufferLength = 2048,\n\
+ getFramebuffer = (function(f) {\n\
+ var frames = f,\n\
+ current = 0,\n\
+ max = frames.length - 1;\n\
+\n\
+ return function() {\n\
+ if (current == max) {\n\
+ current = 0;\n\
+ }\n\
+ return frames[current++];\n\
+ };\n\
+ })([\n\
+new Array(-9.063918018914485e-12,-3.261597155551632e-12,-7.691810383070319e-11,-4.440857404031107e-12,-1.680772881984538e-10,6.000556301843929e-11,-1.9150961372282893e-10,2.4246665786265e-10,-4.565171851655947e-11,5.450795370620654e-10,3.362514988669574e-10,9.004306744664348e-10,9.466241124300723e-10,1.175186170598863e-9,1.6831636084901902e-9,1.1990984871701471e-9,2.3562511941577213e-9,8.144737662085788e-10,2.725613068577104e-9,-6.554523590551753e-11,2.5597279851297117e-9,-1.405781158148045e-9,1.7045438394092116e-9,-3.0212734536405605e-9,1.442163333198465e-10,-4.585516411026447e-9,-1.9632779846290305e-9,-5.679597681051973e-9,-4.288398525176262e-9,-5.877284880995148e-9,-6.374909933271056e-9,-4.851113288850684e-9,-7.722416484057248e-9,-2.47689069254875e-9,-7.892031916867381e-9,1.0892343693669204e-9,-6.61385790579061e-9,5.384448886758264e-9,-3.872107523505974e-9,9.678744916641335e-9,5.3583804060508555e-11,1.3082328997882087e-8,4.604661096863083e-9,1.4708005480201791e-8,9.020721947194943e-9,1.3861386705116274e-8,1.2467070042987416e-8,1.0221797630549645e-8,1.4191283703723911e-8,3.973642304089253e-9,1.3679061439120233e-8,-4.147063581427801e-9,1.0777899461800189e-8,-1.2912646063512057e-8,5.7606563963474855e-9,-2.0772752407083317e-8,-6.882053815715494e-10,-2.6112324746918603e-8,-7.566866244701487e-9,-2.7557987891668745e-8,-1.3718089775238695e-8,-2.427747425315374e-8,-1.8031725446121527e-8,-1.6211833653301255e-8,-1.965133300529942e-8,-4.18648893329987e-9,-1.8145057012475263e-8,1.0134575845199834e-8,-1.3606820559175503e-8,2.4460184988583933e-8,-6.6646101970491145e-9,3.6226321498133984e-8,1.6094849897285712e-9,4.304074607830444e-8,9.874586481828374e-9,4.314259527404829e-8,1.6751737774711728e-8,3.579163276867803e-8,2.1068517597200298e-8,2.1507027270217804e-8,2.2072077499046827e-8,2.0971653302837012e-9,1.9569721843026855e-8,-1.95445934991767e-8,1.3969719603323938e-8,-3.986041718917477e-8,6.212331538080207e-9,-5.5206413662745035e-8,-2.396835618867499e-9,-6.249566553151453e-8,-1.0421006280125766e-8,-5.979339334771794e-8,-1.6550259829273273e-8,-4.6752756333034995e-8,-1.9834619280345578e-8,-2.479977112557208e-8,-1.9848005905487298e-8,2.9843314486299732e-9,-1.6751785736346392e-8,3.2283470119409685e-8,-1.124725823586914e-8,5.8215224640889573e-8,-4.4262269405237475e-9,7.614446673187558e-8,2.4491135786064433e-9,8.2506318221931e-8,8.19313505928676e-9,7.549270009121756e-8,1.1920842091228678e-8,5.54726611312617e-8,1.3204600968208524e-8,2.5057047992049775e-8,1.2132561622024696e-8,-1.1224615015237305e-8,9.258342537066255e-9,-4.759798244435842e-8,5.454737994625702e-9,-7.796932521841882e-8,1.702851637475078e-9,-9.695299496570442e-8,-1.136488791964041e-9,-1.0082637658115345e-7,-2.519120245736417e-9,-8.824257946571379e-8,-2.3383373015661846e-9,-6.056658463649e-8,-9.41838385060123e-10,-2.176004265663778e-8,9.601706096873386e-10,2.218358652328334e-8,2.4775965723478066e-9,6.417361220201201e-8,2.774252605419747e-9,9.717964388755718e-8,1.3009872068536765e-9,1.1542026356892165e-7,-2.0265045197476184e-9,1.153803879105908e-7,-6.7495498079495064e-9,9.647719423355738e-8,-1.1913705577626388e-8,6.124944462726489e-8,-1.623966028319046e-8,1.502435864608742e-8,-1.8389696876397466e-8,-3.4896281420060404e-8,-1.7278706465617688e-8,-8.040503729489501e-8,-1.2363916113145024e-8,-1.1392285870215346e-7,-3.8492862231009894e-9,-1.2967566931365582e-7,7.248555089489628e-9,-1.2469702426187723e-7,1.920039238711979e-8,-9.9380230267343e-8,2.98255180553042e-8,-5.747872222627848e-8,3.68760453284267e-8,-5.544654957390094e-9,3.8477701025385613e-8,4.810972953350756e-8,3.3544857558354124e-8,9.4760721935927e-8,2.2083437301034792e-8,1.2670979288031958e-7,5.314396478439676e-9,1.3856883640528395e-7,-1.442367381088161e-8,1.2817720573821134e-7,-3.3992773040836255e-8,9.6993083786856e-8,-4.995281699393672e-8,4.988867274846598e-8,-5.91591415854964e-8,-5.620970799924407e-9,-5.9357120107961236e-8,-6.059254786805468e-8,-4.9664652834735534e-8,-1.0611310585773026e-7,-3.084448252366201e-8,-1.3476119420374744e-7,-5.303653960453403e-9,-1.4182997176703793e-7,2.3200103171916453e-8,-1.26107053688429e-7,5.0111530924823455e-8,-9.008256540710136e-8,7.080907948875392e-8,-3.954905736236469e-8,8.139625862213506e-8,1.7340529012699335e-8,7.941753921159034e-8,7.14021481940108e-8,6.436970778622708e-8,1.1391774989988335e-7,3.790681546433916e-8,1.3805393450638803e-7,3.6889740151480055e-9,1.399694014025954e-7,-3.312028695745539e-8,1.1943076572151767e-7,-6.66380657321497e-8,7.98368589016718e-8,-9.120827826336608e-8,2.7651497092051613e-8,-1.023566014168864e-7,-2.8660446460548883e-8,-9.759249763874323e-8,-8.001645568356253e-8,-7.691699011047604e-8,-1.1819189182915579e-7,-4.293638866670335e-8,-1.3714550561871874e-7,-5.487733045761445e-10,-1.3398140197296016e-7,4.376378370807288e-8,-1.0939224637240841e-7,8.29331057161653e-8,-6.751718473196888e-8,1.1043897529816604e-7,-1.5242454409758466e-8,1.2139599903093767e-7,3.8936597945848916e-8,1.1341180794488537e-7,8.630295411649058e-8,8.706772547384389e-8,1.193270264820967e-7,4.592902058675463e-8,1.3286879152474285e-7,-3.930692660247814e-9,1.2498067292199266e-7,-5.482997877948037e-8,9.718515769918668e-8,-9.866953121218103e-8,5.418847948135408e-8,-1.28227270579373e-7,3.083594934949474e-9,-1.3834954870617366e-7,-4.782260987212794e-8,-1.26842650161052e-7,-9.036366321879541e-8,-9.491133567962606e-8,-1.1782764630652309e-7,-4.70599381685588e-8,-1.2601940113654564e-7,9.539609990838471e-9,-1.1390253007448337e-7,6.612728498112119e-8,-8.372249027388534e-8,1.1371697183903962e-7,-4.059829450397956e-8,1.4452912466822454e-7,8.344371416058038e-9,1.5326465074849693e-7,5.515137502243306e-8,1.3801113141198584e-7,9.23356182624957e-8,1.0062770883223493e-7,1.1407795597051518e-7,4.653392693398928e-8,1.1714049463762422e-7,-1.6075322406550185e-8,1.0134900918501444e-7,-7.747640040633996e-8,6.957183984468429e-8,-1.2793385906206822e-7,2.7206713326677345e-8,-1.5925049012821546e-7,-1.8734009898935255e-8,-1.6610192687949166e-7,-6.078472836179571e-8,-1.4693922878450394e-7,-9.224238795013662e-8,-1.0430580488218766e-7,-1.0823826812611514e-7,-4.45076224764307e-8,-1.0649359438730244e-7,2.3321303999068732e-8,-8.764186532062013e-8,8.862036082746272e-8,-5.5072241877951456e-8,1.410538743584766e-7,-1.4327970809802082e-8,1.7215407410731132e-7,2.783478691981145e-8,1.7669236740402994e-7,6.45675726218542e-8,1.5355695381913392e-7,9.00446011087297e-8,1.0598996880162304e-7,1.0038979780802038e-7,4.1135439943218444e-8,9.426747737961705e-8,-3.103694723449735e-8,7.304740989866332e-8,-9.927160249389999e-8,4.052454016800766e-8,-1.5279019294212048e-7,2.248076613753369e-9,-1.8300160320450232e-7,-3.542269766398931e-8,-1.8488543673811364e-7,-6.637513649820903e-8,-1.578263635337862e-7,-8.573766052677456e-8,-1.0576047060339988e-7,-9.064876138609179e-8,-3.660183267584216e-8,-8.067998180649738e-8,3.896485267773642e-8,-5.78489469660326e-8,1.091430661404047e-7,-2.6230463134879756e-8,1.6287407333948067e-7,8.762894410097033e-9,1.9158729003265762e-7,4.1304232922811934e-8,1.9057252131915448e-7,6.612271619133026e-8,1.597534549091506e-7,7.93595944514891e-8,1.0373634040661273e-7,7.916997901702416e-8,3.1118556620413074e-8,6.597691282195228e-8,-4.683636234403821e-8,4.234251704815506e-8,-1.1795428633831762e-7,1.2487103795422172e-8,-1.7106017935475393e-7,-1.8456139727618392e-8,-1.9774194015553803e-7,-4.5320295072315275e-8,-1.936883222697361e-7,-6.376741623626003e-8,-1.5938736908083229e-7,-7.099095000739908e-8,-1.0007260442534971e-7,-6.614403957883042e-8,-2.4920090879732015e-8,-5.042738848715089e-8,5.4377210290113e-8,-2.6831063593135696e-8,1.2543733873826568e-7,4.190550129123949e-10,1.7713182387524284e-7,2.660926767816818e-8,2.0133609268668806e-7,4.734960157293244e-8,1.9421217700710258e-7,5.9309229527571006e-8,1.568193965795217e-7,6.075319447518268e-8,9.495667541159492e-8,5.1793612954043056e-8,1.8258184297792468e-8,3.4318482278195006e-8,-6.131359242544931e-8,1.1618418227499205e-8,-1.3134261678260373e-7,-1.2217928002655754e-8,-1.8090540265802701e-7,-3.3030893575869413e-8,-2.0228301877978083e-7,-4.731122515977404e-8,-1.9216858504478296e-7,-5.279125758761438e-8,-1.5218093096791563e-7,-4.880642023863402e-8,-8.86045441461647e-8,-3.636942480511607e-8,-1.1396908305982834e-8,-1.794975901248108e-8,6.737802493717027e-8,2.9967353043502953e-9,1.354440257728129e-7,2.2661327037099e-8,1.8223443021270214e-7,3.756455413395088e-8,2.0054038429861976e-7,4.51666153367114e-8,1.8762639797387237e-7,4.429934108429734e-8,1.4564022876584204e-7,3.534657722070733e-8,8.125561379301871e-8,2.0145094481449632e-8,4.6065018466379115e-9,1.627221024591563e-9,-7.23151174497616e-8,-1.672687943710116e-8,-1.3754423378031788e-7,-3.1527999766467474e-8,-1.8101286514138337e-7,-4.0092068331887276e-8,-1.9611144352893461e-7,-4.0920408395095365e-8,-1.8069772522721905e-7,-3.3960340317662485e-8,-1.373995388576077e-7,-2.060184201013726e-8,-7.316809558233217e-8,-3.4121434566714015e-9,1.8424062275812503e-9,1.4342575127557211e-8,7.58872715778125e-8,2.930133291556558e-8,1.3747893490290153e-7,3.862820463496064e-8,1.771775828274258e-7,4.053629965028449e-8,1.8904509602180042e-7,3.4620917688243935e-8,1.7153544717984914e-7,2.1940055106028922e-8,1.2769024237968551e-7,4.8280348607931955e-9,6.461311841121642e-8,-1.3525756514809473e-8,-7.684699099286263e-9,-2.9658723477155036e-8,-7.788023737020922e-8,-4.047191026756991e-8,-1.3512089935829863e-7,-4.380772722356596e-8,-1.7071022284653736e-7,-3.8862765450176084e-8,-1.794353323703035e-7,-2.6359270322018347e-8,-1.6033061456255382e-7,-8.440215637506299e-9,-1.1676839051233401e-7,1.1695799884137159e-8,-5.586884554986682e-8,3.035879103663319e-8,1.2666705906383413e-8,4.4031899903984595e-8,7.810783131390053e-8,5.001792047210074e-8,1.3038322776992572e-7,4.6951285526120046e-8,1.6163825478088256e-7,3.50808093685373e-8,1.6741982733492478e-7,1.6268021596488325e-8,1.4730845521171432e-7,-6.305238997583729e-9,1.0490954593933566e-7,-2.867316517551899e-8,4.721489688108704e-8,-4.677700715660649e-8,-1.6551972237266455e-8,-5.7190277402696665e-8,-7.641661170509906e-8,-5.775084588321988e-8,-1.232217812230374e-7,-4.798507191594581e-8,-1.500348929539541e-7,-2.9243762966757458e-8,-1.531775808416569e-7,-4.518951435272811e-9,-1.327244092408364e-7,2.2034459590258848e-8,-9.240281428901653e-8,4.5795644609825104e-8,-3.8925911383103085e-8,6.247649508850373e-8,1.9126481731746026e-8,6.888492265488821e-8,7.268964452578075e-8,6.35182573205384e-8,1.1363691498900153e-7,4.687864318952961e-8,1.360183716769825e-7,2.144827604411148e-8,1.3692603317849716e-7,-8.680026475360592e-9,1.1685883549716891e-7,-3.846272988994315e-8,7.954528058462529e-8,-6.274878217027435e-8,3.126580239154464e-8,-7.716540295632512e-8,-2.020383149670124e-8,-7.889514108683215e-8,-6.68497079914232e-8,-6.720723888520297e-8,-1.0167435959829163e-7,-4.3645762559663126e-8,-1.1975075153713988e-7,-1.1832858248794764e-8,-1.1891678042275089e-7,2.308856750232735e-8,-1.0001188144315165e-7,5.528772462071174e-8,-6.663564988684811e-8,7.921842382074828e-8,-2.4482059046704308e-8,9.056988403699506e-8,1.9629631253792468e-8,8.703290887979165e-8,5.8861960638978417e-8,6.874705604786868e-8,8.742540558159817e-8,3.8344889929931014e-8,1.0143502748860556e-7,5.755360632520024e-10,9.94316948776941e-8,-3.843843643380751e-8,8.249778460367452e-8,-7.219536968250395e-8,5.3968339130960885e-8,-9.489680508067977e-8,1.8800008660946332e-8,-1.0243961412470526e-7,-1.728548326696e-8,-9.314704385587902e-8,-4.873542280847687e-8,-6.811089292568795e-8,-7.102593002628055e-8,-3.107823687287237e-8,-8.131225115448615e-8,1.2109261149362283e-8,-7.877756758034593e-8,5.4438466179362877e-8,-6.463856294658399e-8,8.88658746589499e-8,-4.182719237633137e-8,1.0948871675964256e-7,-1.441798502810343e-8,1.1255299625645421e-7,1.309215491573923e-8,9.71264810800676e-8,3.652399271913964e-8,6.531689678013208e-8,5.2654801407925333e-8,2.1990270937521927e-8,5.965749494407646e-8,-2.597437287477078e-8,5.7280796994518823e-8,-7.077982644432268e-8,4.6758000138424904e-8,-1.0498003177872306e-7,3.0479803569960495e-8,-1.2271735272406659e-7,1.1502635288707097e-8,-1.207218360832485e-7,-7.012232572378707e-9,-9.89030155551518e-8,-2.232631501897231e-8,-6.042829170382902e-8,-3.253148150861307e-8,-1.126556270492074e-8,-3.677537208091053e-8,4.0744591700558885e-8,-3.5281200183590045e-8,8.714194166259404e-8,-2.9175275528814382e-8,1.2022522355437104e-7,-2.0171768255750067e-8,1.3433009371510707e-7,-1.0184898258103203e-8,1.2679538485826924e-7,-9.48340073136933e-10,9.845307857858643e-8,6.285233666858403e-9,5.355287413522092e-8,1.0912705405985434e-8,-8.745786317376769e-10,1.2994831877222168e-8,-5.6121411518006425e-8,1.3126058462376022e-8,-1.0319883614329228e-7,1.2198796639495413e-8,-1.3430187095764268e-7,1.1121471743535949e-8,-1.4410350956950424e-7,1.0556746588008536e-8,-1.306638210962774e-7,1.0739150013705512e-8,-9.579873250231685e-8,1.1414194034387037e-8,-4.4841215185442707e-8,1.1911470920722422e-8,1.4175789431192243e-8,1.1336403815676022e-8,7.178886107794824e-8,8.836241960352709e-9,1.186250813134393e-7,3.879819132635021e-9,1.4692922434278444e-7,-3.515509661156102e-9,1.5184838275672519e-7,-1.2668508020396985e-8,1.3226078010575293e-7,-2.226547479722285e-8,9.100791231730909e-8,-3.054695696391718e-8,3.4484436639559135e-8,-3.5622434779725154e-8,-2.835523815747365e-8,-3.585806140904424e-8,-8.741915280552348e-8,-3.0262789607604645e-8,-1.331023611328419e-7,-1.8791553202390787e-8,-1.5785127516210196e-7,-2.495440298844187e-9,-1.5741350978260016e-7,1.6527152979506354e-8,-1.315653577194098e-7,3.5388893593335524e-8,-8.419365826739522e-8,5.085162513296382e-8,-2.2711049041390652e-8,5.987803319840168e-8,4.3106652469759865e-8,6.020332676826001e-8,1.0267898886695548e-7,5.082233300868211e-8,1.4632553302362794e-7,3.229512657298983e-8,1.6684182924109336e-7,6.800249252592039e-9,1.6068939601154852e-7,-2.209532112829038e-8,1.2860309084317123e-7,-4.9929113288271765e-8,7.551252423354526e-8,-7.203408358691377e-8,9.782965548765787e-9,-8.431845088807677e-8,-5.810602488054428e-8,-8.400549944553859e-8,-1.1723588499990001e-7,-7.020152992254225e-8,-1.5800895880602184e-7,-4.4182222325162e-8,-1.737094663667449e-7,-9.329681915914989e-9,-1.6161074256615393e-7,2.929103004589706e-8,-1.2344602851044328e-7,6.566628485416004e-8,-6.51622968916854e-8,9.377239962304884e-8,4.008910536867916e-9,1.0857223031734975e-7,7.30174321006416e-8,1.0690452256767458e-7,1.3076454763449874e-7,8.811070983938407e-8,1.6789185508514493e-7,5.428115912309295e-8,1.7830146248343226e-7,1.0058755606223713e-8,1.6015852111195272e-7,-3.7988669987498724e-8,1.1621219186963572e-7,-8.234437132159655e-8,5.337874142696819e-8,-1.1572207370136312e-7,-1.8349950892115885e-8,-1.3226288331225078e-7,-8.749950097808323e-8,-1.2855345232765103e-7,-1.429532971997105e-7,-1.0428958319153026e-7,-1.757441623340128e-7,-6.246106920571037e-8,-1.8050761241283908e-7,-9.007450785247784e-9,-1.5636099703897344e-7,4.8020453391472984e-8,-1.0706388309245085e-7,9.967530445464945e-8,-4.043157275646081e-8,1.3752170957559429e-7,3.290755046236882e-8,1.5501495909120422e-7,1.0121155469278165e-7,1.4862459352116275e-7,1.535100864202832e-7,1.18511877644778e-7,1.8137095025849703e-7,6.863422186142998e-8,1.8026273096438672e-7,6.241009486984694e-9,1.502937152508821e-7,-5.9178759670430736e-8,9.6205269528582e-8,-1.1734320537470921e-7,2.661998621533712e-8,-1.587992954910078e-7,-4.7336740749415185e-8,-1.7646118521952303e-7,-1.1382016396055405e-7,-1.6681565284670796e-7,-1.621684049268879e-7,-1.305898820191942e-7,-1.8461685158399632e-7,-7.275829716490989e-8,-1.7754862824403972e-7,-1.8693526726565324e-9,-1.4207904541763128e-7,7.12196168706214e-8,-8.387929995024024e-8,1.350101968000672e-7,-1.226757717631699e-8,1.791784427496168e-7,6.128705365426868e-8,1.9624867775291932e-7,1.2500586876740272e-7,1.8285521719008102e-7,1.6869270780262013e-7,1.4037811979505932e-7,1.8536968582338886e-7,7.483755837256467e-8,1.7239531757695659e-7,-3.954397698180401e-9,1.3188457614887739e-7,-8.386642491586827e-8,7.036361182599649e-8,-1.523217889598527e-7,-2.283826461280114e-9,-1.982851216553172e-7,-7.440858951213158e-8,-2.140455137578101e-7,-1.3446904745251231e-7,-1.9650781268865103e-7,-1.7288331832787662e-7,-1.4777623391637462e-7,-1.8356305986344523e-7,-7.492307929624076e-8,-1.648810297183445e-7,1.1036519254048471e-8,-1.199205286184224e-7,9.681468782218872e-8,-5.59659980581273e-8,1.689130897375435e-7,1.6679663872309902e-8,2.1575439745902258e-7,8.635897330577791e-8,2.2954650091833173e-7,1.419358568455209e-7,2.0757832430717826e-7,1.745807907127528e-7,1.5273110420821467e-7,1.791784427496168e-7,7.311207639304484e-8,1.5513171547354432e-7,-1.9145318219671026e-8,1.064367722847237e-7,-1.0973732855745766e-7,4.1019006857823115e-8,-1.8441545535097248e-7,-3.0559448305211845e-8,-2.3123673997815786e-7,-9.680942980594409e-8,-2.424790750410466e-7,-1.4716398766267957e-7,-2.15915846979442e-7,-1.7366949123243103e-7,-1.5523812635365175e-7,-1.7224643045210541e-7,-6.954682874038554e-8,-1.4331929776290053e-7,2.801593268486613e-8,-9.171864689960785e-8,1.2229020285303704e-7,-2.5874314246721042e-8,1.9846278576096665e-7,4.356334670774231e-8,2.4440464585495647e-7,1.054514413567631e-7,2.5260820279982e-7,1.4994745356489148e-7,2.214165988334571e-7,1.7008042618726904e-7,1.5534149611085013e-7,1.6284681692013692e-7,6.44118358650303e-8,1.2965963946953707e-7,-3.735416953531967e-8,7.608232976963336e-8,-1.3411838040156e-7,1.0896656021941453e-8,-2.1069845956844802e-7,-5.533853197903227e-8,-2.5495873501313326e-7,-1.1200258853705236e-7,-2.5974125605898735e-7,-1.5012123810720368e-7,-2.2402615229566436e-7,-1.6379334510929766e-7,-1.5313399615024537e-7,-1.5110805406948202e-7,-5.793131663267559e-8,-1.1440880598456715e-7,4.684170562541112e-8,-5.986959195070085e-8,1.4486286659121106e-7,3.543078719303594e-9,2.207816862664913e-7,6.554610365583358e-8,2.626331934152404e-7,1.1621221318591779e-7,2.637312945807935e-7,1.4756460586795583e-7,2.2374074148956424e-7,1.548379913174358e-7,1.487551344325766e-7,1.372055606907452e-7,5.036477546127571e-8,9.785939880657679e-8,-5.614236897599767e-8,4.344204285189335e-8,-1.5416648579957837e-7,-1.707385877125489e-8,-2.2839421376374958e-7,-7.386714173662767e-8,-2.672012158200232e-7,-1.1786644904532295e-7,-2.6448051926308835e-7,-1.4220435673450993e-7,-2.2060758908537537e-7,-1.4329432929116592e-7,-1.423892257435e-7,-1.2135944871261017e-7,-4.200282432975655e-8,-8.033579490529519e-8,6.490785153800971e-8,-2.7174962724529905e-8,1.6168131367066962e-7,2.9331772566365544e-8,2.3324616904574214e-7,8.000931472906814e-8,2.684793400931085e-7,1.1679284739329887e-7,2.619423185024061e-7,1.3401688647718402e-7,2.1472467892635905e-7,1.2929177728437935e-7,1.3426242162495328e-7,1.0383159576576872e-7,3.3161711598950205e-8,6.218888870535011e-8,-7.2784388294167e-8,1.1450310921645723e-8,-1.6707475936073024e-7,-3.9966550957615254e-8,-2.350818988361425e-7,-8.37119387142593e-8,-2.6633134098119626e-7,-1.1286404344446055e-7,-2.5612271770114603e-7,-1.2302950835874071e-7,-2.062390649371082e-7,-1.1300813440584534e-7,-1.2463814869079215e-7,-8.492092717915511e-8,-2.4177921886803233e-8,-4.378986773190263e-8,7.941886792650621e-8,3.3493563478259603e-9,1.7003641517021606e-7,4.864789104885858e-8,2.3368514234789473e-7,8.475183221889893e-8,2.606714133435162e-7,1.0600088984347167e-7,2.47080549797829e-7,1.093205383995155e-7,1.9534485318217776e-7,9.466675976455008e-8,1.1381365538909449e-7,6.495940851891646e-8,1.540166749691707e-8,2.5524627744744066e-8,-8.446616561741394e-8,-1.6848247241796344e-8,-1.7028382615080773e-7,-5.507182265773736e-8,-2.2888355033501284e-7,-8.29474018360088e-8,-2.5146613324977807e-7,-9.61746167149613e-8,-2.3492745526709768e-7,-9.30190964254507e-8,-1.8228004705633793e-7,-7.453374450960837e-8,-1.0211371659352153e-7,-4.430629019225307e-8,-7.190720907601644e-9,-7.786582045810064e-9,8.7595566355958e-8,2.868361548280518e-8,1.6756843024268164e-7,5.8966605820387485e-8,2.2055249360164453e-7,7.816283442707572e-8,2.387361348610284e-7,8.340805379702942e-8,2.1982599207603926e-7,7.430342918723909e-8,1.6732249719098036e-7,5.291352067615662e-8,8.988544664134679e-8,2.3342494159805938e-8,-9.657696864451282e-11,-9.029974989971379e-9,-8.849696087054326e-8,-3.851283736366895e-8,-1.6168071681477159e-7,-6.009787512084586e-8,-2.086184167637839e-7,-7.031114535038796e-8,-2.2255642306845402e-7,-6.777638361654681e-8,-2.0198783090563666e-7,-5.339874320497984e-8,-1.5078565240855824e-7,-3.0144647666929814e-8,-7.74920465573814e-8,-2.4640200990688754e-9,6.107484296080656e-9,2.4536632281524362e-8,8.688752473062777e-8,4.6019223987059377e-8,1.5245490203597e-7,5.827331506225164e-8,1.930607993472222e-7,5.9356413117939155e-8,2.0305571979406523e-7,4.9406320812295235e-8,1.8167025928050862e-7,3.057391495531192e-8,1.3301294643497386e-7,6.593907642127306e-9,6.530615337396739e-8,-1.7924634221344604e-8,-1.0502304803594598e-8,-3.8357740095307236e-8,-8.251703320638626e-8,-5.09184445718347e-8,-1.3977266632991814e-7,-5.334685226898728e-8,-1.7391343476447219e-7,-4.531527508788713e-8,-1.8041541238744685e-7,-2.847492908131244e-8,-1.5917244411411957e-7,-6.137511832093878e-9,-1.1437219882282079e-7,1.7349023551105347e-8,-5.37032178726804e-8,3.741698151316086e-8,1.296049845223024e-8,5.013745862925134e-8,7.517348876717733e-8,5.296352867389942e-8,1.2356650813671877e-7,4.5221725031296955e-8,1.512654534963076e-7,2.825746747703306e-8,1.548669530393454e-7,5.2072621770093974e-9,1.3483074212672364e-7,-1.9566755327105056e-8,9.524914901248849e-8,-4.127851127577742e-8,4.305459810893808e-8,-5.561204829973576e-8,-1.3186848946133978e-8,-5.95453570895188e-8,-6.468775382018066e-8,-5.194998209390178e-8,-1.0382181869772467e-7,-3.385292757229763e-8,-1.252602146450954e-7,-8.305409693321053e-9,-1.266889739781618e-7,2.01266487920293e-8,-1.0901331393142755e-7,4.616561000148067e-8,-7.604103302583098e-8,6.477917224856355e-8,-3.372076662344625e-8,7.212108243948023e-8,1.0917915460595395e-8,6.628347648529598e-8,5.093718868920405e-8,4.771956696458801e-8,8.057844524955726e-8,1.924885140169863e-8,9.609434670210248e-8,-1.4367117273650365e-8,9.62030739515285e-8,-4.7215870324635034e-8,8.211441127059516e-8,-7.326191564516193e-8,5.714957751479233e-8,-8.743310786485381e-8,2.6044631340482738e-8,-8.657399064304627e-8,-5.926722224103287e-9,-7.00910334217042e-8,-3.384931801519997e-8,-4.016405341644713e-8,-5.3931231036585814e-8,-1.4717116414431075e-9,-6.401522512078373e-8,3.953713800797232e-8,-6.376927785822772e-8,7.571323124011542e-8,-5.454768370327656e-8,1.0044124110208941e-7,-3.897437750310928e-8,1.0882675383072637e-7,-2.034499857472838e-8,9.862651495495811e-8,-1.9718697785719996e-9,7.074959285091609e-8,1.3404161336438847e-8,2.9227308573354094e-8,2.4029375822465227e-8,-1.9362573766557034e-8,2.931786724502672e-8,-6.693563392445867e-8,2.9780522936562193e-8,-1.0524054516736214e-7,2.673979793144099e-8,-1.2727836917747481e-7,2.1905208313910407e-8,-1.2855795716859575e-7,1.6910888689380954e-8,-1.0796576077609643e-7,1.2917411140733748e-8,-6.808754449139087e-8,1.0364715308242012e-8,-1.4907442391631776e-8,8.924573080548726e-9,4.308567014277287e-8,7.658934819687602e-9,9.625129138157718e-8,5.343167686078232e-9,1.3539460042011342e-7,8.767813142185332e-10,1.5334450154114165e-7,-6.316128065009252e-9,1.4624281163833075e-7,-1.5995510693755932e-8,1.1431623647695233e-7,-2.7000339741789503e-8,6.198324342676642e-8,-3.7368934613368765e-8,-2.7429507554188604e-9,-4.467732850343964e-8,-6.947900033082988e-8,-4.65375258329459e-8,-1.271353227139116e-7,-4.11612219863855e-8,-1.657535761978579e-7,-2.787074038224091e-8,-1.7821416520291677e-7,-7.4418835538381245e-9,-1.6152242210409895e-7,1.78118000349059e-8,-1.174446140339569e-7,4.425945121511177e-8,-5.236780964423815e-8,6.74662032906781e-8,2.361669260153576e-8,8.292775532936503e-8,9.827665792272455e-8,8.690673070077537e-8,1.5920657858714549e-7,7.721943973137968e-8,1.9588374300383293e-7,5.381905054946401e-8,2.01472317939988e-7,1.9046609622819233e-8,1.7406878782821877e-7,-2.252760111787211e-8,1.1716433334640897e-7,-6.468043523000233e-8,3.9226861758834275e-8,-1.0046120735296427e-7,-4.755322891014657e-8,-1.2333094900895958e-7,-1.291692797167343e-7,-1.283278550090472e-7,-1.920576551128761e-7,-1.1305681368867226e-7,-2.2534644017468963e-7,-7.831395976154454e-8,-2.2272135424827866e-7,-2.8210422442498384e-8,-1.835907994518493e-7,3.026283934559615e-8,-1.1333888494391431e-7,8.819482388844335e-8,-2.2601398086408153e-8,1.3610795690510713e-7,7.434063320488349e-8,1.6550283987726289e-7,1.6180867135062726e-7,1.70341195371293e-7,2.2526110399212484e-7,1.482129619034822e-7,2.537052807838336e-7,1.0096973568352041e-7,2.415877418115997e-7,3.468574050202733e-8,1.8983951122208964e-7,-4.1086096302933584e-8,1.0588495058527769e-7,-1.1468043936702088e-7,2.5876758513732057e-9,-1.7411272779099818e-7,-1.0371854131108194e-7,-2.0902572828163102e-7,-1.9581293031478708e-7,-2.124729689967353e-7,-2.5837624662017333e-7,-1.8223526865313033e-7,-2.805332712796371e-7,-1.2142896821387694e-7,-2.5772834533199784e-7,-3.826910699444852e-8,-1.9261226213984628e-7,5.501317446032772e-8,-9.477400908508571e-8,1.4396246683645586e-7,2.0663790678554506e-8,2.141380548437155e-7,1.353819669702716e-7,2.5345423182443483e-7,2.3077254240888578e-7,2.542422521401022e-7,2.909561942487926e-7,2.1468599697982427e-7,3.054196326957026e-7,1.3936859488694608e-7,2.708362671910436e-7,3.880498411490407e-8,1.9175661236658925e-7,-7.20061592573984e-8,8.003340923323776e-8,-1.7581527345100767e-7,-4.695015576317019e-8,-2.5569300987626775e-7,-1.6888239429135865e-7,-2.9772394327665097e-7,-2.6572107003630663e-7,-2.942533399163949e-7,-3.216046877696499e-7,-2.4395217224082444e-7,-3.2649120385030983e-7,-1.5415402287999314e-7,-2.794814122353273e-7,-3.692490579965124e-8,-1.8526327494328143e-7,9.23838996413906e-8,-5.7667513431169937e-8,2.1058662014183938e-7,7.687667391564901e-8,2.963788858778571e-7,2.0058980965131923e-7,3.4519857194936776e-7,3.073854202284565e-7,3.573021274405619e-7,3.7416907616716344e-7,3.1087432716958574e-7,3.706501559008757e-7,1.8159762760205922e-7,2.960990173050959e-7,3.2668427962789792e-9,1.7206878055731067e-7,-1.4935011449779267e-7,2.215257310922425e-8,-2.558177527589578e-7,-1.244094391950057e-7,-3.4790230074577266e-7,-2.48221766696588e-7,-4.0844787463356624e-7,-3.424703720611433e-7,-3.83691684646692e-7,-3.784057298616972e-7,-3.049817678402178e-7,-3.52345750798122e-7,-2.4648699081808445e-7,-3.195747524387116e-7,-1.5783344053943438e-7,-2.518800101825036e-7,3.3997068271673925e-8,-6.30552534630624e-8,2.2121484732906538e-7,1.4892148669787275e-7,3.141547040286241e-7,2.5954253146664996e-7,4.2449011061762576e-7,3.912932697858196e-7,5.711276571673807e-7,5.997012522129808e-7,5.73685213112185e-7,6.688356961603859e-7,3.7676232977901236e-7,5.146665671418305e-7,1.2447100061763194e-7,2.9143745905457763e-7,-7.52123909819602e-8,5.3134645128238844e-8,-2.977363067202532e-7,-2.6843949285648705e-7,-6.520573947454977e-7,-6.28192310614395e-7,-9.370967291033594e-7,-8.570544878239161e-7,-8.548654477635864e-7,-9.001176977108116e-7,-5.94005030052358e-7,-8.865962399795535e-7,-4.7458777885367454e-7,-8.468994110444328e-7,-3.512149930884334e-7,-6.936784302524757e-7,-8.961339403867896e-8,-4.980943231203128e-7,1.230076236424793e-7,-3.2142719419425703e-7,2.4483753691129095e-7,-8.036778353925911e-8,3.2601849397906335e-7,1.5931499319776776e-7,2.634457132444368e-7,3.075739698488178e-7,1.0006087336478231e-7,4.02592405635005e-7,-1.3917727414991532e-8,2.7964540549874073e-7,-1.6491451049205352e-7,-1.252113293048751e-7,-4.322458266869944e-7,-3.4416802918713074e-7,-5.973930683467188e-7,-1.608441806411065e-7,-5.607481625702349e-7,-9.189005822918261e-8,-6.423296667890099e-7,-4.1814701035036705e-7,-8.845384513733734e-7,-6.042727704880235e-7,-6.649395345448283e-7,-1.4977459272813576e-7,2.076261296224402e-7,6.342019105431973e-7,9.887080523185432e-7,0.0000011756283129216172,0.0000012178294355180697,0.0000014045423313291394,0.0000012169082310720114,0.0000014515543398374575,0.0000013197013686294667,0.0000013726862562180031,0.0000014580078868675628,0.0000013222773986854008,0.0000011356053164490731,0.0000010844875077964389,1.0777938541650656e-7,2.2619612138896628e-7,-7.482602768504876e-7,-7.17060970600869e-7,-6.657965059275739e-7,-8.349057907253155e-7,-3.209282795069157e-7,-3.6607696074497653e-7,-3.680989948406932e-7,-1.1575120595352928e-7,-4.95609242534556e-7,-3.544887476891745e-7,-5.947504178038798e-7,-8.185001547644788e-7,-7.568756359432882e-7,-9.477171829530562e-7,-7.301545679183619e-7,-6.806443479945301e-7,-6.662963869530358e-7,-7.349966608671821e-7,-9.223255688084464e-7,-0.0000011680775742206606,-9.623134928915533e-7,-0.0000011299755442450987,-5.716998430216336e-8,-4.1727275856828783e-7,0.0000012798651596312993,4.575892944558291e-7,0.0000017962800029636128,0.0000010811531865329016,0.0000012475534276745748,0.0000010263622698403196,6.50961169412767e-7,3.0017449148544983e-7,6.232056648514117e-7,-2.1072614231343323e-7,5.681872607965488e-7,-1.0082136014943899e-7,5.6389637848042184e-8,-3.821854477337183e-8,-1.9356215830157453e-7,-8.707064580448787e-8,3.1259128263627645e-7,3.307707174826646e-7,6.644752374995733e-7,5.657690280713723e-7,2.2780943709221901e-7,-9.992874083764036e-8,-3.080589294768288e-8,-4.176954746526462e-7,3.027119532816869e-7,2.994362375829951e-7,2.1587086962426838e-7,4.623799156888708e-7,-6.439171329475357e-8,-1.8978136040459503e-7,6.838890840299428e-7,1.823492823405104e-7,0.0000016455330751341535,0.000001461430429117172,0.0000012464244036891614,0.0000017142567685368704,1.521793251413328e-7,8.734431844459323e-7,-2.2615671468884102e-7,3.06045933484711e-7,-2.8238775939826155e-7,7.30272518012498e-8,-0.00000103277864127449,-6.274767088143562e-7,-0.0000019067788343818393,-0.0000013300996215548366,-0.0000018798998553393176,-0.0000011391654197723255,-0.0000017127154023910407,-0.0000010173259852308547,-0.000002217254632341792,-0.0000019248880107625155,-0.0000020913898879371118,-0.0000021242335606075358,-5.66933863410668e-7,-2.713406956900144e-7,8.740189514355734e-7,0.0000017201797390953288,0.000001283963001696975,0.0000020493916963459924,0.000001458434553569532,0.0000017541703982715262,0.0000023141244582802756,0.0000024709238459763583,0.000003410554882066208,0.0000036500086935120635,0.000002940127160400152,0.0000032614680094411597,9.374844012199901e-7,0.0000014839671393929166,5.367808171286015e-7,0.0000010193630259891506,0.0000026928789793601027,0.000002544775270507671,0.0000042918609324260615,0.000004003791673312662,0.0000036620276659959927,0.000004126029125472996,0.0000026585357773001306,0.0000032682805795047898,0.000002984725369969965,0.000002696561978154932,0.0000035732336982619017,0.0000029659092888323357,0.0000024645387384225614,0.0000024580745048297103,7.03024511494732e-7,8.939995268519851e-7,3.9872708157417946e-7,4.0552660607318103e-7,2.736072133302514e-7,5.195767585064459e-7,-6.794140290367068e-7,-3.420753387217701e-7,-8.344152320205467e-7,-9.72813950284035e-7,-8.701111937625683e-7,-0.0000012382436125335516,-0.0000019544306724128546,-0.0000023187603801488876,-0.000002346559995203279,-0.0000032190364436246455,-0.000002146023462046287,-0.0000034883794342022156,-0.000002175008376070764,-0.0000032290981835103594,-7.618077688675839e-7,-0.0000014997837070040987,3.1260697141988203e-7,-6.726122592226602e-7,-0.0000018081600501318462,-0.0000030780636279814644,-0.0000033705023270158563,-0.0000045586630221805535,-0.0000017679449229035527,-0.0000024891428438422736,-7.876126346673118e-7,-8.457274702777795e-7,-0.000001939183221111307,-0.0000018313490954824374,-0.0000030375533697224455,-0.0000032928546715993434,-0.000002612765911180759,-0.0000027941657663177466,-1.2583780062414007e-7,-1.304837837778905e-7,0.000002071829158012406,0.0000012727984994853614,0.0000010511553227843251,-1.8225119902126607e-7,-8.205987001019821e-7,-6.519076123367995e-7,-5.326791665538622e-7,7.292591703844664e-7,3.8590383155678865e-7,6.530359542011865e-7,8.554245312097919e-8,-2.893132773351681e-7,-0.0000011364130614310852,-3.044409879748855e-7,-0.0000015163764146564063,-2.6364565997027967e-7,2.97657777537097e-7,6.473703706433298e-8,0.000001827797973419365,7.450047974089102e-7,0.0000011695537978084758,8.898541636881419e-7,0.0000016373277276215958,0.00000214285728361574,0.000004091570190212224,0.000004667096163757378,0.000004342218744568527,0.000004851250650972361,0.0000016070987385319313,0.000002105672592733754,-8.746696380512731e-7,-4.304055778447946e-7,-9.53932840275229e-7,-0.000001061122361534217,9.499452744421433e-7,-3.891087771989987e-7,0.0000013530089972846326,-2.494775799277704e-7,-0.0000016349131328752264,-0.00000132011086861894,-0.0000037219176647340646,-0.0000016550230839129654,-0.0000018801339365381864,-5.213034341977618e-7,3.8171768323991273e-7,4.5613657562171284e-7,5.042894031248579e-7,8.237010433731484e-7,3.6334296282802825e-7,8.760717378208938e-7,0.0000012198424883536063,2.7994315132673364e-7,0.000002176149791921489,-5.067900019639637e-7,0.000002342127800147864,-8.856314934746479e-7,0.0000014781663821850088,-0.0000013078295069135493,-3.082652710872935e-7,-0.0000021032362838013796,-0.000002368892637605313,-0.000002730813321250025,-0.0000034160445920861093,-0.0000024211738036683528,-0.0000029086347694828874,-0.000001562975739943795,-0.0000019350463844602928,-0.0000014834488410997437,-0.0000014534834917867556,-0.0000016977220411718008,-0.000001213783093589882,-6.728521384502528e-7,-5.774323881269083e-7,6.11771270087047e-7,9.30576675273187e-7,8.939668418861402e-7,0.0000027284738735033898,0.0000018481326833352796,0.000003407468284422066,0.000004100708338228287,0.000003105833684458048,0.000004962969796906691,0.0000029469849778251955,0.0000037807042190252105,0.000002233268787676934,0.0000031275560559151927,8.682991392561235e-8,0.0000028762378860847093,-0.0000017796860447560903,6.71204247737478e-7,-0.000001924816388054751,-0.0000020046747977175983,-0.0000019394990431464976,-0.000002175224835809786,-0.000002797315119096311,-9.022790550261561e-7,-0.0000029163450108171673,-4.2059861016241484e-7,-0.000002293946636200417,-8.709507710591424e-7,-0.000002271910261697485,-0.000001970868197531672,-0.000001801297685233294,-0.0000029321738566068234,-4.773514774569776e-7,-0.000002368856030443567,5.963245541806828e-8,-3.129603953766491e-7,8.343644140040851e-7,0.000001990498731174739,0.0000029133886982890544,0.0000031243421290128026,0.0000034031081668217666,0.0000025283086415583966,0.0000014670375776404398,0.0000014539837138727307,1.7197021406900603e-7,6.120799866948801e-7,7.339646117543452e-7,-1.7980983102461323e-7,0.00000206096865440486,2.195063188992208e-7,0.0000024490736905136146,9.115740340348566e-7,0.000001012251686915988,-7.794897669555212e-7,2.7506416699907277e-8,-0.0000024963355826912448,4.2787877418959397e-7,-0.0000011866404747706838,-6.74784530474426e-7,1.879491264844546e-7,-0.000002654897798493039,-3.367568979228963e-7,-0.0000023314582904276904,-6.135625199021888e-7,-7.370135222117824e-7,5.8683184533947497e-8,8.916401839087484e-7,0.0000014124995004749508,0.000002813352239172673,0.0000026935217647405807,0.0000029301741051313,0.0000022357385205395985,0.000001388805912938551,0.0000018279930600328953,0.000001394297441947856,0.0000029639745662279893,0.0000018493608422431862,0.0000016150321471286588,3.5992877656099154e-7,-0.000002704265398278949,-0.0000010994443755407701,-0.000004828819328395184,-0.0000013743367617280455,-0.000005059882369096158,-0.000002426815854050801,-0.000006455979018937796,-0.000003922141331713647,-0.000006152407877380028,-0.0000028160709462099476,-0.0000024322541776200524,0.0000010553062566032168,3.0933875905247987e-7,0.0000034888794289145153,4.5727097131020855e-7,0.000002063457259282586,0.0000012197371006550384,-2.0020483049165705e-8,0.0000027144808427692624,2.0493121155595873e-7,0.000002951913074866752,5.058386705059092e-7,0.0000032117116006702418,-0.0000018270185364599456,0.0000033168328172905603,-0.000004480983534449479,4.185849320492707e-7,-0.000003851749170280527,-0.0000025518065740470774,-0.000001983080892387079,-0.0000010308563105354551,-0.000002553476633693208,0.0000011045649443985894,-0.000003134451389996684,-7.845445111342997e-7,-0.0000015007548199719167,-0.000004307928065827582,-7.732348876743345e-7,-0.000005889574822504073,-6.64547201267851e-7,-0.0000036463213746174006,0.0000014335303148982348,9.660944897404988e-7,0.0000030718933885509614,0.000002293975967404549,0.000004045246441819472,4.4917024411006423e-7,0.00000643897510599345,0.000001357122073386563,0.000005552279162657214,0.000003269643684689072,7.760314701954485e-8,9.674236025603022e-7,-0.000001983548600037466,-0.000003136755140076275,6.122683657849848e-7,-0.000005188488557905657,0.0000012430969036358874,-0.000005397181666921824,-0.0000011439969966886565,-0.000004655254997487646,-0.0000034371810215816367,-0.0000031633135222364217,-0.000004312693818064872,-4.008234952834755e-7,-0.0000041818429963313974,0.0000022276451545621967,-0.000004215441549604293,0.0000017187583125632955,-0.0000034841016258724267,6.790135671508324e-7,-0.0000010553040965533,0.0000027846174361911835,2.2888437456458632e-7,0.0000037306460853869794,-3.539622639436857e-7,4.354231180059287e-7,-4.999796487936692e-8,-0.000002381189915467985,3.447065068939992e-7,-0.0000015586550716761849,-0.000001388713258165808,0.0000010854568017748534,-0.0000035118382584187202,0.0000024505141027475474,-0.0000027599924123933306,0.0000012928514934174018,3.452988153185288e-7,9.147630066763668e-7,4.678361165133538e-8,0.0000029235700367280515,-0.000004951607479597442,0.000002497083642083453,-0.0000061007790463918354,-0.000002038024604189559,-8.928830084187211e-7,-0.000005155670351086883,0.0000024980663511087187,-0.0000027834005322802113,0.0000030437615805567475,0.0000020207432953611715,0.000005872328074474353,0.0000023667914774705423,0.000008525761586497538,-0.000001744319888530299,0.000006328796189336572,-0.0000031836743801250122,5.817118449158443e-7,-0.000002760403958745883,-0.0000035621792449092027,-0.000005721019078919198,-0.0000031907666198094375,-0.00000798531254986301,-0.0000031328777367889415,-0.000007057904895191314,-0.000006145962288428564,-0.0000067292294261278585,-0.000004455939688341459,-0.0000036864155390503583,0.0000028903127713419963,0.000003648249503385159,0.0000055629725466133095,0.0000065096337493741885,0.000002313576715096133,0.000003299622903796262,-7.386475431303552e-7,0.0000011346337487339042,-0.000002999298430950148,0.0000012600233958437457,-0.000004482871645450359,0.0000012339850172793376,-0.000005028339273849269,-3.190280040143989e-8,-0.0000065708190959412605,-0.000002137759793185978,-0.000007463507699867478,-0.000002253582579214708,-0.000006214255336089991,-7.441607294822461e-7,-0.000005036740731156897,-8.026523801163421e-7,-0.0000038829380173410755,-0.0000014424687151404214,-0.000002219082944066031,-0.0000020632605810533278,-2.967931038710958e-7,-0.0000033134051591332536,0.000003112592821707949,-0.000001956977257577819,0.000004888274361292133,0.000001258301949746965,0.000002539396518841386,0.0000012315238109295024,0.0000029573939173133112,-3.9749210145600955e-7,0.000007965088116179686,-3.201979836831015e-7,0.000008430645721091423,-5.8561276716773136e-8,0.0000023614306883246172,-6.812036303927016e-7,-0.000002683240154510713,-0.000002635863893374335,-0.000002422957550152205,-0.000004931941020913655,6.032428245816845e-7,-0.000004697282747656573,9.093607786780922e-7,-0.000004782049927598564,-0.0000014407632988877594,-0.0000074239114837837406,-7.167645890149288e-7,-0.000005518366833712207,0.0000017230380535693257,0.0000018537798496254254,3.114373328116926e-7,0.00000475042725156527,-0.000002284921265527373,0.000001991696535696974,-0.0000018958348846354056,0.0000018167754660680657,-4.297342002246296e-7,0.000005431287263490958,-2.5431930339436803e-7,0.000006547586508531822,-0.0000019510043784976006,0.0000021715609364036936,-0.000005160231921763625,-0.000003922723863070132,-0.00000864976755110547,-0.0000069777229327883106,-0.00001098142092814669,-0.000004680390702560544,-0.000009758781743585132,0.0000025811777959461324,-0.0000064820569605217315,0.000006200225016073091,-0.0000068604194893850945,-0.000001493326294621511,-0.000008256333785539027,-0.00000808436016086489,-0.000005116302872920642,-0.0000019706062630575616,-0.0000036357112094265176,9.638056326366495e-7,-0.000006723561000399059,-0.000010043848305940628,-0.000005082299139758106,-0.000017330961782136,0.0000022783654003433185,-0.000010823952834471129,0.000007848390850995202,4.930726049678924e-8,0.000009791321645025164,0.000010214233043370768,0.000006767637387383729,0.000014693004231958184,6.522810167552962e-7,0.00000584156759941834,0.000001056483142747311,-0.0000061027412812109105,0.000005941973086009966,-0.000003799846808760776,0.0000032200546229432803,0.000007958360583870672,-0.000002986663048432092,0.000010821105206559878,-0.0000017829129319579806,5.535289915314934e-7,0.000002348450379940914,-0.000008360521860595327,0.0000030174969651852734,-0.0000035998295970784966,0.000003019416453753365,0.000005565047104028054,0.0000018894493223342579,0.0000023230936676554848,-0.0000034996205613424536,-0.000009694063919596374,-0.000008751128007133957,-0.000014601409930037335,-0.000007933239430713002,-0.000009449898243474308,-0.000002970120021927869,-0.000001097449057851918,-9.543623491481412e-7,0.00000434171261076699,-0.000004111882390134269,6.79061088249e-7,-0.000004496859673963627,-0.000008936454833019525,0.0000034232402867928613,-0.00000979360265773721,0.000009566062544763554,-3.9706472421130456e-7,0.000004433742105902638,0.000003042325033675297,-0.0000030128887829050655,-0.0000029714519769186154,-0.000003187324637110578,-0.000004348108632257208,-0.0000033043913845176576,0.000002110427658408298,-0.000010759151336969808,0.0000043579448174568824,-0.00001797520599211566,-8.999119245345355e-7,-0.000014672106772195548,-0.0000032756438486103434,-0.000003837559233943466,7.575903282486252e-7,0.0000024387154553551227,0.0000023866900846769568,0.00000110207599846035,-3.6517462831398007e-7,8.478238555653661e-7,3.2741291988713783e-7,0.000003992907295469195,0.0000034631802918738686,0.0000039670776459388435,0.000002545645429563592,0.0000018931576732938993,0.000001866697971308895,0.000004212356543575879,0.0000053428002502187155,0.000007821597137080971,0.000004359905233286554,0.000005222345862421207,-0.000005469212737807538,-0.0000021719831693189917,-0.000014025296877662186,-0.000007200156233011512,-0.000013071728062641341,-0.000008534292646800168,-0.00000858534622238949,-0.00000976859428192256,-0.000009199759006150998,-0.000009531527211947832,-0.000010971834853990003,-0.000005088163561595138,-0.000006511634637718089,-0.000001014210738503607,-0.0000015070510244186153,-3.342962884289591e-7,-0.0000030100443382252706,8.833947049424751e-7,-0.000003861757249978837,0.000002195649585701176,0.000002458319613651838,-1.23842681887254e-7,0.00000901737621461507,-0.000003161710992571898,0.000009653032066125888,-0.0000028306942567724036,0.000009005831088870764,9.146923218850134e-9,0.000010942871995212045,0.0000025969563921535155,0.000009264066648029257,0.0000022111939870228525,6.530254381686973e-8,-9.742769861986744e-7,-0.000006675535132671939,-0.000003203911774107837,-0.000003444060439505847,-0.0000023708191747573437,0.000001115949544328032,5.889252463475714e-8,-4.270693807484349e-7,0.000001317725491389865,-0.0000026383902422821848,0.0000010433889201522106,1.8245710009523464e-7,0.0000014354809536598623,0.000004203336175123695,0.000001658768496781704,6.893950512676383e-7,0.0000023416355361405294,-0.000008033041922317352,0.000007374636879831087,-0.000007646023732377216,0.000008112931027426384,5.110888992021501e-7,-0.0000038381062950065825,0.0000019791827980952803,-0.000011966791134909727,8.282994201636029e-8,-0.00000741668827686226,-9.075603202290949e-7,-0.000007570427897007903,-0.000009879624485620297,-0.000012811858141503762,-0.000015449104466824792,-0.000011708017154887784,-0.000005085837074148003,-0.000013832926015311386,-0.000002735949237830937,-0.00001657587563386187,-0.000017186963304993697,-0.0000036362621358421165,-0.000018992810510098934,0.000007856337106204592,-0.0000052445338951656595,0.0000016284280945910723,0.0000011946658560191281,-1.574869372689136e-7,0.0000027136939024785534,0.00000893616470420966,0.000007166011528170202,0.000008467269253742415,0.0000052992504606663715,0.000002132426743628457,-0.0000022123847429611487,0.0000036260689739719965,-0.000002493302417860832,0.0000036938338325853692,0.000005352163043426117,-0.000002791706265270477,0.000009312153451901395,-0.000001128120175053482,0.0000035371313060750253,0.00001125568087445572,-0.0000020741836124216206,0.000012978097402083222,2.395776448338438e-7,-0.000004805451681022532,0.000002885989260903443,-0.00001947880446095951,-1.5120596685846976e-7,-0.000016683519788784906,-0.000007136851309041958,-0.000011193683349119965,-0.000014262281183619052,-0.000010445800398883875,-0.000009302071703132242,-0.000006918155577295693,0.000010121770174009725,-0.0000032635687148285797,0.000020283247067709453,-0.0000016351533531633322,0.000010875545740418602,0.000003298426008768729,7.659355674149992e-7,0.000006105294687586138,-0.0000028685344659606926,0.0000018908134507000796,-0.000006559243047377095,-0.0000019376418549654773,-0.000005664392574544763,-0.000003935931545129279,2.3137319260513323e-7,-0.00000724212304703542,-4.4132727339274425e-7,-0.000008509233339282218,-0.000007299334811250446,-0.000008296520718431566,-0.00000775383068685187,-0.000009888088243314996,-6.643310825893423e-7,-0.000009194859558192547,0.0000012217028597660828,-0.0000027014796160074184,-0.000005580995548370993,0.000005727384177589556,-0.000007603383437526645,0.000008626728231320158,6.461232260335237e-8,0.0000024963719624793157,0.00000464674667455256,-0.0000041028060877579264,2.581153353276022e-7,2.623970658532926e-7,-0.000006722665148117812,0.000012226168109918945,-0.000011507665476528928,0.000016527443222003058,-0.000011158333109051455,0.0000042172537177975755,-0.0000065073568293883,-0.000012681543921644334,-0.0000026030968456325354,-0.000012896824046038091,2.7767310939452727e-7,-7.741859917587135e-7,1.6417632764387236e-7,-2.5143609150291013e-7,-0.000006684098025289131,-0.000011173764505656436,-0.000009685449185781181,-0.000015014666132628918,-0.0000022032122615200933,-0.000009355964721180499,-1.9668235040626314e-7,-0.0000019861199689330533,-0.000008735361916478723,2.1953218265480245e-7,-0.000010307759112038184,-0.000009043864338309504,-7.931564027785498e-7,-0.00001973225880647078,0.0000075621992436936125,-0.000012366611372272018,0.000009776677870831918,0.00000898778216651408,0.000007269413345056819,0.0000215316831599921,0.0000028081617529096548,0.00001463560329284519,0.0000013555286386690568,-8.18370210708963e-7,0.000003976112566306256,-0.000005741392214986263,0.000006475459940702422,0.0000016396104456362082,0.0000032634761737426743)\n\
+\n\
+,\n\
+\n\
+new Array(0.000003079756197621464,-0.000007045533948257798,-0.000005584218797594076,-0.000014535641639668029,-0.000009336939911008812,-0.000009002875231090002,-0.000005781885192845948,0.00000253107532444119,-0.000002653517412909423,0.0000052440332183323335,2.61081083863246e-7,-0.000004180499217909528,-0.000001123604306485504,-0.00001392687681800453,-0.000013051283531240188,-0.000008770004569669254,-0.00002213554034824483,0.000006507052603410557,-0.000012553733540698886,0.000008663148946652655,0.0000043216405174462125,-0.000003365547172506922,0.000009666131518315524,-0.0000036936494325345848,0.000008714309842616785,0.000011746677955670748,0.00001345210421277443,0.000016736059478716925,0.000014740943697688635,0.0000011494975069581415,0.0000037885874917265028,-0.000013101015611027833,-0.0000028683189157163724,-0.000007050486146908952,0.000006106271939643193,0.000007029236712696729,0.000013492718608176801,0.000005168927600607276,0.000007264246960403398,-0.000009827103895077016,-0.00000253483312917524,-0.000016045227312133648,-0.000009338813470094465,-0.000011414746950322296,-0.000013670570297108497,-0.000009242834494216368,-0.000013137173482391518,-0.000009129987120104488,-0.000011171797268616501,-0.0000058122036534768995,-0.000011200489097973332,-0.000004491418167162919,-0.00000646262924419716,-0.000006156059498607647,3.744167713648494e-7,-0.000003603997356549371,-0.0000037651313959941035,9.045492106452002e-7,-0.000011486084076750558,-0.0000013693146456716931,-0.000005032851731812116,-0.000007804138476785738,0.000005861616500624223,-0.000010557558198343031,0.000001025069195748074,-0.000010377891157986596,-0.00001071288625098532,-0.000007369986633420922,-0.000011507268027344253,0.0000020538736862363294,-0.000008385878572880756,0.000009365067853650544,-0.000009505479283689056,0.000005552293714572443,-0.000003929438207705971,0.000001957044105438399,0.000007157846994232386,0.000005618156137643382,0.000008056893420871347,0.000004114352577744285,0.000004444902970135445,-0.0000015129552366488497,0.000009714583939057775,0.0000034346257962170057,0.000016184803826035932,0.000013940394637756981,0.000017429176295991056,0.0000162159776664339,0.000018516269847168587,0.000009985662472900003,0.00001675341081863735,-5.474975068864296e-7,0.000010761052180896513,-0.000010513853339944035,0.000006836903139628703,-0.000015860308849369176,0.0000032462696708535077,-0.000019273027646704577,-0.0000022639590042672353,-0.0000182041221705731,-0.00000642911572867888,-0.000009331621185992844,-0.000010752169146144297,-0.000006398724053724436,-0.00001092150341719389,-0.000013978446986584459,-0.0000019830717974400613,-0.000011518278370203916,-7.679133773308422e-7,0.00000411232394981198,-0.000015622126738890074,0.00001020661602524342,-0.000023934420823934488,0.000003655438376881648,-0.000017996595488511957,0.000005628106464428129,-0.000014397246559383348,0.000023149037588154897,-0.000012422369763953611,0.00003686188574647531,-0.000005164674803381786,0.000029579034162452444,-0.000004279142558516469,0.000011904862731171306,-0.000011054169590352103,0.0000026817510843102355,-0.000007146421012294013,7.300119477804401e-7,0.00000716379463483463,-9.475870115238649e-7,0.000011135504792036954,-0.0000028848432975792093,0.000004333846391091356,-0.00001217265071318252,0.00000525720497535076,-0.000030126569981803186,0.000012700701518042479,-0.000037628265999956056,0.000014790118257224094,-0.00002364890133321751,0.000018574042769614607,-0.000005623247034236556,0.00002481713454471901,-0.0000035716459478862816,0.000016272791981464252,-0.00001041365885612322,7.962548806972336e-7,-0.000004117006483284058,0.000002073728182949708,0.000012243942364875693,0.000011528453796927352,0.000014823122910456732,0.00001140338645200245,0.000006756795755791245,0.000006846646101621445,0.000009838297046371736,0.0000024178214061976178,0.000019338038327987306,-0.0000035010277770197717,0.000020548633983707987,-0.00000739722554499167,0.000016951227735262364,-0.000011693926353473216,0.00001124812479247339,-0.000018294836991117336,4.6700102984686964e-7,-0.000020315797883085907,-0.00001102216265280731,-0.000019213801351725124,-0.000017865449990495108,-0.000017930700778379105,-0.00001534548937343061,-0.000010813826520461589,-0.000003645355718617793,-0.000004975350748281926,0.0000019148487808706705,-0.000009077783943212125,-0.000004406498646858381,-0.000008117423021758441,-0.000006159430995467119,0.0000044337293729768135,-0.0000020885263438685797,0.00001081783830159111,-0.0000062843064370099455,0.000009586233318259474,-0.000010778067007777281,0.000013238699466455728,-0.0000024827570541674504,0.000012394535588100553,0.000008359386811207514,-0.0000011964989425905515,0.000011864392945426516,-0.000006844144081696868,0.00001212747156387195,0.000005946681085333694,0.000008978144251159392,0.000013611196663987357,0.0000014777727983528166,0.000004516868557402631,-0.000001135800971496792,-4.0124223232851364e-7,0.000004324659130361397,0.000007783763066981919,0.0000074882691478705965,0.00001351374066871358,0.000005585980943578761,0.000013525607755582314,0.0000072519515015301295,0.00001596198126208037,0.000011330633242323529,0.00001667377546255011,0.000011497910236357711,0.00001142141263699159,0.00001416644317941973,0.0000030732642244402086,0.000019874687495757826,-0.000009063298421096988,0.000012172569768154062,-0.00001685972347331699,-0.000006543353720189771,-0.000007671710591239389,-0.00000897354129847372,0.0000036098872442380525,0.000008662557775096502,-0.000004769496172229992,0.000016347627024515532,-0.000018694472601055168,-0.0000016639005480101332,-0.00001712615448923316,-0.000021529813238885254,-0.00001112355494115036,-0.00001515701660537161,-0.000012410739145707339,0.000004771038675244199,-0.000005557539680012269,0.000004452776920516044,0.00001637774403207004,-0.000011125454875582363,0.000028977285182918422,-0.00000831189208838623,0.000017143711374956183,0.00001176083787868265,0.0000014372878922586096,0.000018619317415868863,-4.095253984814917e-7,0.0000057142856348946225,0.000003475568746580393,-0.0000069119478212087415,0.000007696536158618983,-0.000003389268840692239,0.000012544330274977256,0.000012063308531651273,0.0000075440393629833125,0.00001954874096554704,-0.000004191128937236499,0.000009394925655215047,-0.000002214434289271594,-0.000004688718945544679,0.000007948830898385495,-0.000009118418347497936,0.0000011970444120379398,-0.0000056666431191843,-0.00002026224865403492,-0.0000019875728867191356,-0.00002999846219609026,-0.000003943970114050899,-0.000012564681128424127,-0.000010138632205780596,0.00001746085581544321,-0.000013649312677443959,0.000027959269573329948,-0.000010523734999878798,0.000012849625818489585,0.000001351437390439969,-3.670769785912853e-7,0.00001497308949183207,0.000002791178758343449,0.000012750263522320893,0.000013458100511343218,4.066057215368346e-7,0.00002175646659452468,0.0000032445300348626915,0.00001627408346394077,0.000014102012755756732,3.48547814610356e-7,0.000009687917554401793,0.0000011480459534141119,-4.2791418763954425e-7,0.000019152239474351518,-6.341405196508276e-7,0.000018948061551782303,0.0000036513481518340996,-0.0000062531571529689245,0.000009545680768496823,-0.000024813129130052403,0.000016652278645779006,-0.000018440034182276577,0.000017343440049444325,-3.587248897929385e-7,0.000010243666110909544,0.00000628847419648082,-2.8749840907948965e-7,-0.000003840634690277511,-0.000006959578513487941,-0.000013347347703529522,1.2497545753831218e-7,-0.000008933499884733465,0.000012038509339618031,0.000004157961939199595,0.00000892525349627249,0.000014358175576489884,-0.0000017458401089243125,0.000015531888493569568,0.0000011401114079490071,0.000013105558537063189,0.000012283217984077055,0.000013530539945350029,0.000011530215488164686,0.00001159277690021554,5.350490255295881e-7,0.0000063530819716106635,-6.013257234371849e-7,0.0000031688239232607884,0.000008902071385819,-0.0000030289324968180154,0.0000104135970104835,-0.000009928397048497573,0.000004485893896344351,-0.000005377505658543669,-0.0000013817983699482284,0.0000027258081445324933,-0.00001797814547899179,0.000005427595169749111,-0.00003357703462825157,0.00001153597349912161,-0.000016713764125597663,0.00001749700095388107,0.00001582923869136721,0.000018839591575670056,0.000024307311832671985,0.000028232167096575722,0.000012363442692731041,0.00003313900015200488,4.921504341837135e-7,0.000008201181117328815,-0.000004780452854902251,-0.00002234796374978032,-3.537929842423182e-7,-0.000019479883121675812,0.0000035339492114871973,0.0000019553631318558473,-0.000006310787284746766,0.0000048780952965898905,-0.000016523783415323123,-0.000006488742656074464,-0.00000970436303759925,-0.000006401556220225757,0.0000040938898564490955,-0.0000037819918361492455,0.0000036536346215143567,-0.000015109381820366252,-0.000009658116141508799,-0.000016028870959416963,-0.000012950125892530195,2.9602941253870085e-7,-0.0000048607880671625026,-0.0000029371478831308195,-0.000002008118826779537,-0.000014304634532891214,0.000009825911547522992,0.000006691116141155362,0.00003514895070111379,0.00003057632056879811,0.00003202812513336539,0.0000256546882155817,0.000005390306341723772,0.00002182609387091361,0.000009715551641420461,0.000023998347387532704,0.000029058137442916632,0.000014241700228012633,0.000018586209989734925,0.000014010002814757172,0.0000015582974128847127,0.000022730857381247915,-4.4055727244085574e-7,0.000007286446361831622,-0.000004155114311288344,-0.000015673245798097923,-0.0000013827599332216778,-0.000014323575669550337,0.000014420313164009713,-0.000004594429810822476,0.00001533803515485488,-0.000003257871640016674,-0.0000015057372593219043,-0.000002804571522574406,-0.000008264756615972146,-0.000002011342530749971,-1.9574802934130275e-7,-0.0000025387560071976623,0.0000055548180171172135,-1.6860264295814886e-8,0.0000012650032203964656,0.000004872145836998243,-0.0000017890718027047114,0.000006571066933247494,0.000007390759037662065,0.0000020470258732530056,0.000013906128515372984,-0.000004494631411944283,5.931532598424383e-8,-0.000005363530362956226,-0.000019025612346013077,-9.746487705797335e-8,-0.000022788828573538922,0.000005759361101809191,-0.000019057089957641438,0.000006455238690250553,-0.000020634686734410934,1.0177009812650795e-7,-0.000019465514924377203,-0.000004779817118105711,-0.000005687471002602251,-0.000001974281985894777,0.000007814288437657524,6.800347023272479e-7,0.000006204283181432402,0.0000022189678929862566,0.000003214903017578763,0.000011109933439001907,0.000014264518540585414,0.000020891659005428664,0.000024231410861830227,0.000021565774659393355,0.00002063306419586297,0.000018980705135618336,0.000019460489056655206,0.000016109910575323738,0.00002946244967461098,0.000004959099442203296,0.000031635663617635146,-0.000011636377166723832,0.000012494529073592275,-0.000017649961591814645,-0.000009775249054655433,-0.000009684803444542922,-0.000012299901754886378,-0.0000045431584112520795,-0.000004680217443819856,-0.000009361619959236123,-0.000006417827080440475,-0.000009478884749114513,-0.000008635995982331224,-0.000002210264710811316,-0.0000013944970760348951,-0.0000027300702640786767,3.419471852339484e-7,-0.000005760077328886837,-0.000005887148290639743,0.000009123318704951089,-0.0000018179079006586107,0.000034976685128640383,0.00000800656562205404,0.00004315484329708852,0.0000026375134893896757,0.000026162653739447705,-0.000009777288141776808,0.000008337022336490918,-0.0000043383224692661315,0.000008042879017011728,0.000011266129149589688,0.000007552520855824696,0.000007821462531865109,-0.000010834794011316262,-0.0000071405156631954014,-0.000023741020413581282,0.0000010096468940901104,-0.000008777444236329757,0.000024047909391811118,0.00001084489394997945,0.000021773150365334004,0.000009878775927063543,-0.000002468845650582807,0.0000019583242192311445,-0.000011829857612610795,0.000007180449301813496,0.0000019898930077033583,0.00002007572038564831,0.000023562599380966276,0.000022493708456750028,0.00003725415081134997,0.000009227091140928678,0.000025104887754423544,-0.000004577635081659537,-0.0000057226006902055815,-0.000007426877800753573,-0.000013954405403637793,-0.000007396818546112627,0.000010363718502048869,-0.000005682496066583553,0.000023153961592470296,0.000005215436885919189,-5.851776450072066e-7,0.000008301271009258926,-0.00002839875378413126,-0.000008671786417835392,-0.00002114908602379728,-0.000016385081835323945,0.000010340518201701343,-0.000003332814912937465,0.00001631920167710632,-0.00000240609824686544,-0.00001683917253103573,-0.000019458128008409403,-0.00004172520129941404,-0.00002798895184241701,-0.00002957127071567811,-0.00002257167943753302,-0.0000011277380735918996,-0.000006745275186403887,0.000029834796805516817,0.00001443145356461173,0.00004889423871645704,0.000019520353816915303,0.000028781312721548602,0.00001101738143916009,-0.000002304964709765045,0.000015570509276585653,0.000006559727353305789,0.00002491160194040276,0.0000246861109189922,0.00002092513932439033,0.000005571321253228234,0.000019767994672292843,-0.000017234433471458033,0.000029364162401179783,-0.000006860925623186631,0.00003287310028099455,0.000014419410035770852,0.00002570765900600236,0.000020948997189407237,0.000014982444554334506,0.00001133622572524473,0.000005069058261142345,-0.000007599034233862767,-1.9249199567639153e-7,-0.00002135621070920024,4.192748974674032e-7,-0.00001811559559428133,0.000005204026820138097,-0.00000684716133037,0.000006793804459448438,-0.000007115300377336098,-9.464126833336195e-7,-0.000015396170056192204,-0.000005022252480557654,-0.0000057560728237149306,0.00000310011228066287,0.00001830806468205992,0.000005690162652172148,0.000025002680558827706,-0.0000018066829170493293,0.000016883142961887643,-9.190588343699346e-7,0.00001677891305007506,0.000008744715159991756,0.000017492679035058245,0.000009262767889595125,0.000009641324140829965,-0.000007944317985675298,0.0000026682307634473545,-0.000028819362341891974,-5.567349248281062e-9,-0.000027849970138049684,2.9275554425112205e-7,-0.000011288384484942071,8.639408122235182e-8,-0.000010010178812080994,-0.0000057664710766403005,-0.000018038146663457155,-0.000005938334197708173,-0.000011676184840325732,0.00000538736594535294,6.286371672103996e-7,0.000010601774192764424,0.00000795031610323349,0.000006878713065816555,0.000014448815818468574,0.0000053991193453839514,0.000019121212972095236,0.0000037922372939647175,0.00002377148666710127,0.000004110886493435828,0.000028523567380034365,0.000009884578503260855,0.000025298351829405874,0.000009547493391437456,0.000019423143385211006,0.0000016244050584646175,0.00001698599044175353,-0.0000035492291772243334,0.000010943429515464231,-0.000004347200501797488,0.0000019216581677028444,-0.000004650058144761715,-0.000010098739949171431,-0.000013551755728258286,-0.00002283834692207165,-0.000026392148356535472,-0.000012812127351935487,-0.000015902620361885056,0.00001567458821227774,0.000012308804798522033,0.00002283371395606082,0.000024552044123993255,0.000011854270269395784,0.00002660317659319844,0.000012907260497740936,0.00003121679401374422,0.000015185296433628537,0.00002326429785171058,-7.34506613753183e-7,0.000012328557204455137,-0.000023603226509294473,0.000014685990208818112,-0.00003268428554292768,0.000009220393621944822,-0.00002234849307569675,-0.000007605170594615629,-0.000011407089004933368,-0.000006624821708101081,-0.000009982724805013277,0.00001263109425053699,0.000003306656026325072,0.00002181891250074841,0.000024524020773242228,0.000007929559615149628,0.000019206416254746728,-0.000012103923836548347,-0.000002410376964689931,-0.000014605987416871358,-0.000003715801540238317,-0.000006302369911281858,0.000010128199392056558,-0.000007889429980423301,0.000014167191693559289,-0.00001256161522178445,0.0000057639072110760026,-0.000005861424597242149,-9.619938055038801e-7,0.00000681865458318498,0.0000016880826478882227,0.000011544870176294353,0.0000037514641917368863,-2.56049020208593e-7,0.0000014714703411300434,-0.000014694560377392918,0.000007349543466261821,-0.000010221549928246532,0.000018233196897199377,-7.090650342433946e-7,0.00002102341750287451,-0.000006131372174422722,0.000020034074623254128,-0.000009446019248571247,0.000019742274162126705,0.0000019139167761750286,0.000014728439964528661,0.000014092046512814704,0.000003048159214813495,0.000020496132492553443,-0.000008900403372535948,0.000023662334569962695,-0.000005791300736746052,0.000022625017663813196,0.0000075333286986278836,0.000012899877219751943,-0.0000017856511931313435,-0.000006809377737226896,-0.000028199405278428458,-0.00001746432280924637,-0.00003172568540321663,-0.000006750207376171602,-0.00001866254024207592,-0.0000010079621688419138,-0.000013011737792112399,-0.00000956672738539055,-0.000004242810973664746,-0.000002119594682881143,0.000006584605671378085,0.00002223004776169546,0.000006579176442755852,0.000033968506613746285,0.000009475802471570205,0.000025046378141269088,0.000017056823708117008,0.000005184896053833654,0.000012699285434791818,-0.000006306862815108616,0.000008491949301969726,0.000004087344223080436,0.000018048402125714347,0.000011509853720781393,0.000021365476641221903,-0.000005565815172303701,0.000006844592917332193,-0.000022027259547030553,-0.000005569290806306526,-0.00002120573481079191,-0.000002695209104786045,-0.00001900665483844932,4.4863107007131475e-8,-0.000016556557966396213,-0.000010590822967060376,-0.0000065892354541574605,-0.000017760654372978024,-8.225159149333194e-7,-0.0000025858541903289733,0.0000011124238881166093,0.000020903720724163577,0.00001814771349017974,0.000027480426069814712,0.00004084043393959291,0.0000177144720510114,0.00004253354563843459,0.000010023189133789856,0.000033290092687821016,0.0000067583277996163815,0.000030763236281927675,-0.000003997994099336211,0.00001618833266547881,-0.000014886847566231154,-0.000012435123608156573,-0.00001306923968513729,-0.00002227741242677439,-0.000013466869859257713,-0.000015753304978716187,-0.000023232454623212107,-0.00001852498644439038,-0.00002162655619031284,-0.0000210459329537116,-0.00000750824165152153,-0.000011541855201357976,0.000005184509518585401,-0.0000010159284329347429,0.000017868627764983103,0.000005208628408581717,0.000021801406546728685,0.000004908810751658166,0.00000935355910769431,0.000002482380750734592,0.0000020374698124214774,0.000012640602108149324,0.0000043602076402748935,0.000021848769392818213,-0.000003835069946944714,0.000009052029781742021,-0.000015977773728081957,-0.00000437899689131882,-0.000015400755728478543,-0.0000011541671938175568,-0.000007877672032918781,-8.166315268454127e-8,-0.000005477804279507836,-0.0000075803836807608604,-0.000016252544810413383,-0.000015123989214771427,-0.00003125966031802818,-0.000023901306121842936,-0.00002719650547078345,-0.00002844541631930042,-0.000010009978723246604,-0.000019015275029232726,-0.000002046205736405682,3.0927870398045343e-7,0.000004475987225305289,0.000018435192032484338,0.000017293778000748716,0.000025111336071859114,0.00002306950045749545,0.000019393164620851167,0.000024574750568717718,0.000011862235623993911,0.00003010806358361151,0.000008740132216189522,0.000028634845875785686,0.000012442340448615141,0.00002007111288548913,0.000022071695639169775,0.00001786083885235712,0.000019058017642237246,0.000014229030057322234,-0.000005833061550220009,-0.0000042547835619188845,-0.00002718412179092411,-0.000025061946871574037,-0.00003152936915284954,-0.00003277888026786968,-0.00003887666389346123,-0.000034648659493541345,-0.000050274011300643906,-0.00003677815038827248,-0.00004247226388542913,-0.00002903110726037994,-0.000020898798538837582,-0.000010089145689562429,-0.000010234728506475221,0.000006811966159148142,-0.000005313822384778177,0.0000156254736793926,0.000009165262781607453,0.00002019751991610974,0.00002104634950228501,0.000026244979380862787,0.000020415984181454405,0.00003609451960073784,0.000021696680050808936,0.0000403553967771586,0.00002973491973534692,0.00002806495649565477,0.000031540897907689214,0.000004485058980208123,0.000023197349946713075,-0.00001706145121715963,0.000012635712664632592,-0.0000292308959615184,0.0000058418190747033805,-0.000030073091693338938,-1.1923079057396535e-7,-0.00002137258525181096,-0.000009712542123452295,-0.000012220786629768554,-0.000016407961084041744,-0.000012456388503778726,-0.000015059623365232255,-0.000008678027370478958,-0.000009216743819706608,0.000019928700567106716,0.000004287425326765515,0.00004467799226404168,0.00002016187136177905,0.000024435452360194176,0.000019308243281557225,-0.000007724876013526227,0.000009188834155793302,-0.0000019114108908979688,0.000012105027053621598,0.00002055629374808632,0.000020270883396733552,0.000018115131751983427,0.00001163760225608712,-0.00001510960100858938,-0.000021670934074791148,-0.00005311196582624689,-0.00005914847133681178,-0.00005459808380692266,-0.00006084770575398579,-0.000027462207071948797,-0.00003233471579733305,-0.000024315484552062117,-0.00001873439396149479,-0.00003443852983764373,-0.00001817194242903497,-0.000014029920748725999,-0.000009114837666857056,0.000012373760910122655,-0.000003239905254304176,0.000010735915566328913,-5.519689239008585e-8,-0.0000018883721395468456,0.00000311321650769969,-0.0000017775488458937616,-0.000006557762844749959,0.000015179120964603499,-0.00000455604003946064,0.000022281594283413142,0.000017691370885586366,-0.0000038258062886598054,0.000012033361599605996,-0.000019834642444038764,-0.000010000385373132303,0.000010684007975214627,0.000009171661986329127,0.00004517719935392961,0.00004714382521342486,0.0000477431713079568,0.00005181042797630653,0.000026211499061901122,0.00002550805947976187,0.000003884897068928694,0.00000662306683807401,0.000017071641195798293,0.00003120501423836686,0.00004284991882741451,0.00006512828258564696,0.000018203174477093853,0.00004200913826934993,-0.000014842201380815823,0.000003909772658516886,0.000008061370863288175,0.000021963762264931574,0.00003848099004244432,0.00005715851148124784,0.000043984284275211394,0.00006707866123178974,0.000052957908337702975,0.00006693915202049538,0.000049615926400292665,0.00005375961336540058,0.0000309937859128695,0.00003500019374769181,0.000029505476049962454,0.000029334600185393356,0.000023507789592258632,0.00001465066452510655,-1.0310985487649305e-7,-0.000006374973509082338,-0.000008675759090692736,-0.000009088520528166555,-0.000021084319087094627,-0.000024063272576313466,-0.0000631984366918914,-0.0000610212046012748,-0.00009105104982154444,-0.00007528847345383838,-0.00008082981366897002,-0.00007128059951355681,-0.00007338736031670123,-0.00008348179107997566,-0.00009302627586293966,-0.00010063370427815244,-0.00010311997175449505,-0.00009475899423705414,-0.00006107790977694094,-0.00005710756522603333,-0.0000045567167035187595,-0.000016807351130410098,-0.000008728594366402831,-0.000024047727492870763,-0.000054534481023438275,-0.00006562787166330963,-0.00006661251245532185,-0.0000764136275392957,-0.00004220175833324902,-0.00005006900755688548,-0.000025705265215947293,-0.000036733610613737255,-0.00002846791539923288,-0.0000510317986481823,-0.000025806351914070547,-0.00004952012750436552,0.000005754276116931578,-0.0000016414161336797406,0.0000425573016400449,0.00004579619053401984,0.00004338672079029493,0.000038616690289927647,0.000029018654458923265,0.000013091679647914134,0.00003744493369595148,0.000019917650206480175,0.000044882068323204294,0.00003138934698654339,0.00002662312181200832,0.000016957039406406693,0.000012313065781199839,0.000002333392103537335,0.00001934301690198481,0.0000014684613915960654,0.000014003498108650092,-0.000012435083590389695,-0.00001898372829600703,-0.000038960213714744896,-0.00003305000063846819,-0.00003180839848937467,-0.000003220078497179202,0.000009098755072045606,0.00001692907972028479,0.00001644175426918082,-0.0000025018243832164444,-0.000015483534298255108,-0.00001627800338610541,-0.000018092352547682822,-0.000013463391951518133,0.0000019396563857299043,-0.00003174218363710679,-0.0000160226827574661,-0.00005453410267364234,-0.00004583518239087425,-0.000040986185922520235,-0.000035656023101182655,-0.00001567927210999187,-0.000013575969205703586,-0.000018654585801414214,-0.000008182525562006049,-0.000031149891583481804,0.000004068513590027578,-0.000022341226213029586,0.000019159466319251806,-0.00001293922196055064,0.000003855884187942138,-0.00003387294782442041,-0.00002583240348030813,-0.000057961613492807373,-0.000027385123757994734,-0.000033527012419654056,0.0000016514985645699198,0.00003071745595661923,0.000041599003452574834,0.00007069997809594497,0.00007186799484770745,0.00005709023025701754,0.00006439198477892205,0.000029486905987141654,0.000029499340598704293,0.0000209078880288871,0.000017297805243288167,0.000013292264156916644,0.000027950874937232584,-0.0000013293877145770239,0.000019151208107359707,-0.000006482500339188846,-0.0000067296255110704806,-0.000007697241926507559,-0.000014276416550274007,0.0000016702936136425706,0.000015172436178545468,0.00004288800846552476,0.00006377120007527992,0.00006793632928747684,0.00007132426253519952,0.00002048872920568101,0.000012990089089726098,-0.000048709236580180004,-0.000047732733946759254,-0.00007167227886384353,-0.00006812359788455069,-0.000064849853515625,-0.00008061769040068612,-0.00006814341759309173,-0.00010230079351458699,-0.00008719259494682774,-0.0001180777617264539,-0.00008941548003349453,-0.00011921609257115051,-0.00003779408143600449,-0.00008811964653432369,0.000030435225198743865,-0.000025285318770329468,0.00004108916618861258,0.000014433621799980756,0.00001024217635858804,-0.000005194896857574349,0.000005180342213861877,-0.000034165761462645605,0.000023372396753984503,-0.000010869540346902795,0.00002539250453992281,0.00003357906825840473,0.000018433291188557632,0.00003062555697397329,0.000026741767214844003,-7.219643407552212e-7,0.00003656093031167984,-0.000001136163632509124,0.00003117337473668158,0.000021541796741075814,0.0000293058437819127,0.000043496882426552474,0.000037782541767228395,0.00007139385706977919,0.0000416023212892469,0.00009288021101383492,0.00005254682037048042,0.00009893468813970685,0.00006880204455228522,0.00010826986544998363,0.00005927990423515439,0.00011457254731794819,0.00005459919702843763,0.00010707223555073142,0.000094101473223418,0.00010680824925657362,0.00011209934746148065,0.00010920516069745645,0.000056838165619410574,0.00008033691119635478,-0.0000068494009610731155,0.000025022674890351482,-0.00002701147059269715,-0.000019174229237250984,-0.00003586516322684474,-0.00004372096373117529,-0.0000652634262223728,-0.00007542935782112181,-0.00009048141509993002,-0.00010400706378277391,-0.00006278631190070882,-0.00007421393820550293,0.0000025940585146599915,-0.000008294062354252674,0.0000325960099871736,0.000008096650162769947,0.00003069816739298403,-0.0000037499498830584344,0.000056778833823045716,0.000025616709535825066,0.00007991064921952784,0.00004987000284017995,0.000045740198402199894,0.000019337981939315796,0.000004544684998109005,-0.000008798326234682463,0.000008757365321798716,-0.0000021096132059028605,0.00001856036215031054,0.000004826958502235357,0.000005461828550323844,0.000007710723366471939,0.000010949572242680006,0.000018963972252095118,0.000044504369725473225,0.00002303562177985441,0.00004023867586511187,0.000010020921763498336,-0.000025972738512791693,-0.00001586198777658865,-0.00007700323476456106,-0.00004665309825213626,-0.000055274140322580934,-0.000052602150390157476,-0.0000061497439673985355,-0.00001668721961323172,0.000008728478860575706,0.000013330021829460748,-0.0000029871407605241984,-0.000004125208306504646,-0.0000026293639621144393,-0.00002612005664559547,0.0000065824074226839,-0.000017083671991713345,-0.0000046906184252293315,-0.00001556396091473289,-0.00002643541301949881,-0.00003281334284110926,-0.000039624956116313115,-0.00004113918112125248,-0.00007187780283857137,-0.00006438163109123707,-0.0001236143143614754,-0.00011173521488672122,-0.00012688638526014984,-0.00011649612861219794,-0.00006469413347076625,-0.00005987553595332429,-0.000014351888239616528,-0.000007210273906821385,-0.000016002846678020433,0.000014015030501468573,-0.000009058734576683491,0.00003463930625002831,0.000044094260374549776,0.00006039829531800933,0.00007179840031312779,0.00006237921479623765,0.000030082985176704824,0.000039645121432840824,-0.0000010439434845466167,0.000020206653061904944,0.00001813493508961983,-8.59565261634998e-7,0.000021399320758064277,-0.000031689640309195966,0.000003812285285675898,-0.00003198267222614959,0.00001682609217823483,0.0000013957578630652279,0.00004154344787821174,0.000013956621842226014,0.00004097841519978829,9.028317435877398e-7,0.000013097586816002149,-0.000017888380170916207,-0.000026429661375004798,-0.000042822484829230234,-0.00003054921762668528,-0.00004142971010878682,-0.000001531986526970286,-0.00001933212115545757,-0.0000132069308165228,-0.000039306974940700457,-0.00004899566920357756,-0.000061745238781441,-0.000037255726056173444,-0.000020425879483809695,-0.000015082103345775977,0.000013367198334890418,-0.00003093281702604145,-0.000012532468645076733,-0.000054078089306131005,-0.00003815422678599134,-0.00006230008148122579,-0.000032039140933193266,-0.000044264997995924205,9.833966032601893e-7,-5.77034370508045e-7,0.000045075670641381294,0.000020452816897886805,0.00004831075420952402,0.000016518073607585393,0.00002406950807198882,0.000028525224479380995,0.000029365415684878826,0.00002138098716386594,0.000015089812222868204,-0.00003114295031991787,-0.00005498417158378288,-0.00005744315421907231,-0.00008467251609545201,-0.000022096755856182426,-0.000038503785617649555,0.000013987733836984262,-0.000011090352927567437,0.000002372082235524431,-0.000031918280001264066,-0.000031449904781766236,-0.000032338593882741407,-0.00003993864811491221,-0.000005635174602502957,-0.00003002981611643918,-0.000012256874470040202,-0.00002950612542917952,-0.000029784107027808204,-0.000014617784472648054,0.00001263211561308708,0.00002073836003546603,0.000060902915720362216,0.00002685291474335827,0.00002972178117488511,0.000003865030521410517,-0.000011656133210635744,-0.0000019173003238392994,0.000016705547750461847,0.000012224107194924727,0.000058518213336355984,0.000023397415134240873,0.00006208814738783985,0.000014334675142890774,0.000048294361477019265,-0.000011518812243593857,0.00003706568531924859,-0.000009435871106688865,0.00004311736120143905,0.000036349370930111036,0.00005881915785721503,0.0000780311384005472,0.00005478940511238761,0.00009043554018717259,0.00005104908996145241,0.00008298666216433048,0.00006888940697535872,0.00006298254447756335,0.00007044045923976228,0.000054575710237259045,0.00005354037421057001,0.000060902479162905365,0.00005536368189495988,0.00004294863174436614,0.00005029814929002896,0.000005725249138777144,0.000005086803867015988,-0.000010700321581680328,-0.00004252125654602423,-0.000021980682504363358,-0.000058042256569024175,-0.00005544697341974825,-0.000054441989050246775,-0.00008118953701341525,-0.00004292158700991422,-0.00007777901191730052,-0.000035333177947904915,-0.00007716101390542462,-0.00005428513395600021,-0.00008297056774608791,-0.0000670280642225407,-0.00005144996976014227,-0.000014605345313611906,-0.00000779076071921736,0.0000432292181358207,-0.00003144462971249595,0.000004673118382925168,-0.00008541214629076421,-0.00005519864134839736,-0.00006174968439154327,-0.000014400528016267344,0.000012012095794489142,0.000047868241381365806,0.000030405124562093988,0.00002368395507801324,0.000001922777300933376,-0.000011832757991214748,0.0000026430798243382014,0.000012279679140192457,0.00003241767262807116,0.000024375991415581666,0.00003544256105669774,-0.00002144496829714626,0.0000066679922383627854,-0.00006405106250895187,-0.000002957086053356761,-0.00005756971222581342,0.000015621615602867678,-0.00003508651934680529,0.00001469517155783251,-0.00004308757706894539,-0.000010895128070842475,-0.0000762795825721696,-0.00001937178421940189,-0.00009255228360416368,-0.000009577730452292599,-0.00007198793900897726,-0.00001064251409843564,-0.00004143540354561992,-0.000017639989891904406,-0.00002866461181838531,-0.000003194289547536755,-0.00001008950584946433,0.000025677494704723358,0.0000337935853167437,0.00002025209141720552,0.00004816519140149467,-0.00003013358946191147,0.000005368628990254365,-0.00005807228444609791,-0.000014198250937624834,-0.000024669036065461114,0.00002980853787448723,0.00001305967180087464,0.0000615404496784322,0.000003169276169501245,0.000039045036828611046,-0.000026213239834760316,0.000006035425030859187,-0.000030444816729868762,-0.000012050156328768935,-0.000019078106561210006,-0.000029675369660253637,-0.000031799194402992725,-0.000055997508752625436,-0.0000721602700650692,-0.00009207191760651767,-0.00010938722698483616,-0.00013436700101010501,-0.00012641138164326549,-0.0001619315444258973,-0.00012095387501176447,-0.00015179513138718903,-0.00009973258420359343,-0.00012022676673950627,-0.00008012935722945258,-0.0001016552560031414,-0.000054741190979257226,-0.00008083759166765958,-0.00000593823006056482,-0.00002722652061493136,0.000044529537262860686,0.000031446641514776275,0.00007436021405737847,0.00005673569467035122,0.00008370971045223996,0.000051376631745370105,0.00005631861131405458,0.0000279171799775213,-0.0000013176068023312837,0.0000014861398085486144,-0.000035487813875079155,-0.00001107328716898337,-0.000028035083232680336,-0.000009004481398733333,-0.000013428236343315803,0.000007951015504659154,-0.000012215399692649953,0.000026802747015608475,-0.000010574289262876846,0.00001737370803311933,0.000018003340301220305,5.736237653763965e-7,0.00006992507405811921,0.00002058242716884706,0.00009748925367603078,0.000049604932428337634,0.00007757225830573589,0.0000480062335554976,0.000046539622417185456,0.000040741320844972506,0.0000359866680810228,0.000044753498514182866,0.00003149465555907227,0.00003402285074116662,0.000016869544197106734,0.000012217524272273295,0.000014416894373425748,0.00001694033562671393,0.00002633786789374426,0.00003387614560779184,-0.0000031246981961885467,0.000006746628059772775,-0.00006808514444855973,-0.0000424836362071801,-0.00007945387915242463,-0.000040809682104736567,-0.00004131623427383602,-0.000006584262791875517,-0.000027186131774215028,0.000009418003173777834,-0.00001379865534545388,0.000029131773771950975,0.00003061928873648867,0.00005724620132241398,0.00004902021464658901,0.0000633458184893243,0.000014305432159744669,0.000058562731283018366,-0.000027793557819677517,0.000046056477003730834,-0.000024998287699418142,0.00002725913145695813,0.000025247172743547708,0.000039892023778520525,0.00004112611713935621,0.000050569287850521505,-0.000014535172340401914,0.0000067802211560774595,-0.00004382204497233033,-0.000026799832994583994,-0.000016543841411476023,-0.0000244089933403302,-0.000021907017071498558,-0.00005314009467838332,-0.00005711687481380068,-0.00007939628267195076,-0.00006287739233812317,-0.00005297015013638884,-0.000055925644119270146,-0.0000416878356190864,-0.000044781805627280846,-0.00005816018165205605,-0.000014692141121486202,-0.000038615464291069657,0.000015342511687777005,-0.0000019092221918981522,0.00004032142896903679,0.000013651363587996457,0.0000466067940578796,0.000017852991732070222,1.3027107570451335e-7,0.0000011722290764737409,-0.0000434878165833652,-0.000021812964405398816,0.000001429963049304206,0.00001604595672688447,0.00008827573037706316,0.00010605066927382722,0.00011196303967153654,0.00014238811854738742,0.00007170428580138832,0.00009203513036482036,0.00005030815373174846,0.00005320513810147531,0.00006844555173302069,0.00007133291364880279,0.00004482951044337824,0.000057309403928229585,-0.00004976908894605003,-0.000016540670912945643,-0.00012368492025416344,-0.00006704733095830306,-0.00012687843991443515,-0.00008667777001392096,-0.00010667263995856047,-0.00010933732846751809,-0.0000810641358839348,-0.0000843552261358127,-0.00003626633406383917,-0.000011461594112915918,-0.000003800034392043017,0.000010872363418457098,-0.00001115972099796636,-0.000024820123144309036,-0.000016356738342437893,-0.00003160407504765317,0.000021647872927132994,0.00000160533340931579,0.000044044452806701884,0.000006865130671940278,-0.000021276600818964653,-0.00004543062095763162,-0.0001009973420877941,-0.00010950845899060369,-0.00008220582094509155,-0.00012713325850199908,-0.000009265588232665323,-0.00009223717643180862,0.00001942663948284462,-0.00004278800042811781,0.000014971864402468782,-0.000015608507965225726,0.000012556516594486311,-0.00001997295839828439,-0.00001677776890574023,-0.00004871925193583593,-0.00008439271186944097,-0.00009608511754777282,-0.00012681048247031868,-0.00012660387437790632,-0.00009491848322795704,-0.00009672807937022299,-0.000038584679714404047,-0.00004915422323392704,-0.000011407275451347232,-0.00003619683411670849,0.000020544717699522153,-0.000004877408628090052,0.000057512861530994996,0.00005082879215478897,0.000023422402591677383,0.00003235676922486164,-0.00007216427911771461,-0.000044125583372078836,-0.00013907243555877358,-0.00007763699250062928,-0.0001589777530170977,-0.00009526571375317872,-0.0001702349109109491,-0.00015039237041492015,-0.00018199183978140354,-0.00018227424880024046,-0.0001656827371334657,-0.00014178658602759242,-0.00009661682270234451,-0.00006982849299674854,-0.000024176955776056275,-0.000023143686121329665,-0.000021666413886123337,-0.000022818921934231184,-0.00004684945088229142,-0.00003441434455453418,-0.000010103430213348474,0.0000032032912713475525,0.00006675547047052532,0.00008603621245129034,0.00010718784324126318,0.0001322274620179087,0.00010200230462942272,0.00010818237205967307,0.00009606129606254399,0.00009692880848888308,0.00011241745960433036,0.00014431362797040492,0.00011704491771524772,0.00014793468290008605,0.00008428628643741831,0.000059725869505200535,0.00006823895819252357,0.00001569482628838159,0.00011798230116255581,0.00008751583663979545,0.00017217642744071782,0.00014552491484209895,0.00014642594032920897,0.00009886995394481346,0.0000820255299913697,0.0000389802225981839,0.0000945738865993917,0.00006543559720739722,0.00017948643653653562,0.00013175995263736695,0.000207908742595464,0.00013581017265096307,0.0001348408404737711,0.00007278104749275371,0.000048818663344718516,0.000009134634638030548,0.00001749626790115144,-0.000027329901058692485,0.000009467278687225189,-0.000057572869991417974,-0.000054372627346310765,-0.00011624617764027789,-0.00017348630353808403,-0.00019637461809907109,-0.00020912816398777068,-0.00020959861285518855,-0.00009173363650916144,-0.00011212546814931557,0.000036042500141775236,2.3283064365386963e-8,0.00005594479080173187,0.00004100982187082991,0.000023640137442271225,0.00002810826299537439,0.000004636331141227856,0.0000017502184164186474,-0.0000016116446204250678,-0.000008960413651948329,-0.00001896120375022292,-0.000017643205865169875,-0.00007192717748694122,-0.00006774204666726291,-0.00011022477701772004,-0.0001006519451038912,-0.00004939598875353113,-0.000025064480723813176,0.00006950402894290164,0.00008736859308555722,0.00013112671149428934,0.00011726255615940318,0.00009332889749202877,0.00006975586438784376,-0.000007504016139137093,-0.0000017577287962922128,-0.0000711821558070369,-0.00003985501825809479,-0.000008704300853423774,0.00001219889509229688,0.00010966281115543097,0.00010688483598642051,0.0001459826744394377,0.00014799759082961828,0.00012049888755427673,0.00015319800877477974,0.0001315882836934179,0.0001693947851890698,0.00013466438394971192,0.00013570465671364218,0.00003885695696226321,0.000019557321138563566,-0.0000759758404456079,-0.00006659913924522698,-0.00009499234874965623,-0.00006112013215897605,-0.00007698169065406546,-0.000060936577938264236,-0.00006680353544652462,-0.00007666349119972438,0.000022440679458668455,0.000004864556558459299,0.00012551239342428744,0.00011123484728159383,0.00006374843360390514,0.0000694217742420733,-0.00006522072362713516,-0.000034445423807483166,-0.000056505523389205337,-0.00003903900505974889,0.000005489092927746242,-0.000015380668628495187,-0.000013067590771242976,-0.000028134491003584117,-0.000019961922589573078,0.00001111600886360975,0.00003626819307100959,0.00007595207716803998,0.00005631609747069888,0.000051114606321789324,0.000038434911402873695,4.5267279347172007e-7,0.000059726120525738224,0.00003945884600398131,0.00009166861127596349,0.00010432150884298608,0.00008447789878118783,0.00009268712892662734,0.00006632134318351746,0.000032154312066268176,0.00006209970160853118,3.4997174225281924e-7,0.00007809824455762282,0.0000330825278069824,0.00011409471335355192,0.00009687244892120361,0.00010992292664013803,0.00010118685167981312,0.000043402149458415806,0.00003681848829728551,0.00002333584961888846,0.00002146193219232373,0.00008825006807455793,0.00008878691733116284,0.00010468476102687418,0.00011617453128565103,0.000010868432582356036,0.00003768633177969605,-0.0000832886653370224,-0.00006463406316470355,-0.00009575632429914549,-0.00009790592594072223,-0.00008047091250773519,-0.00008127279579639435,-0.00011930312030017376,-0.00010817989095812663,-0.00019761906878557056,-0.00018406282470095903,-0.00025037425803020597,-0.00022929937404114753,-0.00028175031184218824,-0.00026143481954932213,-0.00030704058008268476,-0.00032354859285987914,-0.00028720812406390905,-0.0003314026980660856,-0.00023685301130171865,-0.0002623709151521325,-0.00020041537936776876,-0.00023299336316995323,-0.0001476819161325693,-0.0002481380943208933,-0.00007395316060865298,-0.00019933024304918945,-0.00001707856063148938,-0.00007966350676724687,0.00003398122498765588,0.000010577972716419026,0.00004213210195302963,-0.000016719475752324797,-0.00003703224865603261,-0.00011134900705656037,-0.00007891521818237379,-0.00010674398799892515,-0.000002282263267261442,0.000002869634954549838,0.00004155691203777678,0.00003237165219616145,-0.000040039492887444794,-0.00005632107422570698,-0.00011622216698015109,-0.00010217920498689637,-0.000052099829190410674,-0.000006442031008191407,0.00011611672380240634,0.00016018351016100496,0.0002177420974476263,0.00024585469509474933,0.00016871566185727715,0.0002069331967504695,0.00009723335824673995,0.00016305266763083637,0.00010130155715160072,0.0001628038880880922,0.00009905041952151805,0.00012441941362340003,0.00005324347148416564,0.00006661077350145206,0.000056269716878887266,0.00009563506318954751,0.0001445938105462119,0.00020467364811338484,0.00022031216940376908,0.00027645783848129213,0.00018519532750360668,0.00023159629199653864,0.00010800627205753699,0.0001519494253443554,0.00012027759657939896,0.00017234316328540444,0.00015244039241224527,0.00021870264026802033,0.000060043548728572205,0.00012630523997358978,-0.00008305638039018959,-0.00003651895167422481,-0.00011915012873942032,-0.0000871685188030824,-0.000041786948713706806,-0.000004809240635950118,0.00004110886584385298,0.000093799018941354,0.00001830440669436939,0.00009007014887174591,-0.00008894543861970305,-0.000008388842616113834,-0.00012280653754714876,-0.000059225996665190905,-0.00004686256579589099,-0.000004007886218460044,0.000010301017027813941,0.00006117883458500728,-0.000004959066245646682,0.00006308007868938148,-0.00005623497781925835,0.0000016901053641049657,-0.00012405106099322438,-0.00009191863500745967,-0.00018024181190412492,-0.0001593408960616216,-0.00019957635959144682,-0.00017160963034257293,-0.00017814745660871267,-0.00013509401469491422,-0.00011708180682035163,-0.00006468065839726478,-0.00006644428503932431,-0.000022329521016217768,-0.00005872109250049107,-0.000030379385862033814,-0.00001940926449606195,-9.50950834521791e-7,0.00007214264041977003,0.00007613632624270394,0.00011203531175851822,0.00009669607970863581,0.00008747195533942431,0.00006836865213699639,0.000107871564978268,0.00009087040234589949,0.00019871782569680363,0.00016566846170462668,0.0002717904862947762,0.0002240440808236599,0.00026444465038366616,0.00022366063785739243,0.0002072927018161863,0.00016754464013502002,0.00017488887533545494,0.00011745865049306303,0.00018788142187986523,0.00012361693370621651,0.00018892365915235132,0.0001353108964394778,0.00012977307778783143,0.00008753158908803016,0.00003708814620040357,0.000010673960787244141,-0.00001981318746402394,-0.00003052715692319907,0.0000012943901310791261,-0.000012440191312634852,0.00007004603685345501,0.000053042742365505546,0.00011080254625994712,0.00010929033305728808,0.00010538451169850305,0.00010385063797002658,0.0001238908589584753,0.00009580529876984656,0.00019793650426436216,0.00016720773419365287,0.00024815084179863334,0.0002446943544782698,0.00019588206487242132,0.00019575741316657513,0.00005647114085149951,0.000033640259061940014,-0.00008082586282398552,-0.00010941842629108578,-0.000123425226774998,-0.0001422984933014959,-0.00009261527156922966,-0.00010913527512457222,-0.00009859810234047472,-0.00011477481893962249,-0.00013260109699331224,-0.00014256648137234151,-0.00009395734377903864,-0.00008956607052823529,-0.000003257652451793547,0.000024219256374635734,0.00006157296593300998,0.00009329195017926395,0.0000909910086193122,0.00009424033487448469,0.00007284159801201895,0.00006831511564087123,0.00001874280314950738,0.00005567546031670645,0.000005360243903851369,0.00006956124707357958,0.00004115957926842384,0.00008636829443275928,0.00006720854435116053,0.00010175880743190646,0.000058497971622273326,0.00010565094271441922,-0.00000532744888914749,0.00003650475264294073,-0.00008412737224716693,-0.00005737183892051689,-0.00004074765456607565,-0.000015765856005600654,0.00012070624507032335,0.00012950683594681323,0.0002018612576648593,0.0001815898867789656,0.0001366319484077394,0.00012036338011967018,0.00008128847548505291,0.00008533558138879016,0.00012598736793734133,0.00011848862050101161,0.0001826434163376689,0.00015625306696165353,0.00019109569257125258,0.00017093791393563151,0.00020420609507709742,0.00018747098511084914,0.00021713862952310592,0.00019607768626883626,0.00015462526062037796,0.00015112361870706081,0.00005944148142589256,0.00007137679494917393,0.00002383520950388629,0.00001862557473941706,-0.0000068000390456290916,-0.000017121023120125756,-0.00010218597890343517,-0.00007586612628074363,-0.0001744521432556212,-0.0001242063590325415,-0.0001295977272093296,-0.00010483716323506087,-0.00002151472472178284,-0.000034661545214476064,0.00004824878487852402,0.000019321976651553996,0.000060638627473963425,0.000033946442272281274,0.000049855512770591304,0.00003052474494324997,0.00003425036265980452,0.000019722010620171204,0.00003538441160344519,0.00002866454451577738,0.00006024901085766032,0.00007192634075181559,0.00005440136737888679,0.00007213866047095507,0.000019199043890694156,0.000010913217920460738,0.000045549073547590524,0.000012097194485249929,0.00010095175093738362,0.00006870793731650338,0.00007156033825594932,0.00003835436291410588,0.000020153316654614173,-0.000019508930563461035,0.0000535928484168835,0.00003740128158824518,0.00010149527952307835,0.00011497524246806279,0.00008390550647163764,0.0000843971865833737,0.00003986573210568167,0.000023354001314146444,0.000007602353434776887,0.000020408371710800566,-0.000010802616088767536,0.000026732461265055463,-0.000005622944627248216,0.0000034467293517082,0.000030874678486725315,0.000010173034752369858,0.00007900789205450565,0.0000685180420987308,0.00007322894089156762,0.00007221940177259967,-0.000027310783480061218,-0.000044682725274469703,-0.0001466236572014168,-0.00017769132682587951,-0.00018490885850042105,-0.00021317791834007949,-0.00014575586828868836,-0.00016396366117987782,-0.00008703183266334236,-0.000096126452262979,-0.00003868097337544896,-0.00006154235597932711,0.0000013577704294220894,-0.00006000530629535206,0.00003719485175679438,-0.000029292279577930458,0.00005176669219508767,0.000037953537685098127,0.00004797007568413392,0.0000610950737609528,0.00007513132004532963,0.000035335040593054146,0.00014191074296832085,0.000057879464293364435,0.00018908843048848212,0.0001475651515647769,0.00020764136570505798,0.00022060774790588766,0.00025390449445694685,0.0002503087744116783,0.00030238457839004695,0.0002672707778401673,0.0002528578625060618,0.000237257219851017,0.00013433310959953815,0.00013784827024210244,0.00008091441122815013,0.000059937723563052714,0.00008225104829762131,0.00005401169983088039,0.00003974448191002011,0.00004953946336172521,-0.000010107636626344174,0.00001073527801054297,-0.000020950206817360595,-0.00003656994522316381,-0.00005993116428726353,-0.0000808492986834608,-0.00011625375918811187,-0.0000944273269851692,-0.00010681073763407767,-0.00007551605085609481,-0.00007586299034301192,-0.00009075189882423729,-0.00008544810407329351,-0.00012747022265102714,-0.00006861256406409666,-0.00007860875484766439,0.000004575975708576152,0.00004120101948501542,0.00003772617856157012,0.0000848198906169273,-0.000009577727723808493,0.000012361198059807066,-0.00005892533590667881,-0.00005592560046352446,-0.00008714772411622107,-0.00006369994662236422,-0.0001394686260027811,-0.00008136204269248992,-0.00015996844740584493,-0.00010361209569964558,-0.00011126687604701146,-0.00008401738159591332,-0.00014169493806548417,-0.00011784620437538251,-0.0002762835065368563,-0.00022666376025881618,-0.0002874225901905447,-0.00022627771249972284)\n\
+\n\
+,\n\
+\n\
+new Array(-0.00014015505439601839,-0.00009424725431017578,-0.0000367982174793724,-0.000012330742720223498,-0.000009979183232644573,-0.000005074737146060215,0.000015334489944507368,0.000006053265224181814,0.000033470423659309745,0.000029470638764905743,0.00009303881961386651,0.00010694590309867635,0.00022122845984995365,0.00022976046602707356,0.00027943524764850736,0.00024943548487499356,0.000181631650775671,0.00012874089588876814,0.000033948716009035707,0.00001643829637032468,-0.000038822603528387845,-0.000005076801244285889,-0.000026619280106388032,-0.000004013060788565781,-0.000020743873392348178,-0.000060739057516912,-0.00009209522977471352,-0.00015305288252420723,-0.0001557939249323681,-0.00016957358457148075,-0.00011526542220963165,-0.00008990408241515979,-0.00003546544030541554,-0.000018380367691861466,0.000005372870873543434,0.000013720681636186782,0.000005543797669815831,0.00003979273242293857,-0.000014010610357217956,0.00005891008913749829,-0.00001633692954783328,0.00006351392949000001,-0.000011691547115333378,0.000035224747989559546,-0.00004958381759934127,-0.000023805565433576703,-0.00012163100473117083,-0.00007665240264032036,-0.00016238178068306297,-0.00010357973224017769,-0.00012000015703961253,-0.00009269107249565423,-0.000049141810450237244,-0.00005715646693715826,-0.00004356173303676769,-0.00003632663720054552,-0.00001985907510970719,0.0000020384477465995587,0.00012762073311023414,0.00011586706386879086,0.00021797671797685325,0.00020374754967633635,0.00008666064240969718,0.00011644592450466007,-0.00006568098615389317,-0.000046202490921132267,-0.00004137075302423909,-0.00007593315240228549,0.000004579069354804233,-0.00002532761573093012,-0.00009905502520268783,-0.00007579676457680762,-0.00019283377332612872,-0.00017823997768573463,-0.00014772501890547574,-0.00019722098659258336,-0.00013216372462920845,-0.000167879305081442,-0.00019680026161950082,-0.00015686158440075815,-0.0002077507524518296,-0.00015023740706965327,-0.00017501234833616763,-0.00013415997091215104,-0.00017168966587632895,-0.00013525885879062116,-0.00015167739184107631,-0.00012130104005336761,-0.00008563465962652117,-0.000041452833102084696,-0.00007153890328481793,-0.000001365100615657866,-0.00008754107693675905,-0.0000252203899435699,-0.00003187061520293355,-0.000009977433364838362,0.000022157373678055592,0.00003242286038585007,0.00003615911191445775,0.00009324029088020325,0.000014359744454850443,0.00007800778257660568,-0.000049274443881586194,-0.00005691000842489302,-0.00007130674202926457,-0.00010760929581010714,-0.000036453122447710484,-0.000047757712309248745,0.000054562337027164176,0.000027955291443504393,0.00009254179894924164,0.00002200369090132881,-0.00004265725874574855,-0.00010851425759028643,-0.0001688027841737494,-0.00016441606567241251,-0.00021186693629715592,-0.0001573815243318677,-0.00018332900071982294,-0.0001501880760770291,-0.00010138592188013718,-0.00008154666284099221,-0.00013429764658212662,-0.00008883286500349641,-0.0001400368637405336,-0.00010151389869861305,-0.000043619606003630906,-0.00004538596476777457,-0.000031638654036214575,-0.00003416767867747694,-0.00006974972347961739,-0.00005143813177710399,-0.00010723905870690942,-0.00012572293053381145,-0.00002397704156464897,-0.00009767053415998816,0.00011572502262424678,0.00005432979014585726,0.00007883126090746373,0.0000620109640294686,0.00007341729360632598,0.00004993831316824071,0.00011931547487620264,0.00005841327947564423,0.00005921594856772572,0.00001511409482191084,0.000033078180422307923,0.000019489067199174315,0.000033935510145965964,-0.000011722012459358666,0.00004304029425838962,-0.000035746488720178604,0.00003718510197359137,-0.000058436104154679924,-0.00001174940280179726,-0.00013024899817537516,0.000020506238797679543,-0.00007963776442920789,0.00003176229074597359,-0.00005422571848612279,-0.00002636853423609864,-0.00014182373706717044,-0.000049795104132499546,-0.00017246516654267907,-0.00009185299859382212,-0.00017978546384256333,-0.00013231371121946722,-0.00016474576841574162,-0.0001400558976456523,-0.00015335241914726794,-0.0001470029092160985,-0.00018156964506488293,-0.00014865070988889784,-0.0001718680141493678,-0.00012142615742050111,-0.00014900251699145883,-0.00007435568841174245,-0.00012459667050279677,-0.00008725070802029222,-0.00011005691339960322,-0.00008626709313830361,-0.00012864137534052134,-0.00004616122896550223,-0.0001554132904857397,-0.00009952057007467374,-0.00021355791250243783,-0.0001459539489587769,-0.00023241406597662717,-0.00013092698645778,-0.00017168368503917009,-0.00015152087144088,-0.00015848565089982003,-0.0001564635313116014,-0.00018872391956392676,-0.00011087577149737626,-0.00015771349717397243,-0.0000527798110852018,-0.00008749643166083843,-0.000036134504625806585,-0.00004221020935801789,-0.00008243389311246574,-0.00005874632915947586,-0.0001164921632152982,-0.00013457277964334935,-0.0001483543310314417,-0.00019349232024978846,-0.00023352073912974447,-0.00023075437638908625,-0.00028925627702847123,-0.00027289867284707725,-0.00029771780828014016,-0.0003031028318218887,-0.0002913945645559579,-0.0003263660764787346,-0.00015898887068033218,-0.00020953141211066395,0.000021462499717017636,0.000016161218809429556,0.00006929994560778141,0.00007043606456136331,0.000042957883124472573,-0.000021664078303729184,0.000008055478247115389,-0.00008845835691317916,0.00006582804780919105,-0.000016302576113957912,0.00015406384773086756,0.00010176366777159274,0.00009414566011400893,0.0000354732692358084,0.00007631623884662986,-0.000012391613381623756,0.00007941365765873343,0.0000648690911475569,0.00001397199412167538,0.00010448538523633033,0.000029168595574446954,0.00008860438538249582,-0.00006609586125705391,-0.00006593324360437691,-0.0002065992885036394,-0.0001552091707708314,-0.00018771870236378163,-0.00007774525874992833,-0.00012997548037674278,-0.00007887235551606864,-0.0000391396097256802,-0.000076210533734411,-0.0000876762715051882,-0.0000996374583337456,-0.00014420422667171806,-0.0001080437286873348,0.000032678239222150296,0.00001941799564519897,0.00008381356747122481,0.000031045052310219035,0.00006379729165928438,0.000027837693778565153,0.00006071649841032922,0.00002810096339089796,-0.000023521930415881798,-0.000042365853005321696,0.000022846543288324028,-0.000005697456799680367,0.00003526679938659072,-0.00004256410466041416,-0.0000757251400500536,-0.00013366315397433937,-0.00011955667287111282,-0.00011828384594991803,-0.00017747009405866265,-0.00016866534133441746,-0.0001741003361530602,-0.00016113329911604524,-0.00020356231834739447,-0.0001154246274381876,-0.00034802500158548355,-0.00014464158448390663,-0.0003696058120112866,-0.00011752495629480109,-0.00038095645140856504,-0.00015291014278773218,-0.0003850535140372813,-0.00025106975226663053,-0.00019905260705854744,-0.0002682860067579895,0.0000021677478798665106,-0.0002483882417436689,0.0001757844293024391,-0.0002012909681070596,0.00042002167901955545,-0.00011912333138752729,0.000566192960832268,0.000036280973290558904,0.0006151891429908574,0.000419270625570789,0.0007446972886100411,0.0009848694317042828,0.0007311853696592152,0.0014010249869897962,0.000447156373411417,0.001734805991873145,0.000048851674364414066,0.002086761873215437,-0.00039686530362814665,0.002081888262182474,-0.0007315071416087449,0.0017690588720142841,-0.0011235257843509316,0.0012453674571588635,-0.001530013862065971,0.0005929881590418518,-0.0015843822620809078,0.00013364609912969172,-0.001662310678511858,-0.0004051764262840152,-0.0017336646560579538,-0.0008209687657654285,-0.0017958111129701138,-0.0008799072238616645,-0.0023105277214199305,-0.0009375008521601558,-0.0026750226970762014,-0.00045945230522193015,-0.00301142456009984,0.00032612154609523714,-0.0037594083696603775,0.000844741880428046,-0.004248717334121466,0.001590814790688455,-0.004585081245750189,0.0022387588396668434,-0.004611271433532238,0.002747831167653203,-0.004052754957228899,0.0032969240564852953,-0.003427402814850211,0.0034304591827094555,-0.0024721764493733644,0.003596643218770623,-0.001401375513523817,0.003709446405991912,-0.0006295255152508616,0.0034894035197794437,0.000059773577959276736,0.003397291759029031,0.00038508654688484967,0.0033650926779955626,0.0005159653373993933,0.003734476398676634,0.00030270108254626393,0.0044049047864973545,-0.0007104952237568796,0.004650060087442398,-0.0020415415056049824,0.004571670666337013,-0.003501879284158349,0.004163370467722416,-0.00479539530351758,0.0036168238148093224,-0.005974814295768738,0.002774751279503107,-0.007256212644279003,0.001289845909923315,-0.007495714817196131,0.00010230821499135345,-0.006734591443091631,-0.0007406961522065103,-0.00581145565956831,-0.0016243165591731668,-0.00462182704359293,-0.002173752523958683,-0.0036379247903823853,-0.002846694318577647,-0.002800004556775093,-0.0035107601433992386,-0.0017736477311700583,-0.003419754095375538,-0.0011825866531580687,-0.0027814360801130533,-0.0008575308602303267,-0.0018417327664792538,-0.0002217306027887389,-0.000598331680521369,0.0005840326775796711,0.0008799363858997822,0.0010996086057275534,0.0021491702646017075,0.001309904851950705,0.0030024773441255093,0.0020673295948654413,0.003890095977112651,0.003430642420426011,0.004317090380936861,0.004580176901072264,0.003661549184471369,0.00580180948600173,0.0027171203400939703,0.007631687913089991,0.0020412683952599764,0.009570170193910599,0.0011816845508292317,0.010828486643731594,-0.00026033760514110327,0.010754303075373173,-0.0022562353406101465,0.009428870864212513,-0.00440824031829834,0.00784861296415329,-0.006088739261031151,0.006158956792205572,-0.007177523337304592,0.003770801005885005,-0.00812677014619112,0.0011826830450445414,-0.008794397115707397,-0.0005873069749213755,-0.008513960987329483,-0.0010649776086211205,-0.007513529155403376,-0.0007121718372218311,-0.007079744245857,-0.0002848606090992689,-0.007748864591121674,0.0008878273656591773,-0.008503956720232964,0.0035180600825697184,-0.008739612065255642,0.006504544522613287,-0.009005337953567505,0.008940945379436016,-0.00949372723698616,0.0112361591309309,-0.009555941447615623,0.01331779919564724,-0.008684584870934486,0.014238296076655388,-0.007197503000497818,0.013849114067852497,-0.005386539734899998,0.012764517217874527,-0.003275955095887184,0.01142237801104784,-0.0009684885153546929,0.010298161767423153,0.0016993064200505614,0.009333365596830845,0.00391809456050396,0.008427868597209454,0.0044991616159677505,0.008336156606674194,0.0039911759085953236,0.008962663821876049,0.0027452115900814533,0.009156675077974796,0.00011548047768883407,0.008277789689600468,-0.00374692864716053,0.006709702778607607,-0.008039569482207298,0.00510604539886117,-0.011835870333015919,0.0028857786674052477,-0.014525201171636581,-0.0005683306371793151,-0.015833331272006035,-0.004239668603986502,-0.015388516709208488,-0.006670473609119654,-0.012940594926476479,-0.007479296065866947,-0.008850338868796825,-0.007622465491294861,-0.004532064776867628,-0.0072344085201621056,-0.0008344601956196129,-0.0057411170564591885,0.0022335564717650414,-0.0032891982700675726,0.004121846053749323,0.0008299641194753349,0.005279644392430782,0.003736786311492324,0.0047928947024047375,0.0013215296203270555,0.0010782248573377728,-0.000013336036317923572,-0.0011458239750936627,0.0031413149554282427,-0.00009486293856753036,-0.0011687587248161435,-0.0041114469058811665,-0.017392633482813835,-0.015722988173365593,-0.034477073699235916,-0.027795441448688507,-0.04571573808789253,-0.036322321742773056,-0.05450707674026489,-0.0428432859480381,-0.06265253573656082,-0.047500766813755035,-0.05975385755300522,-0.041561610996723175,-0.032463666051626205,-0.013804420828819275,0.01827487349510193,0.03537826985120773,0.08266807347536087,0.097795769572258,0.15217961370944977,0.1658187061548233,0.22064581513404846,0.23351822793483734,0.28683555126190186,0.298629492521286,0.3469022810459137,0.35707736015319824,0.3909241557121277,0.4009797275066376,0.4156057834625244,0.4274917244911194,0.4247729480266571,0.43869462609291077,0.42078956961631775,0.43660423159599304,0.4062882959842682,0.42413580417633057,0.3860650956630707,0.4054466187953949,0.36459267139434814,0.38485953211784363,0.34501156210899353,0.3655964732170105,0.32996436953544617,0.34972891211509705,0.3208392858505249,0.3385865390300751,0.31652164459228516,0.3319227993488312,0.31623896956443787,0.3296041488647461,0.3198554813861847,0.3315024673938751,0.32542842626571655,0.3357532024383545,0.3314844071865082,0.3411482274532318,0.33733949065208435,0.3469061255455017,0.3416065573692322,0.3515341877937317,0.34387338161468506,0.35465532541275024,0.3446221947669983,0.3560125529766083,0.3444567918777466,0.35549405217170715,0.3434079587459564,0.3537798523902893,0.34088873863220215,0.35074639320373535,0.3382267653942108,0.34693875908851624,0.3369491696357727,0.3435756266117096,0.33618712425231934,0.3405708968639374,0.3352181017398834,0.337916761636734,0.3344864845275879,0.3360024392604828,0.3347020149230957,0.33500710129737854,0.33559557795524597,0.3345468044281006,0.3356438875198364,0.33335721492767334,0.33476224541664124,0.3313899040222168,0.33328360319137573,0.3290165960788727,0.33022430539131165,0.325093150138855,0.3257369101047516,0.3194625973701477,0.32044002413749695,0.3130733370780945,0.3142836391925812,0.3061066269874573,0.3078814744949341,0.2988135516643524,0.30184903740882874,0.2917783856391907,0.2964288294315338,0.2853374481201172,0.2916559875011444,0.27951890230178833,0.2874945402145386,0.274495929479599,0.2842196524143219,0.27030646800994873,0.28150874376296997,0.26606911420822144,0.27893924713134766,0.26149675250053406,0.2760584354400635,0.2568477988243103,0.27202627062797546,0.2516094148159027,0.26775065064430237,0.24617767333984375,0.26375263929367065,0.240883007645607,0.2583709955215454,0.2348024845123291,0.2521602511405945,0.22854775190353394,0.24681374430656433,0.22324083745479584,0.24198345839977264,0.21861906349658966,0.23773431777954102,0.21457253396511078,0.23431454598903656,0.2108982503414154,0.23115283250808716,0.20731040835380554,0.22855831682682037,0.20408383011817932,0.22669631242752075,0.2009020447731018,0.22472351789474487,0.19726240634918213,0.22214411199092865,0.19329386949539185,0.2187594175338745,0.1889563798904419,0.21419735252857208,0.18386077880859375,0.20839394629001617,0.17786459624767303,0.2017228603363037,0.1712917685508728,0.19439153373241425,0.16436927020549774,0.18625706434249878,0.1569976955652237,0.17753638327121735,0.14927631616592407,0.16906782984733582,0.14145801961421967,0.16131752729415894,0.13372083008289337,0.15394407510757446,0.1261877566576004,0.14700950682163239,0.11899550259113312,0.14078551530838013,0.11220572888851166,0.13472723960876465,0.10562274605035782,0.1288258135318756,0.09939584136009216,0.12334570288658142,0.09371078014373779,0.11740842461585999,0.08796590566635132,0.11085216701030731,0.08191831409931183,0.10430294275283813,0.0758076012134552,0.09747365862131119,0.06946639716625214,0.09014172852039337,0.06285040080547333,0.08244733512401581,0.05589297041296959,0.0747237503528595,0.0486995093524456,0.06748583912849426,0.04179181903600693,0.06031538173556328,0.034901268780231476,0.05304372310638428,0.02791520208120346,0.04633215442299843,0.021517589688301086,0.039766762405633926,0.015343964099884033,0.03282143175601959,0.008753910660743713,0.0258503258228302,0.0020630136132240295,0.01878304034471512,-0.004641629755496979,0.011329539120197296,-0.01166088879108429,0.003378555178642273,-0.019190803170204163,-0.005097053945064545,-0.027227118611335754,-0.013719238340854645,-0.03537680208683014,-0.022374339401721954,-0.043488986790180206,-0.03137648105621338,-0.05187668651342392,-0.04053819179534912,-0.0604567751288414,-0.049499429762363434,-0.06884048134088516,-0.05849288031458855,-0.07712171971797943,-0.06773670017719269,-0.08554264158010483,-0.07693895697593689,-0.09397900104522705,-0.08596764504909515,-0.10236804187297821,-0.09495700895786285,-0.11071249842643738,-0.10388500988483429,-0.11891487240791321,-0.11278313398361206,-0.1271471083164215,-0.12161137163639069,-0.1353926956653595,-0.1302194446325302,-0.14331747591495514,-0.13882678747177124,-0.15112300217151642,-0.14760717749595642,-0.15909935534000397,-0.1563674807548523,-0.1669865846633911,-0.1650761067867279,-0.17466247081756592,-0.1739044189453125,-0.1824301928281784,-0.18288172781467438,-0.19044317305088043,-0.19180621206760406,-0.1984090507030487,-0.2006174921989441,-0.2061910629272461,-0.2095491737127304,-0.2141258418560028,-0.2184688150882721,-0.22216469049453735,-0.22707563638687134,-0.2299291044473648,-0.23560881614685059,-0.23756471276283264,-0.24421198666095734,-0.24524550139904022,-0.2526945173740387,-0.252858430147171,-0.2611212730407715,-0.2604433596134186,-0.26948052644729614,-0.2679097056388855,-0.27768683433532715,-0.2752090096473694,-0.2859497666358948,-0.28264039754867554,-0.29414576292037964,-0.29005101323127747,-0.30205854773521423,-0.2971515655517578,-0.31004756689071655,-0.30430930852890015,-0.3181053400039673,-0.3115376830101013,-0.32590630650520325,-0.31850019097328186,-0.33365267515182495,-0.32542774081230164,-0.3414079546928406,-0.33242523670196533,-0.34893766045570374,-0.33921313285827637,-0.3563483953475952,-0.3458234965801239,-0.36362698674201965,-0.35227999091148376,-0.3707098960876465,-0.3586232364177704,-0.37783506512641907,-0.36508598923683167,-0.3848576247692108,-0.3714151680469513,-0.3916032016277313,-0.3774167597293854,-0.3983784317970276,-0.38348257541656494,-0.4050813317298889,-0.38953205943107605,-0.4114915728569031,-0.3952938914299011,-0.41792139410972595,-0.40107113122940063,-0.4242797791957855,-0.4067872166633606,-0.430213063955307,-0.4120813012123108,-0.4359695613384247,-0.41720691323280334,-0.4416967034339905,-0.4222995638847351,-0.44718682765960693,-0.42709559202194214,-0.45248913764953613,-0.43165889382362366,-0.45770472288131714,-0.4361976385116577,-0.4627995789051056,-0.4406948685646057,-0.467723548412323,-0.4449848532676697,-0.4723993241786957,-0.4489439129829407,-0.47690653800964355,-0.4527551233768463,-0.4812902808189392,-0.4565407931804657,-0.48539483547210693,-0.4600854218006134,-0.48930904269218445,-0.4634152054786682,-0.4931594729423523,-0.4667051434516907,-0.49675899744033813,-0.46982237696647644,-0.5000807046890259,-0.4727060794830322,-0.5032362341880798,-0.47544509172439575,-0.5061864256858826,-0.4780427813529968,-0.5089499354362488,-0.4805164635181427,-0.5115028023719788,-0.4827759861946106,-0.513809084892273,-0.48477935791015625,-0.5159985423088074,-0.48671194911003113,-0.5179522633552551,-0.4884487986564636,-0.5195164084434509,-0.4897882044315338,-0.520979642868042,-0.4910416007041931,-0.5224595069885254,-0.492371529340744,-0.5237541198730469,-0.4935266375541687,-0.5248284339904785,-0.4944034814834595,-0.5256340503692627,-0.4950096309185028,-0.5261802077293396,-0.4954404830932617,-0.5266210436820984,-0.4957996904850006,-0.5268115997314453,-0.4958656430244446,-0.5266780257225037,-0.4956287741661072,-0.5264650583267212,-0.4954100549221039,-0.526107668876648,-0.495071142911911,-0.5254742503166199,-0.49441009759902954,-0.5246858596801758,-0.4936348795890808,-0.523658812046051,-0.4927383065223694,-0.5223727226257324,-0.4916102886199951,-0.5210084915161133,-0.4903441369533539,-0.5194172263145447,-0.4888645112514496,-0.5174907445907593,-0.4871516525745392,-0.5154325366020203,-0.48535043001174927,-0.5132569074630737,-0.4833911061286926,-0.5109375715255737,-0.4812907576560974,-0.5085335969924927,-0.47917601466178894,-0.5059165954589844,-0.4768742620944977,-0.5030509233474731,-0.4742845892906189,-0.500028669834137,-0.4715332090854645,-0.4968000054359436,-0.46862754225730896,-0.49335336685180664,-0.46553701162338257,-0.4896450638771057,-0.46218371391296387,-0.48560720682144165,-0.4585230052471161,-0.4814741313457489,-0.4548163115978241,-0.47733908891677856,-0.45113861560821533,-0.47292858362197876,-0.44719982147216797,-0.46825575828552246,-0.4430288076400757,-0.46353116631507874,-0.43884843587875366,-0.4587159752845764,-0.43462270498275757,-0.45373016595840454,-0.43027472496032715,-0.44851088523864746,-0.4257199764251709,-0.4430246949195862,-0.42090100049972534,-0.4373963177204132,-0.41597795486450195,-0.43161025643348694,-0.4109745919704437,-0.42553985118865967,-0.40570569038391113,-0.4193096160888672,-0.4002203345298767,-0.41303032636642456,-0.39467763900756836,-0.4066188335418701,-0.38908135890960693,-0.4000610113143921,-0.38337835669517517,-0.3933746814727783,-0.37749603390693665,-0.3865426182746887,-0.37144654989242554,-0.3795803189277649,-0.36532968282699585,-0.37244653701782227,-0.3590787649154663,-0.36512744426727295,-0.3526001274585724,-0.35773417353630066,-0.3460187315940857,-0.3503147065639496,-0.339443564414978,-0.3428031802177429,-0.3328033685684204,-0.33511918783187866,-0.32598936557769775,-0.3272414207458496,-0.318989634513855,-0.319307416677475,-0.31192755699157715,-0.3114268183708191,-0.30487531423568726,-0.3034377694129944,-0.29770565032958984,-0.2951779365539551,-0.29031598567962646,-0.28677380084991455,-0.2827863097190857,-0.2784140706062317,-0.27522894740104675,-0.2700554132461548,-0.26765698194503784,-0.26152825355529785,-0.2599930167198181,-0.25285422801971436,-0.2521980106830597,-0.24422062933444977,-0.2443566769361496,-0.2356354296207428,-0.23653943836688995,-0.22694560885429382,-0.2287016212940216,-0.218154639005661,-0.22078363597393036,-0.20938779413700104,-0.2128010392189026,-0.20065683126449585,-0.20482154190540314,-0.19187307357788086,-0.19685180485248566,-0.18300488591194153,-0.18880067765712738,-0.17411771416664124,-0.1806454360485077,-0.16525717079639435,-0.17248183488845825,-0.15638071298599243,-0.1643337905406952,-0.14744843542575836,-0.15611480176448822,-0.13846251368522644,-0.14778637886047363,-0.12942667305469513,-0.1394030600786209,-0.12038421630859375,-0.13102714717388153,-0.11140423268079758,-0.12266922742128372,-0.10246630012989044,-0.11430176347494125,-0.09349130839109421,-0.10590529441833496,-0.08449366688728333,-0.09749168902635574,-0.07557141780853271,-0.08910224586725235,-0.06675387918949127,-0.0807742029428482,-0.057972121983766556,-0.07248006016016006,-0.0491742342710495,-0.06414788961410522,-0.04038545489311218,-0.05578262731432915,-0.031651221215724945,-0.04744748771190643,-0.023004386574029922,-0.03917189687490463,-0.014445883221924305,-0.03089878335595131,-0.005930168554186821,-0.022583838552236557,0.002562102861702442,-0.014277668669819832,0.010952816344797611,-0.0060509974136948586,0.01916518434882164,0.002093313727527857,0.027261536568403244,0.010179467499256134,0.03536767512559891,0.01820770837366581,0.043512094765901566,0.026199307292699814,0.05165395140647888,0.03420865908265114,0.059800952672958374,0.04223240911960602,0.06799114495515823,0.05020764097571373,0.0762426033616066,0.05816218629479408,0.08457324653863907,0.06622572243213654,0.09293084591627121,0.07437774538993835,0.10108152031898499,0.08233530074357986,0.10879091918468475,0.08987627178430557,0.11614792048931122,0.09715694189071655,0.1234435960650444,0.10448165237903595,0.13069337606430054,0.11183199286460876,0.137596994638443,0.11889855563640594,0.1440371870994568,0.12557530403137207,0.15028083324432373,0.13212789595127106,0.15657037496566772,0.13878726959228516,0.1628297120332718,0.1454436331987381,0.16891765594482422,0.15190395712852478,0.1749131679534912,0.15824180841445923,0.1809864193201065,0.16467547416687012,0.18716280162334442,0.17122480273246765,0.19334079325199127,0.17770837247371674,0.19944238662719727,0.18403005599975586,0.2054712474346161,0.19027374684810638,0.21147370338439941,0.1965131163597107,0.21746426820755005,0.202686607837677,0.22337956726551056,0.2087024450302124,0.22914519906044006,0.2145642787218094,0.23477570712566376,0.22034037113189697,0.2403235286474228,0.22606170177459717,0.24574553966522217,0.23169220983982086,0.25093889236450195,0.23718631267547607,0.25590190291404724,0.242568701505661,0.2607375681400299,0.24794656038284302,0.26550406217575073,0.25342273712158203,0.27017199993133545,0.25899767875671387,0.27470505237579346,0.2645891606807709,0.27907735109329224,0.27013954520225525,0.28324833512306213,0.27565181255340576,0.2872246503829956,0.28112611174583435,0.2910986542701721,0.28652048110961914,0.29492753744125366,0.2917826473712921,0.2986379861831665,0.2968660891056061,0.30215686559677124,0.3017169237136841,0.30556589365005493,0.306292861700058,0.30898672342300415,0.3105788826942444,0.31235742568969727,0.31453004479408264,0.31548088788986206,0.3180347979068756,0.31830263137817383,0.3210201859474182,0.3209911286830902,0.32356560230255127,0.32369938492774963,0.32582664489746094,0.3263929486274719,0.3278847932815552,0.3289925754070282,0.32976004481315613,0.33154329657554626,0.33151277899742126,0.33410102128982544,0.33320218324661255,0.3365638256072998,0.3347967565059662,0.3387991189956665,0.3362775146961212,0.3408724367618561,0.33779776096343994,0.34296247363090515,0.33957409858703613,0.3450830578804016,0.34163421392440796,0.34706878662109375,0.3438357412815094,0.348814994096756,0.34612223505973816,0.35035955905914307,0.34857824444770813,0.3517402708530426,0.3512190878391266,0.35293614864349365,0.35391637682914734,0.35395580530166626,0.3565821945667267,0.35486266016960144,0.35927093029022217,0.35572633147239685,0.36204156279563904,0.356637567281723,0.3648494482040405,0.3577037751674652,0.36761653423309326,0.3589226007461548,0.3702812194824219,0.3601362705230713,0.37273502349853516,0.3612326383590698,0.37484031915664673,0.36232203245162964,0.37658295035362244,0.36361539363861084,0.37812894582748413,0.3651997447013855,0.3796727657318115,0.3670227825641632,0.3812750577926636,0.3690119981765747,0.38286787271499634,0.3711033761501312,0.3843686878681183,0.37321075797080994,0.3857674300670624,0.37523677945137024,0.38710513710975647,0.37706899642944336,0.3883553445339203,0.37854859232902527,0.3893587589263916,0.37954261898994446,0.38997459411621094,0.3800737261772156,0.3902926743030548,0.3802680969238281,0.39055025577545166,0.38013553619384766,0.39079850912094116,0.37950754165649414,0.3908044993877411,0.3782094717025757,0.3903343379497528,0.3761543035507202,0.389335036277771,0.3732477128505707,0.3877517879009247,0.3694034218788147,0.38540199398994446,0.36476823687553406,0.38222476840019226,0.3597945272922516,0.3785027265548706,0.35500597953796387,0.37467244267463684,0.3508549928665161,0.371074914932251,0.3479050397872925,0.3680570721626282,0.3469204604625702,0.3661377429962158,0.34853217005729675,0.3658168911933899,0.3528748154640198,0.36726272106170654,0.35964274406433105,0.3702837824821472,0.36830464005470276,0.37445157766342163,0.37805625796318054,0.37910306453704834,0.38772836327552795,0.3833930492401123,0.3960375189781189,0.38656750321388245,0.4019690752029419,0.3881657123565674,0.4048866331577301,0.38796383142471313,0.40447235107421875,0.38597115874290466,0.40075889229774475,0.3825986981391907,0.394109308719635,0.3785688579082489,0.3850228786468506,0.3744800388813019,0.3740721046924591,0.37065625190734863,0.3620791435241699,0.3674893379211426,0.3500944972038269,0.3655659258365631,0.33906349539756775,0.3652535676956177,0.3297199308872223,0.36647671461105347,0.3227653205394745,0.36900168657302856,0.3185165226459503,0.372326135635376,0.31588882207870483,0.37477192282676697,0.31177088618278503,0.37278440594673157,0.3019689917564392,0.36187323927879333,0.2825281023979187,0.3380492031574249,0.25039106607437134,0.29856887459754944,0.20400939881801605,0.24250024557113647,0.14459776878356934,0.17187324166297913,0.07684291154146194,0.09231474250555038,0.00776814017444849,0.011855741031467915,-0.05500537157058716,-0.060879603028297424,-0.1035246029496193,-0.1170259341597557,-0.12914299964904785,-0.14721639454364777,-0.12436288595199585,-0.14353066682815552,-0.08681271970272064,-0.1035139262676239,-0.021452229470014572,-0.032334811985492706,0.06164011359214783,0.05947559326887131,0.15169209241867065,0.16042886674404144,0.2398754358291626,0.2607254385948181,0.3191983103752136,0.3522929549217224,0.3837544322013855,0.42822763323783875,0.4290175437927246,0.4831486642360687,0.4528612196445465,0.514176607131958,0.4562394618988037,0.521668553352356,0.44294753670692444,0.5091447830200195,0.41847264766693115,0.4822106659412384,0.3884967267513275,0.44692263007164,0.3579346537590027,0.40867704153060913,0.3308313190937042,0.37211814522743225,0.31042635440826416,0.34127500653266907,0.2987293004989624,0.31904998421669006,0.2959997057914734,0.30647990107536316,0.30091267824172974,0.3027843236923218,0.3113101124763489,0.306190550327301,0.3247837424278259,0.31460651755332947,0.3388565182685852,0.32574155926704407,0.3511863946914673,0.33718350529670715,0.35997089743614197,0.34681347012519836,0.3642255961894989,0.3532503843307495,0.3637520968914032,0.35595330595970154,0.3590213358402252,0.3550752103328705,0.351114958524704,0.35131362080574036,0.3415455222129822,0.3457548916339874,0.3318597078323364,0.3396145701408386,0.32324835658073425,0.33392757177352905,0.31639763712882996,0.32932248711586,0.3115268051624298,0.3259360194206238,0.3084493577480316,0.32346779108047485,0.3066614270210266,0.3213740587234497,0.3055570721626282,0.3191356658935547,0.30470365285873413,0.3164435923099518,0.3039399981498718,0.313181608915329,0.30320900678634644,0.30928266048431396,0.3023843467235565,0.3046846091747284,0.3013804256916046,0.2994810938835144,0.3003881573677063,0.29404520988464355,0.2997879981994629,0.28885146975517273,0.2997121810913086,0.28411442041397095,0.2998063862323761,0.2796758711338043,0.2995368540287018,0.2752785384654999,0.2986152470111847,0.2708359360694885,0.2969832122325897,0.2663668990135193,0.29451480507850647,0.26180583238601685,0.2909870147705078,0.25703945755958557,0.2863495647907257,0.25208550691604614,0.2808309495449066,0.24710004031658173,0.27474072575569153,0.2422293871641159,0.26830995082855225,0.23756276071071625,0.261757493019104,0.23320716619491577,0.25537675619125366,0.22930194437503815,0.2494843453168869,0.22595880925655365,0.24431155622005463,0.22322537004947662,0.23989641666412354,0.2210220843553543,0.235987588763237,0.2190142273902893,0.2321094125509262,0.21664059162139893,0.22785964608192444,0.2134196013212204,0.2231336086988449,0.20920293033123016,0.21797817945480347,0.20404097437858582,0.2123415470123291,0.19792068004608154,0.20616373419761658,0.19082854688167572,0.19966572523117065,0.18301355838775635,0.19332806766033173,0.1749725341796875,0.18755415081977844,0.16715316474437714,0.18249043822288513,0.15979434549808502,0.1781284064054489,0.15299631655216217,0.17435649037361145,0.14673756062984467,0.1708746999502182,0.1408073604106903,0.16724835336208344,0.13490109145641327,0.16312113404273987,0.1288263201713562,0.1582898050546646,0.12252052128314972,0.1526111662387848,0.11592620611190796,0.14601793885231018,0.109025739133358,0.1386347860097885,0.10197537392377853,0.13071639835834503,0.09501562267541885,0.12245433777570724,0.08824774622917175,0.11396884173154831,0.0816502720117569,0.10543704777956009,0.0752602368593216,0.09703152626752853,0.06912031024694443,0.08874747902154922,0.06306732445955276,0.0804801806807518,0.05680617690086365,0.07224872708320618,0.050199929624795914,0.06413860619068146,0.04326504096388817,0.056058719754219055,0.03589431941509247,0.04781285300850868,0.02787492424249649,0.03942457586526871,0.019239455461502075,0.031131481751799583,0.010328397154808044,0.023022381588816643,0.001407034695148468,0.014940470457077026,-0.007533639669418335,0.006808610633015633,-0.016492079943418503,-0.0012192577123641968,-0.025234082713723183,-0.009038610383868217,-0.03353056684136391,-0.016785575076937675,-0.041423678398132324,-0.024613576009869576,-0.04908459633588791,-0.03248251974582672,-0.056559376418590546,-0.04031608998775482,-0.0638224333524704,-0.04819875210523605,-0.07095935940742493,-0.05626891925930977,-0.07813222706317902,-0.06454124301671982,-0.08543310314416885,-0.0729595273733139,-0.09288822114467621,-0.0815194621682167,-0.10053624212741852,-0.09023560583591461,-0.10840082168579102,-0.09907303005456924,-0.11644048988819122,-0.1079840436577797,-0.12459170818328857,-0.11693437397480011,-0.1328069120645523,-0.12586098909378052,-0.14102135598659515,-0.1347116231918335,-0.14916948974132538,-0.14354576170444489,-0.15726426243782043,-0.15246544778347015,-0.16536462306976318,-0.16142883896827698,-0.1734473705291748,-0.17029942572116852,-0.18144424259662628,-0.17903432250022888,-0.18932628631591797,-0.18777750432491302,-0.19719542562961578,-0.1966264843940735,-0.2051265984773636,-0.20549310743808746,-0.21306931972503662,-0.2142835110425949,-0.22096262872219086,-0.2230629175901413,-0.2288345843553543,-0.23193064332008362,-0.23672154545783997,-0.24084587395191193,-0.24458253383636475,-0.24968738853931427,-0.2523565888404846,-0.25840240716934204,-0.26002565026283264,-0.2669919431209564,-0.2675635516643524,-0.2754093110561371,-0.2748936712741852,-0.2835761606693268,-0.28195685148239136,-0.2914767563343048,-0.2887730896472931,-0.29917678236961365,-0.2954060733318329,-0.3067672550678253,-0.30192068219184875,-0.31432220339775085,-0.30839264392852783,-0.32188379764556885,-0.31489381194114685,-0.3294561803340912,-0.3214408755302429,-0.3370295464992523,-0.328012615442276,-0.3446136713027954,-0.33462363481521606,-0.35221201181411743,-0.34130868315696716,-0.3597670793533325,-0.34802311658859253,-0.36719390749931335,-0.3546490967273712,-0.3744781017303467,-0.36113351583480835,-0.38167330622673035,-0.36753392219543457,-0.3887888789176941,-0.37389105558395386,-0.39575546979904175,-0.38014477491378784,-0.40252387523651123,-0.38622432947158813,-0.4091200828552246,-0.39214345812797546,-0.4155809283256531,-0.3979530334472656,-0.42190879583358765,-0.40365856885910034,-0.4280899465084076,-0.40922433137893677,-0.43409258127212524,-0.4146045446395874,-0.43986040353775024,-0.4197533428668976,-0.44537705183029175,-0.42464694380760193,-0.4506929814815521,-0.4293072521686554,-0.4558223783969879,-0.43376216292381287,-0.4606941044330597,-0.43799930810928345,-0.4652884602546692,-0.442005455493927,-0.4697306454181671,-0.4458353519439697,-0.4741453230381012,-0.44958731532096863,-0.47850847244262695,-0.45330822467803955,-0.4827500581741333,-0.4569667875766754,-0.4869179129600525,-0.46052834391593933,-0.4911094307899475,-0.4640166759490967,-0.49528059363365173,-0.4674590229988098,-0.49924901127815247,-0.4707924723625183,-0.5029004216194153,-0.4738979935646057,-0.5062958002090454,-0.4767228066921234,-0.5095095038414001,-0.47928720712661743,-0.5124505758285522,-0.4815814197063446,-0.5149758458137512,-0.48357388377189636,-0.5171502828598022,-0.48531922698020935,-0.5192136764526367,-0.4869314432144165,-0.5212603807449341,-0.488446980714798,-0.5231381058692932,-0.48984047770500183,-0.52472984790802,-0.4911395013332367,-0.5261441469192505,-0.4923926889896393,-0.527509868144989,-0.49356329441070557,-0.5287466049194336,-0.49457594752311707,-0.5296869277954102,-0.49541616439819336,-0.5303183197975159,-0.49609023332595825,-0.5307528972625732,-0.49656811356544495,-0.5310207605361938,-0.4968433976173401,-0.5310498476028442,-0.496968537569046,-0.530831515789032,-0.49698033928871155,-0.5304620265960693,-0.49686378240585327,-0.5299873352050781,-0.4966042637825012,-0.5293381810188293,-0.4962059259414673,-0.5284557342529297,-0.49565649032592773,-0.5273529887199402,-0.4949106276035309,-0.526007354259491,-0.4938989281654358,-0.5243396759033203,-0.49257004261016846,-0.5223512649536133,-0.49095845222473145,-0.5201387405395508,-0.48915889859199524,-0.5177398324012756,-0.48719456791877747,-0.5151124596595764,-0.4850119352340698,-0.5122785568237305,-0.482637494802475,-0.5093286633491516,-0.4801918864250183,-0.5062897801399231,-0.4777042865753174,-0.5031248927116394,-0.475080281496048,-0.49982544779777527,-0.4722902476787567,-0.4963882863521576,-0.46941402554512024,-0.49277254939079285,-0.46646642684936523,-0.48896169662475586,-0.46334540843963623,-0.48497438430786133,-0.45997869968414307,-0.48077625036239624,-0.4563928246498108,-0.4763081669807434,-0.45262888073921204,-0.47160157561302185,-0.4486851990222931,-0.4667295813560486,-0.4445449113845825,-0.46167927980422974,-0.4402090609073639,-0.45640772581100464,-0.4357064366340637,-0.45095518231391907,-0.43107399344444275,-0.4453774094581604,-0.4263157844543457,-0.43965455889701843,-0.4214092791080475,-0.43376171588897705,-0.4163581430912018,-0.427729070186615,-0.4111863970756531,-0.42157092690467834,-0.40588706731796265,-0.41525986790657043,-0.40044105052948,-0.4087994396686554,-0.3948689103126526,-0.4022263288497925,-0.38919609785079956,-0.3955446183681488,-0.38339942693710327,-0.3887292444705963,-0.3774532377719879,-0.3817715644836426,-0.37138763070106506,-0.37467828392982483,-0.3652406632900238,-0.36746498942375183,-0.3589944839477539,-0.36015987396240234,-0.35260990262031555,-0.3527684509754181,-0.3460889160633087,-0.3452497124671936,-0.33946171402931213,-0.3375682830810547,-0.3327275514602661,-0.3297394812107086,-0.32584986090660095,-0.3218045234680176,-0.3188246786594391,-0.31380194425582886,-0.31171417236328125,-0.3057512938976288,-0.3045653700828552,-0.29762595891952515,-0.29733529686927795,-0.28938376903533936,-0.28996893763542175,-0.2810479402542114,-0.28250637650489807,-0.2726821303367615,-0.27501970529556274,-0.2642843723297119,-0.26749780774116516,-0.2558106482028961,-0.25989100337028503,-0.24728626012802124,-0.25220686197280884,-0.23876431584358215,-0.24447709321975708,-0.23021483421325684,-0.23670168220996857,-0.22157728672027588,-0.22887814044952393,-0.21286465227603912,-0.221002995967865,-0.20411089062690735,-0.21303793787956238,-0.19533251225948334,-0.20500221848487854,-0.1864926666021347,-0.19693033397197723,-0.1776198148727417,-0.18884466588497162,-0.16875708103179932,-0.1807192862033844,-0.15989913046360016,-0.1725713461637497,-0.15102531015872955,-0.16447541117668152,-0.14213839173316956,-0.15643048286437988,-0.13326241075992584,-0.1483512669801712,-0.12442145496606827,-0.1402113437652588,-0.11559772491455078,-0.13205887377262115,-0.10671859979629517,-0.12390013784170151,-0.09771277010440826,-0.11567951738834381,-0.08856542408466339,-0.10734037309885025,-0.07931990921497345,-0.09885535389184952,-0.07004343718290329,-0.09027108550071716,-0.06076359748840332,-0.08171606063842773,-0.051445167511701584,-0.07325153797864914,-0.042089834809303284,-0.0647740513086319,-0.03280926123261452,-0.056217558681964874,-0.02369919791817665,-0.04774121567606926,-0.014719998463988304,-0.03951798379421234,-0.005831114947795868,-0.031474702060222626,0.0028619803488254547,-0.023466356098651886,0.011266704648733139,-0.015539433807134628,0.019486743956804276,-0.007796190679073334,0.02764134854078293,-0.0002129673957824707,0.035642001777887344,0.007213525474071503,0.043391402810811996,0.014408908784389496,0.051025353372097015,0.021428555250167847,0.05867929756641388,0.028416655957698822,0.0662369579076767,0.03535858541727066,0.07358866930007935,0.042189568281173706,0.08084963262081146,0.0490066260099411,0.08807537704706192,0.05589109659194946,0.09510941803455353,0.06279647350311279,0.10187757015228271,0.06977587193250656,0.10846224427223206,0.07693607360124588,0.11485867202281952,0.08415903151035309,0.12102552503347397,0.09127787500619888,0.12707127630710602,0.09834423661231995,0.13310644030570984,0.10538395494222641,0.1391477882862091,0.11228538304567337,0.14532488584518433,0.11914981156587601,0.15184150636196136,0.12623929977416992,0.15870630741119385,0.13356147706508636,0.16585108637809753,0.14108172059059143,0.17339038848876953,0.1491435021162033,0.1814194768667221,0.15807709097862244,0.18974897265434265,0.16768202185630798,0.198135644197464,0.17754817008972168,0.20657123625278473,0.18749697506427765,0.2151017040014267,0.1973915696144104,0.22352728247642517,0.20688694715499878,0.2315070927143097,0.21554161608219147,0.23887209594249725,0.22295071184635162,0.24563157558441162,0.22886541485786438,0.25171032547950745,0.23340195417404175,0.2569041848182678,0.23695433139801025,0.261075884103775,0.23977386951446533,0.26421427726745605,0.24187617003917694,0.2663898468017578,0.24339160323143005,0.2677948474884033,0.24464905261993408,0.26866623759269714,0.24582798779010773,0.2691427767276764,0.24681979417800903,0.26940131187438965,0.24747145175933838,0.26977843046188354,0.2477508783340454,0.2705434560775757,0.24775663018226624,0.27185192704200745,0.24776995182037354,0.2739870250225067,0.2481580376625061,0.27716192603111267,0.2491474449634552,0.28118157386779785,0.25096777081489563,0.28582748770713806,0.25415366888046265,0.29126155376434326,0.2592353820800781,0.29756784439086914,0.2661699652671814,0.30439600348472595,0.274442195892334,0.3113973140716553,0.2835386097431183,0.3184615671634674,0.2930457592010498,0.3254229426383972,0.3025587797164917,0.33204150199890137,0.3116576075553894,0.33815014362335205,0.3198394179344177,0.3434916138648987,0.3266984820365906,0.34775760769844055,0.3323238790035248,0.35095351934432983,0.33714330196380615,0.35330039262771606,0.34139373898506165,0.3547760844230652,0.3451768755912781,0.35519939661026,0.34872883558273315,0.354733943939209,0.3521868586540222,0.35391494631767273,0.35551464557647705,0.3531007468700409,0.3588149845600128,0.35216692090034485,0.362111359834671,0.3509524166584015,0.3649575114250183,0.3497481942176819,0.3669162392616272,0.34890446066856384,0.3680737018585205,0.34819650650024414,0.36864179372787476,0.34714847803115845,0.3686122000217438,0.34571465849876404,0.36799123883247375,0.34409332275390625,0.36683329939842224,0.34221574664115906,0.36515533924102783,0.33987826108932495,0.3631545305252075,0.33708736300468445,0.36112385988235474,0.33407649397850037,0.3591340482234955,0.33116063475608826,0.35727792978286743,0.3285318911075592,0.35586118698120117,0.3262489140033722,0.35493436455726624,0.3246261179447174,0.3543103337287903,0.324245810508728,0.3542410731315613,0.3252984285354614,0.35525748133659363,0.3275124430656433,0.35742220282554626,0.3308638334274292,0.3604626953601837,0.33558639883995056,0.3642706573009491,0.34152770042419434,0.3687928318977356,0.34815678000450134,0.37390872836112976,0.3549131751060486,0.3794596493244171,0.36118724942207336,0.3849322199821472,0.3664550185203552,0.3894926607608795,0.3704560697078705,0.39263832569122314,0.37284305691719055,0.3941919207572937,0.3731362521648407,0.39371824264526367,0.3713011145591736,0.39081722497940063,0.36774566769599915,0.3857673704624176,0.36292165517807007,0.3792005181312561,0.35753628611564636,0.37164250016212463,0.35247477889060974,0.3638255000114441,0.34811195731163025,0.3568190634250641,0.34460335969924927,0.35156095027923584,0.342583566904068,0.3486330211162567,0.3424295485019684,0.3483543395996094)\n\
+\n\
+,\n\
+\n\
+new Array(0.3436359763145447,0.3507392704486847,0.3458445370197296,0.35553568601608276,0.349070280790329,0.36218830943107605,0.3529009521007538,0.36989903450012207,0.3567352890968323,0.3776802718639374,0.3602409362792969,0.3845756947994232,0.3624301850795746,0.38984495401382446,0.36204901337623596,0.3930245339870453,0.35958513617515564,0.39386096596717834,0.35623884201049805,0.39222022891044617,0.35106125473976135,0.3883177638053894,0.34256747364997864,0.38292935490608215,0.3323298692703247,0.3768877685070038,0.323260098695755,0.37063145637512207,0.3156992495059967,0.3646821975708008,0.3084883987903595,0.35974499583244324,0.3018919825553894,0.35562121868133545,0.29641395807266235,0.3507556915283203,0.2904132902622223,0.34314075112342834,0.28101786971092224,0.33097949624061584,0.26616284251213074,0.31287649273872375,0.2446533590555191,0.2879803478717804,0.21516236662864685,0.255038857460022,0.17608602344989777,0.21176795661449432,0.12704282999038696,0.15780548751354218,0.07108964771032333,0.09810417890548706,0.014752926304936409,0.040358446538448334,-0.035008858889341354,-0.010328201577067375,-0.07317540794610977,-0.05101863294839859,-0.09570048749446869,-0.07671763747930527,-0.09804818034172058,-0.08093484491109848,-0.0764317587018013,-0.06037058308720589,-0.03042197786271572,-0.01648930460214615,0.03596554324030876,0.0465453676879406,0.11531345546245575,0.12299899756908417,0.1989039182662964,0.20528899133205414,0.27868446707725525,0.28483620285987854,0.34824496507644653,0.3541155457496643,0.40280720591545105,0.40809503197669983,0.43914052844047546,0.4442239999771118,0.45606517791748047,0.46168196201324463,0.4549923837184906,0.4612167477607727,0.43956613540649414,0.4456948935985565,0.41455766558647156,0.41990524530410767,0.3848838806152344,0.3890814185142517,0.35493040084838867,0.35762137174606323,0.32800400257110596,0.3289647400379181,0.30628281831741333,0.3057825565338135,0.291183739900589,0.2896957993507385,0.28327441215515137,0.2809591591358185,0.2818855345249176,0.2787399888038635,0.2854923605918884,0.28177735209465027,0.2925439476966858,0.2886710464954376,0.30161160230636597,0.2977151870727539,0.31119534373283386,0.30709391832351685,0.31999343633651733,0.31554341316223145,0.3271985352039337,0.3224572539329529,0.3323807716369629,0.3273491859436035,0.3353782892227173,0.32981887459754944,0.3363034129142761,0.33001670241355896,0.33541586995124817,0.32849812507629395,0.33304548263549805,0.32565680146217346,0.32961732149124146,0.3217451870441437,0.3255370557308197,0.31720080971717834,0.3211156129837036,0.31249549984931946,0.3166646659374237,0.30782362818717957,0.3124258816242218,0.30318742990493774,0.3084467351436615,0.29864123463630676,0.304767370223999,0.29430586099624634,0.3015163242816925,0.290192186832428,0.29865914583206177,0.28612279891967773,0.2959946393966675,0.28194108605384827,0.29342013597488403,0.27772849798202515,0.2908669412136078,0.273634672164917,0.2881903052330017,0.26963305473327637,0.2853950262069702,0.2656824290752411,0.2825847864151001,0.2619113028049469,0.27963492274284363,0.2584269642829895,0.2764520049095154,0.2552037239074707,0.2733556032180786,0.25225701928138733,0.27060335874557495,0.24962079524993896,0.2679532766342163,0.24718371033668518,0.26519572734832764,0.24481931328773499,0.26249805092811584,0.2424980103969574,0.25986188650131226,0.2400670051574707,0.25692054629325867,0.23722389340400696,0.2534322142601013,0.23384401202201843,0.2493741512298584,0.2300342619419098,0.24467289447784424,0.2258572280406952,0.23934808373451233,0.22128351032733917,0.23365342617034912,0.21636269986629486,0.22778062522411346,0.21126005053520203,0.22179719805717468,0.2061673104763031,0.21593421697616577,0.20118600130081177,0.2105105221271515,0.19625036418437958,0.2056254893541336,0.19125910103321075,0.20119091868400574,0.1862357258796692,0.1970648467540741,0.18117842078208923,0.19303493201732635,0.17590683698654175,0.1889193207025528,0.17028747498989105,0.18464966118335724,0.16439872980117798,0.18007981777191162,0.1582980751991272,0.17496532201766968,0.15188351273536682,0.16928313672542572,0.14509545266628265,0.1632496416568756,0.13801680505275726,0.1569652110338211,0.13074497878551483,0.1503717601299286,0.1233326643705368,0.1435215175151825,0.11582323908805847,0.1365867406129837,0.10827413201332092,0.12966367602348328,0.10077520459890366,0.12275254726409912,0.0934087336063385,0.11584542691707611,0.08619605004787445,0.10892727971076965,0.07917298376560211,0.10195941478013992,0.07243507355451584,0.09491272270679474,0.06601165235042572,0.08778388798236847,0.05983836576342583,0.0805385559797287,0.05387263000011444,0.07305917888879776,0.04803667962551117,0.06523420661687851,0.04212284833192825,0.057080116122961044,0.03594566509127617,0.04865209758281708,0.029429901391267776,0.039905570447444916,0.022460641339421272,0.03080851025879383,0.014893142506480217,0.02146265283226967,0.006716256495565176,0.011982964351773262,-0.001997239887714386,0.0024438141845166683,-0.011165347881615162,-0.007014747243374586,-0.020593587309122086,-0.016242871060967445,-0.030016787350177765,-0.025171050801873207,-0.039254624396562576,-0.03368787094950676,-0.04812806844711304,-0.041668251156806946,-0.056405309587717056,-0.04917296767234802,-0.0640219897031784,-0.056338705122470856,-0.07114075869321823,-0.06319992244243622,-0.07793767005205154,-0.06988830864429474,-0.08454476296901703,-0.07669203728437424,-0.09115692973136902,-0.08373631536960602,-0.09804609417915344,-0.09103355556726456,-0.10550685971975327,-0.09883319586515427,-0.11369960010051727,-0.10741837322711945,-0.12249250710010529,-0.11673317849636078,-0.1316787600517273,-0.1266242116689682,-0.14125868678092957,-0.1370970606803894,-0.15116144716739655,-0.1480569839477539,-0.16098646819591522,-0.1592252403497696,-0.1704384982585907,-0.17041613161563873,-0.17959284782409668,-0.18150544166564941,-0.18844667077064514,-0.19222383201122284,-0.1967857927083969,-0.20232486724853516,-0.20461004972457886,-0.21179530024528503,-0.21210674941539764,-0.2207169234752655,-0.21930965781211853,-0.22912082076072693,-0.2262527346611023,-0.23705273866653442,-0.23312364518642426,-0.244648739695549,-0.23997023701667786,-0.25211477279663086,-0.24670550227165222,-0.2596213221549988,-0.2534589469432831,-0.2672247886657715,-0.2604459822177887,-0.27498531341552734,-0.26765093207359314,-0.2830657362937927,-0.2750389277935028,-0.29154103994369507,-0.2827794849872589,-0.3002829849720001,-0.29098790884017944,-0.3091878592967987,-0.29958197474479675,-0.31826746463775635,-0.3085162043571472,-0.32745054364204407,-0.31784147024154663,-0.336588978767395,-0.32749396562576294,-0.34562060236930847,-0.3372446596622467,-0.35447514057159424,-0.3468747138977051,-0.36298662424087524,-0.35627293586730957,-0.3710893392562866,-0.3653349280357361,-0.37888044118881226,-0.3738906681537628,-0.3864019513130188,-0.38183271884918213,-0.3935663104057312,-0.38917502760887146,-0.40029746294021606,-0.39585989713668823,-0.4066075086593628,-0.40175122022628784,-0.4125635325908661,-0.4069103002548218,-0.41820240020751953,-0.41154420375823975,-0.42346662282943726,-0.415698766708374,-0.4283090829849243,-0.4193916618824005,-0.4328407943248749,-0.42285987734794617,-0.4372495412826538,-0.42631256580352783,-0.4416581094264984,-0.4297977387905121,-0.4461841285228729,-0.4335118532180786,-0.451017290353775,-0.43769797682762146,-0.4563363194465637,-0.4422340989112854,-0.46220043301582336,-0.4469219446182251,-0.4685121476650238,-0.4519149363040924,-0.4750834107398987,-0.4572798013687134,-0.4817622900009155,-0.46262893080711365,-0.4883791208267212,-0.4676629602909088,-0.4945853352546692,-0.4724624752998352,-0.5000262260437012,-0.47698476910591125,-0.5046371221542358,-0.4809568226337433,-0.5084781646728516,-0.48434996604919434,-0.5114843249320984,-0.4873488247394562,-0.5136945247650146,-0.48995310068130493,-0.5154111385345459,-0.49210289120674133,-0.516903281211853,-0.4939757287502289,-0.5183118581771851,-0.4957995116710663,-0.5198625922203064,-0.4976169764995575,-0.521746039390564,-0.49945729970932007,-0.5239163041114807,-0.5014687180519104,-0.5263248682022095,-0.5037275552749634,-0.5290380120277405,-0.5061351656913757,-0.5319313406944275,-0.5085968375205994,-0.5346949696540833,-0.5110976099967957,-0.5372004508972168,-0.5135430693626404,-0.5394700765609741,-0.5157400369644165,-0.5414009094238281,-0.5175819993019104,-0.542862057685852,-0.5190489888191223,-0.5438710451126099,-0.5200487375259399,-0.5444741249084473,-0.5204949378967285,-0.5446802377700806,-0.520462155342102,-0.544552206993103,-0.5200443267822266,-0.5441441535949707,-0.5192134380340576,-0.5434141755104065,-0.5179857611656189,-0.542346179485321,-0.5164980292320251,-0.541022777557373,-0.5148156881332397,-0.5394992828369141,-0.5129062533378601,-0.5377427935600281,-0.5108166337013245,-0.5357125997543335,-0.5086457133293152,-0.5334264039993286,-0.5064231157302856,-0.5309809446334839,-0.5041735768318176,-0.5284898281097412,-0.501957893371582,-0.5259407162666321,-0.4997645318508148,-0.5232195854187012,-0.49752259254455566,-0.5203320384025574,-0.4952189326286316,-0.5174044966697693,-0.4928598403930664,-0.5144237279891968,-0.49038657546043396,-0.5112305283546448,-0.48774129152297974,-0.5077933073043823,-0.48493388295173645,-0.5042111873626709,-0.4819803535938263,-0.5004695653915405,-0.47884082794189453,-0.49646249413490295,-0.4754530191421509,-0.4921858608722687,-0.47181081771850586,-0.48766329884529114,-0.4679860472679138,-0.4828302264213562,-0.4640211760997772,-0.4776991307735443,-0.45984530448913574,-0.4724256694316864,-0.4554009437561035,-0.4670521914958954,-0.45078036189079285,-0.46145713329315186,-0.44608256220817566,-0.45564666390419006,-0.4412424862384796,-0.4497779309749603,-0.43617334961891174,-0.44387221336364746,-0.43095916509628296,-0.4378197193145752,-0.4257330596446991,-0.43161824345588684,-0.4204648733139038,-0.4253285229206085,-0.4150194823741913,-0.4189133048057556,-0.4093530774116516,-0.41232648491859436,-0.40354013442993164,-0.40559619665145874,-0.39763739705085754,-0.3987126648426056,-0.3915990889072418,-0.3916330635547638,-0.3853526711463928,-0.38440752029418945,-0.3789190351963043,-0.37710270285606384,-0.37238672375679016,-0.36967653036117554,-0.36577948927879333,-0.3620924651622772,-0.3590465188026428,-0.35440847277641296,-0.3521696627140045,-0.3466413915157318,-0.3451785445213318,-0.3387884497642517,-0.33814793825149536,-0.3308127522468567,-0.33104076981544495,-0.3227776885032654,-0.32384273409843445,-0.31471219658851624,-0.31652259826660156,-0.30657118558883667,-0.3090512454509735,-0.2983539402484894,-0.30152422189712524,-0.2901151776313782,-0.2940562069416046,-0.2818600535392761,-0.2865472733974457,-0.273529976606369,-0.2788337171077728,-0.2650870978832245,-0.27100440859794617,-0.2565560042858124,-0.2632352113723755,-0.2479782998561859,-0.25543200969696045,-0.2393481284379959,-0.24740611016750336,-0.2306208461523056,-0.23924009501934052,-0.22179831564426422,-0.23113234341144562,-0.21295014023780823,-0.22305995225906372,-0.20411615073680878,-0.21488721668720245,-0.19526320695877075,-0.20662233233451843,-0.1863834410905838,-0.19836333394050598,-0.17753858864307404,-0.19014336168766022,-0.16875573992729187,-0.18192589282989502,-0.1599741280078888,-0.17364239692687988,-0.15114164352416992,-0.16524434089660645,-0.14228147268295288,-0.15676435828208923,-0.13342416286468506,-0.1482381820678711,-0.12454365193843842,-0.13959383964538574,-0.11561007052659988,-0.13077281415462494,-0.10667137056589127,-0.12187683582305908,-0.09781067073345184,-0.11302471160888672,-0.08900970220565796,-0.10418687015771866,-0.08015486598014832,-0.09531546384096146,-0.07122906297445297,-0.08648769557476044,-0.06236971542239189,-0.07779493927955627,-0.05368009954690933,-0.0692458227276802,-0.04515216499567032,-0.0608653724193573,-0.036801550537347794,-0.05274923890829086,-0.028654571622610092,-0.04495047777891159,-0.020618632435798645,-0.03741208463907242,-0.012603923678398132,-0.03005238249897957,-0.004660770297050476,-0.022837206721305847,0.0032375603914260864,-0.01571357250213623,0.011317364871501923,-0.008542641997337341,0.01970715820789337,-0.0011973455548286438,0.028333887457847595,0.0063246265053749084,0.0372132882475853,0.014011144638061523,0.04643452912569046,0.021950438618659973,0.05588231235742569,0.03010193258523941,0.06538072973489761,0.03810767084360123,0.07491307705640793,0.04572763293981552,0.08436762541532516,0.05330805480480194,0.09348076581954956,0.06125878542661667,0.10222368687391281,0.06920412927865982,0.11063101887702942,0.07641875743865967,0.11829406023025513,0.08306580036878586,0.1248847246170044,0.09005635231733322,0.1309305727481842,0.09756209701299667,0.13703811168670654,0.10473161935806274,0.14279481768608093,0.11117547750473022,0.1475921869277954,0.11762325465679169,0.15196004509925842,0.1246354728937149,0.15684883296489716,0.1316998451948166,0.1621231585741043,0.1381763368844986,0.1669425070285797,0.1442692130804062,0.17123211920261383,0.15050184726715088,0.17575912177562714,0.15688656270503998,0.18093281984329224,0.16307076811790466,0.18630343675613403,0.16888675093650818,0.19129076600074768,0.17447316646575928,0.1959274560213089,0.1800549030303955,0.2006806880235672,0.18569731712341309,0.20578977465629578,0.1912769377231598,0.21109235286712646,0.19677548110485077,0.21643885970115662,0.20245715975761414,0.22195398807525635,0.20854544639587402,0.22783887386322021,0.21492406725883484,0.23414868116378784,0.22138294577598572,0.2408096045255661,0.22791072726249695,0.24772141873836517,0.2345348745584488,0.2548198699951172,0.24109560251235962,0.26203206181526184,0.24734240770339966,0.26913875341415405,0.2531210780143738,0.2757990062236786,0.25837716460227966,0.2817825675010681,0.26302066445350647,0.28703317046165466,0.26686960458755493,0.2914980947971344,0.2698267996311188,0.2951238453388214,0.27205488085746765,0.29802095890045166,0.27380669116973877,0.3004281520843506,0.27521419525146484,0.30253762006759644,0.2764592170715332,0.3044890761375427,0.2779090106487274,0.30645057559013367,0.27983519434928894,0.3086082339286804,0.2822890281677246,0.31110501289367676,0.28536826372146606,0.31396785378456116,0.28918546438217163,0.3170616328716278,0.29356107115745544,0.3201717436313629,0.29820433259010315,0.3231307864189148,0.3030858337879181,0.3258450925350189,0.308247447013855,0.328314870595932,0.31352299451828003,0.33062970638275146,0.31873950362205505,0.33277279138565063,0.32381922006607056,0.33449500799179077,0.3285626173019409,0.3355770409107208,0.3327631652355194,0.33607345819473267,0.3364887833595276,0.3361404836177826,0.33987191319465637,0.3358767628669739,0.3428524136543274,0.3354545533657074,0.3454176187515259,0.3351161479949951,0.34774285554885864,0.33497175574302673,0.3499442934989929,0.33502712845802307,0.35206130146980286,0.33532264828681946,0.3542133569717407,0.3358570337295532,0.3563973605632782,0.33655038475990295,0.35835447907447815,0.33737021684646606,0.35992562770843506,0.3382839858531952,0.36120814085006714,0.3391556143760681,0.3622129559516907,0.3399306535720825,0.3627970814704895,0.340738445520401,0.36299434304237366,0.34162911772727966,0.36302265524864197,0.34250450134277344,0.3629917502403259,0.34339553117752075,0.36288395524024963,0.3444414734840393,0.36270594596862793,0.34560033679008484,0.3624858260154724,0.34673959016799927,0.3622548580169678,0.3479076623916626,0.3620994985103607,0.349197655916214,0.3621264100074768,0.3505156636238098,0.36238744854927063,0.3517214357852936,0.3628728985786438,0.35284072160720825,0.3635386526584625,0.3538372218608856,0.3641984164714813,0.354625403881073,0.36477917432785034,0.35517418384552,0.3654242753982544,0.35551297664642334,0.3663182854652405,0.3556709885597229,0.36749815940856934,0.3556704521179199,0.3688485622406006,0.35551950335502625,0.37021782994270325,0.3551963269710541,0.3715476989746094,0.3546697497367859,0.37288153171539307,0.35392022132873535,0.37423309683799744,0.3529627323150635,0.37555593252182007,0.3518728017807007,0.37683695554733276,0.3507084548473358,0.3780277371406555,0.34938400983810425,0.3789185583591461,0.34771719574928284,0.3792995512485504,0.3455829322338104,0.3791392147541046,0.3429500460624695,0.37842699885368347,0.33985161781311035,0.3770616948604584,0.3363795876502991,0.37503236532211304,0.33264100551605225,0.3724556863307953,0.32876861095428467,0.3694303035736084,0.3250260651111603,0.36613425612449646,0.32172974944114685,0.3629182279109955,0.31904760003089905,0.36003610491752625,0.3171144723892212,0.3575168550014496,0.3162133991718292,0.3554316759109497,0.31647419929504395,0.35392361879348755,0.31762418150901794,0.35296547412872314,0.31939736008644104,0.3524459898471832,0.32169878482818604,0.3522231876850128,0.32382136583328247,0.3515649437904358,0.323943555355072,0.34879955649375916,0.31993407011032104,0.3419891595840454,0.31043753027915955,0.3298355042934418,0.29507070779800415,0.3119099736213684,0.27397388219833374,0.28838664293289185,0.24728214740753174,0.2595595121383667,0.21489554643630981,0.2254326194524765,0.17702044546604156,0.1861249804496765,0.13509336113929749,0.14292919635772705,0.09184535592794418,0.0985659807920456,0.05040176957845688,0.05621499568223953,0.01354043185710907,0.018598206341266632,-0.016510628163814545,-0.012152232229709625,-0.03795430064201355,-0.03417684882879257,-0.048723407089710236,-0.045258983969688416,-0.045718543231487274,-0.04232113063335419,-0.025622978806495667,-0.022208139300346375,0.012788698077201843,0.016318827867507935,0.067243292927742,0.07123502343893051,0.13267022371292114,0.13764043152332306,0.20275083184242249,0.209126278758049,0.27113276720046997,0.27916431427001953,0.33227863907814026,0.3421016037464142,0.38191530108451843,0.3935193717479706,0.41712698340415955,0.4302797317504883,0.4366118311882019,0.45090678334236145,0.4410606920719147,0.45601534843444824,0.4329354763031006,0.44800302386283875,0.4156544506549835,0.43021994829177856,0.39290153980255127,0.40635135769844055,0.36821553111076355,0.3800208568572998,0.3446190655231476,0.3543797731399536,0.32438135147094727,0.3318696916103363,0.30896732211112976,0.31416574120521545,0.2989675998687744,0.302045077085495,0.29409757256507874,0.2953417897224426,0.29348260164260864,0.29323530197143555,0.2960135340690613,0.2946128845214844,0.3005402088165283,0.2982521057128906,0.3060187101364136,0.3029651343822479,0.31161439418792725,0.30772703886032104,0.31662559509277344,0.31167834997177124,0.32043734192848206,0.31415697932243347,0.3227097988128662,0.31484824419021606,0.32350826263427734,0.313800573348999,0.3231211006641388,0.3112623393535614,0.3218221068382263,0.3076017498970032,0.319834440946579,0.3033114969730377,0.31740814447402954,0.2989150285720825,0.31485068798065186,0.2948548495769501,0.3124483525753021,0.2914617955684662,0.31033024191856384,0.2889053225517273,0.3084651231765747,0.28716087341308594,0.3068024814128876,0.2860954999923706,0.3052840530872345,0.2855125665664673,0.30369892716407776,0.28507593274116516,0.30171483755111694,0.2843456566333771,0.2990935146808624,0.2829536199569702,0.295750230550766,0.28065529465675354,0.29166868329048157,0.2772802710533142,0.2869117259979248,0.2727862298488617,0.28164681792259216,0.2673061490058899,0.2760713994503021,0.2610625922679901,0.27038443088531494,0.25432145595550537,0.26479262113571167,0.24741120636463165,0.2594027817249298,0.24062642455101013,0.25418317317962646,0.23414039611816406,0.24914424121379852,0.22811943292617798,0.24441100656986237,0.2227998822927475,0.2400449812412262,0.21833443641662598,0.2359958440065384,0.2146882712841034,0.23225922882556915,0.2117394655942917,0.2288622409105301,0.20933091640472412,0.22570477426052094,0.20720435678958893,0.22260309755802155,0.20500941574573517,0.21942651271820068,0.2023804634809494,0.21604958176612854,0.1989881694316864,0.2122812718153,0.1946185678243637,0.20795966684818268,0.18923088908195496,0.20303267240524292,0.1828848272562027,0.19751881062984467,0.1756948083639145,0.1914731115102768,0.16792836785316467,0.18498684465885162,0.1600073128938675,0.17818424105644226,0.15231330692768097,0.17123626172542572,0.14508582651615143,0.16434428095817566,0.13850338757038116,0.15764987468719482,0.1326969563961029,0.1512037068605423,0.12764720618724823,0.14503470063209534,0.12316109985113144,0.13916251063346863,0.11896595358848572,0.13355253636837006,0.11481080204248428,0.12815110385417938,0.11050844192504883,0.12291742116212845,0.10589440912008286,0.11774105578660965,0.10077223181724548,0.11239765584468842,0.09496051073074341,0.10665403306484222,0.08838188648223877,0.1003800556063652,0.08106671273708344,0.09346766024827957,0.07306445389986038,0.08584439754486084,0.06449486315250397,0.07751166075468063,0.0555633008480072,0.06856295466423035,0.046484850347042084,0.059176962822675705,0.03744354099035263,0.04958879575133324,0.02862597443163395,0.0400613471865654,0.020237747579813004,0.03086978569626808,0.012458212673664093,0.02223091758787632,0.0053418781608343124,0.01419978216290474,-0.001248285174369812,0.006708775646984577,-0.0075348149985075,-0.0002906918525695801,-0.013653511181473732,-0.006836937740445137,-0.01968599110841751,-0.013062719255685806,-0.02580053173005581,-0.019140519201755524,-0.03219126909971237,-0.025186140090227127,-0.038921840488910675,-0.03132248297333717,-0.04595652595162392,-0.03771370276808739,-0.05326448380947113,-0.044453129172325134,-0.060802243649959564,-0.05154811590909958,-0.06848271191120148,-0.05902509018778801,-0.07619261741638184,-0.06691370159387589,-0.08379656076431274,-0.0751795619726181,-0.09120871871709824,-0.08378754556179047,-0.0985087901353836,-0.09274525940418243,-0.10586851090192795,-0.10203513503074646,-0.11339233070611954,-0.1116054505109787,-0.12117552012205124,-0.12139799445867538,-0.12939989566802979,-0.1313091218471527,-0.1381993591785431,-0.1412314921617508,-0.147567480802536,-0.1511681228876114,-0.15748564898967743,-0.16116419434547424,-0.16794219613075256,-0.1711844801902771,-0.178798109292984,-0.18121357262134552,-0.18982529640197754,-0.1913289576768875,-0.2008262723684311,-0.20152945816516876,-0.21157817542552948,-0.21168290078639984,-0.22180645167827606,-0.22168974578380585,-0.2313070297241211,-0.23146215081214905,-0.23995310068130493,-0.24079033732414246,-0.24763138592243195,-0.24947047233581543,-0.25434255599975586,-0.2574461102485657,-0.2602357864379883,-0.26465606689453125,-0.2654263377189636,-0.2709711790084839,-0.26997777819633484,-0.27640077471733093,-0.2740896940231323,-0.28114989399909973,-0.27805638313293457,-0.2854735553264618,-0.28208595514297485,-0.2896733283996582,-0.2863636612892151,-0.2941269874572754,-0.2911421060562134,-0.299156129360199,-0.2965962886810303,-0.30497097969055176,-0.30276089906692505,-0.31174346804618835,-0.3096446990966797,-0.3195430338382721,-0.3172059655189514,-0.32825422286987305,-0.3252774477005005,-0.3376973867416382,-0.33369049429893494,-0.34769386053085327,-0.3423401415348053,-0.3579603135585785,-0.3510512709617615,-0.3681504428386688,-0.3595849275588989,-0.37799546122550964,-0.36778882145881653,-0.38724061846733093,-0.3755456507205963,-0.3955906927585602,-0.3826776444911957,-0.40288683772087097,-0.3890700340270996,-0.4091619551181793,-0.3947434425354004,-0.41446515917778015,-0.3997305929660797,-0.4188607931137085,-0.40407246351242065,-0.4225817620754242,-0.4079211950302124,-0.42594799399375916,-0.4114592969417572,-0.42920154333114624,-0.41479772329330444,-0.4325565695762634,-0.41806554794311523,-0.4362483620643616,-0.4214438498020172,-0.4404276907444,-0.4250420928001404,-0.4451479911804199,-0.42889899015426636,-0.45045268535614014,-0.43308261036872864,-0.4563312530517578,-0.4376424252986908,-0.4626504182815552,-0.44253748655319214,-0.4692232012748718,-0.44769778847694397,-0.47585803270339966,-0.45304206013679504,-0.4823276400566101,-0.4584178030490875,-0.4884132742881775,-0.4636516273021698,-0.493976354598999,-0.4686329960823059,-0.4989304542541504,-0.47326552867889404,-0.5032305717468262,-0.4774376451969147,-0.5069249272346497,-0.4811008870601654,-0.5101109147071838,-0.4842684268951416,-0.5128448009490967,-0.48692530393600464,-0.5151772499084473,-0.489045113325119,-0.5172102451324463,-0.4906660318374634,-0.5190343856811523,-0.4918709993362427,-0.5206844806671143,-0.4927436411380768,-0.522188127040863,-0.49338048696517944,-0.5235728621482849,-0.493878036737442,-0.524824857711792,-0.49429672956466675,-0.5259182453155518,-0.4946802854537964,-0.5268622040748596,-0.4950801134109497,-0.5276737809181213,-0.4955251216888428,-0.5283466577529907,-0.4960111081600189,-0.5288761854171753,-0.4965241551399231,-0.5292695164680481,-0.49703070521354675,-0.5295256972312927,-0.4974631071090698,-0.5296366214752197,-0.49775710701942444,-0.5296010971069336,-0.4978855848312378,-0.5294173359870911,-0.4978395700454712,-0.5290791988372803,-0.49760928750038147,-0.5285782217979431,-0.4971923828125,-0.5278950333595276,-0.4965905249118805,-0.5270002484321594,-0.4957980513572693,-0.5258727073669434,-0.4948074221611023,-0.5245072245597839,-0.4936217963695526,-0.5229060649871826,-0.49225279688835144,-0.5210745334625244,-0.49071353673934937,-0.5190219283103943,-0.489006906747818,-0.5167518258094788,-0.4871183931827545,-0.5142611265182495,-0.4850262403488159,-0.5115514397621155,-0.4827241599559784,-0.5086349248886108,-0.4802265465259552,-0.5055283308029175,-0.47755685448646545,-0.5022464990615845,-0.47473302483558655,-0.4987978935241699,-0.4717614948749542,-0.49517983198165894,-0.4686356782913208,-0.4913797676563263,-0.4653436839580536,-0.487384557723999,-0.4618803858757019,-0.4831897020339966,-0.4582536518573761,-0.47879987955093384,-0.4544786214828491,-0.4742203950881958,-0.4505634307861328,-0.46944403648376465,-0.4464946985244751,-0.46444201469421387,-0.44223523139953613,-0.4591920077800751,-0.43775704503059387,-0.45380234718322754,-0.4331594705581665,-0.4482576847076416,-0.4284302294254303,-0.44253525137901306,-0.42354726791381836,-0.4366333782672882,-0.4185048043727875,-0.43056467175483704,-0.4133080244064331,-0.42434409260749817,-0.4079691767692566,-0.41797903180122375,-0.4025009870529175,-0.41146841645240784,-0.3969133198261261,-0.40480536222457886,-0.3912079930305481,-0.39798280596733093,-0.3853793740272522,-0.3909948766231537,-0.37941497564315796,-0.3838372826576233,-0.3733018636703491,-0.3765070140361786,-0.3670300245285034,-0.3690025210380554,-0.3605952560901642,-0.36132562160491943,-0.35399699211120605,-0.3534850478172302,-0.347239226102829,-0.3455008566379547,-0.3403315842151642,-0.3374013602733612,-0.3332901895046234,-0.3292185664176941,-0.32613515853881836,-0.3209799826145172,-0.31888967752456665,-0.312707781791687,-0.3115767538547516,-0.3044171929359436,-0.30421483516693115,-0.2961137294769287,-0.2968105673789978,-0.287792831659317,-0.28936243057250977,-0.2794452905654907,-0.2818763852119446,-0.2710641622543335,-0.2743810713291168,-0.26264554262161255,-0.26692333817481995,-0.25418442487716675,-0.25954583287239075,-0.2456752061843872,-0.2522677481174469,-0.23711907863616943,-0.24508249759674072,-0.22852902114391327,-0.2379646897315979,-0.21992439031600952,-0.23087120056152344,-0.21132147312164307,-0.2237369269132614,-0.2027295082807541,-0.21647736430168152,-0.1941550076007843,-0.20900630950927734,-0.18560859560966492,-0.2012595534324646,-0.17710696160793304,-0.1932099461555481,-0.16866502165794373,-0.18486526608467102,-0.16027802228927612,-0.17625293135643005,-0.15190652012825012,-0.16740408539772034,-0.14347873628139496,-0.1583499312400818,-0.13491913676261902,-0.1491309106349945,-0.1261826902627945,-0.13980576395988464,-0.11727005243301392,-0.13044916093349457,-0.10821488499641418,-0.12113991379737854,-0.09906162321567535,-0.11194673925638199,-0.08985001593828201,-0.10291466861963272,-0.08060862869024277,-0.09405313432216644,-0.07135115563869476,-0.08533615618944168,-0.06207706779241562,-0.07672415673732758,-0.0527779683470726,-0.06819739192724228,-0.04344412684440613,-0.0597696527838707,-0.03406934440135956,-0.05147016420960426,-0.024658385664224625,-0.04331723600625992,-0.015245087444782257,-0.035315826535224915,-0.0059119537472724915,-0.02747313305735588,0.0032121874392032623,-0.01980186440050602,0.011983063071966171,-0.012294502928853035,0.020283903926610947,-0.004899730905890465,0.02805602177977562,0.0024668164551258087,0.035305388271808624,0.009879233315587044,0.04209442436695099,0.017361540347337723,0.048530109226703644,0.024878814816474915,0.054752327501773834,0.03234849125146866,0.060921311378479004,0.039657074958086014,0.06720253825187683,0.04667987674474716,0.0737491250038147,0.053318336606025696,0.08068063110113144,0.05954745411872864,0.08805586397647858,0.06543652713298798,0.09584701061248779,0.07112129032611847,0.10393153131008148,0.0767485499382019,0.11212043464183807,0.08244599401950836,0.12021806091070175,0.08833739906549454,0.1280810832977295,0.09456155449151993,0.13564449548721313,0.10125024616718292,0.1429145187139511,0.10847346484661102,0.14995212852954865,0.11621200293302536,0.15686100721359253,0.12438612431287766,0.1637716144323349,0.13290725648403168,0.17080920934677124,0.1417008340358734,0.17805525660514832,0.15069368481636047,0.18551437556743622,0.15979520976543427,0.19309350848197937,0.16889125108718872,0.20060132443904877,0.1778457760810852,0.20778822898864746,0.1865084320306778,0.2144312858581543,0.1947418451309204,0.22041860222816467,0.20246091485023499,0.22577153146266937,0.20964892208576202,0.2305883765220642,0.21632149815559387,0.23496666550636292,0.22246390581130981,0.23896241188049316,0.22799497842788696,0.24260258674621582,0.23279574513435364,0.24591892957687378,0.23678524792194366,0.248972088098526,0.23999035358428955,0.2518520653247833,0.24255631864070892,0.2546519935131073,0.2446899116039276,0.2574346661567688,0.24658453464508057,0.26022133231163025,0.24839113652706146,0.26301535964012146,0.25023961067199707,0.2658284306526184,0.2522519826889038,0.268677294254303,0.25450819730758667,0.2715691924095154,0.25701192021369934,0.27451860904693604,0.2597254514694214,0.2775866389274597,0.2626533806324005,0.2808864414691925,0.2658756375312805,0.28452950716018677,0.2694924473762512,0.28857049345970154,0.27355408668518066,0.29300549626350403,0.2780616283416748,0.29779940843582153,0.28300735354423523,0.3028869032859802,0.28836995363235474,0.3081473112106323,0.2940548062324524,0.3134058713912964,0.2998628318309784,0.3184770941734314,0.30553561449050903,0.3232085108757019,0.31082984805107117,0.3274981677532196,0.3155636787414551,0.33131009340286255,0.3196343183517456,0.334693044424057,0.3230331242084503,0.3377578556537628,0.3258383572101593,0.34059277176856995,0.3281615078449249,0.3431852161884308,0.3300800919532776,0.3454265296459198,0.3316163420677185,0.34718337655067444,0.33276650309562683,0.34835436940193176,0.33353832364082336,0.3488852083683014,0.33397525548934937,0.34878212213516235,0.33417609333992004,0.34813082218170166,0.3342997133731842,0.3470771014690399,0.33452531695365906,0.3457757234573364,0.3350061774253845,0.34440669417381287,0.33591654896736145,0.34304994344711304,0.3373476266860962,0.3417830169200897,0.3393924832344055,0.34067779779434204,0.34211084246635437,0.33976149559020996,0.3454728424549103,0.3390282690525055,0.3493778705596924,0.33848339319229126,0.3537086248397827,0.33814239501953125,0.35832053422927856,0.33798927068710327,0.36298319697380066,0.3379756510257721,0.367387592792511,0.33807292580604553,0.37124550342559814,0.33829233050346375,0.37436410784721375,0.3386392295360565,0.37662485241889954,0.3390907347202301,0.3779562711715698,0.3396499454975128,0.3783873915672302,0.34038105607032776,0.3781013786792755,0.3413267135620117,0.37735795974731445,0.3423877954483032,0.3763378858566284,0.3433307409286499,0.3750898241996765,0.34391772747039795,0.37361714243888855,0.3439900279045105,0.3719516694545746,0.3434370756149292,0.37012267112731934,0.34218382835388184,0.36813002824783325,0.3402870297431946,0.3660232126712799,0.3380109965801239,0.36398354172706604,0.3357272148132324,0.36226099729537964,0.33372917771339417,0.3610217273235321,0.3321700394153595,0.36028921604156494,0.3311302959918976,0.36000531911849976,0.33064302802085876,0.36006680130958557,0.3306368291378021,0.3602849245071411,0.33094003796577454,0.36038947105407715,0.3313939571380615,0.36014264822006226,0.3319329023361206,0.3594413101673126,0.33255091309547424,0.3583035469055176,0.333262175321579,0.35682225227355957,0.33412057161331177,0.35518160462379456,0.33519402146339417,0.3536582589149475,0.33643603324890137,0.35249993205070496,0.33761170506477356,0.3517909646034241,0.338399201631546,0.3514852523803711,0.3385346829891205,0.35154107213020325,0.3378342092037201,0.35194092988967896,0.3361801505088806,0.35261058807373047,0.3336349129676819,0.35345658659935,0.3305266201496124,0.35447537899017334,0.32715994119644165,0.3555591106414795,0.32322508096694946,0.3559531271457672,0.3175520896911621,0.3540116250514984,0.3086777627468109,0.3478134274482727,0.2957591712474823,0.33618342876434326,0.2788720726966858,0.31906312704086304,0.25848230719566345,0.29696816205978394,0.23497503995895386,0.2704699635505676,0.20897898077964783,0.24048924446105957,0.18193909525871277,0.20885144174098969,0.1558382213115692,0.17798171937465668,0.13207562267780304,0.14971758425235748,0.11074550449848175,0.12449001520872116,0.09111859649419785,0.10174734145402908,0.07264640182256699,0.0810067430138588,0.055400654673576355,0.06237410008907318,0.03992924839258194,0.04639582708477974,0.02733016386628151,0.034069087356328964,0.019738657400012016,0.027350082993507385,0.020428039133548737,0.02936420403420925,0.03283391892910004,0.04347808286547661,0.058930449187755585,0.0716032087802887,0.09811178594827652,0.11300875246524811,0.14728772640228271,0.1644417643547058,0.20188573002815247,0.2211862951517105,0.25695711374282837,0.27817416191101074,0.30791592597961426,0.33069124817848206,0.350985586643219,0.3748006820678711,0.3835350275039673,0.40769463777542114,0.40427765250205994,0.4279574751853943,0.4132527709007263,0.4356182813644409,0.41165298223495483,0.43197256326675415,0.4015686511993408,0.41925567388534546,0.38561078906059265,0.4002455770969391,0.366449773311615,0.37785640358924866,0.34647783637046814,0.3547900319099426,0.3276962637901306,0.3333113193511963,0.3116696774959564,0.3151399791240692,0.29941827058792114,0.3013957142829895,0.2913617491722107,0.2925622761249542,0.2874203622341156,0.28850555419921875,0.2871525287628174,0.2885909676551819,0.2898179292678833,0.29186418652534485,0.29446321725845337,0.297207772731781,0.30010247230529785,0.3034416735172272,0.3058544397354126,0.30943411588668823,0.3109593391418457,0.314269483089447,0.31481796503067017,0.31740063428878784,0.3171224594116211,0.3186621069908142,0.3178839385509491,0.3181406259536743,0.31725195050239563,0.316037118434906,0.31534016132354736,0.31262126564979553,0.31226426362991333,0.3082268536090851,0.308246910572052,0.30319613218307495,0.3035838305950165,0.29779696464538574,0.2985372245311737,0.29221609234809875,0.29333794116973877,0.2866310179233551,0.2882595360279083,0.281252384185791,0.28361350297927856,0.27627500891685486,0.27966001629829407,0.2718202471733093,0.27655261754989624,0.2679551839828491,0.2743443250656128,0.26474589109420776,0.2729955017566681,0.26223862171173096,0.27235203981399536,0.2603779137134552,0.2721307873725891,0.2589706778526306,0.2719634175300598,0.2577463686466217,0.27150285243988037,0.2564413845539093,0.27051520347595215,0.25483351945877075,0.26887375116348267,0.2527434229850769,0.26650017499923706,0.25004786252975464,0.2633804380893707,0.2466958910226822,0.25963321328163147,0.2426961213350296,0.2554643154144287,0.23809194564819336,0.2510066032409668,0.23295894265174866,0.24626436829566956,0.227402463555336,0.24122701585292816,0.2215176224708557,0.23593056201934814,0.2153458595275879,0.23035825788974762,0.20890077948570251,0.2243967056274414,0.20224258303642273,0.21798449754714966,0.19549128413200378,0.2112288475036621,0.1887451559305191,0.20431013405323029,0.18202441930770874,0.19738520681858063,0.17536643147468567,0.19055110216140747,0.16883938014507294,0.1839984655380249,0.16257824003696442,0.17794819176197052,0.15667736530303955,0.1724846512079239,0.15111711621284485,0.16753928363323212,0.14582769572734833,0.1630040556192398,0.14079080522060394,0.1587768942117691,0.13602802157402039,0.15470734238624573,0.13150058686733246,0.1505787968635559,0.1270667314529419,0.1461588740348816,0.12255257368087769,0.14124834537506104,0.11782138049602509,0.1357063204050064,0.1127522885799408,0.12947916984558105,0.10719695687294006,0.12260617315769196,0.10102201998233795,0.11518053710460663,0.09419147670269012,0.1073247492313385,0.08678228408098221,0.09920886158943176,0.07892881333827972,0.09102530777454376,0.07078107446432114,0.08291636407375336,0.06251612305641174,0.07497084140777588,0.054358579218387604,0.06728880852460861,0.0465414822101593,0.05996242165565491,0.03921813145279884,0.05297655612230301,0.03241787850856781,0.046202197670936584,0.026083573698997498,0.03949197754263878,0.020098615437746048,0.03272058069705963,0.01425711065530777,0.025761678814888,0.0082787424325943,0.01850035786628723,0.0019084513187408447,0.010851874947547913,-0.005016744136810303,0.0027487576007843018,-0.01258590817451477,-0.005826480686664581,-0.020820386707782745,-0.014778167009353638,-0.02963588386774063,-0.023947954177856445,-0.03883322328329086,-0.03323911130428314,-0.04814644157886505,-0.04261285811662674,-0.05732439458370209,-0.05197104811668396,-0.06621380895376205,-0.061148837208747864,-0.07475987076759338,-0.07004342973232269,-0.0829121470451355,-0.07866489887237549,-0.09059935808181763,-0.08702351152896881,-0.0978403389453888,-0.0950472503900528,-0.10478620231151581,-0.10268557071685791,-0.1115979254245758,-0.11004021763801575,-0.11836123466491699,-0.11728629469871521,-0.1251428872346878,-0.12451077997684479,-0.1320313811302185,-0.1317625343799591,-0.13910743594169617,-0.1392054706811905,-0.14642347395420074,-0.1470346599817276,-0.1539798080921173,-0.15527844429016113,-0.16170451045036316,-0.16384781897068024,-0.16952913999557495,-0.17271344363689423,-0.17747634649276733,-0.181866854429245,-0.18558655679225922,-0.19120028614997864,-0.1938110888004303,-0.20056191086769104,-0.20207038521766663,-0.20982769131660461,-0.21033170819282532,-0.21886520087718964,-0.21855482459068298,-0.2275872528553009,-0.22667238116264343,-0.2360503226518631,-0.23466581106185913,-0.24435371160507202,-0.24255190789699554,-0.2525116801261902,-0.2503094971179962,-0.26056379079818726,-0.25791803002357483,-0.2686459720134735,-0.265402227640152,-0.2768164277076721,-0.2727625370025635,-0.2849910259246826,-0.27996397018432617,-0.2931184768676758,-0.28702080249786377,-0.3011983036994934,-0.29396578669548035,-0.3091249167919159,-0.3007667064666748,-0.3167557120323181,-0.3074030876159668,-0.32409340143203735,-0.3139421045780182,-0.33121705055236816,-0.32043159008026123,-0.3381509780883789,-0.32684582471847534,-0.34494221210479736,-0.3331971764564514,-0.3517029881477356,-0.3395477533340454,-0.35848891735076904,-0.345898300409317,-0.3653014898300171,-0.35221612453460693,-0.37220367789268494,-0.3585188388824463,-0.3792582154273987,-0.3648207187652588,-0.38640761375427246,-0.37110307812690735,-0.393545538187027,-0.37739109992980957,-0.40060749650001526,-0.3837079405784607,-0.4075193405151367,-0.3899625539779663,-0.4141964614391327,-0.3960525691509247,-0.42061641812324524,-0.4020005464553833,-0.42677319049835205,-0.40783387422561646,-0.4326091706752777,-0.4134617745876312,-0.4380987286567688,-0.4187893271446228,-0.44331538677215576,-0.4238043427467346,-0.4483404755592346,-0.42851030826568604,-0.45318907499313354,-0.4329345226287842,-0.45785045623779297,-0.4371677339076996,-0.46233269572257996,-0.4412577748298645,-0.46668684482574463,-0.4451722502708435,-0.47099173069000244,-0.44895413517951965,-0.47526106238365173,-0.45273566246032715,-0.4794234335422516,-0.4565529525279999,-0.48346206545829773,-0.460336834192276,-0.487442284822464,-0.4640561640262604,-0.49133917689323425,-0.4676953852176666,-0.49503153562545776,-0.4711844027042389,-0.49849700927734375,-0.4744860529899597,-0.5017921328544617,-0.4776119589805603,-0.5048731565475464,-0.48050105571746826,-0.5076683163642883,-0.48306500911712646,-0.5102288126945496,-0.4853420853614807,-0.5126030445098877,-0.48742344975471497,-0.5147296190261841,-0.4893101155757904,-0.5166022181510925,-0.49098825454711914,-0.518316924571991,-0.4925043284893036,-0.519883930683136,-0.4938730001449585,-0.5212352275848389,-0.4950759708881378,-0.522398829460144,-0.4961559772491455,-0.5234311819076538,-0.4971415400505066,-0.5242810845375061,-0.4979563057422638,-0.5249060392379761,-0.49855610728263855,-0.5253487229347229,-0.4990082085132599,-0.525596022605896,-0.4993344843387604,-0.5255888104438782,-0.49945956468582153,-0.5253779292106628,-0.49935832619667053,-0.5250194072723389,-0.4990674555301666,-0.5244154930114746,-0.4985846281051636,-0.5235034823417664,-0.4979121685028076,-0.522404134273529,-0.49709317088127136,-0.5211771130561829,-0.49610140919685364,-0.5196942687034607,-0.4948584735393524,-0.517902135848999,-0.4933931529521942,-0.5159035325050354,-0.4917854070663452)\n\
+\n\
+,\n\
+\n\
+new Array(-0.5137231945991516,-0.49000853300094604,-0.5113903284072876,-0.488100528717041,-0.5088633298873901,-0.48603248596191406,-0.5061661005020142,-0.4837847948074341,-0.5032707452774048,-0.4813406467437744,-0.5001466274261475,-0.4787534177303314,-0.49685049057006836,-0.4760761260986328,-0.49342668056488037,-0.4732472896575928,-0.4898289442062378,-0.47021234035491943,-0.4860019385814667,-0.467038094997406,-0.48194417357444763,-0.4637599587440491,-0.4776892066001892,-0.46030497550964355,-0.4732748866081238,-0.45665597915649414,-0.46869802474975586,-0.4528677761554718,-0.46391454339027405,-0.4489230215549469,-0.45892152190208435,-0.4447893500328064,-0.4537576138973236,-0.44052648544311523,-0.4484187066555023,-0.4361549913883209,-0.44290804862976074,-0.4315980076789856,-0.4373047649860382,-0.4268632233142853,-0.4316164255142212,-0.42204850912094116,-0.42571672797203064,-0.41714534163475037,-0.4195888936519623,-0.41207751631736755,-0.4133991301059723,-0.40687015652656555,-0.40720468759536743,-0.401580274105072,-0.4008715748786926,-0.39620015025138855,-0.3943476378917694,-0.39074966311454773,-0.3877306580543518,-0.3852769136428833,-0.38106489181518555,-0.3797324001789093,-0.3743053674697876,-0.3740321695804596,-0.3674202561378479,-0.3681885004043579,-0.3603806793689728,-0.36222216486930847,-0.3531627357006073,-0.35607028007507324,-0.34580618143081665,-0.3496861755847931,-0.3383495807647705,-0.3430899977684021,-0.3307521343231201,-0.3362985849380493,-0.3229793906211853,-0.3293401896953583,-0.315058171749115,-0.32228440046310425,-0.30699875950813293,-0.315151184797287,-0.2987874746322632,-0.30789127945899963,-0.29045185446739197,-0.30051279067993164,-0.28202396631240845,-0.29308781027793884,-0.2735027074813843,-0.2856077551841736,-0.2649257779121399,-0.27798640727996826,-0.2563796639442444,-0.2702132761478424,-0.24790993332862854,-0.2623620629310608,-0.23951497673988342,-0.2544562816619873,-0.23120757937431335,-0.24646149575710297,-0.22298353910446167,-0.2383953332901001,-0.21476247906684875,-0.2303106039762497,-0.20644812285900116,-0.22219493985176086,-0.1980222761631012,-0.21401672065258026,-0.18950195610523224,-0.2058141976594925,-0.18083666265010834,-0.19762080907821655,-0.17196400463581085,-0.18940521776676178,-0.1629542112350464,-0.18119071424007416,-0.15394656360149384,-0.17307928204536438,-0.14496801793575287,-0.16509070992469788,-0.13598699867725372,-0.1571563482284546,-0.12707515060901642,-0.14925628900527954,-0.11832299828529358,-0.14137746393680573,-0.10971798002719879,-0.13344717025756836,-0.10125025361776352,-0.1254633218050003,-0.09293901920318604,-0.11750493198633194,-0.08468332141637802,-0.10955502837896347,-0.07634306699037552,-0.10155733674764633,-0.06794353574514389,-0.09359082579612732,-0.0595434196293354,-0.08573566377162933,-0.0510471872985363,-0.0779324322938919,-0.042377568781375885,-0.07014453411102295,-0.03362184390425682,-0.06238359585404396,-0.02486787736415863,-0.05453343316912651,-0.01613004505634308,-0.0464804507791996,-0.007472425699234009,-0.03832215070724487,0.0009909719228744507,-0.030160509049892426,0.00918087363243103,-0.0219377800822258,0.01705806702375412,-0.013661175966262817,0.024636313319206238,-0.0054317861795425415,0.031981587409973145,0.002793937921524048,0.03918281942605972,0.011097252368927002,0.0463932529091835,0.01936565339565277,0.05372148007154465,0.02748739719390869,0.0609898716211319,0.03553415834903717,0.06804285198450089,0.04353989660739899,0.07528826594352722,0.05137953907251358,0.08313757926225662,0.05894308537244797,0.09104142338037491,0.06621246039867401,0.09819495677947998,0.07324355840682983,0.10493610799312592,0.08019237220287323,0.11213169991970062,0.08720662444829941,0.11955674737691879,0.09431906044483185,0.1262604296207428,0.10157740116119385,0.13215814530849457,0.10906890779733658,0.1380482316017151,0.11671863496303558,0.14434769749641418,0.12434201687574387,0.15068860352039337,0.13187485933303833,0.15661653876304626,0.13927049934864044,0.1622142195701599,0.14633619785308838,0.16797444224357605,0.15291756391525269,0.17413830757141113,0.15904036164283752,0.18042199313640594,0.16477809846401215,0.18657466769218445,0.17019487917423248,0.19275277853012085,0.1753728985786438,0.1990659385919571,0.1803634762763977,0.20531892776489258,0.18523544073104858,0.21139419078826904,0.19012044370174408,0.21729907393455505,0.1950494647026062,0.222874253988266,0.1999734342098236,0.228011816740036,0.2050219029188156,0.23290342092514038,0.210371196269989,0.23768731951713562,0.21597397327423096,0.24231691658496857,0.2218102216720581,0.2469380795955658,0.2279721051454544,0.2518135607242584,0.23417289555072784,0.25691327452659607,0.23994697630405426,0.26207083463668823,0.24547690153121948,0.2672507166862488,0.25112250447273254,0.27232447266578674,0.25628194212913513,0.27704593539237976,0.260145902633667,0.28139808773994446,0.26323676109313965,0.28550174832344055,0.2666539251804352,0.2893005907535553,0.27030205726623535,0.29275497794151306,0.27338463068008423,0.29604265093803406,0.2760785222053528,0.29927703738212585,0.27935171127319336,0.302398145198822,0.2835429012775421,0.30541032552719116,0.28810322284698486,0.3083387315273285,0.29246801137924194,0.31105777621269226,0.2966208755970001,0.3135039806365967,0.3009149432182312,0.31568992137908936,0.30537116527557373,0.3176348805427551,0.30956944823265076,0.3193422853946686,0.31316643953323364,0.3208901584148407,0.3162834644317627,0.3223532438278198,0.31914156675338745,0.32372766733169556,0.3216931223869324,0.3250102996826172,0.3238937258720398,0.32619887590408325,0.32591819763183594,0.32724729180336,0.32787463068962097,0.32814714312553406,0.32968413829803467,0.3289378583431244,0.3313487470149994,0.32962244749069214,0.33299732208251953,0.33025267720222473,0.33466023206710815,0.3309943675994873,0.33627644181251526,0.33193162083625793,0.33788472414016724,0.3330099880695343,0.3396027088165283,0.33427178859710693,0.34145987033843994,0.33584967255592346,0.3433850407600403,0.3376842141151428,0.34532588720321655,0.3395330309867859,0.34727874398231506,0.34122443199157715,0.3492124080657959,0.3427020013332367,0.3510623872280121,0.34393221139907837,0.35280218720436096,0.3448846936225891,0.3544255197048187,0.345511257648468,0.35589224100112915,0.3457866907119751,0.35723280906677246,0.34584540128707886,0.3586302697658539,0.34591227769851685,0.3602270781993866,0.3460692763328552,0.36193689703941345,0.3463064730167389,0.36358287930488586,0.34671613574028015,0.36508455872535706,0.3473617732524872,0.3663909435272217,0.3480914235115051,0.36737513542175293,0.34872686862945557,0.36788907647132874,0.3492404818534851,0.3678523302078247,0.34957072138786316,0.3672947287559509,0.3495337665081024,0.3663550615310669,0.349063515663147,0.36519855260849,0.34828177094459534,0.3639591932296753,0.34726089239120483,0.3627973198890686,0.3459911048412323,0.36188578605651855,0.3445943593978882,0.36128389835357666,0.3432638645172119,0.360962837934494,0.3419889211654663,0.36096450686454773,0.3406458795070648,0.36137494444847107,0.33931952714920044,0.36218199133872986,0.3382019102573395,0.36331093311309814,0.3372468650341034,0.36474165320396423,0.33627501130104065,0.3664785623550415,0.33529964089393616,0.36844712495803833,0.3344076871871948,0.3704620599746704,0.33351296186447144,0.37229543924331665,0.3325388431549072,0.3738071024417877,0.3315884470939636,0.37496477365493774,0.33070746064186096,0.3756759762763977,0.32981252670288086,0.37573686242103577,0.3289702832698822,0.3750419616699219,0.3283597528934479,0.37365415692329407,0.32795339822769165,0.37158074975013733,0.32762959599494934,0.36872994899749756,0.32744911313056946,0.36513349413871765,0.327328085899353,0.36083292961120605,0.32647183537483215,0.3553459048271179,0.3234274387359619,0.3475061357021332,0.3167162835597992,0.3361029028892517,0.30550384521484375,0.3206931948661804,0.289927214384079,0.301763653755188,0.2707938551902771,0.28021207451820374,0.2489292174577713,0.25686004757881165,0.22513742744922638,0.23259875178337097,0.2009105384349823,0.20892499387264252,0.17861606180667877,0.18800251185894012,0.16042542457580566,0.1717921644449234,0.14698050916194916,0.16082054376602173,0.1370360553264618,0.15366528928279877,0.12817446887493134,0.14766347408294678,0.11803093552589417,0.14030992984771729,0.10540719330310822,0.1303406059741974,0.09064079821109772,0.11794678121805191,0.07512999325990677,0.1043713390827179,0.06083159148693085,0.09155081957578659,0.05038084089756012,0.08213365077972412,0.047207534313201904,0.0794491171836853,0.05470795929431915,0.08676983416080475,0.07482234388589859,0.1060170903801918,0.10722704231739044,0.13688474893569946,0.1495549976825714,0.17697802186012268,0.19809097051620483,0.22259706258773804,0.24851331114768982,0.2695668935775757,0.29662609100341797,0.3139076828956604,0.3389118015766144,0.3523290455341339,0.37274593114852905,0.3825106620788574,0.39645275473594666,0.4031810462474823,0.40939658880233765,0.414045125246048,0.41200780868530273,0.41564178466796875,0.40561020374298096,0.4092215895652771,0.3921266198158264,0.3965846300125122,0.3738146126270294,0.37977224588394165,0.3530846834182739,0.360776424407959,0.33230307698249817,0.34146547317504883,0.3134949207305908,0.3235333561897278,0.29809248447418213,0.30826473236083984,0.2869272828102112,0.2963654398918152,0.2803330719470978,0.2880798876285553,0.2781458795070648,0.2833423912525177,0.2797280550003052,0.28175947070121765,0.28418320417404175,0.2826170325279236,0.29055237770080566,0.28502604365348816,0.29783299565315247,0.2880639433860779,0.3050537407398224,0.2908852994441986,0.31150898337364197,0.29286256432533264,0.31685498356819153,0.29363778233528137,0.3209408223628998,0.29303422570228577,0.3236549198627472,0.2910189926624298,0.3249479830265045,0.2877538502216339,0.3248835802078247,0.28355008363723755,0.3236102759838104,0.2787551283836365,0.3212985694408417,0.27375152707099915,0.31806454062461853,0.2689562439918518,0.31393393874168396,0.2646617591381073,0.30892059206962585,0.2609400451183319,0.3031262159347534,0.2577987313270569,0.2967284619808197,0.2553180754184723,0.2899474501609802,0.2535468339920044,0.2830822467803955,0.2523913085460663,0.27646496891975403,0.2516772150993347,0.27031591534614563,0.2512190043926239,0.2647823095321655,0.2508447468280792,0.25996577739715576,0.25032496452331543,0.25594156980514526,0.24949151277542114,0.2525883615016937,0.24821141362190247,0.24961310625076294,0.24631737172603607,0.24674704670906067,0.24365116655826569,0.24378450214862823,0.24015013873577118,0.2405320256948471,0.23586493730545044,0.23689839243888855,0.23092935979366302,0.23295597732067108,0.22551023960113525,0.22881460189819336,0.2197560966014862,0.22456791996955872,0.21381458640098572,0.22040949761867523,0.20788267254829407,0.21659861505031586,0.20215559005737305,0.2132403701543808,0.19671525061130524,0.21023744344711304,0.19153043627738953,0.20741993188858032,0.18653440475463867,0.20455028116703033,0.18163129687309265,0.2012627124786377,0.17666466534137726,0.19717349112033844,0.17145000398159027,0.19201600551605225,0.1658248007297516,0.18561972677707672,0.15966778993606567,0.1779114007949829,0.15292170643806458,0.1690191626548767,0.14558954536914825,0.15924739837646484,0.13767898082733154,0.14891751110553741,0.12920112907886505,0.1383480280637741,0.12023596465587616,0.12793944776058197,0.1109166145324707,0.11810696125030518,0.10136047005653381,0.10913249105215073,0.09172657132148743,0.1011713445186615,0.08230516314506531,0.0943390354514122,0.07342809438705444,0.08870010823011398,0.06534087657928467,0.08421285450458527,0.058251891285181046,0.0807342454791069,0.0523688979446888,0.07804303616285324,0.047738026827573776,0.07584884017705917,0.04413424804806709,0.07380872964859009,0.04118501394987106,0.07154276967048645,0.038487426936626434,0.0686652734875679,0.03558041900396347,0.06486204266548157,0.0319744274020195,0.05993484705686569,0.027289263904094696,0.05376472324132919,0.021312803030014038,0.04630828648805618,0.013984277844429016,0.03766322135925293,0.005423426628112793,0.02805314213037491,-0.0040769875049591064,0.01772705465555191,-0.014155000448226929,0.0069579556584358215,-0.024425312876701355,-0.003892548382282257,-0.034451521933078766,-0.014451511204242706,-0.04383676499128342,-0.024486973881721497,-0.05239381641149521,-0.03391285985708237,-0.06015949696302414,-0.04270743578672409,-0.06728138774633408,-0.05091959983110428,-0.07397614419460297,-0.0586925745010376,-0.0805329903960228,-0.0662003830075264,-0.08724270761013031,-0.07359982281923294,-0.09432008862495422,-0.08105243742465973,-0.10188722610473633,-0.08869340270757675,-0.10994412750005722,-0.09654761105775833,-0.11832835525274277,-0.10454189777374268,-0.1267707496881485,-0.11260934174060822,-0.13502219319343567,-0.12074155360460281,-0.14292706549167633,-0.12895497679710388,-0.15042932331562042,-0.13724792003631592,-0.15755988657474518,-0.14559385180473328,-0.16441892087459564,-0.1539762169122696,-0.1711602807044983,-0.16242380440235138,-0.17798106372356415,-0.17097726464271545,-0.1850680112838745,-0.17961308360099792,-0.19250938296318054,-0.1882379651069641,-0.20026762783527374,-0.19674423336982727,-0.20821866393089294,-0.2050238698720932,-0.21618175506591797,-0.2129627764225006,-0.22394722700119019,-0.22049042582511902,-0.23134419322013855,-0.22762390971183777,-0.2382839024066925,-0.23443394899368286,-0.24473749101161957,-0.24101610481739044,-0.2507375478744507,-0.24751800298690796,-0.25642403960227966,-0.2541276514530182,-0.26202377676963806,-0.26100021600723267,-0.26775965094566345,-0.2682335376739502,-0.2738083004951477,-0.27590224146842957,-0.28030723333358765,-0.2840461730957031,-0.2873222529888153,-0.2926250100135803,-0.2948102355003357,-0.30153170228004456,-0.30264827609062195,-0.3106444776058197,-0.31068146228790283,-0.31983932852745056,-0.3187355399131775,-0.328976571559906,-0.32663577795028687,-0.337910920381546,-0.334236741065979,-0.3465123176574707,-0.34141790866851807,-0.3546822965145111,-0.34808236360549927,-0.3623671531677246,-0.3542081117630005,-0.3695635199546814,-0.3598801791667938,-0.3763040602207184,-0.36523255705833435,-0.3826392590999603,-0.37037503719329834,-0.38862234354019165,-0.3753855526447296,-0.394300252199173,-0.38032299280166626,-0.3997267782688141,-0.3852221369743347,-0.40498611330986023,-0.39010003209114075,-0.41017886996269226,-0.39498022198677063,-0.41537636518478394,-0.3998861610889435,-0.4206025004386902,-0.404814749956131,-0.42585769295692444,-0.4097353518009186,-0.4311356544494629,-0.4146151840686798,-0.43641966581344604,-0.4194323718547821,-0.44168272614479065,-0.42417213320732117,-0.44688862562179565,-0.4288170039653778,-0.45198318362236023,-0.4333416223526001,-0.45690152049064636,-0.43771636486053467,-0.46159815788269043,-0.4419223368167877,-0.46606379747390747,-0.4459584057331085,-0.4703110158443451,-0.4498317539691925,-0.4743539094924927,-0.45354267954826355,-0.4781973659992218,-0.4570796489715576,-0.4818352460861206,-0.4604245722293854,-0.4852607846260071,-0.4635674059391022,-0.4884822368621826,-0.46651771664619446,-0.49152228236198425,-0.46929827332496643,-0.4943970739841461,-0.4719245731830597,-0.4971011281013489,-0.4743885397911072,-0.4996146559715271,-0.47666504979133606,-0.5019261240959167,-0.47873517870903015,-0.5040473341941833,-0.4806043803691864,-0.5060036182403564,-0.4822950065135956,-0.5078047513961792,-0.4838182032108307,-0.5094174146652222,-0.48514917492866516,-0.5107952952384949,-0.48625442385673523,-0.5120333433151245,-0.4872269034385681,-0.5131012201309204,-0.48804327845573425,-0.5139797925949097,-0.48869040608406067,-0.5146780014038086,-0.4891781508922577,-0.5152041912078857,-0.48951324820518494,-0.515548050403595,-0.4896860122680664,-0.5156898498535156,-0.4896797835826874,-0.5156195759773254,-0.4894915819168091,-0.5153493285179138,-0.4891391396522522,-0.5149028897285461,-0.48864948749542236,-0.5142913460731506,-0.4880334436893463,-0.5134984850883484,-0.4872722327709198,-0.512488603591919,-0.4863273799419403,-0.5112295150756836,-0.4851687550544739,-0.5097134113311768,-0.48379451036453247,-0.5079579949378967,-0.48222753405570984,-0.5059928894042969,-0.4804929196834564,-0.5038410425186157,-0.47860074043273926,-0.5015115737915039,-0.4765486717224121,-0.49900615215301514,-0.474336177110672,-0.4963277280330658,-0.4719712436199188,-0.4934810698032379,-0.46946513652801514,-0.49046316742897034,-0.4668181240558624,-0.48725906014442444,-0.46401435136795044,-0.48385322093963623,-0.46102750301361084,-0.48024654388427734,-0.45783665776252747,-0.47645989060401917,-0.45443978905677795,-0.4725186824798584,-0.4508539140224457,-0.4684355556964874,-0.44709959626197815,-0.46420466899871826,-0.44318661093711853,-0.4598103165626526,-0.43911513686180115,-0.4552389979362488,-0.43489035964012146,-0.45048898458480835,-0.43053045868873596,-0.4455726444721222,-0.42605772614479065,-0.44050833582878113,-0.42148131132125854,-0.4353029131889343,-0.4167920649051666,-0.4299459159374237,-0.41197001934051514,-0.4244259297847748,-0.40699324011802673,-0.41875192523002625,-0.40184569358825684,-0.41294997930526733,-0.39652132987976074,-0.40703457593917847,-0.39102911949157715,-0.40099236369132996,-0.3853883147239685,-0.3947983682155609,-0.379618763923645,-0.38843998312950134,-0.3737398684024811,-0.38192009925842285,-0.3677789866924286,-0.3752404749393463,-0.3617693781852722,-0.3683972954750061,-0.3557269871234894,-0.3613896369934082,-0.34962818026542664,-0.3542184829711914,-0.3434188663959503,-0.3468770682811737,-0.33705273270606995,-0.33935868740081787,-0.3305167555809021,-0.3316848576068878,-0.3238251209259033,-0.32391107082366943,-0.31700414419174194,-0.3160881996154785,-0.3100919723510742,-0.30822646617889404,-0.30314183235168457,-0.30031096935272217,-0.29620152711868286,-0.29234418272972107,-0.28928154706954956,-0.2843485474586487,-0.28234970569610596,-0.2763228714466095,-0.2753610908985138,-0.26822763681411743,-0.2682851552963257,-0.2600266933441162,-0.26110294461250305,-0.2517269551753998,-0.25379523634910583,-0.2433546781539917,-0.24635474383831024,-0.23491129279136658,-0.2388077676296234,-0.22638581693172455,-0.23121139407157898,-0.21780720353126526,-0.22362297773361206,-0.20924493670463562,-0.2160770297050476,-0.20073820650577545,-0.20858462154865265,-0.19224850833415985,-0.20113219320774078,-0.18370383977890015,-0.19366946816444397,-0.17507335543632507,-0.1861170083284378,-0.16637077927589417,-0.17841219902038574,-0.1576009839773178,-0.17055565118789673,-0.148741215467453,-0.16260384023189545,-0.1397855281829834,-0.15461835265159607,-0.13077619671821594,-0.14663778245449066,-0.12177445739507675,-0.1386960744857788,-0.11282160133123398,-0.1308393031358719,-0.10394816100597382,-0.1230967789888382,-0.09519916772842407,-0.11543876677751541,-0.08661489933729172,-0.10778286308050156,-0.07818744331598282,-0.10004876554012299,-0.06986398994922638,-0.09220118820667267,-0.06159941852092743,-0.08424758911132812,-0.053382694721221924,-0.07621950656175613,-0.045204222202301025,-0.06816849112510681,-0.03702538460493088,-0.06016238033771515,-0.02880621701478958,-0.05225931107997894,-0.020550966262817383,-0.04448086768388748,-0.012302905321121216,-0.0368179976940155,-0.004100114107131958,-0.029257260262966156,0.004040226340293884,-0.021784842014312744,0.012096323072910309,-0.014362379908561707,0.020029857754707336,-0.0069222599267959595,0.027816027402877808,0.0005943924188613892,0.035470448434352875,0.008194826543331146,0.043032705783843994,0.01583489030599594,0.05053168535232544,0.023451924324035645,0.05797713249921799,0.030986033380031586,0.0653659775853157,0.0383775532245636,0.07267146557569504,0.04556902498006821,0.07983017712831497,0.052524030208587646,0.08677184581756592,0.05924297124147415,0.09348134696483612,0.06576123833656311,0.10002323985099792,0.07214471697807312,0.10649779438972473,0.07848785817623138,0.11298158764839172,0.08489495515823364,0.11951449513435364,0.09144071489572525,0.12612414360046387,0.09814945608377457,0.13283410668373108,0.10502535849809647,0.13964423537254333,0.11209312081336975,0.1465175449848175,0.11938157677650452,0.15339161455631256,0.12685833871364594,0.16019673645496368,0.13440126180648804,0.16686761379241943,0.14185304939746857,0.1733635812997818,0.14909660816192627,0.1796974241733551,0.15606801211833954,0.1859397441148758,0.16272011399269104,0.19217726588249207,0.16901637613773346,0.19845536351203918,0.17497338354587555,0.20475313067436218,0.1806771457195282,0.21099962294101715,0.1862298846244812,0.21710392832756042,0.19168782234191895,0.22298064827919006,0.19706708192825317,0.22857160866260529,0.20239682495594025,0.23385636508464813,0.20773008465766907,0.23883312940597534,0.21309153735637665,0.24349918961524963,0.2184503823518753,0.24790242314338684,0.22379642724990845,0.2520396411418915,0.22907114028930664,0.2559488117694855,0.23422284424304962,0.25970956683158875,0.23919197916984558,0.263393372297287,0.24391581118106842,0.267034649848938,0.24837423861026764,0.2706506550312042,0.25261327624320984,0.2742699086666107,0.25670841336250305,0.27793049812316895,0.2607170045375824,0.2816528379917145,0.26468127965927124,0.28542274236679077,0.26866281032562256,0.2891985774040222,0.2727433443069458,0.292927622795105,0.27697640657424927,0.2965553402900696,0.281343013048172,0.3000248968601227,0.2857591211795807,0.3032781183719635,0.2901217043399811,0.30626803636550903,0.29434892535209656,0.3089806139469147,0.2983919382095337,0.31145021319389343,0.30222588777542114,0.3137483298778534,0.30583545565605164,0.31595122814178467,0.3092058300971985,0.31811270117759705,0.31232768297195435,0.3202593922615051,0.31520572304725647,0.3223975598812103,0.31785526871681213,0.3245071470737457,0.3202867805957794,0.3265295624732971,0.32250121235847473,0.3283746540546417,0.3245077431201935,0.32995209097862244,0.3263428807258606,0.33120396733283997,0.32806700468063354,0.3321175277233124,0.32974594831466675,0.332724928855896,0.3314400613307953,0.3331047594547272,0.3331981897354126,0.33337944746017456,0.33504244685173035,0.33369430899620056,0.33695265650749207,0.3341796398162842,0.3388760983943939,0.33491915464401245,0.3407588005065918,0.33593639731407166,0.3425574004650116,0.3371926546096802,0.3442245423793793,0.3385861814022064,0.3457033038139343,0.33996182680130005,0.3469533324241638,0.3411432206630707,0.34797245264053345,0.3419831097126007,0.34877270460128784,0.34240439534187317,0.349345326423645,0.3424091935157776,0.3496764302253723,0.34206104278564453,0.3498052656650543,0.3414638340473175,0.34984588623046875,0.3407500982284546,0.3499334454536438,0.340066134929657,0.3501625061035156,0.33954519033432007,0.35058847069740295,0.33927953243255615,0.3512694835662842,0.3393147885799408,0.3522685766220093,0.33966028690338135,0.35359981656074524,0.3402900993824005,0.3551881015300751,0.34113386273384094,0.356891930103302,0.3420846462249756,0.3585565388202667,0.34303149580955505,0.36004331707954407,0.34388241171836853,0.3612383306026459,0.344550758600235,0.3620738983154297,0.34493643045425415,0.3625553846359253,0.34495019912719727,0.3627432882785797,0.3445638120174408,0.3626939058303833,0.3438241183757782,0.3624250590801239,0.3428187668323517,0.361955851316452,0.3416540026664734,0.36136651039123535,0.3404766321182251,0.36078914999961853,0.33948343992233276,0.36033061146736145,0.3388586640357971,0.3600243926048279,0.3386785686016083,0.35987240076065063,0.3388814926147461,0.3599116802215576,0.3393232822418213,0.3602134883403778,0.3398509621620178,0.3608211874961853,0.34033000469207764,0.36171820759773254,0.3406338095664978,0.3628429174423218,0.3406321406364441,0.36408504843711853,0.34020528197288513,0.36525389552116394,0.3392985761165619,0.3661157488822937,0.33797401189804077,0.36651450395584106,0.33633241057395935,0.3663865327835083,0.33423125743865967,0.3655090928077698,0.33098775148391724,0.36318421363830566,0.3254320025444031,0.3582824468612671,0.31642067432403564,0.3497524857521057,0.3034154772758484,0.33714884519577026,0.2866259813308716,0.3206908106803894,0.2667217552661896,0.3009462058544159,0.24460870027542114,0.2786709666252136,0.22157062590122223,0.2550315260887146,0.19945719838142395,0.2318165898323059,0.18042144179344177,0.21116450428962708,0.16621296107769012,0.19487625360488892,0.15751305222511292,0.18379129469394684,0.15367744863033295,0.1775275021791458,0.1528540998697281,0.17453670501708984,0.1523725986480713,0.17242954671382904,0.14946037530899048,0.16865786910057068,0.1421966850757599,0.1614331305027008,0.13021358847618103,0.1503685712814331,0.1146666407585144,0.13641898334026337,0.09762406349182129,0.12132522463798523,0.08152692764997482,0.10719214379787445,0.0690765306353569,0.09647108614444733,0.06320425868034363,0.09195809066295624,0.06661736965179443,0.09632152318954468,0.08097830414772034,0.11124186217784882,0.10628615319728851,0.13673646748065948,0.1408746838569641,0.17110836505889893,0.18190903961658478,0.2114475965499878,0.22600501775741577,0.25431403517723083,0.269742876291275,0.29631057381629944,0.3100496232509613,0.334465891122818,0.3444552719593048,0.3664591610431671,0.3712193965911865,0.3907356262207031,0.3893691599369049,0.4065472185611725,0.39870530366897583,0.4139246642589569,0.399762898683548,0.4135751724243164,0.393675297498703,0.4067177474498749,0.38196316361427307,0.3948909044265747,0.36633679270744324,0.37975722551345825,0.3485592305660248,0.36291125416755676,0.330335408449173,0.3457352817058563,0.3131875991821289,0.3293605446815491,0.29833319783210754,0.314715713262558,0.28659963607788086,0.3025423586368561,0.27838796377182007,0.29330089688301086,0.27369534969329834,0.2870592176914215,0.2722085118293762,0.2835167944431305,0.27343297004699707,0.28217101097106934,0.2767919898033142,0.2824866473674774,0.28169888257980347,0.2839967906475067,0.287453293800354,0.28617313504219055,0.29337456822395325,0.2885313928127289,0.29889997839927673,0.2907150387763977,0.30358970165252686,0.2924956679344177,0.3070765733718872,0.2937161922454834,0.3090613782405853,0.2942705750465393,0.30936959385871887,0.2941321134567261,0.3079759478569031,0.29334330558776855,0.30495354533195496,0.29192981123924255,0.30042779445648193,0.28982827067375183,0.2946094274520874,0.28691163659095764,0.28784412145614624,0.2830761671066284,0.2805746793746948,0.27829596400260925,0.2732338309288025,0.27262943983078003,0.26617667078971863,0.2662232518196106,0.25967875123023987,0.2593178451061249,0.25392982363700867,0.25221049785614014,0.24899810552597046,0.24517767131328583,0.24483585357666016,0.2384195476770401,0.2413596510887146,0.23206254839897156,0.23851251602172852,0.2261812388896942,0.2362290471792221,0.22080402076244354,0.2343699336051941,0.21592116355895996,0.2327447235584259,0.21152155101299286,0.23120062053203583,0.20762799680233002,0.22964338958263397,0.20428478717803955,0.22795343399047852,0.20150336623191833,0.2259225845336914,0.19921478629112244,0.22331036627292633,0.19725462794303894,0.2199501097202301,0.19537846744060516,0.2157791703939438,0.19330155849456787,0.2107958346605301,0.1907530426979065,0.2050483673810959,0.18751242756843567,0.1986832618713379,0.18341392278671265,0.19196321070194244,0.17835724353790283,0.18518690764904022,0.1723581850528717,0.17857202887535095,0.1655905842781067,0.17220304906368256,0.15833452343940735,0.1660631000995636,0.1508517861366272,0.16009025275707245,0.14331141114234924,0.15421250462532043,0.13582764565944672,0.14836138486862183,0.12851488590240479,0.1424730122089386,0.12145394831895828,0.13647493720054626,0.11461437493562698,0.13027110695838928,0.10786096751689911,0.12374910712242126,0.10105203837156296,0.11681777238845825,0.09411272406578064,0.10944677889347076,0.0870223417878151,0.10168059915304184,0.07978898286819458,0.09362272918224335,0.07247429341077805,0.08540672063827515,0.06521251797676086,0.07717220485210419,0.05815443769097328,0.06905745714902878,0.05138806998729706,0.06120937690138817,0.044933073222637177,0.053783953189849854,0.03879239410161972,0.04690658301115036,0.032958440482616425,0.040596701204776764,0.02735314890742302,0.03471525385975838,0.021802255883812904,0.028989167883992195,0.01609962061047554,0.023105600848793983,0.010090738534927368,0.016811873763799667,0.003688353579491377,0.009963242337107658,-0.0031575006432831287,0.002516126027330756,-0.01046459749341011,-0.005494528915733099,-0.018199991434812546,-0.013961371034383774,-0.02628650888800621,-0.02269870787858963,-0.03463251143693924,-0.03145888075232506,-0.043135449290275574,-0.039992015808820724,-0.051663435995578766,-0.0481300912797451,-0.060072120279073715,-0.05583951249718666,-0.06826416403055191,-0.063203364610672,-0.0762188732624054,-0.07035306096076965,-0.08395205438137054,-0.077405646443367,-0.09146834164857864,-0.0844445675611496,-0.09877212345600128,-0.09153379499912262,-0.1059095486998558,-0.09873364865779877,-0.1129670962691307,-0.1060994565486908,-0.12002304196357727,-0.11366908252239227,-0.12711678445339203,-0.12144944071769714,-0.13426116108894348,-0.12941238284111023,-0.1414547860622406,-0.13750536739826202,-0.1486705243587494,-0.14567208290100098,-0.1558549851179123,-0.1538686901330948,-0.16296620666980743,-0.16206611692905426,-0.17001113295555115,-0.17024314403533936,-0.17703497409820557,-0.17837992310523987,-0.1840820014476776,-0.18645545840263367,-0.1911834478378296,-0.19444873929023743,-0.19838199019432068,-0.2023506760597229,-0.20574374496936798,-0.21018409729003906,-0.21332889795303345,-0.21801145374774933,-0.22115075588226318,-0.2259119749069214,-0.2291652262210846,-0.23393920063972473,-0.23729002475738525,-0.24209696054458618,-0.24542775750160217,-0.25034987926483154,-0.2534793019294739,-0.2586488425731659,-0.2613561749458313,-0.26694440841674805,-0.2689962685108185,-0.2751891016960144,-0.2763730585575104,-0.2833440899848938,-0.28349441289901733,-0.2913866341114044,-0.29039308428764343,-0.29930567741394043,-0.2971133589744568,-0.307087779045105,-0.30369770526885986,-0.3147141635417938,-0.31017762422561646,-0.322174072265625,-0.31657397747039795,-0.3294750452041626,-0.32290157675743103,-0.3366340100765228,-0.32917243242263794,-0.34366050362586975,-0.33539602160453796,-0.3505537211894989,-0.34157902002334595,-0.35731732845306396,-0.34772777557373047,-0.3639681339263916,-0.35384660959243774,-0.37052851915359497,-0.3599322438240051,-0.3770109713077545,-0.36596933007240295,-0.38341113924980164,-0.3719328045845032,-0.38971376419067383,-0.3777962625026703,-0.395904541015625,-0.3835383355617523,-0.4019785523414612,-0.3891465663909912,-0.4079378843307495,-0.39461749792099,-0.4137786626815796,-0.3999519944190979,-0.41947999596595764,-0.4051479697227478,-0.42500901222229004,-0.4101989269256592,-0.43034130334854126,-0.41509705781936646,-0.43548041582107544,-0.419841468334198,-0.44045743346214294,-0.42443957924842834,-0.4453069567680359,-0.4289010763168335,-0.4500356912612915,-0.4332244396209717,-0.45460939407348633,-0.4373864233493805,-0.4589867889881134,-0.4413633644580841,-0.46323850750923157,-0.44523024559020996,-0.4673311710357666,-0.448950856924057,-0.47124043107032776,-0.4524918496608734,-0.47496506571769714,-0.4558508098125458,-0.47851237654685974,-0.45904505252838135,-0.4818895757198334,-0.46209385991096497,-0.48510071635246277,-0.465003103017807,-0.48814600706100464,-0.46776124835014343,-0.4910202920436859,-0.4703477919101715,-0.4937116503715515,-0.4727475941181183,-0.49620547890663147,-0.4749591052532196,-0.4984930157661438,-0.47699394822120667,-0.5005773305892944,-0.47886550426483154,-0.5024701356887817,-0.48057854175567627,-0.5041794180870056,-0.4821264445781708,-0.5057013034820557,-0.48349958658218384,-0.5070251822471619,-0.4846949577331543,-0.5081486105918884,-0.48571905493736267,-0.509087085723877,-0.48658329248428345,-0.5098643898963928,-0.48729389905929565,-0.5104926228523254,-0.4878467321395874,-0.5109565854072571,-0.48822930455207825,-0.5112249851226807,-0.48842892050743103,-0.5112738013267517,-0.4884416460990906,-0.5111058354377747,-0.4882757067680359,-0.510748028755188,-0.48794835805892944,-0.510232150554657,-0.4874734580516815,-0.5095677971839905,-0.4868512451648712,-0.5087315440177917,-0.4860653281211853,-0.507678210735321,-0.48509278893470764,-0.5063723921775818,-0.48391830921173096,-0.5048164129257202,-0.4825429618358612,-0.5030500292778015,-0.48098352551460266,-0.5011188387870789,-0.4792636036872864,-0.49903959035873413,-0.47740641236305237,-0.49679604172706604,-0.47542843222618103,-0.4943670630455017,-0.4733349680900574,-0.4917532801628113,-0.4711179733276367,-0.4889707863330841,-0.4687599241733551,-0.4860231280326843,-0.46624556183815,-0.48288673162460327,-0.46356797218322754,-0.4795306921005249,-0.4607272446155548,-0.47594529390335083,-0.4577200412750244,-0.4721463918685913,-0.45453545451164246,-0.46815428137779236,-0.45116257667541504,-0.4639756381511688,-0.44760099053382874,-0.45960667729377747,-0.4438607692718506,-0.4550493359565735,-0.43995341658592224,-0.4503166675567627,-0.43588492274284363,-0.44542694091796875,-0.43166229128837585,-0.4403962194919586,-0.42730194330215454,-0.4352371096611023,-0.4228253960609436,-0.42995357513427734,-0.41824057698249817,-0.4245334267616272,-0.4135271906852722,-0.4189499616622925,-0.40864601731300354,-0.41317906975746155,-0.4035632312297821,-0.40721848607063293,-0.3982691168785095,-0.4010874032974243,-0.3927765190601349,-0.394808292388916,-0.38710835576057434,-0.388395220041275,-0.3812902271747589,-0.38185957074165344,-0.3753519058227539,-0.3752199113368988,-0.36932194232940674,-0.3684973418712616,-0.3632151782512665,-0.36169925332069397,-0.3570241928100586,-0.3548104763031006,-0.35072851181030273,-0.34780266880989075,-0.3443145751953125,-0.34065306186676025,-0.33778634667396545,-0.33335644006729126,-0.33115726709365845,-0.3259279131889343,-0.3244384527206421,-0.318397581577301,-0.31764116883277893,-0.31079593300819397,-0.3107862174510956,-0.3031361997127533,-0.3039014935493469,-0.2954109013080597,-0.2970024645328522,-0.2876105010509491,-0.2900755703449249,-0.2797442376613617,-0.28308728337287903,-0.27183473110198975,-0.276012122631073,-0.26388534903526306,-0.2688480317592621,-0.2558617889881134,-0.2616053521633148,-0.2477174997329712,-0.2542847990989685,-0.23943772912025452,-0.24687598645687103,-0.23105037212371826,-0.23937740921974182,-0.22259145975112915,-0.23180991411209106,-0.2140737771987915,-0.22420412302017212,-0.20549969375133514,-0.2165747880935669,-0.1968955248594284,-0.20891325175762177,-0.18831145763397217,-0.20120587944984436,-0.1797809600830078,-0.19345428049564362,-0.17129217088222504,-0.18567350506782532,-0.16281338036060333,-0.17787405848503113,-0.15433865785598755,-0.17005404829978943,-0.14589308202266693,-0.16221165657043457,-0.1374913901090622,-0.1543581485748291,-0.1291087418794632,-0.1465117484331131,-0.12070388346910477,-0.1386767327785492,-0.11226113140583038,-0.13083478808403015,-0.10379426181316376,-0.12296002358198166,-0.09531185775995255,-0.115040622651577,-0.08679930120706558,-0.10708432644605637,-0.07824482023715973,-0.09910604357719421,-0.06966972351074219,-0.09111578017473221,-0.061114951968193054,-0.08311952650547028,-0.052599892020225525,-0.0751243606209755,-0.04410962760448456,-0.06713724881410599,-0.03562984615564346,-0.05916077643632889,-0.027179516851902008,-0.05119534954428673,-0.01879652589559555,-0.04324730113148689,-0.010496310889720917,-0.03532908856868744,-0.002260833978652954,-0.027447693049907684,0.0059290193021297455,-0.019598383456468582,0.014061875641345978,-0.011778898537158966,0.022105101495981216,-0.004013461992144585,0.03003648668527603,0.0036457106471061707,0.03785426914691925,0.011150557547807693,0.04555843397974968,0.018492722883820534,0.053134094923734665,0.02570323459804058,0.060557737946510315,0.03281550854444504,0.06780894100666046,0.039834704250097275,0.07486822456121445,0.04675022140145302,0.0817132443189621,0.053574249148368835,0.08833374828100204,0.060355111956596375,0.0947575718164444,0.06714500486850739,0.10105312615633011,0.07395663857460022,0.10729896277189255,0.08076008409261703,0.11355335265398026,0.0875229686498642,0.11985470354557037,0.09424670785665512,0.12623825669288635,0.10095816850662231,0.1327301263809204,0.10766972601413727,0.1393246352672577,0.11436689645051956,0.14602354168891907,0.12108242511749268,0.15275464951992035,0.12784253060817719,0.15944001078605652,0.13467952609062195,0.166034996509552,0.1416047364473343,0.17252594232559204,0.1485820859670639,0.17891503870487213,0.15553797781467438,0.18521401286125183,0.162397101521492,0.19144229590892792,0.1691051870584488,0.19761662185192108,0.1756211370229721,0.20373423397541046,0.1818981170654297,0.20976819097995758,0.18788672983646393,0.21567688882350922,0.19356295466423035,0.22141236066818237,0.1989491879940033,0.22691985964775085,0.20410071313381195,0.23214197158813477,0.2090718001127243,0.23703992366790771,0.2138986885547638,0.24161241948604584,0.21860937774181366,0.24588878452777863,0.2232365906238556,0.24990510940551758,0.2278122901916504,0.25369614362716675,0.23235124349594116,0.25730907917022705,0.23684369027614594,0.2608065903186798,0.24126189947128296,0.26424169540405273,0.24557729065418243,0.26763802766799927,0.2497827410697937,0.2710042893886566,0.2539080083370209,0.2743600904941559,0.2580043077468872,0.27772846817970276,0.2621048092842102,0.28109848499298096,0.2662014663219452,0.2844138741493225,0.27026814222335815,0.28761327266693115,0.27430057525634766,0.2906782627105713,0.2783187925815582,0.2936345636844635,0.2823316752910614,0.29650774598121643,0.28631120920181274,0.2992847263813019,0.2902001440525055,0.30191662907600403,0.29392778873443604,0.30435478687286377,0.2974175214767456,0.3065836429595947,0.3006058931350708,0.30862122774124146,0.30347740650177,0.31049442291259766,0.306072473526001,0.312222421169281,0.3084503412246704,0.31383374333381653,0.31065377593040466,0.3153923749923706,0.31272828578948975,0.31698936223983765,0.31476086378097534,0.3186992406845093,0.3168686330318451,0.3205533027648926,0.31914153695106506,0.3225567936897278,0.3216134309768677,0.3247084319591522,0.324289470911026,0.3269837200641632,0.3271740972995758,0.3293130397796631,0.33025112748146057,0.33160120248794556,0.3334524631500244,0.3337690830230713,0.3366631269454956,0.3357566297054291,0.33975350856781006,0.33749690651893616,0.34260159730911255,0.3389246463775635,0.3451049029827118,0.34002384543418884,0.3472021222114563,0.34083592891693115,0.3488919138908386,0.34139955043792725,0.3502168655395508,0.3416992127895355,0.35122162103652954,0.3416895866394043,0.35192933678627014,0.3413449227809906,0.3523486256599426,0.3406597077846527,0.35248973965644836,0.3396291136741638,0.3523767590522766,0.3382820785045624,0.352059006690979,0.3367357850074768,0.35161373019218445,0.33517172932624817,0.3511255085468292,0.3337372839450836,0.35066133737564087,0.33248984813690186,0.3502699136734009,0.33143895864486694,0.3499961793422699,0.33060356974601746,0.34987717866897583,0.33000418543815613,0.3499266803264618,0.3296352028846741,0.3501513600349426,0.32948991656303406,0.350592702627182,0.329603374004364,0.3513304591178894,0.33003976941108704,0.35242897272109985,0.33083397150039673,0.35388806462287903,0.3319631814956665,0.35565000772476196,0.3333580195903778,0.35762736201286316,0.334903359413147,0.35970258712768555,0.33642998337745667,0.3617240786552429,0.3377501368522644,0.3635392487049103,0.33872780203819275,0.365033894777298,0.3393082618713379,0.36612892150878906,0.33948349952697754,0.3667609691619873,0.339260458946228,0.3669013977050781,0.33867549896240234,0.366586297750473,0.3378073573112488,0.3658924102783203,0.33674895763397217,0.364884614944458,0.3355695903301239,0.3636193573474884,0.33430618047714233,0.36218708753585815,0.33296605944633484,0.3606922924518585,0.3315345048904419,0.35918036103248596,0.3300207853317261,0.35764509439468384,0.3285069167613983,0.35611510276794434,0.3270561099052429,0.3546077311038971,0.3254457414150238,0.352856308221817,0.3229660391807556,0.350090354681015,0.3185683786869049,0.3452148139476776,0.3112976551055908,0.33729299902915955,0.30062180757522583,0.32587888836860657,0.28643596172332764,0.3109724819660187,0.2689546048641205,0.2928783595561981,0.24881073832511902,0.2723010778427124,0.22731277346611023,0.25058284401893616,0.20648010075092316,0.22969430685043335,0.18861271440982819,0.21180330216884613,0.17556962370872498,0.1986304223537445,0.1681668758392334,0.19092623889446259,0.1659921258687973,0.18827880918979645,0.16763757169246674,0.18928979337215424,0.17113277316093445,0.19200463593006134,0.1743386834859848,0.1943642944097519,0.175251305103302,0.19451621174812317,0.17233914136886597,0.1910596489906311,0.16496074199676514,0.18336881697177887,0.15363140404224396,0.17187567055225372,0.1398496776819229,0.157985121011734,0.12555719912052155,0.1435789316892624,0.11268371343612671,0.13053175806999207,0.10308875143527985,0.12063667923212051,0.09868810325860977,0.11577457934617996,0.10131668299436569,0.11781617254018784,0.11223071813583374,0.12809985876083374,0.1316116750240326,0.14688126742839813,0.15844237804412842,0.17319311201572418,0.19076986610889435,0.20511654019355774,0.2261192500591278,0.24018003046512604,0.2618753910064697,0.2757151126861572)\n\
+\n\
+]);\n\
+\n\
+function runTest(test, iterations) {\n\
+ for (var i = 0; i < iterations; i++) {\n\
+ test();\n\
+ }\n\
+}\n\
+\n\
+/* \n\
+ * DSP.js - a comprehensive digital signal processing library for javascript \n\
+ * \n\
+ * Created by Corban Brook <corbanbrook@gmail.com> on 2010-01-01.\n\
+ * Copyright 2010 Corban Brook. All rights reserved.\n\
+ *\n\
+ */\n\
+\n\
+////////////////////////////////////////////////////////////////////////////////\n\
+// CONSTANTS //\n\
+////////////////////////////////////////////////////////////////////////////////\n\
+\n\
+/**\n\
+ * DSP is an object which contains general purpose utility functions and constants\n\
+ */\n\
+DSP = {\n\
+ // Channels\n\
+ LEFT: 0,\n\
+ RIGHT: 1,\n\
+ MIX: 2,\n\
+\n\
+ // Waveforms\n\
+ SINE: 1,\n\
+ TRIANGLE: 2,\n\
+ SAW: 3,\n\
+ SQUARE: 4,\n\
+\n\
+ // Filters \n\
+ LOWPASS: 0,\n\
+ HIGHPASS: 1,\n\
+ BANDPASS: 2,\n\
+ NOTCH: 3,\n\
+\n\
+ // Window functions\n\
+ BARTLETT: 1,\n\
+ BARTLETTHANN: 2,\n\
+ BLACKMAN: 3,\n\
+ COSINE: 4,\n\
+ GAUSS: 5,\n\
+ HAMMING: 6,\n\
+ HANN: 7,\n\
+ LANCZOS: 8,\n\
+ RECTANGULAR: 9,\n\
+ TRIANGULAR: 10,\n\
+\n\
+ // Loop modes\n\
+ OFF: 0,\n\
+ FW: 1,\n\
+ BW: 2,\n\
+ FWBW: 3,\n\
+\n\
+ // Math\n\
+ TWO_PI: 2*Math.PI\n\
+};\n\
+\n\
+////////////////////////////////////////////////////////////////////////////////\n\
+// DSP UTILITY FUNCTIONS //\n\
+////////////////////////////////////////////////////////////////////////////////\n\
+\n\
+/**\n\
+ * Inverts the phase of a signal\n\
+ *\n\
+ * @param {Array} buffer A sample buffer\n\
+ *\n\
+ * @returns The inverted sample buffer\n\
+ */\n\
+DSP.invert = function(buffer) {\n\
+ for ( var i = 0, len = buffer.length; i < len; i++ ) {\n\
+ buffer[i] *= -1;\n\
+ }\n\
+\n\
+ return buffer;\n\
+};\n\
+\n\
+/**\n\
+ * Converts split-stereo (dual mono) sample buffers into a stereo interleaved sample buffer\n\
+ *\n\
+ * @param {Array} left A sample buffer\n\
+ * @param {Array} right A sample buffer\n\
+ *\n\
+ * @returns The stereo interleaved buffer\n\
+ */\n\
+DSP.interleave = function(left, right) {\n\
+ if ( left.length !== right.length ) {\n\
+ throw \"Can not interleave. Channel lengths differ.\";\n\
+ }\n\
+ \n\
+ var stereoInterleaved = new Array(left.length * 2);\n\
+ \n\
+ for (var i = 0, len = left.length; i < len; i++ ) {\n\
+ stereoInterleaved[2*i] = left[i];\n\
+ stereoInterleaved[2*i+1] = right[i];\n\
+ }\n\
+ \n\
+ return stereoInterleaved;\n\
+};\n\
+\n\
+/**\n\
+ * Converts a stereo-interleaved sample buffer into split-stereo (dual mono) sample buffers\n\
+ *\n\
+ * @param {Array} buffer A stereo-interleaved sample buffer\n\
+ *\n\
+ * @returns an Array containing left and right channels\n\
+ */\n\
+DSP.deinterleave = function(buffer) {\n\
+ var left = new Array(buffer.length/2);\n\
+ var right = new Array(buffer.length/2);\n\
+ var mix = new Array(buffer.length/2);\n\
+ \n\
+ for (var i = 0, len = buffer.length/2; i < len; i ++ ) {\n\
+ left[i] = buffer[2*i];\n\
+ right[i] = buffer[2*i+1];\n\
+ mix[i] = (left[i] + right[i]) / 2;\n\
+ }\n\
+ \n\
+ return [left, right, mix];\n\
+};\n\
+\n\
+/**\n\
+ * Separates a channel from a stereo-interleaved sample buffer\n\
+ *\n\
+ * @param {Array} buffer A stereo-interleaved sample buffer\n\
+ * @param {Number} channel A channel constant (LEFT, RIGHT, MIX)\n\
+ *\n\
+ * @returns an Array containing a signal mono sample buffer\n\
+ */\n\
+DSP.getChannel = function(channel, buffer) {\n\
+ return DSP.deinterleave(buffer)[channel];\n\
+};\n\
+\n\
+// Biquad filter types\n\
+DSP.LPF = 0; // H(s) = 1 / (s^2 + s/Q + 1)\n\
+DSP.HPF = 1; // H(s) = s^2 / (s^2 + s/Q + 1)\n\
+DSP.BPF_CONSTANT_SKIRT = 2; // H(s) = s / (s^2 + s/Q + 1) (constant skirt gain, peak gain = Q)\n\
+DSP.BPF_CONSTANT_PEAK = 3; // H(s) = (s/Q) / (s^2 + s/Q + 1) (constant 0 dB peak gain)\n\
+DSP.NOTCH = 4; // H(s) = (s^2 + 1) / (s^2 + s/Q + 1)\n\
+DSP.APF = 5; // H(s) = (s^2 - s/Q + 1) / (s^2 + s/Q + 1)\n\
+DSP.PEAKING_EQ = 6; // H(s) = (s^2 + s*(A/Q) + 1) / (s^2 + s/(A*Q) + 1)\n\
+DSP.LOW_SHELF = 7; // H(s) = A * (s^2 + (sqrt(A)/Q)*s + A)/(A*s^2 + (sqrt(A)/Q)*s + 1)\n\
+DSP.HIGH_SHELF = 8; // H(s) = A * (A*s^2 + (sqrt(A)/Q)*s + 1)/(s^2 + (sqrt(A)/Q)*s + A)\n\
+\n\
+// Biquad filter parameter types\n\
+DSP.Q = 1;\n\
+DSP.BW = 2; // SHARED with BACKWARDS LOOP MODE\n\
+DSP.S = 3;\n\
+\n\
+\n\
+/** \n\
+ * DFT is a class for calculating the Discrete Fourier Transform of a signal.\n\
+ *\n\
+ * @param {Number} bufferSize The size of the sample buffer to be computed\n\
+ * @param {Number} sampleRate The sampleRate of the buffer (eg. 44100)\n\
+ *\n\
+ * @constructor\n\
+ */\n\
+DFT = function(bufferSize, sampleRate) {\n\
+ this.bufferSize = bufferSize;\n\
+ this.sampleRate = sampleRate;\n\
+\n\
+ var N = bufferSize/2 * bufferSize;\n\
+ \n\
+ this.sinTable = new Array(N);\n\
+ this.cosTable = new Array(N);\n\
+ \n\
+ for ( var i = 0; i < N; i++ ) {\n\
+ this.sinTable[i] = Math.sin(i * DSP.TWO_PI / bufferSize);\n\
+ this.cosTable[i] = Math.cos(i * DSP.TWO_PI / bufferSize);\n\
+ }\n\
+ \n\
+ this.spectrum = new Array(bufferSize/2);\n\
+ this.complexValues = new Array(bufferSize/2);\n\
+};\n\
+\n\
+/**\n\
+ * Performs a forward tranform on the sample buffer. \n\
+ * Converts a time domain signal to frequency domain spectra.\n\
+ *\n\
+ * @param {Array} buffer The sample buffer\n\
+ *\n\
+ * @returns The frequency spectrum array\n\
+ */\n\
+DFT.prototype.forward = function(buffer) {\n\
+ var real, imag;\n\
+\n\
+ for ( var k = 0; k < this.bufferSize/2; k++ ) {\n\
+ real = 0.0;\n\
+ imag = 0.0;\n\
+\n\
+ for ( var n = 0; n < buffer.length; n++ ) {\n\
+ real += this.cosTable[k*n] * buffer[n];\n\
+ imag += this.sinTable[k*n] * buffer[n];\n\
+ }\n\
+\n\
+ this.complexValues[k] = {real: real, imag: imag};\n\
+ }\n\
+ \n\
+ for ( var i = 0; i < this.bufferSize/2; i++ ) {\n\
+ this.spectrum[i] = 2 * Math.sqrt(Math.pow(this.complexValues[i].real, 2) + Math.pow(this.complexValues[i].imag, 2)) / this.bufferSize;\n\
+ }\n\
+\n\
+ return this.spectrum;\n\
+};\n\
+\n\
+\n\
+/** \n\
+ * FFT is a class for calculating the Discrete Fourier Transform of a signal \n\
+ * with the Fast Fourier Transform algorithm.\n\
+ *\n\
+ * @param {Number} bufferSize The size of the sample buffer to be computed. Must be power of 2\n\
+ * @param {Number} sampleRate The sampleRate of the buffer (eg. 44100)\n\
+ *\n\
+ * @constructor\n\
+ */\n\
+FFT = function(bufferSize, sampleRate) {\n\
+ this.bufferSize = bufferSize;\n\
+ this.sampleRate = sampleRate;\n\
+ this.spectrum = new Array(bufferSize/2);\n\
+ this.real = new Array(bufferSize);\n\
+ this.imag = new Array(bufferSize);\n\
+ \n\
+ this.reverseTable = new Array(bufferSize);\n\
+ for (var i = 0; i < this.reverseTable.length; i++) {\n\
+ this.reverseTable[i] = 0;\n\
+ }\n\
+\n\
+ var limit = 1;\n\
+ var bit = bufferSize >> 1;\n\
+\n\
+ while ( limit < bufferSize ) {\n\
+ for ( var i = 0; i < limit; i++ ) {\n\
+ this.reverseTable[i + limit] = this.reverseTable[i] + bit;\n\
+ }\n\
+\n\
+ limit = limit << 1;\n\
+ bit = bit >> 1;\n\
+ }\n\
+\n\
+ this.sinTable = new Array(bufferSize);\n\
+ this.cosTable = new Array(bufferSize);\n\
+\n\
+ for ( var i = 0; i < bufferSize; i++ ) {\n\
+ this.sinTable[i] = Math.sin(-Math.PI/i);\n\
+ this.cosTable[i] = Math.cos(-Math.PI/i);\n\
+ }\n\
+};\n\
+\n\
+/**\n\
+ * Performs a forward tranform on the sample buffer. \n\
+ * Converts a time domain signal to frequency domain spectra.\n\
+ *\n\
+ * @param {Array} buffer The sample buffer. Buffer Length must be power of 2\n\
+ *\n\
+ * @returns The frequency spectrum array\n\
+ */\n\
+FFT.prototype.forward = function(buffer) {\n\
+ // Locally scope variables for speed up\n\
+ var bufferSize = this.bufferSize,\n\
+ cosTable = this.cosTable,\n\
+ sinTable = this.sinTable,\n\
+ reverseTable = this.reverseTable,\n\
+ real = this.real,\n\
+ imag = this.imag,\n\
+ spectrum = this.spectrum;\n\
+\n\
+ var k = Math.floor(Math.log(bufferSize) / Math.LN2);\n\
+ if ( Math.pow(2, k) !== bufferSize ) { throw \"Invalid buffer size, must be a power of 2.\"; }\n\
+ if ( bufferSize !== buffer.length ) { throw \"Supplied buffer is not the same size as defined FFT. FFT Size: \" + bufferSize + \" Buffer Size: \" + buffer.length; }\n\
+\n\
+ for ( var i = 0; i < bufferSize; i++ ) {\n\
+ real[i] = buffer[reverseTable[i]];\n\
+ imag[i] = 0;\n\
+ }\n\
+\n\
+ var halfSize = 1, \n\
+ phaseShiftStepReal, \n\
+ phaseShiftStepImag, \n\
+ currentPhaseShiftReal, \n\
+ currentPhaseShiftImag, \n\
+ off, \n\
+ tr, \n\
+ ti, \n\
+ tmpReal, \n\
+ i;\n\
+\n\
+ while ( halfSize < bufferSize ) {\n\
+ phaseShiftStepReal = cosTable[halfSize];\n\
+ phaseShiftStepImag = sinTable[halfSize];\n\
+ currentPhaseShiftReal = 1;\n\
+ currentPhaseShiftImag = 0;\n\
+\n\
+ for ( var fftStep = 0; fftStep < halfSize; fftStep++ ) {\n\
+ i = fftStep;\n\
+\n\
+ while ( i < bufferSize ) {\n\
+ off = i + halfSize;\n\
+ tr = (currentPhaseShiftReal * real[off]) - (currentPhaseShiftImag * imag[off]);\n\
+ ti = (currentPhaseShiftReal * imag[off]) + (currentPhaseShiftImag * real[off]);\n\
+\n\
+ real[off] = real[i] - tr;\n\
+ imag[off] = imag[i] - ti;\n\
+ real[i] += tr;\n\
+ imag[i] += ti;\n\
+\n\
+ i += halfSize << 1;\n\
+ }\n\
+\n\
+ tmpReal = currentPhaseShiftReal;\n\
+ currentPhaseShiftReal = (tmpReal * phaseShiftStepReal) - (currentPhaseShiftImag * phaseShiftStepImag);\n\
+ currentPhaseShiftImag = (tmpReal * phaseShiftStepImag) + (currentPhaseShiftImag * phaseShiftStepReal);\n\
+ }\n\
+\n\
+ halfSize = halfSize << 1;\n\
+ }\n\
+\n\
+ i = bufferSize/2;\n\
+ while(i--) {\n\
+ spectrum[i] = 2 * Math.sqrt(real[i] * real[i] + imag[i] * imag[i]) / bufferSize;\n\
+ }\n\
+\n\
+ return spectrum;\n\
+};\n\
+\n\
+FFT.prototype.inverse = function(real, imag) {\n\
+ // Locally scope variables for speed up\n\
+ var bufferSize = this.bufferSize,\n\
+ cosTable = this.cosTable,\n\
+ sinTable = this.sinTable,\n\
+ reverseTable = this.reverseTable,\n\
+ spectrum = this.spectrum;\n\
+ \n\
+ real = real || this.real;\n\
+ imag = imag || this.imag;\n\
+\n\
+ for (var i = 0; i < bufferSize; i++) {\n\
+ imag[i] *= -1;\n\
+ }\n\
+\n\
+ var revReal = new Array(bufferSize);\n\
+ var revImag = new Array(bufferSize);\n\
+ \n\
+ for (var i = 0; i < real.length; i++) {\n\
+ revReal[i] = real[reverseTable[i]];\n\
+ revImag[i] = imag[reverseTable[i]];\n\
+ }\n\
+ \n\
+ real = revReal;\n\
+ imag = revImag;\n\
+\n\
+ var halfSize = 1, \n\
+ phaseShiftStepReal, \n\
+ phaseShiftStepImag, \n\
+ currentPhaseShiftReal, \n\
+ currentPhaseShiftImag, \n\
+ off, \n\
+ tr, \n\
+ ti, \n\
+ tmpReal, \n\
+ i;\n\
+\n\
+ while ( halfSize < bufferSize ) {\n\
+ phaseShiftStepReal = cosTable[halfSize];\n\
+ phaseShiftStepImag = sinTable[halfSize];\n\
+ currentPhaseShiftReal = 1;\n\
+ currentPhaseShiftImag = 0;\n\
+\n\
+ for ( var fftStep = 0; fftStep < halfSize; fftStep++ ) {\n\
+ i = fftStep;\n\
+\n\
+ while ( i < bufferSize ) {\n\
+ off = i + halfSize;\n\
+ tr = (currentPhaseShiftReal * real[off]) - (currentPhaseShiftImag * imag[off]);\n\
+ ti = (currentPhaseShiftReal * imag[off]) + (currentPhaseShiftImag * real[off]);\n\
+\n\
+ real[off] = real[i] - tr;\n\
+ imag[off] = imag[i] - ti;\n\
+ real[i] += tr;\n\
+ imag[i] += ti;\n\
+\n\
+ i += halfSize << 1;\n\
+ }\n\
+\n\
+ tmpReal = currentPhaseShiftReal;\n\
+ currentPhaseShiftReal = (tmpReal * phaseShiftStepReal) - (currentPhaseShiftImag * phaseShiftStepImag);\n\
+ currentPhaseShiftImag = (tmpReal * phaseShiftStepImag) + (currentPhaseShiftImag * phaseShiftStepReal);\n\
+ }\n\
+\n\
+ halfSize = halfSize << 1;\n\
+ }\n\
+\n\
+ var buffer = new Array(bufferSize);\n\
+ for (var i = 0; i < bufferSize; i++) {\n\
+ buffer[i] = real[i] / bufferSize;\n\
+ }\n\
+\n\
+ return buffer;\n\
+};\n\
+\n\
+Sampler = function Sampler(file, bufferSize, sampleRate, playStart, playEnd, loopStart, loopEnd, loopMode) {\n\
+ this.file = file;\n\
+ this.bufferSize = bufferSize;\n\
+ this.sampleRate = sampleRate;\n\
+ this.playStart = playStart || 0; // 0%\n\
+ this.playEnd = playEnd || 1; // 100%\n\
+ this.loopStart = loopStart || 0;\n\
+ this.loopEnd = loopEnd || 1;\n\
+ this.loopMode = loopMode || DSP.OFF;\n\
+ this.loaded = false;\n\
+ this.samples = [];\n\
+ this.signal = new Array(bufferSize);\n\
+ this.frameCount = 0;\n\
+ this.envelope = null;\n\
+ this.amplitude = 1;\n\
+ this.rootFrequency = 110; // A2 110\n\
+ this.frequency = 550;\n\
+ this.step = this.frequency / this.rootFrequency;\n\
+ this.duration = 0;\n\
+ this.samplesProcessed = 0;\n\
+ this.playhead = 0;\n\
+ \n\
+ var audio = /* new Audio();*/ document.createElement(\"AUDIO\");\n\
+ var self = this;\n\
+ \n\
+ this.loadSamples = function(event) {\n\
+ var buffer = DSP.getChannel(DSP.MIX, event.frameBuffer);\n\
+ for ( var i = 0; i < buffer.length; i++) {\n\
+ self.samples.push(buffer[i]);\n\
+ }\n\
+ };\n\
+ \n\
+ this.loadComplete = function() {\n\
+ // convert flexible js array into a fast typed array\n\
+ self.samples = new Array(self.samples);\n\
+ self.loaded = true;\n\
+ };\n\
+ \n\
+ this.loadMetaData = function() {\n\
+ self.duration = audio.duration;\n\
+ };\n\
+ \n\
+ audio.addEventListener(\"MozAudioAvailable\", this.loadSamples, false);\n\
+ audio.addEventListener(\"loadedmetadata\", this.loadMetaData, false)\n\
+ audio.addEventListener(\"ended\", this.loadComplete, false);\n\
+ audio.muted = true;\n\
+ audio.src = file;\n\
+ audio.play();\n\
+};\n\
+\n\
+Sampler.prototype.applyEnvelope = function() {\n\
+ this.envelope.process(this.signal);\n\
+ return this.signal;\n\
+};\n\
+\n\
+Sampler.prototype.generate = function() {\n\
+ var frameOffset = this.frameCount * this.bufferSize;\n\
+ \n\
+ var loopWidth = this.playEnd * this.samples.length - this.playStart * this.samples.length;\n\
+ var playStartSamples = this.playStart * this.samples.length; // ie 0.5 -> 50% of the length\n\
+ var playEndSamples = this.playEnd * this.samples.length; // ie 0.5 -> 50% of the length\n\
+ var offset;\n\
+\n\
+ for ( var i = 0; i < this.bufferSize; i++ ) {\n\
+ switch (this.loopMode) {\n\
+ case DSP.OFF:\n\
+ this.playhead = Math.round(this.samplesProcessed * this.step + playStartSamples);\n\
+ if (this.playhead < (this.playEnd * this.samples.length) ) {\n\
+ this.signal[i] = this.samples[this.playhead] * this.amplitude;\n\
+ } else {\n\
+ this.signal[i] = 0;\n\
+ }\n\
+ break;\n\
+ \n\
+ case DSP.FW:\n\
+ this.playhead = Math.round((this.samplesProcessed * this.step) % loopWidth + playStartSamples);\n\
+ if (this.playhead < (this.playEnd * this.samples.length) ) {\n\
+ this.signal[i] = this.samples[this.playhead] * this.amplitude;\n\
+ }\n\
+ break;\n\
+ \n\
+ case DSP.BW:\n\
+ this.playhead = playEndSamples - Math.round((this.samplesProcessed * this.step) % loopWidth);\n\
+ if (this.playhead < (this.playEnd * this.samples.length) ) {\n\
+ this.signal[i] = this.samples[this.playhead] * this.amplitude;\n\
+ }\n\
+ break;\n\
+ \n\
+ case DSP.FWBW:\n\
+ if ( Math.floor(this.samplesProcessed * this.step / loopWidth) % 2 == 0 ) {\n\
+ this.playhead = Math.round((this.samplesProcessed * this.step) % loopWidth + playStartSamples);\n\
+ } else {\n\
+ this.playhead = playEndSamples - Math.round((this.samplesProcessed * this.step) % loopWidth);\n\
+ } \n\
+ if (this.playhead < (this.playEnd * this.samples.length) ) {\n\
+ this.signal[i] = this.samples[this.playhead] * this.amplitude;\n\
+ }\n\
+ break;\n\
+ }\n\
+ this.samplesProcessed++;\n\
+ }\n\
+\n\
+ this.frameCount++;\n\
+\n\
+ return this.signal;\n\
+};\n\
+\n\
+Sampler.prototype.setFreq = function(frequency) {\n\
+ this.frequency = frequency;\n\
+ this.step = this.frequency / this.rootFrequency;\n\
+};\n\
+\n\
+Sampler.prototype.reset = function() {\n\
+ this.samplesProcessed = 0;\n\
+ this.playhead = 0;\n\
+};\n\
+\n\
+/**\n\
+ * Oscillator class for generating and modifying signals\n\
+ *\n\
+ * @param {Number} type A waveform constant (eg. DSP.SINE)\n\
+ * @param {Number} frequency Initial frequency of the signal\n\
+ * @param {Number} amplitude Initial amplitude of the signal\n\
+ * @param {Number} bufferSize Size of the sample buffer to generate\n\
+ * @param {Number} sampleRate The sample rate of the signal\n\
+ *\n\
+ * @contructor\n\
+ */\n\
+Oscillator = function Oscillator(type, frequency, amplitude, bufferSize, sampleRate) {\n\
+ this.frequency = frequency;\n\
+ this.amplitude = amplitude;\n\
+ this.bufferSize = bufferSize;\n\
+ this.sampleRate = sampleRate;\n\
+ //this.pulseWidth = pulseWidth;\n\
+ this.frameCount = 0;\n\
+ \n\
+ this.waveTableLength = 2048;\n\
+\n\
+ this.cyclesPerSample = frequency / sampleRate;\n\
+\n\
+ this.signal = new Array(bufferSize);\n\
+ this.envelope = null;\n\
+\n\
+ switch(parseInt(type)) {\n\
+ case DSP.TRIANGLE:\n\
+ this.func = Oscillator.Triangle;\n\
+ break;\n\
+\n\
+ case DSP.SAW:\n\
+ this.func = Oscillator.Saw;\n\
+ break;\n\
+\n\
+ case DSP.SQUARE:\n\
+ this.func = Oscillator.Square;\n\
+ break;\n\
+\n\
+ case DSP.SINE:\n\
+ default:\n\
+ this.func = Oscillator.Sine;\n\
+ break;\n\
+ }\n\
+\n\
+ this.generateWaveTable = function() {\n\
+ Oscillator.waveTable[this.func] = new Array(2048);\n\
+ var waveTableTime = this.waveTableLength / this.sampleRate;\n\
+ var waveTableHz = 1 / waveTableTime;\n\
+\n\
+ for (var i = 0; i < this.waveTableLength; i++) {\n\
+ Oscillator.waveTable[this.func][i] = this.func(i * waveTableHz/this.sampleRate);\n\
+ }\n\
+ };\n\
+\n\
+ if ( typeof Oscillator.waveTable === 'undefined' ) {\n\
+ Oscillator.waveTable = {};\n\
+ }\n\
+\n\
+ if ( typeof Oscillator.waveTable[this.func] === 'undefined' ) { \n\
+ this.generateWaveTable();\n\
+ }\n\
+ \n\
+ this.waveTable = Oscillator.waveTable[this.func];\n\
+}; \n\
+\n\
+/**\n\
+ * Set the amplitude of the signal\n\
+ *\n\
+ * @param {Number} amplitude The amplitude of the signal (between 0 and 1)\n\
+ */\n\
+Oscillator.prototype.setAmp = function(amplitude) {\n\
+ if (amplitude >= 0 && amplitude <= 1) {\n\
+ this.amplitude = amplitude;\n\
+ } else {\n\
+ throw \"Amplitude out of range (0..1).\";\n\
+ }\n\
+};\n\
+ \n\
+/**\n\
+ * Set the frequency of the signal\n\
+ * \n\
+ * @param {Number} frequency The frequency of the signal\n\
+ */ \n\
+Oscillator.prototype.setFreq = function(frequency) {\n\
+ this.frequency = frequency;\n\
+ this.cyclesPerSample = frequency / this.sampleRate;\n\
+};\n\
+ \n\
+// Add an oscillator\n\
+Oscillator.prototype.add = function(oscillator) {\n\
+ for ( var i = 0; i < this.bufferSize; i++ ) {\n\
+ //this.signal[i] += oscillator.valueAt(i);\n\
+ this.signal[i] += oscillator.signal[i];\n\
+ }\n\
+ \n\
+ return this.signal;\n\
+};\n\
+ \n\
+// Add a signal to the current generated osc signal\n\
+Oscillator.prototype.addSignal = function(signal) {\n\
+ for ( var i = 0; i < signal.length; i++ ) {\n\
+ if ( i >= this.bufferSize ) {\n\
+ break;\n\
+ }\n\
+ this.signal[i] += signal[i];\n\
+ \n\
+ /*\n\
+ // Constrain amplitude\n\
+ if ( this.signal[i] > 1 ) {\n\
+ this.signal[i] = 1;\n\
+ } else if ( this.signal[i] < -1 ) {\n\
+ this.signal[i] = -1;\n\
+ }\n\
+ */\n\
+ }\n\
+ return this.signal;\n\
+};\n\
+ \n\
+// Add an envelope to the oscillator\n\
+Oscillator.prototype.addEnvelope = function(envelope) {\n\
+ this.envelope = envelope;\n\
+};\n\
+\n\
+Oscillator.prototype.applyEnvelope = function() {\n\
+ this.envelope.process(this.signal);\n\
+};\n\
+ \n\
+Oscillator.prototype.valueAt = function(offset) {\n\
+ return this.waveTable[offset % this.waveTableLength];\n\
+};\n\
+ \n\
+Oscillator.prototype.generate = function() {\n\
+ var frameOffset = this.frameCount * this.bufferSize;\n\
+ var step = this.waveTableLength * this.frequency / this.sampleRate;\n\
+ var offset;\n\
+\n\
+ for ( var i = 0; i < this.bufferSize; i++ ) {\n\
+ //var step = (frameOffset + i) * this.cyclesPerSample % 1;\n\
+ //this.signal[i] = this.func(step) * this.amplitude;\n\
+ //this.signal[i] = this.valueAt(Math.round((frameOffset + i) * step)) * this.amplitude; \n\
+ offset = Math.round((frameOffset + i) * step);\n\
+ this.signal[i] = this.waveTable[offset % this.waveTableLength] * this.amplitude;\n\
+ }\n\
+\n\
+ this.frameCount++;\n\
+\n\
+ return this.signal;\n\
+};\n\
+\n\
+Oscillator.Sine = function(step) {\n\
+ return Math.sin(DSP.TWO_PI * step);\n\
+};\n\
+\n\
+Oscillator.Square = function(step) {\n\
+ return step < 0.5 ? 1 : -1;\n\
+};\n\
+\n\
+Oscillator.Saw = function(step) {\n\
+ return 2 * (step - Math.round(step));\n\
+};\n\
+\n\
+Oscillator.Triangle = function(step) {\n\
+ return 1 - 4 * Math.abs(Math.round(step) - step);\n\
+};\n\
+\n\
+Oscillator.Pulse = function(step) {\n\
+ // stub\n\
+};\n\
+ \n\
+ADSR = function(attackLength, decayLength, sustainLevel, sustainLength, releaseLength, sampleRate) {\n\
+ this.sampleRate = sampleRate;\n\
+ // Length in seconds\n\
+ this.attackLength = attackLength;\n\
+ this.decayLength = decayLength;\n\
+ this.sustainLevel = sustainLevel;\n\
+ this.sustainLength = sustainLength;\n\
+ this.releaseLength = releaseLength;\n\
+ this.sampleRate = sampleRate;\n\
+ \n\
+ // Length in samples\n\
+ this.attackSamples = attackLength * sampleRate;\n\
+ this.decaySamples = decayLength * sampleRate;\n\
+ this.sustainSamples = sustainLength * sampleRate;\n\
+ this.releaseSamples = releaseLength * sampleRate;\n\
+ \n\
+ // Updates the envelope sample positions\n\
+ this.update = function() {\n\
+ this.attack = this.attackSamples;\n\
+ this.decay = this.attack + this.decaySamples;\n\
+ this.sustain = this.decay + this.sustainSamples;\n\
+ this.release = this.sustain + this.releaseSamples;\n\
+ };\n\
+ \n\
+ this.update();\n\
+ \n\
+ this.samplesProcessed = 0;\n\
+};\n\
+\n\
+\n\
+ADSR.prototype.noteOn = function() {\n\
+ this.samplesProcessed = 0;\n\
+ this.sustainSamples = this.sustainLength * this.sampleRate;\n\
+ this.update();\n\
+};\n\
+\n\
+// Send a note off when using a sustain of infinity to let the envelope enter the release phase\n\
+ADSR.prototype.noteOff = function() {\n\
+ this.sustainSamples = this.samplesProcessed - this.decaySamples;\n\
+ this.update();\n\
+};\n\
+\n\
+ADSR.prototype.processSample = function(sample) {\n\
+ var amplitude = 0;\n\
+\n\
+ if ( this.samplesProcessed <= this.attack ) {\n\
+ amplitude = 0 + (1 - 0) * ((this.samplesProcessed - 0) / (this.attack - 0));\n\
+ } else if ( this.samplesProcessed > this.attack && this.samplesProcessed <= this.decay ) {\n\
+ amplitude = 1 + (this.sustainLevel - 1) * ((this.samplesProcessed - this.attack) / (this.decay - this.attack));\n\
+ } else if ( this.samplesProcessed > this.decay && this.samplesProcessed <= this.sustain ) {\n\
+ amplitude = this.sustainLevel;\n\
+ } else if ( this.samplesProcessed > this.sustain && this.samplesProcessed <= this.release ) {\n\
+ amplitude = this.sustainLevel + (0 - this.sustainLevel) * ((this.samplesProcessed - this.sustain) / (this.release - this.sustain));\n\
+ }\n\
+ \n\
+ return sample * amplitude;\n\
+};\n\
+\n\
+ADSR.prototype.value = function() {\n\
+ var amplitude = 0;\n\
+\n\
+ if ( this.samplesProcessed <= this.attack ) {\n\
+ amplitude = 0 + (1 - 0) * ((this.samplesProcessed - 0) / (this.attack - 0));\n\
+ } else if ( this.samplesProcessed > this.attack && this.samplesProcessed <= this.decay ) {\n\
+ amplitude = 1 + (this.sustainLevel - 1) * ((this.samplesProcessed - this.attack) / (this.decay - this.attack));\n\
+ } else if ( this.samplesProcessed > this.decay && this.samplesProcessed <= this.sustain ) {\n\
+ amplitude = this.sustainLevel;\n\
+ } else if ( this.samplesProcessed > this.sustain && this.samplesProcessed <= this.release ) {\n\
+ amplitude = this.sustainLevel + (0 - this.sustainLevel) * ((this.samplesProcessed - this.sustain) / (this.release - this.sustain));\n\
+ }\n\
+ \n\
+ return amplitude;\n\
+};\n\
+ \n\
+ADSR.prototype.process = function(buffer) {\n\
+ for ( var i = 0; i < buffer.length; i++ ) {\n\
+ buffer[i] *= this.value();\n\
+\n\
+ this.samplesProcessed++;\n\
+ }\n\
+ \n\
+ return buffer;\n\
+};\n\
+ \n\
+ \n\
+ADSR.prototype.isActive = function() {\n\
+ if ( this.samplesProcessed > this.release || this.samplesProcessed === -1 ) {\n\
+ return false;\n\
+ } else {\n\
+ return true;\n\
+ }\n\
+};\n\
+\n\
+ADSR.prototype.disable = function() {\n\
+ this.samplesProcessed = -1;\n\
+};\n\
+ \n\
+IIRFilter = function(type, cutoff, resonance, sampleRate) {\n\
+ this.sampleRate = sampleRate;\n\
+ this.cutoff = cutoff;\n\
+ this.resonance = resonance;\n\
+\n\
+ switch(type) {\n\
+ case DSP.LOWPASS:\n\
+ case DSP.LP12:\n\
+ this.func = new IIRFilter.LP12(cutoff, resonance, sampleRate);\n\
+ break;\n\
+ }\n\
+}\n\
+\n\
+IIRFilter.prototype.set = function(cutoff, resonance) {\n\
+ this.func.calcCoeff(cutoff, resonance);\n\
+}\n\
+\n\
+IIRFilter.prototype.process = function(buffer) {\n\
+ this.func.process(buffer);\n\
+}\n\
+\n\
+// Add an envelope to the filter\n\
+IIRFilter.prototype.addEnvelope = function(envelope) {\n\
+ if ( envelope instanceof ADSR ) {\n\
+ this.func.addEnvelope(envelope);\n\
+ } else {\n\
+ throw \"Not an envelope.\";\n\
+ }\n\
+};\n\
+\n\
+IIRFilter.LP12 = function(cutoff, resonance, sampleRate) {\n\
+ this.sampleRate = sampleRate;\n\
+ this.vibraPos = 0; \n\
+ this.vibraSpeed = 0;\n\
+ this.envelope = false;\n\
+ \n\
+ this.calcCoeff = function(cutoff, resonance) {\n\
+ this.w = 2.0 * Math.PI * cutoff / this.sampleRate;\n\
+ this.q = 1.0 - this.w / (2.0 * (resonance + 0.5 / (1.0 + this.w)) + this.w - 2.0);\n\
+ this.r = this.q * this.q;\n\
+ this.c = this.r + 1.0 - 2.0 * Math.cos(this.w) * this.q;\n\
+ \n\
+ this.cutoff = cutoff;\n\
+ this.resonance = resonance;\n\
+ };\n\
+\n\
+ this.calcCoeff(cutoff, resonance);\n\
+\n\
+ this.process = function(buffer) {\n\
+ for ( var i = 0; i < buffer.length; i++ ) {\n\
+ this.vibraSpeed += (buffer[i] - this.vibraPos) * this.c;\n\
+ this.vibraPos += this.vibraSpeed;\n\
+ this.vibraSpeed *= this.r;\n\
+ \n\
+ /* \n\
+ var temp = this.vibraPos;\n\
+ \n\
+ if ( temp > 1.0 ) {\n\
+ temp = 1.0;\n\
+ } else if ( temp < -1.0 ) {\n\
+ temp = -1.0;\n\
+ } else if ( temp != temp ) {\n\
+ temp = 1;\n\
+ }\n\
+ \n\
+ buffer[i] = temp;\n\
+ */ \n\
+\n\
+ if (this.envelope) {\n\
+ buffer[i] = (buffer[i] * (1 - this.envelope.value())) + (this.vibraPos * this.envelope.value());\n\
+ this.envelope.samplesProcessed++;\n\
+ } else {\n\
+ buffer[i] = this.vibraPos;\n\
+ }\n\
+ }\n\
+ }\n\
+}; \n\
+\n\
+IIRFilter.LP12.prototype.addEnvelope = function(envelope) {\n\
+ this.envelope = envelope;\n\
+};\n\
+\n\
+\n\
+\n\
+IIRFilter2 = function(type, cutoff, resonance, sampleRate) {\n\
+ this.type = type; \n\
+ this.cutoff = cutoff;\n\
+ this.resonance = resonance;\n\
+ this.sampleRate = sampleRate;\n\
+\n\
+ this.f = Array(4);\n\
+ this.f[0] = 0.0; // lp\n\
+ this.f[1] = 0.0; // hp\n\
+ this.f[2] = 0.0; // bp\n\
+ this.f[3] = 0.0; // br \n\
+ \n\
+ this.calcCoeff = function(cutoff, resonance) {\n\
+ this.freq = 2 * Math.sin(Math.PI * Math.min(0.25, cutoff/(this.sampleRate*2))); \n\
+ this.damp = Math.min(2 * (1 - Math.pow(resonance, 0.25)), Math.min(2, 2/this.freq - this.freq * 0.5));\n\
+ };\n\
+\n\
+ this.calcCoeff(cutoff, resonance);\n\
+};\n\
+\n\
+IIRFilter2.prototype.process = function(buffer) {\n\
+ var input, output;\n\
+ var f = this.f;\n\
+\n\
+ for ( var i = 0; i < buffer.length; i++ ) {\n\
+ input = buffer[i]; \n\
+\n\
+ // first pass\n\
+ f[3] = input - this.damp * f[2];\n\
+ f[0] = f[0] + this.freq * f[2];\n\
+ f[1] = f[3] - f[0];\n\
+ f[2] = this.freq * f[1] + f[2];\n\
+ output = 0.5 * f[this.type];\n\
+\n\
+ // second pass\n\
+ f[3] = input - this.damp * f[2];\n\
+ f[0] = f[0] + this.freq * f[2];\n\
+ f[1] = f[3] - f[0];\n\
+ f[2] = this.freq * f[1] + f[2];\n\
+ output += 0.5 * f[this.type];\n\
+\n\
+ if (this.envelope) {\n\
+ buffer[i] = (buffer[i] * (1 - this.envelope.value())) + (output * this.envelope.value());\n\
+ this.envelope.samplesProcessed++;\n\
+ } else {\n\
+ buffer[i] = output;\n\
+ }\n\
+ }\n\
+};\n\
+\n\
+IIRFilter2.prototype.addEnvelope = function(envelope) {\n\
+ if ( envelope instanceof ADSR ) {\n\
+ this.envelope = envelope;\n\
+ } else {\n\
+ throw \"This is not an envelope.\";\n\
+ }\n\
+};\n\
+\n\
+IIRFilter2.prototype.set = function(cutoff, resonance) {\n\
+ this.calcCoeff(cutoff, resonance); \n\
+};\n\
+\n\
+\n\
+\n\
+WindowFunction = function(type, alpha) {\n\
+ this.alpha = alpha;\n\
+ \n\
+ switch(type) {\n\
+ case DSP.BARTLETT:\n\
+ this.func = WindowFunction.Bartlett;\n\
+ break;\n\
+ \n\
+ case DSP.BARTLETTHANN:\n\
+ this.func = WindowFunction.BartlettHann;\n\
+ break;\n\
+ \n\
+ case DSP.BLACKMAN:\n\
+ this.func = WindowFunction.Blackman;\n\
+ this.alpha = this.alpha || 0.16;\n\
+ break;\n\
+ \n\
+ case DSP.COSINE:\n\
+ this.func = WindowFunction.Cosine;\n\
+ break;\n\
+ \n\
+ case DSP.GAUSS:\n\
+ this.func = WindowFunction.Gauss;\n\
+ this.alpha = this.alpha || 0.25;\n\
+ break;\n\
+ \n\
+ case DSP.HAMMING:\n\
+ this.func = WindowFunction.Hamming;\n\
+ break;\n\
+ \n\
+ case DSP.HANN:\n\
+ this.func = WindowFunction.Hann;\n\
+ break;\n\
+ \n\
+ case DSP.LANCZOS:\n\
+ this.func = WindowFunction.Lanczoz;\n\
+ break;\n\
+ \n\
+ case DSP.RECTANGULAR:\n\
+ this.func = WindowFunction.Rectangular;\n\
+ break;\n\
+ \n\
+ case DSP.TRIANGULAR:\n\
+ this.func = WindowFunction.Triangular;\n\
+ break;\n\
+ }\n\
+};\n\
+\n\
+WindowFunction.prototype.process = function(buffer) {\n\
+ var length = buffer.length;\n\
+ for ( var i = 0; i < length; i++ ) {\n\
+ buffer[i] *= this.func(length, i, this.alpha);\n\
+ }\n\
+ return buffer;\n\
+};\n\
+\n\
+WindowFunction.Bartlett = function(length, index) {\n\
+ return 2 / (length - 1) * ((length - 1) / 2 - Math.abs(index - (length - 1) / 2));\n\
+};\n\
+\n\
+WindowFunction.BartlettHann = function(length, index) {\n\
+ return 0.62 - 0.48 * Math.abs(index / (length - 1) - 0.5) - 0.38 * Math.cos(DSP.TWO_PI * index / (length - 1));\n\
+};\n\
+\n\
+WindowFunction.Blackman = function(length, index, alpha) {\n\
+ var a0 = (1 - alpha) / 2;\n\
+ var a1 = 0.5;\n\
+ var a2 = alpha / 2;\n\
+\n\
+ return a0 - a1 * Math.cos(DSP.TWO_PI * index / (length - 1)) + a2 * Math.cos(4 * Math.PI * index / (length - 1));\n\
+};\n\
+\n\
+WindowFunction.Cosine = function(length, index) {\n\
+ return Math.cos(Math.PI * index / (length - 1) - Math.PI / 2);\n\
+};\n\
+\n\
+WindowFunction.Gauss = function(length, index, alpha) {\n\
+ return Math.pow(Math.E, -0.5 * Math.pow((index - (length - 1) / 2) / (alpha * (length - 1) / 2), 2));\n\
+};\n\
+\n\
+WindowFunction.Hamming = function(length, index) {\n\
+ return 0.54 - 0.46 * Math.cos(DSP.TWO_PI * index / (length - 1));\n\
+};\n\
+\n\
+WindowFunction.Hann = function(length, index) {\n\
+ return 0.5 * (1 - Math.cos(DSP.TWO_PI * index / (length - 1)));\n\
+};\n\
+\n\
+WindowFunction.Lanczos = function(length, index) {\n\
+ var x = 2 * index / (length - 1) - 1;\n\
+ return Math.sin(Math.PI * x) / (Math.PI * x);\n\
+};\n\
+\n\
+WindowFunction.Rectangular = function(length, index) {\n\
+ return 1;\n\
+};\n\
+\n\
+WindowFunction.Triangular = function(length, index) {\n\
+ return 2 / length * (length / 2 - Math.abs(index - (length - 1) / 2));\n\
+};\n\
+\n\
+function sinh (arg) {\n\
+ // Returns the hyperbolic sine of the number, defined as (exp(number) - exp(-number))/2 \n\
+ // \n\
+ // version: 1004.2314\n\
+ // discuss at: http://phpjs.org/functions/sinh // + original by: Onno Marsman\n\
+ // * example 1: sinh(-0.9834330348825909);\n\
+ // * returns 1: -1.1497971402636502\n\
+ return (Math.exp(arg) - Math.exp(-arg))/2;\n\
+}\n\
+\n\
+\n\
+/* \n\
+ * Biquad filter\n\
+ * \n\
+ * Created by Ricard Marxer <email@ricardmarxer.com> on 2010-05-23.\n\
+ * Copyright 2010 Ricard Marxer. All rights reserved.\n\
+ *\n\
+ */\n\
+// Implementation based on:\n\
+// http://www.musicdsp.org/files/Audio-EQ-Cookbook.txt\n\
+Biquad = function(type, sampleRate) {\n\
+ this.Fs = sampleRate;\n\
+ this.type = type; // type of the filter\n\
+ this.parameterType = DSP.Q; // type of the parameter\n\
+\n\
+ this.x_1_l = 0;\n\
+ this.x_2_l = 0;\n\
+ this.y_1_l = 0;\n\
+ this.y_2_l = 0;\n\
+\n\
+ this.x_1_r = 0;\n\
+ this.x_2_r = 0;\n\
+ this.y_1_r = 0;\n\
+ this.y_2_r = 0;\n\
+\n\
+ this.b0 = 1;\n\
+ this.a0 = 1;\n\
+\n\
+ this.b1 = 0;\n\
+ this.a1 = 0;\n\
+\n\
+ this.b2 = 0;\n\
+ this.a2 = 0;\n\
+\n\
+ this.b0a0 = this.b0 / this.a0;\n\
+ this.b1a0 = this.b1 / this.a0;\n\
+ this.b2a0 = this.b2 / this.a0;\n\
+ this.a1a0 = this.a1 / this.a0;\n\
+ this.a2a0 = this.a2 / this.a0;\n\
+\n\
+ this.f0 = 3000; // \"wherever it's happenin', man.\" Center Frequency or\n\
+ // Corner Frequency, or shelf midpoint frequency, depending\n\
+ // on which filter type. The \"significant frequency\".\n\
+\n\
+ this.dBgain = 12; // used only for peaking and shelving filters\n\
+\n\
+ this.Q = 1; // the EE kind of definition, except for peakingEQ in which A*Q is\n\
+ // the classic EE Q. That adjustment in definition was made so that\n\
+ // a boost of N dB followed by a cut of N dB for identical Q and\n\
+ // f0/Fs results in a precisely flat unity gain filter or \"wire\".\n\
+\n\
+ this.BW = -3; // the bandwidth in octaves (between -3 dB frequencies for BPF\n\
+ // and notch or between midpoint (dBgain/2) gain frequencies for\n\
+ // peaking EQ\n\
+\n\
+ this.S = 1; // a \"shelf slope\" parameter (for shelving EQ only). When S = 1,\n\
+ // the shelf slope is as steep as it can be and remain monotonically\n\
+ // increasing or decreasing gain with frequency. The shelf slope, in\n\
+ // dB/octave, remains proportional to S for all other values for a\n\
+ // fixed f0/Fs and dBgain.\n\
+\n\
+ this.coefficients = function() {\n\
+ var b = [this.b0, this.b1, this.b2];\n\
+ var a = [this.a0, this.a1, this.a2];\n\
+ return {b: b, a:a};\n\
+ }\n\
+\n\
+ this.setFilterType = function(type) {\n\
+ this.type = type;\n\
+ this.recalculateCoefficients();\n\
+ }\n\
+\n\
+ this.setSampleRate = function(rate) {\n\
+ this.Fs = rate;\n\
+ this.recalculateCoefficients();\n\
+ }\n\
+\n\
+ this.setQ = function(q) {\n\
+ this.parameterType = DSP.Q;\n\
+ this.Q = Math.max(Math.min(q, 115.0), 0.001);\n\
+ this.recalculateCoefficients();\n\
+ }\n\
+\n\
+ this.setBW = function(bw) {\n\
+ this.parameterType = DSP.BW;\n\
+ this.BW = bw;\n\
+ this.recalculateCoefficients();\n\
+ } \n\
+\n\
+ this.setS = function(s) {\n\
+ this.parameterType = DSP.S;\n\
+ this.S = Math.max(Math.min(s, 5.0), 0.0001);\n\
+ this.recalculateCoefficients();\n\
+ } \n\
+\n\
+ this.setF0 = function(freq) {\n\
+ this.f0 = freq;\n\
+ this.recalculateCoefficients();\n\
+ } \n\
+ \n\
+ this.setDbGain = function(g) {\n\
+ this.dBgain = g;\n\
+ this.recalculateCoefficients();\n\
+ }\n\
+\n\
+ this.recalculateCoefficients = function() {\n\
+ var A;\n\
+ if (type == DSP.PEAKING_EQ || type == DSP.LOW_SHELF || type == DSP.HIGH_SHELF ) {\n\
+ A = Math.pow(10, (this.dBgain/40)); // for peaking and shelving EQ filters only\n\
+ } else {\n\
+ A = Math.sqrt( Math.pow(10, (this.dBgain/20)) ); \n\
+ }\n\
+\n\
+ var w0 = DSP.TWO_PI * this.f0 / this.Fs;\n\
+\n\
+ var cosw0 = Math.cos(w0);\n\
+ var sinw0 = Math.sin(w0);\n\
+\n\
+ var alpha = 0;\n\
+ \n\
+ switch (this.parameterType) {\n\
+ case DSP.Q:\n\
+ alpha = sinw0/(2*this.Q);\n\
+ break;\n\
+ \n\
+ case DSP.BW:\n\
+ alpha = sinw0 * sinh( Math.LN2/2 * this.BW * w0/sinw0 );\n\
+ break;\n\
+\n\
+ case DSP.S:\n\
+ alpha = sinw0/2 * Math.sqrt( (A + 1/A)*(1/this.S - 1) + 2 );\n\
+ break;\n\
+ }\n\
+\n\
+ /**\n\
+ FYI: The relationship between bandwidth and Q is\n\
+ 1/Q = 2*sinh(ln(2)/2*BW*w0/sin(w0)) (digital filter w BLT)\n\
+ or 1/Q = 2*sinh(ln(2)/2*BW) (analog filter prototype)\n\
+\n\
+ The relationship between shelf slope and Q is\n\
+ 1/Q = sqrt((A + 1/A)*(1/S - 1) + 2)\n\
+ */\n\
+\n\
+ switch (this.type) {\n\
+ case DSP.LPF: // H(s) = 1 / (s^2 + s/Q + 1)\n\
+ this.b0 = (1 - cosw0)/2;\n\
+ this.b1 = 1 - cosw0;\n\
+ this.b2 = (1 - cosw0)/2;\n\
+ this.a0 = 1 + alpha;\n\
+ this.a1 = -2 * cosw0;\n\
+ this.a2 = 1 - alpha;\n\
+ break;\n\
+\n\
+ case DSP.HPF: // H(s) = s^2 / (s^2 + s/Q + 1)\n\
+ this.b0 = (1 + cosw0)/2;\n\
+ this.b1 = -(1 + cosw0);\n\
+ this.b2 = (1 + cosw0)/2;\n\
+ this.a0 = 1 + alpha;\n\
+ this.a1 = -2 * cosw0;\n\
+ this.a2 = 1 - alpha;\n\
+ break;\n\
+\n\
+ case DSP.BPF_CONSTANT_SKIRT: // H(s) = s / (s^2 + s/Q + 1) (constant skirt gain, peak gain = Q)\n\
+ this.b0 = sinw0/2;\n\
+ this.b1 = 0;\n\
+ this.b2 = -sinw0/2;\n\
+ this.a0 = 1 + alpha;\n\
+ this.a1 = -2*cosw0;\n\
+ this.a2 = 1 - alpha;\n\
+ break;\n\
+\n\
+ case DSP.BPF_CONSTANT_PEAK: // H(s) = (s/Q) / (s^2 + s/Q + 1) (constant 0 dB peak gain)\n\
+ this.b0 = alpha;\n\
+ this.b1 = 0;\n\
+ this.b2 = -alpha;\n\
+ this.a0 = 1 + alpha;\n\
+ this.a1 = -2*cosw0;\n\
+ this.a2 = 1 - alpha;\n\
+ break;\n\
+\n\
+ case DSP.NOTCH: // H(s) = (s^2 + 1) / (s^2 + s/Q + 1)\n\
+ this.b0 = 1;\n\
+ this.b1 = -2*cosw0;\n\
+ this.b2 = 1;\n\
+ this.a0 = 1 + alpha;\n\
+ this.a1 = -2*cosw0;\n\
+ this.a2 = 1 - alpha;\n\
+ break;\n\
+\n\
+ case DSP.APF: // H(s) = (s^2 - s/Q + 1) / (s^2 + s/Q + 1)\n\
+ this.b0 = 1 - alpha;\n\
+ this.b1 = -2*cosw0;\n\
+ this.b2 = 1 + alpha;\n\
+ this.a0 = 1 + alpha;\n\
+ this.a1 = -2*cosw0;\n\
+ this.a2 = 1 - alpha;\n\
+ break;\n\
+\n\
+ case DSP.PEAKING_EQ: // H(s) = (s^2 + s*(A/Q) + 1) / (s^2 + s/(A*Q) + 1)\n\
+ this.b0 = 1 + alpha*A;\n\
+ this.b1 = -2*cosw0;\n\
+ this.b2 = 1 - alpha*A;\n\
+ this.a0 = 1 + alpha/A;\n\
+ this.a1 = -2*cosw0;\n\
+ this.a2 = 1 - alpha/A;\n\
+ break;\n\
+\n\
+ case DSP.LOW_SHELF: // H(s) = A * (s^2 + (sqrt(A)/Q)*s + A)/(A*s^2 + (sqrt(A)/Q)*s + 1)\n\
+ var coeff = sinw0 * Math.sqrt( (A^2 + 1)*(1/this.S - 1) + 2*A );\n\
+ this.b0 = A*( (A+1) - (A-1)*cosw0 + coeff );\n\
+ this.b1 = 2*A*( (A-1) - (A+1)*cosw0 );\n\
+ this.b2 = A*( (A+1) - (A-1)*cosw0 - coeff );\n\
+ this.a0 = (A+1) + (A-1)*cosw0 + coeff;\n\
+ this.a1 = -2*( (A-1) + (A+1)*cosw0 );\n\
+ this.a2 = (A+1) + (A-1)*cosw0 - coeff;\n\
+ break;\n\
+\n\
+ case DSP.HIGH_SHELF: // H(s) = A * (A*s^2 + (sqrt(A)/Q)*s + 1)/(s^2 + (sqrt(A)/Q)*s + A)\n\
+ var coeff = sinw0 * Math.sqrt( (A^2 + 1)*(1/this.S - 1) + 2*A );\n\
+ this.b0 = A*( (A+1) + (A-1)*cosw0 + coeff );\n\
+ this.b1 = -2*A*( (A-1) + (A+1)*cosw0 );\n\
+ this.b2 = A*( (A+1) + (A-1)*cosw0 - coeff );\n\
+ this.a0 = (A+1) - (A-1)*cosw0 + coeff;\n\
+ this.a1 = 2*( (A-1) - (A+1)*cosw0 );\n\
+ this.a2 = (A+1) - (A-1)*cosw0 - coeff;\n\
+ break;\n\
+ }\n\
+ \n\
+ this.b0a0 = this.b0/this.a0;\n\
+ this.b1a0 = this.b1/this.a0;\n\
+ this.b2a0 = this.b2/this.a0;\n\
+ this.a1a0 = this.a1/this.a0;\n\
+ this.a2a0 = this.a2/this.a0;\n\
+ }\n\
+\n\
+ this.process = function(buffer) {\n\
+ //y[n] = (b0/a0)*x[n] + (b1/a0)*x[n-1] + (b2/a0)*x[n-2]\n\
+ // - (a1/a0)*y[n-1] - (a2/a0)*y[n-2]\n\
+\n\
+ var len = buffer.length;\n\
+ var output = new Array(len);\n\
+\n\
+ for ( var i=0; i<buffer.length; i++ ) {\n\
+ output[i] = this.b0a0*buffer[i] + this.b1a0*this.x_1_l + this.b2a0*this.x_2_l - this.a1a0*this.y_1_l - this.a2a0*this.y_2_l;\n\
+ this.y_2_l = this.y_1_l;\n\
+ this.y_1_l = output[i];\n\
+ this.x_2_l = this.x_1_l;\n\
+ this.x_1_l = buffer[i];\n\
+ }\n\
+\n\
+ return output;\n\
+ }\n\
+\n\
+ this.processStereo = function(buffer) {\n\
+ //y[n] = (b0/a0)*x[n] + (b1/a0)*x[n-1] + (b2/a0)*x[n-2]\n\
+ // - (a1/a0)*y[n-1] - (a2/a0)*y[n-2]\n\
+\n\
+ var len = buffer.length;\n\
+ var output = new Array(len);\n\
+ \n\
+ for ( var i=0; i<len/2; i++ ) {\n\
+ output[2*i] = this.b0a0*buffer[2*i] + this.b1a0*this.x_1_l + this.b2a0*this.x_2_l - this.a1a0*this.y_1_l - this.a2a0*this.y_2_l;\n\
+ this.y_2_l = this.y_1_l;\n\
+ this.y_1_l = output[2*i];\n\
+ this.x_2_l = this.x_1_l;\n\
+ this.x_1_l = buffer[2*i];\n\
+\n\
+ output[2*i+1] = this.b0a0*buffer[2*i+1] + this.b1a0*this.x_1_r + this.b2a0*this.x_2_r - this.a1a0*this.y_1_r - this.a2a0*this.y_2_r;\n\
+ this.y_2_r = this.y_1_r;\n\
+ this.y_1_r = output[2*i+1];\n\
+ this.x_2_r = this.x_1_r;\n\
+ this.x_1_r = buffer[2*i+1];\n\
+ }\n\
+\n\
+ return output;\n\
+ }\n\
+};\n\
+\n\
+\n\
+/* \n\
+ * Magnitude to decibels\n\
+ * \n\
+ * Created by Ricard Marxer <email@ricardmarxer.com> on 2010-05-23.\n\
+ * Copyright 2010 Ricard Marxer. All rights reserved.\n\
+ *\n\
+ * @buffer array of magnitudes to convert to decibels\n\
+ * \n\
+ * @returns the array in decibels\n\
+ *\n\
+ */\n\
+DSP.mag2db = function(buffer) {\n\
+ var minDb = -120;\n\
+ var minMag = Math.pow(10.0, minDb / 20.0);\n\
+\n\
+ var log = Math.log;\n\
+ var max = Math.max;\n\
+ \n\
+ var result = Array(buffer.length);\n\
+ for (var i=0; i<buffer.length; i++) {\n\
+ result[i] = 20.0*log(max(buffer[i], minMag));\n\
+ }\n\
+\n\
+ return result;\n\
+};\n\
+\n\
+/* \n\
+ * Frequency response\n\
+ * \n\
+ * Created by Ricard Marxer <email@ricardmarxer.com> on 2010-05-23.\n\
+ * Copyright 2010 Ricard Marxer. All rights reserved.\n\
+ *\n\
+ * Calculates the frequency response at the given points.\n\
+ *\n\
+ * @b b coefficients of the filter\n\
+ * @a a coefficients of the filter\n\
+ * @w w points (normally between -PI and PI) where to calculate the frequency response\n\
+ * \n\
+ * @returns the frequency response in magnitude\n\
+ *\n\
+ */\n\
+DSP.freqz = function(b, a, w) {\n\
+ if (!w) {\n\
+ w = Array(200);\n\
+ for (var i=0;i<w.length; i++) {\n\
+ w[i] = DSP.TWO_PI/w.length * i - Math.PI;\n\
+ }\n\
+ }\n\
+\n\
+ var result = Array(w.length);\n\
+ \n\
+ var sqrt = Math.sqrt;\n\
+ var cos = Math.cos;\n\
+ var sin = Math.sin;\n\
+ \n\
+ for (var i=0; i<w.length; i++) {\n\
+ var numerator = {real:0.0, imag:0.0};\n\
+ for (var j=0; j<b.length; j++) {\n\
+ numerator.real += b[j] * cos(-j*w[i]);\n\
+ numerator.imag += b[j] * sin(-j*w[i]);\n\
+ }\n\
+\n\
+ var denominator = {real:0.0, imag:0.0};\n\
+ for (var j=0; j<a.length; j++) {\n\
+ denominator.real += a[j] * cos(-j*w[i]);\n\
+ denominator.imag += a[j] * sin(-j*w[i]);\n\
+ }\n\
+ \n\
+ result[i] = sqrt(numerator.real*numerator.real + numerator.imag*numerator.imag) / sqrt(denominator.real*denominator.real + denominator.imag*denominator.imag);\n\
+ }\n\
+\n\
+ return result;\n\
+};\n\
+\n\
+/* \n\
+ * Graphical Equalizer\n\
+ * \n\
+ * Created by Ricard Marxer <email@ricardmarxer.com> on 2010-05-23.\n\
+ * Copyright 2010 Ricard Marxer. All rights reserved.\n\
+ *\n\
+ */\n\
+// Implementation of a graphic equalizer with a configurable bands-per-octave\n\
+// and minimum and maximum frequencies\n\
+GraphicalEq = function(sampleRate) {\n\
+ this.FS = sampleRate;\n\
+ this.minFreq = 40.0;\n\
+ this.maxFreq = 16000.0;\n\
+\n\
+ this.bandsPerOctave = 1.0;\n\
+\n\
+ this.filters = []\n\
+ this.freqzs = []\n\
+\n\
+ this.calculateFreqzs = true;\n\
+\n\
+ this.recalculateFilters = function() {\n\
+ var bandCount = Math.round(Math.log(this.maxFreq/this.minFreq) * this.bandsPerOctave/ Math.LN2);\n\
+\n\
+ this.filters = [];\n\
+ for (var i=0; i<bandCount; i++) {\n\
+ var freq = this.minFreq*(Math.pow(2, i/this.bandsPerOctave));\n\
+ var newFilter = new Biquad(DSP.PEAKING_EQ, this.FS);\n\
+ newFilter.setDbGain(0);\n\
+ newFilter.setBW(1/this.bandsPerOctave);\n\
+ newFilter.setF0(freq);\n\
+ this.filters[i] = newFilter;\n\
+ this.recalculateFreqz(i);\n\
+ }\n\
+ }\n\
+\n\
+ this.setMinimumFrequency = function(freq) {\n\
+ this.minFreq = freq;\n\
+ this.recalculateFilters();\n\
+ }\n\
+\n\
+ this.setMaximumFrequency = function(freq) {\n\
+ this.maxFreq = freq;\n\
+ this.recalculateFilters();\n\
+ }\n\
+\n\
+ this.setBandsPerOctave = function(bands) {\n\
+ this.bandsPerOctave = bands;\n\
+ this.recalculateFilters();\n\
+ }\n\
+\n\
+ this.setBandGain = function(bandIndex, gain) {\n\
+ if (bandIndex < 0 || bandIndex > (this.filters.length-1)) {\n\
+ throw \"The band index of the graphical equalizer is out of bounds.\";\n\
+ return;\n\
+ }\n\
+\n\
+ if (!gain) {\n\
+ throw \"A gain must be passed.\"\n\
+ return;\n\
+ }\n\
+ \n\
+ \n\
+ this.filters[bandIndex].setDbGain(gain);\n\
+ this.recalculateFreqz(bandIndex);\n\
+ }\n\
+ \n\
+ this.recalculateFreqz = function(bandIndex) {\n\
+ if (!this.calculateFreqzs) {\n\
+ return;\n\
+ }\n\
+\n\
+ \n\
+ if (bandIndex < 0 || bandIndex > (this.filters.length-1)) {\n\
+ throw \"The band index of the graphical equalizer is out of bounds. \" + bandIndex + \" is out of [\" + 0 + \", \" + this.filters.length-1 + \"]\"\n\
+ return;\n\
+ }\n\
+ \n\
+ if (!this.w) {\n\
+ this.w = Array(400);\n\
+ for (var i=0; i<this.w.length; i++) {\n\
+ this.w[i] = Math.PI/this.w.length * i;\n\
+ }\n\
+ }\n\
+ \n\
+ var b = [this.filters[bandIndex].b0, this.filters[bandIndex].b1, this.filters[bandIndex].b2];\n\
+ var a = [this.filters[bandIndex].a0, this.filters[bandIndex].a1, this.filters[bandIndex].a2];\n\
+\n\
+ this.freqzs[bandIndex] = DSP.mag2db(DSP.freqz(b, a, this.w));\n\
+ }\n\
+\n\
+ this.process = function(buffer) {\n\
+ var output = buffer;\n\
+ \n\
+ for ( var i=0; i<this.filters.length; i++ ) {\n\
+ output = this.filters[i].process(output);\n\
+ }\n\
+\n\
+ return output;\n\
+ }\n\
+\n\
+ this.processStereo = function(buffer) {\n\
+ var output = buffer;\n\
+ \n\
+ for ( var i=0; i<this.filters.length; i++ ) {\n\
+ output = this.filters[i].processStereo(output);\n\
+ }\n\
+\n\
+ return output;\n\
+ }\n\
+\n\
+}\n\
+\n\
+\n\
+\n\
+/**\n\
+ * MultiDelay effect by Almer Thie (http://code.almeros.com).\n\
+ * Copyright 2010 Almer Thie. All rights reserved.\n\
+ * Example: http://code.almeros.com/code-examples/delay-firefox-audio-api/\n\
+ * \n\
+ * This is a delay that feeds it's own delayed signal back into its circular \n\
+ * buffer. Also known as a CombFilter.\n\
+ *\n\
+ * Compatible with interleaved stereo (or more channel) buffers and \n\
+ * non-interleaved mono buffers.\n\
+ * \n\
+ * @param {Number} maxDelayInSamplesSize Maximum possible delay in samples (size of circular buffer)\n\
+ * @param {Number} delayInSamples Initial delay in samples\n\
+ * @param {Number} masterVolume Initial master volume. Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ * @param {Number} delayVolume Initial feedback delay volume. Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ * \n\
+ * @constructor\n\
+ */\n\
+MultiDelay = function(maxDelayInSamplesSize, delayInSamples, masterVolume, delayVolume){\n\
+ this.delayBufferSamples = new Array(maxDelayInSamplesSize); // The maximum size of delay\n\
+ this.delayInputPointer = delayInSamples; \n\
+ this.delayOutputPointer = 0;\n\
+ \n\
+ this.delayInSamples = delayInSamples;\n\
+ this.masterVolume = masterVolume;\n\
+ this.delayVolume = delayVolume;\n\
+}\n\
+\n\
+/**\n\
+ * Change the delay time in samples.\n\
+ *\n\
+ * @param {Number} delayInSamples Delay in samples\n\
+ */\n\
+MultiDelay.prototype.setDelayInSamples = function (delayInSamples){\n\
+ this.delayInSamples = delayInSamples;\n\
+ \n\
+ this.delayInputPointer = this.delayOutputPointer + delayInSamples;\n\
+ if(this.delayInputPointer >= this.delayBufferSamples.length-1)\n\
+ this.delayInputPointer = this.delayInputPointer - this.delayBufferSamples.length; \n\
+}\n\
+\n\
+/**\n\
+ * Change the master volume.\n\
+ *\n\
+ * @param {Number} masterVolume Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ */\n\
+MultiDelay.prototype.setMasterVolume = function (masterVolume){\n\
+ this.masterVolume = masterVolume;\n\
+}\n\
+\n\
+/**\n\
+ * Change the delay feedback volume.\n\
+ *\n\
+ * @param {Number} delayVolume Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ */\n\
+MultiDelay.prototype.setDelayVolume = function (delayVolume){\n\
+ this.delayVolume = delayVolume;\n\
+}\n\
+\n\
+/**\n\
+ * Process a given interleaved or mono non-interleaved float value Array and adds the delayed audio.\n\
+ *\n\
+ * @param {Array} samples Array containing Float values or a Float32Array\n\
+ * \n\
+ * @returns A new Float32Array interleaved or mono non-interleaved as was fed to this function.\n\
+ */\n\
+MultiDelay.prototype.process = function (samples){\n\
+ // NB. Make a copy to put in the output samples to return. \n\
+ var outputSamples = new Array(samples.length);\n\
+\n\
+ for(var i=0; i<samples.length; i++){\n\
+ \n\
+ // delayBufferSamples could contain initial NULL's, return silence in that case\n\
+ var delaySample = (this.delayBufferSamples[this.delayOutputPointer]==null ? 0.0 : this.delayBufferSamples[this.delayOutputPointer]);\n\
+ \n\
+ // Mix normal audio data with delayed audio\n\
+ var sample = (delaySample * this.delayVolume) + samples[i]; \n\
+ \n\
+ // Add audio data with the delay in the delay buffer\n\
+ this.delayBufferSamples[this.delayInputPointer] = sample;\n\
+ \n\
+ // Return the audio with delay mix\n\
+ outputSamples[i] = sample * this.masterVolume;\n\
+ \n\
+ // Manage circulair delay buffer pointers\n\
+ this.delayInputPointer++;\n\
+ if(this.delayInputPointer >= this.delayBufferSamples.length-1)\n\
+ this.delayInputPointer = 0;\n\
+ \n\
+ this.delayOutputPointer++;\n\
+ if(this.delayOutputPointer >= this.delayBufferSamples.length-1)\n\
+ this.delayOutputPointer = 0; \n\
+ \n\
+ }\n\
+ \n\
+ return outputSamples;\n\
+}\n\
+\n\
+\n\
+\n\
+\n\
+/**\n\
+ * SingleDelay effect by Almer Thie (http://code.almeros.com).\n\
+ * Copyright 2010 Almer Thie. All rights reserved.\n\
+ * Example: See usage in Reverb class\n\
+ * \n\
+ * This is a delay that does NOT feeds it's own delayed signal back into its \n\
+ * circular buffer, neither does it return the original signal. Also known as \n\
+ * an AllPassFilter(?).\n\
+ *\n\
+ * Compatible with interleaved stereo (or more channel) buffers and \n\
+ * non-interleaved mono buffers.\n\
+ * \n\
+ * @param {Number} maxDelayInSamplesSize Maximum possible delay in samples (size of circular buffer)\n\
+ * @param {Number} delayInSamples Initial delay in samples\n\
+ * @param {Number} delayVolume Initial feedback delay volume. Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ * \n\
+ * @constructor\n\
+ */\n\
+SingleDelay = function(maxDelayInSamplesSize, delayInSamples, delayVolume){\n\
+ this.delayBufferSamples = new Array(maxDelayInSamplesSize); // The maximum size of delay\n\
+ this.delayInputPointer = delayInSamples; \n\
+ this.delayOutputPointer = 0;\n\
+ \n\
+ this.delayInSamples = delayInSamples;\n\
+ this.delayVolume = delayVolume;\n\
+}\n\
+\n\
+/**\n\
+ * Change the delay time in samples.\n\
+ *\n\
+ * @param {Number} delayInSamples Delay in samples\n\
+ */\n\
+SingleDelay.prototype.setDelayInSamples = function (delayInSamples){\n\
+ this.delayInSamples = delayInSamples;\n\
+ \n\
+ this.delayInputPointer = this.delayOutputPointer + delayInSamples;\n\
+ if(this.delayInputPointer >= this.delayBufferSamples.length-1)\n\
+ this.delayInputPointer = this.delayInputPointer - this.delayBufferSamples.length; \n\
+}\n\
+\n\
+/**\n\
+ * Change the return signal volume.\n\
+ *\n\
+ * @param {Number} delayVolume Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ */\n\
+SingleDelay.prototype.setDelayVolume = function (delayVolume){\n\
+ this.delayVolume = delayVolume;\n\
+}\n\
+\n\
+/**\n\
+ * Process a given interleaved or mono non-interleaved float value Array and \n\
+ * returns the delayed audio.\n\
+ *\n\
+ * @param {Array} samples Array containing Float values or a Float32Array\n\
+ * \n\
+ * @returns A new Float32Array interleaved or mono non-interleaved as was fed to this function.\n\
+ */\n\
+SingleDelay.prototype.process = function (samples){\n\
+ // NB. Make a copy to put in the output samples to return. \n\
+ var outputSamples = new Array(samples.length);\n\
+\n\
+ for(var i=0; i<samples.length; i++){\n\
+\n\
+ // Add audio data with the delay in the delay buffer\n\
+ this.delayBufferSamples[this.delayInputPointer] = samples[i];\n\
+ \n\
+ // delayBufferSamples could contain initial NULL's, return silence in that case\n\
+ var delaySample = this.delayBufferSamples[this.delayOutputPointer];\n\
+\n\
+ // Return the audio with delay mix\n\
+ outputSamples[i] = delaySample * this.delayVolume;\n\
+\n\
+ \n\
+ // Manage circulair delay buffer pointers\n\
+ this.delayInputPointer++;\n\
+ if(this.delayInputPointer >= this.delayBufferSamples.length-1)\n\
+ this.delayInputPointer = 0;\n\
+ \n\
+ this.delayOutputPointer++;\n\
+ if(this.delayOutputPointer >= this.delayBufferSamples.length-1)\n\
+ this.delayOutputPointer = 0; \n\
+ \n\
+ }\n\
+ \n\
+ return outputSamples;\n\
+}\n\
+\n\
+\n\
+\n\
+\n\
+\n\
+/**\n\
+ * Reverb effect by Almer Thie (http://code.almeros.com).\n\
+ * Copyright 2010 Almer Thie. All rights reserved.\n\
+ * Example: http://code.almeros.com/code-examples/reverb-firefox-audio-api/\n\
+ * \n\
+ * This reverb consists of 6 SingleDelays, 6 MultiDelays and an IIRFilter2 \n\
+ * for each of the two stereo channels.\n\
+ *\n\
+ * Compatible with interleaved stereo buffers only!\n\
+ * \n\
+ * @param {Number} maxDelayInSamplesSize Maximum possible delay in samples (size of circular buffers)\n\
+ * @param {Number} delayInSamples Initial delay in samples for internal (Single/Multi)delays\n\
+ * @param {Number} masterVolume Initial master volume. Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ * @param {Number} mixVolume Initial reverb signal mix volume. Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ * @param {Number} delayVolume Initial feedback delay volume for internal (Single/Multi)delays. Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ * @param {Number} dampFrequency Initial low pass filter frequency. 0 to 44100 (depending on your maximum sampling frequency)\n\
+ * \n\
+ * @constructor\n\
+ */\n\
+Reverb = function(maxDelayInSamplesSize, delayInSamples, masterVolume, mixVolume, delayVolume, dampFrequency){\n\
+ this.delayInSamples = delayInSamples;\n\
+ this.masterVolume = masterVolume;\n\
+ this.mixVolume = mixVolume;\n\
+ this.delayVolume = delayVolume;\n\
+ this.dampFrequency = dampFrequency;\n\
+ \n\
+ this.NR_OF_MULTIDELAYS = 6;\n\
+ this.NR_OF_SINGLEDELAYS = 6;\n\
+ \n\
+ this.LOWPASSL = new IIRFilter2(DSP.LOWPASS, dampFrequency, 0, 44100);\n\
+ this.LOWPASSR = new IIRFilter2(DSP.LOWPASS, dampFrequency, 0, 44100);\n\
+ \n\
+ this.singleDelays = [];\n\
+ for(var i = 0; i<this.NR_OF_SINGLEDELAYS; i++){\n\
+ var delayMultiply = 1.0 + (i/7.0); // 1.0, 1.1, 1.2... \n\
+ this.singleDelays[i] = new SingleDelay(maxDelayInSamplesSize, Math.round(this.delayInSamples * delayMultiply), this.delayVolume);\n\
+ }\n\
+ \n\
+ this.multiDelays = [];\n\
+ for(var i = 0; i<this.NR_OF_MULTIDELAYS; i++){\n\
+ var delayMultiply = 1.0 + (i/10.0); // 1.0, 1.1, 1.2... \n\
+ this.multiDelays[i] = new MultiDelay(maxDelayInSamplesSize, Math.round(this.delayInSamples * delayMultiply), this.masterVolume, this.delayVolume);\n\
+ }\n\
+}\n\
+\n\
+/**\n\
+ * Change the delay time in samples as a base for all delays.\n\
+ *\n\
+ * @param {Number} delayInSamples Delay in samples\n\
+ */\n\
+Reverb.prototype.setDelayInSamples = function (delayInSamples){\n\
+ this.delayInSamples = delayInSamples;\n\
+ \n\
+ for(var i = 0; i<this.NR_OF_SINGLEDELAYS; i++){\n\
+ var delayMultiply = 1.0 + (i/7.0); // 1.0, 1.1, 1.2...\n\
+ this.singleDelays[i].setDelayInSamples( Math.round(this.delayInSamples * delayMultiply) );\n\
+ }\n\
+ \n\
+ for(var i = 0; i<this.NR_OF_MULTIDELAYS; i++){\n\
+ var delayMultiply = 1.0 + (i/10.0); // 1.0, 1.1, 1.2...\n\
+ this.multiDelays[i].setDelayInSamples( Math.round(this.delayInSamples * delayMultiply) );\n\
+ }\n\
+}\n\
+\n\
+/**\n\
+ * Change the master volume.\n\
+ *\n\
+ * @param {Number} masterVolume Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ */\n\
+Reverb.prototype.setMasterVolume = function (masterVolume){\n\
+ this.masterVolume = masterVolume;\n\
+}\n\
+\n\
+/**\n\
+ * Change the reverb signal mix level.\n\
+ *\n\
+ * @param {Number} mixVolume Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ */\n\
+Reverb.prototype.setMixVolume = function (mixVolume){\n\
+ this.mixVolume = mixVolume;\n\
+}\n\
+\n\
+/**\n\
+ * Change all delays feedback volume.\n\
+ *\n\
+ * @param {Number} delayVolume Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ */\n\
+Reverb.prototype.setDelayVolume = function (delayVolume){\n\
+ this.delayVolume = delayVolume;\n\
+ \n\
+ for(var i = 0; i<this.NR_OF_SINGLEDELAYS; i++){\n\
+ this.singleDelays[i].setDelayVolume(this.delayVolume);\n\
+ } \n\
+ \n\
+ for(var i = 0; i<this.NR_OF_MULTIDELAYS; i++){\n\
+ this.multiDelays[i].setDelayVolume(this.delayVolume);\n\
+ } \n\
+}\n\
+\n\
+/**\n\
+ * Change the Low Pass filter frequency.\n\
+ *\n\
+ * @param {Number} dampFrequency low pass filter frequency. 0 to 44100 (depending on your maximum sampling frequency)\n\
+ */\n\
+Reverb.prototype.setDampFrequency = function (dampFrequency){\n\
+ this.dampFrequency = dampFrequency;\n\
+ \n\
+ this.LOWPASSL.set(dampFrequency, 0);\n\
+ this.LOWPASSR.set(dampFrequency, 0); \n\
+}\n\
+\n\
+/**\n\
+ * Process a given interleaved float value Array and copies and adds the reverb signal.\n\
+ *\n\
+ * @param {Array} samples Array containing Float values or a Float32Array\n\
+ * \n\
+ * @returns A new Float32Array interleaved buffer.\n\
+ */\n\
+Reverb.prototype.process = function (interleavedSamples){ \n\
+ // NB. Make a copy to put in the output samples to return. \n\
+ var outputSamples = new Array(interleavedSamples.length);\n\
+ \n\
+ // Perform low pass on the input samples to mimick damp\n\
+ var leftRightMix = DSP.deinterleave(interleavedSamples);\n\
+ this.LOWPASSL.process( leftRightMix[DSP.LEFT] );\n\
+ this.LOWPASSR.process( leftRightMix[DSP.RIGHT] ); \n\
+ var filteredSamples = DSP.interleave(leftRightMix[DSP.LEFT], leftRightMix[DSP.RIGHT]);\n\
+\n\
+ // Process MultiDelays in parallel\n\
+ for(var i = 0; i<this.NR_OF_MULTIDELAYS; i++){\n\
+ // Invert the signal of every even multiDelay\n\
+ outputSamples = mixSampleBuffers(outputSamples, this.multiDelays[i].process(filteredSamples), 2%i==0, this.NR_OF_MULTIDELAYS);\n\
+ }\n\
+ \n\
+ // Process SingleDelays in series\n\
+ var singleDelaySamples = new Array(outputSamples.length);\n\
+ for(var i = 0; i<this.NR_OF_SINGLEDELAYS; i++){\n\
+ // Invert the signal of every even singleDelay\n\
+ singleDelaySamples = mixSampleBuffers(singleDelaySamples, this.singleDelays[i].process(outputSamples), 2%i==0, 1); \n\
+ }\n\
+\n\
+ // Apply the volume of the reverb signal\n\
+ for(var i = 0; i<singleDelaySamples.length; i++){\n\
+ singleDelaySamples[i] *= this.mixVolume;\n\
+ }\n\
+ \n\
+ // Mix the original signal with the reverb signal\n\
+ outputSamples = mixSampleBuffers(singleDelaySamples, interleavedSamples, 0, 1); \n\
+\n\
+ // Apply the master volume to the complete signal\n\
+ for(var i = 0; i<outputSamples.length; i++){\n\
+ outputSamples[i] *= this.masterVolume;\n\
+ }\n\
+ \n\
+ return outputSamples;\n\
+}\n\
+\n\
+/**\n\
+ * Helper method (for Reverb) to mix two (interleaved) samplebuffers. It's possible \n\
+ * to negate the second buffer while mixing and to perform a volume correction \n\
+ * on the final signal.\n\
+ * \n\
+ * @param {Array} sampleBuffer1 Array containing Float values or a Float32Array\n\
+ * @param {Array} sampleBuffer2 Array containing Float values or a Float32Array\n\
+ * @param {Boolean} negate When true inverts/flips the audio signal\n\
+ * @param {Number} volumeCorrection When you add multiple sample buffers, use this to tame your signal ;)\n\
+ * \n\
+ * @returns A new Float32Array interleaved buffer.\n\
+ */\n\
+function mixSampleBuffers(sampleBuffer1, sampleBuffer2, negate, volumeCorrection){\n\
+ var outputSamples = new Array(sampleBuffer1);\n\
+\n\
+ for(var i = 0; i<sampleBuffer1.length; i++){\n\
+ outputSamples[i] += (negate ? -sampleBuffer2[i] : sampleBuffer2[i]) / volumeCorrection;\n\
+ }\n\
+ \n\
+ return outputSamples;\n\
+} \n\
+\n\
+\n\
+TalosContentProfiler.subtestStart('audio-fft', true).then(() => {\n\
+ var _sunSpiderStartDate = new Date();\n\
+\n\
+ var iterations = 1000;\n\
+\n\
+ var fft = new FFT(frameBufferLength / channels, rate);\n\
+\n\
+ var calcFFT = function() {\n\
+ var fb = getFramebuffer(),\n\
+ signal = DSP.getChannel(DSP.MIX, fb);\n\
+\n\
+ fft.forward(signal);\n\
+ };\n\
+\n\
+ runTest(calcFFT, iterations);\n\
+\n\
+\n\
+ var _sunSpiderInterval = new Date() - _sunSpiderStartDate;\n\
+ TalosContentProfiler.subtestEnd('audio-fft', true).then(() => {\n\
+ record(_sunSpiderInterval);\n\
+ })\n\
+});\n\
+</script>\n\
+\n\
+\n\
+</body>\n\
+</html>\n\
+", "<!DOCTYPE html>\n\
+<head>\n\
+\n\
+<meta charset=utf8>\n\
+\n\
+<!--\n\
+ Copyright (C) 2007 Apple Inc. All rights reserved.\n\
+\n\
+ Redistribution and use in source and binary forms, with or without\n\
+ modification, are permitted provided that the following conditions\n\
+ are met:\n\
+ 1. Redistributions of source code must retain the above copyright\n\
+ notice, this list of conditions and the following disclaimer.\n\
+ 2. Redistributions in binary form must reproduce the above copyright\n\
+ notice, this list of conditions and the following disclaimer in the\n\
+ documentation and/or other materials provided with the distribution.\n\
+\n\
+ THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY\n\
+ EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n\
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n\
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR\n\
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n\
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n\
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n\
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n\
+ OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n\
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \n\
+-->\n\
+\n\
+<title>SunSpider audio-oscillator</title>\n\
+<link rel=\"stylesheet\" href=\"../kraken.css\">\n\
+</head>\n\
+\n\
+<body>\n\
+<h3>audio-oscillator</h3>\n\
+<div id=\"console\">\n\
+</div>\n\
+<script>\n\
+var TalosContentProfiler = parent.TalosContentProfiler;\n\
+function record(time) {\n\
+ document.getElementById(\"console\").innerHTML = time + \"ms\";\n\
+ if (window.parent) {\n\
+ parent.recordResult(time);\n\
+ }\n\
+}\n\
+\n\
+\n\
+// Audio sample data.\n\
+var channels = 2,\n\
+ rate = 44100,\n\
+ frameBufferLength = 2048,\n\
+ getFramebuffer = (function(f) {\n\
+ var frames = f,\n\
+ current = 0,\n\
+ max = frames.length - 1;\n\
+\n\
+ return function() {\n\
+ if (current == max) {\n\
+ current = 0;\n\
+ }\n\
+ return frames[current++];\n\
+ };\n\
+ })([\n\
+new Array(-9.063918018914485e-12,-3.261597155551632e-12,-7.691810383070319e-11,-4.440857404031107e-12,-1.680772881984538e-10,6.000556301843929e-11,-1.9150961372282893e-10,2.4246665786265e-10,-4.565171851655947e-11,5.450795370620654e-10,3.362514988669574e-10,9.004306744664348e-10,9.466241124300723e-10,1.175186170598863e-9,1.6831636084901902e-9,1.1990984871701471e-9,2.3562511941577213e-9,8.144737662085788e-10,2.725613068577104e-9,-6.554523590551753e-11,2.5597279851297117e-9,-1.405781158148045e-9,1.7045438394092116e-9,-3.0212734536405605e-9,1.442163333198465e-10,-4.585516411026447e-9,-1.9632779846290305e-9,-5.679597681051973e-9,-4.288398525176262e-9,-5.877284880995148e-9,-6.374909933271056e-9,-4.851113288850684e-9,-7.722416484057248e-9,-2.47689069254875e-9,-7.892031916867381e-9,1.0892343693669204e-9,-6.61385790579061e-9,5.384448886758264e-9,-3.872107523505974e-9,9.678744916641335e-9,5.3583804060508555e-11,1.3082328997882087e-8,4.604661096863083e-9,1.4708005480201791e-8,9.020721947194943e-9,1.3861386705116274e-8,1.2467070042987416e-8,1.0221797630549645e-8,1.4191283703723911e-8,3.973642304089253e-9,1.3679061439120233e-8,-4.147063581427801e-9,1.0777899461800189e-8,-1.2912646063512057e-8,5.7606563963474855e-9,-2.0772752407083317e-8,-6.882053815715494e-10,-2.6112324746918603e-8,-7.566866244701487e-9,-2.7557987891668745e-8,-1.3718089775238695e-8,-2.427747425315374e-8,-1.8031725446121527e-8,-1.6211833653301255e-8,-1.965133300529942e-8,-4.18648893329987e-9,-1.8145057012475263e-8,1.0134575845199834e-8,-1.3606820559175503e-8,2.4460184988583933e-8,-6.6646101970491145e-9,3.6226321498133984e-8,1.6094849897285712e-9,4.304074607830444e-8,9.874586481828374e-9,4.314259527404829e-8,1.6751737774711728e-8,3.579163276867803e-8,2.1068517597200298e-8,2.1507027270217804e-8,2.2072077499046827e-8,2.0971653302837012e-9,1.9569721843026855e-8,-1.95445934991767e-8,1.3969719603323938e-8,-3.986041718917477e-8,6.212331538080207e-9,-5.5206413662745035e-8,-2.396835618867499e-9,-6.249566553151453e-8,-1.0421006280125766e-8,-5.979339334771794e-8,-1.6550259829273273e-8,-4.6752756333034995e-8,-1.9834619280345578e-8,-2.479977112557208e-8,-1.9848005905487298e-8,2.9843314486299732e-9,-1.6751785736346392e-8,3.2283470119409685e-8,-1.124725823586914e-8,5.8215224640889573e-8,-4.4262269405237475e-9,7.614446673187558e-8,2.4491135786064433e-9,8.2506318221931e-8,8.19313505928676e-9,7.549270009121756e-8,1.1920842091228678e-8,5.54726611312617e-8,1.3204600968208524e-8,2.5057047992049775e-8,1.2132561622024696e-8,-1.1224615015237305e-8,9.258342537066255e-9,-4.759798244435842e-8,5.454737994625702e-9,-7.796932521841882e-8,1.702851637475078e-9,-9.695299496570442e-8,-1.136488791964041e-9,-1.0082637658115345e-7,-2.519120245736417e-9,-8.824257946571379e-8,-2.3383373015661846e-9,-6.056658463649e-8,-9.41838385060123e-10,-2.176004265663778e-8,9.601706096873386e-10,2.218358652328334e-8,2.4775965723478066e-9,6.417361220201201e-8,2.774252605419747e-9,9.717964388755718e-8,1.3009872068536765e-9,1.1542026356892165e-7,-2.0265045197476184e-9,1.153803879105908e-7,-6.7495498079495064e-9,9.647719423355738e-8,-1.1913705577626388e-8,6.124944462726489e-8,-1.623966028319046e-8,1.502435864608742e-8,-1.8389696876397466e-8,-3.4896281420060404e-8,-1.7278706465617688e-8,-8.040503729489501e-8,-1.2363916113145024e-8,-1.1392285870215346e-7,-3.8492862231009894e-9,-1.2967566931365582e-7,7.248555089489628e-9,-1.2469702426187723e-7,1.920039238711979e-8,-9.9380230267343e-8,2.98255180553042e-8,-5.747872222627848e-8,3.68760453284267e-8,-5.544654957390094e-9,3.8477701025385613e-8,4.810972953350756e-8,3.3544857558354124e-8,9.4760721935927e-8,2.2083437301034792e-8,1.2670979288031958e-7,5.314396478439676e-9,1.3856883640528395e-7,-1.442367381088161e-8,1.2817720573821134e-7,-3.3992773040836255e-8,9.6993083786856e-8,-4.995281699393672e-8,4.988867274846598e-8,-5.91591415854964e-8,-5.620970799924407e-9,-5.9357120107961236e-8,-6.059254786805468e-8,-4.9664652834735534e-8,-1.0611310585773026e-7,-3.084448252366201e-8,-1.3476119420374744e-7,-5.303653960453403e-9,-1.4182997176703793e-7,2.3200103171916453e-8,-1.26107053688429e-7,5.0111530924823455e-8,-9.008256540710136e-8,7.080907948875392e-8,-3.954905736236469e-8,8.139625862213506e-8,1.7340529012699335e-8,7.941753921159034e-8,7.14021481940108e-8,6.436970778622708e-8,1.1391774989988335e-7,3.790681546433916e-8,1.3805393450638803e-7,3.6889740151480055e-9,1.399694014025954e-7,-3.312028695745539e-8,1.1943076572151767e-7,-6.66380657321497e-8,7.98368589016718e-8,-9.120827826336608e-8,2.7651497092051613e-8,-1.023566014168864e-7,-2.8660446460548883e-8,-9.759249763874323e-8,-8.001645568356253e-8,-7.691699011047604e-8,-1.1819189182915579e-7,-4.293638866670335e-8,-1.3714550561871874e-7,-5.487733045761445e-10,-1.3398140197296016e-7,4.376378370807288e-8,-1.0939224637240841e-7,8.29331057161653e-8,-6.751718473196888e-8,1.1043897529816604e-7,-1.5242454409758466e-8,1.2139599903093767e-7,3.8936597945848916e-8,1.1341180794488537e-7,8.630295411649058e-8,8.706772547384389e-8,1.193270264820967e-7,4.592902058675463e-8,1.3286879152474285e-7,-3.930692660247814e-9,1.2498067292199266e-7,-5.482997877948037e-8,9.718515769918668e-8,-9.866953121218103e-8,5.418847948135408e-8,-1.28227270579373e-7,3.083594934949474e-9,-1.3834954870617366e-7,-4.782260987212794e-8,-1.26842650161052e-7,-9.036366321879541e-8,-9.491133567962606e-8,-1.1782764630652309e-7,-4.70599381685588e-8,-1.2601940113654564e-7,9.539609990838471e-9,-1.1390253007448337e-7,6.612728498112119e-8,-8.372249027388534e-8,1.1371697183903962e-7,-4.059829450397956e-8,1.4452912466822454e-7,8.344371416058038e-9,1.5326465074849693e-7,5.515137502243306e-8,1.3801113141198584e-7,9.23356182624957e-8,1.0062770883223493e-7,1.1407795597051518e-7,4.653392693398928e-8,1.1714049463762422e-7,-1.6075322406550185e-8,1.0134900918501444e-7,-7.747640040633996e-8,6.957183984468429e-8,-1.2793385906206822e-7,2.7206713326677345e-8,-1.5925049012821546e-7,-1.8734009898935255e-8,-1.6610192687949166e-7,-6.078472836179571e-8,-1.4693922878450394e-7,-9.224238795013662e-8,-1.0430580488218766e-7,-1.0823826812611514e-7,-4.45076224764307e-8,-1.0649359438730244e-7,2.3321303999068732e-8,-8.764186532062013e-8,8.862036082746272e-8,-5.5072241877951456e-8,1.410538743584766e-7,-1.4327970809802082e-8,1.7215407410731132e-7,2.783478691981145e-8,1.7669236740402994e-7,6.45675726218542e-8,1.5355695381913392e-7,9.00446011087297e-8,1.0598996880162304e-7,1.0038979780802038e-7,4.1135439943218444e-8,9.426747737961705e-8,-3.103694723449735e-8,7.304740989866332e-8,-9.927160249389999e-8,4.052454016800766e-8,-1.5279019294212048e-7,2.248076613753369e-9,-1.8300160320450232e-7,-3.542269766398931e-8,-1.8488543673811364e-7,-6.637513649820903e-8,-1.578263635337862e-7,-8.573766052677456e-8,-1.0576047060339988e-7,-9.064876138609179e-8,-3.660183267584216e-8,-8.067998180649738e-8,3.896485267773642e-8,-5.78489469660326e-8,1.091430661404047e-7,-2.6230463134879756e-8,1.6287407333948067e-7,8.762894410097033e-9,1.9158729003265762e-7,4.1304232922811934e-8,1.9057252131915448e-7,6.612271619133026e-8,1.597534549091506e-7,7.93595944514891e-8,1.0373634040661273e-7,7.916997901702416e-8,3.1118556620413074e-8,6.597691282195228e-8,-4.683636234403821e-8,4.234251704815506e-8,-1.1795428633831762e-7,1.2487103795422172e-8,-1.7106017935475393e-7,-1.8456139727618392e-8,-1.9774194015553803e-7,-4.5320295072315275e-8,-1.936883222697361e-7,-6.376741623626003e-8,-1.5938736908083229e-7,-7.099095000739908e-8,-1.0007260442534971e-7,-6.614403957883042e-8,-2.4920090879732015e-8,-5.042738848715089e-8,5.4377210290113e-8,-2.6831063593135696e-8,1.2543733873826568e-7,4.190550129123949e-10,1.7713182387524284e-7,2.660926767816818e-8,2.0133609268668806e-7,4.734960157293244e-8,1.9421217700710258e-7,5.9309229527571006e-8,1.568193965795217e-7,6.075319447518268e-8,9.495667541159492e-8,5.1793612954043056e-8,1.8258184297792468e-8,3.4318482278195006e-8,-6.131359242544931e-8,1.1618418227499205e-8,-1.3134261678260373e-7,-1.2217928002655754e-8,-1.8090540265802701e-7,-3.3030893575869413e-8,-2.0228301877978083e-7,-4.731122515977404e-8,-1.9216858504478296e-7,-5.279125758761438e-8,-1.5218093096791563e-7,-4.880642023863402e-8,-8.86045441461647e-8,-3.636942480511607e-8,-1.1396908305982834e-8,-1.794975901248108e-8,6.737802493717027e-8,2.9967353043502953e-9,1.354440257728129e-7,2.2661327037099e-8,1.8223443021270214e-7,3.756455413395088e-8,2.0054038429861976e-7,4.51666153367114e-8,1.8762639797387237e-7,4.429934108429734e-8,1.4564022876584204e-7,3.534657722070733e-8,8.125561379301871e-8,2.0145094481449632e-8,4.6065018466379115e-9,1.627221024591563e-9,-7.23151174497616e-8,-1.672687943710116e-8,-1.3754423378031788e-7,-3.1527999766467474e-8,-1.8101286514138337e-7,-4.0092068331887276e-8,-1.9611144352893461e-7,-4.0920408395095365e-8,-1.8069772522721905e-7,-3.3960340317662485e-8,-1.373995388576077e-7,-2.060184201013726e-8,-7.316809558233217e-8,-3.4121434566714015e-9,1.8424062275812503e-9,1.4342575127557211e-8,7.58872715778125e-8,2.930133291556558e-8,1.3747893490290153e-7,3.862820463496064e-8,1.771775828274258e-7,4.053629965028449e-8,1.8904509602180042e-7,3.4620917688243935e-8,1.7153544717984914e-7,2.1940055106028922e-8,1.2769024237968551e-7,4.8280348607931955e-9,6.461311841121642e-8,-1.3525756514809473e-8,-7.684699099286263e-9,-2.9658723477155036e-8,-7.788023737020922e-8,-4.047191026756991e-8,-1.3512089935829863e-7,-4.380772722356596e-8,-1.7071022284653736e-7,-3.8862765450176084e-8,-1.794353323703035e-7,-2.6359270322018347e-8,-1.6033061456255382e-7,-8.440215637506299e-9,-1.1676839051233401e-7,1.1695799884137159e-8,-5.586884554986682e-8,3.035879103663319e-8,1.2666705906383413e-8,4.4031899903984595e-8,7.810783131390053e-8,5.001792047210074e-8,1.3038322776992572e-7,4.6951285526120046e-8,1.6163825478088256e-7,3.50808093685373e-8,1.6741982733492478e-7,1.6268021596488325e-8,1.4730845521171432e-7,-6.305238997583729e-9,1.0490954593933566e-7,-2.867316517551899e-8,4.721489688108704e-8,-4.677700715660649e-8,-1.6551972237266455e-8,-5.7190277402696665e-8,-7.641661170509906e-8,-5.775084588321988e-8,-1.232217812230374e-7,-4.798507191594581e-8,-1.500348929539541e-7,-2.9243762966757458e-8,-1.531775808416569e-7,-4.518951435272811e-9,-1.327244092408364e-7,2.2034459590258848e-8,-9.240281428901653e-8,4.5795644609825104e-8,-3.8925911383103085e-8,6.247649508850373e-8,1.9126481731746026e-8,6.888492265488821e-8,7.268964452578075e-8,6.35182573205384e-8,1.1363691498900153e-7,4.687864318952961e-8,1.360183716769825e-7,2.144827604411148e-8,1.3692603317849716e-7,-8.680026475360592e-9,1.1685883549716891e-7,-3.846272988994315e-8,7.954528058462529e-8,-6.274878217027435e-8,3.126580239154464e-8,-7.716540295632512e-8,-2.020383149670124e-8,-7.889514108683215e-8,-6.68497079914232e-8,-6.720723888520297e-8,-1.0167435959829163e-7,-4.3645762559663126e-8,-1.1975075153713988e-7,-1.1832858248794764e-8,-1.1891678042275089e-7,2.308856750232735e-8,-1.0001188144315165e-7,5.528772462071174e-8,-6.663564988684811e-8,7.921842382074828e-8,-2.4482059046704308e-8,9.056988403699506e-8,1.9629631253792468e-8,8.703290887979165e-8,5.8861960638978417e-8,6.874705604786868e-8,8.742540558159817e-8,3.8344889929931014e-8,1.0143502748860556e-7,5.755360632520024e-10,9.94316948776941e-8,-3.843843643380751e-8,8.249778460367452e-8,-7.219536968250395e-8,5.3968339130960885e-8,-9.489680508067977e-8,1.8800008660946332e-8,-1.0243961412470526e-7,-1.728548326696e-8,-9.314704385587902e-8,-4.873542280847687e-8,-6.811089292568795e-8,-7.102593002628055e-8,-3.107823687287237e-8,-8.131225115448615e-8,1.2109261149362283e-8,-7.877756758034593e-8,5.4438466179362877e-8,-6.463856294658399e-8,8.88658746589499e-8,-4.182719237633137e-8,1.0948871675964256e-7,-1.441798502810343e-8,1.1255299625645421e-7,1.309215491573923e-8,9.71264810800676e-8,3.652399271913964e-8,6.531689678013208e-8,5.2654801407925333e-8,2.1990270937521927e-8,5.965749494407646e-8,-2.597437287477078e-8,5.7280796994518823e-8,-7.077982644432268e-8,4.6758000138424904e-8,-1.0498003177872306e-7,3.0479803569960495e-8,-1.2271735272406659e-7,1.1502635288707097e-8,-1.207218360832485e-7,-7.012232572378707e-9,-9.89030155551518e-8,-2.232631501897231e-8,-6.042829170382902e-8,-3.253148150861307e-8,-1.126556270492074e-8,-3.677537208091053e-8,4.0744591700558885e-8,-3.5281200183590045e-8,8.714194166259404e-8,-2.9175275528814382e-8,1.2022522355437104e-7,-2.0171768255750067e-8,1.3433009371510707e-7,-1.0184898258103203e-8,1.2679538485826924e-7,-9.48340073136933e-10,9.845307857858643e-8,6.285233666858403e-9,5.355287413522092e-8,1.0912705405985434e-8,-8.745786317376769e-10,1.2994831877222168e-8,-5.6121411518006425e-8,1.3126058462376022e-8,-1.0319883614329228e-7,1.2198796639495413e-8,-1.3430187095764268e-7,1.1121471743535949e-8,-1.4410350956950424e-7,1.0556746588008536e-8,-1.306638210962774e-7,1.0739150013705512e-8,-9.579873250231685e-8,1.1414194034387037e-8,-4.4841215185442707e-8,1.1911470920722422e-8,1.4175789431192243e-8,1.1336403815676022e-8,7.178886107794824e-8,8.836241960352709e-9,1.186250813134393e-7,3.879819132635021e-9,1.4692922434278444e-7,-3.515509661156102e-9,1.5184838275672519e-7,-1.2668508020396985e-8,1.3226078010575293e-7,-2.226547479722285e-8,9.100791231730909e-8,-3.054695696391718e-8,3.4484436639559135e-8,-3.5622434779725154e-8,-2.835523815747365e-8,-3.585806140904424e-8,-8.741915280552348e-8,-3.0262789607604645e-8,-1.331023611328419e-7,-1.8791553202390787e-8,-1.5785127516210196e-7,-2.495440298844187e-9,-1.5741350978260016e-7,1.6527152979506354e-8,-1.315653577194098e-7,3.5388893593335524e-8,-8.419365826739522e-8,5.085162513296382e-8,-2.2711049041390652e-8,5.987803319840168e-8,4.3106652469759865e-8,6.020332676826001e-8,1.0267898886695548e-7,5.082233300868211e-8,1.4632553302362794e-7,3.229512657298983e-8,1.6684182924109336e-7,6.800249252592039e-9,1.6068939601154852e-7,-2.209532112829038e-8,1.2860309084317123e-7,-4.9929113288271765e-8,7.551252423354526e-8,-7.203408358691377e-8,9.782965548765787e-9,-8.431845088807677e-8,-5.810602488054428e-8,-8.400549944553859e-8,-1.1723588499990001e-7,-7.020152992254225e-8,-1.5800895880602184e-7,-4.4182222325162e-8,-1.737094663667449e-7,-9.329681915914989e-9,-1.6161074256615393e-7,2.929103004589706e-8,-1.2344602851044328e-7,6.566628485416004e-8,-6.51622968916854e-8,9.377239962304884e-8,4.008910536867916e-9,1.0857223031734975e-7,7.30174321006416e-8,1.0690452256767458e-7,1.3076454763449874e-7,8.811070983938407e-8,1.6789185508514493e-7,5.428115912309295e-8,1.7830146248343226e-7,1.0058755606223713e-8,1.6015852111195272e-7,-3.7988669987498724e-8,1.1621219186963572e-7,-8.234437132159655e-8,5.337874142696819e-8,-1.1572207370136312e-7,-1.8349950892115885e-8,-1.3226288331225078e-7,-8.749950097808323e-8,-1.2855345232765103e-7,-1.429532971997105e-7,-1.0428958319153026e-7,-1.757441623340128e-7,-6.246106920571037e-8,-1.8050761241283908e-7,-9.007450785247784e-9,-1.5636099703897344e-7,4.8020453391472984e-8,-1.0706388309245085e-7,9.967530445464945e-8,-4.043157275646081e-8,1.3752170957559429e-7,3.290755046236882e-8,1.5501495909120422e-7,1.0121155469278165e-7,1.4862459352116275e-7,1.535100864202832e-7,1.18511877644778e-7,1.8137095025849703e-7,6.863422186142998e-8,1.8026273096438672e-7,6.241009486984694e-9,1.502937152508821e-7,-5.9178759670430736e-8,9.6205269528582e-8,-1.1734320537470921e-7,2.661998621533712e-8,-1.587992954910078e-7,-4.7336740749415185e-8,-1.7646118521952303e-7,-1.1382016396055405e-7,-1.6681565284670796e-7,-1.621684049268879e-7,-1.305898820191942e-7,-1.8461685158399632e-7,-7.275829716490989e-8,-1.7754862824403972e-7,-1.8693526726565324e-9,-1.4207904541763128e-7,7.12196168706214e-8,-8.387929995024024e-8,1.350101968000672e-7,-1.226757717631699e-8,1.791784427496168e-7,6.128705365426868e-8,1.9624867775291932e-7,1.2500586876740272e-7,1.8285521719008102e-7,1.6869270780262013e-7,1.4037811979505932e-7,1.8536968582338886e-7,7.483755837256467e-8,1.7239531757695659e-7,-3.954397698180401e-9,1.3188457614887739e-7,-8.386642491586827e-8,7.036361182599649e-8,-1.523217889598527e-7,-2.283826461280114e-9,-1.982851216553172e-7,-7.440858951213158e-8,-2.140455137578101e-7,-1.3446904745251231e-7,-1.9650781268865103e-7,-1.7288331832787662e-7,-1.4777623391637462e-7,-1.8356305986344523e-7,-7.492307929624076e-8,-1.648810297183445e-7,1.1036519254048471e-8,-1.199205286184224e-7,9.681468782218872e-8,-5.59659980581273e-8,1.689130897375435e-7,1.6679663872309902e-8,2.1575439745902258e-7,8.635897330577791e-8,2.2954650091833173e-7,1.419358568455209e-7,2.0757832430717826e-7,1.745807907127528e-7,1.5273110420821467e-7,1.791784427496168e-7,7.311207639304484e-8,1.5513171547354432e-7,-1.9145318219671026e-8,1.064367722847237e-7,-1.0973732855745766e-7,4.1019006857823115e-8,-1.8441545535097248e-7,-3.0559448305211845e-8,-2.3123673997815786e-7,-9.680942980594409e-8,-2.424790750410466e-7,-1.4716398766267957e-7,-2.15915846979442e-7,-1.7366949123243103e-7,-1.5523812635365175e-7,-1.7224643045210541e-7,-6.954682874038554e-8,-1.4331929776290053e-7,2.801593268486613e-8,-9.171864689960785e-8,1.2229020285303704e-7,-2.5874314246721042e-8,1.9846278576096665e-7,4.356334670774231e-8,2.4440464585495647e-7,1.054514413567631e-7,2.5260820279982e-7,1.4994745356489148e-7,2.214165988334571e-7,1.7008042618726904e-7,1.5534149611085013e-7,1.6284681692013692e-7,6.44118358650303e-8,1.2965963946953707e-7,-3.735416953531967e-8,7.608232976963336e-8,-1.3411838040156e-7,1.0896656021941453e-8,-2.1069845956844802e-7,-5.533853197903227e-8,-2.5495873501313326e-7,-1.1200258853705236e-7,-2.5974125605898735e-7,-1.5012123810720368e-7,-2.2402615229566436e-7,-1.6379334510929766e-7,-1.5313399615024537e-7,-1.5110805406948202e-7,-5.793131663267559e-8,-1.1440880598456715e-7,4.684170562541112e-8,-5.986959195070085e-8,1.4486286659121106e-7,3.543078719303594e-9,2.207816862664913e-7,6.554610365583358e-8,2.626331934152404e-7,1.1621221318591779e-7,2.637312945807935e-7,1.4756460586795583e-7,2.2374074148956424e-7,1.548379913174358e-7,1.487551344325766e-7,1.372055606907452e-7,5.036477546127571e-8,9.785939880657679e-8,-5.614236897599767e-8,4.344204285189335e-8,-1.5416648579957837e-7,-1.707385877125489e-8,-2.2839421376374958e-7,-7.386714173662767e-8,-2.672012158200232e-7,-1.1786644904532295e-7,-2.6448051926308835e-7,-1.4220435673450993e-7,-2.2060758908537537e-7,-1.4329432929116592e-7,-1.423892257435e-7,-1.2135944871261017e-7,-4.200282432975655e-8,-8.033579490529519e-8,6.490785153800971e-8,-2.7174962724529905e-8,1.6168131367066962e-7,2.9331772566365544e-8,2.3324616904574214e-7,8.000931472906814e-8,2.684793400931085e-7,1.1679284739329887e-7,2.619423185024061e-7,1.3401688647718402e-7,2.1472467892635905e-7,1.2929177728437935e-7,1.3426242162495328e-7,1.0383159576576872e-7,3.3161711598950205e-8,6.218888870535011e-8,-7.2784388294167e-8,1.1450310921645723e-8,-1.6707475936073024e-7,-3.9966550957615254e-8,-2.350818988361425e-7,-8.37119387142593e-8,-2.6633134098119626e-7,-1.1286404344446055e-7,-2.5612271770114603e-7,-1.2302950835874071e-7,-2.062390649371082e-7,-1.1300813440584534e-7,-1.2463814869079215e-7,-8.492092717915511e-8,-2.4177921886803233e-8,-4.378986773190263e-8,7.941886792650621e-8,3.3493563478259603e-9,1.7003641517021606e-7,4.864789104885858e-8,2.3368514234789473e-7,8.475183221889893e-8,2.606714133435162e-7,1.0600088984347167e-7,2.47080549797829e-7,1.093205383995155e-7,1.9534485318217776e-7,9.466675976455008e-8,1.1381365538909449e-7,6.495940851891646e-8,1.540166749691707e-8,2.5524627744744066e-8,-8.446616561741394e-8,-1.6848247241796344e-8,-1.7028382615080773e-7,-5.507182265773736e-8,-2.2888355033501284e-7,-8.29474018360088e-8,-2.5146613324977807e-7,-9.61746167149613e-8,-2.3492745526709768e-7,-9.30190964254507e-8,-1.8228004705633793e-7,-7.453374450960837e-8,-1.0211371659352153e-7,-4.430629019225307e-8,-7.190720907601644e-9,-7.786582045810064e-9,8.7595566355958e-8,2.868361548280518e-8,1.6756843024268164e-7,5.8966605820387485e-8,2.2055249360164453e-7,7.816283442707572e-8,2.387361348610284e-7,8.340805379702942e-8,2.1982599207603926e-7,7.430342918723909e-8,1.6732249719098036e-7,5.291352067615662e-8,8.988544664134679e-8,2.3342494159805938e-8,-9.657696864451282e-11,-9.029974989971379e-9,-8.849696087054326e-8,-3.851283736366895e-8,-1.6168071681477159e-7,-6.009787512084586e-8,-2.086184167637839e-7,-7.031114535038796e-8,-2.2255642306845402e-7,-6.777638361654681e-8,-2.0198783090563666e-7,-5.339874320497984e-8,-1.5078565240855824e-7,-3.0144647666929814e-8,-7.74920465573814e-8,-2.4640200990688754e-9,6.107484296080656e-9,2.4536632281524362e-8,8.688752473062777e-8,4.6019223987059377e-8,1.5245490203597e-7,5.827331506225164e-8,1.930607993472222e-7,5.9356413117939155e-8,2.0305571979406523e-7,4.9406320812295235e-8,1.8167025928050862e-7,3.057391495531192e-8,1.3301294643497386e-7,6.593907642127306e-9,6.530615337396739e-8,-1.7924634221344604e-8,-1.0502304803594598e-8,-3.8357740095307236e-8,-8.251703320638626e-8,-5.09184445718347e-8,-1.3977266632991814e-7,-5.334685226898728e-8,-1.7391343476447219e-7,-4.531527508788713e-8,-1.8041541238744685e-7,-2.847492908131244e-8,-1.5917244411411957e-7,-6.137511832093878e-9,-1.1437219882282079e-7,1.7349023551105347e-8,-5.37032178726804e-8,3.741698151316086e-8,1.296049845223024e-8,5.013745862925134e-8,7.517348876717733e-8,5.296352867389942e-8,1.2356650813671877e-7,4.5221725031296955e-8,1.512654534963076e-7,2.825746747703306e-8,1.548669530393454e-7,5.2072621770093974e-9,1.3483074212672364e-7,-1.9566755327105056e-8,9.524914901248849e-8,-4.127851127577742e-8,4.305459810893808e-8,-5.561204829973576e-8,-1.3186848946133978e-8,-5.95453570895188e-8,-6.468775382018066e-8,-5.194998209390178e-8,-1.0382181869772467e-7,-3.385292757229763e-8,-1.252602146450954e-7,-8.305409693321053e-9,-1.266889739781618e-7,2.01266487920293e-8,-1.0901331393142755e-7,4.616561000148067e-8,-7.604103302583098e-8,6.477917224856355e-8,-3.372076662344625e-8,7.212108243948023e-8,1.0917915460595395e-8,6.628347648529598e-8,5.093718868920405e-8,4.771956696458801e-8,8.057844524955726e-8,1.924885140169863e-8,9.609434670210248e-8,-1.4367117273650365e-8,9.62030739515285e-8,-4.7215870324635034e-8,8.211441127059516e-8,-7.326191564516193e-8,5.714957751479233e-8,-8.743310786485381e-8,2.6044631340482738e-8,-8.657399064304627e-8,-5.926722224103287e-9,-7.00910334217042e-8,-3.384931801519997e-8,-4.016405341644713e-8,-5.3931231036585814e-8,-1.4717116414431075e-9,-6.401522512078373e-8,3.953713800797232e-8,-6.376927785822772e-8,7.571323124011542e-8,-5.454768370327656e-8,1.0044124110208941e-7,-3.897437750310928e-8,1.0882675383072637e-7,-2.034499857472838e-8,9.862651495495811e-8,-1.9718697785719996e-9,7.074959285091609e-8,1.3404161336438847e-8,2.9227308573354094e-8,2.4029375822465227e-8,-1.9362573766557034e-8,2.931786724502672e-8,-6.693563392445867e-8,2.9780522936562193e-8,-1.0524054516736214e-7,2.673979793144099e-8,-1.2727836917747481e-7,2.1905208313910407e-8,-1.2855795716859575e-7,1.6910888689380954e-8,-1.0796576077609643e-7,1.2917411140733748e-8,-6.808754449139087e-8,1.0364715308242012e-8,-1.4907442391631776e-8,8.924573080548726e-9,4.308567014277287e-8,7.658934819687602e-9,9.625129138157718e-8,5.343167686078232e-9,1.3539460042011342e-7,8.767813142185332e-10,1.5334450154114165e-7,-6.316128065009252e-9,1.4624281163833075e-7,-1.5995510693755932e-8,1.1431623647695233e-7,-2.7000339741789503e-8,6.198324342676642e-8,-3.7368934613368765e-8,-2.7429507554188604e-9,-4.467732850343964e-8,-6.947900033082988e-8,-4.65375258329459e-8,-1.271353227139116e-7,-4.11612219863855e-8,-1.657535761978579e-7,-2.787074038224091e-8,-1.7821416520291677e-7,-7.4418835538381245e-9,-1.6152242210409895e-7,1.78118000349059e-8,-1.174446140339569e-7,4.425945121511177e-8,-5.236780964423815e-8,6.74662032906781e-8,2.361669260153576e-8,8.292775532936503e-8,9.827665792272455e-8,8.690673070077537e-8,1.5920657858714549e-7,7.721943973137968e-8,1.9588374300383293e-7,5.381905054946401e-8,2.01472317939988e-7,1.9046609622819233e-8,1.7406878782821877e-7,-2.252760111787211e-8,1.1716433334640897e-7,-6.468043523000233e-8,3.9226861758834275e-8,-1.0046120735296427e-7,-4.755322891014657e-8,-1.2333094900895958e-7,-1.291692797167343e-7,-1.283278550090472e-7,-1.920576551128761e-7,-1.1305681368867226e-7,-2.2534644017468963e-7,-7.831395976154454e-8,-2.2272135424827866e-7,-2.8210422442498384e-8,-1.835907994518493e-7,3.026283934559615e-8,-1.1333888494391431e-7,8.819482388844335e-8,-2.2601398086408153e-8,1.3610795690510713e-7,7.434063320488349e-8,1.6550283987726289e-7,1.6180867135062726e-7,1.70341195371293e-7,2.2526110399212484e-7,1.482129619034822e-7,2.537052807838336e-7,1.0096973568352041e-7,2.415877418115997e-7,3.468574050202733e-8,1.8983951122208964e-7,-4.1086096302933584e-8,1.0588495058527769e-7,-1.1468043936702088e-7,2.5876758513732057e-9,-1.7411272779099818e-7,-1.0371854131108194e-7,-2.0902572828163102e-7,-1.9581293031478708e-7,-2.124729689967353e-7,-2.5837624662017333e-7,-1.8223526865313033e-7,-2.805332712796371e-7,-1.2142896821387694e-7,-2.5772834533199784e-7,-3.826910699444852e-8,-1.9261226213984628e-7,5.501317446032772e-8,-9.477400908508571e-8,1.4396246683645586e-7,2.0663790678554506e-8,2.141380548437155e-7,1.353819669702716e-7,2.5345423182443483e-7,2.3077254240888578e-7,2.542422521401022e-7,2.909561942487926e-7,2.1468599697982427e-7,3.054196326957026e-7,1.3936859488694608e-7,2.708362671910436e-7,3.880498411490407e-8,1.9175661236658925e-7,-7.20061592573984e-8,8.003340923323776e-8,-1.7581527345100767e-7,-4.695015576317019e-8,-2.5569300987626775e-7,-1.6888239429135865e-7,-2.9772394327665097e-7,-2.6572107003630663e-7,-2.942533399163949e-7,-3.216046877696499e-7,-2.4395217224082444e-7,-3.2649120385030983e-7,-1.5415402287999314e-7,-2.794814122353273e-7,-3.692490579965124e-8,-1.8526327494328143e-7,9.23838996413906e-8,-5.7667513431169937e-8,2.1058662014183938e-7,7.687667391564901e-8,2.963788858778571e-7,2.0058980965131923e-7,3.4519857194936776e-7,3.073854202284565e-7,3.573021274405619e-7,3.7416907616716344e-7,3.1087432716958574e-7,3.706501559008757e-7,1.8159762760205922e-7,2.960990173050959e-7,3.2668427962789792e-9,1.7206878055731067e-7,-1.4935011449779267e-7,2.215257310922425e-8,-2.558177527589578e-7,-1.244094391950057e-7,-3.4790230074577266e-7,-2.48221766696588e-7,-4.0844787463356624e-7,-3.424703720611433e-7,-3.83691684646692e-7,-3.784057298616972e-7,-3.049817678402178e-7,-3.52345750798122e-7,-2.4648699081808445e-7,-3.195747524387116e-7,-1.5783344053943438e-7,-2.518800101825036e-7,3.3997068271673925e-8,-6.30552534630624e-8,2.2121484732906538e-7,1.4892148669787275e-7,3.141547040286241e-7,2.5954253146664996e-7,4.2449011061762576e-7,3.912932697858196e-7,5.711276571673807e-7,5.997012522129808e-7,5.73685213112185e-7,6.688356961603859e-7,3.7676232977901236e-7,5.146665671418305e-7,1.2447100061763194e-7,2.9143745905457763e-7,-7.52123909819602e-8,5.3134645128238844e-8,-2.977363067202532e-7,-2.6843949285648705e-7,-6.520573947454977e-7,-6.28192310614395e-7,-9.370967291033594e-7,-8.570544878239161e-7,-8.548654477635864e-7,-9.001176977108116e-7,-5.94005030052358e-7,-8.865962399795535e-7,-4.7458777885367454e-7,-8.468994110444328e-7,-3.512149930884334e-7,-6.936784302524757e-7,-8.961339403867896e-8,-4.980943231203128e-7,1.230076236424793e-7,-3.2142719419425703e-7,2.4483753691129095e-7,-8.036778353925911e-8,3.2601849397906335e-7,1.5931499319776776e-7,2.634457132444368e-7,3.075739698488178e-7,1.0006087336478231e-7,4.02592405635005e-7,-1.3917727414991532e-8,2.7964540549874073e-7,-1.6491451049205352e-7,-1.252113293048751e-7,-4.322458266869944e-7,-3.4416802918713074e-7,-5.973930683467188e-7,-1.608441806411065e-7,-5.607481625702349e-7,-9.189005822918261e-8,-6.423296667890099e-7,-4.1814701035036705e-7,-8.845384513733734e-7,-6.042727704880235e-7,-6.649395345448283e-7,-1.4977459272813576e-7,2.076261296224402e-7,6.342019105431973e-7,9.887080523185432e-7,0.0000011756283129216172,0.0000012178294355180697,0.0000014045423313291394,0.0000012169082310720114,0.0000014515543398374575,0.0000013197013686294667,0.0000013726862562180031,0.0000014580078868675628,0.0000013222773986854008,0.0000011356053164490731,0.0000010844875077964389,1.0777938541650656e-7,2.2619612138896628e-7,-7.482602768504876e-7,-7.17060970600869e-7,-6.657965059275739e-7,-8.349057907253155e-7,-3.209282795069157e-7,-3.6607696074497653e-7,-3.680989948406932e-7,-1.1575120595352928e-7,-4.95609242534556e-7,-3.544887476891745e-7,-5.947504178038798e-7,-8.185001547644788e-7,-7.568756359432882e-7,-9.477171829530562e-7,-7.301545679183619e-7,-6.806443479945301e-7,-6.662963869530358e-7,-7.349966608671821e-7,-9.223255688084464e-7,-0.0000011680775742206606,-9.623134928915533e-7,-0.0000011299755442450987,-5.716998430216336e-8,-4.1727275856828783e-7,0.0000012798651596312993,4.575892944558291e-7,0.0000017962800029636128,0.0000010811531865329016,0.0000012475534276745748,0.0000010263622698403196,6.50961169412767e-7,3.0017449148544983e-7,6.232056648514117e-7,-2.1072614231343323e-7,5.681872607965488e-7,-1.0082136014943899e-7,5.6389637848042184e-8,-3.821854477337183e-8,-1.9356215830157453e-7,-8.707064580448787e-8,3.1259128263627645e-7,3.307707174826646e-7,6.644752374995733e-7,5.657690280713723e-7,2.2780943709221901e-7,-9.992874083764036e-8,-3.080589294768288e-8,-4.176954746526462e-7,3.027119532816869e-7,2.994362375829951e-7,2.1587086962426838e-7,4.623799156888708e-7,-6.439171329475357e-8,-1.8978136040459503e-7,6.838890840299428e-7,1.823492823405104e-7,0.0000016455330751341535,0.000001461430429117172,0.0000012464244036891614,0.0000017142567685368704,1.521793251413328e-7,8.734431844459323e-7,-2.2615671468884102e-7,3.06045933484711e-7,-2.8238775939826155e-7,7.30272518012498e-8,-0.00000103277864127449,-6.274767088143562e-7,-0.0000019067788343818393,-0.0000013300996215548366,-0.0000018798998553393176,-0.0000011391654197723255,-0.0000017127154023910407,-0.0000010173259852308547,-0.000002217254632341792,-0.0000019248880107625155,-0.0000020913898879371118,-0.0000021242335606075358,-5.66933863410668e-7,-2.713406956900144e-7,8.740189514355734e-7,0.0000017201797390953288,0.000001283963001696975,0.0000020493916963459924,0.000001458434553569532,0.0000017541703982715262,0.0000023141244582802756,0.0000024709238459763583,0.000003410554882066208,0.0000036500086935120635,0.000002940127160400152,0.0000032614680094411597,9.374844012199901e-7,0.0000014839671393929166,5.367808171286015e-7,0.0000010193630259891506,0.0000026928789793601027,0.000002544775270507671,0.0000042918609324260615,0.000004003791673312662,0.0000036620276659959927,0.000004126029125472996,0.0000026585357773001306,0.0000032682805795047898,0.000002984725369969965,0.000002696561978154932,0.0000035732336982619017,0.0000029659092888323357,0.0000024645387384225614,0.0000024580745048297103,7.03024511494732e-7,8.939995268519851e-7,3.9872708157417946e-7,4.0552660607318103e-7,2.736072133302514e-7,5.195767585064459e-7,-6.794140290367068e-7,-3.420753387217701e-7,-8.344152320205467e-7,-9.72813950284035e-7,-8.701111937625683e-7,-0.0000012382436125335516,-0.0000019544306724128546,-0.0000023187603801488876,-0.000002346559995203279,-0.0000032190364436246455,-0.000002146023462046287,-0.0000034883794342022156,-0.000002175008376070764,-0.0000032290981835103594,-7.618077688675839e-7,-0.0000014997837070040987,3.1260697141988203e-7,-6.726122592226602e-7,-0.0000018081600501318462,-0.0000030780636279814644,-0.0000033705023270158563,-0.0000045586630221805535,-0.0000017679449229035527,-0.0000024891428438422736,-7.876126346673118e-7,-8.457274702777795e-7,-0.000001939183221111307,-0.0000018313490954824374,-0.0000030375533697224455,-0.0000032928546715993434,-0.000002612765911180759,-0.0000027941657663177466,-1.2583780062414007e-7,-1.304837837778905e-7,0.000002071829158012406,0.0000012727984994853614,0.0000010511553227843251,-1.8225119902126607e-7,-8.205987001019821e-7,-6.519076123367995e-7,-5.326791665538622e-7,7.292591703844664e-7,3.8590383155678865e-7,6.530359542011865e-7,8.554245312097919e-8,-2.893132773351681e-7,-0.0000011364130614310852,-3.044409879748855e-7,-0.0000015163764146564063,-2.6364565997027967e-7,2.97657777537097e-7,6.473703706433298e-8,0.000001827797973419365,7.450047974089102e-7,0.0000011695537978084758,8.898541636881419e-7,0.0000016373277276215958,0.00000214285728361574,0.000004091570190212224,0.000004667096163757378,0.000004342218744568527,0.000004851250650972361,0.0000016070987385319313,0.000002105672592733754,-8.746696380512731e-7,-4.304055778447946e-7,-9.53932840275229e-7,-0.000001061122361534217,9.499452744421433e-7,-3.891087771989987e-7,0.0000013530089972846326,-2.494775799277704e-7,-0.0000016349131328752264,-0.00000132011086861894,-0.0000037219176647340646,-0.0000016550230839129654,-0.0000018801339365381864,-5.213034341977618e-7,3.8171768323991273e-7,4.5613657562171284e-7,5.042894031248579e-7,8.237010433731484e-7,3.6334296282802825e-7,8.760717378208938e-7,0.0000012198424883536063,2.7994315132673364e-7,0.000002176149791921489,-5.067900019639637e-7,0.000002342127800147864,-8.856314934746479e-7,0.0000014781663821850088,-0.0000013078295069135493,-3.082652710872935e-7,-0.0000021032362838013796,-0.000002368892637605313,-0.000002730813321250025,-0.0000034160445920861093,-0.0000024211738036683528,-0.0000029086347694828874,-0.000001562975739943795,-0.0000019350463844602928,-0.0000014834488410997437,-0.0000014534834917867556,-0.0000016977220411718008,-0.000001213783093589882,-6.728521384502528e-7,-5.774323881269083e-7,6.11771270087047e-7,9.30576675273187e-7,8.939668418861402e-7,0.0000027284738735033898,0.0000018481326833352796,0.000003407468284422066,0.000004100708338228287,0.000003105833684458048,0.000004962969796906691,0.0000029469849778251955,0.0000037807042190252105,0.000002233268787676934,0.0000031275560559151927,8.682991392561235e-8,0.0000028762378860847093,-0.0000017796860447560903,6.71204247737478e-7,-0.000001924816388054751,-0.0000020046747977175983,-0.0000019394990431464976,-0.000002175224835809786,-0.000002797315119096311,-9.022790550261561e-7,-0.0000029163450108171673,-4.2059861016241484e-7,-0.000002293946636200417,-8.709507710591424e-7,-0.000002271910261697485,-0.000001970868197531672,-0.000001801297685233294,-0.0000029321738566068234,-4.773514774569776e-7,-0.000002368856030443567,5.963245541806828e-8,-3.129603953766491e-7,8.343644140040851e-7,0.000001990498731174739,0.0000029133886982890544,0.0000031243421290128026,0.0000034031081668217666,0.0000025283086415583966,0.0000014670375776404398,0.0000014539837138727307,1.7197021406900603e-7,6.120799866948801e-7,7.339646117543452e-7,-1.7980983102461323e-7,0.00000206096865440486,2.195063188992208e-7,0.0000024490736905136146,9.115740340348566e-7,0.000001012251686915988,-7.794897669555212e-7,2.7506416699907277e-8,-0.0000024963355826912448,4.2787877418959397e-7,-0.0000011866404747706838,-6.74784530474426e-7,1.879491264844546e-7,-0.000002654897798493039,-3.367568979228963e-7,-0.0000023314582904276904,-6.135625199021888e-7,-7.370135222117824e-7,5.8683184533947497e-8,8.916401839087484e-7,0.0000014124995004749508,0.000002813352239172673,0.0000026935217647405807,0.0000029301741051313,0.0000022357385205395985,0.000001388805912938551,0.0000018279930600328953,0.000001394297441947856,0.0000029639745662279893,0.0000018493608422431862,0.0000016150321471286588,3.5992877656099154e-7,-0.000002704265398278949,-0.0000010994443755407701,-0.000004828819328395184,-0.0000013743367617280455,-0.000005059882369096158,-0.000002426815854050801,-0.000006455979018937796,-0.000003922141331713647,-0.000006152407877380028,-0.0000028160709462099476,-0.0000024322541776200524,0.0000010553062566032168,3.0933875905247987e-7,0.0000034888794289145153,4.5727097131020855e-7,0.000002063457259282586,0.0000012197371006550384,-2.0020483049165705e-8,0.0000027144808427692624,2.0493121155595873e-7,0.000002951913074866752,5.058386705059092e-7,0.0000032117116006702418,-0.0000018270185364599456,0.0000033168328172905603,-0.000004480983534449479,4.185849320492707e-7,-0.000003851749170280527,-0.0000025518065740470774,-0.000001983080892387079,-0.0000010308563105354551,-0.000002553476633693208,0.0000011045649443985894,-0.000003134451389996684,-7.845445111342997e-7,-0.0000015007548199719167,-0.000004307928065827582,-7.732348876743345e-7,-0.000005889574822504073,-6.64547201267851e-7,-0.0000036463213746174006,0.0000014335303148982348,9.660944897404988e-7,0.0000030718933885509614,0.000002293975967404549,0.000004045246441819472,4.4917024411006423e-7,0.00000643897510599345,0.000001357122073386563,0.000005552279162657214,0.000003269643684689072,7.760314701954485e-8,9.674236025603022e-7,-0.000001983548600037466,-0.000003136755140076275,6.122683657849848e-7,-0.000005188488557905657,0.0000012430969036358874,-0.000005397181666921824,-0.0000011439969966886565,-0.000004655254997487646,-0.0000034371810215816367,-0.0000031633135222364217,-0.000004312693818064872,-4.008234952834755e-7,-0.0000041818429963313974,0.0000022276451545621967,-0.000004215441549604293,0.0000017187583125632955,-0.0000034841016258724267,6.790135671508324e-7,-0.0000010553040965533,0.0000027846174361911835,2.2888437456458632e-7,0.0000037306460853869794,-3.539622639436857e-7,4.354231180059287e-7,-4.999796487936692e-8,-0.000002381189915467985,3.447065068939992e-7,-0.0000015586550716761849,-0.000001388713258165808,0.0000010854568017748534,-0.0000035118382584187202,0.0000024505141027475474,-0.0000027599924123933306,0.0000012928514934174018,3.452988153185288e-7,9.147630066763668e-7,4.678361165133538e-8,0.0000029235700367280515,-0.000004951607479597442,0.000002497083642083453,-0.0000061007790463918354,-0.000002038024604189559,-8.928830084187211e-7,-0.000005155670351086883,0.0000024980663511087187,-0.0000027834005322802113,0.0000030437615805567475,0.0000020207432953611715,0.000005872328074474353,0.0000023667914774705423,0.000008525761586497538,-0.000001744319888530299,0.000006328796189336572,-0.0000031836743801250122,5.817118449158443e-7,-0.000002760403958745883,-0.0000035621792449092027,-0.000005721019078919198,-0.0000031907666198094375,-0.00000798531254986301,-0.0000031328777367889415,-0.000007057904895191314,-0.000006145962288428564,-0.0000067292294261278585,-0.000004455939688341459,-0.0000036864155390503583,0.0000028903127713419963,0.000003648249503385159,0.0000055629725466133095,0.0000065096337493741885,0.000002313576715096133,0.000003299622903796262,-7.386475431303552e-7,0.0000011346337487339042,-0.000002999298430950148,0.0000012600233958437457,-0.000004482871645450359,0.0000012339850172793376,-0.000005028339273849269,-3.190280040143989e-8,-0.0000065708190959412605,-0.000002137759793185978,-0.000007463507699867478,-0.000002253582579214708,-0.000006214255336089991,-7.441607294822461e-7,-0.000005036740731156897,-8.026523801163421e-7,-0.0000038829380173410755,-0.0000014424687151404214,-0.000002219082944066031,-0.0000020632605810533278,-2.967931038710958e-7,-0.0000033134051591332536,0.000003112592821707949,-0.000001956977257577819,0.000004888274361292133,0.000001258301949746965,0.000002539396518841386,0.0000012315238109295024,0.0000029573939173133112,-3.9749210145600955e-7,0.000007965088116179686,-3.201979836831015e-7,0.000008430645721091423,-5.8561276716773136e-8,0.0000023614306883246172,-6.812036303927016e-7,-0.000002683240154510713,-0.000002635863893374335,-0.000002422957550152205,-0.000004931941020913655,6.032428245816845e-7,-0.000004697282747656573,9.093607786780922e-7,-0.000004782049927598564,-0.0000014407632988877594,-0.0000074239114837837406,-7.167645890149288e-7,-0.000005518366833712207,0.0000017230380535693257,0.0000018537798496254254,3.114373328116926e-7,0.00000475042725156527,-0.000002284921265527373,0.000001991696535696974,-0.0000018958348846354056,0.0000018167754660680657,-4.297342002246296e-7,0.000005431287263490958,-2.5431930339436803e-7,0.000006547586508531822,-0.0000019510043784976006,0.0000021715609364036936,-0.000005160231921763625,-0.000003922723863070132,-0.00000864976755110547,-0.0000069777229327883106,-0.00001098142092814669,-0.000004680390702560544,-0.000009758781743585132,0.0000025811777959461324,-0.0000064820569605217315,0.000006200225016073091,-0.0000068604194893850945,-0.000001493326294621511,-0.000008256333785539027,-0.00000808436016086489,-0.000005116302872920642,-0.0000019706062630575616,-0.0000036357112094265176,9.638056326366495e-7,-0.000006723561000399059,-0.000010043848305940628,-0.000005082299139758106,-0.000017330961782136,0.0000022783654003433185,-0.000010823952834471129,0.000007848390850995202,4.930726049678924e-8,0.000009791321645025164,0.000010214233043370768,0.000006767637387383729,0.000014693004231958184,6.522810167552962e-7,0.00000584156759941834,0.000001056483142747311,-0.0000061027412812109105,0.000005941973086009966,-0.000003799846808760776,0.0000032200546229432803,0.000007958360583870672,-0.000002986663048432092,0.000010821105206559878,-0.0000017829129319579806,5.535289915314934e-7,0.000002348450379940914,-0.000008360521860595327,0.0000030174969651852734,-0.0000035998295970784966,0.000003019416453753365,0.000005565047104028054,0.0000018894493223342579,0.0000023230936676554848,-0.0000034996205613424536,-0.000009694063919596374,-0.000008751128007133957,-0.000014601409930037335,-0.000007933239430713002,-0.000009449898243474308,-0.000002970120021927869,-0.000001097449057851918,-9.543623491481412e-7,0.00000434171261076699,-0.000004111882390134269,6.79061088249e-7,-0.000004496859673963627,-0.000008936454833019525,0.0000034232402867928613,-0.00000979360265773721,0.000009566062544763554,-3.9706472421130456e-7,0.000004433742105902638,0.000003042325033675297,-0.0000030128887829050655,-0.0000029714519769186154,-0.000003187324637110578,-0.000004348108632257208,-0.0000033043913845176576,0.000002110427658408298,-0.000010759151336969808,0.0000043579448174568824,-0.00001797520599211566,-8.999119245345355e-7,-0.000014672106772195548,-0.0000032756438486103434,-0.000003837559233943466,7.575903282486252e-7,0.0000024387154553551227,0.0000023866900846769568,0.00000110207599846035,-3.6517462831398007e-7,8.478238555653661e-7,3.2741291988713783e-7,0.000003992907295469195,0.0000034631802918738686,0.0000039670776459388435,0.000002545645429563592,0.0000018931576732938993,0.000001866697971308895,0.000004212356543575879,0.0000053428002502187155,0.000007821597137080971,0.000004359905233286554,0.000005222345862421207,-0.000005469212737807538,-0.0000021719831693189917,-0.000014025296877662186,-0.000007200156233011512,-0.000013071728062641341,-0.000008534292646800168,-0.00000858534622238949,-0.00000976859428192256,-0.000009199759006150998,-0.000009531527211947832,-0.000010971834853990003,-0.000005088163561595138,-0.000006511634637718089,-0.000001014210738503607,-0.0000015070510244186153,-3.342962884289591e-7,-0.0000030100443382252706,8.833947049424751e-7,-0.000003861757249978837,0.000002195649585701176,0.000002458319613651838,-1.23842681887254e-7,0.00000901737621461507,-0.000003161710992571898,0.000009653032066125888,-0.0000028306942567724036,0.000009005831088870764,9.146923218850134e-9,0.000010942871995212045,0.0000025969563921535155,0.000009264066648029257,0.0000022111939870228525,6.530254381686973e-8,-9.742769861986744e-7,-0.000006675535132671939,-0.000003203911774107837,-0.000003444060439505847,-0.0000023708191747573437,0.000001115949544328032,5.889252463475714e-8,-4.270693807484349e-7,0.000001317725491389865,-0.0000026383902422821848,0.0000010433889201522106,1.8245710009523464e-7,0.0000014354809536598623,0.000004203336175123695,0.000001658768496781704,6.893950512676383e-7,0.0000023416355361405294,-0.000008033041922317352,0.000007374636879831087,-0.000007646023732377216,0.000008112931027426384,5.110888992021501e-7,-0.0000038381062950065825,0.0000019791827980952803,-0.000011966791134909727,8.282994201636029e-8,-0.00000741668827686226,-9.075603202290949e-7,-0.000007570427897007903,-0.000009879624485620297,-0.000012811858141503762,-0.000015449104466824792,-0.000011708017154887784,-0.000005085837074148003,-0.000013832926015311386,-0.000002735949237830937,-0.00001657587563386187,-0.000017186963304993697,-0.0000036362621358421165,-0.000018992810510098934,0.000007856337106204592,-0.0000052445338951656595,0.0000016284280945910723,0.0000011946658560191281,-1.574869372689136e-7,0.0000027136939024785534,0.00000893616470420966,0.000007166011528170202,0.000008467269253742415,0.0000052992504606663715,0.000002132426743628457,-0.0000022123847429611487,0.0000036260689739719965,-0.000002493302417860832,0.0000036938338325853692,0.000005352163043426117,-0.000002791706265270477,0.000009312153451901395,-0.000001128120175053482,0.0000035371313060750253,0.00001125568087445572,-0.0000020741836124216206,0.000012978097402083222,2.395776448338438e-7,-0.000004805451681022532,0.000002885989260903443,-0.00001947880446095951,-1.5120596685846976e-7,-0.000016683519788784906,-0.000007136851309041958,-0.000011193683349119965,-0.000014262281183619052,-0.000010445800398883875,-0.000009302071703132242,-0.000006918155577295693,0.000010121770174009725,-0.0000032635687148285797,0.000020283247067709453,-0.0000016351533531633322,0.000010875545740418602,0.000003298426008768729,7.659355674149992e-7,0.000006105294687586138,-0.0000028685344659606926,0.0000018908134507000796,-0.000006559243047377095,-0.0000019376418549654773,-0.000005664392574544763,-0.000003935931545129279,2.3137319260513323e-7,-0.00000724212304703542,-4.4132727339274425e-7,-0.000008509233339282218,-0.000007299334811250446,-0.000008296520718431566,-0.00000775383068685187,-0.000009888088243314996,-6.643310825893423e-7,-0.000009194859558192547,0.0000012217028597660828,-0.0000027014796160074184,-0.000005580995548370993,0.000005727384177589556,-0.000007603383437526645,0.000008626728231320158,6.461232260335237e-8,0.0000024963719624793157,0.00000464674667455256,-0.0000041028060877579264,2.581153353276022e-7,2.623970658532926e-7,-0.000006722665148117812,0.000012226168109918945,-0.000011507665476528928,0.000016527443222003058,-0.000011158333109051455,0.0000042172537177975755,-0.0000065073568293883,-0.000012681543921644334,-0.0000026030968456325354,-0.000012896824046038091,2.7767310939452727e-7,-7.741859917587135e-7,1.6417632764387236e-7,-2.5143609150291013e-7,-0.000006684098025289131,-0.000011173764505656436,-0.000009685449185781181,-0.000015014666132628918,-0.0000022032122615200933,-0.000009355964721180499,-1.9668235040626314e-7,-0.0000019861199689330533,-0.000008735361916478723,2.1953218265480245e-7,-0.000010307759112038184,-0.000009043864338309504,-7.931564027785498e-7,-0.00001973225880647078,0.0000075621992436936125,-0.000012366611372272018,0.000009776677870831918,0.00000898778216651408,0.000007269413345056819,0.0000215316831599921,0.0000028081617529096548,0.00001463560329284519,0.0000013555286386690568,-8.18370210708963e-7,0.000003976112566306256,-0.000005741392214986263,0.000006475459940702422,0.0000016396104456362082,0.0000032634761737426743)\n\
+\n\
+,\n\
+\n\
+new Array(0.000003079756197621464,-0.000007045533948257798,-0.000005584218797594076,-0.000014535641639668029,-0.000009336939911008812,-0.000009002875231090002,-0.000005781885192845948,0.00000253107532444119,-0.000002653517412909423,0.0000052440332183323335,2.61081083863246e-7,-0.000004180499217909528,-0.000001123604306485504,-0.00001392687681800453,-0.000013051283531240188,-0.000008770004569669254,-0.00002213554034824483,0.000006507052603410557,-0.000012553733540698886,0.000008663148946652655,0.0000043216405174462125,-0.000003365547172506922,0.000009666131518315524,-0.0000036936494325345848,0.000008714309842616785,0.000011746677955670748,0.00001345210421277443,0.000016736059478716925,0.000014740943697688635,0.0000011494975069581415,0.0000037885874917265028,-0.000013101015611027833,-0.0000028683189157163724,-0.000007050486146908952,0.000006106271939643193,0.000007029236712696729,0.000013492718608176801,0.000005168927600607276,0.000007264246960403398,-0.000009827103895077016,-0.00000253483312917524,-0.000016045227312133648,-0.000009338813470094465,-0.000011414746950322296,-0.000013670570297108497,-0.000009242834494216368,-0.000013137173482391518,-0.000009129987120104488,-0.000011171797268616501,-0.0000058122036534768995,-0.000011200489097973332,-0.000004491418167162919,-0.00000646262924419716,-0.000006156059498607647,3.744167713648494e-7,-0.000003603997356549371,-0.0000037651313959941035,9.045492106452002e-7,-0.000011486084076750558,-0.0000013693146456716931,-0.000005032851731812116,-0.000007804138476785738,0.000005861616500624223,-0.000010557558198343031,0.000001025069195748074,-0.000010377891157986596,-0.00001071288625098532,-0.000007369986633420922,-0.000011507268027344253,0.0000020538736862363294,-0.000008385878572880756,0.000009365067853650544,-0.000009505479283689056,0.000005552293714572443,-0.000003929438207705971,0.000001957044105438399,0.000007157846994232386,0.000005618156137643382,0.000008056893420871347,0.000004114352577744285,0.000004444902970135445,-0.0000015129552366488497,0.000009714583939057775,0.0000034346257962170057,0.000016184803826035932,0.000013940394637756981,0.000017429176295991056,0.0000162159776664339,0.000018516269847168587,0.000009985662472900003,0.00001675341081863735,-5.474975068864296e-7,0.000010761052180896513,-0.000010513853339944035,0.000006836903139628703,-0.000015860308849369176,0.0000032462696708535077,-0.000019273027646704577,-0.0000022639590042672353,-0.0000182041221705731,-0.00000642911572867888,-0.000009331621185992844,-0.000010752169146144297,-0.000006398724053724436,-0.00001092150341719389,-0.000013978446986584459,-0.0000019830717974400613,-0.000011518278370203916,-7.679133773308422e-7,0.00000411232394981198,-0.000015622126738890074,0.00001020661602524342,-0.000023934420823934488,0.000003655438376881648,-0.000017996595488511957,0.000005628106464428129,-0.000014397246559383348,0.000023149037588154897,-0.000012422369763953611,0.00003686188574647531,-0.000005164674803381786,0.000029579034162452444,-0.000004279142558516469,0.000011904862731171306,-0.000011054169590352103,0.0000026817510843102355,-0.000007146421012294013,7.300119477804401e-7,0.00000716379463483463,-9.475870115238649e-7,0.000011135504792036954,-0.0000028848432975792093,0.000004333846391091356,-0.00001217265071318252,0.00000525720497535076,-0.000030126569981803186,0.000012700701518042479,-0.000037628265999956056,0.000014790118257224094,-0.00002364890133321751,0.000018574042769614607,-0.000005623247034236556,0.00002481713454471901,-0.0000035716459478862816,0.000016272791981464252,-0.00001041365885612322,7.962548806972336e-7,-0.000004117006483284058,0.000002073728182949708,0.000012243942364875693,0.000011528453796927352,0.000014823122910456732,0.00001140338645200245,0.000006756795755791245,0.000006846646101621445,0.000009838297046371736,0.0000024178214061976178,0.000019338038327987306,-0.0000035010277770197717,0.000020548633983707987,-0.00000739722554499167,0.000016951227735262364,-0.000011693926353473216,0.00001124812479247339,-0.000018294836991117336,4.6700102984686964e-7,-0.000020315797883085907,-0.00001102216265280731,-0.000019213801351725124,-0.000017865449990495108,-0.000017930700778379105,-0.00001534548937343061,-0.000010813826520461589,-0.000003645355718617793,-0.000004975350748281926,0.0000019148487808706705,-0.000009077783943212125,-0.000004406498646858381,-0.000008117423021758441,-0.000006159430995467119,0.0000044337293729768135,-0.0000020885263438685797,0.00001081783830159111,-0.0000062843064370099455,0.000009586233318259474,-0.000010778067007777281,0.000013238699466455728,-0.0000024827570541674504,0.000012394535588100553,0.000008359386811207514,-0.0000011964989425905515,0.000011864392945426516,-0.000006844144081696868,0.00001212747156387195,0.000005946681085333694,0.000008978144251159392,0.000013611196663987357,0.0000014777727983528166,0.000004516868557402631,-0.000001135800971496792,-4.0124223232851364e-7,0.000004324659130361397,0.000007783763066981919,0.0000074882691478705965,0.00001351374066871358,0.000005585980943578761,0.000013525607755582314,0.0000072519515015301295,0.00001596198126208037,0.000011330633242323529,0.00001667377546255011,0.000011497910236357711,0.00001142141263699159,0.00001416644317941973,0.0000030732642244402086,0.000019874687495757826,-0.000009063298421096988,0.000012172569768154062,-0.00001685972347331699,-0.000006543353720189771,-0.000007671710591239389,-0.00000897354129847372,0.0000036098872442380525,0.000008662557775096502,-0.000004769496172229992,0.000016347627024515532,-0.000018694472601055168,-0.0000016639005480101332,-0.00001712615448923316,-0.000021529813238885254,-0.00001112355494115036,-0.00001515701660537161,-0.000012410739145707339,0.000004771038675244199,-0.000005557539680012269,0.000004452776920516044,0.00001637774403207004,-0.000011125454875582363,0.000028977285182918422,-0.00000831189208838623,0.000017143711374956183,0.00001176083787868265,0.0000014372878922586096,0.000018619317415868863,-4.095253984814917e-7,0.0000057142856348946225,0.000003475568746580393,-0.0000069119478212087415,0.000007696536158618983,-0.000003389268840692239,0.000012544330274977256,0.000012063308531651273,0.0000075440393629833125,0.00001954874096554704,-0.000004191128937236499,0.000009394925655215047,-0.000002214434289271594,-0.000004688718945544679,0.000007948830898385495,-0.000009118418347497936,0.0000011970444120379398,-0.0000056666431191843,-0.00002026224865403492,-0.0000019875728867191356,-0.00002999846219609026,-0.000003943970114050899,-0.000012564681128424127,-0.000010138632205780596,0.00001746085581544321,-0.000013649312677443959,0.000027959269573329948,-0.000010523734999878798,0.000012849625818489585,0.000001351437390439969,-3.670769785912853e-7,0.00001497308949183207,0.000002791178758343449,0.000012750263522320893,0.000013458100511343218,4.066057215368346e-7,0.00002175646659452468,0.0000032445300348626915,0.00001627408346394077,0.000014102012755756732,3.48547814610356e-7,0.000009687917554401793,0.0000011480459534141119,-4.2791418763954425e-7,0.000019152239474351518,-6.341405196508276e-7,0.000018948061551782303,0.0000036513481518340996,-0.0000062531571529689245,0.000009545680768496823,-0.000024813129130052403,0.000016652278645779006,-0.000018440034182276577,0.000017343440049444325,-3.587248897929385e-7,0.000010243666110909544,0.00000628847419648082,-2.8749840907948965e-7,-0.000003840634690277511,-0.000006959578513487941,-0.000013347347703529522,1.2497545753831218e-7,-0.000008933499884733465,0.000012038509339618031,0.000004157961939199595,0.00000892525349627249,0.000014358175576489884,-0.0000017458401089243125,0.000015531888493569568,0.0000011401114079490071,0.000013105558537063189,0.000012283217984077055,0.000013530539945350029,0.000011530215488164686,0.00001159277690021554,5.350490255295881e-7,0.0000063530819716106635,-6.013257234371849e-7,0.0000031688239232607884,0.000008902071385819,-0.0000030289324968180154,0.0000104135970104835,-0.000009928397048497573,0.000004485893896344351,-0.000005377505658543669,-0.0000013817983699482284,0.0000027258081445324933,-0.00001797814547899179,0.000005427595169749111,-0.00003357703462825157,0.00001153597349912161,-0.000016713764125597663,0.00001749700095388107,0.00001582923869136721,0.000018839591575670056,0.000024307311832671985,0.000028232167096575722,0.000012363442692731041,0.00003313900015200488,4.921504341837135e-7,0.000008201181117328815,-0.000004780452854902251,-0.00002234796374978032,-3.537929842423182e-7,-0.000019479883121675812,0.0000035339492114871973,0.0000019553631318558473,-0.000006310787284746766,0.0000048780952965898905,-0.000016523783415323123,-0.000006488742656074464,-0.00000970436303759925,-0.000006401556220225757,0.0000040938898564490955,-0.0000037819918361492455,0.0000036536346215143567,-0.000015109381820366252,-0.000009658116141508799,-0.000016028870959416963,-0.000012950125892530195,2.9602941253870085e-7,-0.0000048607880671625026,-0.0000029371478831308195,-0.000002008118826779537,-0.000014304634532891214,0.000009825911547522992,0.000006691116141155362,0.00003514895070111379,0.00003057632056879811,0.00003202812513336539,0.0000256546882155817,0.000005390306341723772,0.00002182609387091361,0.000009715551641420461,0.000023998347387532704,0.000029058137442916632,0.000014241700228012633,0.000018586209989734925,0.000014010002814757172,0.0000015582974128847127,0.000022730857381247915,-4.4055727244085574e-7,0.000007286446361831622,-0.000004155114311288344,-0.000015673245798097923,-0.0000013827599332216778,-0.000014323575669550337,0.000014420313164009713,-0.000004594429810822476,0.00001533803515485488,-0.000003257871640016674,-0.0000015057372593219043,-0.000002804571522574406,-0.000008264756615972146,-0.000002011342530749971,-1.9574802934130275e-7,-0.0000025387560071976623,0.0000055548180171172135,-1.6860264295814886e-8,0.0000012650032203964656,0.000004872145836998243,-0.0000017890718027047114,0.000006571066933247494,0.000007390759037662065,0.0000020470258732530056,0.000013906128515372984,-0.000004494631411944283,5.931532598424383e-8,-0.000005363530362956226,-0.000019025612346013077,-9.746487705797335e-8,-0.000022788828573538922,0.000005759361101809191,-0.000019057089957641438,0.000006455238690250553,-0.000020634686734410934,1.0177009812650795e-7,-0.000019465514924377203,-0.000004779817118105711,-0.000005687471002602251,-0.000001974281985894777,0.000007814288437657524,6.800347023272479e-7,0.000006204283181432402,0.0000022189678929862566,0.000003214903017578763,0.000011109933439001907,0.000014264518540585414,0.000020891659005428664,0.000024231410861830227,0.000021565774659393355,0.00002063306419586297,0.000018980705135618336,0.000019460489056655206,0.000016109910575323738,0.00002946244967461098,0.000004959099442203296,0.000031635663617635146,-0.000011636377166723832,0.000012494529073592275,-0.000017649961591814645,-0.000009775249054655433,-0.000009684803444542922,-0.000012299901754886378,-0.0000045431584112520795,-0.000004680217443819856,-0.000009361619959236123,-0.000006417827080440475,-0.000009478884749114513,-0.000008635995982331224,-0.000002210264710811316,-0.0000013944970760348951,-0.0000027300702640786767,3.419471852339484e-7,-0.000005760077328886837,-0.000005887148290639743,0.000009123318704951089,-0.0000018179079006586107,0.000034976685128640383,0.00000800656562205404,0.00004315484329708852,0.0000026375134893896757,0.000026162653739447705,-0.000009777288141776808,0.000008337022336490918,-0.0000043383224692661315,0.000008042879017011728,0.000011266129149589688,0.000007552520855824696,0.000007821462531865109,-0.000010834794011316262,-0.0000071405156631954014,-0.000023741020413581282,0.0000010096468940901104,-0.000008777444236329757,0.000024047909391811118,0.00001084489394997945,0.000021773150365334004,0.000009878775927063543,-0.000002468845650582807,0.0000019583242192311445,-0.000011829857612610795,0.000007180449301813496,0.0000019898930077033583,0.00002007572038564831,0.000023562599380966276,0.000022493708456750028,0.00003725415081134997,0.000009227091140928678,0.000025104887754423544,-0.000004577635081659537,-0.0000057226006902055815,-0.000007426877800753573,-0.000013954405403637793,-0.000007396818546112627,0.000010363718502048869,-0.000005682496066583553,0.000023153961592470296,0.000005215436885919189,-5.851776450072066e-7,0.000008301271009258926,-0.00002839875378413126,-0.000008671786417835392,-0.00002114908602379728,-0.000016385081835323945,0.000010340518201701343,-0.000003332814912937465,0.00001631920167710632,-0.00000240609824686544,-0.00001683917253103573,-0.000019458128008409403,-0.00004172520129941404,-0.00002798895184241701,-0.00002957127071567811,-0.00002257167943753302,-0.0000011277380735918996,-0.000006745275186403887,0.000029834796805516817,0.00001443145356461173,0.00004889423871645704,0.000019520353816915303,0.000028781312721548602,0.00001101738143916009,-0.000002304964709765045,0.000015570509276585653,0.000006559727353305789,0.00002491160194040276,0.0000246861109189922,0.00002092513932439033,0.000005571321253228234,0.000019767994672292843,-0.000017234433471458033,0.000029364162401179783,-0.000006860925623186631,0.00003287310028099455,0.000014419410035770852,0.00002570765900600236,0.000020948997189407237,0.000014982444554334506,0.00001133622572524473,0.000005069058261142345,-0.000007599034233862767,-1.9249199567639153e-7,-0.00002135621070920024,4.192748974674032e-7,-0.00001811559559428133,0.000005204026820138097,-0.00000684716133037,0.000006793804459448438,-0.000007115300377336098,-9.464126833336195e-7,-0.000015396170056192204,-0.000005022252480557654,-0.0000057560728237149306,0.00000310011228066287,0.00001830806468205992,0.000005690162652172148,0.000025002680558827706,-0.0000018066829170493293,0.000016883142961887643,-9.190588343699346e-7,0.00001677891305007506,0.000008744715159991756,0.000017492679035058245,0.000009262767889595125,0.000009641324140829965,-0.000007944317985675298,0.0000026682307634473545,-0.000028819362341891974,-5.567349248281062e-9,-0.000027849970138049684,2.9275554425112205e-7,-0.000011288384484942071,8.639408122235182e-8,-0.000010010178812080994,-0.0000057664710766403005,-0.000018038146663457155,-0.000005938334197708173,-0.000011676184840325732,0.00000538736594535294,6.286371672103996e-7,0.000010601774192764424,0.00000795031610323349,0.000006878713065816555,0.000014448815818468574,0.0000053991193453839514,0.000019121212972095236,0.0000037922372939647175,0.00002377148666710127,0.000004110886493435828,0.000028523567380034365,0.000009884578503260855,0.000025298351829405874,0.000009547493391437456,0.000019423143385211006,0.0000016244050584646175,0.00001698599044175353,-0.0000035492291772243334,0.000010943429515464231,-0.000004347200501797488,0.0000019216581677028444,-0.000004650058144761715,-0.000010098739949171431,-0.000013551755728258286,-0.00002283834692207165,-0.000026392148356535472,-0.000012812127351935487,-0.000015902620361885056,0.00001567458821227774,0.000012308804798522033,0.00002283371395606082,0.000024552044123993255,0.000011854270269395784,0.00002660317659319844,0.000012907260497740936,0.00003121679401374422,0.000015185296433628537,0.00002326429785171058,-7.34506613753183e-7,0.000012328557204455137,-0.000023603226509294473,0.000014685990208818112,-0.00003268428554292768,0.000009220393621944822,-0.00002234849307569675,-0.000007605170594615629,-0.000011407089004933368,-0.000006624821708101081,-0.000009982724805013277,0.00001263109425053699,0.000003306656026325072,0.00002181891250074841,0.000024524020773242228,0.000007929559615149628,0.000019206416254746728,-0.000012103923836548347,-0.000002410376964689931,-0.000014605987416871358,-0.000003715801540238317,-0.000006302369911281858,0.000010128199392056558,-0.000007889429980423301,0.000014167191693559289,-0.00001256161522178445,0.0000057639072110760026,-0.000005861424597242149,-9.619938055038801e-7,0.00000681865458318498,0.0000016880826478882227,0.000011544870176294353,0.0000037514641917368863,-2.56049020208593e-7,0.0000014714703411300434,-0.000014694560377392918,0.000007349543466261821,-0.000010221549928246532,0.000018233196897199377,-7.090650342433946e-7,0.00002102341750287451,-0.000006131372174422722,0.000020034074623254128,-0.000009446019248571247,0.000019742274162126705,0.0000019139167761750286,0.000014728439964528661,0.000014092046512814704,0.000003048159214813495,0.000020496132492553443,-0.000008900403372535948,0.000023662334569962695,-0.000005791300736746052,0.000022625017663813196,0.0000075333286986278836,0.000012899877219751943,-0.0000017856511931313435,-0.000006809377737226896,-0.000028199405278428458,-0.00001746432280924637,-0.00003172568540321663,-0.000006750207376171602,-0.00001866254024207592,-0.0000010079621688419138,-0.000013011737792112399,-0.00000956672738539055,-0.000004242810973664746,-0.000002119594682881143,0.000006584605671378085,0.00002223004776169546,0.000006579176442755852,0.000033968506613746285,0.000009475802471570205,0.000025046378141269088,0.000017056823708117008,0.000005184896053833654,0.000012699285434791818,-0.000006306862815108616,0.000008491949301969726,0.000004087344223080436,0.000018048402125714347,0.000011509853720781393,0.000021365476641221903,-0.000005565815172303701,0.000006844592917332193,-0.000022027259547030553,-0.000005569290806306526,-0.00002120573481079191,-0.000002695209104786045,-0.00001900665483844932,4.4863107007131475e-8,-0.000016556557966396213,-0.000010590822967060376,-0.0000065892354541574605,-0.000017760654372978024,-8.225159149333194e-7,-0.0000025858541903289733,0.0000011124238881166093,0.000020903720724163577,0.00001814771349017974,0.000027480426069814712,0.00004084043393959291,0.0000177144720510114,0.00004253354563843459,0.000010023189133789856,0.000033290092687821016,0.0000067583277996163815,0.000030763236281927675,-0.000003997994099336211,0.00001618833266547881,-0.000014886847566231154,-0.000012435123608156573,-0.00001306923968513729,-0.00002227741242677439,-0.000013466869859257713,-0.000015753304978716187,-0.000023232454623212107,-0.00001852498644439038,-0.00002162655619031284,-0.0000210459329537116,-0.00000750824165152153,-0.000011541855201357976,0.000005184509518585401,-0.0000010159284329347429,0.000017868627764983103,0.000005208628408581717,0.000021801406546728685,0.000004908810751658166,0.00000935355910769431,0.000002482380750734592,0.0000020374698124214774,0.000012640602108149324,0.0000043602076402748935,0.000021848769392818213,-0.000003835069946944714,0.000009052029781742021,-0.000015977773728081957,-0.00000437899689131882,-0.000015400755728478543,-0.0000011541671938175568,-0.000007877672032918781,-8.166315268454127e-8,-0.000005477804279507836,-0.0000075803836807608604,-0.000016252544810413383,-0.000015123989214771427,-0.00003125966031802818,-0.000023901306121842936,-0.00002719650547078345,-0.00002844541631930042,-0.000010009978723246604,-0.000019015275029232726,-0.000002046205736405682,3.0927870398045343e-7,0.000004475987225305289,0.000018435192032484338,0.000017293778000748716,0.000025111336071859114,0.00002306950045749545,0.000019393164620851167,0.000024574750568717718,0.000011862235623993911,0.00003010806358361151,0.000008740132216189522,0.000028634845875785686,0.000012442340448615141,0.00002007111288548913,0.000022071695639169775,0.00001786083885235712,0.000019058017642237246,0.000014229030057322234,-0.000005833061550220009,-0.0000042547835619188845,-0.00002718412179092411,-0.000025061946871574037,-0.00003152936915284954,-0.00003277888026786968,-0.00003887666389346123,-0.000034648659493541345,-0.000050274011300643906,-0.00003677815038827248,-0.00004247226388542913,-0.00002903110726037994,-0.000020898798538837582,-0.000010089145689562429,-0.000010234728506475221,0.000006811966159148142,-0.000005313822384778177,0.0000156254736793926,0.000009165262781607453,0.00002019751991610974,0.00002104634950228501,0.000026244979380862787,0.000020415984181454405,0.00003609451960073784,0.000021696680050808936,0.0000403553967771586,0.00002973491973534692,0.00002806495649565477,0.000031540897907689214,0.000004485058980208123,0.000023197349946713075,-0.00001706145121715963,0.000012635712664632592,-0.0000292308959615184,0.0000058418190747033805,-0.000030073091693338938,-1.1923079057396535e-7,-0.00002137258525181096,-0.000009712542123452295,-0.000012220786629768554,-0.000016407961084041744,-0.000012456388503778726,-0.000015059623365232255,-0.000008678027370478958,-0.000009216743819706608,0.000019928700567106716,0.000004287425326765515,0.00004467799226404168,0.00002016187136177905,0.000024435452360194176,0.000019308243281557225,-0.000007724876013526227,0.000009188834155793302,-0.0000019114108908979688,0.000012105027053621598,0.00002055629374808632,0.000020270883396733552,0.000018115131751983427,0.00001163760225608712,-0.00001510960100858938,-0.000021670934074791148,-0.00005311196582624689,-0.00005914847133681178,-0.00005459808380692266,-0.00006084770575398579,-0.000027462207071948797,-0.00003233471579733305,-0.000024315484552062117,-0.00001873439396149479,-0.00003443852983764373,-0.00001817194242903497,-0.000014029920748725999,-0.000009114837666857056,0.000012373760910122655,-0.000003239905254304176,0.000010735915566328913,-5.519689239008585e-8,-0.0000018883721395468456,0.00000311321650769969,-0.0000017775488458937616,-0.000006557762844749959,0.000015179120964603499,-0.00000455604003946064,0.000022281594283413142,0.000017691370885586366,-0.0000038258062886598054,0.000012033361599605996,-0.000019834642444038764,-0.000010000385373132303,0.000010684007975214627,0.000009171661986329127,0.00004517719935392961,0.00004714382521342486,0.0000477431713079568,0.00005181042797630653,0.000026211499061901122,0.00002550805947976187,0.000003884897068928694,0.00000662306683807401,0.000017071641195798293,0.00003120501423836686,0.00004284991882741451,0.00006512828258564696,0.000018203174477093853,0.00004200913826934993,-0.000014842201380815823,0.000003909772658516886,0.000008061370863288175,0.000021963762264931574,0.00003848099004244432,0.00005715851148124784,0.000043984284275211394,0.00006707866123178974,0.000052957908337702975,0.00006693915202049538,0.000049615926400292665,0.00005375961336540058,0.0000309937859128695,0.00003500019374769181,0.000029505476049962454,0.000029334600185393356,0.000023507789592258632,0.00001465066452510655,-1.0310985487649305e-7,-0.000006374973509082338,-0.000008675759090692736,-0.000009088520528166555,-0.000021084319087094627,-0.000024063272576313466,-0.0000631984366918914,-0.0000610212046012748,-0.00009105104982154444,-0.00007528847345383838,-0.00008082981366897002,-0.00007128059951355681,-0.00007338736031670123,-0.00008348179107997566,-0.00009302627586293966,-0.00010063370427815244,-0.00010311997175449505,-0.00009475899423705414,-0.00006107790977694094,-0.00005710756522603333,-0.0000045567167035187595,-0.000016807351130410098,-0.000008728594366402831,-0.000024047727492870763,-0.000054534481023438275,-0.00006562787166330963,-0.00006661251245532185,-0.0000764136275392957,-0.00004220175833324902,-0.00005006900755688548,-0.000025705265215947293,-0.000036733610613737255,-0.00002846791539923288,-0.0000510317986481823,-0.000025806351914070547,-0.00004952012750436552,0.000005754276116931578,-0.0000016414161336797406,0.0000425573016400449,0.00004579619053401984,0.00004338672079029493,0.000038616690289927647,0.000029018654458923265,0.000013091679647914134,0.00003744493369595148,0.000019917650206480175,0.000044882068323204294,0.00003138934698654339,0.00002662312181200832,0.000016957039406406693,0.000012313065781199839,0.000002333392103537335,0.00001934301690198481,0.0000014684613915960654,0.000014003498108650092,-0.000012435083590389695,-0.00001898372829600703,-0.000038960213714744896,-0.00003305000063846819,-0.00003180839848937467,-0.000003220078497179202,0.000009098755072045606,0.00001692907972028479,0.00001644175426918082,-0.0000025018243832164444,-0.000015483534298255108,-0.00001627800338610541,-0.000018092352547682822,-0.000013463391951518133,0.0000019396563857299043,-0.00003174218363710679,-0.0000160226827574661,-0.00005453410267364234,-0.00004583518239087425,-0.000040986185922520235,-0.000035656023101182655,-0.00001567927210999187,-0.000013575969205703586,-0.000018654585801414214,-0.000008182525562006049,-0.000031149891583481804,0.000004068513590027578,-0.000022341226213029586,0.000019159466319251806,-0.00001293922196055064,0.000003855884187942138,-0.00003387294782442041,-0.00002583240348030813,-0.000057961613492807373,-0.000027385123757994734,-0.000033527012419654056,0.0000016514985645699198,0.00003071745595661923,0.000041599003452574834,0.00007069997809594497,0.00007186799484770745,0.00005709023025701754,0.00006439198477892205,0.000029486905987141654,0.000029499340598704293,0.0000209078880288871,0.000017297805243288167,0.000013292264156916644,0.000027950874937232584,-0.0000013293877145770239,0.000019151208107359707,-0.000006482500339188846,-0.0000067296255110704806,-0.000007697241926507559,-0.000014276416550274007,0.0000016702936136425706,0.000015172436178545468,0.00004288800846552476,0.00006377120007527992,0.00006793632928747684,0.00007132426253519952,0.00002048872920568101,0.000012990089089726098,-0.000048709236580180004,-0.000047732733946759254,-0.00007167227886384353,-0.00006812359788455069,-0.000064849853515625,-0.00008061769040068612,-0.00006814341759309173,-0.00010230079351458699,-0.00008719259494682774,-0.0001180777617264539,-0.00008941548003349453,-0.00011921609257115051,-0.00003779408143600449,-0.00008811964653432369,0.000030435225198743865,-0.000025285318770329468,0.00004108916618861258,0.000014433621799980756,0.00001024217635858804,-0.000005194896857574349,0.000005180342213861877,-0.000034165761462645605,0.000023372396753984503,-0.000010869540346902795,0.00002539250453992281,0.00003357906825840473,0.000018433291188557632,0.00003062555697397329,0.000026741767214844003,-7.219643407552212e-7,0.00003656093031167984,-0.000001136163632509124,0.00003117337473668158,0.000021541796741075814,0.0000293058437819127,0.000043496882426552474,0.000037782541767228395,0.00007139385706977919,0.0000416023212892469,0.00009288021101383492,0.00005254682037048042,0.00009893468813970685,0.00006880204455228522,0.00010826986544998363,0.00005927990423515439,0.00011457254731794819,0.00005459919702843763,0.00010707223555073142,0.000094101473223418,0.00010680824925657362,0.00011209934746148065,0.00010920516069745645,0.000056838165619410574,0.00008033691119635478,-0.0000068494009610731155,0.000025022674890351482,-0.00002701147059269715,-0.000019174229237250984,-0.00003586516322684474,-0.00004372096373117529,-0.0000652634262223728,-0.00007542935782112181,-0.00009048141509993002,-0.00010400706378277391,-0.00006278631190070882,-0.00007421393820550293,0.0000025940585146599915,-0.000008294062354252674,0.0000325960099871736,0.000008096650162769947,0.00003069816739298403,-0.0000037499498830584344,0.000056778833823045716,0.000025616709535825066,0.00007991064921952784,0.00004987000284017995,0.000045740198402199894,0.000019337981939315796,0.000004544684998109005,-0.000008798326234682463,0.000008757365321798716,-0.0000021096132059028605,0.00001856036215031054,0.000004826958502235357,0.000005461828550323844,0.000007710723366471939,0.000010949572242680006,0.000018963972252095118,0.000044504369725473225,0.00002303562177985441,0.00004023867586511187,0.000010020921763498336,-0.000025972738512791693,-0.00001586198777658865,-0.00007700323476456106,-0.00004665309825213626,-0.000055274140322580934,-0.000052602150390157476,-0.0000061497439673985355,-0.00001668721961323172,0.000008728478860575706,0.000013330021829460748,-0.0000029871407605241984,-0.000004125208306504646,-0.0000026293639621144393,-0.00002612005664559547,0.0000065824074226839,-0.000017083671991713345,-0.0000046906184252293315,-0.00001556396091473289,-0.00002643541301949881,-0.00003281334284110926,-0.000039624956116313115,-0.00004113918112125248,-0.00007187780283857137,-0.00006438163109123707,-0.0001236143143614754,-0.00011173521488672122,-0.00012688638526014984,-0.00011649612861219794,-0.00006469413347076625,-0.00005987553595332429,-0.000014351888239616528,-0.000007210273906821385,-0.000016002846678020433,0.000014015030501468573,-0.000009058734576683491,0.00003463930625002831,0.000044094260374549776,0.00006039829531800933,0.00007179840031312779,0.00006237921479623765,0.000030082985176704824,0.000039645121432840824,-0.0000010439434845466167,0.000020206653061904944,0.00001813493508961983,-8.59565261634998e-7,0.000021399320758064277,-0.000031689640309195966,0.000003812285285675898,-0.00003198267222614959,0.00001682609217823483,0.0000013957578630652279,0.00004154344787821174,0.000013956621842226014,0.00004097841519978829,9.028317435877398e-7,0.000013097586816002149,-0.000017888380170916207,-0.000026429661375004798,-0.000042822484829230234,-0.00003054921762668528,-0.00004142971010878682,-0.000001531986526970286,-0.00001933212115545757,-0.0000132069308165228,-0.000039306974940700457,-0.00004899566920357756,-0.000061745238781441,-0.000037255726056173444,-0.000020425879483809695,-0.000015082103345775977,0.000013367198334890418,-0.00003093281702604145,-0.000012532468645076733,-0.000054078089306131005,-0.00003815422678599134,-0.00006230008148122579,-0.000032039140933193266,-0.000044264997995924205,9.833966032601893e-7,-5.77034370508045e-7,0.000045075670641381294,0.000020452816897886805,0.00004831075420952402,0.000016518073607585393,0.00002406950807198882,0.000028525224479380995,0.000029365415684878826,0.00002138098716386594,0.000015089812222868204,-0.00003114295031991787,-0.00005498417158378288,-0.00005744315421907231,-0.00008467251609545201,-0.000022096755856182426,-0.000038503785617649555,0.000013987733836984262,-0.000011090352927567437,0.000002372082235524431,-0.000031918280001264066,-0.000031449904781766236,-0.000032338593882741407,-0.00003993864811491221,-0.000005635174602502957,-0.00003002981611643918,-0.000012256874470040202,-0.00002950612542917952,-0.000029784107027808204,-0.000014617784472648054,0.00001263211561308708,0.00002073836003546603,0.000060902915720362216,0.00002685291474335827,0.00002972178117488511,0.000003865030521410517,-0.000011656133210635744,-0.0000019173003238392994,0.000016705547750461847,0.000012224107194924727,0.000058518213336355984,0.000023397415134240873,0.00006208814738783985,0.000014334675142890774,0.000048294361477019265,-0.000011518812243593857,0.00003706568531924859,-0.000009435871106688865,0.00004311736120143905,0.000036349370930111036,0.00005881915785721503,0.0000780311384005472,0.00005478940511238761,0.00009043554018717259,0.00005104908996145241,0.00008298666216433048,0.00006888940697535872,0.00006298254447756335,0.00007044045923976228,0.000054575710237259045,0.00005354037421057001,0.000060902479162905365,0.00005536368189495988,0.00004294863174436614,0.00005029814929002896,0.000005725249138777144,0.000005086803867015988,-0.000010700321581680328,-0.00004252125654602423,-0.000021980682504363358,-0.000058042256569024175,-0.00005544697341974825,-0.000054441989050246775,-0.00008118953701341525,-0.00004292158700991422,-0.00007777901191730052,-0.000035333177947904915,-0.00007716101390542462,-0.00005428513395600021,-0.00008297056774608791,-0.0000670280642225407,-0.00005144996976014227,-0.000014605345313611906,-0.00000779076071921736,0.0000432292181358207,-0.00003144462971249595,0.000004673118382925168,-0.00008541214629076421,-0.00005519864134839736,-0.00006174968439154327,-0.000014400528016267344,0.000012012095794489142,0.000047868241381365806,0.000030405124562093988,0.00002368395507801324,0.000001922777300933376,-0.000011832757991214748,0.0000026430798243382014,0.000012279679140192457,0.00003241767262807116,0.000024375991415581666,0.00003544256105669774,-0.00002144496829714626,0.0000066679922383627854,-0.00006405106250895187,-0.000002957086053356761,-0.00005756971222581342,0.000015621615602867678,-0.00003508651934680529,0.00001469517155783251,-0.00004308757706894539,-0.000010895128070842475,-0.0000762795825721696,-0.00001937178421940189,-0.00009255228360416368,-0.000009577730452292599,-0.00007198793900897726,-0.00001064251409843564,-0.00004143540354561992,-0.000017639989891904406,-0.00002866461181838531,-0.000003194289547536755,-0.00001008950584946433,0.000025677494704723358,0.0000337935853167437,0.00002025209141720552,0.00004816519140149467,-0.00003013358946191147,0.000005368628990254365,-0.00005807228444609791,-0.000014198250937624834,-0.000024669036065461114,0.00002980853787448723,0.00001305967180087464,0.0000615404496784322,0.000003169276169501245,0.000039045036828611046,-0.000026213239834760316,0.000006035425030859187,-0.000030444816729868762,-0.000012050156328768935,-0.000019078106561210006,-0.000029675369660253637,-0.000031799194402992725,-0.000055997508752625436,-0.0000721602700650692,-0.00009207191760651767,-0.00010938722698483616,-0.00013436700101010501,-0.00012641138164326549,-0.0001619315444258973,-0.00012095387501176447,-0.00015179513138718903,-0.00009973258420359343,-0.00012022676673950627,-0.00008012935722945258,-0.0001016552560031414,-0.000054741190979257226,-0.00008083759166765958,-0.00000593823006056482,-0.00002722652061493136,0.000044529537262860686,0.000031446641514776275,0.00007436021405737847,0.00005673569467035122,0.00008370971045223996,0.000051376631745370105,0.00005631861131405458,0.0000279171799775213,-0.0000013176068023312837,0.0000014861398085486144,-0.000035487813875079155,-0.00001107328716898337,-0.000028035083232680336,-0.000009004481398733333,-0.000013428236343315803,0.000007951015504659154,-0.000012215399692649953,0.000026802747015608475,-0.000010574289262876846,0.00001737370803311933,0.000018003340301220305,5.736237653763965e-7,0.00006992507405811921,0.00002058242716884706,0.00009748925367603078,0.000049604932428337634,0.00007757225830573589,0.0000480062335554976,0.000046539622417185456,0.000040741320844972506,0.0000359866680810228,0.000044753498514182866,0.00003149465555907227,0.00003402285074116662,0.000016869544197106734,0.000012217524272273295,0.000014416894373425748,0.00001694033562671393,0.00002633786789374426,0.00003387614560779184,-0.0000031246981961885467,0.000006746628059772775,-0.00006808514444855973,-0.0000424836362071801,-0.00007945387915242463,-0.000040809682104736567,-0.00004131623427383602,-0.000006584262791875517,-0.000027186131774215028,0.000009418003173777834,-0.00001379865534545388,0.000029131773771950975,0.00003061928873648867,0.00005724620132241398,0.00004902021464658901,0.0000633458184893243,0.000014305432159744669,0.000058562731283018366,-0.000027793557819677517,0.000046056477003730834,-0.000024998287699418142,0.00002725913145695813,0.000025247172743547708,0.000039892023778520525,0.00004112611713935621,0.000050569287850521505,-0.000014535172340401914,0.0000067802211560774595,-0.00004382204497233033,-0.000026799832994583994,-0.000016543841411476023,-0.0000244089933403302,-0.000021907017071498558,-0.00005314009467838332,-0.00005711687481380068,-0.00007939628267195076,-0.00006287739233812317,-0.00005297015013638884,-0.000055925644119270146,-0.0000416878356190864,-0.000044781805627280846,-0.00005816018165205605,-0.000014692141121486202,-0.000038615464291069657,0.000015342511687777005,-0.0000019092221918981522,0.00004032142896903679,0.000013651363587996457,0.0000466067940578796,0.000017852991732070222,1.3027107570451335e-7,0.0000011722290764737409,-0.0000434878165833652,-0.000021812964405398816,0.000001429963049304206,0.00001604595672688447,0.00008827573037706316,0.00010605066927382722,0.00011196303967153654,0.00014238811854738742,0.00007170428580138832,0.00009203513036482036,0.00005030815373174846,0.00005320513810147531,0.00006844555173302069,0.00007133291364880279,0.00004482951044337824,0.000057309403928229585,-0.00004976908894605003,-0.000016540670912945643,-0.00012368492025416344,-0.00006704733095830306,-0.00012687843991443515,-0.00008667777001392096,-0.00010667263995856047,-0.00010933732846751809,-0.0000810641358839348,-0.0000843552261358127,-0.00003626633406383917,-0.000011461594112915918,-0.000003800034392043017,0.000010872363418457098,-0.00001115972099796636,-0.000024820123144309036,-0.000016356738342437893,-0.00003160407504765317,0.000021647872927132994,0.00000160533340931579,0.000044044452806701884,0.000006865130671940278,-0.000021276600818964653,-0.00004543062095763162,-0.0001009973420877941,-0.00010950845899060369,-0.00008220582094509155,-0.00012713325850199908,-0.000009265588232665323,-0.00009223717643180862,0.00001942663948284462,-0.00004278800042811781,0.000014971864402468782,-0.000015608507965225726,0.000012556516594486311,-0.00001997295839828439,-0.00001677776890574023,-0.00004871925193583593,-0.00008439271186944097,-0.00009608511754777282,-0.00012681048247031868,-0.00012660387437790632,-0.00009491848322795704,-0.00009672807937022299,-0.000038584679714404047,-0.00004915422323392704,-0.000011407275451347232,-0.00003619683411670849,0.000020544717699522153,-0.000004877408628090052,0.000057512861530994996,0.00005082879215478897,0.000023422402591677383,0.00003235676922486164,-0.00007216427911771461,-0.000044125583372078836,-0.00013907243555877358,-0.00007763699250062928,-0.0001589777530170977,-0.00009526571375317872,-0.0001702349109109491,-0.00015039237041492015,-0.00018199183978140354,-0.00018227424880024046,-0.0001656827371334657,-0.00014178658602759242,-0.00009661682270234451,-0.00006982849299674854,-0.000024176955776056275,-0.000023143686121329665,-0.000021666413886123337,-0.000022818921934231184,-0.00004684945088229142,-0.00003441434455453418,-0.000010103430213348474,0.0000032032912713475525,0.00006675547047052532,0.00008603621245129034,0.00010718784324126318,0.0001322274620179087,0.00010200230462942272,0.00010818237205967307,0.00009606129606254399,0.00009692880848888308,0.00011241745960433036,0.00014431362797040492,0.00011704491771524772,0.00014793468290008605,0.00008428628643741831,0.000059725869505200535,0.00006823895819252357,0.00001569482628838159,0.00011798230116255581,0.00008751583663979545,0.00017217642744071782,0.00014552491484209895,0.00014642594032920897,0.00009886995394481346,0.0000820255299913697,0.0000389802225981839,0.0000945738865993917,0.00006543559720739722,0.00017948643653653562,0.00013175995263736695,0.000207908742595464,0.00013581017265096307,0.0001348408404737711,0.00007278104749275371,0.000048818663344718516,0.000009134634638030548,0.00001749626790115144,-0.000027329901058692485,0.000009467278687225189,-0.000057572869991417974,-0.000054372627346310765,-0.00011624617764027789,-0.00017348630353808403,-0.00019637461809907109,-0.00020912816398777068,-0.00020959861285518855,-0.00009173363650916144,-0.00011212546814931557,0.000036042500141775236,2.3283064365386963e-8,0.00005594479080173187,0.00004100982187082991,0.000023640137442271225,0.00002810826299537439,0.000004636331141227856,0.0000017502184164186474,-0.0000016116446204250678,-0.000008960413651948329,-0.00001896120375022292,-0.000017643205865169875,-0.00007192717748694122,-0.00006774204666726291,-0.00011022477701772004,-0.0001006519451038912,-0.00004939598875353113,-0.000025064480723813176,0.00006950402894290164,0.00008736859308555722,0.00013112671149428934,0.00011726255615940318,0.00009332889749202877,0.00006975586438784376,-0.000007504016139137093,-0.0000017577287962922128,-0.0000711821558070369,-0.00003985501825809479,-0.000008704300853423774,0.00001219889509229688,0.00010966281115543097,0.00010688483598642051,0.0001459826744394377,0.00014799759082961828,0.00012049888755427673,0.00015319800877477974,0.0001315882836934179,0.0001693947851890698,0.00013466438394971192,0.00013570465671364218,0.00003885695696226321,0.000019557321138563566,-0.0000759758404456079,-0.00006659913924522698,-0.00009499234874965623,-0.00006112013215897605,-0.00007698169065406546,-0.000060936577938264236,-0.00006680353544652462,-0.00007666349119972438,0.000022440679458668455,0.000004864556558459299,0.00012551239342428744,0.00011123484728159383,0.00006374843360390514,0.0000694217742420733,-0.00006522072362713516,-0.000034445423807483166,-0.000056505523389205337,-0.00003903900505974889,0.000005489092927746242,-0.000015380668628495187,-0.000013067590771242976,-0.000028134491003584117,-0.000019961922589573078,0.00001111600886360975,0.00003626819307100959,0.00007595207716803998,0.00005631609747069888,0.000051114606321789324,0.000038434911402873695,4.5267279347172007e-7,0.000059726120525738224,0.00003945884600398131,0.00009166861127596349,0.00010432150884298608,0.00008447789878118783,0.00009268712892662734,0.00006632134318351746,0.000032154312066268176,0.00006209970160853118,3.4997174225281924e-7,0.00007809824455762282,0.0000330825278069824,0.00011409471335355192,0.00009687244892120361,0.00010992292664013803,0.00010118685167981312,0.000043402149458415806,0.00003681848829728551,0.00002333584961888846,0.00002146193219232373,0.00008825006807455793,0.00008878691733116284,0.00010468476102687418,0.00011617453128565103,0.000010868432582356036,0.00003768633177969605,-0.0000832886653370224,-0.00006463406316470355,-0.00009575632429914549,-0.00009790592594072223,-0.00008047091250773519,-0.00008127279579639435,-0.00011930312030017376,-0.00010817989095812663,-0.00019761906878557056,-0.00018406282470095903,-0.00025037425803020597,-0.00022929937404114753,-0.00028175031184218824,-0.00026143481954932213,-0.00030704058008268476,-0.00032354859285987914,-0.00028720812406390905,-0.0003314026980660856,-0.00023685301130171865,-0.0002623709151521325,-0.00020041537936776876,-0.00023299336316995323,-0.0001476819161325693,-0.0002481380943208933,-0.00007395316060865298,-0.00019933024304918945,-0.00001707856063148938,-0.00007966350676724687,0.00003398122498765588,0.000010577972716419026,0.00004213210195302963,-0.000016719475752324797,-0.00003703224865603261,-0.00011134900705656037,-0.00007891521818237379,-0.00010674398799892515,-0.000002282263267261442,0.000002869634954549838,0.00004155691203777678,0.00003237165219616145,-0.000040039492887444794,-0.00005632107422570698,-0.00011622216698015109,-0.00010217920498689637,-0.000052099829190410674,-0.000006442031008191407,0.00011611672380240634,0.00016018351016100496,0.0002177420974476263,0.00024585469509474933,0.00016871566185727715,0.0002069331967504695,0.00009723335824673995,0.00016305266763083637,0.00010130155715160072,0.0001628038880880922,0.00009905041952151805,0.00012441941362340003,0.00005324347148416564,0.00006661077350145206,0.000056269716878887266,0.00009563506318954751,0.0001445938105462119,0.00020467364811338484,0.00022031216940376908,0.00027645783848129213,0.00018519532750360668,0.00023159629199653864,0.00010800627205753699,0.0001519494253443554,0.00012027759657939896,0.00017234316328540444,0.00015244039241224527,0.00021870264026802033,0.000060043548728572205,0.00012630523997358978,-0.00008305638039018959,-0.00003651895167422481,-0.00011915012873942032,-0.0000871685188030824,-0.000041786948713706806,-0.000004809240635950118,0.00004110886584385298,0.000093799018941354,0.00001830440669436939,0.00009007014887174591,-0.00008894543861970305,-0.000008388842616113834,-0.00012280653754714876,-0.000059225996665190905,-0.00004686256579589099,-0.000004007886218460044,0.000010301017027813941,0.00006117883458500728,-0.000004959066245646682,0.00006308007868938148,-0.00005623497781925835,0.0000016901053641049657,-0.00012405106099322438,-0.00009191863500745967,-0.00018024181190412492,-0.0001593408960616216,-0.00019957635959144682,-0.00017160963034257293,-0.00017814745660871267,-0.00013509401469491422,-0.00011708180682035163,-0.00006468065839726478,-0.00006644428503932431,-0.000022329521016217768,-0.00005872109250049107,-0.000030379385862033814,-0.00001940926449606195,-9.50950834521791e-7,0.00007214264041977003,0.00007613632624270394,0.00011203531175851822,0.00009669607970863581,0.00008747195533942431,0.00006836865213699639,0.000107871564978268,0.00009087040234589949,0.00019871782569680363,0.00016566846170462668,0.0002717904862947762,0.0002240440808236599,0.00026444465038366616,0.00022366063785739243,0.0002072927018161863,0.00016754464013502002,0.00017488887533545494,0.00011745865049306303,0.00018788142187986523,0.00012361693370621651,0.00018892365915235132,0.0001353108964394778,0.00012977307778783143,0.00008753158908803016,0.00003708814620040357,0.000010673960787244141,-0.00001981318746402394,-0.00003052715692319907,0.0000012943901310791261,-0.000012440191312634852,0.00007004603685345501,0.000053042742365505546,0.00011080254625994712,0.00010929033305728808,0.00010538451169850305,0.00010385063797002658,0.0001238908589584753,0.00009580529876984656,0.00019793650426436216,0.00016720773419365287,0.00024815084179863334,0.0002446943544782698,0.00019588206487242132,0.00019575741316657513,0.00005647114085149951,0.000033640259061940014,-0.00008082586282398552,-0.00010941842629108578,-0.000123425226774998,-0.0001422984933014959,-0.00009261527156922966,-0.00010913527512457222,-0.00009859810234047472,-0.00011477481893962249,-0.00013260109699331224,-0.00014256648137234151,-0.00009395734377903864,-0.00008956607052823529,-0.000003257652451793547,0.000024219256374635734,0.00006157296593300998,0.00009329195017926395,0.0000909910086193122,0.00009424033487448469,0.00007284159801201895,0.00006831511564087123,0.00001874280314950738,0.00005567546031670645,0.000005360243903851369,0.00006956124707357958,0.00004115957926842384,0.00008636829443275928,0.00006720854435116053,0.00010175880743190646,0.000058497971622273326,0.00010565094271441922,-0.00000532744888914749,0.00003650475264294073,-0.00008412737224716693,-0.00005737183892051689,-0.00004074765456607565,-0.000015765856005600654,0.00012070624507032335,0.00012950683594681323,0.0002018612576648593,0.0001815898867789656,0.0001366319484077394,0.00012036338011967018,0.00008128847548505291,0.00008533558138879016,0.00012598736793734133,0.00011848862050101161,0.0001826434163376689,0.00015625306696165353,0.00019109569257125258,0.00017093791393563151,0.00020420609507709742,0.00018747098511084914,0.00021713862952310592,0.00019607768626883626,0.00015462526062037796,0.00015112361870706081,0.00005944148142589256,0.00007137679494917393,0.00002383520950388629,0.00001862557473941706,-0.0000068000390456290916,-0.000017121023120125756,-0.00010218597890343517,-0.00007586612628074363,-0.0001744521432556212,-0.0001242063590325415,-0.0001295977272093296,-0.00010483716323506087,-0.00002151472472178284,-0.000034661545214476064,0.00004824878487852402,0.000019321976651553996,0.000060638627473963425,0.000033946442272281274,0.000049855512770591304,0.00003052474494324997,0.00003425036265980452,0.000019722010620171204,0.00003538441160344519,0.00002866454451577738,0.00006024901085766032,0.00007192634075181559,0.00005440136737888679,0.00007213866047095507,0.000019199043890694156,0.000010913217920460738,0.000045549073547590524,0.000012097194485249929,0.00010095175093738362,0.00006870793731650338,0.00007156033825594932,0.00003835436291410588,0.000020153316654614173,-0.000019508930563461035,0.0000535928484168835,0.00003740128158824518,0.00010149527952307835,0.00011497524246806279,0.00008390550647163764,0.0000843971865833737,0.00003986573210568167,0.000023354001314146444,0.000007602353434776887,0.000020408371710800566,-0.000010802616088767536,0.000026732461265055463,-0.000005622944627248216,0.0000034467293517082,0.000030874678486725315,0.000010173034752369858,0.00007900789205450565,0.0000685180420987308,0.00007322894089156762,0.00007221940177259967,-0.000027310783480061218,-0.000044682725274469703,-0.0001466236572014168,-0.00017769132682587951,-0.00018490885850042105,-0.00021317791834007949,-0.00014575586828868836,-0.00016396366117987782,-0.00008703183266334236,-0.000096126452262979,-0.00003868097337544896,-0.00006154235597932711,0.0000013577704294220894,-0.00006000530629535206,0.00003719485175679438,-0.000029292279577930458,0.00005176669219508767,0.000037953537685098127,0.00004797007568413392,0.0000610950737609528,0.00007513132004532963,0.000035335040593054146,0.00014191074296832085,0.000057879464293364435,0.00018908843048848212,0.0001475651515647769,0.00020764136570505798,0.00022060774790588766,0.00025390449445694685,0.0002503087744116783,0.00030238457839004695,0.0002672707778401673,0.0002528578625060618,0.000237257219851017,0.00013433310959953815,0.00013784827024210244,0.00008091441122815013,0.000059937723563052714,0.00008225104829762131,0.00005401169983088039,0.00003974448191002011,0.00004953946336172521,-0.000010107636626344174,0.00001073527801054297,-0.000020950206817360595,-0.00003656994522316381,-0.00005993116428726353,-0.0000808492986834608,-0.00011625375918811187,-0.0000944273269851692,-0.00010681073763407767,-0.00007551605085609481,-0.00007586299034301192,-0.00009075189882423729,-0.00008544810407329351,-0.00012747022265102714,-0.00006861256406409666,-0.00007860875484766439,0.000004575975708576152,0.00004120101948501542,0.00003772617856157012,0.0000848198906169273,-0.000009577727723808493,0.000012361198059807066,-0.00005892533590667881,-0.00005592560046352446,-0.00008714772411622107,-0.00006369994662236422,-0.0001394686260027811,-0.00008136204269248992,-0.00015996844740584493,-0.00010361209569964558,-0.00011126687604701146,-0.00008401738159591332,-0.00014169493806548417,-0.00011784620437538251,-0.0002762835065368563,-0.00022666376025881618,-0.0002874225901905447,-0.00022627771249972284)\n\
+\n\
+,\n\
+\n\
+new Array(-0.00014015505439601839,-0.00009424725431017578,-0.0000367982174793724,-0.000012330742720223498,-0.000009979183232644573,-0.000005074737146060215,0.000015334489944507368,0.000006053265224181814,0.000033470423659309745,0.000029470638764905743,0.00009303881961386651,0.00010694590309867635,0.00022122845984995365,0.00022976046602707356,0.00027943524764850736,0.00024943548487499356,0.000181631650775671,0.00012874089588876814,0.000033948716009035707,0.00001643829637032468,-0.000038822603528387845,-0.000005076801244285889,-0.000026619280106388032,-0.000004013060788565781,-0.000020743873392348178,-0.000060739057516912,-0.00009209522977471352,-0.00015305288252420723,-0.0001557939249323681,-0.00016957358457148075,-0.00011526542220963165,-0.00008990408241515979,-0.00003546544030541554,-0.000018380367691861466,0.000005372870873543434,0.000013720681636186782,0.000005543797669815831,0.00003979273242293857,-0.000014010610357217956,0.00005891008913749829,-0.00001633692954783328,0.00006351392949000001,-0.000011691547115333378,0.000035224747989559546,-0.00004958381759934127,-0.000023805565433576703,-0.00012163100473117083,-0.00007665240264032036,-0.00016238178068306297,-0.00010357973224017769,-0.00012000015703961253,-0.00009269107249565423,-0.000049141810450237244,-0.00005715646693715826,-0.00004356173303676769,-0.00003632663720054552,-0.00001985907510970719,0.0000020384477465995587,0.00012762073311023414,0.00011586706386879086,0.00021797671797685325,0.00020374754967633635,0.00008666064240969718,0.00011644592450466007,-0.00006568098615389317,-0.000046202490921132267,-0.00004137075302423909,-0.00007593315240228549,0.000004579069354804233,-0.00002532761573093012,-0.00009905502520268783,-0.00007579676457680762,-0.00019283377332612872,-0.00017823997768573463,-0.00014772501890547574,-0.00019722098659258336,-0.00013216372462920845,-0.000167879305081442,-0.00019680026161950082,-0.00015686158440075815,-0.0002077507524518296,-0.00015023740706965327,-0.00017501234833616763,-0.00013415997091215104,-0.00017168966587632895,-0.00013525885879062116,-0.00015167739184107631,-0.00012130104005336761,-0.00008563465962652117,-0.000041452833102084696,-0.00007153890328481793,-0.000001365100615657866,-0.00008754107693675905,-0.0000252203899435699,-0.00003187061520293355,-0.000009977433364838362,0.000022157373678055592,0.00003242286038585007,0.00003615911191445775,0.00009324029088020325,0.000014359744454850443,0.00007800778257660568,-0.000049274443881586194,-0.00005691000842489302,-0.00007130674202926457,-0.00010760929581010714,-0.000036453122447710484,-0.000047757712309248745,0.000054562337027164176,0.000027955291443504393,0.00009254179894924164,0.00002200369090132881,-0.00004265725874574855,-0.00010851425759028643,-0.0001688027841737494,-0.00016441606567241251,-0.00021186693629715592,-0.0001573815243318677,-0.00018332900071982294,-0.0001501880760770291,-0.00010138592188013718,-0.00008154666284099221,-0.00013429764658212662,-0.00008883286500349641,-0.0001400368637405336,-0.00010151389869861305,-0.000043619606003630906,-0.00004538596476777457,-0.000031638654036214575,-0.00003416767867747694,-0.00006974972347961739,-0.00005143813177710399,-0.00010723905870690942,-0.00012572293053381145,-0.00002397704156464897,-0.00009767053415998816,0.00011572502262424678,0.00005432979014585726,0.00007883126090746373,0.0000620109640294686,0.00007341729360632598,0.00004993831316824071,0.00011931547487620264,0.00005841327947564423,0.00005921594856772572,0.00001511409482191084,0.000033078180422307923,0.000019489067199174315,0.000033935510145965964,-0.000011722012459358666,0.00004304029425838962,-0.000035746488720178604,0.00003718510197359137,-0.000058436104154679924,-0.00001174940280179726,-0.00013024899817537516,0.000020506238797679543,-0.00007963776442920789,0.00003176229074597359,-0.00005422571848612279,-0.00002636853423609864,-0.00014182373706717044,-0.000049795104132499546,-0.00017246516654267907,-0.00009185299859382212,-0.00017978546384256333,-0.00013231371121946722,-0.00016474576841574162,-0.0001400558976456523,-0.00015335241914726794,-0.0001470029092160985,-0.00018156964506488293,-0.00014865070988889784,-0.0001718680141493678,-0.00012142615742050111,-0.00014900251699145883,-0.00007435568841174245,-0.00012459667050279677,-0.00008725070802029222,-0.00011005691339960322,-0.00008626709313830361,-0.00012864137534052134,-0.00004616122896550223,-0.0001554132904857397,-0.00009952057007467374,-0.00021355791250243783,-0.0001459539489587769,-0.00023241406597662717,-0.00013092698645778,-0.00017168368503917009,-0.00015152087144088,-0.00015848565089982003,-0.0001564635313116014,-0.00018872391956392676,-0.00011087577149737626,-0.00015771349717397243,-0.0000527798110852018,-0.00008749643166083843,-0.000036134504625806585,-0.00004221020935801789,-0.00008243389311246574,-0.00005874632915947586,-0.0001164921632152982,-0.00013457277964334935,-0.0001483543310314417,-0.00019349232024978846,-0.00023352073912974447,-0.00023075437638908625,-0.00028925627702847123,-0.00027289867284707725,-0.00029771780828014016,-0.0003031028318218887,-0.0002913945645559579,-0.0003263660764787346,-0.00015898887068033218,-0.00020953141211066395,0.000021462499717017636,0.000016161218809429556,0.00006929994560778141,0.00007043606456136331,0.000042957883124472573,-0.000021664078303729184,0.000008055478247115389,-0.00008845835691317916,0.00006582804780919105,-0.000016302576113957912,0.00015406384773086756,0.00010176366777159274,0.00009414566011400893,0.0000354732692358084,0.00007631623884662986,-0.000012391613381623756,0.00007941365765873343,0.0000648690911475569,0.00001397199412167538,0.00010448538523633033,0.000029168595574446954,0.00008860438538249582,-0.00006609586125705391,-0.00006593324360437691,-0.0002065992885036394,-0.0001552091707708314,-0.00018771870236378163,-0.00007774525874992833,-0.00012997548037674278,-0.00007887235551606864,-0.0000391396097256802,-0.000076210533734411,-0.0000876762715051882,-0.0000996374583337456,-0.00014420422667171806,-0.0001080437286873348,0.000032678239222150296,0.00001941799564519897,0.00008381356747122481,0.000031045052310219035,0.00006379729165928438,0.000027837693778565153,0.00006071649841032922,0.00002810096339089796,-0.000023521930415881798,-0.000042365853005321696,0.000022846543288324028,-0.000005697456799680367,0.00003526679938659072,-0.00004256410466041416,-0.0000757251400500536,-0.00013366315397433937,-0.00011955667287111282,-0.00011828384594991803,-0.00017747009405866265,-0.00016866534133441746,-0.0001741003361530602,-0.00016113329911604524,-0.00020356231834739447,-0.0001154246274381876,-0.00034802500158548355,-0.00014464158448390663,-0.0003696058120112866,-0.00011752495629480109,-0.00038095645140856504,-0.00015291014278773218,-0.0003850535140372813,-0.00025106975226663053,-0.00019905260705854744,-0.0002682860067579895,0.0000021677478798665106,-0.0002483882417436689,0.0001757844293024391,-0.0002012909681070596,0.00042002167901955545,-0.00011912333138752729,0.000566192960832268,0.000036280973290558904,0.0006151891429908574,0.000419270625570789,0.0007446972886100411,0.0009848694317042828,0.0007311853696592152,0.0014010249869897962,0.000447156373411417,0.001734805991873145,0.000048851674364414066,0.002086761873215437,-0.00039686530362814665,0.002081888262182474,-0.0007315071416087449,0.0017690588720142841,-0.0011235257843509316,0.0012453674571588635,-0.001530013862065971,0.0005929881590418518,-0.0015843822620809078,0.00013364609912969172,-0.001662310678511858,-0.0004051764262840152,-0.0017336646560579538,-0.0008209687657654285,-0.0017958111129701138,-0.0008799072238616645,-0.0023105277214199305,-0.0009375008521601558,-0.0026750226970762014,-0.00045945230522193015,-0.00301142456009984,0.00032612154609523714,-0.0037594083696603775,0.000844741880428046,-0.004248717334121466,0.001590814790688455,-0.004585081245750189,0.0022387588396668434,-0.004611271433532238,0.002747831167653203,-0.004052754957228899,0.0032969240564852953,-0.003427402814850211,0.0034304591827094555,-0.0024721764493733644,0.003596643218770623,-0.001401375513523817,0.003709446405991912,-0.0006295255152508616,0.0034894035197794437,0.000059773577959276736,0.003397291759029031,0.00038508654688484967,0.0033650926779955626,0.0005159653373993933,0.003734476398676634,0.00030270108254626393,0.0044049047864973545,-0.0007104952237568796,0.004650060087442398,-0.0020415415056049824,0.004571670666337013,-0.003501879284158349,0.004163370467722416,-0.00479539530351758,0.0036168238148093224,-0.005974814295768738,0.002774751279503107,-0.007256212644279003,0.001289845909923315,-0.007495714817196131,0.00010230821499135345,-0.006734591443091631,-0.0007406961522065103,-0.00581145565956831,-0.0016243165591731668,-0.00462182704359293,-0.002173752523958683,-0.0036379247903823853,-0.002846694318577647,-0.002800004556775093,-0.0035107601433992386,-0.0017736477311700583,-0.003419754095375538,-0.0011825866531580687,-0.0027814360801130533,-0.0008575308602303267,-0.0018417327664792538,-0.0002217306027887389,-0.000598331680521369,0.0005840326775796711,0.0008799363858997822,0.0010996086057275534,0.0021491702646017075,0.001309904851950705,0.0030024773441255093,0.0020673295948654413,0.003890095977112651,0.003430642420426011,0.004317090380936861,0.004580176901072264,0.003661549184471369,0.00580180948600173,0.0027171203400939703,0.007631687913089991,0.0020412683952599764,0.009570170193910599,0.0011816845508292317,0.010828486643731594,-0.00026033760514110327,0.010754303075373173,-0.0022562353406101465,0.009428870864212513,-0.00440824031829834,0.00784861296415329,-0.006088739261031151,0.006158956792205572,-0.007177523337304592,0.003770801005885005,-0.00812677014619112,0.0011826830450445414,-0.008794397115707397,-0.0005873069749213755,-0.008513960987329483,-0.0010649776086211205,-0.007513529155403376,-0.0007121718372218311,-0.007079744245857,-0.0002848606090992689,-0.007748864591121674,0.0008878273656591773,-0.008503956720232964,0.0035180600825697184,-0.008739612065255642,0.006504544522613287,-0.009005337953567505,0.008940945379436016,-0.00949372723698616,0.0112361591309309,-0.009555941447615623,0.01331779919564724,-0.008684584870934486,0.014238296076655388,-0.007197503000497818,0.013849114067852497,-0.005386539734899998,0.012764517217874527,-0.003275955095887184,0.01142237801104784,-0.0009684885153546929,0.010298161767423153,0.0016993064200505614,0.009333365596830845,0.00391809456050396,0.008427868597209454,0.0044991616159677505,0.008336156606674194,0.0039911759085953236,0.008962663821876049,0.0027452115900814533,0.009156675077974796,0.00011548047768883407,0.008277789689600468,-0.00374692864716053,0.006709702778607607,-0.008039569482207298,0.00510604539886117,-0.011835870333015919,0.0028857786674052477,-0.014525201171636581,-0.0005683306371793151,-0.015833331272006035,-0.004239668603986502,-0.015388516709208488,-0.006670473609119654,-0.012940594926476479,-0.007479296065866947,-0.008850338868796825,-0.007622465491294861,-0.004532064776867628,-0.0072344085201621056,-0.0008344601956196129,-0.0057411170564591885,0.0022335564717650414,-0.0032891982700675726,0.004121846053749323,0.0008299641194753349,0.005279644392430782,0.003736786311492324,0.0047928947024047375,0.0013215296203270555,0.0010782248573377728,-0.000013336036317923572,-0.0011458239750936627,0.0031413149554282427,-0.00009486293856753036,-0.0011687587248161435,-0.0041114469058811665,-0.017392633482813835,-0.015722988173365593,-0.034477073699235916,-0.027795441448688507,-0.04571573808789253,-0.036322321742773056,-0.05450707674026489,-0.0428432859480381,-0.06265253573656082,-0.047500766813755035,-0.05975385755300522,-0.041561610996723175,-0.032463666051626205,-0.013804420828819275,0.01827487349510193,0.03537826985120773,0.08266807347536087,0.097795769572258,0.15217961370944977,0.1658187061548233,0.22064581513404846,0.23351822793483734,0.28683555126190186,0.298629492521286,0.3469022810459137,0.35707736015319824,0.3909241557121277,0.4009797275066376,0.4156057834625244,0.4274917244911194,0.4247729480266571,0.43869462609291077,0.42078956961631775,0.43660423159599304,0.4062882959842682,0.42413580417633057,0.3860650956630707,0.4054466187953949,0.36459267139434814,0.38485953211784363,0.34501156210899353,0.3655964732170105,0.32996436953544617,0.34972891211509705,0.3208392858505249,0.3385865390300751,0.31652164459228516,0.3319227993488312,0.31623896956443787,0.3296041488647461,0.3198554813861847,0.3315024673938751,0.32542842626571655,0.3357532024383545,0.3314844071865082,0.3411482274532318,0.33733949065208435,0.3469061255455017,0.3416065573692322,0.3515341877937317,0.34387338161468506,0.35465532541275024,0.3446221947669983,0.3560125529766083,0.3444567918777466,0.35549405217170715,0.3434079587459564,0.3537798523902893,0.34088873863220215,0.35074639320373535,0.3382267653942108,0.34693875908851624,0.3369491696357727,0.3435756266117096,0.33618712425231934,0.3405708968639374,0.3352181017398834,0.337916761636734,0.3344864845275879,0.3360024392604828,0.3347020149230957,0.33500710129737854,0.33559557795524597,0.3345468044281006,0.3356438875198364,0.33335721492767334,0.33476224541664124,0.3313899040222168,0.33328360319137573,0.3290165960788727,0.33022430539131165,0.325093150138855,0.3257369101047516,0.3194625973701477,0.32044002413749695,0.3130733370780945,0.3142836391925812,0.3061066269874573,0.3078814744949341,0.2988135516643524,0.30184903740882874,0.2917783856391907,0.2964288294315338,0.2853374481201172,0.2916559875011444,0.27951890230178833,0.2874945402145386,0.274495929479599,0.2842196524143219,0.27030646800994873,0.28150874376296997,0.26606911420822144,0.27893924713134766,0.26149675250053406,0.2760584354400635,0.2568477988243103,0.27202627062797546,0.2516094148159027,0.26775065064430237,0.24617767333984375,0.26375263929367065,0.240883007645607,0.2583709955215454,0.2348024845123291,0.2521602511405945,0.22854775190353394,0.24681374430656433,0.22324083745479584,0.24198345839977264,0.21861906349658966,0.23773431777954102,0.21457253396511078,0.23431454598903656,0.2108982503414154,0.23115283250808716,0.20731040835380554,0.22855831682682037,0.20408383011817932,0.22669631242752075,0.2009020447731018,0.22472351789474487,0.19726240634918213,0.22214411199092865,0.19329386949539185,0.2187594175338745,0.1889563798904419,0.21419735252857208,0.18386077880859375,0.20839394629001617,0.17786459624767303,0.2017228603363037,0.1712917685508728,0.19439153373241425,0.16436927020549774,0.18625706434249878,0.1569976955652237,0.17753638327121735,0.14927631616592407,0.16906782984733582,0.14145801961421967,0.16131752729415894,0.13372083008289337,0.15394407510757446,0.1261877566576004,0.14700950682163239,0.11899550259113312,0.14078551530838013,0.11220572888851166,0.13472723960876465,0.10562274605035782,0.1288258135318756,0.09939584136009216,0.12334570288658142,0.09371078014373779,0.11740842461585999,0.08796590566635132,0.11085216701030731,0.08191831409931183,0.10430294275283813,0.0758076012134552,0.09747365862131119,0.06946639716625214,0.09014172852039337,0.06285040080547333,0.08244733512401581,0.05589297041296959,0.0747237503528595,0.0486995093524456,0.06748583912849426,0.04179181903600693,0.06031538173556328,0.034901268780231476,0.05304372310638428,0.02791520208120346,0.04633215442299843,0.021517589688301086,0.039766762405633926,0.015343964099884033,0.03282143175601959,0.008753910660743713,0.0258503258228302,0.0020630136132240295,0.01878304034471512,-0.004641629755496979,0.011329539120197296,-0.01166088879108429,0.003378555178642273,-0.019190803170204163,-0.005097053945064545,-0.027227118611335754,-0.013719238340854645,-0.03537680208683014,-0.022374339401721954,-0.043488986790180206,-0.03137648105621338,-0.05187668651342392,-0.04053819179534912,-0.0604567751288414,-0.049499429762363434,-0.06884048134088516,-0.05849288031458855,-0.07712171971797943,-0.06773670017719269,-0.08554264158010483,-0.07693895697593689,-0.09397900104522705,-0.08596764504909515,-0.10236804187297821,-0.09495700895786285,-0.11071249842643738,-0.10388500988483429,-0.11891487240791321,-0.11278313398361206,-0.1271471083164215,-0.12161137163639069,-0.1353926956653595,-0.1302194446325302,-0.14331747591495514,-0.13882678747177124,-0.15112300217151642,-0.14760717749595642,-0.15909935534000397,-0.1563674807548523,-0.1669865846633911,-0.1650761067867279,-0.17466247081756592,-0.1739044189453125,-0.1824301928281784,-0.18288172781467438,-0.19044317305088043,-0.19180621206760406,-0.1984090507030487,-0.2006174921989441,-0.2061910629272461,-0.2095491737127304,-0.2141258418560028,-0.2184688150882721,-0.22216469049453735,-0.22707563638687134,-0.2299291044473648,-0.23560881614685059,-0.23756471276283264,-0.24421198666095734,-0.24524550139904022,-0.2526945173740387,-0.252858430147171,-0.2611212730407715,-0.2604433596134186,-0.26948052644729614,-0.2679097056388855,-0.27768683433532715,-0.2752090096473694,-0.2859497666358948,-0.28264039754867554,-0.29414576292037964,-0.29005101323127747,-0.30205854773521423,-0.2971515655517578,-0.31004756689071655,-0.30430930852890015,-0.3181053400039673,-0.3115376830101013,-0.32590630650520325,-0.31850019097328186,-0.33365267515182495,-0.32542774081230164,-0.3414079546928406,-0.33242523670196533,-0.34893766045570374,-0.33921313285827637,-0.3563483953475952,-0.3458234965801239,-0.36362698674201965,-0.35227999091148376,-0.3707098960876465,-0.3586232364177704,-0.37783506512641907,-0.36508598923683167,-0.3848576247692108,-0.3714151680469513,-0.3916032016277313,-0.3774167597293854,-0.3983784317970276,-0.38348257541656494,-0.4050813317298889,-0.38953205943107605,-0.4114915728569031,-0.3952938914299011,-0.41792139410972595,-0.40107113122940063,-0.4242797791957855,-0.4067872166633606,-0.430213063955307,-0.4120813012123108,-0.4359695613384247,-0.41720691323280334,-0.4416967034339905,-0.4222995638847351,-0.44718682765960693,-0.42709559202194214,-0.45248913764953613,-0.43165889382362366,-0.45770472288131714,-0.4361976385116577,-0.4627995789051056,-0.4406948685646057,-0.467723548412323,-0.4449848532676697,-0.4723993241786957,-0.4489439129829407,-0.47690653800964355,-0.4527551233768463,-0.4812902808189392,-0.4565407931804657,-0.48539483547210693,-0.4600854218006134,-0.48930904269218445,-0.4634152054786682,-0.4931594729423523,-0.4667051434516907,-0.49675899744033813,-0.46982237696647644,-0.5000807046890259,-0.4727060794830322,-0.5032362341880798,-0.47544509172439575,-0.5061864256858826,-0.4780427813529968,-0.5089499354362488,-0.4805164635181427,-0.5115028023719788,-0.4827759861946106,-0.513809084892273,-0.48477935791015625,-0.5159985423088074,-0.48671194911003113,-0.5179522633552551,-0.4884487986564636,-0.5195164084434509,-0.4897882044315338,-0.520979642868042,-0.4910416007041931,-0.5224595069885254,-0.492371529340744,-0.5237541198730469,-0.4935266375541687,-0.5248284339904785,-0.4944034814834595,-0.5256340503692627,-0.4950096309185028,-0.5261802077293396,-0.4954404830932617,-0.5266210436820984,-0.4957996904850006,-0.5268115997314453,-0.4958656430244446,-0.5266780257225037,-0.4956287741661072,-0.5264650583267212,-0.4954100549221039,-0.526107668876648,-0.495071142911911,-0.5254742503166199,-0.49441009759902954,-0.5246858596801758,-0.4936348795890808,-0.523658812046051,-0.4927383065223694,-0.5223727226257324,-0.4916102886199951,-0.5210084915161133,-0.4903441369533539,-0.5194172263145447,-0.4888645112514496,-0.5174907445907593,-0.4871516525745392,-0.5154325366020203,-0.48535043001174927,-0.5132569074630737,-0.4833911061286926,-0.5109375715255737,-0.4812907576560974,-0.5085335969924927,-0.47917601466178894,-0.5059165954589844,-0.4768742620944977,-0.5030509233474731,-0.4742845892906189,-0.500028669834137,-0.4715332090854645,-0.4968000054359436,-0.46862754225730896,-0.49335336685180664,-0.46553701162338257,-0.4896450638771057,-0.46218371391296387,-0.48560720682144165,-0.4585230052471161,-0.4814741313457489,-0.4548163115978241,-0.47733908891677856,-0.45113861560821533,-0.47292858362197876,-0.44719982147216797,-0.46825575828552246,-0.4430288076400757,-0.46353116631507874,-0.43884843587875366,-0.4587159752845764,-0.43462270498275757,-0.45373016595840454,-0.43027472496032715,-0.44851088523864746,-0.4257199764251709,-0.4430246949195862,-0.42090100049972534,-0.4373963177204132,-0.41597795486450195,-0.43161025643348694,-0.4109745919704437,-0.42553985118865967,-0.40570569038391113,-0.4193096160888672,-0.4002203345298767,-0.41303032636642456,-0.39467763900756836,-0.4066188335418701,-0.38908135890960693,-0.4000610113143921,-0.38337835669517517,-0.3933746814727783,-0.37749603390693665,-0.3865426182746887,-0.37144654989242554,-0.3795803189277649,-0.36532968282699585,-0.37244653701782227,-0.3590787649154663,-0.36512744426727295,-0.3526001274585724,-0.35773417353630066,-0.3460187315940857,-0.3503147065639496,-0.339443564414978,-0.3428031802177429,-0.3328033685684204,-0.33511918783187866,-0.32598936557769775,-0.3272414207458496,-0.318989634513855,-0.319307416677475,-0.31192755699157715,-0.3114268183708191,-0.30487531423568726,-0.3034377694129944,-0.29770565032958984,-0.2951779365539551,-0.29031598567962646,-0.28677380084991455,-0.2827863097190857,-0.2784140706062317,-0.27522894740104675,-0.2700554132461548,-0.26765698194503784,-0.26152825355529785,-0.2599930167198181,-0.25285422801971436,-0.2521980106830597,-0.24422062933444977,-0.2443566769361496,-0.2356354296207428,-0.23653943836688995,-0.22694560885429382,-0.2287016212940216,-0.218154639005661,-0.22078363597393036,-0.20938779413700104,-0.2128010392189026,-0.20065683126449585,-0.20482154190540314,-0.19187307357788086,-0.19685180485248566,-0.18300488591194153,-0.18880067765712738,-0.17411771416664124,-0.1806454360485077,-0.16525717079639435,-0.17248183488845825,-0.15638071298599243,-0.1643337905406952,-0.14744843542575836,-0.15611480176448822,-0.13846251368522644,-0.14778637886047363,-0.12942667305469513,-0.1394030600786209,-0.12038421630859375,-0.13102714717388153,-0.11140423268079758,-0.12266922742128372,-0.10246630012989044,-0.11430176347494125,-0.09349130839109421,-0.10590529441833496,-0.08449366688728333,-0.09749168902635574,-0.07557141780853271,-0.08910224586725235,-0.06675387918949127,-0.0807742029428482,-0.057972121983766556,-0.07248006016016006,-0.0491742342710495,-0.06414788961410522,-0.04038545489311218,-0.05578262731432915,-0.031651221215724945,-0.04744748771190643,-0.023004386574029922,-0.03917189687490463,-0.014445883221924305,-0.03089878335595131,-0.005930168554186821,-0.022583838552236557,0.002562102861702442,-0.014277668669819832,0.010952816344797611,-0.0060509974136948586,0.01916518434882164,0.002093313727527857,0.027261536568403244,0.010179467499256134,0.03536767512559891,0.01820770837366581,0.043512094765901566,0.026199307292699814,0.05165395140647888,0.03420865908265114,0.059800952672958374,0.04223240911960602,0.06799114495515823,0.05020764097571373,0.0762426033616066,0.05816218629479408,0.08457324653863907,0.06622572243213654,0.09293084591627121,0.07437774538993835,0.10108152031898499,0.08233530074357986,0.10879091918468475,0.08987627178430557,0.11614792048931122,0.09715694189071655,0.1234435960650444,0.10448165237903595,0.13069337606430054,0.11183199286460876,0.137596994638443,0.11889855563640594,0.1440371870994568,0.12557530403137207,0.15028083324432373,0.13212789595127106,0.15657037496566772,0.13878726959228516,0.1628297120332718,0.1454436331987381,0.16891765594482422,0.15190395712852478,0.1749131679534912,0.15824180841445923,0.1809864193201065,0.16467547416687012,0.18716280162334442,0.17122480273246765,0.19334079325199127,0.17770837247371674,0.19944238662719727,0.18403005599975586,0.2054712474346161,0.19027374684810638,0.21147370338439941,0.1965131163597107,0.21746426820755005,0.202686607837677,0.22337956726551056,0.2087024450302124,0.22914519906044006,0.2145642787218094,0.23477570712566376,0.22034037113189697,0.2403235286474228,0.22606170177459717,0.24574553966522217,0.23169220983982086,0.25093889236450195,0.23718631267547607,0.25590190291404724,0.242568701505661,0.2607375681400299,0.24794656038284302,0.26550406217575073,0.25342273712158203,0.27017199993133545,0.25899767875671387,0.27470505237579346,0.2645891606807709,0.27907735109329224,0.27013954520225525,0.28324833512306213,0.27565181255340576,0.2872246503829956,0.28112611174583435,0.2910986542701721,0.28652048110961914,0.29492753744125366,0.2917826473712921,0.2986379861831665,0.2968660891056061,0.30215686559677124,0.3017169237136841,0.30556589365005493,0.306292861700058,0.30898672342300415,0.3105788826942444,0.31235742568969727,0.31453004479408264,0.31548088788986206,0.3180347979068756,0.31830263137817383,0.3210201859474182,0.3209911286830902,0.32356560230255127,0.32369938492774963,0.32582664489746094,0.3263929486274719,0.3278847932815552,0.3289925754070282,0.32976004481315613,0.33154329657554626,0.33151277899742126,0.33410102128982544,0.33320218324661255,0.3365638256072998,0.3347967565059662,0.3387991189956665,0.3362775146961212,0.3408724367618561,0.33779776096343994,0.34296247363090515,0.33957409858703613,0.3450830578804016,0.34163421392440796,0.34706878662109375,0.3438357412815094,0.348814994096756,0.34612223505973816,0.35035955905914307,0.34857824444770813,0.3517402708530426,0.3512190878391266,0.35293614864349365,0.35391637682914734,0.35395580530166626,0.3565821945667267,0.35486266016960144,0.35927093029022217,0.35572633147239685,0.36204156279563904,0.356637567281723,0.3648494482040405,0.3577037751674652,0.36761653423309326,0.3589226007461548,0.3702812194824219,0.3601362705230713,0.37273502349853516,0.3612326383590698,0.37484031915664673,0.36232203245162964,0.37658295035362244,0.36361539363861084,0.37812894582748413,0.3651997447013855,0.3796727657318115,0.3670227825641632,0.3812750577926636,0.3690119981765747,0.38286787271499634,0.3711033761501312,0.3843686878681183,0.37321075797080994,0.3857674300670624,0.37523677945137024,0.38710513710975647,0.37706899642944336,0.3883553445339203,0.37854859232902527,0.3893587589263916,0.37954261898994446,0.38997459411621094,0.3800737261772156,0.3902926743030548,0.3802680969238281,0.39055025577545166,0.38013553619384766,0.39079850912094116,0.37950754165649414,0.3908044993877411,0.3782094717025757,0.3903343379497528,0.3761543035507202,0.389335036277771,0.3732477128505707,0.3877517879009247,0.3694034218788147,0.38540199398994446,0.36476823687553406,0.38222476840019226,0.3597945272922516,0.3785027265548706,0.35500597953796387,0.37467244267463684,0.3508549928665161,0.371074914932251,0.3479050397872925,0.3680570721626282,0.3469204604625702,0.3661377429962158,0.34853217005729675,0.3658168911933899,0.3528748154640198,0.36726272106170654,0.35964274406433105,0.3702837824821472,0.36830464005470276,0.37445157766342163,0.37805625796318054,0.37910306453704834,0.38772836327552795,0.3833930492401123,0.3960375189781189,0.38656750321388245,0.4019690752029419,0.3881657123565674,0.4048866331577301,0.38796383142471313,0.40447235107421875,0.38597115874290466,0.40075889229774475,0.3825986981391907,0.394109308719635,0.3785688579082489,0.3850228786468506,0.3744800388813019,0.3740721046924591,0.37065625190734863,0.3620791435241699,0.3674893379211426,0.3500944972038269,0.3655659258365631,0.33906349539756775,0.3652535676956177,0.3297199308872223,0.36647671461105347,0.3227653205394745,0.36900168657302856,0.3185165226459503,0.372326135635376,0.31588882207870483,0.37477192282676697,0.31177088618278503,0.37278440594673157,0.3019689917564392,0.36187323927879333,0.2825281023979187,0.3380492031574249,0.25039106607437134,0.29856887459754944,0.20400939881801605,0.24250024557113647,0.14459776878356934,0.17187324166297913,0.07684291154146194,0.09231474250555038,0.00776814017444849,0.011855741031467915,-0.05500537157058716,-0.060879603028297424,-0.1035246029496193,-0.1170259341597557,-0.12914299964904785,-0.14721639454364777,-0.12436288595199585,-0.14353066682815552,-0.08681271970272064,-0.1035139262676239,-0.021452229470014572,-0.032334811985492706,0.06164011359214783,0.05947559326887131,0.15169209241867065,0.16042886674404144,0.2398754358291626,0.2607254385948181,0.3191983103752136,0.3522929549217224,0.3837544322013855,0.42822763323783875,0.4290175437927246,0.4831486642360687,0.4528612196445465,0.514176607131958,0.4562394618988037,0.521668553352356,0.44294753670692444,0.5091447830200195,0.41847264766693115,0.4822106659412384,0.3884967267513275,0.44692263007164,0.3579346537590027,0.40867704153060913,0.3308313190937042,0.37211814522743225,0.31042635440826416,0.34127500653266907,0.2987293004989624,0.31904998421669006,0.2959997057914734,0.30647990107536316,0.30091267824172974,0.3027843236923218,0.3113101124763489,0.306190550327301,0.3247837424278259,0.31460651755332947,0.3388565182685852,0.32574155926704407,0.3511863946914673,0.33718350529670715,0.35997089743614197,0.34681347012519836,0.3642255961894989,0.3532503843307495,0.3637520968914032,0.35595330595970154,0.3590213358402252,0.3550752103328705,0.351114958524704,0.35131362080574036,0.3415455222129822,0.3457548916339874,0.3318597078323364,0.3396145701408386,0.32324835658073425,0.33392757177352905,0.31639763712882996,0.32932248711586,0.3115268051624298,0.3259360194206238,0.3084493577480316,0.32346779108047485,0.3066614270210266,0.3213740587234497,0.3055570721626282,0.3191356658935547,0.30470365285873413,0.3164435923099518,0.3039399981498718,0.313181608915329,0.30320900678634644,0.30928266048431396,0.3023843467235565,0.3046846091747284,0.3013804256916046,0.2994810938835144,0.3003881573677063,0.29404520988464355,0.2997879981994629,0.28885146975517273,0.2997121810913086,0.28411442041397095,0.2998063862323761,0.2796758711338043,0.2995368540287018,0.2752785384654999,0.2986152470111847,0.2708359360694885,0.2969832122325897,0.2663668990135193,0.29451480507850647,0.26180583238601685,0.2909870147705078,0.25703945755958557,0.2863495647907257,0.25208550691604614,0.2808309495449066,0.24710004031658173,0.27474072575569153,0.2422293871641159,0.26830995082855225,0.23756276071071625,0.261757493019104,0.23320716619491577,0.25537675619125366,0.22930194437503815,0.2494843453168869,0.22595880925655365,0.24431155622005463,0.22322537004947662,0.23989641666412354,0.2210220843553543,0.235987588763237,0.2190142273902893,0.2321094125509262,0.21664059162139893,0.22785964608192444,0.2134196013212204,0.2231336086988449,0.20920293033123016,0.21797817945480347,0.20404097437858582,0.2123415470123291,0.19792068004608154,0.20616373419761658,0.19082854688167572,0.19966572523117065,0.18301355838775635,0.19332806766033173,0.1749725341796875,0.18755415081977844,0.16715316474437714,0.18249043822288513,0.15979434549808502,0.1781284064054489,0.15299631655216217,0.17435649037361145,0.14673756062984467,0.1708746999502182,0.1408073604106903,0.16724835336208344,0.13490109145641327,0.16312113404273987,0.1288263201713562,0.1582898050546646,0.12252052128314972,0.1526111662387848,0.11592620611190796,0.14601793885231018,0.109025739133358,0.1386347860097885,0.10197537392377853,0.13071639835834503,0.09501562267541885,0.12245433777570724,0.08824774622917175,0.11396884173154831,0.0816502720117569,0.10543704777956009,0.0752602368593216,0.09703152626752853,0.06912031024694443,0.08874747902154922,0.06306732445955276,0.0804801806807518,0.05680617690086365,0.07224872708320618,0.050199929624795914,0.06413860619068146,0.04326504096388817,0.056058719754219055,0.03589431941509247,0.04781285300850868,0.02787492424249649,0.03942457586526871,0.019239455461502075,0.031131481751799583,0.010328397154808044,0.023022381588816643,0.001407034695148468,0.014940470457077026,-0.007533639669418335,0.006808610633015633,-0.016492079943418503,-0.0012192577123641968,-0.025234082713723183,-0.009038610383868217,-0.03353056684136391,-0.016785575076937675,-0.041423678398132324,-0.024613576009869576,-0.04908459633588791,-0.03248251974582672,-0.056559376418590546,-0.04031608998775482,-0.0638224333524704,-0.04819875210523605,-0.07095935940742493,-0.05626891925930977,-0.07813222706317902,-0.06454124301671982,-0.08543310314416885,-0.0729595273733139,-0.09288822114467621,-0.0815194621682167,-0.10053624212741852,-0.09023560583591461,-0.10840082168579102,-0.09907303005456924,-0.11644048988819122,-0.1079840436577797,-0.12459170818328857,-0.11693437397480011,-0.1328069120645523,-0.12586098909378052,-0.14102135598659515,-0.1347116231918335,-0.14916948974132538,-0.14354576170444489,-0.15726426243782043,-0.15246544778347015,-0.16536462306976318,-0.16142883896827698,-0.1734473705291748,-0.17029942572116852,-0.18144424259662628,-0.17903432250022888,-0.18932628631591797,-0.18777750432491302,-0.19719542562961578,-0.1966264843940735,-0.2051265984773636,-0.20549310743808746,-0.21306931972503662,-0.2142835110425949,-0.22096262872219086,-0.2230629175901413,-0.2288345843553543,-0.23193064332008362,-0.23672154545783997,-0.24084587395191193,-0.24458253383636475,-0.24968738853931427,-0.2523565888404846,-0.25840240716934204,-0.26002565026283264,-0.2669919431209564,-0.2675635516643524,-0.2754093110561371,-0.2748936712741852,-0.2835761606693268,-0.28195685148239136,-0.2914767563343048,-0.2887730896472931,-0.29917678236961365,-0.2954060733318329,-0.3067672550678253,-0.30192068219184875,-0.31432220339775085,-0.30839264392852783,-0.32188379764556885,-0.31489381194114685,-0.3294561803340912,-0.3214408755302429,-0.3370295464992523,-0.328012615442276,-0.3446136713027954,-0.33462363481521606,-0.35221201181411743,-0.34130868315696716,-0.3597670793533325,-0.34802311658859253,-0.36719390749931335,-0.3546490967273712,-0.3744781017303467,-0.36113351583480835,-0.38167330622673035,-0.36753392219543457,-0.3887888789176941,-0.37389105558395386,-0.39575546979904175,-0.38014477491378784,-0.40252387523651123,-0.38622432947158813,-0.4091200828552246,-0.39214345812797546,-0.4155809283256531,-0.3979530334472656,-0.42190879583358765,-0.40365856885910034,-0.4280899465084076,-0.40922433137893677,-0.43409258127212524,-0.4146045446395874,-0.43986040353775024,-0.4197533428668976,-0.44537705183029175,-0.42464694380760193,-0.4506929814815521,-0.4293072521686554,-0.4558223783969879,-0.43376216292381287,-0.4606941044330597,-0.43799930810928345,-0.4652884602546692,-0.442005455493927,-0.4697306454181671,-0.4458353519439697,-0.4741453230381012,-0.44958731532096863,-0.47850847244262695,-0.45330822467803955,-0.4827500581741333,-0.4569667875766754,-0.4869179129600525,-0.46052834391593933,-0.4911094307899475,-0.4640166759490967,-0.49528059363365173,-0.4674590229988098,-0.49924901127815247,-0.4707924723625183,-0.5029004216194153,-0.4738979935646057,-0.5062958002090454,-0.4767228066921234,-0.5095095038414001,-0.47928720712661743,-0.5124505758285522,-0.4815814197063446,-0.5149758458137512,-0.48357388377189636,-0.5171502828598022,-0.48531922698020935,-0.5192136764526367,-0.4869314432144165,-0.5212603807449341,-0.488446980714798,-0.5231381058692932,-0.48984047770500183,-0.52472984790802,-0.4911395013332367,-0.5261441469192505,-0.4923926889896393,-0.527509868144989,-0.49356329441070557,-0.5287466049194336,-0.49457594752311707,-0.5296869277954102,-0.49541616439819336,-0.5303183197975159,-0.49609023332595825,-0.5307528972625732,-0.49656811356544495,-0.5310207605361938,-0.4968433976173401,-0.5310498476028442,-0.496968537569046,-0.530831515789032,-0.49698033928871155,-0.5304620265960693,-0.49686378240585327,-0.5299873352050781,-0.4966042637825012,-0.5293381810188293,-0.4962059259414673,-0.5284557342529297,-0.49565649032592773,-0.5273529887199402,-0.4949106276035309,-0.526007354259491,-0.4938989281654358,-0.5243396759033203,-0.49257004261016846,-0.5223512649536133,-0.49095845222473145,-0.5201387405395508,-0.48915889859199524,-0.5177398324012756,-0.48719456791877747,-0.5151124596595764,-0.4850119352340698,-0.5122785568237305,-0.482637494802475,-0.5093286633491516,-0.4801918864250183,-0.5062897801399231,-0.4777042865753174,-0.5031248927116394,-0.475080281496048,-0.49982544779777527,-0.4722902476787567,-0.4963882863521576,-0.46941402554512024,-0.49277254939079285,-0.46646642684936523,-0.48896169662475586,-0.46334540843963623,-0.48497438430786133,-0.45997869968414307,-0.48077625036239624,-0.4563928246498108,-0.4763081669807434,-0.45262888073921204,-0.47160157561302185,-0.4486851990222931,-0.4667295813560486,-0.4445449113845825,-0.46167927980422974,-0.4402090609073639,-0.45640772581100464,-0.4357064366340637,-0.45095518231391907,-0.43107399344444275,-0.4453774094581604,-0.4263157844543457,-0.43965455889701843,-0.4214092791080475,-0.43376171588897705,-0.4163581430912018,-0.427729070186615,-0.4111863970756531,-0.42157092690467834,-0.40588706731796265,-0.41525986790657043,-0.40044105052948,-0.4087994396686554,-0.3948689103126526,-0.4022263288497925,-0.38919609785079956,-0.3955446183681488,-0.38339942693710327,-0.3887292444705963,-0.3774532377719879,-0.3817715644836426,-0.37138763070106506,-0.37467828392982483,-0.3652406632900238,-0.36746498942375183,-0.3589944839477539,-0.36015987396240234,-0.35260990262031555,-0.3527684509754181,-0.3460889160633087,-0.3452497124671936,-0.33946171402931213,-0.3375682830810547,-0.3327275514602661,-0.3297394812107086,-0.32584986090660095,-0.3218045234680176,-0.3188246786594391,-0.31380194425582886,-0.31171417236328125,-0.3057512938976288,-0.3045653700828552,-0.29762595891952515,-0.29733529686927795,-0.28938376903533936,-0.28996893763542175,-0.2810479402542114,-0.28250637650489807,-0.2726821303367615,-0.27501970529556274,-0.2642843723297119,-0.26749780774116516,-0.2558106482028961,-0.25989100337028503,-0.24728626012802124,-0.25220686197280884,-0.23876431584358215,-0.24447709321975708,-0.23021483421325684,-0.23670168220996857,-0.22157728672027588,-0.22887814044952393,-0.21286465227603912,-0.221002995967865,-0.20411089062690735,-0.21303793787956238,-0.19533251225948334,-0.20500221848487854,-0.1864926666021347,-0.19693033397197723,-0.1776198148727417,-0.18884466588497162,-0.16875708103179932,-0.1807192862033844,-0.15989913046360016,-0.1725713461637497,-0.15102531015872955,-0.16447541117668152,-0.14213839173316956,-0.15643048286437988,-0.13326241075992584,-0.1483512669801712,-0.12442145496606827,-0.1402113437652588,-0.11559772491455078,-0.13205887377262115,-0.10671859979629517,-0.12390013784170151,-0.09771277010440826,-0.11567951738834381,-0.08856542408466339,-0.10734037309885025,-0.07931990921497345,-0.09885535389184952,-0.07004343718290329,-0.09027108550071716,-0.06076359748840332,-0.08171606063842773,-0.051445167511701584,-0.07325153797864914,-0.042089834809303284,-0.0647740513086319,-0.03280926123261452,-0.056217558681964874,-0.02369919791817665,-0.04774121567606926,-0.014719998463988304,-0.03951798379421234,-0.005831114947795868,-0.031474702060222626,0.0028619803488254547,-0.023466356098651886,0.011266704648733139,-0.015539433807134628,0.019486743956804276,-0.007796190679073334,0.02764134854078293,-0.0002129673957824707,0.035642001777887344,0.007213525474071503,0.043391402810811996,0.014408908784389496,0.051025353372097015,0.021428555250167847,0.05867929756641388,0.028416655957698822,0.0662369579076767,0.03535858541727066,0.07358866930007935,0.042189568281173706,0.08084963262081146,0.0490066260099411,0.08807537704706192,0.05589109659194946,0.09510941803455353,0.06279647350311279,0.10187757015228271,0.06977587193250656,0.10846224427223206,0.07693607360124588,0.11485867202281952,0.08415903151035309,0.12102552503347397,0.09127787500619888,0.12707127630710602,0.09834423661231995,0.13310644030570984,0.10538395494222641,0.1391477882862091,0.11228538304567337,0.14532488584518433,0.11914981156587601,0.15184150636196136,0.12623929977416992,0.15870630741119385,0.13356147706508636,0.16585108637809753,0.14108172059059143,0.17339038848876953,0.1491435021162033,0.1814194768667221,0.15807709097862244,0.18974897265434265,0.16768202185630798,0.198135644197464,0.17754817008972168,0.20657123625278473,0.18749697506427765,0.2151017040014267,0.1973915696144104,0.22352728247642517,0.20688694715499878,0.2315070927143097,0.21554161608219147,0.23887209594249725,0.22295071184635162,0.24563157558441162,0.22886541485786438,0.25171032547950745,0.23340195417404175,0.2569041848182678,0.23695433139801025,0.261075884103775,0.23977386951446533,0.26421427726745605,0.24187617003917694,0.2663898468017578,0.24339160323143005,0.2677948474884033,0.24464905261993408,0.26866623759269714,0.24582798779010773,0.2691427767276764,0.24681979417800903,0.26940131187438965,0.24747145175933838,0.26977843046188354,0.2477508783340454,0.2705434560775757,0.24775663018226624,0.27185192704200745,0.24776995182037354,0.2739870250225067,0.2481580376625061,0.27716192603111267,0.2491474449634552,0.28118157386779785,0.25096777081489563,0.28582748770713806,0.25415366888046265,0.29126155376434326,0.2592353820800781,0.29756784439086914,0.2661699652671814,0.30439600348472595,0.274442195892334,0.3113973140716553,0.2835386097431183,0.3184615671634674,0.2930457592010498,0.3254229426383972,0.3025587797164917,0.33204150199890137,0.3116576075553894,0.33815014362335205,0.3198394179344177,0.3434916138648987,0.3266984820365906,0.34775760769844055,0.3323238790035248,0.35095351934432983,0.33714330196380615,0.35330039262771606,0.34139373898506165,0.3547760844230652,0.3451768755912781,0.35519939661026,0.34872883558273315,0.354733943939209,0.3521868586540222,0.35391494631767273,0.35551464557647705,0.3531007468700409,0.3588149845600128,0.35216692090034485,0.362111359834671,0.3509524166584015,0.3649575114250183,0.3497481942176819,0.3669162392616272,0.34890446066856384,0.3680737018585205,0.34819650650024414,0.36864179372787476,0.34714847803115845,0.3686122000217438,0.34571465849876404,0.36799123883247375,0.34409332275390625,0.36683329939842224,0.34221574664115906,0.36515533924102783,0.33987826108932495,0.3631545305252075,0.33708736300468445,0.36112385988235474,0.33407649397850037,0.3591340482234955,0.33116063475608826,0.35727792978286743,0.3285318911075592,0.35586118698120117,0.3262489140033722,0.35493436455726624,0.3246261179447174,0.3543103337287903,0.324245810508728,0.3542410731315613,0.3252984285354614,0.35525748133659363,0.3275124430656433,0.35742220282554626,0.3308638334274292,0.3604626953601837,0.33558639883995056,0.3642706573009491,0.34152770042419434,0.3687928318977356,0.34815678000450134,0.37390872836112976,0.3549131751060486,0.3794596493244171,0.36118724942207336,0.3849322199821472,0.3664550185203552,0.3894926607608795,0.3704560697078705,0.39263832569122314,0.37284305691719055,0.3941919207572937,0.3731362521648407,0.39371824264526367,0.3713011145591736,0.39081722497940063,0.36774566769599915,0.3857673704624176,0.36292165517807007,0.3792005181312561,0.35753628611564636,0.37164250016212463,0.35247477889060974,0.3638255000114441,0.34811195731163025,0.3568190634250641,0.34460335969924927,0.35156095027923584,0.342583566904068,0.3486330211162567,0.3424295485019684,0.3483543395996094)\n\
+\n\
+,\n\
+\n\
+new Array(0.3436359763145447,0.3507392704486847,0.3458445370197296,0.35553568601608276,0.349070280790329,0.36218830943107605,0.3529009521007538,0.36989903450012207,0.3567352890968323,0.3776802718639374,0.3602409362792969,0.3845756947994232,0.3624301850795746,0.38984495401382446,0.36204901337623596,0.3930245339870453,0.35958513617515564,0.39386096596717834,0.35623884201049805,0.39222022891044617,0.35106125473976135,0.3883177638053894,0.34256747364997864,0.38292935490608215,0.3323298692703247,0.3768877685070038,0.323260098695755,0.37063145637512207,0.3156992495059967,0.3646821975708008,0.3084883987903595,0.35974499583244324,0.3018919825553894,0.35562121868133545,0.29641395807266235,0.3507556915283203,0.2904132902622223,0.34314075112342834,0.28101786971092224,0.33097949624061584,0.26616284251213074,0.31287649273872375,0.2446533590555191,0.2879803478717804,0.21516236662864685,0.255038857460022,0.17608602344989777,0.21176795661449432,0.12704282999038696,0.15780548751354218,0.07108964771032333,0.09810417890548706,0.014752926304936409,0.040358446538448334,-0.035008858889341354,-0.010328201577067375,-0.07317540794610977,-0.05101863294839859,-0.09570048749446869,-0.07671763747930527,-0.09804818034172058,-0.08093484491109848,-0.0764317587018013,-0.06037058308720589,-0.03042197786271572,-0.01648930460214615,0.03596554324030876,0.0465453676879406,0.11531345546245575,0.12299899756908417,0.1989039182662964,0.20528899133205414,0.27868446707725525,0.28483620285987854,0.34824496507644653,0.3541155457496643,0.40280720591545105,0.40809503197669983,0.43914052844047546,0.4442239999771118,0.45606517791748047,0.46168196201324463,0.4549923837184906,0.4612167477607727,0.43956613540649414,0.4456948935985565,0.41455766558647156,0.41990524530410767,0.3848838806152344,0.3890814185142517,0.35493040084838867,0.35762137174606323,0.32800400257110596,0.3289647400379181,0.30628281831741333,0.3057825565338135,0.291183739900589,0.2896957993507385,0.28327441215515137,0.2809591591358185,0.2818855345249176,0.2787399888038635,0.2854923605918884,0.28177735209465027,0.2925439476966858,0.2886710464954376,0.30161160230636597,0.2977151870727539,0.31119534373283386,0.30709391832351685,0.31999343633651733,0.31554341316223145,0.3271985352039337,0.3224572539329529,0.3323807716369629,0.3273491859436035,0.3353782892227173,0.32981887459754944,0.3363034129142761,0.33001670241355896,0.33541586995124817,0.32849812507629395,0.33304548263549805,0.32565680146217346,0.32961732149124146,0.3217451870441437,0.3255370557308197,0.31720080971717834,0.3211156129837036,0.31249549984931946,0.3166646659374237,0.30782362818717957,0.3124258816242218,0.30318742990493774,0.3084467351436615,0.29864123463630676,0.304767370223999,0.29430586099624634,0.3015163242816925,0.290192186832428,0.29865914583206177,0.28612279891967773,0.2959946393966675,0.28194108605384827,0.29342013597488403,0.27772849798202515,0.2908669412136078,0.273634672164917,0.2881903052330017,0.26963305473327637,0.2853950262069702,0.2656824290752411,0.2825847864151001,0.2619113028049469,0.27963492274284363,0.2584269642829895,0.2764520049095154,0.2552037239074707,0.2733556032180786,0.25225701928138733,0.27060335874557495,0.24962079524993896,0.2679532766342163,0.24718371033668518,0.26519572734832764,0.24481931328773499,0.26249805092811584,0.2424980103969574,0.25986188650131226,0.2400670051574707,0.25692054629325867,0.23722389340400696,0.2534322142601013,0.23384401202201843,0.2493741512298584,0.2300342619419098,0.24467289447784424,0.2258572280406952,0.23934808373451233,0.22128351032733917,0.23365342617034912,0.21636269986629486,0.22778062522411346,0.21126005053520203,0.22179719805717468,0.2061673104763031,0.21593421697616577,0.20118600130081177,0.2105105221271515,0.19625036418437958,0.2056254893541336,0.19125910103321075,0.20119091868400574,0.1862357258796692,0.1970648467540741,0.18117842078208923,0.19303493201732635,0.17590683698654175,0.1889193207025528,0.17028747498989105,0.18464966118335724,0.16439872980117798,0.18007981777191162,0.1582980751991272,0.17496532201766968,0.15188351273536682,0.16928313672542572,0.14509545266628265,0.1632496416568756,0.13801680505275726,0.1569652110338211,0.13074497878551483,0.1503717601299286,0.1233326643705368,0.1435215175151825,0.11582323908805847,0.1365867406129837,0.10827413201332092,0.12966367602348328,0.10077520459890366,0.12275254726409912,0.0934087336063385,0.11584542691707611,0.08619605004787445,0.10892727971076965,0.07917298376560211,0.10195941478013992,0.07243507355451584,0.09491272270679474,0.06601165235042572,0.08778388798236847,0.05983836576342583,0.0805385559797287,0.05387263000011444,0.07305917888879776,0.04803667962551117,0.06523420661687851,0.04212284833192825,0.057080116122961044,0.03594566509127617,0.04865209758281708,0.029429901391267776,0.039905570447444916,0.022460641339421272,0.03080851025879383,0.014893142506480217,0.02146265283226967,0.006716256495565176,0.011982964351773262,-0.001997239887714386,0.0024438141845166683,-0.011165347881615162,-0.007014747243374586,-0.020593587309122086,-0.016242871060967445,-0.030016787350177765,-0.025171050801873207,-0.039254624396562576,-0.03368787094950676,-0.04812806844711304,-0.041668251156806946,-0.056405309587717056,-0.04917296767234802,-0.0640219897031784,-0.056338705122470856,-0.07114075869321823,-0.06319992244243622,-0.07793767005205154,-0.06988830864429474,-0.08454476296901703,-0.07669203728437424,-0.09115692973136902,-0.08373631536960602,-0.09804609417915344,-0.09103355556726456,-0.10550685971975327,-0.09883319586515427,-0.11369960010051727,-0.10741837322711945,-0.12249250710010529,-0.11673317849636078,-0.1316787600517273,-0.1266242116689682,-0.14125868678092957,-0.1370970606803894,-0.15116144716739655,-0.1480569839477539,-0.16098646819591522,-0.1592252403497696,-0.1704384982585907,-0.17041613161563873,-0.17959284782409668,-0.18150544166564941,-0.18844667077064514,-0.19222383201122284,-0.1967857927083969,-0.20232486724853516,-0.20461004972457886,-0.21179530024528503,-0.21210674941539764,-0.2207169234752655,-0.21930965781211853,-0.22912082076072693,-0.2262527346611023,-0.23705273866653442,-0.23312364518642426,-0.244648739695549,-0.23997023701667786,-0.25211477279663086,-0.24670550227165222,-0.2596213221549988,-0.2534589469432831,-0.2672247886657715,-0.2604459822177887,-0.27498531341552734,-0.26765093207359314,-0.2830657362937927,-0.2750389277935028,-0.29154103994369507,-0.2827794849872589,-0.3002829849720001,-0.29098790884017944,-0.3091878592967987,-0.29958197474479675,-0.31826746463775635,-0.3085162043571472,-0.32745054364204407,-0.31784147024154663,-0.336588978767395,-0.32749396562576294,-0.34562060236930847,-0.3372446596622467,-0.35447514057159424,-0.3468747138977051,-0.36298662424087524,-0.35627293586730957,-0.3710893392562866,-0.3653349280357361,-0.37888044118881226,-0.3738906681537628,-0.3864019513130188,-0.38183271884918213,-0.3935663104057312,-0.38917502760887146,-0.40029746294021606,-0.39585989713668823,-0.4066075086593628,-0.40175122022628784,-0.4125635325908661,-0.4069103002548218,-0.41820240020751953,-0.41154420375823975,-0.42346662282943726,-0.415698766708374,-0.4283090829849243,-0.4193916618824005,-0.4328407943248749,-0.42285987734794617,-0.4372495412826538,-0.42631256580352783,-0.4416581094264984,-0.4297977387905121,-0.4461841285228729,-0.4335118532180786,-0.451017290353775,-0.43769797682762146,-0.4563363194465637,-0.4422340989112854,-0.46220043301582336,-0.4469219446182251,-0.4685121476650238,-0.4519149363040924,-0.4750834107398987,-0.4572798013687134,-0.4817622900009155,-0.46262893080711365,-0.4883791208267212,-0.4676629602909088,-0.4945853352546692,-0.4724624752998352,-0.5000262260437012,-0.47698476910591125,-0.5046371221542358,-0.4809568226337433,-0.5084781646728516,-0.48434996604919434,-0.5114843249320984,-0.4873488247394562,-0.5136945247650146,-0.48995310068130493,-0.5154111385345459,-0.49210289120674133,-0.516903281211853,-0.4939757287502289,-0.5183118581771851,-0.4957995116710663,-0.5198625922203064,-0.4976169764995575,-0.521746039390564,-0.49945729970932007,-0.5239163041114807,-0.5014687180519104,-0.5263248682022095,-0.5037275552749634,-0.5290380120277405,-0.5061351656913757,-0.5319313406944275,-0.5085968375205994,-0.5346949696540833,-0.5110976099967957,-0.5372004508972168,-0.5135430693626404,-0.5394700765609741,-0.5157400369644165,-0.5414009094238281,-0.5175819993019104,-0.542862057685852,-0.5190489888191223,-0.5438710451126099,-0.5200487375259399,-0.5444741249084473,-0.5204949378967285,-0.5446802377700806,-0.520462155342102,-0.544552206993103,-0.5200443267822266,-0.5441441535949707,-0.5192134380340576,-0.5434141755104065,-0.5179857611656189,-0.542346179485321,-0.5164980292320251,-0.541022777557373,-0.5148156881332397,-0.5394992828369141,-0.5129062533378601,-0.5377427935600281,-0.5108166337013245,-0.5357125997543335,-0.5086457133293152,-0.5334264039993286,-0.5064231157302856,-0.5309809446334839,-0.5041735768318176,-0.5284898281097412,-0.501957893371582,-0.5259407162666321,-0.4997645318508148,-0.5232195854187012,-0.49752259254455566,-0.5203320384025574,-0.4952189326286316,-0.5174044966697693,-0.4928598403930664,-0.5144237279891968,-0.49038657546043396,-0.5112305283546448,-0.48774129152297974,-0.5077933073043823,-0.48493388295173645,-0.5042111873626709,-0.4819803535938263,-0.5004695653915405,-0.47884082794189453,-0.49646249413490295,-0.4754530191421509,-0.4921858608722687,-0.47181081771850586,-0.48766329884529114,-0.4679860472679138,-0.4828302264213562,-0.4640211760997772,-0.4776991307735443,-0.45984530448913574,-0.4724256694316864,-0.4554009437561035,-0.4670521914958954,-0.45078036189079285,-0.46145713329315186,-0.44608256220817566,-0.45564666390419006,-0.4412424862384796,-0.4497779309749603,-0.43617334961891174,-0.44387221336364746,-0.43095916509628296,-0.4378197193145752,-0.4257330596446991,-0.43161824345588684,-0.4204648733139038,-0.4253285229206085,-0.4150194823741913,-0.4189133048057556,-0.4093530774116516,-0.41232648491859436,-0.40354013442993164,-0.40559619665145874,-0.39763739705085754,-0.3987126648426056,-0.3915990889072418,-0.3916330635547638,-0.3853526711463928,-0.38440752029418945,-0.3789190351963043,-0.37710270285606384,-0.37238672375679016,-0.36967653036117554,-0.36577948927879333,-0.3620924651622772,-0.3590465188026428,-0.35440847277641296,-0.3521696627140045,-0.3466413915157318,-0.3451785445213318,-0.3387884497642517,-0.33814793825149536,-0.3308127522468567,-0.33104076981544495,-0.3227776885032654,-0.32384273409843445,-0.31471219658851624,-0.31652259826660156,-0.30657118558883667,-0.3090512454509735,-0.2983539402484894,-0.30152422189712524,-0.2901151776313782,-0.2940562069416046,-0.2818600535392761,-0.2865472733974457,-0.273529976606369,-0.2788337171077728,-0.2650870978832245,-0.27100440859794617,-0.2565560042858124,-0.2632352113723755,-0.2479782998561859,-0.25543200969696045,-0.2393481284379959,-0.24740611016750336,-0.2306208461523056,-0.23924009501934052,-0.22179831564426422,-0.23113234341144562,-0.21295014023780823,-0.22305995225906372,-0.20411615073680878,-0.21488721668720245,-0.19526320695877075,-0.20662233233451843,-0.1863834410905838,-0.19836333394050598,-0.17753858864307404,-0.19014336168766022,-0.16875573992729187,-0.18192589282989502,-0.1599741280078888,-0.17364239692687988,-0.15114164352416992,-0.16524434089660645,-0.14228147268295288,-0.15676435828208923,-0.13342416286468506,-0.1482381820678711,-0.12454365193843842,-0.13959383964538574,-0.11561007052659988,-0.13077281415462494,-0.10667137056589127,-0.12187683582305908,-0.09781067073345184,-0.11302471160888672,-0.08900970220565796,-0.10418687015771866,-0.08015486598014832,-0.09531546384096146,-0.07122906297445297,-0.08648769557476044,-0.06236971542239189,-0.07779493927955627,-0.05368009954690933,-0.0692458227276802,-0.04515216499567032,-0.0608653724193573,-0.036801550537347794,-0.05274923890829086,-0.028654571622610092,-0.04495047777891159,-0.020618632435798645,-0.03741208463907242,-0.012603923678398132,-0.03005238249897957,-0.004660770297050476,-0.022837206721305847,0.0032375603914260864,-0.01571357250213623,0.011317364871501923,-0.008542641997337341,0.01970715820789337,-0.0011973455548286438,0.028333887457847595,0.0063246265053749084,0.0372132882475853,0.014011144638061523,0.04643452912569046,0.021950438618659973,0.05588231235742569,0.03010193258523941,0.06538072973489761,0.03810767084360123,0.07491307705640793,0.04572763293981552,0.08436762541532516,0.05330805480480194,0.09348076581954956,0.06125878542661667,0.10222368687391281,0.06920412927865982,0.11063101887702942,0.07641875743865967,0.11829406023025513,0.08306580036878586,0.1248847246170044,0.09005635231733322,0.1309305727481842,0.09756209701299667,0.13703811168670654,0.10473161935806274,0.14279481768608093,0.11117547750473022,0.1475921869277954,0.11762325465679169,0.15196004509925842,0.1246354728937149,0.15684883296489716,0.1316998451948166,0.1621231585741043,0.1381763368844986,0.1669425070285797,0.1442692130804062,0.17123211920261383,0.15050184726715088,0.17575912177562714,0.15688656270503998,0.18093281984329224,0.16307076811790466,0.18630343675613403,0.16888675093650818,0.19129076600074768,0.17447316646575928,0.1959274560213089,0.1800549030303955,0.2006806880235672,0.18569731712341309,0.20578977465629578,0.1912769377231598,0.21109235286712646,0.19677548110485077,0.21643885970115662,0.20245715975761414,0.22195398807525635,0.20854544639587402,0.22783887386322021,0.21492406725883484,0.23414868116378784,0.22138294577598572,0.2408096045255661,0.22791072726249695,0.24772141873836517,0.2345348745584488,0.2548198699951172,0.24109560251235962,0.26203206181526184,0.24734240770339966,0.26913875341415405,0.2531210780143738,0.2757990062236786,0.25837716460227966,0.2817825675010681,0.26302066445350647,0.28703317046165466,0.26686960458755493,0.2914980947971344,0.2698267996311188,0.2951238453388214,0.27205488085746765,0.29802095890045166,0.27380669116973877,0.3004281520843506,0.27521419525146484,0.30253762006759644,0.2764592170715332,0.3044890761375427,0.2779090106487274,0.30645057559013367,0.27983519434928894,0.3086082339286804,0.2822890281677246,0.31110501289367676,0.28536826372146606,0.31396785378456116,0.28918546438217163,0.3170616328716278,0.29356107115745544,0.3201717436313629,0.29820433259010315,0.3231307864189148,0.3030858337879181,0.3258450925350189,0.308247447013855,0.328314870595932,0.31352299451828003,0.33062970638275146,0.31873950362205505,0.33277279138565063,0.32381922006607056,0.33449500799179077,0.3285626173019409,0.3355770409107208,0.3327631652355194,0.33607345819473267,0.3364887833595276,0.3361404836177826,0.33987191319465637,0.3358767628669739,0.3428524136543274,0.3354545533657074,0.3454176187515259,0.3351161479949951,0.34774285554885864,0.33497175574302673,0.3499442934989929,0.33502712845802307,0.35206130146980286,0.33532264828681946,0.3542133569717407,0.3358570337295532,0.3563973605632782,0.33655038475990295,0.35835447907447815,0.33737021684646606,0.35992562770843506,0.3382839858531952,0.36120814085006714,0.3391556143760681,0.3622129559516907,0.3399306535720825,0.3627970814704895,0.340738445520401,0.36299434304237366,0.34162911772727966,0.36302265524864197,0.34250450134277344,0.3629917502403259,0.34339553117752075,0.36288395524024963,0.3444414734840393,0.36270594596862793,0.34560033679008484,0.3624858260154724,0.34673959016799927,0.3622548580169678,0.3479076623916626,0.3620994985103607,0.349197655916214,0.3621264100074768,0.3505156636238098,0.36238744854927063,0.3517214357852936,0.3628728985786438,0.35284072160720825,0.3635386526584625,0.3538372218608856,0.3641984164714813,0.354625403881073,0.36477917432785034,0.35517418384552,0.3654242753982544,0.35551297664642334,0.3663182854652405,0.3556709885597229,0.36749815940856934,0.3556704521179199,0.3688485622406006,0.35551950335502625,0.37021782994270325,0.3551963269710541,0.3715476989746094,0.3546697497367859,0.37288153171539307,0.35392022132873535,0.37423309683799744,0.3529627323150635,0.37555593252182007,0.3518728017807007,0.37683695554733276,0.3507084548473358,0.3780277371406555,0.34938400983810425,0.3789185583591461,0.34771719574928284,0.3792995512485504,0.3455829322338104,0.3791392147541046,0.3429500460624695,0.37842699885368347,0.33985161781311035,0.3770616948604584,0.3363795876502991,0.37503236532211304,0.33264100551605225,0.3724556863307953,0.32876861095428467,0.3694303035736084,0.3250260651111603,0.36613425612449646,0.32172974944114685,0.3629182279109955,0.31904760003089905,0.36003610491752625,0.3171144723892212,0.3575168550014496,0.3162133991718292,0.3554316759109497,0.31647419929504395,0.35392361879348755,0.31762418150901794,0.35296547412872314,0.31939736008644104,0.3524459898471832,0.32169878482818604,0.3522231876850128,0.32382136583328247,0.3515649437904358,0.323943555355072,0.34879955649375916,0.31993407011032104,0.3419891595840454,0.31043753027915955,0.3298355042934418,0.29507070779800415,0.3119099736213684,0.27397388219833374,0.28838664293289185,0.24728214740753174,0.2595595121383667,0.21489554643630981,0.2254326194524765,0.17702044546604156,0.1861249804496765,0.13509336113929749,0.14292919635772705,0.09184535592794418,0.0985659807920456,0.05040176957845688,0.05621499568223953,0.01354043185710907,0.018598206341266632,-0.016510628163814545,-0.012152232229709625,-0.03795430064201355,-0.03417684882879257,-0.048723407089710236,-0.045258983969688416,-0.045718543231487274,-0.04232113063335419,-0.025622978806495667,-0.022208139300346375,0.012788698077201843,0.016318827867507935,0.067243292927742,0.07123502343893051,0.13267022371292114,0.13764043152332306,0.20275083184242249,0.209126278758049,0.27113276720046997,0.27916431427001953,0.33227863907814026,0.3421016037464142,0.38191530108451843,0.3935193717479706,0.41712698340415955,0.4302797317504883,0.4366118311882019,0.45090678334236145,0.4410606920719147,0.45601534843444824,0.4329354763031006,0.44800302386283875,0.4156544506549835,0.43021994829177856,0.39290153980255127,0.40635135769844055,0.36821553111076355,0.3800208568572998,0.3446190655231476,0.3543797731399536,0.32438135147094727,0.3318696916103363,0.30896732211112976,0.31416574120521545,0.2989675998687744,0.302045077085495,0.29409757256507874,0.2953417897224426,0.29348260164260864,0.29323530197143555,0.2960135340690613,0.2946128845214844,0.3005402088165283,0.2982521057128906,0.3060187101364136,0.3029651343822479,0.31161439418792725,0.30772703886032104,0.31662559509277344,0.31167834997177124,0.32043734192848206,0.31415697932243347,0.3227097988128662,0.31484824419021606,0.32350826263427734,0.313800573348999,0.3231211006641388,0.3112623393535614,0.3218221068382263,0.3076017498970032,0.319834440946579,0.3033114969730377,0.31740814447402954,0.2989150285720825,0.31485068798065186,0.2948548495769501,0.3124483525753021,0.2914617955684662,0.31033024191856384,0.2889053225517273,0.3084651231765747,0.28716087341308594,0.3068024814128876,0.2860954999923706,0.3052840530872345,0.2855125665664673,0.30369892716407776,0.28507593274116516,0.30171483755111694,0.2843456566333771,0.2990935146808624,0.2829536199569702,0.295750230550766,0.28065529465675354,0.29166868329048157,0.2772802710533142,0.2869117259979248,0.2727862298488617,0.28164681792259216,0.2673061490058899,0.2760713994503021,0.2610625922679901,0.27038443088531494,0.25432145595550537,0.26479262113571167,0.24741120636463165,0.2594027817249298,0.24062642455101013,0.25418317317962646,0.23414039611816406,0.24914424121379852,0.22811943292617798,0.24441100656986237,0.2227998822927475,0.2400449812412262,0.21833443641662598,0.2359958440065384,0.2146882712841034,0.23225922882556915,0.2117394655942917,0.2288622409105301,0.20933091640472412,0.22570477426052094,0.20720435678958893,0.22260309755802155,0.20500941574573517,0.21942651271820068,0.2023804634809494,0.21604958176612854,0.1989881694316864,0.2122812718153,0.1946185678243637,0.20795966684818268,0.18923088908195496,0.20303267240524292,0.1828848272562027,0.19751881062984467,0.1756948083639145,0.1914731115102768,0.16792836785316467,0.18498684465885162,0.1600073128938675,0.17818424105644226,0.15231330692768097,0.17123626172542572,0.14508582651615143,0.16434428095817566,0.13850338757038116,0.15764987468719482,0.1326969563961029,0.1512037068605423,0.12764720618724823,0.14503470063209534,0.12316109985113144,0.13916251063346863,0.11896595358848572,0.13355253636837006,0.11481080204248428,0.12815110385417938,0.11050844192504883,0.12291742116212845,0.10589440912008286,0.11774105578660965,0.10077223181724548,0.11239765584468842,0.09496051073074341,0.10665403306484222,0.08838188648223877,0.1003800556063652,0.08106671273708344,0.09346766024827957,0.07306445389986038,0.08584439754486084,0.06449486315250397,0.07751166075468063,0.0555633008480072,0.06856295466423035,0.046484850347042084,0.059176962822675705,0.03744354099035263,0.04958879575133324,0.02862597443163395,0.0400613471865654,0.020237747579813004,0.03086978569626808,0.012458212673664093,0.02223091758787632,0.0053418781608343124,0.01419978216290474,-0.001248285174369812,0.006708775646984577,-0.0075348149985075,-0.0002906918525695801,-0.013653511181473732,-0.006836937740445137,-0.01968599110841751,-0.013062719255685806,-0.02580053173005581,-0.019140519201755524,-0.03219126909971237,-0.025186140090227127,-0.038921840488910675,-0.03132248297333717,-0.04595652595162392,-0.03771370276808739,-0.05326448380947113,-0.044453129172325134,-0.060802243649959564,-0.05154811590909958,-0.06848271191120148,-0.05902509018778801,-0.07619261741638184,-0.06691370159387589,-0.08379656076431274,-0.0751795619726181,-0.09120871871709824,-0.08378754556179047,-0.0985087901353836,-0.09274525940418243,-0.10586851090192795,-0.10203513503074646,-0.11339233070611954,-0.1116054505109787,-0.12117552012205124,-0.12139799445867538,-0.12939989566802979,-0.1313091218471527,-0.1381993591785431,-0.1412314921617508,-0.147567480802536,-0.1511681228876114,-0.15748564898967743,-0.16116419434547424,-0.16794219613075256,-0.1711844801902771,-0.178798109292984,-0.18121357262134552,-0.18982529640197754,-0.1913289576768875,-0.2008262723684311,-0.20152945816516876,-0.21157817542552948,-0.21168290078639984,-0.22180645167827606,-0.22168974578380585,-0.2313070297241211,-0.23146215081214905,-0.23995310068130493,-0.24079033732414246,-0.24763138592243195,-0.24947047233581543,-0.25434255599975586,-0.2574461102485657,-0.2602357864379883,-0.26465606689453125,-0.2654263377189636,-0.2709711790084839,-0.26997777819633484,-0.27640077471733093,-0.2740896940231323,-0.28114989399909973,-0.27805638313293457,-0.2854735553264618,-0.28208595514297485,-0.2896733283996582,-0.2863636612892151,-0.2941269874572754,-0.2911421060562134,-0.299156129360199,-0.2965962886810303,-0.30497097969055176,-0.30276089906692505,-0.31174346804618835,-0.3096446990966797,-0.3195430338382721,-0.3172059655189514,-0.32825422286987305,-0.3252774477005005,-0.3376973867416382,-0.33369049429893494,-0.34769386053085327,-0.3423401415348053,-0.3579603135585785,-0.3510512709617615,-0.3681504428386688,-0.3595849275588989,-0.37799546122550964,-0.36778882145881653,-0.38724061846733093,-0.3755456507205963,-0.3955906927585602,-0.3826776444911957,-0.40288683772087097,-0.3890700340270996,-0.4091619551181793,-0.3947434425354004,-0.41446515917778015,-0.3997305929660797,-0.4188607931137085,-0.40407246351242065,-0.4225817620754242,-0.4079211950302124,-0.42594799399375916,-0.4114592969417572,-0.42920154333114624,-0.41479772329330444,-0.4325565695762634,-0.41806554794311523,-0.4362483620643616,-0.4214438498020172,-0.4404276907444,-0.4250420928001404,-0.4451479911804199,-0.42889899015426636,-0.45045268535614014,-0.43308261036872864,-0.4563312530517578,-0.4376424252986908,-0.4626504182815552,-0.44253748655319214,-0.4692232012748718,-0.44769778847694397,-0.47585803270339966,-0.45304206013679504,-0.4823276400566101,-0.4584178030490875,-0.4884132742881775,-0.4636516273021698,-0.493976354598999,-0.4686329960823059,-0.4989304542541504,-0.47326552867889404,-0.5032305717468262,-0.4774376451969147,-0.5069249272346497,-0.4811008870601654,-0.5101109147071838,-0.4842684268951416,-0.5128448009490967,-0.48692530393600464,-0.5151772499084473,-0.489045113325119,-0.5172102451324463,-0.4906660318374634,-0.5190343856811523,-0.4918709993362427,-0.5206844806671143,-0.4927436411380768,-0.522188127040863,-0.49338048696517944,-0.5235728621482849,-0.493878036737442,-0.524824857711792,-0.49429672956466675,-0.5259182453155518,-0.4946802854537964,-0.5268622040748596,-0.4950801134109497,-0.5276737809181213,-0.4955251216888428,-0.5283466577529907,-0.4960111081600189,-0.5288761854171753,-0.4965241551399231,-0.5292695164680481,-0.49703070521354675,-0.5295256972312927,-0.4974631071090698,-0.5296366214752197,-0.49775710701942444,-0.5296010971069336,-0.4978855848312378,-0.5294173359870911,-0.4978395700454712,-0.5290791988372803,-0.49760928750038147,-0.5285782217979431,-0.4971923828125,-0.5278950333595276,-0.4965905249118805,-0.5270002484321594,-0.4957980513572693,-0.5258727073669434,-0.4948074221611023,-0.5245072245597839,-0.4936217963695526,-0.5229060649871826,-0.49225279688835144,-0.5210745334625244,-0.49071353673934937,-0.5190219283103943,-0.489006906747818,-0.5167518258094788,-0.4871183931827545,-0.5142611265182495,-0.4850262403488159,-0.5115514397621155,-0.4827241599559784,-0.5086349248886108,-0.4802265465259552,-0.5055283308029175,-0.47755685448646545,-0.5022464990615845,-0.47473302483558655,-0.4987978935241699,-0.4717614948749542,-0.49517983198165894,-0.4686356782913208,-0.4913797676563263,-0.4653436839580536,-0.487384557723999,-0.4618803858757019,-0.4831897020339966,-0.4582536518573761,-0.47879987955093384,-0.4544786214828491,-0.4742203950881958,-0.4505634307861328,-0.46944403648376465,-0.4464946985244751,-0.46444201469421387,-0.44223523139953613,-0.4591920077800751,-0.43775704503059387,-0.45380234718322754,-0.4331594705581665,-0.4482576847076416,-0.4284302294254303,-0.44253525137901306,-0.42354726791381836,-0.4366333782672882,-0.4185048043727875,-0.43056467175483704,-0.4133080244064331,-0.42434409260749817,-0.4079691767692566,-0.41797903180122375,-0.4025009870529175,-0.41146841645240784,-0.3969133198261261,-0.40480536222457886,-0.3912079930305481,-0.39798280596733093,-0.3853793740272522,-0.3909948766231537,-0.37941497564315796,-0.3838372826576233,-0.3733018636703491,-0.3765070140361786,-0.3670300245285034,-0.3690025210380554,-0.3605952560901642,-0.36132562160491943,-0.35399699211120605,-0.3534850478172302,-0.347239226102829,-0.3455008566379547,-0.3403315842151642,-0.3374013602733612,-0.3332901895046234,-0.3292185664176941,-0.32613515853881836,-0.3209799826145172,-0.31888967752456665,-0.312707781791687,-0.3115767538547516,-0.3044171929359436,-0.30421483516693115,-0.2961137294769287,-0.2968105673789978,-0.287792831659317,-0.28936243057250977,-0.2794452905654907,-0.2818763852119446,-0.2710641622543335,-0.2743810713291168,-0.26264554262161255,-0.26692333817481995,-0.25418442487716675,-0.25954583287239075,-0.2456752061843872,-0.2522677481174469,-0.23711907863616943,-0.24508249759674072,-0.22852902114391327,-0.2379646897315979,-0.21992439031600952,-0.23087120056152344,-0.21132147312164307,-0.2237369269132614,-0.2027295082807541,-0.21647736430168152,-0.1941550076007843,-0.20900630950927734,-0.18560859560966492,-0.2012595534324646,-0.17710696160793304,-0.1932099461555481,-0.16866502165794373,-0.18486526608467102,-0.16027802228927612,-0.17625293135643005,-0.15190652012825012,-0.16740408539772034,-0.14347873628139496,-0.1583499312400818,-0.13491913676261902,-0.1491309106349945,-0.1261826902627945,-0.13980576395988464,-0.11727005243301392,-0.13044916093349457,-0.10821488499641418,-0.12113991379737854,-0.09906162321567535,-0.11194673925638199,-0.08985001593828201,-0.10291466861963272,-0.08060862869024277,-0.09405313432216644,-0.07135115563869476,-0.08533615618944168,-0.06207706779241562,-0.07672415673732758,-0.0527779683470726,-0.06819739192724228,-0.04344412684440613,-0.0597696527838707,-0.03406934440135956,-0.05147016420960426,-0.024658385664224625,-0.04331723600625992,-0.015245087444782257,-0.035315826535224915,-0.0059119537472724915,-0.02747313305735588,0.0032121874392032623,-0.01980186440050602,0.011983063071966171,-0.012294502928853035,0.020283903926610947,-0.004899730905890465,0.02805602177977562,0.0024668164551258087,0.035305388271808624,0.009879233315587044,0.04209442436695099,0.017361540347337723,0.048530109226703644,0.024878814816474915,0.054752327501773834,0.03234849125146866,0.060921311378479004,0.039657074958086014,0.06720253825187683,0.04667987674474716,0.0737491250038147,0.053318336606025696,0.08068063110113144,0.05954745411872864,0.08805586397647858,0.06543652713298798,0.09584701061248779,0.07112129032611847,0.10393153131008148,0.0767485499382019,0.11212043464183807,0.08244599401950836,0.12021806091070175,0.08833739906549454,0.1280810832977295,0.09456155449151993,0.13564449548721313,0.10125024616718292,0.1429145187139511,0.10847346484661102,0.14995212852954865,0.11621200293302536,0.15686100721359253,0.12438612431287766,0.1637716144323349,0.13290725648403168,0.17080920934677124,0.1417008340358734,0.17805525660514832,0.15069368481636047,0.18551437556743622,0.15979520976543427,0.19309350848197937,0.16889125108718872,0.20060132443904877,0.1778457760810852,0.20778822898864746,0.1865084320306778,0.2144312858581543,0.1947418451309204,0.22041860222816467,0.20246091485023499,0.22577153146266937,0.20964892208576202,0.2305883765220642,0.21632149815559387,0.23496666550636292,0.22246390581130981,0.23896241188049316,0.22799497842788696,0.24260258674621582,0.23279574513435364,0.24591892957687378,0.23678524792194366,0.248972088098526,0.23999035358428955,0.2518520653247833,0.24255631864070892,0.2546519935131073,0.2446899116039276,0.2574346661567688,0.24658453464508057,0.26022133231163025,0.24839113652706146,0.26301535964012146,0.25023961067199707,0.2658284306526184,0.2522519826889038,0.268677294254303,0.25450819730758667,0.2715691924095154,0.25701192021369934,0.27451860904693604,0.2597254514694214,0.2775866389274597,0.2626533806324005,0.2808864414691925,0.2658756375312805,0.28452950716018677,0.2694924473762512,0.28857049345970154,0.27355408668518066,0.29300549626350403,0.2780616283416748,0.29779940843582153,0.28300735354423523,0.3028869032859802,0.28836995363235474,0.3081473112106323,0.2940548062324524,0.3134058713912964,0.2998628318309784,0.3184770941734314,0.30553561449050903,0.3232085108757019,0.31082984805107117,0.3274981677532196,0.3155636787414551,0.33131009340286255,0.3196343183517456,0.334693044424057,0.3230331242084503,0.3377578556537628,0.3258383572101593,0.34059277176856995,0.3281615078449249,0.3431852161884308,0.3300800919532776,0.3454265296459198,0.3316163420677185,0.34718337655067444,0.33276650309562683,0.34835436940193176,0.33353832364082336,0.3488852083683014,0.33397525548934937,0.34878212213516235,0.33417609333992004,0.34813082218170166,0.3342997133731842,0.3470771014690399,0.33452531695365906,0.3457757234573364,0.3350061774253845,0.34440669417381287,0.33591654896736145,0.34304994344711304,0.3373476266860962,0.3417830169200897,0.3393924832344055,0.34067779779434204,0.34211084246635437,0.33976149559020996,0.3454728424549103,0.3390282690525055,0.3493778705596924,0.33848339319229126,0.3537086248397827,0.33814239501953125,0.35832053422927856,0.33798927068710327,0.36298319697380066,0.3379756510257721,0.367387592792511,0.33807292580604553,0.37124550342559814,0.33829233050346375,0.37436410784721375,0.3386392295360565,0.37662485241889954,0.3390907347202301,0.3779562711715698,0.3396499454975128,0.3783873915672302,0.34038105607032776,0.3781013786792755,0.3413267135620117,0.37735795974731445,0.3423877954483032,0.3763378858566284,0.3433307409286499,0.3750898241996765,0.34391772747039795,0.37361714243888855,0.3439900279045105,0.3719516694545746,0.3434370756149292,0.37012267112731934,0.34218382835388184,0.36813002824783325,0.3402870297431946,0.3660232126712799,0.3380109965801239,0.36398354172706604,0.3357272148132324,0.36226099729537964,0.33372917771339417,0.3610217273235321,0.3321700394153595,0.36028921604156494,0.3311302959918976,0.36000531911849976,0.33064302802085876,0.36006680130958557,0.3306368291378021,0.3602849245071411,0.33094003796577454,0.36038947105407715,0.3313939571380615,0.36014264822006226,0.3319329023361206,0.3594413101673126,0.33255091309547424,0.3583035469055176,0.333262175321579,0.35682225227355957,0.33412057161331177,0.35518160462379456,0.33519402146339417,0.3536582589149475,0.33643603324890137,0.35249993205070496,0.33761170506477356,0.3517909646034241,0.338399201631546,0.3514852523803711,0.3385346829891205,0.35154107213020325,0.3378342092037201,0.35194092988967896,0.3361801505088806,0.35261058807373047,0.3336349129676819,0.35345658659935,0.3305266201496124,0.35447537899017334,0.32715994119644165,0.3555591106414795,0.32322508096694946,0.3559531271457672,0.3175520896911621,0.3540116250514984,0.3086777627468109,0.3478134274482727,0.2957591712474823,0.33618342876434326,0.2788720726966858,0.31906312704086304,0.25848230719566345,0.29696816205978394,0.23497503995895386,0.2704699635505676,0.20897898077964783,0.24048924446105957,0.18193909525871277,0.20885144174098969,0.1558382213115692,0.17798171937465668,0.13207562267780304,0.14971758425235748,0.11074550449848175,0.12449001520872116,0.09111859649419785,0.10174734145402908,0.07264640182256699,0.0810067430138588,0.055400654673576355,0.06237410008907318,0.03992924839258194,0.04639582708477974,0.02733016386628151,0.034069087356328964,0.019738657400012016,0.027350082993507385,0.020428039133548737,0.02936420403420925,0.03283391892910004,0.04347808286547661,0.058930449187755585,0.0716032087802887,0.09811178594827652,0.11300875246524811,0.14728772640228271,0.1644417643547058,0.20188573002815247,0.2211862951517105,0.25695711374282837,0.27817416191101074,0.30791592597961426,0.33069124817848206,0.350985586643219,0.3748006820678711,0.3835350275039673,0.40769463777542114,0.40427765250205994,0.4279574751853943,0.4132527709007263,0.4356182813644409,0.41165298223495483,0.43197256326675415,0.4015686511993408,0.41925567388534546,0.38561078906059265,0.4002455770969391,0.366449773311615,0.37785640358924866,0.34647783637046814,0.3547900319099426,0.3276962637901306,0.3333113193511963,0.3116696774959564,0.3151399791240692,0.29941827058792114,0.3013957142829895,0.2913617491722107,0.2925622761249542,0.2874203622341156,0.28850555419921875,0.2871525287628174,0.2885909676551819,0.2898179292678833,0.29186418652534485,0.29446321725845337,0.297207772731781,0.30010247230529785,0.3034416735172272,0.3058544397354126,0.30943411588668823,0.3109593391418457,0.314269483089447,0.31481796503067017,0.31740063428878784,0.3171224594116211,0.3186621069908142,0.3178839385509491,0.3181406259536743,0.31725195050239563,0.316037118434906,0.31534016132354736,0.31262126564979553,0.31226426362991333,0.3082268536090851,0.308246910572052,0.30319613218307495,0.3035838305950165,0.29779696464538574,0.2985372245311737,0.29221609234809875,0.29333794116973877,0.2866310179233551,0.2882595360279083,0.281252384185791,0.28361350297927856,0.27627500891685486,0.27966001629829407,0.2718202471733093,0.27655261754989624,0.2679551839828491,0.2743443250656128,0.26474589109420776,0.2729955017566681,0.26223862171173096,0.27235203981399536,0.2603779137134552,0.2721307873725891,0.2589706778526306,0.2719634175300598,0.2577463686466217,0.27150285243988037,0.2564413845539093,0.27051520347595215,0.25483351945877075,0.26887375116348267,0.2527434229850769,0.26650017499923706,0.25004786252975464,0.2633804380893707,0.2466958910226822,0.25963321328163147,0.2426961213350296,0.2554643154144287,0.23809194564819336,0.2510066032409668,0.23295894265174866,0.24626436829566956,0.227402463555336,0.24122701585292816,0.2215176224708557,0.23593056201934814,0.2153458595275879,0.23035825788974762,0.20890077948570251,0.2243967056274414,0.20224258303642273,0.21798449754714966,0.19549128413200378,0.2112288475036621,0.1887451559305191,0.20431013405323029,0.18202441930770874,0.19738520681858063,0.17536643147468567,0.19055110216140747,0.16883938014507294,0.1839984655380249,0.16257824003696442,0.17794819176197052,0.15667736530303955,0.1724846512079239,0.15111711621284485,0.16753928363323212,0.14582769572734833,0.1630040556192398,0.14079080522060394,0.1587768942117691,0.13602802157402039,0.15470734238624573,0.13150058686733246,0.1505787968635559,0.1270667314529419,0.1461588740348816,0.12255257368087769,0.14124834537506104,0.11782138049602509,0.1357063204050064,0.1127522885799408,0.12947916984558105,0.10719695687294006,0.12260617315769196,0.10102201998233795,0.11518053710460663,0.09419147670269012,0.1073247492313385,0.08678228408098221,0.09920886158943176,0.07892881333827972,0.09102530777454376,0.07078107446432114,0.08291636407375336,0.06251612305641174,0.07497084140777588,0.054358579218387604,0.06728880852460861,0.0465414822101593,0.05996242165565491,0.03921813145279884,0.05297655612230301,0.03241787850856781,0.046202197670936584,0.026083573698997498,0.03949197754263878,0.020098615437746048,0.03272058069705963,0.01425711065530777,0.025761678814888,0.0082787424325943,0.01850035786628723,0.0019084513187408447,0.010851874947547913,-0.005016744136810303,0.0027487576007843018,-0.01258590817451477,-0.005826480686664581,-0.020820386707782745,-0.014778167009353638,-0.02963588386774063,-0.023947954177856445,-0.03883322328329086,-0.03323911130428314,-0.04814644157886505,-0.04261285811662674,-0.05732439458370209,-0.05197104811668396,-0.06621380895376205,-0.061148837208747864,-0.07475987076759338,-0.07004342973232269,-0.0829121470451355,-0.07866489887237549,-0.09059935808181763,-0.08702351152896881,-0.0978403389453888,-0.0950472503900528,-0.10478620231151581,-0.10268557071685791,-0.1115979254245758,-0.11004021763801575,-0.11836123466491699,-0.11728629469871521,-0.1251428872346878,-0.12451077997684479,-0.1320313811302185,-0.1317625343799591,-0.13910743594169617,-0.1392054706811905,-0.14642347395420074,-0.1470346599817276,-0.1539798080921173,-0.15527844429016113,-0.16170451045036316,-0.16384781897068024,-0.16952913999557495,-0.17271344363689423,-0.17747634649276733,-0.181866854429245,-0.18558655679225922,-0.19120028614997864,-0.1938110888004303,-0.20056191086769104,-0.20207038521766663,-0.20982769131660461,-0.21033170819282532,-0.21886520087718964,-0.21855482459068298,-0.2275872528553009,-0.22667238116264343,-0.2360503226518631,-0.23466581106185913,-0.24435371160507202,-0.24255190789699554,-0.2525116801261902,-0.2503094971179962,-0.26056379079818726,-0.25791803002357483,-0.2686459720134735,-0.265402227640152,-0.2768164277076721,-0.2727625370025635,-0.2849910259246826,-0.27996397018432617,-0.2931184768676758,-0.28702080249786377,-0.3011983036994934,-0.29396578669548035,-0.3091249167919159,-0.3007667064666748,-0.3167557120323181,-0.3074030876159668,-0.32409340143203735,-0.3139421045780182,-0.33121705055236816,-0.32043159008026123,-0.3381509780883789,-0.32684582471847534,-0.34494221210479736,-0.3331971764564514,-0.3517029881477356,-0.3395477533340454,-0.35848891735076904,-0.345898300409317,-0.3653014898300171,-0.35221612453460693,-0.37220367789268494,-0.3585188388824463,-0.3792582154273987,-0.3648207187652588,-0.38640761375427246,-0.37110307812690735,-0.393545538187027,-0.37739109992980957,-0.40060749650001526,-0.3837079405784607,-0.4075193405151367,-0.3899625539779663,-0.4141964614391327,-0.3960525691509247,-0.42061641812324524,-0.4020005464553833,-0.42677319049835205,-0.40783387422561646,-0.4326091706752777,-0.4134617745876312,-0.4380987286567688,-0.4187893271446228,-0.44331538677215576,-0.4238043427467346,-0.4483404755592346,-0.42851030826568604,-0.45318907499313354,-0.4329345226287842,-0.45785045623779297,-0.4371677339076996,-0.46233269572257996,-0.4412577748298645,-0.46668684482574463,-0.4451722502708435,-0.47099173069000244,-0.44895413517951965,-0.47526106238365173,-0.45273566246032715,-0.4794234335422516,-0.4565529525279999,-0.48346206545829773,-0.460336834192276,-0.487442284822464,-0.4640561640262604,-0.49133917689323425,-0.4676953852176666,-0.49503153562545776,-0.4711844027042389,-0.49849700927734375,-0.4744860529899597,-0.5017921328544617,-0.4776119589805603,-0.5048731565475464,-0.48050105571746826,-0.5076683163642883,-0.48306500911712646,-0.5102288126945496,-0.4853420853614807,-0.5126030445098877,-0.48742344975471497,-0.5147296190261841,-0.4893101155757904,-0.5166022181510925,-0.49098825454711914,-0.518316924571991,-0.4925043284893036,-0.519883930683136,-0.4938730001449585,-0.5212352275848389,-0.4950759708881378,-0.522398829460144,-0.4961559772491455,-0.5234311819076538,-0.4971415400505066,-0.5242810845375061,-0.4979563057422638,-0.5249060392379761,-0.49855610728263855,-0.5253487229347229,-0.4990082085132599,-0.525596022605896,-0.4993344843387604,-0.5255888104438782,-0.49945956468582153,-0.5253779292106628,-0.49935832619667053,-0.5250194072723389,-0.4990674555301666,-0.5244154930114746,-0.4985846281051636,-0.5235034823417664,-0.4979121685028076,-0.522404134273529,-0.49709317088127136,-0.5211771130561829,-0.49610140919685364,-0.5196942687034607,-0.4948584735393524,-0.517902135848999,-0.4933931529521942,-0.5159035325050354,-0.4917854070663452)\n\
+\n\
+,\n\
+\n\
+new Array(-0.5137231945991516,-0.49000853300094604,-0.5113903284072876,-0.488100528717041,-0.5088633298873901,-0.48603248596191406,-0.5061661005020142,-0.4837847948074341,-0.5032707452774048,-0.4813406467437744,-0.5001466274261475,-0.4787534177303314,-0.49685049057006836,-0.4760761260986328,-0.49342668056488037,-0.4732472896575928,-0.4898289442062378,-0.47021234035491943,-0.4860019385814667,-0.467038094997406,-0.48194417357444763,-0.4637599587440491,-0.4776892066001892,-0.46030497550964355,-0.4732748866081238,-0.45665597915649414,-0.46869802474975586,-0.4528677761554718,-0.46391454339027405,-0.4489230215549469,-0.45892152190208435,-0.4447893500328064,-0.4537576138973236,-0.44052648544311523,-0.4484187066555023,-0.4361549913883209,-0.44290804862976074,-0.4315980076789856,-0.4373047649860382,-0.4268632233142853,-0.4316164255142212,-0.42204850912094116,-0.42571672797203064,-0.41714534163475037,-0.4195888936519623,-0.41207751631736755,-0.4133991301059723,-0.40687015652656555,-0.40720468759536743,-0.401580274105072,-0.4008715748786926,-0.39620015025138855,-0.3943476378917694,-0.39074966311454773,-0.3877306580543518,-0.3852769136428833,-0.38106489181518555,-0.3797324001789093,-0.3743053674697876,-0.3740321695804596,-0.3674202561378479,-0.3681885004043579,-0.3603806793689728,-0.36222216486930847,-0.3531627357006073,-0.35607028007507324,-0.34580618143081665,-0.3496861755847931,-0.3383495807647705,-0.3430899977684021,-0.3307521343231201,-0.3362985849380493,-0.3229793906211853,-0.3293401896953583,-0.315058171749115,-0.32228440046310425,-0.30699875950813293,-0.315151184797287,-0.2987874746322632,-0.30789127945899963,-0.29045185446739197,-0.30051279067993164,-0.28202396631240845,-0.29308781027793884,-0.2735027074813843,-0.2856077551841736,-0.2649257779121399,-0.27798640727996826,-0.2563796639442444,-0.2702132761478424,-0.24790993332862854,-0.2623620629310608,-0.23951497673988342,-0.2544562816619873,-0.23120757937431335,-0.24646149575710297,-0.22298353910446167,-0.2383953332901001,-0.21476247906684875,-0.2303106039762497,-0.20644812285900116,-0.22219493985176086,-0.1980222761631012,-0.21401672065258026,-0.18950195610523224,-0.2058141976594925,-0.18083666265010834,-0.19762080907821655,-0.17196400463581085,-0.18940521776676178,-0.1629542112350464,-0.18119071424007416,-0.15394656360149384,-0.17307928204536438,-0.14496801793575287,-0.16509070992469788,-0.13598699867725372,-0.1571563482284546,-0.12707515060901642,-0.14925628900527954,-0.11832299828529358,-0.14137746393680573,-0.10971798002719879,-0.13344717025756836,-0.10125025361776352,-0.1254633218050003,-0.09293901920318604,-0.11750493198633194,-0.08468332141637802,-0.10955502837896347,-0.07634306699037552,-0.10155733674764633,-0.06794353574514389,-0.09359082579612732,-0.0595434196293354,-0.08573566377162933,-0.0510471872985363,-0.0779324322938919,-0.042377568781375885,-0.07014453411102295,-0.03362184390425682,-0.06238359585404396,-0.02486787736415863,-0.05453343316912651,-0.01613004505634308,-0.0464804507791996,-0.007472425699234009,-0.03832215070724487,0.0009909719228744507,-0.030160509049892426,0.00918087363243103,-0.0219377800822258,0.01705806702375412,-0.013661175966262817,0.024636313319206238,-0.0054317861795425415,0.031981587409973145,0.002793937921524048,0.03918281942605972,0.011097252368927002,0.0463932529091835,0.01936565339565277,0.05372148007154465,0.02748739719390869,0.0609898716211319,0.03553415834903717,0.06804285198450089,0.04353989660739899,0.07528826594352722,0.05137953907251358,0.08313757926225662,0.05894308537244797,0.09104142338037491,0.06621246039867401,0.09819495677947998,0.07324355840682983,0.10493610799312592,0.08019237220287323,0.11213169991970062,0.08720662444829941,0.11955674737691879,0.09431906044483185,0.1262604296207428,0.10157740116119385,0.13215814530849457,0.10906890779733658,0.1380482316017151,0.11671863496303558,0.14434769749641418,0.12434201687574387,0.15068860352039337,0.13187485933303833,0.15661653876304626,0.13927049934864044,0.1622142195701599,0.14633619785308838,0.16797444224357605,0.15291756391525269,0.17413830757141113,0.15904036164283752,0.18042199313640594,0.16477809846401215,0.18657466769218445,0.17019487917423248,0.19275277853012085,0.1753728985786438,0.1990659385919571,0.1803634762763977,0.20531892776489258,0.18523544073104858,0.21139419078826904,0.19012044370174408,0.21729907393455505,0.1950494647026062,0.222874253988266,0.1999734342098236,0.228011816740036,0.2050219029188156,0.23290342092514038,0.210371196269989,0.23768731951713562,0.21597397327423096,0.24231691658496857,0.2218102216720581,0.2469380795955658,0.2279721051454544,0.2518135607242584,0.23417289555072784,0.25691327452659607,0.23994697630405426,0.26207083463668823,0.24547690153121948,0.2672507166862488,0.25112250447273254,0.27232447266578674,0.25628194212913513,0.27704593539237976,0.260145902633667,0.28139808773994446,0.26323676109313965,0.28550174832344055,0.2666539251804352,0.2893005907535553,0.27030205726623535,0.29275497794151306,0.27338463068008423,0.29604265093803406,0.2760785222053528,0.29927703738212585,0.27935171127319336,0.302398145198822,0.2835429012775421,0.30541032552719116,0.28810322284698486,0.3083387315273285,0.29246801137924194,0.31105777621269226,0.2966208755970001,0.3135039806365967,0.3009149432182312,0.31568992137908936,0.30537116527557373,0.3176348805427551,0.30956944823265076,0.3193422853946686,0.31316643953323364,0.3208901584148407,0.3162834644317627,0.3223532438278198,0.31914156675338745,0.32372766733169556,0.3216931223869324,0.3250102996826172,0.3238937258720398,0.32619887590408325,0.32591819763183594,0.32724729180336,0.32787463068962097,0.32814714312553406,0.32968413829803467,0.3289378583431244,0.3313487470149994,0.32962244749069214,0.33299732208251953,0.33025267720222473,0.33466023206710815,0.3309943675994873,0.33627644181251526,0.33193162083625793,0.33788472414016724,0.3330099880695343,0.3396027088165283,0.33427178859710693,0.34145987033843994,0.33584967255592346,0.3433850407600403,0.3376842141151428,0.34532588720321655,0.3395330309867859,0.34727874398231506,0.34122443199157715,0.3492124080657959,0.3427020013332367,0.3510623872280121,0.34393221139907837,0.35280218720436096,0.3448846936225891,0.3544255197048187,0.345511257648468,0.35589224100112915,0.3457866907119751,0.35723280906677246,0.34584540128707886,0.3586302697658539,0.34591227769851685,0.3602270781993866,0.3460692763328552,0.36193689703941345,0.3463064730167389,0.36358287930488586,0.34671613574028015,0.36508455872535706,0.3473617732524872,0.3663909435272217,0.3480914235115051,0.36737513542175293,0.34872686862945557,0.36788907647132874,0.3492404818534851,0.3678523302078247,0.34957072138786316,0.3672947287559509,0.3495337665081024,0.3663550615310669,0.349063515663147,0.36519855260849,0.34828177094459534,0.3639591932296753,0.34726089239120483,0.3627973198890686,0.3459911048412323,0.36188578605651855,0.3445943593978882,0.36128389835357666,0.3432638645172119,0.360962837934494,0.3419889211654663,0.36096450686454773,0.3406458795070648,0.36137494444847107,0.33931952714920044,0.36218199133872986,0.3382019102573395,0.36331093311309814,0.3372468650341034,0.36474165320396423,0.33627501130104065,0.3664785623550415,0.33529964089393616,0.36844712495803833,0.3344076871871948,0.3704620599746704,0.33351296186447144,0.37229543924331665,0.3325388431549072,0.3738071024417877,0.3315884470939636,0.37496477365493774,0.33070746064186096,0.3756759762763977,0.32981252670288086,0.37573686242103577,0.3289702832698822,0.3750419616699219,0.3283597528934479,0.37365415692329407,0.32795339822769165,0.37158074975013733,0.32762959599494934,0.36872994899749756,0.32744911313056946,0.36513349413871765,0.327328085899353,0.36083292961120605,0.32647183537483215,0.3553459048271179,0.3234274387359619,0.3475061357021332,0.3167162835597992,0.3361029028892517,0.30550384521484375,0.3206931948661804,0.289927214384079,0.301763653755188,0.2707938551902771,0.28021207451820374,0.2489292174577713,0.25686004757881165,0.22513742744922638,0.23259875178337097,0.2009105384349823,0.20892499387264252,0.17861606180667877,0.18800251185894012,0.16042542457580566,0.1717921644449234,0.14698050916194916,0.16082054376602173,0.1370360553264618,0.15366528928279877,0.12817446887493134,0.14766347408294678,0.11803093552589417,0.14030992984771729,0.10540719330310822,0.1303406059741974,0.09064079821109772,0.11794678121805191,0.07512999325990677,0.1043713390827179,0.06083159148693085,0.09155081957578659,0.05038084089756012,0.08213365077972412,0.047207534313201904,0.0794491171836853,0.05470795929431915,0.08676983416080475,0.07482234388589859,0.1060170903801918,0.10722704231739044,0.13688474893569946,0.1495549976825714,0.17697802186012268,0.19809097051620483,0.22259706258773804,0.24851331114768982,0.2695668935775757,0.29662609100341797,0.3139076828956604,0.3389118015766144,0.3523290455341339,0.37274593114852905,0.3825106620788574,0.39645275473594666,0.4031810462474823,0.40939658880233765,0.414045125246048,0.41200780868530273,0.41564178466796875,0.40561020374298096,0.4092215895652771,0.3921266198158264,0.3965846300125122,0.3738146126270294,0.37977224588394165,0.3530846834182739,0.360776424407959,0.33230307698249817,0.34146547317504883,0.3134949207305908,0.3235333561897278,0.29809248447418213,0.30826473236083984,0.2869272828102112,0.2963654398918152,0.2803330719470978,0.2880798876285553,0.2781458795070648,0.2833423912525177,0.2797280550003052,0.28175947070121765,0.28418320417404175,0.2826170325279236,0.29055237770080566,0.28502604365348816,0.29783299565315247,0.2880639433860779,0.3050537407398224,0.2908852994441986,0.31150898337364197,0.29286256432533264,0.31685498356819153,0.29363778233528137,0.3209408223628998,0.29303422570228577,0.3236549198627472,0.2910189926624298,0.3249479830265045,0.2877538502216339,0.3248835802078247,0.28355008363723755,0.3236102759838104,0.2787551283836365,0.3212985694408417,0.27375152707099915,0.31806454062461853,0.2689562439918518,0.31393393874168396,0.2646617591381073,0.30892059206962585,0.2609400451183319,0.3031262159347534,0.2577987313270569,0.2967284619808197,0.2553180754184723,0.2899474501609802,0.2535468339920044,0.2830822467803955,0.2523913085460663,0.27646496891975403,0.2516772150993347,0.27031591534614563,0.2512190043926239,0.2647823095321655,0.2508447468280792,0.25996577739715576,0.25032496452331543,0.25594156980514526,0.24949151277542114,0.2525883615016937,0.24821141362190247,0.24961310625076294,0.24631737172603607,0.24674704670906067,0.24365116655826569,0.24378450214862823,0.24015013873577118,0.2405320256948471,0.23586493730545044,0.23689839243888855,0.23092935979366302,0.23295597732067108,0.22551023960113525,0.22881460189819336,0.2197560966014862,0.22456791996955872,0.21381458640098572,0.22040949761867523,0.20788267254829407,0.21659861505031586,0.20215559005737305,0.2132403701543808,0.19671525061130524,0.21023744344711304,0.19153043627738953,0.20741993188858032,0.18653440475463867,0.20455028116703033,0.18163129687309265,0.2012627124786377,0.17666466534137726,0.19717349112033844,0.17145000398159027,0.19201600551605225,0.1658248007297516,0.18561972677707672,0.15966778993606567,0.1779114007949829,0.15292170643806458,0.1690191626548767,0.14558954536914825,0.15924739837646484,0.13767898082733154,0.14891751110553741,0.12920112907886505,0.1383480280637741,0.12023596465587616,0.12793944776058197,0.1109166145324707,0.11810696125030518,0.10136047005653381,0.10913249105215073,0.09172657132148743,0.1011713445186615,0.08230516314506531,0.0943390354514122,0.07342809438705444,0.08870010823011398,0.06534087657928467,0.08421285450458527,0.058251891285181046,0.0807342454791069,0.0523688979446888,0.07804303616285324,0.047738026827573776,0.07584884017705917,0.04413424804806709,0.07380872964859009,0.04118501394987106,0.07154276967048645,0.038487426936626434,0.0686652734875679,0.03558041900396347,0.06486204266548157,0.0319744274020195,0.05993484705686569,0.027289263904094696,0.05376472324132919,0.021312803030014038,0.04630828648805618,0.013984277844429016,0.03766322135925293,0.005423426628112793,0.02805314213037491,-0.0040769875049591064,0.01772705465555191,-0.014155000448226929,0.0069579556584358215,-0.024425312876701355,-0.003892548382282257,-0.034451521933078766,-0.014451511204242706,-0.04383676499128342,-0.024486973881721497,-0.05239381641149521,-0.03391285985708237,-0.06015949696302414,-0.04270743578672409,-0.06728138774633408,-0.05091959983110428,-0.07397614419460297,-0.0586925745010376,-0.0805329903960228,-0.0662003830075264,-0.08724270761013031,-0.07359982281923294,-0.09432008862495422,-0.08105243742465973,-0.10188722610473633,-0.08869340270757675,-0.10994412750005722,-0.09654761105775833,-0.11832835525274277,-0.10454189777374268,-0.1267707496881485,-0.11260934174060822,-0.13502219319343567,-0.12074155360460281,-0.14292706549167633,-0.12895497679710388,-0.15042932331562042,-0.13724792003631592,-0.15755988657474518,-0.14559385180473328,-0.16441892087459564,-0.1539762169122696,-0.1711602807044983,-0.16242380440235138,-0.17798106372356415,-0.17097726464271545,-0.1850680112838745,-0.17961308360099792,-0.19250938296318054,-0.1882379651069641,-0.20026762783527374,-0.19674423336982727,-0.20821866393089294,-0.2050238698720932,-0.21618175506591797,-0.2129627764225006,-0.22394722700119019,-0.22049042582511902,-0.23134419322013855,-0.22762390971183777,-0.2382839024066925,-0.23443394899368286,-0.24473749101161957,-0.24101610481739044,-0.2507375478744507,-0.24751800298690796,-0.25642403960227966,-0.2541276514530182,-0.26202377676963806,-0.26100021600723267,-0.26775965094566345,-0.2682335376739502,-0.2738083004951477,-0.27590224146842957,-0.28030723333358765,-0.2840461730957031,-0.2873222529888153,-0.2926250100135803,-0.2948102355003357,-0.30153170228004456,-0.30264827609062195,-0.3106444776058197,-0.31068146228790283,-0.31983932852745056,-0.3187355399131775,-0.328976571559906,-0.32663577795028687,-0.337910920381546,-0.334236741065979,-0.3465123176574707,-0.34141790866851807,-0.3546822965145111,-0.34808236360549927,-0.3623671531677246,-0.3542081117630005,-0.3695635199546814,-0.3598801791667938,-0.3763040602207184,-0.36523255705833435,-0.3826392590999603,-0.37037503719329834,-0.38862234354019165,-0.3753855526447296,-0.394300252199173,-0.38032299280166626,-0.3997267782688141,-0.3852221369743347,-0.40498611330986023,-0.39010003209114075,-0.41017886996269226,-0.39498022198677063,-0.41537636518478394,-0.3998861610889435,-0.4206025004386902,-0.404814749956131,-0.42585769295692444,-0.4097353518009186,-0.4311356544494629,-0.4146151840686798,-0.43641966581344604,-0.4194323718547821,-0.44168272614479065,-0.42417213320732117,-0.44688862562179565,-0.4288170039653778,-0.45198318362236023,-0.4333416223526001,-0.45690152049064636,-0.43771636486053467,-0.46159815788269043,-0.4419223368167877,-0.46606379747390747,-0.4459584057331085,-0.4703110158443451,-0.4498317539691925,-0.4743539094924927,-0.45354267954826355,-0.4781973659992218,-0.4570796489715576,-0.4818352460861206,-0.4604245722293854,-0.4852607846260071,-0.4635674059391022,-0.4884822368621826,-0.46651771664619446,-0.49152228236198425,-0.46929827332496643,-0.4943970739841461,-0.4719245731830597,-0.4971011281013489,-0.4743885397911072,-0.4996146559715271,-0.47666504979133606,-0.5019261240959167,-0.47873517870903015,-0.5040473341941833,-0.4806043803691864,-0.5060036182403564,-0.4822950065135956,-0.5078047513961792,-0.4838182032108307,-0.5094174146652222,-0.48514917492866516,-0.5107952952384949,-0.48625442385673523,-0.5120333433151245,-0.4872269034385681,-0.5131012201309204,-0.48804327845573425,-0.5139797925949097,-0.48869040608406067,-0.5146780014038086,-0.4891781508922577,-0.5152041912078857,-0.48951324820518494,-0.515548050403595,-0.4896860122680664,-0.5156898498535156,-0.4896797835826874,-0.5156195759773254,-0.4894915819168091,-0.5153493285179138,-0.4891391396522522,-0.5149028897285461,-0.48864948749542236,-0.5142913460731506,-0.4880334436893463,-0.5134984850883484,-0.4872722327709198,-0.512488603591919,-0.4863273799419403,-0.5112295150756836,-0.4851687550544739,-0.5097134113311768,-0.48379451036453247,-0.5079579949378967,-0.48222753405570984,-0.5059928894042969,-0.4804929196834564,-0.5038410425186157,-0.47860074043273926,-0.5015115737915039,-0.4765486717224121,-0.49900615215301514,-0.474336177110672,-0.4963277280330658,-0.4719712436199188,-0.4934810698032379,-0.46946513652801514,-0.49046316742897034,-0.4668181240558624,-0.48725906014442444,-0.46401435136795044,-0.48385322093963623,-0.46102750301361084,-0.48024654388427734,-0.45783665776252747,-0.47645989060401917,-0.45443978905677795,-0.4725186824798584,-0.4508539140224457,-0.4684355556964874,-0.44709959626197815,-0.46420466899871826,-0.44318661093711853,-0.4598103165626526,-0.43911513686180115,-0.4552389979362488,-0.43489035964012146,-0.45048898458480835,-0.43053045868873596,-0.4455726444721222,-0.42605772614479065,-0.44050833582878113,-0.42148131132125854,-0.4353029131889343,-0.4167920649051666,-0.4299459159374237,-0.41197001934051514,-0.4244259297847748,-0.40699324011802673,-0.41875192523002625,-0.40184569358825684,-0.41294997930526733,-0.39652132987976074,-0.40703457593917847,-0.39102911949157715,-0.40099236369132996,-0.3853883147239685,-0.3947983682155609,-0.379618763923645,-0.38843998312950134,-0.3737398684024811,-0.38192009925842285,-0.3677789866924286,-0.3752404749393463,-0.3617693781852722,-0.3683972954750061,-0.3557269871234894,-0.3613896369934082,-0.34962818026542664,-0.3542184829711914,-0.3434188663959503,-0.3468770682811737,-0.33705273270606995,-0.33935868740081787,-0.3305167555809021,-0.3316848576068878,-0.3238251209259033,-0.32391107082366943,-0.31700414419174194,-0.3160881996154785,-0.3100919723510742,-0.30822646617889404,-0.30314183235168457,-0.30031096935272217,-0.29620152711868286,-0.29234418272972107,-0.28928154706954956,-0.2843485474586487,-0.28234970569610596,-0.2763228714466095,-0.2753610908985138,-0.26822763681411743,-0.2682851552963257,-0.2600266933441162,-0.26110294461250305,-0.2517269551753998,-0.25379523634910583,-0.2433546781539917,-0.24635474383831024,-0.23491129279136658,-0.2388077676296234,-0.22638581693172455,-0.23121139407157898,-0.21780720353126526,-0.22362297773361206,-0.20924493670463562,-0.2160770297050476,-0.20073820650577545,-0.20858462154865265,-0.19224850833415985,-0.20113219320774078,-0.18370383977890015,-0.19366946816444397,-0.17507335543632507,-0.1861170083284378,-0.16637077927589417,-0.17841219902038574,-0.1576009839773178,-0.17055565118789673,-0.148741215467453,-0.16260384023189545,-0.1397855281829834,-0.15461835265159607,-0.13077619671821594,-0.14663778245449066,-0.12177445739507675,-0.1386960744857788,-0.11282160133123398,-0.1308393031358719,-0.10394816100597382,-0.1230967789888382,-0.09519916772842407,-0.11543876677751541,-0.08661489933729172,-0.10778286308050156,-0.07818744331598282,-0.10004876554012299,-0.06986398994922638,-0.09220118820667267,-0.06159941852092743,-0.08424758911132812,-0.053382694721221924,-0.07621950656175613,-0.045204222202301025,-0.06816849112510681,-0.03702538460493088,-0.06016238033771515,-0.02880621701478958,-0.05225931107997894,-0.020550966262817383,-0.04448086768388748,-0.012302905321121216,-0.0368179976940155,-0.004100114107131958,-0.029257260262966156,0.004040226340293884,-0.021784842014312744,0.012096323072910309,-0.014362379908561707,0.020029857754707336,-0.0069222599267959595,0.027816027402877808,0.0005943924188613892,0.035470448434352875,0.008194826543331146,0.043032705783843994,0.01583489030599594,0.05053168535232544,0.023451924324035645,0.05797713249921799,0.030986033380031586,0.0653659775853157,0.0383775532245636,0.07267146557569504,0.04556902498006821,0.07983017712831497,0.052524030208587646,0.08677184581756592,0.05924297124147415,0.09348134696483612,0.06576123833656311,0.10002323985099792,0.07214471697807312,0.10649779438972473,0.07848785817623138,0.11298158764839172,0.08489495515823364,0.11951449513435364,0.09144071489572525,0.12612414360046387,0.09814945608377457,0.13283410668373108,0.10502535849809647,0.13964423537254333,0.11209312081336975,0.1465175449848175,0.11938157677650452,0.15339161455631256,0.12685833871364594,0.16019673645496368,0.13440126180648804,0.16686761379241943,0.14185304939746857,0.1733635812997818,0.14909660816192627,0.1796974241733551,0.15606801211833954,0.1859397441148758,0.16272011399269104,0.19217726588249207,0.16901637613773346,0.19845536351203918,0.17497338354587555,0.20475313067436218,0.1806771457195282,0.21099962294101715,0.1862298846244812,0.21710392832756042,0.19168782234191895,0.22298064827919006,0.19706708192825317,0.22857160866260529,0.20239682495594025,0.23385636508464813,0.20773008465766907,0.23883312940597534,0.21309153735637665,0.24349918961524963,0.2184503823518753,0.24790242314338684,0.22379642724990845,0.2520396411418915,0.22907114028930664,0.2559488117694855,0.23422284424304962,0.25970956683158875,0.23919197916984558,0.263393372297287,0.24391581118106842,0.267034649848938,0.24837423861026764,0.2706506550312042,0.25261327624320984,0.2742699086666107,0.25670841336250305,0.27793049812316895,0.2607170045375824,0.2816528379917145,0.26468127965927124,0.28542274236679077,0.26866281032562256,0.2891985774040222,0.2727433443069458,0.292927622795105,0.27697640657424927,0.2965553402900696,0.281343013048172,0.3000248968601227,0.2857591211795807,0.3032781183719635,0.2901217043399811,0.30626803636550903,0.29434892535209656,0.3089806139469147,0.2983919382095337,0.31145021319389343,0.30222588777542114,0.3137483298778534,0.30583545565605164,0.31595122814178467,0.3092058300971985,0.31811270117759705,0.31232768297195435,0.3202593922615051,0.31520572304725647,0.3223975598812103,0.31785526871681213,0.3245071470737457,0.3202867805957794,0.3265295624732971,0.32250121235847473,0.3283746540546417,0.3245077431201935,0.32995209097862244,0.3263428807258606,0.33120396733283997,0.32806700468063354,0.3321175277233124,0.32974594831466675,0.332724928855896,0.3314400613307953,0.3331047594547272,0.3331981897354126,0.33337944746017456,0.33504244685173035,0.33369430899620056,0.33695265650749207,0.3341796398162842,0.3388760983943939,0.33491915464401245,0.3407588005065918,0.33593639731407166,0.3425574004650116,0.3371926546096802,0.3442245423793793,0.3385861814022064,0.3457033038139343,0.33996182680130005,0.3469533324241638,0.3411432206630707,0.34797245264053345,0.3419831097126007,0.34877270460128784,0.34240439534187317,0.349345326423645,0.3424091935157776,0.3496764302253723,0.34206104278564453,0.3498052656650543,0.3414638340473175,0.34984588623046875,0.3407500982284546,0.3499334454536438,0.340066134929657,0.3501625061035156,0.33954519033432007,0.35058847069740295,0.33927953243255615,0.3512694835662842,0.3393147885799408,0.3522685766220093,0.33966028690338135,0.35359981656074524,0.3402900993824005,0.3551881015300751,0.34113386273384094,0.356891930103302,0.3420846462249756,0.3585565388202667,0.34303149580955505,0.36004331707954407,0.34388241171836853,0.3612383306026459,0.344550758600235,0.3620738983154297,0.34493643045425415,0.3625553846359253,0.34495019912719727,0.3627432882785797,0.3445638120174408,0.3626939058303833,0.3438241183757782,0.3624250590801239,0.3428187668323517,0.361955851316452,0.3416540026664734,0.36136651039123535,0.3404766321182251,0.36078914999961853,0.33948343992233276,0.36033061146736145,0.3388586640357971,0.3600243926048279,0.3386785686016083,0.35987240076065063,0.3388814926147461,0.3599116802215576,0.3393232822418213,0.3602134883403778,0.3398509621620178,0.3608211874961853,0.34033000469207764,0.36171820759773254,0.3406338095664978,0.3628429174423218,0.3406321406364441,0.36408504843711853,0.34020528197288513,0.36525389552116394,0.3392985761165619,0.3661157488822937,0.33797401189804077,0.36651450395584106,0.33633241057395935,0.3663865327835083,0.33423125743865967,0.3655090928077698,0.33098775148391724,0.36318421363830566,0.3254320025444031,0.3582824468612671,0.31642067432403564,0.3497524857521057,0.3034154772758484,0.33714884519577026,0.2866259813308716,0.3206908106803894,0.2667217552661896,0.3009462058544159,0.24460870027542114,0.2786709666252136,0.22157062590122223,0.2550315260887146,0.19945719838142395,0.2318165898323059,0.18042144179344177,0.21116450428962708,0.16621296107769012,0.19487625360488892,0.15751305222511292,0.18379129469394684,0.15367744863033295,0.1775275021791458,0.1528540998697281,0.17453670501708984,0.1523725986480713,0.17242954671382904,0.14946037530899048,0.16865786910057068,0.1421966850757599,0.1614331305027008,0.13021358847618103,0.1503685712814331,0.1146666407585144,0.13641898334026337,0.09762406349182129,0.12132522463798523,0.08152692764997482,0.10719214379787445,0.0690765306353569,0.09647108614444733,0.06320425868034363,0.09195809066295624,0.06661736965179443,0.09632152318954468,0.08097830414772034,0.11124186217784882,0.10628615319728851,0.13673646748065948,0.1408746838569641,0.17110836505889893,0.18190903961658478,0.2114475965499878,0.22600501775741577,0.25431403517723083,0.269742876291275,0.29631057381629944,0.3100496232509613,0.334465891122818,0.3444552719593048,0.3664591610431671,0.3712193965911865,0.3907356262207031,0.3893691599369049,0.4065472185611725,0.39870530366897583,0.4139246642589569,0.399762898683548,0.4135751724243164,0.393675297498703,0.4067177474498749,0.38196316361427307,0.3948909044265747,0.36633679270744324,0.37975722551345825,0.3485592305660248,0.36291125416755676,0.330335408449173,0.3457352817058563,0.3131875991821289,0.3293605446815491,0.29833319783210754,0.314715713262558,0.28659963607788086,0.3025423586368561,0.27838796377182007,0.29330089688301086,0.27369534969329834,0.2870592176914215,0.2722085118293762,0.2835167944431305,0.27343297004699707,0.28217101097106934,0.2767919898033142,0.2824866473674774,0.28169888257980347,0.2839967906475067,0.287453293800354,0.28617313504219055,0.29337456822395325,0.2885313928127289,0.29889997839927673,0.2907150387763977,0.30358970165252686,0.2924956679344177,0.3070765733718872,0.2937161922454834,0.3090613782405853,0.2942705750465393,0.30936959385871887,0.2941321134567261,0.3079759478569031,0.29334330558776855,0.30495354533195496,0.29192981123924255,0.30042779445648193,0.28982827067375183,0.2946094274520874,0.28691163659095764,0.28784412145614624,0.2830761671066284,0.2805746793746948,0.27829596400260925,0.2732338309288025,0.27262943983078003,0.26617667078971863,0.2662232518196106,0.25967875123023987,0.2593178451061249,0.25392982363700867,0.25221049785614014,0.24899810552597046,0.24517767131328583,0.24483585357666016,0.2384195476770401,0.2413596510887146,0.23206254839897156,0.23851251602172852,0.2261812388896942,0.2362290471792221,0.22080402076244354,0.2343699336051941,0.21592116355895996,0.2327447235584259,0.21152155101299286,0.23120062053203583,0.20762799680233002,0.22964338958263397,0.20428478717803955,0.22795343399047852,0.20150336623191833,0.2259225845336914,0.19921478629112244,0.22331036627292633,0.19725462794303894,0.2199501097202301,0.19537846744060516,0.2157791703939438,0.19330155849456787,0.2107958346605301,0.1907530426979065,0.2050483673810959,0.18751242756843567,0.1986832618713379,0.18341392278671265,0.19196321070194244,0.17835724353790283,0.18518690764904022,0.1723581850528717,0.17857202887535095,0.1655905842781067,0.17220304906368256,0.15833452343940735,0.1660631000995636,0.1508517861366272,0.16009025275707245,0.14331141114234924,0.15421250462532043,0.13582764565944672,0.14836138486862183,0.12851488590240479,0.1424730122089386,0.12145394831895828,0.13647493720054626,0.11461437493562698,0.13027110695838928,0.10786096751689911,0.12374910712242126,0.10105203837156296,0.11681777238845825,0.09411272406578064,0.10944677889347076,0.0870223417878151,0.10168059915304184,0.07978898286819458,0.09362272918224335,0.07247429341077805,0.08540672063827515,0.06521251797676086,0.07717220485210419,0.05815443769097328,0.06905745714902878,0.05138806998729706,0.06120937690138817,0.044933073222637177,0.053783953189849854,0.03879239410161972,0.04690658301115036,0.032958440482616425,0.040596701204776764,0.02735314890742302,0.03471525385975838,0.021802255883812904,0.028989167883992195,0.01609962061047554,0.023105600848793983,0.010090738534927368,0.016811873763799667,0.003688353579491377,0.009963242337107658,-0.0031575006432831287,0.002516126027330756,-0.01046459749341011,-0.005494528915733099,-0.018199991434812546,-0.013961371034383774,-0.02628650888800621,-0.02269870787858963,-0.03463251143693924,-0.03145888075232506,-0.043135449290275574,-0.039992015808820724,-0.051663435995578766,-0.0481300912797451,-0.060072120279073715,-0.05583951249718666,-0.06826416403055191,-0.063203364610672,-0.0762188732624054,-0.07035306096076965,-0.08395205438137054,-0.077405646443367,-0.09146834164857864,-0.0844445675611496,-0.09877212345600128,-0.09153379499912262,-0.1059095486998558,-0.09873364865779877,-0.1129670962691307,-0.1060994565486908,-0.12002304196357727,-0.11366908252239227,-0.12711678445339203,-0.12144944071769714,-0.13426116108894348,-0.12941238284111023,-0.1414547860622406,-0.13750536739826202,-0.1486705243587494,-0.14567208290100098,-0.1558549851179123,-0.1538686901330948,-0.16296620666980743,-0.16206611692905426,-0.17001113295555115,-0.17024314403533936,-0.17703497409820557,-0.17837992310523987,-0.1840820014476776,-0.18645545840263367,-0.1911834478378296,-0.19444873929023743,-0.19838199019432068,-0.2023506760597229,-0.20574374496936798,-0.21018409729003906,-0.21332889795303345,-0.21801145374774933,-0.22115075588226318,-0.2259119749069214,-0.2291652262210846,-0.23393920063972473,-0.23729002475738525,-0.24209696054458618,-0.24542775750160217,-0.25034987926483154,-0.2534793019294739,-0.2586488425731659,-0.2613561749458313,-0.26694440841674805,-0.2689962685108185,-0.2751891016960144,-0.2763730585575104,-0.2833440899848938,-0.28349441289901733,-0.2913866341114044,-0.29039308428764343,-0.29930567741394043,-0.2971133589744568,-0.307087779045105,-0.30369770526885986,-0.3147141635417938,-0.31017762422561646,-0.322174072265625,-0.31657397747039795,-0.3294750452041626,-0.32290157675743103,-0.3366340100765228,-0.32917243242263794,-0.34366050362586975,-0.33539602160453796,-0.3505537211894989,-0.34157902002334595,-0.35731732845306396,-0.34772777557373047,-0.3639681339263916,-0.35384660959243774,-0.37052851915359497,-0.3599322438240051,-0.3770109713077545,-0.36596933007240295,-0.38341113924980164,-0.3719328045845032,-0.38971376419067383,-0.3777962625026703,-0.395904541015625,-0.3835383355617523,-0.4019785523414612,-0.3891465663909912,-0.4079378843307495,-0.39461749792099,-0.4137786626815796,-0.3999519944190979,-0.41947999596595764,-0.4051479697227478,-0.42500901222229004,-0.4101989269256592,-0.43034130334854126,-0.41509705781936646,-0.43548041582107544,-0.419841468334198,-0.44045743346214294,-0.42443957924842834,-0.4453069567680359,-0.4289010763168335,-0.4500356912612915,-0.4332244396209717,-0.45460939407348633,-0.4373864233493805,-0.4589867889881134,-0.4413633644580841,-0.46323850750923157,-0.44523024559020996,-0.4673311710357666,-0.448950856924057,-0.47124043107032776,-0.4524918496608734,-0.47496506571769714,-0.4558508098125458,-0.47851237654685974,-0.45904505252838135,-0.4818895757198334,-0.46209385991096497,-0.48510071635246277,-0.465003103017807,-0.48814600706100464,-0.46776124835014343,-0.4910202920436859,-0.4703477919101715,-0.4937116503715515,-0.4727475941181183,-0.49620547890663147,-0.4749591052532196,-0.4984930157661438,-0.47699394822120667,-0.5005773305892944,-0.47886550426483154,-0.5024701356887817,-0.48057854175567627,-0.5041794180870056,-0.4821264445781708,-0.5057013034820557,-0.48349958658218384,-0.5070251822471619,-0.4846949577331543,-0.5081486105918884,-0.48571905493736267,-0.509087085723877,-0.48658329248428345,-0.5098643898963928,-0.48729389905929565,-0.5104926228523254,-0.4878467321395874,-0.5109565854072571,-0.48822930455207825,-0.5112249851226807,-0.48842892050743103,-0.5112738013267517,-0.4884416460990906,-0.5111058354377747,-0.4882757067680359,-0.510748028755188,-0.48794835805892944,-0.510232150554657,-0.4874734580516815,-0.5095677971839905,-0.4868512451648712,-0.5087315440177917,-0.4860653281211853,-0.507678210735321,-0.48509278893470764,-0.5063723921775818,-0.48391830921173096,-0.5048164129257202,-0.4825429618358612,-0.5030500292778015,-0.48098352551460266,-0.5011188387870789,-0.4792636036872864,-0.49903959035873413,-0.47740641236305237,-0.49679604172706604,-0.47542843222618103,-0.4943670630455017,-0.4733349680900574,-0.4917532801628113,-0.4711179733276367,-0.4889707863330841,-0.4687599241733551,-0.4860231280326843,-0.46624556183815,-0.48288673162460327,-0.46356797218322754,-0.4795306921005249,-0.4607272446155548,-0.47594529390335083,-0.4577200412750244,-0.4721463918685913,-0.45453545451164246,-0.46815428137779236,-0.45116257667541504,-0.4639756381511688,-0.44760099053382874,-0.45960667729377747,-0.4438607692718506,-0.4550493359565735,-0.43995341658592224,-0.4503166675567627,-0.43588492274284363,-0.44542694091796875,-0.43166229128837585,-0.4403962194919586,-0.42730194330215454,-0.4352371096611023,-0.4228253960609436,-0.42995357513427734,-0.41824057698249817,-0.4245334267616272,-0.4135271906852722,-0.4189499616622925,-0.40864601731300354,-0.41317906975746155,-0.4035632312297821,-0.40721848607063293,-0.3982691168785095,-0.4010874032974243,-0.3927765190601349,-0.394808292388916,-0.38710835576057434,-0.388395220041275,-0.3812902271747589,-0.38185957074165344,-0.3753519058227539,-0.3752199113368988,-0.36932194232940674,-0.3684973418712616,-0.3632151782512665,-0.36169925332069397,-0.3570241928100586,-0.3548104763031006,-0.35072851181030273,-0.34780266880989075,-0.3443145751953125,-0.34065306186676025,-0.33778634667396545,-0.33335644006729126,-0.33115726709365845,-0.3259279131889343,-0.3244384527206421,-0.318397581577301,-0.31764116883277893,-0.31079593300819397,-0.3107862174510956,-0.3031361997127533,-0.3039014935493469,-0.2954109013080597,-0.2970024645328522,-0.2876105010509491,-0.2900755703449249,-0.2797442376613617,-0.28308728337287903,-0.27183473110198975,-0.276012122631073,-0.26388534903526306,-0.2688480317592621,-0.2558617889881134,-0.2616053521633148,-0.2477174997329712,-0.2542847990989685,-0.23943772912025452,-0.24687598645687103,-0.23105037212371826,-0.23937740921974182,-0.22259145975112915,-0.23180991411209106,-0.2140737771987915,-0.22420412302017212,-0.20549969375133514,-0.2165747880935669,-0.1968955248594284,-0.20891325175762177,-0.18831145763397217,-0.20120587944984436,-0.1797809600830078,-0.19345428049564362,-0.17129217088222504,-0.18567350506782532,-0.16281338036060333,-0.17787405848503113,-0.15433865785598755,-0.17005404829978943,-0.14589308202266693,-0.16221165657043457,-0.1374913901090622,-0.1543581485748291,-0.1291087418794632,-0.1465117484331131,-0.12070388346910477,-0.1386767327785492,-0.11226113140583038,-0.13083478808403015,-0.10379426181316376,-0.12296002358198166,-0.09531185775995255,-0.115040622651577,-0.08679930120706558,-0.10708432644605637,-0.07824482023715973,-0.09910604357719421,-0.06966972351074219,-0.09111578017473221,-0.061114951968193054,-0.08311952650547028,-0.052599892020225525,-0.0751243606209755,-0.04410962760448456,-0.06713724881410599,-0.03562984615564346,-0.05916077643632889,-0.027179516851902008,-0.05119534954428673,-0.01879652589559555,-0.04324730113148689,-0.010496310889720917,-0.03532908856868744,-0.002260833978652954,-0.027447693049907684,0.0059290193021297455,-0.019598383456468582,0.014061875641345978,-0.011778898537158966,0.022105101495981216,-0.004013461992144585,0.03003648668527603,0.0036457106471061707,0.03785426914691925,0.011150557547807693,0.04555843397974968,0.018492722883820534,0.053134094923734665,0.02570323459804058,0.060557737946510315,0.03281550854444504,0.06780894100666046,0.039834704250097275,0.07486822456121445,0.04675022140145302,0.0817132443189621,0.053574249148368835,0.08833374828100204,0.060355111956596375,0.0947575718164444,0.06714500486850739,0.10105312615633011,0.07395663857460022,0.10729896277189255,0.08076008409261703,0.11355335265398026,0.0875229686498642,0.11985470354557037,0.09424670785665512,0.12623825669288635,0.10095816850662231,0.1327301263809204,0.10766972601413727,0.1393246352672577,0.11436689645051956,0.14602354168891907,0.12108242511749268,0.15275464951992035,0.12784253060817719,0.15944001078605652,0.13467952609062195,0.166034996509552,0.1416047364473343,0.17252594232559204,0.1485820859670639,0.17891503870487213,0.15553797781467438,0.18521401286125183,0.162397101521492,0.19144229590892792,0.1691051870584488,0.19761662185192108,0.1756211370229721,0.20373423397541046,0.1818981170654297,0.20976819097995758,0.18788672983646393,0.21567688882350922,0.19356295466423035,0.22141236066818237,0.1989491879940033,0.22691985964775085,0.20410071313381195,0.23214197158813477,0.2090718001127243,0.23703992366790771,0.2138986885547638,0.24161241948604584,0.21860937774181366,0.24588878452777863,0.2232365906238556,0.24990510940551758,0.2278122901916504,0.25369614362716675,0.23235124349594116,0.25730907917022705,0.23684369027614594,0.2608065903186798,0.24126189947128296,0.26424169540405273,0.24557729065418243,0.26763802766799927,0.2497827410697937,0.2710042893886566,0.2539080083370209,0.2743600904941559,0.2580043077468872,0.27772846817970276,0.2621048092842102,0.28109848499298096,0.2662014663219452,0.2844138741493225,0.27026814222335815,0.28761327266693115,0.27430057525634766,0.2906782627105713,0.2783187925815582,0.2936345636844635,0.2823316752910614,0.29650774598121643,0.28631120920181274,0.2992847263813019,0.2902001440525055,0.30191662907600403,0.29392778873443604,0.30435478687286377,0.2974175214767456,0.3065836429595947,0.3006058931350708,0.30862122774124146,0.30347740650177,0.31049442291259766,0.306072473526001,0.312222421169281,0.3084503412246704,0.31383374333381653,0.31065377593040466,0.3153923749923706,0.31272828578948975,0.31698936223983765,0.31476086378097534,0.3186992406845093,0.3168686330318451,0.3205533027648926,0.31914153695106506,0.3225567936897278,0.3216134309768677,0.3247084319591522,0.324289470911026,0.3269837200641632,0.3271740972995758,0.3293130397796631,0.33025112748146057,0.33160120248794556,0.3334524631500244,0.3337690830230713,0.3366631269454956,0.3357566297054291,0.33975350856781006,0.33749690651893616,0.34260159730911255,0.3389246463775635,0.3451049029827118,0.34002384543418884,0.3472021222114563,0.34083592891693115,0.3488919138908386,0.34139955043792725,0.3502168655395508,0.3416992127895355,0.35122162103652954,0.3416895866394043,0.35192933678627014,0.3413449227809906,0.3523486256599426,0.3406597077846527,0.35248973965644836,0.3396291136741638,0.3523767590522766,0.3382820785045624,0.352059006690979,0.3367357850074768,0.35161373019218445,0.33517172932624817,0.3511255085468292,0.3337372839450836,0.35066133737564087,0.33248984813690186,0.3502699136734009,0.33143895864486694,0.3499961793422699,0.33060356974601746,0.34987717866897583,0.33000418543815613,0.3499266803264618,0.3296352028846741,0.3501513600349426,0.32948991656303406,0.350592702627182,0.329603374004364,0.3513304591178894,0.33003976941108704,0.35242897272109985,0.33083397150039673,0.35388806462287903,0.3319631814956665,0.35565000772476196,0.3333580195903778,0.35762736201286316,0.334903359413147,0.35970258712768555,0.33642998337745667,0.3617240786552429,0.3377501368522644,0.3635392487049103,0.33872780203819275,0.365033894777298,0.3393082618713379,0.36612892150878906,0.33948349952697754,0.3667609691619873,0.339260458946228,0.3669013977050781,0.33867549896240234,0.366586297750473,0.3378073573112488,0.3658924102783203,0.33674895763397217,0.364884614944458,0.3355695903301239,0.3636193573474884,0.33430618047714233,0.36218708753585815,0.33296605944633484,0.3606922924518585,0.3315345048904419,0.35918036103248596,0.3300207853317261,0.35764509439468384,0.3285069167613983,0.35611510276794434,0.3270561099052429,0.3546077311038971,0.3254457414150238,0.352856308221817,0.3229660391807556,0.350090354681015,0.3185683786869049,0.3452148139476776,0.3112976551055908,0.33729299902915955,0.30062180757522583,0.32587888836860657,0.28643596172332764,0.3109724819660187,0.2689546048641205,0.2928783595561981,0.24881073832511902,0.2723010778427124,0.22731277346611023,0.25058284401893616,0.20648010075092316,0.22969430685043335,0.18861271440982819,0.21180330216884613,0.17556962370872498,0.1986304223537445,0.1681668758392334,0.19092623889446259,0.1659921258687973,0.18827880918979645,0.16763757169246674,0.18928979337215424,0.17113277316093445,0.19200463593006134,0.1743386834859848,0.1943642944097519,0.175251305103302,0.19451621174812317,0.17233914136886597,0.1910596489906311,0.16496074199676514,0.18336881697177887,0.15363140404224396,0.17187567055225372,0.1398496776819229,0.157985121011734,0.12555719912052155,0.1435789316892624,0.11268371343612671,0.13053175806999207,0.10308875143527985,0.12063667923212051,0.09868810325860977,0.11577457934617996,0.10131668299436569,0.11781617254018784,0.11223071813583374,0.12809985876083374,0.1316116750240326,0.14688126742839813,0.15844237804412842,0.17319311201572418,0.19076986610889435,0.20511654019355774,0.2261192500591278,0.24018003046512604,0.2618753910064697,0.2757151126861572)\n\
+\n\
+]);\n\
+\n\
+function runTest(test, iterations) {\n\
+ for (var i = 0; i < iterations; i++) {\n\
+ test();\n\
+ }\n\
+}\n\
+\n\
+/* \n\
+ * DSP.js - a comprehensive digital signal processing library for javascript \n\
+ * \n\
+ * Created by Corban Brook <corbanbrook@gmail.com> on 2010-01-01.\n\
+ * Copyright 2010 Corban Brook. All rights reserved.\n\
+ *\n\
+ */\n\
+\n\
+////////////////////////////////////////////////////////////////////////////////\n\
+// CONSTANTS //\n\
+////////////////////////////////////////////////////////////////////////////////\n\
+\n\
+/**\n\
+ * DSP is an object which contains general purpose utility functions and constants\n\
+ */\n\
+DSP = {\n\
+ // Channels\n\
+ LEFT: 0,\n\
+ RIGHT: 1,\n\
+ MIX: 2,\n\
+\n\
+ // Waveforms\n\
+ SINE: 1,\n\
+ TRIANGLE: 2,\n\
+ SAW: 3,\n\
+ SQUARE: 4,\n\
+\n\
+ // Filters \n\
+ LOWPASS: 0,\n\
+ HIGHPASS: 1,\n\
+ BANDPASS: 2,\n\
+ NOTCH: 3,\n\
+\n\
+ // Window functions\n\
+ BARTLETT: 1,\n\
+ BARTLETTHANN: 2,\n\
+ BLACKMAN: 3,\n\
+ COSINE: 4,\n\
+ GAUSS: 5,\n\
+ HAMMING: 6,\n\
+ HANN: 7,\n\
+ LANCZOS: 8,\n\
+ RECTANGULAR: 9,\n\
+ TRIANGULAR: 10,\n\
+\n\
+ // Loop modes\n\
+ OFF: 0,\n\
+ FW: 1,\n\
+ BW: 2,\n\
+ FWBW: 3,\n\
+\n\
+ // Math\n\
+ TWO_PI: 2*Math.PI\n\
+};\n\
+\n\
+////////////////////////////////////////////////////////////////////////////////\n\
+// DSP UTILITY FUNCTIONS //\n\
+////////////////////////////////////////////////////////////////////////////////\n\
+\n\
+/**\n\
+ * Inverts the phase of a signal\n\
+ *\n\
+ * @param {Array} buffer A sample buffer\n\
+ *\n\
+ * @returns The inverted sample buffer\n\
+ */\n\
+DSP.invert = function(buffer) {\n\
+ for ( var i = 0, len = buffer.length; i < len; i++ ) {\n\
+ buffer[i] *= -1;\n\
+ }\n\
+\n\
+ return buffer;\n\
+};\n\
+\n\
+/**\n\
+ * Converts split-stereo (dual mono) sample buffers into a stereo interleaved sample buffer\n\
+ *\n\
+ * @param {Array} left A sample buffer\n\
+ * @param {Array} right A sample buffer\n\
+ *\n\
+ * @returns The stereo interleaved buffer\n\
+ */\n\
+DSP.interleave = function(left, right) {\n\
+ if ( left.length !== right.length ) {\n\
+ throw \"Can not interleave. Channel lengths differ.\";\n\
+ }\n\
+ \n\
+ var stereoInterleaved = new Array(left.length * 2);\n\
+ \n\
+ for (var i = 0, len = left.length; i < len; i++ ) {\n\
+ stereoInterleaved[2*i] = left[i];\n\
+ stereoInterleaved[2*i+1] = right[i];\n\
+ }\n\
+ \n\
+ return stereoInterleaved;\n\
+};\n\
+\n\
+/**\n\
+ * Converts a stereo-interleaved sample buffer into split-stereo (dual mono) sample buffers\n\
+ *\n\
+ * @param {Array} buffer A stereo-interleaved sample buffer\n\
+ *\n\
+ * @returns an Array containing left and right channels\n\
+ */\n\
+DSP.deinterleave = function(buffer) {\n\
+ var left = new Array(buffer.length/2);\n\
+ var right = new Array(buffer.length/2);\n\
+ var mix = new Array(buffer.length/2);\n\
+ \n\
+ for (var i = 0, len = buffer.length/2; i < len; i ++ ) {\n\
+ left[i] = buffer[2*i];\n\
+ right[i] = buffer[2*i+1];\n\
+ mix[i] = (left[i] + right[i]) / 2;\n\
+ }\n\
+ \n\
+ return [left, right, mix];\n\
+};\n\
+\n\
+/**\n\
+ * Separates a channel from a stereo-interleaved sample buffer\n\
+ *\n\
+ * @param {Array} buffer A stereo-interleaved sample buffer\n\
+ * @param {Number} channel A channel constant (LEFT, RIGHT, MIX)\n\
+ *\n\
+ * @returns an Array containing a signal mono sample buffer\n\
+ */\n\
+DSP.getChannel = function(channel, buffer) {\n\
+ return DSP.deinterleave(buffer)[channel];\n\
+};\n\
+\n\
+// Biquad filter types\n\
+DSP.LPF = 0; // H(s) = 1 / (s^2 + s/Q + 1)\n\
+DSP.HPF = 1; // H(s) = s^2 / (s^2 + s/Q + 1)\n\
+DSP.BPF_CONSTANT_SKIRT = 2; // H(s) = s / (s^2 + s/Q + 1) (constant skirt gain, peak gain = Q)\n\
+DSP.BPF_CONSTANT_PEAK = 3; // H(s) = (s/Q) / (s^2 + s/Q + 1) (constant 0 dB peak gain)\n\
+DSP.NOTCH = 4; // H(s) = (s^2 + 1) / (s^2 + s/Q + 1)\n\
+DSP.APF = 5; // H(s) = (s^2 - s/Q + 1) / (s^2 + s/Q + 1)\n\
+DSP.PEAKING_EQ = 6; // H(s) = (s^2 + s*(A/Q) + 1) / (s^2 + s/(A*Q) + 1)\n\
+DSP.LOW_SHELF = 7; // H(s) = A * (s^2 + (sqrt(A)/Q)*s + A)/(A*s^2 + (sqrt(A)/Q)*s + 1)\n\
+DSP.HIGH_SHELF = 8; // H(s) = A * (A*s^2 + (sqrt(A)/Q)*s + 1)/(s^2 + (sqrt(A)/Q)*s + A)\n\
+\n\
+// Biquad filter parameter types\n\
+DSP.Q = 1;\n\
+DSP.BW = 2; // SHARED with BACKWARDS LOOP MODE\n\
+DSP.S = 3;\n\
+\n\
+\n\
+/** \n\
+ * DFT is a class for calculating the Discrete Fourier Transform of a signal.\n\
+ *\n\
+ * @param {Number} bufferSize The size of the sample buffer to be computed\n\
+ * @param {Number} sampleRate The sampleRate of the buffer (eg. 44100)\n\
+ *\n\
+ * @constructor\n\
+ */\n\
+DFT = function(bufferSize, sampleRate) {\n\
+ this.bufferSize = bufferSize;\n\
+ this.sampleRate = sampleRate;\n\
+\n\
+ var N = bufferSize/2 * bufferSize;\n\
+ \n\
+ this.sinTable = new Array(N);\n\
+ this.cosTable = new Array(N);\n\
+ \n\
+ for ( var i = 0; i < N; i++ ) {\n\
+ this.sinTable[i] = Math.sin(i * DSP.TWO_PI / bufferSize);\n\
+ this.cosTable[i] = Math.cos(i * DSP.TWO_PI / bufferSize);\n\
+ }\n\
+ \n\
+ this.spectrum = new Array(bufferSize/2);\n\
+ this.complexValues = new Array(bufferSize/2);\n\
+};\n\
+\n\
+/**\n\
+ * Performs a forward tranform on the sample buffer. \n\
+ * Converts a time domain signal to frequency domain spectra.\n\
+ *\n\
+ * @param {Array} buffer The sample buffer\n\
+ *\n\
+ * @returns The frequency spectrum array\n\
+ */\n\
+DFT.prototype.forward = function(buffer) {\n\
+ var real, imag;\n\
+\n\
+ for ( var k = 0; k < this.bufferSize/2; k++ ) {\n\
+ real = 0.0;\n\
+ imag = 0.0;\n\
+\n\
+ for ( var n = 0; n < buffer.length; n++ ) {\n\
+ real += this.cosTable[k*n] * buffer[n];\n\
+ imag += this.sinTable[k*n] * buffer[n];\n\
+ }\n\
+\n\
+ this.complexValues[k] = {real: real, imag: imag};\n\
+ }\n\
+ \n\
+ for ( var i = 0; i < this.bufferSize/2; i++ ) {\n\
+ this.spectrum[i] = 2 * Math.sqrt(Math.pow(this.complexValues[i].real, 2) + Math.pow(this.complexValues[i].imag, 2)) / this.bufferSize;\n\
+ }\n\
+\n\
+ return this.spectrum;\n\
+};\n\
+\n\
+\n\
+/** \n\
+ * FFT is a class for calculating the Discrete Fourier Transform of a signal \n\
+ * with the Fast Fourier Transform algorithm.\n\
+ *\n\
+ * @param {Number} bufferSize The size of the sample buffer to be computed. Must be power of 2\n\
+ * @param {Number} sampleRate The sampleRate of the buffer (eg. 44100)\n\
+ *\n\
+ * @constructor\n\
+ */\n\
+FFT = function(bufferSize, sampleRate) {\n\
+ this.bufferSize = bufferSize;\n\
+ this.sampleRate = sampleRate;\n\
+ this.spectrum = new Array(bufferSize/2);\n\
+ this.real = new Array(bufferSize);\n\
+ this.imag = new Array(bufferSize);\n\
+ \n\
+ this.reverseTable = new Array(bufferSize);\n\
+\n\
+ var limit = 1;\n\
+ var bit = bufferSize >> 1;\n\
+\n\
+ while ( limit < bufferSize ) {\n\
+ for ( var i = 0; i < limit; i++ ) {\n\
+ this.reverseTable[i + limit] = this.reverseTable[i] + bit;\n\
+ }\n\
+\n\
+ limit = limit << 1;\n\
+ bit = bit >> 1;\n\
+ }\n\
+\n\
+ this.sinTable = new Array(bufferSize);\n\
+ this.cosTable = new Array(bufferSize);\n\
+\n\
+ for ( var i = 0; i < bufferSize; i++ ) {\n\
+ this.sinTable[i] = Math.sin(-Math.PI/i);\n\
+ this.cosTable[i] = Math.cos(-Math.PI/i);\n\
+ }\n\
+};\n\
+\n\
+/**\n\
+ * Performs a forward tranform on the sample buffer. \n\
+ * Converts a time domain signal to frequency domain spectra.\n\
+ *\n\
+ * @param {Array} buffer The sample buffer. Buffer Length must be power of 2\n\
+ *\n\
+ * @returns The frequency spectrum array\n\
+ */\n\
+FFT.prototype.forward = function(buffer) {\n\
+ // Locally scope variables for speed up\n\
+ var bufferSize = this.bufferSize,\n\
+ cosTable = this.cosTable,\n\
+ sinTable = this.sinTable,\n\
+ reverseTable = this.reverseTable,\n\
+ real = this.real,\n\
+ imag = this.imag,\n\
+ spectrum = this.spectrum;\n\
+\n\
+ var k = Math.floor(Math.log(bufferSize) / Math.LN2);\n\
+ if ( Math.pow(2, k) !== bufferSize ) { throw \"Invalid buffer size, must be a power of 2.\"; }\n\
+ if ( bufferSize !== buffer.length ) { throw \"Supplied buffer is not the same size as defined FFT. FFT Size: \" + bufferSize + \" Buffer Size: \" + buffer.length; }\n\
+\n\
+ for ( var i = 0; i < bufferSize; i++ ) {\n\
+ real[i] = buffer[reverseTable[i]];\n\
+ imag[i] = 0;\n\
+ }\n\
+\n\
+ var halfSize = 1, \n\
+ phaseShiftStepReal, \n\
+ phaseShiftStepImag, \n\
+ currentPhaseShiftReal, \n\
+ currentPhaseShiftImag, \n\
+ off, \n\
+ tr, \n\
+ ti, \n\
+ tmpReal, \n\
+ i;\n\
+\n\
+ while ( halfSize < bufferSize ) {\n\
+ phaseShiftStepReal = cosTable[halfSize];\n\
+ phaseShiftStepImag = sinTable[halfSize];\n\
+ currentPhaseShiftReal = 1;\n\
+ currentPhaseShiftImag = 0;\n\
+\n\
+ for ( var fftStep = 0; fftStep < halfSize; fftStep++ ) {\n\
+ i = fftStep;\n\
+\n\
+ while ( i < bufferSize ) {\n\
+ off = i + halfSize;\n\
+ tr = (currentPhaseShiftReal * real[off]) - (currentPhaseShiftImag * imag[off]);\n\
+ ti = (currentPhaseShiftReal * imag[off]) + (currentPhaseShiftImag * real[off]);\n\
+\n\
+ real[off] = real[i] - tr;\n\
+ imag[off] = imag[i] - ti;\n\
+ real[i] += tr;\n\
+ imag[i] += ti;\n\
+\n\
+ i += halfSize << 1;\n\
+ }\n\
+\n\
+ tmpReal = currentPhaseShiftReal;\n\
+ currentPhaseShiftReal = (tmpReal * phaseShiftStepReal) - (currentPhaseShiftImag * phaseShiftStepImag);\n\
+ currentPhaseShiftImag = (tmpReal * phaseShiftStepImag) + (currentPhaseShiftImag * phaseShiftStepReal);\n\
+ }\n\
+\n\
+ halfSize = halfSize << 1;\n\
+ }\n\
+\n\
+ i = bufferSize/2;\n\
+ while(i--) {\n\
+ spectrum[i] = 2 * Math.sqrt(real[i] * real[i] + imag[i] * imag[i]) / bufferSize;\n\
+ }\n\
+\n\
+ return spectrum;\n\
+};\n\
+\n\
+FFT.prototype.inverse = function(real, imag) {\n\
+ // Locally scope variables for speed up\n\
+ var bufferSize = this.bufferSize,\n\
+ cosTable = this.cosTable,\n\
+ sinTable = this.sinTable,\n\
+ reverseTable = this.reverseTable,\n\
+ spectrum = this.spectrum;\n\
+ \n\
+ real = real || this.real;\n\
+ imag = imag || this.imag;\n\
+\n\
+ for (var i = 0; i < bufferSize; i++) {\n\
+ imag[i] *= -1;\n\
+ }\n\
+\n\
+ var revReal = new Array(bufferSize);\n\
+ var revImag = new Array(bufferSize);\n\
+ \n\
+ for (var i = 0; i < real.length; i++) {\n\
+ revReal[i] = real[reverseTable[i]];\n\
+ revImag[i] = imag[reverseTable[i]];\n\
+ }\n\
+ \n\
+ real = revReal;\n\
+ imag = revImag;\n\
+\n\
+ var halfSize = 1, \n\
+ phaseShiftStepReal, \n\
+ phaseShiftStepImag, \n\
+ currentPhaseShiftReal, \n\
+ currentPhaseShiftImag, \n\
+ off, \n\
+ tr, \n\
+ ti, \n\
+ tmpReal, \n\
+ i;\n\
+\n\
+ while ( halfSize < bufferSize ) {\n\
+ phaseShiftStepReal = cosTable[halfSize];\n\
+ phaseShiftStepImag = sinTable[halfSize];\n\
+ currentPhaseShiftReal = 1;\n\
+ currentPhaseShiftImag = 0;\n\
+\n\
+ for ( var fftStep = 0; fftStep < halfSize; fftStep++ ) {\n\
+ i = fftStep;\n\
+\n\
+ while ( i < bufferSize ) {\n\
+ off = i + halfSize;\n\
+ tr = (currentPhaseShiftReal * real[off]) - (currentPhaseShiftImag * imag[off]);\n\
+ ti = (currentPhaseShiftReal * imag[off]) + (currentPhaseShiftImag * real[off]);\n\
+\n\
+ real[off] = real[i] - tr;\n\
+ imag[off] = imag[i] - ti;\n\
+ real[i] += tr;\n\
+ imag[i] += ti;\n\
+\n\
+ i += halfSize << 1;\n\
+ }\n\
+\n\
+ tmpReal = currentPhaseShiftReal;\n\
+ currentPhaseShiftReal = (tmpReal * phaseShiftStepReal) - (currentPhaseShiftImag * phaseShiftStepImag);\n\
+ currentPhaseShiftImag = (tmpReal * phaseShiftStepImag) + (currentPhaseShiftImag * phaseShiftStepReal);\n\
+ }\n\
+\n\
+ halfSize = halfSize << 1;\n\
+ }\n\
+\n\
+ var buffer = new Array(bufferSize);\n\
+ for (var i = 0; i < bufferSize; i++) {\n\
+ buffer[i] = real[i] / bufferSize;\n\
+ }\n\
+\n\
+ return buffer;\n\
+};\n\
+\n\
+Sampler = function Sampler(file, bufferSize, sampleRate, playStart, playEnd, loopStart, loopEnd, loopMode) {\n\
+ this.file = file;\n\
+ this.bufferSize = bufferSize;\n\
+ this.sampleRate = sampleRate;\n\
+ this.playStart = playStart || 0; // 0%\n\
+ this.playEnd = playEnd || 1; // 100%\n\
+ this.loopStart = loopStart || 0;\n\
+ this.loopEnd = loopEnd || 1;\n\
+ this.loopMode = loopMode || DSP.OFF;\n\
+ this.loaded = false;\n\
+ this.samples = [];\n\
+ this.signal = new Array(bufferSize);\n\
+ this.frameCount = 0;\n\
+ this.envelope = null;\n\
+ this.amplitude = 1;\n\
+ this.rootFrequency = 110; // A2 110\n\
+ this.frequency = 550;\n\
+ this.step = this.frequency / this.rootFrequency;\n\
+ this.duration = 0;\n\
+ this.samplesProcessed = 0;\n\
+ this.playhead = 0;\n\
+ \n\
+ var audio = /* new Audio();*/ document.createElement(\"AUDIO\");\n\
+ var self = this;\n\
+ \n\
+ this.loadSamples = function(event) {\n\
+ var buffer = DSP.getChannel(DSP.MIX, event.frameBuffer);\n\
+ for ( var i = 0; i < buffer.length; i++) {\n\
+ self.samples.push(buffer[i]);\n\
+ }\n\
+ };\n\
+ \n\
+ this.loadComplete = function() {\n\
+ // convert flexible js array into a fast typed array\n\
+ self.samples = new Array(self.samples);\n\
+ self.loaded = true;\n\
+ };\n\
+ \n\
+ this.loadMetaData = function() {\n\
+ self.duration = audio.duration;\n\
+ };\n\
+ \n\
+ audio.addEventListener(\"MozAudioAvailable\", this.loadSamples, false);\n\
+ audio.addEventListener(\"loadedmetadata\", this.loadMetaData, false)\n\
+ audio.addEventListener(\"ended\", this.loadComplete, false);\n\
+ audio.muted = true;\n\
+ audio.src = file;\n\
+ audio.play();\n\
+};\n\
+\n\
+Sampler.prototype.applyEnvelope = function() {\n\
+ this.envelope.process(this.signal);\n\
+ return this.signal;\n\
+};\n\
+\n\
+Sampler.prototype.generate = function() {\n\
+ var frameOffset = this.frameCount * this.bufferSize;\n\
+ \n\
+ var loopWidth = this.playEnd * this.samples.length - this.playStart * this.samples.length;\n\
+ var playStartSamples = this.playStart * this.samples.length; // ie 0.5 -> 50% of the length\n\
+ var playEndSamples = this.playEnd * this.samples.length; // ie 0.5 -> 50% of the length\n\
+ var offset;\n\
+\n\
+ for ( var i = 0; i < this.bufferSize; i++ ) {\n\
+ switch (this.loopMode) {\n\
+ case DSP.OFF:\n\
+ this.playhead = Math.round(this.samplesProcessed * this.step + playStartSamples);\n\
+ if (this.playhead < (this.playEnd * this.samples.length) ) {\n\
+ this.signal[i] = this.samples[this.playhead] * this.amplitude;\n\
+ } else {\n\
+ this.signal[i] = 0;\n\
+ }\n\
+ break;\n\
+ \n\
+ case DSP.FW:\n\
+ this.playhead = Math.round((this.samplesProcessed * this.step) % loopWidth + playStartSamples);\n\
+ if (this.playhead < (this.playEnd * this.samples.length) ) {\n\
+ this.signal[i] = this.samples[this.playhead] * this.amplitude;\n\
+ }\n\
+ break;\n\
+ \n\
+ case DSP.BW:\n\
+ this.playhead = playEndSamples - Math.round((this.samplesProcessed * this.step) % loopWidth);\n\
+ if (this.playhead < (this.playEnd * this.samples.length) ) {\n\
+ this.signal[i] = this.samples[this.playhead] * this.amplitude;\n\
+ }\n\
+ break;\n\
+ \n\
+ case DSP.FWBW:\n\
+ if ( Math.floor(this.samplesProcessed * this.step / loopWidth) % 2 == 0 ) {\n\
+ this.playhead = Math.round((this.samplesProcessed * this.step) % loopWidth + playStartSamples);\n\
+ } else {\n\
+ this.playhead = playEndSamples - Math.round((this.samplesProcessed * this.step) % loopWidth);\n\
+ } \n\
+ if (this.playhead < (this.playEnd * this.samples.length) ) {\n\
+ this.signal[i] = this.samples[this.playhead] * this.amplitude;\n\
+ }\n\
+ break;\n\
+ }\n\
+ this.samplesProcessed++;\n\
+ }\n\
+\n\
+ this.frameCount++;\n\
+\n\
+ return this.signal;\n\
+};\n\
+\n\
+Sampler.prototype.setFreq = function(frequency) {\n\
+ this.frequency = frequency;\n\
+ this.step = this.frequency / this.rootFrequency;\n\
+};\n\
+\n\
+Sampler.prototype.reset = function() {\n\
+ this.samplesProcessed = 0;\n\
+ this.playhead = 0;\n\
+};\n\
+\n\
+/**\n\
+ * Oscillator class for generating and modifying signals\n\
+ *\n\
+ * @param {Number} type A waveform constant (eg. DSP.SINE)\n\
+ * @param {Number} frequency Initial frequency of the signal\n\
+ * @param {Number} amplitude Initial amplitude of the signal\n\
+ * @param {Number} bufferSize Size of the sample buffer to generate\n\
+ * @param {Number} sampleRate The sample rate of the signal\n\
+ *\n\
+ * @contructor\n\
+ */\n\
+Oscillator = function Oscillator(type, frequency, amplitude, bufferSize, sampleRate) {\n\
+ this.frequency = frequency;\n\
+ this.amplitude = amplitude;\n\
+ this.bufferSize = bufferSize;\n\
+ this.sampleRate = sampleRate;\n\
+ //this.pulseWidth = pulseWidth;\n\
+ this.frameCount = 0;\n\
+ \n\
+ this.waveTableLength = 2048;\n\
+\n\
+ this.cyclesPerSample = frequency / sampleRate;\n\
+\n\
+ this.signal = new Array(bufferSize);\n\
+ this.envelope = null;\n\
+\n\
+ switch(parseInt(type)) {\n\
+ case DSP.TRIANGLE:\n\
+ this.func = Oscillator.Triangle;\n\
+ break;\n\
+\n\
+ case DSP.SAW:\n\
+ this.func = Oscillator.Saw;\n\
+ break;\n\
+\n\
+ case DSP.SQUARE:\n\
+ this.func = Oscillator.Square;\n\
+ break;\n\
+\n\
+ case DSP.SINE:\n\
+ default:\n\
+ this.func = Oscillator.Sine;\n\
+ break;\n\
+ }\n\
+\n\
+ this.generateWaveTable = function() {\n\
+ Oscillator.waveTable[this.func] = new Array(2048);\n\
+ var waveTableTime = this.waveTableLength / this.sampleRate;\n\
+ var waveTableHz = 1 / waveTableTime;\n\
+\n\
+ for (var i = 0; i < this.waveTableLength; i++) {\n\
+ Oscillator.waveTable[this.func][i] = this.func(i * waveTableHz/this.sampleRate);\n\
+ }\n\
+ };\n\
+\n\
+ if ( typeof Oscillator.waveTable === 'undefined' ) {\n\
+ Oscillator.waveTable = {};\n\
+ }\n\
+\n\
+ if ( typeof Oscillator.waveTable[this.func] === 'undefined' ) { \n\
+ this.generateWaveTable();\n\
+ }\n\
+ \n\
+ this.waveTable = Oscillator.waveTable[this.func];\n\
+}; \n\
+\n\
+/**\n\
+ * Set the amplitude of the signal\n\
+ *\n\
+ * @param {Number} amplitude The amplitude of the signal (between 0 and 1)\n\
+ */\n\
+Oscillator.prototype.setAmp = function(amplitude) {\n\
+ if (amplitude >= 0 && amplitude <= 1) {\n\
+ this.amplitude = amplitude;\n\
+ } else {\n\
+ throw \"Amplitude out of range (0..1).\";\n\
+ }\n\
+};\n\
+ \n\
+/**\n\
+ * Set the frequency of the signal\n\
+ * \n\
+ * @param {Number} frequency The frequency of the signal\n\
+ */ \n\
+Oscillator.prototype.setFreq = function(frequency) {\n\
+ this.frequency = frequency;\n\
+ this.cyclesPerSample = frequency / this.sampleRate;\n\
+};\n\
+ \n\
+// Add an oscillator\n\
+Oscillator.prototype.add = function(oscillator) {\n\
+ for ( var i = 0; i < this.bufferSize; i++ ) {\n\
+ //this.signal[i] += oscillator.valueAt(i);\n\
+ this.signal[i] += oscillator.signal[i];\n\
+ }\n\
+ \n\
+ return this.signal;\n\
+};\n\
+ \n\
+// Add a signal to the current generated osc signal\n\
+Oscillator.prototype.addSignal = function(signal) {\n\
+ for ( var i = 0; i < signal.length; i++ ) {\n\
+ if ( i >= this.bufferSize ) {\n\
+ break;\n\
+ }\n\
+ this.signal[i] += signal[i];\n\
+ \n\
+ /*\n\
+ // Constrain amplitude\n\
+ if ( this.signal[i] > 1 ) {\n\
+ this.signal[i] = 1;\n\
+ } else if ( this.signal[i] < -1 ) {\n\
+ this.signal[i] = -1;\n\
+ }\n\
+ */\n\
+ }\n\
+ return this.signal;\n\
+};\n\
+ \n\
+// Add an envelope to the oscillator\n\
+Oscillator.prototype.addEnvelope = function(envelope) {\n\
+ this.envelope = envelope;\n\
+};\n\
+\n\
+Oscillator.prototype.applyEnvelope = function() {\n\
+ this.envelope.process(this.signal);\n\
+};\n\
+ \n\
+Oscillator.prototype.valueAt = function(offset) {\n\
+ return this.waveTable[offset % this.waveTableLength];\n\
+};\n\
+ \n\
+Oscillator.prototype.generate = function() {\n\
+ var frameOffset = this.frameCount * this.bufferSize;\n\
+ var step = this.waveTableLength * this.frequency / this.sampleRate;\n\
+ var offset;\n\
+\n\
+ for ( var i = 0; i < this.bufferSize; i++ ) {\n\
+ //var step = (frameOffset + i) * this.cyclesPerSample % 1;\n\
+ //this.signal[i] = this.func(step) * this.amplitude;\n\
+ //this.signal[i] = this.valueAt(Math.round((frameOffset + i) * step)) * this.amplitude; \n\
+ offset = Math.round((frameOffset + i) * step);\n\
+ this.signal[i] = this.waveTable[offset % this.waveTableLength] * this.amplitude;\n\
+ }\n\
+\n\
+ this.frameCount++;\n\
+\n\
+ return this.signal;\n\
+};\n\
+\n\
+Oscillator.Sine = function(step) {\n\
+ return Math.sin(DSP.TWO_PI * step);\n\
+};\n\
+\n\
+Oscillator.Square = function(step) {\n\
+ return step < 0.5 ? 1 : -1;\n\
+};\n\
+\n\
+Oscillator.Saw = function(step) {\n\
+ return 2 * (step - Math.round(step));\n\
+};\n\
+\n\
+Oscillator.Triangle = function(step) {\n\
+ return 1 - 4 * Math.abs(Math.round(step) - step);\n\
+};\n\
+\n\
+Oscillator.Pulse = function(step) {\n\
+ // stub\n\
+};\n\
+ \n\
+ADSR = function(attackLength, decayLength, sustainLevel, sustainLength, releaseLength, sampleRate) {\n\
+ this.sampleRate = sampleRate;\n\
+ // Length in seconds\n\
+ this.attackLength = attackLength;\n\
+ this.decayLength = decayLength;\n\
+ this.sustainLevel = sustainLevel;\n\
+ this.sustainLength = sustainLength;\n\
+ this.releaseLength = releaseLength;\n\
+ this.sampleRate = sampleRate;\n\
+ \n\
+ // Length in samples\n\
+ this.attackSamples = attackLength * sampleRate;\n\
+ this.decaySamples = decayLength * sampleRate;\n\
+ this.sustainSamples = sustainLength * sampleRate;\n\
+ this.releaseSamples = releaseLength * sampleRate;\n\
+ \n\
+ // Updates the envelope sample positions\n\
+ this.update = function() {\n\
+ this.attack = this.attackSamples;\n\
+ this.decay = this.attack + this.decaySamples;\n\
+ this.sustain = this.decay + this.sustainSamples;\n\
+ this.release = this.sustain + this.releaseSamples;\n\
+ };\n\
+ \n\
+ this.update();\n\
+ \n\
+ this.samplesProcessed = 0;\n\
+};\n\
+\n\
+\n\
+ADSR.prototype.noteOn = function() {\n\
+ this.samplesProcessed = 0;\n\
+ this.sustainSamples = this.sustainLength * this.sampleRate;\n\
+ this.update();\n\
+};\n\
+\n\
+// Send a note off when using a sustain of infinity to let the envelope enter the release phase\n\
+ADSR.prototype.noteOff = function() {\n\
+ this.sustainSamples = this.samplesProcessed - this.decaySamples;\n\
+ this.update();\n\
+};\n\
+\n\
+ADSR.prototype.processSample = function(sample) {\n\
+ var amplitude = 0;\n\
+\n\
+ if ( this.samplesProcessed <= this.attack ) {\n\
+ amplitude = 0 + (1 - 0) * ((this.samplesProcessed - 0) / (this.attack - 0));\n\
+ } else if ( this.samplesProcessed > this.attack && this.samplesProcessed <= this.decay ) {\n\
+ amplitude = 1 + (this.sustainLevel - 1) * ((this.samplesProcessed - this.attack) / (this.decay - this.attack));\n\
+ } else if ( this.samplesProcessed > this.decay && this.samplesProcessed <= this.sustain ) {\n\
+ amplitude = this.sustainLevel;\n\
+ } else if ( this.samplesProcessed > this.sustain && this.samplesProcessed <= this.release ) {\n\
+ amplitude = this.sustainLevel + (0 - this.sustainLevel) * ((this.samplesProcessed - this.sustain) / (this.release - this.sustain));\n\
+ }\n\
+ \n\
+ return sample * amplitude;\n\
+};\n\
+\n\
+ADSR.prototype.value = function() {\n\
+ var amplitude = 0;\n\
+\n\
+ if ( this.samplesProcessed <= this.attack ) {\n\
+ amplitude = 0 + (1 - 0) * ((this.samplesProcessed - 0) / (this.attack - 0));\n\
+ } else if ( this.samplesProcessed > this.attack && this.samplesProcessed <= this.decay ) {\n\
+ amplitude = 1 + (this.sustainLevel - 1) * ((this.samplesProcessed - this.attack) / (this.decay - this.attack));\n\
+ } else if ( this.samplesProcessed > this.decay && this.samplesProcessed <= this.sustain ) {\n\
+ amplitude = this.sustainLevel;\n\
+ } else if ( this.samplesProcessed > this.sustain && this.samplesProcessed <= this.release ) {\n\
+ amplitude = this.sustainLevel + (0 - this.sustainLevel) * ((this.samplesProcessed - this.sustain) / (this.release - this.sustain));\n\
+ }\n\
+ \n\
+ return amplitude;\n\
+};\n\
+ \n\
+ADSR.prototype.process = function(buffer) {\n\
+ for ( var i = 0; i < buffer.length; i++ ) {\n\
+ buffer[i] *= this.value();\n\
+\n\
+ this.samplesProcessed++;\n\
+ }\n\
+ \n\
+ return buffer;\n\
+};\n\
+ \n\
+ \n\
+ADSR.prototype.isActive = function() {\n\
+ if ( this.samplesProcessed > this.release || this.samplesProcessed === -1 ) {\n\
+ return false;\n\
+ } else {\n\
+ return true;\n\
+ }\n\
+};\n\
+\n\
+ADSR.prototype.disable = function() {\n\
+ this.samplesProcessed = -1;\n\
+};\n\
+ \n\
+IIRFilter = function(type, cutoff, resonance, sampleRate) {\n\
+ this.sampleRate = sampleRate;\n\
+ this.cutoff = cutoff;\n\
+ this.resonance = resonance;\n\
+\n\
+ switch(type) {\n\
+ case DSP.LOWPASS:\n\
+ case DSP.LP12:\n\
+ this.func = new IIRFilter.LP12(cutoff, resonance, sampleRate);\n\
+ break;\n\
+ }\n\
+}\n\
+\n\
+IIRFilter.prototype.set = function(cutoff, resonance) {\n\
+ this.func.calcCoeff(cutoff, resonance);\n\
+}\n\
+\n\
+IIRFilter.prototype.process = function(buffer) {\n\
+ this.func.process(buffer);\n\
+}\n\
+\n\
+// Add an envelope to the filter\n\
+IIRFilter.prototype.addEnvelope = function(envelope) {\n\
+ if ( envelope instanceof ADSR ) {\n\
+ this.func.addEnvelope(envelope);\n\
+ } else {\n\
+ throw \"Not an envelope.\";\n\
+ }\n\
+};\n\
+\n\
+IIRFilter.LP12 = function(cutoff, resonance, sampleRate) {\n\
+ this.sampleRate = sampleRate;\n\
+ this.vibraPos = 0; \n\
+ this.vibraSpeed = 0;\n\
+ this.envelope = false;\n\
+ \n\
+ this.calcCoeff = function(cutoff, resonance) {\n\
+ this.w = 2.0 * Math.PI * cutoff / this.sampleRate;\n\
+ this.q = 1.0 - this.w / (2.0 * (resonance + 0.5 / (1.0 + this.w)) + this.w - 2.0);\n\
+ this.r = this.q * this.q;\n\
+ this.c = this.r + 1.0 - 2.0 * Math.cos(this.w) * this.q;\n\
+ \n\
+ this.cutoff = cutoff;\n\
+ this.resonance = resonance;\n\
+ };\n\
+\n\
+ this.calcCoeff(cutoff, resonance);\n\
+\n\
+ this.process = function(buffer) {\n\
+ for ( var i = 0; i < buffer.length; i++ ) {\n\
+ this.vibraSpeed += (buffer[i] - this.vibraPos) * this.c;\n\
+ this.vibraPos += this.vibraSpeed;\n\
+ this.vibraSpeed *= this.r;\n\
+ \n\
+ /* \n\
+ var temp = this.vibraPos;\n\
+ \n\
+ if ( temp > 1.0 ) {\n\
+ temp = 1.0;\n\
+ } else if ( temp < -1.0 ) {\n\
+ temp = -1.0;\n\
+ } else if ( temp != temp ) {\n\
+ temp = 1;\n\
+ }\n\
+ \n\
+ buffer[i] = temp;\n\
+ */ \n\
+\n\
+ if (this.envelope) {\n\
+ buffer[i] = (buffer[i] * (1 - this.envelope.value())) + (this.vibraPos * this.envelope.value());\n\
+ this.envelope.samplesProcessed++;\n\
+ } else {\n\
+ buffer[i] = this.vibraPos;\n\
+ }\n\
+ }\n\
+ }\n\
+}; \n\
+\n\
+IIRFilter.LP12.prototype.addEnvelope = function(envelope) {\n\
+ this.envelope = envelope;\n\
+};\n\
+\n\
+\n\
+\n\
+IIRFilter2 = function(type, cutoff, resonance, sampleRate) {\n\
+ this.type = type; \n\
+ this.cutoff = cutoff;\n\
+ this.resonance = resonance;\n\
+ this.sampleRate = sampleRate;\n\
+\n\
+ this.f = Array(4);\n\
+ this.f[0] = 0.0; // lp\n\
+ this.f[1] = 0.0; // hp\n\
+ this.f[2] = 0.0; // bp\n\
+ this.f[3] = 0.0; // br \n\
+ \n\
+ this.calcCoeff = function(cutoff, resonance) {\n\
+ this.freq = 2 * Math.sin(Math.PI * Math.min(0.25, cutoff/(this.sampleRate*2))); \n\
+ this.damp = Math.min(2 * (1 - Math.pow(resonance, 0.25)), Math.min(2, 2/this.freq - this.freq * 0.5));\n\
+ };\n\
+\n\
+ this.calcCoeff(cutoff, resonance);\n\
+};\n\
+\n\
+IIRFilter2.prototype.process = function(buffer) {\n\
+ var input, output;\n\
+ var f = this.f;\n\
+\n\
+ for ( var i = 0; i < buffer.length; i++ ) {\n\
+ input = buffer[i]; \n\
+\n\
+ // first pass\n\
+ f[3] = input - this.damp * f[2];\n\
+ f[0] = f[0] + this.freq * f[2];\n\
+ f[1] = f[3] - f[0];\n\
+ f[2] = this.freq * f[1] + f[2];\n\
+ output = 0.5 * f[this.type];\n\
+\n\
+ // second pass\n\
+ f[3] = input - this.damp * f[2];\n\
+ f[0] = f[0] + this.freq * f[2];\n\
+ f[1] = f[3] - f[0];\n\
+ f[2] = this.freq * f[1] + f[2];\n\
+ output += 0.5 * f[this.type];\n\
+\n\
+ if (this.envelope) {\n\
+ buffer[i] = (buffer[i] * (1 - this.envelope.value())) + (output * this.envelope.value());\n\
+ this.envelope.samplesProcessed++;\n\
+ } else {\n\
+ buffer[i] = output;\n\
+ }\n\
+ }\n\
+};\n\
+\n\
+IIRFilter2.prototype.addEnvelope = function(envelope) {\n\
+ if ( envelope instanceof ADSR ) {\n\
+ this.envelope = envelope;\n\
+ } else {\n\
+ throw \"This is not an envelope.\";\n\
+ }\n\
+};\n\
+\n\
+IIRFilter2.prototype.set = function(cutoff, resonance) {\n\
+ this.calcCoeff(cutoff, resonance); \n\
+};\n\
+\n\
+\n\
+\n\
+WindowFunction = function(type, alpha) {\n\
+ this.alpha = alpha;\n\
+ \n\
+ switch(type) {\n\
+ case DSP.BARTLETT:\n\
+ this.func = WindowFunction.Bartlett;\n\
+ break;\n\
+ \n\
+ case DSP.BARTLETTHANN:\n\
+ this.func = WindowFunction.BartlettHann;\n\
+ break;\n\
+ \n\
+ case DSP.BLACKMAN:\n\
+ this.func = WindowFunction.Blackman;\n\
+ this.alpha = this.alpha || 0.16;\n\
+ break;\n\
+ \n\
+ case DSP.COSINE:\n\
+ this.func = WindowFunction.Cosine;\n\
+ break;\n\
+ \n\
+ case DSP.GAUSS:\n\
+ this.func = WindowFunction.Gauss;\n\
+ this.alpha = this.alpha || 0.25;\n\
+ break;\n\
+ \n\
+ case DSP.HAMMING:\n\
+ this.func = WindowFunction.Hamming;\n\
+ break;\n\
+ \n\
+ case DSP.HANN:\n\
+ this.func = WindowFunction.Hann;\n\
+ break;\n\
+ \n\
+ case DSP.LANCZOS:\n\
+ this.func = WindowFunction.Lanczoz;\n\
+ break;\n\
+ \n\
+ case DSP.RECTANGULAR:\n\
+ this.func = WindowFunction.Rectangular;\n\
+ break;\n\
+ \n\
+ case DSP.TRIANGULAR:\n\
+ this.func = WindowFunction.Triangular;\n\
+ break;\n\
+ }\n\
+};\n\
+\n\
+WindowFunction.prototype.process = function(buffer) {\n\
+ var length = buffer.length;\n\
+ for ( var i = 0; i < length; i++ ) {\n\
+ buffer[i] *= this.func(length, i, this.alpha);\n\
+ }\n\
+ return buffer;\n\
+};\n\
+\n\
+WindowFunction.Bartlett = function(length, index) {\n\
+ return 2 / (length - 1) * ((length - 1) / 2 - Math.abs(index - (length - 1) / 2));\n\
+};\n\
+\n\
+WindowFunction.BartlettHann = function(length, index) {\n\
+ return 0.62 - 0.48 * Math.abs(index / (length - 1) - 0.5) - 0.38 * Math.cos(DSP.TWO_PI * index / (length - 1));\n\
+};\n\
+\n\
+WindowFunction.Blackman = function(length, index, alpha) {\n\
+ var a0 = (1 - alpha) / 2;\n\
+ var a1 = 0.5;\n\
+ var a2 = alpha / 2;\n\
+\n\
+ return a0 - a1 * Math.cos(DSP.TWO_PI * index / (length - 1)) + a2 * Math.cos(4 * Math.PI * index / (length - 1));\n\
+};\n\
+\n\
+WindowFunction.Cosine = function(length, index) {\n\
+ return Math.cos(Math.PI * index / (length - 1) - Math.PI / 2);\n\
+};\n\
+\n\
+WindowFunction.Gauss = function(length, index, alpha) {\n\
+ return Math.pow(Math.E, -0.5 * Math.pow((index - (length - 1) / 2) / (alpha * (length - 1) / 2), 2));\n\
+};\n\
+\n\
+WindowFunction.Hamming = function(length, index) {\n\
+ return 0.54 - 0.46 * Math.cos(DSP.TWO_PI * index / (length - 1));\n\
+};\n\
+\n\
+WindowFunction.Hann = function(length, index) {\n\
+ return 0.5 * (1 - Math.cos(DSP.TWO_PI * index / (length - 1)));\n\
+};\n\
+\n\
+WindowFunction.Lanczos = function(length, index) {\n\
+ var x = 2 * index / (length - 1) - 1;\n\
+ return Math.sin(Math.PI * x) / (Math.PI * x);\n\
+};\n\
+\n\
+WindowFunction.Rectangular = function(length, index) {\n\
+ return 1;\n\
+};\n\
+\n\
+WindowFunction.Triangular = function(length, index) {\n\
+ return 2 / length * (length / 2 - Math.abs(index - (length - 1) / 2));\n\
+};\n\
+\n\
+function sinh (arg) {\n\
+ // Returns the hyperbolic sine of the number, defined as (exp(number) - exp(-number))/2 \n\
+ // \n\
+ // version: 1004.2314\n\
+ // discuss at: http://phpjs.org/functions/sinh // + original by: Onno Marsman\n\
+ // * example 1: sinh(-0.9834330348825909);\n\
+ // * returns 1: -1.1497971402636502\n\
+ return (Math.exp(arg) - Math.exp(-arg))/2;\n\
+}\n\
+\n\
+\n\
+/* \n\
+ * Biquad filter\n\
+ * \n\
+ * Created by Ricard Marxer <email@ricardmarxer.com> on 2010-05-23.\n\
+ * Copyright 2010 Ricard Marxer. All rights reserved.\n\
+ *\n\
+ */\n\
+// Implementation based on:\n\
+// http://www.musicdsp.org/files/Audio-EQ-Cookbook.txt\n\
+Biquad = function(type, sampleRate) {\n\
+ this.Fs = sampleRate;\n\
+ this.type = type; // type of the filter\n\
+ this.parameterType = DSP.Q; // type of the parameter\n\
+\n\
+ this.x_1_l = 0;\n\
+ this.x_2_l = 0;\n\
+ this.y_1_l = 0;\n\
+ this.y_2_l = 0;\n\
+\n\
+ this.x_1_r = 0;\n\
+ this.x_2_r = 0;\n\
+ this.y_1_r = 0;\n\
+ this.y_2_r = 0;\n\
+\n\
+ this.b0 = 1;\n\
+ this.a0 = 1;\n\
+\n\
+ this.b1 = 0;\n\
+ this.a1 = 0;\n\
+\n\
+ this.b2 = 0;\n\
+ this.a2 = 0;\n\
+\n\
+ this.b0a0 = this.b0 / this.a0;\n\
+ this.b1a0 = this.b1 / this.a0;\n\
+ this.b2a0 = this.b2 / this.a0;\n\
+ this.a1a0 = this.a1 / this.a0;\n\
+ this.a2a0 = this.a2 / this.a0;\n\
+\n\
+ this.f0 = 3000; // \"wherever it's happenin', man.\" Center Frequency or\n\
+ // Corner Frequency, or shelf midpoint frequency, depending\n\
+ // on which filter type. The \"significant frequency\".\n\
+\n\
+ this.dBgain = 12; // used only for peaking and shelving filters\n\
+\n\
+ this.Q = 1; // the EE kind of definition, except for peakingEQ in which A*Q is\n\
+ // the classic EE Q. That adjustment in definition was made so that\n\
+ // a boost of N dB followed by a cut of N dB for identical Q and\n\
+ // f0/Fs results in a precisely flat unity gain filter or \"wire\".\n\
+\n\
+ this.BW = -3; // the bandwidth in octaves (between -3 dB frequencies for BPF\n\
+ // and notch or between midpoint (dBgain/2) gain frequencies for\n\
+ // peaking EQ\n\
+\n\
+ this.S = 1; // a \"shelf slope\" parameter (for shelving EQ only). When S = 1,\n\
+ // the shelf slope is as steep as it can be and remain monotonically\n\
+ // increasing or decreasing gain with frequency. The shelf slope, in\n\
+ // dB/octave, remains proportional to S for all other values for a\n\
+ // fixed f0/Fs and dBgain.\n\
+\n\
+ this.coefficients = function() {\n\
+ var b = [this.b0, this.b1, this.b2];\n\
+ var a = [this.a0, this.a1, this.a2];\n\
+ return {b: b, a:a};\n\
+ }\n\
+\n\
+ this.setFilterType = function(type) {\n\
+ this.type = type;\n\
+ this.recalculateCoefficients();\n\
+ }\n\
+\n\
+ this.setSampleRate = function(rate) {\n\
+ this.Fs = rate;\n\
+ this.recalculateCoefficients();\n\
+ }\n\
+\n\
+ this.setQ = function(q) {\n\
+ this.parameterType = DSP.Q;\n\
+ this.Q = Math.max(Math.min(q, 115.0), 0.001);\n\
+ this.recalculateCoefficients();\n\
+ }\n\
+\n\
+ this.setBW = function(bw) {\n\
+ this.parameterType = DSP.BW;\n\
+ this.BW = bw;\n\
+ this.recalculateCoefficients();\n\
+ } \n\
+\n\
+ this.setS = function(s) {\n\
+ this.parameterType = DSP.S;\n\
+ this.S = Math.max(Math.min(s, 5.0), 0.0001);\n\
+ this.recalculateCoefficients();\n\
+ } \n\
+\n\
+ this.setF0 = function(freq) {\n\
+ this.f0 = freq;\n\
+ this.recalculateCoefficients();\n\
+ } \n\
+ \n\
+ this.setDbGain = function(g) {\n\
+ this.dBgain = g;\n\
+ this.recalculateCoefficients();\n\
+ }\n\
+\n\
+ this.recalculateCoefficients = function() {\n\
+ var A;\n\
+ if (type == DSP.PEAKING_EQ || type == DSP.LOW_SHELF || type == DSP.HIGH_SHELF ) {\n\
+ A = Math.pow(10, (this.dBgain/40)); // for peaking and shelving EQ filters only\n\
+ } else {\n\
+ A = Math.sqrt( Math.pow(10, (this.dBgain/20)) ); \n\
+ }\n\
+\n\
+ var w0 = DSP.TWO_PI * this.f0 / this.Fs;\n\
+\n\
+ var cosw0 = Math.cos(w0);\n\
+ var sinw0 = Math.sin(w0);\n\
+\n\
+ var alpha = 0;\n\
+ \n\
+ switch (this.parameterType) {\n\
+ case DSP.Q:\n\
+ alpha = sinw0/(2*this.Q);\n\
+ break;\n\
+ \n\
+ case DSP.BW:\n\
+ alpha = sinw0 * sinh( Math.LN2/2 * this.BW * w0/sinw0 );\n\
+ break;\n\
+\n\
+ case DSP.S:\n\
+ alpha = sinw0/2 * Math.sqrt( (A + 1/A)*(1/this.S - 1) + 2 );\n\
+ break;\n\
+ }\n\
+\n\
+ /**\n\
+ FYI: The relationship between bandwidth and Q is\n\
+ 1/Q = 2*sinh(ln(2)/2*BW*w0/sin(w0)) (digital filter w BLT)\n\
+ or 1/Q = 2*sinh(ln(2)/2*BW) (analog filter prototype)\n\
+\n\
+ The relationship between shelf slope and Q is\n\
+ 1/Q = sqrt((A + 1/A)*(1/S - 1) + 2)\n\
+ */\n\
+\n\
+ switch (this.type) {\n\
+ case DSP.LPF: // H(s) = 1 / (s^2 + s/Q + 1)\n\
+ this.b0 = (1 - cosw0)/2;\n\
+ this.b1 = 1 - cosw0;\n\
+ this.b2 = (1 - cosw0)/2;\n\
+ this.a0 = 1 + alpha;\n\
+ this.a1 = -2 * cosw0;\n\
+ this.a2 = 1 - alpha;\n\
+ break;\n\
+\n\
+ case DSP.HPF: // H(s) = s^2 / (s^2 + s/Q + 1)\n\
+ this.b0 = (1 + cosw0)/2;\n\
+ this.b1 = -(1 + cosw0);\n\
+ this.b2 = (1 + cosw0)/2;\n\
+ this.a0 = 1 + alpha;\n\
+ this.a1 = -2 * cosw0;\n\
+ this.a2 = 1 - alpha;\n\
+ break;\n\
+\n\
+ case DSP.BPF_CONSTANT_SKIRT: // H(s) = s / (s^2 + s/Q + 1) (constant skirt gain, peak gain = Q)\n\
+ this.b0 = sinw0/2;\n\
+ this.b1 = 0;\n\
+ this.b2 = -sinw0/2;\n\
+ this.a0 = 1 + alpha;\n\
+ this.a1 = -2*cosw0;\n\
+ this.a2 = 1 - alpha;\n\
+ break;\n\
+\n\
+ case DSP.BPF_CONSTANT_PEAK: // H(s) = (s/Q) / (s^2 + s/Q + 1) (constant 0 dB peak gain)\n\
+ this.b0 = alpha;\n\
+ this.b1 = 0;\n\
+ this.b2 = -alpha;\n\
+ this.a0 = 1 + alpha;\n\
+ this.a1 = -2*cosw0;\n\
+ this.a2 = 1 - alpha;\n\
+ break;\n\
+\n\
+ case DSP.NOTCH: // H(s) = (s^2 + 1) / (s^2 + s/Q + 1)\n\
+ this.b0 = 1;\n\
+ this.b1 = -2*cosw0;\n\
+ this.b2 = 1;\n\
+ this.a0 = 1 + alpha;\n\
+ this.a1 = -2*cosw0;\n\
+ this.a2 = 1 - alpha;\n\
+ break;\n\
+\n\
+ case DSP.APF: // H(s) = (s^2 - s/Q + 1) / (s^2 + s/Q + 1)\n\
+ this.b0 = 1 - alpha;\n\
+ this.b1 = -2*cosw0;\n\
+ this.b2 = 1 + alpha;\n\
+ this.a0 = 1 + alpha;\n\
+ this.a1 = -2*cosw0;\n\
+ this.a2 = 1 - alpha;\n\
+ break;\n\
+\n\
+ case DSP.PEAKING_EQ: // H(s) = (s^2 + s*(A/Q) + 1) / (s^2 + s/(A*Q) + 1)\n\
+ this.b0 = 1 + alpha*A;\n\
+ this.b1 = -2*cosw0;\n\
+ this.b2 = 1 - alpha*A;\n\
+ this.a0 = 1 + alpha/A;\n\
+ this.a1 = -2*cosw0;\n\
+ this.a2 = 1 - alpha/A;\n\
+ break;\n\
+\n\
+ case DSP.LOW_SHELF: // H(s) = A * (s^2 + (sqrt(A)/Q)*s + A)/(A*s^2 + (sqrt(A)/Q)*s + 1)\n\
+ var coeff = sinw0 * Math.sqrt( (A^2 + 1)*(1/this.S - 1) + 2*A );\n\
+ this.b0 = A*( (A+1) - (A-1)*cosw0 + coeff );\n\
+ this.b1 = 2*A*( (A-1) - (A+1)*cosw0 );\n\
+ this.b2 = A*( (A+1) - (A-1)*cosw0 - coeff );\n\
+ this.a0 = (A+1) + (A-1)*cosw0 + coeff;\n\
+ this.a1 = -2*( (A-1) + (A+1)*cosw0 );\n\
+ this.a2 = (A+1) + (A-1)*cosw0 - coeff;\n\
+ break;\n\
+\n\
+ case DSP.HIGH_SHELF: // H(s) = A * (A*s^2 + (sqrt(A)/Q)*s + 1)/(s^2 + (sqrt(A)/Q)*s + A)\n\
+ var coeff = sinw0 * Math.sqrt( (A^2 + 1)*(1/this.S - 1) + 2*A );\n\
+ this.b0 = A*( (A+1) + (A-1)*cosw0 + coeff );\n\
+ this.b1 = -2*A*( (A-1) + (A+1)*cosw0 );\n\
+ this.b2 = A*( (A+1) + (A-1)*cosw0 - coeff );\n\
+ this.a0 = (A+1) - (A-1)*cosw0 + coeff;\n\
+ this.a1 = 2*( (A-1) - (A+1)*cosw0 );\n\
+ this.a2 = (A+1) - (A-1)*cosw0 - coeff;\n\
+ break;\n\
+ }\n\
+ \n\
+ this.b0a0 = this.b0/this.a0;\n\
+ this.b1a0 = this.b1/this.a0;\n\
+ this.b2a0 = this.b2/this.a0;\n\
+ this.a1a0 = this.a1/this.a0;\n\
+ this.a2a0 = this.a2/this.a0;\n\
+ }\n\
+\n\
+ this.process = function(buffer) {\n\
+ //y[n] = (b0/a0)*x[n] + (b1/a0)*x[n-1] + (b2/a0)*x[n-2]\n\
+ // - (a1/a0)*y[n-1] - (a2/a0)*y[n-2]\n\
+\n\
+ var len = buffer.length;\n\
+ var output = new Array(len);\n\
+\n\
+ for ( var i=0; i<buffer.length; i++ ) {\n\
+ output[i] = this.b0a0*buffer[i] + this.b1a0*this.x_1_l + this.b2a0*this.x_2_l - this.a1a0*this.y_1_l - this.a2a0*this.y_2_l;\n\
+ this.y_2_l = this.y_1_l;\n\
+ this.y_1_l = output[i];\n\
+ this.x_2_l = this.x_1_l;\n\
+ this.x_1_l = buffer[i];\n\
+ }\n\
+\n\
+ return output;\n\
+ }\n\
+\n\
+ this.processStereo = function(buffer) {\n\
+ //y[n] = (b0/a0)*x[n] + (b1/a0)*x[n-1] + (b2/a0)*x[n-2]\n\
+ // - (a1/a0)*y[n-1] - (a2/a0)*y[n-2]\n\
+\n\
+ var len = buffer.length;\n\
+ var output = new Array(len);\n\
+ \n\
+ for ( var i=0; i<len/2; i++ ) {\n\
+ output[2*i] = this.b0a0*buffer[2*i] + this.b1a0*this.x_1_l + this.b2a0*this.x_2_l - this.a1a0*this.y_1_l - this.a2a0*this.y_2_l;\n\
+ this.y_2_l = this.y_1_l;\n\
+ this.y_1_l = output[2*i];\n\
+ this.x_2_l = this.x_1_l;\n\
+ this.x_1_l = buffer[2*i];\n\
+\n\
+ output[2*i+1] = this.b0a0*buffer[2*i+1] + this.b1a0*this.x_1_r + this.b2a0*this.x_2_r - this.a1a0*this.y_1_r - this.a2a0*this.y_2_r;\n\
+ this.y_2_r = this.y_1_r;\n\
+ this.y_1_r = output[2*i+1];\n\
+ this.x_2_r = this.x_1_r;\n\
+ this.x_1_r = buffer[2*i+1];\n\
+ }\n\
+\n\
+ return output;\n\
+ }\n\
+};\n\
+\n\
+\n\
+/* \n\
+ * Magnitude to decibels\n\
+ * \n\
+ * Created by Ricard Marxer <email@ricardmarxer.com> on 2010-05-23.\n\
+ * Copyright 2010 Ricard Marxer. All rights reserved.\n\
+ *\n\
+ * @buffer array of magnitudes to convert to decibels\n\
+ * \n\
+ * @returns the array in decibels\n\
+ *\n\
+ */\n\
+DSP.mag2db = function(buffer) {\n\
+ var minDb = -120;\n\
+ var minMag = Math.pow(10.0, minDb / 20.0);\n\
+\n\
+ var log = Math.log;\n\
+ var max = Math.max;\n\
+ \n\
+ var result = Array(buffer.length);\n\
+ for (var i=0; i<buffer.length; i++) {\n\
+ result[i] = 20.0*log(max(buffer[i], minMag));\n\
+ }\n\
+\n\
+ return result;\n\
+};\n\
+\n\
+/* \n\
+ * Frequency response\n\
+ * \n\
+ * Created by Ricard Marxer <email@ricardmarxer.com> on 2010-05-23.\n\
+ * Copyright 2010 Ricard Marxer. All rights reserved.\n\
+ *\n\
+ * Calculates the frequency response at the given points.\n\
+ *\n\
+ * @b b coefficients of the filter\n\
+ * @a a coefficients of the filter\n\
+ * @w w points (normally between -PI and PI) where to calculate the frequency response\n\
+ * \n\
+ * @returns the frequency response in magnitude\n\
+ *\n\
+ */\n\
+DSP.freqz = function(b, a, w) {\n\
+ if (!w) {\n\
+ w = Array(200);\n\
+ for (var i=0;i<w.length; i++) {\n\
+ w[i] = DSP.TWO_PI/w.length * i - Math.PI;\n\
+ }\n\
+ }\n\
+\n\
+ var result = Array(w.length);\n\
+ \n\
+ var sqrt = Math.sqrt;\n\
+ var cos = Math.cos;\n\
+ var sin = Math.sin;\n\
+ \n\
+ for (var i=0; i<w.length; i++) {\n\
+ var numerator = {real:0.0, imag:0.0};\n\
+ for (var j=0; j<b.length; j++) {\n\
+ numerator.real += b[j] * cos(-j*w[i]);\n\
+ numerator.imag += b[j] * sin(-j*w[i]);\n\
+ }\n\
+\n\
+ var denominator = {real:0.0, imag:0.0};\n\
+ for (var j=0; j<a.length; j++) {\n\
+ denominator.real += a[j] * cos(-j*w[i]);\n\
+ denominator.imag += a[j] * sin(-j*w[i]);\n\
+ }\n\
+ \n\
+ result[i] = sqrt(numerator.real*numerator.real + numerator.imag*numerator.imag) / sqrt(denominator.real*denominator.real + denominator.imag*denominator.imag);\n\
+ }\n\
+\n\
+ return result;\n\
+};\n\
+\n\
+/* \n\
+ * Graphical Equalizer\n\
+ * \n\
+ * Created by Ricard Marxer <email@ricardmarxer.com> on 2010-05-23.\n\
+ * Copyright 2010 Ricard Marxer. All rights reserved.\n\
+ *\n\
+ */\n\
+// Implementation of a graphic equalizer with a configurable bands-per-octave\n\
+// and minimum and maximum frequencies\n\
+GraphicalEq = function(sampleRate) {\n\
+ this.FS = sampleRate;\n\
+ this.minFreq = 40.0;\n\
+ this.maxFreq = 16000.0;\n\
+\n\
+ this.bandsPerOctave = 1.0;\n\
+\n\
+ this.filters = []\n\
+ this.freqzs = []\n\
+\n\
+ this.calculateFreqzs = true;\n\
+\n\
+ this.recalculateFilters = function() {\n\
+ var bandCount = Math.round(Math.log(this.maxFreq/this.minFreq) * this.bandsPerOctave/ Math.LN2);\n\
+\n\
+ this.filters = [];\n\
+ for (var i=0; i<bandCount; i++) {\n\
+ var freq = this.minFreq*(Math.pow(2, i/this.bandsPerOctave));\n\
+ var newFilter = new Biquad(DSP.PEAKING_EQ, this.FS);\n\
+ newFilter.setDbGain(0);\n\
+ newFilter.setBW(1/this.bandsPerOctave);\n\
+ newFilter.setF0(freq);\n\
+ this.filters[i] = newFilter;\n\
+ this.recalculateFreqz(i);\n\
+ }\n\
+ }\n\
+\n\
+ this.setMinimumFrequency = function(freq) {\n\
+ this.minFreq = freq;\n\
+ this.recalculateFilters();\n\
+ }\n\
+\n\
+ this.setMaximumFrequency = function(freq) {\n\
+ this.maxFreq = freq;\n\
+ this.recalculateFilters();\n\
+ }\n\
+\n\
+ this.setBandsPerOctave = function(bands) {\n\
+ this.bandsPerOctave = bands;\n\
+ this.recalculateFilters();\n\
+ }\n\
+\n\
+ this.setBandGain = function(bandIndex, gain) {\n\
+ if (bandIndex < 0 || bandIndex > (this.filters.length-1)) {\n\
+ throw \"The band index of the graphical equalizer is out of bounds.\";\n\
+ return;\n\
+ }\n\
+\n\
+ if (!gain) {\n\
+ throw \"A gain must be passed.\"\n\
+ return;\n\
+ }\n\
+ \n\
+ \n\
+ this.filters[bandIndex].setDbGain(gain);\n\
+ this.recalculateFreqz(bandIndex);\n\
+ }\n\
+ \n\
+ this.recalculateFreqz = function(bandIndex) {\n\
+ if (!this.calculateFreqzs) {\n\
+ return;\n\
+ }\n\
+\n\
+ \n\
+ if (bandIndex < 0 || bandIndex > (this.filters.length-1)) {\n\
+ throw \"The band index of the graphical equalizer is out of bounds. \" + bandIndex + \" is out of [\" + 0 + \", \" + this.filters.length-1 + \"]\"\n\
+ return;\n\
+ }\n\
+ \n\
+ if (!this.w) {\n\
+ this.w = Array(400);\n\
+ for (var i=0; i<this.w.length; i++) {\n\
+ this.w[i] = Math.PI/this.w.length * i;\n\
+ }\n\
+ }\n\
+ \n\
+ var b = [this.filters[bandIndex].b0, this.filters[bandIndex].b1, this.filters[bandIndex].b2];\n\
+ var a = [this.filters[bandIndex].a0, this.filters[bandIndex].a1, this.filters[bandIndex].a2];\n\
+\n\
+ this.freqzs[bandIndex] = DSP.mag2db(DSP.freqz(b, a, this.w));\n\
+ }\n\
+\n\
+ this.process = function(buffer) {\n\
+ var output = buffer;\n\
+ \n\
+ for ( var i=0; i<this.filters.length; i++ ) {\n\
+ output = this.filters[i].process(output);\n\
+ }\n\
+\n\
+ return output;\n\
+ }\n\
+\n\
+ this.processStereo = function(buffer) {\n\
+ var output = buffer;\n\
+ \n\
+ for ( var i=0; i<this.filters.length; i++ ) {\n\
+ output = this.filters[i].processStereo(output);\n\
+ }\n\
+\n\
+ return output;\n\
+ }\n\
+\n\
+}\n\
+\n\
+\n\
+\n\
+/**\n\
+ * MultiDelay effect by Almer Thie (http://code.almeros.com).\n\
+ * Copyright 2010 Almer Thie. All rights reserved.\n\
+ * Example: http://code.almeros.com/code-examples/delay-firefox-audio-api/\n\
+ * \n\
+ * This is a delay that feeds it's own delayed signal back into its circular \n\
+ * buffer. Also known as a CombFilter.\n\
+ *\n\
+ * Compatible with interleaved stereo (or more channel) buffers and \n\
+ * non-interleaved mono buffers.\n\
+ * \n\
+ * @param {Number} maxDelayInSamplesSize Maximum possible delay in samples (size of circular buffer)\n\
+ * @param {Number} delayInSamples Initial delay in samples\n\
+ * @param {Number} masterVolume Initial master volume. Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ * @param {Number} delayVolume Initial feedback delay volume. Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ * \n\
+ * @constructor\n\
+ */\n\
+MultiDelay = function(maxDelayInSamplesSize, delayInSamples, masterVolume, delayVolume){\n\
+ this.delayBufferSamples = new Array(maxDelayInSamplesSize); // The maximum size of delay\n\
+ this.delayInputPointer = delayInSamples; \n\
+ this.delayOutputPointer = 0;\n\
+ \n\
+ this.delayInSamples = delayInSamples;\n\
+ this.masterVolume = masterVolume;\n\
+ this.delayVolume = delayVolume;\n\
+}\n\
+\n\
+/**\n\
+ * Change the delay time in samples.\n\
+ *\n\
+ * @param {Number} delayInSamples Delay in samples\n\
+ */\n\
+MultiDelay.prototype.setDelayInSamples = function (delayInSamples){\n\
+ this.delayInSamples = delayInSamples;\n\
+ \n\
+ this.delayInputPointer = this.delayOutputPointer + delayInSamples;\n\
+ if(this.delayInputPointer >= this.delayBufferSamples.length-1)\n\
+ this.delayInputPointer = this.delayInputPointer - this.delayBufferSamples.length; \n\
+}\n\
+\n\
+/**\n\
+ * Change the master volume.\n\
+ *\n\
+ * @param {Number} masterVolume Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ */\n\
+MultiDelay.prototype.setMasterVolume = function (masterVolume){\n\
+ this.masterVolume = masterVolume;\n\
+}\n\
+\n\
+/**\n\
+ * Change the delay feedback volume.\n\
+ *\n\
+ * @param {Number} delayVolume Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ */\n\
+MultiDelay.prototype.setDelayVolume = function (delayVolume){\n\
+ this.delayVolume = delayVolume;\n\
+}\n\
+\n\
+/**\n\
+ * Process a given interleaved or mono non-interleaved float value Array and adds the delayed audio.\n\
+ *\n\
+ * @param {Array} samples Array containing Float values or a Float32Array\n\
+ * \n\
+ * @returns A new Float32Array interleaved or mono non-interleaved as was fed to this function.\n\
+ */\n\
+MultiDelay.prototype.process = function (samples){\n\
+ // NB. Make a copy to put in the output samples to return. \n\
+ var outputSamples = new Array(samples.length);\n\
+\n\
+ for(var i=0; i<samples.length; i++){\n\
+ \n\
+ // delayBufferSamples could contain initial NULL's, return silence in that case\n\
+ var delaySample = (this.delayBufferSamples[this.delayOutputPointer]==null ? 0.0 : this.delayBufferSamples[this.delayOutputPointer]);\n\
+ \n\
+ // Mix normal audio data with delayed audio\n\
+ var sample = (delaySample * this.delayVolume) + samples[i]; \n\
+ \n\
+ // Add audio data with the delay in the delay buffer\n\
+ this.delayBufferSamples[this.delayInputPointer] = sample;\n\
+ \n\
+ // Return the audio with delay mix\n\
+ outputSamples[i] = sample * this.masterVolume;\n\
+ \n\
+ // Manage circulair delay buffer pointers\n\
+ this.delayInputPointer++;\n\
+ if(this.delayInputPointer >= this.delayBufferSamples.length-1)\n\
+ this.delayInputPointer = 0;\n\
+ \n\
+ this.delayOutputPointer++;\n\
+ if(this.delayOutputPointer >= this.delayBufferSamples.length-1)\n\
+ this.delayOutputPointer = 0; \n\
+ \n\
+ }\n\
+ \n\
+ return outputSamples;\n\
+}\n\
+\n\
+\n\
+\n\
+\n\
+/**\n\
+ * SingleDelay effect by Almer Thie (http://code.almeros.com).\n\
+ * Copyright 2010 Almer Thie. All rights reserved.\n\
+ * Example: See usage in Reverb class\n\
+ * \n\
+ * This is a delay that does NOT feeds it's own delayed signal back into its \n\
+ * circular buffer, neither does it return the original signal. Also known as \n\
+ * an AllPassFilter(?).\n\
+ *\n\
+ * Compatible with interleaved stereo (or more channel) buffers and \n\
+ * non-interleaved mono buffers.\n\
+ * \n\
+ * @param {Number} maxDelayInSamplesSize Maximum possible delay in samples (size of circular buffer)\n\
+ * @param {Number} delayInSamples Initial delay in samples\n\
+ * @param {Number} delayVolume Initial feedback delay volume. Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ * \n\
+ * @constructor\n\
+ */\n\
+SingleDelay = function(maxDelayInSamplesSize, delayInSamples, delayVolume){\n\
+ this.delayBufferSamples = new Array(maxDelayInSamplesSize); // The maximum size of delay\n\
+ this.delayInputPointer = delayInSamples; \n\
+ this.delayOutputPointer = 0;\n\
+ \n\
+ this.delayInSamples = delayInSamples;\n\
+ this.delayVolume = delayVolume;\n\
+}\n\
+\n\
+/**\n\
+ * Change the delay time in samples.\n\
+ *\n\
+ * @param {Number} delayInSamples Delay in samples\n\
+ */\n\
+SingleDelay.prototype.setDelayInSamples = function (delayInSamples){\n\
+ this.delayInSamples = delayInSamples;\n\
+ \n\
+ this.delayInputPointer = this.delayOutputPointer + delayInSamples;\n\
+ if(this.delayInputPointer >= this.delayBufferSamples.length-1)\n\
+ this.delayInputPointer = this.delayInputPointer - this.delayBufferSamples.length; \n\
+}\n\
+\n\
+/**\n\
+ * Change the return signal volume.\n\
+ *\n\
+ * @param {Number} delayVolume Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ */\n\
+SingleDelay.prototype.setDelayVolume = function (delayVolume){\n\
+ this.delayVolume = delayVolume;\n\
+}\n\
+\n\
+/**\n\
+ * Process a given interleaved or mono non-interleaved float value Array and \n\
+ * returns the delayed audio.\n\
+ *\n\
+ * @param {Array} samples Array containing Float values or a Float32Array\n\
+ * \n\
+ * @returns A new Float32Array interleaved or mono non-interleaved as was fed to this function.\n\
+ */\n\
+SingleDelay.prototype.process = function (samples){\n\
+ // NB. Make a copy to put in the output samples to return. \n\
+ var outputSamples = new Array(samples.length);\n\
+\n\
+ for(var i=0; i<samples.length; i++){\n\
+\n\
+ // Add audio data with the delay in the delay buffer\n\
+ this.delayBufferSamples[this.delayInputPointer] = samples[i];\n\
+ \n\
+ // delayBufferSamples could contain initial NULL's, return silence in that case\n\
+ var delaySample = this.delayBufferSamples[this.delayOutputPointer];\n\
+\n\
+ // Return the audio with delay mix\n\
+ outputSamples[i] = delaySample * this.delayVolume;\n\
+\n\
+ \n\
+ // Manage circulair delay buffer pointers\n\
+ this.delayInputPointer++;\n\
+ if(this.delayInputPointer >= this.delayBufferSamples.length-1)\n\
+ this.delayInputPointer = 0;\n\
+ \n\
+ this.delayOutputPointer++;\n\
+ if(this.delayOutputPointer >= this.delayBufferSamples.length-1)\n\
+ this.delayOutputPointer = 0; \n\
+ \n\
+ }\n\
+ \n\
+ return outputSamples;\n\
+}\n\
+\n\
+\n\
+\n\
+\n\
+\n\
+/**\n\
+ * Reverb effect by Almer Thie (http://code.almeros.com).\n\
+ * Copyright 2010 Almer Thie. All rights reserved.\n\
+ * Example: http://code.almeros.com/code-examples/reverb-firefox-audio-api/\n\
+ * \n\
+ * This reverb consists of 6 SingleDelays, 6 MultiDelays and an IIRFilter2 \n\
+ * for each of the two stereo channels.\n\
+ *\n\
+ * Compatible with interleaved stereo buffers only!\n\
+ * \n\
+ * @param {Number} maxDelayInSamplesSize Maximum possible delay in samples (size of circular buffers)\n\
+ * @param {Number} delayInSamples Initial delay in samples for internal (Single/Multi)delays\n\
+ * @param {Number} masterVolume Initial master volume. Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ * @param {Number} mixVolume Initial reverb signal mix volume. Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ * @param {Number} delayVolume Initial feedback delay volume for internal (Single/Multi)delays. Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ * @param {Number} dampFrequency Initial low pass filter frequency. 0 to 44100 (depending on your maximum sampling frequency)\n\
+ * \n\
+ * @constructor\n\
+ */\n\
+Reverb = function(maxDelayInSamplesSize, delayInSamples, masterVolume, mixVolume, delayVolume, dampFrequency){\n\
+ this.delayInSamples = delayInSamples;\n\
+ this.masterVolume = masterVolume;\n\
+ this.mixVolume = mixVolume;\n\
+ this.delayVolume = delayVolume;\n\
+ this.dampFrequency = dampFrequency;\n\
+ \n\
+ this.NR_OF_MULTIDELAYS = 6;\n\
+ this.NR_OF_SINGLEDELAYS = 6;\n\
+ \n\
+ this.LOWPASSL = new IIRFilter2(DSP.LOWPASS, dampFrequency, 0, 44100);\n\
+ this.LOWPASSR = new IIRFilter2(DSP.LOWPASS, dampFrequency, 0, 44100);\n\
+ \n\
+ this.singleDelays = [];\n\
+ for(var i = 0; i<this.NR_OF_SINGLEDELAYS; i++){\n\
+ var delayMultiply = 1.0 + (i/7.0); // 1.0, 1.1, 1.2... \n\
+ this.singleDelays[i] = new SingleDelay(maxDelayInSamplesSize, Math.round(this.delayInSamples * delayMultiply), this.delayVolume);\n\
+ }\n\
+ \n\
+ this.multiDelays = [];\n\
+ for(var i = 0; i<this.NR_OF_MULTIDELAYS; i++){\n\
+ var delayMultiply = 1.0 + (i/10.0); // 1.0, 1.1, 1.2... \n\
+ this.multiDelays[i] = new MultiDelay(maxDelayInSamplesSize, Math.round(this.delayInSamples * delayMultiply), this.masterVolume, this.delayVolume);\n\
+ }\n\
+}\n\
+\n\
+/**\n\
+ * Change the delay time in samples as a base for all delays.\n\
+ *\n\
+ * @param {Number} delayInSamples Delay in samples\n\
+ */\n\
+Reverb.prototype.setDelayInSamples = function (delayInSamples){\n\
+ this.delayInSamples = delayInSamples;\n\
+ \n\
+ for(var i = 0; i<this.NR_OF_SINGLEDELAYS; i++){\n\
+ var delayMultiply = 1.0 + (i/7.0); // 1.0, 1.1, 1.2...\n\
+ this.singleDelays[i].setDelayInSamples( Math.round(this.delayInSamples * delayMultiply) );\n\
+ }\n\
+ \n\
+ for(var i = 0; i<this.NR_OF_MULTIDELAYS; i++){\n\
+ var delayMultiply = 1.0 + (i/10.0); // 1.0, 1.1, 1.2...\n\
+ this.multiDelays[i].setDelayInSamples( Math.round(this.delayInSamples * delayMultiply) );\n\
+ }\n\
+}\n\
+\n\
+/**\n\
+ * Change the master volume.\n\
+ *\n\
+ * @param {Number} masterVolume Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ */\n\
+Reverb.prototype.setMasterVolume = function (masterVolume){\n\
+ this.masterVolume = masterVolume;\n\
+}\n\
+\n\
+/**\n\
+ * Change the reverb signal mix level.\n\
+ *\n\
+ * @param {Number} mixVolume Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ */\n\
+Reverb.prototype.setMixVolume = function (mixVolume){\n\
+ this.mixVolume = mixVolume;\n\
+}\n\
+\n\
+/**\n\
+ * Change all delays feedback volume.\n\
+ *\n\
+ * @param {Number} delayVolume Float value: 0.0 (silence), 1.0 (normal), >1.0 (amplify)\n\
+ */\n\
+Reverb.prototype.setDelayVolume = function (delayVolume){\n\
+ this.delayVolume = delayVolume;\n\
+ \n\
+ for(var i = 0; i<this.NR_OF_SINGLEDELAYS; i++){\n\
+ this.singleDelays[i].setDelayVolume(this.delayVolume);\n\
+ } \n\
+ \n\
+ for(var i = 0; i<this.NR_OF_MULTIDELAYS; i++){\n\
+ this.multiDelays[i].setDelayVolume(this.delayVolume);\n\
+ } \n\
+}\n\
+\n\
+/**\n\
+ * Change the Low Pass filter frequency.\n\
+ *\n\
+ * @param {Number} dampFrequency low pass filter frequency. 0 to 44100 (depending on your maximum sampling frequency)\n\
+ */\n\
+Reverb.prototype.setDampFrequency = function (dampFrequency){\n\
+ this.dampFrequency = dampFrequency;\n\
+ \n\
+ this.LOWPASSL.set(dampFrequency, 0);\n\
+ this.LOWPASSR.set(dampFrequency, 0); \n\
+}\n\
+\n\
+/**\n\
+ * Process a given interleaved float value Array and copies and adds the reverb signal.\n\
+ *\n\
+ * @param {Array} samples Array containing Float values or a Float32Array\n\
+ * \n\
+ * @returns A new Float32Array interleaved buffer.\n\
+ */\n\
+Reverb.prototype.process = function (interleavedSamples){ \n\
+ // NB. Make a copy to put in the output samples to return. \n\
+ var outputSamples = new Array(interleavedSamples.length);\n\
+ \n\
+ // Perform low pass on the input samples to mimick damp\n\
+ var leftRightMix = DSP.deinterleave(interleavedSamples);\n\
+ this.LOWPASSL.process( leftRightMix[DSP.LEFT] );\n\
+ this.LOWPASSR.process( leftRightMix[DSP.RIGHT] ); \n\
+ var filteredSamples = DSP.interleave(leftRightMix[DSP.LEFT], leftRightMix[DSP.RIGHT]);\n\
+\n\
+ // Process MultiDelays in parallel\n\
+ for(var i = 0; i<this.NR_OF_MULTIDELAYS; i++){\n\
+ // Invert the signal of every even multiDelay\n\
+ outputSamples = mixSampleBuffers(outputSamples, this.multiDelays[i].process(filteredSamples), 2%i==0, this.NR_OF_MULTIDELAYS);\n\
+ }\n\
+ \n\
+ // Process SingleDelays in series\n\
+ var singleDelaySamples = new Array(outputSamples.length);\n\
+ for(var i = 0; i<this.NR_OF_SINGLEDELAYS; i++){\n\
+ // Invert the signal of every even singleDelay\n\
+ singleDelaySamples = mixSampleBuffers(singleDelaySamples, this.singleDelays[i].process(outputSamples), 2%i==0, 1); \n\
+ }\n\
+\n\
+ // Apply the volume of the reverb signal\n\
+ for(var i = 0; i<singleDelaySamples.length; i++){\n\
+ singleDelaySamples[i] *= this.mixVolume;\n\
+ }\n\
+ \n\
+ // Mix the original signal with the reverb signal\n\
+ outputSamples = mixSampleBuffers(singleDelaySamples, interleavedSamples, 0, 1); \n\
+\n\
+ // Apply the master volume to the complete signal\n\
+ for(var i = 0; i<outputSamples.length; i++){\n\
+ outputSamples[i] *= this.masterVolume;\n\
+ }\n\
+ \n\
+ return outputSamples;\n\
+}\n\
+\n\
+/**\n\
+ * Helper method (for Reverb) to mix two (interleaved) samplebuffers. It's possible \n\
+ * to negate the second buffer while mixing and to perform a volume correction \n\
+ * on the final signal.\n\
+ * \n\
+ * @param {Array} sampleBuffer1 Array containing Float values or a Float32Array\n\
+ * @param {Array} sampleBuffer2 Array containing Float values or a Float32Array\n\
+ * @param {Boolean} negate When true inverts/flips the audio signal\n\
+ * @param {Number} volumeCorrection When you add multiple sample buffers, use this to tame your signal ;)\n\
+ * \n\
+ * @returns A new Float32Array interleaved buffer.\n\
+ */\n\
+function mixSampleBuffers(sampleBuffer1, sampleBuffer2, negate, volumeCorrection){\n\
+ var outputSamples = new Array(sampleBuffer1);\n\
+\n\
+ for(var i = 0; i<sampleBuffer1.length; i++){\n\
+ outputSamples[i] += (negate ? -sampleBuffer2[i] : sampleBuffer2[i]) / volumeCorrection;\n\
+ }\n\
+ \n\
+ return outputSamples;\n\
+} \n\
+\n\
+\n\
+TalosContentProfiler.subtestStart('audio-oscillator', true).then(() => {\n\
+ var _sunSpiderStartDate = new Date();\n\
+\n\
+ var iterations = 500;\n\
+\n\
+ var bufferSize = 8192;\n\
+ var sampleRate = 44100.0;\n\
+ var nthHarmonic = 5;\n\
+ var frequency = 344.53;\n\
+ var sine = new Oscillator(Oscillator.Sine, frequency, 1, bufferSize, sampleRate);\n\
+\n\
+ var calcOsc = function() {\n\
+ sine.generate();\n\
+ harmonic = new Oscillator(Oscillator.Sine, frequency*nthHarmonic, 1/nthHarmonic, bufferSize, sampleRate);\n\
+ harmonic.generate();\n\
+ sine.add(harmonic);\n\
+ };\n\
+\n\
+ runTest(calcOsc, iterations);\n\
+\n\
+\n\
+ var _sunSpiderInterval = new Date() - _sunSpiderStartDate;\n\
+ TalosContentProfiler.subtestEnd('audio-oscillator', true).then(() => {\n\
+ record(_sunSpiderInterval);\n\
+ });\n\
+});\n\
+</script>\n\
+\n\
+\n\
+</body>\n\
+</html>\n\
+", "<!DOCTYPE html>\n\
+<head>\n\
+\n\
+<meta charset=utf8>\n\
+\n\
+<!--\n\
+ Copyright (C) 2007 Apple Inc. All rights reserved.\n\
+\n\
+ Redistribution and use in source and binary forms, with or without\n\
+ modification, are permitted provided that the following conditions\n\
+ are met:\n\
+ 1. Redistributions of source code must retain the above copyright\n\
+ notice, this list of conditions and the following disclaimer.\n\
+ 2. Redistributions in binary form must reproduce the above copyright\n\
+ notice, this list of conditions and the following disclaimer in the\n\
+ documentation and/or other materials provided with the distribution.\n\
+\n\
+ THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY\n\
+ EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n\
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n\
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR\n\
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n\
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n\
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n\
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n\
+ OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n\
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \n\
+-->\n\
+\n\
+<title>SunSpider imaging-gaussian-blur</title>\n\
+<link rel=\"stylesheet\" href=\"../kraken.css\">\n\
+</head>\n\
+\n\
+<body>\n\
+<h3>imaging-gaussian-blur</h3>\n\
+<div id=\"console\">\n\
+</div>\n\
+<script>\n\
+var TalosContentProfiler = parent.TalosContentProfiler;\n\
+function record(time) {\n\
+ document.getElementById(\"console\").innerHTML = time + \"ms\";\n\
+ if (window.parent) {\n\
+ parent.recordResult(time);\n\
+ }\n\
+}\n\
+\n\
+var squidImageData = [8, 7, 21, 255, 42, 39, 79, 255, 74, 64, 104, 255, 96, 83, 136, 255, 98, 82, 134, 255, 68, 63, 102, 255, 22, 29, 66, 255, 10, 22, 44, 255, 9, 27, 43, 255, 7, 23, 38, 255, 8, 18, 25, 255, 5, 12, 19, 255, 2, 7, 12, 255, 4, 1, 7, 255, 16, 10, 34, 255, 22, 22, 57, 255, 29, 26, 74, 255, 36, 33, 74, 255, 67, 17, 35, 255, 125, 25, 24, 255, 155, 37, 22, 255, 146, 30, 12, 255, 111, 14, 3, 255, 89, 10, 12, 255, 74, 9, 20, 255, 34, 5, 7, 255, 3, 2, 6, 255, 0, 2, 3, 255, 5, 1, 0, 255, 4, 3, 1, 255, 3, 2, 2, 255, 1, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 2, 255, 1, 1, 3, 255, 1, 1, 3, 255, 1, 1, 3, 255, 2, 1, 6, 255, 2, 1, 7, 255, 2, 1, 6, 255, 2, 1, 5, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 2, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 2, 2, 1, 255, 4, 4, 4, 255, 3, 4, 6, 255, 1, 3, 6, 255, 5, 4, 8, 255, 3, 1, 8, 255, 1, 0, 6, 255, 0, 0, 2, 255, 1, 2, 0, 255, 2, 0, 0, 255, 0, 1, 4, 255, 3, 2, 23, 255, 4, 3, 43, 255, 4, 4, 41, 255, 2, 4, 24, 255, 0, 2, 11, 255, 0, 0, 4, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 2, 255, 0, 0, 0, 255, 6, 5, 6, 255, 21, 27, 51, 255, 6, 28, 68, 255, 0, 9, 20, 255, 3, 0, 7, 255, 4, 2, 13, 255, 1, 1, 3, 255, 1, 0, 4, 255, 2, 2, 4, 255, 1, 1, 6, 255, 2, 1, 17, 255, 1, 3, 23, 255, 2, 4, 25, 255, 2, 2, 18, 255, 1, 1, 11, 255, 3, 2, 12, 255, 2, 3, 0, 255, 0, 0, 9, 255, 28, 27, 59, 255, 99, 98, 153, 255, 134, 145, 174, 255, 95, 93, 105, 255, 76, 70, 74, 255, 55, 51, 49, 255, 15, 15, 7, 255, 24, 17, 29, 255, 87, 71, 96, 255, 117, 102, 120, 255, 99, 88, 111, 255, 76, 82, 123, 255, 78, 84, 127, 255, 49, 40, 36, 255, 12, 7, 7, 255, 11, 8, 6, 255, 12, 7, 7, 255, 19, 8, 10, 255, 23, 10, 9, 255, 21, 11, 8, 255, 22, 10, 13, 255, 20, 11, 11, 255, 22, 14, 12, 255, 26, 14, 13, 255, 27, 13, 12, 255, 25, 11, 3, 255, 26, 17, 8, 255, 25, 19, 16, 255, 27, 15, 10, 255, 29, 18, 15, 255, 24, 14, 10, 255, 44, 19, 15, 255, 42, 24, 7, 255, 48, 26, 10, 255, 54, 31, 5, 255, 54, 30, 19, 255, 73, 45, 32, 255, 93, 57, 22, 255, 87, 47, 22, 255, 72, 41, 12, 255, 76, 47, 7, 255, 78, 49, 12, 255, 80, 51, 19, 255, 85, 51, 16, 255, 89, 51, 19, 255, 96, 61, 9, 255, 99, 62, 7, 255, 96, 56, 14, 255, 112, 64, 17, 255, 126, 83, 10, 255, 126, 76, 17, 255, 116, 72, 13, 255, 120, 73, 10, 255, 121, 71, 10, 255, 122, 74, 16, 255, 116, 69, 13, 255, 113, 68, 13, 255, 114, 68, 14, 255, 105, 61, 10, 255, 99, 55, 5, 255, 97, 56, 12, 255, 93, 56, 12, 255, 91, 52, 3, 255, 93, 57, 15, 255, 88, 51, 15, 255, 81, 49, 16, 255, 92, 49, 13, 255, 84, 49, 8, 255, 84, 43, 17, 255, 88, 40, 15, 255, 78, 41, 11, 255, 73, 39, 16, 255, 78, 44, 15, 255, 82, 40, 10, 255, 83, 39, 11, 255, 79, 42, 9, 255, 84, 45, 6, 255, 75, 41, 15, 255, 69, 41, 13, 255, 81, 36, 16, 255, 73, 38, 12, 255, 75, 40, 13, 255, 76, 37, 13, 255, 70, 34, 14, 255, 74, 39, 18, 255, 76, 38, 11, 255, 71, 37, 10, 255, 65, 37, 18, 255, 70, 38, 15, 255, 74, 39, 20, 255, 72, 36, 17, 255, 69, 36, 16, 255, 67, 39, 18, 255, 68, 40, 20, 255, 66, 39, 16, 255, 69, 43, 21, 255, 76, 44, 28, 255, 84, 50, 18, 255, 78, 46, 15, 255, 72, 46, 38, 255, 71, 49, 23, 255, 74, 53, 30, 255, 72, 48, 27, 255, 77, 53, 28, 255, 72, 52, 37, 255, 71, 53, 38, 255, 72, 57, 31, 255, 74, 61, 30, 255, 74, 65, 36, 255, 71, 61, 45, 255, 74, 63, 48, 255, 73, 65, 44, 255, 69, 69, 46, 255, 75, 70, 58, 255, 78, 77, 44, 255, 79, 75, 48, 255, 86, 75, 60, 255, 94, 80, 59, 255, 100, 81, 67, 255, 101, 78, 57, 255, 102, 84, 56, 255, 105, 87, 67, 255, 108, 88, 79, 255, 112, 87, 70, 255, 116, 90, 65, 255, 102, 85, 69, 255, 104, 89, 69, 255, 109, 92, 66, 255, 108, 95, 65, 255, 110, 95, 65, 255, 110, 96, 66, 255, 109, 97, 74, 255, 108, 97, 71, 255, 110, 100, 70, 255, 109, 96, 74, 255, 112, 97, 73, 255, 112, 99, 75, 255, 111, 102, 74, 255, 108, 101, 70, 255, 111, 104, 79, 255, 106, 101, 81, 255, 109, 106, 82, 255, 111, 107, 82, 255, 113, 107, 83, 255, 113, 107, 81, 255, 116, 111, 86, 255, 118, 113, 86, 255, 119, 117, 86, 255, 120, 118, 94, 255, 118, 124, 98, 255, 119, 135, 98, 255, 134, 151, 122, 255, 129, 142, 119, 255, 131, 142, 111, 255, 135, 145, 114, 255, 135, 148, 116, 255, 137, 152, 118, 255, 139, 155, 119, 255, 142, 156, 121, 255, 145, 157, 123, 255, 147, 156, 125, 255, 145, 157, 119, 255, 146, 156, 119, 255, 150, 157, 118, 255, 147, 153, 110, 255, 142, 149, 106, 255, 134, 145, 101, 255, 125, 140, 98, 255, 122, 138, 94, 255, 119, 126, 88, 255, 128, 124, 82, 255, 132, 122, 71, 255, 120, 111, 71, 255, 115, 111, 70, 255, 116, 108, 59, 255, 116, 102, 56, 255, 112, 93, 53, 255, 113, 92, 66, 255, 114, 93, 52, 255, 112, 89, 49, 255, 103, 91, 58, 255, 136, 120, 75, 255, 124, 91, 48, 255, 117, 78, 30, 255, 117, 82, 40, 255, 118, 81, 33, 255, 119, 79, 20, 255, 114, 73, 39, 255, 119, 75, 26, 255, 120, 73, 30, 255, 119, 78, 22, 255, 115, 76, 23, 255, 113, 77, 23, 255, 100, 66, 25, 255, 101, 68, 23, 255, 103, 71, 21, 255, 102, 69, 16, 255, 106, 70, 16, 255, 107, 69, 13, 255, 108, 69, 17, 255, 111, 67, 11, 255, 125, 69, 20, 255, 132, 73, 21, 255, 131, 77, 8, 255, 135, 75, 16, 255, 130, 67, 16, 255, 123, 66, 17, 255, 118, 64, 8, 255, 111, 59, 12, 255, 110, 60, 18, 255, 105, 59, 14, 255, 104, 58, 14, 255, 102, 55, 12, 255, 103, 56, 13, 255, 106, 58, 15, 255, 107, 58, 17, 255, 103, 54, 14, 255, 101, 51, 11, 255, 107, 54, 12, 255, 106, 55, 12, 255, 109, 60, 14, 255, 107, 59, 6, 255, 112, 59, 8, 255, 114, 59, 13, 255, 115, 65, 10, 255, 117, 66, 8, 255, 118, 67, 10, 255, 128, 73, 13, 255, 148, 81, 12, 255, 153, 82, 16, 255, 138, 73, 18, 255, 128, 68, 17, 255, 126, 64, 11, 255, 129, 62, 12, 255, 119, 60, 11, 255, 117, 60, 14, 255, 111, 58, 13, 255, 105, 60, 6, 255, 110, 60, 5, 255, 107, 52, 18, 255, 103, 51, 13, 255, 101, 54, 7, 255, 100, 52, 11, 255, 104, 52, 19, 255, 95, 52, 8, 255, 93, 54, 5, 255, 88, 46, 11, 255, 92, 49, 17, 255, 94, 48, 15, 255, 98, 49, 4, 255, 99, 47, 11, 255, 92, 45, 14, 255, 90, 42, 9, 255, 90, 41, 13, 255, 92, 43, 14, 255, 90, 44, 9, 255, 85, 37, 12, 255, 89, 41, 12, 255, 87, 38, 22, 255, 85, 38, 9, 255, 86, 38, 7, 255, 90, 40, 14, 255, 91, 42, 3, 255, 94, 42, 6, 255, 86, 41, 5, 255, 91, 43, 9, 255, 94, 42, 9, 255, 92, 33, 7, 255, 88, 36, 10, 255, 95, 39, 14, 255, 92, 36, 7, 255, 87, 37, 5, 255, 88, 41, 4, 255, 2, 2, 6, 255, 41, 36, 70, 255, 85, 77, 125, 255, 85, 89, 133, 255, 59, 76, 115, 255, 35, 43, 75, 255, 25, 27, 63, 255, 19, 33, 40, 255, 10, 33, 28, 255, 8, 24, 28, 255, 14, 21, 19, 255, 12, 16, 15, 255, 12, 14, 15, 255, 21, 14, 9, 255, 19, 20, 26, 255, 13, 24, 52, 255, 36, 28, 70, 255, 14, 27, 45, 255, 50, 13, 24, 255, 113, 17, 15, 255, 144, 32, 22, 255, 141, 32, 14, 255, 119, 12, 7, 255, 89, 10, 2, 255, 86, 11, 9, 255, 56, 9, 9, 255, 17, 3, 4, 255, 2, 3, 1, 255, 0, 3, 0, 255, 1, 3, 2, 255, 3, 0, 10, 255, 2, 4, 6, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 3, 255, 1, 0, 5, 255, 2, 1, 8, 255, 3, 2, 8, 255, 2, 1, 6, 255, 1, 0, 5, 255, 0, 0, 3, 255, 0, 0, 2, 255, 1, 1, 2, 255, 1, 1, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 4, 255, 0, 0, 6, 255, 2, 0, 6, 255, 1, 1, 3, 255, 2, 1, 4, 255, 0, 0, 8, 255, 1, 1, 3, 255, 2, 0, 0, 255, 1, 1, 6, 255, 0, 1, 20, 255, 3, 1, 42, 255, 4, 2, 46, 255, 3, 2, 31, 255, 0, 2, 7, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 3, 255, 1, 0, 1, 255, 6, 9, 14, 255, 20, 37, 80, 255, 9, 21, 65, 255, 0, 0, 18, 255, 1, 5, 13, 255, 5, 3, 14, 255, 0, 0, 4, 255, 1, 3, 5, 255, 2, 3, 12, 255, 3, 3, 14, 255, 3, 3, 13, 255, 0, 1, 11, 255, 3, 3, 14, 255, 2, 1, 2, 255, 0, 0, 2, 255, 15, 15, 61, 255, 86, 88, 145, 255, 143, 138, 181, 255, 113, 121, 131, 255, 71, 72, 78, 255, 55, 47, 41, 255, 20, 21, 8, 255, 22, 14, 27, 255, 85, 68, 82, 255, 118, 103, 116, 255, 103, 102, 135, 255, 95, 80, 118, 255, 81, 62, 83, 255, 55, 54, 41, 255, 17, 13, 4, 255, 5, 0, 3, 255, 14, 6, 7, 255, 14, 8, 8, 255, 12, 6, 5, 255, 20, 10, 11, 255, 23, 11, 11, 255, 20, 9, 10, 255, 24, 13, 12, 255, 23, 14, 12, 255, 21, 13, 11, 255, 22, 13, 12, 255, 26, 16, 20, 255, 24, 16, 15, 255, 24, 16, 9, 255, 24, 15, 13, 255, 27, 19, 12, 255, 33, 23, 10, 255, 42, 22, 14, 255, 53, 22, 16, 255, 51, 29, 12, 255, 58, 30, 21, 255, 73, 50, 18, 255, 87, 55, 23, 255, 89, 49, 18, 255, 78, 44, 2, 255, 69, 38, 7, 255, 75, 45, 7, 255, 83, 49, 9, 255, 83, 47, 16, 255, 88, 50, 18, 255, 92, 51, 12, 255, 98, 57, 2, 255, 105, 64, 11, 255, 101, 64, 12, 255, 96, 60, 11, 255, 108, 71, 3, 255, 116, 81, 8, 255, 111, 67, 10, 255, 105, 61, 14, 255, 111, 63, 14, 255, 111, 63, 7, 255, 113, 67, 6, 255, 110, 66, 3, 255, 105, 61, 5, 255, 99, 55, 10, 255, 93, 50, 9, 255, 93, 54, 14, 255, 95, 54, 15, 255, 97, 50, 21, 255, 99, 53, 13, 255, 103, 56, 4, 255, 101, 61, 7, 255, 103, 57, 10, 255, 106, 49, 14, 255, 103, 50, 16, 255, 95, 52, 16, 255, 91, 53, 9, 255, 88, 50, 10, 255, 88, 52, 12, 255, 92, 48, 16, 255, 95, 50, 7, 255, 95, 54, 7, 255, 93, 51, 12, 255, 81, 41, 9, 255, 83, 38, 15, 255, 76, 41, 5, 255, 79, 41, 11, 255, 78, 34, 22, 255, 74, 35, 15, 255, 79, 39, 6, 255, 79, 41, 4, 255, 78, 39, 9, 255, 78, 36, 17, 255, 75, 36, 10, 255, 73, 38, 11, 255, 75, 40, 18, 255, 72, 35, 17, 255, 75, 40, 14, 255, 73, 38, 19, 255, 69, 36, 15, 255, 67, 39, 22, 255, 66, 39, 15, 255, 70, 44, 16, 255, 70, 45, 21, 255, 80, 47, 26, 255, 78, 47, 26, 255, 79, 48, 16, 255, 71, 50, 26, 255, 68, 51, 27, 255, 64, 51, 39, 255, 67, 55, 26, 255, 69, 56, 28, 255, 70, 60, 36, 255, 69, 60, 34, 255, 70, 63, 32, 255, 68, 63, 33, 255, 66, 61, 44, 255, 73, 68, 47, 255, 74, 68, 42, 255, 70, 66, 45, 255, 79, 68, 50, 255, 81, 76, 40, 255, 82, 71, 58, 255, 77, 72, 55, 255, 85, 77, 52, 255, 97, 79, 63, 255, 104, 82, 67, 255, 106, 84, 64, 255, 108, 85, 63, 255, 108, 86, 65, 255, 103, 83, 62, 255, 107, 85, 64, 255, 102, 86, 60, 255, 104, 90, 58, 255, 105, 85, 62, 255, 109, 91, 65, 255, 106, 92, 60, 255, 110, 92, 63, 255, 116, 98, 57, 255, 113, 96, 61, 255, 110, 93, 66, 255, 105, 94, 66, 255, 113, 99, 67, 255, 115, 97, 63, 255, 111, 99, 66, 255, 111, 98, 68, 255, 112, 100, 71, 255, 110, 98, 71, 255, 112, 104, 72, 255, 112, 104, 78, 255, 115, 104, 88, 255, 116, 108, 74, 255, 121, 115, 74, 255, 121, 114, 84, 255, 121, 117, 78, 255, 124, 120, 80, 255, 122, 124, 88, 255, 114, 128, 93, 255, 128, 146, 115, 255, 133, 145, 117, 255, 132, 139, 105, 255, 137, 144, 107, 255, 137, 148, 110, 255, 136, 150, 111, 255, 139, 153, 115, 255, 139, 152, 115, 255, 143, 155, 118, 255, 148, 158, 121, 255, 147, 157, 117, 255, 141, 151, 109, 255, 149, 156, 111, 255, 152, 156, 107, 255, 141, 146, 96, 255, 134, 144, 95, 255, 131, 139, 96, 255, 125, 135, 92, 255, 114, 127, 82, 255, 122, 123, 74, 255, 136, 122, 68, 255, 126, 113, 65, 255, 116, 109, 62, 255, 122, 107, 62, 255, 120, 99, 59, 255, 120, 99, 45, 255, 115, 91, 52, 255, 116, 88, 60, 255, 119, 90, 50, 255, 100, 83, 41, 255, 132, 115, 65, 255, 131, 100, 53, 255, 115, 78, 24, 255, 115, 83, 30, 255, 115, 79, 41, 255, 117, 79, 22, 255, 116, 79, 26, 255, 117, 77, 26, 255, 117, 76, 32, 255, 116, 74, 25, 255, 117, 71, 24, 255, 119, 70, 23, 255, 104, 67, 24, 255, 100, 63, 27, 255, 103, 66, 31, 255, 106, 67, 25, 255, 109, 69, 20, 255, 108, 66, 17, 255, 113, 67, 12, 255, 110, 71, 14, 255, 118, 69, 20, 255, 125, 72, 22, 255, 133, 80, 14, 255, 136, 76, 9, 255, 120, 69, 9, 255, 119, 64, 11, 255, 120, 65, 22, 255, 114, 60, 22, 255, 107, 58, 13, 255, 103, 58, 9, 255, 106, 59, 13, 255, 104, 57, 11, 255, 103, 56, 9, 255, 104, 56, 12, 255, 106, 58, 15, 255, 104, 55, 13, 255, 108, 56, 14, 255, 112, 59, 14, 255, 108, 57, 10, 255, 109, 58, 16, 255, 112, 59, 15, 255, 114, 58, 12, 255, 116, 59, 12, 255, 117, 63, 5, 255, 122, 63, 9, 255, 123, 65, 15, 255, 135, 74, 13, 255, 150, 82, 10, 255, 151, 76, 12, 255, 143, 73, 10, 255, 133, 71, 8, 255, 125, 66, 8, 255, 126, 64, 13, 255, 121, 61, 11, 255, 121, 64, 7, 255, 116, 61, 3, 255, 114, 61, 8, 255, 110, 58, 9, 255, 109, 56, 14, 255, 107, 56, 11, 255, 102, 55, 5, 255, 104, 57, 7, 255, 106, 55, 10, 255, 92, 46, 20, 255, 94, 50, 11, 255, 98, 52, 2, 255, 98, 49, 9, 255, 96, 47, 13, 255, 90, 44, 9, 255, 91, 49, 9, 255, 92, 53, 6, 255, 87, 46, 7, 255, 85, 41, 12, 255, 91, 46, 9, 255, 91, 43, 7, 255, 92, 43, 7, 255, 86, 44, 5, 255, 86, 42, 6, 255, 88, 43, 8, 255, 91, 42, 9, 255, 89, 37, 18, 255, 92, 37, 19, 255, 94, 43, 8, 255, 87, 41, 10, 255, 89, 41, 10, 255, 95, 45, 3, 255, 93, 44, 7, 255, 91, 42, 10, 255, 94, 40, 5, 255, 89, 38, 8, 255, 86, 39, 7, 255, 88, 41, 8, 255, 0, 0, 1, 255, 20, 17, 25, 255, 51, 55, 97, 255, 49, 60, 102, 255, 26, 41, 68, 255, 5, 18, 44, 255, 14, 21, 53, 255, 19, 33, 37, 255, 18, 36, 34, 255, 19, 32, 45, 255, 23, 28, 40, 255, 18, 17, 24, 255, 15, 15, 22, 255, 21, 19, 19, 255, 27, 18, 13, 255, 25, 17, 32, 255, 20, 20, 25, 255, 22, 24, 27, 255, 15, 23, 31, 255, 69, 17, 23, 255, 133, 20, 16, 255, 144, 31, 9, 255, 111, 15, 7, 255, 87, 9, 6, 255, 102, 10, 4, 255, 80, 12, 1, 255, 68, 9, 12, 255, 56, 3, 20, 255, 18, 2, 5, 255, 0, 1, 5, 255, 3, 0, 5, 255, 1, 3, 3, 255, 2, 2, 2, 255, 2, 2, 1, 255, 0, 0, 0, 255, 0, 0, 2, 255, 0, 0, 5, 255, 3, 2, 9, 255, 2, 1, 8, 255, 1, 0, 6, 255, 2, 1, 6, 255, 2, 1, 6, 255, 1, 1, 4, 255, 0, 0, 3, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 2, 255, 1, 1, 3, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 3, 2, 8, 255, 4, 2, 12, 255, 1, 0, 5, 255, 0, 0, 0, 255, 0, 1, 1, 255, 1, 0, 0, 255, 0, 0, 0, 255, 0, 1, 5, 255, 1, 3, 24, 255, 3, 3, 44, 255, 1, 3, 35, 255, 1, 3, 11, 255, 0, 1, 1, 255, 1, 0, 1, 255, 1, 0, 1, 255, 2, 0, 1, 255, 1, 0, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 0, 3, 255, 3, 1, 5, 255, 0, 0, 0, 255, 12, 17, 31, 255, 28, 35, 75, 255, 5, 18, 42, 255, 0, 5, 11, 255, 4, 0, 16, 255, 3, 2, 11, 255, 0, 0, 10, 255, 1, 2, 12, 255, 0, 1, 7, 255, 2, 2, 13, 255, 2, 1, 7, 255, 0, 0, 0, 255, 6, 2, 42, 255, 74, 78, 148, 255, 113, 124, 184, 255, 120, 120, 133, 255, 86, 83, 73, 255, 51, 44, 43, 255, 18, 19, 20, 255, 21, 14, 27, 255, 73, 61, 81, 255, 114, 107, 122, 255, 105, 101, 147, 255, 73, 80, 175, 255, 77, 72, 110, 255, 58, 41, 59, 255, 18, 11, 12, 255, 4, 0, 3, 255, 10, 6, 5, 255, 20, 9, 15, 255, 18, 8, 10, 255, 14, 6, 5, 255, 18, 12, 8, 255, 20, 12, 9, 255, 24, 13, 13, 255, 26, 13, 14, 255, 25, 15, 10, 255, 25, 15, 13, 255, 24, 15, 11, 255, 25, 16, 8, 255, 25, 13, 13, 255, 26, 13, 9, 255, 30, 18, 8, 255, 33, 19, 18, 255, 42, 28, 11, 255, 41, 27, 3, 255, 47, 26, 13, 255, 67, 39, 11, 255, 78, 50, 24, 255, 83, 51, 20, 255, 76, 46, 16, 255, 64, 32, 11, 255, 66, 30, 9, 255, 69, 39, 9, 255, 73, 43, 11, 255, 75, 40, 10, 255, 72, 44, 19, 255, 78, 45, 13, 255, 88, 44, 2, 255, 92, 53, 15, 255, 99, 65, 10, 255, 110, 66, 16, 255, 106, 65, 11, 255, 102, 63, 4, 255, 103, 65, 3, 255, 106, 64, 17, 255, 102, 57, 5, 255, 98, 51, 11, 255, 101, 56, 16, 255, 99, 55, 10, 255, 101, 55, 9, 255, 100, 56, 11, 255, 98, 54, 14, 255, 96, 53, 19, 255, 100, 54, 20, 255, 97, 59, 9, 255, 100, 58, 8, 255, 100, 59, 10, 255, 106, 60, 14, 255, 117, 64, 14, 255, 121, 69, 8, 255, 126, 69, 10, 255, 127, 74, 9, 255, 131, 70, 12, 255, 125, 68, 12, 255, 132, 72, 5, 255, 139, 75, 3, 255, 126, 75, 5, 255, 108, 57, 15, 255, 101, 57, 11, 255, 94, 54, 9, 255, 87, 45, 16, 255, 73, 38, 8, 255, 79, 38, 13, 255, 75, 33, 18, 255, 69, 37, 10, 255, 73, 39, 7, 255, 71, 34, 18, 255, 77, 37, 16, 255, 75, 42, 11, 255, 73, 39, 8, 255, 72, 36, 19, 255, 75, 39, 11, 255, 77, 41, 7, 255, 70, 40, 14, 255, 70, 40, 16, 255, 70, 43, 6, 255, 67, 41, 16, 255, 69, 38, 17, 255, 67, 40, 20, 255, 73, 43, 22, 255, 75, 41, 18, 255, 72, 45, 19, 255, 70, 46, 22, 255, 76, 49, 30, 255, 79, 51, 28, 255, 80, 54, 28, 255, 70, 52, 30, 255, 63, 53, 38, 255, 71, 56, 26, 255, 76, 59, 25, 255, 74, 59, 39, 255, 71, 57, 42, 255, 71, 61, 42, 255, 66, 62, 36, 255, 71, 63, 40, 255, 84, 68, 31, 255, 80, 67, 40, 255, 71, 67, 42, 255, 75, 70, 42, 255, 78, 75, 43, 255, 82, 76, 48, 255, 84, 73, 47, 255, 86, 74, 47, 255, 92, 76, 60, 255, 103, 83, 70, 255, 102, 81, 62, 255, 101, 82, 66, 255, 103, 83, 70, 255, 106, 85, 62, 255, 106, 85, 62, 255, 97, 82, 57, 255, 101, 87, 55, 255, 106, 86, 59, 255, 110, 85, 65, 255, 114, 92, 62, 255, 117, 95, 64, 255, 114, 96, 61, 255, 111, 94, 61, 255, 111, 93, 70, 255, 107, 90, 63, 255, 114, 95, 62, 255, 113, 94, 59, 255, 111, 96, 63, 255, 110, 96, 70, 255, 112, 97, 69, 255, 113, 97, 68, 255, 114, 100, 73, 255, 113, 103, 72, 255, 114, 101, 75, 255, 117, 104, 82, 255, 121, 109, 81, 255, 120, 112, 73, 255, 122, 114, 78, 255, 125, 122, 76, 255, 125, 125, 82, 255, 120, 123, 94, 255, 127, 134, 104, 255, 137, 147, 112, 255, 128, 140, 103, 255, 134, 144, 99, 255, 137, 145, 101, 255, 137, 147, 104, 255, 141, 152, 110, 255, 141, 151, 110, 255, 141, 151, 109, 255, 144, 152, 110, 255, 147, 154, 110, 255, 146, 152, 104, 255, 148, 152, 100, 255, 150, 152, 96, 255, 145, 147, 92, 255, 136, 141, 90, 255, 126, 135, 83, 255, 124, 134, 81, 255, 123, 129, 79, 255, 127, 122, 73, 255, 131, 116, 73, 255, 122, 109, 75, 255, 116, 107, 68, 255, 117, 107, 45, 255, 120, 102, 64, 255, 118, 101, 41, 255, 117, 95, 45, 255, 115, 90, 55, 255, 119, 93, 37, 255, 107, 90, 23, 255, 122, 105, 49, 255, 136, 106, 66, 255, 115, 78, 34, 255, 112, 80, 31, 255, 112, 78, 35, 255, 118, 75, 35, 255, 121, 77, 29, 255, 117, 75, 20, 255, 119, 75, 27, 255, 118, 69, 33, 255, 127, 71, 29, 255, 131, 73, 12, 255, 113, 72, 24, 255, 105, 64, 22, 255, 107, 68, 24, 255, 110, 69, 19, 255, 111, 68, 14, 255, 115, 67, 19, 255, 117, 67, 20, 255, 117, 74, 17, 255, 123, 72, 11, 255, 125, 71, 17, 255, 131, 78, 26, 255, 136, 73, 18, 255, 127, 72, 17, 255, 122, 67, 20, 255, 117, 63, 19, 255, 111, 61, 10, 255, 108, 63, 8, 255, 106, 61, 14, 255, 106, 59, 13, 255, 107, 57, 11, 255, 103, 54, 9, 255, 102, 54, 10, 255, 106, 57, 11, 255, 106, 54, 9, 255, 108, 55, 11, 255, 109, 58, 13, 255, 106, 57, 13, 255, 106, 58, 14, 255, 110, 60, 8, 255, 110, 60, 6, 255, 112, 61, 9, 255, 113, 62, 8, 255, 122, 62, 6, 255, 123, 68, 4, 255, 131, 72, 7, 255, 145, 79, 13, 255, 149, 79, 12, 255, 146, 76, 8, 255, 135, 70, 7, 255, 127, 67, 17, 255, 125, 63, 22, 255, 123, 59, 16, 255, 119, 62, 14, 255, 111, 56, 8, 255, 115, 56, 12, 255, 112, 60, 12, 255, 112, 60, 5, 255, 109, 57, 6, 255, 105, 55, 8, 255, 103, 57, 5, 255, 106, 57, 10, 255, 100, 49, 11, 255, 97, 49, 12, 255, 96, 50, 10, 255, 94, 47, 10, 255, 95, 48, 6, 255, 92, 46, 9, 255, 95, 49, 13, 255, 95, 49, 11, 255, 92, 46, 9, 255, 89, 46, 9, 255, 86, 42, 7, 255, 88, 42, 7, 255, 89, 41, 11, 255, 89, 45, 11, 255, 83, 37, 15, 255, 90, 44, 13, 255, 90, 43, 2, 255, 90, 39, 8, 255, 97, 44, 16, 255, 92, 40, 9, 255, 91, 40, 16, 255, 95, 43, 13, 255, 96, 43, 6, 255, 86, 43, 2, 255, 92, 42, 6, 255, 97, 40, 7, 255, 88, 44, 4, 255, 89, 40, 4, 255, 95, 39, 6, 255, 2, 1, 1, 255, 1, 3, 0, 255, 9, 19, 32, 255, 29, 30, 57, 255, 26, 25, 46, 255, 14, 23, 44, 255, 26, 38, 55, 255, 30, 40, 45, 255, 39, 48, 46, 255, 34, 47, 47, 255, 19, 31, 38, 255, 17, 21, 34, 255, 23, 21, 27, 255, 25, 19, 17, 255, 22, 10, 8, 255, 15, 5, 11, 255, 17, 9, 7, 255, 30, 31, 34, 255, 21, 35, 47, 255, 22, 23, 14, 255, 84, 15, 10, 255, 92, 18, 10, 255, 83, 11, 6, 255, 105, 8, 4, 255, 112, 18, 10, 255, 111, 19, 7, 255, 116, 19, 8, 255, 116, 22, 19, 255, 72, 13, 13, 255, 31, 5, 1, 255, 11, 2, 0, 255, 0, 1, 0, 255, 3, 2, 7, 255, 3, 2, 5, 255, 1, 1, 2, 255, 0, 0, 0, 255, 0, 0, 2, 255, 1, 1, 5, 255, 2, 1, 9, 255, 2, 1, 9, 255, 2, 1, 7, 255, 2, 1, 5, 255, 1, 1, 2, 255, 1, 1, 1, 255, 1, 1, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 1, 1, 3, 255, 0, 0, 2, 255, 1, 1, 1, 255, 0, 1, 0, 255, 1, 0, 5, 255, 1, 0, 6, 255, 1, 1, 3, 255, 1, 1, 0, 255, 0, 0, 0, 255, 2, 1, 7, 255, 0, 3, 21, 255, 0, 5, 37, 255, 2, 4, 31, 255, 3, 1, 13, 255, 0, 3, 2, 255, 0, 1, 1, 255, 1, 0, 0, 255, 2, 1, 0, 255, 1, 1, 3, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 0, 1, 255, 2, 2, 3, 255, 0, 3, 4, 255, 2, 0, 1, 255, 16, 19, 45, 255, 15, 28, 54, 255, 2, 3, 12, 255, 1, 3, 14, 255, 1, 3, 7, 255, 0, 0, 7, 255, 2, 1, 6, 255, 4, 2, 11, 255, 0, 0, 0, 255, 1, 2, 23, 255, 60, 59, 124, 255, 133, 130, 182, 255, 126, 121, 146, 255, 91, 88, 83, 255, 53, 52, 47, 255, 23, 19, 10, 255, 19, 14, 9, 255, 53, 51, 63, 255, 111, 107, 123, 255, 102, 95, 116, 255, 71, 70, 125, 255, 75, 75, 116, 255, 48, 54, 73, 255, 20, 21, 16, 255, 6, 1, 1, 255, 6, 5, 6, 255, 14, 8, 8, 255, 19, 12, 5, 255, 16, 11, 4, 255, 19, 11, 9, 255, 26, 18, 14, 255, 25, 16, 10, 255, 24, 16, 9, 255, 27, 17, 13, 255, 26, 15, 13, 255, 24, 14, 6, 255, 23, 13, 9, 255, 23, 13, 10, 255, 26, 16, 8, 255, 28, 15, 9, 255, 34, 18, 10, 255, 40, 23, 15, 255, 33, 20, 17, 255, 39, 26, 11, 255, 69, 40, 22, 255, 93, 47, 27, 255, 92, 53, 16, 255, 67, 36, 8, 255, 56, 32, 12, 255, 52, 30, 15, 255, 57, 31, 14, 255, 68, 38, 11, 255, 72, 36, 9, 255, 71, 34, 14, 255, 72, 46, 16, 255, 72, 41, 14, 255, 77, 43, 14, 255, 83, 52, 11, 255, 96, 61, 6, 255, 102, 63, 14, 255, 93, 55, 18, 255, 98, 59, 4, 255, 98, 58, 6, 255, 98, 56, 9, 255, 98, 48, 18, 255, 93, 45, 14, 255, 93, 51, 11, 255, 97, 57, 6, 255, 97, 55, 8, 255, 95, 50, 10, 255, 96, 50, 12, 255, 96, 52, 12, 255, 100, 58, 13, 255, 104, 65, 15, 255, 109, 66, 4, 255, 106, 66, 16, 255, 116, 67, 20, 255, 125, 74, 8, 255, 137, 75, 16, 255, 163, 99, 5, 255, 186, 113, 6, 255, 183, 120, 9, 255, 190, 121, 14, 255, 188, 119, 11, 255, 183, 110, 6, 255, 172, 98, 6, 255, 139, 79, 9, 255, 98, 53, 11, 255, 83, 47, 12, 255, 80, 38, 12, 255, 79, 31, 17, 255, 81, 37, 6, 255, 75, 41, 9, 255, 77, 37, 19, 255, 73, 35, 14, 255, 64, 38, 6, 255, 71, 38, 14, 255, 77, 35, 18, 255, 71, 39, 17, 255, 78, 42, 12, 255, 76, 40, 15, 255, 78, 40, 11, 255, 81, 40, 13, 255, 73, 42, 17, 255, 74, 43, 22, 255, 71, 39, 9, 255, 71, 42, 15, 255, 69, 39, 25, 255, 68, 36, 12, 255, 72, 42, 24, 255, 69, 44, 24, 255, 71, 48, 18, 255, 79, 56, 25, 255, 78, 53, 22, 255, 73, 50, 34, 255, 80, 56, 31, 255, 74, 56, 22, 255, 69, 54, 27, 255, 73, 51, 32, 255, 78, 56, 33, 255, 76, 57, 33, 255, 73, 57, 39, 255, 77, 59, 39, 255, 77, 60, 35, 255, 76, 59, 47, 255, 80, 62, 39, 255, 83, 67, 31, 255, 82, 71, 39, 255, 81, 71, 39, 255, 74, 71, 40, 255, 75, 73, 55, 255, 87, 72, 55, 255, 83, 74, 55, 255, 83, 77, 59, 255, 100, 81, 64, 255, 108, 79, 57, 255, 104, 81, 67, 255, 103, 82, 72, 255, 109, 84, 56, 255, 103, 83, 53, 255, 104, 84, 62, 255, 101, 84, 59, 255, 104, 85, 59, 255, 113, 88, 60, 255, 116, 89, 59, 255, 115, 92, 60, 255, 109, 88, 64, 255, 107, 90, 62, 255, 108, 92, 61, 255, 108, 89, 61, 255, 111, 89, 64, 255, 109, 92, 61, 255, 106, 93, 59, 255, 106, 93, 63, 255, 110, 96, 65, 255, 113, 97, 70, 255, 112, 97, 75, 255, 113, 101, 68, 255, 115, 102, 72, 255, 116, 102, 76, 255, 117, 106, 77, 255, 121, 111, 79, 255, 122, 113, 83, 255, 124, 115, 80, 255, 124, 120, 82, 255, 120, 122, 92, 255, 118, 128, 90, 255, 135, 147, 107, 255, 133, 141, 106, 255, 133, 140, 99, 255, 137, 143, 96, 255, 137, 144, 100, 255, 141, 149, 105, 255, 143, 151, 107, 255, 143, 150, 106, 255, 146, 152, 108, 255, 150, 153, 104, 255, 148, 151, 100, 255, 149, 151, 95, 255, 152, 151, 93, 255, 148, 147, 91, 255, 140, 139, 89, 255, 129, 136, 85, 255, 123, 133, 78, 255, 125, 127, 73, 255, 126, 121, 71, 255, 125, 116, 68, 255, 122, 114, 66, 255, 119, 108, 65, 255, 114, 104, 49, 255, 116, 102, 54, 255, 115, 97, 51, 255, 116, 95, 47, 255, 115, 92, 40, 255, 114, 88, 42, 255, 112, 90, 43, 255, 109, 92, 41, 255, 133, 108, 74, 255, 116, 84, 36, 255, 114, 80, 26, 255, 118, 78, 41, 255, 118, 74, 42, 255, 114, 76, 28, 255, 117, 75, 27, 255, 121, 78, 23, 255, 120, 72, 24, 255, 125, 75, 22, 255, 123, 76, 18, 255, 115, 74, 18, 255, 111, 70, 17, 255, 109, 67, 18, 255, 110, 66, 18, 255, 111, 65, 13, 255, 116, 69, 11, 255, 120, 67, 11, 255, 120, 72, 12, 255, 115, 70, 15, 255, 124, 68, 24, 255, 136, 74, 20, 255, 133, 71, 15, 255, 129, 74, 12, 255, 125, 68, 15, 255, 119, 63, 11, 255, 116, 65, 8, 255, 110, 66, 12, 255, 105, 60, 19, 255, 108, 58, 16, 255, 110, 58, 11, 255, 109, 58, 11, 255, 105, 57, 11, 255, 106, 56, 10, 255, 108, 55, 11, 255, 107, 54, 15, 255, 108, 55, 13, 255, 107, 55, 9, 255, 109, 56, 11, 255, 112, 58, 7, 255, 114, 60, 6, 255, 116, 62, 9, 255, 119, 63, 9, 255, 124, 66, 7, 255, 124, 70, 4, 255, 130, 72, 8, 255, 143, 79, 18, 255, 152, 82, 15, 255, 151, 79, 10, 255, 142, 72, 8, 255, 132, 71, 11, 255, 127, 66, 12, 255, 126, 64, 19, 255, 117, 61, 15, 255, 109, 57, 7, 255, 119, 62, 14, 255, 113, 60, 13, 255, 113, 60, 2, 255, 110, 58, 7, 255, 109, 57, 15, 255, 106, 56, 11, 255, 106, 54, 11, 255, 99, 47, 8, 255, 97, 51, 6, 255, 94, 51, 11, 255, 93, 48, 12, 255, 94, 46, 7, 255, 97, 48, 4, 255, 96, 47, 9, 255, 96, 45, 7, 255, 97, 46, 4, 255, 98, 51, 5, 255, 90, 45, 4, 255, 92, 47, 8, 255, 91, 43, 10, 255, 93, 43, 12, 255, 92, 42, 10, 255, 89, 41, 3, 255, 98, 49, 8, 255, 95, 44, 14, 255, 91, 41, 8, 255, 96, 43, 7, 255, 99, 43, 6, 255, 102, 44, 5, 255, 102, 42, 4, 255, 92, 44, 3, 255, 98, 41, 8, 255, 102, 39, 10, 255, 98, 45, 4, 255, 92, 42, 3, 255, 92, 42, 7, 255, 3, 0, 3, 255, 0, 1, 3, 255, 0, 2, 3, 255, 5, 8, 13, 255, 9, 21, 40, 255, 19, 38, 49, 255, 23, 37, 30, 255, 43, 49, 50, 255, 50, 54, 55, 255, 25, 32, 31, 255, 17, 25, 28, 255, 27, 29, 40, 255, 40, 38, 38, 255, 33, 32, 37, 255, 21, 20, 30, 255, 21, 11, 13, 255, 16, 5, 8, 255, 19, 14, 11, 255, 24, 21, 21, 255, 22, 27, 24, 255, 19, 24, 21, 255, 12, 8, 14, 255, 18, 6, 1, 255, 67, 11, 11, 255, 110, 19, 24, 255, 121, 21, 10, 255, 124, 18, 2, 255, 120, 20, 13, 255, 124, 24, 10, 255, 91, 16, 4, 255, 26, 3, 3, 255, 0, 0, 7, 255, 2, 1, 6, 255, 2, 1, 5, 255, 1, 1, 3, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 5, 255, 2, 1, 8, 255, 2, 1, 7, 255, 3, 2, 6, 255, 2, 2, 3, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 2, 255, 0, 0, 3, 255, 2, 0, 4, 255, 3, 1, 13, 255, 0, 4, 31, 255, 1, 4, 36, 255, 3, 3, 21, 255, 2, 2, 5, 255, 0, 1, 0, 255, 0, 0, 6, 255, 2, 0, 0, 255, 1, 0, 0, 255, 1, 0, 4, 255, 0, 0, 4, 255, 0, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 3, 255, 1, 1, 3, 255, 2, 0, 3, 255, 0, 2, 14, 255, 2, 2, 11, 255, 1, 1, 7, 255, 2, 0, 9, 255, 5, 2, 6, 255, 3, 2, 4, 255, 0, 0, 0, 255, 8, 8, 27, 255, 50, 51, 110, 255, 127, 130, 183, 255, 131, 134, 159, 255, 85, 84, 74, 255, 58, 54, 36, 255, 31, 26, 20, 255, 19, 11, 19, 255, 64, 48, 76, 255, 115, 103, 113, 255, 88, 90, 113, 255, 71, 71, 152, 255, 87, 76, 114, 255, 57, 53, 61, 255, 26, 19, 8, 255, 7, 0, 1, 255, 13, 3, 3, 255, 13, 8, 7, 255, 13, 11, 10, 255, 19, 14, 2, 255, 26, 10, 9, 255, 25, 16, 15, 255, 23, 18, 13, 255, 24, 15, 10, 255, 25, 15, 9, 255, 24, 15, 8, 255, 23, 14, 9, 255, 25, 16, 10, 255, 26, 15, 7, 255, 30, 19, 11, 255, 29, 18, 15, 255, 29, 20, 16, 255, 28, 19, 10, 255, 32, 20, 12, 255, 38, 26, 15, 255, 67, 48, 11, 255, 84, 53, 12, 255, 81, 43, 20, 255, 65, 40, 6, 255, 50, 34, 8, 255, 59, 31, 12, 255, 60, 37, 3, 255, 68, 37, 11, 255, 55, 35, 10, 255, 55, 32, 17, 255, 66, 32, 18, 255, 74, 38, 8, 255, 73, 42, 6, 255, 77, 42, 8, 255, 82, 46, 10, 255, 88, 54, 13, 255, 94, 56, 4, 255, 93, 50, 6, 255, 91, 55, 6, 255, 88, 53, 8, 255, 83, 48, 1, 255, 85, 49, 9, 255, 90, 47, 13, 255, 87, 47, 16, 255, 89, 53, 12, 255, 98, 56, 12, 255, 100, 56, 14, 255, 97, 52, 10, 255, 100, 54, 11, 255, 105, 58, 10, 255, 110, 62, 12, 255, 118, 73, 10, 255, 127, 80, 8, 255, 140, 80, 13, 255, 152, 86, 9, 255, 177, 101, 1, 255, 201, 142, 8, 255, 236, 189, 2, 255, 252, 204, 3, 255, 253, 186, 6, 255, 229, 143, 6, 255, 196, 117, 5, 255, 168, 101, 10, 255, 135, 77, 15, 255, 97, 49, 16, 255, 70, 39, 9, 255, 68, 41, 17, 255, 73, 38, 16, 255, 76, 33, 10, 255, 86, 39, 3, 255, 73, 40, 5, 255, 76, 36, 13, 255, 83, 38, 13, 255, 70, 41, 11, 255, 73, 36, 16, 255, 81, 39, 10, 255, 76, 41, 14, 255, 74, 41, 5, 255, 79, 46, 8, 255, 77, 43, 7, 255, 70, 37, 10, 255, 67, 38, 15, 255, 64, 36, 19, 255, 71, 39, 23, 255, 71, 41, 26, 255, 64, 37, 26, 255, 73, 42, 18, 255, 73, 44, 20, 255, 68, 47, 16, 255, 77, 53, 11, 255, 85, 52, 25, 255, 79, 51, 28, 255, 79, 52, 23, 255, 74, 57, 24, 255, 74, 58, 31, 255, 72, 57, 25, 255, 75, 57, 31, 255, 73, 56, 32, 255, 70, 57, 30, 255, 70, 56, 37, 255, 74, 61, 43, 255, 75, 65, 40, 255, 74, 64, 46, 255, 75, 66, 34, 255, 79, 68, 38, 255, 80, 74, 37, 255, 82, 69, 47, 255, 78, 69, 41, 255, 81, 72, 45, 255, 92, 72, 54, 255, 85, 74, 49, 255, 80, 75, 43, 255, 93, 76, 55, 255, 105, 77, 59, 255, 102, 81, 67, 255, 103, 80, 67, 255, 111, 82, 58, 255, 107, 83, 57, 255, 107, 82, 54, 255, 102, 81, 58, 255, 107, 86, 69, 255, 112, 87, 54, 255, 113, 89, 56, 255, 115, 90, 56, 255, 115, 91, 53, 255, 113, 89, 54, 255, 106, 89, 46, 255, 104, 91, 57, 255, 104, 89, 64, 255, 107, 93, 59, 255, 107, 94, 54, 255, 109, 94, 55, 255, 112, 96, 60, 255, 111, 96, 64, 255, 110, 96, 70, 255, 115, 98, 71, 255, 116, 101, 67, 255, 117, 104, 67, 255, 119, 106, 68, 255, 121, 110, 69, 255, 121, 113, 63, 255, 123, 115, 78, 255, 123, 118, 81, 255, 124, 123, 84, 255, 121, 125, 84, 255, 135, 145, 104, 255, 137, 146, 109, 255, 131, 137, 98, 255, 136, 139, 96, 255, 139, 145, 99, 255, 140, 146, 100, 255, 142, 147, 101, 255, 143, 146, 101, 255, 146, 148, 102, 255, 150, 150, 101, 255, 148, 148, 97, 255, 148, 147, 91, 255, 153, 150, 92, 255, 151, 146, 89, 255, 141, 139, 87, 255, 135, 131, 83, 255, 126, 126, 80, 255, 119, 129, 73, 255, 116, 123, 68, 255, 123, 117, 72, 255, 127, 115, 63, 255, 121, 108, 55, 255, 122, 106, 61, 255, 118, 99, 50, 255, 124, 102, 46, 255, 118, 94, 43, 255, 120, 90, 52, 255, 121, 88, 45, 255, 116, 92, 30, 255, 106, 89, 33, 255, 130, 110, 59, 255, 121, 89, 44, 255, 116, 80, 22, 255, 123, 83, 27, 255, 121, 78, 33, 255, 118, 78, 27, 255, 120, 77, 25, 255, 124, 76, 22, 255, 123, 70, 27, 255, 122, 73, 23, 255, 118, 77, 15, 255, 115, 71, 25, 255, 110, 68, 18, 255, 108, 66, 16, 255, 111, 68, 22, 255, 110, 65, 18, 255, 113, 67, 15, 255, 110, 67, 15, 255, 111, 68, 17, 255, 112, 67, 26, 255, 120, 72, 23, 255, 128, 77, 4, 255, 131, 76, 10, 255, 138, 79, 17, 255, 134, 76, 14, 255, 129, 69, 10, 255, 121, 68, 9, 255, 109, 65, 10, 255, 106, 61, 11, 255, 111, 60, 10, 255, 116, 62, 13, 255, 112, 61, 14, 255, 105, 57, 12, 255, 107, 57, 10, 255, 111, 59, 12, 255, 108, 56, 13, 255, 107, 57, 10, 255, 111, 60, 8, 255, 113, 59, 15, 255, 114, 59, 10, 255, 116, 62, 8, 255, 117, 64, 9, 255, 119, 65, 7, 255, 123, 63, 9, 255, 124, 63, 14, 255, 135, 71, 14, 255, 149, 80, 14, 255, 156, 80, 12, 255, 160, 80, 9, 255, 149, 75, 5, 255, 140, 73, 6, 255, 137, 72, 8, 255, 130, 68, 14, 255, 121, 64, 12, 255, 116, 62, 7, 255, 117, 62, 10, 255, 111, 57, 18, 255, 113, 57, 8, 255, 114, 60, 11, 255, 111, 58, 14, 255, 110, 58, 11, 255, 105, 54, 1, 255, 102, 53, 9, 255, 99, 55, 8, 255, 99, 51, 7, 255, 102, 50, 7, 255, 102, 46, 12, 255, 99, 52, 9, 255, 91, 47, 8, 255, 94, 48, 7, 255, 98, 46, 11, 255, 101, 48, 13, 255, 95, 45, 9, 255, 94, 41, 12, 255, 98, 43, 7, 255, 98, 42, 12, 255, 98, 45, 1, 255, 98, 43, 11, 255, 103, 49, 11, 255, 102, 50, 7, 255, 94, 44, 5, 255, 96, 42, 8, 255, 99, 41, 11, 255, 102, 41, 10, 255, 106, 43, 1, 255, 100, 45, 6, 255, 98, 42, 8, 255, 98, 39, 1, 255, 100, 40, 5, 255, 96, 39, 5, 255, 99, 40, 9, 255, 1, 0, 3, 255, 1, 2, 2, 255, 3, 2, 3, 255, 2, 4, 8, 255, 6, 9, 9, 255, 7, 5, 9, 255, 15, 15, 13, 255, 26, 31, 24, 255, 20, 29, 32, 255, 14, 15, 21, 255, 23, 16, 17, 255, 31, 23, 25, 255, 36, 34, 34, 255, 30, 35, 34, 255, 27, 27, 25, 255, 29, 17, 20, 255, 17, 10, 5, 255, 13, 5, 6, 255, 8, 4, 4, 255, 16, 14, 9, 255, 17, 20, 23, 255, 18, 15, 13, 255, 12, 13, 19, 255, 16, 10, 36, 255, 44, 8, 38, 255, 75, 16, 30, 255, 105, 25, 30, 255, 126, 28, 34, 255, 119, 24, 21, 255, 74, 10, 15, 255, 18, 4, 10, 255, 1, 0, 3, 255, 0, 1, 0, 255, 0, 1, 1, 255, 1, 1, 3, 255, 2, 1, 5, 255, 2, 1, 3, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 2, 255, 2, 2, 5, 255, 2, 1, 4, 255, 1, 1, 4, 255, 1, 0, 4, 255, 0, 0, 3, 255, 0, 0, 2, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 2, 255, 0, 0, 2, 255, 1, 1, 0, 255, 0, 1, 0, 255, 0, 1, 10, 255, 2, 3, 26, 255, 2, 5, 32, 255, 2, 3, 22, 255, 2, 2, 6, 255, 1, 0, 0, 255, 0, 0, 2, 255, 0, 1, 2, 255, 1, 0, 2, 255, 1, 0, 2, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 2, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 0, 0, 255, 2, 1, 4, 255, 2, 3, 13, 255, 2, 1, 14, 255, 1, 2, 13, 255, 0, 0, 3, 255, 0, 2, 5, 255, 5, 2, 2, 255, 0, 0, 0, 255, 4, 4, 19, 255, 52, 54, 100, 255, 118, 119, 176, 255, 135, 137, 162, 255, 90, 90, 85, 255, 56, 52, 48, 255, 36, 34, 23, 255, 18, 9, 12, 255, 61, 45, 54, 255, 107, 93, 113, 255, 101, 95, 146, 255, 86, 90, 152, 255, 83, 63, 83, 255, 58, 51, 74, 255, 24, 28, 13, 255, 1, 3, 0, 255, 10, 5, 8, 255, 17, 11, 13, 255, 16, 7, 7, 255, 15, 10, 9, 255, 17, 17, 10, 255, 25, 18, 5, 255, 28, 19, 9, 255, 24, 20, 6, 255, 20, 20, 13, 255, 24, 16, 13, 255, 28, 15, 14, 255, 24, 13, 11, 255, 22, 13, 10, 255, 26, 17, 14, 255, 26, 18, 15, 255, 31, 20, 11, 255, 29, 16, 11, 255, 38, 23, 18, 255, 54, 36, 11, 255, 74, 48, 19, 255, 81, 47, 28, 255, 69, 41, 15, 255, 48, 32, 16, 255, 50, 30, 12, 255, 63, 33, 6, 255, 61, 35, 15, 255, 70, 37, 6, 255, 77, 42, 8, 255, 67, 41, 15, 255, 61, 31, 9, 255, 64, 30, 8, 255, 73, 39, 10, 255, 69, 38, 5, 255, 77, 40, 12, 255, 77, 42, 7, 255, 78, 43, 9, 255, 84, 47, 4, 255, 87, 54, 8, 255, 88, 53, 11, 255, 91, 51, 9, 255, 91, 48, 10, 255, 83, 46, 8, 255, 80, 54, 8, 255, 87, 52, 7, 255, 88, 50, 13, 255, 96, 54, 7, 255, 104, 59, 12, 255, 105, 62, 15, 255, 102, 58, 7, 255, 110, 64, 6, 255, 120, 73, 8, 255, 126, 77, 7, 255, 138, 86, 12, 255, 156, 101, 14, 255, 178, 113, 6, 255, 202, 146, 3, 255, 238, 204, 5, 255, 255, 242, 3, 255, 252, 225, 1, 255, 244, 186, 2, 255, 214, 140, 5, 255, 151, 87, 9, 255, 125, 69, 9, 255, 114, 59, 8, 255, 94, 47, 9, 255, 84, 42, 12, 255, 84, 43, 11, 255, 79, 42, 11, 255, 75, 39, 13, 255, 76, 41, 10, 255, 74, 38, 14, 255, 75, 38, 12, 255, 71, 37, 8, 255, 78, 38, 15, 255, 76, 38, 10, 255, 71, 40, 14, 255, 74, 41, 2, 255, 80, 47, 7, 255, 78, 46, 11, 255, 80, 43, 12, 255, 77, 42, 7, 255, 68, 41, 7, 255, 69, 43, 12, 255, 71, 43, 16, 255, 68, 44, 16, 255, 72, 42, 22, 255, 69, 41, 11, 255, 72, 45, 24, 255, 74, 49, 21, 255, 77, 51, 16, 255, 78, 54, 18, 255, 78, 55, 18, 255, 79, 55, 29, 255, 84, 61, 24, 255, 79, 56, 23, 255, 79, 60, 29, 255, 69, 54, 24, 255, 76, 61, 31, 255, 74, 62, 22, 255, 73, 61, 26, 255, 72, 59, 44, 255, 79, 61, 39, 255, 82, 65, 27, 255, 77, 63, 35, 255, 77, 67, 42, 255, 77, 66, 43, 255, 74, 68, 38, 255, 78, 69, 26, 255, 80, 72, 45, 255, 81, 70, 50, 255, 88, 77, 44, 255, 86, 76, 45, 255, 82, 72, 41, 255, 88, 71, 51, 255, 102, 81, 57, 255, 103, 80, 59, 255, 108, 79, 64, 255, 109, 81, 55, 255, 105, 80, 51, 255, 115, 85, 47, 255, 107, 84, 43, 255, 104, 82, 55, 255, 112, 81, 53, 255, 114, 85, 51, 255, 114, 87, 51, 255, 115, 90, 51, 255, 110, 87, 48, 255, 107, 87, 51, 255, 105, 87, 52, 255, 104, 89, 53, 255, 107, 92, 59, 255, 108, 89, 57, 255, 112, 91, 55, 255, 113, 90, 58, 255, 109, 91, 61, 255, 112, 96, 65, 255, 118, 98, 61, 255, 121, 104, 54, 255, 120, 103, 65, 255, 118, 101, 76, 255, 125, 110, 72, 255, 125, 114, 60, 255, 124, 115, 69, 255, 128, 119, 73, 255, 129, 122, 74, 255, 124, 124, 85, 255, 128, 135, 101, 255, 140, 147, 107, 255, 135, 138, 99, 255, 135, 137, 97, 255, 136, 138, 94, 255, 139, 142, 93, 255, 143, 146, 96, 255, 145, 147, 98, 255, 145, 145, 97, 255, 147, 145, 97, 255, 145, 144, 95, 255, 144, 144, 88, 255, 152, 147, 88, 255, 149, 145, 83, 255, 141, 137, 76, 255, 139, 133, 77, 255, 130, 127, 74, 255, 123, 128, 65, 255, 116, 121, 69, 255, 118, 113, 70, 255, 128, 114, 61, 255, 126, 107, 58, 255, 121, 104, 55, 255, 119, 98, 51, 255, 125, 100, 52, 255, 118, 94, 37, 255, 120, 90, 42, 255, 121, 86, 47, 255, 122, 87, 46, 255, 109, 86, 41, 255, 123, 102, 52, 255, 127, 94, 53, 255, 116, 81, 32, 255, 120, 83, 24, 255, 120, 79, 25, 255, 121, 77, 19, 255, 122, 77, 27, 255, 122, 74, 24, 255, 123, 71, 26, 255, 123, 73, 21, 255, 122, 77, 21, 255, 113, 69, 25, 255, 110, 66, 23, 255, 107, 67, 21, 255, 105, 66, 16, 255, 108, 69, 16, 255, 108, 69, 20, 255, 111, 69, 24, 255, 108, 70, 11, 255, 120, 72, 5, 255, 122, 75, 14, 255, 123, 77, 12, 255, 140, 78, 13, 255, 143, 79, 11, 255, 134, 73, 7, 255, 135, 71, 6, 255, 126, 68, 12, 255, 110, 65, 15, 255, 109, 66, 13, 255, 114, 63, 12, 255, 119, 62, 7, 255, 113, 63, 8, 255, 105, 61, 10, 255, 107, 59, 8, 255, 108, 57, 6, 255, 106, 55, 14, 255, 107, 59, 11, 255, 112, 63, 7, 255, 113, 58, 14, 255, 117, 60, 10, 255, 116, 64, 6, 255, 119, 65, 9, 255, 119, 64, 5, 255, 119, 67, 8, 255, 122, 67, 13, 255, 131, 69, 13, 255, 146, 77, 12, 255, 157, 82, 7, 255, 160, 80, 11, 255, 151, 77, 5, 255, 146, 74, 10, 255, 143, 70, 15, 255, 134, 70, 9, 255, 129, 66, 8, 255, 127, 63, 11, 255, 118, 62, 6, 255, 113, 63, 5, 255, 112, 58, 5, 255, 116, 60, 8, 255, 111, 57, 10, 255, 110, 56, 14, 255, 111, 57, 8, 255, 110, 56, 5, 255, 103, 54, 4, 255, 102, 51, 9, 255, 104, 47, 14, 255, 105, 49, 8, 255, 99, 49, 5, 255, 91, 47, 7, 255, 94, 48, 9, 255, 103, 48, 10, 255, 108, 51, 7, 255, 97, 46, 7, 255, 96, 47, 12, 255, 100, 50, 8, 255, 101, 46, 4, 255, 102, 45, 7, 255, 107, 47, 8, 255, 105, 46, 8, 255, 105, 48, 6, 255, 103, 46, 6, 255, 102, 46, 9, 255, 96, 44, 12, 255, 99, 44, 10, 255, 105, 46, 7, 255, 104, 45, 8, 255, 94, 46, 7, 255, 93, 43, 2, 255, 99, 41, 4, 255, 99, 44, 4, 255, 104, 49, 7, 255, 1, 1, 2, 255, 1, 0, 2, 255, 3, 1, 6, 255, 0, 0, 3, 255, 2, 0, 3, 255, 3, 0, 1, 255, 2, 1, 0, 255, 1, 2, 0, 255, 5, 10, 7, 255, 13, 16, 17, 255, 24, 16, 19, 255, 23, 26, 31, 255, 30, 30, 29, 255, 21, 26, 17, 255, 21, 24, 20, 255, 33, 25, 25, 255, 20, 20, 10, 255, 11, 8, 7, 255, 5, 0, 2, 255, 5, 0, 2, 255, 12, 2, 7, 255, 24, 15, 13, 255, 33, 25, 28, 255, 15, 19, 44, 255, 8, 13, 46, 255, 27, 24, 60, 255, 59, 36, 66, 255, 68, 36, 61, 255, 50, 23, 54, 255, 31, 16, 46, 255, 22, 15, 36, 255, 10, 4, 15, 255, 1, 0, 0, 255, 1, 0, 1, 255, 2, 1, 5, 255, 1, 1, 4, 255, 1, 2, 2, 255, 1, 1, 3, 255, 1, 0, 4, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 3, 255, 1, 0, 6, 255, 1, 0, 6, 255, 2, 1, 4, 255, 0, 0, 2, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 1, 255, 1, 0, 3, 255, 1, 0, 4, 255, 0, 0, 2, 255, 0, 1, 1, 255, 1, 3, 13, 255, 2, 4, 31, 255, 2, 3, 30, 255, 1, 4, 13, 255, 1, 1, 1, 255, 1, 0, 0, 255, 0, 0, 2, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 2, 255, 0, 0, 3, 255, 0, 1, 0, 255, 0, 2, 0, 255, 0, 0, 0, 255, 0, 0, 2, 255, 1, 1, 6, 255, 3, 2, 10, 255, 1, 3, 10, 255, 2, 1, 14, 255, 1, 1, 8, 255, 4, 4, 11, 255, 1, 0, 2, 255, 0, 0, 0, 255, 45, 39, 88, 255, 118, 118, 174, 255, 137, 137, 155, 255, 104, 103, 110, 255, 59, 60, 60, 255, 34, 26, 15, 255, 22, 12, 13, 255, 45, 36, 53, 255, 110, 93, 112, 255, 112, 107, 139, 255, 103, 93, 128, 255, 84, 81, 118, 255, 56, 69, 82, 255, 29, 24, 16, 255, 8, 4, 1, 255, 4, 2, 4, 255, 12, 6, 7, 255, 10, 7, 5, 255, 12, 12, 6, 255, 25, 17, 12, 255, 27, 22, 20, 255, 27, 24, 14, 255, 27, 24, 10, 255, 22, 19, 12, 255, 25, 17, 11, 255, 21, 17, 11, 255, 23, 13, 7, 255, 27, 14, 8, 255, 29, 17, 15, 255, 30, 18, 10, 255, 27, 19, 14, 255, 18, 15, 14, 255, 30, 20, 11, 255, 59, 32, 17, 255, 80, 47, 26, 255, 67, 48, 19, 255, 57, 34, 7, 255, 55, 26, 8, 255, 39, 22, 15, 255, 43, 27, 15, 255, 56, 34, 8, 255, 69, 40, 12, 255, 74, 40, 18, 255, 76, 38, 16, 255, 75, 39, 9, 255, 77, 38, 9, 255, 76, 38, 5, 255, 73, 37, 12, 255, 69, 39, 14, 255, 69, 40, 8, 255, 74, 35, 14, 255, 89, 45, 15, 255, 81, 47, 13, 255, 79, 47, 5, 255, 85, 52, 7, 255, 85, 53, 10, 255, 83, 46, 13, 255, 85, 47, 6, 255, 81, 48, 13, 255, 85, 53, 12, 255, 90, 52, 8, 255, 95, 55, 9, 255, 108, 62, 6, 255, 117, 69, 6, 255, 127, 76, 14, 255, 117, 66, 8, 255, 114, 67, 7, 255, 139, 88, 14, 255, 156, 97, 9, 255, 168, 111, 6, 255, 188, 131, 5, 255, 220, 165, 2, 255, 253, 216, 1, 255, 253, 233, 2, 255, 229, 173, 2, 255, 202, 123, 3, 255, 185, 111, 5, 255, 151, 89, 4, 255, 99, 60, 5, 255, 81, 49, 10, 255, 86, 45, 12, 255, 87, 46, 11, 255, 84, 47, 10, 255, 87, 46, 8, 255, 80, 40, 11, 255, 74, 42, 10, 255, 75, 43, 7, 255, 68, 38, 8, 255, 72, 43, 9, 255, 75, 48, 11, 255, 74, 42, 21, 255, 76, 39, 14, 255, 74, 42, 16, 255, 76, 44, 7, 255, 82, 42, 13, 255, 86, 45, 18, 255, 85, 45, 14, 255, 84, 44, 9, 255, 79, 43, 15, 255, 71, 43, 7, 255, 76, 46, 11, 255, 76, 43, 14, 255, 76, 43, 16, 255, 72, 46, 10, 255, 69, 45, 22, 255, 75, 46, 21, 255, 70, 45, 19, 255, 72, 54, 18, 255, 81, 59, 24, 255, 80, 54, 28, 255, 85, 56, 28, 255, 78, 55, 29, 255, 74, 62, 15, 255, 76, 54, 23, 255, 79, 55, 31, 255, 79, 60, 25, 255, 79, 64, 19, 255, 82, 59, 28, 255, 78, 61, 37, 255, 80, 65, 29, 255, 82, 64, 37, 255, 76, 67, 42, 255, 79, 66, 39, 255, 78, 67, 40, 255, 76, 65, 45, 255, 78, 73, 45, 255, 75, 71, 47, 255, 78, 73, 42, 255, 77, 72, 37, 255, 85, 76, 48, 255, 85, 75, 49, 255, 95, 78, 47, 255, 105, 77, 55, 255, 106, 81, 58, 255, 110, 80, 56, 255, 106, 79, 44, 255, 105, 81, 45, 255, 107, 82, 38, 255, 109, 83, 48, 255, 112, 82, 53, 255, 116, 85, 49, 255, 115, 85, 49, 255, 112, 89, 53, 255, 105, 87, 49, 255, 109, 89, 55, 255, 107, 89, 50, 255, 108, 89, 48, 255, 108, 87, 54, 255, 111, 89, 54, 255, 115, 90, 56, 255, 115, 89, 59, 255, 115, 92, 54, 255, 117, 100, 59, 255, 114, 95, 61, 255, 115, 99, 58, 255, 116, 101, 59, 255, 117, 101, 59, 255, 123, 105, 67, 255, 127, 110, 70, 255, 128, 114, 69, 255, 124, 115, 70, 255, 126, 123, 73, 255, 126, 125, 77, 255, 126, 125, 86, 255, 138, 144, 100, 255, 135, 142, 95, 255, 133, 136, 89, 255, 137, 137, 86, 255, 141, 140, 89, 255, 143, 142, 90, 255, 142, 144, 91, 255, 140, 141, 94, 255, 146, 143, 94, 255, 149, 143, 91, 255, 147, 142, 88, 255, 150, 146, 86, 255, 151, 144, 81, 255, 142, 138, 76, 255, 137, 134, 73, 255, 129, 126, 66, 255, 127, 125, 70, 255, 123, 120, 63, 255, 119, 116, 60, 255, 123, 114, 54, 255, 130, 112, 37, 255, 123, 106, 51, 255, 120, 101, 51, 255, 125, 98, 52, 255, 120, 90, 50, 255, 117, 89, 46, 255, 120, 90, 46, 255, 122, 87, 38, 255, 113, 88, 28, 255, 118, 94, 48, 255, 131, 99, 55, 255, 124, 81, 34, 255, 120, 81, 29, 255, 124, 80, 28, 255, 119, 75, 25, 255, 116, 74, 31, 255, 120, 75, 31, 255, 123, 75, 26, 255, 122, 75, 18, 255, 120, 76, 12, 255, 121, 73, 22, 255, 113, 69, 21, 255, 103, 67, 19, 255, 104, 70, 18, 255, 103, 67, 14, 255, 108, 69, 19, 255, 114, 68, 14, 255, 110, 71, 11, 255, 117, 70, 9, 255, 125, 72, 10, 255, 134, 78, 10, 255, 146, 76, 7, 255, 139, 74, 8, 255, 132, 71, 8, 255, 132, 72, 14, 255, 128, 74, 17, 255, 116, 70, 5, 255, 110, 64, 0, 255, 113, 62, 5, 255, 115, 62, 10, 255, 114, 62, 16, 255, 110, 61, 13, 255, 106, 57, 7, 255, 107, 57, 11, 255, 106, 57, 14, 255, 106, 57, 7, 255, 114, 63, 6, 255, 113, 60, 5, 255, 115, 60, 2, 255, 118, 59, 8, 255, 114, 61, 4, 255, 118, 62, 5, 255, 118, 66, 7, 255, 120, 66, 10, 255, 131, 73, 12, 255, 142, 77, 7, 255, 159, 85, 16, 255, 165, 85, 17, 255, 153, 78, 9, 255, 145, 74, 7, 255, 143, 71, 13, 255, 141, 73, 16, 255, 139, 72, 11, 255, 134, 66, 6, 255, 123, 61, 9, 255, 114, 61, 12, 255, 116, 59, 14, 255, 117, 62, 6, 255, 115, 61, 5, 255, 113, 58, 9, 255, 111, 58, 12, 255, 107, 51, 9, 255, 104, 49, 9, 255, 108, 54, 7, 255, 105, 53, 8, 255, 103, 55, 3, 255, 100, 50, 9, 255, 99, 48, 14, 255, 97, 42, 13, 255, 102, 48, 12, 255, 106, 54, 7, 255, 103, 51, 5, 255, 98, 50, 7, 255, 98, 50, 10, 255, 98, 46, 7, 255, 98, 45, 15, 255, 102, 49, 3, 255, 102, 46, 7, 255, 106, 50, 9, 255, 104, 47, 5, 255, 103, 48, 8, 255, 97, 49, 2, 255, 102, 50, 2, 255, 107, 50, 5, 255, 101, 48, 5, 255, 96, 45, 4, 255, 106, 45, 7, 255, 102, 41, 4, 255, 102, 42, 3, 255, 102, 47, 5, 255, 2, 1, 1, 255, 0, 1, 9, 255, 3, 8, 13, 255, 4, 6, 8, 255, 1, 0, 4, 255, 0, 0, 6, 255, 0, 1, 6, 255, 4, 0, 1, 255, 4, 2, 4, 255, 7, 6, 5, 255, 14, 6, 11, 255, 56, 28, 22, 255, 83, 33, 21, 255, 51, 31, 20, 255, 40, 30, 30, 255, 12, 16, 11, 255, 10, 6, 2, 255, 16, 2, 2, 255, 11, 2, 2, 255, 7, 0, 1, 255, 10, 1, 3, 255, 18, 10, 4, 255, 25, 20, 9, 255, 25, 24, 21, 255, 22, 25, 28, 255, 20, 25, 28, 255, 17, 22, 33, 255, 11, 16, 33, 255, 17, 16, 33, 255, 14, 13, 19, 255, 13, 9, 12, 255, 5, 4, 9, 255, 1, 1, 1, 255, 0, 0, 3, 255, 1, 1, 4, 255, 0, 1, 1, 255, 0, 2, 0, 255, 3, 2, 5, 255, 2, 1, 9, 255, 2, 1, 7, 255, 1, 1, 2, 255, 1, 1, 3, 255, 1, 0, 4, 255, 1, 1, 3, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 0, 255, 1, 1, 1, 255, 0, 1, 1, 255, 2, 3, 15, 255, 6, 6, 35, 255, 4, 4, 34, 255, 1, 3, 15, 255, 0, 2, 3, 255, 1, 1, 1, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 0, 3, 255, 2, 2, 2, 255, 2, 1, 0, 255, 1, 1, 5, 255, 3, 0, 7, 255, 4, 0, 7, 255, 3, 0, 9, 255, 1, 0, 8, 255, 1, 0, 6, 255, 2, 1, 6, 255, 0, 0, 0, 255, 0, 0, 7, 255, 21, 28, 76, 255, 101, 110, 171, 255, 140, 137, 171, 255, 105, 105, 108, 255, 63, 65, 64, 255, 29, 28, 25, 255, 11, 11, 12, 255, 47, 33, 45, 255, 92, 87, 112, 255, 109, 99, 137, 255, 100, 96, 167, 255, 40, 86, 202, 255, 61, 65, 92, 255, 37, 32, 20, 255, 5, 9, 0, 255, 2, 1, 3, 255, 12, 5, 11, 255, 17, 9, 6, 255, 16, 10, 4, 255, 25, 21, 16, 255, 30, 30, 13, 255, 31, 29, 12, 255, 33, 26, 10, 255, 25, 21, 8, 255, 27, 18, 7, 255, 30, 22, 8, 255, 19, 17, 10, 255, 19, 18, 7, 255, 27, 16, 12, 255, 33, 19, 12, 255, 31, 19, 8, 255, 19, 17, 4, 255, 31, 21, 9, 255, 53, 36, 16, 255, 71, 50, 22, 255, 71, 42, 15, 255, 54, 29, 5, 255, 36, 23, 10, 255, 40, 22, 11, 255, 51, 30, 4, 255, 44, 26, 15, 255, 47, 27, 13, 255, 58, 34, 15, 255, 69, 38, 12, 255, 68, 39, 9, 255, 65, 39, 6, 255, 67, 38, 9, 255, 71, 41, 7, 255, 78, 45, 9, 255, 80, 43, 9, 255, 75, 37, 9, 255, 76, 40, 13, 255, 77, 41, 12, 255, 87, 44, 13, 255, 79, 46, 8, 255, 80, 45, 8, 255, 81, 47, 6, 255, 80, 48, 8, 255, 84, 47, 15, 255, 79, 47, 7, 255, 80, 48, 8, 255, 92, 51, 12, 255, 95, 54, 9, 255, 95, 60, 6, 255, 105, 67, 7, 255, 115, 74, 12, 255, 141, 88, 11, 255, 138, 82, 9, 255, 133, 79, 4, 255, 161, 102, 7, 255, 184, 120, 9, 255, 201, 137, 7, 255, 221, 162, 4, 255, 236, 183, 3, 255, 248, 182, 4, 255, 207, 128, 8, 255, 134, 68, 18, 255, 115, 62, 7, 255, 109, 64, 8, 255, 95, 50, 13, 255, 92, 52, 12, 255, 88, 52, 8, 255, 87, 49, 13, 255, 84, 45, 10, 255, 82, 43, 9, 255, 80, 47, 5, 255, 78, 42, 9, 255, 82, 40, 8, 255, 83, 43, 15, 255, 84, 46, 14, 255, 85, 44, 10, 255, 84, 44, 9, 255, 84, 44, 11, 255, 74, 42, 10, 255, 74, 43, 22, 255, 83, 47, 4, 255, 90, 50, 13, 255, 85, 48, 14, 255, 86, 49, 18, 255, 86, 52, 15, 255, 79, 45, 27, 255, 79, 50, 14, 255, 77, 48, 17, 255, 77, 51, 13, 255, 77, 45, 18, 255, 73, 43, 29, 255, 73, 45, 28, 255, 77, 46, 26, 255, 70, 46, 25, 255, 76, 54, 20, 255, 84, 56, 19, 255, 85, 61, 27, 255, 78, 54, 28, 255, 81, 56, 30, 255, 75, 59, 25, 255, 77, 57, 21, 255, 79, 58, 25, 255, 76, 56, 35, 255, 80, 59, 32, 255, 86, 62, 27, 255, 78, 62, 34, 255, 76, 62, 29, 255, 85, 71, 29, 255, 80, 67, 38, 255, 79, 65, 40, 255, 80, 67, 33, 255, 80, 71, 44, 255, 75, 69, 39, 255, 80, 72, 45, 255, 81, 71, 41, 255, 81, 72, 46, 255, 88, 77, 49, 255, 80, 75, 40, 255, 85, 72, 43, 255, 102, 75, 61, 255, 101, 79, 59, 255, 110, 79, 49, 255, 105, 76, 48, 255, 100, 79, 52, 255, 105, 78, 44, 255, 109, 80, 45, 255, 107, 80, 49, 255, 112, 81, 61, 255, 117, 85, 52, 255, 114, 89, 47, 255, 108, 87, 44, 255, 109, 87, 45, 255, 104, 85, 48, 255, 106, 85, 52, 255, 111, 89, 45, 255, 111, 90, 44, 255, 111, 87, 53, 255, 114, 90, 58, 255, 112, 92, 56, 255, 114, 96, 51, 255, 117, 93, 54, 255, 114, 95, 60, 255, 114, 99, 60, 255, 120, 106, 57, 255, 117, 103, 63, 255, 122, 109, 68, 255, 126, 113, 67, 255, 126, 112, 76, 255, 130, 119, 79, 255, 130, 124, 75, 255, 129, 127, 82, 255, 136, 139, 99, 255, 137, 144, 101, 255, 131, 134, 87, 255, 139, 138, 87, 255, 141, 139, 88, 255, 141, 141, 86, 255, 143, 143, 88, 255, 142, 143, 92, 255, 144, 141, 87, 255, 149, 140, 84, 255, 147, 140, 82, 255, 148, 142, 81, 255, 152, 143, 77, 255, 145, 138, 76, 255, 135, 129, 69, 255, 131, 126, 65, 255, 129, 124, 71, 255, 121, 119, 65, 255, 120, 115, 63, 255, 124, 112, 64, 255, 128, 107, 57, 255, 124, 104, 53, 255, 117, 99, 53, 255, 123, 97, 50, 255, 122, 91, 39, 255, 116, 89, 39, 255, 121, 93, 35, 255, 124, 89, 38, 255, 116, 88, 31, 255, 112, 88, 41, 255, 129, 101, 53, 255, 128, 85, 37, 255, 121, 80, 23, 255, 125, 79, 24, 255, 121, 76, 26, 255, 117, 76, 19, 255, 119, 76, 27, 255, 120, 71, 32, 255, 119, 71, 20, 255, 120, 74, 25, 255, 123, 71, 22, 255, 117, 71, 18, 255, 109, 70, 15, 255, 110, 74, 20, 255, 112, 71, 20, 255, 115, 69, 17, 255, 118, 67, 14, 255, 113, 67, 16, 255, 118, 69, 10, 255, 125, 71, 11, 255, 133, 74, 15, 255, 142, 75, 11, 255, 141, 77, 13, 255, 140, 77, 9, 255, 132, 73, 10, 255, 124, 69, 12, 255, 117, 64, 12, 255, 116, 64, 13, 255, 114, 62, 13, 255, 114, 64, 8, 255, 113, 62, 8, 255, 112, 61, 3, 255, 110, 60, 2, 255, 106, 58, 11, 255, 106, 55, 19, 255, 110, 58, 11, 255, 115, 59, 2, 255, 112, 62, 8, 255, 109, 61, 6, 255, 118, 62, 16, 255, 120, 65, 10, 255, 124, 63, 12, 255, 124, 65, 8, 255, 128, 69, 11, 255, 133, 74, 8, 255, 143, 77, 8, 255, 154, 79, 8, 255, 162, 82, 10, 255, 155, 80, 5, 255, 149, 79, 10, 255, 143, 75, 10, 255, 142, 74, 11, 255, 138, 70, 9, 255, 128, 65, 7, 255, 124, 64, 7, 255, 119, 64, 5, 255, 121, 64, 9, 255, 121, 66, 2, 255, 117, 63, 2, 255, 113, 62, 4, 255, 111, 60, 10, 255, 109, 55, 14, 255, 107, 55, 7, 255, 107, 51, 12, 255, 110, 54, 11, 255, 109, 59, 3, 255, 102, 52, 6, 255, 101, 48, 5, 255, 103, 46, 5, 255, 104, 50, 7, 255, 103, 53, 6, 255, 105, 54, 5, 255, 102, 53, 6, 255, 103, 49, 8, 255, 102, 47, 9, 255, 101, 47, 10, 255, 101, 49, 3, 255, 102, 45, 10, 255, 106, 48, 9, 255, 106, 49, 2, 255, 103, 49, 4, 255, 101, 50, 3, 255, 102, 49, 7, 255, 104, 45, 5, 255, 101, 47, 3, 255, 100, 45, 0, 255, 109, 49, 7, 255, 97, 44, 11, 255, 94, 39, 11, 255, 99, 43, 9, 255, 4, 0, 6, 255, 2, 4, 15, 255, 9, 13, 30, 255, 6, 8, 17, 255, 2, 2, 4, 255, 1, 2, 2, 255, 0, 1, 2, 255, 0, 1, 1, 255, 0, 0, 4, 255, 0, 0, 4, 255, 47, 0, 5, 255, 162, 36, 11, 255, 163, 56, 25, 255, 129, 46, 27, 255, 55, 15, 13, 255, 0, 3, 0, 255, 8, 0, 1, 255, 19, 1, 3, 255, 13, 4, 2, 255, 10, 1, 1, 255, 11, 2, 3, 255, 10, 2, 0, 255, 21, 8, 2, 255, 28, 12, 10, 255, 31, 21, 20, 255, 29, 25, 24, 255, 24, 22, 24, 255, 19, 19, 19, 255, 17, 18, 17, 255, 12, 10, 10, 255, 8, 8, 7, 255, 1, 2, 1, 255, 1, 2, 3, 255, 0, 0, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 2, 255, 1, 1, 3, 255, 2, 1, 6, 255, 2, 1, 6, 255, 1, 1, 3, 255, 1, 1, 3, 255, 1, 1, 3, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 4, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 1, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 2, 1, 255, 2, 5, 15, 255, 6, 6, 35, 255, 5, 4, 32, 255, 1, 3, 9, 255, 0, 3, 0, 255, 0, 1, 1, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 0, 0, 255, 1, 1, 1, 255, 1, 1, 5, 255, 0, 0, 10, 255, 2, 1, 7, 255, 0, 2, 5, 255, 0, 2, 6, 255, 2, 2, 2, 255, 1, 0, 1, 255, 0, 0, 3, 255, 22, 22, 60, 255, 74, 80, 154, 255, 131, 140, 173, 255, 118, 116, 112, 255, 66, 66, 60, 255, 34, 41, 26, 255, 15, 12, 15, 255, 30, 28, 42, 255, 89, 79, 104, 255, 117, 101, 140, 255, 103, 92, 151, 255, 79, 84, 146, 255, 74, 63, 93, 255, 50, 35, 24, 255, 10, 6, 1, 255, 3, 0, 1, 255, 20, 7, 11, 255, 19, 10, 10, 255, 21, 17, 13, 255, 30, 33, 13, 255, 36, 38, 17, 255, 38, 35, 20, 255, 36, 35, 17, 255, 31, 33, 15, 255, 30, 22, 15, 255, 26, 21, 7, 255, 29, 24, 7, 255, 35, 20, 11, 255, 29, 23, 11, 255, 25, 19, 18, 255, 24, 19, 10, 255, 28, 19, 8, 255, 43, 26, 10, 255, 67, 37, 28, 255, 69, 45, 20, 255, 58, 34, 12, 255, 39, 22, 11, 255, 23, 18, 18, 255, 30, 24, 18, 255, 43, 23, 13, 255, 49, 24, 9, 255, 50, 29, 6, 255, 51, 26, 15, 255, 50, 27, 9, 255, 56, 36, 5, 255, 59, 34, 10, 255, 63, 34, 16, 255, 70, 36, 9, 255, 71, 37, 9, 255, 77, 44, 14, 255, 80, 43, 9, 255, 82, 41, 3, 255, 79, 40, 6, 255, 68, 40, 13, 255, 72, 43, 15, 255, 85, 49, 11, 255, 78, 50, 2, 255, 79, 46, 3, 255, 85, 52, 10, 255, 84, 49, 5, 255, 83, 48, 12, 255, 75, 47, 14, 255, 83, 49, 8, 255, 91, 48, 10, 255, 97, 56, 8, 255, 98, 59, 10, 255, 108, 64, 9, 255, 122, 79, 15, 255, 141, 88, 4, 255, 147, 89, 11, 255, 153, 100, 8, 255, 171, 108, 9, 255, 192, 127, 4, 255, 200, 143, 3, 255, 215, 150, 6, 255, 215, 141, 3, 255, 172, 101, 8, 255, 112, 52, 12, 255, 87, 43, 12, 255, 90, 47, 10, 255, 87, 56, 5, 255, 92, 54, 9, 255, 93, 49, 16, 255, 91, 50, 6, 255, 93, 49, 5, 255, 96, 46, 8, 255, 98, 49, 9, 255, 88, 52, 10, 255, 85, 50, 11, 255, 89, 44, 12, 255, 80, 45, 17, 255, 78, 50, 13, 255, 80, 43, 8, 255, 79, 49, 3, 255, 79, 46, 8, 255, 80, 42, 11, 255, 79, 40, 23, 255, 79, 44, 11, 255, 84, 49, 7, 255, 92, 51, 15, 255, 92, 49, 15, 255, 85, 53, 6, 255, 79, 47, 14, 255, 85, 47, 8, 255, 79, 45, 17, 255, 75, 53, 15, 255, 75, 46, 17, 255, 76, 43, 21, 255, 78, 47, 21, 255, 77, 48, 27, 255, 71, 49, 25, 255, 77, 54, 18, 255, 83, 56, 21, 255, 77, 55, 23, 255, 80, 58, 29, 255, 87, 58, 20, 255, 84, 59, 24, 255, 80, 60, 29, 255, 78, 61, 27, 255, 74, 59, 25, 255, 80, 59, 30, 255, 75, 61, 30, 255, 76, 61, 32, 255, 75, 62, 36, 255, 78, 66, 40, 255, 83, 67, 40, 255, 78, 63, 27, 255, 85, 70, 40, 255, 81, 69, 36, 255, 83, 71, 46, 255, 87, 74, 39, 255, 86, 75, 38, 255, 85, 75, 46, 255, 86, 72, 38, 255, 81, 72, 45, 255, 81, 75, 48, 255, 98, 79, 40, 255, 102, 74, 54, 255, 107, 76, 49, 255, 106, 75, 43, 255, 101, 77, 47, 255, 105, 75, 46, 255, 107, 77, 48, 255, 109, 80, 49, 255, 112, 80, 53, 255, 120, 87, 45, 255, 117, 87, 45, 255, 111, 83, 49, 255, 112, 83, 48, 255, 108, 84, 42, 255, 106, 86, 45, 255, 108, 90, 43, 255, 111, 90, 42, 255, 110, 88, 44, 255, 111, 89, 55, 255, 108, 87, 57, 255, 111, 92, 51, 255, 118, 93, 56, 255, 116, 95, 55, 255, 114, 96, 55, 255, 118, 100, 56, 255, 120, 103, 62, 255, 119, 108, 62, 255, 122, 109, 62, 255, 130, 113, 71, 255, 131, 115, 72, 255, 132, 123, 74, 255, 127, 126, 78, 255, 133, 132, 92, 255, 147, 146, 105, 255, 138, 137, 92, 255, 138, 135, 87, 255, 137, 136, 79, 255, 137, 139, 81, 255, 141, 140, 88, 255, 140, 138, 85, 255, 145, 140, 85, 255, 148, 139, 80, 255, 147, 138, 76, 255, 149, 141, 76, 255, 153, 142, 73, 255, 146, 136, 72, 255, 138, 135, 65, 255, 138, 128, 64, 255, 131, 120, 55, 255, 120, 121, 59, 255, 115, 113, 65, 255, 123, 109, 54, 255, 129, 109, 54, 255, 124, 104, 51, 255, 119, 100, 58, 255, 120, 99, 43, 255, 123, 96, 45, 255, 121, 93, 36, 255, 122, 91, 42, 255, 124, 87, 41, 255, 117, 93, 28, 255, 112, 89, 27, 255, 123, 100, 40, 255, 122, 88, 35, 255, 120, 79, 26, 255, 123, 79, 26, 255, 123, 76, 32, 255, 120, 77, 26, 255, 122, 79, 25, 255, 122, 75, 29, 255, 119, 71, 22, 255, 120, 74, 20, 255, 120, 73, 25, 255, 114, 72, 22, 255, 105, 68, 13, 255, 107, 73, 13, 255, 109, 71, 12, 255, 113, 68, 18, 255, 118, 68, 11, 255, 117, 67, 5, 255, 118, 70, 6, 255, 124, 73, 9, 255, 131, 73, 11, 255, 140, 76, 9, 255, 143, 77, 11, 255, 144, 75, 13, 255, 137, 75, 12, 255, 130, 71, 11, 255, 121, 66, 9, 255, 117, 65, 12, 255, 115, 62, 12, 255, 112, 61, 7, 255, 116, 64, 11, 255, 111, 59, 2, 255, 112, 63, 2, 255, 113, 63, 9, 255, 107, 56, 8, 255, 111, 60, 8, 255, 116, 62, 10, 255, 115, 61, 15, 255, 114, 60, 5, 255, 120, 62, 4, 255, 123, 69, 3, 255, 122, 64, 5, 255, 126, 64, 13, 255, 130, 71, 11, 255, 130, 69, 8, 255, 143, 75, 15, 255, 155, 80, 7, 255, 162, 83, 12, 255, 162, 83, 12, 255, 157, 81, 11, 255, 147, 75, 7, 255, 144, 74, 8, 255, 140, 72, 9, 255, 132, 66, 10, 255, 126, 62, 9, 255, 125, 67, 6, 255, 123, 63, 8, 255, 122, 65, 3, 255, 116, 60, 8, 255, 111, 58, 7, 255, 113, 62, 5, 255, 104, 56, 7, 255, 105, 61, 2, 255, 99, 54, 3, 255, 103, 57, 4, 255, 112, 60, 1, 255, 104, 51, 12, 255, 102, 54, 6, 255, 109, 52, 7, 255, 107, 49, 8, 255, 106, 53, 9, 255, 104, 52, 5, 255, 103, 54, 4, 255, 108, 52, 3, 255, 107, 51, 7, 255, 100, 44, 7, 255, 103, 51, 6, 255, 108, 51, 13, 255, 105, 47, 4, 255, 106, 47, 3, 255, 105, 48, 11, 255, 101, 49, 7, 255, 96, 45, 0, 255, 106, 47, 8, 255, 109, 50, 13, 255, 103, 49, 7, 255, 106, 53, 4, 255, 103, 51, 1, 255, 99, 42, 5, 255, 100, 43, 9, 255, 4, 8, 25, 255, 0, 1, 4, 255, 4, 7, 18, 255, 10, 17, 36, 255, 2, 8, 13, 255, 2, 1, 2, 255, 2, 1, 2, 255, 1, 2, 4, 255, 0, 1, 0, 255, 0, 0, 0, 255, 102, 11, 15, 255, 197, 51, 15, 255, 178, 58, 16, 255, 153, 33, 5, 255, 87, 5, 3, 255, 22, 4, 3, 255, 13, 1, 1, 255, 19, 2, 2, 255, 21, 3, 2, 255, 10, 0, 0, 255, 9, 0, 1, 255, 12, 0, 1, 255, 21, 0, 4, 255, 24, 1, 7, 255, 23, 9, 13, 255, 23, 20, 16, 255, 27, 25, 17, 255, 26, 27, 26, 255, 18, 22, 22, 255, 21, 18, 15, 255, 15, 12, 10, 255, 8, 4, 5, 255, 0, 1, 3, 255, 0, 0, 0, 255, 1, 1, 0, 255, 1, 0, 0, 255, 2, 0, 2, 255, 0, 2, 1, 255, 1, 1, 2, 255, 1, 1, 2, 255, 1, 1, 2, 255, 0, 0, 2, 255, 1, 1, 3, 255, 1, 1, 4, 255, 1, 1, 3, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 1, 1, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 4, 255, 1, 1, 9, 255, 1, 4, 19, 255, 3, 5, 22, 255, 2, 6, 10, 255, 0, 2, 0, 255, 0, 0, 5, 255, 1, 0, 4, 255, 0, 1, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 3, 255, 0, 1, 7, 255, 1, 2, 4, 255, 3, 1, 9, 255, 2, 0, 5, 255, 2, 0, 3, 255, 2, 2, 0, 255, 0, 0, 3, 255, 16, 21, 46, 255, 68, 73, 125, 255, 127, 124, 166, 255, 123, 119, 115, 255, 78, 75, 55, 255, 43, 34, 34, 255, 15, 13, 15, 255, 36, 25, 41, 255, 87, 74, 92, 255, 119, 106, 124, 255, 104, 90, 145, 255, 76, 67, 169, 255, 64, 69, 162, 255, 48, 44, 43, 255, 14, 6, 0, 255, 6, 2, 6, 255, 13, 6, 11, 255, 17, 15, 12, 255, 28, 27, 17, 255, 38, 40, 10, 255, 45, 49, 6, 255, 38, 42, 9, 255, 40, 41, 20, 255, 31, 34, 14, 255, 29, 33, 13, 255, 26, 25, 16, 255, 30, 21, 14, 255, 34, 25, 12, 255, 39, 26, 7, 255, 38, 22, 9, 255, 26, 12, 18, 255, 25, 16, 12, 255, 36, 28, 15, 255, 60, 38, 18, 255, 73, 43, 10, 255, 56, 36, 6, 255, 29, 19, 16, 255, 26, 15, 8, 255, 40, 25, 8, 255, 44, 25, 14, 255, 45, 22, 12, 255, 46, 23, 13, 255, 46, 29, 10, 255, 43, 28, 12, 255, 42, 30, 7, 255, 53, 34, 9, 255, 62, 36, 9, 255, 58, 32, 11, 255, 67, 32, 10, 255, 68, 34, 8, 255, 67, 35, 11, 255, 76, 41, 10, 255, 78, 40, 11, 255, 82, 44, 6, 255, 77, 39, 10, 255, 72, 38, 5, 255, 71, 40, 7, 255, 83, 49, 11, 255, 83, 52, 10, 255, 83, 47, 8, 255, 82, 49, 5, 255, 85, 50, 7, 255, 80, 48, 14, 255, 82, 47, 16, 255, 87, 47, 10, 255, 89, 49, 17, 255, 90, 53, 9, 255, 100, 58, 16, 255, 111, 63, 7, 255, 120, 74, 7, 255, 134, 77, 7, 255, 138, 81, 15, 255, 148, 98, 5, 255, 172, 107, 2, 255, 191, 117, 7, 255, 182, 118, 7, 255, 155, 97, 6, 255, 123, 70, 11, 255, 93, 54, 4, 255, 84, 51, 4, 255, 97, 49, 11, 255, 94, 51, 7, 255, 88, 53, 9, 255, 88, 46, 18, 255, 92, 51, 10, 255, 92, 56, 11, 255, 103, 66, 13, 255, 114, 67, 10, 255, 111, 63, 10, 255, 97, 56, 10, 255, 89, 48, 7, 255, 89, 46, 9, 255, 78, 42, 6, 255, 80, 48, 7, 255, 82, 46, 17, 255, 80, 44, 15, 255, 80, 46, 11, 255, 84, 47, 7, 255, 80, 44, 9, 255, 80, 45, 10, 255, 82, 50, 15, 255, 89, 51, 13, 255, 90, 52, 8, 255, 86, 52, 10, 255, 84, 51, 9, 255, 84, 50, 18, 255, 80, 50, 19, 255, 74, 46, 23, 255, 76, 48, 20, 255, 79, 49, 24, 255, 78, 46, 22, 255, 79, 50, 22, 255, 74, 49, 27, 255, 72, 51, 31, 255, 80, 54, 22, 255, 79, 55, 29, 255, 88, 58, 26, 255, 87, 62, 18, 255, 83, 59, 21, 255, 81, 61, 27, 255, 75, 63, 27, 255, 74, 58, 32, 255, 82, 60, 33, 255, 73, 63, 29, 255, 78, 59, 33, 255, 77, 64, 34, 255, 77, 66, 34, 255, 82, 68, 35, 255, 84, 69, 33, 255, 82, 67, 42, 255, 82, 68, 46, 255, 84, 70, 42, 255, 85, 71, 40, 255, 82, 72, 37, 255, 80, 72, 30, 255, 84, 69, 45, 255, 82, 74, 42, 255, 74, 72, 46, 255, 87, 73, 45, 255, 101, 74, 53, 255, 107, 75, 55, 255, 109, 79, 30, 255, 102, 78, 35, 255, 106, 76, 40, 255, 109, 81, 48, 255, 112, 83, 41, 255, 112, 83, 35, 255, 121, 87, 36, 255, 120, 87, 45, 255, 114, 79, 49, 255, 117, 82, 47, 255, 111, 83, 40, 255, 106, 86, 49, 255, 107, 83, 59, 255, 110, 84, 52, 255, 110, 87, 44, 255, 109, 89, 51, 255, 109, 90, 51, 255, 115, 94, 55, 255, 110, 93, 50, 255, 111, 95, 48, 255, 121, 101, 59, 255, 128, 104, 59, 255, 129, 104, 60, 255, 129, 108, 60, 255, 131, 111, 63, 255, 127, 110, 64, 255, 126, 112, 62, 255, 131, 122, 67, 255, 128, 124, 67, 255, 127, 124, 75, 255, 141, 141, 92, 255, 139, 138, 88, 255, 134, 132, 81, 255, 137, 136, 75, 255, 138, 137, 80, 255, 140, 136, 88, 255, 142, 135, 86, 255, 144, 138, 82, 255, 150, 140, 79, 255, 148, 139, 77, 255, 149, 140, 74, 255, 154, 141, 70, 255, 148, 136, 71, 255, 138, 131, 66, 255, 139, 126, 68, 255, 136, 121, 62, 255, 122, 118, 58, 255, 115, 117, 59, 255, 119, 110, 51, 255, 127, 105, 56, 255, 125, 103, 56, 255, 121, 100, 54, 255, 118, 97, 40, 255, 124, 98, 42, 255, 124, 93, 40, 255, 123, 90, 38, 255, 124, 87, 38, 255, 119, 91, 37, 255, 115, 86, 43, 255, 118, 95, 46, 255, 120, 91, 43, 255, 120, 78, 30, 255, 123, 78, 30, 255, 126, 79, 28, 255, 119, 75, 23, 255, 122, 76, 27, 255, 121, 75, 14, 255, 122, 75, 20, 255, 120, 73, 24, 255, 124, 77, 14, 255, 119, 74, 19, 255, 112, 71, 22, 255, 111, 72, 19, 255, 110, 72, 13, 255, 108, 67, 8, 255, 117, 70, 7, 255, 120, 70, 13, 255, 117, 68, 15, 255, 123, 71, 15, 255, 134, 77, 14, 255, 140, 78, 10, 255, 146, 78, 18, 255, 150, 80, 16, 255, 145, 79, 12, 255, 136, 76, 8, 255, 127, 72, 5, 255, 119, 68, 6, 255, 113, 64, 5, 255, 116, 67, 5, 255, 122, 69, 11, 255, 115, 61, 9, 255, 110, 56, 9, 255, 111, 57, 14, 255, 110, 57, 13, 255, 108, 57, 9, 255, 113, 61, 4, 255, 115, 59, 7, 255, 118, 62, 8, 255, 123, 64, 10, 255, 123, 66, 11, 255, 126, 64, 11, 255, 126, 64, 5, 255, 129, 69, 11, 255, 132, 69, 8, 255, 145, 77, 8, 255, 158, 84, 15, 255, 162, 87, 7, 255, 166, 86, 7, 255, 162, 82, 6, 255, 155, 79, 3, 255, 153, 79, 3, 255, 148, 77, 2, 255, 139, 71, 2, 255, 133, 69, 6, 255, 127, 69, 11, 255, 123, 64, 6, 255, 123, 65, 3, 255, 122, 62, 14, 255, 118, 59, 14, 255, 115, 60, 9, 255, 110, 56, 12, 255, 111, 57, 16, 255, 102, 57, 7, 255, 103, 55, 14, 255, 114, 55, 9, 255, 105, 50, 8, 255, 103, 56, 8, 255, 111, 57, 3, 255, 105, 53, 4, 255, 105, 53, 5, 255, 110, 53, 6, 255, 106, 55, 7, 255, 105, 51, 7, 255, 105, 50, 9, 255, 101, 50, 9, 255, 100, 53, 3, 255, 101, 52, 6, 255, 102, 51, 5, 255, 103, 49, 9, 255, 105, 49, 13, 255, 104, 52, 9, 255, 100, 48, 5, 255, 105, 46, 8, 255, 105, 42, 6, 255, 104, 48, 6, 255, 103, 53, 5, 255, 108, 53, 8, 255, 107, 49, 1, 255, 105, 48, 4, 255, 7, 9, 29, 255, 5, 8, 23, 255, 2, 6, 18, 255, 5, 8, 17, 255, 1, 2, 3, 255, 2, 1, 1, 255, 2, 1, 0, 255, 1, 0, 9, 255, 0, 0, 0, 255, 19, 0, 5, 255, 139, 31, 20, 255, 181, 56, 11, 255, 175, 44, 7, 255, 166, 37, 1, 255, 130, 18, 6, 255, 73, 4, 1, 255, 41, 4, 3, 255, 12, 3, 4, 255, 17, 2, 6, 255, 16, 0, 6, 255, 10, 2, 2, 255, 9, 2, 2, 255, 13, 0, 0, 255, 22, 2, 0, 255, 22, 4, 0, 255, 24, 9, 3, 255, 31, 15, 12, 255, 28, 21, 21, 255, 23, 23, 27, 255, 31, 24, 32, 255, 18, 19, 20, 255, 17, 16, 13, 255, 6, 5, 5, 255, 2, 3, 5, 255, 1, 2, 4, 255, 1, 0, 0, 255, 1, 0, 0, 255, 0, 0, 0, 255, 1, 1, 0, 255, 1, 1, 0, 255, 1, 1, 2, 255, 1, 1, 3, 255, 1, 1, 3, 255, 1, 0, 5, 255, 2, 1, 6, 255, 1, 1, 2, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 1, 2, 7, 255, 2, 2, 13, 255, 3, 2, 17, 255, 2, 4, 15, 255, 0, 1, 4, 255, 0, 1, 0, 255, 1, 2, 1, 255, 0, 0, 4, 255, 0, 0, 2, 255, 1, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 1, 255, 1, 1, 2, 255, 2, 1, 8, 255, 2, 0, 6, 255, 2, 0, 6, 255, 2, 0, 0, 255, 2, 0, 0, 255, 0, 0, 0, 255, 4, 6, 32, 255, 62, 66, 118, 255, 116, 113, 152, 255, 121, 111, 133, 255, 89, 81, 65, 255, 46, 39, 19, 255, 20, 14, 12, 255, 30, 22, 29, 255, 70, 64, 97, 255, 92, 101, 121, 255, 103, 88, 122, 255, 99, 79, 136, 255, 107, 85, 118, 255, 98, 74, 65, 255, 30, 24, 27, 255, 15, 0, 11, 255, 12, 12, 6, 255, 23, 17, 13, 255, 35, 31, 33, 255, 47, 46, 34, 255, 37, 54, 21, 255, 35, 54, 20, 255, 43, 47, 15, 255, 53, 48, 17, 255, 32, 40, 7, 255, 34, 42, 11, 255, 31, 32, 12, 255, 37, 28, 11, 255, 34, 32, 14, 255, 26, 27, 10, 255, 25, 18, 7, 255, 23, 21, 9, 255, 38, 35, 6, 255, 63, 43, 12, 255, 60, 34, 23, 255, 44, 27, 16, 255, 33, 21, 14, 255, 27, 21, 7, 255, 25, 22, 6, 255, 35, 23, 13, 255, 36, 25, 5, 255, 38, 25, 11, 255, 42, 26, 13, 255, 40, 27, 10, 255, 40, 30, 12, 255, 48, 29, 12, 255, 51, 29, 8, 255, 51, 35, 16, 255, 51, 34, 13, 255, 54, 28, 12, 255, 61, 28, 26, 255, 70, 38, 13, 255, 80, 41, 11, 255, 84, 43, 5, 255, 81, 40, 10, 255, 76, 43, 11, 255, 67, 38, 13, 255, 75, 43, 14, 255, 76, 43, 8, 255, 81, 45, 11, 255, 84, 48, 17, 255, 87, 48, 15, 255, 75, 44, 1, 255, 84, 49, 10, 255, 80, 48, 17, 255, 88, 46, 7, 255, 90, 48, 8, 255, 88, 52, 14, 255, 93, 59, 9, 255, 106, 63, 12, 255, 117, 69, 6, 255, 119, 72, 9, 255, 131, 77, 10, 255, 135, 78, 7, 255, 141, 86, 6, 255, 150, 93, 2, 255, 140, 81, 9, 255, 114, 62, 8, 255, 91, 51, 11, 255, 79, 47, 17, 255, 84, 50, 11, 255, 86, 49, 8, 255, 86, 51, 10, 255, 89, 51, 10, 255, 97, 57, 10, 255, 110, 64, 9, 255, 108, 58, 6, 255, 115, 69, 7, 255, 122, 77, 8, 255, 120, 68, 6, 255, 109, 58, 1, 255, 96, 54, 4, 255, 92, 53, 3, 255, 93, 46, 9, 255, 84, 44, 11, 255, 80, 47, 11, 255, 87, 43, 14, 255, 92, 45, 14, 255, 89, 49, 1, 255, 85, 50, 2, 255, 80, 42, 7, 255, 84, 43, 14, 255, 87, 51, 15, 255, 85, 52, 10, 255, 88, 56, 14, 255, 88, 49, 16, 255, 86, 50, 12, 255, 78, 51, 23, 255, 78, 52, 23, 255, 78, 43, 21, 255, 76, 50, 20, 255, 73, 48, 29, 255, 74, 45, 22, 255, 82, 51, 15, 255, 77, 48, 22, 255, 72, 54, 19, 255, 83, 55, 20, 255, 80, 54, 24, 255, 83, 60, 24, 255, 94, 68, 13, 255, 91, 63, 22, 255, 75, 57, 39, 255, 74, 62, 28, 255, 80, 63, 31, 255, 86, 66, 33, 255, 79, 65, 29, 255, 84, 60, 43, 255, 84, 65, 34, 255, 80, 65, 27, 255, 81, 67, 28, 255, 81, 66, 38, 255, 83, 69, 46, 255, 76, 65, 44, 255, 82, 69, 47, 255, 82, 67, 40, 255, 84, 71, 37, 255, 83, 70, 27, 255, 85, 72, 33, 255, 84, 75, 35, 255, 77, 74, 37, 255, 79, 70, 40, 255, 96, 72, 55, 255, 108, 77, 50, 255, 109, 75, 37, 255, 104, 76, 41, 255, 105, 76, 40, 255, 106, 78, 39, 255, 112, 81, 35, 255, 112, 80, 40, 255, 120, 84, 45, 255, 122, 86, 45, 255, 115, 83, 39, 255, 116, 83, 43, 255, 109, 80, 45, 255, 103, 80, 49, 255, 108, 85, 43, 255, 112, 86, 41, 255, 110, 84, 46, 255, 109, 88, 47, 255, 110, 89, 50, 255, 114, 91, 54, 255, 113, 93, 47, 255, 116, 96, 49, 255, 118, 97, 56, 255, 123, 101, 53, 255, 126, 103, 52, 255, 127, 105, 54, 255, 130, 109, 51, 255, 128, 113, 61, 255, 127, 116, 70, 255, 131, 119, 68, 255, 133, 124, 65, 255, 128, 124, 81, 255, 131, 133, 94, 255, 142, 142, 93, 255, 136, 133, 84, 255, 138, 134, 77, 255, 138, 135, 76, 255, 141, 135, 77, 255, 144, 135, 77, 255, 145, 136, 79, 255, 148, 136, 76, 255, 150, 139, 77, 255, 148, 139, 72, 255, 150, 135, 66, 255, 148, 134, 71, 255, 142, 130, 64, 255, 136, 123, 57, 255, 137, 122, 55, 255, 129, 119, 45, 255, 118, 118, 57, 255, 114, 107, 60, 255, 127, 108, 51, 255, 127, 105, 55, 255, 123, 100, 47, 255, 118, 97, 36, 255, 123, 96, 41, 255, 126, 91, 45, 255, 122, 88, 39, 255, 126, 91, 23, 255, 121, 90, 25, 255, 115, 85, 40, 255, 116, 92, 39, 255, 123, 97, 45, 255, 122, 81, 31, 255, 122, 79, 26, 255, 126, 78, 28, 255, 124, 79, 22, 255, 127, 81, 23, 255, 125, 76, 17, 255, 122, 73, 22, 255, 119, 74, 19, 255, 127, 73, 23, 255, 123, 73, 14, 255, 115, 69, 6, 255, 113, 69, 15, 255, 110, 66, 18, 255, 114, 70, 15, 255, 113, 71, 9, 255, 116, 70, 14, 255, 116, 68, 11, 255, 123, 72, 13, 255, 132, 75, 14, 255, 136, 75, 6, 255, 147, 80, 13, 255, 148, 80, 11, 255, 144, 79, 6, 255, 137, 76, 4, 255, 128, 71, 8, 255, 121, 67, 12, 255, 115, 63, 12, 255, 115, 64, 11, 255, 117, 63, 7, 255, 120, 64, 9, 255, 115, 61, 10, 255, 111, 58, 5, 255, 113, 59, 8, 255, 111, 58, 9, 255, 118, 63, 7, 255, 120, 65, 6, 255, 117, 64, 4, 255, 123, 66, 9, 255, 121, 65, 6, 255, 129, 65, 4, 255, 130, 67, 12, 255, 128, 68, 6, 255, 130, 68, 11, 255, 140, 72, 13, 255, 156, 84, 9, 255, 164, 88, 10, 255, 165, 86, 13, 255, 162, 83, 13, 255, 157, 83, 12, 255, 151, 79, 6, 255, 147, 79, 5, 255, 144, 76, 9, 255, 135, 72, 10, 255, 125, 64, 11, 255, 125, 65, 6, 255, 126, 69, 0, 255, 127, 68, 4, 255, 124, 63, 7, 255, 120, 61, 2, 255, 126, 61, 2, 255, 114, 58, 6, 255, 111, 59, 5, 255, 113, 52, 11, 255, 112, 55, 7, 255, 110, 57, 3, 255, 111, 54, 10, 255, 109, 53, 13, 255, 100, 53, 9, 255, 100, 51, 5, 255, 114, 53, 8, 255, 110, 55, 11, 255, 101, 51, 9, 255, 106, 51, 9, 255, 108, 56, 10, 255, 104, 53, 7, 255, 104, 50, 9, 255, 106, 49, 10, 255, 107, 50, 7, 255, 105, 52, 5, 255, 105, 50, 5, 255, 106, 49, 10, 255, 108, 48, 11, 255, 107, 45, 7, 255, 109, 51, 7, 255, 101, 48, 3, 255, 116, 52, 8, 255, 110, 51, 0, 255, 104, 41, 4, 255, 16, 21, 40, 255, 11, 15, 36, 255, 5, 8, 18, 255, 2, 4, 4, 255, 1, 0, 7, 255, 4, 1, 10, 255, 0, 3, 1, 255, 2, 1, 2, 255, 0, 1, 4, 255, 43, 0, 11, 255, 161, 32, 14, 255, 163, 43, 5, 255, 157, 31, 7, 255, 158, 32, 5, 255, 143, 24, 3, 255, 134, 17, 6, 255, 83, 9, 4, 255, 13, 1, 1, 255, 5, 1, 4, 255, 13, 0, 5, 255, 10, 1, 0, 255, 6, 1, 1, 255, 9, 1, 2, 255, 20, 3, 2, 255, 31, 1, 3, 255, 27, 1, 4, 255, 23, 5, 1, 255, 20, 11, 9, 255, 14, 15, 12, 255, 24, 19, 15, 255, 17, 21, 14, 255, 21, 19, 13, 255, 12, 7, 4, 255, 6, 7, 11, 255, 2, 5, 14, 255, 0, 0, 1, 255, 1, 0, 0, 255, 0, 0, 2, 255, 1, 1, 2, 255, 1, 1, 1, 255, 1, 1, 3, 255, 1, 1, 2, 255, 1, 1, 1, 255, 1, 1, 2, 255, 2, 2, 4, 255, 1, 1, 3, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 1, 3, 255, 1, 2, 7, 255, 2, 3, 9, 255, 3, 4, 10, 255, 1, 2, 9, 255, 0, 0, 5, 255, 0, 1, 0, 255, 1, 1, 0, 255, 0, 0, 1, 255, 0, 0, 0, 255, 1, 1, 2, 255, 1, 0, 3, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 2, 255, 0, 0, 2, 255, 1, 0, 4, 255, 1, 0, 5, 255, 2, 0, 2, 255, 3, 0, 5, 255, 2, 0, 3, 255, 0, 0, 0, 255, 1, 3, 23, 255, 43, 47, 113, 255, 101, 108, 154, 255, 111, 110, 120, 255, 84, 81, 72, 255, 53, 49, 34, 255, 13, 13, 6, 255, 17, 14, 31, 255, 67, 58, 86, 255, 112, 97, 125, 255, 115, 97, 121, 255, 97, 90, 136, 255, 86, 79, 112, 255, 83, 70, 59, 255, 155, 88, 15, 255, 111, 49, 0, 255, 45, 18, 4, 255, 25, 23, 13, 255, 38, 33, 20, 255, 43, 44, 21, 255, 41, 53, 26, 255, 45, 51, 20, 255, 48, 55, 29, 255, 42, 52, 31, 255, 42, 51, 22, 255, 42, 47, 18, 255, 36, 43, 12, 255, 35, 37, 16, 255, 33, 32, 14, 255, 29, 23, 8, 255, 23, 16, 7, 255, 28, 18, 11, 255, 52, 32, 18, 255, 67, 43, 17, 255, 61, 37, 10, 255, 42, 25, 8, 255, 30, 19, 12, 255, 33, 18, 6, 255, 36, 21, 5, 255, 38, 22, 11, 255, 29, 20, 9, 255, 24, 21, 15, 255, 36, 25, 7, 255, 44, 27, 9, 255, 43, 27, 7, 255, 47, 29, 8, 255, 52, 30, 19, 255, 51, 30, 12, 255, 55, 30, 13, 255, 56, 30, 7, 255, 60, 35, 10, 255, 60, 33, 4, 255, 63, 34, 8, 255, 72, 38, 2, 255, 73, 41, 9, 255, 78, 43, 10, 255, 82, 47, 5, 255, 83, 46, 13, 255, 76, 41, 8, 255, 77, 43, 7, 255, 77, 43, 7, 255, 80, 46, 7, 255, 86, 49, 12, 255, 88, 47, 10, 255, 81, 48, 3, 255, 88, 51, 6, 255, 80, 50, 10, 255, 86, 49, 7, 255, 88, 52, 11, 255, 90, 56, 11, 255, 107, 64, 11, 255, 117, 62, 7, 255, 118, 68, 11, 255, 118, 68, 11, 255, 123, 74, 9, 255, 124, 72, 2, 255, 118, 63, 8, 255, 104, 60, 10, 255, 88, 52, 16, 255, 83, 50, 13, 255, 88, 50, 15, 255, 85, 51, 7, 255, 82, 51, 11, 255, 89, 51, 5, 255, 99, 61, 13, 255, 118, 76, 10, 255, 138, 98, 10, 255, 129, 87, 3, 255, 123, 75, 6, 255, 126, 75, 12, 255, 119, 69, 8, 255, 115, 67, 10, 255, 111, 61, 7, 255, 101, 58, 6, 255, 92, 55, 4, 255, 86, 44, 8, 255, 81, 49, 13, 255, 72, 46, 15, 255, 76, 44, 8, 255, 82, 48, 10, 255, 77, 44, 20, 255, 82, 41, 18, 255, 86, 42, 9, 255, 86, 45, 22, 255, 85, 46, 17, 255, 85, 48, 10, 255, 86, 48, 18, 255, 90, 49, 13, 255, 95, 57, 14, 255, 86, 54, 13, 255, 83, 50, 17, 255, 79, 46, 12, 255, 73, 50, 22, 255, 70, 44, 31, 255, 74, 46, 26, 255, 76, 51, 19, 255, 76, 48, 25, 255, 76, 55, 19, 255, 80, 55, 22, 255, 83, 58, 18, 255, 83, 65, 23, 255, 87, 60, 23, 255, 91, 61, 30, 255, 82, 64, 35, 255, 76, 61, 32, 255, 76, 59, 33, 255, 77, 62, 28, 255, 86, 63, 32, 255, 85, 63, 32, 255, 81, 62, 22, 255, 84, 65, 32, 255, 80, 63, 41, 255, 81, 66, 31, 255, 79, 69, 31, 255, 79, 71, 33, 255, 80, 67, 50, 255, 82, 65, 42, 255, 86, 70, 39, 255, 91, 69, 34, 255, 87, 73, 29, 255, 85, 71, 35, 255, 82, 67, 42, 255, 80, 71, 41, 255, 90, 75, 42, 255, 106, 78, 42, 255, 107, 72, 40, 255, 104, 73, 46, 255, 105, 74, 43, 255, 104, 75, 39, 255, 108, 78, 35, 255, 115, 81, 40, 255, 121, 82, 46, 255, 120, 86, 40, 255, 114, 85, 37, 255, 112, 80, 43, 255, 111, 85, 45, 255, 105, 84, 41, 255, 111, 86, 35, 255, 119, 89, 37, 255, 115, 85, 40, 255, 113, 90, 40, 255, 112, 90, 42, 255, 117, 90, 43, 255, 119, 90, 47, 255, 116, 92, 50, 255, 120, 98, 63, 255, 118, 98, 48, 255, 121, 103, 43, 255, 122, 103, 53, 255, 125, 105, 59, 255, 127, 108, 63, 255, 128, 111, 69, 255, 130, 114, 67, 255, 134, 123, 64, 255, 127, 123, 68, 255, 122, 125, 78, 255, 141, 143, 96, 255, 140, 136, 86, 255, 137, 130, 78, 255, 142, 135, 77, 255, 144, 136, 69, 255, 147, 137, 69, 255, 147, 134, 75, 255, 151, 135, 72, 255, 150, 136, 72, 255, 147, 134, 67, 255, 150, 133, 62, 255, 149, 131, 67, 255, 144, 129, 62, 255, 141, 124, 55, 255, 138, 120, 59, 255, 127, 113, 51, 255, 121, 116, 51, 255, 120, 113, 52, 255, 123, 111, 46, 255, 129, 106, 49, 255, 126, 100, 44, 255, 123, 99, 41, 255, 125, 96, 34, 255, 128, 91, 42, 255, 121, 89, 37, 255, 124, 91, 29, 255, 125, 86, 30, 255, 118, 87, 38, 255, 116, 89, 29, 255, 118, 95, 37, 255, 123, 87, 30, 255, 125, 80, 22, 255, 124, 76, 21, 255, 125, 80, 16, 255, 127, 79, 22, 255, 124, 74, 21, 255, 121, 72, 24, 255, 122, 75, 27, 255, 122, 72, 25, 255, 121, 74, 16, 255, 117, 72, 11, 255, 115, 70, 19, 255, 112, 67, 21, 255, 112, 70, 12, 255, 111, 73, 8, 255, 115, 69, 10, 255, 120, 72, 8, 255, 127, 76, 12, 255, 132, 75, 13, 255, 134, 77, 7, 255, 144, 78, 10, 255, 148, 77, 13, 255, 145, 78, 7, 255, 144, 79, 10, 255, 134, 73, 11, 255, 124, 67, 10, 255, 124, 69, 13, 255, 119, 66, 10, 255, 118, 64, 2, 255, 121, 65, 6, 255, 116, 60, 7, 255, 113, 61, 4, 255, 115, 63, 10, 255, 109, 59, 11, 255, 115, 66, 7, 255, 122, 62, 11, 255, 120, 59, 9, 255, 124, 62, 9, 255, 121, 66, 12, 255, 127, 67, 9, 255, 125, 65, 6, 255, 124, 66, 6, 255, 129, 71, 6, 255, 140, 75, 9, 255, 153, 82, 8, 255, 158, 84, 5, 255, 164, 89, 5, 255, 163, 87, 11, 255, 155, 81, 6, 255, 150, 77, 1, 255, 152, 80, 5, 255, 148, 78, 8, 255, 138, 71, 4, 255, 132, 68, 8, 255, 131, 68, 13, 255, 129, 69, 6, 255, 127, 67, 7, 255, 124, 65, 7, 255, 124, 65, 8, 255, 123, 60, 11, 255, 114, 59, 7, 255, 113, 61, 4, 255, 109, 54, 7, 255, 107, 59, 3, 255, 113, 62, 7, 255, 116, 59, 8, 255, 113, 56, 11, 255, 104, 53, 8, 255, 108, 55, 9, 255, 118, 56, 12, 255, 109, 56, 7, 255, 107, 57, 9, 255, 110, 54, 6, 255, 109, 53, 9, 255, 110, 52, 12, 255, 116, 54, 12, 255, 116, 54, 8, 255, 110, 49, 4, 255, 107, 53, 10, 255, 110, 51, 7, 255, 113, 52, 2, 255, 109, 52, 4, 255, 104, 44, 3, 255, 108, 46, 5, 255, 106, 51, 3, 255, 105, 51, 2, 255, 92, 43, 10, 255, 76, 29, 15, 255, 20, 41, 82, 255, 25, 40, 68, 255, 18, 30, 42, 255, 5, 19, 29, 255, 6, 22, 33, 255, 6, 12, 27, 255, 0, 0, 4, 255, 0, 2, 1, 255, 0, 0, 3, 255, 64, 9, 1, 255, 157, 34, 4, 255, 139, 27, 7, 255, 107, 13, 9, 255, 121, 18, 2, 255, 151, 30, 9, 255, 154, 30, 7, 255, 114, 10, 1, 255, 67, 4, 4, 255, 14, 2, 0, 255, 6, 2, 1, 255, 6, 1, 0, 255, 8, 1, 1, 255, 15, 2, 2, 255, 18, 0, 0, 255, 33, 1, 2, 255, 38, 2, 7, 255, 37, 1, 5, 255, 23, 0, 3, 255, 13, 3, 1, 255, 15, 2, 0, 255, 8, 7, 4, 255, 14, 7, 6, 255, 10, 1, 2, 255, 4, 5, 15, 255, 3, 6, 15, 255, 0, 0, 3, 255, 1, 0, 0, 255, 1, 0, 3, 255, 1, 0, 2, 255, 1, 1, 1, 255, 1, 1, 5, 255, 1, 0, 4, 255, 1, 1, 1, 255, 1, 1, 0, 255, 2, 2, 1, 255, 1, 1, 3, 255, 2, 0, 5, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 2, 255, 1, 1, 9, 255, 2, 3, 10, 255, 3, 4, 10, 255, 2, 3, 6, 255, 1, 0, 2, 255, 0, 0, 0, 255, 1, 0, 0, 255, 1, 0, 3, 255, 1, 0, 3, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 1, 0, 2, 255, 1, 0, 0, 255, 1, 0, 1, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 2, 255, 1, 1, 2, 255, 0, 0, 4, 255, 1, 0, 7, 255, 2, 1, 6, 255, 0, 0, 1, 255, 0, 0, 0, 255, 2, 3, 16, 255, 39, 38, 80, 255, 100, 93, 154, 255, 116, 115, 134, 255, 77, 83, 69, 255, 50, 52, 41, 255, 16, 21, 13, 255, 18, 17, 25, 255, 60, 56, 61, 255, 91, 83, 140, 255, 85, 82, 159, 255, 77, 80, 137, 255, 82, 81, 94, 255, 68, 61, 47, 255, 42, 32, 7, 255, 94, 55, 5, 255, 150, 86, 14, 255, 98, 52, 10, 255, 63, 40, 15, 255, 47, 39, 22, 255, 40, 40, 15, 255, 34, 51, 16, 255, 39, 58, 18, 255, 41, 58, 22, 255, 44, 60, 28, 255, 54, 59, 24, 255, 50, 64, 16, 255, 37, 51, 8, 255, 40, 35, 10, 255, 29, 18, 9, 255, 13, 14, 5, 255, 24, 23, 10, 255, 44, 26, 17, 255, 59, 40, 17, 255, 53, 36, 8, 255, 36, 19, 6, 255, 21, 17, 13, 255, 24, 19, 12, 255, 37, 24, 4, 255, 36, 25, 8, 255, 30, 23, 9, 255, 25, 21, 8, 255, 31, 22, 12, 255, 37, 25, 10, 255, 41, 24, 7, 255, 36, 24, 14, 255, 35, 30, 15, 255, 48, 30, 7, 255, 53, 30, 7, 255, 47, 31, 7, 255, 48, 33, 13, 255, 48, 32, 12, 255, 53, 32, 9, 255, 62, 34, 16, 255, 76, 40, 8, 255, 79, 44, 6, 255, 73, 46, 8, 255, 73, 44, 7, 255, 79, 44, 3, 255, 84, 44, 1, 255, 84, 43, 6, 255, 75, 42, 4, 255, 72, 39, 11, 255, 76, 44, 6, 255, 85, 46, 6, 255, 89, 46, 9, 255, 86, 50, 9, 255, 87, 45, 8, 255, 87, 50, 11, 255, 91, 49, 13, 255, 91, 50, 13, 255, 103, 61, 19, 255, 108, 59, 6, 255, 115, 59, 7, 255, 103, 60, 14, 255, 96, 55, 15, 255, 93, 60, 7, 255, 94, 55, 9, 255, 92, 47, 12, 255, 90, 52, 5, 255, 80, 48, 14, 255, 81, 48, 13, 255, 85, 50, 8, 255, 92, 54, 2, 255, 95, 57, 3, 255, 113, 77, 10, 255, 130, 80, 16, 255, 140, 85, 12, 255, 153, 93, 13, 255, 137, 85, 6, 255, 122, 75, 3, 255, 121, 73, 13, 255, 116, 69, 6, 255, 112, 64, 4, 255, 105, 61, 5, 255, 100, 56, 6, 255, 94, 49, 8, 255, 82, 44, 11, 255, 83, 46, 9, 255, 80, 40, 16, 255, 82, 47, 17, 255, 82, 49, 7, 255, 78, 49, 8, 255, 72, 49, 11, 255, 73, 48, 6, 255, 80, 47, 18, 255, 79, 49, 15, 255, 80, 48, 11, 255, 87, 49, 22, 255, 86, 52, 19, 255, 84, 51, 11, 255, 87, 50, 13, 255, 80, 52, 17, 255, 74, 52, 22, 255, 72, 49, 23, 255, 76, 52, 12, 255, 77, 53, 19, 255, 71, 50, 31, 255, 77, 51, 29, 255, 79, 56, 23, 255, 77, 60, 28, 255, 86, 61, 24, 255, 89, 63, 22, 255, 89, 65, 34, 255, 90, 64, 28, 255, 87, 64, 21, 255, 82, 65, 26, 255, 80, 61, 33, 255, 74, 59, 36, 255, 84, 58, 31, 255, 84, 62, 29, 255, 82, 63, 28, 255, 83, 67, 22, 255, 84, 65, 34, 255, 81, 64, 33, 255, 82, 68, 39, 255, 79, 66, 43, 255, 85, 70, 32, 255, 83, 65, 29, 255, 87, 71, 33, 255, 91, 68, 32, 255, 85, 67, 34, 255, 86, 69, 44, 255, 87, 67, 36, 255, 84, 73, 36, 255, 86, 73, 36, 255, 103, 76, 40, 255, 107, 73, 30, 255, 105, 75, 37, 255, 106, 77, 38, 255, 106, 77, 43, 255, 108, 76, 38, 255, 117, 83, 34, 255, 120, 85, 35, 255, 119, 91, 28, 255, 111, 87, 29, 255, 111, 80, 45, 255, 108, 82, 41, 255, 107, 87, 32, 255, 108, 80, 40, 255, 114, 82, 41, 255, 114, 85, 38, 255, 112, 86, 45, 255, 111, 85, 46, 255, 116, 86, 47, 255, 119, 93, 45, 255, 116, 93, 52, 255, 115, 92, 62, 255, 118, 97, 51, 255, 122, 102, 46, 255, 125, 102, 55, 255, 125, 107, 61, 255, 130, 111, 53, 255, 134, 114, 52, 255, 134, 115, 65, 255, 130, 117, 69, 255, 127, 120, 68, 255, 125, 124, 72, 255, 137, 142, 89, 255, 144, 142, 88, 255, 136, 128, 80, 255, 143, 133, 75, 255, 141, 133, 67, 255, 143, 133, 68, 255, 148, 132, 71, 255, 156, 135, 73, 255, 151, 133, 68, 255, 146, 130, 64, 255, 153, 134, 65, 255, 152, 133, 66, 255, 144, 127, 67, 255, 143, 123, 60, 255, 138, 120, 54, 255, 129, 117, 54, 255, 123, 113, 52, 255, 122, 112, 53, 255, 116, 109, 46, 255, 126, 104, 42, 255, 128, 97, 46, 255, 125, 99, 44, 255, 125, 97, 29, 255, 129, 92, 37, 255, 123, 93, 35, 255, 124, 93, 33, 255, 129, 87, 29, 255, 120, 87, 30, 255, 117, 87, 26, 255, 117, 92, 36, 255, 125, 90, 32, 255, 125, 80, 24, 255, 125, 76, 28, 255, 126, 79, 27, 255, 129, 79, 25, 255, 129, 80, 15, 255, 124, 75, 23, 255, 120, 73, 20, 255, 125, 76, 21, 255, 125, 75, 25, 255, 120, 70, 23, 255, 120, 70, 18, 255, 117, 68, 9, 255, 118, 70, 11, 255, 116, 73, 7, 255, 117, 69, 11, 255, 121, 69, 14, 255, 124, 70, 13, 255, 129, 73, 11, 255, 136, 82, 11, 255, 142, 77, 16, 255, 149, 79, 10, 255, 150, 82, 8, 255, 149, 82, 6, 255, 138, 75, 8, 255, 128, 70, 9, 255, 120, 66, 2, 255, 117, 66, 4, 255, 118, 64, 6, 255, 121, 63, 11, 255, 120, 62, 14, 255, 117, 64, 9, 255, 114, 65, 8, 255, 109, 61, 7, 255, 114, 59, 4, 255, 117, 58, 10, 255, 123, 65, 14, 255, 122, 64, 7, 255, 122, 64, 5, 255, 128, 64, 4, 255, 129, 70, 6, 255, 129, 70, 12, 255, 129, 69, 10, 255, 138, 75, 8, 255, 147, 76, 10, 255, 159, 86, 7, 255, 168, 89, 3, 255, 168, 88, 6, 255, 161, 83, 5, 255, 159, 82, 3, 255, 158, 80, 5, 255, 154, 76, 7, 255, 145, 72, 4, 255, 138, 71, 8, 255, 134, 66, 14, 255, 128, 64, 7, 255, 126, 65, 7, 255, 123, 65, 6, 255, 123, 67, 6, 255, 121, 63, 4, 255, 122, 57, 4, 255, 115, 59, 4, 255, 107, 58, 13, 255, 117, 60, 12, 255, 120, 59, 6, 255, 112, 55, 4, 255, 114, 55, 6, 255, 109, 51, 9, 255, 108, 52, 14, 255, 112, 54, 11, 255, 111, 58, 3, 255, 111, 59, 3, 255, 108, 55, 9, 255, 113, 58, 7, 255, 111, 53, 4, 255, 113, 51, 6, 255, 118, 56, 12, 255, 110, 52, 7, 255, 109, 56, 4, 255, 114, 56, 3, 255, 113, 49, 4, 255, 111, 52, 8, 255, 111, 52, 6, 255, 109, 47, 5, 255, 102, 43, 0, 255, 93, 43, 13, 255, 80, 36, 22, 255, 68, 33, 9, 255, 38, 60, 81, 255, 28, 58, 86, 255, 24, 45, 64, 255, 14, 27, 44, 255, 7, 21, 22, 255, 1, 2, 6, 255, 1, 1, 0, 255, 3, 1, 5, 255, 3, 0, 7, 255, 67, 10, 1, 255, 134, 23, 4, 255, 100, 12, 5, 255, 73, 1, 4, 255, 103, 12, 6, 255, 138, 27, 2, 255, 158, 45, 2, 255, 168, 34, 5, 255, 118, 15, 4, 255, 35, 0, 5, 255, 15, 1, 3, 255, 7, 3, 1, 255, 7, 1, 0, 255, 15, 0, 1, 255, 15, 1, 2, 255, 29, 4, 5, 255, 41, 3, 5, 255, 39, 3, 1, 255, 24, 2, 1, 255, 14, 1, 3, 255, 13, 1, 0, 255, 6, 1, 0, 255, 7, 0, 4, 255, 7, 11, 24, 255, 5, 15, 31, 255, 4, 3, 2, 255, 7, 7, 5, 255, 3, 3, 6, 255, 0, 1, 1, 255, 1, 1, 0, 255, 2, 1, 1, 255, 1, 3, 2, 255, 0, 1, 3, 255, 0, 0, 2, 255, 0, 1, 1, 255, 1, 2, 2, 255, 0, 2, 5, 255, 5, 0, 6, 255, 2, 1, 4, 255, 1, 1, 5, 255, 3, 0, 5, 255, 2, 2, 5, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 2, 255, 1, 1, 7, 255, 3, 4, 16, 255, 2, 2, 12, 255, 0, 2, 5, 255, 0, 0, 2, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 1, 2, 255, 1, 1, 2, 255, 2, 0, 3, 255, 0, 0, 0, 255, 1, 2, 2, 255, 0, 0, 5, 255, 0, 1, 7, 255, 2, 1, 2, 255, 3, 1, 2, 255, 2, 0, 2, 255, 1, 0, 7, 255, 2, 1, 0, 255, 0, 0, 13, 255, 31, 28, 71, 255, 76, 88, 142, 255, 107, 114, 153, 255, 86, 86, 76, 255, 48, 50, 36, 255, 17, 21, 23, 255, 14, 9, 24, 255, 62, 56, 75, 255, 84, 87, 122, 255, 78, 88, 140, 255, 75, 72, 167, 255, 81, 79, 119, 255, 46, 42, 43, 255, 13, 16, 6, 255, 45, 25, 6, 255, 87, 50, 13, 255, 112, 73, 13, 255, 99, 59, 15, 255, 45, 31, 12, 255, 34, 27, 15, 255, 34, 35, 16, 255, 32, 43, 15, 255, 38, 53, 27, 255, 49, 64, 39, 255, 58, 76, 27, 255, 58, 76, 17, 255, 53, 63, 16, 255, 35, 38, 8, 255, 21, 17, 7, 255, 18, 9, 8, 255, 29, 18, 9, 255, 55, 36, 16, 255, 58, 40, 15, 255, 42, 26, 14, 255, 30, 20, 5, 255, 24, 15, 6, 255, 27, 20, 9, 255, 30, 23, 15, 255, 29, 21, 13, 255, 28, 22, 11, 255, 29, 22, 12, 255, 33, 23, 9, 255, 35, 27, 6, 255, 31, 24, 13, 255, 29, 24, 9, 255, 47, 28, 10, 255, 47, 29, 1, 255, 44, 32, 4, 255, 44, 26, 15, 255, 47, 28, 15, 255, 50, 32, 13, 255, 52, 31, 11, 255, 58, 36, 9, 255, 66, 38, 10, 255, 71, 36, 7, 255, 70, 35, 7, 255, 78, 47, 7, 255, 77, 48, 4, 255, 77, 45, 8, 255, 77, 43, 7, 255, 81, 46, 7, 255, 81, 44, 7, 255, 78, 39, 6, 255, 72, 39, 10, 255, 78, 43, 6, 255, 87, 45, 9, 255, 90, 52, 5, 255, 90, 54, 8, 255, 86, 44, 13, 255, 95, 49, 8, 255, 96, 52, 9, 255, 100, 57, 3, 255, 99, 53, 10, 255, 97, 53, 11, 255, 90, 51, 8, 255, 86, 51, 7, 255, 87, 52, 7, 255, 82, 44, 7, 255, 86, 48, 12, 255, 82, 46, 7, 255, 81, 50, 6, 255, 82, 53, 3, 255, 87, 58, 6, 255, 103, 62, 12, 255, 115, 65, 17, 255, 123, 76, 6, 255, 129, 79, 7, 255, 131, 76, 10, 255, 140, 85, 3, 255, 146, 91, 7, 255, 125, 80, 5, 255, 121, 76, 5, 255, 121, 71, 7, 255, 115, 67, 10, 255, 112, 62, 10, 255, 107, 61, 10, 255, 98, 54, 7, 255, 91, 49, 5, 255, 86, 48, 14, 255, 78, 45, 11, 255, 81, 44, 18, 255, 86, 46, 8, 255, 82, 48, 7, 255, 84, 52, 16, 255, 86, 51, 11, 255, 79, 50, 10, 255, 74, 50, 12, 255, 83, 50, 11, 255, 85, 51, 13, 255, 91, 58, 15, 255, 88, 56, 11, 255, 85, 50, 8, 255, 89, 50, 23, 255, 72, 48, 25, 255, 63, 47, 34, 255, 68, 47, 26, 255, 74, 53, 17, 255, 74, 51, 15, 255, 77, 49, 29, 255, 82, 59, 18, 255, 79, 56, 25, 255, 79, 58, 22, 255, 89, 65, 16, 255, 91, 60, 30, 255, 95, 63, 22, 255, 92, 65, 23, 255, 88, 65, 26, 255, 84, 67, 18, 255, 84, 62, 18, 255, 83, 64, 24, 255, 86, 62, 32, 255, 88, 63, 32, 255, 78, 68, 23, 255, 78, 67, 24, 255, 84, 66, 28, 255, 83, 64, 33, 255, 84, 69, 30, 255, 84, 71, 35, 255, 91, 66, 26, 255, 89, 68, 33, 255, 84, 67, 35, 255, 87, 74, 31, 255, 84, 72, 35, 255, 85, 70, 39, 255, 87, 71, 38, 255, 87, 70, 42, 255, 86, 72, 38, 255, 97, 77, 37, 255, 106, 75, 34, 255, 109, 74, 39, 255, 107, 79, 26, 255, 112, 81, 22, 255, 120, 80, 32, 255, 120, 79, 39, 255, 121, 86, 37, 255, 118, 86, 40, 255, 115, 86, 38, 255, 110, 81, 38, 255, 112, 82, 39, 255, 110, 83, 40, 255, 104, 80, 35, 255, 108, 87, 35, 255, 112, 89, 43, 255, 113, 86, 47, 255, 117, 87, 48, 255, 117, 88, 44, 255, 117, 92, 40, 255, 117, 93, 38, 255, 118, 95, 52, 255, 120, 99, 56, 255, 122, 101, 52, 255, 124, 104, 49, 255, 129, 109, 60, 255, 129, 112, 58, 255, 134, 117, 55, 255, 134, 117, 64, 255, 133, 117, 62, 255, 137, 122, 69, 255, 132, 121, 68, 255, 132, 128, 72, 255, 147, 143, 88, 255, 140, 132, 81, 255, 140, 129, 66, 255, 143, 130, 67, 255, 142, 129, 72, 255, 149, 131, 70, 255, 150, 131, 69, 255, 153, 133, 65, 255, 152, 133, 64, 255, 150, 130, 67, 255, 150, 132, 50, 255, 145, 126, 62, 255, 140, 120, 60, 255, 137, 123, 48, 255, 127, 116, 45, 255, 122, 113, 50, 255, 119, 111, 50, 255, 116, 108, 44, 255, 125, 101, 48, 255, 134, 97, 51, 255, 124, 97, 36, 255, 123, 96, 43, 255, 130, 94, 35, 255, 126, 92, 38, 255, 124, 89, 37, 255, 129, 88, 31, 255, 126, 85, 30, 255, 115, 85, 40, 255, 118, 91, 43, 255, 123, 86, 35, 255, 125, 81, 26, 255, 127, 80, 23, 255, 127, 82, 21, 255, 128, 80, 23, 255, 131, 77, 26, 255, 126, 73, 17, 255, 124, 74, 21, 255, 124, 74, 16, 255, 124, 73, 16, 255, 121, 71, 20, 255, 116, 71, 13, 255, 118, 74, 11, 255, 118, 71, 13, 255, 119, 72, 7, 255, 118, 71, 14, 255, 118, 69, 16, 255, 118, 67, 21, 255, 119, 71, 15, 255, 133, 79, 9, 255, 147, 80, 17, 255, 148, 82, 8, 255, 154, 84, 11, 255, 155, 86, 6, 255, 141, 78, 7, 255, 127, 73, 9, 255, 123, 70, 9, 255, 114, 68, 5, 255, 114, 65, 11, 255, 120, 64, 11, 255, 124, 62, 3, 255, 124, 63, 1, 255, 114, 64, 5, 255, 116, 66, 9, 255, 123, 65, 9, 255, 120, 63, 4, 255, 122, 65, 3, 255, 126, 67, 11, 255, 127, 69, 5, 255, 125, 67, 3, 255, 126, 68, 6, 255, 128, 69, 9, 255, 133, 72, 15, 255, 136, 72, 12, 255, 144, 77, 6, 255, 160, 87, 5, 255, 168, 89, 8, 255, 168, 88, 12, 255, 163, 85, 12, 255, 160, 83, 11, 255, 157, 81, 7, 255, 149, 78, 7, 255, 141, 74, 9, 255, 138, 72, 6, 255, 135, 69, 8, 255, 135, 71, 5, 255, 132, 69, 8, 255, 130, 66, 13, 255, 129, 65, 6, 255, 126, 62, 4, 255, 120, 62, 3, 255, 116, 62, 4, 255, 120, 61, 6, 255, 122, 61, 7, 255, 117, 57, 9, 255, 116, 57, 8, 255, 118, 57, 4, 255, 112, 53, 4, 255, 110, 53, 12, 255, 106, 54, 7, 255, 110, 57, 4, 255, 111, 55, 9, 255, 116, 57, 7, 255, 121, 55, 4, 255, 112, 54, 6, 255, 103, 51, 7, 255, 115, 52, 5, 255, 112, 53, 5, 255, 114, 58, 6, 255, 121, 61, 5, 255, 114, 51, 5, 255, 111, 48, 5, 255, 102, 46, 1, 255, 96, 44, 12, 255, 98, 49, 13, 255, 99, 48, 14, 255, 89, 42, 7, 255, 87, 39, 7, 255, 21, 38, 63, 255, 19, 59, 86, 255, 24, 58, 83, 255, 10, 40, 75, 255, 6, 22, 37, 255, 4, 4, 8, 255, 3, 1, 2, 255, 3, 0, 0, 255, 1, 0, 3, 255, 40, 6, 9, 255, 83, 7, 6, 255, 70, 5, 4, 255, 52, 3, 1, 255, 80, 5, 9, 255, 122, 16, 7, 255, 166, 40, 0, 255, 186, 45, 9, 255, 98, 15, 5, 255, 26, 2, 5, 255, 12, 2, 4, 255, 2, 1, 1, 255, 2, 1, 0, 255, 5, 0, 2, 255, 4, 2, 2, 255, 10, 3, 4, 255, 25, 4, 5, 255, 26, 1, 5, 255, 21, 2, 1, 255, 13, 2, 0, 255, 9, 2, 5, 255, 11, 3, 7, 255, 4, 12, 27, 255, 1, 28, 43, 255, 5, 11, 23, 255, 3, 0, 3, 255, 0, 3, 5, 255, 6, 14, 22, 255, 2, 2, 3, 255, 3, 3, 6, 255, 2, 3, 3, 255, 0, 1, 0, 255, 2, 1, 0, 255, 0, 1, 0, 255, 2, 0, 2, 255, 1, 1, 5, 255, 1, 1, 5, 255, 3, 1, 0, 255, 0, 2, 0, 255, 2, 2, 2, 255, 5, 0, 1, 255, 2, 1, 3, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 2, 255, 1, 1, 5, 255, 1, 0, 7, 255, 0, 1, 3, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 3, 255, 1, 1, 2, 255, 0, 1, 4, 255, 0, 1, 5, 255, 0, 2, 1, 255, 0, 1, 1, 255, 0, 1, 4, 255, 0, 1, 2, 255, 0, 2, 2, 255, 1, 0, 0, 255, 0, 0, 0, 255, 19, 20, 54, 255, 71, 75, 128, 255, 91, 95, 144, 255, 82, 95, 103, 255, 55, 49, 35, 255, 23, 19, 10, 255, 11, 11, 20, 255, 53, 44, 54, 255, 89, 79, 112, 255, 80, 81, 128, 255, 70, 75, 112, 255, 67, 65, 114, 255, 49, 48, 64, 255, 19, 19, 11, 255, 8, 5, 0, 255, 33, 23, 12, 255, 69, 40, 23, 255, 64, 35, 11, 255, 27, 21, 7, 255, 13, 11, 9, 255, 22, 26, 12, 255, 29, 33, 17, 255, 37, 46, 22, 255, 43, 57, 31, 255, 55, 71, 44, 255, 57, 75, 32, 255, 49, 61, 22, 255, 29, 33, 6, 255, 19, 17, 5, 255, 22, 11, 10, 255, 38, 22, 8, 255, 50, 36, 7, 255, 45, 35, 9, 255, 33, 26, 14, 255, 19, 15, 4, 255, 21, 17, 6, 255, 25, 22, 7, 255, 26, 21, 10, 255, 30, 24, 8, 255, 32, 25, 12, 255, 30, 23, 12, 255, 30, 24, 9, 255, 34, 27, 17, 255, 35, 28, 6, 255, 38, 27, 4, 255, 41, 29, 11, 255, 39, 28, 9, 255, 49, 22, 10, 255, 49, 27, 11, 255, 53, 32, 5, 255, 51, 29, 7, 255, 48, 31, 10, 255, 64, 33, 6, 255, 63, 30, 10, 255, 57, 35, 14, 255, 60, 35, 8, 255, 72, 38, 6, 255, 80, 46, 2, 255, 75, 49, 5, 255, 77, 44, 7, 255, 81, 45, 7, 255, 80, 42, 9, 255, 80, 47, 12, 255, 78, 45, 5, 255, 77, 42, 8, 255, 75, 40, 8, 255, 78, 45, 8, 255, 83, 48, 8, 255, 88, 53, 10, 255, 87, 52, 8, 255, 86, 51, 7, 255, 86, 51, 9, 255, 88, 51, 13, 255, 88, 48, 12, 255, 81, 44, 5, 255, 78, 45, 10, 255, 81, 48, 10, 255, 81, 46, 2, 255, 85, 50, 11, 255, 89, 45, 10, 255, 90, 46, 4, 255, 81, 48, 8, 255, 82, 52, 4, 255, 115, 71, 8, 255, 126, 74, 8, 255, 117, 74, 4, 255, 117, 70, 15, 255, 124, 73, 8, 255, 125, 77, 4, 255, 124, 80, 7, 255, 135, 85, 3, 255, 144, 90, 9, 255, 125, 78, 12, 255, 117, 70, 10, 255, 120, 71, 5, 255, 115, 65, 6, 255, 111, 61, 6, 255, 106, 58, 11, 255, 98, 56, 6, 255, 90, 52, 5, 255, 84, 46, 10, 255, 81, 44, 10, 255, 85, 46, 15, 255, 86, 47, 3, 255, 83, 48, 6, 255, 77, 50, 16, 255, 82, 45, 15, 255, 85, 50, 13, 255, 72, 50, 10, 255, 80, 51, 9, 255, 90, 54, 12, 255, 87, 54, 14, 255, 86, 53, 17, 255, 83, 54, 18, 255, 86, 49, 19, 255, 90, 52, 17, 255, 74, 52, 14, 255, 72, 53, 25, 255, 78, 52, 26, 255, 81, 54, 17, 255, 85, 53, 25, 255, 89, 56, 19, 255, 88, 53, 30, 255, 84, 56, 27, 255, 87, 63, 22, 255, 91, 59, 31, 255, 90, 63, 26, 255, 91, 61, 25, 255, 92, 61, 25, 255, 83, 61, 17, 255, 80, 60, 25, 255, 78, 65, 21, 255, 77, 62, 26, 255, 82, 64, 34, 255, 83, 67, 19, 255, 84, 66, 28, 255, 84, 70, 27, 255, 87, 67, 24, 255, 85, 68, 22, 255, 74, 70, 29, 255, 79, 68, 34, 255, 80, 69, 31, 255, 83, 69, 34, 255, 83, 69, 33, 255, 87, 73, 25, 255, 90, 72, 30, 255, 92, 70, 34, 255, 92, 71, 29, 255, 89, 74, 30, 255, 93, 75, 36, 255, 102, 74, 31, 255, 106, 71, 37, 255, 106, 72, 34, 255, 113, 76, 28, 255, 125, 80, 43, 255, 122, 79, 42, 255, 121, 81, 40, 255, 118, 83, 43, 255, 114, 81, 42, 255, 111, 79, 31, 255, 115, 83, 31, 255, 108, 78, 33, 255, 107, 81, 38, 255, 108, 83, 39, 255, 110, 86, 39, 255, 116, 88, 42, 255, 117, 87, 43, 255, 119, 88, 48, 255, 116, 88, 51, 255, 119, 93, 42, 255, 120, 94, 48, 255, 120, 96, 50, 255, 122, 99, 50, 255, 124, 103, 48, 255, 128, 107, 57, 255, 130, 108, 57, 255, 133, 112, 59, 255, 134, 111, 67, 255, 135, 115, 62, 255, 140, 122, 62, 255, 137, 125, 59, 255, 131, 126, 61, 255, 147, 141, 82, 255, 146, 137, 83, 255, 139, 126, 67, 255, 143, 129, 62, 255, 142, 127, 66, 255, 150, 126, 68, 255, 153, 131, 61, 255, 152, 130, 62, 255, 151, 130, 58, 255, 153, 131, 63, 255, 154, 131, 53, 255, 148, 126, 50, 255, 141, 120, 54, 255, 137, 121, 45, 255, 134, 119, 45, 255, 126, 113, 49, 255, 118, 109, 41, 255, 118, 106, 46, 255, 125, 99, 49, 255, 134, 101, 34, 255, 126, 100, 32, 255, 124, 98, 36, 255, 130, 95, 35, 255, 127, 93, 33, 255, 128, 89, 38, 255, 131, 88, 34, 255, 128, 88, 29, 255, 118, 87, 36, 255, 115, 89, 35, 255, 124, 90, 24, 255, 126, 84, 13, 255, 128, 82, 16, 255, 127, 82, 22, 255, 126, 80, 21, 255, 129, 77, 26, 255, 127, 77, 19, 255, 125, 77, 16, 255, 122, 71, 20, 255, 124, 72, 21, 255, 122, 72, 15, 255, 118, 73, 13, 255, 118, 73, 13, 255, 119, 69, 19, 255, 116, 70, 17, 255, 120, 74, 16, 255, 120, 72, 8, 255, 118, 70, 11, 255, 122, 71, 13, 255, 134, 77, 11, 255, 146, 80, 19, 255, 154, 85, 16, 255, 157, 86, 5, 255, 157, 81, 8, 255, 149, 79, 7, 255, 138, 77, 4, 255, 130, 71, 16, 255, 123, 65, 11, 255, 121, 66, 8, 255, 119, 65, 8, 255, 120, 63, 5, 255, 124, 66, 8, 255, 118, 62, 6, 255, 118, 64, 8, 255, 117, 65, 8, 255, 120, 64, 6, 255, 122, 66, 7, 255, 122, 68, 9, 255, 125, 72, 2, 255, 128, 72, 2, 255, 129, 67, 8, 255, 125, 63, 5, 255, 129, 68, 7, 255, 137, 75, 11, 255, 148, 80, 8, 255, 162, 85, 4, 255, 172, 91, 11, 255, 169, 91, 7, 255, 163, 85, 5, 255, 156, 75, 4, 255, 159, 79, 3, 255, 159, 81, 4, 255, 152, 76, 9, 255, 144, 76, 1, 255, 141, 73, 8, 255, 137, 72, 7, 255, 134, 68, 7, 255, 133, 66, 10, 255, 135, 70, 7, 255, 128, 67, 9, 255, 123, 64, 10, 255, 119, 60, 2, 255, 121, 62, 0, 255, 118, 60, 4, 255, 116, 60, 9, 255, 120, 62, 8, 255, 120, 58, 9, 255, 113, 56, 9, 255, 112, 57, 7, 255, 114, 58, 8, 255, 115, 58, 9, 255, 117, 57, 8, 255, 118, 59, 6, 255, 119, 56, 6, 255, 111, 57, 7, 255, 108, 60, 1, 255, 116, 55, 3, 255, 111, 48, 9, 255, 114, 47, 9, 255, 119, 48, 14, 255, 117, 50, 10, 255, 102, 41, 4, 255, 91, 35, 9, 255, 97, 49, 18, 255, 103, 57, 29, 255, 92, 47, 17, 255, 85, 41, 8, 255, 92, 44, 15, 255, 9, 57, 84, 255, 17, 59, 75, 255, 11, 60, 76, 255, 12, 58, 92, 255, 8, 46, 65, 255, 2, 16, 24, 255, 1, 0, 0, 255, 1, 2, 0, 255, 0, 2, 0, 255, 8, 2, 2, 255, 45, 3, 3, 255, 68, 5, 2, 255, 60, 4, 0, 255, 58, 2, 3, 255, 84, 7, 6, 255, 108, 20, 7, 255, 80, 13, 8, 255, 21, 1, 8, 255, 0, 1, 2, 255, 2, 0, 0, 255, 0, 0, 2, 255, 0, 1, 2, 255, 1, 1, 3, 255, 0, 1, 2, 255, 0, 1, 2, 255, 6, 1, 2, 255, 6, 4, 1, 255, 10, 3, 1, 255, 14, 2, 1, 255, 16, 0, 7, 255, 12, 22, 35, 255, 1, 35, 44, 255, 0, 12, 24, 255, 2, 0, 36, 255, 20, 88, 146, 255, 38, 102, 114, 255, 5, 3, 6, 255, 8, 1, 3, 255, 0, 2, 3, 255, 3, 3, 5, 255, 1, 1, 1, 255, 1, 0, 0, 255, 0, 0, 0, 255, 2, 1, 2, 255, 1, 0, 0, 255, 2, 1, 1, 255, 0, 0, 2, 255, 1, 5, 19, 255, 2, 5, 18, 255, 1, 0, 2, 255, 2, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 2, 255, 1, 1, 3, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 1, 255, 3, 3, 5, 255, 0, 2, 2, 255, 1, 0, 7, 255, 2, 0, 12, 255, 2, 2, 2, 255, 1, 0, 1, 255, 0, 0, 2, 255, 2, 1, 2, 255, 6, 8, 31, 255, 58, 66, 113, 255, 89, 96, 149, 255, 81, 86, 113, 255, 60, 54, 44, 255, 25, 20, 12, 255, 11, 8, 7, 255, 43, 39, 56, 255, 77, 73, 103, 255, 75, 81, 132, 255, 51, 67, 135, 255, 48, 65, 133, 255, 40, 43, 59, 255, 20, 12, 15, 255, 2, 2, 0, 255, 8, 7, 2, 255, 14, 12, 5, 255, 17, 12, 12, 255, 13, 12, 9, 255, 12, 11, 2, 255, 19, 17, 9, 255, 34, 30, 21, 255, 43, 38, 26, 255, 40, 39, 27, 255, 48, 56, 29, 255, 51, 62, 20, 255, 44, 51, 17, 255, 24, 27, 7, 255, 11, 12, 4, 255, 20, 8, 6, 255, 26, 17, 14, 255, 40, 32, 20, 255, 43, 31, 12, 255, 34, 25, 8, 255, 23, 24, 8, 255, 19, 20, 9, 255, 26, 24, 10, 255, 28, 24, 7, 255, 30, 23, 6, 255, 34, 24, 10, 255, 39, 24, 8, 255, 35, 22, 2, 255, 34, 26, 4, 255, 42, 27, 12, 255, 40, 24, 9, 255, 36, 27, 11, 255, 43, 29, 11, 255, 47, 24, 12, 255, 38, 24, 10, 255, 46, 29, 6, 255, 47, 30, 10, 255, 49, 32, 4, 255, 51, 34, 4, 255, 41, 25, 14, 255, 54, 31, 16, 255, 64, 34, 13, 255, 66, 34, 9, 255, 66, 32, 6, 255, 70, 37, 8, 255, 76, 46, 10, 255, 72, 43, 14, 255, 70, 41, 3, 255, 76, 41, 9, 255, 75, 40, 5, 255, 76, 47, 8, 255, 75, 45, 9, 255, 77, 43, 7, 255, 83, 43, 9, 255, 81, 45, 7, 255, 81, 47, 13, 255, 86, 47, 16, 255, 93, 49, 8, 255, 89, 51, 6, 255, 84, 51, 7, 255, 83, 51, 8, 255, 73, 44, 15, 255, 72, 43, 12, 255, 76, 42, 7, 255, 79, 40, 7, 255, 82, 42, 8, 255, 81, 44, 13, 255, 87, 50, 1, 255, 92, 53, 4, 255, 94, 55, 16, 255, 104, 65, 11, 255, 126, 76, 15, 255, 127, 75, 16, 255, 114, 72, 3, 255, 113, 68, 14, 255, 120, 69, 12, 255, 124, 74, 8, 255, 124, 74, 6, 255, 139, 83, 6, 255, 147, 86, 6, 255, 129, 78, 6, 255, 119, 70, 6, 255, 115, 66, 7, 255, 107, 60, 12, 255, 103, 61, 10, 255, 104, 60, 10, 255, 95, 57, 6, 255, 84, 52, 7, 255, 84, 48, 10, 255, 85, 46, 6, 255, 84, 46, 9, 255, 82, 49, 6, 255, 81, 50, 11, 255, 84, 46, 9, 255, 83, 50, 14, 255, 79, 47, 18, 255, 80, 47, 19, 255, 81, 52, 14, 255, 77, 53, 21, 255, 85, 51, 14, 255, 87, 56, 13, 255, 82, 59, 4, 255, 78, 53, 7, 255, 87, 53, 19, 255, 87, 50, 21, 255, 81, 53, 17, 255, 84, 54, 20, 255, 84, 54, 17, 255, 83, 54, 21, 255, 79, 50, 20, 255, 83, 55, 22, 255, 86, 58, 19, 255, 85, 57, 22, 255, 83, 57, 31, 255, 92, 64, 17, 255, 96, 66, 17, 255, 94, 62, 21, 255, 90, 61, 28, 255, 77, 58, 37, 255, 78, 61, 29, 255, 78, 63, 25, 255, 82, 67, 34, 255, 87, 65, 24, 255, 85, 67, 23, 255, 83, 64, 25, 255, 94, 69, 30, 255, 92, 66, 29, 255, 79, 66, 30, 255, 80, 66, 38, 255, 83, 67, 36, 255, 86, 69, 36, 255, 85, 69, 38, 255, 93, 76, 29, 255, 96, 75, 27, 255, 97, 73, 33, 255, 90, 73, 23, 255, 89, 71, 26, 255, 97, 72, 39, 255, 104, 73, 31, 255, 109, 77, 30, 255, 109, 78, 34, 255, 109, 76, 40, 255, 116, 80, 28, 255, 124, 83, 31, 255, 126, 84, 39, 255, 124, 86, 34, 255, 118, 83, 41, 255, 114, 80, 43, 255, 117, 86, 34, 255, 112, 82, 27, 255, 111, 83, 34, 255, 111, 83, 37, 255, 110, 84, 34, 255, 113, 87, 34, 255, 118, 88, 39, 255, 122, 91, 45, 255, 120, 93, 41, 255, 119, 91, 44, 255, 118, 88, 51, 255, 126, 97, 53, 255, 124, 97, 50, 255, 123, 99, 49, 255, 126, 104, 54, 255, 128, 107, 49, 255, 132, 112, 48, 255, 134, 113, 54, 255, 136, 115, 55, 255, 140, 118, 62, 255, 139, 122, 66, 255, 129, 122, 69, 255, 140, 134, 83, 255, 152, 144, 92, 255, 139, 127, 73, 255, 141, 127, 61, 255, 146, 130, 66, 255, 149, 125, 61, 255, 151, 126, 68, 255, 153, 127, 74, 255, 153, 129, 68, 255, 149, 128, 50, 255, 158, 132, 48, 255, 155, 130, 50, 255, 145, 124, 47, 255, 136, 116, 51, 255, 134, 116, 44, 255, 131, 115, 42, 255, 119, 105, 43, 255, 119, 107, 45, 255, 126, 100, 51, 255, 133, 99, 44, 255, 128, 101, 28, 255, 126, 96, 39, 255, 129, 94, 33, 255, 131, 94, 35, 255, 130, 90, 22, 255, 131, 91, 19, 255, 129, 88, 30, 255, 120, 86, 29, 255, 115, 89, 28, 255, 123, 88, 36, 255, 127, 82, 29, 255, 126, 79, 21, 255, 127, 81, 23, 255, 131, 82, 21, 255, 131, 82, 22, 255, 129, 79, 20, 255, 126, 75, 28, 255, 125, 74, 24, 255, 126, 74, 23, 255, 124, 75, 13, 255, 122, 75, 17, 255, 119, 73, 14, 255, 119, 68, 18, 255, 117, 71, 18, 255, 123, 74, 15, 255, 121, 70, 6, 255, 122, 73, 9, 255, 130, 76, 14, 255, 137, 77, 12, 255, 141, 82, 12, 255, 151, 83, 9, 255, 156, 84, 10, 255, 160, 82, 10, 255, 157, 82, 4, 255, 143, 75, 6, 255, 134, 71, 12, 255, 130, 64, 9, 255, 130, 69, 7, 255, 125, 71, 6, 255, 119, 66, 7, 255, 118, 65, 11, 255, 114, 61, 7, 255, 112, 62, 4, 255, 117, 66, 8, 255, 122, 63, 6, 255, 124, 64, 8, 255, 127, 70, 10, 255, 128, 69, 3, 255, 138, 71, 4, 255, 134, 71, 4, 255, 133, 72, 6, 255, 132, 74, 8, 255, 133, 74, 8, 255, 144, 76, 8, 255, 160, 81, 11, 255, 169, 87, 9, 255, 169, 89, 5, 255, 174, 93, 12, 255, 166, 82, 8, 255, 167, 84, 7, 255, 165, 86, 7, 255, 157, 78, 4, 255, 145, 77, 0, 255, 143, 75, 4, 255, 141, 75, 7, 255, 137, 71, 6, 255, 135, 69, 9, 255, 136, 70, 12, 255, 129, 67, 7, 255, 133, 68, 8, 255, 128, 63, 8, 255, 121, 62, 10, 255, 118, 64, 8, 255, 121, 62, 4, 255, 127, 59, 4, 255, 126, 62, 3, 255, 113, 63, 3, 255, 113, 61, 7, 255, 118, 58, 4, 255, 121, 59, 2, 255, 117, 59, 5, 255, 107, 54, 1, 255, 103, 54, 2, 255, 113, 53, 10, 255, 118, 54, 2, 255, 104, 44, 3, 255, 98, 35, 9, 255, 105, 41, 1, 255, 107, 46, 9, 255, 107, 52, 9, 255, 97, 47, 13, 255, 97, 48, 20, 255, 97, 54, 9, 255, 94, 49, 16, 255, 91, 46, 20, 255, 90, 44, 16, 255, 96, 52, 12, 255, 14, 34, 53, 255, 14, 19, 45, 255, 10, 51, 73, 255, 21, 55, 75, 255, 19, 47, 74, 255, 2, 18, 32, 255, 0, 2, 0, 255, 2, 0, 1, 255, 1, 0, 0, 255, 0, 0, 0, 255, 22, 5, 4, 255, 48, 5, 9, 255, 39, 2, 9, 255, 15, 4, 2, 255, 3, 2, 5, 255, 0, 1, 7, 255, 2, 1, 5, 255, 3, 1, 4, 255, 2, 0, 4, 255, 1, 1, 2, 255, 0, 1, 3, 255, 0, 0, 2, 255, 2, 0, 3, 255, 0, 0, 2, 255, 0, 0, 2, 255, 1, 0, 1, 255, 1, 1, 4, 255, 1, 0, 2, 255, 17, 9, 25, 255, 18, 33, 49, 255, 4, 26, 23, 255, 3, 2, 0, 255, 7, 24, 88, 255, 10, 133, 189, 255, 14, 157, 173, 255, 118, 228, 240, 255, 51, 119, 121, 255, 0, 0, 0, 255, 7, 8, 7, 255, 6, 1, 1, 255, 2, 2, 2, 255, 0, 2, 1, 255, 0, 1, 0, 255, 0, 2, 0, 255, 5, 1, 0, 255, 2, 3, 5, 255, 3, 5, 30, 255, 3, 10, 39, 255, 4, 14, 34, 255, 2, 8, 18, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 2, 255, 1, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 1, 1, 2, 255, 1, 1, 2, 255, 0, 0, 2, 255, 1, 1, 0, 255, 2, 0, 4, 255, 1, 0, 0, 255, 0, 0, 1, 255, 10, 7, 33, 255, 51, 48, 104, 255, 89, 97, 138, 255, 77, 86, 101, 255, 48, 55, 56, 255, 21, 22, 28, 255, 14, 13, 9, 255, 38, 29, 38, 255, 84, 65, 79, 255, 78, 82, 107, 255, 55, 65, 141, 255, 58, 73, 122, 255, 41, 47, 87, 255, 18, 13, 22, 255, 3, 1, 0, 255, 3, 4, 1, 255, 14, 7, 2, 255, 11, 6, 4, 255, 10, 7, 2, 255, 14, 14, 2, 255, 16, 12, 2, 255, 19, 18, 6, 255, 35, 36, 12, 255, 62, 43, 11, 255, 53, 41, 12, 255, 43, 40, 22, 255, 38, 37, 12, 255, 23, 25, 0, 255, 11, 11, 4, 255, 22, 11, 16, 255, 43, 26, 5, 255, 52, 37, 10, 255, 36, 31, 9, 255, 20, 19, 5, 255, 24, 17, 7, 255, 28, 21, 6, 255, 22, 21, 8, 255, 24, 22, 10, 255, 29, 24, 10, 255, 33, 27, 8, 255, 36, 27, 10, 255, 36, 25, 9, 255, 39, 25, 12, 255, 42, 26, 10, 255, 42, 31, 7, 255, 40, 30, 11, 255, 36, 27, 6, 255, 41, 31, 14, 255, 36, 24, 7, 255, 37, 24, 6, 255, 40, 28, 21, 255, 41, 22, 13, 255, 50, 26, 19, 255, 45, 33, 6, 255, 46, 29, 0, 255, 48, 25, 12, 255, 45, 32, 15, 255, 50, 29, 10, 255, 56, 30, 6, 255, 66, 34, 12, 255, 73, 42, 6, 255, 75, 44, 6, 255, 75, 42, 11, 255, 66, 41, 12, 255, 64, 35, 11, 255, 62, 33, 4, 255, 64, 37, 8, 255, 68, 39, 12, 255, 74, 38, 10, 255, 76, 36, 13, 255, 73, 40, 9, 255, 75, 47, 9, 255, 84, 49, 8, 255, 91, 49, 4, 255, 86, 46, 9, 255, 80, 45, 14, 255, 80, 41, 4, 255, 74, 37, 15, 255, 77, 44, 8, 255, 79, 44, 11, 255, 81, 44, 4, 255, 86, 49, 9, 255, 96, 56, 9, 255, 96, 59, 14, 255, 94, 61, 7, 255, 100, 62, 13, 255, 104, 59, 4, 255, 117, 68, 4, 255, 115, 69, 13, 255, 111, 69, 4, 255, 114, 68, 4, 255, 113, 70, 7, 255, 121, 70, 9, 255, 128, 69, 13, 255, 137, 80, 12, 255, 146, 88, 5, 255, 126, 76, 4, 255, 119, 70, 5, 255, 113, 62, 5, 255, 107, 61, 11, 255, 106, 64, 13, 255, 103, 62, 7, 255, 95, 58, 6, 255, 84, 50, 13, 255, 81, 49, 8, 255, 87, 51, 4, 255, 82, 49, 7, 255, 80, 48, 10, 255, 83, 50, 11, 255, 85, 49, 10, 255, 87, 52, 12, 255, 83, 52, 8, 255, 81, 51, 6, 255, 82, 51, 9, 255, 81, 52, 16, 255, 90, 53, 16, 255, 90, 56, 9, 255, 87, 55, 4, 255, 88, 54, 13, 255, 84, 52, 12, 255, 81, 51, 17, 255, 80, 50, 18, 255, 82, 56, 9, 255, 77, 51, 11, 255, 80, 55, 27, 255, 79, 59, 19, 255, 78, 58, 18, 255, 91, 63, 12, 255, 89, 62, 19, 255, 84, 60, 28, 255, 94, 65, 16, 255, 99, 66, 21, 255, 95, 60, 23, 255, 89, 58, 29, 255, 80, 61, 34, 255, 85, 63, 27, 255, 85, 62, 32, 255, 82, 62, 32, 255, 87, 63, 25, 255, 85, 65, 32, 255, 84, 63, 25, 255, 85, 67, 25, 255, 89, 65, 28, 255, 87, 65, 27, 255, 91, 67, 31, 255, 85, 62, 34, 255, 90, 73, 27, 255, 87, 70, 22, 255, 91, 72, 26, 255, 98, 78, 26, 255, 93, 73, 29, 255, 87, 72, 33, 255, 86, 70, 29, 255, 95, 71, 28, 255, 98, 72, 25, 255, 105, 72, 42, 255, 109, 76, 38, 255, 110, 76, 32, 255, 113, 78, 36, 255, 119, 81, 34, 255, 122, 84, 27, 255, 125, 87, 30, 255, 117, 81, 39, 255, 109, 77, 32, 255, 113, 82, 37, 255, 112, 79, 37, 255, 113, 80, 37, 255, 112, 81, 40, 255, 112, 84, 37, 255, 114, 85, 30, 255, 118, 86, 33, 255, 121, 88, 36, 255, 120, 91, 32, 255, 121, 93, 40, 255, 124, 94, 45, 255, 126, 94, 38, 255, 128, 98, 42, 255, 127, 103, 43, 255, 128, 108, 51, 255, 127, 107, 48, 255, 131, 111, 55, 255, 135, 113, 60, 255, 134, 114, 56, 255, 137, 117, 56, 255, 137, 118, 56, 255, 135, 120, 59, 255, 135, 123, 68, 255, 157, 146, 90, 255, 148, 132, 79, 255, 140, 121, 56, 255, 148, 129, 57, 255, 147, 127, 56, 255, 147, 124, 61, 255, 153, 128, 71, 255, 154, 130, 69, 255, 149, 126, 50, 255, 158, 131, 49, 255, 155, 128, 55, 255, 146, 125, 47, 255, 136, 116, 47, 255, 133, 113, 49, 255, 131, 112, 46, 255, 124, 108, 46, 255, 122, 109, 42, 255, 125, 102, 39, 255, 130, 97, 49, 255, 128, 95, 43, 255, 125, 94, 29, 255, 128, 93, 26, 255, 131, 92, 35, 255, 134, 90, 26, 255, 129, 88, 25, 255, 129, 87, 26, 255, 124, 83, 35, 255, 115, 84, 33, 255, 119, 88, 18, 255, 127, 87, 15, 255, 128, 83, 19, 255, 129, 79, 24, 255, 129, 80, 19, 255, 131, 82, 17, 255, 128, 79, 14, 255, 130, 79, 15, 255, 128, 77, 19, 255, 128, 76, 22, 255, 128, 79, 16, 255, 122, 75, 20, 255, 117, 71, 12, 255, 121, 71, 15, 255, 124, 77, 12, 255, 127, 73, 11, 255, 124, 67, 13, 255, 125, 73, 13, 255, 131, 76, 9, 255, 134, 75, 7, 255, 137, 82, 5, 255, 150, 85, 5, 255, 156, 84, 15, 255, 165, 87, 15, 255, 164, 87, 10, 255, 150, 78, 11, 255, 138, 73, 3, 255, 128, 70, 11, 255, 126, 71, 10, 255, 124, 70, 4, 255, 123, 68, 8, 255, 121, 64, 9, 255, 118, 65, 5, 255, 120, 69, 7, 255, 124, 66, 7, 255, 126, 64, 5, 255, 125, 65, 6, 255, 121, 64, 4, 255, 129, 71, 10, 255, 134, 71, 6, 255, 133, 69, 5, 255, 131, 71, 5, 255, 129, 71, 5, 255, 132, 75, 8, 255, 145, 80, 12, 255, 159, 84, 14, 255, 168, 88, 8, 255, 170, 89, 7, 255, 178, 96, 14, 255, 170, 89, 3, 255, 167, 87, 7, 255, 164, 87, 8, 255, 159, 83, 2, 255, 154, 82, 8, 255, 145, 79, 2, 255, 141, 75, 2, 255, 138, 71, 1, 255, 136, 69, 3, 255, 131, 66, 12, 255, 127, 67, 5, 255, 133, 67, 2, 255, 137, 63, 8, 255, 128, 60, 9, 255, 121, 62, 6, 255, 120, 61, 2, 255, 124, 62, 6, 255, 123, 61, 4, 255, 120, 62, 0, 255, 117, 60, 1, 255, 118, 62, 2, 255, 118, 57, 4, 255, 110, 43, 5, 255, 98, 33, 4, 255, 89, 34, 1, 255, 98, 36, 11, 255, 102, 37, 5, 255, 87, 33, 7, 255, 90, 38, 10, 255, 102, 47, 3, 255, 96, 41, 8, 255, 100, 50, 14, 255, 98, 56, 8, 255, 96, 54, 10, 255, 93, 51, 9, 255, 91, 45, 16, 255, 98, 46, 17, 255, 101, 49, 10, 255, 100, 49, 13, 255, 35, 39, 101, 255, 26, 69, 108, 255, 23, 56, 78, 255, 10, 47, 75, 255, 13, 42, 73, 255, 5, 30, 50, 255, 0, 11, 19, 255, 0, 0, 4, 255, 4, 0, 4, 255, 2, 0, 7, 255, 5, 2, 19, 255, 8, 2, 25, 255, 5, 0, 32, 255, 1, 1, 23, 255, 4, 1, 4, 255, 3, 2, 4, 255, 2, 1, 7, 255, 1, 3, 3, 255, 0, 1, 1, 255, 0, 1, 3, 255, 0, 0, 3, 255, 2, 1, 3, 255, 1, 0, 2, 255, 2, 0, 2, 255, 2, 0, 2, 255, 2, 0, 1, 255, 6, 1, 4, 255, 2, 1, 6, 255, 5, 17, 31, 255, 4, 20, 20, 255, 2, 0, 5, 255, 8, 39, 96, 255, 16, 197, 239, 255, 15, 202, 167, 255, 4, 46, 34, 255, 31, 73, 83, 255, 116, 241, 248, 255, 44, 99, 103, 255, 0, 0, 0, 255, 5, 10, 7, 255, 1, 0, 0, 255, 3, 1, 2, 255, 0, 2, 3, 255, 2, 0, 2, 255, 1, 2, 9, 255, 5, 5, 31, 255, 5, 7, 32, 255, 3, 9, 22, 255, 0, 19, 26, 255, 5, 25, 35, 255, 4, 9, 23, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 1, 1, 255, 0, 1, 3, 255, 1, 1, 1, 255, 0, 0, 4, 255, 1, 1, 2, 255, 0, 0, 0, 255, 9, 9, 29, 255, 39, 41, 87, 255, 72, 79, 126, 255, 79, 89, 116, 255, 49, 58, 54, 255, 20, 24, 11, 255, 8, 5, 9, 255, 38, 30, 46, 255, 73, 79, 92, 255, 72, 79, 123, 255, 73, 72, 121, 255, 59, 66, 134, 255, 49, 49, 76, 255, 25, 22, 15, 255, 0, 0, 0, 255, 6, 2, 1, 255, 12, 6, 11, 255, 5, 4, 2, 255, 7, 3, 2, 255, 14, 6, 9, 255, 9, 7, 6, 255, 14, 9, 4, 255, 22, 15, 10, 255, 40, 25, 20, 255, 71, 44, 14, 255, 64, 43, 7, 255, 26, 22, 8, 255, 15, 16, 6, 255, 8, 8, 4, 255, 21, 19, 7, 255, 35, 28, 7, 255, 40, 27, 12, 255, 40, 26, 10, 255, 28, 19, 7, 255, 24, 19, 6, 255, 19, 18, 1, 255, 28, 23, 7, 255, 30, 20, 9, 255, 31, 18, 12, 255, 29, 24, 12, 255, 25, 24, 12, 255, 30, 27, 12, 255, 32, 27, 12, 255, 38, 31, 11, 255, 33, 25, 10, 255, 44, 29, 20, 255, 48, 28, 13, 255, 42, 31, 13, 255, 42, 30, 12, 255, 53, 33, 12, 255, 46, 26, 12, 255, 41, 31, 10, 255, 42, 30, 6, 255, 50, 33, 4, 255, 54, 28, 13, 255, 46, 29, 10, 255, 52, 31, 4, 255, 54, 29, 8, 255, 45, 32, 10, 255, 53, 36, 6, 255, 51, 38, 8, 255, 53, 35, 13, 255, 67, 41, 5, 255, 73, 43, 4, 255, 66, 35, 6, 255, 64, 37, 14, 255, 62, 38, 7, 255, 62, 38, 8, 255, 62, 34, 9, 255, 66, 34, 3, 255, 72, 36, 8, 255, 70, 37, 10, 255, 66, 40, 9, 255, 71, 47, 8, 255, 76, 47, 5, 255, 82, 47, 9, 255, 77, 42, 6, 255, 75, 45, 12, 255, 76, 47, 7, 255, 85, 50, 7, 255, 85, 46, 8, 255, 87, 51, 11, 255, 89, 52, 13, 255, 96, 54, 12, 255, 95, 55, 5, 255, 95, 53, 13, 255, 94, 56, 8, 255, 90, 55, 15, 255, 99, 62, 8, 255, 115, 69, 2, 255, 121, 66, 14, 255, 117, 68, 10, 255, 115, 68, 3, 255, 111, 68, 4, 255, 119, 71, 3, 255, 127, 75, 10, 255, 130, 84, 5, 255, 137, 88, 3, 255, 118, 74, 8, 255, 115, 69, 10, 255, 115, 64, 5, 255, 111, 64, 3, 255, 107, 60, 5, 255, 100, 57, 5, 255, 97, 58, 9, 255, 88, 51, 13, 255, 82, 48, 4, 255, 84, 51, 6, 255, 80, 48, 9, 255, 78, 44, 12, 255, 84, 48, 10, 255, 86, 52, 5, 255, 85, 52, 10, 255, 79, 46, 10, 255, 82, 47, 12, 255, 89, 51, 16, 255, 78, 51, 11, 255, 88, 56, 11, 255, 95, 55, 14, 255, 85, 57, 7, 255, 83, 58, 15, 255, 81, 53, 16, 255, 78, 55, 20, 255, 77, 55, 11, 255, 77, 54, 17, 255, 79, 56, 18, 255, 80, 56, 16, 255, 82, 59, 18, 255, 84, 62, 18, 255, 87, 57, 15, 255, 86, 63, 18, 255, 90, 60, 24, 255, 94, 64, 21, 255, 98, 63, 31, 255, 95, 62, 25, 255, 87, 64, 15, 255, 86, 65, 22, 255, 88, 66, 17, 255, 89, 66, 20, 255, 91, 65, 32, 255, 91, 67, 30, 255, 87, 65, 26, 255, 85, 68, 21, 255, 78, 67, 18, 255, 88, 67, 25, 255, 87, 67, 29, 255, 91, 72, 25, 255, 92, 69, 27, 255, 89, 70, 26, 255, 89, 71, 25, 255, 90, 69, 33, 255, 92, 70, 29, 255, 89, 69, 25, 255, 90, 74, 33, 255, 88, 73, 29, 255, 91, 72, 33, 255, 96, 77, 28, 255, 103, 76, 34, 255, 112, 77, 31, 255, 114, 77, 23, 255, 116, 75, 44, 255, 116, 78, 37, 255, 124, 79, 39, 255, 125, 82, 34, 255, 121, 84, 31, 255, 113, 81, 34, 255, 112, 81, 38, 255, 116, 83, 34, 255, 114, 81, 31, 255, 110, 79, 30, 255, 113, 82, 33, 255, 116, 85, 33, 255, 120, 86, 36, 255, 122, 87, 37, 255, 123, 89, 40, 255, 124, 94, 46, 255, 122, 94, 45, 255, 130, 98, 45, 255, 130, 99, 46, 255, 132, 107, 37, 255, 129, 106, 55, 255, 127, 103, 55, 255, 130, 108, 59, 255, 132, 112, 59, 255, 134, 113, 57, 255, 137, 117, 56, 255, 136, 116, 55, 255, 136, 120, 56, 255, 129, 119, 62, 255, 149, 141, 85, 255, 154, 141, 90, 255, 139, 121, 70, 255, 142, 122, 64, 255, 145, 124, 60, 255, 146, 124, 51, 255, 151, 126, 57, 255, 154, 129, 57, 255, 153, 128, 57, 255, 155, 129, 47, 255, 153, 127, 38, 255, 145, 120, 55, 255, 138, 116, 55, 255, 136, 114, 39, 255, 135, 110, 46, 255, 128, 107, 44, 255, 123, 108, 37, 255, 123, 103, 39, 255, 127, 100, 31, 255, 132, 96, 38, 255, 132, 96, 33, 255, 130, 94, 24, 255, 133, 95, 28, 255, 135, 89, 36, 255, 128, 87, 33, 255, 132, 87, 28, 255, 132, 86, 20, 255, 116, 84, 21, 255, 115, 82, 34, 255, 125, 82, 29, 255, 132, 84, 21, 255, 129, 77, 24, 255, 132, 80, 25, 255, 131, 82, 14, 255, 131, 80, 14, 255, 134, 80, 18, 255, 131, 79, 14, 255, 130, 77, 14, 255, 128, 77, 14, 255, 123, 75, 17, 255, 120, 75, 13, 255, 121, 75, 14, 255, 126, 76, 7, 255, 127, 73, 8, 255, 125, 71, 16, 255, 128, 74, 13, 255, 130, 73, 7, 255, 132, 75, 9, 255, 140, 81, 7, 255, 152, 84, 8, 255, 156, 86, 8, 255, 165, 90, 11, 255, 166, 89, 12, 255, 157, 85, 9, 255, 144, 78, 4, 255, 134, 73, 8, 255, 129, 69, 4, 255, 125, 66, 2, 255, 128, 69, 9, 255, 123, 66, 11, 255, 118, 67, 10, 255, 117, 66, 8, 255, 121, 68, 6, 255, 118, 67, 4, 255, 121, 68, 5, 255, 127, 69, 5, 255, 130, 69, 9, 255, 133, 71, 8, 255, 133, 69, 8, 255, 133, 69, 9, 255, 132, 72, 9, 255, 132, 73, 7, 255, 140, 76, 3, 255, 157, 86, 6, 255, 167, 90, 6, 255, 170, 89, 10, 255, 178, 93, 10, 255, 174, 93, 1, 255, 168, 90, 6, 255, 164, 88, 7, 255, 162, 87, 1, 255, 157, 81, 6, 255, 148, 79, 2, 255, 143, 76, 4, 255, 144, 76, 4, 255, 142, 74, 3, 255, 133, 68, 11, 255, 129, 66, 6, 255, 136, 67, 8, 255, 137, 67, 4, 255, 127, 63, 0, 255, 125, 64, 7, 255, 126, 63, 8, 255, 126, 62, 6, 255, 124, 61, 5, 255, 125, 64, 5, 255, 120, 58, 12, 255, 123, 59, 11, 255, 122, 60, 5, 255, 114, 49, 11, 255, 94, 28, 11, 255, 85, 28, 5, 255, 84, 33, 11, 255, 88, 36, 8, 255, 94, 36, 6, 255, 102, 45, 6, 255, 103, 49, 6, 255, 94, 42, 10, 255, 95, 47, 17, 255, 94, 49, 17, 255, 93, 51, 9, 255, 94, 55, 9, 255, 90, 46, 14, 255, 94, 41, 18, 255, 103, 46, 17, 255, 106, 49, 10, 255, 42, 92, 130, 255, 28, 74, 103, 255, 27, 58, 79, 255, 10, 49, 74, 255, 4, 56, 83, 255, 13, 54, 75, 255, 9, 32, 49, 255, 5, 14, 16, 255, 0, 0, 3, 255, 3, 1, 12, 255, 1, 0, 35, 255, 0, 2, 42, 255, 1, 0, 43, 255, 3, 2, 31, 255, 3, 1, 10, 255, 6, 1, 4, 255, 2, 2, 4, 255, 0, 3, 0, 255, 4, 1, 6, 255, 1, 0, 6, 255, 1, 0, 6, 255, 2, 1, 5, 255, 0, 0, 4, 255, 1, 0, 3, 255, 2, 1, 3, 255, 0, 2, 2, 255, 3, 1, 1, 255, 3, 0, 5, 255, 3, 2, 0, 255, 2, 0, 18, 255, 11, 87, 153, 255, 14, 216, 248, 255, 3, 165, 128, 255, 3, 23, 12, 255, 12, 55, 80, 255, 0, 21, 31, 255, 44, 90, 106, 255, 118, 243, 254, 255, 28, 86, 84, 255, 0, 0, 0, 255, 10, 10, 10, 255, 4, 0, 0, 255, 3, 0, 3, 255, 1, 5, 15, 255, 2, 6, 24, 255, 2, 5, 18, 255, 2, 2, 6, 255, 4, 9, 23, 255, 0, 21, 42, 255, 4, 34, 45, 255, 4, 14, 19, 255, 1, 0, 1, 255, 1, 1, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 2, 255, 2, 1, 5, 255, 2, 1, 1, 255, 0, 0, 0, 255, 1, 2, 15, 255, 34, 38, 80, 255, 68, 77, 130, 255, 66, 79, 112, 255, 47, 56, 67, 255, 16, 21, 21, 255, 5, 7, 10, 255, 26, 25, 44, 255, 73, 64, 103, 255, 77, 82, 133, 255, 44, 64, 169, 255, 42, 61, 147, 255, 43, 52, 57, 255, 11, 18, 35, 255, 0, 1, 2, 255, 1, 0, 0, 255, 6, 4, 4, 255, 2, 6, 4, 255, 3, 3, 2, 255, 9, 5, 4, 255, 8, 5, 3, 255, 6, 4, 3, 255, 7, 4, 3, 255, 15, 8, 5, 255, 24, 17, 9, 255, 42, 22, 7, 255, 37, 24, 4, 255, 13, 13, 3, 255, 12, 11, 6, 255, 22, 15, 7, 255, 38, 27, 9, 255, 47, 31, 10, 255, 38, 21, 10, 255, 20, 15, 4, 255, 16, 19, 5, 255, 20, 21, 6, 255, 23, 21, 9, 255, 22, 16, 9, 255, 26, 21, 14, 255, 27, 24, 12, 255, 28, 23, 3, 255, 30, 26, 5, 255, 28, 24, 14, 255, 33, 28, 18, 255, 37, 30, 14, 255, 43, 34, 2, 255, 46, 33, 9, 255, 44, 30, 11, 255, 42, 32, 14, 255, 47, 30, 14, 255, 49, 32, 10, 255, 44, 29, 11, 255, 38, 25, 13, 255, 42, 25, 13, 255, 42, 28, 12, 255, 43, 33, 8, 255, 46, 31, 9, 255, 45, 29, 14, 255, 45, 28, 9, 255, 45, 30, 8, 255, 40, 29, 15, 255, 46, 30, 14, 255, 53, 34, 2, 255, 59, 37, 11, 255, 58, 39, 13, 255, 58, 41, 5, 255, 58, 36, 10, 255, 68, 33, 13, 255, 58, 33, 6, 255, 59, 39, 7, 255, 66, 36, 10, 255, 72, 37, 12, 255, 71, 39, 9, 255, 70, 39, 8, 255, 74, 43, 4, 255, 71, 40, 4, 255, 77, 45, 6, 255, 79, 46, 8, 255, 77, 44, 16, 255, 76, 49, 6, 255, 77, 48, 12, 255, 90, 58, 8, 255, 89, 52, 9, 255, 95, 55, 11, 255, 90, 54, 8, 255, 87, 56, 6, 255, 87, 55, 8, 255, 95, 56, 4, 255, 100, 56, 9, 255, 96, 54, 7, 255, 101, 60, 10, 255, 110, 62, 11, 255, 121, 70, 8, 255, 114, 68, 7, 255, 105, 65, 5, 255, 111, 65, 13, 255, 121, 74, 8, 255, 122, 75, 7, 255, 130, 81, 9, 255, 138, 88, 5, 255, 122, 79, 7, 255, 114, 68, 7, 255, 116, 64, 9, 255, 110, 63, 13, 255, 103, 60, 6, 255, 100, 56, 12, 255, 101, 55, 9, 255, 96, 50, 6, 255, 87, 50, 4, 255, 81, 49, 11, 255, 77, 43, 13, 255, 80, 45, 15, 255, 88, 54, 12, 255, 90, 52, 6, 255, 79, 48, 12, 255, 80, 49, 22, 255, 89, 49, 15, 255, 92, 51, 10, 255, 89, 54, 14, 255, 92, 54, 11, 255, 89, 55, 13, 255, 85, 56, 10, 255, 85, 54, 15, 255, 86, 56, 18, 255, 82, 56, 19, 255, 81, 55, 15, 255, 79, 50, 27, 255, 82, 57, 16, 255, 83, 58, 17, 255, 83, 58, 19, 255, 84, 60, 11, 255, 86, 58, 12, 255, 85, 59, 13, 255, 89, 60, 25, 255, 97, 62, 18, 255, 96, 61, 27, 255, 90, 65, 24, 255, 87, 66, 23, 255, 82, 60, 15, 255, 84, 68, 21, 255, 83, 66, 25, 255, 92, 65, 27, 255, 88, 61, 28, 255, 93, 63, 18, 255, 91, 66, 27, 255, 86, 64, 22, 255, 95, 69, 18, 255, 84, 67, 32, 255, 83, 69, 30, 255, 93, 70, 27, 255, 92, 70, 27, 255, 89, 72, 24, 255, 92, 73, 26, 255, 94, 71, 38, 255, 95, 71, 33, 255, 92, 71, 17, 255, 92, 72, 26, 255, 90, 72, 33, 255, 91, 75, 20, 255, 98, 73, 23, 255, 111, 76, 34, 255, 113, 75, 38, 255, 112, 77, 32, 255, 120, 83, 31, 255, 126, 83, 26, 255, 128, 81, 31, 255, 125, 86, 33, 255, 115, 83, 31, 255, 114, 83, 28, 255, 115, 80, 30, 255, 117, 83, 36, 255, 113, 81, 30, 255, 112, 81, 33, 255, 118, 85, 41, 255, 118, 85, 36, 255, 125, 88, 36, 255, 126, 87, 42, 255, 122, 92, 47, 255, 119, 93, 39, 255, 128, 100, 35, 255, 131, 99, 46, 255, 128, 100, 48, 255, 128, 101, 51, 255, 130, 105, 48, 255, 131, 108, 52, 255, 132, 111, 48, 255, 134, 115, 53, 255, 136, 116, 56, 255, 137, 114, 57, 255, 140, 122, 49, 255, 130, 118, 56, 255, 140, 131, 72, 255, 159, 149, 89, 255, 143, 126, 70, 255, 140, 121, 54, 255, 142, 124, 51, 255, 147, 123, 55, 255, 152, 123, 55, 255, 152, 122, 55, 255, 153, 123, 60, 255, 156, 128, 47, 255, 157, 127, 46, 255, 149, 120, 50, 255, 139, 115, 46, 255, 138, 113, 36, 255, 138, 107, 41, 255, 133, 105, 38, 255, 125, 107, 25, 255, 123, 107, 45, 255, 129, 101, 38, 255, 135, 97, 30, 255, 136, 96, 31, 255, 130, 93, 25, 255, 131, 92, 30, 255, 134, 92, 29, 255, 128, 90, 25, 255, 134, 89, 21, 255, 137, 86, 17, 255, 120, 87, 22, 255, 117, 87, 28, 255, 126, 86, 24, 255, 131, 84, 22, 255, 133, 80, 24, 255, 135, 81, 24, 255, 133, 83, 11, 255, 135, 80, 19, 255, 136, 77, 20, 255, 131, 75, 14, 255, 133, 78, 11, 255, 128, 77, 12, 255, 120, 74, 9, 255, 120, 76, 12, 255, 120, 75, 14, 255, 122, 72, 8, 255, 119, 74, 8, 255, 122, 78, 14, 255, 128, 76, 10, 255, 128, 75, 12, 255, 133, 76, 17, 255, 141, 77, 7, 255, 157, 84, 17, 255, 162, 91, 10, 255, 165, 93, 3, 255, 162, 85, 4, 255, 162, 87, 7, 255, 147, 79, 4, 255, 137, 70, 7, 255, 131, 68, 8, 255, 124, 66, 3, 255, 125, 67, 6, 255, 123, 64, 4, 255, 124, 67, 8, 255, 128, 66, 12, 255, 123, 61, 8, 255, 120, 68, 6, 255, 125, 70, 7, 255, 134, 69, 6, 255, 136, 68, 10, 255, 134, 72, 7, 255, 135, 70, 3, 255, 134, 68, 3, 255, 132, 68, 4, 255, 135, 73, 7, 255, 147, 80, 7, 255, 156, 84, 2, 255, 161, 85, 6, 255, 172, 91, 13, 255, 179, 95, 9, 255, 180, 98, 6, 255, 171, 92, 5, 255, 167, 88, 8, 255, 170, 90, 7, 255, 163, 85, 2, 255, 153, 80, 1, 255, 149, 77, 11, 255, 151, 77, 9, 255, 150, 79, 4, 255, 139, 74, 5, 255, 128, 65, 8, 255, 133, 67, 7, 255, 137, 68, 4, 255, 136, 69, 9, 255, 129, 66, 7, 255, 124, 66, 1, 255, 126, 68, 3, 255, 128, 66, 10, 255, 131, 61, 7, 255, 126, 59, 5, 255, 122, 63, 6, 255, 123, 65, 8, 255, 122, 58, 7, 255, 92, 30, 6, 255, 82, 31, 4, 255, 82, 34, 7, 255, 91, 37, 6, 255, 103, 47, 4, 255, 102, 46, 4, 255, 99, 49, 12, 255, 97, 48, 20, 255, 95, 45, 12, 255, 96, 45, 12, 255, 100, 45, 14, 255, 106, 50, 10, 255, 102, 45, 15, 255, 102, 51, 17, 255, 104, 49, 9, 255, 109, 51, 8, 255, 33, 82, 94, 255, 40, 76, 113, 255, 31, 76, 134, 255, 28, 81, 117, 255, 17, 73, 107, 255, 17, 63, 92, 255, 12, 58, 63, 255, 8, 36, 51, 255, 4, 15, 35, 255, 3, 3, 23, 255, 2, 1, 35, 255, 0, 1, 51, 255, 4, 0, 51, 255, 1, 1, 24, 255, 0, 2, 4, 255, 1, 0, 5, 255, 1, 0, 5, 255, 1, 1, 1, 255, 1, 1, 4, 255, 1, 0, 6, 255, 0, 0, 3, 255, 0, 0, 3, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 2, 255, 0, 1, 1, 255, 1, 1, 5, 255, 3, 1, 2, 255, 1, 0, 0, 255, 5, 28, 46, 255, 9, 167, 171, 255, 5, 108, 81, 255, 3, 7, 0, 255, 4, 0, 0, 255, 4, 19, 25, 255, 17, 82, 103, 255, 0, 17, 20, 255, 38, 97, 113, 255, 99, 235, 255, 255, 23, 65, 77, 255, 0, 0, 0, 255, 7, 11, 24, 255, 4, 0, 15, 255, 3, 5, 21, 255, 2, 1, 11, 255, 2, 3, 10, 255, 1, 6, 10, 255, 2, 17, 29, 255, 3, 28, 37, 255, 1, 9, 11, 255, 0, 2, 0, 255, 2, 0, 2, 255, 0, 2, 1, 255, 0, 0, 0, 255, 1, 1, 2, 255, 3, 0, 1, 255, 0, 2, 0, 255, 0, 0, 1, 255, 0, 0, 0, 255, 1, 1, 0, 255, 0, 0, 0, 255, 0, 0, 2, 255, 0, 0, 2, 255, 0, 0, 2, 255, 0, 1, 0, 255, 0, 1, 0, 255, 0, 1, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 1, 0, 4, 255, 0, 0, 3, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 2, 0, 0, 255, 1, 0, 2, 255, 0, 2, 0, 255, 0, 2, 0, 255, 0, 0, 2, 255, 0, 0, 3, 255, 2, 0, 0, 255, 0, 0, 2, 255, 0, 1, 7, 255, 18, 20, 68, 255, 65, 68, 130, 255, 70, 80, 121, 255, 44, 57, 56, 255, 18, 29, 19, 255, 5, 6, 4, 255, 23, 14, 30, 255, 54, 54, 82, 255, 68, 69, 117, 255, 63, 66, 107, 255, 39, 59, 154, 255, 31, 47, 105, 255, 18, 20, 22, 255, 6, 3, 2, 255, 0, 0, 0, 255, 3, 1, 5, 255, 9, 2, 2, 255, 8, 3, 5, 255, 4, 2, 2, 255, 2, 3, 0, 255, 3, 4, 1, 255, 5, 5, 0, 255, 6, 5, 0, 255, 11, 6, 1, 255, 18, 14, 3, 255, 13, 11, 4, 255, 15, 10, 7, 255, 11, 10, 5, 255, 25, 20, 18, 255, 30, 24, 16, 255, 35, 30, 14, 255, 31, 21, 5, 255, 28, 20, 4, 255, 22, 13, 7, 255, 21, 14, 7, 255, 19, 21, 5, 255, 22, 20, 8, 255, 24, 24, 5, 255, 28, 22, 13, 255, 35, 28, 16, 255, 29, 24, 5, 255, 30, 27, 9, 255, 29, 26, 8, 255, 36, 27, 8, 255, 39, 28, 11, 255, 42, 32, 18, 255, 39, 32, 13, 255, 48, 35, 11, 255, 53, 35, 9, 255, 47, 31, 9, 255, 50, 32, 19, 255, 50, 36, 4, 255, 50, 35, 7, 255, 41, 32, 15, 255, 48, 31, 12, 255, 47, 28, 11, 255, 41, 27, 16, 255, 42, 28, 12, 255, 43, 28, 12, 255, 37, 27, 11, 255, 44, 31, 9, 255, 47, 30, 12, 255, 50, 33, 12, 255, 56, 34, 6, 255, 61, 35, 12, 255, 58, 33, 13, 255, 60, 36, 6, 255, 64, 36, 9, 255, 65, 29, 13, 255, 58, 33, 17, 255, 64, 36, 9, 255, 62, 36, 12, 255, 69, 36, 12, 255, 66, 39, 2, 255, 67, 39, 8, 255, 71, 41, 10, 255, 75, 41, 17, 255, 78, 43, 3, 255, 84, 49, 5, 255, 80, 42, 10, 255, 80, 43, 9, 255, 79, 45, 6, 255, 79, 47, 9, 255, 85, 51, 13, 255, 90, 52, 6, 255, 93, 53, 3, 255, 91, 54, 6, 255, 90, 56, 7, 255, 93, 58, 10, 255, 95, 55, 10, 255, 95, 57, 4, 255, 99, 59, 4, 255, 109, 64, 9, 255, 115, 65, 6, 255, 113, 67, 4, 255, 110, 66, 4, 255, 115, 66, 8, 255, 118, 71, 5, 255, 116, 71, 7, 255, 129, 80, 15, 255, 134, 82, 9, 255, 122, 74, 5, 255, 114, 66, 11, 255, 113, 66, 9, 255, 108, 63, 11, 255, 102, 61, 10, 255, 96, 53, 14, 255, 97, 54, 11, 255, 95, 53, 13, 255, 91, 53, 13, 255, 91, 54, 10, 255, 86, 50, 13, 255, 84, 52, 8, 255, 86, 57, 8, 255, 89, 51, 11, 255, 90, 48, 9, 255, 87, 53, 9, 255, 87, 48, 9, 255, 84, 54, 13, 255, 93, 59, 18, 255, 87, 53, 14, 255, 86, 58, 9, 255, 91, 58, 7, 255, 94, 54, 13, 255, 90, 53, 15, 255, 90, 55, 19, 255, 87, 54, 18, 255, 82, 55, 19, 255, 82, 57, 17, 255, 82, 54, 15, 255, 85, 57, 19, 255, 84, 60, 19, 255, 90, 59, 18, 255, 88, 62, 18, 255, 83, 64, 20, 255, 91, 69, 20, 255, 96, 67, 27, 255, 99, 68, 22, 255, 91, 64, 22, 255, 88, 63, 23, 255, 89, 60, 27, 255, 89, 65, 16, 255, 90, 65, 11, 255, 94, 68, 17, 255, 93, 69, 13, 255, 91, 67, 23, 255, 89, 68, 12, 255, 91, 68, 24, 255, 90, 69, 25, 255, 90, 70, 27, 255, 92, 71, 26, 255, 90, 69, 26, 255, 94, 70, 29, 255, 93, 64, 35, 255, 94, 69, 31, 255, 92, 72, 27, 255, 92, 74, 23, 255, 91, 72, 31, 255, 95, 71, 31, 255, 92, 71, 19, 255, 94, 75, 28, 255, 102, 74, 30, 255, 114, 76, 29, 255, 117, 80, 35, 255, 119, 80, 27, 255, 127, 84, 20, 255, 132, 84, 27, 255, 125, 81, 31, 255, 119, 78, 36, 255, 117, 80, 19, 255, 118, 83, 27, 255, 120, 80, 31, 255, 110, 83, 29, 255, 110, 82, 35, 255, 119, 82, 38, 255, 115, 87, 34, 255, 122, 87, 30, 255, 122, 88, 39, 255, 124, 90, 48, 255, 123, 90, 47, 255, 122, 94, 40, 255, 126, 100, 43, 255, 130, 102, 45, 255, 128, 99, 50, 255, 130, 104, 47, 255, 133, 108, 48, 255, 135, 110, 51, 255, 137, 113, 49, 255, 136, 114, 49, 255, 137, 111, 63, 255, 141, 116, 57, 255, 131, 118, 54, 255, 128, 119, 60, 255, 160, 148, 85, 255, 155, 137, 87, 255, 139, 120, 55, 255, 145, 123, 50, 255, 152, 124, 57, 255, 151, 120, 55, 255, 155, 124, 53, 255, 155, 126, 49, 255, 154, 123, 54, 255, 161, 129, 53, 255, 151, 122, 52, 255, 141, 117, 48, 255, 140, 114, 40, 255, 139, 112, 33, 255, 133, 107, 42, 255, 126, 105, 37, 255, 124, 105, 39, 255, 121, 104, 36, 255, 132, 97, 35, 255, 141, 96, 29, 255, 135, 96, 38, 255, 134, 92, 29, 255, 137, 94, 23, 255, 129, 91, 27, 255, 133, 88, 23, 255, 138, 87, 20, 255, 126, 85, 24, 255, 114, 84, 22, 255, 122, 85, 16, 255, 133, 85, 16, 255, 139, 87, 19, 255, 135, 80, 21, 255, 136, 82, 18, 255, 134, 76, 22, 255, 137, 78, 19, 255, 128, 79, 9, 255, 132, 78, 9, 255, 133, 76, 14, 255, 125, 75, 10, 255, 120, 76, 8, 255, 120, 75, 9, 255, 124, 73, 8, 255, 124, 74, 13, 255, 121, 74, 12, 255, 129, 79, 2, 255, 134, 79, 3, 255, 140, 80, 8, 255, 144, 79, 8, 255, 156, 86, 9, 255, 165, 93, 5, 255, 169, 94, 6, 255, 165, 88, 5, 255, 161, 85, 5, 255, 155, 82, 7, 255, 142, 76, 6, 255, 134, 72, 7, 255, 125, 65, 12, 255, 125, 68, 8, 255, 126, 69, 9, 255, 131, 71, 11, 255, 127, 65, 10, 255, 128, 66, 8, 255, 122, 67, 4, 255, 125, 68, 5, 255, 133, 69, 8, 255, 131, 68, 5, 255, 134, 72, 5, 255, 154, 70, 6, 255, 144, 69, 12, 255, 132, 67, 9, 255, 145, 77, 8, 255, 146, 77, 13, 255, 150, 80, 5, 255, 164, 89, 1, 255, 174, 95, 8, 255, 183, 102, 7, 255, 179, 98, 4, 255, 170, 88, 5, 255, 178, 93, 4, 255, 180, 95, 2, 255, 166, 92, 2, 255, 158, 83, 4, 255, 152, 75, 6, 255, 154, 77, 6, 255, 150, 76, 4, 255, 142, 73, 2, 255, 133, 71, 9, 255, 137, 69, 6, 255, 137, 66, 3, 255, 138, 69, 9, 255, 139, 66, 10, 255, 134, 67, 5, 255, 130, 71, 4, 255, 134, 68, 7, 255, 133, 70, 8, 255, 121, 68, 7, 255, 126, 65, 0, 255, 130, 62, 6, 255, 103, 40, 4, 255, 92, 34, 4, 255, 88, 40, 1, 255, 105, 41, 5, 255, 105, 44, 9, 255, 99, 49, 7, 255, 92, 50, 13, 255, 96, 54, 14, 255, 104, 53, 11, 255, 101, 49, 8, 255, 99, 44, 4, 255, 99, 40, 5, 255, 101, 48, 11, 255, 107, 49, 17, 255, 104, 43, 18, 255, 106, 44, 16, 255, 111, 48, 15, 255, 43, 82, 119, 255, 48, 94, 139, 255, 37, 99, 148, 255, 32, 97, 144, 255, 25, 86, 124, 255, 20, 71, 108, 255, 12, 68, 96, 255, 12, 61, 80, 255, 10, 49, 75, 255, 0, 28, 51, 255, 3, 9, 48, 255, 3, 1, 55, 255, 1, 2, 50, 255, 2, 1, 24, 255, 0, 1, 4, 255, 1, 0, 6, 255, 1, 0, 4, 255, 0, 0, 1, 255, 1, 0, 3, 255, 1, 0, 5, 255, 0, 0, 2, 255, 0, 0, 2, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 2, 255, 0, 0, 1, 255, 1, 1, 5, 255, 3, 2, 6, 255, 0, 2, 5, 255, 3, 6, 11, 255, 3, 5, 9, 255, 2, 1, 1, 255, 2, 3, 9, 255, 2, 3, 7, 255, 3, 1, 3, 255, 2, 18, 30, 255, 14, 86, 111, 255, 0, 12, 28, 255, 59, 119, 147, 255, 114, 247, 255, 255, 21, 57, 56, 255, 0, 4, 22, 255, 2, 11, 27, 255, 7, 0, 0, 255, 2, 2, 7, 255, 5, 6, 17, 255, 2, 20, 19, 255, 4, 22, 22, 255, 4, 4, 8, 255, 0, 2, 0, 255, 2, 0, 3, 255, 2, 2, 3, 255, 1, 2, 1, 255, 2, 1, 2, 255, 0, 1, 1, 255, 2, 0, 0, 255, 2, 2, 1, 255, 2, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 0, 255, 1, 1, 0, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 1, 0, 255, 1, 2, 1, 255, 0, 0, 1, 255, 0, 0, 2, 255, 1, 1, 0, 255, 5, 2, 2, 255, 4, 0, 4, 255, 2, 0, 3, 255, 2, 0, 2, 255, 0, 0, 0, 255, 2, 2, 4, 255, 15, 18, 56, 255, 48, 60, 133, 255, 71, 82, 133, 255, 50, 55, 77, 255, 30, 32, 26, 255, 9, 6, 3, 255, 19, 14, 16, 255, 48, 47, 65, 255, 57, 63, 105, 255, 35, 45, 132, 255, 49, 57, 120, 255, 59, 55, 65, 255, 4, 17, 30, 255, 0, 7, 4, 255, 1, 0, 0, 255, 5, 2, 3, 255, 3, 3, 0, 255, 1, 2, 5, 255, 5, 6, 1, 255, 3, 4, 0, 255, 7, 4, 2, 255, 9, 3, 4, 255, 8, 1, 5, 255, 8, 4, 4, 255, 8, 9, 1, 255, 11, 11, 1, 255, 11, 8, 7, 255, 14, 11, 8, 255, 27, 25, 7, 255, 34, 30, 2, 255, 39, 32, 4, 255, 32, 23, 4, 255, 21, 14, 3, 255, 24, 18, 6, 255, 19, 20, 6, 255, 20, 19, 7, 255, 28, 22, 14, 255, 26, 24, 12, 255, 28, 23, 13, 255, 29, 32, 10, 255, 29, 31, 8, 255, 38, 33, 6, 255, 38, 29, 5, 255, 34, 29, 11, 255, 34, 34, 8, 255, 38, 33, 11, 255, 42, 34, 10, 255, 44, 39, 5, 255, 47, 40, 5, 255, 54, 40, 4, 255, 61, 38, 4, 255, 51, 30, 13, 255, 47, 29, 8, 255, 56, 37, 4, 255, 48, 34, 1, 255, 50, 33, 6, 255, 47, 29, 7, 255, 40, 27, 10, 255, 42, 26, 10, 255, 38, 23, 5, 255, 42, 29, 14, 255, 44, 29, 11, 255, 47, 28, 2, 255, 50, 30, 7, 255, 51, 34, 6, 255, 53, 32, 5, 255, 59, 35, 8, 255, 62, 36, 13, 255, 67, 39, 13, 255, 69, 37, 10, 255, 62, 35, 11, 255, 57, 34, 10, 255, 63, 39, 11, 255, 63, 40, 11, 255, 64, 39, 8, 255, 70, 41, 11, 255, 72, 43, 12, 255, 71, 39, 4, 255, 76, 42, 15, 255, 76, 42, 7, 255, 82, 48, 9, 255, 79, 44, 4, 255, 80, 44, 8, 255, 78, 44, 8, 255, 76, 43, 7, 255, 79, 44, 14, 255, 86, 49, 4, 255, 88, 52, 7, 255, 89, 53, 5, 255, 91, 53, 3, 255, 91, 52, 9, 255, 91, 50, 13, 255, 93, 54, 13, 255, 95, 58, 7, 255, 108, 65, 11, 255, 112, 64, 7, 255, 114, 68, 8, 255, 111, 67, 6, 255, 117, 65, 9, 255, 119, 68, 14, 255, 117, 70, 4, 255, 127, 77, 6, 255, 133, 81, 8, 255, 121, 72, 3, 255, 112, 66, 8, 255, 110, 65, 4, 255, 110, 66, 7, 255, 106, 60, 5, 255, 100, 57, 5, 255, 99, 60, 4, 255, 93, 57, 3, 255, 93, 58, 6, 255, 93, 58, 5, 255, 88, 55, 1, 255, 87, 54, 7, 255, 86, 51, 9, 255, 89, 55, 9, 255, 97, 52, 11, 255, 94, 54, 19, 255, 87, 53, 15, 255, 87, 54, 13, 255, 92, 56, 17, 255, 95, 59, 14, 255, 93, 58, 11, 255, 85, 54, 8, 255, 88, 60, 17, 255, 83, 54, 19, 255, 85, 52, 21, 255, 85, 55, 13, 255, 81, 59, 10, 255, 81, 58, 17, 255, 88, 59, 27, 255, 84, 56, 20, 255, 81, 58, 15, 255, 93, 60, 17, 255, 92, 61, 15, 255, 90, 61, 19, 255, 95, 66, 22, 255, 96, 65, 23, 255, 98, 70, 19, 255, 94, 69, 13, 255, 87, 65, 13, 255, 93, 65, 19, 255, 99, 70, 21, 255, 93, 65, 26, 255, 94, 67, 23, 255, 95, 69, 17, 255, 96, 71, 18, 255, 91, 67, 19, 255, 87, 64, 19, 255, 93, 69, 28, 255, 90, 67, 20, 255, 92, 68, 25, 255, 93, 71, 25, 255, 94, 71, 23, 255, 95, 70, 24, 255, 87, 62, 39, 255, 91, 69, 32, 255, 97, 72, 31, 255, 97, 74, 25, 255, 92, 71, 18, 255, 97, 71, 20, 255, 98, 75, 22, 255, 101, 72, 25, 255, 114, 80, 23, 255, 112, 80, 30, 255, 122, 80, 31, 255, 125, 82, 22, 255, 128, 81, 22, 255, 124, 83, 27, 255, 115, 80, 36, 255, 112, 80, 27, 255, 119, 80, 29, 255, 118, 83, 26, 255, 116, 87, 30, 255, 109, 84, 17, 255, 117, 87, 22, 255, 120, 85, 37, 255, 123, 88, 37, 255, 122, 88, 40, 255, 124, 91, 39, 255, 128, 97, 38, 255, 126, 99, 31, 255, 125, 96, 43, 255, 129, 100, 40, 255, 133, 102, 44, 255, 134, 103, 53, 255, 131, 104, 52, 255, 135, 107, 48, 255, 138, 112, 48, 255, 138, 113, 47, 255, 138, 115, 37, 255, 142, 116, 53, 255, 136, 117, 51, 255, 127, 119, 37, 255, 152, 143, 74, 255, 163, 147, 100, 255, 139, 119, 65, 255, 143, 118, 58, 255, 148, 120, 59, 255, 151, 119, 63, 255, 154, 124, 51, 255, 157, 124, 52, 255, 161, 128, 37, 255, 162, 126, 38, 255, 153, 121, 41, 255, 141, 116, 36, 255, 141, 111, 46, 255, 140, 109, 43, 255, 134, 107, 38, 255, 127, 103, 36, 255, 120, 99, 32, 255, 121, 106, 35, 255, 133, 100, 38, 255, 139, 95, 33, 255, 134, 95, 31, 255, 136, 92, 30, 255, 136, 94, 22, 255, 132, 94, 19, 255, 133, 89, 21, 255, 137, 86, 21, 255, 127, 82, 28, 255, 116, 81, 26, 255, 120, 84, 18, 255, 129, 86, 14, 255, 134, 85, 19, 255, 133, 81, 19, 255, 133, 82, 13, 255, 134, 80, 20, 255, 133, 77, 24, 255, 128, 77, 6, 255, 133, 76, 13, 255, 138, 80, 19, 255, 128, 77, 10, 255, 123, 75, 14, 255, 124, 76, 9, 255, 122, 77, 8, 255, 120, 76, 6, 255, 120, 74, 12, 255, 124, 78, 11, 255, 130, 78, 16, 255, 146, 88, 16, 255, 144, 84, 11, 255, 155, 85, 8, 255, 166, 94, 7, 255, 167, 91, 7, 255, 165, 88, 8, 255, 166, 89, 11, 255, 159, 83, 11, 255, 144, 77, 9, 255, 133, 71, 2, 255, 126, 68, 6, 255, 128, 72, 7, 255, 122, 67, 7, 255, 127, 69, 6, 255, 128, 69, 7, 255, 124, 67, 1, 255, 128, 68, 4, 255, 133, 71, 7, 255, 129, 72, 8, 255, 133, 70, 7, 255, 135, 71, 5, 255, 145, 71, 6, 255, 134, 69, 6, 255, 127, 69, 3, 255, 145, 77, 7, 255, 145, 73, 15, 255, 155, 83, 10, 255, 165, 90, 5, 255, 177, 98, 15, 255, 186, 102, 12, 255, 182, 96, 6, 255, 184, 98, 7, 255, 183, 99, 0, 255, 185, 98, 4, 255, 175, 91, 4, 255, 167, 85, 6, 255, 159, 79, 5, 255, 155, 80, 3, 255, 150, 79, 1, 255, 144, 76, 2, 255, 142, 72, 2, 255, 146, 71, 10, 255, 142, 74, 5, 255, 134, 72, 1, 255, 136, 74, 7, 255, 136, 71, 8, 255, 134, 68, 7, 255, 135, 72, 6, 255, 138, 68, 7, 255, 138, 61, 9, 255, 137, 60, 9, 255, 126, 46, 1, 255, 91, 35, 1, 255, 92, 33, 9, 255, 112, 42, 12, 255, 121, 49, 2, 255, 107, 51, 7, 255, 90, 52, 10, 255, 99, 49, 16, 255, 100, 48, 18, 255, 101, 48, 14, 255, 104, 47, 12, 255, 106, 49, 12, 255, 103, 49, 12, 255, 102, 46, 12, 255, 100, 44, 14, 255, 96, 39, 20, 255, 101, 44, 17, 255, 108, 51, 10, 255, 35, 86, 118, 255, 31, 93, 147, 255, 37, 97, 156, 255, 39, 102, 156, 255, 21, 98, 141, 255, 18, 81, 125, 255, 24, 75, 115, 255, 22, 75, 102, 255, 10, 71, 100, 255, 4, 48, 99, 255, 1, 12, 76, 255, 1, 0, 56, 255, 3, 1, 47, 255, 1, 1, 19, 255, 0, 2, 3, 255, 1, 0, 4, 255, 1, 1, 1, 255, 1, 1, 2, 255, 1, 0, 3, 255, 0, 0, 4, 255, 0, 0, 2, 255, 0, 0, 3, 255, 1, 1, 2, 255, 1, 1, 1, 255, 1, 1, 3, 255, 1, 1, 2, 255, 1, 1, 0, 255, 0, 4, 5, 255, 3, 0, 3, 255, 1, 2, 2, 255, 3, 2, 0, 255, 4, 1, 5, 255, 0, 2, 3, 255, 3, 0, 6, 255, 5, 1, 6, 255, 2, 0, 0, 255, 7, 21, 35, 255, 12, 91, 125, 255, 0, 22, 49, 255, 84, 149, 180, 255, 119, 234, 239, 255, 14, 43, 52, 255, 2, 3, 9, 255, 3, 8, 21, 255, 5, 4, 18, 255, 1, 22, 22, 255, 2, 15, 14, 255, 0, 1, 2, 255, 2, 0, 3, 255, 2, 0, 0, 255, 4, 0, 2, 255, 1, 1, 1, 255, 3, 0, 3, 255, 2, 0, 5, 255, 0, 2, 2, 255, 2, 1, 4, 255, 2, 2, 3, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 3, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 3, 255, 1, 0, 3, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 2, 255, 1, 0, 0, 255, 0, 3, 4, 255, 1, 1, 3, 255, 2, 1, 3, 255, 0, 0, 0, 255, 11, 15, 44, 255, 38, 50, 103, 255, 63, 78, 136, 255, 57, 66, 94, 255, 24, 28, 34, 255, 7, 8, 8, 255, 8, 10, 16, 255, 38, 35, 57, 255, 47, 54, 99, 255, 34, 48, 107, 255, 27, 42, 125, 255, 22, 41, 121, 255, 25, 36, 56, 255, 13, 6, 0, 255, 0, 0, 1, 255, 1, 1, 5, 255, 3, 5, 3, 255, 4, 0, 3, 255, 8, 0, 4, 255, 5, 2, 1, 255, 2, 4, 3, 255, 5, 4, 3, 255, 6, 5, 0, 255, 7, 4, 0, 255, 9, 4, 2, 255, 11, 6, 4, 255, 11, 7, 5, 255, 18, 11, 5, 255, 30, 19, 7, 255, 38, 28, 6, 255, 34, 24, 2, 255, 29, 19, 11, 255, 21, 17, 9, 255, 20, 19, 5, 255, 23, 19, 4, 255, 29, 21, 7, 255, 26, 20, 9, 255, 28, 24, 9, 255, 26, 22, 13, 255, 22, 25, 9, 255, 26, 27, 7, 255, 31, 29, 11, 255, 33, 30, 14, 255, 34, 32, 8, 255, 35, 32, 11, 255, 42, 34, 12, 255, 42, 34, 7, 255, 39, 32, 10, 255, 45, 35, 6, 255, 48, 44, 1, 255, 43, 35, 5, 255, 50, 38, 12, 255, 53, 40, 3, 255, 52, 39, 8, 255, 50, 37, 6, 255, 46, 35, 8, 255, 42, 31, 9, 255, 46, 31, 5, 255, 39, 26, 8, 255, 37, 27, 12, 255, 43, 27, 10, 255, 46, 30, 9, 255, 45, 32, 14, 255, 50, 30, 6, 255, 57, 32, 1, 255, 53, 29, 8, 255, 55, 29, 12, 255, 55, 29, 10, 255, 59, 34, 7, 255, 60, 35, 12, 255, 62, 35, 14, 255, 63, 33, 8, 255, 66, 40, 9, 255, 66, 35, 6, 255, 63, 39, 8, 255, 66, 41, 2, 255, 69, 46, 2, 255, 78, 40, 8, 255, 69, 38, 6, 255, 70, 38, 11, 255, 72, 37, 11, 255, 79, 44, 11, 255, 78, 42, 17, 255, 84, 48, 12, 255, 79, 45, 5, 255, 77, 44, 9, 255, 76, 44, 12, 255, 77, 43, 14, 255, 78, 43, 6, 255, 82, 47, 6, 255, 82, 50, 5, 255, 92, 53, 8, 255, 96, 53, 9, 255, 96, 55, 9, 255, 95, 56, 6, 255, 94, 54, 3, 255, 102, 60, 8, 255, 113, 66, 13, 255, 114, 69, 12, 255, 109, 65, 5, 255, 116, 66, 6, 255, 119, 69, 13, 255, 116, 68, 5, 255, 125, 73, 2, 255, 138, 86, 6, 255, 120, 74, 1, 255, 113, 70, 6, 255, 112, 69, 7, 255, 112, 67, 8, 255, 111, 63, 7, 255, 107, 60, 7, 255, 103, 61, 15, 255, 101, 63, 9, 255, 95, 57, 9, 255, 93, 56, 13, 255, 92, 58, 5, 255, 90, 55, 14, 255, 93, 54, 10, 255, 93, 55, 9, 255, 95, 51, 19, 255, 93, 55, 14, 255, 94, 57, 12, 255, 95, 58, 19, 255, 90, 59, 10, 255, 98, 62, 7, 255, 96, 60, 11, 255, 85, 54, 10, 255, 87, 62, 13, 255, 86, 59, 11, 255, 86, 54, 18, 255, 88, 55, 25, 255, 83, 56, 12, 255, 85, 58, 8, 255, 97, 64, 25, 255, 90, 57, 21, 255, 87, 60, 13, 255, 89, 64, 14, 255, 86, 57, 20, 255, 92, 57, 24, 255, 102, 64, 20, 255, 101, 65, 20, 255, 98, 67, 18, 255, 96, 66, 17, 255, 92, 64, 25, 255, 90, 64, 20, 255, 97, 63, 15, 255, 96, 67, 21, 255, 91, 67, 18, 255, 98, 65, 23, 255, 97, 67, 13, 255, 97, 71, 19, 255, 92, 69, 17, 255, 93, 70, 21, 255, 91, 67, 21, 255, 94, 68, 24, 255, 94, 72, 22, 255, 91, 69, 23, 255, 94, 71, 23, 255, 89, 70, 10, 255, 93, 68, 27, 255, 100, 70, 33, 255, 97, 69, 16, 255, 95, 70, 22, 255, 103, 75, 28, 255, 102, 77, 17, 255, 102, 72, 26, 255, 109, 74, 34, 255, 113, 82, 27, 255, 122, 79, 30, 255, 127, 80, 38, 255, 129, 80, 41, 255, 129, 82, 31, 255, 120, 80, 21, 255, 120, 84, 16, 255, 122, 79, 27, 255, 116, 83, 31, 255, 119, 88, 28, 255, 112, 84, 28, 255, 115, 89, 34, 255, 129, 89, 28, 255, 124, 90, 38, 255, 124, 92, 33, 255, 126, 92, 42, 255, 128, 96, 39, 255, 126, 97, 28, 255, 127, 96, 40, 255, 132, 101, 42, 255, 131, 100, 44, 255, 133, 104, 41, 255, 132, 104, 41, 255, 133, 103, 51, 255, 137, 107, 47, 255, 138, 109, 55, 255, 138, 110, 60, 255, 143, 115, 55, 255, 144, 120, 40, 255, 134, 117, 43, 255, 138, 128, 64, 255, 168, 154, 96, 255, 147, 127, 63, 255, 145, 118, 52, 255, 149, 121, 44, 255, 152, 121, 50, 255, 154, 121, 49, 255, 158, 124, 44, 255, 167, 129, 43, 255, 166, 124, 35, 255, 156, 119, 39, 255, 145, 117, 38, 255, 142, 111, 45, 255, 143, 108, 44, 255, 139, 106, 41, 255, 132, 105, 33, 255, 129, 105, 38, 255, 121, 104, 34, 255, 128, 97, 34, 255, 134, 92, 32, 255, 135, 97, 25, 255, 138, 96, 33, 255, 137, 90, 30, 255, 136, 91, 25, 255, 135, 87, 27, 255, 138, 88, 22, 255, 131, 86, 19, 255, 124, 87, 17, 255, 122, 86, 14, 255, 129, 87, 18, 255, 134, 83, 23, 255, 139, 83, 20, 255, 140, 83, 18, 255, 134, 77, 20, 255, 136, 82, 22, 255, 135, 80, 15, 255, 136, 77, 12, 255, 136, 77, 13, 255, 131, 75, 18, 255, 124, 75, 7, 255, 125, 76, 13, 255, 124, 77, 11, 255, 133, 77, 12, 255, 133, 73, 4, 255, 127, 76, 16, 255, 130, 78, 13, 255, 140, 82, 23, 255, 142, 85, 21, 255, 153, 84, 13, 255, 159, 88, 5, 255, 165, 90, 6, 255, 173, 96, 10, 255, 170, 93, 9, 255, 163, 86, 9, 255, 148, 81, 11, 255, 141, 78, 7, 255, 132, 73, 2, 255, 128, 72, 3, 255, 127, 71, 9, 255, 129, 71, 7, 255, 126, 70, 5, 255, 129, 70, 4, 255, 129, 67, 3, 255, 128, 68, 3, 255, 131, 71, 5, 255, 129, 73, 5, 255, 135, 70, 5, 255, 137, 71, 9, 255, 129, 67, 9, 255, 132, 72, 9, 255, 145, 77, 3, 255, 144, 77, 5, 255, 148, 83, 5, 255, 165, 92, 11, 255, 180, 100, 11, 255, 183, 98, 1, 255, 183, 95, 1, 255, 189, 101, 4, 255, 184, 97, 2, 255, 181, 95, 7, 255, 174, 91, 6, 255, 168, 85, 4, 255, 163, 86, 5, 255, 159, 85, 4, 255, 154, 81, 3, 255, 149, 77, 4, 255, 145, 74, 7, 255, 141, 72, 8, 255, 145, 74, 0, 255, 146, 72, 6, 255, 144, 74, 3, 255, 147, 75, 1, 255, 149, 70, 2, 255, 142, 64, 1, 255, 132, 52, 4, 255, 112, 40, 7, 255, 113, 48, 12, 255, 104, 37, 15, 255, 93, 33, 4, 255, 111, 47, 12, 255, 131, 53, 4, 255, 113, 52, 5, 255, 93, 50, 8, 255, 99, 49, 10, 255, 100, 48, 9, 255, 98, 42, 11, 255, 93, 41, 11, 255, 103, 46, 13, 255, 103, 48, 10, 255, 99, 47, 7, 255, 107, 48, 12, 255, 106, 50, 15, 255, 104, 47, 15, 255, 107, 49, 12, 255, 110, 51, 7, 255, 26, 81, 110, 255, 26, 91, 137, 255, 31, 96, 138, 255, 38, 101, 149, 255, 34, 101, 148, 255, 29, 97, 141, 255, 18, 87, 131, 255, 29, 82, 128, 255, 22, 85, 117, 255, 9, 51, 122, 255, 3, 4, 83, 255, 1, 1, 61, 255, 1, 0, 47, 255, 1, 0, 13, 255, 0, 0, 3, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 0, 2, 255, 2, 0, 5, 255, 0, 0, 5, 255, 0, 0, 2, 255, 1, 1, 3, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 2, 255, 3, 0, 3, 255, 3, 1, 4, 255, 0, 1, 3, 255, 5, 1, 1, 255, 1, 1, 2, 255, 2, 1, 3, 255, 1, 3, 2, 255, 1, 3, 2, 255, 2, 2, 5, 255, 0, 2, 0, 255, 1, 8, 10, 255, 1, 5, 6, 255, 6, 31, 52, 255, 9, 81, 116, 255, 3, 25, 41, 255, 86, 176, 190, 255, 100, 214, 220, 255, 10, 28, 38, 255, 4, 12, 23, 255, 3, 21, 28, 255, 3, 19, 18, 255, 5, 6, 10, 255, 3, 0, 4, 255, 0, 2, 2, 255, 0, 2, 1, 255, 1, 2, 0, 255, 2, 3, 5, 255, 1, 0, 3, 255, 5, 2, 2, 255, 2, 1, 0, 255, 2, 0, 0, 255, 3, 1, 3, 255, 0, 1, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 1, 1, 1, 255, 1, 1, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 1, 1, 6, 255, 1, 1, 8, 255, 1, 1, 7, 255, 2, 1, 5, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 0, 0, 2, 255, 1, 1, 2, 255, 0, 0, 1, 255, 0, 0, 2, 255, 1, 1, 6, 255, 1, 2, 7, 255, 3, 2, 5, 255, 0, 0, 0, 255, 3, 7, 24, 255, 29, 40, 94, 255, 51, 71, 123, 255, 46, 67, 105, 255, 22, 36, 45, 255, 8, 7, 9, 255, 3, 7, 8, 255, 32, 33, 69, 255, 58, 60, 104, 255, 45, 53, 98, 255, 22, 37, 108, 255, 24, 34, 95, 255, 21, 22, 48, 255, 5, 6, 4, 255, 0, 0, 0, 255, 2, 1, 5, 255, 4, 1, 3, 255, 6, 2, 0, 255, 4, 3, 2, 255, 4, 2, 4, 255, 5, 2, 2, 255, 4, 2, 1, 255, 2, 0, 5, 255, 6, 1, 1, 255, 6, 3, 2, 255, 5, 4, 1, 255, 7, 5, 2, 255, 14, 8, 4, 255, 23, 15, 8, 255, 33, 21, 10, 255, 29, 20, 4, 255, 23, 20, 2, 255, 22, 17, 7, 255, 26, 18, 13, 255, 27, 16, 6, 255, 26, 20, 5, 255, 26, 23, 12, 255, 26, 21, 7, 255, 30, 28, 14, 255, 33, 31, 8, 255, 35, 27, 10, 255, 30, 28, 6, 255, 34, 37, 8, 255, 42, 34, 10, 255, 42, 33, 8, 255, 36, 41, 5, 255, 32, 38, 9, 255, 45, 38, 11, 255, 45, 39, 8, 255, 40, 38, 11, 255, 42, 35, 10, 255, 48, 39, 10, 255, 46, 35, 7, 255, 54, 40, 13, 255, 54, 39, 6, 255, 51, 40, 6, 255, 52, 34, 12, 255, 46, 36, 17, 255, 50, 31, 20, 255, 48, 29, 9, 255, 39, 27, 4, 255, 44, 31, 9, 255, 43, 28, 9, 255, 48, 31, 7, 255, 45, 30, 6, 255, 47, 31, 8, 255, 59, 38, 7, 255, 58, 33, 5, 255, 62, 33, 14, 255, 57, 31, 8, 255, 63, 39, 5, 255, 60, 36, 3, 255, 63, 36, 9, 255, 64, 36, 7, 255, 67, 33, 11, 255, 74, 36, 17, 255, 71, 38, 12, 255, 67, 40, 7, 255, 75, 47, 5, 255, 87, 41, 11, 255, 66, 36, 13, 255, 68, 40, 7, 255, 74, 43, 2, 255, 77, 43, 9, 255, 80, 45, 11, 255, 85, 50, 4, 255, 80, 44, 3, 255, 74, 45, 9, 255, 73, 44, 13, 255, 73, 42, 9, 255, 79, 42, 16, 255, 81, 46, 8, 255, 80, 48, 5, 255, 89, 52, 7, 255, 93, 54, 9, 255, 95, 55, 10, 255, 99, 57, 12, 255, 101, 58, 10, 255, 104, 59, 10, 255, 110, 62, 8, 255, 111, 63, 2, 255, 112, 66, 12, 255, 118, 69, 9, 255, 115, 70, 0, 255, 111, 66, 4, 255, 122, 73, 11, 255, 131, 80, 12, 255, 118, 72, 9, 255, 107, 68, 7, 255, 108, 68, 7, 255, 116, 71, 8, 255, 118, 70, 6, 255, 117, 69, 6, 255, 111, 67, 6, 255, 107, 67, 5, 255, 105, 64, 11, 255, 102, 62, 14, 255, 99, 62, 11, 255, 95, 59, 15, 255, 97, 59, 6, 255, 98, 57, 7, 255, 97, 58, 12, 255, 91, 58, 7, 255, 97, 54, 11, 255, 94, 57, 7, 255, 93, 59, 8, 255, 93, 58, 7, 255, 93, 58, 15, 255, 91, 57, 13, 255, 91, 58, 14, 255, 91, 59, 11, 255, 89, 57, 12, 255, 87, 52, 22, 255, 88, 55, 14, 255, 89, 58, 4, 255, 96, 63, 14, 255, 91, 57, 17, 255, 88, 55, 18, 255, 81, 60, 16, 255, 82, 60, 19, 255, 90, 63, 18, 255, 97, 65, 15, 255, 101, 64, 20, 255, 102, 65, 22, 255, 101, 66, 23, 255, 91, 64, 20, 255, 86, 60, 31, 255, 101, 65, 22, 255, 94, 65, 23, 255, 92, 68, 20, 255, 101, 62, 31, 255, 100, 69, 16, 255, 98, 71, 13, 255, 94, 66, 30, 255, 90, 67, 19, 255, 96, 73, 19, 255, 95, 67, 27, 255, 91, 67, 28, 255, 95, 67, 30, 255, 101, 70, 27, 255, 102, 72, 24, 255, 96, 68, 22, 255, 98, 72, 21, 255, 96, 68, 25, 255, 100, 69, 32, 255, 98, 70, 30, 255, 98, 73, 28, 255, 100, 74, 28, 255, 106, 72, 27, 255, 120, 78, 31, 255, 119, 81, 30, 255, 123, 82, 35, 255, 125, 81, 30, 255, 127, 83, 20, 255, 123, 81, 18, 255, 117, 77, 21, 255, 122, 79, 31, 255, 121, 85, 30, 255, 113, 78, 26, 255, 112, 80, 38, 255, 112, 82, 40, 255, 124, 87, 32, 255, 125, 89, 29, 255, 123, 92, 29, 255, 124, 91, 36, 255, 126, 93, 45, 255, 128, 93, 44, 255, 131, 96, 45, 255, 131, 99, 44, 255, 130, 99, 42, 255, 133, 107, 36, 255, 136, 110, 44, 255, 138, 111, 43, 255, 138, 111, 32, 255, 140, 114, 43, 255, 139, 116, 51, 255, 141, 115, 46, 255, 147, 115, 53, 255, 140, 116, 53, 255, 130, 118, 45, 255, 164, 153, 86, 255, 159, 140, 85, 255, 148, 114, 48, 255, 154, 119, 50, 255, 154, 120, 46, 255, 154, 121, 40, 255, 159, 123, 41, 255, 165, 125, 49, 255, 169, 126, 42, 255, 159, 122, 34, 255, 148, 121, 35, 255, 142, 113, 34, 255, 144, 113, 22, 255, 141, 109, 32, 255, 134, 105, 37, 255, 130, 103, 36, 255, 126, 105, 31, 255, 129, 102, 30, 255, 133, 96, 31, 255, 135, 95, 30, 255, 135, 93, 23, 255, 138, 90, 27, 255, 137, 89, 24, 255, 138, 89, 20, 255, 140, 87, 28, 255, 136, 87, 21, 255, 128, 85, 23, 255, 124, 86, 12, 255, 127, 83, 15, 255, 138, 83, 22, 255, 143, 80, 21, 255, 140, 77, 22, 255, 141, 82, 21, 255, 139, 82, 15, 255, 133, 79, 13, 255, 135, 79, 14, 255, 133, 77, 11, 255, 131, 76, 14, 255, 123, 74, 11, 255, 127, 77, 14, 255, 123, 73, 8, 255, 144, 81, 9, 255, 151, 82, 4, 255, 134, 78, 10, 255, 138, 81, 13, 255, 142, 80, 16, 255, 148, 90, 15, 255, 153, 87, 9, 255, 160, 92, 4, 255, 166, 93, 2, 255, 177, 101, 8, 255, 174, 98, 6, 255, 166, 88, 5, 255, 157, 84, 9, 255, 149, 80, 8, 255, 140, 75, 5, 255, 134, 74, 3, 255, 132, 74, 6, 255, 131, 70, 8, 255, 127, 68, 8, 255, 129, 72, 13, 255, 134, 72, 14, 255, 130, 67, 6, 255, 132, 75, 8, 255, 132, 73, 4, 255, 135, 72, 8, 255, 131, 70, 8, 255, 129, 69, 7, 255, 134, 73, 5, 255, 145, 76, 5, 255, 143, 75, 8, 255, 148, 80, 8, 255, 165, 88, 6, 255, 174, 96, 5, 255, 177, 96, 6, 255, 183, 100, 3, 255, 187, 102, 0, 255, 191, 103, 5, 255, 185, 99, 3, 255, 179, 96, 5, 255, 173, 91, 0, 255, 171, 91, 3, 255, 167, 87, 1, 255, 164, 83, 3, 255, 161, 78, 4, 255, 152, 77, 6, 255, 150, 79, 6, 255, 153, 75, 2, 255, 156, 76, 7, 255, 152, 78, 7, 255, 146, 66, 3, 255, 147, 52, 5, 255, 145, 59, 3, 255, 107, 42, 4, 255, 103, 38, 6, 255, 108, 37, 5, 255, 84, 31, 9, 255, 113, 43, 8, 255, 122, 54, 3, 255, 105, 49, 5, 255, 84, 43, 21, 255, 92, 41, 11, 255, 100, 44, 8, 255, 93, 43, 8, 255, 100, 50, 8, 255, 102, 48, 9, 255, 106, 51, 15, 255, 104, 51, 13, 255, 104, 52, 9, 255, 110, 57, 12, 255, 115, 59, 12, 255, 114, 52, 9, 255, 112, 49, 8, 255, 110, 43, 7, 255, 27, 69, 100, 255, 26, 83, 105, 255, 25, 85, 127, 255, 27, 97, 139, 255, 37, 106, 142, 255, 44, 100, 152, 255, 24, 100, 158, 255, 22, 96, 150, 255, 24, 103, 134, 255, 5, 48, 123, 255, 0, 2, 80, 255, 0, 4, 59, 255, 1, 0, 31, 255, 2, 1, 8, 255, 1, 1, 4, 255, 1, 1, 4, 255, 0, 0, 1, 255, 0, 0, 3, 255, 0, 0, 2, 255, 1, 0, 4, 255, 1, 1, 3, 255, 1, 1, 3, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 2, 255, 1, 1, 3, 255, 2, 2, 4, 255, 2, 2, 7, 255, 0, 1, 2, 255, 1, 1, 2, 255, 2, 1, 4, 255, 4, 1, 5, 255, 3, 1, 4, 255, 3, 1, 0, 255, 0, 2, 2, 255, 4, 3, 12, 255, 6, 21, 22, 255, 1, 8, 4, 255, 7, 42, 66, 255, 8, 91, 117, 255, 2, 20, 37, 255, 79, 168, 182, 255, 85, 211, 210, 255, 4, 31, 31, 255, 0, 28, 24, 255, 3, 25, 28, 255, 3, 3, 10, 255, 5, 0, 1, 255, 1, 1, 1, 255, 1, 3, 3, 255, 1, 2, 3, 255, 0, 3, 3, 255, 5, 2, 9, 255, 3, 0, 0, 255, 3, 20, 52, 255, 4, 32, 68, 255, 0, 2, 4, 255, 1, 0, 2, 255, 0, 0, 0, 255, 0, 0, 2, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 1, 255, 2, 1, 7, 255, 0, 3, 19, 255, 2, 4, 19, 255, 1, 2, 13, 255, 1, 0, 6, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 1, 255, 1, 1, 0, 255, 0, 0, 0, 255, 0, 0, 3, 255, 1, 2, 3, 255, 0, 2, 0, 255, 0, 0, 0, 255, 6, 2, 13, 255, 26, 29, 76, 255, 44, 63, 115, 255, 45, 61, 92, 255, 33, 39, 47, 255, 9, 13, 9, 255, 8, 2, 7, 255, 42, 28, 60, 255, 57, 58, 107, 255, 48, 58, 113, 255, 33, 40, 119, 255, 25, 46, 93, 255, 30, 24, 36, 255, 8, 8, 10, 255, 0, 1, 0, 255, 2, 1, 0, 255, 1, 3, 2, 255, 0, 1, 2, 255, 3, 2, 5, 255, 5, 3, 2, 255, 5, 2, 0, 255, 3, 4, 1, 255, 2, 4, 0, 255, 6, 5, 4, 255, 8, 3, 3, 255, 11, 6, 6, 255, 11, 4, 2, 255, 16, 8, 5, 255, 26, 17, 13, 255, 25, 20, 12, 255, 20, 19, 5, 255, 13, 11, 2, 255, 16, 14, 4, 255, 19, 17, 9, 255, 24, 21, 12, 255, 27, 26, 3, 255, 28, 26, 3, 255, 26, 24, 9, 255, 28, 26, 14, 255, 29, 26, 7, 255, 30, 30, 6, 255, 41, 39, 7, 255, 42, 36, 5, 255, 46, 42, 11, 255, 47, 45, 10, 255, 45, 42, 7, 255, 49, 45, 13, 255, 43, 45, 6, 255, 37, 39, 7, 255, 42, 40, 10, 255, 39, 38, 6, 255, 43, 41, 9, 255, 44, 37, 9, 255, 44, 32, 12, 255, 52, 38, 13, 255, 51, 34, 5, 255, 56, 40, 11, 255, 48, 37, 7, 255, 48, 34, 14, 255, 46, 31, 4, 255, 48, 33, 7, 255, 47, 28, 9, 255, 41, 31, 10, 255, 45, 32, 4, 255, 43, 29, 10, 255, 44, 29, 5, 255, 46, 28, 5, 255, 45, 31, 11, 255, 50, 35, 5, 255, 58, 38, 7, 255, 53, 34, 11, 255, 53, 33, 6, 255, 62, 38, 7, 255, 71, 41, 7, 255, 71, 36, 8, 255, 69, 34, 7, 255, 70, 37, 9, 255, 68, 37, 11, 255, 70, 37, 5, 255, 64, 40, 12, 255, 79, 43, 9, 255, 79, 38, 11, 255, 62, 34, 17, 255, 70, 43, 7, 255, 75, 47, 4, 255, 76, 43, 5, 255, 81, 46, 6, 255, 86, 51, 1, 255, 83, 47, 8, 255, 76, 48, 10, 255, 74, 45, 8, 255, 73, 40, 8, 255, 79, 42, 13, 255, 81, 45, 12, 255, 81, 46, 6, 255, 80, 46, 1, 255, 87, 53, 6, 255, 94, 57, 7, 255, 96, 55, 8, 255, 99, 53, 7, 255, 100, 55, 7, 255, 108, 62, 7, 255, 114, 65, 5, 255, 113, 67, 7, 255, 117, 69, 5, 255, 112, 64, 13, 255, 107, 65, 9, 255, 118, 75, 3, 255, 129, 78, 14, 255, 120, 73, 14, 255, 111, 70, 8, 255, 114, 70, 8, 255, 124, 76, 8, 255, 125, 74, 5, 255, 123, 71, 10, 255, 120, 71, 5, 255, 114, 67, 4, 255, 113, 66, 10, 255, 112, 67, 8, 255, 107, 65, 8, 255, 104, 65, 5, 255, 104, 63, 4, 255, 100, 63, 9, 255, 105, 65, 2, 255, 99, 63, 11, 255, 96, 59, 8, 255, 98, 62, 6, 255, 102, 60, 8, 255, 100, 60, 10, 255, 94, 60, 18, 255, 94, 59, 13, 255, 92, 54, 15, 255, 88, 56, 17, 255, 84, 57, 13, 255, 83, 56, 18, 255, 83, 55, 14, 255, 88, 58, 21, 255, 88, 59, 10, 255, 88, 61, 5, 255, 87, 59, 14, 255, 90, 60, 16, 255, 90, 62, 22, 255, 92, 68, 15, 255, 93, 68, 7, 255, 97, 68, 12, 255, 102, 70, 24, 255, 97, 64, 16, 255, 94, 68, 7, 255, 91, 67, 12, 255, 99, 66, 15, 255, 95, 65, 15, 255, 100, 70, 20, 255, 102, 65, 19, 255, 101, 73, 11, 255, 99, 70, 16, 255, 99, 72, 19, 255, 94, 66, 28, 255, 96, 71, 26, 255, 93, 71, 13, 255, 94, 70, 17, 255, 98, 66, 35, 255, 104, 71, 26, 255, 104, 71, 27, 255, 100, 71, 23, 255, 96, 71, 19, 255, 100, 70, 30, 255, 100, 66, 32, 255, 97, 73, 25, 255, 100, 77, 25, 255, 95, 71, 29, 255, 107, 75, 22, 255, 128, 80, 26, 255, 127, 83, 24, 255, 127, 84, 20, 255, 128, 84, 22, 255, 127, 82, 28, 255, 124, 81, 33, 255, 116, 80, 25, 255, 119, 81, 31, 255, 124, 80, 31, 255, 118, 82, 29, 255, 117, 85, 31, 255, 115, 85, 23, 255, 115, 85, 20, 255, 123, 88, 24, 255, 125, 90, 31, 255, 123, 90, 36, 255, 130, 97, 30, 255, 131, 95, 42, 255, 130, 96, 40, 255, 130, 98, 42, 255, 131, 99, 49, 255, 131, 102, 47, 255, 133, 108, 33, 255, 136, 107, 43, 255, 137, 105, 57, 255, 139, 110, 45, 255, 139, 112, 53, 255, 139, 115, 32, 255, 143, 113, 35, 255, 144, 116, 50, 255, 132, 116, 33, 255, 153, 140, 68, 255, 165, 149, 98, 255, 149, 114, 50, 255, 156, 118, 50, 255, 156, 118, 55, 255, 157, 122, 41, 255, 161, 125, 37, 255, 162, 125, 34, 255, 169, 126, 41, 255, 162, 122, 37, 255, 149, 122, 28, 255, 142, 114, 27, 255, 143, 111, 25, 255, 139, 107, 32, 255, 134, 103, 38, 255, 129, 100, 22, 255, 128, 102, 37, 255, 130, 102, 35, 255, 132, 97, 19, 255, 135, 95, 21, 255, 137, 93, 25, 255, 139, 91, 29, 255, 138, 88, 24, 255, 139, 88, 29, 255, 140, 90, 18, 255, 140, 88, 19, 255, 131, 84, 10, 255, 125, 89, 7, 255, 124, 86, 18, 255, 133, 81, 28, 255, 140, 83, 12, 255, 143, 86, 13, 255, 139, 83, 17, 255, 138, 83, 19, 255, 134, 81, 13, 255, 135, 82, 13, 255, 133, 80, 10, 255, 133, 80, 13, 255, 128, 77, 15, 255, 127, 76, 12, 255, 126, 81, 13, 255, 132, 79, 8, 255, 143, 81, 18, 255, 136, 81, 13, 255, 138, 80, 3, 255, 144, 76, 13, 255, 148, 83, 19, 255, 153, 91, 12, 255, 162, 95, 8, 255, 170, 96, 5, 255, 179, 101, 2, 255, 180, 102, 0, 255, 177, 98, 1, 255, 167, 90, 5, 255, 156, 80, 6, 255, 146, 75, 7, 255, 139, 75, 5, 255, 134, 74, 1, 255, 131, 69, 7, 255, 132, 73, 13, 255, 129, 72, 14, 255, 136, 70, 16, 255, 135, 70, 9, 255, 133, 74, 5, 255, 135, 74, 4, 255, 136, 70, 5, 255, 137, 71, 12, 255, 135, 72, 11, 255, 136, 74, 7, 255, 141, 73, 5, 255, 146, 81, 10, 255, 151, 84, 7, 255, 166, 89, 4, 255, 173, 96, 9, 255, 175, 97, 13, 255, 186, 106, 3, 255, 195, 111, 0, 255, 190, 99, 7, 255, 180, 90, 3, 255, 178, 95, 3, 255, 176, 93, 2, 255, 175, 94, 4, 255, 170, 90, 4, 255, 165, 86, 5, 255, 164, 85, 9, 255, 153, 82, 7, 255, 154, 79, 8, 255, 160, 78, 3, 255, 156, 75, 0, 255, 135, 60, 2, 255, 128, 50, 3, 255, 137, 56, 4, 255, 130, 55, 2, 255, 96, 31, 2, 255, 92, 34, 5, 255, 90, 29, 3, 255, 92, 39, 7, 255, 114, 53, 13, 255, 101, 45, 7, 255, 95, 55, 15, 255, 88, 54, 19, 255, 92, 42, 17, 255, 96, 43, 10, 255, 102, 52, 11, 255, 103, 54, 11, 255, 105, 50, 11, 255, 105, 50, 15, 255, 106, 50, 18, 255, 111, 51, 18, 255, 108, 54, 12, 255, 112, 52, 9, 255, 115, 51, 14, 255, 112, 47, 9, 255, 108, 39, 7, 255, 18, 38, 54, 255, 17, 70, 111, 255, 29, 83, 128, 255, 31, 91, 134, 255, 28, 98, 151, 255, 38, 100, 154, 255, 37, 104, 168, 255, 31, 122, 167, 255, 12, 93, 142, 255, 0, 17, 101, 255, 4, 0, 60, 255, 3, 2, 56, 255, 0, 3, 26, 255, 2, 1, 3, 255, 1, 1, 4, 255, 1, 0, 6, 255, 1, 1, 2, 255, 1, 0, 6, 255, 0, 0, 2, 255, 1, 0, 5, 255, 1, 1, 3, 255, 1, 1, 3, 255, 1, 1, 2, 255, 1, 1, 1, 255, 0, 0, 2, 255, 0, 1, 1, 255, 1, 2, 1, 255, 2, 3, 5, 255, 4, 0, 5, 255, 0, 1, 2, 255, 0, 2, 3, 255, 2, 2, 8, 255, 2, 2, 3, 255, 4, 3, 0, 255, 1, 0, 5, 255, 1, 2, 4, 255, 2, 5, 4, 255, 6, 17, 18, 255, 2, 6, 8, 255, 4, 48, 75, 255, 10, 80, 110, 255, 3, 26, 50, 255, 93, 186, 206, 255, 91, 198, 192, 255, 3, 29, 24, 255, 3, 29, 30, 255, 4, 8, 16, 255, 0, 0, 0, 255, 6, 1, 1, 255, 1, 0, 4, 255, 0, 0, 2, 255, 2, 0, 0, 255, 1, 4, 22, 255, 0, 54, 98, 255, 1, 129, 166, 255, 3, 102, 112, 255, 5, 9, 9, 255, 3, 0, 1, 255, 1, 0, 1, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 1, 0, 255, 0, 1, 4, 255, 4, 3, 16, 255, 1, 6, 35, 255, 2, 6, 31, 255, 0, 1, 17, 255, 0, 0, 5, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 1, 1, 255, 0, 0, 5, 255, 1, 0, 4, 255, 1, 2, 1, 255, 0, 0, 0, 255, 5, 5, 15, 255, 18, 19, 61, 255, 37, 52, 116, 255, 40, 59, 95, 255, 32, 36, 35, 255, 16, 15, 6, 255, 0, 0, 7, 255, 33, 26, 48, 255, 61, 55, 90, 255, 48, 51, 115, 255, 27, 38, 94, 255, 22, 33, 93, 255, 13, 26, 61, 255, 4, 7, 7, 255, 3, 1, 1, 255, 0, 2, 1, 255, 2, 3, 5, 255, 4, 1, 2, 255, 2, 2, 2, 255, 5, 2, 5, 255, 5, 3, 3, 255, 3, 3, 0, 255, 4, 4, 2, 255, 0, 0, 2, 255, 5, 4, 2, 255, 9, 6, 2, 255, 12, 5, 2, 255, 16, 7, 4, 255, 26, 16, 10, 255, 29, 21, 11, 255, 21, 13, 4, 255, 13, 9, 2, 255, 9, 10, 2, 255, 23, 17, 0, 255, 26, 16, 8, 255, 31, 20, 13, 255, 35, 28, 7, 255, 38, 32, 4, 255, 40, 33, 7, 255, 34, 33, 3, 255, 33, 31, 16, 255, 43, 36, 10, 255, 43, 39, 8, 255, 47, 44, 7, 255, 53, 49, 6, 255, 43, 45, 6, 255, 47, 50, 6, 255, 50, 52, 7, 255, 49, 47, 18, 255, 51, 46, 20, 255, 47, 43, 15, 255, 44, 40, 12, 255, 43, 40, 13, 255, 44, 38, 6, 255, 50, 43, 3, 255, 50, 37, 10, 255, 47, 32, 6, 255, 54, 40, 8, 255, 50, 35, 7, 255, 43, 31, 8, 255, 44, 36, 17, 255, 44, 30, 3, 255, 49, 31, 9, 255, 40, 26, 12, 255, 31, 25, 11, 255, 43, 30, 7, 255, 48, 30, 10, 255, 48, 31, 11, 255, 49, 31, 16, 255, 51, 31, 13, 255, 51, 31, 1, 255, 57, 38, 7, 255, 57, 40, 14, 255, 56, 35, 6, 255, 63, 36, 11, 255, 68, 37, 4, 255, 71, 40, 7, 255, 66, 37, 10, 255, 70, 40, 6, 255, 68, 40, 0, 255, 75, 45, 7, 255, 70, 40, 11, 255, 93, 41, 10, 255, 80, 42, 8, 255, 70, 41, 9, 255, 74, 42, 9, 255, 72, 39, 12, 255, 78, 45, 5, 255, 79, 45, 10, 255, 79, 46, 12, 255, 79, 46, 4, 255, 79, 45, 6, 255, 80, 47, 8, 255, 79, 44, 8, 255, 76, 40, 9, 255, 77, 42, 6, 255, 78, 47, 6, 255, 83, 46, 9, 255, 85, 51, 7, 255, 90, 56, 2, 255, 98, 58, 4, 255, 101, 58, 8, 255, 96, 56, 5, 255, 106, 64, 7, 255, 112, 64, 10, 255, 108, 63, 14, 255, 112, 66, 6, 255, 109, 64, 11, 255, 110, 68, 13, 255, 120, 75, 9, 255, 132, 78, 11, 255, 124, 73, 10, 255, 123, 76, 5, 255, 128, 79, 7, 255, 138, 84, 6, 255, 138, 82, 4, 255, 135, 80, 8, 255, 134, 82, 6, 255, 127, 76, 6, 255, 122, 70, 6, 255, 120, 69, 6, 255, 115, 68, 6, 255, 113, 68, 7, 255, 107, 63, 5, 255, 106, 64, 7, 255, 109, 62, 8, 255, 104, 65, 9, 255, 102, 64, 9, 255, 100, 62, 16, 255, 96, 60, 12, 255, 97, 62, 6, 255, 93, 58, 14, 255, 90, 57, 8, 255, 90, 57, 11, 255, 92, 59, 19, 255, 89, 58, 13, 255, 84, 56, 13, 255, 87, 56, 17, 255, 87, 53, 17, 255, 88, 58, 16, 255, 88, 61, 12, 255, 93, 65, 16, 255, 93, 61, 17, 255, 91, 61, 15, 255, 98, 67, 11, 255, 99, 65, 17, 255, 100, 64, 20, 255, 101, 68, 16, 255, 100, 68, 18, 255, 95, 63, 28, 255, 91, 62, 17, 255, 94, 66, 16, 255, 100, 70, 13, 255, 103, 69, 10, 255, 102, 63, 31, 255, 99, 69, 23, 255, 101, 69, 19, 255, 100, 68, 16, 255, 97, 66, 25, 255, 94, 68, 16, 255, 95, 71, 21, 255, 100, 70, 27, 255, 101, 68, 26, 255, 100, 71, 17, 255, 99, 72, 15, 255, 101, 74, 18, 255, 101, 69, 15, 255, 101, 67, 24, 255, 101, 73, 24, 255, 102, 74, 19, 255, 105, 73, 22, 255, 102, 73, 28, 255, 106, 80, 20, 255, 119, 77, 30, 255, 127, 77, 29, 255, 126, 80, 22, 255, 132, 87, 24, 255, 131, 83, 25, 255, 128, 82, 28, 255, 122, 84, 28, 255, 120, 83, 27, 255, 127, 84, 22, 255, 124, 84, 25, 255, 117, 79, 37, 255, 114, 81, 30, 255, 116, 87, 30, 255, 123, 87, 40, 255, 127, 93, 30, 255, 126, 93, 37, 255, 129, 97, 26, 255, 130, 97, 22, 255, 131, 97, 32, 255, 129, 100, 37, 255, 134, 102, 43, 255, 133, 103, 41, 255, 132, 101, 48, 255, 135, 105, 40, 255, 140, 108, 30, 255, 141, 108, 43, 255, 141, 109, 52, 255, 143, 113, 44, 255, 145, 111, 47, 255, 147, 116, 47, 255, 141, 116, 34, 255, 142, 125, 50, 255, 167, 156, 87, 255, 152, 122, 57, 255, 150, 116, 48, 255, 156, 118, 43, 255, 159, 122, 35, 255, 162, 123, 37, 255, 166, 125, 39, 255, 171, 128, 29, 255, 161, 120, 39, 255, 148, 115, 40, 255, 146, 111, 34, 255, 148, 111, 34, 255, 140, 106, 35, 255, 136, 107, 32, 255, 133, 99, 28, 255, 131, 100, 34, 255, 128, 100, 30, 255, 134, 98, 30, 255, 139, 97, 21, 255, 137, 92, 23, 255, 138, 93, 26, 255, 142, 92, 24, 255, 140, 91, 19, 255, 140, 92, 15, 255, 144, 88, 24, 255, 139, 86, 20, 255, 129, 91, 6, 255, 123, 86, 18, 255, 134, 85, 20, 255, 142, 88, 5, 255, 144, 88, 5, 255, 144, 89, 13, 255, 139, 82, 16, 255, 136, 81, 16, 255, 133, 81, 6, 255, 134, 81, 8, 255, 137, 81, 17, 255, 132, 77, 11, 255, 129, 74, 9, 255, 131, 80, 8, 255, 130, 80, 4, 255, 134, 80, 16, 255, 137, 83, 10, 255, 142, 85, 2, 255, 148, 85, 17, 255, 144, 82, 9, 255, 149, 87, 4, 255, 166, 98, 10, 255, 172, 96, 9, 255, 175, 96, 1, 255, 184, 103, 1, 255, 188, 104, 8, 255, 175, 94, 4, 255, 162, 85, 5, 255, 150, 79, 3, 255, 139, 74, 7, 255, 135, 75, 5, 255, 132, 73, 8, 255, 136, 75, 6, 255, 137, 71, 7, 255, 128, 72, 6, 255, 136, 73, 6, 255, 156, 74, 7, 255, 149, 75, 6, 255, 137, 74, 5, 255, 146, 76, 3, 255, 142, 76, 10, 255, 134, 74, 6, 255, 139, 75, 8, 255, 139, 79, 5, 255, 151, 83, 7, 255, 162, 86, 10, 255, 169, 96, 4, 255, 179, 97, 6, 255, 191, 99, 5, 255, 199, 102, 5, 255, 179, 82, 4, 255, 179, 89, 10, 255, 188, 106, 8, 255, 187, 103, 6, 255, 186, 98, 3, 255, 184, 94, 4, 255, 175, 87, 2, 255, 170, 83, 2, 255, 168, 77, 0, 255, 170, 75, 2, 255, 160, 73, 0, 255, 130, 53, 3, 255, 122, 46, 11, 255, 145, 64, 6, 255, 144, 61, 4, 255, 102, 32, 5, 255, 88, 35, 7, 255, 84, 33, 4, 255, 103, 43, 6, 255, 117, 45, 9, 255, 99, 46, 5, 255, 90, 52, 10, 255, 105, 68, 12, 255, 105, 60, 8, 255, 83, 37, 13, 255, 87, 37, 11, 255, 103, 50, 15, 255, 99, 45, 12, 255, 102, 45, 12, 255, 109, 46, 14, 255, 109, 45, 9, 255, 113, 50, 11, 255, 112, 48, 10, 255, 112, 48, 11, 255, 118, 53, 12, 255, 118, 53, 9, 255, 115, 46, 7, 255, 16, 24, 66, 255, 22, 59, 103, 255, 25, 67, 108, 255, 23, 81, 126, 255, 21, 93, 147, 255, 32, 100, 158, 255, 26, 115, 173, 255, 27, 106, 132, 255, 5, 25, 90, 255, 0, 0, 66, 255, 3, 2, 65, 255, 3, 2, 65, 255, 2, 2, 21, 255, 1, 0, 1, 255, 1, 0, 3, 255, 1, 0, 4, 255, 1, 1, 4, 255, 1, 0, 7, 255, 1, 1, 3, 255, 2, 1, 3, 255, 1, 1, 3, 255, 0, 0, 3, 255, 1, 1, 2, 255, 1, 2, 1, 255, 0, 1, 1, 255, 0, 1, 1, 255, 2, 0, 4, 255, 2, 0, 3, 255, 3, 1, 3, 255, 0, 1, 2, 255, 2, 0, 2, 255, 3, 0, 0, 255, 0, 0, 2, 255, 0, 0, 0, 255, 1, 0, 1, 255, 2, 0, 3, 255, 1, 1, 2, 255, 2, 5, 5, 255, 3, 9, 13, 255, 6, 0, 2, 255, 7, 63, 91, 255, 8, 83, 99, 255, 8, 26, 46, 255, 108, 192, 217, 255, 82, 179, 177, 255, 4, 13, 16, 255, 6, 28, 34, 255, 2, 8, 9, 255, 2, 0, 4, 255, 2, 0, 2, 255, 2, 0, 0, 255, 3, 29, 62, 255, 2, 103, 157, 255, 3, 132, 157, 255, 4, 73, 68, 255, 3, 23, 14, 255, 3, 4, 4, 255, 2, 0, 1, 255, 1, 1, 4, 255, 2, 1, 3, 255, 1, 1, 1, 255, 1, 2, 5, 255, 0, 4, 11, 255, 3, 8, 28, 255, 2, 11, 43, 255, 5, 11, 40, 255, 1, 2, 19, 255, 0, 0, 3, 255, 1, 1, 1, 255, 0, 0, 1, 255, 1, 0, 1, 255, 1, 0, 0, 255, 0, 1, 0, 255, 0, 0, 1, 255, 0, 1, 0, 255, 0, 1, 2, 255, 0, 1, 0, 255, 0, 1, 2, 255, 2, 1, 4, 255, 0, 1, 0, 255, 1, 1, 5, 255, 13, 20, 56, 255, 36, 43, 90, 255, 44, 56, 85, 255, 24, 44, 42, 255, 9, 16, 9, 255, 7, 1, 4, 255, 25, 18, 41, 255, 35, 45, 84, 255, 38, 57, 150, 255, 23, 50, 143, 255, 8, 37, 93, 255, 17, 24, 57, 255, 9, 8, 7, 255, 0, 0, 0, 255, 3, 1, 0, 255, 5, 0, 6, 255, 1, 1, 1, 255, 1, 2, 0, 255, 5, 2, 2, 255, 3, 2, 3, 255, 2, 2, 1, 255, 8, 2, 5, 255, 6, 1, 1, 255, 10, 6, 2, 255, 8, 4, 1, 255, 10, 5, 3, 255, 17, 14, 5, 255, 18, 14, 4, 255, 18, 12, 8, 255, 15, 9, 1, 255, 13, 9, 0, 255, 10, 10, 4, 255, 10, 14, 6, 255, 16, 15, 5, 255, 14, 15, 13, 255, 24, 20, 11, 255, 61, 33, 8, 255, 83, 44, 8, 255, 81, 52, 4, 255, 58, 44, 6, 255, 41, 34, 5, 255, 42, 37, 12, 255, 42, 40, 10, 255, 44, 49, 10, 255, 51, 53, 14, 255, 57, 56, 15, 255, 54, 54, 16, 255, 49, 58, 11, 255, 51, 53, 6, 255, 56, 53, 9, 255, 43, 48, 5, 255, 46, 50, 10, 255, 41, 39, 10, 255, 45, 39, 11, 255, 46, 43, 12, 255, 42, 39, 7, 255, 49, 40, 8, 255, 53, 37, 3, 255, 54, 35, 4, 255, 49, 33, 6, 255, 44, 36, 8, 255, 39, 28, 3, 255, 48, 30, 6, 255, 58, 33, 6, 255, 48, 32, 9, 255, 41, 31, 3, 255, 46, 34, 6, 255, 48, 30, 7, 255, 53, 30, 11, 255, 48, 33, 12, 255, 54, 36, 9, 255, 58, 38, 1, 255, 60, 33, 10, 255, 62, 33, 17, 255, 62, 36, 5, 255, 69, 36, 16, 255, 71, 38, 10, 255, 69, 39, 2, 255, 65, 41, 7, 255, 73, 41, 14, 255, 71, 42, 4, 255, 70, 42, 6, 255, 73, 39, 8, 255, 102, 44, 12, 255, 85, 41, 2, 255, 74, 41, 0, 255, 71, 43, 2, 255, 69, 42, 6, 255, 73, 43, 4, 255, 80, 43, 13, 255, 82, 46, 11, 255, 79, 48, 2, 255, 78, 42, 5, 255, 75, 40, 12, 255, 74, 43, 3, 255, 81, 43, 10, 255, 80, 42, 12, 255, 79, 47, 7, 255, 86, 50, 10, 255, 86, 47, 6, 255, 87, 48, 7, 255, 94, 55, 13, 255, 95, 54, 11, 255, 93, 55, 9, 255, 101, 63, 10, 255, 107, 63, 9, 255, 110, 64, 19, 255, 112, 65, 8, 255, 108, 62, 3, 255, 110, 66, 15, 255, 121, 75, 8, 255, 139, 87, 6, 255, 133, 82, 10, 255, 130, 80, 9, 255, 137, 83, 5, 255, 146, 86, 8, 255, 152, 87, 9, 255, 150, 85, 18, 255, 144, 83, 9, 255, 135, 78, 5, 255, 130, 76, 11, 255, 127, 79, 8, 255, 122, 74, 5, 255, 120, 71, 10, 255, 116, 67, 10, 255, 116, 67, 2, 255, 115, 67, 12, 255, 108, 66, 13, 255, 108, 64, 17, 255, 103, 63, 13, 255, 96, 63, 15, 255, 95, 64, 12, 255, 92, 58, 21, 255, 90, 56, 18, 255, 91, 58, 13, 255, 91, 55, 14, 255, 89, 55, 13, 255, 86, 56, 19, 255, 89, 57, 12, 255, 92, 57, 11, 255, 94, 59, 15, 255, 90, 55, 17, 255, 92, 61, 10, 255, 86, 59, 15, 255, 90, 59, 24, 255, 100, 66, 22, 255, 102, 63, 23, 255, 103, 62, 26, 255, 106, 68, 22, 255, 102, 68, 19, 255, 96, 67, 17, 255, 97, 66, 21, 255, 92, 63, 16, 255, 100, 68, 26, 255, 110, 73, 11, 255, 103, 66, 18, 255, 100, 69, 14, 255, 104, 70, 18, 255, 101, 67, 18, 255, 105, 75, 11, 255, 102, 71, 12, 255, 99, 66, 27, 255, 101, 67, 20, 255, 100, 69, 24, 255, 100, 71, 21, 255, 97, 71, 23, 255, 96, 72, 24, 255, 104, 71, 17, 255, 103, 68, 24, 255, 103, 73, 19, 255, 104, 76, 13, 255, 103, 73, 10, 255, 103, 75, 26, 255, 98, 72, 26, 255, 109, 80, 13, 255, 120, 83, 23, 255, 125, 80, 25, 255, 128, 84, 29, 255, 131, 86, 23, 255, 128, 83, 21, 255, 122, 81, 26, 255, 120, 78, 30, 255, 126, 86, 21, 255, 126, 85, 18, 255, 123, 83, 28, 255, 120, 85, 26, 255, 119, 86, 35, 255, 119, 85, 35, 255, 130, 92, 37, 255, 128, 96, 25, 255, 126, 95, 30, 255, 131, 94, 28, 255, 135, 99, 30, 255, 131, 98, 38, 255, 131, 102, 39, 255, 132, 101, 41, 255, 134, 100, 45, 255, 139, 105, 42, 255, 140, 108, 33, 255, 142, 111, 30, 255, 142, 108, 44, 255, 144, 108, 50, 255, 146, 109, 51, 255, 149, 113, 45, 255, 144, 111, 52, 255, 136, 112, 45, 255, 163, 151, 82, 255, 155, 129, 74, 255, 146, 114, 43, 255, 153, 117, 43, 255, 156, 119, 37, 255, 162, 121, 36, 255, 166, 124, 37, 255, 173, 125, 42, 255, 163, 120, 31, 255, 152, 116, 30, 255, 147, 111, 30, 255, 147, 110, 30, 255, 142, 105, 38, 255, 138, 104, 29, 255, 138, 101, 31, 255, 132, 100, 31, 255, 128, 98, 26, 255, 133, 96, 31, 255, 142, 97, 21, 255, 141, 92, 22, 255, 141, 96, 15, 255, 145, 92, 27, 255, 141, 89, 23, 255, 140, 92, 14, 255, 144, 92, 14, 255, 138, 90, 19, 255, 127, 88, 13, 255, 130, 84, 22, 255, 138, 84, 23, 255, 141, 85, 12, 255, 143, 84, 19, 255, 142, 81, 20, 255, 139, 81, 13, 255, 134, 79, 14, 255, 133, 79, 11, 255, 139, 85, 14, 255, 141, 84, 13, 255, 133, 75, 15, 255, 131, 78, 9, 255, 141, 82, 12, 255, 138, 83, 3, 255, 133, 79, 10, 255, 137, 82, 10, 255, 139, 79, 11, 255, 146, 87, 12, 255, 155, 99, 12, 255, 146, 84, 11, 255, 159, 92, 12, 255, 171, 97, 13, 255, 175, 99, 4, 255, 180, 101, 3, 255, 184, 103, 4, 255, 178, 99, 3, 255, 164, 87, 3, 255, 150, 80, 6, 255, 139, 74, 12, 255, 136, 74, 7, 255, 136, 76, 5, 255, 137, 75, 1, 255, 138, 75, 3, 255, 143, 76, 6, 255, 142, 73, 4, 255, 143, 76, 4, 255, 144, 72, 3, 255, 140, 71, 3, 255, 141, 74, 3, 255, 137, 74, 3, 255, 131, 74, 3, 255, 136, 75, 9, 255, 146, 81, 8, 255, 160, 82, 3, 255, 165, 86, 16, 255, 165, 91, 7, 255, 182, 98, 8, 255, 178, 83, 6, 255, 172, 67, 6, 255, 182, 86, 6, 255, 200, 118, 8, 255, 202, 110, 5, 255, 190, 89, 1, 255, 171, 74, 1, 255, 161, 62, 7, 255, 156, 59, 5, 255, 150, 58, 5, 255, 148, 59, 8, 255, 160, 64, 3, 255, 155, 60, 3, 255, 120, 44, 5, 255, 132, 52, 5, 255, 163, 73, 9, 255, 159, 62, 8, 255, 130, 44, 7, 255, 101, 36, 2, 255, 103, 35, 7, 255, 112, 52, 5, 255, 105, 54, 6, 255, 103, 56, 11, 255, 107, 68, 16, 255, 111, 69, 10, 255, 105, 54, 10, 255, 77, 33, 6, 255, 67, 26, 4, 255, 91, 35, 16, 255, 102, 41, 18, 255, 102, 41, 7, 255, 109, 44, 8, 255, 109, 46, 7, 255, 112, 51, 10, 255, 113, 47, 6, 255, 117, 50, 10, 255, 120, 55, 8, 255, 120, 53, 10, 255, 115, 43, 14, 255, 46, 41, 121, 255, 43, 64, 112, 255, 30, 63, 106, 255, 26, 72, 125, 255, 23, 88, 132, 255, 30, 105, 148, 255, 20, 103, 124, 255, 4, 33, 87, 255, 3, 0, 87, 255, 3, 2, 76, 255, 0, 4, 79, 255, 2, 2, 62, 255, 2, 1, 10, 255, 1, 1, 2, 255, 0, 0, 1, 255, 0, 0, 1, 255, 1, 0, 5, 255, 1, 0, 6, 255, 1, 1, 4, 255, 1, 1, 1, 255, 1, 1, 3, 255, 1, 0, 6, 255, 0, 0, 5, 255, 0, 1, 2, 255, 1, 2, 2, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 2, 255, 1, 1, 3, 255, 0, 0, 3, 255, 0, 0, 2, 255, 0, 0, 1, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 1, 5, 255, 3, 10, 8, 255, 7, 0, 4, 255, 4, 57, 90, 255, 20, 111, 152, 255, 20, 103, 128, 255, 114, 209, 223, 255, 65, 154, 154, 255, 0, 18, 24, 255, 5, 30, 49, 255, 2, 0, 0, 255, 1, 9, 24, 255, 3, 70, 121, 255, 3, 131, 172, 255, 0, 109, 112, 255, 4, 43, 31, 255, 4, 0, 0, 255, 3, 0, 0, 255, 9, 0, 0, 255, 3, 1, 4, 255, 2, 2, 5, 255, 3, 0, 0, 255, 2, 2, 0, 255, 3, 2, 15, 255, 3, 9, 32, 255, 3, 9, 38, 255, 2, 11, 40, 255, 4, 10, 33, 255, 2, 3, 14, 255, 1, 0, 5, 255, 1, 0, 6, 255, 0, 0, 4, 255, 1, 2, 2, 255, 2, 1, 1, 255, 2, 1, 3, 255, 0, 1, 1, 255, 1, 1, 2, 255, 2, 1, 4, 255, 2, 1, 5, 255, 2, 1, 1, 255, 0, 1, 0, 255, 9, 6, 40, 255, 39, 39, 94, 255, 31, 54, 106, 255, 27, 43, 55, 255, 20, 19, 7, 255, 5, 4, 0, 255, 25, 16, 40, 255, 42, 48, 98, 255, 45, 54, 129, 255, 28, 55, 133, 255, 6, 32, 127, 255, 1, 19, 81, 255, 6, 13, 20, 255, 3, 1, 0, 255, 2, 0, 5, 255, 0, 1, 4, 255, 0, 0, 2, 255, 0, 1, 0, 255, 1, 1, 0, 255, 2, 1, 2, 255, 2, 0, 1, 255, 3, 2, 1, 255, 4, 1, 0, 255, 3, 0, 1, 255, 7, 3, 0, 255, 11, 6, 0, 255, 19, 11, 4, 255, 19, 12, 5, 255, 18, 11, 3, 255, 13, 9, 2, 255, 11, 6, 4, 255, 15, 8, 0, 255, 9, 6, 7, 255, 3, 2, 2, 255, 11, 12, 6, 255, 17, 9, 5, 255, 36, 16, 11, 255, 64, 46, 5, 255, 78, 50, 7, 255, 75, 39, 6, 255, 60, 34, 6, 255, 40, 28, 6, 255, 42, 33, 5, 255, 47, 49, 6, 255, 48, 53, 17, 255, 54, 62, 15, 255, 57, 64, 15, 255, 55, 60, 12, 255, 56, 60, 10, 255, 50, 57, 16, 255, 49, 51, 13, 255, 54, 55, 5, 255, 47, 52, 5, 255, 47, 48, 7, 255, 47, 43, 7, 255, 54, 43, 5, 255, 50, 37, 9, 255, 48, 39, 15, 255, 44, 38, 4, 255, 47, 37, 10, 255, 46, 32, 13, 255, 46, 32, 6, 255, 49, 36, 4, 255, 48, 33, 5, 255, 50, 30, 5, 255, 52, 30, 5, 255, 52, 28, 6, 255, 53, 29, 9, 255, 50, 33, 5, 255, 43, 32, 3, 255, 54, 32, 9, 255, 57, 34, 7, 255, 51, 40, 8, 255, 58, 36, 11, 255, 62, 38, 19, 255, 55, 33, 13, 255, 65, 38, 7, 255, 72, 39, 9, 255, 68, 40, 3, 255, 77, 44, 4, 255, 83, 49, 9, 255, 82, 44, 11, 255, 75, 45, 13, 255, 67, 42, 8, 255, 73, 39, 10, 255, 97, 43, 13, 255, 88, 36, 2, 255, 72, 39, 13, 255, 67, 43, 12, 255, 76, 48, 5, 255, 78, 47, 1, 255, 77, 40, 8, 255, 86, 42, 10, 255, 81, 40, 12, 255, 77, 42, 2, 255, 75, 44, 10, 255, 72, 43, 15, 255, 77, 40, 5, 255, 78, 42, 10, 255, 81, 47, 8, 255, 85, 53, 3, 255, 90, 51, 5, 255, 89, 46, 14, 255, 87, 50, 13, 255, 89, 50, 8, 255, 96, 58, 13, 255, 100, 64, 9, 255, 105, 66, 6, 255, 110, 67, 9, 255, 111, 66, 10, 255, 110, 64, 6, 255, 113, 68, 7, 255, 124, 79, 1, 255, 139, 87, 5, 255, 135, 81, 8, 255, 142, 83, 11, 255, 147, 86, 8, 255, 157, 93, 9, 255, 167, 104, 11, 255, 166, 101, 9, 255, 161, 95, 3, 255, 159, 92, 8, 255, 148, 86, 11, 255, 138, 84, 8, 255, 129, 77, 4, 255, 126, 73, 6, 255, 124, 72, 9, 255, 118, 69, 15, 255, 115, 72, 5, 255, 110, 68, 12, 255, 109, 68, 11, 255, 107, 66, 7, 255, 103, 60, 11, 255, 98, 61, 10, 255, 93, 59, 15, 255, 91, 57, 16, 255, 93, 56, 19, 255, 93, 58, 23, 255, 89, 59, 11, 255, 89, 61, 10, 255, 86, 58, 14, 255, 86, 55, 16, 255, 93, 62, 15, 255, 92, 59, 17, 255, 89, 59, 13, 255, 92, 60, 17, 255, 93, 59, 24, 255, 95, 63, 14, 255, 95, 64, 9, 255, 99, 64, 22, 255, 106, 70, 18, 255, 103, 69, 14, 255, 98, 70, 10, 255, 101, 66, 17, 255, 101, 65, 24, 255, 100, 66, 21, 255, 110, 69, 19, 255, 108, 72, 24, 255, 102, 70, 12, 255, 103, 70, 15, 255, 102, 69, 21, 255, 99, 65, 23, 255, 101, 65, 24, 255, 105, 69, 17, 255, 98, 70, 16, 255, 94, 65, 20, 255, 99, 66, 25, 255, 99, 69, 25, 255, 101, 71, 16, 255, 106, 70, 18, 255, 115, 77, 27, 255, 111, 77, 18, 255, 100, 67, 22, 255, 102, 74, 24, 255, 107, 79, 21, 255, 105, 75, 27, 255, 105, 79, 16, 255, 115, 85, 20, 255, 133, 83, 20, 255, 129, 79, 29, 255, 130, 82, 22, 255, 128, 79, 27, 255, 123, 78, 24, 255, 122, 83, 22, 255, 122, 85, 19, 255, 125, 84, 21, 255, 125, 82, 24, 255, 126, 85, 26, 255, 121, 86, 20, 255, 122, 86, 29, 255, 133, 91, 36, 255, 128, 91, 35, 255, 129, 93, 36, 255, 134, 95, 30, 255, 139, 100, 24, 255, 138, 101, 33, 255, 135, 95, 46, 255, 133, 99, 44, 255, 130, 102, 42, 255, 136, 108, 43, 255, 142, 106, 51, 255, 145, 113, 19, 255, 143, 106, 44, 255, 145, 110, 34, 255, 147, 111, 32, 255, 150, 110, 48, 255, 147, 112, 47, 255, 133, 109, 37, 255, 151, 136, 63, 255, 160, 142, 71, 255, 148, 117, 40, 255, 155, 118, 43, 255, 156, 121, 36, 255, 161, 121, 34, 255, 162, 124, 27, 255, 170, 123, 28, 255, 168, 122, 18, 255, 156, 115, 32, 255, 149, 113, 34, 255, 143, 109, 25, 255, 143, 107, 28, 255, 142, 104, 27, 255, 139, 103, 30, 255, 132, 99, 25, 255, 134, 102, 23, 255, 137, 98, 22, 255, 143, 97, 21, 255, 144, 95, 23, 255, 141, 96, 18, 255, 144, 92, 17, 255, 142, 91, 15, 255, 138, 89, 17, 255, 143, 90, 20, 255, 138, 89, 14, 255, 128, 85, 18, 255, 131, 88, 12, 255, 141, 89, 12, 255, 138, 85, 17, 255, 141, 84, 23, 255, 142, 83, 22, 255, 130, 79, 16, 255, 129, 78, 12, 255, 136, 82, 11, 255, 134, 81, 13, 255, 137, 78, 17, 255, 135, 79, 10, 255, 128, 82, 5, 255, 138, 82, 11, 255, 136, 79, 10, 255, 134, 82, 4, 255, 137, 82, 5, 255, 140, 81, 7, 255, 146, 86, 5, 255, 156, 98, 19, 255, 149, 89, 19, 255, 161, 95, 20, 255, 166, 96, 13, 255, 168, 98, 2, 255, 178, 103, 10, 255, 185, 103, 8, 255, 182, 100, 4, 255, 168, 90, 6, 255, 154, 82, 8, 255, 145, 78, 8, 255, 141, 76, 4, 255, 142, 75, 4, 255, 140, 73, 6, 255, 136, 73, 6, 255, 138, 73, 7, 255, 140, 75, 9, 255, 134, 75, 7, 255, 141, 74, 8, 255, 140, 71, 6, 255, 137, 73, 6, 255, 132, 72, 6, 255, 134, 76, 4, 255, 138, 78, 2, 255, 149, 80, 6, 255, 155, 81, 6, 255, 161, 85, 12, 255, 167, 90, 14, 255, 187, 106, 7, 255, 190, 104, 2, 255, 177, 92, 7, 255, 196, 110, 5, 255, 199, 98, 7, 255, 162, 58, 6, 255, 129, 44, 4, 255, 123, 47, 11, 255, 124, 40, 14, 255, 125, 46, 4, 255, 131, 55, 1, 255, 155, 64, 5, 255, 143, 52, 6, 255, 113, 39, 2, 255, 111, 41, 3, 255, 119, 44, 4, 255, 136, 54, 7, 255, 151, 62, 3, 255, 144, 53, 10, 255, 116, 40, 9, 255, 107, 42, 7, 255, 116, 50, 11, 255, 121, 64, 13, 255, 114, 73, 18, 255, 114, 67, 17, 255, 106, 59, 9, 255, 82, 39, 6, 255, 71, 31, 6, 255, 82, 40, 5, 255, 100, 47, 10, 255, 105, 43, 10, 255, 105, 40, 6, 255, 105, 40, 5, 255, 104, 41, 8, 255, 107, 47, 8, 255, 108, 48, 6, 255, 111, 49, 10, 255, 109, 43, 9, 255, 107, 39, 9, 255, 105, 35, 9, 255, 82, 72, 147, 255, 70, 78, 141, 255, 44, 70, 140, 255, 34, 77, 135, 255, 33, 82, 133, 255, 28, 72, 124, 255, 8, 28, 100, 255, 1, 0, 98, 255, 2, 0, 88, 255, 4, 2, 105, 255, 2, 2, 104, 255, 3, 6, 74, 255, 0, 4, 8, 255, 0, 1, 5, 255, 1, 1, 4, 255, 1, 0, 4, 255, 0, 0, 4, 255, 0, 0, 4, 255, 2, 1, 5, 255, 0, 1, 2, 255, 1, 0, 5, 255, 1, 0, 6, 255, 1, 0, 5, 255, 0, 0, 4, 255, 1, 0, 5, 255, 1, 0, 4, 255, 0, 0, 2, 255, 0, 0, 2, 255, 0, 0, 2, 255, 0, 0, 2, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 4, 0, 5, 255, 1, 0, 5, 255, 7, 7, 22, 255, 21, 119, 160, 255, 57, 215, 215, 255, 32, 174, 167, 255, 25, 84, 93, 255, 140, 227, 253, 255, 63, 143, 136, 255, 0, 11, 25, 255, 1, 50, 89, 255, 3, 105, 151, 255, 4, 126, 149, 255, 2, 70, 52, 255, 3, 12, 0, 255, 2, 0, 0, 255, 2, 0, 0, 255, 2, 0, 2, 255, 5, 15, 42, 255, 1, 68, 99, 255, 4, 50, 64, 255, 0, 4, 18, 255, 0, 1, 1, 255, 2, 0, 1, 255, 1, 6, 16, 255, 6, 11, 39, 255, 1, 10, 39, 255, 0, 7, 18, 255, 1, 2, 12, 255, 3, 1, 14, 255, 2, 1, 8, 255, 0, 0, 4, 255, 2, 1, 4, 255, 1, 2, 2, 255, 0, 3, 1, 255, 2, 0, 1, 255, 4, 0, 1, 255, 1, 0, 0, 255, 2, 0, 0, 255, 7, 2, 21, 255, 18, 29, 84, 255, 38, 56, 100, 255, 35, 46, 47, 255, 15, 22, 28, 255, 5, 4, 3, 255, 10, 4, 22, 255, 31, 37, 70, 255, 53, 54, 107, 255, 16, 46, 146, 255, 11, 38, 102, 255, 1, 16, 48, 255, 3, 6, 14, 255, 4, 0, 0, 255, 3, 0, 0, 255, 1, 0, 4, 255, 1, 2, 6, 255, 1, 1, 1, 255, 4, 0, 4, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 0, 0, 255, 3, 0, 0, 255, 6, 1, 0, 255, 7, 2, 0, 255, 14, 9, 4, 255, 20, 13, 7, 255, 17, 11, 5, 255, 14, 9, 3, 255, 10, 5, 3, 255, 6, 4, 0, 255, 10, 8, 3, 255, 15, 5, 4, 255, 10, 5, 5, 255, 16, 8, 8, 255, 55, 40, 16, 255, 60, 36, 21, 255, 120, 87, 40, 255, 202, 144, 32, 255, 108, 53, 1, 255, 57, 33, 5, 255, 48, 26, 5, 255, 31, 17, 9, 255, 30, 18, 10, 255, 47, 44, 7, 255, 62, 69, 11, 255, 64, 74, 22, 255, 65, 80, 16, 255, 62, 73, 17, 255, 58, 67, 16, 255, 55, 63, 18, 255, 51, 57, 18, 255, 54, 59, 11, 255, 54, 56, 13, 255, 53, 48, 12, 255, 45, 40, 8, 255, 50, 44, 1, 255, 50, 41, 6, 255, 58, 40, 7, 255, 60, 38, 7, 255, 47, 34, 8, 255, 37, 34, 6, 255, 41, 35, 9, 255, 49, 32, 13, 255, 56, 32, 14, 255, 51, 31, 14, 255, 50, 34, 6, 255, 49, 34, 12, 255, 50, 34, 5, 255, 54, 34, 12, 255, 52, 33, 13, 255, 49, 31, 14, 255, 55, 34, 10, 255, 55, 33, 5, 255, 62, 38, 4, 255, 59, 34, 8, 255, 58, 44, 5, 255, 66, 45, 6, 255, 68, 43, 13, 255, 71, 42, 5, 255, 79, 46, 8, 255, 85, 51, 10, 255, 90, 54, 4, 255, 91, 53, 6, 255, 81, 48, 9, 255, 78, 49, 13, 255, 84, 47, 12, 255, 106, 46, 9, 255, 97, 38, 7, 255, 79, 38, 17, 255, 70, 35, 6, 255, 80, 42, 7, 255, 81, 45, 9, 255, 78, 49, 2, 255, 80, 42, 4, 255, 78, 39, 7, 255, 75, 40, 4, 255, 79, 47, 5, 255, 74, 39, 23, 255, 67, 39, 11, 255, 75, 46, 7, 255, 80, 47, 13, 255, 82, 48, 8, 255, 90, 50, 8, 255, 89, 50, 10, 255, 88, 53, 11, 255, 89, 51, 8, 255, 96, 55, 11, 255, 101, 63, 10, 255, 104, 64, 12, 255, 108, 69, 4, 255, 109, 68, 7, 255, 108, 64, 9, 255, 111, 66, 2, 255, 125, 79, 2, 255, 139, 90, 7, 255, 141, 87, 12, 255, 148, 92, 6, 255, 164, 103, 4, 255, 178, 110, 5, 255, 188, 117, 4, 255, 197, 126, 3, 255, 191, 118, 1, 255, 182, 107, 2, 255, 165, 94, 6, 255, 147, 85, 12, 255, 131, 82, 4, 255, 123, 77, 4, 255, 122, 73, 11, 255, 119, 72, 8, 255, 113, 69, 8, 255, 109, 67, 8, 255, 107, 68, 8, 255, 104, 65, 6, 255, 103, 60, 12, 255, 101, 59, 10, 255, 98, 58, 9, 255, 101, 62, 10, 255, 98, 60, 10, 255, 96, 61, 16, 255, 96, 61, 11, 255, 94, 60, 9, 255, 90, 58, 16, 255, 86, 56, 14, 255, 90, 61, 20, 255, 91, 61, 18, 255, 94, 61, 22, 255, 100, 60, 15, 255, 97, 59, 16, 255, 100, 65, 13, 255, 102, 71, 11, 255, 102, 67, 17, 255, 105, 69, 13, 255, 107, 67, 15, 255, 104, 67, 12, 255, 104, 66, 11, 255, 106, 67, 16, 255, 103, 68, 12, 255, 108, 66, 20, 255, 106, 67, 19, 255, 101, 67, 20, 255, 102, 69, 16, 255, 99, 67, 18, 255, 98, 66, 24, 255, 97, 66, 24, 255, 100, 75, 10, 255, 97, 74, 18, 255, 99, 69, 16, 255, 98, 70, 18, 255, 102, 71, 22, 255, 101, 73, 8, 255, 101, 75, 20, 255, 108, 76, 11, 255, 106, 73, 12, 255, 107, 73, 35, 255, 108, 75, 21, 255, 105, 73, 15, 255, 106, 73, 32, 255, 110, 80, 22, 255, 111, 78, 25, 255, 126, 82, 18, 255, 131, 81, 30, 255, 134, 83, 27, 255, 130, 81, 32, 255, 127, 82, 25, 255, 122, 84, 20, 255, 122, 84, 25, 255, 124, 82, 33, 255, 127, 84, 26, 255, 125, 82, 30, 255, 127, 88, 29, 255, 125, 91, 21, 255, 125, 90, 31, 255, 130, 92, 36, 255, 133, 95, 32, 255, 134, 97, 27, 255, 133, 100, 18, 255, 137, 99, 30, 255, 133, 100, 39, 255, 135, 103, 29, 255, 137, 101, 27, 255, 139, 102, 40, 255, 140, 108, 30, 255, 142, 112, 33, 255, 145, 110, 38, 255, 146, 109, 40, 255, 148, 110, 41, 255, 151, 112, 45, 255, 149, 115, 36, 255, 138, 111, 32, 255, 140, 120, 40, 255, 164, 145, 76, 255, 145, 115, 47, 255, 152, 118, 34, 255, 155, 118, 32, 255, 159, 116, 39, 255, 160, 121, 33, 255, 168, 120, 34, 255, 170, 121, 35, 255, 159, 118, 35, 255, 150, 114, 34, 255, 144, 108, 31, 255, 142, 107, 26, 255, 143, 105, 33, 255, 138, 98, 30, 255, 132, 98, 23, 255, 130, 101, 22, 255, 135, 98, 34, 255, 140, 95, 29, 255, 142, 93, 21, 255, 141, 92, 26, 255, 145, 92, 25, 255, 144, 92, 25, 255, 142, 92, 16, 255, 147, 92, 18, 255, 147, 89, 23, 255, 137, 88, 15, 255, 129, 86, 15, 255, 135, 84, 22, 255, 141, 83, 21, 255, 142, 83, 20, 255, 134, 81, 17, 255, 131, 82, 15, 255, 134, 83, 12, 255, 135, 81, 12, 255, 135, 83, 11, 255, 141, 83, 15, 255, 131, 77, 10, 255, 128, 81, 7, 255, 135, 81, 12, 255, 138, 81, 10, 255, 136, 80, 6, 255, 140, 80, 9, 255, 144, 79, 10, 255, 146, 82, 10, 255, 151, 90, 10, 255, 155, 91, 15, 255, 162, 96, 11, 255, 164, 94, 11, 255, 166, 92, 6, 255, 181, 104, 3, 255, 191, 105, 8, 255, 184, 98, 7, 255, 176, 94, 6, 255, 163, 88, 1, 255, 153, 84, 0, 255, 147, 80, 2, 255, 144, 75, 7, 255, 141, 74, 10, 255, 135, 75, 6, 255, 140, 75, 6, 255, 144, 77, 7, 255, 141, 79, 6, 255, 142, 75, 5, 255, 144, 76, 6, 255, 142, 79, 8, 255, 140, 75, 5, 255, 139, 74, 8, 255, 139, 74, 8, 255, 147, 79, 5, 255, 155, 84, 5, 255, 161, 83, 2, 255, 171, 92, 3, 255, 167, 78, 15, 255, 178, 82, 5, 255, 210, 111, 0, 255, 187, 91, 11, 255, 130, 45, 4, 255, 101, 39, 5, 255, 109, 41, 10, 255, 129, 50, 5, 255, 129, 57, 4, 255, 138, 60, 4, 255, 161, 68, 5, 255, 145, 54, 3, 255, 123, 44, 3, 255, 111, 41, 2, 255, 120, 44, 5, 255, 126, 47, 4, 255, 130, 52, 2, 255, 141, 60, 4, 255, 140, 56, 4, 255, 118, 38, 7, 255, 111, 40, 8, 255, 126, 67, 6, 255, 122, 69, 21, 255, 112, 67, 12, 255, 109, 58, 4, 255, 91, 41, 5, 255, 79, 32, 3, 255, 100, 51, 12, 255, 116, 65, 5, 255, 115, 59, 8, 255, 106, 48, 8, 255, 107, 45, 12, 255, 102, 39, 6, 255, 100, 39, 3, 255, 103, 44, 7, 255, 105, 45, 8, 255, 102, 40, 2, 255, 104, 37, 8, 255, 107, 40, 14, 255, 100, 32, 10, 255, 62, 74, 159, 255, 74, 83, 162, 255, 71, 76, 150, 255, 50, 75, 150, 255, 27, 61, 143, 255, 6, 32, 130, 255, 0, 3, 107, 255, 0, 4, 103, 255, 2, 8, 106, 255, 3, 6, 115, 255, 4, 5, 126, 255, 1, 6, 69, 255, 1, 2, 15, 255, 1, 2, 7, 255, 0, 1, 5, 255, 0, 1, 5, 255, 1, 0, 7, 255, 1, 0, 6, 255, 1, 1, 4, 255, 0, 0, 2, 255, 1, 0, 5, 255, 1, 0, 6, 255, 1, 0, 5, 255, 1, 1, 3, 255, 1, 1, 4, 255, 1, 0, 4, 255, 0, 0, 2, 255, 0, 0, 2, 255, 0, 0, 2, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 3, 0, 1, 255, 2, 0, 0, 255, 4, 30, 46, 255, 27, 182, 184, 255, 66, 200, 190, 255, 76, 212, 211, 255, 20, 158, 157, 255, 50, 126, 154, 255, 135, 246, 255, 255, 53, 157, 172, 255, 0, 94, 117, 255, 8, 97, 102, 255, 5, 33, 20, 255, 4, 0, 0, 255, 0, 0, 0, 255, 2, 0, 0, 255, 6, 5, 14, 255, 6, 38, 73, 255, 3, 86, 131, 255, 2, 91, 104, 255, 0, 71, 67, 255, 6, 21, 30, 255, 3, 0, 0, 255, 1, 0, 1, 255, 1, 1, 0, 255, 4, 9, 29, 255, 3, 9, 41, 255, 0, 4, 25, 255, 0, 1, 15, 255, 3, 1, 11, 255, 2, 1, 4, 255, 0, 0, 0, 255, 1, 0, 2, 255, 1, 2, 4, 255, 1, 1, 8, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 3, 17, 255, 10, 21, 61, 255, 30, 48, 94, 255, 23, 52, 68, 255, 20, 30, 22, 255, 4, 3, 0, 255, 11, 11, 13, 255, 28, 28, 54, 255, 34, 48, 118, 255, 14, 47, 128, 255, 7, 30, 88, 255, 2, 12, 48, 255, 7, 7, 13, 255, 1, 4, 0, 255, 2, 1, 0, 255, 0, 1, 1, 255, 1, 2, 1, 255, 1, 0, 7, 255, 1, 1, 6, 255, 0, 1, 2, 255, 1, 1, 2, 255, 2, 0, 1, 255, 2, 1, 0, 255, 7, 3, 1, 255, 10, 5, 2, 255, 14, 8, 4, 255, 17, 9, 6, 255, 13, 6, 2, 255, 14, 9, 3, 255, 9, 4, 0, 255, 6, 2, 2, 255, 10, 7, 5, 255, 7, 5, 2, 255, 8, 8, 4, 255, 8, 9, 1, 255, 11, 10, 7, 255, 36, 25, 16, 255, 87, 61, 33, 255, 96, 57, 14, 255, 215, 163, 42, 255, 200, 131, 19, 255, 46, 14, 7, 255, 32, 21, 10, 255, 47, 25, 9, 255, 35, 19, 4, 255, 26, 21, 6, 255, 39, 46, 11, 255, 69, 79, 24, 255, 69, 83, 26, 255, 67, 83, 11, 255, 66, 78, 14, 255, 58, 66, 13, 255, 56, 65, 16, 255, 51, 63, 9, 255, 59, 63, 3, 255, 56, 53, 10, 255, 47, 48, 11, 255, 41, 45, 10, 255, 42, 43, 14, 255, 48, 45, 10, 255, 50, 43, 2, 255, 56, 38, 1, 255, 51, 37, 6, 255, 46, 37, 9, 255, 45, 34, 6, 255, 49, 32, 9, 255, 48, 31, 12, 255, 48, 31, 10, 255, 51, 34, 10, 255, 54, 38, 10, 255, 50, 34, 6, 255, 50, 33, 8, 255, 48, 31, 14, 255, 54, 30, 12, 255, 60, 33, 11, 255, 58, 38, 9, 255, 72, 42, 4, 255, 67, 42, 9, 255, 64, 42, 12, 255, 72, 38, 3, 255, 75, 45, 4, 255, 76, 48, 0, 255, 86, 48, 7, 255, 89, 56, 10, 255, 91, 58, 6, 255, 93, 56, 10, 255, 90, 56, 9, 255, 86, 57, 6, 255, 89, 53, 2, 255, 112, 53, 0, 255, 106, 44, 5, 255, 86, 41, 5, 255, 76, 44, 2, 255, 78, 45, 14, 255, 74, 40, 13, 255, 79, 49, 2, 255, 82, 46, 9, 255, 79, 46, 4, 255, 78, 44, 7, 255, 77, 43, 8, 255, 76, 41, 10, 255, 67, 45, 5, 255, 74, 46, 8, 255, 82, 48, 12, 255, 85, 47, 13, 255, 92, 50, 9, 255, 92, 53, 4, 255, 89, 54, 7, 255, 91, 50, 11, 255, 92, 47, 8, 255, 96, 54, 6, 255, 102, 59, 11, 255, 106, 65, 12, 255, 108, 68, 2, 255, 112, 67, 18, 255, 117, 70, 14, 255, 131, 80, 12, 255, 144, 92, 12, 255, 144, 90, 5, 255, 156, 96, 2, 255, 178, 112, 11, 255, 209, 137, 8, 255, 217, 141, 8, 255, 195, 108, 9, 255, 192, 110, 6, 255, 165, 93, 2, 255, 147, 86, 7, 255, 136, 84, 6, 255, 129, 78, 6, 255, 125, 73, 8, 255, 117, 72, 10, 255, 114, 70, 3, 255, 112, 68, 8, 255, 108, 65, 14, 255, 104, 65, 4, 255, 103, 64, 10, 255, 105, 65, 15, 255, 101, 59, 10, 255, 98, 56, 11, 255, 100, 59, 12, 255, 103, 63, 14, 255, 99, 60, 14, 255, 99, 62, 18, 255, 99, 60, 16, 255, 102, 63, 15, 255, 99, 61, 13, 255, 94, 59, 24, 255, 92, 61, 11, 255, 96, 66, 13, 255, 102, 61, 20, 255, 101, 62, 20, 255, 98, 65, 12, 255, 100, 67, 15, 255, 103, 67, 16, 255, 106, 67, 20, 255, 107, 67, 13, 255, 106, 66, 17, 255, 106, 69, 13, 255, 104, 68, 15, 255, 102, 66, 17, 255, 103, 64, 24, 255, 104, 67, 21, 255, 104, 69, 16, 255, 103, 70, 6, 255, 98, 63, 30, 255, 99, 68, 20, 255, 95, 67, 17, 255, 95, 68, 23, 255, 96, 72, 12, 255, 102, 72, 21, 255, 103, 71, 20, 255, 106, 72, 15, 255, 103, 66, 26, 255, 105, 72, 14, 255, 103, 70, 13, 255, 101, 70, 18, 255, 104, 73, 19, 255, 104, 71, 16, 255, 112, 74, 32, 255, 107, 75, 8, 255, 107, 77, 18, 255, 109, 78, 29, 255, 123, 81, 25, 255, 133, 83, 22, 255, 135, 83, 20, 255, 128, 79, 23, 255, 125, 79, 23, 255, 122, 81, 24, 255, 124, 83, 27, 255, 130, 88, 22, 255, 130, 89, 22, 255, 125, 84, 23, 255, 124, 84, 31, 255, 120, 85, 24, 255, 123, 92, 24, 255, 132, 96, 21, 255, 135, 93, 32, 255, 132, 94, 43, 255, 131, 97, 25, 255, 135, 96, 33, 255, 136, 97, 37, 255, 136, 100, 41, 255, 138, 104, 26, 255, 140, 102, 41, 255, 142, 105, 29, 255, 141, 107, 39, 255, 143, 110, 38, 255, 146, 108, 41, 255, 146, 110, 37, 255, 151, 113, 42, 255, 151, 114, 43, 255, 146, 115, 34, 255, 138, 112, 37, 255, 158, 138, 72, 255, 151, 125, 50, 255, 148, 114, 26, 255, 157, 114, 47, 255, 162, 120, 34, 255, 162, 122, 32, 255, 168, 122, 29, 255, 168, 120, 27, 255, 157, 114, 24, 255, 148, 112, 28, 255, 143, 111, 28, 255, 142, 108, 21, 255, 143, 105, 25, 255, 144, 104, 22, 255, 133, 100, 18, 255, 127, 100, 10, 255, 135, 100, 35, 255, 140, 99, 24, 255, 142, 94, 14, 255, 146, 92, 18, 255, 150, 91, 25, 255, 147, 90, 26, 255, 143, 91, 21, 255, 146, 92, 10, 255, 146, 90, 10, 255, 137, 87, 13, 255, 131, 87, 16, 255, 134, 87, 14, 255, 146, 87, 18, 255, 145, 87, 14, 255, 132, 85, 8, 255, 134, 87, 13, 255, 134, 82, 17, 255, 136, 81, 13, 255, 135, 82, 14, 255, 141, 83, 18, 255, 136, 82, 15, 255, 130, 81, 15, 255, 134, 82, 10, 255, 137, 83, 11, 255, 137, 79, 14, 255, 141, 80, 13, 255, 144, 81, 10, 255, 147, 85, 9, 255, 151, 88, 14, 255, 155, 88, 10, 255, 159, 92, 12, 255, 162, 95, 4, 255, 163, 93, 4, 255, 181, 102, 7, 255, 189, 103, 9, 255, 183, 98, 2, 255, 180, 97, 1, 255, 170, 91, 3, 255, 161, 86, 6, 255, 153, 82, 5, 255, 146, 79, 6, 255, 145, 79, 9, 255, 143, 78, 9, 255, 146, 77, 6, 255, 144, 77, 3, 255, 145, 78, 5, 255, 143, 76, 6, 255, 142, 75, 6, 255, 140, 79, 5, 255, 135, 73, 5, 255, 137, 74, 7, 255, 144, 77, 9, 255, 153, 81, 11, 255, 156, 83, 3, 255, 163, 87, 5, 255, 172, 89, 11, 255, 169, 73, 12, 255, 167, 66, 8, 255, 146, 52, 7, 255, 109, 32, 7, 255, 99, 37, 8, 255, 113, 49, 8, 255, 131, 51, 7, 255, 131, 50, 5, 255, 135, 62, 4, 255, 146, 65, 3, 255, 133, 47, 5, 255, 119, 40, 11, 255, 116, 46, 11, 255, 122, 45, 4, 255, 130, 53, 1, 255, 138, 58, 3, 255, 134, 55, 4, 255, 138, 57, 3, 255, 135, 55, 2, 255, 113, 38, 8, 255, 115, 52, 12, 255, 122, 77, 9, 255, 114, 69, 8, 255, 115, 58, 11, 255, 96, 54, 12, 255, 108, 65, 9, 255, 121, 69, 15, 255, 131, 74, 26, 255, 121, 67, 2, 255, 105, 54, 6, 255, 106, 48, 12, 255, 108, 44, 17, 255, 105, 42, 13, 255, 103, 43, 4, 255, 104, 45, 7, 255, 108, 46, 10, 255, 110, 46, 7, 255, 110, 44, 10, 255, 102, 36, 7, 255, 98, 31, 3, 255, 15, 35, 147, 255, 25, 54, 175, 255, 37, 54, 170, 255, 26, 49, 165, 255, 12, 20, 159, 255, 2, 3, 123, 255, 3, 6, 106, 255, 3, 7, 116, 255, 1, 8, 105, 255, 3, 2, 93, 255, 1, 6, 92, 255, 2, 6, 51, 255, 1, 1, 17, 255, 2, 2, 9, 255, 1, 2, 7, 255, 1, 2, 8, 255, 2, 2, 11, 255, 1, 1, 9, 255, 0, 0, 4, 255, 0, 0, 3, 255, 0, 0, 5, 255, 1, 0, 5, 255, 1, 1, 3, 255, 1, 1, 0, 255, 1, 1, 2, 255, 1, 1, 2, 255, 0, 0, 1, 255, 0, 0, 2, 255, 0, 0, 2, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 2, 0, 255, 2, 1, 3, 255, 0, 0, 0, 255, 6, 70, 76, 255, 46, 179, 169, 255, 79, 225, 227, 255, 41, 249, 247, 255, 24, 123, 122, 255, 59, 123, 156, 255, 136, 250, 255, 255, 38, 131, 128, 255, 0, 37, 54, 255, 3, 37, 41, 255, 3, 0, 0, 255, 1, 0, 5, 255, 1, 26, 49, 255, 0, 70, 97, 255, 3, 87, 109, 255, 2, 73, 81, 255, 6, 41, 42, 255, 1, 4, 4, 255, 6, 13, 53, 255, 2, 113, 154, 255, 3, 71, 82, 255, 1, 0, 0, 255, 4, 0, 14, 255, 3, 8, 25, 255, 3, 5, 29, 255, 1, 2, 15, 255, 1, 1, 2, 255, 1, 1, 0, 255, 0, 0, 2, 255, 1, 0, 3, 255, 0, 2, 1, 255, 0, 1, 0, 255, 0, 1, 8, 255, 7, 13, 50, 255, 17, 29, 94, 255, 15, 30, 78, 255, 14, 22, 22, 255, 3, 5, 0, 255, 11, 5, 22, 255, 24, 26, 75, 255, 31, 50, 123, 255, 18, 49, 131, 255, 8, 36, 105, 255, 11, 17, 61, 255, 5, 7, 22, 255, 2, 1, 0, 255, 0, 0, 1, 255, 0, 2, 2, 255, 2, 1, 5, 255, 1, 0, 3, 255, 2, 0, 3, 255, 3, 0, 1, 255, 2, 2, 3, 255, 1, 1, 1, 255, 0, 2, 1, 255, 5, 3, 0, 255, 7, 2, 1, 255, 10, 5, 3, 255, 13, 8, 5, 255, 16, 8, 5, 255, 15, 6, 4, 255, 10, 5, 2, 255, 8, 5, 1, 255, 10, 6, 2, 255, 10, 5, 2, 255, 9, 4, 2, 255, 11, 7, 3, 255, 9, 6, 0, 255, 11, 11, 5, 255, 14, 6, 8, 255, 40, 35, 22, 255, 56, 41, 19, 255, 147, 102, 25, 255, 226, 165, 41, 255, 114, 61, 5, 255, 36, 23, 7, 255, 22, 19, 4, 255, 28, 19, 4, 255, 41, 23, 2, 255, 33, 25, 3, 255, 45, 51, 18, 255, 75, 91, 40, 255, 74, 91, 30, 255, 70, 86, 13, 255, 68, 80, 8, 255, 68, 75, 15, 255, 60, 68, 8, 255, 56, 65, 7, 255, 57, 61, 5, 255, 54, 54, 5, 255, 56, 50, 9, 255, 47, 44, 6, 255, 51, 44, 13, 255, 44, 37, 17, 255, 48, 41, 8, 255, 50, 42, 8, 255, 49, 34, 12, 255, 47, 30, 8, 255, 48, 36, 10, 255, 48, 35, 9, 255, 55, 41, 3, 255, 57, 43, 6, 255, 54, 39, 7, 255, 54, 42, 2, 255, 58, 39, 7, 255, 62, 33, 7, 255, 57, 40, 5, 255, 61, 38, 8, 255, 64, 38, 8, 255, 72, 44, 2, 255, 67, 45, 6, 255, 69, 43, 7, 255, 65, 41, 8, 255, 66, 39, 6, 255, 77, 45, 11, 255, 80, 52, 4, 255, 86, 55, 5, 255, 88, 58, 7, 255, 96, 57, 6, 255, 94, 57, 13, 255, 90, 57, 6, 255, 85, 54, 4, 255, 85, 48, 7, 255, 112, 53, 7, 255, 110, 44, 8, 255, 93, 44, 10, 255, 80, 45, 4, 255, 74, 40, 10, 255, 72, 45, 7, 255, 76, 51, 4, 255, 75, 41, 19, 255, 73, 44, 12, 255, 77, 46, 3, 255, 79, 45, 9, 255, 82, 45, 10, 255, 72, 43, 10, 255, 75, 42, 1, 255, 83, 45, 9, 255, 87, 48, 9, 255, 93, 50, 8, 255, 94, 52, 6, 255, 91, 52, 10, 255, 93, 49, 14, 255, 92, 44, 8, 255, 98, 54, 6, 255, 104, 61, 9, 255, 109, 64, 12, 255, 108, 65, 2, 255, 114, 68, 10, 255, 120, 71, 10, 255, 131, 77, 13, 255, 144, 85, 17, 255, 156, 91, 14, 255, 172, 103, 4, 255, 191, 121, 4, 255, 204, 135, 9, 255, 189, 119, 3, 255, 161, 95, 2, 255, 164, 102, 10, 255, 152, 91, 7, 255, 148, 86, 9, 255, 137, 77, 13, 255, 122, 68, 12, 255, 116, 68, 9, 255, 114, 71, 4, 255, 112, 65, 8, 255, 110, 63, 12, 255, 111, 66, 6, 255, 106, 66, 11, 255, 100, 61, 16, 255, 95, 60, 13, 255, 94, 59, 10, 255, 97, 60, 4, 255, 96, 59, 5, 255, 100, 61, 13, 255, 101, 61, 11, 255, 99, 58, 6, 255, 107, 65, 14, 255, 102, 59, 21, 255, 95, 57, 9, 255, 92, 57, 11, 255, 98, 65, 9, 255, 101, 65, 6, 255, 98, 61, 19, 255, 97, 63, 19, 255, 99, 66, 14, 255, 99, 65, 15, 255, 104, 65, 17, 255, 109, 66, 21, 255, 110, 72, 17, 255, 104, 68, 16, 255, 98, 64, 11, 255, 99, 65, 24, 255, 100, 68, 16, 255, 99, 69, 11, 255, 107, 70, 25, 255, 108, 69, 18, 255, 104, 67, 19, 255, 102, 69, 15, 255, 100, 69, 14, 255, 99, 70, 9, 255, 97, 70, 16, 255, 97, 69, 20, 255, 96, 74, 11, 255, 101, 71, 7, 255, 106, 70, 22, 255, 105, 69, 21, 255, 109, 70, 23, 255, 101, 71, 15, 255, 101, 71, 23, 255, 106, 75, 29, 255, 104, 73, 14, 255, 108, 73, 17, 255, 105, 71, 20, 255, 109, 76, 28, 255, 111, 79, 23, 255, 118, 82, 23, 255, 131, 81, 23, 255, 134, 83, 15, 255, 129, 81, 15, 255, 129, 83, 21, 255, 127, 84, 20, 255, 127, 84, 12, 255, 133, 88, 17, 255, 131, 88, 20, 255, 127, 88, 20, 255, 123, 86, 20, 255, 121, 89, 16, 255, 123, 91, 29, 255, 133, 93, 33, 255, 133, 93, 23, 255, 133, 93, 40, 255, 136, 99, 34, 255, 135, 95, 31, 255, 137, 95, 39, 255, 140, 101, 35, 255, 140, 102, 29, 255, 138, 99, 39, 255, 141, 107, 34, 255, 145, 108, 33, 255, 147, 108, 44, 255, 145, 109, 35, 255, 144, 108, 38, 255, 148, 112, 39, 255, 148, 109, 48, 255, 147, 111, 40, 255, 140, 111, 26, 255, 147, 125, 42, 255, 159, 134, 60, 255, 147, 113, 33, 255, 159, 115, 36, 255, 162, 119, 25, 255, 164, 122, 21, 255, 172, 124, 26, 255, 172, 124, 24, 255, 160, 117, 19, 255, 150, 114, 26, 255, 145, 113, 26, 255, 144, 108, 29, 255, 146, 106, 27, 255, 148, 105, 27, 255, 136, 98, 26, 255, 132, 99, 18, 255, 134, 100, 22, 255, 136, 97, 16, 255, 142, 95, 26, 255, 146, 93, 27, 255, 151, 95, 13, 255, 151, 94, 23, 255, 148, 94, 15, 255, 151, 91, 19, 255, 151, 91, 20, 255, 141, 89, 13, 255, 131, 85, 15, 255, 133, 89, 9, 255, 146, 92, 9, 255, 144, 88, 12, 255, 133, 84, 12, 255, 132, 84, 13, 255, 133, 84, 9, 255, 138, 84, 16, 255, 133, 80, 12, 255, 144, 86, 18, 255, 137, 82, 12, 255, 129, 80, 6, 255, 134, 84, 15, 255, 135, 83, 12, 255, 137, 82, 6, 255, 142, 82, 9, 255, 143, 82, 11, 255, 147, 85, 15, 255, 153, 90, 12, 255, 157, 90, 6, 255, 157, 91, 15, 255, 160, 94, 11, 255, 163, 92, 10, 255, 174, 98, 8, 255, 177, 99, 0, 255, 182, 100, 1, 255, 183, 102, 3, 255, 176, 95, 4, 255, 166, 88, 7, 255, 157, 83, 7, 255, 149, 82, 6, 255, 148, 82, 5, 255, 150, 80, 3, 255, 148, 79, 2, 255, 148, 81, 1, 255, 148, 81, 3, 255, 144, 78, 2, 255, 143, 75, 3, 255, 145, 73, 6, 255, 145, 75, 6, 255, 141, 74, 5, 255, 143, 74, 6, 255, 152, 78, 10, 255, 155, 72, 6, 255, 150, 63, 4, 255, 137, 49, 3, 255, 135, 47, 7, 255, 123, 41, 10, 255, 100, 35, 8, 255, 101, 40, 5, 255, 112, 43, 0, 255, 114, 41, 10, 255, 114, 44, 9, 255, 128, 54, 4, 255, 143, 55, 3, 255, 125, 46, 3, 255, 112, 41, 11, 255, 111, 45, 6, 255, 112, 44, 1, 255, 129, 57, 1, 255, 141, 51, 6, 255, 130, 53, 6, 255, 136, 57, 2, 255, 138, 54, 9, 255, 118, 47, 9, 255, 119, 52, 16, 255, 122, 72, 14, 255, 120, 71, 10, 255, 120, 65, 24, 255, 118, 68, 15, 255, 133, 79, 16, 255, 148, 87, 20, 255, 152, 89, 20, 255, 141, 80, 15, 255, 133, 76, 5, 255, 112, 51, 11, 255, 98, 35, 8, 255, 101, 37, 14, 255, 112, 43, 16, 255, 110, 42, 5, 255, 108, 43, 7, 255, 109, 45, 9, 255, 110, 46, 7, 255, 110, 44, 7, 255, 103, 38, 5, 255, 99, 35, 3, 255, 0, 1, 53, 255, 0, 11, 84, 255, 0, 9, 84, 255, 0, 6, 76, 255, 1, 4, 62, 255, 2, 6, 60, 255, 3, 5, 64, 255, 3, 6, 45, 255, 1, 1, 30, 255, 3, 4, 31, 255, 1, 5, 30, 255, 1, 2, 17, 255, 5, 4, 14, 255, 2, 2, 10, 255, 1, 1, 8, 255, 2, 2, 11, 255, 2, 2, 13, 255, 1, 1, 12, 255, 1, 2, 10, 255, 1, 1, 8, 255, 1, 1, 8, 255, 1, 1, 7, 255, 0, 0, 4, 255, 0, 0, 1, 255, 1, 1, 3, 255, 1, 0, 2, 255, 0, 0, 0, 255, 0, 0, 1, 255, 1, 1, 3, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 0, 1, 2, 255, 5, 0, 0, 255, 1, 0, 0, 255, 16, 114, 131, 255, 28, 222, 214, 255, 1, 126, 101, 255, 24, 70, 95, 255, 44, 86, 120, 255, 78, 159, 193, 255, 128, 243, 243, 255, 34, 97, 87, 255, 0, 41, 40, 255, 4, 45, 57, 255, 3, 45, 75, 255, 4, 90, 118, 255, 2, 87, 96, 255, 1, 53, 54, 255, 2, 16, 5, 255, 2, 0, 14, 255, 6, 65, 133, 255, 2, 190, 236, 255, 11, 255, 255, 255, 18, 220, 223, 255, 3, 45, 50, 255, 3, 0, 0, 255, 1, 3, 6, 255, 1, 2, 12, 255, 0, 0, 7, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 5, 255, 0, 0, 2, 255, 0, 0, 4, 255, 4, 10, 30, 255, 10, 25, 69, 255, 11, 29, 70, 255, 9, 19, 31, 255, 2, 4, 0, 255, 1, 0, 8, 255, 17, 16, 50, 255, 31, 44, 97, 255, 21, 39, 112, 255, 6, 24, 97, 255, 2, 16, 59, 255, 3, 7, 16, 255, 6, 0, 0, 255, 0, 1, 2, 255, 5, 2, 8, 255, 1, 1, 6, 255, 0, 3, 5, 255, 2, 2, 3, 255, 1, 2, 0, 255, 1, 2, 3, 255, 0, 1, 1, 255, 3, 2, 3, 255, 6, 3, 1, 255, 9, 4, 0, 255, 12, 7, 2, 255, 10, 5, 1, 255, 11, 6, 2, 255, 9, 4, 0, 255, 9, 3, 0, 255, 7, 1, 0, 255, 8, 1, 1, 255, 9, 5, 2, 255, 12, 8, 4, 255, 13, 8, 4, 255, 11, 6, 2, 255, 12, 7, 3, 255, 13, 8, 2, 255, 4, 6, 3, 255, 15, 17, 14, 255, 37, 32, 12, 255, 60, 40, 21, 255, 182, 125, 30, 255, 171, 108, 14, 255, 57, 34, 7, 255, 32, 23, 3, 255, 21, 14, 3, 255, 19, 17, 2, 255, 42, 27, 6, 255, 36, 25, 7, 255, 59, 70, 18, 255, 81, 100, 42, 255, 71, 90, 24, 255, 73, 90, 16, 255, 66, 76, 11, 255, 66, 73, 19, 255, 58, 67, 13, 255, 61, 64, 10, 255, 55, 57, 12, 255, 50, 54, 6, 255, 62, 49, 9, 255, 53, 42, 8, 255, 61, 45, 4, 255, 51, 40, 10, 255, 50, 39, 8, 255, 45, 38, 7, 255, 49, 37, 7, 255, 52, 35, 9, 255, 51, 38, 13, 255, 49, 41, 12, 255, 56, 41, 11, 255, 53, 37, 10, 255, 53, 43, 10, 255, 47, 39, 1, 255, 61, 46, 2, 255, 74, 45, 6, 255, 62, 43, 7, 255, 67, 44, 6, 255, 67, 43, 8, 255, 68, 44, 7, 255, 74, 44, 1, 255, 70, 46, 2, 255, 69, 41, 6, 255, 70, 44, 11, 255, 67, 41, 11, 255, 77, 47, 5, 255, 91, 53, 3, 255, 98, 55, 7, 255, 99, 56, 10, 255, 92, 57, 3, 255, 87, 55, 0, 255, 87, 55, 11, 255, 89, 52, 16, 255, 113, 55, 6, 255, 107, 43, 4, 255, 97, 42, 10, 255, 87, 50, 5, 255, 72, 43, 6, 255, 73, 46, 4, 255, 78, 45, 3, 255, 79, 39, 11, 255, 79, 48, 10, 255, 76, 44, 0, 255, 78, 43, 7, 255, 79, 44, 9, 255, 81, 45, 7, 255, 81, 45, 9, 255, 83, 47, 7, 255, 84, 46, 9, 255, 93, 48, 12, 255, 96, 53, 6, 255, 92, 52, 6, 255, 96, 51, 12, 255, 96, 49, 12, 255, 96, 51, 12, 255, 100, 57, 5, 255, 109, 65, 5, 255, 111, 65, 6, 255, 117, 70, 4, 255, 122, 73, 3, 255, 133, 82, 6, 255, 154, 94, 7, 255, 157, 95, 10, 255, 164, 103, 3, 255, 169, 106, 6, 255, 168, 102, 10, 255, 158, 89, 2, 255, 160, 97, 10, 255, 144, 85, 13, 255, 134, 79, 8, 255, 125, 73, 1, 255, 122, 70, 13, 255, 116, 67, 13, 255, 111, 66, 9, 255, 110, 64, 4, 255, 116, 66, 7, 255, 113, 62, 9, 255, 112, 63, 9, 255, 107, 64, 10, 255, 102, 63, 13, 255, 95, 61, 9, 255, 98, 63, 15, 255, 95, 60, 8, 255, 96, 62, 8, 255, 94, 60, 7, 255, 97, 60, 12, 255, 100, 58, 19, 255, 96, 56, 12, 255, 96, 57, 10, 255, 95, 62, 13, 255, 92, 63, 6, 255, 97, 62, 5, 255, 104, 59, 10, 255, 96, 62, 17, 255, 97, 61, 17, 255, 101, 67, 10, 255, 103, 67, 17, 255, 104, 64, 17, 255, 110, 67, 13, 255, 106, 66, 29, 255, 106, 67, 21, 255, 96, 64, 12, 255, 95, 60, 20, 255, 101, 65, 16, 255, 100, 72, 3, 255, 107, 72, 15, 255, 109, 70, 19, 255, 103, 67, 18, 255, 99, 66, 12, 255, 102, 70, 16, 255, 99, 68, 19, 255, 100, 70, 13, 255, 106, 70, 20, 255, 103, 69, 17, 255, 104, 67, 20, 255, 106, 70, 18, 255, 109, 73, 17, 255, 109, 74, 20, 255, 104, 76, 15, 255, 101, 71, 16, 255, 104, 73, 27, 255, 106, 74, 20, 255, 109, 75, 21, 255, 110, 75, 21, 255, 108, 74, 26, 255, 113, 78, 17, 255, 114, 82, 16, 255, 132, 83, 25, 255, 134, 85, 18, 255, 129, 83, 18, 255, 129, 81, 18, 255, 129, 85, 12, 255, 130, 84, 15, 255, 132, 83, 23, 255, 132, 85, 20, 255, 130, 86, 32, 255, 126, 86, 27, 255, 127, 89, 22, 255, 130, 93, 22, 255, 132, 93, 28, 255, 135, 92, 29, 255, 138, 94, 30, 255, 139, 97, 34, 255, 135, 97, 29, 255, 138, 101, 25, 255, 138, 99, 32, 255, 141, 102, 30, 255, 143, 105, 33, 255, 145, 105, 36, 255, 145, 108, 28, 255, 149, 111, 31, 255, 147, 106, 42, 255, 147, 109, 35, 255, 148, 113, 28, 255, 149, 111, 35, 255, 150, 113, 27, 255, 149, 114, 22, 255, 141, 115, 32, 255, 154, 130, 50, 255, 153, 117, 55, 255, 163, 120, 28, 255, 159, 116, 24, 255, 167, 122, 27, 255, 174, 124, 26, 255, 171, 122, 17, 255, 161, 116, 19, 255, 152, 113, 30, 255, 143, 111, 23, 255, 145, 107, 34, 255, 148, 104, 25, 255, 145, 98, 24, 255, 144, 101, 23, 255, 139, 101, 26, 255, 134, 100, 23, 255, 138, 98, 23, 255, 141, 95, 16, 255, 143, 96, 22, 255, 148, 95, 21, 255, 153, 98, 9, 255, 152, 94, 17, 255, 153, 91, 19, 255, 154, 92, 15, 255, 144, 90, 19, 255, 135, 86, 24, 255, 135, 87, 16, 255, 139, 89, 14, 255, 141, 86, 9, 255, 138, 84, 9, 255, 135, 86, 10, 255, 133, 84, 11, 255, 133, 81, 7, 255, 136, 85, 9, 255, 144, 87, 9, 255, 137, 83, 2, 255, 136, 84, 10, 255, 137, 85, 7, 255, 135, 83, 9, 255, 139, 80, 15, 255, 141, 82, 14, 255, 144, 86, 8, 255, 148, 85, 6, 255, 155, 87, 13, 255, 157, 86, 11, 255, 159, 92, 16, 255, 163, 96, 9, 255, 167, 97, 5, 255, 172, 96, 8, 255, 171, 97, 4, 255, 179, 102, 4, 255, 184, 104, 4, 255, 183, 101, 3, 255, 172, 92, 2, 255, 162, 85, 4, 255, 153, 81, 3, 255, 149, 82, 3, 255, 151, 79, 3, 255, 146, 76, 0, 255, 147, 81, 3, 255, 147, 78, 3, 255, 146, 77, 2, 255, 152, 76, 5, 255, 140, 77, 2, 255, 139, 71, 0, 255, 148, 70, 3, 255, 149, 64, 5, 255, 141, 53, 6, 255, 136, 48, 8, 255, 125, 44, 6, 255, 121, 43, 8, 255, 115, 46, 5, 255, 100, 40, 7, 255, 102, 42, 7, 255, 106, 41, 6, 255, 100, 40, 1, 255, 103, 45, 3, 255, 125, 52, 2, 255, 132, 55, 2, 255, 121, 46, 9, 255, 106, 41, 5, 255, 107, 40, 0, 255, 114, 37, 3, 255, 114, 44, 4, 255, 127, 58, 4, 255, 122, 51, 2, 255, 142, 57, 5, 255, 144, 63, 2, 255, 123, 57, 8, 255, 123, 69, 12, 255, 132, 75, 21, 255, 125, 68, 6, 255, 112, 61, 1, 255, 119, 69, 19, 255, 140, 87, 8, 255, 160, 94, 8, 255, 155, 90, 16, 255, 142, 78, 11, 255, 138, 76, 7, 255, 144, 81, 11, 255, 122, 53, 8, 255, 104, 32, 6, 255, 101, 33, 8, 255, 106, 41, 10, 255, 107, 46, 10, 255, 104, 43, 5, 255, 107, 40, 5, 255, 112, 41, 8, 255, 105, 41, 6, 255, 101, 36, 5, 255, 101, 37, 6, 255, 1, 2, 14, 255, 1, 2, 4, 255, 3, 2, 10, 255, 4, 0, 8, 255, 1, 4, 12, 255, 2, 3, 15, 255, 2, 2, 9, 255, 1, 3, 8, 255, 2, 4, 7, 255, 2, 2, 14, 255, 2, 4, 16, 255, 6, 1, 14, 255, 2, 2, 11, 255, 2, 2, 10, 255, 1, 1, 9, 255, 2, 2, 12, 255, 2, 1, 15, 255, 0, 1, 14, 255, 1, 3, 16, 255, 3, 3, 14, 255, 2, 2, 13, 255, 2, 2, 10, 255, 0, 1, 7, 255, 0, 1, 4, 255, 1, 1, 6, 255, 1, 1, 4, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 3, 255, 1, 1, 3, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 2, 0, 3, 255, 1, 2, 3, 255, 2, 1, 2, 255, 2, 0, 0, 255, 5, 18, 23, 255, 3, 47, 38, 255, 0, 12, 18, 255, 2, 47, 97, 255, 18, 109, 156, 255, 15, 109, 134, 255, 61, 194, 218, 255, 111, 236, 236, 255, 13, 98, 102, 255, 0, 83, 110, 255, 4, 95, 116, 255, 1, 63, 53, 255, 6, 28, 12, 255, 3, 0, 5, 255, 5, 21, 75, 255, 0, 159, 207, 255, 5, 248, 255, 255, 13, 255, 255, 255, 48, 245, 249, 255, 92, 255, 255, 255, 23, 118, 107, 255, 0, 0, 0, 255, 2, 1, 4, 255, 1, 2, 1, 255, 0, 1, 2, 255, 2, 1, 2, 255, 1, 0, 0, 255, 0, 0, 0, 255, 0, 5, 20, 255, 7, 19, 64, 255, 12, 31, 68, 255, 9, 23, 36, 255, 3, 7, 7, 255, 2, 1, 0, 255, 10, 9, 30, 255, 25, 39, 79, 255, 15, 37, 115, 255, 3, 30, 107, 255, 9, 12, 45, 255, 5, 1, 5, 255, 1, 1, 3, 255, 0, 0, 0, 255, 2, 1, 3, 255, 1, 0, 1, 255, 2, 1, 1, 255, 3, 2, 1, 255, 2, 2, 1, 255, 4, 0, 0, 255, 1, 0, 2, 255, 3, 1, 5, 255, 4, 1, 3, 255, 9, 3, 1, 255, 11, 5, 2, 255, 12, 7, 3, 255, 14, 6, 3, 255, 12, 5, 1, 255, 11, 5, 1, 255, 9, 4, 0, 255, 8, 4, 2, 255, 11, 6, 6, 255, 13, 4, 4, 255, 15, 6, 3, 255, 15, 8, 2, 255, 11, 4, 0, 255, 12, 7, 3, 255, 13, 9, 6, 255, 11, 7, 6, 255, 4, 9, 8, 255, 13, 12, 6, 255, 24, 5, 5, 255, 88, 55, 25, 255, 189, 121, 12, 255, 98, 53, 10, 255, 34, 20, 6, 255, 28, 23, 9, 255, 24, 15, 6, 255, 23, 14, 10, 255, 35, 22, 10, 255, 64, 42, 8, 255, 80, 89, 36, 255, 82, 104, 29, 255, 66, 87, 15, 255, 69, 88, 7, 255, 65, 78, 11, 255, 62, 74, 15, 255, 56, 70, 12, 255, 61, 62, 10, 255, 59, 58, 8, 255, 52, 52, 12, 255, 48, 44, 4, 255, 50, 46, 16, 255, 56, 46, 4, 255, 57, 47, 1, 255, 54, 43, 9, 255, 50, 41, 9, 255, 54, 41, 5, 255, 56, 39, 5, 255, 55, 38, 12, 255, 49, 36, 9, 255, 53, 38, 6, 255, 61, 39, 10, 255, 65, 42, 9, 255, 73, 52, 12, 255, 76, 54, 8, 255, 77, 51, 3, 255, 73, 48, 2, 255, 68, 47, 7, 255, 63, 48, 6, 255, 75, 42, 7, 255, 76, 44, 8, 255, 69, 43, 11, 255, 71, 41, 6, 255, 67, 44, 4, 255, 71, 46, 5, 255, 75, 45, 16, 255, 78, 51, 9, 255, 88, 55, 2, 255, 92, 57, 4, 255, 94, 57, 10, 255, 89, 53, 6, 255, 85, 51, 10, 255, 89, 53, 10, 255, 115, 57, 2, 255, 112, 47, 3, 255, 88, 33, 10, 255, 91, 45, 11, 255, 84, 42, 12, 255, 75, 42, 9, 255, 76, 46, 7, 255, 85, 43, 5, 255, 83, 42, 8, 255, 78, 43, 7, 255, 78, 43, 3, 255, 80, 47, 12, 255, 88, 48, 1, 255, 79, 42, 9, 255, 74, 43, 12, 255, 82, 49, 7, 255, 89, 46, 13, 255, 94, 51, 12, 255, 96, 55, 14, 255, 95, 53, 10, 255, 93, 49, 5, 255, 94, 51, 13, 255, 98, 56, 10, 255, 106, 62, 9, 255, 111, 65, 4, 255, 115, 69, 8, 255, 121, 74, 10, 255, 137, 90, 3, 255, 160, 100, 2, 255, 157, 93, 5, 255, 158, 93, 9, 255, 157, 93, 2, 255, 148, 90, 8, 255, 137, 84, 9, 255, 135, 80, 10, 255, 131, 77, 7, 255, 122, 71, 11, 255, 120, 70, 12, 255, 121, 70, 13, 255, 115, 66, 8, 255, 112, 67, 1, 255, 112, 65, 7, 255, 115, 64, 14, 255, 114, 62, 10, 255, 114, 65, 2, 255, 106, 61, 6, 255, 99, 60, 4, 255, 100, 64, 3, 255, 100, 61, 8, 255, 99, 62, 9, 255, 95, 61, 14, 255, 95, 63, 15, 255, 100, 64, 8, 255, 99, 64, 15, 255, 93, 62, 17, 255, 97, 62, 14, 255, 95, 60, 15, 255, 94, 62, 10, 255, 99, 63, 19, 255, 101, 61, 12, 255, 99, 61, 19, 255, 99, 60, 23, 255, 104, 67, 13, 255, 103, 62, 21, 255, 108, 66, 21, 255, 107, 66, 17, 255, 104, 66, 21, 255, 108, 67, 12, 255, 102, 65, 18, 255, 101, 66, 10, 255, 104, 65, 14, 255, 102, 67, 17, 255, 108, 68, 17, 255, 105, 71, 8, 255, 103, 70, 16, 255, 103, 68, 26, 255, 100, 69, 18, 255, 100, 66, 23, 255, 104, 71, 18, 255, 105, 70, 14, 255, 106, 68, 17, 255, 104, 72, 17, 255, 107, 71, 16, 255, 110, 70, 20, 255, 105, 72, 16, 255, 108, 74, 19, 255, 106, 75, 17, 255, 104, 72, 28, 255, 106, 72, 28, 255, 112, 78, 22, 255, 111, 77, 9, 255, 113, 77, 20, 255, 115, 77, 23, 255, 112, 82, 15, 255, 130, 86, 13, 255, 134, 85, 20, 255, 131, 84, 23, 255, 131, 83, 18, 255, 128, 82, 25, 255, 130, 83, 23, 255, 129, 81, 17, 255, 135, 86, 33, 255, 135, 88, 24, 255, 130, 88, 17, 255, 130, 89, 22, 255, 131, 91, 24, 255, 131, 94, 18, 255, 138, 97, 21, 255, 142, 95, 30, 255, 141, 95, 32, 255, 136, 101, 21, 255, 139, 99, 29, 255, 139, 99, 29, 255, 138, 101, 31, 255, 138, 103, 28, 255, 142, 103, 35, 255, 147, 103, 35, 255, 150, 106, 27, 255, 148, 107, 25, 255, 149, 109, 35, 255, 148, 108, 36, 255, 151, 111, 26, 255, 151, 109, 37, 255, 153, 111, 29, 255, 142, 111, 35, 255, 148, 125, 39, 255, 157, 126, 37, 255, 160, 116, 33, 255, 164, 118, 29, 255, 167, 119, 23, 255, 173, 120, 29, 255, 171, 121, 25, 255, 164, 118, 25, 255, 153, 112, 36, 255, 144, 109, 27, 255, 147, 105, 34, 255, 149, 102, 28, 255, 149, 101, 29, 255, 146, 101, 19, 255, 144, 103, 18, 255, 135, 99, 14, 255, 137, 99, 20, 255, 141, 97, 15, 255, 146, 98, 16, 255, 148, 94, 13, 255, 150, 92, 11, 255, 152, 92, 20, 255, 154, 92, 25, 255, 149, 93, 18, 255, 140, 91, 13, 255, 137, 89, 12, 255, 136, 87, 19, 255, 136, 88, 18, 255, 140, 85, 8, 255, 143, 85, 6, 255, 135, 86, 8, 255, 131, 83, 9, 255, 137, 85, 15, 255, 136, 85, 12, 255, 142, 83, 9, 255, 140, 82, 6, 255, 138, 85, 9, 255, 140, 86, 10, 255, 140, 85, 10, 255, 142, 83, 12, 255, 141, 82, 7, 255, 148, 88, 9, 255, 154, 87, 10, 255, 159, 86, 14, 255, 160, 86, 9, 255, 163, 94, 12, 255, 164, 94, 15, 255, 169, 95, 5, 255, 174, 98, 6, 255, 175, 103, 5, 255, 179, 103, 3, 255, 185, 105, 4, 255, 188, 105, 6, 255, 180, 96, 4, 255, 170, 89, 6, 255, 161, 86, 4, 255, 151, 83, 3, 255, 149, 79, 6, 255, 149, 80, 5, 255, 151, 84, 7, 255, 152, 78, 3, 255, 154, 79, 4, 255, 162, 76, 2, 255, 168, 70, 9, 255, 155, 61, 7, 255, 138, 52, 5, 255, 127, 48, 3, 255, 128, 52, 3, 255, 129, 52, 1, 255, 126, 47, 6, 255, 115, 43, 8, 255, 103, 40, 2, 255, 98, 35, 7, 255, 99, 37, 10, 255, 97, 35, 8, 255, 102, 39, 4, 255, 117, 50, 2, 255, 123, 52, 6, 255, 119, 47, 3, 255, 104, 43, 7, 255, 107, 41, 4, 255, 112, 38, 4, 255, 112, 38, 8, 255, 118, 42, 4, 255, 120, 46, 6, 255, 142, 65, 5, 255, 150, 69, 9, 255, 128, 58, 3, 255, 127, 69, 5, 255, 127, 71, 10, 255, 119, 71, 10, 255, 115, 68, 12, 255, 130, 75, 21, 255, 151, 93, 17, 255, 157, 100, 22, 255, 158, 95, 15, 255, 135, 78, 4, 255, 131, 72, 13, 255, 145, 78, 17, 255, 155, 87, 17, 255, 126, 63, 12, 255, 102, 36, 10, 255, 102, 37, 4, 255, 100, 36, 1, 255, 103, 40, 5, 255, 102, 40, 4, 255, 106, 40, 7, 255, 106, 35, 9, 255, 101, 36, 7, 255, 101, 36, 8, 255, 101, 36, 8, 255, 3, 3, 13, 255, 1, 0, 12, 255, 2, 1, 14, 255, 3, 4, 15, 255, 1, 3, 14, 255, 0, 2, 14, 255, 0, 2, 14, 255, 2, 3, 16, 255, 2, 4, 17, 255, 0, 1, 18, 255, 1, 2, 18, 255, 3, 2, 13, 255, 1, 1, 5, 255, 1, 2, 7, 255, 1, 2, 8, 255, 1, 2, 8, 255, 2, 3, 8, 255, 2, 3, 9, 255, 1, 1, 12, 255, 3, 4, 15, 255, 1, 1, 11, 255, 1, 0, 9, 255, 2, 1, 7, 255, 0, 0, 5, 255, 0, 0, 6, 255, 2, 1, 4, 255, 0, 0, 1, 255, 0, 0, 2, 255, 0, 0, 2, 255, 1, 1, 3, 255, 0, 0, 2, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 2, 2, 2, 255, 1, 1, 0, 255, 0, 0, 3, 255, 8, 15, 29, 255, 3, 39, 71, 255, 6, 66, 105, 255, 18, 108, 141, 255, 0, 117, 155, 255, 64, 188, 227, 255, 111, 225, 244, 255, 26, 110, 124, 255, 2, 82, 94, 255, 2, 39, 25, 255, 6, 8, 40, 255, 4, 101, 173, 255, 1, 234, 255, 255, 17, 255, 255, 255, 36, 247, 250, 255, 61, 239, 250, 255, 179, 255, 255, 255, 186, 229, 197, 255, 19, 52, 30, 255, 0, 0, 0, 255, 1, 3, 2, 255, 0, 0, 0, 255, 4, 0, 0, 255, 4, 0, 1, 255, 2, 4, 17, 255, 3, 19, 51, 255, 8, 21, 72, 255, 8, 20, 42, 255, 2, 7, 9, 255, 4, 0, 5, 255, 8, 6, 30, 255, 20, 23, 90, 255, 10, 26, 89, 255, 6, 22, 97, 255, 9, 22, 82, 255, 1, 9, 35, 255, 1, 1, 0, 255, 5, 1, 0, 255, 2, 0, 1, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 1, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 2, 1, 0, 255, 3, 3, 1, 255, 6, 2, 0, 255, 10, 4, 1, 255, 11, 4, 1, 255, 7, 3, 0, 255, 8, 4, 1, 255, 9, 3, 0, 255, 8, 3, 1, 255, 8, 4, 1, 255, 7, 3, 0, 255, 7, 3, 0, 255, 8, 4, 1, 255, 9, 3, 2, 255, 13, 6, 1, 255, 14, 7, 2, 255, 13, 7, 3, 255, 13, 10, 10, 255, 7, 7, 2, 255, 8, 5, 6, 255, 17, 16, 17, 255, 30, 25, 22, 255, 148, 130, 70, 255, 155, 103, 22, 255, 74, 36, 10, 255, 37, 19, 0, 255, 24, 15, 6, 255, 28, 19, 3, 255, 25, 18, 7, 255, 22, 18, 10, 255, 40, 25, 1, 255, 77, 65, 16, 255, 84, 104, 38, 255, 77, 99, 28, 255, 72, 89, 27, 255, 68, 79, 16, 255, 69, 74, 15, 255, 64, 69, 16, 255, 59, 65, 22, 255, 61, 63, 14, 255, 60, 61, 3, 255, 58, 58, 6, 255, 52, 49, 6, 255, 53, 46, 7, 255, 56, 48, 6, 255, 58, 45, 6, 255, 58, 43, 10, 255, 54, 37, 14, 255, 53, 36, 7, 255, 54, 42, 0, 255, 51, 37, 8, 255, 55, 42, 8, 255, 54, 44, 5, 255, 71, 53, 8, 255, 92, 61, 12, 255, 93, 57, 7, 255, 85, 52, 6, 255, 76, 50, 7, 255, 81, 51, 5, 255, 80, 48, 9, 255, 72, 45, 8, 255, 69, 44, 9, 255, 67, 42, 12, 255, 72, 44, 9, 255, 69, 40, 3, 255, 65, 38, 10, 255, 67, 44, 5, 255, 72, 46, 7, 255, 85, 54, 10, 255, 90, 54, 7, 255, 94, 54, 5, 255, 96, 54, 10, 255, 90, 55, 6, 255, 87, 56, 5, 255, 87, 53, 6, 255, 118, 52, 10, 255, 123, 48, 6, 255, 79, 35, 7, 255, 85, 39, 5, 255, 79, 42, 11, 255, 73, 44, 15, 255, 82, 47, 5, 255, 85, 45, 5, 255, 85, 38, 6, 255, 80, 43, 9, 255, 80, 46, 3, 255, 75, 45, 9, 255, 82, 44, 9, 255, 84, 47, 3, 255, 85, 45, 10, 255, 85, 49, 9, 255, 85, 51, 5, 255, 94, 51, 6, 255, 99, 54, 9, 255, 91, 55, 9, 255, 92, 52, 8, 255, 100, 52, 10, 255, 99, 53, 9, 255, 104, 57, 8, 255, 109, 60, 3, 255, 114, 63, 5, 255, 127, 75, 13, 255, 135, 83, 9, 255, 159, 95, 8, 255, 149, 89, 2, 255, 147, 89, 9, 255, 140, 84, 6, 255, 135, 79, 0, 255, 134, 75, 12, 255, 126, 72, 11, 255, 122, 71, 5, 255, 119, 69, 6, 255, 118, 69, 7, 255, 115, 69, 7, 255, 106, 64, 7, 255, 103, 63, 11, 255, 100, 62, 9, 255, 100, 60, 9, 255, 104, 64, 15, 255, 104, 63, 8, 255, 106, 63, 7, 255, 111, 65, 7, 255, 104, 67, 9, 255, 99, 60, 13, 255, 95, 60, 16, 255, 96, 65, 3, 255, 100, 61, 9, 255, 101, 62, 13, 255, 97, 61, 9, 255, 102, 61, 14, 255, 101, 63, 16, 255, 93, 64, 11, 255, 97, 65, 8, 255, 100, 60, 14, 255, 96, 63, 9, 255, 96, 63, 13, 255, 93, 64, 19, 255, 96, 64, 18, 255, 101, 62, 16, 255, 105, 69, 10, 255, 109, 71, 8, 255, 113, 72, 10, 255, 107, 66, 15, 255, 106, 67, 18, 255, 106, 66, 19, 255, 105, 65, 16, 255, 109, 71, 5, 255, 110, 69, 14, 255, 110, 68, 25, 255, 111, 69, 22, 255, 104, 66, 16, 255, 101, 67, 22, 255, 102, 69, 20, 255, 107, 73, 14, 255, 106, 72, 12, 255, 105, 70, 16, 255, 106, 72, 10, 255, 110, 75, 12, 255, 108, 71, 16, 255, 108, 73, 22, 255, 111, 73, 24, 255, 113, 74, 15, 255, 110, 74, 12, 255, 111, 75, 14, 255, 111, 75, 14, 255, 118, 78, 17, 255, 116, 78, 12, 255, 111, 79, 23, 255, 111, 84, 23, 255, 120, 85, 13, 255, 134, 84, 21, 255, 134, 83, 20, 255, 133, 81, 18, 255, 133, 84, 17, 255, 129, 84, 18, 255, 129, 84, 17, 255, 137, 86, 19, 255, 138, 86, 19, 255, 132, 88, 19, 255, 128, 94, 15, 255, 130, 91, 22, 255, 133, 94, 31, 255, 136, 95, 29, 255, 136, 92, 30, 255, 139, 95, 32, 255, 141, 102, 24, 255, 136, 97, 26, 255, 140, 100, 37, 255, 138, 102, 24, 255, 141, 102, 35, 255, 143, 103, 29, 255, 149, 107, 22, 255, 144, 103, 23, 255, 142, 108, 29, 255, 146, 109, 36, 255, 152, 103, 47, 255, 151, 107, 32, 255, 151, 111, 35, 255, 151, 110, 31, 255, 147, 111, 31, 255, 147, 116, 35, 255, 155, 121, 39, 255, 160, 116, 33, 255, 170, 119, 22, 255, 170, 123, 23, 255, 173, 120, 33, 255, 176, 121, 23, 255, 172, 120, 23, 255, 158, 112, 32, 255, 150, 110, 19, 255, 151, 109, 19, 255, 155, 105, 31, 255, 149, 101, 26, 255, 147, 98, 27, 255, 148, 100, 14, 255, 141, 98, 25, 255, 136, 98, 25, 255, 144, 102, 20, 255, 151, 98, 16, 255, 148, 100, 25, 255, 148, 96, 18, 255, 155, 91, 15, 255, 157, 94, 12, 255, 149, 92, 15, 255, 144, 90, 15, 255, 137, 91, 4, 255, 136, 88, 13, 255, 134, 85, 16, 255, 141, 89, 10, 255, 141, 85, 21, 255, 140, 85, 17, 255, 140, 87, 10, 255, 142, 85, 11, 255, 141, 84, 7, 255, 142, 86, 7, 255, 142, 84, 11, 255, 144, 88, 11, 255, 142, 85, 6, 255, 142, 83, 4, 255, 144, 84, 5, 255, 143, 87, 7, 255, 152, 91, 14, 255, 162, 93, 14, 255, 161, 89, 7, 255, 163, 85, 7, 255, 166, 94, 9, 255, 168, 94, 7, 255, 169, 89, 1, 255, 174, 94, 4, 255, 172, 100, 7, 255, 179, 100, 2, 255, 189, 107, 8, 255, 185, 103, 3, 255, 180, 98, 0, 255, 177, 98, 5, 255, 167, 90, 4, 255, 161, 83, 2, 255, 155, 84, 2, 255, 156, 84, 7, 255, 191, 98, 10, 255, 194, 96, 3, 255, 189, 90, 3, 255, 187, 81, 2, 255, 172, 70, 5, 255, 149, 54, 4, 255, 123, 48, 8, 255, 117, 46, 6, 255, 129, 57, 0, 255, 130, 58, 8, 255, 112, 44, 10, 255, 96, 38, 6, 255, 93, 36, 6, 255, 94, 35, 4, 255, 91, 33, 7, 255, 98, 41, 8, 255, 110, 51, 3, 255, 119, 50, 6, 255, 116, 44, 1, 255, 108, 37, 6, 255, 102, 37, 5, 255, 109, 40, 5, 255, 123, 44, 7, 255, 124, 49, 9, 255, 120, 43, 4, 255, 135, 54, 1, 255, 162, 76, 8, 255, 140, 62, 4, 255, 128, 66, 9, 255, 119, 66, 2, 255, 118, 62, 5, 255, 129, 72, 18, 255, 143, 87, 15, 255, 150, 93, 23, 255, 154, 94, 26, 255, 158, 100, 24, 255, 154, 96, 25, 255, 142, 85, 15, 255, 157, 96, 24, 255, 163, 95, 20, 255, 154, 86, 14, 255, 137, 74, 13, 255, 112, 52, 6, 255, 100, 43, 6, 255, 103, 42, 7, 255, 108, 40, 6, 255, 91, 30, 7, 255, 87, 30, 9, 255, 99, 34, 5, 255, 93, 30, 7, 255, 99, 39, 11, 255, 104, 34, 6, 255, 3, 3, 16, 255, 1, 1, 15, 255, 0, 3, 16, 255, 0, 2, 15, 255, 0, 1, 13, 255, 0, 3, 16, 255, 1, 2, 14, 255, 0, 2, 12, 255, 0, 3, 14, 255, 2, 4, 17, 255, 0, 1, 15, 255, 2, 2, 14, 255, 4, 4, 13, 255, 2, 2, 9, 255, 3, 3, 12, 255, 2, 3, 13, 255, 2, 2, 12, 255, 2, 2, 12, 255, 1, 1, 13, 255, 1, 3, 15, 255, 1, 2, 15, 255, 1, 1, 12, 255, 0, 0, 8, 255, 1, 1, 7, 255, 2, 1, 8, 255, 0, 0, 5, 255, 1, 1, 3, 255, 1, 1, 4, 255, 1, 1, 4, 255, 1, 1, 3, 255, 0, 0, 2, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 2, 255, 0, 0, 1, 255, 0, 0, 0, 255, 1, 2, 0, 255, 0, 2, 2, 255, 0, 2, 4, 255, 1, 22, 33, 255, 0, 27, 74, 255, 48, 117, 189, 255, 50, 163, 212, 255, 48, 164, 231, 255, 210, 249, 255, 255, 157, 228, 217, 255, 18, 88, 101, 255, 4, 97, 154, 255, 3, 189, 232, 255, 5, 255, 255, 255, 45, 252, 247, 255, 52, 236, 253, 255, 59, 232, 250, 255, 211, 255, 255, 255, 210, 242, 200, 255, 41, 71, 41, 255, 0, 0, 0, 255, 6, 1, 7, 255, 1, 1, 4, 255, 5, 1, 0, 255, 2, 0, 9, 255, 0, 13, 43, 255, 1, 18, 70, 255, 4, 18, 56, 255, 5, 12, 18, 255, 3, 1, 0, 255, 6, 7, 32, 255, 12, 21, 69, 255, 9, 27, 101, 255, 7, 26, 122, 255, 2, 13, 80, 255, 2, 9, 34, 255, 1, 1, 3, 255, 2, 0, 1, 255, 1, 3, 6, 255, 0, 4, 0, 255, 2, 1, 3, 255, 2, 1, 2, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 3, 3, 1, 255, 5, 4, 2, 255, 6, 3, 0, 255, 6, 3, 0, 255, 7, 3, 1, 255, 8, 4, 1, 255, 7, 4, 0, 255, 10, 5, 2, 255, 8, 4, 1, 255, 6, 2, 0, 255, 8, 4, 1, 255, 9, 5, 2, 255, 7, 3, 0, 255, 10, 5, 2, 255, 10, 8, 2, 255, 8, 6, 7, 255, 12, 10, 2, 255, 14, 10, 6, 255, 1, 1, 4, 255, 31, 27, 26, 255, 113, 92, 64, 255, 47, 38, 14, 255, 163, 150, 65, 255, 140, 107, 24, 255, 57, 53, 32, 255, 53, 49, 44, 255, 36, 24, 6, 255, 26, 21, 3, 255, 21, 18, 8, 255, 34, 23, 8, 255, 64, 39, 11, 255, 79, 84, 20, 255, 92, 102, 21, 255, 83, 91, 11, 255, 77, 80, 12, 255, 71, 73, 9, 255, 70, 68, 11, 255, 68, 67, 10, 255, 65, 65, 11, 255, 64, 65, 16, 255, 63, 59, 1, 255, 62, 59, 4, 255, 56, 52, 4, 255, 54, 47, 7, 255, 52, 49, 10, 255, 53, 47, 12, 255, 54, 43, 10, 255, 50, 37, 16, 255, 57, 49, 8, 255, 48, 40, 2, 255, 56, 43, 10, 255, 57, 40, 3, 255, 69, 52, 5, 255, 84, 60, 5, 255, 92, 62, 0, 255, 91, 62, 7, 255, 80, 55, 9, 255, 72, 49, 11, 255, 73, 49, 6, 255, 73, 46, 7, 255, 70, 47, 9, 255, 67, 46, 4, 255, 70, 47, 4, 255, 71, 41, 5, 255, 71, 39, 7, 255, 72, 41, 7, 255, 69, 42, 4, 255, 76, 47, 4, 255, 84, 52, 5, 255, 89, 55, 4, 255, 93, 58, 6, 255, 94, 51, 5, 255, 99, 57, 11, 255, 93, 53, 10, 255, 86, 45, 4, 255, 120, 54, 4, 255, 135, 55, 9, 255, 90, 34, 6, 255, 83, 42, 5, 255, 81, 43, 10, 255, 80, 43, 6, 255, 83, 52, 2, 255, 83, 47, 5, 255, 87, 43, 2, 255, 82, 41, 12, 255, 78, 46, 9, 255, 72, 48, 8, 255, 81, 44, 13, 255, 88, 50, 6, 255, 87, 49, 7, 255, 87, 49, 11, 255, 84, 53, 3, 255, 93, 56, 1, 255, 99, 53, 7, 255, 93, 51, 12, 255, 91, 53, 10, 255, 95, 54, 9, 255, 101, 56, 10, 255, 106, 60, 8, 255, 109, 62, 13, 255, 114, 64, 10, 255, 120, 71, 3, 255, 127, 79, 4, 255, 145, 83, 7, 255, 137, 79, 3, 255, 137, 82, 10, 255, 135, 80, 8, 255, 128, 77, 3, 255, 125, 72, 7, 255, 117, 67, 6, 255, 116, 72, 3, 255, 112, 71, 0, 255, 108, 67, 2, 255, 109, 65, 10, 255, 108, 62, 12, 255, 106, 60, 9, 255, 101, 61, 6, 255, 103, 63, 6, 255, 103, 64, 10, 255, 102, 61, 15, 255, 102, 61, 16, 255, 104, 62, 10, 255, 99, 62, 9, 255, 97, 61, 10, 255, 98, 62, 14, 255, 98, 59, 14, 255, 98, 59, 12, 255, 97, 62, 16, 255, 99, 63, 11, 255, 100, 63, 19, 255, 101, 58, 14, 255, 92, 63, 6, 255, 95, 63, 12, 255, 94, 60, 15, 255, 95, 63, 9, 255, 102, 66, 17, 255, 100, 64, 11, 255, 101, 62, 16, 255, 107, 67, 15, 255, 110, 70, 6, 255, 109, 71, 11, 255, 108, 70, 10, 255, 108, 70, 16, 255, 104, 68, 14, 255, 100, 64, 13, 255, 105, 68, 18, 255, 106, 69, 10, 255, 112, 72, 16, 255, 112, 70, 16, 255, 111, 70, 9, 255, 110, 69, 15, 255, 108, 70, 19, 255, 103, 69, 14, 255, 104, 71, 9, 255, 109, 75, 15, 255, 105, 69, 13, 255, 106, 70, 15, 255, 111, 75, 12, 255, 110, 74, 13, 255, 107, 72, 18, 255, 112, 77, 15, 255, 110, 76, 18, 255, 104, 73, 16, 255, 104, 75, 5, 255, 107, 76, 14, 255, 112, 79, 18, 255, 111, 76, 18, 255, 114, 79, 18, 255, 116, 80, 20, 255, 121, 82, 21, 255, 134, 84, 29, 255, 135, 81, 27, 255, 134, 85, 19, 255, 132, 84, 18, 255, 131, 85, 15, 255, 129, 87, 20, 255, 131, 86, 26, 255, 139, 90, 23, 255, 138, 90, 20, 255, 134, 91, 17, 255, 133, 90, 26, 255, 133, 90, 30, 255, 134, 91, 31, 255, 138, 96, 21, 255, 142, 101, 20, 255, 139, 98, 33, 255, 139, 100, 29, 255, 140, 96, 33, 255, 143, 98, 24, 255, 148, 105, 23, 255, 144, 102, 28, 255, 144, 105, 33, 255, 145, 106, 37, 255, 145, 104, 36, 255, 145, 107, 36, 255, 147, 110, 29, 255, 153, 105, 25, 255, 156, 107, 34, 255, 150, 112, 37, 255, 151, 112, 27, 255, 147, 110, 25, 255, 151, 117, 30, 255, 155, 119, 32, 255, 164, 123, 20, 255, 172, 120, 19, 255, 178, 123, 28, 255, 177, 123, 22, 255, 171, 119, 16, 255, 162, 114, 24, 255, 154, 114, 13, 255, 153, 110, 17, 255, 153, 104, 26, 255, 152, 103, 23, 255, 150, 102, 19, 255, 150, 104, 10, 255, 144, 103, 19, 255, 138, 103, 13, 255, 145, 104, 10, 255, 151, 98, 19, 255, 150, 100, 17, 255, 151, 99, 14, 255, 155, 98, 8, 255, 157, 95, 13, 255, 153, 91, 17, 255, 145, 87, 22, 255, 142, 88, 17, 255, 141, 91, 9, 255, 141, 90, 5, 255, 143, 89, 5, 255, 141, 86, 14, 255, 141, 85, 14, 255, 140, 85, 11, 255, 146, 87, 10, 255, 145, 86, 5, 255, 142, 84, 4, 255, 146, 86, 11, 255, 143, 86, 12, 255, 145, 84, 10, 255, 145, 85, 6, 255, 146, 88, 5, 255, 151, 89, 8, 255, 149, 92, 12, 255, 151, 94, 16, 255, 157, 91, 13, 255, 160, 91, 7, 255, 165, 94, 11, 255, 167, 93, 8, 255, 165, 92, 3, 255, 171, 97, 2, 255, 179, 101, 6, 255, 184, 101, 6, 255, 186, 104, 5, 255, 185, 103, 3, 255, 185, 103, 3, 255, 183, 102, 5, 255, 177, 97, 3, 255, 170, 91, 3, 255, 164, 84, 5, 255, 157, 78, 5, 255, 167, 87, 8, 255, 204, 101, 5, 255, 209, 100, 8, 255, 175, 72, 11, 255, 147, 56, 9, 255, 123, 49, 12, 255, 119, 47, 7, 255, 117, 46, 7, 255, 119, 48, 7, 255, 110, 44, 8, 255, 96, 32, 0, 255, 105, 40, 12, 255, 89, 33, 8, 255, 83, 38, 6, 255, 95, 42, 5, 255, 102, 40, 3, 255, 107, 42, 8, 255, 110, 45, 11, 255, 114, 44, 3, 255, 109, 42, 8, 255, 105, 42, 5, 255, 112, 45, 8, 255, 123, 47, 11, 255, 131, 48, 3, 255, 133, 54, 7, 255, 139, 71, 12, 255, 136, 76, 5, 255, 132, 69, 4, 255, 131, 72, 13, 255, 130, 77, 11, 255, 139, 86, 5, 255, 152, 94, 26, 255, 151, 95, 16, 255, 155, 97, 17, 255, 157, 99, 28, 255, 157, 98, 14, 255, 161, 98, 13, 255, 163, 101, 14, 255, 167, 104, 18, 255, 165, 97, 19, 255, 155, 84, 17, 255, 140, 77, 17, 255, 116, 53, 6, 255, 107, 44, 9, 255, 105, 45, 7, 255, 106, 43, 5, 255, 102, 37, 8, 255, 103, 42, 10, 255, 94, 38, 3, 255, 93, 37, 7, 255, 98, 43, 10, 255, 98, 40, 7, 255, 0, 2, 14, 255, 0, 1, 16, 255, 1, 2, 20, 255, 1, 3, 18, 255, 0, 2, 14, 255, 0, 2, 14, 255, 2, 3, 14, 255, 2, 3, 14, 255, 1, 2, 12, 255, 1, 2, 11, 255, 1, 1, 12, 255, 1, 1, 13, 255, 1, 1, 12, 255, 1, 1, 10, 255, 3, 2, 15, 255, 3, 2, 16, 255, 2, 1, 15, 255, 2, 2, 13, 255, 2, 2, 14, 255, 2, 4, 14, 255, 0, 2, 12, 255, 2, 2, 10, 255, 2, 2, 7, 255, 0, 2, 5, 255, 1, 3, 5, 255, 1, 1, 5, 255, 0, 0, 4, 255, 0, 0, 4, 255, 1, 0, 5, 255, 1, 0, 4, 255, 1, 1, 3, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 2, 255, 2, 0, 1, 255, 2, 1, 0, 255, 2, 3, 0, 255, 2, 0, 0, 255, 2, 9, 17, 255, 0, 27, 65, 255, 64, 135, 188, 255, 48, 166, 218, 255, 77, 223, 253, 255, 198, 255, 249, 255, 199, 254, 254, 255, 101, 214, 238, 255, 2, 224, 251, 255, 14, 243, 250, 255, 69, 240, 246, 255, 46, 234, 249, 255, 41, 224, 249, 255, 211, 251, 255, 255, 204, 234, 192, 255, 35, 64, 33, 255, 0, 0, 1, 255, 2, 3, 4, 255, 1, 1, 3, 255, 3, 0, 5, 255, 3, 7, 42, 255, 3, 14, 61, 255, 7, 21, 56, 255, 5, 15, 22, 255, 2, 0, 2, 255, 1, 3, 15, 255, 6, 17, 67, 255, 13, 32, 103, 255, 8, 25, 93, 255, 6, 18, 69, 255, 7, 11, 48, 255, 2, 6, 15, 255, 3, 0, 0, 255, 0, 1, 1, 255, 1, 1, 4, 255, 3, 0, 4, 255, 4, 0, 4, 255, 1, 1, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 2, 2, 2, 255, 2, 2, 2, 255, 2, 2, 2, 255, 2, 0, 2, 255, 4, 2, 2, 255, 2, 2, 0, 255, 1, 1, 0, 255, 4, 2, 0, 255, 6, 3, 2, 255, 8, 2, 1, 255, 8, 4, 1, 255, 10, 6, 3, 255, 8, 4, 1, 255, 7, 3, 0, 255, 8, 4, 1, 255, 8, 5, 1, 255, 9, 5, 4, 255, 8, 5, 2, 255, 9, 7, 5, 255, 10, 10, 3, 255, 9, 9, 3, 255, 10, 8, 12, 255, 20, 20, 9, 255, 37, 29, 18, 255, 90, 79, 44, 255, 107, 73, 12, 255, 42, 31, 11, 255, 55, 60, 23, 255, 89, 109, 77, 255, 81, 91, 45, 255, 32, 26, 4, 255, 24, 23, 14, 255, 51, 33, 17, 255, 58, 55, 11, 255, 78, 87, 19, 255, 81, 86, 12, 255, 76, 78, 6, 255, 79, 75, 8, 255, 72, 70, 4, 255, 62, 67, 6, 255, 61, 65, 7, 255, 63, 60, 8, 255, 63, 61, 8, 255, 69, 60, 6, 255, 57, 53, 4, 255, 51, 48, 7, 255, 53, 43, 10, 255, 50, 47, 3, 255, 51, 45, 12, 255, 54, 45, 4, 255, 54, 43, 16, 255, 50, 39, 14, 255, 54, 40, 8, 255, 62, 39, 14, 255, 76, 48, 10, 255, 90, 61, 9, 255, 91, 65, 9, 255, 92, 63, 6, 255, 94, 65, 0, 255, 85, 58, 4, 255, 73, 54, 10, 255, 73, 51, 10, 255, 71, 47, 6, 255, 69, 44, 9, 255, 68, 45, 10, 255, 69, 45, 6, 255, 70, 41, 13, 255, 70, 36, 14, 255, 76, 43, 8, 255, 76, 43, 9, 255, 80, 49, 8, 255, 84, 51, 9, 255, 87, 53, 7, 255, 88, 54, 7, 255, 86, 53, 8, 255, 86, 52, 6, 255, 82, 45, 2, 255, 75, 39, 8, 255, 103, 54, 6, 255, 128, 58, 3, 255, 95, 37, 7, 255, 88, 41, 14, 255, 83, 43, 8, 255, 79, 42, 4, 255, 83, 45, 7, 255, 79, 45, 6, 255, 83, 48, 3, 255, 82, 47, 11, 255, 82, 42, 14, 255, 86, 50, 3, 255, 85, 50, 8, 255, 83, 50, 7, 255, 87, 53, 4, 255, 91, 45, 6, 255, 96, 53, 10, 255, 93, 54, 7, 255, 94, 51, 8, 255, 96, 51, 10, 255, 93, 48, 9, 255, 99, 54, 10, 255, 102, 60, 7, 255, 103, 59, 9, 255, 107, 60, 15, 255, 110, 62, 9, 255, 120, 70, 9, 255, 124, 73, 15, 255, 135, 77, 11, 255, 129, 72, 8, 255, 126, 73, 11, 255, 126, 74, 11, 255, 124, 74, 8, 255, 118, 71, 8, 255, 112, 65, 6, 255, 111, 66, 7, 255, 109, 66, 6, 255, 106, 66, 4, 255, 104, 64, 3, 255, 102, 61, 6, 255, 104, 61, 10, 255, 106, 62, 8, 255, 105, 63, 10, 255, 102, 59, 12, 255, 102, 62, 11, 255, 98, 59, 10, 255, 99, 61, 11, 255, 98, 65, 8, 255, 94, 65, 12, 255, 97, 64, 2, 255, 100, 57, 14, 255, 99, 61, 11, 255, 93, 62, 7, 255, 94, 63, 11, 255, 96, 63, 12, 255, 101, 62, 8, 255, 96, 63, 7, 255, 97, 62, 13, 255, 103, 64, 12, 255, 100, 63, 10, 255, 101, 60, 17, 255, 100, 65, 12, 255, 118, 71, 11, 255, 123, 69, 10, 255, 108, 66, 10, 255, 105, 70, 15, 255, 110, 69, 11, 255, 114, 70, 20, 255, 107, 65, 15, 255, 107, 68, 10, 255, 110, 70, 9, 255, 113, 68, 17, 255, 116, 70, 23, 255, 113, 71, 13, 255, 111, 68, 13, 255, 110, 68, 13, 255, 109, 71, 12, 255, 104, 69, 14, 255, 104, 71, 6, 255, 108, 75, 4, 255, 109, 73, 11, 255, 111, 72, 25, 255, 110, 72, 22, 255, 109, 71, 21, 255, 109, 71, 18, 255, 113, 74, 10, 255, 114, 73, 11, 255, 113, 74, 19, 255, 113, 76, 14, 255, 113, 76, 8, 255, 115, 77, 10, 255, 115, 76, 18, 255, 115, 79, 12, 255, 121, 81, 16, 255, 123, 82, 18, 255, 132, 87, 17, 255, 139, 82, 32, 255, 134, 84, 16, 255, 130, 81, 20, 255, 128, 84, 13, 255, 125, 86, 15, 255, 132, 89, 21, 255, 139, 91, 22, 255, 141, 89, 26, 255, 140, 91, 18, 255, 134, 92, 11, 255, 133, 88, 28, 255, 136, 93, 18, 255, 142, 99, 8, 255, 142, 97, 19, 255, 140, 97, 32, 255, 143, 100, 31, 255, 146, 99, 31, 255, 145, 98, 25, 255, 149, 100, 30, 255, 149, 104, 35, 255, 144, 105, 24, 255, 143, 106, 36, 255, 147, 106, 34, 255, 149, 104, 37, 255, 150, 110, 33, 255, 153, 108, 28, 255, 157, 109, 24, 255, 153, 110, 27, 255, 155, 110, 21, 255, 149, 108, 23, 255, 150, 114, 29, 255, 153, 118, 33, 255, 160, 120, 26, 255, 172, 119, 21, 255, 182, 128, 15, 255, 182, 124, 28, 255, 173, 118, 25, 255, 164, 113, 28, 255, 157, 112, 22, 255, 154, 105, 33, 255, 154, 103, 31, 255, 153, 102, 29, 255, 149, 101, 22, 255, 150, 102, 13, 255, 146, 102, 17, 255, 139, 101, 13, 255, 143, 100, 17, 255, 155, 97, 17, 255, 158, 97, 5, 255, 156, 96, 26, 255, 153, 96, 26, 255, 158, 96, 12, 255, 156, 93, 13, 255, 144, 88, 20, 255, 143, 90, 22, 255, 140, 88, 15, 255, 141, 90, 7, 255, 144, 90, 8, 255, 143, 89, 4, 255, 142, 87, 8, 255, 143, 85, 6, 255, 138, 86, 3, 255, 142, 84, 8, 255, 144, 83, 13, 255, 138, 86, 5, 255, 146, 88, 2, 255, 146, 87, 7, 255, 146, 88, 11, 255, 150, 87, 8, 255, 150, 87, 9, 255, 155, 91, 13, 255, 160, 96, 13, 255, 160, 94, 8, 255, 162, 92, 12, 255, 168, 94, 14, 255, 163, 92, 8, 255, 166, 98, 8, 255, 169, 98, 2, 255, 180, 98, 1, 255, 185, 102, 4, 255, 183, 101, 3, 255, 187, 104, 4, 255, 189, 106, 5, 255, 186, 103, 2, 255, 183, 99, 0, 255, 176, 94, 1, 255, 170, 85, 5, 255, 167, 89, 2, 255, 176, 96, 3, 255, 193, 95, 6, 255, 181, 72, 8, 255, 151, 55, 4, 255, 124, 55, 4, 255, 114, 49, 6, 255, 122, 49, 0, 255, 117, 50, 3, 255, 102, 42, 8, 255, 99, 39, 5, 255, 97, 39, 1, 255, 98, 35, 6, 255, 85, 28, 6, 255, 89, 40, 6, 255, 100, 46, 4, 255, 102, 38, 4, 255, 104, 40, 7, 255, 109, 49, 0, 255, 113, 49, 1, 255, 111, 47, 7, 255, 107, 45, 4, 255, 109, 44, 2, 255, 121, 49, 4, 255, 134, 59, 6, 255, 128, 66, 3, 255, 125, 69, 6, 255, 129, 69, 11, 255, 135, 77, 14, 255, 140, 83, 10, 255, 149, 91, 14, 255, 155, 99, 12, 255, 153, 94, 20, 255, 155, 96, 17, 255, 157, 97, 17, 255, 159, 98, 27, 255, 160, 98, 17, 255, 162, 96, 14, 255, 163, 97, 18, 255, 163, 97, 16, 255, 164, 96, 15, 255, 163, 94, 20, 255, 137, 71, 9, 255, 120, 52, 7, 255, 109, 43, 9, 255, 112, 56, 9, 255, 112, 54, 5, 255, 115, 50, 10, 255, 109, 49, 7, 255, 98, 42, 10, 255, 104, 44, 4, 255, 105, 48, 8, 255, 100, 44, 4, 255, 0, 1, 13, 255, 0, 1, 15, 255, 1, 3, 18, 255, 1, 3, 17, 255, 1, 3, 15, 255, 0, 2, 14, 255, 1, 2, 16, 255, 1, 2, 16, 255, 2, 2, 14, 255, 1, 1, 10, 255, 2, 2, 9, 255, 2, 2, 10, 255, 1, 1, 11, 255, 2, 2, 11, 255, 4, 3, 16, 255, 3, 2, 16, 255, 2, 2, 14, 255, 1, 1, 11, 255, 1, 1, 11, 255, 0, 3, 15, 255, 0, 0, 13, 255, 1, 1, 12, 255, 2, 2, 12, 255, 0, 0, 7, 255, 0, 1, 6, 255, 1, 2, 7, 255, 0, 1, 6, 255, 0, 1, 6, 255, 1, 0, 5, 255, 1, 0, 4, 255, 1, 1, 3, 255, 1, 1, 3, 255, 1, 1, 3, 255, 1, 1, 3, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 0, 255, 0, 0, 0, 255, 0, 0, 2, 255, 1, 1, 3, 255, 1, 0, 1, 255, 0, 0, 0, 255, 2, 2, 1, 255, 2, 0, 0, 255, 4, 16, 32, 255, 4, 62, 157, 255, 24, 195, 248, 255, 83, 254, 253, 255, 83, 255, 252, 255, 75, 201, 203, 255, 61, 201, 226, 255, 67, 250, 255, 255, 48, 233, 243, 255, 7, 208, 244, 255, 34, 224, 250, 255, 225, 255, 255, 255, 188, 228, 182, 255, 22, 56, 24, 255, 0, 0, 0, 255, 4, 3, 10, 255, 2, 2, 1, 255, 1, 8, 25, 255, 6, 12, 62, 255, 7, 15, 63, 255, 5, 12, 37, 255, 4, 3, 3, 255, 7, 1, 0, 255, 8, 9, 40, 255, 12, 17, 88, 255, 5, 19, 89, 255, 6, 17, 60, 255, 0, 6, 38, 255, 2, 6, 14, 255, 3, 0, 0, 255, 2, 0, 0, 255, 1, 1, 2, 255, 0, 0, 3, 255, 0, 0, 1, 255, 0, 2, 0, 255, 1, 2, 2, 255, 3, 0, 2, 255, 1, 0, 0, 255, 1, 1, 1, 255, 2, 2, 2, 255, 3, 1, 2, 255, 2, 0, 1, 255, 2, 0, 1, 255, 2, 0, 1, 255, 3, 0, 1, 255, 1, 1, 1, 255, 2, 2, 2, 255, 2, 2, 0, 255, 5, 2, 1, 255, 8, 2, 2, 255, 9, 4, 2, 255, 5, 1, 0, 255, 7, 3, 1, 255, 10, 6, 3, 255, 10, 6, 3, 255, 11, 7, 4, 255, 7, 10, 6, 255, 6, 8, 2, 255, 13, 8, 4, 255, 11, 8, 7, 255, 4, 8, 1, 255, 6, 11, 1, 255, 41, 37, 18, 255, 88, 58, 36, 255, 189, 143, 35, 255, 166, 115, 10, 255, 44, 34, 11, 255, 32, 17, 4, 255, 30, 27, 8, 255, 36, 46, 20, 255, 31, 20, 8, 255, 39, 21, 13, 255, 47, 38, 10, 255, 54, 58, 6, 255, 70, 70, 14, 255, 70, 67, 15, 255, 63, 68, 6, 255, 73, 69, 10, 255, 68, 67, 3, 255, 60, 67, 6, 255, 62, 66, 10, 255, 64, 58, 11, 255, 60, 54, 10, 255, 62, 56, 5, 255, 53, 52, 10, 255, 44, 44, 9, 255, 55, 45, 9, 255, 60, 47, 7, 255, 56, 45, 4, 255, 58, 47, 2, 255, 54, 41, 6, 255, 57, 41, 16, 255, 61, 42, 5, 255, 72, 42, 14, 255, 93, 61, 5, 255, 98, 69, 5, 255, 102, 67, 7, 255, 98, 64, 3, 255, 97, 66, 12, 255, 88, 61, 8, 255, 81, 53, 4, 255, 80, 51, 9, 255, 77, 50, 3, 255, 70, 42, 3, 255, 70, 45, 13, 255, 69, 45, 6, 255, 72, 46, 7, 255, 74, 43, 10, 255, 77, 47, 7, 255, 74, 45, 4, 255, 80, 47, 1, 255, 83, 48, 4, 255, 91, 55, 7, 255, 90, 54, 7, 255, 82, 50, 7, 255, 77, 44, 5, 255, 78, 42, 3, 255, 77, 38, 11, 255, 93, 46, 10, 255, 132, 57, 4, 255, 113, 48, 7, 255, 84, 32, 4, 255, 87, 46, 6, 255, 87, 46, 7, 255, 85, 43, 9, 255, 79, 46, 5, 255, 80, 44, 16, 255, 91, 50, 9, 255, 87, 48, 3, 255, 91, 47, 7, 255, 88, 44, 11, 255, 88, 48, 7, 255, 86, 53, 3, 255, 89, 52, 10, 255, 93, 48, 10, 255, 95, 46, 11, 255, 97, 49, 9, 255, 96, 52, 7, 255, 95, 52, 8, 255, 94, 53, 8, 255, 98, 57, 9, 255, 99, 58, 7, 255, 102, 59, 3, 255, 111, 63, 5, 255, 114, 63, 10, 255, 120, 66, 15, 255, 126, 73, 8, 255, 123, 71, 10, 255, 120, 69, 10, 255, 117, 66, 8, 255, 114, 65, 7, 255, 112, 68, 11, 255, 106, 65, 5, 255, 105, 62, 4, 255, 106, 61, 7, 255, 107, 63, 7, 255, 103, 62, 8, 255, 97, 60, 11, 255, 97, 60, 15, 255, 104, 57, 6, 255, 105, 59, 12, 255, 103, 59, 19, 255, 103, 64, 2, 255, 102, 64, 6, 255, 99, 61, 5, 255, 105, 59, 7, 255, 98, 59, 10, 255, 96, 59, 7, 255, 103, 61, 6, 255, 104, 66, 15, 255, 98, 59, 15, 255, 103, 58, 17, 255, 110, 61, 20, 255, 105, 57, 18, 255, 103, 63, 11, 255, 104, 64, 17, 255, 101, 61, 12, 255, 94, 64, 8, 255, 100, 63, 10, 255, 97, 63, 20, 255, 102, 69, 14, 255, 106, 68, 17, 255, 112, 68, 21, 255, 116, 69, 16, 255, 112, 69, 10, 255, 109, 70, 15, 255, 105, 67, 14, 255, 109, 70, 20, 255, 107, 67, 15, 255, 111, 70, 13, 255, 113, 72, 7, 255, 113, 73, 11, 255, 112, 72, 12, 255, 109, 67, 16, 255, 107, 67, 17, 255, 106, 70, 11, 255, 104, 71, 14, 255, 108, 72, 14, 255, 109, 70, 24, 255, 107, 69, 22, 255, 110, 70, 22, 255, 112, 73, 23, 255, 114, 75, 17, 255, 112, 73, 13, 255, 111, 74, 13, 255, 111, 73, 26, 255, 109, 72, 27, 255, 112, 78, 16, 255, 115, 80, 13, 255, 114, 80, 18, 255, 118, 83, 13, 255, 123, 82, 13, 255, 122, 81, 11, 255, 127, 84, 14, 255, 139, 85, 23, 255, 136, 82, 19, 255, 132, 87, 17, 255, 129, 86, 18, 255, 129, 84, 23, 255, 135, 86, 22, 255, 139, 87, 25, 255, 140, 89, 27, 255, 139, 92, 13, 255, 135, 93, 20, 255, 133, 92, 18, 255, 140, 97, 17, 255, 145, 96, 21, 255, 146, 95, 28, 255, 145, 95, 24, 255, 145, 97, 25, 255, 145, 99, 27, 255, 145, 101, 28, 255, 145, 100, 37, 255, 145, 101, 31, 255, 149, 103, 24, 255, 151, 104, 29, 255, 144, 100, 35, 255, 150, 107, 29, 255, 154, 106, 30, 255, 151, 105, 32, 255, 153, 109, 28, 255, 155, 105, 36, 255, 159, 109, 37, 255, 156, 114, 28, 255, 152, 115, 20, 255, 156, 114, 29, 255, 163, 114, 34, 255, 169, 119, 27, 255, 178, 125, 26, 255, 184, 128, 14, 255, 179, 123, 16, 255, 169, 117, 20, 255, 159, 111, 27, 255, 156, 108, 25, 255, 159, 105, 30, 255, 157, 105, 21, 255, 152, 103, 20, 255, 154, 104, 11, 255, 150, 101, 19, 255, 144, 98, 28, 255, 145, 98, 26, 255, 153, 98, 16, 255, 157, 99, 4, 255, 157, 100, 13, 255, 156, 96, 17, 255, 166, 96, 10, 255, 173, 96, 14, 255, 154, 95, 4, 255, 139, 95, 20, 255, 137, 89, 19, 255, 138, 87, 15, 255, 142, 88, 12, 255, 144, 89, 6, 255, 140, 87, 10, 255, 141, 82, 11, 255, 148, 86, 5, 255, 154, 85, 4, 255, 158, 87, 9, 255, 152, 89, 3, 255, 147, 86, 4, 255, 152, 84, 8, 255, 162, 83, 8, 255, 169, 86, 7, 255, 171, 90, 9, 255, 175, 89, 12, 255, 177, 87, 14, 255, 173, 88, 12, 255, 168, 87, 14, 255, 167, 90, 11, 255, 166, 91, 11, 255, 165, 91, 5, 255, 176, 101, 6, 255, 180, 102, 7, 255, 184, 103, 2, 255, 184, 102, 2, 255, 189, 107, 4, 255, 193, 108, 4, 255, 190, 104, 2, 255, 190, 103, 3, 255, 188, 100, 4, 255, 182, 98, 3, 255, 201, 109, 8, 255, 190, 95, 5, 255, 171, 84, 6, 255, 147, 59, 2, 255, 123, 52, 2, 255, 123, 50, 7, 255, 119, 50, 8, 255, 113, 54, 7, 255, 107, 43, 7, 255, 108, 41, 13, 255, 99, 39, 2, 255, 101, 42, 1, 255, 100, 45, 2, 255, 99, 45, 9, 255, 93, 38, 4, 255, 98, 42, 8, 255, 105, 46, 7, 255, 109, 47, 3, 255, 106, 43, 6, 255, 105, 41, 3, 255, 103, 38, 5, 255, 105, 41, 3, 255, 115, 49, 8, 255, 130, 59, 7, 255, 135, 62, 9, 255, 127, 59, 2, 255, 125, 70, 9, 255, 133, 83, 18, 255, 148, 92, 14, 255, 154, 95, 14, 255, 156, 98, 19, 255, 161, 100, 18, 255, 157, 97, 22, 255, 159, 98, 21, 255, 159, 96, 22, 255, 161, 98, 25, 255, 161, 98, 19, 255, 160, 97, 17, 255, 162, 99, 23, 255, 162, 98, 19, 255, 163, 97, 11, 255, 165, 98, 12, 255, 155, 88, 10, 255, 142, 74, 13, 255, 113, 53, 9, 255, 110, 54, 5, 255, 116, 53, 6, 255, 117, 57, 11, 255, 107, 50, 5, 255, 101, 38, 11, 255, 101, 45, 6, 255, 103, 45, 9, 255, 99, 43, 8, 255, 2, 5, 14, 255, 1, 3, 15, 255, 0, 2, 15, 255, 0, 2, 15, 255, 1, 3, 15, 255, 1, 3, 15, 255, 0, 2, 17, 255, 0, 1, 16, 255, 2, 2, 16, 255, 4, 4, 15, 255, 1, 2, 7, 255, 1, 1, 8, 255, 2, 4, 13, 255, 1, 2, 10, 255, 3, 3, 14, 255, 2, 2, 14, 255, 2, 2, 12, 255, 3, 3, 13, 255, 3, 3, 13, 255, 1, 3, 11, 255, 0, 3, 11, 255, 1, 2, 11, 255, 0, 0, 8, 255, 1, 2, 7, 255, 1, 2, 6, 255, 0, 1, 4, 255, 1, 2, 7, 255, 1, 2, 7, 255, 1, 2, 7, 255, 0, 0, 5, 255, 1, 1, 4, 255, 1, 1, 3, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 2, 255, 0, 0, 2, 255, 1, 1, 2, 255, 0, 0, 2, 255, 0, 1, 3, 255, 2, 1, 0, 255, 2, 7, 54, 255, 1, 154, 231, 255, 48, 255, 255, 255, 40, 242, 247, 255, 44, 197, 207, 255, 21, 149, 160, 255, 0, 168, 216, 255, 12, 234, 251, 255, 6, 223, 250, 255, 33, 221, 250, 255, 232, 255, 255, 255, 180, 221, 174, 255, 19, 48, 22, 255, 0, 0, 0, 255, 5, 2, 1, 255, 6, 2, 26, 255, 6, 14, 64, 255, 3, 25, 71, 255, 5, 19, 36, 255, 0, 5, 0, 255, 3, 1, 4, 255, 2, 6, 31, 255, 3, 16, 82, 255, 11, 19, 102, 255, 6, 14, 69, 255, 0, 3, 16, 255, 3, 2, 0, 255, 4, 2, 4, 255, 3, 0, 1, 255, 1, 2, 3, 255, 2, 0, 6, 255, 1, 0, 1, 255, 2, 0, 5, 255, 0, 1, 2, 255, 0, 2, 1, 255, 0, 2, 2, 255, 0, 1, 1, 255, 2, 3, 2, 255, 3, 3, 3, 255, 3, 1, 2, 255, 2, 0, 1, 255, 2, 0, 1, 255, 2, 0, 1, 255, 2, 2, 1, 255, 4, 1, 2, 255, 3, 1, 2, 255, 3, 3, 3, 255, 3, 2, 2, 255, 4, 1, 0, 255, 6, 2, 1, 255, 7, 4, 1, 255, 9, 5, 2, 255, 8, 4, 1, 255, 8, 4, 1, 255, 10, 6, 3, 255, 10, 7, 4, 255, 9, 6, 2, 255, 12, 8, 3, 255, 11, 8, 6, 255, 9, 7, 8, 255, 9, 10, 2, 255, 16, 14, 6, 255, 35, 24, 23, 255, 44, 45, 45, 255, 36, 60, 68, 255, 68, 106, 110, 255, 91, 126, 113, 255, 76, 90, 48, 255, 27, 20, 11, 255, 12, 17, 12, 255, 26, 20, 16, 255, 35, 22, 9, 255, 30, 35, 6, 255, 48, 47, 15, 255, 64, 60, 7, 255, 68, 67, 3, 255, 66, 64, 7, 255, 68, 60, 11, 255, 66, 56, 4, 255, 65, 58, 4, 255, 63, 57, 4, 255, 61, 50, 5, 255, 55, 46, 15, 255, 51, 50, 11, 255, 52, 51, 2, 255, 51, 46, 9, 255, 54, 47, 5, 255, 60, 42, 11, 255, 57, 45, 6, 255, 54, 44, 9, 255, 50, 40, 10, 255, 49, 38, 11, 255, 62, 46, 14, 255, 84, 62, 3, 255, 93, 63, 4, 255, 99, 68, 4, 255, 99, 66, 8, 255, 97, 62, 8, 255, 94, 62, 5, 255, 93, 61, 7, 255, 84, 52, 3, 255, 77, 47, 11, 255, 71, 42, 5, 255, 69, 42, 6, 255, 66, 42, 8, 255, 69, 45, 6, 255, 74, 47, 2, 255, 75, 47, 4, 255, 71, 44, 7, 255, 75, 46, 6, 255, 81, 46, 3, 255, 85, 46, 5, 255, 85, 47, 6, 255, 80, 44, 3, 255, 84, 44, 4, 255, 77, 43, 9, 255, 76, 40, 9, 255, 78, 39, 10, 255, 83, 42, 9, 255, 124, 55, 10, 255, 136, 57, 10, 255, 79, 26, 5, 255, 90, 44, 18, 255, 104, 51, 3, 255, 89, 47, 5, 255, 88, 47, 4, 255, 91, 50, 4, 255, 95, 47, 6, 255, 90, 47, 2, 255, 92, 51, 6, 255, 83, 49, 3, 255, 86, 48, 6, 255, 93, 50, 9, 255, 85, 47, 10, 255, 90, 47, 10, 255, 93, 50, 11, 255, 91, 54, 15, 255, 91, 52, 13, 255, 91, 52, 6, 255, 93, 54, 14, 255, 94, 51, 19, 255, 98, 58, 5, 255, 100, 61, 1, 255, 102, 58, 9, 255, 107, 57, 12, 255, 113, 64, 3, 255, 117, 70, 7, 255, 115, 67, 9, 255, 114, 65, 7, 255, 115, 66, 9, 255, 112, 66, 14, 255, 109, 66, 11, 255, 100, 63, 10, 255, 101, 63, 11, 255, 105, 62, 7, 255, 109, 60, 9, 255, 109, 60, 14, 255, 101, 58, 12, 255, 100, 59, 10, 255, 108, 64, 10, 255, 105, 63, 5, 255, 101, 59, 11, 255, 103, 62, 6, 255, 103, 61, 16, 255, 101, 59, 8, 255, 97, 60, 7, 255, 93, 54, 8, 255, 118, 66, 21, 255, 128, 68, 10, 255, 123, 62, 6, 255, 119, 64, 6, 255, 110, 59, 14, 255, 110, 64, 17, 255, 122, 63, 14, 255, 110, 65, 10, 255, 102, 58, 12, 255, 105, 63, 13, 255, 112, 68, 9, 255, 117, 63, 7, 255, 109, 64, 14, 255, 108, 66, 14, 255, 109, 67, 14, 255, 108, 70, 1, 255, 115, 71, 11, 255, 118, 71, 18, 255, 110, 68, 14, 255, 111, 69, 17, 255, 109, 68, 17, 255, 109, 66, 14, 255, 114, 69, 7, 255, 117, 72, 7, 255, 115, 70, 13, 255, 112, 71, 20, 255, 109, 69, 20, 255, 108, 68, 20, 255, 108, 71, 16, 255, 107, 71, 21, 255, 110, 72, 8, 255, 110, 71, 15, 255, 111, 74, 8, 255, 116, 77, 10, 255, 113, 74, 10, 255, 115, 74, 11, 255, 114, 75, 10, 255, 111, 77, 15, 255, 108, 73, 26, 255, 105, 72, 17, 255, 105, 72, 15, 255, 106, 75, 8, 255, 113, 81, 13, 255, 120, 83, 10, 255, 120, 80, 20, 255, 125, 83, 18, 255, 130, 84, 24, 255, 136, 85, 25, 255, 138, 83, 25, 255, 134, 89, 12, 255, 131, 87, 18, 255, 133, 84, 21, 255, 134, 84, 10, 255, 137, 87, 21, 255, 142, 90, 30, 255, 139, 92, 12, 255, 136, 92, 17, 255, 136, 94, 22, 255, 139, 93, 23, 255, 147, 98, 22, 255, 152, 101, 20, 255, 150, 100, 15, 255, 148, 100, 12, 255, 145, 99, 22, 255, 143, 101, 23, 255, 143, 103, 24, 255, 146, 102, 23, 255, 150, 99, 31, 255, 159, 106, 28, 255, 152, 106, 27, 255, 147, 108, 34, 255, 153, 107, 31, 255, 156, 104, 29, 255, 155, 108, 32, 255, 157, 112, 28, 255, 160, 110, 23, 255, 158, 112, 32, 255, 155, 112, 19, 255, 161, 117, 10, 255, 167, 119, 24, 255, 170, 122, 23, 255, 175, 121, 22, 255, 182, 125, 16, 255, 182, 126, 14, 255, 172, 120, 16, 255, 161, 112, 27, 255, 157, 112, 13, 255, 159, 108, 15, 255, 158, 104, 22, 255, 154, 104, 24, 255, 158, 105, 11, 255, 155, 104, 9, 255, 148, 99, 19, 255, 148, 98, 17, 255, 155, 96, 19, 255, 159, 98, 12, 255, 158, 98, 7, 255, 158, 94, 13, 255, 165, 97, 9, 255, 171, 97, 13, 255, 161, 93, 10, 255, 151, 93, 15, 255, 155, 93, 11, 255, 158, 90, 7, 255, 158, 87, 15, 255, 158, 91, 9, 255, 152, 91, 9, 255, 143, 85, 18, 255, 164, 82, 10, 255, 170, 83, 1, 255, 171, 84, 1, 255, 175, 90, 7, 255, 158, 91, 11, 255, 163, 88, 8, 255, 171, 83, 4, 255, 170, 82, 4, 255, 171, 77, 4, 255, 167, 79, 6, 255, 166, 82, 7, 255, 170, 81, 4, 255, 174, 84, 11, 255, 173, 88, 12, 255, 171, 92, 12, 255, 169, 91, 5, 255, 175, 99, 5, 255, 178, 103, 6, 255, 186, 106, 5, 255, 192, 109, 7, 255, 194, 111, 5, 255, 194, 110, 3, 255, 196, 109, 3, 255, 197, 107, 5, 255, 193, 105, 3, 255, 190, 102, 3, 255, 187, 102, 2, 255, 186, 100, 2, 255, 177, 79, 6, 255, 129, 50, 4, 255, 119, 48, 8, 255, 114, 47, 8, 255, 121, 43, 8, 255, 111, 42, 6, 255, 106, 36, 13, 255, 107, 42, 5, 255, 101, 48, 1, 255, 111, 52, 10, 255, 122, 67, 15, 255, 112, 63, 5, 255, 103, 49, 4, 255, 105, 52, 5, 255, 113, 56, 7, 255, 115, 48, 11, 255, 109, 47, 11, 255, 113, 51, 11, 255, 111, 48, 6, 255, 112, 50, 1, 255, 119, 53, 11, 255, 132, 61, 11, 255, 133, 67, 11, 255, 139, 80, 13, 255, 148, 90, 15, 255, 157, 96, 22, 255, 158, 95, 13, 255, 161, 98, 16, 255, 163, 101, 19, 255, 163, 101, 19, 255, 160, 98, 14, 255, 157, 94, 14, 255, 160, 95, 15, 255, 161, 96, 15, 255, 161, 97, 15, 255, 159, 98, 18, 255, 159, 96, 17, 255, 159, 96, 16, 255, 159, 93, 15, 255, 163, 97, 20, 255, 163, 95, 18, 255, 157, 89, 12, 255, 127, 69, 12, 255, 107, 50, 6, 255, 109, 46, 4, 255, 112, 54, 9, 255, 110, 56, 9, 255, 100, 39, 3, 255, 95, 43, 4, 255, 101, 42, 5, 255, 98, 43, 4, 255, 2, 2, 12, 255, 1, 2, 13, 255, 1, 1, 12, 255, 1, 2, 13, 255, 1, 3, 15, 255, 1, 3, 19, 255, 1, 3, 17, 255, 1, 3, 16, 255, 2, 3, 18, 255, 5, 4, 17, 255, 2, 2, 12, 255, 0, 1, 11, 255, 0, 2, 16, 255, 0, 2, 15, 255, 1, 1, 15, 255, 2, 2, 15, 255, 2, 2, 12, 255, 3, 3, 13, 255, 2, 2, 15, 255, 0, 3, 10, 255, 0, 3, 9, 255, 2, 3, 10, 255, 0, 1, 8, 255, 2, 2, 8, 255, 1, 2, 5, 255, 0, 0, 4, 255, 1, 2, 7, 255, 1, 2, 7, 255, 1, 2, 7, 255, 0, 1, 6, 255, 0, 1, 5, 255, 1, 2, 4, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 2, 2, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 2, 255, 2, 2, 3, 255, 3, 0, 0, 255, 4, 71, 152, 255, 3, 239, 255, 255, 0, 227, 230, 255, 26, 174, 190, 255, 47, 153, 169, 255, 3, 148, 179, 255, 7, 195, 245, 255, 0, 221, 250, 255, 42, 223, 249, 255, 227, 255, 255, 255, 184, 212, 165, 255, 24, 51, 17, 255, 2, 0, 0, 255, 7, 0, 31, 255, 2, 19, 77, 255, 5, 28, 94, 255, 9, 21, 60, 255, 6, 8, 8, 255, 1, 0, 1, 255, 5, 9, 39, 255, 4, 19, 84, 255, 6, 22, 97, 255, 3, 9, 56, 255, 1, 7, 40, 255, 2, 2, 12, 255, 1, 1, 0, 255, 1, 3, 2, 255, 2, 2, 3, 255, 3, 1, 3, 255, 1, 1, 4, 255, 0, 1, 0, 255, 1, 1, 1, 255, 2, 1, 0, 255, 1, 0, 4, 255, 2, 0, 5, 255, 2, 2, 3, 255, 3, 1, 2, 255, 1, 1, 0, 255, 1, 1, 1, 255, 3, 0, 2, 255, 3, 0, 1, 255, 3, 0, 2, 255, 2, 0, 1, 255, 1, 1, 1, 255, 3, 2, 0, 255, 3, 1, 2, 255, 3, 0, 1, 255, 4, 1, 2, 255, 6, 2, 2, 255, 6, 3, 1, 255, 8, 7, 3, 255, 9, 5, 3, 255, 9, 5, 2, 255, 9, 5, 2, 255, 10, 6, 3, 255, 8, 6, 2, 255, 9, 5, 4, 255, 10, 11, 4, 255, 6, 12, 4, 255, 10, 10, 5, 255, 12, 9, 1, 255, 15, 24, 40, 255, 53, 88, 94, 255, 73, 137, 155, 255, 132, 205, 224, 255, 173, 235, 245, 255, 144, 208, 177, 255, 71, 107, 48, 255, 31, 28, 8, 255, 24, 25, 12, 255, 27, 27, 11, 255, 27, 28, 14, 255, 27, 36, 14, 255, 43, 46, 7, 255, 62, 53, 6, 255, 62, 55, 7, 255, 61, 53, 3, 255, 61, 49, 11, 255, 66, 50, 4, 255, 69, 54, 3, 255, 60, 48, 4, 255, 56, 45, 20, 255, 47, 41, 10, 255, 49, 53, 6, 255, 55, 48, 6, 255, 59, 43, 10, 255, 48, 44, 3, 255, 54, 44, 7, 255, 61, 45, 6, 255, 62, 44, 4, 255, 63, 48, 4, 255, 67, 49, 10, 255, 76, 56, 6, 255, 90, 62, 1, 255, 94, 61, 7, 255, 92, 64, 2, 255, 95, 64, 7, 255, 95, 62, 6, 255, 97, 65, 2, 255, 91, 61, 8, 255, 82, 52, 14, 255, 71, 49, 8, 255, 69, 46, 9, 255, 68, 44, 7, 255, 70, 48, 3, 255, 70, 47, 4, 255, 74, 43, 6, 255, 77, 46, 10, 255, 73, 43, 10, 255, 75, 46, 4, 255, 82, 48, 8, 255, 83, 47, 6, 255, 81, 45, 7, 255, 77, 44, 7, 255, 82, 43, 10, 255, 70, 48, 2, 255, 67, 44, 8, 255, 74, 42, 11, 255, 79, 43, 11, 255, 114, 47, 7, 255, 140, 55, 11, 255, 104, 45, 12, 255, 85, 34, 6, 255, 110, 53, 4, 255, 108, 57, 4, 255, 98, 47, 8, 255, 97, 52, 5, 255, 89, 46, 9, 255, 89, 45, 9, 255, 96, 53, 7, 255, 82, 49, 14, 255, 84, 47, 15, 255, 92, 51, 7, 255, 93, 52, 3, 255, 96, 51, 6, 255, 92, 52, 9, 255, 93, 54, 10, 255, 94, 46, 4, 255, 91, 47, 1, 255, 93, 56, 7, 255, 94, 52, 5, 255, 93, 53, 5, 255, 97, 58, 11, 255, 94, 56, 3, 255, 99, 60, 3, 255, 100, 62, 7, 255, 105, 68, 6, 255, 105, 64, 7, 255, 107, 64, 5, 255, 109, 63, 6, 255, 106, 60, 12, 255, 100, 62, 9, 255, 97, 62, 8, 255, 98, 60, 9, 255, 100, 61, 7, 255, 104, 63, 8, 255, 101, 62, 6, 255, 94, 58, 4, 255, 95, 60, 6, 255, 100, 62, 9, 255, 97, 57, 12, 255, 101, 61, 14, 255, 101, 61, 7, 255, 102, 61, 4, 255, 101, 59, 9, 255, 94, 58, 6, 255, 111, 69, 9, 255, 117, 66, 11, 255, 117, 61, 12, 255, 125, 65, 6, 255, 120, 68, 4, 255, 103, 62, 6, 255, 108, 64, 14, 255, 125, 67, 10, 255, 112, 66, 6, 255, 108, 66, 9, 255, 115, 66, 13, 255, 131, 76, 7, 255, 117, 66, 19, 255, 103, 67, 6, 255, 105, 66, 7, 255, 109, 65, 12, 255, 106, 68, 9, 255, 112, 72, 13, 255, 116, 70, 12, 255, 112, 67, 15, 255, 113, 69, 12, 255, 110, 67, 9, 255, 113, 67, 15, 255, 118, 71, 8, 255, 123, 74, 13, 255, 122, 74, 16, 255, 111, 69, 18, 255, 108, 69, 18, 255, 111, 71, 10, 255, 111, 72, 8, 255, 108, 71, 7, 255, 111, 73, 8, 255, 113, 72, 16, 255, 115, 74, 18, 255, 115, 75, 12, 255, 116, 74, 15, 255, 116, 73, 17, 255, 115, 73, 11, 255, 113, 75, 10, 255, 117, 77, 18, 255, 115, 74, 12, 255, 116, 76, 13, 255, 116, 76, 15, 255, 120, 78, 20, 255, 122, 78, 14, 255, 122, 81, 16, 255, 128, 83, 18, 255, 130, 83, 14, 255, 128, 84, 18, 255, 135, 86, 20, 255, 139, 86, 22, 255, 135, 84, 19, 255, 133, 84, 22, 255, 134, 87, 17, 255, 136, 89, 20, 255, 143, 93, 27, 255, 145, 94, 14, 255, 139, 92, 16, 255, 139, 93, 21, 255, 140, 95, 16, 255, 141, 95, 11, 255, 146, 98, 21, 255, 146, 98, 21, 255, 148, 99, 25, 255, 148, 100, 22, 255, 147, 102, 21, 255, 146, 101, 17, 255, 151, 105, 24, 255, 148, 101, 25, 255, 149, 101, 36, 255, 152, 103, 32, 255, 150, 103, 30, 255, 150, 109, 24, 255, 156, 109, 26, 255, 158, 106, 27, 255, 157, 111, 21, 255, 161, 112, 24, 255, 162, 112, 28, 255, 157, 108, 28, 255, 156, 114, 16, 255, 164, 119, 21, 255, 176, 124, 19, 255, 180, 126, 15, 255, 182, 127, 19, 255, 184, 126, 21, 255, 172, 119, 15, 255, 162, 115, 20, 255, 157, 110, 23, 255, 158, 107, 17, 255, 159, 104, 22, 255, 155, 106, 20, 255, 159, 103, 16, 255, 158, 103, 14, 255, 151, 101, 18, 255, 153, 101, 15, 255, 161, 100, 14, 255, 161, 101, 20, 255, 159, 97, 21, 255, 163, 96, 18, 255, 162, 100, 12, 255, 160, 97, 10, 255, 166, 93, 13, 255, 168, 88, 6, 255, 171, 88, 7, 255, 172, 84, 6, 255, 171, 85, 3, 255, 168, 91, 9, 255, 158, 88, 10, 255, 153, 91, 7, 255, 161, 87, 6, 255, 172, 86, 4, 255, 174, 88, 7, 255, 166, 86, 10, 255, 158, 86, 7, 255, 161, 88, 6, 255, 165, 87, 9, 255, 167, 85, 10, 255, 163, 82, 10, 255, 161, 82, 9, 255, 167, 88, 9, 255, 172, 92, 8, 255, 175, 87, 9, 255, 176, 84, 5, 255, 177, 89, 6, 255, 174, 99, 8, 255, 171, 100, 2, 255, 178, 101, 2, 255, 184, 102, 3, 255, 194, 112, 8, 255, 195, 114, 3, 255, 199, 117, 1, 255, 205, 119, 5, 255, 201, 114, 4, 255, 198, 108, 2, 255, 200, 106, 2, 255, 200, 100, 4, 255, 183, 77, 4, 255, 142, 61, 9, 255, 117, 48, 2, 255, 124, 53, 9, 255, 123, 51, 5, 255, 118, 48, 5, 255, 117, 46, 7, 255, 102, 40, 6, 255, 99, 46, 5, 255, 105, 53, 7, 255, 110, 58, 15, 255, 121, 66, 12, 255, 125, 68, 8, 255, 114, 56, 7, 255, 115, 55, 8, 255, 112, 54, 2, 255, 116, 62, 9, 255, 119, 60, 9, 255, 119, 61, 8, 255, 124, 66, 9, 255, 128, 71, 9, 255, 129, 68, 11, 255, 139, 76, 5, 255, 150, 86, 9, 255, 158, 99, 17, 255, 159, 101, 16, 255, 161, 98, 16, 255, 162, 97, 18, 255, 159, 95, 17, 255, 165, 101, 20, 255, 161, 97, 14, 255, 162, 99, 7, 255, 163, 97, 19, 255, 162, 99, 11, 255, 160, 95, 18, 255, 161, 97, 16, 255, 164, 99, 14, 255, 160, 93, 16, 255, 158, 90, 15, 255, 161, 95, 19, 255, 165, 100, 21, 255, 163, 96, 17, 255, 160, 89, 12, 255, 129, 64, 7, 255, 105, 51, 9, 255, 118, 64, 7, 255, 118, 61, 4, 255, 104, 49, 4, 255, 93, 43, 3, 255, 94, 42, 4, 255, 103, 39, 3, 255, 102, 43, 5, 255, 5, 0, 14, 255, 1, 0, 9, 255, 1, 3, 10, 255, 2, 5, 15, 255, 0, 3, 15, 255, 1, 4, 14, 255, 0, 2, 12, 255, 0, 2, 15, 255, 0, 2, 17, 255, 1, 2, 17, 255, 1, 3, 15, 255, 0, 2, 14, 255, 0, 1, 14, 255, 2, 3, 15, 255, 1, 3, 15, 255, 1, 1, 14, 255, 1, 1, 13, 255, 0, 2, 10, 255, 0, 1, 10, 255, 2, 3, 14, 255, 1, 2, 12, 255, 1, 1, 10, 255, 1, 2, 8, 255, 0, 0, 6, 255, 0, 1, 7, 255, 1, 2, 8, 255, 0, 1, 6, 255, 0, 1, 6, 255, 0, 1, 6, 255, 0, 1, 5, 255, 0, 0, 4, 255, 0, 1, 5, 255, 0, 0, 1, 255, 1, 1, 2, 255, 2, 2, 3, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 0, 255, 4, 2, 0, 255, 3, 0, 8, 255, 8, 113, 167, 255, 3, 203, 216, 255, 30, 151, 185, 255, 53, 150, 172, 255, 11, 154, 175, 255, 2, 162, 210, 255, 0, 217, 251, 255, 53, 241, 249, 255, 233, 255, 255, 255, 187, 203, 149, 255, 61, 40, 8, 255, 9, 0, 5, 255, 3, 5, 83, 255, 3, 59, 205, 255, 34, 56, 109, 255, 24, 34, 46, 255, 4, 1, 2, 255, 2, 6, 19, 255, 6, 18, 71, 255, 11, 18, 98, 255, 8, 16, 75, 255, 2, 7, 26, 255, 0, 0, 2, 255, 2, 1, 0, 255, 2, 0, 0, 255, 0, 0, 1, 255, 0, 1, 1, 255, 0, 1, 3, 255, 0, 2, 1, 255, 0, 0, 0, 255, 1, 1, 0, 255, 0, 0, 0, 255, 0, 1, 0, 255, 1, 1, 1, 255, 2, 1, 2, 255, 3, 0, 2, 255, 5, 2, 2, 255, 1, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 2, 1, 1, 255, 2, 1, 1, 255, 1, 1, 1, 255, 1, 0, 0, 255, 1, 1, 0, 255, 5, 2, 2, 255, 4, 1, 2, 255, 4, 2, 1, 255, 8, 4, 2, 255, 7, 3, 0, 255, 9, 5, 2, 255, 8, 3, 0, 255, 7, 2, 0, 255, 12, 8, 4, 255, 8, 6, 2, 255, 8, 9, 5, 255, 11, 10, 11, 255, 10, 11, 5, 255, 10, 10, 5, 255, 17, 10, 0, 255, 9, 34, 49, 255, 89, 151, 159, 255, 114, 188, 175, 255, 110, 195, 190, 255, 222, 251, 250, 255, 255, 255, 255, 255, 189, 215, 136, 255, 33, 36, 2, 255, 30, 26, 19, 255, 27, 28, 15, 255, 30, 28, 9, 255, 33, 33, 8, 255, 32, 36, 5, 255, 46, 44, 8, 255, 62, 50, 11, 255, 58, 48, 10, 255, 51, 48, 7, 255, 62, 49, 6, 255, 65, 52, 4, 255, 63, 49, 4, 255, 57, 43, 7, 255, 48, 39, 9, 255, 46, 39, 3, 255, 51, 46, 3, 255, 53, 43, 9, 255, 53, 42, 7, 255, 52, 42, 9, 255, 58, 45, 10, 255, 59, 44, 7, 255, 58, 44, 3, 255, 69, 46, 10, 255, 75, 54, 10, 255, 77, 54, 4, 255, 79, 53, 4, 255, 91, 61, 9, 255, 94, 60, 7, 255, 99, 64, 3, 255, 99, 68, 1, 255, 94, 65, 6, 255, 91, 58, 9, 255, 81, 50, 8, 255, 74, 52, 8, 255, 65, 45, 4, 255, 70, 48, 9, 255, 71, 53, 4, 255, 75, 48, 1, 255, 76, 46, 5, 255, 79, 45, 7, 255, 76, 46, 6, 255, 76, 44, 6, 255, 81, 45, 7, 255, 80, 45, 2, 255, 74, 47, 2, 255, 73, 49, 5, 255, 80, 41, 8, 255, 74, 46, 2, 255, 76, 46, 5, 255, 76, 43, 10, 255, 75, 40, 12, 255, 112, 53, 5, 255, 144, 59, 2, 255, 144, 59, 22, 255, 106, 39, 14, 255, 87, 32, 3, 255, 106, 46, 8, 255, 114, 54, 6, 255, 112, 50, 8, 255, 94, 50, 8, 255, 92, 50, 8, 255, 91, 48, 9, 255, 83, 47, 3, 255, 88, 51, 7, 255, 93, 52, 10, 255, 100, 56, 10, 255, 94, 48, 7, 255, 95, 47, 12, 255, 96, 51, 13, 255, 95, 50, 6, 255, 93, 47, 11, 255, 89, 52, 4, 255, 97, 55, 6, 255, 95, 55, 9, 255, 90, 56, 9, 255, 92, 57, 10, 255, 96, 57, 8, 255, 97, 56, 13, 255, 99, 59, 13, 255, 99, 61, 14, 255, 100, 62, 9, 255, 99, 60, 8, 255, 98, 60, 12, 255, 101, 58, 7, 255, 102, 58, 6, 255, 98, 58, 7, 255, 95, 59, 10, 255, 95, 60, 8, 255, 95, 60, 5, 255, 98, 59, 6, 255, 104, 61, 10, 255, 102, 61, 8, 255, 100, 59, 11, 255, 97, 58, 7, 255, 99, 59, 9, 255, 100, 60, 8, 255, 103, 62, 15, 255, 125, 66, 7, 255, 125, 67, 2, 255, 113, 60, 14, 255, 107, 59, 14, 255, 106, 59, 4, 255, 107, 62, 15, 255, 110, 65, 13, 255, 111, 61, 11, 255, 104, 62, 13, 255, 98, 59, 10, 255, 106, 64, 10, 255, 109, 63, 12, 255, 106, 63, 14, 255, 99, 64, 21, 255, 105, 68, 8, 255, 102, 68, 17, 255, 103, 67, 16, 255, 110, 67, 21, 255, 114, 68, 17, 255, 115, 72, 11, 255, 111, 71, 12, 255, 109, 74, 9, 255, 111, 71, 14, 255, 112, 72, 17, 255, 114, 71, 12, 255, 122, 75, 9, 255, 123, 75, 13, 255, 121, 69, 10, 255, 112, 70, 14, 255, 109, 73, 14, 255, 112, 70, 12, 255, 108, 69, 17, 255, 109, 69, 16, 255, 114, 73, 13, 255, 111, 72, 16, 255, 112, 72, 18, 255, 118, 74, 16, 255, 120, 74, 15, 255, 119, 76, 8, 255, 117, 72, 14, 255, 113, 74, 13, 255, 110, 77, 16, 255, 114, 77, 21, 255, 115, 76, 13, 255, 119, 78, 16, 255, 120, 79, 13, 255, 123, 79, 17, 255, 124, 84, 18, 255, 118, 86, 9, 255, 120, 86, 15, 255, 134, 86, 24, 255, 143, 89, 16, 255, 138, 85, 6, 255, 140, 84, 22, 255, 137, 89, 26, 255, 137, 90, 21, 255, 141, 91, 18, 255, 151, 96, 13, 255, 144, 94, 22, 255, 144, 97, 17, 255, 143, 97, 10, 255, 144, 93, 22, 255, 145, 93, 36, 255, 144, 97, 21, 255, 146, 97, 24, 255, 144, 99, 22, 255, 147, 102, 19, 255, 151, 103, 19, 255, 151, 104, 24, 255, 150, 103, 18, 255, 148, 104, 20, 255, 146, 106, 19, 255, 149, 103, 26, 255, 152, 105, 24, 255, 153, 110, 16, 255, 157, 111, 18, 255, 160, 107, 30, 255, 163, 110, 28, 255, 164, 111, 26, 255, 160, 109, 27, 255, 154, 110, 19, 255, 161, 117, 14, 255, 173, 120, 18, 255, 186, 127, 16, 255, 187, 128, 14, 255, 183, 123, 9, 255, 174, 118, 11, 255, 164, 116, 16, 255, 159, 114, 16, 255, 159, 107, 24, 255, 160, 110, 16, 255, 158, 106, 12, 255, 161, 106, 8, 255, 161, 105, 12, 255, 156, 104, 13, 255, 153, 101, 19, 255, 158, 102, 12, 255, 161, 99, 23, 255, 164, 96, 22, 255, 166, 98, 8, 255, 163, 100, 7, 255, 161, 97, 9, 255, 167, 95, 17, 255, 172, 93, 11, 255, 171, 92, 11, 255, 165, 91, 3, 255, 162, 89, 8, 255, 157, 88, 9, 255, 148, 88, 10, 255, 146, 86, 5, 255, 147, 88, 11, 255, 160, 89, 9, 255, 165, 89, 7, 255, 152, 90, 8, 255, 159, 88, 5, 255, 161, 86, 13, 255, 159, 88, 11, 255, 165, 93, 14, 255, 170, 97, 15, 255, 173, 96, 7, 255, 171, 93, 10, 255, 167, 93, 8, 255, 169, 91, 5, 255, 171, 84, 6, 255, 173, 85, 2, 255, 181, 98, 5, 255, 179, 95, 3, 255, 181, 90, 1, 255, 182, 89, 0, 255, 192, 103, 1, 255, 200, 114, 2, 255, 199, 115, 2, 255, 200, 118, 5, 255, 207, 117, 1, 255, 204, 96, 0, 255, 188, 87, 2, 255, 159, 66, 7, 255, 139, 51, 7, 255, 135, 62, 7, 255, 121, 57, 4, 255, 119, 53, 0, 255, 120, 48, 2, 255, 113, 51, 7, 255, 105, 41, 6, 255, 96, 44, 5, 255, 98, 50, 5, 255, 103, 50, 8, 255, 101, 52, 9, 255, 108, 54, 5, 255, 116, 53, 14, 255, 117, 50, 11, 255, 116, 51, 3, 255, 120, 63, 8, 255, 122, 72, 7, 255, 127, 71, 4, 255, 133, 75, 8, 255, 141, 83, 15, 255, 151, 89, 15, 255, 153, 87, 13, 255, 155, 96, 9, 255, 163, 100, 5, 255, 163, 99, 14, 255, 161, 100, 18, 255, 156, 98, 13, 255, 160, 99, 15, 255, 164, 100, 15, 255, 161, 98, 15, 255, 157, 94, 13, 255, 158, 94, 14, 255, 164, 95, 22, 255, 165, 94, 4, 255, 163, 91, 12, 255, 158, 92, 13, 255, 155, 88, 5, 255, 157, 90, 13, 255, 154, 88, 18, 255, 157, 92, 10, 255, 159, 94, 8, 255, 163, 96, 17, 255, 151, 83, 12, 255, 135, 73, 7, 255, 135, 78, 11, 255, 144, 87, 17, 255, 133, 73, 4, 255, 112, 57, 0, 255, 93, 41, 2, 255, 88, 35, 6, 255, 86, 36, 7, 255, 97, 43, 4, 255, 1, 2, 14, 255, 1, 2, 11, 255, 0, 3, 12, 255, 3, 3, 17, 255, 2, 1, 15, 255, 3, 2, 14, 255, 2, 3, 15, 255, 1, 3, 16, 255, 1, 3, 16, 255, 2, 2, 16, 255, 2, 2, 13, 255, 2, 2, 12, 255, 0, 3, 11, 255, 3, 3, 11, 255, 3, 3, 12, 255, 2, 2, 12, 255, 4, 4, 14, 255, 1, 3, 12, 255, 0, 4, 11, 255, 2, 2, 13, 255, 1, 1, 11, 255, 1, 1, 8, 255, 1, 2, 7, 255, 0, 1, 6, 255, 1, 2, 7, 255, 2, 3, 8, 255, 1, 2, 7, 255, 1, 2, 7, 255, 1, 2, 7, 255, 2, 3, 7, 255, 1, 2, 6, 255, 1, 2, 6, 255, 0, 0, 4, 255, 0, 0, 2, 255, 1, 1, 3, 255, 1, 1, 3, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 2, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 2, 1, 3, 255, 2, 0, 0, 255, 2, 51, 86, 255, 23, 133, 181, 255, 48, 159, 186, 255, 16, 154, 182, 255, 0, 163, 210, 255, 0, 214, 247, 255, 100, 250, 252, 255, 255, 255, 255, 255, 145, 186, 144, 255, 19, 35, 13, 255, 15, 0, 30, 255, 3, 0, 27, 255, 4, 91, 191, 255, 7, 81, 157, 255, 25, 9, 4, 255, 9, 2, 0, 255, 0, 9, 47, 255, 7, 24, 109, 255, 4, 15, 80, 255, 1, 8, 32, 255, 1, 3, 2, 255, 2, 0, 0, 255, 3, 0, 4, 255, 1, 1, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 0, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 2, 0, 1, 255, 2, 0, 1, 255, 2, 1, 1, 255, 2, 1, 1, 255, 4, 0, 1, 255, 4, 2, 3, 255, 2, 2, 1, 255, 3, 2, 0, 255, 8, 4, 1, 255, 4, 2, 1, 255, 7, 4, 2, 255, 10, 6, 3, 255, 8, 5, 1, 255, 10, 8, 1, 255, 14, 13, 6, 255, 13, 10, 6, 255, 11, 13, 12, 255, 18, 25, 16, 255, 18, 41, 43, 255, 37, 111, 120, 255, 175, 229, 192, 255, 173, 206, 190, 255, 161, 225, 228, 255, 240, 255, 255, 255, 254, 255, 245, 255, 103, 138, 74, 255, 16, 26, 12, 255, 35, 34, 13, 255, 31, 29, 14, 255, 26, 30, 10, 255, 26, 27, 12, 255, 43, 38, 12, 255, 48, 42, 6, 255, 49, 42, 8, 255, 57, 48, 7, 255, 60, 42, 6, 255, 65, 47, 2, 255, 57, 45, 1, 255, 53, 37, 1, 255, 59, 40, 5, 255, 51, 38, 2, 255, 41, 39, 6, 255, 45, 40, 3, 255, 46, 40, 8, 255, 47, 45, 4, 255, 54, 43, 5, 255, 55, 42, 4, 255, 55, 46, 4, 255, 65, 49, 4, 255, 67, 48, 6, 255, 79, 53, 9, 255, 76, 54, 3, 255, 81, 56, 8, 255, 88, 63, 8, 255, 98, 63, 10, 255, 101, 62, 2, 255, 100, 67, 1, 255, 98, 64, 2, 255, 96, 60, 6, 255, 88, 59, 8, 255, 75, 52, 5, 255, 69, 47, 5, 255, 76, 49, 10, 255, 76, 47, 7, 255, 83, 48, 5, 255, 78, 48, 6, 255, 80, 47, 5, 255, 80, 46, 5, 255, 71, 44, 12, 255, 64, 46, 9, 255, 74, 50, 3, 255, 81, 47, 5, 255, 77, 41, 10, 255, 82, 40, 6, 255, 76, 42, 7, 255, 80, 46, 3, 255, 79, 46, 4, 255, 79, 43, 6, 255, 102, 51, 5, 255, 134, 56, 2, 255, 149, 63, 7, 255, 153, 67, 3, 255, 116, 49, 7, 255, 79, 26, 13, 255, 88, 39, 12, 255, 114, 46, 3, 255, 127, 52, 9, 255, 113, 56, 6, 255, 105, 58, 8, 255, 98, 48, 12, 255, 103, 50, 8, 255, 101, 55, 4, 255, 105, 57, 5, 255, 101, 57, 6, 255, 102, 55, 1, 255, 97, 52, 4, 255, 90, 49, 8, 255, 90, 50, 11, 255, 90, 51, 14, 255, 93, 49, 18, 255, 95, 52, 12, 255, 95, 51, 4, 255, 96, 55, 12, 255, 94, 57, 6, 255, 97, 59, 9, 255, 104, 55, 9, 255, 98, 57, 8, 255, 102, 57, 9, 255, 107, 54, 13, 255, 103, 55, 13, 255, 102, 59, 7, 255, 100, 60, 11, 255, 96, 58, 12, 255, 96, 58, 7, 255, 97, 58, 6, 255, 101, 58, 14, 255, 104, 59, 11, 255, 111, 63, 5, 255, 114, 62, 6, 255, 107, 66, 6, 255, 106, 65, 6, 255, 106, 65, 5, 255, 103, 61, 4, 255, 114, 61, 6, 255, 127, 68, 4, 255, 116, 64, 2, 255, 108, 61, 9, 255, 107, 64, 7, 255, 107, 65, 5, 255, 105, 66, 12, 255, 104, 61, 11, 255, 107, 59, 13, 255, 104, 61, 19, 255, 104, 63, 20, 255, 107, 67, 11, 255, 106, 66, 5, 255, 102, 61, 8, 255, 111, 67, 12, 255, 112, 67, 13, 255, 105, 67, 16, 255, 108, 66, 12, 255, 113, 67, 9, 255, 109, 71, 7, 255, 111, 72, 6, 255, 117, 72, 11, 255, 109, 70, 10, 255, 112, 73, 18, 255, 110, 70, 12, 255, 116, 71, 11, 255, 122, 76, 8, 255, 123, 73, 7, 255, 121, 71, 15, 255, 111, 69, 15, 255, 111, 72, 12, 255, 117, 71, 12, 255, 114, 71, 15, 255, 116, 71, 23, 255, 112, 72, 16, 255, 115, 73, 9, 255, 121, 77, 11, 255, 117, 76, 19, 255, 114, 77, 15, 255, 115, 75, 10, 255, 113, 74, 16, 255, 110, 76, 11, 255, 109, 78, 14, 255, 109, 75, 27, 255, 117, 77, 14, 255, 115, 82, 9, 255, 118, 84, 11, 255, 125, 82, 15, 255, 128, 81, 18, 255, 129, 84, 18, 255, 132, 88, 18, 255, 137, 83, 15, 255, 139, 86, 16, 255, 135, 87, 17, 255, 136, 85, 19, 255, 136, 88, 20, 255, 140, 93, 14, 255, 141, 92, 27, 255, 145, 92, 19, 255, 148, 92, 17, 255, 148, 100, 14, 255, 143, 99, 7, 255, 143, 97, 12, 255, 149, 101, 23, 255, 147, 97, 20, 255, 149, 96, 26, 255, 146, 99, 29, 255, 147, 100, 18, 255, 151, 99, 24, 255, 150, 103, 22, 255, 149, 102, 25, 255, 150, 102, 25, 255, 149, 107, 25, 255, 147, 104, 26, 255, 151, 103, 26, 255, 158, 108, 27, 255, 158, 108, 23, 255, 164, 105, 29, 255, 175, 113, 23, 255, 178, 116, 21, 255, 175, 115, 26, 255, 166, 111, 16, 255, 170, 116, 7, 255, 174, 112, 9, 255, 178, 113, 10, 255, 188, 125, 18, 255, 189, 125, 21, 255, 178, 117, 13, 255, 166, 115, 23, 255, 160, 114, 16, 255, 162, 110, 11, 255, 164, 108, 18, 255, 167, 107, 22, 255, 167, 106, 18, 255, 162, 105, 6, 255, 161, 107, 16, 255, 155, 103, 23, 255, 161, 102, 14, 255, 164, 103, 6, 255, 165, 102, 7, 255, 164, 100, 11, 255, 166, 101, 18, 255, 166, 98, 18, 255, 165, 95, 9, 255, 167, 98, 5, 255, 164, 96, 9, 255, 162, 93, 8, 255, 152, 89, 3, 255, 146, 88, 9, 255, 151, 89, 16, 255, 154, 91, 12, 255, 154, 89, 10, 255, 167, 89, 8, 255, 172, 90, 8, 255, 153, 92, 6, 255, 158, 93, 3, 255, 154, 89, 6, 255, 154, 89, 14, 255, 164, 94, 7, 255, 172, 96, 5, 255, 175, 95, 8, 255, 170, 96, 7, 255, 169, 96, 16, 255, 175, 91, 8, 255, 175, 89, 4, 255, 180, 91, 4, 255, 182, 88, 1, 255, 184, 86, 2, 255, 186, 81, 6, 255, 188, 84, 10, 255, 184, 86, 2, 255, 194, 100, 3, 255, 203, 113, 5, 255, 205, 114, 3, 255, 176, 84, 10, 255, 142, 54, 9, 255, 127, 51, 6, 255, 118, 50, 9, 255, 133, 52, 2, 255, 132, 56, 0, 255, 124, 53, 3, 255, 125, 51, 9, 255, 111, 46, 4, 255, 111, 47, 6, 255, 106, 44, 6, 255, 100, 48, 3, 255, 103, 54, 4, 255, 100, 48, 6, 255, 108, 51, 14, 255, 110, 52, 6, 255, 115, 57, 7, 255, 128, 69, 10, 255, 132, 73, 4, 255, 140, 79, 17, 255, 144, 83, 15, 255, 150, 88, 6, 255, 158, 94, 10, 255, 159, 97, 11, 255, 161, 94, 7, 255, 166, 92, 6, 255, 167, 98, 8, 255, 163, 98, 12, 255, 165, 101, 12, 255, 164, 99, 9, 255, 165, 100, 11, 255, 165, 99, 15, 255, 164, 98, 18, 255, 162, 96, 9, 255, 159, 94, 16, 255, 155, 93, 17, 255, 159, 93, 16, 255, 162, 91, 9, 255, 161, 89, 6, 255, 150, 80, 7, 255, 144, 77, 9, 255, 149, 86, 10, 255, 154, 92, 18, 255, 156, 91, 11, 255, 165, 97, 14, 255, 162, 92, 19, 255, 158, 89, 13, 255, 152, 85, 13, 255, 152, 86, 8, 255, 153, 86, 9, 255, 147, 78, 16, 255, 136, 73, 16, 255, 121, 62, 7, 255, 89, 37, 2, 255, 56, 26, 5, 255, 46, 24, 5, 255, 0, 3, 12, 255, 1, 3, 15, 255, 3, 1, 16, 255, 2, 2, 16, 255, 0, 1, 15, 255, 1, 6, 22, 255, 2, 5, 21, 255, 2, 3, 17, 255, 3, 3, 15, 255, 3, 3, 9, 255, 3, 2, 7, 255, 2, 1, 9, 255, 2, 1, 10, 255, 2, 3, 7, 255, 1, 2, 7, 255, 1, 1, 7, 255, 3, 3, 10, 255, 3, 3, 12, 255, 3, 3, 12, 255, 2, 2, 10, 255, 1, 1, 9, 255, 1, 1, 8, 255, 1, 2, 7, 255, 1, 2, 7, 255, 0, 1, 6, 255, 0, 1, 6, 255, 0, 1, 7, 255, 1, 2, 7, 255, 0, 0, 5, 255, 0, 2, 7, 255, 0, 2, 7, 255, 0, 0, 5, 255, 2, 0, 6, 255, 1, 0, 4, 255, 0, 0, 2, 255, 0, 0, 2, 255, 1, 1, 3, 255, 1, 1, 2, 255, 2, 2, 3, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 2, 1, 1, 255, 1, 0, 0, 255, 7, 46, 104, 255, 10, 142, 178, 255, 0, 155, 184, 255, 41, 164, 227, 255, 71, 219, 248, 255, 116, 255, 255, 255, 250, 255, 253, 255, 122, 176, 144, 255, 0, 25, 50, 255, 6, 12, 65, 255, 1, 5, 4, 255, 4, 32, 89, 255, 2, 115, 229, 255, 7, 22, 33, 255, 3, 0, 0, 255, 1, 12, 91, 255, 5, 21, 114, 255, 4, 10, 46, 255, 1, 4, 15, 255, 0, 2, 0, 255, 1, 0, 0, 255, 2, 0, 1, 255, 2, 3, 0, 255, 1, 1, 2, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 2, 0, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 2, 0, 1, 255, 3, 1, 2, 255, 3, 1, 2, 255, 3, 1, 2, 255, 3, 1, 2, 255, 2, 0, 1, 255, 2, 0, 1, 255, 3, 1, 2, 255, 5, 1, 2, 255, 3, 1, 2, 255, 2, 2, 2, 255, 4, 3, 1, 255, 3, 2, 0, 255, 8, 3, 4, 255, 12, 6, 7, 255, 9, 5, 2, 255, 12, 10, 3, 255, 12, 12, 2, 255, 15, 14, 5, 255, 18, 24, 20, 255, 22, 41, 30, 255, 38, 69, 54, 255, 41, 106, 98, 255, 57, 135, 126, 255, 107, 177, 169, 255, 151, 208, 198, 255, 187, 240, 238, 255, 205, 254, 251, 255, 160, 221, 188, 255, 66, 117, 69, 255, 30, 37, 13, 255, 30, 32, 16, 255, 32, 29, 11, 255, 35, 33, 11, 255, 31, 32, 5, 255, 37, 39, 9, 255, 39, 41, 7, 255, 52, 44, 6, 255, 59, 44, 3, 255, 62, 41, 5, 255, 70, 41, 4, 255, 61, 44, 5, 255, 44, 36, 4, 255, 47, 36, 6, 255, 47, 33, 5, 255, 36, 35, 5, 255, 39, 35, 3, 255, 50, 38, 8, 255, 49, 40, 6, 255, 59, 39, 8, 255, 60, 39, 7, 255, 62, 50, 5, 255, 69, 57, 4, 255, 70, 53, 6, 255, 67, 51, 6, 255, 77, 58, 4, 255, 80, 56, 13, 255, 85, 60, 6, 255, 91, 62, 6, 255, 100, 57, 6, 255, 102, 60, 4, 255, 102, 64, 3, 255, 99, 64, 9, 255, 89, 56, 12, 255, 76, 52, 2, 255, 74, 53, 3, 255, 76, 47, 6, 255, 81, 45, 7, 255, 85, 47, 8, 255, 71, 45, 7, 255, 71, 44, 6, 255, 75, 43, 3, 255, 69, 44, 6, 255, 68, 43, 4, 255, 73, 46, 8, 255, 73, 45, 12, 255, 69, 37, 10, 255, 83, 42, 11, 255, 75, 42, 17, 255, 74, 45, 18, 255, 71, 43, 8, 255, 76, 45, 6, 255, 80, 45, 6, 255, 109, 49, 5, 255, 136, 55, 5, 255, 153, 65, 5, 255, 167, 69, 2, 255, 156, 64, 3, 255, 128, 63, 8, 255, 116, 57, 7, 255, 116, 53, 8, 255, 114, 48, 9, 255, 114, 56, 4, 255, 124, 56, 9, 255, 124, 58, 10, 255, 121, 56, 4, 255, 127, 53, 6, 255, 125, 53, 7, 255, 119, 54, 6, 255, 124, 57, 10, 255, 125, 56, 8, 255, 118, 56, 5, 255, 108, 54, 11, 255, 96, 54, 15, 255, 96, 54, 11, 255, 97, 52, 4, 255, 100, 56, 7, 255, 95, 55, 6, 255, 96, 55, 14, 255, 99, 56, 6, 255, 98, 59, 5, 255, 101, 55, 10, 255, 107, 52, 10, 255, 105, 56, 13, 255, 99, 58, 7, 255, 100, 60, 5, 255, 104, 60, 12, 255, 109, 60, 12, 255, 108, 61, 3, 255, 103, 55, 5, 255, 100, 57, 12, 255, 103, 62, 9, 255, 102, 61, 1, 255, 103, 69, 8, 255, 110, 64, 10, 255, 109, 61, 9, 255, 108, 64, 12, 255, 115, 61, 12, 255, 116, 64, 8, 255, 111, 63, 9, 255, 108, 62, 10, 255, 109, 62, 13, 255, 108, 64, 12, 255, 104, 65, 7, 255, 105, 64, 9, 255, 105, 64, 14, 255, 104, 63, 16, 255, 106, 66, 14, 255, 102, 61, 7, 255, 107, 67, 10, 255, 108, 72, 9, 255, 108, 66, 17, 255, 107, 59, 26, 255, 107, 64, 11, 255, 110, 69, 17, 255, 111, 67, 10, 255, 112, 70, 18, 255, 117, 72, 9, 255, 121, 71, 8, 255, 116, 68, 17, 255, 109, 70, 16, 255, 111, 67, 10, 255, 118, 70, 6, 255, 119, 76, 8, 255, 117, 76, 9, 255, 115, 76, 15, 255, 117, 74, 15, 255, 116, 74, 13, 255, 111, 73, 11, 255, 112, 72, 10, 255, 115, 75, 12, 255, 119, 73, 14, 255, 123, 74, 12, 255, 121, 76, 11, 255, 121, 79, 10, 255, 118, 83, 9, 255, 112, 73, 13, 255, 117, 73, 17, 255, 114, 79, 14, 255, 117, 77, 9, 255, 118, 74, 15, 255, 117, 78, 14, 255, 123, 75, 21, 255, 122, 80, 18, 255, 120, 85, 19, 255, 127, 83, 16, 255, 131, 83, 16, 255, 133, 89, 14, 255, 130, 88, 12, 255, 154, 88, 22, 255, 164, 94, 20, 255, 143, 88, 16, 255, 138, 85, 24, 255, 140, 90, 20, 255, 149, 91, 28, 255, 151, 94, 19, 255, 148, 96, 18, 255, 147, 97, 15, 255, 145, 96, 12, 255, 148, 96, 17, 255, 151, 100, 23, 255, 144, 99, 16, 255, 148, 97, 17, 255, 148, 98, 23, 255, 150, 99, 22, 255, 155, 102, 24, 255, 151, 105, 31, 255, 148, 105, 22, 255, 149, 101, 18, 255, 151, 102, 27, 255, 151, 108, 23, 255, 146, 107, 13, 255, 156, 106, 36, 255, 158, 104, 31, 255, 159, 111, 19, 255, 174, 111, 16, 255, 180, 113, 23, 255, 180, 113, 26, 255, 174, 110, 20, 255, 176, 111, 11, 255, 174, 102, 12, 255, 175, 98, 28, 255, 185, 119, 21, 255, 188, 126, 11, 255, 182, 122, 5, 255, 169, 117, 19, 255, 161, 111, 30, 255, 164, 109, 19, 255, 162, 109, 16, 255, 162, 109, 6, 255, 167, 110, 11, 255, 165, 107, 11, 255, 167, 107, 19, 255, 164, 103, 21, 255, 162, 102, 4, 255, 167, 105, 9, 255, 168, 101, 26, 255, 166, 97, 23, 255, 165, 99, 9, 255, 166, 99, 11, 255, 165, 98, 13, 255, 163, 96, 10, 255, 158, 93, 7, 255, 152, 96, 5, 255, 152, 95, 11, 255, 163, 93, 5, 255, 173, 92, 3, 255, 173, 86, 1, 255, 172, 84, 5, 255, 176, 82, 4, 255, 177, 88, 4, 255, 163, 92, 9, 255, 159, 90, 10, 255, 158, 90, 9, 255, 167, 95, 13, 255, 174, 96, 14, 255, 174, 94, 8, 255, 172, 96, 10, 255, 172, 97, 15, 255, 173, 100, 5, 255, 180, 99, 8, 255, 180, 93, 4, 255, 182, 87, 1, 255, 180, 83, 3, 255, 181, 85, 5, 255, 187, 93, 5, 255, 181, 89, 5, 255, 183, 78, 9, 255, 188, 89, 3, 255, 204, 99, 4, 255, 181, 79, 2, 255, 128, 54, 6, 255, 124, 60, 3, 255, 124, 58, 4, 255, 127, 56, 6, 255, 130, 58, 1, 255, 122, 54, 3, 255, 125, 54, 6, 255, 123, 53, 10, 255, 119, 51, 5, 255, 111, 46, 6, 255, 99, 46, 1, 255, 100, 51, 2, 255, 103, 55, 8, 255, 102, 49, 6, 255, 110, 50, 6, 255, 111, 52, 4, 255, 114, 54, 10, 255, 118, 58, 8, 255, 138, 78, 14, 255, 148, 85, 13, 255, 151, 89, 9, 255, 155, 95, 13, 255, 149, 95, 8, 255, 152, 93, 4, 255, 157, 95, 7, 255, 161, 100, 10, 255, 166, 100, 13, 255, 163, 96, 10, 255, 166, 98, 5, 255, 167, 97, 9, 255, 169, 98, 7, 255, 165, 96, 8, 255, 160, 94, 15, 255, 162, 91, 14, 255, 163, 91, 19, 255, 155, 93, 14, 255, 151, 91, 13, 255, 156, 91, 13, 255, 163, 95, 16, 255, 162, 91, 13, 255, 147, 85, 10, 255, 141, 79, 18, 255, 139, 77, 13, 255, 146, 82, 0, 255, 160, 91, 13, 255, 159, 91, 14, 255, 159, 90, 5, 255, 154, 85, 7, 255, 150, 81, 14, 255, 147, 80, 3, 255, 146, 79, 10, 255, 141, 75, 18, 255, 140, 76, 12, 255, 118, 59, 5, 255, 67, 28, 3, 255, 24, 8, 7, 255, 2, 2, 9, 255, 2, 0, 14, 255, 3, 0, 17, 255, 3, 5, 17, 255, 1, 5, 15, 255, 2, 3, 21, 255, 1, 2, 22, 255, 1, 4, 17, 255, 1, 4, 12, 255, 1, 3, 5, 255, 0, 2, 2, 255, 2, 1, 6, 255, 2, 1, 9, 255, 1, 2, 9, 255, 1, 1, 8, 255, 1, 2, 7, 255, 1, 2, 7, 255, 1, 2, 6, 255, 2, 3, 6, 255, 2, 3, 8, 255, 1, 2, 7, 255, 1, 2, 7, 255, 2, 3, 8, 255, 1, 2, 7, 255, 0, 1, 5, 255, 0, 1, 5, 255, 2, 3, 8, 255, 4, 5, 10, 255, 1, 2, 7, 255, 1, 2, 7, 255, 1, 2, 7, 255, 0, 1, 6, 255, 2, 2, 7, 255, 2, 1, 6, 255, 1, 0, 4, 255, 0, 0, 3, 255, 1, 1, 4, 255, 0, 1, 2, 255, 2, 2, 4, 255, 1, 1, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 2, 255, 2, 0, 2, 255, 2, 1, 5, 255, 2, 76, 112, 255, 4, 148, 189, 255, 5, 172, 222, 255, 31, 220, 255, 255, 184, 255, 247, 255, 255, 255, 254, 255, 95, 178, 179, 255, 0, 30, 85, 255, 8, 16, 54, 255, 5, 8, 1, 255, 3, 0, 18, 255, 7, 105, 217, 255, 4, 79, 128, 255, 3, 0, 0, 255, 1, 5, 62, 255, 2, 27, 196, 255, 3, 12, 38, 255, 1, 0, 0, 255, 1, 0, 2, 255, 1, 0, 4, 255, 1, 0, 3, 255, 1, 0, 0, 255, 0, 0, 2, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 2, 0, 1, 255, 2, 0, 0, 255, 2, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 1, 1, 255, 2, 0, 1, 255, 3, 1, 2, 255, 3, 1, 2, 255, 4, 1, 2, 255, 3, 1, 1, 255, 3, 1, 1, 255, 2, 0, 0, 255, 3, 1, 1, 255, 4, 1, 2, 255, 4, 3, 2, 255, 4, 5, 4, 255, 4, 4, 2, 255, 5, 4, 1, 255, 13, 4, 0, 255, 15, 6, 1, 255, 15, 11, 4, 255, 14, 14, 5, 255, 17, 19, 10, 255, 29, 31, 24, 255, 38, 55, 57, 255, 60, 81, 69, 255, 83, 104, 92, 255, 94, 134, 127, 255, 92, 152, 139, 255, 85, 166, 166, 255, 124, 204, 208, 255, 160, 234, 228, 255, 174, 233, 222, 255, 126, 196, 154, 255, 62, 116, 75, 255, 30, 42, 33, 255, 28, 32, 12, 255, 29, 31, 8, 255, 40, 33, 10, 255, 40, 32, 10, 255, 36, 34, 7, 255, 42, 36, 6, 255, 50, 40, 6, 255, 49, 44, 4, 255, 56, 44, 5, 255, 61, 36, 5, 255, 53, 35, 9, 255, 41, 33, 5, 255, 37, 31, 9, 255, 39, 36, 10, 255, 44, 37, 10, 255, 45, 36, 7, 255, 48, 37, 3, 255, 45, 41, 4, 255, 57, 40, 4, 255, 63, 43, 4, 255, 64, 45, 7, 255, 71, 53, 2, 255, 72, 49, 14, 255, 72, 50, 8, 255, 80, 57, 4, 255, 84, 53, 11, 255, 89, 58, 1, 255, 90, 60, 1, 255, 103, 61, 10, 255, 105, 62, 6, 255, 99, 66, 0, 255, 98, 66, 3, 255, 91, 52, 6, 255, 83, 53, 3, 255, 75, 53, 3, 255, 74, 50, 7, 255, 79, 48, 9, 255, 79, 45, 7, 255, 70, 42, 3, 255, 67, 46, 5, 255, 67, 43, 4, 255, 72, 42, 4, 255, 79, 41, 5, 255, 80, 42, 6, 255, 73, 42, 8, 255, 69, 42, 12, 255, 78, 44, 11, 255, 80, 43, 12, 255, 77, 45, 13, 255, 73, 45, 8, 255, 78, 47, 6, 255, 77, 44, 6, 255, 89, 47, 12, 255, 115, 56, 8, 255, 129, 57, 8, 255, 135, 57, 8, 255, 145, 65, 8, 255, 153, 63, 5, 255, 160, 71, 6, 255, 159, 68, 4, 255, 148, 67, 9, 255, 147, 66, 8, 255, 152, 64, 1, 255, 156, 68, 6, 255, 148, 71, 14, 255, 155, 70, 16, 255, 151, 66, 3, 255, 136, 62, 9, 255, 137, 59, 9, 255, 127, 50, 3, 255, 116, 50, 10, 255, 115, 51, 14, 255, 120, 54, 8, 255, 126, 56, 8, 255, 121, 60, 9, 255, 116, 61, 15, 255, 116, 60, 11, 255, 110, 59, 9, 255, 102, 60, 10, 255, 102, 63, 6, 255, 101, 56, 6, 255, 103, 61, 4, 255, 96, 61, 4, 255, 99, 59, 6, 255, 100, 57, 4, 255, 101, 58, 8, 255, 103, 58, 7, 255, 107, 61, 10, 255, 106, 61, 10, 255, 105, 61, 8, 255, 102, 61, 5, 255, 106, 64, 13, 255, 105, 62, 8, 255, 106, 60, 6, 255, 110, 60, 7, 255, 117, 64, 9, 255, 120, 64, 4, 255, 110, 64, 8, 255, 109, 63, 12, 255, 112, 67, 5, 255, 110, 64, 9, 255, 107, 61, 11, 255, 106, 63, 8, 255, 106, 65, 11, 255, 105, 63, 11, 255, 106, 63, 16, 255, 110, 65, 13, 255, 111, 66, 12, 255, 112, 69, 14, 255, 110, 71, 9, 255, 104, 68, 12, 255, 103, 67, 17, 255, 106, 68, 7, 255, 110, 69, 16, 255, 112, 65, 5, 255, 111, 67, 12, 255, 119, 70, 13, 255, 118, 68, 9, 255, 117, 69, 16, 255, 112, 70, 11, 255, 113, 72, 14, 255, 113, 72, 8, 255, 118, 73, 13, 255, 123, 77, 16, 255, 122, 75, 16, 255, 116, 70, 5, 255, 113, 72, 8, 255, 111, 74, 14, 255, 111, 74, 17, 255, 112, 79, 3, 255, 118, 79, 11, 255, 117, 74, 15, 255, 117, 73, 18, 255, 119, 76, 11, 255, 118, 74, 18, 255, 118, 72, 15, 255, 119, 75, 11, 255, 116, 77, 7, 255, 116, 78, 10, 255, 118, 75, 17, 255, 118, 75, 12, 255, 123, 80, 15, 255, 122, 82, 13, 255, 118, 85, 18, 255, 123, 87, 17, 255, 131, 85, 9, 255, 154, 89, 8, 255, 161, 88, 17, 255, 173, 87, 18, 255, 174, 94, 7, 255, 147, 89, 6, 255, 143, 83, 22, 255, 142, 89, 21, 255, 145, 89, 24, 255, 151, 100, 17, 255, 155, 100, 17, 255, 149, 95, 22, 255, 149, 98, 18, 255, 150, 98, 12, 255, 151, 99, 21, 255, 150, 99, 26, 255, 152, 99, 27, 255, 150, 99, 21, 255, 153, 101, 16, 255, 157, 102, 22, 255, 152, 103, 20, 255, 152, 103, 18, 255, 157, 107, 21, 255, 157, 108, 19, 255, 155, 105, 19, 255, 162, 109, 21, 255, 177, 110, 27, 255, 178, 109, 12, 255, 164, 108, 19, 255, 162, 108, 22, 255, 169, 111, 16, 255, 175, 112, 24, 255, 176, 114, 18, 255, 175, 113, 6, 255, 177, 106, 9, 255, 180, 104, 16, 255, 187, 118, 19, 255, 191, 127, 9, 255, 187, 126, 12, 255, 172, 122, 3, 255, 167, 118, 7, 255, 167, 109, 14, 255, 171, 106, 24, 255, 171, 112, 14, 255, 171, 113, 14, 255, 169, 109, 13, 255, 174, 114, 17, 255, 166, 108, 13, 255, 162, 103, 8, 255, 173, 102, 7, 255, 183, 101, 5, 255, 179, 100, 15, 255, 167, 99, 18, 255, 166, 101, 10, 255, 169, 99, 14, 255, 161, 94, 7, 255, 157, 96, 12, 255, 162, 96, 13, 255, 173, 92, 8, 255, 175, 83, 4, 255, 170, 79, 1, 255, 171, 80, 6, 255, 170, 84, 5, 255, 169, 87, 2, 255, 166, 91, 7, 255, 156, 91, 11, 255, 158, 93, 13, 255, 164, 94, 9, 255, 172, 95, 11, 255, 175, 97, 5, 255, 173, 96, 8, 255, 176, 96, 18, 255, 181, 96, 12, 255, 182, 91, 6, 255, 183, 88, 13, 255, 178, 81, 6, 255, 171, 74, 3, 255, 168, 72, 5, 255, 165, 70, 6, 255, 172, 75, 10, 255, 167, 73, 2, 255, 183, 81, 1, 255, 185, 86, 4, 255, 182, 81, 9, 255, 147, 63, 6, 255, 133, 64, 4, 255, 144, 62, 2, 255, 126, 54, 2, 255, 121, 55, 2, 255, 128, 59, 9, 255, 118, 55, 4, 255, 118, 52, 0, 255, 128, 58, 0, 255, 123, 51, 2, 255, 110, 42, 5, 255, 94, 44, 4, 255, 98, 50, 6, 255, 100, 52, 10, 255, 104, 53, 5, 255, 108, 51, 6, 255, 108, 52, 9, 255, 116, 54, 7, 255, 127, 62, 6, 255, 145, 81, 13, 255, 148, 86, 11, 255, 150, 89, 13, 255, 156, 93, 19, 255, 153, 89, 11, 255, 163, 90, 5, 255, 167, 92, 9, 255, 164, 98, 9, 255, 166, 99, 14, 255, 166, 99, 11, 255, 166, 97, 6, 255, 167, 96, 7, 255, 165, 91, 12, 255, 163, 93, 12, 255, 158, 91, 9, 255, 162, 91, 19, 255, 161, 87, 15, 255, 158, 90, 11, 255, 155, 91, 15, 255, 155, 90, 9, 255, 160, 92, 15, 255, 161, 95, 10, 255, 152, 89, 7, 255, 137, 73, 14, 255, 133, 68, 17, 255, 143, 78, 9, 255, 153, 88, 4, 255, 154, 87, 8, 255, 148, 82, 5, 255, 146, 81, 7, 255, 143, 79, 11, 255, 140, 80, 2, 255, 136, 77, 4, 255, 131, 71, 12, 255, 131, 72, 5, 255, 129, 67, 9, 255, 101, 46, 2, 255, 65, 30, 7, 255, 2, 3, 9, 255, 4, 2, 13, 255, 3, 2, 13, 255, 1, 3, 10, 255, 1, 5, 12, 255, 4, 2, 16, 255, 3, 3, 20, 255, 2, 6, 19, 255, 2, 6, 15, 255, 0, 5, 8, 255, 0, 4, 6, 255, 0, 3, 7, 255, 0, 2, 10, 255, 2, 2, 13, 255, 3, 3, 11, 255, 3, 4, 9, 255, 1, 2, 6, 255, 1, 2, 4, 255, 1, 2, 4, 255, 1, 2, 6, 255, 2, 3, 7, 255, 2, 3, 7, 255, 1, 2, 7, 255, 2, 3, 7, 255, 2, 3, 7, 255, 0, 1, 6, 255, 0, 1, 7, 255, 3, 4, 9, 255, 0, 1, 6, 255, 0, 1, 6, 255, 1, 2, 7, 255, 1, 2, 7, 255, 0, 1, 5, 255, 0, 1, 5, 255, 0, 1, 5, 255, 1, 0, 5, 255, 1, 0, 5, 255, 1, 0, 4, 255, 0, 0, 2, 255, 0, 0, 3, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 1, 3, 255, 2, 0, 1, 255, 2, 5, 9, 255, 2, 92, 128, 255, 4, 173, 210, 255, 4, 215, 254, 255, 124, 251, 250, 255, 246, 255, 255, 255, 97, 177, 170, 255, 0, 28, 60, 255, 6, 6, 24, 255, 2, 3, 5, 255, 2, 0, 4, 255, 8, 40, 106, 255, 2, 133, 220, 255, 3, 8, 29, 255, 1, 0, 0, 255, 4, 15, 174, 255, 5, 18, 102, 255, 3, 0, 0, 255, 2, 2, 5, 255, 2, 1, 3, 255, 0, 0, 2, 255, 0, 2, 0, 255, 0, 1, 0, 255, 1, 1, 3, 255, 2, 1, 3, 255, 1, 0, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 2, 0, 1, 255, 1, 0, 0, 255, 3, 1, 2, 255, 2, 2, 2, 255, 1, 1, 1, 255, 0, 1, 1, 255, 1, 2, 2, 255, 1, 0, 0, 255, 2, 0, 1, 255, 3, 0, 1, 255, 5, 1, 1, 255, 3, 2, 0, 255, 3, 2, 0, 255, 2, 1, 0, 255, 3, 2, 0, 255, 4, 0, 0, 255, 4, 3, 1, 255, 4, 4, 2, 255, 1, 3, 0, 255, 7, 6, 2, 255, 9, 8, 1, 255, 13, 12, 5, 255, 19, 18, 9, 255, 24, 25, 12, 255, 39, 44, 30, 255, 60, 67, 54, 255, 70, 85, 73, 255, 69, 111, 85, 255, 91, 131, 111, 255, 90, 142, 119, 255, 91, 153, 138, 255, 112, 185, 180, 255, 142, 213, 210, 255, 169, 225, 217, 255, 160, 211, 189, 255, 108, 171, 143, 255, 57, 108, 74, 255, 31, 45, 25, 255, 36, 33, 16, 255, 35, 36, 6, 255, 36, 35, 2, 255, 45, 33, 12, 255, 48, 34, 6, 255, 47, 37, 1, 255, 45, 39, 4, 255, 53, 45, 5, 255, 61, 46, 5, 255, 54, 38, 3, 255, 42, 31, 3, 255, 50, 39, 8, 255, 47, 31, 12, 255, 39, 31, 3, 255, 47, 32, 6, 255, 49, 36, 6, 255, 44, 38, 3, 255, 42, 40, 5, 255, 53, 40, 10, 255, 61, 42, 13, 255, 63, 44, 10, 255, 72, 47, 8, 255, 68, 47, 9, 255, 77, 53, 10, 255, 78, 55, 4, 255, 84, 54, 2, 255, 93, 60, 3, 255, 95, 61, 7, 255, 96, 60, 10, 255, 102, 64, 10, 255, 101, 68, 5, 255, 94, 62, 2, 255, 94, 52, 8, 255, 89, 50, 9, 255, 82, 49, 7, 255, 79, 52, 12, 255, 79, 48, 9, 255, 78, 45, 7, 255, 79, 43, 4, 255, 72, 45, 4, 255, 69, 45, 7, 255, 79, 45, 8, 255, 82, 44, 6, 255, 84, 45, 5, 255, 82, 44, 6, 255, 80, 46, 12, 255, 78, 44, 11, 255, 81, 43, 5, 255, 83, 44, 1, 255, 80, 47, 2, 255, 80, 47, 4, 255, 81, 44, 2, 255, 85, 49, 6, 255, 94, 52, 6, 255, 104, 52, 8, 255, 118, 52, 7, 255, 131, 56, 6, 255, 127, 49, 5, 255, 142, 56, 5, 255, 143, 54, 2, 255, 146, 60, 1, 255, 135, 55, 3, 255, 145, 58, 9, 255, 144, 60, 2, 255, 145, 58, 4, 255, 154, 66, 1, 255, 155, 62, 13, 255, 156, 65, 15, 255, 162, 72, 0, 255, 159, 71, 1, 255, 151, 69, 6, 255, 143, 60, 10, 255, 127, 55, 13, 255, 108, 49, 10, 255, 106, 51, 10, 255, 112, 49, 11, 255, 122, 54, 9, 255, 125, 57, 10, 255, 127, 58, 7, 255, 126, 64, 6, 255, 129, 66, 8, 255, 128, 65, 5, 255, 118, 61, 2, 255, 116, 63, 9, 255, 115, 62, 10, 255, 114, 65, 5, 255, 113, 66, 4, 255, 105, 58, 11, 255, 99, 56, 7, 255, 104, 63, 5, 255, 105, 64, 12, 255, 99, 58, 9, 255, 108, 62, 10, 255, 103, 65, 10, 255, 105, 63, 11, 255, 115, 61, 12, 255, 115, 62, 8, 255, 107, 63, 3, 255, 110, 65, 8, 255, 113, 66, 6, 255, 108, 61, 9, 255, 106, 62, 11, 255, 106, 66, 8, 255, 107, 64, 8, 255, 112, 64, 16, 255, 110, 62, 17, 255, 111, 63, 12, 255, 116, 68, 13, 255, 113, 65, 11, 255, 109, 64, 9, 255, 109, 66, 11, 255, 105, 72, 7, 255, 105, 68, 9, 255, 109, 65, 18, 255, 110, 67, 10, 255, 107, 71, 12, 255, 115, 70, 12, 255, 116, 70, 16, 255, 113, 67, 13, 255, 117, 71, 9, 255, 111, 72, 8, 255, 112, 73, 12, 255, 125, 75, 19, 255, 132, 74, 6, 255, 121, 73, 16, 255, 109, 72, 7, 255, 113, 74, 6, 255, 115, 71, 13, 255, 109, 73, 13, 255, 111, 74, 16, 255, 113, 78, 12, 255, 111, 73, 9, 255, 115, 77, 9, 255, 113, 76, 15, 255, 115, 73, 15, 255, 124, 75, 8, 255, 119, 77, 12, 255, 117, 79, 13, 255, 119, 78, 9, 255, 121, 84, 13, 255, 122, 83, 12, 255, 121, 79, 12, 255, 129, 80, 5, 255, 131, 81, 17, 255, 128, 82, 16, 255, 137, 86, 10, 255, 158, 85, 5, 255, 164, 86, 11, 255, 159, 88, 17, 255, 151, 88, 16, 255, 142, 89, 15, 255, 140, 87, 17, 255, 145, 96, 13, 255, 143, 93, 20, 255, 148, 97, 20, 255, 158, 96, 19, 255, 153, 98, 11, 255, 152, 100, 13, 255, 151, 99, 14, 255, 155, 99, 20, 255, 154, 96, 28, 255, 152, 100, 23, 255, 152, 100, 25, 255, 153, 101, 16, 255, 155, 99, 18, 255, 154, 101, 18, 255, 160, 102, 19, 255, 171, 105, 16, 255, 179, 108, 18, 255, 180, 108, 18, 255, 181, 106, 19, 255, 180, 102, 22, 255, 181, 113, 19, 255, 163, 109, 17, 255, 162, 108, 18, 255, 171, 110, 26, 255, 178, 112, 19, 255, 180, 113, 18, 255, 177, 109, 19, 255, 176, 104, 12, 255, 176, 102, 11, 255, 188, 121, 5, 255, 190, 123, 12, 255, 188, 125, 13, 255, 177, 122, 16, 255, 170, 113, 21, 255, 176, 112, 2, 255, 181, 101, 8, 255, 180, 103, 20, 255, 183, 110, 11, 255, 182, 111, 1, 255, 181, 112, 9, 255, 177, 112, 18, 255, 171, 101, 19, 255, 177, 92, 12, 255, 185, 93, 5, 255, 180, 98, 8, 255, 167, 100, 15, 255, 171, 102, 10, 255, 173, 103, 6, 255, 166, 99, 8, 255, 171, 97, 4, 255, 176, 95, 3, 255, 170, 91, 5, 255, 168, 91, 5, 255, 172, 88, 8, 255, 176, 90, 13, 255, 171, 84, 9, 255, 174, 85, 3, 255, 177, 93, 3, 255, 172, 95, 6, 255, 166, 95, 7, 255, 162, 94, 7, 255, 171, 100, 6, 255, 177, 99, 2, 255, 178, 95, 9, 255, 181, 95, 13, 255, 183, 92, 9, 255, 178, 86, 9, 255, 171, 84, 8, 255, 168, 74, 3, 255, 167, 72, 4, 255, 167, 76, 3, 255, 176, 93, 11, 255, 168, 88, 8, 255, 163, 85, 4, 255, 182, 88, 14, 255, 176, 73, 3, 255, 180, 84, 2, 255, 148, 64, 3, 255, 131, 59, 4, 255, 136, 58, 5, 255, 124, 56, 3, 255, 118, 59, 2, 255, 127, 52, 9, 255, 127, 53, 5, 255, 122, 48, 5, 255, 118, 46, 2, 255, 118, 46, 4, 255, 109, 43, 5, 255, 99, 50, 5, 255, 102, 52, 6, 255, 103, 52, 9, 255, 106, 51, 7, 255, 114, 53, 7, 255, 116, 55, 10, 255, 116, 56, 4, 255, 127, 67, 6, 255, 141, 81, 11, 255, 150, 87, 9, 255, 151, 88, 12, 255, 152, 92, 15, 255, 160, 92, 13, 255, 174, 96, 10, 255, 172, 94, 11, 255, 161, 96, 2, 255, 163, 99, 7, 255, 165, 98, 8, 255, 165, 96, 10, 255, 165, 95, 4, 255, 163, 90, 22, 255, 158, 88, 19, 255, 158, 93, 6, 255, 159, 93, 15, 255, 158, 88, 12, 255, 159, 89, 6, 255, 157, 86, 8, 255, 155, 86, 11, 255, 156, 89, 15, 255, 151, 87, 12, 255, 145, 77, 13, 255, 138, 71, 6, 255, 140, 74, 12, 255, 146, 81, 19, 255, 147, 83, 4, 255, 144, 81, 9, 255, 139, 74, 11, 255, 140, 77, 10, 255, 138, 75, 7, 255, 137, 77, 2, 255, 132, 74, 4, 255, 131, 70, 11, 255, 128, 69, 5, 255, 125, 69, 9, 255, 114, 59, 2, 255, 96, 51, 4, 255, 1, 3, 12, 255, 1, 0, 9, 255, 5, 1, 8, 255, 1, 1, 8, 255, 0, 3, 9, 255, 0, 4, 11, 255, 0, 4, 15, 255, 2, 6, 18, 255, 3, 7, 19, 255, 1, 4, 14, 255, 0, 5, 11, 255, 0, 3, 10, 255, 0, 3, 11, 255, 0, 3, 12, 255, 0, 2, 10, 255, 1, 4, 9, 255, 1, 2, 7, 255, 3, 4, 8, 255, 2, 3, 7, 255, 1, 2, 7, 255, 2, 3, 8, 255, 2, 3, 6, 255, 0, 1, 3, 255, 1, 2, 5, 255, 2, 3, 7, 255, 2, 3, 7, 255, 1, 2, 7, 255, 2, 3, 8, 255, 0, 1, 5, 255, 2, 2, 7, 255, 3, 4, 8, 255, 2, 3, 7, 255, 0, 1, 5, 255, 0, 1, 5, 255, 1, 2, 6, 255, 1, 0, 5, 255, 1, 0, 5, 255, 1, 0, 5, 255, 0, 0, 3, 255, 0, 0, 2, 255, 0, 0, 0, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 2, 255, 2, 1, 2, 255, 3, 0, 0, 255, 10, 35, 70, 255, 0, 184, 233, 255, 93, 255, 255, 255, 229, 255, 255, 255, 74, 186, 162, 255, 0, 25, 14, 255, 2, 0, 0, 255, 3, 0, 2, 255, 2, 3, 5, 255, 5, 5, 37, 255, 4, 134, 239, 255, 4, 84, 136, 255, 6, 0, 0, 255, 5, 17, 126, 255, 0, 39, 195, 255, 4, 2, 0, 255, 3, 2, 3, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 2, 0, 255, 0, 2, 2, 255, 0, 0, 4, 255, 0, 1, 1, 255, 1, 0, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 2, 0, 1, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 2, 0, 1, 255, 3, 1, 2, 255, 1, 0, 0, 255, 1, 1, 1, 255, 2, 0, 1, 255, 3, 0, 0, 255, 3, 2, 0, 255, 3, 2, 0, 255, 0, 1, 0, 255, 4, 4, 2, 255, 6, 3, 2, 255, 4, 0, 0, 255, 4, 4, 0, 255, 4, 4, 0, 255, 9, 8, 3, 255, 9, 14, 5, 255, 21, 24, 15, 255, 30, 32, 22, 255, 47, 53, 38, 255, 58, 72, 55, 255, 66, 87, 72, 255, 72, 106, 88, 255, 75, 122, 101, 255, 69, 126, 104, 255, 69, 138, 113, 255, 85, 162, 149, 255, 117, 193, 186, 255, 142, 211, 201, 255, 154, 215, 194, 255, 133, 191, 170, 255, 96, 157, 122, 255, 61, 107, 63, 255, 35, 47, 29, 255, 36, 38, 12, 255, 37, 36, 10, 255, 39, 34, 9, 255, 43, 35, 8, 255, 38, 33, 9, 255, 35, 36, 11, 255, 54, 39, 11, 255, 61, 38, 5, 255, 57, 41, 6, 255, 55, 36, 5, 255, 41, 32, 0, 255, 44, 33, 4, 255, 47, 30, 4, 255, 46, 31, 6, 255, 45, 28, 5, 255, 56, 33, 5, 255, 49, 38, 5, 255, 59, 43, 3, 255, 60, 40, 5, 255, 64, 45, 10, 255, 68, 50, 4, 255, 65, 49, 12, 255, 72, 52, 4, 255, 71, 53, 7, 255, 79, 57, 6, 255, 81, 57, 1, 255, 89, 58, 4, 255, 92, 61, 5, 255, 89, 59, 3, 255, 99, 63, 5, 255, 108, 70, 8, 255, 97, 64, 2, 255, 92, 57, 2, 255, 83, 50, 6, 255, 80, 46, 7, 255, 76, 46, 8, 255, 75, 43, 8, 255, 73, 46, 9, 255, 81, 46, 7, 255, 74, 41, 5, 255, 73, 44, 8, 255, 84, 50, 7, 255, 87, 44, 5, 255, 81, 42, 8, 255, 74, 44, 7, 255, 80, 46, 3, 255, 79, 46, 7, 255, 74, 47, 10, 255, 78, 46, 7, 255, 81, 46, 7, 255, 75, 45, 8, 255, 80, 48, 5, 255, 89, 55, 5, 255, 86, 53, 4, 255, 87, 52, 6, 255, 101, 48, 4, 255, 104, 51, 10, 255, 119, 54, 14, 255, 105, 49, 1, 255, 111, 49, 4, 255, 123, 53, 3, 255, 112, 50, 6, 255, 135, 52, 16, 255, 118, 47, 6, 255, 132, 56, 8, 255, 135, 60, 2, 255, 133, 58, 5, 255, 150, 64, 6, 255, 152, 66, 4, 255, 157, 67, 6, 255, 167, 67, 2, 255, 171, 73, 5, 255, 165, 72, 10, 255, 161, 73, 6, 255, 152, 73, 9, 255, 126, 61, 7, 255, 113, 57, 5, 255, 115, 51, 9, 255, 107, 45, 9, 255, 98, 47, 8, 255, 105, 50, 8, 255, 116, 49, 8, 255, 126, 61, 9, 255, 121, 56, 6, 255, 125, 59, 6, 255, 130, 65, 3, 255, 136, 73, 10, 255, 126, 65, 7, 255, 119, 64, 4, 255, 109, 62, 6, 255, 105, 59, 16, 255, 109, 62, 13, 255, 108, 57, 3, 255, 103, 57, 3, 255, 110, 61, 11, 255, 117, 61, 11, 255, 113, 64, 5, 255, 112, 63, 10, 255, 113, 60, 10, 255, 113, 61, 12, 255, 110, 61, 9, 255, 108, 64, 8, 255, 110, 65, 13, 255, 110, 64, 15, 255, 106, 63, 10, 255, 108, 68, 5, 255, 110, 68, 10, 255, 110, 66, 13, 255, 106, 64, 12, 255, 106, 67, 15, 255, 112, 66, 11, 255, 111, 69, 8, 255, 108, 65, 8, 255, 109, 66, 8, 255, 106, 71, 9, 255, 109, 71, 12, 255, 111, 69, 15, 255, 116, 72, 16, 255, 117, 70, 4, 255, 116, 70, 8, 255, 110, 69, 12, 255, 117, 74, 17, 255, 127, 78, 9, 255, 135, 80, 6, 255, 128, 78, 12, 255, 129, 78, 7, 255, 126, 76, 8, 255, 118, 69, 11, 255, 128, 78, 8, 255, 137, 77, 14, 255, 147, 81, 8, 255, 143, 83, 7, 255, 127, 81, 10, 255, 120, 78, 16, 255, 117, 77, 13, 255, 119, 77, 16, 255, 120, 77, 19, 255, 114, 75, 8, 255, 147, 81, 19, 255, 141, 79, 14, 255, 115, 82, 9, 255, 122, 81, 10, 255, 124, 81, 19, 255, 129, 84, 19, 255, 127, 82, 13, 255, 131, 84, 12, 255, 133, 84, 12, 255, 134, 86, 11, 255, 141, 87, 15, 255, 143, 87, 23, 255, 141, 87, 21, 255, 138, 89, 19, 255, 146, 93, 23, 255, 150, 92, 17, 255, 156, 92, 17, 255, 158, 99, 18, 255, 159, 102, 14, 255, 159, 100, 18, 255, 159, 98, 17, 255, 159, 101, 15, 255, 154, 98, 25, 255, 152, 99, 12, 255, 154, 101, 12, 255, 156, 101, 20, 255, 157, 100, 25, 255, 156, 103, 23, 255, 166, 105, 11, 255, 176, 104, 20, 255, 175, 104, 23, 255, 175, 102, 21, 255, 180, 103, 21, 255, 178, 106, 14, 255, 179, 114, 9, 255, 177, 112, 15, 255, 177, 111, 12, 255, 182, 111, 11, 255, 186, 109, 22, 255, 184, 110, 20, 255, 177, 109, 14, 255, 173, 102, 20, 255, 179, 105, 13, 255, 195, 128, 10, 255, 188, 120, 16, 255, 190, 126, 11, 255, 180, 123, 12, 255, 175, 114, 17, 255, 183, 112, 10, 255, 180, 99, 12, 255, 180, 102, 17, 255, 177, 98, 3, 255, 183, 98, 10, 255, 185, 97, 16, 255, 170, 90, 14, 255, 168, 90, 9, 255, 179, 93, 8, 255, 186, 96, 11, 255, 185, 101, 5, 255, 177, 101, 2, 255, 172, 100, 6, 255, 174, 101, 12, 255, 176, 99, 12, 255, 173, 97, 11, 255, 168, 101, 7, 255, 166, 99, 2, 255, 171, 98, 6, 255, 165, 95, 8, 255, 168, 93, 6, 255, 173, 92, 3, 255, 181, 92, 1, 255, 178, 90, 0, 255, 178, 92, 8, 255, 170, 97, 10, 255, 167, 93, 0, 255, 174, 99, 4, 255, 179, 100, 12, 255, 182, 99, 13, 255, 184, 100, 13, 255, 181, 100, 11, 255, 176, 97, 9, 255, 172, 81, 14, 255, 177, 87, 10, 255, 183, 97, 4, 255, 182, 99, 1, 255, 187, 105, 7, 255, 190, 106, 3, 255, 188, 111, 1, 255, 192, 101, 3, 255, 193, 105, 6, 255, 177, 91, 5, 255, 141, 55, 6, 255, 125, 53, 14, 255, 127, 57, 6, 255, 129, 60, 0, 255, 128, 57, 2, 255, 127, 51, 7, 255, 120, 50, 0, 255, 120, 51, 2, 255, 116, 50, 8, 255, 112, 49, 7, 255, 105, 49, 3, 255, 106, 54, 6, 255, 106, 53, 7, 255, 110, 52, 5, 255, 113, 52, 6, 255, 116, 53, 3, 255, 119, 53, 3, 255, 125, 61, 3, 255, 141, 79, 10, 255, 148, 85, 12, 255, 154, 90, 11, 255, 157, 93, 15, 255, 153, 88, 12, 255, 164, 88, 15, 255, 169, 95, 9, 255, 168, 95, 15, 255, 164, 95, 5, 255, 164, 97, 11, 255, 162, 92, 7, 255, 162, 93, 8, 255, 161, 92, 6, 255, 160, 89, 21, 255, 156, 88, 11, 255, 159, 91, 6, 255, 159, 89, 17, 255, 155, 86, 14, 255, 155, 86, 10, 255, 154, 87, 9, 255, 153, 87, 12, 255, 151, 85, 11, 255, 142, 74, 9, 255, 129, 59, 6, 255, 132, 64, 9, 255, 143, 78, 7, 255, 148, 83, 12, 255, 143, 77, 12, 255, 141, 77, 7, 255, 136, 76, 5, 255, 136, 76, 6, 255, 137, 73, 9, 255, 133, 71, 10, 255, 129, 72, 4, 255, 128, 71, 4, 255, 126, 66, 12, 255, 108, 59, 5, 255, 98, 51, 4, 255, 101, 51, 5, 255, 15, 57, 69, 255, 0, 6, 9, 255, 5, 0, 5, 255, 4, 0, 8, 255, 2, 1, 10, 255, 1, 1, 6, 255, 1, 3, 11, 255, 3, 5, 18, 255, 3, 5, 20, 255, 1, 4, 20, 255, 1, 4, 16, 255, 1, 4, 10, 255, 1, 4, 11, 255, 1, 4, 12, 255, 0, 3, 10, 255, 2, 4, 9, 255, 1, 3, 8, 255, 3, 5, 10, 255, 2, 4, 9, 255, 1, 1, 9, 255, 2, 3, 9, 255, 1, 2, 7, 255, 0, 0, 5, 255, 0, 0, 4, 255, 1, 2, 6, 255, 2, 2, 7, 255, 1, 1, 7, 255, 0, 1, 6, 255, 1, 1, 5, 255, 2, 3, 7, 255, 1, 2, 5, 255, 0, 1, 4, 255, 1, 2, 6, 255, 1, 2, 6, 255, 1, 3, 6, 255, 2, 1, 6, 255, 1, 0, 6, 255, 1, 0, 6, 255, 1, 1, 4, 255, 0, 0, 2, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 2, 255, 1, 1, 3, 255, 0, 1, 3, 255, 5, 0, 0, 255, 5, 69, 104, 255, 85, 224, 215, 255, 53, 164, 131, 255, 0, 21, 16, 255, 2, 0, 3, 255, 3, 0, 9, 255, 5, 4, 11, 255, 2, 0, 0, 255, 4, 56, 141, 255, 3, 181, 222, 255, 4, 0, 14, 255, 4, 0, 29, 255, 7, 144, 225, 255, 3, 50, 96, 255, 5, 0, 0, 255, 2, 3, 5, 255, 1, 1, 2, 255, 2, 0, 2, 255, 1, 0, 4, 255, 2, 1, 4, 255, 3, 2, 1, 255, 2, 2, 1, 255, 1, 1, 5, 255, 0, 0, 3, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 0, 0, 255, 2, 2, 2, 255, 1, 1, 1, 255, 0, 0, 0, 255, 2, 0, 1, 255, 2, 0, 1, 255, 2, 0, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 0, 1, 255, 1, 1, 0, 255, 3, 3, 1, 255, 3, 2, 0, 255, 1, 2, 1, 255, 2, 1, 1, 255, 6, 3, 1, 255, 9, 5, 2, 255, 10, 9, 5, 255, 10, 10, 4, 255, 19, 18, 8, 255, 27, 28, 15, 255, 39, 40, 29, 255, 51, 58, 47, 255, 57, 75, 60, 255, 60, 89, 72, 255, 60, 100, 85, 255, 60, 110, 90, 255, 66, 115, 92, 255, 71, 116, 99, 255, 79, 143, 135, 255, 95, 173, 166, 255, 122, 195, 187, 255, 148, 207, 196, 255, 140, 198, 179, 255, 116, 178, 145, 255, 89, 147, 102, 255, 60, 101, 56, 255, 40, 55, 15, 255, 33, 34, 11, 255, 31, 35, 8, 255, 40, 38, 11, 255, 33, 29, 8, 255, 38, 36, 9, 255, 43, 36, 8, 255, 52, 35, 8, 255, 56, 39, 6, 255, 46, 34, 8, 255, 42, 34, 8, 255, 44, 33, 5, 255, 50, 30, 11, 255, 47, 32, 4, 255, 38, 34, 7, 255, 39, 33, 12, 255, 49, 32, 0, 255, 45, 36, 4, 255, 61, 43, 4, 255, 65, 41, 7, 255, 58, 40, 8, 255, 65, 43, 2, 255, 72, 45, 1, 255, 77, 49, 5, 255, 86, 54, 3, 255, 88, 55, 8, 255, 90, 56, 3, 255, 92, 57, 7, 255, 87, 59, 5, 255, 91, 63, 5, 255, 101, 61, 5, 255, 105, 64, 6, 255, 97, 65, 2, 255, 92, 58, 2, 255, 78, 54, 6, 255, 77, 49, 6, 255, 72, 44, 4, 255, 71, 44, 5, 255, 67, 46, 8, 255, 77, 47, 8, 255, 72, 45, 3, 255, 70, 45, 7, 255, 77, 46, 7, 255, 78, 45, 7, 255, 79, 43, 9, 255, 82, 44, 7, 255, 84, 44, 6, 255, 85, 44, 7, 255, 75, 45, 10, 255, 83, 49, 7, 255, 93, 52, 4, 255, 87, 52, 9, 255, 88, 53, 11, 255, 87, 53, 5, 255, 93, 54, 6, 255, 89, 51, 7, 255, 89, 50, 8, 255, 91, 50, 2, 255, 96, 52, 8, 255, 86, 46, 6, 255, 102, 54, 7, 255, 96, 46, 8, 255, 100, 50, 3, 255, 99, 48, 8, 255, 102, 46, 4, 255, 124, 55, 3, 255, 107, 45, 8, 255, 133, 60, 10, 255, 139, 56, 9, 255, 123, 46, 4, 255, 140, 64, 5, 255, 148, 65, 11, 255, 148, 63, 7, 255, 155, 64, 5, 255, 160, 69, 6, 255, 161, 76, 4, 255, 169, 79, 5, 255, 174, 79, 4, 255, 171, 79, 2, 255, 160, 76, 12, 255, 145, 68, 16, 255, 132, 65, 10, 255, 114, 57, 10, 255, 104, 56, 7, 255, 104, 53, 13, 255, 101, 48, 11, 255, 108, 54, 8, 255, 130, 67, 8, 255, 131, 61, 1, 255, 136, 64, 6, 255, 135, 67, 9, 255, 131, 66, 6, 255, 124, 67, 4, 255, 122, 68, 5, 255, 113, 66, 5, 255, 110, 65, 10, 255, 110, 62, 6, 255, 114, 64, 10, 255, 112, 63, 10, 255, 113, 63, 6, 255, 115, 65, 13, 255, 109, 66, 10, 255, 105, 66, 9, 255, 107, 67, 7, 255, 111, 67, 10, 255, 111, 63, 15, 255, 107, 64, 12, 255, 110, 68, 12, 255, 109, 66, 7, 255, 110, 69, 8, 255, 111, 68, 14, 255, 110, 65, 4, 255, 106, 67, 9, 255, 109, 67, 15, 255, 115, 66, 11, 255, 113, 71, 13, 255, 115, 72, 6, 255, 112, 71, 8, 255, 117, 71, 15, 255, 120, 72, 10, 255, 116, 70, 10, 255, 127, 76, 15, 255, 128, 75, 14, 255, 122, 74, 8, 255, 127, 76, 11, 255, 156, 83, 11, 255, 168, 79, 2, 255, 147, 76, 13, 255, 135, 77, 18, 255, 158, 83, 10, 255, 165, 79, 2, 255, 166, 77, 10, 255, 165, 80, 9, 255, 152, 80, 13, 255, 126, 75, 7, 255, 115, 76, 11, 255, 120, 75, 14, 255, 121, 77, 9, 255, 118, 78, 18, 255, 120, 76, 20, 255, 120, 78, 12, 255, 126, 77, 5, 255, 129, 83, 7, 255, 126, 82, 19, 255, 123, 82, 9, 255, 128, 84, 10, 255, 132, 83, 18, 255, 133, 88, 24, 255, 137, 87, 8, 255, 134, 86, 6, 255, 138, 87, 17, 255, 148, 90, 8, 255, 147, 91, 19, 255, 145, 87, 27, 255, 146, 93, 20, 255, 155, 98, 17, 255, 163, 98, 24, 255, 160, 103, 9, 255, 160, 105, 5, 255, 158, 103, 8, 255, 156, 101, 10, 255, 156, 99, 17, 255, 157, 101, 19, 255, 152, 101, 16, 255, 156, 102, 13, 255, 159, 101, 21, 255, 155, 103, 20, 255, 166, 102, 21, 255, 178, 102, 20, 255, 174, 104, 12, 255, 174, 102, 21, 255, 175, 101, 17, 255, 175, 106, 9, 255, 175, 107, 18, 255, 182, 107, 15, 255, 183, 110, 19, 255, 183, 108, 11, 255, 186, 108, 11, 255, 182, 108, 18, 255, 173, 108, 8, 255, 172, 110, 7, 255, 184, 115, 18, 255, 197, 131, 21, 255, 196, 134, 4, 255, 190, 127, 6, 255, 179, 119, 7, 255, 176, 112, 23, 255, 178, 101, 30, 255, 176, 98, 12, 255, 179, 104, 9, 255, 179, 99, 9, 255, 184, 99, 7, 255, 183, 104, 15, 255, 175, 102, 18, 255, 174, 98, 9, 255, 179, 99, 13, 255, 182, 96, 10, 255, 186, 93, 8, 255, 189, 99, 4, 255, 176, 102, 3, 255, 171, 102, 10, 255, 171, 99, 3, 255, 167, 100, 4, 255, 170, 98, 2, 255, 170, 97, 6, 255, 170, 99, 6, 255, 167, 95, 2, 255, 167, 91, 6, 255, 166, 90, 4, 255, 177, 96, 5, 255, 180, 97, 1, 255, 181, 93, 5, 255, 173, 92, 6, 255, 172, 92, 2, 255, 176, 100, 11, 255, 176, 104, 15, 255, 176, 104, 8, 255, 184, 105, 15, 255, 184, 106, 17, 255, 180, 102, 13, 255, 180, 101, 12, 255, 185, 106, 2, 255, 184, 102, 1, 255, 183, 100, 5, 255, 186, 102, 8, 255, 188, 103, 3, 255, 193, 104, 3, 255, 195, 108, 5, 255, 201, 107, 4, 255, 168, 77, 6, 255, 129, 56, 4, 255, 122, 56, 4, 255, 123, 61, 4, 255, 126, 55, 6, 255, 125, 49, 3, 255, 118, 54, 3, 255, 113, 55, 0, 255, 119, 52, 0, 255, 114, 46, 8, 255, 109, 51, 4, 255, 103, 52, 1, 255, 105, 51, 6, 255, 107, 52, 10, 255, 112, 52, 2, 255, 123, 57, 6, 255, 125, 62, 4, 255, 137, 69, 9, 255, 150, 78, 11, 255, 153, 80, 9, 255, 154, 85, 10, 255, 154, 93, 9, 255, 148, 88, 7, 255, 157, 86, 5, 255, 168, 91, 14, 255, 166, 94, 10, 255, 162, 90, 14, 255, 163, 87, 4, 255, 165, 90, 8, 255, 163, 88, 14, 255, 162, 91, 4, 255, 160, 92, 2, 255, 155, 86, 14, 255, 155, 87, 12, 255, 156, 87, 3, 255, 158, 88, 13, 255, 153, 85, 18, 255, 153, 85, 15, 255, 152, 87, 13, 255, 150, 87, 6, 255, 148, 84, 9, 255, 146, 82, 7, 255, 133, 70, 7, 255, 135, 71, 12, 255, 140, 78, 10, 255, 141, 75, 9, 255, 141, 75, 7, 255, 140, 73, 8, 255, 135, 77, 5, 255, 129, 75, 6, 255, 131, 73, 7, 255, 126, 69, 4, 255, 124, 67, 9, 255, 124, 68, 5, 255, 122, 67, 6, 255, 83, 39, 8, 255, 73, 35, 5, 255, 92, 44, 4, 255, 8, 84, 93, 255, 1, 2, 5, 255, 4, 2, 10, 255, 2, 1, 5, 255, 1, 2, 9, 255, 2, 3, 4, 255, 2, 2, 4, 255, 0, 4, 6, 255, 0, 2, 13, 255, 1, 3, 20, 255, 2, 4, 20, 255, 0, 4, 14, 255, 1, 6, 12, 255, 0, 6, 12, 255, 1, 5, 11, 255, 2, 3, 8, 255, 1, 3, 8, 255, 1, 3, 8, 255, 0, 3, 8, 255, 1, 1, 9, 255, 3, 3, 9, 255, 3, 3, 8, 255, 2, 2, 12, 255, 2, 2, 12, 255, 2, 2, 8, 255, 1, 2, 5, 255, 1, 2, 7, 255, 1, 2, 7, 255, 2, 3, 8, 255, 2, 3, 8, 255, 1, 2, 7, 255, 1, 2, 6, 255, 0, 1, 5, 255, 0, 1, 5, 255, 0, 1, 6, 255, 1, 2, 6, 255, 1, 2, 7, 255, 1, 2, 8, 255, 0, 0, 6, 255, 1, 1, 3, 255, 1, 1, 2, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 2, 255, 0, 0, 5, 255, 0, 0, 4, 255, 2, 1, 1, 255, 2, 2, 2, 255, 0, 23, 15, 255, 0, 4, 0, 255, 5, 2, 13, 255, 2, 2, 11, 255, 4, 1, 5, 255, 1, 4, 3, 255, 1, 0, 43, 255, 6, 174, 229, 255, 3, 66, 117, 255, 2, 0, 0, 255, 6, 23, 116, 255, 3, 96, 228, 255, 6, 7, 10, 255, 3, 2, 4, 255, 3, 0, 3, 255, 2, 4, 1, 255, 3, 3, 2, 255, 4, 2, 3, 255, 5, 1, 2, 255, 6, 2, 3, 255, 2, 0, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 2, 2, 255, 2, 1, 1, 255, 2, 0, 1, 255, 2, 0, 1, 255, 2, 0, 1, 255, 1, 1, 1, 255, 2, 1, 2, 255, 2, 0, 1, 255, 3, 2, 1, 255, 3, 2, 1, 255, 3, 2, 1, 255, 4, 3, 1, 255, 3, 3, 2, 255, 1, 2, 1, 255, 9, 6, 0, 255, 12, 8, 2, 255, 16, 13, 6, 255, 22, 23, 10, 255, 30, 34, 18, 255, 37, 46, 27, 255, 44, 62, 48, 255, 46, 73, 62, 255, 44, 90, 72, 255, 56, 97, 76, 255, 51, 100, 78, 255, 54, 109, 87, 255, 56, 106, 90, 255, 67, 122, 111, 255, 84, 158, 149, 255, 100, 181, 172, 255, 129, 197, 185, 255, 143, 197, 179, 255, 127, 182, 158, 255, 103, 162, 128, 255, 78, 132, 93, 255, 63, 95, 58, 255, 44, 56, 12, 255, 39, 38, 11, 255, 33, 34, 11, 255, 39, 36, 12, 255, 41, 33, 10, 255, 43, 34, 6, 255, 50, 38, 6, 255, 52, 39, 6, 255, 53, 40, 6, 255, 46, 34, 3, 255, 41, 30, 7, 255, 46, 33, 9, 255, 46, 32, 3, 255, 53, 37, 7, 255, 53, 35, 4, 255, 43, 32, 6, 255, 46, 35, 6, 255, 43, 36, 12, 255, 54, 40, 10, 255, 70, 41, 2, 255, 74, 46, 6, 255, 70, 44, 7, 255, 78, 48, 8, 255, 87, 54, 7, 255, 90, 53, 3, 255, 94, 57, 4, 255, 87, 57, 2, 255, 88, 60, 3, 255, 87, 54, 6, 255, 100, 60, 3, 255, 109, 62, 6, 255, 105, 64, 8, 255, 104, 64, 0, 255, 96, 54, 9, 255, 80, 47, 6, 255, 72, 46, 6, 255, 74, 48, 5, 255, 78, 49, 3, 255, 75, 43, 5, 255, 81, 47, 8, 255, 75, 46, 3, 255, 67, 44, 6, 255, 72, 45, 4, 255, 79, 48, 10, 255, 78, 43, 10, 255, 82, 46, 9, 255, 81, 45, 7, 255, 83, 44, 4, 255, 93, 51, 8, 255, 101, 59, 11, 255, 101, 60, 7, 255, 99, 57, 4, 255, 93, 52, 5, 255, 95, 50, 11, 255, 94, 47, 12, 255, 96, 52, 9, 255, 95, 54, 4, 255, 92, 51, 1, 255, 93, 50, 7, 255, 96, 51, 9, 255, 99, 53, 3, 255, 95, 52, 13, 255, 93, 55, 11, 255, 95, 57, 5, 255, 97, 52, 6, 255, 89, 41, 4, 255, 100, 51, 10, 255, 125, 54, 7, 255, 108, 47, 8, 255, 124, 59, 9, 255, 149, 63, 1, 255, 131, 52, 3, 255, 131, 59, 7, 255, 151, 70, 1, 255, 159, 63, 6, 255, 148, 65, 8, 255, 149, 66, 4, 255, 156, 67, 10, 255, 161, 72, 4, 255, 164, 73, 7, 255, 164, 68, 10, 255, 168, 70, 4, 255, 171, 77, 1, 255, 161, 79, 6, 255, 150, 70, 7, 255, 136, 66, 5, 255, 111, 59, 7, 255, 98, 52, 5, 255, 103, 52, 12, 255, 105, 56, 5, 255, 116, 62, 9, 255, 130, 65, 10, 255, 136, 67, 7, 255, 136, 69, 9, 255, 141, 69, 4, 255, 139, 72, 4, 255, 122, 68, 0, 255, 110, 63, 10, 255, 114, 67, 15, 255, 109, 64, 2, 255, 118, 68, 0, 255, 115, 64, 10, 255, 111, 59, 22, 255, 110, 67, 11, 255, 103, 68, 5, 255, 113, 65, 17, 255, 108, 65, 18, 255, 103, 68, 7, 255, 107, 67, 8, 255, 109, 68, 11, 255, 113, 66, 16, 255, 114, 65, 12, 255, 112, 63, 11, 255, 114, 71, 11, 255, 107, 69, 7, 255, 109, 69, 13, 255, 118, 71, 11, 255, 118, 72, 8, 255, 118, 71, 13, 255, 124, 74, 11, 255, 146, 75, 10, 255, 160, 78, 8, 255, 136, 76, 2, 255, 121, 74, 14, 255, 128, 80, 16, 255, 147, 77, 6, 255, 142, 76, 7, 255, 121, 75, 13, 255, 131, 82, 10, 255, 152, 76, 2, 255, 154, 78, 9, 255, 145, 82, 5, 255, 144, 80, 7, 255, 150, 82, 16, 255, 131, 77, 9, 255, 122, 77, 14, 255, 118, 73, 20, 255, 119, 80, 12, 255, 125, 81, 14, 255, 123, 79, 19, 255, 118, 77, 14, 255, 128, 81, 15, 255, 117, 82, 19, 255, 118, 83, 13, 255, 130, 87, 10, 255, 138, 90, 8, 255, 133, 91, 14, 255, 136, 87, 13, 255, 137, 87, 11, 255, 136, 92, 11, 255, 140, 88, 19, 255, 144, 91, 21, 255, 144, 90, 15, 255, 152, 89, 16, 255, 154, 93, 14, 255, 153, 97, 24, 255, 168, 99, 21, 255, 168, 104, 16, 255, 172, 105, 12, 255, 168, 103, 11, 255, 162, 103, 15, 255, 158, 100, 19, 255, 154, 99, 19, 255, 152, 102, 17, 255, 159, 104, 17, 255, 159, 100, 22, 255, 155, 104, 19, 255, 162, 105, 10, 255, 170, 104, 16, 255, 166, 106, 13, 255, 167, 106, 20, 255, 167, 104, 30, 255, 166, 105, 16, 255, 160, 106, 14, 255, 165, 105, 21, 255, 172, 110, 21, 255, 173, 110, 20, 255, 178, 113, 9, 255, 181, 114, 15, 255, 177, 113, 15, 255, 179, 119, 11, 255, 185, 125, 11, 255, 189, 128, 12, 255, 193, 131, 4, 255, 190, 126, 6, 255, 184, 123, 13, 255, 177, 118, 17, 255, 175, 116, 16, 255, 178, 113, 6, 255, 181, 110, 12, 255, 188, 101, 14, 255, 187, 103, 4, 255, 188, 116, 23, 255, 187, 114, 27, 255, 178, 101, 12, 255, 180, 105, 5, 255, 178, 100, 4, 255, 183, 97, 1, 255, 186, 100, 3, 255, 179, 101, 11, 255, 170, 101, 10, 255, 170, 102, 4, 255, 170, 98, 2, 255, 174, 99, 5, 255, 173, 97, 4, 255, 175, 98, 6, 255, 173, 96, 6, 255, 169, 91, 6, 255, 169, 95, 5, 255, 174, 101, 4, 255, 178, 98, 3, 255, 183, 95, 5, 255, 177, 89, 2, 255, 178, 96, 4, 255, 181, 103, 4, 255, 179, 101, 12, 255, 179, 102, 16, 255, 184, 108, 17, 255, 182, 107, 18, 255, 178, 104, 12, 255, 182, 104, 14, 255, 182, 102, 5, 255, 178, 96, 4, 255, 179, 98, 2, 255, 183, 100, 3, 255, 181, 93, 4, 255, 179, 74, 6, 255, 178, 85, 3, 255, 200, 110, 6, 255, 186, 88, 8, 255, 125, 55, 2, 255, 111, 52, 3, 255, 115, 57, 3, 255, 124, 57, 7, 255, 118, 51, 8, 255, 113, 48, 5, 255, 117, 54, 7, 255, 112, 51, 1, 255, 122, 59, 8, 255, 112, 53, 11, 255, 98, 46, 4, 255, 97, 46, 5, 255, 106, 54, 8, 255, 122, 63, 8, 255, 135, 70, 7, 255, 147, 78, 5, 255, 168, 93, 10, 255, 168, 88, 8, 255, 157, 82, 8, 255, 153, 89, 8, 255, 155, 93, 7, 255, 153, 86, 3, 255, 162, 96, 6, 255, 166, 98, 10, 255, 165, 93, 9, 255, 163, 89, 11, 255, 161, 87, 11, 255, 159, 87, 9, 255, 159, 84, 7, 255, 159, 87, 5, 255, 156, 87, 7, 255, 153, 85, 11, 255, 148, 80, 10, 255, 153, 85, 5, 255, 153, 88, 0, 255, 151, 86, 3, 255, 153, 84, 8, 255, 152, 81, 4, 255, 152, 79, 12, 255, 147, 80, 14, 255, 144, 85, 9, 255, 142, 83, 8, 255, 142, 80, 5, 255, 133, 77, 7, 255, 131, 76, 9, 255, 133, 72, 6, 255, 134, 71, 12, 255, 130, 67, 10, 255, 128, 68, 7, 255, 123, 67, 9, 255, 124, 64, 7, 255, 120, 58, 2, 255, 113, 57, 1, 255, 111, 57, 5, 255, 100, 43, 8, 255, 79, 39, 3, 255, 79, 38, 6, 255, 1, 5, 13, 255, 4, 3, 21, 255, 1, 6, 13, 255, 0, 4, 7, 255, 0, 3, 9, 255, 1, 2, 5, 255, 1, 1, 0, 255, 0, 0, 0, 255, 1, 1, 5, 255, 1, 2, 10, 255, 0, 2, 14, 255, 1, 5, 18, 255, 4, 7, 19, 255, 2, 5, 12, 255, 1, 5, 12, 255, 1, 5, 11, 255, 0, 4, 9, 255, 2, 5, 10, 255, 1, 4, 9, 255, 2, 2, 10, 255, 2, 3, 7, 255, 2, 4, 3, 255, 1, 3, 3, 255, 1, 2, 8, 255, 1, 1, 9, 255, 0, 1, 8, 255, 1, 2, 6, 255, 0, 1, 6, 255, 1, 2, 7, 255, 1, 2, 7, 255, 1, 2, 7, 255, 1, 2, 6, 255, 1, 2, 6, 255, 1, 2, 6, 255, 1, 2, 4, 255, 0, 1, 3, 255, 0, 1, 4, 255, 2, 3, 7, 255, 1, 1, 5, 255, 1, 1, 3, 255, 1, 1, 3, 255, 1, 1, 1, 255, 1, 1, 2, 255, 1, 1, 3, 255, 2, 0, 4, 255, 6, 2, 4, 255, 0, 2, 2, 255, 3, 2, 5, 255, 2, 0, 1, 255, 5, 2, 10, 255, 2, 4, 13, 255, 2, 0, 10, 255, 3, 3, 5, 255, 1, 0, 0, 255, 6, 93, 158, 255, 3, 166, 212, 255, 4, 8, 3, 255, 1, 0, 8, 255, 1, 47, 199, 255, 3, 28, 106, 255, 3, 0, 0, 255, 2, 2, 5, 255, 1, 2, 0, 255, 3, 2, 3, 255, 3, 3, 2, 255, 3, 1, 2, 255, 2, 0, 1, 255, 2, 0, 0, 255, 1, 0, 0, 255, 2, 2, 2, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 2, 0, 1, 255, 1, 0, 0, 255, 1, 1, 1, 255, 3, 3, 3, 255, 1, 1, 1, 255, 1, 0, 0, 255, 4, 3, 1, 255, 5, 4, 2, 255, 3, 2, 0, 255, 4, 3, 0, 255, 3, 3, 2, 255, 7, 9, 6, 255, 13, 12, 6, 255, 17, 15, 7, 255, 23, 24, 6, 255, 32, 38, 15, 255, 39, 47, 32, 255, 41, 66, 47, 255, 42, 74, 59, 255, 44, 83, 68, 255, 41, 91, 70, 255, 53, 96, 74, 255, 51, 97, 75, 255, 48, 100, 82, 255, 50, 112, 93, 255, 68, 140, 121, 255, 92, 167, 152, 255, 115, 182, 168, 255, 134, 192, 171, 255, 130, 185, 155, 255, 113, 172, 138, 255, 95, 148, 111, 255, 75, 121, 80, 255, 56, 92, 51, 255, 34, 53, 19, 255, 38, 43, 8, 255, 38, 36, 10, 255, 36, 36, 4, 255, 40, 37, 11, 255, 42, 35, 10, 255, 46, 39, 2, 255, 56, 39, 2, 255, 59, 36, 6, 255, 57, 32, 6, 255, 53, 31, 5, 255, 44, 31, 6, 255, 45, 34, 2, 255, 53, 35, 1, 255, 45, 32, 2, 255, 41, 36, 7, 255, 48, 36, 9, 255, 47, 32, 13, 255, 56, 41, 10, 255, 68, 45, 2, 255, 73, 46, 2, 255, 81, 49, 8, 255, 83, 49, 4, 255, 82, 53, 2, 255, 81, 54, 1, 255, 85, 55, 2, 255, 87, 55, 3, 255, 89, 57, 6, 255, 86, 50, 15, 255, 94, 57, 7, 255, 100, 62, 2, 255, 106, 63, 7, 255, 108, 54, 6, 255, 83, 48, 12, 255, 76, 43, 10, 255, 73, 47, 9, 255, 78, 45, 10, 255, 82, 40, 10, 255, 77, 47, 6, 255, 72, 45, 4, 255, 76, 47, 10, 255, 80, 53, 3, 255, 79, 46, 0, 255, 84, 47, 9, 255, 83, 46, 8, 255, 76, 41, 8, 255, 80, 47, 9, 255, 88, 47, 3, 255, 100, 59, 9, 255, 108, 67, 7, 255, 107, 64, 13, 255, 100, 58, 10, 255, 92, 52, 6, 255, 89, 52, 5, 255, 89, 54, 3, 255, 90, 54, 4, 255, 93, 56, 7, 255, 92, 55, 6, 255, 90, 54, 9, 255, 91, 51, 14, 255, 101, 49, 10, 255, 100, 53, 2, 255, 95, 52, 5, 255, 95, 49, 17, 255, 93, 49, 14, 255, 96, 54, 4, 255, 98, 52, 13, 255, 91, 44, 7, 255, 92, 48, 9, 255, 124, 59, 4, 255, 126, 53, 1, 255, 107, 50, 3, 255, 129, 64, 10, 255, 155, 65, 14, 255, 135, 56, 11, 255, 128, 61, 6, 255, 153, 69, 1, 255, 159, 70, 5, 255, 149, 66, 15, 255, 153, 71, 12, 255, 152, 75, 8, 255, 154, 66, 7, 255, 161, 66, 6, 255, 157, 71, 5, 255, 166, 75, 0, 255, 176, 78, 6, 255, 166, 75, 4, 255, 149, 72, 4, 255, 152, 75, 11, 255, 145, 72, 8, 255, 138, 65, 1, 255, 149, 70, 7, 255, 137, 64, 6, 255, 117, 63, 7, 255, 118, 62, 14, 255, 135, 65, 7, 255, 148, 69, 14, 255, 146, 71, 4, 255, 132, 74, 3, 255, 112, 67, 10, 255, 115, 64, 12, 255, 117, 62, 14, 255, 108, 62, 4, 255, 110, 65, 8, 255, 106, 65, 9, 255, 110, 65, 14, 255, 111, 69, 11, 255, 106, 68, 6, 255, 112, 70, 13, 255, 106, 68, 9, 255, 109, 68, 14, 255, 118, 66, 10, 255, 113, 65, 18, 255, 108, 68, 5, 255, 110, 70, 4, 255, 112, 68, 9, 255, 116, 70, 16, 255, 112, 72, 13, 255, 118, 76, 6, 255, 143, 75, 5, 255, 158, 74, 10, 255, 145, 75, 2, 255, 130, 78, 1, 255, 126, 76, 16, 255, 133, 81, 8, 255, 127, 76, 3, 255, 122, 77, 13, 255, 113, 76, 6, 255, 118, 77, 16, 255, 130, 77, 13, 255, 144, 79, 11, 255, 126, 79, 6, 255, 128, 81, 8, 255, 127, 76, 9, 255, 126, 77, 15, 255, 124, 74, 12, 255, 120, 77, 8, 255, 136, 80, 15, 255, 166, 84, 12, 255, 157, 87, 10, 255, 128, 78, 21, 255, 130, 81, 14, 255, 147, 85, 13, 255, 156, 91, 9, 255, 167, 92, 10, 255, 173, 89, 5, 255, 166, 91, 8, 255, 156, 90, 8, 255, 141, 89, 13, 255, 138, 92, 13, 255, 144, 93, 18, 255, 153, 95, 22, 255, 167, 96, 15, 255, 174, 97, 6, 255, 177, 98, 14, 255, 173, 96, 16, 255, 180, 102, 3, 255, 181, 99, 10, 255, 178, 99, 7, 255, 178, 98, 6, 255, 174, 100, 13, 255, 160, 104, 11, 255, 158, 101, 12, 255, 170, 101, 19, 255, 169, 103, 25, 255, 156, 102, 18, 255, 159, 105, 21, 255, 160, 104, 26, 255, 158, 104, 13, 255, 162, 106, 17, 255, 159, 109, 19, 255, 163, 105, 20, 255, 165, 103, 26, 255, 155, 104, 14, 255, 169, 107, 23, 255, 179, 118, 13, 255, 172, 112, 6, 255, 177, 116, 16, 255, 178, 116, 14, 255, 178, 117, 12, 255, 181, 120, 11, 255, 184, 121, 10, 255, 190, 124, 12, 255, 195, 129, 7, 255, 198, 133, 5, 255, 191, 127, 16, 255, 180, 120, 10, 255, 177, 120, 5, 255, 175, 115, 6, 255, 182, 115, 1, 255, 188, 104, 6, 255, 184, 98, 11, 255, 187, 117, 7, 255, 189, 120, 16, 255, 178, 112, 15, 255, 171, 107, 4, 255, 175, 104, 13, 255, 182, 106, 10, 255, 178, 102, 7, 255, 172, 101, 17, 255, 171, 105, 11, 255, 174, 104, 3, 255, 176, 104, 5, 255, 176, 102, 4, 255, 174, 98, 1, 255, 176, 98, 4, 255, 178, 100, 7, 255, 177, 97, 6, 255, 175, 95, 4, 255, 177, 98, 3, 255, 176, 99, 5, 255, 177, 100, 7, 255, 176, 97, 7, 255, 183, 101, 5, 255, 181, 98, 0, 255, 179, 96, 10, 255, 187, 105, 18, 255, 188, 108, 12, 255, 183, 104, 9, 255, 182, 104, 7, 255, 183, 103, 15, 255, 184, 103, 9, 255, 174, 93, 4, 255, 175, 95, 6, 255, 182, 101, 8, 255, 185, 99, 2, 255, 168, 74, 4, 255, 178, 90, 4, 255, 201, 116, 2, 255, 188, 92, 1, 255, 122, 54, 7, 255, 113, 55, 11, 255, 120, 52, 5, 255, 125, 55, 3, 255, 122, 50, 2, 255, 117, 49, 5, 255, 116, 54, 3, 255, 118, 61, 1, 255, 121, 61, 7, 255, 115, 62, 12, 255, 106, 55, 8, 255, 104, 51, 8, 255, 118, 57, 8, 255, 144, 76, 12, 255, 157, 86, 3, 255, 160, 86, 8, 255, 168, 90, 13, 255, 171, 92, 7, 255, 166, 94, 8, 255, 158, 95, 8, 255, 154, 90, 8, 255, 158, 89, 13, 255, 164, 94, 11, 255, 165, 93, 8, 255, 165, 94, 6, 255, 163, 90, 5, 255, 161, 88, 8, 255, 161, 87, 12, 255, 159, 88, 3, 255, 156, 85, 6, 255, 152, 84, 10, 255, 152, 85, 7, 255, 149, 83, 9, 255, 150, 83, 11, 255, 150, 83, 8, 255, 151, 79, 8, 255, 146, 79, 8, 255, 143, 80, 5, 255, 145, 80, 8, 255, 141, 77, 8, 255, 142, 79, 4, 255, 143, 73, 6, 255, 140, 73, 8, 255, 130, 72, 13, 255, 123, 71, 12, 255, 126, 68, 7, 255, 123, 64, 7, 255, 123, 62, 6, 255, 119, 62, 3, 255, 117, 64, 5, 255, 115, 60, 3, 255, 112, 56, 6, 255, 99, 45, 8, 255, 82, 32, 1, 255, 90, 38, 3, 255, 93, 37, 6, 255, 85, 28, 1, 255, 11, 6, 21, 255, 0, 5, 13, 255, 1, 4, 10, 255, 2, 7, 19, 255, 1, 3, 11, 255, 4, 2, 7, 255, 4, 2, 6, 255, 1, 1, 5, 255, 0, 0, 4, 255, 1, 0, 3, 255, 0, 1, 5, 255, 2, 4, 9, 255, 1, 3, 11, 255, 3, 4, 14, 255, 1, 6, 13, 255, 2, 7, 13, 255, 1, 6, 10, 255, 1, 5, 10, 255, 2, 3, 8, 255, 4, 4, 11, 255, 4, 5, 10, 255, 1, 5, 6, 255, 1, 5, 5, 255, 1, 4, 8, 255, 1, 3, 9, 255, 1, 2, 9, 255, 1, 2, 6, 255, 1, 2, 6, 255, 1, 2, 6, 255, 1, 2, 6, 255, 1, 2, 6, 255, 1, 2, 6, 255, 0, 1, 6, 255, 1, 2, 6, 255, 2, 3, 7, 255, 1, 2, 5, 255, 1, 2, 5, 255, 1, 2, 6, 255, 0, 1, 5, 255, 0, 1, 5, 255, 1, 1, 3, 255, 1, 1, 3, 255, 1, 1, 3, 255, 1, 1, 3, 255, 1, 0, 3, 255, 1, 1, 2, 255, 2, 1, 5, 255, 4, 0, 3, 255, 4, 6, 15, 255, 1, 10, 21, 255, 5, 4, 12, 255, 3, 2, 3, 255, 2, 1, 0, 255, 3, 5, 51, 255, 9, 174, 242, 255, 3, 62, 77, 255, 2, 0, 0, 255, 7, 15, 111, 255, 6, 42, 195, 255, 2, 7, 18, 255, 0, 1, 1, 255, 0, 1, 0, 255, 4, 0, 3, 255, 5, 0, 3, 255, 1, 0, 0, 255, 2, 0, 1, 255, 2, 0, 1, 255, 2, 0, 1, 255, 2, 0, 1, 255, 1, 1, 1, 255, 2, 1, 2, 255, 2, 0, 1, 255, 2, 0, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 2, 2, 2, 255, 2, 2, 1, 255, 3, 2, 0, 255, 3, 2, 0, 255, 5, 2, 0, 255, 8, 4, 1, 255, 8, 4, 1, 255, 7, 6, 1, 255, 8, 12, 4, 255, 17, 18, 13, 255, 27, 29, 20, 255, 31, 39, 21, 255, 35, 50, 27, 255, 42, 64, 38, 255, 42, 73, 48, 255, 45, 77, 56, 255, 47, 84, 63, 255, 44, 86, 60, 255, 54, 86, 63, 255, 54, 88, 66, 255, 54, 98, 79, 255, 60, 125, 104, 255, 75, 154, 133, 255, 98, 172, 155, 255, 118, 182, 167, 255, 121, 184, 158, 255, 111, 173, 138, 255, 101, 161, 121, 255, 85, 136, 97, 255, 73, 115, 73, 255, 60, 94, 37, 255, 39, 60, 14, 255, 33, 39, 13, 255, 35, 39, 9, 255, 32, 33, 9, 255, 35, 33, 2, 255, 44, 39, 4, 255, 48, 38, 3, 255, 59, 41, 5, 255, 55, 35, 6, 255, 43, 30, 7, 255, 46, 29, 9, 255, 51, 31, 6, 255, 45, 31, 5, 255, 38, 31, 5, 255, 42, 36, 7, 255, 34, 31, 8, 255, 48, 36, 4, 255, 58, 39, 8, 255, 62, 44, 5, 255, 70, 47, 6, 255, 76, 44, 7, 255, 81, 46, 5, 255, 76, 46, 2, 255, 79, 52, 4, 255, 82, 55, 1, 255, 86, 54, 6, 255, 88, 55, 8, 255, 89, 56, 4, 255, 86, 56, 11, 255, 86, 56, 4, 255, 98, 69, 0, 255, 103, 66, 4, 255, 101, 53, 8, 255, 78, 50, 8, 255, 74, 44, 7, 255, 82, 49, 0, 255, 81, 43, 2, 255, 77, 38, 7, 255, 75, 49, 10, 255, 68, 43, 5, 255, 73, 43, 7, 255, 80, 47, 6, 255, 79, 46, 4, 255, 82, 46, 7, 255, 85, 51, 6, 255, 81, 47, 4, 255, 86, 52, 6, 255, 93, 54, 8, 255, 102, 63, 3, 255, 107, 66, 4, 255, 104, 62, 4, 255, 97, 57, 8, 255, 91, 53, 8, 255, 88, 54, 5, 255, 90, 54, 8, 255, 93, 54, 10, 255, 93, 52, 7, 255, 91, 51, 2, 255, 92, 53, 3, 255, 95, 55, 6, 255, 99, 53, 4, 255, 97, 50, 6, 255, 98, 49, 8, 255, 92, 50, 8, 255, 92, 50, 5, 255, 95, 54, 7, 255, 86, 53, 13, 255, 90, 52, 4, 255, 100, 52, 7, 255, 106, 52, 7, 255, 92, 48, 2, 255, 101, 55, 12, 255, 126, 59, 10, 255, 126, 55, 4, 255, 125, 52, 7, 255, 131, 63, 3, 255, 142, 66, 9, 255, 137, 57, 11, 255, 131, 54, 13, 255, 144, 61, 7, 255, 148, 65, 7, 255, 158, 70, 4, 255, 159, 70, 7, 255, 153, 72, 12, 255, 155, 72, 3, 255, 151, 69, 12, 255, 146, 71, 11, 255, 161, 68, 8, 255, 164, 71, 3, 255, 164, 70, 6, 255, 165, 69, 2, 255, 168, 73, 5, 255, 169, 78, 9, 255, 170, 77, 5, 255, 150, 76, 8, 255, 139, 71, 13, 255, 140, 63, 9, 255, 136, 69, 8, 255, 144, 71, 7, 255, 147, 79, 6, 255, 136, 72, 6, 255, 126, 70, 15, 255, 120, 68, 20, 255, 115, 61, 14, 255, 113, 67, 18, 255, 112, 66, 14, 255, 109, 67, 6, 255, 108, 65, 14, 255, 113, 66, 26, 255, 111, 71, 13, 255, 110, 67, 12, 255, 110, 64, 12, 255, 109, 67, 13, 255, 110, 69, 15, 255, 111, 71, 10, 255, 111, 65, 7, 255, 119, 68, 20, 255, 125, 73, 17, 255, 117, 74, 10, 255, 129, 78, 11, 255, 129, 72, 6, 255, 120, 74, 7, 255, 125, 77, 10, 255, 128, 77, 19, 255, 126, 76, 13, 255, 124, 75, 14, 255, 124, 76, 21, 255, 123, 77, 11, 255, 118, 70, 18, 255, 123, 76, 15, 255, 125, 77, 4, 255, 122, 76, 6, 255, 136, 84, 14, 255, 137, 77, 13, 255, 121, 74, 15, 255, 121, 75, 10, 255, 150, 86, 8, 255, 156, 84, 5, 255, 157, 84, 7, 255, 138, 81, 6, 255, 128, 80, 6, 255, 153, 88, 9, 255, 171, 87, 10, 255, 171, 89, 13, 255, 162, 92, 9, 255, 167, 89, 6, 255, 168, 88, 10, 255, 148, 88, 9, 255, 141, 88, 14, 255, 137, 88, 20, 255, 140, 88, 18, 255, 158, 90, 12, 255, 181, 94, 16, 255, 180, 94, 12, 255, 179, 98, 10, 255, 177, 94, 4, 255, 176, 97, 5, 255, 177, 99, 7, 255, 174, 99, 5, 255, 179, 98, 5, 255, 177, 103, 13, 255, 157, 100, 19, 255, 153, 100, 20, 255, 163, 99, 11, 255, 163, 101, 17, 255, 157, 104, 12, 255, 162, 101, 18, 255, 161, 102, 14, 255, 158, 103, 12, 255, 167, 105, 21, 255, 163, 106, 18, 255, 163, 103, 18, 255, 166, 104, 17, 255, 162, 107, 23, 255, 173, 110, 14, 255, 178, 112, 12, 255, 178, 115, 5, 255, 177, 114, 10, 255, 179, 115, 10, 255, 181, 115, 1, 255, 183, 115, 12, 255, 186, 120, 14, 255, 193, 129, 13, 255, 197, 130, 9, 255, 199, 131, 7, 255, 198, 132, 10, 255, 189, 122, 14, 255, 183, 116, 19, 255, 179, 116, 9, 255, 188, 118, 10, 255, 196, 119, 19, 255, 183, 106, 13, 255, 190, 122, 14, 255, 189, 123, 16, 255, 182, 114, 20, 255, 172, 106, 17, 255, 170, 105, 16, 255, 175, 107, 10, 255, 177, 103, 10, 255, 178, 105, 10, 255, 177, 106, 5, 255, 174, 102, 7, 255, 175, 103, 6, 255, 174, 103, 6, 255, 171, 102, 5, 255, 170, 100, 4, 255, 170, 100, 6, 255, 173, 95, 2, 255, 175, 92, 1, 255, 177, 96, 5, 255, 176, 101, 7, 255, 174, 101, 6, 255, 175, 99, 6, 255, 181, 101, 4, 255, 176, 97, 3, 255, 176, 95, 13, 255, 185, 109, 18, 255, 184, 111, 9, 255, 179, 105, 7, 255, 183, 106, 13, 255, 184, 102, 13, 255, 184, 103, 11, 255, 177, 96, 7, 255, 177, 97, 5, 255, 181, 94, 3, 255, 190, 98, 4, 255, 190, 102, 4, 255, 201, 107, 5, 255, 199, 100, 2, 255, 166, 71, 11, 255, 113, 53, 5, 255, 114, 53, 7, 255, 119, 51, 3, 255, 119, 52, 7, 255, 119, 51, 1, 255, 120, 57, 2, 255, 124, 64, 8, 255, 121, 62, 9, 255, 120, 60, 5, 255, 131, 67, 4, 255, 137, 75, 9, 255, 138, 75, 7, 255, 145, 76, 8, 255, 151, 77, 6, 255, 159, 82, 8, 255, 166, 88, 13, 255, 168, 89, 11, 255, 168, 88, 6, 255, 161, 88, 5, 255, 160, 95, 10, 255, 155, 90, 8, 255, 156, 88, 9, 255, 159, 86, 10, 255, 160, 86, 10, 255, 163, 88, 11, 255, 161, 85, 6, 255, 159, 86, 7, 255, 155, 83, 6, 255, 157, 87, 2, 255, 159, 88, 8, 255, 154, 84, 14, 255, 152, 82, 11, 255, 152, 85, 6, 255, 147, 82, 9, 255, 143, 75, 9, 255, 146, 75, 7, 255, 143, 78, 10, 255, 140, 77, 6, 255, 140, 77, 7, 255, 138, 75, 9, 255, 135, 73, 8, 255, 132, 71, 11, 255, 133, 70, 10, 255, 128, 68, 11, 255, 123, 65, 8, 255, 124, 64, 3, 255, 121, 62, 5, 255, 115, 63, 11, 255, 110, 61, 10, 255, 109, 60, 9, 255, 106, 52, 1, 255, 106, 49, 5, 255, 102, 45, 12, 255, 84, 34, 6, 255, 68, 28, 0, 255, 81, 24, 4, 255, 82, 26, 3, 255, 7, 9, 8, 255, 6, 4, 3, 255, 2, 2, 9, 255, 0, 3, 9, 255, 1, 4, 11, 255, 2, 4, 11, 255, 3, 2, 11, 255, 0, 1, 8, 255, 0, 1, 5, 255, 0, 1, 2, 255, 1, 0, 0, 255, 3, 2, 4, 255, 0, 0, 4, 255, 3, 2, 10, 255, 2, 4, 11, 255, 2, 7, 11, 255, 2, 7, 11, 255, 1, 5, 10, 255, 1, 4, 9, 255, 3, 4, 11, 255, 1, 4, 12, 255, 2, 4, 14, 255, 2, 5, 13, 255, 1, 4, 10, 255, 0, 4, 7, 255, 1, 4, 7, 255, 3, 3, 8, 255, 1, 2, 6, 255, 1, 2, 6, 255, 1, 2, 6, 255, 0, 1, 5, 255, 0, 1, 5, 255, 1, 2, 8, 255, 1, 2, 7, 255, 1, 2, 6, 255, 1, 2, 6, 255, 1, 2, 6, 255, 1, 2, 6, 255, 0, 1, 5, 255, 0, 1, 5, 255, 1, 1, 3, 255, 1, 1, 3, 255, 1, 1, 3, 255, 1, 1, 3, 255, 1, 0, 2, 255, 4, 0, 2, 255, 4, 1, 1, 255, 0, 8, 9, 255, 7, 28, 55, 255, 3, 19, 49, 255, 3, 13, 23, 255, 4, 3, 4, 255, 0, 0, 0, 255, 7, 93, 160, 255, 7, 142, 202, 255, 0, 3, 9, 255, 6, 1, 25, 255, 2, 28, 198, 255, 0, 17, 71, 255, 4, 0, 0, 255, 5, 4, 3, 255, 3, 2, 0, 255, 2, 0, 5, 255, 2, 0, 5, 255, 2, 0, 1, 255, 2, 0, 1, 255, 3, 1, 2, 255, 3, 1, 2, 255, 2, 0, 1, 255, 0, 0, 0, 255, 1, 0, 1, 255, 2, 0, 1, 255, 2, 0, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 2, 2, 1, 255, 1, 1, 0, 255, 2, 2, 0, 255, 4, 3, 1, 255, 6, 4, 2, 255, 7, 3, 1, 255, 6, 4, 1, 255, 13, 12, 7, 255, 15, 16, 6, 255, 17, 20, 9, 255, 24, 31, 21, 255, 30, 43, 23, 255, 32, 50, 34, 255, 32, 57, 45, 255, 35, 69, 41, 255, 35, 72, 46, 255, 42, 76, 51, 255, 42, 82, 55, 255, 43, 83, 57, 255, 50, 84, 61, 255, 48, 87, 63, 255, 59, 106, 92, 255, 72, 137, 124, 255, 82, 155, 139, 255, 103, 171, 155, 255, 116, 183, 159, 255, 107, 174, 139, 255, 100, 160, 124, 255, 93, 150, 111, 255, 75, 130, 79, 255, 66, 109, 63, 255, 61, 88, 32, 255, 47, 62, 10, 255, 34, 42, 9, 255, 31, 34, 12, 255, 41, 33, 10, 255, 43, 33, 6, 255, 48, 43, 2, 255, 51, 43, 4, 255, 41, 33, 3, 255, 42, 38, 6, 255, 38, 31, 5, 255, 42, 32, 6, 255, 49, 33, 7, 255, 48, 33, 7, 255, 43, 33, 7, 255, 46, 35, 6, 255, 58, 33, 3, 255, 55, 39, 7, 255, 62, 45, 15, 255, 71, 42, 6, 255, 75, 45, 5, 255, 69, 47, 5, 255, 70, 49, 7, 255, 74, 51, 5, 255, 80, 53, 5, 255, 84, 51, 7, 255, 87, 51, 5, 255, 89, 55, 6, 255, 86, 53, 4, 255, 88, 56, 2, 255, 94, 59, 8, 255, 102, 63, 3, 255, 97, 61, 7, 255, 86, 49, 6, 255, 78, 45, 0, 255, 76, 47, 6, 255, 76, 43, 4, 255, 78, 51, 4, 255, 72, 45, 4, 255, 76, 40, 3, 255, 84, 45, 4, 255, 80, 45, 6, 255, 79, 44, 12, 255, 79, 47, 10, 255, 81, 50, 7, 255, 82, 49, 5, 255, 85, 48, 0, 255, 92, 51, 6, 255, 92, 55, 11, 255, 98, 60, 3, 255, 105, 66, 2, 255, 104, 64, 3, 255, 94, 58, 5, 255, 88, 57, 5, 255, 90, 56, 6, 255, 91, 53, 9, 255, 92, 50, 10, 255, 94, 50, 10, 255, 95, 52, 8, 255, 97, 54, 7, 255, 95, 53, 6, 255, 96, 52, 6, 255, 101, 53, 9, 255, 96, 51, 6, 255, 97, 50, 12, 255, 89, 48, 9, 255, 97, 56, 7, 255, 100, 55, 10, 255, 100, 53, 3, 255, 103, 55, 12, 255, 92, 48, 12, 255, 86, 49, 5, 255, 98, 52, 4, 255, 123, 58, 12, 255, 137, 57, 15, 255, 125, 57, 10, 255, 115, 55, 10, 255, 128, 58, 11, 255, 116, 52, 6, 255, 102, 42, 12, 255, 125, 54, 11, 255, 144, 62, 2, 255, 156, 71, 2, 255, 153, 68, 5, 255, 159, 69, 11, 255, 154, 70, 10, 255, 148, 70, 5, 255, 154, 64, 6, 255, 155, 67, 13, 255, 161, 69, 6, 255, 161, 68, 6, 255, 158, 71, 6, 255, 156, 68, 10, 255, 161, 70, 5, 255, 160, 75, 1, 255, 168, 75, 1, 255, 172, 76, 8, 255, 161, 78, 3, 255, 158, 80, 8, 255, 141, 73, 11, 255, 139, 67, 10, 255, 139, 62, 2, 255, 137, 66, 7, 255, 149, 78, 6, 255, 137, 75, 12, 255, 116, 68, 14, 255, 118, 67, 12, 255, 118, 72, 6, 255, 114, 70, 11, 255, 117, 67, 12, 255, 116, 70, 9, 255, 118, 69, 5, 255, 105, 71, 9, 255, 108, 66, 14, 255, 111, 69, 11, 255, 110, 73, 10, 255, 110, 67, 14, 255, 127, 71, 12, 255, 152, 81, 11, 255, 130, 72, 6, 255, 119, 74, 9, 255, 121, 71, 7, 255, 131, 76, 8, 255, 134, 75, 6, 255, 132, 78, 12, 255, 133, 78, 5, 255, 128, 75, 4, 255, 125, 77, 7, 255, 123, 78, 10, 255, 119, 74, 13, 255, 122, 77, 6, 255, 127, 80, 5, 255, 126, 80, 10, 255, 127, 76, 11, 255, 134, 76, 16, 255, 125, 74, 17, 255, 122, 74, 12, 255, 149, 86, 11, 255, 144, 79, 7, 255, 136, 78, 10, 255, 137, 83, 14, 255, 140, 84, 10, 255, 167, 87, 11, 255, 164, 83, 11, 255, 156, 79, 8, 255, 159, 87, 9, 255, 164, 89, 9, 255, 152, 85, 11, 255, 136, 88, 9, 255, 142, 93, 8, 255, 160, 95, 8, 255, 158, 94, 15, 255, 155, 92, 9, 255, 170, 92, 10, 255, 175, 95, 11, 255, 177, 104, 8, 255, 173, 98, 10, 255, 176, 96, 15, 255, 173, 106, 14, 255, 177, 107, 11, 255, 179, 105, 7, 255, 174, 106, 13, 255, 168, 99, 23, 255, 155, 101, 17, 255, 154, 97, 34, 255, 157, 101, 22, 255, 160, 102, 17, 255, 161, 101, 17, 255, 164, 102, 16, 255, 159, 102, 16, 255, 160, 104, 12, 255, 164, 105, 11, 255, 160, 106, 13, 255, 170, 106, 16, 255, 178, 110, 25, 255, 172, 108, 8, 255, 173, 108, 10, 255, 176, 112, 15, 255, 174, 112, 6, 255, 176, 114, 8, 255, 181, 118, 5, 255, 183, 116, 9, 255, 185, 120, 11, 255, 193, 128, 13, 255, 199, 133, 7, 255, 205, 134, 12, 255, 204, 132, 8, 255, 192, 119, 15, 255, 186, 112, 18, 255, 187, 117, 14, 255, 192, 122, 8, 255, 194, 127, 15, 255, 184, 117, 12, 255, 192, 122, 31, 255, 196, 128, 22, 255, 182, 119, 10, 255, 173, 106, 16, 255, 173, 105, 12, 255, 178, 106, 8, 255, 179, 107, 8, 255, 180, 110, 6, 255, 179, 108, 8, 255, 179, 105, 4, 255, 175, 104, 2, 255, 175, 102, 2, 255, 176, 103, 2, 255, 175, 101, 2, 255, 175, 99, 2, 255, 173, 99, 6, 255, 174, 95, 6, 255, 176, 95, 7, 255, 174, 99, 7, 255, 174, 100, 5, 255, 178, 100, 4, 255, 182, 102, 4, 255, 180, 103, 0, 255, 180, 101, 10, 255, 184, 107, 16, 255, 184, 109, 9, 255, 181, 104, 11, 255, 182, 105, 7, 255, 186, 106, 13, 255, 183, 105, 7, 255, 180, 99, 2, 255, 182, 96, 2, 255, 180, 84, 2, 255, 184, 83, 2, 255, 190, 86, 1, 255, 186, 92, 2, 255, 194, 90, 10, 255, 159, 65, 7, 255, 112, 48, 8, 255, 115, 52, 4, 255, 113, 53, 4, 255, 108, 54, 4, 255, 115, 56, 7, 255, 119, 59, 7, 255, 118, 57, 7, 255, 127, 65, 12, 255, 131, 67, 6, 255, 135, 66, 4, 255, 133, 67, 0, 255, 143, 78, 3, 255, 152, 82, 5, 255, 156, 79, 5, 255, 161, 82, 13, 255, 160, 81, 10, 255, 162, 83, 9, 255, 164, 85, 7, 255, 159, 84, 2, 255, 156, 88, 8, 255, 154, 87, 9, 255, 157, 89, 8, 255, 160, 89, 5, 255, 159, 87, 7, 255, 161, 86, 8, 255, 156, 82, 4, 255, 155, 82, 7, 255, 153, 81, 11, 255, 152, 81, 8, 255, 152, 80, 5, 255, 152, 79, 6, 255, 151, 81, 10, 255, 147, 79, 6, 255, 146, 78, 6, 255, 142, 75, 6, 255, 140, 75, 5, 255, 142, 77, 9, 255, 141, 75, 12, 255, 142, 78, 13, 255, 136, 74, 10, 255, 129, 71, 13, 255, 129, 67, 12, 255, 128, 63, 5, 255, 122, 62, 2, 255, 122, 68, 4, 255, 122, 66, 2, 255, 116, 62, 7, 255, 109, 59, 9, 255, 103, 54, 5, 255, 102, 50, 6, 255, 100, 47, 5, 255, 100, 44, 4, 255, 97, 41, 3, 255, 85, 34, 2, 255, 67, 20, 6, 255, 60, 14, 1, 255, 57, 21, 5, 255, 11, 16, 11, 255, 3, 1, 0, 255, 4, 4, 6, 255, 2, 2, 11, 255, 1, 2, 13, 255, 0, 7, 10, 255, 0, 2, 5, 255, 0, 3, 5, 255, 3, 4, 7, 255, 1, 2, 5, 255, 0, 0, 4, 255, 1, 0, 5, 255, 1, 0, 5, 255, 0, 1, 6, 255, 1, 2, 7, 255, 2, 4, 8, 255, 2, 5, 8, 255, 2, 5, 9, 255, 2, 6, 11, 255, 0, 4, 9, 255, 1, 4, 12, 255, 1, 5, 15, 255, 2, 6, 14, 255, 1, 5, 10, 255, 3, 6, 10, 255, 3, 6, 11, 255, 0, 3, 8, 255, 0, 2, 6, 255, 0, 3, 6, 255, 1, 2, 6, 255, 2, 3, 7, 255, 3, 4, 8, 255, 2, 3, 7, 255, 1, 2, 5, 255, 0, 0, 4, 255, 0, 1, 4, 255, 1, 1, 6, 255, 1, 2, 7, 255, 2, 1, 6, 255, 1, 0, 5, 255, 1, 0, 5, 255, 2, 1, 4, 255, 1, 1, 3, 255, 1, 1, 2, 255, 0, 1, 3, 255, 3, 1, 5, 255, 3, 0, 0, 255, 4, 27, 62, 255, 7, 45, 78, 255, 3, 30, 52, 255, 5, 28, 48, 255, 7, 13, 27, 255, 7, 25, 78, 255, 5, 164, 254, 255, 2, 60, 81, 255, 7, 0, 0, 255, 8, 17, 132, 255, 5, 22, 138, 255, 6, 2, 0, 255, 6, 5, 2, 255, 3, 2, 4, 255, 5, 0, 3, 255, 2, 1, 3, 255, 2, 2, 1, 255, 3, 1, 2, 255, 2, 0, 1, 255, 2, 0, 1, 255, 2, 0, 1, 255, 2, 1, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 2, 2, 2, 255, 0, 2, 1, 255, 1, 1, 1, 255, 1, 1, 0, 255, 3, 2, 0, 255, 3, 3, 1, 255, 2, 1, 0, 255, 4, 3, 1, 255, 3, 3, 0, 255, 7, 4, 0, 255, 10, 6, 3, 255, 11, 10, 5, 255, 16, 16, 8, 255, 19, 22, 12, 255, 24, 30, 19, 255, 28, 40, 22, 255, 29, 50, 23, 255, 32, 58, 36, 255, 33, 64, 48, 255, 35, 70, 49, 255, 39, 71, 50, 255, 44, 71, 51, 255, 43, 76, 53, 255, 41, 78, 55, 255, 46, 81, 63, 255, 46, 92, 73, 255, 62, 118, 100, 255, 75, 147, 126, 255, 90, 162, 138, 255, 110, 171, 146, 255, 111, 172, 140, 255, 98, 160, 124, 255, 96, 151, 114, 255, 85, 138, 90, 255, 74, 122, 70, 255, 64, 100, 53, 255, 58, 80, 30, 255, 50, 62, 10, 255, 41, 46, 6, 255, 36, 36, 14, 255, 31, 34, 5, 255, 49, 42, 8, 255, 56, 39, 8, 255, 44, 37, 1, 255, 47, 41, 6, 255, 46, 30, 8, 255, 48, 32, 2, 255, 50, 36, 2, 255, 47, 38, 9, 255, 46, 34, 6, 255, 52, 32, 1, 255, 55, 36, 6, 255, 57, 36, 4, 255, 55, 40, 2, 255, 62, 42, 4, 255, 68, 40, 1, 255, 70, 41, 7, 255, 77, 49, 7, 255, 74, 51, 2, 255, 72, 50, 4, 255, 79, 50, 4, 255, 85, 51, 3, 255, 88, 51, 6, 255, 88, 53, 7, 255, 87, 56, 4, 255, 88, 57, 2, 255, 92, 56, 9, 255, 95, 58, 8, 255, 76, 49, 8, 255, 71, 44, 7, 255, 76, 46, 5, 255, 72, 43, 7, 255, 81, 41, 12, 255, 80, 42, 12, 255, 70, 48, 3, 255, 73, 47, 1, 255, 82, 47, 5, 255, 81, 47, 3, 255, 79, 45, 7, 255, 77, 44, 5, 255, 83, 50, 5, 255, 89, 53, 10, 255, 95, 54, 7, 255, 95, 51, 9, 255, 91, 53, 10, 255, 95, 57, 8, 255, 103, 63, 3, 255, 106, 64, 8, 255, 96, 59, 3, 255, 90, 60, 4, 255, 92, 55, 5, 255, 94, 53, 5, 255, 96, 54, 12, 255, 96, 51, 12, 255, 97, 50, 9, 255, 98, 51, 9, 255, 98, 51, 9, 255, 96, 52, 6, 255, 101, 52, 16, 255, 104, 53, 14, 255, 97, 55, 10, 255, 97, 53, 12, 255, 101, 56, 14, 255, 103, 54, 2, 255, 104, 51, 10, 255, 98, 51, 12, 255, 93, 53, 7, 255, 91, 53, 2, 255, 104, 56, 8, 255, 116, 56, 4, 255, 126, 58, 3, 255, 124, 56, 1, 255, 116, 53, 1, 255, 115, 55, 5, 255, 115, 52, 11, 255, 133, 59, 11, 255, 129, 59, 7, 255, 148, 68, 6, 255, 144, 66, 3, 255, 141, 64, 16, 255, 148, 66, 9, 255, 138, 61, 4, 255, 135, 59, 6, 255, 145, 62, 5, 255, 165, 71, 6, 255, 157, 73, 1, 255, 155, 72, 1, 255, 161, 73, 6, 255, 159, 71, 5, 255, 155, 75, 5, 255, 155, 72, 6, 255, 158, 73, 7, 255, 145, 68, 3, 255, 136, 63, 6, 255, 159, 70, 12, 255, 172, 78, 10, 255, 169, 80, 7, 255, 150, 80, 11, 255, 113, 66, 5, 255, 128, 64, 15, 255, 151, 77, 10, 255, 133, 70, 13, 255, 134, 71, 4, 255, 134, 72, 5, 255, 129, 70, 9, 255, 129, 72, 6, 255, 114, 67, 14, 255, 114, 71, 6, 255, 111, 71, 6, 255, 115, 68, 8, 255, 116, 69, 3, 255, 108, 68, 6, 255, 112, 71, 6, 255, 130, 73, 4, 255, 144, 78, 10, 255, 137, 76, 6, 255, 133, 77, 9, 255, 131, 71, 11, 255, 144, 76, 9, 255, 139, 75, 1, 255, 131, 78, 13, 255, 134, 82, 11, 255, 134, 79, 6, 255, 131, 79, 4, 255, 124, 76, 9, 255, 120, 75, 16, 255, 123, 77, 21, 255, 124, 76, 6, 255, 127, 82, 10, 255, 125, 74, 6, 255, 124, 78, 8, 255, 126, 80, 10, 255, 131, 76, 12, 255, 129, 79, 13, 255, 124, 78, 16, 255, 133, 82, 12, 255, 133, 78, 5, 255, 136, 79, 14, 255, 155, 88, 15, 255, 134, 80, 11, 255, 130, 84, 9, 255, 158, 87, 12, 255, 157, 89, 11, 255, 143, 87, 12, 255, 139, 91, 12, 255, 145, 92, 5, 255, 152, 95, 6, 255, 153, 92, 18, 255, 161, 89, 12, 255, 172, 92, 15, 255, 177, 93, 14, 255, 180, 94, 4, 255, 183, 95, 12, 255, 176, 100, 11, 255, 178, 106, 13, 255, 183, 106, 10, 255, 178, 102, 8, 255, 173, 100, 12, 255, 180, 104, 13, 255, 166, 100, 10, 255, 161, 105, 13, 255, 160, 106, 16, 255, 159, 102, 16, 255, 158, 104, 14, 255, 162, 108, 14, 255, 162, 104, 17, 255, 177, 110, 12, 255, 178, 107, 7, 255, 165, 104, 14, 255, 179, 110, 20, 255, 174, 106, 15, 255, 168, 107, 12, 255, 168, 109, 10, 255, 171, 113, 14, 255, 173, 118, 13, 255, 171, 112, 13, 255, 177, 118, 8, 255, 181, 123, 9, 255, 185, 124, 7, 255, 194, 130, 2, 255, 205, 138, 6, 255, 207, 139, 3, 255, 196, 122, 12, 255, 187, 113, 9, 255, 187, 113, 8, 255, 189, 119, 9, 255, 195, 124, 7, 255, 197, 127, 13, 255, 199, 130, 20, 255, 196, 122, 17, 255, 191, 115, 17, 255, 192, 113, 11, 255, 184, 106, 11, 255, 182, 109, 5, 255, 181, 108, 10, 255, 181, 104, 8, 255, 187, 105, 2, 255, 187, 100, 5, 255, 183, 97, 4, 255, 182, 99, 5, 255, 179, 102, 5, 255, 178, 103, 6, 255, 176, 101, 6, 255, 177, 101, 6, 255, 173, 99, 4, 255, 173, 98, 5, 255, 174, 97, 7, 255, 175, 97, 6, 255, 179, 100, 7, 255, 180, 102, 6, 255, 182, 102, 5, 255, 184, 103, 4, 255, 184, 103, 12, 255, 186, 104, 15, 255, 187, 105, 16, 255, 185, 104, 15, 255, 185, 103, 10, 255, 182, 103, 6, 255, 181, 102, 5, 255, 185, 103, 5, 255, 184, 93, 2, 255, 176, 77, 2, 255, 177, 77, 1, 255, 185, 86, 3, 255, 191, 89, 2, 255, 194, 89, 7, 255, 143, 68, 9, 255, 113, 54, 8, 255, 118, 51, 7, 255, 105, 47, 7, 255, 118, 53, 8, 255, 123, 59, 3, 255, 123, 60, 6, 255, 123, 62, 5, 255, 128, 68, 4, 255, 132, 71, 6, 255, 136, 71, 8, 255, 130, 66, 4, 255, 135, 70, 7, 255, 146, 77, 10, 255, 150, 75, 3, 255, 159, 82, 3, 255, 161, 86, 8, 255, 159, 83, 10, 255, 158, 79, 3, 255, 156, 79, 0, 255, 147, 75, 2, 255, 139, 70, 3, 255, 143, 74, 3, 255, 151, 80, 3, 255, 156, 83, 8, 255, 159, 87, 6, 255, 158, 87, 2, 255, 154, 84, 3, 255, 150, 81, 8, 255, 147, 78, 10, 255, 148, 79, 11, 255, 147, 78, 4, 255, 146, 78, 3, 255, 147, 78, 10, 255, 149, 79, 10, 255, 143, 77, 3, 255, 136, 72, 3, 255, 133, 71, 5, 255, 135, 70, 11, 255, 136, 73, 10, 255, 130, 69, 6, 255, 126, 67, 12, 255, 124, 65, 9, 255, 124, 65, 6, 255, 116, 65, 4, 255, 114, 65, 4, 255, 116, 59, 2, 255, 116, 55, 7, 255, 106, 51, 3, 255, 105, 51, 2, 255, 103, 49, 7, 255, 95, 41, 3, 255, 92, 41, 4, 255, 89, 42, 4, 255, 80, 33, 4, 255, 65, 21, 5, 255, 45, 14, 1, 255, 34, 10, 0, 255, 13, 50, 46, 255, 12, 23, 64, 255, 8, 10, 18, 255, 3, 5, 3, 255, 2, 5, 19, 255, 4, 3, 19, 255, 0, 2, 4, 255, 2, 3, 7, 255, 2, 3, 9, 255, 2, 3, 10, 255, 3, 4, 10, 255, 1, 1, 4, 255, 1, 2, 3, 255, 1, 2, 4, 255, 0, 0, 3, 255, 0, 0, 3, 255, 1, 1, 4, 255, 1, 4, 7, 255, 1, 7, 10, 255, 2, 5, 10, 255, 2, 5, 12, 255, 2, 7, 12, 255, 1, 7, 8, 255, 0, 3, 7, 255, 1, 3, 14, 255, 3, 5, 17, 255, 1, 4, 11, 255, 1, 3, 9, 255, 1, 5, 8, 255, 2, 3, 7, 255, 1, 2, 6, 255, 2, 3, 7, 255, 1, 1, 2, 255, 1, 1, 2, 255, 2, 2, 2, 255, 2, 2, 2, 255, 1, 0, 4, 255, 3, 2, 5, 255, 2, 1, 6, 255, 1, 0, 5, 255, 1, 0, 5, 255, 1, 0, 4, 255, 0, 0, 2, 255, 0, 0, 0, 255, 1, 2, 1, 255, 2, 0, 0, 255, 7, 10, 31, 255, 4, 55, 105, 255, 9, 52, 82, 255, 4, 46, 81, 255, 5, 41, 70, 255, 3, 11, 59, 255, 6, 109, 202, 255, 5, 155, 183, 255, 3, 0, 0, 255, 10, 3, 42, 255, 1, 29, 187, 255, 10, 9, 22, 255, 9, 2, 0, 255, 2, 3, 3, 255, 5, 0, 1, 255, 0, 1, 3, 255, 2, 2, 1, 255, 4, 1, 3, 255, 2, 0, 1, 255, 2, 1, 1, 255, 2, 2, 1, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 0, 1, 255, 2, 1, 2, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 1, 1, 255, 2, 3, 2, 255, 1, 3, 2, 255, 2, 3, 2, 255, 3, 1, 2, 255, 3, 1, 0, 255, 5, 2, 1, 255, 6, 3, 2, 255, 6, 4, 1, 255, 6, 4, 1, 255, 9, 7, 3, 255, 14, 11, 7, 255, 17, 17, 11, 255, 22, 24, 16, 255, 25, 30, 17, 255, 27, 39, 18, 255, 25, 43, 20, 255, 30, 52, 36, 255, 33, 61, 36, 255, 34, 65, 35, 255, 38, 66, 48, 255, 43, 69, 46, 255, 47, 65, 42, 255, 44, 72, 45, 255, 41, 72, 47, 255, 46, 82, 61, 255, 52, 109, 86, 255, 75, 132, 114, 255, 82, 150, 129, 255, 96, 165, 136, 255, 116, 168, 136, 255, 108, 161, 119, 255, 90, 152, 102, 255, 84, 143, 91, 255, 79, 129, 78, 255, 77, 114, 68, 255, 66, 96, 42, 255, 56, 81, 23, 255, 46, 62, 6, 255, 43, 43, 14, 255, 39, 36, 6, 255, 41, 34, 6, 255, 47, 37, 7, 255, 48, 40, 5, 255, 50, 36, 4, 255, 54, 36, 5, 255, 53, 33, 5, 255, 50, 32, 4, 255, 51, 36, 7, 255, 46, 31, 3, 255, 48, 33, 10, 255, 45, 34, 7, 255, 51, 39, 6, 255, 58, 39, 6, 255, 57, 42, 6, 255, 61, 41, 1, 255, 72, 49, 3, 255, 67, 46, 5, 255, 74, 47, 2, 255, 83, 53, 3, 255, 80, 54, 4, 255, 81, 53, 2, 255, 89, 57, 9, 255, 88, 54, 7, 255, 86, 52, 4, 255, 89, 57, 6, 255, 92, 55, 2, 255, 94, 52, 6, 255, 81, 48, 3, 255, 68, 46, 9, 255, 78, 47, 15, 255, 74, 44, 11, 255, 67, 43, 3, 255, 80, 47, 4, 255, 83, 46, 3, 255, 79, 47, 5, 255, 78, 49, 8, 255, 79, 49, 5, 255, 77, 46, 2, 255, 80, 43, 3, 255, 87, 46, 9, 255, 91, 46, 6, 255, 97, 53, 4, 255, 97, 54, 8, 255, 91, 51, 4, 255, 94, 56, 10, 255, 98, 57, 9, 255, 105, 60, 10, 255, 106, 62, 6, 255, 100, 60, 6, 255, 89, 57, 7, 255, 91, 54, 8, 255, 93, 54, 11, 255, 94, 55, 13, 255, 92, 53, 8, 255, 94, 55, 5, 255, 98, 57, 7, 255, 101, 56, 7, 255, 108, 57, 8, 255, 110, 54, 8, 255, 106, 54, 9, 255, 101, 57, 6, 255, 98, 57, 5, 255, 104, 58, 9, 255, 103, 57, 3, 255, 95, 55, 7, 255, 94, 54, 5, 255, 99, 59, 5, 255, 97, 56, 11, 255, 99, 54, 12, 255, 111, 54, 13, 255, 122, 56, 12, 255, 108, 55, 7, 255, 89, 47, 8, 255, 101, 57, 7, 255, 116, 59, 12, 255, 139, 64, 7, 255, 135, 55, 8, 255, 136, 59, 5, 255, 127, 60, 6, 255, 108, 52, 7, 255, 102, 47, 6, 255, 106, 50, 8, 255, 117, 60, 5, 255, 138, 65, 5, 255, 151, 65, 5, 255, 147, 65, 5, 255, 148, 68, 6, 255, 146, 64, 10, 255, 139, 60, 5, 255, 152, 62, 2, 255, 163, 71, 9, 255, 157, 72, 7, 255, 157, 72, 4, 255, 159, 73, 7, 255, 145, 66, 3, 255, 134, 59, 7, 255, 154, 73, 4, 255, 173, 81, 8, 255, 167, 78, 6, 255, 154, 71, 13, 255, 137, 66, 7, 255, 114, 59, 24, 255, 118, 62, 17, 255, 136, 68, 10, 255, 150, 77, 4, 255, 152, 76, 4, 255, 133, 73, 10, 255, 119, 68, 8, 255, 127, 69, 12, 255, 127, 70, 16, 255, 123, 70, 12, 255, 119, 75, 7, 255, 120, 76, 10, 255, 126, 73, 13, 255, 129, 74, 10, 255, 149, 79, 17, 255, 141, 76, 3, 255, 127, 78, 3, 255, 134, 77, 6, 255, 140, 76, 4, 255, 152, 82, 15, 255, 152, 80, 8, 255, 137, 76, 10, 255, 127, 76, 22, 255, 123, 77, 14, 255, 123, 78, 6, 255, 126, 79, 8, 255, 127, 81, 11, 255, 126, 80, 12, 255, 125, 77, 12, 255, 139, 80, 16, 255, 153, 84, 14, 255, 135, 83, 12, 255, 124, 81, 15, 255, 131, 81, 10, 255, 131, 82, 19, 255, 125, 85, 2, 255, 131, 86, 9, 255, 133, 81, 17, 255, 125, 82, 7, 255, 132, 86, 11, 255, 144, 86, 12, 255, 140, 88, 6, 255, 144, 89, 9, 255, 145, 93, 13, 255, 143, 93, 14, 255, 142, 90, 14, 255, 147, 91, 14, 255, 151, 93, 9, 255, 157, 98, 12, 255, 171, 99, 17, 255, 176, 93, 13, 255, 177, 100, 18, 255, 174, 104, 11, 255, 185, 102, 9, 255, 182, 98, 6, 255, 173, 95, 10, 255, 176, 98, 13, 255, 179, 104, 7, 255, 172, 101, 10, 255, 166, 105, 9, 255, 161, 103, 16, 255, 161, 104, 19, 255, 162, 107, 14, 255, 164, 106, 16, 255, 160, 104, 8, 255, 169, 107, 13, 255, 174, 108, 22, 255, 174, 110, 12, 255, 176, 108, 14, 255, 170, 107, 20, 255, 166, 110, 7, 255, 167, 108, 14, 255, 172, 112, 13, 255, 176, 115, 8, 255, 177, 116, 8, 255, 178, 115, 15, 255, 179, 119, 14, 255, 188, 123, 15, 255, 194, 124, 13, 255, 204, 135, 5, 255, 205, 134, 6, 255, 198, 126, 7, 255, 196, 124, 16, 255, 188, 121, 15, 255, 186, 122, 12, 255, 194, 117, 8, 255, 196, 115, 14, 255, 195, 112, 11, 255, 196, 110, 5, 255, 195, 114, 12, 255, 188, 108, 11, 255, 185, 106, 7, 255, 185, 110, 10, 255, 180, 108, 9, 255, 181, 107, 3, 255, 189, 110, 4, 255, 186, 102, 6, 255, 179, 97, 5, 255, 179, 100, 6, 255, 178, 104, 7, 255, 174, 103, 6, 255, 174, 102, 6, 255, 174, 101, 6, 255, 178, 102, 3, 255, 176, 104, 2, 255, 174, 102, 2, 255, 178, 99, 5, 255, 183, 102, 9, 255, 181, 104, 9, 255, 178, 103, 7, 255, 179, 104, 2, 255, 181, 106, 5, 255, 184, 108, 12, 255, 185, 107, 17, 255, 184, 104, 14, 255, 184, 104, 4, 255, 183, 104, 7, 255, 183, 103, 12, 255, 180, 95, 6, 255, 175, 85, 2, 255, 175, 80, 5, 255, 176, 84, 3, 255, 180, 87, 3, 255, 190, 84, 9, 255, 164, 71, 4, 255, 127, 63, 8, 255, 112, 55, 2, 255, 110, 49, 4, 255, 103, 52, 12, 255, 120, 62, 8, 255, 127, 64, 3, 255, 133, 66, 6, 255, 138, 67, 12, 255, 145, 70, 9, 255, 157, 80, 4, 255, 163, 85, 6, 255, 150, 75, 2, 255, 146, 74, 7, 255, 154, 81, 16, 255, 155, 81, 13, 255, 160, 86, 11, 255, 161, 91, 6, 255, 163, 90, 10, 255, 156, 78, 8, 255, 150, 71, 4, 255, 137, 59, 1, 255, 132, 60, 3, 255, 139, 70, 1, 255, 151, 78, 5, 255, 152, 78, 12, 255, 149, 76, 9, 255, 150, 78, 5, 255, 149, 80, 5, 255, 148, 80, 8, 255, 144, 76, 9, 255, 143, 75, 5, 255, 140, 76, 3, 255, 142, 79, 5, 255, 142, 77, 4, 255, 144, 76, 6, 255, 143, 74, 5, 255, 139, 72, 3, 255, 132, 71, 7, 255, 127, 67, 10, 255, 128, 69, 6, 255, 129, 67, 2, 255, 129, 65, 11, 255, 124, 65, 8, 255, 125, 63, 7, 255, 117, 57, 10, 255, 107, 52, 6, 255, 105, 50, 1, 255, 102, 51, 1, 255, 96, 48, 3, 255, 93, 43, 3, 255, 92, 41, 5, 255, 90, 40, 3, 255, 88, 39, 2, 255, 85, 37, 2, 255, 82, 34, 5, 255, 64, 23, 3, 255, 51, 18, 1, 255, 52, 16, 4, 255, 55, 165, 219, 255, 13, 57, 84, 255, 3, 0, 0, 255, 7, 3, 8, 255, 3, 6, 7, 255, 2, 2, 11, 255, 2, 1, 6, 255, 2, 1, 12, 255, 3, 1, 7, 255, 1, 3, 4, 255, 2, 3, 8, 255, 2, 2, 10, 255, 0, 1, 6, 255, 0, 0, 5, 255, 0, 0, 3, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 3, 255, 1, 0, 6, 255, 1, 4, 6, 255, 1, 5, 8, 255, 1, 5, 8, 255, 0, 4, 8, 255, 1, 5, 9, 255, 2, 7, 12, 255, 2, 7, 13, 255, 1, 5, 12, 255, 0, 4, 12, 255, 2, 5, 12, 255, 2, 5, 12, 255, 0, 1, 7, 255, 1, 2, 6, 255, 1, 1, 3, 255, 0, 0, 3, 255, 1, 1, 5, 255, 2, 3, 6, 255, 0, 1, 3, 255, 0, 2, 3, 255, 1, 1, 2, 255, 0, 0, 5, 255, 0, 1, 3, 255, 0, 1, 2, 255, 1, 2, 6, 255, 0, 1, 3, 255, 2, 0, 3, 255, 0, 0, 10, 255, 13, 55, 99, 255, 12, 82, 118, 255, 12, 65, 94, 255, 7, 57, 91, 255, 9, 46, 74, 255, 4, 23, 135, 255, 0, 196, 242, 255, 2, 35, 76, 255, 13, 0, 0, 255, 8, 23, 155, 255, 5, 28, 112, 255, 12, 1, 0, 255, 6, 5, 5, 255, 5, 3, 2, 255, 8, 2, 0, 255, 6, 1, 2, 255, 3, 2, 2, 255, 0, 0, 2, 255, 4, 1, 2, 255, 3, 1, 2, 255, 2, 0, 1, 255, 1, 0, 0, 255, 2, 0, 1, 255, 2, 0, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 2, 2, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 0, 0, 255, 3, 1, 2, 255, 2, 2, 1, 255, 2, 2, 0, 255, 3, 0, 0, 255, 5, 2, 3, 255, 8, 3, 4, 255, 5, 1, 1, 255, 8, 7, 3, 255, 6, 6, 1, 255, 11, 10, 8, 255, 19, 18, 11, 255, 20, 24, 6, 255, 22, 29, 12, 255, 25, 35, 19, 255, 32, 44, 20, 255, 36, 45, 30, 255, 37, 54, 38, 255, 33, 57, 28, 255, 36, 60, 30, 255, 33, 64, 36, 255, 36, 66, 49, 255, 40, 60, 33, 255, 44, 65, 33, 255, 41, 78, 46, 255, 46, 95, 72, 255, 64, 112, 91, 255, 86, 137, 115, 255, 90, 151, 125, 255, 98, 161, 131, 255, 107, 164, 125, 255, 97, 150, 98, 255, 90, 142, 91, 255, 81, 131, 85, 255, 75, 122, 71, 255, 69, 105, 61, 255, 68, 100, 30, 255, 56, 80, 23, 255, 44, 57, 17, 255, 38, 40, 14, 255, 35, 36, 12, 255, 46, 35, 5, 255, 51, 36, 6, 255, 45, 35, 6, 255, 46, 36, 4, 255, 53, 36, 7, 255, 57, 33, 6, 255, 53, 35, 6, 255, 50, 33, 9, 255, 53, 35, 11, 255, 46, 33, 6, 255, 47, 37, 4, 255, 59, 44, 10, 255, 61, 38, 7, 255, 61, 40, 7, 255, 64, 43, 1, 255, 70, 48, 4, 255, 72, 44, 7, 255, 78, 49, 6, 255, 86, 57, 6, 255, 82, 54, 2, 255, 80, 53, 3, 255, 84, 56, 6, 255, 84, 54, 2, 255, 85, 53, 0, 255, 88, 57, 4, 255, 88, 54, 6, 255, 85, 46, 3, 255, 80, 46, 5, 255, 77, 44, 8, 255, 82, 45, 4, 255, 79, 45, 8, 255, 75, 45, 6, 255, 73, 42, 2, 255, 78, 48, 8, 255, 77, 45, 9, 255, 75, 42, 5, 255, 77, 44, 4, 255, 81, 47, 8, 255, 84, 45, 6, 255, 91, 52, 7, 255, 92, 52, 5, 255, 93, 54, 2, 255, 92, 54, 2, 255, 91, 56, 1, 255, 90, 58, 5, 255, 96, 58, 7, 255, 103, 60, 3, 255, 108, 62, 4, 255, 102, 62, 3, 255, 94, 60, 3, 255, 93, 55, 5, 255, 96, 55, 5, 255, 93, 54, 11, 255, 95, 54, 10, 255, 100, 55, 5, 255, 100, 56, 9, 255, 97, 56, 5, 255, 100, 56, 7, 255, 106, 57, 7, 255, 100, 55, 6, 255, 99, 56, 4, 255, 98, 56, 5, 255, 98, 60, 9, 255, 104, 57, 9, 255, 105, 60, 9, 255, 100, 54, 4, 255, 102, 55, 5, 255, 98, 53, 4, 255, 98, 55, 5, 255, 102, 52, 10, 255, 97, 52, 12, 255, 84, 49, 14, 255, 97, 48, 7, 255, 127, 70, 11, 255, 135, 71, 5, 255, 141, 67, 8, 255, 114, 47, 9, 255, 89, 50, 7, 255, 82, 57, 5, 255, 100, 52, 5, 255, 109, 52, 6, 255, 126, 64, 10, 255, 140, 65, 6, 255, 142, 65, 2, 255, 148, 69, 3, 255, 159, 68, 4, 255, 161, 73, 8, 255, 144, 65, 14, 255, 136, 61, 6, 255, 137, 60, 6, 255, 134, 58, 8, 255, 138, 61, 10, 255, 149, 60, 17, 255, 156, 68, 4, 255, 153, 69, 5, 255, 154, 69, 11, 255, 157, 73, 4, 255, 157, 71, 7, 255, 159, 73, 6, 255, 166, 78, 9, 255, 175, 81, 9, 255, 159, 77, 5, 255, 123, 68, 14, 255, 129, 67, 17, 255, 146, 70, 3, 255, 142, 72, 7, 255, 147, 74, 17, 255, 137, 72, 8, 255, 144, 74, 5, 255, 150, 74, 14, 255, 117, 72, 12, 255, 116, 75, 8, 255, 122, 68, 16, 255, 120, 70, 16, 255, 140, 72, 7, 255, 144, 75, 10, 255, 130, 75, 2, 255, 140, 82, 8, 255, 150, 81, 8, 255, 161, 82, 4, 255, 159, 85, 3, 255, 154, 82, 2, 255, 135, 76, 10, 255, 127, 77, 24, 255, 129, 78, 15, 255, 132, 79, 4, 255, 124, 79, 8, 255, 124, 81, 13, 255, 150, 82, 9, 255, 139, 80, 15, 255, 150, 76, 13, 255, 163, 80, 9, 255, 132, 78, 15, 255, 129, 82, 3, 255, 132, 80, 6, 255, 131, 82, 6, 255, 125, 81, 9, 255, 141, 88, 14, 255, 157, 89, 12, 255, 159, 91, 12, 255, 138, 86, 11, 255, 139, 83, 15, 255, 137, 86, 12, 255, 136, 90, 12, 255, 145, 93, 10, 255, 162, 91, 18, 255, 170, 92, 15, 255, 160, 93, 14, 255, 146, 95, 10, 255, 152, 101, 13, 255, 165, 103, 17, 255, 162, 98, 15, 255, 162, 103, 18, 255, 173, 106, 14, 255, 182, 103, 7, 255, 183, 105, 17, 255, 183, 108, 14, 255, 183, 106, 9, 255, 170, 101, 15, 255, 163, 101, 12, 255, 162, 104, 13, 255, 155, 100, 15, 255, 158, 102, 25, 255, 162, 107, 6, 255, 166, 104, 12, 255, 166, 107, 15, 255, 163, 107, 11, 255, 170, 106, 12, 255, 178, 110, 12, 255, 171, 108, 7, 255, 167, 108, 11, 255, 167, 110, 11, 255, 172, 110, 5, 255, 176, 112, 11, 255, 173, 109, 10, 255, 175, 112, 17, 255, 181, 117, 12, 255, 187, 123, 14, 255, 192, 120, 10, 255, 182, 102, 11, 255, 202, 130, 8, 255, 206, 137, 12, 255, 202, 134, 2, 255, 198, 129, 4, 255, 194, 124, 13, 255, 188, 119, 7, 255, 189, 117, 1, 255, 198, 124, 9, 255, 187, 109, 20, 255, 193, 115, 22, 255, 193, 116, 12, 255, 184, 108, 13, 255, 187, 107, 5, 255, 185, 100, 7, 255, 183, 108, 9, 255, 180, 113, 1, 255, 183, 109, 4, 255, 189, 112, 5, 255, 182, 110, 3, 255, 178, 106, 0, 255, 179, 107, 3, 255, 179, 106, 4, 255, 177, 104, 2, 255, 177, 103, 2, 255, 182, 104, 5, 255, 177, 100, 2, 255, 177, 99, 4, 255, 181, 102, 8, 255, 181, 103, 7, 255, 181, 104, 6, 255, 181, 105, 3, 255, 182, 103, 1, 255, 184, 105, 11, 255, 182, 110, 14, 255, 184, 108, 10, 255, 186, 101, 8, 255, 182, 100, 5, 255, 180, 103, 4, 255, 183, 101, 7, 255, 180, 89, 5, 255, 163, 77, 6, 255, 162, 77, 15, 255, 185, 94, 9, 255, 172, 81, 5, 255, 150, 74, 6, 255, 140, 72, 9, 255, 124, 65, 5, 255, 100, 44, 2, 255, 109, 50, 12, 255, 128, 73, 13, 255, 126, 67, 4, 255, 122, 64, 0, 255, 133, 69, 1, 255, 152, 79, 5, 255, 168, 89, 11, 255, 171, 92, 13, 255, 167, 88, 11, 255, 164, 86, 9, 255, 161, 83, 9, 255, 165, 84, 10, 255, 171, 91, 9, 255, 169, 94, 10, 255, 166, 92, 6, 255, 168, 93, 9, 255, 163, 91, 12, 255, 160, 83, 6, 255, 158, 75, 14, 255, 140, 67, 4, 255, 136, 65, 0, 255, 140, 68, 8, 255, 143, 71, 9, 255, 142, 76, 5, 255, 144, 77, 7, 255, 144, 75, 4, 255, 143, 76, 10, 255, 139, 74, 9, 255, 140, 75, 2, 255, 140, 75, 0, 255, 139, 76, 5, 255, 136, 72, 7, 255, 136, 72, 9, 255, 135, 69, 8, 255, 133, 74, 9, 255, 127, 74, 7, 255, 128, 69, 3, 255, 125, 65, 6, 255, 129, 65, 11, 255, 125, 64, 3, 255, 119, 60, 3, 255, 115, 57, 1, 255, 112, 53, 1, 255, 109, 51, 4, 255, 107, 51, 5, 255, 98, 49, 1, 255, 95, 47, 2, 255, 90, 44, 1, 255, 87, 34, 2, 255, 88, 37, 5, 255, 84, 35, 3, 255, 76, 29, 1, 255, 67, 26, 1, 255, 64, 22, 2, 255, 50, 16, 1, 255, 43, 12, 2, 255, 38, 86, 132, 255, 23, 138, 170, 255, 2, 27, 33, 255, 5, 0, 9, 255, 0, 1, 3, 255, 1, 3, 4, 255, 3, 4, 6, 255, 2, 3, 5, 255, 1, 2, 11, 255, 3, 4, 5, 255, 2, 3, 10, 255, 1, 1, 4, 255, 1, 3, 2, 255, 0, 0, 6, 255, 0, 0, 3, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 1, 0, 3, 255, 0, 1, 3, 255, 0, 4, 6, 255, 2, 6, 10, 255, 3, 6, 11, 255, 1, 6, 12, 255, 0, 5, 11, 255, 0, 5, 11, 255, 1, 5, 12, 255, 0, 4, 10, 255, 0, 3, 10, 255, 2, 5, 12, 255, 1, 3, 8, 255, 3, 4, 7, 255, 2, 3, 5, 255, 0, 1, 5, 255, 1, 2, 6, 255, 2, 3, 7, 255, 0, 1, 4, 255, 0, 2, 3, 255, 1, 1, 2, 255, 2, 1, 4, 255, 2, 2, 7, 255, 1, 1, 3, 255, 2, 0, 4, 255, 4, 2, 7, 255, 2, 0, 0, 255, 3, 24, 61, 255, 27, 86, 143, 255, 13, 89, 109, 255, 14, 71, 114, 255, 10, 75, 113, 255, 2, 21, 106, 255, 5, 119, 227, 255, 8, 130, 183, 255, 6, 0, 0, 255, 9, 3, 63, 255, 3, 32, 198, 255, 10, 16, 12, 255, 13, 12, 5, 255, 6, 6, 5, 255, 11, 7, 4, 255, 9, 5, 2, 255, 6, 1, 0, 255, 4, 2, 3, 255, 1, 1, 1, 255, 2, 0, 1, 255, 3, 1, 2, 255, 2, 0, 1, 255, 2, 0, 1, 255, 2, 0, 1, 255, 0, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 2, 2, 2, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 0, 0, 255, 3, 1, 2, 255, 3, 1, 1, 255, 2, 2, 0, 255, 6, 3, 2, 255, 6, 1, 2, 255, 6, 2, 1, 255, 8, 5, 0, 255, 8, 8, 6, 255, 11, 10, 9, 255, 17, 16, 10, 255, 19, 20, 8, 255, 21, 24, 11, 255, 26, 34, 19, 255, 31, 42, 22, 255, 33, 42, 25, 255, 35, 44, 29, 255, 38, 53, 33, 255, 31, 54, 31, 255, 34, 60, 35, 255, 31, 60, 39, 255, 35, 64, 39, 255, 36, 63, 35, 255, 38, 66, 45, 255, 45, 83, 57, 255, 55, 105, 78, 255, 68, 123, 95, 255, 82, 139, 107, 255, 93, 151, 122, 255, 100, 159, 130, 255, 96, 153, 109, 255, 86, 138, 86, 255, 86, 133, 85, 255, 80, 127, 67, 255, 72, 113, 61, 255, 61, 93, 51, 255, 67, 94, 26, 255, 61, 82, 17, 255, 50, 60, 13, 255, 39, 41, 14, 255, 42, 39, 13, 255, 46, 37, 4, 255, 46, 38, 4, 255, 48, 35, 7, 255, 50, 37, 6, 255, 50, 38, 6, 255, 48, 32, 4, 255, 51, 35, 5, 255, 52, 32, 6, 255, 52, 34, 5, 255, 60, 36, 3, 255, 72, 41, 6, 255, 72, 43, 5, 255, 62, 37, 4, 255, 68, 45, 9, 255, 66, 42, 5, 255, 68, 42, 8, 255, 75, 46, 8, 255, 81, 51, 3, 255, 87, 53, 1, 255, 85, 51, 2, 255, 86, 52, 4, 255, 86, 52, 3, 255, 86, 54, 2, 255, 92, 58, 7, 255, 89, 54, 5, 255, 79, 47, 4, 255, 75, 46, 4, 255, 79, 47, 6, 255, 76, 48, 3, 255, 73, 50, 7, 255, 72, 48, 6, 255, 72, 41, 5, 255, 73, 42, 1, 255, 76, 47, 10, 255, 74, 43, 13, 255, 77, 45, 5, 255, 80, 48, 5, 255, 82, 45, 8, 255, 86, 45, 3, 255, 89, 49, 3, 255, 92, 53, 3, 255, 87, 49, 4, 255, 90, 50, 9, 255, 86, 49, 5, 255, 93, 56, 9, 255, 100, 60, 7, 255, 106, 64, 4, 255, 101, 60, 1, 255, 99, 60, 6, 255, 94, 57, 7, 255, 97, 56, 7, 255, 96, 56, 4, 255, 95, 54, 10, 255, 96, 53, 8, 255, 98, 53, 3, 255, 98, 55, 4, 255, 99, 57, 3, 255, 102, 55, 9, 255, 106, 58, 5, 255, 111, 57, 4, 255, 107, 56, 14, 255, 98, 55, 7, 255, 102, 54, 5, 255, 102, 52, 11, 255, 105, 57, 7, 255, 104, 55, 3, 255, 103, 56, 10, 255, 101, 55, 9, 255, 101, 56, 7, 255, 97, 55, 8, 255, 88, 54, 8, 255, 91, 56, 13, 255, 90, 54, 10, 255, 105, 58, 4, 255, 123, 57, 6, 255, 106, 50, 12, 255, 91, 53, 4, 255, 88, 56, 6, 255, 97, 58, 3, 255, 146, 63, 2, 255, 140, 62, 7, 255, 139, 61, 9, 255, 138, 59, 9, 255, 143, 62, 9, 255, 145, 65, 4, 255, 137, 60, 8, 255, 145, 61, 4, 255, 141, 60, 6, 255, 127, 62, 2, 255, 127, 61, 5, 255, 129, 62, 5, 255, 132, 63, 15, 255, 137, 64, 2, 255, 140, 66, 4, 255, 149, 70, 8, 255, 156, 74, 7, 255, 158, 74, 6, 255, 155, 70, 4, 255, 156, 74, 10, 255, 153, 73, 7, 255, 153, 74, 10, 255, 174, 84, 11, 255, 170, 83, 2, 255, 154, 78, 3, 255, 157, 79, 9, 255, 134, 69, 11, 255, 130, 66, 9, 255, 128, 71, 9, 255, 143, 70, 11, 255, 148, 73, 10, 255, 145, 79, 8, 255, 126, 75, 3, 255, 121, 69, 16, 255, 125, 77, 9, 255, 127, 76, 8, 255, 130, 75, 19, 255, 139, 75, 13, 255, 145, 76, 11, 255, 142, 74, 7, 255, 147, 78, 7, 255, 145, 82, 10, 255, 137, 80, 6, 255, 134, 84, 11, 255, 130, 81, 7, 255, 130, 80, 6, 255, 130, 82, 9, 255, 129, 74, 16, 255, 124, 80, 10, 255, 142, 83, 9, 255, 142, 78, 9, 255, 132, 82, 5, 255, 134, 85, 9, 255, 131, 81, 13, 255, 132, 81, 9, 255, 136, 78, 13, 255, 133, 86, 14, 255, 138, 86, 18, 255, 146, 82, 8, 255, 163, 89, 4, 255, 165, 92, 3, 255, 143, 89, 12, 255, 138, 83, 8, 255, 142, 86, 14, 255, 151, 92, 20, 255, 156, 93, 8, 255, 166, 95, 12, 255, 165, 98, 11, 255, 160, 94, 19, 255, 156, 95, 19, 255, 151, 98, 2, 255, 157, 97, 11, 255, 166, 98, 18, 255, 168, 100, 10, 255, 169, 103, 14, 255, 179, 115, 17, 255, 191, 119, 6, 255, 188, 117, 9, 255, 172, 110, 11, 255, 167, 104, 12, 255, 165, 101, 16, 255, 164, 104, 11, 255, 161, 102, 8, 255, 167, 105, 23, 255, 165, 104, 22, 255, 168, 108, 10, 255, 164, 105, 16, 255, 166, 105, 19, 255, 171, 105, 21, 255, 171, 105, 14, 255, 168, 105, 9, 255, 168, 109, 7, 255, 171, 108, 20, 255, 174, 111, 13, 255, 175, 112, 9, 255, 173, 110, 11, 255, 171, 109, 15, 255, 180, 118, 7, 255, 189, 122, 8, 255, 187, 114, 4, 255, 180, 98, 16, 255, 192, 105, 9, 255, 198, 113, 9, 255, 205, 131, 4, 255, 201, 138, 1, 255, 196, 134, 6, 255, 192, 120, 8, 255, 192, 120, 7, 255, 200, 130, 12, 255, 202, 132, 13, 255, 200, 129, 11, 255, 203, 125, 14, 255, 196, 121, 16, 255, 192, 110, 12, 255, 185, 95, 3, 255, 188, 103, 2, 255, 186, 110, 4, 255, 185, 109, 7, 255, 187, 109, 4, 255, 185, 106, 1, 255, 187, 108, 3, 255, 188, 108, 7, 255, 180, 99, 2, 255, 179, 98, 3, 255, 184, 103, 4, 255, 180, 102, 2, 255, 179, 101, 1, 255, 180, 100, 4, 255, 182, 102, 8, 255, 181, 103, 5, 255, 182, 105, 3, 255, 184, 103, 4, 255, 187, 100, 6, 255, 188, 102, 9, 255, 184, 105, 12, 255, 186, 104, 10, 255, 187, 100, 9, 255, 188, 99, 10, 255, 188, 98, 12, 255, 185, 95, 6, 255, 186, 97, 1, 255, 189, 104, 7, 255, 180, 97, 4, 255, 194, 100, 10, 255, 174, 86, 6, 255, 138, 69, 8, 255, 158, 76, 6, 255, 135, 66, 2, 255, 118, 69, 9, 255, 147, 81, 11, 255, 142, 72, 6, 255, 132, 69, 3, 255, 132, 70, 6, 255, 150, 84, 10, 255, 172, 99, 11, 255, 177, 101, 8, 255, 171, 98, 7, 255, 171, 92, 8, 255, 182, 105, 13, 255, 186, 106, 13, 255, 182, 102, 6, 255, 179, 101, 2, 255, 172, 97, 5, 255, 172, 94, 6, 255, 174, 93, 7, 255, 168, 94, 10, 255, 167, 94, 2, 255, 172, 88, 9, 255, 165, 85, 11, 255, 153, 78, 3, 255, 149, 77, 7, 255, 146, 65, 9, 255, 133, 58, 4, 255, 131, 63, 10, 255, 135, 66, 4, 255, 141, 72, 2, 255, 143, 71, 7, 255, 139, 74, 5, 255, 132, 76, 1, 255, 132, 73, 4, 255, 133, 69, 7, 255, 133, 71, 7, 255, 134, 71, 2, 255, 133, 70, 7, 255, 130, 74, 11, 255, 126, 68, 3, 255, 119, 62, 2, 255, 114, 60, 6, 255, 113, 59, 1, 255, 107, 55, 3, 255, 104, 54, 2, 255, 99, 50, 1, 255, 97, 46, 5, 255, 93, 41, 6, 255, 86, 35, 5, 255, 80, 32, 11, 255, 73, 30, 10, 255, 72, 26, 5, 255, 70, 23, 4, 255, 64, 22, 4, 255, 62, 23, 5, 255, 55, 20, 5, 255, 39, 16, 9, 255, 27, 10, 4, 255, 20, 6, 4, 255, 3, 0, 0, 255, 9, 54, 83, 255, 9, 83, 134, 255, 3, 14, 15, 255, 3, 0, 0, 255, 2, 2, 10, 255, 1, 4, 6, 255, 4, 3, 3, 255, 3, 1, 11, 255, 2, 3, 10, 255, 4, 4, 6, 255, 1, 3, 7, 255, 0, 4, 8, 255, 1, 1, 6, 255, 1, 0, 4, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 5, 255, 1, 2, 7, 255, 2, 3, 8, 255, 1, 2, 9, 255, 1, 3, 11, 255, 1, 4, 11, 255, 0, 3, 10, 255, 0, 3, 8, 255, 0, 2, 9, 255, 0, 2, 10, 255, 1, 4, 10, 255, 0, 3, 8, 255, 2, 4, 8, 255, 2, 3, 7, 255, 2, 3, 7, 255, 2, 3, 7, 255, 1, 2, 6, 255, 0, 0, 4, 255, 0, 1, 2, 255, 0, 1, 2, 255, 1, 1, 2, 255, 0, 0, 5, 255, 5, 2, 4, 255, 4, 1, 2, 255, 2, 0, 3, 255, 1, 3, 12, 255, 11, 55, 110, 255, 20, 82, 134, 255, 22, 78, 116, 255, 17, 81, 125, 255, 12, 66, 112, 255, 7, 45, 173, 255, 3, 185, 244, 255, 3, 18, 44, 255, 4, 0, 0, 255, 1, 24, 174, 255, 5, 29, 109, 255, 19, 15, 4, 255, 17, 17, 13, 255, 16, 17, 11, 255, 13, 9, 5, 255, 9, 4, 1, 255, 11, 7, 4, 255, 6, 2, 2, 255, 2, 0, 0, 255, 1, 0, 0, 255, 3, 1, 1, 255, 2, 2, 0, 255, 0, 1, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 2, 2, 2, 255, 1, 0, 0, 255, 2, 0, 1, 255, 4, 2, 2, 255, 4, 3, 1, 255, 5, 3, 1, 255, 7, 3, 2, 255, 10, 7, 4, 255, 8, 7, 0, 255, 10, 10, 7, 255, 14, 15, 13, 255, 18, 21, 7, 255, 23, 28, 9, 255, 25, 32, 19, 255, 24, 34, 19, 255, 29, 40, 22, 255, 37, 47, 36, 255, 34, 48, 28, 255, 35, 50, 25, 255, 32, 53, 31, 255, 27, 55, 27, 255, 31, 54, 31, 255, 36, 59, 34, 255, 32, 64, 41, 255, 35, 77, 46, 255, 52, 94, 66, 255, 65, 113, 80, 255, 72, 133, 95, 255, 84, 144, 109, 255, 96, 154, 116, 255, 96, 154, 104, 255, 88, 143, 88, 255, 81, 129, 72, 255, 84, 127, 64, 255, 78, 121, 55, 255, 73, 108, 51, 255, 70, 96, 51, 255, 69, 90, 32, 255, 60, 76, 16, 255, 52, 59, 15, 255, 44, 41, 18, 255, 39, 39, 6, 255, 53, 44, 7, 255, 47, 36, 6, 255, 46, 36, 10, 255, 46, 38, 8, 255, 47, 38, 2, 255, 57, 39, 6, 255, 55, 40, 5, 255, 52, 40, 3, 255, 60, 40, 3, 255, 72, 43, 5, 255, 78, 45, 6, 255, 71, 44, 5, 255, 60, 38, 8, 255, 69, 48, 7, 255, 69, 46, 2, 255, 73, 45, 4, 255, 80, 50, 5, 255, 82, 48, 2, 255, 80, 47, 1, 255, 86, 54, 5, 255, 89, 55, 7, 255, 88, 54, 4, 255, 89, 57, 6, 255, 86, 55, 8, 255, 80, 50, 7, 255, 73, 46, 5, 255, 70, 48, 6, 255, 75, 44, 4, 255, 75, 45, 1, 255, 75, 49, 10, 255, 73, 46, 5, 255, 73, 44, 6, 255, 74, 46, 4, 255, 75, 45, 6, 255, 74, 44, 8, 255, 78, 46, 5, 255, 83, 50, 7, 255, 83, 52, 10, 255, 76, 49, 7, 255, 81, 51, 8, 255, 86, 54, 1, 255, 87, 52, 4, 255, 89, 51, 14, 255, 92, 54, 12, 255, 96, 52, 11, 255, 100, 56, 2, 255, 103, 62, 5, 255, 99, 60, 8, 255, 97, 58, 13, 255, 95, 54, 6, 255, 97, 53, 2, 255, 96, 53, 5, 255, 97, 53, 8, 255, 96, 53, 8, 255, 96, 54, 3, 255, 97, 56, 4, 255, 99, 58, 5, 255, 103, 58, 6, 255, 112, 58, 9, 255, 110, 53, 10, 255, 102, 55, 3, 255, 101, 56, 7, 255, 107, 56, 11, 255, 103, 56, 11, 255, 101, 57, 6, 255, 100, 55, 4, 255, 99, 54, 9, 255, 98, 55, 8, 255, 93, 53, 5, 255, 93, 51, 10, 255, 95, 51, 6, 255, 97, 56, 1, 255, 99, 56, 10, 255, 94, 57, 8, 255, 94, 56, 6, 255, 95, 51, 17, 255, 93, 50, 16, 255, 92, 53, 12, 255, 104, 53, 13, 255, 114, 56, 17, 255, 98, 56, 8, 255, 102, 56, 9, 255, 108, 50, 4, 255, 118, 56, 10, 255, 112, 49, 16, 255, 108, 56, 5, 255, 93, 54, 5, 255, 93, 53, 11, 255, 103, 51, 11, 255, 120, 56, 4, 255, 139, 73, 2, 255, 146, 71, 3, 255, 133, 61, 8, 255, 140, 61, 19, 255, 143, 61, 17, 255, 144, 66, 3, 255, 148, 68, 7, 255, 150, 69, 7, 255, 147, 69, 6, 255, 148, 70, 4, 255, 149, 72, 6, 255, 156, 71, 8, 255, 158, 73, 1, 255, 159, 75, 4, 255, 165, 79, 9, 255, 145, 74, 9, 255, 134, 68, 9, 255, 120, 64, 10, 255, 125, 73, 9, 255, 144, 73, 4, 255, 150, 76, 8, 255, 149, 80, 4, 255, 149, 81, 14, 255, 135, 77, 10, 255, 132, 76, 8, 255, 133, 76, 12, 255, 140, 77, 8, 255, 138, 77, 5, 255, 137, 80, 7, 255, 143, 82, 4, 255, 144, 82, 10, 255, 141, 77, 10, 255, 137, 82, 1, 255, 133, 81, 4, 255, 134, 80, 12, 255, 130, 77, 10, 255, 129, 78, 19, 255, 131, 80, 13, 255, 135, 83, 10, 255, 132, 82, 12, 255, 129, 81, 17, 255, 134, 79, 12, 255, 134, 84, 7, 255, 129, 83, 18, 255, 132, 81, 11, 255, 140, 87, 7, 255, 165, 95, 10, 255, 167, 86, 7, 255, 154, 85, 8, 255, 142, 84, 14, 255, 136, 83, 5, 255, 153, 88, 15, 255, 169, 93, 13, 255, 172, 95, 8, 255, 160, 92, 5, 255, 156, 97, 8, 255, 154, 100, 10, 255, 156, 93, 13, 255, 160, 94, 13, 255, 163, 101, 7, 255, 169, 99, 8, 255, 171, 99, 16, 255, 166, 102, 13, 255, 174, 104, 13, 255, 181, 114, 12, 255, 193, 119, 5, 255, 190, 118, 3, 255, 176, 112, 5, 255, 169, 103, 11, 255, 167, 104, 8, 255, 164, 102, 7, 255, 166, 102, 8, 255, 171, 109, 13, 255, 165, 102, 26, 255, 167, 108, 17, 255, 166, 104, 24, 255, 171, 109, 11, 255, 170, 105, 16, 255, 169, 103, 13, 255, 170, 106, 14, 255, 173, 106, 16, 255, 175, 110, 8, 255, 173, 110, 15, 255, 172, 109, 10, 255, 174, 112, 10, 255, 173, 110, 7, 255, 180, 116, 12, 255, 186, 114, 11, 255, 176, 101, 5, 255, 178, 105, 7, 255, 191, 119, 5, 255, 192, 115, 8, 255, 200, 116, 11, 255, 202, 115, 11, 255, 200, 120, 7, 255, 193, 124, 8, 255, 194, 123, 3, 255, 202, 130, 8, 255, 208, 136, 10, 255, 203, 129, 10, 255, 199, 118, 10, 255, 190, 112, 10, 255, 191, 114, 15, 255, 186, 110, 4, 255, 186, 108, 2, 255, 186, 107, 9, 255, 187, 109, 9, 255, 188, 111, 4, 255, 187, 107, 1, 255, 188, 108, 3, 255, 184, 103, 4, 255, 176, 95, 0, 255, 182, 101, 5, 255, 186, 106, 6, 255, 181, 103, 2, 255, 183, 104, 3, 255, 182, 102, 4, 255, 183, 103, 6, 255, 183, 103, 3, 255, 184, 105, 4, 255, 182, 104, 7, 255, 183, 102, 7, 255, 186, 105, 7, 255, 182, 108, 11, 255, 182, 104, 13, 255, 182, 101, 11, 255, 181, 101, 9, 255, 188, 103, 6, 255, 183, 103, 2, 255, 181, 100, 2, 255, 184, 92, 2, 255, 186, 100, 0, 255, 192, 100, 2, 255, 162, 74, 2, 255, 146, 74, 2, 255, 156, 83, 2, 255, 152, 87, 3, 255, 154, 93, 11, 255, 148, 84, 6, 255, 127, 66, 4, 255, 130, 64, 5, 255, 141, 77, 2, 255, 159, 90, 5, 255, 167, 91, 1, 255, 174, 99, 5, 255, 174, 101, 3, 255, 178, 100, 6, 255, 183, 104, 13, 255, 180, 101, 7, 255, 179, 99, 2, 255, 177, 98, 3, 255, 173, 96, 4, 255, 170, 94, 11, 255, 168, 85, 12, 255, 152, 77, 8, 255, 155, 89, 6, 255, 166, 87, 5, 255, 169, 87, 7, 255, 165, 89, 9, 255, 166, 90, 6, 255, 170, 83, 8, 255, 149, 70, 7, 255, 121, 52, 9, 255, 118, 53, 6, 255, 121, 59, 3, 255, 130, 66, 5, 255, 133, 65, 1, 255, 136, 65, 0, 255, 134, 66, 5, 255, 128, 64, 8, 255, 128, 64, 8, 255, 126, 62, 5, 255, 118, 60, 3, 255, 111, 59, 3, 255, 111, 59, 3, 255, 114, 61, 4, 255, 108, 61, 6, 255, 107, 53, 3, 255, 108, 50, 4, 255, 96, 47, 2, 255, 84, 43, 2, 255, 81, 41, 5, 255, 79, 37, 5, 255, 75, 30, 2, 255, 70, 30, 5, 255, 71, 28, 4, 255, 71, 27, 2, 255, 60, 19, 2, 255, 50, 14, 7, 255, 32, 10, 3, 255, 26, 9, 1, 255, 25, 7, 0, 255, 27, 10, 3, 255, 29, 13, 5, 255, 8, 10, 10, 255, 4, 0, 0, 255, 4, 20, 28, 255, 4, 29, 36, 255, 2, 11, 13, 255, 2, 0, 6, 255, 3, 3, 3, 255, 2, 1, 3, 255, 3, 0, 2, 255, 5, 1, 5, 255, 3, 3, 3, 255, 2, 2, 8, 255, 4, 0, 9, 255, 0, 1, 6, 255, 1, 0, 6, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 2, 1, 3, 255, 1, 1, 5, 255, 2, 1, 6, 255, 2, 2, 8, 255, 2, 2, 9, 255, 2, 3, 9, 255, 2, 3, 9, 255, 1, 3, 8, 255, 0, 3, 8, 255, 1, 4, 11, 255, 1, 4, 10, 255, 0, 5, 8, 255, 0, 4, 7, 255, 2, 3, 7, 255, 3, 4, 8, 255, 1, 2, 6, 255, 0, 1, 5, 255, 0, 1, 4, 255, 1, 1, 2, 255, 1, 1, 3, 255, 2, 1, 5, 255, 1, 0, 5, 255, 3, 0, 4, 255, 2, 1, 0, 255, 0, 1, 3, 255, 9, 22, 51, 255, 19, 67, 114, 255, 13, 63, 104, 255, 8, 71, 111, 255, 17, 84, 111, 255, 12, 41, 130, 255, 6, 148, 235, 255, 9, 98, 153, 255, 8, 0, 0, 255, 5, 10, 89, 255, 6, 39, 184, 255, 17, 18, 20, 255, 17, 18, 14, 255, 11, 17, 8, 255, 19, 19, 13, 255, 15, 12, 7, 255, 13, 9, 5, 255, 10, 8, 4, 255, 9, 6, 3, 255, 5, 1, 1, 255, 2, 1, 0, 255, 4, 4, 1, 255, 4, 4, 2, 255, 1, 1, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 0, 0, 255, 1, 0, 0, 255, 3, 1, 1, 255, 4, 3, 0, 255, 6, 5, 1, 255, 7, 5, 2, 255, 9, 9, 2, 255, 13, 13, 1, 255, 15, 16, 8, 255, 17, 19, 10, 255, 20, 25, 9, 255, 23, 31, 9, 255, 25, 36, 12, 255, 26, 39, 20, 255, 31, 43, 26, 255, 30, 47, 21, 255, 30, 49, 15, 255, 34, 49, 17, 255, 31, 52, 20, 255, 30, 54, 26, 255, 37, 53, 27, 255, 35, 54, 27, 255, 37, 66, 40, 255, 46, 86, 48, 255, 60, 101, 75, 255, 70, 118, 85, 255, 77, 133, 92, 255, 88, 145, 103, 255, 93, 148, 99, 255, 91, 144, 84, 255, 86, 132, 82, 255, 83, 122, 69, 255, 83, 121, 46, 255, 76, 109, 48, 255, 70, 100, 39, 255, 71, 96, 28, 255, 69, 91, 20, 255, 62, 76, 19, 255, 55, 59, 17, 255, 48, 46, 6, 255, 45, 42, 4, 255, 47, 42, 5, 255, 42, 39, 5, 255, 47, 34, 5, 255, 53, 36, 6, 255, 53, 40, 6, 255, 55, 41, 5, 255, 51, 42, 4, 255, 47, 42, 0, 255, 68, 48, 5, 255, 78, 47, 4, 255, 75, 45, 3, 255, 71, 44, 4, 255, 60, 48, 8, 255, 63, 50, 4, 255, 69, 48, 5, 255, 76, 47, 8, 255, 83, 49, 3, 255, 90, 47, 3, 255, 88, 53, 6, 255, 83, 53, 5, 255, 84, 51, 1, 255, 87, 52, 1, 255, 90, 54, 7, 255, 84, 49, 7, 255, 73, 41, 4, 255, 73, 47, 8, 255, 73, 45, 7, 255, 79, 49, 7, 255, 83, 48, 8, 255, 82, 46, 4, 255, 80, 46, 7, 255, 76, 46, 7, 255, 76, 47, 6, 255, 77, 48, 6, 255, 80, 50, 6, 255, 82, 49, 6, 255, 83, 51, 4, 255, 86, 53, 7, 255, 84, 48, 11, 255, 87, 50, 12, 255, 93, 55, 2, 255, 93, 54, 2, 255, 92, 52, 8, 255, 95, 57, 5, 255, 93, 50, 7, 255, 99, 53, 6, 255, 105, 59, 13, 255, 106, 65, 7, 255, 96, 57, 3, 255, 96, 59, 9, 255, 97, 54, 3, 255, 99, 54, 5, 255, 99, 55, 6, 255, 96, 54, 7, 255, 95, 53, 7, 255, 97, 54, 6, 255, 96, 56, 6, 255, 102, 61, 7, 255, 116, 60, 9, 255, 108, 56, 5, 255, 99, 54, 6, 255, 104, 55, 10, 255, 104, 56, 8, 255, 105, 57, 8, 255, 105, 57, 7, 255, 102, 53, 7, 255, 103, 56, 9, 255, 101, 57, 7, 255, 97, 55, 7, 255, 95, 54, 11, 255, 97, 54, 8, 255, 100, 57, 8, 255, 100, 58, 9, 255, 98, 55, 4, 255, 102, 58, 6, 255, 96, 57, 9, 255, 94, 52, 12, 255, 98, 53, 8, 255, 104, 57, 5, 255, 89, 57, 8, 255, 94, 55, 9, 255, 98, 57, 5, 255, 93, 56, 8, 255, 86, 59, 2, 255, 88, 62, 7, 255, 93, 56, 5, 255, 115, 62, 9, 255, 131, 66, 7, 255, 141, 68, 8, 255, 144, 62, 8, 255, 145, 63, 7, 255, 149, 66, 8, 255, 141, 69, 2, 255, 144, 69, 6, 255, 143, 65, 7, 255, 143, 66, 4, 255, 144, 65, 7, 255, 149, 70, 5, 255, 152, 71, 6, 255, 156, 70, 4, 255, 165, 75, 1, 255, 162, 74, 5, 255, 151, 74, 1, 255, 157, 76, 3, 255, 157, 72, 6, 255, 162, 80, 4, 255, 172, 87, 6, 255, 164, 80, 13, 255, 139, 74, 9, 255, 147, 78, 0, 255, 124, 64, 9, 255, 133, 72, 6, 255, 153, 76, 10, 255, 160, 83, 9, 255, 153, 81, 2, 255, 143, 77, 6, 255, 148, 82, 10, 255, 142, 80, 8, 255, 140, 83, 10, 255, 143, 82, 6, 255, 142, 81, 5, 255, 143, 81, 7, 255, 138, 78, 18, 255, 133, 81, 18, 255, 136, 82, 8, 255, 139, 79, 4, 255, 132, 83, 10, 255, 130, 82, 8, 255, 131, 83, 4, 255, 136, 80, 9, 255, 139, 78, 21, 255, 149, 82, 8, 255, 159, 89, 6, 255, 142, 87, 11, 255, 132, 83, 10, 255, 148, 90, 9, 255, 164, 90, 2, 255, 171, 92, 9, 255, 163, 91, 10, 255, 162, 89, 15, 255, 158, 90, 9, 255, 159, 95, 10, 255, 157, 90, 5, 255, 165, 89, 2, 255, 171, 93, 5, 255, 171, 99, 10, 255, 159, 95, 15, 255, 165, 96, 8, 255, 173, 96, 4, 255, 170, 100, 11, 255, 168, 102, 12, 255, 166, 100, 11, 255, 167, 103, 17, 255, 179, 107, 10, 255, 188, 109, 14, 255, 190, 116, 12, 255, 191, 120, 2, 255, 186, 110, 8, 255, 174, 104, 11, 255, 162, 102, 10, 255, 162, 103, 13, 255, 163, 102, 11, 255, 164, 105, 5, 255, 167, 104, 23, 255, 167, 105, 15, 255, 167, 106, 13, 255, 173, 110, 12, 255, 176, 108, 12, 255, 181, 109, 4, 255, 185, 111, 6, 255, 182, 110, 9, 255, 179, 110, 12, 255, 181, 112, 18, 255, 179, 112, 10, 255, 177, 110, 16, 255, 178, 111, 16, 255, 182, 115, 10, 255, 190, 118, 2, 255, 185, 112, 11, 255, 189, 118, 7, 255, 201, 127, 1, 255, 207, 135, 2, 255, 205, 129, 6, 255, 183, 97, 10, 255, 190, 104, 16, 255, 197, 126, 9, 255, 197, 124, 6, 255, 206, 132, 15, 255, 202, 126, 29, 255, 193, 113, 19, 255, 192, 110, 14, 255, 190, 107, 20, 255, 193, 120, 11, 255, 188, 119, 5, 255, 183, 113, 5, 255, 187, 110, 11, 255, 189, 110, 8, 255, 188, 114, 0, 255, 185, 111, 1, 255, 185, 111, 2, 255, 183, 107, 3, 255, 183, 106, 6, 255, 186, 108, 8, 255, 183, 105, 3, 255, 185, 103, 4, 255, 182, 102, 2, 255, 181, 101, 3, 255, 183, 103, 6, 255, 182, 102, 4, 255, 182, 102, 3, 255, 182, 102, 5, 255, 184, 101, 2, 255, 191, 106, 4, 255, 187, 109, 11, 255, 184, 104, 15, 255, 183, 100, 11, 255, 180, 101, 8, 255, 185, 104, 6, 255, 180, 105, 5, 255, 185, 100, 0, 255, 185, 96, 1, 255, 183, 103, 7, 255, 147, 71, 5, 255, 132, 61, 6, 255, 152, 80, 7, 255, 141, 74, 4, 255, 132, 68, 5, 255, 131, 63, 6, 255, 123, 58, 5, 255, 125, 63, 10, 255, 129, 64, 10, 255, 139, 71, 7, 255, 144, 70, 7, 255, 155, 76, 15, 255, 166, 88, 13, 255, 174, 101, 8, 255, 181, 106, 9, 255, 177, 100, 21, 255, 176, 99, 11, 255, 184, 105, 9, 255, 186, 102, 21, 255, 181, 99, 11, 255, 177, 96, 3, 255, 174, 84, 8, 255, 148, 65, 2, 255, 148, 78, 4, 255, 165, 83, 3, 255, 171, 85, 1, 255, 166, 86, 3, 255, 159, 82, 5, 255, 171, 84, 7, 255, 184, 98, 8, 255, 171, 86, 1, 255, 150, 72, 4, 255, 115, 54, 2, 255, 109, 49, 4, 255, 112, 51, 3, 255, 115, 56, 5, 255, 117, 60, 7, 255, 119, 62, 7, 255, 120, 61, 3, 255, 119, 59, 3, 255, 119, 58, 4, 255, 114, 61, 2, 255, 113, 58, 3, 255, 110, 51, 2, 255, 102, 50, 2, 255, 105, 43, 2, 255, 96, 41, 0, 255, 94, 41, 3, 255, 91, 39, 5, 255, 87, 37, 4, 255, 78, 35, 0, 255, 71, 36, 1, 255, 71, 29, 3, 255, 66, 17, 1, 255, 48, 18, 2, 255, 38, 16, 6, 255, 33, 8, 5, 255, 24, 10, 6, 255, 22, 11, 6, 255, 23, 12, 6, 255, 22, 11, 4, 255, 25, 10, 3, 255, 2, 20, 28, 255, 6, 40, 54, 255, 4, 18, 21, 255, 0, 0, 15, 255, 1, 11, 37, 255, 3, 0, 0, 255, 1, 0, 0, 255, 2, 15, 26, 255, 9, 61, 68, 255, 4, 6, 4, 255, 1, 0, 4, 255, 2, 2, 7, 255, 2, 2, 6, 255, 0, 1, 6, 255, 1, 0, 5, 255, 1, 0, 4, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 2, 255, 0, 0, 2, 255, 1, 1, 4, 255, 2, 2, 7, 255, 2, 3, 8, 255, 2, 3, 8, 255, 2, 3, 7, 255, 3, 4, 8, 255, 2, 3, 8, 255, 2, 2, 10, 255, 0, 2, 8, 255, 1, 4, 9, 255, 0, 4, 7, 255, 2, 3, 8, 255, 3, 4, 9, 255, 2, 3, 7, 255, 1, 2, 6, 255, 2, 1, 6, 255, 1, 1, 6, 255, 2, 1, 4, 255, 2, 0, 6, 255, 1, 0, 5, 255, 1, 1, 2, 255, 1, 2, 0, 255, 1, 2, 8, 255, 9, 21, 53, 255, 3, 43, 70, 255, 9, 53, 103, 255, 3, 67, 106, 255, 11, 54, 106, 255, 5, 73, 190, 255, 4, 161, 244, 255, 9, 20, 34, 255, 7, 0, 12, 255, 6, 30, 197, 255, 9, 35, 92, 255, 20, 14, 0, 255, 11, 14, 11, 255, 11, 17, 13, 255, 16, 16, 10, 255, 19, 14, 10, 255, 15, 10, 6, 255, 13, 11, 6, 255, 10, 8, 4, 255, 8, 3, 1, 255, 7, 3, 2, 255, 8, 4, 1, 255, 6, 3, 0, 255, 2, 1, 0, 255, 1, 1, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 1, 1, 255, 2, 0, 1, 255, 3, 1, 2, 255, 3, 3, 1, 255, 4, 3, 0, 255, 8, 7, 3, 255, 10, 9, 5, 255, 13, 12, 6, 255, 18, 19, 6, 255, 18, 21, 6, 255, 17, 22, 6, 255, 21, 28, 14, 255, 21, 31, 14, 255, 21, 35, 7, 255, 26, 39, 16, 255, 28, 41, 29, 255, 29, 44, 24, 255, 30, 46, 25, 255, 33, 46, 26, 255, 30, 48, 19, 255, 30, 47, 23, 255, 36, 50, 23, 255, 37, 58, 31, 255, 50, 76, 42, 255, 60, 94, 55, 255, 65, 108, 71, 255, 77, 124, 88, 255, 84, 135, 95, 255, 93, 143, 101, 255, 91, 139, 92, 255, 88, 131, 80, 255, 82, 120, 68, 255, 82, 117, 59, 255, 84, 114, 55, 255, 75, 102, 48, 255, 75, 99, 43, 255, 71, 91, 30, 255, 68, 84, 18, 255, 64, 75, 8, 255, 58, 62, 7, 255, 53, 49, 6, 255, 48, 40, 6, 255, 46, 38, 7, 255, 43, 42, 2, 255, 55, 41, 0, 255, 61, 37, 2, 255, 57, 39, 9, 255, 52, 34, 7, 255, 56, 36, 8, 255, 59, 37, 3, 255, 75, 49, 5, 255, 83, 51, 4, 255, 78, 47, 1, 255, 68, 43, 0, 255, 67, 44, 6, 255, 68, 45, 3, 255, 69, 44, 1, 255, 76, 48, 4, 255, 78, 50, 1, 255, 83, 55, 3, 255, 82, 54, 4, 255, 82, 52, 4, 255, 84, 52, 3, 255, 88, 54, 5, 255, 90, 53, 8, 255, 84, 48, 9, 255, 79, 45, 10, 255, 74, 45, 6, 255, 78, 45, 6, 255, 75, 46, 6, 255, 77, 47, 9, 255, 79, 47, 1, 255, 71, 47, 6, 255, 73, 47, 9, 255, 76, 48, 0, 255, 76, 47, 3, 255, 81, 49, 9, 255, 85, 53, 3, 255, 88, 54, 6, 255, 86, 53, 7, 255, 81, 50, 2, 255, 88, 52, 9, 255, 90, 53, 1, 255, 95, 54, 4, 255, 97, 54, 8, 255, 97, 56, 7, 255, 94, 52, 17, 255, 99, 54, 8, 255, 108, 62, 6, 255, 107, 65, 1, 255, 101, 63, 4, 255, 95, 59, 9, 255, 97, 56, 7, 255, 99, 55, 7, 255, 99, 56, 5, 255, 97, 53, 7, 255, 96, 54, 11, 255, 98, 54, 8, 255, 100, 53, 8, 255, 104, 58, 3, 255, 107, 57, 5, 255, 113, 57, 7, 255, 110, 55, 11, 255, 103, 55, 9, 255, 104, 52, 4, 255, 103, 56, 10, 255, 105, 60, 4, 255, 104, 58, 4, 255, 103, 57, 11, 255, 99, 55, 8, 255, 97, 57, 6, 255, 94, 55, 6, 255, 96, 55, 10, 255, 99, 59, 11, 255, 101, 54, 8, 255, 99, 54, 11, 255, 90, 58, 9, 255, 94, 57, 5, 255, 101, 54, 4, 255, 92, 58, 2, 255, 92, 62, 11, 255, 104, 60, 12, 255, 98, 55, 4, 255, 102, 58, 5, 255, 109, 59, 9, 255, 94, 60, 2, 255, 104, 61, 5, 255, 146, 67, 16, 255, 143, 62, 9, 255, 132, 61, 7, 255, 142, 68, 8, 255, 144, 69, 5, 255, 149, 67, 6, 255, 153, 73, 11, 255, 162, 76, 2, 255, 142, 66, 2, 255, 138, 69, 8, 255, 144, 68, 11, 255, 144, 63, 3, 255, 157, 72, 1, 255, 169, 78, 6, 255, 167, 74, 5, 255, 161, 73, 3, 255, 156, 72, 4, 255, 160, 76, 4, 255, 167, 77, 6, 255, 164, 78, 10, 255, 160, 75, 5, 255, 163, 74, 7, 255, 163, 78, 8, 255, 175, 82, 7, 255, 174, 89, 12, 255, 141, 78, 15, 255, 136, 73, 4, 255, 129, 67, 10, 255, 143, 75, 17, 255, 160, 82, 8, 255, 161, 84, 16, 255, 160, 83, 8, 255, 150, 82, 5, 255, 140, 83, 7, 255, 148, 81, 10, 255, 147, 79, 14, 255, 140, 85, 6, 255, 136, 83, 7, 255, 137, 82, 14, 255, 132, 80, 6, 255, 132, 85, 2, 255, 139, 84, 12, 255, 134, 83, 10, 255, 137, 83, 13, 255, 144, 83, 8, 255, 149, 87, 9, 255, 159, 89, 7, 255, 171, 86, 14, 255, 168, 86, 0, 255, 165, 92, 7, 255, 165, 88, 11, 255, 160, 86, 7, 255, 157, 89, 12, 255, 158, 85, 8, 255, 172, 89, 10, 255, 172, 90, 10, 255, 162, 90, 6, 255, 158, 93, 5, 255, 166, 97, 9, 255, 168, 93, 5, 255, 167, 93, 8, 255, 168, 92, 11, 255, 175, 99, 8, 255, 175, 102, 0, 255, 171, 104, 8, 255, 164, 103, 18, 255, 162, 97, 14, 255, 172, 103, 14, 255, 175, 108, 8, 255, 187, 114, 18, 255, 190, 119, 12, 255, 191, 119, 16, 255, 183, 108, 11, 255, 178, 108, 5, 255, 168, 103, 10, 255, 166, 103, 16, 255, 163, 102, 15, 255, 161, 104, 4, 255, 169, 107, 11, 255, 170, 103, 17, 255, 175, 107, 13, 255, 176, 107, 8, 255, 183, 108, 14, 255, 185, 101, 23, 255, 188, 105, 15, 255, 190, 113, 2, 255, 187, 114, 7, 255, 189, 115, 6, 255, 190, 113, 7, 255, 185, 109, 8, 255, 184, 112, 7, 255, 187, 116, 7, 255, 194, 123, 0, 255, 195, 122, 11, 255, 196, 124, 8, 255, 208, 133, 9, 255, 208, 129, 4, 255, 210, 129, 6, 255, 200, 126, 7, 255, 201, 134, 5, 255, 200, 128, 2, 255, 196, 121, 3, 255, 206, 132, 13, 255, 194, 120, 16, 255, 200, 126, 16, 255, 199, 122, 8, 255, 195, 116, 19, 255, 197, 123, 10, 255, 191, 114, 10, 255, 190, 109, 4, 255, 192, 111, 1, 255, 191, 111, 7, 255, 189, 111, 2, 255, 192, 113, 4, 255, 189, 109, 0, 255, 189, 108, 2, 255, 188, 107, 5, 255, 185, 104, 3, 255, 182, 103, 0, 255, 186, 104, 5, 255, 182, 100, 1, 255, 183, 101, 3, 255, 185, 102, 6, 255, 182, 102, 5, 255, 182, 103, 4, 255, 185, 104, 5, 255, 188, 102, 3, 255, 191, 106, 8, 255, 187, 110, 13, 255, 182, 105, 12, 255, 182, 101, 9, 255, 181, 103, 9, 255, 183, 102, 6, 255, 188, 102, 7, 255, 185, 98, 5, 255, 196, 100, 1, 255, 161, 85, 5, 255, 117, 51, 3, 255, 135, 66, 9, 255, 163, 84, 10, 255, 153, 74, 1, 255, 132, 74, 6, 255, 137, 72, 9, 255, 137, 67, 7, 255, 133, 77, 2, 255, 147, 81, 6, 255, 148, 79, 8, 255, 154, 79, 10, 255, 162, 86, 10, 255, 173, 98, 10, 255, 180, 106, 9, 255, 183, 107, 16, 255, 178, 103, 6, 255, 177, 101, 4, 255, 184, 103, 7, 255, 186, 102, 5, 255, 184, 100, 10, 255, 182, 98, 9, 255, 179, 89, 6, 255, 156, 73, 10, 255, 137, 65, 7, 255, 149, 70, 10, 255, 158, 78, 10, 255, 143, 61, 0, 255, 148, 69, 6, 255, 149, 74, 9, 255, 152, 81, 6, 255, 165, 85, 5, 255, 174, 88, 5, 255, 155, 73, 6, 255, 113, 55, 5, 255, 101, 45, 3, 255, 96, 39, 5, 255, 91, 37, 4, 255, 96, 44, 4, 255, 106, 55, 4, 255, 113, 57, 7, 255, 112, 53, 7, 255, 107, 55, 0, 255, 103, 48, 5, 255, 94, 42, 10, 255, 86, 40, 9, 255, 87, 36, 8, 255, 87, 35, 4, 255, 83, 34, 5, 255, 81, 33, 3, 255, 78, 31, 2, 255, 71, 26, 3, 255, 60, 21, 8, 255, 51, 15, 6, 255, 37, 11, 3, 255, 22, 11, 4, 255, 26, 11, 9, 255, 24, 7, 3, 255, 23, 10, 3, 255, 26, 10, 2, 255, 26, 11, 2, 255, 25, 9, 1, 255, 27, 9, 3, 255, 1, 1, 7, 255, 6, 34, 60, 255, 23, 65, 85, 255, 16, 40, 63, 255, 29, 85, 123, 255, 5, 42, 60, 255, 2, 0, 0, 255, 2, 4, 10, 255, 8, 35, 39, 255, 2, 3, 2, 255, 4, 7, 9, 255, 2, 3, 8, 255, 4, 3, 11, 255, 1, 2, 7, 255, 2, 1, 7, 255, 1, 0, 6, 255, 1, 0, 5, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 2, 255, 0, 2, 5, 255, 2, 3, 6, 255, 2, 3, 6, 255, 0, 1, 5, 255, 1, 2, 7, 255, 3, 4, 9, 255, 3, 3, 11, 255, 0, 1, 8, 255, 1, 3, 9, 255, 0, 4, 7, 255, 0, 3, 8, 255, 2, 4, 9, 255, 1, 2, 7, 255, 1, 2, 6, 255, 3, 2, 7, 255, 1, 0, 6, 255, 2, 1, 4, 255, 1, 0, 5, 255, 0, 0, 4, 255, 1, 1, 0, 255, 2, 2, 4, 255, 2, 4, 17, 255, 1, 7, 20, 255, 6, 14, 35, 255, 12, 27, 66, 255, 13, 51, 71, 255, 5, 32, 135, 255, 3, 141, 251, 255, 6, 83, 124, 255, 6, 0, 0, 255, 2, 8, 95, 255, 12, 40, 186, 255, 17, 27, 16, 255, 24, 19, 10, 255, 17, 13, 12, 255, 8, 13, 2, 255, 15, 16, 10, 255, 14, 10, 6, 255, 9, 4, 1, 255, 15, 14, 9, 255, 11, 11, 6, 255, 11, 7, 3, 255, 11, 4, 1, 255, 9, 4, 1, 255, 6, 2, 0, 255, 3, 1, 0, 255, 2, 1, 0, 255, 2, 0, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 2, 2, 2, 255, 0, 0, 0, 255, 1, 1, 1, 255, 3, 1, 2, 255, 5, 3, 4, 255, 5, 4, 0, 255, 7, 6, 2, 255, 10, 9, 5, 255, 11, 10, 5, 255, 16, 17, 6, 255, 17, 20, 4, 255, 21, 26, 5, 255, 18, 25, 7, 255, 19, 29, 15, 255, 17, 30, 15, 255, 22, 35, 18, 255, 29, 42, 23, 255, 24, 39, 16, 255, 26, 40, 17, 255, 32, 39, 25, 255, 27, 39, 22, 255, 31, 48, 21, 255, 32, 48, 16, 255, 38, 57, 25, 255, 42, 67, 39, 255, 56, 86, 51, 255, 65, 101, 65, 255, 69, 115, 68, 255, 78, 127, 81, 255, 82, 135, 93, 255, 92, 140, 96, 255, 89, 132, 79, 255, 85, 119, 76, 255, 81, 113, 66, 255, 80, 114, 47, 255, 81, 111, 41, 255, 76, 101, 40, 255, 74, 94, 32, 255, 73, 88, 28, 255, 68, 77, 23, 255, 65, 70, 21, 255, 63, 62, 11, 255, 59, 51, 5, 255, 56, 42, 6, 255, 54, 39, 12, 255, 41, 34, 2, 255, 60, 41, 4, 255, 66, 39, 6, 255, 58, 39, 6, 255, 58, 38, 6, 255, 62, 33, 6, 255, 74, 42, 6, 255, 84, 52, 7, 255, 83, 52, 4, 255, 76, 48, 4, 255, 66, 43, 6, 255, 68, 42, 5, 255, 70, 43, 6, 255, 71, 44, 2, 255, 80, 53, 2, 255, 84, 54, 5, 255, 84, 52, 4, 255, 86, 53, 5, 255, 90, 54, 7, 255, 85, 51, 4, 255, 87, 54, 6, 255, 89, 54, 9, 255, 75, 42, 4, 255, 75, 41, 5, 255, 76, 46, 4, 255, 73, 47, 7, 255, 74, 45, 5, 255, 78, 44, 4, 255, 77, 45, 5, 255, 72, 48, 4, 255, 73, 46, 9, 255, 72, 43, 2, 255, 78, 47, 6, 255, 84, 52, 12, 255, 84, 50, 4, 255, 87, 50, 5, 255, 85, 49, 2, 255, 89, 55, 4, 255, 87, 50, 6, 255, 90, 51, 8, 255, 89, 51, 4, 255, 91, 56, 7, 255, 90, 54, 6, 255, 95, 53, 9, 255, 97, 54, 9, 255, 101, 62, 7, 255, 101, 63, 8, 255, 100, 63, 8, 255, 98, 57, 6, 255, 97, 55, 6, 255, 99, 55, 8, 255, 101, 58, 5, 255, 98, 56, 6, 255, 99, 58, 11, 255, 103, 58, 7, 255, 104, 55, 7, 255, 103, 55, 1, 255, 101, 56, 6, 255, 108, 57, 12, 255, 111, 57, 10, 255, 108, 56, 11, 255, 103, 58, 9, 255, 106, 57, 13, 255, 106, 55, 4, 255, 109, 58, 5, 255, 106, 54, 10, 255, 104, 56, 10, 255, 103, 57, 9, 255, 95, 54, 7, 255, 96, 57, 10, 255, 93, 58, 10, 255, 94, 52, 5, 255, 121, 64, 14, 255, 106, 62, 7, 255, 89, 54, 12, 255, 92, 56, 11, 255, 97, 60, 3, 255, 91, 59, 6, 255, 105, 57, 13, 255, 104, 58, 5, 255, 99, 60, 7, 255, 106, 58, 10, 255, 101, 60, 8, 255, 106, 59, 12, 255, 120, 59, 11, 255, 116, 61, 4, 255, 111, 60, 7, 255, 131, 66, 9, 255, 148, 68, 3, 255, 138, 62, 7, 255, 145, 70, 4, 255, 154, 68, 2, 255, 150, 70, 4, 255, 139, 70, 7, 255, 136, 62, 11, 255, 138, 62, 6, 255, 149, 67, 7, 255, 163, 75, 3, 255, 165, 76, 3, 255, 153, 69, 5, 255, 147, 69, 7, 255, 158, 73, 7, 255, 163, 70, 4, 255, 162, 75, 10, 255, 165, 81, 5, 255, 161, 78, 4, 255, 156, 80, 5, 255, 158, 79, 9, 255, 176, 81, 9, 255, 176, 87, 2, 255, 169, 87, 6, 255, 133, 71, 8, 255, 127, 69, 15, 255, 146, 78, 4, 255, 157, 86, 12, 255, 163, 86, 8, 255, 165, 87, 8, 255, 153, 83, 5, 255, 153, 83, 5, 255, 148, 84, 10, 255, 148, 86, 8, 255, 145, 85, 3, 255, 144, 83, 1, 255, 141, 81, 4, 255, 148, 88, 10, 255, 153, 85, 8, 255, 142, 82, 9, 255, 140, 82, 17, 255, 149, 87, 9, 255, 163, 92, 5, 255, 170, 90, 14, 255, 170, 85, 16, 255, 171, 88, 4, 255, 169, 89, 11, 255, 165, 88, 13, 255, 153, 87, 7, 255, 153, 90, 7, 255, 156, 90, 9, 255, 152, 89, 2, 255, 153, 89, 10, 255, 164, 91, 16, 255, 171, 94, 9, 255, 171, 94, 4, 255, 171, 96, 7, 255, 170, 93, 16, 255, 176, 100, 5, 255, 168, 100, 10, 255, 168, 101, 15, 255, 182, 106, 7, 255, 174, 104, 5, 255, 164, 99, 14, 255, 171, 103, 19, 255, 179, 113, 9, 255, 183, 116, 14, 255, 191, 119, 9, 255, 192, 118, 10, 255, 183, 110, 8, 255, 182, 107, 5, 255, 184, 105, 9, 255, 178, 105, 15, 255, 172, 108, 15, 255, 165, 104, 9, 255, 171, 105, 12, 255, 182, 108, 9, 255, 187, 109, 10, 255, 182, 109, 4, 255, 182, 110, 14, 255, 184, 107, 20, 255, 187, 104, 15, 255, 193, 109, 15, 255, 190, 107, 3, 255, 191, 106, 5, 255, 194, 107, 4, 255, 192, 105, 12, 255, 186, 105, 12, 255, 189, 116, 6, 255, 193, 124, 1, 255, 198, 128, 5, 255, 203, 132, 2, 255, 209, 133, 6, 255, 210, 135, 1, 255, 211, 139, 3, 255, 210, 135, 5, 255, 207, 130, 1, 255, 202, 128, 5, 255, 203, 126, 6, 255, 206, 131, 10, 255, 206, 135, 13, 255, 207, 137, 8, 255, 203, 132, 4, 255, 201, 125, 11, 255, 201, 123, 10, 255, 197, 116, 10, 255, 192, 113, 4, 255, 190, 112, 1, 255, 194, 113, 8, 255, 192, 108, 5, 255, 188, 105, 4, 255, 191, 109, 3, 255, 192, 110, 3, 255, 186, 106, 3, 255, 185, 104, 5, 255, 185, 104, 6, 255, 186, 103, 3, 255, 185, 103, 2, 255, 185, 102, 3, 255, 186, 104, 5, 255, 186, 104, 4, 255, 185, 104, 4, 255, 182, 101, 5, 255, 183, 97, 6, 255, 187, 102, 14, 255, 184, 110, 19, 255, 180, 108, 11, 255, 180, 103, 7, 255, 180, 106, 6, 255, 186, 104, 10, 255, 190, 100, 17, 255, 185, 101, 5, 255, 182, 87, 3, 255, 128, 57, 4, 255, 122, 58, 7, 255, 138, 70, 7, 255, 144, 81, 4, 255, 146, 79, 4, 255, 145, 78, 2, 255, 148, 81, 3, 255, 149, 78, 6, 255, 150, 79, 3, 255, 147, 77, 3, 255, 158, 86, 9, 255, 169, 95, 9, 255, 176, 101, 10, 255, 183, 105, 12, 255, 181, 101, 9, 255, 182, 98, 8, 255, 177, 95, 5, 255, 171, 86, 4, 255, 172, 85, 6, 255, 177, 88, 7, 255, 173, 86, 7, 255, 171, 86, 7, 255, 169, 84, 2, 255, 155, 78, 11, 255, 132, 64, 5, 255, 133, 64, 8, 255, 139, 74, 9, 255, 132, 64, 4, 255, 122, 57, 5, 255, 127, 59, 5, 255, 134, 67, 1, 255, 142, 71, 5, 255, 147, 70, 7, 255, 138, 65, 5, 255, 120, 64, 8, 255, 111, 49, 3, 255, 102, 37, 2, 255, 88, 31, 2, 255, 80, 33, 4, 255, 78, 30, 4, 255, 83, 31, 4, 255, 92, 43, 4, 255, 96, 46, 2, 255, 96, 39, 5, 255, 85, 39, 3, 255, 87, 44, 6, 255, 87, 39, 7, 255, 81, 33, 4, 255, 73, 28, 8, 255, 63, 21, 10, 255, 51, 15, 4, 255, 39, 13, 2, 255, 27, 9, 4, 255, 21, 12, 6, 255, 29, 16, 5, 255, 41, 16, 3, 255, 31, 15, 2, 255, 27, 12, 3, 255, 35, 9, 2, 255, 36, 15, 5, 255, 32, 13, 5, 255, 30, 12, 3, 255, 30, 12, 5, 255, 1, 0, 0, 255, 0, 0, 0, 255, 15, 45, 66, 255, 57, 138, 153, 255, 95, 182, 208, 255, 58, 173, 180, 255, 0, 31, 34, 255, 4, 0, 5, 255, 4, 9, 19, 255, 6, 26, 74, 255, 2, 43, 85, 255, 5, 26, 51, 255, 3, 0, 0, 255, 2, 2, 7, 255, 1, 2, 8, 255, 5, 1, 6, 255, 4, 1, 7, 255, 2, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 1, 0, 255, 0, 1, 3, 255, 2, 3, 5, 255, 2, 3, 5, 255, 2, 3, 5, 255, 2, 2, 6, 255, 1, 1, 6, 255, 3, 4, 9, 255, 3, 3, 10, 255, 0, 3, 8, 255, 1, 4, 9, 255, 1, 2, 9, 255, 0, 2, 8, 255, 2, 4, 9, 255, 2, 3, 7, 255, 0, 1, 5, 255, 2, 1, 6, 255, 2, 1, 6, 255, 1, 0, 6, 255, 1, 1, 3, 255, 1, 1, 3, 255, 0, 2, 3, 255, 1, 1, 10, 255, 5, 4, 19, 255, 1, 3, 5, 255, 2, 2, 18, 255, 1, 14, 30, 255, 7, 20, 55, 255, 8, 68, 195, 255, 3, 157, 204, 255, 7, 1, 18, 255, 7, 0, 13, 255, 1, 32, 201, 255, 17, 44, 73, 255, 29, 26, 10, 255, 22, 25, 25, 255, 18, 15, 14, 255, 15, 14, 11, 255, 10, 12, 7, 255, 7, 5, 2, 255, 9, 4, 6, 255, 8, 11, 7, 255, 14, 17, 10, 255, 15, 10, 7, 255, 8, 3, 1, 255, 8, 3, 0, 255, 8, 3, 2, 255, 4, 1, 0, 255, 2, 1, 0, 255, 3, 0, 2, 255, 1, 1, 2, 255, 0, 1, 0, 255, 1, 2, 2, 255, 0, 0, 0, 255, 2, 1, 1, 255, 3, 1, 1, 255, 5, 3, 3, 255, 6, 5, 1, 255, 9, 8, 2, 255, 11, 11, 5, 255, 11, 12, 7, 255, 12, 13, 5, 255, 17, 19, 4, 255, 20, 25, 6, 255, 19, 24, 9, 255, 21, 28, 10, 255, 22, 30, 14, 255, 23, 31, 21, 255, 25, 36, 20, 255, 24, 37, 14, 255, 28, 35, 16, 255, 32, 36, 20, 255, 30, 40, 26, 255, 33, 41, 22, 255, 38, 52, 18, 255, 36, 64, 24, 255, 50, 76, 34, 255, 55, 89, 56, 255, 66, 106, 72, 255, 74, 117, 83, 255, 76, 126, 79, 255, 80, 135, 82, 255, 88, 134, 78, 255, 83, 123, 64, 255, 80, 116, 48, 255, 80, 109, 56, 255, 81, 109, 42, 255, 80, 107, 33, 255, 78, 97, 32, 255, 79, 92, 26, 255, 73, 85, 21, 255, 70, 82, 15, 255, 72, 75, 7, 255, 66, 56, 14, 255, 63, 50, 18, 255, 58, 40, 5, 255, 46, 37, 5, 255, 43, 38, 5, 255, 63, 40, 7, 255, 65, 40, 5, 255, 59, 42, 4, 255, 58, 41, 3, 255, 63, 43, 2, 255, 75, 49, 3, 255, 84, 52, 6, 255, 77, 50, 3, 255, 67, 42, 5, 255, 70, 43, 8, 255, 68, 41, 2, 255, 70, 43, 5, 255, 76, 44, 4, 255, 84, 51, 4, 255, 85, 54, 5, 255, 83, 52, 1, 255, 87, 51, 4, 255, 92, 53, 6, 255, 91, 54, 6, 255, 86, 49, 7, 255, 82, 47, 2, 255, 78, 44, 4, 255, 77, 42, 11, 255, 76, 47, 3, 255, 72, 44, 2, 255, 79, 45, 8, 255, 83, 46, 5, 255, 81, 47, 7, 255, 79, 47, 4, 255, 78, 48, 9, 255, 77, 46, 7, 255, 81, 49, 7, 255, 88, 53, 9, 255, 87, 51, 7, 255, 87, 51, 7, 255, 85, 51, 5, 255, 85, 52, 4, 255, 89, 49, 7, 255, 91, 49, 10, 255, 93, 50, 8, 255, 95, 54, 6, 255, 94, 53, 4, 255, 95, 51, 3, 255, 99, 58, 3, 255, 102, 64, 9, 255, 97, 61, 13, 255, 96, 58, 11, 255, 100, 58, 6, 255, 97, 54, 5, 255, 99, 55, 9, 255, 99, 55, 3, 255, 99, 57, 2, 255, 101, 57, 8, 255, 105, 60, 2, 255, 103, 56, 5, 255, 102, 57, 5, 255, 106, 60, 6, 255, 107, 63, 5, 255, 105, 56, 9, 255, 106, 55, 8, 255, 97, 57, 5, 255, 104, 58, 10, 255, 104, 57, 9, 255, 105, 53, 11, 255, 102, 54, 8, 255, 100, 58, 6, 255, 98, 56, 4, 255, 96, 52, 11, 255, 101, 54, 10, 255, 105, 57, 6, 255, 104, 61, 9, 255, 109, 59, 5, 255, 106, 56, 3, 255, 99, 61, 7, 255, 100, 58, 8, 255, 129, 61, 11, 255, 125, 65, 8, 255, 101, 58, 4, 255, 104, 54, 9, 255, 103, 59, 11, 255, 105, 59, 10, 255, 109, 65, 7, 255, 110, 65, 1, 255, 111, 59, 2, 255, 115, 63, 1, 255, 116, 62, 5, 255, 130, 65, 6, 255, 125, 62, 3, 255, 102, 56, 13, 255, 112, 61, 17, 255, 106, 58, 9, 255, 115, 56, 11, 255, 117, 58, 4, 255, 123, 59, 3, 255, 137, 66, 10, 255, 135, 65, 5, 255, 143, 66, 6, 255, 149, 70, 6, 255, 153, 71, 10, 255, 154, 71, 7, 255, 157, 73, 5, 255, 161, 70, 10, 255, 157, 66, 13, 255, 163, 75, 6, 255, 167, 79, 2, 255, 164, 76, 3, 255, 159, 76, 6, 255, 159, 75, 12, 255, 163, 76, 3, 255, 173, 84, 14, 255, 174, 88, 9, 255, 158, 86, 5, 255, 149, 81, 2, 255, 139, 73, 3, 255, 145, 78, 3, 255, 159, 85, 9, 255, 163, 87, 13, 255, 165, 88, 8, 255, 159, 86, 8, 255, 154, 84, 8, 255, 153, 86, 7, 255, 146, 83, 6, 255, 153, 85, 7, 255, 169, 90, 9, 255, 173, 87, 6, 255, 161, 87, 2, 255, 158, 88, 9, 255, 168, 84, 13, 255, 170, 86, 11, 255, 168, 88, 9, 255, 167, 90, 7, 255, 160, 91, 8, 255, 154, 87, 10, 255, 153, 89, 9, 255, 147, 88, 5, 255, 151, 88, 8, 255, 155, 88, 10, 255, 157, 95, 5, 255, 164, 94, 11, 255, 165, 94, 8, 255, 164, 92, 9, 255, 167, 90, 14, 255, 171, 97, 8, 255, 169, 97, 8, 255, 171, 103, 7, 255, 165, 102, 11, 255, 170, 103, 15, 255, 180, 103, 7, 255, 168, 102, 13, 255, 160, 103, 10, 255, 171, 103, 14, 255, 185, 112, 16, 255, 189, 113, 3, 255, 194, 115, 10, 255, 191, 109, 4, 255, 190, 103, 5, 255, 188, 100, 9, 255, 188, 100, 10, 255, 188, 107, 16, 255, 179, 110, 7, 255, 169, 102, 7, 255, 176, 105, 15, 255, 188, 112, 6, 255, 188, 107, 8, 255, 179, 103, 12, 255, 174, 104, 12, 255, 176, 109, 7, 255, 183, 109, 11, 255, 191, 108, 12, 255, 193, 103, 7, 255, 192, 102, 10, 255, 192, 103, 5, 255, 191, 104, 8, 255, 186, 105, 4, 255, 189, 115, 4, 255, 193, 123, 7, 255, 196, 125, 2, 255, 201, 129, 0, 255, 208, 136, 6, 255, 212, 135, 3, 255, 217, 135, 4, 255, 215, 134, 5, 255, 208, 130, 2, 255, 203, 128, 10, 255, 202, 124, 8, 255, 207, 131, 16, 255, 206, 133, 17, 255, 203, 129, 15, 255, 204, 129, 19, 255, 202, 127, 7, 255, 199, 124, 12, 255, 193, 120, 8, 255, 187, 117, 5, 255, 185, 114, 7, 255, 192, 116, 7, 255, 189, 108, 2, 255, 181, 97, 1, 255, 189, 108, 3, 255, 192, 112, 6, 255, 184, 105, 1, 255, 187, 108, 7, 255, 184, 103, 4, 255, 187, 103, 2, 255, 186, 102, 1, 255, 183, 101, 1, 255, 185, 103, 2, 255, 185, 102, 4, 255, 182, 101, 5, 255, 183, 98, 3, 255, 180, 90, 3, 255, 185, 100, 14, 255, 185, 108, 14, 255, 186, 108, 8, 255, 187, 104, 4, 255, 188, 103, 6, 255, 188, 104, 6, 255, 185, 99, 12, 255, 186, 99, 6, 255, 156, 75, 6, 255, 138, 74, 6, 255, 141, 81, 5, 255, 155, 90, 10, 255, 149, 84, 8, 255, 142, 80, 8, 255, 142, 77, 5, 255, 147, 79, 6, 255, 149, 82, 4, 255, 146, 74, 0, 255, 153, 79, 7, 255, 172, 94, 15, 255, 177, 97, 14, 255, 177, 96, 10, 255, 180, 99, 10, 255, 180, 95, 4, 255, 179, 87, 6, 255, 173, 80, 7, 255, 166, 73, 8, 255, 168, 75, 7, 255, 173, 84, 8, 255, 166, 77, 4, 255, 163, 76, 9, 255, 160, 78, 8, 255, 148, 76, 8, 255, 135, 67, 4, 255, 131, 64, 2, 255, 132, 69, 3, 255, 139, 74, 13, 255, 131, 65, 5, 255, 128, 59, 1, 255, 131, 66, 2, 255, 135, 73, 6, 255, 138, 74, 6, 255, 136, 73, 6, 255, 125, 65, 7, 255, 110, 51, 4, 255, 101, 46, 2, 255, 94, 47, 6, 255, 88, 45, 9, 255, 79, 34, 5, 255, 76, 31, 7, 255, 68, 32, 6, 255, 67, 30, 7, 255, 65, 23, 4, 255, 66, 29, 0, 255, 71, 31, 1, 255, 74, 30, 5, 255, 64, 30, 2, 255, 48, 20, 1, 255, 34, 15, 4, 255, 33, 16, 6, 255, 41, 19, 4, 255, 47, 22, 2, 255, 54, 24, 9, 255, 56, 25, 8, 255, 65, 30, 6, 255, 57, 26, 4, 255, 40, 20, 3, 255, 40, 17, 3, 255, 39, 13, 1, 255, 32, 13, 4, 255, 27, 11, 2, 255, 26, 10, 3, 255, 0, 2, 2, 255, 1, 1, 3, 255, 1, 3, 3, 255, 35, 63, 86, 255, 111, 181, 217, 255, 121, 194, 201, 255, 25, 65, 90, 255, 0, 31, 85, 255, 2, 71, 128, 255, 5, 77, 161, 255, 3, 108, 183, 255, 4, 100, 155, 255, 5, 35, 51, 255, 0, 0, 4, 255, 1, 4, 3, 255, 4, 1, 6, 255, 3, 0, 6, 255, 3, 2, 1, 255, 0, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 3, 255, 1, 2, 5, 255, 0, 1, 5, 255, 1, 2, 6, 255, 2, 3, 7, 255, 2, 3, 7, 255, 2, 3, 7, 255, 1, 2, 5, 255, 1, 2, 6, 255, 1, 2, 7, 255, 2, 2, 9, 255, 2, 3, 7, 255, 1, 2, 6, 255, 2, 3, 7, 255, 1, 2, 6, 255, 1, 2, 6, 255, 3, 2, 7, 255, 1, 1, 7, 255, 1, 1, 4, 255, 2, 1, 0, 255, 0, 2, 5, 255, 1, 4, 15, 255, 1, 2, 12, 255, 3, 1, 4, 255, 2, 0, 5, 255, 5, 2, 9, 255, 6, 11, 82, 255, 4, 170, 243, 255, 8, 58, 106, 255, 11, 0, 0, 255, 4, 10, 132, 255, 7, 55, 164, 255, 20, 31, 15, 255, 20, 37, 48, 255, 26, 32, 31, 255, 18, 21, 17, 255, 20, 24, 26, 255, 11, 12, 4, 255, 6, 5, 0, 255, 8, 5, 8, 255, 9, 15, 15, 255, 13, 23, 17, 255, 12, 12, 13, 255, 6, 5, 1, 255, 8, 2, 1, 255, 8, 3, 3, 255, 4, 3, 1, 255, 3, 2, 0, 255, 2, 0, 2, 255, 1, 1, 2, 255, 1, 2, 1, 255, 3, 3, 3, 255, 0, 0, 0, 255, 2, 1, 1, 255, 4, 3, 0, 255, 6, 5, 1, 255, 9, 9, 5, 255, 10, 11, 4, 255, 11, 12, 4, 255, 15, 17, 9, 255, 11, 13, 3, 255, 20, 21, 7, 255, 21, 27, 12, 255, 18, 27, 10, 255, 23, 32, 12, 255, 29, 37, 14, 255, 25, 33, 10, 255, 22, 35, 15, 255, 25, 34, 18, 255, 28, 32, 13, 255, 26, 38, 14, 255, 32, 40, 19, 255, 37, 43, 22, 255, 37, 55, 30, 255, 41, 75, 31, 255, 59, 84, 44, 255, 59, 94, 64, 255, 68, 109, 70, 255, 78, 120, 82, 255, 78, 127, 84, 255, 85, 130, 74, 255, 87, 124, 56, 255, 79, 116, 49, 255, 77, 113, 37, 255, 80, 108, 37, 255, 82, 103, 37, 255, 82, 101, 32, 255, 79, 96, 31, 255, 76, 87, 23, 255, 76, 83, 14, 255, 73, 77, 16, 255, 70, 69, 6, 255, 66, 54, 13, 255, 58, 49, 8, 255, 50, 41, 7, 255, 45, 40, 6, 255, 52, 39, 3, 255, 61, 39, 2, 255, 64, 45, 3, 255, 59, 41, 4, 255, 61, 38, 9, 255, 70, 47, 5, 255, 77, 52, 0, 255, 77, 52, 4, 255, 72, 48, 6, 255, 68, 43, 7, 255, 72, 46, 1, 255, 69, 43, 4, 255, 64, 47, 0, 255, 71, 44, 4, 255, 84, 47, 2, 255, 87, 53, 4, 255, 86, 55, 5, 255, 86, 54, 2, 255, 84, 54, 3, 255, 86, 54, 5, 255, 82, 48, 6, 255, 80, 45, 9, 255, 80, 46, 9, 255, 76, 44, 5, 255, 78, 46, 6, 255, 80, 46, 4, 255, 79, 44, 5, 255, 82, 49, 9, 255, 81, 50, 5, 255, 79, 45, 6, 255, 79, 49, 5, 255, 84, 50, 6, 255, 87, 48, 4, 255, 90, 55, 6, 255, 91, 59, 6, 255, 89, 53, 4, 255, 93, 53, 9, 255, 88, 53, 7, 255, 93, 52, 8, 255, 95, 54, 5, 255, 97, 54, 4, 255, 95, 52, 7, 255, 96, 54, 13, 255, 92, 51, 10, 255, 97, 58, 5, 255, 103, 63, 7, 255, 102, 59, 7, 255, 101, 59, 5, 255, 101, 56, 7, 255, 96, 51, 6, 255, 100, 56, 8, 255, 99, 56, 7, 255, 102, 57, 8, 255, 104, 56, 5, 255, 104, 57, 8, 255, 99, 54, 4, 255, 107, 58, 8, 255, 108, 56, 6, 255, 112, 61, 3, 255, 110, 60, 4, 255, 109, 61, 12, 255, 102, 55, 9, 255, 105, 57, 12, 255, 109, 58, 12, 255, 107, 59, 8, 255, 105, 60, 6, 255, 103, 60, 6, 255, 99, 59, 6, 255, 95, 52, 4, 255, 101, 56, 9, 255, 104, 58, 4, 255, 101, 61, 6, 255, 100, 58, 6, 255, 120, 61, 9, 255, 117, 58, 4, 255, 104, 60, 3, 255, 121, 65, 9, 255, 112, 59, 9, 255, 99, 58, 4, 255, 103, 57, 18, 255, 101, 56, 9, 255, 102, 58, 1, 255, 115, 64, 2, 255, 115, 60, 13, 255, 119, 66, 7, 255, 122, 66, 7, 255, 125, 69, 2, 255, 121, 63, 6, 255, 102, 59, 3, 255, 90, 61, 9, 255, 98, 57, 9, 255, 101, 58, 6, 255, 101, 57, 16, 255, 123, 60, 9, 255, 131, 67, 1, 255, 137, 66, 8, 255, 145, 71, 0, 255, 137, 68, 13, 255, 137, 68, 12, 255, 150, 73, 5, 255, 162, 74, 5, 255, 165, 73, 2, 255, 158, 70, 0, 255, 155, 67, 10, 255, 153, 71, 4, 255, 161, 80, 0, 255, 165, 79, 4, 255, 167, 79, 7, 255, 161, 77, 11, 255, 157, 78, 5, 255, 158, 76, 3, 255, 164, 77, 11, 255, 171, 77, 11, 255, 169, 87, 8, 255, 164, 89, 6, 255, 162, 86, 11, 255, 155, 79, 3, 255, 163, 85, 4, 255, 165, 90, 10, 255, 166, 88, 6, 255, 170, 90, 10, 255, 165, 89, 6, 255, 157, 88, 2, 255, 150, 84, 7, 255, 148, 82, 6, 255, 158, 87, 7, 255, 164, 91, 5, 255, 168, 90, 5, 255, 168, 86, 11, 255, 165, 85, 9, 255, 164, 91, 2, 255, 159, 94, 7, 255, 153, 89, 8, 255, 152, 91, 10, 255, 148, 88, 9, 255, 152, 91, 7, 255, 156, 88, 10, 255, 158, 87, 11, 255, 162, 91, 7, 255, 169, 94, 6, 255, 165, 96, 4, 255, 162, 94, 8, 255, 167, 95, 12, 255, 169, 98, 6, 255, 169, 102, 7, 255, 174, 100, 6, 255, 171, 102, 3, 255, 173, 107, 9, 255, 179, 107, 12, 255, 168, 105, 7, 255, 165, 102, 2, 255, 180, 101, 8, 255, 190, 101, 10, 255, 198, 109, 3, 255, 191, 109, 5, 255, 185, 102, 8, 255, 186, 99, 12, 255, 182, 101, 9, 255, 181, 105, 6, 255, 178, 106, 11, 255, 169, 102, 9, 255, 165, 101, 7, 255, 173, 104, 10, 255, 182, 109, 18, 255, 179, 107, 14, 255, 176, 106, 12, 255, 176, 109, 7, 255, 177, 109, 6, 255, 183, 112, 8, 255, 188, 111, 11, 255, 188, 105, 9, 255, 192, 108, 3, 255, 196, 115, 5, 255, 188, 112, 8, 255, 188, 115, 3, 255, 193, 123, 2, 255, 195, 124, 6, 255, 198, 123, 7, 255, 202, 128, 2, 255, 207, 133, 1, 255, 214, 135, 5, 255, 218, 135, 6, 255, 196, 112, 8, 255, 192, 112, 2, 255, 204, 126, 3, 255, 207, 126, 6, 255, 204, 125, 6, 255, 208, 134, 12, 255, 206, 134, 15, 255, 200, 128, 12, 255, 199, 123, 8, 255, 200, 123, 11, 255, 195, 120, 7, 255, 191, 117, 3, 255, 192, 115, 6, 255, 192, 114, 5, 255, 192, 112, 4, 255, 192, 109, 6, 255, 192, 110, 4, 255, 189, 109, 2, 255, 185, 106, 0, 255, 185, 106, 2, 255, 186, 104, 4, 255, 187, 102, 4, 255, 186, 104, 4, 255, 183, 102, 2, 255, 184, 101, 3, 255, 183, 99, 4, 255, 179, 96, 3, 255, 186, 103, 5, 255, 184, 101, 6, 255, 186, 108, 11, 255, 186, 111, 6, 255, 184, 105, 7, 255, 187, 104, 5, 255, 186, 100, 3, 255, 178, 98, 3, 255, 179, 99, 4, 255, 179, 93, 13, 255, 169, 94, 11, 255, 162, 97, 6, 255, 160, 88, 8, 255, 154, 86, 5, 255, 148, 86, 5, 255, 143, 78, 1, 255, 153, 84, 6, 255, 163, 90, 13, 255, 160, 87, 14, 255, 153, 82, 10, 255, 162, 88, 7, 255, 172, 92, 5, 255, 180, 97, 6, 255, 180, 96, 8, 255, 183, 97, 14, 255, 176, 90, 7, 255, 175, 83, 9, 255, 167, 74, 7, 255, 166, 73, 4, 255, 169, 80, 0, 255, 170, 86, 0, 255, 165, 82, 4, 255, 155, 73, 6, 255, 146, 71, 6, 255, 138, 69, 5, 255, 136, 68, 4, 255, 136, 67, 3, 255, 134, 67, 6, 255, 136, 72, 8, 255, 139, 71, 11, 255, 134, 67, 15, 255, 133, 68, 10, 255, 133, 72, 7, 255, 128, 68, 6, 255, 130, 69, 5, 255, 128, 73, 2, 255, 120, 64, 6, 255, 113, 59, 6, 255, 106, 59, 9, 255, 106, 62, 5, 255, 111, 64, 3, 255, 107, 57, 3, 255, 97, 51, 7, 255, 85, 44, 6, 255, 78, 36, 10, 255, 71, 28, 6, 255, 65, 25, 4, 255, 61, 26, 3, 255, 73, 28, 1, 255, 70, 35, 5, 255, 68, 39, 7, 255, 65, 36, 4, 255, 75, 41, 7, 255, 84, 43, 8, 255, 82, 40, 4, 255, 83, 38, 5, 255, 79, 40, 5, 255, 72, 39, 3, 255, 68, 31, 2, 255, 65, 29, 5, 255, 54, 28, 5, 255, 46, 19, 5, 255, 35, 15, 5, 255, 27, 12, 3, 255, 1, 2, 2, 255, 3, 0, 1, 255, 4, 0, 0, 255, 0, 0, 3, 255, 37, 70, 86, 255, 105, 147, 174, 255, 100, 129, 151, 255, 34, 70, 102, 255, 9, 87, 157, 255, 2, 113, 183, 255, 5, 132, 190, 255, 2, 125, 181, 255, 2, 51, 85, 255, 1, 1, 10, 255, 3, 3, 7, 255, 4, 4, 9, 255, 0, 2, 4, 255, 2, 2, 1, 255, 1, 2, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 1, 2, 5, 255, 1, 2, 7, 255, 1, 2, 7, 255, 1, 2, 8, 255, 1, 3, 6, 255, 1, 2, 6, 255, 1, 2, 6, 255, 1, 2, 7, 255, 2, 3, 8, 255, 2, 3, 8, 255, 0, 1, 4, 255, 0, 0, 4, 255, 1, 2, 6, 255, 2, 3, 7, 255, 2, 3, 7, 255, 1, 1, 7, 255, 0, 2, 3, 255, 0, 0, 5, 255, 0, 1, 1, 255, 1, 3, 5, 255, 0, 2, 17, 255, 2, 2, 12, 255, 3, 2, 7, 255, 2, 5, 4, 255, 4, 0, 1, 255, 3, 100, 189, 255, 4, 144, 204, 255, 13, 0, 0, 255, 8, 2, 42, 255, 2, 39, 219, 255, 18, 40, 51, 255, 29, 25, 25, 255, 26, 30, 33, 255, 23, 25, 19, 255, 25, 28, 27, 255, 22, 31, 28, 255, 9, 17, 17, 255, 6, 9, 3, 255, 7, 5, 2, 255, 14, 17, 14, 255, 18, 26, 19, 255, 15, 17, 13, 255, 10, 8, 4, 255, 8, 3, 1, 255, 7, 2, 2, 255, 6, 2, 1, 255, 4, 3, 1, 255, 4, 2, 1, 255, 5, 1, 1, 255, 2, 1, 0, 255, 3, 3, 3, 255, 2, 2, 1, 255, 2, 2, 0, 255, 6, 5, 1, 255, 11, 8, 4, 255, 9, 8, 3, 255, 9, 11, 2, 255, 12, 14, 3, 255, 13, 15, 3, 255, 17, 19, 5, 255, 22, 24, 8, 255, 15, 26, 7, 255, 15, 29, 12, 255, 16, 28, 14, 255, 23, 35, 13, 255, 24, 34, 7, 255, 20, 32, 10, 255, 25, 31, 19, 255, 28, 33, 17, 255, 28, 39, 23, 255, 34, 43, 22, 255, 34, 53, 18, 255, 37, 65, 32, 255, 47, 79, 36, 255, 59, 90, 50, 255, 65, 104, 60, 255, 70, 110, 65, 255, 83, 123, 66, 255, 85, 124, 72, 255, 88, 124, 57, 255, 84, 114, 55, 255, 78, 107, 48, 255, 78, 102, 51, 255, 82, 104, 33, 255, 82, 101, 23, 255, 83, 95, 22, 255, 77, 87, 27, 255, 73, 85, 25, 255, 76, 83, 16, 255, 77, 76, 15, 255, 71, 66, 13, 255, 63, 63, 4, 255, 53, 49, 4, 255, 51, 40, 9, 255, 56, 40, 7, 255, 59, 38, 5, 255, 67, 41, 5, 255, 70, 42, 4, 255, 58, 37, 2, 255, 62, 44, 5, 255, 80, 52, 6, 255, 84, 50, 5, 255, 85, 48, 4, 255, 82, 50, 2, 255, 74, 46, 4, 255, 69, 41, 2, 255, 70, 47, 6, 255, 65, 49, 3, 255, 73, 48, 7, 255, 86, 50, 6, 255, 87, 50, 5, 255, 87, 54, 7, 255, 91, 56, 4, 255, 88, 52, 9, 255, 83, 51, 7, 255, 82, 49, 3, 255, 80, 44, 12, 255, 77, 41, 11, 255, 77, 44, 0, 255, 79, 46, 5, 255, 84, 46, 8, 255, 82, 46, 5, 255, 79, 48, 5, 255, 77, 46, 7, 255, 81, 44, 6, 255, 83, 47, 10, 255, 87, 49, 11, 255, 88, 50, 10, 255, 88, 52, 8, 255, 89, 52, 6, 255, 93, 52, 6, 255, 90, 54, 4, 255, 82, 53, 6, 255, 90, 52, 12, 255, 90, 53, 8, 255, 95, 56, 4, 255, 96, 57, 4, 255, 95, 56, 8, 255, 97, 55, 12, 255, 99, 56, 7, 255, 103, 58, 5, 255, 103, 58, 10, 255, 101, 58, 4, 255, 99, 59, 2, 255, 98, 56, 4, 255, 102, 59, 6, 255, 100, 57, 6, 255, 100, 55, 9, 255, 103, 57, 6, 255, 103, 56, 13, 255, 105, 58, 10, 255, 109, 58, 10, 255, 106, 55, 1, 255, 109, 56, 7, 255, 111, 58, 5, 255, 110, 59, 9, 255, 106, 56, 9, 255, 107, 57, 2, 255, 107, 57, 6, 255, 107, 56, 7, 255, 103, 57, 5, 255, 104, 57, 3, 255, 105, 58, 5, 255, 93, 58, 4, 255, 95, 59, 9, 255, 102, 60, 11, 255, 96, 57, 3, 255, 106, 61, 7, 255, 109, 62, 12, 255, 104, 55, 8, 255, 106, 57, 8, 255, 102, 61, 8, 255, 98, 58, 8, 255, 98, 61, 9, 255, 100, 53, 15, 255, 117, 66, 7, 255, 123, 66, 3, 255, 118, 64, 10, 255, 113, 63, 13, 255, 114, 70, 2, 255, 119, 68, 6, 255, 120, 64, 11, 255, 107, 58, 11, 255, 107, 63, 12, 255, 106, 66, 8, 255, 110, 62, 2, 255, 134, 65, 8, 255, 140, 68, 10, 255, 152, 73, 6, 255, 166, 81, 5, 255, 151, 66, 15, 255, 149, 67, 6, 255, 143, 74, 2, 255, 137, 69, 5, 255, 153, 74, 14, 255, 167, 81, 10, 255, 162, 72, 4, 255, 158, 69, 5, 255, 159, 77, 6, 255, 156, 76, 2, 255, 163, 79, 4, 255, 172, 83, 4, 255, 171, 84, 5, 255, 167, 83, 4, 255, 164, 82, 4, 255, 164, 82, 4, 255, 159, 77, 4, 255, 154, 76, 6, 255, 164, 78, 10, 255, 176, 86, 14, 255, 172, 86, 3, 255, 158, 85, 8, 255, 146, 80, 12, 255, 150, 79, 6, 255, 158, 83, 3, 255, 163, 85, 7, 255, 170, 94, 13, 255, 166, 93, 6, 255, 158, 87, 13, 255, 157, 89, 7, 255, 160, 92, 9, 255, 154, 89, 12, 255, 157, 92, 8, 255, 162, 93, 6, 255, 161, 90, 4, 255, 161, 91, 4, 255, 165, 94, 11, 255, 157, 92, 13, 255, 147, 90, 8, 255, 147, 90, 6, 255, 151, 90, 5, 255, 155, 87, 7, 255, 162, 89, 11, 255, 164, 90, 6, 255, 168, 92, 5, 255, 167, 94, 8, 255, 167, 96, 12, 255, 168, 98, 11, 255, 168, 98, 1, 255, 169, 102, 6, 255, 168, 101, 11, 255, 165, 105, 2, 255, 172, 110, 0, 255, 179, 103, 8, 255, 178, 103, 12, 255, 177, 100, 8, 255, 185, 99, 2, 255, 189, 105, 12, 255, 195, 111, 10, 255, 195, 117, 7, 255, 194, 117, 12, 255, 188, 112, 12, 255, 178, 108, 9, 255, 173, 107, 12, 255, 167, 104, 16, 255, 163, 104, 11, 255, 165, 105, 11, 255, 169, 105, 9, 255, 172, 107, 13, 255, 173, 107, 13, 255, 172, 109, 1, 255, 175, 108, 9, 255, 181, 111, 8, 255, 185, 113, 7, 255, 185, 113, 6, 255, 187, 113, 10, 255, 191, 111, 10, 255, 194, 118, 10, 255, 190, 116, 12, 255, 189, 119, 7, 255, 194, 124, 4, 255, 195, 126, 4, 255, 199, 125, 10, 255, 203, 129, 5, 255, 205, 131, 4, 255, 213, 134, 6, 255, 217, 139, 3, 255, 209, 129, 15, 255, 204, 130, 7, 255, 201, 131, 3, 255, 203, 128, 1, 255, 206, 131, 3, 255, 211, 135, 14, 255, 208, 131, 16, 255, 206, 127, 12, 255, 203, 128, 9, 255, 199, 125, 4, 255, 196, 120, 5, 255, 192, 114, 5, 255, 194, 114, 4, 255, 193, 110, 3, 255, 194, 109, 3, 255, 191, 110, 3, 255, 191, 110, 2, 255, 192, 111, 3, 255, 190, 109, 3, 255, 188, 107, 5, 255, 186, 104, 4, 255, 184, 102, 1, 255, 185, 104, 5, 255, 182, 100, 5, 255, 183, 98, 5, 255, 186, 100, 4, 255, 183, 100, 1, 255, 184, 103, 5, 255, 186, 107, 12, 255, 186, 108, 11, 255, 184, 110, 10, 255, 179, 103, 14, 255, 180, 103, 14, 255, 175, 101, 8, 255, 169, 98, 14, 255, 176, 104, 19, 255, 177, 107, 9, 255, 166, 100, 16, 255, 148, 84, 19, 255, 155, 90, 12, 255, 153, 92, 5, 255, 153, 91, 6, 255, 164, 99, 13, 255, 168, 99, 11, 255, 166, 92, 9, 255, 159, 87, 12, 255, 155, 83, 7, 255, 162, 86, 3, 255, 173, 92, 6, 255, 175, 92, 5, 255, 176, 92, 8, 255, 178, 92, 11, 255, 181, 92, 11, 255, 176, 92, 8, 255, 168, 82, 4, 255, 166, 81, 7, 255, 163, 81, 7, 255, 159, 80, 7, 255, 154, 78, 6, 255, 148, 73, 6, 255, 147, 71, 9, 255, 143, 69, 11, 255, 139, 69, 9, 255, 136, 69, 6, 255, 137, 72, 6, 255, 141, 75, 8, 255, 136, 68, 6, 255, 126, 57, 17, 255, 119, 54, 7, 255, 125, 65, 0, 255, 124, 68, 3, 255, 117, 62, 11, 255, 115, 59, 7, 255, 115, 60, 10, 255, 112, 59, 9, 255, 107, 56, 7, 255, 112, 62, 2, 255, 117, 65, 1, 255, 112, 56, 4, 255, 108, 56, 5, 255, 106, 56, 3, 255, 103, 56, 8, 255, 90, 43, 4, 255, 84, 40, 4, 255, 87, 46, 4, 255, 95, 45, 6, 255, 98, 49, 7, 255, 97, 49, 5, 255, 93, 45, 3, 255, 91, 45, 8, 255, 85, 43, 10, 255, 77, 37, 5, 255, 79, 39, 4, 255, 80, 42, 2, 255, 82, 44, 3, 255, 87, 41, 3, 255, 85, 35, 2, 255, 79, 35, 5, 255, 66, 29, 7, 255, 55, 22, 4, 255, 47, 19, 4, 255, 0, 0, 5, 255, 0, 1, 0, 255, 3, 1, 1, 255, 2, 1, 3, 255, 0, 0, 0, 255, 0, 6, 14, 255, 83, 75, 111, 255, 153, 139, 152, 255, 91, 104, 136, 255, 22, 117, 183, 255, 2, 103, 147, 255, 5, 66, 95, 255, 9, 36, 88, 255, 12, 78, 95, 255, 3, 41, 35, 255, 2, 0, 4, 255, 6, 1, 5, 255, 4, 0, 5, 255, 0, 1, 5, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 1, 255, 2, 1, 5, 255, 2, 3, 8, 255, 3, 3, 11, 255, 1, 3, 9, 255, 1, 2, 6, 255, 2, 3, 7, 255, 2, 3, 7, 255, 2, 3, 7, 255, 2, 3, 8, 255, 2, 3, 8, 255, 1, 1, 2, 255, 4, 5, 8, 255, 2, 3, 7, 255, 0, 1, 5, 255, 2, 3, 8, 255, 2, 3, 8, 255, 1, 2, 8, 255, 0, 2, 4, 255, 1, 4, 4, 255, 0, 3, 12, 255, 0, 2, 13, 255, 1, 1, 6, 255, 1, 2, 14, 255, 1, 0, 0, 255, 6, 8, 90, 255, 3, 161, 245, 255, 10, 24, 68, 255, 8, 0, 0, 255, 1, 26, 169, 255, 7, 41, 140, 255, 31, 25, 8, 255, 28, 32, 26, 255, 26, 23, 18, 255, 22, 25, 25, 255, 28, 26, 31, 255, 27, 30, 32, 255, 21, 32, 32, 255, 7, 13, 6, 255, 8, 7, 2, 255, 8, 6, 5, 255, 18, 20, 20, 255, 24, 24, 25, 255, 11, 12, 6, 255, 7, 5, 2, 255, 8, 3, 3, 255, 7, 3, 2, 255, 3, 2, 0, 255, 5, 3, 1, 255, 8, 2, 2, 255, 5, 0, 0, 255, 3, 2, 0, 255, 3, 3, 1, 255, 3, 5, 0, 255, 6, 5, 0, 255, 13, 10, 4, 255, 9, 9, 4, 255, 10, 11, 3, 255, 15, 17, 7, 255, 16, 19, 8, 255, 18, 22, 7, 255, 20, 24, 8, 255, 22, 28, 12, 255, 19, 27, 10, 255, 19, 27, 13, 255, 25, 31, 14, 255, 29, 32, 8, 255, 31, 34, 12, 255, 28, 33, 15, 255, 29, 34, 13, 255, 35, 39, 22, 255, 31, 50, 16, 255, 34, 60, 20, 255, 46, 73, 37, 255, 53, 84, 45, 255, 65, 93, 48, 255, 73, 106, 48, 255, 78, 115, 59, 255, 83, 122, 60, 255, 83, 121, 62, 255, 82, 118, 60, 255, 82, 110, 51, 255, 80, 106, 27, 255, 83, 101, 40, 255, 83, 98, 37, 255, 83, 92, 43, 255, 80, 88, 28, 255, 76, 82, 14, 255, 72, 79, 25, 255, 64, 78, 17, 255, 75, 74, 2, 255, 75, 64, 3, 255, 56, 56, 2, 255, 46, 49, 7, 255, 49, 40, 6, 255, 52, 38, 4, 255, 62, 42, 8, 255, 68, 43, 8, 255, 64, 39, 2, 255, 60, 39, 2, 255, 71, 46, 6, 255, 82, 51, 4, 255, 87, 53, 4, 255, 85, 53, 4, 255, 73, 50, 2, 255, 65, 47, 1, 255, 65, 48, 5, 255, 65, 46, 2, 255, 72, 47, 1, 255, 80, 49, 7, 255, 84, 53, 6, 255, 83, 52, 5, 255, 86, 52, 5, 255, 90, 52, 8, 255, 85, 48, 5, 255, 81, 48, 5, 255, 81, 48, 4, 255, 81, 47, 2, 255, 82, 45, 6, 255, 79, 43, 7, 255, 80, 46, 3, 255, 83, 43, 7, 255, 84, 50, 6, 255, 70, 45, 1, 255, 75, 48, 9, 255, 85, 47, 9, 255, 86, 46, 10, 255, 83, 49, 6, 255, 87, 54, 8, 255, 85, 50, 9, 255, 89, 50, 12, 255, 94, 53, 7, 255, 93, 52, 3, 255, 90, 54, 6, 255, 91, 50, 1, 255, 94, 54, 4, 255, 97, 54, 7, 255, 93, 52, 7, 255, 94, 54, 8, 255, 100, 58, 5, 255, 103, 59, 1, 255, 106, 61, 8, 255, 105, 60, 5, 255, 100, 58, 6, 255, 97, 59, 6, 255, 101, 62, 0, 255, 105, 60, 2, 255, 105, 60, 7, 255, 101, 57, 3, 255, 104, 57, 9, 255, 103, 57, 2, 255, 106, 58, 7, 255, 106, 55, 7, 255, 108, 57, 6, 255, 109, 57, 10, 255, 110, 57, 7, 255, 109, 57, 4, 255, 113, 62, 9, 255, 110, 58, 11, 255, 110, 59, 11, 255, 107, 61, 6, 255, 111, 63, 6, 255, 102, 56, 1, 255, 106, 56, 4, 255, 117, 57, 13, 255, 111, 50, 11, 255, 107, 55, 12, 255, 107, 58, 11, 255, 124, 66, 9, 255, 114, 61, 4, 255, 108, 57, 9, 255, 105, 57, 9, 255, 114, 56, 9, 255, 121, 63, 19, 255, 95, 56, 5, 255, 102, 58, 8, 255, 129, 66, 10, 255, 139, 67, 4, 255, 116, 66, 6, 255, 114, 67, 2, 255, 118, 63, 9, 255, 121, 65, 6, 255, 123, 72, 11, 255, 120, 70, 2, 255, 122, 66, 5, 255, 113, 66, 2, 255, 118, 59, 4, 255, 136, 63, 8, 255, 123, 58, 1, 255, 125, 58, 15, 255, 137, 68, 9, 255, 143, 69, 3, 255, 149, 71, 14, 255, 173, 83, 12, 255, 170, 78, 2, 255, 151, 70, 11, 255, 154, 75, 8, 255, 160, 76, 5, 255, 160, 71, 6, 255, 164, 77, 3, 255, 165, 80, 6, 255, 165, 77, 9, 255, 168, 80, 4, 255, 158, 76, 3, 255, 160, 77, 6, 255, 159, 72, 6, 255, 159, 70, 13, 255, 162, 79, 12, 255, 150, 77, 6, 255, 155, 79, 7, 255, 159, 80, 7, 255, 164, 84, 10, 255, 178, 87, 10, 255, 173, 85, 12, 255, 152, 84, 12, 255, 145, 83, 5, 255, 156, 80, 6, 255, 167, 88, 7, 255, 172, 91, 5, 255, 172, 92, 11, 255, 167, 91, 2, 255, 166, 93, 4, 255, 166, 93, 11, 255, 164, 93, 5, 255, 164, 93, 7, 255, 166, 93, 16, 255, 163, 90, 11, 255, 160, 89, 3, 255, 159, 87, 5, 255, 158, 87, 9, 255, 156, 90, 6, 255, 153, 90, 4, 255, 155, 90, 8, 255, 158, 92, 10, 255, 160, 95, 7, 255, 164, 93, 7, 255, 165, 96, 4, 255, 167, 99, 5, 255, 167, 97, 8, 255, 169, 98, 9, 255, 172, 101, 4, 255, 174, 102, 13, 255, 171, 102, 12, 255, 177, 106, 4, 255, 181, 106, 7, 255, 177, 107, 14, 255, 171, 103, 13, 255, 177, 108, 2, 255, 183, 113, 12, 255, 189, 115, 12, 255, 195, 122, 5, 255, 195, 120, 9, 255, 186, 111, 6, 255, 181, 108, 12, 255, 174, 105, 18, 255, 170, 104, 9, 255, 168, 104, 4, 255, 173, 106, 6, 255, 174, 103, 7, 255, 176, 106, 8, 255, 177, 108, 7, 255, 179, 107, 10, 255, 180, 109, 9, 255, 183, 110, 15, 255, 182, 110, 16, 255, 184, 111, 15, 255, 186, 114, 13, 255, 189, 114, 18, 255, 186, 116, 4, 255, 186, 116, 6, 255, 189, 118, 9, 255, 189, 119, 5, 255, 195, 125, 3, 255, 201, 129, 1, 255, 206, 131, 0, 255, 210, 131, 6, 255, 215, 135, 7, 255, 215, 137, 1, 255, 212, 134, 3, 255, 208, 133, 1, 255, 204, 127, 4, 255, 205, 127, 4, 255, 206, 131, 4, 255, 212, 139, 11, 255, 210, 137, 7, 255, 205, 129, 6, 255, 201, 128, 7, 255, 198, 126, 4, 255, 197, 123, 14, 255, 192, 117, 16, 255, 192, 117, 9, 255, 191, 115, 0, 255, 193, 116, 1, 255, 192, 112, 2, 255, 189, 109, 0, 255, 192, 111, 3, 255, 191, 110, 4, 255, 188, 106, 4, 255, 184, 101, 3, 255, 184, 103, 4, 255, 182, 102, 4, 255, 179, 99, 3, 255, 182, 100, 5, 255, 185, 103, 6, 255, 184, 104, 5, 255, 180, 102, 1, 255, 184, 105, 8, 255, 184, 107, 8, 255, 184, 110, 10, 255, 183, 109, 17, 255, 179, 110, 18, 255, 175, 108, 14, 255, 173, 107, 24, 255, 177, 111, 20, 255, 177, 111, 18, 255, 171, 105, 23, 255, 167, 107, 14, 255, 168, 108, 0, 255, 169, 103, 9, 255, 161, 96, 7, 255, 158, 95, 8, 255, 154, 89, 7, 255, 154, 87, 8, 255, 158, 84, 10, 255, 156, 81, 4, 255, 160, 83, 1, 255, 163, 82, 3, 255, 167, 84, 7, 255, 164, 81, 7, 255, 166, 82, 9, 255, 167, 81, 10, 255, 157, 75, 7, 255, 157, 75, 4, 255, 158, 78, 5, 255, 153, 74, 7, 255, 149, 70, 9, 255, 149, 73, 14, 255, 144, 73, 8, 255, 145, 72, 6, 255, 145, 65, 9, 255, 137, 63, 7, 255, 132, 66, 5, 255, 133, 68, 3, 255, 138, 69, 5, 255, 137, 71, 6, 255, 134, 69, 6, 255, 127, 64, 2, 255, 125, 64, 3, 255, 122, 65, 5, 255, 118, 64, 2, 255, 112, 60, 0, 255, 107, 54, 5, 255, 104, 54, 1, 255, 105, 57, 2, 255, 107, 58, 8, 255, 110, 58, 7, 255, 103, 52, 8, 255, 99, 53, 8, 255, 99, 54, 6, 255, 105, 60, 6, 255, 104, 59, 7, 255, 102, 57, 6, 255, 101, 57, 6, 255, 102, 55, 9, 255, 102, 52, 7, 255, 95, 48, 2, 255, 95, 47, 4, 255, 90, 41, 4, 255, 80, 40, 6, 255, 83, 37, 4, 255, 92, 42, 6, 255, 92, 47, 5, 255, 91, 46, 4, 255, 87, 42, 1, 255, 84, 39, 2, 255, 80, 37, 4, 255, 75, 32, 8, 255, 68, 29, 3, 255, 68, 30, 3, 255, 1, 1, 4, 255, 2, 1, 0, 255, 1, 3, 2, 255, 4, 0, 2, 255, 4, 1, 2, 255, 2, 0, 0, 255, 11, 5, 12, 255, 57, 57, 69, 255, 46, 38, 51, 255, 24, 100, 144, 255, 0, 97, 130, 255, 8, 51, 89, 255, 29, 123, 155, 255, 11, 105, 113, 255, 1, 34, 28, 255, 4, 6, 3, 255, 1, 0, 1, 255, 2, 2, 1, 255, 3, 1, 4, 255, 1, 1, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 0, 3, 255, 0, 1, 6, 255, 2, 3, 10, 255, 2, 5, 10, 255, 1, 2, 6, 255, 3, 4, 8, 255, 2, 3, 8, 255, 2, 3, 6, 255, 2, 3, 7, 255, 2, 3, 7, 255, 1, 2, 3, 255, 3, 4, 7, 255, 1, 2, 6, 255, 1, 2, 6, 255, 0, 1, 6, 255, 2, 3, 8, 255, 3, 3, 9, 255, 1, 5, 6, 255, 1, 4, 12, 255, 1, 3, 14, 255, 0, 1, 7, 255, 0, 0, 10, 255, 1, 2, 2, 255, 5, 0, 7, 255, 3, 106, 193, 255, 1, 87, 161, 255, 13, 1, 0, 255, 8, 5, 74, 255, 8, 33, 201, 255, 15, 22, 31, 255, 27, 31, 25, 255, 30, 28, 26, 255, 22, 26, 22, 255, 23, 30, 20, 255, 23, 26, 26, 255, 19, 25, 24, 255, 21, 24, 33, 255, 17, 22, 24, 255, 13, 9, 7, 255, 12, 8, 3, 255, 14, 16, 11, 255, 19, 22, 18, 255, 16, 18, 14, 255, 10, 7, 5, 255, 7, 2, 1, 255, 7, 2, 3, 255, 6, 2, 1, 255, 5, 1, 0, 255, 8, 3, 1, 255, 7, 2, 0, 255, 4, 3, 1, 255, 5, 5, 2, 255, 7, 7, 2, 255, 7, 7, 0, 255, 10, 9, 0, 255, 9, 10, 4, 255, 13, 14, 6, 255, 12, 13, 5, 255, 16, 19, 7, 255, 14, 18, 4, 255, 19, 23, 9, 255, 20, 24, 13, 255, 22, 28, 9, 255, 19, 26, 7, 255, 23, 25, 13, 255, 27, 29, 10, 255, 29, 32, 8, 255, 31, 36, 12, 255, 29, 37, 8, 255, 35, 47, 14, 255, 38, 55, 18, 255, 48, 69, 33, 255, 52, 80, 27, 255, 59, 87, 47, 255, 66, 98, 54, 255, 73, 106, 55, 255, 80, 117, 57, 255, 83, 118, 57, 255, 86, 114, 58, 255, 82, 105, 61, 255, 78, 102, 41, 255, 78, 100, 34, 255, 82, 99, 26, 255, 85, 99, 29, 255, 80, 92, 20, 255, 79, 84, 22, 255, 76, 80, 18, 255, 71, 80, 21, 255, 64, 78, 11, 255, 74, 72, 4, 255, 74, 64, 8, 255, 53, 52, 8, 255, 48, 46, 3, 255, 55, 41, 6, 255, 48, 41, 4, 255, 58, 45, 6, 255, 64, 40, 4, 255, 59, 42, 2, 255, 69, 46, 6, 255, 76, 50, 4, 255, 75, 55, 3, 255, 84, 54, 5, 255, 84, 54, 3, 255, 75, 51, 2, 255, 68, 48, 0, 255, 66, 46, 4, 255, 74, 48, 4, 255, 80, 48, 1, 255, 81, 48, 3, 255, 83, 52, 1, 255, 85, 54, 5, 255, 83, 53, 3, 255, 84, 51, 3, 255, 84, 50, 4, 255, 80, 48, 2, 255, 79, 46, 6, 255, 83, 47, 3, 255, 85, 48, 2, 255, 84, 48, 7, 255, 77, 45, 1, 255, 80, 43, 4, 255, 82, 48, 4, 255, 76, 48, 2, 255, 77, 46, 6, 255, 87, 49, 10, 255, 87, 56, 4, 255, 87, 53, 4, 255, 85, 49, 4, 255, 86, 55, 4, 255, 91, 61, 8, 255, 92, 52, 5, 255, 98, 52, 8, 255, 95, 53, 4, 255, 96, 52, 3, 255, 95, 54, 3, 255, 99, 56, 7, 255, 96, 56, 9, 255, 93, 53, 11, 255, 96, 57, 5, 255, 97, 56, 6, 255, 105, 59, 9, 255, 105, 58, 7, 255, 103, 58, 10, 255, 99, 57, 6, 255, 104, 59, 4, 255, 105, 59, 5, 255, 106, 60, 10, 255, 103, 57, 8, 255, 106, 59, 9, 255, 106, 59, 5, 255, 109, 62, 5, 255, 110, 60, 9, 255, 109, 59, 14, 255, 109, 59, 4, 255, 112, 61, 10, 255, 110, 58, 7, 255, 113, 61, 2, 255, 107, 53, 14, 255, 110, 59, 12, 255, 110, 57, 1, 255, 105, 60, 7, 255, 108, 61, 14, 255, 123, 59, 7, 255, 133, 65, 6, 255, 118, 60, 6, 255, 104, 56, 3, 255, 115, 60, 3, 255, 134, 62, 9, 255, 126, 62, 6, 255, 111, 56, 8, 255, 103, 57, 6, 255, 116, 64, 4, 255, 126, 60, 11, 255, 121, 58, 6, 255, 138, 74, 10, 255, 130, 66, 6, 255, 128, 65, 9, 255, 115, 66, 6, 255, 115, 68, 3, 255, 121, 69, 11, 255, 125, 68, 3, 255, 127, 71, 5, 255, 124, 70, 8, 255, 116, 65, 7, 255, 120, 70, 7, 255, 120, 69, 8, 255, 107, 64, 2, 255, 114, 66, 2, 255, 113, 61, 14, 255, 129, 65, 7, 255, 136, 67, 3, 255, 141, 62, 10, 255, 151, 69, 7, 255, 155, 74, 10, 255, 138, 63, 10, 255, 143, 68, 8, 255, 157, 75, 2, 255, 160, 74, 2, 255, 162, 75, 3, 255, 165, 81, 8, 255, 160, 77, 5, 255, 156, 74, 1, 255, 151, 71, 7, 255, 152, 73, 12, 255, 155, 75, 7, 255, 158, 76, 5, 255, 164, 80, 8, 255, 161, 76, 10, 255, 159, 80, 10, 255, 157, 77, 8, 255, 162, 80, 12, 255, 162, 84, 15, 255, 173, 91, 9, 255, 180, 90, 3, 255, 167, 83, 5, 255, 161, 88, 7, 255, 162, 85, 0, 255, 159, 82, 2, 255, 163, 86, 5, 255, 172, 95, 6, 255, 175, 96, 9, 255, 175, 93, 9, 255, 172, 93, 3, 255, 166, 92, 5, 255, 161, 90, 13, 255, 157, 88, 10, 255, 159, 91, 5, 255, 161, 90, 4, 255, 163, 91, 8, 255, 156, 90, 7, 255, 155, 91, 8, 255, 159, 94, 7, 255, 158, 93, 4, 255, 158, 93, 7, 255, 161, 96, 3, 255, 164, 98, 7, 255, 166, 97, 6, 255, 166, 97, 4, 255, 171, 99, 10, 255, 176, 102, 10, 255, 175, 102, 8, 255, 172, 98, 17, 255, 178, 104, 7, 255, 185, 109, 11, 255, 181, 110, 6, 255, 174, 106, 3, 255, 181, 110, 12, 255, 185, 115, 0, 255, 191, 120, 10, 255, 197, 120, 10, 255, 195, 118, 14, 255, 183, 113, 9, 255, 177, 108, 13, 255, 176, 106, 19, 255, 175, 107, 2, 255, 174, 104, 11, 255, 178, 107, 5, 255, 179, 106, 5, 255, 180, 105, 15, 255, 181, 105, 4, 255, 188, 107, 5, 255, 187, 113, 9, 255, 180, 112, 7, 255, 182, 114, 6, 255, 187, 117, 5, 255, 187, 115, 1, 255, 192, 117, 10, 255, 190, 119, 4, 255, 188, 117, 7, 255, 189, 118, 6, 255, 191, 120, 3, 255, 197, 122, 6, 255, 204, 129, 5, 255, 210, 133, 4, 255, 211, 131, 0, 255, 216, 136, 0, 255, 218, 137, 4, 255, 215, 135, 5, 255, 211, 129, 11, 255, 208, 132, 6, 255, 204, 128, 5, 255, 207, 131, 13, 255, 211, 136, 11, 255, 203, 125, 10, 255, 200, 117, 10, 255, 198, 117, 6, 255, 198, 117, 4, 255, 198, 120, 12, 255, 192, 115, 12, 255, 189, 115, 5, 255, 191, 116, 0, 255, 193, 116, 2, 255, 196, 115, 2, 255, 191, 111, 1, 255, 189, 109, 0, 255, 190, 109, 3, 255, 186, 104, 3, 255, 186, 105, 6, 255, 184, 100, 7, 255, 181, 101, 4, 255, 182, 102, 2, 255, 183, 103, 3, 255, 181, 102, 2, 255, 180, 104, 6, 255, 179, 102, 3, 255, 184, 103, 7, 255, 185, 104, 13, 255, 185, 108, 11, 255, 184, 113, 13, 255, 179, 112, 18, 255, 178, 115, 19, 255, 175, 109, 13, 255, 180, 108, 17, 255, 175, 108, 6, 255, 169, 100, 6, 255, 172, 100, 13, 255, 169, 99, 8, 255, 165, 97, 10, 255, 163, 94, 10, 255, 155, 88, 5, 255, 150, 84, 7, 255, 143, 76, 6, 255, 148, 78, 11, 255, 151, 78, 13, 255, 153, 76, 8, 255, 158, 79, 8, 255, 162, 82, 6, 255, 162, 83, 7, 255, 158, 78, 9, 255, 148, 64, 6, 255, 146, 63, 6, 255, 153, 71, 8, 255, 157, 75, 10, 255, 153, 73, 8, 255, 154, 74, 8, 255, 151, 73, 3, 255, 145, 75, 4, 255, 144, 73, 6, 255, 143, 65, 7, 255, 142, 68, 10, 255, 138, 71, 10, 255, 134, 68, 8, 255, 135, 68, 6, 255, 139, 73, 3, 255, 139, 73, 4, 255, 137, 69, 6, 255, 134, 67, 9, 255, 128, 64, 4, 255, 123, 61, 2, 255, 112, 57, 6, 255, 102, 50, 4, 255, 99, 51, 0, 255, 99, 52, 4, 255, 99, 52, 8, 255, 98, 52, 10, 255, 87, 44, 6, 255, 84, 42, 0, 255, 97, 49, 11, 255, 104, 54, 6, 255, 107, 59, 4, 255, 104, 60, 4, 255, 102, 59, 6, 255, 104, 54, 2, 255, 95, 54, 2, 255, 101, 58, 7, 255, 100, 53, 6, 255, 93, 50, 2, 255, 95, 50, 3, 255, 101, 48, 8, 255, 99, 48, 8, 255, 93, 47, 4, 255, 90, 43, 3, 255, 83, 38, 1, 255, 83, 39, 6, 255, 81, 37, 6, 255, 86, 36, 7, 255, 83, 35, 7, 255, 85, 37, 6, 255, 1, 2, 2, 255, 7, 2, 1, 255, 2, 2, 0, 255, 0, 3, 3, 255, 3, 0, 3, 255, 3, 1, 3, 255, 2, 1, 2, 255, 0, 0, 0, 255, 1, 0, 0, 255, 1, 38, 69, 255, 3, 133, 183, 255, 20, 148, 170, 255, 12, 87, 96, 255, 3, 48, 95, 255, 3, 25, 59, 255, 4, 20, 56, 255, 5, 45, 75, 255, 4, 6, 7, 255, 3, 1, 2, 255, 0, 1, 2, 255, 0, 0, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 1, 3, 255, 3, 4, 8, 255, 4, 5, 9, 255, 2, 3, 7, 255, 3, 3, 7, 255, 1, 2, 7, 255, 1, 2, 7, 255, 0, 1, 5, 255, 0, 1, 5, 255, 0, 2, 4, 255, 0, 0, 4, 255, 0, 0, 5, 255, 2, 3, 9, 255, 0, 1, 5, 255, 2, 2, 5, 255, 3, 3, 6, 255, 0, 3, 10, 255, 0, 2, 16, 255, 0, 2, 9, 255, 2, 1, 6, 255, 2, 2, 10, 255, 4, 0, 0, 255, 5, 47, 114, 255, 4, 127, 228, 255, 6, 18, 28, 255, 5, 0, 4, 255, 10, 25, 173, 255, 4, 20, 103, 255, 13, 12, 0, 255, 18, 31, 22, 255, 27, 32, 31, 255, 26, 33, 28, 255, 29, 30, 24, 255, 24, 25, 22, 255, 21, 23, 23, 255, 19, 30, 32, 255, 17, 28, 37, 255, 11, 10, 14, 255, 9, 4, 1, 255, 15, 12, 8, 255, 23, 20, 19, 255, 19, 20, 21, 255, 11, 10, 6, 255, 7, 2, 0, 255, 8, 4, 2, 255, 8, 5, 3, 255, 8, 4, 2, 255, 8, 5, 1, 255, 6, 4, 1, 255, 6, 5, 3, 255, 7, 7, 2, 255, 9, 9, 4, 255, 9, 9, 2, 255, 11, 13, 1, 255, 13, 15, 3, 255, 10, 12, 3, 255, 16, 16, 7, 255, 17, 18, 5, 255, 18, 20, 6, 255, 21, 23, 12, 255, 18, 23, 9, 255, 17, 26, 3, 255, 19, 27, 9, 255, 24, 27, 18, 255, 25, 29, 9, 255, 27, 36, 9, 255, 30, 37, 14, 255, 28, 42, 13, 255, 32, 54, 23, 255, 46, 62, 25, 255, 54, 69, 37, 255, 61, 88, 29, 255, 66, 96, 32, 255, 76, 98, 56, 255, 84, 106, 50, 255, 84, 114, 53, 255, 82, 114, 55, 255, 84, 113, 41, 255, 77, 106, 41, 255, 72, 99, 39, 255, 76, 95, 36, 255, 81, 94, 24, 255, 79, 91, 21, 255, 76, 87, 21, 255, 78, 85, 23, 255, 76, 79, 15, 255, 69, 79, 13, 255, 67, 77, 14, 255, 71, 69, 15, 255, 65, 60, 8, 255, 56, 55, 4, 255, 61, 47, 10, 255, 59, 41, 7, 255, 55, 42, 5, 255, 61, 42, 5, 255, 64, 40, 4, 255, 65, 48, 7, 255, 71, 50, 4, 255, 80, 49, 2, 255, 88, 48, 5, 255, 92, 53, 3, 255, 88, 53, 2, 255, 77, 47, 7, 255, 72, 46, 4, 255, 72, 45, 3, 255, 76, 43, 2, 255, 82, 46, 2, 255, 82, 48, 4, 255, 83, 52, 2, 255, 88, 53, 3, 255, 85, 55, 5, 255, 80, 51, 1, 255, 78, 46, 2, 255, 78, 46, 5, 255, 80, 46, 7, 255, 82, 45, 7, 255, 84, 48, 4, 255, 84, 51, 1, 255, 82, 45, 6, 255, 83, 49, 6, 255, 83, 49, 6, 255, 86, 50, 6, 255, 88, 49, 6, 255, 88, 48, 6, 255, 88, 52, 3, 255, 88, 54, 9, 255, 83, 50, 8, 255, 86, 52, 4, 255, 93, 55, 5, 255, 89, 48, 7, 255, 98, 54, 14, 255, 96, 54, 7, 255, 95, 48, 12, 255, 98, 54, 12, 255, 99, 54, 2, 255, 100, 58, 1, 255, 101, 60, 4, 255, 104, 56, 11, 255, 104, 53, 13, 255, 108, 59, 8, 255, 105, 59, 9, 255, 100, 59, 10, 255, 96, 59, 5, 255, 101, 57, 7, 255, 108, 57, 9, 255, 109, 59, 11, 255, 107, 57, 12, 255, 109, 59, 6, 255, 106, 57, 10, 255, 108, 60, 4, 255, 111, 60, 7, 255, 110, 59, 4, 255, 108, 58, 4, 255, 114, 62, 12, 255, 115, 63, 5, 255, 115, 62, 4, 255, 107, 57, 11, 255, 113, 57, 13, 255, 111, 57, 7, 255, 113, 61, 4, 255, 124, 63, 8, 255, 124, 60, 7, 255, 113, 56, 8, 255, 106, 60, 12, 255, 101, 62, 12, 255, 110, 61, 10, 255, 122, 63, 5, 255, 126, 65, 8, 255, 128, 68, 11, 255, 107, 60, 8, 255, 112, 67, 4, 255, 104, 63, 4, 255, 124, 68, 9, 255, 147, 66, 5, 255, 129, 67, 7, 255, 114, 68, 4, 255, 121, 67, 5, 255, 124, 67, 7, 255, 123, 67, 6, 255, 131, 69, 7, 255, 134, 71, 10, 255, 128, 71, 16, 255, 123, 69, 8, 255, 133, 72, 10, 255, 135, 69, 7, 255, 124, 69, 10, 255, 118, 69, 5, 255, 110, 60, 2, 255, 112, 63, 4, 255, 112, 60, 5, 255, 118, 58, 11, 255, 105, 56, 4, 255, 98, 53, 6, 255, 116, 59, 8, 255, 120, 60, 3, 255, 134, 70, 4, 255, 151, 74, 9, 255, 160, 74, 9, 255, 159, 72, 8, 255, 157, 72, 9, 255, 157, 74, 6, 255, 158, 76, 3, 255, 157, 75, 0, 255, 160, 75, 6, 255, 162, 75, 2, 255, 164, 82, 2, 255, 153, 76, 6, 255, 141, 70, 4, 255, 140, 71, 4, 255, 155, 82, 6, 255, 165, 85, 5, 255, 159, 78, 3, 255, 161, 81, 6, 255, 174, 86, 5, 255, 187, 94, 12, 255, 174, 91, 11, 255, 157, 85, 16, 255, 147, 80, 13, 255, 163, 91, 11, 255, 169, 88, 10, 255, 175, 92, 13, 255, 176, 98, 9, 255, 168, 95, 5, 255, 162, 93, 6, 255, 160, 94, 5, 255, 161, 96, 8, 255, 161, 94, 8, 255, 162, 95, 6, 255, 159, 96, 4, 255, 155, 93, 9, 255, 159, 91, 10, 255, 159, 90, 2, 255, 164, 95, 4, 255, 161, 95, 2, 255, 165, 98, 12, 255, 168, 99, 10, 255, 168, 100, 5, 255, 166, 99, 4, 255, 174, 100, 9, 255, 171, 104, 9, 255, 176, 113, 7, 255, 183, 114, 7, 255, 181, 112, 3, 255, 183, 113, 5, 255, 179, 106, 1, 255, 179, 104, 10, 255, 183, 112, 12, 255, 190, 117, 16, 255, 195, 113, 5, 255, 198, 118, 5, 255, 188, 114, 13, 255, 179, 106, 10, 255, 177, 106, 13, 255, 177, 108, 18, 255, 176, 107, 12, 255, 176, 106, 4, 255, 178, 105, 0, 255, 184, 112, 8, 255, 188, 113, 10, 255, 187, 109, 5, 255, 184, 109, 10, 255, 182, 111, 11, 255, 184, 113, 8, 255, 186, 113, 9, 255, 190, 114, 14, 255, 192, 115, 10, 255, 189, 114, 12, 255, 188, 113, 17, 255, 190, 119, 6, 255, 194, 122, 0, 255, 197, 122, 6, 255, 203, 127, 10, 255, 205, 128, 8, 255, 209, 128, 7, 255, 216, 134, 2, 255, 217, 137, 3, 255, 212, 132, 1, 255, 206, 124, 5, 255, 212, 129, 4, 255, 210, 130, 0, 255, 209, 133, 2, 255, 208, 131, 21, 255, 199, 123, 20, 255, 199, 120, 14, 255, 203, 118, 10, 255, 202, 118, 9, 255, 201, 120, 9, 255, 199, 118, 6, 255, 192, 113, 1, 255, 195, 115, 5, 255, 195, 113, 3, 255, 193, 113, 1, 255, 194, 113, 4, 255, 193, 112, 5, 255, 186, 105, 1, 255, 185, 106, 5, 255, 183, 104, 3, 255, 182, 101, 3, 255, 182, 102, 3, 255, 183, 102, 4, 255, 181, 98, 0, 255, 182, 100, 3, 255, 183, 104, 7, 255, 183, 104, 9, 255, 183, 102, 12, 255, 185, 102, 18, 255, 183, 105, 17, 255, 175, 102, 12, 255, 173, 104, 22, 255, 177, 111, 27, 255, 175, 111, 23, 255, 177, 111, 11, 255, 175, 111, 18, 255, 169, 104, 10, 255, 167, 96, 3, 255, 160, 91, 11, 255, 160, 94, 9, 255, 162, 93, 4, 255, 163, 90, 1, 255, 162, 90, 4, 255, 159, 89, 10, 255, 157, 88, 11, 255, 150, 79, 3, 255, 159, 84, 10, 255, 165, 88, 10, 255, 163, 86, 4, 255, 160, 83, 4, 255, 144, 66, 0, 255, 148, 66, 11, 255, 157, 71, 4, 255, 160, 75, 5, 255, 159, 75, 2, 255, 155, 76, 3, 255, 154, 77, 6, 255, 147, 72, 5, 255, 150, 76, 10, 255, 143, 72, 6, 255, 139, 68, 6, 255, 140, 69, 9, 255, 135, 65, 4, 255, 131, 65, 3, 255, 134, 70, 8, 255, 129, 70, 2, 255, 133, 72, 7, 255, 132, 68, 13, 255, 128, 65, 11, 255, 120, 60, 3, 255, 112, 56, 6, 255, 112, 56, 10, 255, 108, 56, 7, 255, 106, 58, 3, 255, 104, 55, 6, 255, 102, 53, 2, 255, 99, 55, 1, 255, 96, 54, 6, 255, 96, 53, 5, 255, 94, 50, 5, 255, 94, 50, 6, 255, 99, 55, 10, 255, 102, 50, 10, 255, 100, 43, 5, 255, 105, 52, 5, 255, 105, 53, 7, 255, 97, 50, 4, 255, 96, 48, 4, 255, 105, 50, 6, 255, 106, 52, 6, 255, 103, 50, 8, 255, 89, 43, 2, 255, 85, 42, 1, 255, 95, 46, 6, 255, 91, 42, 4, 255, 90, 43, 7, 255, 94, 43, 8, 255, 94, 40, 5, 255, 93, 41, 6, 255, 90, 39, 5, 255, 0, 1, 0, 255, 2, 1, 2, 255, 2, 0, 5, 255, 0, 1, 2, 255, 2, 1, 1, 255, 2, 3, 3, 255, 0, 1, 0, 255, 3, 0, 3, 255, 2, 0, 0, 255, 0, 0, 0, 255, 8, 35, 71, 255, 20, 144, 190, 255, 13, 127, 139, 255, 1, 52, 95, 255, 10, 81, 159, 255, 16, 142, 213, 255, 3, 84, 101, 255, 5, 8, 3, 255, 3, 0, 2, 255, 0, 1, 5, 255, 0, 1, 3, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 3, 255, 3, 3, 8, 255, 2, 3, 7, 255, 0, 2, 5, 255, 0, 1, 6, 255, 2, 3, 8, 255, 1, 2, 6, 255, 0, 0, 4, 255, 0, 1, 5, 255, 1, 2, 7, 255, 0, 1, 6, 255, 2, 3, 8, 255, 2, 1, 5, 255, 1, 1, 2, 255, 3, 4, 6, 255, 1, 4, 12, 255, 0, 2, 12, 255, 0, 0, 11, 255, 1, 0, 6, 255, 2, 0, 0, 255, 1, 14, 45, 255, 1, 154, 255, 255, 13, 76, 114, 255, 12, 0, 0, 255, 15, 12, 92, 255, 3, 33, 175, 255, 2, 4, 2, 255, 16, 6, 0, 255, 22, 23, 25, 255, 26, 26, 33, 255, 29, 29, 22, 255, 30, 32, 23, 255, 29, 34, 28, 255, 23, 27, 31, 255, 24, 33, 33, 255, 23, 33, 48, 255, 19, 20, 27, 255, 8, 6, 1, 255, 9, 10, 2, 255, 16, 19, 14, 255, 19, 21, 24, 255, 15, 14, 12, 255, 11, 6, 2, 255, 8, 3, 0, 255, 7, 3, 2, 255, 8, 3, 3, 255, 6, 5, 0, 255, 4, 5, 2, 255, 7, 6, 3, 255, 9, 5, 2, 255, 10, 8, 4, 255, 10, 11, 3, 255, 13, 15, 3, 255, 11, 13, 0, 255, 13, 15, 4, 255, 18, 18, 6, 255, 17, 18, 4, 255, 19, 20, 6, 255, 21, 22, 11, 255, 22, 23, 5, 255, 23, 27, 7, 255, 23, 25, 14, 255, 24, 24, 15, 255, 24, 26, 2, 255, 26, 33, 7, 255, 28, 39, 21, 255, 29, 47, 17, 255, 37, 63, 21, 255, 47, 73, 16, 255, 62, 77, 36, 255, 72, 87, 47, 255, 69, 98, 52, 255, 76, 104, 52, 255, 85, 108, 53, 255, 86, 113, 52, 255, 83, 111, 49, 255, 85, 102, 41, 255, 82, 97, 31, 255, 75, 96, 35, 255, 73, 90, 28, 255, 79, 90, 22, 255, 80, 90, 17, 255, 73, 85, 12, 255, 74, 82, 12, 255, 76, 77, 17, 255, 68, 74, 18, 255, 59, 71, 8, 255, 65, 69, 6, 255, 64, 58, 6, 255, 64, 55, 6, 255, 57, 44, 4, 255, 56, 38, 5, 255, 65, 41, 7, 255, 69, 39, 5, 255, 71, 44, 6, 255, 73, 49, 8, 255, 73, 51, 2, 255, 77, 53, 4, 255, 80, 50, 5, 255, 85, 54, 0, 255, 85, 55, 2, 255, 72, 47, 6, 255, 68, 45, 2, 255, 75, 48, 6, 255, 78, 49, 10, 255, 85, 45, 3, 255, 87, 47, 5, 255, 84, 53, 3, 255, 86, 51, 3, 255, 88, 51, 4, 255, 81, 49, 3, 255, 75, 46, 6, 255, 75, 44, 8, 255, 83, 50, 8, 255, 83, 48, 1, 255, 80, 46, 0, 255, 82, 46, 7, 255, 83, 44, 5, 255, 82, 49, 3, 255, 86, 50, 7, 255, 92, 47, 7, 255, 95, 49, 4, 255, 94, 52, 8, 255, 88, 53, 11, 255, 87, 52, 2, 255, 94, 56, 4, 255, 90, 52, 4, 255, 92, 52, 8, 255, 93, 51, 8, 255, 95, 52, 5, 255, 91, 54, 1, 255, 96, 54, 6, 255, 98, 56, 8, 255, 99, 54, 6, 255, 100, 56, 7, 255, 102, 56, 5, 255, 104, 57, 3, 255, 106, 58, 3, 255, 109, 62, 5, 255, 106, 60, 2, 255, 103, 55, 7, 255, 108, 59, 12, 255, 110, 59, 4, 255, 110, 61, 5, 255, 109, 61, 7, 255, 107, 58, 4, 255, 109, 57, 9, 255, 109, 59, 4, 255, 109, 59, 6, 255, 112, 61, 5, 255, 113, 62, 5, 255, 112, 59, 6, 255, 113, 60, 3, 255, 115, 59, 6, 255, 117, 60, 6, 255, 116, 61, 5, 255, 112, 62, 11, 255, 112, 58, 7, 255, 134, 63, 9, 255, 134, 64, 7, 255, 112, 60, 5, 255, 108, 61, 8, 255, 104, 56, 4, 255, 107, 60, 7, 255, 116, 62, 9, 255, 114, 65, 7, 255, 119, 64, 5, 255, 122, 61, 4, 255, 110, 60, 11, 255, 110, 62, 6, 255, 111, 60, 6, 255, 123, 62, 8, 255, 131, 67, 7, 255, 120, 66, 3, 255, 115, 68, 5, 255, 119, 67, 12, 255, 125, 67, 7, 255, 132, 68, 7, 255, 134, 75, 10, 255, 131, 74, 5, 255, 133, 74, 1, 255, 129, 67, 6, 255, 123, 64, 10, 255, 125, 71, 8, 255, 135, 67, 8, 255, 133, 68, 3, 255, 125, 66, 8, 255, 117, 70, 12, 255, 119, 70, 7, 255, 111, 66, 7, 255, 101, 61, 0, 255, 105, 58, 12, 255, 119, 63, 11, 255, 133, 69, 7, 255, 134, 68, 9, 255, 138, 68, 8, 255, 144, 74, 5, 255, 144, 71, 3, 255, 156, 75, 9, 255, 161, 77, 4, 255, 160, 74, 3, 255, 156, 73, 3, 255, 163, 79, 9, 255, 162, 76, 7, 255, 166, 83, 3, 255, 157, 74, 5, 255, 151, 72, 4, 255, 156, 80, 3, 255, 153, 77, 2, 255, 161, 82, 10, 255, 166, 82, 11, 255, 169, 86, 5, 255, 164, 83, 0, 255, 172, 83, 6, 255, 183, 94, 11, 255, 177, 91, 4, 255, 166, 83, 4, 255, 176, 95, 5, 255, 169, 88, 12, 255, 164, 82, 6, 255, 169, 92, 5, 255, 170, 94, 7, 255, 170, 94, 8, 255, 167, 94, 3, 255, 169, 93, 2, 255, 171, 96, 8, 255, 166, 96, 3, 255, 157, 91, 4, 255, 158, 92, 13, 255, 157, 92, 7, 255, 162, 96, 2, 255, 162, 95, 5, 255, 164, 96, 11, 255, 166, 96, 12, 255, 169, 99, 7, 255, 167, 102, 5, 255, 166, 101, 7, 255, 176, 108, 10, 255, 177, 108, 5, 255, 181, 109, 4, 255, 186, 111, 8, 255, 186, 112, 0, 255, 186, 110, 3, 255, 182, 99, 7, 255, 184, 101, 13, 255, 185, 111, 13, 255, 185, 111, 7, 255, 191, 105, 7, 255, 199, 112, 9, 255, 189, 113, 11, 255, 182, 109, 9, 255, 181, 108, 8, 255, 179, 108, 11, 255, 177, 109, 0, 255, 178, 107, 4, 255, 179, 104, 6, 255, 183, 109, 2, 255, 184, 112, 12, 255, 183, 112, 13, 255, 185, 111, 10, 255, 187, 112, 11, 255, 187, 112, 14, 255, 188, 113, 13, 255, 187, 114, 7, 255, 191, 117, 2, 255, 189, 116, 3, 255, 188, 115, 9, 255, 190, 119, 2, 255, 196, 124, 0, 255, 197, 123, 7, 255, 199, 127, 7, 255, 202, 128, 1, 255, 211, 131, 7, 255, 215, 136, 0, 255, 217, 140, 1, 255, 213, 135, 2, 255, 209, 127, 3, 255, 204, 119, 2, 255, 198, 116, 0, 255, 203, 123, 4, 255, 210, 136, 12, 255, 204, 130, 12, 255, 202, 124, 17, 255, 201, 124, 6, 255, 197, 122, 6, 255, 197, 121, 7, 255, 196, 120, 7, 255, 191, 113, 4, 255, 195, 115, 7, 255, 193, 112, 2, 255, 192, 111, 3, 255, 192, 110, 3, 255, 191, 109, 3, 255, 186, 105, 1, 255, 185, 106, 4, 255, 181, 103, 2, 255, 180, 102, 0, 255, 181, 102, 2, 255, 182, 99, 6, 255, 180, 92, 2, 255, 185, 97, 4, 255, 183, 97, 1, 255, 181, 100, 2, 255, 183, 104, 4, 255, 185, 107, 8, 255, 184, 109, 12, 255, 166, 96, 4, 255, 169, 101, 17, 255, 174, 109, 14, 255, 174, 107, 16, 255, 179, 109, 19, 255, 174, 109, 14, 255, 170, 103, 18, 255, 166, 92, 7, 255, 167, 97, 11, 255, 169, 99, 7, 255, 173, 101, 9, 255, 171, 100, 12, 255, 171, 102, 17, 255, 172, 100, 19, 255, 167, 88, 4, 255, 168, 89, 0, 255, 166, 93, 1, 255, 170, 91, 9, 255, 169, 89, 12, 255, 159, 80, 5, 255, 150, 71, 0, 255, 153, 72, 7, 255, 165, 75, 4, 255, 167, 77, 7, 255, 161, 75, 4, 255, 159, 79, 6, 255, 149, 76, 2, 255, 145, 75, 6, 255, 146, 73, 10, 255, 143, 71, 11, 255, 136, 69, 8, 255, 134, 66, 3, 255, 136, 68, 3, 255, 136, 69, 3, 255, 134, 70, 7, 255, 132, 68, 6, 255, 131, 67, 6, 255, 124, 58, 8, 255, 120, 56, 6, 255, 116, 56, 2, 255, 108, 54, 5, 255, 106, 49, 2, 255, 104, 48, 5, 255, 106, 54, 4, 255, 105, 51, 4, 255, 102, 47, 6, 255, 102, 53, 5, 255, 99, 53, 6, 255, 100, 52, 9, 255, 97, 50, 3, 255, 89, 44, 9, 255, 78, 39, 7, 255, 77, 38, 6, 255, 81, 42, 6, 255, 91, 45, 3, 255, 92, 50, 3, 255, 95, 54, 6, 255, 95, 52, 4, 255, 94, 51, 4, 255, 90, 47, 3, 255, 91, 41, 1, 255, 91, 44, 3, 255, 88, 44, 3, 255, 92, 42, 3, 255, 92, 45, 3, 255, 92, 45, 1, 255, 94, 43, 1, 255, 94, 44, 2, 255, 93, 46, 5, 255, 91, 46, 3, 255, 0, 0, 3, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 2, 255, 0, 1, 1, 255, 2, 0, 0, 255, 1, 0, 1, 255, 4, 9, 16, 255, 3, 36, 31, 255, 4, 25, 53, 255, 11, 104, 142, 255, 2, 76, 81, 255, 1, 11, 27, 255, 6, 24, 23, 255, 4, 16, 12, 255, 1, 1, 1, 255, 1, 0, 3, 255, 4, 0, 4, 255, 0, 1, 0, 255, 0, 2, 0, 255, 0, 0, 0, 255, 0, 1, 4, 255, 2, 3, 7, 255, 1, 5, 8, 255, 0, 4, 7, 255, 0, 2, 6, 255, 0, 0, 3, 255, 1, 1, 3, 255, 0, 2, 5, 255, 0, 1, 5, 255, 1, 2, 6, 255, 1, 1, 4, 255, 1, 1, 3, 255, 0, 2, 0, 255, 0, 3, 10, 255, 1, 6, 18, 255, 1, 1, 11, 255, 2, 1, 8, 255, 2, 3, 2, 255, 2, 0, 3, 255, 4, 94, 184, 255, 2, 164, 198, 255, 10, 0, 12, 255, 13, 0, 6, 255, 16, 22, 179, 255, 2, 16, 60, 255, 1, 0, 0, 255, 6, 5, 8, 255, 17, 18, 11, 255, 26, 27, 27, 255, 20, 27, 30, 255, 22, 36, 20, 255, 23, 34, 29, 255, 27, 32, 47, 255, 25, 33, 32, 255, 28, 37, 40, 255, 24, 25, 31, 255, 13, 11, 13, 255, 6, 7, 5, 255, 14, 14, 9, 255, 21, 28, 26, 255, 18, 21, 21, 255, 14, 8, 4, 255, 8, 4, 0, 255, 1, 4, 1, 255, 6, 4, 3, 255, 8, 4, 0, 255, 7, 7, 2, 255, 4, 5, 1, 255, 9, 7, 3, 255, 11, 8, 2, 255, 12, 12, 2, 255, 13, 16, 4, 255, 11, 15, 4, 255, 16, 21, 4, 255, 17, 19, 4, 255, 17, 19, 8, 255, 17, 18, 9, 255, 20, 21, 7, 255, 24, 24, 8, 255, 24, 26, 8, 255, 24, 28, 10, 255, 26, 30, 9, 255, 30, 32, 10, 255, 28, 32, 11, 255, 33, 40, 17, 255, 37, 49, 20, 255, 45, 63, 26, 255, 50, 72, 23, 255, 63, 83, 36, 255, 74, 95, 36, 255, 77, 101, 39, 255, 79, 104, 37, 255, 82, 108, 47, 255, 82, 106, 47, 255, 79, 103, 35, 255, 78, 99, 28, 255, 78, 92, 29, 255, 73, 89, 33, 255, 71, 87, 25, 255, 77, 85, 14, 255, 83, 85, 15, 255, 72, 84, 9, 255, 70, 82, 11, 255, 71, 74, 12, 255, 63, 74, 13, 255, 67, 69, 10, 255, 68, 67, 8, 255, 62, 64, 3, 255, 55, 54, 0, 255, 56, 49, 5, 255, 52, 40, 3, 255, 59, 42, 6, 255, 72, 42, 6, 255, 70, 45, 3, 255, 72, 52, 3, 255, 78, 51, 2, 255, 77, 50, 2, 255, 82, 52, 7, 255, 93, 54, 6, 255, 89, 51, 0, 255, 76, 47, 3, 255, 72, 49, 9, 255, 75, 51, 3, 255, 77, 49, 7, 255, 79, 47, 2, 255, 90, 54, 7, 255, 87, 51, 3, 255, 89, 52, 8, 255, 88, 48, 7, 255, 78, 46, 3, 255, 78, 47, 6, 255, 86, 48, 9, 255, 83, 51, 5, 255, 85, 50, 2, 255, 83, 47, 2, 255, 79, 47, 6, 255, 86, 48, 7, 255, 89, 47, 8, 255, 85, 50, 4, 255, 87, 53, 3, 255, 93, 55, 4, 255, 89, 54, 4, 255, 89, 54, 5, 255, 86, 52, 4, 255, 91, 53, 10, 255, 90, 55, 11, 255, 92, 55, 5, 255, 91, 55, 8, 255, 96, 51, 10, 255, 113, 57, 3, 255, 108, 55, 7, 255, 97, 57, 2, 255, 97, 59, 3, 255, 99, 56, 8, 255, 100, 53, 10, 255, 102, 55, 9, 255, 101, 59, 5, 255, 101, 62, 13, 255, 106, 54, 9, 255, 124, 59, 4, 255, 141, 61, 8, 255, 143, 64, 8, 255, 115, 60, 5, 255, 106, 60, 4, 255, 106, 60, 4, 255, 108, 61, 10, 255, 111, 60, 4, 255, 113, 61, 8, 255, 115, 64, 8, 255, 111, 62, 3, 255, 115, 61, 2, 255, 113, 65, 6, 255, 115, 62, 9, 255, 112, 58, 6, 255, 116, 67, 7, 255, 115, 61, 8, 255, 115, 61, 9, 255, 114, 59, 5, 255, 116, 62, 14, 255, 111, 63, 10, 255, 111, 65, 3, 255, 128, 61, 4, 255, 134, 62, 11, 255, 112, 63, 8, 255, 112, 65, 9, 255, 122, 59, 9, 255, 109, 57, 9, 255, 115, 57, 13, 255, 102, 61, 8, 255, 111, 64, 10, 255, 131, 67, 12, 255, 114, 66, 4, 255, 119, 66, 6, 255, 125, 70, 11, 255, 123, 70, 4, 255, 126, 70, 6, 255, 131, 72, 3, 255, 135, 74, 2, 255, 132, 70, 9, 255, 128, 70, 7, 255, 129, 68, 4, 255, 140, 70, 12, 255, 137, 69, 3, 255, 136, 69, 4, 255, 126, 69, 5, 255, 121, 67, 8, 255, 118, 73, 6, 255, 122, 68, 2, 255, 120, 70, 5, 255, 127, 65, 4, 255, 155, 67, 14, 255, 151, 69, 12, 255, 150, 71, 6, 255, 160, 78, 8, 255, 149, 74, 8, 255, 144, 70, 6, 255, 145, 76, 4, 255, 160, 75, 3, 255, 162, 76, 3, 255, 157, 75, 4, 255, 159, 71, 3, 255, 164, 75, 1, 255, 162, 77, 4, 255, 166, 84, 5, 255, 170, 85, 6, 255, 171, 82, 10, 255, 169, 83, 3, 255, 162, 82, 2, 255, 169, 88, 13, 255, 175, 88, 14, 255, 176, 89, 2, 255, 175, 87, 2, 255, 167, 87, 6, 255, 170, 89, 7, 255, 164, 85, 3, 255, 167, 85, 5, 255, 182, 96, 10, 255, 175, 94, 12, 255, 160, 86, 12, 255, 150, 84, 8, 255, 161, 88, 5, 255, 171, 93, 9, 255, 168, 93, 8, 255, 170, 92, 4, 255, 173, 92, 9, 255, 171, 96, 5, 255, 164, 91, 9, 255, 163, 94, 6, 255, 160, 93, 7, 255, 163, 97, 4, 255, 164, 97, 6, 255, 169, 99, 11, 255, 167, 98, 6, 255, 168, 101, 8, 255, 172, 104, 7, 255, 173, 104, 4, 255, 176, 105, 7, 255, 180, 108, 1, 255, 184, 109, 9, 255, 187, 114, 7, 255, 185, 113, 3, 255, 186, 112, 11, 255, 185, 113, 10, 255, 184, 112, 15, 255, 184, 115, 4, 255, 188, 115, 7, 255, 195, 116, 16, 255, 199, 120, 10, 255, 189, 115, 4, 255, 181, 110, 5, 255, 185, 109, 10, 255, 183, 109, 11, 255, 183, 112, 8, 255, 179, 109, 9, 255, 181, 110, 12, 255, 181, 111, 7, 255, 182, 112, 8, 255, 186, 113, 10, 255, 185, 112, 8, 255, 184, 110, 10, 255, 183, 110, 12, 255, 188, 115, 10, 255, 187, 117, 2, 255, 189, 116, 9, 255, 190, 118, 6, 255, 191, 115, 5, 255, 194, 116, 1, 255, 199, 120, 3, 255, 197, 120, 8, 255, 198, 126, 4, 255, 203, 130, 2, 255, 209, 133, 3, 255, 213, 135, 2, 255, 216, 136, 3, 255, 213, 131, 5, 255, 207, 124, 4, 255, 206, 126, 5, 255, 205, 125, 6, 255, 207, 126, 3, 255, 209, 134, 5, 255, 200, 131, 11, 255, 197, 124, 10, 255, 198, 123, 8, 255, 195, 118, 8, 255, 198, 119, 11, 255, 197, 117, 7, 255, 193, 113, 2, 255, 195, 112, 5, 255, 194, 111, 6, 255, 192, 109, 5, 255, 191, 109, 2, 255, 187, 104, 3, 255, 190, 108, 5, 255, 186, 105, 0, 255, 187, 105, 5, 255, 182, 100, 0, 255, 181, 100, 1, 255, 183, 101, 5, 255, 181, 94, 4, 255, 182, 93, 3, 255, 185, 97, 2, 255, 183, 100, 5, 255, 182, 102, 3, 255, 187, 107, 10, 255, 187, 106, 8, 255, 163, 95, 10, 255, 167, 100, 14, 255, 173, 103, 10, 255, 172, 99, 13, 255, 174, 106, 11, 255, 171, 105, 15, 255, 166, 100, 17, 255, 165, 95, 9, 255, 173, 101, 6, 255, 179, 106, 0, 255, 174, 102, 10, 255, 179, 103, 12, 255, 173, 98, 10, 255, 167, 89, 8, 255, 171, 85, 1, 255, 180, 98, 12, 255, 180, 97, 7, 255, 176, 93, 3, 255, 177, 91, 7, 255, 169, 86, 5, 255, 161, 79, 8, 255, 162, 80, 8, 255, 161, 78, 3, 255, 160, 77, 3, 255, 160, 78, 7, 255, 151, 75, 2, 255, 146, 75, 3, 255, 147, 78, 5, 255, 148, 77, 6, 255, 143, 76, 7, 255, 137, 73, 8, 255, 133, 69, 7, 255, 134, 70, 8, 255, 129, 66, 4, 255, 129, 66, 5, 255, 135, 66, 7, 255, 128, 62, 4, 255, 122, 59, 4, 255, 114, 55, 5, 255, 115, 56, 5, 255, 116, 57, 2, 255, 107, 55, 0, 255, 103, 52, 2, 255, 99, 46, 5, 255, 93, 39, 4, 255, 91, 38, 4, 255, 94, 47, 6, 255, 92, 45, 6, 255, 99, 50, 5, 255, 99, 51, 1, 255, 88, 39, 6, 255, 81, 34, 8, 255, 80, 40, 0, 255, 85, 48, 4, 255, 99, 48, 7, 255, 101, 56, 3, 255, 100, 58, 3, 255, 102, 54, 5, 255, 107, 58, 10, 255, 94, 47, 2, 255, 94, 46, 4, 255, 99, 49, 6, 255, 96, 44, 3, 255, 94, 44, 5, 255, 84, 42, 3, 255, 82, 39, 1, 255, 90, 40, 4, 255, 94, 44, 6, 255, 93, 45, 3, 255, 97, 49, 7, 255, 1, 0, 6, 255, 0, 0, 2, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 3, 255, 2, 0, 4, 255, 0, 0, 3, 255, 3, 1, 1, 255, 3, 2, 3, 255, 0, 3, 1, 255, 6, 0, 2, 255, 2, 0, 0, 255, 5, 28, 58, 255, 16, 78, 120, 255, 8, 79, 113, 255, 18, 74, 99, 255, 6, 31, 53, 255, 4, 18, 27, 255, 2, 8, 0, 255, 4, 0, 0, 255, 3, 2, 0, 255, 1, 2, 3, 255, 2, 1, 3, 255, 1, 2, 3, 255, 1, 2, 3, 255, 2, 2, 6, 255, 1, 4, 6, 255, 1, 4, 7, 255, 2, 3, 6, 255, 4, 3, 7, 255, 1, 2, 6, 255, 1, 2, 6, 255, 1, 2, 5, 255, 1, 1, 3, 255, 0, 1, 4, 255, 0, 1, 4, 255, 2, 3, 10, 255, 4, 3, 17, 255, 2, 1, 9, 255, 4, 1, 11, 255, 1, 0, 0, 255, 2, 24, 92, 255, 1, 197, 239, 255, 10, 36, 69, 255, 8, 0, 0, 255, 6, 21, 133, 255, 4, 29, 174, 255, 5, 0, 0, 255, 3, 2, 5, 255, 4, 2, 6, 255, 27, 26, 21, 255, 21, 31, 21, 255, 19, 28, 29, 255, 21, 27, 35, 255, 25, 34, 33, 255, 26, 33, 30, 255, 29, 37, 52, 255, 24, 35, 48, 255, 27, 34, 37, 255, 16, 17, 17, 255, 7, 5, 2, 255, 9, 9, 3, 255, 21, 21, 24, 255, 21, 23, 24, 255, 15, 13, 7, 255, 11, 8, 0, 255, 4, 6, 2, 255, 5, 6, 4, 255, 9, 8, 2, 255, 8, 7, 2, 255, 5, 5, 1, 255, 11, 9, 4, 255, 13, 11, 6, 255, 12, 13, 4, 255, 13, 16, 5, 255, 14, 17, 6, 255, 14, 16, 1, 255, 18, 21, 6, 255, 17, 20, 9, 255, 18, 19, 9, 255, 19, 20, 5, 255, 19, 23, 9, 255, 24, 23, 10, 255, 29, 27, 9, 255, 26, 31, 6, 255, 27, 37, 9, 255, 31, 37, 13, 255, 39, 48, 13, 255, 44, 63, 13, 255, 52, 67, 24, 255, 60, 78, 28, 255, 63, 86, 37, 255, 71, 98, 31, 255, 78, 102, 25, 255, 83, 102, 43, 255, 80, 106, 41, 255, 77, 103, 43, 255, 75, 100, 27, 255, 72, 94, 24, 255, 62, 90, 26, 255, 68, 88, 28, 255, 75, 88, 23, 255, 76, 86, 15, 255, 80, 85, 18, 255, 69, 79, 10, 255, 66, 78, 11, 255, 67, 73, 13, 255, 69, 73, 10, 255, 68, 68, 9, 255, 66, 66, 9, 255, 61, 62, 4, 255, 55, 50, 0, 255, 65, 50, 8, 255, 68, 46, 8, 255, 60, 46, 4, 255, 69, 44, 4, 255, 73, 42, 3, 255, 75, 49, 5, 255, 78, 50, 4, 255, 75, 48, 2, 255, 84, 52, 3, 255, 94, 60, 5, 255, 88, 53, 1, 255, 76, 47, 2, 255, 76, 49, 5, 255, 84, 47, 3, 255, 76, 46, 3, 255, 75, 49, 1, 255, 80, 53, 1, 255, 84, 50, 2, 255, 85, 49, 4, 255, 77, 47, 1, 255, 79, 45, 3, 255, 82, 43, 3, 255, 82, 46, 3, 255, 83, 47, 2, 255, 87, 49, 5, 255, 83, 49, 4, 255, 79, 49, 3, 255, 85, 53, 5, 255, 88, 49, 1, 255, 91, 55, 1, 255, 94, 59, 3, 255, 95, 56, 8, 255, 89, 50, 11, 255, 84, 51, 8, 255, 89, 56, 5, 255, 94, 54, 5, 255, 94, 55, 9, 255, 94, 53, 6, 255, 94, 55, 7, 255, 105, 55, 5, 255, 138, 70, 5, 255, 119, 59, 5, 255, 94, 52, 4, 255, 99, 59, 14, 255, 94, 56, 18, 255, 97, 55, 7, 255, 103, 57, 8, 255, 99, 63, 10, 255, 104, 59, 7, 255, 111, 58, 6, 255, 123, 63, 7, 255, 128, 61, 3, 255, 131, 65, 7, 255, 112, 60, 3, 255, 111, 55, 7, 255, 111, 60, 7, 255, 103, 58, 2, 255, 109, 63, 10, 255, 110, 60, 2, 255, 115, 62, 4, 255, 115, 64, 6, 255, 113, 59, 6, 255, 112, 64, 11, 255, 113, 60, 8, 255, 111, 60, 4, 255, 113, 64, 5, 255, 113, 62, 7, 255, 115, 57, 8, 255, 112, 60, 15, 255, 114, 61, 6, 255, 122, 62, 6, 255, 122, 65, 1, 255, 135, 70, 8, 255, 127, 61, 5, 255, 117, 63, 2, 255, 117, 65, 10, 255, 119, 60, 13, 255, 122, 62, 11, 255, 126, 67, 10, 255, 117, 63, 11, 255, 119, 65, 6, 255, 113, 63, 3, 255, 133, 67, 5, 255, 148, 68, 7, 255, 135, 67, 11, 255, 128, 67, 9, 255, 125, 70, 1, 255, 129, 71, 5, 255, 133, 67, 16, 255, 135, 73, 12, 255, 130, 72, 13, 255, 126, 69, 7, 255, 133, 72, 3, 255, 140, 71, 10, 255, 135, 72, 7, 255, 129, 66, 3, 255, 123, 66, 5, 255, 122, 72, 3, 255, 128, 67, 8, 255, 129, 69, 9, 255, 126, 72, 4, 255, 122, 69, 2, 255, 123, 62, 8, 255, 137, 62, 11, 255, 145, 70, 4, 255, 158, 78, 3, 255, 162, 79, 4, 255, 149, 77, 2, 255, 158, 83, 5, 255, 161, 81, 5, 255, 159, 69, 11, 255, 168, 77, 5, 255, 174, 85, 6, 255, 161, 73, 8, 255, 156, 71, 6, 255, 166, 82, 4, 255, 180, 87, 4, 255, 176, 88, 5, 255, 169, 83, 2, 255, 166, 80, 6, 255, 177, 96, 2, 255, 178, 89, 7, 255, 179, 93, 8, 255, 177, 88, 8, 255, 169, 87, 6, 255, 173, 89, 6, 255, 175, 91, 0, 255, 179, 95, 8, 255, 186, 99, 8, 255, 171, 98, 4, 255, 161, 84, 9, 255, 170, 92, 12, 255, 181, 98, 10, 255, 168, 89, 2, 255, 165, 92, 6, 255, 168, 92, 9, 255, 169, 96, 9, 255, 167, 94, 4, 255, 169, 94, 10, 255, 167, 95, 6, 255, 164, 94, 11, 255, 164, 98, 7, 255, 172, 97, 7, 255, 173, 100, 6, 255, 175, 103, 8, 255, 174, 104, 6, 255, 176, 106, 0, 255, 180, 108, 2, 255, 182, 110, 4, 255, 186, 114, 6, 255, 188, 116, 2, 255, 186, 114, 6, 255, 185, 113, 7, 255, 184, 112, 6, 255, 185, 112, 19, 255, 188, 117, 9, 255, 192, 118, 1, 255, 199, 120, 13, 255, 196, 118, 9, 255, 191, 115, 4, 255, 187, 112, 6, 255, 186, 109, 6, 255, 184, 111, 2, 255, 186, 113, 9, 255, 181, 109, 6, 255, 183, 109, 7, 255, 184, 110, 4, 255, 184, 112, 4, 255, 186, 113, 14, 255, 185, 111, 15, 255, 185, 111, 13, 255, 187, 114, 9, 255, 185, 113, 3, 255, 185, 113, 2, 255, 188, 115, 7, 255, 187, 118, 3, 255, 184, 116, 6, 255, 189, 117, 5, 255, 191, 117, 1, 255, 196, 124, 1, 255, 199, 125, 4, 255, 204, 125, 5, 255, 210, 130, 2, 255, 216, 133, 5, 255, 211, 126, 6, 255, 212, 128, 4, 255, 211, 128, 4, 255, 207, 126, 2, 255, 206, 128, 3, 255, 206, 128, 2, 255, 205, 132, 8, 255, 203, 134, 16, 255, 201, 129, 9, 255, 201, 124, 4, 255, 202, 122, 16, 255, 194, 118, 12, 255, 190, 119, 3, 255, 188, 114, 9, 255, 191, 113, 5, 255, 190, 110, 1, 255, 191, 108, 1, 255, 192, 108, 3, 255, 190, 103, 1, 255, 196, 108, 6, 255, 196, 108, 7, 255, 194, 107, 5, 255, 187, 102, 3, 255, 184, 100, 2, 255, 184, 100, 2, 255, 182, 98, 3, 255, 183, 99, 5, 255, 183, 103, 5, 255, 183, 105, 3, 255, 182, 102, 8, 255, 185, 105, 10, 255, 182, 99, 8, 255, 162, 90, 16, 255, 165, 98, 12, 255, 173, 104, 16, 255, 168, 99, 5, 255, 167, 98, 7, 255, 167, 99, 10, 255, 170, 101, 16, 255, 169, 95, 9, 255, 174, 98, 2, 255, 176, 97, 3, 255, 172, 96, 8, 255, 173, 95, 4, 255, 177, 102, 6, 255, 173, 97, 2, 255, 178, 97, 4, 255, 184, 105, 6, 255, 189, 103, 8, 255, 186, 101, 8, 255, 182, 99, 3, 255, 181, 98, 7, 255, 174, 92, 10, 255, 168, 85, 6, 255, 160, 76, 5, 255, 161, 75, 4, 255, 160, 77, 3, 255, 154, 77, 7, 255, 145, 73, 8, 255, 139, 68, 16, 255, 133, 66, 4, 255, 137, 74, 3, 255, 132, 73, 7, 255, 129, 68, 8, 255, 129, 65, 5, 255, 132, 68, 8, 255, 129, 70, 2, 255, 126, 63, 3, 255, 130, 63, 2, 255, 130, 67, 4, 255, 129, 66, 6, 255, 109, 58, 3, 255, 108, 63, 11, 255, 112, 56, 7, 255, 102, 50, 1, 255, 96, 51, 3, 255, 93, 49, 2, 255, 96, 50, 5, 255, 97, 49, 1, 255, 97, 48, 5, 255, 101, 51, 7, 255, 96, 48, 1, 255, 86, 38, 2, 255, 86, 39, 5, 255, 90, 46, 3, 255, 94, 49, 9, 255, 102, 52, 12, 255, 101, 54, 4, 255, 100, 53, 3, 255, 106, 52, 8, 255, 109, 52, 7, 255, 104, 49, 5, 255, 91, 44, 3, 255, 90, 38, 1, 255, 96, 40, 3, 255, 93, 47, 5, 255, 93, 46, 5, 255, 92, 42, 1, 255, 96, 47, 4, 255, 97, 44, 3, 255, 97, 43, 2, 255, 101, 46, 4, 255, 1, 0, 6, 255, 1, 0, 4, 255, 0, 0, 2, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 1, 255, 1, 1, 0, 255, 1, 1, 0, 255, 2, 1, 1, 255, 1, 1, 1, 255, 1, 1, 0, 255, 0, 3, 2, 255, 6, 0, 11, 255, 0, 0, 0, 255, 7, 21, 50, 255, 26, 92, 129, 255, 16, 88, 138, 255, 7, 94, 156, 255, 5, 95, 137, 255, 1, 60, 106, 255, 0, 36, 82, 255, 2, 22, 35, 255, 4, 0, 3, 255, 4, 1, 2, 255, 1, 2, 3, 255, 1, 2, 2, 255, 1, 0, 1, 255, 1, 3, 2, 255, 1, 2, 4, 255, 1, 3, 6, 255, 1, 2, 7, 255, 3, 3, 8, 255, 1, 1, 5, 255, 2, 2, 4, 255, 0, 0, 2, 255, 0, 0, 2, 255, 0, 1, 5, 255, 1, 1, 9, 255, 3, 1, 10, 255, 3, 0, 9, 255, 4, 1, 9, 255, 2, 3, 2, 255, 3, 0, 29, 255, 4, 145, 219, 255, 9, 111, 155, 255, 11, 0, 0, 255, 10, 4, 60, 255, 4, 43, 228, 255, 3, 11, 37, 255, 1, 2, 0, 255, 0, 1, 2, 255, 10, 7, 5, 255, 33, 25, 31, 255, 24, 27, 26, 255, 39, 33, 23, 255, 51, 43, 38, 255, 23, 30, 24, 255, 29, 34, 29, 255, 29, 34, 34, 255, 36, 40, 39, 255, 40, 33, 47, 255, 23, 24, 41, 255, 5, 11, 11, 255, 12, 6, 0, 255, 20, 21, 23, 255, 20, 30, 30, 255, 13, 18, 11, 255, 15, 12, 3, 255, 15, 9, 5, 255, 10, 6, 3, 255, 13, 9, 4, 255, 12, 11, 4, 255, 9, 10, 4, 255, 11, 10, 6, 255, 12, 12, 5, 255, 13, 14, 6, 255, 13, 17, 5, 255, 14, 15, 3, 255, 16, 17, 5, 255, 17, 17, 5, 255, 16, 16, 6, 255, 22, 22, 9, 255, 21, 23, 4, 255, 20, 21, 8, 255, 20, 22, 8, 255, 26, 29, 11, 255, 28, 32, 9, 255, 31, 36, 9, 255, 36, 43, 13, 255, 42, 55, 13, 255, 49, 68, 16, 255, 60, 78, 28, 255, 64, 85, 23, 255, 69, 89, 36, 255, 73, 97, 40, 255, 71, 99, 30, 255, 72, 99, 43, 255, 72, 102, 32, 255, 74, 99, 29, 255, 79, 94, 17, 255, 76, 86, 22, 255, 73, 86, 32, 255, 74, 84, 24, 255, 73, 83, 15, 255, 71, 83, 12, 255, 74, 79, 14, 255, 71, 75, 11, 255, 69, 77, 12, 255, 65, 73, 11, 255, 68, 72, 8, 255, 65, 62, 5, 255, 66, 58, 6, 255, 62, 54, 2, 255, 61, 51, 3, 255, 58, 43, 2, 255, 63, 44, 2, 255, 60, 50, 4, 255, 61, 44, 0, 255, 72, 45, 5, 255, 72, 50, 6, 255, 70, 50, 3, 255, 73, 51, 4, 255, 85, 57, 4, 255, 92, 56, 1, 255, 89, 51, 3, 255, 82, 50, 5, 255, 84, 52, 7, 255, 80, 46, 2, 255, 79, 48, 4, 255, 84, 51, 5, 255, 82, 47, 1, 255, 80, 46, 0, 255, 82, 50, 4, 255, 81, 48, 4, 255, 79, 44, 5, 255, 79, 46, 3, 255, 83, 51, 2, 255, 87, 47, 3, 255, 87, 48, 7, 255, 85, 48, 4, 255, 88, 49, 2, 255, 84, 51, 0, 255, 93, 53, 4, 255, 100, 60, 9, 255, 94, 58, 5, 255, 91, 55, 3, 255, 91, 54, 6, 255, 89, 51, 4, 255, 91, 54, 5, 255, 94, 56, 8, 255, 93, 55, 8, 255, 97, 55, 4, 255, 89, 52, 6, 255, 108, 62, 10, 255, 124, 62, 1, 255, 108, 54, 7, 255, 117, 57, 9, 255, 126, 62, 4, 255, 119, 58, 2, 255, 98, 58, 8, 255, 103, 57, 3, 255, 114, 61, 8, 255, 122, 61, 8, 255, 108, 60, 1, 255, 112, 60, 3, 255, 125, 59, 5, 255, 123, 60, 5, 255, 109, 60, 6, 255, 104, 58, 7, 255, 107, 58, 3, 255, 110, 61, 5, 255, 118, 59, 6, 255, 122, 61, 5, 255, 119, 63, 8, 255, 118, 63, 5, 255, 119, 63, 4, 255, 119, 66, 8, 255, 113, 61, 5, 255, 114, 64, 8, 255, 115, 65, 2, 255, 116, 63, 9, 255, 116, 60, 5, 255, 115, 60, 7, 255, 113, 66, 3, 255, 123, 66, 5, 255, 137, 68, 8, 255, 120, 59, 11, 255, 126, 64, 3, 255, 129, 67, 8, 255, 126, 66, 9, 255, 119, 64, 4, 255, 129, 67, 6, 255, 128, 64, 9, 255, 135, 67, 9, 255, 142, 66, 11, 255, 134, 70, 2, 255, 134, 73, 5, 255, 134, 68, 7, 255, 126, 70, 13, 255, 125, 66, 10, 255, 132, 69, 2, 255, 141, 76, 3, 255, 135, 71, 7, 255, 133, 73, 2, 255, 130, 67, 7, 255, 127, 68, 13, 255, 130, 72, 4, 255, 135, 71, 3, 255, 130, 70, 9, 255, 131, 69, 7, 255, 126, 71, 6, 255, 120, 70, 9, 255, 126, 71, 11, 255, 125, 69, 4, 255, 130, 72, 4, 255, 129, 75, 8, 255, 125, 72, 7, 255, 133, 70, 8, 255, 144, 70, 9, 255, 156, 67, 2, 255, 154, 74, 4, 255, 140, 67, 11, 255, 139, 67, 11, 255, 148, 78, 3, 255, 166, 83, 4, 255, 167, 78, 6, 255, 162, 72, 7, 255, 154, 72, 3, 255, 153, 72, 3, 255, 163, 79, 11, 255, 170, 84, 8, 255, 169, 85, 7, 255, 157, 73, 6, 255, 164, 76, 10, 255, 184, 93, 9, 255, 184, 94, 8, 255, 181, 90, 0, 255, 170, 89, 2, 255, 168, 89, 5, 255, 176, 88, 7, 255, 178, 89, 3, 255, 169, 88, 6, 255, 167, 87, 6, 255, 176, 91, 3, 255, 187, 93, 1, 255, 183, 98, 4, 255, 173, 89, 8, 255, 177, 89, 4, 255, 180, 99, 3, 255, 174, 93, 4, 255, 170, 88, 2, 255, 171, 91, 6, 255, 171, 93, 16, 255, 173, 99, 3, 255, 175, 98, 4, 255, 178, 100, 2, 255, 172, 96, 4, 255, 174, 97, 13, 255, 177, 102, 8, 255, 176, 103, 3, 255, 178, 104, 9, 255, 182, 107, 6, 255, 184, 109, 7, 255, 186, 111, 6, 255, 192, 117, 7, 255, 192, 118, 3, 255, 189, 116, 5, 255, 187, 114, 9, 255, 189, 116, 14, 255, 192, 117, 7, 255, 191, 117, 0, 255, 198, 121, 5, 255, 197, 120, 6, 255, 197, 119, 13, 255, 192, 114, 7, 255, 191, 113, 15, 255, 188, 114, 10, 255, 185, 113, 5, 255, 183, 110, 0, 255, 186, 112, 7, 255, 185, 110, 14, 255, 182, 109, 6, 255, 183, 112, 2, 255, 183, 113, 3, 255, 183, 112, 5, 255, 186, 112, 11, 255, 188, 114, 9, 255, 192, 116, 8, 255, 189, 116, 3, 255, 186, 116, 0, 255, 187, 119, 1, 255, 190, 121, 2, 255, 189, 117, 9, 255, 195, 123, 10, 255, 199, 127, 3, 255, 203, 129, 1, 255, 207, 130, 4, 255, 214, 133, 6, 255, 214, 134, 4, 255, 205, 126, 1, 255, 208, 129, 5, 255, 205, 118, 7, 255, 192, 109, 0, 255, 206, 125, 5, 255, 201, 124, 16, 255, 194, 122, 15, 255, 192, 114, 13, 255, 188, 105, 19, 255, 184, 104, 7, 255, 185, 109, 5, 255, 195, 120, 9, 255, 191, 113, 11, 255, 191, 110, 5, 255, 194, 113, 0, 255, 193, 110, 1, 255, 196, 109, 4, 255, 201, 113, 6, 255, 198, 110, 5, 255, 190, 101, 3, 255, 190, 104, 1, 255, 185, 100, 6, 255, 182, 99, 3, 255, 180, 97, 1, 255, 178, 95, 0, 255, 177, 96, 3, 255, 174, 101, 2, 255, 179, 101, 5, 255, 184, 101, 5, 255, 183, 96, 10, 255, 183, 95, 14, 255, 167, 89, 14, 255, 172, 101, 10, 255, 174, 100, 14, 255, 163, 92, 5, 255, 161, 89, 10, 255, 171, 97, 15, 255, 169, 94, 5, 255, 171, 93, 5, 255, 174, 92, 8, 255, 167, 89, 8, 255, 173, 98, 13, 255, 177, 102, 3, 255, 162, 85, 4, 255, 158, 73, 6, 255, 178, 90, 6, 255, 180, 97, 1, 255, 188, 111, 3, 255, 188, 107, 7, 255, 184, 100, 11, 255, 191, 106, 6, 255, 188, 101, 4, 255, 173, 86, 1, 255, 162, 78, 2, 255, 163, 76, 3, 255, 159, 73, 9, 255, 151, 70, 12, 255, 140, 65, 9, 255, 134, 64, 3, 255, 132, 66, 6, 255, 132, 70, 14, 255, 131, 70, 9, 255, 130, 68, 9, 255, 128, 65, 11, 255, 125, 62, 3, 255, 119, 58, 6, 255, 109, 53, 9, 255, 110, 53, 9, 255, 111, 53, 3, 255, 116, 61, 3, 255, 116, 62, 4, 255, 112, 62, 7, 255, 98, 41, 7, 255, 91, 39, 5, 255, 90, 46, 4, 255, 91, 50, 4, 255, 97, 53, 7, 255, 98, 51, 5, 255, 101, 50, 7, 255, 103, 50, 5, 255, 105, 55, 7, 255, 99, 50, 8, 255, 100, 52, 6, 255, 103, 55, 4, 255, 102, 52, 9, 255, 103, 50, 9, 255, 102, 53, 5, 255, 98, 50, 4, 255, 96, 46, 3, 255, 91, 41, 0, 255, 93, 50, 3, 255, 88, 43, 5, 255, 84, 37, 2, 255, 92, 42, 5, 255, 96, 45, 5, 255, 94, 47, 3, 255, 92, 45, 1, 255, 96, 48, 2, 255, 98, 44, 0, 255, 103, 45, 4, 255, 105, 43, 5, 255, 2, 1, 9, 255, 2, 1, 8, 255, 1, 0, 5, 255, 1, 0, 5, 255, 1, 0, 5, 255, 1, 1, 3, 255, 2, 2, 1, 255, 1, 1, 1, 255, 4, 0, 1, 255, 0, 1, 5, 255, 2, 1, 7, 255, 0, 1, 0, 255, 14, 5, 20, 255, 105, 82, 78, 255, 72, 89, 95, 255, 0, 22, 61, 255, 13, 40, 80, 255, 11, 109, 166, 255, 5, 111, 181, 255, 79, 149, 221, 255, 87, 178, 201, 255, 0, 49, 60, 255, 0, 0, 1, 255, 2, 1, 2, 255, 0, 1, 1, 255, 0, 1, 0, 255, 1, 0, 1, 255, 1, 1, 1, 255, 0, 1, 1, 255, 0, 1, 3, 255, 0, 1, 4, 255, 1, 2, 6, 255, 0, 0, 4, 255, 1, 1, 3, 255, 0, 0, 2, 255, 0, 0, 2, 255, 0, 1, 6, 255, 2, 1, 11, 255, 1, 4, 9, 255, 0, 1, 6, 255, 3, 3, 4, 255, 6, 0, 0, 255, 1, 75, 147, 255, 8, 168, 238, 255, 7, 9, 13, 255, 11, 3, 7, 255, 11, 25, 192, 255, 0, 24, 113, 255, 6, 0, 0, 255, 4, 2, 8, 255, 0, 0, 0, 255, 7, 6, 7, 255, 33, 25, 32, 255, 26, 25, 33, 255, 43, 31, 26, 255, 44, 33, 24, 255, 26, 35, 27, 255, 29, 34, 27, 255, 30, 34, 30, 255, 28, 35, 38, 255, 37, 36, 63, 255, 37, 30, 66, 255, 19, 15, 35, 255, 10, 8, 6, 255, 20, 21, 19, 255, 18, 29, 29, 255, 14, 22, 16, 255, 18, 15, 6, 255, 15, 6, 3, 255, 9, 4, 0, 255, 14, 10, 3, 255, 12, 11, 3, 255, 10, 10, 2, 255, 9, 9, 2, 255, 11, 11, 4, 255, 12, 14, 3, 255, 15, 17, 6, 255, 13, 15, 2, 255, 17, 18, 5, 255, 18, 18, 6, 255, 19, 18, 7, 255, 23, 23, 7, 255, 25, 24, 3, 255, 24, 23, 9, 255, 21, 24, 6, 255, 25, 31, 6, 255, 30, 35, 6, 255, 34, 39, 8, 255, 43, 52, 12, 255, 44, 59, 19, 255, 51, 68, 25, 255, 57, 76, 22, 255, 65, 86, 19, 255, 67, 87, 28, 255, 70, 91, 42, 255, 71, 97, 42, 255, 73, 102, 30, 255, 76, 97, 26, 255, 78, 92, 25, 255, 76, 88, 23, 255, 72, 85, 23, 255, 70, 82, 21, 255, 76, 84, 21, 255, 74, 81, 12, 255, 72, 80, 8, 255, 75, 78, 14, 255, 77, 74, 10, 255, 75, 71, 7, 255, 68, 69, 6, 255, 68, 72, 8, 255, 65, 62, 5, 255, 65, 57, 5, 255, 67, 57, 8, 255, 64, 52, 6, 255, 60, 47, 3, 255, 62, 43, 3, 255, 67, 46, 7, 255, 67, 44, 3, 255, 76, 47, 8, 255, 72, 49, 4, 255, 71, 49, 1, 255, 79, 53, 6, 255, 87, 56, 4, 255, 97, 55, 3, 255, 84, 48, 4, 255, 81, 47, 6, 255, 82, 47, 4, 255, 71, 45, 3, 255, 78, 46, 5, 255, 82, 46, 3, 255, 88, 51, 7, 255, 83, 49, 6, 255, 77, 45, 3, 255, 80, 46, 3, 255, 81, 45, 5, 255, 81, 50, 5, 255, 91, 54, 6, 255, 90, 49, 4, 255, 84, 49, 5, 255, 88, 52, 5, 255, 95, 53, 4, 255, 91, 54, 5, 255, 98, 55, 7, 255, 98, 57, 8, 255, 92, 55, 6, 255, 88, 55, 4, 255, 89, 55, 4, 255, 89, 54, 8, 255, 93, 53, 9, 255, 90, 53, 8, 255, 86, 56, 5, 255, 90, 58, 4, 255, 88, 52, 4, 255, 100, 62, 9, 255, 115, 58, 4, 255, 122, 57, 5, 255, 133, 61, 4, 255, 132, 57, 1, 255, 121, 60, 4, 255, 100, 54, 9, 255, 111, 59, 6, 255, 136, 59, 5, 255, 132, 57, 6, 255, 122, 62, 10, 255, 112, 59, 2, 255, 111, 61, 9, 255, 110, 61, 11, 255, 112, 62, 6, 255, 107, 58, 9, 255, 116, 61, 6, 255, 107, 66, 0, 255, 121, 60, 8, 255, 131, 63, 7, 255, 130, 61, 12, 255, 130, 60, 3, 255, 133, 65, 4, 255, 131, 64, 5, 255, 123, 61, 5, 255, 123, 63, 9, 255, 123, 66, 7, 255, 119, 56, 12, 255, 123, 69, 13, 255, 114, 64, 5, 255, 111, 64, 2, 255, 121, 64, 13, 255, 125, 63, 14, 255, 113, 64, 15, 255, 122, 64, 2, 255, 128, 69, 8, 255, 125, 65, 10, 255, 115, 61, 6, 255, 113, 61, 10, 255, 118, 61, 8, 255, 132, 68, 6, 255, 147, 69, 5, 255, 140, 68, 3, 255, 127, 67, 10, 255, 129, 71, 6, 255, 134, 69, 4, 255, 132, 68, 8, 255, 131, 71, 8, 255, 135, 74, 5, 255, 138, 73, 4, 255, 136, 77, 0, 255, 133, 77, 4, 255, 128, 72, 9, 255, 135, 70, 5, 255, 135, 74, 2, 255, 126, 71, 9, 255, 124, 73, 12, 255, 129, 71, 6, 255, 131, 71, 7, 255, 126, 71, 6, 255, 127, 71, 8, 255, 128, 72, 6, 255, 138, 78, 6, 255, 135, 75, 6, 255, 130, 69, 5, 255, 134, 69, 2, 255, 132, 70, 5, 255, 126, 67, 6, 255, 117, 59, 2, 255, 114, 61, 6, 255, 126, 68, 11, 255, 155, 78, 10, 255, 153, 74, 1, 255, 150, 69, 5, 255, 153, 76, 8, 255, 154, 76, 9, 255, 162, 77, 5, 255, 163, 82, 4, 255, 159, 77, 14, 255, 157, 78, 9, 255, 171, 90, 3, 255, 181, 88, 11, 255, 182, 93, 2, 255, 177, 86, 1, 255, 177, 92, 4, 255, 180, 94, 4, 255, 171, 91, 1, 255, 169, 89, 5, 255, 172, 90, 2, 255, 175, 93, 6, 255, 167, 91, 8, 255, 171, 89, 17, 255, 176, 90, 6, 255, 174, 91, 0, 255, 181, 95, 11, 255, 175, 90, 9, 255, 156, 87, 6, 255, 155, 93, 6, 255, 162, 93, 9, 255, 167, 94, 7, 255, 172, 96, 5, 255, 175, 96, 17, 255, 176, 100, 5, 255, 173, 101, 3, 255, 175, 101, 2, 255, 179, 106, 4, 255, 181, 107, 10, 255, 181, 105, 8, 255, 183, 106, 5, 255, 185, 105, 8, 255, 191, 111, 9, 255, 195, 117, 10, 255, 194, 116, 3, 255, 195, 118, 7, 255, 196, 116, 15, 255, 193, 116, 12, 255, 196, 119, 7, 255, 198, 124, 3, 255, 199, 123, 11, 255, 201, 123, 10, 255, 196, 118, 7, 255, 192, 112, 12, 255, 190, 112, 7, 255, 186, 110, 13, 255, 182, 108, 12, 255, 180, 109, 9, 255, 182, 111, 6, 255, 178, 110, 4, 255, 176, 108, 8, 255, 178, 109, 7, 255, 184, 112, 9, 255, 183, 109, 9, 255, 183, 108, 10, 255, 187, 111, 14, 255, 183, 108, 9, 255, 186, 113, 9, 255, 193, 118, 7, 255, 196, 119, 6, 255, 196, 120, 2, 255, 193, 118, 4, 255, 191, 121, 5, 255, 192, 122, 1, 255, 201, 126, 6, 255, 204, 128, 6, 255, 194, 112, 2, 255, 196, 113, 12, 255, 194, 114, 6, 255, 191, 113, 3, 255, 193, 115, 7, 255, 183, 109, 1, 255, 178, 104, 6, 255, 179, 109, 17, 255, 176, 107, 31, 255, 172, 98, 16, 255, 169, 93, 11, 255, 171, 92, 13, 255, 185, 104, 7, 255, 193, 107, 10, 255, 197, 111, 6, 255, 194, 108, 5, 255, 191, 106, 1, 255, 189, 104, 7, 255, 189, 101, 9, 255, 189, 100, 4, 255, 179, 93, 0, 255, 175, 89, 2, 255, 176, 95, 0, 255, 172, 91, 2, 255, 175, 93, 2, 255, 176, 95, 3, 255, 176, 92, 2, 255, 174, 94, 3, 255, 170, 95, 2, 255, 175, 98, 3, 255, 172, 93, 6, 255, 178, 93, 8, 255, 177, 94, 14, 255, 167, 90, 19, 255, 169, 98, 15, 255, 175, 98, 16, 255, 169, 91, 13, 255, 172, 97, 8, 255, 170, 94, 8, 255, 167, 89, 7, 255, 169, 92, 4, 255, 178, 102, 7, 255, 184, 112, 6, 255, 180, 105, 7, 255, 166, 87, 6, 255, 148, 65, 1, 255, 165, 81, 11, 255, 189, 108, 16, 255, 188, 105, 4, 255, 189, 103, 6, 255, 186, 98, 12, 255, 183, 97, 13, 255, 181, 100, 0, 255, 176, 94, 5, 255, 172, 92, 7, 255, 170, 89, 7, 255, 168, 84, 6, 255, 161, 78, 9, 255, 150, 71, 7, 255, 139, 66, 7, 255, 134, 65, 6, 255, 136, 69, 9, 255, 136, 72, 5, 255, 128, 66, 4, 255, 131, 69, 13, 255, 121, 58, 11, 255, 117, 55, 11, 255, 109, 52, 3, 255, 104, 54, 6, 255, 98, 47, 2, 255, 103, 49, 2, 255, 104, 56, 5, 255, 113, 62, 11, 255, 103, 49, 3, 255, 82, 30, 0, 255, 87, 36, 5, 255, 90, 43, 3, 255, 94, 47, 4, 255, 97, 50, 4, 255, 96, 52, 4, 255, 100, 52, 5, 255, 109, 56, 6, 255, 106, 56, 2, 255, 103, 54, 2, 255, 105, 56, 5, 255, 108, 58, 5, 255, 105, 52, 1, 255, 109, 52, 5, 255, 103, 51, 2, 255, 97, 45, 2, 255, 95, 41, 1, 255, 97, 42, 0, 255, 98, 46, 3, 255, 91, 43, 4, 255, 89, 43, 5, 255, 93, 42, 3, 255, 96, 42, 3, 255, 91, 44, 2, 255, 94, 47, 6, 255, 99, 48, 6, 255, 99, 46, 3, 255, 100, 42, 5, 255, 100, 34, 4, 255, 1, 1, 9, 255, 1, 0, 8, 255, 1, 0, 7, 255, 1, 0, 6, 255, 1, 0, 5, 255, 1, 0, 5, 255, 0, 1, 2, 255, 1, 0, 2, 255, 2, 1, 2, 255, 2, 0, 4, 255, 3, 5, 7, 255, 0, 0, 8, 255, 135, 109, 145, 255, 209, 208, 177, 255, 34, 58, 60, 255, 8, 69, 118, 255, 3, 50, 67, 255, 12, 45, 115, 255, 157, 215, 255, 255, 180, 245, 234, 255, 35, 103, 95, 255, 3, 5, 5, 255, 5, 3, 6, 255, 1, 2, 6, 255, 0, 1, 4, 255, 1, 1, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 2, 255, 0, 0, 3, 255, 1, 1, 3, 255, 0, 0, 2, 255, 1, 1, 3, 255, 0, 0, 3, 255, 0, 0, 4, 255, 2, 1, 7, 255, 2, 2, 11, 255, 2, 1, 9, 255, 6, 0, 5, 255, 1, 0, 0, 255, 6, 14, 70, 255, 6, 179, 252, 255, 7, 65, 86, 255, 6, 0, 0, 255, 14, 18, 119, 255, 4, 30, 184, 255, 4, 4, 14, 255, 1, 1, 0, 255, 4, 2, 2, 255, 4, 1, 1, 255, 0, 0, 5, 255, 18, 14, 21, 255, 26, 29, 43, 255, 27, 26, 31, 255, 25, 26, 22, 255, 25, 34, 31, 255, 26, 32, 28, 255, 19, 29, 39, 255, 14, 33, 45, 255, 25, 29, 60, 255, 38, 31, 54, 255, 28, 22, 49, 255, 14, 11, 21, 255, 21, 16, 11, 255, 26, 29, 32, 255, 21, 26, 25, 255, 15, 16, 9, 255, 11, 11, 5, 255, 8, 10, 1, 255, 12, 10, 0, 255, 12, 8, 1, 255, 10, 10, 1, 255, 11, 12, 4, 255, 17, 16, 7, 255, 15, 14, 3, 255, 14, 15, 2, 255, 16, 15, 3, 255, 17, 17, 5, 255, 17, 17, 5, 255, 22, 19, 6, 255, 28, 26, 10, 255, 28, 27, 8, 255, 26, 31, 5, 255, 28, 30, 7, 255, 32, 30, 15, 255, 33, 36, 21, 255, 37, 46, 17, 255, 52, 62, 12, 255, 51, 65, 17, 255, 52, 72, 27, 255, 67, 80, 25, 255, 67, 84, 24, 255, 66, 92, 27, 255, 70, 97, 26, 255, 77, 98, 21, 255, 71, 98, 24, 255, 72, 91, 24, 255, 71, 87, 21, 255, 67, 87, 19, 255, 66, 87, 17, 255, 68, 82, 17, 255, 72, 79, 16, 255, 77, 78, 10, 255, 78, 79, 9, 255, 74, 77, 11, 255, 75, 72, 7, 255, 77, 69, 4, 255, 71, 65, 3, 255, 69, 66, 6, 255, 63, 62, 5, 255, 57, 56, 1, 255, 60, 55, 3, 255, 63, 53, 5, 255, 64, 48, 4, 255, 63, 45, 4, 255, 69, 43, 6, 255, 71, 47, 6, 255, 71, 49, 5, 255, 68, 46, 1, 255, 72, 53, 3, 255, 76, 51, 2, 255, 91, 52, 5, 255, 91, 53, 4, 255, 77, 49, 3, 255, 76, 47, 4, 255, 77, 43, 5, 255, 72, 43, 4, 255, 80, 48, 6, 255, 77, 48, 2, 255, 78, 51, 4, 255, 78, 46, 4, 255, 79, 44, 3, 255, 80, 50, 5, 255, 82, 49, 5, 255, 87, 49, 5, 255, 90, 47, 3, 255, 89, 47, 2, 255, 89, 52, 4, 255, 87, 53, 2, 255, 91, 54, 3, 255, 94, 52, 7, 255, 99, 59, 6, 255, 101, 60, 3, 255, 92, 56, 3, 255, 87, 55, 8, 255, 91, 51, 11, 255, 94, 51, 6, 255, 122, 61, 6, 255, 121, 58, 3, 255, 109, 60, 8, 255, 100, 59, 5, 255, 112, 56, 5, 255, 103, 55, 5, 255, 104, 59, 7, 255, 124, 61, 9, 255, 120, 59, 7, 255, 105, 58, 2, 255, 111, 54, 6, 255, 115, 56, 7, 255, 108, 58, 4, 255, 129, 62, 3, 255, 122, 62, 6, 255, 118, 61, 8, 255, 118, 63, 4, 255, 114, 62, 10, 255, 122, 63, 10, 255, 123, 61, 5, 255, 126, 63, 10, 255, 143, 67, 12, 255, 128, 64, 5, 255, 126, 62, 9, 255, 120, 63, 4, 255, 120, 60, 3, 255, 126, 63, 6, 255, 126, 65, 6, 255, 124, 60, 2, 255, 117, 61, 2, 255, 118, 67, 2, 255, 122, 63, 5, 255, 126, 59, 8, 255, 125, 60, 4, 255, 115, 65, 5, 255, 118, 64, 1, 255, 122, 64, 13, 255, 112, 67, 6, 255, 117, 66, 1, 255, 125, 69, 2, 255, 121, 71, 1, 255, 124, 68, 6, 255, 122, 63, 13, 255, 121, 68, 13, 255, 124, 68, 7, 255, 128, 67, 10, 255, 126, 65, 10, 255, 117, 67, 9, 255, 126, 68, 11, 255, 135, 71, 12, 255, 135, 69, 14, 255, 138, 77, 8, 255, 136, 74, 11, 255, 133, 71, 5, 255, 134, 73, 7, 255, 132, 71, 5, 255, 130, 71, 4, 255, 133, 65, 14, 255, 132, 70, 7, 255, 129, 75, 3, 255, 133, 71, 0, 255, 132, 70, 10, 255, 132, 71, 12, 255, 127, 70, 5, 255, 131, 69, 6, 255, 140, 72, 10, 255, 137, 70, 12, 255, 137, 69, 14, 255, 143, 72, 10, 255, 137, 73, 6, 255, 129, 72, 6, 255, 126, 73, 9, 255, 112, 62, 12, 255, 120, 68, 11, 255, 127, 76, 3, 255, 130, 70, 2, 255, 143, 72, 7, 255, 157, 81, 5, 255, 159, 77, 7, 255, 152, 70, 10, 255, 154, 75, 4, 255, 158, 76, 7, 255, 164, 77, 0, 255, 164, 83, 8, 255, 170, 89, 9, 255, 158, 76, 7, 255, 162, 78, 11, 255, 176, 88, 3, 255, 171, 87, 13, 255, 180, 91, 8, 255, 182, 87, 6, 255, 176, 89, 7, 255, 174, 90, 13, 255, 178, 92, 6, 255, 174, 91, 11, 255, 175, 91, 11, 255, 173, 88, 5, 255, 181, 92, 7, 255, 181, 98, 11, 255, 185, 100, 7, 255, 185, 97, 10, 255, 171, 88, 11, 255, 180, 101, 4, 255, 172, 94, 8, 255, 166, 89, 5, 255, 170, 94, 6, 255, 174, 97, 7, 255, 175, 98, 9, 255, 177, 103, 3, 255, 178, 102, 6, 255, 182, 106, 8, 255, 185, 109, 9, 255, 185, 106, 8, 255, 180, 103, 7, 255, 188, 108, 15, 255, 194, 115, 10, 255, 197, 116, 10, 255, 197, 117, 11, 255, 195, 115, 3, 255, 194, 113, 5, 255, 195, 117, 11, 255, 194, 120, 9, 255, 197, 122, 7, 255, 196, 118, 11, 255, 199, 120, 11, 255, 193, 114, 10, 255, 187, 108, 10, 255, 184, 106, 9, 255, 183, 109, 11, 255, 179, 109, 2, 255, 179, 109, 5, 255, 177, 107, 6, 255, 173, 108, 0, 255, 172, 107, 3, 255, 176, 107, 9, 255, 185, 111, 16, 255, 187, 108, 10, 255, 189, 110, 9, 255, 186, 111, 6, 255, 178, 103, 5, 255, 183, 112, 6, 255, 191, 118, 2, 255, 191, 111, 4, 255, 191, 114, 2, 255, 195, 125, 0, 255, 197, 128, 4, 255, 197, 124, 4, 255, 203, 126, 5, 255, 202, 123, 7, 255, 194, 115, 2, 255, 196, 115, 2, 255, 193, 111, 2, 255, 195, 113, 7, 255, 187, 110, 4, 255, 179, 101, 7, 255, 184, 106, 10, 255, 191, 121, 7, 255, 185, 120, 14, 255, 184, 113, 18, 255, 171, 99, 7, 255, 174, 101, 4, 255, 186, 106, 7, 255, 181, 93, 14, 255, 193, 106, 4, 255, 190, 103, 6, 255, 182, 97, 1, 255, 180, 96, 4, 255, 174, 90, 1, 255, 174, 90, 1, 255, 170, 90, 2, 255, 171, 92, 5, 255, 169, 92, 3, 255, 170, 91, 6, 255, 173, 94, 6, 255, 171, 92, 3, 255, 171, 90, 3, 255, 174, 92, 6, 255, 174, 95, 7, 255, 174, 98, 7, 255, 156, 87, 6, 255, 161, 84, 14, 255, 172, 103, 11, 255, 164, 98, 11, 255, 162, 98, 17, 255, 167, 96, 3, 255, 176, 103, 6, 255, 184, 108, 15, 255, 178, 102, 10, 255, 170, 93, 4, 255, 181, 104, 11, 255, 191, 117, 13, 255, 186, 105, 7, 255, 171, 84, 7, 255, 163, 81, 9, 255, 163, 83, 4, 255, 191, 115, 14, 255, 196, 123, 12, 255, 185, 102, 4, 255, 184, 97, 5, 255, 185, 100, 6, 255, 180, 97, 6, 255, 174, 92, 5, 255, 165, 85, 5, 255, 159, 80, 9, 255, 157, 79, 9, 255, 157, 80, 4, 255, 154, 81, 0, 255, 147, 79, 3, 255, 140, 74, 9, 255, 132, 64, 20, 255, 137, 71, 15, 255, 136, 72, 13, 255, 130, 70, 16, 255, 131, 72, 12, 255, 128, 71, 4, 255, 119, 66, 3, 255, 108, 57, 4, 255, 107, 56, 3, 255, 107, 55, 2, 255, 112, 60, 11, 255, 104, 48, 8, 255, 89, 41, 7, 255, 74, 29, 4, 255, 78, 30, 2, 255, 87, 38, 6, 255, 92, 40, 5, 255, 95, 42, 3, 255, 95, 43, 1, 255, 97, 51, 5, 255, 101, 54, 7, 255, 109, 55, 6, 255, 107, 56, 1, 255, 107, 56, 3, 255, 109, 56, 9, 255, 109, 56, 8, 255, 105, 51, 1, 255, 105, 45, 4, 255, 95, 43, 1, 255, 85, 38, 2, 255, 85, 37, 4, 255, 94, 45, 6, 255, 87, 40, 5, 255, 85, 40, 2, 255, 94, 46, 3, 255, 95, 48, 4, 255, 95, 50, 5, 255, 98, 47, 3, 255, 102, 48, 8, 255, 96, 48, 5, 255, 96, 42, 0, 255, 94, 35, 4, 255, 94, 29, 6, 255, 0, 0, 8, 255, 0, 0, 8, 255, 0, 0, 8, 255, 0, 1, 8, 255, 0, 1, 7, 255, 0, 1, 6, 255, 0, 2, 4, 255, 1, 0, 3, 255, 0, 0, 0, 255, 2, 2, 7, 255, 1, 5, 15, 255, 3, 0, 9, 255, 46, 49, 62, 255, 57, 55, 34, 255, 25, 32, 38, 255, 33, 50, 40, 255, 17, 21, 19, 255, 11, 11, 21, 255, 80, 112, 107, 255, 35, 75, 59, 255, 0, 0, 4, 255, 6, 4, 15, 255, 1, 1, 2, 255, 1, 1, 0, 255, 5, 3, 2, 255, 0, 1, 1, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 0, 1, 255, 0, 0, 0, 255, 1, 0, 0, 255, 0, 0, 2, 255, 1, 2, 3, 255, 2, 1, 5, 255, 1, 0, 5, 255, 2, 1, 6, 255, 2, 1, 7, 255, 4, 0, 5, 255, 6, 2, 1, 255, 2, 0, 18, 255, 2, 123, 208, 255, 14, 128, 169, 255, 15, 0, 0, 255, 12, 6, 43, 255, 8, 33, 211, 255, 3, 17, 68, 255, 3, 0, 0, 255, 1, 2, 9, 255, 4, 2, 0, 255, 2, 0, 2, 255, 0, 2, 0, 255, 4, 2, 2, 255, 22, 15, 29, 255, 30, 26, 32, 255, 20, 23, 25, 255, 27, 32, 39, 255, 28, 31, 21, 255, 27, 28, 34, 255, 26, 30, 50, 255, 31, 25, 60, 255, 30, 22, 56, 255, 25, 25, 42, 255, 19, 17, 19, 255, 17, 14, 5, 255, 22, 26, 27, 255, 23, 27, 30, 255, 17, 19, 16, 255, 12, 16, 9, 255, 14, 13, 3, 255, 19, 14, 4, 255, 15, 12, 3, 255, 12, 12, 2, 255, 12, 11, 1, 255, 19, 16, 5, 255, 18, 16, 3, 255, 18, 17, 4, 255, 15, 15, 3, 255, 18, 18, 6, 255, 24, 22, 8, 255, 25, 23, 6, 255, 26, 25, 5, 255, 25, 22, 5, 255, 24, 27, 5, 255, 30, 32, 8, 255, 32, 34, 9, 255, 38, 40, 16, 255, 45, 48, 17, 255, 55, 63, 12, 255, 54, 67, 22, 255, 60, 79, 30, 255, 64, 82, 16, 255, 68, 85, 27, 255, 68, 91, 29, 255, 73, 95, 27, 255, 78, 94, 25, 255, 71, 92, 29, 255, 66, 86, 25, 255, 63, 82, 23, 255, 66, 84, 8, 255, 72, 85, 12, 255, 73, 77, 18, 255, 75, 78, 15, 255, 78, 75, 4, 255, 79, 75, 4, 255, 71, 76, 8, 255, 67, 71, 6, 255, 71, 68, 5, 255, 72, 66, 8, 255, 70, 64, 8, 255, 65, 61, 6, 255, 63, 57, 4, 255, 64, 56, 5, 255, 64, 51, 2, 255, 63, 50, 4, 255, 64, 47, 3, 255, 72, 44, 4, 255, 65, 47, 4, 255, 70, 51, 7, 255, 77, 44, 3, 255, 72, 52, 6, 255, 74, 52, 0, 255, 87, 55, 4, 255, 82, 54, 6, 255, 84, 47, 2, 255, 80, 47, 5, 255, 72, 46, 7, 255, 75, 43, 4, 255, 79, 45, 2, 255, 82, 48, 3, 255, 79, 46, 0, 255, 80, 48, 2, 255, 81, 46, 2, 255, 86, 49, 2, 255, 86, 51, 3, 255, 82, 48, 3, 255, 85, 50, 6, 255, 94, 52, 6, 255, 110, 54, 6, 255, 108, 54, 5, 255, 94, 55, 4, 255, 97, 59, 12, 255, 95, 58, 6, 255, 98, 58, 3, 255, 91, 57, 3, 255, 90, 58, 7, 255, 98, 53, 8, 255, 100, 58, 3, 255, 129, 65, 10, 255, 136, 62, 5, 255, 137, 63, 6, 255, 136, 62, 6, 255, 140, 65, 9, 255, 113, 60, 4, 255, 102, 59, 14, 255, 108, 61, 8, 255, 109, 61, 6, 255, 113, 61, 6, 255, 138, 57, 3, 255, 149, 63, 7, 255, 131, 64, 11, 255, 123, 63, 5, 255, 133, 65, 10, 255, 128, 62, 4, 255, 121, 65, 3, 255, 121, 65, 5, 255, 131, 66, 7, 255, 117, 62, 7, 255, 129, 64, 8, 255, 136, 63, 3, 255, 139, 62, 7, 255, 126, 64, 2, 255, 119, 63, 4, 255, 122, 61, 13, 255, 129, 64, 10, 255, 126, 64, 3, 255, 133, 65, 7, 255, 122, 62, 3, 255, 120, 66, 4, 255, 123, 63, 2, 255, 124, 68, 12, 255, 118, 61, 7, 255, 131, 68, 8, 255, 130, 65, 4, 255, 129, 66, 8, 255, 131, 68, 6, 255, 133, 63, 5, 255, 119, 62, 9, 255, 117, 66, 12, 255, 115, 62, 8, 255, 127, 63, 6, 255, 135, 67, 8, 255, 129, 71, 9, 255, 141, 67, 13, 255, 127, 68, 10, 255, 125, 64, 9, 255, 128, 60, 16, 255, 122, 67, 8, 255, 130, 72, 10, 255, 132, 71, 11, 255, 131, 60, 20, 255, 146, 73, 11, 255, 157, 85, 5, 255, 153, 80, 7, 255, 146, 75, 10, 255, 137, 70, 2, 255, 142, 75, 11, 255, 137, 70, 12, 255, 139, 71, 10, 255, 150, 77, 10, 255, 158, 79, 11, 255, 153, 80, 15, 255, 148, 81, 13, 255, 178, 92, 10, 255, 171, 89, 3, 255, 134, 68, 8, 255, 147, 80, 17, 255, 154, 93, 5, 255, 162, 88, 9, 255, 138, 69, 7, 255, 134, 73, 14, 255, 134, 74, 11, 255, 134, 71, 10, 255, 144, 70, 10, 255, 155, 74, 14, 255, 184, 105, 12, 255, 180, 96, 5, 255, 157, 71, 4, 255, 162, 82, 7, 255, 183, 102, 10, 255, 174, 88, 9, 255, 166, 82, 2, 255, 151, 71, 2, 255, 157, 77, 11, 255, 175, 94, 4, 255, 173, 85, 7, 255, 175, 84, 13, 255, 179, 94, 7, 255, 179, 94, 5, 255, 181, 93, 8, 255, 166, 85, 4, 255, 160, 83, 4, 255, 168, 90, 6, 255, 177, 92, 0, 255, 176, 93, 8, 255, 173, 93, 6, 255, 175, 88, 5, 255, 172, 90, 5, 255, 177, 94, 2, 255, 186, 97, 7, 255, 184, 97, 11, 255, 176, 94, 9, 255, 170, 90, 4, 255, 179, 100, 7, 255, 182, 100, 4, 255, 185, 101, 1, 255, 188, 105, 11, 255, 189, 107, 9, 255, 187, 106, 6, 255, 186, 108, 5, 255, 186, 109, 9, 255, 184, 109, 11, 255, 187, 114, 5, 255, 192, 118, 1, 255, 196, 119, 8, 255, 196, 119, 9, 255, 192, 115, 4, 255, 191, 111, 6, 255, 191, 114, 9, 255, 188, 116, 11, 255, 191, 117, 3, 255, 192, 114, 9, 255, 191, 111, 12, 255, 190, 109, 16, 255, 185, 106, 9, 255, 181, 108, 11, 255, 179, 108, 14, 255, 174, 104, 14, 255, 178, 106, 13, 255, 178, 105, 6, 255, 177, 106, 4, 255, 175, 108, 4, 255, 174, 108, 8, 255, 183, 107, 11, 255, 189, 106, 8, 255, 201, 119, 11, 255, 189, 112, 8, 255, 180, 106, 8, 255, 187, 116, 5, 255, 191, 118, 6, 255, 197, 128, 12, 255, 200, 140, 3, 255, 199, 138, 2, 255, 198, 130, 4, 255, 202, 130, 4, 255, 204, 133, 11, 255, 189, 119, 9, 255, 189, 118, 7, 255, 190, 116, 2, 255, 186, 108, 1, 255, 186, 106, 8, 255, 182, 101, 10, 255, 182, 101, 5, 255, 191, 108, 0, 255, 195, 116, 13, 255, 195, 122, 21, 255, 190, 116, 14, 255, 192, 107, 10, 255, 183, 102, 8, 255, 179, 102, 6, 255, 174, 101, 11, 255, 174, 103, 6, 255, 167, 93, 8, 255, 169, 91, 2, 255, 174, 90, 0, 255, 172, 91, 0, 255, 173, 94, 9, 255, 168, 88, 4, 255, 168, 89, 1, 255, 169, 89, 4, 255, 173, 88, 6, 255, 171, 92, 5, 255, 168, 90, 3, 255, 170, 91, 5, 255, 173, 94, 6, 255, 172, 94, 4, 255, 169, 94, 3, 255, 163, 95, 6, 255, 180, 108, 15, 255, 182, 119, 12, 255, 172, 110, 11, 255, 178, 119, 8, 255, 178, 105, 10, 255, 181, 112, 13, 255, 187, 115, 18, 255, 187, 112, 14, 255, 191, 112, 12, 255, 184, 105, 9, 255, 175, 93, 9, 255, 163, 87, 13, 255, 162, 79, 9, 255, 157, 77, 2, 255, 165, 78, 2, 255, 194, 110, 12, 255, 199, 123, 0, 255, 198, 113, 5, 255, 184, 99, 4, 255, 170, 83, 2, 255, 158, 72, 8, 255, 147, 63, 7, 255, 136, 57, 4, 255, 132, 57, 2, 255, 135, 63, 4, 255, 135, 66, 4, 255, 135, 69, 7, 255, 138, 76, 13, 255, 132, 73, 12, 255, 131, 68, 9, 255, 131, 70, 13, 255, 125, 69, 9, 255, 124, 72, 6, 255, 123, 69, 5, 255, 118, 62, 6, 255, 108, 54, 4, 255, 103, 51, 8, 255, 104, 53, 4, 255, 107, 56, 2, 255, 103, 54, 5, 255, 88, 39, 6, 255, 84, 35, 6, 255, 98, 48, 6, 255, 101, 54, 8, 255, 91, 44, 2, 255, 93, 44, 2, 255, 101, 50, 7, 255, 108, 55, 9, 255, 107, 57, 4, 255, 108, 59, 2, 255, 109, 58, 3, 255, 105, 52, 2, 255, 106, 53, 2, 255, 105, 52, 1, 255, 107, 55, 5, 255, 105, 53, 5, 255, 106, 47, 5, 255, 95, 47, 4, 255, 85, 42, 5, 255, 85, 40, 4, 255, 101, 51, 7, 255, 98, 46, 5, 255, 101, 47, 5, 255, 101, 47, 2, 255, 103, 51, 4, 255, 102, 52, 4, 255, 101, 51, 2, 255, 103, 49, 2, 255, 104, 46, 1, 255, 100, 42, 1, 255, 90, 29, 2, 255, 89, 24, 5, 255, 0, 0, 12, 255, 2, 2, 13, 255, 1, 2, 12, 255, 0, 0, 10, 255, 1, 1, 11, 255, 1, 1, 8, 255, 0, 1, 6, 255, 2, 0, 7, 255, 0, 1, 1, 255, 0, 2, 2, 255, 4, 2, 6, 255, 6, 20, 46, 255, 3, 49, 106, 255, 11, 42, 63, 255, 36, 52, 61, 255, 40, 51, 60, 255, 31, 32, 35, 255, 23, 18, 18, 255, 4, 1, 2, 255, 0, 0, 0, 255, 7, 8, 15, 255, 4, 5, 10, 255, 0, 5, 10, 255, 1, 1, 4, 255, 6, 0, 1, 255, 0, 0, 0, 255, 1, 2, 1, 255, 3, 0, 1, 255, 0, 1, 0, 255, 0, 1, 0, 255, 0, 0, 0, 255, 5, 0, 3, 255, 4, 0, 4, 255, 0, 0, 7, 255, 2, 0, 7, 255, 0, 2, 7, 255, 0, 0, 8, 255, 1, 1, 2, 255, 0, 1, 3, 255, 1, 0, 0, 255, 9, 51, 128, 255, 1, 174, 235, 255, 12, 20, 47, 255, 17, 2, 0, 255, 13, 23, 180, 255, 1, 28, 144, 255, 4, 1, 0, 255, 3, 1, 1, 255, 4, 1, 2, 255, 0, 3, 0, 255, 2, 1, 5, 255, 3, 0, 2, 255, 2, 1, 1, 255, 10, 7, 7, 255, 21, 18, 13, 255, 29, 27, 25, 255, 25, 27, 35, 255, 25, 28, 33, 255, 33, 27, 32, 255, 39, 32, 36, 255, 33, 30, 60, 255, 9, 16, 30, 255, 11, 16, 9, 255, 24, 14, 14, 255, 18, 15, 10, 255, 24, 30, 29, 255, 24, 33, 28, 255, 27, 29, 16, 255, 24, 23, 10, 255, 20, 19, 7, 255, 13, 11, 3, 255, 13, 14, 4, 255, 14, 14, 2, 255, 18, 17, 4, 255, 18, 15, 3, 255, 16, 15, 3, 255, 15, 14, 3, 255, 16, 16, 4, 255, 21, 17, 3, 255, 29, 24, 9, 255, 27, 24, 7, 255, 22, 20, 1, 255, 28, 24, 5, 255, 26, 29, 8, 255, 29, 35, 5, 255, 36, 42, 7, 255, 43, 49, 6, 255, 50, 58, 11, 255, 51, 61, 26, 255, 55, 71, 21, 255, 63, 80, 12, 255, 70, 83, 23, 255, 63, 85, 27, 255, 71, 95, 28, 255, 73, 93, 20, 255, 75, 91, 20, 255, 78, 88, 21, 255, 73, 82, 17, 255, 69, 79, 30, 255, 73, 79, 22, 255, 79, 77, 13, 255, 74, 73, 13, 255, 71, 72, 7, 255, 73, 73, 5, 255, 80, 75, 4, 255, 71, 71, 5, 255, 66, 69, 5, 255, 71, 69, 6, 255, 66, 63, 9, 255, 66, 61, 6, 255, 67, 60, 3, 255, 62, 56, 6, 255, 71, 53, 10, 255, 63, 51, 6, 255, 63, 49, 4, 255, 65, 44, 5, 255, 71, 44, 2, 255, 72, 48, 6, 255, 71, 47, 10, 255, 78, 43, 9, 255, 76, 46, 3, 255, 81, 52, 4, 255, 85, 57, 2, 255, 80, 55, 6, 255, 79, 44, 1, 255, 81, 46, 7, 255, 72, 41, 3, 255, 78, 43, 4, 255, 82, 49, 0, 255, 83, 48, 1, 255, 81, 44, 3, 255, 78, 45, 3, 255, 81, 49, 2, 255, 85, 50, 4, 255, 88, 52, 7, 255, 86, 52, 8, 255, 84, 50, 7, 255, 101, 51, 8, 255, 121, 52, 8, 255, 105, 55, 3, 255, 94, 54, 5, 255, 97, 53, 12, 255, 102, 60, 3, 255, 95, 57, 4, 255, 89, 55, 9, 255, 104, 59, 4, 255, 133, 63, 6, 255, 109, 57, 10, 255, 117, 66, 5, 255, 113, 56, 5, 255, 115, 54, 8, 255, 126, 61, 6, 255, 119, 58, 5, 255, 105, 60, 8, 255, 106, 59, 8, 255, 113, 63, 2, 255, 110, 62, 1, 255, 107, 63, 6, 255, 126, 66, 6, 255, 138, 66, 2, 255, 118, 62, 8, 255, 123, 63, 9, 255, 134, 62, 5, 255, 134, 67, 8, 255, 120, 65, 1, 255, 118, 62, 6, 255, 126, 61, 6, 255, 133, 65, 7, 255, 135, 66, 6, 255, 123, 66, 1, 255, 121, 64, 0, 255, 124, 64, 1, 255, 126, 66, 7, 255, 129, 67, 8, 255, 129, 65, 10, 255, 126, 67, 8, 255, 127, 67, 1, 255, 122, 67, 3, 255, 121, 65, 14, 255, 124, 62, 8, 255, 127, 65, 10, 255, 124, 67, 11, 255, 132, 68, 8, 255, 123, 66, 8, 255, 112, 66, 2, 255, 124, 62, 7, 255, 129, 63, 6, 255, 124, 66, 7, 255, 133, 71, 16, 255, 145, 82, 10, 255, 148, 76, 4, 255, 165, 83, 9, 255, 167, 83, 12, 255, 186, 98, 1, 255, 190, 102, 4, 255, 199, 105, 8, 255, 201, 106, 6, 255, 199, 112, 2, 255, 193, 98, 5, 255, 199, 107, 6, 255, 209, 124, 4, 255, 198, 107, 3, 255, 198, 98, 7, 255, 209, 106, 2, 255, 215, 112, 5, 255, 198, 102, 3, 255, 197, 99, 10, 255, 197, 101, 13, 255, 192, 101, 8, 255, 197, 102, 1, 255, 210, 107, 3, 255, 212, 105, 6, 255, 196, 96, 7, 255, 198, 93, 9, 255, 200, 97, 8, 255, 186, 100, 8, 255, 194, 104, 9, 255, 210, 114, 12, 255, 204, 111, 13, 255, 190, 100, 6, 255, 195, 109, 9, 255, 175, 97, 0, 255, 186, 108, 13, 255, 182, 99, 9, 255, 173, 92, 12, 255, 211, 116, 12, 255, 192, 105, 4, 255, 164, 81, 10, 255, 186, 93, 8, 255, 198, 112, 7, 255, 182, 97, 11, 255, 165, 79, 5, 255, 157, 79, 11, 255, 179, 92, 9, 255, 197, 100, 8, 255, 179, 87, 9, 255, 166, 83, 1, 255, 187, 100, 3, 255, 182, 98, 4, 255, 186, 100, 8, 255, 178, 96, 5, 255, 172, 92, 9, 255, 173, 91, 11, 255, 179, 97, 3, 255, 183, 98, 6, 255, 178, 95, 2, 255, 179, 92, 8, 255, 177, 93, 7, 255, 180, 100, 5, 255, 189, 105, 13, 255, 175, 90, 11, 255, 177, 97, 4, 255, 177, 96, 3, 255, 183, 101, 3, 255, 189, 100, 2, 255, 201, 108, 11, 255, 200, 112, 8, 255, 193, 107, 5, 255, 186, 103, 4, 255, 185, 104, 3, 255, 189, 109, 8, 255, 188, 110, 6, 255, 185, 108, 0, 255, 193, 114, 3, 255, 196, 116, 9, 255, 196, 116, 10, 255, 192, 112, 8, 255, 187, 110, 10, 255, 185, 111, 3, 255, 188, 115, 10, 255, 187, 111, 1, 255, 188, 109, 5, 255, 181, 102, 6, 255, 185, 109, 10, 255, 181, 109, 6, 255, 180, 108, 5, 255, 185, 114, 7, 255, 185, 113, 10, 255, 186, 111, 7, 255, 183, 108, 6, 255, 177, 105, 4, 255, 175, 109, 6, 255, 187, 120, 10, 255, 191, 115, 11, 255, 179, 104, 7, 255, 182, 107, 11, 255, 181, 109, 10, 255, 182, 116, 9, 255, 187, 122, 5, 255, 192, 131, 4, 255, 194, 135, 6, 255, 186, 125, 0, 255, 186, 120, 12, 255, 175, 106, 11, 255, 177, 111, 2, 255, 175, 111, 6, 255, 174, 112, 2, 255, 175, 111, 1, 255, 177, 109, 5, 255, 178, 107, 4, 255, 177, 104, 2, 255, 189, 115, 3, 255, 195, 114, 7, 255, 192, 104, 7, 255, 193, 112, 7, 255, 192, 121, 19, 255, 183, 113, 16, 255, 177, 104, 9, 255, 181, 106, 16, 255, 183, 115, 9, 255, 192, 129, 13, 255, 191, 128, 6, 255, 185, 118, 4, 255, 182, 108, 6, 255, 178, 101, 4, 255, 172, 92, 5, 255, 169, 92, 6, 255, 166, 89, 4, 255, 164, 87, 3, 255, 163, 83, 2, 255, 166, 86, 2, 255, 168, 85, 6, 255, 150, 77, 3, 255, 151, 83, 4, 255, 158, 86, 8, 255, 161, 88, 0, 255, 163, 88, 0, 255, 171, 105, 13, 255, 185, 120, 11, 255, 179, 121, 12, 255, 189, 130, 9, 255, 195, 131, 20, 255, 185, 115, 18, 255, 188, 118, 20, 255, 195, 116, 14, 255, 190, 115, 14, 255, 169, 92, 12, 255, 164, 78, 4, 255, 164, 81, 6, 255, 157, 82, 4, 255, 152, 74, 6, 255, 142, 63, 5, 255, 164, 79, 7, 255, 197, 112, 4, 255, 204, 124, 0, 255, 202, 115, 7, 255, 184, 90, 10, 255, 161, 73, 3, 255, 134, 58, 2, 255, 123, 49, 3, 255, 111, 40, 3, 255, 119, 54, 6, 255, 124, 61, 4, 255, 127, 60, 15, 255, 121, 60, 9, 255, 119, 65, 12, 255, 126, 70, 14, 255, 132, 75, 7, 255, 122, 68, 4, 255, 121, 64, 6, 255, 122, 64, 10, 255, 113, 58, 8, 255, 99, 48, 5, 255, 103, 48, 8, 255, 106, 52, 2, 255, 104, 54, 1, 255, 105, 56, 6, 255, 99, 48, 7, 255, 104, 57, 9, 255, 110, 60, 2, 255, 120, 63, 7, 255, 115, 64, 8, 255, 108, 59, 4, 255, 109, 60, 5, 255, 108, 59, 4, 255, 111, 60, 6, 255, 112, 59, 6, 255, 108, 55, 6, 255, 101, 49, 6, 255, 99, 45, 1, 255, 107, 54, 6, 255, 110, 56, 10, 255, 104, 50, 7, 255, 104, 51, 5, 255, 101, 49, 5, 255, 107, 53, 9, 255, 104, 53, 8, 255, 98, 50, 3, 255, 101, 47, 1, 255, 104, 50, 1, 255, 106, 51, 5, 255, 99, 49, 3, 255, 98, 48, 0, 255, 102, 48, 0, 255, 103, 51, 2, 255, 103, 47, 2, 255, 102, 44, 2, 255, 102, 36, 2, 255, 90, 24, 3, 255, 82, 20, 5, 255, 0, 0, 14, 255, 1, 0, 14, 255, 1, 1, 13, 255, 0, 0, 11, 255, 1, 1, 11, 255, 1, 1, 10, 255, 1, 0, 15, 255, 1, 1, 8, 255, 4, 1, 7, 255, 4, 1, 5, 255, 5, 2, 10, 255, 4, 48, 103, 255, 44, 128, 224, 255, 40, 183, 238, 255, 23, 124, 158, 255, 37, 60, 66, 255, 38, 41, 51, 255, 40, 40, 52, 255, 32, 33, 61, 255, 25, 31, 55, 255, 19, 40, 62, 255, 29, 40, 55, 255, 6, 24, 30, 255, 32, 41, 41, 255, 24, 45, 63, 255, 5, 18, 26, 255, 2, 0, 0, 255, 2, 1, 2, 255, 2, 1, 5, 255, 0, 2, 1, 255, 1, 2, 2, 255, 1, 3, 1, 255, 1, 2, 1, 255, 0, 2, 3, 255, 4, 1, 3, 255, 3, 1, 5, 255, 4, 2, 2, 255, 1, 1, 2, 255, 3, 2, 0, 255, 2, 8, 57, 255, 10, 168, 254, 255, 7, 78, 120, 255, 9, 0, 0, 255, 11, 19, 103, 255, 4, 35, 201, 255, 6, 8, 7, 255, 6, 0, 1, 255, 1, 3, 2, 255, 1, 1, 2, 255, 1, 0, 2, 255, 1, 0, 0, 255, 3, 1, 1, 255, 1, 0, 1, 255, 3, 2, 3, 255, 13, 14, 9, 255, 27, 29, 23, 255, 28, 30, 31, 255, 28, 26, 32, 255, 31, 26, 36, 255, 33, 33, 40, 255, 31, 30, 50, 255, 19, 19, 22, 255, 20, 20, 10, 255, 18, 16, 9, 255, 22, 20, 13, 255, 27, 31, 31, 255, 30, 38, 33, 255, 27, 29, 17, 255, 27, 26, 15, 255, 19, 21, 9, 255, 12, 15, 4, 255, 15, 15, 5, 255, 19, 18, 6, 255, 18, 16, 3, 255, 18, 16, 3, 255, 17, 17, 5, 255, 15, 16, 5, 255, 16, 18, 4, 255, 23, 20, 4, 255, 27, 23, 6, 255, 23, 22, 4, 255, 22, 21, 3, 255, 26, 25, 5, 255, 33, 31, 8, 255, 37, 40, 7, 255, 39, 47, 14, 255, 40, 55, 8, 255, 46, 65, 5, 255, 53, 71, 12, 255, 57, 74, 15, 255, 65, 75, 30, 255, 70, 83, 27, 255, 62, 89, 22, 255, 60, 93, 19, 255, 64, 89, 20, 255, 71, 91, 18, 255, 70, 85, 13, 255, 70, 80, 13, 255, 67, 81, 11, 255, 68, 79, 11, 255, 74, 74, 13, 255, 68, 72, 15, 255, 68, 71, 11, 255, 71, 69, 8, 255, 74, 68, 5, 255, 75, 68, 6, 255, 73, 69, 4, 255, 76, 67, 2, 255, 70, 63, 4, 255, 65, 61, 4, 255, 70, 56, 6, 255, 64, 56, 5, 255, 64, 52, 6, 255, 65, 52, 5, 255, 65, 46, 5, 255, 68, 48, 6, 255, 77, 48, 6, 255, 71, 47, 3, 255, 76, 47, 8, 255, 83, 48, 4, 255, 78, 44, 2, 255, 88, 53, 6, 255, 87, 54, 4, 255, 88, 53, 7, 255, 76, 45, 3, 255, 72, 48, 5, 255, 75, 48, 4, 255, 86, 49, 6, 255, 81, 47, 8, 255, 76, 48, 1, 255, 76, 48, 4, 255, 84, 43, 7, 255, 85, 47, 6, 255, 81, 47, 2, 255, 86, 46, 2, 255, 89, 54, 4, 255, 92, 50, 6, 255, 97, 51, 8, 255, 97, 51, 4, 255, 104, 57, 6, 255, 110, 56, 7, 255, 101, 55, 5, 255, 99, 59, 2, 255, 93, 58, 7, 255, 101, 52, 6, 255, 126, 59, 4, 255, 119, 58, 8, 255, 111, 62, 4, 255, 111, 60, 7, 255, 100, 53, 11, 255, 99, 61, 7, 255, 108, 61, 16, 255, 116, 57, 9, 255, 121, 64, 2, 255, 114, 63, 6, 255, 122, 64, 10, 255, 116, 59, 7, 255, 114, 55, 3, 255, 117, 65, 7, 255, 109, 57, 10, 255, 103, 58, 2, 255, 115, 64, 8, 255, 117, 63, 3, 255, 121, 66, 2, 255, 117, 62, 7, 255, 119, 66, 4, 255, 128, 69, 2, 255, 138, 65, 4, 255, 134, 62, 7, 255, 121, 64, 7, 255, 121, 69, 7, 255, 127, 66, 2, 255, 133, 67, 6, 255, 132, 67, 4, 255, 124, 67, 2, 255, 126, 64, 12, 255, 124, 63, 12, 255, 126, 61, 5, 255, 121, 62, 7, 255, 121, 63, 8, 255, 114, 67, 6, 255, 127, 64, 7, 255, 136, 67, 1, 255, 143, 76, 9, 255, 157, 81, 8, 255, 165, 88, 15, 255, 172, 96, 14, 255, 187, 106, 12, 255, 203, 106, 7, 255, 209, 109, 7, 255, 207, 110, 12, 255, 205, 106, 3, 255, 207, 105, 11, 255, 213, 113, 5, 255, 217, 113, 2, 255, 223, 117, 8, 255, 232, 125, 5, 255, 235, 127, 11, 255, 211, 96, 6, 255, 220, 106, 10, 255, 220, 111, 2, 255, 227, 119, 10, 255, 224, 117, 4, 255, 231, 124, 6, 255, 228, 121, 4, 255, 222, 119, 4, 255, 217, 116, 8, 255, 212, 114, 6, 255, 217, 121, 5, 255, 215, 117, 5, 255, 209, 109, 2, 255, 207, 105, 1, 255, 201, 97, 8, 255, 193, 88, 4, 255, 200, 97, 8, 255, 211, 116, 5, 255, 210, 113, 5, 255, 218, 120, 6, 255, 220, 121, 7, 255, 221, 128, 2, 255, 222, 131, 3, 255, 224, 126, 10, 255, 222, 130, 6, 255, 221, 129, 2, 255, 213, 124, 2, 255, 217, 123, 2, 255, 218, 127, 7, 255, 212, 124, 10, 255, 213, 121, 6, 255, 212, 115, 0, 255, 210, 117, 3, 255, 194, 109, 5, 255, 194, 110, 13, 255, 202, 111, 7, 255, 204, 108, 8, 255, 190, 98, 11, 255, 179, 96, 11, 255, 185, 97, 5, 255, 194, 105, 15, 255, 197, 108, 13, 255, 194, 105, 5, 255, 188, 97, 1, 255, 184, 91, 6, 255, 192, 99, 15, 255, 187, 98, 3, 255, 181, 92, 4, 255, 184, 94, 10, 255, 184, 98, 10, 255, 194, 109, 7, 255, 202, 120, 10, 255, 182, 99, 5, 255, 178, 102, 1, 255, 174, 97, 7, 255, 175, 97, 9, 255, 179, 99, 1, 255, 187, 102, 5, 255, 184, 103, 4, 255, 180, 99, 9, 255, 178, 100, 13, 255, 186, 107, 8, 255, 196, 117, 3, 255, 192, 110, 3, 255, 189, 110, 6, 255, 193, 116, 4, 255, 191, 112, 2, 255, 193, 114, 6, 255, 191, 112, 7, 255, 185, 109, 5, 255, 187, 116, 2, 255, 185, 113, 7, 255, 184, 110, 2, 255, 186, 109, 7, 255, 187, 109, 5, 255, 186, 111, 3, 255, 182, 110, 1, 255, 177, 105, 7, 255, 188, 110, 12, 255, 195, 111, 9, 255, 190, 108, 7, 255, 185, 112, 2, 255, 189, 122, 2, 255, 197, 127, 4, 255, 203, 124, 11, 255, 166, 99, 15, 255, 160, 104, 26, 255, 185, 121, 17, 255, 185, 126, 6, 255, 179, 115, 7, 255, 177, 110, 8, 255, 183, 116, 3, 255, 189, 121, 7, 255, 168, 100, 1, 255, 159, 93, 3, 255, 168, 99, 4, 255, 166, 100, 0, 255, 168, 102, 5, 255, 173, 104, 7, 255, 173, 101, 4, 255, 177, 101, 10, 255, 172, 95, 2, 255, 181, 102, 3, 255, 192, 109, 6, 255, 189, 108, 5, 255, 188, 112, 2, 255, 190, 116, 7, 255, 183, 112, 15, 255, 173, 107, 16, 255, 169, 111, 14, 255, 165, 102, 9, 255, 169, 96, 13, 255, 176, 100, 5, 255, 187, 114, 6, 255, 194, 125, 2, 255, 188, 119, 1, 255, 187, 114, 7, 255, 181, 106, 6, 255, 174, 99, 0, 255, 168, 94, 5, 255, 164, 88, 11, 255, 164, 86, 2, 255, 163, 85, 7, 255, 165, 90, 7, 255, 161, 86, 7, 255, 148, 81, 11, 255, 130, 64, 8, 255, 149, 83, 8, 255, 166, 96, 7, 255, 184, 113, 15, 255, 182, 109, 1, 255, 188, 133, 7, 255, 193, 142, 11, 255, 196, 133, 19, 255, 178, 113, 17, 255, 178, 107, 15, 255, 166, 89, 13, 255, 150, 72, 11, 255, 147, 75, 4, 255, 150, 77, 5, 255, 151, 78, 7, 255, 153, 78, 0, 255, 148, 70, 1, 255, 152, 68, 5, 255, 179, 96, 9, 255, 199, 120, 2, 255, 201, 120, 6, 255, 191, 107, 6, 255, 175, 85, 4, 255, 157, 72, 7, 255, 138, 67, 2, 255, 132, 62, 6, 255, 132, 60, 8, 255, 131, 66, 6, 255, 133, 67, 12, 255, 133, 68, 8, 255, 123, 60, 1, 255, 118, 57, 12, 255, 123, 64, 9, 255, 124, 64, 5, 255, 127, 66, 7, 255, 123, 65, 6, 255, 119, 66, 4, 255, 121, 65, 2, 255, 114, 60, 4, 255, 108, 58, 6, 255, 110, 59, 6, 255, 106, 54, 4, 255, 104, 50, 7, 255, 102, 49, 5, 255, 107, 58, 4, 255, 108, 59, 1, 255, 111, 57, 4, 255, 114, 61, 4, 255, 114, 63, 5, 255, 113, 62, 6, 255, 105, 55, 1, 255, 105, 54, 4, 255, 108, 55, 8, 255, 100, 46, 6, 255, 104, 52, 9, 255, 109, 54, 1, 255, 108, 50, 4, 255, 99, 43, 5, 255, 101, 49, 7, 255, 101, 54, 4, 255, 103, 55, 3, 255, 103, 48, 3, 255, 100, 47, 5, 255, 96, 46, 5, 255, 96, 42, 3, 255, 102, 49, 6, 255, 94, 48, 5, 255, 92, 48, 6, 255, 97, 46, 5, 255, 101, 46, 4, 255, 101, 45, 5, 255, 100, 37, 3, 255, 98, 36, 4, 255, 99, 33, 3, 255, 86, 20, 0, 255, 85, 23, 6, 255, 1, 0, 16, 255, 0, 0, 14, 255, 1, 1, 13, 255, 1, 1, 11, 255, 0, 0, 12, 255, 0, 0, 13, 255, 1, 0, 18, 255, 4, 1, 4, 255, 1, 1, 2, 255, 2, 2, 6, 255, 0, 0, 2, 255, 8, 11, 54, 255, 81, 184, 233, 255, 40, 151, 167, 255, 23, 93, 145, 255, 28, 101, 118, 255, 45, 66, 78, 255, 58, 67, 94, 255, 52, 59, 87, 255, 47, 72, 106, 255, 38, 59, 88, 255, 30, 50, 67, 255, 35, 44, 67, 255, 16, 33, 40, 255, 34, 58, 76, 255, 47, 77, 112, 255, 20, 43, 59, 255, 0, 1, 3, 255, 0, 1, 0, 255, 2, 0, 3, 255, 1, 1, 2, 255, 1, 1, 1, 255, 0, 2, 0, 255, 4, 1, 6, 255, 5, 0, 8, 255, 1, 2, 3, 255, 1, 1, 10, 255, 4, 3, 0, 255, 3, 0, 0, 255, 6, 110, 191, 255, 5, 141, 197, 255, 11, 0, 0, 255, 17, 7, 26, 255, 5, 28, 206, 255, 4, 13, 57, 255, 6, 2, 0, 255, 0, 5, 4, 255, 2, 0, 8, 255, 2, 0, 6, 255, 4, 0, 6, 255, 0, 0, 0, 255, 0, 1, 1, 255, 1, 0, 0, 255, 3, 0, 0, 255, 10, 12, 6, 255, 25, 30, 22, 255, 30, 31, 28, 255, 30, 27, 30, 255, 33, 30, 39, 255, 38, 32, 45, 255, 37, 30, 35, 255, 28, 23, 25, 255, 22, 21, 16, 255, 24, 27, 7, 255, 26, 29, 20, 255, 35, 39, 40, 255, 36, 42, 42, 255, 27, 33, 27, 255, 24, 28, 20, 255, 21, 23, 10, 255, 18, 18, 5, 255, 15, 13, 1, 255, 15, 13, 2, 255, 21, 18, 7, 255, 17, 15, 2, 255, 19, 17, 4, 255, 18, 20, 5, 255, 16, 20, 6, 255, 24, 23, 7, 255, 24, 21, 5, 255, 24, 22, 5, 255, 22, 24, 5, 255, 26, 28, 8, 255, 32, 36, 7, 255, 36, 42, 11, 255, 39, 48, 18, 255, 44, 57, 16, 255, 50, 65, 17, 255, 55, 71, 15, 255, 59, 75, 17, 255, 64, 84, 11, 255, 65, 82, 24, 255, 71, 84, 35, 255, 68, 90, 15, 255, 63, 82, 26, 255, 70, 83, 24, 255, 66, 79, 17, 255, 67, 78, 16, 255, 67, 81, 7, 255, 66, 76, 10, 255, 69, 73, 15, 255, 62, 69, 12, 255, 63, 68, 15, 255, 73, 72, 9, 255, 73, 72, 6, 255, 70, 66, 6, 255, 72, 67, 2, 255, 72, 65, 4, 255, 72, 60, 8, 255, 67, 60, 4, 255, 73, 55, 3, 255, 66, 54, 5, 255, 67, 56, 1, 255, 62, 53, 4, 255, 75, 49, 7, 255, 85, 53, 6, 255, 97, 53, 9, 255, 78, 45, 3, 255, 93, 56, 2, 255, 100, 53, 1, 255, 93, 50, 2, 255, 108, 57, 8, 255, 101, 53, 5, 255, 84, 50, 3, 255, 74, 46, 1, 255, 76, 45, 3, 255, 84, 49, 5, 255, 81, 50, 4, 255, 79, 48, 3, 255, 79, 46, 2, 255, 79, 46, 10, 255, 78, 47, 8, 255, 92, 50, 3, 255, 106, 50, 3, 255, 94, 49, 5, 255, 89, 52, 7, 255, 96, 50, 5, 255, 100, 51, 4, 255, 98, 57, 4, 255, 130, 64, 11, 255, 132, 60, 6, 255, 103, 59, 10, 255, 97, 55, 5, 255, 93, 57, 5, 255, 99, 60, 5, 255, 128, 64, 8, 255, 112, 57, 12, 255, 93, 59, 9, 255, 108, 58, 8, 255, 120, 64, 7, 255, 111, 66, 3, 255, 107, 61, 8, 255, 126, 65, 4, 255, 123, 62, 2, 255, 111, 56, 10, 255, 117, 62, 7, 255, 126, 69, 1, 255, 122, 63, 4, 255, 122, 61, 5, 255, 125, 66, 4, 255, 116, 66, 3, 255, 113, 61, 3, 255, 114, 63, 8, 255, 112, 62, 9, 255, 114, 62, 10, 255, 118, 64, 7, 255, 135, 69, 8, 255, 133, 62, 3, 255, 125, 59, 9, 255, 126, 66, 9, 255, 128, 65, 4, 255, 126, 64, 14, 255, 119, 65, 6, 255, 126, 64, 13, 255, 121, 64, 4, 255, 124, 65, 6, 255, 140, 70, 17, 255, 145, 75, 13, 255, 150, 84, 11, 255, 160, 89, 4, 255, 168, 87, 8, 255, 177, 96, 12, 255, 191, 104, 5, 255, 196, 101, 12, 255, 197, 106, 10, 255, 207, 108, 5, 255, 204, 104, 8, 255, 201, 106, 11, 255, 204, 110, 5, 255, 201, 105, 6, 255, 196, 99, 4, 255, 203, 99, 4, 255, 198, 101, 6, 255, 196, 103, 5, 255, 194, 101, 8, 255, 190, 96, 6, 255, 196, 103, 7, 255, 192, 96, 8, 255, 192, 91, 9, 255, 193, 89, 5, 255, 194, 91, 4, 255, 199, 97, 4, 255, 201, 101, 4, 255, 201, 103, 6, 255, 202, 104, 9, 255, 204, 104, 9, 255, 201, 102, 4, 255, 197, 100, 1, 255, 204, 106, 4, 255, 199, 102, 5, 255, 197, 99, 11, 255, 200, 103, 7, 255, 201, 102, 9, 255, 194, 98, 5, 255, 199, 105, 11, 255, 204, 110, 5, 255, 202, 108, 8, 255, 205, 113, 10, 255, 209, 112, 3, 255, 210, 114, 1, 255, 212, 114, 0, 255, 205, 107, 1, 255, 213, 115, 4, 255, 215, 120, 8, 255, 213, 115, 5, 255, 214, 124, 5, 255, 221, 127, 2, 255, 220, 122, 6, 255, 208, 117, 9, 255, 207, 108, 1, 255, 209, 112, 4, 255, 210, 118, 11, 255, 210, 117, 8, 255, 209, 121, 1, 255, 213, 130, 4, 255, 211, 128, 5, 255, 212, 127, 6, 255, 207, 122, 8, 255, 207, 124, 8, 255, 206, 123, 2, 255, 206, 125, 2, 255, 199, 119, 0, 255, 193, 114, 5, 255, 201, 119, 2, 255, 191, 104, 8, 255, 184, 96, 12, 255, 182, 95, 8, 255, 186, 98, 10, 255, 187, 99, 0, 255, 190, 105, 4, 255, 196, 117, 4, 255, 200, 122, 7, 255, 186, 106, 5, 255, 192, 112, 7, 255, 190, 110, 7, 255, 182, 99, 5, 255, 182, 97, 7, 255, 183, 100, 12, 255, 181, 101, 7, 255, 184, 102, 1, 255, 188, 104, 3, 255, 189, 105, 2, 255, 195, 110, 7, 255, 196, 112, 5, 255, 198, 114, 6, 255, 193, 111, 3, 255, 189, 110, 5, 255, 191, 114, 9, 255, 193, 120, 5, 255, 189, 113, 5, 255, 186, 112, 1, 255, 184, 111, 1, 255, 183, 110, 9, 255, 180, 105, 17, 255, 180, 106, 5, 255, 180, 110, 10, 255, 180, 112, 16, 255, 185, 120, 19, 255, 184, 119, 10, 255, 182, 112, 7, 255, 193, 125, 7, 255, 196, 125, 1, 255, 184, 109, 0, 255, 179, 112, 14, 255, 183, 123, 13, 255, 183, 124, 14, 255, 166, 102, 17, 255, 167, 93, 12, 255, 161, 92, 15, 255, 177, 115, 4, 255, 181, 120, 4, 255, 162, 96, 6, 255, 154, 87, 9, 255, 157, 94, 9, 255, 169, 106, 9, 255, 171, 107, 2, 255, 166, 100, 4, 255, 165, 97, 5, 255, 167, 96, 7, 255, 165, 90, 5, 255, 171, 91, 1, 255, 183, 97, 0, 255, 181, 101, 6, 255, 174, 99, 2, 255, 176, 102, 11, 255, 175, 107, 25, 255, 171, 117, 16, 255, 170, 108, 6, 255, 170, 102, 6, 255, 177, 108, 11, 255, 185, 113, 18, 255, 191, 122, 6, 255, 183, 110, 8, 255, 181, 109, 2, 255, 182, 109, 1, 255, 181, 106, 1, 255, 181, 106, 4, 255, 176, 103, 3, 255, 175, 102, 4, 255, 173, 96, 5, 255, 174, 92, 3, 255, 170, 100, 3, 255, 164, 90, 0, 255, 129, 68, 5, 255, 122, 66, 9, 255, 165, 95, 13, 255, 181, 121, 7, 255, 188, 125, 1, 255, 195, 128, 4, 255, 197, 140, 10, 255, 199, 141, 13, 255, 181, 106, 10, 255, 146, 75, 6, 255, 138, 70, 10, 255, 124, 63, 7, 255, 138, 67, 3, 255, 147, 71, 13, 255, 139, 72, 10, 255, 144, 72, 9, 255, 151, 76, 4, 255, 151, 68, 5, 255, 164, 77, 5, 255, 189, 111, 6, 255, 199, 126, 5, 255, 201, 121, 6, 255, 199, 117, 6, 255, 194, 113, 4, 255, 162, 77, 9, 255, 145, 66, 9, 255, 147, 73, 3, 255, 141, 65, 1, 255, 134, 63, 5, 255, 126, 57, 4, 255, 121, 56, 7, 255, 124, 57, 7, 255, 125, 61, 14, 255, 120, 65, 10, 255, 119, 60, 7, 255, 122, 59, 4, 255, 123, 66, 6, 255, 118, 61, 3, 255, 110, 49, 4, 255, 110, 52, 7, 255, 109, 59, 6, 255, 105, 55, 6, 255, 97, 41, 11, 255, 94, 43, 2, 255, 97, 46, 7, 255, 102, 50, 6, 255, 109, 58, 3, 255, 107, 58, 4, 255, 113, 58, 5, 255, 114, 59, 7, 255, 104, 51, 2, 255, 100, 48, 1, 255, 105, 53, 7, 255, 102, 50, 4, 255, 99, 47, 0, 255, 101, 49, 2, 255, 102, 48, 7, 255, 103, 47, 5, 255, 103, 50, 4, 255, 101, 51, 4, 255, 100, 52, 3, 255, 94, 47, 0, 255, 96, 45, 3, 255, 94, 43, 6, 255, 88, 40, 2, 255, 92, 41, 3, 255, 92, 39, 0, 255, 88, 41, 2, 255, 91, 43, 6, 255, 93, 40, 3, 255, 100, 43, 8, 255, 105, 42, 9, 255, 98, 37, 4, 255, 95, 31, 1, 255, 92, 27, 2, 255, 87, 26, 0, 255, 98, 32, 5, 255, 1, 0, 20, 255, 1, 0, 16, 255, 1, 1, 13, 255, 1, 1, 12, 255, 0, 0, 12, 255, 1, 0, 17, 255, 1, 0, 10, 255, 2, 2, 5, 255, 1, 1, 2, 255, 2, 0, 8, 255, 7, 1, 6, 255, 5, 5, 4, 255, 22, 59, 57, 255, 11, 29, 21, 255, 22, 29, 59, 255, 17, 72, 120, 255, 15, 41, 43, 255, 29, 46, 68, 255, 32, 49, 57, 255, 42, 65, 83, 255, 53, 63, 85, 255, 26, 46, 66, 255, 43, 58, 86, 255, 44, 64, 90, 255, 19, 29, 38, 255, 15, 23, 29, 255, 45, 76, 136, 255, 23, 57, 62, 255, 1, 1, 0, 255, 5, 1, 2, 255, 2, 2, 4, 255, 0, 2, 1, 255, 0, 1, 5, 255, 3, 1, 2, 255, 5, 0, 3, 255, 1, 2, 1, 255, 2, 2, 5, 255, 3, 0, 0, 255, 2, 41, 110, 255, 3, 173, 245, 255, 10, 19, 47, 255, 10, 3, 0, 255, 13, 26, 154, 255, 2, 20, 136, 255, 2, 0, 0, 255, 0, 5, 5, 255, 0, 4, 6, 255, 5, 0, 5, 255, 2, 2, 1, 255, 0, 0, 3, 255, 0, 0, 0, 255, 2, 2, 2, 255, 0, 1, 1, 255, 0, 0, 0, 255, 3, 4, 1, 255, 20, 19, 11, 255, 26, 25, 19, 255, 28, 24, 19, 255, 35, 29, 32, 255, 34, 31, 47, 255, 36, 34, 36, 255, 32, 27, 22, 255, 25, 23, 15, 255, 26, 30, 19, 255, 24, 33, 30, 255, 36, 44, 46, 255, 38, 45, 43, 255, 33, 41, 30, 255, 28, 33, 21, 255, 27, 27, 12, 255, 27, 23, 8, 255, 19, 16, 3, 255, 18, 14, 4, 255, 19, 15, 4, 255, 20, 16, 5, 255, 19, 17, 3, 255, 21, 21, 5, 255, 18, 18, 5, 255, 22, 22, 4, 255, 27, 23, 5, 255, 32, 28, 10, 255, 25, 25, 5, 255, 30, 31, 9, 255, 30, 44, 11, 255, 38, 51, 14, 255, 45, 54, 10, 255, 52, 59, 9, 255, 57, 65, 14, 255, 62, 73, 16, 255, 58, 74, 27, 255, 58, 83, 20, 255, 66, 82, 15, 255, 82, 84, 19, 255, 81, 86, 14, 255, 72, 82, 16, 255, 72, 79, 11, 255, 66, 74, 15, 255, 67, 73, 13, 255, 71, 77, 7, 255, 71, 75, 8, 255, 70, 69, 16, 255, 66, 66, 9, 255, 64, 66, 14, 255, 70, 68, 7, 255, 66, 69, 3, 255, 69, 68, 9, 255, 73, 69, 1, 255, 65, 65, 1, 255, 70, 62, 8, 255, 72, 58, 6, 255, 67, 55, 1, 255, 68, 57, 3, 255, 69, 52, 2, 255, 89, 56, 6, 255, 77, 51, 7, 255, 68, 46, 2, 255, 84, 47, 8, 255, 82, 48, 5, 255, 82, 54, 1, 255, 87, 52, 5, 255, 91, 50, 4, 255, 105, 58, 6, 255, 100, 57, 4, 255, 81, 52, 1, 255, 78, 52, 6, 255, 78, 49, 5, 255, 84, 49, 4, 255, 82, 51, 3, 255, 84, 45, 1, 255, 92, 51, 1, 255, 108, 55, 7, 255, 113, 51, 7, 255, 110, 53, 1, 255, 113, 53, 3, 255, 95, 49, 5, 255, 87, 53, 7, 255, 84, 56, 2, 255, 96, 57, 5, 255, 96, 58, 2, 255, 112, 63, 3, 255, 115, 62, 1, 255, 96, 56, 3, 255, 110, 59, 5, 255, 136, 61, 9, 255, 125, 61, 6, 255, 118, 62, 0, 255, 112, 58, 5, 255, 105, 54, 4, 255, 122, 65, 10, 255, 118, 64, 3, 255, 110, 62, 3, 255, 110, 59, 2, 255, 115, 67, 2, 255, 113, 63, 9, 255, 120, 63, 4, 255, 132, 65, 5, 255, 134, 66, 2, 255, 127, 64, 3, 255, 122, 56, 1, 255, 136, 66, 5, 255, 123, 63, 5, 255, 114, 57, 13, 255, 112, 61, 8, 255, 113, 64, 7, 255, 118, 65, 5, 255, 123, 63, 5, 255, 119, 61, 2, 255, 125, 70, 6, 255, 129, 68, 4, 255, 129, 65, 10, 255, 131, 66, 9, 255, 138, 73, 5, 255, 144, 77, 8, 255, 155, 85, 6, 255, 167, 92, 6, 255, 177, 94, 11, 255, 176, 92, 11, 255, 182, 89, 3, 255, 191, 92, 5, 255, 186, 87, 10, 255, 185, 91, 10, 255, 192, 92, 7, 255, 195, 97, 0, 255, 190, 99, 8, 255, 191, 101, 12, 255, 188, 100, 9, 255, 188, 102, 6, 255, 188, 101, 4, 255, 197, 105, 2, 255, 194, 100, 10, 255, 178, 86, 7, 255, 188, 93, 7, 255, 195, 101, 11, 255, 194, 103, 6, 255, 192, 101, 9, 255, 193, 103, 6, 255, 192, 103, 3, 255, 195, 101, 6, 255, 193, 104, 6, 255, 192, 102, 9, 255, 189, 95, 9, 255, 191, 96, 2, 255, 194, 99, 5, 255, 190, 95, 7, 255, 188, 95, 4, 255, 193, 95, 2, 255, 197, 100, 0, 255, 195, 95, 5, 255, 187, 89, 5, 255, 183, 87, 0, 255, 187, 95, 0, 255, 189, 96, 2, 255, 191, 94, 5, 255, 193, 103, 5, 255, 196, 108, 2, 255, 201, 105, 6, 255, 201, 109, 13, 255, 193, 109, 8, 255, 199, 111, 8, 255, 203, 116, 8, 255, 195, 105, 1, 255, 200, 106, 7, 255, 200, 110, 5, 255, 199, 114, 8, 255, 203, 112, 7, 255, 207, 118, 6, 255, 207, 119, 0, 255, 207, 117, 13, 255, 205, 113, 12, 255, 200, 108, 1, 255, 198, 106, 4, 255, 200, 108, 4, 255, 205, 115, 4, 255, 208, 121, 4, 255, 205, 120, 4, 255, 204, 119, 2, 255, 208, 121, 4, 255, 207, 122, 5, 255, 207, 123, 1, 255, 212, 129, 6, 255, 212, 129, 10, 255, 209, 127, 7, 255, 211, 133, 7, 255, 210, 132, 3, 255, 213, 136, 3, 255, 213, 137, 10, 255, 207, 132, 13, 255, 205, 132, 4, 255, 201, 130, 7, 255, 201, 124, 10, 255, 214, 130, 3, 255, 211, 126, 8, 255, 214, 131, 4, 255, 211, 127, 8, 255, 198, 113, 5, 255, 187, 101, 10, 255, 187, 102, 6, 255, 187, 107, 4, 255, 187, 110, 3, 255, 186, 109, 6, 255, 185, 107, 10, 255, 181, 107, 8, 255, 183, 106, 12, 255, 186, 104, 7, 255, 184, 102, 0, 255, 189, 104, 4, 255, 197, 112, 6, 255, 202, 116, 3, 255, 195, 110, 1, 255, 194, 111, 4, 255, 191, 114, 2, 255, 187, 116, 3, 255, 182, 113, 2, 255, 184, 116, 11, 255, 190, 123, 7, 255, 195, 122, 13, 255, 197, 124, 13, 255, 192, 121, 12, 255, 183, 107, 13, 255, 188, 107, 11, 255, 199, 113, 13, 255, 195, 112, 7, 255, 173, 102, 5, 255, 175, 116, 11, 255, 180, 123, 14, 255, 192, 139, 15, 255, 181, 133, 15, 255, 181, 122, 17, 255, 179, 119, 16, 255, 182, 120, 12, 255, 170, 107, 2, 255, 148, 81, 9, 255, 155, 90, 7, 255, 168, 105, 4, 255, 171, 105, 4, 255, 172, 105, 3, 255, 164, 95, 3, 255, 164, 97, 1, 255, 164, 96, 7, 255, 153, 81, 8, 255, 155, 81, 3, 255, 174, 92, 10, 255, 180, 100, 1, 255, 171, 88, 5, 255, 172, 98, 7, 255, 177, 117, 19, 255, 173, 121, 27, 255, 173, 119, 12, 255, 171, 110, 9, 255, 171, 99, 8, 255, 187, 109, 7, 255, 188, 110, 10, 255, 191, 119, 11, 255, 188, 118, 6, 255, 180, 104, 5, 255, 186, 108, 6, 255, 184, 109, 1, 255, 180, 106, 3, 255, 182, 107, 7, 255, 177, 102, 1, 255, 179, 104, 1, 255, 178, 105, 3, 255, 168, 92, 6, 255, 122, 66, 3, 255, 144, 85, 6, 255, 188, 119, 7, 255, 190, 130, 13, 255, 188, 127, 11, 255, 189, 131, 5, 255, 195, 132, 8, 255, 202, 138, 8, 255, 168, 90, 12, 255, 139, 71, 17, 255, 135, 68, 17, 255, 131, 71, 12, 255, 145, 74, 11, 255, 153, 74, 2, 255, 156, 78, 5, 255, 154, 72, 4, 255, 149, 67, 0, 255, 158, 75, 7, 255, 180, 100, 7, 255, 199, 122, 4, 255, 199, 120, 9, 255, 192, 112, 6, 255, 193, 116, 2, 255, 194, 109, 7, 255, 171, 81, 6, 255, 156, 75, 3, 255, 148, 70, 3, 255, 143, 69, 3, 255, 137, 67, 2, 255, 116, 49, 2, 255, 115, 50, 3, 255, 127, 65, 10, 255, 118, 59, 10, 255, 116, 62, 8, 255, 120, 65, 8, 255, 118, 62, 3, 255, 111, 50, 0, 255, 100, 36, 5, 255, 81, 27, 5, 255, 87, 36, 2, 255, 99, 47, 3, 255, 92, 41, 2, 255, 92, 42, 5, 255, 96, 53, 2, 255, 100, 55, 6, 255, 101, 48, 6, 255, 103, 49, 5, 255, 104, 54, 9, 255, 109, 55, 9, 255, 107, 52, 5, 255, 99, 46, 1, 255, 102, 49, 5, 255, 106, 53, 8, 255, 102, 51, 3, 255, 105, 49, 6, 255, 102, 44, 9, 255, 100, 47, 7, 255, 104, 55, 4, 255, 109, 60, 4, 255, 109, 53, 4, 255, 102, 41, 1, 255, 89, 38, 1, 255, 93, 41, 2, 255, 95, 45, 4, 255, 89, 42, 2, 255, 87, 41, 3, 255, 86, 35, 3, 255, 88, 36, 6, 255, 97, 36, 5, 255, 96, 38, 0, 255, 103, 42, 2, 255, 107, 41, 4, 255, 94, 36, 3, 255, 92, 27, 1, 255, 97, 24, 4, 255, 105, 34, 4, 255, 115, 33, 2, 255, 2, 1, 20, 255, 2, 1, 18, 255, 2, 1, 15, 255, 2, 2, 14, 255, 1, 0, 13, 255, 1, 0, 16, 255, 0, 2, 12, 255, 0, 1, 9, 255, 6, 0, 11, 255, 3, 1, 10, 255, 2, 1, 6, 255, 2, 2, 10, 255, 0, 1, 8, 255, 0, 3, 7, 255, 6, 1, 11, 255, 35, 54, 76, 255, 18, 50, 60, 255, 0, 0, 0, 255, 0, 2, 0, 255, 16, 20, 41, 255, 54, 67, 107, 255, 56, 73, 105, 255, 28, 50, 76, 255, 45, 61, 87, 255, 47, 74, 111, 255, 5, 21, 25, 255, 12, 15, 31, 255, 44, 78, 95, 255, 12, 28, 34, 255, 3, 0, 0, 255, 3, 1, 3, 255, 1, 1, 3, 255, 2, 0, 2, 255, 1, 1, 6, 255, 1, 3, 5, 255, 2, 2, 3, 255, 1, 0, 0, 255, 5, 0, 48, 255, 2, 153, 237, 255, 14, 74, 119, 255, 15, 0, 0, 255, 14, 12, 84, 255, 8, 29, 200, 255, 0, 6, 28, 255, 2, 0, 0, 255, 5, 1, 4, 255, 3, 0, 7, 255, 1, 1, 2, 255, 0, 2, 1, 255, 1, 2, 2, 255, 1, 0, 1, 255, 2, 0, 1, 255, 0, 1, 1, 255, 0, 2, 1, 255, 3, 2, 0, 255, 13, 9, 4, 255, 18, 16, 8, 255, 24, 20, 10, 255, 39, 31, 26, 255, 34, 35, 48, 255, 39, 43, 47, 255, 36, 36, 26, 255, 24, 25, 13, 255, 24, 25, 25, 255, 27, 37, 41, 255, 33, 45, 48, 255, 38, 49, 42, 255, 37, 46, 29, 255, 37, 39, 25, 255, 35, 32, 16, 255, 29, 26, 9, 255, 26, 22, 10, 255, 22, 18, 7, 255, 17, 13, 3, 255, 24, 20, 7, 255, 21, 19, 4, 255, 23, 20, 4, 255, 23, 20, 5, 255, 25, 22, 3, 255, 32, 26, 6, 255, 31, 24, 4, 255, 33, 28, 6, 255, 34, 36, 9, 255, 37, 41, 15, 255, 44, 50, 18, 255, 49, 57, 11, 255, 55, 64, 12, 255, 61, 70, 16, 255, 69, 79, 15, 255, 65, 76, 21, 255, 60, 77, 18, 255, 67, 84, 18, 255, 72, 84, 16, 255, 73, 83, 12, 255, 69, 81, 11, 255, 69, 78, 8, 255, 64, 74, 4, 255, 64, 74, 4, 255, 70, 74, 9, 255, 70, 71, 6, 255, 63, 65, 14, 255, 67, 68, 17, 255, 70, 66, 4, 255, 77, 68, 4, 255, 73, 69, 10, 255, 69, 63, 7, 255, 71, 61, 6, 255, 70, 63, 9, 255, 70, 64, 2, 255, 73, 62, 6, 255, 85, 56, 9, 255, 65, 54, 2, 255, 88, 61, 7, 255, 109, 66, 9, 255, 69, 42, 4, 255, 73, 50, 4, 255, 82, 47, 7, 255, 89, 52, 1, 255, 77, 52, 3, 255, 73, 46, 2, 255, 93, 51, 2, 255, 95, 55, 2, 255, 91, 51, 5, 255, 89, 48, 4, 255, 91, 49, 6, 255, 78, 50, 1, 255, 86, 52, 2, 255, 101, 53, 4, 255, 89, 46, 7, 255, 110, 48, 2, 255, 120, 50, 0, 255, 118, 51, 3, 255, 108, 53, 4, 255, 97, 55, 8, 255, 91, 51, 3, 255, 95, 53, 2, 255, 85, 53, 3, 255, 96, 53, 8, 255, 105, 56, 7, 255, 111, 61, 2, 255, 124, 63, 3, 255, 102, 62, 5, 255, 100, 62, 1, 255, 135, 60, 4, 255, 129, 60, 6, 255, 107, 63, 2, 255, 103, 57, 3, 255, 108, 57, 6, 255, 127, 63, 10, 255, 126, 60, 4, 255, 115, 64, 7, 255, 108, 61, 9, 255, 116, 58, 5, 255, 124, 59, 7, 255, 125, 64, 7, 255, 119, 57, 19, 255, 121, 63, 10, 255, 129, 65, 15, 255, 133, 66, 4, 255, 138, 64, 5, 255, 139, 63, 16, 255, 130, 61, 13, 255, 131, 70, 11, 255, 136, 75, 8, 255, 138, 72, 9, 255, 144, 71, 12, 255, 140, 74, 11, 255, 138, 72, 7, 255, 156, 77, 8, 255, 166, 82, 11, 255, 174, 93, 15, 255, 182, 96, 4, 255, 192, 94, 4, 255, 190, 92, 8, 255, 188, 96, 2, 255, 184, 96, 4, 255, 183, 89, 1, 255, 182, 93, 5, 255, 179, 90, 12, 255, 182, 91, 13, 255, 190, 95, 11, 255, 190, 96, 11, 255, 192, 103, 11, 255, 195, 100, 9, 255, 194, 101, 5, 255, 189, 97, 4, 255, 193, 98, 6, 255, 191, 101, 10, 255, 195, 100, 2, 255, 191, 100, 5, 255, 186, 95, 12, 255, 186, 91, 5, 255, 185, 92, 5, 255, 193, 102, 7, 255, 201, 109, 10, 255, 196, 103, 6, 255, 194, 99, 3, 255, 202, 103, 6, 255, 195, 104, 4, 255, 193, 103, 8, 255, 185, 89, 3, 255, 190, 92, 4, 255, 188, 87, 7, 255, 182, 81, 5, 255, 190, 91, 3, 255, 196, 100, 2, 255, 201, 105, 6, 255, 194, 98, 6, 255, 190, 95, 4, 255, 190, 97, 6, 255, 173, 80, 3, 255, 178, 84, 7, 255, 184, 89, 3, 255, 191, 100, 3, 255, 197, 106, 10, 255, 199, 105, 3, 255, 197, 108, 5, 255, 194, 111, 1, 255, 195, 109, 6, 255, 195, 108, 12, 255, 194, 106, 6, 255, 198, 107, 2, 255, 198, 113, 5, 255, 194, 107, 10, 255, 198, 108, 2, 255, 200, 113, 5, 255, 198, 110, 6, 255, 198, 106, 5, 255, 198, 110, 0, 255, 202, 112, 5, 255, 201, 111, 7, 255, 201, 116, 2, 255, 202, 122, 2, 255, 203, 120, 5, 255, 207, 119, 7, 255, 210, 122, 9, 255, 203, 119, 2, 255, 206, 124, 0, 255, 209, 124, 7, 255, 211, 125, 12, 255, 210, 124, 13, 255, 209, 123, 10, 255, 209, 126, 8, 255, 207, 129, 6, 255, 212, 136, 9, 255, 212, 139, 5, 255, 216, 143, 0, 255, 216, 143, 3, 255, 223, 147, 15, 255, 215, 140, 3, 255, 216, 137, 5, 255, 217, 137, 11, 255, 218, 138, 5, 255, 209, 129, 7, 255, 209, 133, 1, 255, 204, 128, 2, 255, 194, 115, 2, 255, 190, 113, 2, 255, 190, 113, 7, 255, 193, 115, 11, 255, 186, 105, 4, 255, 177, 95, 7, 255, 166, 89, 6, 255, 177, 103, 11, 255, 181, 107, 7, 255, 180, 104, 10, 255, 185, 110, 8, 255, 190, 115, 7, 255, 184, 106, 11, 255, 190, 114, 15, 255, 187, 118, 5, 255, 179, 113, 4, 255, 185, 118, 12, 255, 189, 121, 11, 255, 190, 120, 2, 255, 198, 123, 13, 255, 193, 113, 5, 255, 191, 104, 5, 255, 189, 106, 3, 255, 191, 116, 6, 255, 179, 108, 2, 255, 180, 110, 9, 255, 182, 114, 8, 255, 181, 125, 13, 255, 194, 139, 11, 255, 199, 137, 4, 255, 200, 149, 6, 255, 197, 139, 9, 255, 195, 149, 6, 255, 203, 153, 5, 255, 185, 128, 6, 255, 149, 89, 10, 255, 143, 82, 13, 255, 162, 100, 6, 255, 159, 93, 0, 255, 162, 92, 5, 255, 166, 90, 6, 255, 172, 96, 4, 255, 160, 87, 5, 255, 136, 70, 3, 255, 138, 74, 5, 255, 161, 81, 5, 255, 177, 94, 6, 255, 173, 96, 2, 255, 173, 112, 5, 255, 179, 125, 12, 255, 176, 115, 15, 255, 169, 100, 13, 255, 153, 84, 8, 255, 156, 86, 9, 255, 174, 100, 14, 255, 183, 110, 6, 255, 192, 126, 5, 255, 175, 102, 12, 255, 175, 95, 10, 255, 190, 111, 5, 255, 186, 108, 1, 255, 183, 107, 4, 255, 177, 102, 3, 255, 174, 97, 5, 255, 176, 102, 4, 255, 173, 103, 4, 255, 164, 86, 8, 255, 131, 64, 10, 255, 153, 91, 11, 255, 184, 117, 3, 255, 187, 124, 11, 255, 189, 128, 19, 255, 188, 124, 11, 255, 199, 130, 14, 255, 198, 135, 12, 255, 181, 113, 9, 255, 163, 94, 14, 255, 156, 83, 1, 255, 163, 90, 10, 255, 162, 88, 14, 255, 163, 82, 9, 255, 169, 83, 5, 255, 159, 75, 3, 255, 156, 69, 6, 255, 178, 98, 7, 255, 195, 122, 8, 255, 199, 120, 8, 255, 197, 111, 7, 255, 194, 114, 9, 255, 189, 111, 5, 255, 194, 105, 13, 255, 186, 93, 9, 255, 158, 73, 2, 255, 153, 77, 11, 255, 149, 81, 5, 255, 137, 71, 10, 255, 127, 59, 10, 255, 123, 48, 9, 255, 114, 47, 1, 255, 114, 55, 5, 255, 123, 61, 6, 255, 119, 59, 6, 255, 103, 43, 4, 255, 95, 32, 5, 255, 85, 29, 4, 255, 72, 27, 2, 255, 86, 32, 2, 255, 89, 32, 8, 255, 64, 15, 0, 255, 79, 33, 3, 255, 92, 48, 6, 255, 94, 47, 1, 255, 98, 46, 1, 255, 101, 47, 3, 255, 103, 50, 2, 255, 98, 45, 2, 255, 98, 44, 2, 255, 101, 48, 5, 255, 103, 50, 6, 255, 103, 51, 5, 255, 100, 49, 1, 255, 100, 49, 3, 255, 102, 50, 4, 255, 99, 44, 4, 255, 95, 39, 5, 255, 100, 40, 4, 255, 107, 47, 5, 255, 102, 41, 1, 255, 93, 37, 0, 255, 91, 39, 3, 255, 91, 39, 4, 255, 84, 33, 0, 255, 78, 32, 0, 255, 86, 37, 2, 255, 88, 33, 5, 255, 92, 30, 5, 255, 94, 32, 3, 255, 97, 31, 2, 255, 100, 30, 0, 255, 96, 30, 0, 255, 98, 27, 2, 255, 99, 30, 4, 255, 109, 37, 3, 255, 118, 37, 3, 255, 1, 0, 18, 255, 2, 1, 18, 255, 2, 1, 17, 255, 2, 1, 15, 255, 2, 1, 15, 255, 1, 0, 14, 255, 2, 1, 17, 255, 1, 1, 9, 255, 1, 0, 7, 255, 1, 2, 10, 255, 2, 5, 17, 255, 3, 8, 31, 255, 3, 11, 34, 255, 2, 8, 23, 255, 0, 0, 8, 255, 12, 30, 39, 255, 37, 86, 119, 255, 11, 29, 35, 255, 2, 0, 0, 255, 1, 0, 2, 255, 17, 23, 46, 255, 47, 65, 89, 255, 41, 74, 111, 255, 12, 34, 47, 255, 41, 64, 103, 255, 32, 86, 122, 255, 0, 10, 7, 255, 17, 19, 38, 255, 25, 57, 91, 255, 3, 10, 13, 255, 1, 1, 4, 255, 1, 1, 4, 255, 2, 0, 2, 255, 3, 2, 1, 255, 0, 2, 1, 255, 4, 1, 2, 255, 6, 0, 5, 255, 1, 78, 172, 255, 13, 114, 193, 255, 25, 2, 6, 255, 14, 5, 22, 255, 14, 23, 202, 255, 2, 16, 85, 255, 7, 1, 0, 255, 7, 1, 4, 255, 4, 3, 1, 255, 0, 0, 2, 255, 2, 0, 0, 255, 3, 0, 0, 255, 2, 1, 4, 255, 3, 1, 3, 255, 3, 1, 1, 255, 2, 2, 2, 255, 2, 2, 2, 255, 1, 0, 0, 255, 6, 2, 0, 255, 17, 14, 7, 255, 24, 23, 14, 255, 32, 28, 24, 255, 39, 31, 33, 255, 44, 41, 41, 255, 32, 37, 36, 255, 17, 21, 15, 255, 21, 21, 10, 255, 28, 33, 36, 255, 33, 46, 48, 255, 37, 51, 45, 255, 42, 49, 38, 255, 42, 42, 31, 255, 36, 38, 19, 255, 31, 31, 13, 255, 28, 25, 14, 255, 18, 16, 2, 255, 23, 20, 5, 255, 22, 19, 4, 255, 25, 22, 7, 255, 24, 20, 5, 255, 24, 21, 2, 255, 27, 24, 3, 255, 36, 31, 7, 255, 37, 29, 6, 255, 37, 33, 6, 255, 37, 40, 8, 255, 42, 48, 8, 255, 47, 52, 13, 255, 53, 61, 13, 255, 57, 67, 15, 255, 60, 73, 14, 255, 60, 74, 14, 255, 62, 77, 14, 255, 69, 80, 20, 255, 65, 79, 14, 255, 66, 86, 13, 255, 65, 79, 15, 255, 67, 77, 8, 255, 64, 74, 7, 255, 65, 77, 7, 255, 63, 75, 5, 255, 68, 70, 14, 255, 68, 65, 11, 255, 62, 67, 3, 255, 66, 67, 4, 255, 77, 66, 5, 255, 74, 64, 5, 255, 70, 62, 4, 255, 72, 62, 7, 255, 74, 61, 7, 255, 79, 63, 4, 255, 79, 63, 3, 255, 77, 55, 6, 255, 72, 54, 3, 255, 78, 59, 7, 255, 122, 70, 13, 255, 80, 44, 2, 255, 69, 50, 6, 255, 87, 54, 4, 255, 93, 54, 3, 255, 80, 48, 1, 255, 79, 51, 5, 255, 85, 50, 5, 255, 96, 57, 3, 255, 99, 57, 8, 255, 96, 53, 9, 255, 88, 51, 4, 255, 109, 51, 9, 255, 99, 47, 2, 255, 103, 56, 8, 255, 111, 51, 7, 255, 88, 47, 3, 255, 91, 54, 6, 255, 97, 48, 6, 255, 98, 50, 5, 255, 100, 55, 1, 255, 103, 53, 5, 255, 106, 54, 8, 255, 104, 53, 9, 255, 105, 50, 11, 255, 111, 54, 5, 255, 120, 63, 5, 255, 120, 66, 5, 255, 125, 61, 6, 255, 115, 55, 7, 255, 115, 60, 4, 255, 120, 61, 3, 255, 114, 56, 11, 255, 107, 59, 11, 255, 101, 57, 4, 255, 110, 60, 3, 255, 111, 56, 3, 255, 109, 59, 17, 255, 103, 62, 7, 255, 114, 65, 5, 255, 134, 68, 12, 255, 145, 71, 16, 255, 159, 84, 9, 255, 163, 92, 13, 255, 170, 91, 7, 255, 177, 88, 14, 255, 184, 96, 6, 255, 176, 90, 20, 255, 184, 95, 13, 255, 182, 101, 3, 255, 180, 103, 7, 255, 182, 101, 11, 255, 194, 109, 5, 255, 189, 100, 15, 255, 179, 89, 8, 255, 162, 77, 3, 255, 177, 95, 8, 255, 192, 102, 1, 255, 191, 99, 5, 255, 191, 100, 10, 255, 190, 96, 7, 255, 188, 93, 7, 255, 188, 99, 11, 255, 193, 101, 13, 255, 194, 101, 5, 255, 198, 100, 3, 255, 193, 100, 13, 255, 198, 103, 12, 255, 195, 95, 5, 255, 190, 93, 6, 255, 196, 102, 7, 255, 193, 95, 4, 255, 195, 98, 2, 255, 199, 103, 4, 255, 196, 102, 6, 255, 190, 101, 4, 255, 188, 95, 2, 255, 191, 97, 13, 255, 196, 102, 10, 255, 196, 99, 2, 255, 189, 94, 3, 255, 192, 96, 8, 255, 196, 100, 2, 255, 197, 99, 4, 255, 199, 101, 8, 255, 198, 97, 14, 255, 188, 92, 4, 255, 191, 97, 7, 255, 187, 91, 5, 255, 184, 89, 7, 255, 177, 81, 2, 255, 186, 91, 4, 255, 197, 103, 6, 255, 197, 100, 5, 255, 191, 93, 7, 255, 179, 82, 5, 255, 190, 95, 8, 255, 193, 100, 5, 255, 177, 82, 10, 255, 179, 87, 9, 255, 185, 90, 11, 255, 192, 96, 6, 255, 191, 95, 7, 255, 195, 102, 9, 255, 195, 105, 10, 255, 200, 104, 0, 255, 192, 100, 2, 255, 195, 104, 4, 255, 198, 104, 3, 255, 198, 107, 7, 255, 197, 105, 3, 255, 193, 104, 5, 255, 200, 105, 8, 255, 195, 110, 1, 255, 198, 108, 8, 255, 202, 105, 11, 255, 196, 108, 0, 255, 199, 111, 5, 255, 201, 110, 10, 255, 197, 113, 2, 255, 200, 117, 2, 255, 202, 117, 5, 255, 205, 115, 2, 255, 206, 120, 1, 255, 204, 120, 4, 255, 206, 120, 6, 255, 208, 124, 9, 255, 206, 125, 5, 255, 205, 125, 2, 255, 205, 132, 2, 255, 206, 136, 1, 255, 211, 131, 2, 255, 211, 128, 10, 255, 212, 131, 9, 255, 214, 138, 8, 255, 212, 139, 5, 255, 212, 139, 4, 255, 208, 133, 4, 255, 211, 139, 4, 255, 211, 139, 2, 255, 209, 134, 5, 255, 220, 149, 3, 255, 224, 157, 1, 255, 220, 155, 0, 255, 217, 151, 11, 255, 212, 147, 12, 255, 205, 142, 6, 255, 201, 134, 4, 255, 192, 121, 8, 255, 181, 111, 3, 255, 180, 116, 1, 255, 180, 120, 6, 255, 188, 128, 10, 255, 191, 130, 10, 255, 182, 118, 4, 255, 181, 115, 4, 255, 178, 111, 10, 255, 177, 115, 12, 255, 172, 111, 6, 255, 168, 105, 12, 255, 181, 117, 14, 255, 182, 115, 4, 255, 181, 108, 10, 255, 184, 110, 12, 255, 184, 111, 13, 255, 187, 116, 11, 255, 184, 111, 5, 255, 182, 115, 8, 255, 184, 132, 9, 255, 200, 158, 5, 255, 209, 160, 10, 255, 203, 145, 9, 255, 201, 142, 9, 255, 199, 137, 12, 255, 203, 140, 10, 255, 214, 154, 11, 255, 222, 165, 9, 255, 210, 152, 5, 255, 199, 142, 9, 255, 169, 109, 5, 255, 141, 73, 5, 255, 151, 80, 3, 255, 150, 82, 3, 255, 159, 91, 5, 255, 168, 98, 8, 255, 170, 98, 7, 255, 170, 105, 4, 255, 169, 110, 7, 255, 163, 102, 10, 255, 170, 94, 2, 255, 172, 94, 5, 255, 181, 111, 11, 255, 180, 122, 15, 255, 169, 111, 24, 255, 159, 94, 22, 255, 153, 90, 21, 255, 140, 79, 2, 255, 148, 82, 7, 255, 169, 96, 12, 255, 188, 109, 15, 255, 190, 114, 13, 255, 179, 106, 7, 255, 174, 96, 12, 255, 182, 103, 7, 255, 180, 102, 4, 255, 175, 101, 1, 255, 171, 97, 1, 255, 175, 99, 9, 255, 182, 102, 10, 255, 168, 88, 3, 255, 156, 91, 4, 255, 153, 97, 12, 255, 167, 99, 7, 255, 179, 111, 3, 255, 190, 135, 6, 255, 190, 133, 9, 255, 191, 122, 17, 255, 184, 113, 18, 255, 182, 108, 10, 255, 184, 105, 3, 255, 171, 95, 6, 255, 169, 94, 8, 255, 175, 94, 14, 255, 164, 85, 9, 255, 157, 78, 4, 255, 164, 80, 4, 255, 158, 74, 1, 255, 168, 84, 2, 255, 193, 112, 9, 255, 198, 120, 9, 255, 195, 114, 11, 255, 195, 113, 6, 255, 195, 115, 3, 255, 193, 112, 4, 255, 196, 109, 5, 255, 185, 94, 2, 255, 156, 72, 2, 255, 141, 64, 3, 255, 132, 59, 5, 255, 130, 61, 4, 255, 132, 64, 3, 255, 136, 65, 8, 255, 119, 50, 1, 255, 105, 39, 4, 255, 110, 47, 4, 255, 105, 40, 5, 255, 97, 34, 5, 255, 88, 32, 5, 255, 82, 32, 6, 255, 87, 31, 8, 255, 84, 23, 7, 255, 73, 21, 4, 255, 69, 27, 3, 255, 90, 46, 7, 255, 97, 50, 4, 255, 97, 45, 6, 255, 101, 49, 9, 255, 101, 52, 3, 255, 97, 45, 6, 255, 95, 44, 3, 255, 100, 49, 5, 255, 102, 51, 5, 255, 100, 48, 1, 255, 99, 46, 3, 255, 98, 46, 5, 255, 98, 47, 3, 255, 96, 48, 2, 255, 98, 42, 7, 255, 94, 36, 1, 255, 98, 39, 3, 255, 94, 35, 4, 255, 92, 36, 2, 255, 94, 36, 4, 255, 87, 33, 3, 255, 85, 30, 3, 255, 86, 33, 4, 255, 86, 37, 5, 255, 89, 34, 1, 255, 88, 27, 0, 255, 83, 26, 1, 255, 84, 21, 3, 255, 86, 20, 5, 255, 91, 24, 5, 255, 100, 27, 0, 255, 102, 31, 1, 255, 109, 34, 6, 255, 113, 32, 1, 255, 117, 38, 2, 255, 2, 1, 18, 255, 2, 1, 22, 255, 2, 1, 20, 255, 2, 1, 13, 255, 2, 2, 14, 255, 2, 2, 15, 255, 1, 1, 18, 255, 3, 0, 13, 255, 4, 0, 9, 255, 2, 2, 22, 255, 5, 15, 34, 255, 2, 13, 27, 255, 4, 12, 35, 255, 2, 8, 28, 255, 6, 7, 26, 255, 1, 8, 15, 255, 2, 38, 56, 255, 16, 52, 59, 255, 5, 8, 7, 255, 0, 1, 0, 255, 0, 0, 0, 255, 6, 2, 8, 255, 47, 65, 104, 255, 35, 73, 103, 255, 21, 30, 58, 255, 44, 89, 130, 255, 6, 26, 25, 255, 1, 0, 0, 255, 4, 8, 19, 255, 4, 6, 12, 255, 4, 1, 0, 255, 1, 2, 0, 255, 0, 2, 1, 255, 1, 0, 1, 255, 2, 2, 6, 255, 2, 0, 0, 255, 1, 34, 100, 255, 4, 134, 244, 255, 14, 27, 54, 255, 19, 2, 0, 255, 4, 21, 134, 255, 5, 20, 161, 255, 5, 0, 0, 255, 3, 2, 3, 255, 1, 0, 2, 255, 3, 3, 4, 255, 0, 2, 1, 255, 2, 1, 0, 255, 0, 2, 1, 255, 0, 2, 1, 255, 3, 1, 1, 255, 2, 2, 2, 255, 2, 1, 1, 255, 6, 1, 2, 255, 3, 0, 1, 255, 1, 0, 0, 255, 12, 8, 4, 255, 26, 19, 13, 255, 29, 23, 17, 255, 32, 26, 23, 255, 40, 37, 33, 255, 38, 38, 37, 255, 27, 28, 25, 255, 20, 22, 8, 255, 27, 32, 30, 255, 34, 49, 50, 255, 37, 52, 52, 255, 45, 51, 47, 255, 37, 38, 31, 255, 23, 32, 12, 255, 32, 35, 18, 255, 31, 28, 14, 255, 22, 21, 8, 255, 20, 19, 5, 255, 24, 22, 5, 255, 27, 26, 8, 255, 24, 23, 8, 255, 27, 24, 7, 255, 26, 26, 2, 255, 29, 28, 1, 255, 39, 35, 6, 255, 39, 35, 3, 255, 46, 48, 15, 255, 45, 56, 15, 255, 44, 58, 11, 255, 55, 66, 10, 255, 58, 67, 15, 255, 61, 70, 14, 255, 62, 74, 15, 255, 60, 79, 17, 255, 65, 80, 14, 255, 68, 82, 6, 255, 68, 83, 11, 255, 70, 77, 10, 255, 71, 73, 4, 255, 67, 75, 4, 255, 63, 71, 8, 255, 63, 69, 11, 255, 66, 64, 8, 255, 70, 65, 12, 255, 65, 66, 9, 255, 66, 59, 11, 255, 74, 62, 15, 255, 73, 66, 4, 255, 75, 67, 1, 255, 75, 63, 4, 255, 76, 63, 3, 255, 79, 64, 2, 255, 79, 61, 15, 255, 77, 49, 7, 255, 76, 61, 7, 255, 128, 69, 7, 255, 90, 53, 6, 255, 66, 50, 4, 255, 82, 54, 3, 255, 100, 59, 1, 255, 106, 58, 3, 255, 84, 55, 3, 255, 88, 48, 1, 255, 111, 61, 6, 255, 95, 54, 2, 255, 98, 56, 2, 255, 91, 54, 3, 255, 82, 56, 1, 255, 108, 56, 10, 255, 95, 46, 2, 255, 91, 50, 6, 255, 90, 45, 4, 255, 93, 46, 5, 255, 109, 52, 8, 255, 99, 50, 3, 255, 93, 53, 3, 255, 101, 57, 5, 255, 109, 54, 1, 255, 102, 54, 3, 255, 88, 51, 1, 255, 114, 59, 8, 255, 129, 64, 5, 255, 127, 60, 1, 255, 115, 59, 4, 255, 115, 63, 18, 255, 130, 62, 1, 255, 128, 64, 4, 255, 104, 59, 1, 255, 106, 59, 6, 255, 114, 58, 6, 255, 107, 60, 8, 255, 113, 66, 10, 255, 125, 68, 7, 255, 140, 78, 10, 255, 161, 95, 6, 255, 176, 97, 8, 255, 182, 96, 7, 255, 189, 99, 12, 255, 190, 100, 5, 255, 194, 98, 7, 255, 195, 97, 4, 255, 193, 98, 7, 255, 189, 101, 0, 255, 190, 102, 12, 255, 188, 98, 6, 255, 188, 99, 8, 255, 185, 99, 8, 255, 194, 103, 14, 255, 197, 105, 5, 255, 193, 97, 7, 255, 180, 80, 14, 255, 186, 93, 11, 255, 189, 99, 4, 255, 194, 98, 11, 255, 196, 100, 9, 255, 195, 101, 9, 255, 195, 98, 5, 255, 194, 96, 7, 255, 195, 98, 5, 255, 192, 96, 5, 255, 194, 95, 8, 255, 190, 91, 1, 255, 192, 89, 0, 255, 189, 88, 8, 255, 188, 87, 9, 255, 187, 88, 5, 255, 184, 95, 0, 255, 187, 90, 8, 255, 192, 92, 11, 255, 190, 89, 5, 255, 188, 86, 12, 255, 186, 89, 16, 255, 183, 82, 8, 255, 184, 85, 13, 255, 181, 91, 4, 255, 193, 97, 12, 255, 193, 96, 8, 255, 192, 99, 8, 255, 193, 98, 5, 255, 196, 101, 3, 255, 190, 96, 4, 255, 173, 77, 3, 255, 178, 77, 1, 255, 184, 86, 1, 255, 184, 87, 5, 255, 177, 80, 4, 255, 174, 77, 8, 255, 186, 90, 9, 255, 194, 99, 6, 255, 200, 102, 8, 255, 191, 96, 6, 255, 184, 90, 8, 255, 197, 104, 13, 255, 194, 102, 0, 255, 195, 102, 6, 255, 194, 102, 5, 255, 196, 103, 2, 255, 197, 100, 7, 255, 184, 84, 5, 255, 191, 98, 8, 255, 198, 108, 9, 255, 198, 101, 2, 255, 197, 101, 8, 255, 195, 101, 7, 255, 194, 103, 5, 255, 197, 102, 8, 255, 195, 104, 5, 255, 196, 106, 8, 255, 197, 106, 8, 255, 192, 103, 8, 255, 193, 107, 1, 255, 197, 107, 6, 255, 196, 108, 3, 255, 197, 111, 2, 255, 196, 107, 10, 255, 196, 107, 3, 255, 198, 110, 6, 255, 199, 109, 13, 255, 200, 111, 8, 255, 199, 113, 2, 255, 199, 113, 11, 255, 199, 112, 15, 255, 202, 116, 5, 255, 207, 121, 4, 255, 207, 122, 5, 255, 205, 122, 6, 255, 203, 122, 4, 255, 202, 121, 6, 255, 208, 129, 2, 255, 209, 134, 0, 255, 208, 134, 2, 255, 208, 132, 5, 255, 209, 134, 11, 255, 213, 140, 6, 255, 215, 143, 4, 255, 213, 140, 3, 255, 212, 141, 7, 255, 221, 152, 4, 255, 220, 151, 3, 255, 223, 154, 7, 255, 223, 154, 2, 255, 224, 159, 0, 255, 224, 161, 0, 255, 223, 162, 3, 255, 221, 161, 4, 255, 216, 161, 3, 255, 214, 156, 4, 255, 213, 151, 11, 255, 213, 155, 8, 255, 211, 156, 0, 255, 212, 157, 6, 255, 212, 156, 3, 255, 212, 157, 0, 255, 217, 163, 3, 255, 215, 159, 11, 255, 210, 155, 8, 255, 200, 147, 4, 255, 199, 141, 11, 255, 200, 142, 8, 255, 199, 141, 13, 255, 202, 142, 17, 255, 200, 140, 20, 255, 198, 146, 13, 255, 212, 162, 9, 255, 216, 164, 9, 255, 208, 145, 4, 255, 203, 126, 0, 255, 201, 136, 5, 255, 203, 152, 3, 255, 208, 146, 10, 255, 212, 154, 9, 255, 217, 166, 1, 255, 232, 177, 1, 255, 215, 152, 9, 255, 190, 127, 11, 255, 177, 121, 6, 255, 157, 101, 3, 255, 164, 100, 6, 255, 187, 112, 9, 255, 193, 120, 5, 255, 187, 122, 1, 255, 189, 125, 12, 255, 189, 124, 8, 255, 189, 119, 2, 255, 188, 114, 12, 255, 183, 113, 2, 255, 181, 110, 4, 255, 182, 112, 7, 255, 179, 113, 6, 255, 180, 120, 23, 255, 175, 121, 26, 255, 154, 94, 11, 255, 137, 77, 8, 255, 143, 84, 7, 255, 171, 102, 10, 255, 183, 107, 3, 255, 183, 105, 13, 255, 178, 105, 12, 255, 173, 102, 0, 255, 175, 101, 1, 255, 172, 94, 10, 255, 159, 82, 4, 255, 165, 89, 5, 255, 164, 89, 3, 255, 165, 86, 2, 255, 150, 83, 4, 255, 170, 105, 5, 255, 192, 123, 6, 255, 184, 127, 2, 255, 187, 131, 14, 255, 184, 116, 10, 255, 178, 108, 7, 255, 171, 97, 7, 255, 170, 98, 20, 255, 175, 93, 8, 255, 168, 82, 11, 255, 162, 91, 17, 255, 166, 94, 13, 255, 163, 86, 9, 255, 161, 81, 5, 255, 158, 78, 4, 255, 155, 73, 4, 255, 175, 88, 5, 255, 191, 110, 3, 255, 199, 118, 11, 255, 196, 113, 5, 255, 193, 115, 1, 255, 194, 115, 7, 255, 191, 108, 9, 255, 191, 106, 6, 255, 193, 108, 6, 255, 179, 87, 2, 255, 153, 70, 7, 255, 139, 64, 5, 255, 137, 65, 1, 255, 133, 63, 0, 255, 120, 52, 4, 255, 114, 47, 13, 255, 102, 35, 3, 255, 92, 25, 0, 255, 95, 34, 5, 255, 94, 32, 5, 255, 89, 29, 2, 255, 85, 34, 2, 255, 97, 42, 3, 255, 104, 39, 2, 255, 89, 32, 4, 255, 76, 30, 5, 255, 87, 42, 5, 255, 104, 60, 3, 255, 106, 56, 2, 255, 111, 58, 5, 255, 109, 61, 2, 255, 101, 57, 2, 255, 101, 52, 3, 255, 102, 53, 6, 255, 96, 48, 2, 255, 96, 49, 2, 255, 96, 47, 1, 255, 97, 43, 2, 255, 101, 43, 6, 255, 97, 40, 6, 255, 95, 40, 4, 255, 93, 41, 1, 255, 92, 39, 2, 255, 93, 38, 2, 255, 94, 39, 2, 255, 95, 38, 2, 255, 94, 35, 4, 255, 88, 34, 3, 255, 92, 35, 5, 255, 87, 29, 3, 255, 79, 23, 2, 255, 82, 19, 2, 255, 89, 19, 3, 255, 90, 26, 4, 255, 94, 29, 1, 255, 95, 31, 1, 255, 95, 33, 2, 255, 100, 32, 1, 255, 100, 35, 2, 255, 111, 34, 3, 255, 113, 31, 1, 255, 115, 38, 4, 255, 4, 1, 24, 255, 0, 1, 25, 255, 1, 2, 18, 255, 3, 0, 10, 255, 1, 1, 17, 255, 1, 2, 21, 255, 0, 0, 15, 255, 2, 0, 10, 255, 3, 0, 12, 255, 3, 6, 29, 255, 4, 11, 30, 255, 1, 7, 17, 255, 2, 11, 37, 255, 2, 10, 35, 255, 1, 10, 30, 255, 2, 11, 23, 255, 0, 6, 15, 255, 4, 10, 17, 255, 3, 8, 7, 255, 0, 0, 1, 255, 1, 0, 1, 255, 0, 0, 0, 255, 20, 20, 40, 255, 47, 82, 115, 255, 7, 22, 16, 255, 25, 53, 81, 255, 16, 34, 37, 255, 0, 0, 0, 255, 0, 2, 3, 255, 0, 0, 0, 255, 1, 0, 4, 255, 1, 2, 2, 255, 1, 1, 0, 255, 1, 0, 7, 255, 1, 1, 1, 255, 7, 3, 29, 255, 4, 110, 230, 255, 17, 73, 120, 255, 15, 0, 0, 255, 13, 11, 69, 255, 2, 28, 203, 255, 3, 6, 22, 255, 1, 1, 0, 255, 2, 1, 2, 255, 3, 1, 2, 255, 1, 1, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 2, 0, 255, 1, 1, 1, 255, 5, 2, 3, 255, 6, 1, 2, 255, 6, 1, 1, 255, 8, 4, 1, 255, 17, 12, 7, 255, 18, 12, 3, 255, 20, 16, 4, 255, 30, 27, 18, 255, 38, 36, 33, 255, 33, 32, 29, 255, 27, 30, 23, 255, 30, 37, 33, 255, 32, 45, 40, 255, 35, 49, 50, 255, 43, 49, 45, 255, 40, 42, 31, 255, 31, 38, 31, 255, 38, 34, 21, 255, 39, 31, 9, 255, 25, 21, 12, 255, 22, 19, 6, 255, 27, 21, 0, 255, 27, 21, 7, 255, 26, 23, 11, 255, 27, 25, 6, 255, 31, 31, 3, 255, 28, 32, 6, 255, 36, 37, 6, 255, 45, 42, 10, 255, 43, 48, 13, 255, 56, 57, 12, 255, 52, 60, 13, 255, 55, 68, 12, 255, 56, 69, 12, 255, 61, 71, 10, 255, 63, 75, 7, 255, 65, 78, 16, 255, 70, 76, 11, 255, 77, 84, 3, 255, 71, 78, 7, 255, 67, 72, 6, 255, 68, 72, 4, 255, 65, 72, 7, 255, 67, 68, 8, 255, 70, 66, 5, 255, 78, 68, 5, 255, 78, 66, 4, 255, 68, 62, 3, 255, 69, 62, 7, 255, 72, 63, 7, 255, 79, 62, 7, 255, 79, 62, 6, 255, 77, 60, 4, 255, 74, 64, 5, 255, 75, 63, 2, 255, 93, 59, 5, 255, 88, 59, 11, 255, 136, 78, 8, 255, 113, 61, 2, 255, 62, 50, 9, 255, 76, 57, 3, 255, 85, 55, 3, 255, 90, 56, 5, 255, 90, 45, 4, 255, 81, 52, 4, 255, 96, 55, 2, 255, 104, 52, 2, 255, 91, 53, 8, 255, 94, 54, 2, 255, 108, 56, 4, 255, 100, 53, 3, 255, 92, 50, 2, 255, 85, 51, 2, 255, 86, 52, 4, 255, 84, 48, 3, 255, 96, 54, 2, 255, 101, 52, 5, 255, 103, 51, 6, 255, 103, 52, 1, 255, 110, 56, 5, 255, 111, 57, 1, 255, 103, 53, 5, 255, 106, 57, 8, 255, 113, 62, 4, 255, 119, 64, 9, 255, 118, 59, 6, 255, 113, 63, 5, 255, 101, 60, 6, 255, 108, 55, 5, 255, 116, 61, 1, 255, 118, 61, 7, 255, 132, 69, 11, 255, 146, 79, 6, 255, 163, 89, 13, 255, 179, 97, 16, 255, 190, 102, 18, 255, 195, 104, 10, 255, 195, 108, 9, 255, 192, 103, 7, 255, 191, 101, 3, 255, 189, 96, 4, 255, 183, 87, 6, 255, 181, 95, 8, 255, 193, 102, 1, 255, 194, 98, 10, 255, 191, 101, 7, 255, 193, 102, 6, 255, 189, 100, 9, 255, 186, 95, 1, 255, 192, 97, 11, 255, 193, 103, 7, 255, 193, 104, 9, 255, 196, 102, 9, 255, 192, 104, 6, 255, 197, 102, 8, 255, 190, 96, 1, 255, 190, 102, 6, 255, 197, 98, 10, 255, 188, 85, 2, 255, 185, 92, 12, 255, 186, 90, 11, 255, 185, 94, 7, 255, 189, 93, 3, 255, 192, 87, 7, 255, 190, 86, 5, 255, 184, 87, 4, 255, 178, 80, 8, 255, 183, 83, 7, 255, 187, 86, 4, 255, 183, 86, 5, 255, 183, 90, 5, 255, 188, 90, 10, 255, 182, 78, 6, 255, 177, 81, 10, 255, 169, 78, 13, 255, 171, 72, 8, 255, 172, 78, 6, 255, 176, 86, 8, 255, 185, 86, 5, 255, 186, 88, 10, 255, 189, 94, 12, 255, 190, 98, 3, 255, 194, 101, 11, 255, 189, 92, 1, 255, 181, 85, 2, 255, 187, 89, 6, 255, 180, 83, 3, 255, 179, 86, 3, 255, 180, 87, 4, 255, 177, 84, 5, 255, 185, 88, 6, 255, 200, 100, 2, 255, 196, 100, 1, 255, 194, 101, 6, 255, 189, 98, 1, 255, 188, 92, 2, 255, 199, 103, 7, 255, 198, 103, 4, 255, 200, 103, 6, 255, 196, 100, 2, 255, 184, 89, 9, 255, 183, 87, 19, 255, 192, 102, 4, 255, 194, 106, 4, 255, 194, 103, 1, 255, 196, 104, 6, 255, 192, 99, 6, 255, 193, 102, 4, 255, 193, 103, 6, 255, 193, 102, 4, 255, 196, 109, 4, 255, 193, 107, 3, 255, 190, 102, 4, 255, 193, 102, 5, 255, 196, 104, 8, 255, 196, 107, 8, 255, 198, 109, 5, 255, 197, 108, 11, 255, 195, 108, 3, 255, 200, 111, 7, 255, 200, 110, 11, 255, 200, 112, 6, 255, 200, 112, 4, 255, 202, 112, 6, 255, 200, 111, 6, 255, 200, 114, 8, 255, 202, 115, 9, 255, 202, 119, 3, 255, 201, 116, 4, 255, 201, 117, 8, 255, 205, 120, 7, 255, 208, 124, 7, 255, 208, 126, 6, 255, 206, 126, 7, 255, 208, 128, 8, 255, 208, 132, 7, 255, 209, 134, 2, 255, 209, 136, 5, 255, 211, 138, 5, 255, 214, 147, 3, 255, 213, 146, 2, 255, 215, 148, 1, 255, 218, 151, 2, 255, 220, 151, 2, 255, 216, 147, 2, 255, 217, 147, 3, 255, 221, 153, 1, 255, 227, 162, 1, 255, 228, 164, 2, 255, 224, 165, 3, 255, 222, 164, 2, 255, 222, 158, 1, 255, 214, 149, 1, 255, 215, 154, 4, 255, 221, 159, 1, 255, 225, 161, 1, 255, 230, 167, 4, 255, 225, 158, 0, 255, 212, 144, 1, 255, 204, 143, 4, 255, 208, 153, 4, 255, 214, 156, 4, 255, 215, 157, 6, 255, 215, 155, 6, 255, 212, 152, 7, 255, 214, 158, 6, 255, 215, 150, 4, 255, 209, 139, 7, 255, 207, 141, 5, 255, 204, 141, 4, 255, 210, 153, 4, 255, 218, 161, 6, 255, 223, 165, 6, 255, 222, 168, 3, 255, 224, 174, 2, 255, 219, 165, 8, 255, 203, 142, 10, 255, 195, 133, 1, 255, 186, 129, 1, 255, 200, 145, 10, 255, 197, 139, 7, 255, 190, 120, 9, 255, 173, 97, 6, 255, 176, 104, 2, 255, 189, 118, 1, 255, 185, 109, 4, 255, 177, 97, 3, 255, 181, 105, 4, 255, 173, 97, 7, 255, 170, 95, 2, 255, 179, 108, 0, 255, 190, 120, 3, 255, 193, 126, 9, 255, 178, 113, 15, 255, 160, 100, 22, 255, 142, 89, 12, 255, 150, 97, 11, 255, 165, 96, 10, 255, 176, 97, 7, 255, 170, 98, 12, 255, 161, 95, 9, 255, 158, 86, 1, 255, 157, 83, 2, 255, 163, 86, 7, 255, 161, 84, 2, 255, 163, 88, 2, 255, 166, 93, 5, 255, 159, 91, 3, 255, 142, 74, 4, 255, 143, 73, 1, 255, 173, 104, 9, 255, 196, 135, 1, 255, 195, 134, 6, 255, 176, 102, 5, 255, 168, 90, 7, 255, 168, 97, 12, 255, 174, 100, 15, 255, 170, 94, 6, 255, 161, 82, 10, 255, 165, 87, 10, 255, 163, 83, 10, 255, 159, 78, 8, 255, 161, 78, 10, 255, 167, 83, 3, 255, 174, 90, 8, 255, 193, 112, 6, 255, 202, 121, 2, 255, 197, 116, 7, 255, 193, 113, 8, 255, 191, 114, 3, 255, 192, 112, 3, 255, 192, 109, 7, 255, 189, 107, 7, 255, 188, 101, 5, 255, 170, 75, 3, 255, 147, 61, 7, 255, 139, 68, 5, 255, 137, 67, 4, 255, 135, 64, 4, 255, 128, 57, 5, 255, 122, 55, 3, 255, 111, 48, 5, 255, 104, 41, 7, 255, 95, 33, 6, 255, 92, 32, 5, 255, 90, 37, 4, 255, 89, 37, 1, 255, 102, 46, 8, 255, 101, 45, 3, 255, 96, 38, 4, 255, 88, 35, 3, 255, 91, 39, 1, 255, 109, 55, 3, 255, 117, 63, 8, 255, 118, 62, 5, 255, 120, 68, 3, 255, 111, 59, 6, 255, 115, 56, 5, 255, 111, 57, 3, 255, 107, 55, 3, 255, 106, 50, 4, 255, 108, 50, 3, 255, 110, 51, 4, 255, 106, 48, 5, 255, 105, 49, 8, 255, 99, 41, 4, 255, 93, 35, 7, 255, 96, 36, 5, 255, 100, 39, 1, 255, 100, 36, 1, 255, 100, 31, 7, 255, 96, 24, 2, 255, 88, 26, 5, 255, 88, 28, 4, 255, 85, 24, 2, 255, 85, 26, 7, 255, 93, 29, 3, 255, 102, 35, 1, 255, 109, 40, 2, 255, 112, 40, 4, 255, 111, 38, 4, 255, 107, 34, 0, 255, 111, 38, 2, 255, 110, 38, 3, 255, 110, 35, 3, 255, 109, 36, 2, 255, 109, 38, 3, 255, 1, 3, 19, 255, 1, 0, 17, 255, 1, 0, 21, 255, 1, 2, 23, 255, 0, 1, 20, 255, 1, 0, 16, 255, 3, 1, 13, 255, 3, 3, 18, 255, 1, 8, 30, 255, 1, 13, 36, 255, 2, 11, 31, 255, 4, 12, 26, 255, 2, 14, 36, 255, 0, 11, 40, 255, 0, 8, 28, 255, 2, 16, 35, 255, 0, 12, 18, 255, 1, 3, 0, 255, 1, 0, 1, 255, 1, 0, 1, 255, 1, 2, 1, 255, 0, 2, 1, 255, 0, 0, 0, 255, 28, 58, 93, 255, 11, 35, 36, 255, 17, 29, 51, 255, 16, 27, 37, 255, 0, 0, 0, 255, 0, 0, 7, 255, 1, 1, 0, 255, 0, 1, 4, 255, 3, 2, 5, 255, 6, 0, 2, 255, 2, 1, 4, 255, 1, 0, 0, 255, 3, 49, 181, 255, 6, 95, 182, 255, 15, 8, 0, 255, 20, 1, 18, 255, 8, 23, 194, 255, 0, 13, 66, 255, 1, 0, 0, 255, 2, 1, 5, 255, 0, 0, 0, 255, 2, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 4, 1, 0, 255, 8, 2, 2, 255, 7, 2, 3, 255, 5, 1, 1, 255, 7, 4, 2, 255, 4, 3, 0, 255, 6, 3, 0, 255, 11, 7, 2, 255, 14, 11, 2, 255, 21, 19, 10, 255, 32, 31, 28, 255, 35, 37, 35, 255, 28, 32, 27, 255, 36, 42, 40, 255, 43, 50, 48, 255, 38, 48, 42, 255, 36, 45, 36, 255, 37, 41, 23, 255, 44, 38, 39, 255, 44, 34, 24, 255, 41, 33, 16, 255, 35, 27, 17, 255, 30, 21, 7, 255, 31, 20, 3, 255, 32, 22, 9, 255, 29, 25, 8, 255, 26, 26, 4, 255, 32, 29, 4, 255, 35, 33, 5, 255, 43, 39, 14, 255, 47, 45, 8, 255, 45, 56, 2, 255, 50, 56, 7, 255, 60, 61, 12, 255, 59, 68, 13, 255, 63, 70, 12, 255, 66, 74, 14, 255, 60, 74, 14, 255, 69, 78, 13, 255, 70, 73, 11, 255, 72, 73, 18, 255, 72, 73, 8, 255, 63, 71, 8, 255, 61, 65, 11, 255, 71, 66, 2, 255, 70, 71, 4, 255, 75, 71, 6, 255, 87, 69, 7, 255, 87, 65, 6, 255, 76, 61, 3, 255, 76, 64, 8, 255, 82, 63, 9, 255, 80, 62, 4, 255, 74, 62, 2, 255, 77, 60, 6, 255, 82, 59, 9, 255, 90, 62, 9, 255, 100, 59, 7, 255, 106, 69, 12, 255, 138, 66, 14, 255, 81, 48, 2, 255, 78, 53, 5, 255, 92, 55, 7, 255, 91, 53, 4, 255, 91, 55, 2, 255, 96, 57, 2, 255, 94, 47, 10, 255, 99, 57, 4, 255, 96, 53, 2, 255, 109, 56, 6, 255, 117, 63, 2, 255, 113, 60, 2, 255, 96, 52, 1, 255, 88, 50, 4, 255, 84, 54, 7, 255, 87, 52, 5, 255, 93, 51, 4, 255, 90, 49, 8, 255, 95, 53, 4, 255, 106, 55, 10, 255, 104, 54, 4, 255, 99, 57, 2, 255, 111, 57, 0, 255, 125, 57, 1, 255, 128, 65, 10, 255, 108, 58, 12, 255, 102, 61, 5, 255, 104, 62, 0, 255, 107, 57, 11, 255, 117, 62, 12, 255, 136, 81, 4, 255, 150, 84, 18, 255, 174, 90, 19, 255, 182, 96, 5, 255, 191, 100, 18, 255, 192, 100, 15, 255, 195, 102, 2, 255, 195, 101, 11, 255, 190, 98, 12, 255, 194, 101, 13, 255, 192, 97, 9, 255, 191, 101, 1, 255, 184, 89, 5, 255, 164, 70, 7, 255, 170, 82, 7, 255, 183, 92, 1, 255, 184, 85, 11, 255, 186, 88, 13, 255, 188, 92, 3, 255, 194, 103, 14, 255, 197, 111, 11, 255, 193, 103, 9, 255, 194, 100, 3, 255, 192, 99, 1, 255, 188, 101, 6, 255, 189, 104, 6, 255, 194, 101, 8, 255, 195, 97, 3, 255, 196, 101, 4, 255, 189, 99, 6, 255, 186, 96, 9, 255, 186, 97, 5, 255, 183, 94, 4, 255, 186, 91, 8, 255, 186, 94, 12, 255, 186, 93, 2, 255, 187, 89, 6, 255, 176, 84, 11, 255, 178, 88, 6, 255, 178, 87, 2, 255, 177, 84, 4, 255, 182, 83, 11, 255, 177, 77, 5, 255, 166, 74, 1, 255, 162, 75, 2, 255, 170, 82, 7, 255, 165, 86, 2, 255, 178, 90, 1, 255, 181, 96, 7, 255, 182, 98, 7, 255, 188, 96, 3, 255, 188, 93, 12, 255, 191, 97, 6, 255, 189, 97, 3, 255, 184, 87, 5, 255, 183, 84, 8, 255, 180, 83, 14, 255, 181, 92, 8, 255, 178, 82, 12, 255, 179, 78, 12, 255, 180, 86, 8, 255, 189, 94, 9, 255, 177, 79, 5, 255, 183, 87, 7, 255, 189, 94, 7, 255, 193, 99, 5, 255, 193, 100, 5, 255, 183, 85, 7, 255, 183, 86, 2, 255, 195, 99, 3, 255, 194, 102, 10, 255, 189, 98, 6, 255, 188, 97, 4, 255, 181, 91, 6, 255, 183, 92, 3, 255, 185, 91, 4, 255, 190, 94, 6, 255, 192, 97, 6, 255, 190, 96, 7, 255, 186, 96, 7, 255, 183, 95, 5, 255, 185, 99, 11, 255, 189, 105, 6, 255, 195, 106, 6, 255, 194, 106, 2, 255, 194, 107, 3, 255, 193, 105, 6, 255, 197, 106, 12, 255, 195, 104, 7, 255, 201, 109, 12, 255, 198, 107, 8, 255, 195, 107, 1, 255, 197, 109, 1, 255, 198, 112, 3, 255, 196, 109, 5, 255, 198, 111, 9, 255, 203, 111, 2, 255, 200, 110, 3, 255, 203, 113, 11, 255, 196, 110, 3, 255, 199, 113, 6, 255, 205, 118, 9, 255, 203, 116, 7, 255, 201, 114, 8, 255, 206, 121, 13, 255, 205, 123, 6, 255, 203, 125, 1, 255, 206, 128, 1, 255, 210, 130, 0, 255, 211, 132, 4, 255, 207, 132, 5, 255, 209, 136, 6, 255, 206, 137, 7, 255, 212, 145, 5, 255, 216, 149, 1, 255, 216, 149, 3, 255, 213, 145, 2, 255, 212, 143, 7, 255, 216, 152, 3, 255, 221, 158, 0, 255, 227, 164, 1, 255, 228, 169, 4, 255, 229, 170, 2, 255, 224, 163, 0, 255, 216, 154, 2, 255, 216, 157, 1, 255, 220, 160, 3, 255, 211, 147, 3, 255, 208, 146, 1, 255, 213, 145, 6, 255, 204, 134, 7, 255, 204, 138, 6, 255, 211, 149, 11, 255, 208, 145, 3, 255, 207, 148, 6, 255, 204, 140, 6, 255, 202, 138, 7, 255, 207, 148, 7, 255, 207, 145, 4, 255, 207, 150, 3, 255, 223, 170, 5, 255, 233, 178, 7, 255, 230, 177, 6, 255, 229, 178, 3, 255, 226, 175, 0, 255, 231, 179, 3, 255, 231, 182, 3, 255, 213, 163, 6, 255, 196, 133, 7, 255, 176, 100, 4, 255, 182, 111, 5, 255, 190, 122, 5, 255, 184, 110, 9, 255, 178, 102, 1, 255, 176, 97, 3, 255, 170, 94, 3, 255, 182, 107, 10, 255, 179, 101, 5, 255, 175, 97, 1, 255, 174, 97, 3, 255, 166, 92, 5, 255, 170, 97, 4, 255, 179, 107, 4, 255, 184, 113, 6, 255, 184, 117, 11, 255, 179, 115, 17, 255, 177, 115, 23, 255, 167, 108, 14, 255, 156, 97, 7, 255, 158, 94, 18, 255, 152, 85, 6, 255, 162, 96, 12, 255, 165, 96, 16, 255, 168, 91, 10, 255, 162, 88, 0, 255, 165, 88, 7, 255, 172, 97, 7, 255, 174, 101, 3, 255, 166, 91, 5, 255, 167, 89, 2, 255, 153, 75, 8, 255, 145, 81, 9, 255, 183, 131, 11, 255, 198, 139, 3, 255, 192, 130, 2, 255, 183, 114, 4, 255, 171, 95, 9, 255, 169, 95, 6, 255, 168, 92, 9, 255, 162, 82, 6, 255, 159, 78, 15, 255, 160, 83, 9, 255, 161, 82, 15, 255, 163, 82, 10, 255, 161, 77, 3, 255, 165, 80, 1, 255, 180, 95, 9, 255, 199, 117, 8, 255, 194, 113, 6, 255, 193, 113, 4, 255, 192, 112, 6, 255, 191, 110, 9, 255, 191, 109, 5, 255, 190, 105, 6, 255, 190, 106, 7, 255, 186, 101, 1, 255, 168, 73, 1, 255, 148, 63, 5, 255, 146, 73, 5, 255, 141, 67, 7, 255, 131, 57, 11, 255, 125, 56, 10, 255, 119, 52, 6, 255, 120, 56, 7, 255, 116, 56, 5, 255, 108, 49, 0, 255, 108, 47, 7, 255, 107, 49, 6, 255, 110, 54, 5, 255, 104, 46, 1, 255, 106, 46, 5, 255, 105, 43, 4, 255, 93, 31, 2, 255, 100, 40, 11, 255, 114, 62, 2, 255, 122, 63, 3, 255, 118, 61, 8, 255, 119, 62, 10, 255, 107, 45, 4, 255, 97, 34, 7, 255, 100, 47, 4, 255, 110, 56, 2, 255, 115, 54, 3, 255, 113, 46, 5, 255, 108, 41, 7, 255, 103, 45, 6, 255, 104, 45, 3, 255, 104, 38, 3, 255, 100, 32, 2, 255, 100, 30, 3, 255, 102, 30, 5, 255, 101, 30, 4, 255, 99, 28, 3, 255, 94, 31, 4, 255, 94, 31, 3, 255, 96, 27, 1, 255, 99, 31, 1, 255, 102, 40, 3, 255, 105, 37, 4, 255, 115, 42, 5, 255, 119, 46, 3, 255, 116, 42, 2, 255, 119, 41, 4, 255, 119, 38, 5, 255, 122, 40, 5, 255, 120, 40, 2, 255, 122, 42, 7, 255, 124, 45, 6, 255, 124, 47, 4, 255, 1, 2, 18, 255, 3, 1, 22, 255, 1, 0, 24, 255, 0, 2, 20, 255, 2, 1, 10, 255, 0, 0, 17, 255, 0, 4, 28, 255, 5, 18, 42, 255, 1, 22, 43, 255, 0, 21, 39, 255, 2, 17, 44, 255, 4, 20, 45, 255, 0, 17, 31, 255, 2, 12, 20, 255, 4, 10, 26, 255, 1, 10, 27, 255, 4, 13, 27, 255, 4, 9, 19, 255, 2, 6, 18, 255, 0, 3, 6, 255, 3, 1, 3, 255, 2, 1, 0, 255, 0, 0, 1, 255, 8, 22, 40, 255, 10, 22, 46, 255, 0, 3, 9, 255, 2, 5, 11, 255, 0, 0, 0, 255, 1, 0, 5, 255, 2, 0, 1, 255, 0, 0, 6, 255, 3, 0, 2, 255, 3, 1, 4, 255, 2, 0, 0, 255, 1, 7, 87, 255, 9, 74, 231, 255, 23, 23, 23, 255, 7, 1, 0, 255, 6, 16, 144, 255, 4, 25, 143, 255, 2, 1, 1, 255, 3, 1, 4, 255, 3, 1, 0, 255, 0, 1, 0, 255, 2, 0, 4, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 0, 0, 255, 3, 1, 2, 255, 6, 0, 0, 255, 7, 1, 1, 255, 6, 2, 1, 255, 5, 1, 1, 255, 7, 4, 0, 255, 7, 6, 1, 255, 7, 5, 2, 255, 7, 5, 2, 255, 17, 11, 4, 255, 19, 11, 4, 255, 28, 22, 17, 255, 35, 35, 30, 255, 33, 41, 34, 255, 32, 50, 55, 255, 30, 46, 54, 255, 35, 47, 54, 255, 37, 46, 44, 255, 37, 44, 32, 255, 35, 42, 26, 255, 42, 37, 32, 255, 43, 33, 25, 255, 41, 33, 21, 255, 33, 20, 10, 255, 36, 22, 5, 255, 30, 21, 3, 255, 26, 25, 3, 255, 25, 31, 10, 255, 35, 35, 6, 255, 36, 37, 3, 255, 42, 42, 8, 255, 54, 53, 2, 255, 52, 54, 13, 255, 43, 55, 21, 255, 55, 62, 19, 255, 59, 65, 19, 255, 63, 68, 11, 255, 68, 73, 10, 255, 68, 73, 11, 255, 69, 74, 6, 255, 68, 75, 6, 255, 71, 70, 8, 255, 72, 71, 5, 255, 74, 73, 9, 255, 72, 66, 4, 255, 85, 71, 1, 255, 80, 72, 1, 255, 77, 69, 3, 255, 83, 67, 5, 255, 84, 62, 4, 255, 81, 61, 1, 255, 88, 66, 2, 255, 89, 66, 4, 255, 83, 64, 4, 255, 78, 62, 4, 255, 84, 66, 7, 255, 83, 59, 3, 255, 83, 61, 3, 255, 84, 60, 2, 255, 115, 71, 2, 255, 143, 70, 11, 255, 114, 62, 10, 255, 100, 57, 1, 255, 107, 55, 5, 255, 104, 55, 1, 255, 101, 52, 1, 255, 107, 56, 4, 255, 114, 52, 8, 255, 101, 52, 3, 255, 94, 56, 4, 255, 119, 61, 3, 255, 122, 59, 1, 255, 104, 53, 2, 255, 95, 51, 7, 255, 90, 50, 6, 255, 84, 49, 4, 255, 96, 55, 10, 255, 101, 55, 7, 255, 98, 52, 6, 255, 104, 56, 3, 255, 106, 57, 1, 255, 108, 61, 2, 255, 106, 56, 10, 255, 106, 57, 6, 255, 119, 63, 4, 255, 125, 62, 6, 255, 125, 60, 14, 255, 133, 69, 13, 255, 147, 84, 11, 255, 162, 90, 8, 255, 183, 98, 17, 255, 186, 100, 11, 255, 186, 98, 9, 255, 192, 101, 4, 255, 195, 103, 13, 255, 196, 99, 15, 255, 185, 93, 9, 255, 173, 75, 15, 255, 156, 64, 8, 255, 174, 81, 10, 255, 182, 83, 16, 255, 182, 89, 2, 255, 167, 77, 9, 255, 126, 48, 9, 255, 118, 49, 13, 255, 168, 84, 12, 255, 176, 84, 2, 255, 177, 89, 5, 255, 182, 95, 10, 255, 182, 91, 3, 255, 193, 97, 11, 255, 179, 82, 10, 255, 163, 72, 11, 255, 171, 78, 6, 255, 173, 79, 7, 255, 177, 83, 7, 255, 174, 80, 7, 255, 174, 81, 8, 255, 180, 86, 4, 255, 193, 99, 5, 255, 194, 99, 1, 255, 185, 87, 3, 255, 174, 79, 7, 255, 163, 73, 10, 255, 163, 74, 6, 255, 168, 77, 3, 255, 167, 78, 7, 255, 159, 72, 11, 255, 167, 75, 7, 255, 167, 78, 2, 255, 170, 84, 7, 255, 163, 74, 2, 255, 145, 63, 2, 255, 128, 61, 8, 255, 125, 59, 12, 255, 142, 66, 10, 255, 152, 74, 5, 255, 147, 67, 9, 255, 139, 62, 3, 255, 169, 85, 9, 255, 184, 95, 6, 255, 180, 95, 10, 255, 175, 86, 4, 255, 164, 79, 9, 255, 169, 80, 15, 255, 171, 79, 11, 255, 182, 92, 13, 255, 188, 97, 7, 255, 188, 94, 4, 255, 189, 94, 8, 255, 188, 93, 7, 255, 184, 91, 2, 255, 185, 85, 7, 255, 179, 79, 3, 255, 177, 83, 10, 255, 188, 100, 7, 255, 192, 104, 3, 255, 191, 100, 0, 255, 183, 87, 6, 255, 187, 93, 10, 255, 188, 99, 3, 255, 189, 100, 7, 255, 174, 81, 12, 255, 166, 72, 10, 255, 172, 81, 4, 255, 188, 96, 2, 255, 191, 95, 4, 255, 196, 98, 10, 255, 194, 97, 11, 255, 195, 102, 7, 255, 191, 101, 5, 255, 183, 96, 2, 255, 182, 94, 6, 255, 182, 95, 3, 255, 183, 91, 9, 255, 188, 98, 4, 255, 193, 106, 7, 255, 192, 103, 9, 255, 189, 99, 13, 255, 192, 100, 14, 255, 197, 108, 2, 255, 196, 107, 0, 255, 197, 107, 5, 255, 200, 109, 18, 255, 202, 112, 15, 255, 198, 111, 2, 255, 200, 112, 11, 255, 195, 105, 8, 255, 199, 108, 2, 255, 206, 114, 9, 255, 200, 110, 1, 255, 199, 112, 5, 255, 198, 114, 9, 255, 197, 111, 7, 255, 196, 111, 1, 255, 202, 118, 2, 255, 204, 120, 3, 255, 203, 120, 4, 255, 207, 124, 5, 255, 208, 124, 4, 255, 202, 117, 7, 255, 199, 117, 10, 255, 206, 130, 11, 255, 206, 131, 7, 255, 214, 139, 9, 255, 213, 137, 2, 255, 212, 136, 2, 255, 217, 147, 2, 255, 216, 148, 6, 255, 212, 148, 1, 255, 217, 153, 2, 255, 223, 158, 4, 255, 220, 157, 1, 255, 223, 161, 1, 255, 230, 169, 4, 255, 228, 170, 4, 255, 225, 169, 0, 255, 223, 165, 4, 255, 210, 147, 9, 255, 201, 135, 6, 255, 201, 130, 5, 255, 194, 122, 5, 255, 203, 135, 4, 255, 202, 139, 5, 255, 201, 138, 3, 255, 199, 142, 7, 255, 198, 135, 0, 255, 205, 139, 6, 255, 206, 140, 8, 255, 210, 142, 9, 255, 227, 168, 11, 255, 238, 188, 4, 255, 234, 182, 0, 255, 229, 177, 4, 255, 228, 175, 6, 255, 227, 175, 1, 255, 230, 177, 0, 255, 234, 183, 5, 255, 222, 172, 4, 255, 187, 121, 1, 255, 177, 105, 10, 255, 193, 119, 4, 255, 180, 105, 5, 255, 173, 94, 9, 255, 174, 91, 6, 255, 177, 99, 4, 255, 168, 93, 1, 255, 165, 88, 4, 255, 167, 89, 6, 255, 169, 92, 2, 255, 165, 89, 1, 255, 168, 96, 2, 255, 167, 94, 1, 255, 172, 99, 7, 255, 170, 95, 6, 255, 173, 101, 14, 255, 182, 114, 31, 255, 178, 118, 14, 255, 172, 110, 12, 255, 154, 93, 4, 255, 151, 92, 8, 255, 153, 92, 9, 255, 174, 107, 17, 255, 180, 107, 5, 255, 171, 93, 5, 255, 170, 94, 3, 255, 166, 91, 2, 255, 171, 95, 8, 255, 173, 97, 6, 255, 170, 94, 4, 255, 161, 89, 1, 255, 159, 88, 3, 255, 183, 125, 8, 255, 201, 148, 5, 255, 199, 135, 4, 255, 192, 123, 10, 255, 183, 116, 6, 255, 173, 101, 2, 255, 172, 94, 7, 255, 171, 88, 13, 255, 166, 83, 3, 255, 168, 90, 14, 255, 162, 87, 11, 255, 166, 87, 6, 255, 174, 93, 8, 255, 176, 93, 3, 255, 171, 84, 7, 255, 184, 98, 12, 255, 200, 117, 13, 255, 195, 113, 10, 255, 192, 111, 3, 255, 190, 109, 2, 255, 190, 108, 7, 255, 191, 108, 6, 255, 190, 104, 3, 255, 186, 102, 5, 255, 185, 98, 5, 255, 173, 80, 5, 255, 146, 62, 4, 255, 133, 57, 1, 255, 127, 51, 2, 255, 121, 46, 2, 255, 120, 47, 3, 255, 117, 45, 2, 255, 117, 47, 1, 255, 116, 49, 1, 255, 122, 56, 10, 255, 113, 44, 9, 255, 112, 44, 5, 255, 114, 49, 4, 255, 108, 44, 4, 255, 107, 43, 5, 255, 108, 46, 1, 255, 105, 41, 2, 255, 101, 36, 6, 255, 118, 60, 5, 255, 124, 61, 4, 255, 120, 59, 11, 255, 108, 51, 5, 255, 96, 43, 0, 255, 82, 34, 6, 255, 93, 40, 5, 255, 99, 50, 1, 255, 102, 53, 3, 255, 105, 46, 10, 255, 100, 29, 5, 255, 107, 31, 3, 255, 103, 33, 4, 255, 99, 35, 4, 255, 106, 38, 0, 255, 110, 38, 3, 255, 102, 26, 3, 255, 104, 30, 3, 255, 105, 35, 0, 255, 104, 32, 3, 255, 107, 35, 1, 255, 111, 32, 0, 255, 115, 35, 5, 255, 113, 40, 0, 255, 117, 38, 3, 255, 121, 39, 8, 255, 116, 37, 1, 255, 119, 40, 1, 255, 121, 39, 1, 255, 125, 43, 3, 255, 123, 39, 1, 255, 126, 44, 2, 255, 133, 51, 1, 255, 136, 52, 2, 255, 135, 52, 1, 255, 1, 0, 24, 255, 1, 0, 20, 255, 0, 2, 20, 255, 2, 2, 16, 255, 4, 0, 10, 255, 3, 2, 22, 255, 1, 20, 46, 255, 4, 28, 58, 255, 0, 17, 48, 255, 3, 18, 39, 255, 2, 20, 44, 255, 0, 17, 50, 255, 2, 15, 45, 255, 4, 15, 32, 255, 4, 15, 30, 255, 4, 7, 21, 255, 3, 6, 19, 255, 0, 8, 19, 255, 2, 14, 23, 255, 2, 8, 18, 255, 5, 4, 5, 255, 3, 0, 2, 255, 0, 3, 2, 255, 0, 1, 0, 255, 1, 0, 2, 255, 1, 1, 0, 255, 0, 0, 1, 255, 1, 1, 2, 255, 1, 1, 4, 255, 2, 2, 7, 255, 1, 3, 4, 255, 3, 2, 3, 255, 0, 2, 0, 255, 1, 1, 35, 255, 36, 51, 172, 255, 42, 40, 61, 255, 16, 3, 0, 255, 9, 8, 93, 255, 2, 26, 182, 255, 2, 5, 23, 255, 7, 3, 4, 255, 0, 1, 2, 255, 2, 0, 2, 255, 2, 2, 1, 255, 4, 0, 2, 255, 0, 0, 0, 255, 2, 1, 1, 255, 2, 0, 1, 255, 1, 0, 0, 255, 2, 0, 1, 255, 4, 2, 3, 255, 5, 2, 1, 255, 5, 2, 1, 255, 5, 1, 0, 255, 7, 3, 0, 255, 7, 3, 0, 255, 12, 7, 3, 255, 12, 7, 3, 255, 12, 8, 4, 255, 17, 11, 3, 255, 20, 12, 2, 255, 22, 16, 6, 255, 25, 24, 15, 255, 33, 36, 27, 255, 38, 45, 46, 255, 35, 50, 46, 255, 34, 49, 40, 255, 34, 39, 25, 255, 44, 41, 34, 255, 38, 40, 33, 255, 41, 41, 34, 255, 40, 37, 25, 255, 35, 32, 21, 255, 39, 32, 15, 255, 34, 24, 8, 255, 30, 22, 11, 255, 31, 29, 11, 255, 36, 31, 12, 255, 39, 37, 5, 255, 39, 46, 9, 255, 39, 48, 4, 255, 49, 53, 16, 255, 53, 59, 10, 255, 47, 61, 12, 255, 50, 63, 10, 255, 61, 65, 10, 255, 66, 70, 4, 255, 68, 75, 6, 255, 75, 76, 11, 255, 67, 75, 7, 255, 68, 72, 7, 255, 74, 71, 1, 255, 72, 69, 2, 255, 77, 63, 7, 255, 80, 63, 9, 255, 74, 68, 8, 255, 71, 62, 6, 255, 68, 61, 3, 255, 77, 64, 3, 255, 82, 63, 0, 255, 83, 64, 1, 255, 88, 68, 4, 255, 86, 64, 4, 255, 85, 64, 4, 255, 94, 63, 3, 255, 99, 63, 2, 255, 82, 65, 0, 255, 85, 69, 8, 255, 93, 63, 11, 255, 106, 66, 4, 255, 151, 83, 5, 255, 172, 93, 12, 255, 155, 96, 7, 255, 153, 94, 7, 255, 142, 84, 5, 255, 134, 70, 3, 255, 125, 64, 2, 255, 121, 68, 8, 255, 118, 64, 9, 255, 114, 64, 4, 255, 111, 60, 9, 255, 113, 60, 7, 255, 108, 60, 7, 255, 110, 60, 11, 255, 109, 59, 2, 255, 111, 63, 4, 255, 109, 59, 5, 255, 114, 64, 6, 255, 111, 66, 1, 255, 119, 63, 7, 255, 125, 64, 9, 255, 128, 72, 4, 255, 134, 78, 2, 255, 144, 81, 8, 255, 161, 87, 19, 255, 172, 96, 9, 255, 179, 103, 10, 255, 189, 103, 15, 255, 196, 104, 9, 255, 193, 101, 10, 255, 170, 81, 6, 255, 162, 72, 8, 255, 168, 77, 13, 255, 182, 87, 3, 255, 186, 85, 4, 255, 179, 89, 0, 255, 168, 81, 8, 255, 121, 48, 11, 255, 139, 63, 9, 255, 178, 93, 15, 255, 185, 96, 12, 255, 160, 74, 4, 255, 119, 47, 13, 255, 118, 52, 13, 255, 153, 74, 2, 255, 179, 86, 4, 255, 170, 72, 12, 255, 173, 87, 10, 255, 164, 81, 4, 255, 170, 84, 6, 255, 147, 76, 4, 255, 117, 51, 10, 255, 131, 62, 2, 255, 160, 79, 10, 255, 180, 88, 10, 255, 167, 76, 6, 255, 155, 70, 22, 255, 172, 84, 12, 255, 186, 97, 5, 255, 193, 99, 10, 255, 177, 79, 8, 255, 142, 52, 5, 255, 124, 54, 12, 255, 135, 65, 3, 255, 151, 75, 3, 255, 166, 79, 4, 255, 159, 68, 4, 255, 174, 86, 13, 255, 179, 88, 8, 255, 175, 73, 7, 255, 169, 71, 12, 255, 127, 48, 7, 255, 109, 46, 13, 255, 145, 76, 14, 255, 180, 94, 9, 255, 187, 91, 9, 255, 178, 85, 6, 255, 148, 68, 6, 255, 122, 63, 8, 255, 154, 82, 14, 255, 162, 74, 4, 255, 136, 59, 10, 255, 117, 53, 10, 255, 114, 49, 4, 255, 122, 60, 7, 255, 136, 65, 8, 255, 168, 85, 1, 255, 185, 95, 3, 255, 188, 94, 7, 255, 189, 97, 6, 255, 191, 102, 5, 255, 188, 94, 5, 255, 183, 93, 2, 255, 181, 91, 5, 255, 188, 94, 2, 255, 191, 101, 8, 255, 188, 93, 10, 255, 189, 92, 5, 255, 189, 94, 5, 255, 188, 95, 5, 255, 175, 81, 2, 255, 162, 69, 0, 255, 168, 77, 4, 255, 187, 96, 12, 255, 191, 99, 8, 255, 196, 103, 2, 255, 197, 100, 7, 255, 195, 98, 5, 255, 195, 100, 5, 255, 193, 99, 1, 255, 192, 99, 3, 255, 193, 98, 9, 255, 192, 98, 1, 255, 193, 100, 2, 255, 179, 89, 5, 255, 174, 83, 7, 255, 179, 90, 8, 255, 184, 96, 4, 255, 180, 91, 5, 255, 176, 82, 12, 255, 177, 87, 3, 255, 179, 89, 6, 255, 183, 93, 3, 255, 189, 100, 2, 255, 193, 102, 7, 255, 196, 105, 5, 255, 198, 106, 4, 255, 196, 106, 2, 255, 189, 102, 7, 255, 181, 95, 13, 255, 192, 110, 11, 255, 193, 109, 0, 255, 198, 109, 5, 255, 198, 110, 10, 255, 200, 113, 9, 255, 199, 113, 4, 255, 200, 114, 4, 255, 202, 115, 7, 255, 200, 115, 7, 255, 200, 114, 7, 255, 200, 119, 4, 255, 207, 127, 7, 255, 207, 125, 11, 255, 202, 119, 1, 255, 211, 128, 3, 255, 215, 131, 8, 255, 208, 125, 4, 255, 205, 127, 0, 255, 209, 135, 9, 255, 221, 152, 8, 255, 217, 150, 4, 255, 215, 148, 4, 255, 216, 149, 4, 255, 214, 147, 3, 255, 224, 163, 8, 255, 229, 171, 2, 255, 229, 174, 0, 255, 228, 171, 0, 255, 220, 161, 3, 255, 207, 138, 4, 255, 204, 132, 2, 255, 204, 132, 3, 255, 208, 140, 9, 255, 199, 136, 7, 255, 193, 133, 5, 255, 195, 135, 7, 255, 200, 133, 2, 255, 203, 134, 0, 255, 210, 144, 6, 255, 223, 157, 6, 255, 236, 178, 2, 255, 237, 186, 4, 255, 230, 175, 1, 255, 230, 173, 1, 255, 233, 176, 1, 255, 238, 183, 4, 255, 234, 179, 2, 255, 232, 175, 2, 255, 229, 171, 2, 255, 195, 134, 5, 255, 174, 105, 7, 255, 178, 114, 6, 255, 181, 110, 8, 255, 173, 95, 1, 255, 163, 84, 4, 255, 166, 89, 2, 255, 167, 93, 4, 255, 156, 81, 1, 255, 159, 83, 0, 255, 164, 88, 4, 255, 156, 81, 5, 255, 162, 83, 10, 255, 159, 81, 7, 255, 155, 78, 2, 255, 167, 91, 8, 255, 175, 100, 13, 255, 173, 104, 14, 255, 177, 113, 13, 255, 180, 115, 16, 255, 166, 102, 6, 255, 153, 96, 4, 255, 151, 92, 11, 255, 161, 92, 16, 255, 182, 108, 10, 255, 172, 95, 2, 255, 168, 90, 2, 255, 172, 97, 1, 255, 175, 101, 5, 255, 166, 89, 5, 255, 171, 95, 0, 255, 174, 100, 0, 255, 179, 117, 5, 255, 200, 143, 8, 255, 197, 138, 0, 255, 197, 136, 5, 255, 190, 120, 6, 255, 190, 117, 4, 255, 188, 113, 14, 255, 175, 96, 10, 255, 167, 89, 6, 255, 172, 93, 14, 255, 179, 98, 17, 255, 181, 101, 9, 255, 175, 93, 17, 255, 180, 98, 9, 255, 182, 96, 11, 255, 177, 90, 6, 255, 190, 106, 9, 255, 201, 120, 5, 255, 195, 114, 6, 255, 192, 110, 7, 255, 189, 108, 2, 255, 188, 106, 1, 255, 187, 103, 6, 255, 187, 101, 4, 255, 182, 100, 3, 255, 180, 95, 3, 255, 172, 81, 6, 255, 153, 69, 13, 255, 138, 59, 7, 255, 124, 45, 5, 255, 114, 37, 5, 255, 115, 32, 2, 255, 116, 34, 2, 255, 110, 33, 1, 255, 102, 35, 3, 255, 104, 44, 9, 255, 104, 48, 7, 255, 110, 54, 6, 255, 109, 55, 3, 255, 110, 54, 9, 255, 107, 50, 5, 255, 109, 50, 0, 255, 114, 52, 4, 255, 105, 38, 2, 255, 112, 41, 4, 255, 117, 56, 8, 255, 120, 60, 4, 255, 103, 43, 5, 255, 89, 32, 5, 255, 99, 41, 1, 255, 102, 43, 6, 255, 102, 35, 3, 255, 104, 32, 0, 255, 106, 36, 3, 255, 99, 32, 1, 255, 107, 38, 2, 255, 106, 37, 4, 255, 103, 31, 5, 255, 115, 40, 3, 255, 120, 43, 5, 255, 114, 35, 4, 255, 106, 29, 5, 255, 101, 25, 5, 255, 105, 31, 8, 255, 109, 40, 1, 255, 114, 40, 4, 255, 113, 32, 5, 255, 116, 37, 4, 255, 120, 42, 1, 255, 128, 45, 3, 255, 128, 45, 2, 255, 123, 41, 0, 255, 120, 36, 3, 255, 123, 40, 7, 255, 122, 41, 3, 255, 129, 49, 0, 255, 140, 58, 1, 255, 143, 60, 4, 255, 146, 61, 5, 255, 1, 0, 18, 255, 0, 1, 23, 255, 1, 4, 23, 255, 1, 1, 15, 255, 0, 3, 20, 255, 1, 14, 41, 255, 1, 20, 53, 255, 2, 21, 51, 255, 2, 14, 41, 255, 5, 12, 36, 255, 3, 17, 45, 255, 1, 15, 54, 255, 6, 18, 50, 255, 0, 18, 39, 255, 0, 17, 39, 255, 2, 11, 21, 255, 2, 5, 15, 255, 1, 8, 24, 255, 3, 11, 23, 255, 3, 10, 21, 255, 0, 4, 5, 255, 2, 2, 4, 255, 1, 0, 5, 255, 1, 2, 1, 255, 3, 0, 3, 255, 2, 0, 3, 255, 0, 2, 0, 255, 1, 1, 1, 255, 0, 1, 6, 255, 1, 0, 5, 255, 1, 1, 0, 255, 2, 2, 3, 255, 0, 0, 9, 255, 27, 43, 148, 255, 39, 61, 94, 255, 20, 11, 0, 255, 9, 10, 23, 255, 12, 25, 137, 255, 3, 8, 54, 255, 3, 0, 0, 255, 3, 2, 3, 255, 4, 2, 3, 255, 3, 1, 5, 255, 3, 1, 0, 255, 3, 0, 0, 255, 1, 0, 0, 255, 3, 0, 2, 255, 3, 1, 1, 255, 2, 1, 1, 255, 1, 0, 0, 255, 3, 2, 0, 255, 5, 3, 1, 255, 6, 4, 2, 255, 4, 2, 0, 255, 7, 3, 1, 255, 9, 4, 1, 255, 11, 4, 2, 255, 11, 5, 2, 255, 12, 6, 3, 255, 14, 9, 2, 255, 17, 10, 1, 255, 20, 13, 2, 255, 22, 18, 6, 255, 29, 23, 12, 255, 36, 32, 27, 255, 38, 45, 46, 255, 36, 49, 47, 255, 29, 34, 32, 255, 40, 36, 37, 255, 41, 36, 33, 255, 43, 41, 33, 255, 39, 39, 26, 255, 40, 38, 28, 255, 40, 32, 21, 255, 41, 31, 9, 255, 33, 27, 4, 255, 35, 31, 9, 255, 45, 30, 12, 255, 47, 37, 3, 255, 47, 51, 12, 255, 43, 56, 5, 255, 46, 57, 2, 255, 49, 58, 17, 255, 58, 60, 12, 255, 61, 67, 10, 255, 69, 70, 13, 255, 68, 71, 9, 255, 66, 69, 6, 255, 69, 72, 12, 255, 68, 74, 8, 255, 66, 71, 6, 255, 61, 62, 7, 255, 81, 65, 9, 255, 95, 79, 11, 255, 86, 79, 3, 255, 87, 76, 4, 255, 85, 80, 5, 255, 84, 80, 5, 255, 92, 78, 7, 255, 101, 78, 8, 255, 99, 81, 6, 255, 97, 85, 4, 255, 105, 81, 11, 255, 106, 81, 8, 255, 110, 84, 3, 255, 111, 85, 5, 255, 106, 80, 5, 255, 111, 78, 5, 255, 111, 83, 5, 255, 102, 71, 6, 255, 134, 72, 13, 255, 163, 87, 9, 255, 172, 100, 6, 255, 179, 97, 2, 255, 181, 95, 6, 255, 175, 90, 8, 255, 163, 85, 6, 255, 136, 74, 11, 255, 148, 74, 11, 255, 166, 89, 9, 255, 151, 90, 16, 255, 146, 88, 10, 255, 142, 80, 12, 255, 146, 79, 13, 255, 154, 83, 5, 255, 154, 86, 6, 255, 156, 86, 14, 255, 158, 90, 12, 255, 164, 95, 10, 255, 176, 96, 13, 255, 178, 99, 18, 255, 180, 104, 16, 255, 189, 104, 7, 255, 196, 107, 9, 255, 192, 106, 7, 255, 192, 99, 9, 255, 179, 88, 7, 255, 158, 70, 7, 255, 186, 89, 16, 255, 194, 96, 4, 255, 167, 78, 1, 255, 142, 62, 6, 255, 149, 64, 8, 255, 169, 79, 11, 255, 153, 76, 12, 255, 189, 95, 5, 255, 140, 61, 4, 255, 96, 43, 8, 255, 168, 92, 12, 255, 182, 88, 12, 255, 142, 58, 7, 255, 123, 48, 9, 255, 140, 66, 13, 255, 159, 77, 9, 255, 161, 68, 7, 255, 151, 61, 12, 255, 137, 55, 8, 255, 146, 71, 6, 255, 140, 62, 5, 255, 140, 68, 13, 255, 131, 61, 11, 255, 160, 85, 4, 255, 173, 93, 9, 255, 174, 85, 10, 255, 176, 91, 4, 255, 157, 74, 4, 255, 171, 83, 10, 255, 164, 82, 7, 255, 157, 73, 7, 255, 150, 63, 10, 255, 123, 55, 13, 255, 119, 60, 7, 255, 160, 84, 8, 255, 175, 88, 5, 255, 178, 90, 5, 255, 165, 80, 6, 255, 166, 78, 12, 255, 168, 73, 5, 255, 148, 55, 6, 255, 135, 57, 11, 255, 132, 62, 6, 255, 142, 69, 6, 255, 157, 73, 9, 255, 159, 69, 8, 255, 162, 68, 5, 255, 167, 75, 3, 255, 152, 72, 6, 255, 132, 65, 6, 255, 144, 72, 6, 255, 152, 78, 8, 255, 147, 71, 8, 255, 148, 71, 8, 255, 142, 73, 8, 255, 139, 73, 3, 255, 148, 78, 5, 255, 168, 93, 8, 255, 169, 87, 13, 255, 179, 91, 10, 255, 177, 88, 12, 255, 163, 82, 13, 255, 162, 83, 10, 255, 169, 88, 11, 255, 165, 86, 4, 255, 180, 96, 6, 255, 185, 91, 7, 255, 190, 100, 6, 255, 190, 95, 8, 255, 190, 94, 5, 255, 185, 91, 6, 255, 185, 91, 5, 255, 182, 87, 5, 255, 179, 87, 6, 255, 187, 97, 5, 255, 193, 102, 1, 255, 193, 99, 4, 255, 195, 102, 3, 255, 194, 102, 4, 255, 191, 99, 4, 255, 192, 98, 5, 255, 195, 102, 6, 255, 194, 101, 7, 255, 196, 102, 10, 255, 198, 103, 7, 255, 195, 98, 12, 255, 174, 85, 9, 255, 170, 81, 8, 255, 179, 91, 5, 255, 184, 95, 6, 255, 176, 87, 7, 255, 170, 81, 1, 255, 171, 83, 3, 255, 173, 85, 15, 255, 179, 91, 11, 255, 182, 95, 7, 255, 187, 97, 8, 255, 192, 105, 2, 255, 182, 95, 2, 255, 175, 91, 9, 255, 189, 108, 3, 255, 191, 107, 8, 255, 199, 115, 11, 255, 197, 113, 1, 255, 194, 111, 0, 255, 196, 111, 1, 255, 199, 111, 10, 255, 197, 108, 10, 255, 199, 112, 4, 255, 203, 118, 1, 255, 201, 117, 2, 255, 199, 118, 4, 255, 204, 126, 6, 255, 205, 123, 9, 255, 201, 115, 8, 255, 207, 122, 6, 255, 211, 128, 9, 255, 206, 124, 3, 255, 205, 122, 8, 255, 209, 130, 0, 255, 220, 144, 5, 255, 222, 149, 6, 255, 218, 146, 5, 255, 218, 145, 6, 255, 220, 152, 0, 255, 223, 159, 0, 255, 229, 170, 4, 255, 228, 170, 0, 255, 229, 170, 1, 255, 232, 174, 4, 255, 229, 170, 4, 255, 208, 138, 3, 255, 204, 135, 6, 255, 217, 153, 5, 255, 205, 142, 2, 255, 191, 128, 5, 255, 197, 139, 2, 255, 204, 140, 2, 255, 195, 121, 6, 255, 211, 144, 9, 255, 226, 170, 3, 255, 231, 173, 3, 255, 234, 178, 2, 255, 230, 178, 1, 255, 231, 175, 3, 255, 230, 172, 3, 255, 230, 171, 3, 255, 231, 175, 3, 255, 234, 177, 2, 255, 236, 176, 2, 255, 235, 172, 7, 255, 221, 159, 4, 255, 194, 135, 11, 255, 189, 126, 8, 255, 188, 122, 1, 255, 175, 102, 2, 255, 169, 92, 5, 255, 161, 84, 4, 255, 163, 88, 9, 255, 158, 83, 4, 255, 162, 87, 1, 255, 161, 86, 4, 255, 159, 84, 10, 255, 168, 92, 5, 255, 163, 87, 6, 255, 161, 85, 5, 255, 169, 93, 4, 255, 172, 99, 11, 255, 172, 104, 20, 255, 176, 107, 20, 255, 175, 105, 10, 255, 161, 93, 4, 255, 143, 81, 4, 255, 141, 82, 10, 255, 145, 83, 9, 255, 177, 112, 7, 255, 185, 113, 4, 255, 181, 107, 2, 255, 179, 104, 1, 255, 175, 97, 2, 255, 169, 91, 2, 255, 168, 89, 5, 255, 182, 105, 6, 255, 200, 138, 6, 255, 199, 142, 4, 255, 198, 138, 3, 255, 195, 133, 7, 255, 199, 128, 10, 255, 201, 131, 4, 255, 201, 131, 11, 255, 200, 121, 8, 255, 187, 104, 10, 255, 176, 95, 11, 255, 176, 97, 9, 255, 179, 99, 8, 255, 180, 97, 10, 255, 183, 98, 12, 255, 178, 90, 11, 255, 178, 90, 6, 255, 192, 107, 6, 255, 200, 118, 4, 255, 192, 112, 1, 255, 192, 110, 6, 255, 190, 108, 4, 255, 187, 105, 0, 255, 186, 101, 5, 255, 184, 99, 7, 255, 180, 96, 8, 255, 175, 92, 8, 255, 168, 82, 5, 255, 146, 61, 6, 255, 132, 49, 5, 255, 125, 42, 7, 255, 118, 41, 4, 255, 113, 42, 6, 255, 115, 38, 5, 255, 108, 34, 4, 255, 99, 33, 6, 255, 91, 34, 3, 255, 99, 43, 3, 255, 114, 50, 2, 255, 118, 50, 3, 255, 117, 51, 7, 255, 112, 50, 5, 255, 114, 52, 5, 255, 113, 51, 6, 255, 111, 48, 8, 255, 88, 27, 2, 255, 87, 32, 6, 255, 94, 32, 4, 255, 93, 27, 2, 255, 98, 36, 7, 255, 97, 35, 2, 255, 100, 34, 5, 255, 97, 30, 4, 255, 98, 28, 2, 255, 105, 33, 3, 255, 108, 37, 2, 255, 109, 43, 4, 255, 109, 40, 3, 255, 114, 34, 4, 255, 123, 43, 9, 255, 129, 47, 5, 255, 133, 52, 4, 255, 126, 47, 5, 255, 107, 29, 1, 255, 103, 38, 1, 255, 114, 42, 2, 255, 117, 38, 4, 255, 97, 29, 3, 255, 97, 35, 7, 255, 122, 44, 7, 255, 140, 50, 4, 255, 148, 60, 2, 255, 143, 59, 3, 255, 134, 51, 3, 255, 125, 42, 5, 255, 127, 45, 5, 255, 136, 53, 3, 255, 154, 65, 0, 255, 155, 66, 1, 255, 161, 69, 2, 255, 2, 1, 17, 255, 0, 2, 16, 255, 2, 1, 15, 255, 1, 3, 30, 255, 3, 21, 58, 255, 1, 32, 61, 255, 2, 19, 47, 255, 1, 15, 40, 255, 0, 19, 43, 255, 1, 12, 37, 255, 1, 18, 45, 255, 1, 23, 55, 255, 3, 24, 46, 255, 2, 20, 34, 255, 2, 18, 42, 255, 1, 17, 45, 255, 1, 13, 31, 255, 3, 8, 15, 255, 0, 6, 15, 255, 2, 9, 18, 255, 3, 6, 13, 255, 2, 3, 1, 255, 1, 1, 2, 255, 0, 0, 2, 255, 1, 1, 5, 255, 0, 1, 1, 255, 0, 0, 2, 255, 2, 0, 6, 255, 0, 2, 3, 255, 2, 2, 1, 255, 2, 0, 3, 255, 0, 0, 2, 255, 13, 21, 106, 255, 40, 66, 151, 255, 17, 18, 0, 255, 12, 5, 0, 255, 20, 23, 50, 255, 7, 13, 31, 255, 4, 0, 0, 255, 3, 2, 8, 255, 2, 2, 2, 255, 1, 1, 2, 255, 7, 2, 2, 255, 3, 1, 0, 255, 1, 1, 3, 255, 4, 1, 2, 255, 2, 1, 1, 255, 1, 0, 0, 255, 1, 0, 0, 255, 2, 1, 0, 255, 3, 3, 0, 255, 6, 2, 1, 255, 9, 3, 3, 255, 8, 4, 0, 255, 10, 6, 3, 255, 8, 5, 1, 255, 9, 6, 1, 255, 11, 5, 1, 255, 12, 7, 3, 255, 13, 9, 4, 255, 12, 9, 1, 255, 18, 14, 3, 255, 26, 20, 8, 255, 28, 21, 10, 255, 34, 32, 25, 255, 40, 40, 39, 255, 37, 40, 33, 255, 32, 32, 22, 255, 40, 39, 31, 255, 50, 47, 36, 255, 49, 45, 25, 255, 47, 43, 25, 255, 46, 41, 32, 255, 44, 36, 21, 255, 46, 33, 6, 255, 41, 29, 5, 255, 40, 34, 8, 255, 51, 47, 10, 255, 56, 47, 10, 255, 50, 47, 9, 255, 47, 49, 14, 255, 54, 55, 8, 255, 54, 60, 9, 255, 61, 62, 8, 255, 67, 68, 14, 255, 61, 70, 5, 255, 74, 72, 9, 255, 80, 71, 9, 255, 74, 73, 3, 255, 70, 68, 5, 255, 76, 69, 1, 255, 99, 89, 9, 255, 107, 101, 10, 255, 108, 108, 7, 255, 106, 105, 1, 255, 105, 99, 2, 255, 110, 98, 5, 255, 106, 100, 5, 255, 107, 97, 5, 255, 110, 91, 5, 255, 107, 88, 6, 255, 104, 87, 8, 255, 117, 87, 6, 255, 108, 88, 1, 255, 100, 83, 3, 255, 101, 77, 6, 255, 103, 79, 11, 255, 103, 73, 4, 255, 103, 71, 5, 255, 101, 68, 9, 255, 104, 66, 2, 255, 117, 69, 4, 255, 124, 65, 4, 255, 143, 69, 6, 255, 160, 77, 3, 255, 164, 86, 7, 255, 180, 91, 2, 255, 172, 87, 1, 255, 177, 95, 6, 255, 179, 97, 6, 255, 174, 96, 4, 255, 179, 99, 3, 255, 192, 106, 11, 255, 191, 103, 14, 255, 196, 109, 6, 255, 197, 112, 7, 255, 193, 103, 7, 255, 198, 110, 6, 255, 200, 113, 11, 255, 193, 103, 5, 255, 193, 103, 3, 255, 196, 110, 3, 255, 175, 88, 12, 255, 160, 66, 13, 255, 193, 97, 3, 255, 193, 92, 6, 255, 157, 71, 4, 255, 135, 61, 5, 255, 170, 77, 15, 255, 163, 64, 7, 255, 130, 55, 5, 255, 115, 51, 4, 255, 153, 75, 4, 255, 169, 89, 7, 255, 197, 123, 20, 255, 194, 105, 12, 255, 128, 63, 6, 255, 122, 64, 5, 255, 154, 72, 3, 255, 137, 61, 3, 255, 113, 59, 7, 255, 137, 71, 13, 255, 156, 78, 7, 255, 141, 72, 7, 255, 137, 65, 7, 255, 135, 58, 1, 255, 132, 66, 5, 255, 128, 62, 7, 255, 132, 63, 5, 255, 132, 67, 11, 255, 147, 74, 11, 255, 162, 84, 0, 255, 163, 78, 7, 255, 150, 65, 10, 255, 153, 72, 10, 255, 148, 70, 8, 255, 163, 75, 12, 255, 154, 72, 2, 255, 132, 63, 3, 255, 128, 59, 9, 255, 131, 62, 4, 255, 150, 78, 6, 255, 164, 83, 6, 255, 168, 77, 10, 255, 155, 72, 13, 255, 147, 66, 5, 255, 155, 73, 2, 255, 140, 61, 2, 255, 133, 62, 8, 255, 124, 63, 5, 255, 131, 61, 18, 255, 141, 64, 12, 255, 134, 61, 1, 255, 119, 52, 5, 255, 124, 61, 10, 255, 124, 65, 0, 255, 130, 66, 5, 255, 141, 66, 6, 255, 145, 72, 4, 255, 144, 74, 0, 255, 148, 73, 5, 255, 151, 72, 7, 255, 150, 74, 5, 255, 156, 74, 9, 255, 175, 84, 15, 255, 180, 85, 9, 255, 178, 84, 9, 255, 165, 76, 6, 255, 162, 79, 11, 255, 134, 67, 5, 255, 107, 60, 7, 255, 131, 76, 11, 255, 178, 97, 8, 255, 186, 97, 9, 255, 158, 78, 6, 255, 175, 92, 5, 255, 185, 101, 9, 255, 178, 92, 3, 255, 160, 75, 4, 255, 167, 82, 10, 255, 172, 87, 5, 255, 171, 84, 4, 255, 180, 90, 5, 255, 191, 100, 5, 255, 194, 99, 8, 255, 190, 98, 3, 255, 186, 98, 4, 255, 186, 98, 3, 255, 188, 94, 6, 255, 182, 90, 7, 255, 177, 85, 8, 255, 185, 96, 6, 255, 187, 95, 9, 255, 173, 81, 5, 255, 176, 91, 3, 255, 175, 90, 6, 255, 186, 100, 2, 255, 188, 101, 8, 255, 169, 80, 5, 255, 174, 88, 3, 255, 174, 91, 3, 255, 162, 78, 5, 255, 167, 84, 6, 255, 182, 100, 16, 255, 169, 85, 10, 255, 170, 89, 0, 255, 177, 95, 11, 255, 181, 97, 14, 255, 193, 114, 3, 255, 181, 99, 3, 255, 176, 89, 6, 255, 181, 91, 7, 255, 185, 94, 3, 255, 196, 108, 6, 255, 194, 106, 4, 255, 197, 108, 5, 255, 197, 110, 3, 255, 200, 113, 4, 255, 198, 112, 3, 255, 191, 110, 3, 255, 199, 125, 4, 255, 204, 125, 0, 255, 206, 122, 2, 255, 206, 124, 1, 255, 201, 122, 6, 255, 201, 122, 12, 255, 208, 136, 2, 255, 218, 145, 5, 255, 218, 143, 3, 255, 211, 134, 3, 255, 213, 136, 7, 255, 213, 134, 5, 255, 208, 131, 5, 255, 220, 153, 9, 255, 228, 169, 3, 255, 228, 169, 1, 255, 229, 168, 2, 255, 225, 164, 4, 255, 215, 153, 5, 255, 207, 138, 5, 255, 214, 151, 5, 255, 218, 159, 4, 255, 194, 131, 1, 255, 195, 131, 1, 255, 204, 141, 8, 255, 201, 139, 6, 255, 205, 140, 5, 255, 224, 169, 8, 255, 230, 180, 6, 255, 228, 172, 1, 255, 230, 168, 1, 255, 224, 165, 5, 255, 224, 169, 3, 255, 228, 170, 0, 255, 228, 172, 1, 255, 225, 171, 0, 255, 228, 173, 1, 255, 235, 178, 2, 255, 230, 168, 4, 255, 221, 160, 4, 255, 208, 145, 4, 255, 189, 118, 5, 255, 191, 117, 3, 255, 183, 111, 6, 255, 167, 89, 5, 255, 159, 80, 1, 255, 159, 84, 5, 255, 154, 77, 1, 255, 158, 81, 4, 255, 157, 81, 1, 255, 162, 85, 4, 255, 166, 94, 4, 255, 161, 90, 5, 255, 167, 93, 7, 255, 179, 107, 2, 255, 176, 108, 5, 255, 178, 114, 20, 255, 171, 113, 17, 255, 164, 104, 15, 255, 154, 90, 10, 255, 149, 86, 4, 255, 141, 78, 4, 255, 138, 75, 4, 255, 178, 117, 5, 255, 192, 122, 3, 255, 186, 115, 7, 255, 182, 107, 5, 255, 181, 101, 4, 255, 176, 97, 3, 255, 179, 104, 4, 255, 192, 135, 10, 255, 199, 141, 5, 255, 194, 133, 5, 255, 197, 129, 6, 255, 203, 126, 12, 255, 201, 128, 14, 255, 199, 128, 5, 255, 203, 126, 16, 255, 206, 128, 12, 255, 202, 126, 12, 255, 193, 119, 13, 255, 190, 111, 13, 255, 190, 105, 13, 255, 185, 101, 9, 255, 176, 89, 4, 255, 170, 77, 11, 255, 173, 83, 3, 255, 192, 106, 7, 255, 200, 118, 9, 255, 194, 114, 3, 255, 193, 112, 4, 255, 190, 108, 7, 255, 187, 105, 5, 255, 184, 102, 2, 255, 178, 93, 4, 255, 168, 85, 10, 255, 159, 74, 5, 255, 153, 63, 5, 255, 137, 53, 5, 255, 136, 55, 2, 255, 138, 56, 3, 255, 135, 59, 2, 255, 133, 61, 4, 255, 126, 47, 1, 255, 121, 42, 3, 255, 107, 37, 2, 255, 96, 33, 2, 255, 93, 29, 4, 255, 103, 32, 2, 255, 105, 31, 1, 255, 104, 34, 2, 255, 103, 34, 0, 255, 105, 36, 7, 255, 102, 34, 4, 255, 104, 38, 1, 255, 99, 30, 3, 255, 89, 23, 4, 255, 84, 23, 1, 255, 93, 30, 3, 255, 105, 37, 0, 255, 102, 34, 3, 255, 101, 36, 3, 255, 106, 37, 1, 255, 111, 36, 1, 255, 114, 40, 5, 255, 116, 42, 4, 255, 121, 43, 2, 255, 125, 47, 5, 255, 118, 44, 3, 255, 122, 45, 1, 255, 123, 44, 2, 255, 121, 42, 3, 255, 118, 41, 3, 255, 119, 44, 3, 255, 124, 46, 4, 255, 111, 36, 2, 255, 103, 29, 1, 255, 99, 28, 3, 255, 97, 28, 3, 255, 119, 39, 4, 255, 154, 62, 6, 255, 163, 71, 2, 255, 154, 66, 2, 255, 147, 62, 5, 255, 138, 52, 3, 255, 139, 53, 1, 255, 154, 67, 3, 255, 165, 73, 4, 255, 162, 68, 2, 255, 165, 71, 4, 255, 3, 2, 22, 255, 0, 3, 17, 255, 3, 1, 30, 255, 7, 24, 72, 255, 1, 34, 74, 255, 1, 27, 56, 255, 5, 25, 63, 255, 3, 21, 48, 255, 2, 18, 29, 255, 0, 11, 33, 255, 2, 14, 45, 255, 3, 19, 49, 255, 2, 24, 47, 255, 0, 21, 51, 255, 0, 19, 51, 255, 4, 21, 49, 255, 5, 18, 39, 255, 1, 9, 22, 255, 1, 7, 20, 255, 1, 8, 22, 255, 2, 4, 18, 255, 3, 3, 10, 255, 0, 0, 1, 255, 1, 1, 0, 255, 0, 0, 0, 255, 1, 2, 4, 255, 0, 1, 8, 255, 5, 0, 7, 255, 2, 0, 3, 255, 2, 2, 2, 255, 3, 1, 0, 255, 1, 3, 44, 255, 38, 67, 186, 255, 46, 41, 40, 255, 9, 0, 0, 255, 18, 17, 35, 255, 18, 19, 37, 255, 3, 0, 0, 255, 3, 0, 3, 255, 2, 2, 3, 255, 2, 1, 1, 255, 0, 1, 0, 255, 1, 0, 0, 255, 1, 0, 0, 255, 1, 0, 1, 255, 2, 1, 2, 255, 4, 0, 2, 255, 4, 2, 0, 255, 2, 2, 0, 255, 3, 3, 0, 255, 6, 2, 1, 255, 7, 3, 0, 255, 9, 4, 1, 255, 9, 4, 1, 255, 10, 5, 1, 255, 12, 7, 1, 255, 12, 8, 4, 255, 12, 4, 3, 255, 14, 7, 3, 255, 11, 11, 1, 255, 13, 8, 0, 255, 17, 11, 4, 255, 19, 19, 6, 255, 28, 24, 5, 255, 36, 30, 20, 255, 47, 31, 30, 255, 42, 36, 20, 255, 34, 35, 20, 255, 43, 38, 34, 255, 47, 49, 34, 255, 45, 48, 27, 255, 47, 45, 28, 255, 46, 41, 34, 255, 47, 41, 25, 255, 44, 39, 12, 255, 41, 37, 12, 255, 42, 39, 13, 255, 53, 46, 18, 255, 59, 50, 5, 255, 56, 50, 2, 255, 55, 55, 10, 255, 56, 56, 12, 255, 66, 61, 10, 255, 73, 68, 3, 255, 66, 70, 4, 255, 71, 76, 1, 255, 87, 74, 1, 255, 77, 76, 4, 255, 71, 69, 1, 255, 84, 74, 7, 255, 98, 90, 5, 255, 109, 102, 10, 255, 102, 98, 10, 255, 104, 108, 5, 255, 121, 116, 11, 255, 101, 95, 3, 255, 100, 89, 7, 255, 99, 90, 8, 255, 95, 86, 11, 255, 99, 88, 8, 255, 100, 84, 5, 255, 97, 79, 2, 255, 99, 80, 1, 255, 97, 78, 5, 255, 93, 69, 3, 255, 98, 69, 1, 255, 100, 72, 6, 255, 97, 68, 5, 255, 102, 68, 3, 255, 101, 63, 5, 255, 105, 65, 2, 255, 107, 64, 1, 255, 106, 64, 4, 255, 107, 61, 7, 255, 109, 57, 4, 255, 124, 66, 5, 255, 138, 73, 6, 255, 141, 74, 2, 255, 167, 90, 6, 255, 168, 88, 2, 255, 173, 90, 2, 255, 172, 90, 8, 255, 183, 97, 6, 255, 175, 84, 5, 255, 195, 101, 8, 255, 174, 87, 12, 255, 159, 74, 2, 255, 191, 97, 8, 255, 187, 90, 4, 255, 147, 64, 10, 255, 171, 83, 4, 255, 183, 87, 4, 255, 139, 57, 8, 255, 151, 66, 19, 255, 166, 76, 12, 255, 140, 60, 4, 255, 120, 55, 7, 255, 153, 82, 7, 255, 146, 63, 2, 255, 110, 45, 14, 255, 108, 58, 12, 255, 129, 67, 9, 255, 157, 74, 5, 255, 149, 64, 4, 255, 165, 80, 12, 255, 138, 65, 7, 255, 114, 54, 8, 255, 133, 58, 13, 255, 132, 55, 9, 255, 126, 62, 8, 255, 148, 87, 13, 255, 157, 79, 14, 255, 168, 88, 11, 255, 161, 87, 4, 255, 142, 62, 4, 255, 143, 63, 16, 255, 158, 83, 21, 255, 148, 74, 2, 255, 154, 77, 12, 255, 168, 94, 16, 255, 165, 88, 11, 255, 152, 74, 3, 255, 151, 78, 18, 255, 128, 67, 6, 255, 122, 57, 9, 255, 150, 70, 10, 255, 144, 68, 4, 255, 133, 62, 4, 255, 138, 67, 9, 255, 135, 64, 13, 255, 131, 64, 9, 255, 129, 65, 7, 255, 131, 65, 5, 255, 134, 65, 6, 255, 128, 60, 4, 255, 128, 59, 14, 255, 128, 64, 8, 255, 124, 65, 2, 255, 123, 64, 6, 255, 126, 68, 3, 255, 124, 66, 5, 255, 122, 63, 2, 255, 126, 65, 7, 255, 132, 69, 4, 255, 132, 66, 8, 255, 132, 67, 10, 255, 138, 71, 4, 255, 140, 69, 11, 255, 137, 69, 6, 255, 137, 69, 9, 255, 138, 70, 4, 255, 144, 77, 11, 255, 156, 86, 4, 255, 162, 84, 8, 255, 164, 90, 12, 255, 163, 91, 11, 255, 171, 94, 5, 255, 159, 78, 10, 255, 142, 73, 8, 255, 137, 67, 2, 255, 163, 88, 12, 255, 180, 103, 18, 255, 175, 86, 9, 255, 181, 88, 13, 255, 166, 82, 8, 255, 164, 83, 4, 255, 182, 102, 12, 255, 181, 99, 11, 255, 178, 95, 12, 255, 171, 89, 13, 255, 161, 83, 8, 255, 169, 83, 7, 255, 195, 107, 15, 255, 196, 109, 7, 255, 192, 103, 10, 255, 180, 93, 3, 255, 189, 103, 16, 255, 189, 106, 6, 255, 185, 98, 5, 255, 184, 94, 7, 255, 179, 94, 14, 255, 180, 96, 12, 255, 185, 101, 3, 255, 183, 101, 8, 255, 187, 106, 6, 255, 183, 101, 9, 255, 184, 104, 7, 255, 196, 120, 8, 255, 185, 106, 12, 255, 186, 107, 7, 255, 184, 106, 9, 255, 182, 108, 8, 255, 181, 103, 8, 255, 183, 98, 14, 255, 180, 101, 9, 255, 175, 102, 10, 255, 186, 112, 10, 255, 197, 122, 13, 255, 196, 121, 9, 255, 172, 94, 9, 255, 170, 91, 6, 255, 175, 97, 6, 255, 186, 108, 10, 255, 188, 110, 15, 255, 200, 125, 7, 255, 201, 123, 6, 255, 194, 115, 6, 255, 196, 115, 18, 255, 193, 114, 10, 255, 194, 116, 11, 255, 198, 123, 9, 255, 198, 122, 6, 255, 191, 114, 2, 255, 187, 108, 6, 255, 196, 120, 5, 255, 209, 139, 4, 255, 206, 128, 5, 255, 200, 120, 5, 255, 205, 126, 3, 255, 209, 134, 0, 255, 210, 140, 2, 255, 208, 140, 4, 255, 216, 150, 10, 255, 217, 156, 4, 255, 225, 168, 2, 255, 229, 169, 2, 255, 227, 163, 1, 255, 218, 152, 3, 255, 205, 138, 5, 255, 208, 139, 5, 255, 210, 147, 4, 255, 202, 142, 2, 255, 198, 138, 8, 255, 200, 138, 5, 255, 198, 133, 3, 255, 204, 145, 7, 255, 221, 165, 9, 255, 229, 173, 3, 255, 227, 168, 2, 255, 225, 164, 5, 255, 225, 166, 4, 255, 227, 169, 1, 255, 229, 172, 2, 255, 227, 171, 1, 255, 228, 172, 0, 255, 225, 168, 3, 255, 225, 166, 4, 255, 230, 171, 0, 255, 226, 168, 2, 255, 213, 152, 11, 255, 200, 135, 7, 255, 188, 116, 8, 255, 190, 115, 9, 255, 183, 112, 0, 255, 166, 91, 6, 255, 158, 83, 2, 255, 158, 82, 1, 255, 149, 74, 2, 255, 153, 80, 4, 255, 164, 91, 4, 255, 166, 93, 2, 255, 172, 97, 8, 255, 160, 90, 9, 255, 161, 94, 6, 255, 189, 124, 9, 255, 179, 118, 2, 255, 183, 127, 15, 255, 183, 133, 13, 255, 178, 124, 14, 255, 167, 112, 16, 255, 161, 103, 8, 255, 145, 87, 7, 255, 150, 91, 12, 255, 184, 118, 6, 255, 187, 117, 9, 255, 188, 112, 17, 255, 192, 115, 6, 255, 187, 111, 4, 255, 181, 107, 7, 255, 196, 131, 6, 255, 201, 144, 4, 255, 199, 138, 4, 255, 197, 129, 10, 255, 195, 125, 4, 255, 200, 124, 4, 255, 201, 126, 4, 255, 205, 128, 3, 255, 206, 126, 4, 255, 202, 127, 8, 255, 203, 130, 5, 255, 205, 132, 9, 255, 206, 131, 16, 255, 207, 129, 9, 255, 205, 124, 17, 255, 177, 94, 12, 255, 165, 79, 11, 255, 177, 94, 11, 255, 195, 114, 12, 255, 199, 118, 9, 255, 195, 113, 6, 255, 192, 110, 1, 255, 191, 105, 5, 255, 188, 101, 6, 255, 180, 91, 4, 255, 170, 80, 4, 255, 160, 78, 3, 255, 147, 70, 4, 255, 146, 64, 9, 255, 142, 59, 5, 255, 139, 56, 2, 255, 143, 62, 6, 255, 137, 61, 2, 255, 136, 55, 5, 255, 132, 49, 2, 255, 128, 47, 5, 255, 118, 43, 3, 255, 113, 44, 4, 255, 109, 44, 4, 255, 107, 38, 2, 255, 110, 36, 1, 255, 112, 38, 1, 255, 115, 40, 4, 255, 113, 37, 5, 255, 109, 39, 3, 255, 113, 46, 5, 255, 119, 42, 5, 255, 99, 29, 1, 255, 94, 35, 4, 255, 105, 34, 2, 255, 109, 36, 1, 255, 114, 39, 2, 255, 113, 36, 2, 255, 106, 40, 2, 255, 114, 44, 1, 255, 122, 42, 3, 255, 128, 50, 9, 255, 131, 49, 3, 255, 119, 46, 2, 255, 115, 44, 3, 255, 112, 42, 4, 255, 106, 35, 3, 255, 99, 28, 3, 255, 97, 31, 4, 255, 98, 37, 5, 255, 102, 34, 5, 255, 101, 35, 8, 255, 105, 34, 5, 255, 111, 37, 1, 255, 110, 33, 2, 255, 136, 45, 4, 255, 164, 66, 5, 255, 168, 73, 4, 255, 162, 71, 0, 255, 158, 66, 2, 255, 153, 60, 3, 255, 156, 68, 1, 255, 164, 77, 0, 255, 162, 73, 3, 255, 163, 73, 5, 255, 160, 69, 5, 255, 2, 0, 14, 255, 3, 2, 25, 255, 2, 21, 69, 255, 3, 38, 85, 255, 4, 34, 75, 255, 2, 23, 65, 255, 0, 27, 60, 255, 1, 27, 53, 255, 2, 23, 50, 255, 1, 20, 46, 255, 1, 21, 37, 255, 2, 21, 36, 255, 4, 21, 42, 255, 2, 22, 55, 255, 1, 22, 50, 255, 1, 21, 34, 255, 3, 19, 41, 255, 1, 13, 42, 255, 0, 10, 34, 255, 0, 7, 24, 255, 2, 7, 17, 255, 4, 5, 10, 255, 2, 3, 7, 255, 0, 0, 4, 255, 0, 0, 1, 255, 2, 2, 0, 255, 1, 1, 4, 255, 2, 2, 4, 255, 1, 0, 3, 255, 5, 2, 3, 255, 3, 0, 9, 255, 15, 48, 175, 255, 50, 60, 86, 255, 19, 9, 0, 255, 18, 14, 29, 255, 32, 23, 60, 255, 2, 3, 4, 255, 4, 2, 2, 255, 2, 2, 0, 255, 2, 1, 1, 255, 2, 2, 2, 255, 2, 2, 1, 255, 1, 1, 0, 255, 2, 1, 0, 255, 2, 1, 1, 255, 2, 1, 3, 255, 4, 0, 1, 255, 4, 0, 0, 255, 2, 1, 0, 255, 2, 2, 0, 255, 6, 2, 1, 255, 11, 2, 0, 255, 10, 2, 1, 255, 9, 4, 1, 255, 11, 6, 1, 255, 12, 7, 1, 255, 10, 7, 2, 255, 11, 7, 4, 255, 11, 6, 1, 255, 14, 11, 1, 255, 22, 13, 4, 255, 19, 11, 4, 255, 18, 16, 4, 255, 30, 23, 7, 255, 40, 27, 12, 255, 48, 35, 20, 255, 48, 38, 26, 255, 42, 35, 38, 255, 46, 44, 52, 255, 45, 48, 42, 255, 45, 45, 34, 255, 47, 45, 32, 255, 49, 46, 32, 255, 49, 46, 28, 255, 52, 48, 26, 255, 44, 40, 14, 255, 47, 43, 11, 255, 50, 43, 16, 255, 58, 54, 13, 255, 60, 57, 7, 255, 57, 55, 4, 255, 64, 61, 9, 255, 72, 67, 11, 255, 69, 70, 6, 255, 66, 70, 10, 255, 75, 74, 12, 255, 82, 67, 3, 255, 66, 55, 6, 255, 81, 77, 4, 255, 92, 97, 11, 255, 90, 100, 17, 255, 86, 101, 18, 255, 94, 98, 9, 255, 91, 95, 4, 255, 128, 116, 23, 255, 115, 96, 9, 255, 90, 78, 4, 255, 93, 81, 3, 255, 91, 79, 1, 255, 92, 76, 2, 255, 96, 75, 1, 255, 92, 65, 11, 255, 94, 66, 13, 255, 99, 69, 2, 255, 93, 69, 2, 255, 85, 71, 2, 255, 90, 69, 1, 255, 100, 66, 2, 255, 103, 67, 6, 255, 100, 65, 2, 255, 105, 63, 2, 255, 107, 61, 3, 255, 107, 62, 7, 255, 108, 63, 7, 255, 115, 64, 5, 255, 106, 62, 7, 255, 99, 53, 2, 255, 120, 67, 6, 255, 143, 74, 8, 255, 143, 71, 3, 255, 150, 79, 2, 255, 150, 72, 12, 255, 158, 75, 9, 255, 138, 68, 0, 255, 179, 85, 5, 255, 134, 61, 5, 255, 147, 77, 15, 255, 169, 76, 6, 255, 129, 56, 1, 255, 145, 65, 15, 255, 157, 74, 10, 255, 121, 57, 0, 255, 122, 59, 4, 255, 167, 83, 5, 255, 136, 58, 6, 255, 104, 58, 7, 255, 123, 66, 6, 255, 151, 75, 5, 255, 126, 61, 6, 255, 123, 62, 10, 255, 123, 58, 5, 255, 120, 55, 6, 255, 112, 48, 4, 255, 105, 35, 4, 255, 119, 45, 6, 255, 140, 68, 16, 255, 151, 74, 8, 255, 176, 101, 6, 255, 184, 101, 25, 255, 198, 105, 24, 255, 200, 108, 7, 255, 189, 99, 15, 255, 197, 107, 22, 255, 199, 109, 13, 255, 199, 114, 24, 255, 202, 122, 19, 255, 197, 117, 10, 255, 196, 114, 14, 255, 192, 108, 15, 255, 190, 107, 16, 255, 171, 91, 12, 255, 176, 95, 15, 255, 181, 100, 12, 255, 174, 93, 14, 255, 157, 81, 13, 255, 145, 72, 10, 255, 129, 61, 5, 255, 129, 58, 13, 255, 134, 66, 4, 255, 128, 66, 1, 255, 129, 65, 3, 255, 133, 65, 5, 255, 132, 67, 4, 255, 136, 64, 9, 255, 131, 65, 7, 255, 125, 61, 11, 255, 125, 59, 14, 255, 124, 61, 7, 255, 121, 63, 8, 255, 125, 61, 11, 255, 128, 60, 11, 255, 127, 60, 9, 255, 133, 69, 15, 255, 133, 73, 3, 255, 136, 71, 9, 255, 140, 69, 7, 255, 143, 71, 7, 255, 133, 61, 14, 255, 136, 68, 8, 255, 143, 76, 9, 255, 150, 76, 12, 255, 147, 68, 13, 255, 133, 62, 10, 255, 154, 82, 18, 255, 173, 96, 5, 255, 176, 95, 7, 255, 170, 91, 7, 255, 183, 101, 9, 255, 182, 100, 11, 255, 182, 109, 21, 255, 193, 119, 17, 255, 194, 112, 7, 255, 188, 111, 10, 255, 197, 120, 15, 255, 195, 105, 4, 255, 187, 102, 8, 255, 196, 117, 19, 255, 197, 116, 7, 255, 211, 121, 13, 255, 199, 112, 9, 255, 160, 80, 8, 255, 171, 88, 10, 255, 208, 130, 11, 255, 213, 135, 13, 255, 215, 134, 18, 255, 193, 111, 14, 255, 193, 112, 15, 255, 206, 129, 9, 255, 207, 123, 10, 255, 193, 105, 6, 255, 211, 135, 8, 255, 215, 142, 10, 255, 215, 137, 19, 255, 210, 137, 9, 255, 212, 140, 5, 255, 217, 145, 10, 255, 216, 145, 18, 255, 213, 144, 9, 255, 219, 150, 11, 255, 216, 146, 13, 255, 215, 148, 12, 255, 218, 147, 15, 255, 210, 138, 10, 255, 203, 137, 9, 255, 217, 150, 8, 255, 222, 151, 10, 255, 220, 157, 9, 255, 223, 156, 3, 255, 221, 149, 12, 255, 208, 134, 11, 255, 200, 124, 17, 255, 206, 136, 7, 255, 221, 154, 4, 255, 211, 141, 8, 255, 212, 145, 3, 255, 217, 153, 4, 255, 223, 159, 8, 255, 214, 148, 13, 255, 205, 134, 2, 255, 208, 137, 9, 255, 209, 141, 8, 255, 207, 140, 4, 255, 203, 135, 6, 255, 201, 130, 6, 255, 208, 138, 10, 255, 203, 135, 2, 255, 203, 129, 4, 255, 204, 128, 8, 255, 211, 137, 11, 255, 214, 146, 6, 255, 213, 148, 2, 255, 211, 150, 0, 255, 217, 158, 4, 255, 226, 165, 1, 255, 229, 164, 3, 255, 224, 159, 12, 255, 219, 155, 10, 255, 212, 146, 6, 255, 205, 136, 8, 255, 202, 135, 0, 255, 209, 145, 10, 255, 201, 138, 4, 255, 202, 140, 3, 255, 196, 133, 4, 255, 209, 147, 6, 255, 220, 164, 9, 255, 221, 165, 3, 255, 225, 167, 0, 255, 222, 163, 0, 255, 223, 164, 2, 255, 232, 173, 10, 255, 230, 173, 4, 255, 227, 168, 2, 255, 224, 166, 5, 255, 226, 169, 2, 255, 225, 167, 1, 255, 227, 168, 5, 255, 226, 166, 1, 255, 225, 166, 2, 255, 217, 158, 4, 255, 203, 143, 0, 255, 191, 123, 4, 255, 188, 116, 4, 255, 180, 105, 7, 255, 171, 94, 0, 255, 162, 85, 5, 255, 161, 85, 3, 255, 159, 84, 8, 255, 161, 86, 5, 255, 160, 82, 4, 255, 174, 97, 2, 255, 177, 101, 5, 255, 158, 81, 1, 255, 160, 90, 4, 255, 181, 119, 12, 255, 182, 122, 9, 255, 189, 126, 7, 255, 186, 130, 12, 255, 185, 125, 18, 255, 184, 123, 12, 255, 177, 115, 8, 255, 162, 110, 4, 255, 164, 106, 6, 255, 193, 124, 4, 255, 199, 132, 6, 255, 197, 128, 2, 255, 189, 117, 4, 255, 185, 115, 2, 255, 196, 132, 0, 255, 202, 141, 2, 255, 200, 138, 1, 255, 197, 130, 5, 255, 194, 123, 5, 255, 196, 123, 6, 255, 199, 124, 2, 255, 202, 125, 2, 255, 204, 124, 8, 255, 204, 125, 5, 255, 204, 127, 13, 255, 204, 128, 18, 255, 205, 130, 17, 255, 207, 131, 23, 255, 209, 131, 19, 255, 208, 130, 13, 255, 201, 123, 16, 255, 199, 121, 11, 255, 202, 124, 6, 255, 198, 118, 0, 255, 195, 115, 4, 255, 193, 106, 8, 255, 185, 96, 0, 255, 184, 94, 2, 255, 181, 92, 4, 255, 170, 83, 2, 255, 163, 82, 5, 255, 161, 80, 6, 255, 153, 72, 3, 255, 144, 65, 2, 255, 141, 57, 6, 255, 144, 55, 5, 255, 145, 59, 5, 255, 132, 53, 3, 255, 128, 47, 1, 255, 129, 46, 1, 255, 127, 45, 2, 255, 123, 45, 3, 255, 120, 48, 5, 255, 119, 49, 5, 255, 112, 40, 3, 255, 119, 46, 7, 255, 126, 51, 7, 255, 120, 45, 1, 255, 118, 44, 5, 255, 113, 43, 5, 255, 110, 43, 2, 255, 118, 41, 2, 255, 111, 36, 2, 255, 109, 39, 4, 255, 116, 45, 6, 255, 115, 44, 2, 255, 114, 41, 1, 255, 113, 39, 5, 255, 119, 42, 9, 255, 122, 43, 6, 255, 114, 42, 3, 255, 111, 36, 1, 255, 117, 40, 5, 255, 111, 37, 4, 255, 105, 38, 3, 255, 104, 39, 5, 255, 97, 32, 3, 255, 92, 27, 0, 255, 96, 32, 5, 255, 100, 38, 9, 255, 102, 34, 1, 255, 112, 34, 6, 255, 110, 38, 6, 255, 106, 40, 1, 255, 113, 32, 6, 255, 126, 44, 8, 255, 156, 67, 3, 255, 169, 73, 1, 255, 164, 71, 3, 255, 164, 72, 2, 255, 166, 75, 3, 255, 166, 77, 5, 255, 161, 73, 3, 255, 158, 70, 2, 255, 159, 70, 3, 255, 155, 66, 2, 255, 3, 1, 21, 255, 1, 22, 67, 255, 4, 37, 85, 255, 1, 34, 86, 255, 2, 36, 83, 255, 2, 25, 62, 255, 1, 30, 68, 255, 1, 33, 70, 255, 1, 26, 65, 255, 3, 22, 58, 255, 2, 21, 40, 255, 2, 22, 40, 255, 0, 21, 50, 255, 3, 22, 56, 255, 2, 20, 58, 255, 0, 17, 46, 255, 1, 18, 46, 255, 5, 22, 39, 255, 1, 17, 33, 255, 0, 11, 22, 255, 1, 9, 19, 255, 0, 3, 15, 255, 2, 6, 12, 255, 1, 2, 5, 255, 0, 1, 4, 255, 2, 1, 8, 255, 3, 0, 12, 255, 1, 2, 5, 255, 1, 2, 8, 255, 2, 0, 0, 255, 4, 24, 143, 255, 39, 74, 159, 255, 30, 22, 0, 255, 22, 11, 8, 255, 23, 29, 58, 255, 7, 6, 18, 255, 4, 1, 0, 255, 1, 3, 3, 255, 1, 0, 1, 255, 0, 0, 0, 255, 1, 0, 0, 255, 4, 0, 1, 255, 3, 1, 3, 255, 3, 1, 2, 255, 1, 0, 1, 255, 1, 0, 0, 255, 4, 1, 1, 255, 5, 1, 1, 255, 5, 3, 0, 255, 6, 3, 0, 255, 10, 4, 1, 255, 13, 4, 1, 255, 11, 2, 1, 255, 10, 1, 0, 255, 12, 5, 0, 255, 13, 8, 0, 255, 12, 9, 1, 255, 13, 8, 4, 255, 13, 9, 1, 255, 21, 11, 2, 255, 22, 6, 0, 255, 14, 10, 1, 255, 21, 13, 4, 255, 26, 16, 6, 255, 33, 23, 14, 255, 40, 28, 11, 255, 50, 39, 30, 255, 51, 44, 45, 255, 56, 53, 61, 255, 50, 50, 57, 255, 47, 47, 42, 255, 55, 51, 43, 255, 51, 49, 37, 255, 51, 48, 34, 255, 53, 52, 24, 255, 56, 55, 15, 255, 46, 42, 10, 255, 46, 44, 10, 255, 51, 49, 11, 255, 56, 53, 7, 255, 63, 59, 2, 255, 66, 62, 1, 255, 69, 66, 4, 255, 68, 67, 5, 255, 65, 69, 5, 255, 61, 65, 5, 255, 80, 75, 26, 255, 147, 156, 84, 255, 170, 186, 75, 255, 183, 194, 64, 255, 160, 162, 21, 255, 106, 111, 7, 255, 100, 92, 8, 255, 86, 86, 6, 255, 102, 94, 8, 255, 116, 91, 13, 255, 89, 73, 3, 255, 90, 73, 2, 255, 89, 66, 1, 255, 93, 67, 6, 255, 98, 71, 1, 255, 96, 65, 10, 255, 97, 66, 10, 255, 94, 68, 1, 255, 89, 64, 1, 255, 86, 64, 3, 255, 89, 64, 3, 255, 96, 64, 3, 255, 97, 60, 5, 255, 100, 65, 5, 255, 101, 62, 2, 255, 104, 61, 2, 255, 106, 62, 3, 255, 109, 64, 7, 255, 110, 60, 4, 255, 109, 58, 1, 255, 113, 64, 1, 255, 108, 61, 7, 255, 108, 54, 6, 255, 108, 54, 8, 255, 106, 56, 0, 255, 109, 60, 9, 255, 105, 51, 9, 255, 119, 64, 7, 255, 128, 58, 5, 255, 102, 56, 9, 255, 140, 69, 8, 255, 110, 49, 6, 255, 84, 56, 3, 255, 131, 71, 5, 255, 139, 62, 3, 255, 119, 64, 3, 255, 120, 65, 3, 255, 121, 63, 3, 255, 123, 69, 4, 255, 120, 62, 3, 255, 136, 68, 11, 255, 131, 62, 3, 255, 131, 56, 5, 255, 147, 66, 16, 255, 107, 38, 2, 255, 95, 34, 8, 255, 119, 61, 9, 255, 154, 78, 8, 255, 183, 102, 7, 255, 186, 100, 7, 255, 200, 115, 11, 255, 200, 112, 9, 255, 205, 122, 16, 255, 211, 126, 30, 255, 214, 127, 21, 255, 204, 129, 16, 255, 211, 132, 28, 255, 214, 128, 10, 255, 209, 123, 10, 255, 202, 116, 10, 255, 200, 115, 5, 255, 198, 110, 9, 255, 198, 112, 15, 255, 191, 107, 15, 255, 190, 104, 11, 255, 182, 101, 15, 255, 178, 98, 8, 255, 189, 99, 15, 255, 182, 90, 15, 255, 179, 98, 17, 255, 171, 92, 6, 255, 141, 69, 10, 255, 123, 65, 8, 255, 125, 66, 5, 255, 125, 61, 6, 255, 126, 65, 10, 255, 123, 63, 3, 255, 126, 65, 7, 255, 129, 63, 7, 255, 132, 67, 5, 255, 126, 64, 6, 255, 132, 70, 9, 255, 138, 72, 4, 255, 128, 61, 7, 255, 127, 65, 5, 255, 138, 73, 13, 255, 146, 75, 13, 255, 142, 67, 6, 255, 143, 72, 10, 255, 150, 76, 17, 255, 151, 74, 6, 255, 146, 72, 12, 255, 140, 67, 6, 255, 156, 83, 7, 255, 167, 88, 10, 255, 171, 88, 7, 255, 157, 93, 11, 255, 167, 103, 14, 255, 179, 105, 11, 255, 190, 110, 20, 255, 194, 124, 15, 255, 194, 125, 14, 255, 199, 122, 9, 255, 202, 122, 8, 255, 203, 127, 12, 255, 197, 127, 22, 255, 202, 128, 22, 255, 200, 119, 12, 255, 193, 110, 17, 255, 193, 121, 15, 255, 197, 127, 5, 255, 204, 130, 4, 255, 202, 123, 13, 255, 184, 103, 18, 255, 184, 112, 9, 255, 202, 134, 14, 255, 207, 140, 7, 255, 205, 134, 16, 255, 206, 136, 7, 255, 205, 133, 10, 255, 204, 134, 13, 255, 208, 138, 2, 255, 204, 120, 8, 255, 181, 93, 3, 255, 201, 126, 8, 255, 205, 133, 12, 255, 206, 131, 13, 255, 206, 135, 7, 255, 212, 136, 10, 255, 206, 131, 7, 255, 208, 134, 14, 255, 210, 139, 14, 255, 209, 137, 11, 255, 211, 138, 16, 255, 211, 140, 11, 255, 204, 134, 14, 255, 203, 137, 10, 255, 213, 147, 6, 255, 211, 147, 3, 255, 212, 145, 4, 255, 215, 145, 7, 255, 212, 141, 10, 255, 205, 132, 7, 255, 209, 135, 21, 255, 212, 141, 8, 255, 216, 146, 6, 255, 212, 143, 7, 255, 207, 134, 12, 255, 214, 148, 10, 255, 216, 156, 4, 255, 217, 159, 2, 255, 220, 161, 0, 255, 218, 153, 5, 255, 216, 150, 9, 255, 219, 158, 2, 255, 225, 164, 1, 255, 227, 164, 6, 255, 224, 163, 3, 255, 225, 162, 6, 255, 218, 153, 4, 255, 213, 147, 3, 255, 209, 141, 6, 255, 208, 142, 9, 255, 213, 149, 8, 255, 216, 154, 5, 255, 222, 161, 3, 255, 224, 165, 0, 255, 226, 163, 2, 255, 218, 148, 3, 255, 216, 149, 2, 255, 217, 154, 3, 255, 202, 136, 0, 255, 203, 132, 7, 255, 205, 138, 2, 255, 205, 140, 5, 255, 198, 131, 4, 255, 193, 127, 11, 255, 207, 145, 10, 255, 220, 163, 2, 255, 220, 164, 2, 255, 219, 163, 2, 255, 220, 163, 3, 255, 225, 167, 4, 255, 224, 167, 0, 255, 226, 168, 0, 255, 224, 165, 2, 255, 221, 160, 4, 255, 221, 160, 1, 255, 223, 164, 1, 255, 222, 163, 4, 255, 227, 167, 11, 255, 224, 164, 4, 255, 225, 165, 4, 255, 216, 160, 0, 255, 214, 158, 1, 255, 209, 149, 1, 255, 193, 122, 9, 255, 173, 95, 1, 255, 164, 91, 0, 255, 166, 92, 6, 255, 159, 87, 2, 255, 165, 94, 2, 255, 177, 106, 0, 255, 165, 93, 3, 255, 165, 90, 6, 255, 170, 94, 10, 255, 157, 76, 2, 255, 172, 93, 4, 255, 192, 128, 2, 255, 178, 116, 4, 255, 182, 116, 15, 255, 184, 124, 13, 255, 187, 128, 14, 255, 182, 118, 10, 255, 183, 116, 4, 255, 184, 121, 3, 255, 182, 121, 10, 255, 180, 113, 7, 255, 198, 128, 15, 255, 191, 125, 5, 255, 180, 115, 4, 255, 195, 134, 4, 255, 203, 146, 1, 255, 195, 135, 8, 255, 198, 129, 5, 255, 196, 128, 3, 255, 196, 126, 1, 255, 199, 123, 16, 255, 199, 120, 15, 255, 202, 123, 4, 255, 205, 126, 3, 255, 207, 129, 3, 255, 205, 128, 13, 255, 206, 129, 22, 255, 208, 132, 18, 255, 206, 132, 10, 255, 205, 131, 8, 255, 205, 127, 12, 255, 206, 126, 16, 255, 203, 123, 14, 255, 202, 121, 13, 255, 194, 110, 5, 255, 190, 105, 2, 255, 185, 97, 4, 255, 179, 89, 1, 255, 180, 91, 1, 255, 176, 88, 0, 255, 171, 85, 1, 255, 170, 87, 4, 255, 161, 81, 4, 255, 154, 72, 3, 255, 155, 67, 6, 255, 148, 61, 5, 255, 142, 57, 3, 255, 143, 57, 7, 255, 138, 52, 6, 255, 132, 51, 4, 255, 129, 47, 2, 255, 126, 43, 0, 255, 126, 46, 2, 255, 122, 47, 1, 255, 124, 47, 2, 255, 121, 47, 5, 255, 121, 47, 3, 255, 126, 50, 2, 255, 123, 46, 0, 255, 121, 47, 4, 255, 117, 46, 5, 255, 119, 47, 6, 255, 122, 44, 5, 255, 123, 46, 3, 255, 125, 44, 3, 255, 123, 47, 8, 255, 117, 41, 2, 255, 120, 47, 3, 255, 124, 50, 2, 255, 132, 45, 0, 255, 126, 43, 2, 255, 107, 45, 2, 255, 107, 39, 1, 255, 109, 37, 2, 255, 120, 39, 5, 255, 113, 37, 5, 255, 110, 40, 5, 255, 103, 35, 0, 255, 105, 36, 2, 255, 111, 38, 3, 255, 116, 41, 4, 255, 113, 39, 1, 255, 112, 37, 1, 255, 110, 44, 0, 255, 117, 50, 3, 255, 129, 48, 8, 255, 134, 54, 5, 255, 159, 73, 2, 255, 173, 78, 5, 255, 168, 74, 7, 255, 163, 72, 4, 255, 163, 73, 3, 255, 163, 74, 4, 255, 160, 71, 4, 255, 157, 68, 1, 255, 157, 69, 0, 255, 158, 69, 0, 255, 4, 17, 63, 255, 0, 38, 72, 255, 2, 31, 79, 255, 2, 30, 75, 255, 4, 33, 76, 255, 3, 24, 72, 255, 0, 32, 72, 255, 5, 30, 69, 255, 4, 14, 43, 255, 5, 18, 37, 255, 3, 23, 52, 255, 0, 21, 58, 255, 6, 26, 50, 255, 1, 22, 45, 255, 2, 22, 47, 255, 0, 18, 32, 255, 1, 17, 40, 255, 3, 16, 40, 255, 3, 16, 35, 255, 2, 11, 33, 255, 3, 11, 26, 255, 0, 7, 12, 255, 3, 8, 12, 255, 2, 4, 12, 255, 2, 1, 14, 255, 4, 0, 13, 255, 3, 1, 8, 255, 0, 0, 7, 255, 1, 0, 0, 255, 0, 9, 94, 255, 14, 78, 210, 255, 37, 39, 28, 255, 10, 7, 0, 255, 24, 25, 55, 255, 10, 18, 33, 255, 4, 0, 4, 255, 3, 0, 6, 255, 1, 0, 3, 255, 2, 1, 1, 255, 2, 1, 1, 255, 3, 0, 1, 255, 4, 0, 1, 255, 5, 2, 3, 255, 4, 2, 1, 255, 2, 1, 0, 255, 4, 1, 0, 255, 6, 3, 2, 255, 7, 3, 2, 255, 8, 3, 0, 255, 9, 2, 0, 255, 11, 3, 1, 255, 9, 3, 0, 255, 10, 4, 1, 255, 12, 4, 2, 255, 15, 6, 2, 255, 19, 10, 2, 255, 18, 10, 2, 255, 17, 7, 1, 255, 20, 10, 3, 255, 25, 9, 1, 255, 26, 11, 3, 255, 20, 15, 2, 255, 17, 9, 0, 255, 24, 16, 5, 255, 32, 24, 9, 255, 38, 27, 22, 255, 35, 31, 29, 255, 45, 49, 39, 255, 60, 55, 55, 255, 58, 49, 53, 255, 55, 50, 46, 255, 55, 51, 43, 255, 55, 54, 31, 255, 54, 53, 33, 255, 58, 55, 36, 255, 55, 52, 18, 255, 54, 50, 16, 255, 53, 53, 11, 255, 62, 56, 6, 255, 63, 56, 4, 255, 66, 64, 12, 255, 62, 62, 6, 255, 67, 65, 2, 255, 79, 68, 11, 255, 77, 69, 7, 255, 65, 55, 0, 255, 136, 127, 45, 255, 227, 240, 103, 255, 239, 242, 88, 255, 240, 230, 23, 255, 154, 133, 6, 255, 88, 75, 17, 255, 84, 77, 5, 255, 79, 71, 10, 255, 92, 79, 0, 255, 117, 81, 3, 255, 83, 68, 1, 255, 86, 66, 2, 255, 94, 66, 6, 255, 97, 68, 4, 255, 92, 63, 1, 255, 92, 63, 3, 255, 98, 66, 2, 255, 103, 71, 7, 255, 110, 71, 5, 255, 120, 69, 7, 255, 116, 71, 6, 255, 111, 71, 2, 255, 123, 73, 5, 255, 123, 67, 2, 255, 119, 62, 5, 255, 123, 66, 9, 255, 121, 65, 7, 255, 119, 63, 3, 255, 124, 65, 0, 255, 127, 70, 11, 255, 128, 71, 4, 255, 130, 69, 4, 255, 132, 64, 7, 255, 132, 61, 8, 255, 131, 60, 2, 255, 119, 57, 7, 255, 113, 58, 6, 255, 122, 58, 15, 255, 126, 57, 6, 255, 120, 63, 3, 255, 118, 53, 6, 255, 116, 57, 7, 255, 126, 60, 6, 255, 106, 54, 7, 255, 120, 59, 8, 255, 107, 52, 3, 255, 106, 41, 2, 255, 107, 40, 6, 255, 102, 41, 8, 255, 111, 37, 4, 255, 112, 44, 10, 255, 122, 47, 4, 255, 172, 76, 12, 255, 153, 61, 5, 255, 120, 43, 3, 255, 113, 42, 10, 255, 142, 59, 9, 255, 171, 76, 6, 255, 181, 87, 13, 255, 200, 99, 13, 255, 193, 94, 4, 255, 202, 108, 6, 255, 215, 127, 6, 255, 207, 121, 15, 255, 209, 123, 15, 255, 212, 129, 19, 255, 208, 119, 8, 255, 210, 116, 13, 255, 206, 117, 11, 255, 201, 111, 15, 255, 201, 110, 14, 255, 202, 113, 11, 255, 205, 119, 10, 255, 199, 115, 10, 255, 201, 112, 10, 255, 188, 100, 20, 255, 195, 113, 4, 255, 188, 103, 2, 255, 179, 90, 7, 255, 189, 104, 24, 255, 185, 106, 4, 255, 183, 101, 8, 255, 172, 95, 6, 255, 159, 83, 13, 255, 152, 75, 11, 255, 146, 78, 6, 255, 133, 72, 5, 255, 126, 66, 10, 255, 127, 67, 5, 255, 130, 67, 15, 255, 137, 69, 7, 255, 149, 76, 6, 255, 151, 78, 8, 255, 135, 68, 17, 255, 132, 66, 9, 255, 150, 83, 9, 255, 141, 66, 10, 255, 149, 71, 16, 255, 163, 81, 9, 255, 170, 90, 17, 255, 168, 95, 9, 255, 190, 116, 17, 255, 191, 112, 12, 255, 180, 100, 1, 255, 191, 109, 14, 255, 195, 114, 9, 255, 190, 109, 14, 255, 186, 102, 10, 255, 198, 119, 11, 255, 201, 124, 20, 255, 201, 124, 23, 255, 205, 128, 18, 255, 198, 123, 18, 255, 200, 125, 7, 255, 210, 134, 18, 255, 207, 135, 22, 255, 205, 132, 9, 255, 205, 129, 8, 255, 205, 129, 21, 255, 205, 133, 18, 255, 210, 131, 12, 255, 205, 123, 7, 255, 192, 110, 8, 255, 205, 126, 13, 255, 214, 136, 10, 255, 207, 136, 9, 255, 207, 135, 8, 255, 209, 137, 11, 255, 208, 135, 7, 255, 209, 135, 7, 255, 210, 133, 15, 255, 211, 135, 17, 255, 189, 103, 11, 255, 180, 91, 9, 255, 202, 125, 24, 255, 205, 133, 18, 255, 207, 133, 9, 255, 205, 133, 10, 255, 203, 128, 13, 255, 204, 130, 18, 255, 205, 136, 4, 255, 207, 136, 7, 255, 209, 138, 19, 255, 204, 133, 13, 255, 205, 134, 17, 255, 206, 135, 17, 255, 209, 138, 9, 255, 210, 137, 3, 255, 212, 141, 13, 255, 216, 147, 13, 255, 212, 144, 10, 255, 210, 142, 9, 255, 210, 142, 9, 255, 214, 148, 2, 255, 212, 144, 8, 255, 211, 143, 6, 255, 207, 138, 9, 255, 212, 144, 9, 255, 219, 151, 11, 255, 220, 153, 4, 255, 218, 155, 1, 255, 218, 155, 5, 255, 216, 153, 7, 255, 215, 154, 4, 255, 221, 160, 8, 255, 222, 157, 13, 255, 219, 155, 5, 255, 223, 163, 0, 255, 224, 160, 6, 255, 223, 155, 7, 255, 216, 149, 7, 255, 210, 146, 2, 255, 212, 151, 0, 255, 223, 164, 3, 255, 228, 168, 2, 255, 232, 169, 3, 255, 229, 170, 2, 255, 222, 163, 2, 255, 210, 146, 2, 255, 211, 141, 4, 255, 215, 144, 4, 255, 211, 138, 11, 255, 190, 117, 6, 255, 202, 136, 5, 255, 200, 133, 3, 255, 194, 125, 1, 255, 206, 143, 6, 255, 218, 159, 5, 255, 217, 159, 5, 255, 219, 163, 1, 255, 222, 164, 3, 255, 216, 161, 5, 255, 220, 164, 7, 255, 221, 163, 3, 255, 221, 159, 5, 255, 219, 154, 6, 255, 217, 153, 3, 255, 221, 159, 0, 255, 219, 157, 0, 255, 216, 154, 4, 255, 216, 156, 6, 255, 216, 158, 3, 255, 219, 160, 5, 255, 222, 163, 10, 255, 214, 158, 0, 255, 214, 157, 2, 255, 207, 142, 8, 255, 178, 102, 6, 255, 168, 95, 1, 255, 175, 102, 6, 255, 175, 114, 5, 255, 178, 121, 4, 255, 187, 123, 5, 255, 181, 114, 9, 255, 161, 84, 11, 255, 161, 87, 5, 255, 167, 90, 9, 255, 166, 85, 4, 255, 184, 107, 9, 255, 192, 127, 5, 255, 185, 129, 4, 255, 194, 135, 4, 255, 181, 130, 5, 255, 181, 126, 15, 255, 184, 117, 6, 255, 182, 117, 10, 255, 188, 121, 10, 255, 187, 117, 5, 255, 179, 111, 4, 255, 178, 112, 6, 255, 191, 132, 7, 255, 203, 148, 3, 255, 199, 142, 1, 255, 202, 139, 12, 255, 204, 135, 8, 255, 201, 132, 5, 255, 199, 128, 5, 255, 200, 126, 9, 255, 200, 124, 9, 255, 204, 126, 5, 255, 207, 129, 5, 255, 208, 130, 7, 255, 205, 128, 6, 255, 206, 131, 7, 255, 209, 133, 14, 255, 206, 129, 15, 255, 204, 127, 14, 255, 204, 126, 16, 255, 204, 123, 16, 255, 197, 114, 13, 255, 195, 109, 13, 255, 189, 103, 10, 255, 186, 97, 6, 255, 178, 93, 2, 255, 180, 93, 8, 255, 178, 91, 2, 255, 175, 86, 3, 255, 173, 86, 7, 255, 170, 83, 3, 255, 162, 76, 3, 255, 156, 72, 4, 255, 153, 70, 6, 255, 150, 67, 1, 255, 147, 61, 2, 255, 145, 58, 7, 255, 136, 53, 2, 255, 135, 51, 4, 255, 137, 52, 4, 255, 134, 49, 3, 255, 132, 51, 5, 255, 131, 54, 6, 255, 126, 49, 1, 255, 129, 53, 3, 255, 131, 53, 2, 255, 131, 49, 1, 255, 128, 49, 4, 255, 123, 45, 5, 255, 123, 46, 2, 255, 124, 50, 1, 255, 125, 53, 3, 255, 132, 53, 2, 255, 137, 50, 1, 255, 127, 50, 2, 255, 127, 48, 1, 255, 127, 49, 1, 255, 126, 47, 2, 255, 128, 44, 1, 255, 119, 45, 5, 255, 113, 42, 2, 255, 111, 44, 3, 255, 114, 40, 3, 255, 117, 38, 1, 255, 106, 34, 2, 255, 117, 39, 7, 255, 115, 36, 4, 255, 113, 38, 4, 255, 112, 40, 1, 255, 113, 44, 0, 255, 119, 48, 2, 255, 119, 55, 7, 255, 122, 51, 0, 255, 139, 58, 5, 255, 138, 58, 3, 255, 144, 63, 0, 255, 160, 72, 3, 255, 161, 73, 3, 255, 157, 69, 0, 255, 156, 68, 0, 255, 156, 69, 0, 255, 156, 68, 0, 255, 160, 73, 3, 255, 167, 79, 3, 255, 164, 76, 1, 255, 164, 77, 0, 255, 2, 32, 82, 255, 3, 34, 82, 255, 1, 28, 73, 255, 4, 24, 70, 255, 2, 25, 58, 255, 0, 20, 50, 255, 2, 20, 44, 255, 3, 15, 31, 255, 1, 8, 32, 255, 2, 19, 55, 255, 1, 25, 66, 255, 1, 22, 50, 255, 3, 19, 32, 255, 2, 22, 52, 255, 2, 21, 50, 255, 3, 20, 42, 255, 2, 17, 38, 255, 2, 14, 38, 255, 3, 16, 32, 255, 3, 13, 30, 255, 3, 15, 31, 255, 3, 13, 28, 255, 3, 7, 24, 255, 2, 1, 16, 255, 2, 1, 11, 255, 2, 0, 8, 255, 1, 3, 5, 255, 4, 1, 1, 255, 4, 5, 57, 255, 15, 71, 238, 255, 41, 66, 87, 255, 18, 11, 0, 255, 32, 13, 45, 255, 19, 26, 78, 255, 0, 3, 0, 255, 3, 4, 3, 255, 1, 2, 1, 255, 2, 4, 1, 255, 3, 1, 0, 255, 3, 2, 0, 255, 5, 1, 0, 255, 4, 0, 0, 255, 5, 1, 0, 255, 5, 1, 0, 255, 3, 1, 0, 255, 5, 1, 0, 255, 4, 2, 0, 255, 4, 1, 0, 255, 8, 2, 0, 255, 12, 1, 0, 255, 13, 3, 1, 255, 9, 3, 0, 255, 12, 7, 3, 255, 14, 6, 3, 255, 16, 7, 2, 255, 21, 11, 2, 255, 23, 9, 2, 255, 17, 7, 0, 255, 31, 12, 6, 255, 30, 14, 6, 255, 21, 14, 3, 255, 28, 14, 4, 255, 22, 16, 3, 255, 28, 18, 4, 255, 26, 22, 7, 255, 28, 26, 9, 255, 40, 28, 15, 255, 55, 41, 33, 255, 53, 49, 57, 255, 59, 54, 57, 255, 63, 59, 45, 255, 57, 54, 42, 255, 60, 58, 32, 255, 63, 61, 31, 255, 61, 55, 43, 255, 59, 52, 36, 255, 56, 53, 16, 255, 59, 56, 4, 255, 70, 59, 8, 255, 71, 60, 7, 255, 61, 61, 5, 255, 62, 64, 7, 255, 70, 64, 9, 255, 71, 68, 2, 255, 84, 68, 3, 255, 93, 74, 5, 255, 102, 90, 9, 255, 97, 95, 7, 255, 100, 83, 7, 255, 92, 67, 2, 255, 77, 55, 6, 255, 84, 63, 4, 255, 83, 70, 5, 255, 76, 63, 4, 255, 87, 75, 7, 255, 111, 75, 3, 255, 84, 61, 2, 255, 82, 57, 6, 255, 95, 68, 3, 255, 99, 71, 1, 255, 115, 78, 9, 255, 136, 87, 10, 255, 145, 84, 4, 255, 162, 92, 5, 255, 172, 100, 6, 255, 159, 88, 3, 255, 158, 82, 1, 255, 167, 85, 7, 255, 162, 81, 10, 255, 158, 75, 4, 255, 153, 69, 3, 255, 155, 68, 8, 255, 155, 71, 8, 255, 157, 76, 6, 255, 155, 75, 2, 255, 157, 67, 9, 255, 160, 73, 5, 255, 158, 71, 2, 255, 155, 70, 1, 255, 161, 69, 1, 255, 163, 72, 5, 255, 164, 67, 6, 255, 159, 67, 3, 255, 160, 67, 1, 255, 160, 72, 5, 255, 149, 64, 2, 255, 152, 67, 6, 255, 161, 76, 6, 255, 142, 70, 4, 255, 151, 74, 8, 255, 126, 49, 12, 255, 107, 41, 10, 255, 119, 48, 5, 255, 128, 50, 7, 255, 132, 52, 4, 255, 144, 61, 9, 255, 155, 75, 8, 255, 177, 92, 12, 255, 178, 83, 9, 255, 163, 70, 3, 255, 144, 58, 9, 255, 129, 47, 6, 255, 168, 72, 6, 255, 182, 85, 5, 255, 180, 91, 16, 255, 168, 71, 9, 255, 148, 50, 8, 255, 166, 59, 5, 255, 174, 70, 10, 255, 193, 100, 9, 255, 196, 106, 13, 255, 205, 118, 7, 255, 207, 117, 7, 255, 206, 115, 9, 255, 195, 110, 4, 255, 186, 99, 14, 255, 191, 105, 16, 255, 201, 116, 11, 255, 201, 117, 15, 255, 198, 116, 17, 255, 200, 117, 7, 255, 197, 112, 10, 255, 185, 98, 14, 255, 177, 92, 18, 255, 186, 105, 7, 255, 191, 108, 5, 255, 191, 104, 7, 255, 185, 102, 14, 255, 179, 99, 8, 255, 179, 95, 8, 255, 182, 92, 8, 255, 171, 87, 11, 255, 154, 81, 4, 255, 146, 75, 8, 255, 139, 67, 7, 255, 145, 72, 14, 255, 158, 87, 8, 255, 152, 80, 11, 255, 162, 89, 14, 255, 165, 89, 19, 255, 177, 102, 11, 255, 183, 103, 19, 255, 185, 107, 9, 255, 187, 114, 13, 255, 186, 115, 25, 255, 193, 123, 22, 255, 191, 118, 16, 255, 180, 95, 20, 255, 179, 90, 6, 255, 166, 75, 7, 255, 178, 92, 21, 255, 187, 109, 8, 255, 190, 106, 17, 255, 201, 114, 17, 255, 206, 131, 12, 255, 200, 129, 18, 255, 208, 128, 24, 255, 210, 128, 16, 255, 208, 136, 14, 255, 204, 137, 8, 255, 210, 137, 13, 255, 215, 135, 10, 255, 211, 135, 10, 255, 209, 136, 12, 255, 210, 135, 8, 255, 206, 135, 11, 255, 205, 132, 18, 255, 199, 123, 21, 255, 211, 133, 15, 255, 212, 135, 2, 255, 207, 133, 11, 255, 205, 128, 14, 255, 205, 127, 13, 255, 204, 129, 0, 255, 209, 132, 10, 255, 212, 136, 13, 255, 210, 134, 10, 255, 214, 137, 16, 255, 190, 102, 12, 255, 190, 101, 14, 255, 212, 138, 19, 255, 209, 137, 14, 255, 208, 135, 5, 255, 206, 132, 8, 255, 208, 131, 9, 255, 212, 137, 4, 255, 211, 134, 13, 255, 209, 131, 12, 255, 209, 132, 6, 255, 210, 133, 3, 255, 207, 135, 7, 255, 207, 135, 16, 255, 212, 135, 10, 255, 203, 124, 4, 255, 199, 120, 11, 255, 210, 140, 10, 255, 213, 148, 6, 255, 217, 151, 18, 255, 218, 151, 14, 255, 216, 149, 7, 255, 216, 149, 8, 255, 214, 146, 13, 255, 209, 140, 11, 255, 212, 144, 1, 255, 214, 144, 4, 255, 216, 143, 6, 255, 215, 142, 5, 255, 213, 143, 10, 255, 214, 150, 5, 255, 217, 154, 2, 255, 220, 152, 7, 255, 214, 144, 6, 255, 216, 149, 3, 255, 217, 154, 6, 255, 214, 147, 7, 255, 219, 147, 4, 255, 220, 153, 7, 255, 219, 155, 1, 255, 223, 160, 1, 255, 227, 166, 4, 255, 227, 165, 0, 255, 227, 163, 2, 255, 222, 157, 9, 255, 215, 155, 3, 255, 218, 158, 2, 255, 213, 143, 6, 255, 200, 121, 3, 255, 198, 122, 6, 255, 203, 132, 14, 255, 203, 134, 8, 255, 195, 126, 4, 255, 201, 137, 1, 255, 215, 154, 3, 255, 214, 155, 1, 255, 218, 159, 4, 255, 221, 163, 3, 255, 221, 163, 5, 255, 220, 163, 11, 255, 215, 157, 5, 255, 212, 152, 0, 255, 214, 152, 6, 255, 211, 148, 3, 255, 218, 153, 3, 255, 217, 153, 3, 255, 216, 151, 2, 255, 218, 155, 3, 255, 215, 154, 2, 255, 211, 151, 3, 255, 215, 153, 3, 255, 216, 155, 4, 255, 214, 155, 1, 255, 205, 148, 3, 255, 206, 146, 2, 255, 187, 118, 5, 255, 171, 98, 5, 255, 176, 97, 6, 255, 185, 117, 6, 255, 187, 120, 6, 255, 181, 109, 0, 255, 171, 101, 3, 255, 186, 109, 2, 255, 184, 108, 3, 255, 192, 124, 6, 255, 187, 119, 3, 255, 165, 86, 10, 255, 174, 97, 15, 255, 192, 128, 4, 255, 195, 128, 5, 255, 194, 143, 17, 255, 217, 178, 13, 255, 221, 170, 11, 255, 199, 128, 9, 255, 187, 110, 2, 255, 177, 107, 4, 255, 172, 105, 6, 255, 192, 129, 12, 255, 207, 150, 8, 255, 201, 143, 1, 255, 202, 138, 6, 255, 201, 134, 3, 255, 203, 133, 5, 255, 200, 128, 6, 255, 198, 124, 12, 255, 201, 127, 5, 255, 201, 128, 5, 255, 202, 128, 9, 255, 204, 128, 8, 255, 207, 129, 17, 255, 208, 131, 11, 255, 206, 132, 4, 255, 207, 130, 10, 255, 205, 128, 13, 255, 205, 127, 13, 255, 203, 123, 9, 255, 199, 117, 6, 255, 196, 113, 6, 255, 193, 107, 6, 255, 187, 99, 5, 255, 184, 95, 5, 255, 181, 90, 4, 255, 182, 90, 7, 255, 178, 89, 1, 255, 174, 87, 4, 255, 169, 84, 4, 255, 163, 79, 1, 255, 161, 76, 5, 255, 154, 69, 2, 255, 149, 69, 0, 255, 148, 67, 4, 255, 147, 64, 3, 255, 144, 61, 1, 255, 134, 54, 1, 255, 136, 53, 3, 255, 135, 49, 1, 255, 133, 49, 0, 255, 132, 52, 1, 255, 132, 55, 3, 255, 132, 54, 5, 255, 137, 59, 6, 255, 137, 57, 1, 255, 136, 52, 4, 255, 133, 50, 8, 255, 123, 43, 3, 255, 128, 47, 3, 255, 132, 50, 1, 255, 125, 50, 3, 255, 118, 44, 2, 255, 126, 47, 6, 255, 129, 46, 0, 255, 134, 48, 3, 255, 124, 45, 7, 255, 116, 37, 2, 255, 121, 43, 2, 255, 122, 45, 5, 255, 124, 37, 2, 255, 109, 34, 0, 255, 113, 38, 8, 255, 116, 41, 7, 255, 115, 39, 3, 255, 120, 39, 5, 255, 117, 37, 4, 255, 116, 40, 4, 255, 124, 51, 5, 255, 130, 54, 2, 255, 137, 58, 6, 255, 134, 58, 7, 255, 135, 59, 2, 255, 139, 59, 2, 255, 142, 62, 2, 255, 153, 67, 6, 255, 153, 67, 2, 255, 148, 64, 2, 255, 142, 56, 3, 255, 144, 57, 3, 255, 151, 64, 1, 255, 158, 71, 1, 255, 168, 80, 7, 255, 171, 83, 2, 255, 170, 81, 1, 255, 169, 80, 0, 255, 1, 21, 67, 255, 0, 26, 68, 255, 6, 28, 64, 255, 3, 27, 69, 255, 1, 32, 77, 255, 3, 15, 39, 255, 3, 2, 5, 255, 1, 7, 20, 255, 5, 22, 56, 255, 3, 25, 61, 255, 1, 21, 46, 255, 2, 23, 38, 255, 2, 23, 39, 255, 1, 19, 46, 255, 2, 17, 46, 255, 1, 14, 50, 255, 3, 18, 40, 255, 1, 15, 37, 255, 1, 19, 34, 255, 4, 15, 28, 255, 1, 12, 29, 255, 4, 16, 38, 255, 2, 7, 28, 255, 0, 0, 13, 255, 2, 1, 6, 255, 1, 2, 7, 255, 3, 1, 8, 255, 4, 0, 18, 255, 3, 46, 200, 255, 39, 91, 148, 255, 35, 15, 0, 255, 29, 6, 23, 255, 16, 24, 141, 255, 2, 4, 36, 255, 8, 1, 0, 255, 5, 2, 4, 255, 8, 4, 3, 255, 3, 2, 3, 255, 3, 1, 1, 255, 5, 1, 0, 255, 3, 2, 0, 255, 2, 1, 0, 255, 4, 1, 0, 255, 6, 2, 1, 255, 6, 1, 0, 255, 6, 1, 1, 255, 3, 2, 0, 255, 4, 1, 1, 255, 11, 3, 1, 255, 14, 3, 2, 255, 15, 5, 2, 255, 13, 5, 0, 255, 15, 7, 3, 255, 16, 6, 4, 255, 17, 7, 1, 255, 20, 10, 1, 255, 20, 10, 1, 255, 24, 11, 1, 255, 31, 16, 4, 255, 20, 13, 2, 255, 17, 14, 2, 255, 32, 19, 6, 255, 39, 20, 5, 255, 29, 18, 0, 255, 28, 23, 4, 255, 29, 22, 6, 255, 52, 33, 10, 255, 57, 36, 19, 255, 50, 45, 33, 255, 57, 55, 50, 255, 64, 60, 55, 255, 62, 58, 42, 255, 65, 59, 37, 255, 67, 60, 36, 255, 66, 59, 37, 255, 66, 60, 39, 255, 58, 54, 22, 255, 66, 55, 12, 255, 69, 60, 10, 255, 69, 60, 5, 255, 65, 62, 7, 255, 66, 62, 6, 255, 70, 63, 5, 255, 84, 68, 2, 255, 95, 70, 11, 255, 83, 70, 2, 255, 76, 65, 4, 255, 70, 57, 12, 255, 78, 62, 7, 255, 79, 64, 4, 255, 84, 63, 4, 255, 85, 63, 2, 255, 82, 65, 3, 255, 85, 61, 1, 255, 89, 67, 8, 255, 104, 73, 5, 255, 91, 70, 6, 255, 123, 85, 18, 255, 151, 93, 11, 255, 163, 95, 4, 255, 169, 93, 8, 255, 175, 91, 5, 255, 173, 92, 9, 255, 170, 91, 7, 255, 175, 99, 11, 255, 168, 93, 11, 255, 153, 77, 5, 255, 161, 76, 5, 255, 172, 81, 3, 255, 163, 75, 2, 255, 157, 70, 2, 255, 154, 71, 1, 255, 158, 74, 1, 255, 165, 76, 3, 255, 163, 72, 0, 255, 158, 69, 10, 255, 154, 70, 1, 255, 154, 63, 7, 255, 153, 66, 6, 255, 155, 68, 0, 255, 151, 67, 2, 255, 154, 71, 4, 255, 158, 79, 8, 255, 162, 86, 6, 255, 148, 72, 2, 255, 149, 65, 9, 255, 156, 81, 11, 255, 177, 95, 9, 255, 185, 101, 9, 255, 186, 103, 9, 255, 175, 85, 10, 255, 163, 68, 4, 255, 162, 62, 3, 255, 165, 68, 3, 255, 179, 91, 8, 255, 178, 87, 6, 255, 179, 83, 11, 255, 181, 90, 8, 255, 169, 76, 4, 255, 167, 74, 4, 255, 151, 66, 6, 255, 177, 95, 17, 255, 188, 98, 10, 255, 187, 93, 6, 255, 194, 98, 11, 255, 154, 65, 10, 255, 151, 69, 10, 255, 148, 60, 8, 255, 153, 68, 20, 255, 186, 96, 13, 255, 184, 85, 3, 255, 156, 66, 10, 255, 173, 87, 18, 255, 197, 104, 9, 255, 185, 93, 9, 255, 177, 86, 13, 255, 196, 114, 7, 255, 198, 114, 5, 255, 200, 114, 10, 255, 201, 114, 16, 255, 201, 117, 11, 255, 195, 104, 12, 255, 196, 98, 26, 255, 184, 91, 8, 255, 181, 94, 14, 255, 191, 111, 16, 255, 185, 104, 14, 255, 187, 109, 3, 255, 192, 111, 3, 255, 179, 95, 5, 255, 173, 95, 7, 255, 178, 96, 21, 255, 186, 103, 7, 255, 180, 101, 7, 255, 182, 100, 11, 255, 183, 104, 15, 255, 186, 111, 14, 255, 187, 109, 18, 255, 187, 112, 8, 255, 193, 110, 18, 255, 196, 115, 18, 255, 194, 119, 13, 255, 196, 119, 15, 255, 198, 118, 18, 255, 200, 123, 23, 255, 203, 126, 26, 255, 189, 107, 8, 255, 173, 86, 16, 255, 179, 94, 7, 255, 193, 110, 21, 255, 201, 123, 19, 255, 203, 129, 16, 255, 209, 132, 14, 255, 210, 129, 16, 255, 211, 128, 27, 255, 210, 130, 23, 255, 211, 135, 16, 255, 212, 134, 12, 255, 210, 133, 18, 255, 215, 139, 12, 255, 214, 134, 16, 255, 196, 114, 11, 255, 212, 131, 18, 255, 218, 139, 17, 255, 213, 134, 4, 255, 212, 133, 11, 255, 207, 129, 14, 255, 208, 131, 13, 255, 208, 130, 9, 255, 208, 126, 7, 255, 211, 126, 8, 255, 209, 123, 6, 255, 210, 124, 7, 255, 212, 127, 4, 255, 214, 131, 6, 255, 216, 133, 12, 255, 214, 131, 12, 255, 212, 130, 11, 255, 205, 120, 9, 255, 200, 113, 5, 255, 205, 131, 1, 255, 211, 138, 5, 255, 212, 134, 8, 255, 210, 133, 8, 255, 213, 139, 12, 255, 214, 141, 7, 255, 213, 140, 5, 255, 212, 136, 17, 255, 212, 135, 11, 255, 210, 130, 15, 255, 199, 123, 11, 255, 206, 128, 8, 255, 210, 135, 6, 255, 215, 144, 21, 255, 222, 150, 22, 255, 219, 148, 6, 255, 214, 149, 9, 255, 214, 144, 17, 255, 219, 151, 12, 255, 218, 149, 9, 255, 214, 144, 6, 255, 215, 143, 13, 255, 215, 146, 6, 255, 215, 142, 6, 255, 212, 137, 8, 255, 210, 136, 15, 255, 210, 140, 4, 255, 213, 144, 9, 255, 213, 146, 2, 255, 210, 142, 3, 255, 209, 138, 1, 255, 211, 137, 3, 255, 210, 141, 4, 255, 214, 148, 9, 255, 213, 147, 6, 255, 210, 133, 6, 255, 205, 135, 8, 255, 216, 148, 5, 255, 221, 155, 6, 255, 220, 153, 6, 255, 217, 150, 5, 255, 213, 146, 9, 255, 207, 141, 6, 255, 215, 149, 5, 255, 220, 154, 3, 255, 214, 145, 8, 255, 194, 123, 7, 255, 196, 127, 10, 255, 198, 129, 6, 255, 192, 121, 1, 255, 204, 136, 9, 255, 212, 150, 7, 255, 212, 151, 4, 255, 216, 156, 2, 255, 219, 159, 0, 255, 217, 157, 7, 255, 217, 158, 8, 255, 221, 162, 8, 255, 219, 160, 5, 255, 216, 158, 4, 255, 219, 161, 9, 255, 217, 157, 10, 255, 219, 156, 11, 255, 218, 153, 4, 255, 216, 149, 5, 255, 217, 152, 4, 255, 222, 162, 3, 255, 217, 160, 2, 255, 217, 158, 2, 255, 215, 151, 1, 255, 217, 155, 5, 255, 207, 150, 7, 255, 201, 143, 7, 255, 199, 138, 2, 255, 175, 101, 7, 255, 170, 85, 2, 255, 167, 100, 2, 255, 169, 105, 8, 255, 175, 102, 2, 255, 168, 96, 5, 255, 185, 101, 9, 255, 171, 93, 6, 255, 190, 114, 4, 255, 189, 115, 3, 255, 181, 107, 2, 255, 165, 85, 14, 255, 171, 92, 8, 255, 202, 149, 4, 255, 228, 185, 7, 255, 232, 163, 13, 255, 207, 128, 4, 255, 192, 123, 6, 255, 191, 121, 5, 255, 195, 129, 4, 255, 197, 135, 4, 255, 206, 147, 9, 255, 205, 146, 2, 255, 200, 137, 0, 255, 201, 130, 4, 255, 201, 125, 5, 255, 201, 123, 6, 255, 202, 125, 1, 255, 202, 126, 1, 255, 205, 129, 12, 255, 206, 131, 13, 255, 206, 132, 5, 255, 205, 134, 1, 255, 207, 133, 7, 255, 208, 134, 8, 255, 208, 131, 10, 255, 207, 126, 12, 255, 205, 126, 6, 255, 203, 123, 7, 255, 199, 120, 5, 255, 193, 112, 6, 255, 192, 106, 5, 255, 190, 104, 3, 255, 186, 100, 4, 255, 184, 97, 9, 255, 181, 92, 10, 255, 179, 90, 4, 255, 180, 90, 7, 255, 176, 86, 3, 255, 168, 80, 0, 255, 166, 77, 2, 255, 163, 75, 1, 255, 159, 73, 1, 255, 155, 70, 1, 255, 150, 66, 5, 255, 145, 63, 4, 255, 140, 60, 3, 255, 136, 54, 6, 255, 132, 53, 0, 255, 137, 54, 1, 255, 136, 56, 3, 255, 134, 55, 3, 255, 135, 55, 4, 255, 137, 55, 4, 255, 132, 55, 3, 255, 133, 57, 2, 255, 140, 58, 5, 255, 131, 49, 1, 255, 127, 48, 3, 255, 131, 50, 5, 255, 125, 42, 1, 255, 121, 43, 5, 255, 119, 42, 1, 255, 119, 45, 3, 255, 120, 39, 3, 255, 119, 38, 3, 255, 123, 41, 6, 255, 134, 47, 5, 255, 124, 42, 3, 255, 118, 38, 0, 255, 109, 34, 4, 255, 109, 33, 2, 255, 124, 44, 2, 255, 123, 51, 2, 255, 118, 49, 2, 255, 119, 42, 1, 255, 114, 37, 0, 255, 118, 45, 3, 255, 135, 57, 8, 255, 145, 62, 3, 255, 138, 62, 0, 255, 142, 56, 1, 255, 152, 63, 4, 255, 148, 62, 6, 255, 153, 68, 5, 255, 154, 68, 3, 255, 139, 55, 2, 255, 135, 53, 1, 255, 144, 61, 1, 255, 152, 67, 4, 255, 162, 74, 9, 255, 166, 77, 5, 255, 171, 79, 4, 255, 170, 81, 1, 255, 171, 81, 2, 255, 167, 77, 2, 255, 6, 19, 56, 255, 1, 22, 50, 255, 3, 22, 60, 255, 1, 26, 69, 255, 1, 26, 57, 255, 2, 6, 18, 255, 2, 0, 0, 255, 2, 4, 21, 255, 2, 14, 39, 255, 1, 22, 42, 255, 3, 22, 49, 255, 1, 16, 49, 255, 3, 22, 44, 255, 2, 18, 57, 255, 0, 18, 54, 255, 1, 20, 48, 255, 2, 21, 41, 255, 2, 18, 48, 255, 0, 18, 43, 255, 3, 13, 35, 255, 2, 13, 31, 255, 2, 17, 25, 255, 4, 5, 14, 255, 3, 0, 14, 255, 1, 0, 7, 255, 1, 1, 13, 255, 6, 0, 0, 255, 1, 14, 138, 255, 27, 82, 189, 255, 39, 30, 17, 255, 9, 8, 0, 255, 14, 21, 159, 255, 5, 17, 106, 255, 7, 1, 0, 255, 11, 5, 3, 255, 1, 4, 1, 255, 3, 1, 3, 255, 2, 3, 2, 255, 4, 0, 0, 255, 6, 0, 0, 255, 4, 1, 0, 255, 3, 2, 0, 255, 6, 3, 2, 255, 7, 5, 3, 255, 7, 2, 1, 255, 9, 2, 1, 255, 7, 2, 0, 255, 8, 3, 1, 255, 11, 3, 2, 255, 15, 4, 3, 255, 14, 5, 1, 255, 17, 8, 1, 255, 22, 9, 3, 255, 21, 7, 2, 255, 17, 8, 1, 255, 19, 9, 2, 255, 19, 9, 0, 255, 22, 10, 0, 255, 24, 13, 1, 255, 26, 16, 4, 255, 26, 18, 4, 255, 28, 16, 2, 255, 40, 16, 2, 255, 31, 17, 1, 255, 35, 17, 4, 255, 41, 23, 11, 255, 51, 32, 10, 255, 52, 37, 12, 255, 59, 47, 28, 255, 68, 56, 37, 255, 64, 58, 53, 255, 60, 59, 51, 255, 64, 60, 51, 255, 68, 61, 43, 255, 67, 63, 26, 255, 65, 60, 34, 255, 65, 60, 28, 255, 67, 54, 13, 255, 74, 57, 10, 255, 70, 63, 3, 255, 70, 62, 11, 255, 65, 63, 9, 255, 77, 69, 1, 255, 93, 70, 5, 255, 80, 66, 2, 255, 81, 73, 5, 255, 81, 70, 2, 255, 79, 65, 7, 255, 82, 64, 3, 255, 77, 67, 5, 255, 79, 61, 2, 255, 87, 62, 4, 255, 71, 59, 7, 255, 79, 63, 9, 255, 113, 79, 11, 255, 151, 98, 11, 255, 168, 104, 4, 255, 179, 105, 13, 255, 177, 92, 7, 255, 173, 85, 1, 255, 172, 83, 2, 255, 179, 89, 4, 255, 174, 85, 4, 255, 159, 82, 3, 255, 174, 103, 10, 255, 188, 111, 16, 255, 178, 100, 16, 255, 160, 82, 16, 255, 136, 58, 5, 255, 149, 70, 3, 255, 150, 73, 9, 255, 148, 64, 7, 255, 159, 65, 1, 255, 158, 72, 7, 255, 149, 67, 7, 255, 151, 72, 1, 255, 153, 76, 7, 255, 147, 64, 6, 255, 129, 53, 6, 255, 141, 64, 5, 255, 170, 88, 12, 255, 185, 104, 21, 255, 183, 103, 19, 255, 162, 72, 8, 255, 156, 65, 2, 255, 171, 76, 10, 255, 178, 87, 9, 255, 191, 98, 6, 255, 193, 96, 6, 255, 194, 101, 8, 255, 190, 103, 14, 255, 182, 86, 9, 255, 179, 81, 9, 255, 166, 77, 5, 255, 173, 88, 7, 255, 166, 86, 6, 255, 157, 79, 8, 255, 152, 74, 0, 255, 134, 57, 14, 255, 141, 69, 17, 255, 148, 74, 5, 255, 148, 71, 6, 255, 134, 62, 10, 255, 137, 68, 7, 255, 134, 61, 10, 255, 126, 56, 5, 255, 143, 76, 7, 255, 140, 70, 7, 255, 131, 61, 16, 255, 141, 65, 11, 255, 154, 77, 20, 255, 130, 59, 5, 255, 148, 70, 7, 255, 173, 82, 11, 255, 175, 87, 6, 255, 178, 94, 8, 255, 189, 104, 11, 255, 195, 109, 15, 255, 196, 108, 19, 255, 197, 113, 14, 255, 203, 116, 17, 255, 201, 115, 11, 255, 186, 98, 14, 255, 184, 96, 9, 255, 195, 109, 12, 255, 199, 117, 10, 255, 191, 110, 7, 255, 185, 102, 10, 255, 174, 92, 13, 255, 166, 87, 25, 255, 183, 105, 24, 255, 190, 112, 10, 255, 190, 112, 8, 255, 178, 94, 16, 255, 173, 92, 9, 255, 183, 102, 13, 255, 190, 108, 19, 255, 199, 115, 21, 255, 191, 104, 5, 255, 167, 86, 11, 255, 187, 106, 21, 255, 207, 125, 24, 255, 207, 126, 13, 255, 206, 127, 16, 255, 205, 130, 12, 255, 212, 135, 23, 255, 204, 124, 25, 255, 206, 126, 22, 255, 217, 141, 18, 255, 216, 135, 24, 255, 213, 135, 10, 255, 216, 134, 22, 255, 215, 133, 30, 255, 212, 130, 23, 255, 214, 131, 7, 255, 217, 134, 6, 255, 214, 137, 20, 255, 215, 140, 21, 255, 213, 137, 18, 255, 216, 139, 10, 255, 205, 122, 11, 255, 185, 101, 10, 255, 209, 130, 20, 255, 215, 138, 16, 255, 216, 136, 9, 255, 215, 135, 8, 255, 219, 137, 17, 255, 217, 136, 19, 255, 210, 132, 14, 255, 208, 128, 11, 255, 213, 128, 11, 255, 202, 111, 17, 255, 200, 110, 4, 255, 203, 114, 9, 255, 202, 117, 10, 255, 194, 111, 7, 255, 201, 121, 7, 255, 208, 128, 11, 255, 214, 130, 14, 255, 209, 123, 14, 255, 206, 124, 14, 255, 213, 136, 10, 255, 213, 132, 9, 255, 215, 132, 7, 255, 208, 126, 14, 255, 191, 106, 8, 255, 201, 117, 8, 255, 204, 120, 11, 255, 204, 119, 8, 255, 202, 120, 1, 255, 211, 130, 14, 255, 211, 134, 17, 255, 216, 142, 8, 255, 223, 145, 8, 255, 222, 150, 6, 255, 219, 151, 3, 255, 222, 149, 11, 255, 218, 146, 18, 255, 216, 145, 11, 255, 219, 147, 5, 255, 219, 148, 10, 255, 217, 145, 21, 255, 214, 143, 9, 255, 215, 140, 3, 255, 209, 135, 9, 255, 210, 136, 17, 255, 209, 138, 9, 255, 208, 137, 11, 255, 209, 138, 3, 255, 212, 140, 8, 255, 208, 135, 10, 255, 211, 139, 8, 255, 213, 143, 8, 255, 209, 142, 5, 255, 210, 142, 0, 255, 213, 140, 5, 255, 208, 140, 6, 255, 214, 149, 0, 255, 217, 147, 4, 255, 213, 143, 4, 255, 211, 146, 1, 255, 205, 137, 8, 255, 214, 146, 20, 255, 211, 140, 7, 255, 216, 137, 6, 255, 194, 113, 11, 255, 176, 102, 8, 255, 180, 113, 1, 255, 186, 119, 1, 255, 200, 130, 8, 255, 214, 148, 7, 255, 209, 146, 3, 255, 213, 153, 3, 255, 217, 159, 2, 255, 217, 157, 2, 255, 215, 155, 6, 255, 219, 160, 4, 255, 221, 163, 2, 255, 223, 162, 5, 255, 221, 160, 5, 255, 219, 158, 4, 255, 218, 154, 8, 255, 219, 150, 10, 255, 220, 151, 7, 255, 217, 150, 4, 255, 218, 151, 1, 255, 220, 155, 9, 255, 213, 150, 6, 255, 202, 128, 5, 255, 189, 111, 4, 255, 192, 117, 0, 255, 207, 139, 9, 255, 199, 134, 2, 255, 206, 143, 2, 255, 203, 138, 10, 255, 177, 104, 4, 255, 176, 110, 8, 255, 168, 103, 8, 255, 169, 101, 9, 255, 165, 99, 1, 255, 160, 81, 8, 255, 161, 80, 5, 255, 174, 90, 5, 255, 181, 98, 7, 255, 177, 95, 8, 255, 164, 91, 8, 255, 168, 93, 8, 255, 204, 135, 2, 255, 219, 154, 10, 255, 195, 120, 19, 255, 185, 109, 11, 255, 178, 107, 6, 255, 193, 119, 5, 255, 202, 131, 4, 255, 208, 146, 7, 255, 204, 145, 3, 255, 199, 139, 2, 255, 200, 135, 6, 255, 200, 129, 5, 255, 198, 121, 1, 255, 200, 122, 9, 255, 202, 126, 9, 255, 204, 128, 5, 255, 206, 129, 13, 255, 209, 133, 14, 255, 207, 135, 8, 255, 206, 131, 12, 255, 204, 128, 8, 255, 206, 131, 9, 255, 207, 129, 14, 255, 206, 126, 8, 255, 204, 126, 1, 255, 200, 120, 13, 255, 195, 112, 11, 255, 194, 110, 8, 255, 193, 106, 9, 255, 187, 100, 4, 255, 187, 100, 3, 255, 185, 98, 4, 255, 180, 92, 12, 255, 181, 95, 12, 255, 181, 92, 15, 255, 174, 80, 4, 255, 168, 78, 1, 255, 167, 74, 4, 255, 163, 69, 0, 255, 155, 67, 3, 255, 148, 67, 10, 255, 139, 61, 1, 255, 137, 56, 0, 255, 138, 54, 4, 255, 137, 57, 3, 255, 135, 58, 0, 255, 141, 60, 4, 255, 147, 63, 5, 255, 141, 58, 4, 255, 135, 53, 4, 255, 135, 53, 5, 255, 132, 52, 5, 255, 136, 56, 5, 255, 141, 58, 1, 255, 128, 49, 1, 255, 119, 43, 3, 255, 122, 40, 3, 255, 126, 44, 3, 255, 125, 50, 1, 255, 136, 52, 1, 255, 134, 51, 4, 255, 122, 47, 5, 255, 117, 46, 3, 255, 124, 45, 0, 255, 140, 54, 2, 255, 125, 41, 2, 255, 117, 36, 4, 255, 111, 42, 7, 255, 116, 40, 6, 255, 121, 39, 2, 255, 120, 42, 2, 255, 120, 47, 1, 255, 120, 48, 2, 255, 112, 44, 5, 255, 114, 48, 5, 255, 135, 61, 7, 255, 145, 61, 2, 255, 146, 66, 5, 255, 154, 69, 3, 255, 155, 67, 0, 255, 156, 69, 4, 255, 156, 69, 3, 255, 159, 63, 2, 255, 152, 63, 5, 255, 156, 73, 7, 255, 172, 86, 4, 255, 175, 86, 0, 255, 175, 84, 3, 255, 168, 78, 3, 255, 169, 79, 2, 255, 174, 81, 1, 255, 171, 78, 3, 255, 166, 72, 2, 255, 2, 14, 41, 255, 1, 24, 49, 255, 0, 29, 72, 255, 4, 21, 60, 255, 5, 16, 37, 255, 3, 13, 42, 255, 4, 6, 18, 255, 1, 0, 0, 255, 1, 6, 13, 255, 3, 15, 32, 255, 1, 17, 43, 255, 2, 19, 49, 255, 1, 16, 39, 255, 1, 19, 47, 255, 4, 26, 58, 255, 2, 26, 46, 255, 1, 20, 35, 255, 1, 16, 36, 255, 0, 14, 39, 255, 1, 13, 32, 255, 3, 14, 35, 255, 5, 9, 27, 255, 3, 0, 12, 255, 3, 1, 13, 255, 3, 1, 11, 255, 1, 0, 0, 255, 0, 8, 61, 255, 28, 62, 183, 255, 39, 45, 32, 255, 21, 3, 0, 255, 23, 22, 121, 255, 6, 21, 164, 255, 9, 0, 8, 255, 6, 1, 6, 255, 4, 3, 0, 255, 2, 1, 0, 255, 2, 0, 1, 255, 4, 2, 2, 255, 6, 1, 1, 255, 6, 1, 0, 255, 3, 0, 0, 255, 3, 2, 2, 255, 8, 6, 5, 255, 7, 4, 2, 255, 5, 1, 0, 255, 11, 2, 0, 255, 12, 3, 1, 255, 11, 2, 0, 255, 12, 3, 1, 255, 14, 4, 2, 255, 15, 4, 3, 255, 17, 8, 1, 255, 28, 10, 2, 255, 26, 8, 1, 255, 19, 9, 3, 255, 20, 10, 4, 255, 23, 12, 2, 255, 26, 16, 4, 255, 26, 15, 3, 255, 31, 16, 5, 255, 36, 17, 5, 255, 35, 15, 2, 255, 33, 17, 2, 255, 38, 20, 7, 255, 28, 17, 1, 255, 34, 23, 3, 255, 46, 32, 12, 255, 54, 33, 7, 255, 61, 42, 12, 255, 60, 50, 36, 255, 66, 59, 43, 255, 73, 65, 51, 255, 70, 66, 49, 255, 68, 65, 42, 255, 69, 63, 41, 255, 69, 60, 54, 255, 65, 62, 31, 255, 69, 60, 9, 255, 75, 61, 9, 255, 70, 62, 8, 255, 68, 65, 5, 255, 79, 70, 4, 255, 94, 69, 5, 255, 83, 66, 6, 255, 83, 66, 1, 255, 89, 65, 5, 255, 83, 65, 8, 255, 78, 65, 6, 255, 80, 60, 2, 255, 81, 60, 2, 255, 94, 71, 6, 255, 105, 77, 4, 255, 111, 78, 8, 255, 154, 98, 16, 255, 178, 99, 14, 255, 173, 95, 7, 255, 179, 93, 6, 255, 173, 85, 9, 255, 172, 82, 16, 255, 174, 84, 10, 255, 177, 87, 13, 255, 176, 89, 9, 255, 176, 89, 1, 255, 163, 80, 3, 255, 157, 84, 4, 255, 179, 104, 4, 255, 195, 115, 11, 255, 189, 114, 20, 255, 175, 107, 20, 255, 162, 102, 16, 255, 152, 94, 16, 255, 147, 80, 4, 255, 152, 68, 5, 255, 144, 71, 10, 255, 145, 76, 7, 255, 164, 88, 5, 255, 177, 102, 15, 255, 180, 100, 15, 255, 164, 80, 8, 255, 178, 95, 17, 255, 200, 113, 16, 255, 195, 103, 5, 255, 187, 89, 9, 255, 179, 79, 7, 255, 188, 99, 5, 255, 195, 102, 4, 255, 190, 105, 10, 255, 190, 101, 11, 255, 186, 99, 3, 255, 179, 95, 3, 255, 163, 82, 2, 255, 149, 72, 9, 255, 141, 71, 3, 255, 118, 45, 5, 255, 112, 36, 11, 255, 108, 40, 8, 255, 123, 62, 9, 255, 128, 62, 3, 255, 126, 58, 10, 255, 118, 53, 7, 255, 122, 52, 8, 255, 115, 47, 7, 255, 107, 44, 6, 255, 111, 48, 10, 255, 120, 51, 9, 255, 129, 59, 6, 255, 120, 52, 14, 255, 118, 54, 8, 255, 125, 63, 7, 255, 116, 54, 4, 255, 110, 44, 10, 255, 123, 53, 7, 255, 124, 56, 6, 255, 113, 47, 12, 255, 131, 65, 5, 255, 161, 87, 3, 255, 171, 89, 12, 255, 189, 108, 15, 255, 191, 112, 11, 255, 191, 110, 15, 255, 197, 112, 7, 255, 194, 113, 7, 255, 194, 114, 20, 255, 195, 117, 7, 255, 203, 123, 16, 255, 198, 115, 12, 255, 188, 108, 17, 255, 181, 104, 25, 255, 187, 111, 16, 255, 189, 113, 9, 255, 178, 98, 15, 255, 176, 96, 18, 255, 195, 119, 14, 255, 195, 119, 10, 255, 189, 110, 12, 255, 191, 115, 3, 255, 198, 124, 14, 255, 204, 128, 23, 255, 199, 119, 15, 255, 178, 99, 15, 255, 201, 122, 13, 255, 210, 127, 13, 255, 212, 129, 21, 255, 214, 134, 32, 255, 213, 134, 17, 255, 212, 130, 22, 255, 211, 130, 13, 255, 216, 137, 10, 255, 213, 130, 24, 255, 212, 130, 15, 255, 214, 134, 14, 255, 213, 134, 9, 255, 213, 131, 23, 255, 216, 135, 22, 255, 213, 131, 20, 255, 215, 135, 9, 255, 215, 137, 18, 255, 206, 129, 16, 255, 201, 128, 14, 255, 207, 133, 18, 255, 197, 115, 12, 255, 196, 111, 10, 255, 218, 138, 25, 255, 217, 136, 23, 255, 216, 135, 13, 255, 214, 139, 10, 255, 214, 139, 13, 255, 215, 139, 14, 255, 217, 139, 13, 255, 217, 139, 12, 255, 218, 139, 12, 255, 218, 141, 19, 255, 214, 131, 11, 255, 194, 100, 11, 255, 190, 96, 10, 255, 209, 125, 13, 255, 206, 126, 6, 255, 211, 133, 10, 255, 215, 140, 4, 255, 220, 141, 11, 255, 218, 139, 10, 255, 214, 140, 13, 255, 214, 139, 10, 255, 216, 136, 3, 255, 210, 133, 16, 255, 197, 117, 11, 255, 199, 119, 10, 255, 201, 121, 14, 255, 200, 124, 14, 255, 212, 140, 18, 255, 217, 145, 15, 255, 215, 141, 18, 255, 219, 142, 12, 255, 218, 135, 7, 255, 220, 140, 0, 255, 220, 143, 9, 255, 216, 143, 6, 255, 220, 148, 7, 255, 216, 144, 8, 255, 218, 146, 15, 255, 221, 149, 15, 255, 219, 146, 7, 255, 217, 144, 6, 255, 218, 140, 3, 255, 215, 136, 1, 255, 211, 132, 3, 255, 209, 131, 7, 255, 214, 136, 10, 255, 212, 134, 6, 255, 211, 135, 5, 255, 210, 138, 5, 255, 213, 141, 6, 255, 213, 142, 6, 255, 211, 141, 2, 255, 213, 141, 0, 255, 211, 138, 0, 255, 209, 138, 5, 255, 209, 140, 4, 255, 212, 138, 2, 255, 195, 115, 13, 255, 192, 122, 5, 255, 205, 137, 4, 255, 209, 140, 7, 255, 201, 127, 9, 255, 198, 120, 7, 255, 171, 93, 1, 255, 167, 89, 13, 255, 186, 111, 10, 255, 191, 116, 4, 255, 207, 140, 6, 255, 215, 150, 3, 255, 213, 149, 5, 255, 213, 152, 4, 255, 215, 157, 1, 255, 215, 158, 7, 255, 219, 159, 9, 255, 219, 156, 4, 255, 210, 145, 0, 255, 211, 146, 1, 255, 210, 147, 0, 255, 214, 148, 1, 255, 210, 143, 2, 255, 215, 151, 4, 255, 220, 154, 6, 255, 217, 148, 1, 255, 210, 135, 13, 255, 199, 122, 13, 255, 192, 111, 4, 255, 194, 106, 4, 255, 187, 99, 9, 255, 181, 95, 5, 255, 182, 100, 4, 255, 183, 105, 2, 255, 177, 100, 6, 255, 192, 121, 4, 255, 189, 120, 0, 255, 181, 112, 4, 255, 171, 107, 3, 255, 163, 102, 9, 255, 165, 98, 17, 255, 169, 101, 12, 255, 165, 96, 0, 255, 165, 87, 6, 255, 171, 94, 3, 255, 168, 82, 15, 255, 171, 93, 13, 255, 187, 112, 0, 255, 169, 97, 1, 255, 191, 123, 19, 255, 202, 133, 12, 255, 197, 127, 8, 255, 198, 128, 4, 255, 199, 131, 1, 255, 199, 131, 11, 255, 204, 137, 8, 255, 202, 140, 0, 255, 198, 135, 2, 255, 200, 132, 8, 255, 200, 128, 4, 255, 199, 125, 3, 255, 198, 127, 4, 255, 201, 127, 8, 255, 203, 127, 9, 255, 205, 129, 5, 255, 209, 135, 7, 255, 206, 133, 10, 255, 206, 129, 11, 255, 204, 128, 4, 255, 206, 128, 15, 255, 206, 127, 16, 255, 205, 124, 12, 255, 203, 123, 9, 255, 199, 119, 15, 255, 194, 110, 13, 255, 194, 110, 4, 255, 195, 110, 7, 255, 188, 102, 5, 255, 190, 104, 4, 255, 187, 100, 1, 255, 179, 94, 5, 255, 182, 95, 14, 255, 168, 79, 15, 255, 161, 73, 9, 255, 165, 78, 1, 255, 162, 76, 1, 255, 158, 70, 4, 255, 151, 63, 7, 255, 147, 68, 8, 255, 137, 61, 2, 255, 133, 52, 3, 255, 148, 62, 11, 255, 150, 67, 2, 255, 145, 62, 4, 255, 146, 63, 3, 255, 147, 64, 1, 255, 138, 55, 0, 255, 136, 55, 4, 255, 139, 57, 5, 255, 133, 59, 3, 255, 130, 55, 4, 255, 133, 47, 7, 255, 120, 42, 3, 255, 113, 42, 2, 255, 123, 44, 3, 255, 132, 47, 6, 255, 142, 60, 4, 255, 140, 58, 2, 255, 137, 47, 3, 255, 133, 51, 4, 255, 136, 58, 5, 255, 120, 48, 3, 255, 116, 40, 1, 255, 119, 40, 3, 255, 126, 49, 7, 255, 130, 52, 4, 255, 122, 43, 1, 255, 116, 40, 2, 255, 123, 47, 4, 255, 129, 48, 0, 255, 124, 45, 1, 255, 117, 43, 5, 255, 120, 49, 2, 255, 142, 66, 2, 255, 154, 67, 3, 255, 150, 66, 5, 255, 154, 69, 1, 255, 156, 66, 0, 255, 161, 71, 7, 255, 163, 73, 5, 255, 166, 73, 3, 255, 175, 85, 2, 255, 181, 92, 7, 255, 175, 81, 4, 255, 174, 79, 0, 255, 176, 81, 6, 255, 171, 78, 6, 255, 173, 82, 3, 255, 175, 83, 0, 255, 171, 78, 1, 255, 169, 76, 2, 255, 0, 22, 53, 255, 1, 24, 55, 255, 4, 29, 63, 255, 3, 29, 65, 255, 1, 21, 55, 255, 1, 22, 61, 255, 5, 21, 59, 255, 4, 12, 37, 255, 2, 2, 7, 255, 4, 6, 23, 255, 3, 15, 40, 255, 0, 20, 36, 255, 2, 23, 35, 255, 3, 21, 41, 255, 1, 21, 46, 255, 1, 21, 37, 255, 3, 21, 33, 255, 3, 18, 34, 255, 1, 15, 31, 255, 3, 13, 28, 255, 5, 3, 24, 255, 1, 0, 13, 255, 4, 4, 11, 255, 2, 1, 12, 255, 1, 3, 9, 255, 0, 0, 24, 255, 27, 40, 142, 255, 67, 63, 56, 255, 33, 11, 0, 255, 16, 18, 55, 255, 11, 21, 164, 255, 1, 7, 33, 255, 6, 1, 2, 255, 6, 2, 2, 255, 7, 4, 0, 255, 4, 2, 0, 255, 5, 2, 1, 255, 6, 2, 1, 255, 4, 1, 0, 255, 4, 3, 1, 255, 3, 2, 0, 255, 5, 3, 2, 255, 9, 5, 2, 255, 10, 2, 0, 255, 12, 2, 1, 255, 11, 3, 1, 255, 14, 6, 4, 255, 13, 5, 3, 255, 15, 5, 3, 255, 14, 4, 2, 255, 15, 5, 3, 255, 15, 4, 1, 255, 29, 11, 5, 255, 27, 11, 3, 255, 19, 9, 1, 255, 24, 12, 5, 255, 27, 13, 4, 255, 28, 15, 1, 255, 25, 13, 1, 255, 27, 13, 1, 255, 37, 14, 6, 255, 38, 17, 5, 255, 35, 19, 2, 255, 41, 24, 4, 255, 40, 20, 3, 255, 46, 21, 3, 255, 51, 31, 7, 255, 58, 33, 10, 255, 58, 39, 18, 255, 61, 44, 28, 255, 64, 55, 32, 255, 74, 65, 44, 255, 73, 64, 47, 255, 70, 67, 41, 255, 74, 65, 44, 255, 73, 63, 44, 255, 71, 61, 45, 255, 73, 58, 23, 255, 71, 60, 0, 255, 68, 62, 8, 255, 81, 72, 5, 255, 103, 79, 8, 255, 89, 70, 2, 255, 79, 71, 5, 255, 83, 66, 3, 255, 81, 65, 5, 255, 78, 63, 4, 255, 76, 58, 7, 255, 83, 61, 6, 255, 100, 68, 6, 255, 126, 83, 14, 255, 160, 92, 9, 255, 177, 88, 13, 255, 188, 91, 7, 255, 179, 84, 7, 255, 169, 84, 6, 255, 171, 81, 4, 255, 169, 82, 4, 255, 168, 83, 2, 255, 171, 87, 5, 255, 173, 91, 8, 255, 167, 83, 8, 255, 161, 84, 6, 255, 166, 84, 7, 255, 150, 73, 3, 255, 144, 76, 2, 255, 174, 102, 6, 255, 203, 125, 11, 255, 221, 137, 25, 255, 217, 135, 20, 255, 216, 137, 18, 255, 200, 118, 10, 255, 179, 90, 7, 255, 180, 101, 6, 255, 192, 112, 12, 255, 190, 109, 17, 255, 201, 118, 18, 255, 201, 119, 15, 255, 200, 112, 9, 255, 206, 113, 17, 255, 193, 105, 9, 255, 189, 100, 0, 255, 181, 96, 6, 255, 175, 91, 15, 255, 168, 90, 14, 255, 158, 79, 5, 255, 154, 74, 3, 255, 149, 70, 10, 255, 128, 58, 3, 255, 132, 58, 3, 255, 128, 59, 12, 255, 107, 43, 13, 255, 112, 52, 6, 255, 133, 65, 8, 255, 130, 64, 12, 255, 160, 93, 12, 255, 158, 75, 5, 255, 145, 60, 1, 255, 158, 65, 5, 255, 158, 60, 7, 255, 157, 68, 7, 255, 175, 96, 13, 255, 172, 82, 9, 255, 155, 59, 7, 255, 152, 58, 4, 255, 147, 63, 7, 255, 142, 63, 6, 255, 142, 68, 2, 255, 144, 70, 8, 255, 134, 59, 11, 255, 131, 57, 8, 255, 127, 57, 8, 255, 118, 52, 7, 255, 111, 46, 9, 255, 112, 44, 9, 255, 123, 55, 6, 255, 144, 71, 14, 255, 168, 90, 14, 255, 188, 108, 3, 255, 193, 110, 13, 255, 194, 112, 10, 255, 191, 110, 5, 255, 195, 113, 16, 255, 198, 118, 13, 255, 202, 121, 16, 255, 194, 109, 12, 255, 195, 110, 20, 255, 198, 115, 22, 255, 189, 106, 13, 255, 191, 110, 4, 255, 190, 109, 12, 255, 194, 111, 20, 255, 199, 117, 12, 255, 200, 116, 16, 255, 202, 118, 15, 255, 208, 121, 26, 255, 202, 119, 19, 255, 204, 124, 3, 255, 210, 129, 14, 255, 204, 121, 19, 255, 208, 121, 17, 255, 212, 124, 17, 255, 209, 125, 19, 255, 201, 121, 7, 255, 201, 117, 16, 255, 199, 111, 20, 255, 215, 133, 23, 255, 214, 133, 14, 255, 211, 128, 25, 255, 215, 135, 13, 255, 214, 133, 19, 255, 213, 132, 29, 255, 209, 129, 11, 255, 198, 115, 10, 255, 208, 131, 16, 255, 207, 130, 22, 255, 210, 137, 26, 255, 207, 135, 18, 255, 212, 135, 25, 255, 218, 137, 23, 255, 210, 126, 17, 255, 211, 128, 16, 255, 217, 138, 16, 255, 214, 136, 16, 255, 209, 133, 4, 255, 213, 138, 11, 255, 213, 138, 13, 255, 214, 139, 14, 255, 218, 141, 14, 255, 219, 141, 11, 255, 217, 139, 6, 255, 215, 143, 13, 255, 216, 140, 11, 255, 200, 113, 6, 255, 196, 106, 12, 255, 191, 104, 11, 255, 203, 122, 19, 255, 217, 139, 17, 255, 217, 136, 11, 255, 218, 133, 11, 255, 216, 135, 0, 255, 214, 139, 8, 255, 215, 141, 14, 255, 218, 144, 3, 255, 218, 145, 4, 255, 220, 147, 9, 255, 216, 144, 11, 255, 211, 138, 15, 255, 215, 142, 16, 255, 217, 143, 13, 255, 215, 144, 5, 255, 215, 142, 7, 255, 217, 142, 14, 255, 216, 135, 14, 255, 214, 135, 5, 255, 222, 141, 12, 255, 219, 138, 8, 255, 218, 139, 4, 255, 218, 142, 2, 255, 218, 143, 3, 255, 220, 145, 12, 255, 221, 149, 6, 255, 219, 149, 3, 255, 220, 144, 4, 255, 215, 138, 4, 255, 212, 133, 9, 255, 210, 132, 6, 255, 212, 134, 5, 255, 212, 133, 9, 255, 211, 131, 6, 255, 211, 132, 1, 255, 210, 132, 3, 255, 207, 129, 3, 255, 204, 125, 8, 255, 203, 125, 11, 255, 206, 130, 7, 255, 205, 129, 3, 255, 208, 130, 7, 255, 189, 112, 6, 255, 183, 106, 2, 255, 185, 107, 7, 255, 184, 108, 6, 255, 188, 113, 4, 255, 204, 130, 7, 255, 191, 121, 6, 255, 161, 93, 3, 255, 176, 110, 10, 255, 188, 115, 11, 255, 190, 113, 8, 255, 207, 139, 8, 255, 211, 148, 3, 255, 212, 152, 2, 255, 213, 154, 4, 255, 212, 156, 2, 255, 215, 158, 5, 255, 216, 153, 5, 255, 207, 140, 1, 255, 204, 133, 7, 255, 207, 137, 8, 255, 205, 137, 3, 255, 214, 145, 7, 255, 215, 143, 13, 255, 211, 139, 4, 255, 200, 124, 11, 255, 193, 116, 16, 255, 188, 113, 12, 255, 196, 123, 5, 255, 193, 120, 8, 255, 167, 86, 5, 255, 159, 76, 7, 255, 175, 94, 5, 255, 183, 101, 3, 255, 181, 97, 2, 255, 177, 92, 2, 255, 179, 98, 0, 255, 183, 106, 6, 255, 167, 93, 4, 255, 168, 99, 1, 255, 159, 92, 5, 255, 150, 82, 14, 255, 159, 99, 7, 255, 177, 115, 5, 255, 178, 104, 6, 255, 163, 90, 2, 255, 166, 89, 6, 255, 173, 94, 7, 255, 171, 93, 6, 255, 162, 90, 10, 255, 190, 117, 6, 255, 207, 136, 8, 255, 199, 129, 13, 255, 200, 132, 2, 255, 202, 143, 5, 255, 195, 137, 0, 255, 192, 121, 3, 255, 200, 130, 9, 255, 203, 132, 9, 255, 200, 129, 5, 255, 201, 130, 0, 255, 203, 128, 7, 255, 202, 125, 4, 255, 205, 127, 2, 255, 205, 126, 4, 255, 206, 126, 10, 255, 207, 127, 11, 255, 209, 132, 10, 255, 206, 131, 4, 255, 206, 130, 9, 255, 202, 124, 15, 255, 201, 123, 8, 255, 201, 118, 14, 255, 199, 116, 13, 255, 193, 111, 2, 255, 190, 108, 1, 255, 190, 106, 6, 255, 190, 104, 5, 255, 186, 100, 1, 255, 186, 100, 4, 255, 187, 98, 2, 255, 182, 99, 12, 255, 181, 93, 21, 255, 170, 83, 11, 255, 170, 88, 6, 255, 159, 71, 3, 255, 155, 67, 1, 255, 154, 67, 5, 255, 157, 68, 7, 255, 151, 70, 2, 255, 144, 62, 6, 255, 147, 61, 5, 255, 154, 66, 4, 255, 152, 61, 4, 255, 149, 61, 7, 255, 148, 60, 4, 255, 135, 59, 6, 255, 128, 57, 6, 255, 139, 59, 4, 255, 139, 56, 1, 255, 131, 54, 4, 255, 124, 55, 1, 255, 130, 59, 4, 255, 126, 50, 3, 255, 125, 45, 3, 255, 136, 52, 2, 255, 137, 58, 2, 255, 131, 54, 4, 255, 133, 56, 1, 255, 138, 59, 2, 255, 129, 57, 1, 255, 128, 57, 1, 255, 120, 52, 3, 255, 123, 54, 4, 255, 123, 50, 2, 255, 124, 49, 1, 255, 125, 48, 1, 255, 122, 42, 3, 255, 118, 40, 3, 255, 119, 43, 4, 255, 123, 48, 4, 255, 126, 49, 1, 255, 130, 51, 2, 255, 135, 56, 1, 255, 143, 60, 2, 255, 152, 60, 8, 255, 155, 66, 5, 255, 160, 72, 3, 255, 159, 66, 1, 255, 160, 66, 2, 255, 166, 74, 1, 255, 176, 83, 0, 255, 183, 87, 3, 255, 177, 81, 4, 255, 172, 81, 2, 255, 172, 83, 1, 255, 174, 83, 3, 255, 174, 78, 2, 255, 177, 81, 2, 255, 175, 84, 2, 255, 172, 81, 1, 255, 171, 80, 3, 255, 1, 28, 67, 255, 0, 20, 54, 255, 2, 23, 49, 255, 3, 31, 67, 255, 1, 30, 71, 255, 2, 30, 62, 255, 2, 31, 67, 255, 5, 29, 64, 255, 4, 13, 34, 255, 0, 2, 3, 255, 1, 6, 11, 255, 2, 9, 25, 255, 4, 12, 36, 255, 0, 16, 31, 255, 1, 16, 37, 255, 2, 17, 33, 255, 3, 15, 30, 255, 2, 13, 31, 255, 2, 15, 29, 255, 0, 8, 25, 255, 2, 2, 20, 255, 0, 3, 10, 255, 1, 1, 6, 255, 2, 0, 5, 255, 0, 0, 13, 255, 6, 27, 156, 255, 49, 69, 93, 255, 36, 28, 0, 255, 19, 16, 11, 255, 26, 31, 74, 255, 7, 6, 31, 255, 12, 0, 0, 255, 8, 4, 4, 255, 7, 3, 1, 255, 5, 1, 0, 255, 4, 0, 1, 255, 5, 1, 2, 255, 5, 1, 1, 255, 3, 0, 0, 255, 3, 1, 0, 255, 9, 7, 4, 255, 9, 5, 2, 255, 7, 0, 0, 255, 14, 4, 3, 255, 14, 4, 3, 255, 11, 0, 0, 255, 12, 3, 1, 255, 14, 5, 3, 255, 13, 3, 1, 255, 13, 3, 1, 255, 13, 3, 2, 255, 24, 10, 2, 255, 31, 11, 4, 255, 28, 11, 4, 255, 19, 9, 1, 255, 22, 10, 2, 255, 27, 14, 4, 255, 23, 13, 0, 255, 30, 17, 4, 255, 36, 16, 4, 255, 33, 15, 1, 255, 39, 19, 2, 255, 42, 22, 4, 255, 35, 19, 1, 255, 34, 19, 2, 255, 37, 22, 3, 255, 52, 27, 4, 255, 60, 38, 4, 255, 65, 45, 12, 255, 64, 51, 21, 255, 66, 56, 36, 255, 73, 66, 39, 255, 74, 67, 43, 255, 77, 67, 49, 255, 72, 67, 43, 255, 69, 66, 35, 255, 78, 65, 49, 255, 76, 64, 25, 255, 70, 65, 4, 255, 83, 64, 9, 255, 91, 72, 3, 255, 82, 64, 9, 255, 80, 63, 4, 255, 83, 65, 1, 255, 80, 59, 5, 255, 73, 57, 11, 255, 76, 62, 5, 255, 100, 72, 4, 255, 134, 82, 6, 255, 162, 87, 6, 255, 171, 85, 7, 255, 172, 79, 4, 255, 182, 88, 5, 255, 178, 92, 3, 255, 175, 91, 4, 255, 182, 94, 3, 255, 178, 90, 3, 255, 175, 90, 1, 255, 173, 89, 1, 255, 167, 82, 6, 255, 167, 83, 1, 255, 161, 73, 1, 255, 158, 77, 5, 255, 142, 68, 4, 255, 144, 69, 3, 255, 140, 71, 2, 255, 137, 70, 3, 255, 167, 89, 8, 255, 169, 90, 11, 255, 186, 108, 17, 255, 194, 109, 5, 255, 188, 98, 9, 255, 190, 104, 10, 255, 188, 109, 9, 255, 186, 106, 11, 255, 186, 95, 14, 255, 170, 86, 1, 255, 166, 81, 7, 255, 163, 82, 8, 255, 153, 67, 7, 255, 144, 57, 10, 255, 137, 60, 1, 255, 131, 53, 7, 255, 110, 44, 3, 255, 107, 45, 12, 255, 116, 59, 9, 255, 125, 55, 1, 255, 120, 49, 2, 255, 110, 49, 7, 255, 135, 64, 3, 255, 157, 73, 7, 255, 147, 55, 5, 255, 151, 61, 3, 255, 162, 73, 4, 255, 161, 75, 6, 255, 177, 88, 5, 255, 158, 64, 8, 255, 147, 57, 5, 255, 149, 54, 2, 255, 143, 52, 3, 255, 147, 69, 5, 255, 163, 71, 13, 255, 134, 50, 6, 255, 132, 53, 3, 255, 125, 53, 4, 255, 122, 51, 5, 255, 115, 51, 5, 255, 127, 62, 6, 255, 117, 52, 3, 255, 110, 48, 10, 255, 103, 43, 11, 255, 101, 42, 10, 255, 107, 44, 4, 255, 105, 42, 4, 255, 112, 54, 6, 255, 132, 68, 6, 255, 134, 65, 9, 255, 137, 65, 16, 255, 159, 85, 21, 255, 184, 109, 12, 255, 193, 110, 19, 255, 192, 110, 7, 255, 195, 112, 12, 255, 192, 110, 9, 255, 193, 110, 14, 255, 200, 117, 19, 255, 200, 116, 15, 255, 186, 103, 6, 255, 186, 100, 17, 255, 180, 94, 11, 255, 198, 114, 21, 255, 201, 122, 4, 255, 191, 109, 10, 255, 193, 108, 27, 255, 203, 118, 15, 255, 205, 120, 3, 255, 207, 121, 12, 255, 211, 125, 25, 255, 213, 127, 22, 255, 195, 103, 6, 255, 182, 92, 5, 255, 201, 118, 15, 255, 206, 120, 23, 255, 204, 119, 12, 255, 195, 109, 15, 255, 203, 124, 15, 255, 213, 133, 19, 255, 212, 132, 15, 255, 213, 130, 21, 255, 210, 128, 10, 255, 209, 128, 8, 255, 210, 131, 11, 255, 210, 131, 5, 255, 205, 126, 14, 255, 212, 137, 18, 255, 211, 139, 15, 255, 213, 140, 16, 255, 213, 138, 16, 255, 215, 141, 15, 255, 212, 137, 13, 255, 211, 132, 7, 255, 217, 135, 13, 255, 215, 129, 16, 255, 211, 128, 10, 255, 214, 135, 5, 255, 216, 138, 10, 255, 213, 137, 11, 255, 213, 138, 12, 255, 216, 142, 12, 255, 216, 143, 9, 255, 216, 142, 7, 255, 223, 143, 7, 255, 220, 138, 11, 255, 217, 136, 17, 255, 213, 140, 9, 255, 216, 144, 14, 255, 219, 145, 20, 255, 218, 142, 12, 255, 220, 141, 15, 255, 220, 137, 13, 255, 216, 133, 6, 255, 214, 137, 8, 255, 215, 139, 12, 255, 215, 139, 12, 255, 217, 138, 18, 255, 214, 137, 12, 255, 210, 136, 1, 255, 212, 138, 11, 255, 217, 139, 15, 255, 218, 139, 5, 255, 216, 133, 11, 255, 213, 129, 11, 255, 216, 134, 3, 255, 218, 138, 1, 255, 220, 140, 7, 255, 221, 138, 4, 255, 220, 136, 4, 255, 216, 136, 10, 255, 216, 137, 13, 255, 216, 140, 9, 255, 220, 143, 16, 255, 220, 143, 16, 255, 216, 142, 3, 255, 218, 140, 7, 255, 212, 133, 6, 255, 215, 136, 12, 255, 214, 135, 8, 255, 210, 131, 0, 255, 211, 131, 1, 255, 210, 129, 5, 255, 213, 130, 7, 255, 212, 130, 6, 255, 198, 116, 2, 255, 196, 116, 7, 255, 199, 120, 5, 255, 207, 128, 6, 255, 211, 132, 5, 255, 201, 117, 10, 255, 178, 99, 12, 255, 173, 99, 4, 255, 175, 96, 0, 255, 177, 102, 7, 255, 191, 124, 6, 255, 206, 139, 7, 255, 193, 118, 7, 255, 183, 107, 4, 255, 185, 116, 1, 255, 188, 120, 7, 255, 201, 135, 8, 255, 209, 146, 8, 255, 212, 152, 4, 255, 215, 156, 4, 255, 216, 157, 2, 255, 211, 151, 0, 255, 212, 149, 4, 255, 211, 141, 19, 255, 201, 129, 3, 255, 204, 134, 3, 255, 201, 131, 4, 255, 208, 139, 2, 255, 203, 127, 6, 255, 210, 134, 15, 255, 205, 138, 11, 255, 199, 125, 21, 255, 195, 118, 10, 255, 193, 115, 3, 255, 190, 107, 3, 255, 180, 94, 10, 255, 162, 82, 10, 255, 156, 73, 9, 255, 163, 80, 3, 255, 175, 90, 1, 255, 169, 79, 5, 255, 172, 82, 9, 255, 178, 95, 4, 255, 182, 105, 6, 255, 178, 107, 1, 255, 176, 101, 5, 255, 162, 83, 8, 255, 145, 73, 5, 255, 131, 66, 3, 255, 144, 74, 5, 255, 147, 71, 4, 255, 149, 73, 5, 255, 157, 81, 3, 255, 163, 87, 11, 255, 162, 85, 11, 255, 164, 87, 6, 255, 157, 84, 2, 255, 167, 93, 2, 255, 190, 113, 14, 255, 201, 140, 10, 255, 198, 148, 1, 255, 198, 136, 4, 255, 191, 114, 8, 255, 198, 120, 11, 255, 202, 124, 10, 255, 199, 122, 11, 255, 200, 126, 1, 255, 200, 125, 4, 255, 204, 126, 1, 255, 205, 125, 8, 255, 206, 125, 12, 255, 206, 126, 5, 255, 204, 125, 1, 255, 207, 127, 9, 255, 207, 128, 10, 255, 205, 128, 11, 255, 199, 122, 12, 255, 198, 120, 1, 255, 201, 116, 11, 255, 200, 113, 14, 255, 195, 111, 9, 255, 187, 104, 7, 255, 183, 96, 12, 255, 183, 97, 8, 255, 189, 102, 6, 255, 189, 101, 8, 255, 189, 100, 4, 255, 185, 94, 10, 255, 191, 103, 24, 255, 205, 119, 10, 255, 199, 107, 10, 255, 167, 76, 7, 255, 157, 67, 2, 255, 154, 64, 4, 255, 156, 72, 4, 255, 153, 73, 1, 255, 146, 64, 4, 255, 152, 68, 5, 255, 150, 65, 0, 255, 157, 66, 9, 255, 154, 60, 7, 255, 132, 52, 3, 255, 129, 49, 6, 255, 138, 57, 4, 255, 138, 65, 2, 255, 138, 57, 4, 255, 133, 49, 6, 255, 118, 47, 3, 255, 110, 44, 2, 255, 102, 37, 1, 255, 104, 38, 4, 255, 118, 41, 7, 255, 118, 42, 8, 255, 101, 34, 5, 255, 116, 52, 8, 255, 128, 63, 8, 255, 124, 65, 6, 255, 118, 56, 4, 255, 115, 54, 5, 255, 122, 62, 4, 255, 125, 60, 1, 255, 126, 53, 0, 255, 122, 45, 0, 255, 120, 42, 4, 255, 121, 43, 2, 255, 125, 51, 2, 255, 133, 59, 5, 255, 144, 62, 6, 255, 148, 63, 7, 255, 146, 61, 5, 255, 146, 61, 3, 255, 152, 63, 0, 255, 167, 75, 7, 255, 177, 85, 6, 255, 180, 88, 4, 255, 181, 88, 5, 255, 180, 88, 4, 255, 176, 80, 2, 255, 173, 76, 3, 255, 169, 73, 1, 255, 169, 75, 0, 255, 170, 79, 1, 255, 171, 80, 1, 255, 175, 81, 3, 255, 179, 84, 5, 255, 175, 82, 1, 255, 174, 81, 1, 255, 174, 83, 2, 255, 2, 25, 55, 255, 4, 30, 65, 255, 1, 28, 59, 255, 5, 24, 66, 255, 5, 24, 71, 255, 2, 33, 63, 255, 1, 34, 59, 255, 1, 28, 63, 255, 2, 25, 59, 255, 0, 14, 38, 255, 0, 4, 14, 255, 2, 3, 6, 255, 2, 6, 17, 255, 1, 10, 26, 255, 3, 14, 35, 255, 2, 13, 31, 255, 1, 10, 27, 255, 3, 10, 30, 255, 2, 8, 26, 255, 1, 1, 7, 255, 1, 1, 12, 255, 2, 3, 7, 255, 4, 2, 8, 255, 2, 0, 4, 255, 0, 29, 169, 255, 25, 65, 180, 255, 44, 37, 9, 255, 20, 7, 1, 255, 27, 27, 45, 255, 18, 12, 27, 255, 11, 1, 1, 255, 10, 4, 2, 255, 7, 3, 1, 255, 6, 2, 2, 255, 5, 1, 1, 255, 7, 3, 4, 255, 9, 4, 5, 255, 7, 2, 1, 255, 7, 0, 0, 255, 8, 2, 1, 255, 9, 4, 2, 255, 7, 2, 1, 255, 9, 2, 0, 255, 12, 3, 1, 255, 13, 3, 2, 255, 14, 4, 2, 255, 14, 4, 2, 255, 16, 6, 4, 255, 15, 6, 4, 255, 17, 7, 3, 255, 19, 8, 4, 255, 30, 12, 3, 255, 30, 8, 1, 255, 28, 10, 3, 255, 22, 12, 1, 255, 25, 12, 2, 255, 28, 16, 7, 255, 25, 13, 4, 255, 31, 14, 3, 255, 34, 16, 1, 255, 40, 21, 2, 255, 42, 23, 3, 255, 37, 19, 1, 255, 38, 20, 4, 255, 50, 27, 7, 255, 50, 23, 5, 255, 52, 24, 7, 255, 54, 30, 7, 255, 61, 39, 15, 255, 65, 45, 17, 255, 74, 54, 25, 255, 86, 67, 32, 255, 86, 68, 50, 255, 81, 68, 52, 255, 74, 67, 48, 255, 72, 67, 45, 255, 80, 70, 33, 255, 72, 61, 32, 255, 68, 65, 16, 255, 96, 68, 11, 255, 81, 63, 7, 255, 74, 63, 2, 255, 88, 61, 1, 255, 77, 59, 1, 255, 93, 81, 5, 255, 107, 73, 12, 255, 130, 73, 7, 255, 162, 83, 9, 255, 173, 81, 11, 255, 169, 81, 5, 255, 169, 81, 7, 255, 173, 88, 4, 255, 182, 95, 3, 255, 179, 88, 7, 255, 176, 89, 5, 255, 165, 82, 6, 255, 153, 74, 4, 255, 156, 80, 5, 255, 147, 72, 7, 255, 131, 63, 4, 255, 127, 65, 4, 255, 120, 64, 4, 255, 114, 62, 3, 255, 103, 57, 3, 255, 104, 60, 1, 255, 113, 61, 4, 255, 115, 62, 12, 255, 115, 65, 12, 255, 116, 59, 5, 255, 132, 64, 9, 255, 139, 64, 12, 255, 152, 82, 8, 255, 138, 73, 16, 255, 126, 56, 8, 255, 135, 65, 6, 255, 155, 74, 3, 255, 141, 63, 5, 255, 106, 47, 4, 255, 137, 69, 11, 255, 112, 55, 6, 255, 86, 47, 4, 255, 132, 67, 6, 255, 118, 56, 8, 255, 101, 43, 2, 255, 108, 46, 4, 255, 154, 84, 9, 255, 142, 70, 5, 255, 108, 46, 6, 255, 129, 57, 2, 255, 129, 59, 6, 255, 126, 54, 3, 255, 133, 54, 8, 255, 134, 50, 1, 255, 140, 55, 4, 255, 144, 58, 8, 255, 137, 52, 1, 255, 138, 58, 1, 255, 131, 55, 3, 255, 125, 56, 6, 255, 125, 57, 5, 255, 125, 56, 5, 255, 121, 55, 5, 255, 120, 56, 3, 255, 109, 48, 5, 255, 108, 52, 5, 255, 111, 52, 8, 255, 115, 49, 5, 255, 116, 55, 5, 255, 118, 54, 10, 255, 110, 49, 5, 255, 109, 51, 7, 255, 107, 50, 5, 255, 113, 50, 6, 255, 115, 45, 12, 255, 137, 60, 8, 255, 157, 76, 6, 255, 132, 60, 6, 255, 117, 62, 3, 255, 111, 50, 6, 255, 144, 71, 14, 255, 179, 96, 10, 255, 186, 104, 10, 255, 187, 106, 6, 255, 182, 103, 11, 255, 186, 107, 7, 255, 188, 102, 13, 255, 182, 97, 6, 255, 185, 103, 14, 255, 188, 105, 18, 255, 186, 105, 10, 255, 194, 113, 15, 255, 193, 112, 9, 255, 191, 110, 20, 255, 196, 122, 14, 255, 200, 122, 9, 255, 202, 120, 15, 255, 205, 123, 18, 255, 205, 123, 11, 255, 201, 117, 5, 255, 198, 111, 16, 255, 205, 120, 15, 255, 209, 130, 12, 255, 211, 133, 13, 255, 208, 126, 24, 255, 210, 130, 26, 255, 210, 131, 23, 255, 208, 127, 18, 255, 209, 128, 13, 255, 209, 124, 26, 255, 204, 121, 20, 255, 208, 128, 18, 255, 206, 126, 26, 255, 207, 126, 30, 255, 209, 133, 18, 255, 212, 138, 18, 255, 211, 136, 15, 255, 210, 133, 14, 255, 213, 132, 13, 255, 206, 126, 3, 255, 201, 121, 20, 255, 210, 130, 16, 255, 216, 137, 10, 255, 214, 132, 15, 255, 212, 134, 1, 255, 211, 134, 6, 255, 213, 133, 9, 255, 215, 136, 12, 255, 214, 139, 13, 255, 214, 140, 13, 255, 213, 140, 12, 255, 215, 142, 16, 255, 214, 142, 6, 255, 214, 139, 6, 255, 210, 133, 12, 255, 206, 130, 7, 255, 216, 142, 15, 255, 218, 143, 17, 255, 216, 145, 11, 255, 210, 139, 12, 255, 206, 130, 10, 255, 211, 134, 9, 255, 216, 140, 16, 255, 216, 140, 16, 255, 215, 139, 10, 255, 212, 134, 6, 255, 215, 137, 17, 255, 213, 140, 4, 255, 216, 141, 6, 255, 213, 134, 8, 255, 215, 134, 2, 255, 217, 136, 3, 255, 220, 138, 9, 255, 218, 139, 4, 255, 213, 136, 7, 255, 207, 132, 12, 255, 195, 115, 10, 255, 208, 126, 18, 255, 216, 147, 2, 255, 212, 138, 10, 255, 214, 137, 12, 255, 219, 142, 1, 255, 219, 138, 3, 255, 217, 131, 9, 255, 214, 130, 6, 255, 217, 132, 7, 255, 214, 129, 6, 255, 215, 130, 7, 255, 214, 129, 5, 255, 212, 127, 1, 255, 213, 128, 5, 255, 211, 127, 9, 255, 209, 127, 7, 255, 204, 124, 2, 255, 203, 123, 2, 255, 204, 126, 2, 255, 213, 136, 2, 255, 207, 123, 7, 255, 178, 91, 11, 255, 166, 88, 0, 255, 171, 96, 8, 255, 186, 110, 7, 255, 195, 128, 7, 255, 215, 157, 3, 255, 206, 140, 9, 255, 177, 100, 12, 255, 183, 105, 5, 255, 194, 122, 4, 255, 207, 138, 6, 255, 211, 148, 5, 255, 212, 154, 5, 255, 214, 155, 2, 255, 211, 149, 1, 255, 209, 144, 3, 255, 207, 138, 3, 255, 210, 139, 8, 255, 200, 128, 9, 255, 197, 122, 11, 255, 201, 129, 5, 255, 203, 131, 9, 255, 199, 127, 7, 255, 183, 101, 10, 255, 206, 127, 16, 255, 214, 140, 19, 255, 206, 128, 21, 255, 202, 124, 10, 255, 196, 118, 8, 255, 196, 117, 3, 255, 189, 109, 8, 255, 189, 105, 3, 255, 181, 95, 3, 255, 174, 86, 4, 255, 173, 86, 6, 255, 167, 84, 2, 255, 176, 97, 3, 255, 183, 103, 4, 255, 185, 110, 7, 255, 179, 105, 2, 255, 168, 87, 6, 255, 169, 86, 12, 255, 170, 95, 11, 255, 143, 72, 2, 255, 130, 58, 6, 255, 130, 60, 3, 255, 151, 74, 4, 255, 147, 72, 5, 255, 151, 78, 8, 255, 160, 82, 6, 255, 167, 95, 7, 255, 164, 101, 2, 255, 142, 74, 7, 255, 184, 125, 26, 255, 207, 152, 8, 255, 207, 144, 0, 255, 202, 137, 6, 255, 196, 119, 8, 255, 196, 115, 3, 255, 198, 118, 3, 255, 198, 120, 12, 255, 201, 126, 6, 255, 200, 124, 1, 255, 203, 125, 5, 255, 204, 126, 6, 255, 205, 125, 7, 255, 205, 125, 7, 255, 202, 124, 5, 255, 203, 125, 4, 255, 204, 124, 7, 255, 202, 123, 8, 255, 200, 123, 15, 255, 198, 118, 9, 255, 198, 112, 7, 255, 194, 108, 3, 255, 195, 111, 8, 255, 195, 109, 13, 255, 187, 102, 11, 255, 187, 103, 6, 255, 192, 107, 5, 255, 189, 103, 5, 255, 189, 101, 6, 255, 197, 112, 17, 255, 207, 121, 21, 255, 203, 116, 12, 255, 183, 92, 5, 255, 167, 78, 3, 255, 161, 75, 6, 255, 157, 74, 8, 255, 150, 72, 1, 255, 152, 72, 5, 255, 149, 70, 4, 255, 146, 69, 3, 255, 148, 66, 3, 255, 150, 65, 2, 255, 154, 65, 4, 255, 148, 58, 8, 255, 144, 61, 4, 255, 148, 65, 1, 255, 148, 63, 2, 255, 141, 62, 5, 255, 135, 58, 2, 255, 132, 52, 3, 255, 128, 41, 6, 255, 108, 33, 5, 255, 89, 29, 1, 255, 95, 27, 3, 255, 99, 27, 5, 255, 91, 31, 0, 255, 109, 50, 5, 255, 121, 57, 5, 255, 117, 56, 2, 255, 115, 50, 2, 255, 117, 53, 6, 255, 114, 54, 6, 255, 124, 58, 2, 255, 129, 56, 2, 255, 125, 48, 4, 255, 127, 49, 4, 255, 139, 61, 2, 255, 146, 68, 2, 255, 144, 62, 3, 255, 150, 65, 6, 255, 143, 60, 5, 255, 136, 53, 1, 255, 155, 70, 4, 255, 175, 85, 4, 255, 182, 89, 2, 255, 188, 98, 1, 255, 190, 98, 0, 255, 186, 91, 1, 255, 180, 85, 1, 255, 169, 73, 1, 255, 164, 72, 3, 255, 167, 77, 2, 255, 171, 79, 3, 255, 174, 80, 7, 255, 174, 81, 5, 255, 174, 85, 2, 255, 174, 84, 0, 255, 176, 80, 1, 255, 176, 81, 0, 255, 177, 85, 1, 255, 1, 26, 59, 255, 6, 30, 73, 255, 1, 23, 59, 255, 1, 23, 54, 255, 2, 24, 62, 255, 3, 25, 67, 255, 2, 24, 65, 255, 4, 29, 54, 255, 0, 25, 53, 255, 1, 20, 53, 255, 4, 15, 41, 255, 1, 7, 19, 255, 2, 4, 12, 255, 1, 5, 19, 255, 3, 11, 29, 255, 1, 10, 26, 255, 2, 9, 27, 255, 4, 10, 28, 255, 2, 6, 16, 255, 0, 1, 13, 255, 0, 1, 15, 255, 3, 0, 16, 255, 4, 0, 0, 255, 0, 15, 118, 255, 8, 90, 227, 255, 45, 45, 33, 255, 24, 7, 0, 255, 21, 20, 68, 255, 12, 16, 71, 255, 5, 0, 4, 255, 5, 2, 3, 255, 8, 2, 1, 255, 6, 1, 0, 255, 6, 2, 1, 255, 5, 1, 0, 255, 7, 3, 3, 255, 8, 3, 2, 255, 7, 2, 1, 255, 8, 2, 0, 255, 11, 5, 2, 255, 9, 4, 2, 255, 8, 3, 1, 255, 12, 3, 1, 255, 12, 2, 0, 255, 16, 5, 2, 255, 15, 4, 2, 255, 13, 3, 1, 255, 16, 6, 4, 255, 17, 6, 3, 255, 20, 7, 2, 255, 24, 10, 3, 255, 26, 8, 0, 255, 31, 11, 5, 255, 26, 10, 3, 255, 23, 12, 0, 255, 33, 17, 4, 255, 33, 16, 4, 255, 32, 16, 3, 255, 38, 21, 6, 255, 34, 19, 3, 255, 34, 14, 0, 255, 38, 20, 2, 255, 36, 21, 2, 255, 41, 21, 5, 255, 42, 24, 4, 255, 48, 26, 3, 255, 47, 31, 3, 255, 54, 36, 11, 255, 54, 40, 10, 255, 60, 44, 19, 255, 68, 49, 27, 255, 82, 65, 14, 255, 87, 66, 39, 255, 79, 68, 54, 255, 79, 71, 37, 255, 85, 71, 40, 255, 82, 70, 31, 255, 82, 63, 29, 255, 101, 71, 18, 255, 86, 66, 13, 255, 82, 65, 7, 255, 83, 64, 2, 255, 90, 69, 5, 255, 101, 71, 5, 255, 124, 87, 6, 255, 146, 84, 9, 255, 168, 90, 8, 255, 175, 90, 5, 255, 171, 88, 5, 255, 176, 97, 7, 255, 175, 89, 6, 255, 171, 86, 7, 255, 166, 89, 0, 255, 161, 79, 3, 255, 153, 75, 2, 255, 128, 64, 1, 255, 107, 56, 3, 255, 105, 58, 6, 255, 97, 57, 2, 255, 95, 61, 10, 255, 91, 58, 11, 255, 90, 59, 6, 255, 88, 55, 5, 255, 91, 56, 2, 255, 92, 60, 2, 255, 100, 57, 2, 255, 114, 62, 3, 255, 115, 65, 2, 255, 122, 66, 1, 255, 119, 62, 3, 255, 114, 52, 5, 255, 119, 59, 8, 255, 105, 43, 6, 255, 128, 52, 4, 255, 152, 76, 2, 255, 151, 71, 2, 255, 131, 64, 11, 255, 130, 64, 1, 255, 139, 67, 7, 255, 98, 49, 7, 255, 91, 49, 6, 255, 108, 51, 9, 255, 98, 53, 8, 255, 100, 55, 3, 255, 98, 51, 1, 255, 123, 54, 1, 255, 113, 52, 5, 255, 104, 54, 10, 255, 103, 52, 4, 255, 104, 47, 2, 255, 119, 55, 2, 255, 128, 58, 4, 255, 130, 57, 6, 255, 130, 57, 7, 255, 122, 49, 5, 255, 120, 56, 0, 255, 117, 55, 5, 255, 118, 53, 3, 255, 115, 51, 9, 255, 111, 48, 4, 255, 111, 45, 4, 255, 111, 53, 4, 255, 108, 49, 2, 255, 105, 47, 11, 255, 107, 46, 7, 255, 110, 49, 11, 255, 115, 47, 7, 255, 126, 57, 1, 255, 125, 52, 3, 255, 119, 48, 4, 255, 114, 52, 1, 255, 112, 54, 8, 255, 112, 50, 7, 255, 115, 49, 6, 255, 117, 51, 9, 255, 117, 54, 6, 255, 113, 53, 3, 255, 109, 49, 18, 255, 99, 44, 9, 255, 103, 50, 11, 255, 136, 69, 11, 255, 155, 77, 12, 255, 172, 88, 9, 255, 174, 87, 15, 255, 181, 102, 8, 255, 178, 98, 5, 255, 177, 96, 11, 255, 172, 90, 18, 255, 180, 100, 11, 255, 192, 113, 12, 255, 188, 109, 11, 255, 190, 110, 11, 255, 196, 116, 17, 255, 199, 115, 11, 255, 200, 115, 13, 255, 202, 115, 15, 255, 201, 117, 5, 255, 205, 121, 11, 255, 198, 109, 10, 255, 195, 114, 20, 255, 203, 123, 17, 255, 210, 128, 15, 255, 206, 129, 13, 255, 201, 125, 19, 255, 199, 122, 14, 255, 202, 125, 24, 255, 197, 123, 18, 255, 198, 122, 6, 255, 203, 121, 13, 255, 203, 118, 15, 255, 193, 105, 15, 255, 195, 111, 12, 255, 200, 123, 15, 255, 207, 130, 24, 255, 204, 129, 12, 255, 207, 132, 12, 255, 209, 130, 26, 255, 200, 119, 16, 255, 183, 104, 5, 255, 180, 102, 21, 255, 186, 109, 14, 255, 202, 123, 10, 255, 208, 126, 9, 255, 206, 125, 8, 255, 209, 129, 9, 255, 212, 135, 9, 255, 210, 135, 7, 255, 211, 138, 8, 255, 212, 140, 7, 255, 212, 137, 7, 255, 212, 137, 11, 255, 210, 143, 2, 255, 218, 146, 18, 255, 216, 138, 22, 255, 215, 136, 17, 255, 219, 143, 19, 255, 217, 140, 16, 255, 216, 142, 4, 255, 215, 140, 13, 255, 208, 130, 15, 255, 203, 123, 17, 255, 208, 127, 13, 255, 212, 133, 6, 255, 212, 132, 8, 255, 210, 130, 8, 255, 211, 129, 18, 255, 213, 133, 10, 255, 215, 136, 8, 255, 216, 134, 12, 255, 218, 133, 12, 255, 213, 130, 12, 255, 205, 126, 2, 255, 204, 122, 3, 255, 211, 135, 4, 255, 213, 142, 14, 255, 204, 130, 5, 255, 216, 133, 14, 255, 214, 132, 4, 255, 209, 127, 2, 255, 209, 126, 11, 255, 213, 130, 11, 255, 213, 131, 6, 255, 211, 130, 9, 255, 214, 134, 7, 255, 217, 136, 13, 255, 204, 122, 5, 255, 205, 123, 5, 255, 211, 128, 7, 255, 209, 126, 6, 255, 209, 125, 6, 255, 209, 125, 6, 255, 207, 124, 5, 255, 208, 126, 5, 255, 209, 128, 2, 255, 212, 131, 7, 255, 210, 129, 10, 255, 185, 98, 9, 255, 169, 88, 4, 255, 170, 93, 3, 255, 180, 98, 12, 255, 193, 116, 10, 255, 207, 139, 7, 255, 208, 133, 13, 255, 178, 98, 12, 255, 180, 108, 6, 255, 194, 127, 4, 255, 209, 147, 9, 255, 211, 151, 6, 255, 210, 149, 9, 255, 211, 150, 1, 255, 210, 144, 6, 255, 205, 135, 4, 255, 203, 131, 6, 255, 201, 129, 7, 255, 200, 126, 7, 255, 202, 131, 6, 255, 207, 138, 2, 255, 207, 137, 5, 255, 207, 137, 17, 255, 206, 134, 12, 255, 193, 114, 6, 255, 196, 117, 12, 255, 208, 136, 22, 255, 201, 124, 18, 255, 201, 121, 7, 255, 202, 121, 8, 255, 203, 123, 7, 255, 198, 117, 4, 255, 195, 112, 1, 255, 189, 103, 4, 255, 179, 91, 3, 255, 170, 81, 4, 255, 169, 80, 6, 255, 176, 91, 1, 255, 184, 107, 3, 255, 189, 114, 2, 255, 187, 107, 5, 255, 179, 97, 6, 255, 171, 92, 4, 255, 159, 83, 3, 255, 156, 79, 3, 255, 142, 66, 8, 255, 134, 61, 0, 255, 146, 67, 15, 255, 137, 65, 13, 255, 139, 69, 4, 255, 145, 73, 6, 255, 153, 76, 5, 255, 173, 91, 9, 255, 180, 116, 9, 255, 205, 151, 7, 255, 211, 147, 10, 255, 202, 135, 8, 255, 200, 132, 3, 255, 194, 119, 1, 255, 197, 114, 8, 255, 199, 119, 9, 255, 197, 122, 8, 255, 201, 127, 7, 255, 205, 127, 5, 255, 203, 127, 6, 255, 202, 127, 4, 255, 204, 125, 4, 255, 204, 124, 7, 255, 204, 123, 8, 255, 201, 121, 7, 255, 202, 118, 5, 255, 199, 117, 2, 255, 199, 118, 15, 255, 198, 114, 16, 255, 194, 109, 10, 255, 193, 109, 4, 255, 192, 108, 6, 255, 191, 105, 1, 255, 192, 107, 3, 255, 190, 106, 7, 255, 190, 107, 6, 255, 196, 110, 4, 255, 203, 117, 6, 255, 201, 121, 16, 255, 201, 113, 20, 255, 191, 101, 13, 255, 179, 94, 1, 255, 165, 78, 3, 255, 154, 70, 10, 255, 152, 75, 5, 255, 157, 75, 6, 255, 157, 75, 3, 255, 154, 74, 3, 255, 141, 62, 2, 255, 147, 67, 7, 255, 155, 73, 3, 255, 157, 68, 2, 255, 153, 66, 3, 255, 150, 67, 3, 255, 148, 65, 1, 255, 148, 59, 4, 255, 141, 62, 2, 255, 137, 58, 2, 255, 137, 57, 2, 255, 134, 50, 0, 255, 136, 52, 4, 255, 119, 43, 4, 255, 98, 29, 0, 255, 91, 33, 1, 255, 103, 39, 3, 255, 111, 45, 7, 255, 120, 51, 1, 255, 117, 50, 3, 255, 117, 46, 8, 255, 118, 52, 5, 255, 115, 48, 2, 255, 126, 54, 4, 255, 138, 58, 7, 255, 141, 61, 7, 255, 145, 67, 2, 255, 153, 70, 2, 255, 150, 66, 2, 255, 144, 61, 1, 255, 143, 53, 2, 255, 144, 56, 1, 255, 159, 74, 6, 255, 171, 87, 5, 255, 186, 99, 2, 255, 191, 99, 2, 255, 189, 99, 1, 255, 185, 95, 0, 255, 183, 88, 0, 255, 181, 85, 1, 255, 173, 78, 1, 255, 165, 75, 7, 255, 171, 83, 6, 255, 177, 87, 3, 255, 176, 81, 5, 255, 172, 78, 1, 255, 172, 82, 1, 255, 171, 82, 4, 255, 172, 78, 1, 255, 177, 83, 2, 255, 178, 86, 0, 255, 1, 29, 70, 255, 2, 23, 67, 255, 2, 23, 56, 255, 2, 29, 51, 255, 1, 27, 54, 255, 1, 16, 48, 255, 1, 21, 56, 255, 1, 25, 55, 255, 2, 23, 52, 255, 0, 21, 54, 255, 3, 19, 55, 255, 6, 14, 38, 255, 1, 2, 5, 255, 3, 3, 13, 255, 0, 6, 19, 255, 1, 9, 22, 255, 2, 9, 23, 255, 0, 4, 20, 255, 0, 2, 9, 255, 1, 0, 8, 255, 0, 2, 8, 255, 3, 3, 1, 255, 3, 1, 73, 255, 3, 66, 229, 255, 45, 54, 62, 255, 26, 12, 0, 255, 14, 16, 68, 255, 8, 23, 159, 255, 2, 3, 17, 255, 10, 2, 1, 255, 7, 3, 3, 255, 6, 3, 1, 255, 6, 2, 1, 255, 7, 3, 2, 255, 6, 2, 0, 255, 8, 3, 1, 255, 7, 2, 0, 255, 9, 4, 1, 255, 11, 7, 3, 255, 7, 3, 0, 255, 8, 3, 1, 255, 11, 4, 2, 255, 12, 2, 1, 255, 17, 3, 2, 255, 18, 4, 3, 255, 16, 6, 2, 255, 12, 2, 0, 255, 17, 8, 4, 255, 18, 7, 2, 255, 22, 9, 2, 255, 25, 10, 1, 255, 24, 7, 2, 255, 26, 9, 5, 255, 21, 7, 1, 255, 29, 16, 3, 255, 34, 16, 2, 255, 35, 15, 1, 255, 37, 20, 4, 255, 36, 19, 2, 255, 35, 16, 2, 255, 34, 19, 8, 255, 37, 21, 8, 255, 40, 20, 3, 255, 41, 24, 0, 255, 44, 29, 1, 255, 48, 32, 5, 255, 51, 34, 4, 255, 51, 42, 7, 255, 53, 42, 8, 255, 65, 50, 11, 255, 73, 56, 14, 255, 77, 61, 20, 255, 80, 64, 38, 255, 79, 69, 46, 255, 71, 74, 41, 255, 71, 69, 61, 255, 84, 70, 51, 255, 104, 76, 29, 255, 89, 66, 7, 255, 78, 67, 7, 255, 76, 66, 9, 255, 88, 64, 4, 255, 123, 79, 16, 255, 143, 85, 7, 255, 150, 79, 13, 255, 163, 90, 8, 255, 178, 100, 9, 255, 180, 99, 7, 255, 180, 99, 0, 255, 171, 88, 0, 255, 162, 78, 1, 255, 161, 73, 8, 255, 151, 80, 6, 255, 128, 62, 1, 255, 123, 62, 10, 255, 102, 61, 3, 255, 91, 60, 2, 255, 94, 60, 1, 255, 95, 60, 1, 255, 99, 62, 2, 255, 95, 55, 5, 255, 93, 56, 1, 255, 98, 57, 1, 255, 100, 55, 8, 255, 100, 56, 4, 255, 97, 57, 3, 255, 99, 57, 4, 255, 112, 61, 5, 255, 109, 62, 10, 255, 103, 59, 3, 255, 108, 59, 2, 255, 111, 60, 3, 255, 114, 60, 5, 255, 141, 74, 4, 255, 131, 67, 3, 255, 103, 45, 6, 255, 106, 52, 5, 255, 132, 63, 5, 255, 113, 49, 6, 255, 93, 42, 3, 255, 96, 49, 2, 255, 87, 51, 2, 255, 97, 54, 2, 255, 89, 49, 6, 255, 85, 47, 5, 255, 91, 48, 4, 255, 94, 47, 1, 255, 111, 52, 3, 255, 112, 49, 7, 255, 119, 46, 6, 255, 124, 49, 2, 255, 124, 53, 4, 255, 115, 47, 4, 255, 121, 53, 2, 255, 119, 49, 8, 255, 110, 44, 3, 255, 113, 46, 7, 255, 112, 48, 1, 255, 107, 45, 1, 255, 105, 46, 5, 255, 102, 47, 1, 255, 103, 41, 6, 255, 110, 47, 8, 255, 114, 52, 5, 255, 107, 49, 3, 255, 125, 58, 5, 255, 141, 64, 4, 255, 140, 65, 3, 255, 130, 59, 11, 255, 110, 45, 9, 255, 92, 40, 2, 255, 97, 48, 5, 255, 109, 52, 3, 255, 124, 57, 4, 255, 123, 57, 4, 255, 121, 62, 2, 255, 118, 55, 3, 255, 120, 53, 6, 255, 116, 52, 9, 255, 116, 60, 3, 255, 121, 63, 4, 255, 132, 62, 12, 255, 147, 69, 8, 255, 165, 86, 12, 255, 178, 100, 2, 255, 181, 98, 11, 255, 167, 82, 13, 255, 164, 82, 8, 255, 187, 108, 10, 255, 188, 108, 7, 255, 186, 106, 7, 255, 178, 98, 7, 255, 183, 101, 8, 255, 196, 109, 12, 255, 194, 105, 16, 255, 194, 107, 15, 255, 195, 112, 12, 255, 175, 91, 7, 255, 190, 102, 19, 255, 190, 108, 7, 255, 189, 111, 7, 255, 197, 121, 13, 255, 195, 112, 9, 255, 183, 95, 8, 255, 190, 112, 12, 255, 196, 124, 9, 255, 199, 120, 15, 255, 195, 115, 12, 255, 183, 99, 7, 255, 175, 90, 13, 255, 159, 75, 7, 255, 182, 103, 11, 255, 192, 114, 16, 255, 193, 113, 18, 255, 197, 120, 14, 255, 196, 121, 5, 255, 200, 125, 12, 255, 195, 122, 11, 255, 196, 120, 11, 255, 188, 112, 11, 255, 177, 102, 11, 255, 197, 120, 12, 255, 205, 122, 12, 255, 200, 116, 15, 255, 199, 120, 13, 255, 207, 135, 13, 255, 207, 136, 11, 255, 209, 136, 7, 255, 210, 135, 5, 255, 209, 133, 5, 255, 214, 135, 14, 255, 216, 137, 8, 255, 216, 137, 11, 255, 207, 128, 9, 255, 211, 137, 17, 255, 214, 145, 7, 255, 213, 140, 11, 255, 217, 141, 12, 255, 215, 140, 24, 255, 215, 143, 19, 255, 211, 141, 4, 255, 213, 142, 12, 255, 215, 141, 19, 255, 211, 139, 3, 255, 215, 143, 11, 255, 214, 142, 19, 255, 210, 138, 12, 255, 211, 137, 12, 255, 208, 132, 10, 255, 201, 123, 11, 255, 197, 117, 10, 255, 206, 123, 9, 255, 209, 123, 3, 255, 210, 125, 5, 255, 213, 129, 15, 255, 209, 123, 7, 255, 208, 117, 1, 255, 203, 114, 10, 255, 207, 119, 12, 255, 210, 126, 6, 255, 215, 130, 7, 255, 215, 131, 4, 255, 213, 128, 5, 255, 212, 127, 8, 255, 195, 108, 1, 255, 198, 111, 8, 255, 211, 125, 13, 255, 211, 127, 2, 255, 211, 126, 5, 255, 212, 127, 7, 255, 210, 126, 6, 255, 209, 124, 9, 255, 207, 123, 6, 255, 208, 124, 3, 255, 205, 119, 7, 255, 194, 107, 8, 255, 176, 90, 11, 255, 174, 98, 8, 255, 175, 95, 4, 255, 193, 106, 12, 255, 188, 106, 8, 255, 192, 112, 8, 255, 179, 100, 4, 255, 179, 105, 11, 255, 199, 132, 19, 255, 211, 148, 13, 255, 209, 148, 3, 255, 209, 148, 6, 255, 208, 146, 6, 255, 206, 137, 7, 255, 197, 122, 7, 255, 197, 117, 4, 255, 196, 117, 2, 255, 195, 123, 4, 255, 204, 136, 10, 255, 207, 138, 3, 255, 209, 139, 4, 255, 203, 134, 8, 255, 208, 141, 3, 255, 212, 144, 7, 255, 206, 132, 2, 255, 204, 124, 16, 255, 205, 128, 24, 255, 202, 123, 22, 255, 197, 117, 6, 255, 199, 117, 10, 255, 199, 120, 3, 255, 196, 114, 14, 255, 201, 112, 15, 255, 201, 114, 1, 255, 194, 107, 4, 255, 188, 102, 2, 255, 182, 99, 1, 255, 182, 101, 5, 255, 188, 109, 11, 255, 189, 108, 4, 255, 183, 98, 1, 255, 189, 108, 10, 255, 184, 110, 9, 255, 168, 92, 6, 255, 159, 81, 6, 255, 135, 66, 2, 255, 132, 57, 4, 255, 151, 78, 5, 255, 140, 71, 6, 255, 149, 71, 11, 255, 150, 75, 5, 255, 142, 69, 0, 255, 144, 75, 4, 255, 191, 128, 13, 255, 197, 136, 9, 255, 201, 136, 10, 255, 201, 130, 10, 255, 198, 123, 13, 255, 197, 121, 11, 255, 196, 116, 7, 255, 197, 117, 10, 255, 196, 119, 20, 255, 200, 124, 20, 255, 205, 128, 3, 255, 205, 127, 2, 255, 204, 126, 4, 255, 203, 123, 4, 255, 202, 121, 2, 255, 202, 118, 3, 255, 199, 114, 10, 255, 198, 112, 8, 255, 197, 113, 5, 255, 195, 112, 11, 255, 193, 111, 11, 255, 191, 107, 11, 255, 194, 110, 12, 255, 190, 106, 13, 255, 191, 101, 10, 255, 191, 105, 1, 255, 191, 108, 3, 255, 197, 114, 9, 255, 205, 123, 8, 255, 205, 122, 2, 255, 202, 114, 12, 255, 195, 105, 17, 255, 196, 103, 13, 255, 192, 97, 7, 255, 167, 77, 7, 255, 158, 74, 6, 255, 155, 73, 1, 255, 158, 73, 4, 255, 150, 63, 1, 255, 153, 68, 6, 255, 152, 70, 7, 255, 150, 67, 3, 255, 160, 74, 12, 255, 158, 67, 2, 255, 146, 64, 0, 255, 138, 57, 4, 255, 140, 55, 7, 255, 143, 58, 4, 255, 138, 57, 4, 255, 140, 53, 2, 255, 141, 56, 4, 255, 138, 51, 1, 255, 142, 55, 2, 255, 136, 53, 5, 255, 128, 49, 8, 255, 106, 38, 2, 255, 100, 35, 6, 255, 105, 36, 4, 255, 115, 41, 4, 255, 111, 44, 4, 255, 115, 46, 7, 255, 118, 56, 3, 255, 126, 55, 5, 255, 137, 57, 1, 255, 143, 62, 1, 255, 146, 65, 1, 255, 148, 68, 1, 255, 157, 68, 7, 255, 150, 56, 5, 255, 144, 55, 6, 255, 150, 61, 10, 255, 163, 83, 3, 255, 182, 105, 4, 255, 185, 99, 3, 255, 182, 87, 0, 255, 187, 93, 5, 255, 188, 97, 5, 255, 185, 94, 4, 255, 183, 90, 2, 255, 182, 89, 0, 255, 178, 87, 3, 255, 174, 83, 5, 255, 173, 83, 1, 255, 175, 85, 1, 255, 172, 81, 4, 255, 171, 78, 4, 255, 172, 78, 1, 255, 173, 79, 3, 255, 170, 79, 1, 255, 176, 86, 2, 255, 176, 86, 0, 255, 1, 22, 52, 255, 1, 25, 54, 255, 3, 26, 61, 255, 2, 23, 59, 255, 2, 21, 56, 255, 2, 17, 58, 255, 3, 19, 48, 255, 3, 19, 55, 255, 2, 22, 57, 255, 1, 20, 47, 255, 3, 18, 44, 255, 2, 17, 43, 255, 1, 16, 33, 255, 3, 3, 14, 255, 2, 2, 8, 255, 5, 5, 15, 255, 2, 2, 27, 255, 3, 1, 19, 255, 3, 1, 11, 255, 3, 2, 16, 255, 1, 2, 2, 255, 2, 0, 40, 255, 0, 60, 220, 255, 33, 66, 110, 255, 31, 19, 0, 255, 28, 5, 45, 255, 15, 27, 184, 255, 5, 14, 56, 255, 11, 0, 2, 255, 8, 2, 3, 255, 2, 6, 0, 255, 12, 1, 2, 255, 10, 3, 4, 255, 7, 4, 2, 255, 7, 5, 2, 255, 7, 3, 1, 255, 8, 2, 0, 255, 14, 3, 2, 255, 16, 9, 6, 255, 8, 4, 1, 255, 12, 3, 1, 255, 13, 4, 2, 255, 15, 5, 3, 255, 18, 7, 5, 255, 15, 5, 3, 255, 17, 7, 4, 255, 19, 6, 3, 255, 18, 5, 0, 255, 23, 9, 1, 255, 27, 12, 3, 255, 32, 14, 4, 255, 33, 13, 5, 255, 30, 12, 4, 255, 31, 10, 3, 255, 39, 14, 5, 255, 30, 16, 2, 255, 31, 15, 1, 255, 39, 15, 2, 255, 36, 21, 4, 255, 35, 21, 4, 255, 37, 19, 3, 255, 38, 21, 3, 255, 44, 27, 5, 255, 44, 23, 2, 255, 45, 29, 5, 255, 50, 30, 0, 255, 59, 38, 6, 255, 56, 40, 3, 255, 65, 43, 5, 255, 71, 50, 7, 255, 74, 55, 6, 255, 75, 56, 20, 255, 78, 58, 33, 255, 81, 71, 39, 255, 71, 71, 55, 255, 76, 73, 57, 255, 113, 78, 54, 255, 93, 68, 32, 255, 77, 63, 16, 255, 80, 64, 9, 255, 89, 65, 13, 255, 132, 85, 13, 255, 158, 91, 6, 255, 164, 92, 10, 255, 167, 94, 5, 255, 180, 104, 2, 255, 180, 100, 3, 255, 177, 95, 7, 255, 165, 90, 3, 255, 148, 78, 3, 255, 124, 64, 3, 255, 106, 56, 5, 255, 91, 56, 8, 255, 82, 54, 1, 255, 112, 68, 8, 255, 113, 64, 3, 255, 99, 58, 5, 255, 98, 60, 1, 255, 99, 59, 1, 255, 98, 57, 6, 255, 96, 53, 9, 255, 95, 54, 4, 255, 91, 54, 2, 255, 97, 54, 5, 255, 97, 57, 4, 255, 99, 56, 4, 255, 95, 55, 1, 255, 102, 55, 2, 255, 108, 60, 5, 255, 103, 55, 6, 255, 106, 56, 7, 255, 101, 57, 3, 255, 97, 54, 6, 255, 99, 54, 3, 255, 95, 52, 2, 255, 87, 52, 2, 255, 101, 57, 6, 255, 92, 48, 4, 255, 88, 45, 7, 255, 100, 47, 8, 255, 96, 47, 5, 255, 84, 48, 5, 255, 92, 44, 6, 255, 97, 53, 5, 255, 112, 56, 3, 255, 118, 49, 1, 255, 127, 53, 1, 255, 125, 49, 5, 255, 119, 47, 4, 255, 120, 47, 3, 255, 114, 49, 1, 255, 113, 48, 2, 255, 118, 50, 7, 255, 126, 52, 9, 255, 114, 48, 6, 255, 111, 50, 4, 255, 128, 62, 7, 255, 131, 60, 5, 255, 128, 56, 4, 255, 123, 53, 3, 255, 108, 49, 5, 255, 116, 54, 5, 255, 128, 57, 2, 255, 122, 51, 3, 255, 122, 52, 6, 255, 143, 60, 5, 255, 147, 57, 2, 255, 125, 51, 7, 255, 106, 46, 7, 255, 93, 45, 2, 255, 97, 50, 4, 255, 94, 49, 8, 255, 88, 42, 6, 255, 107, 45, 11, 255, 119, 51, 6, 255, 113, 58, 4, 255, 105, 48, 12, 255, 105, 46, 11, 255, 112, 52, 3, 255, 116, 61, 4, 255, 117, 59, 6, 255, 116, 54, 10, 255, 111, 51, 1, 255, 134, 72, 13, 255, 149, 78, 6, 255, 156, 81, 7, 255, 155, 78, 12, 255, 161, 86, 15, 255, 168, 91, 18, 255, 175, 90, 23, 255, 180, 96, 13, 255, 168, 89, 2, 255, 167, 84, 9, 255, 175, 92, 8, 255, 183, 97, 13, 255, 186, 105, 16, 255, 184, 104, 7, 255, 183, 98, 19, 255, 173, 95, 9, 255, 167, 89, 8, 255, 183, 104, 16, 255, 189, 111, 11, 255, 187, 100, 6, 255, 177, 96, 15, 255, 182, 113, 18, 255, 186, 109, 14, 255, 181, 108, 10, 255, 185, 109, 19, 255, 180, 108, 7, 255, 175, 101, 6, 255, 176, 102, 14, 255, 174, 100, 4, 255, 163, 88, 14, 255, 188, 109, 23, 255, 195, 113, 14, 255, 187, 116, 11, 255, 191, 116, 6, 255, 192, 114, 14, 255, 190, 107, 16, 255, 191, 105, 8, 255, 190, 118, 10, 255, 191, 120, 9, 255, 193, 118, 6, 255, 188, 111, 8, 255, 179, 103, 7, 255, 195, 122, 8, 255, 199, 127, 7, 255, 202, 126, 7, 255, 200, 125, 15, 255, 193, 123, 12, 255, 205, 133, 16, 255, 202, 131, 11, 255, 204, 135, 9, 255, 201, 128, 6, 255, 205, 130, 15, 255, 207, 137, 4, 255, 209, 141, 16, 255, 210, 143, 10, 255, 208, 144, 9, 255, 211, 144, 14, 255, 211, 146, 6, 255, 210, 151, 19, 255, 208, 141, 17, 255, 198, 133, 7, 255, 198, 122, 12, 255, 198, 127, 12, 255, 193, 124, 4, 255, 196, 121, 6, 255, 185, 103, 15, 255, 182, 103, 10, 255, 203, 130, 13, 255, 208, 130, 14, 255, 209, 126, 11, 255, 203, 118, 7, 255, 207, 121, 6, 255, 207, 120, 6, 255, 206, 120, 8, 255, 200, 116, 14, 255, 204, 120, 14, 255, 205, 122, 9, 255, 205, 123, 7, 255, 214, 130, 12, 255, 208, 121, 12, 255, 194, 107, 6, 255, 191, 106, 3, 255, 207, 125, 6, 255, 211, 130, 11, 255, 213, 136, 4, 255, 211, 135, 9, 255, 208, 128, 2, 255, 209, 125, 5, 255, 208, 128, 4, 255, 205, 124, 6, 255, 203, 121, 4, 255, 204, 123, 2, 255, 196, 114, 5, 255, 178, 88, 7, 255, 177, 94, 2, 255, 183, 101, 6, 255, 194, 114, 13, 255, 200, 124, 3, 255, 183, 107, 7, 255, 177, 105, 12, 255, 198, 134, 7, 255, 209, 146, 6, 255, 205, 141, 10, 255, 208, 142, 5, 255, 202, 132, 1, 255, 198, 128, 3, 255, 199, 130, 3, 255, 197, 125, 12, 255, 196, 124, 10, 255, 202, 132, 1, 255, 208, 140, 5, 255, 202, 133, 11, 255, 193, 122, 3, 255, 200, 129, 6, 255, 199, 129, 3, 255, 202, 131, 12, 255, 203, 132, 8, 255, 201, 128, 1, 255, 205, 129, 10, 255, 204, 128, 18, 255, 200, 122, 23, 255, 199, 121, 16, 255, 199, 122, 5, 255, 198, 118, 8, 255, 196, 115, 7, 255, 200, 114, 3, 255, 195, 111, 2, 255, 198, 116, 10, 255, 189, 111, 3, 255, 188, 109, 1, 255, 194, 113, 8, 255, 185, 98, 5, 255, 175, 90, 4, 255, 163, 82, 3, 255, 164, 85, 7, 255, 178, 97, 6, 255, 186, 102, 6, 255, 177, 92, 6, 255, 158, 85, 4, 255, 146, 73, 3, 255, 151, 76, 0, 255, 143, 67, 2, 255, 144, 70, 13, 255, 142, 77, 13, 255, 141, 69, 9, 255, 170, 98, 5, 255, 171, 92, 7, 255, 189, 111, 9, 255, 199, 126, 3, 255, 198, 125, 7, 255, 198, 120, 20, 255, 196, 118, 9, 255, 194, 116, 4, 255, 196, 117, 9, 255, 199, 120, 10, 255, 203, 121, 13, 255, 204, 122, 6, 255, 205, 123, 12, 255, 202, 121, 6, 255, 203, 122, 3, 255, 201, 121, 3, 255, 195, 114, 1, 255, 194, 111, 5, 255, 191, 108, 4, 255, 190, 107, 6, 255, 192, 111, 1, 255, 193, 109, 13, 255, 194, 109, 17, 255, 193, 107, 11, 255, 191, 105, 4, 255, 190, 102, 14, 255, 191, 109, 9, 255, 200, 121, 5, 255, 205, 124, 5, 255, 205, 121, 2, 255, 201, 116, 8, 255, 195, 107, 14, 255, 190, 104, 5, 255, 198, 111, 10, 255, 190, 98, 12, 255, 166, 69, 2, 255, 162, 70, 2, 255, 153, 65, 6, 255, 156, 72, 1, 255, 158, 74, 2, 255, 147, 63, 6, 255, 146, 61, 5, 255, 148, 66, 6, 255, 141, 57, 12, 255, 140, 56, 7, 255, 141, 57, 3, 255, 134, 52, 2, 255, 132, 51, 6, 255, 131, 49, 0, 255, 139, 52, 4, 255, 147, 57, 4, 255, 147, 57, 0, 255, 140, 53, 10, 255, 137, 54, 1, 255, 128, 45, 5, 255, 126, 44, 2, 255, 120, 40, 2, 255, 104, 36, 2, 255, 101, 33, 4, 255, 107, 45, 3, 255, 109, 48, 2, 255, 121, 51, 9, 255, 135, 57, 5, 255, 136, 59, 6, 255, 139, 59, 1, 255, 147, 66, 2, 255, 147, 66, 6, 255, 150, 70, 1, 255, 159, 72, 1, 255, 160, 66, 4, 255, 174, 85, 3, 255, 186, 98, 1, 255, 190, 101, 2, 255, 190, 100, 4, 255, 189, 98, 4, 255, 180, 89, 1, 255, 181, 90, 1, 255, 187, 96, 5, 255, 179, 90, 1, 255, 178, 87, 3, 255, 179, 88, 5, 255, 182, 92, 2, 255, 182, 88, 2, 255, 177, 85, 3, 255, 175, 84, 4, 255, 172, 82, 4, 255, 171, 80, 2, 255, 172, 79, 0, 255, 175, 81, 1, 255, 175, 83, 1, 255, 177, 85, 4, 255, 175, 82, 2, 255, 1, 26, 53, 255, 3, 29, 61, 255, 0, 27, 60, 255, 0, 26, 64, 255, 3, 28, 61, 255, 6, 31, 62, 255, 1, 21, 46, 255, 0, 21, 44, 255, 0, 21, 44, 255, 0, 21, 44, 255, 3, 20, 48, 255, 4, 20, 53, 255, 1, 20, 55, 255, 2, 14, 29, 255, 2, 2, 6, 255, 0, 2, 4, 255, 0, 5, 19, 255, 0, 1, 9, 255, 1, 3, 12, 255, 1, 2, 7, 255, 2, 0, 19, 255, 0, 46, 205, 255, 31, 82, 162, 255, 32, 23, 0, 255, 21, 5, 12, 255, 26, 19, 172, 255, 1, 22, 107, 255, 6, 5, 0, 255, 12, 1, 5, 255, 9, 4, 4, 255, 6, 3, 4, 255, 11, 5, 5, 255, 8, 4, 4, 255, 7, 3, 2, 255, 6, 1, 0, 255, 10, 3, 1, 255, 12, 2, 2, 255, 20, 6, 5, 255, 13, 3, 2, 255, 11, 4, 1, 255, 15, 5, 2, 255, 20, 8, 4, 255, 19, 8, 3, 255, 18, 6, 1, 255, 16, 5, 0, 255, 13, 7, 1, 255, 17, 8, 2, 255, 20, 7, 1, 255, 26, 8, 1, 255, 33, 9, 1, 255, 41, 11, 3, 255, 37, 13, 2, 255, 34, 14, 1, 255, 34, 16, 3, 255, 40, 17, 4, 255, 40, 15, 3, 255, 36, 16, 3, 255, 34, 19, 3, 255, 36, 23, 3, 255, 35, 22, 1, 255, 38, 24, 3, 255, 42, 26, 5, 255, 53, 31, 8, 255, 50, 26, 4, 255, 50, 29, 5, 255, 59, 33, 2, 255, 60, 36, 4, 255, 59, 41, 3, 255, 63, 41, 4, 255, 70, 48, 6, 255, 74, 55, 4, 255, 82, 56, 12, 255, 76, 61, 30, 255, 80, 71, 37, 255, 87, 70, 51, 255, 110, 80, 60, 255, 97, 70, 53, 255, 79, 66, 29, 255, 83, 62, 11, 255, 91, 68, 16, 255, 151, 88, 25, 255, 167, 90, 9, 255, 166, 91, 5, 255, 176, 102, 3, 255, 171, 100, 0, 255, 177, 108, 1, 255, 175, 99, 3, 255, 156, 82, 5, 255, 129, 68, 5, 255, 105, 58, 7, 255, 85, 55, 7, 255, 82, 53, 6, 255, 91, 58, 7, 255, 91, 56, 1, 255, 109, 67, 3, 255, 115, 60, 1, 255, 105, 59, 7, 255, 98, 57, 2, 255, 93, 59, 2, 255, 91, 58, 2, 255, 96, 58, 4, 255, 98, 59, 3, 255, 96, 59, 2, 255, 95, 58, 1, 255, 95, 58, 1, 255, 95, 58, 5, 255, 94, 57, 4, 255, 101, 58, 3, 255, 106, 59, 1, 255, 104, 58, 1, 255, 100, 53, 1, 255, 97, 54, 3, 255, 91, 50, 5, 255, 84, 48, 1, 255, 82, 52, 3, 255, 85, 45, 3, 255, 94, 48, 4, 255, 84, 47, 3, 255, 79, 47, 1, 255, 103, 51, 2, 255, 119, 56, 4, 255, 119, 57, 5, 255, 119, 57, 3, 255, 134, 56, 6, 255, 136, 51, 5, 255, 123, 49, 2, 255, 120, 50, 9, 255, 121, 52, 2, 255, 137, 63, 4, 255, 143, 68, 7, 255, 140, 64, 7, 255, 145, 68, 7, 255, 160, 77, 4, 255, 156, 73, 3, 255, 138, 62, 2, 255, 138, 66, 3, 255, 152, 70, 2, 255, 151, 64, 8, 255, 140, 64, 4, 255, 141, 65, 3, 255, 141, 60, 9, 255, 135, 55, 8, 255, 125, 54, 10, 255, 117, 51, 2, 255, 122, 48, 5, 255, 103, 41, 11, 255, 101, 44, 9, 255, 100, 45, 4, 255, 96, 43, 6, 255, 94, 42, 7, 255, 101, 45, 8, 255, 96, 41, 4, 255, 104, 53, 6, 255, 132, 69, 16, 255, 118, 54, 5, 255, 110, 49, 3, 255, 106, 50, 4, 255, 114, 51, 8, 255, 111, 48, 8, 255, 105, 43, 6, 255, 107, 50, 5, 255, 98, 51, 5, 255, 93, 48, 2, 255, 98, 50, 6, 255, 109, 59, 13, 255, 120, 64, 8, 255, 136, 72, 3, 255, 131, 71, 0, 255, 138, 77, 7, 255, 147, 77, 8, 255, 153, 84, 10, 255, 150, 83, 8, 255, 153, 82, 10, 255, 152, 76, 11, 255, 161, 89, 9, 255, 163, 88, 15, 255, 146, 80, 5, 255, 163, 94, 15, 255, 165, 90, 13, 255, 155, 88, 10, 255, 165, 91, 9, 255, 163, 90, 7, 255, 161, 83, 9, 255, 168, 89, 6, 255, 171, 93, 15, 255, 171, 92, 15, 255, 166, 94, 12, 255, 172, 97, 11, 255, 168, 95, 14, 255, 172, 97, 12, 255, 165, 92, 17, 255, 158, 87, 9, 255, 145, 78, 10, 255, 169, 104, 10, 255, 169, 102, 5, 255, 160, 98, 16, 255, 177, 103, 14, 255, 183, 109, 10, 255, 155, 86, 7, 255, 165, 96, 16, 255, 173, 99, 13, 255, 173, 102, 15, 255, 164, 98, 10, 255, 160, 96, 8, 255, 160, 97, 4, 255, 169, 101, 15, 255, 172, 103, 13, 255, 176, 112, 8, 255, 180, 114, 7, 255, 182, 113, 6, 255, 172, 110, 12, 255, 174, 110, 12, 255, 177, 112, 4, 255, 185, 120, 16, 255, 183, 122, 4, 255, 184, 119, 9, 255, 192, 119, 13, 255, 190, 114, 8, 255, 192, 119, 2, 255, 198, 125, 9, 255, 199, 129, 6, 255, 195, 127, 4, 255, 191, 121, 14, 255, 180, 109, 20, 255, 173, 100, 13, 255, 182, 105, 3, 255, 192, 110, 12, 255, 184, 106, 9, 255, 185, 108, 11, 255, 190, 110, 12, 255, 197, 114, 4, 255, 204, 121, 11, 255, 196, 119, 6, 255, 190, 112, 8, 255, 198, 115, 12, 255, 201, 117, 8, 255, 198, 115, 8, 255, 201, 120, 13, 255, 208, 123, 10, 255, 207, 117, 5, 255, 206, 117, 3, 255, 211, 126, 8, 255, 199, 115, 8, 255, 196, 113, 10, 255, 203, 123, 11, 255, 210, 131, 6, 255, 208, 131, 3, 255, 212, 136, 5, 255, 209, 134, 9, 255, 205, 130, 1, 255, 209, 131, 2, 255, 209, 130, 8, 255, 210, 132, 3, 255, 211, 130, 11, 255, 197, 115, 11, 255, 188, 104, 8, 255, 192, 106, 7, 255, 181, 98, 4, 255, 188, 111, 3, 255, 207, 133, 5, 255, 188, 113, 10, 255, 178, 106, 14, 255, 206, 138, 27, 255, 206, 142, 5, 255, 203, 140, 6, 255, 203, 140, 7, 255, 198, 132, 3, 255, 190, 119, 3, 255, 201, 131, 11, 255, 204, 136, 13, 255, 205, 138, 8, 255, 203, 134, 7, 255, 200, 130, 13, 255, 203, 133, 10, 255, 204, 134, 6, 255, 202, 133, 9, 255, 202, 131, 15, 255, 203, 134, 9, 255, 202, 134, 7, 255, 201, 129, 13, 255, 199, 127, 14, 255, 199, 125, 6, 255, 201, 126, 7, 255, 198, 121, 15, 255, 196, 121, 9, 255, 195, 119, 7, 255, 196, 117, 5, 255, 197, 116, 7, 255, 194, 112, 5, 255, 194, 112, 4, 255, 196, 114, 7, 255, 196, 113, 6, 255, 197, 112, 8, 255, 188, 104, 6, 255, 173, 87, 0, 255, 175, 93, 3, 255, 168, 88, 0, 255, 166, 81, 0, 255, 169, 79, 2, 255, 170, 84, 9, 255, 170, 88, 3, 255, 170, 88, 4, 255, 162, 82, 7, 255, 150, 71, 6, 255, 144, 66, 2, 255, 137, 65, 7, 255, 166, 108, 13, 255, 183, 125, 14, 255, 176, 109, 6, 255, 161, 80, 6, 255, 183, 101, 6, 255, 198, 117, 8, 255, 199, 118, 2, 255, 197, 116, 11, 255, 195, 117, 6, 255, 194, 117, 3, 255, 196, 120, 4, 255, 197, 119, 2, 255, 200, 120, 5, 255, 202, 121, 1, 255, 202, 122, 1, 255, 202, 122, 3, 255, 199, 117, 3, 255, 195, 114, 2, 255, 195, 112, 4, 255, 193, 110, 2, 255, 192, 107, 3, 255, 190, 103, 10, 255, 190, 105, 5, 255, 194, 110, 8, 255, 194, 111, 4, 255, 192, 109, 5, 255, 193, 110, 9, 255, 197, 115, 7, 255, 203, 124, 9, 255, 205, 125, 9, 255, 204, 119, 6, 255, 202, 114, 7, 255, 198, 111, 9, 255, 195, 108, 6, 255, 195, 107, 4, 255, 197, 106, 11, 255, 165, 76, 12, 255, 151, 64, 3, 255, 154, 67, 2, 255, 157, 65, 6, 255, 163, 73, 6, 255, 154, 72, 3, 255, 139, 61, 0, 255, 138, 60, 0, 255, 143, 63, 5, 255, 140, 57, 7, 255, 137, 58, 9, 255, 138, 58, 1, 255, 136, 55, 0, 255, 132, 48, 2, 255, 134, 49, 2, 255, 139, 50, 1, 255, 142, 59, 3, 255, 135, 53, 1, 255, 131, 48, 7, 255, 132, 51, 4, 255, 125, 44, 4, 255, 124, 41, 7, 255, 122, 41, 8, 255, 113, 46, 2, 255, 116, 44, 2, 255, 130, 55, 2, 255, 135, 61, 0, 255, 137, 60, 2, 255, 142, 62, 3, 255, 146, 65, 4, 255, 152, 68, 1, 255, 158, 69, 5, 255, 157, 68, 4, 255, 161, 73, 2, 255, 160, 69, 1, 255, 172, 78, 3, 255, 188, 98, 7, 255, 191, 102, 2, 255, 191, 102, 2, 255, 191, 101, 3, 255, 190, 100, 2, 255, 186, 97, 2, 255, 181, 88, 3, 255, 177, 84, 3, 255, 175, 84, 6, 255, 168, 76, 1, 255, 171, 80, 0, 255, 179, 89, 0, 255, 180, 89, 2, 255, 177, 87, 2, 255, 173, 82, 0, 255, 175, 84, 1, 255, 176, 84, 3, 255, 174, 82, 2, 255, 175, 82, 1, 255, 179, 88, 2, 255, 179, 88, 4, 255, 175, 84, 1, 255, 4, 25, 66, 255, 3, 23, 66, 255, 1, 26, 60, 255, 2, 27, 64, 255, 0, 25, 57, 255, 2, 27, 57, 255, 1, 23, 50, 255, 1, 22, 44, 255, 1, 22, 45, 255, 2, 21, 51, 255, 2, 20, 47, 255, 0, 17, 41, 255, 0, 16, 46, 255, 2, 18, 54, 255, 3, 6, 23, 255, 0, 2, 12, 255, 3, 0, 12, 255, 4, 0, 12, 255, 4, 2, 13, 255, 3, 0, 11, 255, 0, 34, 171, 255, 24, 84, 194, 255, 52, 32, 8, 255, 22, 11, 0, 255, 27, 22, 136, 255, 4, 24, 137, 255, 11, 1, 0, 255, 5, 5, 0, 255, 9, 2, 0, 255, 13, 7, 5, 255, 7, 4, 4, 255, 10, 5, 5, 255, 9, 5, 2, 255, 9, 5, 2, 255, 8, 3, 1, 255, 10, 2, 1, 255, 19, 8, 6, 255, 18, 4, 3, 255, 14, 2, 1, 255, 13, 3, 2, 255, 17, 6, 2, 255, 23, 10, 5, 255, 19, 6, 1, 255, 23, 9, 4, 255, 22, 9, 3, 255, 21, 7, 2, 255, 23, 10, 3, 255, 26, 10, 4, 255, 31, 12, 5, 255, 35, 13, 5, 255, 37, 12, 1, 255, 39, 16, 0, 255, 35, 15, 0, 255, 37, 17, 1, 255, 41, 18, 5, 255, 41, 16, 3, 255, 39, 19, 5, 255, 31, 17, 0, 255, 43, 25, 5, 255, 44, 24, 4, 255, 34, 24, 1, 255, 42, 27, 2, 255, 49, 25, 1, 255, 46, 29, 2, 255, 57, 32, 4, 255, 65, 35, 2, 255, 63, 38, 4, 255, 65, 44, 4, 255, 65, 43, 4, 255, 67, 48, 6, 255, 78, 57, 7, 255, 80, 56, 5, 255, 76, 61, 15, 255, 81, 60, 27, 255, 115, 75, 55, 255, 106, 78, 57, 255, 79, 75, 47, 255, 84, 71, 14, 255, 113, 77, 9, 255, 144, 79, 10, 255, 166, 83, 7, 255, 163, 96, 9, 255, 176, 98, 7, 255, 176, 99, 2, 255, 171, 95, 3, 255, 160, 87, 3, 255, 128, 68, 6, 255, 99, 57, 8, 255, 88, 59, 4, 255, 88, 58, 1, 255, 93, 59, 5, 255, 94, 60, 3, 255, 99, 57, 1, 255, 92, 57, 0, 255, 112, 65, 5, 255, 113, 61, 6, 255, 93, 55, 3, 255, 94, 58, 6, 255, 90, 60, 5, 255, 96, 59, 2, 255, 97, 60, 2, 255, 96, 56, 0, 255, 97, 57, 3, 255, 94, 60, 3, 255, 101, 59, 3, 255, 99, 59, 2, 255, 98, 55, 2, 255, 97, 54, 5, 255, 96, 46, 5, 255, 90, 49, 7, 255, 87, 49, 3, 255, 103, 55, 6, 255, 108, 59, 10, 255, 99, 57, 2, 255, 102, 54, 4, 255, 109, 55, 6, 255, 122, 58, 4, 255, 132, 61, 2, 255, 146, 68, 6, 255, 158, 68, 5, 255, 153, 59, 3, 255, 146, 59, 8, 255, 126, 55, 4, 255, 121, 42, 4, 255, 118, 53, 1, 255, 129, 62, 5, 255, 127, 51, 6, 255, 134, 60, 6, 255, 161, 75, 9, 255, 177, 77, 1, 255, 174, 80, 1, 255, 177, 83, 6, 255, 173, 80, 3, 255, 162, 66, 5, 255, 143, 57, 4, 255, 131, 59, 5, 255, 130, 56, 9, 255, 129, 50, 5, 255, 146, 65, 5, 255, 163, 74, 8, 255, 143, 55, 2, 255, 123, 48, 5, 255, 104, 52, 4, 255, 102, 51, 5, 255, 99, 44, 10, 255, 85, 35, 9, 255, 87, 44, 4, 255, 91, 46, 6, 255, 96, 44, 4, 255, 101, 49, 5, 255, 100, 44, 8, 255, 93, 41, 7, 255, 118, 59, 4, 255, 140, 69, 2, 255, 126, 64, 4, 255, 123, 58, 3, 255, 127, 62, 2, 255, 135, 62, 1, 255, 132, 58, 6, 255, 125, 51, 11, 255, 122, 48, 7, 255, 114, 55, 1, 255, 107, 54, 8, 255, 98, 46, 5, 255, 99, 49, 9, 255, 104, 54, 4, 255, 114, 56, 3, 255, 104, 48, 6, 255, 113, 60, 16, 255, 124, 67, 10, 255, 114, 54, 10, 255, 115, 56, 14, 255, 128, 68, 5, 255, 129, 69, 8, 255, 122, 61, 3, 255, 129, 58, 11, 255, 105, 49, 12, 255, 103, 53, 7, 255, 114, 62, 10, 255, 125, 67, 15, 255, 142, 77, 15, 255, 139, 79, 9, 255, 120, 64, 4, 255, 122, 63, 4, 255, 116, 51, 14, 255, 120, 57, 15, 255, 143, 82, 21, 255, 129, 71, 7, 255, 135, 72, 13, 255, 125, 64, 9, 255, 139, 81, 7, 255, 129, 70, 11, 255, 100, 56, 7, 255, 117, 60, 7, 255, 122, 69, 10, 255, 120, 72, 10, 255, 153, 83, 12, 255, 129, 66, 6, 255, 109, 62, 3, 255, 127, 77, 12, 255, 135, 80, 9, 255, 132, 77, 5, 255, 134, 79, 12, 255, 135, 77, 2, 255, 142, 81, 3, 255, 141, 79, 11, 255, 142, 79, 11, 255, 152, 92, 13, 255, 168, 101, 10, 255, 180, 104, 7, 255, 173, 103, 4, 255, 172, 99, 8, 255, 167, 93, 10, 255, 175, 104, 16, 255, 178, 105, 6, 255, 170, 92, 13, 255, 169, 93, 20, 255, 161, 90, 5, 255, 173, 96, 7, 255, 184, 109, 15, 255, 178, 103, 6, 255, 182, 98, 3, 255, 181, 99, 15, 255, 181, 95, 15, 255, 176, 96, 11, 255, 183, 97, 13, 255, 187, 107, 4, 255, 188, 113, 10, 255, 191, 115, 7, 255, 193, 105, 5, 255, 185, 94, 3, 255, 171, 83, 13, 255, 190, 108, 17, 255, 195, 111, 11, 255, 197, 108, 11, 255, 189, 107, 11, 255, 191, 115, 8, 255, 191, 105, 2, 255, 179, 88, 6, 255, 180, 89, 15, 255, 197, 112, 9, 255, 191, 103, 4, 255, 193, 106, 8, 255, 200, 119, 10, 255, 207, 131, 10, 255, 210, 137, 6, 255, 210, 137, 3, 255, 208, 135, 4, 255, 206, 132, 8, 255, 209, 134, 8, 255, 212, 135, 4, 255, 200, 120, 5, 255, 201, 121, 3, 255, 201, 119, 8, 255, 192, 109, 6, 255, 194, 110, 10, 255, 187, 103, 3, 255, 178, 94, 5, 255, 180, 102, 6, 255, 187, 115, 2, 255, 190, 121, 7, 255, 201, 138, 9, 255, 208, 144, 6, 255, 209, 142, 7, 255, 205, 141, 2, 255, 205, 139, 8, 255, 190, 121, 3, 255, 194, 123, 8, 255, 210, 140, 9, 255, 207, 138, 7, 255, 204, 135, 4, 255, 202, 135, 2, 255, 198, 129, 12, 255, 202, 129, 20, 255, 201, 129, 7, 255, 202, 130, 10, 255, 202, 131, 19, 255, 205, 136, 15, 255, 201, 133, 7, 255, 198, 126, 15, 255, 199, 125, 21, 255, 195, 122, 9, 255, 197, 121, 11, 255, 198, 120, 19, 255, 196, 120, 11, 255, 195, 118, 10, 255, 194, 119, 5, 255, 194, 118, 4, 255, 195, 120, 5, 255, 205, 127, 7, 255, 197, 117, 0, 255, 193, 109, 1, 255, 186, 100, 3, 255, 188, 101, 3, 255, 182, 95, 7, 255, 174, 86, 3, 255, 176, 88, 6, 255, 162, 74, 6, 255, 151, 68, 2, 255, 150, 70, 0, 255, 150, 72, 5, 255, 152, 77, 1, 255, 161, 82, 1, 255, 143, 67, 6, 255, 124, 59, 2, 255, 130, 66, 12, 255, 185, 121, 12, 255, 215, 151, 6, 255, 183, 111, 8, 255, 182, 110, 8, 255, 181, 113, 1, 255, 186, 113, 3, 255, 195, 116, 10, 255, 196, 114, 11, 255, 196, 113, 14, 255, 196, 117, 9, 255, 197, 119, 8, 255, 197, 118, 7, 255, 199, 118, 10, 255, 200, 119, 7, 255, 200, 119, 0, 255, 197, 117, 1, 255, 194, 111, 3, 255, 193, 108, 4, 255, 192, 106, 2, 255, 191, 105, 1, 255, 190, 103, 0, 255, 190, 102, 3, 255, 190, 103, 6, 255, 191, 105, 9, 255, 193, 110, 9, 255, 198, 117, 8, 255, 201, 121, 13, 255, 202, 122, 8, 255, 204, 123, 4, 255, 204, 119, 8, 255, 202, 115, 6, 255, 201, 113, 9, 255, 195, 109, 3, 255, 196, 108, 1, 255, 197, 105, 16, 255, 171, 78, 7, 255, 148, 60, 5, 255, 157, 75, 9, 255, 158, 74, 9, 255, 159, 70, 5, 255, 158, 72, 5, 255, 149, 64, 2, 255, 147, 64, 1, 255, 146, 65, 4, 255, 141, 60, 6, 255, 138, 61, 5, 255, 136, 58, 3, 255, 137, 55, 1, 255, 141, 55, 4, 255, 141, 54, 4, 255, 137, 52, 2, 255, 134, 48, 2, 255, 126, 46, 3, 255, 120, 42, 3, 255, 125, 46, 1, 255, 126, 47, 2, 255, 127, 47, 5, 255, 122, 42, 6, 255, 121, 46, 3, 255, 117, 51, 2, 255, 134, 61, 2, 255, 141, 61, 2, 255, 140, 59, 2, 255, 143, 63, 4, 255, 146, 66, 2, 255, 153, 69, 1, 255, 164, 74, 3, 255, 165, 70, 2, 255, 169, 73, 0, 255, 170, 77, 2, 255, 171, 77, 2, 255, 176, 84, 0, 255, 189, 99, 0, 255, 191, 102, 0, 255, 191, 102, 3, 255, 190, 100, 2, 255, 188, 98, 0, 255, 190, 100, 4, 255, 182, 91, 3, 255, 174, 83, 0, 255, 177, 86, 6, 255, 172, 79, 4, 255, 171, 79, 2, 255, 173, 82, 1, 255, 169, 80, 0, 255, 170, 81, 1, 255, 173, 82, 0, 255, 173, 82, 0, 255, 173, 80, 2, 255, 173, 81, 3, 255, 175, 82, 4, 255, 175, 83, 1, 255, 176, 85, 3, 255, 173, 82, 1, 255, 1, 21, 48, 255, 2, 23, 57, 255, 4, 27, 61, 255, 3, 26, 67, 255, 4, 28, 65, 255, 0, 23, 54, 255, 0, 21, 56, 255, 2, 21, 49, 255, 3, 21, 47, 255, 3, 19, 50, 255, 1, 18, 42, 255, 0, 17, 32, 255, 1, 17, 33, 255, 3, 15, 45, 255, 1, 7, 31, 255, 4, 1, 13, 255, 1, 0, 14, 255, 2, 2, 18, 255, 3, 1, 2, 255, 0, 11, 117, 255, 18, 88, 215, 255, 47, 45, 27, 255, 26, 8, 0, 255, 29, 22, 97, 255, 6, 25, 165, 255, 7, 2, 4, 255, 10, 1, 4, 255, 6, 4, 3, 255, 11, 3, 3, 255, 12, 3, 0, 255, 13, 4, 4, 255, 14, 3, 1, 255, 11, 3, 1, 255, 11, 3, 2, 255, 14, 6, 4, 255, 15, 7, 5, 255, 15, 7, 4, 255, 14, 5, 2, 255, 16, 5, 3, 255, 16, 5, 3, 255, 17, 4, 1, 255, 21, 7, 4, 255, 17, 3, 0, 255, 21, 9, 3, 255, 22, 9, 2, 255, 26, 8, 2, 255, 24, 8, 2, 255, 26, 10, 2, 255, 32, 11, 2, 255, 37, 16, 3, 255, 35, 17, 1, 255, 41, 19, 5, 255, 37, 18, 4, 255, 41, 16, 3, 255, 42, 15, 2, 255, 33, 19, 0, 255, 37, 22, 3, 255, 42, 18, 1, 255, 38, 18, 1, 255, 39, 24, 3, 255, 46, 26, 5, 255, 45, 28, 3, 255, 43, 28, 0, 255, 54, 32, 4, 255, 61, 38, 5, 255, 69, 37, 2, 255, 64, 41, 5, 255, 67, 47, 5, 255, 66, 45, 5, 255, 66, 49, 7, 255, 78, 58, 9, 255, 71, 60, 7, 255, 79, 61, 10, 255, 101, 70, 13, 255, 112, 74, 37, 255, 81, 65, 53, 255, 86, 74, 26, 255, 130, 73, 16, 255, 146, 75, 8, 255, 160, 91, 4, 255, 170, 96, 4, 255, 162, 97, 6, 255, 169, 93, 5, 255, 155, 84, 2, 255, 126, 70, 7, 255, 93, 60, 6, 255, 80, 53, 6, 255, 85, 54, 4, 255, 89, 59, 3, 255, 89, 57, 3, 255, 93, 59, 3, 255, 93, 60, 3, 255, 89, 60, 1, 255, 92, 57, 2, 255, 112, 66, 5, 255, 115, 63, 2, 255, 106, 56, 2, 255, 104, 55, 8, 255, 89, 54, 5, 255, 90, 53, 4, 255, 97, 58, 8, 255, 95, 57, 7, 255, 97, 57, 8, 255, 91, 56, 1, 255, 99, 57, 1, 255, 95, 56, 1, 255, 103, 57, 2, 255, 112, 70, 5, 255, 122, 73, 3, 255, 135, 80, 12, 255, 144, 83, 9, 255, 158, 84, 7, 255, 161, 79, 3, 255, 156, 70, 1, 255, 160, 69, 7, 255, 166, 73, 3, 255, 168, 73, 1, 255, 170, 77, 2, 255, 167, 72, 4, 255, 169, 72, 2, 255, 167, 73, 1, 255, 161, 72, 2, 255, 151, 66, 2, 255, 159, 73, 4, 255, 171, 84, 4, 255, 161, 71, 4, 255, 147, 65, 4, 255, 156, 69, 4, 255, 171, 80, 2, 255, 174, 84, 4, 255, 166, 74, 4, 255, 153, 58, 5, 255, 147, 54, 8, 255, 140, 51, 4, 255, 125, 52, 7, 255, 111, 49, 4, 255, 101, 42, 10, 255, 119, 56, 9, 255, 136, 62, 8, 255, 108, 40, 9, 255, 79, 41, 2, 255, 90, 44, 4, 255, 82, 37, 2, 255, 70, 37, 4, 255, 68, 41, 7, 255, 83, 39, 5, 255, 76, 39, 3, 255, 79, 41, 8, 255, 86, 45, 11, 255, 83, 45, 4, 255, 88, 46, 8, 255, 86, 45, 10, 255, 96, 47, 2, 255, 130, 67, 11, 255, 123, 59, 7, 255, 117, 56, 4, 255, 120, 55, 12, 255, 127, 59, 10, 255, 133, 62, 3, 255, 134, 58, 4, 255, 123, 54, 7, 255, 124, 51, 5, 255, 125, 56, 5, 255, 129, 62, 7, 255, 125, 53, 13, 255, 123, 54, 10, 255, 124, 58, 6, 255, 119, 57, 6, 255, 113, 55, 8, 255, 113, 52, 10, 255, 109, 51, 7, 255, 110, 54, 7, 255, 112, 54, 4, 255, 113, 57, 13, 255, 102, 52, 7, 255, 98, 47, 9, 255, 101, 50, 7, 255, 115, 62, 8, 255, 115, 59, 11, 255, 121, 64, 7, 255, 138, 76, 8, 255, 124, 63, 7, 255, 89, 37, 8, 255, 99, 48, 10, 255, 108, 57, 9, 255, 108, 59, 13, 255, 141, 82, 18, 255, 127, 70, 8, 255, 130, 71, 8, 255, 118, 64, 16, 255, 137, 77, 11, 255, 135, 67, 7, 255, 102, 58, 5, 255, 100, 48, 8, 255, 110, 59, 12, 255, 127, 69, 10, 255, 130, 69, 8, 255, 116, 64, 11, 255, 96, 51, 5, 255, 97, 51, 5, 255, 96, 49, 8, 255, 100, 51, 11, 255, 106, 53, 10, 255, 118, 61, 14, 255, 127, 69, 6, 255, 122, 65, 8, 255, 114, 60, 4, 255, 119, 57, 9, 255, 127, 60, 3, 255, 124, 61, 3, 255, 126, 66, 10, 255, 130, 66, 10, 255, 138, 72, 12, 255, 141, 71, 10, 255, 137, 68, 13, 255, 138, 72, 9, 255, 136, 73, 11, 255, 142, 79, 9, 255, 151, 79, 16, 255, 136, 69, 5, 255, 137, 70, 1, 255, 149, 74, 8, 255, 141, 72, 14, 255, 144, 74, 5, 255, 152, 76, 9, 255, 144, 72, 11, 255, 149, 75, 6, 255, 162, 76, 7, 255, 166, 75, 8, 255, 164, 83, 6, 255, 160, 83, 9, 255, 177, 100, 19, 255, 175, 98, 10, 255, 173, 86, 13, 255, 185, 95, 6, 255, 187, 101, 6, 255, 181, 98, 9, 255, 166, 77, 9, 255, 165, 76, 13, 255, 186, 103, 11, 255, 191, 108, 10, 255, 187, 105, 4, 255, 203, 119, 16, 255, 209, 135, 7, 255, 209, 136, 1, 255, 205, 132, 3, 255, 213, 138, 16, 255, 203, 127, 15, 255, 191, 112, 6, 255, 201, 120, 9, 255, 210, 131, 3, 255, 200, 119, 2, 255, 197, 112, 6, 255, 189, 104, 12, 255, 188, 103, 13, 255, 182, 98, 6, 255, 174, 89, 5, 255, 180, 98, 3, 255, 183, 106, 11, 255, 185, 110, 18, 255, 203, 135, 7, 255, 209, 144, 2, 255, 198, 131, 3, 255, 191, 120, 6, 255, 202, 134, 4, 255, 212, 142, 9, 255, 201, 127, 8, 255, 199, 124, 4, 255, 199, 122, 4, 255, 201, 123, 2, 255, 207, 135, 6, 255, 202, 130, 14, 255, 203, 133, 12, 255, 196, 125, 7, 255, 199, 127, 10, 255, 202, 128, 22, 255, 202, 129, 11, 255, 198, 126, 11, 255, 198, 125, 17, 255, 200, 128, 7, 255, 197, 123, 4, 255, 196, 119, 7, 255, 198, 122, 10, 255, 198, 120, 18, 255, 198, 119, 15, 255, 197, 121, 9, 255, 197, 121, 10, 255, 196, 124, 4, 255, 200, 131, 5, 255, 206, 132, 5, 255, 205, 127, 5, 255, 197, 115, 7, 255, 183, 98, 4, 255, 174, 90, 0, 255, 173, 84, 9, 255, 164, 78, 6, 255, 155, 78, 1, 255, 153, 72, 4, 255, 160, 78, 3, 255, 175, 97, 1, 255, 172, 98, 6, 255, 159, 78, 7, 255, 167, 85, 10, 255, 151, 81, 11, 255, 116, 61, 1, 255, 123, 61, 6, 255, 173, 95, 9, 255, 199, 135, 2, 255, 196, 131, 4, 255, 197, 125, 4, 255, 186, 109, 6, 255, 185, 106, 2, 255, 192, 110, 13, 255, 195, 112, 10, 255, 197, 115, 10, 255, 196, 116, 5, 255, 196, 119, 2, 255, 197, 119, 4, 255, 199, 117, 5, 255, 198, 115, 6, 255, 197, 111, 8, 255, 193, 107, 4, 255, 190, 104, 1, 255, 190, 104, 3, 255, 189, 103, 3, 255, 190, 102, 5, 255, 189, 101, 2, 255, 187, 98, 3, 255, 187, 98, 4, 255, 188, 102, 5, 255, 194, 110, 10, 255, 201, 120, 9, 255, 204, 123, 16, 255, 205, 122, 13, 255, 201, 116, 3, 255, 201, 115, 6, 255, 201, 115, 3, 255, 198, 114, 6, 255, 193, 112, 2, 255, 193, 106, 1, 255, 168, 77, 10, 255, 156, 69, 2, 255, 163, 75, 7, 255, 156, 66, 10, 255, 150, 59, 6, 255, 146, 62, 0, 255, 151, 69, 7, 255, 154, 68, 9, 255, 153, 67, 3, 255, 148, 63, 4, 255, 143, 59, 7, 255, 142, 61, 4, 255, 143, 61, 5, 255, 139, 50, 1, 255, 140, 48, 2, 255, 143, 56, 6, 255, 134, 52, 2, 255, 131, 48, 4, 255, 129, 50, 4, 255, 121, 44, 5, 255, 124, 47, 4, 255, 122, 45, 1, 255, 124, 50, 0, 255, 121, 48, 6, 255, 118, 47, 2, 255, 133, 59, 11, 255, 140, 63, 3, 255, 144, 63, 0, 255, 148, 66, 5, 255, 155, 69, 6, 255, 161, 73, 0, 255, 163, 73, 6, 255, 164, 70, 7, 255, 176, 82, 1, 255, 188, 94, 3, 255, 180, 87, 1, 255, 180, 89, 2, 255, 186, 97, 5, 255, 192, 105, 3, 255, 191, 103, 0, 255, 190, 100, 4, 255, 189, 97, 3, 255, 187, 92, 0, 255, 189, 94, 2, 255, 185, 94, 3, 255, 181, 91, 0, 255, 179, 90, 1, 255, 179, 89, 1, 255, 177, 87, 1, 255, 174, 83, 1, 255, 172, 83, 2, 255, 172, 83, 1, 255, 175, 84, 1, 255, 177, 86, 2, 255, 177, 84, 3, 255, 172, 81, 2, 255, 168, 76, 0, 255, 170, 77, 1, 255, 171, 78, 2, 255, 170, 78, 1, 255, 1, 23, 58, 255, 2, 25, 59, 255, 0, 24, 57, 255, 0, 26, 57, 255, 0, 26, 62, 255, 0, 26, 59, 255, 2, 24, 60, 255, 4, 24, 52, 255, 3, 20, 42, 255, 0, 16, 38, 255, 0, 16, 38, 255, 4, 15, 38, 255, 4, 14, 37, 255, 3, 6, 27, 255, 0, 1, 8, 255, 4, 2, 12, 255, 0, 3, 12, 255, 0, 1, 0, 255, 0, 4, 82, 255, 18, 71, 223, 255, 51, 55, 46, 255, 23, 10, 0, 255, 18, 21, 66, 255, 10, 32, 189, 255, 8, 3, 32, 255, 10, 4, 0, 255, 9, 7, 4, 255, 3, 6, 4, 255, 10, 4, 6, 255, 11, 3, 3, 255, 12, 6, 8, 255, 14, 4, 3, 255, 13, 3, 1, 255, 14, 4, 3, 255, 16, 6, 4, 255, 18, 7, 4, 255, 14, 5, 1, 255, 14, 6, 0, 255, 17, 5, 1, 255, 25, 10, 6, 255, 22, 7, 2, 255, 25, 9, 4, 255, 25, 10, 4, 255, 22, 6, 1, 255, 21, 8, 1, 255, 21, 9, 2, 255, 23, 10, 2, 255, 32, 12, 2, 255, 40, 12, 1, 255, 45, 16, 3, 255, 45, 21, 4, 255, 39, 13, 1, 255, 38, 17, 3, 255, 46, 17, 5, 255, 47, 17, 4, 255, 33, 21, 0, 255, 38, 23, 2, 255, 46, 22, 5, 255, 37, 23, 4, 255, 39, 25, 4, 255, 43, 23, 2, 255, 52, 29, 3, 255, 56, 30, 2, 255, 67, 35, 5, 255, 63, 41, 2, 255, 74, 41, 4, 255, 63, 42, 3, 255, 68, 45, 2, 255, 68, 46, 2, 255, 67, 48, 5, 255, 70, 56, 1, 255, 70, 59, 1, 255, 93, 69, 14, 255, 104, 65, 17, 255, 75, 62, 20, 255, 94, 71, 21, 255, 147, 80, 15, 255, 163, 80, 8, 255, 156, 84, 7, 255, 164, 90, 8, 255, 162, 82, 7, 255, 152, 75, 8, 255, 125, 60, 3, 255, 90, 55, 6, 255, 84, 54, 6, 255, 85, 56, 0, 255, 87, 62, 0, 255, 86, 61, 0, 255, 91, 61, 1, 255, 92, 60, 4, 255, 90, 57, 2, 255, 88, 56, 3, 255, 87, 59, 5, 255, 88, 59, 7, 255, 114, 65, 6, 255, 113, 63, 3, 255, 96, 59, 6, 255, 97, 59, 3, 255, 93, 60, 4, 255, 97, 54, 3, 255, 92, 58, 6, 255, 82, 55, 5, 255, 97, 58, 4, 255, 111, 67, 4, 255, 133, 82, 6, 255, 154, 95, 7, 255, 169, 98, 5, 255, 174, 94, 5, 255, 176, 84, 3, 255, 174, 78, 2, 255, 169, 77, 1, 255, 166, 72, 1, 255, 169, 77, 2, 255, 167, 77, 3, 255, 167, 75, 2, 255, 172, 76, 5, 255, 169, 75, 1, 255, 169, 75, 1, 255, 172, 78, 2, 255, 177, 83, 1, 255, 174, 83, 2, 255, 172, 84, 4, 255, 177, 82, 9, 255, 172, 83, 9, 255, 168, 77, 0, 255, 177, 77, 2, 255, 169, 78, 2, 255, 157, 72, 0, 255, 151, 69, 1, 255, 141, 52, 2, 255, 125, 51, 9, 255, 118, 57, 9, 255, 101, 48, 1, 255, 96, 52, 3, 255, 88, 47, 3, 255, 79, 45, 3, 255, 88, 51, 5, 255, 100, 53, 5, 255, 86, 44, 5, 255, 81, 40, 12, 255, 87, 52, 10, 255, 88, 48, 7, 255, 88, 42, 4, 255, 88, 45, 6, 255, 85, 43, 6, 255, 69, 36, 1, 255, 80, 41, 6, 255, 85, 46, 5, 255, 77, 43, 7, 255, 78, 46, 10, 255, 91, 48, 8, 255, 92, 47, 6, 255, 91, 48, 7, 255, 105, 56, 12, 255, 108, 55, 3, 255, 107, 61, 4, 255, 99, 48, 10, 255, 102, 49, 10, 255, 111, 55, 4, 255, 114, 55, 6, 255, 121, 54, 3, 255, 128, 52, 12, 255, 126, 53, 4, 255, 136, 60, 1, 255, 141, 57, 3, 255, 133, 57, 4, 255, 126, 58, 10, 255, 117, 55, 7, 255, 109, 50, 2, 255, 104, 44, 2, 255, 102, 46, 8, 255, 97, 43, 9, 255, 97, 42, 15, 255, 106, 50, 9, 255, 139, 71, 7, 255, 115, 54, 11, 255, 103, 53, 10, 255, 109, 57, 0, 255, 108, 46, 1, 255, 100, 48, 2, 255, 113, 59, 12, 255, 127, 66, 15, 255, 107, 50, 6, 255, 105, 54, 6, 255, 109, 50, 5, 255, 106, 48, 8, 255, 109, 57, 8, 255, 126, 71, 14, 255, 133, 65, 7, 255, 163, 87, 7, 255, 135, 67, 7, 255, 107, 58, 8, 255, 93, 45, 8, 255, 87, 42, 2, 255, 92, 52, 8, 255, 135, 76, 10, 255, 144, 74, 12, 255, 133, 72, 9, 255, 120, 71, 5, 255, 105, 52, 8, 255, 109, 57, 12, 255, 112, 60, 10, 255, 107, 55, 8, 255, 114, 63, 6, 255, 125, 74, 9, 255, 121, 71, 10, 255, 112, 69, 2, 255, 111, 64, 9, 255, 105, 60, 10, 255, 93, 55, 10, 255, 96, 56, 7, 255, 102, 57, 6, 255, 104, 59, 0, 255, 102, 53, 1, 255, 106, 56, 6, 255, 117, 64, 10, 255, 115, 58, 1, 255, 124, 67, 5, 255, 117, 62, 13, 255, 111, 55, 14, 255, 120, 64, 6, 255, 134, 70, 8, 255, 131, 66, 9, 255, 131, 70, 6, 255, 129, 70, 12, 255, 129, 69, 9, 255, 133, 74, 10, 255, 136, 74, 12, 255, 136, 74, 9, 255, 133, 69, 11, 255, 152, 78, 17, 255, 171, 93, 10, 255, 155, 81, 0, 255, 154, 80, 6, 255, 162, 87, 13, 255, 167, 89, 10, 255, 153, 69, 15, 255, 161, 83, 6, 255, 186, 106, 8, 255, 191, 109, 2, 255, 193, 111, 4, 255, 203, 127, 8, 255, 203, 131, 8, 255, 210, 137, 13, 255, 210, 138, 8, 255, 211, 140, 1, 255, 216, 143, 7, 255, 208, 130, 4, 255, 199, 116, 4, 255, 203, 120, 6, 255, 199, 116, 7, 255, 193, 105, 10, 255, 191, 106, 4, 255, 184, 100, 1, 255, 183, 99, 13, 255, 173, 91, 4, 255, 177, 100, 8, 255, 190, 113, 12, 255, 187, 112, 6, 255, 200, 131, 13, 255, 204, 137, 6, 255, 196, 125, 7, 255, 182, 108, 5, 255, 193, 119, 11, 255, 194, 119, 14, 255, 197, 120, 8, 255, 193, 112, 11, 255, 186, 104, 5, 255, 186, 104, 1, 255, 198, 120, 10, 255, 206, 132, 11, 255, 204, 132, 8, 255, 201, 131, 10, 255, 197, 125, 12, 255, 203, 132, 7, 255, 202, 130, 7, 255, 201, 130, 10, 255, 198, 126, 12, 255, 200, 127, 11, 255, 202, 126, 14, 255, 198, 119, 12, 255, 198, 122, 6, 255, 198, 123, 5, 255, 197, 118, 10, 255, 196, 117, 8, 255, 195, 120, 5, 255, 196, 121, 12, 255, 194, 122, 6, 255, 196, 122, 6, 255, 198, 122, 9, 255, 190, 109, 5, 255, 180, 96, 4, 255, 171, 85, 4, 255, 163, 79, 2, 255, 158, 76, 5, 255, 156, 77, 2, 255, 150, 72, 1, 255, 158, 79, 10, 255, 155, 72, 6, 255, 158, 72, 1, 255, 175, 88, 1, 255, 175, 83, 3, 255, 165, 78, 4, 255, 174, 102, 8, 255, 142, 74, 4, 255, 129, 58, 7, 255, 156, 86, 4, 255, 170, 93, 5, 255, 188, 111, 0, 255, 188, 103, 10, 255, 188, 103, 13, 255, 187, 104, 10, 255, 193, 108, 13, 255, 196, 113, 1, 255, 196, 116, 7, 255, 196, 116, 3, 255, 198, 119, 1, 255, 198, 117, 4, 255, 197, 115, 3, 255, 193, 110, 4, 255, 189, 101, 10, 255, 187, 100, 5, 255, 183, 97, 0, 255, 183, 96, 0, 255, 185, 96, 1, 255, 182, 94, 3, 255, 180, 92, 1, 255, 180, 91, 2, 255, 184, 96, 4, 255, 195, 109, 4, 255, 203, 118, 9, 255, 204, 123, 7, 255, 204, 123, 16, 255, 203, 122, 6, 255, 202, 116, 7, 255, 200, 114, 6, 255, 195, 111, 3, 255, 194, 112, 8, 255, 196, 111, 10, 255, 170, 80, 4, 255, 150, 61, 1, 255, 160, 74, 7, 255, 155, 67, 4, 255, 150, 58, 3, 255, 151, 61, 10, 255, 146, 62, 2, 255, 144, 59, 4, 255, 144, 62, 6, 255, 145, 65, 2, 255, 143, 61, 3, 255, 143, 57, 4, 255, 147, 57, 2, 255, 142, 54, 2, 255, 140, 54, 4, 255, 133, 51, 1, 255, 133, 52, 4, 255, 122, 41, 1, 255, 125, 46, 3, 255, 129, 52, 3, 255, 128, 50, 7, 255, 128, 52, 3, 255, 127, 52, 4, 255, 122, 49, 3, 255, 118, 47, 3, 255, 128, 56, 2, 255, 148, 64, 4, 255, 151, 64, 4, 255, 156, 69, 0, 255, 162, 74, 1, 255, 164, 72, 1, 255, 168, 71, 1, 255, 169, 77, 4, 255, 168, 77, 2, 255, 187, 96, 2, 255, 194, 101, 1, 255, 187, 96, 2, 255, 185, 98, 2, 255, 190, 102, 7, 255, 188, 100, 2, 255, 185, 97, 0, 255, 186, 95, 3, 255, 187, 95, 2, 255, 188, 94, 0, 255, 185, 89, 3, 255, 177, 87, 2, 255, 180, 90, 3, 255, 177, 88, 2, 255, 181, 92, 0, 255, 183, 94, 0, 255, 182, 93, 1, 255, 183, 93, 3, 255, 180, 90, 1, 255, 179, 90, 0, 255, 180, 91, 1, 255, 181, 92, 2, 255, 180, 90, 2, 255, 174, 84, 1, 255, 175, 81, 8, 255, 173, 82, 5, 255, 171, 79, 2, 255, 3, 21, 58, 255, 3, 22, 53, 255, 1, 21, 55, 255, 2, 24, 49, 255, 2, 24, 55, 255, 3, 25, 56, 255, 2, 28, 55, 255, 2, 25, 52, 255, 3, 21, 43, 255, 3, 20, 38, 255, 3, 18, 44, 255, 2, 14, 41, 255, 3, 8, 25, 255, 3, 0, 16, 255, 3, 1, 14, 255, 2, 3, 5, 255, 3, 1, 4, 255, 0, 3, 51, 255, 10, 60, 227, 255, 54, 72, 93, 255, 31, 15, 0, 255, 36, 17, 30, 255, 20, 32, 171, 255, 4, 13, 63, 255, 8, 3, 0, 255, 10, 7, 2, 255, 11, 4, 0, 255, 8, 4, 2, 255, 13, 4, 5, 255, 15, 6, 0, 255, 12, 5, 2, 255, 10, 3, 4, 255, 13, 4, 2, 255, 17, 6, 3, 255, 20, 7, 4, 255, 19, 5, 2, 255, 21, 4, 1, 255, 22, 5, 2, 255, 25, 8, 2, 255, 27, 9, 1, 255, 27, 8, 1, 255, 27, 7, 1, 255, 29, 10, 3, 255, 28, 9, 3, 255, 25, 8, 2, 255, 18, 8, 2, 255, 24, 10, 2, 255, 37, 13, 2, 255, 49, 15, 2, 255, 52, 19, 5, 255, 42, 16, 1, 255, 46, 18, 2, 255, 46, 19, 1, 255, 45, 17, 1, 255, 51, 20, 5, 255, 44, 18, 1, 255, 41, 20, 2, 255, 40, 22, 3, 255, 42, 21, 4, 255, 45, 22, 4, 255, 48, 30, 5, 255, 53, 30, 1, 255, 65, 32, 2, 255, 66, 38, 2, 255, 63, 43, 1, 255, 76, 41, 3, 255, 66, 44, 4, 255, 73, 48, 2, 255, 71, 48, 2, 255, 73, 50, 6, 255, 70, 53, 4, 255, 96, 59, 2, 255, 102, 63, 6, 255, 71, 61, 7, 255, 110, 79, 3, 255, 151, 86, 11, 255, 164, 85, 2, 255, 171, 96, 7, 255, 166, 95, 12, 255, 160, 91, 5, 255, 151, 76, 1, 255, 120, 58, 1, 255, 90, 56, 4, 255, 91, 62, 3, 255, 91, 60, 5, 255, 84, 57, 0, 255, 86, 59, 3, 255, 87, 57, 2, 255, 86, 59, 3, 255, 89, 56, 6, 255, 91, 57, 5, 255, 91, 58, 5, 255, 92, 55, 4, 255, 87, 52, 5, 255, 112, 66, 9, 255, 116, 63, 4, 255, 91, 59, 0, 255, 97, 57, 2, 255, 83, 53, 5, 255, 96, 50, 10, 255, 101, 56, 5, 255, 114, 78, 7, 255, 159, 95, 10, 255, 180, 93, 7, 255, 182, 92, 3, 255, 181, 82, 4, 255, 173, 76, 5, 255, 171, 72, 3, 255, 166, 72, 2, 255, 164, 72, 2, 255, 172, 76, 2, 255, 168, 78, 3, 255, 174, 83, 3, 255, 178, 78, 3, 255, 172, 74, 0, 255, 176, 75, 2, 255, 174, 77, 1, 255, 167, 74, 4, 255, 167, 73, 6, 255, 171, 76, 2, 255, 182, 83, 2, 255, 183, 83, 5, 255, 175, 78, 4, 255, 169, 73, 2, 255, 158, 64, 3, 255, 143, 61, 6, 255, 126, 50, 6, 255, 111, 48, 4, 255, 101, 49, 7, 255, 99, 48, 1, 255, 89, 48, 3, 255, 84, 47, 7, 255, 78, 47, 3, 255, 82, 49, 4, 255, 80, 47, 3, 255, 78, 45, 4, 255, 83, 49, 5, 255, 79, 48, 3, 255, 78, 45, 6, 255, 88, 47, 7, 255, 81, 44, 2, 255, 83, 43, 1, 255, 85, 42, 4, 255, 90, 40, 10, 255, 78, 34, 4, 255, 75, 40, 4, 255, 85, 42, 9, 255, 79, 43, 4, 255, 85, 44, 12, 255, 82, 44, 8, 255, 79, 44, 3, 255, 78, 47, 3, 255, 99, 56, 4, 255, 129, 68, 10, 255, 115, 61, 2, 255, 101, 53, 2, 255, 82, 43, 7, 255, 82, 46, 16, 255, 85, 47, 10, 255, 90, 45, 4, 255, 99, 50, 4, 255, 99, 48, 13, 255, 110, 54, 9, 255, 115, 55, 6, 255, 121, 56, 9, 255, 126, 59, 0, 255, 134, 63, 2, 255, 128, 59, 6, 255, 122, 55, 5, 255, 125, 56, 8, 255, 122, 57, 2, 255, 115, 55, 2, 255, 106, 49, 10, 255, 133, 74, 10, 255, 142, 63, 8, 255, 99, 47, 6, 255, 102, 50, 5, 255, 103, 50, 10, 255, 104, 51, 6, 255, 100, 48, 2, 255, 106, 55, 11, 255, 149, 86, 8, 255, 116, 50, 6, 255, 100, 46, 11, 255, 105, 48, 11, 255, 103, 44, 5, 255, 100, 45, 10, 255, 101, 47, 4, 255, 133, 67, 13, 255, 165, 87, 8, 255, 115, 51, 7, 255, 84, 46, 5, 255, 94, 49, 12, 255, 90, 48, 7, 255, 91, 46, 9, 255, 112, 56, 6, 255, 123, 65, 4, 255, 134, 74, 10, 255, 125, 66, 6, 255, 107, 52, 2, 255, 107, 54, 5, 255, 102, 55, 3, 255, 100, 50, 4, 255, 135, 69, 12, 255, 158, 86, 1, 255, 169, 98, 5, 255, 165, 88, 13, 255, 150, 81, 15, 255, 115, 60, 6, 255, 102, 57, 5, 255, 99, 56, 7, 255, 101, 60, 4, 255, 115, 77, 12, 255, 115, 70, 13, 255, 112, 59, 6, 255, 111, 56, 8, 255, 115, 64, 10, 255, 106, 61, 4, 255, 93, 54, 9, 255, 99, 60, 12, 255, 106, 60, 5, 255, 115, 63, 7, 255, 124, 66, 6, 255, 119, 66, 6, 255, 115, 64, 14, 255, 122, 69, 4, 255, 125, 67, 8, 255, 130, 72, 14, 255, 130, 73, 5, 255, 135, 74, 5, 255, 118, 65, 7, 255, 118, 62, 12, 255, 140, 75, 15, 255, 151, 86, 13, 255, 157, 95, 16, 255, 143, 72, 14, 255, 161, 85, 7, 255, 195, 120, 11, 255, 204, 130, 9, 255, 204, 127, 6, 255, 207, 129, 9, 255, 206, 130, 12, 255, 209, 136, 9, 255, 211, 138, 6, 255, 212, 139, 7, 255, 211, 139, 2, 255, 210, 133, 5, 255, 203, 120, 1, 255, 192, 101, 3, 255, 201, 113, 9, 255, 194, 112, 5, 255, 191, 107, 2, 255, 180, 95, 9, 255, 174, 93, 4, 255, 177, 100, 6, 255, 173, 97, 8, 255, 179, 113, 6, 255, 191, 123, 8, 255, 194, 126, 9, 255, 193, 128, 4, 255, 199, 133, 6, 255, 191, 115, 13, 255, 184, 104, 10, 255, 182, 104, 2, 255, 167, 85, 2, 255, 173, 91, 6, 255, 185, 106, 9, 255, 189, 109, 18, 255, 197, 122, 13, 255, 203, 135, 11, 255, 201, 132, 4, 255, 203, 134, 4, 255, 201, 130, 10, 255, 200, 128, 13, 255, 202, 128, 17, 255, 204, 134, 15, 255, 202, 134, 8, 255, 201, 131, 11, 255, 201, 132, 8, 255, 198, 123, 9, 255, 198, 119, 19, 255, 200, 122, 13, 255, 198, 121, 9, 255, 198, 117, 12, 255, 198, 117, 6, 255, 200, 121, 10, 255, 197, 123, 10, 255, 192, 121, 3, 255, 202, 121, 1, 255, 196, 113, 3, 255, 182, 99, 1, 255, 170, 86, 0, 255, 170, 86, 2, 255, 164, 81, 3, 255, 157, 74, 0, 255, 168, 84, 7, 255, 168, 82, 7, 255, 159, 72, 5, 255, 157, 71, 4, 255, 151, 66, 4, 255, 147, 64, 8, 255, 154, 69, 6, 255, 163, 77, 4, 255, 165, 84, 3, 255, 151, 76, 6, 255, 153, 83, 4, 255, 152, 82, 7, 255, 145, 71, 8, 255, 167, 94, 1, 255, 177, 98, 2, 255, 180, 97, 4, 255, 186, 105, 5, 255, 189, 106, 7, 255, 192, 111, 2, 255, 195, 115, 6, 255, 196, 115, 6, 255, 197, 117, 6, 255, 195, 114, 10, 255, 194, 110, 5, 255, 189, 102, 7, 255, 184, 94, 3, 255, 183, 93, 2, 255, 182, 93, 3, 255, 182, 92, 2, 255, 179, 90, 2, 255, 177, 89, 2, 255, 181, 94, 1, 255, 188, 104, 1, 255, 197, 113, 4, 255, 202, 118, 5, 255, 204, 119, 18, 255, 204, 121, 12, 255, 201, 117, 13, 255, 197, 117, 13, 255, 199, 115, 17, 255, 196, 114, 3, 255, 195, 115, 1, 255, 201, 118, 7, 255, 192, 100, 6, 255, 154, 67, 1, 255, 158, 70, 4, 255, 156, 67, 1, 255, 153, 66, 1, 255, 146, 63, 4, 255, 146, 64, 2, 255, 142, 59, 6, 255, 137, 57, 3, 255, 138, 56, 1, 255, 141, 58, 1, 255, 142, 60, 3, 255, 145, 63, 7, 255, 142, 62, 4, 255, 141, 61, 2, 255, 136, 53, 8, 255, 130, 50, 5, 255, 120, 47, 1, 255, 117, 44, 1, 255, 126, 45, 4, 255, 128, 46, 4, 255, 124, 46, 7, 255, 119, 42, 1, 255, 123, 49, 4, 255, 122, 49, 5, 255, 127, 55, 2, 255, 140, 68, 1, 255, 148, 67, 3, 255, 157, 70, 7, 255, 163, 72, 1, 255, 162, 69, 1, 255, 164, 72, 4, 255, 179, 89, 1, 255, 188, 100, 3, 255, 189, 101, 3, 255, 192, 104, 4, 255, 192, 102, 2, 255, 190, 99, 2, 255, 191, 101, 5, 255, 190, 100, 4, 255, 187, 95, 2, 255, 187, 96, 1, 255, 185, 95, 4, 255, 184, 94, 1, 255, 187, 98, 2, 255, 182, 91, 3, 255, 175, 86, 1, 255, 175, 85, 4, 255, 173, 83, 5, 255, 176, 86, 3, 255, 185, 95, 6, 255, 186, 96, 3, 255, 187, 93, 1, 255, 184, 91, 1, 255, 182, 91, 2, 255, 180, 91, 2, 255, 179, 91, 1, 255, 183, 91, 3, 255, 180, 87, 1, 255, 179, 84, 3, 255, 177, 85, 2, 255, 173, 81, 0, 255, 2, 17, 48, 255, 4, 20, 53, 255, 4, 23, 56, 255, 3, 22, 55, 255, 3, 21, 56, 255, 1, 18, 53, 255, 4, 22, 54, 255, 1, 24, 50, 255, 2, 22, 45, 255, 5, 22, 48, 255, 2, 21, 47, 255, 0, 8, 32, 255, 0, 4, 12, 255, 0, 3, 10, 255, 2, 0, 16, 255, 4, 0, 8, 255, 3, 0, 31, 255, 6, 52, 213, 255, 46, 81, 127, 255, 35, 28, 0, 255, 36, 10, 16, 255, 29, 29, 161, 255, 6, 18, 97, 255, 9, 0, 0, 255, 8, 6, 1, 255, 10, 4, 3, 255, 11, 4, 2, 255, 12, 3, 3, 255, 12, 3, 2, 255, 13, 3, 1, 255, 14, 3, 1, 255, 11, 5, 3, 255, 13, 6, 2, 255, 18, 11, 5, 255, 15, 6, 1, 255, 17, 6, 3, 255, 20, 4, 2, 255, 24, 9, 5, 255, 24, 6, 2, 255, 26, 9, 3, 255, 27, 11, 3, 255, 28, 9, 0, 255, 27, 10, 1, 255, 27, 10, 3, 255, 26, 8, 3, 255, 28, 10, 4, 255, 40, 15, 5, 255, 52, 16, 3, 255, 56, 19, 3, 255, 50, 20, 4, 255, 45, 13, 2, 255, 53, 21, 2, 255, 50, 19, 5, 255, 42, 22, 1, 255, 45, 24, 3, 255, 44, 22, 3, 255, 34, 23, 0, 255, 37, 20, 2, 255, 44, 22, 3, 255, 47, 30, 2, 255, 57, 31, 4, 255, 57, 32, 6, 255, 58, 35, 3, 255, 73, 41, 2, 255, 68, 40, 1, 255, 66, 40, 4, 255, 69, 48, 2, 255, 79, 49, 5, 255, 78, 47, 2, 255, 75, 53, 4, 255, 91, 53, 9, 255, 102, 64, 12, 255, 78, 58, 2, 255, 105, 73, 13, 255, 147, 85, 13, 255, 161, 91, 9, 255, 178, 105, 6, 255, 175, 110, 8, 255, 166, 97, 11, 255, 148, 67, 3, 255, 106, 53, 4, 255, 82, 53, 7, 255, 87, 55, 3, 255, 94, 57, 1, 255, 91, 59, 8, 255, 84, 56, 5, 255, 83, 58, 4, 255, 85, 57, 2, 255, 89, 60, 8, 255, 86, 57, 3, 255, 92, 61, 4, 255, 88, 58, 2, 255, 93, 57, 2, 255, 93, 56, 0, 255, 105, 58, 2, 255, 91, 53, 1, 255, 89, 47, 10, 255, 95, 57, 4, 255, 114, 77, 4, 255, 140, 86, 8, 255, 167, 96, 7, 255, 188, 96, 5, 255, 178, 80, 5, 255, 164, 67, 1, 255, 157, 68, 0, 255, 164, 71, 5, 255, 167, 78, 4, 255, 168, 77, 0, 255, 167, 77, 3, 255, 169, 74, 4, 255, 171, 75, 4, 255, 167, 72, 1, 255, 168, 73, 0, 255, 170, 74, 3, 255, 166, 72, 1, 255, 165, 72, 4, 255, 162, 75, 1, 255, 165, 81, 2, 255, 174, 82, 4, 255, 178, 81, 6, 255, 171, 79, 6, 255, 154, 67, 5, 255, 135, 61, 8, 255, 127, 54, 4, 255, 124, 49, 6, 255, 103, 50, 3, 255, 91, 54, 4, 255, 95, 51, 4, 255, 103, 49, 4, 255, 99, 51, 3, 255, 87, 49, 5, 255, 78, 46, 3, 255, 83, 48, 3, 255, 88, 44, 4, 255, 81, 46, 6, 255, 78, 46, 6, 255, 84, 46, 4, 255, 82, 46, 4, 255, 78, 48, 8, 255, 78, 47, 5, 255, 78, 40, 4, 255, 75, 45, 5, 255, 72, 44, 2, 255, 68, 35, 7, 255, 65, 37, 2, 255, 83, 47, 6, 255, 82, 45, 7, 255, 80, 44, 6, 255, 85, 49, 7, 255, 80, 47, 4, 255, 76, 44, 3, 255, 89, 53, 9, 255, 118, 65, 15, 255, 117, 57, 10, 255, 94, 50, 7, 255, 88, 49, 7, 255, 82, 47, 2, 255, 93, 53, 6, 255, 92, 52, 7, 255, 90, 47, 2, 255, 95, 56, 4, 255, 90, 46, 8, 255, 95, 52, 5, 255, 89, 47, 6, 255, 91, 44, 9, 255, 96, 51, 8, 255, 108, 51, 15, 255, 114, 53, 10, 255, 119, 59, 6, 255, 135, 62, 5, 255, 134, 63, 3, 255, 131, 59, 5, 255, 145, 65, 8, 255, 141, 75, 9, 255, 105, 49, 4, 255, 100, 52, 7, 255, 107, 56, 2, 255, 112, 45, 16, 255, 106, 52, 8, 255, 102, 56, 1, 255, 112, 57, 3, 255, 119, 61, 2, 255, 106, 49, 11, 255, 102, 49, 6, 255, 101, 48, 9, 255, 101, 46, 11, 255, 100, 41, 6, 255, 95, 38, 1, 255, 139, 79, 16, 255, 134, 69, 11, 255, 101, 39, 6, 255, 103, 49, 2, 255, 103, 52, 6, 255, 107, 50, 7, 255, 96, 50, 3, 255, 80, 43, 3, 255, 81, 49, 5, 255, 128, 72, 14, 255, 128, 63, 5, 255, 112, 56, 6, 255, 113, 58, 1, 255, 110, 59, 6, 255, 100, 58, 13, 255, 101, 56, 10, 255, 132, 67, 9, 255, 176, 97, 6, 255, 178, 92, 5, 255, 127, 66, 13, 255, 78, 42, 15, 255, 77, 49, 4, 255, 84, 54, 8, 255, 104, 61, 17, 255, 153, 85, 16, 255, 170, 101, 9, 255, 162, 93, 13, 255, 164, 91, 11, 255, 149, 90, 14, 255, 127, 68, 15, 255, 117, 70, 7, 255, 116, 70, 5, 255, 117, 69, 5, 255, 110, 61, 9, 255, 110, 62, 8, 255, 107, 66, 8, 255, 110, 58, 8, 255, 116, 63, 7, 255, 111, 62, 8, 255, 110, 60, 8, 255, 111, 62, 14, 255, 136, 82, 20, 255, 147, 90, 1, 255, 147, 90, 6, 255, 149, 84, 11, 255, 159, 94, 14, 255, 166, 103, 12, 255, 175, 102, 15, 255, 204, 133, 15, 255, 210, 138, 9, 255, 206, 138, 3, 255, 209, 141, 7, 255, 209, 140, 8, 255, 212, 141, 3, 255, 213, 140, 5, 255, 213, 140, 11, 255, 208, 139, 5, 255, 210, 136, 2, 255, 208, 125, 7, 255, 199, 110, 6, 255, 193, 103, 12, 255, 201, 118, 5, 255, 207, 126, 5, 255, 199, 113, 3, 255, 189, 103, 11, 255, 184, 104, 8, 255, 177, 105, 8, 255, 186, 118, 14, 255, 201, 138, 8, 255, 197, 135, 2, 255, 194, 127, 9, 255, 202, 134, 7, 255, 198, 125, 12, 255, 183, 105, 12, 255, 185, 105, 15, 255, 175, 92, 7, 255, 178, 97, 4, 255, 186, 109, 6, 255, 193, 122, 6, 255, 201, 131, 14, 255, 206, 139, 17, 255, 204, 137, 18, 255, 199, 134, 9, 255, 201, 136, 7, 255, 203, 133, 14, 255, 202, 131, 13, 255, 201, 130, 16, 255, 204, 134, 24, 255, 202, 133, 20, 255, 199, 130, 12, 255, 198, 129, 13, 255, 197, 127, 8, 255, 195, 123, 6, 255, 197, 120, 15, 255, 197, 117, 19, 255, 195, 120, 14, 255, 197, 122, 13, 255, 197, 122, 13, 255, 198, 125, 5, 255, 197, 122, 4, 255, 197, 112, 9, 255, 179, 94, 3, 255, 169, 83, 3, 255, 164, 79, 0, 255, 169, 84, 3, 255, 175, 89, 6, 255, 165, 74, 4, 255, 158, 65, 6, 255, 161, 72, 5, 255, 175, 83, 6, 255, 182, 90, 4, 255, 174, 88, 1, 255, 160, 81, 10, 255, 141, 70, 3, 255, 153, 74, 4, 255, 167, 83, 8, 255, 164, 87, 8, 255, 163, 94, 4, 255, 169, 99, 4, 255, 166, 99, 10, 255, 157, 85, 4, 255, 161, 78, 1, 255, 180, 89, 13, 255, 190, 104, 6, 255, 188, 107, 5, 255, 190, 110, 4, 255, 193, 111, 8, 255, 194, 113, 12, 255, 195, 114, 4, 255, 190, 105, 4, 255, 185, 96, 5, 255, 182, 93, 3, 255, 183, 90, 1, 255, 181, 88, 1, 255, 181, 90, 6, 255, 181, 92, 6, 255, 185, 97, 4, 255, 190, 105, 3, 255, 197, 112, 3, 255, 200, 116, 4, 255, 201, 117, 5, 255, 199, 115, 3, 255, 200, 113, 7, 255, 200, 115, 7, 255, 200, 117, 10, 255, 200, 122, 14, 255, 198, 115, 15, 255, 197, 111, 5, 255, 195, 119, 1, 255, 204, 119, 11, 255, 180, 83, 5, 255, 164, 72, 6, 255, 158, 73, 7, 255, 153, 69, 4, 255, 152, 63, 2, 255, 144, 57, 1, 255, 142, 56, 2, 255, 140, 57, 5, 255, 135, 57, 2, 255, 140, 60, 4, 255, 136, 55, 0, 255, 139, 58, 2, 255, 141, 59, 3, 255, 143, 59, 1, 255, 145, 58, 3, 255, 138, 53, 3, 255, 125, 51, 6, 255, 113, 45, 1, 255, 112, 42, 0, 255, 109, 36, 8, 255, 111, 38, 6, 255, 115, 44, 5, 255, 110, 43, 2, 255, 119, 49, 3, 255, 132, 55, 3, 255, 144, 63, 3, 255, 148, 67, 1, 255, 150, 70, 0, 255, 159, 72, 4, 255, 160, 68, 5, 255, 167, 74, 4, 255, 183, 90, 5, 255, 194, 101, 3, 255, 197, 102, 3, 255, 193, 100, 1, 255, 190, 99, 2, 255, 190, 103, 4, 255, 189, 99, 2, 255, 188, 98, 3, 255, 186, 94, 0, 255, 188, 94, 0, 255, 187, 94, 0, 255, 184, 93, 1, 255, 184, 95, 0, 255, 185, 94, 1, 255, 183, 92, 2, 255, 177, 87, 0, 255, 173, 86, 2, 255, 171, 84, 2, 255, 172, 84, 1, 255, 178, 88, 2, 255, 183, 92, 3, 255, 183, 89, 3, 255, 180, 86, 1, 255, 179, 87, 1, 255, 183, 90, 3, 255, 180, 89, 2, 255, 182, 88, 3, 255, 179, 83, 1, 255, 178, 82, 5, 255, 173, 79, 2, 255, 169, 78, 2, 255, 3, 19, 47, 255, 1, 20, 45, 255, 2, 22, 51, 255, 4, 23, 50, 255, 2, 19, 50, 255, 3, 22, 53, 255, 3, 22, 50, 255, 2, 26, 44, 255, 1, 22, 44, 255, 5, 23, 49, 255, 3, 17, 41, 255, 0, 3, 16, 255, 3, 0, 10, 255, 2, 0, 13, 255, 2, 4, 12, 255, 1, 0, 13, 255, 3, 41, 195, 255, 40, 80, 156, 255, 30, 17, 0, 255, 26, 12, 0, 255, 37, 29, 129, 255, 3, 16, 119, 255, 12, 0, 0, 255, 14, 3, 2, 255, 12, 7, 4, 255, 16, 0, 3, 255, 14, 5, 3, 255, 12, 7, 3, 255, 13, 6, 4, 255, 15, 4, 4, 255, 14, 3, 2, 255, 12, 4, 3, 255, 26, 7, 6, 255, 19, 4, 2, 255, 19, 5, 3, 255, 22, 6, 5, 255, 21, 5, 4, 255, 25, 10, 4, 255, 28, 7, 2, 255, 31, 13, 7, 255, 26, 9, 2, 255, 34, 13, 6, 255, 27, 12, 3, 255, 25, 13, 3, 255, 25, 7, 3, 255, 34, 12, 4, 255, 42, 15, 0, 255, 55, 17, 0, 255, 58, 21, 5, 255, 43, 20, 2, 255, 52, 18, 1, 255, 62, 22, 2, 255, 57, 21, 4, 255, 48, 22, 4, 255, 46, 22, 0, 255, 41, 20, 2, 255, 39, 24, 5, 255, 46, 24, 4, 255, 48, 27, 3, 255, 49, 33, 0, 255, 59, 32, 2, 255, 62, 34, 6, 255, 58, 34, 0, 255, 73, 42, 1, 255, 75, 42, 2, 255, 71, 49, 6, 255, 78, 46, 3, 255, 74, 49, 4, 255, 69, 51, 6, 255, 80, 50, 2, 255, 104, 61, 4, 255, 74, 53, 5, 255, 107, 80, 11, 255, 159, 96, 18, 255, 173, 106, 11, 255, 177, 112, 0, 255, 181, 112, 8, 255, 168, 92, 7, 255, 142, 67, 5, 255, 100, 53, 4, 255, 81, 55, 7, 255, 84, 58, 5, 255, 84, 60, 1, 255, 85, 56, 3, 255, 85, 60, 3, 255, 81, 60, 1, 255, 81, 59, 2, 255, 79, 58, 4, 255, 91, 60, 3, 255, 93, 56, 1, 255, 90, 57, 4, 255, 86, 59, 8, 255, 90, 55, 7, 255, 95, 51, 4, 255, 89, 55, 1, 255, 114, 74, 13, 255, 145, 89, 4, 255, 176, 107, 9, 255, 190, 103, 6, 255, 188, 95, 0, 255, 181, 86, 1, 255, 167, 71, 3, 255, 159, 64, 5, 255, 154, 62, 6, 255, 160, 69, 5, 255, 160, 72, 1, 255, 166, 69, 2, 255, 163, 67, 1, 255, 159, 67, 0, 255, 162, 71, 1, 255, 166, 70, 1, 255, 169, 73, 1, 255, 168, 78, 6, 255, 167, 75, 5, 255, 168, 69, 3, 255, 168, 71, 2, 255, 167, 75, 5, 255, 161, 75, 7, 255, 142, 67, 4, 255, 120, 56, 2, 255, 103, 52, 5, 255, 95, 49, 4, 255, 93, 51, 2, 255, 93, 50, 2, 255, 105, 52, 5, 255, 103, 53, 2, 255, 101, 57, 5, 255, 103, 50, 4, 255, 104, 51, 1, 255, 100, 50, 4, 255, 89, 44, 1, 255, 90, 52, 5, 255, 85, 48, 3, 255, 86, 45, 5, 255, 86, 48, 5, 255, 82, 50, 2, 255, 80, 46, 4, 255, 83, 44, 7, 255, 78, 44, 6, 255, 76, 44, 6, 255, 76, 40, 3, 255, 76, 41, 2, 255, 72, 46, 0, 255, 67, 42, 7, 255, 79, 44, 7, 255, 79, 41, 4, 255, 77, 47, 8, 255, 80, 46, 7, 255, 78, 43, 0, 255, 82, 48, 5, 255, 74, 43, 5, 255, 79, 49, 2, 255, 92, 51, 4, 255, 95, 47, 2, 255, 96, 54, 2, 255, 84, 51, 2, 255, 85, 50, 4, 255, 109, 62, 6, 255, 95, 52, 4, 255, 88, 51, 10, 255, 92, 52, 8, 255, 93, 45, 3, 255, 98, 54, 3, 255, 96, 55, 7, 255, 89, 45, 8, 255, 93, 48, 4, 255, 87, 45, 7, 255, 88, 43, 6, 255, 93, 50, 5, 255, 127, 61, 6, 255, 130, 55, 2, 255, 130, 59, 3, 255, 128, 59, 12, 255, 128, 58, 10, 255, 127, 63, 4, 255, 119, 54, 5, 255, 118, 49, 7, 255, 115, 54, 2, 255, 111, 55, 10, 255, 111, 51, 7, 255, 114, 52, 8, 255, 103, 48, 7, 255, 103, 55, 7, 255, 104, 50, 10, 255, 104, 47, 4, 255, 104, 44, 9, 255, 101, 44, 9, 255, 104, 53, 9, 255, 127, 65, 8, 255, 108, 48, 12, 255, 88, 46, 8, 255, 93, 55, 3, 255, 99, 50, 3, 255, 104, 46, 3, 255, 103, 53, 4, 255, 105, 57, 10, 255, 100, 53, 9, 255, 112, 57, 6, 255, 115, 57, 4, 255, 111, 62, 5, 255, 112, 60, 2, 255, 113, 54, 6, 255, 97, 57, 4, 255, 72, 49, 10, 255, 99, 65, 12, 255, 168, 93, 12, 255, 138, 69, 4, 255, 84, 54, 2, 255, 83, 52, 10, 255, 87, 52, 8, 255, 79, 49, 4, 255, 106, 67, 12, 255, 142, 80, 11, 255, 181, 105, 7, 255, 180, 101, 11, 255, 164, 84, 10, 255, 126, 67, 4, 255, 106, 55, 5, 255, 106, 54, 7, 255, 103, 60, 10, 255, 98, 66, 4, 255, 98, 67, 8, 255, 107, 66, 9, 255, 122, 70, 9, 255, 120, 69, 1, 255, 114, 69, 7, 255, 100, 63, 8, 255, 90, 59, 2, 255, 116, 74, 13, 255, 150, 86, 13, 255, 162, 90, 17, 255, 171, 98, 14, 255, 164, 92, 8, 255, 169, 97, 5, 255, 197, 126, 14, 255, 208, 145, 9, 255, 206, 140, 7, 255, 207, 135, 14, 255, 206, 137, 6, 255, 208, 139, 13, 255, 209, 139, 8, 255, 209, 139, 6, 255, 211, 136, 11, 255, 213, 133, 10, 255, 207, 128, 9, 255, 210, 130, 2, 255, 201, 115, 1, 255, 194, 105, 2, 255, 197, 112, 10, 255, 197, 118, 9, 255, 192, 112, 5, 255, 180, 96, 4, 255, 184, 101, 4, 255, 187, 109, 8, 255, 183, 112, 3, 255, 186, 117, 10, 255, 192, 125, 5, 255, 200, 134, 20, 255, 208, 143, 11, 255, 200, 131, 1, 255, 188, 112, 13, 255, 194, 120, 7, 255, 188, 115, 4, 255, 187, 113, 6, 255, 198, 124, 15, 255, 205, 132, 18, 255, 206, 136, 15, 255, 203, 133, 15, 255, 203, 134, 18, 255, 202, 134, 9, 255, 199, 133, 8, 255, 201, 134, 10, 255, 202, 132, 6, 255, 203, 133, 7, 255, 204, 135, 8, 255, 203, 135, 8, 255, 204, 136, 13, 255, 202, 133, 9, 255, 201, 129, 16, 255, 200, 128, 12, 255, 196, 126, 2, 255, 198, 122, 14, 255, 197, 119, 18, 255, 198, 126, 7, 255, 195, 123, 12, 255, 197, 120, 26, 255, 203, 125, 9, 255, 201, 120, 7, 255, 177, 92, 3, 255, 166, 80, 3, 255, 165, 79, 7, 255, 164, 78, 3, 255, 165, 79, 1, 255, 166, 78, 3, 255, 166, 78, 2, 255, 162, 77, 2, 255, 151, 70, 1, 255, 161, 74, 7, 255, 180, 86, 6, 255, 182, 85, 1, 255, 169, 73, 7, 255, 148, 63, 12, 255, 153, 69, 10, 255, 164, 79, 4, 255, 162, 83, 6, 255, 156, 85, 5, 255, 172, 101, 5, 255, 171, 97, 11, 255, 146, 70, 5, 255, 153, 76, 3, 255, 177, 99, 7, 255, 187, 105, 6, 255, 188, 101, 6, 255, 197, 113, 3, 255, 197, 115, 5, 255, 196, 114, 7, 255, 190, 106, 1, 255, 184, 94, 2, 255, 180, 87, 7, 255, 179, 87, 3, 255, 179, 87, 3, 255, 182, 92, 5, 255, 184, 97, 2, 255, 193, 108, 3, 255, 202, 117, 8, 255, 201, 116, 3, 255, 200, 115, 2, 255, 201, 115, 4, 255, 198, 114, 1, 255, 198, 114, 1, 255, 199, 112, 3, 255, 197, 112, 4, 255, 197, 115, 9, 255, 196, 117, 15, 255, 198, 116, 15, 255, 201, 117, 14, 255, 202, 123, 13, 255, 189, 103, 12, 255, 166, 72, 5, 255, 167, 73, 4, 255, 150, 66, 1, 255, 142, 61, 1, 255, 145, 55, 5, 255, 141, 53, 2, 255, 141, 56, 2, 255, 146, 61, 8, 255, 141, 58, 5, 255, 137, 55, 1, 255, 137, 57, 3, 255, 136, 56, 3, 255, 142, 59, 6, 255, 145, 58, 3, 255, 141, 55, 2, 255, 137, 53, 1, 255, 120, 47, 4, 255, 102, 38, 1, 255, 102, 36, 1, 255, 107, 44, 3, 255, 113, 45, 2, 255, 122, 47, 2, 255, 125, 50, 5, 255, 124, 51, 2, 255, 137, 62, 7, 255, 148, 66, 4, 255, 153, 66, 1, 255, 152, 69, 4, 255, 157, 70, 3, 255, 164, 73, 1, 255, 181, 91, 6, 255, 192, 101, 2, 255, 195, 100, 0, 255, 192, 96, 2, 255, 190, 96, 1, 255, 188, 99, 1, 255, 189, 102, 4, 255, 188, 99, 3, 255, 188, 96, 3, 255, 184, 90, 1, 255, 185, 92, 3, 255, 185, 94, 4, 255, 183, 93, 1, 255, 186, 95, 3, 255, 185, 94, 4, 255, 181, 90, 1, 255, 177, 85, 2, 255, 173, 84, 1, 255, 172, 86, 3, 255, 175, 87, 3, 255, 176, 86, 1, 255, 174, 83, 1, 255, 172, 79, 1, 255, 173, 80, 0, 255, 175, 82, 2, 255, 172, 80, 0, 255, 173, 81, 1, 255, 176, 82, 4, 255, 170, 76, 1, 255, 169, 76, 2, 255, 166, 74, 0, 255, 165, 73, 0, 255, 3, 20, 42, 255, 3, 22, 46, 255, 2, 20, 44, 255, 3, 18, 45, 255, 4, 20, 45, 255, 1, 19, 43, 255, 2, 21, 38, 255, 1, 18, 44, 255, 0, 19, 43, 255, 4, 16, 31, 255, 3, 4, 20, 255, 2, 2, 17, 255, 2, 0, 22, 255, 4, 2, 12, 255, 1, 0, 4, 255, 0, 26, 162, 255, 30, 88, 183, 255, 38, 21, 3, 255, 23, 3, 0, 255, 49, 22, 85, 255, 7, 21, 129, 255, 12, 1, 1, 255, 17, 0, 6, 255, 21, 3, 7, 255, 16, 3, 1, 255, 15, 4, 2, 255, 15, 4, 4, 255, 11, 2, 1, 255, 15, 5, 4, 255, 17, 6, 5, 255, 13, 1, 1, 255, 18, 7, 5, 255, 26, 7, 6, 255, 21, 4, 1, 255, 28, 11, 7, 255, 24, 7, 4, 255, 29, 9, 4, 255, 31, 9, 3, 255, 35, 9, 2, 255, 32, 10, 1, 255, 32, 10, 2, 255, 30, 7, 0, 255, 29, 11, 3, 255, 27, 12, 3, 255, 34, 14, 6, 255, 40, 13, 7, 255, 49, 21, 2, 255, 54, 21, 0, 255, 52, 19, 3, 255, 45, 19, 1, 255, 59, 26, 1, 255, 59, 22, 2, 255, 54, 21, 0, 255, 54, 21, 2, 255, 48, 23, 1, 255, 40, 19, 5, 255, 44, 18, 5, 255, 50, 29, 1, 255, 54, 32, 3, 255, 57, 36, 3, 255, 60, 35, 1, 255, 69, 38, 2, 255, 71, 41, 2, 255, 69, 45, 2, 255, 76, 43, 3, 255, 75, 49, 3, 255, 78, 52, 1, 255, 77, 49, 4, 255, 72, 53, 3, 255, 100, 59, 8, 255, 73, 51, 1, 255, 111, 79, 8, 255, 158, 97, 6, 255, 170, 106, 6, 255, 185, 117, 7, 255, 186, 123, 1, 255, 155, 91, 4, 255, 111, 57, 7, 255, 93, 56, 2, 255, 79, 57, 1, 255, 85, 59, 2, 255, 97, 61, 5, 255, 83, 61, 2, 255, 83, 61, 2, 255, 86, 62, 5, 255, 84, 59, 2, 255, 82, 57, 1, 255, 84, 61, 1, 255, 92, 60, 7, 255, 92, 54, 6, 255, 89, 57, 7, 255, 91, 51, 2, 255, 93, 57, 5, 255, 119, 79, 9, 255, 166, 105, 6, 255, 192, 110, 2, 255, 189, 102, 6, 255, 182, 88, 4, 255, 177, 78, 4, 255, 170, 74, 4, 255, 160, 67, 3, 255, 156, 66, 3, 255, 152, 62, 0, 255, 148, 64, 0, 255, 151, 68, 1, 255, 159, 72, 4, 255, 164, 69, 3, 255, 167, 67, 5, 255, 169, 66, 3, 255, 163, 72, 0, 255, 163, 74, 4, 255, 157, 70, 3, 255, 149, 67, 4, 255, 137, 65, 5, 255, 123, 61, 3, 255, 120, 59, 4, 255, 108, 55, 4, 255, 93, 50, 4, 255, 92, 48, 4, 255, 97, 52, 5, 255, 99, 57, 3, 255, 97, 54, 1, 255, 105, 54, 7, 255, 105, 51, 5, 255, 103, 50, 3, 255, 106, 56, 7, 255, 105, 54, 6, 255, 99, 49, 3, 255, 97, 54, 2, 255, 99, 53, 3, 255, 98, 51, 3, 255, 96, 52, 5, 255, 89, 48, 2, 255, 85, 48, 4, 255, 83, 49, 5, 255, 81, 48, 2, 255, 80, 49, 3, 255, 77, 45, 0, 255, 81, 43, 2, 255, 79, 42, 5, 255, 75, 46, 10, 255, 79, 40, 5, 255, 73, 40, 0, 255, 72, 43, 6, 255, 83, 45, 7, 255, 78, 45, 4, 255, 73, 47, 5, 255, 83, 47, 7, 255, 82, 46, 2, 255, 84, 48, 6, 255, 82, 45, 9, 255, 81, 46, 6, 255, 84, 49, 6, 255, 77, 45, 4, 255, 78, 49, 7, 255, 86, 49, 10, 255, 94, 52, 3, 255, 107, 57, 3, 255, 88, 45, 9, 255, 90, 51, 4, 255, 100, 51, 5, 255, 106, 56, 6, 255, 108, 57, 6, 255, 101, 53, 2, 255, 91, 47, 7, 255, 92, 48, 10, 255, 102, 55, 6, 255, 91, 50, 4, 255, 103, 53, 8, 255, 96, 52, 13, 255, 96, 52, 4, 255, 120, 55, 7, 255, 117, 53, 4, 255, 121, 56, 4, 255, 131, 63, 4, 255, 128, 62, 4, 255, 118, 58, 8, 255, 124, 67, 4, 255, 128, 64, 3, 255, 119, 53, 7, 255, 113, 52, 6, 255, 114, 53, 6, 255, 110, 48, 7, 255, 103, 48, 8, 255, 105, 50, 12, 255, 104, 47, 7, 255, 102, 48, 5, 255, 100, 48, 7, 255, 99, 46, 3, 255, 103, 43, 12, 255, 103, 51, 8, 255, 97, 52, 1, 255, 99, 50, 3, 255, 100, 47, 6, 255, 102, 50, 5, 255, 106, 50, 4, 255, 104, 50, 4, 255, 105, 54, 4, 255, 109, 58, 9, 255, 112, 62, 7, 255, 99, 56, 3, 255, 103, 54, 8, 255, 95, 51, 5, 255, 88, 54, 9, 255, 141, 90, 11, 255, 139, 73, 2, 255, 81, 49, 7, 255, 78, 47, 6, 255, 84, 50, 2, 255, 79, 54, 11, 255, 75, 54, 8, 255, 99, 68, 1, 255, 153, 90, 11, 255, 163, 88, 2, 255, 139, 73, 11, 255, 118, 67, 14, 255, 102, 61, 11, 255, 86, 60, 7, 255, 84, 62, 8, 255, 77, 51, 19, 255, 86, 58, 9, 255, 109, 69, 8, 255, 129, 78, 12, 255, 142, 86, 4, 255, 140, 75, 15, 255, 98, 64, 10, 255, 109, 69, 8, 255, 133, 82, 11, 255, 156, 98, 18, 255, 176, 108, 17, 255, 186, 112, 9, 255, 190, 115, 9, 255, 194, 125, 11, 255, 202, 135, 4, 255, 208, 139, 6, 255, 209, 138, 7, 255, 213, 139, 8, 255, 209, 136, 3, 255, 211, 138, 5, 255, 208, 137, 6, 255, 210, 137, 4, 255, 210, 136, 7, 255, 210, 133, 17, 255, 206, 123, 4, 255, 193, 104, 8, 255, 185, 95, 13, 255, 178, 87, 6, 255, 187, 99, 3, 255, 185, 102, 4, 255, 175, 93, 2, 255, 179, 104, 6, 255, 171, 94, 2, 255, 171, 93, 4, 255, 183, 108, 9, 255, 179, 107, 3, 255, 186, 111, 14, 255, 195, 126, 11, 255, 205, 141, 10, 255, 199, 133, 10, 255, 193, 122, 11, 255, 199, 129, 4, 255, 199, 129, 9, 255, 193, 125, 9, 255, 201, 134, 11, 255, 204, 136, 7, 255, 207, 137, 13, 255, 206, 135, 19, 255, 205, 134, 18, 255, 206, 137, 14, 255, 202, 135, 6, 255, 202, 136, 11, 255, 201, 134, 15, 255, 202, 131, 14, 255, 203, 131, 10, 255, 203, 134, 7, 255, 203, 135, 6, 255, 203, 134, 6, 255, 201, 131, 7, 255, 199, 126, 13, 255, 200, 124, 9, 255, 201, 126, 7, 255, 201, 124, 9, 255, 197, 121, 6, 255, 200, 123, 19, 255, 197, 118, 16, 255, 202, 125, 4, 255, 202, 119, 6, 255, 182, 92, 6, 255, 166, 79, 2, 255, 167, 81, 4, 255, 169, 83, 5, 255, 176, 89, 9, 255, 176, 88, 8, 255, 168, 77, 5, 255, 164, 76, 5, 255, 163, 80, 1, 255, 158, 75, 3, 255, 156, 68, 6, 255, 177, 84, 1, 255, 185, 91, 3, 255, 168, 73, 6, 255, 154, 68, 3, 255, 149, 66, 2, 255, 161, 78, 8, 255, 150, 74, 0, 255, 127, 59, 5, 255, 134, 67, 9, 255, 163, 95, 4, 255, 165, 90, 6, 255, 169, 91, 6, 255, 179, 107, 7, 255, 189, 117, 12, 255, 188, 107, 3, 255, 196, 111, 2, 255, 197, 116, 3, 255, 198, 114, 10, 255, 184, 96, 2, 255, 182, 91, 0, 255, 182, 93, 1, 255, 178, 91, 3, 255, 180, 93, 3, 255, 189, 101, 9, 255, 192, 105, 5, 255, 201, 116, 4, 255, 206, 120, 5, 255, 204, 118, 7, 255, 201, 116, 3, 255, 200, 114, 2, 255, 196, 112, 4, 255, 196, 112, 4, 255, 197, 112, 2, 255, 195, 111, 4, 255, 195, 113, 7, 255, 195, 116, 7, 255, 200, 120, 13, 255, 202, 123, 19, 255, 199, 113, 9, 255, 169, 83, 0, 255, 154, 68, 3, 255, 160, 68, 3, 255, 147, 63, 0, 255, 141, 59, 3, 255, 140, 52, 5, 255, 138, 54, 7, 255, 137, 57, 4, 255, 140, 58, 5, 255, 138, 55, 4, 255, 139, 56, 4, 255, 135, 56, 5, 255, 129, 53, 4, 255, 134, 56, 7, 255, 135, 57, 3, 255, 130, 57, 2, 255, 124, 46, 5, 255, 129, 55, 6, 255, 136, 68, 6, 255, 132, 56, 1, 255, 131, 56, 0, 255, 140, 61, 8, 255, 140, 58, 9, 255, 132, 50, 2, 255, 135, 56, 2, 255, 140, 61, 2, 255, 150, 69, 5, 255, 149, 63, 1, 255, 152, 68, 5, 255, 161, 74, 3, 255, 177, 88, 0, 255, 188, 100, 2, 255, 190, 98, 2, 255, 190, 95, 3, 255, 186, 97, 0, 255, 187, 98, 2, 255, 188, 97, 2, 255, 187, 96, 2, 255, 187, 94, 2, 255, 185, 91, 2, 255, 181, 88, 0, 255, 181, 91, 1, 255, 183, 94, 2, 255, 182, 93, 0, 255, 185, 96, 1, 255, 189, 102, 3, 255, 186, 96, 1, 255, 178, 85, 3, 255, 173, 83, 1, 255, 175, 87, 4, 255, 175, 87, 4, 255, 175, 84, 4, 255, 169, 76, 2, 255, 166, 76, 3, 255, 164, 75, 1, 255, 169, 77, 2, 255, 168, 76, 1, 255, 170, 78, 4, 255, 168, 78, 4, 255, 170, 80, 6, 255, 173, 82, 1, 255, 170, 80, 2, 255, 164, 73, 1, 255, 2, 15, 35, 255, 1, 20, 40, 255, 1, 17, 41, 255, 1, 16, 41, 255, 4, 17, 42, 255, 2, 19, 41, 255, 4, 18, 41, 255, 5, 16, 43, 255, 2, 19, 42, 255, 3, 7, 17, 255, 4, 0, 13, 255, 1, 1, 17, 255, 4, 2, 20, 255, 1, 0, 0, 255, 0, 14, 127, 255, 26, 84, 210, 255, 56, 44, 21, 255, 14, 8, 0, 255, 34, 20, 71, 255, 9, 26, 163, 255, 10, 3, 25, 255, 6, 5, 3, 255, 14, 5, 5, 255, 16, 7, 5, 255, 18, 5, 9, 255, 11, 5, 4, 255, 17, 5, 5, 255, 17, 6, 5, 255, 13, 1, 1, 255, 18, 6, 5, 255, 18, 5, 3, 255, 20, 5, 4, 255, 16, 8, 4, 255, 19, 9, 2, 255, 23, 11, 3, 255, 21, 7, 1, 255, 29, 10, 4, 255, 32, 6, 0, 255, 40, 12, 1, 255, 38, 14, 2, 255, 35, 11, 3, 255, 34, 9, 2, 255, 32, 11, 3, 255, 32, 12, 2, 255, 38, 12, 2, 255, 41, 13, 4, 255, 56, 18, 4, 255, 58, 19, 1, 255, 50, 21, 0, 255, 66, 25, 6, 255, 65, 26, 4, 255, 50, 21, 3, 255, 43, 16, 1, 255, 49, 19, 0, 255, 42, 23, 1, 255, 38, 22, 7, 255, 49, 25, 6, 255, 53, 32, 0, 255, 57, 31, 1, 255, 61, 34, 5, 255, 62, 37, 0, 255, 74, 42, 2, 255, 78, 43, 4, 255, 68, 45, 4, 255, 69, 44, 3, 255, 82, 50, 6, 255, 81, 55, 3, 255, 77, 51, 0, 255, 98, 60, 6, 255, 82, 60, 8, 255, 111, 86, 8, 255, 155, 94, 7, 255, 168, 100, 14, 255, 173, 108, 4, 255, 177, 108, 2, 255, 150, 79, 4, 255, 105, 57, 2, 255, 77, 52, 4, 255, 82, 60, 4, 255, 90, 58, 2, 255, 87, 61, 4, 255, 88, 62, 6, 255, 92, 62, 2, 255, 91, 57, 1, 255, 86, 57, 3, 255, 88, 60, 6, 255, 86, 55, 3, 255, 87, 61, 4, 255, 87, 58, 5, 255, 81, 50, 7, 255, 81, 60, 2, 255, 121, 76, 7, 255, 165, 102, 6, 255, 190, 109, 4, 255, 188, 91, 3, 255, 174, 79, 7, 255, 173, 75, 2, 255, 166, 72, 5, 255, 165, 76, 3, 255, 159, 68, 2, 255, 155, 64, 4, 255, 147, 64, 4, 255, 144, 70, 6, 255, 158, 76, 5, 255, 156, 73, 2, 255, 152, 68, 3, 255, 143, 66, 1, 255, 141, 66, 3, 255, 123, 58, 5, 255, 116, 56, 4, 255, 116, 56, 5, 255, 108, 55, 3, 255, 96, 54, 3, 255, 88, 52, 4, 255, 91, 51, 7, 255, 85, 48, 4, 255, 87, 50, 4, 255, 95, 53, 4, 255, 98, 51, 1, 255, 102, 52, 3, 255, 100, 54, 5, 255, 94, 54, 3, 255, 98, 57, 5, 255, 101, 53, 5, 255, 95, 52, 1, 255, 101, 57, 5, 255, 102, 52, 4, 255, 97, 51, 4, 255, 94, 56, 7, 255, 92, 53, 3, 255, 91, 54, 3, 255, 91, 51, 3, 255, 88, 48, 2, 255, 87, 49, 6, 255, 77, 44, 2, 255, 82, 47, 4, 255, 80, 45, 4, 255, 76, 44, 3, 255, 80, 43, 4, 255, 85, 46, 6, 255, 73, 45, 3, 255, 69, 40, 9, 255, 74, 40, 6, 255, 74, 40, 2, 255, 80, 49, 5, 255, 77, 48, 2, 255, 77, 48, 1, 255, 81, 54, 7, 255, 77, 46, 2, 255, 84, 47, 3, 255, 87, 46, 8, 255, 88, 48, 8, 255, 86, 47, 3, 255, 87, 52, 7, 255, 81, 48, 7, 255, 97, 56, 5, 255, 122, 68, 7, 255, 119, 48, 5, 255, 106, 43, 8, 255, 106, 56, 4, 255, 107, 56, 5, 255, 110, 61, 4, 255, 109, 55, 6, 255, 107, 55, 8, 255, 98, 54, 8, 255, 99, 49, 10, 255, 113, 56, 8, 255, 100, 56, 8, 255, 101, 55, 3, 255, 108, 58, 5, 255, 124, 60, 6, 255, 90, 48, 5, 255, 89, 48, 11, 255, 100, 51, 5, 255, 109, 51, 10, 255, 108, 53, 2, 255, 122, 57, 6, 255, 126, 58, 8, 255, 136, 59, 7, 255, 140, 56, 8, 255, 126, 58, 6, 255, 121, 62, 3, 255, 122, 57, 2, 255, 111, 50, 6, 255, 103, 52, 5, 255, 109, 56, 6, 255, 108, 48, 4, 255, 98, 43, 9, 255, 102, 51, 11, 255, 101, 47, 2, 255, 107, 47, 9, 255, 113, 51, 10, 255, 103, 50, 5, 255, 99, 48, 7, 255, 100, 49, 10, 255, 98, 50, 4, 255, 99, 51, 2, 255, 104, 52, 8, 255, 103, 54, 7, 255, 110, 55, 7, 255, 105, 57, 9, 255, 102, 56, 7, 255, 101, 57, 6, 255, 103, 61, 6, 255, 127, 63, 17, 255, 93, 49, 8, 255, 83, 51, 5, 255, 83, 53, 4, 255, 84, 51, 5, 255, 81, 51, 7, 255, 75, 52, 10, 255, 90, 62, 7, 255, 112, 66, 5, 255, 96, 51, 12, 255, 98, 56, 5, 255, 94, 59, 9, 255, 90, 56, 4, 255, 79, 56, 2, 255, 78, 58, 3, 255, 100, 66, 8, 255, 112, 71, 9, 255, 113, 69, 7, 255, 126, 73, 9, 255, 145, 83, 7, 255, 148, 87, 3, 255, 146, 86, 20, 255, 169, 107, 11, 255, 194, 124, 9, 255, 199, 125, 15, 255, 201, 128, 12, 255, 209, 134, 15, 255, 207, 136, 6, 255, 213, 138, 18, 255, 210, 136, 14, 255, 208, 138, 8, 255, 210, 135, 3, 255, 209, 137, 4, 255, 213, 136, 8, 255, 211, 135, 10, 255, 211, 135, 6, 255, 210, 133, 7, 255, 214, 136, 10, 255, 207, 127, 12, 255, 201, 119, 7, 255, 201, 120, 9, 255, 183, 97, 13, 255, 178, 93, 9, 255, 184, 104, 3, 255, 175, 93, 7, 255, 184, 104, 7, 255, 182, 104, 3, 255, 174, 99, 3, 255, 178, 103, 10, 255, 179, 104, 5, 255, 188, 111, 16, 255, 198, 126, 13, 255, 202, 136, 6, 255, 200, 135, 4, 255, 194, 128, 8, 255, 198, 130, 11, 255, 198, 130, 5, 255, 200, 133, 21, 255, 204, 139, 15, 255, 203, 138, 12, 255, 202, 137, 10, 255, 206, 140, 12, 255, 203, 137, 9, 255, 205, 140, 11, 255, 205, 140, 11, 255, 201, 136, 11, 255, 201, 136, 14, 255, 198, 132, 14, 255, 199, 129, 12, 255, 200, 130, 12, 255, 199, 130, 12, 255, 199, 128, 12, 255, 199, 128, 8, 255, 198, 126, 8, 255, 200, 125, 12, 255, 200, 123, 8, 255, 201, 122, 12, 255, 201, 121, 10, 255, 202, 124, 4, 255, 203, 127, 9, 255, 202, 126, 8, 255, 199, 121, 9, 255, 177, 94, 6, 255, 167, 78, 8, 255, 171, 86, 8, 255, 175, 90, 9, 255, 172, 88, 1, 255, 179, 93, 7, 255, 175, 85, 6, 255, 161, 69, 1, 255, 171, 78, 4, 255, 181, 90, 4, 255, 173, 80, 4, 255, 172, 77, 8, 255, 183, 90, 9, 255, 177, 90, 7, 255, 160, 73, 5, 255, 160, 70, 3, 255, 156, 72, 8, 255, 152, 70, 4, 255, 151, 73, 5, 255, 128, 59, 1, 255, 155, 94, 7, 255, 168, 93, 3, 255, 147, 69, 5, 255, 134, 59, 2, 255, 158, 86, 6, 255, 184, 106, 6, 255, 190, 103, 6, 255, 190, 101, 8, 255, 193, 108, 6, 255, 191, 104, 3, 255, 187, 97, 1, 255, 183, 91, 1, 255, 178, 90, 0, 255, 179, 95, 1, 255, 187, 102, 0, 255, 189, 100, 3, 255, 193, 104, 11, 255, 199, 111, 11, 255, 197, 112, 3, 255, 194, 110, 3, 255, 195, 110, 3, 255, 198, 113, 3, 255, 194, 112, 2, 255, 194, 112, 5, 255, 195, 110, 6, 255, 194, 111, 3, 255, 196, 117, 1, 255, 198, 120, 6, 255, 199, 122, 4, 255, 200, 122, 15, 255, 184, 92, 4, 255, 162, 71, 3, 255, 152, 66, 2, 255, 149, 59, 2, 255, 141, 59, 1, 255, 142, 62, 5, 255, 139, 57, 4, 255, 133, 55, 2, 255, 133, 57, 2, 255, 134, 54, 2, 255, 137, 57, 1, 255, 137, 56, 2, 255, 128, 50, 0, 255, 127, 51, 2, 255, 131, 53, 5, 255, 133, 54, 3, 255, 129, 49, 3, 255, 134, 50, 2, 255, 137, 56, 2, 255, 141, 61, 6, 255, 141, 58, 4, 255, 139, 56, 2, 255, 139, 56, 3, 255, 133, 52, 1, 255, 133, 57, 1, 255, 142, 62, 3, 255, 148, 64, 3, 255, 148, 67, 2, 255, 145, 66, 1, 255, 156, 68, 0, 255, 172, 81, 6, 255, 189, 98, 4, 255, 188, 96, 1, 255, 189, 95, 6, 255, 189, 93, 7, 255, 183, 94, 3, 255, 183, 94, 2, 255, 183, 92, 1, 255, 183, 89, 0, 255, 180, 88, 1, 255, 181, 91, 5, 255, 180, 88, 4, 255, 178, 86, 2, 255, 179, 88, 3, 255, 181, 91, 3, 255, 182, 92, 2, 255, 185, 96, 3, 255, 183, 92, 1, 255, 176, 83, 4, 255, 173, 84, 3, 255, 173, 86, 4, 255, 172, 82, 1, 255, 169, 79, 2, 255, 168, 78, 6, 255, 164, 77, 4, 255, 162, 75, 2, 255, 164, 74, 2, 255, 166, 74, 2, 255, 164, 75, 3, 255, 159, 73, 1, 255, 163, 77, 3, 255, 170, 82, 1, 255, 168, 78, 2, 255, 169, 77, 3, 255, 2, 12, 31, 255, 3, 17, 34, 255, 2, 16, 41, 255, 1, 15, 38, 255, 0, 12, 35, 255, 1, 16, 36, 255, 0, 18, 40, 255, 2, 17, 40, 255, 2, 9, 22, 255, 3, 0, 12, 255, 2, 1, 16, 255, 0, 2, 16, 255, 6, 0, 0, 255, 0, 11, 95, 255, 19, 80, 223, 255, 53, 62, 50, 255, 25, 11, 0, 255, 44, 21, 40, 255, 19, 26, 164, 255, 9, 10, 56, 255, 23, 2, 0, 255, 7, 7, 4, 255, 19, 6, 4, 255, 15, 7, 5, 255, 13, 3, 6, 255, 12, 8, 3, 255, 14, 3, 1, 255, 14, 3, 1, 255, 19, 8, 6, 255, 20, 8, 6, 255, 20, 5, 2, 255, 26, 9, 5, 255, 26, 9, 4, 255, 28, 9, 3, 255, 30, 9, 3, 255, 31, 12, 6, 255, 32, 12, 3, 255, 38, 12, 1, 255, 38, 12, 1, 255, 35, 13, 1, 255, 38, 16, 5, 255, 38, 13, 6, 255, 32, 11, 1, 255, 35, 12, 2, 255, 46, 15, 6, 255, 48, 18, 2, 255, 63, 16, 6, 255, 66, 18, 4, 255, 56, 21, 0, 255, 78, 26, 5, 255, 61, 21, 3, 255, 47, 19, 2, 255, 43, 15, 4, 255, 50, 22, 3, 255, 46, 24, 4, 255, 43, 22, 7, 255, 55, 29, 2, 255, 56, 31, 1, 255, 59, 32, 3, 255, 66, 35, 5, 255, 65, 39, 2, 255, 74, 44, 3, 255, 75, 42, 2, 255, 67, 42, 3, 255, 71, 48, 2, 255, 84, 48, 4, 255, 72, 50, 2, 255, 96, 62, 8, 255, 86, 57, 8, 255, 89, 75, 6, 255, 170, 101, 9, 255, 156, 89, 4, 255, 163, 99, 3, 255, 171, 102, 2, 255, 146, 75, 3, 255, 99, 48, 6, 255, 82, 52, 1, 255, 91, 57, 3, 255, 91, 60, 7, 255, 81, 57, 1, 255, 90, 57, 2, 255, 84, 58, 1, 255, 81, 56, 1, 255, 92, 57, 6, 255, 81, 61, 3, 255, 88, 62, 4, 255, 100, 57, 5, 255, 85, 57, 2, 255, 78, 57, 1, 255, 116, 83, 0, 255, 164, 110, 6, 255, 187, 110, 6, 255, 185, 99, 5, 255, 178, 84, 5, 255, 166, 77, 3, 255, 165, 71, 4, 255, 167, 69, 3, 255, 159, 70, 0, 255, 159, 74, 3, 255, 159, 73, 4, 255, 137, 57, 2, 255, 120, 56, 7, 255, 120, 61, 9, 255, 111, 56, 5, 255, 103, 50, 3, 255, 98, 51, 4, 255, 89, 49, 2, 255, 89, 53, 3, 255, 95, 54, 3, 255, 91, 56, 4, 255, 92, 54, 2, 255, 97, 53, 0, 255, 100, 54, 2, 255, 100, 54, 3, 255, 97, 54, 3, 255, 92, 53, 3, 255, 90, 51, 3, 255, 90, 53, 5, 255, 88, 55, 5, 255, 93, 56, 5, 255, 97, 54, 3, 255, 101, 54, 3, 255, 106, 55, 5, 255, 107, 51, 4, 255, 97, 50, 1, 255, 95, 53, 2, 255, 92, 48, 1, 255, 87, 50, 4, 255, 85, 48, 5, 255, 79, 45, 0, 255, 79, 49, 0, 255, 80, 47, 1, 255, 84, 47, 3, 255, 88, 48, 5, 255, 79, 43, 4, 255, 82, 45, 8, 255, 88, 48, 8, 255, 82, 46, 2, 255, 85, 47, 4, 255, 85, 43, 2, 255, 80, 40, 3, 255, 68, 42, 6, 255, 69, 42, 5, 255, 81, 46, 3, 255, 80, 47, 3, 255, 88, 49, 7, 255, 85, 52, 7, 255, 80, 49, 3, 255, 90, 52, 8, 255, 92, 46, 1, 255, 93, 49, 2, 255, 91, 52, 4, 255, 95, 54, 4, 255, 93, 54, 0, 255, 98, 52, 6, 255, 109, 56, 4, 255, 119, 61, 2, 255, 118, 53, 6, 255, 112, 57, 5, 255, 107, 55, 3, 255, 107, 56, 11, 255, 107, 58, 5, 255, 104, 51, 5, 255, 108, 56, 10, 255, 104, 56, 7, 255, 110, 57, 1, 255, 112, 54, 3, 255, 100, 56, 3, 255, 101, 58, 9, 255, 126, 63, 13, 255, 122, 59, 1, 255, 100, 57, 4, 255, 101, 58, 7, 255, 119, 66, 9, 255, 102, 56, 9, 255, 86, 48, 8, 255, 100, 51, 5, 255, 104, 52, 4, 255, 113, 55, 7, 255, 138, 62, 10, 255, 137, 64, 5, 255, 141, 70, 5, 255, 131, 61, 1, 255, 114, 51, 9, 255, 107, 50, 8, 255, 111, 54, 7, 255, 107, 48, 7, 255, 105, 47, 7, 255, 107, 53, 4, 255, 103, 52, 5, 255, 98, 49, 7, 255, 99, 50, 9, 255, 103, 49, 4, 255, 100, 49, 6, 255, 98, 49, 10, 255, 91, 52, 8, 255, 95, 54, 6, 255, 100, 49, 8, 255, 100, 52, 4, 255, 95, 54, 3, 255, 101, 56, 12, 255, 104, 57, 5, 255, 104, 55, 10, 255, 103, 53, 9, 255, 98, 50, 3, 255, 102, 53, 4, 255, 99, 60, 2, 255, 90, 56, 5, 255, 89, 55, 13, 255, 86, 55, 9, 255, 78, 53, 2, 255, 84, 51, 10, 255, 82, 54, 8, 255, 98, 70, 10, 255, 85, 50, 16, 255, 82, 55, 11, 255, 80, 53, 10, 255, 77, 61, 13, 255, 94, 65, 12, 255, 129, 79, 14, 255, 137, 79, 14, 255, 135, 83, 12, 255, 152, 96, 16, 255, 168, 100, 16, 255, 176, 114, 20, 255, 204, 127, 23, 255, 207, 136, 12, 255, 206, 136, 5, 255, 203, 130, 5, 255, 206, 132, 10, 255, 208, 135, 13, 255, 206, 134, 6, 255, 212, 137, 17, 255, 213, 140, 5, 255, 215, 140, 3, 255, 210, 138, 6, 255, 211, 136, 5, 255, 215, 136, 8, 255, 210, 132, 5, 255, 210, 133, 3, 255, 213, 135, 5, 255, 208, 130, 4, 255, 205, 124, 2, 255, 201, 127, 9, 255, 192, 115, 10, 255, 192, 114, 14, 255, 185, 108, 2, 255, 178, 103, 4, 255, 179, 98, 24, 255, 183, 100, 8, 255, 188, 106, 8, 255, 180, 105, 8, 255, 175, 102, 5, 255, 185, 110, 10, 255, 194, 123, 7, 255, 203, 135, 4, 255, 202, 135, 8, 255, 197, 134, 2, 255, 197, 133, 6, 255, 202, 137, 9, 255, 199, 132, 10, 255, 204, 139, 14, 255, 203, 139, 5, 255, 203, 136, 6, 255, 204, 136, 13, 255, 203, 138, 10, 255, 201, 137, 3, 255, 205, 143, 12, 255, 203, 140, 15, 255, 202, 140, 11, 255, 200, 139, 10, 255, 199, 137, 8, 255, 200, 134, 9, 255, 201, 132, 12, 255, 197, 129, 12, 255, 199, 125, 16, 255, 199, 127, 8, 255, 199, 127, 8, 255, 200, 127, 8, 255, 199, 123, 4, 255, 199, 119, 9, 255, 199, 118, 11, 255, 199, 118, 9, 255, 202, 123, 7, 255, 198, 121, 10, 255, 176, 94, 14, 255, 160, 77, 4, 255, 170, 87, 8, 255, 178, 92, 12, 255, 175, 88, 8, 255, 174, 86, 4, 255, 171, 80, 1, 255, 169, 75, 5, 255, 167, 73, 9, 255, 170, 73, 6, 255, 171, 73, 5, 255, 159, 66, 0, 255, 169, 78, 5, 255, 178, 87, 8, 255, 171, 77, 5, 255, 166, 70, 5, 255, 161, 72, 3, 255, 157, 76, 4, 255, 154, 72, 5, 255, 146, 67, 3, 255, 127, 55, 3, 255, 151, 85, 6, 255, 189, 112, 8, 255, 178, 94, 6, 255, 152, 72, 4, 255, 126, 47, 12, 255, 137, 64, 2, 255, 142, 61, 6, 255, 162, 73, 5, 255, 174, 82, 3, 255, 168, 77, 1, 255, 176, 83, 0, 255, 184, 89, 2, 255, 185, 90, 5, 255, 185, 94, 9, 255, 183, 92, 2, 255, 190, 100, 3, 255, 199, 110, 5, 255, 202, 116, 3, 255, 197, 114, 2, 255, 193, 112, 6, 255, 195, 110, 4, 255, 198, 114, 5, 255, 196, 114, 6, 255, 196, 114, 8, 255, 195, 115, 5, 255, 197, 116, 3, 255, 197, 121, 4, 255, 197, 120, 3, 255, 200, 122, 6, 255, 198, 118, 14, 255, 177, 84, 5, 255, 161, 70, 5, 255, 155, 67, 6, 255, 148, 60, 1, 255, 143, 63, 4, 255, 141, 62, 6, 255, 133, 51, 1, 255, 132, 55, 1, 255, 137, 61, 1, 255, 141, 61, 2, 255, 136, 57, 2, 255, 135, 55, 1, 255, 127, 49, 0, 255, 128, 51, 3, 255, 133, 54, 6, 255, 133, 52, 1, 255, 121, 38, 4, 255, 124, 37, 6, 255, 131, 50, 7, 255, 138, 62, 3, 255, 143, 63, 0, 255, 142, 64, 0, 255, 140, 65, 5, 255, 137, 59, 3, 255, 145, 66, 4, 255, 144, 65, 1, 255, 147, 68, 2, 255, 148, 67, 1, 255, 152, 69, 3, 255, 161, 70, 3, 255, 175, 81, 8, 255, 185, 89, 4, 255, 186, 91, 3, 255, 183, 90, 3, 255, 182, 89, 1, 255, 178, 89, 1, 255, 177, 88, 1, 255, 178, 87, 3, 255, 178, 86, 2, 255, 175, 85, 2, 255, 176, 88, 6, 255, 175, 87, 5, 255, 176, 84, 4, 255, 176, 85, 6, 255, 173, 83, 3, 255, 173, 83, 3, 255, 176, 85, 4, 255, 171, 82, 1, 255, 167, 80, 2, 255, 167, 81, 3, 255, 167, 81, 3, 255, 167, 79, 2, 255, 166, 76, 1, 255, 163, 75, 3, 255, 157, 71, 0, 255, 162, 77, 4, 255, 162, 75, 4, 255, 160, 72, 2, 255, 155, 70, 0, 255, 155, 71, 1, 255, 156, 72, 1, 255, 166, 77, 4, 255, 164, 73, 0, 255, 167, 74, 1, 255, 0, 1, 16, 255, 2, 9, 30, 255, 1, 16, 34, 255, 0, 15, 39, 255, 3, 15, 35, 255, 0, 13, 28, 255, 3, 16, 41, 255, 1, 11, 17, 255, 2, 2, 3, 255, 0, 0, 16, 255, 2, 0, 10, 255, 1, 0, 0, 255, 0, 4, 71, 255, 24, 73, 227, 255, 70, 82, 70, 255, 27, 15, 0, 255, 39, 13, 26, 255, 34, 24, 167, 255, 3, 16, 75, 255, 19, 3, 0, 255, 15, 7, 2, 255, 8, 5, 6, 255, 16, 7, 8, 255, 21, 5, 5, 255, 17, 5, 4, 255, 14, 5, 3, 255, 17, 7, 5, 255, 20, 6, 5, 255, 18, 7, 5, 255, 15, 5, 1, 255, 21, 8, 3, 255, 26, 8, 2, 255, 26, 7, 1, 255, 35, 10, 4, 255, 39, 10, 3, 255, 35, 10, 4, 255, 35, 11, 3, 255, 41, 13, 3, 255, 41, 13, 3, 255, 39, 14, 6, 255, 36, 10, 3, 255, 40, 14, 4, 255, 32, 13, 1, 255, 34, 14, 4, 255, 46, 16, 6, 255, 57, 23, 2, 255, 69, 20, 2, 255, 75, 24, 4, 255, 71, 23, 1, 255, 69, 26, 2, 255, 57, 24, 3, 255, 54, 23, 2, 255, 51, 20, 5, 255, 44, 21, 2, 255, 45, 23, 0, 255, 50, 24, 3, 255, 55, 31, 3, 255, 54, 30, 1, 255, 58, 32, 3, 255, 67, 35, 2, 255, 68, 41, 2, 255, 70, 46, 5, 255, 72, 45, 4, 255, 79, 47, 6, 255, 83, 51, 2, 255, 71, 48, 1, 255, 88, 55, 4, 255, 89, 53, 5, 255, 83, 62, 5, 255, 143, 91, 8, 255, 159, 90, 5, 255, 164, 96, 3, 255, 163, 96, 4, 255, 148, 74, 2, 255, 100, 55, 0, 255, 77, 57, 3, 255, 83, 54, 2, 255, 89, 56, 3, 255, 90, 56, 3, 255, 88, 56, 2, 255, 95, 57, 2, 255, 85, 58, 1, 255, 83, 56, 6, 255, 88, 59, 4, 255, 87, 57, 2, 255, 90, 59, 4, 255, 79, 51, 1, 255, 94, 64, 12, 255, 156, 105, 9, 255, 194, 114, 3, 255, 189, 94, 5, 255, 181, 91, 7, 255, 179, 79, 1, 255, 175, 80, 4, 255, 170, 83, 3, 255, 170, 80, 1, 255, 162, 73, 3, 255, 149, 69, 0, 255, 128, 65, 7, 255, 107, 62, 7, 255, 84, 48, 1, 255, 85, 51, 2, 255, 82, 51, 4, 255, 86, 51, 7, 255, 94, 53, 5, 255, 90, 56, 1, 255, 98, 56, 4, 255, 100, 56, 6, 255, 98, 54, 3, 255, 99, 54, 2, 255, 101, 54, 2, 255, 98, 53, 1, 255, 96, 55, 3, 255, 95, 56, 4, 255, 93, 50, 1, 255, 98, 52, 9, 255, 92, 49, 4, 255, 90, 50, 1, 255, 94, 51, 1, 255, 98, 51, 1, 255, 99, 52, 3, 255, 101, 54, 4, 255, 103, 52, 4, 255, 102, 51, 4, 255, 90, 48, 0, 255, 84, 50, 0, 255, 81, 50, 3, 255, 76, 48, 4, 255, 81, 47, 6, 255, 78, 46, 2, 255, 82, 51, 4, 255, 84, 47, 3, 255, 89, 47, 5, 255, 91, 52, 6, 255, 86, 45, 1, 255, 83, 47, 3, 255, 83, 50, 4, 255, 88, 47, 5, 255, 87, 42, 3, 255, 85, 42, 1, 255, 83, 40, 3, 255, 79, 43, 7, 255, 76, 40, 4, 255, 83, 46, 1, 255, 89, 48, 2, 255, 95, 49, 8, 255, 93, 49, 6, 255, 98, 49, 3, 255, 100, 53, 7, 255, 105, 57, 6, 255, 107, 57, 4, 255, 102, 51, 4, 255, 103, 56, 4, 255, 105, 55, 0, 255, 107, 45, 10, 255, 105, 47, 11, 255, 107, 52, 2, 255, 113, 52, 7, 255, 104, 53, 1, 255, 105, 56, 3, 255, 106, 54, 4, 255, 114, 59, 5, 255, 109, 56, 6, 255, 101, 54, 7, 255, 102, 54, 6, 255, 106, 55, 3, 255, 101, 54, 5, 255, 106, 57, 7, 255, 105, 59, 4, 255, 116, 53, 9, 255, 111, 56, 8, 255, 105, 56, 3, 255, 109, 58, 2, 255, 111, 56, 7, 255, 101, 55, 7, 255, 103, 55, 8, 255, 99, 55, 9, 255, 95, 50, 13, 255, 83, 50, 11, 255, 98, 55, 17, 255, 139, 69, 15, 255, 156, 70, 5, 255, 140, 60, 7, 255, 126, 58, 3, 255, 119, 52, 1, 255, 121, 58, 5, 255, 125, 59, 8, 255, 132, 56, 6, 255, 127, 61, 3, 255, 128, 60, 5, 255, 127, 58, 9, 255, 112, 53, 10, 255, 110, 51, 7, 255, 102, 53, 5, 255, 95, 48, 6, 255, 87, 47, 6, 255, 96, 51, 6, 255, 97, 52, 6, 255, 90, 49, 8, 255, 92, 54, 8, 255, 90, 55, 16, 255, 95, 57, 7, 255, 101, 55, 4, 255, 99, 49, 4, 255, 103, 55, 9, 255, 97, 57, 5, 255, 92, 54, 4, 255, 107, 60, 8, 255, 95, 58, 4, 255, 92, 53, 5, 255, 89, 53, 3, 255, 87, 58, 7, 255, 96, 60, 11, 255, 137, 82, 5, 255, 131, 81, 9, 255, 137, 85, 10, 255, 142, 84, 22, 255, 147, 84, 13, 255, 168, 94, 11, 255, 164, 96, 14, 255, 179, 112, 17, 255, 195, 124, 13, 255, 203, 127, 10, 255, 206, 131, 6, 255, 207, 136, 12, 255, 203, 139, 11, 255, 204, 136, 8, 255, 209, 134, 11, 255, 201, 134, 7, 255, 208, 136, 17, 255, 213, 136, 22, 255, 212, 136, 11, 255, 209, 136, 18, 255, 212, 140, 15, 255, 212, 137, 6, 255, 211, 135, 7, 255, 216, 135, 12, 255, 208, 135, 1, 255, 210, 135, 5, 255, 211, 133, 7, 255, 211, 132, 13, 255, 195, 112, 9, 255, 196, 114, 1, 255, 202, 125, 10, 255, 196, 114, 10, 255, 200, 120, 8, 255, 196, 118, 14, 255, 178, 99, 11, 255, 169, 88, 4, 255, 174, 88, 3, 255, 174, 94, 4, 255, 176, 103, 9, 255, 171, 101, 4, 255, 196, 123, 9, 255, 204, 137, 1, 255, 202, 137, 8, 255, 205, 137, 16, 255, 203, 140, 3, 255, 203, 141, 8, 255, 205, 141, 8, 255, 202, 137, 8, 255, 204, 142, 10, 255, 202, 137, 5, 255, 200, 133, 3, 255, 203, 136, 6, 255, 206, 138, 11, 255, 206, 139, 15, 255, 204, 139, 13, 255, 205, 141, 10, 255, 205, 143, 9, 255, 204, 142, 9, 255, 206, 142, 13, 255, 205, 137, 14, 255, 203, 132, 15, 255, 196, 126, 13, 255, 199, 127, 13, 255, 201, 130, 6, 255, 199, 127, 12, 255, 199, 125, 11, 255, 197, 122, 5, 255, 197, 119, 10, 255, 200, 121, 11, 255, 198, 119, 5, 255, 199, 119, 2, 255, 188, 105, 11, 255, 171, 85, 10, 255, 175, 90, 12, 255, 174, 89, 7, 255, 176, 86, 7, 255, 177, 86, 7, 255, 176, 84, 6, 255, 169, 77, 4, 255, 167, 74, 4, 255, 167, 74, 5, 255, 167, 72, 6, 255, 162, 66, 6, 255, 158, 64, 1, 255, 170, 80, 3, 255, 169, 79, 2, 255, 169, 71, 8, 255, 167, 66, 10, 255, 150, 62, 7, 255, 138, 59, 3, 255, 146, 67, 1, 255, 144, 70, 4, 255, 140, 73, 13, 255, 121, 56, 2, 255, 139, 66, 5, 255, 166, 79, 5, 255, 172, 81, 7, 255, 137, 60, 6, 255, 105, 43, 5, 255, 103, 45, 1, 255, 117, 46, 2, 255, 135, 55, 5, 255, 142, 64, 6, 255, 148, 63, 4, 255, 160, 68, 3, 255, 174, 80, 4, 255, 180, 87, 3, 255, 189, 100, 3, 255, 194, 104, 8, 255, 188, 96, 2, 255, 190, 98, 6, 255, 194, 106, 8, 255, 200, 117, 5, 255, 201, 117, 4, 255, 198, 116, 3, 255, 195, 119, 1, 255, 195, 118, 5, 255, 194, 116, 10, 255, 194, 116, 7, 255, 196, 119, 3, 255, 195, 116, 3, 255, 197, 117, 0, 255, 193, 111, 5, 255, 160, 77, 8, 255, 148, 63, 5, 255, 149, 65, 2, 255, 149, 68, 5, 255, 143, 65, 3, 255, 141, 62, 5, 255, 139, 58, 3, 255, 135, 57, 2, 255, 137, 59, 2, 255, 140, 59, 3, 255, 137, 60, 6, 255, 133, 53, 2, 255, 130, 51, 4, 255, 126, 50, 6, 255, 124, 49, 1, 255, 131, 56, 2, 255, 121, 47, 4, 255, 124, 47, 5, 255, 125, 52, 3, 255, 128, 57, 0, 255, 148, 67, 11, 255, 149, 67, 5, 255, 147, 70, 3, 255, 150, 70, 4, 255, 153, 67, 1, 255, 156, 70, 0, 255, 151, 69, 0, 255, 149, 68, 2, 255, 148, 63, 1, 255, 160, 68, 3, 255, 170, 76, 2, 255, 173, 78, 0, 255, 178, 85, 4, 255, 175, 85, 1, 255, 174, 85, 1, 255, 171, 83, 2, 255, 170, 83, 2, 255, 171, 84, 4, 255, 172, 83, 3, 255, 170, 81, 1, 255, 173, 84, 4, 255, 172, 84, 2, 255, 173, 84, 1, 255, 170, 81, 2, 255, 165, 78, 1, 255, 164, 78, 2, 255, 164, 78, 1, 255, 161, 75, 0, 255, 157, 74, 1, 255, 157, 74, 2, 255, 159, 74, 3, 255, 162, 75, 3, 255, 165, 77, 3, 255, 161, 75, 2, 255, 157, 71, 0, 255, 157, 71, 0, 255, 155, 70, 2, 255, 152, 67, 2, 255, 148, 65, 0, 255, 151, 67, 2, 255, 150, 67, 1, 255, 154, 69, 1, 255, 160, 72, 2, 255, 167, 75, 4, 255, 2, 9, 27, 255, 0, 1, 13, 255, 1, 9, 29, 255, 4, 17, 36, 255, 2, 15, 32, 255, 2, 16, 30, 255, 4, 6, 22, 255, 3, 0, 6, 255, 2, 0, 3, 255, 0, 2, 19, 255, 8, 0, 6, 255, 1, 0, 48, 255, 16, 45, 221, 255, 72, 77, 94, 255, 37, 22, 0, 255, 28, 9, 6, 255, 33, 29, 147, 255, 6, 17, 94, 255, 18, 0, 0, 255, 9, 5, 2, 255, 13, 6, 3, 255, 22, 5, 4, 255, 17, 5, 2, 255, 19, 8, 2, 255, 26, 7, 5, 255, 18, 5, 7, 255, 14, 5, 2, 255, 18, 7, 5, 255, 19, 7, 6, 255, 18, 6, 3, 255, 23, 10, 4, 255, 31, 11, 5, 255, 28, 13, 4, 255, 31, 9, 2, 255, 37, 10, 3, 255, 37, 10, 2, 255, 39, 13, 5, 255, 44, 12, 4, 255, 41, 12, 5, 255, 35, 9, 3, 255, 37, 12, 3, 255, 32, 11, 0, 255, 36, 17, 4, 255, 37, 11, 2, 255, 53, 17, 6, 255, 67, 23, 5, 255, 76, 26, 4, 255, 80, 25, 2, 255, 88, 25, 5, 255, 63, 28, 3, 255, 50, 26, 3, 255, 53, 22, 1, 255, 49, 21, 0, 255, 39, 22, 2, 255, 52, 29, 2, 255, 60, 31, 5, 255, 55, 30, 5, 255, 56, 32, 2, 255, 62, 39, 6, 255, 69, 38, 1, 255, 72, 42, 0, 255, 68, 46, 2, 255, 68, 43, 1, 255, 78, 46, 2, 255, 77, 53, 1, 255, 84, 54, 4, 255, 101, 54, 7, 255, 73, 53, 4, 255, 121, 81, 7, 255, 157, 90, 5, 255, 165, 96, 8, 255, 164, 101, 4, 255, 153, 81, 6, 255, 113, 51, 4, 255, 87, 55, 4, 255, 80, 57, 5, 255, 89, 59, 3, 255, 92, 57, 4, 255, 89, 53, 0, 255, 88, 59, 8, 255, 88, 54, 9, 255, 83, 50, 2, 255, 82, 58, 1, 255, 92, 59, 6, 255, 80, 51, 6, 255, 77, 55, 4, 255, 122, 86, 5, 255, 175, 111, 7, 255, 185, 103, 4, 255, 176, 90, 1, 255, 182, 89, 3, 255, 179, 90, 5, 255, 172, 82, 3, 255, 170, 80, 3, 255, 160, 72, 4, 255, 143, 72, 5, 255, 107, 61, 6, 255, 99, 52, 4, 255, 87, 46, 3, 255, 79, 48, 9, 255, 77, 54, 4, 255, 86, 52, 3, 255, 91, 51, 4, 255, 94, 56, 0, 255, 99, 58, 7, 255, 97, 50, 7, 255, 94, 55, 5, 255, 95, 57, 4, 255, 97, 55, 3, 255, 100, 55, 5, 255, 102, 52, 2, 255, 101, 52, 1, 255, 97, 54, 3, 255, 94, 52, 5, 255, 94, 53, 4, 255, 95, 53, 1, 255, 97, 52, 4, 255, 102, 52, 6, 255, 97, 52, 5, 255, 91, 49, 3, 255, 93, 50, 5, 255, 95, 53, 6, 255, 91, 48, 1, 255, 93, 50, 3, 255, 89, 48, 2, 255, 85, 49, 1, 255, 85, 52, 6, 255, 79, 45, 6, 255, 82, 49, 8, 255, 80, 48, 5, 255, 82, 46, 2, 255, 88, 47, 4, 255, 91, 49, 5, 255, 89, 49, 3, 255, 93, 49, 4, 255, 83, 48, 3, 255, 82, 51, 2, 255, 97, 49, 3, 255, 101, 46, 2, 255, 96, 46, 5, 255, 92, 48, 7, 255, 86, 42, 9, 255, 94, 44, 10, 255, 102, 56, 7, 255, 100, 52, 3, 255, 105, 56, 8, 255, 105, 52, 4, 255, 98, 55, 2, 255, 97, 54, 6, 255, 102, 54, 6, 255, 102, 56, 1, 255, 99, 51, 1, 255, 109, 58, 9, 255, 106, 53, 3, 255, 106, 53, 4, 255, 106, 56, 6, 255, 99, 54, 9, 255, 100, 54, 9, 255, 101, 55, 2, 255, 106, 55, 6, 255, 104, 57, 8, 255, 107, 55, 5, 255, 105, 56, 2, 255, 100, 51, 4, 255, 107, 54, 4, 255, 107, 52, 9, 255, 110, 55, 9, 255, 108, 57, 2, 255, 109, 52, 6, 255, 108, 59, 5, 255, 107, 60, 14, 255, 109, 57, 5, 255, 106, 54, 10, 255, 104, 53, 7, 255, 108, 57, 7, 255, 110, 54, 2, 255, 111, 52, 7, 255, 113, 54, 8, 255, 106, 53, 5, 255, 95, 51, 10, 255, 116, 57, 6, 255, 147, 70, 5, 255, 151, 73, 4, 255, 147, 66, 9, 255, 144, 64, 6, 255, 145, 67, 4, 255, 155, 68, 2, 255, 159, 69, 7, 255, 158, 70, 10, 255, 157, 70, 3, 255, 150, 66, 3, 255, 140, 58, 10, 255, 125, 59, 6, 255, 108, 56, 2, 255, 100, 52, 10, 255, 95, 51, 12, 255, 94, 49, 3, 255, 90, 52, 2, 255, 87, 51, 14, 255, 98, 47, 9, 255, 93, 51, 6, 255, 97, 58, 3, 255, 97, 52, 4, 255, 88, 48, 8, 255, 97, 52, 7, 255, 96, 59, 8, 255, 101, 52, 9, 255, 105, 50, 4, 255, 97, 55, 4, 255, 90, 58, 7, 255, 97, 60, 8, 255, 88, 56, 9, 255, 96, 60, 13, 255, 147, 94, 16, 255, 158, 97, 12, 255, 177, 109, 12, 255, 174, 101, 11, 255, 190, 113, 11, 255, 191, 121, 16, 255, 197, 130, 14, 255, 201, 132, 9, 255, 204, 131, 10, 255, 207, 131, 13, 255, 207, 134, 10, 255, 207, 135, 9, 255, 205, 137, 11, 255, 201, 122, 19, 255, 197, 123, 14, 255, 207, 140, 16, 255, 215, 143, 14, 255, 211, 139, 5, 255, 211, 140, 9, 255, 216, 136, 20, 255, 218, 137, 9, 255, 214, 135, 5, 255, 217, 136, 12, 255, 213, 138, 12, 255, 208, 134, 3, 255, 209, 135, 5, 255, 210, 133, 5, 255, 201, 120, 5, 255, 206, 123, 9, 255, 210, 129, 9, 255, 206, 126, 6, 255, 201, 119, 15, 255, 207, 127, 10, 255, 213, 135, 13, 255, 177, 95, 6, 255, 165, 79, 6, 255, 172, 91, 3, 255, 170, 96, 3, 255, 172, 103, 9, 255, 183, 116, 8, 255, 201, 134, 5, 255, 204, 137, 10, 255, 205, 139, 11, 255, 208, 142, 11, 255, 205, 142, 7, 255, 204, 143, 10, 255, 201, 138, 10, 255, 207, 144, 10, 255, 204, 141, 13, 255, 198, 133, 12, 255, 193, 126, 5, 255, 195, 126, 5, 255, 203, 135, 10, 255, 208, 140, 12, 255, 205, 137, 7, 255, 208, 140, 9, 255, 205, 138, 4, 255, 200, 135, 7, 255, 200, 134, 10, 255, 201, 130, 16, 255, 200, 128, 17, 255, 197, 124, 16, 255, 197, 124, 9, 255, 199, 125, 3, 255, 200, 125, 12, 255, 199, 123, 18, 255, 197, 121, 15, 255, 195, 119, 10, 255, 199, 121, 11, 255, 201, 122, 13, 255, 199, 118, 9, 255, 184, 101, 6, 255, 185, 99, 10, 255, 181, 99, 0, 255, 175, 88, 4, 255, 174, 84, 3, 255, 184, 92, 10, 255, 175, 82, 2, 255, 174, 81, 2, 255, 168, 77, 0, 255, 167, 75, 0, 255, 166, 75, 2, 255, 160, 67, 1, 255, 160, 65, 1, 255, 166, 72, 5, 255, 169, 77, 6, 255, 163, 72, 0, 255, 164, 73, 0, 255, 156, 64, 0, 255, 148, 63, 7, 255, 149, 68, 8, 255, 147, 67, 2, 255, 130, 61, 2, 255, 121, 56, 5, 255, 125, 54, 3, 255, 130, 58, 4, 255, 140, 68, 5, 255, 136, 65, 3, 255, 125, 57, 3, 255, 119, 49, 9, 255, 109, 45, 3, 255, 111, 48, 2, 255, 118, 54, 4, 255, 125, 54, 10, 255, 141, 59, 5, 255, 156, 69, 0, 255, 161, 71, 3, 255, 181, 94, 4, 255, 196, 109, 7, 255, 185, 94, 0, 255, 177, 84, 0, 255, 173, 82, 0, 255, 181, 91, 3, 255, 192, 104, 7, 255, 196, 115, 3, 255, 193, 119, 0, 255, 193, 117, 2, 255, 194, 114, 6, 255, 191, 113, 5, 255, 191, 111, 5, 255, 192, 109, 6, 255, 191, 109, 2, 255, 189, 103, 5, 255, 147, 64, 6, 255, 135, 57, 3, 255, 141, 62, 4, 255, 143, 63, 2, 255, 141, 63, 1, 255, 143, 64, 2, 255, 143, 65, 3, 255, 139, 62, 5, 255, 138, 55, 6, 255, 139, 54, 5, 255, 134, 51, 1, 255, 131, 50, 2, 255, 131, 50, 8, 255, 119, 41, 0, 255, 132, 55, 7, 255, 132, 55, 5, 255, 130, 53, 1, 255, 129, 50, 0, 255, 118, 41, 6, 255, 115, 39, 5, 255, 144, 65, 6, 255, 151, 68, 7, 255, 155, 68, 3, 255, 160, 73, 1, 255, 158, 76, 1, 255, 160, 76, 2, 255, 159, 72, 4, 255, 150, 68, 3, 255, 150, 67, 4, 255, 162, 73, 3, 255, 171, 81, 1, 255, 174, 81, 3, 255, 171, 79, 3, 255, 169, 79, 2, 255, 166, 78, 4, 255, 163, 78, 1, 255, 164, 80, 1, 255, 165, 78, 0, 255, 167, 77, 2, 255, 168, 78, 1, 255, 172, 80, 4, 255, 170, 80, 1, 255, 166, 80, 2, 255, 162, 76, 1, 255, 158, 74, 3, 255, 156, 73, 4, 255, 151, 68, 2, 255, 152, 68, 3, 255, 148, 69, 2, 255, 150, 69, 2, 255, 151, 68, 2, 255, 157, 72, 1, 255, 167, 78, 5, 255, 166, 77, 3, 255, 162, 73, 5, 255, 154, 66, 3, 255, 149, 65, 2, 255, 145, 61, 1, 255, 146, 61, 4, 255, 147, 62, 4, 255, 147, 62, 2, 255, 153, 69, 2, 255, 160, 72, 5, 255, 161, 70, 2, 255, 19, 65, 117, 255, 3, 21, 33, 255, 2, 6, 9, 255, 3, 9, 18, 255, 2, 12, 33, 255, 4, 12, 30, 255, 2, 1, 7, 255, 2, 0, 5, 255, 1, 2, 6, 255, 2, 3, 5, 255, 1, 0, 26, 255, 10, 37, 216, 255, 73, 85, 121, 255, 52, 32, 0, 255, 27, 10, 0, 255, 29, 28, 110, 255, 6, 22, 122, 255, 18, 2, 0, 255, 14, 5, 6, 255, 12, 5, 3, 255, 15, 5, 4, 255, 18, 5, 4, 255, 18, 6, 5, 255, 16, 5, 4, 255, 16, 5, 2, 255, 18, 8, 4, 255, 17, 9, 7, 255, 19, 6, 3, 255, 23, 8, 4, 255, 26, 9, 7, 255, 27, 9, 4, 255, 31, 9, 3, 255, 33, 8, 2, 255, 38, 9, 5, 255, 44, 14, 8, 255, 44, 13, 4, 255, 43, 13, 2, 255, 47, 13, 4, 255, 44, 15, 7, 255, 41, 16, 7, 255, 39, 13, 2, 255, 35, 14, 1, 255, 46, 17, 5, 255, 63, 19, 4, 255, 69, 26, 3, 255, 81, 24, 2, 255, 88, 24, 5, 255, 88, 23, 4, 255, 87, 23, 4, 255, 61, 22, 1, 255, 46, 24, 4, 255, 51, 24, 4, 255, 48, 23, 1, 255, 48, 25, 3, 255, 61, 30, 8, 255, 59, 25, 2, 255, 58, 30, 3, 255, 58, 34, 2, 255, 69, 40, 6, 255, 72, 38, 2, 255, 73, 41, 3, 255, 71, 45, 4, 255, 77, 47, 4, 255, 70, 47, 1, 255, 77, 53, 1, 255, 90, 62, 6, 255, 78, 54, 10, 255, 91, 68, 5, 255, 143, 88, 7, 255, 151, 94, 3, 255, 161, 97, 5, 255, 151, 79, 6, 255, 127, 59, 0, 255, 92, 49, 4, 255, 83, 55, 8, 255, 86, 57, 3, 255, 89, 58, 6, 255, 88, 60, 9, 255, 83, 60, 4, 255, 86, 58, 2, 255, 88, 53, 5, 255, 90, 59, 0, 255, 83, 59, 6, 255, 75, 51, 5, 255, 96, 70, 7, 255, 158, 101, 11, 255, 193, 113, 1, 255, 177, 93, 4, 255, 176, 85, 4, 255, 179, 92, 3, 255, 180, 97, 2, 255, 176, 85, 3, 255, 158, 78, 12, 255, 118, 65, 3, 255, 87, 54, 4, 255, 81, 51, 3, 255, 82, 46, 3, 255, 79, 49, 6, 255, 82, 50, 9, 255, 83, 48, 4, 255, 83, 52, 4, 255, 87, 53, 5, 255, 94, 53, 6, 255, 90, 59, 3, 255, 91, 55, 3, 255, 97, 54, 7, 255, 93, 57, 3, 255, 94, 55, 4, 255, 96, 58, 2, 255, 94, 57, 3, 255, 101, 53, 4, 255, 95, 51, 2, 255, 91, 56, 3, 255, 94, 54, 5, 255, 97, 52, 5, 255, 98, 52, 3, 255, 98, 53, 8, 255, 90, 49, 6, 255, 83, 48, 2, 255, 92, 48, 3, 255, 103, 52, 8, 255, 89, 49, 3, 255, 89, 50, 6, 255, 89, 49, 2, 255, 92, 51, 5, 255, 87, 48, 3, 255, 88, 49, 1, 255, 90, 49, 6, 255, 85, 50, 3, 255, 82, 46, 2, 255, 85, 48, 4, 255, 89, 52, 5, 255, 92, 55, 7, 255, 88, 50, 8, 255, 87, 50, 7, 255, 81, 50, 4, 255, 93, 52, 5, 255, 115, 55, 8, 255, 117, 55, 2, 255, 105, 48, 4, 255, 101, 54, 0, 255, 92, 47, 4, 255, 101, 53, 9, 255, 115, 54, 5, 255, 116, 57, 4, 255, 113, 56, 3, 255, 100, 50, 7, 255, 100, 53, 8, 255, 99, 53, 1, 255, 108, 55, 8, 255, 106, 56, 7, 255, 106, 57, 7, 255, 104, 52, 4, 255, 105, 56, 1, 255, 105, 56, 3, 255, 101, 52, 5, 255, 99, 53, 5, 255, 101, 56, 6, 255, 106, 57, 8, 255, 107, 57, 6, 255, 107, 56, 6, 255, 108, 57, 6, 255, 109, 56, 8, 255, 112, 59, 6, 255, 109, 59, 1, 255, 108, 58, 7, 255, 113, 55, 7, 255, 110, 59, 8, 255, 106, 51, 5, 255, 105, 56, 3, 255, 121, 66, 9, 255, 113, 57, 6, 255, 109, 56, 5, 255, 105, 57, 4, 255, 108, 57, 9, 255, 108, 60, 4, 255, 111, 63, 3, 255, 111, 61, 8, 255, 111, 60, 6, 255, 106, 61, 4, 255, 111, 52, 8, 255, 134, 55, 14, 255, 163, 74, 7, 255, 162, 71, 6, 255, 161, 74, 3, 255, 161, 69, 5, 255, 163, 70, 6, 255, 164, 71, 3, 255, 166, 73, 1, 255, 163, 69, 7, 255, 154, 66, 3, 255, 151, 68, 6, 255, 149, 72, 2, 255, 137, 64, 8, 255, 117, 55, 14, 255, 105, 56, 7, 255, 95, 53, 3, 255, 90, 48, 7, 255, 90, 55, 9, 255, 97, 58, 4, 255, 97, 52, 3, 255, 92, 54, 10, 255, 98, 59, 8, 255, 106, 60, 12, 255, 97, 55, 8, 255, 98, 55, 10, 255, 105, 67, 9, 255, 95, 54, 14, 255, 126, 81, 8, 255, 136, 84, 9, 255, 148, 90, 14, 255, 151, 92, 23, 255, 166, 106, 18, 255, 179, 113, 10, 255, 182, 107, 17, 255, 190, 116, 17, 255, 195, 123, 18, 255, 204, 136, 15, 255, 205, 132, 7, 255, 206, 131, 7, 255, 205, 130, 15, 255, 205, 135, 14, 255, 208, 136, 7, 255, 209, 134, 11, 255, 208, 135, 11, 255, 212, 139, 13, 255, 203, 131, 8, 255, 204, 132, 12, 255, 215, 144, 13, 255, 210, 139, 8, 255, 204, 133, 6, 255, 203, 130, 10, 255, 207, 132, 15, 255, 214, 140, 9, 255, 212, 138, 9, 255, 210, 140, 6, 255, 207, 138, 9, 255, 211, 137, 4, 255, 214, 138, 3, 255, 213, 134, 12, 255, 207, 125, 11, 255, 208, 129, 1, 255, 210, 132, 4, 255, 207, 128, 2, 255, 208, 135, 3, 255, 206, 134, 11, 255, 205, 126, 13, 255, 173, 87, 6, 255, 160, 84, 11, 255, 171, 104, 13, 255, 183, 116, 12, 255, 175, 105, 12, 255, 192, 124, 8, 255, 204, 138, 8, 255, 203, 138, 9, 255, 209, 142, 12, 255, 206, 141, 10, 255, 206, 144, 14, 255, 203, 144, 7, 255, 205, 144, 15, 255, 206, 144, 9, 255, 200, 134, 7, 255, 199, 130, 12, 255, 195, 125, 11, 255, 196, 127, 11, 255, 201, 132, 8, 255, 203, 135, 5, 255, 205, 135, 7, 255, 204, 133, 11, 255, 202, 129, 8, 255, 199, 127, 10, 255, 201, 128, 9, 255, 202, 129, 12, 255, 198, 126, 6, 255, 199, 123, 14, 255, 198, 124, 7, 255, 196, 121, 9, 255, 200, 121, 12, 255, 197, 119, 8, 255, 196, 118, 10, 255, 198, 123, 6, 255, 198, 119, 12, 255, 199, 117, 12, 255, 195, 111, 10, 255, 189, 108, 3, 255, 188, 106, 5, 255, 182, 99, 4, 255, 180, 92, 3, 255, 177, 89, 6, 255, 183, 93, 13, 255, 177, 86, 4, 255, 177, 85, 3, 255, 180, 89, 5, 255, 172, 80, 7, 255, 164, 73, 2, 255, 161, 71, 2, 255, 159, 68, 1, 255, 160, 67, 4, 255, 169, 76, 6, 255, 174, 82, 4, 255, 170, 81, 0, 255, 157, 65, 1, 255, 149, 60, 6, 255, 151, 66, 6, 255, 151, 69, 0, 255, 142, 69, 4, 255, 138, 71, 11, 255, 123, 55, 6, 255, 111, 49, 7, 255, 145, 71, 8, 255, 169, 90, 4, 255, 150, 75, 3, 255, 143, 63, 4, 255, 138, 60, 3, 255, 129, 57, 5, 255, 125, 56, 6, 255, 132, 59, 4, 255, 135, 56, 1, 255, 137, 61, 0, 255, 137, 62, 6, 255, 161, 76, 4, 255, 187, 100, 1, 255, 194, 104, 6, 255, 182, 93, 3, 255, 172, 83, 2, 255, 170, 75, 4, 255, 171, 75, 10, 255, 174, 84, 5, 255, 181, 99, 3, 255, 185, 103, 3, 255, 190, 103, 4, 255, 188, 100, 4, 255, 187, 99, 5, 255, 187, 100, 3, 255, 192, 105, 4, 255, 181, 93, 2, 255, 148, 61, 10, 255, 136, 60, 8, 255, 143, 67, 1, 255, 146, 68, 1, 255, 145, 65, 3, 255, 147, 66, 5, 255, 141, 65, 1, 255, 136, 61, 4, 255, 136, 56, 6, 255, 132, 49, 5, 255, 131, 51, 4, 255, 131, 59, 2, 255, 123, 50, 4, 255, 122, 47, 2, 255, 132, 56, 6, 255, 130, 54, 2, 255, 130, 53, 3, 255, 127, 49, 7, 255, 119, 43, 5, 255, 118, 43, 6, 255, 131, 53, 2, 255, 152, 67, 4, 255, 159, 72, 0, 255, 160, 71, 2, 255, 151, 73, 2, 255, 148, 72, 2, 255, 151, 71, 2, 255, 145, 66, 1, 255, 152, 65, 6, 255, 161, 74, 5, 255, 166, 76, 3, 255, 170, 77, 1, 255, 167, 74, 1, 255, 164, 72, 4, 255, 160, 72, 2, 255, 152, 70, 1, 255, 148, 64, 0, 255, 154, 69, 2, 255, 156, 71, 5, 255, 154, 69, 2, 255, 159, 73, 3, 255, 159, 72, 0, 255, 160, 73, 2, 255, 155, 69, 3, 255, 145, 62, 0, 255, 142, 62, 0, 255, 148, 67, 4, 255, 146, 65, 3, 255, 136, 63, 1, 255, 138, 62, 2, 255, 143, 60, 1, 255, 156, 68, 5, 255, 162, 72, 6, 255, 160, 67, 1, 255, 154, 64, 3, 255, 151, 61, 2, 255, 142, 62, 0, 255, 139, 60, 0, 255, 142, 60, 4, 255, 138, 62, 4, 255, 140, 60, 2, 255, 144, 62, 1, 255, 148, 66, 3, 255, 145, 62, 1, 255, 35, 76, 133, 255, 12, 50, 82, 255, 0, 7, 25, 255, 3, 15, 28, 255, 3, 7, 23, 255, 1, 1, 12, 255, 2, 0, 3, 255, 4, 2, 10, 255, 1, 2, 3, 255, 1, 0, 19, 255, 2, 25, 190, 255, 69, 90, 144, 255, 57, 45, 3, 255, 19, 6, 0, 255, 34, 23, 86, 255, 6, 23, 148, 255, 11, 3, 11, 255, 18, 3, 12, 255, 13, 5, 11, 255, 14, 4, 2, 255, 23, 9, 6, 255, 23, 9, 7, 255, 19, 8, 5, 255, 16, 8, 5, 255, 16, 7, 4, 255, 15, 9, 5, 255, 21, 8, 7, 255, 31, 7, 3, 255, 30, 8, 0, 255, 36, 14, 4, 255, 34, 12, 5, 255, 24, 8, 1, 255, 34, 11, 3, 255, 44, 15, 3, 255, 49, 12, 1, 255, 49, 11, 4, 255, 47, 11, 3, 255, 47, 17, 4, 255, 50, 17, 4, 255, 38, 12, 3, 255, 41, 14, 6, 255, 46, 13, 4, 255, 54, 19, 4, 255, 55, 22, 3, 255, 62, 30, 1, 255, 116, 40, 3, 255, 112, 33, 3, 255, 103, 37, 10, 255, 71, 28, 3, 255, 52, 21, 1, 255, 50, 24, 3, 255, 44, 24, 1, 255, 51, 30, 6, 255, 53, 27, 3, 255, 54, 27, 2, 255, 52, 30, 0, 255, 51, 34, 1, 255, 58, 43, 3, 255, 69, 38, 4, 255, 77, 41, 7, 255, 69, 43, 8, 255, 75, 45, 4, 255, 80, 48, 4, 255, 78, 44, 3, 255, 94, 55, 9, 255, 82, 52, 3, 255, 73, 57, 0, 255, 141, 88, 12, 255, 153, 89, 6, 255, 159, 101, 4, 255, 158, 91, 0, 255, 130, 60, 5, 255, 99, 51, 8, 255, 76, 52, 3, 255, 80, 55, 2, 255, 83, 58, 4, 255, 85, 58, 2, 255, 83, 56, 2, 255, 84, 58, 6, 255, 90, 56, 4, 255, 92, 59, 9, 255, 72, 52, 5, 255, 65, 52, 6, 255, 123, 91, 8, 255, 183, 114, 8, 255, 189, 99, 4, 255, 167, 83, 5, 255, 175, 83, 13, 255, 178, 88, 3, 255, 177, 93, 1, 255, 169, 87, 1, 255, 127, 71, 4, 255, 89, 53, 8, 255, 78, 49, 8, 255, 74, 48, 6, 255, 76, 53, 4, 255, 83, 52, 6, 255, 84, 51, 1, 255, 89, 54, 2, 255, 88, 50, 3, 255, 92, 53, 6, 255, 94, 55, 3, 255, 96, 57, 1, 255, 94, 60, 3, 255, 94, 56, 2, 255, 102, 54, 3, 255, 98, 54, 2, 255, 95, 52, 1, 255, 96, 59, 9, 255, 91, 56, 2, 255, 93, 53, 3, 255, 94, 49, 10, 255, 95, 51, 11, 255, 92, 52, 3, 255, 94, 53, 3, 255, 90, 52, 4, 255, 85, 50, 0, 255, 92, 52, 2, 255, 93, 57, 2, 255, 104, 60, 3, 255, 108, 58, 2, 255, 98, 54, 2, 255, 94, 53, 9, 255, 91, 52, 4, 255, 88, 51, 3, 255, 87, 50, 10, 255, 89, 49, 5, 255, 91, 48, 2, 255, 91, 54, 5, 255, 90, 52, 4, 255, 90, 49, 2, 255, 98, 56, 7, 255, 96, 53, 4, 255, 94, 50, 3, 255, 89, 51, 6, 255, 99, 53, 5, 255, 114, 58, 4, 255, 120, 57, 2, 255, 126, 58, 7, 255, 106, 45, 10, 255, 104, 48, 3, 255, 99, 50, 6, 255, 98, 46, 5, 255, 107, 50, 4, 255, 116, 57, 10, 255, 109, 56, 6, 255, 100, 54, 7, 255, 109, 58, 6, 255, 119, 61, 1, 255, 121, 56, 2, 255, 105, 55, 6, 255, 96, 56, 8, 255, 108, 57, 9, 255, 112, 61, 6, 255, 100, 57, 5, 255, 103, 58, 5, 255, 110, 58, 2, 255, 111, 60, 2, 255, 103, 60, 3, 255, 103, 58, 4, 255, 110, 61, 4, 255, 111, 61, 5, 255, 111, 60, 4, 255, 111, 59, 1, 255, 110, 58, 1, 255, 112, 60, 7, 255, 110, 59, 5, 255, 104, 59, 3, 255, 116, 56, 6, 255, 118, 55, 2, 255, 123, 61, 5, 255, 112, 57, 3, 255, 110, 59, 8, 255, 113, 56, 8, 255, 112, 56, 6, 255, 115, 62, 4, 255, 114, 60, 5, 255, 109, 55, 7, 255, 107, 54, 3, 255, 115, 61, 6, 255, 114, 56, 4, 255, 116, 53, 10, 255, 145, 68, 7, 255, 168, 78, 4, 255, 170, 74, 4, 255, 173, 76, 8, 255, 173, 74, 7, 255, 172, 68, 4, 255, 171, 69, 1, 255, 166, 70, 5, 255, 163, 68, 3, 255, 163, 65, 6, 255, 162, 70, 9, 255, 162, 72, 9, 255, 150, 65, 5, 255, 139, 65, 8, 255, 123, 63, 9, 255, 104, 54, 13, 255, 110, 69, 0, 255, 133, 77, 16, 255, 120, 65, 8, 255, 89, 53, 4, 255, 92, 54, 6, 255, 105, 64, 5, 255, 92, 59, 7, 255, 108, 67, 10, 255, 143, 94, 13, 255, 162, 97, 18, 255, 182, 112, 11, 255, 177, 99, 14, 255, 188, 108, 18, 255, 199, 124, 23, 255, 201, 127, 17, 255, 200, 123, 5, 255, 205, 126, 15, 255, 208, 131, 13, 255, 209, 135, 11, 255, 206, 135, 6, 255, 206, 136, 6, 255, 210, 137, 7, 255, 211, 139, 11, 255, 211, 142, 7, 255, 210, 137, 14, 255, 208, 132, 9, 255, 213, 135, 11, 255, 212, 137, 6, 255, 213, 139, 9, 255, 215, 139, 13, 255, 206, 132, 6, 255, 198, 124, 10, 255, 210, 134, 19, 255, 214, 142, 11, 255, 213, 146, 8, 255, 215, 153, 8, 255, 210, 145, 10, 255, 207, 137, 7, 255, 212, 141, 7, 255, 213, 140, 6, 255, 216, 142, 6, 255, 209, 131, 6, 255, 206, 125, 8, 255, 209, 133, 0, 255, 209, 131, 10, 255, 207, 130, 16, 255, 209, 135, 8, 255, 209, 135, 8, 255, 204, 131, 6, 255, 190, 114, 14, 255, 173, 101, 13, 255, 184, 116, 16, 255, 183, 117, 8, 255, 190, 121, 5, 255, 208, 139, 7, 255, 208, 141, 3, 255, 205, 142, 7, 255, 206, 146, 11, 255, 209, 147, 15, 255, 207, 146, 10, 255, 207, 147, 6, 255, 202, 141, 4, 255, 195, 129, 15, 255, 202, 135, 1, 255, 194, 124, 3, 255, 193, 124, 4, 255, 203, 133, 8, 255, 203, 133, 9, 255, 201, 131, 9, 255, 201, 131, 6, 255, 200, 131, 3, 255, 202, 131, 4, 255, 201, 129, 10, 255, 199, 126, 11, 255, 197, 122, 10, 255, 199, 123, 7, 255, 202, 125, 8, 255, 198, 126, 1, 255, 195, 123, 7, 255, 200, 126, 22, 255, 198, 124, 9, 255, 197, 123, 0, 255, 201, 123, 8, 255, 202, 124, 11, 255, 201, 119, 14, 255, 190, 106, 6, 255, 191, 108, 5, 255, 189, 106, 4, 255, 185, 100, 5, 255, 183, 93, 8, 255, 183, 89, 5, 255, 181, 88, 6, 255, 179, 86, 3, 255, 177, 82, 3, 255, 178, 83, 2, 255, 172, 75, 3, 255, 169, 74, 3, 255, 166, 74, 6, 255, 163, 71, 4, 255, 163, 72, 2, 255, 166, 76, 1, 255, 172, 81, 8, 255, 161, 67, 3, 255, 160, 64, 6, 255, 150, 64, 3, 255, 146, 62, 0, 255, 152, 69, 3, 255, 151, 76, 8, 255, 149, 72, 7, 255, 115, 56, 1, 255, 97, 47, 5, 255, 127, 56, 10, 255, 176, 90, 14, 255, 169, 92, 3, 255, 161, 77, 1, 255, 150, 64, 4, 255, 129, 59, 0, 255, 138, 62, 4, 255, 140, 58, 4, 255, 131, 58, 4, 255, 128, 56, 2, 255, 140, 71, 11, 255, 161, 81, 5, 255, 177, 93, 3, 255, 189, 97, 5, 255, 188, 97, 8, 255, 185, 95, 11, 255, 173, 86, 3, 255, 174, 85, 4, 255, 172, 80, 5, 255, 167, 72, 2, 255, 165, 75, 4, 255, 165, 83, 2, 255, 174, 88, 1, 255, 177, 89, 2, 255, 174, 84, 3, 255, 180, 79, 6, 255, 155, 73, 1, 255, 135, 64, 7, 255, 139, 62, 1, 255, 143, 65, 2, 255, 143, 66, 3, 255, 144, 64, 1, 255, 144, 62, 6, 255, 134, 55, 4, 255, 126, 51, 1, 255, 118, 45, 1, 255, 111, 39, 1, 255, 121, 51, 2, 255, 121, 50, 3, 255, 113, 40, 3, 255, 124, 55, 7, 255, 124, 52, 2, 255, 125, 48, 0, 255, 120, 41, 5, 255, 126, 49, 5, 255, 127, 53, 3, 255, 122, 49, 2, 255, 123, 49, 2, 255, 131, 53, 6, 255, 143, 63, 4, 255, 151, 66, 2, 255, 144, 64, 1, 255, 144, 63, 3, 255, 146, 63, 2, 255, 142, 63, 1, 255, 143, 60, 2, 255, 158, 74, 7, 255, 160, 73, 2, 255, 160, 70, 0, 255, 158, 69, 1, 255, 150, 64, 1, 255, 147, 64, 4, 255, 140, 61, 6, 255, 133, 54, 2, 255, 131, 54, 1, 255, 132, 59, 3, 255, 134, 63, 2, 255, 138, 67, 1, 255, 145, 68, 3, 255, 147, 65, 5, 255, 145, 63, 7, 255, 140, 62, 6, 255, 138, 62, 3, 255, 139, 63, 1, 255, 138, 63, 0, 255, 135, 61, 5, 255, 128, 52, 5, 255, 123, 44, 5, 255, 118, 36, 2, 255, 126, 46, 4, 255, 134, 51, 3, 255, 135, 53, 0, 255, 139, 55, 4, 255, 136, 57, 7, 255, 137, 57, 6, 255, 135, 53, 1, 255, 133, 57, 4, 255, 131, 53, 4, 255, 126, 47, 4, 255, 129, 49, 4, 255, 134, 52, 7, 255, 17, 49, 71, 255, 4, 14, 67, 255, 3, 14, 70, 255, 1, 17, 52, 255, 1, 4, 2, 255, 0, 2, 2, 255, 3, 0, 5, 255, 2, 1, 3, 255, 0, 0, 10, 255, 3, 22, 168, 255, 61, 89, 170, 255, 70, 55, 15, 255, 27, 9, 0, 255, 36, 19, 61, 255, 9, 23, 154, 255, 11, 7, 29, 255, 12, 4, 0, 255, 22, 8, 6, 255, 20, 6, 4, 255, 21, 6, 5, 255, 22, 6, 4, 255, 26, 8, 6, 255, 23, 6, 5, 255, 21, 5, 6, 255, 25, 8, 7, 255, 24, 7, 6, 255, 22, 8, 5, 255, 30, 10, 3, 255, 42, 13, 8, 255, 38, 11, 4, 255, 29, 8, 1, 255, 37, 14, 7, 255, 43, 16, 5, 255, 44, 12, 1, 255, 51, 12, 1, 255, 58, 19, 8, 255, 52, 16, 5, 255, 48, 14, 2, 255, 49, 20, 3, 255, 45, 16, 3, 255, 34, 16, 2, 255, 44, 16, 5, 255, 61, 21, 6, 255, 59, 24, 1, 255, 91, 32, 7, 255, 135, 44, 8, 255, 121, 29, 1, 255, 92, 32, 3, 255, 57, 22, 1, 255, 56, 22, 5, 255, 57, 26, 4, 255, 57, 23, 3, 255, 52, 25, 4, 255, 48, 26, 2, 255, 55, 29, 1, 255, 62, 34, 4, 255, 60, 34, 1, 255, 61, 41, 2, 255, 68, 45, 2, 255, 75, 42, 4, 255, 69, 44, 4, 255, 73, 49, 0, 255, 76, 47, 1, 255, 96, 52, 3, 255, 90, 56, 1, 255, 75, 47, 4, 255, 107, 74, 7, 255, 171, 107, 5, 255, 171, 111, 2, 255, 170, 103, 2, 255, 148, 71, 0, 255, 119, 54, 3, 255, 99, 56, 5, 255, 83, 54, 5, 255, 84, 60, 4, 255, 86, 56, 0, 255, 86, 58, 3, 255, 81, 58, 3, 255, 89, 58, 3, 255, 96, 59, 3, 255, 78, 57, 0, 255, 79, 61, 8, 255, 149, 105, 8, 255, 197, 117, 4, 255, 187, 98, 1, 255, 168, 83, 5, 255, 169, 80, 4, 255, 174, 87, 5, 255, 171, 92, 7, 255, 154, 80, 6, 255, 111, 63, 0, 255, 87, 53, 6, 255, 79, 49, 4, 255, 91, 54, 5, 255, 88, 52, 3, 255, 86, 57, 1, 255, 88, 53, 1, 255, 98, 59, 4, 255, 99, 64, 6, 255, 92, 57, 2, 255, 97, 52, 3, 255, 102, 58, 5, 255, 101, 55, 1, 255, 98, 57, 5, 255, 103, 58, 3, 255, 94, 55, 0, 255, 92, 53, 5, 255, 95, 53, 2, 255, 98, 56, 4, 255, 93, 59, 5, 255, 93, 62, 5, 255, 98, 58, 1, 255, 99, 51, 3, 255, 90, 51, 5, 255, 85, 53, 3, 255, 87, 55, 4, 255, 88, 56, 2, 255, 100, 59, 5, 255, 95, 57, 3, 255, 93, 57, 1, 255, 95, 57, 5, 255, 91, 54, 8, 255, 96, 54, 6, 255, 96, 54, 0, 255, 90, 48, 0, 255, 93, 54, 6, 255, 94, 56, 6, 255, 93, 53, 2, 255, 99, 51, 7, 255, 96, 47, 3, 255, 104, 54, 7, 255, 107, 57, 6, 255, 104, 56, 3, 255, 103, 58, 3, 255, 100, 58, 1, 255, 107, 54, 8, 255, 119, 61, 5, 255, 125, 59, 1, 255, 129, 54, 2, 255, 117, 52, 9, 255, 102, 47, 6, 255, 111, 50, 3, 255, 112, 47, 6, 255, 103, 48, 12, 255, 115, 55, 6, 255, 114, 56, 5, 255, 113, 58, 6, 255, 109, 56, 7, 255, 111, 58, 8, 255, 111, 52, 6, 255, 103, 53, 4, 255, 104, 58, 5, 255, 110, 57, 3, 255, 110, 56, 4, 255, 100, 54, 4, 255, 103, 58, 4, 255, 116, 55, 5, 255, 115, 58, 3, 255, 104, 59, 0, 255, 109, 57, 6, 255, 110, 59, 5, 255, 110, 58, 8, 255, 111, 59, 5, 255, 110, 57, 2, 255, 108, 57, 8, 255, 107, 57, 8, 255, 113, 60, 13, 255, 110, 58, 2, 255, 115, 57, 2, 255, 115, 53, 11, 255, 121, 60, 6, 255, 123, 61, 5, 255, 111, 53, 11, 255, 114, 58, 10, 255, 117, 59, 5, 255, 118, 58, 3, 255, 114, 54, 8, 255, 113, 56, 12, 255, 106, 54, 3, 255, 105, 54, 6, 255, 112, 56, 11, 255, 113, 57, 6, 255, 116, 65, 2, 255, 146, 74, 4, 255, 169, 74, 2, 255, 170, 76, 6, 255, 167, 74, 4, 255, 166, 70, 4, 255, 165, 70, 1, 255, 162, 68, 2, 255, 162, 67, 3, 255, 168, 70, 14, 255, 164, 72, 7, 255, 163, 71, 3, 255, 160, 71, 3, 255, 155, 74, 5, 255, 142, 75, 2, 255, 133, 76, 9, 255, 135, 76, 13, 255, 144, 73, 9, 255, 140, 76, 5, 255, 136, 87, 11, 255, 146, 89, 15, 255, 163, 95, 17, 255, 171, 105, 24, 255, 184, 116, 18, 255, 197, 122, 12, 255, 203, 123, 20, 255, 200, 121, 25, 255, 198, 124, 21, 255, 201, 129, 9, 255, 201, 128, 9, 255, 203, 130, 16, 255, 203, 129, 17, 255, 207, 134, 19, 255, 205, 134, 10, 255, 208, 133, 11, 255, 208, 136, 12, 255, 211, 141, 12, 255, 212, 139, 10, 255, 217, 144, 12, 255, 214, 142, 14, 255, 208, 132, 17, 255, 209, 134, 13, 255, 213, 136, 5, 255, 213, 137, 8, 255, 210, 134, 10, 255, 212, 137, 12, 255, 211, 139, 4, 255, 216, 144, 7, 255, 220, 153, 4, 255, 219, 154, 6, 255, 217, 152, 7, 255, 216, 152, 4, 255, 216, 145, 11, 255, 218, 137, 10, 255, 220, 137, 5, 255, 214, 142, 8, 255, 210, 136, 3, 255, 209, 133, 8, 255, 206, 130, 7, 255, 208, 133, 4, 255, 209, 135, 7, 255, 207, 137, 10, 255, 207, 137, 2, 255, 213, 138, 2, 255, 207, 135, 5, 255, 199, 129, 16, 255, 193, 121, 6, 255, 200, 126, 10, 255, 196, 126, 4, 255, 201, 136, 5, 255, 206, 144, 5, 255, 206, 144, 3, 255, 208, 146, 8, 255, 212, 148, 17, 255, 207, 145, 10, 255, 206, 144, 5, 255, 207, 145, 4, 255, 196, 131, 4, 255, 183, 109, 21, 255, 192, 120, 5, 255, 196, 126, 4, 255, 205, 135, 9, 255, 207, 138, 11, 255, 204, 134, 11, 255, 204, 134, 14, 255, 204, 133, 11, 255, 200, 130, 3, 255, 201, 131, 3, 255, 200, 128, 13, 255, 196, 124, 14, 255, 194, 124, 8, 255, 197, 128, 12, 255, 194, 128, 10, 255, 200, 124, 13, 255, 203, 126, 14, 255, 199, 124, 10, 255, 204, 129, 14, 255, 203, 130, 3, 255, 195, 120, 2, 255, 199, 121, 7, 255, 194, 113, 7, 255, 187, 102, 2, 255, 186, 100, 4, 255, 183, 97, 4, 255, 186, 99, 2, 255, 188, 100, 3, 255, 184, 91, 3, 255, 174, 82, 0, 255, 178, 86, 5, 255, 179, 85, 4, 255, 171, 75, 0, 255, 173, 73, 2, 255, 172, 75, 3, 255, 168, 74, 2, 255, 165, 71, 4, 255, 161, 68, 2, 255, 158, 66, 2, 255, 158, 67, 13, 255, 148, 54, 9, 255, 152, 56, 6, 255, 145, 60, 3, 255, 141, 59, 1, 255, 148, 69, 1, 255, 153, 75, 5, 255, 147, 63, 8, 255, 124, 60, 8, 255, 106, 57, 2, 255, 95, 39, 5, 255, 140, 70, 9, 255, 177, 87, 7, 255, 157, 73, 6, 255, 111, 50, 4, 255, 125, 55, 8, 255, 147, 65, 3, 255, 141, 66, 8, 255, 126, 55, 4, 255, 128, 56, 2, 255, 163, 84, 7, 255, 164, 79, 3, 255, 182, 99, 3, 255, 190, 104, 5, 255, 188, 100, 6, 255, 187, 100, 1, 255, 185, 97, 0, 255, 173, 84, 2, 255, 177, 89, 2, 255, 184, 96, 3, 255, 169, 82, 7, 255, 162, 79, 6, 255, 167, 85, 3, 255, 166, 81, 1, 255, 157, 71, 2, 255, 147, 64, 3, 255, 141, 62, 4, 255, 137, 60, 7, 255, 137, 61, 2, 255, 136, 59, 4, 255, 139, 60, 4, 255, 138, 61, 1, 255, 133, 56, 5, 255, 126, 51, 4, 255, 124, 52, 3, 255, 121, 49, 6, 255, 122, 48, 5, 255, 122, 48, 3, 255, 123, 46, 2, 255, 123, 46, 3, 255, 125, 46, 7, 255, 125, 49, 1, 255, 125, 50, 1, 255, 123, 48, 8, 255, 126, 52, 3, 255, 127, 54, 3, 255, 120, 49, 0, 255, 113, 41, 2, 255, 112, 39, 6, 255, 124, 49, 3, 255, 136, 57, 3, 255, 145, 65, 4, 255, 147, 65, 4, 255, 143, 62, 7, 255, 139, 59, 6, 255, 135, 56, 0, 255, 143, 60, 1, 255, 151, 67, 1, 255, 155, 72, 3, 255, 150, 68, 1, 255, 141, 61, 1, 255, 137, 59, 3, 255, 129, 53, 7, 255, 123, 47, 2, 255, 122, 49, 4, 255, 116, 48, 1, 255, 123, 55, 6, 255, 131, 59, 6, 255, 130, 59, 4, 255, 125, 59, 3, 255, 127, 61, 2, 255, 132, 62, 1, 255, 137, 63, 2, 255, 136, 59, 6, 255, 129, 51, 5, 255, 118, 43, 5, 255, 105, 33, 2, 255, 97, 30, 3, 255, 92, 29, 2, 255, 106, 35, 5, 255, 113, 38, 4, 255, 115, 42, 5, 255, 113, 38, 4, 255, 106, 33, 2, 255, 110, 37, 3, 255, 118, 39, 1, 255, 120, 41, 5, 255, 112, 32, 3, 255, 100, 33, 6, 255, 99, 30, 2, 255, 103, 31, 3, 255, 12, 45, 69, 255, 0, 0, 34, 255, 2, 6, 45, 255, 0, 7, 25, 255, 2, 0, 10, 255, 2, 1, 4, 255, 2, 2, 4, 255, 0, 0, 2, 255, 1, 20, 160, 255, 59, 86, 183, 255, 73, 64, 12, 255, 25, 10, 0, 255, 44, 12, 51, 255, 22, 25, 153, 255, 7, 7, 38, 255, 16, 1, 0, 255, 16, 7, 2, 255, 19, 3, 7, 255, 17, 7, 4, 255, 22, 8, 6, 255, 25, 9, 8, 255, 21, 5, 4, 255, 22, 6, 7, 255, 25, 10, 11, 255, 27, 8, 9, 255, 30, 11, 6, 255, 28, 12, 4, 255, 29, 11, 5, 255, 36, 13, 9, 255, 34, 10, 6, 255, 34, 7, 1, 255, 46, 13, 4, 255, 49, 15, 2, 255, 50, 14, 3, 255, 51, 15, 4, 255, 52, 18, 2, 255, 52, 19, 2, 255, 50, 14, 5, 255, 52, 17, 8, 255, 49, 14, 2, 255, 48, 18, 2, 255, 51, 15, 4, 255, 59, 16, 5, 255, 73, 21, 3, 255, 109, 31, 9, 255, 100, 29, 3, 255, 92, 26, 4, 255, 59, 25, 2, 255, 45, 25, 5, 255, 49, 24, 6, 255, 47, 28, 2, 255, 55, 28, 7, 255, 48, 22, 1, 255, 53, 28, 1, 255, 59, 31, 3, 255, 65, 34, 2, 255, 67, 35, 1, 255, 69, 37, 4, 255, 73, 39, 3, 255, 71, 43, 2, 255, 73, 47, 3, 255, 70, 48, 6, 255, 88, 60, 0, 255, 84, 59, 8, 255, 73, 51, 8, 255, 68, 52, 7, 255, 139, 95, 6, 255, 174, 122, 2, 255, 172, 118, 6, 255, 157, 87, 3, 255, 115, 52, 6, 255, 117, 60, 4, 255, 125, 77, 5, 255, 87, 56, 8, 255, 81, 55, 6, 255, 93, 59, 3, 255, 89, 57, 7, 255, 97, 59, 7, 255, 91, 60, 3, 255, 83, 61, 2, 255, 115, 84, 5, 255, 174, 111, 10, 255, 191, 107, 8, 255, 179, 90, 4, 255, 170, 91, 16, 255, 162, 85, 19, 255, 167, 88, 7, 255, 168, 84, 8, 255, 130, 68, 7, 255, 83, 53, 5, 255, 77, 54, 6, 255, 86, 56, 5, 255, 85, 54, 6, 255, 84, 53, 4, 255, 84, 55, 0, 255, 89, 56, 5, 255, 97, 56, 2, 255, 103, 56, 6, 255, 96, 54, 3, 255, 102, 63, 4, 255, 105, 60, 1, 255, 100, 58, 4, 255, 97, 58, 6, 255, 100, 56, 10, 255, 108, 61, 5, 255, 104, 63, 1, 255, 91, 57, 8, 255, 104, 59, 9, 255, 103, 60, 1, 255, 99, 56, 1, 255, 97, 60, 5, 255, 101, 57, 4, 255, 105, 56, 3, 255, 92, 52, 2, 255, 81, 48, 1, 255, 94, 49, 7, 255, 102, 58, 7, 255, 101, 55, 2, 255, 98, 57, 4, 255, 95, 60, 1, 255, 100, 59, 2, 255, 94, 56, 11, 255, 91, 59, 8, 255, 96, 55, 0, 255, 105, 57, 9, 255, 106, 58, 2, 255, 106, 58, 7, 255, 105, 57, 9, 255, 102, 57, 2, 255, 106, 58, 4, 255, 112, 63, 8, 255, 107, 56, 2, 255, 106, 56, 5, 255, 105, 57, 6, 255, 106, 59, 2, 255, 110, 56, 6, 255, 129, 62, 8, 255, 129, 61, 4, 255, 126, 58, 1, 255, 126, 57, 4, 255, 113, 57, 5, 255, 110, 50, 5, 255, 116, 59, 3, 255, 122, 59, 10, 255, 125, 56, 4, 255, 118, 61, 6, 255, 115, 58, 6, 255, 111, 51, 4, 255, 103, 57, 6, 255, 102, 56, 7, 255, 104, 54, 6, 255, 113, 56, 9, 255, 108, 54, 3, 255, 107, 57, 4, 255, 106, 56, 4, 255, 101, 54, 6, 255, 116, 59, 8, 255, 112, 58, 5, 255, 104, 55, 2, 255, 117, 60, 5, 255, 118, 59, 5, 255, 116, 56, 8, 255, 113, 56, 2, 255, 115, 59, 4, 255, 108, 55, 6, 255, 110, 60, 8, 255, 109, 56, 7, 255, 110, 58, 4, 255, 112, 60, 6, 255, 111, 56, 13, 255, 113, 61, 9, 255, 119, 59, 5, 255, 115, 57, 16, 255, 109, 57, 6, 255, 109, 61, 2, 255, 109, 64, 6, 255, 105, 58, 9, 255, 106, 55, 8, 255, 112, 58, 10, 255, 108, 60, 3, 255, 111, 57, 8, 255, 115, 58, 10, 255, 124, 59, 12, 255, 128, 57, 4, 255, 140, 66, 5, 255, 162, 75, 3, 255, 166, 76, 1, 255, 162, 75, 4, 255, 160, 71, 3, 255, 163, 68, 3, 255, 166, 71, 5, 255, 163, 70, 8, 255, 158, 72, 5, 255, 154, 69, 3, 255, 151, 72, 3, 255, 150, 78, 4, 255, 146, 81, 8, 255, 142, 79, 9, 255, 146, 85, 11, 255, 165, 97, 21, 255, 184, 109, 14, 255, 196, 116, 13, 255, 194, 118, 16, 255, 194, 125, 14, 255, 198, 126, 11, 255, 203, 125, 15, 255, 203, 129, 18, 255, 202, 127, 13, 255, 206, 133, 5, 255, 207, 133, 11, 255, 207, 134, 13, 255, 211, 134, 9, 255, 212, 133, 11, 255, 211, 134, 13, 255, 209, 133, 14, 255, 209, 135, 21, 255, 209, 136, 20, 255, 213, 142, 15, 255, 215, 145, 9, 255, 215, 144, 8, 255, 215, 144, 2, 255, 213, 136, 12, 255, 206, 129, 9, 255, 208, 133, 12, 255, 213, 139, 6, 255, 215, 141, 13, 255, 214, 140, 11, 255, 215, 143, 12, 255, 211, 141, 5, 255, 217, 148, 6, 255, 219, 156, 4, 255, 218, 154, 10, 255, 223, 154, 7, 255, 219, 148, 10, 255, 211, 140, 8, 255, 213, 138, 2, 255, 216, 138, 5, 255, 207, 133, 5, 255, 204, 127, 9, 255, 209, 136, 2, 255, 213, 141, 9, 255, 211, 140, 3, 255, 209, 137, 5, 255, 211, 138, 10, 255, 210, 134, 2, 255, 211, 134, 4, 255, 203, 131, 4, 255, 203, 137, 10, 255, 208, 143, 5, 255, 204, 135, 5, 255, 200, 130, 5, 255, 203, 138, 7, 255, 209, 148, 8, 255, 205, 144, 3, 255, 208, 147, 8, 255, 207, 147, 4, 255, 207, 146, 7, 255, 207, 144, 13, 255, 208, 143, 7, 255, 204, 138, 3, 255, 195, 124, 6, 255, 201, 130, 11, 255, 209, 140, 12, 255, 208, 138, 15, 255, 203, 135, 13, 255, 203, 135, 13, 255, 204, 134, 11, 255, 204, 133, 9, 255, 201, 130, 5, 255, 199, 130, 5, 255, 200, 128, 18, 255, 199, 127, 13, 255, 199, 128, 4, 255, 202, 128, 17, 255, 204, 132, 8, 255, 204, 132, 10, 255, 204, 128, 22, 255, 202, 126, 8, 255, 206, 128, 10, 255, 201, 118, 8, 255, 189, 99, 5, 255, 183, 97, 6, 255, 176, 93, 0, 255, 179, 91, 3, 255, 178, 90, 4, 255, 183, 96, 4, 255, 190, 103, 8, 255, 190, 103, 3, 255, 188, 97, 7, 255, 180, 91, 6, 255, 173, 86, 2, 255, 178, 88, 7, 255, 176, 84, 3, 255, 172, 76, 2, 255, 172, 74, 3, 255, 168, 71, 3, 255, 166, 71, 4, 255, 157, 64, 0, 255, 152, 59, 0, 255, 151, 60, 2, 255, 154, 63, 3, 255, 154, 65, 1, 255, 155, 64, 6, 255, 139, 58, 6, 255, 128, 61, 2, 255, 159, 66, 5, 255, 150, 72, 7, 255, 131, 65, 8, 255, 125, 66, 3, 255, 102, 47, 8, 255, 104, 42, 1, 255, 157, 69, 8, 255, 155, 70, 9, 255, 133, 62, 9, 255, 148, 64, 4, 255, 138, 61, 2, 255, 137, 62, 6, 255, 124, 57, 0, 255, 132, 65, 7, 255, 149, 70, 7, 255, 168, 77, 3, 255, 184, 100, 5, 255, 191, 112, 5, 255, 190, 108, 5, 255, 190, 103, 3, 255, 190, 98, 3, 255, 179, 82, 6, 255, 172, 78, 2, 255, 178, 89, 3, 255, 182, 93, 2, 255, 175, 83, 1, 255, 165, 76, 3, 255, 152, 67, 6, 255, 128, 54, 2, 255, 128, 57, 5, 255, 140, 60, 7, 255, 139, 58, 4, 255, 136, 63, 4, 255, 136, 59, 3, 255, 136, 55, 3, 255, 131, 57, 5, 255, 116, 48, 2, 255, 120, 54, 1, 255, 126, 57, 6, 255, 125, 49, 8, 255, 132, 54, 2, 255, 128, 50, 0, 255, 120, 46, 3, 255, 121, 45, 3, 255, 125, 44, 4, 255, 119, 44, 1, 255, 119, 50, 3, 255, 122, 51, 0, 255, 122, 49, 2, 255, 123, 48, 8, 255, 122, 52, 4, 255, 112, 43, 2, 255, 102, 33, 2, 255, 113, 43, 1, 255, 118, 45, 3, 255, 138, 58, 7, 255, 144, 67, 1, 255, 137, 63, 4, 255, 127, 49, 3, 255, 129, 51, 4, 255, 133, 54, 5, 255, 134, 54, 2, 255, 140, 61, 3, 255, 139, 61, 3, 255, 135, 61, 5, 255, 128, 55, 5, 255, 116, 49, 1, 255, 115, 49, 1, 255, 116, 49, 2, 255, 110, 44, 1, 255, 112, 45, 3, 255, 119, 49, 4, 255, 120, 52, 3, 255, 114, 51, 0, 255, 116, 53, 2, 255, 122, 54, 3, 255, 122, 50, 5, 255, 113, 40, 4, 255, 100, 30, 1, 255, 81, 28, 1, 255, 76, 27, 1, 255, 86, 29, 3, 255, 96, 33, 6, 255, 97, 34, 4, 255, 99, 31, 1, 255, 102, 30, 4, 255, 93, 22, 2, 255, 82, 23, 2, 255, 81, 26, 0, 255, 90, 30, 1, 255, 94, 30, 3, 255, 89, 22, 1, 255, 80, 21, 3, 255, 79, 17, 0, 255, 83, 19, 1, 255, 1, 28, 93, 255, 6, 19, 69, 255, 5, 2, 20, 255, 1, 1, 4, 255, 8, 1, 9, 255, 1, 2, 3, 255, 6, 0, 0, 255, 1, 11, 132, 255, 49, 86, 201, 255, 79, 63, 27, 255, 33, 14, 0, 255, 40, 16, 28, 255, 15, 25, 153, 255, 10, 8, 57, 255, 13, 2, 0, 255, 8, 4, 9, 255, 15, 8, 8, 255, 12, 3, 5, 255, 18, 6, 6, 255, 24, 8, 8, 255, 20, 4, 5, 255, 20, 6, 4, 255, 20, 7, 6, 255, 22, 10, 9, 255, 25, 11, 8, 255, 28, 12, 4, 255, 34, 12, 4, 255, 35, 13, 5, 255, 28, 11, 3, 255, 39, 15, 10, 255, 47, 12, 7, 255, 47, 10, 1, 255, 46, 14, 1, 255, 50, 16, 5, 255, 53, 18, 7, 255, 48, 16, 3, 255, 50, 20, 5, 255, 45, 14, 5, 255, 43, 14, 5, 255, 44, 16, 3, 255, 56, 17, 2, 255, 54, 17, 3, 255, 53, 19, 2, 255, 77, 26, 6, 255, 82, 23, 0, 255, 76, 25, 6, 255, 64, 24, 8, 255, 48, 25, 7, 255, 40, 22, 2, 255, 46, 22, 1, 255, 45, 24, 1, 255, 43, 29, 3, 255, 51, 30, 4, 255, 60, 30, 5, 255, 59, 30, 0, 255, 60, 36, 1, 255, 65, 39, 2, 255, 71, 40, 4, 255, 68, 40, 3, 255, 71, 42, 1, 255, 69, 49, 0, 255, 83, 50, 3, 255, 104, 65, 2, 255, 75, 50, 35, 255, 79, 52, 17, 255, 97, 69, 2, 255, 160, 109, 3, 255, 169, 116, 0, 255, 169, 103, 5, 255, 152, 81, 7, 255, 103, 54, 7, 255, 103, 55, 6, 255, 112, 68, 0, 255, 93, 59, 3, 255, 84, 56, 7, 255, 87, 60, 3, 255, 102, 65, 7, 255, 98, 68, 4, 255, 93, 73, 0, 255, 138, 100, 12, 255, 186, 117, 11, 255, 180, 100, 1, 255, 166, 92, 4, 255, 175, 98, 13, 255, 171, 96, 36, 255, 172, 106, 47, 255, 155, 95, 19, 255, 108, 64, 7, 255, 74, 59, 8, 255, 74, 58, 3, 255, 88, 56, 8, 255, 90, 58, 7, 255, 93, 60, 0, 255, 95, 59, 2, 255, 98, 61, 3, 255, 97, 58, 2, 255, 108, 62, 4, 255, 106, 59, 6, 255, 103, 58, 4, 255, 110, 66, 7, 255, 109, 66, 4, 255, 104, 60, 1, 255, 102, 62, 0, 255, 101, 61, 1, 255, 110, 52, 1, 255, 113, 58, 2, 255, 104, 53, 3, 255, 103, 64, 10, 255, 92, 66, 3, 255, 97, 56, 8, 255, 99, 63, 2, 255, 95, 60, 2, 255, 96, 59, 5, 255, 99, 61, 7, 255, 93, 56, 7, 255, 91, 58, 4, 255, 101, 69, 2, 255, 111, 63, 5, 255, 105, 53, 6, 255, 102, 56, 1, 255, 110, 57, 2, 255, 110, 58, 7, 255, 110, 65, 5, 255, 110, 60, 3, 255, 110, 60, 5, 255, 109, 62, 0, 255, 107, 61, 5, 255, 105, 59, 5, 255, 107, 62, 4, 255, 111, 64, 4, 255, 115, 65, 4, 255, 120, 68, 8, 255, 114, 64, 5, 255, 113, 65, 3, 255, 112, 65, 4, 255, 117, 63, 8, 255, 128, 57, 1, 255, 133, 62, 5, 255, 125, 63, 3, 255, 133, 64, 7, 255, 133, 66, 3, 255, 125, 60, 6, 255, 126, 61, 5, 255, 123, 59, 11, 255, 121, 57, 11, 255, 125, 59, 4, 255, 124, 61, 11, 255, 117, 60, 3, 255, 111, 55, 3, 255, 115, 55, 6, 255, 112, 58, 4, 255, 118, 65, 4, 255, 125, 63, 9, 255, 120, 58, 9, 255, 116, 60, 2, 255, 115, 61, 3, 255, 119, 61, 9, 255, 119, 62, 6, 255, 117, 61, 3, 255, 122, 59, 7, 255, 127, 63, 7, 255, 127, 63, 5, 255, 125, 60, 1, 255, 123, 60, 4, 255, 122, 60, 5, 255, 119, 61, 3, 255, 116, 64, 5, 255, 113, 61, 4, 255, 121, 65, 13, 255, 121, 61, 10, 255, 110, 59, 4, 255, 118, 60, 6, 255, 118, 62, 5, 255, 122, 65, 7, 255, 122, 63, 3, 255, 119, 59, 6, 255, 115, 56, 7, 255, 114, 56, 3, 255, 113, 57, 3, 255, 112, 56, 7, 255, 110, 62, 2, 255, 116, 59, 1, 255, 119, 61, 10, 255, 112, 61, 7, 255, 126, 61, 12, 255, 154, 67, 7, 255, 160, 64, 6, 255, 158, 70, 4, 255, 164, 76, 14, 255, 158, 70, 13, 255, 153, 71, 6, 255, 153, 79, 9, 255, 152, 87, 11, 255, 159, 93, 13, 255, 167, 101, 7, 255, 175, 103, 16, 255, 186, 113, 8, 255, 194, 115, 10, 255, 194, 115, 10, 255, 194, 118, 16, 255, 195, 117, 8, 255, 200, 122, 7, 255, 198, 126, 15, 255, 202, 133, 18, 255, 207, 131, 15, 255, 204, 132, 9, 255, 209, 134, 15, 255, 209, 135, 14, 255, 207, 139, 9, 255, 207, 137, 8, 255, 216, 138, 14, 255, 215, 143, 12, 255, 210, 139, 11, 255, 212, 140, 12, 255, 211, 139, 3, 255, 216, 141, 13, 255, 216, 140, 11, 255, 217, 141, 8, 255, 214, 142, 3, 255, 216, 143, 7, 255, 214, 140, 7, 255, 210, 130, 14, 255, 207, 129, 12, 255, 213, 139, 19, 255, 214, 143, 5, 255, 218, 145, 14, 255, 214, 141, 10, 255, 209, 138, 5, 255, 211, 142, 6, 255, 220, 153, 7, 255, 224, 153, 5, 255, 222, 144, 6, 255, 219, 136, 8, 255, 214, 132, 9, 255, 209, 133, 10, 255, 211, 136, 17, 255, 213, 139, 4, 255, 208, 132, 10, 255, 211, 137, 6, 255, 209, 137, 8, 255, 211, 144, 8, 255, 213, 147, 2, 255, 210, 141, 5, 255, 208, 139, 8, 255, 209, 139, 8, 255, 208, 137, 10, 255, 204, 135, 8, 255, 211, 142, 13, 255, 210, 141, 7, 255, 198, 130, 7, 255, 203, 141, 7, 255, 211, 148, 3, 255, 211, 145, 7, 255, 210, 146, 13, 255, 207, 148, 8, 255, 207, 150, 12, 255, 206, 145, 6, 255, 205, 144, 0, 255, 208, 141, 10, 255, 206, 134, 18, 255, 203, 133, 4, 255, 204, 134, 8, 255, 209, 141, 8, 255, 204, 138, 9, 255, 204, 138, 10, 255, 207, 141, 15, 255, 204, 137, 12, 255, 203, 134, 8, 255, 204, 135, 9, 255, 201, 132, 7, 255, 200, 130, 5, 255, 198, 124, 10, 255, 205, 130, 5, 255, 202, 124, 13, 255, 189, 109, 5, 255, 191, 109, 8, 255, 199, 118, 11, 255, 201, 117, 7, 255, 188, 102, 8, 255, 182, 95, 8, 255, 179, 93, 8, 255, 176, 90, 9, 255, 181, 96, 6, 255, 189, 102, 3, 255, 188, 102, 2, 255, 185, 101, 3, 255, 187, 104, 8, 255, 189, 105, 8, 255, 191, 105, 6, 255, 192, 107, 10, 255, 181, 97, 6, 255, 182, 94, 3, 255, 184, 94, 9, 255, 184, 92, 3, 255, 177, 81, 2, 255, 178, 82, 2, 255, 175, 82, 4, 255, 166, 74, 1, 255, 163, 71, 4, 255, 163, 71, 5, 255, 162, 70, 3, 255, 147, 58, 4, 255, 150, 64, 2, 255, 150, 71, 5, 255, 145, 65, 8, 255, 139, 57, 2, 255, 144, 68, 5, 255, 151, 73, 3, 255, 133, 68, 2, 255, 109, 53, 4, 255, 95, 42, 5, 255, 124, 55, 6, 255, 166, 75, 3, 255, 152, 64, 3, 255, 138, 60, 4, 255, 142, 58, 7, 255, 133, 57, 9, 255, 123, 58, 9, 255, 135, 58, 9, 255, 145, 62, 7, 255, 170, 87, 5, 255, 178, 101, 10, 255, 189, 116, 5, 255, 191, 115, 3, 255, 190, 109, 8, 255, 183, 103, 2, 255, 185, 99, 7, 255, 176, 90, 2, 255, 173, 88, 2, 255, 177, 86, 10, 255, 170, 79, 3, 255, 163, 75, 1, 255, 151, 70, 6, 255, 135, 61, 4, 255, 133, 51, 0, 255, 133, 51, 0, 255, 131, 54, 2, 255, 130, 55, 3, 255, 131, 54, 1, 255, 128, 52, 3, 255, 124, 54, 3, 255, 114, 48, 2, 255, 121, 56, 2, 255, 129, 57, 6, 255, 124, 47, 6, 255, 125, 53, 2, 255, 120, 51, 3, 255, 119, 41, 7, 255, 114, 41, 6, 255, 108, 46, 4, 255, 106, 41, 8, 255, 114, 42, 5, 255, 121, 50, 1, 255, 119, 46, 3, 255, 114, 39, 9, 255, 117, 46, 2, 255, 115, 46, 1, 255, 116, 46, 3, 255, 114, 42, 3, 255, 108, 38, 0, 255, 127, 54, 2, 255, 129, 58, 0, 255, 122, 54, 4, 255, 122, 47, 4, 255, 130, 55, 5, 255, 128, 55, 3, 255, 129, 54, 1, 255, 131, 56, 1, 255, 131, 58, 0, 255, 130, 60, 2, 255, 123, 55, 2, 255, 124, 55, 4, 255, 125, 56, 3, 255, 124, 56, 4, 255, 117, 55, 4, 255, 107, 48, 1, 255, 103, 48, 0, 255, 113, 52, 2, 255, 118, 49, 2, 255, 109, 43, 4, 255, 105, 36, 5, 255, 98, 28, 1, 255, 92, 27, 1, 255, 85, 29, 1, 255, 86, 28, 4, 255, 84, 25, 4, 255, 80, 27, 1, 255, 80, 31, 1, 255, 85, 27, 0, 255, 87, 26, 0, 255, 90, 29, 4, 255, 85, 24, 3, 255, 80, 26, 3, 255, 80, 26, 2, 255, 88, 28, 3, 255, 90, 27, 4, 255, 88, 22, 3, 255, 76, 22, 3, 255, 75, 19, 2, 255, 79, 21, 6, 255, 5, 8, 23, 255, 5, 13, 40, 255, 1, 3, 10, 255, 2, 0, 9, 255, 4, 1, 7, 255, 2, 0, 0, 255, 0, 9, 111, 255, 41, 73, 216, 255, 85, 75, 41, 255, 31, 22, 0, 255, 43, 16, 27, 255, 23, 24, 154, 255, 4, 13, 68, 255, 17, 2, 0, 255, 13, 4, 9, 255, 12, 6, 2, 255, 26, 8, 3, 255, 25, 7, 5, 255, 26, 9, 8, 255, 22, 7, 7, 255, 23, 7, 5, 255, 24, 7, 5, 255, 25, 7, 6, 255, 31, 11, 8, 255, 38, 11, 7, 255, 40, 11, 5, 255, 37, 13, 5, 255, 41, 17, 5, 255, 42, 14, 3, 255, 44, 15, 6, 255, 43, 13, 4, 255, 46, 11, 2, 255, 46, 17, 8, 255, 46, 13, 1, 255, 56, 18, 5, 255, 52, 14, 5, 255, 41, 12, 4, 255, 36, 14, 3, 255, 33, 16, 1, 255, 41, 17, 5, 255, 46, 14, 3, 255, 53, 20, 3, 255, 61, 21, 1, 255, 76, 22, 2, 255, 71, 22, 1, 255, 64, 23, 1, 255, 50, 23, 4, 255, 49, 19, 5, 255, 44, 23, 0, 255, 53, 26, 2, 255, 51, 22, 5, 255, 49, 23, 2, 255, 54, 29, 3, 255, 55, 29, 0, 255, 61, 34, 2, 255, 65, 37, 3, 255, 67, 36, 1, 255, 68, 40, 2, 255, 71, 42, 3, 255, 76, 39, 3, 255, 84, 50, 6, 255, 109, 76, 23, 255, 91, 65, 2, 255, 87, 60, 12, 255, 84, 58, 6, 255, 132, 84, 8, 255, 147, 94, 6, 255, 154, 95, 3, 255, 155, 90, 3, 255, 135, 71, 1, 255, 106, 58, 4, 255, 102, 55, 2, 255, 111, 67, 4, 255, 94, 59, 5, 255, 97, 66, 1, 255, 115, 78, 4, 255, 110, 73, 4, 255, 116, 81, 5, 255, 162, 110, 11, 255, 192, 111, 5, 255, 179, 95, 1, 255, 175, 102, 3, 255, 183, 107, 4, 255, 175, 94, 2, 255, 164, 91, 6, 255, 138, 77, 8, 255, 109, 66, 2, 255, 89, 61, 2, 255, 93, 61, 3, 255, 97, 58, 6, 255, 103, 59, 6, 255, 112, 68, 2, 255, 115, 72, 4, 255, 105, 64, 9, 255, 107, 68, 6, 255, 106, 66, 5, 255, 113, 65, 6, 255, 107, 66, 4, 255, 105, 61, 0, 255, 111, 63, 5, 255, 111, 67, 6, 255, 119, 72, 5, 255, 116, 68, 4, 255, 111, 73, 12, 255, 120, 92, 22, 255, 137, 108, 8, 255, 158, 107, 7, 255, 152, 84, 12, 255, 129, 78, 4, 255, 118, 76, 4, 255, 120, 75, 6, 255, 118, 80, 8, 255, 118, 80, 7, 255, 129, 80, 6, 255, 149, 98, 19, 255, 158, 104, 20, 255, 151, 104, 6, 255, 158, 102, 11, 255, 155, 102, 20, 255, 170, 128, 31, 255, 179, 134, 31, 255, 163, 113, 13, 255, 138, 84, 9, 255, 127, 74, 15, 255, 125, 80, 4, 255, 125, 84, 14, 255, 123, 79, 13, 255, 119, 71, 4, 255, 119, 65, 1, 255, 122, 66, 0, 255, 127, 65, 1, 255, 124, 59, 1, 255, 121, 58, 3, 255, 121, 61, 4, 255, 113, 61, 1, 255, 112, 56, 9, 255, 128, 66, 6, 255, 136, 65, 4, 255, 131, 62, 1, 255, 132, 66, 2, 255, 138, 59, 2, 255, 139, 63, 4, 255, 143, 70, 2, 255, 145, 66, 6, 255, 138, 62, 7, 255, 133, 61, 0, 255, 124, 58, 4, 255, 121, 60, 5, 255, 120, 62, 7, 255, 129, 67, 3, 255, 132, 68, 5, 255, 137, 66, 3, 255, 157, 75, 10, 255, 142, 65, 6, 255, 131, 61, 3, 255, 137, 65, 6, 255, 134, 61, 2, 255, 135, 62, 2, 255, 136, 61, 8, 255, 133, 58, 11, 255, 134, 64, 11, 255, 136, 67, 4, 255, 136, 64, 6, 255, 137, 62, 12, 255, 137, 65, 9, 255, 135, 64, 7, 255, 133, 64, 5, 255, 134, 67, 3, 255, 133, 65, 5, 255, 134, 64, 9, 255, 126, 66, 6, 255, 135, 65, 3, 255, 136, 67, 2, 255, 136, 65, 2, 255, 136, 68, 7, 255, 126, 60, 9, 255, 123, 59, 6, 255, 123, 62, 0, 255, 122, 61, 4, 255, 119, 58, 15, 255, 116, 54, 5, 255, 116, 60, 3, 255, 115, 60, 9, 255, 134, 68, 5, 255, 146, 74, 11, 255, 145, 77, 14, 255, 148, 79, 14, 255, 163, 90, 12, 255, 165, 91, 15, 255, 158, 85, 15, 255, 166, 96, 16, 255, 183, 112, 21, 255, 189, 115, 10, 255, 193, 116, 22, 255, 196, 120, 18, 255, 197, 122, 14, 255, 199, 124, 8, 255, 202, 123, 18, 255, 194, 114, 15, 255, 191, 110, 7, 255, 195, 110, 21, 255, 200, 126, 12, 255, 205, 135, 9, 255, 212, 137, 26, 255, 212, 136, 17, 255, 212, 135, 13, 255, 213, 136, 18, 255, 214, 140, 8, 255, 214, 142, 7, 255, 215, 144, 13, 255, 216, 143, 17, 255, 215, 140, 18, 255, 215, 141, 14, 255, 219, 144, 12, 255, 213, 139, 0, 255, 211, 137, 11, 255, 209, 137, 7, 255, 212, 137, 9, 255, 217, 142, 7, 255, 215, 141, 8, 255, 213, 136, 12, 255, 216, 136, 14, 255, 219, 142, 12, 255, 213, 144, 7, 255, 212, 138, 8, 255, 208, 135, 10, 255, 206, 133, 5, 255, 207, 135, 2, 255, 217, 146, 10, 255, 221, 151, 10, 255, 214, 143, 0, 255, 211, 131, 10, 255, 207, 127, 4, 255, 207, 131, 4, 255, 218, 148, 8, 255, 217, 143, 8, 255, 216, 136, 1, 255, 212, 134, 11, 255, 205, 130, 10, 255, 209, 139, 5, 255, 214, 147, 7, 255, 213, 147, 3, 255, 212, 143, 4, 255, 213, 143, 11, 255, 210, 143, 13, 255, 203, 138, 7, 255, 207, 143, 6, 255, 214, 150, 8, 255, 203, 140, 2, 255, 199, 133, 17, 255, 208, 143, 18, 255, 209, 150, 5, 255, 207, 150, 3, 255, 208, 150, 8, 255, 209, 148, 9, 255, 209, 144, 11, 255, 206, 146, 4, 255, 211, 146, 9, 255, 205, 135, 6, 255, 201, 129, 6, 255, 199, 127, 9, 255, 203, 133, 14, 255, 210, 143, 10, 255, 207, 144, 6, 255, 208, 147, 4, 255, 206, 143, 8, 255, 204, 139, 16, 255, 206, 139, 16, 255, 205, 137, 7, 255, 205, 134, 5, 255, 203, 132, 11, 255, 204, 134, 17, 255, 196, 130, 7, 255, 165, 94, 14, 255, 147, 78, 6, 255, 166, 89, 0, 255, 175, 92, 5, 255, 174, 84, 12, 255, 176, 87, 3, 255, 181, 93, 1, 255, 173, 87, 0, 255, 175, 92, 2, 255, 192, 110, 10, 255, 191, 106, 5, 255, 194, 108, 7, 255, 187, 104, 3, 255, 185, 103, 5, 255, 191, 109, 10, 255, 192, 110, 6, 255, 189, 107, 6, 255, 193, 107, 13, 255, 194, 107, 9, 255, 191, 104, 8, 255, 191, 103, 1, 255, 187, 94, 1, 255, 184, 90, 2, 255, 178, 86, 4, 255, 178, 87, 7, 255, 175, 84, 4, 255, 174, 80, 9, 255, 165, 69, 8, 255, 155, 65, 6, 255, 160, 76, 10, 255, 164, 82, 6, 255, 171, 82, 10, 255, 139, 68, 0, 255, 145, 70, 2, 255, 138, 63, 4, 255, 123, 60, 12, 255, 110, 50, 8, 255, 102, 46, 1, 255, 101, 37, 2, 255, 130, 56, 7, 255, 130, 54, 0, 255, 135, 57, 7, 255, 139, 60, 5, 255, 130, 54, 2, 255, 136, 58, 11, 255, 152, 76, 8, 255, 162, 82, 2, 255, 168, 80, 4, 255, 176, 89, 8, 255, 186, 99, 4, 255, 189, 97, 4, 255, 187, 96, 1, 255, 184, 101, 1, 255, 185, 104, 3, 255, 189, 106, 3, 255, 192, 101, 5, 255, 180, 89, 3, 255, 177, 89, 1, 255, 184, 99, 3, 255, 180, 93, 1, 255, 173, 83, 3, 255, 151, 68, 5, 255, 128, 51, 2, 255, 125, 49, 3, 255, 125, 46, 5, 255, 115, 40, 2, 255, 119, 47, 6, 255, 124, 55, 1, 255, 122, 51, 7, 255, 123, 49, 5, 255, 124, 48, 1, 255, 120, 46, 6, 255, 121, 51, 3, 255, 121, 51, 5, 255, 111, 44, 5, 255, 116, 52, 6, 255, 112, 45, 3, 255, 108, 39, 1, 255, 116, 46, 4, 255, 118, 48, 1, 255, 120, 48, 2, 255, 111, 36, 7, 255, 111, 40, 2, 255, 110, 38, 3, 255, 119, 44, 4, 255, 116, 42, 4, 255, 114, 46, 2, 255, 122, 51, 5, 255, 108, 42, 5, 255, 107, 47, 4, 255, 123, 52, 3, 255, 123, 49, 2, 255, 123, 53, 1, 255, 127, 55, 5, 255, 126, 54, 2, 255, 128, 57, 2, 255, 124, 54, 1, 255, 117, 50, 2, 255, 120, 52, 2, 255, 123, 54, 2, 255, 127, 55, 2, 255, 128, 59, 6, 255, 121, 53, 3, 255, 120, 52, 3, 255, 116, 48, 2, 255, 109, 43, 2, 255, 103, 39, 3, 255, 102, 34, 2, 255, 99, 30, 0, 255, 95, 33, 1, 255, 89, 36, 3, 255, 91, 29, 1, 255, 90, 28, 3, 255, 85, 25, 4, 255, 80, 24, 3, 255, 82, 28, 4, 255, 82, 28, 4, 255, 77, 23, 2, 255, 78, 22, 1, 255, 78, 24, 1, 255, 79, 23, 3, 255, 80, 20, 3, 255, 78, 25, 3, 255, 76, 23, 1, 255, 77, 22, 2, 255, 79, 24, 4, 255, 75, 20, 2, 255, 4, 0, 7, 255, 3, 0, 3, 255, 0, 0, 10, 255, 4, 0, 11, 255, 3, 0, 0, 255, 0, 6, 100, 255, 34, 66, 233, 255, 74, 80, 51, 255, 38, 25, 0, 255, 33, 16, 19, 255, 29, 26, 139, 255, 4, 14, 85, 255, 12, 1, 0, 255, 14, 4, 5, 255, 15, 3, 3, 255, 21, 4, 4, 255, 26, 6, 6, 255, 29, 8, 9, 255, 24, 6, 6, 255, 21, 5, 5, 255, 26, 7, 5, 255, 30, 6, 2, 255, 42, 14, 8, 255, 39, 12, 5, 255, 35, 10, 5, 255, 32, 9, 7, 255, 34, 9, 7, 255, 44, 14, 7, 255, 42, 13, 6, 255, 33, 12, 5, 255, 40, 12, 5, 255, 49, 13, 4, 255, 42, 14, 5, 255, 44, 12, 3, 255, 38, 15, 2, 255, 41, 17, 6, 255, 42, 13, 5, 255, 41, 14, 3, 255, 37, 14, 3, 255, 41, 15, 4, 255, 47, 18, 3, 255, 52, 20, 2, 255, 62, 19, 3, 255, 70, 20, 4, 255, 69, 21, 5, 255, 50, 24, 2, 255, 45, 22, 1, 255, 54, 22, 4, 255, 43, 27, 0, 255, 50, 27, 1, 255, 57, 30, 5, 255, 60, 31, 5, 255, 58, 26, 1, 255, 60, 29, 2, 255, 63, 34, 1, 255, 71, 32, 4, 255, 75, 38, 4, 255, 66, 38, 4, 255, 73, 42, 4, 255, 73, 39, 2, 255, 104, 73, 11, 255, 109, 72, 13, 255, 87, 60, 3, 255, 85, 58, 1, 255, 90, 57, 11, 255, 141, 91, 4, 255, 144, 86, 2, 255, 138, 78, 4, 255, 143, 82, 3, 255, 141, 76, 3, 255, 137, 65, 5, 255, 120, 61, 2, 255, 113, 63, 3, 255, 102, 64, 6, 255, 123, 79, 3, 255, 108, 77, 5, 255, 134, 91, 7, 255, 179, 114, 10, 255, 188, 111, 7, 255, 174, 101, 9, 255, 179, 92, 2, 255, 179, 99, 3, 255, 170, 92, 5, 255, 138, 74, 4, 255, 106, 63, 5, 255, 107, 61, 12, 255, 90, 52, 16, 255, 107, 72, 5, 255, 104, 59, 8, 255, 92, 54, 8, 255, 111, 66, 3, 255, 111, 66, 2, 255, 95, 60, 8, 255, 104, 65, 7, 255, 105, 61, 2, 255, 96, 60, 7, 255, 95, 59, 8, 255, 104, 66, 5, 255, 105, 69, 3, 255, 103, 66, 3, 255, 99, 61, 6, 255, 107, 65, 6, 255, 121, 71, 6, 255, 116, 69, 6, 255, 119, 84, 12, 255, 148, 100, 12, 255, 164, 95, 6, 255, 149, 78, 10, 255, 123, 76, 2, 255, 118, 72, 2, 255, 114, 67, 3, 255, 121, 77, 11, 255, 135, 81, 8, 255, 150, 83, 15, 255, 157, 90, 12, 255, 151, 83, 9, 255, 143, 83, 3, 255, 161, 93, 4, 255, 170, 100, 9, 255, 195, 126, 26, 255, 224, 172, 23, 255, 237, 212, 15, 255, 236, 204, 11, 255, 232, 180, 22, 255, 227, 170, 27, 255, 216, 161, 23, 255, 213, 166, 55, 255, 222, 191, 104, 255, 226, 216, 164, 255, 227, 222, 188, 255, 228, 221, 183, 255, 228, 214, 164, 255, 225, 198, 86, 255, 217, 176, 17, 255, 196, 161, 16, 255, 181, 142, 20, 255, 190, 119, 17, 255, 182, 110, 18, 255, 179, 110, 14, 255, 165, 109, 11, 255, 165, 96, 15, 255, 170, 95, 22, 255, 165, 93, 17, 255, 158, 82, 22, 255, 153, 82, 27, 255, 152, 82, 26, 255, 157, 80, 23, 255, 159, 79, 12, 255, 157, 77, 15, 255, 153, 74, 9, 255, 147, 75, 9, 255, 141, 70, 8, 255, 140, 65, 5, 255, 147, 71, 5, 255, 140, 69, 3, 255, 135, 65, 10, 255, 135, 64, 2, 255, 134, 64, 3, 255, 135, 62, 13, 255, 134, 62, 8, 255, 129, 61, 3, 255, 132, 57, 2, 255, 139, 63, 9, 255, 137, 65, 7, 255, 132, 67, 3, 255, 142, 65, 8, 255, 140, 64, 7, 255, 137, 66, 9, 255, 139, 68, 4, 255, 141, 66, 2, 255, 137, 66, 3, 255, 133, 62, 12, 255, 142, 67, 12, 255, 147, 66, 5, 255, 139, 66, 9, 255, 125, 57, 7, 255, 131, 62, 14, 255, 138, 69, 9, 255, 134, 66, 3, 255, 128, 66, 4, 255, 128, 61, 10, 255, 131, 66, 14, 255, 140, 81, 10, 255, 160, 92, 9, 255, 170, 99, 15, 255, 175, 102, 24, 255, 181, 103, 11, 255, 188, 113, 2, 255, 191, 113, 13, 255, 193, 115, 17, 255, 200, 123, 16, 255, 202, 123, 17, 255, 201, 123, 19, 255, 203, 123, 18, 255, 203, 122, 18, 255, 203, 124, 9, 255, 204, 124, 9, 255, 200, 122, 10, 255, 186, 106, 12, 255, 178, 99, 8, 255, 185, 106, 21, 255, 205, 132, 15, 255, 212, 143, 6, 255, 215, 146, 9, 255, 215, 145, 19, 255, 212, 144, 10, 255, 213, 143, 17, 255, 217, 145, 20, 255, 220, 145, 11, 255, 221, 147, 10, 255, 213, 145, 12, 255, 216, 143, 16, 255, 219, 147, 14, 255, 219, 144, 1, 255, 214, 138, 4, 255, 204, 134, 15, 255, 208, 140, 14, 255, 213, 146, 10, 255, 212, 147, 8, 255, 218, 143, 9, 255, 211, 131, 3, 255, 204, 125, 11, 255, 203, 132, 6, 255, 200, 134, 4, 255, 210, 139, 13, 255, 218, 146, 2, 255, 211, 142, 2, 255, 209, 140, 9, 255, 217, 146, 6, 255, 221, 152, 5, 255, 215, 148, 2, 255, 210, 141, 4, 255, 206, 138, 5, 255, 216, 147, 10, 255, 225, 154, 11, 255, 216, 144, 3, 255, 213, 139, 1, 255, 214, 139, 3, 255, 211, 142, 3, 255, 216, 151, 5, 255, 215, 149, 5, 255, 215, 148, 7, 255, 211, 144, 3, 255, 212, 146, 6, 255, 209, 147, 4, 255, 210, 149, 7, 255, 212, 154, 12, 255, 213, 153, 8, 255, 206, 141, 1, 255, 204, 137, 4, 255, 208, 144, 3, 255, 211, 152, 8, 255, 209, 153, 8, 255, 207, 153, 0, 255, 205, 147, 3, 255, 204, 141, 7, 255, 211, 148, 3, 255, 204, 142, 9, 255, 194, 130, 6, 255, 194, 126, 0, 255, 196, 123, 8, 255, 206, 139, 10, 255, 209, 147, 9, 255, 210, 149, 6, 255, 209, 147, 7, 255, 205, 144, 6, 255, 206, 144, 8, 255, 207, 142, 15, 255, 203, 140, 6, 255, 204, 137, 8, 255, 205, 134, 19, 255, 207, 139, 14, 255, 199, 130, 8, 255, 181, 106, 8, 255, 177, 101, 7, 255, 178, 99, 5, 255, 183, 103, 5, 255, 188, 109, 5, 255, 183, 103, 7, 255, 172, 88, 2, 255, 171, 83, 6, 255, 175, 84, 15, 255, 186, 95, 6, 255, 184, 99, 1, 255, 192, 110, 6, 255, 192, 111, 6, 255, 194, 112, 10, 255, 196, 112, 5, 255, 193, 112, 4, 255, 188, 106, 4, 255, 194, 108, 9, 255, 195, 108, 9, 255, 186, 96, 10, 255, 178, 84, 7, 255, 177, 85, 3, 255, 184, 93, 3, 255, 182, 90, 2, 255, 175, 84, 4, 255, 163, 70, 3, 255, 158, 62, 3, 255, 168, 70, 8, 255, 176, 82, 6, 255, 164, 76, 11, 255, 150, 62, 4, 255, 162, 71, 5, 255, 152, 68, 2, 255, 152, 77, 6, 255, 129, 61, 9, 255, 131, 62, 11, 255, 123, 54, 2, 255, 109, 50, 0, 255, 104, 48, 8, 255, 109, 47, 4, 255, 139, 65, 6, 255, 148, 66, 0, 255, 139, 64, 4, 255, 130, 53, 5, 255, 138, 60, 4, 255, 152, 73, 9, 255, 149, 67, 5, 255, 138, 57, 8, 255, 151, 68, 0, 255, 165, 79, 4, 255, 164, 74, 4, 255, 173, 85, 1, 255, 175, 82, 5, 255, 172, 81, 3, 255, 175, 86, 1, 255, 181, 91, 2, 255, 179, 89, 0, 255, 183, 91, 0, 255, 188, 94, 4, 255, 185, 90, 2, 255, 174, 85, 2, 255, 155, 77, 4, 255, 132, 59, 2, 255, 123, 48, 1, 255, 123, 47, 5, 255, 115, 42, 3, 255, 121, 48, 2, 255, 125, 49, 1, 255, 130, 52, 6, 255, 126, 50, 3, 255, 121, 48, 0, 255, 122, 49, 3, 255, 120, 46, 1, 255, 118, 45, 1, 255, 116, 45, 4, 255, 116, 45, 5, 255, 121, 47, 6, 255, 123, 47, 5, 255, 121, 45, 2, 255, 116, 43, 4, 255, 120, 46, 3, 255, 116, 42, 1, 255, 113, 41, 4, 255, 109, 38, 3, 255, 117, 42, 8, 255, 118, 44, 7, 255, 107, 33, 3, 255, 108, 35, 3, 255, 119, 49, 4, 255, 121, 53, 0, 255, 124, 52, 1, 255, 128, 54, 2, 255, 130, 56, 6, 255, 130, 57, 4, 255, 124, 53, 0, 255, 117, 51, 1, 255, 121, 53, 2, 255, 127, 56, 4, 255, 128, 57, 1, 255, 137, 66, 2, 255, 140, 63, 1, 255, 132, 54, 2, 255, 130, 56, 10, 255, 124, 57, 3, 255, 119, 54, 5, 255, 104, 38, 4, 255, 99, 33, 3, 255, 100, 35, 6, 255, 94, 35, 3, 255, 94, 33, 2, 255, 98, 35, 4, 255, 92, 30, 3, 255, 86, 27, 2, 255, 84, 27, 4, 255, 81, 23, 3, 255, 79, 23, 4, 255, 81, 22, 3, 255, 78, 25, 4, 255, 66, 21, 1, 255, 69, 21, 1, 255, 78, 21, 4, 255, 77, 18, 3, 255, 73, 23, 3, 255, 69, 20, 0, 255, 70, 19, 2, 255, 79, 25, 6, 255, 76, 23, 2, 255, 2, 0, 9, 255, 4, 1, 18, 255, 0, 4, 13, 255, 2, 2, 0, 255, 0, 4, 90, 255, 27, 65, 231, 255, 82, 82, 66, 255, 39, 25, 0, 255, 36, 13, 7, 255, 29, 22, 126, 255, 0, 15, 93, 255, 15, 2, 0, 255, 17, 3, 7, 255, 12, 2, 1, 255, 16, 4, 3, 255, 25, 8, 8, 255, 26, 8, 7, 255, 29, 11, 10, 255, 25, 7, 7, 255, 21, 7, 6, 255, 26, 11, 9, 255, 31, 11, 7, 255, 35, 11, 5, 255, 33, 10, 5, 255, 30, 11, 5, 255, 32, 11, 8, 255, 34, 12, 8, 255, 38, 13, 3, 255, 37, 12, 3, 255, 30, 10, 5, 255, 36, 8, 1, 255, 44, 14, 3, 255, 41, 15, 5, 255, 46, 18, 7, 255, 36, 15, 3, 255, 38, 14, 3, 255, 42, 14, 6, 255, 45, 17, 6, 255, 43, 11, 4, 255, 42, 15, 5, 255, 46, 18, 3, 255, 53, 19, 1, 255, 56, 25, 5, 255, 54, 22, 1, 255, 56, 18, 0, 255, 52, 22, 1, 255, 53, 24, 3, 255, 45, 25, 2, 255, 39, 26, 0, 255, 47, 26, 3, 255, 54, 29, 4, 255, 57, 25, 1, 255, 68, 32, 2, 255, 64, 30, 6, 255, 67, 36, 3, 255, 64, 36, 2, 255, 58, 37, 5, 255, 62, 40, 4, 255, 70, 38, 3, 255, 91, 54, 1, 255, 92, 64, 3, 255, 81, 58, 3, 255, 84, 56, 2, 255, 78, 46, 3, 255, 112, 75, 4, 255, 167, 106, 5, 255, 164, 103, 2, 255, 158, 94, 6, 255, 166, 92, 3, 255, 160, 90, 6, 255, 144, 75, 5, 255, 123, 64, 2, 255, 122, 73, 7, 255, 123, 77, 2, 255, 101, 77, 3, 255, 148, 104, 11, 255, 178, 119, 1, 255, 172, 100, 2, 255, 170, 98, 4, 255, 157, 94, 8, 255, 154, 88, 7, 255, 164, 99, 9, 255, 139, 76, 5, 255, 110, 68, 3, 255, 119, 76, 8, 255, 99, 67, 7, 255, 119, 75, 11, 255, 113, 61, 8, 255, 92, 54, 4, 255, 126, 81, 7, 255, 108, 65, 7, 255, 90, 56, 9, 255, 122, 74, 12, 255, 123, 72, 6, 255, 96, 58, 0, 255, 99, 59, 10, 255, 137, 81, 10, 255, 143, 81, 8, 255, 102, 63, 7, 255, 124, 64, 10, 255, 128, 72, 8, 255, 141, 86, 13, 255, 155, 82, 10, 255, 127, 59, 19, 255, 144, 72, 12, 255, 141, 74, 2, 255, 134, 71, 12, 255, 126, 72, 12, 255, 119, 70, 7, 255, 116, 74, 16, 255, 125, 82, 9, 255, 151, 93, 13, 255, 160, 92, 6, 255, 156, 91, 4, 255, 154, 89, 11, 255, 160, 92, 4, 255, 158, 87, 0, 255, 145, 81, 7, 255, 135, 69, 10, 255, 127, 65, 2, 255, 126, 60, 2, 255, 152, 62, 9, 255, 161, 73, 3, 255, 155, 81, 2, 255, 151, 73, 4, 255, 137, 60, 3, 255, 144, 69, 1, 255, 186, 103, 7, 255, 203, 129, 24, 255, 208, 143, 51, 255, 224, 166, 61, 255, 229, 175, 68, 255, 228, 172, 34, 255, 230, 174, 3, 255, 231, 168, 12, 255, 230, 164, 16, 255, 192, 112, 9, 255, 187, 109, 15, 255, 228, 143, 7, 255, 240, 164, 22, 255, 233, 174, 23, 255, 235, 179, 36, 255, 238, 195, 60, 255, 232, 208, 125, 255, 233, 222, 151, 255, 244, 228, 146, 255, 251, 231, 126, 255, 250, 225, 41, 255, 246, 208, 0, 255, 237, 174, 21, 255, 216, 140, 18, 255, 195, 120, 4, 255, 172, 93, 10, 255, 181, 102, 14, 255, 180, 94, 0, 255, 168, 80, 2, 255, 147, 69, 3, 255, 145, 67, 10, 255, 146, 74, 6, 255, 146, 72, 3, 255, 144, 71, 12, 255, 143, 68, 9, 255, 137, 64, 1, 255, 137, 67, 3, 255, 141, 70, 4, 255, 146, 65, 6, 255, 138, 63, 8, 255, 128, 64, 10, 255, 135, 67, 9, 255, 143, 67, 2, 255, 145, 72, 9, 255, 136, 73, 8, 255, 137, 73, 6, 255, 144, 64, 12, 255, 134, 63, 9, 255, 131, 63, 6, 255, 148, 79, 12, 255, 155, 86, 13, 255, 149, 78, 12, 255, 146, 82, 12, 255, 156, 93, 11, 255, 170, 99, 18, 255, 183, 103, 19, 255, 185, 104, 11, 255, 192, 109, 15, 255, 190, 107, 16, 255, 193, 113, 11, 255, 196, 116, 10, 255, 203, 123, 22, 255, 202, 124, 14, 255, 202, 125, 7, 255, 203, 125, 14, 255, 205, 124, 19, 255, 208, 127, 15, 255, 209, 131, 17, 255, 206, 134, 12, 255, 205, 133, 11, 255, 211, 127, 15, 255, 213, 133, 15, 255, 214, 142, 12, 255, 215, 145, 13, 255, 207, 134, 11, 255, 208, 132, 13, 255, 218, 147, 17, 255, 219, 148, 16, 255, 219, 143, 16, 255, 217, 150, 5, 255, 218, 149, 20, 255, 219, 147, 16, 255, 220, 147, 6, 255, 219, 145, 7, 255, 222, 145, 11, 255, 219, 146, 15, 255, 214, 141, 6, 255, 208, 134, 2, 255, 205, 137, 10, 255, 219, 149, 12, 255, 224, 147, 14, 255, 215, 141, 6, 255, 207, 130, 4, 255, 196, 118, 5, 255, 202, 129, 8, 255, 208, 139, 10, 255, 208, 140, 5, 255, 211, 147, 7, 255, 210, 143, 9, 255, 216, 144, 8, 255, 212, 143, 5, 255, 217, 156, 11, 255, 228, 164, 11, 255, 224, 155, 13, 255, 215, 147, 6, 255, 211, 144, 5, 255, 221, 151, 8, 255, 225, 155, 8, 255, 219, 148, 12, 255, 218, 150, 5, 255, 220, 154, 10, 255, 214, 152, 5, 255, 216, 156, 5, 255, 215, 154, 4, 255, 217, 153, 4, 255, 214, 149, 1, 255, 214, 149, 7, 255, 211, 148, 5, 255, 205, 144, 7, 255, 211, 153, 9, 255, 211, 152, 4, 255, 207, 145, 2, 255, 208, 142, 10, 255, 210, 148, 5, 255, 211, 153, 3, 255, 210, 154, 10, 255, 208, 150, 11, 255, 203, 146, 2, 255, 206, 146, 6, 255, 206, 145, 9, 255, 194, 134, 4, 255, 196, 130, 14, 255, 197, 125, 7, 255, 206, 131, 10, 255, 208, 140, 14, 255, 211, 151, 9, 255, 210, 152, 3, 255, 211, 150, 5, 255, 210, 149, 5, 255, 205, 143, 5, 255, 202, 137, 13, 255, 203, 138, 14, 255, 204, 140, 11, 255, 204, 137, 11, 255, 209, 143, 10, 255, 195, 124, 7, 255, 190, 114, 16, 255, 194, 119, 11, 255, 188, 111, 6, 255, 193, 117, 7, 255, 195, 120, 1, 255, 192, 114, 10, 255, 189, 108, 11, 255, 185, 103, 5, 255, 188, 101, 7, 255, 192, 103, 7, 255, 192, 104, 15, 255, 196, 113, 10, 255, 196, 116, 4, 255, 191, 111, 6, 255, 192, 110, 11, 255, 191, 109, 9, 255, 191, 107, 12, 255, 188, 101, 9, 255, 176, 86, 3, 255, 175, 81, 0, 255, 178, 81, 2, 255, 171, 75, 2, 255, 170, 74, 4, 255, 169, 71, 7, 255, 164, 70, 7, 255, 161, 70, 7, 255, 162, 72, 6, 255, 168, 77, 11, 255, 164, 71, 2, 255, 150, 66, 1, 255, 136, 58, 0, 255, 135, 58, 2, 255, 135, 55, 7, 255, 136, 60, 7, 255, 134, 64, 9, 255, 133, 64, 4, 255, 132, 61, 6, 255, 130, 62, 6, 255, 122, 57, 8, 255, 105, 46, 2, 255, 143, 71, 10, 255, 155, 68, 5, 255, 134, 58, 2, 255, 124, 46, 6, 255, 148, 67, 9, 255, 152, 75, 12, 255, 139, 69, 10, 255, 134, 65, 1, 255, 153, 76, 2, 255, 155, 69, 4, 255, 144, 54, 6, 255, 150, 65, 8, 255, 154, 74, 3, 255, 167, 82, 4, 255, 168, 81, 5, 255, 173, 86, 11, 255, 175, 89, 5, 255, 180, 93, 0, 255, 183, 95, 1, 255, 178, 86, 0, 255, 172, 78, 2, 255, 157, 70, 3, 255, 149, 68, 3, 255, 148, 67, 0, 255, 144, 63, 1, 255, 140, 61, 9, 255, 131, 51, 10, 255, 130, 52, 5, 255, 131, 54, 2, 255, 129, 52, 2, 255, 125, 48, 6, 255, 125, 47, 6, 255, 121, 45, 4, 255, 117, 45, 2, 255, 119, 43, 0, 255, 117, 40, 2, 255, 121, 43, 9, 255, 116, 40, 4, 255, 118, 46, 2, 255, 113, 41, 2, 255, 111, 36, 2, 255, 118, 46, 6, 255, 112, 43, 1, 255, 109, 41, 1, 255, 120, 50, 1, 255, 113, 46, 0, 255, 109, 40, 6, 255, 124, 51, 9, 255, 123, 49, 3, 255, 124, 51, 3, 255, 126, 54, 7, 255, 136, 64, 4, 255, 147, 66, 0, 255, 150, 67, 4, 255, 147, 63, 5, 255, 147, 64, 5, 255, 158, 74, 5, 255, 163, 80, 1, 255, 171, 82, 5, 255, 168, 80, 1, 255, 159, 71, 2, 255, 141, 57, 2, 255, 133, 57, 0, 255, 129, 54, 0, 255, 125, 51, 4, 255, 117, 45, 2, 255, 106, 35, 1, 255, 94, 30, 1, 255, 90, 33, 3, 255, 87, 31, 1, 255, 90, 32, 2, 255, 86, 32, 4, 255, 78, 26, 0, 255, 75, 25, 1, 255, 72, 24, 1, 255, 71, 24, 2, 255, 70, 23, 1, 255, 74, 26, 3, 255, 70, 23, 2, 255, 61, 20, 2, 255, 69, 22, 4, 255, 63, 21, 3, 255, 55, 24, 2, 255, 70, 20, 3, 255, 70, 20, 3, 255, 75, 21, 5, 255, 75, 22, 1, 255, 1, 2, 13, 255, 1, 1, 25, 255, 5, 5, 5, 255, 0, 2, 66, 255, 17, 66, 228, 255, 82, 87, 72, 255, 54, 36, 0, 255, 46, 16, 3, 255, 34, 29, 123, 255, 6, 19, 117, 255, 8, 4, 1, 255, 11, 3, 3, 255, 14, 0, 3, 255, 17, 3, 2, 255, 22, 6, 6, 255, 23, 5, 3, 255, 26, 8, 6, 255, 22, 5, 3, 255, 21, 7, 4, 255, 23, 11, 9, 255, 22, 8, 8, 255, 32, 14, 12, 255, 32, 12, 8, 255, 30, 11, 6, 255, 28, 10, 3, 255, 31, 9, 3, 255, 35, 12, 4, 255, 35, 14, 4, 255, 34, 11, 2, 255, 34, 10, 3, 255, 44, 14, 6, 255, 42, 13, 2, 255, 47, 12, 5, 255, 45, 17, 5, 255, 39, 15, 4, 255, 41, 13, 6, 255, 34, 13, 4, 255, 35, 15, 4, 255, 42, 16, 3, 255, 46, 19, 3, 255, 48, 19, 0, 255, 54, 20, 3, 255, 62, 23, 7, 255, 60, 18, 5, 255, 56, 17, 3, 255, 52, 21, 2, 255, 52, 21, 2, 255, 43, 23, 2, 255, 45, 24, 1, 255, 52, 26, 3, 255, 57, 26, 5, 255, 51, 32, 2, 255, 58, 34, 4, 255, 57, 31, 2, 255, 66, 36, 4, 255, 59, 37, 3, 255, 57, 37, 8, 255, 68, 37, 0, 255, 86, 51, 5, 255, 92, 59, 4, 255, 72, 48, 5, 255, 75, 53, 1, 255, 75, 53, 3, 255, 76, 44, 5, 255, 95, 59, 6, 255, 135, 87, 8, 255, 157, 99, 4, 255, 160, 95, 5, 255, 165, 99, 7, 255, 174, 97, 9, 255, 151, 84, 5, 255, 129, 68, 5, 255, 121, 79, 10, 255, 121, 83, 6, 255, 150, 110, 2, 255, 184, 113, 6, 255, 178, 102, 17, 255, 179, 106, 17, 255, 182, 109, 26, 255, 192, 122, 29, 255, 192, 123, 18, 255, 185, 105, 19, 255, 180, 101, 23, 255, 185, 104, 30, 255, 182, 105, 20, 255, 173, 103, 12, 255, 173, 105, 8, 255, 165, 91, 20, 255, 167, 93, 15, 255, 174, 97, 18, 255, 162, 85, 11, 255, 165, 98, 6, 255, 171, 104, 5, 255, 171, 98, 15, 255, 171, 96, 17, 255, 174, 98, 12, 255, 174, 101, 11, 255, 178, 98, 14, 255, 174, 89, 10, 255, 167, 81, 12, 255, 170, 88, 14, 255, 177, 98, 17, 255, 177, 100, 15, 255, 178, 104, 11, 255, 184, 111, 16, 255, 188, 107, 5, 255, 192, 111, 8, 255, 189, 114, 21, 255, 199, 116, 16, 255, 202, 123, 16, 255, 197, 120, 21, 255, 194, 122, 9, 255, 196, 121, 13, 255, 189, 111, 12, 255, 195, 117, 19, 255, 202, 123, 15, 255, 200, 115, 11, 255, 185, 106, 10, 255, 186, 107, 11, 255, 195, 116, 6, 255, 186, 115, 8, 255, 185, 112, 15, 255, 178, 105, 11, 255, 169, 99, 4, 255, 164, 84, 6, 255, 164, 85, 11, 255, 158, 85, 6, 255, 151, 70, 12, 255, 137, 65, 4, 255, 135, 62, 2, 255, 146, 64, 1, 255, 145, 61, 3, 255, 142, 57, 0, 255, 136, 53, 9, 255, 132, 49, 12, 255, 124, 47, 9, 255, 125, 60, 8, 255, 133, 58, 1, 255, 124, 49, 4, 255, 144, 63, 6, 255, 178, 88, 2, 255, 184, 92, 3, 255, 187, 99, 1, 255, 195, 105, 0, 255, 198, 108, 2, 255, 203, 115, 2, 255, 210, 114, 4, 255, 210, 114, 9, 255, 205, 114, 1, 255, 201, 111, 6, 255, 198, 105, 4, 255, 209, 114, 1, 255, 206, 107, 3, 255, 203, 108, 12, 255, 193, 106, 6, 255, 202, 109, 9, 255, 189, 90, 11, 255, 178, 88, 8, 255, 172, 85, 5, 255, 177, 78, 6, 255, 174, 83, 4, 255, 162, 80, 6, 255, 147, 73, 2, 255, 146, 77, 4, 255, 155, 80, 3, 255, 150, 76, 3, 255, 169, 82, 8, 255, 176, 86, 8, 255, 174, 83, 5, 255, 161, 77, 5, 255, 141, 71, 16, 255, 134, 71, 7, 255, 146, 74, 3, 255, 138, 68, 6, 255, 135, 66, 13, 255, 148, 80, 11, 255, 172, 102, 9, 255, 177, 99, 12, 255, 181, 102, 10, 255, 193, 112, 7, 255, 186, 110, 10, 255, 184, 105, 8, 255, 168, 83, 5, 255, 168, 89, 6, 255, 187, 112, 10, 255, 192, 111, 12, 255, 204, 123, 15, 255, 202, 121, 14, 255, 201, 121, 22, 255, 206, 129, 20, 255, 209, 133, 13, 255, 210, 131, 19, 255, 213, 130, 17, 255, 213, 139, 7, 255, 215, 143, 5, 255, 218, 141, 17, 255, 220, 144, 7, 255, 219, 145, 16, 255, 218, 144, 14, 255, 220, 147, 11, 255, 219, 147, 12, 255, 216, 142, 12, 255, 220, 145, 18, 255, 218, 145, 15, 255, 216, 146, 8, 255, 220, 143, 13, 255, 218, 146, 15, 255, 218, 149, 11, 255, 221, 150, 15, 255, 221, 148, 7, 255, 219, 141, 10, 255, 220, 141, 7, 255, 215, 142, 1, 255, 215, 143, 6, 255, 219, 147, 6, 255, 223, 154, 9, 255, 216, 139, 7, 255, 211, 130, 9, 255, 197, 118, 7, 255, 191, 113, 15, 255, 197, 127, 12, 255, 207, 144, 8, 255, 208, 144, 7, 255, 215, 148, 6, 255, 214, 153, 7, 255, 218, 152, 14, 255, 217, 149, 3, 255, 224, 157, 5, 255, 229, 164, 5, 255, 224, 158, 5, 255, 214, 141, 13, 255, 217, 147, 4, 255, 225, 160, 2, 255, 227, 160, 9, 255, 222, 155, 4, 255, 220, 155, 5, 255, 221, 157, 11, 255, 217, 158, 5, 255, 213, 157, 3, 255, 213, 158, 2, 255, 216, 158, 1, 255, 220, 159, 4, 255, 216, 155, 0, 255, 218, 155, 5, 255, 207, 146, 6, 255, 212, 151, 15, 255, 217, 162, 3, 255, 211, 156, 7, 255, 209, 151, 6, 255, 209, 149, 5, 255, 211, 151, 5, 255, 211, 154, 4, 255, 209, 152, 2, 255, 207, 146, 18, 255, 205, 145, 15, 255, 208, 151, 3, 255, 193, 133, 9, 255, 195, 134, 1, 255, 199, 133, 5, 255, 202, 129, 5, 255, 207, 137, 1, 255, 208, 144, 3, 255, 210, 153, 13, 255, 213, 156, 14, 255, 214, 153, 10, 255, 210, 148, 3, 255, 208, 145, 1, 255, 207, 143, 8, 255, 206, 143, 10, 255, 208, 144, 5, 255, 205, 140, 7, 255, 208, 142, 8, 255, 202, 133, 6, 255, 197, 124, 14, 255, 196, 125, 7, 255, 195, 124, 5, 255, 200, 127, 8, 255, 200, 126, 5, 255, 198, 121, 10, 255, 197, 118, 11, 255, 202, 123, 6, 255, 197, 117, 0, 255, 201, 118, 13, 255, 202, 118, 11, 255, 201, 119, 5, 255, 197, 115, 1, 255, 192, 113, 3, 255, 190, 110, 14, 255, 191, 107, 6, 255, 190, 104, 7, 255, 181, 91, 8, 255, 173, 78, 6, 255, 171, 74, 0, 255, 173, 73, 3, 255, 172, 80, 12, 255, 163, 73, 6, 255, 168, 74, 0, 255, 171, 76, 6, 255, 164, 70, 5, 255, 163, 71, 2, 255, 156, 66, 2, 255, 152, 63, 6, 255, 152, 61, 8, 255, 136, 50, 6, 255, 135, 57, 8, 255, 124, 50, 0, 255, 127, 50, 5, 255, 147, 74, 6, 255, 131, 59, 5, 255, 132, 62, 8, 255, 133, 65, 4, 255, 131, 61, 6, 255, 112, 46, 2, 255, 129, 58, 4, 255, 150, 71, 3, 255, 123, 45, 9, 255, 131, 51, 13, 255, 163, 83, 6, 255, 173, 94, 2, 255, 176, 98, 3, 255, 180, 89, 2, 255, 160, 72, 2, 255, 134, 53, 2, 255, 131, 55, 2, 255, 149, 73, 3, 255, 178, 99, 2, 255, 191, 107, 3, 255, 191, 103, 4, 255, 180, 93, 5, 255, 176, 89, 2, 255, 179, 91, 2, 255, 179, 88, 0, 255, 179, 88, 0, 255, 182, 92, 3, 255, 173, 87, 3, 255, 163, 78, 6, 255, 154, 67, 4, 255, 146, 59, 2, 255, 147, 67, 2, 255, 148, 66, 3, 255, 140, 62, 3, 255, 130, 56, 0, 255, 131, 53, 2, 255, 128, 48, 0, 255, 126, 48, 0, 255, 125, 50, 3, 255, 117, 45, 3, 255, 110, 43, 4, 255, 105, 42, 3, 255, 102, 38, 0, 255, 105, 40, 0, 255, 109, 41, 3, 255, 106, 40, 6, 255, 106, 41, 3, 255, 110, 43, 3, 255, 111, 43, 3, 255, 112, 43, 3, 255, 116, 43, 5, 255, 115, 44, 2, 255, 119, 48, 8, 255, 117, 45, 6, 255, 110, 39, 0, 255, 122, 52, 2, 255, 136, 62, 5, 255, 142, 66, 1, 255, 151, 69, 1, 255, 164, 75, 2, 255, 175, 83, 5, 255, 178, 86, 5, 255, 176, 83, 2, 255, 174, 80, 1, 255, 178, 79, 2, 255, 175, 77, 1, 255, 157, 63, 1, 255, 134, 46, 2, 255, 128, 49, 3, 255, 129, 54, 3, 255, 128, 53, 3, 255, 120, 48, 1, 255, 109, 39, 3, 255, 93, 30, 1, 255, 85, 29, 1, 255, 86, 31, 2, 255, 85, 31, 2, 255, 82, 29, 2, 255, 78, 25, 0, 255, 79, 26, 3, 255, 75, 25, 3, 255, 69, 23, 2, 255, 63, 19, 0, 255, 63, 20, 0, 255, 80, 23, 7, 255, 76, 23, 8, 255, 65, 17, 3, 255, 63, 18, 3, 255, 55, 16, 1, 255, 63, 18, 4, 255, 62, 20, 1, 255, 65, 18, 0, 255, 69, 20, 2, 255, 1, 5, 19, 255, 1, 1, 0, 255, 3, 0, 59, 255, 14, 52, 229, 255, 73, 84, 93, 255, 58, 34, 0, 255, 36, 13, 0, 255, 47, 27, 106, 255, 4, 25, 141, 255, 14, 4, 10, 255, 14, 6, 3, 255, 15, 5, 6, 255, 17, 4, 1, 255, 18, 2, 2, 255, 21, 5, 5, 255, 22, 6, 5, 255, 23, 7, 4, 255, 20, 5, 2, 255, 20, 6, 2, 255, 18, 4, 3, 255, 23, 9, 8, 255, 27, 11, 9, 255, 28, 10, 7, 255, 27, 7, 4, 255, 35, 15, 11, 255, 32, 8, 3, 255, 34, 11, 5, 255, 31, 14, 6, 255, 29, 9, 2, 255, 36, 12, 5, 255, 46, 14, 9, 255, 38, 13, 3, 255, 41, 13, 4, 255, 40, 15, 4, 255, 36, 14, 3, 255, 38, 10, 5, 255, 33, 14, 5, 255, 37, 15, 4, 255, 47, 19, 5, 255, 49, 17, 1, 255, 51, 18, 0, 255, 49, 22, 2, 255, 49, 20, 4, 255, 48, 21, 6, 255, 41, 23, 6, 255, 38, 23, 5, 255, 40, 25, 4, 255, 49, 27, 6, 255, 48, 27, 2, 255, 46, 28, 2, 255, 46, 29, 2, 255, 50, 34, 3, 255, 60, 36, 4, 255, 66, 37, 5, 255, 66, 33, 11, 255, 61, 42, 1, 255, 61, 40, 2, 255, 80, 46, 4, 255, 93, 60, 4, 255, 76, 49, 2, 255, 72, 49, 7, 255, 74, 54, 0, 255, 60, 48, 5, 255, 80, 47, 5, 255, 77, 41, 6, 255, 94, 62, 3, 255, 143, 90, 2, 255, 155, 91, 1, 255, 164, 96, 5, 255, 165, 90, 1, 255, 147, 85, 2, 255, 115, 69, 2, 255, 123, 79, 5, 255, 164, 105, 15, 255, 188, 110, 19, 255, 194, 113, 22, 255, 200, 123, 32, 255, 202, 134, 29, 255, 208, 142, 24, 255, 213, 145, 17, 255, 201, 125, 20, 255, 194, 116, 27, 255, 198, 122, 22, 255, 200, 119, 25, 255, 198, 122, 26, 255, 201, 124, 19, 255, 199, 121, 13, 255, 201, 120, 22, 255, 199, 120, 11, 255, 190, 118, 19, 255, 196, 119, 21, 255, 200, 118, 14, 255, 196, 118, 15, 255, 195, 117, 17, 255, 199, 115, 20, 255, 197, 116, 14, 255, 192, 114, 19, 255, 198, 115, 19, 255, 193, 115, 17, 255, 189, 115, 9, 255, 186, 114, 14, 255, 199, 120, 18, 255, 200, 120, 10, 255, 201, 119, 15, 255, 197, 116, 8, 255, 199, 117, 12, 255, 200, 126, 13, 255, 202, 121, 19, 255, 198, 122, 16, 255, 201, 121, 13, 255, 198, 116, 7, 255, 194, 115, 15, 255, 191, 109, 15, 255, 202, 116, 8, 255, 204, 117, 21, 255, 201, 117, 10, 255, 197, 120, 11, 255, 198, 111, 4, 255, 203, 120, 4, 255, 201, 120, 10, 255, 206, 119, 10, 255, 201, 122, 11, 255, 198, 116, 14, 255, 205, 118, 7, 255, 198, 115, 7, 255, 190, 103, 12, 255, 194, 105, 9, 255, 187, 108, 13, 255, 188, 106, 8, 255, 182, 104, 8, 255, 183, 101, 15, 255, 176, 99, 12, 255, 176, 103, 1, 255, 171, 101, 9, 255, 159, 91, 10, 255, 150, 74, 9, 255, 138, 69, 6, 255, 128, 64, 4, 255, 112, 61, 14, 255, 111, 53, 4, 255, 120, 52, 9, 255, 137, 64, 7, 255, 145, 68, 4, 255, 146, 64, 7, 255, 154, 69, 7, 255, 153, 65, 0, 255, 152, 68, 3, 255, 152, 71, 7, 255, 145, 67, 16, 255, 140, 64, 14, 255, 137, 59, 4, 255, 151, 68, 8, 255, 150, 73, 6, 255, 153, 67, 6, 255, 166, 72, 10, 255, 167, 82, 8, 255, 157, 78, 7, 255, 153, 74, 8, 255, 166, 74, 4, 255, 170, 77, 2, 255, 163, 77, 3, 255, 154, 80, 5, 255, 148, 78, 6, 255, 145, 73, 11, 255, 155, 72, 5, 255, 154, 76, 2, 255, 179, 93, 5, 255, 172, 84, 11, 255, 153, 68, 8, 255, 146, 69, 14, 255, 142, 76, 11, 255, 148, 85, 9, 255, 161, 94, 9, 255, 167, 101, 8, 255, 175, 107, 10, 255, 183, 111, 20, 255, 193, 116, 12, 255, 193, 110, 9, 255, 191, 103, 6, 255, 193, 108, 16, 255, 204, 118, 11, 255, 200, 111, 1, 255, 192, 101, 14, 255, 202, 116, 21, 255, 208, 131, 15, 255, 210, 136, 12, 255, 214, 136, 8, 255, 212, 132, 15, 255, 205, 125, 14, 255, 202, 124, 9, 255, 215, 136, 15, 255, 217, 138, 14, 255, 214, 137, 16, 255, 210, 132, 16, 255, 207, 127, 16, 255, 212, 133, 18, 255, 218, 143, 18, 255, 212, 139, 13, 255, 215, 140, 10, 255, 219, 144, 8, 255, 218, 145, 14, 255, 220, 145, 10, 255, 219, 144, 12, 255, 220, 148, 11, 255, 212, 144, 3, 255, 217, 149, 13, 255, 220, 148, 15, 255, 220, 147, 12, 255, 222, 149, 8, 255, 210, 138, 4, 255, 204, 131, 12, 255, 215, 144, 9, 255, 219, 148, 4, 255, 218, 144, 12, 255, 223, 148, 11, 255, 220, 145, 4, 255, 202, 121, 19, 255, 196, 123, 6, 255, 208, 138, 12, 255, 214, 144, 10, 255, 213, 146, 7, 255, 214, 150, 10, 255, 215, 151, 10, 255, 222, 157, 4, 255, 226, 153, 3, 255, 220, 148, 5, 255, 221, 158, 10, 255, 220, 154, 1, 255, 220, 137, 5, 255, 220, 135, 17, 255, 217, 144, 4, 255, 221, 152, 7, 255, 224, 158, 7, 255, 223, 158, 2, 255, 224, 160, 4, 255, 223, 163, 4, 255, 220, 162, 4, 255, 221, 162, 3, 255, 213, 158, 0, 255, 216, 160, 2, 255, 218, 158, 2, 255, 215, 155, 0, 255, 216, 158, 2, 255, 215, 158, 3, 255, 213, 156, 3, 255, 217, 160, 7, 255, 214, 160, 3, 255, 210, 155, 8, 255, 204, 150, 3, 255, 207, 151, 5, 255, 212, 155, 6, 255, 211, 154, 4, 255, 207, 149, 3, 255, 208, 150, 11, 255, 209, 153, 13, 255, 211, 156, 2, 255, 185, 123, 9, 255, 195, 132, 8, 255, 177, 105, 8, 255, 189, 116, 15, 255, 199, 134, 5, 255, 204, 149, 2, 255, 214, 161, 11, 255, 214, 159, 12, 255, 212, 152, 9, 255, 208, 144, 4, 255, 208, 141, 7, 255, 209, 145, 12, 255, 208, 144, 10, 255, 203, 140, 6, 255, 207, 140, 11, 255, 205, 139, 5, 255, 209, 138, 20, 255, 201, 129, 12, 255, 199, 127, 9, 255, 207, 135, 14, 255, 203, 133, 2, 255, 201, 130, 6, 255, 203, 127, 15, 255, 200, 124, 6, 255, 199, 117, 9, 255, 197, 116, 14, 255, 197, 119, 12, 255, 201, 119, 13, 255, 190, 103, 8, 255, 187, 99, 7, 255, 196, 110, 7, 255, 188, 104, 9, 255, 187, 97, 2, 255, 179, 89, 2, 255, 167, 75, 4, 255, 166, 73, 3, 255, 163, 68, 4, 255, 167, 69, 6, 255, 176, 83, 10, 255, 174, 85, 5, 255, 166, 76, 3, 255, 160, 73, 2, 255, 162, 72, 1, 255, 163, 63, 8, 255, 158, 57, 5, 255, 146, 60, 5, 255, 143, 57, 5, 255, 126, 50, 2, 255, 121, 57, 4, 255, 116, 49, 3, 255, 137, 59, 7, 255, 158, 78, 10, 255, 132, 50, 8, 255, 127, 53, 4, 255, 124, 59, 3, 255, 117, 56, 1, 255, 113, 52, 2, 255, 106, 38, 5, 255, 126, 56, 0, 255, 124, 50, 8, 255, 149, 78, 2, 255, 172, 94, 3, 255, 183, 93, 5, 255, 181, 79, 9, 255, 157, 67, 9, 255, 139, 53, 8, 255, 131, 51, 3, 255, 147, 69, 2, 255, 171, 86, 7, 255, 198, 105, 3, 255, 197, 105, 1, 255, 187, 96, 1, 255, 176, 87, 0, 255, 177, 86, 4, 255, 177, 86, 6, 255, 179, 88, 4, 255, 184, 93, 1, 255, 189, 100, 1, 255, 187, 99, 2, 255, 187, 99, 4, 255, 184, 93, 5, 255, 169, 77, 3, 255, 159, 68, 5, 255, 148, 59, 1, 255, 136, 53, 3, 255, 121, 43, 1, 255, 127, 48, 4, 255, 134, 50, 4, 255, 127, 50, 3, 255, 121, 47, 7, 255, 117, 42, 9, 255, 116, 45, 7, 255, 110, 42, 4, 255, 109, 43, 6, 255, 107, 41, 2, 255, 107, 42, 2, 255, 104, 37, 4, 255, 105, 38, 1, 255, 106, 38, 5, 255, 105, 35, 4, 255, 113, 40, 1, 255, 116, 40, 3, 255, 118, 47, 2, 255, 126, 57, 7, 255, 120, 49, 2, 255, 115, 47, 3, 255, 124, 57, 1, 255, 138, 62, 3, 255, 144, 60, 0, 255, 150, 69, 2, 255, 161, 73, 1, 255, 171, 78, 0, 255, 176, 83, 2, 255, 174, 82, 1, 255, 171, 80, 2, 255, 170, 78, 3, 255, 170, 75, 5, 255, 160, 64, 2, 255, 146, 56, 7, 255, 130, 48, 10, 255, 122, 46, 2, 255, 121, 50, 1, 255, 106, 40, 1, 255, 93, 31, 0, 255, 87, 28, 5, 255, 84, 27, 3, 255, 86, 30, 3, 255, 88, 29, 1, 255, 85, 27, 2, 255, 82, 24, 1, 255, 79, 22, 1, 255, 77, 21, 4, 255, 74, 23, 7, 255, 66, 19, 3, 255, 57, 15, 0, 255, 59, 21, 3, 255, 61, 20, 2, 255, 64, 18, 3, 255, 60, 17, 1, 255, 58, 18, 1, 255, 55, 20, 1, 255, 58, 23, 1, 255, 59, 20, 0, 255, 62, 18, 2, 255, 3, 1, 0, 255, 0, 0, 48, 255, 10, 43, 217, 255, 65, 81, 106, 255, 54, 40, 4, 255, 37, 16, 0, 255, 42, 21, 90, 255, 8, 17, 151, 255, 10, 3, 16, 255, 10, 6, 0, 255, 15, 5, 5, 255, 16, 5, 5, 255, 15, 6, 2, 255, 19, 4, 4, 255, 18, 4, 3, 255, 18, 4, 3, 255, 18, 5, 3, 255, 20, 6, 5, 255, 20, 8, 6, 255, 21, 7, 6, 255, 24, 7, 7, 255, 27, 9, 6, 255, 31, 11, 8, 255, 32, 11, 7, 255, 32, 11, 8, 255, 30, 8, 4, 255, 28, 14, 6, 255, 23, 13, 4, 255, 26, 14, 6, 255, 28, 13, 5, 255, 33, 11, 5, 255, 31, 12, 3, 255, 32, 12, 2, 255, 34, 14, 3, 255, 34, 17, 4, 255, 34, 12, 1, 255, 32, 14, 1, 255, 36, 17, 3, 255, 45, 18, 9, 255, 41, 15, 4, 255, 47, 20, 3, 255, 54, 22, 3, 255, 45, 20, 0, 255, 43, 23, 1, 255, 44, 23, 2, 255, 35, 19, 3, 255, 30, 24, 2, 255, 38, 26, 1, 255, 47, 31, 4, 255, 51, 34, 4, 255, 57, 29, 1, 255, 63, 35, 3, 255, 63, 34, 4, 255, 62, 30, 2, 255, 63, 33, 2, 255, 62, 40, 0, 255, 70, 45, 4, 255, 87, 54, 3, 255, 80, 48, 3, 255, 66, 51, 1, 255, 73, 54, 0, 255, 72, 48, 4, 255, 62, 42, 4, 255, 73, 51, 1, 255, 70, 47, 1, 255, 79, 55, 7, 255, 136, 79, 7, 255, 158, 96, 4, 255, 142, 85, 1, 255, 134, 75, 2, 255, 145, 81, 10, 255, 158, 93, 10, 255, 178, 107, 13, 255, 192, 106, 10, 255, 192, 122, 25, 255, 192, 149, 29, 255, 202, 151, 11, 255, 194, 133, 8, 255, 197, 134, 26, 255, 194, 128, 11, 255, 191, 114, 14, 255, 194, 123, 11, 255, 195, 121, 15, 255, 197, 121, 26, 255, 198, 121, 11, 255, 200, 120, 12, 255, 199, 116, 24, 255, 199, 121, 11, 255, 200, 121, 6, 255, 201, 120, 14, 255, 198, 120, 15, 255, 197, 121, 13, 255, 196, 117, 16, 255, 201, 118, 10, 255, 204, 118, 15, 255, 197, 116, 4, 255, 201, 120, 5, 255, 202, 117, 10, 255, 201, 119, 9, 255, 205, 119, 12, 255, 208, 125, 7, 255, 201, 121, 5, 255, 200, 119, 15, 255, 202, 122, 18, 255, 203, 123, 6, 255, 196, 121, 8, 255, 195, 110, 5, 255, 204, 123, 15, 255, 208, 136, 15, 255, 205, 128, 13, 255, 215, 135, 21, 255, 209, 122, 16, 255, 210, 126, 20, 255, 204, 128, 13, 255, 201, 123, 15, 255, 207, 123, 10, 255, 203, 124, 7, 255, 203, 123, 4, 255, 206, 122, 6, 255, 201, 118, 5, 255, 197, 118, 5, 255, 202, 121, 10, 255, 204, 115, 12, 255, 203, 117, 9, 255, 201, 120, 2, 255, 201, 119, 3, 255, 204, 120, 8, 255, 205, 120, 14, 255, 201, 115, 15, 255, 198, 117, 7, 255, 199, 114, 5, 255, 197, 112, 5, 255, 195, 108, 7, 255, 192, 108, 5, 255, 186, 114, 4, 255, 185, 101, 6, 255, 179, 100, 6, 255, 166, 96, 12, 255, 162, 89, 14, 255, 161, 81, 4, 255, 136, 68, 5, 255, 128, 64, 11, 255, 133, 68, 6, 255, 134, 66, 3, 255, 138, 67, 10, 255, 142, 73, 7, 255, 138, 72, 7, 255, 136, 70, 3, 255, 153, 82, 6, 255, 158, 83, 3, 255, 141, 67, 9, 255, 132, 60, 6, 255, 147, 67, 8, 255, 154, 69, 6, 255, 151, 71, 4, 255, 146, 71, 2, 255, 154, 81, 10, 255, 153, 72, 10, 255, 145, 64, 5, 255, 147, 67, 2, 255, 158, 69, 6, 255, 146, 69, 5, 255, 145, 75, 9, 255, 137, 74, 12, 255, 137, 70, 8, 255, 120, 61, 7, 255, 126, 60, 4, 255, 132, 68, 13, 255, 150, 82, 5, 255, 181, 101, 9, 255, 186, 110, 4, 255, 184, 108, 10, 255, 190, 112, 10, 255, 193, 116, 9, 255, 197, 118, 11, 255, 199, 118, 8, 255, 197, 117, 21, 255, 202, 124, 9, 255, 202, 121, 11, 255, 191, 113, 14, 255, 204, 120, 16, 255, 202, 115, 14, 255, 175, 85, 5, 255, 182, 88, 7, 255, 205, 121, 19, 255, 207, 129, 18, 255, 212, 133, 11, 255, 214, 135, 27, 255, 204, 126, 25, 255, 204, 125, 14, 255, 210, 131, 12, 255, 208, 127, 11, 255, 208, 127, 6, 255, 200, 123, 16, 255, 208, 137, 20, 255, 219, 149, 15, 255, 217, 141, 17, 255, 210, 130, 10, 255, 211, 132, 19, 255, 217, 143, 12, 255, 216, 143, 14, 255, 221, 147, 9, 255, 217, 144, 6, 255, 217, 145, 8, 255, 210, 142, 7, 255, 209, 145, 10, 255, 219, 148, 10, 255, 225, 150, 9, 255, 210, 136, 1, 255, 206, 134, 14, 255, 218, 152, 19, 255, 218, 153, 6, 255, 222, 150, 7, 255, 206, 132, 4, 255, 204, 130, 5, 255, 210, 135, 8, 255, 188, 116, 13, 255, 206, 143, 9, 255, 218, 151, 6, 255, 210, 137, 10, 255, 211, 136, 6, 255, 216, 145, 10, 255, 217, 146, 13, 255, 216, 147, 2, 255, 213, 147, 7, 255, 210, 153, 13, 255, 220, 157, 9, 255, 207, 129, 8, 255, 195, 114, 18, 255, 209, 143, 11, 255, 221, 158, 0, 255, 226, 161, 7, 255, 227, 164, 7, 255, 225, 164, 0, 255, 230, 168, 8, 255, 227, 167, 11, 255, 220, 164, 1, 255, 218, 159, 1, 255, 217, 159, 0, 255, 219, 161, 2, 255, 218, 159, 3, 255, 216, 159, 3, 255, 217, 161, 7, 255, 215, 161, 2, 255, 215, 162, 2, 255, 216, 162, 3, 255, 216, 161, 7, 255, 209, 152, 8, 255, 208, 154, 5, 255, 209, 154, 3, 255, 211, 155, 4, 255, 209, 153, 5, 255, 208, 151, 6, 255, 210, 154, 6, 255, 209, 156, 12, 255, 212, 160, 11, 255, 205, 147, 8, 255, 177, 114, 5, 255, 166, 98, 9, 255, 184, 120, 12, 255, 201, 143, 9, 255, 206, 153, 5, 255, 212, 161, 4, 255, 213, 159, 4, 255, 210, 152, 3, 255, 207, 144, 5, 255, 208, 143, 14, 255, 209, 144, 19, 255, 207, 141, 19, 255, 206, 140, 12, 255, 207, 140, 4, 255, 208, 140, 8, 255, 206, 137, 15, 255, 204, 133, 17, 255, 208, 136, 13, 255, 206, 135, 7, 255, 202, 132, 10, 255, 204, 128, 20, 255, 205, 129, 16, 255, 202, 124, 5, 255, 204, 121, 14, 255, 200, 118, 14, 255, 193, 114, 7, 255, 193, 109, 3, 255, 182, 92, 2, 255, 187, 97, 4, 255, 193, 106, 3, 255, 189, 102, 2, 255, 172, 80, 3, 255, 161, 67, 5, 255, 161, 68, 2, 255, 165, 73, 5, 255, 168, 75, 6, 255, 174, 80, 4, 255, 166, 75, 1, 255, 169, 77, 7, 255, 174, 80, 9, 255, 163, 70, 2, 255, 153, 62, 3, 255, 145, 58, 3, 255, 142, 55, 9, 255, 138, 51, 2, 255, 141, 56, 6, 255, 126, 47, 8, 255, 117, 49, 0, 255, 127, 58, 3, 255, 145, 65, 5, 255, 139, 69, 12, 255, 126, 54, 5, 255, 119, 44, 0, 255, 121, 49, 2, 255, 115, 46, 4, 255, 118, 51, 10, 255, 112, 41, 7, 255, 110, 38, 10, 255, 122, 52, 6, 255, 157, 81, 0, 255, 180, 93, 3, 255, 172, 84, 4, 255, 138, 54, 2, 255, 121, 48, 5, 255, 122, 48, 10, 255, 132, 55, 4, 255, 158, 76, 1, 255, 170, 83, 1, 255, 188, 98, 4, 255, 188, 101, 4, 255, 185, 98, 9, 255, 172, 85, 6, 255, 172, 85, 6, 255, 174, 88, 2, 255, 175, 90, 1, 255, 176, 89, 1, 255, 185, 96, 4, 255, 191, 103, 6, 255, 188, 100, 1, 255, 187, 99, 1, 255, 189, 99, 5, 255, 183, 93, 3, 255, 174, 82, 7, 255, 158, 72, 7, 255, 138, 53, 2, 255, 132, 43, 5, 255, 123, 37, 3, 255, 117, 38, 1, 255, 118, 43, 5, 255, 116, 41, 4, 255, 113, 42, 2, 255, 109, 42, 2, 255, 109, 44, 5, 255, 107, 42, 4, 255, 108, 43, 5, 255, 106, 39, 3, 255, 97, 33, 4, 255, 93, 33, 3, 255, 93, 35, 1, 255, 91, 32, 2, 255, 91, 32, 1, 255, 99, 41, 8, 255, 114, 48, 6, 255, 129, 57, 0, 255, 126, 53, 2, 255, 128, 57, 4, 255, 128, 54, 2, 255, 133, 56, 0, 255, 142, 60, 3, 255, 153, 62, 4, 255, 164, 69, 3, 255, 172, 78, 3, 255, 174, 82, 1, 255, 175, 84, 0, 255, 170, 83, 0, 255, 168, 76, 3, 255, 169, 73, 1, 255, 173, 80, 3, 255, 151, 64, 5, 255, 129, 45, 3, 255, 120, 43, 3, 255, 103, 40, 3, 255, 89, 29, 0, 255, 83, 25, 3, 255, 84, 26, 6, 255, 82, 23, 0, 255, 88, 28, 3, 255, 81, 29, 4, 255, 78, 26, 3, 255, 74, 23, 1, 255, 68, 18, 0, 255, 66, 19, 3, 255, 64, 18, 3, 255, 61, 20, 5, 255, 48, 21, 2, 255, 49, 21, 2, 255, 45, 17, 1, 255, 49, 18, 0, 255, 57, 15, 1, 255, 51, 19, 1, 255, 59, 21, 3, 255, 59, 18, 2, 255, 57, 17, 2, 255, 0, 0, 44, 255, 11, 39, 205, 255, 66, 84, 111, 255, 46, 48, 0, 255, 31, 10, 0, 255, 47, 24, 83, 255, 13, 21, 149, 255, 14, 6, 18, 255, 16, 2, 0, 255, 11, 3, 2, 255, 13, 6, 9, 255, 17, 9, 5, 255, 15, 5, 2, 255, 14, 4, 2, 255, 15, 4, 3, 255, 16, 4, 4, 255, 18, 6, 6, 255, 17, 6, 6, 255, 17, 6, 5, 255, 19, 8, 7, 255, 24, 9, 8, 255, 27, 7, 4, 255, 34, 14, 7, 255, 31, 10, 4, 255, 29, 10, 4, 255, 28, 9, 4, 255, 28, 13, 6, 255, 27, 14, 8, 255, 29, 15, 9, 255, 26, 14, 5, 255, 36, 13, 5, 255, 37, 13, 5, 255, 34, 13, 7, 255, 37, 10, 2, 255, 33, 14, 2, 255, 35, 13, 2, 255, 38, 14, 2, 255, 42, 20, 4, 255, 42, 15, 3, 255, 45, 17, 4, 255, 51, 20, 2, 255, 54, 20, 3, 255, 49, 21, 6, 255, 38, 19, 2, 255, 38, 23, 5, 255, 45, 22, 4, 255, 50, 27, 7, 255, 48, 29, 4, 255, 57, 28, 4, 255, 53, 28, 1, 255, 53, 31, 4, 255, 60, 33, 2, 255, 58, 37, 7, 255, 64, 34, 3, 255, 65, 39, 2, 255, 70, 37, 3, 255, 95, 55, 5, 255, 73, 50, 0, 255, 72, 49, 5, 255, 78, 46, 4, 255, 66, 48, 3, 255, 62, 48, 6, 255, 66, 49, 2, 255, 73, 48, 5, 255, 72, 54, 5, 255, 77, 55, 1, 255, 100, 68, 1, 255, 136, 79, 4, 255, 143, 78, 7, 255, 160, 97, 11, 255, 176, 101, 17, 255, 176, 104, 8, 255, 173, 103, 13, 255, 170, 96, 6, 255, 166, 100, 7, 255, 174, 124, 12, 255, 172, 120, 8, 255, 121, 88, 5, 255, 92, 63, 12, 255, 103, 65, 13, 255, 102, 63, 5, 255, 121, 76, 0, 255, 144, 88, 16, 255, 166, 96, 20, 255, 175, 103, 20, 255, 181, 112, 8, 255, 188, 116, 6, 255, 187, 110, 15, 255, 192, 113, 11, 255, 193, 114, 16, 255, 189, 111, 12, 255, 188, 113, 7, 255, 186, 111, 15, 255, 186, 108, 4, 255, 194, 111, 5, 255, 196, 109, 7, 255, 194, 107, 10, 255, 187, 98, 9, 255, 191, 105, 6, 255, 198, 116, 7, 255, 199, 118, 3, 255, 193, 108, 3, 255, 192, 99, 8, 255, 199, 106, 10, 255, 197, 111, 7, 255, 195, 107, 6, 255, 188, 95, 7, 255, 194, 118, 17, 255, 199, 127, 12, 255, 204, 126, 13, 255, 196, 114, 7, 255, 199, 112, 6, 255, 203, 120, 6, 255, 201, 117, 10, 255, 203, 115, 4, 255, 197, 104, 9, 255, 203, 108, 4, 255, 203, 119, 2, 255, 202, 124, 10, 255, 206, 123, 13, 255, 209, 122, 10, 255, 208, 122, 5, 255, 204, 123, 5, 255, 204, 122, 11, 255, 207, 122, 7, 255, 207, 122, 6, 255, 205, 122, 10, 255, 205, 118, 5, 255, 202, 111, 17, 255, 203, 123, 7, 255, 201, 119, 6, 255, 201, 119, 9, 255, 197, 111, 6, 255, 199, 111, 0, 255, 200, 117, 10, 255, 198, 112, 12, 255, 192, 103, 6, 255, 192, 101, 3, 255, 190, 110, 5, 255, 186, 112, 9, 255, 182, 103, 15, 255, 174, 96, 11, 255, 168, 99, 6, 255, 166, 98, 6, 255, 160, 87, 10, 255, 152, 83, 6, 255, 151, 83, 7, 255, 148, 80, 11, 255, 136, 72, 5, 255, 131, 67, 7, 255, 133, 63, 8, 255, 135, 59, 8, 255, 137, 62, 1, 255, 142, 69, 4, 255, 142, 67, 1, 255, 147, 72, 6, 255, 145, 69, 5, 255, 143, 71, 7, 255, 135, 66, 8, 255, 141, 65, 8, 255, 150, 71, 14, 255, 145, 71, 4, 255, 147, 76, 2, 255, 144, 77, 15, 255, 140, 73, 10, 255, 133, 70, 17, 255, 145, 76, 6, 255, 166, 96, 13, 255, 184, 114, 17, 255, 193, 113, 3, 255, 193, 109, 4, 255, 193, 115, 13, 255, 197, 120, 16, 255, 204, 125, 17, 255, 205, 120, 22, 255, 204, 119, 19, 255, 206, 126, 13, 255, 209, 130, 21, 255, 213, 132, 18, 255, 203, 122, 6, 255, 200, 120, 7, 255, 196, 111, 11, 255, 200, 113, 11, 255, 196, 111, 10, 255, 193, 107, 11, 255, 203, 118, 19, 255, 211, 130, 30, 255, 217, 140, 23, 255, 218, 145, 7, 255, 216, 141, 7, 255, 215, 133, 20, 255, 197, 113, 10, 255, 201, 120, 5, 255, 205, 134, 16, 255, 215, 151, 19, 255, 220, 147, 18, 255, 217, 136, 15, 255, 219, 143, 6, 255, 222, 149, 13, 255, 220, 148, 15, 255, 222, 149, 27, 255, 221, 148, 15, 255, 213, 139, 3, 255, 212, 140, 10, 255, 218, 153, 3, 255, 226, 162, 3, 255, 222, 151, 3, 255, 211, 134, 16, 255, 213, 143, 5, 255, 224, 159, 6, 255, 226, 158, 9, 255, 214, 144, 4, 255, 210, 137, 5, 255, 202, 134, 9, 255, 203, 141, 4, 255, 203, 133, 17, 255, 198, 136, 7, 255, 223, 168, 5, 255, 222, 154, 9, 255, 198, 126, 4, 255, 209, 142, 6, 255, 211, 149, 5, 255, 212, 147, 11, 255, 218, 155, 8, 255, 221, 162, 9, 255, 224, 156, 6, 255, 213, 133, 4, 255, 201, 124, 10, 255, 216, 155, 13, 255, 221, 167, 4, 255, 223, 165, 3, 255, 229, 170, 5, 255, 228, 169, 3, 255, 228, 166, 9, 255, 228, 167, 9, 255, 222, 165, 1, 255, 220, 165, 5, 255, 219, 164, 4, 255, 218, 163, 3, 255, 221, 165, 6, 255, 221, 162, 3, 255, 219, 159, 3, 255, 220, 163, 4, 255, 219, 164, 4, 255, 216, 161, 1, 255, 212, 154, 5, 255, 213, 153, 3, 255, 216, 155, 11, 255, 214, 157, 6, 255, 209, 152, 3, 255, 210, 151, 7, 255, 212, 155, 6, 255, 211, 157, 3, 255, 212, 159, 6, 255, 211, 160, 5, 255, 211, 160, 5, 255, 211, 162, 6, 255, 204, 154, 3, 255, 185, 131, 13, 255, 190, 138, 11, 255, 201, 150, 8, 255, 215, 160, 5, 255, 213, 155, 10, 255, 209, 152, 13, 255, 209, 151, 3, 255, 209, 151, 2, 255, 212, 149, 8, 255, 210, 147, 8, 255, 208, 142, 13, 255, 208, 141, 8, 255, 206, 138, 5, 255, 209, 139, 12, 255, 205, 136, 2, 255, 206, 135, 5, 255, 207, 136, 10, 255, 205, 131, 14, 255, 204, 131, 13, 255, 206, 130, 19, 255, 201, 125, 6, 255, 203, 124, 5, 255, 206, 122, 15, 255, 189, 101, 3, 255, 185, 93, 6, 255, 190, 98, 4, 255, 186, 94, 5, 255, 189, 98, 7, 255, 183, 90, 10, 255, 176, 84, 3, 255, 161, 74, 7, 255, 159, 70, 7, 255, 160, 72, 3, 255, 164, 74, 1, 255, 176, 85, 2, 255, 189, 95, 5, 255, 167, 78, 3, 255, 157, 69, 6, 255, 160, 69, 3, 255, 149, 56, 5, 255, 136, 44, 10, 255, 132, 49, 6, 255, 137, 57, 8, 255, 141, 54, 8, 255, 134, 44, 17, 255, 130, 42, 16, 255, 132, 53, 4, 255, 139, 59, 5, 255, 147, 66, 4, 255, 142, 69, 13, 255, 127, 58, 11, 255, 114, 45, 8, 255, 121, 49, 6, 255, 123, 46, 3, 255, 122, 45, 6, 255, 116, 48, 4, 255, 101, 35, 13, 255, 125, 55, 4, 255, 157, 78, 8, 255, 147, 61, 9, 255, 129, 52, 10, 255, 116, 55, 2, 255, 119, 50, 4, 255, 120, 49, 3, 255, 135, 60, 5, 255, 152, 70, 7, 255, 168, 83, 7, 255, 173, 88, 7, 255, 181, 96, 1, 255, 188, 102, 10, 255, 176, 89, 5, 255, 174, 89, 3, 255, 175, 91, 1, 255, 176, 90, 1, 255, 180, 93, 6, 255, 188, 102, 10, 255, 190, 105, 3, 255, 190, 106, 1, 255, 187, 102, 3, 255, 190, 100, 5, 255, 190, 97, 1, 255, 185, 96, 3, 255, 184, 93, 5, 255, 177, 84, 2, 255, 166, 78, 3, 255, 147, 65, 2, 255, 126, 46, 4, 255, 120, 43, 3, 255, 126, 51, 2, 255, 115, 48, 2, 255, 108, 47, 1, 255, 106, 45, 1, 255, 107, 42, 2, 255, 103, 33, 2, 255, 95, 33, 0, 255, 90, 33, 3, 255, 84, 33, 2, 255, 88, 34, 2, 255, 92, 36, 9, 255, 79, 25, 3, 255, 80, 26, 6, 255, 98, 37, 6, 255, 121, 51, 3, 255, 117, 46, 3, 255, 113, 46, 0, 255, 120, 50, 2, 255, 128, 53, 4, 255, 127, 49, 3, 255, 137, 54, 4, 255, 152, 61, 1, 255, 165, 72, 2, 255, 165, 73, 1, 255, 168, 73, 4, 255, 169, 75, 2, 255, 170, 75, 2, 255, 171, 77, 1, 255, 169, 79, 0, 255, 158, 69, 2, 255, 146, 56, 5, 255, 130, 45, 1, 255, 118, 45, 5, 255, 99, 35, 2, 255, 87, 26, 1, 255, 86, 27, 5, 255, 81, 24, 2, 255, 79, 24, 1, 255, 71, 25, 2, 255, 70, 25, 1, 255, 73, 28, 5, 255, 69, 23, 4, 255, 60, 16, 0, 255, 59, 15, 2, 255, 59, 18, 3, 255, 60, 20, 4, 255, 59, 18, 4, 255, 49, 20, 4, 255, 47, 16, 3, 255, 55, 13, 6, 255, 45, 15, 4, 255, 44, 14, 4, 255, 48, 14, 3, 255, 52, 17, 3, 255, 14, 37, 213, 255, 60, 74, 122, 255, 55, 43, 0, 255, 34, 17, 0, 255, 44, 22, 71, 255, 8, 25, 151, 255, 13, 7, 27, 255, 16, 0, 0, 255, 13, 5, 2, 255, 12, 5, 3, 255, 14, 4, 2, 255, 15, 5, 3, 255, 13, 2, 4, 255, 13, 4, 3, 255, 14, 4, 3, 255, 17, 6, 5, 255, 12, 1, 0, 255, 17, 6, 5, 255, 22, 8, 9, 255, 25, 9, 6, 255, 24, 9, 4, 255, 22, 7, 1, 255, 25, 9, 3, 255, 29, 12, 6, 255, 23, 9, 4, 255, 28, 11, 7, 255, 32, 11, 6, 255, 32, 11, 8, 255, 29, 12, 5, 255, 25, 12, 5, 255, 31, 13, 4, 255, 36, 14, 4, 255, 32, 13, 2, 255, 32, 14, 4, 255, 29, 15, 4, 255, 41, 18, 7, 255, 47, 18, 6, 255, 41, 16, 2, 255, 39, 15, 3, 255, 47, 22, 5, 255, 42, 19, 1, 255, 45, 25, 6, 255, 41, 22, 4, 255, 39, 21, 6, 255, 39, 22, 4, 255, 47, 25, 1, 255, 51, 23, 1, 255, 50, 29, 2, 255, 55, 29, 5, 255, 55, 30, 5, 255, 57, 33, 5, 255, 63, 32, 2, 255, 62, 36, 9, 255, 59, 38, 2, 255, 56, 39, 4, 255, 82, 56, 7, 255, 84, 53, 1, 255, 65, 48, 5, 255, 65, 47, 3, 255, 71, 47, 7, 255, 65, 44, 7, 255, 72, 46, 0, 255, 73, 50, 3, 255, 73, 53, 3, 255, 70, 49, 2, 255, 68, 44, 0, 255, 91, 60, 7, 255, 157, 90, 10, 255, 181, 99, 5, 255, 170, 95, 12, 255, 170, 104, 4, 255, 187, 127, 5, 255, 191, 127, 4, 255, 176, 116, 7, 255, 183, 118, 5, 255, 152, 89, 5, 255, 102, 63, 4, 255, 89, 57, 3, 255, 79, 53, 1, 255, 81, 47, 7, 255, 61, 40, 5, 255, 63, 44, 4, 255, 70, 44, 0, 255, 76, 47, 5, 255, 82, 46, 6, 255, 100, 58, 10, 255, 112, 61, 4, 255, 135, 79, 13, 255, 139, 84, 10, 255, 135, 77, 8, 255, 140, 81, 16, 255, 149, 84, 8, 255, 154, 85, 7, 255, 152, 86, 12, 255, 156, 86, 4, 255, 163, 88, 9, 255, 172, 91, 7, 255, 172, 87, 9, 255, 181, 95, 11, 255, 172, 98, 6, 255, 183, 103, 9, 255, 187, 102, 13, 255, 178, 93, 5, 255, 179, 99, 4, 255, 192, 107, 3, 255, 195, 102, 11, 255, 193, 111, 5, 255, 198, 113, 12, 255, 197, 118, 11, 255, 188, 106, 6, 255, 185, 97, 8, 255, 189, 103, 8, 255, 186, 99, 3, 255, 183, 89, 11, 255, 186, 91, 8, 255, 182, 90, 7, 255, 186, 100, 9, 255, 192, 99, 4, 255, 196, 104, 7, 255, 194, 118, 9, 255, 199, 122, 9, 255, 205, 119, 7, 255, 203, 119, 6, 255, 207, 119, 12, 255, 211, 121, 10, 255, 201, 111, 3, 255, 192, 104, 11, 255, 203, 122, 13, 255, 208, 123, 5, 255, 208, 124, 1, 255, 208, 121, 4, 255, 210, 123, 6, 255, 208, 121, 8, 255, 202, 119, 6, 255, 206, 121, 10, 255, 203, 118, 4, 255, 189, 103, 8, 255, 167, 78, 4, 255, 168, 77, 11, 255, 175, 84, 12, 255, 182, 93, 7, 255, 195, 103, 17, 255, 197, 111, 13, 255, 190, 108, 15, 255, 190, 106, 17, 255, 187, 103, 0, 255, 183, 101, 6, 255, 178, 99, 11, 255, 167, 95, 10, 255, 157, 92, 5, 255, 152, 84, 14, 255, 156, 87, 7, 255, 144, 74, 3, 255, 134, 67, 10, 255, 129, 70, 7, 255, 117, 51, 15, 255, 114, 56, 12, 255, 128, 72, 14, 255, 146, 75, 9, 255, 158, 81, 4, 255, 163, 93, 7, 255, 164, 91, 10, 255, 172, 96, 10, 255, 169, 90, 12, 255, 159, 80, 3, 255, 175, 98, 17, 255, 198, 113, 18, 255, 205, 121, 8, 255, 197, 117, 11, 255, 198, 112, 13, 255, 182, 97, 6, 255, 187, 109, 15, 255, 205, 131, 21, 255, 209, 132, 12, 255, 213, 131, 20, 255, 213, 131, 8, 255, 215, 137, 4, 255, 218, 135, 15, 255, 201, 112, 15, 255, 190, 100, 14, 255, 197, 104, 28, 255, 179, 83, 7, 255, 194, 97, 17, 255, 197, 105, 9, 255, 184, 95, 2, 255, 186, 102, 8, 255, 213, 139, 18, 255, 215, 145, 12, 255, 218, 143, 9, 255, 215, 142, 7, 255, 208, 135, 6, 255, 218, 136, 20, 255, 220, 146, 6, 255, 215, 144, 10, 255, 216, 142, 18, 255, 221, 141, 12, 255, 219, 140, 4, 255, 218, 145, 5, 255, 221, 148, 17, 255, 221, 150, 4, 255, 222, 150, 5, 255, 218, 147, 11, 255, 211, 137, 1, 255, 215, 140, 4, 255, 224, 156, 18, 255, 224, 158, 11, 255, 207, 134, 9, 255, 198, 122, 17, 255, 215, 150, 4, 255, 217, 153, 0, 255, 212, 140, 6, 255, 205, 124, 15, 255, 201, 128, 15, 255, 217, 157, 22, 255, 214, 157, 7, 255, 200, 138, 10, 255, 223, 166, 14, 255, 223, 163, 9, 255, 212, 149, 10, 255, 207, 150, 12, 255, 206, 151, 2, 255, 210, 152, 7, 255, 219, 163, 2, 255, 220, 159, 2, 255, 221, 155, 8, 255, 211, 138, 7, 255, 199, 129, 12, 255, 215, 158, 12, 255, 228, 176, 5, 255, 228, 173, 10, 255, 226, 166, 10, 255, 234, 176, 12, 255, 233, 176, 0, 255, 229, 169, 3, 255, 221, 158, 10, 255, 218, 159, 6, 255, 221, 167, 4, 255, 219, 167, 6, 255, 221, 168, 8, 255, 221, 165, 6, 255, 219, 163, 3, 255, 223, 165, 5, 255, 220, 164, 5, 255, 215, 162, 10, 255, 218, 160, 4, 255, 211, 147, 3, 255, 208, 147, 9, 255, 219, 163, 9, 255, 213, 155, 0, 255, 206, 139, 3, 255, 212, 150, 7, 255, 213, 161, 2, 255, 209, 160, 5, 255, 213, 163, 13, 255, 215, 165, 7, 255, 212, 163, 7, 255, 209, 165, 9, 255, 213, 170, 3, 255, 213, 169, 9, 255, 202, 154, 8, 255, 201, 145, 5, 255, 211, 157, 6, 255, 215, 158, 15, 255, 213, 154, 15, 255, 208, 152, 3, 255, 211, 155, 4, 255, 210, 151, 4, 255, 209, 147, 3, 255, 209, 142, 8, 255, 205, 139, 4, 255, 208, 140, 13, 255, 208, 139, 7, 255, 205, 136, 5, 255, 208, 138, 7, 255, 211, 139, 13, 255, 207, 132, 20, 255, 203, 131, 3, 255, 202, 127, 5, 255, 207, 125, 7, 255, 210, 128, 3, 255, 190, 103, 10, 255, 172, 82, 5, 255, 176, 81, 6, 255, 178, 85, 6, 255, 161, 63, 7, 255, 181, 89, 6, 255, 174, 85, 0, 255, 166, 75, 6, 255, 155, 68, 4, 255, 154, 70, 0, 255, 153, 66, 4, 255, 165, 74, 8, 255, 174, 81, 4, 255, 175, 79, 6, 255, 159, 67, 6, 255, 152, 63, 4, 255, 145, 56, 9, 255, 133, 52, 6, 255, 133, 57, 2, 255, 139, 59, 2, 255, 155, 67, 7, 255, 160, 71, 5, 255, 149, 68, 5, 255, 134, 57, 7, 255, 128, 53, 4, 255, 140, 64, 4, 255, 153, 73, 4, 255, 148, 69, 3, 255, 121, 48, 4, 255, 115, 46, 11, 255, 118, 50, 5, 255, 121, 50, 0, 255, 125, 52, 4, 255, 111, 44, 1, 255, 109, 41, 4, 255, 113, 51, 5, 255, 115, 56, 4, 255, 116, 49, 2, 255, 120, 53, 0, 255, 117, 48, 0, 255, 115, 41, 7, 255, 124, 54, 6, 255, 143, 69, 1, 255, 175, 86, 12, 255, 184, 89, 12, 255, 169, 83, 1, 255, 177, 90, 0, 255, 180, 90, 1, 255, 180, 90, 2, 255, 183, 95, 5, 255, 176, 88, 2, 255, 178, 89, 2, 255, 186, 99, 4, 255, 189, 103, 0, 255, 190, 103, 1, 255, 191, 104, 1, 255, 192, 103, 2, 255, 192, 100, 4, 255, 190, 95, 2, 255, 184, 95, 1, 255, 187, 96, 5, 255, 184, 90, 2, 255, 178, 87, 0, 255, 170, 84, 2, 255, 155, 70, 3, 255, 141, 60, 4, 255, 135, 61, 4, 255, 132, 59, 5, 255, 121, 51, 2, 255, 117, 46, 5, 255, 112, 39, 6, 255, 104, 32, 3, 255, 97, 34, 0, 255, 91, 35, 2, 255, 92, 33, 6, 255, 83, 27, 1, 255, 97, 33, 5, 255, 106, 33, 10, 255, 94, 34, 2, 255, 95, 35, 2, 255, 98, 31, 3, 255, 102, 38, 7, 255, 102, 39, 1, 255, 115, 47, 6, 255, 114, 46, 3, 255, 115, 46, 2, 255, 131, 46, 3, 255, 137, 52, 1, 255, 144, 63, 2, 255, 149, 64, 2, 255, 147, 65, 4, 255, 156, 68, 5, 255, 159, 65, 2, 255, 157, 66, 1, 255, 150, 65, 2, 255, 144, 61, 1, 255, 148, 62, 3, 255, 140, 54, 0, 255, 126, 45, 2, 255, 109, 38, 5, 255, 88, 28, 1, 255, 82, 24, 1, 255, 83, 28, 5, 255, 71, 22, 1, 255, 68, 21, 0, 255, 69, 21, 2, 255, 64, 21, 3, 255, 59, 23, 5, 255, 62, 19, 4, 255, 65, 16, 2, 255, 59, 18, 3, 255, 52, 12, 1, 255, 52, 14, 2, 255, 45, 16, 4, 255, 43, 14, 4, 255, 44, 9, 2, 255, 41, 9, 2, 255, 33, 11, 3, 255, 38, 11, 2, 255, 45, 15, 3, 255, 59, 73, 119, 255, 55, 40, 6, 255, 25, 18, 1, 255, 51, 25, 50, 255, 16, 24, 140, 255, 6, 6, 37, 255, 15, 3, 0, 255, 14, 7, 4, 255, 13, 4, 2, 255, 12, 3, 2, 255, 14, 4, 3, 255, 16, 5, 3, 255, 13, 4, 1, 255, 14, 4, 3, 255, 13, 3, 2, 255, 16, 5, 4, 255, 13, 3, 1, 255, 16, 4, 2, 255, 23, 6, 6, 255, 24, 7, 4, 255, 22, 8, 3, 255, 18, 8, 1, 255, 22, 11, 4, 255, 26, 9, 5, 255, 26, 9, 5, 255, 26, 10, 5, 255, 27, 9, 2, 255, 35, 15, 7, 255, 28, 11, 3, 255, 26, 11, 4, 255, 30, 15, 6, 255, 33, 14, 2, 255, 35, 13, 3, 255, 30, 14, 4, 255, 30, 15, 5, 255, 40, 17, 6, 255, 39, 14, 3, 255, 41, 18, 5, 255, 41, 18, 7, 255, 40, 19, 4, 255, 36, 21, 4, 255, 38, 20, 4, 255, 37, 21, 0, 255, 40, 22, 4, 255, 47, 22, 1, 255, 51, 28, 3, 255, 52, 29, 1, 255, 48, 30, 4, 255, 45, 29, 5, 255, 56, 33, 4, 255, 63, 36, 3, 255, 61, 32, 2, 255, 56, 34, 4, 255, 55, 41, 5, 255, 81, 50, 3, 255, 87, 57, 3, 255, 63, 40, 5, 255, 74, 49, 2, 255, 60, 46, 2, 255, 67, 46, 2, 255, 77, 46, 1, 255, 70, 47, 1, 255, 79, 49, 5, 255, 71, 45, 3, 255, 68, 46, 13, 255, 119, 79, 8, 255, 172, 96, 16, 255, 165, 82, 9, 255, 147, 81, 8, 255, 167, 115, 0, 255, 185, 130, 7, 255, 198, 141, 6, 255, 193, 128, 2, 255, 187, 126, 2, 255, 165, 108, 11, 255, 107, 57, 4, 255, 82, 57, 1, 255, 79, 56, 5, 255, 80, 54, 5, 255, 73, 52, 1, 255, 71, 47, 2, 255, 74, 52, 11, 255, 74, 53, 5, 255, 69, 44, 6, 255, 72, 49, 1, 255, 75, 48, 1, 255, 78, 44, 5, 255, 103, 65, 8, 255, 89, 52, 2, 255, 75, 39, 2, 255, 82, 46, 4, 255, 79, 44, 4, 255, 76, 38, 4, 255, 82, 37, 6, 255, 81, 41, 1, 255, 109, 61, 7, 255, 95, 51, 5, 255, 115, 67, 7, 255, 112, 60, 5, 255, 121, 65, 2, 255, 123, 61, 5, 255, 124, 56, 6, 255, 128, 66, 4, 255, 132, 73, 10, 255, 145, 79, 5, 255, 141, 71, 6, 255, 138, 68, 1, 255, 142, 71, 8, 255, 151, 82, 11, 255, 155, 81, 12, 255, 167, 87, 13, 255, 174, 95, 4, 255, 174, 91, 2, 255, 177, 89, 10, 255, 178, 94, 7, 255, 187, 99, 4, 255, 185, 98, 12, 255, 165, 86, 8, 255, 180, 92, 4, 255, 194, 108, 4, 255, 196, 114, 3, 255, 203, 113, 5, 255, 198, 111, 16, 255, 198, 111, 9, 255, 203, 118, 2, 255, 201, 115, 6, 255, 201, 116, 8, 255, 203, 117, 4, 255, 206, 120, 3, 255, 207, 121, 13, 255, 210, 126, 5, 255, 210, 126, 4, 255, 207, 125, 6, 255, 211, 129, 8, 255, 210, 127, 16, 255, 210, 126, 4, 255, 202, 117, 13, 255, 184, 106, 9, 255, 187, 106, 15, 255, 193, 104, 14, 255, 203, 116, 11, 255, 198, 118, 17, 255, 200, 118, 9, 255, 202, 118, 4, 255, 199, 111, 17, 255, 194, 108, 15, 255, 192, 109, 8, 255, 186, 104, 5, 255, 178, 97, 12, 255, 178, 102, 8, 255, 181, 103, 8, 255, 175, 97, 12, 255, 161, 84, 9, 255, 165, 90, 16, 255, 165, 94, 8, 255, 157, 81, 18, 255, 169, 89, 20, 255, 174, 95, 7, 255, 179, 100, 12, 255, 184, 106, 11, 255, 183, 109, 8, 255, 187, 110, 13, 255, 190, 110, 13, 255, 192, 109, 20, 255, 184, 102, 14, 255, 200, 125, 14, 255, 199, 120, 12, 255, 199, 115, 4, 255, 195, 104, 7, 255, 188, 100, 11, 255, 192, 111, 9, 255, 209, 129, 20, 255, 213, 136, 5, 255, 213, 133, 11, 255, 215, 132, 20, 255, 217, 136, 13, 255, 215, 137, 7, 255, 210, 128, 11, 255, 199, 111, 8, 255, 207, 124, 10, 255, 200, 109, 16, 255, 179, 84, 5, 255, 187, 93, 10, 255, 169, 78, 4, 255, 169, 84, 23, 255, 200, 125, 18, 255, 217, 143, 17, 255, 213, 139, 14, 255, 221, 139, 11, 255, 222, 143, 19, 255, 218, 145, 16, 255, 220, 146, 14, 255, 221, 149, 13, 255, 221, 146, 17, 255, 220, 145, 13, 255, 216, 139, 8, 255, 199, 117, 17, 255, 206, 131, 10, 255, 218, 149, 14, 255, 217, 150, 7, 255, 218, 144, 8, 255, 215, 145, 8, 255, 206, 133, 8, 255, 207, 128, 4, 255, 219, 154, 22, 255, 223, 161, 14, 255, 214, 150, 9, 255, 208, 141, 3, 255, 222, 157, 14, 255, 210, 144, 8, 255, 211, 144, 6, 255, 204, 131, 12, 255, 203, 138, 11, 255, 218, 162, 7, 255, 209, 151, 2, 255, 217, 162, 8, 255, 222, 164, 4, 255, 218, 153, 0, 255, 225, 166, 3, 255, 222, 169, 12, 255, 203, 140, 5, 255, 219, 157, 7, 255, 223, 168, 7, 255, 213, 158, 1, 255, 221, 159, 9, 255, 215, 158, 0, 255, 218, 164, 7, 255, 228, 172, 16, 255, 232, 177, 8, 255, 228, 175, 5, 255, 226, 172, 2, 255, 233, 177, 4, 255, 229, 169, 8, 255, 220, 157, 10, 255, 217, 156, 9, 255, 224, 166, 11, 255, 222, 167, 8, 255, 220, 168, 6, 255, 223, 169, 9, 255, 221, 166, 7, 255, 220, 166, 5, 255, 221, 167, 6, 255, 219, 163, 6, 255, 220, 163, 12, 255, 221, 163, 9, 255, 217, 158, 6, 255, 218, 163, 5, 255, 215, 163, 2, 255, 205, 143, 2, 255, 203, 132, 3, 255, 210, 144, 7, 255, 210, 157, 6, 255, 210, 165, 6, 255, 215, 169, 7, 255, 216, 168, 6, 255, 215, 168, 2, 255, 213, 166, 10, 255, 216, 166, 4, 255, 213, 163, 2, 255, 213, 154, 5, 255, 205, 135, 7, 255, 207, 147, 9, 255, 211, 155, 5, 255, 213, 154, 7, 255, 209, 152, 5, 255, 211, 153, 9, 255, 208, 149, 7, 255, 211, 148, 6, 255, 210, 144, 10, 255, 210, 143, 5, 255, 209, 141, 12, 255, 205, 137, 3, 255, 206, 138, 2, 255, 207, 137, 12, 255, 205, 132, 12, 255, 205, 132, 12, 255, 202, 130, 8, 255, 206, 129, 10, 255, 198, 113, 12, 255, 174, 82, 4, 255, 166, 79, 2, 255, 185, 101, 8, 255, 186, 97, 11, 255, 182, 94, 4, 255, 183, 94, 7, 255, 179, 91, 4, 255, 175, 88, 7, 255, 163, 76, 6, 255, 169, 81, 4, 255, 169, 85, 3, 255, 155, 71, 0, 255, 158, 71, 1, 255, 173, 84, 0, 255, 173, 82, 6, 255, 158, 70, 4, 255, 149, 60, 1, 255, 160, 67, 4, 255, 159, 72, 3, 255, 144, 62, 3, 255, 138, 52, 6, 255, 137, 44, 9, 255, 149, 54, 7, 255, 155, 70, 8, 255, 145, 71, 4, 255, 145, 72, 6, 255, 148, 70, 4, 255, 148, 67, 4, 255, 132, 59, 2, 255, 120, 57, 4, 255, 123, 51, 4, 255, 120, 52, 1, 255, 121, 51, 5, 255, 124, 45, 8, 255, 114, 47, 2, 255, 112, 47, 8, 255, 102, 42, 9, 255, 93, 36, 0, 255, 114, 47, 5, 255, 121, 54, 3, 255, 117, 47, 5, 255, 109, 37, 5, 255, 140, 63, 16, 255, 164, 79, 12, 255, 175, 85, 4, 255, 174, 85, 0, 255, 172, 90, 2, 255, 177, 91, 3, 255, 180, 90, 1, 255, 182, 92, 3, 255, 184, 95, 7, 255, 181, 93, 5, 255, 180, 93, 2, 255, 184, 97, 2, 255, 184, 98, 0, 255, 189, 101, 3, 255, 188, 101, 4, 255, 189, 101, 4, 255, 189, 102, 4, 255, 187, 100, 2, 255, 186, 96, 2, 255, 184, 94, 1, 255, 184, 94, 3, 255, 182, 91, 4, 255, 177, 84, 1, 255, 177, 82, 3, 255, 171, 81, 6, 255, 139, 60, 1, 255, 126, 51, 2, 255, 126, 52, 1, 255, 123, 54, 1, 255, 119, 55, 3, 255, 109, 46, 3, 255, 104, 36, 5, 255, 97, 34, 0, 255, 107, 36, 4, 255, 98, 37, 8, 255, 90, 27, 3, 255, 91, 29, 3, 255, 101, 40, 2, 255, 97, 34, 3, 255, 83, 23, 2, 255, 93, 30, 4, 255, 95, 32, 0, 255, 104, 43, 2, 255, 112, 49, 3, 255, 119, 50, 3, 255, 118, 43, 2, 255, 120, 47, 4, 255, 120, 52, 3, 255, 125, 54, 4, 255, 135, 55, 6, 255, 140, 61, 2, 255, 139, 57, 0, 255, 140, 56, 1, 255, 136, 56, 4, 255, 131, 53, 4, 255, 130, 52, 4, 255, 129, 50, 4, 255, 120, 42, 4, 255, 99, 29, 2, 255, 82, 25, 0, 255, 83, 28, 4, 255, 80, 27, 7, 255, 64, 20, 3, 255, 66, 23, 1, 255, 72, 25, 4, 255, 65, 26, 5, 255, 53, 20, 0, 255, 55, 17, 1, 255, 62, 17, 2, 255, 59, 19, 3, 255, 55, 14, 1, 255, 61, 17, 5, 255, 54, 12, 2, 255, 51, 13, 2, 255, 44, 16, 2, 255, 31, 15, 1, 255, 32, 11, 5, 255, 31, 11, 3, 255, 33, 12, 1, 255, 40, 40, 7, 255, 27, 20, 0, 255, 47, 26, 48, 255, 14, 25, 158, 255, 6, 6, 40, 255, 14, 2, 0, 255, 11, 6, 4, 255, 13, 5, 3, 255, 15, 5, 4, 255, 14, 3, 1, 255, 16, 5, 2, 255, 12, 1, 1, 255, 11, 3, 1, 255, 13, 5, 3, 255, 13, 4, 3, 255, 15, 5, 3, 255, 15, 6, 3, 255, 16, 5, 3, 255, 21, 7, 5, 255, 15, 3, 3, 255, 16, 6, 4, 255, 19, 9, 6, 255, 23, 9, 4, 255, 25, 8, 2, 255, 27, 10, 2, 255, 26, 12, 7, 255, 21, 9, 7, 255, 26, 11, 6, 255, 25, 10, 5, 255, 28, 11, 7, 255, 30, 12, 9, 255, 30, 11, 7, 255, 32, 15, 9, 255, 33, 14, 4, 255, 34, 16, 3, 255, 35, 16, 9, 255, 32, 16, 7, 255, 40, 19, 6, 255, 35, 19, 4, 255, 37, 20, 2, 255, 37, 23, 4, 255, 36, 24, 5, 255, 37, 22, 2, 255, 42, 23, 5, 255, 43, 26, 4, 255, 47, 27, 5, 255, 44, 29, 1, 255, 45, 27, 8, 255, 54, 32, 4, 255, 55, 35, 3, 255, 57, 36, 5, 255, 59, 37, 6, 255, 54, 36, 2, 255, 73, 49, 2, 255, 86, 58, 2, 255, 68, 46, 8, 255, 72, 47, 7, 255, 73, 46, 1, 255, 66, 47, 4, 255, 69, 44, 3, 255, 72, 45, 3, 255, 68, 49, 6, 255, 62, 44, 1, 255, 90, 61, 9, 255, 155, 88, 17, 255, 180, 88, 13, 255, 136, 69, 3, 255, 95, 68, 6, 255, 157, 123, 8, 255, 193, 137, 0, 255, 191, 121, 10, 255, 191, 131, 11, 255, 192, 125, 1, 255, 148, 87, 3, 255, 89, 54, 2, 255, 87, 53, 4, 255, 85, 52, 9, 255, 81, 52, 3, 255, 77, 50, 5, 255, 63, 46, 3, 255, 71, 49, 1, 255, 72, 45, 1, 255, 76, 48, 2, 255, 79, 50, 2, 255, 81, 49, 1, 255, 84, 50, 6, 255, 81, 48, 9, 255, 76, 46, 3, 255, 78, 49, 4, 255, 85, 49, 7, 255, 94, 47, 2, 255, 77, 47, 3, 255, 71, 42, 8, 255, 79, 45, 6, 255, 68, 46, 5, 255, 103, 58, 8, 255, 70, 34, 3, 255, 67, 40, 6, 255, 85, 48, 3, 255, 94, 51, 6, 255, 61, 38, 2, 255, 67, 38, 7, 255, 69, 40, 4, 255, 76, 39, 6, 255, 81, 41, 3, 255, 81, 39, 6, 255, 81, 40, 3, 255, 77, 37, 3, 255, 94, 46, 8, 255, 90, 51, 6, 255, 95, 46, 4, 255, 114, 53, 8, 255, 123, 57, 6, 255, 135, 68, 8, 255, 147, 77, 8, 255, 152, 81, 8, 255, 163, 77, 10, 255, 166, 83, 7, 255, 176, 92, 5, 255, 182, 99, 8, 255, 181, 102, 3, 255, 193, 107, 4, 255, 188, 104, 6, 255, 184, 96, 13, 255, 187, 97, 12, 255, 198, 110, 12, 255, 196, 109, 4, 255, 196, 109, 2, 255, 201, 114, 4, 255, 206, 119, 13, 255, 205, 119, 8, 255, 209, 124, 7, 255, 210, 125, 9, 255, 212, 127, 3, 255, 213, 127, 5, 255, 213, 129, 10, 255, 212, 128, 16, 255, 220, 139, 11, 255, 217, 140, 18, 255, 216, 136, 31, 255, 207, 123, 10, 255, 206, 124, 9, 255, 210, 124, 12, 255, 206, 119, 6, 255, 203, 115, 10, 255, 198, 110, 18, 255, 191, 107, 6, 255, 188, 103, 5, 255, 185, 104, 14, 255, 188, 112, 13, 255, 194, 115, 9, 255, 193, 110, 10, 255, 181, 101, 6, 255, 184, 106, 9, 255, 194, 113, 12, 255, 194, 112, 7, 255, 185, 101, 6, 255, 190, 106, 13, 255, 193, 113, 11, 255, 194, 117, 4, 255, 196, 115, 14, 255, 196, 113, 17, 255, 201, 119, 8, 255, 202, 118, 4, 255, 196, 106, 16, 255, 196, 105, 6, 255, 201, 116, 10, 255, 198, 114, 11, 255, 193, 106, 14, 255, 206, 120, 19, 255, 213, 133, 12, 255, 215, 134, 15, 255, 212, 130, 8, 255, 210, 129, 10, 255, 218, 139, 7, 255, 214, 136, 13, 255, 214, 139, 9, 255, 212, 136, 9, 255, 216, 136, 12, 255, 220, 137, 14, 255, 192, 109, 11, 255, 193, 107, 10, 255, 176, 85, 6, 255, 178, 98, 11, 255, 208, 139, 25, 255, 214, 146, 10, 255, 216, 138, 13, 255, 221, 139, 6, 255, 217, 145, 8, 255, 221, 146, 14, 255, 211, 134, 5, 255, 207, 136, 20, 255, 215, 149, 29, 255, 217, 151, 6, 255, 212, 140, 9, 255, 199, 125, 12, 255, 207, 137, 12, 255, 210, 144, 7, 255, 209, 132, 13, 255, 207, 127, 5, 255, 204, 128, 9, 255, 215, 147, 17, 255, 202, 133, 7, 255, 205, 134, 4, 255, 217, 157, 2, 255, 225, 166, 10, 255, 216, 160, 16, 255, 217, 159, 12, 255, 221, 159, 11, 255, 216, 156, 4, 255, 218, 161, 5, 255, 209, 148, 10, 255, 209, 147, 10, 255, 206, 147, 11, 255, 214, 157, 9, 255, 224, 166, 7, 255, 217, 158, 5, 255, 212, 155, 11, 255, 225, 167, 3, 255, 223, 160, 7, 255, 214, 154, 16, 255, 218, 166, 3, 255, 221, 164, 2, 255, 225, 165, 6, 255, 221, 164, 13, 255, 218, 163, 13, 255, 211, 157, 5, 255, 223, 168, 11, 255, 231, 177, 9, 255, 228, 174, 4, 255, 230, 178, 4, 255, 228, 174, 7, 255, 223, 167, 9, 255, 220, 164, 5, 255, 222, 167, 5, 255, 225, 171, 10, 255, 221, 169, 9, 255, 221, 167, 6, 255, 224, 170, 9, 255, 220, 166, 6, 255, 222, 168, 6, 255, 222, 169, 4, 255, 220, 167, 4, 255, 220, 161, 6, 255, 207, 151, 9, 255, 205, 156, 4, 255, 220, 163, 8, 255, 216, 152, 2, 255, 203, 137, 6, 255, 206, 140, 12, 255, 207, 142, 6, 255, 207, 153, 7, 255, 214, 166, 8, 255, 218, 171, 4, 255, 217, 169, 4, 255, 216, 168, 10, 255, 219, 167, 13, 255, 216, 162, 1, 255, 214, 159, 4, 255, 208, 147, 2, 255, 203, 130, 2, 255, 209, 144, 9, 255, 215, 154, 13, 255, 208, 147, 9, 255, 209, 149, 7, 255, 212, 152, 12, 255, 210, 148, 8, 255, 209, 145, 2, 255, 210, 142, 7, 255, 211, 142, 6, 255, 208, 137, 11, 255, 206, 133, 4, 255, 207, 134, 4, 255, 206, 133, 11, 255, 200, 128, 8, 255, 200, 128, 4, 255, 199, 128, 1, 255, 209, 135, 4, 255, 182, 97, 3, 255, 172, 82, 9, 255, 192, 109, 7, 255, 193, 113, 7, 255, 197, 116, 6, 255, 197, 115, 9, 255, 197, 115, 5, 255, 181, 98, 2, 255, 179, 96, 12, 255, 168, 84, 7, 255, 163, 73, 6, 255, 165, 81, 12, 255, 150, 68, 9, 255, 149, 65, 4, 255, 166, 80, 3, 255, 166, 79, 1, 255, 171, 78, 8, 255, 168, 73, 9, 255, 156, 61, 0, 255, 155, 62, 0, 255, 142, 51, 7, 255, 131, 44, 8, 255, 130, 47, 9, 255, 122, 43, 5, 255, 126, 48, 1, 255, 146, 60, 5, 255, 149, 67, 6, 255, 144, 67, 4, 255, 127, 54, 3, 255, 123, 44, 11, 255, 119, 55, 14, 255, 127, 50, 6, 255, 124, 53, 1, 255, 121, 51, 5, 255, 121, 41, 7, 255, 114, 49, 4, 255, 117, 55, 6, 255, 113, 52, 8, 255, 102, 38, 0, 255, 108, 43, 2, 255, 117, 51, 3, 255, 107, 44, 4, 255, 114, 48, 2, 255, 157, 78, 5, 255, 168, 81, 2, 255, 165, 86, 10, 255, 167, 92, 4, 255, 175, 91, 1, 255, 176, 88, 3, 255, 177, 90, 1, 255, 177, 89, 0, 255, 178, 89, 3, 255, 181, 94, 5, 255, 183, 94, 1, 255, 183, 93, 2, 255, 185, 93, 1, 255, 183, 92, 1, 255, 185, 94, 3, 255, 186, 97, 3, 255, 186, 97, 3, 255, 185, 97, 1, 255, 186, 95, 1, 255, 185, 94, 1, 255, 186, 94, 2, 255, 186, 92, 4, 255, 184, 90, 2, 255, 182, 88, 1, 255, 178, 89, 2, 255, 156, 72, 2, 255, 134, 51, 5, 255, 129, 54, 6, 255, 129, 53, 6, 255, 125, 45, 3, 255, 125, 49, 3, 255, 108, 40, 8, 255, 101, 31, 0, 255, 106, 36, 4, 255, 97, 32, 2, 255, 88, 31, 4, 255, 78, 30, 2, 255, 84, 29, 4, 255, 106, 42, 8, 255, 95, 36, 1, 255, 67, 19, 2, 255, 64, 19, 9, 255, 76, 27, 6, 255, 86, 32, 1, 255, 87, 30, 0, 255, 98, 29, 5, 255, 118, 43, 7, 255, 121, 47, 3, 255, 122, 49, 4, 255, 123, 50, 1, 255, 130, 48, 5, 255, 127, 46, 4, 255, 125, 45, 4, 255, 121, 42, 5, 255, 110, 36, 3, 255, 96, 31, 4, 255, 92, 30, 2, 255, 100, 34, 1, 255, 99, 33, 6, 255, 90, 30, 4, 255, 80, 24, 1, 255, 67, 16, 1, 255, 58, 18, 7, 255, 67, 23, 2, 255, 69, 25, 1, 255, 76, 27, 4, 255, 73, 19, 1, 255, 72, 22, 4, 255, 66, 21, 7, 255, 68, 20, 7, 255, 65, 18, 3, 255, 66, 23, 6, 255, 63, 19, 3, 255, 60, 20, 3, 255, 54, 20, 4, 255, 45, 16, 1, 255, 41, 15, 2, 255, 38, 13, 1, 255, 32, 12, 0, 255, 31, 17, 0, 255, 38, 29, 43, 255, 15, 24, 152, 255, 10, 10, 56, 255, 13, 2, 0, 255, 11, 4, 2, 255, 13, 3, 5, 255, 16, 5, 6, 255, 14, 6, 4, 255, 10, 4, 1, 255, 12, 5, 2, 255, 13, 2, 2, 255, 14, 3, 3, 255, 9, 3, 1, 255, 14, 4, 3, 255, 14, 4, 3, 255, 13, 5, 2, 255, 14, 4, 2, 255, 19, 5, 4, 255, 16, 5, 4, 255, 16, 6, 5, 255, 21, 9, 6, 255, 24, 9, 4, 255, 25, 7, 3, 255, 24, 10, 5, 255, 23, 12, 9, 255, 19, 9, 6, 255, 24, 13, 7, 255, 25, 12, 7, 255, 21, 11, 6, 255, 19, 11, 5, 255, 22, 17, 9, 255, 27, 12, 5, 255, 30, 14, 5, 255, 30, 15, 4, 255, 33, 14, 7, 255, 33, 18, 9, 255, 33, 16, 5, 255, 32, 20, 6, 255, 36, 20, 3, 255, 42, 24, 7, 255, 37, 25, 6, 255, 38, 23, 3, 255, 42, 25, 8, 255, 39, 24, 0, 255, 50, 26, 0, 255, 45, 28, 4, 255, 53, 29, 3, 255, 63, 35, 1, 255, 59, 36, 1, 255, 63, 39, 1, 255, 60, 39, 5, 255, 66, 36, 6, 255, 84, 61, 0, 255, 78, 49, 6, 255, 72, 46, 2, 255, 71, 52, 1, 255, 69, 46, 7, 255, 63, 46, 5, 255, 63, 41, 0, 255, 60, 43, 2, 255, 74, 47, 7, 255, 130, 75, 4, 255, 171, 100, 13, 255, 140, 76, 9, 255, 96, 54, 2, 255, 85, 51, 4, 255, 152, 99, 6, 255, 201, 140, 1, 255, 188, 125, 5, 255, 179, 120, 3, 255, 196, 132, 4, 255, 151, 87, 4, 255, 91, 49, 4, 255, 77, 55, 1, 255, 77, 52, 5, 255, 74, 49, 2, 255, 68, 44, 0, 255, 68, 44, 3, 255, 83, 51, 7, 255, 69, 47, 6, 255, 71, 47, 1, 255, 82, 49, 0, 255, 73, 46, 5, 255, 81, 50, 8, 255, 80, 45, 3, 255, 78, 45, 4, 255, 78, 47, 8, 255, 75, 42, 1, 255, 80, 43, 3, 255, 83, 45, 7, 255, 84, 46, 2, 255, 90, 41, 2, 255, 80, 42, 3, 255, 75, 45, 3, 255, 71, 40, 3, 255, 70, 37, 10, 255, 70, 41, 1, 255, 75, 48, 2, 255, 67, 36, 12, 255, 75, 44, 7, 255, 81, 44, 2, 255, 86, 49, 5, 255, 81, 43, 2, 255, 84, 46, 2, 255, 82, 45, 6, 255, 82, 47, 4, 255, 82, 44, 3, 255, 86, 43, 1, 255, 86, 43, 5, 255, 81, 43, 3, 255, 83, 40, 2, 255, 90, 48, 7, 255, 88, 50, 6, 255, 88, 40, 4, 255, 92, 41, 7, 255, 88, 45, 4, 255, 101, 53, 1, 255, 127, 60, 13, 255, 149, 71, 8, 255, 169, 88, 1, 255, 183, 101, 5, 255, 190, 108, 5, 255, 186, 102, 8, 255, 180, 96, 6, 255, 187, 105, 6, 255, 190, 105, 3, 255, 191, 105, 5, 255, 196, 107, 12, 255, 187, 100, 5, 255, 183, 96, 11, 255, 202, 116, 12, 255, 206, 118, 19, 255, 208, 118, 13, 255, 209, 120, 10, 255, 207, 123, 13, 255, 210, 124, 21, 255, 213, 126, 5, 255, 212, 129, 25, 255, 209, 125, 38, 255, 207, 120, 15, 255, 209, 123, 22, 255, 205, 112, 38, 255, 200, 109, 10, 255, 201, 112, 8, 255, 198, 111, 9, 255, 190, 105, 5, 255, 189, 109, 16, 255, 197, 112, 27, 255, 195, 111, 7, 255, 193, 110, 8, 255, 192, 111, 6, 255, 191, 109, 4, 255, 202, 116, 19, 255, 197, 113, 14, 255, 186, 104, 5, 255, 189, 110, 5, 255, 181, 98, 18, 255, 195, 114, 13, 255, 198, 114, 6, 255, 193, 108, 15, 255, 199, 119, 8, 255, 189, 109, 11, 255, 196, 116, 14, 255, 198, 117, 10, 255, 201, 119, 9, 255, 213, 129, 14, 255, 208, 126, 7, 255, 209, 128, 14, 255, 218, 138, 15, 255, 208, 128, 1, 255, 201, 116, 10, 255, 197, 108, 10, 255, 205, 117, 18, 255, 218, 135, 16, 255, 214, 136, 8, 255, 213, 139, 8, 255, 216, 140, 12, 255, 211, 131, 17, 255, 209, 119, 13, 255, 209, 125, 14, 255, 205, 130, 10, 255, 183, 111, 7, 255, 201, 132, 20, 255, 218, 147, 20, 255, 218, 143, 10, 255, 210, 122, 15, 255, 201, 118, 13, 255, 212, 147, 13, 255, 215, 148, 15, 255, 213, 134, 14, 255, 217, 141, 22, 255, 218, 151, 19, 255, 212, 148, 18, 255, 202, 135, 10, 255, 195, 121, 14, 255, 209, 136, 14, 255, 210, 145, 10, 255, 196, 125, 12, 255, 180, 99, 8, 255, 181, 105, 11, 255, 198, 132, 10, 255, 197, 129, 8, 255, 201, 133, 17, 255, 217, 160, 13, 255, 219, 159, 8, 255, 216, 165, 10, 255, 228, 177, 12, 255, 213, 154, 1, 255, 223, 165, 4, 255, 216, 161, 12, 255, 205, 148, 9, 255, 220, 159, 9, 255, 215, 156, 7, 255, 212, 159, 0, 255, 209, 147, 7, 255, 220, 165, 5, 255, 213, 163, 10, 255, 211, 151, 6, 255, 213, 141, 13, 255, 214, 154, 5, 255, 213, 159, 3, 255, 223, 169, 7, 255, 217, 168, 2, 255, 217, 162, 3, 255, 224, 171, 9, 255, 217, 164, 3, 255, 214, 158, 3, 255, 227, 174, 3, 255, 227, 173, 5, 255, 228, 178, 1, 255, 228, 177, 2, 255, 221, 168, 0, 255, 225, 171, 2, 255, 227, 173, 7, 255, 222, 168, 9, 255, 222, 169, 9, 255, 223, 170, 3, 255, 222, 169, 6, 255, 221, 167, 5, 255, 223, 170, 4, 255, 223, 171, 2, 255, 222, 171, 2, 255, 224, 168, 5, 255, 215, 163, 6, 255, 214, 169, 3, 255, 211, 157, 4, 255, 204, 136, 10, 255, 196, 129, 8, 255, 199, 135, 5, 255, 201, 138, 7, 255, 210, 152, 8, 255, 214, 165, 5, 255, 218, 172, 4, 255, 216, 170, 4, 255, 217, 170, 8, 255, 214, 164, 13, 255, 212, 157, 10, 255, 212, 158, 10, 255, 196, 137, 7, 255, 201, 135, 5, 255, 211, 151, 5, 255, 213, 153, 13, 255, 207, 141, 13, 255, 205, 143, 9, 255, 211, 148, 6, 255, 209, 145, 7, 255, 206, 141, 3, 255, 209, 141, 4, 255, 210, 143, 5, 255, 206, 133, 10, 255, 203, 129, 8, 255, 205, 132, 10, 255, 208, 136, 13, 255, 206, 137, 5, 255, 201, 129, 15, 255, 197, 123, 16, 255, 200, 123, 6, 255, 196, 114, 6, 255, 197, 117, 3, 255, 198, 119, 8, 255, 202, 125, 5, 255, 199, 119, 8, 255, 198, 116, 12, 255, 188, 104, 4, 255, 179, 96, 4, 255, 174, 92, 4, 255, 180, 100, 5, 255, 181, 97, 5, 255, 166, 86, 2, 255, 150, 71, 4, 255, 151, 70, 10, 255, 160, 75, 8, 255, 159, 74, 4, 255, 173, 82, 6, 255, 163, 71, 1, 255, 147, 63, 6, 255, 148, 67, 7, 255, 137, 50, 8, 255, 137, 49, 13, 255, 130, 48, 1, 255, 120, 48, 2, 255, 125, 46, 4, 255, 120, 43, 3, 255, 117, 44, 5, 255, 116, 39, 1, 255, 115, 42, 4, 255, 118, 46, 2, 255, 114, 50, 8, 255, 118, 47, 2, 255, 116, 46, 2, 255, 115, 44, 6, 255, 118, 48, 2, 255, 116, 54, 4, 255, 110, 49, 3, 255, 104, 41, 4, 255, 102, 38, 1, 255, 109, 49, 3, 255, 128, 59, 4, 255, 136, 66, 2, 255, 154, 81, 11, 255, 172, 96, 5, 255, 173, 93, 1, 255, 173, 93, 10, 255, 169, 92, 1, 255, 172, 92, 0, 255, 175, 92, 3, 255, 174, 90, 2, 255, 174, 88, 0, 255, 179, 92, 3, 255, 180, 93, 4, 255, 180, 92, 0, 255, 182, 92, 1, 255, 183, 93, 2, 255, 185, 95, 4, 255, 183, 93, 2, 255, 181, 92, 0, 255, 185, 94, 1, 255, 188, 96, 3, 255, 184, 95, 1, 255, 186, 96, 0, 255, 184, 94, 2, 255, 181, 90, 1, 255, 181, 91, 2, 255, 182, 92, 0, 255, 185, 92, 3, 255, 175, 83, 3, 255, 145, 67, 3, 255, 126, 53, 7, 255, 108, 41, 6, 255, 94, 31, 1, 255, 101, 36, 4, 255, 110, 51, 4, 255, 104, 41, 0, 255, 97, 37, 1, 255, 97, 34, 1, 255, 87, 29, 0, 255, 84, 33, 4, 255, 83, 25, 3, 255, 83, 27, 1, 255, 77, 26, 2, 255, 67, 21, 3, 255, 60, 22, 3, 255, 53, 19, 1, 255, 60, 21, 5, 255, 54, 16, 4, 255, 55, 11, 6, 255, 67, 19, 1, 255, 72, 20, 0, 255, 72, 21, 3, 255, 78, 28, 3, 255, 85, 21, 3, 255, 81, 18, 0, 255, 86, 25, 0, 255, 95, 27, 1, 255, 90, 25, 1, 255, 79, 24, 1, 255, 75, 26, 2, 255, 82, 27, 2, 255, 94, 31, 4, 255, 96, 35, 6, 255, 84, 25, 1, 255, 74, 22, 4, 255, 56, 17, 1, 255, 68, 24, 4, 255, 61, 23, 0, 255, 70, 24, 4, 255, 75, 19, 4, 255, 69, 19, 4, 255, 63, 19, 5, 255, 63, 18, 5, 255, 56, 19, 2, 255, 61, 24, 5, 255, 65, 20, 2, 255, 62, 18, 1, 255, 59, 15, 2, 255, 60, 13, 2, 255, 57, 18, 2, 255, 52, 17, 3, 255, 44, 13, 3, 255, 45, 23, 29, 255, 14, 22, 144, 255, 4, 8, 46, 255, 14, 3, 0, 255, 15, 5, 9, 255, 15, 5, 5, 255, 14, 3, 4, 255, 15, 6, 8, 255, 11, 2, 1, 255, 11, 4, 2, 255, 11, 3, 1, 255, 13, 3, 2, 255, 12, 4, 2, 255, 12, 5, 2, 255, 15, 5, 4, 255, 16, 6, 5, 255, 16, 6, 5, 255, 16, 6, 4, 255, 18, 6, 5, 255, 21, 8, 7, 255, 17, 6, 2, 255, 18, 6, 2, 255, 24, 10, 4, 255, 25, 11, 7, 255, 23, 13, 9, 255, 21, 11, 7, 255, 22, 11, 4, 255, 27, 17, 6, 255, 27, 13, 5, 255, 29, 13, 6, 255, 29, 15, 7, 255, 27, 15, 5, 255, 31, 16, 7, 255, 28, 16, 10, 255, 28, 17, 10, 255, 34, 16, 5, 255, 33, 16, 2, 255, 31, 17, 7, 255, 29, 17, 6, 255, 41, 23, 6, 255, 38, 19, 3, 255, 37, 23, 4, 255, 40, 24, 4, 255, 44, 28, 9, 255, 37, 26, 2, 255, 43, 27, 4, 255, 48, 27, 6, 255, 50, 33, 2, 255, 54, 34, 2, 255, 63, 38, 0, 255, 57, 37, 3, 255, 58, 37, 3, 255, 90, 56, 11, 255, 83, 46, 4, 255, 70, 42, 1, 255, 64, 44, 5, 255, 59, 44, 1, 255, 54, 39, 6, 255, 63, 44, 2, 255, 84, 56, 4, 255, 121, 78, 12, 255, 159, 89, 9, 255, 151, 84, 7, 255, 105, 57, 4, 255, 83, 54, 1, 255, 84, 64, 3, 255, 120, 85, 6, 255, 187, 132, 11, 255, 198, 141, 2, 255, 189, 131, 3, 255, 184, 130, 3, 255, 152, 98, 1, 255, 98, 56, 10, 255, 77, 46, 4, 255, 77, 42, 0, 255, 70, 49, 4, 255, 68, 48, 1, 255, 74, 49, 4, 255, 66, 46, 6, 255, 64, 45, 4, 255, 70, 50, 3, 255, 76, 49, 1, 255, 82, 50, 5, 255, 75, 48, 2, 255, 78, 47, 4, 255, 79, 43, 1, 255, 77, 45, 4, 255, 75, 46, 6, 255, 79, 49, 5, 255, 78, 45, 2, 255, 73, 43, 8, 255, 78, 41, 6, 255, 80, 42, 4, 255, 69, 41, 4, 255, 79, 45, 6, 255, 72, 43, 6, 255, 72, 44, 6, 255, 66, 45, 1, 255, 81, 46, 3, 255, 86, 47, 4, 255, 74, 44, 4, 255, 77, 44, 0, 255, 93, 45, 2, 255, 86, 46, 5, 255, 80, 43, 2, 255, 82, 43, 5, 255, 82, 42, 3, 255, 87, 46, 5, 255, 77, 46, 2, 255, 83, 44, 6, 255, 87, 42, 6, 255, 82, 42, 6, 255, 80, 41, 7, 255, 86, 43, 7, 255, 83, 44, 1, 255, 82, 41, 1, 255, 85, 43, 2, 255, 84, 39, 6, 255, 90, 38, 6, 255, 90, 50, 5, 255, 109, 64, 6, 255, 150, 80, 5, 255, 171, 87, 10, 255, 174, 91, 11, 255, 180, 97, 7, 255, 170, 88, 0, 255, 176, 95, 4, 255, 178, 99, 9, 255, 184, 101, 7, 255, 176, 93, 1, 255, 178, 95, 2, 255, 197, 113, 7, 255, 198, 111, 6, 255, 204, 116, 5, 255, 202, 118, 1, 255, 202, 122, 8, 255, 208, 123, 18, 255, 209, 122, 10, 255, 208, 126, 4, 255, 204, 123, 0, 255, 207, 119, 9, 255, 205, 119, 22, 255, 198, 109, 27, 255, 200, 114, 14, 255, 198, 113, 7, 255, 193, 109, 11, 255, 198, 117, 7, 255, 198, 118, 5, 255, 198, 118, 14, 255, 200, 118, 15, 255, 200, 115, 18, 255, 198, 113, 6, 255, 202, 120, 12, 255, 182, 101, 8, 255, 165, 78, 14, 255, 197, 114, 8, 255, 199, 116, 14, 255, 179, 89, 10, 255, 194, 108, 13, 255, 189, 104, 17, 255, 196, 115, 22, 255, 207, 132, 8, 255, 206, 128, 17, 255, 210, 131, 13, 255, 213, 132, 13, 255, 206, 120, 9, 255, 205, 119, 14, 255, 204, 125, 5, 255, 208, 128, 8, 255, 209, 129, 13, 255, 204, 122, 5, 255, 199, 112, 9, 255, 210, 125, 15, 255, 216, 131, 15, 255, 212, 130, 9, 255, 211, 131, 15, 255, 209, 133, 14, 255, 212, 137, 3, 255, 204, 123, 14, 255, 203, 120, 11, 255, 215, 132, 15, 255, 213, 137, 18, 255, 212, 143, 30, 255, 212, 141, 12, 255, 212, 143, 5, 255, 213, 142, 10, 255, 196, 118, 8, 255, 180, 103, 16, 255, 207, 138, 13, 255, 216, 149, 17, 255, 213, 147, 15, 255, 221, 152, 25, 255, 218, 151, 16, 255, 223, 155, 14, 255, 220, 149, 11, 255, 205, 135, 8, 255, 210, 143, 15, 255, 215, 151, 11, 255, 197, 127, 12, 255, 181, 104, 21, 255, 183, 118, 11, 255, 205, 152, 13, 255, 206, 151, 9, 255, 205, 150, 12, 255, 215, 164, 8, 255, 215, 157, 4, 255, 216, 163, 11, 255, 228, 179, 7, 255, 217, 159, 4, 255, 218, 160, 3, 255, 217, 163, 17, 255, 203, 146, 7, 255, 204, 141, 6, 255, 210, 151, 1, 255, 202, 141, 8, 255, 204, 143, 8, 255, 217, 167, 3, 255, 219, 175, 8, 255, 204, 148, 12, 255, 179, 111, 13, 255, 210, 155, 14, 255, 212, 161, 9, 255, 208, 148, 8, 255, 210, 150, 1, 255, 215, 155, 6, 255, 220, 164, 1, 255, 220, 164, 5, 255, 207, 148, 7, 255, 223, 168, 6, 255, 220, 169, 4, 255, 225, 173, 6, 255, 225, 171, 5, 255, 218, 164, 1, 255, 219, 163, 2, 255, 216, 161, 1, 255, 217, 162, 2, 255, 218, 165, 5, 255, 224, 171, 1, 255, 223, 170, 2, 255, 223, 170, 3, 255, 225, 173, 3, 255, 224, 173, 2, 255, 223, 172, 2, 255, 221, 170, 6, 255, 222, 169, 10, 255, 220, 169, 7, 255, 208, 154, 4, 255, 192, 133, 10, 255, 187, 122, 13, 255, 194, 132, 1, 255, 201, 142, 4, 255, 216, 161, 8, 255, 216, 167, 4, 255, 220, 175, 10, 255, 215, 171, 6, 255, 217, 170, 7, 255, 210, 158, 4, 255, 207, 151, 4, 255, 209, 156, 4, 255, 201, 145, 8, 255, 207, 145, 7, 255, 210, 150, 4, 255, 210, 150, 5, 255, 208, 144, 12, 255, 208, 146, 10, 255, 208, 147, 1, 255, 206, 139, 6, 255, 207, 138, 9, 255, 210, 142, 10, 255, 209, 142, 11, 255, 203, 135, 9, 255, 202, 132, 4, 255, 206, 137, 8, 255, 209, 140, 14, 255, 208, 142, 10, 255, 209, 138, 20, 255, 201, 125, 19, 255, 199, 121, 2, 255, 203, 124, 9, 255, 201, 124, 7, 255, 197, 118, 12, 255, 200, 121, 10, 255, 202, 120, 9, 255, 190, 107, 3, 255, 183, 98, 3, 255, 185, 101, 2, 255, 179, 95, 6, 255, 177, 95, 4, 255, 185, 102, 5, 255, 182, 104, 7, 255, 179, 102, 9, 255, 167, 89, 1, 255, 172, 90, 2, 255, 176, 93, 7, 255, 179, 88, 5, 255, 175, 82, 1, 255, 164, 76, 10, 255, 153, 68, 5, 255, 144, 62, 1, 255, 136, 58, 6, 255, 125, 49, 6, 255, 115, 43, 7, 255, 121, 45, 4, 255, 115, 44, 2, 255, 106, 36, 0, 255, 102, 39, 3, 255, 111, 46, 2, 255, 115, 44, 4, 255, 116, 41, 3, 255, 117, 47, 3, 255, 117, 42, 2, 255, 117, 40, 6, 255, 121, 52, 5, 255, 127, 55, 0, 255, 119, 48, 2, 255, 112, 42, 10, 255, 102, 40, 5, 255, 101, 46, 6, 255, 121, 56, 6, 255, 154, 85, 2, 255, 168, 94, 8, 255, 171, 93, 9, 255, 173, 89, 1, 255, 176, 91, 2, 255, 174, 93, 6, 255, 169, 90, 3, 255, 171, 92, 1, 255, 173, 89, 5, 255, 176, 90, 2, 255, 179, 94, 2, 255, 178, 93, 3, 255, 179, 91, 2, 255, 182, 94, 1, 255, 181, 95, 2, 255, 179, 93, 1, 255, 181, 94, 2, 255, 184, 96, 2, 255, 184, 92, 0, 255, 183, 89, 0, 255, 182, 95, 0, 255, 181, 95, 1, 255, 181, 95, 4, 255, 180, 92, 3, 255, 177, 88, 1, 255, 181, 92, 4, 255, 184, 94, 6, 255, 180, 89, 1, 255, 177, 88, 2, 255, 169, 83, 8, 255, 154, 74, 4, 255, 134, 61, 0, 255, 116, 51, 6, 255, 110, 51, 4, 255, 107, 41, 2, 255, 101, 40, 4, 255, 95, 30, 3, 255, 88, 29, 2, 255, 83, 30, 0, 255, 79, 26, 6, 255, 69, 22, 6, 255, 68, 26, 1, 255, 78, 29, 0, 255, 86, 25, 1, 255, 76, 25, 3, 255, 72, 32, 2, 255, 74, 25, 1, 255, 66, 23, 7, 255, 69, 22, 4, 255, 64, 18, 5, 255, 47, 12, 6, 255, 45, 15, 3, 255, 51, 18, 2, 255, 52, 20, 3, 255, 60, 24, 3, 255, 70, 23, 2, 255, 77, 24, 3, 255, 75, 24, 4, 255, 73, 24, 4, 255, 80, 24, 5, 255, 84, 27, 1, 255, 86, 35, 2, 255, 85, 32, 2, 255, 84, 29, 4, 255, 82, 30, 3, 255, 85, 33, 4, 255, 74, 30, 2, 255, 70, 23, 2, 255, 75, 22, 4, 255, 73, 23, 5, 255, 69, 20, 0, 255, 69, 20, 1, 255, 64, 21, 1, 255, 72, 25, 4, 255, 82, 25, 5, 255, 75, 22, 0, 255, 68, 21, 0, 255, 68, 21, 2, 255, 60, 17, 1, 255, 59, 17, 3, 255, 55, 16, 5, 255, 11, 26, 141, 255, 2, 4, 60, 255, 5, 2, 0, 255, 6, 4, 3, 255, 17, 3, 17, 255, 18, 3, 11, 255, 11, 5, 2, 255, 14, 6, 6, 255, 16, 6, 7, 255, 17, 5, 6, 255, 12, 2, 2, 255, 11, 6, 3, 255, 10, 6, 3, 255, 13, 4, 3, 255, 14, 3, 3, 255, 16, 5, 4, 255, 15, 5, 4, 255, 16, 6, 4, 255, 17, 6, 4, 255, 18, 6, 5, 255, 16, 5, 2, 255, 18, 8, 3, 255, 22, 10, 3, 255, 23, 9, 4, 255, 23, 11, 7, 255, 24, 13, 9, 255, 25, 12, 8, 255, 22, 12, 8, 255, 21, 8, 7, 255, 28, 11, 12, 255, 33, 14, 15, 255, 28, 12, 9, 255, 29, 16, 9, 255, 27, 15, 9, 255, 31, 17, 10, 255, 37, 20, 9, 255, 32, 17, 3, 255, 32, 16, 5, 255, 31, 18, 7, 255, 36, 23, 6, 255, 34, 20, 3, 255, 37, 21, 3, 255, 42, 26, 4, 255, 37, 21, 3, 255, 42, 29, 3, 255, 43, 30, 4, 255, 61, 30, 1, 255, 65, 37, 0, 255, 62, 39, 0, 255, 66, 40, 0, 255, 57, 35, 3, 255, 69, 44, 3, 255, 85, 49, 3, 255, 63, 45, 6, 255, 61, 50, 4, 255, 84, 52, 8, 255, 95, 55, 2, 255, 115, 72, 9, 255, 150, 88, 14, 255, 174, 92, 12, 255, 161, 87, 8, 255, 124, 67, 3, 255, 98, 58, 0, 255, 95, 57, 7, 255, 100, 58, 8, 255, 119, 78, 4, 255, 179, 124, 15, 255, 197, 134, 3, 255, 195, 137, 2, 255, 192, 136, 3, 255, 161, 103, 5, 255, 106, 56, 1, 255, 77, 49, 4, 255, 74, 50, 5, 255, 70, 50, 4, 255, 61, 48, 7, 255, 70, 42, 2, 255, 81, 48, 4, 255, 74, 48, 6, 255, 62, 47, 5, 255, 78, 50, 5, 255, 83, 46, 6, 255, 83, 49, 6, 255, 78, 45, 1, 255, 76, 44, 3, 255, 78, 45, 5, 255, 76, 43, 3, 255, 76, 44, 4, 255, 73, 44, 9, 255, 70, 42, 7, 255, 72, 46, 4, 255, 71, 43, 2, 255, 71, 41, 1, 255, 67, 44, 1, 255, 70, 44, 3, 255, 72, 42, 2, 255, 76, 43, 2, 255, 79, 48, 6, 255, 87, 44, 1, 255, 87, 45, 2, 255, 81, 45, 5, 255, 78, 46, 4, 255, 89, 43, 4, 255, 88, 45, 5, 255, 81, 41, 4, 255, 84, 43, 5, 255, 85, 42, 3, 255, 83, 41, 2, 255, 76, 44, 4, 255, 72, 44, 1, 255, 82, 41, 7, 255, 78, 44, 2, 255, 74, 42, 1, 255, 79, 42, 4, 255, 74, 44, 2, 255, 93, 48, 9, 255, 89, 46, 4, 255, 76, 45, 3, 255, 90, 48, 2, 255, 85, 46, 5, 255, 69, 41, 4, 255, 86, 45, 5, 255, 99, 49, 6, 255, 119, 61, 10, 255, 135, 64, 6, 255, 164, 88, 3, 255, 173, 97, 2, 255, 163, 85, 2, 255, 164, 87, 1, 255, 174, 95, 7, 255, 185, 103, 2, 255, 186, 104, 4, 255, 193, 108, 7, 255, 192, 107, 10, 255, 200, 118, 16, 255, 199, 116, 10, 255, 199, 115, 4, 255, 202, 119, 5, 255, 201, 115, 16, 255, 200, 113, 11, 255, 208, 120, 12, 255, 206, 118, 16, 255, 203, 119, 4, 255, 199, 116, 6, 255, 182, 99, 9, 255, 184, 100, 7, 255, 201, 119, 7, 255, 203, 119, 13, 255, 200, 121, 10, 255, 203, 125, 13, 255, 205, 121, 9, 255, 208, 123, 2, 255, 183, 99, 15, 255, 153, 70, 4, 255, 173, 93, 10, 255, 200, 116, 14, 255, 195, 100, 15, 255, 202, 111, 14, 255, 212, 130, 13, 255, 200, 119, 10, 255, 208, 119, 9, 255, 202, 113, 12, 255, 203, 112, 13, 255, 191, 99, 7, 255, 201, 108, 16, 255, 213, 121, 9, 255, 197, 109, 9, 255, 207, 129, 6, 255, 203, 126, 9, 255, 200, 120, 13, 255, 206, 125, 7, 255, 210, 131, 10, 255, 214, 137, 7, 255, 212, 132, 7, 255, 204, 124, 7, 255, 195, 117, 14, 255, 194, 118, 8, 255, 208, 133, 9, 255, 207, 126, 12, 255, 192, 113, 16, 255, 191, 111, 15, 255, 209, 131, 19, 255, 212, 138, 15, 255, 208, 135, 14, 255, 206, 139, 6, 255, 203, 142, 5, 255, 204, 145, 8, 255, 202, 138, 21, 255, 206, 135, 22, 255, 208, 144, 9, 255, 206, 149, 9, 255, 208, 150, 14, 255, 214, 150, 7, 255, 217, 146, 0, 255, 202, 124, 7, 255, 196, 125, 15, 255, 204, 145, 4, 255, 217, 157, 7, 255, 204, 135, 13, 255, 187, 110, 7, 255, 204, 143, 9, 255, 209, 157, 9, 255, 214, 157, 3, 255, 216, 160, 5, 255, 217, 161, 10, 255, 218, 164, 4, 255, 220, 165, 8, 255, 229, 177, 7, 255, 217, 160, 17, 255, 210, 154, 13, 255, 217, 163, 14, 255, 210, 156, 8, 255, 201, 147, 2, 255, 207, 153, 9, 255, 208, 149, 14, 255, 209, 155, 2, 255, 215, 166, 7, 255, 216, 167, 1, 255, 208, 154, 5, 255, 196, 144, 3, 255, 210, 159, 2, 255, 203, 150, 10, 255, 198, 146, 14, 255, 201, 149, 13, 255, 206, 149, 8, 255, 207, 153, 0, 255, 208, 151, 7, 255, 203, 144, 7, 255, 215, 160, 1, 255, 218, 168, 4, 255, 218, 165, 6, 255, 219, 162, 6, 255, 217, 161, 4, 255, 216, 159, 7, 255, 210, 152, 10, 255, 216, 159, 6, 255, 222, 170, 0, 255, 224, 171, 1, 255, 224, 171, 3, 255, 224, 172, 3, 255, 225, 174, 3, 255, 222, 171, 3, 255, 218, 167, 3, 255, 219, 170, 9, 255, 220, 168, 7, 255, 223, 169, 8, 255, 207, 151, 6, 255, 205, 153, 4, 255, 197, 143, 3, 255, 192, 137, 2, 255, 207, 152, 5, 255, 214, 160, 4, 255, 216, 167, 2, 255, 219, 175, 7, 255, 216, 172, 7, 255, 215, 168, 8, 255, 212, 156, 3, 255, 210, 149, 2, 255, 205, 148, 0, 255, 206, 149, 9, 255, 216, 154, 9, 255, 213, 150, 6, 255, 206, 146, 4, 255, 209, 149, 14, 255, 211, 151, 11, 255, 210, 149, 5, 255, 207, 142, 3, 255, 209, 142, 4, 255, 212, 144, 10, 255, 205, 137, 8, 255, 206, 138, 7, 255, 209, 141, 2, 255, 209, 141, 4, 255, 208, 138, 11, 255, 208, 139, 15, 255, 205, 137, 5, 255, 208, 133, 9, 255, 205, 127, 10, 255, 206, 128, 14, 255, 201, 126, 6, 255, 194, 114, 6, 255, 179, 94, 7, 255, 177, 93, 4, 255, 185, 101, 2, 255, 187, 102, 5, 255, 186, 102, 1, 255, 184, 101, 2, 255, 188, 106, 9, 255, 190, 106, 8, 255, 186, 107, 6, 255, 182, 104, 1, 255, 184, 104, 2, 255, 179, 96, 2, 255, 176, 92, 4, 255, 172, 86, 8, 255, 179, 92, 3, 255, 165, 74, 8, 255, 139, 48, 7, 255, 135, 55, 2, 255, 126, 50, 0, 255, 118, 41, 5, 255, 122, 49, 6, 255, 122, 45, 5, 255, 111, 40, 0, 255, 110, 44, 4, 255, 104, 40, 4, 255, 112, 46, 1, 255, 106, 46, 2, 255, 107, 45, 5, 255, 101, 42, 5, 255, 105, 45, 1, 255, 106, 43, 1, 255, 102, 41, 3, 255, 108, 47, 2, 255, 112, 51, 2, 255, 110, 47, 2, 255, 108, 50, 3, 255, 106, 47, 3, 255, 119, 48, 5, 255, 156, 76, 1, 255, 166, 86, 3, 255, 170, 88, 13, 255, 172, 92, 7, 255, 171, 96, 1, 255, 172, 94, 11, 255, 172, 87, 6, 255, 172, 88, 2, 255, 174, 90, 4, 255, 176, 90, 1, 255, 175, 91, 0, 255, 176, 91, 2, 255, 178, 92, 2, 255, 181, 94, 1, 255, 179, 94, 2, 255, 179, 95, 4, 255, 177, 94, 2, 255, 179, 93, 1, 255, 182, 94, 1, 255, 181, 92, 0, 255, 179, 92, 1, 255, 177, 92, 1, 255, 177, 93, 3, 255, 178, 93, 2, 255, 176, 88, 0, 255, 178, 88, 1, 255, 179, 89, 3, 255, 177, 87, 2, 255, 179, 86, 0, 255, 184, 83, 3, 255, 180, 81, 3, 255, 158, 71, 0, 255, 145, 64, 10, 255, 126, 51, 3, 255, 115, 42, 2, 255, 106, 42, 4, 255, 103, 40, 1, 255, 97, 38, 1, 255, 92, 31, 5, 255, 76, 24, 6, 255, 61, 19, 2, 255, 71, 26, 4, 255, 83, 29, 6, 255, 85, 27, 5, 255, 82, 24, 5, 255, 79, 23, 4, 255, 79, 29, 8, 255, 80, 25, 5, 255, 79, 29, 2, 255, 83, 28, 2, 255, 78, 24, 2, 255, 66, 27, 3, 255, 59, 23, 3, 255, 61, 22, 5, 255, 61, 21, 4, 255, 56, 16, 2, 255, 60, 16, 2, 255, 62, 18, 2, 255, 66, 18, 4, 255, 74, 21, 5, 255, 75, 23, 0, 255, 75, 30, 2, 255, 77, 29, 2, 255, 84, 26, 1, 255, 95, 34, 1, 255, 92, 38, 1, 255, 87, 35, 1, 255, 81, 32, 2, 255, 73, 27, 1, 255, 70, 22, 1, 255, 74, 24, 1, 255, 75, 27, 5, 255, 71, 21, 1, 255, 76, 21, 1, 255, 88, 29, 4, 255, 89, 28, 2, 255, 84, 27, 0, 255, 83, 31, 2, 255, 79, 24, 1, 255, 78, 23, 1, 255, 77, 23, 3, 255, 3, 9, 60, 255, 1, 1, 0, 255, 6, 2, 3, 255, 7, 1, 0, 255, 12, 2, 6, 255, 18, 6, 10, 255, 16, 6, 6, 255, 12, 3, 5, 255, 11, 4, 4, 255, 7, 2, 2, 255, 8, 3, 1, 255, 11, 3, 1, 255, 11, 4, 2, 255, 13, 2, 2, 255, 17, 4, 5, 255, 18, 6, 6, 255, 14, 4, 3, 255, 16, 6, 4, 255, 18, 7, 5, 255, 18, 5, 7, 255, 13, 3, 1, 255, 15, 8, 2, 255, 22, 10, 4, 255, 24, 9, 2, 255, 25, 11, 5, 255, 27, 12, 7, 255, 24, 12, 4, 255, 22, 15, 7, 255, 20, 13, 11, 255, 20, 11, 10, 255, 20, 12, 9, 255, 22, 18, 9, 255, 22, 15, 11, 255, 33, 18, 11, 255, 35, 19, 8, 255, 33, 19, 9, 255, 25, 16, 4, 255, 35, 16, 3, 255, 34, 19, 7, 255, 30, 22, 4, 255, 32, 24, 5, 255, 35, 19, 4, 255, 38, 24, 6, 255, 37, 23, 4, 255, 44, 23, 1, 255, 46, 28, 2, 255, 44, 30, 4, 255, 42, 28, 5, 255, 38, 31, 3, 255, 49, 35, 4, 255, 84, 45, 3, 255, 109, 65, 17, 255, 122, 76, 12, 255, 136, 82, 13, 255, 157, 89, 17, 255, 163, 92, 18, 255, 162, 95, 17, 255, 154, 87, 10, 255, 128, 69, 4, 255, 101, 61, 2, 255, 90, 55, 3, 255, 87, 50, 6, 255, 87, 53, 13, 255, 98, 50, 4, 255, 86, 61, 6, 255, 171, 124, 4, 255, 197, 141, 2, 255, 187, 133, 3, 255, 194, 140, 1, 255, 178, 118, 3, 255, 120, 71, 5, 255, 81, 51, 3, 255, 69, 50, 1, 255, 71, 46, 2, 255, 69, 43, 4, 255, 68, 47, 4, 255, 72, 46, 1, 255, 74, 50, 1, 255, 68, 46, 5, 255, 74, 47, 5, 255, 72, 48, 4, 255, 70, 44, 1, 255, 75, 45, 4, 255, 74, 45, 1, 255, 74, 47, 3, 255, 70, 44, 4, 255, 72, 41, 2, 255, 80, 47, 0, 255, 76, 45, 4, 255, 80, 47, 9, 255, 72, 42, 1, 255, 68, 42, 3, 255, 74, 39, 5, 255, 68, 40, 3, 255, 69, 41, 3, 255, 79, 43, 6, 255, 83, 46, 3, 255, 85, 43, 2, 255, 80, 42, 8, 255, 82, 44, 2, 255, 86, 46, 2, 255, 88, 44, 3, 255, 77, 42, 1, 255, 78, 42, 1, 255, 73, 38, 2, 255, 78, 43, 2, 255, 82, 46, 2, 255, 73, 40, 1, 255, 82, 45, 6, 255, 80, 45, 2, 255, 78, 46, 4, 255, 78, 43, 1, 255, 79, 44, 3, 255, 70, 39, 4, 255, 82, 44, 2, 255, 80, 44, 2, 255, 78, 42, 4, 255, 78, 46, 4, 255, 76, 46, 7, 255, 74, 44, 2, 255, 83, 48, 2, 255, 81, 38, 3, 255, 83, 44, 4, 255, 80, 46, 1, 255, 81, 46, 3, 255, 94, 51, 8, 255, 119, 64, 3, 255, 141, 76, 4, 255, 153, 78, 9, 255, 156, 77, 8, 255, 167, 85, 1, 255, 175, 92, 2, 255, 184, 101, 5, 255, 179, 98, 13, 255, 190, 108, 10, 255, 195, 107, 4, 255, 194, 107, 7, 255, 186, 106, 3, 255, 194, 109, 13, 255, 200, 113, 5, 255, 203, 116, 3, 255, 200, 109, 7, 255, 200, 111, 17, 255, 196, 111, 20, 255, 193, 111, 13, 255, 202, 121, 10, 255, 199, 114, 14, 255, 189, 104, 15, 255, 203, 118, 25, 255, 210, 126, 6, 255, 208, 121, 11, 255, 190, 102, 9, 255, 167, 78, 9, 255, 193, 110, 19, 255, 211, 133, 21, 255, 210, 131, 18, 255, 196, 117, 11, 255, 199, 119, 15, 255, 211, 133, 11, 255, 205, 127, 18, 255, 197, 115, 5, 255, 198, 114, 6, 255, 208, 122, 27, 255, 198, 111, 11, 255, 184, 95, 4, 255, 199, 112, 10, 255, 207, 121, 20, 255, 215, 137, 11, 255, 208, 131, 13, 255, 209, 129, 23, 255, 213, 133, 12, 255, 201, 124, 2, 255, 210, 134, 20, 255, 203, 127, 7, 255, 201, 125, 10, 255, 201, 125, 18, 255, 202, 129, 13, 255, 204, 128, 11, 255, 197, 116, 14, 255, 203, 125, 20, 255, 199, 128, 8, 255, 202, 133, 9, 255, 209, 139, 8, 255, 208, 141, 19, 255, 206, 138, 23, 255, 210, 138, 20, 255, 210, 139, 17, 255, 211, 142, 9, 255, 204, 132, 13, 255, 212, 140, 12, 255, 208, 135, 9, 255, 192, 116, 10, 255, 192, 117, 11, 255, 188, 115, 6, 255, 183, 107, 16, 255, 196, 126, 10, 255, 201, 138, 9, 255, 207, 151, 8, 255, 211, 150, 12, 255, 185, 111, 9, 255, 199, 139, 16, 255, 209, 159, 7, 255, 205, 146, 4, 255, 207, 150, 10, 255, 212, 157, 8, 255, 209, 156, 5, 255, 214, 161, 9, 255, 214, 162, 4, 255, 211, 161, 11, 255, 210, 163, 1, 255, 214, 162, 9, 255, 205, 150, 10, 255, 203, 156, 13, 255, 209, 161, 4, 255, 210, 152, 4, 255, 209, 157, 5, 255, 211, 162, 13, 255, 211, 157, 0, 255, 211, 157, 6, 255, 205, 162, 8, 255, 205, 158, 2, 255, 206, 156, 7, 255, 211, 164, 6, 255, 205, 157, 3, 255, 209, 160, 1, 255, 211, 161, 5, 255, 217, 164, 10, 255, 205, 147, 2, 255, 197, 136, 10, 255, 216, 162, 12, 255, 215, 160, 10, 255, 211, 152, 6, 255, 210, 153, 2, 255, 212, 155, 3, 255, 223, 168, 8, 255, 222, 170, 2, 255, 223, 173, 3, 255, 223, 172, 2, 255, 223, 172, 4, 255, 225, 175, 5, 255, 223, 172, 2, 255, 222, 171, 5, 255, 214, 161, 3, 255, 224, 174, 12, 255, 220, 170, 1, 255, 224, 171, 3, 255, 215, 162, 4, 255, 209, 159, 2, 255, 190, 140, 9, 255, 192, 142, 8, 255, 211, 161, 5, 255, 207, 155, 0, 255, 216, 167, 4, 255, 218, 175, 2, 255, 215, 171, 4, 255, 211, 163, 8, 255, 211, 155, 7, 255, 200, 139, 6, 255, 197, 140, 1, 255, 198, 142, 17, 255, 210, 152, 8, 255, 208, 152, 0, 255, 203, 146, 2, 255, 213, 156, 9, 255, 211, 153, 5, 255, 212, 150, 12, 255, 210, 145, 5, 255, 208, 141, 0, 255, 209, 139, 10, 255, 208, 141, 2, 255, 209, 141, 5, 255, 211, 144, 4, 255, 211, 143, 6, 255, 206, 136, 13, 255, 203, 131, 9, 255, 205, 136, 6, 255, 206, 132, 11, 255, 211, 132, 14, 255, 205, 129, 7, 255, 201, 127, 0, 255, 199, 119, 6, 255, 190, 108, 8, 255, 175, 92, 9, 255, 181, 96, 9, 255, 176, 90, 7, 255, 182, 97, 10, 255, 190, 108, 6, 255, 190, 109, 1, 255, 188, 105, 3, 255, 183, 101, 3, 255, 181, 98, 3, 255, 181, 97, 5, 255, 174, 89, 2, 255, 174, 95, 4, 255, 173, 90, 10, 255, 168, 81, 5, 255, 148, 60, 6, 255, 128, 50, 5, 255, 118, 50, 8, 255, 115, 47, 9, 255, 115, 43, 1, 255, 113, 43, 4, 255, 113, 38, 8, 255, 113, 35, 1, 255, 115, 46, 5, 255, 105, 40, 3, 255, 104, 39, 0, 255, 100, 38, 0, 255, 94, 36, 5, 255, 97, 37, 4, 255, 98, 38, 4, 255, 104, 40, 6, 255, 107, 43, 2, 255, 107, 47, 3, 255, 110, 45, 3, 255, 112, 43, 3, 255, 104, 41, 2, 255, 102, 41, 6, 255, 104, 44, 6, 255, 142, 69, 8, 255, 165, 88, 4, 255, 166, 88, 7, 255, 172, 95, 5, 255, 174, 96, 3, 255, 173, 92, 6, 255, 171, 92, 6, 255, 169, 87, 4, 255, 173, 88, 2, 255, 176, 91, 0, 255, 178, 94, 3, 255, 177, 94, 2, 255, 176, 92, 0, 255, 177, 93, 2, 255, 177, 93, 1, 255, 180, 96, 3, 255, 178, 95, 2, 255, 175, 93, 0, 255, 176, 92, 1, 255, 180, 95, 4, 255, 177, 90, 2, 255, 178, 91, 2, 255, 177, 90, 2, 255, 177, 88, 0, 255, 180, 90, 2, 255, 179, 89, 0, 255, 176, 82, 3, 255, 171, 76, 7, 255, 156, 65, 1, 255, 140, 52, 1, 255, 130, 45, 5, 255, 126, 46, 8, 255, 114, 38, 2, 255, 106, 33, 1, 255, 113, 38, 4, 255, 116, 41, 3, 255, 112, 37, 1, 255, 106, 37, 2, 255, 99, 34, 4, 255, 79, 25, 3, 255, 70, 25, 2, 255, 67, 22, 2, 255, 73, 26, 6, 255, 78, 29, 3, 255, 79, 32, 1, 255, 82, 33, 6, 255, 82, 29, 2, 255, 74, 25, 0, 255, 73, 25, 2, 255, 74, 24, 3, 255, 73, 24, 4, 255, 60, 23, 4, 255, 60, 21, 1, 255, 61, 18, 0, 255, 58, 16, 2, 255, 53, 17, 5, 255, 49, 16, 1, 255, 60, 18, 2, 255, 66, 23, 5, 255, 64, 20, 1, 255, 75, 22, 2, 255, 76, 24, 3, 255, 75, 20, 1, 255, 89, 30, 4, 255, 98, 39, 4, 255, 91, 36, 3, 255, 96, 32, 4, 255, 93, 35, 5, 255, 79, 31, 0, 255, 75, 25, 2, 255, 73, 21, 3, 255, 67, 17, 2, 255, 73, 21, 4, 255, 79, 25, 6, 255, 77, 26, 2, 255, 85, 27, 3, 255, 87, 30, 4, 255, 83, 31, 2, 255, 91, 28, 5, 255, 92, 27, 3, 255, 93, 27, 3, 255, 3, 0, 0, 255, 7, 0, 0, 255, 7, 0, 0, 255, 2, 1, 0, 255, 3, 2, 0, 255, 16, 5, 6, 255, 24, 7, 13, 255, 16, 2, 9, 255, 10, 2, 4, 255, 10, 3, 2, 255, 16, 5, 6, 255, 13, 2, 4, 255, 10, 1, 3, 255, 9, 1, 2, 255, 15, 5, 5, 255, 15, 5, 3, 255, 17, 6, 4, 255, 15, 4, 2, 255, 19, 8, 7, 255, 19, 3, 3, 255, 15, 7, 4, 255, 12, 7, 3, 255, 18, 6, 3, 255, 16, 8, 0, 255, 19, 10, 2, 255, 22, 12, 3, 255, 23, 14, 7, 255, 24, 15, 7, 255, 21, 10, 7, 255, 25, 15, 15, 255, 23, 13, 10, 255, 23, 14, 6, 255, 26, 16, 11, 255, 29, 15, 6, 255, 34, 17, 5, 255, 36, 21, 10, 255, 37, 22, 9, 255, 40, 22, 4, 255, 35, 21, 5, 255, 26, 21, 6, 255, 40, 27, 5, 255, 55, 32, 5, 255, 54, 33, 4, 255, 61, 38, 10, 255, 63, 38, 8, 255, 72, 44, 10, 255, 79, 53, 9, 255, 93, 66, 9, 255, 118, 76, 17, 255, 143, 82, 22, 255, 154, 94, 13, 255, 152, 90, 16, 255, 135, 82, 8, 255, 124, 78, 4, 255, 114, 72, 12, 255, 94, 60, 6, 255, 74, 56, 5, 255, 56, 44, 4, 255, 53, 39, 5, 255, 61, 49, 2, 255, 61, 51, 0, 255, 64, 51, 2, 255, 67, 52, 8, 255, 69, 51, 2, 255, 132, 99, 4, 255, 197, 147, 7, 255, 205, 155, 0, 255, 203, 156, 7, 255, 183, 129, 2, 255, 153, 86, 4, 255, 101, 54, 8, 255, 71, 47, 1, 255, 67, 48, 4, 255, 71, 46, 4, 255, 71, 44, 1, 255, 73, 46, 2, 255, 79, 48, 6, 255, 71, 47, 5, 255, 72, 48, 2, 255, 75, 45, 1, 255, 60, 47, 1, 255, 66, 43, 3, 255, 72, 43, 5, 255, 69, 46, 0, 255, 66, 45, 3, 255, 71, 46, 5, 255, 70, 43, 3, 255, 77, 43, 1, 255, 75, 42, 3, 255, 78, 44, 3, 255, 71, 43, 0, 255, 69, 43, 2, 255, 75, 42, 5, 255, 78, 37, 5, 255, 78, 40, 4, 255, 72, 43, 3, 255, 79, 45, 1, 255, 83, 45, 2, 255, 79, 46, 2, 255, 83, 42, 0, 255, 87, 44, 3, 255, 79, 45, 1, 255, 77, 42, 2, 255, 75, 38, 3, 255, 77, 45, 4, 255, 78, 44, 2, 255, 81, 44, 3, 255, 80, 45, 1, 255, 83, 49, 2, 255, 84, 47, 4, 255, 82, 41, 3, 255, 88, 45, 3, 255, 85, 45, 3, 255, 84, 44, 4, 255, 82, 45, 2, 255, 79, 46, 1, 255, 81, 46, 4, 255, 80, 45, 3, 255, 78, 46, 3, 255, 76, 44, 3, 255, 83, 46, 5, 255, 84, 42, 0, 255, 86, 46, 5, 255, 84, 46, 4, 255, 83, 50, 0, 255, 81, 49, 4, 255, 78, 41, 5, 255, 83, 40, 3, 255, 97, 52, 6, 255, 106, 58, 3, 255, 121, 63, 4, 255, 142, 75, 6, 255, 156, 83, 3, 255, 155, 79, 3, 255, 170, 92, 8, 255, 182, 98, 6, 255, 182, 98, 8, 255, 178, 99, 0, 255, 196, 109, 11, 255, 201, 110, 13, 255, 202, 117, 2, 255, 199, 111, 8, 255, 195, 109, 10, 255, 198, 114, 13, 255, 201, 121, 5, 255, 203, 124, 10, 255, 197, 116, 11, 255, 198, 121, 15, 255, 205, 124, 17, 255, 204, 120, 9, 255, 183, 90, 9, 255, 179, 84, 7, 255, 150, 54, 5, 255, 191, 105, 6, 255, 214, 131, 13, 255, 209, 128, 12, 255, 209, 131, 9, 255, 211, 135, 4, 255, 212, 133, 17, 255, 213, 133, 15, 255, 217, 135, 13, 255, 216, 134, 9, 255, 212, 130, 20, 255, 195, 114, 7, 255, 188, 105, 8, 255, 196, 111, 16, 255, 210, 127, 15, 255, 214, 131, 17, 255, 207, 129, 8, 255, 206, 125, 14, 255, 209, 127, 15, 255, 199, 119, 6, 255, 207, 131, 20, 255, 207, 133, 19, 255, 199, 124, 11, 255, 205, 127, 14, 255, 210, 130, 5, 255, 206, 125, 2, 255, 204, 125, 21, 255, 203, 128, 16, 255, 201, 125, 8, 255, 196, 123, 17, 255, 201, 133, 5, 255, 205, 138, 2, 255, 207, 138, 13, 255, 203, 136, 10, 255, 205, 136, 13, 255, 204, 132, 12, 255, 191, 124, 12, 255, 198, 120, 11, 255, 191, 115, 11, 255, 184, 108, 17, 255, 187, 109, 10, 255, 185, 121, 19, 255, 190, 125, 15, 255, 186, 109, 10, 255, 194, 126, 9, 255, 204, 146, 11, 255, 208, 151, 15, 255, 203, 143, 9, 255, 193, 125, 4, 255, 201, 147, 5, 255, 207, 152, 6, 255, 204, 142, 1, 255, 205, 144, 3, 255, 204, 150, 5, 255, 201, 150, 1, 255, 208, 159, 6, 255, 212, 166, 7, 255, 217, 173, 1, 255, 213, 158, 11, 255, 204, 147, 10, 255, 206, 158, 2, 255, 202, 150, 2, 255, 203, 141, 14, 255, 211, 152, 8, 255, 208, 151, 4, 255, 200, 140, 4, 255, 200, 143, 8, 255, 197, 138, 11, 255, 192, 133, 13, 255, 186, 129, 7, 255, 182, 122, 10, 255, 179, 116, 7, 255, 174, 113, 8, 255, 167, 107, 7, 255, 162, 101, 13, 255, 169, 112, 5, 255, 185, 124, 10, 255, 202, 135, 18, 255, 205, 143, 16, 255, 204, 144, 9, 255, 206, 145, 2, 255, 206, 146, 6, 255, 215, 160, 3, 255, 220, 167, 2, 255, 221, 165, 0, 255, 220, 166, 6, 255, 222, 169, 5, 255, 222, 171, 0, 255, 226, 175, 3, 255, 218, 166, 3, 255, 221, 168, 6, 255, 222, 175, 6, 255, 221, 174, 0, 255, 225, 173, 1, 255, 215, 163, 7, 255, 206, 157, 4, 255, 213, 163, 12, 255, 209, 160, 5, 255, 210, 161, 5, 255, 206, 157, 1, 255, 210, 162, 10, 255, 221, 174, 12, 255, 219, 174, 3, 255, 209, 162, 6, 255, 207, 156, 6, 255, 204, 149, 3, 255, 189, 126, 1, 255, 199, 134, 14, 255, 212, 154, 12, 255, 211, 154, 5, 255, 207, 149, 5, 255, 211, 156, 1, 255, 210, 152, 9, 255, 207, 144, 10, 255, 212, 148, 4, 255, 199, 129, 5, 255, 190, 117, 4, 255, 204, 136, 1, 255, 211, 143, 9, 255, 210, 143, 7, 255, 210, 145, 4, 255, 209, 140, 17, 255, 207, 138, 9, 255, 208, 139, 10, 255, 207, 135, 16, 255, 206, 135, 8, 255, 204, 132, 5, 255, 204, 129, 9, 255, 198, 123, 4, 255, 193, 115, 0, 255, 185, 101, 7, 255, 184, 100, 9, 255, 186, 105, 9, 255, 184, 103, 5, 255, 189, 107, 6, 255, 188, 107, 3, 255, 188, 104, 4, 255, 176, 99, 4, 255, 177, 98, 3, 255, 180, 93, 3, 255, 179, 92, 3, 255, 174, 101, 1, 255, 177, 93, 5, 255, 157, 75, 8, 255, 128, 57, 4, 255, 132, 53, 5, 255, 125, 50, 4, 255, 116, 48, 1, 255, 123, 52, 7, 255, 106, 40, 2, 255, 101, 38, 5, 255, 98, 38, 5, 255, 102, 43, 2, 255, 102, 44, 0, 255, 99, 43, 2, 255, 109, 46, 3, 255, 106, 45, 8, 255, 103, 44, 5, 255, 97, 40, 3, 255, 113, 44, 4, 255, 128, 58, 4, 255, 137, 60, 5, 255, 131, 54, 4, 255, 127, 53, 5, 255, 120, 50, 0, 255, 110, 43, 6, 255, 97, 33, 5, 255, 114, 55, 7, 255, 164, 86, 3, 255, 166, 86, 2, 255, 165, 92, 8, 255, 169, 91, 3, 255, 175, 95, 6, 255, 172, 93, 5, 255, 172, 88, 4, 255, 174, 89, 4, 255, 178, 90, 3, 255, 178, 90, 3, 255, 179, 93, 4, 255, 178, 93, 2, 255, 176, 94, 1, 255, 174, 93, 0, 255, 179, 94, 1, 255, 177, 93, 1, 255, 178, 95, 1, 255, 175, 91, 1, 255, 177, 89, 4, 255, 175, 90, 2, 255, 175, 92, 3, 255, 173, 90, 1, 255, 175, 88, 2, 255, 180, 86, 5, 255, 178, 80, 8, 255, 167, 70, 8, 255, 145, 53, 4, 255, 126, 40, 2, 255, 117, 41, 2, 255, 113, 42, 3, 255, 115, 43, 4, 255, 116, 41, 4, 255, 108, 37, 1, 255, 106, 40, 3, 255, 109, 43, 2, 255, 105, 32, 2, 255, 107, 34, 6, 255, 97, 34, 3, 255, 90, 31, 3, 255, 88, 29, 1, 255, 87, 31, 1, 255, 87, 26, 1, 255, 79, 26, 2, 255, 82, 28, 3, 255, 84, 28, 2, 255, 83, 29, 2, 255, 79, 28, 2, 255, 74, 25, 1, 255, 73, 24, 4, 255, 74, 27, 5, 255, 71, 27, 3, 255, 68, 24, 3, 255, 70, 24, 3, 255, 63, 21, 1, 255, 54, 19, 3, 255, 53, 18, 4, 255, 66, 20, 3, 255, 69, 20, 1, 255, 69, 22, 2, 255, 71, 20, 0, 255, 74, 21, 4, 255, 78, 26, 3, 255, 87, 33, 0, 255, 92, 35, 4, 255, 92, 39, 3, 255, 96, 41, 6, 255, 91, 33, 1, 255, 87, 35, 3, 255, 81, 34, 2, 255, 76, 26, 1, 255, 75, 22, 4, 255, 66, 15, 4, 255, 65, 15, 4, 255, 74, 21, 2, 255, 84, 25, 0, 255, 85, 26, 2, 255, 83, 28, 7, 255, 90, 26, 4, 255, 94, 27, 1, 255, 97, 26, 1, 255, 0, 1, 1, 255, 4, 1, 0, 255, 5, 0, 0, 255, 2, 2, 0, 255, 0, 0, 0, 255, 6, 2, 1, 255, 14, 4, 2, 255, 15, 8, 5, 255, 12, 6, 7, 255, 11, 4, 8, 255, 13, 3, 5, 255, 14, 5, 3, 255, 13, 4, 1, 255, 14, 5, 5, 255, 16, 6, 6, 255, 18, 7, 5, 255, 20, 9, 7, 255, 17, 6, 5, 255, 18, 9, 6, 255, 14, 7, 4, 255, 18, 8, 6, 255, 20, 8, 7, 255, 17, 8, 4, 255, 15, 9, 2, 255, 18, 9, 2, 255, 18, 8, 2, 255, 18, 10, 4, 255, 21, 12, 6, 255, 20, 11, 8, 255, 23, 15, 13, 255, 27, 18, 14, 255, 23, 12, 5, 255, 26, 19, 12, 255, 23, 16, 5, 255, 27, 15, 4, 255, 37, 19, 10, 255, 41, 20, 13, 255, 37, 19, 5, 255, 32, 20, 6, 255, 20, 17, 9, 255, 42, 29, 7, 255, 83, 58, 7, 255, 91, 66, 13, 255, 100, 67, 22, 255, 108, 72, 16, 255, 115, 78, 9, 255, 122, 78, 15, 255, 111, 72, 10, 255, 107, 64, 9, 255, 100, 67, 9, 255, 73, 54, 7, 255, 53, 40, 1, 255, 57, 41, 4, 255, 56, 39, 3, 255, 52, 41, 6, 255, 46, 43, 2, 255, 51, 49, 0, 255, 59, 50, 1, 255, 64, 44, 6, 255, 65, 49, 3, 255, 70, 49, 0, 255, 72, 55, 3, 255, 60, 54, 4, 255, 100, 80, 5, 255, 190, 135, 3, 255, 201, 148, 6, 255, 199, 153, 4, 255, 191, 139, 4, 255, 161, 101, 7, 255, 121, 62, 6, 255, 81, 48, 2, 255, 66, 50, 0, 255, 63, 50, 3, 255, 65, 49, 3, 255, 71, 48, 3, 255, 71, 44, 1, 255, 71, 43, 1, 255, 75, 45, 4, 255, 73, 42, 2, 255, 77, 42, 3, 255, 68, 47, 4, 255, 71, 45, 3, 255, 74, 46, 4, 255, 70, 45, 2, 255, 66, 42, 3, 255, 69, 42, 4, 255, 67, 41, 4, 255, 73, 42, 1, 255, 65, 39, 0, 255, 68, 41, 2, 255, 70, 41, 3, 255, 71, 39, 2, 255, 75, 40, 3, 255, 77, 42, 5, 255, 79, 45, 6, 255, 76, 41, 1, 255, 76, 43, 2, 255, 86, 42, 4, 255, 79, 41, 1, 255, 77, 42, 1, 255, 79, 43, 2, 255, 80, 44, 3, 255, 82, 41, 4, 255, 81, 42, 2, 255, 85, 50, 1, 255, 83, 47, 4, 255, 83, 41, 7, 255, 83, 41, 3, 255, 86, 49, 1, 255, 86, 49, 2, 255, 93, 45, 6, 255, 93, 47, 4, 255, 84, 47, 2, 255, 82, 46, 4, 255, 90, 48, 6, 255, 85, 49, 1, 255, 85, 50, 4, 255, 81, 44, 0, 255, 84, 51, 4, 255, 80, 48, 2, 255, 83, 50, 1, 255, 86, 47, 2, 255, 81, 42, 2, 255, 86, 47, 6, 255, 86, 49, 1, 255, 87, 52, 5, 255, 87, 49, 8, 255, 88, 47, 4, 255, 87, 44, 6, 255, 83, 47, 1, 255, 81, 48, 0, 255, 91, 48, 8, 255, 106, 52, 9, 255, 126, 66, 5, 255, 146, 80, 6, 255, 167, 90, 9, 255, 166, 83, 11, 255, 173, 96, 9, 255, 188, 104, 5, 255, 193, 105, 17, 255, 194, 116, 7, 255, 196, 112, 9, 255, 190, 108, 1, 255, 195, 114, 8, 255, 194, 114, 7, 255, 197, 115, 8, 255, 203, 120, 8, 255, 202, 126, 5, 255, 206, 127, 15, 255, 197, 115, 7, 255, 168, 79, 8, 255, 175, 89, 6, 255, 172, 89, 11, 255, 194, 114, 6, 255, 208, 125, 20, 255, 210, 130, 6, 255, 214, 132, 11, 255, 217, 133, 22, 255, 211, 127, 15, 255, 206, 121, 5, 255, 196, 108, 10, 255, 205, 119, 12, 255, 203, 120, 8, 255, 188, 101, 13, 255, 194, 109, 11, 255, 205, 118, 14, 255, 207, 124, 13, 255, 205, 126, 8, 255, 198, 120, 4, 255, 189, 106, 5, 255, 191, 106, 13, 255, 197, 115, 15, 255, 195, 118, 2, 255, 199, 124, 15, 255, 197, 122, 18, 255, 192, 117, 12, 255, 185, 108, 12, 255, 182, 107, 7, 255, 187, 115, 11, 255, 190, 122, 3, 255, 195, 122, 6, 255, 182, 111, 18, 255, 187, 118, 1, 255, 198, 127, 21, 255, 199, 132, 21, 255, 202, 130, 8, 255, 202, 127, 16, 255, 188, 124, 6, 255, 187, 121, 14, 255, 198, 135, 11, 255, 190, 128, 0, 255, 192, 122, 12, 255, 189, 123, 16, 255, 186, 123, 5, 255, 195, 132, 9, 255, 189, 123, 16, 255, 187, 127, 9, 255, 195, 136, 4, 255, 196, 142, 10, 255, 201, 144, 11, 255, 194, 129, 2, 255, 191, 129, 16, 255, 198, 137, 13, 255, 205, 141, 3, 255, 196, 133, 3, 255, 196, 137, 1, 255, 201, 137, 13, 255, 191, 129, 19, 255, 193, 132, 13, 255, 203, 137, 3, 255, 206, 136, 12, 255, 200, 136, 7, 255, 190, 130, 9, 255, 188, 133, 7, 255, 185, 123, 12, 255, 183, 112, 9, 255, 162, 97, 11, 255, 143, 88, 9, 255, 153, 92, 16, 255, 150, 88, 7, 255, 155, 92, 12, 255, 157, 96, 5, 255, 162, 100, 10, 255, 157, 92, 7, 255, 155, 94, 11, 255, 153, 87, 19, 255, 149, 86, 11, 255, 152, 98, 10, 255, 184, 130, 8, 255, 188, 114, 17, 255, 198, 134, 6, 255, 192, 134, 3, 255, 195, 129, 12, 255, 209, 149, 11, 255, 219, 165, 10, 255, 213, 157, 4, 255, 213, 153, 4, 255, 217, 162, 7, 255, 224, 171, 5, 255, 225, 171, 2, 255, 222, 168, 6, 255, 212, 156, 2, 255, 216, 162, 4, 255, 221, 170, 5, 255, 220, 167, 1, 255, 224, 173, 1, 255, 207, 156, 8, 255, 208, 163, 7, 255, 220, 176, 6, 255, 214, 165, 1, 255, 206, 153, 0, 255, 210, 160, 4, 255, 215, 168, 4, 255, 222, 175, 10, 255, 219, 169, 5, 255, 206, 151, 10, 255, 203, 150, 7, 255, 210, 153, 10, 255, 198, 140, 4, 255, 208, 149, 17, 255, 211, 157, 12, 255, 211, 157, 8, 255, 209, 149, 14, 255, 208, 150, 3, 255, 208, 150, 7, 255, 204, 143, 6, 255, 206, 144, 3, 255, 185, 116, 7, 255, 171, 97, 13, 255, 188, 117, 9, 255, 204, 137, 7, 255, 210, 142, 11, 255, 211, 145, 5, 255, 211, 144, 10, 255, 211, 143, 5, 255, 209, 141, 8, 255, 208, 139, 12, 255, 205, 133, 4, 255, 207, 133, 7, 255, 206, 132, 8, 255, 200, 126, 8, 255, 196, 119, 6, 255, 196, 117, 5, 255, 192, 114, 4, 255, 192, 115, 4, 255, 191, 113, 5, 255, 187, 109, 0, 255, 188, 108, 6, 255, 183, 102, 3, 255, 179, 101, 4, 255, 173, 95, 7, 255, 170, 85, 3, 255, 177, 86, 7, 255, 180, 84, 5, 255, 161, 77, 8, 255, 129, 59, 2, 255, 124, 54, 9, 255, 137, 62, 10, 255, 128, 50, 0, 255, 128, 52, 3, 255, 134, 59, 3, 255, 114, 39, 8, 255, 112, 44, 2, 255, 108, 42, 5, 255, 102, 35, 5, 255, 103, 39, 4, 255, 101, 38, 4, 255, 110, 42, 1, 255, 121, 45, 7, 255, 117, 39, 10, 255, 102, 40, 5, 255, 94, 38, 0, 255, 111, 47, 5, 255, 124, 47, 5, 255, 125, 51, 2, 255, 125, 53, 6, 255, 119, 48, 1, 255, 118, 50, 7, 255, 112, 47, 6, 255, 107, 46, 0, 255, 141, 70, 5, 255, 165, 84, 4, 255, 166, 89, 4, 255, 170, 90, 3, 255, 171, 88, 0, 255, 174, 92, 1, 255, 176, 95, 0, 255, 174, 93, 1, 255, 173, 87, 8, 255, 177, 90, 9, 255, 178, 93, 3, 255, 175, 90, 0, 255, 177, 90, 3, 255, 176, 93, 2, 255, 171, 92, 0, 255, 173, 92, 2, 255, 178, 92, 3, 255, 176, 89, 1, 255, 170, 85, 2, 255, 171, 89, 2, 255, 172, 90, 4, 255, 174, 88, 2, 255, 167, 78, 3, 255, 172, 80, 2, 255, 167, 75, 3, 255, 138, 50, 4, 255, 118, 46, 1, 255, 110, 41, 2, 255, 106, 37, 2, 255, 118, 41, 0, 255, 127, 47, 5, 255, 123, 45, 11, 255, 117, 48, 6, 255, 115, 45, 1, 255, 112, 41, 2, 255, 105, 37, 2, 255, 99, 35, 2, 255, 97, 35, 3, 255, 97, 34, 3, 255, 96, 30, 1, 255, 88, 29, 2, 255, 85, 30, 3, 255, 79, 27, 0, 255, 84, 27, 2, 255, 79, 28, 1, 255, 81, 29, 4, 255, 81, 29, 2, 255, 79, 27, 0, 255, 81, 28, 1, 255, 80, 27, 1, 255, 81, 28, 0, 255, 80, 26, 2, 255, 77, 25, 4, 255, 69, 21, 4, 255, 55, 18, 2, 255, 49, 18, 0, 255, 59, 22, 4, 255, 63, 19, 4, 255, 66, 21, 2, 255, 65, 23, 2, 255, 71, 22, 8, 255, 74, 24, 6, 255, 76, 26, 1, 255, 75, 26, 1, 255, 80, 26, 1, 255, 86, 34, 5, 255, 91, 37, 6, 255, 94, 31, 2, 255, 87, 37, 3, 255, 85, 35, 3, 255, 84, 30, 2, 255, 70, 27, 3, 255, 68, 24, 5, 255, 71, 21, 4, 255, 70, 22, 2, 255, 73, 25, 2, 255, 76, 22, 1, 255, 81, 27, 3, 255, 87, 28, 0, 255, 96, 32, 3, 255, 0, 2, 0, 255, 3, 1, 0, 255, 4, 0, 0, 255, 3, 2, 0, 255, 1, 1, 0, 255, 3, 1, 0, 255, 9, 3, 3, 255, 13, 8, 7, 255, 11, 6, 3, 255, 11, 3, 1, 255, 11, 3, 3, 255, 14, 6, 6, 255, 13, 4, 4, 255, 17, 7, 6, 255, 15, 5, 4, 255, 16, 4, 3, 255, 17, 6, 5, 255, 15, 6, 3, 255, 15, 8, 5, 255, 13, 9, 5, 255, 14, 4, 2, 255, 16, 6, 4, 255, 18, 8, 4, 255, 20, 7, 3, 255, 19, 10, 3, 255, 20, 14, 7, 255, 16, 9, 4, 255, 17, 13, 9, 255, 21, 13, 11, 255, 20, 11, 9, 255, 27, 16, 13, 255, 25, 16, 10, 255, 24, 16, 9, 255, 30, 18, 8, 255, 34, 18, 9, 255, 31, 17, 9, 255, 28, 17, 10, 255, 28, 19, 6, 255, 26, 17, 10, 255, 26, 21, 6, 255, 34, 24, 3, 255, 35, 28, 4, 255, 33, 27, 2, 255, 40, 32, 3, 255, 35, 34, 5, 255, 36, 34, 3, 255, 42, 35, 3, 255, 41, 31, 1, 255, 49, 43, 0, 255, 64, 51, 3, 255, 46, 37, 5, 255, 62, 46, 8, 255, 58, 42, 6, 255, 60, 50, 3, 255, 62, 52, 2, 255, 59, 45, 3, 255, 63, 46, 6, 255, 65, 47, 4, 255, 67, 48, 1, 255, 61, 47, 3, 255, 81, 50, 6, 255, 70, 51, 3, 255, 75, 59, 5, 255, 156, 115, 10, 255, 201, 145, 0, 255, 198, 145, 4, 255, 193, 136, 4, 255, 174, 110, 1, 255, 135, 79, 2, 255, 97, 56, 1, 255, 70, 46, 0, 255, 72, 52, 5, 255, 67, 49, 3, 255, 66, 50, 2, 255, 76, 48, 4, 255, 78, 44, 5, 255, 73, 42, 3, 255, 71, 45, 2, 255, 69, 40, 1, 255, 73, 42, 6, 255, 67, 42, 2, 255, 76, 43, 4, 255, 79, 42, 2, 255, 68, 45, 2, 255, 64, 46, 6, 255, 65, 42, 2, 255, 61, 38, 2, 255, 66, 42, 4, 255, 61, 45, 5, 255, 67, 42, 3, 255, 73, 40, 4, 255, 74, 45, 5, 255, 79, 45, 5, 255, 81, 43, 2, 255, 79, 42, 2, 255, 72, 41, 0, 255, 77, 44, 4, 255, 86, 43, 5, 255, 78, 42, 2, 255, 79, 45, 4, 255, 81, 44, 4, 255, 80, 40, 2, 255, 85, 43, 6, 255, 88, 47, 5, 255, 83, 44, 0, 255, 86, 45, 4, 255, 81, 36, 2, 255, 86, 40, 4, 255, 89, 44, 1, 255, 92, 45, 0, 255, 95, 42, 3, 255, 92, 45, 1, 255, 87, 49, 2, 255, 84, 48, 5, 255, 88, 46, 2, 255, 88, 51, 5, 255, 82, 46, 1, 255, 86, 47, 3, 255, 88, 47, 5, 255, 88, 50, 7, 255, 86, 48, 3, 255, 86, 50, 4, 255, 83, 47, 3, 255, 89, 48, 5, 255, 90, 49, 3, 255, 88, 48, 3, 255, 89, 49, 5, 255, 86, 46, 2, 255, 81, 49, 3, 255, 77, 47, 2, 255, 82, 51, 4, 255, 85, 50, 5, 255, 91, 47, 8, 255, 97, 52, 4, 255, 105, 53, 3, 255, 128, 69, 12, 255, 154, 83, 8, 255, 182, 96, 5, 255, 188, 102, 2, 255, 184, 101, 3, 255, 185, 105, 6, 255, 188, 107, 10, 255, 190, 110, 9, 255, 193, 111, 11, 255, 192, 108, 9, 255, 191, 107, 8, 255, 197, 112, 11, 255, 192, 112, 8, 255, 203, 123, 14, 255, 184, 99, 8, 255, 196, 111, 10, 255, 185, 97, 7, 255, 185, 97, 16, 255, 181, 94, 8, 255, 191, 105, 13, 255, 211, 125, 21, 255, 204, 115, 4, 255, 194, 103, 9, 255, 184, 93, 10, 255, 193, 104, 13, 255, 184, 99, 4, 255, 200, 117, 7, 255, 203, 120, 13, 255, 204, 121, 10, 255, 185, 99, 1, 255, 187, 98, 3, 255, 194, 111, 16, 255, 195, 116, 12, 255, 194, 115, 14, 255, 191, 111, 7, 255, 205, 125, 10, 255, 194, 115, 7, 255, 196, 118, 15, 255, 197, 124, 5, 255, 186, 112, 15, 255, 179, 103, 18, 255, 190, 115, 16, 255, 189, 119, 8, 255, 190, 125, 9, 255, 193, 120, 16, 255, 188, 121, 14, 255, 186, 116, 8, 255, 193, 121, 0, 255, 186, 119, 8, 255, 189, 122, 13, 255, 200, 128, 13, 255, 191, 124, 19, 255, 187, 123, 12, 255, 196, 123, 18, 255, 188, 129, 6, 255, 191, 126, 7, 255, 189, 121, 7, 255, 178, 114, 12, 255, 172, 110, 10, 255, 185, 121, 11, 255, 191, 127, 7, 255, 179, 118, 11, 255, 172, 108, 15, 255, 160, 101, 15, 255, 151, 90, 14, 255, 174, 110, 15, 255, 170, 107, 17, 255, 150, 86, 7, 255, 156, 96, 14, 255, 161, 106, 18, 255, 170, 102, 11, 255, 163, 94, 8, 255, 137, 76, 4, 255, 128, 71, 13, 255, 133, 77, 8, 255, 136, 86, 6, 255, 142, 83, 20, 255, 146, 81, 7, 255, 148, 83, 8, 255, 154, 94, 3, 255, 145, 81, 16, 255, 134, 79, 12, 255, 143, 91, 11, 255, 164, 99, 6, 255, 176, 108, 8, 255, 182, 109, 11, 255, 186, 114, 8, 255, 183, 107, 4, 255, 174, 94, 2, 255, 175, 99, 6, 255, 191, 113, 8, 255, 190, 108, 0, 255, 195, 111, 17, 255, 191, 115, 12, 255, 169, 101, 10, 255, 195, 134, 5, 255, 199, 136, 9, 255, 182, 118, 15, 255, 200, 142, 13, 255, 218, 164, 11, 255, 213, 163, 2, 255, 215, 168, 0, 255, 221, 169, 3, 255, 223, 168, 9, 255, 222, 168, 7, 255, 221, 166, 4, 255, 213, 158, 2, 255, 213, 160, 0, 255, 220, 169, 0, 255, 215, 159, 7, 255, 219, 170, 6, 255, 217, 171, 8, 255, 216, 171, 6, 255, 221, 178, 4, 255, 221, 177, 3, 255, 212, 166, 4, 255, 206, 161, 5, 255, 212, 171, 5, 255, 213, 171, 1, 255, 206, 159, 5, 255, 202, 148, 11, 255, 203, 151, 2, 255, 208, 156, 4, 255, 204, 149, 10, 255, 209, 155, 19, 255, 211, 161, 7, 255, 210, 158, 7, 255, 204, 146, 10, 255, 211, 154, 7, 255, 208, 150, 6, 255, 205, 146, 9, 255, 205, 145, 5, 255, 203, 143, 11, 255, 198, 136, 5, 255, 199, 134, 5, 255, 207, 142, 11, 255, 211, 145, 6, 255, 213, 147, 6, 255, 210, 140, 18, 255, 200, 128, 14, 255, 200, 128, 11, 255, 201, 130, 6, 255, 203, 130, 6, 255, 207, 132, 11, 255, 203, 129, 1, 255, 200, 125, 3, 255, 200, 123, 10, 255, 198, 122, 2, 255, 195, 119, 5, 255, 193, 118, 9, 255, 189, 111, 10, 255, 188, 111, 2, 255, 186, 108, 8, 255, 185, 102, 5, 255, 181, 96, 3, 255, 172, 90, 7, 255, 162, 85, 5, 255, 142, 65, 5, 255, 143, 64, 10, 255, 130, 54, 6, 255, 128, 52, 5, 255, 128, 50, 1, 255, 122, 51, 8, 255, 119, 52, 5, 255, 128, 55, 3, 255, 124, 42, 4, 255, 111, 37, 6, 255, 108, 40, 4, 255, 105, 42, 0, 255, 101, 38, 1, 255, 101, 40, 5, 255, 96, 38, 1, 255, 106, 43, 4, 255, 112, 45, 3, 255, 108, 40, 6, 255, 100, 41, 4, 255, 100, 44, 7, 255, 99, 40, 4, 255, 110, 43, 3, 255, 118, 48, 7, 255, 114, 45, 5, 255, 112, 43, 5, 255, 113, 47, 2, 255, 112, 47, 3, 255, 105, 42, 5, 255, 100, 43, 4, 255, 146, 73, 4, 255, 163, 87, 0, 255, 165, 89, 5, 255, 168, 87, 2, 255, 170, 90, 6, 255, 175, 96, 3, 255, 175, 94, 2, 255, 176, 92, 2, 255, 177, 92, 5, 255, 174, 89, 4, 255, 170, 85, 2, 255, 173, 89, 5, 255, 172, 89, 2, 255, 168, 86, 1, 255, 174, 91, 4, 255, 174, 87, 0, 255, 172, 85, 1, 255, 170, 88, 7, 255, 176, 87, 7, 255, 168, 81, 5, 255, 143, 58, 2, 255, 129, 39, 5, 255, 152, 64, 6, 255, 154, 61, 2, 255, 127, 39, 3, 255, 118, 46, 3, 255, 118, 43, 3, 255, 119, 39, 4, 255, 128, 46, 4, 255, 119, 43, 1, 255, 104, 34, 1, 255, 115, 40, 4, 255, 116, 40, 1, 255, 116, 39, 8, 255, 109, 39, 5, 255, 99, 31, 1, 255, 100, 30, 2, 255, 99, 34, 0, 255, 96, 29, 2, 255, 90, 29, 5, 255, 91, 34, 3, 255, 89, 33, 0, 255, 94, 33, 1, 255, 89, 31, 2, 255, 88, 30, 0, 255, 87, 29, 0, 255, 90, 33, 4, 255, 88, 35, 3, 255, 80, 29, 0, 255, 82, 30, 3, 255, 83, 29, 3, 255, 80, 28, 3, 255, 72, 25, 1, 255, 63, 24, 3, 255, 52, 16, 2, 255, 53, 15, 3, 255, 63, 19, 7, 255, 63, 19, 1, 255, 54, 20, 1, 255, 55, 19, 3, 255, 63, 19, 3, 255, 70, 20, 0, 255, 72, 21, 3, 255, 72, 18, 3, 255, 69, 26, 0, 255, 92, 34, 4, 255, 99, 33, 1, 255, 96, 38, 2, 255, 95, 40, 2, 255, 91, 36, 0, 255, 93, 39, 5, 255, 83, 31, 3, 255, 63, 22, 1, 255, 62, 20, 4, 255, 71, 19, 2, 255, 79, 22, 2, 255, 81, 24, 3, 255, 90, 26, 2, 255, 98, 29, 3, 255, 3, 3, 1, 255, 4, 2, 1, 255, 5, 1, 0, 255, 6, 2, 1, 255, 6, 2, 1, 255, 6, 3, 1, 255, 6, 1, 2, 255, 9, 3, 6, 255, 17, 8, 8, 255, 14, 4, 3, 255, 14, 4, 5, 255, 15, 4, 10, 255, 15, 4, 11, 255, 16, 6, 4, 255, 16, 6, 4, 255, 15, 5, 3, 255, 16, 6, 4, 255, 17, 6, 4, 255, 17, 8, 5, 255, 13, 9, 5, 255, 15, 6, 4, 255, 16, 7, 3, 255, 19, 10, 5, 255, 29, 15, 12, 255, 19, 10, 5, 255, 12, 14, 4, 255, 16, 10, 4, 255, 16, 12, 8, 255, 17, 11, 8, 255, 28, 12, 11, 255, 19, 14, 7, 255, 25, 17, 11, 255, 23, 18, 9, 255, 31, 20, 10, 255, 35, 22, 12, 255, 30, 22, 13, 255, 26, 23, 14, 255, 27, 25, 11, 255, 30, 24, 11, 255, 26, 25, 6, 255, 30, 23, 8, 255, 38, 29, 5, 255, 40, 31, 6, 255, 45, 32, 5, 255, 39, 28, 9, 255, 43, 34, 4, 255, 52, 35, 3, 255, 53, 40, 7, 255, 73, 60, 9, 255, 61, 45, 8, 255, 63, 47, 5, 255, 68, 49, 6, 255, 59, 44, 3, 255, 60, 51, 6, 255, 63, 53, 4, 255, 62, 47, 4, 255, 67, 48, 6, 255, 69, 50, 1, 255, 65, 51, 1, 255, 60, 55, 7, 255, 73, 51, 5, 255, 60, 51, 7, 255, 108, 85, 9, 255, 185, 138, 3, 255, 199, 153, 2, 255, 196, 150, 1, 255, 181, 128, 2, 255, 154, 95, 8, 255, 111, 61, 2, 255, 84, 53, 6, 255, 71, 49, 3, 255, 72, 47, 3, 255, 71, 48, 4, 255, 69, 48, 2, 255, 74, 43, 0, 255, 83, 45, 8, 255, 72, 39, 1, 255, 70, 44, 3, 255, 68, 44, 5, 255, 64, 40, 4, 255, 65, 43, 4, 255, 73, 42, 3, 255, 79, 41, 3, 255, 69, 40, 1, 255, 64, 40, 4, 255, 68, 39, 1, 255, 70, 38, 3, 255, 77, 40, 4, 255, 69, 39, 2, 255, 75, 41, 2, 255, 82, 43, 4, 255, 78, 44, 2, 255, 79, 45, 1, 255, 79, 42, 1, 255, 77, 42, 1, 255, 74, 47, 4, 255, 76, 43, 2, 255, 80, 43, 4, 255, 73, 43, 1, 255, 82, 45, 4, 255, 87, 42, 3, 255, 85, 41, 1, 255, 82, 42, 1, 255, 84, 43, 5, 255, 87, 44, 7, 255, 86, 41, 4, 255, 87, 44, 3, 255, 89, 46, 4, 255, 89, 44, 3, 255, 88, 45, 1, 255, 87, 46, 4, 255, 87, 46, 1, 255, 91, 47, 3, 255, 94, 45, 3, 255, 96, 46, 1, 255, 96, 45, 2, 255, 94, 45, 3, 255, 93, 47, 5, 255, 91, 46, 5, 255, 85, 45, 2, 255, 85, 50, 4, 255, 84, 51, 4, 255, 86, 50, 1, 255, 89, 47, 0, 255, 92, 48, 3, 255, 90, 48, 3, 255, 90, 49, 4, 255, 89, 47, 4, 255, 84, 53, 4, 255, 80, 49, 5, 255, 85, 52, 4, 255, 86, 52, 0, 255, 87, 53, 6, 255, 80, 50, 7, 255, 78, 53, 2, 255, 88, 50, 1, 255, 121, 63, 7, 255, 147, 76, 13, 255, 167, 86, 8, 255, 184, 95, 1, 255, 181, 91, 13, 255, 182, 103, 13, 255, 189, 109, 15, 255, 189, 108, 8, 255, 191, 108, 9, 255, 194, 110, 16, 255, 182, 99, 11, 255, 176, 86, 12, 255, 196, 106, 20, 255, 172, 82, 5, 255, 201, 116, 15, 255, 202, 122, 10, 255, 180, 101, 8, 255, 188, 107, 13, 255, 190, 107, 3, 255, 174, 87, 6, 255, 169, 78, 12, 255, 177, 89, 13, 255, 198, 118, 15, 255, 198, 122, 10, 255, 195, 118, 2, 255, 191, 110, 13, 255, 189, 109, 12, 255, 189, 108, 18, 255, 180, 97, 5, 255, 188, 104, 8, 255, 194, 116, 5, 255, 190, 115, 17, 255, 188, 111, 13, 255, 187, 108, 11, 255, 177, 97, 8, 255, 172, 95, 10, 255, 179, 105, 11, 255, 185, 113, 6, 255, 181, 109, 13, 255, 179, 110, 5, 255, 186, 116, 5, 255, 188, 114, 17, 255, 185, 113, 12, 255, 185, 112, 9, 255, 178, 113, 9, 255, 184, 108, 14, 255, 181, 107, 18, 255, 182, 111, 4, 255, 184, 106, 13, 255, 179, 104, 17, 255, 175, 104, 9, 255, 182, 105, 11, 255, 164, 93, 17, 255, 158, 91, 18, 255, 162, 91, 7, 255, 153, 89, 9, 255, 144, 92, 20, 255, 166, 103, 16, 255, 160, 95, 7, 255, 126, 71, 6, 255, 114, 69, 8, 255, 104, 67, 8, 255, 110, 74, 9, 255, 148, 98, 7, 255, 170, 111, 9, 255, 125, 75, 19, 255, 93, 58, 3, 255, 101, 62, 4, 255, 112, 67, 12, 255, 101, 66, 16, 255, 105, 70, 3, 255, 119, 78, 10, 255, 133, 85, 11, 255, 136, 87, 10, 255, 149, 93, 11, 255, 167, 103, 5, 255, 180, 114, 14, 255, 183, 110, 7, 255, 190, 115, 9, 255, 190, 117, 14, 255, 193, 119, 8, 255, 199, 122, 13, 255, 203, 125, 5, 255, 202, 122, 2, 255, 200, 118, 3, 255, 199, 119, 8, 255, 194, 116, 13, 255, 186, 107, 19, 255, 194, 110, 16, 255, 195, 116, 11, 255, 196, 117, 5, 255, 193, 112, 3, 255, 182, 103, 5, 255, 186, 118, 8, 255, 196, 132, 6, 255, 191, 131, 14, 255, 194, 147, 10, 255, 209, 160, 3, 255, 214, 154, 6, 255, 220, 167, 2, 255, 218, 174, 9, 255, 222, 170, 5, 255, 223, 171, 0, 255, 221, 169, 1, 255, 224, 170, 3, 255, 218, 166, 0, 255, 218, 166, 3, 255, 223, 170, 4, 255, 217, 164, 8, 255, 217, 168, 3, 255, 223, 179, 4, 255, 222, 179, 6, 255, 220, 176, 9, 255, 220, 178, 1, 255, 218, 176, 2, 255, 215, 173, 7, 255, 212, 169, 11, 255, 203, 159, 9, 255, 201, 154, 11, 255, 207, 162, 3, 255, 207, 163, 2, 255, 204, 157, 3, 255, 209, 158, 8, 255, 213, 164, 8, 255, 210, 159, 7, 255, 212, 156, 12, 255, 209, 152, 9, 255, 207, 150, 7, 255, 199, 141, 2, 255, 209, 152, 7, 255, 209, 152, 14, 255, 208, 152, 16, 255, 207, 150, 1, 255, 209, 148, 3, 255, 207, 146, 4, 255, 208, 146, 4, 255, 208, 143, 2, 255, 201, 130, 15, 255, 193, 120, 16, 255, 182, 105, 4, 255, 186, 108, 10, 255, 195, 117, 13, 255, 199, 122, 4, 255, 201, 124, 10, 255, 202, 124, 12, 255, 200, 123, 9, 255, 195, 120, 6, 255, 195, 120, 4, 255, 193, 118, 2, 255, 188, 111, 6, 255, 188, 111, 4, 255, 183, 103, 10, 255, 182, 101, 6, 255, 185, 99, 2, 255, 172, 84, 7, 255, 150, 72, 2, 255, 137, 65, 1, 255, 144, 71, 2, 255, 136, 63, 6, 255, 123, 49, 8, 255, 131, 56, 5, 255, 135, 63, 0, 255, 127, 54, 7, 255, 117, 45, 6, 255, 116, 47, 7, 255, 116, 42, 1, 255, 114, 46, 3, 255, 112, 48, 4, 255, 108, 45, 5, 255, 95, 32, 1, 255, 92, 34, 5, 255, 107, 48, 11, 255, 106, 50, 5, 255, 100, 43, 4, 255, 100, 41, 3, 255, 101, 41, 3, 255, 96, 38, 1, 255, 100, 42, 1, 255, 105, 41, 1, 255, 107, 42, 1, 255, 108, 44, 4, 255, 112, 50, 3, 255, 113, 52, 2, 255, 105, 43, 8, 255, 98, 43, 6, 255, 132, 66, 3, 255, 161, 87, 6, 255, 163, 86, 11, 255, 169, 87, 5, 255, 169, 90, 2, 255, 175, 94, 2, 255, 176, 91, 1, 255, 175, 90, 1, 255, 171, 88, 1, 255, 168, 86, 4, 255, 166, 85, 4, 255, 168, 88, 6, 255, 170, 88, 1, 255, 175, 88, 1, 255, 175, 86, 1, 255, 173, 88, 0, 255, 174, 90, 3, 255, 173, 88, 3, 255, 152, 67, 4, 255, 129, 49, 1, 255, 119, 44, 6, 255, 119, 47, 8, 255, 123, 47, 2, 255, 125, 44, 0, 255, 122, 40, 2, 255, 124, 44, 4, 255, 128, 46, 4, 255, 124, 46, 3, 255, 113, 41, 5, 255, 101, 32, 2, 255, 106, 38, 5, 255, 116, 42, 5, 255, 110, 41, 1, 255, 108, 39, 5, 255, 107, 39, 2, 255, 107, 37, 3, 255, 108, 41, 4, 255, 119, 49, 2, 255, 111, 40, 0, 255, 100, 37, 3, 255, 100, 34, 2, 255, 96, 37, 0, 255, 95, 34, 3, 255, 92, 31, 4, 255, 94, 34, 2, 255, 93, 31, 3, 255, 88, 30, 2, 255, 82, 29, 0, 255, 82, 31, 3, 255, 82, 29, 4, 255, 84, 27, 6, 255, 77, 24, 0, 255, 71, 25, 0, 255, 64, 21, 1, 255, 57, 16, 4, 255, 52, 16, 5, 255, 47, 13, 3, 255, 45, 16, 1, 255, 42, 17, 0, 255, 46, 14, 4, 255, 56, 15, 3, 255, 58, 16, 0, 255, 57, 18, 2, 255, 64, 19, 1, 255, 70, 25, 0, 255, 90, 32, 2, 255, 99, 36, 4, 255, 102, 36, 4, 255, 101, 39, 1, 255, 97, 39, 4, 255, 94, 31, 2, 255, 92, 30, 0, 255, 77, 28, 2, 255, 62, 19, 2, 255, 67, 19, 5, 255, 76, 25, 8, 255, 76, 22, 6, 255, 80, 23, 5, 255, 86, 25, 1, 255, 5, 1, 0, 255, 6, 2, 1, 255, 4, 1, 0, 255, 5, 2, 1, 255, 5, 1, 0, 255, 4, 0, 0, 255, 5, 2, 0, 255, 8, 1, 1, 255, 16, 5, 9, 255, 18, 5, 14, 255, 18, 7, 15, 255, 15, 4, 8, 255, 14, 4, 6, 255, 13, 5, 6, 255, 14, 7, 6, 255, 12, 4, 2, 255, 14, 5, 3, 255, 14, 4, 2, 255, 16, 6, 4, 255, 9, 6, 3, 255, 13, 5, 2, 255, 18, 6, 4, 255, 19, 10, 4, 255, 17, 11, 5, 255, 16, 10, 4, 255, 18, 11, 4, 255, 19, 11, 5, 255, 17, 12, 8, 255, 18, 13, 8, 255, 30, 20, 13, 255, 25, 18, 9, 255, 26, 18, 12, 255, 26, 18, 11, 255, 26, 23, 10, 255, 28, 24, 10, 255, 29, 21, 11, 255, 28, 19, 10, 255, 30, 25, 11, 255, 29, 26, 3, 255, 33, 29, 0, 255, 37, 29, 9, 255, 34, 32, 9, 255, 34, 28, 12, 255, 41, 32, 8, 255, 37, 38, 10, 255, 44, 41, 2, 255, 54, 36, 1, 255, 74, 59, 4, 255, 60, 47, 4, 255, 67, 46, 5, 255, 71, 52, 1, 255, 60, 48, 0, 255, 59, 54, 0, 255, 54, 52, 3, 255, 64, 53, 4, 255, 70, 48, 4, 255, 64, 46, 2, 255, 69, 49, 0, 255, 77, 53, 3, 255, 70, 52, 3, 255, 75, 52, 4, 255, 73, 56, 9, 255, 153, 116, 8, 255, 200, 151, 1, 255, 190, 146, 5, 255, 190, 140, 8, 255, 167, 110, 3, 255, 127, 69, 2, 255, 96, 46, 2, 255, 68, 46, 1, 255, 69, 51, 0, 255, 70, 45, 1, 255, 72, 47, 6, 255, 71, 47, 4, 255, 71, 45, 1, 255, 74, 43, 4, 255, 71, 39, 0, 255, 73, 40, 2, 255, 70, 41, 4, 255, 67, 42, 2, 255, 68, 45, 2, 255, 69, 44, 4, 255, 68, 39, 4, 255, 63, 37, 4, 255, 61, 39, 4, 255, 66, 39, 1, 255, 69, 38, 2, 255, 74, 36, 0, 255, 74, 41, 4, 255, 79, 44, 3, 255, 79, 42, 1, 255, 83, 40, 1, 255, 83, 44, 4, 255, 78, 46, 4, 255, 73, 42, 1, 255, 75, 40, 3, 255, 77, 42, 3, 255, 80, 42, 4, 255, 74, 43, 1, 255, 84, 42, 2, 255, 88, 40, 1, 255, 87, 43, 2, 255, 85, 45, 3, 255, 83, 42, 2, 255, 83, 39, 5, 255, 89, 46, 6, 255, 88, 48, 4, 255, 87, 46, 2, 255, 87, 44, 3, 255, 92, 46, 5, 255, 85, 44, 4, 255, 84, 45, 0, 255, 94, 47, 3, 255, 95, 46, 5, 255, 93, 48, 1, 255, 95, 48, 0, 255, 96, 51, 2, 255, 90, 47, 0, 255, 91, 48, 2, 255, 93, 49, 2, 255, 91, 48, 0, 255, 93, 53, 3, 255, 91, 52, 2, 255, 92, 49, 0, 255, 92, 47, 3, 255, 92, 48, 4, 255, 90, 47, 1, 255, 90, 47, 4, 255, 95, 50, 2, 255, 98, 55, 4, 255, 93, 52, 2, 255, 91, 48, 2, 255, 92, 49, 5, 255, 93, 50, 6, 255, 85, 47, 2, 255, 82, 52, 6, 255, 82, 51, 9, 255, 89, 51, 4, 255, 95, 51, 2, 255, 120, 63, 10, 255, 157, 87, 15, 255, 165, 96, 11, 255, 173, 99, 9, 255, 181, 104, 7, 255, 181, 102, 9, 255, 175, 94, 6, 255, 175, 93, 10, 255, 171, 92, 9, 255, 184, 106, 12, 255, 190, 112, 13, 255, 186, 108, 10, 255, 198, 123, 5, 255, 202, 130, 0, 255, 197, 120, 7, 255, 202, 121, 15, 255, 188, 105, 13, 255, 174, 90, 1, 255, 191, 109, 2, 255, 193, 113, 11, 255, 190, 112, 11, 255, 185, 104, 8, 255, 181, 100, 10, 255, 189, 111, 10, 255, 182, 105, 9, 255, 174, 98, 15, 255, 172, 99, 6, 255, 181, 109, 1, 255, 179, 105, 6, 255, 179, 103, 9, 255, 168, 91, 4, 255, 164, 87, 12, 255, 159, 88, 9, 255, 150, 82, 7, 255, 160, 93, 10, 255, 165, 97, 10, 255, 170, 99, 10, 255, 167, 93, 13, 255, 169, 99, 9, 255, 166, 100, 7, 255, 167, 97, 10, 255, 163, 87, 6, 255, 155, 78, 12, 255, 141, 78, 14, 255, 141, 74, 13, 255, 128, 60, 5, 255, 110, 60, 9, 255, 128, 68, 7, 255, 115, 55, 4, 255, 99, 47, 14, 255, 98, 63, 15, 255, 126, 79, 12, 255, 141, 85, 12, 255, 131, 73, 8, 255, 141, 83, 9, 255, 135, 81, 17, 255, 121, 73, 15, 255, 108, 59, 20, 255, 118, 71, 9, 255, 133, 80, 6, 255, 151, 86, 13, 255, 130, 70, 11, 255, 115, 71, 11, 255, 120, 79, 9, 255, 143, 87, 12, 255, 160, 93, 11, 255, 163, 97, 15, 255, 174, 109, 10, 255, 190, 114, 11, 255, 196, 117, 8, 255, 201, 122, 10, 255, 210, 120, 15, 255, 211, 127, 12, 255, 199, 128, 9, 255, 197, 126, 10, 255, 202, 118, 3, 255, 208, 123, 4, 255, 205, 123, 8, 255, 200, 122, 4, 255, 197, 120, 13, 255, 201, 119, 11, 255, 205, 124, 8, 255, 204, 123, 8, 255, 200, 121, 5, 255, 202, 122, 9, 255, 206, 119, 3, 255, 206, 118, 5, 255, 199, 116, 7, 255, 198, 123, 7, 255, 185, 113, 17, 255, 198, 130, 7, 255, 199, 140, 0, 255, 199, 149, 9, 255, 206, 165, 5, 255, 218, 171, 5, 255, 213, 149, 6, 255, 213, 150, 6, 255, 224, 171, 5, 255, 226, 176, 5, 255, 223, 173, 2, 255, 220, 170, 2, 255, 221, 171, 2, 255, 221, 171, 2, 255, 217, 166, 1, 255, 220, 168, 6, 255, 221, 175, 1, 255, 222, 179, 0, 255, 219, 173, 7, 255, 226, 178, 10, 255, 222, 179, 11, 255, 222, 180, 4, 255, 220, 173, 6, 255, 220, 173, 2, 255, 217, 169, 0, 255, 210, 160, 7, 255, 210, 159, 10, 255, 208, 160, 4, 255, 207, 166, 0, 255, 204, 158, 3, 255, 202, 152, 4, 255, 208, 158, 10, 255, 211, 160, 5, 255, 209, 155, 4, 255, 210, 157, 4, 255, 207, 153, 7, 255, 206, 148, 12, 255, 208, 152, 6, 255, 208, 152, 4, 255, 206, 149, 7, 255, 206, 150, 6, 255, 207, 144, 7, 255, 206, 141, 10, 255, 206, 143, 7, 255, 205, 139, 3, 255, 202, 134, 3, 255, 202, 131, 9, 255, 201, 127, 7, 255, 193, 118, 2, 255, 193, 118, 2, 255, 198, 123, 1, 255, 203, 127, 5, 255, 200, 124, 7, 255, 197, 120, 6, 255, 197, 120, 9, 255, 195, 120, 5, 255, 189, 114, 3, 255, 189, 112, 9, 255, 184, 107, 2, 255, 184, 105, 4, 255, 178, 97, 4, 255, 181, 100, 10, 255, 165, 89, 7, 255, 137, 67, 0, 255, 131, 63, 3, 255, 134, 61, 6, 255, 123, 59, 0, 255, 117, 56, 4, 255, 127, 54, 5, 255, 145, 64, 2, 255, 139, 63, 5, 255, 123, 53, 7, 255, 122, 54, 3, 255, 121, 46, 7, 255, 121, 51, 2, 255, 111, 44, 2, 255, 107, 41, 5, 255, 99, 35, 2, 255, 94, 35, 1, 255, 106, 44, 1, 255, 112, 45, 0, 255, 109, 44, 3, 255, 106, 41, 6, 255, 91, 33, 3, 255, 95, 32, 3, 255, 101, 39, 6, 255, 104, 40, 2, 255, 106, 43, 3, 255, 106, 42, 4, 255, 105, 43, 1, 255, 105, 44, 1, 255, 105, 41, 6, 255, 105, 41, 3, 255, 113, 50, 1, 255, 151, 75, 4, 255, 165, 82, 4, 255, 168, 84, 2, 255, 170, 86, 1, 255, 175, 93, 1, 255, 174, 89, 0, 255, 169, 84, 6, 255, 165, 81, 4, 255, 166, 85, 2, 255, 165, 85, 0, 255, 164, 84, 3, 255, 171, 85, 10, 255, 175, 83, 4, 255, 175, 84, 0, 255, 172, 88, 3, 255, 159, 76, 5, 255, 146, 57, 4, 255, 129, 49, 1, 255, 125, 47, 2, 255, 122, 43, 1, 255, 127, 47, 2, 255, 121, 45, 1, 255, 112, 41, 1, 255, 116, 44, 5, 255, 119, 42, 5, 255, 120, 45, 3, 255, 112, 46, 1, 255, 94, 34, 2, 255, 94, 27, 6, 255, 116, 39, 8, 255, 121, 43, 3, 255, 112, 39, 0, 255, 108, 39, 1, 255, 111, 41, 3, 255, 117, 42, 3, 255, 121, 49, 3, 255, 133, 53, 6, 255, 123, 45, 2, 255, 112, 44, 5, 255, 112, 38, 2, 255, 106, 44, 3, 255, 99, 42, 2, 255, 94, 38, 1, 255, 91, 34, 3, 255, 87, 26, 2, 255, 87, 28, 5, 255, 82, 27, 1, 255, 84, 30, 0, 255, 87, 28, 1, 255, 86, 25, 4, 255, 75, 19, 1, 255, 68, 18, 0, 255, 70, 24, 2, 255, 61, 22, 1, 255, 42, 12, 0, 255, 38, 12, 5, 255, 44, 17, 7, 255, 41, 18, 5, 255, 39, 13, 4, 255, 46, 16, 6, 255, 48, 14, 1, 255, 47, 13, 5, 255, 56, 23, 5, 255, 69, 23, 2, 255, 74, 24, 0, 255, 85, 25, 2, 255, 92, 33, 6, 255, 95, 36, 1, 255, 93, 36, 4, 255, 89, 35, 4, 255, 88, 29, 0, 255, 88, 27, 3, 255, 71, 25, 3, 255, 57, 20, 0, 255, 65, 21, 2, 255, 68, 20, 2, 255, 68, 19, 1, 255, 78, 27, 5, 255, 6, 0, 0, 255, 5, 2, 1, 255, 1, 1, 0, 255, 2, 2, 0, 255, 3, 1, 0, 255, 5, 1, 2, 255, 4, 2, 1, 255, 6, 3, 0, 255, 12, 2, 2, 255, 17, 6, 8, 255, 12, 5, 7, 255, 12, 4, 7, 255, 12, 5, 7, 255, 11, 7, 8, 255, 13, 7, 8, 255, 13, 6, 4, 255, 16, 8, 6, 255, 15, 5, 3, 255, 17, 6, 5, 255, 17, 9, 6, 255, 15, 11, 6, 255, 14, 7, 3, 255, 20, 10, 5, 255, 18, 12, 6, 255, 19, 14, 8, 255, 19, 12, 4, 255, 25, 13, 6, 255, 14, 13, 5, 255, 21, 19, 11, 255, 42, 18, 13, 255, 20, 16, 4, 255, 18, 18, 8, 255, 32, 19, 13, 255, 33, 20, 10, 255, 29, 19, 6, 255, 29, 24, 11, 255, 29, 24, 10, 255, 33, 26, 8, 255, 35, 25, 11, 255, 39, 29, 4, 255, 43, 26, 7, 255, 39, 31, 6, 255, 42, 32, 8, 255, 51, 34, 1, 255, 42, 38, 9, 255, 40, 33, 10, 255, 66, 48, 7, 255, 71, 54, 3, 255, 56, 48, 1, 255, 63, 55, 7, 255, 61, 48, 4, 255, 57, 43, 4, 255, 63, 50, 1, 255, 66, 50, 3, 255, 73, 54, 4, 255, 73, 53, 0, 255, 71, 50, 1, 255, 69, 53, 3, 255, 69, 55, 4, 255, 80, 54, 3, 255, 73, 49, 5, 255, 107, 76, 5, 255, 191, 142, 8, 255, 199, 150, 1, 255, 188, 134, 4, 255, 187, 113, 6, 255, 150, 79, 4, 255, 98, 53, 6, 255, 79, 42, 4, 255, 68, 43, 4, 255, 73, 43, 0, 255, 73, 45, 1, 255, 73, 46, 5, 255, 72, 41, 1, 255, 70, 45, 1, 255, 70, 44, 2, 255, 72, 42, 3, 255, 69, 40, 3, 255, 71, 37, 2, 255, 79, 40, 4, 255, 87, 45, 6, 255, 73, 41, 3, 255, 59, 33, 5, 255, 59, 35, 5, 255, 60, 40, 7, 255, 63, 39, 1, 255, 64, 37, 2, 255, 74, 39, 3, 255, 77, 45, 6, 255, 78, 44, 3, 255, 79, 44, 6, 255, 79, 40, 6, 255, 75, 38, 4, 255, 76, 38, 2, 255, 76, 38, 2, 255, 78, 40, 3, 255, 79, 42, 6, 255, 84, 36, 3, 255, 79, 40, 3, 255, 85, 44, 4, 255, 86, 43, 2, 255, 85, 44, 2, 255, 83, 43, 0, 255, 86, 44, 0, 255, 90, 46, 2, 255, 88, 45, 2, 255, 86, 45, 4, 255, 87, 45, 3, 255, 89, 46, 2, 255, 87, 44, 2, 255, 86, 44, 3, 255, 90, 45, 3, 255, 89, 47, 4, 255, 89, 44, 3, 255, 90, 46, 1, 255, 91, 51, 2, 255, 88, 51, 2, 255, 84, 48, 1, 255, 89, 49, 3, 255, 92, 47, 2, 255, 97, 49, 6, 255, 95, 49, 3, 255, 97, 52, 4, 255, 98, 51, 3, 255, 95, 47, 7, 255, 95, 51, 6, 255, 94, 54, 1, 255, 95, 51, 5, 255, 98, 44, 4, 255, 100, 53, 2, 255, 97, 55, 2, 255, 95, 53, 6, 255, 95, 54, 2, 255, 93, 54, 1, 255, 94, 56, 7, 255, 91, 55, 3, 255, 90, 51, 3, 255, 95, 54, 3, 255, 87, 52, 5, 255, 94, 52, 9, 255, 137, 81, 8, 255, 144, 84, 6, 255, 146, 77, 6, 255, 161, 88, 12, 255, 177, 98, 17, 255, 174, 94, 7, 255, 175, 93, 17, 255, 183, 103, 10, 255, 174, 93, 8, 255, 183, 103, 15, 255, 192, 113, 13, 255, 186, 105, 11, 255, 187, 107, 7, 255, 189, 107, 12, 255, 187, 110, 6, 255, 184, 106, 9, 255, 169, 88, 2, 255, 168, 85, 14, 255, 182, 103, 11, 255, 182, 104, 6, 255, 183, 103, 13, 255, 180, 99, 8, 255, 177, 99, 9, 255, 174, 101, 5, 255, 170, 96, 13, 255, 159, 87, 11, 255, 170, 98, 4, 255, 169, 93, 4, 255, 170, 92, 7, 255, 170, 91, 4, 255, 161, 85, 4, 255, 147, 77, 11, 255, 136, 73, 1, 255, 138, 73, 5, 255, 153, 87, 19, 255, 144, 77, 11, 255, 148, 78, 10, 255, 141, 74, 1, 255, 127, 67, 0, 255, 128, 67, 14, 255, 123, 57, 8, 255, 121, 61, 13, 255, 133, 72, 11, 255, 117, 66, 6, 255, 100, 58, 19, 255, 135, 86, 5, 255, 142, 84, 12, 255, 114, 68, 8, 255, 119, 75, 11, 255, 132, 75, 11, 255, 129, 76, 20, 255, 123, 67, 16, 255, 104, 60, 15, 255, 121, 75, 10, 255, 124, 77, 9, 255, 131, 75, 5, 255, 153, 78, 19, 255, 153, 84, 16, 255, 156, 88, 7, 255, 173, 94, 10, 255, 170, 97, 10, 255, 176, 104, 7, 255, 189, 108, 12, 255, 197, 111, 8, 255, 196, 114, 12, 255, 199, 117, 15, 255, 203, 118, 13, 255, 205, 124, 11, 255, 206, 131, 9, 255, 203, 125, 10, 255, 198, 124, 4, 255, 205, 126, 5, 255, 207, 121, 5, 255, 206, 123, 5, 255, 203, 124, 11, 255, 199, 122, 7, 255, 200, 121, 5, 255, 201, 125, 0, 255, 203, 123, 12, 255, 203, 121, 12, 255, 205, 125, 1, 255, 206, 126, 6, 255, 203, 125, 3, 255, 202, 124, 0, 255, 199, 115, 6, 255, 197, 119, 5, 255, 194, 117, 17, 255, 207, 133, 11, 255, 192, 116, 12, 255, 198, 128, 17, 255, 211, 151, 8, 255, 216, 159, 6, 255, 216, 161, 3, 255, 223, 169, 3, 255, 221, 166, 8, 255, 204, 142, 8, 255, 211, 149, 5, 255, 218, 164, 8, 255, 222, 176, 2, 255, 220, 176, 4, 255, 217, 171, 11, 255, 220, 172, 12, 255, 219, 171, 7, 255, 217, 170, 2, 255, 220, 177, 3, 255, 225, 183, 0, 255, 219, 170, 8, 255, 216, 168, 4, 255, 225, 182, 4, 255, 220, 180, 0, 255, 223, 179, 7, 255, 220, 174, 2, 255, 217, 167, 4, 255, 212, 165, 2, 255, 210, 163, 6, 255, 208, 164, 5, 255, 207, 163, 2, 255, 205, 154, 5, 255, 202, 147, 10, 255, 200, 147, 2, 255, 209, 161, 6, 255, 207, 161, 4, 255, 208, 159, 4, 255, 207, 156, 7, 255, 209, 154, 12, 255, 210, 154, 12, 255, 206, 150, 1, 255, 205, 149, 0, 255, 208, 149, 10, 255, 207, 145, 4, 255, 208, 146, 4, 255, 208, 144, 6, 255, 204, 135, 10, 255, 202, 132, 12, 255, 201, 133, 3, 255, 200, 130, 10, 255, 201, 131, 4, 255, 197, 124, 7, 255, 197, 124, 6, 255, 200, 128, 2, 255, 199, 127, 4, 255, 196, 122, 1, 255, 196, 116, 12, 255, 193, 115, 7, 255, 192, 115, 8, 255, 188, 109, 15, 255, 183, 102, 11, 255, 185, 104, 8, 255, 180, 102, 2, 255, 172, 92, 3, 255, 162, 84, 3, 255, 145, 67, 7, 255, 136, 63, 7, 255, 128, 64, 5, 255, 130, 61, 1, 255, 119, 55, 3, 255, 110, 48, 5, 255, 128, 50, 8, 255, 129, 53, 2, 255, 132, 62, 4, 255, 135, 59, 5, 255, 117, 49, 4, 255, 114, 47, 5, 255, 109, 44, 7, 255, 102, 40, 1, 255, 99, 41, 2, 255, 89, 35, 3, 255, 98, 38, 3, 255, 110, 40, 6, 255, 106, 40, 3, 255, 98, 32, 1, 255, 89, 33, 2, 255, 104, 38, 3, 255, 108, 41, 6, 255, 110, 43, 2, 255, 111, 46, 1, 255, 109, 43, 2, 255, 108, 45, 4, 255, 103, 43, 1, 255, 105, 42, 4, 255, 103, 37, 1, 255, 89, 36, 6, 255, 130, 57, 6, 255, 160, 78, 5, 255, 159, 80, 4, 255, 167, 87, 4, 255, 169, 88, 3, 255, 167, 85, 0, 255, 165, 81, 2, 255, 165, 82, 3, 255, 168, 86, 4, 255, 167, 85, 1, 255, 168, 84, 1, 255, 171, 85, 3, 255, 169, 82, 4, 255, 164, 75, 2, 255, 158, 68, 4, 255, 141, 54, 2, 255, 125, 44, 2, 255, 120, 38, 2, 255, 121, 40, 6, 255, 123, 47, 1, 255, 124, 47, 6, 255, 121, 39, 6, 255, 116, 35, 2, 255, 114, 36, 5, 255, 115, 42, 2, 255, 118, 43, 1, 255, 114, 41, 4, 255, 108, 37, 4, 255, 111, 44, 3, 255, 115, 47, 2, 255, 120, 43, 3, 255, 122, 40, 7, 255, 112, 36, 3, 255, 102, 33, 3, 255, 102, 35, 3, 255, 116, 41, 2, 255, 124, 47, 2, 255, 126, 50, 3, 255, 122, 51, 4, 255, 121, 44, 4, 255, 120, 43, 4, 255, 121, 48, 4, 255, 110, 49, 1, 255, 98, 40, 3, 255, 90, 27, 1, 255, 87, 28, 6, 255, 81, 30, 3, 255, 78, 28, 0, 255, 84, 28, 4, 255, 76, 22, 4, 255, 67, 18, 1, 255, 68, 21, 1, 255, 72, 26, 4, 255, 69, 23, 6, 255, 47, 15, 5, 255, 46, 16, 6, 255, 63, 23, 5, 255, 62, 22, 4, 255, 51, 12, 1, 255, 53, 18, 3, 255, 53, 18, 2, 255, 53, 15, 6, 255, 44, 16, 8, 255, 54, 19, 5, 255, 69, 18, 5, 255, 68, 15, 2, 255, 70, 27, 5, 255, 86, 32, 2, 255, 94, 30, 1, 255, 92, 28, 2, 255, 87, 24, 3, 255, 83, 24, 3, 255, 81, 26, 4, 255, 81, 25, 2, 255, 77, 23, 1, 255, 71, 20, 2, 255, 68, 18, 2, 255, 72, 22, 6, 255, 2, 0, 0, 255, 4, 2, 1, 255, 3, 1, 2, 255, 3, 1, 0, 255, 5, 2, 1, 255, 4, 0, 1, 255, 4, 0, 0, 255, 7, 3, 1, 255, 7, 0, 0, 255, 15, 6, 3, 255, 18, 12, 9, 255, 12, 8, 6, 255, 9, 7, 5, 255, 11, 6, 6, 255, 13, 7, 6, 255, 13, 6, 3, 255, 18, 9, 7, 255, 16, 6, 5, 255, 19, 9, 7, 255, 17, 7, 4, 255, 15, 10, 6, 255, 14, 7, 5, 255, 17, 6, 2, 255, 18, 8, 2, 255, 18, 11, 9, 255, 17, 12, 10, 255, 18, 11, 7, 255, 20, 13, 9, 255, 20, 14, 8, 255, 18, 14, 10, 255, 23, 17, 9, 255, 30, 19, 14, 255, 35, 18, 8, 255, 34, 22, 9, 255, 27, 22, 7, 255, 26, 24, 9, 255, 32, 27, 13, 255, 37, 29, 8, 255, 36, 26, 8, 255, 35, 29, 6, 255, 33, 30, 6, 255, 41, 34, 2, 255, 46, 38, 1, 255, 57, 38, 4, 255, 46, 32, 6, 255, 51, 38, 14, 255, 76, 61, 9, 255, 60, 46, 0, 255, 63, 52, 10, 255, 65, 47, 4, 255, 62, 46, 4, 255, 63, 45, 4, 255, 70, 53, 1, 255, 79, 56, 8, 255, 72, 55, 5, 255, 66, 54, 1, 255, 67, 51, 1, 255, 67, 52, 0, 255, 71, 54, 1, 255, 71, 55, 1, 255, 68, 57, 3, 255, 153, 106, 6, 255, 195, 140, 4, 255, 191, 140, 1, 255, 192, 131, 5, 255, 163, 96, 4, 255, 117, 58, 3, 255, 77, 42, 1, 255, 72, 44, 6, 255, 70, 43, 5, 255, 72, 45, 0, 255, 73, 42, 5, 255, 73, 40, 5, 255, 75, 40, 3, 255, 69, 41, 3, 255, 68, 42, 2, 255, 77, 42, 2, 255, 70, 45, 2, 255, 68, 39, 3, 255, 70, 45, 3, 255, 74, 46, 4, 255, 68, 34, 5, 255, 68, 36, 3, 255, 61, 34, 8, 255, 67, 39, 3, 255, 65, 43, 1, 255, 69, 43, 6, 255, 68, 39, 6, 255, 69, 39, 2, 255, 76, 40, 3, 255, 77, 38, 2, 255, 81, 45, 3, 255, 78, 39, 4, 255, 81, 39, 8, 255, 81, 43, 1, 255, 89, 42, 2, 255, 88, 45, 7, 255, 87, 41, 1, 255, 88, 42, 1, 255, 86, 43, 2, 255, 86, 49, 3, 255, 87, 45, 4, 255, 86, 42, 0, 255, 88, 45, 0, 255, 90, 49, 5, 255, 88, 43, 4, 255, 94, 46, 2, 255, 88, 52, 2, 255, 83, 48, 2, 255, 89, 46, 3, 255, 92, 43, 6, 255, 89, 44, 5, 255, 87, 45, 1, 255, 82, 46, 3, 255, 91, 48, 3, 255, 91, 46, 0, 255, 88, 46, 2, 255, 87, 45, 4, 255, 92, 48, 7, 255, 92, 45, 3, 255, 99, 52, 6, 255, 92, 46, 3, 255, 91, 48, 6, 255, 94, 53, 6, 255, 96, 52, 4, 255, 94, 53, 2, 255, 100, 53, 3, 255, 98, 53, 3, 255, 97, 45, 5, 255, 98, 49, 4, 255, 94, 51, 3, 255, 96, 53, 7, 255, 99, 53, 4, 255, 103, 53, 7, 255, 97, 51, 7, 255, 95, 54, 4, 255, 97, 57, 4, 255, 96, 51, 3, 255, 105, 55, 5, 255, 113, 56, 5, 255, 118, 59, 0, 255, 111, 60, 2, 255, 111, 58, 14, 255, 144, 73, 13, 255, 152, 84, 4, 255, 162, 82, 8, 255, 173, 92, 9, 255, 178, 101, 7, 255, 181, 97, 14, 255, 181, 104, 11, 255, 180, 106, 6, 255, 176, 94, 6, 255, 169, 90, 5, 255, 179, 103, 16, 255, 177, 100, 6, 255, 178, 96, 3, 255, 164, 84, 5, 255, 167, 83, 15, 255, 180, 97, 8, 255, 175, 91, 7, 255, 171, 88, 4, 255, 166, 89, 6, 255, 167, 88, 11, 255, 165, 88, 5, 255, 156, 84, 11, 255, 148, 80, 16, 255, 153, 78, 8, 255, 140, 70, 2, 255, 123, 63, 15, 255, 110, 53, 15, 255, 116, 66, 12, 255, 112, 61, 8, 255, 103, 54, 6, 255, 120, 70, 10, 255, 132, 72, 16, 255, 128, 69, 7, 255, 115, 74, 3, 255, 103, 54, 7, 255, 99, 48, 7, 255, 96, 51, 6, 255, 96, 51, 3, 255, 94, 56, 9, 255, 95, 56, 8, 255, 116, 66, 12, 255, 129, 78, 11, 255, 128, 78, 5, 255, 133, 73, 11, 255, 131, 68, 7, 255, 133, 74, 11, 255, 134, 75, 6, 255, 124, 67, 7, 255, 126, 71, 11, 255, 149, 85, 10, 255, 162, 87, 13, 255, 161, 87, 5, 255, 171, 94, 8, 255, 174, 98, 11, 255, 179, 103, 7, 255, 189, 106, 10, 255, 192, 110, 5, 255, 191, 111, 7, 255, 189, 110, 8, 255, 188, 107, 7, 255, 191, 113, 11, 255, 194, 119, 6, 255, 194, 120, 10, 255, 199, 128, 4, 255, 198, 126, 9, 255, 195, 122, 4, 255, 195, 117, 5, 255, 200, 122, 6, 255, 207, 124, 7, 255, 209, 123, 13, 255, 206, 125, 0, 255, 207, 130, 6, 255, 205, 129, 6, 255, 200, 120, 14, 255, 205, 128, 4, 255, 206, 132, 3, 255, 206, 128, 5, 255, 212, 134, 5, 255, 210, 135, 8, 255, 207, 126, 5, 255, 204, 120, 9, 255, 190, 116, 11, 255, 193, 124, 9, 255, 191, 121, 9, 255, 204, 132, 14, 255, 195, 123, 2, 255, 211, 138, 12, 255, 222, 161, 12, 255, 219, 162, 6, 255, 212, 149, 4, 255, 185, 115, 5, 255, 201, 135, 6, 255, 205, 138, 11, 255, 202, 138, 3, 255, 205, 146, 5, 255, 221, 170, 3, 255, 223, 178, 1, 255, 218, 172, 4, 255, 215, 168, 5, 255, 227, 180, 7, 255, 226, 179, 8, 255, 224, 177, 5, 255, 231, 183, 3, 255, 222, 171, 11, 255, 210, 157, 2, 255, 221, 171, 1, 255, 224, 176, 3, 255, 221, 177, 2, 255, 215, 173, 1, 255, 212, 166, 3, 255, 211, 164, 3, 255, 211, 165, 5, 255, 207, 165, 2, 255, 204, 155, 3, 255, 200, 145, 13, 255, 207, 154, 8, 255, 201, 152, 1, 255, 206, 159, 5, 255, 207, 160, 6, 255, 206, 156, 6, 255, 206, 154, 2, 255, 212, 155, 7, 255, 209, 151, 11, 255, 202, 142, 6, 255, 210, 152, 9, 255, 206, 148, 11, 255, 204, 146, 2, 255, 208, 147, 8, 255, 207, 147, 1, 255, 204, 140, 9, 255, 205, 136, 18, 255, 209, 139, 5, 255, 205, 137, 10, 255, 202, 133, 9, 255, 203, 133, 8, 255, 202, 131, 5, 255, 198, 127, 2, 255, 197, 124, 1, 255, 197, 122, 5, 255, 192, 116, 12, 255, 191, 116, 11, 255, 190, 113, 10, 255, 185, 107, 5, 255, 185, 107, 6, 255, 184, 107, 6, 255, 177, 100, 3, 255, 165, 87, 0, 255, 161, 78, 3, 255, 155, 68, 9, 255, 154, 69, 9, 255, 147, 68, 4, 255, 149, 72, 6, 255, 136, 61, 1, 255, 127, 58, 2, 255, 128, 59, 8, 255, 130, 55, 6, 255, 132, 56, 0, 255, 126, 50, 5, 255, 115, 45, 1, 255, 103, 44, 2, 255, 108, 47, 4, 255, 106, 42, 5, 255, 100, 41, 8, 255, 91, 34, 2, 255, 98, 39, 1, 255, 108, 42, 7, 255, 108, 41, 3, 255, 98, 33, 0, 255, 97, 39, 6, 255, 107, 42, 5, 255, 112, 47, 4, 255, 110, 44, 0, 255, 114, 46, 2, 255, 111, 46, 2, 255, 108, 42, 2, 255, 107, 38, 3, 255, 105, 42, 1, 255, 111, 47, 5, 255, 101, 44, 3, 255, 99, 40, 6, 255, 122, 52, 7, 255, 151, 76, 7, 255, 162, 83, 2, 255, 165, 81, 0, 255, 169, 84, 3, 255, 168, 85, 3, 255, 167, 84, 1, 255, 172, 81, 2, 255, 171, 76, 4, 255, 163, 72, 4, 255, 147, 64, 0, 255, 132, 57, 3, 255, 126, 49, 4, 255, 121, 42, 3, 255, 118, 41, 5, 255, 117, 43, 0, 255, 123, 41, 3, 255, 122, 43, 6, 255, 120, 46, 3, 255, 116, 42, 2, 255, 113, 37, 2, 255, 109, 37, 1, 255, 111, 41, 3, 255, 116, 42, 2, 255, 118, 41, 0, 255, 120, 45, 4, 255, 123, 45, 4, 255, 123, 46, 7, 255, 117, 49, 2, 255, 122, 42, 6, 255, 117, 41, 5, 255, 113, 40, 3, 255, 104, 35, 2, 255, 102, 36, 1, 255, 119, 42, 3, 255, 120, 46, 5, 255, 121, 47, 2, 255, 124, 48, 0, 255, 123, 48, 2, 255, 116, 44, 2, 255, 117, 46, 5, 255, 119, 52, 7, 255, 114, 43, 5, 255, 101, 31, 2, 255, 87, 27, 2, 255, 79, 24, 0, 255, 76, 27, 2, 255, 79, 24, 5, 255, 78, 19, 7, 255, 73, 21, 0, 255, 71, 26, 2, 255, 72, 22, 6, 255, 65, 19, 4, 255, 60, 21, 4, 255, 64, 21, 3, 255, 70, 22, 0, 255, 76, 23, 2, 255, 71, 24, 2, 255, 69, 24, 2, 255, 62, 19, 0, 255, 56, 19, 4, 255, 42, 14, 2, 255, 48, 16, 1, 255, 61, 21, 6, 255, 66, 24, 7, 255, 67, 24, 2, 255, 85, 30, 4, 255, 88, 28, 4, 255, 86, 26, 5, 255, 81, 23, 3, 255, 84, 29, 3, 255, 84, 30, 1, 255, 85, 30, 3, 255, 79, 24, 3, 255, 78, 24, 7, 255, 70, 20, 3, 255, 65, 21, 1, 255, 3, 2, 0, 255, 2, 0, 1, 255, 2, 0, 1, 255, 3, 0, 0, 255, 6, 2, 1, 255, 6, 1, 1, 255, 7, 1, 2, 255, 5, 1, 0, 255, 6, 0, 0, 255, 9, 1, 1, 255, 16, 9, 7, 255, 13, 8, 5, 255, 12, 8, 6, 255, 13, 9, 8, 255, 12, 6, 6, 255, 15, 8, 7, 255, 14, 6, 3, 255, 17, 9, 6, 255, 16, 8, 5, 255, 14, 7, 1, 255, 16, 7, 5, 255, 16, 7, 6, 255, 19, 8, 2, 255, 19, 9, 0, 255, 19, 12, 7, 255, 19, 15, 12, 255, 18, 16, 10, 255, 19, 17, 6, 255, 20, 19, 8, 255, 19, 17, 13, 255, 24, 19, 8, 255, 29, 21, 9, 255, 25, 18, 10, 255, 29, 23, 9, 255, 31, 26, 9, 255, 31, 25, 7, 255, 33, 25, 13, 255, 31, 26, 8, 255, 32, 28, 18, 255, 37, 31, 15, 255, 39, 39, 1, 255, 43, 32, 4, 255, 47, 34, 7, 255, 47, 40, 1, 255, 48, 37, 3, 255, 75, 51, 12, 255, 63, 53, 11, 255, 55, 50, 5, 255, 65, 53, 6, 255, 63, 54, 1, 255, 67, 51, 9, 255, 70, 45, 5, 255, 71, 54, 16, 255, 73, 57, 9, 255, 67, 54, 0, 255, 58, 52, 7, 255, 61, 50, 4, 255, 67, 52, 7, 255, 70, 54, 3, 255, 65, 50, 0, 255, 84, 69, 6, 255, 174, 125, 2, 255, 190, 132, 4, 255, 185, 124, 11, 255, 165, 107, 2, 255, 126, 76, 1, 255, 94, 58, 2, 255, 69, 47, 2, 255, 67, 43, 7, 255, 70, 42, 2, 255, 73, 45, 4, 255, 72, 43, 2, 255, 66, 40, 2, 255, 64, 45, 2, 255, 70, 44, 1, 255, 72, 37, 3, 255, 72, 37, 2, 255, 66, 38, 1, 255, 68, 40, 2, 255, 71, 39, 4, 255, 68, 37, 1, 255, 64, 38, 2, 255, 64, 38, 3, 255, 61, 36, 6, 255, 74, 42, 2, 255, 69, 45, 6, 255, 76, 43, 2, 255, 76, 43, 1, 255, 81, 41, 4, 255, 91, 44, 5, 255, 86, 41, 2, 255, 84, 41, 0, 255, 82, 42, 5, 255, 81, 42, 10, 255, 83, 44, 0, 255, 84, 44, 6, 255, 86, 46, 4, 255, 92, 42, 0, 255, 94, 43, 7, 255, 85, 42, 7, 255, 91, 44, 4, 255, 93, 50, 5, 255, 83, 45, 1, 255, 87, 47, 5, 255, 86, 48, 4, 255, 87, 44, 1, 255, 93, 46, 3, 255, 92, 47, 1, 255, 93, 47, 1, 255, 96, 47, 0, 255, 94, 44, 2, 255, 91, 46, 4, 255, 92, 47, 1, 255, 86, 46, 5, 255, 90, 49, 3, 255, 100, 51, 5, 255, 95, 49, 3, 255, 91, 47, 2, 255, 96, 50, 4, 255, 95, 45, 1, 255, 99, 51, 5, 255, 97, 50, 4, 255, 94, 52, 3, 255, 94, 52, 3, 255, 97, 52, 3, 255, 94, 54, 3, 255, 102, 52, 4, 255, 102, 52, 3, 255, 94, 51, 3, 255, 95, 50, 2, 255, 98, 51, 2, 255, 102, 55, 4, 255, 99, 54, 1, 255, 99, 56, 2, 255, 97, 54, 1, 255, 97, 57, 3, 255, 96, 58, 1, 255, 98, 58, 3, 255, 99, 53, 2, 255, 103, 55, 3, 255, 105, 55, 1, 255, 100, 54, 11, 255, 108, 59, 9, 255, 125, 71, 3, 255, 108, 60, 6, 255, 138, 69, 16, 255, 141, 69, 10, 255, 151, 82, 23, 255, 160, 83, 5, 255, 156, 84, 8, 255, 168, 92, 13, 255, 164, 81, 7, 255, 153, 77, 13, 255, 159, 87, 7, 255, 161, 90, 9, 255, 158, 85, 3, 255, 154, 82, 3, 255, 144, 77, 0, 255, 139, 77, 4, 255, 143, 69, 10, 255, 134, 65, 7, 255, 131, 66, 7, 255, 118, 56, 6, 255, 130, 66, 10, 255, 131, 71, 6, 255, 102, 58, 10, 255, 95, 51, 4, 255, 119, 66, 11, 255, 111, 62, 12, 255, 82, 39, 12, 255, 101, 63, 8, 255, 99, 49, 14, 255, 100, 60, 6, 255, 92, 50, 4, 255, 93, 51, 10, 255, 107, 64, 18, 255, 84, 47, 11, 255, 81, 50, 3, 255, 87, 50, 9, 255, 90, 48, 10, 255, 91, 49, 9, 255, 113, 61, 13, 255, 122, 74, 8, 255, 131, 68, 19, 255, 132, 64, 12, 255, 120, 65, 8, 255, 128, 62, 6, 255, 140, 70, 10, 255, 135, 75, 14, 255, 141, 86, 9, 255, 161, 91, 10, 255, 172, 94, 18, 255, 180, 102, 10, 255, 182, 106, 10, 255, 174, 105, 3, 255, 188, 112, 3, 255, 193, 113, 14, 255, 187, 111, 15, 255, 196, 115, 14, 255, 198, 116, 12, 255, 199, 118, 11, 255, 198, 121, 7, 255, 198, 121, 8, 255, 198, 119, 13, 255, 199, 121, 1, 255, 199, 123, 2, 255, 204, 130, 3, 255, 202, 128, 6, 255, 201, 127, 5, 255, 205, 126, 9, 255, 210, 129, 5, 255, 210, 130, 8, 255, 208, 128, 13, 255, 208, 127, 6, 255, 207, 127, 10, 255, 211, 137, 1, 255, 209, 135, 9, 255, 212, 140, 7, 255, 208, 136, 5, 255, 209, 127, 15, 255, 215, 132, 7, 255, 206, 129, 7, 255, 200, 118, 10, 255, 197, 119, 15, 255, 204, 137, 7, 255, 199, 130, 12, 255, 207, 139, 7, 255, 195, 125, 16, 255, 197, 130, 9, 255, 208, 141, 3, 255, 219, 159, 1, 255, 218, 159, 5, 255, 206, 146, 10, 255, 176, 115, 9, 255, 158, 97, 12, 255, 186, 124, 14, 255, 209, 145, 12, 255, 208, 149, 10, 255, 213, 158, 7, 255, 219, 170, 3, 255, 218, 172, 1, 255, 215, 167, 8, 255, 221, 175, 5, 255, 229, 184, 8, 255, 220, 176, 2, 255, 227, 183, 2, 255, 223, 174, 1, 255, 212, 158, 0, 255, 210, 157, 4, 255, 218, 172, 2, 255, 222, 176, 0, 255, 217, 173, 0, 255, 213, 169, 3, 255, 216, 168, 10, 255, 212, 165, 10, 255, 201, 157, 4, 255, 198, 152, 1, 255, 196, 147, 5, 255, 202, 155, 5, 255, 197, 150, 4, 255, 198, 151, 3, 255, 205, 158, 7, 255, 205, 155, 1, 255, 207, 155, 1, 255, 208, 153, 1, 255, 204, 146, 7, 255, 198, 139, 6, 255, 206, 147, 11, 255, 206, 146, 15, 255, 204, 148, 5, 255, 207, 147, 4, 255, 207, 146, 6, 255, 207, 145, 4, 255, 206, 142, 8, 255, 207, 137, 5, 255, 206, 137, 5, 255, 204, 135, 6, 255, 203, 134, 7, 255, 199, 129, 5, 255, 198, 127, 6, 255, 197, 122, 7, 255, 197, 120, 9, 255, 190, 117, 4, 255, 188, 115, 7, 255, 189, 115, 11, 255, 187, 109, 6, 255, 185, 110, 6, 255, 183, 110, 8, 255, 176, 100, 4, 255, 175, 97, 9, 255, 164, 83, 2, 255, 161, 79, 4, 255, 162, 83, 3, 255, 158, 80, 2, 255, 163, 86, 6, 255, 156, 81, 7, 255, 154, 75, 7, 255, 149, 72, 6, 255, 131, 57, 1, 255, 119, 49, 0, 255, 122, 52, 4, 255, 123, 47, 8, 255, 113, 47, 1, 255, 115, 46, 4, 255, 103, 39, 2, 255, 91, 37, 1, 255, 96, 40, 4, 255, 99, 39, 5, 255, 99, 37, 0, 255, 106, 42, 3, 255, 104, 40, 7, 255, 99, 34, 1, 255, 105, 42, 4, 255, 109, 44, 5, 255, 117, 47, 3, 255, 117, 44, 1, 255, 115, 41, 4, 255, 117, 43, 8, 255, 114, 39, 2, 255, 115, 45, 6, 255, 111, 44, 5, 255, 110, 47, 4, 255, 95, 33, 1, 255, 104, 40, 4, 255, 141, 68, 6, 255, 163, 82, 6, 255, 162, 81, 7, 255, 156, 73, 2, 255, 152, 68, 2, 255, 151, 67, 6, 255, 147, 56, 6, 255, 137, 49, 5, 255, 127, 48, 4, 255, 121, 42, 2, 255, 112, 41, 1, 255, 115, 45, 0, 255, 121, 48, 3, 255, 113, 42, 2, 255, 119, 46, 2, 255, 120, 51, 2, 255, 115, 48, 2, 255, 113, 44, 4, 255, 111, 42, 5, 255, 110, 40, 3, 255, 116, 42, 4, 255, 121, 46, 4, 255, 117, 44, 3, 255, 114, 46, 1, 255, 121, 51, 1, 255, 121, 48, 5, 255, 120, 46, 5, 255, 126, 50, 4, 255, 119, 48, 2, 255, 105, 44, 0, 255, 113, 47, 2, 255, 125, 48, 7, 255, 126, 45, 3, 255, 131, 46, 1, 255, 127, 43, 0, 255, 123, 41, 4, 255, 120, 38, 2, 255, 121, 38, 0, 255, 125, 46, 1, 255, 121, 47, 1, 255, 112, 42, 1, 255, 112, 41, 2, 255, 105, 36, 1, 255, 94, 34, 3, 255, 88, 29, 5, 255, 80, 26, 3, 255, 82, 25, 2, 255, 82, 20, 1, 255, 79, 21, 1, 255, 69, 21, 0, 255, 66, 17, 1, 255, 64, 18, 2, 255, 63, 23, 2, 255, 74, 27, 5, 255, 74, 23, 2, 255, 72, 21, 0, 255, 74, 24, 2, 255, 72, 25, 2, 255, 64, 20, 2, 255, 63, 21, 8, 255, 64, 17, 3, 255, 60, 17, 1, 255, 65, 23, 1, 255, 76, 28, 2, 255, 83, 28, 0, 255, 86, 31, 0, 255, 89, 29, 3, 255, 83, 24, 2, 255, 83, 23, 0, 255, 92, 26, 4, 255, 89, 27, 3, 255, 88, 31, 2, 255, 93, 31, 3, 255, 88, 28, 1, 255, 89, 28, 1, 255, 89, 26, 0, 255, 8, 4, 1, 255, 4, 0, 1, 255, 3, 0, 1, 255, 6, 3, 2, 255, 5, 1, 0, 255, 6, 1, 0, 255, 7, 0, 0, 255, 5, 0, 0, 255, 7, 2, 1, 255, 8, 3, 0, 255, 8, 3, 2, 255, 17, 8, 9, 255, 16, 7, 9, 255, 14, 9, 9, 255, 11, 5, 5, 255, 14, 7, 7, 255, 14, 9, 7, 255, 13, 8, 4, 255, 12, 9, 4, 255, 16, 10, 6, 255, 18, 9, 7, 255, 18, 10, 7, 255, 18, 10, 2, 255, 18, 11, 0, 255, 17, 11, 1, 255, 16, 14, 5, 255, 14, 14, 9, 255, 17, 16, 9, 255, 18, 19, 8, 255, 22, 21, 11, 255, 24, 19, 9, 255, 25, 16, 10, 255, 24, 18, 10, 255, 28, 24, 11, 255, 32, 29, 14, 255, 31, 28, 14, 255, 32, 25, 13, 255, 35, 28, 10, 255, 38, 31, 11, 255, 38, 36, 7, 255, 43, 35, 4, 255, 45, 36, 1, 255, 54, 42, 4, 255, 47, 39, 6, 255, 57, 49, 7, 255, 78, 58, 4, 255, 65, 49, 7, 255, 67, 59, 3, 255, 66, 57, 3, 255, 61, 42, 0, 255, 54, 34, 0, 255, 48, 35, 1, 255, 63, 42, 7, 255, 72, 58, 8, 255, 67, 51, 3, 255, 70, 51, 7, 255, 65, 52, 3, 255, 70, 53, 6, 255, 72, 56, 2, 255, 67, 51, 1, 255, 116, 85, 4, 255, 187, 127, 1, 255, 169, 115, 4, 255, 165, 100, 2, 255, 149, 85, 3, 255, 122, 66, 7, 255, 95, 50, 7, 255, 72, 47, 3, 255, 67, 39, 5, 255, 65, 45, 1, 255, 73, 39, 4, 255, 68, 42, 5, 255, 67, 45, 5, 255, 66, 40, 3, 255, 73, 41, 5, 255, 71, 42, 3, 255, 62, 39, 4, 255, 75, 42, 5, 255, 70, 37, 10, 255, 65, 33, 2, 255, 71, 37, 2, 255, 75, 38, 7, 255, 69, 37, 5, 255, 49, 31, 1, 255, 71, 43, 5, 255, 79, 39, 7, 255, 83, 40, 4, 255, 77, 46, 0, 255, 79, 45, 3, 255, 76, 41, 2, 255, 85, 44, 4, 255, 86, 42, 1, 255, 80, 41, 4, 255, 74, 39, 2, 255, 82, 41, 2, 255, 80, 46, 4, 255, 80, 39, 2, 255, 91, 52, 5, 255, 95, 54, 7, 255, 89, 44, 5, 255, 85, 50, 6, 255, 91, 48, 3, 255, 96, 47, 3, 255, 89, 43, 3, 255, 85, 43, 0, 255, 87, 51, 1, 255, 86, 48, 7, 255, 88, 43, 7, 255, 91, 49, 4, 255, 94, 52, 0, 255, 100, 46, 7, 255, 92, 43, 6, 255, 87, 46, 1, 255, 84, 46, 3, 255, 98, 49, 7, 255, 92, 47, 3, 255, 92, 44, 0, 255, 100, 48, 1, 255, 100, 52, 2, 255, 94, 49, 0, 255, 97, 50, 6, 255, 94, 50, 5, 255, 93, 51, 0, 255, 100, 51, 2, 255, 103, 51, 4, 255, 95, 51, 3, 255, 100, 50, 4, 255, 104, 53, 5, 255, 99, 56, 8, 255, 97, 52, 5, 255, 100, 51, 4, 255, 105, 54, 6, 255, 99, 50, 2, 255, 99, 55, 4, 255, 101, 54, 3, 255, 102, 55, 2, 255, 100, 58, 2, 255, 100, 57, 3, 255, 101, 55, 4, 255, 101, 55, 4, 255, 102, 55, 4, 255, 107, 53, 4, 255, 104, 57, 4, 255, 100, 54, 8, 255, 108, 65, 4, 255, 121, 67, 5, 255, 112, 53, 6, 255, 106, 47, 14, 255, 107, 57, 15, 255, 105, 57, 11, 255, 119, 58, 7, 255, 100, 53, 4, 255, 97, 55, 7, 255, 114, 58, 7, 255, 95, 47, 8, 255, 98, 52, 4, 255, 98, 54, 5, 255, 131, 72, 5, 255, 107, 58, 3, 255, 84, 44, 7, 255, 90, 51, 4, 255, 83, 50, 4, 255, 91, 54, 11, 255, 136, 83, 12, 255, 128, 68, 9, 255, 99, 50, 4, 255, 84, 52, 5, 255, 96, 50, 3, 255, 106, 63, 6, 255, 93, 53, 4, 255, 92, 44, 4, 255, 85, 45, 10, 255, 90, 54, 11, 255, 107, 60, 8, 255, 146, 81, 6, 255, 154, 78, 7, 255, 112, 61, 6, 255, 95, 56, 7, 255, 105, 63, 9, 255, 118, 67, 14, 255, 149, 79, 16, 255, 154, 76, 15, 255, 153, 79, 5, 255, 164, 81, 9, 255, 158, 76, 12, 255, 147, 74, 10, 255, 159, 84, 14, 255, 171, 94, 12, 255, 174, 95, 12, 255, 188, 103, 15, 255, 193, 105, 11, 255, 188, 104, 8, 255, 187, 110, 6, 255, 190, 109, 12, 255, 190, 108, 15, 255, 201, 123, 9, 255, 201, 125, 12, 255, 201, 122, 16, 255, 206, 122, 8, 255, 207, 123, 4, 255, 205, 124, 6, 255, 208, 126, 7, 255, 207, 126, 7, 255, 205, 124, 8, 255, 207, 125, 16, 255, 209, 130, 7, 255, 210, 134, 6, 255, 207, 132, 8, 255, 209, 133, 9, 255, 212, 134, 9, 255, 212, 134, 2, 255, 212, 136, 5, 255, 210, 135, 8, 255, 211, 138, 6, 255, 209, 135, 13, 255, 213, 140, 9, 255, 210, 137, 3, 255, 212, 140, 8, 255, 211, 144, 11, 255, 213, 138, 11, 255, 212, 135, 11, 255, 197, 125, 16, 255, 198, 128, 12, 255, 207, 143, 8, 255, 200, 133, 8, 255, 201, 135, 10, 255, 219, 159, 9, 255, 200, 141, 7, 255, 189, 127, 17, 255, 201, 142, 17, 255, 221, 169, 11, 255, 215, 159, 5, 255, 206, 145, 6, 255, 202, 143, 15, 255, 165, 106, 10, 255, 189, 129, 21, 255, 209, 149, 7, 255, 208, 157, 0, 255, 217, 165, 2, 255, 221, 172, 6, 255, 221, 172, 5, 255, 217, 167, 8, 255, 222, 175, 14, 255, 230, 182, 2, 255, 223, 178, 6, 255, 211, 165, 8, 255, 221, 168, 5, 255, 211, 152, 7, 255, 214, 162, 4, 255, 224, 177, 6, 255, 213, 165, 2, 255, 216, 172, 2, 255, 218, 172, 2, 255, 219, 173, 2, 255, 206, 158, 5, 255, 195, 143, 18, 255, 199, 155, 6, 255, 200, 156, 4, 255, 201, 155, 5, 255, 197, 146, 3, 255, 205, 154, 8, 255, 205, 156, 15, 255, 202, 151, 10, 255, 207, 155, 6, 255, 204, 148, 6, 255, 202, 145, 8, 255, 202, 148, 0, 255, 205, 149, 8, 255, 209, 153, 6, 255, 206, 149, 9, 255, 208, 147, 10, 255, 207, 146, 1, 255, 206, 144, 4, 255, 206, 140, 10, 255, 205, 138, 6, 255, 204, 138, 9, 255, 204, 135, 9, 255, 202, 128, 6, 255, 199, 121, 6, 255, 196, 120, 7, 255, 190, 118, 2, 255, 189, 118, 3, 255, 190, 116, 8, 255, 189, 116, 10, 255, 188, 115, 9, 255, 188, 113, 7, 255, 184, 111, 7, 255, 180, 108, 6, 255, 183, 109, 8, 255, 183, 108, 7, 255, 175, 99, 2, 255, 165, 90, 2, 255, 156, 81, 2, 255, 149, 74, 9, 255, 157, 79, 6, 255, 165, 90, 3, 255, 163, 85, 6, 255, 157, 75, 2, 255, 135, 62, 0, 255, 117, 55, 6, 255, 116, 51, 5, 255, 117, 46, 4, 255, 114, 46, 0, 255, 121, 52, 8, 255, 106, 39, 2, 255, 97, 37, 3, 255, 99, 39, 4, 255, 99, 38, 5, 255, 97, 39, 1, 255, 104, 43, 7, 255, 102, 35, 5, 255, 103, 34, 2, 255, 104, 42, 5, 255, 104, 40, 0, 255, 115, 46, 2, 255, 112, 41, 0, 255, 117, 39, 3, 255, 116, 40, 3, 255, 114, 44, 3, 255, 117, 47, 3, 255, 112, 46, 3, 255, 106, 40, 4, 255, 110, 40, 3, 255, 101, 39, 3, 255, 121, 54, 7, 255, 138, 57, 3, 255, 129, 53, 4, 255, 127, 49, 3, 255, 124, 45, 2, 255, 120, 40, 2, 255, 117, 34, 6, 255, 117, 37, 6, 255, 113, 42, 3, 255, 113, 40, 4, 255, 113, 45, 5, 255, 120, 46, 2, 255, 122, 45, 1, 255, 116, 43, 1, 255, 121, 45, 2, 255, 122, 42, 5, 255, 125, 43, 7, 255, 120, 40, 1, 255, 116, 44, 0, 255, 116, 50, 3, 255, 118, 48, 2, 255, 119, 46, 2, 255, 119, 47, 6, 255, 116, 46, 2, 255, 123, 50, 2, 255, 122, 47, 8, 255, 118, 46, 3, 255, 114, 44, 0, 255, 112, 41, 1, 255, 112, 48, 3, 255, 118, 45, 4, 255, 129, 40, 7, 255, 130, 41, 7, 255, 130, 44, 4, 255, 137, 54, 2, 255, 139, 58, 4, 255, 132, 49, 3, 255, 128, 45, 3, 255, 131, 49, 4, 255, 126, 49, 1, 255, 117, 47, 0, 255, 114, 49, 3, 255, 109, 44, 2, 255, 95, 37, 1, 255, 87, 31, 7, 255, 82, 28, 5, 255, 83, 29, 1, 255, 83, 29, 0, 255, 81, 24, 5, 255, 70, 23, 4, 255, 68, 21, 0, 255, 74, 21, 5, 255, 69, 20, 5, 255, 77, 24, 2, 255, 76, 26, 1, 255, 69, 22, 2, 255, 74, 21, 6, 255, 70, 21, 2, 255, 64, 20, 0, 255, 71, 21, 3, 255, 75, 24, 6, 255, 66, 24, 3, 255, 67, 24, 1, 255, 78, 26, 1, 255, 89, 29, 2, 255, 87, 30, 3, 255, 81, 27, 1, 255, 86, 28, 2, 255, 87, 26, 1, 255, 84, 23, 2, 255, 85, 22, 3, 255, 90, 27, 0, 255, 96, 34, 0, 255, 96, 30, 3, 255, 96, 31, 6, 255, 93, 27, 4, 255, 13, 7, 4, 255, 7, 2, 2, 255, 3, 1, 1, 255, 3, 3, 2, 255, 4, 0, 0, 255, 4, 0, 0, 255, 6, 1, 1, 255, 8, 2, 2, 255, 6, 2, 1, 255, 7, 4, 3, 255, 5, 1, 0, 255, 14, 6, 6, 255, 19, 9, 10, 255, 16, 8, 9, 255, 15, 7, 7, 255, 15, 6, 7, 255, 15, 8, 7, 255, 14, 10, 6, 255, 13, 9, 5, 255, 15, 9, 5, 255, 16, 10, 6, 255, 20, 12, 8, 255, 19, 12, 4, 255, 17, 12, 2, 255, 15, 12, 3, 255, 20, 15, 6, 255, 21, 15, 7, 255, 21, 13, 6, 255, 23, 18, 6, 255, 24, 19, 6, 255, 26, 19, 4, 255, 34, 22, 14, 255, 35, 23, 15, 255, 37, 25, 11, 255, 36, 27, 10, 255, 36, 28, 13, 255, 37, 30, 15, 255, 41, 32, 13, 255, 46, 37, 7, 255, 47, 34, 0, 255, 58, 32, 9, 255, 49, 37, 12, 255, 42, 36, 3, 255, 54, 41, 3, 255, 89, 64, 7, 255, 81, 70, 0, 255, 77, 74, 7, 255, 75, 74, 2, 255, 58, 50, 0, 255, 73, 65, 17, 255, 85, 85, 54, 255, 87, 85, 42, 255, 90, 82, 4, 255, 80, 70, 9, 255, 72, 64, 8, 255, 76, 55, 3, 255, 74, 58, 4, 255, 75, 59, 4, 255, 71, 49, 4, 255, 80, 59, 5, 255, 155, 100, 3, 255, 174, 117, 7, 255, 171, 114, 2, 255, 162, 97, 2, 255, 145, 82, 4, 255, 110, 57, 5, 255, 79, 37, 9, 255, 71, 46, 3, 255, 70, 39, 2, 255, 68, 41, 2, 255, 82, 39, 6, 255, 66, 44, 1, 255, 63, 44, 1, 255, 77, 39, 3, 255, 74, 38, 2, 255, 69, 37, 2, 255, 64, 39, 2, 255, 62, 38, 7, 255, 65, 35, 5, 255, 61, 37, 2, 255, 60, 36, 2, 255, 66, 39, 6, 255, 56, 34, 0, 255, 80, 43, 5, 255, 84, 44, 2, 255, 83, 46, 8, 255, 87, 42, 7, 255, 88, 43, 3, 255, 82, 43, 4, 255, 67, 40, 8, 255, 77, 37, 2, 255, 79, 43, 5, 255, 79, 43, 4, 255, 86, 41, 2, 255, 82, 49, 4, 255, 79, 44, 1, 255, 82, 41, 3, 255, 86, 46, 2, 255, 86, 45, 0, 255, 90, 45, 3, 255, 88, 50, 0, 255, 92, 46, 3, 255, 91, 47, 3, 255, 84, 44, 0, 255, 96, 45, 3, 255, 99, 46, 5, 255, 87, 42, 2, 255, 87, 41, 3, 255, 84, 45, 5, 255, 89, 49, 6, 255, 85, 46, 1, 255, 84, 43, 2, 255, 88, 45, 5, 255, 90, 45, 2, 255, 96, 49, 0, 255, 89, 50, 3, 255, 93, 45, 3, 255, 99, 45, 2, 255, 97, 47, 3, 255, 93, 51, 5, 255, 92, 50, 3, 255, 92, 51, 3, 255, 96, 53, 7, 255, 96, 49, 1, 255, 99, 51, 3, 255, 97, 53, 3, 255, 99, 52, 4, 255, 103, 51, 4, 255, 99, 51, 3, 255, 98, 50, 4, 255, 101, 53, 5, 255, 102, 53, 3, 255, 105, 55, 5, 255, 103, 51, 2, 255, 105, 51, 4, 255, 101, 50, 2, 255, 105, 55, 6, 255, 102, 51, 2, 255, 107, 55, 7, 255, 105, 55, 6, 255, 105, 56, 5, 255, 108, 55, 4, 255, 104, 53, 3, 255, 111, 56, 6, 255, 107, 53, 8, 255, 104, 57, 3, 255, 119, 63, 5, 255, 104, 56, 7, 255, 107, 63, 10, 255, 131, 72, 7, 255, 106, 58, 9, 255, 88, 55, 5, 255, 132, 78, 14, 255, 106, 53, 3, 255, 75, 46, 6, 255, 86, 50, 8, 255, 105, 60, 9, 255, 135, 74, 7, 255, 111, 59, 10, 255, 92, 44, 13, 255, 89, 51, 5, 255, 89, 52, 7, 255, 104, 56, 7, 255, 113, 64, 9, 255, 92, 48, 13, 255, 89, 44, 11, 255, 93, 55, 10, 255, 92, 56, 10, 255, 84, 47, 6, 255, 84, 47, 5, 255, 93, 57, 10, 255, 122, 76, 16, 255, 152, 89, 7, 255, 157, 83, 3, 255, 154, 73, 14, 255, 136, 67, 12, 255, 144, 77, 5, 255, 154, 79, 16, 255, 166, 90, 9, 255, 166, 92, 8, 255, 168, 91, 17, 255, 161, 79, 13, 255, 154, 82, 9, 255, 159, 92, 17, 255, 163, 92, 14, 255, 168, 94, 13, 255, 178, 99, 9, 255, 188, 103, 2, 255, 192, 103, 8, 255, 184, 97, 10, 255, 185, 102, 6, 255, 194, 113, 9, 255, 199, 117, 12, 255, 203, 121, 11, 255, 206, 124, 8, 255, 206, 125, 8, 255, 205, 125, 9, 255, 207, 128, 12, 255, 209, 127, 9, 255, 210, 128, 6, 255, 209, 127, 7, 255, 210, 127, 17, 255, 211, 132, 8, 255, 211, 133, 1, 255, 214, 133, 15, 255, 213, 134, 13, 255, 213, 137, 9, 255, 212, 139, 8, 255, 213, 140, 9, 255, 213, 139, 8, 255, 216, 141, 7, 255, 216, 141, 16, 255, 215, 141, 11, 255, 215, 144, 5, 255, 216, 144, 7, 255, 217, 142, 23, 255, 212, 139, 2, 255, 219, 147, 6, 255, 216, 149, 9, 255, 213, 143, 16, 255, 210, 145, 6, 255, 205, 146, 5, 255, 213, 152, 5, 255, 215, 154, 1, 255, 211, 142, 9, 255, 209, 143, 8, 255, 218, 157, 4, 255, 207, 145, 2, 255, 197, 130, 16, 255, 205, 142, 12, 255, 223, 165, 9, 255, 210, 153, 5, 255, 195, 139, 18, 255, 208, 160, 9, 255, 192, 139, 19, 255, 191, 138, 10, 255, 195, 142, 6, 255, 208, 158, 6, 255, 211, 161, 2, 255, 212, 161, 4, 255, 218, 167, 7, 255, 216, 167, 0, 255, 220, 172, 5, 255, 221, 171, 2, 255, 224, 175, 3, 255, 226, 175, 11, 255, 200, 145, 12, 255, 197, 140, 7, 255, 214, 162, 7, 255, 219, 169, 1, 255, 213, 165, 9, 255, 214, 167, 4, 255, 216, 171, 2, 255, 218, 172, 9, 255, 198, 147, 5, 255, 193, 141, 7, 255, 203, 158, 1, 255, 200, 152, 4, 255, 200, 149, 5, 255, 201, 149, 2, 255, 204, 153, 2, 255, 201, 157, 5, 255, 205, 157, 11, 255, 206, 152, 15, 255, 202, 147, 14, 255, 202, 146, 9, 255, 204, 151, 7, 255, 204, 151, 5, 255, 206, 152, 10, 255, 206, 150, 11, 255, 208, 147, 6, 255, 206, 146, 5, 255, 205, 144, 4, 255, 203, 139, 5, 255, 203, 136, 8, 255, 201, 135, 11, 255, 199, 130, 3, 255, 199, 124, 0, 255, 199, 119, 9, 255, 195, 117, 15, 255, 190, 121, 10, 255, 189, 122, 4, 255, 191, 118, 4, 255, 186, 114, 3, 255, 183, 111, 3, 255, 186, 111, 5, 255, 183, 110, 6, 255, 182, 110, 8, 255, 181, 108, 6, 255, 174, 98, 11, 255, 167, 88, 8, 255, 162, 85, 2, 255, 160, 82, 1, 255, 157, 76, 9, 255, 162, 80, 8, 255, 167, 85, 2, 255, 165, 85, 1, 255, 156, 78, 3, 255, 141, 67, 1, 255, 127, 58, 5, 255, 114, 45, 6, 255, 118, 45, 1, 255, 115, 48, 1, 255, 118, 51, 4, 255, 118, 49, 10, 255, 104, 39, 2, 255, 98, 41, 4, 255, 97, 42, 4, 255, 97, 34, 2, 255, 104, 36, 4, 255, 108, 40, 3, 255, 104, 39, 5, 255, 106, 43, 6, 255, 110, 46, 1, 255, 108, 44, 1, 255, 109, 44, 5, 255, 117, 44, 3, 255, 112, 41, 1, 255, 108, 45, 4, 255, 116, 51, 1, 255, 115, 50, 0, 255, 114, 42, 3, 255, 114, 44, 4, 255, 103, 41, 2, 255, 98, 34, 1, 255, 108, 35, 3, 255, 118, 45, 4, 255, 121, 49, 3, 255, 122, 50, 3, 255, 120, 50, 4, 255, 119, 43, 3, 255, 120, 39, 3, 255, 116, 40, 0, 255, 117, 49, 0, 255, 114, 47, 2, 255, 125, 49, 6, 255, 123, 43, 2, 255, 124, 48, 4, 255, 124, 48, 4, 255, 125, 43, 1, 255, 125, 43, 2, 255, 118, 39, 2, 255, 119, 44, 4, 255, 118, 46, 1, 255, 121, 49, 2, 255, 117, 47, 0, 255, 118, 45, 2, 255, 123, 44, 5, 255, 124, 47, 2, 255, 123, 44, 5, 255, 115, 39, 5, 255, 102, 42, 1, 255, 115, 44, 3, 255, 119, 46, 5, 255, 120, 42, 0, 255, 122, 39, 0, 255, 115, 43, 0, 255, 124, 53, 4, 255, 141, 67, 4, 255, 154, 74, 2, 255, 156, 73, 2, 255, 147, 66, 4, 255, 133, 56, 4, 255, 125, 51, 2, 255, 127, 50, 1, 255, 126, 47, 3, 255, 115, 38, 4, 255, 96, 25, 0, 255, 91, 26, 2, 255, 90, 27, 4, 255, 85, 24, 1, 255, 86, 26, 1, 255, 86, 21, 3, 255, 72, 19, 3, 255, 67, 21, 2, 255, 75, 25, 4, 255, 68, 21, 2, 255, 70, 23, 2, 255, 70, 22, 0, 255, 68, 19, 1, 255, 71, 23, 5, 255, 78, 28, 5, 255, 82, 30, 2, 255, 87, 32, 1, 255, 89, 34, 3, 255, 86, 32, 4, 255, 81, 28, 0, 255, 84, 30, 0, 255, 88, 32, 2, 255, 84, 28, 6, 255, 73, 23, 0, 255, 85, 26, 4, 255, 86, 23, 3, 255, 82, 29, 5, 255, 87, 22, 2, 255, 90, 20, 2, 255, 88, 27, 3, 255, 96, 24, 3, 255, 89, 23, 3, 255, 80, 18, 1, 255, 16, 6, 4, 255, 9, 3, 2, 255, 3, 0, 0, 255, 0, 0, 0, 255, 2, 2, 0, 255, 4, 2, 0, 255, 7, 1, 2, 255, 5, 1, 2, 255, 5, 1, 1, 255, 5, 1, 0, 255, 9, 3, 2, 255, 7, 1, 1, 255, 18, 8, 9, 255, 19, 8, 9, 255, 19, 9, 10, 255, 18, 8, 9, 255, 14, 5, 4, 255, 18, 12, 9, 255, 14, 9, 4, 255, 13, 10, 5, 255, 15, 9, 4, 255, 20, 13, 7, 255, 19, 12, 6, 255, 16, 12, 3, 255, 21, 14, 6, 255, 21, 14, 7, 255, 26, 16, 8, 255, 28, 19, 3, 255, 26, 18, 3, 255, 27, 17, 14, 255, 32, 22, 11, 255, 38, 25, 9, 255, 50, 27, 14, 255, 43, 24, 7, 255, 38, 27, 12, 255, 35, 30, 19, 255, 38, 31, 15, 255, 50, 35, 7, 255, 57, 42, 6, 255, 55, 42, 7, 255, 58, 38, 7, 255, 62, 41, 6, 255, 58, 40, 7, 255, 84, 85, 20, 255, 117, 128, 15, 255, 124, 133, 18, 255, 114, 121, 7, 255, 86, 90, 14, 255, 114, 138, 46, 255, 202, 227, 138, 255, 239, 246, 167, 255, 244, 244, 89, 255, 176, 164, 5, 255, 99, 98, 11, 255, 82, 77, 5, 255, 78, 63, 6, 255, 78, 57, 2, 255, 76, 58, 3, 255, 71, 62, 7, 255, 139, 94, 9, 255, 159, 96, 7, 255, 152, 102, 8, 255, 210, 160, 20, 255, 202, 138, 17, 255, 138, 83, 6, 255, 90, 45, 1, 255, 70, 35, 5, 255, 64, 39, 1, 255, 71, 40, 2, 255, 74, 38, 4, 255, 78, 40, 5, 255, 61, 40, 3, 255, 58, 40, 2, 255, 65, 43, 0, 255, 63, 41, 1, 255, 60, 39, 7, 255, 58, 33, 5, 255, 73, 41, 1, 255, 68, 40, 2, 255, 66, 38, 0, 255, 65, 35, 10, 255, 70, 35, 8, 255, 108, 62, 6, 255, 152, 82, 5, 255, 144, 74, 3, 255, 88, 46, 3, 255, 79, 37, 5, 255, 73, 38, 7, 255, 89, 49, 2, 255, 118, 58, 3, 255, 107, 52, 3, 255, 123, 64, 8, 255, 120, 62, 9, 255, 75, 35, 8, 255, 76, 40, 7, 255, 83, 40, 7, 255, 100, 51, 5, 255, 129, 60, 4, 255, 127, 60, 4, 255, 125, 69, 7, 255, 149, 76, 7, 255, 115, 57, 3, 255, 83, 38, 8, 255, 83, 45, 8, 255, 91, 46, 3, 255, 91, 41, 6, 255, 89, 40, 3, 255, 90, 43, 0, 255, 90, 45, 0, 255, 90, 38, 3, 255, 87, 43, 5, 255, 85, 40, 3, 255, 88, 43, 8, 255, 95, 47, 4, 255, 93, 47, 4, 255, 95, 45, 4, 255, 94, 47, 2, 255, 92, 49, 4, 255, 94, 49, 6, 255, 95, 47, 4, 255, 95, 49, 1, 255, 91, 51, 2, 255, 92, 48, 7, 255, 93, 46, 2, 255, 100, 51, 2, 255, 103, 53, 2, 255, 98, 54, 3, 255, 99, 55, 4, 255, 96, 56, 4, 255, 98, 55, 4, 255, 101, 54, 3, 255, 102, 54, 2, 255, 103, 55, 3, 255, 102, 56, 3, 255, 100, 55, 6, 255, 98, 52, 6, 255, 100, 51, 6, 255, 102, 52, 5, 255, 104, 53, 3, 255, 103, 54, 2, 255, 103, 56, 7, 255, 103, 57, 5, 255, 104, 55, 3, 255, 104, 55, 4, 255, 110, 57, 6, 255, 106, 53, 6, 255, 101, 55, 7, 255, 101, 61, 7, 255, 102, 56, 0, 255, 100, 54, 2, 255, 94, 50, 4, 255, 107, 61, 5, 255, 109, 58, 7, 255, 96, 48, 7, 255, 95, 58, 8, 255, 94, 51, 6, 255, 93, 51, 1, 255, 90, 55, 5, 255, 86, 53, 11, 255, 87, 48, 10, 255, 94, 51, 11, 255, 90, 47, 6, 255, 85, 47, 0, 255, 87, 52, 6, 255, 117, 66, 13, 255, 139, 73, 11, 255, 142, 68, 14, 255, 121, 57, 14, 255, 107, 67, 5, 255, 120, 76, 6, 255, 144, 74, 13, 255, 157, 78, 4, 255, 166, 75, 1, 255, 152, 68, 6, 255, 142, 69, 16, 255, 152, 79, 14, 255, 172, 90, 4, 255, 176, 93, 9, 255, 172, 96, 11, 255, 178, 102, 10, 255, 187, 94, 15, 255, 183, 97, 10, 255, 185, 101, 8, 255, 191, 101, 10, 255, 190, 102, 8, 255, 193, 101, 9, 255, 195, 101, 16, 255, 190, 98, 5, 255, 190, 101, 10, 255, 184, 108, 6, 255, 200, 123, 13, 255, 211, 122, 10, 255, 204, 118, 9, 255, 198, 115, 12, 255, 204, 119, 11, 255, 208, 122, 16, 255, 212, 128, 8, 255, 207, 127, 8, 255, 200, 123, 10, 255, 202, 125, 5, 255, 204, 124, 11, 255, 210, 131, 13, 255, 213, 136, 4, 255, 212, 134, 7, 255, 213, 138, 5, 255, 213, 141, 2, 255, 215, 143, 5, 255, 216, 146, 6, 255, 216, 146, 9, 255, 213, 145, 4, 255, 216, 148, 4, 255, 218, 146, 5, 255, 218, 148, 0, 255, 218, 147, 7, 255, 220, 148, 11, 255, 215, 143, 8, 255, 212, 139, 7, 255, 224, 152, 9, 255, 219, 150, 5, 255, 211, 137, 9, 255, 219, 146, 5, 255, 220, 158, 6, 255, 222, 157, 3, 255, 220, 156, 5, 255, 218, 149, 4, 255, 214, 150, 6, 255, 212, 147, 5, 255, 197, 125, 10, 255, 197, 124, 18, 255, 206, 139, 13, 255, 212, 151, 1, 255, 220, 167, 1, 255, 218, 177, 7, 255, 217, 177, 1, 255, 220, 172, 5, 255, 205, 155, 4, 255, 201, 157, 3, 255, 210, 160, 10, 255, 208, 159, 3, 255, 214, 166, 2, 255, 211, 160, 4, 255, 210, 159, 4, 255, 216, 166, 5, 255, 214, 172, 7, 255, 219, 174, 3, 255, 221, 173, 2, 255, 200, 154, 4, 255, 202, 162, 3, 255, 210, 163, 8, 255, 213, 164, 1, 255, 209, 159, 7, 255, 216, 169, 2, 255, 205, 158, 0, 255, 205, 159, 7, 255, 203, 155, 4, 255, 197, 144, 3, 255, 204, 152, 7, 255, 199, 148, 10, 255, 199, 147, 12, 255, 199, 147, 2, 255, 206, 155, 6, 255, 202, 158, 2, 255, 202, 158, 0, 255, 200, 152, 5, 255, 200, 149, 6, 255, 203, 153, 5, 255, 206, 152, 17, 255, 206, 154, 10, 255, 205, 151, 19, 255, 206, 150, 9, 255, 206, 148, 3, 255, 207, 145, 8, 255, 205, 146, 6, 255, 203, 143, 4, 255, 202, 139, 11, 255, 203, 131, 7, 255, 198, 127, 4, 255, 195, 126, 8, 255, 197, 128, 13, 255, 196, 125, 13, 255, 195, 124, 12, 255, 193, 121, 10, 255, 188, 115, 7, 255, 187, 114, 9, 255, 184, 110, 6, 255, 184, 110, 4, 255, 182, 108, 1, 255, 179, 108, 2, 255, 177, 103, 3, 255, 170, 94, 5, 255, 166, 85, 7, 255, 162, 79, 6, 255, 169, 86, 7, 255, 167, 85, 4, 255, 166, 85, 1, 255, 163, 77, 2, 255, 161, 78, 4, 255, 150, 76, 6, 255, 136, 59, 5, 255, 134, 56, 5, 255, 121, 54, 4, 255, 113, 52, 1, 255, 122, 54, 6, 255, 114, 46, 3, 255, 106, 40, 2, 255, 105, 38, 3, 255, 105, 38, 2, 255, 95, 38, 0, 255, 108, 43, 7, 255, 113, 40, 7, 255, 107, 39, 4, 255, 104, 43, 3, 255, 106, 43, 2, 255, 108, 41, 2, 255, 109, 42, 2, 255, 113, 45, 4, 255, 115, 43, 5, 255, 114, 43, 5, 255, 113, 46, 4, 255, 115, 46, 3, 255, 113, 46, 2, 255, 116, 40, 5, 255, 108, 40, 3, 255, 110, 45, 2, 255, 95, 35, 3, 255, 92, 32, 2, 255, 109, 41, 1, 255, 120, 44, 3, 255, 128, 48, 4, 255, 129, 52, 1, 255, 131, 55, 1, 255, 128, 51, 3, 255, 120, 48, 1, 255, 126, 55, 0, 255, 127, 54, 0, 255, 134, 53, 4, 255, 132, 50, 2, 255, 126, 51, 1, 255, 126, 49, 3, 255, 122, 45, 5, 255, 116, 43, 5, 255, 115, 46, 4, 255, 125, 50, 4, 255, 128, 46, 0, 255, 127, 45, 1, 255, 124, 46, 4, 255, 126, 50, 3, 255, 121, 47, 5, 255, 119, 45, 1, 255, 129, 55, 7, 255, 113, 43, 6, 255, 111, 45, 4, 255, 125, 53, 3, 255, 124, 45, 3, 255, 121, 37, 2, 255, 123, 41, 5, 255, 123, 55, 3, 255, 144, 66, 4, 255, 156, 72, 2, 255, 162, 75, 3, 255, 163, 80, 4, 255, 164, 77, 0, 255, 157, 68, 0, 255, 141, 57, 0, 255, 130, 51, 2, 255, 124, 46, 4, 255, 102, 30, 3, 255, 87, 23, 2, 255, 84, 28, 0, 255, 85, 30, 1, 255, 79, 27, 3, 255, 84, 26, 5, 255, 85, 23, 3, 255, 70, 19, 2, 255, 66, 17, 4, 255, 76, 25, 3, 255, 76, 26, 0, 255, 74, 24, 4, 255, 74, 24, 4, 255, 79, 24, 1, 255, 79, 32, 0, 255, 87, 37, 2, 255, 91, 32, 2, 255, 83, 27, 0, 255, 71, 22, 1, 255, 76, 23, 5, 255, 82, 26, 6, 255, 84, 29, 1, 255, 89, 35, 4, 255, 85, 25, 2, 255, 76, 19, 0, 255, 76, 22, 4, 255, 77, 19, 2, 255, 83, 26, 3, 255, 80, 23, 1, 255, 79, 20, 4, 255, 78, 21, 6, 255, 86, 27, 3, 255, 84, 23, 3, 255, 82, 18, 1, 255, 14, 5, 1, 255, 11, 4, 2, 255, 3, 2, 2, 255, 0, 2, 1, 255, 2, 2, 0, 255, 3, 3, 1, 255, 4, 2, 1, 255, 5, 1, 1, 255, 6, 2, 0, 255, 7, 3, 0, 255, 9, 4, 2, 255, 6, 2, 1, 255, 12, 7, 6, 255, 18, 10, 9, 255, 18, 9, 8, 255, 18, 9, 9, 255, 17, 10, 7, 255, 15, 10, 6, 255, 15, 12, 5, 255, 16, 14, 8, 255, 14, 8, 4, 255, 20, 12, 6, 255, 18, 13, 4, 255, 17, 14, 3, 255, 23, 17, 5, 255, 26, 18, 7, 255, 28, 19, 13, 255, 25, 16, 6, 255, 22, 16, 7, 255, 22, 16, 16, 255, 29, 21, 14, 255, 38, 25, 16, 255, 34, 22, 14, 255, 43, 26, 10, 255, 51, 32, 9, 255, 46, 33, 16, 255, 40, 33, 12, 255, 43, 35, 9, 255, 53, 39, 9, 255, 55, 37, 15, 255, 51, 44, 5, 255, 48, 47, 0, 255, 73, 75, 5, 255, 118, 124, 15, 255, 110, 121, 15, 255, 112, 108, 16, 255, 98, 88, 2, 255, 101, 105, 12, 255, 176, 175, 65, 255, 205, 197, 99, 255, 205, 197, 50, 255, 164, 141, 5, 255, 96, 91, 11, 255, 97, 85, 7, 255, 85, 71, 4, 255, 73, 59, 8, 255, 76, 59, 3, 255, 79, 56, 2, 255, 113, 79, 6, 255, 161, 101, 3, 255, 158, 101, 1, 255, 134, 83, 7, 255, 124, 76, 11, 255, 118, 61, 4, 255, 102, 51, 2, 255, 81, 37, 2, 255, 74, 39, 3, 255, 70, 39, 2, 255, 67, 37, 3, 255, 66, 36, 2, 255, 63, 36, 2, 255, 62, 35, 6, 255, 56, 35, 6, 255, 58, 42, 3, 255, 56, 39, 3, 255, 56, 34, 4, 255, 111, 64, 10, 255, 155, 81, 8, 255, 127, 56, 6, 255, 74, 32, 3, 255, 63, 37, 5, 255, 118, 66, 3, 255, 167, 82, 4, 255, 165, 80, 5, 255, 148, 70, 6, 255, 76, 37, 8, 255, 68, 35, 7, 255, 109, 56, 2, 255, 152, 75, 7, 255, 151, 68, 3, 255, 150, 69, 10, 255, 159, 70, 4, 255, 153, 74, 3, 255, 121, 58, 11, 255, 112, 53, 5, 255, 134, 65, 4, 255, 153, 78, 5, 255, 163, 76, 4, 255, 156, 70, 0, 255, 155, 76, 1, 255, 166, 77, 1, 255, 164, 82, 4, 255, 128, 62, 4, 255, 101, 47, 3, 255, 92, 48, 8, 255, 109, 57, 7, 255, 138, 69, 4, 255, 142, 66, 7, 255, 136, 61, 10, 255, 134, 65, 4, 255, 148, 74, 9, 255, 132, 64, 5, 255, 85, 46, 2, 255, 82, 47, 0, 255, 92, 46, 1, 255, 86, 44, 9, 255, 91, 48, 8, 255, 95, 47, 3, 255, 97, 47, 4, 255, 93, 45, 2, 255, 91, 48, 2, 255, 99, 53, 0, 255, 118, 59, 6, 255, 109, 57, 5, 255, 106, 55, 4, 255, 106, 50, 3, 255, 98, 53, 1, 255, 97, 58, 2, 255, 98, 57, 4, 255, 97, 54, 3, 255, 101, 54, 4, 255, 103, 53, 2, 255, 101, 49, 0, 255, 102, 52, 1, 255, 104, 58, 6, 255, 100, 55, 6, 255, 101, 54, 6, 255, 105, 53, 5, 255, 105, 53, 3, 255, 103, 52, 3, 255, 101, 56, 10, 255, 100, 55, 8, 255, 105, 57, 3, 255, 99, 53, 3, 255, 102, 61, 1, 255, 104, 59, 2, 255, 100, 55, 3, 255, 105, 54, 6, 255, 108, 54, 1, 255, 124, 62, 3, 255, 125, 68, 4, 255, 106, 57, 6, 255, 99, 54, 5, 255, 100, 57, 6, 255, 100, 54, 6, 255, 88, 57, 9, 255, 110, 60, 11, 255, 137, 72, 13, 255, 149, 77, 8, 255, 99, 56, 9, 255, 89, 49, 11, 255, 98, 57, 2, 255, 114, 63, 9, 255, 139, 73, 4, 255, 154, 72, 8, 255, 148, 70, 3, 255, 149, 72, 4, 255, 143, 83, 2, 255, 159, 84, 12, 255, 163, 73, 5, 255, 147, 74, 2, 255, 134, 65, 10, 255, 135, 68, 3, 255, 151, 80, 9, 255, 168, 91, 5, 255, 178, 102, 1, 255, 189, 103, 10, 255, 182, 105, 13, 255, 194, 110, 6, 255, 192, 102, 8, 255, 187, 103, 6, 255, 187, 103, 11, 255, 192, 102, 10, 255, 191, 106, 7, 255, 188, 106, 19, 255, 190, 105, 6, 255, 190, 105, 3, 255, 189, 111, 2, 255, 198, 115, 11, 255, 206, 128, 15, 255, 203, 128, 13, 255, 202, 117, 12, 255, 199, 116, 15, 255, 203, 119, 9, 255, 211, 122, 3, 255, 209, 127, 14, 255, 211, 130, 8, 255, 214, 132, 6, 255, 203, 127, 8, 255, 196, 121, 4, 255, 204, 127, 8, 255, 211, 137, 6, 255, 214, 139, 6, 255, 216, 140, 15, 255, 218, 145, 7, 255, 217, 146, 1, 255, 218, 148, 6, 255, 217, 149, 3, 255, 220, 151, 10, 255, 219, 152, 7, 255, 217, 150, 5, 255, 217, 145, 11, 255, 217, 144, 10, 255, 217, 145, 12, 255, 215, 144, 10, 255, 211, 144, 1, 255, 214, 146, 14, 255, 214, 145, 8, 255, 212, 145, 5, 255, 198, 127, 11, 255, 191, 118, 12, 255, 213, 149, 18, 255, 228, 162, 7, 255, 216, 149, 5, 255, 206, 138, 12, 255, 216, 156, 18, 255, 214, 158, 4, 255, 193, 128, 10, 255, 184, 117, 10, 255, 201, 145, 7, 255, 216, 167, 6, 255, 221, 173, 10, 255, 221, 173, 9, 255, 219, 165, 3, 255, 216, 156, 4, 255, 207, 149, 1, 255, 205, 152, 3, 255, 211, 162, 7, 255, 210, 163, 7, 255, 215, 172, 0, 255, 211, 163, 10, 255, 203, 152, 8, 255, 212, 160, 0, 255, 212, 168, 2, 255, 211, 168, 2, 255, 213, 167, 10, 255, 216, 177, 6, 255, 211, 175, 0, 255, 211, 169, 2, 255, 206, 160, 6, 255, 209, 160, 9, 255, 214, 167, 2, 255, 205, 160, 6, 255, 208, 166, 4, 255, 219, 174, 5, 255, 187, 132, 7, 255, 178, 123, 11, 255, 201, 155, 15, 255, 197, 152, 7, 255, 203, 153, 5, 255, 204, 153, 8, 255, 200, 154, 6, 255, 204, 159, 6, 255, 200, 155, 1, 255, 200, 153, 4, 255, 201, 153, 2, 255, 202, 151, 8, 255, 201, 148, 8, 255, 204, 152, 3, 255, 205, 153, 6, 255, 203, 146, 6, 255, 203, 145, 3, 255, 205, 146, 10, 255, 202, 144, 7, 255, 199, 140, 10, 255, 199, 130, 8, 255, 197, 125, 13, 255, 193, 124, 15, 255, 195, 129, 10, 255, 193, 128, 2, 255, 191, 123, 2, 255, 191, 119, 4, 255, 191, 119, 6, 255, 189, 118, 13, 255, 178, 103, 5, 255, 178, 100, 3, 255, 182, 105, 7, 255, 178, 103, 4, 255, 176, 96, 8, 255, 176, 97, 1, 255, 176, 97, 3, 255, 153, 72, 2, 255, 150, 67, 1, 255, 163, 79, 2, 255, 162, 81, 0, 255, 161, 79, 2, 255, 159, 76, 5, 255, 148, 69, 1, 255, 133, 56, 2, 255, 124, 54, 7, 255, 119, 54, 4, 255, 124, 56, 3, 255, 132, 55, 8, 255, 112, 44, 2, 255, 101, 43, 6, 255, 101, 41, 5, 255, 102, 41, 3, 255, 100, 40, 3, 255, 107, 44, 6, 255, 106, 41, 5, 255, 104, 41, 4, 255, 104, 44, 1, 255, 104, 44, 1, 255, 104, 39, 4, 255, 113, 41, 4, 255, 115, 44, 1, 255, 113, 44, 4, 255, 113, 43, 3, 255, 116, 42, 4, 255, 114, 40, 5, 255, 115, 41, 6, 255, 113, 38, 6, 255, 108, 38, 4, 255, 102, 36, 3, 255, 95, 33, 3, 255, 85, 32, 1, 255, 95, 36, 1, 255, 120, 46, 4, 255, 132, 51, 5, 255, 127, 49, 1, 255, 130, 51, 5, 255, 130, 52, 4, 255, 131, 59, 3, 255, 148, 72, 3, 255, 150, 71, 5, 255, 141, 55, 2, 255, 131, 49, 2, 255, 123, 51, 0, 255, 123, 46, 3, 255, 128, 48, 3, 255, 124, 47, 3, 255, 122, 45, 6, 255, 123, 47, 5, 255, 124, 48, 5, 255, 118, 39, 2, 255, 115, 38, 2, 255, 102, 35, 1, 255, 105, 41, 5, 255, 115, 46, 3, 255, 113, 43, 1, 255, 114, 45, 4, 255, 117, 45, 5, 255, 129, 53, 4, 255, 126, 51, 2, 255, 128, 52, 4, 255, 136, 54, 3, 255, 138, 62, 1, 255, 163, 70, 5, 255, 168, 73, 4, 255, 162, 72, 2, 255, 162, 76, 1, 255, 168, 77, 0, 255, 164, 69, 1, 255, 146, 58, 0, 255, 131, 53, 2, 255, 116, 37, 3, 255, 94, 30, 1, 255, 88, 29, 4, 255, 82, 31, 2, 255, 83, 27, 0, 255, 80, 25, 2, 255, 83, 21, 3, 255, 80, 20, 1, 255, 71, 22, 1, 255, 73, 22, 3, 255, 78, 28, 6, 255, 83, 36, 4, 255, 90, 36, 5, 255, 91, 32, 4, 255, 94, 34, 4, 255, 91, 33, 3, 255, 88, 32, 2, 255, 83, 26, 2, 255, 78, 22, 4, 255, 64, 17, 1, 255, 66, 17, 4, 255, 75, 25, 5, 255, 83, 33, 0, 255, 88, 39, 2, 255, 81, 32, 1, 255, 77, 23, 1, 255, 75, 25, 4, 255, 72, 22, 1, 255, 75, 20, 0, 255, 69, 21, 0, 255, 65, 22, 3, 255, 65, 19, 2, 255, 72, 22, 4, 255, 74, 21, 3, 255, 81, 25, 6, 255, 15, 7, 3, 255, 9, 3, 2, 255, 3, 1, 2, 255, 0, 2, 1, 255, 1, 2, 0, 255, 4, 3, 1, 255, 6, 4, 2, 255, 9, 6, 4, 255, 6, 2, 1, 255, 8, 4, 0, 255, 6, 2, 0, 255, 7, 4, 1, 255, 5, 3, 1, 255, 16, 10, 7, 255, 20, 11, 12, 255, 18, 11, 13, 255, 17, 10, 8, 255, 17, 11, 5, 255, 17, 11, 7, 255, 16, 11, 8, 255, 13, 9, 3, 255, 17, 11, 4, 255, 20, 15, 5, 255, 20, 15, 4, 255, 27, 18, 3, 255, 26, 18, 0, 255, 24, 20, 5, 255, 25, 21, 14, 255, 22, 20, 12, 255, 26, 24, 12, 255, 29, 27, 9, 255, 28, 23, 9, 255, 32, 25, 13, 255, 42, 32, 14, 255, 46, 33, 12, 255, 40, 29, 14, 255, 42, 35, 13, 255, 43, 38, 10, 255, 47, 40, 9, 255, 50, 43, 7, 255, 48, 42, 8, 255, 62, 50, 3, 255, 84, 75, 8, 255, 79, 73, 2, 255, 73, 64, 6, 255, 71, 66, 7, 255, 73, 74, 7, 255, 80, 74, 2, 255, 66, 59, 0, 255, 70, 58, 0, 255, 70, 55, 2, 255, 67, 64, 11, 255, 79, 79, 11, 255, 75, 74, 1, 255, 71, 61, 1, 255, 73, 61, 1, 255, 73, 57, 4, 255, 69, 58, 8, 255, 129, 68, 7, 255, 143, 76, 6, 255, 142, 83, 0, 255, 126, 81, 5, 255, 105, 62, 3, 255, 86, 46, 8, 255, 83, 41, 6, 255, 68, 40, 5, 255, 61, 43, 2, 255, 63, 41, 6, 255, 63, 37, 7, 255, 69, 39, 4, 255, 59, 34, 1, 255, 52, 31, 6, 255, 69, 41, 5, 255, 88, 54, 10, 255, 55, 28, 2, 255, 124, 67, 10, 255, 174, 85, 0, 255, 165, 81, 5, 255, 124, 53, 7, 255, 67, 31, 5, 255, 95, 55, 4, 255, 162, 80, 5, 255, 165, 78, 9, 255, 162, 81, 3, 255, 149, 76, 0, 255, 144, 70, 4, 255, 155, 75, 7, 255, 161, 82, 10, 255, 162, 77, 4, 255, 164, 81, 5, 255, 167, 85, 1, 255, 166, 80, 2, 255, 173, 88, 5, 255, 171, 83, 0, 255, 182, 85, 7, 255, 180, 92, 6, 255, 177, 86, 4, 255, 171, 80, 5, 255, 167, 92, 4, 255, 170, 89, 3, 255, 173, 79, 7, 255, 176, 76, 3, 255, 170, 81, 2, 255, 163, 77, 4, 255, 156, 77, 5, 255, 164, 78, 5, 255, 168, 71, 3, 255, 166, 74, 3, 255, 169, 81, 1, 255, 167, 81, 1, 255, 164, 77, 3, 255, 152, 73, 4, 255, 119, 68, 5, 255, 106, 61, 2, 255, 104, 52, 6, 255, 94, 49, 2, 255, 128, 62, 9, 255, 147, 66, 7, 255, 139, 64, 2, 255, 131, 64, 3, 255, 134, 70, 7, 255, 144, 71, 7, 255, 146, 70, 5, 255, 111, 60, 5, 255, 95, 52, 7, 255, 99, 51, 3, 255, 103, 55, 2, 255, 103, 53, 3, 255, 114, 56, 3, 255, 118, 60, 2, 255, 123, 66, 5, 255, 129, 71, 12, 255, 119, 62, 3, 255, 134, 67, 9, 255, 116, 60, 4, 255, 101, 55, 1, 255, 107, 56, 7, 255, 108, 51, 4, 255, 110, 55, 4, 255, 104, 53, 3, 255, 106, 53, 5, 255, 99, 50, 1, 255, 100, 55, 6, 255, 104, 52, 11, 255, 103, 55, 5, 255, 105, 59, 5, 255, 105, 54, 3, 255, 102, 54, 5, 255, 108, 71, 8, 255, 160, 91, 7, 255, 152, 68, 10, 255, 98, 54, 6, 255, 90, 59, 4, 255, 94, 50, 8, 255, 113, 64, 6, 255, 147, 88, 9, 255, 175, 89, 5, 255, 169, 86, 0, 255, 170, 79, 8, 255, 142, 64, 11, 255, 113, 62, 4, 255, 136, 73, 11, 255, 156, 78, 17, 255, 160, 74, 11, 255, 154, 80, 7, 255, 153, 82, 12, 255, 139, 69, 7, 255, 150, 76, 4, 255, 150, 69, 6, 255, 139, 64, 5, 255, 140, 68, 8, 255, 150, 75, 9, 255, 160, 86, 6, 255, 172, 91, 19, 255, 179, 99, 14, 255, 187, 113, 6, 255, 194, 111, 7, 255, 196, 112, 3, 255, 190, 110, 3, 255, 192, 106, 10, 255, 192, 105, 2, 255, 187, 104, 9, 255, 198, 107, 17, 255, 205, 109, 6, 255, 201, 110, 11, 255, 198, 109, 3, 255, 192, 107, 10, 255, 198, 117, 12, 255, 201, 115, 20, 255, 205, 119, 13, 255, 210, 125, 10, 255, 210, 121, 8, 255, 205, 122, 12, 255, 208, 130, 8, 255, 206, 121, 6, 255, 211, 126, 16, 255, 213, 128, 17, 255, 211, 132, 10, 255, 211, 138, 10, 255, 212, 141, 2, 255, 217, 144, 10, 255, 218, 144, 9, 255, 212, 138, 6, 255, 213, 137, 17, 255, 219, 146, 13, 255, 224, 155, 10, 255, 223, 151, 5, 255, 219, 150, 0, 255, 220, 154, 7, 255, 220, 154, 6, 255, 215, 145, 7, 255, 215, 146, 9, 255, 217, 146, 10, 255, 220, 152, 1, 255, 215, 148, 0, 255, 215, 147, 6, 255, 218, 157, 3, 255, 205, 141, 6, 255, 209, 149, 10, 255, 210, 153, 12, 255, 207, 153, 3, 255, 221, 172, 5, 255, 226, 168, 1, 255, 212, 146, 4, 255, 211, 144, 10, 255, 217, 162, 8, 255, 214, 158, 6, 255, 191, 123, 10, 255, 183, 117, 13, 255, 202, 153, 14, 255, 215, 169, 5, 255, 225, 176, 1, 255, 223, 174, 8, 255, 212, 163, 2, 255, 200, 149, 8, 255, 202, 152, 6, 255, 199, 145, 11, 255, 213, 167, 7, 255, 213, 169, 4, 255, 219, 175, 2, 255, 206, 158, 13, 255, 189, 137, 11, 255, 198, 144, 9, 255, 210, 160, 7, 255, 212, 166, 2, 255, 210, 164, 1, 255, 215, 169, 2, 255, 220, 174, 3, 255, 217, 170, 6, 255, 208, 161, 4, 255, 208, 160, 3, 255, 208, 160, 1, 255, 200, 154, 5, 255, 210, 166, 7, 255, 217, 170, 6, 255, 193, 140, 6, 255, 188, 136, 19, 255, 198, 156, 2, 255, 195, 155, 1, 255, 200, 154, 1, 255, 201, 150, 3, 255, 202, 158, 2, 255, 202, 158, 5, 255, 201, 155, 9, 255, 199, 153, 5, 255, 200, 152, 10, 255, 201, 150, 9, 255, 201, 148, 15, 255, 207, 154, 9, 255, 204, 149, 3, 255, 201, 145, 0, 255, 203, 145, 9, 255, 205, 147, 8, 255, 201, 143, 3, 255, 192, 133, 8, 255, 191, 127, 8, 255, 192, 126, 7, 255, 191, 119, 3, 255, 197, 122, 5, 255, 197, 126, 8, 255, 191, 126, 7, 255, 188, 122, 7, 255, 189, 119, 10, 255, 185, 113, 12, 255, 178, 102, 7, 255, 177, 99, 6, 255, 181, 105, 7, 255, 178, 104, 4, 255, 178, 103, 0, 255, 172, 94, 0, 255, 169, 87, 5, 255, 163, 81, 6, 255, 150, 71, 5, 255, 147, 68, 7, 255, 151, 72, 5, 255, 156, 80, 4, 255, 153, 74, 0, 255, 153, 71, 3, 255, 143, 68, 4, 255, 127, 60, 8, 255, 123, 55, 15, 255, 126, 58, 2, 255, 116, 46, 0, 255, 111, 48, 6, 255, 103, 42, 6, 255, 103, 40, 4, 255, 100, 44, 2, 255, 104, 41, 4, 255, 100, 37, 4, 255, 97, 37, 3, 255, 95, 36, 1, 255, 97, 39, 3, 255, 98, 41, 3, 255, 100, 38, 0, 255, 112, 42, 5, 255, 111, 42, 3, 255, 105, 44, 1, 255, 108, 43, 3, 255, 107, 33, 2, 255, 112, 38, 4, 255, 111, 37, 3, 255, 108, 37, 5, 255, 105, 31, 0, 255, 102, 33, 6, 255, 94, 30, 3, 255, 82, 28, 2, 255, 88, 31, 4, 255, 106, 41, 5, 255, 118, 48, 1, 255, 117, 45, 1, 255, 126, 49, 3, 255, 147, 64, 3, 255, 162, 80, 5, 255, 164, 83, 3, 255, 154, 73, 1, 255, 137, 51, 2, 255, 126, 45, 4, 255, 120, 47, 2, 255, 121, 44, 3, 255, 121, 47, 3, 255, 120, 46, 2, 255, 121, 47, 5, 255, 120, 49, 3, 255, 113, 46, 1, 255, 105, 38, 1, 255, 100, 36, 3, 255, 95, 34, 6, 255, 102, 36, 7, 255, 111, 41, 3, 255, 117, 43, 3, 255, 115, 40, 2, 255, 112, 45, 4, 255, 122, 50, 3, 255, 118, 49, 4, 255, 108, 43, 6, 255, 105, 34, 2, 255, 126, 53, 5, 255, 157, 70, 2, 255, 160, 73, 0, 255, 163, 75, 2, 255, 166, 78, 1, 255, 167, 77, 2, 255, 160, 68, 5, 255, 141, 55, 4, 255, 126, 44, 3, 255, 109, 34, 5, 255, 92, 30, 0, 255, 84, 29, 1, 255, 76, 26, 0, 255, 80, 23, 1, 255, 86, 25, 3, 255, 80, 24, 4, 255, 70, 21, 2, 255, 67, 22, 0, 255, 75, 23, 1, 255, 76, 24, 1, 255, 88, 32, 1, 255, 107, 43, 2, 255, 102, 40, 1, 255, 90, 29, 3, 255, 87, 24, 2, 255, 80, 20, 1, 255, 71, 18, 2, 255, 73, 20, 5, 255, 69, 18, 3, 255, 65, 19, 4, 255, 69, 21, 3, 255, 86, 29, 3, 255, 95, 30, 5, 255, 89, 27, 7, 255, 82, 24, 4, 255, 81, 25, 1, 255, 77, 21, 1, 255, 77, 22, 5, 255, 71, 20, 7, 255, 70, 23, 5, 255, 72, 25, 3, 255, 73, 19, 3, 255, 72, 19, 0, 255, 74, 25, 2, 255, 15, 7, 5, 255, 9, 4, 1, 255, 5, 2, 0, 255, 1, 0, 0, 255, 4, 1, 1, 255, 8, 2, 2, 255, 6, 0, 0, 255, 7, 2, 0, 255, 11, 6, 2, 255, 9, 4, 1, 255, 9, 4, 1, 255, 10, 5, 3, 255, 9, 4, 1, 255, 10, 8, 3, 255, 15, 10, 12, 255, 16, 7, 12, 255, 17, 10, 8, 255, 16, 10, 5, 255, 16, 12, 11, 255, 17, 11, 6, 255, 18, 11, 3, 255, 21, 15, 6, 255, 20, 13, 6, 255, 23, 13, 6, 255, 23, 12, 3, 255, 28, 19, 4, 255, 24, 20, 2, 255, 22, 23, 7, 255, 22, 20, 7, 255, 32, 23, 8, 255, 32, 22, 4, 255, 35, 31, 9, 255, 39, 32, 6, 255, 35, 28, 7, 255, 42, 33, 20, 255, 45, 33, 18, 255, 48, 39, 13, 255, 48, 44, 12, 255, 46, 45, 7, 255, 45, 44, 4, 255, 53, 43, 9, 255, 74, 57, 3, 255, 77, 67, 3, 255, 70, 66, 4, 255, 68, 60, 8, 255, 68, 67, 11, 255, 70, 66, 3, 255, 73, 65, 7, 255, 75, 69, 4, 255, 76, 70, 8, 255, 75, 69, 1, 255, 70, 70, 6, 255, 73, 74, 6, 255, 70, 66, 3, 255, 69, 57, 0, 255, 76, 54, 0, 255, 73, 53, 3, 255, 66, 47, 0, 255, 102, 60, 6, 255, 123, 65, 4, 255, 121, 68, 8, 255, 104, 55, 3, 255, 87, 47, 3, 255, 99, 46, 5, 255, 71, 40, 6, 255, 70, 43, 5, 255, 60, 32, 1, 255, 54, 32, 5, 255, 89, 54, 6, 255, 61, 39, 2, 255, 40, 36, 5, 255, 72, 49, 6, 255, 134, 69, 8, 255, 140, 68, 7, 255, 102, 59, 8, 255, 157, 81, 5, 255, 159, 79, 1, 255, 160, 84, 3, 255, 154, 81, 7, 255, 156, 72, 11, 255, 164, 85, 3, 255, 169, 87, 1, 255, 169, 84, 5, 255, 170, 82, 8, 255, 176, 88, 6, 255, 180, 91, 0, 255, 179, 91, 1, 255, 181, 90, 5, 255, 181, 90, 4, 255, 183, 90, 2, 255, 182, 91, 6, 255, 182, 89, 8, 255, 176, 86, 5, 255, 181, 97, 3, 255, 184, 89, 0, 255, 182, 82, 0, 255, 184, 89, 1, 255, 182, 87, 3, 255, 188, 93, 5, 255, 186, 98, 4, 255, 186, 94, 6, 255, 177, 90, 0, 255, 176, 87, 3, 255, 177, 86, 3, 255, 176, 86, 1, 255, 171, 81, 2, 255, 168, 80, 7, 255, 166, 79, 6, 255, 165, 81, 3, 255, 165, 77, 1, 255, 163, 76, 4, 255, 155, 68, 4, 255, 151, 64, 1, 255, 153, 70, 5, 255, 148, 67, 3, 255, 136, 61, 5, 255, 143, 69, 3, 255, 141, 66, 0, 255, 146, 66, 3, 255, 163, 77, 7, 255, 165, 76, 4, 255, 158, 72, 3, 255, 147, 75, 2, 255, 132, 63, 5, 255, 123, 58, 9, 255, 109, 60, 7, 255, 110, 57, 3, 255, 111, 50, 3, 255, 127, 58, 3, 255, 138, 62, 4, 255, 135, 63, 3, 255, 138, 62, 5, 255, 136, 65, 7, 255, 147, 69, 6, 255, 111, 54, 2, 255, 94, 50, 7, 255, 96, 52, 4, 255, 101, 55, 1, 255, 98, 52, 5, 255, 103, 55, 2, 255, 120, 66, 4, 255, 119, 68, 7, 255, 108, 56, 6, 255, 102, 48, 7, 255, 105, 57, 5, 255, 101, 51, 3, 255, 110, 54, 6, 255, 129, 77, 9, 255, 164, 98, 7, 255, 175, 93, 4, 255, 131, 62, 3, 255, 98, 55, 6, 255, 106, 67, 8, 255, 131, 73, 10, 255, 168, 85, 6, 255, 175, 80, 7, 255, 167, 75, 5, 255, 166, 82, 7, 255, 159, 78, 14, 255, 160, 79, 11, 255, 164, 91, 12, 255, 170, 86, 10, 255, 175, 93, 9, 255, 171, 94, 3, 255, 178, 97, 7, 255, 172, 90, 13, 255, 142, 67, 4, 255, 133, 62, 10, 255, 144, 73, 11, 255, 155, 85, 9, 255, 163, 89, 5, 255, 178, 100, 7, 255, 184, 104, 9, 255, 190, 106, 14, 255, 197, 112, 8, 255, 198, 111, 6, 255, 197, 107, 8, 255, 198, 108, 10, 255, 196, 107, 6, 255, 195, 108, 4, 255, 195, 107, 8, 255, 203, 112, 10, 255, 199, 107, 11, 255, 194, 101, 10, 255, 200, 111, 6, 255, 199, 112, 11, 255, 205, 120, 15, 255, 201, 114, 9, 255, 198, 115, 5, 255, 208, 127, 9, 255, 210, 129, 9, 255, 212, 133, 8, 255, 212, 132, 10, 255, 218, 136, 12, 255, 201, 117, 10, 255, 205, 120, 7, 255, 214, 135, 8, 255, 214, 139, 9, 255, 216, 142, 10, 255, 220, 148, 4, 255, 220, 148, 5, 255, 221, 149, 6, 255, 216, 144, 3, 255, 218, 141, 13, 255, 222, 150, 6, 255, 218, 153, 6, 255, 221, 149, 10, 255, 218, 144, 7, 255, 222, 155, 5, 255, 223, 161, 5, 255, 219, 151, 8, 255, 216, 150, 9, 255, 212, 147, 4, 255, 212, 145, 8, 255, 206, 138, 6, 255, 213, 148, 14, 255, 224, 166, 2, 255, 219, 163, 10, 255, 217, 164, 7, 255, 223, 168, 7, 255, 226, 169, 10, 255, 227, 168, 10, 255, 218, 159, 4, 255, 209, 150, 4, 255, 216, 163, 5, 255, 223, 169, 9, 255, 216, 160, 5, 255, 169, 104, 10, 255, 182, 127, 7, 255, 219, 181, 18, 255, 218, 179, 4, 255, 217, 173, 4, 255, 224, 177, 7, 255, 216, 169, 4, 255, 213, 168, 4, 255, 218, 174, 10, 255, 207, 162, 2, 255, 210, 169, 7, 255, 218, 175, 4, 255, 217, 173, 0, 255, 221, 177, 4, 255, 188, 140, 5, 255, 182, 132, 9, 255, 209, 168, 3, 255, 214, 173, 1, 255, 204, 160, 2, 255, 207, 161, 0, 255, 218, 172, 0, 255, 213, 166, 3, 255, 212, 165, 1, 255, 212, 162, 5, 255, 203, 155, 5, 255, 206, 159, 14, 255, 211, 167, 9, 255, 210, 165, 3, 255, 191, 139, 4, 255, 200, 152, 11, 255, 201, 159, 4, 255, 197, 154, 9, 255, 201, 154, 3, 255, 202, 151, 3, 255, 204, 158, 8, 255, 202, 158, 8, 255, 201, 156, 1, 255, 201, 155, 2, 255, 200, 152, 8, 255, 199, 150, 6, 255, 203, 151, 14, 255, 205, 153, 7, 255, 203, 147, 2, 255, 199, 142, 4, 255, 203, 144, 3, 255, 203, 146, 1, 255, 200, 142, 2, 255, 195, 136, 5, 255, 198, 135, 10, 255, 197, 132, 10, 255, 193, 125, 5, 255, 196, 127, 6, 255, 194, 126, 5, 255, 191, 126, 4, 255, 192, 129, 8, 255, 186, 119, 13, 255, 180, 107, 2, 255, 182, 108, 4, 255, 185, 113, 9, 255, 184, 114, 7, 255, 179, 108, 6, 255, 177, 100, 2, 255, 164, 85, 4, 255, 160, 79, 3, 255, 167, 87, 0, 255, 161, 81, 8, 255, 146, 72, 7, 255, 152, 76, 4, 255, 150, 71, 2, 255, 150, 72, 4, 255, 150, 73, 8, 255, 142, 65, 3, 255, 142, 67, 2, 255, 134, 60, 8, 255, 122, 57, 4, 255, 114, 50, 6, 255, 110, 47, 5, 255, 106, 42, 6, 255, 105, 43, 6, 255, 101, 42, 3, 255, 99, 36, 2, 255, 100, 38, 1, 255, 96, 37, 4, 255, 90, 31, 4, 255, 96, 33, 1, 255, 100, 37, 1, 255, 100, 37, 2, 255, 104, 40, 3, 255, 105, 42, 2, 255, 104, 41, 2, 255, 105, 39, 4, 255, 107, 39, 3, 255, 110, 40, 2, 255, 99, 33, 1, 255, 102, 35, 3, 255, 101, 31, 2, 255, 103, 32, 2, 255, 102, 35, 5, 255, 102, 35, 9, 255, 94, 31, 6, 255, 88, 32, 0, 255, 109, 46, 3, 255, 115, 45, 2, 255, 131, 56, 1, 255, 161, 78, 2, 255, 162, 79, 2, 255, 164, 76, 2, 255, 152, 69, 3, 255, 129, 50, 2, 255, 120, 45, 5, 255, 116, 44, 1, 255, 117, 45, 2, 255, 120, 47, 1, 255, 120, 44, 2, 255, 113, 35, 4, 255, 106, 32, 5, 255, 101, 32, 4, 255, 105, 37, 5, 255, 104, 36, 1, 255, 106, 39, 3, 255, 111, 45, 3, 255, 118, 45, 6, 255, 118, 42, 5, 255, 110, 38, 2, 255, 106, 41, 2, 255, 117, 46, 7, 255, 117, 37, 0, 255, 100, 32, 5, 255, 80, 20, 3, 255, 111, 35, 4, 255, 141, 57, 3, 255, 157, 73, 1, 255, 166, 71, 3, 255, 164, 70, 5, 255, 164, 71, 3, 255, 155, 65, 0, 255, 133, 52, 7, 255, 117, 33, 6, 255, 101, 29, 1, 255, 93, 27, 1, 255, 87, 29, 3, 255, 78, 22, 0, 255, 78, 23, 3, 255, 81, 22, 4, 255, 76, 22, 2, 255, 74, 25, 2, 255, 77, 25, 2, 255, 80, 26, 5, 255, 76, 25, 1, 255, 91, 32, 1, 255, 108, 44, 6, 255, 88, 30, 2, 255, 67, 14, 7, 255, 75, 22, 6, 255, 79, 20, 2, 255, 71, 16, 6, 255, 62, 15, 3, 255, 75, 20, 1, 255, 72, 21, 2, 255, 77, 27, 5, 255, 82, 26, 2, 255, 84, 25, 3, 255, 82, 24, 2, 255, 73, 24, 3, 255, 70, 20, 2, 255, 77, 21, 2, 255, 81, 23, 5, 255, 81, 21, 3, 255, 85, 21, 3, 255, 84, 21, 2, 255, 77, 26, 4, 255, 79, 24, 2, 255, 77, 21, 0, 255, 17, 6, 4, 255, 14, 7, 3, 255, 7, 3, 1, 255, 5, 2, 1, 255, 5, 1, 0, 255, 7, 1, 1, 255, 6, 1, 1, 255, 7, 2, 2, 255, 8, 4, 1, 255, 9, 4, 1, 255, 8, 3, 0, 255, 10, 5, 2, 255, 11, 7, 3, 255, 10, 6, 3, 255, 13, 8, 4, 255, 15, 12, 6, 255, 15, 12, 7, 255, 15, 12, 8, 255, 15, 12, 9, 255, 18, 13, 7, 255, 20, 14, 8, 255, 22, 15, 7, 255, 22, 13, 6, 255, 26, 16, 10, 255, 26, 16, 7, 255, 26, 18, 3, 255, 29, 19, 3, 255, 29, 21, 9, 255, 32, 22, 8, 255, 38, 22, 8, 255, 44, 30, 13, 255, 37, 29, 10, 255, 35, 31, 11, 255, 40, 36, 2, 255, 46, 40, 8, 255, 47, 44, 10, 255, 44, 40, 9, 255, 50, 39, 11, 255, 54, 46, 12, 255, 48, 45, 6, 255, 58, 51, 6, 255, 78, 64, 11, 255, 70, 57, 7, 255, 67, 60, 6, 255, 72, 64, 2, 255, 74, 63, 5, 255, 66, 61, 2, 255, 67, 62, 10, 255, 75, 67, 11, 255, 70, 61, 2, 255, 71, 63, 4, 255, 70, 67, 10, 255, 80, 69, 9, 255, 77, 61, 7, 255, 67, 56, 2, 255, 75, 52, 5, 255, 69, 50, 1, 255, 69, 47, 2, 255, 70, 49, 7, 255, 87, 56, 7, 255, 103, 54, 6, 255, 101, 48, 2, 255, 90, 44, 6, 255, 79, 37, 2, 255, 77, 44, 9, 255, 82, 46, 8, 255, 60, 36, 3, 255, 105, 68, 4, 255, 130, 77, 1, 255, 112, 62, 5, 255, 127, 71, 12, 255, 162, 80, 5, 255, 167, 86, 5, 255, 162, 82, 7, 255, 172, 85, 3, 255, 171, 84, 1, 255, 165, 90, 8, 255, 167, 88, 5, 255, 175, 88, 0, 255, 185, 89, 0, 255, 181, 87, 5, 255, 178, 90, 3, 255, 179, 89, 1, 255, 179, 88, 5, 255, 181, 90, 5, 255, 180, 91, 5, 255, 182, 93, 4, 255, 184, 94, 1, 255, 186, 93, 1, 255, 186, 95, 8, 255, 189, 93, 7, 255, 189, 101, 6, 255, 217, 134, 18, 255, 213, 127, 20, 255, 206, 150, 89, 255, 218, 165, 54, 255, 207, 132, 13, 255, 209, 143, 17, 255, 201, 118, 25, 255, 197, 96, 7, 255, 189, 93, 0, 255, 185, 93, 1, 255, 181, 93, 2, 255, 181, 90, 0, 255, 183, 91, 4, 255, 179, 87, 2, 255, 177, 87, 3, 255, 174, 86, 2, 255, 175, 87, 1, 255, 179, 84, 2, 255, 174, 79, 2, 255, 164, 73, 0, 255, 160, 72, 1, 255, 158, 72, 3, 255, 152, 69, 4, 255, 142, 56, 4, 255, 133, 60, 3, 255, 143, 65, 6, 255, 162, 69, 6, 255, 163, 77, 4, 255, 160, 79, 3, 255, 160, 71, 0, 255, 153, 65, 5, 255, 148, 65, 4, 255, 147, 68, 2, 255, 134, 66, 7, 255, 126, 56, 3, 255, 137, 62, 7, 255, 136, 61, 2, 255, 133, 59, 4, 255, 136, 61, 2, 255, 147, 65, 0, 255, 147, 71, 3, 255, 144, 63, 7, 255, 117, 53, 3, 255, 105, 48, 7, 255, 105, 52, 17, 255, 100, 52, 3, 255, 114, 60, 7, 255, 137, 75, 12, 255, 151, 76, 11, 255, 166, 79, 4, 255, 157, 82, 2, 255, 141, 71, 0, 255, 106, 52, 5, 255, 102, 56, 7, 255, 142, 74, 2, 255, 169, 82, 9, 255, 170, 69, 2, 255, 166, 80, 4, 255, 144, 75, 9, 255, 133, 63, 7, 255, 148, 72, 2, 255, 168, 82, 6, 255, 149, 67, 5, 255, 133, 58, 5, 255, 145, 66, 5, 255, 161, 76, 9, 255, 170, 88, 6, 255, 176, 91, 3, 255, 178, 93, 5, 255, 181, 91, 10, 255, 178, 89, 7, 255, 183, 101, 9, 255, 184, 96, 4, 255, 180, 94, 10, 255, 169, 86, 11, 255, 174, 94, 10, 255, 187, 106, 7, 255, 194, 111, 9, 255, 197, 109, 14, 255, 197, 106, 7, 255, 201, 111, 9, 255, 197, 111, 1, 255, 198, 109, 6, 255, 201, 110, 10, 255, 200, 106, 5, 255, 202, 110, 7, 255, 201, 109, 7, 255, 196, 104, 4, 255, 199, 109, 14, 255, 200, 110, 12, 255, 190, 100, 10, 255, 192, 104, 8, 255, 199, 113, 14, 255, 205, 120, 15, 255, 199, 112, 9, 255, 202, 119, 6, 255, 209, 132, 7, 255, 211, 137, 13, 255, 210, 135, 8, 255, 212, 138, 11, 255, 214, 136, 12, 255, 214, 139, 2, 255, 199, 120, 6, 255, 192, 114, 13, 255, 206, 133, 5, 255, 218, 149, 5, 255, 215, 147, 4, 255, 217, 148, 8, 255, 219, 150, 6, 255, 222, 153, 0, 255, 218, 146, 9, 255, 214, 138, 9, 255, 217, 141, 6, 255, 218, 144, 6, 255, 215, 142, 10, 255, 215, 146, 3, 255, 226, 158, 2, 255, 223, 162, 2, 255, 218, 164, 8, 255, 219, 158, 6, 255, 215, 150, 7, 255, 215, 150, 10, 255, 214, 151, 6, 255, 217, 158, 9, 255, 225, 171, 6, 255, 227, 171, 6, 255, 220, 153, 14, 255, 216, 152, 6, 255, 223, 164, 2, 255, 223, 167, 9, 255, 214, 159, 13, 255, 210, 157, 10, 255, 217, 172, 1, 255, 227, 169, 2, 255, 223, 170, 7, 255, 188, 143, 22, 255, 186, 138, 23, 255, 227, 180, 19, 255, 224, 179, 8, 255, 221, 176, 4, 255, 223, 178, 1, 255, 221, 175, 1, 255, 213, 168, 3, 255, 220, 177, 5, 255, 221, 178, 4, 255, 216, 173, 10, 255, 218, 173, 2, 255, 215, 170, 4, 255, 211, 167, 4, 255, 206, 164, 1, 255, 210, 168, 1, 255, 209, 167, 4, 255, 215, 173, 2, 255, 207, 159, 9, 255, 195, 143, 8, 255, 212, 164, 1, 255, 215, 168, 0, 255, 206, 158, 4, 255, 201, 150, 5, 255, 204, 156, 5, 255, 211, 167, 3, 255, 217, 175, 6, 255, 210, 167, 2, 255, 191, 141, 9, 255, 198, 147, 5, 255, 203, 160, 5, 255, 197, 157, 5, 255, 200, 154, 10, 255, 199, 150, 0, 255, 202, 153, 5, 255, 203, 156, 12, 255, 200, 155, 6, 255, 199, 154, 5, 255, 200, 152, 7, 255, 202, 152, 13, 255, 203, 155, 11, 255, 203, 153, 6, 255, 200, 147, 3, 255, 202, 146, 10, 255, 203, 147, 9, 255, 204, 149, 5, 255, 200, 144, 0, 255, 198, 141, 1, 255, 200, 140, 5, 255, 197, 134, 4, 255, 197, 132, 9, 255, 197, 130, 8, 255, 191, 125, 2, 255, 190, 125, 1, 255, 189, 125, 3, 255, 183, 116, 9, 255, 178, 105, 6, 255, 182, 108, 9, 255, 184, 109, 5, 255, 179, 104, 0, 255, 176, 96, 4, 255, 173, 90, 3, 255, 165, 84, 5, 255, 166, 88, 6, 255, 166, 90, 1, 255, 168, 89, 3, 255, 158, 76, 2, 255, 161, 80, 3, 255, 157, 75, 0, 255, 158, 76, 7, 255, 148, 69, 3, 255, 141, 67, 4, 255, 141, 70, 11, 255, 128, 55, 2, 255, 135, 60, 7, 255, 131, 65, 5, 255, 116, 54, 5, 255, 109, 48, 7, 255, 102, 39, 1, 255, 98, 37, 1, 255, 96, 40, 3, 255, 95, 39, 0, 255, 95, 33, 1, 255, 99, 34, 3, 255, 105, 37, 2, 255, 105, 39, 3, 255, 100, 38, 4, 255, 102, 40, 8, 255, 103, 40, 3, 255, 106, 39, 2, 255, 109, 38, 3, 255, 105, 40, 2, 255, 101, 44, 3, 255, 101, 39, 3, 255, 103, 39, 4, 255, 97, 35, 2, 255, 100, 35, 3, 255, 104, 34, 2, 255, 111, 35, 8, 255, 102, 36, 3, 255, 90, 31, 0, 255, 94, 32, 2, 255, 124, 55, 7, 255, 152, 76, 4, 255, 154, 75, 1, 255, 156, 78, 4, 255, 151, 69, 2, 255, 132, 52, 5, 255, 117, 40, 5, 255, 117, 41, 5, 255, 115, 39, 4, 255, 116, 40, 3, 255, 120, 43, 3, 255, 118, 40, 3, 255, 109, 33, 3, 255, 99, 34, 4, 255, 100, 39, 4, 255, 110, 39, 3, 255, 108, 35, 1, 255, 111, 38, 7, 255, 119, 45, 6, 255, 116, 41, 5, 255, 107, 36, 1, 255, 105, 36, 2, 255, 105, 37, 1, 255, 115, 41, 1, 255, 109, 36, 1, 255, 89, 30, 3, 255, 82, 26, 6, 255, 103, 30, 3, 255, 117, 39, 2, 255, 141, 62, 2, 255, 162, 73, 2, 255, 158, 71, 3, 255, 150, 63, 4, 255, 139, 58, 1, 255, 125, 55, 5, 255, 107, 35, 3, 255, 100, 27, 3, 255, 93, 25, 2, 255, 83, 21, 0, 255, 78, 22, 1, 255, 81, 29, 5, 255, 78, 27, 1, 255, 84, 29, 1, 255, 84, 25, 0, 255, 85, 24, 0, 255, 89, 31, 6, 255, 91, 34, 4, 255, 97, 41, 3, 255, 99, 40, 2, 255, 80, 24, 1, 255, 62, 17, 4, 255, 72, 22, 3, 255, 73, 22, 2, 255, 63, 17, 2, 255, 65, 21, 0, 255, 73, 25, 2, 255, 71, 21, 1, 255, 81, 31, 6, 255, 76, 28, 2, 255, 68, 20, 0, 255, 72, 24, 0, 255, 65, 19, 4, 255, 66, 16, 3, 255, 77, 21, 1, 255, 80, 25, 1, 255, 79, 24, 1, 255, 77, 22, 0, 255, 76, 22, 1, 255, 77, 24, 3, 255, 82, 25, 2, 255, 82, 23, 1, 255, 18, 8, 6, 255, 14, 7, 4, 255, 5, 0, 0, 255, 6, 2, 2, 255, 6, 2, 1, 255, 6, 1, 1, 255, 8, 3, 3, 255, 8, 4, 3, 255, 6, 2, 0, 255, 8, 3, 0, 255, 11, 5, 1, 255, 9, 4, 0, 255, 10, 4, 1, 255, 12, 3, 2, 255, 10, 4, 2, 255, 15, 12, 8, 255, 19, 15, 14, 255, 15, 11, 8, 255, 19, 13, 9, 255, 14, 13, 6, 255, 18, 17, 8, 255, 20, 16, 7, 255, 21, 16, 7, 255, 22, 18, 9, 255, 23, 21, 9, 255, 21, 20, 7, 255, 25, 21, 9, 255, 28, 23, 11, 255, 33, 25, 13, 255, 35, 26, 10, 255, 35, 28, 10, 255, 31, 29, 11, 255, 31, 30, 22, 255, 38, 34, 12, 255, 44, 36, 16, 255, 47, 41, 11, 255, 47, 38, 16, 255, 51, 40, 12, 255, 57, 49, 7, 255, 53, 46, 9, 255, 68, 59, 7, 255, 73, 62, 11, 255, 65, 56, 9, 255, 62, 55, 13, 255, 67, 61, 2, 255, 65, 57, 6, 255, 64, 64, 20, 255, 70, 72, 17, 255, 72, 64, 11, 255, 72, 58, 3, 255, 70, 57, 9, 255, 70, 65, 15, 255, 82, 69, 12, 255, 69, 63, 2, 255, 66, 55, 1, 255, 66, 52, 1, 255, 67, 46, 1, 255, 62, 45, 0, 255, 79, 51, 4, 255, 76, 47, 4, 255, 81, 54, 4, 255, 113, 59, 11, 255, 86, 42, 9, 255, 93, 53, 7, 255, 140, 79, 6, 255, 138, 62, 9, 255, 139, 72, 10, 255, 166, 80, 3, 255, 169, 78, 6, 255, 172, 84, 3, 255, 174, 89, 2, 255, 172, 93, 0, 255, 173, 87, 3, 255, 180, 92, 5, 255, 177, 90, 8, 255, 176, 91, 5, 255, 176, 91, 3, 255, 179, 92, 4, 255, 178, 90, 3, 255, 175, 88, 8, 255, 177, 84, 4, 255, 177, 81, 2, 255, 174, 84, 0, 255, 180, 85, 1, 255, 182, 86, 3, 255, 180, 88, 7, 255, 181, 92, 4, 255, 187, 98, 3, 255, 187, 99, 2, 255, 184, 98, 4, 255, 188, 91, 3, 255, 197, 103, 3, 255, 207, 122, 3, 255, 207, 111, 6, 255, 209, 122, 32, 255, 209, 137, 25, 255, 208, 131, 12, 255, 224, 158, 12, 255, 208, 136, 16, 255, 185, 88, 1, 255, 190, 96, 6, 255, 188, 93, 4, 255, 188, 96, 5, 255, 190, 96, 3, 255, 186, 90, 5, 255, 186, 90, 5, 255, 184, 90, 1, 255, 185, 94, 1, 255, 183, 94, 3, 255, 179, 89, 5, 255, 171, 80, 1, 255, 172, 81, 4, 255, 173, 86, 8, 255, 159, 71, 2, 255, 145, 55, 4, 255, 150, 64, 4, 255, 162, 73, 6, 255, 165, 72, 5, 255, 163, 74, 3, 255, 164, 78, 1, 255, 162, 73, 3, 255, 163, 69, 9, 255, 156, 72, 3, 255, 155, 76, 7, 255, 159, 72, 10, 255, 158, 76, 5, 255, 156, 75, 4, 255, 156, 78, 5, 255, 155, 73, 7, 255, 152, 66, 1, 255, 157, 73, 5, 255, 157, 69, 3, 255, 153, 68, 7, 255, 148, 64, 5, 255, 139, 64, 9, 255, 145, 73, 4, 255, 142, 71, 7, 255, 134, 65, 8, 255, 153, 71, 7, 255, 166, 75, 2, 255, 162, 73, 2, 255, 162, 76, 4, 255, 159, 74, 10, 255, 146, 62, 10, 255, 135, 58, 6, 255, 142, 71, 1, 255, 154, 71, 7, 255, 151, 69, 5, 255, 152, 66, 6, 255, 141, 60, 4, 255, 137, 60, 4, 255, 142, 69, 11, 255, 134, 65, 9, 255, 130, 60, 6, 255, 122, 61, 3, 255, 129, 70, 14, 255, 153, 82, 10, 255, 171, 90, 6, 255, 174, 91, 8, 255, 174, 90, 17, 255, 186, 96, 13, 255, 187, 100, 6, 255, 183, 98, 10, 255, 179, 98, 9, 255, 177, 91, 12, 255, 186, 101, 13, 255, 196, 111, 7, 255, 199, 110, 8, 255, 195, 108, 3, 255, 194, 105, 6, 255, 198, 108, 5, 255, 190, 107, 2, 255, 198, 111, 19, 255, 199, 113, 5, 255, 198, 111, 2, 255, 198, 108, 11, 255, 203, 114, 10, 255, 204, 117, 1, 255, 198, 111, 5, 255, 199, 109, 12, 255, 198, 107, 18, 255, 194, 107, 10, 255, 191, 105, 15, 255, 194, 113, 4, 255, 206, 124, 14, 255, 204, 119, 7, 255, 195, 106, 7, 255, 200, 119, 14, 255, 211, 134, 18, 255, 211, 137, 11, 255, 213, 140, 4, 255, 214, 140, 9, 255, 215, 141, 13, 255, 210, 139, 10, 255, 206, 134, 26, 255, 202, 135, 12, 255, 204, 139, 9, 255, 214, 149, 15, 255, 218, 150, 12, 255, 220, 153, 12, 255, 220, 154, 10, 255, 219, 154, 3, 255, 213, 144, 13, 255, 203, 136, 6, 255, 207, 136, 8, 255, 218, 138, 8, 255, 211, 142, 4, 255, 211, 152, 0, 255, 220, 166, 4, 255, 225, 169, 11, 255, 225, 171, 5, 255, 227, 166, 5, 255, 213, 149, 1, 255, 207, 145, 0, 255, 217, 159, 1, 255, 227, 172, 6, 255, 230, 178, 13, 255, 226, 171, 0, 255, 212, 147, 5, 255, 214, 154, 6, 255, 222, 167, 3, 255, 217, 164, 3, 255, 217, 167, 5, 255, 213, 164, 9, 255, 218, 166, 7, 255, 224, 178, 16, 255, 220, 174, 8, 255, 225, 180, 10, 255, 221, 179, 9, 255, 220, 176, 2, 255, 219, 173, 8, 255, 221, 178, 6, 255, 221, 175, 1, 255, 220, 172, 10, 255, 214, 166, 13, 255, 216, 171, 4, 255, 216, 172, 5, 255, 215, 172, 2, 255, 213, 167, 3, 255, 207, 158, 13, 255, 199, 154, 6, 255, 212, 170, 10, 255, 217, 177, 8, 255, 212, 170, 5, 255, 207, 163, 7, 255, 203, 155, 6, 255, 206, 155, 8, 255, 211, 161, 7, 255, 210, 164, 8, 255, 201, 151, 18, 255, 196, 145, 13, 255, 199, 151, 3, 255, 206, 160, 3, 255, 214, 169, 2, 255, 214, 167, 3, 255, 191, 138, 9, 255, 188, 134, 14, 255, 202, 160, 3, 255, 202, 162, 5, 255, 199, 154, 12, 255, 199, 152, 2, 255, 200, 151, 1, 255, 201, 155, 7, 255, 201, 154, 11, 255, 199, 152, 10, 255, 201, 155, 4, 255, 200, 153, 10, 255, 201, 155, 3, 255, 204, 156, 9, 255, 202, 150, 5, 255, 202, 149, 7, 255, 200, 147, 10, 255, 203, 150, 10, 255, 202, 146, 8, 255, 202, 144, 17, 255, 201, 140, 18, 255, 196, 135, 9, 255, 195, 132, 4, 255, 192, 127, 5, 255, 188, 122, 5, 255, 187, 120, 5, 255, 186, 118, 3, 255, 184, 112, 7, 255, 180, 107, 5, 255, 179, 105, 5, 255, 177, 102, 3, 255, 175, 97, 0, 255, 176, 93, 3, 255, 172, 96, 4, 255, 170, 89, 2, 255, 172, 88, 4, 255, 169, 88, 7, 255, 162, 86, 3, 255, 151, 74, 5, 255, 145, 67, 9, 255, 153, 76, 3, 255, 151, 75, 1, 255, 152, 74, 3, 255, 152, 74, 0, 255, 136, 60, 2, 255, 128, 51, 6, 255, 145, 66, 5, 255, 135, 65, 0, 255, 120, 53, 0, 255, 112, 47, 1, 255, 97, 34, 1, 255, 94, 35, 3, 255, 102, 42, 6, 255, 99, 38, 1, 255, 105, 39, 4, 255, 107, 41, 6, 255, 101, 43, 3, 255, 101, 42, 3, 255, 100, 38, 4, 255, 102, 39, 6, 255, 107, 38, 3, 255, 109, 39, 1, 255, 103, 39, 1, 255, 98, 38, 0, 255, 98, 39, 2, 255, 104, 36, 2, 255, 102, 36, 2, 255, 97, 32, 1, 255, 99, 35, 3, 255, 99, 36, 3, 255, 100, 36, 2, 255, 97, 36, 0, 255, 94, 31, 4, 255, 89, 31, 10, 255, 122, 54, 1, 255, 158, 77, 1, 255, 156, 79, 3, 255, 151, 73, 2, 255, 132, 49, 2, 255, 122, 42, 5, 255, 115, 42, 2, 255, 111, 42, 1, 255, 104, 34, 3, 255, 100, 30, 2, 255, 112, 33, 6, 255, 107, 33, 1, 255, 102, 37, 1, 255, 105, 41, 2, 255, 107, 39, 2, 255, 105, 34, 5, 255, 102, 33, 4, 255, 104, 34, 1, 255, 113, 38, 2, 255, 110, 38, 4, 255, 103, 36, 1, 255, 105, 38, 7, 255, 109, 36, 5, 255, 108, 35, 0, 255, 95, 31, 3, 255, 76, 24, 2, 255, 83, 29, 4, 255, 106, 34, 6, 255, 108, 35, 3, 255, 126, 43, 4, 255, 149, 59, 3, 255, 151, 63, 2, 255, 143, 49, 3, 255, 130, 39, 0, 255, 118, 36, 1, 255, 104, 26, 4, 255, 97, 25, 4, 255, 87, 24, 3, 255, 77, 24, 2, 255, 77, 28, 3, 255, 83, 31, 2, 255, 92, 34, 4, 255, 88, 32, 2, 255, 95, 34, 4, 255, 97, 40, 5, 255, 96, 42, 1, 255, 104, 41, 2, 255, 113, 43, 3, 255, 95, 30, 1, 255, 66, 16, 1, 255, 65, 20, 2, 255, 68, 19, 2, 255, 56, 17, 2, 255, 54, 19, 4, 255, 75, 26, 2, 255, 78, 29, 4, 255, 84, 27, 7, 255, 79, 20, 1, 255, 82, 30, 6, 255, 76, 29, 4, 255, 76, 23, 5, 255, 76, 23, 2, 255, 80, 26, 3, 255, 82, 24, 2, 255, 84, 23, 5, 255, 81, 22, 8, 255, 73, 18, 3, 255, 72, 21, 3, 255, 71, 22, 1, 255, 80, 24, 2, 255, 84, 25, 1, 255, 15, 7, 4, 255, 14, 8, 5, 255, 2, 1, 0, 255, 3, 2, 1, 255, 2, 1, 0, 255, 4, 4, 1, 255, 6, 3, 2, 255, 6, 2, 1, 255, 7, 3, 1, 255, 7, 3, 0, 255, 10, 5, 1, 255, 11, 6, 2, 255, 9, 4, 1, 255, 11, 6, 4, 255, 7, 6, 0, 255, 6, 8, 4, 255, 14, 15, 20, 255, 13, 12, 14, 255, 18, 16, 4, 255, 21, 16, 7, 255, 20, 14, 5, 255, 24, 18, 8, 255, 23, 16, 8, 255, 25, 19, 10, 255, 22, 19, 7, 255, 25, 24, 7, 255, 27, 25, 6, 255, 29, 25, 9, 255, 31, 27, 9, 255, 37, 32, 11, 255, 33, 31, 9, 255, 34, 34, 13, 255, 41, 39, 6, 255, 39, 37, 11, 255, 44, 39, 14, 255, 57, 50, 6, 255, 58, 44, 12, 255, 53, 40, 14, 255, 56, 47, 7, 255, 63, 51, 9, 255, 75, 63, 11, 255, 66, 59, 2, 255, 64, 59, 3, 255, 63, 60, 8, 255, 60, 62, 8, 255, 63, 70, 29, 255, 67, 72, 49, 255, 73, 77, 24, 255, 74, 64, 11, 255, 72, 55, 5, 255, 69, 54, 8, 255, 69, 62, 14, 255, 72, 71, 14, 255, 63, 66, 4, 255, 56, 49, 8, 255, 64, 48, 4, 255, 54, 37, 3, 255, 69, 53, 4, 255, 103, 59, 7, 255, 90, 43, 4, 255, 117, 67, 9, 255, 140, 68, 5, 255, 146, 70, 5, 255, 167, 85, 9, 255, 175, 81, 3, 255, 172, 86, 6, 255, 173, 86, 2, 255, 176, 93, 2, 255, 180, 89, 5, 255, 177, 89, 7, 255, 180, 89, 0, 255, 175, 89, 3, 255, 179, 91, 1, 255, 182, 87, 1, 255, 173, 85, 4, 255, 165, 84, 1, 255, 166, 85, 2, 255, 165, 79, 3, 255, 163, 75, 2, 255, 165, 75, 4, 255, 166, 77, 3, 255, 171, 77, 5, 255, 166, 78, 3, 255, 167, 78, 11, 255, 172, 84, 6, 255, 177, 89, 0, 255, 181, 88, 1, 255, 179, 86, 4, 255, 178, 89, 4, 255, 179, 91, 5, 255, 183, 91, 6, 255, 190, 108, 3, 255, 199, 115, 3, 255, 201, 106, 3, 255, 187, 91, 0, 255, 185, 86, 11, 255, 197, 100, 4, 255, 190, 86, 1, 255, 184, 75, 7, 255, 179, 88, 2, 255, 189, 96, 1, 255, 189, 94, 2, 255, 189, 98, 1, 255, 187, 91, 3, 255, 182, 85, 1, 255, 187, 90, 0, 255, 191, 97, 1, 255, 187, 93, 1, 255, 184, 89, 5, 255, 183, 87, 3, 255, 178, 82, 0, 255, 182, 87, 3, 255, 180, 85, 4, 255, 174, 81, 4, 255, 171, 79, 5, 255, 180, 92, 5, 255, 184, 87, 1, 255, 181, 84, 3, 255, 178, 87, 2, 255, 182, 88, 1, 255, 180, 85, 2, 255, 169, 78, 3, 255, 150, 67, 1, 255, 147, 64, 8, 255, 170, 78, 6, 255, 175, 85, 0, 255, 178, 87, 6, 255, 175, 86, 6, 255, 176, 84, 1, 255, 162, 79, 1, 255, 163, 82, 7, 255, 167, 78, 5, 255, 156, 71, 1, 255, 148, 70, 4, 255, 133, 64, 3, 255, 143, 70, 6, 255, 142, 64, 0, 255, 144, 66, 6, 255, 147, 64, 10, 255, 138, 63, 2, 255, 131, 64, 7, 255, 132, 61, 3, 255, 137, 60, 3, 255, 129, 57, 1, 255, 135, 61, 10, 255, 142, 65, 5, 255, 136, 65, 7, 255, 131, 59, 6, 255, 136, 64, 6, 255, 153, 74, 7, 255, 163, 84, 9, 255, 172, 89, 1, 255, 168, 84, 5, 255, 155, 76, 10, 255, 176, 94, 11, 255, 180, 92, 9, 255, 178, 91, 6, 255, 180, 92, 7, 255, 187, 99, 4, 255, 186, 103, 11, 255, 195, 106, 5, 255, 186, 99, 13, 255, 177, 92, 10, 255, 179, 93, 3, 255, 183, 99, 7, 255, 189, 100, 6, 255, 195, 107, 4, 255, 195, 109, 10, 255, 200, 110, 11, 255, 197, 105, 8, 255, 197, 109, 12, 255, 201, 114, 7, 255, 200, 116, 7, 255, 198, 108, 10, 255, 195, 107, 3, 255, 197, 110, 7, 255, 203, 117, 7, 255, 201, 115, 2, 255, 192, 103, 7, 255, 192, 105, 9, 255, 195, 108, 20, 255, 194, 111, 8, 255, 197, 113, 12, 255, 202, 119, 9, 255, 201, 117, 4, 255, 196, 110, 7, 255, 194, 108, 17, 255, 194, 111, 20, 255, 207, 129, 9, 255, 216, 138, 0, 255, 215, 132, 7, 255, 218, 137, 10, 255, 218, 142, 12, 255, 217, 144, 11, 255, 215, 144, 11, 255, 217, 150, 5, 255, 217, 149, 10, 255, 221, 152, 15, 255, 219, 153, 11, 255, 218, 155, 5, 255, 215, 155, 3, 255, 215, 156, 4, 255, 213, 153, 9, 255, 206, 148, 5, 255, 205, 149, 7, 255, 206, 152, 5, 255, 210, 152, 8, 255, 218, 163, 6, 255, 221, 171, 7, 255, 226, 169, 13, 255, 232, 166, 9, 255, 211, 144, 16, 255, 207, 145, 9, 255, 206, 146, 5, 255, 218, 160, 11, 255, 226, 176, 2, 255, 228, 174, 12, 255, 228, 174, 13, 255, 215, 161, 8, 255, 213, 161, 9, 255, 216, 166, 6, 255, 216, 168, 2, 255, 229, 179, 3, 255, 215, 159, 15, 255, 211, 158, 14, 255, 218, 175, 1, 255, 218, 174, 2, 255, 223, 172, 2, 255, 224, 176, 4, 255, 217, 173, 14, 255, 218, 176, 2, 255, 221, 177, 10, 255, 216, 172, 7, 255, 216, 172, 9, 255, 213, 170, 3, 255, 214, 171, 1, 255, 212, 169, 4, 255, 209, 165, 1, 255, 205, 159, 7, 255, 194, 146, 3, 255, 200, 155, 10, 255, 212, 171, 7, 255, 208, 169, 0, 255, 212, 169, 5, 255, 207, 160, 13, 255, 189, 136, 19, 255, 200, 150, 7, 255, 210, 164, 4, 255, 196, 148, 9, 255, 200, 152, 10, 255, 201, 156, 5, 255, 201, 155, 3, 255, 206, 156, 8, 255, 206, 155, 9, 255, 208, 155, 9, 255, 179, 121, 5, 255, 167, 111, 15, 255, 201, 155, 10, 255, 203, 158, 10, 255, 199, 155, 5, 255, 196, 151, 1, 255, 199, 151, 4, 255, 198, 153, 1, 255, 202, 157, 3, 255, 200, 155, 1, 255, 198, 152, 1, 255, 198, 149, 14, 255, 195, 148, 6, 255, 196, 150, 1, 255, 204, 153, 6, 255, 202, 151, 7, 255, 199, 150, 1, 255, 202, 151, 4, 255, 201, 146, 12, 255, 199, 141, 15, 255, 197, 139, 10, 255, 195, 135, 9, 255, 193, 132, 10, 255, 193, 129, 8, 255, 188, 122, 2, 255, 185, 117, 6, 255, 191, 118, 14, 255, 182, 105, 10, 255, 181, 105, 3, 255, 179, 104, 8, 255, 172, 96, 8, 255, 169, 92, 2, 255, 178, 97, 5, 255, 176, 93, 4, 255, 170, 91, 2, 255, 165, 88, 3, 255, 163, 84, 7, 255, 155, 78, 2, 255, 140, 70, 6, 255, 133, 61, 3, 255, 151, 75, 3, 255, 148, 69, 3, 255, 152, 71, 9, 255, 150, 75, 3, 255, 138, 66, 2, 255, 131, 57, 2, 255, 135, 59, 5, 255, 129, 55, 3, 255, 121, 47, 2, 255, 112, 44, 2, 255, 98, 35, 6, 255, 92, 38, 2, 255, 103, 37, 3, 255, 104, 33, 4, 255, 102, 39, 6, 255, 103, 43, 2, 255, 108, 40, 1, 255, 103, 35, 1, 255, 106, 41, 5, 255, 108, 38, 3, 255, 107, 39, 2, 255, 106, 43, 3, 255, 106, 44, 3, 255, 102, 40, 3, 255, 101, 36, 4, 255, 99, 36, 4, 255, 101, 36, 4, 255, 101, 33, 5, 255, 99, 32, 5, 255, 95, 35, 4, 255, 90, 36, 1, 255, 93, 36, 1, 255, 93, 32, 2, 255, 82, 26, 1, 255, 109, 43, 3, 255, 137, 56, 5, 255, 140, 59, 11, 255, 133, 53, 3, 255, 124, 47, 3, 255, 121, 47, 5, 255, 115, 44, 1, 255, 104, 35, 0, 255, 96, 29, 1, 255, 94, 31, 0, 255, 102, 33, 2, 255, 101, 32, 2, 255, 103, 35, 5, 255, 107, 37, 8, 255, 105, 35, 7, 255, 99, 31, 3, 255, 97, 33, 2, 255, 98, 35, 1, 255, 104, 36, 2, 255, 100, 33, 1, 255, 98, 34, 0, 255, 100, 34, 4, 255, 100, 27, 1, 255, 97, 30, 4, 255, 81, 24, 4, 255, 72, 22, 2, 255, 84, 28, 0, 255, 104, 32, 2, 255, 109, 35, 1, 255, 111, 34, 7, 255, 117, 36, 3, 255, 119, 35, 0, 255, 108, 27, 3, 255, 101, 30, 5, 255, 94, 26, 2, 255, 85, 20, 5, 255, 81, 25, 0, 255, 83, 28, 2, 255, 83, 32, 4, 255, 86, 34, 6, 255, 91, 32, 1, 255, 104, 40, 6, 255, 100, 42, 4, 255, 106, 45, 5, 255, 108, 49, 4, 255, 105, 48, 2, 255, 107, 41, 1, 255, 100, 30, 4, 255, 85, 21, 2, 255, 70, 23, 3, 255, 61, 20, 5, 255, 64, 18, 3, 255, 56, 17, 0, 255, 58, 22, 3, 255, 79, 26, 8, 255, 79, 23, 1, 255, 86, 21, 3, 255, 83, 18, 1, 255, 76, 23, 1, 255, 75, 30, 4, 255, 73, 23, 3, 255, 77, 19, 4, 255, 81, 20, 4, 255, 84, 20, 2, 255, 89, 23, 4, 255, 89, 24, 5, 255, 84, 24, 4, 255, 76, 22, 1, 255, 79, 22, 3, 255, 88, 25, 3, 255, 93, 27, 2, 255, 10, 6, 2, 255, 12, 7, 4, 255, 5, 2, 0, 255, 4, 3, 1, 255, 4, 1, 0, 255, 5, 2, 0, 255, 7, 3, 0, 255, 9, 4, 1, 255, 10, 5, 2, 255, 10, 5, 1, 255, 9, 4, 0, 255, 9, 4, 0, 255, 10, 5, 1, 255, 13, 6, 1, 255, 12, 5, 2, 255, 10, 5, 4, 255, 16, 11, 9, 255, 21, 14, 10, 255, 25, 17, 11, 255, 27, 17, 10, 255, 27, 16, 7, 255, 28, 17, 8, 255, 28, 19, 11, 255, 25, 17, 8, 255, 27, 21, 8, 255, 27, 21, 6, 255, 29, 21, 7, 255, 31, 21, 9, 255, 34, 25, 12, 255, 39, 31, 14, 255, 38, 31, 11, 255, 42, 35, 16, 255, 44, 40, 14, 255, 45, 39, 13, 255, 52, 44, 15, 255, 61, 47, 11, 255, 60, 45, 12, 255, 58, 50, 9, 255, 51, 46, 5, 255, 62, 52, 14, 255, 75, 62, 10, 255, 67, 57, 3, 255, 68, 60, 7, 255, 62, 58, 14, 255, 62, 64, 32, 255, 73, 78, 53, 255, 73, 74, 56, 255, 76, 73, 37, 255, 75, 68, 17, 255, 63, 56, 0, 255, 59, 54, 1, 255, 60, 58, 13, 255, 86, 69, 24, 255, 74, 67, 4, 255, 85, 58, 11, 255, 116, 62, 8, 255, 101, 62, 5, 255, 142, 73, 9, 255, 146, 69, 3, 255, 155, 82, 5, 255, 166, 82, 1, 255, 165, 81, 3, 255, 174, 84, 3, 255, 183, 90, 3, 255, 175, 89, 2, 255, 178, 86, 6, 255, 176, 87, 6, 255, 168, 88, 5, 255, 171, 84, 6, 255, 164, 82, 4, 255, 169, 81, 5, 255, 171, 76, 6, 255, 159, 82, 1, 255, 155, 78, 7, 255, 152, 75, 5, 255, 156, 74, 11, 255, 155, 79, 3, 255, 147, 73, 5, 255, 145, 68, 2, 255, 156, 75, 0, 255, 152, 74, 8, 255, 152, 81, 7, 255, 159, 79, 3, 255, 149, 71, 2, 255, 142, 70, 2, 255, 132, 64, 3, 255, 129, 58, 2, 255, 130, 57, 3, 255, 129, 61, 8, 255, 134, 64, 8, 255, 147, 67, 4, 255, 154, 80, 4, 255, 162, 82, 5, 255, 162, 75, 5, 255, 157, 78, 0, 255, 177, 90, 4, 255, 184, 93, 9, 255, 185, 89, 5, 255, 171, 81, 10, 255, 174, 90, 4, 255, 182, 92, 1, 255, 184, 93, 1, 255, 185, 92, 3, 255, 177, 83, 1, 255, 184, 88, 1, 255, 192, 98, 4, 255, 191, 96, 2, 255, 180, 84, 1, 255, 184, 87, 9, 255, 185, 89, 1, 255, 183, 88, 2, 255, 190, 96, 5, 255, 192, 98, 2, 255, 188, 93, 5, 255, 177, 81, 8, 255, 187, 86, 9, 255, 187, 93, 3, 255, 192, 100, 5, 255, 196, 98, 4, 255, 191, 92, 0, 255, 188, 94, 4, 255, 187, 95, 9, 255, 178, 89, 5, 255, 179, 86, 5, 255, 187, 87, 1, 255, 185, 91, 5, 255, 188, 94, 2, 255, 190, 94, 2, 255, 186, 91, 3, 255, 184, 88, 6, 255, 174, 79, 6, 255, 157, 68, 2, 255, 158, 73, 8, 255, 158, 73, 4, 255, 169, 77, 7, 255, 162, 70, 11, 255, 133, 50, 10, 255, 138, 60, 7, 255, 142, 63, 4, 255, 137, 60, 4, 255, 135, 62, 4, 255, 133, 60, 5, 255, 142, 65, 7, 255, 133, 63, 7, 255, 144, 69, 7, 255, 147, 64, 0, 255, 141, 66, 10, 255, 159, 81, 15, 255, 177, 95, 9, 255, 183, 97, 0, 255, 184, 98, 4, 255, 186, 95, 2, 255, 185, 94, 5, 255, 181, 98, 9, 255, 192, 100, 4, 255, 189, 94, 1, 255, 185, 97, 3, 255, 185, 99, 12, 255, 196, 110, 6, 255, 194, 106, 7, 255, 196, 102, 6, 255, 189, 102, 8, 255, 191, 107, 4, 255, 201, 112, 6, 255, 190, 103, 7, 255, 197, 105, 12, 255, 196, 110, 3, 255, 192, 102, 7, 255, 194, 105, 9, 255, 204, 114, 4, 255, 206, 111, 7, 255, 206, 114, 8, 255, 208, 114, 6, 255, 199, 107, 10, 255, 198, 108, 9, 255, 206, 119, 6, 255, 206, 120, 5, 255, 201, 113, 14, 255, 206, 118, 20, 255, 202, 120, 9, 255, 201, 118, 16, 255, 199, 116, 10, 255, 190, 107, 3, 255, 200, 119, 5, 255, 202, 120, 11, 255, 203, 123, 9, 255, 195, 116, 6, 255, 186, 110, 7, 255, 203, 128, 15, 255, 215, 134, 10, 255, 213, 132, 8, 255, 214, 138, 6, 255, 211, 142, 3, 255, 211, 144, 3, 255, 211, 146, 9, 255, 215, 150, 13, 255, 216, 152, 14, 255, 217, 156, 1, 255, 215, 155, 3, 255, 215, 157, 4, 255, 217, 160, 1, 255, 217, 163, 4, 255, 216, 162, 7, 255, 216, 163, 6, 255, 219, 169, 7, 255, 218, 171, 5, 255, 219, 160, 12, 255, 218, 158, 5, 255, 221, 169, 1, 255, 222, 172, 5, 255, 218, 162, 9, 255, 200, 140, 17, 255, 203, 146, 15, 255, 212, 158, 11, 255, 217, 167, 6, 255, 223, 174, 3, 255, 226, 173, 8, 255, 225, 176, 8, 255, 222, 176, 6, 255, 222, 176, 7, 255, 223, 176, 8, 255, 223, 176, 7, 255, 224, 174, 4, 255, 208, 153, 5, 255, 207, 166, 6, 255, 223, 175, 0, 255, 222, 174, 7, 255, 217, 171, 9, 255, 219, 171, 4, 255, 218, 173, 18, 255, 215, 175, 4, 255, 216, 173, 4, 255, 213, 168, 3, 255, 212, 168, 3, 255, 209, 163, 10, 255, 208, 162, 6, 255, 209, 166, 10, 255, 208, 164, 12, 255, 194, 148, 3, 255, 187, 140, 4, 255, 198, 155, 7, 255, 214, 172, 5, 255, 210, 165, 5, 255, 210, 167, 2, 255, 206, 162, 4, 255, 200, 153, 8, 255, 198, 153, 2, 255, 206, 163, 0, 255, 201, 156, 6, 255, 207, 163, 11, 255, 202, 159, 6, 255, 196, 150, 2, 255, 199, 150, 5, 255, 202, 151, 14, 255, 211, 161, 13, 255, 197, 146, 11, 255, 153, 97, 6, 255, 195, 147, 12, 255, 204, 157, 10, 255, 199, 154, 6, 255, 196, 151, 5, 255, 196, 151, 6, 255, 198, 154, 0, 255, 201, 155, 7, 255, 199, 151, 8, 255, 198, 152, 1, 255, 197, 149, 4, 255, 194, 147, 5, 255, 199, 153, 4, 255, 203, 152, 7, 255, 202, 153, 3, 255, 201, 151, 3, 255, 201, 151, 3, 255, 202, 149, 3, 255, 201, 143, 5, 255, 197, 139, 4, 255, 197, 139, 5, 255, 194, 135, 6, 255, 191, 127, 9, 255, 190, 123, 10, 255, 189, 118, 4, 255, 184, 112, 2, 255, 176, 98, 8, 255, 179, 100, 3, 255, 174, 97, 3, 255, 171, 94, 6, 255, 172, 96, 4, 255, 172, 95, 2, 255, 166, 93, 2, 255, 167, 94, 1, 255, 165, 93, 2, 255, 165, 95, 1, 255, 169, 96, 0, 255, 173, 90, 4, 255, 164, 84, 4, 255, 153, 76, 0, 255, 149, 68, 1, 255, 152, 73, 7, 255, 138, 64, 2, 255, 127, 59, 5, 255, 121, 56, 4, 255, 124, 51, 4, 255, 115, 42, 8, 255, 105, 35, 4, 255, 99, 32, 1, 255, 101, 39, 6, 255, 100, 43, 4, 255, 104, 43, 3, 255, 96, 35, 2, 255, 101, 39, 7, 255, 102, 41, 2, 255, 99, 40, 3, 255, 100, 37, 6, 255, 109, 37, 6, 255, 107, 39, 2, 255, 101, 41, 2, 255, 101, 42, 3, 255, 106, 42, 4, 255, 106, 39, 4, 255, 100, 34, 3, 255, 99, 38, 7, 255, 98, 36, 2, 255, 100, 34, 3, 255, 100, 34, 5, 255, 98, 34, 6, 255, 93, 31, 2, 255, 89, 28, 0, 255, 93, 33, 6, 255, 85, 30, 2, 255, 91, 31, 4, 255, 106, 37, 9, 255, 107, 30, 3, 255, 110, 33, 5, 255, 110, 38, 2, 255, 109, 34, 1, 255, 108, 30, 4, 255, 108, 32, 6, 255, 105, 35, 9, 255, 100, 34, 3, 255, 95, 33, 0, 255, 97, 33, 0, 255, 102, 33, 0, 255, 100, 32, 0, 255, 99, 34, 2, 255, 97, 33, 1, 255, 98, 34, 2, 255, 99, 35, 4, 255, 101, 37, 5, 255, 100, 35, 6, 255, 103, 38, 4, 255, 102, 36, 5, 255, 98, 32, 3, 255, 85, 27, 1, 255, 74, 21, 3, 255, 75, 25, 5, 255, 86, 30, 4, 255, 95, 29, 2, 255, 102, 32, 2, 255, 102, 30, 4, 255, 95, 29, 1, 255, 93, 30, 1, 255, 85, 24, 4, 255, 85, 30, 6, 255, 80, 29, 1, 255, 77, 31, 2, 255, 86, 34, 2, 255, 90, 35, 3, 255, 95, 34, 3, 255, 98, 35, 4, 255, 98, 36, 1, 255, 107, 44, 5, 255, 107, 43, 1, 255, 110, 45, 1, 255, 110, 44, 3, 255, 104, 38, 2, 255, 90, 28, 0, 255, 74, 22, 5, 255, 71, 17, 5, 255, 71, 20, 4, 255, 53, 19, 1, 255, 57, 17, 2, 255, 67, 17, 4, 255, 75, 23, 4, 255, 76, 26, 3, 255, 75, 26, 3, 255, 75, 21, 0, 255, 77, 21, 0, 255, 76, 23, 0, 255, 81, 29, 3, 255, 83, 25, 4, 255, 82, 18, 4, 255, 84, 23, 4, 255, 86, 28, 2, 255, 88, 29, 0, 255, 84, 25, 1, 255, 75, 23, 1, 255, 77, 27, 4, 255, 89, 27, 4, 255, 97, 33, 3, 255, 101, 35, 1, 255, 13, 6, 3, 255, 9, 4, 2, 255, 4, 0, 0, 255, 7, 4, 3, 255, 10, 6, 3, 255, 8, 3, 0, 255, 10, 5, 2, 255, 10, 5, 1, 255, 10, 5, 1, 255, 14, 9, 5, 255, 10, 5, 1, 255, 8, 3, 0, 255, 13, 8, 5, 255, 11, 7, 4, 255, 9, 6, 1, 255, 17, 13, 2, 255, 17, 12, 0, 255, 19, 13, 5, 255, 24, 17, 15, 255, 26, 19, 11, 255, 25, 19, 8, 255, 24, 21, 8, 255, 21, 19, 7, 255, 23, 21, 10, 255, 22, 23, 9, 255, 29, 26, 8, 255, 38, 28, 8, 255, 36, 27, 9, 255, 38, 31, 13, 255, 38, 31, 8, 255, 41, 33, 9, 255, 42, 34, 11, 255, 41, 37, 18, 255, 54, 43, 10, 255, 61, 44, 10, 255, 57, 40, 10, 255, 59, 49, 11, 255, 59, 51, 14, 255, 47, 45, 16, 255, 67, 62, 16, 255, 72, 60, 2, 255, 73, 63, 6, 255, 70, 57, 8, 255, 67, 57, 18, 255, 74, 72, 60, 255, 77, 85, 59, 255, 72, 80, 50, 255, 69, 74, 56, 255, 66, 70, 19, 255, 72, 62, 2, 255, 81, 54, 1, 255, 100, 63, 16, 255, 134, 82, 22, 255, 137, 89, 1, 255, 161, 96, 9, 255, 171, 90, 2, 255, 175, 89, 8, 255, 177, 85, 7, 255, 178, 91, 5, 255, 176, 91, 0, 255, 173, 88, 3, 255, 169, 86, 4, 255, 163, 81, 8, 255, 155, 89, 5, 255, 153, 84, 3, 255, 142, 73, 3, 255, 142, 72, 5, 255, 135, 66, 6, 255, 128, 66, 5, 255, 134, 65, 7, 255, 124, 65, 1, 255, 128, 69, 8, 255, 109, 56, 1, 255, 99, 44, 3, 255, 99, 52, 7, 255, 115, 51, 7, 255, 109, 49, 3, 255, 95, 47, 4, 255, 99, 43, 5, 255, 105, 53, 2, 255, 116, 54, 6, 255, 106, 51, 2, 255, 106, 52, 1, 255, 99, 47, 5, 255, 77, 33, 2, 255, 62, 27, 4, 255, 69, 33, 8, 255, 78, 36, 5, 255, 81, 34, 2, 255, 81, 39, 5, 255, 77, 40, 2, 255, 83, 36, 1, 255, 87, 38, 5, 255, 95, 46, 3, 255, 105, 51, 8, 255, 111, 50, 5, 255, 111, 54, 7, 255, 125, 67, 5, 255, 153, 81, 3, 255, 168, 85, 2, 255, 174, 89, 3, 255, 176, 89, 4, 255, 176, 89, 1, 255, 180, 91, 1, 255, 178, 85, 2, 255, 183, 87, 4, 255, 180, 83, 2, 255, 183, 87, 2, 255, 185, 90, 3, 255, 187, 92, 6, 255, 185, 90, 4, 255, 188, 92, 2, 255, 195, 100, 4, 255, 188, 93, 1, 255, 183, 88, 3, 255, 189, 95, 6, 255, 193, 100, 0, 255, 200, 105, 3, 255, 196, 100, 5, 255, 191, 100, 4, 255, 193, 103, 6, 255, 196, 95, 7, 255, 193, 96, 5, 255, 193, 104, 1, 255, 198, 99, 6, 255, 200, 103, 6, 255, 185, 89, 2, 255, 173, 80, 5, 255, 183, 91, 4, 255, 175, 78, 5, 255, 152, 58, 0, 255, 151, 66, 4, 255, 162, 77, 6, 255, 165, 76, 4, 255, 159, 65, 9, 255, 137, 55, 4, 255, 137, 61, 8, 255, 151, 71, 4, 255, 154, 72, 6, 255, 157, 76, 8, 255, 148, 68, 1, 255, 145, 67, 3, 255, 158, 72, 6, 255, 168, 81, 8, 255, 165, 80, 3, 255, 168, 78, 12, 255, 180, 94, 10, 255, 192, 99, 4, 255, 188, 98, 5, 255, 188, 101, 1, 255, 192, 97, 6, 255, 187, 100, 10, 255, 185, 101, 8, 255, 193, 98, 9, 255, 188, 96, 2, 255, 191, 100, 10, 255, 193, 101, 4, 255, 194, 106, 7, 255, 193, 106, 5, 255, 196, 107, 1, 255, 184, 94, 2, 255, 161, 76, 10, 255, 174, 85, 14, 255, 179, 89, 6, 255, 192, 104, 11, 255, 199, 114, 7, 255, 202, 112, 5, 255, 195, 106, 6, 255, 193, 104, 5, 255, 201, 112, 11, 255, 202, 113, 7, 255, 203, 117, 2, 255, 206, 116, 14, 255, 191, 106, 9, 255, 192, 107, 7, 255, 206, 125, 7, 255, 201, 123, 6, 255, 204, 124, 17, 255, 208, 130, 10, 255, 209, 127, 7, 255, 202, 117, 11, 255, 193, 107, 7, 255, 195, 111, 8, 255, 206, 126, 13, 255, 207, 134, 6, 255, 203, 131, 5, 255, 196, 122, 6, 255, 200, 130, 15, 255, 206, 135, 15, 255, 202, 123, 19, 255, 195, 120, 11, 255, 205, 138, 10, 255, 211, 144, 7, 255, 212, 145, 8, 255, 213, 147, 17, 255, 211, 147, 6, 255, 215, 152, 8, 255, 214, 152, 6, 255, 215, 157, 3, 255, 216, 158, 18, 255, 217, 161, 7, 255, 218, 162, 7, 255, 218, 163, 11, 255, 219, 164, 5, 255, 223, 169, 2, 255, 226, 168, 6, 255, 212, 156, 5, 255, 208, 152, 5, 255, 222, 168, 8, 255, 220, 165, 3, 255, 220, 163, 17, 255, 209, 158, 15, 255, 211, 164, 11, 255, 213, 167, 4, 255, 216, 172, 3, 255, 220, 174, 8, 255, 222, 173, 6, 255, 223, 174, 1, 255, 223, 171, 3, 255, 223, 175, 3, 255, 222, 175, 3, 255, 222, 174, 14, 255, 209, 156, 14, 255, 205, 151, 2, 255, 216, 171, 6, 255, 216, 173, 6, 255, 216, 172, 5, 255, 215, 172, 9, 255, 212, 172, 6, 255, 211, 168, 3, 255, 213, 169, 5, 255, 212, 169, 6, 255, 208, 164, 0, 255, 205, 160, 3, 255, 206, 161, 10, 255, 205, 162, 5, 255, 204, 162, 6, 255, 203, 162, 7, 255, 205, 161, 4, 255, 183, 132, 18, 255, 195, 149, 10, 255, 210, 168, 0, 255, 208, 163, 2, 255, 210, 166, 1, 255, 202, 157, 3, 255, 195, 146, 5, 255, 196, 148, 6, 255, 201, 156, 5, 255, 203, 160, 5, 255, 205, 161, 8, 255, 200, 154, 8, 255, 195, 149, 1, 255, 190, 142, 6, 255, 201, 155, 6, 255, 209, 170, 1, 255, 212, 173, 9, 255, 179, 127, 16, 255, 179, 126, 2, 255, 196, 145, 4, 255, 194, 146, 4, 255, 197, 154, 3, 255, 194, 149, 11, 255, 194, 150, 2, 255, 198, 151, 7, 255, 199, 151, 6, 255, 199, 149, 1, 255, 198, 149, 5, 255, 195, 147, 14, 255, 199, 153, 2, 255, 202, 151, 3, 255, 203, 152, 9, 255, 202, 151, 14, 255, 200, 146, 10, 255, 203, 146, 10, 255, 201, 143, 3, 255, 198, 139, 6, 255, 193, 135, 5, 255, 192, 133, 5, 255, 189, 126, 3, 255, 189, 122, 7, 255, 184, 111, 3, 255, 180, 107, 3, 255, 175, 102, 8, 255, 175, 97, 4, 255, 174, 95, 3, 255, 176, 100, 6, 255, 178, 102, 5, 255, 174, 96, 2, 255, 174, 98, 1, 255, 176, 100, 2, 255, 173, 94, 5, 255, 171, 94, 4, 255, 166, 90, 3, 255, 156, 81, 0, 255, 153, 80, 4, 255, 152, 78, 7, 255, 154, 76, 6, 255, 144, 65, 1, 255, 138, 63, 1, 255, 137, 69, 2, 255, 135, 67, 10, 255, 137, 64, 3, 255, 110, 45, 3, 255, 94, 34, 4, 255, 89, 31, 2, 255, 104, 44, 1, 255, 106, 44, 4, 255, 108, 46, 1, 255, 103, 38, 2, 255, 100, 33, 3, 255, 102, 37, 3, 255, 97, 34, 4, 255, 88, 31, 6, 255, 89, 33, 2, 255, 98, 36, 3, 255, 99, 36, 4, 255, 97, 35, 2, 255, 96, 36, 1, 255, 100, 37, 3, 255, 103, 34, 3, 255, 103, 34, 3, 255, 102, 35, 1, 255, 101, 37, 1, 255, 98, 35, 3, 255, 96, 31, 4, 255, 96, 31, 4, 255, 95, 29, 4, 255, 88, 29, 4, 255, 86, 28, 1, 255, 78, 24, 1, 255, 90, 37, 7, 255, 105, 39, 2, 255, 102, 34, 1, 255, 106, 37, 4, 255, 113, 39, 3, 255, 119, 39, 4, 255, 122, 44, 3, 255, 120, 46, 3, 255, 107, 35, 2, 255, 97, 30, 4, 255, 90, 30, 1, 255, 94, 35, 3, 255, 99, 35, 2, 255, 102, 34, 2, 255, 97, 33, 2, 255, 101, 36, 4, 255, 99, 31, 4, 255, 95, 31, 1, 255, 94, 29, 2, 255, 104, 36, 2, 255, 100, 34, 3, 255, 94, 34, 3, 255, 81, 27, 1, 255, 74, 23, 3, 255, 72, 21, 2, 255, 82, 26, 3, 255, 83, 24, 5, 255, 89, 26, 4, 255, 90, 25, 0, 255, 86, 29, 6, 255, 89, 28, 5, 255, 88, 28, 1, 255, 88, 30, 2, 255, 93, 26, 1, 255, 95, 31, 6, 255, 98, 36, 4, 255, 95, 32, 0, 255, 100, 37, 2, 255, 104, 41, 4, 255, 103, 39, 1, 255, 108, 44, 3, 255, 115, 41, 2, 255, 109, 41, 7, 255, 95, 32, 4, 255, 90, 25, 2, 255, 77, 22, 1, 255, 68, 21, 3, 255, 66, 17, 4, 255, 64, 15, 2, 255, 57, 16, 5, 255, 58, 15, 5, 255, 75, 22, 4, 255, 84, 26, 2, 255, 79, 22, 0, 255, 76, 20, 2, 255, 74, 19, 2, 255, 79, 24, 4, 255, 80, 23, 1, 255, 85, 25, 1, 255, 86, 22, 2, 255, 91, 26, 4, 255, 89, 26, 1, 255, 89, 27, 2, 255, 92, 26, 6, 255, 90, 20, 3, 255, 90, 22, 4, 255, 92, 27, 2, 255, 104, 31, 3, 255, 109, 36, 1, 255, 113, 41, 2, 255, 16, 8, 5, 255, 8, 5, 2, 255, 1, 1, 0, 255, 5, 2, 0, 255, 12, 7, 2, 255, 8, 2, 0, 255, 11, 3, 1, 255, 10, 4, 1, 255, 10, 6, 2, 255, 10, 7, 2, 255, 13, 8, 3, 255, 10, 4, 1, 255, 16, 9, 4, 255, 8, 6, 1, 255, 11, 9, 1, 255, 15, 12, 4, 255, 14, 9, 4, 255, 13, 8, 6, 255, 25, 19, 20, 255, 26, 18, 18, 255, 24, 18, 10, 255, 21, 22, 6, 255, 25, 21, 9, 255, 29, 21, 12, 255, 29, 26, 10, 255, 35, 27, 8, 255, 41, 27, 11, 255, 40, 29, 10, 255, 37, 34, 6, 255, 41, 37, 11, 255, 39, 34, 11, 255, 45, 44, 12, 255, 47, 41, 15, 255, 53, 44, 10, 255, 51, 44, 15, 255, 56, 43, 24, 255, 56, 51, 11, 255, 52, 51, 13, 255, 55, 50, 7, 255, 77, 65, 10, 255, 67, 59, 5, 255, 63, 52, 7, 255, 66, 57, 8, 255, 70, 72, 34, 255, 78, 83, 70, 255, 70, 84, 60, 255, 74, 78, 54, 255, 97, 85, 56, 255, 109, 83, 33, 255, 133, 83, 21, 255, 144, 78, 12, 255, 164, 91, 16, 255, 175, 97, 6, 255, 183, 103, 14, 255, 174, 98, 12, 255, 166, 90, 6, 255, 162, 87, 5, 255, 152, 81, 13, 255, 140, 72, 4, 255, 130, 64, 3, 255, 122, 63, 6, 255, 108, 60, 5, 255, 99, 54, 6, 255, 83, 47, 2, 255, 90, 46, 8, 255, 83, 39, 4, 255, 75, 36, 3, 255, 64, 34, 2, 255, 67, 37, 4, 255, 75, 37, 5, 255, 67, 36, 4, 255, 74, 39, 10, 255, 71, 30, 6, 255, 62, 29, 0, 255, 58, 36, 0, 255, 60, 30, 0, 255, 56, 28, 2, 255, 55, 34, 2, 255, 61, 27, 3, 255, 64, 27, 2, 255, 65, 29, 2, 255, 66, 30, 1, 255, 69, 33, 1, 255, 61, 29, 6, 255, 59, 29, 1, 255, 68, 34, 4, 255, 70, 36, 6, 255, 67, 31, 3, 255, 74, 37, 4, 255, 74, 41, 5, 255, 73, 41, 4, 255, 81, 39, 0, 255, 74, 35, 1, 255, 81, 37, 2, 255, 90, 40, 2, 255, 85, 38, 1, 255, 74, 35, 5, 255, 78, 45, 2, 255, 116, 61, 2, 255, 144, 65, 1, 255, 147, 73, 5, 255, 162, 80, 4, 255, 173, 83, 1, 255, 178, 89, 5, 255, 177, 88, 8, 255, 177, 87, 2, 255, 184, 90, 1, 255, 180, 90, 1, 255, 175, 84, 11, 255, 176, 85, 11, 255, 183, 91, 0, 255, 185, 89, 0, 255, 190, 93, 3, 255, 189, 95, 5, 255, 184, 93, 0, 255, 190, 99, 0, 255, 195, 102, 1, 255, 200, 104, 3, 255, 197, 106, 1, 255, 195, 109, 2, 255, 195, 101, 2, 255, 195, 97, 2, 255, 197, 102, 3, 255, 194, 97, 1, 255, 182, 80, 3, 255, 178, 77, 6, 255, 166, 67, 6, 255, 179, 89, 7, 255, 177, 79, 3, 255, 157, 64, 4, 255, 160, 69, 6, 255, 165, 73, 2, 255, 172, 82, 3, 255, 176, 89, 3, 255, 172, 86, 1, 255, 162, 78, 1, 255, 167, 84, 1, 255, 182, 94, 4, 255, 191, 99, 6, 255, 185, 98, 5, 255, 161, 77, 2, 255, 169, 86, 5, 255, 186, 102, 10, 255, 191, 103, 6, 255, 186, 98, 2, 255, 190, 102, 8, 255, 191, 102, 2, 255, 189, 96, 6, 255, 185, 93, 9, 255, 178, 89, 4, 255, 189, 101, 9, 255, 193, 105, 10, 255, 191, 103, 5, 255, 190, 100, 2, 255, 193, 105, 7, 255, 191, 102, 8, 255, 189, 101, 4, 255, 196, 108, 4, 255, 192, 104, 1, 255, 195, 108, 3, 255, 192, 105, 3, 255, 183, 100, 8, 255, 188, 100, 12, 255, 198, 108, 14, 255, 201, 116, 11, 255, 199, 112, 4, 255, 198, 107, 6, 255, 196, 106, 9, 255, 200, 111, 10, 255, 203, 114, 10, 255, 202, 115, 5, 255, 206, 119, 4, 255, 205, 118, 9, 255, 207, 120, 2, 255, 205, 121, 10, 255, 204, 126, 6, 255, 205, 130, 6, 255, 205, 128, 18, 255, 204, 128, 9, 255, 196, 119, 7, 255, 188, 109, 10, 255, 187, 108, 7, 255, 203, 128, 14, 255, 202, 129, 12, 255, 203, 130, 16, 255, 203, 129, 15, 255, 199, 127, 4, 255, 205, 135, 9, 255, 206, 138, 10, 255, 204, 138, 8, 255, 195, 128, 18, 255, 198, 136, 8, 255, 207, 147, 5, 255, 208, 146, 4, 255, 210, 154, 2, 255, 212, 152, 8, 255, 210, 151, 12, 255, 209, 151, 7, 255, 212, 153, 3, 255, 217, 157, 15, 255, 216, 157, 8, 255, 214, 160, 4, 255, 215, 160, 6, 255, 215, 161, 3, 255, 218, 161, 3, 255, 218, 164, 3, 255, 212, 157, 7, 255, 209, 152, 14, 255, 216, 162, 7, 255, 217, 165, 5, 255, 205, 150, 7, 255, 208, 155, 16, 255, 217, 168, 11, 255, 219, 170, 1, 255, 218, 171, 1, 255, 220, 170, 5, 255, 218, 170, 7, 255, 218, 170, 9, 255, 220, 173, 6, 255, 218, 171, 0, 255, 219, 170, 3, 255, 218, 170, 13, 255, 199, 150, 16, 255, 195, 148, 16, 255, 211, 167, 5, 255, 211, 170, 3, 255, 211, 168, 6, 255, 208, 163, 3, 255, 208, 163, 7, 255, 208, 164, 9, 255, 204, 164, 6, 255, 204, 165, 5, 255, 200, 159, 2, 255, 200, 157, 5, 255, 201, 158, 0, 255, 199, 156, 2, 255, 190, 145, 2, 255, 200, 154, 6, 255, 206, 164, 1, 255, 191, 143, 10, 255, 194, 148, 10, 255, 202, 158, 6, 255, 201, 156, 6, 255, 204, 158, 9, 255, 201, 156, 1, 255, 192, 144, 13, 255, 195, 148, 13, 255, 200, 155, 4, 255, 207, 162, 4, 255, 209, 164, 0, 255, 202, 159, 3, 255, 196, 152, 5, 255, 199, 155, 3, 255, 201, 157, 0, 255, 207, 164, 6, 255, 209, 167, 5, 255, 203, 161, 6, 255, 176, 128, 3, 255, 187, 138, 6, 255, 186, 137, 6, 255, 191, 142, 9, 255, 193, 145, 12, 255, 194, 146, 5, 255, 200, 149, 9, 255, 198, 147, 5, 255, 195, 146, 6, 255, 201, 154, 17, 255, 199, 152, 12, 255, 199, 153, 2, 255, 202, 156, 6, 255, 202, 151, 8, 255, 204, 152, 4, 255, 203, 148, 5, 255, 202, 144, 15, 255, 200, 138, 9, 255, 198, 134, 12, 255, 197, 132, 8, 255, 189, 128, 3, 255, 188, 126, 3, 255, 188, 113, 6, 255, 168, 89, 2, 255, 169, 94, 9, 255, 176, 101, 19, 255, 178, 99, 7, 255, 179, 97, 9, 255, 179, 99, 1, 255, 174, 96, 1, 255, 171, 91, 9, 255, 169, 91, 7, 255, 165, 86, 6, 255, 161, 82, 5, 255, 159, 81, 2, 255, 160, 84, 2, 255, 153, 80, 2, 255, 153, 82, 2, 255, 160, 86, 5, 255, 156, 80, 3, 255, 153, 73, 1, 255, 149, 70, 2, 255, 143, 67, 1, 255, 138, 63, 3, 255, 138, 62, 2, 255, 126, 57, 2, 255, 115, 45, 2, 255, 107, 42, 7, 255, 107, 40, 7, 255, 98, 39, 1, 255, 102, 41, 2, 255, 106, 33, 3, 255, 103, 38, 4, 255, 99, 35, 0, 255, 100, 32, 7, 255, 88, 29, 2, 255, 95, 37, 2, 255, 101, 36, 1, 255, 103, 36, 2, 255, 98, 36, 3, 255, 94, 36, 2, 255, 97, 35, 2, 255, 100, 32, 1, 255, 99, 30, 2, 255, 98, 32, 4, 255, 95, 33, 5, 255, 93, 33, 3, 255, 93, 32, 3, 255, 95, 32, 1, 255, 98, 36, 6, 255, 95, 31, 4, 255, 92, 31, 2, 255, 84, 30, 4, 255, 75, 25, 2, 255, 92, 30, 4, 255, 108, 33, 5, 255, 111, 36, 5, 255, 105, 44, 5, 255, 114, 44, 2, 255, 125, 40, 1, 255, 113, 39, 8, 255, 109, 37, 5, 255, 103, 32, 4, 255, 96, 31, 3, 255, 89, 28, 2, 255, 91, 30, 4, 255, 95, 33, 3, 255, 93, 33, 1, 255, 89, 34, 1, 255, 93, 32, 2, 255, 93, 25, 2, 255, 92, 28, 1, 255, 100, 32, 3, 255, 92, 31, 2, 255, 84, 29, 4, 255, 77, 24, 3, 255, 74, 20, 5, 255, 73, 26, 5, 255, 80, 26, 1, 255, 83, 22, 2, 255, 83, 28, 8, 255, 82, 26, 3, 255, 92, 31, 5, 255, 95, 32, 3, 255, 89, 30, 0, 255, 88, 33, 3, 255, 98, 35, 3, 255, 103, 39, 4, 255, 97, 41, 3, 255, 100, 38, 2, 255, 103, 44, 3, 255, 109, 44, 2, 255, 111, 46, 0, 255, 121, 50, 1, 255, 131, 50, 5, 255, 113, 34, 3, 255, 90, 26, 2, 255, 76, 24, 6, 255, 75, 21, 1, 255, 75, 21, 3, 255, 69, 20, 6, 255, 64, 18, 1, 255, 58, 16, 5, 255, 62, 20, 2, 255, 74, 25, 5, 255, 73, 20, 4, 255, 69, 20, 2, 255, 75, 24, 2, 255, 84, 28, 5, 255, 88, 27, 3, 255, 87, 26, 1, 255, 87, 28, 4, 255, 80, 24, 0, 255, 91, 25, 0, 255, 95, 26, 1, 255, 91, 27, 0, 255, 89, 27, 3, 255, 87, 24, 8, 255, 90, 23, 6, 255, 98, 29, 1, 255, 102, 28, 2, 255, 100, 25, 1, 255, 107, 29, 2, 255, 11, 6, 0, 255, 7, 4, 2, 255, 3, 3, 1, 255, 4, 0, 0, 255, 6, 2, 0, 255, 8, 4, 0, 255, 10, 5, 1, 255, 11, 6, 2, 255, 10, 6, 1, 255, 9, 7, 1, 255, 12, 8, 3, 255, 14, 8, 2, 255, 16, 8, 2, 255, 19, 8, 2, 255, 19, 11, 1, 255, 16, 9, 0, 255, 13, 9, 3, 255, 14, 12, 6, 255, 14, 12, 6, 255, 22, 19, 13, 255, 24, 21, 9, 255, 26, 19, 2, 255, 30, 28, 9, 255, 22, 21, 7, 255, 29, 22, 10, 255, 34, 27, 14, 255, 38, 31, 13, 255, 38, 28, 10, 255, 35, 35, 3, 255, 42, 40, 11, 255, 42, 38, 7, 255, 46, 43, 17, 255, 47, 43, 21, 255, 45, 42, 17, 255, 50, 47, 15, 255, 51, 46, 16, 255, 54, 47, 9, 255, 55, 51, 6, 255, 61, 54, 14, 255, 82, 69, 4, 255, 65, 56, 4, 255, 58, 55, 1, 255, 60, 56, 32, 255, 75, 75, 71, 255, 84, 84, 74, 255, 109, 96, 63, 255, 129, 99, 67, 255, 155, 108, 69, 255, 169, 105, 54, 255, 172, 105, 41, 255, 175, 104, 32, 255, 171, 96, 19, 255, 156, 88, 11, 255, 138, 83, 13, 255, 116, 71, 10, 255, 109, 69, 2, 255, 106, 68, 6, 255, 84, 51, 7, 255, 68, 38, 2, 255, 66, 35, 2, 255, 63, 36, 2, 255, 59, 31, 0, 255, 60, 28, 1, 255, 69, 27, 6, 255, 55, 25, 1, 255, 54, 27, 3, 255, 55, 29, 6, 255, 54, 29, 4, 255, 58, 32, 5, 255, 60, 28, 0, 255, 60, 28, 0, 255, 57, 33, 2, 255, 59, 33, 4, 255, 65, 34, 5, 255, 58, 33, 1, 255, 55, 33, 2, 255, 62, 34, 6, 255, 66, 38, 4, 255, 64, 35, 4, 255, 67, 33, 5, 255, 68, 32, 4, 255, 71, 33, 5, 255, 71, 35, 6, 255, 63, 33, 2, 255, 66, 34, 4, 255, 72, 38, 7, 255, 72, 39, 3, 255, 73, 39, 1, 255, 74, 38, 2, 255, 75, 34, 3, 255, 78, 35, 1, 255, 82, 38, 2, 255, 84, 41, 4, 255, 82, 41, 5, 255, 80, 40, 2, 255, 79, 43, 1, 255, 88, 39, 2, 255, 77, 39, 2, 255, 75, 41, 2, 255, 81, 44, 4, 255, 97, 47, 5, 255, 122, 66, 5, 255, 149, 75, 10, 255, 159, 74, 8, 255, 161, 81, 6, 255, 175, 88, 6, 255, 178, 92, 4, 255, 184, 90, 0, 255, 183, 90, 2, 255, 176, 86, 5, 255, 178, 87, 4, 255, 178, 83, 5, 255, 176, 81, 1, 255, 183, 89, 6, 255, 181, 90, 3, 255, 188, 98, 2, 255, 197, 101, 2, 255, 198, 102, 4, 255, 196, 106, 2, 255, 199, 104, 4, 255, 192, 100, 3, 255, 193, 106, 0, 255, 200, 105, 5, 255, 194, 92, 8, 255, 165, 64, 10, 255, 158, 68, 11, 255, 184, 99, 1, 255, 195, 101, 1, 255, 182, 87, 7, 255, 166, 76, 2, 255, 179, 91, 9, 255, 186, 94, 6, 255, 189, 95, 1, 255, 187, 92, 8, 255, 177, 85, 4, 255, 187, 97, 11, 255, 187, 101, 6, 255, 191, 102, 1, 255, 194, 99, 4, 255, 186, 94, 4, 255, 184, 95, 10, 255, 188, 103, 4, 255, 184, 95, 12, 255, 185, 97, 2, 255, 191, 104, 0, 255, 190, 101, 6, 255, 189, 101, 5, 255, 187, 98, 0, 255, 186, 96, 2, 255, 186, 97, 6, 255, 196, 107, 11, 255, 195, 109, 2, 255, 194, 106, 1, 255, 194, 103, 15, 255, 186, 96, 14, 255, 189, 101, 8, 255, 195, 107, 12, 255, 193, 105, 4, 255, 197, 109, 5, 255, 200, 110, 9, 255, 200, 112, 10, 255, 198, 116, 3, 255, 200, 114, 7, 255, 202, 114, 7, 255, 199, 114, 9, 255, 198, 111, 5, 255, 202, 114, 3, 255, 206, 118, 11, 255, 204, 116, 4, 255, 203, 117, 5, 255, 205, 119, 12, 255, 204, 118, 4, 255, 201, 116, 6, 255, 205, 120, 11, 255, 206, 125, 7, 255, 204, 124, 18, 255, 191, 113, 15, 255, 191, 115, 3, 255, 201, 126, 13, 255, 202, 128, 10, 255, 195, 120, 6, 255, 202, 128, 13, 255, 200, 129, 5, 255, 202, 130, 8, 255, 202, 130, 12, 255, 205, 135, 17, 255, 204, 135, 18, 255, 204, 136, 13, 255, 207, 139, 14, 255, 207, 142, 9, 255, 207, 141, 16, 255, 205, 140, 7, 255, 205, 146, 4, 255, 204, 143, 1, 255, 206, 143, 14, 255, 202, 138, 12, 255, 206, 145, 9, 255, 210, 153, 8, 255, 206, 146, 3, 255, 209, 152, 7, 255, 209, 155, 10, 255, 211, 156, 11, 255, 213, 158, 6, 255, 211, 159, 3, 255, 208, 158, 13, 255, 211, 160, 8, 255, 214, 163, 3, 255, 212, 158, 14, 255, 209, 159, 4, 255, 212, 167, 5, 255, 203, 150, 11, 255, 204, 159, 2, 255, 212, 166, 15, 255, 211, 166, 7, 255, 212, 167, 9, 255, 212, 167, 8, 255, 212, 167, 4, 255, 212, 167, 7, 255, 211, 166, 4, 255, 210, 166, 6, 255, 210, 166, 9, 255, 207, 166, 7, 255, 201, 162, 12, 255, 200, 163, 13, 255, 194, 152, 13, 255, 204, 162, 8, 255, 212, 165, 6, 255, 206, 153, 6, 255, 190, 137, 5, 255, 206, 162, 14, 255, 202, 159, 6, 255, 202, 158, 2, 255, 197, 155, 4, 255, 194, 153, 9, 255, 194, 151, 7, 255, 194, 146, 8, 255, 186, 135, 8, 255, 187, 137, 6, 255, 195, 150, 1, 255, 194, 148, 3, 255, 197, 151, 0, 255, 198, 153, 1, 255, 197, 149, 3, 255, 196, 150, 7, 255, 202, 159, 3, 255, 198, 156, 5, 255, 193, 151, 4, 255, 195, 153, 7, 255, 202, 159, 3, 255, 208, 165, 0, 255, 205, 162, 3, 255, 200, 159, 3, 255, 203, 160, 7, 255, 198, 152, 6, 255, 204, 160, 8, 255, 208, 168, 3, 255, 208, 169, 8, 255, 177, 130, 5, 255, 172, 122, 8, 255, 185, 138, 7, 255, 184, 136, 7, 255, 192, 147, 3, 255, 190, 143, 4, 255, 193, 145, 6, 255, 196, 148, 3, 255, 199, 153, 0, 255, 200, 154, 0, 255, 199, 151, 3, 255, 201, 151, 6, 255, 200, 153, 7, 255, 207, 156, 10, 255, 206, 154, 6, 255, 199, 148, 3, 255, 197, 143, 6, 255, 197, 140, 7, 255, 190, 130, 2, 255, 187, 123, 8, 255, 188, 121, 8, 255, 187, 113, 10, 255, 171, 93, 9, 255, 162, 87, 7, 255, 162, 93, 6, 255, 155, 85, 0, 255, 165, 92, 3, 255, 169, 89, 7, 255, 172, 90, 2, 255, 172, 91, 5, 255, 169, 89, 7, 255, 167, 90, 7, 255, 166, 89, 6, 255, 166, 89, 6, 255, 164, 89, 4, 255, 163, 90, 4, 255, 159, 84, 0, 255, 158, 83, 3, 255, 159, 82, 6, 255, 158, 80, 4, 255, 158, 79, 5, 255, 152, 73, 3, 255, 143, 64, 3, 255, 135, 59, 3, 255, 135, 59, 2, 255, 135, 57, 0, 255, 130, 58, 4, 255, 118, 48, 2, 255, 101, 38, 0, 255, 110, 47, 6, 255, 110, 47, 6, 255, 92, 40, 1, 255, 106, 44, 5, 255, 111, 41, 2, 255, 105, 40, 4, 255, 109, 42, 6, 255, 110, 37, 2, 255, 109, 36, 4, 255, 104, 38, 2, 255, 100, 36, 1, 255, 106, 41, 4, 255, 101, 38, 3, 255, 99, 37, 1, 255, 95, 29, 3, 255, 94, 32, 3, 255, 93, 33, 1, 255, 94, 36, 2, 255, 95, 32, 0, 255, 94, 30, 0, 255, 91, 28, 0, 255, 92, 36, 4, 255, 87, 30, 0, 255, 90, 29, 4, 255, 80, 27, 5, 255, 75, 24, 1, 255, 97, 32, 5, 255, 113, 37, 3, 255, 110, 35, 3, 255, 113, 34, 3, 255, 118, 39, 0, 255, 99, 36, 0, 255, 108, 39, 4, 255, 110, 40, 6, 255, 99, 33, 5, 255, 99, 33, 3, 255, 99, 32, 0, 255, 98, 34, 4, 255, 89, 29, 2, 255, 88, 30, 2, 255, 89, 31, 1, 255, 86, 33, 5, 255, 87, 34, 3, 255, 90, 30, 0, 255, 86, 28, 1, 255, 78, 26, 1, 255, 70, 22, 2, 255, 61, 18, 3, 255, 71, 23, 4, 255, 80, 24, 1, 255, 85, 27, 1, 255, 88, 28, 2, 255, 91, 30, 1, 255, 95, 31, 2, 255, 99, 33, 7, 255, 88, 28, 2, 255, 86, 29, 3, 255, 95, 35, 1, 255, 104, 40, 0, 255, 108, 46, 1, 255, 118, 52, 2, 255, 123, 55, 3, 255, 124, 55, 5, 255, 127, 54, 4, 255, 135, 57, 3, 255, 127, 53, 7, 255, 101, 25, 1, 255, 93, 27, 4, 255, 85, 29, 6, 255, 75, 20, 1, 255, 71, 20, 4, 255, 58, 17, 2, 255, 54, 15, 1, 255, 64, 17, 1, 255, 68, 19, 0, 255, 67, 19, 2, 255, 69, 17, 3, 255, 79, 21, 2, 255, 82, 26, 5, 255, 84, 25, 3, 255, 87, 24, 2, 255, 90, 27, 2, 255, 90, 29, 4, 255, 88, 28, 3, 255, 93, 26, 3, 255, 92, 24, 3, 255, 86, 20, 0, 255, 90, 25, 1, 255, 94, 31, 5, 255, 86, 25, 3, 255, 82, 23, 5, 255, 84, 24, 6, 255, 85, 23, 6, 255, 89, 24, 6, 255, 14, 9, 3, 255, 4, 3, 0, 255, 1, 1, 0, 255, 5, 1, 0, 255, 8, 4, 1, 255, 7, 3, 0, 255, 9, 5, 1, 255, 11, 7, 3, 255, 11, 8, 3, 255, 10, 7, 2, 255, 10, 5, 1, 255, 16, 9, 3, 255, 17, 9, 2, 255, 23, 12, 5, 255, 18, 11, 0, 255, 20, 15, 2, 255, 17, 12, 3, 255, 17, 10, 1, 255, 23, 16, 6, 255, 31, 26, 16, 255, 24, 24, 13, 255, 28, 21, 14, 255, 23, 22, 9, 255, 31, 29, 11, 255, 34, 30, 7, 255, 29, 29, 11, 255, 33, 33, 13, 255, 38, 35, 11, 255, 39, 38, 11, 255, 48, 44, 10, 255, 51, 42, 12, 255, 43, 40, 15, 255, 45, 46, 22, 255, 43, 48, 11, 255, 56, 50, 14, 255, 54, 54, 4, 255, 55, 49, 15, 255, 62, 45, 7, 255, 58, 51, 12, 255, 78, 65, 7, 255, 70, 52, 3, 255, 73, 60, 12, 255, 105, 83, 58, 255, 130, 99, 73, 255, 145, 111, 78, 255, 176, 120, 78, 255, 174, 120, 74, 255, 165, 115, 62, 255, 149, 107, 51, 255, 131, 101, 45, 255, 106, 85, 38, 255, 86, 63, 21, 255, 68, 55, 11, 255, 55, 39, 3, 255, 64, 36, 7, 255, 81, 51, 4, 255, 72, 43, 2, 255, 64, 37, 3, 255, 62, 31, 6, 255, 62, 28, 4, 255, 59, 33, 4, 255, 58, 31, 3, 255, 59, 31, 1, 255, 71, 27, 3, 255, 66, 31, 2, 255, 59, 32, 2, 255, 59, 28, 2, 255, 64, 31, 4, 255, 62, 32, 4, 255, 70, 33, 5, 255, 67, 31, 1, 255, 70, 36, 4, 255, 69, 30, 4, 255, 71, 33, 5, 255, 66, 32, 3, 255, 66, 30, 3, 255, 70, 29, 3, 255, 68, 33, 1, 255, 62, 33, 1, 255, 60, 32, 0, 255, 66, 32, 2, 255, 69, 31, 4, 255, 66, 30, 4, 255, 64, 32, 6, 255, 64, 33, 5, 255, 64, 33, 3, 255, 65, 35, 5, 255, 68, 35, 6, 255, 72, 35, 5, 255, 79, 39, 7, 255, 75, 38, 5, 255, 70, 35, 1, 255, 79, 40, 1, 255, 78, 39, 4, 255, 71, 37, 3, 255, 76, 40, 2, 255, 79, 36, 3, 255, 79, 41, 8, 255, 74, 38, 4, 255, 76, 38, 5, 255, 77, 36, 1, 255, 91, 47, 5, 255, 99, 54, 5, 255, 96, 49, 1, 255, 117, 59, 1, 255, 124, 61, 5, 255, 140, 72, 6, 255, 155, 71, 9, 255, 169, 79, 6, 255, 174, 87, 3, 255, 177, 83, 7, 255, 177, 84, 9, 255, 163, 76, 1, 255, 169, 81, 7, 255, 184, 92, 6, 255, 186, 98, 1, 255, 192, 101, 3, 255, 194, 99, 4, 255, 193, 97, 5, 255, 175, 81, 1, 255, 176, 85, 3, 255, 191, 92, 7, 255, 188, 82, 3, 255, 164, 69, 6, 255, 168, 78, 5, 255, 194, 99, 7, 255, 191, 93, 6, 255, 182, 86, 3, 255, 177, 78, 3, 255, 185, 93, 2, 255, 188, 99, 0, 255, 189, 96, 4, 255, 193, 96, 1, 255, 188, 96, 1, 255, 186, 94, 3, 255, 190, 99, 5, 255, 192, 103, 2, 255, 191, 98, 1, 255, 194, 96, 5, 255, 190, 96, 1, 255, 196, 105, 5, 255, 192, 99, 6, 255, 190, 101, 7, 255, 193, 105, 3, 255, 192, 105, 2, 255, 191, 99, 10, 255, 191, 99, 11, 255, 194, 102, 3, 255, 193, 103, 6, 255, 194, 105, 4, 255, 193, 106, 1, 255, 194, 106, 7, 255, 195, 106, 10, 255, 197, 108, 10, 255, 188, 99, 7, 255, 187, 98, 6, 255, 196, 109, 6, 255, 198, 111, 3, 255, 200, 112, 9, 255, 198, 108, 11, 255, 200, 111, 8, 255, 200, 114, 5, 255, 194, 106, 9, 255, 190, 102, 1, 255, 195, 109, 10, 255, 200, 113, 14, 255, 200, 112, 5, 255, 200, 110, 13, 255, 200, 112, 10, 255, 202, 116, 10, 255, 204, 119, 14, 255, 204, 121, 11, 255, 194, 113, 9, 255, 192, 112, 9, 255, 193, 113, 4, 255, 191, 111, 9, 255, 189, 110, 12, 255, 198, 124, 8, 255, 199, 125, 23, 255, 201, 125, 16, 255, 192, 117, 5, 255, 201, 129, 15, 255, 198, 128, 5, 255, 200, 132, 8, 255, 202, 133, 8, 255, 198, 131, 0, 255, 199, 134, 9, 255, 202, 135, 13, 255, 203, 135, 11, 255, 202, 134, 10, 255, 197, 128, 7, 255, 202, 133, 10, 255, 206, 145, 6, 255, 206, 147, 9, 255, 202, 133, 11, 255, 196, 129, 13, 255, 202, 140, 4, 255, 203, 142, 6, 255, 194, 137, 11, 255, 199, 149, 1, 255, 206, 152, 5, 255, 205, 153, 6, 255, 204, 152, 10, 255, 203, 154, 8, 255, 205, 156, 10, 255, 207, 156, 5, 255, 209, 156, 5, 255, 199, 142, 9, 255, 198, 143, 10, 255, 205, 155, 9, 255, 210, 160, 5, 255, 206, 159, 2, 255, 205, 161, 1, 255, 202, 157, 5, 255, 204, 162, 4, 255, 206, 163, 4, 255, 209, 161, 8, 255, 210, 163, 8, 255, 204, 160, 4, 255, 207, 161, 12, 255, 204, 159, 9, 255, 204, 159, 1, 255, 207, 159, 8, 255, 200, 149, 5, 255, 183, 137, 11, 255, 201, 159, 8, 255, 205, 162, 5, 255, 191, 140, 9, 255, 182, 127, 16, 255, 190, 141, 12, 255, 191, 142, 9, 255, 195, 147, 12, 255, 190, 142, 12, 255, 185, 137, 18, 255, 183, 134, 14, 255, 182, 132, 2, 255, 182, 130, 6, 255, 181, 130, 4, 255, 187, 139, 3, 255, 190, 142, 11, 255, 193, 145, 6, 255, 194, 145, 7, 255, 197, 149, 4, 255, 199, 151, 2, 255, 203, 154, 5, 255, 195, 146, 6, 255, 188, 139, 10, 255, 199, 154, 1, 255, 202, 157, 3, 255, 204, 158, 2, 255, 205, 162, 3, 255, 201, 161, 2, 255, 202, 160, 7, 255, 196, 150, 4, 255, 203, 159, 7, 255, 210, 171, 5, 255, 209, 170, 0, 255, 202, 160, 5, 255, 172, 121, 13, 255, 180, 131, 7, 255, 186, 139, 5, 255, 190, 145, 5, 255, 189, 141, 7, 255, 190, 142, 6, 255, 197, 148, 6, 255, 199, 154, 1, 255, 198, 152, 4, 255, 200, 151, 5, 255, 203, 152, 9, 255, 201, 152, 13, 255, 204, 152, 8, 255, 200, 149, 6, 255, 202, 151, 7, 255, 204, 152, 7, 255, 200, 145, 8, 255, 192, 131, 2, 255, 189, 127, 9, 255, 191, 119, 7, 255, 189, 108, 7, 255, 170, 94, 8, 255, 158, 89, 7, 255, 157, 90, 8, 255, 148, 81, 3, 255, 151, 79, 4, 255, 158, 83, 5, 255, 161, 84, 3, 255, 166, 86, 6, 255, 168, 90, 4, 255, 168, 93, 8, 255, 167, 92, 3, 255, 164, 90, 1, 255, 163, 88, 3, 255, 164, 90, 6, 255, 163, 89, 3, 255, 166, 90, 1, 255, 161, 85, 1, 255, 156, 78, 3, 255, 156, 78, 6, 255, 153, 75, 2, 255, 150, 72, 1, 255, 146, 70, 1, 255, 144, 68, 3, 255, 140, 63, 3, 255, 133, 58, 5, 255, 131, 52, 5, 255, 118, 50, 2, 255, 116, 52, 2, 255, 112, 43, 7, 255, 96, 39, 3, 255, 104, 39, 4, 255, 109, 38, 2, 255, 105, 41, 3, 255, 107, 41, 2, 255, 108, 40, 2, 255, 109, 42, 6, 255, 100, 39, 2, 255, 102, 39, 2, 255, 109, 40, 5, 255, 104, 36, 5, 255, 97, 33, 2, 255, 101, 35, 1, 255, 97, 33, 4, 255, 88, 30, 4, 255, 86, 33, 8, 255, 81, 28, 4, 255, 81, 29, 3, 255, 79, 28, 2, 255, 72, 29, 1, 255, 78, 32, 3, 255, 87, 29, 5, 255, 78, 23, 3, 255, 76, 27, 6, 255, 83, 28, 4, 255, 110, 37, 5, 255, 108, 32, 2, 255, 108, 33, 5, 255, 116, 39, 3, 255, 118, 44, 2, 255, 114, 32, 2, 255, 111, 38, 6, 255, 107, 38, 3, 255, 108, 39, 4, 255, 106, 36, 0, 255, 110, 42, 7, 255, 95, 30, 1, 255, 91, 25, 0, 255, 90, 33, 2, 255, 85, 34, 3, 255, 88, 30, 1, 255, 87, 29, 1, 255, 77, 23, 0, 255, 72, 24, 3, 255, 68, 21, 5, 255, 58, 22, 3, 255, 69, 21, 1, 255, 77, 23, 2, 255, 84, 27, 4, 255, 96, 31, 0, 255, 102, 39, 0, 255, 105, 40, 4, 255, 102, 36, 5, 255, 91, 27, 2, 255, 89, 27, 3, 255, 98, 34, 2, 255, 112, 42, 3, 255, 127, 52, 3, 255, 122, 54, 1, 255, 126, 53, 0, 255, 133, 57, 3, 255, 141, 56, 10, 255, 130, 49, 4, 255, 105, 36, 0, 255, 95, 26, 4, 255, 87, 25, 5, 255, 77, 21, 0, 255, 69, 17, 2, 255, 62, 18, 4, 255, 54, 17, 2, 255, 55, 16, 3, 255, 66, 16, 1, 255, 74, 20, 0, 255, 79, 25, 3, 255, 79, 24, 5, 255, 85, 26, 7, 255, 83, 27, 4, 255, 85, 26, 5, 255, 85, 24, 3, 255, 82, 24, 1, 255, 82, 24, 1, 255, 86, 26, 1, 255, 89, 28, 5, 255, 85, 24, 3, 255, 88, 20, 2, 255, 96, 28, 4, 255, 105, 39, 2, 255, 103, 38, 2, 255, 90, 27, 3, 255, 91, 26, 3, 255, 88, 22, 2, 255, 92, 26, 4, 255, 14, 9, 3, 255, 6, 2, 0, 255, 5, 1, 1, 255, 9, 5, 1, 255, 11, 5, 2, 255, 8, 3, 0, 255, 9, 5, 2, 255, 9, 6, 1, 255, 10, 7, 3, 255, 11, 7, 3, 255, 11, 6, 3, 255, 14, 9, 3, 255, 15, 9, 3, 255, 15, 10, 2, 255, 16, 11, 1, 255, 19, 15, 3, 255, 23, 18, 7, 255, 23, 14, 4, 255, 28, 18, 7, 255, 29, 23, 10, 255, 30, 24, 13, 255, 29, 27, 15, 255, 31, 26, 12, 255, 36, 30, 13, 255, 35, 31, 16, 255, 30, 29, 16, 255, 32, 38, 12, 255, 44, 40, 10, 255, 45, 42, 17, 255, 40, 39, 22, 255, 50, 42, 12, 255, 51, 48, 10, 255, 49, 48, 10, 255, 58, 47, 3, 255, 57, 44, 16, 255, 53, 53, 12, 255, 52, 54, 9, 255, 52, 47, 3, 255, 65, 50, 4, 255, 102, 64, 3, 255, 118, 70, 10, 255, 156, 96, 40, 255, 166, 119, 71, 255, 173, 121, 67, 255, 164, 121, 72, 255, 141, 112, 79, 255, 115, 96, 60, 255, 97, 84, 59, 255, 79, 77, 54, 255, 72, 68, 49, 255, 53, 55, 34, 255, 56, 57, 17, 255, 56, 60, 11, 255, 57, 49, 2, 255, 75, 41, 8, 255, 71, 36, 2, 255, 63, 37, 5, 255, 62, 41, 6, 255, 57, 35, 4, 255, 62, 33, 4, 255, 58, 34, 5, 255, 45, 32, 2, 255, 51, 37, 3, 255, 53, 34, 3, 255, 59, 28, 2, 255, 58, 26, 2, 255, 59, 29, 3, 255, 58, 28, 2, 255, 65, 32, 7, 255, 65, 30, 6, 255, 64, 34, 2, 255, 72, 34, 3, 255, 67, 26, 0, 255, 62, 29, 2, 255, 62, 30, 2, 255, 67, 30, 3, 255, 64, 27, 0, 255, 64, 30, 3, 255, 64, 34, 5, 255, 60, 34, 3, 255, 62, 34, 4, 255, 61, 31, 1, 255, 67, 33, 5, 255, 62, 30, 3, 255, 65, 34, 1, 255, 66, 37, 0, 255, 66, 37, 4, 255, 66, 34, 7, 255, 68, 33, 2, 255, 73, 35, 1, 255, 73, 38, 5, 255, 72, 41, 6, 255, 78, 38, 0, 255, 78, 35, 3, 255, 77, 37, 8, 255, 78, 35, 2, 255, 69, 39, 4, 255, 75, 37, 3, 255, 74, 40, 3, 255, 75, 42, 4, 255, 79, 39, 2, 255, 80, 40, 1, 255, 73, 41, 4, 255, 72, 42, 3, 255, 84, 40, 5, 255, 77, 42, 2, 255, 81, 42, 6, 255, 93, 48, 9, 255, 107, 50, 8, 255, 129, 65, 1, 255, 139, 69, 4, 255, 151, 79, 3, 255, 153, 77, 2, 255, 159, 77, 2, 255, 178, 90, 1, 255, 188, 100, 1, 255, 191, 99, 5, 255, 186, 88, 0, 255, 179, 80, 11, 255, 173, 84, 14, 255, 179, 88, 2, 255, 182, 81, 3, 255, 175, 80, 0, 255, 159, 68, 10, 255, 177, 88, 9, 255, 189, 97, 1, 255, 169, 73, 5, 255, 159, 70, 3, 255, 168, 70, 3, 255, 186, 91, 11, 255, 190, 97, 2, 255, 190, 96, 3, 255, 190, 94, 4, 255, 187, 96, 0, 255, 191, 100, 10, 255, 191, 99, 7, 255, 192, 102, 1, 255, 192, 99, 1, 255, 192, 96, 5, 255, 193, 100, 7, 255, 193, 100, 1, 255, 196, 100, 7, 255, 195, 102, 3, 255, 196, 106, 9, 255, 187, 97, 4, 255, 185, 94, 1, 255, 190, 99, 6, 255, 194, 104, 5, 255, 197, 107, 6, 255, 192, 104, 4, 255, 190, 102, 3, 255, 190, 103, 3, 255, 188, 99, 6, 255, 192, 102, 7, 255, 198, 112, 2, 255, 198, 113, 4, 255, 199, 113, 7, 255, 199, 113, 7, 255, 197, 111, 3, 255, 201, 114, 7, 255, 203, 115, 4, 255, 204, 117, 1, 255, 194, 108, 1, 255, 186, 99, 4, 255, 194, 106, 16, 255, 197, 112, 12, 255, 197, 113, 4, 255, 192, 105, 5, 255, 193, 106, 8, 255, 198, 113, 12, 255, 197, 114, 12, 255, 196, 116, 14, 255, 187, 106, 15, 255, 185, 106, 10, 255, 191, 114, 3, 255, 192, 114, 4, 255, 194, 116, 11, 255, 198, 122, 19, 255, 196, 122, 18, 255, 194, 121, 10, 255, 189, 116, 7, 255, 198, 127, 14, 255, 197, 129, 13, 255, 194, 125, 14, 255, 198, 128, 16, 255, 196, 128, 4, 255, 196, 129, 0, 255, 199, 131, 3, 255, 194, 124, 6, 255, 192, 122, 13, 255, 187, 121, 5, 255, 190, 121, 13, 255, 193, 129, 16, 255, 194, 133, 17, 255, 197, 128, 4, 255, 189, 123, 14, 255, 194, 130, 15, 255, 189, 126, 7, 255, 182, 129, 21, 255, 193, 144, 11, 255, 200, 145, 8, 255, 200, 147, 0, 255, 196, 147, 11, 255, 198, 147, 16, 255, 200, 149, 4, 255, 202, 153, 8, 255, 191, 137, 11, 255, 186, 130, 8, 255, 195, 144, 11, 255, 193, 145, 5, 255, 197, 147, 4, 255, 197, 148, 12, 255, 200, 154, 11, 255, 198, 154, 4, 255, 198, 156, 3, 255, 196, 150, 7, 255, 196, 146, 15, 255, 203, 153, 11, 255, 203, 153, 8, 255, 197, 149, 10, 255, 194, 150, 5, 255, 196, 153, 3, 255, 199, 153, 6, 255, 194, 145, 8, 255, 192, 145, 2, 255, 189, 144, 4, 255, 180, 139, 6, 255, 176, 134, 9, 255, 179, 132, 17, 255, 165, 115, 3, 255, 174, 124, 10, 255, 176, 126, 15, 255, 177, 124, 4, 255, 183, 128, 9, 255, 186, 134, 9, 255, 183, 134, 2, 255, 182, 134, 9, 255, 180, 132, 7, 255, 184, 136, 6, 255, 187, 140, 8, 255, 191, 145, 3, 255, 190, 141, 5, 255, 194, 146, 3, 255, 199, 151, 4, 255, 195, 149, 4, 255, 193, 147, 6, 255, 195, 150, 3, 255, 201, 159, 5, 255, 200, 159, 3, 255, 196, 153, 5, 255, 199, 155, 3, 255, 199, 158, 2, 255, 202, 161, 4, 255, 204, 160, 5, 255, 202, 159, 1, 255, 209, 169, 7, 255, 207, 164, 1, 255, 209, 167, 1, 255, 197, 151, 3, 255, 186, 135, 10, 255, 179, 127, 11, 255, 187, 138, 8, 255, 188, 139, 6, 255, 189, 137, 4, 255, 195, 142, 9, 255, 198, 149, 6, 255, 198, 150, 12, 255, 200, 154, 9, 255, 200, 152, 2, 255, 204, 154, 6, 255, 205, 152, 2, 255, 202, 148, 2, 255, 202, 148, 3, 255, 205, 149, 5, 255, 198, 137, 5, 255, 199, 131, 11, 255, 193, 129, 9, 255, 185, 114, 13, 255, 170, 92, 9, 255, 156, 86, 6, 255, 155, 86, 4, 255, 163, 92, 6, 255, 159, 93, 5, 255, 160, 91, 7, 255, 167, 98, 2, 255, 173, 103, 5, 255, 171, 100, 5, 255, 169, 99, 2, 255, 173, 97, 12, 255, 169, 95, 4, 255, 165, 92, 0, 255, 163, 89, 3, 255, 164, 90, 7, 255, 164, 89, 2, 255, 164, 87, 0, 255, 160, 83, 0, 255, 157, 81, 1, 255, 158, 82, 2, 255, 157, 80, 2, 255, 155, 77, 2, 255, 152, 72, 2, 255, 148, 69, 3, 255, 142, 68, 2, 255, 144, 66, 4, 255, 140, 58, 5, 255, 127, 48, 2, 255, 113, 48, 4, 255, 114, 44, 5, 255, 104, 37, 1, 255, 107, 42, 5, 255, 110, 39, 2, 255, 108, 43, 2, 255, 100, 40, 0, 255, 101, 37, 1, 255, 105, 39, 5, 255, 102, 38, 3, 255, 96, 36, 2, 255, 89, 32, 2, 255, 85, 31, 2, 255, 82, 27, 3, 255, 79, 22, 6, 255, 78, 26, 7, 255, 72, 26, 4, 255, 72, 28, 4, 255, 72, 26, 3, 255, 75, 29, 7, 255, 76, 27, 4, 255, 75, 26, 1, 255, 81, 35, 3, 255, 82, 34, 2, 255, 84, 27, 0, 255, 85, 29, 3, 255, 79, 27, 2, 255, 96, 27, 7, 255, 105, 35, 4, 255, 109, 40, 7, 255, 114, 38, 4, 255, 117, 42, 3, 255, 108, 33, 4, 255, 109, 33, 2, 255, 109, 38, 1, 255, 103, 36, 3, 255, 99, 31, 1, 255, 109, 38, 2, 255, 112, 38, 2, 255, 108, 36, 6, 255, 94, 34, 3, 255, 90, 31, 1, 255, 92, 27, 5, 255, 77, 27, 2, 255, 68, 22, 1, 255, 67, 20, 3, 255, 65, 21, 2, 255, 71, 25, 5, 255, 72, 26, 1, 255, 85, 31, 6, 255, 94, 31, 7, 255, 102, 38, 5, 255, 101, 34, 2, 255, 101, 34, 3, 255, 106, 38, 4, 255, 107, 40, 4, 255, 113, 47, 5, 255, 123, 54, 7, 255, 130, 56, 4, 255, 131, 53, 2, 255, 124, 53, 2, 255, 136, 60, 6, 255, 133, 59, 2, 255, 132, 52, 6, 255, 113, 37, 4, 255, 94, 29, 1, 255, 86, 28, 3, 255, 72, 19, 2, 255, 65, 16, 3, 255, 65, 20, 4, 255, 59, 17, 0, 255, 60, 18, 3, 255, 65, 18, 5, 255, 75, 21, 5, 255, 82, 24, 4, 255, 82, 25, 1, 255, 80, 27, 2, 255, 79, 26, 6, 255, 85, 25, 3, 255, 87, 24, 3, 255, 86, 22, 2, 255, 86, 23, 3, 255, 86, 23, 1, 255, 89, 23, 0, 255, 90, 28, 2, 255, 88, 29, 1, 255, 87, 25, 2, 255, 89, 25, 3, 255, 99, 31, 0, 255, 109, 37, 0, 255, 108, 35, 4, 255, 99, 33, 3, 255, 86, 24, 0, 255, 84, 24, 1, 255, 12, 7, 3, 255, 7, 2, 0, 255, 6, 2, 2, 255, 9, 4, 1, 255, 10, 3, 0, 255, 10, 5, 1, 255, 13, 9, 5, 255, 9, 6, 1, 255, 9, 6, 1, 255, 12, 8, 4, 255, 14, 9, 4, 255, 12, 7, 1, 255, 14, 8, 3, 255, 19, 10, 6, 255, 18, 12, 4, 255, 18, 13, 2, 255, 19, 17, 5, 255, 18, 17, 4, 255, 16, 17, 2, 255, 19, 20, 3, 255, 37, 26, 14, 255, 34, 25, 16, 255, 34, 28, 16, 255, 31, 32, 14, 255, 34, 33, 14, 255, 47, 38, 14, 255, 38, 43, 6, 255, 41, 40, 21, 255, 40, 39, 20, 255, 41, 42, 14, 255, 56, 48, 11, 255, 48, 51, 12, 255, 47, 52, 8, 255, 51, 52, 9, 255, 45, 47, 9, 255, 53, 44, 11, 255, 67, 46, 6, 255, 107, 65, 7, 255, 145, 76, 14, 255, 159, 95, 11, 255, 167, 107, 18, 255, 162, 123, 57, 255, 137, 115, 63, 255, 107, 95, 68, 255, 86, 84, 61, 255, 74, 82, 72, 255, 67, 73, 65, 255, 61, 67, 59, 255, 69, 65, 57, 255, 65, 64, 45, 255, 62, 65, 42, 255, 66, 61, 26, 255, 66, 60, 21, 255, 68, 58, 3, 255, 65, 39, 2, 255, 63, 35, 7, 255, 55, 35, 4, 255, 56, 39, 9, 255, 49, 36, 1, 255, 59, 37, 5, 255, 62, 34, 5, 255, 52, 28, 4, 255, 55, 26, 5, 255, 51, 24, 3, 255, 51, 30, 3, 255, 56, 30, 4, 255, 58, 34, 3, 255, 58, 31, 0, 255, 65, 28, 0, 255, 68, 34, 0, 255, 67, 31, 2, 255, 66, 32, 3, 255, 62, 33, 1, 255, 64, 31, 3, 255, 60, 29, 2, 255, 58, 32, 2, 255, 59, 33, 3, 255, 61, 30, 5, 255, 60, 30, 4, 255, 59, 31, 3, 255, 60, 35, 5, 255, 60, 32, 2, 255, 62, 32, 3, 255, 62, 33, 2, 255, 61, 32, 2, 255, 61, 30, 1, 255, 62, 33, 2, 255, 66, 36, 2, 255, 71, 37, 5, 255, 72, 37, 5, 255, 67, 35, 2, 255, 66, 38, 1, 255, 73, 41, 1, 255, 75, 39, 4, 255, 71, 38, 3, 255, 70, 38, 0, 255, 75, 41, 2, 255, 77, 36, 0, 255, 75, 38, 2, 255, 71, 42, 4, 255, 77, 40, 2, 255, 76, 43, 6, 255, 71, 41, 7, 255, 77, 45, 1, 255, 79, 45, 0, 255, 75, 42, 0, 255, 68, 39, 5, 255, 74, 44, 2, 255, 77, 44, 0, 255, 79, 38, 2, 255, 79, 44, 6, 255, 90, 48, 1, 255, 111, 52, 6, 255, 120, 52, 6, 255, 119, 52, 10, 255, 139, 66, 5, 255, 165, 77, 8, 255, 177, 86, 6, 255, 165, 80, 1, 255, 178, 91, 8, 255, 184, 92, 0, 255, 181, 91, 5, 255, 182, 96, 5, 255, 183, 92, 6, 255, 183, 91, 4, 255, 179, 90, 1, 255, 170, 80, 4, 255, 173, 85, 6, 255, 158, 68, 4, 255, 170, 78, 8, 255, 187, 96, 3, 255, 188, 93, 0, 255, 190, 95, 6, 255, 192, 96, 7, 255, 191, 99, 6, 255, 189, 100, 2, 255, 191, 100, 6, 255, 188, 97, 5, 255, 189, 98, 7, 255, 185, 94, 6, 255, 191, 100, 6, 255, 193, 100, 8, 255, 194, 102, 3, 255, 194, 101, 1, 255, 189, 95, 6, 255, 187, 95, 7, 255, 194, 105, 7, 255, 197, 109, 2, 255, 194, 106, 0, 255, 193, 106, 2, 255, 194, 107, 5, 255, 193, 108, 7, 255, 193, 107, 10, 255, 191, 106, 6, 255, 195, 110, 3, 255, 196, 113, 10, 255, 195, 112, 10, 255, 195, 111, 7, 255, 200, 116, 5, 255, 202, 116, 5, 255, 203, 117, 10, 255, 205, 118, 9, 255, 200, 117, 4, 255, 195, 114, 9, 255, 195, 109, 11, 255, 192, 109, 12, 255, 195, 112, 8, 255, 196, 113, 8, 255, 195, 113, 5, 255, 194, 111, 5, 255, 189, 109, 6, 255, 187, 109, 3, 255, 187, 110, 8, 255, 190, 114, 8, 255, 196, 122, 2, 255, 194, 118, 9, 255, 193, 119, 9, 255, 192, 118, 7, 255, 194, 121, 5, 255, 189, 118, 3, 255, 182, 111, 6, 255, 190, 120, 15, 255, 190, 123, 8, 255, 188, 121, 6, 255, 192, 121, 13, 255, 189, 119, 13, 255, 189, 119, 10, 255, 194, 126, 10, 255, 184, 117, 1, 255, 175, 107, 8, 255, 187, 124, 17, 255, 180, 119, 12, 255, 181, 118, 21, 255, 181, 122, 4, 255, 182, 120, 12, 255, 178, 118, 20, 255, 178, 123, 4, 255, 178, 122, 7, 255, 183, 129, 16, 255, 188, 140, 9, 255, 186, 139, 7, 255, 193, 142, 3, 255, 197, 143, 11, 255, 194, 140, 15, 255, 189, 140, 7, 255, 193, 143, 10, 255, 183, 126, 16, 255, 173, 115, 12, 255, 191, 139, 11, 255, 194, 143, 12, 255, 183, 128, 12, 255, 181, 126, 12, 255, 189, 138, 3, 255, 194, 144, 10, 255, 194, 143, 11, 255, 187, 135, 11, 255, 186, 132, 11, 255, 187, 136, 5, 255, 187, 140, 6, 255, 185, 139, 10, 255, 178, 135, 4, 255, 184, 141, 8, 255, 190, 145, 7, 255, 187, 139, 6, 255, 178, 133, 11, 255, 181, 137, 7, 255, 178, 132, 8, 255, 176, 134, 7, 255, 174, 133, 12, 255, 164, 122, 6, 255, 166, 119, 7, 255, 168, 118, 6, 255, 175, 124, 6, 255, 177, 124, 9, 255, 182, 131, 11, 255, 180, 132, 5, 255, 178, 132, 5, 255, 181, 134, 8, 255, 178, 129, 9, 255, 180, 130, 15, 255, 185, 138, 6, 255, 185, 138, 2, 255, 189, 142, 0, 255, 191, 143, 9, 255, 194, 146, 5, 255, 194, 147, 7, 255, 196, 150, 2, 255, 200, 153, 10, 255, 192, 147, 3, 255, 194, 146, 11, 255, 200, 154, 9, 255, 198, 159, 0, 255, 199, 159, 0, 255, 201, 156, 1, 255, 203, 159, 3, 255, 203, 160, 4, 255, 203, 156, 8, 255, 205, 158, 8, 255, 193, 145, 0, 255, 191, 140, 11, 255, 169, 115, 8, 255, 184, 133, 10, 255, 192, 144, 7, 255, 185, 133, 1, 255, 189, 134, 6, 255, 197, 147, 0, 255, 198, 152, 4, 255, 199, 155, 3, 255, 201, 152, 7, 255, 203, 147, 13, 255, 195, 139, 3, 255, 199, 141, 4, 255, 202, 145, 4, 255, 199, 139, 5, 255, 191, 124, 5, 255, 190, 119, 8, 255, 183, 117, 2, 255, 164, 96, 2, 255, 156, 87, 3, 255, 163, 97, 4, 255, 162, 91, 9, 255, 170, 95, 9, 255, 172, 104, 0, 255, 181, 113, 11, 255, 173, 106, 1, 255, 172, 105, 3, 255, 170, 101, 4, 255, 170, 99, 7, 255, 169, 93, 6, 255, 166, 93, 3, 255, 165, 91, 3, 255, 164, 91, 6, 255, 166, 91, 8, 255, 164, 88, 5, 255, 162, 85, 3, 255, 158, 81, 3, 255, 155, 79, 3, 255, 152, 75, 0, 255, 155, 76, 4, 255, 154, 76, 6, 255, 152, 72, 5, 255, 146, 70, 1, 255, 146, 68, 1, 255, 147, 63, 1, 255, 134, 59, 2, 255, 127, 51, 4, 255, 113, 41, 2, 255, 110, 41, 1, 255, 105, 43, 2, 255, 99, 37, 1, 255, 112, 37, 5, 255, 107, 41, 3, 255, 103, 41, 3, 255, 103, 33, 3, 255, 97, 36, 3, 255, 101, 37, 5, 255, 91, 32, 1, 255, 79, 29, 0, 255, 83, 30, 5, 255, 86, 28, 7, 255, 84, 25, 4, 255, 84, 28, 6, 255, 82, 29, 3, 255, 79, 30, 0, 255, 81, 31, 1, 255, 84, 31, 1, 255, 84, 29, 0, 255, 89, 30, 1, 255, 82, 30, 0, 255, 74, 31, 0, 255, 82, 29, 4, 255, 84, 25, 9, 255, 76, 30, 11, 255, 76, 25, 1, 255, 94, 33, 1, 255, 106, 37, 2, 255, 103, 28, 1, 255, 102, 38, 2, 255, 104, 39, 7, 255, 115, 41, 3, 255, 109, 36, 3, 255, 101, 33, 4, 255, 100, 34, 2, 255, 102, 31, 1, 255, 110, 35, 2, 255, 110, 37, 0, 255, 98, 33, 1, 255, 87, 28, 1, 255, 74, 25, 2, 255, 56, 24, 0, 255, 57, 19, 0, 255, 72, 23, 5, 255, 76, 29, 2, 255, 82, 24, 5, 255, 81, 30, 2, 255, 96, 39, 1, 255, 105, 39, 4, 255, 98, 33, 1, 255, 101, 32, 0, 255, 109, 39, 3, 255, 117, 48, 5, 255, 121, 52, 2, 255, 126, 54, 1, 255, 133, 58, 2, 255, 134, 58, 2, 255, 131, 56, 1, 255, 137, 58, 2, 255, 138, 59, 2, 255, 121, 52, 1, 255, 117, 50, 6, 255, 102, 35, 2, 255, 89, 27, 4, 255, 76, 25, 0, 255, 66, 19, 3, 255, 63, 15, 5, 255, 60, 19, 1, 255, 61, 19, 1, 255, 56, 16, 2, 255, 63, 21, 4, 255, 79, 24, 1, 255, 82, 24, 3, 255, 79, 22, 4, 255, 81, 20, 1, 255, 89, 22, 3, 255, 85, 23, 3, 255, 85, 23, 2, 255, 89, 25, 4, 255, 89, 26, 5, 255, 85, 24, 2, 255, 87, 23, 4, 255, 93, 24, 2, 255, 93, 26, 1, 255, 84, 22, 0, 255, 79, 18, 2, 255, 85, 21, 5, 255, 90, 21, 1, 255, 101, 27, 2, 255, 105, 30, 2, 255, 92, 23, 0, 255, 84, 20, 3, 255, 9, 6, 1, 255, 5, 3, 1, 255, 5, 3, 2, 255, 8, 3, 0, 255, 8, 4, 0, 255, 10, 7, 2, 255, 11, 8, 4, 255, 12, 7, 3, 255, 9, 5, 1, 255, 13, 8, 4, 255, 14, 9, 3, 255, 14, 10, 2, 255, 15, 11, 3, 255, 17, 11, 4, 255, 19, 13, 4, 255, 21, 14, 3, 255, 21, 15, 4, 255, 19, 17, 4, 255, 21, 23, 4, 255, 21, 20, 1, 255, 31, 25, 8, 255, 42, 32, 18, 255, 34, 32, 17, 255, 35, 37, 20, 255, 41, 39, 12, 255, 49, 44, 10, 255, 42, 45, 7, 255, 48, 44, 12, 255, 43, 44, 13, 255, 39, 50, 17, 255, 53, 47, 18, 255, 50, 54, 7, 255, 44, 48, 6, 255, 52, 49, 13, 255, 78, 54, 8, 255, 126, 71, 19, 255, 165, 91, 16, 255, 167, 100, 7, 255, 143, 89, 9, 255, 101, 87, 3, 255, 94, 76, 23, 255, 81, 74, 51, 255, 63, 65, 50, 255, 59, 70, 61, 255, 72, 70, 66, 255, 75, 79, 65, 255, 70, 78, 59, 255, 62, 68, 54, 255, 69, 67, 56, 255, 63, 62, 50, 255, 60, 67, 41, 255, 62, 64, 31, 255, 63, 55, 23, 255, 68, 56, 19, 255, 62, 46, 3, 255, 57, 33, 2, 255, 59, 35, 3, 255, 56, 33, 3, 255, 59, 38, 7, 255, 57, 40, 6, 255, 57, 36, 6, 255, 55, 24, 5, 255, 54, 24, 5, 255, 57, 29, 6, 255, 57, 27, 1, 255, 61, 34, 4, 255, 62, 32, 1, 255, 68, 33, 2, 255, 67, 30, 1, 255, 67, 33, 1, 255, 68, 33, 4, 255, 63, 30, 1, 255, 67, 34, 0, 255, 68, 31, 1, 255, 71, 33, 7, 255, 68, 33, 5, 255, 65, 34, 2, 255, 64, 34, 2, 255, 56, 30, 1, 255, 60, 30, 2, 255, 63, 29, 3, 255, 63, 31, 3, 255, 56, 31, 1, 255, 58, 33, 5, 255, 61, 31, 4, 255, 64, 32, 4, 255, 63, 32, 5, 255, 66, 35, 5, 255, 69, 37, 5, 255, 67, 33, 3, 255, 72, 36, 2, 255, 75, 45, 4, 255, 70, 41, 2, 255, 74, 37, 1, 255, 77, 39, 3, 255, 71, 41, 6, 255, 76, 36, 2, 255, 86, 42, 2, 255, 86, 39, 2, 255, 82, 39, 3, 255, 77, 41, 1, 255, 79, 43, 5, 255, 76, 43, 6, 255, 74, 40, 4, 255, 78, 44, 2, 255, 82, 41, 3, 255, 83, 42, 3, 255, 76, 38, 0, 255, 82, 47, 3, 255, 81, 44, 8, 255, 81, 41, 6, 255, 79, 40, 1, 255, 78, 43, 6, 255, 78, 45, 4, 255, 76, 40, 7, 255, 76, 39, 9, 255, 82, 39, 12, 255, 107, 52, 10, 255, 139, 69, 2, 255, 158, 72, 8, 255, 168, 79, 11, 255, 175, 92, 3, 255, 177, 89, 3, 255, 177, 86, 3, 255, 176, 86, 7, 255, 178, 90, 8, 255, 180, 92, 12, 255, 176, 86, 5, 255, 166, 84, 1, 255, 172, 86, 6, 255, 183, 92, 5, 255, 182, 90, 2, 255, 187, 95, 2, 255, 184, 90, 4, 255, 183, 89, 3, 255, 184, 92, 2, 255, 172, 77, 3, 255, 180, 87, 9, 255, 188, 98, 5, 255, 189, 99, 6, 255, 192, 100, 5, 255, 191, 101, 6, 255, 193, 101, 4, 255, 197, 104, 2, 255, 196, 103, 6, 255, 186, 93, 5, 255, 189, 102, 2, 255, 195, 108, 3, 255, 194, 108, 2, 255, 194, 109, 3, 255, 190, 105, 2, 255, 191, 107, 11, 255, 191, 109, 10, 255, 194, 110, 4, 255, 194, 109, 4, 255, 192, 109, 10, 255, 191, 110, 4, 255, 195, 114, 4, 255, 199, 115, 12, 255, 198, 112, 12, 255, 197, 114, 6, 255, 197, 109, 5, 255, 188, 106, 9, 255, 189, 112, 11, 255, 187, 101, 10, 255, 180, 95, 16, 255, 189, 109, 17, 255, 190, 111, 15, 255, 192, 109, 12, 255, 195, 111, 13, 255, 191, 109, 12, 255, 190, 111, 8, 255, 187, 108, 11, 255, 177, 98, 6, 255, 181, 107, 1, 255, 185, 114, 7, 255, 183, 112, 9, 255, 183, 111, 4, 255, 186, 113, 9, 255, 185, 115, 9, 255, 172, 102, 7, 255, 178, 109, 14, 255, 182, 116, 6, 255, 183, 115, 3, 255, 183, 110, 8, 255, 172, 99, 19, 255, 170, 105, 23, 255, 179, 116, 9, 255, 177, 114, 10, 255, 170, 105, 14, 255, 177, 117, 13, 255, 176, 120, 12, 255, 179, 120, 11, 255, 180, 121, 11, 255, 174, 123, 9, 255, 176, 125, 12, 255, 174, 124, 16, 255, 174, 125, 8, 255, 181, 126, 14, 255, 183, 131, 14, 255, 181, 130, 17, 255, 181, 132, 22, 255, 179, 131, 17, 255, 177, 131, 13, 255, 177, 132, 8, 255, 176, 132, 10, 255, 184, 137, 14, 255, 173, 124, 9, 255, 169, 123, 7, 255, 176, 129, 18, 255, 178, 130, 10, 255, 174, 128, 7, 255, 171, 124, 6, 255, 178, 131, 2, 255, 182, 134, 6, 255, 179, 132, 10, 255, 174, 129, 13, 255, 175, 131, 6, 255, 179, 135, 8, 255, 181, 138, 8, 255, 176, 134, 7, 255, 174, 131, 13, 255, 172, 127, 10, 255, 167, 119, 8, 255, 165, 119, 7, 255, 168, 120, 15, 255, 161, 112, 9, 255, 161, 117, 11, 255, 163, 119, 11, 255, 171, 125, 5, 255, 173, 120, 10, 255, 167, 115, 6, 255, 163, 112, 11, 255, 160, 109, 21, 255, 166, 117, 18, 255, 173, 122, 13, 255, 175, 123, 8, 255, 176, 123, 3, 255, 181, 130, 2, 255, 181, 132, 11, 255, 180, 132, 5, 255, 181, 131, 6, 255, 184, 135, 7, 255, 186, 138, 7, 255, 186, 139, 2, 255, 181, 132, 7, 255, 190, 140, 11, 255, 198, 147, 9, 255, 184, 129, 14, 255, 183, 133, 8, 255, 199, 155, 4, 255, 197, 156, 2, 255, 196, 154, 3, 255, 201, 156, 4, 255, 202, 156, 2, 255, 191, 145, 1, 255, 196, 148, 11, 255, 198, 152, 7, 255, 197, 149, 7, 255, 196, 150, 2, 255, 183, 132, 19, 255, 181, 130, 17, 255, 192, 146, 9, 255, 186, 138, 2, 255, 189, 136, 7, 255, 198, 147, 0, 255, 203, 153, 7, 255, 204, 155, 4, 255, 203, 150, 6, 255, 195, 135, 4, 255, 196, 136, 5, 255, 200, 142, 3, 255, 199, 144, 1, 255, 192, 134, 4, 255, 186, 122, 10, 255, 180, 115, 9, 255, 182, 113, 3, 255, 185, 118, 5, 255, 176, 113, 4, 255, 174, 110, 2, 255, 179, 109, 5, 255, 177, 107, 7, 255, 176, 108, 1, 255, 178, 112, 6, 255, 173, 106, 2, 255, 172, 103, 7, 255, 173, 100, 5, 255, 168, 93, 4, 255, 171, 96, 2, 255, 170, 95, 6, 255, 165, 93, 7, 255, 164, 93, 4, 255, 163, 92, 3, 255, 162, 88, 6, 255, 159, 85, 4, 255, 159, 84, 3, 255, 157, 80, 4, 255, 156, 78, 4, 255, 158, 79, 8, 255, 151, 72, 6, 255, 150, 71, 5, 255, 151, 72, 1, 255, 146, 67, 2, 255, 140, 63, 2, 255, 139, 60, 3, 255, 133, 60, 7, 255, 117, 47, 3, 255, 109, 41, 2, 255, 107, 44, 4, 255, 101, 36, 3, 255, 106, 35, 6, 255, 110, 42, 4, 255, 110, 40, 3, 255, 100, 34, 3, 255, 97, 39, 5, 255, 89, 35, 2, 255, 87, 35, 1, 255, 92, 35, 4, 255, 97, 36, 7, 255, 95, 29, 3, 255, 86, 29, 1, 255, 81, 30, 1, 255, 76, 27, 2, 255, 76, 28, 3, 255, 81, 29, 4, 255, 79, 30, 2, 255, 82, 28, 1, 255, 90, 29, 3, 255, 97, 34, 6, 255, 97, 37, 2, 255, 106, 41, 5, 255, 107, 38, 5, 255, 100, 36, 3, 255, 95, 30, 2, 255, 88, 28, 4, 255, 99, 32, 1, 255, 110, 30, 4, 255, 105, 36, 3, 255, 109, 35, 1, 255, 114, 39, 2, 255, 109, 36, 2, 255, 103, 30, 2, 255, 105, 33, 4, 255, 106, 34, 5, 255, 99, 33, 2, 255, 95, 31, 1, 255, 101, 32, 3, 255, 83, 25, 2, 255, 61, 21, 1, 255, 62, 24, 4, 255, 69, 24, 4, 255, 81, 25, 4, 255, 81, 27, 6, 255, 84, 29, 2, 255, 98, 37, 0, 255, 107, 43, 0, 255, 108, 39, 3, 255, 105, 34, 2, 255, 119, 44, 2, 255, 128, 54, 5, 255, 124, 52, 1, 255, 127, 55, 3, 255, 131, 57, 3, 255, 135, 58, 4, 255, 134, 57, 3, 255, 141, 59, 3, 255, 141, 59, 5, 255, 134, 55, 1, 255, 131, 50, 2, 255, 113, 46, 6, 255, 89, 31, 2, 255, 77, 20, 6, 255, 70, 22, 2, 255, 69, 19, 3, 255, 75, 21, 2, 255, 69, 23, 4, 255, 58, 16, 6, 255, 64, 16, 4, 255, 78, 22, 4, 255, 77, 24, 0, 255, 78, 23, 2, 255, 79, 22, 5, 255, 81, 23, 3, 255, 81, 21, 2, 255, 79, 23, 3, 255, 82, 23, 2, 255, 86, 24, 3, 255, 85, 23, 3, 255, 82, 21, 2, 255, 82, 20, 2, 255, 85, 21, 4, 255, 82, 17, 4, 255, 79, 18, 4, 255, 77, 21, 0, 255, 78, 21, 0, 255, 89, 27, 4, 255, 100, 33, 5, 255, 104, 31, 5, 255, 86, 22, 1, 255, 77, 20, 5, 255, 5, 2, 0, 255, 5, 3, 2, 255, 7, 5, 4, 255, 9, 5, 2, 255, 7, 4, 0, 255, 8, 6, 1, 255, 8, 6, 2, 255, 10, 8, 1, 255, 10, 6, 0, 255, 14, 10, 2, 255, 16, 11, 3, 255, 17, 12, 3, 255, 17, 14, 4, 255, 13, 14, 4, 255, 18, 15, 3, 255, 21, 18, 4, 255, 23, 20, 5, 255, 25, 23, 5, 255, 28, 23, 3, 255, 28, 26, 6, 255, 28, 29, 3, 255, 41, 35, 8, 255, 42, 36, 22, 255, 35, 40, 18, 255, 39, 40, 19, 255, 41, 39, 11, 255, 44, 43, 10, 255, 48, 46, 17, 255, 54, 50, 10, 255, 47, 50, 11, 255, 50, 43, 6, 255, 66, 49, 5, 255, 111, 68, 20, 255, 157, 94, 22, 255, 177, 107, 22, 255, 154, 107, 12, 255, 129, 103, 18, 255, 101, 73, 15, 255, 60, 42, 5, 255, 35, 35, 13, 255, 48, 54, 35, 255, 79, 77, 49, 255, 71, 73, 37, 255, 68, 74, 66, 255, 73, 73, 67, 255, 72, 77, 65, 255, 66, 74, 63, 255, 64, 68, 54, 255, 66, 65, 56, 255, 65, 61, 43, 255, 65, 63, 41, 255, 67, 66, 40, 255, 65, 58, 16, 255, 64, 54, 27, 255, 59, 51, 15, 255, 55, 40, 5, 255, 51, 30, 7, 255, 54, 31, 2, 255, 66, 36, 5, 255, 55, 38, 3, 255, 57, 44, 11, 255, 56, 32, 4, 255, 54, 26, 0, 255, 55, 25, 1, 255, 63, 25, 4, 255, 64, 31, 5, 255, 61, 28, 2, 255, 66, 31, 4, 255, 62, 30, 3, 255, 58, 30, 4, 255, 62, 33, 4, 255, 67, 31, 1, 255, 72, 34, 3, 255, 66, 34, 4, 255, 66, 32, 4, 255, 66, 31, 3, 255, 63, 32, 2, 255, 63, 36, 3, 255, 56, 33, 0, 255, 59, 30, 1, 255, 67, 30, 3, 255, 69, 32, 5, 255, 61, 32, 1, 255, 61, 32, 2, 255, 64, 33, 2, 255, 70, 38, 2, 255, 70, 35, 1, 255, 72, 37, 4, 255, 72, 41, 4, 255, 72, 40, 6, 255, 77, 36, 3, 255, 85, 39, 3, 255, 80, 39, 3, 255, 84, 40, 3, 255, 88, 40, 1, 255, 84, 39, 4, 255, 84, 42, 4, 255, 83, 37, 0, 255, 82, 38, 2, 255, 81, 42, 3, 255, 80, 43, 2, 255, 82, 43, 3, 255, 81, 44, 4, 255, 81, 43, 4, 255, 83, 40, 3, 255, 84, 40, 1, 255, 87, 42, 0, 255, 83, 44, 1, 255, 81, 45, 3, 255, 80, 45, 2, 255, 83, 46, 1, 255, 87, 50, 3, 255, 79, 47, 3, 255, 80, 48, 1, 255, 89, 49, 3, 255, 90, 48, 1, 255, 84, 51, 5, 255, 80, 48, 4, 255, 97, 54, 1, 255, 100, 46, 0, 255, 104, 47, 7, 255, 124, 61, 1, 255, 144, 69, 4, 255, 159, 77, 3, 255, 173, 86, 9, 255, 177, 90, 4, 255, 176, 90, 0, 255, 175, 84, 2, 255, 178, 91, 5, 255, 182, 94, 5, 255, 180, 89, 1, 255, 177, 84, 6, 255, 180, 90, 7, 255, 176, 92, 0, 255, 174, 88, 1, 255, 176, 87, 5, 255, 173, 82, 5, 255, 179, 89, 3, 255, 186, 96, 0, 255, 187, 98, 2, 255, 190, 101, 5, 255, 191, 104, 0, 255, 194, 102, 7, 255, 196, 103, 4, 255, 195, 102, 2, 255, 194, 102, 4, 255, 190, 102, 3, 255, 193, 104, 3, 255, 192, 104, 9, 255, 192, 105, 11, 255, 189, 103, 6, 255, 190, 104, 3, 255, 190, 106, 5, 255, 190, 106, 8, 255, 189, 108, 2, 255, 192, 111, 3, 255, 191, 110, 7, 255, 189, 107, 10, 255, 190, 106, 2, 255, 190, 105, 10, 255, 192, 107, 13, 255, 188, 101, 6, 255, 186, 100, 13, 255, 183, 101, 6, 255, 186, 102, 10, 255, 182, 101, 11, 255, 182, 105, 1, 255, 187, 106, 9, 255, 185, 106, 9, 255, 184, 107, 10, 255, 182, 107, 6, 255, 184, 108, 8, 255, 173, 100, 6, 255, 163, 89, 10, 255, 173, 100, 6, 255, 178, 110, 8, 255, 172, 104, 14, 255, 163, 93, 4, 255, 168, 96, 11, 255, 181, 110, 9, 255, 172, 101, 9, 255, 175, 105, 17, 255, 179, 110, 12, 255, 179, 108, 13, 255, 175, 103, 22, 255, 154, 93, 20, 255, 154, 99, 16, 255, 167, 110, 9, 255, 172, 112, 7, 255, 171, 114, 20, 255, 164, 107, 12, 255, 163, 110, 8, 255, 167, 109, 15, 255, 170, 108, 25, 255, 175, 116, 12, 255, 169, 114, 14, 255, 169, 116, 15, 255, 166, 114, 10, 255, 172, 113, 12, 255, 169, 117, 7, 255, 162, 114, 14, 255, 168, 114, 19, 255, 166, 115, 13, 255, 162, 116, 5, 255, 169, 120, 9, 255, 175, 118, 12, 255, 169, 113, 9, 255, 167, 113, 5, 255, 165, 114, 6, 255, 163, 111, 13, 255, 162, 110, 11, 255, 160, 110, 6, 255, 161, 108, 19, 255, 152, 106, 12, 255, 142, 100, 6, 255, 152, 105, 3, 255, 158, 113, 6, 255, 157, 106, 25, 255, 155, 100, 10, 255, 147, 97, 5, 255, 166, 113, 14, 255, 154, 103, 21, 255, 143, 97, 14, 255, 154, 104, 13, 255, 145, 97, 6, 255, 138, 88, 5, 255, 129, 85, 11, 255, 135, 91, 15, 255, 145, 100, 11, 255, 143, 98, 7, 255, 134, 88, 8, 255, 141, 95, 12, 255, 133, 90, 16, 255, 125, 84, 12, 255, 132, 87, 9, 255, 140, 92, 13, 255, 145, 93, 11, 255, 136, 89, 9, 255, 144, 96, 8, 255, 165, 107, 14, 255, 172, 117, 5, 255, 175, 127, 8, 255, 178, 125, 7, 255, 182, 131, 8, 255, 179, 132, 2, 255, 179, 129, 12, 255, 181, 132, 14, 255, 186, 140, 7, 255, 191, 146, 4, 255, 193, 146, 2, 255, 191, 147, 2, 255, 193, 151, 2, 255, 193, 150, 5, 255, 194, 148, 2, 255, 189, 143, 2, 255, 192, 148, 8, 255, 197, 155, 5, 255, 203, 158, 5, 255, 199, 151, 9, 255, 190, 141, 5, 255, 198, 149, 5, 255, 180, 129, 12, 255, 175, 126, 8, 255, 187, 140, 4, 255, 187, 137, 8, 255, 195, 143, 0, 255, 200, 148, 8, 255, 202, 149, 5, 255, 195, 139, 0, 255, 190, 136, 2, 255, 204, 150, 7, 255, 206, 152, 1, 255, 202, 151, 0, 255, 201, 147, 7, 255, 196, 139, 10, 255, 190, 133, 10, 255, 189, 125, 8, 255, 187, 123, 4, 255, 185, 124, 6, 255, 185, 120, 5, 255, 183, 117, 3, 255, 182, 115, 8, 255, 179, 110, 5, 255, 174, 105, 5, 255, 177, 107, 7, 255, 172, 100, 1, 255, 173, 100, 2, 255, 172, 95, 4, 255, 168, 94, 2, 255, 169, 93, 4, 255, 165, 91, 4, 255, 165, 91, 3, 255, 165, 90, 4, 255, 161, 87, 4, 255, 161, 88, 5, 255, 162, 87, 4, 255, 160, 83, 1, 255, 156, 81, 1, 255, 154, 79, 2, 255, 155, 77, 6, 255, 154, 74, 7, 255, 151, 70, 2, 255, 147, 71, 0, 255, 145, 72, 3, 255, 142, 64, 3, 255, 124, 50, 1, 255, 113, 45, 5, 255, 109, 47, 6, 255, 104, 41, 1, 255, 105, 39, 3, 255, 97, 35, 3, 255, 101, 39, 1, 255, 105, 42, 3, 255, 95, 32, 0, 255, 100, 36, 3, 255, 95, 36, 1, 255, 93, 34, 2, 255, 97, 38, 3, 255, 103, 38, 2, 255, 98, 33, 0, 255, 93, 32, 2, 255, 93, 32, 4, 255, 92, 31, 3, 255, 97, 36, 1, 255, 104, 40, 2, 255, 109, 43, 5, 255, 111, 42, 4, 255, 115, 44, 4, 255, 120, 45, 3, 255, 120, 42, 0, 255, 126, 46, 4, 255, 128, 45, 2, 255, 128, 40, 1, 255, 124, 41, 9, 255, 100, 32, 7, 255, 90, 26, 1, 255, 111, 34, 7, 255, 107, 33, 0, 255, 110, 35, 4, 255, 113, 37, 5, 255, 111, 37, 1, 255, 104, 33, 0, 255, 104, 30, 3, 255, 106, 36, 3, 255, 98, 39, 5, 255, 88, 31, 4, 255, 87, 27, 4, 255, 77, 22, 2, 255, 68, 25, 3, 255, 76, 23, 8, 255, 83, 26, 4, 255, 76, 29, 0, 255, 80, 22, 3, 255, 91, 37, 0, 255, 112, 47, 1, 255, 111, 43, 1, 255, 109, 41, 4, 255, 124, 47, 6, 255, 135, 53, 5, 255, 131, 54, 4, 255, 129, 53, 4, 255, 130, 56, 3, 255, 132, 58, 3, 255, 136, 57, 6, 255, 134, 55, 1, 255, 137, 56, 2, 255, 126, 55, 3, 255, 125, 52, 1, 255, 130, 46, 4, 255, 101, 29, 1, 255, 68, 22, 2, 255, 67, 17, 3, 255, 68, 20, 1, 255, 71, 18, 1, 255, 79, 24, 6, 255, 59, 16, 3, 255, 51, 15, 1, 255, 73, 19, 6, 255, 82, 23, 4, 255, 75, 26, 0, 255, 76, 24, 2, 255, 81, 22, 2, 255, 84, 24, 1, 255, 79, 24, 3, 255, 80, 21, 4, 255, 88, 23, 5, 255, 89, 22, 2, 255, 84, 22, 1, 255, 85, 24, 5, 255, 88, 22, 4, 255, 85, 22, 9, 255, 67, 16, 2, 255, 77, 25, 2, 255, 101, 34, 4, 255, 106, 33, 2, 255, 106, 36, 3, 255, 100, 29, 4, 255, 80, 19, 3, 255, 68, 17, 0, 255, 78, 19, 4, 255, 4, 2, 0, 255, 4, 2, 1, 255, 6, 4, 3, 255, 8, 7, 2, 255, 7, 6, 1, 255, 8, 5, 1, 255, 10, 7, 3, 255, 11, 9, 2, 255, 12, 9, 1, 255, 14, 10, 1, 255, 16, 12, 1, 255, 16, 12, 1, 255, 16, 15, 3, 255, 11, 13, 4, 255, 15, 13, 4, 255, 18, 15, 3, 255, 20, 20, 5, 255, 24, 22, 5, 255, 32, 28, 8, 255, 29, 26, 5, 255, 36, 32, 9, 255, 42, 36, 9, 255, 44, 38, 14, 255, 41, 45, 16, 255, 34, 39, 19, 255, 47, 44, 15, 255, 50, 49, 18, 255, 37, 48, 20, 255, 37, 41, 19, 255, 60, 49, 21, 255, 126, 89, 23, 255, 160, 121, 20, 255, 161, 125, 11, 255, 122, 93, 10, 255, 79, 69, 12, 255, 49, 52, 5, 255, 37, 42, 7, 255, 50, 41, 17, 255, 49, 42, 6, 255, 47, 42, 4, 255, 60, 58, 37, 255, 75, 70, 48, 255, 73, 73, 40, 255, 65, 69, 61, 255, 71, 72, 55, 255, 70, 73, 57, 255, 66, 71, 57, 255, 62, 63, 58, 255, 66, 64, 51, 255, 70, 66, 42, 255, 71, 63, 44, 255, 72, 64, 49, 255, 68, 58, 26, 255, 59, 52, 20, 255, 59, 55, 29, 255, 53, 40, 5, 255, 57, 33, 1, 255, 55, 32, 2, 255, 49, 33, 4, 255, 54, 39, 6, 255, 68, 46, 6, 255, 73, 43, 3, 255, 70, 35, 1, 255, 69, 33, 1, 255, 63, 30, 3, 255, 72, 34, 5, 255, 73, 34, 2, 255, 70, 34, 0, 255, 68, 35, 1, 255, 66, 32, 2, 255, 70, 30, 1, 255, 67, 34, 2, 255, 62, 36, 3, 255, 64, 32, 3, 255, 67, 31, 1, 255, 66, 34, 3, 255, 63, 32, 4, 255, 56, 30, 7, 255, 55, 36, 6, 255, 63, 33, 3, 255, 68, 33, 5, 255, 63, 33, 0, 255, 72, 38, 3, 255, 75, 41, 5, 255, 72, 37, 2, 255, 77, 38, 2, 255, 79, 40, 2, 255, 77, 39, 1, 255, 76, 38, 2, 255, 77, 40, 3, 255, 74, 38, 2, 255, 77, 42, 5, 255, 85, 42, 4, 255, 86, 39, 0, 255, 86, 40, 1, 255, 90, 42, 3, 255, 85, 41, 1, 255, 84, 40, 1, 255, 86, 42, 3, 255, 83, 43, 2, 255, 84, 45, 5, 255, 83, 44, 6, 255, 85, 43, 4, 255, 88, 46, 4, 255, 86, 42, 1, 255, 85, 41, 0, 255, 86, 43, 1, 255, 87, 47, 4, 255, 85, 46, 2, 255, 88, 47, 5, 255, 87, 48, 2, 255, 84, 46, 1, 255, 89, 47, 4, 255, 90, 47, 5, 255, 87, 48, 2, 255, 90, 50, 2, 255, 92, 51, 2, 255, 91, 49, 2, 255, 89, 48, 3, 255, 88, 48, 3, 255, 83, 45, 1, 255, 86, 47, 4, 255, 97, 51, 4, 255, 120, 60, 7, 255, 138, 70, 4, 255, 163, 83, 7, 255, 178, 87, 4, 255, 179, 92, 2, 255, 180, 90, 6, 255, 173, 87, 1, 255, 173, 89, 0, 255, 177, 92, 1, 255, 180, 89, 7, 255, 172, 78, 5, 255, 170, 77, 0, 255, 181, 92, 9, 255, 185, 97, 9, 255, 186, 97, 2, 255, 184, 95, 0, 255, 183, 94, 6, 255, 176, 89, 5, 255, 189, 105, 5, 255, 189, 102, 1, 255, 189, 99, 3, 255, 192, 103, 10, 255, 187, 99, 2, 255, 189, 102, 5, 255, 193, 102, 6, 255, 186, 96, 4, 255, 186, 99, 8, 255, 190, 102, 5, 255, 187, 98, 0, 255, 190, 104, 4, 255, 189, 105, 4, 255, 184, 104, 6, 255, 185, 105, 10, 255, 184, 102, 5, 255, 179, 102, 7, 255, 182, 101, 7, 255, 175, 96, 10, 255, 183, 98, 15, 255, 182, 99, 5, 255, 181, 97, 6, 255, 180, 96, 3, 255, 178, 97, 1, 255, 178, 99, 3, 255, 180, 106, 5, 255, 183, 101, 6, 255, 181, 97, 6, 255, 178, 100, 10, 255, 176, 100, 3, 255, 177, 100, 6, 255, 177, 102, 11, 255, 177, 99, 8, 255, 176, 99, 12, 255, 170, 95, 4, 255, 164, 94, 9, 255, 159, 94, 15, 255, 157, 95, 15, 255, 162, 98, 14, 255, 160, 97, 4, 255, 159, 93, 12, 255, 165, 98, 17, 255, 161, 105, 14, 255, 159, 102, 15, 255, 156, 100, 11, 255, 159, 99, 10, 255, 162, 104, 9, 255, 167, 103, 5, 255, 160, 104, 11, 255, 153, 104, 6, 255, 150, 96, 22, 255, 146, 93, 14, 255, 156, 99, 7, 255, 143, 91, 9, 255, 153, 102, 10, 255, 149, 95, 15, 255, 140, 91, 15, 255, 134, 87, 24, 255, 152, 101, 19, 255, 146, 96, 10, 255, 138, 95, 10, 255, 129, 81, 9, 255, 138, 87, 6, 255, 140, 89, 19, 255, 141, 92, 19, 255, 130, 86, 6, 255, 134, 91, 16, 255, 130, 91, 12, 255, 115, 76, 9, 255, 122, 85, 14, 255, 124, 89, 20, 255, 132, 89, 19, 255, 118, 82, 18, 255, 102, 81, 7, 255, 116, 85, 8, 255, 126, 86, 25, 255, 116, 80, 18, 255, 110, 82, 8, 255, 104, 76, 17, 255, 128, 85, 12, 255, 130, 85, 9, 255, 124, 89, 9, 255, 132, 93, 15, 255, 124, 87, 12, 255, 120, 81, 9, 255, 120, 86, 14, 255, 122, 85, 12, 255, 140, 99, 12, 255, 125, 93, 14, 255, 113, 77, 5, 255, 132, 87, 9, 255, 125, 86, 9, 255, 120, 83, 10, 255, 117, 81, 15, 255, 112, 82, 6, 255, 114, 78, 12, 255, 110, 79, 11, 255, 128, 88, 10, 255, 139, 94, 9, 255, 152, 100, 13, 255, 165, 108, 15, 255, 164, 114, 0, 255, 170, 116, 12, 255, 172, 118, 17, 255, 178, 128, 8, 255, 175, 126, 5, 255, 181, 131, 12, 255, 184, 136, 0, 255, 187, 139, 4, 255, 192, 144, 8, 255, 191, 147, 4, 255, 188, 144, 3, 255, 182, 136, 3, 255, 179, 134, 3, 255, 192, 152, 7, 255, 200, 156, 3, 255, 199, 158, 0, 255, 198, 153, 11, 255, 182, 130, 18, 255, 172, 119, 11, 255, 183, 131, 6, 255, 177, 121, 4, 255, 184, 140, 2, 255, 187, 140, 1, 255, 193, 140, 1, 255, 193, 146, 0, 255, 201, 149, 8, 255, 191, 140, 3, 255, 192, 145, 11, 255, 202, 154, 7, 255, 203, 153, 7, 255, 204, 151, 7, 255, 202, 147, 4, 255, 200, 145, 6, 255, 198, 145, 9, 255, 194, 138, 5, 255, 190, 131, 3, 255, 188, 127, 6, 255, 188, 123, 8, 255, 185, 118, 8, 255, 182, 115, 7, 255, 180, 113, 7, 255, 177, 108, 6, 255, 178, 106, 6, 255, 172, 99, 0, 255, 172, 99, 3, 255, 169, 94, 6, 255, 169, 94, 8, 255, 168, 95, 7, 255, 164, 90, 4, 255, 165, 90, 4, 255, 165, 90, 4, 255, 158, 87, 0, 255, 160, 88, 1, 255, 163, 87, 3, 255, 161, 84, 6, 255, 155, 80, 6, 255, 150, 77, 4, 255, 152, 77, 5, 255, 151, 72, 1, 255, 152, 74, 4, 255, 147, 70, 5, 255, 143, 66, 6, 255, 140, 65, 2, 255, 132, 60, 3, 255, 124, 57, 2, 255, 117, 48, 4, 255, 108, 39, 5, 255, 109, 43, 3, 255, 110, 44, 2, 255, 105, 40, 2, 255, 96, 34, 2, 255, 91, 29, 0, 255, 99, 38, 3, 255, 102, 39, 2, 255, 93, 30, 0, 255, 94, 39, 4, 255, 107, 43, 7, 255, 104, 39, 3, 255, 106, 36, 3, 255, 113, 38, 4, 255, 117, 43, 3, 255, 121, 43, 3, 255, 124, 42, 3, 255, 123, 44, 4, 255, 120, 42, 3, 255, 119, 36, 2, 255, 117, 34, 2, 255, 104, 30, 1, 255, 98, 31, 3, 255, 99, 30, 2, 255, 101, 28, 2, 255, 106, 31, 3, 255, 103, 27, 3, 255, 76, 22, 1, 255, 95, 30, 2, 255, 120, 44, 5, 255, 106, 40, 2, 255, 103, 36, 6, 255, 105, 35, 2, 255, 98, 36, 1, 255, 98, 34, 2, 255, 102, 31, 0, 255, 98, 31, 2, 255, 88, 26, 3, 255, 74, 22, 2, 255, 78, 26, 6, 255, 85, 30, 4, 255, 85, 27, 3, 255, 96, 28, 3, 255, 88, 34, 3, 255, 99, 40, 6, 255, 102, 41, 4, 255, 116, 43, 5, 255, 122, 46, 4, 255, 123, 53, 0, 255, 129, 57, 1, 255, 131, 49, 1, 255, 129, 52, 1, 255, 134, 58, 3, 255, 133, 57, 2, 255, 133, 58, 2, 255, 133, 56, 1, 255, 126, 57, 1, 255, 126, 59, 4, 255, 120, 57, 5, 255, 116, 47, 3, 255, 100, 33, 3, 255, 72, 18, 0, 255, 66, 18, 4, 255, 77, 23, 8, 255, 79, 20, 2, 255, 75, 19, 6, 255, 60, 17, 4, 255, 51, 14, 4, 255, 59, 20, 2, 255, 67, 22, 2, 255, 72, 20, 2, 255, 74, 22, 3, 255, 78, 22, 4, 255, 78, 20, 1, 255, 80, 21, 2, 255, 81, 21, 2, 255, 83, 22, 1, 255, 90, 26, 3, 255, 89, 27, 3, 255, 82, 23, 3, 255, 77, 19, 3, 255, 79, 17, 5, 255, 78, 15, 3, 255, 89, 28, 2, 255, 119, 49, 6, 255, 135, 50, 5, 255, 127, 44, 1, 255, 114, 39, 1, 255, 98, 25, 4, 255, 66, 15, 5, 255, 60, 19, 0, 255, 84, 21, 2, 255, 4, 4, 2, 255, 5, 3, 2, 255, 4, 3, 2, 255, 7, 6, 2, 255, 10, 7, 2, 255, 10, 6, 2, 255, 12, 8, 3, 255, 14, 8, 2, 255, 15, 10, 3, 255, 16, 12, 3, 255, 15, 11, 1, 255, 15, 13, 1, 255, 16, 15, 3, 255, 16, 17, 7, 255, 20, 17, 7, 255, 24, 18, 6, 255, 24, 20, 5, 255, 25, 23, 5, 255, 30, 29, 9, 255, 36, 26, 12, 255, 32, 33, 7, 255, 38, 40, 3, 255, 32, 45, 7, 255, 40, 49, 25, 255, 47, 48, 27, 255, 42, 43, 20, 255, 38, 47, 17, 255, 75, 57, 15, 255, 130, 100, 16, 255, 153, 121, 25, 255, 127, 98, 19, 255, 77, 64, 13, 255, 56, 56, 7, 255, 48, 51, 9, 255, 52, 49, 4, 255, 53, 42, 15, 255, 47, 43, 14, 255, 48, 42, 4, 255, 45, 43, 3, 255, 48, 40, 2, 255, 66, 51, 24, 255, 64, 61, 48, 255, 64, 64, 46, 255, 74, 67, 50, 255, 74, 72, 57, 255, 69, 71, 56, 255, 64, 67, 50, 255, 64, 65, 50, 255, 68, 66, 51, 255, 67, 64, 46, 255, 63, 63, 41, 255, 65, 66, 45, 255, 68, 61, 35, 255, 55, 49, 13, 255, 56, 56, 23, 255, 52, 47, 27, 255, 49, 33, 8, 255, 52, 29, 3, 255, 52, 24, 7, 255, 62, 38, 2, 255, 66, 45, 4, 255, 67, 45, 6, 255, 60, 33, 3, 255, 57, 29, 5, 255, 60, 29, 1, 255, 69, 30, 2, 255, 75, 32, 4, 255, 70, 33, 2, 255, 63, 32, 2, 255, 65, 32, 3, 255, 64, 32, 3, 255, 67, 32, 5, 255, 69, 32, 5, 255, 62, 29, 1, 255, 61, 32, 2, 255, 63, 30, 2, 255, 63, 28, 2, 255, 63, 34, 5, 255, 61, 34, 2, 255, 67, 34, 2, 255, 71, 39, 7, 255, 63, 37, 2, 255, 70, 36, 3, 255, 73, 38, 3, 255, 78, 36, 4, 255, 78, 34, 3, 255, 76, 39, 4, 255, 76, 43, 5, 255, 78, 42, 5, 255, 79, 39, 2, 255, 81, 38, 3, 255, 86, 37, 2, 255, 85, 43, 5, 255, 79, 43, 3, 255, 80, 39, 1, 255, 87, 38, 5, 255, 81, 43, 4, 255, 83, 44, 4, 255, 85, 42, 2, 255, 84, 42, 2, 255, 85, 43, 3, 255, 86, 42, 2, 255, 87, 42, 1, 255, 90, 47, 4, 255, 89, 46, 3, 255, 87, 45, 3, 255, 87, 45, 3, 255, 87, 45, 3, 255, 82, 43, 1, 255, 85, 48, 2, 255, 89, 45, 0, 255, 93, 43, 1, 255, 92, 43, 2, 255, 89, 45, 3, 255, 87, 48, 2, 255, 89, 49, 3, 255, 87, 47, 1, 255, 90, 49, 3, 255, 93, 52, 6, 255, 92, 51, 5, 255, 91, 50, 3, 255, 91, 50, 4, 255, 89, 46, 4, 255, 95, 48, 4, 255, 104, 52, 3, 255, 132, 67, 7, 255, 158, 79, 7, 255, 176, 89, 6, 255, 183, 96, 0, 255, 176, 91, 2, 255, 175, 86, 5, 255, 180, 91, 3, 255, 176, 88, 1, 255, 172, 87, 4, 255, 179, 91, 9, 255, 181, 93, 8, 255, 182, 96, 3, 255, 188, 101, 2, 255, 188, 98, 1, 255, 188, 95, 8, 255, 172, 80, 3, 255, 181, 92, 13, 255, 185, 95, 12, 255, 183, 94, 3, 255, 190, 101, 7, 255, 189, 101, 8, 255, 183, 94, 3, 255, 189, 99, 6, 255, 189, 103, 1, 255, 185, 101, 2, 255, 186, 101, 8, 255, 184, 100, 6, 255, 184, 101, 5, 255, 186, 102, 11, 255, 181, 102, 9, 255, 177, 98, 3, 255, 176, 96, 8, 255, 171, 95, 10, 255, 173, 93, 3, 255, 172, 92, 11, 255, 172, 91, 14, 255, 176, 97, 3, 255, 170, 90, 2, 255, 168, 88, 5, 255, 171, 91, 15, 255, 169, 91, 17, 255, 164, 88, 9, 255, 169, 88, 8, 255, 165, 87, 9, 255, 155, 88, 1, 255, 167, 95, 11, 255, 169, 93, 13, 255, 162, 89, 9, 255, 157, 93, 5, 255, 159, 92, 10, 255, 152, 90, 7, 255, 151, 87, 6, 255, 156, 91, 8, 255, 146, 93, 9, 255, 152, 93, 9, 255, 148, 91, 19, 255, 141, 84, 18, 255, 143, 93, 8, 255, 148, 85, 14, 255, 134, 78, 20, 255, 142, 84, 8, 255, 143, 85, 4, 255, 129, 76, 7, 255, 116, 74, 15, 255, 112, 70, 15, 255, 128, 81, 12, 255, 136, 87, 6, 255, 143, 87, 3, 255, 107, 63, 12, 255, 91, 63, 17, 255, 112, 78, 19, 255, 118, 74, 17, 255, 122, 85, 18, 255, 117, 84, 11, 255, 114, 75, 15, 255, 109, 76, 7, 255, 107, 74, 13, 255, 108, 72, 13, 255, 111, 73, 16, 255, 108, 71, 11, 255, 108, 76, 7, 255, 107, 78, 5, 255, 103, 75, 9, 255, 103, 77, 11, 255, 103, 78, 10, 255, 104, 76, 14, 255, 107, 83, 12, 255, 113, 80, 13, 255, 111, 84, 2, 255, 105, 84, 12, 255, 108, 80, 12, 255, 115, 81, 17, 255, 116, 81, 11, 255, 114, 81, 14, 255, 109, 85, 19, 255, 116, 84, 13, 255, 116, 80, 7, 255, 119, 85, 11, 255, 120, 83, 9, 255, 122, 82, 10, 255, 121, 83, 18, 255, 125, 85, 11, 255, 124, 84, 13, 255, 136, 88, 10, 255, 134, 88, 9, 255, 127, 87, 12, 255, 138, 92, 11, 255, 133, 88, 11, 255, 127, 84, 7, 255, 119, 77, 14, 255, 114, 80, 13, 255, 118, 81, 14, 255, 113, 78, 14, 255, 110, 76, 10, 255, 115, 84, 15, 255, 143, 98, 9, 255, 156, 98, 2, 255, 152, 107, 19, 255, 168, 118, 9, 255, 170, 118, 7, 255, 169, 121, 8, 255, 174, 123, 5, 255, 179, 126, 6, 255, 178, 127, 2, 255, 183, 134, 3, 255, 184, 135, 1, 255, 190, 142, 13, 255, 188, 142, 7, 255, 187, 141, 2, 255, 190, 147, 2, 255, 189, 148, 6, 255, 196, 147, 9, 255, 199, 160, 2, 255, 200, 160, 6, 255, 192, 149, 11, 255, 153, 103, 17, 255, 169, 113, 14, 255, 153, 93, 17, 255, 177, 131, 17, 255, 187, 143, 10, 255, 192, 141, 9, 255, 191, 143, 3, 255, 196, 148, 9, 255, 203, 152, 10, 255, 200, 156, 10, 255, 202, 158, 4, 255, 205, 154, 10, 255, 203, 151, 9, 255, 200, 148, 0, 255, 201, 146, 0, 255, 198, 144, 3, 255, 194, 138, 1, 255, 193, 134, 3, 255, 191, 130, 6, 255, 187, 122, 8, 255, 185, 119, 8, 255, 183, 115, 7, 255, 183, 116, 3, 255, 182, 115, 2, 255, 177, 109, 1, 255, 172, 102, 3, 255, 173, 103, 8, 255, 170, 100, 5, 255, 172, 99, 4, 255, 168, 96, 3, 255, 163, 93, 2, 255, 165, 91, 4, 255, 162, 89, 4, 255, 158, 87, 3, 255, 160, 90, 2, 255, 162, 89, 1, 255, 160, 85, 2, 255, 156, 81, 1, 255, 155, 82, 5, 255, 152, 77, 3, 255, 149, 74, 1, 255, 144, 72, 4, 255, 142, 70, 2, 255, 143, 69, 1, 255, 142, 63, 4, 255, 142, 65, 7, 255, 133, 60, 3, 255, 113, 46, 0, 255, 104, 41, 7, 255, 101, 40, 4, 255, 106, 38, 2, 255, 113, 39, 8, 255, 103, 34, 4, 255, 95, 32, 2, 255, 99, 39, 3, 255, 102, 39, 2, 255, 95, 31, 2, 255, 93, 37, 5, 255, 100, 38, 4, 255, 96, 33, 0, 255, 99, 39, 2, 255, 108, 46, 1, 255, 125, 47, 1, 255, 129, 42, 6, 255, 118, 40, 9, 255, 109, 35, 3, 255, 98, 33, 0, 255, 85, 28, 0, 255, 76, 24, 6, 255, 64, 21, 5, 255, 58, 21, 3, 255, 57, 20, 2, 255, 57, 22, 4, 255, 51, 20, 1, 255, 51, 17, 1, 255, 43, 18, 5, 255, 55, 19, 3, 255, 102, 30, 6, 255, 104, 38, 3, 255, 87, 31, 2, 255, 96, 30, 2, 255, 98, 32, 2, 255, 92, 32, 3, 255, 92, 28, 0, 255, 85, 26, 0, 255, 76, 27, 2, 255, 89, 33, 2, 255, 95, 40, 10, 255, 87, 33, 3, 255, 96, 38, 0, 255, 108, 47, 2, 255, 117, 46, 8, 255, 114, 40, 1, 255, 115, 41, 1, 255, 121, 45, 2, 255, 124, 51, 1, 255, 125, 56, 1, 255, 126, 56, 2, 255, 130, 54, 5, 255, 132, 57, 3, 255, 135, 57, 0, 255, 125, 47, 5, 255, 119, 47, 10, 255, 123, 53, 3, 255, 124, 51, 5, 255, 122, 46, 3, 255, 104, 40, 4, 255, 93, 30, 4, 255, 77, 22, 2, 255, 70, 23, 4, 255, 76, 21, 5, 255, 68, 18, 3, 255, 74, 15, 1, 255, 74, 22, 1, 255, 57, 19, 0, 255, 62, 16, 3, 255, 67, 14, 4, 255, 64, 19, 3, 255, 64, 19, 2, 255, 77, 22, 3, 255, 82, 24, 6, 255, 79, 21, 4, 255, 81, 20, 3, 255, 89, 22, 5, 255, 82, 22, 8, 255, 80, 20, 1, 255, 84, 21, 1, 255, 89, 23, 4, 255, 83, 21, 5, 255, 67, 17, 2, 255, 67, 17, 1, 255, 104, 33, 3, 255, 142, 53, 2, 255, 148, 61, 3, 255, 134, 49, 2, 255, 119, 39, 5, 255, 93, 23, 1, 255, 74, 15, 2, 255, 68, 21, 1, 255, 81, 21, 3, 255, 7, 6, 1, 255, 7, 6, 2, 255, 7, 4, 1, 255, 11, 7, 2, 255, 12, 9, 1, 255, 11, 6, 1, 255, 15, 9, 3, 255, 14, 8, 2, 255, 15, 10, 5, 255, 16, 11, 4, 255, 15, 12, 1, 255, 17, 15, 3, 255, 17, 16, 2, 255, 18, 19, 2, 255, 22, 20, 4, 255, 29, 25, 6, 255, 33, 29, 6, 255, 31, 30, 5, 255, 30, 31, 5, 255, 33, 30, 12, 255, 39, 40, 7, 255, 34, 44, 1, 255, 40, 39, 5, 255, 56, 44, 22, 255, 40, 43, 16, 255, 60, 51, 25, 255, 122, 99, 29, 255, 137, 110, 22, 255, 103, 90, 20, 255, 56, 54, 7, 255, 38, 39, 17, 255, 45, 49, 20, 255, 53, 52, 10, 255, 57, 55, 8, 255, 57, 51, 3, 255, 53, 49, 3, 255, 47, 43, 13, 255, 52, 41, 9, 255, 46, 39, 4, 255, 41, 36, 6, 255, 61, 49, 16, 255, 65, 62, 39, 255, 66, 64, 30, 255, 78, 68, 37, 255, 74, 75, 48, 255, 69, 67, 55, 255, 69, 69, 60, 255, 66, 67, 47, 255, 65, 66, 33, 255, 67, 65, 55, 255, 60, 62, 50, 255, 61, 65, 48, 255, 67, 61, 39, 255, 61, 52, 24, 255, 53, 53, 18, 255, 52, 53, 27, 255, 49, 37, 10, 255, 53, 29, 1, 255, 55, 30, 8, 255, 56, 39, 3, 255, 62, 48, 7, 255, 65, 45, 8, 255, 60, 31, 3, 255, 56, 25, 3, 255, 47, 26, 3, 255, 48, 26, 1, 255, 55, 26, 3, 255, 62, 27, 3, 255, 63, 27, 3, 255, 62, 29, 5, 255, 61, 30, 2, 255, 64, 29, 1, 255, 66, 31, 3, 255, 62, 31, 2, 255, 67, 35, 4, 255, 69, 36, 5, 255, 74, 37, 6, 255, 81, 37, 3, 255, 91, 38, 5, 255, 84, 37, 3, 255, 81, 39, 4, 255, 82, 35, 1, 255, 84, 36, 0, 255, 76, 39, 1, 255, 77, 40, 4, 255, 74, 37, 2, 255, 75, 41, 5, 255, 73, 39, 1, 255, 80, 41, 3, 255, 82, 41, 2, 255, 79, 40, 2, 255, 78, 42, 0, 255, 78, 43, 3, 255, 84, 43, 4, 255, 85, 38, 3, 255, 85, 40, 6, 255, 81, 44, 6, 255, 83, 42, 3, 255, 85, 43, 3, 255, 86, 44, 3, 255, 85, 44, 1, 255, 88, 45, 2, 255, 87, 43, 1, 255, 87, 44, 1, 255, 86, 44, 1, 255, 87, 46, 2, 255, 89, 45, 3, 255, 90, 45, 4, 255, 88, 43, 1, 255, 88, 47, 2, 255, 95, 50, 3, 255, 95, 48, 4, 255, 93, 45, 3, 255, 92, 48, 5, 255, 92, 51, 4, 255, 86, 49, 2, 255, 90, 52, 5, 255, 89, 48, 3, 255, 91, 49, 2, 255, 92, 48, 1, 255, 90, 46, 1, 255, 100, 51, 5, 255, 94, 51, 6, 255, 86, 52, 7, 255, 94, 48, 7, 255, 98, 50, 5, 255, 103, 56, 0, 255, 125, 62, 5, 255, 138, 69, 6, 255, 148, 73, 11, 255, 154, 73, 3, 255, 165, 79, 5, 255, 172, 87, 5, 255, 163, 87, 2, 255, 174, 91, 6, 255, 176, 88, 1, 255, 172, 88, 3, 255, 181, 97, 8, 255, 182, 97, 2, 255, 187, 101, 4, 255, 181, 97, 2, 255, 179, 92, 6, 255, 177, 89, 9, 255, 178, 91, 4, 255, 187, 103, 4, 255, 183, 97, 4, 255, 175, 86, 9, 255, 184, 95, 3, 255, 188, 99, 10, 255, 188, 103, 6, 255, 187, 104, 3, 255, 176, 92, 3, 255, 174, 92, 5, 255, 178, 96, 4, 255, 171, 92, 7, 255, 172, 91, 9, 255, 174, 90, 13, 255, 172, 93, 7, 255, 172, 89, 0, 255, 167, 83, 7, 255, 156, 79, 11, 255, 165, 89, 13, 255, 159, 83, 14, 255, 158, 84, 8, 255, 160, 91, 7, 255, 150, 78, 5, 255, 145, 82, 11, 255, 146, 89, 11, 255, 144, 87, 7, 255, 149, 87, 3, 255, 156, 84, 10, 255, 152, 88, 4, 255, 138, 86, 8, 255, 136, 83, 3, 255, 133, 84, 4, 255, 142, 87, 7, 255, 150, 88, 12, 255, 140, 83, 6, 255, 129, 75, 6, 255, 121, 71, 11, 255, 115, 73, 18, 255, 111, 69, 18, 255, 111, 72, 12, 255, 119, 65, 13, 255, 120, 75, 19, 255, 127, 77, 8, 255, 96, 62, 8, 255, 103, 63, 16, 255, 93, 62, 20, 255, 88, 66, 20, 255, 114, 86, 12, 255, 146, 88, 16, 255, 136, 79, 12, 255, 87, 64, 15, 255, 86, 66, 15, 255, 88, 64, 21, 255, 94, 68, 11, 255, 118, 81, 17, 255, 110, 66, 23, 255, 87, 61, 12, 255, 96, 77, 11, 255, 103, 73, 5, 255, 109, 76, 10, 255, 104, 74, 16, 255, 107, 77, 15, 255, 112, 78, 15, 255, 111, 74, 17, 255, 106, 73, 8, 255, 106, 75, 11, 255, 111, 78, 14, 255, 115, 82, 4, 255, 110, 78, 10, 255, 108, 77, 14, 255, 110, 86, 9, 255, 111, 86, 8, 255, 112, 77, 14, 255, 110, 79, 12, 255, 109, 80, 20, 255, 114, 81, 16, 255, 116, 79, 18, 255, 122, 81, 10, 255, 118, 81, 12, 255, 117, 79, 29, 255, 124, 81, 14, 255, 129, 89, 8, 255, 125, 88, 9, 255, 123, 87, 8, 255, 125, 84, 18, 255, 125, 78, 20, 255, 129, 85, 9, 255, 130, 90, 10, 255, 137, 89, 15, 255, 136, 85, 16, 255, 131, 83, 11, 255, 124, 80, 10, 255, 119, 80, 17, 255, 116, 75, 15, 255, 100, 73, 17, 255, 98, 76, 7, 255, 128, 89, 15, 255, 152, 95, 12, 255, 156, 97, 6, 255, 157, 100, 8, 255, 160, 96, 11, 255, 165, 109, 4, 255, 164, 111, 16, 255, 165, 110, 6, 255, 173, 116, 2, 255, 171, 118, 9, 255, 173, 122, 9, 255, 173, 121, 2, 255, 166, 115, 4, 255, 166, 115, 7, 255, 161, 110, 0, 255, 180, 133, 10, 255, 191, 147, 9, 255, 189, 144, 6, 255, 195, 146, 10, 255, 190, 147, 8, 255, 203, 162, 13, 255, 178, 126, 5, 255, 152, 95, 10, 255, 149, 96, 10, 255, 184, 133, 6, 255, 185, 142, 6, 255, 192, 144, 4, 255, 198, 143, 14, 255, 194, 152, 11, 255, 205, 152, 9, 255, 205, 159, 3, 255, 204, 156, 1, 255, 202, 152, 3, 255, 202, 149, 7, 255, 202, 148, 7, 255, 201, 145, 6, 255, 195, 140, 6, 255, 194, 137, 5, 255, 194, 135, 6, 255, 192, 132, 5, 255, 188, 126, 2, 255, 186, 123, 1, 255, 185, 120, 2, 255, 185, 117, 3, 255, 181, 114, 2, 255, 180, 112, 3, 255, 178, 109, 5, 255, 173, 105, 5, 255, 173, 105, 8, 255, 172, 98, 2, 255, 169, 96, 2, 255, 166, 92, 2, 255, 166, 91, 4, 255, 163, 89, 2, 255, 164, 92, 4, 255, 163, 91, 3, 255, 163, 89, 2, 255, 163, 86, 4, 255, 161, 83, 5, 255, 158, 81, 8, 255, 149, 71, 2, 255, 148, 71, 1, 255, 145, 75, 3, 255, 146, 74, 3, 255, 147, 73, 0, 255, 144, 66, 1, 255, 141, 63, 4, 255, 132, 54, 9, 255, 109, 39, 7, 255, 113, 49, 4, 255, 109, 47, 2, 255, 105, 39, 0, 255, 109, 41, 4, 255, 103, 35, 5, 255, 98, 33, 2, 255, 103, 43, 4, 255, 103, 38, 2, 255, 95, 31, 2, 255, 87, 31, 2, 255, 92, 34, 3, 255, 93, 32, 2, 255, 107, 44, 1, 255, 117, 50, 4, 255, 119, 43, 2, 255, 112, 34, 0, 255, 102, 33, 2, 255, 100, 33, 2, 255, 93, 31, 1, 255, 72, 23, 1, 255, 55, 22, 4, 255, 54, 22, 6, 255, 59, 21, 0, 255, 57, 21, 0, 255, 48, 23, 4, 255, 42, 21, 10, 255, 44, 18, 5, 255, 57, 20, 11, 255, 39, 18, 5, 255, 65, 19, 3, 255, 95, 27, 5, 255, 94, 30, 2, 255, 94, 30, 4, 255, 95, 25, 1, 255, 95, 34, 8, 255, 86, 28, 4, 255, 78, 21, 0, 255, 80, 32, 5, 255, 95, 36, 4, 255, 92, 32, 3, 255, 75, 25, 3, 255, 96, 37, 2, 255, 111, 45, 4, 255, 116, 38, 1, 255, 116, 47, 3, 255, 121, 56, 4, 255, 125, 58, 4, 255, 124, 55, 5, 255, 125, 54, 7, 255, 127, 55, 4, 255, 127, 58, 1, 255, 132, 64, 1, 255, 139, 62, 2, 255, 109, 34, 7, 255, 83, 16, 8, 255, 86, 21, 2, 255, 91, 25, 11, 255, 89, 28, 2, 255, 79, 23, 1, 255, 70, 22, 3, 255, 68, 20, 3, 255, 71, 20, 2, 255, 74, 21, 0, 255, 68, 22, 3, 255, 63, 18, 3, 255, 67, 18, 3, 255, 63, 13, 3, 255, 54, 14, 0, 255, 61, 18, 7, 255, 64, 18, 1, 255, 68, 21, 2, 255, 77, 24, 1, 255, 81, 25, 3, 255, 81, 23, 2, 255, 84, 24, 1, 255, 86, 23, 0, 255, 77, 14, 4, 255, 79, 20, 3, 255, 82, 26, 5, 255, 80, 24, 4, 255, 72, 18, 1, 255, 68, 17, 1, 255, 84, 28, 9, 255, 109, 42, 8, 255, 125, 51, 1, 255, 137, 58, 3, 255, 130, 44, 0, 255, 113, 34, 4, 255, 81, 21, 2, 255, 70, 17, 1, 255, 74, 28, 9, 255, 78, 21, 6, 255, 8, 5, 0, 255, 9, 6, 1, 255, 10, 6, 2, 255, 14, 10, 2, 255, 15, 11, 0, 255, 14, 8, 0, 255, 16, 9, 2, 255, 14, 9, 2, 255, 14, 10, 2, 255, 15, 11, 4, 255, 16, 14, 3, 255, 20, 18, 4, 255, 19, 18, 3, 255, 19, 20, 4, 255, 22, 20, 6, 255, 29, 25, 8, 255, 32, 29, 4, 255, 31, 30, 3, 255, 31, 32, 7, 255, 34, 36, 12, 255, 38, 39, 5, 255, 37, 47, 5, 255, 54, 45, 12, 255, 33, 36, 12, 255, 67, 63, 27, 255, 129, 99, 28, 255, 109, 86, 15, 255, 47, 54, 6, 255, 41, 42, 12, 255, 45, 57, 12, 255, 48, 55, 18, 255, 49, 51, 17, 255, 59, 53, 13, 255, 57, 48, 23, 255, 50, 44, 20, 255, 53, 45, 7, 255, 57, 39, 5, 255, 46, 38, 11, 255, 41, 37, 10, 255, 37, 31, 5, 255, 52, 41, 16, 255, 66, 56, 37, 255, 61, 58, 38, 255, 66, 60, 40, 255, 74, 70, 43, 255, 71, 65, 58, 255, 65, 64, 54, 255, 65, 66, 49, 255, 63, 62, 45, 255, 62, 60, 50, 255, 63, 63, 49, 255, 64, 63, 55, 255, 69, 65, 37, 255, 66, 56, 17, 255, 55, 44, 20, 255, 55, 51, 31, 255, 61, 52, 19, 255, 54, 30, 3, 255, 55, 27, 3, 255, 51, 29, 9, 255, 62, 43, 11, 255, 62, 46, 15, 255, 52, 36, 6, 255, 52, 25, 1, 255, 49, 26, 3, 255, 55, 28, 5, 255, 60, 28, 3, 255, 61, 28, 2, 255, 64, 32, 2, 255, 67, 35, 3, 255, 65, 33, 1, 255, 66, 32, 3, 255, 70, 32, 5, 255, 65, 29, 2, 255, 61, 32, 2, 255, 64, 33, 2, 255, 71, 31, 3, 255, 72, 31, 2, 255, 76, 33, 1, 255, 74, 35, 0, 255, 73, 38, 2, 255, 75, 38, 0, 255, 79, 40, 1, 255, 83, 40, 2, 255, 82, 43, 5, 255, 79, 43, 3, 255, 83, 45, 5, 255, 85, 42, 3, 255, 87, 44, 3, 255, 87, 45, 3, 255, 84, 42, 3, 255, 85, 42, 2, 255, 83, 38, 0, 255, 81, 42, 3, 255, 80, 42, 4, 255, 85, 37, 3, 255, 82, 40, 2, 255, 86, 42, 3, 255, 87, 43, 2, 255, 86, 45, 2, 255, 88, 49, 4, 255, 89, 48, 3, 255, 90, 47, 5, 255, 89, 46, 4, 255, 86, 42, 1, 255, 88, 43, 1, 255, 88, 42, 0, 255, 89, 43, 1, 255, 90, 43, 1, 255, 91, 47, 4, 255, 94, 51, 4, 255, 85, 43, 0, 255, 86, 47, 2, 255, 91, 50, 5, 255, 92, 46, 1, 255, 90, 49, 2, 255, 93, 51, 6, 255, 92, 50, 3, 255, 92, 47, 1, 255, 98, 50, 4, 255, 98, 49, 3, 255, 97, 50, 3, 255, 92, 51, 1, 255, 90, 50, 0, 255, 94, 51, 3, 255, 96, 54, 4, 255, 92, 51, 0, 255, 95, 50, 1, 255, 89, 46, 6, 255, 97, 51, 6, 255, 111, 57, 6, 255, 123, 59, 4, 255, 128, 61, 1, 255, 135, 70, 5, 255, 150, 76, 6, 255, 154, 74, 3, 255, 151, 74, 5, 255, 157, 79, 6, 255, 165, 85, 5, 255, 171, 89, 4, 255, 172, 92, 3, 255, 174, 95, 7, 255, 172, 93, 3, 255, 172, 92, 6, 255, 175, 94, 6, 255, 177, 95, 6, 255, 174, 90, 10, 255, 178, 90, 6, 255, 184, 96, 5, 255, 178, 90, 8, 255, 176, 93, 8, 255, 173, 94, 5, 255, 168, 87, 8, 255, 159, 79, 10, 255, 149, 75, 8, 255, 154, 83, 2, 255, 149, 77, 6, 255, 147, 80, 9, 255, 148, 77, 19, 255, 142, 75, 7, 255, 139, 75, 10, 255, 142, 78, 6, 255, 141, 77, 3, 255, 140, 79, 3, 255, 135, 72, 4, 255, 130, 68, 11, 255, 135, 78, 10, 255, 135, 75, 4, 255, 131, 68, 16, 255, 127, 70, 7, 255, 129, 74, 2, 255, 126, 68, 8, 255, 119, 63, 11, 255, 116, 64, 11, 255, 109, 70, 16, 255, 121, 68, 15, 255, 106, 55, 8, 255, 87, 56, 12, 255, 87, 51, 15, 255, 80, 51, 11, 255, 97, 64, 12, 255, 135, 84, 6, 255, 114, 70, 9, 255, 107, 67, 17, 255, 120, 79, 16, 255, 109, 71, 12, 255, 92, 65, 12, 255, 101, 68, 12, 255, 93, 64, 7, 255, 94, 63, 2, 255, 102, 68, 4, 255, 114, 75, 18, 255, 90, 62, 14, 255, 82, 61, 10, 255, 85, 65, 16, 255, 89, 66, 17, 255, 88, 69, 11, 255, 108, 79, 13, 255, 97, 68, 11, 255, 99, 68, 11, 255, 106, 74, 23, 255, 102, 78, 11, 255, 105, 77, 7, 255, 110, 77, 7, 255, 105, 73, 16, 255, 104, 72, 18, 255, 105, 72, 15, 255, 106, 73, 19, 255, 107, 77, 17, 255, 110, 80, 14, 255, 114, 79, 9, 255, 114, 77, 15, 255, 115, 78, 12, 255, 116, 81, 12, 255, 113, 82, 11, 255, 114, 82, 12, 255, 114, 80, 16, 255, 113, 78, 25, 255, 113, 79, 19, 255, 114, 80, 16, 255, 117, 79, 14, 255, 123, 85, 8, 255, 128, 85, 12, 255, 130, 78, 17, 255, 130, 86, 9, 255, 129, 85, 7, 255, 127, 86, 13, 255, 129, 82, 9, 255, 128, 84, 22, 255, 126, 85, 16, 255, 132, 83, 11, 255, 144, 88, 16, 255, 143, 89, 13, 255, 129, 82, 15, 255, 117, 78, 13, 255, 107, 76, 14, 255, 109, 75, 11, 255, 117, 85, 6, 255, 127, 89, 11, 255, 156, 97, 15, 255, 166, 97, 8, 255, 165, 99, 12, 255, 159, 93, 2, 255, 158, 88, 8, 255, 158, 92, 11, 255, 154, 94, 11, 255, 156, 99, 4, 255, 158, 102, 5, 255, 159, 103, 13, 255, 161, 106, 11, 255, 163, 110, 4, 255, 157, 107, 7, 255, 153, 101, 6, 255, 160, 108, 3, 255, 167, 116, 7, 255, 183, 135, 6, 255, 188, 147, 4, 255, 184, 137, 8, 255, 187, 134, 14, 255, 201, 152, 4, 255, 187, 137, 4, 255, 174, 123, 6, 255, 175, 123, 9, 255, 185, 133, 10, 255, 187, 139, 5, 255, 194, 141, 4, 255, 196, 143, 8, 255, 198, 152, 7, 255, 204, 151, 5, 255, 207, 153, 9, 255, 200, 146, 4, 255, 200, 149, 0, 255, 202, 150, 5, 255, 201, 146, 17, 255, 197, 143, 14, 255, 197, 140, 8, 255, 196, 139, 7, 255, 194, 135, 6, 255, 190, 130, 3, 255, 188, 127, 2, 255, 186, 126, 2, 255, 186, 123, 2, 255, 186, 119, 7, 255, 181, 112, 7, 255, 179, 112, 6, 255, 178, 112, 1, 255, 173, 106, 2, 255, 172, 102, 7, 255, 173, 97, 8, 255, 170, 96, 6, 255, 168, 94, 5, 255, 166, 91, 2, 255, 166, 90, 1, 255, 168, 94, 1, 255, 167, 93, 3, 255, 163, 88, 2, 255, 160, 84, 0, 255, 160, 84, 1, 255, 157, 83, 3, 255, 151, 76, 2, 255, 154, 75, 4, 255, 151, 76, 9, 255, 148, 74, 4, 255, 146, 71, 1, 255, 145, 67, 6, 255, 138, 62, 2, 255, 132, 59, 1, 255, 122, 51, 6, 255, 121, 45, 9, 255, 114, 41, 5, 255, 107, 41, 3, 255, 103, 41, 4, 255, 100, 37, 3, 255, 97, 33, 3, 255, 102, 39, 3, 255, 107, 41, 5, 255, 93, 31, 4, 255, 77, 26, 0, 255, 90, 33, 5, 255, 99, 38, 8, 255, 109, 42, 4, 255, 117, 34, 3, 255, 111, 35, 2, 255, 104, 39, 3, 255, 100, 34, 3, 255, 88, 30, 5, 255, 67, 27, 5, 255, 52, 19, 1, 255, 57, 22, 3, 255, 70, 23, 3, 255, 79, 25, 1, 255, 79, 28, 4, 255, 68, 26, 3, 255, 69, 24, 3, 255, 79, 23, 3, 255, 75, 27, 2, 255, 56, 25, 2, 255, 55, 28, 5, 255, 71, 22, 2, 255, 88, 34, 4, 255, 88, 42, 8, 255, 86, 27, 1, 255, 83, 23, 3, 255, 72, 25, 3, 255, 75, 28, 2, 255, 91, 36, 5, 255, 92, 34, 2, 255, 85, 27, 1, 255, 84, 26, 2, 255, 81, 24, 0, 255, 97, 32, 7, 255, 124, 48, 5, 255, 127, 55, 5, 255, 129, 54, 4, 255, 129, 54, 1, 255, 132, 55, 1, 255, 136, 56, 2, 255, 135, 54, 5, 255, 130, 60, 4, 255, 137, 69, 4, 255, 141, 62, 4, 255, 96, 31, 3, 255, 58, 14, 4, 255, 62, 18, 1, 255, 65, 17, 6, 255, 64, 20, 0, 255, 65, 25, 2, 255, 63, 18, 0, 255, 65, 21, 2, 255, 59, 19, 1, 255, 59, 18, 2, 255, 70, 20, 1, 255, 58, 15, 0, 255, 58, 16, 8, 255, 48, 9, 7, 255, 48, 17, 3, 255, 59, 24, 5, 255, 69, 22, 0, 255, 78, 23, 1, 255, 74, 24, 2, 255, 78, 25, 4, 255, 82, 22, 3, 255, 79, 19, 2, 255, 73, 17, 3, 255, 75, 22, 0, 255, 76, 20, 1, 255, 75, 19, 3, 255, 73, 19, 4, 255, 74, 20, 1, 255, 86, 30, 2, 255, 107, 36, 5, 255, 118, 45, 4, 255, 119, 49, 1, 255, 128, 50, 3, 255, 128, 46, 2, 255, 117, 42, 6, 255, 97, 27, 7, 255, 81, 21, 3, 255, 79, 25, 3, 255, 79, 21, 3, 255, 9, 6, 1, 255, 9, 6, 2, 255, 10, 6, 2, 255, 12, 9, 2, 255, 13, 10, 0, 255, 15, 10, 2, 255, 16, 12, 3, 255, 16, 12, 2, 255, 14, 12, 2, 255, 16, 14, 4, 255, 19, 16, 4, 255, 20, 17, 3, 255, 23, 21, 6, 255, 23, 24, 10, 255, 22, 23, 10, 255, 26, 27, 8, 255, 31, 31, 5, 255, 35, 34, 6, 255, 36, 37, 13, 255, 33, 42, 8, 255, 50, 47, 6, 255, 44, 45, 6, 255, 33, 35, 8, 255, 84, 82, 11, 255, 100, 87, 19, 255, 63, 60, 20, 255, 35, 46, 28, 255, 49, 50, 16, 255, 61, 56, 14, 255, 51, 52, 20, 255, 56, 50, 16, 255, 55, 55, 4, 255, 50, 51, 20, 255, 50, 44, 23, 255, 54, 42, 25, 255, 52, 40, 19, 255, 49, 32, 14, 255, 41, 32, 13, 255, 41, 34, 3, 255, 37, 28, 1, 255, 47, 37, 10, 255, 65, 51, 30, 255, 64, 56, 46, 255, 61, 56, 40, 255, 73, 63, 46, 255, 75, 69, 58, 255, 64, 63, 51, 255, 63, 63, 60, 255, 63, 60, 50, 255, 63, 61, 40, 255, 65, 61, 45, 255, 65, 62, 49, 255, 65, 56, 51, 255, 61, 45, 21, 255, 59, 40, 10, 255, 60, 51, 20, 255, 64, 58, 21, 255, 52, 35, 6, 255, 55, 26, 2, 255, 53, 27, 7, 255, 51, 37, 10, 255, 62, 50, 6, 255, 65, 42, 2, 255, 58, 27, 1, 255, 53, 30, 5, 255, 58, 27, 5, 255, 64, 26, 3, 255, 65, 32, 6, 255, 66, 32, 2, 255, 72, 30, 1, 255, 75, 34, 6, 255, 70, 33, 5, 255, 64, 32, 3, 255, 61, 31, 2, 255, 67, 31, 3, 255, 69, 33, 4, 255, 65, 34, 2, 255, 71, 34, 2, 255, 68, 36, 1, 255, 70, 39, 5, 255, 68, 35, 4, 255, 69, 35, 4, 255, 72, 39, 6, 255, 73, 33, 2, 255, 77, 36, 4, 255, 80, 39, 5, 255, 80, 37, 2, 255, 86, 40, 5, 255, 88, 41, 6, 255, 85, 41, 4, 255, 88, 45, 6, 255, 90, 42, 5, 255, 90, 42, 4, 255, 95, 43, 7, 255, 100, 44, 8, 255, 93, 41, 2, 255, 89, 44, 4, 255, 93, 47, 6, 255, 89, 43, 1, 255, 84, 42, 0, 255, 87, 45, 2, 255, 87, 46, 2, 255, 89, 45, 2, 255, 89, 44, 2, 255, 87, 42, 0, 255, 89, 45, 3, 255, 88, 44, 3, 255, 86, 46, 3, 255, 86, 46, 4, 255, 89, 46, 6, 255, 90, 45, 3, 255, 90, 47, 4, 255, 85, 46, 2, 255, 86, 46, 1, 255, 96, 47, 1, 255, 92, 48, 1, 255, 92, 48, 1, 255, 97, 53, 5, 255, 93, 49, 2, 255, 96, 51, 4, 255, 96, 51, 4, 255, 90, 47, 1, 255, 92, 47, 3, 255, 97, 49, 3, 255, 93, 53, 2, 255, 98, 55, 4, 255, 102, 51, 3, 255, 100, 54, 4, 255, 97, 56, 0, 255, 97, 58, 1, 255, 90, 50, 1, 255, 94, 52, 2, 255, 99, 52, 4, 255, 103, 55, 8, 255, 103, 55, 7, 255, 98, 51, 2, 255, 103, 56, 3, 255, 106, 55, 1, 255, 120, 59, 7, 255, 127, 60, 8, 255, 133, 65, 13, 255, 137, 66, 13, 255, 144, 72, 7, 255, 150, 78, 2, 255, 152, 76, 4, 255, 150, 76, 9, 255, 153, 82, 4, 255, 152, 80, 5, 255, 146, 72, 3, 255, 148, 76, 6, 255, 134, 66, 6, 255, 130, 66, 7, 255, 133, 69, 11, 255, 115, 50, 5, 255, 113, 58, 1, 255, 119, 64, 1, 255, 111, 56, 9, 255, 108, 57, 10, 255, 117, 64, 10, 255, 113, 65, 7, 255, 110, 60, 5, 255, 114, 63, 10, 255, 106, 52, 4, 255, 105, 54, 6, 255, 100, 49, 7, 255, 110, 63, 8, 255, 138, 74, 9, 255, 118, 55, 9, 255, 85, 53, 12, 255, 74, 50, 6, 255, 96, 59, 10, 255, 95, 53, 7, 255, 82, 49, 14, 255, 96, 58, 9, 255, 109, 64, 11, 255, 104, 59, 11, 255, 86, 47, 7, 255, 84, 53, 5, 255, 85, 57, 8, 255, 82, 57, 12, 255, 112, 84, 7, 255, 138, 84, 9, 255, 90, 55, 1, 255, 85, 66, 8, 255, 78, 61, 7, 255, 90, 62, 13, 255, 91, 60, 17, 255, 80, 62, 6, 255, 79, 60, 13, 255, 86, 61, 20, 255, 86, 61, 7, 255, 85, 61, 3, 255, 78, 65, 11, 255, 92, 64, 14, 255, 94, 71, 7, 255, 94, 70, 11, 255, 97, 69, 13, 255, 96, 75, 12, 255, 101, 75, 5, 255, 101, 69, 19, 255, 100, 72, 19, 255, 102, 74, 6, 255, 105, 77, 3, 255, 105, 74, 19, 255, 105, 74, 18, 255, 103, 76, 8, 255, 108, 76, 10, 255, 109, 79, 8, 255, 107, 78, 18, 255, 110, 80, 11, 255, 117, 80, 13, 255, 116, 82, 16, 255, 115, 79, 14, 255, 114, 80, 9, 255, 110, 80, 10, 255, 112, 82, 17, 255, 114, 80, 13, 255, 118, 81, 11, 255, 117, 82, 11, 255, 123, 84, 17, 255, 125, 83, 16, 255, 129, 84, 16, 255, 129, 85, 16, 255, 128, 87, 16, 255, 136, 86, 12, 255, 140, 89, 14, 255, 139, 86, 14, 255, 145, 90, 7, 255, 133, 87, 8, 255, 133, 84, 15, 255, 140, 89, 10, 255, 154, 96, 18, 255, 153, 96, 5, 255, 141, 88, 4, 255, 133, 84, 12, 255, 132, 88, 14, 255, 147, 97, 13, 255, 165, 99, 15, 255, 171, 103, 7, 255, 176, 105, 4, 255, 171, 99, 2, 255, 162, 94, 9, 255, 158, 95, 12, 255, 152, 93, 10, 255, 149, 87, 8, 255, 147, 85, 3, 255, 145, 86, 10, 255, 140, 86, 10, 255, 146, 90, 5, 255, 148, 91, 11, 255, 148, 98, 5, 255, 150, 103, 4, 255, 157, 109, 2, 255, 173, 121, 8, 255, 174, 120, 15, 255, 175, 122, 9, 255, 187, 142, 6, 255, 192, 152, 10, 255, 191, 143, 12, 255, 189, 138, 4, 255, 190, 143, 8, 255, 191, 143, 6, 255, 179, 122, 3, 255, 178, 128, 16, 255, 184, 133, 2, 255, 186, 130, 4, 255, 194, 147, 3, 255, 197, 144, 7, 255, 202, 151, 6, 255, 200, 150, 6, 255, 197, 149, 6, 255, 203, 153, 2, 255, 200, 149, 2, 255, 196, 143, 8, 255, 196, 143, 6, 255, 197, 142, 6, 255, 194, 136, 4, 255, 192, 133, 4, 255, 192, 131, 5, 255, 189, 127, 5, 255, 188, 126, 6, 255, 186, 123, 6, 255, 183, 120, 7, 255, 180, 116, 7, 255, 177, 112, 4, 255, 177, 110, 3, 255, 176, 108, 5, 255, 172, 102, 5, 255, 171, 99, 3, 255, 168, 98, 1, 255, 166, 97, 2, 255, 164, 92, 1, 255, 164, 89, 3, 255, 163, 88, 7, 255, 159, 86, 6, 255, 156, 83, 3, 255, 155, 81, 2, 255, 155, 84, 4, 255, 152, 81, 4, 255, 150, 76, 3, 255, 150, 72, 2, 255, 154, 79, 3, 255, 150, 76, 4, 255, 148, 70, 5, 255, 144, 66, 3, 255, 139, 62, 2, 255, 136, 65, 3, 255, 125, 62, 3, 255, 115, 51, 8, 255, 109, 46, 2, 255, 109, 46, 1, 255, 105, 40, 1, 255, 102, 35, 1, 255, 101, 33, 6, 255, 99, 34, 2, 255, 102, 36, 1, 255, 92, 33, 6, 255, 74, 25, 0, 255, 84, 28, 1, 255, 97, 34, 6, 255, 97, 31, 2, 255, 109, 35, 4, 255, 118, 37, 8, 255, 103, 32, 4, 255, 77, 26, 2, 255, 60, 21, 2, 255, 55, 22, 4, 255, 57, 21, 4, 255, 73, 25, 7, 255, 80, 25, 4, 255, 80, 25, 1, 255, 81, 28, 3, 255, 81, 30, 3, 255, 84, 26, 0, 255, 87, 28, 4, 255, 82, 31, 1, 255, 92, 27, 8, 255, 77, 18, 9, 255, 61, 15, 3, 255, 72, 22, 1, 255, 76, 25, 4, 255, 83, 24, 3, 255, 80, 20, 1, 255, 69, 20, 1, 255, 83, 33, 7, 255, 96, 34, 4, 255, 86, 28, 3, 255, 77, 25, 2, 255, 85, 28, 1, 255, 80, 26, 4, 255, 73, 25, 3, 255, 96, 34, 5, 255, 131, 48, 1, 255, 119, 37, 5, 255, 98, 27, 6, 255, 90, 26, 1, 255, 99, 29, 0, 255, 103, 32, 2, 255, 109, 41, 4, 255, 119, 45, 4, 255, 124, 39, 4, 255, 87, 24, 0, 255, 52, 19, 1, 255, 60, 23, 3, 255, 67, 16, 0, 255, 70, 19, 3, 255, 64, 25, 4, 255, 71, 21, 4, 255, 68, 16, 2, 255, 53, 17, 2, 255, 46, 16, 2, 255, 61, 19, 4, 255, 58, 17, 4, 255, 47, 16, 4, 255, 42, 18, 1, 255, 56, 19, 3, 255, 70, 18, 2, 255, 80, 22, 7, 255, 80, 24, 2, 255, 79, 26, 0, 255, 79, 26, 4, 255, 77, 19, 7, 255, 72, 12, 5, 255, 74, 16, 6, 255, 70, 18, 5, 255, 66, 16, 0, 255, 76, 23, 0, 255, 92, 34, 4, 255, 104, 40, 4, 255, 112, 43, 1, 255, 119, 43, 2, 255, 122, 47, 0, 255, 122, 46, 0, 255, 128, 45, 2, 255, 128, 46, 2, 255, 125, 43, 2, 255, 121, 35, 4, 255, 102, 31, 4, 255, 89, 23, 1, 255, 83, 21, 0, 255, 10, 8, 3, 255, 9, 7, 3, 255, 9, 7, 3, 255, 11, 9, 3, 255, 10, 9, 2, 255, 11, 10, 3, 255, 14, 13, 3, 255, 16, 16, 4, 255, 14, 15, 5, 255, 17, 16, 5, 255, 19, 17, 5, 255, 19, 17, 3, 255, 25, 24, 6, 255, 25, 28, 7, 255, 22, 26, 6, 255, 27, 30, 8, 255, 35, 37, 5, 255, 39, 40, 6, 255, 38, 40, 8, 255, 35, 44, 9, 255, 49, 47, 1, 255, 44, 51, 8, 255, 109, 114, 18, 255, 124, 111, 9, 255, 49, 48, 8, 255, 51, 50, 26, 255, 53, 54, 26, 255, 56, 53, 23, 255, 51, 49, 24, 255, 54, 49, 22, 255, 58, 48, 17, 255, 56, 50, 26, 255, 51, 47, 25, 255, 53, 47, 14, 255, 57, 47, 5, 255, 52, 44, 12, 255, 49, 41, 20, 255, 45, 34, 2, 255, 48, 29, 4, 255, 43, 28, 3, 255, 41, 34, 5, 255, 58, 44, 15, 255, 73, 54, 24, 255, 64, 53, 41, 255, 66, 59, 45, 255, 74, 67, 57, 255, 63, 62, 52, 255, 63, 66, 52, 255, 63, 63, 51, 255, 64, 61, 41, 255, 66, 58, 42, 255, 66, 61, 53, 255, 59, 52, 44, 255, 66, 48, 27, 255, 67, 45, 14, 255, 59, 46, 21, 255, 64, 59, 27, 255, 62, 48, 6, 255, 55, 30, 0, 255, 56, 28, 7, 255, 66, 38, 9, 255, 76, 53, 8, 255, 66, 45, 8, 255, 56, 29, 9, 255, 57, 28, 1, 255, 59, 31, 3, 255, 60, 28, 1, 255, 63, 28, 1, 255, 66, 29, 1, 255, 67, 30, 1, 255, 70, 32, 4, 255, 64, 29, 2, 255, 61, 30, 1, 255, 68, 34, 6, 255, 67, 31, 4, 255, 66, 32, 3, 255, 68, 35, 5, 255, 74, 34, 4, 255, 72, 33, 1, 255, 68, 39, 3, 255, 71, 36, 2, 255, 81, 37, 4, 255, 74, 38, 3, 255, 67, 40, 4, 255, 71, 37, 2, 255, 81, 41, 4, 255, 76, 40, 2, 255, 72, 38, 0, 255, 78, 37, 1, 255, 80, 40, 2, 255, 74, 41, 1, 255, 82, 44, 3, 255, 86, 43, 2, 255, 85, 42, 2, 255, 85, 44, 1, 255, 86, 43, 0, 255, 91, 47, 5, 255, 95, 50, 7, 255, 93, 47, 3, 255, 92, 49, 4, 255, 88, 45, 1, 255, 92, 47, 4, 255, 95, 48, 3, 255, 96, 48, 3, 255, 92, 47, 3, 255, 89, 45, 3, 255, 83, 46, 2, 255, 81, 48, 5, 255, 78, 46, 3, 255, 85, 44, 2, 255, 91, 45, 4, 255, 93, 46, 4, 255, 91, 47, 4, 255, 88, 44, 0, 255, 93, 48, 2, 255, 96, 48, 2, 255, 94, 47, 2, 255, 91, 46, 2, 255, 92, 48, 3, 255, 95, 53, 4, 255, 92, 53, 4, 255, 91, 50, 4, 255, 93, 45, 1, 255, 93, 48, 2, 255, 93, 52, 2, 255, 95, 54, 3, 255, 97, 50, 1, 255, 101, 53, 2, 255, 100, 52, 4, 255, 95, 47, 5, 255, 99, 49, 5, 255, 103, 51, 4, 255, 100, 52, 0, 255, 96, 54, 4, 255, 98, 52, 6, 255, 95, 49, 1, 255, 96, 55, 5, 255, 93, 51, 3, 255, 96, 52, 8, 255, 94, 50, 6, 255, 95, 49, 4, 255, 92, 45, 4, 255, 102, 52, 5, 255, 111, 59, 10, 255, 100, 46, 3, 255, 107, 54, 7, 255, 103, 55, 3, 255, 95, 44, 8, 255, 102, 50, 10, 255, 103, 50, 9, 255, 95, 47, 4, 255, 87, 46, 6, 255, 88, 50, 5, 255, 98, 57, 4, 255, 88, 46, 8, 255, 91, 49, 6, 255, 105, 58, 4, 255, 96, 49, 7, 255, 120, 67, 6, 255, 108, 57, 8, 255, 91, 48, 5, 255, 89, 45, 7, 255, 91, 47, 7, 255, 109, 64, 12, 255, 97, 52, 11, 255, 104, 62, 14, 255, 99, 59, 2, 255, 92, 54, 5, 255, 81, 54, 9, 255, 75, 52, 13, 255, 86, 53, 9, 255, 87, 51, 9, 255, 81, 56, 4, 255, 86, 62, 8, 255, 103, 60, 12, 255, 94, 56, 11, 255, 81, 50, 16, 255, 87, 54, 18, 255, 82, 57, 5, 255, 79, 57, 5, 255, 94, 59, 19, 255, 88, 58, 16, 255, 87, 54, 12, 255, 86, 62, 7, 255, 83, 62, 13, 255, 83, 60, 10, 255, 83, 62, 8, 255, 80, 67, 8, 255, 81, 63, 12, 255, 83, 63, 10, 255, 89, 67, 8, 255, 83, 64, 6, 255, 93, 64, 17, 255, 98, 66, 26, 255, 98, 68, 6, 255, 100, 73, 10, 255, 102, 72, 15, 255, 109, 77, 16, 255, 106, 75, 17, 255, 97, 71, 17, 255, 99, 74, 13, 255, 101, 74, 12, 255, 103, 76, 8, 255, 102, 74, 14, 255, 103, 77, 12, 255, 105, 74, 19, 255, 111, 77, 20, 255, 112, 79, 9, 255, 109, 80, 9, 255, 113, 82, 12, 255, 119, 82, 12, 255, 120, 81, 6, 255, 116, 79, 16, 255, 115, 82, 11, 255, 116, 81, 6, 255, 120, 79, 11, 255, 121, 77, 14, 255, 124, 82, 12, 255, 134, 84, 20, 255, 144, 87, 12, 255, 147, 89, 11, 255, 149, 92, 11, 255, 154, 93, 11, 255, 157, 90, 12, 255, 158, 91, 12, 255, 155, 93, 10, 255, 162, 89, 10, 255, 164, 92, 11, 255, 158, 92, 13, 255, 152, 87, 7, 255, 151, 90, 14, 255, 161, 97, 19, 255, 159, 92, 5, 255, 162, 95, 11, 255, 167, 104, 8, 255, 165, 101, 6, 255, 174, 103, 5, 255, 176, 105, 10, 255, 178, 108, 6, 255, 176, 105, 6, 255, 175, 101, 6, 255, 167, 93, 4, 255, 161, 90, 9, 255, 144, 88, 14, 255, 144, 84, 10, 255, 147, 85, 7, 255, 141, 86, 11, 255, 133, 82, 9, 255, 138, 82, 7, 255, 138, 82, 5, 255, 138, 86, 4, 255, 140, 90, 11, 255, 148, 97, 6, 255, 164, 110, 8, 255, 172, 116, 4, 255, 175, 118, 7, 255, 177, 132, 8, 255, 194, 152, 4, 255, 193, 154, 8, 255, 193, 153, 15, 255, 197, 151, 5, 255, 188, 136, 8, 255, 176, 121, 2, 255, 186, 138, 4, 255, 185, 133, 5, 255, 170, 111, 7, 255, 184, 132, 8, 255, 193, 143, 9, 255, 201, 151, 4, 255, 198, 152, 5, 255, 200, 154, 8, 255, 201, 154, 11, 255, 198, 149, 9, 255, 197, 144, 9, 255, 195, 140, 3, 255, 194, 137, 4, 255, 188, 130, 2, 255, 190, 132, 5, 255, 192, 133, 9, 255, 189, 128, 6, 255, 187, 126, 5, 255, 187, 126, 6, 255, 184, 122, 7, 255, 181, 119, 3, 255, 178, 115, 4, 255, 176, 110, 6, 255, 175, 106, 6, 255, 173, 103, 4, 255, 167, 98, 3, 255, 164, 98, 3, 255, 163, 98, 3, 255, 162, 93, 2, 255, 163, 91, 5, 255, 158, 85, 5, 255, 155, 83, 5, 255, 157, 84, 7, 255, 154, 82, 4, 255, 149, 81, 2, 255, 146, 79, 1, 255, 152, 80, 6, 255, 154, 76, 7, 255, 151, 78, 2, 255, 149, 76, 0, 255, 148, 72, 1, 255, 146, 70, 0, 255, 143, 67, 4, 255, 137, 65, 3, 255, 127, 54, 1, 255, 122, 55, 1, 255, 117, 51, 5, 255, 113, 42, 6, 255, 111, 37, 4, 255, 108, 37, 4, 255, 100, 33, 3, 255, 98, 34, 2, 255, 99, 35, 0, 255, 89, 30, 3, 255, 72, 26, 3, 255, 86, 31, 3, 255, 99, 33, 3, 255, 103, 34, 2, 255, 103, 40, 5, 255, 90, 33, 3, 255, 67, 22, 2, 255, 58, 22, 5, 255, 60, 25, 5, 255, 65, 22, 3, 255, 69, 24, 3, 255, 69, 27, 2, 255, 75, 27, 4, 255, 82, 26, 5, 255, 84, 25, 2, 255, 93, 31, 3, 255, 88, 28, 1, 255, 84, 27, 5, 255, 86, 24, 2, 255, 81, 21, 3, 255, 66, 16, 4, 255, 50, 17, 0, 255, 45, 18, 3, 255, 55, 16, 4, 255, 67, 24, 2, 255, 81, 33, 5, 255, 75, 26, 2, 255, 79, 25, 1, 255, 98, 30, 5, 255, 89, 27, 1, 255, 92, 33, 2, 255, 95, 31, 5, 255, 86, 33, 4, 255, 83, 28, 0, 255, 69, 16, 3, 255, 68, 18, 4, 255, 62, 15, 3, 255, 48, 15, 2, 255, 47, 13, 4, 255, 56, 11, 5, 255, 55, 14, 5, 255, 64, 18, 5, 255, 65, 18, 0, 255, 66, 20, 4, 255, 61, 18, 3, 255, 48, 11, 2, 255, 51, 14, 6, 255, 48, 18, 1, 255, 50, 19, 2, 255, 54, 14, 2, 255, 61, 15, 3, 255, 55, 16, 2, 255, 58, 19, 3, 255, 60, 16, 1, 255, 55, 14, 0, 255, 55, 16, 2, 255, 50, 15, 4, 255, 52, 19, 1, 255, 63, 18, 2, 255, 76, 21, 1, 255, 77, 18, 2, 255, 81, 24, 5, 255, 82, 25, 3, 255, 79, 26, 2, 255, 75, 25, 1, 255, 75, 20, 1, 255, 76, 17, 2, 255, 61, 12, 5, 255, 75, 28, 1, 255, 103, 47, 0, 255, 125, 54, 4, 255, 126, 47, 3, 255, 114, 38, 2, 255, 118, 39, 4, 255, 129, 48, 3, 255, 129, 50, 0, 255, 126, 45, 1, 255, 123, 43, 2, 255, 120, 42, 0, 255, 117, 40, 1, 255, 112, 36, 3, 255, 103, 32, 2, 255, 97, 30, 4, 255, 11, 8, 4, 255, 13, 10, 4, 255, 12, 8, 2, 255, 12, 8, 4, 255, 14, 10, 3, 255, 15, 11, 1, 255, 14, 15, 2, 255, 20, 18, 8, 255, 21, 17, 7, 255, 20, 23, 2, 255, 24, 23, 6, 255, 22, 20, 4, 255, 25, 28, 8, 255, 35, 32, 6, 255, 33, 32, 2, 255, 34, 32, 12, 255, 37, 37, 10, 255, 39, 44, 5, 255, 41, 48, 4, 255, 44, 45, 10, 255, 43, 45, 7, 255, 67, 68, 10, 255, 105, 99, 17, 255, 48, 42, 5, 255, 42, 48, 8, 255, 53, 57, 4, 255, 55, 52, 13, 255, 49, 49, 33, 255, 53, 51, 20, 255, 49, 50, 12, 255, 59, 51, 38, 255, 56, 50, 25, 255, 49, 49, 14, 255, 53, 46, 3, 255, 50, 42, 12, 255, 41, 41, 9, 255, 47, 44, 5, 255, 57, 41, 5, 255, 49, 27, 5, 255, 42, 30, 2, 255, 44, 33, 6, 255, 53, 38, 6, 255, 69, 53, 22, 255, 67, 57, 37, 255, 53, 52, 41, 255, 66, 66, 52, 255, 61, 62, 42, 255, 61, 60, 48, 255, 66, 61, 58, 255, 63, 60, 40, 255, 67, 61, 45, 255, 69, 61, 50, 255, 70, 52, 37, 255, 76, 49, 33, 255, 64, 48, 8, 255, 51, 48, 24, 255, 62, 55, 29, 255, 72, 50, 10, 255, 61, 32, 1, 255, 59, 29, 1, 255, 63, 44, 4, 255, 63, 51, 9, 255, 69, 46, 9, 255, 72, 32, 6, 255, 61, 26, 1, 255, 64, 25, 3, 255, 65, 31, 4, 255, 62, 30, 2, 255, 65, 29, 2, 255, 64, 31, 3, 255, 63, 35, 4, 255, 66, 33, 4, 255, 71, 31, 3, 255, 72, 32, 3, 255, 67, 33, 2, 255, 70, 33, 2, 255, 71, 34, 2, 255, 74, 37, 3, 255, 73, 33, 1, 255, 67, 33, 1, 255, 70, 38, 2, 255, 74, 39, 2, 255, 75, 40, 0, 255, 68, 41, 3, 255, 68, 37, 2, 255, 76, 39, 2, 255, 81, 42, 5, 255, 78, 42, 3, 255, 79, 41, 1, 255, 83, 41, 3, 255, 79, 37, 2, 255, 79, 43, 2, 255, 79, 44, 1, 255, 84, 46, 2, 255, 86, 47, 4, 255, 81, 43, 1, 255, 80, 41, 1, 255, 78, 44, 1, 255, 79, 46, 1, 255, 86, 48, 5, 255, 89, 45, 1, 255, 89, 45, 0, 255, 90, 48, 1, 255, 96, 51, 6, 255, 97, 47, 4, 255, 90, 47, 2, 255, 85, 46, 1, 255, 94, 52, 2, 255, 98, 51, 2, 255, 95, 46, 2, 255, 90, 47, 3, 255, 90, 49, 3, 255, 91, 49, 2, 255, 88, 47, 0, 255, 86, 48, 3, 255, 92, 49, 6, 255, 91, 49, 6, 255, 84, 49, 6, 255, 93, 46, 4, 255, 99, 48, 4, 255, 90, 49, 3, 255, 88, 49, 4, 255, 92, 49, 4, 255, 95, 48, 2, 255, 96, 48, 2, 255, 101, 53, 3, 255, 101, 53, 5, 255, 98, 49, 1, 255, 97, 50, 4, 255, 98, 46, 4, 255, 101, 48, 5, 255, 105, 52, 6, 255, 100, 53, 2, 255, 97, 55, 2, 255, 98, 57, 2, 255, 97, 54, 1, 255, 97, 52, 3, 255, 102, 55, 3, 255, 100, 52, 4, 255, 99, 53, 6, 255, 98, 55, 2, 255, 94, 53, 5, 255, 94, 51, 3, 255, 90, 56, 1, 255, 86, 50, 5, 255, 92, 49, 4, 255, 90, 48, 3, 255, 87, 46, 7, 255, 96, 56, 2, 255, 88, 47, 6, 255, 84, 49, 2, 255, 85, 52, 8, 255, 84, 49, 5, 255, 105, 63, 7, 255, 93, 49, 2, 255, 87, 52, 0, 255, 99, 54, 4, 255, 91, 52, 11, 255, 106, 58, 10, 255, 101, 54, 10, 255, 91, 50, 5, 255, 87, 49, 4, 255, 77, 49, 2, 255, 106, 59, 17, 255, 96, 52, 12, 255, 86, 52, 11, 255, 79, 53, 10, 255, 79, 53, 4, 255, 87, 55, 7, 255, 87, 50, 10, 255, 87, 54, 10, 255, 80, 55, 5, 255, 76, 55, 5, 255, 81, 57, 7, 255, 85, 54, 9, 255, 82, 53, 12, 255, 79, 53, 11, 255, 82, 57, 9, 255, 79, 62, 5, 255, 78, 58, 12, 255, 84, 55, 15, 255, 89, 57, 8, 255, 87, 58, 19, 255, 81, 59, 13, 255, 82, 62, 11, 255, 79, 61, 5, 255, 83, 61, 11, 255, 90, 59, 16, 255, 88, 59, 12, 255, 87, 63, 15, 255, 91, 64, 9, 255, 100, 64, 16, 255, 97, 68, 12, 255, 99, 69, 15, 255, 100, 67, 26, 255, 102, 71, 11, 255, 105, 74, 8, 255, 101, 69, 15, 255, 103, 70, 21, 255, 102, 72, 13, 255, 102, 73, 7, 255, 101, 72, 14, 255, 105, 74, 10, 255, 111, 76, 11, 255, 114, 76, 11, 255, 122, 80, 11, 255, 122, 81, 9, 255, 128, 82, 10, 255, 128, 84, 8, 255, 122, 81, 13, 255, 129, 83, 12, 255, 131, 86, 13, 255, 129, 83, 19, 255, 132, 82, 14, 255, 137, 85, 16, 255, 141, 89, 9, 255, 139, 88, 22, 255, 146, 86, 22, 255, 161, 90, 15, 255, 166, 94, 13, 255, 171, 98, 7, 255, 176, 98, 13, 255, 174, 94, 16, 255, 173, 92, 9, 255, 168, 91, 19, 255, 167, 90, 18, 255, 168, 91, 8, 255, 168, 91, 3, 255, 165, 92, 7, 255, 154, 89, 10, 255, 168, 97, 16, 255, 181, 109, 11, 255, 176, 106, 8, 255, 172, 98, 13, 255, 174, 98, 11, 255, 177, 102, 7, 255, 174, 102, 3, 255, 174, 102, 7, 255, 179, 100, 13, 255, 176, 99, 6, 255, 170, 96, 2, 255, 160, 90, 7, 255, 160, 88, 10, 255, 163, 92, 3, 255, 149, 84, 10, 255, 143, 78, 19, 255, 155, 86, 7, 255, 153, 85, 1, 255, 137, 80, 7, 255, 134, 78, 10, 255, 139, 79, 10, 255, 136, 87, 6, 255, 143, 91, 7, 255, 148, 93, 13, 255, 158, 105, 6, 255, 176, 119, 12, 255, 172, 127, 12, 255, 189, 148, 13, 255, 195, 151, 2, 255, 200, 151, 13, 255, 199, 149, 15, 255, 187, 140, 2, 255, 183, 130, 8, 255, 190, 134, 5, 255, 184, 122, 7, 255, 151, 86, 6, 255, 165, 105, 6, 255, 194, 146, 11, 255, 193, 147, 8, 255, 199, 144, 7, 255, 200, 148, 6, 255, 199, 148, 2, 255, 196, 145, 0, 255, 193, 139, 2, 255, 192, 136, 5, 255, 192, 133, 3, 255, 193, 135, 10, 255, 190, 137, 6, 255, 188, 132, 4, 255, 187, 127, 7, 255, 187, 127, 5, 255, 188, 129, 7, 255, 183, 124, 5, 255, 181, 118, 5, 255, 181, 117, 7, 255, 179, 113, 3, 255, 173, 106, 0, 255, 171, 104, 2, 255, 169, 99, 4, 255, 166, 96, 10, 255, 162, 94, 13, 255, 161, 93, 7, 255, 161, 90, 2, 255, 162, 88, 2, 255, 158, 86, 3, 255, 156, 81, 3, 255, 157, 80, 3, 255, 153, 79, 1, 255, 150, 81, 2, 255, 150, 78, 3, 255, 153, 76, 5, 255, 152, 74, 4, 255, 143, 71, 2, 255, 135, 67, 0, 255, 136, 65, 2, 255, 136, 62, 4, 255, 137, 61, 5, 255, 135, 63, 4, 255, 129, 56, 2, 255, 123, 49, 1, 255, 115, 46, 1, 255, 105, 42, 0, 255, 105, 42, 4, 255, 101, 37, 2, 255, 93, 37, 1, 255, 93, 38, 3, 255, 91, 33, 3, 255, 75, 30, 1, 255, 85, 31, 2, 255, 103, 33, 4, 255, 104, 34, 1, 255, 85, 29, 4, 255, 62, 25, 4, 255, 52, 24, 2, 255, 64, 22, 2, 255, 73, 25, 4, 255, 59, 24, 3, 255, 62, 26, 6, 255, 67, 29, 3, 255, 77, 28, 0, 255, 87, 27, 2, 255, 82, 25, 4, 255, 89, 24, 3, 255, 87, 25, 4, 255, 70, 24, 2, 255, 66, 21, 4, 255, 59, 15, 2, 255, 55, 17, 3, 255, 60, 21, 4, 255, 58, 19, 1, 255, 43, 16, 2, 255, 47, 17, 5, 255, 76, 19, 5, 255, 83, 26, 3, 255, 66, 23, 1, 255, 77, 21, 6, 255, 81, 21, 2, 255, 76, 26, 1, 255, 83, 27, 4, 255, 79, 25, 4, 255, 62, 20, 3, 255, 52, 18, 4, 255, 63, 18, 5, 255, 58, 17, 4, 255, 47, 18, 0, 255, 40, 12, 4, 255, 40, 9, 5, 255, 35, 11, 4, 255, 23, 11, 1, 255, 22, 9, 2, 255, 38, 14, 5, 255, 49, 18, 2, 255, 46, 13, 1, 255, 42, 11, 4, 255, 41, 16, 1, 255, 40, 16, 3, 255, 43, 14, 5, 255, 53, 14, 6, 255, 50, 17, 0, 255, 65, 19, 3, 255, 65, 17, 3, 255, 46, 15, 0, 255, 42, 11, 3, 255, 45, 17, 4, 255, 60, 20, 1, 255, 78, 20, 4, 255, 79, 21, 5, 255, 77, 18, 3, 255, 78, 18, 4, 255, 83, 24, 2, 255, 77, 21, 0, 255, 74, 21, 2, 255, 68, 16, 1, 255, 68, 20, 3, 255, 82, 33, 4, 255, 118, 56, 3, 255, 141, 63, 3, 255, 130, 50, 5, 255, 116, 39, 5, 255, 115, 35, 5, 255, 124, 41, 3, 255, 129, 50, 4, 255, 126, 51, 3, 255, 124, 46, 1, 255, 124, 44, 0, 255, 123, 43, 1, 255, 122, 42, 3, 255, 123, 40, 3, 255, 110, 31, 2, 255, 97, 23, 3, 255, 8, 9, 3, 255, 10, 9, 3, 255, 14, 12, 4, 255, 11, 10, 3, 255, 15, 13, 4, 255, 18, 16, 4, 255, 16, 18, 1, 255, 24, 22, 7, 255, 24, 21, 6, 255, 18, 19, 0, 255, 29, 26, 6, 255, 32, 28, 9, 255, 30, 31, 6, 255, 38, 36, 8, 255, 36, 38, 7, 255, 35, 41, 10, 255, 34, 42, 12, 255, 35, 47, 5, 255, 37, 51, 9, 255, 42, 48, 12, 255, 45, 47, 14, 255, 44, 47, 16, 255, 41, 50, 9, 255, 59, 58, 8, 255, 52, 54, 6, 255, 42, 51, 6, 255, 53, 49, 5, 255, 51, 47, 17, 255, 50, 47, 9, 255, 52, 53, 6, 255, 54, 55, 18, 255, 53, 53, 21, 255, 46, 45, 10, 255, 45, 49, 9, 255, 51, 42, 12, 255, 45, 39, 10, 255, 43, 36, 10, 255, 55, 34, 5, 255, 47, 28, 6, 255, 41, 28, 6, 255, 42, 32, 6, 255, 43, 35, 7, 255, 50, 44, 18, 255, 53, 50, 32, 255, 51, 50, 43, 255, 57, 57, 54, 255, 59, 57, 48, 255, 66, 62, 48, 255, 65, 60, 48, 255, 59, 57, 43, 255, 56, 60, 38, 255, 59, 59, 43, 255, 70, 51, 23, 255, 61, 53, 18, 255, 49, 51, 12, 255, 52, 47, 20, 255, 61, 52, 38, 255, 61, 49, 22, 255, 60, 38, 9, 255, 61, 34, 2, 255, 56, 35, 3, 255, 57, 48, 14, 255, 64, 46, 9, 255, 74, 36, 7, 255, 55, 29, 4, 255, 61, 28, 6, 255, 62, 31, 3, 255, 62, 29, 3, 255, 68, 28, 3, 255, 69, 30, 5, 255, 67, 30, 2, 255, 71, 32, 1, 255, 80, 36, 7, 255, 73, 34, 2, 255, 66, 35, 3, 255, 68, 38, 4, 255, 72, 41, 6, 255, 68, 38, 2, 255, 71, 36, 2, 255, 72, 39, 6, 255, 73, 40, 4, 255, 75, 36, 0, 255, 78, 41, 4, 255, 71, 39, 3, 255, 73, 38, 3, 255, 77, 38, 2, 255, 77, 40, 2, 255, 78, 42, 3, 255, 79, 39, 0, 255, 85, 41, 3, 255, 83, 37, 4, 255, 83, 42, 5, 255, 83, 41, 4, 255, 85, 40, 3, 255, 86, 41, 4, 255, 84, 39, 4, 255, 86, 41, 7, 255, 80, 41, 3, 255, 81, 43, 4, 255, 88, 45, 6, 255, 92, 44, 5, 255, 88, 40, 2, 255, 85, 45, 1, 255, 85, 46, 1, 255, 86, 43, 1, 255, 85, 45, 2, 255, 90, 51, 7, 255, 94, 49, 5, 255, 96, 48, 1, 255, 96, 49, 3, 255, 90, 45, 2, 255, 90, 47, 5, 255, 94, 49, 5, 255, 91, 48, 2, 255, 88, 48, 2, 255, 91, 53, 2, 255, 93, 50, 4, 255, 86, 48, 3, 255, 91, 49, 3, 255, 91, 48, 1, 255, 90, 50, 0, 255, 90, 49, 2, 255, 91, 50, 5, 255, 93, 48, 2, 255, 96, 50, 4, 255, 94, 51, 2, 255, 95, 51, 2, 255, 96, 50, 2, 255, 100, 52, 3, 255, 95, 48, 2, 255, 90, 52, 4, 255, 88, 54, 2, 255, 96, 56, 4, 255, 98, 52, 3, 255, 95, 51, 1, 255, 98, 54, 5, 255, 98, 51, 4, 255, 100, 54, 1, 255, 100, 55, 4, 255, 96, 53, 3, 255, 97, 57, 3, 255, 100, 54, 7, 255, 97, 54, 6, 255, 97, 56, 5, 255, 94, 52, 8, 255, 93, 51, 5, 255, 91, 50, 0, 255, 93, 47, 4, 255, 95, 47, 3, 255, 94, 52, 2, 255, 85, 50, 4, 255, 84, 47, 4, 255, 91, 54, 3, 255, 94, 53, 8, 255, 92, 48, 12, 255, 92, 52, 10, 255, 96, 52, 7, 255, 82, 51, 5, 255, 89, 57, 0, 255, 91, 54, 1, 255, 83, 51, 6, 255, 81, 53, 8, 255, 71, 55, 5, 255, 81, 51, 10, 255, 83, 51, 2, 255, 87, 51, 7, 255, 85, 50, 4, 255, 85, 51, 2, 255, 84, 50, 2, 255, 84, 50, 6, 255, 86, 53, 7, 255, 87, 54, 6, 255, 86, 55, 7, 255, 86, 61, 11, 255, 82, 51, 10, 255, 79, 53, 11, 255, 82, 58, 8, 255, 86, 57, 8, 255, 84, 56, 10, 255, 87, 55, 20, 255, 90, 57, 14, 255, 86, 59, 7, 255, 77, 54, 17, 255, 78, 58, 9, 255, 86, 64, 6, 255, 87, 63, 6, 255, 83, 61, 10, 255, 83, 61, 12, 255, 85, 63, 13, 255, 90, 66, 14, 255, 96, 67, 17, 255, 101, 65, 26, 255, 105, 70, 11, 255, 99, 71, 7, 255, 99, 73, 11, 255, 102, 67, 22, 255, 106, 66, 15, 255, 108, 70, 11, 255, 109, 73, 13, 255, 113, 76, 12, 255, 114, 76, 7, 255, 118, 74, 18, 255, 124, 78, 17, 255, 127, 78, 17, 255, 131, 79, 23, 255, 146, 83, 14, 255, 152, 89, 9, 255, 155, 90, 21, 255, 151, 89, 14, 255, 151, 86, 12, 255, 158, 93, 12, 255, 153, 90, 13, 255, 147, 82, 13, 255, 155, 89, 8, 255, 160, 92, 9, 255, 160, 90, 11, 255, 162, 90, 13, 255, 171, 99, 12, 255, 170, 96, 5, 255, 172, 96, 10, 255, 174, 97, 9, 255, 174, 98, 11, 255, 175, 97, 16, 255, 172, 96, 9, 255, 170, 97, 8, 255, 171, 91, 11, 255, 179, 98, 11, 255, 179, 100, 20, 255, 172, 99, 6, 255, 179, 103, 21, 255, 199, 112, 12, 255, 202, 113, 8, 255, 190, 110, 6, 255, 180, 104, 4, 255, 179, 100, 13, 255, 179, 99, 16, 255, 178, 100, 6, 255, 180, 98, 4, 255, 177, 94, 7, 255, 170, 89, 6, 255, 165, 89, 5, 255, 161, 93, 10, 255, 151, 90, 7, 255, 160, 86, 7, 255, 149, 86, 7, 255, 136, 80, 12, 255, 142, 80, 10, 255, 141, 82, 7, 255, 124, 73, 9, 255, 108, 69, 8, 255, 95, 65, 8, 255, 116, 83, 5, 255, 135, 86, 7, 255, 137, 84, 6, 255, 137, 91, 5, 255, 157, 110, 17, 255, 168, 122, 8, 255, 187, 144, 11, 255, 192, 148, 8, 255, 195, 149, 7, 255, 195, 148, 12, 255, 180, 133, 5, 255, 186, 136, 13, 255, 186, 129, 10, 255, 170, 115, 6, 255, 150, 102, 5, 255, 158, 99, 8, 255, 191, 131, 8, 255, 195, 146, 7, 255, 192, 143, 7, 255, 194, 144, 6, 255, 196, 145, 5, 255, 196, 143, 5, 255, 189, 132, 5, 255, 187, 126, 7, 255, 186, 127, 2, 255, 191, 137, 3, 255, 185, 130, 3, 255, 192, 134, 6, 255, 192, 132, 1, 255, 184, 121, 2, 255, 184, 123, 6, 255, 182, 123, 2, 255, 182, 119, 4, 255, 179, 116, 5, 255, 179, 112, 4, 255, 175, 108, 2, 255, 173, 105, 4, 255, 169, 100, 5, 255, 163, 97, 1, 255, 163, 98, 3, 255, 162, 96, 5, 255, 158, 90, 4, 255, 159, 88, 4, 255, 158, 86, 4, 255, 155, 85, 4, 255, 153, 82, 5, 255, 150, 79, 2, 255, 155, 83, 6, 255, 152, 80, 6, 255, 141, 70, 1, 255, 140, 67, 7, 255, 135, 62, 4, 255, 132, 61, 1, 255, 138, 68, 1, 255, 144, 69, 4, 255, 141, 64, 5, 255, 139, 62, 4, 255, 136, 61, 3, 255, 128, 55, 3, 255, 121, 50, 1, 255, 113, 45, 2, 255, 107, 44, 2, 255, 103, 41, 4, 255, 100, 37, 7, 255, 96, 33, 1, 255, 95, 35, 5, 255, 80, 33, 3, 255, 81, 31, 1, 255, 92, 34, 3, 255, 86, 31, 5, 255, 71, 23, 1, 255, 74, 25, 6, 255, 74, 29, 2, 255, 71, 23, 5, 255, 68, 21, 5, 255, 62, 24, 3, 255, 69, 22, 4, 255, 71, 26, 3, 255, 70, 26, 5, 255, 80, 28, 6, 255, 74, 24, 1, 255, 66, 20, 1, 255, 64, 20, 0, 255, 64, 22, 2, 255, 65, 23, 4, 255, 56, 18, 2, 255, 55, 19, 0, 255, 68, 23, 3, 255, 78, 21, 4, 255, 68, 24, 9, 255, 46, 18, 2, 255, 55, 20, 3, 255, 59, 19, 1, 255, 56, 19, 3, 255, 57, 14, 4, 255, 52, 17, 5, 255, 48, 21, 3, 255, 56, 17, 3, 255, 54, 13, 3, 255, 46, 16, 6, 255, 38, 16, 7, 255, 40, 15, 7, 255, 45, 16, 5, 255, 46, 14, 3, 255, 34, 13, 2, 255, 18, 12, 1, 255, 21, 13, 5, 255, 20, 9, 4, 255, 22, 9, 2, 255, 36, 17, 3, 255, 42, 21, 0, 255, 46, 16, 0, 255, 51, 14, 4, 255, 50, 17, 5, 255, 48, 17, 4, 255, 53, 16, 0, 255, 56, 20, 0, 255, 56, 20, 4, 255, 53, 20, 6, 255, 48, 20, 2, 255, 41, 14, 7, 255, 39, 13, 4, 255, 46, 16, 5, 255, 51, 15, 4, 255, 53, 15, 1, 255, 61, 18, 1, 255, 73, 22, 2, 255, 75, 21, 2, 255, 75, 20, 3, 255, 72, 17, 3, 255, 61, 13, 4, 255, 67, 20, 3, 255, 100, 40, 5, 255, 122, 59, 6, 255, 137, 61, 3, 255, 146, 64, 2, 255, 137, 58, 3, 255, 123, 46, 0, 255, 129, 51, 0, 255, 136, 58, 1, 255, 140, 61, 3, 255, 139, 61, 5, 255, 135, 54, 3, 255, 132, 48, 4, 255, 128, 44, 5, 255, 120, 40, 4, 255, 105, 38, 2, 255, 94, 28, 0, 255, 89, 27, 0, 255, 6, 7, 2, 255, 6, 7, 0, 255, 12, 12, 2, 255, 15, 13, 4, 255, 18, 14, 5, 255, 20, 16, 3, 255, 20, 19, 3, 255, 24, 22, 8, 255, 27, 24, 10, 255, 23, 22, 2, 255, 29, 27, 7, 255, 33, 31, 10, 255, 34, 37, 6, 255, 35, 39, 6, 255, 36, 40, 15, 255, 33, 44, 9, 255, 41, 54, 11, 255, 36, 52, 2, 255, 38, 51, 14, 255, 43, 56, 13, 255, 43, 54, 4, 255, 58, 56, 8, 255, 55, 59, 4, 255, 48, 55, 11, 255, 50, 49, 4, 255, 55, 55, 9, 255, 47, 52, 5, 255, 49, 47, 3, 255, 47, 45, 5, 255, 50, 45, 1, 255, 58, 54, 12, 255, 55, 52, 20, 255, 53, 47, 11, 255, 46, 37, 13, 255, 42, 38, 14, 255, 47, 38, 9, 255, 43, 32, 11, 255, 45, 35, 7, 255, 43, 28, 8, 255, 49, 28, 8, 255, 50, 30, 3, 255, 46, 30, 2, 255, 49, 37, 16, 255, 56, 45, 30, 255, 57, 48, 35, 255, 61, 60, 43, 255, 58, 56, 49, 255, 63, 64, 44, 255, 61, 65, 36, 255, 60, 58, 50, 255, 56, 55, 38, 255, 55, 57, 33, 255, 67, 51, 24, 255, 58, 54, 33, 255, 48, 53, 41, 255, 56, 48, 25, 255, 62, 53, 35, 255, 59, 54, 20, 255, 58, 48, 8, 255, 58, 34, 1, 255, 55, 31, 4, 255, 66, 49, 15, 255, 63, 54, 5, 255, 52, 38, 3, 255, 55, 30, 4, 255, 63, 26, 3, 255, 62, 23, 0, 255, 71, 32, 5, 255, 67, 29, 2, 255, 57, 26, 2, 255, 57, 29, 2, 255, 62, 30, 1, 255, 68, 32, 4, 255, 66, 30, 1, 255, 67, 34, 3, 255, 66, 33, 4, 255, 66, 32, 3, 255, 71, 37, 1, 255, 75, 35, 2, 255, 75, 37, 3, 255, 78, 37, 4, 255, 81, 35, 2, 255, 78, 37, 2, 255, 73, 38, 3, 255, 73, 35, 1, 255, 78, 39, 4, 255, 75, 39, 1, 255, 75, 42, 1, 255, 83, 43, 4, 255, 84, 41, 3, 255, 84, 39, 1, 255, 85, 42, 3, 255, 84, 40, 1, 255, 83, 39, 1, 255, 84, 39, 1, 255, 86, 40, 1, 255, 89, 43, 4, 255, 84, 42, 1, 255, 85, 42, 1, 255, 90, 43, 3, 255, 92, 42, 2, 255, 91, 45, 3, 255, 90, 44, 1, 255, 95, 43, 3, 255, 91, 44, 3, 255, 85, 45, 2, 255, 83, 49, 4, 255, 82, 48, 2, 255, 85, 49, 3, 255, 86, 48, 0, 255, 86, 48, 2, 255, 87, 46, 3, 255, 89, 45, 2, 255, 90, 46, 1, 255, 91, 44, 0, 255, 92, 51, 1, 255, 93, 50, 2, 255, 89, 51, 3, 255, 94, 54, 7, 255, 89, 50, 2, 255, 92, 53, 3, 255, 91, 49, 1, 255, 91, 52, 5, 255, 93, 51, 3, 255, 94, 52, 4, 255, 91, 51, 2, 255, 93, 52, 2, 255, 96, 52, 2, 255, 96, 53, 3, 255, 92, 55, 3, 255, 91, 51, 1, 255, 96, 53, 3, 255, 93, 54, 4, 255, 93, 52, 5, 255, 92, 53, 4, 255, 94, 56, 5, 255, 97, 56, 5, 255, 98, 54, 2, 255, 101, 54, 4, 255, 98, 53, 4, 255, 98, 53, 4, 255, 98, 54, 5, 255, 96, 55, 5, 255, 99, 53, 5, 255, 98, 52, 6, 255, 92, 51, 1, 255, 98, 55, 4, 255, 100, 54, 8, 255, 93, 48, 9, 255, 96, 51, 2, 255, 95, 49, 8, 255, 85, 47, 3, 255, 88, 54, 11, 255, 96, 52, 1, 255, 96, 51, 6, 255, 90, 53, 7, 255, 96, 48, 8, 255, 84, 47, 6, 255, 88, 50, 3, 255, 81, 52, 8, 255, 83, 55, 7, 255, 81, 51, 5, 255, 88, 51, 6, 255, 87, 54, 3, 255, 87, 51, 12, 255, 87, 47, 10, 255, 80, 48, 7, 255, 82, 52, 16, 255, 81, 51, 15, 255, 81, 54, 5, 255, 79, 51, 6, 255, 85, 55, 11, 255, 88, 58, 7, 255, 83, 52, 14, 255, 87, 54, 16, 255, 81, 55, 11, 255, 82, 58, 5, 255, 89, 55, 9, 255, 92, 56, 21, 255, 101, 57, 19, 255, 99, 56, 13, 255, 91, 59, 9, 255, 80, 58, 10, 255, 81, 63, 10, 255, 83, 64, 4, 255, 91, 62, 8, 255, 97, 63, 17, 255, 86, 64, 12, 255, 90, 67, 15, 255, 97, 65, 12, 255, 101, 67, 12, 255, 99, 69, 15, 255, 106, 68, 13, 255, 106, 65, 19, 255, 109, 74, 9, 255, 109, 74, 12, 255, 113, 73, 13, 255, 125, 78, 5, 255, 124, 77, 8, 255, 130, 82, 19, 255, 137, 84, 15, 255, 142, 82, 13, 255, 144, 82, 10, 255, 143, 80, 10, 255, 150, 86, 9, 255, 164, 86, 11, 255, 173, 92, 15, 255, 171, 97, 14, 255, 161, 90, 5, 255, 167, 95, 8, 255, 164, 93, 18, 255, 159, 86, 17, 255, 164, 93, 11, 255, 164, 94, 10, 255, 164, 92, 9, 255, 167, 94, 9, 255, 170, 95, 12, 255, 173, 95, 5, 255, 179, 96, 13, 255, 178, 97, 22, 255, 176, 96, 14, 255, 178, 97, 12, 255, 186, 105, 22, 255, 181, 101, 13, 255, 182, 99, 8, 255, 182, 99, 10, 255, 184, 100, 12, 255, 188, 102, 12, 255, 192, 104, 9, 255, 196, 110, 5, 255, 192, 110, 5, 255, 188, 108, 7, 255, 190, 110, 12, 255, 189, 108, 12, 255, 182, 100, 10, 255, 174, 98, 8, 255, 173, 100, 1, 255, 175, 94, 9, 255, 164, 93, 9, 255, 160, 86, 13, 255, 156, 86, 15, 255, 159, 85, 7, 255, 157, 86, 10, 255, 148, 82, 3, 255, 139, 84, 3, 255, 140, 87, 7, 255, 131, 79, 7, 255, 98, 65, 5, 255, 83, 67, 6, 255, 84, 72, 2, 255, 93, 71, 4, 255, 103, 71, 5, 255, 100, 71, 7, 255, 113, 75, 11, 255, 125, 78, 1, 255, 130, 88, 6, 255, 167, 124, 10, 255, 181, 135, 6, 255, 187, 143, 14, 255, 194, 150, 3, 255, 195, 147, 3, 255, 195, 147, 4, 255, 198, 154, 1, 255, 178, 123, 7, 255, 181, 131, 13, 255, 184, 145, 11, 255, 175, 122, 7, 255, 167, 103, 2, 255, 188, 136, 5, 255, 191, 146, 4, 255, 190, 143, 7, 255, 194, 142, 12, 255, 196, 140, 15, 255, 188, 128, 5, 255, 184, 123, 0, 255, 189, 132, 3, 255, 189, 136, 3, 255, 188, 129, 11, 255, 186, 124, 8, 255, 188, 125, 0, 255, 183, 117, 1, 255, 184, 121, 3, 255, 185, 124, 2, 255, 183, 120, 4, 255, 180, 115, 4, 255, 176, 111, 4, 255, 173, 107, 3, 255, 170, 103, 4, 255, 167, 102, 3, 255, 165, 101, 0, 255, 163, 99, 0, 255, 161, 96, 1, 255, 159, 93, 4, 255, 157, 89, 3, 255, 156, 84, 1, 255, 152, 83, 1, 255, 150, 83, 4, 255, 151, 82, 3, 255, 155, 81, 5, 255, 151, 77, 4, 255, 141, 72, 0, 255, 140, 71, 2, 255, 141, 71, 4, 255, 141, 71, 4, 255, 141, 70, 0, 255, 140, 67, 1, 255, 137, 61, 3, 255, 137, 62, 1, 255, 135, 65, 3, 255, 129, 59, 3, 255, 129, 55, 4, 255, 124, 47, 3, 255, 113, 42, 1, 255, 101, 37, 1, 255, 100, 34, 4, 255, 95, 29, 1, 255, 97, 35, 6, 255, 85, 35, 5, 255, 76, 29, 1, 255, 78, 31, 2, 255, 81, 29, 3, 255, 70, 23, 4, 255, 83, 27, 3, 255, 82, 25, 1, 255, 72, 27, 8, 255, 60, 25, 7, 255, 64, 22, 2, 255, 77, 29, 1, 255, 74, 26, 1, 255, 76, 24, 6, 255, 72, 22, 3, 255, 70, 24, 1, 255, 69, 20, 2, 255, 63, 20, 3, 255, 67, 21, 2, 255, 69, 21, 3, 255, 68, 23, 5, 255, 69, 23, 5, 255, 76, 18, 1, 255, 80, 21, 1, 255, 84, 24, 3, 255, 73, 23, 3, 255, 54, 19, 1, 255, 49, 18, 2, 255, 53, 18, 3, 255, 51, 17, 1, 255, 47, 19, 2, 255, 53, 18, 3, 255, 52, 13, 2, 255, 46, 16, 1, 255, 45, 20, 4, 255, 49, 17, 4, 255, 46, 17, 6, 255, 41, 14, 0, 255, 43, 12, 5, 255, 41, 14, 4, 255, 27, 12, 1, 255, 24, 13, 1, 255, 29, 14, 3, 255, 29, 13, 6, 255, 36, 15, 6, 255, 44, 14, 1, 255, 44, 16, 3, 255, 43, 19, 6, 255, 47, 18, 6, 255, 50, 12, 5, 255, 54, 20, 3, 255, 58, 19, 3, 255, 48, 11, 2, 255, 42, 18, 8, 255, 42, 17, 5, 255, 47, 14, 3, 255, 48, 20, 2, 255, 55, 16, 1, 255, 54, 15, 6, 255, 54, 19, 6, 255, 58, 18, 1, 255, 65, 19, 3, 255, 79, 23, 3, 255, 76, 18, 2, 255, 71, 20, 7, 255, 71, 20, 4, 255, 101, 38, 4, 255, 135, 60, 8, 255, 141, 62, 2, 255, 139, 59, 3, 255, 145, 60, 3, 255, 145, 63, 5, 255, 137, 62, 5, 255, 137, 60, 1, 255, 143, 63, 0, 255, 147, 67, 3, 255, 146, 64, 4, 255, 135, 51, 1, 255, 129, 44, 3, 255, 122, 38, 4, 255, 110, 32, 1, 255, 100, 32, 4, 255, 99, 31, 4, 255, 101, 34, 6, 255, 10, 9, 1, 255, 14, 13, 3, 255, 15, 13, 3, 255, 18, 15, 6, 255, 16, 12, 1, 255, 19, 15, 3, 255, 27, 24, 4, 255, 24, 24, 1, 255, 24, 26, 1, 255, 29, 32, 3, 255, 29, 34, 6, 255, 26, 34, 5, 255, 32, 39, 5, 255, 33, 40, 9, 255, 38, 48, 12, 255, 38, 49, 10, 255, 41, 54, 7, 255, 44, 54, 10, 255, 46, 54, 10, 255, 49, 59, 7, 255, 55, 54, 2, 255, 49, 54, 2, 255, 42, 59, 6, 255, 38, 53, 5, 255, 46, 53, 8, 255, 46, 48, 2, 255, 45, 48, 6, 255, 44, 42, 3, 255, 44, 40, 4, 255, 44, 37, 4, 255, 53, 47, 19, 255, 51, 44, 22, 255, 50, 41, 15, 255, 48, 38, 10, 255, 42, 37, 10, 255, 46, 33, 13, 255, 45, 31, 12, 255, 45, 37, 10, 255, 35, 33, 8, 255, 42, 33, 7, 255, 48, 33, 2, 255, 43, 28, 0, 255, 39, 28, 8, 255, 48, 40, 24, 255, 53, 47, 30, 255, 60, 58, 38, 255, 61, 60, 35, 255, 56, 57, 42, 255, 61, 59, 47, 255, 67, 62, 52, 255, 64, 57, 43, 255, 62, 57, 35, 255, 60, 53, 34, 255, 65, 53, 41, 255, 63, 56, 43, 255, 66, 56, 30, 255, 63, 50, 33, 255, 59, 56, 19, 255, 67, 50, 9, 255, 60, 38, 6, 255, 65, 40, 0, 255, 65, 42, 3, 255, 75, 50, 12, 255, 67, 39, 3, 255, 64, 26, 0, 255, 73, 31, 7, 255, 70, 32, 7, 255, 63, 30, 0, 255, 67, 31, 1, 255, 66, 31, 6, 255, 68, 34, 6, 255, 73, 37, 6, 255, 73, 34, 1, 255, 73, 33, 0, 255, 75, 32, 1, 255, 78, 32, 2, 255, 77, 31, 1, 255, 72, 35, 0, 255, 74, 35, 1, 255, 70, 33, 0, 255, 73, 34, 0, 255, 76, 35, 0, 255, 69, 35, 0, 255, 69, 35, 1, 255, 77, 38, 5, 255, 75, 36, 3, 255, 72, 37, 1, 255, 75, 42, 4, 255, 78, 39, 2, 255, 82, 39, 1, 255, 81, 39, 0, 255, 82, 40, 2, 255, 84, 42, 2, 255, 84, 42, 2, 255, 86, 43, 3, 255, 89, 44, 4, 255, 86, 42, 0, 255, 87, 45, 1, 255, 88, 46, 2, 255, 90, 44, 2, 255, 94, 47, 5, 255, 90, 47, 4, 255, 89, 44, 0, 255, 96, 50, 7, 255, 91, 46, 4, 255, 90, 47, 4, 255, 87, 46, 2, 255, 87, 47, 2, 255, 89, 47, 3, 255, 90, 45, 1, 255, 89, 46, 2, 255, 87, 44, 2, 255, 86, 45, 1, 255, 87, 50, 2, 255, 86, 51, 3, 255, 91, 49, 0, 255, 92, 49, 0, 255, 85, 52, 2, 255, 88, 50, 4, 255, 93, 51, 5, 255, 90, 53, 3, 255, 92, 51, 1, 255, 91, 49, 1, 255, 94, 50, 3, 255, 94, 52, 4, 255, 96, 55, 5, 255, 96, 55, 4, 255, 93, 49, 1, 255, 92, 56, 2, 255, 95, 52, 1, 255, 101, 55, 6, 255, 98, 50, 2, 255, 98, 49, 2, 255, 90, 51, 4, 255, 91, 53, 3, 255, 95, 54, 1, 255, 98, 55, 3, 255, 96, 54, 2, 255, 94, 52, 1, 255, 93, 53, 4, 255, 90, 51, 4, 255, 94, 54, 3, 255, 92, 53, 3, 255, 101, 51, 6, 255, 105, 54, 7, 255, 99, 53, 4, 255, 102, 52, 4, 255, 100, 50, 12, 255, 98, 52, 5, 255, 93, 54, 8, 255, 86, 51, 7, 255, 91, 53, 4, 255, 91, 50, 7, 255, 93, 51, 3, 255, 96, 51, 6, 255, 87, 52, 8, 255, 91, 49, 5, 255, 91, 47, 5, 255, 87, 51, 5, 255, 81, 52, 5, 255, 87, 53, 4, 255, 89, 52, 6, 255, 88, 49, 9, 255, 84, 52, 10, 255, 83, 55, 6, 255, 84, 54, 5, 255, 83, 53, 5, 255, 85, 54, 9, 255, 83, 51, 9, 255, 85, 52, 8, 255, 80, 51, 4, 255, 81, 56, 9, 255, 81, 57, 11, 255, 80, 50, 13, 255, 84, 53, 15, 255, 78, 54, 14, 255, 81, 59, 14, 255, 85, 55, 7, 255, 94, 62, 5, 255, 103, 63, 6, 255, 99, 56, 9, 255, 98, 58, 13, 255, 96, 61, 15, 255, 95, 64, 17, 255, 90, 60, 13, 255, 87, 62, 17, 255, 92, 72, 8, 255, 101, 65, 12, 255, 106, 67, 16, 255, 100, 63, 16, 255, 106, 67, 10, 255, 117, 74, 6, 255, 113, 76, 9, 255, 125, 78, 19, 255, 130, 78, 8, 255, 128, 77, 15, 255, 127, 73, 25, 255, 134, 79, 15, 255, 138, 79, 7, 255, 146, 83, 16, 255, 151, 86, 13, 255, 156, 85, 13, 255, 160, 85, 4, 255, 161, 84, 3, 255, 166, 91, 7, 255, 172, 94, 10, 255, 177, 94, 16, 255, 174, 95, 17, 255, 174, 99, 15, 255, 174, 96, 15, 255, 168, 92, 16, 255, 173, 97, 20, 255, 177, 99, 20, 255, 175, 97, 15, 255, 175, 97, 16, 255, 176, 95, 13, 255, 180, 101, 14, 255, 178, 97, 13, 255, 177, 95, 7, 255, 179, 98, 15, 255, 179, 98, 5, 255, 182, 101, 3, 255, 194, 110, 15, 255, 192, 107, 12, 255, 191, 109, 12, 255, 182, 105, 12, 255, 182, 103, 13, 255, 191, 109, 5, 255, 194, 111, 4, 255, 194, 111, 8, 255, 194, 110, 7, 255, 193, 107, 11, 255, 196, 111, 6, 255, 192, 107, 15, 255, 180, 99, 16, 255, 167, 98, 3, 255, 163, 96, 15, 255, 161, 90, 8, 255, 153, 87, 3, 255, 152, 87, 9, 255, 144, 81, 14, 255, 134, 79, 6, 255, 124, 76, 7, 255, 130, 81, 12, 255, 108, 73, 10, 255, 103, 67, 3, 255, 122, 75, 7, 255, 107, 73, 9, 255, 84, 66, 2, 255, 86, 67, 2, 255, 106, 70, 10, 255, 115, 75, 7, 255, 84, 65, 4, 255, 91, 71, 5, 255, 118, 78, 5, 255, 116, 76, 11, 255, 155, 116, 10, 255, 178, 132, 9, 255, 189, 142, 15, 255, 196, 151, 5, 255, 195, 142, 3, 255, 201, 148, 0, 255, 193, 144, 7, 255, 184, 135, 12, 255, 189, 139, 9, 255, 191, 143, 7, 255, 190, 140, 5, 255, 170, 117, 5, 255, 176, 124, 11, 255, 189, 139, 5, 255, 188, 137, 3, 255, 189, 137, 3, 255, 190, 136, 5, 255, 182, 127, 1, 255, 180, 124, 1, 255, 187, 133, 6, 255, 187, 132, 6, 255, 188, 131, 1, 255, 184, 125, 0, 255, 182, 119, 1, 255, 191, 125, 8, 255, 187, 124, 4, 255, 184, 123, 2, 255, 182, 119, 4, 255, 180, 117, 5, 255, 176, 112, 5, 255, 172, 108, 4, 255, 170, 104, 6, 255, 167, 101, 0, 255, 164, 99, 4, 255, 162, 97, 9, 255, 159, 95, 6, 255, 160, 95, 3, 255, 158, 91, 3, 255, 157, 86, 1, 255, 150, 81, 0, 255, 147, 81, 1, 255, 154, 84, 6, 255, 158, 82, 6, 255, 152, 77, 2, 255, 144, 75, 2, 255, 148, 78, 7, 255, 145, 71, 1, 255, 143, 69, 1, 255, 138, 67, 3, 255, 135, 65, 5, 255, 135, 64, 5, 255, 142, 63, 3, 255, 138, 62, 2, 255, 129, 57, 1, 255, 130, 55, 5, 255, 124, 50, 3, 255, 110, 45, 2, 255, 101, 41, 0, 255, 103, 40, 2, 255, 101, 38, 3, 255, 95, 36, 4, 255, 87, 31, 3, 255, 78, 27, 3, 255, 78, 28, 7, 255, 79, 30, 7, 255, 72, 27, 8, 255, 82, 28, 3, 255, 80, 27, 3, 255, 73, 27, 4, 255, 71, 30, 4, 255, 72, 29, 1, 255, 74, 26, 1, 255, 75, 24, 2, 255, 74, 23, 1, 255, 66, 24, 3, 255, 66, 24, 4, 255, 68, 25, 4, 255, 62, 24, 4, 255, 58, 21, 0, 255, 58, 21, 0, 255, 63, 21, 1, 255, 68, 20, 2, 255, 72, 22, 4, 255, 78, 23, 2, 255, 85, 23, 3, 255, 75, 18, 1, 255, 61, 16, 3, 255, 62, 18, 9, 255, 55, 12, 2, 255, 51, 20, 3, 255, 49, 18, 2, 255, 55, 17, 5, 255, 52, 13, 3, 255, 45, 17, 2, 255, 44, 20, 4, 255, 47, 14, 3, 255, 52, 15, 6, 255, 48, 18, 3, 255, 37, 16, 3, 255, 37, 16, 0, 255, 44, 16, 8, 255, 29, 7, 8, 255, 36, 16, 3, 255, 48, 18, 1, 255, 49, 16, 4, 255, 47, 13, 5, 255, 52, 13, 2, 255, 58, 17, 1, 255, 53, 18, 0, 255, 44, 14, 2, 255, 47, 16, 6, 255, 48, 16, 4, 255, 47, 19, 2, 255, 47, 18, 0, 255, 52, 17, 0, 255, 59, 16, 2, 255, 58, 19, 1, 255, 59, 14, 1, 255, 59, 16, 2, 255, 67, 21, 1, 255, 64, 19, 0, 255, 62, 20, 3, 255, 77, 22, 6, 255, 74, 21, 1, 255, 73, 22, 0, 255, 98, 38, 3, 255, 129, 55, 4, 255, 138, 58, 1, 255, 138, 59, 1, 255, 143, 59, 7, 255, 140, 61, 3, 255, 138, 62, 0, 255, 142, 62, 5, 255, 138, 59, 3, 255, 143, 63, 4, 255, 145, 63, 4, 255, 142, 59, 4, 255, 132, 49, 2, 255, 117, 37, 1, 255, 109, 32, 0, 255, 111, 36, 3, 255, 114, 41, 3, 255, 114, 41, 5, 255, 112, 38, 3, 255, 17, 13, 5, 255, 19, 15, 5, 255, 15, 14, 1, 255, 19, 17, 5, 255, 18, 16, 4, 255, 22, 20, 6, 255, 27, 24, 7, 255, 21, 22, 3, 255, 26, 30, 6, 255, 30, 34, 7, 255, 28, 37, 9, 255, 29, 41, 9, 255, 37, 47, 8, 255, 35, 47, 9, 255, 36, 47, 7, 255, 43, 51, 8, 255, 49, 57, 5, 255, 45, 52, 9, 255, 50, 57, 11, 255, 47, 56, 6, 255, 51, 54, 3, 255, 48, 57, 7, 255, 54, 60, 2, 255, 56, 52, 6, 255, 49, 52, 2, 255, 46, 46, 2, 255, 53, 46, 9, 255, 45, 39, 9, 255, 40, 35, 3, 255, 39, 33, 13, 255, 40, 37, 16, 255, 48, 44, 21, 255, 44, 42, 9, 255, 35, 35, 14, 255, 48, 34, 10, 255, 51, 35, 6, 255, 45, 30, 12, 255, 44, 28, 7, 255, 40, 32, 9, 255, 40, 33, 11, 255, 40, 28, 3, 255, 44, 29, 6, 255, 42, 28, 11, 255, 48, 39, 21, 255, 52, 47, 29, 255, 58, 58, 46, 255, 55, 52, 40, 255, 63, 54, 50, 255, 68, 59, 53, 255, 67, 62, 49, 255, 61, 58, 44, 255, 64, 60, 30, 255, 61, 59, 31, 255, 72, 56, 36, 255, 69, 60, 38, 255, 67, 60, 35, 255, 63, 49, 26, 255, 57, 50, 20, 255, 68, 54, 22, 255, 74, 42, 13, 255, 64, 31, 1, 255, 64, 40, 16, 255, 66, 47, 16, 255, 66, 43, 7, 255, 59, 32, 2, 255, 66, 29, 3, 255, 67, 30, 4, 255, 70, 33, 5, 255, 72, 30, 3, 255, 65, 27, 1, 255, 68, 28, 4, 255, 72, 30, 5, 255, 71, 32, 2, 255, 74, 36, 2, 255, 76, 37, 2, 255, 78, 39, 5, 255, 78, 36, 4, 255, 83, 36, 3, 255, 83, 37, 4, 255, 79, 40, 4, 255, 81, 38, 4, 255, 81, 35, 2, 255, 75, 38, 2, 255, 76, 42, 6, 255, 75, 35, 2, 255, 79, 38, 3, 255, 80, 42, 5, 255, 77, 42, 3, 255, 82, 41, 2, 255, 86, 42, 5, 255, 83, 41, 6, 255, 84, 39, 4, 255, 85, 40, 3, 255, 82, 41, 1, 255, 84, 41, 3, 255, 87, 40, 4, 255, 90, 45, 4, 255, 83, 41, 0, 255, 87, 47, 5, 255, 89, 45, 4, 255, 91, 44, 4, 255, 89, 45, 4, 255, 91, 47, 4, 255, 93, 49, 5, 255, 87, 45, 1, 255, 92, 51, 5, 255, 91, 48, 3, 255, 91, 44, 0, 255, 91, 44, 1, 255, 93, 50, 4, 255, 91, 47, 4, 255, 89, 46, 2, 255, 90, 50, 3, 255, 90, 52, 5, 255, 88, 48, 4, 255, 90, 46, 2, 255, 90, 47, 1, 255, 86, 53, 1, 255, 89, 50, 3, 255, 93, 50, 5, 255, 88, 53, 2, 255, 89, 49, 0, 255, 93, 50, 2, 255, 96, 53, 3, 255, 91, 50, 0, 255, 90, 52, 1, 255, 94, 53, 3, 255, 96, 53, 4, 255, 96, 53, 4, 255, 93, 54, 3, 255, 97, 55, 4, 255, 101, 53, 4, 255, 96, 50, 0, 255, 95, 52, 6, 255, 93, 57, 6, 255, 91, 56, 0, 255, 94, 56, 2, 255, 97, 54, 7, 255, 95, 51, 3, 255, 96, 52, 4, 255, 93, 51, 5, 255, 94, 54, 2, 255, 96, 53, 3, 255, 98, 52, 5, 255, 101, 55, 2, 255, 100, 51, 5, 255, 102, 52, 10, 255, 100, 51, 8, 255, 92, 49, 8, 255, 95, 54, 5, 255, 93, 51, 3, 255, 94, 54, 5, 255, 94, 55, 6, 255, 92, 54, 7, 255, 91, 53, 5, 255, 85, 51, 7, 255, 89, 47, 7, 255, 86, 50, 3, 255, 85, 54, 4, 255, 84, 55, 8, 255, 80, 55, 7, 255, 83, 50, 10, 255, 79, 47, 6, 255, 87, 52, 12, 255, 82, 49, 8, 255, 78, 49, 8, 255, 81, 52, 6, 255, 82, 55, 10, 255, 82, 52, 14, 255, 83, 53, 11, 255, 82, 55, 9, 255, 81, 54, 10, 255, 78, 54, 9, 255, 75, 57, 11, 255, 79, 56, 10, 255, 76, 56, 10, 255, 74, 53, 9, 255, 84, 55, 12, 255, 84, 55, 7, 255, 96, 64, 9, 255, 103, 67, 6, 255, 108, 64, 10, 255, 111, 62, 16, 255, 110, 62, 14, 255, 105, 62, 12, 255, 108, 63, 25, 255, 112, 72, 8, 255, 102, 66, 13, 255, 99, 65, 12, 255, 106, 65, 19, 255, 119, 70, 21, 255, 129, 74, 18, 255, 135, 72, 15, 255, 135, 75, 14, 255, 130, 71, 23, 255, 137, 77, 23, 255, 146, 81, 18, 255, 153, 82, 17, 255, 156, 85, 11, 255, 160, 85, 15, 255, 163, 86, 12, 255, 167, 88, 10, 255, 173, 90, 12, 255, 176, 93, 19, 255, 178, 98, 13, 255, 177, 100, 11, 255, 185, 104, 12, 255, 184, 102, 12, 255, 182, 101, 11, 255, 181, 100, 1, 255, 180, 93, 17, 255, 173, 94, 17, 255, 172, 94, 10, 255, 179, 99, 12, 255, 182, 103, 5, 255, 183, 101, 14, 255, 181, 102, 13, 255, 186, 107, 13, 255, 185, 105, 12, 255, 185, 106, 11, 255, 186, 108, 7, 255, 183, 103, 4, 255, 187, 103, 11, 255, 193, 107, 16, 255, 189, 106, 14, 255, 191, 106, 5, 255, 194, 109, 8, 255, 192, 114, 12, 255, 189, 111, 18, 255, 188, 106, 15, 255, 190, 104, 9, 255, 188, 104, 10, 255, 181, 99, 6, 255, 173, 93, 11, 255, 168, 90, 15, 255, 160, 89, 10, 255, 152, 87, 14, 255, 151, 89, 9, 255, 144, 82, 11, 255, 124, 79, 11, 255, 107, 64, 15, 255, 87, 68, 7, 255, 88, 72, 9, 255, 92, 65, 4, 255, 92, 68, 11, 255, 90, 70, 10, 255, 88, 65, 8, 255, 88, 69, 8, 255, 88, 68, 7, 255, 88, 66, 4, 255, 104, 75, 9, 255, 108, 71, 5, 255, 94, 64, 6, 255, 93, 71, 7, 255, 101, 72, 4, 255, 96, 60, 10, 255, 124, 88, 11, 255, 175, 129, 7, 255, 187, 137, 15, 255, 191, 149, 2, 255, 196, 142, 7, 255, 196, 140, 8, 255, 194, 148, 2, 255, 196, 148, 6, 255, 188, 136, 1, 255, 181, 126, 5, 255, 186, 133, 8, 255, 182, 134, 9, 255, 181, 134, 3, 255, 186, 135, 1, 255, 187, 134, 2, 255, 187, 132, 2, 255, 189, 134, 5, 255, 183, 127, 2, 255, 181, 128, 1, 255, 187, 133, 7, 255, 190, 133, 13, 255, 189, 131, 6, 255, 182, 125, 5, 255, 179, 118, 10, 255, 179, 116, 0, 255, 181, 118, 0, 255, 181, 118, 3, 255, 179, 115, 4, 255, 180, 116, 7, 255, 176, 112, 4, 255, 174, 109, 5, 255, 173, 106, 5, 255, 167, 103, 1, 255, 161, 97, 4, 255, 160, 95, 11, 255, 159, 95, 8, 255, 158, 94, 3, 255, 157, 92, 3, 255, 158, 89, 4, 255, 155, 87, 4, 255, 153, 85, 5, 255, 150, 80, 2, 255, 148, 76, 1, 255, 149, 77, 3, 255, 144, 75, 4, 255, 144, 72, 4, 255, 147, 70, 1, 255, 147, 71, 2, 255, 142, 72, 4, 255, 140, 73, 4, 255, 139, 71, 1, 255, 137, 65, 2, 255, 135, 62, 4, 255, 127, 55, 1, 255, 126, 52, 1, 255, 126, 54, 4, 255, 121, 53, 7, 255, 113, 50, 5, 255, 108, 44, 2, 255, 99, 38, 1, 255, 89, 35, 1, 255, 90, 32, 3, 255, 86, 29, 5, 255, 82, 29, 7, 255, 84, 30, 5, 255, 86, 33, 3, 255, 84, 25, 3, 255, 80, 28, 3, 255, 72, 26, 1, 255, 68, 26, 3, 255, 70, 29, 3, 255, 72, 22, 4, 255, 79, 27, 11, 255, 65, 25, 3, 255, 58, 23, 4, 255, 57, 17, 4, 255, 55, 23, 2, 255, 62, 25, 4, 255, 61, 23, 3, 255, 54, 21, 1, 255, 60, 22, 3, 255, 71, 23, 5, 255, 75, 24, 3, 255, 80, 25, 1, 255, 86, 26, 3, 255, 83, 24, 1, 255, 71, 25, 2, 255, 66, 22, 2, 255, 67, 19, 1, 255, 61, 18, 1, 255, 56, 18, 2, 255, 56, 18, 2, 255, 62, 19, 6, 255, 57, 18, 6, 255, 52, 21, 7, 255, 49, 18, 4, 255, 43, 16, 3, 255, 44, 16, 5, 255, 41, 17, 6, 255, 43, 19, 2, 255, 61, 22, 3, 255, 65, 18, 0, 255, 67, 21, 4, 255, 60, 20, 2, 255, 48, 14, 1, 255, 44, 11, 5, 255, 48, 14, 4, 255, 56, 19, 0, 255, 56, 16, 0, 255, 54, 17, 4, 255, 60, 15, 6, 255, 55, 20, 6, 255, 56, 20, 4, 255, 66, 16, 3, 255, 62, 19, 4, 255, 56, 19, 4, 255, 63, 18, 3, 255, 67, 19, 3, 255, 69, 21, 2, 255, 74, 21, 1, 255, 72, 20, 2, 255, 72, 23, 2, 255, 77, 23, 1, 255, 80, 30, 4, 255, 101, 40, 3, 255, 121, 56, 7, 255, 128, 57, 5, 255, 138, 57, 2, 255, 139, 60, 4, 255, 135, 61, 3, 255, 134, 60, 1, 255, 139, 62, 1, 255, 142, 63, 2, 255, 141, 62, 4, 255, 141, 59, 4, 255, 141, 59, 3, 255, 141, 56, 4, 255, 128, 48, 4, 255, 115, 38, 3, 255, 111, 37, 3, 255, 114, 41, 5, 255, 116, 40, 2, 255, 114, 38, 0, 255, 115, 38, 0, 255, 18, 14, 3, 255, 19, 16, 4, 255, 17, 17, 3, 255, 18, 17, 5, 255, 15, 16, 4, 255, 19, 21, 7, 255, 25, 25, 7, 255, 26, 29, 7, 255, 30, 37, 12, 255, 34, 36, 11, 255, 30, 38, 13, 255, 34, 44, 13, 255, 43, 50, 9, 255, 40, 52, 10, 255, 44, 54, 9, 255, 48, 56, 2, 255, 50, 56, 12, 255, 49, 56, 16, 255, 50, 59, 10, 255, 46, 57, 7, 255, 39, 58, 9, 255, 47, 56, 7, 255, 54, 50, 5, 255, 54, 53, 3, 255, 47, 47, 6, 255, 45, 44, 2, 255, 47, 39, 3, 255, 41, 37, 4, 255, 35, 29, 4, 255, 30, 26, 9, 255, 38, 31, 6, 255, 46, 39, 11, 255, 39, 40, 13, 255, 40, 31, 7, 255, 53, 36, 9, 255, 54, 39, 8, 255, 52, 38, 9, 255, 43, 35, 7, 255, 52, 30, 5, 255, 51, 31, 4, 255, 41, 31, 4, 255, 42, 29, 5, 255, 43, 26, 5, 255, 50, 33, 12, 255, 50, 37, 19, 255, 56, 51, 43, 255, 54, 50, 42, 255, 56, 55, 40, 255, 63, 62, 50, 255, 61, 61, 46, 255, 65, 66, 49, 255, 62, 59, 44, 255, 65, 59, 35, 255, 65, 56, 36, 255, 61, 59, 46, 255, 62, 58, 49, 255, 62, 48, 23, 255, 62, 47, 24, 255, 62, 46, 28, 255, 67, 42, 14, 255, 57, 31, 1, 255, 61, 38, 6, 255, 69, 47, 7, 255, 65, 43, 8, 255, 63, 33, 3, 255, 61, 26, 1, 255, 60, 29, 4, 255, 64, 33, 7, 255, 70, 30, 5, 255, 70, 29, 3, 255, 71, 29, 5, 255, 70, 31, 5, 255, 73, 35, 4, 255, 74, 37, 2, 255, 76, 39, 1, 255, 75, 36, 1, 255, 76, 34, 1, 255, 87, 37, 3, 255, 82, 38, 2, 255, 78, 41, 4, 255, 83, 40, 5, 255, 83, 35, 2, 255, 81, 40, 4, 255, 80, 43, 5, 255, 79, 38, 3, 255, 82, 37, 2, 255, 82, 39, 1, 255, 84, 43, 3, 255, 86, 40, 0, 255, 87, 40, 1, 255, 88, 43, 3, 255, 93, 44, 3, 255, 96, 47, 3, 255, 92, 47, 1, 255, 94, 47, 3, 255, 96, 44, 2, 255, 95, 47, 3, 255, 89, 48, 3, 255, 91, 52, 6, 255, 88, 46, 1, 255, 91, 45, 1, 255, 92, 46, 2, 255, 91, 47, 4, 255, 87, 46, 3, 255, 86, 45, 3, 255, 89, 47, 3, 255, 89, 45, 1, 255, 89, 44, 1, 255, 92, 48, 4, 255, 91, 46, 4, 255, 91, 43, 2, 255, 95, 47, 4, 255, 93, 51, 2, 255, 90, 47, 3, 255, 93, 45, 6, 255, 89, 47, 5, 255, 93, 47, 2, 255, 94, 53, 1, 255, 95, 57, 4, 255, 87, 53, 1, 255, 88, 55, 1, 255, 92, 52, 0, 255, 94, 53, 2, 255, 94, 52, 1, 255, 92, 52, 0, 255, 89, 54, 1, 255, 93, 56, 3, 255, 96, 55, 4, 255, 94, 51, 3, 255, 90, 52, 3, 255, 92, 54, 1, 255, 100, 57, 4, 255, 97, 55, 1, 255, 93, 55, 4, 255, 91, 57, 7, 255, 91, 57, 3, 255, 93, 55, 4, 255, 98, 55, 11, 255, 100, 56, 6, 255, 98, 54, 1, 255, 98, 56, 6, 255, 94, 53, 2, 255, 98, 54, 3, 255, 96, 55, 4, 255, 99, 56, 1, 255, 102, 52, 7, 255, 96, 47, 12, 255, 95, 50, 3, 255, 96, 54, 11, 255, 98, 58, 6, 255, 101, 57, 3, 255, 101, 56, 6, 255, 99, 56, 3, 255, 100, 52, 6, 255, 98, 50, 8, 255, 84, 51, 11, 255, 91, 49, 11, 255, 93, 51, 8, 255, 88, 52, 9, 255, 81, 50, 7, 255, 90, 51, 8, 255, 82, 52, 10, 255, 88, 48, 10, 255, 88, 55, 10, 255, 102, 54, 13, 255, 107, 56, 13, 255, 104, 57, 14, 255, 98, 54, 13, 255, 90, 54, 13, 255, 81, 53, 10, 255, 82, 58, 6, 255, 82, 57, 6, 255, 81, 55, 9, 255, 88, 60, 11, 255, 102, 65, 16, 255, 102, 64, 8, 255, 105, 64, 1, 255, 116, 68, 7, 255, 115, 65, 11, 255, 125, 67, 16, 255, 139, 78, 10, 255, 138, 76, 2, 255, 139, 72, 7, 255, 140, 71, 15, 255, 140, 77, 9, 255, 141, 76, 16, 255, 141, 75, 12, 255, 130, 71, 22, 255, 128, 70, 15, 255, 135, 76, 8, 255, 139, 76, 12, 255, 138, 77, 17, 255, 142, 81, 20, 255, 148, 80, 12, 255, 157, 84, 14, 255, 156, 84, 18, 255, 157, 87, 12, 255, 162, 87, 9, 255, 169, 88, 7, 255, 169, 83, 20, 255, 169, 87, 16, 255, 174, 95, 11, 255, 179, 100, 9, 255, 186, 102, 15, 255, 189, 103, 9, 255, 187, 104, 7, 255, 189, 106, 12, 255, 192, 107, 4, 255, 178, 92, 12, 255, 164, 85, 16, 255, 163, 82, 17, 255, 167, 86, 21, 255, 174, 96, 8, 255, 183, 102, 6, 255, 186, 103, 6, 255, 185, 103, 12, 255, 183, 107, 5, 255, 184, 107, 7, 255, 186, 104, 13, 255, 180, 101, 9, 255, 180, 103, 9, 255, 179, 100, 13, 255, 181, 99, 13, 255, 191, 109, 12, 255, 196, 106, 10, 255, 193, 105, 6, 255, 190, 103, 9, 255, 184, 103, 6, 255, 179, 101, 10, 255, 175, 97, 12, 255, 172, 95, 12, 255, 167, 95, 4, 255, 162, 88, 11, 255, 158, 87, 7, 255, 143, 82, 8, 255, 127, 77, 20, 255, 115, 79, 11, 255, 103, 71, 8, 255, 117, 77, 16, 255, 112, 78, 5, 255, 90, 72, 11, 255, 87, 74, 9, 255, 90, 73, 7, 255, 93, 71, 4, 255, 92, 70, 16, 255, 88, 68, 8, 255, 88, 66, 5, 255, 88, 65, 9, 255, 88, 68, 5, 255, 88, 70, 3, 255, 94, 69, 7, 255, 96, 60, 13, 255, 85, 65, 4, 255, 84, 71, 8, 255, 90, 67, 3, 255, 89, 58, 3, 255, 106, 75, 6, 255, 172, 126, 4, 255, 181, 134, 2, 255, 192, 151, 7, 255, 200, 150, 10, 255, 186, 140, 5, 255, 198, 156, 10, 255, 195, 142, 9, 255, 174, 118, 10, 255, 186, 140, 6, 255, 185, 131, 6, 255, 185, 128, 13, 255, 179, 131, 4, 255, 181, 133, 0, 255, 182, 131, 1, 255, 182, 128, 1, 255, 187, 132, 6, 255, 184, 127, 3, 255, 186, 129, 8, 255, 184, 128, 8, 255, 183, 126, 3, 255, 184, 126, 8, 255, 180, 125, 10, 255, 178, 123, 7, 255, 176, 114, 2, 255, 174, 110, 0, 255, 178, 114, 5, 255, 178, 114, 4, 255, 177, 113, 3, 255, 172, 109, 0, 255, 174, 108, 3, 255, 171, 103, 3, 255, 168, 102, 5, 255, 163, 98, 2, 255, 160, 96, 3, 255, 158, 94, 4, 255, 157, 92, 6, 255, 155, 88, 3, 255, 149, 84, 1, 255, 149, 84, 3, 255, 150, 81, 5, 255, 146, 79, 3, 255, 139, 75, 1, 255, 142, 76, 3, 255, 139, 71, 1, 255, 136, 69, 0, 255, 146, 70, 6, 255, 147, 68, 4, 255, 141, 72, 1, 255, 142, 74, 3, 255, 140, 69, 3, 255, 132, 61, 3, 255, 132, 60, 3, 255, 134, 58, 5, 255, 129, 56, 3, 255, 122, 55, 0, 255, 120, 54, 3, 255, 115, 51, 4, 255, 112, 43, 2, 255, 99, 39, 3, 255, 88, 42, 4, 255, 92, 34, 2, 255, 89, 30, 1, 255, 84, 29, 3, 255, 82, 29, 2, 255, 93, 37, 0, 255, 99, 38, 4, 255, 87, 33, 5, 255, 92, 37, 4, 255, 78, 29, 5, 255, 65, 22, 4, 255, 69, 26, 2, 255, 78, 24, 2, 255, 73, 23, 3, 255, 64, 23, 1, 255, 72, 26, 6, 255, 64, 21, 4, 255, 61, 23, 5, 255, 69, 21, 6, 255, 61, 21, 4, 255, 60, 23, 4, 255, 72, 20, 2, 255, 87, 24, 2, 255, 93, 25, 1, 255, 94, 30, 4, 255, 95, 26, 5, 255, 86, 27, 1, 255, 79, 26, 2, 255, 75, 22, 3, 255, 67, 20, 4, 255, 63, 21, 3, 255, 57, 21, 1, 255, 63, 21, 3, 255, 60, 18, 3, 255, 56, 18, 3, 255, 56, 15, 3, 255, 49, 17, 2, 255, 49, 18, 8, 255, 51, 18, 5, 255, 51, 15, 2, 255, 61, 21, 1, 255, 77, 26, 5, 255, 68, 18, 6, 255, 57, 18, 1, 255, 54, 19, 1, 255, 50, 17, 5, 255, 51, 19, 1, 255, 57, 23, 1, 255, 61, 22, 7, 255, 73, 27, 6, 255, 79, 28, 1, 255, 81, 31, 1, 255, 79, 23, 2, 255, 56, 18, 1, 255, 54, 16, 3, 255, 59, 13, 3, 255, 66, 15, 1, 255, 80, 27, 1, 255, 89, 30, 1, 255, 85, 29, 5, 255, 88, 35, 6, 255, 100, 42, 5, 255, 108, 49, 5, 255, 123, 49, 5, 255, 132, 54, 2, 255, 133, 57, 4, 255, 132, 55, 3, 255, 138, 56, 2, 255, 137, 58, 6, 255, 133, 61, 0, 255, 134, 61, 3, 255, 138, 59, 6, 255, 141, 59, 4, 255, 135, 57, 0, 255, 138, 58, 2, 255, 141, 59, 2, 255, 137, 55, 1, 255, 125, 46, 1, 255, 114, 38, 2, 255, 113, 37, 3, 255, 118, 40, 2, 255, 119, 41, 5, 255, 117, 37, 2, 255, 119, 39, 2, 255, 18, 15, 6, 255, 21, 16, 6, 255, 23, 18, 5, 255, 23, 22, 5, 255, 20, 22, 4, 255, 21, 25, 8, 255, 27, 31, 7, 255, 30, 32, 8, 255, 33, 38, 8, 255, 41, 43, 6, 255, 41, 46, 12, 255, 40, 50, 15, 255, 41, 52, 9, 255, 43, 54, 9, 255, 45, 59, 6, 255, 45, 62, 1, 255, 47, 60, 12, 255, 47, 55, 18, 255, 47, 54, 8, 255, 44, 53, 7, 255, 40, 55, 8, 255, 43, 54, 3, 255, 46, 49, 1, 255, 48, 46, 1, 255, 45, 39, 8, 255, 39, 34, 4, 255, 37, 30, 1, 255, 34, 28, 0, 255, 34, 28, 6, 255, 29, 24, 3, 255, 33, 27, 2, 255, 42, 35, 9, 255, 43, 36, 15, 255, 46, 33, 8, 255, 44, 32, 6, 255, 47, 35, 18, 255, 49, 37, 16, 255, 42, 33, 4, 255, 48, 32, 8, 255, 49, 32, 11, 255, 39, 27, 6, 255, 43, 26, 5, 255, 47, 28, 4, 255, 47, 33, 5, 255, 54, 46, 20, 255, 59, 48, 43, 255, 59, 56, 36, 255, 60, 53, 35, 255, 66, 63, 49, 255, 63, 61, 49, 255, 66, 63, 52, 255, 65, 61, 56, 255, 68, 54, 36, 255, 68, 55, 32, 255, 64, 60, 42, 255, 63, 56, 48, 255, 69, 51, 19, 255, 71, 45, 18, 255, 62, 48, 13, 255, 57, 45, 5, 255, 59, 33, 4, 255, 63, 38, 5, 255, 63, 49, 3, 255, 62, 44, 7, 255, 59, 33, 3, 255, 57, 30, 2, 255, 58, 31, 4, 255, 56, 28, 1, 255, 65, 33, 5, 255, 65, 32, 5, 255, 67, 32, 3, 255, 69, 34, 2, 255, 72, 37, 2, 255, 73, 33, 0, 255, 80, 36, 1, 255, 78, 36, 2, 255, 73, 37, 1, 255, 77, 39, 3, 255, 81, 36, 2, 255, 78, 39, 3, 255, 77, 41, 4, 255, 78, 39, 1, 255, 75, 43, 2, 255, 78, 43, 2, 255, 83, 45, 3, 255, 82, 41, 1, 255, 82, 39, 1, 255, 86, 43, 3, 255, 85, 43, 0, 255, 88, 43, 0, 255, 90, 44, 2, 255, 93, 47, 3, 255, 96, 48, 2, 255, 96, 47, 2, 255, 98, 49, 0, 255, 97, 47, 7, 255, 98, 47, 3, 255, 97, 50, 4, 255, 96, 52, 3, 255, 96, 54, 2, 255, 104, 49, 2, 255, 101, 46, 2, 255, 95, 50, 4, 255, 92, 52, 1, 255, 94, 54, 1, 255, 98, 54, 4, 255, 97, 50, 3, 255, 94, 47, 0, 255, 91, 51, 1, 255, 93, 48, 3, 255, 97, 44, 5, 255, 87, 45, 2, 255, 94, 45, 5, 255, 85, 43, 0, 255, 90, 47, 5, 255, 93, 44, 3, 255, 89, 47, 5, 255, 89, 45, 3, 255, 95, 48, 2, 255, 92, 49, 0, 255, 94, 53, 4, 255, 88, 49, 2, 255, 90, 50, 3, 255, 86, 51, 6, 255, 97, 51, 10, 255, 93, 50, 0, 255, 93, 52, 3, 255, 92, 53, 2, 255, 89, 53, 5, 255, 95, 52, 2, 255, 95, 54, 1, 255, 95, 56, 3, 255, 97, 54, 5, 255, 94, 53, 3, 255, 93, 57, 5, 255, 94, 55, 7, 255, 91, 48, 6, 255, 96, 48, 8, 255, 98, 56, 6, 255, 93, 59, 1, 255, 94, 56, 2, 255, 101, 54, 2, 255, 112, 53, 2, 255, 103, 55, 2, 255, 99, 56, 1, 255, 95, 57, 8, 255, 96, 50, 5, 255, 100, 49, 3, 255, 103, 56, 2, 255, 94, 55, 3, 255, 98, 57, 5, 255, 113, 58, 8, 255, 96, 50, 3, 255, 92, 52, 9, 255, 93, 53, 6, 255, 89, 49, 10, 255, 93, 54, 13, 255, 119, 59, 6, 255, 113, 61, 8, 255, 107, 58, 8, 255, 101, 52, 11, 255, 89, 51, 5, 255, 98, 56, 7, 255, 108, 65, 9, 255, 148, 70, 8, 255, 158, 72, 6, 255, 145, 69, 8, 255, 117, 58, 11, 255, 88, 53, 8, 255, 79, 53, 5, 255, 89, 59, 8, 255, 91, 60, 11, 255, 97, 63, 13, 255, 126, 64, 9, 255, 124, 62, 11, 255, 127, 66, 14, 255, 135, 72, 14, 255, 139, 70, 6, 255, 136, 71, 5, 255, 144, 71, 13, 255, 152, 76, 11, 255, 153, 74, 6, 255, 158, 74, 15, 255, 160, 76, 19, 255, 155, 77, 7, 255, 147, 72, 9, 255, 140, 70, 20, 255, 143, 76, 19, 255, 147, 77, 14, 255, 150, 79, 12, 255, 153, 80, 9, 255, 155, 80, 23, 255, 156, 85, 8, 255, 162, 85, 11, 255, 166, 86, 11, 255, 160, 82, 10, 255, 154, 80, 14, 255, 158, 86, 18, 255, 172, 93, 10, 255, 174, 90, 12, 255, 176, 95, 13, 255, 180, 98, 13, 255, 183, 97, 11, 255, 190, 102, 11, 255, 194, 107, 6, 255, 193, 103, 5, 255, 196, 105, 8, 255, 185, 98, 23, 255, 160, 86, 11, 255, 157, 88, 14, 255, 168, 95, 14, 255, 180, 100, 16, 255, 185, 100, 15, 255, 188, 101, 10, 255, 191, 102, 7, 255, 184, 97, 15, 255, 180, 101, 12, 255, 181, 103, 7, 255, 183, 100, 12, 255, 184, 100, 10, 255, 183, 104, 10, 255, 183, 103, 11, 255, 185, 103, 19, 255, 177, 99, 11, 255, 180, 98, 5, 255, 177, 99, 12, 255, 172, 96, 12, 255, 174, 95, 8, 255, 169, 93, 10, 255, 156, 90, 12, 255, 145, 87, 17, 255, 139, 83, 10, 255, 120, 76, 16, 255, 106, 70, 16, 255, 103, 73, 8, 255, 96, 74, 9, 255, 94, 70, 10, 255, 83, 73, 16, 255, 84, 68, 11, 255, 94, 74, 6, 255, 91, 74, 6, 255, 89, 71, 11, 255, 87, 71, 12, 255, 89, 71, 4, 255, 94, 69, 5, 255, 95, 66, 8, 255, 87, 67, 8, 255, 78, 67, 5, 255, 87, 71, 4, 255, 89, 71, 0, 255, 88, 68, 4, 255, 89, 65, 6, 255, 89, 67, 4, 255, 92, 66, 2, 255, 93, 68, 4, 255, 96, 63, 12, 255, 98, 59, 15, 255, 135, 94, 7, 255, 179, 139, 4, 255, 193, 150, 5, 255, 198, 152, 3, 255, 199, 157, 0, 255, 198, 155, 5, 255, 195, 145, 8, 255, 180, 125, 11, 255, 190, 144, 1, 255, 186, 132, 5, 255, 178, 121, 6, 255, 179, 125, 9, 255, 176, 125, 5, 255, 179, 125, 6, 255, 181, 125, 3, 255, 186, 128, 7, 255, 185, 127, 6, 255, 180, 123, 3, 255, 181, 123, 4, 255, 182, 126, 0, 255, 178, 123, 1, 255, 181, 124, 5, 255, 178, 118, 1, 255, 172, 110, 2, 255, 167, 105, 1, 255, 174, 115, 5, 255, 176, 115, 8, 255, 174, 112, 4, 255, 171, 108, 1, 255, 169, 105, 2, 255, 169, 102, 5, 255, 164, 99, 4, 255, 161, 96, 6, 255, 159, 97, 7, 255, 156, 92, 2, 255, 157, 91, 2, 255, 152, 86, 3, 255, 146, 79, 2, 255, 146, 76, 1, 255, 148, 76, 7, 255, 145, 76, 5, 255, 142, 76, 3, 255, 143, 76, 8, 255, 138, 71, 1, 255, 138, 70, 2, 255, 141, 69, 2, 255, 138, 66, 1, 255, 139, 66, 1, 255, 135, 64, 1, 255, 127, 61, 2, 255, 126, 55, 0, 255, 133, 61, 2, 255, 136, 64, 3, 255, 131, 60, 1, 255, 127, 57, 0, 255, 123, 56, 2, 255, 117, 49, 0, 255, 116, 47, 2, 255, 109, 47, 4, 255, 101, 42, 5, 255, 93, 34, 3, 255, 89, 34, 6, 255, 78, 29, 2, 255, 73, 26, 4, 255, 93, 35, 5, 255, 101, 37, 4, 255, 97, 33, 2, 255, 99, 33, 3, 255, 94, 32, 5, 255, 78, 25, 2, 255, 71, 26, 3, 255, 69, 22, 3, 255, 70, 16, 3, 255, 68, 21, 4, 255, 68, 24, 4, 255, 65, 20, 3, 255, 64, 25, 5, 255, 60, 23, 1, 255, 55, 18, 3, 255, 64, 20, 2, 255, 81, 29, 1, 255, 91, 31, 4, 255, 95, 26, 2, 255, 100, 29, 5, 255, 94, 23, 1, 255, 88, 24, 0, 255, 83, 25, 1, 255, 79, 24, 2, 255, 73, 23, 4, 255, 62, 21, 2, 255, 64, 21, 3, 255, 66, 20, 5, 255, 59, 19, 5, 255, 51, 17, 4, 255, 55, 18, 6, 255, 57, 21, 4, 255, 53, 16, 3, 255, 56, 15, 3, 255, 54, 11, 1, 255, 56, 14, 2, 255, 65, 18, 6, 255, 57, 17, 8, 255, 48, 18, 2, 255, 65, 23, 3, 255, 89, 31, 5, 255, 84, 27, 0, 255, 84, 31, 3, 255, 91, 36, 6, 255, 94, 33, 1, 255, 107, 45, 0, 255, 112, 46, 3, 255, 92, 30, 3, 255, 67, 21, 3, 255, 68, 20, 2, 255, 61, 16, 4, 255, 69, 18, 3, 255, 91, 30, 5, 255, 103, 36, 4, 255, 105, 39, 2, 255, 118, 50, 2, 255, 132, 55, 4, 255, 135, 57, 3, 255, 137, 57, 1, 255, 131, 53, 0, 255, 130, 54, 2, 255, 136, 58, 6, 255, 135, 56, 3, 255, 133, 55, 2, 255, 136, 58, 1, 255, 132, 57, 1, 255, 135, 59, 4, 255, 136, 59, 1, 255, 136, 62, 1, 255, 140, 61, 2, 255, 140, 57, 0, 255, 141, 60, 1, 255, 139, 60, 4, 255, 130, 52, 2, 255, 124, 48, 1, 255, 123, 50, 2, 255, 124, 51, 2, 255, 125, 42, 1, 255, 123, 41, 3, 255, 21, 19, 7, 255, 19, 16, 2, 255, 25, 22, 5, 255, 24, 25, 4, 255, 25, 28, 6, 255, 25, 31, 7, 255, 28, 35, 3, 255, 34, 41, 8, 255, 35, 41, 8, 255, 42, 50, 7, 255, 45, 56, 8, 255, 38, 53, 9, 255, 40, 55, 13, 255, 48, 58, 18, 255, 47, 58, 14, 255, 49, 59, 10, 255, 49, 60, 10, 255, 46, 55, 11, 255, 42, 51, 5, 255, 41, 53, 12, 255, 41, 48, 8, 255, 45, 45, 4, 255, 47, 46, 3, 255, 41, 42, 3, 255, 29, 36, 2, 255, 28, 31, 4, 255, 30, 26, 3, 255, 29, 26, 5, 255, 34, 27, 8, 255, 33, 21, 4, 255, 34, 22, 6, 255, 40, 28, 12, 255, 38, 26, 8, 255, 40, 27, 8, 255, 43, 31, 0, 255, 47, 33, 22, 255, 53, 36, 23, 255, 54, 38, 3, 255, 51, 33, 9, 255, 47, 31, 12, 255, 40, 28, 4, 255, 39, 27, 3, 255, 44, 28, 5, 255, 41, 26, 6, 255, 46, 34, 16, 255, 56, 51, 32, 255, 53, 56, 41, 255, 57, 51, 44, 255, 68, 63, 49, 255, 67, 63, 47, 255, 66, 65, 53, 255, 67, 62, 53, 255, 60, 51, 41, 255, 59, 54, 29, 255, 65, 59, 39, 255, 71, 55, 41, 255, 68, 48, 15, 255, 58, 39, 25, 255, 59, 47, 21, 255, 69, 46, 9, 255, 64, 35, 8, 255, 64, 41, 8, 255, 68, 50, 2, 255, 68, 45, 1, 255, 62, 38, 5, 255, 59, 30, 1, 255, 65, 30, 3, 255, 69, 32, 5, 255, 67, 31, 4, 255, 64, 31, 3, 255, 69, 35, 5, 255, 73, 37, 5, 255, 70, 36, 1, 255, 76, 36, 2, 255, 82, 38, 5, 255, 73, 36, 2, 255, 71, 37, 3, 255, 76, 35, 1, 255, 76, 38, 1, 255, 81, 39, 4, 255, 82, 38, 3, 255, 82, 42, 4, 255, 78, 43, 3, 255, 76, 41, 2, 255, 74, 39, 1, 255, 75, 40, 3, 255, 78, 41, 3, 255, 84, 44, 3, 255, 86, 44, 1, 255, 89, 44, 1, 255, 86, 42, 2, 255, 92, 46, 1, 255, 98, 49, 1, 255, 96, 47, 4, 255, 96, 47, 3, 255, 95, 46, 4, 255, 102, 52, 7, 255, 95, 49, 1, 255, 105, 51, 3, 255, 99, 52, 2, 255, 96, 52, 1, 255, 99, 49, 2, 255, 99, 50, 0, 255, 102, 54, 2, 255, 103, 54, 3, 255, 102, 49, 3, 255, 103, 49, 5, 255, 99, 52, 4, 255, 95, 56, 1, 255, 100, 54, 4, 255, 101, 53, 3, 255, 105, 64, 4, 255, 102, 51, 9, 255, 92, 53, 2, 255, 92, 54, 3, 255, 99, 49, 8, 255, 101, 53, 7, 255, 97, 51, 0, 255, 116, 52, 4, 255, 114, 47, 6, 255, 94, 43, 4, 255, 90, 46, 4, 255, 99, 44, 4, 255, 95, 45, 4, 255, 97, 47, 3, 255, 106, 48, 3, 255, 120, 52, 9, 255, 103, 50, 5, 255, 101, 53, 5, 255, 99, 53, 4, 255, 103, 55, 6, 255, 101, 53, 5, 255, 101, 52, 3, 255, 118, 55, 0, 255, 117, 53, 0, 255, 102, 49, 3, 255, 94, 50, 8, 255, 105, 54, 5, 255, 101, 56, 3, 255, 89, 55, 4, 255, 107, 57, 9, 255, 133, 60, 6, 255, 137, 59, 2, 255, 130, 58, 7, 255, 117, 54, 5, 255, 104, 50, 5, 255, 99, 51, 9, 255, 99, 54, 8, 255, 96, 52, 6, 255, 108, 54, 11, 255, 130, 65, 6, 255, 135, 65, 6, 255, 109, 52, 7, 255, 108, 54, 7, 255, 100, 54, 7, 255, 97, 55, 8, 255, 121, 62, 4, 255, 132, 66, 6, 255, 144, 68, 3, 255, 144, 64, 4, 255, 108, 51, 7, 255, 84, 47, 7, 255, 105, 55, 10, 255, 140, 65, 6, 255, 161, 71, 2, 255, 154, 69, 4, 255, 143, 64, 4, 255, 132, 66, 7, 255, 107, 65, 9, 255, 101, 60, 7, 255, 116, 63, 11, 255, 126, 62, 19, 255, 132, 67, 8, 255, 129, 62, 12, 255, 131, 71, 9, 255, 137, 70, 6, 255, 144, 68, 11, 255, 147, 71, 15, 255, 152, 74, 13, 255, 153, 75, 7, 255, 155, 76, 10, 255, 158, 78, 5, 255, 158, 78, 6, 255, 156, 75, 8, 255, 152, 73, 7, 255, 150, 73, 6, 255, 152, 75, 14, 255, 154, 79, 19, 255, 156, 80, 13, 255, 159, 80, 18, 255, 158, 81, 17, 255, 155, 84, 12, 255, 160, 80, 17, 255, 156, 78, 11, 255, 152, 80, 12, 255, 155, 86, 16, 255, 160, 87, 15, 255, 175, 89, 15, 255, 184, 97, 16, 255, 179, 96, 16, 255, 181, 98, 15, 255, 183, 99, 12, 255, 186, 98, 13, 255, 189, 100, 12, 255, 191, 106, 9, 255, 186, 101, 7, 255, 186, 99, 12, 255, 178, 94, 25, 255, 178, 102, 15, 255, 181, 105, 9, 255, 185, 102, 11, 255, 181, 101, 9, 255, 180, 101, 11, 255, 179, 99, 9, 255, 177, 98, 6, 255, 175, 99, 6, 255, 179, 101, 12, 255, 183, 105, 16, 255, 181, 102, 22, 255, 184, 107, 16, 255, 177, 107, 11, 255, 176, 101, 12, 255, 174, 96, 5, 255, 166, 94, 15, 255, 156, 90, 19, 255, 157, 87, 11, 255, 152, 87, 19, 255, 127, 78, 18, 255, 109, 76, 26, 255, 107, 79, 14, 255, 96, 73, 12, 255, 93, 71, 9, 255, 89, 73, 9, 255, 86, 73, 8, 255, 90, 74, 12, 255, 89, 74, 15, 255, 94, 72, 12, 255, 94, 74, 9, 255, 88, 70, 8, 255, 90, 72, 10, 255, 90, 68, 6, 255, 92, 70, 8, 255, 88, 71, 3, 255, 88, 67, 8, 255, 90, 70, 13, 255, 90, 68, 4, 255, 94, 68, 6, 255, 92, 69, 7, 255, 93, 67, 7, 255, 96, 65, 10, 255, 94, 67, 8, 255, 94, 69, 7, 255, 109, 73, 9, 255, 103, 65, 7, 255, 95, 69, 8, 255, 101, 70, 6, 255, 101, 70, 9, 255, 132, 92, 7, 255, 172, 126, 13, 255, 194, 149, 2, 255, 193, 148, 10, 255, 194, 148, 14, 255, 204, 158, 3, 255, 184, 135, 1, 255, 185, 134, 5, 255, 196, 145, 8, 255, 185, 132, 0, 255, 176, 119, 2, 255, 175, 119, 5, 255, 173, 122, 1, 255, 179, 124, 2, 255, 180, 123, 1, 255, 182, 124, 5, 255, 184, 125, 9, 255, 183, 122, 9, 255, 179, 121, 6, 255, 178, 126, 4, 255, 176, 124, 4, 255, 177, 119, 5, 255, 174, 113, 1, 255, 170, 109, 4, 255, 169, 109, 8, 255, 172, 114, 7, 255, 174, 114, 7, 255, 174, 113, 6, 255, 174, 110, 5, 255, 170, 104, 5, 255, 167, 99, 5, 255, 160, 101, 3, 255, 156, 97, 6, 255, 158, 95, 9, 255, 157, 92, 2, 255, 159, 89, 3, 255, 155, 84, 8, 255, 153, 78, 6, 255, 152, 80, 3, 255, 139, 73, 3, 255, 130, 69, 0, 255, 139, 77, 0, 255, 142, 74, 4, 255, 141, 67, 5, 255, 141, 69, 3, 255, 136, 69, 1, 255, 134, 68, 0, 255, 140, 70, 4, 255, 139, 68, 6, 255, 133, 64, 5, 255, 130, 62, 3, 255, 131, 64, 4, 255, 131, 64, 4, 255, 131, 61, 2, 255, 130, 59, 5, 255, 129, 57, 5, 255, 121, 53, 1, 255, 120, 54, 3, 255, 116, 50, 7, 255, 106, 42, 1, 255, 102, 42, 2, 255, 90, 34, 2, 255, 78, 27, 4, 255, 72, 24, 3, 255, 94, 34, 8, 255, 101, 38, 4, 255, 101, 38, 3, 255, 100, 35, 5, 255, 93, 34, 5, 255, 82, 30, 0, 255, 77, 28, 2, 255, 69, 21, 2, 255, 66, 20, 2, 255, 72, 25, 6, 255, 71, 21, 1, 255, 72, 23, 3, 255, 71, 23, 5, 255, 62, 23, 3, 255, 61, 16, 4, 255, 73, 20, 5, 255, 82, 26, 0, 255, 88, 24, 4, 255, 94, 27, 2, 255, 100, 28, 2, 255, 97, 26, 1, 255, 94, 28, 3, 255, 87, 27, 1, 255, 87, 25, 2, 255, 85, 24, 3, 255, 76, 23, 1, 255, 77, 23, 3, 255, 69, 21, 1, 255, 67, 21, 2, 255, 64, 17, 2, 255, 55, 15, 2, 255, 58, 21, 5, 255, 57, 17, 2, 255, 60, 18, 4, 255, 60, 18, 3, 255, 60, 17, 2, 255, 61, 19, 6, 255, 60, 15, 2, 255, 63, 21, 2, 255, 69, 18, 6, 255, 91, 27, 1, 255, 102, 37, 7, 255, 101, 34, 6, 255, 104, 30, 0, 255, 107, 36, 4, 255, 124, 45, 7, 255, 115, 32, 1, 255, 93, 26, 1, 255, 81, 27, 6, 255, 86, 21, 5, 255, 75, 19, 5, 255, 66, 17, 0, 255, 75, 21, 0, 255, 88, 24, 2, 255, 103, 28, 0, 255, 120, 42, 5, 255, 131, 52, 5, 255, 138, 56, 2, 255, 134, 54, 2, 255, 134, 55, 6, 255, 129, 52, 2, 255, 130, 55, 2, 255, 133, 58, 1, 255, 134, 55, 2, 255, 134, 57, 3, 255, 134, 57, 4, 255, 135, 58, 3, 255, 138, 58, 1, 255, 140, 61, 1, 255, 139, 57, 1, 255, 140, 59, 1, 255, 142, 63, 1, 255, 143, 63, 1, 255, 142, 61, 3, 255, 141, 62, 5, 255, 139, 64, 5, 255, 138, 61, 3, 255, 136, 49, 3, 255, 124, 44, 4, 255, 17, 17, 3, 255, 22, 22, 11, 255, 24, 26, 15, 255, 24, 27, 9, 255, 28, 32, 10, 255, 30, 34, 13, 255, 30, 38, 11, 255, 34, 45, 17, 255, 36, 49, 17, 255, 36, 54, 10, 255, 39, 59, 9, 255, 43, 61, 11, 255, 39, 56, 10, 255, 51, 61, 13, 255, 55, 66, 6, 255, 53, 60, 4, 255, 49, 57, 7, 255, 48, 58, 10, 255, 42, 55, 9, 255, 36, 48, 4, 255, 42, 44, 5, 255, 47, 41, 6, 255, 43, 38, 5, 255, 37, 34, 5, 255, 32, 28, 8, 255, 34, 27, 10, 255, 31, 24, 4, 255, 34, 21, 4, 255, 35, 21, 4, 255, 33, 23, 6, 255, 32, 22, 7, 255, 30, 19, 4, 255, 36, 26, 11, 255, 35, 25, 13, 255, 37, 29, 1, 255, 41, 31, 24, 255, 49, 36, 24, 255, 49, 35, 11, 255, 54, 33, 14, 255, 52, 32, 9, 255, 46, 35, 5, 255, 39, 31, 0, 255, 40, 28, 0, 255, 45, 27, 6, 255, 50, 30, 11, 255, 57, 49, 30, 255, 58, 52, 42, 255, 56, 48, 43, 255, 63, 63, 50, 255, 61, 62, 46, 255, 63, 61, 49, 255, 63, 62, 48, 255, 60, 57, 48, 255, 54, 53, 36, 255, 57, 53, 40, 255, 73, 57, 36, 255, 68, 51, 13, 255, 52, 40, 12, 255, 62, 47, 17, 255, 73, 47, 11, 255, 58, 39, 4, 255, 59, 38, 4, 255, 71, 42, 5, 255, 64, 41, 8, 255, 69, 38, 6, 255, 63, 31, 1, 255, 63, 30, 3, 255, 65, 32, 3, 255, 68, 32, 2, 255, 72, 30, 3, 255, 72, 31, 3, 255, 74, 37, 3, 255, 72, 36, 1, 255, 75, 36, 1, 255, 80, 40, 5, 255, 71, 36, 1, 255, 72, 38, 3, 255, 84, 36, 3, 255, 72, 38, 0, 255, 80, 38, 3, 255, 87, 39, 5, 255, 83, 40, 5, 255, 80, 39, 4, 255, 78, 44, 5, 255, 78, 42, 3, 255, 81, 40, 3, 255, 86, 40, 4, 255, 89, 43, 3, 255, 93, 46, 2, 255, 93, 48, 3, 255, 89, 46, 6, 255, 92, 47, 2, 255, 94, 48, 0, 255, 95, 47, 6, 255, 99, 50, 9, 255, 99, 49, 1, 255, 103, 48, 1, 255, 94, 51, 4, 255, 97, 50, 5, 255, 101, 50, 1, 255, 105, 54, 1, 255, 100, 57, 4, 255, 94, 54, 3, 255, 96, 52, 2, 255, 99, 52, 3, 255, 102, 52, 5, 255, 105, 53, 3, 255, 103, 51, 3, 255, 101, 48, 3, 255, 109, 49, 0, 255, 104, 51, 7, 255, 125, 55, 10, 255, 143, 58, 3, 255, 136, 61, 2, 255, 105, 51, 1, 255, 103, 42, 5, 255, 102, 51, 4, 255, 107, 52, 1, 255, 130, 51, 2, 255, 135, 53, 4, 255, 121, 50, 1, 255, 121, 55, 4, 255, 114, 51, 6, 255, 104, 49, 5, 255, 85, 47, 0, 255, 100, 49, 6, 255, 131, 58, 12, 255, 123, 50, 5, 255, 122, 52, 3, 255, 118, 52, 4, 255, 101, 50, 4, 255, 86, 41, 0, 255, 104, 45, 3, 255, 128, 53, 4, 255, 129, 54, 0, 255, 116, 54, 6, 255, 105, 51, 4, 255, 109, 52, 1, 255, 99, 51, 3, 255, 93, 52, 4, 255, 127, 60, 7, 255, 130, 54, 0, 255, 121, 58, 3, 255, 137, 61, 9, 255, 136, 60, 5, 255, 103, 48, 0, 255, 85, 49, 0, 255, 89, 52, 3, 255, 102, 59, 8, 255, 140, 67, 4, 255, 159, 72, 4, 255, 154, 71, 6, 255, 135, 61, 4, 255, 117, 52, 6, 255, 100, 53, 6, 255, 99, 51, 2, 255, 144, 63, 11, 255, 161, 73, 3, 255, 163, 67, 9, 255, 135, 53, 11, 255, 115, 58, 9, 255, 80, 51, 7, 255, 85, 48, 10, 255, 117, 60, 8, 255, 137, 68, 7, 255, 138, 70, 10, 255, 142, 69, 12, 255, 147, 73, 12, 255, 143, 67, 10, 255, 146, 69, 11, 255, 143, 67, 6, 255, 134, 62, 8, 255, 138, 69, 8, 255, 142, 68, 12, 255, 152, 80, 8, 255, 155, 78, 4, 255, 154, 71, 5, 255, 156, 73, 11, 255, 154, 73, 6, 255, 158, 77, 8, 255, 156, 75, 11, 255, 152, 76, 5, 255, 153, 77, 10, 255, 151, 75, 18, 255, 154, 78, 14, 255, 156, 82, 16, 255, 156, 79, 13, 255, 159, 76, 11, 255, 161, 80, 9, 255, 157, 81, 7, 255, 151, 73, 29, 255, 153, 76, 24, 255, 156, 81, 18, 255, 160, 87, 12, 255, 166, 88, 14, 255, 174, 91, 25, 255, 180, 97, 12, 255, 179, 98, 6, 255, 180, 94, 17, 255, 184, 97, 19, 255, 184, 100, 14, 255, 184, 98, 14, 255, 190, 104, 17, 255, 183, 100, 14, 255, 176, 94, 12, 255, 181, 96, 13, 255, 189, 107, 10, 255, 187, 106, 10, 255, 185, 103, 23, 255, 178, 94, 22, 255, 176, 96, 17, 255, 176, 100, 15, 255, 181, 102, 15, 255, 180, 101, 13, 255, 176, 104, 10, 255, 180, 110, 10, 255, 183, 104, 21, 255, 184, 101, 12, 255, 183, 100, 15, 255, 170, 97, 13, 255, 164, 100, 11, 255, 164, 95, 18, 255, 158, 91, 8, 255, 148, 92, 8, 255, 145, 88, 16, 255, 137, 83, 14, 255, 111, 73, 15, 255, 92, 80, 17, 255, 77, 75, 17, 255, 83, 75, 14, 255, 89, 76, 15, 255, 92, 77, 6, 255, 93, 74, 16, 255, 94, 74, 8, 255, 93, 73, 3, 255, 89, 72, 17, 255, 91, 73, 8, 255, 94, 73, 6, 255, 92, 74, 10, 255, 91, 71, 16, 255, 90, 71, 15, 255, 87, 71, 6, 255, 87, 73, 2, 255, 88, 71, 4, 255, 87, 70, 8, 255, 89, 67, 5, 255, 102, 68, 6, 255, 113, 73, 11, 255, 114, 72, 9, 255, 108, 67, 9, 255, 99, 65, 8, 255, 99, 65, 7, 255, 97, 65, 4, 255, 103, 70, 11, 255, 111, 67, 9, 255, 108, 66, 4, 255, 95, 66, 13, 255, 138, 102, 9, 255, 166, 113, 10, 255, 186, 140, 6, 255, 192, 147, 10, 255, 194, 147, 11, 255, 196, 150, 0, 255, 179, 126, 9, 255, 179, 125, 5, 255, 191, 138, 6, 255, 186, 131, 4, 255, 183, 125, 6, 255, 167, 106, 8, 255, 164, 115, 5, 255, 167, 118, 5, 255, 169, 120, 2, 255, 173, 121, 5, 255, 177, 121, 9, 255, 178, 118, 10, 255, 179, 120, 9, 255, 175, 120, 2, 255, 174, 119, 5, 255, 172, 114, 6, 255, 174, 115, 6, 255, 173, 114, 6, 255, 170, 112, 6, 255, 171, 111, 5, 255, 171, 108, 5, 255, 170, 106, 4, 255, 170, 106, 4, 255, 168, 100, 5, 255, 167, 98, 7, 255, 160, 96, 0, 255, 156, 92, 2, 255, 155, 89, 3, 255, 154, 86, 0, 255, 155, 85, 4, 255, 147, 76, 5, 255, 135, 62, 0, 255, 141, 72, 2, 255, 143, 77, 5, 255, 137, 73, 1, 255, 139, 75, 3, 255, 135, 69, 2, 255, 136, 66, 1, 255, 141, 66, 4, 255, 138, 69, 2, 255, 135, 70, 2, 255, 137, 70, 2, 255, 139, 68, 4, 255, 138, 67, 4, 255, 135, 61, 4, 255, 132, 60, 5, 255, 129, 61, 3, 255, 129, 61, 5, 255, 126, 57, 4, 255, 122, 55, 4, 255, 119, 53, 1, 255, 123, 54, 2, 255, 117, 50, 6, 255, 112, 48, 3, 255, 110, 47, 4, 255, 94, 34, 0, 255, 84, 27, 7, 255, 76, 29, 6, 255, 91, 32, 4, 255, 94, 34, 0, 255, 97, 38, 3, 255, 94, 33, 4, 255, 89, 32, 3, 255, 86, 33, 1, 255, 83, 26, 0, 255, 74, 25, 5, 255, 64, 24, 1, 255, 75, 26, 3, 255, 85, 25, 7, 255, 76, 17, 3, 255, 71, 22, 2, 255, 67, 25, 1, 255, 64, 17, 5, 255, 78, 22, 5, 255, 89, 30, 0, 255, 90, 26, 4, 255, 97, 27, 3, 255, 102, 27, 2, 255, 102, 27, 2, 255, 99, 28, 3, 255, 95, 27, 2, 255, 97, 27, 4, 255, 97, 27, 5, 255, 89, 27, 6, 255, 81, 20, 1, 255, 75, 18, 2, 255, 72, 18, 2, 255, 71, 19, 3, 255, 72, 23, 7, 255, 64, 20, 5, 255, 63, 18, 2, 255, 66, 18, 2, 255, 65, 17, 0, 255, 62, 18, 1, 255, 55, 16, 2, 255, 61, 16, 2, 255, 70, 20, 3, 255, 78, 23, 9, 255, 75, 21, 1, 255, 72, 20, 2, 255, 78, 20, 5, 255, 81, 18, 0, 255, 86, 25, 3, 255, 100, 29, 6, 255, 92, 28, 1, 255, 86, 29, 0, 255, 92, 30, 3, 255, 88, 28, 2, 255, 77, 22, 5, 255, 64, 18, 1, 255, 62, 20, 1, 255, 69, 19, 3, 255, 83, 20, 1, 255, 88, 24, 0, 255, 102, 33, 0, 255, 129, 48, 6, 255, 133, 53, 7, 255, 135, 54, 4, 255, 132, 52, 0, 255, 133, 57, 1, 255, 134, 59, 2, 255, 132, 56, 2, 255, 131, 54, 1, 255, 138, 57, 4, 255, 136, 55, 1, 255, 139, 56, 2, 255, 142, 58, 2, 255, 140, 58, 3, 255, 140, 60, 4, 255, 141, 62, 1, 255, 144, 62, 1, 255, 145, 60, 0, 255, 147, 62, 2, 255, 147, 67, 3, 255, 143, 65, 2, 255, 135, 52, 1, 255, 119, 41, 0, 255, 22, 20, 9, 255, 20, 22, 2, 255, 24, 28, 5, 255, 25, 28, 13, 255, 30, 31, 16, 255, 38, 42, 12, 255, 37, 46, 10, 255, 39, 51, 14, 255, 40, 54, 12, 255, 44, 62, 13, 255, 42, 60, 13, 255, 45, 62, 13, 255, 49, 63, 10, 255, 49, 62, 8, 255, 46, 59, 6, 255, 43, 53, 11, 255, 44, 53, 12, 255, 44, 52, 3, 255, 42, 49, 5, 255, 41, 42, 4, 255, 44, 44, 11, 255, 37, 37, 7, 255, 33, 32, 3, 255, 30, 27, 1, 255, 35, 28, 7, 255, 26, 24, 2, 255, 27, 24, 3, 255, 39, 21, 5, 255, 40, 24, 7, 255, 27, 21, 1, 255, 26, 17, 0, 255, 39, 22, 8, 255, 39, 24, 9, 255, 40, 24, 13, 255, 36, 24, 8, 255, 40, 26, 18, 255, 45, 35, 22, 255, 53, 35, 26, 255, 53, 33, 20, 255, 50, 28, 8, 255, 54, 34, 10, 255, 46, 28, 3, 255, 41, 23, 1, 255, 49, 27, 5, 255, 57, 31, 7, 255, 59, 40, 31, 255, 58, 51, 40, 255, 56, 49, 34, 255, 64, 60, 50, 255, 63, 59, 51, 255, 62, 62, 50, 255, 65, 66, 46, 255, 70, 57, 36, 255, 72, 52, 32, 255, 71, 55, 41, 255, 76, 57, 33, 255, 79, 47, 24, 255, 71, 40, 10, 255, 71, 45, 13, 255, 70, 48, 11, 255, 54, 46, 4, 255, 56, 46, 0, 255, 70, 44, 4, 255, 71, 37, 14, 255, 69, 38, 4, 255, 65, 32, 2, 255, 67, 33, 4, 255, 68, 32, 2, 255, 71, 33, 2, 255, 74, 33, 3, 255, 75, 35, 2, 255, 74, 36, 0, 255, 76, 38, 2, 255, 77, 37, 2, 255, 79, 38, 3, 255, 76, 36, 1, 255, 77, 38, 2, 255, 88, 40, 4, 255, 81, 38, 1, 255, 81, 41, 3, 255, 81, 40, 3, 255, 79, 35, 1, 255, 82, 41, 4, 255, 87, 43, 2, 255, 86, 43, 1, 255, 85, 42, 1, 255, 86, 43, 1, 255, 92, 45, 3, 255, 97, 46, 2, 255, 98, 45, 1, 255, 94, 43, 2, 255, 93, 50, 3, 255, 97, 54, 4, 255, 101, 49, 6, 255, 103, 50, 3, 255, 100, 49, 3, 255, 102, 48, 1, 255, 105, 49, 6, 255, 96, 43, 2, 255, 105, 46, 0, 255, 122, 50, 3, 255, 121, 46, 3, 255, 105, 51, 4, 255, 99, 48, 3, 255, 106, 43, 1, 255, 118, 47, 2, 255, 124, 50, 1, 255, 122, 50, 4, 255, 113, 45, 6, 255, 102, 43, 5, 255, 100, 44, 0, 255, 111, 42, 0, 255, 126, 51, 4, 255, 132, 50, 4, 255, 129, 57, 3, 255, 115, 49, 2, 255, 104, 46, 5, 255, 105, 44, 6, 255, 111, 47, 3, 255, 128, 54, 1, 255, 142, 56, 1, 255, 135, 54, 0, 255, 123, 54, 2, 255, 114, 51, 4, 255, 102, 46, 3, 255, 108, 46, 3, 255, 121, 55, 4, 255, 128, 54, 1, 255, 138, 55, 2, 255, 128, 53, 3, 255, 113, 52, 4, 255, 97, 46, 5, 255, 96, 40, 3, 255, 113, 46, 9, 255, 127, 55, 4, 255, 135, 59, 1, 255, 130, 56, 2, 255, 112, 49, 4, 255, 92, 42, 5, 255, 90, 46, 2, 255, 115, 56, 1, 255, 141, 65, 2, 255, 153, 69, 3, 255, 143, 59, 3, 255, 128, 48, 4, 255, 101, 42, 5, 255, 87, 45, 4, 255, 78, 46, 5, 255, 97, 52, 5, 255, 145, 60, 6, 255, 155, 63, 6, 255, 147, 60, 1, 255, 128, 52, 5, 255, 106, 49, 10, 255, 99, 52, 6, 255, 90, 51, 7, 255, 132, 56, 10, 255, 145, 67, 5, 255, 129, 60, 4, 255, 134, 59, 9, 255, 129, 61, 6, 255, 131, 65, 13, 255, 124, 65, 13, 255, 121, 66, 10, 255, 137, 61, 12, 255, 143, 67, 8, 255, 148, 69, 8, 255, 144, 68, 7, 255, 139, 60, 10, 255, 143, 68, 8, 255, 142, 67, 6, 255, 148, 69, 5, 255, 155, 70, 16, 255, 152, 69, 11, 255, 160, 71, 8, 255, 159, 75, 11, 255, 152, 71, 11, 255, 155, 73, 15, 255, 148, 74, 15, 255, 154, 75, 12, 255, 151, 70, 12, 255, 147, 72, 7, 255, 150, 78, 11, 255, 152, 76, 9, 255, 156, 76, 10, 255, 157, 78, 18, 255, 153, 78, 14, 255, 159, 79, 11, 255, 155, 78, 14, 255, 148, 77, 15, 255, 154, 80, 16, 255, 168, 88, 12, 255, 169, 95, 12, 255, 176, 93, 11, 255, 181, 94, 11, 255, 180, 92, 24, 255, 176, 91, 14, 255, 181, 94, 18, 255, 184, 95, 17, 255, 184, 100, 8, 255, 186, 103, 11, 255, 188, 101, 18, 255, 185, 102, 12, 255, 177, 98, 3, 255, 174, 100, 8, 255, 179, 101, 13, 255, 181, 100, 9, 255, 181, 99, 9, 255, 180, 102, 12, 255, 180, 104, 16, 255, 182, 107, 11, 255, 180, 107, 15, 255, 185, 103, 13, 255, 185, 100, 8, 255, 179, 99, 12, 255, 177, 97, 24, 255, 172, 94, 16, 255, 166, 90, 25, 255, 162, 94, 6, 255, 151, 92, 12, 255, 142, 89, 19, 255, 146, 90, 21, 255, 140, 86, 14, 255, 125, 81, 16, 255, 119, 80, 12, 255, 108, 79, 12, 255, 98, 76, 14, 255, 97, 76, 9, 255, 95, 75, 12, 255, 94, 78, 16, 255, 87, 75, 15, 255, 89, 74, 17, 255, 92, 75, 17, 255, 92, 75, 13, 255, 94, 76, 13, 255, 94, 76, 12, 255, 89, 72, 9, 255, 89, 71, 11, 255, 90, 72, 10, 255, 89, 70, 15, 255, 87, 70, 13, 255, 88, 72, 5, 255, 88, 73, 8, 255, 93, 71, 7, 255, 102, 74, 4, 255, 114, 72, 11, 255, 118, 71, 9, 255, 115, 70, 6, 255, 125, 69, 8, 255, 129, 71, 6, 255, 123, 71, 6, 255, 130, 73, 8, 255, 103, 68, 7, 255, 100, 66, 8, 255, 120, 69, 9, 255, 102, 66, 4, 255, 106, 69, 6, 255, 128, 94, 2, 255, 151, 106, 9, 255, 172, 130, 11, 255, 190, 146, 0, 255, 192, 145, 4, 255, 192, 145, 10, 255, 183, 132, 15, 255, 182, 133, 6, 255, 186, 136, 5, 255, 184, 130, 9, 255, 167, 110, 1, 255, 168, 108, 8, 255, 173, 117, 7, 255, 170, 115, 6, 255, 167, 114, 5, 255, 171, 116, 9, 255, 175, 114, 9, 255, 175, 111, 6, 255, 174, 116, 8, 255, 173, 115, 1, 255, 175, 116, 4, 255, 170, 111, 6, 255, 172, 113, 6, 255, 171, 111, 2, 255, 170, 110, 2, 255, 170, 110, 3, 255, 171, 108, 4, 255, 167, 101, 3, 255, 164, 96, 0, 255, 159, 89, 2, 255, 158, 88, 7, 255, 161, 90, 5, 255, 156, 85, 2, 255, 155, 85, 2, 255, 157, 87, 2, 255, 150, 81, 1, 255, 141, 74, 3, 255, 135, 67, 3, 255, 138, 70, 6, 255, 142, 73, 7, 255, 142, 73, 1, 255, 144, 75, 4, 255, 140, 71, 9, 255, 139, 72, 2, 255, 142, 72, 4, 255, 143, 73, 4, 255, 146, 74, 5, 255, 143, 72, 3, 255, 139, 69, 2, 255, 136, 66, 0, 255, 131, 60, 0, 255, 131, 61, 3, 255, 128, 62, 2, 255, 131, 62, 6, 255, 132, 60, 8, 255, 128, 54, 4, 255, 125, 51, 3, 255, 119, 48, 1, 255, 115, 48, 1, 255, 112, 48, 2, 255, 105, 43, 1, 255, 89, 30, 0, 255, 81, 26, 3, 255, 79, 32, 4, 255, 91, 35, 2, 255, 100, 40, 3, 255, 96, 36, 1, 255, 96, 34, 5, 255, 88, 31, 2, 255, 90, 30, 2, 255, 83, 26, 3, 255, 69, 24, 4, 255, 69, 22, 2, 255, 77, 22, 1, 255, 79, 23, 3, 255, 73, 23, 5, 255, 74, 24, 2, 255, 74, 21, 3, 255, 76, 25, 4, 255, 89, 28, 2, 255, 103, 27, 1, 255, 102, 29, 0, 255, 108, 30, 2, 255, 110, 30, 4, 255, 108, 30, 4, 255, 101, 27, 1, 255, 99, 27, 1, 255, 103, 29, 3, 255, 100, 25, 0, 255, 95, 28, 0, 255, 93, 31, 2, 255, 93, 28, 4, 255, 86, 26, 3, 255, 80, 25, 2, 255, 82, 22, 2, 255, 81, 23, 5, 255, 80, 22, 3, 255, 82, 22, 2, 255, 82, 23, 2, 255, 76, 21, 1, 255, 68, 19, 4, 255, 62, 21, 3, 255, 69, 20, 0, 255, 85, 26, 2, 255, 84, 26, 1, 255, 75, 22, 4, 255, 66, 17, 5, 255, 66, 22, 2, 255, 73, 27, 4, 255, 79, 23, 1, 255, 76, 21, 1, 255, 73, 23, 3, 255, 74, 18, 1, 255, 85, 22, 3, 255, 71, 18, 4, 255, 63, 14, 1, 255, 68, 20, 4, 255, 72, 24, 5, 255, 78, 24, 5, 255, 75, 21, 2, 255, 85, 23, 3, 255, 102, 28, 4, 255, 119, 43, 5, 255, 130, 51, 1, 255, 135, 54, 1, 255, 136, 57, 2, 255, 134, 56, 2, 255, 132, 55, 1, 255, 135, 56, 1, 255, 138, 58, 2, 255, 137, 57, 1, 255, 139, 58, 3, 255, 139, 59, 4, 255, 139, 59, 3, 255, 138, 57, 1, 255, 140, 59, 0, 255, 146, 63, 4, 255, 145, 60, 3, 255, 143, 58, 0, 255, 145, 62, 1, 255, 145, 59, 6, 255, 135, 48, 3, 255, 120, 40, 2, 255, 26, 24, 11, 255, 26, 28, 6, 255, 31, 37, 11, 255, 35, 39, 17, 255, 39, 42, 19, 255, 41, 50, 13, 255, 40, 52, 9, 255, 44, 57, 7, 255, 45, 57, 10, 255, 45, 59, 17, 255, 45, 64, 10, 255, 48, 63, 9, 255, 48, 58, 16, 255, 47, 61, 11, 255, 45, 61, 7, 255, 44, 61, 15, 255, 42, 53, 16, 255, 40, 44, 12, 255, 47, 42, 16, 255, 43, 42, 5, 255, 36, 40, 4, 255, 30, 30, 2, 255, 34, 26, 3, 255, 37, 24, 5, 255, 32, 25, 7, 255, 26, 22, 5, 255, 24, 19, 2, 255, 27, 18, 2, 255, 27, 15, 3, 255, 30, 16, 4, 255, 30, 15, 4, 255, 31, 16, 5, 255, 38, 19, 3, 255, 40, 24, 1, 255, 39, 22, 2, 255, 43, 30, 10, 255, 51, 36, 26, 255, 53, 37, 21, 255, 48, 33, 11, 255, 50, 34, 3, 255, 60, 35, 5, 255, 53, 28, 3, 255, 46, 23, 3, 255, 51, 25, 3, 255, 51, 28, 0, 255, 51, 45, 22, 255, 55, 51, 38, 255, 56, 48, 31, 255, 62, 59, 50, 255, 64, 61, 52, 255, 66, 58, 45, 255, 69, 66, 39, 255, 73, 59, 37, 255, 74, 53, 26, 255, 76, 56, 30, 255, 83, 60, 19, 255, 82, 48, 8, 255, 73, 36, 8, 255, 68, 41, 16, 255, 66, 51, 11, 255, 73, 48, 7, 255, 81, 44, 3, 255, 82, 44, 5, 255, 76, 42, 6, 255, 76, 39, 6, 255, 72, 31, 3, 255, 74, 30, 2, 255, 79, 33, 3, 255, 79, 34, 1, 255, 81, 36, 4, 255, 78, 38, 3, 255, 74, 37, 1, 255, 75, 35, 0, 255, 78, 35, 1, 255, 81, 37, 2, 255, 84, 39, 5, 255, 79, 35, 0, 255, 84, 40, 2, 255, 89, 37, 3, 255, 84, 42, 4, 255, 78, 40, 1, 255, 82, 38, 0, 255, 84, 43, 3, 255, 82, 43, 2, 255, 86, 44, 3, 255, 91, 45, 4, 255, 92, 44, 3, 255, 95, 47, 6, 255, 93, 46, 5, 255, 100, 49, 4, 255, 110, 54, 6, 255, 102, 49, 2, 255, 104, 46, 3, 255, 113, 48, 3, 255, 112, 51, 0, 255, 99, 45, 2, 255, 103, 42, 3, 255, 114, 48, 1, 255, 120, 56, 5, 255, 105, 49, 3, 255, 98, 43, 0, 255, 120, 50, 3, 255, 134, 54, 6, 255, 126, 50, 9, 255, 112, 40, 9, 255, 103, 36, 5, 255, 111, 42, 3, 255, 129, 51, 4, 255, 134, 52, 2, 255, 131, 54, 3, 255, 133, 52, 3, 255, 128, 50, 3, 255, 120, 51, 3, 255, 132, 49, 4, 255, 138, 51, 2, 255, 133, 55, 2, 255, 134, 59, 5, 255, 129, 55, 3, 255, 130, 53, 7, 255, 122, 53, 6, 255, 127, 55, 3, 255, 136, 50, 2, 255, 133, 54, 2, 255, 134, 52, 2, 255, 131, 54, 6, 255, 131, 54, 1, 255, 128, 51, 2, 255, 130, 55, 1, 255, 139, 57, 2, 255, 136, 57, 0, 255, 135, 59, 2, 255, 129, 58, 6, 255, 114, 48, 0, 255, 117, 46, 2, 255, 136, 60, 6, 255, 140, 57, 1, 255, 136, 60, 7, 255, 124, 58, 8, 255, 117, 51, 5, 255, 105, 50, 5, 255, 101, 50, 5, 255, 138, 60, 5, 255, 152, 57, 4, 255, 134, 55, 4, 255, 135, 56, 5, 255, 123, 58, 5, 255, 110, 55, 3, 255, 104, 55, 11, 255, 106, 50, 9, 255, 121, 54, 4, 255, 128, 67, 1, 255, 137, 67, 4, 255, 132, 59, 7, 255, 129, 61, 10, 255, 128, 59, 5, 255, 109, 60, 3, 255, 125, 63, 9, 255, 128, 60, 4, 255, 139, 69, 1, 255, 144, 66, 4, 255, 145, 68, 6, 255, 148, 66, 5, 255, 141, 66, 6, 255, 140, 68, 9, 255, 142, 66, 10, 255, 139, 65, 0, 255, 143, 63, 14, 255, 147, 67, 5, 255, 149, 69, 3, 255, 147, 71, 2, 255, 146, 68, 8, 255, 155, 73, 11, 255, 158, 72, 8, 255, 152, 74, 4, 255, 157, 75, 13, 255, 159, 73, 13, 255, 150, 70, 9, 255, 147, 71, 13, 255, 146, 70, 12, 255, 148, 70, 18, 255, 150, 74, 15, 255, 150, 76, 8, 255, 154, 79, 14, 255, 161, 83, 14, 255, 165, 83, 10, 255, 165, 77, 13, 255, 154, 73, 12, 255, 142, 77, 22, 255, 148, 81, 17, 255, 167, 88, 12, 255, 176, 93, 12, 255, 172, 94, 12, 255, 180, 89, 13, 255, 180, 92, 16, 255, 174, 93, 9, 255, 174, 93, 16, 255, 179, 94, 20, 255, 181, 94, 16, 255, 183, 97, 15, 255, 183, 100, 17, 255, 181, 98, 19, 255, 178, 93, 18, 255, 179, 96, 15, 255, 178, 99, 11, 255, 178, 102, 17, 255, 183, 100, 19, 255, 190, 104, 11, 255, 194, 108, 17, 255, 187, 109, 14, 255, 183, 107, 16, 255, 180, 103, 6, 255, 172, 100, 7, 255, 171, 93, 19, 255, 166, 96, 11, 255, 157, 95, 15, 255, 156, 90, 15, 255, 151, 91, 12, 255, 140, 92, 8, 255, 136, 88, 22, 255, 121, 80, 23, 255, 104, 74, 12, 255, 106, 80, 11, 255, 109, 86, 8, 255, 94, 80, 16, 255, 82, 74, 25, 255, 90, 80, 11, 255, 90, 74, 12, 255, 93, 79, 14, 255, 88, 77, 14, 255, 88, 75, 15, 255, 94, 76, 10, 255, 92, 72, 15, 255, 91, 74, 10, 255, 91, 75, 9, 255, 90, 72, 21, 255, 94, 73, 10, 255, 92, 71, 6, 255, 95, 74, 7, 255, 97, 74, 6, 255, 97, 72, 8, 255, 96, 73, 9, 255, 97, 73, 9, 255, 99, 71, 14, 255, 99, 69, 15, 255, 100, 70, 8, 255, 110, 73, 3, 255, 115, 72, 7, 255, 110, 68, 10, 255, 116, 66, 8, 255, 123, 72, 10, 255, 110, 66, 6, 255, 110, 63, 14, 255, 101, 65, 8, 255, 101, 63, 0, 255, 119, 69, 5, 255, 110, 68, 4, 255, 112, 63, 7, 255, 115, 71, 5, 255, 126, 92, 16, 255, 157, 111, 12, 255, 184, 138, 3, 255, 186, 143, 2, 255, 184, 134, 5, 255, 183, 137, 1, 255, 191, 145, 8, 255, 186, 141, 0, 255, 178, 129, 4, 255, 177, 125, 2, 255, 174, 121, 2, 255, 172, 119, 2, 255, 170, 118, 4, 255, 167, 116, 5, 255, 167, 114, 5, 255, 166, 111, 4, 255, 166, 109, 2, 255, 165, 111, 3, 255, 168, 115, 2, 255, 171, 115, 5, 255, 165, 107, 5, 255, 163, 107, 3, 255, 165, 108, 2, 255, 169, 109, 4, 255, 170, 107, 4, 255, 169, 104, 5, 255, 166, 98, 4, 255, 161, 91, 3, 255, 152, 82, 1, 255, 146, 78, 2, 255, 147, 79, 2, 255, 152, 85, 4, 255, 155, 85, 3, 255, 155, 84, 1, 255, 152, 79, 0, 255, 146, 75, 3, 255, 144, 76, 5, 255, 145, 79, 2, 255, 146, 77, 4, 255, 145, 75, 5, 255, 144, 75, 3, 255, 140, 72, 6, 255, 136, 70, 3, 255, 137, 69, 1, 255, 142, 69, 2, 255, 147, 70, 4, 255, 145, 71, 5, 255, 140, 71, 3, 255, 135, 69, 2, 255, 139, 66, 4, 255, 141, 68, 8, 255, 134, 63, 4, 255, 132, 61, 3, 255, 130, 58, 1, 255, 126, 57, 0, 255, 126, 54, 4, 255, 118, 43, 2, 255, 117, 49, 0, 255, 110, 46, 0, 255, 101, 37, 3, 255, 91, 34, 5, 255, 88, 35, 5, 255, 84, 35, 3, 255, 95, 36, 1, 255, 99, 39, 2, 255, 93, 33, 0, 255, 93, 29, 3, 255, 86, 27, 2, 255, 93, 30, 5, 255, 79, 27, 4, 255, 65, 23, 0, 255, 77, 23, 5, 255, 79, 23, 4, 255, 71, 24, 1, 255, 67, 25, 3, 255, 69, 20, 3, 255, 77, 20, 3, 255, 74, 17, 1, 255, 95, 27, 3, 255, 117, 31, 3, 255, 111, 31, 3, 255, 114, 31, 3, 255, 114, 30, 3, 255, 110, 31, 4, 255, 106, 31, 5, 255, 101, 26, 1, 255, 102, 27, 0, 255, 103, 27, 1, 255, 106, 28, 0, 255, 103, 28, 0, 255, 98, 28, 1, 255, 98, 28, 2, 255, 99, 27, 3, 255, 95, 24, 2, 255, 93, 24, 2, 255, 91, 21, 0, 255, 92, 21, 1, 255, 97, 25, 3, 255, 91, 23, 1, 255, 84, 22, 3, 255, 68, 21, 3, 255, 65, 18, 6, 255, 80, 24, 3, 255, 89, 26, 0, 255, 87, 26, 1, 255, 79, 20, 1, 255, 78, 21, 4, 255, 75, 19, 2, 255, 79, 23, 3, 255, 70, 21, 0, 255, 73, 21, 8, 255, 78, 17, 8, 255, 70, 16, 1, 255, 56, 15, 3, 255, 59, 15, 2, 255, 69, 17, 1, 255, 75, 22, 0, 255, 77, 24, 1, 255, 77, 20, 2, 255, 82, 22, 6, 255, 84, 21, 1, 255, 98, 30, 2, 255, 113, 38, 3, 255, 119, 41, 1, 255, 129, 51, 2, 255, 133, 55, 1, 255, 133, 56, 2, 255, 138, 58, 3, 255, 137, 58, 1, 255, 137, 58, 1, 255, 135, 59, 1, 255, 132, 59, 2, 255, 136, 58, 1, 255, 138, 57, 1, 255, 139, 59, 1, 255, 143, 61, 4, 255, 143, 61, 5, 255, 141, 60, 3, 255, 141, 61, 1, 255, 145, 61, 2, 255, 139, 53, 1, 255, 131, 51, 1, 255, 28, 26, 15, 255, 32, 37, 17, 255, 32, 38, 16, 255, 38, 42, 18, 255, 43, 50, 20, 255, 38, 56, 17, 255, 40, 61, 15, 255, 39, 55, 14, 255, 46, 57, 20, 255, 44, 62, 15, 255, 40, 62, 9, 255, 48, 63, 17, 255, 46, 56, 12, 255, 45, 59, 12, 255, 43, 55, 9, 255, 43, 53, 2, 255, 44, 51, 2, 255, 44, 45, 6, 255, 41, 37, 8, 255, 33, 34, 4, 255, 27, 27, 1, 255, 35, 28, 5, 255, 36, 24, 5, 255, 37, 22, 3, 255, 37, 21, 2, 255, 38, 22, 5, 255, 30, 17, 3, 255, 26, 20, 5, 255, 25, 17, 4, 255, 29, 14, 4, 255, 28, 14, 3, 255, 23, 18, 2, 255, 33, 20, 4, 255, 39, 24, 1, 255, 40, 24, 0, 255, 40, 27, 4, 255, 45, 31, 13, 255, 50, 36, 11, 255, 48, 36, 15, 255, 52, 38, 13, 255, 59, 36, 4, 255, 55, 32, 6, 255, 42, 22, 5, 255, 49, 22, 6, 255, 57, 26, 3, 255, 53, 39, 15, 255, 56, 52, 29, 255, 62, 53, 21, 255, 69, 56, 47, 255, 71, 60, 54, 255, 66, 60, 40, 255, 70, 68, 52, 255, 72, 60, 46, 255, 72, 53, 37, 255, 76, 55, 39, 255, 80, 50, 21, 255, 79, 45, 6, 255, 70, 40, 6, 255, 67, 40, 13, 255, 72, 48, 13, 255, 75, 47, 7, 255, 76, 45, 4, 255, 78, 42, 4, 255, 77, 35, 2, 255, 82, 38, 4, 255, 77, 32, 2, 255, 77, 30, 2, 255, 79, 31, 1, 255, 81, 36, 1, 255, 85, 39, 2, 255, 80, 37, 1, 255, 80, 38, 4, 255, 79, 36, 1, 255, 80, 36, 1, 255, 83, 37, 3, 255, 89, 40, 5, 255, 84, 36, 0, 255, 84, 38, 3, 255, 84, 38, 2, 255, 86, 41, 2, 255, 86, 40, 2, 255, 88, 42, 3, 255, 84, 41, 1, 255, 89, 41, 5, 255, 93, 44, 6, 255, 94, 47, 2, 255, 99, 48, 1, 255, 105, 49, 2, 255, 108, 48, 3, 255, 115, 48, 1, 255, 126, 51, 3, 255, 122, 52, 5, 255, 112, 48, 1, 255, 109, 46, 2, 255, 121, 52, 2, 255, 130, 49, 4, 255, 120, 47, 4, 255, 128, 53, 3, 255, 131, 58, 4, 255, 125, 47, 1, 255, 120, 48, 3, 255, 121, 48, 2, 255, 128, 44, 1, 255, 136, 51, 3, 255, 136, 54, 4, 255, 130, 53, 4, 255, 128, 51, 4, 255, 127, 49, 1, 255, 132, 50, 2, 255, 139, 54, 1, 255, 138, 54, 1, 255, 141, 54, 9, 255, 132, 51, 0, 255, 131, 48, 4, 255, 131, 50, 5, 255, 130, 50, 5, 255, 139, 55, 3, 255, 146, 61, 3, 255, 144, 57, 3, 255, 135, 53, 3, 255, 132, 55, 2, 255, 137, 54, 4, 255, 141, 52, 5, 255, 146, 55, 2, 255, 140, 63, 3, 255, 141, 62, 3, 255, 141, 56, 4, 255, 139, 58, 3, 255, 138, 59, 3, 255, 149, 61, 3, 255, 150, 62, 2, 255, 142, 60, 1, 255, 140, 58, 4, 255, 138, 57, 1, 255, 135, 57, 3, 255, 129, 49, 6, 255, 127, 55, 9, 255, 131, 57, 2, 255, 140, 58, 3, 255, 133, 59, 6, 255, 131, 60, 9, 255, 133, 55, 3, 255, 131, 55, 9, 255, 135, 57, 8, 255, 145, 61, 1, 255, 142, 65, 5, 255, 148, 66, 4, 255, 135, 58, 3, 255, 132, 57, 6, 255, 136, 64, 4, 255, 139, 66, 4, 255, 146, 63, 5, 255, 148, 68, 3, 255, 151, 65, 0, 255, 147, 67, 7, 255, 147, 63, 7, 255, 141, 60, 3, 255, 132, 62, 2, 255, 133, 58, 5, 255, 147, 58, 5, 255, 146, 61, 2, 255, 138, 57, 2, 255, 134, 60, 5, 255, 138, 61, 8, 255, 144, 68, 9, 255, 148, 69, 5, 255, 158, 69, 11, 255, 157, 68, 5, 255, 160, 71, 10, 255, 156, 70, 13, 255, 151, 71, 0, 255, 151, 73, 5, 255, 152, 74, 6, 255, 150, 73, 4, 255, 154, 76, 3, 255, 152, 70, 2, 255, 150, 70, 4, 255, 152, 76, 8, 255, 159, 79, 11, 255, 154, 77, 7, 255, 156, 79, 17, 255, 160, 81, 17, 255, 163, 83, 14, 255, 168, 87, 9, 255, 170, 89, 5, 255, 168, 85, 12, 255, 164, 81, 18, 255, 168, 85, 16, 255, 168, 90, 19, 255, 170, 93, 23, 255, 173, 92, 12, 255, 178, 89, 20, 255, 178, 91, 19, 255, 177, 89, 14, 255, 178, 93, 13, 255, 175, 98, 15, 255, 171, 95, 15, 255, 177, 96, 13, 255, 181, 96, 13, 255, 172, 90, 13, 255, 170, 92, 14, 255, 175, 96, 12, 255, 181, 101, 13, 255, 184, 103, 16, 255, 184, 105, 15, 255, 186, 102, 14, 255, 185, 105, 11, 255, 181, 102, 14, 255, 174, 97, 20, 255, 168, 95, 15, 255, 165, 92, 22, 255, 163, 96, 19, 255, 160, 92, 16, 255, 151, 92, 21, 255, 145, 90, 21, 255, 146, 89, 14, 255, 121, 83, 18, 255, 93, 77, 24, 255, 97, 81, 20, 255, 104, 87, 11, 255, 92, 78, 19, 255, 87, 74, 23, 255, 92, 81, 4, 255, 89, 81, 4, 255, 90, 74, 21, 255, 87, 77, 18, 255, 83, 76, 17, 255, 89, 81, 10, 255, 91, 74, 20, 255, 93, 73, 24, 255, 95, 76, 6, 255, 94, 79, 2, 255, 100, 79, 11, 255, 99, 77, 14, 255, 93, 74, 11, 255, 98, 74, 8, 255, 93, 74, 6, 255, 99, 71, 14, 255, 102, 71, 16, 255, 101, 71, 9, 255, 102, 75, 9, 255, 99, 72, 5, 255, 103, 72, 2, 255, 105, 74, 10, 255, 93, 72, 8, 255, 92, 71, 4, 255, 99, 69, 8, 255, 101, 68, 9, 255, 101, 67, 3, 255, 112, 71, 8, 255, 118, 68, 8, 255, 109, 63, 6, 255, 102, 67, 6, 255, 104, 65, 12, 255, 107, 59, 9, 255, 117, 66, 9, 255, 119, 69, 7, 255, 114, 65, 9, 255, 119, 73, 16, 255, 142, 89, 13, 255, 163, 114, 6, 255, 173, 131, 9, 255, 177, 128, 7, 255, 178, 127, 4, 255, 183, 135, 7, 255, 180, 132, 5, 255, 182, 133, 6, 255, 178, 129, 1, 255, 180, 128, 3, 255, 170, 113, 8, 255, 169, 112, 5, 255, 167, 110, 3, 255, 165, 110, 4, 255, 162, 106, 5, 255, 162, 105, 9, 255, 167, 106, 9, 255, 173, 109, 6, 255, 169, 102, 1, 255, 163, 95, 4, 255, 160, 93, 2, 255, 161, 93, 2, 255, 162, 95, 3, 255, 162, 98, 5, 255, 161, 94, 5, 255, 159, 89, 2, 255, 156, 85, 2, 255, 150, 81, 3, 255, 145, 78, 4, 255, 147, 83, 6, 255, 156, 89, 10, 255, 157, 89, 6, 255, 157, 86, 2, 255, 154, 82, 3, 255, 144, 73, 1, 255, 138, 70, 2, 255, 139, 73, 1, 255, 142, 75, 2, 255, 140, 69, 8, 255, 135, 65, 5, 255, 134, 68, 4, 255, 136, 73, 1, 255, 138, 71, 1, 255, 141, 71, 4, 255, 138, 67, 3, 255, 134, 66, 3, 255, 129, 65, 1, 255, 131, 67, 3, 255, 136, 70, 6, 255, 134, 68, 4, 255, 127, 59, 1, 255, 131, 60, 4, 255, 135, 61, 3, 255, 132, 60, 1, 255, 128, 56, 2, 255, 126, 50, 2, 255, 120, 52, 0, 255, 115, 49, 3, 255, 104, 39, 1, 255, 98, 37, 3, 255, 89, 32, 2, 255, 89, 34, 2, 255, 100, 37, 3, 255, 99, 37, 1, 255, 95, 36, 5, 255, 84, 25, 2, 255, 81, 27, 4, 255, 81, 26, 5, 255, 74, 23, 1, 255, 72, 25, 2, 255, 74, 25, 4, 255, 72, 22, 3, 255, 73, 24, 2, 255, 72, 25, 0, 255, 73, 26, 2, 255, 72, 24, 6, 255, 85, 28, 4, 255, 105, 36, 7, 255, 107, 30, 4, 255, 110, 31, 3, 255, 117, 32, 1, 255, 113, 30, 1, 255, 106, 29, 1, 255, 106, 30, 6, 255, 102, 26, 2, 255, 103, 25, 2, 255, 106, 28, 5, 255, 109, 30, 5, 255, 104, 27, 3, 255, 101, 26, 3, 255, 99, 24, 0, 255, 102, 22, 1, 255, 103, 23, 2, 255, 102, 28, 3, 255, 98, 27, 2, 255, 98, 24, 3, 255, 101, 23, 2, 255, 102, 25, 3, 255, 97, 24, 5, 255, 78, 24, 6, 255, 52, 11, 4, 255, 65, 21, 4, 255, 85, 24, 5, 255, 83, 21, 1, 255, 79, 22, 1, 255, 81, 21, 2, 255, 79, 20, 4, 255, 73, 18, 2, 255, 79, 22, 5, 255, 78, 23, 3, 255, 68, 25, 2, 255, 69, 21, 2, 255, 61, 15, 2, 255, 64, 21, 5, 255, 65, 18, 1, 255, 73, 23, 2, 255, 75, 22, 0, 255, 77, 22, 2, 255, 76, 21, 4, 255, 80, 22, 2, 255, 88, 27, 4, 255, 95, 28, 2, 255, 101, 30, 1, 255, 114, 41, 3, 255, 124, 50, 3, 255, 130, 54, 1, 255, 135, 57, 4, 255, 136, 57, 0, 255, 134, 55, 0, 255, 132, 56, 0, 255, 129, 56, 1, 255, 134, 57, 3, 255, 139, 60, 3, 255, 138, 62, 2, 255, 137, 61, 0, 255, 140, 60, 2, 255, 140, 60, 3, 255, 138, 60, 0, 255, 138, 62, 2, 255, 140, 59, 3, 255, 137, 58, 3, 255, 32, 35, 7, 255, 28, 37, 16, 255, 34, 46, 18, 255, 41, 53, 13, 255, 44, 57, 9, 255, 44, 62, 18, 255, 39, 61, 19, 255, 42, 64, 9, 255, 50, 68, 12, 255, 44, 63, 14, 255, 43, 64, 11, 255, 47, 64, 11, 255, 48, 59, 14, 255, 44, 56, 12, 255, 40, 47, 9, 255, 40, 43, 6, 255, 44, 43, 12, 255, 42, 36, 8, 255, 39, 36, 4, 255, 32, 28, 1, 255, 30, 20, 2, 255, 34, 25, 6, 255, 25, 22, 2, 255, 25, 23, 3, 255, 24, 17, 1, 255, 27, 18, 2, 255, 27, 20, 1, 255, 27, 22, 4, 255, 29, 19, 5, 255, 32, 14, 2, 255, 33, 18, 2, 255, 31, 20, 3, 255, 28, 20, 6, 255, 30, 16, 5, 255, 36, 18, 3, 255, 43, 24, 8, 255, 51, 32, 9, 255, 56, 35, 15, 255, 48, 38, 19, 255, 47, 35, 17, 255, 50, 35, 3, 255, 53, 36, 5, 255, 45, 25, 3, 255, 47, 22, 1, 255, 60, 28, 3, 255, 63, 33, 18, 255, 77, 55, 26, 255, 76, 55, 19, 255, 65, 54, 41, 255, 67, 59, 51, 255, 70, 63, 44, 255, 70, 65, 45, 255, 77, 63, 38, 255, 82, 61, 26, 255, 79, 53, 28, 255, 73, 45, 17, 255, 80, 44, 11, 255, 77, 45, 10, 255, 68, 43, 15, 255, 72, 45, 19, 255, 72, 49, 10, 255, 72, 46, 1, 255, 72, 42, 2, 255, 67, 36, 5, 255, 71, 40, 4, 255, 73, 35, 1, 255, 80, 34, 4, 255, 81, 35, 2, 255, 79, 38, 1, 255, 81, 40, 2, 255, 80, 36, 1, 255, 79, 35, 2, 255, 82, 36, 3, 255, 83, 38, 4, 255, 80, 37, 3, 255, 83, 38, 2, 255, 87, 39, 4, 255, 88, 39, 6, 255, 81, 40, 2, 255, 87, 42, 2, 255, 92, 40, 2, 255, 91, 41, 0, 255, 94, 45, 3, 255, 100, 48, 7, 255, 104, 44, 4, 255, 111, 46, 2, 255, 118, 48, 1, 255, 123, 50, 0, 255, 127, 49, 3, 255, 120, 48, 3, 255, 118, 43, 1, 255, 130, 42, 1, 255, 134, 50, 4, 255, 124, 48, 7, 255, 123, 46, 4, 255, 129, 51, 2, 255, 130, 53, 2, 255, 131, 48, 3, 255, 126, 45, 1, 255, 135, 50, 4, 255, 133, 49, 1, 255, 123, 49, 3, 255, 124, 49, 3, 255, 130, 50, 1, 255, 133, 46, 1, 255, 127, 42, 3, 255, 116, 40, 3, 255, 117, 43, 4, 255, 120, 46, 3, 255, 115, 43, 3, 255, 117, 43, 6, 255, 120, 42, 5, 255, 120, 45, 1, 255, 119, 46, 4, 255, 121, 42, 5, 255, 121, 41, 9, 255, 117, 43, 4, 255, 132, 51, 5, 255, 135, 48, 2, 255, 136, 54, 1, 255, 138, 56, 3, 255, 136, 54, 2, 255, 138, 52, 0, 255, 143, 53, 1, 255, 140, 53, 2, 255, 142, 55, 4, 255, 143, 57, 1, 255, 137, 56, 2, 255, 141, 56, 2, 255, 140, 58, 0, 255, 147, 60, 4, 255, 142, 54, 2, 255, 135, 55, 3, 255, 135, 54, 2, 255, 141, 56, 0, 255, 139, 55, 7, 255, 134, 55, 7, 255, 142, 58, 0, 255, 149, 61, 5, 255, 141, 58, 6, 255, 135, 55, 4, 255, 125, 50, 7, 255, 136, 57, 4, 255, 131, 55, 3, 255, 126, 58, 4, 255, 139, 62, 4, 255, 154, 62, 0, 255, 154, 63, 6, 255, 139, 60, 3, 255, 127, 54, 9, 255, 133, 55, 12, 255, 141, 59, 8, 255, 141, 61, 8, 255, 141, 56, 5, 255, 139, 59, 6, 255, 145, 60, 9, 255, 138, 59, 9, 255, 133, 58, 10, 255, 143, 66, 12, 255, 146, 67, 5, 255, 151, 66, 11, 255, 152, 65, 6, 255, 149, 67, 4, 255, 145, 66, 3, 255, 155, 72, 8, 255, 156, 70, 3, 255, 160, 69, 10, 255, 156, 70, 14, 255, 153, 69, 3, 255, 152, 67, 7, 255, 156, 71, 6, 255, 151, 68, 7, 255, 151, 72, 8, 255, 153, 72, 12, 255, 161, 74, 10, 255, 158, 76, 8, 255, 153, 75, 12, 255, 150, 71, 15, 255, 149, 74, 11, 255, 145, 73, 11, 255, 147, 72, 18, 255, 159, 80, 14, 255, 171, 85, 12, 255, 170, 84, 13, 255, 170, 86, 14, 255, 170, 85, 20, 255, 170, 87, 12, 255, 175, 90, 5, 255, 174, 86, 15, 255, 175, 92, 9, 255, 176, 97, 9, 255, 177, 93, 16, 255, 178, 93, 15, 255, 177, 95, 15, 255, 173, 96, 18, 255, 170, 92, 18, 255, 166, 88, 18, 255, 167, 88, 24, 255, 176, 94, 20, 255, 178, 98, 22, 255, 181, 102, 20, 255, 176, 102, 13, 255, 181, 102, 15, 255, 183, 103, 14, 255, 178, 98, 18, 255, 174, 99, 16, 255, 170, 103, 13, 255, 169, 101, 13, 255, 169, 97, 12, 255, 163, 95, 3, 255, 153, 88, 23, 255, 142, 88, 14, 255, 124, 84, 7, 255, 103, 78, 29, 255, 96, 79, 19, 255, 106, 82, 12, 255, 99, 81, 25, 255, 79, 77, 22, 255, 84, 78, 18, 255, 93, 80, 10, 255, 91, 82, 20, 255, 86, 79, 23, 255, 88, 79, 19, 255, 88, 77, 12, 255, 88, 78, 18, 255, 89, 76, 10, 255, 92, 74, 15, 255, 88, 78, 14, 255, 82, 75, 14, 255, 91, 70, 20, 255, 92, 75, 19, 255, 89, 78, 18, 255, 102, 80, 10, 255, 102, 73, 15, 255, 98, 71, 8, 255, 106, 77, 1, 255, 102, 74, 4, 255, 103, 75, 12, 255, 104, 73, 13, 255, 102, 73, 10, 255, 96, 70, 8, 255, 97, 70, 12, 255, 102, 71, 11, 255, 103, 71, 8, 255, 96, 72, 6, 255, 101, 74, 12, 255, 101, 70, 6, 255, 102, 70, 4, 255, 105, 66, 7, 255, 115, 72, 7, 255, 129, 71, 6, 255, 127, 70, 9, 255, 116, 71, 13, 255, 126, 71, 12, 255, 126, 68, 6, 255, 115, 64, 4, 255, 112, 66, 0, 255, 124, 78, 6, 255, 114, 63, 4, 255, 102, 63, 6, 255, 121, 79, 3, 255, 158, 110, 6, 255, 179, 129, 11, 255, 168, 113, 7, 255, 171, 120, 8, 255, 175, 127, 12, 255, 174, 123, 7, 255, 179, 124, 7, 255, 157, 100, 8, 255, 146, 87, 8, 255, 154, 98, 10, 255, 156, 103, 7, 255, 156, 104, 6, 255, 152, 99, 3, 255, 149, 100, 2, 255, 153, 100, 6, 255, 159, 101, 3, 255, 158, 96, 3, 255, 152, 90, 4, 255, 147, 87, 3, 255, 152, 90, 6, 255, 151, 88, 2, 255, 154, 89, 4, 255, 154, 87, 7, 255, 152, 84, 4, 255, 146, 79, 0, 255, 145, 80, 1, 255, 144, 80, 4, 255, 147, 80, 4, 255, 145, 78, 0, 255, 146, 79, 0, 255, 152, 79, 2, 255, 147, 76, 1, 255, 139, 72, 1, 255, 138, 68, 4, 255, 130, 61, 3, 255, 125, 61, 7, 255, 125, 66, 5, 255, 130, 69, 3, 255, 135, 68, 3, 255, 140, 70, 2, 255, 137, 68, 4, 255, 135, 65, 1, 255, 132, 66, 2, 255, 130, 67, 6, 255, 126, 63, 3, 255, 130, 65, 4, 255, 130, 63, 1, 255, 134, 66, 3, 255, 134, 64, 2, 255, 136, 65, 3, 255, 131, 61, 2, 255, 128, 60, 1, 255, 131, 60, 2, 255, 130, 58, 2, 255, 126, 57, 5, 255, 119, 51, 4, 255, 111, 46, 1, 255, 103, 42, 0, 255, 93, 33, 0, 255, 88, 32, 1, 255, 97, 37, 3, 255, 96, 37, 2, 255, 90, 31, 2, 255, 86, 25, 4, 255, 80, 26, 7, 255, 69, 25, 2, 255, 86, 30, 4, 255, 83, 26, 0, 255, 72, 27, 5, 255, 65, 20, 3, 255, 73, 18, 2, 255, 80, 25, 1, 255, 83, 29, 3, 255, 79, 27, 0, 255, 95, 27, 3, 255, 106, 30, 3, 255, 105, 32, 0, 255, 116, 34, 6, 255, 120, 36, 3, 255, 116, 36, 2, 255, 107, 28, 0, 255, 103, 27, 2, 255, 105, 28, 4, 255, 106, 25, 2, 255, 105, 25, 1, 255, 103, 28, 2, 255, 103, 31, 2, 255, 105, 31, 2, 255, 101, 28, 0, 255, 102, 29, 1, 255, 103, 26, 1, 255, 95, 21, 0, 255, 97, 24, 3, 255, 100, 26, 5, 255, 99, 22, 2, 255, 97, 20, 0, 255, 95, 21, 2, 255, 85, 20, 1, 255, 68, 20, 4, 255, 66, 22, 0, 255, 79, 18, 2, 255, 79, 18, 4, 255, 73, 20, 1, 255, 82, 25, 0, 255, 82, 24, 1, 255, 78, 24, 4, 255, 77, 22, 2, 255, 82, 24, 1, 255, 80, 25, 3, 255, 69, 20, 6, 255, 70, 18, 3, 255, 74, 21, 7, 255, 68, 17, 2, 255, 78, 22, 6, 255, 79, 21, 3, 255, 75, 22, 1, 255, 74, 22, 1, 255, 81, 23, 2, 255, 85, 25, 0, 255, 93, 29, 1, 255, 101, 33, 5, 255, 101, 31, 1, 255, 106, 34, 3, 255, 122, 49, 1, 255, 131, 53, 3, 255, 137, 56, 2, 255, 135, 55, 2, 255, 134, 54, 2, 255, 133, 55, 1, 255, 134, 56, 2, 255, 134, 57, 2, 255, 136, 61, 2, 255, 137, 61, 0, 255, 140, 59, 1, 255, 141, 60, 2, 255, 140, 60, 0, 255, 140, 60, 1, 255, 141, 59, 2, 255, 140, 58, 2, 255, 34, 47, 7, 255, 37, 47, 13, 255, 40, 52, 16, 255, 36, 54, 13, 255, 44, 65, 12, 255, 50, 64, 19, 255, 48, 62, 21, 255, 50, 70, 11, 255, 49, 69, 4, 255, 47, 64, 11, 255, 49, 61, 14, 255, 49, 59, 8, 255, 43, 54, 6, 255, 38, 49, 13, 255, 41, 44, 8, 255, 38, 38, 6, 255, 40, 34, 9, 255, 39, 25, 5, 255, 38, 27, 5, 255, 33, 26, 6, 255, 32, 23, 8, 255, 31, 20, 7, 255, 29, 16, 2, 255, 28, 17, 1, 255, 23, 16, 4, 255, 26, 18, 5, 255, 29, 15, 1, 255, 34, 17, 4, 255, 35, 18, 5, 255, 36, 16, 5, 255, 32, 14, 3, 255, 26, 20, 5, 255, 25, 20, 3, 255, 31, 17, 0, 255, 27, 15, 3, 255, 32, 23, 3, 255, 44, 31, 12, 255, 49, 34, 15, 255, 49, 42, 8, 255, 52, 38, 12, 255, 53, 33, 14, 255, 61, 32, 7, 255, 61, 30, 4, 255, 47, 27, 3, 255, 45, 23, 0, 255, 57, 36, 12, 255, 73, 52, 30, 255, 74, 46, 29, 255, 67, 56, 38, 255, 66, 61, 45, 255, 71, 66, 43, 255, 74, 62, 49, 255, 75, 60, 47, 255, 78, 65, 32, 255, 77, 54, 23, 255, 67, 50, 8, 255, 71, 51, 5, 255, 72, 46, 12, 255, 73, 40, 13, 255, 75, 47, 10, 255, 75, 52, 13, 255, 77, 44, 1, 255, 73, 36, 3, 255, 71, 37, 6, 255, 71, 37, 6, 255, 76, 38, 6, 255, 74, 39, 2, 255, 78, 39, 0, 255, 80, 38, 0, 255, 83, 38, 1, 255, 86, 35, 0, 255, 89, 38, 1, 255, 88, 41, 3, 255, 84, 39, 1, 255, 83, 39, 2, 255, 80, 37, 2, 255, 82, 41, 3, 255, 85, 42, 4, 255, 88, 44, 1, 255, 95, 44, 1, 255, 107, 47, 2, 255, 111, 45, 2, 255, 115, 47, 4, 255, 114, 48, 4, 255, 119, 39, 3, 255, 122, 41, 6, 255, 123, 43, 2, 255, 122, 45, 1, 255, 120, 38, 3, 255, 112, 35, 2, 255, 119, 41, 3, 255, 121, 42, 3, 255, 125, 42, 1, 255, 126, 41, 1, 255, 124, 45, 2, 255, 122, 46, 3, 255, 131, 48, 1, 255, 127, 47, 1, 255, 125, 45, 0, 255, 129, 46, 5, 255, 127, 44, 3, 255, 129, 49, 3, 255, 128, 52, 2, 255, 126, 49, 0, 255, 127, 41, 0, 255, 127, 42, 4, 255, 122, 42, 2, 255, 121, 43, 2, 255, 118, 44, 1, 255, 117, 43, 2, 255, 118, 40, 2, 255, 120, 40, 2, 255, 123, 46, 4, 255, 126, 48, 3, 255, 128, 45, 1, 255, 132, 44, 2, 255, 132, 46, 2, 255, 132, 49, 3, 255, 133, 52, 5, 255, 130, 49, 2, 255, 132, 51, 2, 255, 135, 51, 3, 255, 139, 55, 4, 255, 141, 55, 4, 255, 139, 51, 3, 255, 138, 50, 3, 255, 138, 54, 3, 255, 136, 56, 3, 255, 132, 50, 5, 255, 132, 53, 4, 255, 133, 54, 3, 255, 133, 49, 2, 255, 131, 51, 3, 255, 133, 52, 4, 255, 136, 54, 2, 255, 143, 60, 5, 255, 143, 55, 4, 255, 152, 61, 4, 255, 151, 58, 2, 255, 140, 55, 4, 255, 128, 51, 4, 255, 132, 53, 8, 255, 137, 58, 11, 255, 128, 59, 4, 255, 131, 59, 5, 255, 145, 58, 5, 255, 149, 59, 3, 255, 152, 61, 3, 255, 144, 60, 4, 255, 137, 60, 6, 255, 137, 59, 7, 255, 145, 62, 9, 255, 147, 61, 4, 255, 146, 61, 3, 255, 144, 61, 2, 255, 147, 61, 9, 255, 149, 65, 8, 255, 147, 64, 5, 255, 151, 67, 4, 255, 153, 66, 5, 255, 149, 66, 3, 255, 150, 66, 6, 255, 150, 67, 3, 255, 148, 66, 6, 255, 151, 69, 7, 255, 151, 65, 8, 255, 150, 64, 12, 255, 153, 69, 7, 255, 155, 71, 5, 255, 154, 71, 4, 255, 158, 72, 9, 255, 162, 74, 13, 255, 162, 76, 11, 255, 162, 80, 5, 255, 161, 77, 4, 255, 158, 75, 12, 255, 151, 72, 9, 255, 144, 69, 13, 255, 144, 69, 21, 255, 146, 74, 12, 255, 150, 81, 13, 255, 161, 83, 13, 255, 172, 84, 11, 255, 167, 84, 10, 255, 167, 84, 13, 255, 173, 89, 18, 255, 171, 89, 14, 255, 172, 86, 15, 255, 173, 88, 12, 255, 177, 92, 15, 255, 177, 94, 18, 255, 172, 94, 15, 255, 173, 92, 19, 255, 171, 92, 15, 255, 173, 89, 21, 255, 174, 91, 23, 255, 175, 96, 16, 255, 174, 98, 15, 255, 173, 103, 11, 255, 180, 99, 22, 255, 175, 93, 17, 255, 165, 97, 19, 255, 174, 97, 22, 255, 173, 95, 16, 255, 174, 98, 14, 255, 168, 94, 15, 255, 159, 89, 23, 255, 151, 90, 23, 255, 136, 89, 12, 255, 126, 89, 17, 255, 115, 83, 16, 255, 101, 77, 19, 255, 89, 81, 23, 255, 90, 81, 15, 255, 93, 80, 13, 255, 92, 77, 24, 255, 95, 83, 16, 255, 88, 84, 13, 255, 86, 80, 14, 255, 87, 79, 7, 255, 85, 78, 8, 255, 88, 81, 19, 255, 86, 75, 23, 255, 88, 75, 11, 255, 90, 78, 13, 255, 87, 77, 11, 255, 92, 79, 5, 255, 91, 81, 6, 255, 84, 76, 16, 255, 87, 74, 13, 255, 93, 83, 14, 255, 92, 77, 13, 255, 97, 75, 7, 255, 99, 74, 10, 255, 96, 72, 17, 255, 96, 74, 11, 255, 99, 72, 12, 255, 98, 69, 11, 255, 98, 73, 8, 255, 99, 74, 8, 255, 98, 71, 10, 255, 102, 70, 11, 255, 104, 69, 8, 255, 98, 68, 12, 255, 92, 68, 5, 255, 99, 72, 5, 255, 95, 68, 2, 255, 100, 67, 6, 255, 103, 64, 3, 255, 100, 63, 3, 255, 106, 67, 7, 255, 107, 68, 4, 255, 116, 66, 5, 255, 128, 69, 4, 255, 115, 68, 0, 255, 107, 62, 7, 255, 107, 68, 4, 255, 105, 67, 1, 255, 89, 61, 6, 255, 90, 65, 6, 255, 98, 60, 4, 255, 106, 64, 2, 255, 144, 93, 3, 255, 160, 106, 5, 255, 166, 118, 6, 255, 168, 120, 8, 255, 171, 117, 7, 255, 172, 113, 6, 255, 140, 85, 10, 255, 143, 90, 7, 255, 150, 96, 13, 255, 150, 96, 8, 255, 148, 92, 6, 255, 150, 93, 10, 255, 148, 93, 5, 255, 146, 96, 3, 255, 145, 93, 1, 255, 151, 94, 9, 255, 146, 88, 5, 255, 140, 82, 1, 255, 147, 87, 8, 255, 149, 88, 1, 255, 150, 88, 2, 255, 144, 84, 1, 255, 141, 82, 4, 255, 133, 75, 3, 255, 136, 78, 4, 255, 137, 80, 2, 255, 140, 82, 5, 255, 138, 79, 3, 255, 130, 70, 0, 255, 140, 72, 7, 255, 139, 72, 2, 255, 137, 71, 2, 255, 134, 67, 5, 255, 127, 62, 1, 255, 128, 65, 3, 255, 129, 67, 2, 255, 133, 70, 3, 255, 138, 69, 6, 255, 137, 66, 8, 255, 138, 70, 5, 255, 134, 67, 1, 255, 133, 65, 1, 255, 132, 63, 4, 255, 130, 63, 4, 255, 130, 65, 1, 255, 128, 62, 2, 255, 126, 59, 1, 255, 127, 58, 2, 255, 127, 60, 2, 255, 124, 57, 1, 255, 122, 53, 2, 255, 125, 52, 2, 255, 125, 55, 1, 255, 124, 59, 5, 255, 123, 54, 3, 255, 115, 50, 2, 255, 102, 43, 2, 255, 100, 38, 2, 255, 88, 31, 1, 255, 87, 34, 2, 255, 93, 36, 4, 255, 97, 33, 5, 255, 87, 26, 3, 255, 76, 22, 3, 255, 75, 28, 3, 255, 87, 27, 2, 255, 86, 27, 1, 255, 88, 28, 1, 255, 89, 33, 3, 255, 95, 36, 6, 255, 86, 28, 2, 255, 77, 25, 3, 255, 92, 30, 2, 255, 104, 28, 7, 255, 105, 26, 1, 255, 109, 34, 0, 255, 110, 32, 3, 255, 117, 34, 1, 255, 121, 37, 4, 255, 116, 34, 3, 255, 110, 32, 2, 255, 109, 31, 3, 255, 110, 29, 2, 255, 107, 26, 3, 255, 104, 26, 4, 255, 102, 26, 0, 255, 105, 31, 1, 255, 105, 31, 1, 255, 105, 30, 2, 255, 103, 29, 4, 255, 94, 22, 3, 255, 93, 21, 3, 255, 101, 28, 6, 255, 99, 24, 1, 255, 98, 24, 1, 255, 95, 26, 5, 255, 90, 21, 4, 255, 83, 25, 4, 255, 69, 20, 0, 255, 76, 21, 4, 255, 75, 23, 3, 255, 74, 20, 0, 255, 89, 24, 5, 255, 85, 25, 1, 255, 79, 22, 1, 255, 79, 28, 5, 255, 80, 27, 4, 255, 79, 25, 5, 255, 69, 20, 4, 255, 64, 20, 3, 255, 70, 21, 4, 255, 72, 16, 0, 255, 81, 22, 3, 255, 82, 24, 6, 255, 76, 23, 2, 255, 76, 24, 1, 255, 84, 28, 3, 255, 90, 31, 2, 255, 94, 30, 0, 255, 102, 33, 3, 255, 101, 31, 5, 255, 96, 26, 4, 255, 110, 39, 1, 255, 128, 51, 2, 255, 136, 54, 1, 255, 136, 54, 3, 255, 134, 54, 6, 255, 135, 57, 3, 255, 135, 54, 1, 255, 132, 51, 0, 255, 135, 59, 3, 255, 136, 58, 2, 255, 139, 57, 2, 255, 139, 57, 2, 255, 139, 58, 4, 255, 140, 59, 3, 255, 139, 57, 1, 255, 141, 57, 2, 255, 32, 47, 23, 255, 39, 53, 28, 255, 48, 63, 23, 255, 45, 62, 28, 255, 43, 66, 16, 255, 39, 64, 15, 255, 48, 64, 25, 255, 52, 66, 14, 255, 49, 66, 7, 255, 47, 63, 8, 255, 45, 59, 6, 255, 48, 55, 8, 255, 37, 46, 6, 255, 31, 42, 5, 255, 38, 37, 3, 255, 37, 33, 2, 255, 36, 28, 2, 255, 39, 28, 8, 255, 34, 30, 8, 255, 31, 21, 3, 255, 26, 21, 3, 255, 28, 19, 4, 255, 33, 14, 1, 255, 33, 16, 0, 255, 30, 17, 3, 255, 30, 17, 4, 255, 35, 19, 4, 255, 37, 17, 4, 255, 25, 18, 1, 255, 25, 21, 3, 255, 34, 17, 3, 255, 26, 19, 2, 255, 31, 18, 1, 255, 44, 19, 4, 255, 35, 18, 6, 255, 29, 21, 2, 255, 36, 29, 12, 255, 47, 32, 20, 255, 54, 40, 15, 255, 63, 42, 16, 255, 66, 35, 13, 255, 64, 34, 6, 255, 56, 32, 5, 255, 48, 27, 6, 255, 49, 21, 2, 255, 52, 33, 16, 255, 63, 49, 34, 255, 75, 49, 21, 255, 82, 60, 31, 255, 79, 62, 44, 255, 80, 61, 42, 255, 77, 64, 50, 255, 78, 65, 44, 255, 78, 68, 29, 255, 74, 62, 8, 255, 82, 49, 18, 255, 82, 50, 9, 255, 75, 44, 8, 255, 64, 34, 11, 255, 67, 49, 13, 255, 76, 53, 17, 255, 77, 43, 8, 255, 78, 40, 2, 255, 75, 42, 0, 255, 73, 42, 7, 255, 79, 34, 2, 255, 82, 38, 5, 255, 93, 38, 8, 255, 84, 35, 3, 255, 81, 39, 5, 255, 87, 39, 3, 255, 88, 41, 1, 255, 88, 40, 1, 255, 94, 41, 3, 255, 98, 43, 7, 255, 93, 38, 4, 255, 98, 40, 4, 255, 111, 43, 1, 255, 118, 47, 3, 255, 122, 45, 2, 255, 128, 47, 5, 255, 127, 45, 5, 255, 119, 41, 3, 255, 106, 37, 1, 255, 110, 40, 4, 255, 111, 42, 5, 255, 109, 41, 0, 255, 106, 49, 1, 255, 107, 48, 3, 255, 109, 46, 5, 255, 113, 49, 5, 255, 110, 50, 4, 255, 111, 46, 2, 255, 114, 47, 4, 255, 117, 48, 3, 255, 121, 45, 2, 255, 122, 46, 1, 255, 126, 49, 3, 255, 132, 50, 1, 255, 137, 50, 2, 255, 130, 46, 1, 255, 126, 50, 4, 255, 130, 48, 2, 255, 132, 47, 7, 255, 117, 45, 6, 255, 118, 40, 1, 255, 135, 45, 2, 255, 131, 46, 1, 255, 131, 45, 3, 255, 134, 44, 4, 255, 129, 44, 4, 255, 127, 47, 3, 255, 128, 48, 2, 255, 127, 46, 2, 255, 125, 44, 3, 255, 110, 41, 1, 255, 103, 39, 5, 255, 109, 41, 6, 255, 124, 45, 2, 255, 133, 46, 2, 255, 131, 50, 1, 255, 131, 51, 0, 255, 134, 48, 2, 255, 134, 48, 1, 255, 135, 51, 3, 255, 129, 44, 2, 255, 128, 45, 7, 255, 129, 49, 5, 255, 130, 47, 7, 255, 139, 45, 5, 255, 137, 49, 4, 255, 129, 52, 3, 255, 131, 52, 1, 255, 138, 54, 0, 255, 136, 53, 6, 255, 137, 55, 3, 255, 143, 55, 0, 255, 147, 55, 5, 255, 146, 58, 6, 255, 138, 56, 1, 255, 139, 59, 4, 255, 146, 61, 3, 255, 146, 62, 1, 255, 144, 61, 1, 255, 148, 59, 2, 255, 150, 59, 6, 255, 140, 57, 3, 255, 141, 58, 2, 255, 140, 58, 2, 255, 144, 62, 6, 255, 149, 63, 8, 255, 148, 62, 4, 255, 151, 66, 5, 255, 146, 61, 4, 255, 149, 63, 6, 255, 148, 64, 0, 255, 148, 66, 2, 255, 148, 67, 2, 255, 149, 67, 2, 255, 152, 66, 6, 255, 148, 63, 2, 255, 150, 63, 8, 255, 153, 68, 12, 255, 149, 68, 5, 255, 150, 69, 2, 255, 151, 66, 5, 255, 153, 68, 11, 255, 152, 67, 11, 255, 158, 74, 6, 255, 160, 74, 11, 255, 163, 76, 12, 255, 166, 81, 3, 255, 164, 75, 10, 255, 167, 78, 12, 255, 160, 74, 14, 255, 151, 71, 12, 255, 147, 71, 7, 255, 154, 75, 14, 255, 162, 81, 9, 255, 166, 80, 7, 255, 166, 83, 10, 255, 167, 85, 11, 255, 169, 84, 11, 255, 166, 86, 11, 255, 165, 86, 12, 255, 170, 87, 10, 255, 173, 85, 18, 255, 173, 88, 18, 255, 173, 92, 10, 255, 173, 91, 24, 255, 170, 88, 21, 255, 171, 89, 13, 255, 171, 93, 13, 255, 174, 91, 16, 255, 176, 93, 20, 255, 181, 96, 24, 255, 181, 99, 17, 255, 174, 97, 11, 255, 172, 95, 13, 255, 171, 94, 19, 255, 166, 96, 14, 255, 171, 94, 14, 255, 167, 95, 16, 255, 158, 89, 14, 255, 144, 90, 14, 255, 128, 80, 31, 255, 112, 76, 22, 255, 103, 78, 21, 255, 103, 82, 28, 255, 96, 80, 28, 255, 92, 81, 22, 255, 93, 79, 30, 255, 96, 80, 17, 255, 90, 81, 15, 255, 92, 83, 20, 255, 99, 82, 18, 255, 99, 80, 9, 255, 93, 81, 11, 255, 90, 83, 21, 255, 92, 83, 17, 255, 89, 81, 8, 255, 90, 83, 11, 255, 91, 81, 16, 255, 92, 81, 17, 255, 98, 78, 18, 255, 91, 78, 13, 255, 90, 79, 12, 255, 98, 82, 15, 255, 98, 76, 16, 255, 91, 78, 19, 255, 92, 78, 11, 255, 96, 76, 14, 255, 93, 76, 9, 255, 97, 76, 8, 255, 97, 72, 15, 255, 96, 76, 11, 255, 96, 76, 9, 255, 102, 72, 17, 255, 100, 72, 11, 255, 101, 74, 9, 255, 101, 74, 9, 255, 100, 72, 9, 255, 98, 69, 6, 255, 99, 68, 2, 255, 100, 73, 1, 255, 102, 72, 3, 255, 97, 67, 6, 255, 97, 67, 7, 255, 97, 64, 6, 255, 94, 62, 9, 255, 105, 69, 14, 255, 103, 67, 6, 255, 111, 67, 7, 255, 113, 67, 7, 255, 95, 65, 2, 255, 97, 63, 9, 255, 95, 61, 10, 255, 100, 61, 5, 255, 100, 60, 8, 255, 98, 59, 5, 255, 104, 63, 6, 255, 99, 64, 10, 255, 99, 51, 8, 255, 125, 76, 11, 255, 146, 102, 11, 255, 162, 108, 6, 255, 162, 111, 0, 255, 154, 110, 7, 255, 156, 111, 7, 255, 146, 100, 1, 255, 134, 86, 8, 255, 142, 94, 6, 255, 143, 92, 0, 255, 141, 90, 8, 255, 140, 90, 8, 255, 137, 89, 7, 255, 136, 85, 6, 255, 139, 86, 7, 255, 140, 84, 9, 255, 134, 76, 3, 255, 143, 82, 5, 255, 147, 84, 6, 255, 139, 81, 0, 255, 138, 78, 6, 255, 135, 76, 8, 255, 133, 75, 4, 255, 131, 75, 1, 255, 136, 79, 4, 255, 138, 82, 4, 255, 136, 82, 4, 255, 136, 73, 7, 255, 131, 69, 5, 255, 133, 68, 2, 255, 131, 68, 3, 255, 127, 62, 5, 255, 130, 63, 3, 255, 131, 66, 0, 255, 133, 68, 3, 255, 135, 70, 9, 255, 132, 66, 4, 255, 133, 67, 1, 255, 135, 68, 2, 255, 133, 65, 2, 255, 129, 62, 2, 255, 129, 63, 4, 255, 129, 64, 5, 255, 124, 60, 4, 255, 122, 60, 1, 255, 124, 59, 5, 255, 118, 52, 6, 255, 117, 51, 7, 255, 117, 54, 5, 255, 115, 52, 1, 255, 120, 53, 2, 255, 124, 52, 1, 255, 122, 57, 4, 255, 120, 55, 2, 255, 118, 50, 2, 255, 107, 39, 2, 255, 97, 35, 5, 255, 91, 34, 3, 255, 97, 33, 6, 255, 95, 31, 6, 255, 86, 29, 2, 255, 81, 27, 0, 255, 82, 34, 2, 255, 80, 29, 1, 255, 71, 24, 3, 255, 80, 31, 5, 255, 106, 38, 3, 255, 118, 52, 3, 255, 126, 54, 2, 255, 116, 37, 4, 255, 90, 24, 2, 255, 99, 29, 7, 255, 110, 31, 7, 255, 108, 29, 1, 255, 109, 34, 5, 255, 111, 30, 2, 255, 114, 30, 0, 255, 116, 33, 3, 255, 115, 30, 3, 255, 114, 32, 3, 255, 110, 30, 2, 255, 114, 30, 3, 255, 112, 28, 2, 255, 106, 27, 1, 255, 106, 28, 0, 255, 104, 28, 1, 255, 106, 30, 3, 255, 103, 27, 1, 255, 105, 28, 3, 255, 97, 27, 2, 255, 97, 27, 3, 255, 96, 25, 1, 255, 100, 26, 2, 255, 101, 26, 2, 255, 99, 25, 5, 255, 93, 24, 3, 255, 85, 25, 2, 255, 71, 20, 0, 255, 71, 20, 1, 255, 74, 23, 2, 255, 79, 24, 1, 255, 89, 27, 2, 255, 92, 27, 2, 255, 83, 27, 3, 255, 76, 24, 2, 255, 69, 22, 0, 255, 68, 24, 1, 255, 75, 19, 4, 255, 74, 19, 2, 255, 74, 20, 1, 255, 74, 19, 0, 255, 78, 21, 1, 255, 78, 21, 2, 255, 75, 20, 1, 255, 76, 18, 0, 255, 77, 18, 1, 255, 84, 24, 3, 255, 87, 26, 3, 255, 92, 28, 4, 255, 95, 28, 3, 255, 91, 23, 1, 255, 116, 38, 5, 255, 133, 53, 5, 255, 137, 56, 0, 255, 133, 53, 0, 255, 129, 52, 3, 255, 128, 53, 2, 255, 130, 51, 1, 255, 130, 52, 1, 255, 132, 58, 3, 255, 133, 57, 1, 255, 136, 56, 1, 255, 135, 55, 1, 255, 137, 58, 4, 255, 137, 58, 1, 255, 139, 58, 2, 255, 140, 58, 2, 255, 43, 56, 25, 255, 39, 60, 21, 255, 39, 67, 11, 255, 48, 70, 26, 255, 48, 66, 17, 255, 52, 71, 16, 255, 50, 65, 20, 255, 49, 63, 12, 255, 48, 65, 6, 255, 45, 61, 5, 255, 39, 50, 3, 255, 37, 42, 5, 255, 39, 40, 5, 255, 35, 36, 1, 255, 31, 29, 2, 255, 27, 28, 7, 255, 22, 20, 3, 255, 30, 20, 4, 255, 30, 22, 2, 255, 24, 16, 0, 255, 38, 19, 5, 255, 37, 18, 4, 255, 25, 15, 0, 255, 28, 19, 5, 255, 25, 17, 6, 255, 27, 10, 0, 255, 46, 16, 5, 255, 39, 16, 3, 255, 38, 13, 2, 255, 41, 14, 3, 255, 33, 17, 2, 255, 30, 17, 2, 255, 24, 17, 3, 255, 34, 17, 5, 255, 39, 14, 3, 255, 36, 20, 3, 255, 47, 30, 10, 255, 52, 32, 12, 255, 45, 38, 15, 255, 56, 41, 24, 255, 60, 41, 16, 255, 53, 40, 3, 255, 54, 36, 4, 255, 53, 28, 3, 255, 51, 25, 0, 255, 57, 32, 7, 255, 70, 49, 27, 255, 77, 54, 34, 255, 84, 58, 32, 255, 83, 59, 41, 255, 72, 57, 47, 255, 73, 64, 56, 255, 71, 66, 47, 255, 71, 65, 37, 255, 69, 57, 22, 255, 79, 41, 11, 255, 87, 48, 14, 255, 83, 51, 10, 255, 61, 44, 9, 255, 58, 48, 18, 255, 71, 52, 22, 255, 70, 44, 8, 255, 72, 40, 3, 255, 77, 39, 4, 255, 78, 45, 5, 255, 80, 38, 0, 255, 79, 39, 0, 255, 79, 39, 2, 255, 79, 39, 2, 255, 90, 41, 3, 255, 99, 43, 2, 255, 103, 45, 1, 255, 109, 44, 2, 255, 109, 42, 1, 255, 111, 42, 2, 255, 113, 40, 1, 255, 115, 39, 2, 255, 115, 41, 4, 255, 111, 43, 3, 255, 108, 45, 3, 255, 105, 42, 1, 255, 102, 41, 1, 255, 101, 41, 2, 255, 94, 43, 1, 255, 92, 46, 4, 255, 93, 44, 4, 255, 95, 45, 3, 255, 94, 53, 4, 255, 97, 52, 4, 255, 105, 52, 4, 255, 109, 52, 0, 255, 110, 55, 5, 255, 102, 55, 3, 255, 104, 55, 3, 255, 109, 53, 4, 255, 111, 53, 3, 255, 110, 50, 5, 255, 105, 49, 1, 255, 110, 56, 5, 255, 110, 55, 1, 255, 112, 51, 0, 255, 116, 51, 3, 255, 112, 47, 0, 255, 115, 49, 5, 255, 110, 47, 6, 255, 107, 45, 1, 255, 116, 49, 1, 255, 120, 51, 1, 255, 127, 49, 3, 255, 128, 49, 1, 255, 134, 53, 5, 255, 134, 51, 3, 255, 130, 47, 0, 255, 127, 48, 2, 255, 121, 45, 2, 255, 103, 35, 1, 255, 105, 41, 2, 255, 115, 47, 2, 255, 123, 46, 0, 255, 136, 54, 2, 255, 134, 53, 5, 255, 136, 54, 6, 255, 137, 53, 0, 255, 136, 54, 5, 255, 136, 55, 4, 255, 133, 55, 1, 255, 133, 55, 3, 255, 132, 51, 2, 255, 132, 52, 2, 255, 130, 47, 0, 255, 125, 49, 1, 255, 118, 51, 0, 255, 120, 49, 1, 255, 130, 50, 4, 255, 132, 51, 3, 255, 138, 54, 2, 255, 148, 57, 4, 255, 147, 57, 5, 255, 144, 61, 3, 255, 140, 59, 1, 255, 143, 58, 5, 255, 144, 60, 7, 255, 143, 60, 1, 255, 147, 62, 0, 255, 150, 60, 1, 255, 149, 63, 7, 255, 141, 63, 6, 255, 143, 63, 4, 255, 144, 62, 2, 255, 143, 63, 2, 255, 144, 62, 4, 255, 145, 62, 3, 255, 147, 68, 3, 255, 148, 64, 1, 255, 154, 62, 7, 255, 153, 64, 5, 255, 153, 68, 5, 255, 151, 67, 3, 255, 148, 61, 6, 255, 153, 64, 10, 255, 151, 66, 12, 255, 153, 66, 14, 255, 154, 69, 9, 255, 150, 67, 13, 255, 148, 66, 7, 255, 150, 67, 3, 255, 151, 69, 5, 255, 154, 69, 18, 255, 154, 69, 9, 255, 157, 72, 6, 255, 164, 76, 15, 255, 163, 77, 4, 255, 162, 76, 6, 255, 160, 75, 10, 255, 158, 75, 14, 255, 151, 72, 17, 255, 148, 72, 12, 255, 162, 82, 18, 255, 170, 85, 14, 255, 164, 82, 17, 255, 162, 81, 14, 255, 165, 82, 12, 255, 170, 85, 18, 255, 170, 87, 16, 255, 168, 86, 12, 255, 168, 86, 15, 255, 166, 88, 17, 255, 163, 87, 9, 255, 163, 85, 6, 255, 167, 88, 17, 255, 166, 90, 17, 255, 173, 95, 14, 255, 181, 93, 12, 255, 181, 95, 22, 255, 177, 96, 14, 255, 171, 94, 25, 255, 168, 94, 23, 255, 166, 95, 20, 255, 167, 96, 22, 255, 158, 89, 13, 255, 147, 88, 24, 255, 145, 85, 21, 255, 130, 83, 11, 255, 109, 79, 18, 255, 95, 77, 25, 255, 90, 80, 24, 255, 91, 83, 10, 255, 93, 82, 16, 255, 97, 85, 14, 255, 92, 78, 16, 255, 95, 80, 30, 255, 88, 80, 26, 255, 105, 81, 7, 255, 97, 80, 17, 255, 90, 84, 10, 255, 98, 80, 17, 255, 98, 79, 25, 255, 91, 81, 14, 255, 91, 82, 19, 255, 93, 83, 19, 255, 92, 82, 15, 255, 92, 82, 19, 255, 92, 81, 23, 255, 93, 82, 17, 255, 104, 81, 14, 255, 99, 81, 11, 255, 95, 82, 16, 255, 99, 79, 10, 255, 104, 76, 4, 255, 92, 74, 10, 255, 94, 77, 9, 255, 102, 75, 16, 255, 100, 75, 17, 255, 98, 72, 21, 255, 101, 73, 17, 255, 101, 72, 11, 255, 103, 74, 17, 255, 102, 73, 19, 255, 102, 72, 11, 255, 103, 72, 6, 255, 101, 72, 2, 255, 101, 70, 4, 255, 103, 72, 9, 255, 107, 73, 11, 255, 104, 73, 8, 255, 103, 65, 10, 255, 95, 59, 14, 255, 93, 61, 6, 255, 95, 62, 8, 255, 98, 67, 8, 255, 109, 66, 4, 255, 103, 62, 4, 255, 91, 64, 8, 255, 96, 63, 8, 255, 107, 64, 7, 255, 107, 60, 1, 255, 112, 66, 8, 255, 103, 59, 6, 255, 96, 56, 2, 255, 98, 57, 2, 255, 100, 57, 4, 255, 99, 60, 4, 255, 98, 59, 5, 255, 104, 59, 8, 255, 108, 67, 1, 255, 140, 92, 7, 255, 145, 93, 5, 255, 144, 100, 6, 255, 151, 103, 6, 255, 150, 95, 11, 255, 147, 95, 1, 255, 143, 89, 2, 255, 140, 82, 3, 255, 142, 85, 4, 255, 140, 83, 3, 255, 139, 82, 6, 255, 137, 82, 8, 255, 132, 81, 3, 255, 131, 82, 7, 255, 129, 79, 7, 255, 134, 81, 2, 255, 139, 82, 11, 255, 136, 78, 11, 255, 133, 76, 4, 255, 129, 75, 2, 255, 131, 76, 6, 255, 126, 72, 2, 255, 129, 74, 4, 255, 141, 80, 9, 255, 137, 78, 1, 255, 140, 76, 2, 255, 133, 71, 0, 255, 134, 71, 3, 255, 125, 61, 3, 255, 126, 63, 1, 255, 134, 70, 5, 255, 133, 68, 4, 255, 133, 68, 4, 255, 133, 71, 4, 255, 130, 71, 1, 255, 129, 70, 0, 255, 134, 67, 2, 255, 130, 62, 2, 255, 131, 62, 4, 255, 131, 65, 4, 255, 126, 61, 1, 255, 122, 58, 3, 255, 124, 62, 1, 255, 123, 58, 1, 255, 121, 53, 3, 255, 119, 52, 3, 255, 116, 53, 1, 255, 116, 53, 0, 255, 120, 55, 3, 255, 119, 50, 4, 255, 118, 52, 5, 255, 111, 52, 1, 255, 117, 48, 3, 255, 116, 41, 4, 255, 100, 42, 5, 255, 91, 36, 1, 255, 88, 31, 1, 255, 93, 31, 4, 255, 93, 31, 3, 255, 87, 29, 0, 255, 92, 31, 2, 255, 97, 32, 4, 255, 87, 26, 6, 255, 84, 22, 2, 255, 93, 28, 3, 255, 99, 32, 7, 255, 108, 32, 3, 255, 95, 26, 6, 255, 86, 28, 0, 255, 87, 27, 1, 255, 93, 28, 0, 255, 99, 29, 0, 255, 104, 30, 4, 255, 113, 29, 3, 255, 113, 32, 3, 255, 114, 33, 4, 255, 109, 26, 0, 255, 110, 28, 0, 255, 110, 29, 0, 255, 113, 29, 0, 255, 113, 28, 0, 255, 112, 28, 1, 255, 114, 30, 4, 255, 111, 29, 5, 255, 111, 29, 5, 255, 105, 24, 0, 255, 107, 28, 2, 255, 107, 31, 2, 255, 101, 27, 1, 255, 101, 27, 3, 255, 101, 26, 3, 255, 97, 21, 1, 255, 97, 23, 2, 255, 95, 23, 0, 255, 91, 22, 1, 255, 77, 17, 0, 255, 69, 15, 0, 255, 75, 21, 5, 255, 85, 27, 5, 255, 87, 27, 1, 255, 85, 25, 2, 255, 79, 23, 2, 255, 77, 25, 4, 255, 67, 21, 1, 255, 68, 24, 2, 255, 81, 24, 6, 255, 73, 19, 2, 255, 71, 18, 0, 255, 74, 22, 1, 255, 77, 24, 3, 255, 78, 21, 2, 255, 80, 21, 3, 255, 79, 20, 3, 255, 76, 17, 1, 255, 77, 18, 0, 255, 82, 24, 5, 255, 81, 23, 2, 255, 83, 21, 0, 255, 92, 26, 1, 255, 120, 41, 3, 255, 131, 50, 4, 255, 132, 51, 0, 255, 133, 53, 0, 255, 130, 52, 3, 255, 128, 51, 2, 255, 127, 48, 0, 255, 131, 51, 1, 255, 132, 55, 1, 255, 132, 56, 0, 255, 136, 58, 1, 255, 135, 57, 1, 255, 137, 57, 3, 255, 137, 56, 0, 255, 139, 58, 2, 255, 138, 57, 1, 255, 45, 66, 23, 255, 46, 68, 22, 255, 54, 73, 29, 255, 47, 63, 33, 255, 52, 67, 19, 255, 59, 70, 8, 255, 47, 64, 7, 255, 47, 68, 6, 255, 38, 55, 5, 255, 40, 50, 16, 255, 35, 42, 6, 255, 36, 38, 0, 255, 35, 32, 4, 255, 28, 27, 3, 255, 31, 26, 7, 255, 19, 18, 5, 255, 25, 21, 8, 255, 26, 17, 5, 255, 26, 19, 3, 255, 22, 15, 3, 255, 28, 14, 5, 255, 28, 14, 2, 255, 25, 16, 2, 255, 27, 20, 6, 255, 28, 20, 5, 255, 25, 15, 1, 255, 35, 17, 4, 255, 39, 16, 4, 255, 39, 16, 3, 255, 43, 17, 6, 255, 43, 17, 4, 255, 35, 15, 0, 255, 28, 16, 3, 255, 32, 18, 4, 255, 34, 18, 1, 255, 34, 18, 0, 255, 48, 25, 5, 255, 52, 33, 8, 255, 50, 38, 17, 255, 49, 39, 22, 255, 51, 39, 19, 255, 54, 35, 4, 255, 58, 38, 7, 255, 47, 29, 8, 255, 44, 25, 3, 255, 55, 30, 0, 255, 53, 41, 16, 255, 59, 50, 35, 255, 69, 54, 26, 255, 70, 57, 41, 255, 71, 64, 48, 255, 83, 67, 52, 255, 70, 65, 49, 255, 66, 65, 52, 255, 73, 63, 32, 255, 82, 50, 2, 255, 76, 47, 16, 255, 79, 55, 15, 255, 70, 48, 2, 255, 77, 57, 18, 255, 75, 52, 18, 255, 66, 43, 5, 255, 69, 42, 5, 255, 79, 36, 4, 255, 73, 40, 6, 255, 71, 39, 3, 255, 85, 37, 4, 255, 93, 39, 5, 255, 104, 39, 6, 255, 105, 36, 3, 255, 101, 37, 4, 255, 95, 35, 2, 255, 92, 38, 3, 255, 92, 39, 4, 255, 91, 37, 2, 255, 90, 41, 5, 255, 86, 39, 3, 255, 92, 41, 4, 255, 88, 41, 2, 255, 88, 41, 2, 255, 91, 44, 4, 255, 92, 43, 3, 255, 92, 46, 5, 255, 99, 46, 4, 255, 95, 45, 2, 255, 99, 46, 6, 255, 100, 46, 5, 255, 96, 46, 1, 255, 96, 44, 0, 255, 106, 49, 3, 255, 110, 53, 3, 255, 111, 51, 4, 255, 99, 46, 0, 255, 100, 51, 3, 255, 104, 55, 5, 255, 103, 55, 2, 255, 105, 55, 3, 255, 106, 53, 4, 255, 107, 53, 6, 255, 103, 49, 2, 255, 109, 54, 3, 255, 113, 55, 2, 255, 114, 54, 2, 255, 113, 52, 1, 255, 120, 52, 3, 255, 111, 46, 0, 255, 113, 53, 7, 255, 117, 52, 4, 255, 116, 49, 1, 255, 118, 54, 5, 255, 116, 53, 3, 255, 117, 50, 1, 255, 125, 50, 2, 255, 124, 49, 5, 255, 114, 43, 3, 255, 109, 39, 7, 255, 123, 49, 9, 255, 133, 53, 5, 255, 135, 53, 5, 255, 136, 55, 7, 255, 139, 57, 5, 255, 138, 55, 5, 255, 142, 58, 8, 255, 141, 58, 1, 255, 136, 54, 3, 255, 133, 52, 1, 255, 143, 59, 2, 255, 146, 58, 3, 255, 140, 57, 5, 255, 137, 57, 3, 255, 137, 53, 4, 255, 136, 49, 2, 255, 135, 56, 6, 255, 131, 52, 1, 255, 136, 55, 1, 255, 143, 58, 5, 255, 143, 55, 4, 255, 142, 59, 2, 255, 139, 58, 3, 255, 140, 58, 4, 255, 149, 61, 4, 255, 150, 58, 7, 255, 143, 64, 3, 255, 149, 67, 3, 255, 154, 60, 1, 255, 152, 60, 4, 255, 144, 62, 4, 255, 144, 62, 8, 255, 148, 67, 9, 255, 145, 66, 2, 255, 142, 62, 2, 255, 144, 60, 5, 255, 150, 57, 9, 255, 155, 63, 11, 255, 151, 63, 10, 255, 151, 61, 12, 255, 149, 63, 12, 255, 146, 65, 4, 255, 143, 62, 2, 255, 149, 66, 8, 255, 149, 68, 4, 255, 150, 67, 5, 255, 151, 67, 5, 255, 147, 63, 12, 255, 148, 66, 12, 255, 147, 68, 10, 255, 148, 68, 10, 255, 150, 70, 12, 255, 153, 70, 13, 255, 155, 71, 9, 255, 157, 73, 8, 255, 159, 75, 10, 255, 158, 76, 10, 255, 147, 68, 18, 255, 153, 72, 14, 255, 157, 76, 10, 255, 161, 81, 13, 255, 160, 82, 14, 255, 158, 78, 13, 255, 158, 82, 20, 255, 156, 80, 10, 255, 167, 86, 14, 255, 167, 85, 18, 255, 163, 82, 13, 255, 161, 83, 13, 255, 156, 82, 14, 255, 163, 88, 19, 255, 168, 86, 22, 255, 168, 88, 17, 255, 173, 91, 16, 255, 171, 91, 15, 255, 172, 97, 20, 255, 174, 93, 20, 255, 176, 93, 16, 255, 171, 91, 15, 255, 164, 92, 18, 255, 156, 93, 15, 255, 151, 88, 27, 255, 139, 86, 18, 255, 141, 90, 20, 255, 135, 89, 25, 255, 91, 81, 20, 255, 86, 80, 17, 255, 88, 81, 24, 255, 86, 82, 21, 255, 98, 79, 24, 255, 93, 81, 17, 255, 92, 80, 21, 255, 94, 84, 15, 255, 94, 83, 24, 255, 92, 87, 16, 255, 92, 84, 18, 255, 104, 83, 15, 255, 100, 82, 23, 255, 97, 86, 16, 255, 96, 81, 18, 255, 99, 81, 19, 255, 102, 82, 11, 255, 100, 80, 18, 255, 101, 80, 28, 255, 101, 80, 22, 255, 104, 82, 20, 255, 103, 81, 17, 255, 101, 83, 16, 255, 94, 80, 22, 255, 97, 80, 12, 255, 95, 81, 19, 255, 93, 77, 22, 255, 96, 74, 16, 255, 93, 75, 17, 255, 95, 76, 15, 255, 103, 78, 13, 255, 104, 77, 9, 255, 99, 76, 9, 255, 96, 72, 20, 255, 100, 70, 12, 255, 106, 70, 17, 255, 98, 74, 16, 255, 99, 71, 17, 255, 98, 71, 15, 255, 97, 70, 10, 255, 95, 69, 6, 255, 97, 72, 7, 255, 97, 67, 14, 255, 95, 66, 10, 255, 101, 66, 14, 255, 95, 64, 6, 255, 93, 64, 4, 255, 101, 68, 6, 255, 96, 63, 8, 255, 96, 63, 6, 255, 99, 63, 2, 255, 102, 62, 1, 255, 102, 58, 7, 255, 99, 59, 9, 255, 108, 61, 6, 255, 108, 62, 2, 255, 99, 62, 9, 255, 99, 63, 11, 255, 108, 62, 4, 255, 110, 61, 1, 255, 103, 57, 1, 255, 102, 61, 1, 255, 108, 59, 6, 255, 102, 60, 2, 255, 105, 66, 6, 255, 117, 66, 7, 255, 133, 82, 3, 255, 145, 93, 4, 255, 140, 89, 2, 255, 127, 75, 6, 255, 135, 82, 9, 255, 142, 90, 2, 255, 138, 86, 2, 255, 134, 79, 8, 255, 130, 79, 3, 255, 131, 81, 6, 255, 127, 79, 3, 255, 125, 78, 8, 255, 125, 76, 7, 255, 130, 77, 5, 255, 133, 78, 7, 255, 130, 76, 3, 255, 124, 72, 3, 255, 123, 71, 3, 255, 123, 71, 4, 255, 121, 68, 4, 255, 124, 70, 10, 255, 134, 77, 3, 255, 140, 79, 3, 255, 131, 73, 1, 255, 134, 72, 6, 255, 128, 69, 2, 255, 128, 69, 3, 255, 128, 64, 4, 255, 130, 64, 3, 255, 135, 68, 3, 255, 134, 65, 1, 255, 131, 63, 3, 255, 129, 63, 9, 255, 123, 57, 5, 255, 127, 59, 2, 255, 129, 60, 7, 255, 129, 58, 4, 255, 129, 61, 2, 255, 128, 62, 3, 255, 124, 58, 2, 255, 124, 59, 2, 255, 125, 58, 1, 255, 125, 55, 1, 255, 125, 56, 2, 255, 122, 56, 2, 255, 120, 54, 2, 255, 118, 51, 4, 255, 110, 47, 2, 255, 108, 47, 2, 255, 115, 51, 8, 255, 117, 48, 4, 255, 111, 46, 1, 255, 105, 45, 1, 255, 98, 37, 2, 255, 92, 33, 0, 255, 92, 34, 1, 255, 96, 33, 3, 255, 97, 28, 3, 255, 94, 26, 4, 255, 96, 33, 1, 255, 94, 30, 4, 255, 96, 27, 6, 255, 83, 25, 3, 255, 87, 28, 4, 255, 96, 27, 2, 255, 90, 24, 4, 255, 93, 27, 1, 255, 98, 31, 2, 255, 99, 25, 1, 255, 101, 26, 3, 255, 98, 27, 0, 255, 103, 26, 3, 255, 104, 27, 2, 255, 109, 29, 3, 255, 108, 27, 0, 255, 110, 28, 0, 255, 112, 31, 2, 255, 117, 34, 4, 255, 117, 32, 3, 255, 119, 31, 4, 255, 115, 27, 2, 255, 114, 27, 3, 255, 114, 28, 4, 255, 110, 25, 2, 255, 110, 27, 4, 255, 113, 30, 2, 255, 110, 29, 2, 255, 103, 25, 1, 255, 103, 24, 3, 255, 98, 21, 2, 255, 95, 23, 1, 255, 94, 25, 2, 255, 90, 23, 2, 255, 81, 21, 3, 255, 70, 18, 3, 255, 66, 17, 4, 255, 74, 23, 5, 255, 75, 25, 2, 255, 71, 23, 3, 255, 78, 21, 3, 255, 75, 22, 4, 255, 71, 22, 4, 255, 71, 20, 0, 255, 73, 22, 1, 255, 65, 18, 2, 255, 63, 18, 0, 255, 69, 22, 2, 255, 72, 23, 1, 255, 76, 21, 1, 255, 78, 20, 0, 255, 78, 19, 2, 255, 77, 21, 3, 255, 78, 20, 2, 255, 77, 21, 3, 255, 76, 20, 3, 255, 78, 21, 0, 255, 97, 35, 6, 255, 120, 44, 2, 255, 125, 49, 4, 255, 125, 49, 1, 255, 130, 51, 3, 255, 131, 50, 3, 255, 132, 52, 2, 255, 131, 53, 0, 255, 134, 54, 3, 255, 134, 54, 0, 255, 138, 59, 3, 255, 136, 57, 1, 255, 135, 54, 0, 255, 137, 56, 1, 255, 140, 56, 2, 255, 140, 57, 3, 255, 138, 57, 2, 255, 43, 73, 22, 255, 40, 73, 26, 255, 45, 75, 25, 255, 50, 68, 19, 255, 54, 65, 26, 255, 44, 65, 17, 255, 41, 63, 9, 255, 38, 53, 6, 255, 39, 51, 8, 255, 34, 40, 5, 255, 37, 36, 9, 255, 29, 26, 4, 255, 28, 24, 6, 255, 24, 22, 9, 255, 29, 22, 10, 255, 23, 19, 4, 255, 25, 19, 3, 255, 27, 16, 4, 255, 22, 15, 5, 255, 21, 12, 5, 255, 17, 11, 2, 255, 22, 13, 2, 255, 34, 18, 5, 255, 29, 16, 2, 255, 32, 19, 2, 255, 26, 17, 2, 255, 17, 14, 2, 255, 40, 16, 7, 255, 34, 13, 0, 255, 29, 17, 2, 255, 43, 18, 6, 255, 40, 22, 7, 255, 38, 19, 1, 255, 40, 18, 3, 255, 33, 26, 2, 255, 35, 20, 2, 255, 43, 25, 7, 255, 45, 36, 16, 255, 62, 38, 23, 255, 53, 36, 15, 255, 55, 43, 16, 255, 59, 42, 10, 255, 48, 36, 8, 255, 40, 25, 5, 255, 48, 25, 3, 255, 48, 24, 3, 255, 58, 44, 25, 255, 70, 56, 20, 255, 76, 55, 19, 255, 67, 58, 37, 255, 74, 61, 47, 255, 77, 67, 54, 255, 72, 63, 51, 255, 68, 62, 47, 255, 72, 61, 31, 255, 76, 52, 13, 255, 77, 45, 14, 255, 71, 49, 25, 255, 64, 42, 8, 255, 69, 47, 15, 255, 71, 52, 14, 255, 75, 45, 12, 255, 79, 47, 7, 255, 90, 44, 2, 255, 95, 47, 2, 255, 96, 43, 3, 255, 101, 35, 5, 255, 86, 35, 3, 255, 80, 36, 1, 255, 82, 40, 5, 255, 86, 41, 3, 255, 89, 37, 0, 255, 86, 36, 1, 255, 85, 40, 3, 255, 80, 38, 1, 255, 85, 38, 1, 255, 88, 40, 3, 255, 84, 40, 5, 255, 87, 39, 3, 255, 92, 38, 3, 255, 93, 38, 2, 255, 95, 41, 2, 255, 89, 41, 1, 255, 82, 36, 4, 255, 77, 35, 1, 255, 81, 36, 4, 255, 76, 38, 3, 255, 80, 38, 5, 255, 76, 38, 3, 255, 80, 38, 2, 255, 79, 38, 2, 255, 83, 38, 3, 255, 87, 34, 2, 255, 87, 37, 2, 255, 88, 39, 3, 255, 97, 38, 5, 255, 94, 39, 1, 255, 99, 38, 2, 255, 106, 42, 8, 255, 101, 39, 5, 255, 101, 41, 3, 255, 102, 41, 1, 255, 108, 42, 2, 255, 107, 43, 2, 255, 103, 41, 1, 255, 101, 42, 3, 255, 94, 40, 4, 255, 93, 40, 3, 255, 88, 37, 1, 255, 100, 35, 4, 255, 93, 36, 2, 255, 89, 39, 1, 255, 94, 44, 5, 255, 90, 41, 4, 255, 84, 39, 4, 255, 80, 36, 3, 255, 82, 36, 3, 255, 89, 38, 1, 255, 101, 45, 6, 255, 97, 37, 5, 255, 108, 47, 4, 255, 118, 51, 1, 255, 125, 49, 4, 255, 132, 52, 6, 255, 132, 52, 6, 255, 137, 59, 4, 255, 140, 59, 0, 255, 146, 57, 2, 255, 141, 62, 0, 255, 146, 63, 2, 255, 154, 60, 6, 255, 149, 52, 4, 255, 142, 54, 4, 255, 144, 57, 4, 255, 140, 56, 2, 255, 132, 52, 1, 255, 124, 47, 0, 255, 127, 50, 2, 255, 131, 52, 7, 255, 135, 53, 5, 255, 144, 58, 2, 255, 144, 55, 0, 255, 149, 63, 1, 255, 155, 62, 2, 255, 151, 61, 3, 255, 143, 60, 3, 255, 144, 57, 4, 255, 146, 57, 5, 255, 151, 62, 7, 255, 147, 60, 4, 255, 142, 59, 6, 255, 140, 60, 9, 255, 141, 57, 7, 255, 146, 61, 11, 255, 144, 61, 5, 255, 149, 65, 0, 255, 148, 64, 9, 255, 143, 62, 10, 255, 140, 62, 2, 255, 144, 66, 1, 255, 145, 66, 5, 255, 145, 63, 12, 255, 146, 64, 13, 255, 145, 64, 13, 255, 143, 65, 9, 255, 142, 64, 6, 255, 144, 66, 12, 255, 144, 67, 2, 255, 150, 70, 10, 255, 154, 71, 12, 255, 156, 74, 2, 255, 159, 75, 12, 255, 156, 75, 10, 255, 154, 76, 12, 255, 158, 76, 12, 255, 167, 83, 17, 255, 161, 79, 18, 255, 159, 81, 15, 255, 158, 80, 19, 255, 160, 82, 17, 255, 165, 85, 9, 255, 162, 85, 12, 255, 154, 80, 16, 255, 153, 80, 12, 255, 157, 87, 14, 255, 160, 87, 20, 255, 167, 88, 14, 255, 169, 94, 15, 255, 171, 92, 20, 255, 169, 92, 18, 255, 162, 90, 20, 255, 162, 88, 10, 255, 155, 91, 19, 255, 155, 91, 25, 255, 150, 89, 21, 255, 136, 85, 17, 255, 125, 81, 19, 255, 125, 83, 15, 255, 120, 82, 25, 255, 109, 78, 25, 255, 107, 81, 26, 255, 91, 82, 12, 255, 89, 77, 16, 255, 89, 80, 21, 255, 85, 78, 19, 255, 92, 83, 20, 255, 89, 83, 24, 255, 90, 82, 25, 255, 92, 80, 31, 255, 97, 82, 27, 255, 98, 83, 8, 255, 93, 86, 10, 255, 101, 83, 23, 255, 102, 84, 16, 255, 100, 87, 16, 255, 104, 83, 22, 255, 105, 83, 12, 255, 99, 80, 25, 255, 98, 79, 24, 255, 99, 82, 16, 255, 101, 84, 9, 255, 105, 83, 22, 255, 102, 80, 26, 255, 101, 84, 23, 255, 99, 85, 17, 255, 97, 80, 4, 255, 97, 75, 9, 255, 101, 79, 17, 255, 98, 78, 12, 255, 100, 78, 14, 255, 97, 76, 12, 255, 100, 75, 22, 255, 103, 78, 9, 255, 98, 75, 10, 255, 95, 73, 22, 255, 99, 71, 15, 255, 104, 73, 5, 255, 102, 71, 16, 255, 101, 69, 16, 255, 101, 69, 15, 255, 102, 71, 13, 255, 100, 69, 12, 255, 101, 68, 14, 255, 100, 67, 6, 255, 99, 66, 8, 255, 104, 66, 4, 255, 98, 66, 0, 255, 97, 65, 3, 255, 109, 64, 17, 255, 102, 60, 6, 255, 106, 64, 10, 255, 103, 61, 13, 255, 104, 62, 5, 255, 108, 64, 5, 255, 97, 62, 7, 255, 98, 62, 11, 255, 99, 62, 10, 255, 100, 61, 2, 255, 113, 61, 10, 255, 118, 61, 9, 255, 114, 62, 5, 255, 115, 56, 7, 255, 113, 59, 4, 255, 107, 57, 8, 255, 100, 54, 5, 255, 94, 55, 3, 255, 100, 53, 11, 255, 107, 53, 2, 255, 125, 73, 2, 255, 128, 82, 4, 255, 125, 79, 5, 255, 128, 82, 12, 255, 127, 79, 7, 255, 127, 78, 6, 255, 121, 71, 11, 255, 118, 74, 4, 255, 121, 76, 2, 255, 120, 76, 5, 255, 121, 75, 8, 255, 119, 70, 5, 255, 128, 72, 5, 255, 131, 75, 5, 255, 123, 72, 2, 255, 119, 68, 2, 255, 119, 67, 5, 255, 118, 67, 7, 255, 119, 66, 5, 255, 122, 68, 4, 255, 128, 68, 4, 255, 134, 71, 2, 255, 134, 73, 3, 255, 128, 65, 4, 255, 122, 60, 4, 255, 116, 50, 7, 255, 114, 48, 8, 255, 116, 52, 2, 255, 125, 59, 0, 255, 131, 65, 1, 255, 132, 65, 2, 255, 132, 62, 6, 255, 130, 59, 6, 255, 129, 60, 7, 255, 130, 62, 7, 255, 128, 60, 4, 255, 126, 59, 2, 255, 123, 59, 3, 255, 121, 58, 2, 255, 120, 55, 4, 255, 118, 52, 3, 255, 118, 50, 1, 255, 120, 51, 2, 255, 118, 52, 2, 255, 115, 49, 4, 255, 108, 45, 2, 255, 107, 47, 2, 255, 115, 49, 5, 255, 121, 56, 8, 255, 118, 52, 3, 255, 116, 49, 5, 255, 106, 43, 2, 255, 107, 38, 4, 255, 100, 35, 2, 255, 96, 34, 3, 255, 92, 32, 2, 255, 93, 29, 2, 255, 93, 27, 3, 255, 103, 36, 2, 255, 101, 34, 2, 255, 98, 25, 1, 255, 108, 37, 4, 255, 118, 44, 3, 255, 122, 48, 1, 255, 120, 36, 3, 255, 115, 29, 5, 255, 110, 30, 5, 255, 105, 27, 2, 255, 102, 29, 3, 255, 101, 31, 4, 255, 104, 27, 2, 255, 102, 25, 0, 255, 108, 28, 1, 255, 115, 31, 4, 255, 115, 31, 3, 255, 114, 30, 2, 255, 118, 34, 5, 255, 116, 31, 1, 255, 115, 29, 1, 255, 116, 30, 2, 255, 114, 27, 1, 255, 112, 28, 3, 255, 108, 25, 1, 255, 109, 27, 2, 255, 109, 26, 1, 255, 110, 27, 1, 255, 107, 25, 1, 255, 104, 22, 3, 255, 99, 22, 3, 255, 92, 23, 0, 255, 91, 24, 5, 255, 86, 24, 4, 255, 79, 23, 2, 255, 75, 22, 6, 255, 60, 17, 3, 255, 56, 17, 1, 255, 66, 21, 3, 255, 68, 22, 5, 255, 72, 20, 2, 255, 68, 18, 1, 255, 66, 16, 1, 255, 68, 17, 1, 255, 63, 19, 0, 255, 58, 17, 1, 255, 60, 18, 2, 255, 67, 19, 2, 255, 72, 20, 1, 255, 74, 21, 1, 255, 73, 19, 1, 255, 72, 20, 1, 255, 71, 19, 0, 255, 79, 23, 2, 255, 76, 19, 1, 255, 77, 22, 4, 255, 79, 22, 0, 255, 93, 31, 2, 255, 116, 40, 2, 255, 121, 48, 5, 255, 122, 49, 3, 255, 126, 50, 2, 255, 126, 46, 0, 255, 130, 50, 1, 255, 128, 51, 1, 255, 131, 54, 4, 255, 135, 54, 1, 255, 135, 55, 0, 255, 136, 57, 1, 255, 139, 57, 2, 255, 137, 53, 0, 255, 137, 52, 2, 255, 135, 52, 1, 255, 133, 52, 0, 255, 56, 73, 24, 255, 46, 69, 23, 255, 44, 67, 18, 255, 52, 71, 12, 255, 51, 61, 20, 255, 42, 53, 12, 255, 40, 52, 12, 255, 34, 41, 8, 255, 35, 38, 7, 255, 30, 28, 4, 255, 29, 25, 4, 255, 25, 23, 4, 255, 25, 21, 8, 255, 25, 19, 5, 255, 24, 18, 7, 255, 16, 16, 4, 255, 20, 19, 4, 255, 38, 28, 12, 255, 26, 15, 2, 255, 24, 13, 0, 255, 34, 17, 1, 255, 39, 17, 3, 255, 32, 17, 3, 255, 26, 13, 2, 255, 35, 17, 6, 255, 28, 15, 4, 255, 18, 10, 0, 255, 30, 16, 7, 255, 29, 18, 6, 255, 32, 14, 1, 255, 38, 15, 2, 255, 42, 18, 5, 255, 32, 21, 1, 255, 35, 18, 2, 255, 41, 23, 2, 255, 33, 19, 4, 255, 35, 21, 5, 255, 41, 30, 14, 255, 47, 42, 20, 255, 50, 40, 16, 255, 60, 44, 19, 255, 51, 45, 6, 255, 46, 40, 1, 255, 55, 34, 5, 255, 50, 32, 4, 255, 48, 28, 4, 255, 66, 42, 12, 255, 81, 57, 30, 255, 79, 57, 19, 255, 65, 57, 35, 255, 61, 59, 43, 255, 79, 73, 38, 255, 82, 62, 42, 255, 70, 60, 45, 255, 72, 64, 34, 255, 76, 53, 19, 255, 74, 46, 17, 255, 70, 56, 20, 255, 78, 39, 5, 255, 81, 45, 16, 255, 79, 54, 13, 255, 95, 48, 11, 255, 92, 48, 8, 255, 88, 38, 3, 255, 75, 42, 5, 255, 73, 38, 3, 255, 73, 30, 0, 255, 77, 34, 2, 255, 82, 36, 2, 255, 86, 39, 4, 255, 83, 32, 0, 255, 87, 35, 5, 255, 76, 32, 1, 255, 75, 36, 2, 255, 79, 38, 6, 255, 80, 35, 3, 255, 81, 35, 3, 255, 76, 35, 1, 255, 78, 39, 3, 255, 78, 36, 2, 255, 83, 36, 3, 255, 84, 35, 1, 255, 90, 41, 5, 255, 80, 39, 2, 255, 83, 40, 2, 255, 87, 42, 5, 255, 74, 38, 1, 255, 83, 38, 4, 255, 81, 39, 4, 255, 76, 34, 0, 255, 80, 34, 2, 255, 88, 38, 5, 255, 85, 40, 2, 255, 83, 40, 1, 255, 89, 38, 1, 255, 96, 38, 4, 255, 92, 35, 3, 255, 93, 35, 2, 255, 94, 39, 2, 255, 88, 39, 1, 255, 94, 41, 3, 255, 94, 36, 2, 255, 102, 38, 1, 255, 105, 40, 5, 255, 91, 36, 4, 255, 90, 40, 4, 255, 89, 39, 1, 255, 82, 38, 0, 255, 87, 38, 6, 255, 91, 34, 1, 255, 91, 37, 3, 255, 89, 33, 1, 255, 98, 39, 3, 255, 94, 38, 3, 255, 85, 38, 1, 255, 85, 35, 3, 255, 84, 39, 2, 255, 83, 43, 4, 255, 81, 37, 3, 255, 85, 37, 6, 255, 80, 35, 2, 255, 78, 38, 4, 255, 80, 38, 6, 255, 84, 34, 3, 255, 90, 39, 2, 255, 100, 47, 8, 255, 99, 41, 4, 255, 111, 47, 5, 255, 114, 50, 4, 255, 127, 49, 7, 255, 124, 48, 5, 255, 116, 50, 3, 255, 125, 54, 4, 255, 141, 58, 5, 255, 135, 50, 0, 255, 123, 46, 3, 255, 111, 42, 8, 255, 107, 39, 5, 255, 126, 50, 5, 255, 133, 52, 2, 255, 136, 53, 8, 255, 137, 55, 5, 255, 146, 60, 7, 255, 149, 56, 4, 255, 146, 58, 7, 255, 134, 59, 4, 255, 132, 58, 1, 255, 130, 55, 4, 255, 139, 60, 6, 255, 145, 61, 5, 255, 141, 61, 6, 255, 134, 58, 7, 255, 133, 60, 6, 255, 134, 59, 4, 255, 134, 55, 3, 255, 139, 55, 7, 255, 144, 61, 4, 255, 141, 62, 6, 255, 137, 62, 6, 255, 133, 59, 8, 255, 136, 59, 8, 255, 138, 58, 7, 255, 144, 63, 11, 255, 142, 62, 19, 255, 141, 62, 17, 255, 143, 67, 11, 255, 144, 68, 9, 255, 148, 70, 5, 255, 154, 74, 11, 255, 157, 76, 4, 255, 159, 78, 0, 255, 159, 76, 8, 255, 160, 78, 6, 255, 164, 81, 9, 255, 164, 79, 11, 255, 163, 82, 11, 255, 158, 79, 16, 255, 160, 82, 17, 255, 159, 80, 19, 255, 162, 80, 19, 255, 168, 88, 17, 255, 153, 82, 17, 255, 143, 78, 23, 255, 154, 82, 18, 255, 163, 88, 13, 255, 168, 92, 15, 255, 167, 89, 10, 255, 158, 89, 13, 255, 149, 87, 22, 255, 149, 91, 20, 255, 151, 91, 14, 255, 147, 80, 31, 255, 143, 87, 21, 255, 128, 83, 17, 255, 103, 75, 28, 255, 81, 75, 15, 255, 78, 72, 26, 255, 91, 78, 17, 255, 99, 76, 33, 255, 93, 73, 27, 255, 87, 82, 15, 255, 87, 81, 18, 255, 86, 78, 24, 255, 88, 78, 25, 255, 86, 81, 28, 255, 88, 81, 28, 255, 92, 82, 31, 255, 98, 87, 13, 255, 98, 80, 21, 255, 99, 86, 11, 255, 98, 86, 24, 255, 102, 80, 24, 255, 101, 84, 21, 255, 106, 87, 5, 255, 102, 83, 13, 255, 100, 83, 23, 255, 101, 86, 15, 255, 97, 81, 23, 255, 101, 83, 14, 255, 102, 85, 13, 255, 104, 85, 10, 255, 107, 82, 22, 255, 103, 79, 19, 255, 103, 85, 10, 255, 96, 81, 14, 255, 92, 82, 2, 255, 99, 80, 7, 255, 104, 78, 19, 255, 97, 76, 19, 255, 96, 76, 10, 255, 104, 75, 11, 255, 104, 72, 16, 255, 102, 74, 10, 255, 102, 75, 11, 255, 103, 74, 11, 255, 102, 73, 9, 255, 102, 73, 15, 255, 103, 76, 3, 255, 103, 73, 9, 255, 99, 72, 11, 255, 99, 72, 9, 255, 100, 70, 5, 255, 101, 69, 6, 255, 103, 69, 4, 255, 100, 65, 16, 255, 99, 59, 14, 255, 94, 64, 6, 255, 95, 64, 9, 255, 107, 64, 8, 255, 106, 67, 0, 255, 103, 64, 3, 255, 102, 63, 9, 255, 109, 67, 6, 255, 119, 64, 4, 255, 116, 65, 10, 255, 102, 59, 4, 255, 100, 61, 2, 255, 104, 63, 1, 255, 113, 60, 8, 255, 117, 64, 4, 255, 102, 56, 4, 255, 113, 62, 13, 255, 120, 63, 2, 255, 111, 62, 6, 255, 110, 61, 3, 255, 106, 60, 2, 255, 98, 60, 5, 255, 96, 55, 1, 255, 99, 52, 9, 255, 108, 58, 6, 255, 112, 68, 0, 255, 113, 68, 5, 255, 114, 64, 8, 255, 116, 67, 3, 255, 118, 69, 3, 255, 117, 69, 7, 255, 114, 67, 1, 255, 114, 66, 5, 255, 114, 68, 6, 255, 115, 67, 3, 255, 120, 69, 6, 255, 123, 72, 2, 255, 121, 71, 2, 255, 121, 70, 3, 255, 119, 68, 4, 255, 115, 64, 2, 255, 114, 59, 5, 255, 112, 55, 7, 255, 109, 50, 11, 255, 110, 54, 6, 255, 115, 54, 3, 255, 108, 53, 1, 255, 112, 58, 4, 255, 110, 50, 6, 255, 103, 51, 2, 255, 99, 50, 2, 255, 97, 43, 8, 255, 110, 53, 8, 255, 120, 60, 2, 255, 120, 58, 0, 255, 125, 60, 6, 255, 128, 62, 7, 255, 126, 62, 1, 255, 125, 60, 0, 255, 121, 55, 2, 255, 116, 53, 1, 255, 115, 54, 0, 255, 112, 55, 0, 255, 112, 51, 1, 255, 115, 51, 4, 255, 117, 53, 6, 255, 111, 49, 2, 255, 107, 46, 1, 255, 110, 48, 4, 255, 108, 47, 2, 255, 120, 53, 3, 255, 129, 55, 2, 255, 117, 52, 0, 255, 108, 45, 3, 255, 107, 36, 6, 255, 104, 40, 3, 255, 100, 33, 2, 255, 93, 28, 4, 255, 86, 29, 4, 255, 90, 33, 4, 255, 97, 31, 1, 255, 110, 33, 4, 255, 111, 35, 3, 255, 114, 40, 0, 255, 128, 45, 4, 255, 145, 44, 7, 255, 142, 48, 7, 255, 138, 43, 2, 255, 116, 37, 4, 255, 108, 29, 4, 255, 113, 33, 2, 255, 106, 29, 0, 255, 101, 27, 5, 255, 107, 32, 3, 255, 111, 33, 1, 255, 113, 29, 1, 255, 116, 30, 3, 255, 116, 29, 3, 255, 115, 28, 1, 255, 119, 32, 4, 255, 117, 31, 3, 255, 115, 30, 2, 255, 114, 29, 2, 255, 116, 32, 4, 255, 110, 30, 2, 255, 106, 28, 2, 255, 103, 25, 1, 255, 106, 27, 4, 255, 108, 30, 3, 255, 109, 29, 2, 255, 104, 23, 3, 255, 93, 17, 1, 255, 92, 24, 1, 255, 92, 23, 4, 255, 88, 22, 2, 255, 86, 24, 1, 255, 85, 23, 5, 255, 63, 17, 3, 255, 54, 15, 2, 255, 70, 19, 8, 255, 71, 18, 3, 255, 65, 22, 1, 255, 67, 21, 1, 255, 67, 19, 5, 255, 62, 17, 5, 255, 58, 17, 3, 255, 60, 19, 3, 255, 66, 19, 4, 255, 70, 17, 2, 255, 74, 18, 2, 255, 73, 20, 4, 255, 65, 17, 1, 255, 69, 23, 5, 255, 69, 20, 1, 255, 74, 19, 1, 255, 76, 19, 2, 255, 74, 19, 4, 255, 79, 23, 2, 255, 89, 28, 1, 255, 113, 33, 2, 255, 117, 43, 4, 255, 121, 50, 2, 255, 127, 53, 2, 255, 125, 48, 0, 255, 128, 52, 4, 255, 125, 54, 4, 255, 127, 53, 4, 255, 131, 52, 2, 255, 131, 53, 1, 255, 132, 52, 0, 255, 138, 56, 2, 255, 137, 51, 1, 255, 134, 50, 3, 255, 132, 50, 2, 255, 131, 53, 3, 255, 45, 70, 26, 255, 49, 70, 24, 255, 44, 64, 26, 255, 36, 61, 10, 255, 37, 56, 14, 255, 40, 43, 17, 255, 39, 36, 8, 255, 38, 35, 10, 255, 30, 28, 8, 255, 25, 22, 7, 255, 24, 22, 7, 255, 23, 22, 5, 255, 21, 17, 3, 255, 24, 15, 6, 255, 15, 15, 2, 255, 17, 14, 2, 255, 20, 16, 5, 255, 16, 14, 3, 255, 25, 17, 3, 255, 31, 18, 6, 255, 28, 14, 4, 255, 28, 15, 1, 255, 29, 16, 3, 255, 22, 9, 5, 255, 23, 10, 4, 255, 28, 16, 2, 255, 30, 16, 4, 255, 25, 16, 2, 255, 24, 15, 3, 255, 27, 18, 4, 255, 29, 16, 2, 255, 33, 15, 3, 255, 34, 17, 6, 255, 38, 22, 2, 255, 35, 22, 3, 255, 29, 23, 7, 255, 36, 23, 4, 255, 52, 29, 5, 255, 53, 47, 15, 255, 46, 46, 30, 255, 53, 46, 28, 255, 56, 44, 8, 255, 63, 39, 10, 255, 56, 33, 7, 255, 42, 28, 2, 255, 50, 29, 7, 255, 50, 31, 7, 255, 66, 54, 21, 255, 79, 61, 25, 255, 72, 56, 33, 255, 68, 60, 44, 255, 83, 66, 54, 255, 85, 65, 36, 255, 76, 61, 37, 255, 85, 65, 38, 255, 82, 61, 6, 255, 76, 50, 17, 255, 62, 47, 25, 255, 64, 41, 7, 255, 68, 48, 6, 255, 76, 55, 15, 255, 84, 54, 17, 255, 74, 52, 9, 255, 78, 38, 4, 255, 80, 49, 7, 255, 81, 44, 4, 255, 84, 37, 3, 255, 86, 36, 2, 255, 85, 37, 1, 255, 87, 40, 3, 255, 86, 37, 4, 255, 87, 39, 4, 255, 87, 39, 1, 255, 88, 41, 3, 255, 91, 45, 4, 255, 86, 42, 1, 255, 85, 42, 2, 255, 86, 40, 5, 255, 86, 36, 1, 255, 94, 38, 3, 255, 94, 37, 3, 255, 91, 40, 3, 255, 86, 40, 2, 255, 84, 46, 2, 255, 89, 40, 0, 255, 89, 38, 0, 255, 85, 41, 2, 255, 85, 39, 2, 255, 85, 39, 2, 255, 85, 42, 3, 255, 89, 43, 1, 255, 92, 41, 2, 255, 94, 42, 2, 255, 90, 39, 0, 255, 88, 39, 1, 255, 87, 38, 0, 255, 90, 37, 3, 255, 93, 40, 7, 255, 88, 34, 2, 255, 90, 37, 4, 255, 92, 40, 2, 255, 93, 40, 2, 255, 95, 42, 3, 255, 92, 37, 1, 255, 92, 38, 3, 255, 88, 35, 4, 255, 88, 37, 4, 255, 93, 40, 3, 255, 101, 43, 4, 255, 101, 40, 3, 255, 90, 37, 4, 255, 91, 38, 1, 255, 102, 41, 2, 255, 103, 40, 4, 255, 91, 38, 3, 255, 93, 40, 5, 255, 86, 37, 1, 255, 91, 40, 2, 255, 97, 38, 1, 255, 96, 39, 2, 255, 95, 42, 5, 255, 92, 37, 2, 255, 97, 41, 6, 255, 96, 44, 7, 255, 86, 40, 1, 255, 83, 42, 1, 255, 84, 41, 1, 255, 86, 40, 2, 255, 77, 38, 2, 255, 74, 39, 4, 255, 79, 40, 5, 255, 90, 46, 4, 255, 122, 59, 10, 255, 140, 58, 4, 255, 143, 60, 0, 255, 139, 60, 2, 255, 131, 58, 5, 255, 127, 56, 4, 255, 131, 54, 3, 255, 134, 53, 3, 255, 138, 56, 6, 255, 144, 62, 7, 255, 148, 61, 3, 255, 150, 57, 1, 255, 145, 61, 4, 255, 139, 59, 6, 255, 134, 54, 4, 255, 130, 51, 8, 255, 125, 57, 1, 255, 136, 64, 6, 255, 152, 67, 5, 255, 141, 66, 0, 255, 141, 66, 6, 255, 143, 63, 5, 255, 135, 62, 8, 255, 130, 57, 16, 255, 141, 61, 5, 255, 138, 61, 4, 255, 126, 59, 4, 255, 123, 57, 13, 255, 133, 60, 6, 255, 147, 71, 5, 255, 155, 70, 14, 255, 157, 71, 6, 255, 158, 71, 13, 255, 158, 76, 10, 255, 154, 75, 6, 255, 160, 78, 10, 255, 160, 75, 14, 255, 162, 79, 13, 255, 161, 77, 5, 255, 156, 74, 6, 255, 158, 82, 20, 255, 165, 80, 19, 255, 159, 78, 11, 255, 153, 82, 12, 255, 156, 83, 21, 255, 154, 79, 17, 255, 158, 79, 15, 255, 157, 76, 12, 255, 160, 81, 15, 255, 151, 80, 17, 255, 144, 75, 27, 255, 155, 84, 18, 255, 161, 88, 19, 255, 151, 85, 17, 255, 143, 87, 14, 255, 141, 86, 21, 255, 141, 82, 23, 255, 129, 77, 18, 255, 108, 80, 17, 255, 108, 82, 20, 255, 97, 73, 25, 255, 91, 78, 15, 255, 78, 77, 17, 255, 74, 77, 18, 255, 76, 78, 19, 255, 78, 74, 38, 255, 79, 75, 27, 255, 83, 81, 14, 255, 89, 84, 17, 255, 89, 82, 15, 255, 88, 80, 19, 255, 89, 81, 29, 255, 90, 83, 23, 255, 97, 85, 13, 255, 96, 84, 7, 255, 96, 82, 16, 255, 97, 85, 24, 255, 100, 88, 19, 255, 100, 84, 20, 255, 101, 82, 27, 255, 96, 82, 26, 255, 101, 87, 16, 255, 101, 80, 28, 255, 93, 78, 26, 255, 96, 83, 17, 255, 104, 85, 19, 255, 104, 83, 22, 255, 104, 86, 14, 255, 105, 85, 14, 255, 103, 82, 13, 255, 101, 80, 18, 255, 99, 81, 16, 255, 101, 79, 22, 255, 96, 77, 17, 255, 97, 78, 19, 255, 98, 80, 16, 255, 95, 75, 16, 255, 101, 77, 12, 255, 108, 78, 9, 255, 104, 73, 17, 255, 101, 74, 14, 255, 105, 75, 8, 255, 102, 71, 8, 255, 105, 74, 10, 255, 109, 71, 12, 255, 109, 71, 10, 255, 107, 69, 11, 255, 108, 71, 13, 255, 107, 73, 10, 255, 103, 70, 10, 255, 101, 75, 3, 255, 100, 67, 6, 255, 98, 66, 9, 255, 99, 66, 11, 255, 100, 64, 4, 255, 104, 64, 10, 255, 105, 65, 8, 255, 99, 62, 9, 255, 100, 64, 9, 255, 107, 64, 5, 255, 116, 66, 7, 255, 116, 61, 5, 255, 119, 65, 7, 255, 112, 61, 1, 255, 106, 60, 6, 255, 109, 62, 4, 255, 111, 61, 5, 255, 110, 59, 5, 255, 108, 57, 2, 255, 111, 61, 6, 255, 114, 62, 5, 255, 112, 60, 1, 255, 114, 59, 2, 255, 109, 56, 5, 255, 99, 51, 3, 255, 100, 56, 5, 255, 99, 54, 1, 255, 103, 53, 5, 255, 100, 51, 12, 255, 90, 51, 2, 255, 91, 50, 1, 255, 102, 49, 8, 255, 104, 55, 7, 255, 107, 62, 4, 255, 112, 64, 6, 255, 115, 64, 7, 255, 112, 59, 4, 255, 110, 59, 7, 255, 107, 58, 5, 255, 107, 58, 6, 255, 113, 63, 4, 255, 115, 66, 0, 255, 124, 74, 6, 255, 120, 67, 9, 255, 111, 54, 9, 255, 110, 54, 3, 255, 103, 50, 5, 255, 103, 53, 1, 255, 95, 47, 2, 255, 104, 53, 6, 255, 110, 56, 0, 255, 119, 62, 4, 255, 109, 53, 3, 255, 113, 60, 3, 255, 112, 57, 6, 255, 109, 53, 7, 255, 114, 57, 1, 255, 115, 59, 4, 255, 111, 53, 3, 255, 119, 53, 3, 255, 120, 59, 4, 255, 121, 62, 2, 255, 127, 61, 1, 255, 122, 60, 1, 255, 124, 58, 3, 255, 125, 52, 1, 255, 124, 56, 3, 255, 120, 55, 3, 255, 115, 49, 4, 255, 109, 43, 3, 255, 108, 46, 3, 255, 105, 45, 3, 255, 101, 39, 1, 255, 109, 41, 1, 255, 118, 48, 5, 255, 113, 49, 7, 255, 102, 40, 2, 255, 104, 37, 3, 255, 108, 41, 6, 255, 96, 34, 2, 255, 89, 31, 1, 255, 98, 34, 4, 255, 102, 36, 5, 255, 96, 34, 2, 255, 95, 29, 3, 255, 95, 28, 4, 255, 93, 29, 1, 255, 100, 27, 2, 255, 106, 27, 3, 255, 119, 33, 7, 255, 124, 32, 4, 255, 110, 34, 2, 255, 110, 32, 2, 255, 117, 28, 3, 255, 115, 28, 4, 255, 106, 25, 2, 255, 110, 28, 2, 255, 118, 30, 5, 255, 115, 26, 2, 255, 114, 27, 2, 255, 113, 29, 1, 255, 115, 31, 2, 255, 117, 32, 3, 255, 115, 28, 0, 255, 117, 32, 2, 255, 115, 32, 4, 255, 114, 29, 1, 255, 112, 29, 1, 255, 107, 28, 2, 255, 104, 28, 5, 255, 102, 25, 1, 255, 110, 26, 2, 255, 108, 26, 3, 255, 101, 23, 3, 255, 91, 19, 0, 255, 90, 23, 1, 255, 95, 20, 1, 255, 92, 19, 0, 255, 88, 24, 2, 255, 86, 25, 4, 255, 71, 13, 0, 255, 58, 14, 5, 255, 53, 16, 8, 255, 70, 15, 3, 255, 73, 24, 0, 255, 63, 21, 1, 255, 57, 18, 2, 255, 62, 18, 3, 255, 61, 15, 2, 255, 54, 16, 1, 255, 63, 19, 2, 255, 70, 20, 2, 255, 68, 18, 4, 255, 65, 17, 4, 255, 69, 21, 3, 255, 69, 21, 1, 255, 71, 19, 2, 255, 70, 19, 6, 255, 69, 16, 2, 255, 71, 20, 1, 255, 73, 20, 3, 255, 87, 24, 1, 255, 109, 36, 1, 255, 121, 45, 4, 255, 120, 43, 2, 255, 122, 45, 3, 255, 126, 49, 1, 255, 124, 45, 1, 255, 126, 51, 3, 255, 125, 52, 3, 255, 124, 50, 1, 255, 130, 50, 2, 255, 131, 49, 0, 255, 133, 51, 2, 255, 132, 51, 1, 255, 128, 51, 3, 255, 129, 48, 1, 255, 129, 49, 2, 255, 37, 69, 16, 255, 48, 69, 8, 255, 49, 61, 14, 255, 39, 50, 16, 255, 31, 41, 12, 255, 32, 39, 7, 255, 31, 33, 5, 255, 26, 26, 5, 255, 24, 22, 4, 255, 24, 20, 8, 255, 21, 15, 4, 255, 22, 14, 3, 255, 21, 15, 4, 255, 17, 14, 3, 255, 20, 14, 2, 255, 23, 11, 2, 255, 24, 14, 5, 255, 18, 13, 3, 255, 24, 13, 2, 255, 26, 17, 6, 255, 29, 15, 6, 255, 27, 13, 2, 255, 25, 16, 0, 255, 25, 15, 0, 255, 28, 18, 3, 255, 32, 19, 2, 255, 36, 19, 3, 255, 32, 19, 3, 255, 31, 15, 2, 255, 36, 16, 4, 255, 41, 18, 3, 255, 37, 21, 1, 255, 38, 22, 1, 255, 33, 17, 3, 255, 30, 17, 2, 255, 37, 21, 5, 255, 29, 20, 4, 255, 36, 24, 5, 255, 68, 43, 9, 255, 60, 43, 18, 255, 58, 48, 24, 255, 57, 44, 10, 255, 50, 38, 6, 255, 57, 38, 8, 255, 53, 33, 4, 255, 47, 27, 1, 255, 63, 37, 10, 255, 73, 53, 26, 255, 79, 56, 35, 255, 77, 59, 32, 255, 83, 65, 36, 255, 92, 62, 43, 255, 80, 65, 38, 255, 79, 64, 33, 255, 91, 64, 28, 255, 90, 63, 9, 255, 67, 47, 10, 255, 58, 47, 22, 255, 65, 46, 9, 255, 63, 47, 7, 255, 72, 57, 26, 255, 76, 65, 19, 255, 65, 58, 18, 255, 73, 48, 4, 255, 84, 49, 4, 255, 82, 44, 1, 255, 81, 41, 2, 255, 82, 41, 3, 255, 82, 39, 2, 255, 86, 41, 5, 255, 90, 41, 4, 255, 92, 41, 2, 255, 100, 45, 5, 255, 99, 43, 4, 255, 96, 42, 0, 255, 99, 50, 5, 255, 92, 48, 2, 255, 94, 49, 5, 255, 97, 47, 4, 255, 100, 45, 2, 255, 102, 47, 3, 255, 102, 50, 6, 255, 99, 51, 5, 255, 95, 51, 1, 255, 101, 46, 2, 255, 101, 45, 3, 255, 97, 51, 4, 255, 97, 52, 5, 255, 93, 48, 1, 255, 92, 45, 1, 255, 97, 43, 3, 255, 93, 39, 2, 255, 95, 40, 3, 255, 91, 40, 1, 255, 95, 42, 5, 255, 96, 40, 3, 255, 90, 46, 1, 255, 90, 40, 1, 255, 93, 39, 1, 255, 95, 41, 2, 255, 95, 42, 2, 255, 97, 45, 3, 255, 96, 43, 7, 255, 93, 43, 2, 255, 96, 44, 0, 255, 95, 42, 3, 255, 97, 43, 4, 255, 99, 41, 1, 255, 103, 40, 3, 255, 104, 40, 3, 255, 97, 41, 2, 255, 96, 42, 6, 255, 96, 39, 7, 255, 95, 40, 2, 255, 90, 43, 3, 255, 92, 39, 3, 255, 88, 40, 2, 255, 92, 40, 2, 255, 103, 42, 6, 255, 98, 43, 4, 255, 92, 42, 3, 255, 95, 41, 4, 255, 92, 37, 1, 255, 91, 37, 1, 255, 89, 39, 2, 255, 87, 40, 1, 255, 92, 44, 5, 255, 95, 42, 4, 255, 93, 43, 3, 255, 87, 43, 0, 255, 98, 49, 7, 255, 103, 49, 7, 255, 105, 45, 2, 255, 103, 44, 1, 255, 106, 51, 3, 255, 120, 58, 8, 255, 129, 56, 2, 255, 142, 59, 3, 255, 143, 61, 7, 255, 142, 63, 9, 255, 141, 57, 3, 255, 148, 63, 4, 255, 143, 64, 0, 255, 142, 62, 4, 255, 142, 64, 4, 255, 138, 57, 11, 255, 129, 53, 9, 255, 137, 54, 1, 255, 135, 58, 10, 255, 139, 65, 8, 255, 152, 67, 7, 255, 150, 65, 3, 255, 153, 70, 1, 255, 146, 60, 12, 255, 132, 57, 12, 255, 135, 67, 8, 255, 136, 64, 3, 255, 136, 61, 7, 255, 132, 62, 8, 255, 131, 61, 11, 255, 140, 59, 10, 255, 151, 70, 15, 255, 156, 67, 11, 255, 157, 71, 10, 255, 153, 76, 15, 255, 158, 72, 8, 255, 162, 74, 19, 255, 163, 78, 7, 255, 163, 81, 1, 255, 157, 79, 15, 255, 158, 78, 15, 255, 155, 74, 7, 255, 160, 77, 15, 255, 158, 76, 17, 255, 149, 77, 8, 255, 146, 80, 12, 255, 141, 75, 15, 255, 146, 74, 13, 255, 152, 76, 25, 255, 147, 80, 19, 255, 153, 84, 11, 255, 149, 79, 16, 255, 148, 80, 24, 255, 149, 80, 17, 255, 139, 75, 20, 255, 129, 80, 21, 255, 117, 75, 35, 255, 117, 78, 27, 255, 116, 79, 20, 255, 87, 71, 20, 255, 69, 75, 27, 255, 86, 78, 20, 255, 83, 76, 14, 255, 79, 74, 28, 255, 76, 74, 31, 255, 81, 78, 18, 255, 85, 75, 24, 255, 90, 79, 25, 255, 90, 79, 25, 255, 93, 80, 34, 255, 97, 84, 22, 255, 99, 86, 15, 255, 96, 82, 24, 255, 95, 82, 33, 255, 92, 83, 20, 255, 94, 89, 19, 255, 98, 88, 19, 255, 95, 81, 29, 255, 94, 85, 14, 255, 94, 84, 27, 255, 93, 82, 30, 255, 96, 81, 15, 255, 99, 87, 14, 255, 99, 80, 28, 255, 103, 81, 24, 255, 104, 86, 29, 255, 99, 82, 17, 255, 106, 83, 23, 255, 105, 84, 18, 255, 105, 83, 22, 255, 104, 82, 31, 255, 103, 82, 21, 255, 102, 80, 18, 255, 104, 81, 19, 255, 102, 74, 24, 255, 103, 80, 16, 255, 100, 78, 23, 255, 96, 77, 12, 255, 100, 77, 12, 255, 108, 78, 13, 255, 108, 78, 7, 255, 101, 74, 17, 255, 99, 72, 15, 255, 107, 75, 10, 255, 107, 77, 12, 255, 102, 73, 8, 255, 107, 71, 14, 255, 107, 70, 6, 255, 105, 73, 9, 255, 103, 71, 12, 255, 105, 72, 5, 255, 107, 69, 13, 255, 108, 68, 5, 255, 106, 65, 10, 255, 102, 65, 7, 255, 100, 66, 3, 255, 100, 65, 3, 255, 100, 61, 7, 255, 100, 61, 8, 255, 100, 62, 9, 255, 105, 64, 12, 255, 103, 64, 4, 255, 102, 61, 1, 255, 109, 64, 8, 255, 113, 64, 8, 255, 113, 61, 4, 255, 108, 58, 6, 255, 117, 65, 5, 255, 118, 62, 5, 255, 118, 62, 7, 255, 115, 62, 3, 255, 112, 58, 0, 255, 108, 59, 1, 255, 108, 57, 3, 255, 102, 51, 2, 255, 99, 52, 4, 255, 100, 57, 5, 255, 104, 55, 3, 255, 115, 56, 5, 255, 109, 52, 0, 255, 95, 51, 3, 255, 99, 52, 7, 255, 102, 50, 7, 255, 91, 43, 3, 255, 81, 42, 3, 255, 88, 50, 4, 255, 86, 45, 0, 255, 89, 47, 2, 255, 92, 49, 5, 255, 99, 51, 8, 255, 101, 50, 9, 255, 96, 52, 4, 255, 102, 61, 3, 255, 112, 60, 6, 255, 123, 63, 3, 255, 121, 63, 0, 255, 114, 61, 4, 255, 102, 53, 2, 255, 100, 52, 6, 255, 108, 59, 3, 255, 108, 56, 6, 255, 102, 52, 5, 255, 101, 50, 2, 255, 110, 52, 1, 255, 103, 50, 3, 255, 105, 56, 2, 255, 109, 53, 4, 255, 116, 54, 6, 255, 122, 59, 4, 255, 120, 59, 4, 255, 114, 54, 3, 255, 117, 51, 8, 255, 117, 54, 4, 255, 116, 56, 0, 255, 113, 55, 0, 255, 121, 55, 4, 255, 112, 49, 7, 255, 104, 45, 6, 255, 105, 44, 3, 255, 105, 45, 2, 255, 104, 46, 3, 255, 105, 45, 4, 255, 103, 43, 0, 255, 108, 48, 1, 255, 113, 50, 2, 255, 120, 50, 5, 255, 117, 47, 4, 255, 113, 46, 5, 255, 107, 41, 3, 255, 103, 36, 3, 255, 105, 41, 0, 255, 103, 39, 1, 255, 101, 35, 3, 255, 96, 29, 4, 255, 92, 28, 8, 255, 82, 25, 5, 255, 70, 22, 2, 255, 71, 24, 1, 255, 83, 28, 4, 255, 79, 23, 2, 255, 68, 22, 0, 255, 77, 22, 3, 255, 96, 27, 4, 255, 98, 27, 3, 255, 101, 26, 7, 255, 108, 25, 1, 255, 116, 32, 1, 255, 113, 31, 5, 255, 115, 29, 6, 255, 118, 31, 2, 255, 114, 29, 0, 255, 113, 31, 2, 255, 113, 32, 3, 255, 108, 29, 1, 255, 110, 33, 3, 255, 106, 26, 0, 255, 113, 28, 4, 255, 109, 26, 2, 255, 108, 25, 0, 255, 110, 27, 1, 255, 108, 30, 3, 255, 102, 26, 1, 255, 99, 27, 1, 255, 105, 27, 4, 255, 102, 24, 3, 255, 96, 22, 2, 255, 92, 21, 4, 255, 90, 23, 4, 255, 92, 21, 2, 255, 89, 22, 1, 255, 83, 25, 3, 255, 78, 21, 1, 255, 73, 20, 5, 255, 58, 16, 4, 255, 42, 10, 0, 255, 60, 17, 3, 255, 62, 13, 4, 255, 57, 17, 3, 255, 60, 16, 4, 255, 62, 14, 4, 255, 62, 18, 3, 255, 60, 19, 2, 255, 64, 20, 2, 255, 67, 18, 1, 255, 66, 17, 2, 255, 64, 15, 2, 255, 69, 18, 3, 255, 70, 19, 3, 255, 65, 18, 4, 255, 64, 20, 5, 255, 66, 18, 4, 255, 64, 18, 3, 255, 68, 17, 4, 255, 91, 31, 3, 255, 112, 43, 5, 255, 121, 46, 3, 255, 125, 47, 5, 255, 126, 48, 7, 255, 124, 48, 1, 255, 123, 46, 2, 255, 126, 48, 1, 255, 128, 52, 2, 255, 126, 49, 1, 255, 129, 50, 2, 255, 131, 51, 3, 255, 130, 53, 4, 255, 126, 52, 2, 255, 128, 51, 3, 255, 127, 50, 2, 255, 127, 52, 3, 255, 41, 66, 18, 255, 42, 55, 17, 255, 45, 52, 7, 255, 36, 41, 4, 255, 29, 32, 13, 255, 28, 28, 8, 255, 22, 24, 1, 255, 23, 25, 5, 255, 22, 19, 4, 255, 25, 17, 7, 255, 22, 12, 4, 255, 21, 11, 4, 255, 22, 12, 4, 255, 23, 13, 3, 255, 19, 16, 3, 255, 17, 15, 2, 255, 19, 13, 3, 255, 16, 10, 2, 255, 22, 17, 5, 255, 20, 14, 4, 255, 28, 15, 6, 255, 23, 13, 3, 255, 28, 15, 4, 255, 47, 19, 4, 255, 44, 18, 4, 255, 30, 14, 4, 255, 26, 13, 3, 255, 26, 15, 2, 255, 31, 17, 2, 255, 41, 17, 4, 255, 39, 19, 5, 255, 35, 19, 5, 255, 34, 19, 8, 255, 31, 18, 3, 255, 31, 20, 2, 255, 31, 19, 5, 255, 35, 14, 3, 255, 59, 28, 8, 255, 61, 37, 13, 255, 58, 44, 25, 255, 53, 50, 19, 255, 59, 48, 11, 255, 67, 40, 12, 255, 69, 43, 8, 255, 59, 40, 1, 255, 45, 28, 0, 255, 61, 34, 10, 255, 68, 48, 23, 255, 69, 52, 24, 255, 71, 57, 23, 255, 80, 63, 34, 255, 84, 66, 46, 255, 82, 63, 42, 255, 96, 66, 33, 255, 85, 62, 25, 255, 73, 56, 19, 255, 66, 49, 18, 255, 77, 48, 19, 255, 73, 46, 9, 255, 65, 48, 13, 255, 78, 60, 37, 255, 87, 65, 25, 255, 76, 58, 20, 255, 76, 52, 5, 255, 78, 52, 3, 255, 77, 46, 1, 255, 79, 41, 0, 255, 79, 40, 1, 255, 77, 39, 0, 255, 76, 40, 0, 255, 84, 39, 0, 255, 97, 47, 6, 255, 89, 42, 1, 255, 89, 42, 0, 255, 96, 48, 2, 255, 98, 50, 4, 255, 99, 50, 2, 255, 96, 51, 1, 255, 100, 52, 1, 255, 103, 53, 1, 255, 107, 55, 3, 255, 105, 52, 1, 255, 106, 55, 2, 255, 101, 58, 2, 255, 106, 55, 2, 255, 109, 55, 3, 255, 108, 59, 5, 255, 110, 59, 5, 255, 110, 57, 1, 255, 108, 55, 1, 255, 108, 56, 6, 255, 107, 53, 6, 255, 103, 49, 4, 255, 94, 45, 1, 255, 98, 49, 4, 255, 101, 52, 5, 255, 86, 47, 1, 255, 94, 47, 2, 255, 101, 45, 5, 255, 100, 41, 1, 255, 101, 44, 5, 255, 99, 45, 3, 255, 97, 46, 3, 255, 97, 46, 4, 255, 98, 43, 3, 255, 97, 43, 4, 255, 99, 45, 4, 255, 101, 42, 3, 255, 104, 43, 5, 255, 96, 41, 2, 255, 99, 44, 0, 255, 100, 44, 2, 255, 98, 41, 1, 255, 101, 41, 1, 255, 101, 40, 2, 255, 98, 39, 3, 255, 100, 42, 4, 255, 101, 40, 4, 255, 97, 36, 0, 255, 98, 39, 2, 255, 93, 40, 2, 255, 90, 39, 1, 255, 95, 42, 4, 255, 94, 40, 3, 255, 95, 43, 5, 255, 92, 41, 3, 255, 94, 42, 4, 255, 94, 39, 3, 255, 91, 42, 4, 255, 92, 43, 2, 255, 98, 46, 2, 255, 92, 47, 2, 255, 89, 46, 4, 255, 86, 42, 4, 255, 84, 39, 6, 255, 94, 46, 5, 255, 116, 56, 4, 255, 127, 50, 1, 255, 128, 54, 6, 255, 130, 58, 7, 255, 141, 57, 4, 255, 143, 63, 3, 255, 143, 66, 3, 255, 146, 63, 7, 255, 145, 63, 3, 255, 142, 60, 7, 255, 128, 60, 1, 255, 126, 60, 7, 255, 142, 66, 10, 255, 149, 67, 2, 255, 146, 63, 4, 255, 149, 67, 7, 255, 151, 72, 8, 255, 145, 65, 10, 255, 139, 63, 10, 255, 137, 66, 3, 255, 140, 63, 7, 255, 149, 65, 10, 255, 150, 67, 8, 255, 153, 70, 15, 255, 133, 61, 17, 255, 118, 56, 15, 255, 144, 74, 11, 255, 155, 73, 9, 255, 153, 74, 12, 255, 153, 77, 0, 255, 153, 76, 8, 255, 155, 75, 9, 255, 157, 74, 8, 255, 153, 71, 15, 255, 155, 71, 24, 255, 156, 76, 18, 255, 155, 81, 10, 255, 162, 78, 15, 255, 152, 74, 13, 255, 139, 74, 9, 255, 141, 75, 21, 255, 147, 76, 18, 255, 153, 80, 18, 255, 155, 80, 21, 255, 136, 73, 27, 255, 132, 74, 22, 255, 127, 75, 13, 255, 99, 66, 24, 255, 85, 68, 21, 255, 89, 71, 20, 255, 97, 71, 26, 255, 91, 70, 27, 255, 86, 78, 20, 255, 81, 74, 21, 255, 74, 72, 24, 255, 79, 74, 31, 255, 88, 78, 27, 255, 85, 80, 18, 255, 83, 75, 32, 255, 87, 77, 33, 255, 92, 81, 28, 255, 94, 83, 27, 255, 93, 82, 29, 255, 91, 78, 31, 255, 96, 83, 32, 255, 96, 82, 29, 255, 97, 83, 31, 255, 96, 84, 22, 255, 94, 86, 19, 255, 95, 86, 17, 255, 102, 86, 29, 255, 102, 83, 26, 255, 101, 83, 24, 255, 99, 84, 30, 255, 97, 87, 21, 255, 98, 84, 13, 255, 99, 88, 12, 255, 103, 88, 14, 255, 105, 84, 18, 255, 104, 84, 21, 255, 107, 84, 31, 255, 111, 85, 22, 255, 110, 86, 20, 255, 109, 84, 17, 255, 107, 86, 12, 255, 107, 84, 23, 255, 105, 81, 19, 255, 107, 80, 15, 255, 105, 82, 23, 255, 108, 82, 11, 255, 108, 75, 19, 255, 109, 78, 16, 255, 108, 80, 18, 255, 105, 77, 20, 255, 100, 72, 10, 255, 101, 74, 17, 255, 104, 76, 11, 255, 106, 72, 5, 255, 108, 76, 17, 255, 102, 73, 10, 255, 106, 74, 10, 255, 107, 72, 11, 255, 106, 69, 12, 255, 107, 69, 8, 255, 107, 68, 13, 255, 105, 66, 14, 255, 106, 69, 9, 255, 110, 69, 7, 255, 106, 65, 10, 255, 100, 62, 6, 255, 101, 62, 7, 255, 102, 64, 4, 255, 99, 62, 7, 255, 101, 60, 8, 255, 107, 61, 9, 255, 109, 64, 5, 255, 106, 62, 2, 255, 106, 58, 3, 255, 112, 62, 9, 255, 113, 62, 9, 255, 112, 58, 0, 255, 116, 63, 0, 255, 119, 63, 4, 255, 120, 59, 7, 255, 116, 56, 4, 255, 112, 58, 6, 255, 107, 59, 6, 255, 99, 55, 3, 255, 97, 54, 6, 255, 103, 56, 7, 255, 108, 55, 3, 255, 109, 56, 4, 255, 105, 56, 6, 255, 100, 52, 2, 255, 97, 49, 2, 255, 98, 49, 7, 255, 95, 45, 5, 255, 92, 47, 4, 255, 83, 43, 3, 255, 83, 43, 7, 255, 77, 39, 5, 255, 77, 37, 5, 255, 73, 34, 2, 255, 74, 38, 3, 255, 75, 39, 3, 255, 78, 37, 0, 255, 86, 43, 4, 255, 87, 40, 6, 255, 97, 44, 7, 255, 104, 48, 5, 255, 98, 44, 4, 255, 95, 48, 1, 255, 98, 46, 3, 255, 109, 56, 6, 255, 104, 51, 1, 255, 97, 47, 1, 255, 96, 47, 5, 255, 99, 50, 2, 255, 101, 48, 4, 255, 100, 49, 1, 255, 100, 48, 1, 255, 108, 51, 2, 255, 118, 55, 1, 255, 120, 55, 3, 255, 118, 52, 2, 255, 109, 46, 4, 255, 107, 48, 5, 255, 109, 45, 4, 255, 103, 43, 1, 255, 111, 47, 7, 255, 103, 41, 4, 255, 93, 40, 1, 255, 98, 39, 0, 255, 103, 41, 2, 255, 103, 44, 2, 255, 105, 45, 4, 255, 107, 40, 3, 255, 124, 50, 7, 255, 131, 55, 3, 255, 128, 54, 6, 255, 116, 45, 2, 255, 106, 41, 0, 255, 106, 39, 2, 255, 107, 35, 3, 255, 100, 37, 3, 255, 96, 33, 1, 255, 91, 29, 2, 255, 88, 31, 8, 255, 74, 23, 2, 255, 72, 21, 1, 255, 71, 25, 8, 255, 76, 30, 2, 255, 87, 27, 3, 255, 92, 28, 4, 255, 88, 31, 1, 255, 87, 24, 4, 255, 100, 26, 1, 255, 107, 27, 3, 255, 106, 30, 4, 255, 108, 30, 4, 255, 118, 33, 3, 255, 117, 32, 0, 255, 119, 33, 5, 255, 123, 34, 4, 255, 123, 35, 2, 255, 119, 30, 1, 255, 118, 30, 2, 255, 116, 30, 3, 255, 115, 32, 5, 255, 110, 28, 2, 255, 110, 24, 4, 255, 108, 25, 4, 255, 107, 24, 0, 255, 109, 27, 0, 255, 105, 26, 0, 255, 105, 29, 4, 255, 95, 25, 2, 255, 96, 25, 3, 255, 98, 24, 3, 255, 96, 25, 8, 255, 87, 21, 5, 255, 83, 18, 1, 255, 90, 20, 2, 255, 91, 22, 4, 255, 87, 24, 6, 255, 79, 17, 1, 255, 80, 19, 5, 255, 70, 18, 5, 255, 61, 19, 2, 255, 64, 23, 7, 255, 63, 19, 5, 255, 59, 19, 2, 255, 69, 20, 2, 255, 54, 18, 2, 255, 47, 18, 1, 255, 70, 18, 4, 255, 73, 18, 3, 255, 70, 18, 1, 255, 67, 19, 3, 255, 63, 16, 2, 255, 64, 18, 1, 255, 67, 18, 2, 255, 66, 18, 2, 255, 62, 17, 1, 255, 64, 16, 2, 255, 67, 18, 2, 255, 74, 19, 4, 255, 97, 33, 1, 255, 113, 43, 3, 255, 123, 49, 2, 255, 129, 50, 5, 255, 124, 43, 3, 255, 124, 46, 1, 255, 126, 48, 5, 255, 129, 49, 6, 255, 127, 48, 1, 255, 126, 47, 0, 255, 127, 49, 0, 255, 126, 48, 0, 255, 125, 49, 2, 255, 123, 51, 3, 255, 122, 50, 1, 255, 126, 50, 2, 255, 125, 48, 0, 255, 39, 57, 9, 255, 36, 43, 27, 255, 31, 35, 10, 255, 28, 31, 5, 255, 23, 23, 8, 255, 27, 22, 5, 255, 25, 22, 2, 255, 24, 20, 3, 255, 22, 15, 2, 255, 23, 14, 3, 255, 23, 14, 5, 255, 23, 13, 5, 255, 19, 11, 1, 255, 25, 15, 5, 255, 31, 16, 7, 255, 27, 12, 4, 255, 24, 11, 4, 255, 21, 11, 4, 255, 18, 11, 2, 255, 18, 10, 0, 255, 25, 13, 1, 255, 22, 17, 6, 255, 26, 20, 6, 255, 39, 18, 2, 255, 32, 18, 2, 255, 19, 14, 3, 255, 26, 15, 3, 255, 26, 14, 3, 255, 29, 18, 4, 255, 26, 17, 2, 255, 34, 17, 3, 255, 41, 21, 8, 255, 43, 17, 8, 255, 38, 15, 3, 255, 39, 21, 9, 255, 34, 22, 7, 255, 50, 23, 3, 255, 58, 22, 3, 255, 48, 37, 5, 255, 54, 53, 19, 255, 59, 53, 25, 255, 55, 49, 18, 255, 57, 39, 10, 255, 72, 41, 10, 255, 62, 36, 1, 255, 59, 31, 0, 255, 63, 30, 7, 255, 71, 50, 16, 255, 76, 58, 18, 255, 73, 56, 25, 255, 76, 60, 36, 255, 68, 60, 52, 255, 80, 62, 43, 255, 82, 64, 28, 255, 71, 60, 28, 255, 72, 55, 28, 255, 68, 52, 21, 255, 88, 51, 10, 255, 86, 49, 9, 255, 79, 58, 15, 255, 90, 69, 20, 255, 93, 65, 15, 255, 85, 60, 14, 255, 79, 55, 3, 255, 79, 51, 8, 255, 82, 46, 5, 255, 86, 41, 3, 255, 85, 39, 1, 255, 84, 42, 1, 255, 83, 43, 1, 255, 81, 44, 0, 255, 86, 48, 4, 255, 85, 42, 1, 255, 92, 46, 5, 255, 93, 48, 4, 255, 89, 47, 0, 255, 92, 50, 0, 255, 98, 50, 1, 255, 100, 53, 2, 255, 106, 57, 5, 255, 108, 56, 3, 255, 107, 55, 2, 255, 107, 55, 2, 255, 106, 57, 3, 255, 108, 56, 3, 255, 106, 53, 0, 255, 105, 55, 0, 255, 107, 60, 2, 255, 109, 62, 1, 255, 111, 60, 1, 255, 116, 61, 1, 255, 119, 57, 1, 255, 115, 51, 0, 255, 111, 53, 0, 255, 110, 59, 1, 255, 108, 61, 1, 255, 108, 59, 3, 255, 110, 55, 3, 255, 109, 47, 1, 255, 106, 45, 1, 255, 104, 50, 6, 255, 98, 48, 3, 255, 103, 50, 1, 255, 107, 48, 5, 255, 100, 43, 4, 255, 100, 47, 3, 255, 95, 42, 4, 255, 93, 41, 3, 255, 100, 49, 1, 255, 98, 45, 3, 255, 97, 40, 5, 255, 98, 42, 4, 255, 100, 46, 2, 255, 101, 47, 1, 255, 105, 48, 3, 255, 102, 43, 3, 255, 96, 37, 0, 255, 103, 41, 4, 255, 104, 41, 6, 255, 97, 40, 3, 255, 96, 43, 5, 255, 95, 42, 3, 255, 99, 43, 4, 255, 99, 41, 3, 255, 97, 42, 3, 255, 96, 43, 4, 255, 95, 43, 3, 255, 97, 42, 3, 255, 97, 41, 5, 255, 93, 43, 3, 255, 97, 42, 1, 255, 98, 44, 0, 255, 101, 45, 3, 255, 99, 47, 5, 255, 94, 49, 8, 255, 93, 48, 2, 255, 107, 55, 2, 255, 112, 52, 8, 255, 97, 47, 4, 255, 105, 49, 4, 255, 124, 50, 3, 255, 118, 56, 7, 255, 132, 57, 7, 255, 145, 58, 6, 255, 146, 62, 9, 255, 150, 65, 6, 255, 152, 69, 1, 255, 147, 68, 6, 255, 149, 65, 7, 255, 149, 64, 10, 255, 146, 65, 2, 255, 153, 65, 7, 255, 153, 66, 10, 255, 147, 69, 0, 255, 146, 68, 10, 255, 147, 66, 12, 255, 149, 65, 12, 255, 155, 66, 8, 255, 152, 67, 3, 255, 149, 70, 9, 255, 146, 72, 10, 255, 142, 69, 4, 255, 147, 72, 7, 255, 151, 72, 13, 255, 149, 73, 8, 255, 151, 73, 9, 255, 152, 77, 15, 255, 153, 76, 12, 255, 156, 76, 12, 255, 151, 76, 10, 255, 155, 76, 9, 255, 161, 77, 11, 255, 153, 75, 7, 255, 136, 71, 22, 255, 135, 69, 20, 255, 137, 77, 16, 255, 147, 72, 22, 255, 113, 71, 21, 255, 91, 64, 23, 255, 99, 70, 16, 255, 87, 62, 15, 255, 91, 63, 22, 255, 99, 72, 15, 255, 90, 67, 39, 255, 81, 70, 23, 255, 71, 73, 29, 255, 74, 74, 19, 255, 86, 71, 15, 255, 77, 75, 33, 255, 79, 77, 26, 255, 88, 78, 28, 255, 91, 79, 25, 255, 92, 78, 19, 255, 94, 81, 23, 255, 94, 82, 23, 255, 91, 80, 20, 255, 92, 82, 32, 255, 92, 83, 31, 255, 96, 84, 22, 255, 96, 84, 11, 255, 101, 86, 25, 255, 103, 85, 24, 255, 104, 83, 32, 255, 103, 82, 28, 255, 104, 83, 22, 255, 104, 86, 15, 255, 105, 85, 25, 255, 101, 85, 22, 255, 104, 85, 26, 255, 106, 84, 33, 255, 107, 87, 17, 255, 106, 91, 21, 255, 97, 87, 18, 255, 102, 88, 19, 255, 105, 84, 21, 255, 102, 81, 20, 255, 106, 85, 21, 255, 109, 85, 16, 255, 111, 85, 20, 255, 109, 82, 17, 255, 107, 83, 9, 255, 108, 84, 17, 255, 109, 86, 7, 255, 109, 80, 17, 255, 107, 79, 23, 255, 107, 77, 18, 255, 110, 80, 17, 255, 110, 82, 17, 255, 103, 76, 15, 255, 104, 74, 15, 255, 106, 77, 14, 255, 100, 73, 16, 255, 105, 75, 14, 255, 108, 73, 8, 255, 107, 74, 12, 255, 101, 71, 9, 255, 104, 70, 10, 255, 104, 71, 9, 255, 110, 71, 13, 255, 110, 68, 8, 255, 107, 69, 7, 255, 104, 70, 11, 255, 100, 70, 6, 255, 107, 68, 10, 255, 105, 65, 10, 255, 104, 65, 2, 255, 107, 67, 10, 255, 106, 65, 8, 255, 102, 60, 9, 255, 109, 63, 8, 255, 112, 62, 5, 255, 110, 59, 2, 255, 112, 61, 5, 255, 110, 61, 6, 255, 112, 62, 9, 255, 106, 58, 5, 255, 104, 57, 4, 255, 108, 57, 0, 255, 114, 59, 7, 255, 110, 56, 7, 255, 108, 57, 5, 255, 109, 59, 6, 255, 111, 58, 6, 255, 107, 59, 3, 255, 102, 56, 3, 255, 112, 56, 9, 255, 111, 46, 3, 255, 108, 50, 3, 255, 102, 54, 2, 255, 102, 54, 7, 255, 94, 51, 3, 255, 95, 47, 4, 255, 86, 43, 2, 255, 83, 47, 4, 255, 93, 45, 6, 255, 87, 39, 2, 255, 83, 39, 3, 255, 77, 42, 6, 255, 65, 38, 3, 255, 69, 37, 4, 255, 70, 35, 3, 255, 67, 35, 1, 255, 68, 34, 1, 255, 72, 29, 1, 255, 67, 30, 2, 255, 59, 30, 2, 255, 72, 36, 7, 255, 98, 47, 5, 255, 98, 44, 5, 255, 90, 40, 3, 255, 96, 49, 6, 255, 103, 51, 4, 255, 98, 46, 0, 255, 97, 50, 2, 255, 100, 46, 4, 255, 100, 44, 1, 255, 96, 46, 2, 255, 104, 50, 3, 255, 113, 53, 2, 255, 113, 47, 4, 255, 112, 48, 3, 255, 100, 47, 2, 255, 95, 46, 5, 255, 96, 41, 5, 255, 100, 38, 4, 255, 100, 44, 4, 255, 100, 40, 0, 255, 98, 38, 6, 255, 102, 36, 5, 255, 104, 34, 1, 255, 106, 40, 4, 255, 107, 43, 3, 255, 114, 42, 4, 255, 119, 46, 5, 255, 114, 48, 1, 255, 119, 46, 5, 255, 115, 41, 6, 255, 109, 40, 5, 255, 101, 39, 5, 255, 92, 33, 1, 255, 80, 26, 4, 255, 81, 27, 5, 255, 79, 27, 4, 255, 74, 28, 2, 255, 73, 28, 0, 255, 79, 30, 4, 255, 86, 29, 7, 255, 82, 30, 1, 255, 85, 27, 1, 255, 106, 35, 8, 255, 110, 37, 2, 255, 99, 30, 8, 255, 91, 26, 1, 255, 98, 31, 2, 255, 104, 38, 0, 255, 102, 28, 4, 255, 111, 25, 7, 255, 120, 30, 1, 255, 118, 33, 2, 255, 117, 29, 1, 255, 128, 38, 6, 255, 125, 33, 2, 255, 124, 30, 3, 255, 126, 32, 4, 255, 121, 29, 2, 255, 118, 29, 3, 255, 113, 27, 3, 255, 112, 26, 2, 255, 111, 27, 1, 255, 112, 29, 3, 255, 110, 29, 5, 255, 101, 25, 3, 255, 96, 22, 1, 255, 95, 22, 2, 255, 93, 21, 3, 255, 88, 19, 3, 255, 85, 19, 3, 255, 87, 22, 6, 255, 89, 24, 3, 255, 89, 24, 1, 255, 84, 21, 1, 255, 84, 21, 4, 255, 83, 22, 5, 255, 76, 22, 2, 255, 71, 23, 2, 255, 85, 30, 6, 255, 91, 33, 4, 255, 80, 30, 3, 255, 84, 24, 6, 255, 64, 18, 1, 255, 53, 20, 0, 255, 67, 15, 1, 255, 70, 18, 2, 255, 68, 20, 2, 255, 67, 20, 3, 255, 66, 18, 3, 255, 69, 18, 4, 255, 69, 17, 1, 255, 70, 20, 2, 255, 61, 16, 5, 255, 64, 15, 3, 255, 69, 18, 0, 255, 75, 19, 1, 255, 93, 27, 1, 255, 111, 38, 2, 255, 121, 44, 0, 255, 125, 43, 1, 255, 123, 41, 3, 255, 124, 45, 5, 255, 118, 38, 1, 255, 122, 41, 3, 255, 122, 44, 1, 255, 124, 47, 3, 255, 128, 48, 3, 255, 127, 46, 1, 255, 125, 46, 1, 255, 123, 48, 2, 255, 121, 50, 2, 255, 126, 49, 3, 255, 127, 47, 1, 255, 26, 42, 3, 255, 29, 37, 10, 255, 26, 26, 2, 255, 24, 20, 2, 255, 22, 19, 4, 255, 21, 18, 5, 255, 22, 14, 5, 255, 23, 13, 0, 255, 24, 14, 2, 255, 21, 13, 2, 255, 19, 10, 2, 255, 21, 13, 3, 255, 22, 13, 3, 255, 28, 11, 4, 255, 30, 13, 6, 255, 22, 10, 2, 255, 17, 8, 1, 255, 18, 9, 1, 255, 18, 14, 3, 255, 15, 13, 3, 255, 27, 14, 5, 255, 27, 11, 5, 255, 21, 11, 2, 255, 24, 12, 0, 255, 25, 13, 4, 255, 26, 15, 2, 255, 40, 20, 1, 255, 40, 19, 5, 255, 32, 16, 6, 255, 31, 19, 4, 255, 38, 22, 2, 255, 50, 23, 1, 255, 39, 19, 0, 255, 34, 18, 3, 255, 30, 17, 3, 255, 38, 21, 4, 255, 34, 25, 7, 255, 34, 29, 7, 255, 45, 35, 18, 255, 52, 46, 27, 255, 54, 52, 29, 255, 67, 51, 26, 255, 67, 44, 14, 255, 60, 44, 9, 255, 58, 40, 3, 255, 62, 31, 4, 255, 60, 29, 6, 255, 61, 44, 13, 255, 70, 50, 24, 255, 70, 52, 35, 255, 74, 62, 35, 255, 72, 63, 44, 255, 82, 65, 42, 255, 69, 62, 34, 255, 61, 56, 34, 255, 71, 56, 30, 255, 69, 50, 29, 255, 83, 48, 14, 255, 103, 62, 1, 255, 104, 67, 20, 255, 104, 68, 35, 255, 90, 65, 12, 255, 82, 61, 11, 255, 83, 53, 11, 255, 76, 44, 4, 255, 81, 46, 6, 255, 82, 43, 3, 255, 84, 46, 4, 255, 85, 44, 1, 255, 87, 44, 1, 255, 85, 42, 0, 255, 85, 43, 2, 255, 87, 44, 2, 255, 91, 45, 4, 255, 94, 47, 4, 255, 98, 51, 5, 255, 96, 50, 2, 255, 102, 53, 4, 255, 103, 52, 3, 255, 107, 56, 6, 255, 106, 54, 4, 255, 104, 53, 3, 255, 103, 54, 2, 255, 101, 51, 0, 255, 105, 58, 4, 255, 109, 59, 6, 255, 105, 56, 2, 255, 104, 61, 2, 255, 108, 61, 2, 255, 111, 59, 1, 255, 114, 58, 1, 255, 117, 53, 2, 255, 115, 48, 1, 255, 119, 55, 6, 255, 114, 59, 5, 255, 110, 60, 2, 255, 111, 61, 2, 255, 113, 59, 2, 255, 112, 53, 0, 255, 114, 54, 0, 255, 118, 61, 5, 255, 118, 61, 3, 255, 118, 62, 1, 255, 111, 53, 2, 255, 110, 52, 2, 255, 119, 67, 4, 255, 106, 57, 0, 255, 98, 48, 1, 255, 104, 55, 4, 255, 98, 51, 6, 255, 91, 42, 7, 255, 96, 48, 3, 255, 100, 50, 1, 255, 99, 47, 0, 255, 100, 48, 4, 255, 94, 45, 2, 255, 103, 45, 5, 255, 101, 46, 6, 255, 93, 45, 4, 255, 93, 40, 0, 255, 94, 41, 0, 255, 98, 45, 3, 255, 107, 47, 7, 255, 101, 41, 2, 255, 95, 39, 1, 255, 98, 45, 3, 255, 98, 45, 3, 255, 101, 46, 5, 255, 96, 43, 3, 255, 98, 45, 5, 255, 104, 42, 6, 255, 102, 42, 4, 255, 99, 42, 4, 255, 94, 46, 4, 255, 99, 51, 7, 255, 95, 47, 1, 255, 96, 49, 2, 255, 101, 47, 10, 255, 89, 40, 6, 255, 89, 41, 3, 255, 98, 48, 5, 255, 74, 44, 7, 255, 80, 42, 9, 255, 94, 48, 5, 255, 96, 49, 11, 255, 105, 49, 2, 255, 118, 54, 9, 255, 124, 58, 12, 255, 134, 62, 5, 255, 137, 63, 5, 255, 137, 64, 9, 255, 143, 65, 5, 255, 143, 64, 4, 255, 149, 69, 8, 255, 154, 66, 10, 255, 153, 66, 13, 255, 153, 69, 14, 255, 154, 69, 4, 255, 149, 65, 16, 255, 141, 70, 10, 255, 156, 72, 7, 255, 159, 75, 6, 255, 153, 68, 10, 255, 160, 73, 13, 255, 163, 76, 7, 255, 160, 78, 8, 255, 159, 77, 9, 255, 156, 75, 10, 255, 151, 77, 12, 255, 157, 83, 8, 255, 159, 77, 10, 255, 146, 75, 15, 255, 115, 67, 12, 255, 88, 59, 17, 255, 73, 56, 13, 255, 105, 73, 17, 255, 143, 76, 25, 255, 102, 68, 17, 255, 73, 67, 5, 255, 77, 64, 21, 255, 81, 70, 15, 255, 84, 64, 21, 255, 94, 67, 26, 255, 96, 72, 26, 255, 85, 67, 26, 255, 81, 71, 23, 255, 89, 77, 15, 255, 91, 72, 23, 255, 96, 79, 22, 255, 96, 74, 31, 255, 95, 78, 23, 255, 100, 82, 26, 255, 95, 81, 24, 255, 94, 78, 27, 255, 97, 83, 20, 255, 96, 83, 31, 255, 97, 85, 25, 255, 99, 82, 27, 255, 99, 83, 18, 255, 100, 85, 26, 255, 99, 87, 14, 255, 103, 91, 12, 255, 102, 85, 16, 255, 108, 87, 26, 255, 108, 83, 29, 255, 104, 84, 29, 255, 99, 86, 28, 255, 98, 89, 17, 255, 102, 88, 29, 255, 105, 88, 18, 255, 106, 83, 32, 255, 105, 84, 33, 255, 102, 90, 12, 255, 100, 84, 17, 255, 105, 84, 24, 255, 106, 87, 28, 255, 105, 86, 20, 255, 111, 88, 15, 255, 112, 88, 8, 255, 112, 82, 16, 255, 110, 81, 21, 255, 107, 83, 21, 255, 109, 84, 23, 255, 109, 81, 21, 255, 109, 79, 17, 255, 110, 78, 21, 255, 110, 80, 12, 255, 107, 79, 14, 255, 100, 73, 16, 255, 101, 75, 13, 255, 106, 75, 17, 255, 100, 72, 17, 255, 105, 75, 14, 255, 111, 74, 9, 255, 108, 72, 12, 255, 106, 74, 11, 255, 106, 72, 9, 255, 102, 69, 11, 255, 105, 69, 12, 255, 103, 68, 4, 255, 103, 69, 7, 255, 105, 70, 9, 255, 111, 71, 7, 255, 107, 69, 6, 255, 106, 67, 8, 255, 106, 67, 9, 255, 102, 62, 7, 255, 104, 62, 6, 255, 110, 63, 8, 255, 112, 63, 5, 255, 115, 65, 6, 255, 108, 61, 5, 255, 105, 63, 7, 255, 102, 60, 5, 255, 101, 56, 1, 255, 105, 58, 4, 255, 109, 61, 6, 255, 103, 59, 0, 255, 104, 59, 1, 255, 102, 54, 1, 255, 108, 60, 2, 255, 106, 58, 2, 255, 106, 55, 4, 255, 110, 56, 1, 255, 107, 56, 1, 255, 107, 58, 4, 255, 98, 49, 3, 255, 106, 53, 9, 255, 109, 52, 5, 255, 110, 50, 1, 255, 98, 53, 2, 255, 92, 51, 1, 255, 89, 47, 5, 255, 86, 44, 7, 255, 86, 43, 7, 255, 86, 44, 3, 255, 79, 42, 1, 255, 77, 40, 2, 255, 75, 39, 2, 255, 71, 38, 3, 255, 71, 35, 4, 255, 68, 35, 6, 255, 67, 36, 5, 255, 74, 34, 6, 255, 68, 35, 2, 255, 59, 34, 1, 255, 62, 32, 5, 255, 78, 36, 5, 255, 79, 37, 4, 255, 69, 36, 3, 255, 73, 38, 3, 255, 90, 40, 1, 255, 107, 48, 1, 255, 104, 48, 5, 255, 95, 43, 3, 255, 94, 44, 2, 255, 97, 44, 5, 255, 107, 47, 4, 255, 114, 50, 6, 255, 101, 41, 4, 255, 92, 41, 3, 255, 100, 42, 6, 255, 97, 36, 3, 255, 91, 38, 1, 255, 102, 38, 2, 255, 107, 41, 5, 255, 105, 39, 5, 255, 100, 39, 1, 255, 103, 39, 1, 255, 106, 40, 3, 255, 108, 45, 6, 255, 106, 44, 1, 255, 110, 43, 2, 255, 110, 41, 1, 255, 108, 41, 1, 255, 109, 43, 8, 255, 95, 30, 5, 255, 81, 21, 1, 255, 78, 26, 4, 255, 74, 28, 6, 255, 68, 26, 3, 255, 75, 31, 7, 255, 76, 28, 3, 255, 81, 30, 3, 255, 82, 31, 4, 255, 79, 30, 3, 255, 83, 24, 2, 255, 90, 34, 3, 255, 91, 35, 5, 255, 103, 31, 0, 255, 115, 37, 1, 255, 102, 31, 1, 255, 103, 36, 1, 255, 118, 31, 5, 255, 137, 41, 6, 255, 129, 44, 0, 255, 111, 38, 1, 255, 110, 35, 4, 255, 116, 31, 2, 255, 117, 32, 0, 255, 119, 35, 1, 255, 120, 33, 0, 255, 123, 34, 3, 255, 124, 35, 5, 255, 117, 30, 1, 255, 119, 31, 1, 255, 116, 28, 0, 255, 113, 27, 0, 255, 112, 28, 2, 255, 110, 27, 2, 255, 106, 26, 3, 255, 97, 22, 1, 255, 97, 20, 1, 255, 94, 20, 0, 255, 92, 22, 4, 255, 92, 21, 5, 255, 85, 16, 1, 255, 84, 21, 3, 255, 89, 25, 3, 255, 91, 24, 1, 255, 88, 22, 1, 255, 90, 22, 3, 255, 89, 23, 5, 255, 83, 23, 4, 255, 70, 20, 0, 255, 74, 27, 3, 255, 100, 26, 4, 255, 71, 16, 1, 255, 55, 10, 4, 255, 64, 16, 8, 255, 66, 16, 6, 255, 66, 16, 3, 255, 67, 20, 5, 255, 65, 19, 3, 255, 63, 17, 1, 255, 64, 17, 1, 255, 64, 15, 1, 255, 64, 16, 1, 255, 62, 18, 4, 255, 50, 9, 6, 255, 58, 13, 6, 255, 68, 21, 1, 255, 70, 19, 3, 255, 80, 22, 4, 255, 103, 31, 4, 255, 118, 42, 3, 255, 122, 42, 2, 255, 121, 39, 4, 255, 115, 35, 2, 255, 113, 35, 3, 255, 111, 35, 2, 255, 113, 38, 2, 255, 119, 44, 4, 255, 122, 43, 1, 255, 127, 46, 3, 255, 128, 47, 3, 255, 125, 49, 2, 255, 122, 50, 3, 255, 125, 48, 2, 255, 126, 48, 2, 255, 26, 30, 9, 255, 21, 24, 3, 255, 22, 24, 3, 255, 21, 20, 1, 255, 22, 19, 3, 255, 23, 15, 5, 255, 24, 12, 4, 255, 24, 13, 4, 255, 21, 11, 3, 255, 18, 9, 1, 255, 17, 9, 1, 255, 24, 13, 4, 255, 22, 12, 2, 255, 17, 10, 1, 255, 16, 10, 2, 255, 12, 13, 0, 255, 16, 13, 4, 255, 22, 10, 5, 255, 22, 10, 3, 255, 14, 13, 2, 255, 20, 10, 3, 255, 36, 18, 6, 255, 32, 18, 3, 255, 23, 12, 2, 255, 35, 19, 7, 255, 37, 17, 2, 255, 38, 18, 4, 255, 41, 19, 3, 255, 44, 22, 4, 255, 42, 25, 4, 255, 41, 19, 2, 255, 39, 17, 3, 255, 35, 18, 3, 255, 34, 20, 4, 255, 30, 15, 2, 255, 37, 18, 6, 255, 36, 20, 8, 255, 42, 31, 13, 255, 43, 36, 18, 255, 49, 49, 27, 255, 58, 54, 32, 255, 72, 58, 22, 255, 78, 56, 4, 255, 74, 46, 7, 255, 65, 40, 9, 255, 56, 31, 2, 255, 61, 28, 5, 255, 64, 44, 20, 255, 67, 52, 23, 255, 69, 55, 23, 255, 79, 64, 31, 255, 92, 63, 37, 255, 88, 64, 38, 255, 69, 57, 18, 255, 65, 63, 35, 255, 64, 68, 36, 255, 72, 53, 15, 255, 80, 55, 13, 255, 88, 59, 35, 255, 104, 69, 43, 255, 99, 63, 35, 255, 90, 65, 23, 255, 80, 56, 9, 255, 86, 50, 9, 255, 79, 49, 4, 255, 83, 49, 5, 255, 79, 40, 0, 255, 83, 41, 1, 255, 85, 42, 2, 255, 88, 44, 2, 255, 85, 42, 2, 255, 85, 43, 3, 255, 89, 48, 5, 255, 87, 45, 1, 255, 90, 46, 1, 255, 94, 48, 2, 255, 98, 50, 4, 255, 104, 53, 5, 255, 108, 55, 5, 255, 107, 55, 3, 255, 106, 56, 4, 255, 102, 54, 2, 255, 98, 54, 2, 255, 105, 59, 2, 255, 102, 58, 0, 255, 105, 57, 0, 255, 109, 57, 2, 255, 104, 59, 1, 255, 109, 59, 2, 255, 115, 56, 1, 255, 115, 57, 0, 255, 116, 53, 1, 255, 112, 48, 0, 255, 114, 54, 1, 255, 115, 57, 2, 255, 119, 61, 2, 255, 113, 59, 2, 255, 114, 58, 1, 255, 117, 60, 4, 255, 115, 60, 3, 255, 117, 62, 4, 255, 119, 61, 3, 255, 112, 57, 1, 255, 115, 62, 2, 255, 122, 65, 2, 255, 121, 64, 3, 255, 118, 65, 1, 255, 124, 70, 3, 255, 121, 61, 4, 255, 115, 56, 3, 255, 118, 69, 7, 255, 118, 68, 4, 255, 121, 65, 4, 255, 115, 58, 4, 255, 105, 54, 6, 255, 101, 50, 4, 255, 100, 45, 2, 255, 97, 41, 2, 255, 95, 44, 4, 255, 99, 45, 4, 255, 102, 45, 2, 255, 104, 44, 3, 255, 103, 40, 2, 255, 101, 42, 2, 255, 99, 44, 3, 255, 96, 44, 2, 255, 100, 45, 4, 255, 103, 43, 3, 255, 102, 46, 2, 255, 102, 49, 4, 255, 101, 45, 2, 255, 99, 47, 3, 255, 100, 46, 3, 255, 102, 44, 3, 255, 101, 48, 5, 255, 100, 47, 4, 255, 102, 48, 5, 255, 97, 46, 2, 255, 96, 45, 1, 255, 97, 48, 2, 255, 101, 51, 4, 255, 97, 50, 5, 255, 95, 50, 3, 255, 96, 51, 2, 255, 88, 50, 8, 255, 91, 47, 6, 255, 89, 43, 2, 255, 79, 41, 9, 255, 89, 46, 14, 255, 99, 52, 4, 255, 97, 51, 3, 255, 99, 52, 12, 255, 105, 54, 7, 255, 114, 58, 8, 255, 117, 53, 17, 255, 113, 54, 6, 255, 108, 58, 1, 255, 121, 59, 16, 255, 136, 69, 8, 255, 130, 65, 12, 255, 138, 62, 14, 255, 109, 58, 13, 255, 95, 57, 11, 255, 102, 58, 8, 255, 110, 60, 11, 255, 125, 65, 16, 255, 143, 73, 16, 255, 148, 73, 11, 255, 149, 77, 10, 255, 143, 74, 21, 255, 127, 67, 18, 255, 94, 60, 15, 255, 70, 59, 21, 255, 75, 61, 17, 255, 74, 66, 17, 255, 72, 59, 23, 255, 95, 71, 15, 255, 118, 68, 17, 255, 82, 68, 23, 255, 80, 67, 19, 255, 86, 70, 23, 255, 90, 71, 30, 255, 93, 69, 27, 255, 91, 69, 27, 255, 88, 75, 16, 255, 94, 77, 27, 255, 98, 74, 23, 255, 92, 74, 38, 255, 91, 78, 21, 255, 101, 75, 33, 255, 97, 76, 33, 255, 96, 81, 26, 255, 100, 83, 26, 255, 100, 82, 17, 255, 98, 78, 31, 255, 97, 83, 24, 255, 98, 85, 25, 255, 102, 85, 24, 255, 104, 87, 21, 255, 103, 88, 23, 255, 101, 86, 35, 255, 98, 85, 30, 255, 99, 85, 31, 255, 103, 86, 33, 255, 105, 88, 18, 255, 102, 87, 30, 255, 99, 88, 18, 255, 102, 90, 17, 255, 107, 88, 27, 255, 106, 87, 20, 255, 105, 82, 40, 255, 108, 84, 29, 255, 106, 86, 30, 255, 106, 86, 22, 255, 107, 85, 22, 255, 104, 84, 27, 255, 108, 87, 21, 255, 109, 87, 13, 255, 108, 82, 18, 255, 114, 82, 18, 255, 114, 84, 21, 255, 108, 85, 18, 255, 103, 80, 28, 255, 105, 78, 29, 255, 116, 83, 17, 255, 116, 80, 11, 255, 111, 75, 7, 255, 107, 76, 11, 255, 104, 79, 15, 255, 103, 79, 15, 255, 103, 73, 16, 255, 102, 72, 22, 255, 104, 74, 9, 255, 112, 76, 8, 255, 111, 73, 15, 255, 109, 72, 10, 255, 111, 73, 8, 255, 109, 71, 17, 255, 113, 69, 17, 255, 111, 69, 5, 255, 105, 69, 12, 255, 102, 67, 8, 255, 108, 68, 8, 255, 108, 68, 9, 255, 102, 62, 4, 255, 108, 67, 11, 255, 107, 68, 5, 255, 103, 62, 3, 255, 109, 62, 4, 255, 114, 62, 8, 255, 113, 63, 6, 255, 109, 60, 11, 255, 105, 57, 10, 255, 104, 58, 8, 255, 104, 59, 6, 255, 103, 59, 4, 255, 102, 56, 6, 255, 104, 57, 2, 255, 102, 55, 5, 255, 97, 52, 4, 255, 102, 57, 6, 255, 106, 55, 6, 255, 105, 54, 0, 255, 107, 55, 1, 255, 108, 52, 4, 255, 103, 49, 5, 255, 104, 54, 8, 255, 108, 54, 9, 255, 104, 48, 4, 255, 105, 52, 5, 255, 109, 54, 2, 255, 97, 49, 3, 255, 91, 44, 4, 255, 95, 43, 2, 255, 89, 42, 2, 255, 84, 39, 6, 255, 86, 39, 7, 255, 78, 41, 4, 255, 69, 40, 1, 255, 68, 36, 2, 255, 68, 31, 2, 255, 71, 35, 7, 255, 69, 34, 6, 255, 62, 34, 7, 255, 63, 36, 5, 255, 66, 34, 2, 255, 61, 29, 5, 255, 62, 34, 4, 255, 62, 29, 7, 255, 58, 31, 1, 255, 62, 33, 4, 255, 75, 34, 6, 255, 95, 46, 1, 255, 95, 42, 2, 255, 94, 42, 5, 255, 86, 41, 2, 255, 88, 41, 4, 255, 100, 43, 2, 255, 106, 41, 3, 255, 95, 34, 4, 255, 92, 38, 1, 255, 97, 36, 4, 255, 94, 35, 5, 255, 91, 35, 3, 255, 94, 37, 4, 255, 98, 33, 3, 255, 98, 32, 4, 255, 97, 38, 3, 255, 92, 33, 0, 255, 96, 36, 8, 255, 97, 34, 7, 255, 96, 31, 1, 255, 99, 33, 1, 255, 96, 34, 5, 255, 78, 26, 3, 255, 65, 25, 2, 255, 58, 25, 3, 255, 60, 24, 1, 255, 71, 28, 2, 255, 79, 29, 1, 255, 75, 26, 4, 255, 74, 29, 4, 255, 75, 29, 2, 255, 88, 33, 6, 255, 89, 28, 3, 255, 84, 24, 0, 255, 89, 29, 4, 255, 101, 35, 5, 255, 117, 42, 5, 255, 110, 33, 3, 255, 97, 26, 3, 255, 103, 31, 6, 255, 122, 39, 6, 255, 137, 46, 4, 255, 138, 42, 2, 255, 138, 47, 0, 255, 136, 41, 1, 255, 137, 39, 6, 255, 129, 43, 2, 255, 123, 39, 1, 255, 117, 32, 0, 255, 120, 35, 3, 255, 121, 36, 5, 255, 116, 32, 1, 255, 117, 35, 3, 255, 115, 31, 2, 255, 112, 27, 1, 255, 111, 28, 4, 255, 112, 29, 4, 255, 105, 26, 1, 255, 100, 24, 1, 255, 94, 22, 2, 255, 96, 23, 3, 255, 93, 24, 1, 255, 90, 22, 2, 255, 90, 19, 2, 255, 93, 22, 5, 255, 90, 23, 1, 255, 88, 22, 1, 255, 89, 19, 1, 255, 91, 22, 1, 255, 89, 19, 0, 255, 86, 19, 2, 255, 84, 21, 4, 255, 77, 19, 0, 255, 74, 22, 3, 255, 71, 20, 3, 255, 58, 20, 1, 255, 48, 17, 2, 255, 51, 14, 4, 255, 54, 14, 4, 255, 60, 14, 3, 255, 61, 17, 3, 255, 61, 18, 2, 255, 65, 19, 2, 255, 68, 19, 2, 255, 67, 20, 4, 255, 62, 16, 1, 255, 61, 15, 2, 255, 54, 13, 4, 255, 59, 14, 1, 255, 67, 19, 0, 255, 68, 20, 4, 255, 75, 23, 2, 255, 91, 23, 2, 255, 110, 38, 3, 255, 119, 42, 4, 255, 111, 32, 2, 255, 105, 29, 0, 255, 102, 29, 0, 255, 103, 30, 3, 255, 106, 32, 3, 255, 109, 35, 1, 255, 116, 40, 1, 255, 122, 46, 2, 255, 122, 48, 1, 255, 123, 52, 3, 255, 122, 48, 0, 255, 125, 46, 0, 255, 126, 46, 0, 255, 22, 17, 4, 255, 21, 15, 9, 255, 19, 16, 7, 255, 17, 17, 3, 255, 21, 18, 3, 255, 30, 17, 5, 255, 27, 12, 3, 255, 25, 13, 6, 255, 23, 13, 5, 255, 21, 12, 3, 255, 20, 11, 2, 255, 24, 10, 2, 255, 24, 11, 3, 255, 20, 14, 4, 255, 24, 12, 3, 255, 20, 11, 3, 255, 16, 12, 3, 255, 18, 13, 4, 255, 19, 12, 2, 255, 19, 9, 2, 255, 20, 10, 3, 255, 24, 11, 2, 255, 27, 14, 6, 255, 22, 14, 4, 255, 25, 18, 4, 255, 26, 14, 3, 255, 24, 11, 5, 255, 34, 20, 3, 255, 40, 22, 2, 255, 38, 18, 2, 255, 33, 14, 4, 255, 28, 12, 5, 255, 32, 16, 5, 255, 34, 13, 2, 255, 28, 18, 4, 255, 27, 19, 3, 255, 39, 22, 4, 255, 39, 30, 12, 255, 53, 34, 19, 255, 62, 42, 19, 255, 62, 55, 30, 255, 64, 54, 25, 255, 73, 53, 16, 255, 72, 48, 8, 255, 66, 48, 3, 255, 61, 36, 1, 255, 75, 35, 2, 255, 78, 48, 8, 255, 71, 54, 21, 255, 76, 58, 19, 255, 88, 61, 26, 255, 91, 59, 44, 255, 79, 62, 45, 255, 71, 58, 23, 255, 74, 69, 41, 255, 78, 66, 39, 255, 79, 56, 14, 255, 72, 59, 14, 255, 79, 66, 51, 255, 87, 72, 53, 255, 86, 69, 17, 255, 90, 68, 12, 255, 81, 55, 10, 255, 74, 49, 3, 255, 71, 55, 2, 255, 77, 47, 2, 255, 83, 42, 2, 255, 82, 42, 1, 255, 77, 42, 1, 255, 78, 43, 2, 255, 84, 45, 3, 255, 86, 45, 3, 255, 88, 45, 1, 255, 92, 44, 1, 255, 91, 49, 3, 255, 95, 53, 4, 255, 97, 50, 1, 255, 101, 49, 2, 255, 101, 53, 2, 255, 101, 51, 1, 255, 104, 55, 2, 255, 100, 57, 2, 255, 97, 58, 1, 255, 106, 58, 1, 255, 111, 58, 1, 255, 113, 58, 1, 255, 106, 58, 1, 255, 98, 58, 3, 255, 106, 59, 2, 255, 115, 55, 2, 255, 121, 53, 6, 255, 116, 49, 2, 255, 115, 51, 2, 255, 113, 50, 1, 255, 115, 52, 1, 255, 116, 54, 2, 255, 117, 55, 5, 255, 116, 50, 2, 255, 117, 59, 7, 255, 112, 63, 4, 255, 112, 63, 3, 255, 112, 65, 4, 255, 113, 63, 3, 255, 116, 68, 2, 255, 111, 64, 4, 255, 116, 61, 6, 255, 125, 67, 5, 255, 125, 65, 1, 255, 119, 56, 2, 255, 128, 65, 2, 255, 130, 70, 1, 255, 123, 68, 0, 255, 131, 66, 2, 255, 131, 68, 6, 255, 113, 61, 3, 255, 106, 55, 4, 255, 104, 50, 4, 255, 102, 51, 2, 255, 98, 50, 4, 255, 105, 50, 4, 255, 114, 54, 6, 255, 104, 45, 2, 255, 107, 45, 3, 255, 105, 45, 3, 255, 102, 45, 3, 255, 101, 45, 2, 255, 100, 46, 2, 255, 102, 43, 3, 255, 102, 43, 6, 255, 101, 46, 2, 255, 102, 43, 3, 255, 104, 44, 5, 255, 106, 44, 4, 255, 106, 48, 6, 255, 105, 47, 6, 255, 106, 46, 5, 255, 99, 47, 4, 255, 99, 50, 3, 255, 101, 51, 4, 255, 105, 50, 4, 255, 102, 47, 4, 255, 102, 49, 7, 255, 97, 51, 9, 255, 101, 50, 7, 255, 107, 50, 7, 255, 108, 51, 11, 255, 96, 52, 8, 255, 98, 50, 5, 255, 100, 52, 1, 255, 96, 52, 3, 255, 91, 52, 5, 255, 90, 52, 6, 255, 83, 49, 5, 255, 87, 54, 6, 255, 79, 53, 7, 255, 75, 55, 10, 255, 74, 52, 7, 255, 83, 50, 14, 255, 100, 63, 12, 255, 99, 58, 15, 255, 93, 54, 15, 255, 78, 51, 14, 255, 72, 50, 15, 255, 71, 51, 13, 255, 72, 55, 13, 255, 79, 57, 9, 255, 96, 59, 24, 255, 109, 67, 11, 255, 107, 67, 12, 255, 92, 59, 20, 255, 80, 56, 21, 255, 80, 59, 17, 255, 79, 63, 10, 255, 77, 65, 13, 255, 76, 66, 18, 255, 82, 62, 27, 255, 80, 67, 18, 255, 95, 68, 21, 255, 95, 70, 32, 255, 94, 72, 24, 255, 94, 72, 14, 255, 96, 70, 21, 255, 92, 74, 29, 255, 99, 71, 24, 255, 110, 75, 28, 255, 98, 77, 27, 255, 102, 79, 13, 255, 100, 80, 26, 255, 98, 83, 16, 255, 102, 77, 23, 255, 101, 80, 23, 255, 104, 84, 18, 255, 105, 79, 32, 255, 106, 85, 22, 255, 105, 83, 23, 255, 104, 84, 22, 255, 100, 82, 39, 255, 106, 88, 38, 255, 105, 86, 32, 255, 105, 84, 25, 255, 107, 86, 28, 255, 103, 87, 32, 255, 111, 92, 31, 255, 110, 87, 28, 255, 103, 86, 27, 255, 104, 89, 23, 255, 103, 89, 24, 255, 100, 91, 24, 255, 109, 87, 26, 255, 110, 86, 19, 255, 107, 91, 19, 255, 108, 89, 21, 255, 106, 85, 26, 255, 109, 85, 24, 255, 109, 85, 24, 255, 107, 88, 16, 255, 110, 88, 13, 255, 114, 86, 33, 255, 111, 83, 26, 255, 113, 80, 24, 255, 115, 83, 27, 255, 107, 81, 17, 255, 105, 83, 17, 255, 114, 89, 21, 255, 114, 80, 11, 255, 111, 80, 14, 255, 103, 78, 15, 255, 105, 76, 20, 255, 109, 82, 13, 255, 105, 79, 9, 255, 107, 75, 20, 255, 103, 73, 20, 255, 105, 72, 16, 255, 109, 73, 10, 255, 110, 74, 12, 255, 110, 70, 14, 255, 112, 72, 10, 255, 109, 71, 7, 255, 114, 70, 8, 255, 116, 71, 8, 255, 111, 70, 8, 255, 107, 71, 10, 255, 103, 66, 8, 255, 107, 68, 7, 255, 106, 65, 3, 255, 106, 64, 7, 255, 106, 63, 8, 255, 106, 60, 8, 255, 113, 63, 7, 255, 112, 61, 2, 255, 110, 59, 3, 255, 116, 61, 9, 255, 116, 59, 11, 255, 106, 55, 3, 255, 106, 58, 5, 255, 102, 55, 3, 255, 104, 53, 7, 255, 102, 54, 2, 255, 101, 55, 5, 255, 103, 54, 8, 255, 108, 58, 6, 255, 112, 58, 8, 255, 108, 56, 4, 255, 106, 58, 4, 255, 103, 52, 6, 255, 104, 52, 0, 255, 104, 53, 4, 255, 101, 53, 2, 255, 93, 49, 5, 255, 99, 51, 11, 255, 102, 50, 3, 255, 98, 46, 4, 255, 94, 40, 3, 255, 91, 43, 1, 255, 93, 44, 3, 255, 93, 41, 4, 255, 88, 42, 4, 255, 83, 40, 3, 255, 84, 38, 4, 255, 75, 40, 6, 255, 61, 38, 5, 255, 70, 31, 5, 255, 71, 34, 2, 255, 68, 35, 2, 255, 69, 34, 6, 255, 67, 32, 5, 255, 72, 34, 6, 255, 66, 36, 2, 255, 56, 25, 4, 255, 63, 28, 0, 255, 66, 35, 4, 255, 64, 31, 4, 255, 78, 36, 3, 255, 79, 35, 0, 255, 78, 33, 0, 255, 85, 35, 3, 255, 87, 40, 5, 255, 94, 44, 2, 255, 100, 40, 0, 255, 96, 38, 4, 255, 92, 38, 2, 255, 84, 35, 1, 255, 69, 32, 2, 255, 68, 23, 1, 255, 64, 19, 0, 255, 67, 27, 1, 255, 78, 29, 4, 255, 72, 26, 5, 255, 59, 22, 1, 255, 55, 24, 3, 255, 54, 22, 2, 255, 58, 22, 2, 255, 61, 24, 6, 255, 55, 26, 6, 255, 50, 24, 4, 255, 55, 22, 4, 255, 59, 28, 3, 255, 65, 29, 4, 255, 74, 26, 5, 255, 82, 28, 5, 255, 73, 24, 2, 255, 77, 30, 5, 255, 85, 35, 3, 255, 93, 33, 2, 255, 98, 32, 5, 255, 95, 29, 2, 255, 101, 34, 5, 255, 111, 37, 2, 255, 126, 46, 1, 255, 131, 45, 7, 255, 103, 32, 3, 255, 115, 42, 5, 255, 130, 46, 2, 255, 132, 43, 0, 255, 135, 45, 1, 255, 137, 46, 2, 255, 140, 45, 2, 255, 143, 43, 3, 255, 139, 44, 1, 255, 134, 40, 2, 255, 132, 39, 1, 255, 131, 39, 2, 255, 124, 37, 3, 255, 120, 34, 3, 255, 122, 37, 7, 255, 122, 34, 6, 255, 124, 34, 4, 255, 120, 33, 4, 255, 116, 31, 5, 255, 111, 29, 3, 255, 105, 30, 3, 255, 93, 26, 2, 255, 93, 26, 6, 255, 87, 22, 0, 255, 90, 26, 3, 255, 92, 25, 5, 255, 94, 24, 6, 255, 93, 24, 2, 255, 87, 22, 3, 255, 84, 22, 1, 255, 85, 21, 2, 255, 86, 21, 2, 255, 86, 22, 3, 255, 80, 19, 4, 255, 77, 19, 2, 255, 76, 17, 4, 255, 55, 14, 5, 255, 53, 19, 5, 255, 55, 22, 7, 255, 47, 11, 2, 255, 54, 11, 5, 255, 51, 14, 4, 255, 52, 12, 3, 255, 60, 15, 3, 255, 67, 19, 2, 255, 70, 20, 1, 255, 71, 18, 3, 255, 69, 16, 2, 255, 73, 19, 3, 255, 68, 18, 1, 255, 67, 20, 1, 255, 75, 23, 3, 255, 78, 24, 4, 255, 77, 21, 0, 255, 85, 20, 2, 255, 106, 33, 6, 255, 109, 32, 4, 255, 97, 22, 0, 255, 101, 32, 1, 255, 104, 36, 2, 255, 106, 32, 5, 255, 103, 29, 3, 255, 106, 34, 2, 255, 114, 41, 3, 255, 122, 43, 3, 255, 123, 43, 1, 255, 123, 47, 3, 255, 120, 48, 3, 255, 121, 44, 0, 255, 126, 44, 1, 255, 14, 15, 2, 255, 22, 14, 5, 255, 25, 14, 6, 255, 18, 12, 2, 255, 21, 16, 3, 255, 22, 14, 3, 255, 23, 10, 2, 255, 21, 10, 1, 255, 21, 11, 1, 255, 20, 12, 1, 255, 21, 12, 3, 255, 20, 9, 1, 255, 20, 10, 2, 255, 21, 12, 2, 255, 21, 11, 2, 255, 18, 9, 2, 255, 16, 9, 1, 255, 18, 12, 2, 255, 19, 11, 1, 255, 21, 10, 2, 255, 18, 13, 2, 255, 20, 14, 3, 255, 21, 15, 5, 255, 17, 12, 2, 255, 26, 17, 3, 255, 35, 20, 8, 255, 28, 18, 5, 255, 33, 17, 4, 255, 36, 17, 8, 255, 28, 14, 4, 255, 30, 15, 2, 255, 31, 20, 4, 255, 35, 17, 4, 255, 37, 19, 4, 255, 35, 14, 0, 255, 32, 18, 2, 255, 37, 19, 5, 255, 40, 22, 7, 255, 43, 30, 7, 255, 48, 40, 14, 255, 66, 53, 24, 255, 71, 55, 20, 255, 68, 49, 8, 255, 71, 42, 2, 255, 76, 48, 6, 255, 68, 41, 5, 255, 76, 37, 1, 255, 79, 44, 4, 255, 69, 56, 23, 255, 71, 57, 23, 255, 77, 59, 23, 255, 73, 59, 24, 255, 74, 59, 31, 255, 77, 60, 25, 255, 75, 74, 49, 255, 78, 62, 39, 255, 74, 55, 21, 255, 70, 56, 31, 255, 79, 68, 55, 255, 81, 69, 51, 255, 81, 65, 26, 255, 89, 64, 11, 255, 88, 58, 2, 255, 80, 50, 6, 255, 96, 54, 11, 255, 98, 48, 8, 255, 94, 40, 3, 255, 92, 44, 4, 255, 83, 43, 2, 255, 77, 44, 2, 255, 82, 47, 4, 255, 89, 45, 3, 255, 96, 45, 3, 255, 105, 45, 4, 255, 98, 50, 5, 255, 99, 51, 2, 255, 106, 52, 4, 255, 98, 52, 3, 255, 95, 58, 6, 255, 95, 53, 2, 255, 95, 50, 0, 255, 98, 55, 2, 255, 103, 58, 2, 255, 105, 53, 3, 255, 103, 57, 1, 255, 101, 58, 0, 255, 104, 53, 1, 255, 109, 51, 4, 255, 115, 60, 4, 255, 108, 59, 3, 255, 102, 52, 3, 255, 112, 59, 5, 255, 118, 60, 5, 255, 117, 55, 4, 255, 115, 54, 4, 255, 117, 58, 7, 255, 112, 58, 1, 255, 117, 58, 3, 255, 116, 62, 4, 255, 110, 67, 1, 255, 111, 66, 0, 255, 114, 63, 3, 255, 117, 61, 1, 255, 116, 65, 5, 255, 111, 65, 4, 255, 120, 68, 2, 255, 122, 64, 2, 255, 123, 59, 1, 255, 130, 65, 3, 255, 131, 69, 4, 255, 126, 68, 5, 255, 122, 76, 4, 255, 120, 60, 0, 255, 118, 51, 5, 255, 120, 65, 4, 255, 122, 68, 2, 255, 126, 70, 5, 255, 123, 67, 0, 255, 126, 69, 4, 255, 118, 64, 2, 255, 114, 63, 2, 255, 110, 56, 3, 255, 110, 51, 6, 255, 111, 50, 4, 255, 106, 47, 3, 255, 101, 47, 4, 255, 103, 48, 6, 255, 100, 46, 1, 255, 104, 43, 3, 255, 104, 42, 5, 255, 104, 44, 2, 255, 103, 46, 5, 255, 103, 49, 5, 255, 105, 51, 2, 255, 102, 53, 1, 255, 104, 51, 4, 255, 101, 47, 5, 255, 103, 51, 2, 255, 99, 51, 4, 255, 102, 48, 7, 255, 105, 47, 8, 255, 104, 55, 6, 255, 97, 50, 5, 255, 102, 53, 4, 255, 107, 52, 3, 255, 101, 46, 2, 255, 105, 53, 4, 255, 104, 52, 7, 255, 105, 53, 11, 255, 106, 54, 6, 255, 104, 51, 7, 255, 104, 54, 11, 255, 97, 51, 4, 255, 98, 55, 8, 255, 99, 58, 7, 255, 95, 53, 7, 255, 96, 56, 10, 255, 93, 56, 7, 255, 94, 56, 12, 255, 96, 55, 13, 255, 101, 61, 13, 255, 97, 58, 10, 255, 94, 57, 10, 255, 96, 60, 10, 255, 94, 61, 14, 255, 95, 63, 14, 255, 94, 59, 18, 255, 95, 62, 23, 255, 90, 64, 23, 255, 89, 68, 20, 255, 87, 63, 25, 255, 87, 60, 23, 255, 93, 65, 15, 255, 92, 67, 21, 255, 93, 65, 17, 255, 98, 70, 13, 255, 102, 69, 18, 255, 105, 71, 26, 255, 106, 75, 19, 255, 97, 69, 20, 255, 97, 71, 21, 255, 98, 70, 23, 255, 93, 74, 23, 255, 101, 77, 18, 255, 109, 79, 24, 255, 102, 77, 36, 255, 105, 77, 24, 255, 103, 77, 24, 255, 103, 79, 33, 255, 111, 85, 22, 255, 104, 85, 22, 255, 103, 85, 23, 255, 104, 81, 37, 255, 103, 81, 41, 255, 108, 85, 28, 255, 111, 88, 26, 255, 106, 87, 26, 255, 108, 88, 22, 255, 105, 88, 24, 255, 105, 88, 20, 255, 109, 91, 12, 255, 108, 89, 28, 255, 108, 86, 29, 255, 109, 85, 28, 255, 110, 91, 19, 255, 117, 90, 11, 255, 116, 89, 22, 255, 105, 90, 20, 255, 110, 88, 29, 255, 112, 87, 22, 255, 107, 88, 22, 255, 108, 87, 25, 255, 114, 91, 25, 255, 114, 89, 22, 255, 118, 91, 11, 255, 115, 87, 16, 255, 111, 84, 21, 255, 111, 82, 29, 255, 113, 83, 22, 255, 113, 84, 18, 255, 115, 87, 16, 255, 109, 81, 25, 255, 109, 82, 24, 255, 111, 83, 13, 255, 108, 79, 10, 255, 109, 84, 6, 255, 105, 82, 17, 255, 108, 74, 13, 255, 114, 78, 8, 255, 107, 74, 16, 255, 109, 71, 27, 255, 110, 71, 19, 255, 112, 72, 21, 255, 110, 72, 19, 255, 106, 73, 10, 255, 104, 72, 11, 255, 105, 71, 9, 255, 108, 69, 10, 255, 108, 68, 8, 255, 110, 69, 12, 255, 107, 66, 11, 255, 109, 68, 10, 255, 109, 69, 4, 255, 112, 67, 7, 255, 109, 64, 7, 255, 108, 65, 8, 255, 106, 63, 7, 255, 109, 62, 11, 255, 110, 61, 10, 255, 113, 63, 7, 255, 110, 60, 3, 255, 115, 60, 1, 255, 117, 62, 6, 255, 107, 58, 7, 255, 106, 58, 7, 255, 108, 56, 3, 255, 109, 58, 4, 255, 110, 60, 2, 255, 107, 56, 5, 255, 107, 56, 10, 255, 108, 58, 6, 255, 108, 53, 6, 255, 111, 51, 4, 255, 109, 53, 3, 255, 103, 52, 7, 255, 103, 56, 3, 255, 102, 52, 1, 255, 107, 55, 6, 255, 104, 52, 6, 255, 99, 43, 8, 255, 95, 46, 8, 255, 90, 47, 5, 255, 92, 45, 4, 255, 90, 45, 7, 255, 89, 40, 4, 255, 95, 42, 3, 255, 92, 43, 4, 255, 90, 40, 4, 255, 88, 39, 4, 255, 86, 39, 4, 255, 77, 40, 4, 255, 74, 36, 7, 255, 70, 37, 8, 255, 70, 37, 3, 255, 73, 37, 2, 255, 67, 32, 3, 255, 66, 29, 5, 255, 61, 32, 5, 255, 58, 27, 8, 255, 67, 31, 2, 255, 71, 36, 2, 255, 71, 38, 8, 255, 73, 34, 4, 255, 81, 33, 1, 255, 80, 33, 5, 255, 74, 33, 3, 255, 81, 33, 1, 255, 93, 37, 5, 255, 92, 35, 3, 255, 90, 34, 2, 255, 85, 32, 3, 255, 66, 28, 3, 255, 54, 27, 4, 255, 58, 23, 4, 255, 51, 23, 3, 255, 59, 29, 2, 255, 62, 28, 1, 255, 65, 25, 2, 255, 59, 26, 0, 255, 57, 31, 3, 255, 51, 26, 2, 255, 48, 24, 3, 255, 44, 21, 5, 255, 33, 16, 1, 255, 42, 21, 3, 255, 60, 22, 5, 255, 67, 30, 3, 255, 71, 32, 2, 255, 76, 27, 3, 255, 75, 26, 2, 255, 75, 25, 3, 255, 80, 30, 5, 255, 90, 37, 3, 255, 96, 36, 3, 255, 98, 33, 5, 255, 100, 31, 2, 255, 110, 39, 1, 255, 131, 46, 3, 255, 133, 45, 1, 255, 131, 42, 1, 255, 131, 38, 4, 255, 134, 38, 3, 255, 129, 43, 1, 255, 138, 47, 4, 255, 140, 46, 2, 255, 141, 46, 0, 255, 142, 47, 2, 255, 142, 46, 3, 255, 143, 44, 1, 255, 142, 43, 1, 255, 142, 45, 2, 255, 135, 41, 0, 255, 131, 40, 2, 255, 130, 41, 8, 255, 117, 30, 1, 255, 114, 28, 1, 255, 119, 31, 1, 255, 122, 32, 1, 255, 111, 28, 0, 255, 115, 29, 1, 255, 117, 31, 1, 255, 104, 33, 3, 255, 94, 24, 3, 255, 91, 27, 1, 255, 91, 28, 2, 255, 90, 23, 1, 255, 90, 22, 3, 255, 82, 21, 2, 255, 81, 20, 0, 255, 89, 25, 2, 255, 88, 23, 4, 255, 85, 20, 2, 255, 84, 21, 1, 255, 83, 21, 5, 255, 80, 19, 2, 255, 79, 19, 4, 255, 59, 21, 3, 255, 47, 14, 2, 255, 61, 19, 8, 255, 60, 13, 3, 255, 59, 17, 2, 255, 55, 15, 3, 255, 53, 15, 3, 255, 57, 18, 3, 255, 63, 18, 1, 255, 69, 17, 1, 255, 71, 19, 2, 255, 67, 16, 0, 255, 70, 17, 4, 255, 73, 16, 2, 255, 72, 21, 2, 255, 69, 16, 3, 255, 76, 14, 6, 255, 74, 19, 4, 255, 80, 22, 1, 255, 96, 27, 3, 255, 98, 23, 4, 255, 91, 23, 2, 255, 97, 34, 3, 255, 107, 38, 3, 255, 114, 36, 5, 255, 113, 37, 6, 255, 110, 37, 2, 255, 110, 35, 0, 255, 115, 35, 0, 255, 122, 39, 4, 255, 119, 39, 4, 255, 116, 41, 6, 255, 115, 37, 2, 255, 118, 35, 2, 255, 18, 14, 0, 255, 22, 14, 3, 255, 24, 14, 5, 255, 18, 10, 1, 255, 19, 15, 4, 255, 17, 10, 3, 255, 19, 10, 2, 255, 20, 11, 2, 255, 20, 11, 2, 255, 18, 9, 0, 255, 21, 13, 4, 255, 20, 14, 4, 255, 15, 10, 1, 255, 20, 10, 2, 255, 24, 12, 4, 255, 21, 10, 1, 255, 19, 9, 0, 255, 24, 12, 4, 255, 28, 13, 6, 255, 19, 11, 4, 255, 16, 14, 1, 255, 23, 17, 4, 255, 25, 16, 3, 255, 22, 13, 0, 255, 31, 17, 3, 255, 33, 17, 0, 255, 28, 19, 0, 255, 29, 16, 4, 255, 29, 12, 2, 255, 31, 17, 3, 255, 37, 20, 5, 255, 36, 20, 5, 255, 36, 21, 5, 255, 40, 23, 7, 255, 36, 18, 4, 255, 32, 15, 1, 255, 38, 21, 5, 255, 41, 26, 5, 255, 41, 28, 8, 255, 46, 36, 18, 255, 67, 49, 26, 255, 78, 57, 23, 255, 73, 51, 12, 255, 72, 44, 4, 255, 70, 47, 9, 255, 64, 46, 3, 255, 67, 36, 0, 255, 66, 36, 6, 255, 68, 56, 18, 255, 72, 59, 23, 255, 71, 57, 22, 255, 77, 62, 21, 255, 82, 59, 19, 255, 78, 59, 19, 255, 70, 71, 49, 255, 66, 63, 34, 255, 67, 54, 22, 255, 72, 60, 37, 255, 77, 68, 56, 255, 76, 66, 48, 255, 79, 62, 30, 255, 91, 64, 16, 255, 90, 55, 7, 255, 82, 44, 6, 255, 87, 51, 6, 255, 89, 49, 5, 255, 86, 41, 0, 255, 86, 41, 0, 255, 90, 47, 5, 255, 84, 44, 2, 255, 87, 41, 0, 255, 98, 47, 5, 255, 95, 49, 3, 255, 99, 47, 2, 255, 95, 49, 2, 255, 100, 50, 3, 255, 99, 50, 2, 255, 100, 55, 5, 255, 96, 54, 4, 255, 103, 54, 5, 255, 106, 53, 3, 255, 103, 51, 0, 255, 105, 51, 0, 255, 100, 50, 3, 255, 100, 59, 6, 255, 95, 56, 2, 255, 102, 49, 2, 255, 108, 49, 6, 255, 106, 55, 4, 255, 96, 58, 2, 255, 93, 55, 2, 255, 103, 59, 3, 255, 100, 56, 0, 255, 101, 56, 0, 255, 104, 56, 0, 255, 113, 61, 5, 255, 106, 63, 3, 255, 107, 65, 7, 255, 110, 61, 3, 255, 115, 65, 5, 255, 113, 65, 3, 255, 113, 64, 5, 255, 115, 61, 4, 255, 114, 64, 2, 255, 117, 68, 3, 255, 123, 64, 5, 255, 122, 64, 4, 255, 121, 65, 2, 255, 123, 65, 3, 255, 126, 62, 5, 255, 126, 58, 2, 255, 125, 68, 5, 255, 120, 61, 2, 255, 120, 64, 5, 255, 122, 67, 5, 255, 117, 55, 5, 255, 121, 57, 6, 255, 130, 67, 8, 255, 132, 72, 1, 255, 132, 73, 4, 255, 131, 71, 7, 255, 135, 78, 3, 255, 129, 75, 3, 255, 126, 68, 6, 255, 123, 66, 8, 255, 111, 59, 2, 255, 109, 53, 2, 255, 111, 53, 6, 255, 111, 56, 0, 255, 106, 54, 3, 255, 100, 50, 5, 255, 99, 52, 3, 255, 99, 49, 5, 255, 100, 47, 3, 255, 104, 52, 1, 255, 99, 53, 4, 255, 99, 48, 10, 255, 99, 46, 12, 255, 101, 46, 2, 255, 102, 53, 5, 255, 99, 51, 6, 255, 103, 50, 7, 255, 105, 52, 11, 255, 102, 51, 3, 255, 102, 54, 5, 255, 106, 54, 10, 255, 109, 52, 7, 255, 102, 51, 7, 255, 102, 55, 8, 255, 102, 52, 5, 255, 104, 52, 6, 255, 102, 54, 6, 255, 102, 54, 6, 255, 102, 56, 7, 255, 101, 54, 11, 255, 104, 55, 11, 255, 102, 58, 11, 255, 106, 55, 8, 255, 111, 56, 11, 255, 104, 59, 12, 255, 103, 60, 17, 255, 102, 57, 17, 255, 101, 58, 21, 255, 96, 57, 18, 255, 97, 59, 20, 255, 98, 62, 13, 255, 97, 62, 13, 255, 100, 64, 19, 255, 99, 66, 13, 255, 100, 66, 18, 255, 99, 65, 20, 255, 101, 68, 16, 255, 102, 69, 17, 255, 96, 64, 23, 255, 97, 66, 27, 255, 101, 70, 13, 255, 105, 70, 18, 255, 108, 71, 27, 255, 106, 73, 19, 255, 102, 68, 29, 255, 103, 69, 22, 255, 100, 76, 28, 255, 96, 76, 24, 255, 105, 81, 23, 255, 107, 80, 20, 255, 105, 80, 13, 255, 105, 75, 24, 255, 110, 80, 31, 255, 102, 82, 28, 255, 107, 82, 31, 255, 104, 83, 22, 255, 97, 84, 32, 255, 97, 81, 35, 255, 102, 80, 40, 255, 104, 85, 23, 255, 108, 89, 25, 255, 108, 85, 28, 255, 107, 86, 20, 255, 109, 89, 26, 255, 104, 90, 27, 255, 104, 91, 18, 255, 115, 89, 30, 255, 110, 86, 37, 255, 106, 86, 32, 255, 119, 92, 21, 255, 125, 91, 23, 255, 117, 89, 12, 255, 114, 91, 19, 255, 109, 87, 23, 255, 116, 87, 27, 255, 112, 88, 26, 255, 109, 89, 23, 255, 110, 90, 23, 255, 110, 88, 23, 255, 114, 85, 23, 255, 111, 81, 28, 255, 108, 87, 24, 255, 108, 87, 20, 255, 113, 86, 19, 255, 112, 81, 32, 255, 109, 84, 14, 255, 109, 82, 25, 255, 113, 84, 24, 255, 113, 82, 6, 255, 113, 79, 21, 255, 112, 82, 17, 255, 115, 78, 20, 255, 115, 74, 16, 255, 122, 78, 9, 255, 117, 72, 26, 255, 111, 73, 19, 255, 112, 75, 11, 255, 110, 70, 11, 255, 111, 72, 10, 255, 107, 70, 8, 255, 105, 70, 10, 255, 107, 73, 7, 255, 109, 73, 12, 255, 109, 69, 16, 255, 106, 67, 12, 255, 106, 69, 5, 255, 110, 69, 5, 255, 112, 65, 11, 255, 106, 63, 4, 255, 104, 62, 11, 255, 103, 62, 8, 255, 108, 66, 3, 255, 109, 61, 7, 255, 115, 62, 9, 255, 117, 63, 6, 255, 112, 61, 8, 255, 120, 64, 9, 255, 114, 59, 3, 255, 105, 57, 3, 255, 109, 60, 10, 255, 109, 57, 9, 255, 105, 55, 4, 255, 109, 58, 7, 255, 103, 51, 2, 255, 103, 52, 2, 255, 106, 56, 7, 255, 108, 55, 7, 255, 112, 55, 2, 255, 111, 56, 2, 255, 104, 55, 1, 255, 100, 52, 2, 255, 107, 55, 2, 255, 111, 57, 3, 255, 109, 51, 3, 255, 105, 46, 7, 255, 90, 40, 3, 255, 88, 47, 7, 255, 90, 46, 4, 255, 88, 45, 2, 255, 92, 43, 5, 255, 89, 43, 4, 255, 92, 45, 7, 255, 91, 42, 4, 255, 85, 44, 4, 255, 86, 43, 5, 255, 84, 37, 3, 255, 72, 38, 3, 255, 69, 34, 6, 255, 67, 32, 4, 255, 70, 35, 2, 255, 66, 33, 2, 255, 67, 32, 8, 255, 57, 28, 6, 255, 52, 31, 4, 255, 70, 37, 4, 255, 74, 33, 2, 255, 76, 36, 5, 255, 78, 35, 3, 255, 84, 28, 3, 255, 87, 32, 5, 255, 77, 34, 0, 255, 81, 32, 1, 255, 80, 26, 2, 255, 75, 27, 7, 255, 67, 26, 6, 255, 64, 25, 3, 255, 67, 24, 7, 255, 63, 24, 6, 255, 70, 29, 7, 255, 63, 29, 4, 255, 71, 31, 3, 255, 66, 30, 1, 255, 69, 28, 3, 255, 71, 27, 2, 255, 69, 26, 2, 255, 69, 28, 3, 255, 66, 29, 6, 255, 58, 27, 5, 255, 52, 23, 5, 255, 57, 22, 6, 255, 62, 24, 3, 255, 68, 30, 4, 255, 74, 30, 2, 255, 75, 28, 2, 255, 73, 30, 6, 255, 74, 29, 0, 255, 77, 29, 1, 255, 93, 39, 2, 255, 105, 43, 5, 255, 112, 37, 4, 255, 125, 43, 5, 255, 136, 52, 3, 255, 132, 52, 2, 255, 133, 46, 4, 255, 131, 41, 0, 255, 134, 46, 1, 255, 133, 48, 2, 255, 138, 45, 4, 255, 143, 50, 4, 255, 145, 49, 2, 255, 145, 49, 1, 255, 144, 48, 1, 255, 143, 46, 1, 255, 144, 47, 2, 255, 144, 47, 2, 255, 146, 49, 4, 255, 142, 45, 4, 255, 133, 40, 1, 255, 126, 36, 1, 255, 116, 28, 1, 255, 107, 24, 0, 255, 105, 26, 0, 255, 111, 31, 4, 255, 108, 26, 2, 255, 116, 27, 1, 255, 122, 30, 1, 255, 121, 34, 4, 255, 114, 33, 3, 255, 118, 34, 4, 255, 114, 30, 3, 255, 98, 24, 1, 255, 86, 19, 0, 255, 85, 19, 3, 255, 88, 21, 3, 255, 88, 23, 4, 255, 87, 22, 1, 255, 86, 21, 1, 255, 82, 18, 1, 255, 82, 19, 0, 255, 84, 21, 4, 255, 82, 23, 4, 255, 72, 21, 2, 255, 61, 15, 0, 255, 54, 12, 3, 255, 52, 13, 2, 255, 59, 20, 2, 255, 64, 17, 1, 255, 63, 21, 0, 255, 58, 22, 0, 255, 56, 14, 1, 255, 60, 12, 5, 255, 65, 17, 5, 255, 56, 15, 1, 255, 63, 17, 5, 255, 77, 17, 4, 255, 70, 17, 3, 255, 67, 19, 3, 255, 72, 21, 4, 255, 76, 18, 5, 255, 82, 24, 3, 255, 88, 26, 0, 255, 92, 24, 4, 255, 88, 25, 5, 255, 93, 29, 2, 255, 99, 29, 3, 255, 104, 28, 1, 255, 108, 33, 2, 255, 107, 33, 1, 255, 112, 37, 2, 255, 111, 35, 1, 255, 113, 38, 3, 255, 110, 37, 0, 255, 113, 38, 1, 255, 115, 38, 2, 255, 115, 36, 1, 255, 20, 11, 0, 255, 18, 9, 0, 255, 16, 10, 3, 255, 15, 13, 2, 255, 13, 10, 1, 255, 19, 10, 3, 255, 17, 9, 1, 255, 19, 11, 2, 255, 24, 13, 4, 255, 20, 9, 0, 255, 19, 8, 0, 255, 16, 11, 2, 255, 14, 10, 2, 255, 17, 8, 1, 255, 21, 12, 3, 255, 22, 12, 3, 255, 22, 11, 2, 255, 26, 12, 4, 255, 26, 11, 3, 255, 21, 12, 5, 255, 21, 13, 3, 255, 33, 16, 1, 255, 42, 18, 5, 255, 36, 17, 3, 255, 36, 20, 6, 255, 38, 19, 5, 255, 31, 17, 4, 255, 29, 14, 3, 255, 30, 15, 2, 255, 33, 23, 4, 255, 29, 15, 1, 255, 21, 10, 1, 255, 28, 19, 2, 255, 40, 19, 5, 255, 35, 20, 4, 255, 32, 17, 5, 255, 38, 17, 4, 255, 38, 25, 3, 255, 43, 29, 12, 255, 52, 35, 19, 255, 70, 50, 21, 255, 72, 54, 24, 255, 70, 55, 22, 255, 69, 48, 7, 255, 72, 50, 6, 255, 74, 49, 5, 255, 72, 38, 0, 255, 67, 34, 6, 255, 70, 52, 22, 255, 72, 55, 20, 255, 68, 56, 19, 255, 82, 60, 27, 255, 88, 57, 15, 255, 75, 57, 18, 255, 66, 62, 47, 255, 65, 61, 26, 255, 69, 58, 22, 255, 71, 63, 41, 255, 71, 65, 55, 255, 73, 66, 41, 255, 80, 65, 30, 255, 88, 62, 13, 255, 85, 52, 0, 255, 77, 44, 0, 255, 78, 48, 4, 255, 85, 44, 4, 255, 86, 40, 3, 255, 83, 42, 3, 255, 82, 44, 1, 255, 84, 41, 0, 255, 98, 41, 2, 255, 107, 48, 6, 255, 95, 50, 1, 255, 96, 48, 1, 255, 98, 52, 3, 255, 99, 55, 5, 255, 94, 55, 3, 255, 98, 53, 3, 255, 97, 49, 0, 255, 107, 51, 4, 255, 108, 54, 5, 255, 97, 54, 1, 255, 91, 55, 1, 255, 98, 50, 0, 255, 112, 56, 4, 255, 109, 52, 2, 255, 103, 49, 3, 255, 98, 53, 7, 255, 94, 53, 5, 255, 92, 53, 2, 255, 96, 57, 3, 255, 99, 57, 1, 255, 101, 61, 2, 255, 99, 62, 1, 255, 106, 63, 3, 255, 111, 60, 2, 255, 107, 64, 2, 255, 103, 67, 2, 255, 107, 62, 0, 255, 116, 62, 1, 255, 115, 65, 1, 255, 115, 69, 3, 255, 118, 65, 3, 255, 113, 67, 2, 255, 107, 68, 0, 255, 116, 61, 1, 255, 119, 52, 3, 255, 124, 51, 6, 255, 122, 52, 1, 255, 117, 60, 2, 255, 122, 59, 2, 255, 119, 63, 4, 255, 115, 64, 1, 255, 114, 68, 2, 255, 119, 68, 3, 255, 128, 68, 3, 255, 130, 69, 1, 255, 135, 74, 4, 255, 132, 72, 3, 255, 129, 72, 0, 255, 135, 79, 4, 255, 130, 78, 2, 255, 133, 76, 0, 255, 136, 81, 0, 255, 133, 78, 2, 255, 133, 72, 7, 255, 126, 70, 2, 255, 137, 78, 2, 255, 133, 74, 1, 255, 130, 77, 9, 255, 112, 61, 8, 255, 109, 58, 7, 255, 123, 68, 2, 255, 141, 78, 5, 255, 130, 69, 13, 255, 98, 54, 8, 255, 98, 56, 6, 255, 97, 54, 7, 255, 106, 49, 5, 255, 99, 50, 6, 255, 100, 56, 4, 255, 103, 49, 6, 255, 102, 49, 6, 255, 103, 51, 4, 255, 101, 52, 7, 255, 99, 50, 13, 255, 101, 51, 11, 255, 102, 51, 11, 255, 102, 53, 9, 255, 102, 53, 9, 255, 104, 55, 13, 255, 101, 52, 9, 255, 104, 55, 14, 255, 100, 56, 8, 255, 98, 55, 8, 255, 102, 58, 17, 255, 106, 59, 20, 255, 104, 53, 14, 255, 105, 57, 12, 255, 104, 63, 12, 255, 102, 61, 6, 255, 101, 59, 16, 255, 104, 63, 26, 255, 98, 61, 15, 255, 98, 64, 13, 255, 100, 66, 13, 255, 98, 64, 13, 255, 100, 65, 17, 255, 103, 64, 22, 255, 102, 65, 17, 255, 104, 70, 13, 255, 101, 68, 25, 255, 97, 68, 11, 255, 98, 70, 23, 255, 103, 67, 31, 255, 104, 69, 26, 255, 101, 74, 17, 255, 101, 74, 23, 255, 105, 73, 22, 255, 105, 75, 22, 255, 98, 73, 15, 255, 103, 74, 29, 255, 102, 76, 24, 255, 105, 78, 23, 255, 108, 75, 26, 255, 106, 80, 25, 255, 106, 78, 23, 255, 111, 80, 22, 255, 104, 85, 21, 255, 110, 86, 21, 255, 113, 82, 26, 255, 100, 86, 24, 255, 102, 89, 23, 255, 111, 90, 31, 255, 105, 87, 30, 255, 107, 88, 40, 255, 109, 86, 35, 255, 108, 88, 33, 255, 104, 87, 36, 255, 101, 88, 38, 255, 104, 91, 30, 255, 114, 93, 27, 255, 111, 91, 30, 255, 107, 90, 29, 255, 122, 93, 27, 255, 134, 90, 30, 255, 121, 90, 22, 255, 123, 93, 28, 255, 115, 90, 25, 255, 115, 89, 20, 255, 109, 91, 28, 255, 111, 87, 35, 255, 114, 87, 21, 255, 118, 90, 26, 255, 113, 90, 26, 255, 113, 92, 25, 255, 111, 87, 24, 255, 115, 87, 21, 255, 113, 85, 16, 255, 112, 83, 27, 255, 108, 86, 9, 255, 110, 84, 30, 255, 108, 77, 34, 255, 112, 79, 15, 255, 109, 80, 14, 255, 106, 78, 22, 255, 112, 75, 19, 255, 113, 79, 10, 255, 118, 80, 16, 255, 109, 73, 13, 255, 104, 73, 18, 255, 108, 74, 9, 255, 113, 73, 14, 255, 115, 75, 19, 255, 114, 77, 14, 255, 107, 72, 7, 255, 107, 72, 10, 255, 108, 70, 15, 255, 109, 69, 17, 255, 106, 66, 10, 255, 107, 68, 6, 255, 113, 70, 6, 255, 117, 67, 9, 255, 112, 64, 5, 255, 109, 62, 12, 255, 104, 61, 7, 255, 106, 66, 0, 255, 109, 66, 1, 255, 110, 62, 1, 255, 111, 61, 4, 255, 109, 59, 7, 255, 110, 58, 4, 255, 110, 60, 4, 255, 105, 58, 4, 255, 103, 56, 5, 255, 103, 53, 6, 255, 103, 53, 4, 255, 110, 60, 2, 255, 105, 53, 5, 255, 103, 51, 10, 255, 100, 50, 0, 255, 103, 50, 4, 255, 101, 51, 6, 255, 102, 54, 5, 255, 101, 51, 3, 255, 94, 41, 5, 255, 100, 48, 4, 255, 103, 50, 5, 255, 101, 49, 4, 255, 104, 49, 2, 255, 99, 49, 3, 255, 94, 50, 6, 255, 93, 43, 1, 255, 91, 45, 2, 255, 86, 44, 0, 255, 87, 39, 2, 255, 93, 40, 3, 255, 89, 42, 3, 255, 88, 41, 5, 255, 79, 40, 4, 255, 76, 32, 1, 255, 73, 33, 0, 255, 77, 38, 2, 255, 70, 32, 4, 255, 70, 31, 9, 255, 69, 32, 4, 255, 68, 33, 0, 255, 58, 27, 2, 255, 63, 37, 3, 255, 91, 38, 3, 255, 95, 36, 1, 255, 92, 42, 1, 255, 92, 40, 2, 255, 84, 31, 5, 255, 75, 31, 6, 255, 82, 35, 3, 255, 77, 35, 1, 255, 71, 32, 2, 255, 73, 25, 5, 255, 74, 28, 4, 255, 76, 32, 0, 255, 77, 26, 1, 255, 77, 28, 4, 255, 79, 35, 3, 255, 76, 28, 2, 255, 73, 27, 0, 255, 71, 28, 4, 255, 75, 26, 6, 255, 72, 23, 1, 255, 75, 27, 4, 255, 71, 26, 2, 255, 64, 23, 1, 255, 63, 25, 4, 255, 58, 22, 3, 255, 59, 25, 3, 255, 67, 28, 2, 255, 74, 30, 7, 255, 75, 30, 6, 255, 75, 28, 3, 255, 73, 23, 8, 255, 71, 29, 2, 255, 86, 34, 3, 255, 110, 44, 4, 255, 122, 46, 1, 255, 129, 46, 1, 255, 138, 51, 2, 255, 145, 53, 1, 255, 139, 49, 1, 255, 141, 47, 6, 255, 134, 46, 3, 255, 140, 45, 1, 255, 138, 46, 1, 255, 141, 46, 2, 255, 142, 47, 1, 255, 145, 49, 2, 255, 146, 50, 2, 255, 147, 50, 5, 255, 143, 45, 2, 255, 145, 48, 3, 255, 145, 48, 3, 255, 147, 49, 4, 255, 145, 47, 4, 255, 136, 40, 0, 255, 125, 34, 1, 255, 117, 31, 3, 255, 111, 30, 5, 255, 105, 27, 1, 255, 108, 29, 2, 255, 103, 26, 2, 255, 114, 30, 5, 255, 120, 31, 4, 255, 121, 33, 3, 255, 122, 36, 3, 255, 121, 31, 0, 255, 125, 35, 4, 255, 112, 29, 4, 255, 95, 21, 2, 255, 93, 24, 8, 255, 90, 23, 3, 255, 89, 23, 6, 255, 88, 23, 1, 255, 86, 21, 0, 255, 87, 21, 5, 255, 89, 23, 2, 255, 85, 20, 5, 255, 80, 21, 4, 255, 80, 20, 2, 255, 71, 17, 4, 255, 54, 10, 5, 255, 48, 12, 5, 255, 52, 16, 1, 255, 69, 20, 2, 255, 80, 25, 5, 255, 79, 25, 4, 255, 71, 21, 2, 255, 64, 19, 3, 255, 61, 16, 5, 255, 57, 13, 3, 255, 60, 15, 5, 255, 61, 15, 6, 255, 60, 16, 1, 255, 70, 17, 2, 255, 77, 18, 1, 255, 81, 23, 1, 255, 84, 25, 4, 255, 84, 24, 0, 255, 83, 23, 4, 255, 79, 19, 2, 255, 85, 24, 1, 255, 90, 23, 3, 255, 92, 25, 4, 255, 93, 27, 2, 255, 94, 26, 1, 255, 108, 34, 4, 255, 109, 34, 2, 255, 111, 36, 1, 255, 112, 38, 0, 255, 110, 37, 1, 255, 113, 40, 4, 255, 111, 37, 2, 255, 21, 13, 5, 255, 20, 11, 6, 255, 16, 7, 3, 255, 17, 10, 2, 255, 17, 11, 1, 255, 19, 12, 1, 255, 18, 11, 1, 255, 19, 10, 2, 255, 23, 13, 4, 255, 24, 10, 3, 255, 20, 8, 1, 255, 15, 7, 0, 255, 17, 10, 2, 255, 20, 11, 4, 255, 17, 10, 2, 255, 20, 12, 3, 255, 24, 14, 4, 255, 23, 10, 2, 255, 25, 12, 2, 255, 25, 11, 5, 255, 27, 16, 4, 255, 32, 16, 1, 255, 37, 19, 3, 255, 29, 17, 1, 255, 30, 18, 3, 255, 37, 20, 7, 255, 26, 18, 4, 255, 25, 13, 4, 255, 27, 12, 3, 255, 27, 16, 3, 255, 30, 14, 2, 255, 28, 15, 5, 255, 28, 16, 1, 255, 40, 20, 6, 255, 33, 17, 3, 255, 32, 14, 3, 255, 37, 17, 3, 255, 45, 27, 6, 255, 53, 33, 10, 255, 54, 43, 25, 255, 55, 51, 23, 255, 64, 57, 21, 255, 73, 56, 23, 255, 76, 48, 9, 255, 66, 42, 3, 255, 72, 46, 10, 255, 68, 37, 0, 255, 70, 40, 13, 255, 77, 54, 32, 255, 80, 54, 16, 255, 81, 55, 11, 255, 78, 59, 16, 255, 81, 48, 21, 255, 78, 54, 31, 255, 70, 61, 41, 255, 67, 60, 28, 255, 76, 60, 23, 255, 75, 60, 36, 255, 75, 66, 53, 255, 75, 66, 48, 255, 82, 66, 33, 255, 84, 61, 9, 255, 82, 52, 6, 255, 79, 49, 8, 255, 79, 44, 4, 255, 83, 45, 7, 255, 78, 40, 2, 255, 82, 44, 5, 255, 80, 43, 2, 255, 81, 46, 2, 255, 85, 49, 2, 255, 93, 48, 0, 255, 97, 48, 1, 255, 95, 47, 1, 255, 92, 50, 3, 255, 93, 50, 1, 255, 93, 52, 2, 255, 97, 48, 2, 255, 100, 52, 4, 255, 105, 52, 4, 255, 102, 52, 3, 255, 96, 53, 3, 255, 97, 52, 4, 255, 102, 52, 2, 255, 105, 53, 4, 255, 104, 53, 3, 255, 99, 50, 1, 255, 96, 51, 1, 255, 94, 55, 1, 255, 96, 59, 4, 255, 101, 58, 5, 255, 106, 54, 1, 255, 110, 53, 3, 255, 111, 56, 3, 255, 110, 60, 3, 255, 107, 62, 1, 255, 110, 61, 5, 255, 110, 60, 2, 255, 114, 62, 2, 255, 110, 64, 3, 255, 109, 67, 4, 255, 117, 63, 4, 255, 116, 56, 0, 255, 115, 67, 1, 255, 119, 70, 1, 255, 126, 57, 2, 255, 128, 54, 2, 255, 124, 64, 5, 255, 115, 64, 1, 255, 122, 66, 2, 255, 116, 67, 3, 255, 109, 63, 2, 255, 114, 61, 5, 255, 113, 65, 3, 255, 122, 71, 3, 255, 125, 70, 8, 255, 126, 69, 5, 255, 123, 59, 3, 255, 119, 48, 7, 255, 125, 60, 2, 255, 136, 76, 2, 255, 128, 70, 6, 255, 129, 73, 4, 255, 134, 74, 2, 255, 138, 77, 6, 255, 131, 69, 6, 255, 130, 66, 4, 255, 134, 70, 2, 255, 137, 75, 6, 255, 138, 75, 3, 255, 139, 77, 2, 255, 141, 81, 0, 255, 135, 76, 4, 255, 130, 73, 3, 255, 116, 62, 4, 255, 120, 66, 5, 255, 135, 77, 4, 255, 113, 62, 2, 255, 97, 51, 1, 255, 93, 52, 7, 255, 96, 51, 5, 255, 99, 54, 8, 255, 94, 50, 4, 255, 102, 54, 5, 255, 104, 50, 6, 255, 103, 50, 10, 255, 98, 53, 5, 255, 100, 53, 4, 255, 101, 51, 7, 255, 102, 55, 6, 255, 104, 55, 14, 255, 99, 53, 12, 255, 99, 55, 11, 255, 102, 55, 14, 255, 102, 55, 14, 255, 105, 57, 17, 255, 108, 54, 14, 255, 104, 59, 13, 255, 98, 61, 10, 255, 106, 63, 15, 255, 107, 59, 16, 255, 103, 60, 6, 255, 106, 64, 12, 255, 102, 60, 19, 255, 102, 60, 28, 255, 105, 65, 22, 255, 107, 65, 19, 255, 107, 64, 16, 255, 105, 61, 20, 255, 107, 64, 21, 255, 107, 69, 14, 255, 101, 64, 22, 255, 105, 71, 19, 255, 106, 73, 15, 255, 110, 72, 19, 255, 110, 70, 24, 255, 109, 69, 29, 255, 106, 71, 25, 255, 105, 75, 15, 255, 103, 75, 23, 255, 98, 80, 25, 255, 109, 76, 25, 255, 106, 75, 23, 255, 103, 80, 31, 255, 107, 81, 32, 255, 101, 82, 31, 255, 107, 79, 37, 255, 111, 80, 24, 255, 108, 84, 28, 255, 108, 81, 32, 255, 115, 82, 22, 255, 110, 91, 21, 255, 104, 86, 30, 255, 107, 82, 36, 255, 107, 84, 36, 255, 108, 88, 32, 255, 109, 88, 26, 255, 107, 90, 30, 255, 102, 89, 35, 255, 104, 90, 36, 255, 106, 89, 39, 255, 109, 92, 30, 255, 111, 92, 27, 255, 110, 90, 25, 255, 111, 92, 25, 255, 114, 88, 30, 255, 114, 88, 29, 255, 126, 97, 21, 255, 119, 92, 28, 255, 118, 88, 27, 255, 124, 85, 38, 255, 126, 88, 27, 255, 120, 89, 17, 255, 114, 88, 22, 255, 112, 90, 20, 255, 115, 88, 20, 255, 119, 84, 28, 255, 119, 85, 17, 255, 118, 89, 17, 255, 112, 83, 17, 255, 112, 85, 22, 255, 106, 82, 19, 255, 108, 81, 18, 255, 111, 80, 17, 255, 111, 78, 19, 255, 110, 80, 11, 255, 116, 78, 16, 255, 113, 77, 14, 255, 113, 76, 17, 255, 108, 75, 14, 255, 106, 76, 17, 255, 106, 71, 25, 255, 111, 72, 24, 255, 112, 73, 18, 255, 115, 77, 17, 255, 108, 72, 9, 255, 110, 73, 7, 255, 110, 72, 5, 255, 111, 70, 16, 255, 108, 66, 15, 255, 107, 65, 7, 255, 109, 65, 5, 255, 114, 63, 10, 255, 106, 60, 13, 255, 107, 63, 9, 255, 108, 66, 7, 255, 104, 60, 6, 255, 108, 59, 9, 255, 110, 57, 4, 255, 110, 59, 8, 255, 105, 57, 6, 255, 106, 60, 2, 255, 106, 61, 4, 255, 104, 57, 8, 255, 103, 55, 8, 255, 103, 55, 5, 255, 101, 51, 4, 255, 106, 54, 6, 255, 106, 54, 8, 255, 101, 52, 5, 255, 101, 52, 7, 255, 101, 47, 3, 255, 99, 51, 5, 255, 96, 50, 4, 255, 97, 52, 3, 255, 92, 47, 7, 255, 91, 47, 3, 255, 92, 43, 2, 255, 99, 45, 5, 255, 107, 50, 8, 255, 97, 49, 2, 255, 91, 51, 5, 255, 94, 43, 8, 255, 93, 42, 8, 255, 92, 43, 4, 255, 86, 43, 4, 255, 87, 42, 4, 255, 87, 43, 4, 255, 81, 42, 6, 255, 77, 38, 4, 255, 84, 34, 2, 255, 80, 38, 2, 255, 83, 39, 6, 255, 80, 36, 7, 255, 78, 35, 5, 255, 81, 35, 4, 255, 70, 29, 0, 255, 75, 35, 6, 255, 98, 44, 4, 255, 99, 45, 3, 255, 97, 39, 4, 255, 99, 36, 5, 255, 107, 43, 2, 255, 104, 52, 3, 255, 108, 47, 4, 255, 114, 47, 3, 255, 105, 44, 1, 255, 97, 42, 5, 255, 82, 30, 4, 255, 84, 29, 6, 255, 87, 31, 5, 255, 77, 27, 1, 255, 72, 28, 3, 255, 78, 31, 5, 255, 74, 30, 4, 255, 74, 28, 2, 255, 74, 28, 3, 255, 77, 25, 4, 255, 77, 26, 5, 255, 73, 25, 2, 255, 70, 27, 3, 255, 65, 24, 2, 255, 67, 21, 2, 255, 61, 21, 3, 255, 54, 23, 2, 255, 69, 28, 4, 255, 77, 29, 6, 255, 80, 30, 3, 255, 82, 28, 0, 255, 89, 25, 4, 255, 84, 24, 6, 255, 98, 32, 7, 255, 119, 44, 3, 255, 130, 52, 1, 255, 133, 49, 3, 255, 140, 49, 3, 255, 143, 47, 1, 255, 145, 51, 3, 255, 140, 48, 2, 255, 134, 46, 1, 255, 139, 44, 2, 255, 141, 46, 4, 255, 139, 44, 1, 255, 144, 48, 4, 255, 146, 47, 2, 255, 145, 47, 2, 255, 144, 47, 4, 255, 142, 45, 3, 255, 142, 45, 2, 255, 145, 48, 3, 255, 144, 45, 2, 255, 141, 42, 1, 255, 137, 41, 2, 255, 129, 39, 5, 255, 119, 33, 3, 255, 115, 33, 7, 255, 113, 30, 3, 255, 111, 26, 0, 255, 99, 25, 1, 255, 106, 30, 4, 255, 115, 31, 3, 255, 110, 31, 4, 255, 112, 34, 1, 255, 127, 39, 5, 255, 129, 37, 4, 255, 117, 34, 3, 255, 97, 24, 1, 255, 92, 23, 1, 255, 90, 21, 2, 255, 89, 20, 4, 255, 89, 22, 2, 255, 89, 24, 4, 255, 87, 21, 3, 255, 87, 21, 1, 255, 87, 20, 3, 255, 84, 21, 0, 255, 83, 24, 1, 255, 77, 22, 3, 255, 66, 16, 6, 255, 55, 13, 2, 255, 53, 20, 1, 255, 63, 20, 2, 255, 69, 21, 3, 255, 80, 26, 3, 255, 94, 33, 2, 255, 98, 36, 1, 255, 88, 31, 2, 255, 78, 23, 2, 255, 72, 20, 1, 255, 67, 18, 2, 255, 64, 15, 3, 255, 69, 15, 0, 255, 87, 21, 3, 255, 90, 26, 7, 255, 86, 24, 6, 255, 80, 20, 1, 255, 77, 20, 3, 255, 74, 16, 1, 255, 84, 24, 4, 255, 81, 21, 4, 255, 84, 23, 5, 255, 88, 25, 1, 255, 93, 27, 2, 255, 95, 27, 1, 255, 96, 27, 2, 255, 100, 29, 2, 255, 107, 34, 2, 255, 114, 37, 5, 255, 114, 36, 4, 255, 112, 34, 2, 255, 16, 12, 3, 255, 17, 10, 6, 255, 15, 6, 4, 255, 18, 9, 3, 255, 21, 12, 3, 255, 17, 13, 1, 255, 18, 12, 3, 255, 18, 8, 2, 255, 20, 9, 2, 255, 20, 9, 2, 255, 19, 8, 3, 255, 17, 8, 1, 255, 18, 10, 4, 255, 18, 10, 3, 255, 17, 10, 1, 255, 18, 11, 1, 255, 25, 14, 5, 255, 24, 10, 2, 255, 26, 14, 5, 255, 27, 12, 4, 255, 28, 15, 2, 255, 28, 18, 1, 255, 33, 22, 5, 255, 28, 21, 4, 255, 28, 16, 2, 255, 30, 13, 3, 255, 21, 12, 2, 255, 25, 11, 1, 255, 34, 18, 9, 255, 28, 17, 8, 255, 26, 14, 4, 255, 26, 19, 3, 255, 32, 17, 2, 255, 26, 17, 1, 255, 33, 17, 2, 255, 31, 19, 2, 255, 40, 23, 5, 255, 45, 25, 2, 255, 49, 33, 5, 255, 60, 45, 25, 255, 61, 46, 27, 255, 69, 57, 39, 255, 68, 59, 31, 255, 74, 56, 12, 255, 65, 41, 9, 255, 71, 46, 11, 255, 63, 40, 3, 255, 64, 44, 24, 255, 70, 55, 31, 255, 80, 53, 17, 255, 81, 51, 10, 255, 78, 59, 30, 255, 89, 57, 15, 255, 76, 55, 23, 255, 66, 54, 28, 255, 68, 60, 29, 255, 73, 60, 32, 255, 74, 60, 39, 255, 81, 68, 36, 255, 79, 66, 27, 255, 84, 65, 25, 255, 86, 59, 8, 255, 84, 51, 7, 255, 80, 46, 5, 255, 82, 43, 3, 255, 80, 44, 4, 255, 82, 43, 4, 255, 83, 40, 2, 255, 85, 43, 1, 255, 84, 50, 3, 255, 79, 50, 1, 255, 88, 49, 1, 255, 86, 47, 0, 255, 89, 50, 3, 255, 89, 48, 2, 255, 100, 48, 3, 255, 100, 50, 4, 255, 90, 47, 2, 255, 88, 50, 2, 255, 93, 53, 4, 255, 91, 53, 3, 255, 87, 49, 1, 255, 94, 44, 2, 255, 88, 49, 2, 255, 86, 52, 2, 255, 91, 55, 3, 255, 91, 54, 0, 255, 100, 58, 2, 255, 103, 58, 1, 255, 108, 56, 2, 255, 112, 51, 2, 255, 111, 49, 0, 255, 112, 47, 1, 255, 117, 52, 5, 255, 110, 58, 3, 255, 102, 61, 0, 255, 108, 62, 4, 255, 115, 59, 1, 255, 118, 61, 2, 255, 112, 63, 2, 255, 109, 63, 2, 255, 114, 62, 1, 255, 116, 65, 0, 255, 114, 68, 4, 255, 112, 68, 4, 255, 116, 64, 2, 255, 115, 62, 0, 255, 113, 65, 0, 255, 115, 62, 2, 255, 119, 57, 8, 255, 118, 57, 4, 255, 117, 50, 5, 255, 126, 56, 3, 255, 123, 67, 0, 255, 119, 60, 5, 255, 121, 53, 4, 255, 123, 59, 2, 255, 117, 54, 4, 255, 107, 43, 5, 255, 121, 59, 7, 255, 126, 64, 3, 255, 123, 60, 4, 255, 128, 75, 5, 255, 132, 75, 1, 255, 141, 80, 4, 255, 129, 71, 1, 255, 134, 69, 3, 255, 142, 75, 7, 255, 137, 74, 3, 255, 136, 74, 3, 255, 141, 82, 5, 255, 138, 79, 5, 255, 126, 67, 4, 255, 133, 80, 1, 255, 132, 78, 3, 255, 144, 76, 3, 255, 147, 73, 1, 255, 130, 67, 2, 255, 102, 58, 3, 255, 103, 61, 5, 255, 109, 64, 2, 255, 100, 57, 3, 255, 98, 52, 1, 255, 103, 54, 4, 255, 100, 51, 8, 255, 102, 51, 13, 255, 101, 50, 5, 255, 101, 56, 3, 255, 102, 56, 1, 255, 104, 59, 6, 255, 104, 59, 6, 255, 106, 60, 10, 255, 107, 62, 12, 255, 105, 57, 8, 255, 104, 56, 13, 255, 98, 56, 8, 255, 107, 59, 7, 255, 110, 56, 3, 255, 112, 62, 9, 255, 110, 63, 14, 255, 107, 60, 18, 255, 108, 63, 13, 255, 106, 62, 13, 255, 106, 62, 17, 255, 108, 64, 22, 255, 109, 66, 8, 255, 110, 66, 12, 255, 109, 63, 17, 255, 109, 66, 20, 255, 108, 68, 16, 255, 108, 70, 23, 255, 109, 70, 28, 255, 112, 72, 18, 255, 112, 71, 18, 255, 107, 72, 29, 255, 102, 74, 19, 255, 106, 71, 38, 255, 107, 72, 23, 255, 106, 73, 22, 255, 112, 75, 25, 255, 103, 73, 27, 255, 111, 75, 20, 255, 117, 83, 22, 255, 106, 82, 21, 255, 108, 82, 21, 255, 107, 85, 26, 255, 105, 84, 33, 255, 108, 83, 30, 255, 110, 86, 19, 255, 107, 81, 38, 255, 112, 81, 33, 255, 107, 86, 27, 255, 110, 89, 39, 255, 104, 84, 29, 255, 110, 87, 35, 255, 111, 87, 40, 255, 108, 90, 21, 255, 107, 88, 27, 255, 105, 89, 26, 255, 109, 91, 22, 255, 112, 91, 35, 255, 109, 91, 33, 255, 111, 90, 33, 255, 110, 89, 29, 255, 109, 88, 34, 255, 109, 88, 39, 255, 106, 92, 32, 255, 112, 94, 24, 255, 114, 88, 29, 255, 110, 87, 31, 255, 115, 92, 17, 255, 121, 93, 13, 255, 116, 91, 25, 255, 106, 89, 18, 255, 112, 88, 33, 255, 113, 84, 33, 255, 116, 86, 26, 255, 114, 85, 22, 255, 113, 82, 28, 255, 113, 83, 13, 255, 112, 82, 20, 255, 110, 82, 14, 255, 113, 86, 11, 255, 110, 80, 11, 255, 110, 78, 23, 255, 109, 76, 12, 255, 110, 75, 12, 255, 112, 74, 18, 255, 112, 76, 12, 255, 111, 76, 5, 255, 110, 77, 10, 255, 104, 72, 16, 255, 107, 70, 14, 255, 109, 69, 12, 255, 114, 72, 10, 255, 117, 70, 7, 255, 117, 68, 16, 255, 110, 69, 11, 255, 112, 68, 7, 255, 114, 68, 8, 255, 111, 68, 7, 255, 111, 66, 7, 255, 110, 62, 3, 255, 111, 61, 14, 255, 110, 60, 10, 255, 107, 58, 0, 255, 111, 62, 8, 255, 107, 58, 13, 255, 106, 57, 12, 255, 103, 57, 4, 255, 105, 59, 5, 255, 102, 57, 5, 255, 104, 58, 7, 255, 105, 57, 6, 255, 104, 53, 5, 255, 106, 55, 7, 255, 105, 53, 9, 255, 101, 50, 3, 255, 102, 52, 5, 255, 100, 54, 5, 255, 105, 57, 7, 255, 109, 55, 6, 255, 104, 50, 7, 255, 96, 46, 3, 255, 96, 49, 5, 255, 95, 52, 5, 255, 91, 47, 7, 255, 94, 44, 7, 255, 101, 45, 7, 255, 99, 44, 6, 255, 91, 46, 4, 255, 87, 47, 3, 255, 97, 45, 7, 255, 100, 46, 8, 255, 97, 45, 5, 255, 108, 47, 5, 255, 107, 44, 2, 255, 100, 42, 4, 255, 82, 39, 5, 255, 76, 34, 3, 255, 85, 41, 6, 255, 80, 40, 3, 255, 78, 33, 5, 255, 80, 35, 4, 255, 77, 33, 0, 255, 88, 35, 4, 255, 79, 33, 5, 255, 83, 36, 4, 255, 97, 42, 1, 255, 110, 48, 4, 255, 108, 44, 6, 255, 94, 34, 2, 255, 105, 42, 1, 255, 125, 48, 3, 255, 133, 46, 3, 255, 127, 48, 1, 255, 129, 48, 2, 255, 125, 49, 5, 255, 99, 39, 1, 255, 92, 34, 3, 255, 94, 34, 7, 255, 85, 26, 4, 255, 75, 23, 5, 255, 75, 25, 5, 255, 67, 25, 3, 255, 81, 26, 3, 255, 87, 33, 6, 255, 81, 31, 5, 255, 80, 28, 1, 255, 81, 28, 2, 255, 78, 28, 3, 255, 74, 28, 3, 255, 72, 24, 2, 255, 71, 21, 2, 255, 66, 20, 3, 255, 69, 22, 1, 255, 83, 27, 3, 255, 87, 32, 2, 255, 89, 34, 1, 255, 101, 38, 0, 255, 102, 33, 5, 255, 113, 39, 7, 255, 127, 48, 4, 255, 135, 55, 4, 255, 136, 48, 4, 255, 143, 44, 5, 255, 144, 46, 2, 255, 142, 50, 3, 255, 137, 49, 0, 255, 143, 51, 5, 255, 140, 46, 4, 255, 141, 45, 3, 255, 140, 45, 1, 255, 143, 47, 3, 255, 147, 49, 4, 255, 145, 47, 2, 255, 139, 42, 0, 255, 140, 43, 1, 255, 142, 45, 1, 255, 142, 44, 2, 255, 141, 43, 2, 255, 139, 41, 3, 255, 132, 36, 2, 255, 126, 35, 3, 255, 120, 33, 2, 255, 116, 29, 2, 255, 114, 30, 2, 255, 112, 30, 1, 255, 107, 27, 2, 255, 100, 25, 0, 255, 105, 29, 0, 255, 105, 24, 1, 255, 119, 33, 3, 255, 125, 38, 5, 255, 126, 33, 0, 255, 130, 35, 6, 255, 113, 26, 3, 255, 96, 21, 0, 255, 86, 19, 1, 255, 91, 24, 4, 255, 91, 23, 5, 255, 92, 24, 5, 255, 90, 22, 2, 255, 88, 21, 3, 255, 88, 22, 3, 255, 90, 27, 1, 255, 91, 25, 2, 255, 81, 21, 1, 255, 69, 19, 2, 255, 67, 22, 3, 255, 58, 16, 2, 255, 53, 14, 2, 255, 57, 18, 0, 255, 70, 22, 0, 255, 92, 28, 1, 255, 108, 33, 2, 255, 107, 38, 2, 255, 104, 38, 4, 255, 104, 34, 4, 255, 95, 31, 4, 255, 93, 35, 3, 255, 96, 26, 0, 255, 95, 26, 6, 255, 83, 22, 4, 255, 72, 16, 1, 255, 69, 17, 0, 255, 68, 16, 2, 255, 73, 17, 3, 255, 80, 23, 2, 255, 73, 19, 1, 255, 74, 18, 1, 255, 85, 24, 1, 255, 92, 30, 3, 255, 90, 25, 1, 255, 88, 23, 1, 255, 99, 30, 4, 255, 108, 34, 2, 255, 114, 36, 1, 255, 111, 34, 0, 255, 112, 36, 2, 255, 17, 9, 1, 255, 14, 8, 2, 255, 10, 7, 2, 255, 16, 12, 5, 255, 17, 9, 1, 255, 19, 8, 2, 255, 16, 10, 2, 255, 15, 9, 1, 255, 18, 9, 3, 255, 18, 8, 2, 255, 20, 9, 3, 255, 19, 10, 3, 255, 19, 11, 5, 255, 18, 8, 1, 255, 19, 11, 1, 255, 21, 12, 3, 255, 24, 14, 4, 255, 22, 9, 0, 255, 23, 12, 2, 255, 31, 17, 8, 255, 31, 18, 5, 255, 33, 17, 2, 255, 31, 13, 0, 255, 29, 15, 2, 255, 30, 16, 3, 255, 26, 12, 4, 255, 22, 17, 7, 255, 25, 15, 0, 255, 29, 15, 1, 255, 25, 15, 2, 255, 29, 16, 6, 255, 23, 15, 4, 255, 32, 16, 1, 255, 41, 16, 2, 255, 36, 21, 3, 255, 39, 23, 6, 255, 41, 17, 1, 255, 51, 25, 2, 255, 50, 33, 5, 255, 50, 36, 18, 255, 64, 44, 15, 255, 70, 55, 22, 255, 69, 59, 31, 255, 73, 58, 20, 255, 69, 51, 13, 255, 68, 52, 4, 255, 56, 42, 1, 255, 60, 49, 33, 255, 65, 57, 28, 255, 74, 48, 18, 255, 82, 49, 26, 255, 76, 57, 29, 255, 76, 50, 23, 255, 68, 55, 28, 255, 69, 54, 16, 255, 73, 54, 25, 255, 75, 63, 22, 255, 73, 61, 37, 255, 83, 62, 48, 255, 84, 67, 37, 255, 90, 64, 36, 255, 92, 58, 14, 255, 89, 49, 2, 255, 85, 43, 2, 255, 80, 40, 2, 255, 87, 42, 4, 255, 89, 41, 4, 255, 91, 43, 4, 255, 88, 41, 0, 255, 93, 47, 2, 255, 96, 48, 3, 255, 98, 47, 3, 255, 96, 48, 2, 255, 103, 45, 3, 255, 109, 42, 6, 255, 105, 42, 4, 255, 95, 48, 3, 255, 94, 50, 5, 255, 92, 50, 2, 255, 89, 47, 1, 255, 87, 49, 2, 255, 85, 50, 4, 255, 90, 49, 5, 255, 96, 51, 3, 255, 92, 51, 1, 255, 94, 55, 3, 255, 102, 55, 3, 255, 114, 56, 5, 255, 111, 52, 3, 255, 115, 50, 3, 255, 119, 51, 2, 255, 110, 54, 1, 255, 110, 54, 4, 255, 116, 50, 5, 255, 115, 51, 3, 255, 113, 54, 1, 255, 113, 55, 3, 255, 111, 59, 1, 255, 106, 65, 2, 255, 110, 64, 4, 255, 115, 56, 1, 255, 117, 60, 2, 255, 115, 66, 2, 255, 113, 66, 2, 255, 111, 63, 5, 255, 109, 66, 7, 255, 102, 65, 1, 255, 110, 58, 2, 255, 122, 48, 5, 255, 120, 44, 1, 255, 114, 51, 4, 255, 112, 45, 3, 255, 119, 42, 3, 255, 119, 53, 5, 255, 116, 59, 6, 255, 120, 64, 5, 255, 124, 67, 1, 255, 119, 57, 2, 255, 121, 58, 3, 255, 128, 70, 5, 255, 122, 67, 1, 255, 124, 74, 2, 255, 127, 75, 3, 255, 131, 73, 6, 255, 131, 71, 2, 255, 137, 74, 3, 255, 130, 68, 4, 255, 122, 55, 4, 255, 129, 67, 0, 255, 141, 77, 1, 255, 130, 62, 2, 255, 124, 53, 2, 255, 122, 48, 7, 255, 133, 59, 8, 255, 130, 65, 4, 255, 143, 81, 4, 255, 139, 78, 5, 255, 139, 76, 5, 255, 133, 73, 10, 255, 139, 73, 4, 255, 139, 76, 5, 255, 128, 74, 3, 255, 129, 72, 8, 255, 123, 73, 8, 255, 107, 63, 9, 255, 98, 55, 14, 255, 105, 57, 13, 255, 100, 56, 9, 255, 99, 55, 11, 255, 101, 57, 10, 255, 98, 54, 10, 255, 106, 59, 16, 255, 106, 60, 11, 255, 101, 55, 8, 255, 105, 54, 12, 255, 110, 57, 17, 255, 106, 62, 19, 255, 107, 63, 17, 255, 105, 55, 12, 255, 106, 60, 13, 255, 105, 62, 16, 255, 104, 62, 16, 255, 105, 62, 16, 255, 110, 69, 16, 255, 107, 67, 15, 255, 106, 67, 14, 255, 107, 67, 18, 255, 106, 69, 12, 255, 104, 69, 15, 255, 104, 71, 14, 255, 106, 72, 24, 255, 104, 67, 20, 255, 108, 70, 18, 255, 115, 78, 24, 255, 114, 72, 38, 255, 110, 74, 23, 255, 106, 75, 28, 255, 104, 72, 30, 255, 106, 72, 24, 255, 108, 74, 25, 255, 105, 76, 36, 255, 106, 81, 21, 255, 110, 80, 20, 255, 108, 81, 28, 255, 111, 85, 23, 255, 114, 83, 32, 255, 104, 85, 25, 255, 107, 84, 38, 255, 107, 83, 29, 255, 104, 83, 34, 255, 108, 85, 37, 255, 106, 88, 32, 255, 111, 93, 29, 255, 104, 86, 33, 255, 111, 88, 32, 255, 115, 90, 25, 255, 112, 93, 26, 255, 114, 91, 36, 255, 110, 85, 38, 255, 110, 89, 29, 255, 112, 90, 30, 255, 112, 91, 28, 255, 112, 91, 29, 255, 112, 92, 28, 255, 113, 91, 31, 255, 116, 91, 27, 255, 118, 96, 31, 255, 113, 91, 23, 255, 112, 89, 27, 255, 105, 92, 30, 255, 111, 90, 28, 255, 114, 89, 36, 255, 116, 91, 27, 255, 117, 92, 10, 255, 116, 87, 25, 255, 117, 88, 27, 255, 115, 83, 20, 255, 115, 86, 24, 255, 111, 84, 29, 255, 111, 82, 23, 255, 109, 79, 19, 255, 110, 81, 22, 255, 116, 84, 27, 255, 113, 79, 22, 255, 107, 80, 23, 255, 107, 74, 29, 255, 103, 77, 22, 255, 106, 74, 14, 255, 106, 74, 15, 255, 108, 73, 24, 255, 114, 72, 18, 255, 113, 70, 20, 255, 113, 71, 18, 255, 111, 72, 10, 255, 110, 70, 8, 255, 115, 70, 8, 255, 113, 67, 11, 255, 113, 68, 6, 255, 115, 67, 7, 255, 118, 69, 11, 255, 111, 65, 7, 255, 110, 66, 6, 255, 110, 65, 5, 255, 110, 66, 4, 255, 110, 61, 10, 255, 115, 64, 12, 255, 113, 64, 3, 255, 109, 59, 3, 255, 107, 58, 12, 255, 105, 57, 7, 255, 106, 57, 4, 255, 107, 60, 6, 255, 105, 58, 7, 255, 106, 54, 8, 255, 107, 54, 8, 255, 108, 55, 5, 255, 104, 52, 6, 255, 100, 53, 1, 255, 103, 57, 7, 255, 96, 51, 2, 255, 102, 56, 2, 255, 109, 52, 4, 255, 100, 48, 4, 255, 97, 48, 1, 255, 107, 54, 8, 255, 102, 52, 0, 255, 92, 44, 2, 255, 94, 46, 2, 255, 99, 48, 3, 255, 94, 47, 4, 255, 89, 45, 3, 255, 95, 49, 4, 255, 107, 49, 4, 255, 101, 45, 0, 255, 99, 50, 3, 255, 108, 46, 6, 255, 103, 41, 3, 255, 98, 43, 4, 255, 87, 35, 2, 255, 82, 35, 2, 255, 93, 49, 5, 255, 93, 38, 2, 255, 77, 35, 2, 255, 80, 37, 3, 255, 80, 34, 8, 255, 87, 31, 8, 255, 83, 33, 1, 255, 90, 39, 2, 255, 108, 42, 3, 255, 119, 44, 1, 255, 117, 48, 3, 255, 101, 40, 3, 255, 103, 34, 3, 255, 107, 34, 1, 255, 115, 49, 3, 255, 125, 48, 2, 255, 129, 47, 3, 255, 129, 51, 2, 255, 119, 48, 0, 255, 100, 40, 0, 255, 94, 34, 3, 255, 97, 33, 3, 255, 84, 25, 0, 255, 70, 28, 2, 255, 69, 25, 4, 255, 87, 27, 3, 255, 90, 31, 3, 255, 87, 32, 3, 255, 90, 33, 1, 255, 91, 29, 0, 255, 90, 30, 1, 255, 86, 30, 1, 255, 82, 31, 3, 255, 84, 31, 4, 255, 79, 29, 3, 255, 71, 25, 1, 255, 94, 36, 8, 255, 106, 38, 8, 255, 103, 36, 3, 255, 109, 41, 1, 255, 118, 43, 1, 255, 133, 48, 4, 255, 142, 53, 3, 255, 140, 54, 0, 255, 137, 53, 3, 255, 136, 51, 2, 255, 141, 50, 2, 255, 143, 47, 2, 255, 138, 49, 2, 255, 146, 50, 2, 255, 143, 45, 1, 255, 146, 44, 4, 255, 144, 48, 5, 255, 143, 47, 1, 255, 148, 51, 3, 255, 145, 47, 1, 255, 143, 47, 2, 255, 143, 46, 3, 255, 144, 47, 2, 255, 140, 44, 2, 255, 140, 43, 4, 255, 138, 41, 4, 255, 127, 33, 0, 255, 123, 32, 2, 255, 122, 33, 2, 255, 113, 29, 1, 255, 112, 28, 1, 255, 118, 31, 3, 255, 113, 35, 6, 255, 109, 32, 3, 255, 116, 33, 5, 255, 107, 25, 1, 255, 114, 31, 2, 255, 123, 38, 2, 255, 130, 39, 4, 255, 127, 35, 4, 255, 116, 29, 5, 255, 96, 23, 3, 255, 85, 19, 1, 255, 89, 22, 2, 255, 90, 21, 3, 255, 93, 22, 5, 255, 93, 25, 4, 255, 87, 22, 3, 255, 90, 22, 2, 255, 93, 22, 3, 255, 88, 25, 5, 255, 81, 22, 1, 255, 82, 21, 3, 255, 74, 18, 3, 255, 64, 16, 6, 255, 54, 15, 2, 255, 61, 19, 3, 255, 71, 19, 5, 255, 77, 18, 4, 255, 83, 19, 3, 255, 92, 24, 1, 255, 99, 28, 2, 255, 106, 26, 4, 255, 116, 31, 6, 255, 115, 37, 4, 255, 109, 38, 1, 255, 102, 33, 5, 255, 79, 18, 1, 255, 69, 18, 3, 255, 69, 22, 6, 255, 66, 19, 4, 255, 71, 18, 3, 255, 73, 18, 0, 255, 72, 21, 1, 255, 67, 17, 2, 255, 76, 23, 4, 255, 84, 27, 2, 255, 90, 28, 5, 255, 89, 24, 0, 255, 103, 30, 0, 255, 112, 33, 2, 255, 108, 33, 4, 255, 104, 30, 0, 255, 103, 31, 1, 255, 15, 10, 5, 255, 15, 9, 4, 255, 17, 8, 3, 255, 17, 8, 0, 255, 15, 5, 2, 255, 19, 10, 8, 255, 16, 10, 2, 255, 13, 9, 2, 255, 14, 9, 6, 255, 18, 7, 3, 255, 26, 9, 3, 255, 23, 8, 1, 255, 18, 9, 2, 255, 21, 12, 2, 255, 23, 14, 3, 255, 24, 15, 4, 255, 23, 15, 3, 255, 25, 16, 3, 255, 25, 16, 3, 255, 30, 18, 8, 255, 26, 13, 3, 255, 31, 16, 3, 255, 31, 17, 2, 255, 25, 15, 1, 255, 18, 13, 1, 255, 21, 15, 2, 255, 26, 16, 1, 255, 23, 13, 1, 255, 26, 16, 3, 255, 23, 13, 2, 255, 24, 13, 2, 255, 26, 15, 5, 255, 34, 16, 2, 255, 39, 20, 7, 255, 33, 17, 5, 255, 30, 17, 6, 255, 38, 23, 6, 255, 49, 25, 1, 255, 52, 30, 0, 255, 50, 28, 7, 255, 63, 41, 9, 255, 60, 47, 12, 255, 72, 55, 31, 255, 81, 57, 26, 255, 71, 54, 3, 255, 68, 46, 2, 255, 60, 33, 6, 255, 63, 44, 21, 255, 64, 51, 17, 255, 68, 48, 19, 255, 72, 49, 23, 255, 66, 49, 27, 255, 62, 50, 41, 255, 72, 56, 20, 255, 76, 54, 12, 255, 68, 56, 29, 255, 74, 61, 27, 255, 84, 63, 34, 255, 80, 66, 44, 255, 79, 66, 23, 255, 80, 65, 20, 255, 82, 51, 19, 255, 85, 42, 8, 255, 84, 46, 1, 255, 78, 42, 2, 255, 79, 45, 5, 255, 80, 45, 3, 255, 87, 46, 2, 255, 91, 46, 1, 255, 95, 44, 2, 255, 93, 48, 2, 255, 92, 52, 3, 255, 96, 45, 0, 255, 101, 45, 1, 255, 90, 43, 4, 255, 87, 46, 5, 255, 96, 47, 2, 255, 104, 49, 5, 255, 99, 51, 2, 255, 84, 42, 2, 255, 87, 46, 11, 255, 89, 48, 5, 255, 89, 50, 0, 255, 98, 50, 0, 255, 102, 55, 6, 255, 103, 54, 2, 255, 113, 52, 4, 255, 115, 54, 5, 255, 113, 52, 1, 255, 118, 50, 4, 255, 115, 54, 1, 255, 114, 55, 0, 255, 118, 52, 1, 255, 120, 49, 3, 255, 114, 52, 3, 255, 109, 59, 4, 255, 106, 60, 2, 255, 110, 61, 3, 255, 110, 64, 3, 255, 110, 62, 2, 255, 116, 57, 2, 255, 120, 58, 3, 255, 111, 54, 1, 255, 113, 57, 2, 255, 115, 61, 2, 255, 111, 62, 6, 255, 100, 57, 1, 255, 107, 60, 2, 255, 116, 54, 0, 255, 124, 61, 3, 255, 126, 57, 3, 255, 124, 52, 1, 255, 116, 46, 4, 255, 115, 53, 8, 255, 124, 74, 5, 255, 120, 75, 3, 255, 120, 70, 1, 255, 116, 55, 4, 255, 126, 62, 4, 255, 126, 68, 4, 255, 122, 66, 4, 255, 122, 72, 1, 255, 123, 68, 6, 255, 137, 70, 8, 255, 125, 61, 6, 255, 118, 61, 4, 255, 123, 63, 4, 255, 124, 66, 2, 255, 135, 81, 5, 255, 128, 68, 5, 255, 121, 52, 10, 255, 113, 48, 1, 255, 106, 47, 9, 255, 104, 52, 8, 255, 129, 72, 9, 255, 146, 85, 4, 255, 144, 81, 4, 255, 146, 82, 1, 255, 148, 79, 10, 255, 143, 77, 3, 255, 139, 74, 7, 255, 138, 66, 6, 255, 128, 70, 5, 255, 127, 75, 8, 255, 129, 70, 7, 255, 120, 68, 8, 255, 102, 65, 9, 255, 101, 57, 9, 255, 100, 56, 10, 255, 100, 57, 9, 255, 103, 60, 10, 255, 98, 55, 8, 255, 97, 56, 8, 255, 103, 61, 10, 255, 106, 58, 7, 255, 105, 60, 6, 255, 101, 61, 12, 255, 106, 64, 16, 255, 108, 61, 15, 255, 107, 61, 20, 255, 108, 63, 11, 255, 108, 61, 12, 255, 107, 59, 17, 255, 110, 63, 18, 255, 109, 62, 18, 255, 109, 70, 19, 255, 103, 65, 15, 255, 107, 67, 17, 255, 110, 68, 16, 255, 112, 72, 13, 255, 108, 66, 25, 255, 111, 69, 21, 255, 113, 70, 37, 255, 111, 77, 27, 255, 111, 71, 30, 255, 110, 72, 24, 255, 107, 74, 26, 255, 109, 76, 34, 255, 108, 74, 30, 255, 111, 80, 20, 255, 111, 79, 35, 255, 108, 77, 26, 255, 111, 78, 28, 255, 115, 82, 32, 255, 118, 87, 28, 255, 112, 81, 33, 255, 107, 82, 38, 255, 105, 82, 34, 255, 106, 86, 32, 255, 107, 87, 28, 255, 106, 85, 28, 255, 107, 86, 35, 255, 103, 89, 29, 255, 113, 90, 35, 255, 114, 88, 36, 255, 110, 90, 36, 255, 109, 92, 36, 255, 109, 90, 32, 255, 108, 87, 34, 255, 111, 92, 36, 255, 111, 90, 32, 255, 116, 95, 38, 255, 117, 97, 29, 255, 115, 94, 31, 255, 109, 89, 24, 255, 113, 93, 28, 255, 117, 97, 25, 255, 112, 91, 24, 255, 110, 89, 31, 255, 112, 91, 23, 255, 112, 89, 18, 255, 115, 89, 28, 255, 116, 92, 30, 255, 117, 94, 16, 255, 115, 85, 20, 255, 120, 86, 26, 255, 120, 86, 23, 255, 110, 80, 29, 255, 109, 85, 23, 255, 113, 86, 16, 255, 112, 83, 20, 255, 108, 83, 21, 255, 111, 85, 16, 255, 110, 79, 13, 255, 115, 79, 14, 255, 113, 77, 19, 255, 104, 76, 20, 255, 105, 75, 25, 255, 101, 71, 19, 255, 109, 75, 22, 255, 110, 71, 9, 255, 112, 73, 18, 255, 108, 74, 13, 255, 111, 75, 13, 255, 110, 69, 13, 255, 109, 68, 5, 255, 110, 69, 6, 255, 109, 67, 3, 255, 113, 66, 11, 255, 111, 66, 12, 255, 106, 67, 5, 255, 106, 68, 5, 255, 106, 65, 10, 255, 108, 61, 11, 255, 115, 63, 5, 255, 117, 64, 10, 255, 112, 63, 7, 255, 110, 58, 8, 255, 106, 56, 10, 255, 103, 56, 3, 255, 110, 59, 5, 255, 109, 55, 6, 255, 106, 54, 7, 255, 105, 54, 7, 255, 106, 54, 7, 255, 108, 54, 7, 255, 106, 53, 6, 255, 96, 54, 3, 255, 92, 51, 0, 255, 99, 54, 4, 255, 99, 51, 3, 255, 101, 48, 4, 255, 100, 48, 5, 255, 94, 45, 2, 255, 94, 44, 2, 255, 93, 47, 5, 255, 92, 45, 4, 255, 100, 44, 4, 255, 97, 47, 1, 255, 93, 48, 2, 255, 90, 43, 1, 255, 94, 43, 6, 255, 94, 42, 7, 255, 95, 40, 3, 255, 99, 47, 2, 255, 103, 47, 8, 255, 91, 37, 5, 255, 85, 37, 3, 255, 75, 37, 2, 255, 80, 40, 2, 255, 95, 41, 1, 255, 94, 37, 2, 255, 81, 38, 2, 255, 79, 33, 1, 255, 79, 31, 6, 255, 87, 33, 3, 255, 93, 35, 1, 255, 101, 40, 3, 255, 114, 48, 2, 255, 119, 44, 4, 255, 124, 48, 2, 255, 121, 49, 4, 255, 105, 36, 4, 255, 112, 42, 4, 255, 125, 52, 2, 255, 133, 52, 4, 255, 129, 49, 4, 255, 132, 51, 3, 255, 127, 49, 1, 255, 113, 46, 2, 255, 108, 38, 6, 255, 113, 37, 4, 255, 106, 42, 2, 255, 99, 37, 0, 255, 102, 33, 8, 255, 116, 42, 7, 255, 117, 39, 4, 255, 122, 42, 8, 255, 111, 38, 1, 255, 105, 36, 4, 255, 110, 37, 7, 255, 110, 37, 1, 255, 109, 38, 0, 255, 109, 38, 5, 255, 102, 33, 5, 255, 93, 27, 2, 255, 96, 30, 7, 255, 111, 42, 2, 255, 114, 36, 1, 255, 121, 37, 5, 255, 120, 39, 2, 255, 131, 42, 2, 255, 140, 50, 3, 255, 140, 52, 1, 255, 139, 49, 1, 255, 134, 44, 3, 255, 138, 48, 4, 255, 140, 47, 2, 255, 139, 45, 1, 255, 145, 51, 0, 255, 147, 47, 7, 255, 145, 45, 5, 255, 141, 46, 0, 255, 144, 47, 2, 255, 146, 47, 3, 255, 145, 46, 2, 255, 141, 44, 2, 255, 138, 41, 0, 255, 140, 43, 2, 255, 141, 45, 4, 255, 138, 44, 0, 255, 137, 44, 0, 255, 132, 40, 2, 255, 120, 33, 2, 255, 116, 33, 4, 255, 111, 32, 1, 255, 115, 35, 3, 255, 121, 35, 6, 255, 118, 31, 0, 255, 119, 32, 0, 255, 120, 35, 4, 255, 114, 28, 1, 255, 111, 32, 3, 255, 124, 39, 4, 255, 127, 40, 2, 255, 130, 39, 3, 255, 130, 37, 4, 255, 111, 31, 5, 255, 85, 21, 2, 255, 88, 21, 3, 255, 89, 20, 2, 255, 84, 20, 4, 255, 92, 24, 5, 255, 95, 26, 2, 255, 90, 27, 1, 255, 87, 22, 3, 255, 85, 23, 4, 255, 87, 25, 2, 255, 88, 21, 2, 255, 76, 19, 5, 255, 74, 18, 0, 255, 75, 23, 1, 255, 62, 17, 2, 255, 64, 14, 5, 255, 65, 19, 3, 255, 68, 20, 5, 255, 76, 21, 4, 255, 79, 22, 0, 255, 92, 26, 2, 255, 102, 31, 4, 255, 111, 36, 4, 255, 114, 43, 0, 255, 105, 38, 0, 255, 87, 19, 4, 255, 73, 18, 4, 255, 72, 22, 8, 255, 67, 19, 4, 255, 70, 17, 2, 255, 73, 18, 2, 255, 67, 17, 2, 255, 68, 21, 3, 255, 71, 17, 0, 255, 79, 18, 3, 255, 88, 24, 3, 255, 95, 28, 1, 255, 102, 30, 1, 255, 105, 31, 2, 255, 108, 33, 1, 255, 108, 32, 0, 255, 107, 28, 0, 255, 12, 8, 1, 255, 16, 11, 4, 255, 17, 11, 4, 255, 16, 8, 2, 255, 16, 7, 1, 255, 18, 9, 3, 255, 16, 4, 0, 255, 17, 8, 3, 255, 15, 11, 6, 255, 17, 11, 1, 255, 22, 12, 2, 255, 24, 10, 2, 255, 22, 10, 3, 255, 22, 16, 5, 255, 21, 9, 1, 255, 25, 10, 1, 255, 29, 14, 5, 255, 30, 17, 5, 255, 25, 17, 4, 255, 23, 13, 2, 255, 24, 12, 3, 255, 24, 12, 1, 255, 25, 16, 3, 255, 23, 16, 4, 255, 21, 14, 4, 255, 23, 16, 6, 255, 26, 14, 6, 255, 28, 15, 7, 255, 28, 14, 6, 255, 30, 14, 5, 255, 27, 10, 1, 255, 32, 14, 4, 255, 38, 17, 3, 255, 27, 19, 1, 255, 34, 18, 4, 255, 32, 17, 3, 255, 39, 23, 6, 255, 41, 25, 3, 255, 52, 27, 5, 255, 60, 29, 10, 255, 53, 33, 5, 255, 59, 44, 10, 255, 71, 54, 31, 255, 65, 57, 30, 255, 65, 53, 15, 255, 66, 43, 5, 255, 59, 30, 4, 255, 56, 33, 16, 255, 57, 42, 6, 255, 65, 48, 13, 255, 69, 51, 12, 255, 63, 48, 24, 255, 63, 46, 34, 255, 70, 53, 12, 255, 65, 50, 14, 255, 69, 58, 29, 255, 75, 59, 42, 255, 77, 59, 28, 255, 77, 61, 19, 255, 81, 57, 15, 255, 83, 55, 11, 255, 89, 57, 4, 255, 88, 51, 1, 255, 83, 47, 2, 255, 80, 42, 1, 255, 78, 44, 3, 255, 78, 43, 2, 255, 86, 49, 5, 255, 89, 50, 5, 255, 90, 47, 4, 255, 83, 48, 5, 255, 81, 48, 4, 255, 86, 45, 2, 255, 88, 48, 6, 255, 87, 47, 7, 255, 90, 46, 4, 255, 94, 45, 1, 255, 96, 46, 4, 255, 88, 48, 3, 255, 94, 44, 4, 255, 105, 45, 3, 255, 99, 47, 0, 255, 94, 51, 2, 255, 103, 49, 5, 255, 93, 51, 6, 255, 93, 50, 3, 255, 97, 50, 4, 255, 90, 47, 1, 255, 102, 49, 2, 255, 107, 49, 5, 255, 106, 56, 3, 255, 108, 56, 1, 255, 118, 54, 2, 255, 118, 54, 3, 255, 112, 58, 2, 255, 96, 65, 1, 255, 101, 63, 2, 255, 108, 61, 3, 255, 109, 60, 3, 255, 104, 61, 2, 255, 105, 64, 3, 255, 112, 60, 4, 255, 116, 53, 5, 255, 126, 52, 3, 255, 120, 59, 1, 255, 102, 54, 1, 255, 93, 50, 5, 255, 90, 58, 7, 255, 103, 61, 5, 255, 108, 68, 3, 255, 119, 60, 0, 255, 126, 55, 2, 255, 119, 52, 2, 255, 121, 60, 5, 255, 121, 60, 2, 255, 125, 61, 3, 255, 125, 69, 1, 255, 115, 68, 3, 255, 116, 68, 1, 255, 125, 73, 4, 255, 126, 72, 5, 255, 127, 74, 3, 255, 123, 64, 4, 255, 124, 65, 0, 255, 122, 70, 2, 255, 122, 78, 3, 255, 126, 77, 5, 255, 136, 74, 5, 255, 135, 82, 6, 255, 128, 71, 13, 255, 125, 69, 7, 255, 114, 59, 6, 255, 129, 76, 6, 255, 140, 85, 5, 255, 137, 77, 7, 255, 145, 80, 3, 255, 148, 87, 4, 255, 137, 83, 0, 255, 147, 83, 3, 255, 145, 74, 2, 255, 135, 71, 9, 255, 124, 64, 4, 255, 119, 71, 2, 255, 119, 72, 6, 255, 117, 72, 4, 255, 123, 70, 5, 255, 125, 73, 11, 255, 118, 68, 6, 255, 113, 65, 1, 255, 109, 63, 7, 255, 108, 64, 8, 255, 108, 64, 5, 255, 101, 56, 8, 255, 101, 59, 13, 255, 95, 60, 8, 255, 98, 59, 12, 255, 106, 55, 16, 255, 106, 56, 15, 255, 98, 63, 6, 255, 98, 66, 14, 255, 104, 65, 18, 255, 108, 69, 19, 255, 116, 76, 26, 255, 105, 62, 17, 255, 107, 62, 21, 255, 107, 66, 17, 255, 105, 66, 20, 255, 107, 66, 18, 255, 109, 67, 20, 255, 112, 71, 25, 255, 111, 71, 28, 255, 114, 75, 16, 255, 110, 68, 32, 255, 106, 74, 32, 255, 109, 76, 13, 255, 111, 75, 25, 255, 109, 74, 30, 255, 109, 75, 31, 255, 112, 77, 27, 255, 114, 82, 29, 255, 111, 83, 23, 255, 112, 81, 30, 255, 117, 82, 40, 255, 116, 82, 29, 255, 114, 82, 30, 255, 112, 80, 38, 255, 116, 84, 43, 255, 112, 83, 40, 255, 112, 87, 39, 255, 109, 85, 33, 255, 109, 85, 34, 255, 112, 88, 41, 255, 110, 86, 46, 255, 112, 87, 35, 255, 112, 88, 30, 255, 108, 91, 36, 255, 107, 93, 31, 255, 113, 93, 36, 255, 115, 94, 37, 255, 113, 94, 33, 255, 113, 94, 24, 255, 114, 93, 36, 255, 113, 92, 31, 255, 112, 93, 27, 255, 111, 91, 34, 255, 108, 91, 30, 255, 115, 94, 35, 255, 115, 96, 26, 255, 113, 92, 28, 255, 115, 91, 27, 255, 118, 89, 24, 255, 118, 93, 23, 255, 117, 92, 18, 255, 116, 90, 23, 255, 115, 87, 22, 255, 116, 84, 30, 255, 114, 86, 23, 255, 113, 85, 16, 255, 116, 88, 12, 255, 116, 86, 16, 255, 121, 84, 22, 255, 120, 81, 20, 255, 113, 76, 17, 255, 108, 78, 18, 255, 109, 79, 20, 255, 108, 74, 23, 255, 107, 72, 18, 255, 108, 77, 10, 255, 107, 75, 17, 255, 105, 75, 15, 255, 106, 70, 15, 255, 111, 70, 17, 255, 106, 72, 6, 255, 108, 69, 7, 255, 113, 69, 13, 255, 109, 67, 9, 255, 106, 64, 13, 255, 107, 67, 10, 255, 113, 67, 11, 255, 109, 63, 7, 255, 109, 67, 12, 255, 104, 64, 7, 255, 106, 65, 5, 255, 111, 63, 6, 255, 109, 63, 1, 255, 111, 62, 5, 255, 112, 60, 6, 255, 105, 60, 9, 255, 101, 57, 8, 255, 106, 56, 6, 255, 104, 56, 10, 255, 98, 54, 5, 255, 102, 55, 7, 255, 108, 55, 8, 255, 107, 55, 8, 255, 102, 53, 5, 255, 102, 52, 6, 255, 102, 52, 6, 255, 95, 51, 3, 255, 95, 50, 3, 255, 102, 50, 5, 255, 100, 48, 3, 255, 98, 48, 3, 255, 96, 44, 1, 255, 96, 44, 2, 255, 91, 47, 6, 255, 89, 42, 2, 255, 98, 43, 2, 255, 96, 50, 3, 255, 97, 51, 4, 255, 97, 44, 5, 255, 96, 42, 3, 255, 94, 44, 3, 255, 91, 44, 2, 255, 94, 44, 4, 255, 101, 42, 4, 255, 103, 41, 3, 255, 85, 35, 3, 255, 81, 39, 4, 255, 79, 41, 3, 255, 80, 40, 1, 255, 97, 44, 4, 255, 90, 39, 4, 255, 81, 35, 2, 255, 79, 36, 7, 255, 87, 34, 4, 255, 109, 46, 4, 255, 111, 40, 3, 255, 118, 48, 5, 255, 125, 45, 2, 255, 133, 51, 5, 255, 117, 46, 4, 255, 104, 38, 4, 255, 109, 38, 3, 255, 129, 50, 6, 255, 134, 54, 2, 255, 131, 57, 0, 255, 134, 54, 2, 255, 138, 48, 5, 255, 135, 49, 6, 255, 130, 48, 4, 255, 116, 38, 2, 255, 119, 36, 2, 255, 118, 31, 0, 255, 117, 30, 1, 255, 127, 43, 2, 255, 125, 41, 0, 255, 120, 47, 1, 255, 119, 48, 1, 255, 119, 44, 5, 255, 118, 39, 6, 255, 125, 42, 4, 255, 127, 41, 2, 255, 123, 37, 1, 255, 107, 28, 0, 255, 99, 30, 2, 255, 96, 28, 0, 255, 116, 40, 2, 255, 117, 39, 3, 255, 114, 36, 3, 255, 123, 41, 2, 255, 121, 42, 2, 255, 133, 46, 6, 255, 145, 48, 7, 255, 141, 46, 3, 255, 138, 46, 2, 255, 138, 47, 2, 255, 140, 45, 3, 255, 142, 45, 2, 255, 139, 41, 1, 255, 144, 49, 2, 255, 146, 47, 4, 255, 147, 43, 4, 255, 145, 44, 3, 255, 146, 43, 2, 255, 146, 45, 3, 255, 144, 47, 4, 255, 138, 42, 1, 255, 139, 42, 2, 255, 139, 43, 1, 255, 142, 47, 2, 255, 138, 44, 2, 255, 133, 42, 1, 255, 127, 42, 2, 255, 118, 37, 1, 255, 116, 35, 1, 255, 120, 34, 2, 255, 122, 32, 2, 255, 128, 36, 3, 255, 126, 38, 5, 255, 117, 33, 2, 255, 111, 28, 0, 255, 118, 35, 4, 255, 124, 37, 1, 255, 129, 40, 2, 255, 135, 41, 4, 255, 137, 42, 5, 255, 123, 37, 5, 255, 101, 30, 8, 255, 85, 20, 1, 255, 88, 22, 3, 255, 87, 23, 4, 255, 92, 22, 5, 255, 103, 26, 8, 255, 89, 22, 0, 255, 86, 23, 1, 255, 87, 23, 8, 255, 86, 22, 5, 255, 82, 18, 1, 255, 79, 22, 3, 255, 93, 27, 4, 255, 96, 23, 4, 255, 75, 18, 2, 255, 54, 15, 0, 255, 58, 18, 1, 255, 71, 16, 3, 255, 82, 20, 5, 255, 83, 22, 3, 255, 86, 24, 4, 255, 93, 25, 4, 255, 94, 27, 0, 255, 112, 40, 2, 255, 110, 37, 3, 255, 85, 22, 2, 255, 75, 18, 4, 255, 64, 17, 2, 255, 64, 17, 2, 255, 68, 16, 1, 255, 71, 22, 5, 255, 67, 18, 2, 255, 72, 20, 4, 255, 77, 21, 7, 255, 77, 15, 4, 255, 83, 19, 2, 255, 95, 27, 2, 255, 102, 29, 1, 255, 104, 30, 0, 255, 108, 37, 3, 255, 107, 34, 2, 255, 106, 32, 1, 255, 14, 10, 1, 255, 15, 11, 4, 255, 15, 9, 4, 255, 16, 10, 4, 255, 17, 9, 1, 255, 20, 10, 2, 255, 22, 9, 4, 255, 19, 7, 2, 255, 18, 11, 2, 255, 16, 10, 0, 255, 19, 10, 1, 255, 19, 8, 1, 255, 19, 8, 1, 255, 21, 10, 1, 255, 22, 11, 2, 255, 25, 15, 5, 255, 29, 16, 7, 255, 32, 17, 7, 255, 32, 17, 5, 255, 26, 13, 1, 255, 26, 15, 3, 255, 20, 12, 2, 255, 20, 13, 4, 255, 22, 14, 5, 255, 20, 11, 1, 255, 23, 12, 2, 255, 25, 11, 1, 255, 27, 13, 2, 255, 32, 16, 4, 255, 36, 19, 6, 255, 31, 14, 1, 255, 36, 19, 4, 255, 42, 22, 6, 255, 35, 20, 1, 255, 35, 18, 0, 255, 47, 21, 2, 255, 44, 26, 3, 255, 48, 28, 2, 255, 50, 26, 3, 255, 52, 28, 2, 255, 63, 29, 7, 255, 62, 35, 2, 255, 47, 41, 17, 255, 60, 58, 40, 255, 62, 53, 29, 255, 63, 43, 8, 255, 59, 32, 2, 255, 60, 38, 5, 255, 60, 44, 8, 255, 62, 43, 5, 255, 65, 45, 13, 255, 67, 48, 18, 255, 69, 48, 14, 255, 67, 49, 20, 255, 60, 45, 25, 255, 71, 52, 37, 255, 81, 61, 38, 255, 79, 63, 21, 255, 83, 57, 19, 255, 88, 57, 15, 255, 78, 51, 1, 255, 84, 53, 7, 255, 90, 49, 6, 255, 87, 42, 0, 255, 84, 43, 3, 255, 82, 45, 4, 255, 81, 46, 5, 255, 85, 46, 3, 255, 86, 44, 2, 255, 84, 43, 1, 255, 84, 40, 0, 255, 92, 43, 1, 255, 88, 46, 1, 255, 75, 44, 4, 255, 76, 45, 5, 255, 81, 44, 2, 255, 77, 42, 3, 255, 87, 43, 4, 255, 87, 42, 0, 255, 99, 47, 1, 255, 111, 53, 5, 255, 107, 50, 2, 255, 102, 51, 5, 255, 90, 49, 5, 255, 90, 46, 4, 255, 86, 47, 0, 255, 90, 50, 3, 255, 100, 50, 5, 255, 103, 54, 6, 255, 96, 52, 5, 255, 96, 53, 3, 255, 102, 52, 2, 255, 110, 55, 5, 255, 112, 53, 4, 255, 106, 57, 1, 255, 105, 59, 0, 255, 103, 58, 1, 255, 97, 63, 2, 255, 99, 61, 3, 255, 103, 56, 2, 255, 99, 55, 1, 255, 99, 58, 2, 255, 96, 60, 5, 255, 96, 55, 3, 255, 95, 56, 1, 255, 90, 55, 0, 255, 98, 56, 4, 255, 99, 58, 2, 255, 102, 64, 6, 255, 102, 60, 3, 255, 110, 61, 5, 255, 120, 61, 5, 255, 128, 66, 5, 255, 120, 64, 1, 255, 110, 66, 1, 255, 114, 64, 2, 255, 120, 69, 1, 255, 124, 70, 5, 255, 126, 68, 2, 255, 124, 68, 1, 255, 119, 70, 3, 255, 122, 74, 4, 255, 122, 74, 2, 255, 116, 75, 3, 255, 120, 68, 3, 255, 134, 77, 1, 255, 136, 83, 6, 255, 135, 87, 2, 255, 135, 91, 4, 255, 141, 91, 7, 255, 145, 88, 3, 255, 133, 70, 3, 255, 145, 83, 4, 255, 147, 82, 4, 255, 128, 63, 6, 255, 132, 66, 6, 255, 141, 76, 5, 255, 141, 80, 10, 255, 141, 79, 0, 255, 140, 79, 7, 255, 130, 78, 8, 255, 127, 76, 8, 255, 121, 69, 12, 255, 114, 61, 2, 255, 117, 69, 9, 255, 115, 63, 7, 255, 114, 60, 4, 255, 122, 68, 10, 255, 117, 65, 7, 255, 108, 63, 5, 255, 103, 60, 14, 255, 100, 60, 10, 255, 104, 62, 8, 255, 101, 61, 8, 255, 95, 64, 7, 255, 93, 59, 12, 255, 98, 61, 17, 255, 94, 58, 20, 255, 97, 58, 19, 255, 118, 70, 18, 255, 101, 64, 15, 255, 96, 67, 18, 255, 106, 71, 22, 255, 106, 64, 18, 255, 103, 68, 18, 255, 107, 68, 26, 255, 108, 69, 24, 255, 110, 75, 12, 255, 109, 70, 24, 255, 107, 69, 28, 255, 108, 72, 21, 255, 109, 72, 16, 255, 110, 73, 18, 255, 109, 74, 23, 255, 110, 74, 21, 255, 112, 78, 24, 255, 110, 78, 23, 255, 108, 79, 26, 255, 108, 78, 30, 255, 112, 78, 38, 255, 111, 79, 30, 255, 111, 81, 30, 255, 116, 83, 34, 255, 114, 82, 26, 255, 110, 84, 27, 255, 110, 84, 29, 255, 112, 85, 31, 255, 111, 87, 33, 255, 111, 89, 34, 255, 108, 88, 33, 255, 110, 90, 35, 255, 113, 92, 41, 255, 113, 90, 39, 255, 112, 91, 28, 255, 113, 92, 32, 255, 111, 93, 43, 255, 109, 93, 32, 255, 113, 90, 38, 255, 115, 93, 38, 255, 112, 93, 26, 255, 113, 96, 23, 255, 112, 93, 30, 255, 111, 92, 31, 255, 110, 92, 30, 255, 113, 97, 22, 255, 123, 95, 28, 255, 119, 91, 32, 255, 117, 93, 26, 255, 110, 90, 33, 255, 111, 92, 34, 255, 116, 97, 31, 255, 119, 91, 24, 255, 117, 87, 22, 255, 117, 88, 24, 255, 117, 88, 25, 255, 116, 86, 24, 255, 114, 89, 24, 255, 110, 87, 13, 255, 110, 85, 23, 255, 107, 82, 30, 255, 109, 82, 8, 255, 113, 81, 19, 255, 109, 80, 17, 255, 105, 82, 14, 255, 107, 78, 16, 255, 105, 78, 19, 255, 112, 76, 23, 255, 110, 76, 10, 255, 108, 71, 16, 255, 107, 73, 27, 255, 107, 74, 22, 255, 110, 70, 18, 255, 111, 71, 14, 255, 109, 67, 7, 255, 114, 71, 6, 255, 113, 70, 9, 255, 111, 68, 17, 255, 108, 68, 5, 255, 114, 67, 6, 255, 112, 64, 5, 255, 111, 66, 13, 255, 103, 63, 10, 255, 104, 62, 8, 255, 110, 61, 7, 255, 110, 63, 5, 255, 111, 62, 5, 255, 109, 57, 6, 255, 106, 60, 8, 255, 106, 61, 4, 255, 104, 56, 3, 255, 99, 53, 8, 255, 104, 58, 9, 255, 104, 53, 5, 255, 106, 50, 3, 255, 106, 54, 7, 255, 98, 53, 5, 255, 103, 53, 7, 255, 102, 48, 5, 255, 103, 53, 9, 255, 96, 49, 5, 255, 102, 49, 5, 255, 102, 53, 7, 255, 105, 49, 5, 255, 96, 47, 2, 255, 91, 46, 2, 255, 96, 44, 7, 255, 89, 45, 4, 255, 93, 46, 3, 255, 105, 48, 4, 255, 106, 46, 6, 255, 92, 45, 4, 255, 96, 45, 5, 255, 110, 44, 3, 255, 109, 44, 6, 255, 88, 41, 6, 255, 89, 40, 1, 255, 91, 40, 0, 255, 85, 35, 3, 255, 81, 38, 4, 255, 79, 38, 2, 255, 85, 38, 5, 255, 87, 37, 1, 255, 82, 35, 2, 255, 80, 36, 1, 255, 78, 36, 3, 255, 93, 36, 3, 255, 115, 47, 3, 255, 121, 43, 4, 255, 119, 45, 3, 255, 128, 48, 0, 255, 130, 49, 1, 255, 114, 41, 1, 255, 111, 43, 5, 255, 108, 36, 4, 255, 120, 41, 1, 255, 135, 53, 4, 255, 132, 51, 2, 255, 136, 47, 1, 255, 143, 47, 4, 255, 142, 55, 5, 255, 135, 53, 2, 255, 120, 43, 3, 255, 109, 32, 2, 255, 107, 33, 8, 255, 101, 27, 1, 255, 106, 31, 0, 255, 110, 33, 6, 255, 116, 41, 3, 255, 130, 45, 2, 255, 132, 42, 0, 255, 132, 45, 0, 255, 130, 46, 1, 255, 130, 46, 5, 255, 119, 35, 2, 255, 107, 31, 6, 255, 95, 27, 1, 255, 110, 34, 4, 255, 129, 39, 6, 255, 126, 40, 1, 255, 112, 39, 4, 255, 129, 44, 5, 255, 125, 44, 2, 255, 133, 44, 2, 255, 144, 46, 4, 255, 140, 44, 1, 255, 138, 47, 0, 255, 139, 47, 2, 255, 135, 41, 2, 255, 134, 40, 6, 255, 138, 43, 1, 255, 143, 49, 2, 255, 144, 46, 2, 255, 149, 43, 3, 255, 147, 46, 4, 255, 147, 44, 3, 255, 146, 44, 2, 255, 142, 44, 2, 255, 143, 48, 4, 255, 139, 43, 1, 255, 139, 43, 1, 255, 137, 40, 3, 255, 135, 37, 4, 255, 136, 38, 3, 255, 134, 38, 0, 255, 127, 33, 1, 255, 127, 35, 4, 255, 131, 37, 4, 255, 130, 34, 2, 255, 130, 37, 3, 255, 126, 41, 5, 255, 114, 34, 0, 255, 109, 32, 2, 255, 125, 39, 6, 255, 124, 38, 0, 255, 128, 37, 1, 255, 133, 39, 1, 255, 137, 41, 1, 255, 128, 37, 1, 255, 112, 27, 3, 255, 91, 22, 3, 255, 91, 21, 6, 255, 83, 19, 1, 255, 84, 22, 2, 255, 100, 24, 6, 255, 90, 23, 1, 255, 90, 17, 3, 255, 87, 21, 5, 255, 83, 24, 3, 255, 84, 25, 3, 255, 82, 22, 2, 255, 94, 20, 2, 255, 86, 18, 1, 255, 83, 19, 4, 255, 62, 16, 0, 255, 61, 16, 2, 255, 69, 15, 2, 255, 73, 17, 2, 255, 78, 19, 2, 255, 82, 21, 4, 255, 82, 20, 3, 255, 81, 22, 0, 255, 103, 32, 4, 255, 102, 27, 3, 255, 73, 17, 0, 255, 74, 19, 5, 255, 61, 17, 0, 255, 70, 20, 5, 255, 74, 19, 5, 255, 64, 19, 1, 255, 67, 20, 2, 255, 72, 20, 3, 255, 73, 20, 6, 255, 70, 16, 2, 255, 76, 18, 3, 255, 81, 21, 0, 255, 98, 33, 3, 255, 103, 32, 0, 255, 111, 35, 3, 255, 110, 33, 2, 255, 105, 29, 0, 255, 17, 10, 2, 255, 12, 8, 0, 255, 12, 7, 2, 255, 15, 9, 3, 255, 16, 8, 1, 255, 23, 13, 3, 255, 19, 10, 2, 255, 17, 8, 1, 255, 21, 12, 2, 255, 26, 13, 4, 255, 25, 14, 5, 255, 19, 12, 2, 255, 21, 12, 4, 255, 23, 10, 3, 255, 23, 14, 5, 255, 23, 14, 4, 255, 25, 11, 2, 255, 27, 11, 1, 255, 30, 13, 2, 255, 30, 16, 2, 255, 28, 16, 4, 255, 22, 13, 2, 255, 20, 11, 1, 255, 26, 14, 5, 255, 26, 12, 2, 255, 30, 15, 3, 255, 31, 19, 3, 255, 32, 19, 4, 255, 27, 15, 0, 255, 31, 18, 2, 255, 33, 19, 4, 255, 30, 17, 2, 255, 22, 14, 4, 255, 30, 17, 3, 255, 39, 19, 2, 255, 48, 26, 7, 255, 43, 27, 4, 255, 46, 26, 1, 255, 56, 27, 5, 255, 50, 26, 5, 255, 56, 26, 3, 255, 54, 30, 5, 255, 42, 38, 3, 255, 55, 47, 29, 255, 69, 53, 29, 255, 70, 52, 15, 255, 61, 39, 2, 255, 52, 35, 10, 255, 60, 50, 11, 255, 59, 38, 5, 255, 70, 37, 7, 255, 74, 48, 3, 255, 71, 46, 6, 255, 65, 49, 7, 255, 72, 57, 15, 255, 86, 58, 21, 255, 80, 58, 13, 255, 81, 62, 37, 255, 87, 59, 21, 255, 86, 52, 4, 255, 80, 47, 5, 255, 80, 45, 5, 255, 83, 40, 4, 255, 87, 39, 1, 255, 82, 39, 2, 255, 77, 38, 1, 255, 84, 43, 4, 255, 91, 44, 4, 255, 98, 45, 7, 255, 97, 42, 6, 255, 93, 44, 4, 255, 95, 47, 1, 255, 87, 47, 0, 255, 75, 43, 3, 255, 78, 42, 2, 255, 86, 40, 1, 255, 84, 40, 4, 255, 83, 41, 6, 255, 85, 44, 1, 255, 92, 51, 1, 255, 94, 51, 3, 255, 90, 43, 1, 255, 95, 46, 2, 255, 94, 52, 7, 255, 85, 44, 4, 255, 83, 48, 3, 255, 88, 45, 1, 255, 97, 48, 3, 255, 101, 54, 5, 255, 99, 50, 4, 255, 99, 53, 2, 255, 100, 53, 1, 255, 106, 50, 1, 255, 111, 46, 1, 255, 110, 52, 2, 255, 106, 58, 2, 255, 97, 56, 0, 255, 100, 61, 4, 255, 99, 56, 3, 255, 100, 54, 3, 255, 93, 57, 4, 255, 94, 56, 3, 255, 90, 54, 1, 255, 96, 53, 3, 255, 102, 54, 4, 255, 95, 57, 0, 255, 99, 65, 3, 255, 98, 64, 1, 255, 97, 65, 0, 255, 101, 63, 6, 255, 106, 52, 4, 255, 120, 62, 4, 255, 114, 68, 1, 255, 102, 65, 2, 255, 102, 67, 3, 255, 109, 58, 1, 255, 111, 50, 0, 255, 123, 56, 4, 255, 124, 66, 4, 255, 121, 71, 0, 255, 123, 72, 5, 255, 120, 70, 2, 255, 121, 73, 3, 255, 122, 68, 1, 255, 134, 74, 6, 255, 131, 80, 3, 255, 130, 91, 4, 255, 135, 88, 7, 255, 144, 80, 2, 255, 145, 87, 4, 255, 134, 78, 1, 255, 117, 60, 8, 255, 139, 84, 5, 255, 145, 81, 6, 255, 134, 74, 8, 255, 111, 58, 1, 255, 125, 69, 4, 255, 130, 63, 6, 255, 129, 63, 5, 255, 130, 70, 7, 255, 134, 75, 7, 255, 131, 71, 13, 255, 123, 62, 5, 255, 112, 59, 10, 255, 113, 63, 12, 255, 110, 66, 8, 255, 112, 63, 6, 255, 107, 57, 6, 255, 111, 61, 8, 255, 103, 59, 4, 255, 99, 62, 8, 255, 96, 61, 15, 255, 97, 59, 20, 255, 102, 61, 13, 255, 103, 60, 11, 255, 97, 59, 16, 255, 92, 62, 9, 255, 99, 64, 11, 255, 104, 62, 28, 255, 104, 67, 24, 255, 102, 64, 17, 255, 98, 63, 16, 255, 98, 66, 18, 255, 102, 66, 18, 255, 102, 66, 16, 255, 102, 67, 27, 255, 100, 66, 25, 255, 103, 67, 19, 255, 108, 72, 22, 255, 105, 70, 18, 255, 102, 69, 22, 255, 106, 71, 28, 255, 105, 68, 31, 255, 103, 69, 36, 255, 104, 72, 27, 255, 107, 73, 37, 255, 107, 75, 28, 255, 107, 79, 23, 255, 109, 79, 38, 255, 111, 78, 29, 255, 111, 80, 28, 255, 111, 81, 36, 255, 114, 84, 27, 255, 111, 84, 30, 255, 107, 85, 35, 255, 111, 88, 26, 255, 110, 83, 28, 255, 112, 89, 31, 255, 111, 90, 32, 255, 111, 93, 33, 255, 111, 92, 31, 255, 112, 93, 33, 255, 115, 92, 44, 255, 114, 93, 38, 255, 111, 91, 38, 255, 110, 92, 44, 255, 113, 94, 27, 255, 117, 92, 33, 255, 116, 94, 30, 255, 113, 95, 27, 255, 115, 95, 36, 255, 113, 91, 39, 255, 114, 94, 33, 255, 113, 95, 33, 255, 112, 97, 23, 255, 116, 96, 34, 255, 115, 90, 40, 255, 117, 91, 34, 255, 116, 91, 32, 255, 118, 95, 24, 255, 121, 96, 24, 255, 123, 90, 26, 255, 122, 90, 29, 255, 119, 88, 26, 255, 116, 84, 28, 255, 116, 86, 25, 255, 113, 88, 19, 255, 111, 86, 16, 255, 115, 85, 14, 255, 114, 83, 23, 255, 111, 85, 15, 255, 108, 83, 23, 255, 109, 80, 18, 255, 115, 82, 14, 255, 114, 75, 11, 255, 105, 81, 7, 255, 106, 78, 18, 255, 107, 75, 12, 255, 114, 75, 7, 255, 108, 72, 17, 255, 106, 74, 12, 255, 110, 70, 13, 255, 112, 71, 13, 255, 110, 68, 8, 255, 110, 67, 12, 255, 109, 66, 12, 255, 113, 71, 7, 255, 119, 71, 7, 255, 114, 63, 5, 255, 115, 62, 6, 255, 110, 64, 5, 255, 107, 65, 8, 255, 104, 61, 7, 255, 108, 62, 5, 255, 111, 60, 2, 255, 112, 62, 4, 255, 107, 60, 8, 255, 107, 56, 9, 255, 109, 56, 8, 255, 110, 58, 7, 255, 107, 54, 4, 255, 113, 60, 8, 255, 109, 59, 6, 255, 103, 55, 4, 255, 102, 52, 5, 255, 103, 50, 5, 255, 99, 47, 1, 255, 99, 49, 2, 255, 102, 49, 5, 255, 104, 51, 7, 255, 95, 47, 1, 255, 98, 49, 1, 255, 102, 46, 4, 255, 95, 49, 5, 255, 91, 48, 3, 255, 98, 45, 6, 255, 93, 44, 5, 255, 97, 44, 4, 255, 101, 44, 4, 255, 95, 42, 1, 255, 91, 42, 4, 255, 96, 45, 5, 255, 106, 46, 4, 255, 101, 40, 1, 255, 85, 35, 4, 255, 82, 38, 3, 255, 81, 35, 4, 255, 85, 35, 3, 255, 82, 35, 5, 255, 79, 35, 4, 255, 89, 39, 6, 255, 79, 33, 4, 255, 69, 32, 2, 255, 77, 35, 1, 255, 80, 34, 0, 255, 105, 45, 3, 255, 118, 48, 5, 255, 121, 41, 3, 255, 122, 45, 4, 255, 127, 54, 1, 255, 123, 51, 1, 255, 119, 42, 2, 255, 120, 43, 5, 255, 115, 42, 7, 255, 108, 36, 0, 255, 125, 43, 5, 255, 131, 46, 5, 255, 127, 41, 1, 255, 131, 45, 4, 255, 134, 53, 3, 255, 141, 53, 1, 255, 140, 47, 3, 255, 108, 32, 1, 255, 98, 32, 6, 255, 99, 28, 1, 255, 106, 32, 5, 255, 100, 27, 5, 255, 97, 33, 2, 255, 120, 41, 5, 255, 135, 44, 5, 255, 138, 46, 4, 255, 133, 42, 0, 255, 132, 44, 5, 255, 120, 34, 3, 255, 113, 32, 6, 255, 97, 31, 2, 255, 111, 40, 3, 255, 131, 42, 8, 255, 130, 42, 4, 255, 110, 31, 2, 255, 112, 39, 4, 255, 127, 40, 4, 255, 133, 42, 0, 255, 139, 46, 2, 255, 140, 43, 1, 255, 139, 41, 0, 255, 139, 41, 6, 255, 123, 35, 3, 255, 114, 30, 2, 255, 135, 44, 1, 255, 145, 49, 4, 255, 143, 47, 3, 255, 145, 47, 2, 255, 142, 45, 0, 255, 143, 43, 0, 255, 147, 46, 2, 255, 143, 45, 1, 255, 142, 45, 2, 255, 144, 45, 3, 255, 138, 44, 3, 255, 130, 38, 2, 255, 130, 39, 6, 255, 127, 39, 3, 255, 125, 40, 1, 255, 119, 39, 2, 255, 121, 38, 3, 255, 129, 42, 4, 255, 131, 38, 4, 255, 127, 34, 0, 255, 128, 38, 2, 255, 123, 34, 1, 255, 119, 30, 2, 255, 121, 35, 2, 255, 127, 41, 3, 255, 131, 39, 4, 255, 132, 38, 2, 255, 131, 39, 0, 255, 132, 39, 4, 255, 119, 29, 4, 255, 91, 21, 2, 255, 87, 20, 4, 255, 84, 20, 0, 255, 83, 21, 0, 255, 99, 25, 4, 255, 94, 27, 2, 255, 96, 24, 2, 255, 88, 19, 0, 255, 88, 22, 3, 255, 96, 21, 3, 255, 91, 22, 3, 255, 79, 21, 3, 255, 72, 20, 3, 255, 80, 18, 3, 255, 69, 17, 2, 255, 66, 17, 5, 255, 68, 15, 3, 255, 65, 16, 1, 255, 73, 20, 3, 255, 80, 20, 1, 255, 77, 20, 1, 255, 72, 19, 1, 255, 86, 24, 5, 255, 85, 20, 2, 255, 65, 18, 2, 255, 70, 16, 2, 255, 65, 20, 5, 255, 73, 19, 7, 255, 72, 14, 2, 255, 66, 19, 1, 255, 67, 19, 2, 255, 71, 17, 1, 255, 72, 18, 2, 255, 72, 19, 5, 255, 72, 19, 4, 255, 72, 18, 0, 255, 90, 30, 3, 255, 98, 32, 0, 255, 102, 30, 0, 255, 105, 34, 5, 255, 101, 28, 1, 255, 16, 9, 2, 255, 19, 12, 4, 255, 14, 7, 0, 255, 18, 11, 3, 255, 17, 9, 2, 255, 19, 9, 2, 255, 18, 12, 3, 255, 18, 10, 1, 255, 21, 11, 1, 255, 23, 10, 1, 255, 20, 9, 0, 255, 17, 8, 0, 255, 19, 12, 1, 255, 23, 14, 5, 255, 24, 14, 5, 255, 26, 13, 4, 255, 31, 11, 4, 255, 29, 14, 3, 255, 24, 16, 3, 255, 27, 16, 2, 255, 28, 16, 5, 255, 27, 17, 6, 255, 23, 13, 3, 255, 31, 17, 6, 255, 33, 14, 4, 255, 34, 16, 3, 255, 25, 12, 1, 255, 28, 14, 4, 255, 27, 13, 3, 255, 28, 14, 3, 255, 29, 14, 6, 255, 27, 13, 5, 255, 23, 13, 1, 255, 32, 14, 1, 255, 50, 22, 6, 255, 45, 27, 3, 255, 43, 23, 1, 255, 56, 28, 4, 255, 49, 29, 1, 255, 48, 27, 5, 255, 42, 26, 2, 255, 45, 23, 4, 255, 53, 28, 6, 255, 51, 38, 20, 255, 59, 47, 33, 255, 64, 48, 35, 255, 65, 42, 15, 255, 57, 37, 12, 255, 64, 47, 19, 255, 64, 41, 5, 255, 65, 31, 4, 255, 65, 34, 10, 255, 72, 44, 12, 255, 70, 49, 6, 255, 75, 54, 20, 255, 88, 58, 31, 255, 80, 54, 15, 255, 79, 59, 14, 255, 89, 60, 16, 255, 89, 50, 8, 255, 90, 49, 3, 255, 92, 46, 7, 255, 89, 41, 4, 255, 83, 42, 2, 255, 80, 45, 5, 255, 73, 43, 4, 255, 74, 41, 3, 255, 81, 39, 0, 255, 90, 41, 1, 255, 90, 43, 2, 255, 91, 43, 5, 255, 90, 43, 6, 255, 80, 41, 2, 255, 71, 37, 0, 255, 80, 43, 1, 255, 90, 46, 4, 255, 89, 45, 7, 255, 79, 37, 3, 255, 86, 42, 3, 255, 96, 47, 5, 255, 88, 43, 4, 255, 82, 41, 5, 255, 100, 46, 5, 255, 92, 50, 2, 255, 83, 49, 4, 255, 82, 51, 2, 255, 79, 48, 0, 255, 98, 51, 4, 255, 107, 54, 4, 255, 101, 54, 3, 255, 107, 55, 1, 255, 115, 55, 3, 255, 119, 50, 1, 255, 114, 51, 2, 255, 114, 58, 6, 255, 103, 57, 1, 255, 98, 56, 4, 255, 98, 55, 4, 255, 98, 56, 5, 255, 94, 55, 2, 255, 88, 52, 0, 255, 90, 53, 4, 255, 108, 58, 7, 255, 130, 53, 5, 255, 124, 51, 1, 255, 114, 56, 3, 255, 108, 59, 7, 255, 104, 59, 2, 255, 121, 55, 0, 255, 128, 56, 5, 255, 128, 51, 6, 255, 119, 55, 0, 255, 109, 60, 2, 255, 103, 55, 3, 255, 115, 56, 4, 255, 116, 57, 7, 255, 114, 47, 3, 255, 118, 46, 3, 255, 122, 62, 4, 255, 120, 73, 1, 255, 116, 66, 0, 255, 117, 66, 0, 255, 120, 70, 3, 255, 123, 68, 3, 255, 132, 80, 1, 255, 133, 88, 3, 255, 145, 97, 0, 255, 147, 89, 1, 255, 118, 62, 3, 255, 128, 71, 4, 255, 140, 84, 5, 255, 140, 84, 7, 255, 138, 81, 2, 255, 143, 85, 4, 255, 144, 82, 7, 255, 117, 59, 7, 255, 123, 71, 9, 255, 114, 52, 4, 255, 105, 48, 5, 255, 117, 63, 3, 255, 134, 78, 1, 255, 125, 73, 7, 255, 115, 59, 5, 255, 108, 59, 4, 255, 113, 63, 9, 255, 101, 60, 7, 255, 103, 64, 14, 255, 102, 61, 7, 255, 101, 57, 13, 255, 101, 58, 15, 255, 95, 58, 7, 255, 95, 61, 9, 255, 95, 59, 7, 255, 97, 59, 8, 255, 100, 60, 15, 255, 101, 61, 16, 255, 93, 61, 20, 255, 95, 62, 25, 255, 104, 66, 14, 255, 106, 68, 17, 255, 99, 63, 18, 255, 104, 63, 14, 255, 99, 70, 16, 255, 90, 64, 15, 255, 103, 63, 23, 255, 101, 68, 25, 255, 97, 67, 26, 255, 103, 69, 22, 255, 105, 69, 22, 255, 100, 68, 19, 255, 101, 72, 22, 255, 101, 71, 27, 255, 101, 72, 27, 255, 98, 72, 40, 255, 99, 78, 22, 255, 102, 76, 32, 255, 104, 70, 43, 255, 106, 72, 35, 255, 108, 78, 42, 255, 110, 79, 35, 255, 111, 82, 32, 255, 110, 85, 31, 255, 112, 86, 30, 255, 111, 85, 36, 255, 107, 85, 36, 255, 113, 88, 36, 255, 115, 87, 31, 255, 117, 91, 36, 255, 114, 89, 37, 255, 114, 91, 41, 255, 114, 90, 37, 255, 116, 89, 35, 255, 115, 88, 50, 255, 114, 95, 35, 255, 111, 94, 31, 255, 113, 92, 41, 255, 117, 93, 39, 255, 118, 95, 34, 255, 115, 94, 35, 255, 115, 94, 39, 255, 114, 95, 30, 255, 113, 93, 33, 255, 115, 96, 25, 255, 114, 97, 25, 255, 112, 91, 41, 255, 114, 94, 38, 255, 116, 92, 37, 255, 116, 93, 27, 255, 119, 98, 9, 255, 121, 94, 27, 255, 120, 86, 43, 255, 120, 91, 26, 255, 119, 92, 18, 255, 115, 85, 28, 255, 114, 80, 32, 255, 116, 83, 30, 255, 113, 86, 18, 255, 111, 83, 26, 255, 116, 85, 10, 255, 118, 85, 23, 255, 111, 80, 32, 255, 108, 80, 27, 255, 112, 81, 22, 255, 118, 80, 20, 255, 117, 77, 19, 255, 108, 80, 9, 255, 106, 79, 20, 255, 110, 74, 20, 255, 112, 71, 9, 255, 107, 71, 10, 255, 106, 74, 14, 255, 108, 68, 19, 255, 110, 66, 22, 255, 111, 70, 18, 255, 108, 68, 14, 255, 106, 66, 17, 255, 109, 67, 9, 255, 116, 64, 8, 255, 116, 62, 9, 255, 117, 64, 10, 255, 109, 62, 2, 255, 110, 66, 2, 255, 112, 66, 2, 255, 105, 58, 8, 255, 108, 57, 9, 255, 109, 59, 4, 255, 104, 58, 5, 255, 110, 57, 9, 255, 115, 59, 6, 255, 116, 58, 5, 255, 117, 55, 3, 255, 111, 56, 2, 255, 102, 54, 2, 255, 99, 55, 3, 255, 107, 55, 8, 255, 111, 49, 6, 255, 102, 50, 3, 255, 102, 52, 4, 255, 104, 51, 3, 255, 103, 51, 4, 255, 96, 49, 3, 255, 101, 51, 6, 255, 95, 42, 1, 255, 95, 46, 4, 255, 95, 47, 2, 255, 94, 48, 3, 255, 95, 43, 4, 255, 99, 40, 3, 255, 92, 45, 3, 255, 91, 43, 1, 255, 87, 43, 3, 255, 90, 43, 4, 255, 91, 42, 4, 255, 88, 40, 4, 255, 83, 37, 2, 255, 81, 36, 3, 255, 87, 34, 9, 255, 83, 34, 3, 255, 81, 35, 4, 255, 81, 38, 5, 255, 80, 39, 2, 255, 82, 35, 7, 255, 69, 35, 4, 255, 77, 34, 2, 255, 86, 36, 5, 255, 106, 42, 1, 255, 121, 49, 5, 255, 121, 45, 3, 255, 129, 50, 6, 255, 123, 51, 0, 255, 121, 49, 1, 255, 127, 46, 4, 255, 126, 43, 2, 255, 121, 44, 5, 255, 110, 36, 2, 255, 120, 38, 2, 255, 125, 45, 1, 255, 122, 44, 4, 255, 118, 39, 3, 255, 129, 46, 5, 255, 142, 46, 3, 255, 130, 39, 4, 255, 109, 33, 4, 255, 98, 28, 3, 255, 102, 27, 1, 255, 99, 24, 4, 255, 92, 28, 4, 255, 90, 33, 2, 255, 105, 33, 2, 255, 116, 34, 7, 255, 114, 32, 3, 255, 126, 37, 2, 255, 123, 37, 2, 255, 115, 32, 0, 255, 113, 29, 0, 255, 108, 32, 3, 255, 122, 37, 1, 255, 139, 42, 6, 255, 127, 37, 2, 255, 103, 29, 2, 255, 101, 26, 3, 255, 121, 32, 6, 255, 127, 37, 4, 255, 128, 42, 3, 255, 129, 39, 4, 255, 120, 31, 2, 255, 125, 33, 1, 255, 121, 36, 7, 255, 118, 39, 3, 255, 138, 45, 4, 255, 143, 45, 1, 255, 141, 47, 6, 255, 144, 49, 0, 255, 140, 44, 0, 255, 145, 47, 3, 255, 145, 46, 2, 255, 142, 45, 2, 255, 140, 44, 1, 255, 141, 41, 2, 255, 136, 43, 2, 255, 132, 41, 1, 255, 134, 41, 2, 255, 125, 33, 0, 255, 125, 35, 1, 255, 125, 38, 1, 255, 125, 36, 0, 255, 130, 37, 3, 255, 130, 36, 2, 255, 126, 35, 0, 255, 128, 39, 4, 255, 126, 37, 4, 255, 121, 30, 1, 255, 122, 34, 1, 255, 128, 43, 4, 255, 133, 41, 5, 255, 134, 40, 5, 255, 131, 42, 3, 255, 130, 38, 6, 255, 118, 30, 2, 255, 94, 25, 2, 255, 84, 20, 5, 255, 93, 26, 4, 255, 95, 25, 3, 255, 97, 20, 1, 255, 111, 35, 4, 255, 117, 37, 3, 255, 105, 29, 4, 255, 88, 21, 3, 255, 96, 20, 6, 255, 96, 22, 1, 255, 85, 25, 1, 255, 80, 21, 6, 255, 88, 24, 4, 255, 75, 22, 2, 255, 59, 15, 1, 255, 66, 16, 2, 255, 66, 19, 4, 255, 64, 18, 2, 255, 75, 20, 1, 255, 75, 23, 2, 255, 67, 18, 2, 255, 70, 17, 3, 255, 70, 15, 0, 255, 64, 19, 5, 255, 69, 19, 5, 255, 58, 13, 0, 255, 67, 15, 4, 255, 70, 16, 3, 255, 63, 16, 0, 255, 67, 17, 3, 255, 74, 16, 3, 255, 74, 16, 2, 255, 71, 17, 2, 255, 69, 18, 4, 255, 71, 18, 4, 255, 77, 21, 0, 255, 86, 27, 2, 255, 90, 25, 4, 255, 89, 25, 5, 255, 81, 19, 1, 255, 16, 8, 2, 255, 18, 10, 2, 255, 19, 9, 1, 255, 21, 10, 4, 255, 19, 10, 3, 255, 16, 8, 3, 255, 19, 11, 3, 255, 19, 11, 0, 255, 21, 13, 2, 255, 16, 9, 1, 255, 18, 10, 5, 255, 24, 13, 4, 255, 27, 13, 3, 255, 25, 14, 6, 255, 20, 12, 2, 255, 20, 11, 1, 255, 26, 13, 3, 255, 27, 11, 3, 255, 23, 14, 2, 255, 20, 13, 1, 255, 20, 12, 2, 255, 24, 14, 4, 255, 27, 13, 4, 255, 27, 10, 1, 255, 30, 12, 2, 255, 31, 16, 5, 255, 26, 14, 2, 255, 31, 17, 5, 255, 32, 18, 5, 255, 30, 14, 2, 255, 33, 16, 2, 255, 33, 17, 3, 255, 31, 16, 3, 255, 45, 20, 6, 255, 42, 23, 2, 255, 40, 20, 1, 255, 55, 26, 8, 255, 49, 26, 4, 255, 41, 26, 1, 255, 43, 23, 4, 255, 45, 25, 7, 255, 43, 24, 4, 255, 47, 22, 5, 255, 57, 33, 9, 255, 54, 41, 26, 255, 59, 51, 22, 255, 75, 51, 12, 255, 69, 44, 11, 255, 67, 49, 11, 255, 67, 43, 7, 255, 63, 32, 2, 255, 53, 33, 4, 255, 66, 38, 11, 255, 76, 44, 12, 255, 74, 53, 5, 255, 77, 59, 13, 255, 79, 56, 9, 255, 85, 51, 7, 255, 91, 48, 11, 255, 88, 44, 7, 255, 89, 46, 3, 255, 93, 43, 3, 255, 92, 39, 2, 255, 84, 41, 2, 255, 72, 38, 1, 255, 72, 42, 4, 255, 71, 38, 0, 255, 87, 42, 5, 255, 96, 44, 4, 255, 91, 42, 1, 255, 86, 39, 1, 255, 78, 39, 3, 255, 75, 43, 6, 255, 74, 41, 2, 255, 73, 41, 3, 255, 69, 38, 2, 255, 75, 39, 1, 255, 75, 43, 0, 255, 75, 41, 7, 255, 77, 40, 2, 255, 83, 42, 2, 255, 86, 44, 5, 255, 85, 50, 0, 255, 84, 52, 0, 255, 83, 49, 5, 255, 79, 50, 3, 255, 81, 47, 3, 255, 94, 46, 3, 255, 99, 55, 5, 255, 91, 56, 5, 255, 90, 55, 2, 255, 94, 54, 2, 255, 101, 57, 6, 255, 96, 52, 1, 255, 94, 54, 1, 255, 93, 57, 0, 255, 97, 56, 5, 255, 93, 50, 1, 255, 91, 53, 4, 255, 88, 51, 2, 255, 94, 52, 4, 255, 86, 51, 2, 255, 104, 53, 2, 255, 116, 55, 4, 255, 107, 54, 3, 255, 107, 57, 5, 255, 98, 56, 1, 255, 96, 57, 1, 255, 110, 58, 6, 255, 111, 62, 5, 255, 102, 62, 1, 255, 106, 62, 3, 255, 117, 59, 4, 255, 119, 57, 2, 255, 112, 64, 0, 255, 115, 69, 3, 255, 118, 65, 4, 255, 114, 56, 0, 255, 118, 59, 6, 255, 119, 60, 9, 255, 113, 51, 3, 255, 113, 48, 2, 255, 127, 67, 4, 255, 129, 80, 9, 255, 128, 86, 3, 255, 143, 91, 4, 255, 141, 77, 2, 255, 125, 62, 2, 255, 126, 63, 6, 255, 137, 78, 4, 255, 142, 82, 3, 255, 136, 75, 5, 255, 148, 89, 8, 255, 154, 94, 4, 255, 119, 53, 9, 255, 116, 58, 11, 255, 143, 92, 5, 255, 141, 87, 3, 255, 127, 73, 9, 255, 120, 70, 15, 255, 115, 67, 4, 255, 113, 63, 3, 255, 108, 66, 6, 255, 100, 61, 7, 255, 93, 56, 5, 255, 97, 58, 12, 255, 95, 57, 15, 255, 91, 59, 9, 255, 94, 59, 9, 255, 97, 57, 10, 255, 93, 56, 12, 255, 88, 57, 9, 255, 93, 58, 7, 255, 100, 59, 15, 255, 103, 63, 18, 255, 98, 64, 11, 255, 98, 63, 15, 255, 93, 62, 13, 255, 93, 63, 18, 255, 99, 60, 23, 255, 101, 66, 16, 255, 95, 67, 14, 255, 93, 65, 14, 255, 99, 67, 18, 255, 97, 67, 25, 255, 98, 66, 23, 255, 101, 67, 32, 255, 105, 72, 25, 255, 106, 74, 25, 255, 97, 66, 29, 255, 96, 71, 28, 255, 98, 73, 28, 255, 102, 76, 29, 255, 108, 79, 17, 255, 103, 77, 21, 255, 102, 80, 20, 255, 100, 75, 31, 255, 98, 76, 24, 255, 97, 81, 36, 255, 103, 81, 38, 255, 104, 84, 29, 255, 104, 84, 30, 255, 109, 83, 43, 255, 113, 83, 43, 255, 110, 83, 39, 255, 114, 88, 42, 255, 113, 89, 34, 255, 114, 92, 36, 255, 112, 91, 36, 255, 113, 92, 39, 255, 114, 92, 36, 255, 115, 93, 33, 255, 117, 92, 35, 255, 119, 96, 37, 255, 117, 94, 39, 255, 114, 91, 44, 255, 113, 90, 45, 255, 114, 94, 43, 255, 116, 95, 43, 255, 116, 97, 41, 255, 113, 94, 32, 255, 116, 94, 40, 255, 113, 92, 33, 255, 115, 93, 40, 255, 115, 93, 34, 255, 121, 93, 37, 255, 122, 92, 43, 255, 118, 94, 23, 255, 117, 94, 29, 255, 116, 92, 30, 255, 119, 97, 16, 255, 115, 92, 30, 255, 113, 92, 19, 255, 114, 87, 30, 255, 117, 84, 37, 255, 117, 86, 19, 255, 114, 85, 23, 255, 112, 86, 24, 255, 111, 83, 21, 255, 111, 81, 15, 255, 117, 83, 14, 255, 119, 82, 13, 255, 115, 80, 20, 255, 105, 75, 27, 255, 105, 77, 19, 255, 118, 79, 13, 255, 116, 76, 17, 255, 112, 71, 16, 255, 105, 70, 21, 255, 105, 71, 12, 255, 108, 70, 17, 255, 109, 71, 9, 255, 109, 68, 14, 255, 107, 69, 19, 255, 101, 67, 9, 255, 107, 68, 15, 255, 108, 66, 14, 255, 111, 63, 8, 255, 115, 66, 6, 255, 110, 62, 3, 255, 107, 62, 7, 255, 110, 61, 8, 255, 116, 63, 1, 255, 106, 59, 13, 255, 102, 60, 16, 255, 105, 61, 3, 255, 106, 57, 5, 255, 107, 57, 9, 255, 112, 57, 2, 255, 114, 53, 2, 255, 112, 58, 5, 255, 108, 56, 4, 255, 105, 51, 4, 255, 108, 49, 3, 255, 111, 53, 6, 255, 109, 55, 7, 255, 99, 49, 3, 255, 102, 49, 3, 255, 100, 49, 1, 255, 97, 49, 0, 255, 95, 45, 1, 255, 97, 43, 5, 255, 98, 41, 5, 255, 100, 47, 6, 255, 97, 46, 0, 255, 96, 47, 1, 255, 97, 45, 4, 255, 97, 43, 6, 255, 89, 44, 4, 255, 96, 40, 2, 255, 94, 41, 4, 255, 86, 37, 3, 255, 85, 36, 4, 255, 87, 39, 6, 255, 85, 41, 3, 255, 82, 37, 3, 255, 85, 37, 3, 255, 86, 36, 5, 255, 81, 35, 1, 255, 82, 39, 3, 255, 82, 35, 4, 255, 84, 36, 2, 255, 80, 38, 2, 255, 80, 33, 1, 255, 87, 36, 5, 255, 102, 39, 4, 255, 117, 49, 2, 255, 124, 50, 4, 255, 124, 48, 1, 255, 126, 51, 2, 255, 127, 48, 2, 255, 132, 47, 4, 255, 137, 47, 6, 255, 133, 43, 3, 255, 129, 43, 1, 255, 133, 45, 3, 255, 125, 43, 1, 255, 123, 42, 3, 255, 123, 42, 4, 255, 119, 42, 3, 255, 122, 40, 2, 255, 116, 40, 2, 255, 102, 34, 5, 255, 91, 26, 2, 255, 92, 28, 2, 255, 86, 21, 6, 255, 83, 22, 2, 255, 94, 29, 5, 255, 99, 28, 1, 255, 94, 30, 1, 255, 92, 30, 0, 255, 116, 35, 4, 255, 117, 33, 4, 255, 99, 25, 3, 255, 98, 27, 5, 255, 98, 27, 7, 255, 116, 39, 9, 255, 125, 40, 1, 255, 118, 34, 1, 255, 110, 33, 5, 255, 103, 27, 2, 255, 108, 34, 4, 255, 115, 33, 2, 255, 121, 33, 0, 255, 119, 36, 4, 255, 108, 31, 1, 255, 124, 39, 4, 255, 125, 43, 3, 255, 126, 43, 0, 255, 136, 38, 0, 255, 138, 42, 2, 255, 138, 46, 3, 255, 147, 47, 2, 255, 142, 43, 2, 255, 145, 43, 3, 255, 142, 42, 2, 255, 139, 43, 3, 255, 136, 41, 2, 255, 133, 37, 0, 255, 134, 40, 3, 255, 133, 40, 1, 255, 133, 39, 2, 255, 127, 35, 3, 255, 124, 35, 5, 255, 121, 36, 1, 255, 127, 38, 2, 255, 130, 33, 0, 255, 127, 33, 2, 255, 125, 36, 2, 255, 124, 38, 1, 255, 125, 36, 1, 255, 127, 32, 3, 255, 126, 37, 2, 255, 128, 40, 0, 255, 134, 37, 0, 255, 136, 37, 2, 255, 129, 41, 1, 255, 123, 32, 3, 255, 124, 30, 2, 255, 104, 25, 6, 255, 84, 15, 2, 255, 97, 23, 1, 255, 103, 27, 4, 255, 99, 26, 2, 255, 111, 35, 1, 255, 125, 37, 1, 255, 122, 37, 6, 255, 93, 25, 2, 255, 103, 30, 4, 255, 106, 30, 1, 255, 97, 22, 2, 255, 87, 24, 2, 255, 102, 26, 1, 255, 102, 28, 6, 255, 65, 21, 3, 255, 55, 17, 0, 255, 64, 18, 2, 255, 62, 17, 4, 255, 66, 19, 2, 255, 70, 23, 0, 255, 65, 18, 3, 255, 64, 16, 2, 255, 67, 18, 3, 255, 64, 15, 3, 255, 59, 16, 2, 255, 60, 13, 3, 255, 62, 12, 2, 255, 66, 17, 4, 255, 67, 18, 3, 255, 63, 16, 1, 255, 65, 15, 2, 255, 68, 16, 1, 255, 66, 17, 2, 255, 58, 12, 1, 255, 57, 14, 3, 255, 64, 20, 4, 255, 67, 20, 1, 255, 68, 19, 3, 255, 63, 17, 2, 255, 59, 16, 1, 255, 16, 8, 2, 255, 17, 8, 1, 255, 18, 10, 2, 255, 17, 9, 1, 255, 15, 8, 1, 255, 18, 8, 4, 255, 15, 8, 2, 255, 17, 10, 1, 255, 20, 10, 3, 255, 18, 8, 1, 255, 23, 12, 5, 255, 23, 10, 2, 255, 28, 12, 4, 255, 33, 15, 4, 255, 29, 17, 2, 255, 26, 14, 2, 255, 24, 12, 1, 255, 29, 17, 3, 255, 21, 12, 4, 255, 20, 11, 3, 255, 26, 16, 6, 255, 21, 12, 2, 255, 24, 13, 2, 255, 28, 14, 3, 255, 32, 16, 6, 255, 34, 16, 3, 255, 30, 15, 0, 255, 24, 13, 2, 255, 19, 13, 2, 255, 26, 16, 3, 255, 35, 19, 2, 255, 40, 19, 1, 255, 27, 12, 2, 255, 41, 20, 4, 255, 37, 20, 0, 255, 40, 23, 4, 255, 47, 18, 7, 255, 34, 17, 1, 255, 36, 21, 4, 255, 42, 20, 7, 255, 41, 23, 8, 255, 39, 21, 2, 255, 52, 26, 6, 255, 52, 26, 2, 255, 59, 33, 14, 255, 63, 43, 18, 255, 75, 50, 13, 255, 78, 45, 16, 255, 69, 44, 13, 255, 60, 41, 8, 255, 62, 39, 3, 255, 58, 39, 4, 255, 62, 42, 6, 255, 72, 46, 8, 255, 72, 47, 8, 255, 71, 53, 5, 255, 80, 55, 2, 255, 88, 44, 1, 255, 87, 40, 5, 255, 75, 45, 4, 255, 75, 43, 1, 255, 85, 39, 3, 255, 77, 37, 2, 255, 78, 39, 5, 255, 80, 36, 1, 255, 83, 37, 4, 255, 83, 39, 1, 255, 83, 44, 2, 255, 77, 42, 7, 255, 73, 37, 5, 255, 74, 38, 2, 255, 70, 39, 1, 255, 71, 39, 2, 255, 73, 38, 2, 255, 67, 39, 3, 255, 69, 38, 3, 255, 77, 38, 3, 255, 74, 40, 1, 255, 75, 38, 3, 255, 74, 39, 2, 255, 80, 46, 4, 255, 84, 45, 3, 255, 85, 46, 1, 255, 82, 51, 3, 255, 80, 49, 1, 255, 81, 49, 1, 255, 85, 51, 3, 255, 92, 51, 3, 255, 89, 53, 1, 255, 87, 56, 5, 255, 88, 55, 4, 255, 87, 55, 2, 255, 94, 60, 6, 255, 97, 57, 4, 255, 94, 56, 4, 255, 95, 55, 5, 255, 90, 48, 3, 255, 84, 49, 2, 255, 84, 49, 2, 255, 83, 51, 3, 255, 87, 49, 1, 255, 87, 53, 3, 255, 99, 54, 5, 255, 100, 53, 2, 255, 96, 58, 1, 255, 95, 58, 2, 255, 95, 57, 3, 255, 96, 56, 3, 255, 95, 60, 3, 255, 99, 62, 2, 255, 103, 58, 3, 255, 113, 53, 3, 255, 116, 49, 0, 255, 112, 59, 1, 255, 112, 65, 1, 255, 113, 64, 4, 255, 116, 69, 1, 255, 118, 73, 0, 255, 117, 62, 3, 255, 112, 44, 4, 255, 110, 43, 2, 255, 119, 55, 4, 255, 131, 76, 3, 255, 135, 85, 3, 255, 138, 92, 2, 255, 135, 82, 1, 255, 112, 47, 6, 255, 110, 50, 10, 255, 108, 48, 4, 255, 117, 50, 4, 255, 132, 71, 2, 255, 138, 82, 4, 255, 136, 79, 8, 255, 137, 73, 2, 255, 122, 65, 4, 255, 112, 60, 3, 255, 116, 60, 1, 255, 113, 59, 8, 255, 105, 55, 8, 255, 98, 52, 10, 255, 95, 53, 6, 255, 94, 55, 11, 255, 86, 54, 10, 255, 89, 51, 12, 255, 85, 54, 2, 255, 94, 56, 13, 255, 92, 54, 12, 255, 85, 55, 13, 255, 93, 57, 13, 255, 92, 53, 5, 255, 91, 60, 21, 255, 99, 59, 13, 255, 113, 63, 9, 255, 106, 59, 13, 255, 103, 64, 16, 255, 94, 60, 20, 255, 94, 62, 17, 255, 98, 63, 14, 255, 95, 63, 16, 255, 94, 64, 20, 255, 97, 65, 10, 255, 97, 71, 13, 255, 93, 62, 25, 255, 101, 66, 21, 255, 102, 67, 18, 255, 101, 67, 21, 255, 108, 70, 21, 255, 112, 71, 34, 255, 99, 72, 24, 255, 97, 71, 30, 255, 98, 72, 30, 255, 96, 75, 21, 255, 101, 73, 26, 255, 96, 77, 19, 255, 95, 78, 25, 255, 97, 76, 42, 255, 97, 75, 37, 255, 96, 81, 30, 255, 97, 81, 30, 255, 105, 81, 34, 255, 103, 80, 38, 255, 103, 81, 39, 255, 105, 89, 27, 255, 109, 85, 35, 255, 114, 86, 38, 255, 107, 90, 29, 255, 107, 88, 34, 255, 111, 89, 35, 255, 110, 94, 36, 255, 109, 91, 39, 255, 114, 92, 44, 255, 113, 92, 35, 255, 115, 92, 38, 255, 115, 93, 41, 255, 115, 95, 36, 255, 115, 96, 41, 255, 116, 96, 44, 255, 117, 99, 37, 255, 113, 95, 41, 255, 113, 96, 36, 255, 118, 98, 38, 255, 117, 96, 27, 255, 117, 96, 44, 255, 115, 94, 34, 255, 120, 95, 27, 255, 120, 94, 39, 255, 119, 92, 38, 255, 121, 92, 32, 255, 121, 90, 35, 255, 117, 90, 31, 255, 113, 94, 21, 255, 114, 90, 26, 255, 116, 89, 20, 255, 116, 87, 25, 255, 116, 86, 26, 255, 114, 86, 24, 255, 109, 81, 30, 255, 111, 80, 24, 255, 116, 82, 23, 255, 111, 81, 20, 255, 114, 82, 20, 255, 118, 79, 23, 255, 114, 76, 21, 255, 108, 76, 32, 255, 107, 76, 22, 255, 111, 75, 14, 255, 111, 75, 8, 255, 110, 74, 12, 255, 108, 71, 23, 255, 109, 73, 14, 255, 106, 68, 15, 255, 107, 70, 16, 255, 108, 70, 6, 255, 108, 67, 8, 255, 107, 63, 16, 255, 108, 66, 18, 255, 103, 66, 8, 255, 108, 66, 16, 255, 111, 63, 11, 255, 107, 62, 9, 255, 107, 61, 8, 255, 106, 64, 7, 255, 110, 60, 6, 255, 104, 60, 4, 255, 103, 63, 5, 255, 107, 61, 7, 255, 108, 56, 5, 255, 105, 54, 4, 255, 105, 54, 6, 255, 103, 53, 3, 255, 102, 55, 1, 255, 106, 56, 9, 255, 107, 52, 10, 255, 107, 47, 4, 255, 108, 52, 4, 255, 106, 55, 3, 255, 96, 50, 1, 255, 101, 49, 3, 255, 96, 49, 2, 255, 94, 49, 3, 255, 96, 46, 5, 255, 91, 44, 4, 255, 96, 47, 6, 255, 99, 42, 4, 255, 99, 43, 5, 255, 94, 43, 2, 255, 99, 47, 5, 255, 92, 41, 2, 255, 88, 41, 3, 255, 96, 40, 2, 255, 99, 41, 7, 255, 94, 38, 8, 255, 82, 35, 5, 255, 85, 42, 8, 255, 86, 37, 3, 255, 75, 36, 0, 255, 80, 40, 3, 255, 88, 40, 5, 255, 85, 36, 2, 255, 83, 38, 6, 255, 80, 35, 5, 255, 83, 38, 2, 255, 88, 39, 3, 255, 80, 31, 0, 255, 85, 31, 4, 255, 96, 35, 5, 255, 110, 41, 3, 255, 123, 48, 6, 255, 124, 46, 1, 255, 126, 49, 1, 255, 132, 53, 2, 255, 127, 45, 1, 255, 129, 51, 2, 255, 133, 50, 3, 255, 123, 41, 1, 255, 118, 35, 1, 255, 119, 29, 3, 255, 126, 40, 3, 255, 119, 39, 4, 255, 112, 36, 4, 255, 105, 27, 0, 255, 109, 33, 2, 255, 104, 34, 7, 255, 95, 28, 2, 255, 92, 29, 4, 255, 80, 24, 5, 255, 84, 27, 4, 255, 92, 27, 4, 255, 92, 26, 2, 255, 88, 29, 1, 255, 90, 31, 2, 255, 101, 30, 3, 255, 106, 35, 5, 255, 94, 29, 1, 255, 95, 27, 5, 255, 102, 29, 4, 255, 118, 38, 8, 255, 112, 28, 2, 255, 107, 28, 0, 255, 103, 32, 0, 255, 109, 34, 4, 255, 108, 36, 2, 255, 108, 32, 0, 255, 124, 34, 3, 255, 125, 39, 1, 255, 123, 36, 1, 255, 130, 34, 3, 255, 132, 37, 3, 255, 132, 38, 2, 255, 137, 41, 2, 255, 136, 41, 0, 255, 137, 41, 1, 255, 141, 42, 4, 255, 142, 46, 3, 255, 138, 44, 3, 255, 140, 42, 3, 255, 137, 38, 1, 255, 135, 40, 3, 255, 132, 36, 4, 255, 129, 37, 4, 255, 132, 37, 3, 255, 132, 36, 1, 255, 122, 33, 2, 255, 113, 29, 1, 255, 114, 29, 1, 255, 125, 36, 4, 255, 123, 36, 2, 255, 118, 34, 1, 255, 122, 36, 4, 255, 123, 33, 1, 255, 128, 34, 2, 255, 129, 34, 2, 255, 123, 34, 1, 255, 127, 37, 2, 255, 129, 38, 2, 255, 129, 38, 1, 255, 128, 39, 1, 255, 125, 35, 2, 255, 123, 36, 2, 255, 120, 29, 4, 255, 98, 21, 3, 255, 79, 20, 0, 255, 92, 23, 4, 255, 98, 23, 2, 255, 108, 33, 4, 255, 116, 35, 2, 255, 122, 32, 3, 255, 107, 22, 3, 255, 98, 25, 2, 255, 116, 37, 6, 255, 112, 30, 2, 255, 101, 27, 3, 255, 105, 28, 2, 255, 119, 31, 4, 255, 90, 24, 2, 255, 63, 17, 2, 255, 69, 18, 8, 255, 68, 16, 1, 255, 69, 16, 1, 255, 68, 21, 2, 255, 66, 17, 4, 255, 59, 17, 7, 255, 53, 10, 3, 255, 53, 17, 4, 255, 54, 14, 5, 255, 56, 14, 3, 255, 58, 14, 2, 255, 56, 12, 0, 255, 61, 13, 1, 255, 62, 14, 1, 255, 63, 16, 1, 255, 67, 17, 3, 255, 63, 15, 1, 255, 56, 14, 1, 255, 56, 12, 2, 255, 60, 12, 4, 255, 54, 12, 3, 255, 49, 11, 2, 255, 52, 14, 2, 255, 55, 14, 2, 255, 17, 10, 3, 255, 17, 8, 2, 255, 17, 9, 3, 255, 16, 10, 4, 255, 15, 7, 2, 255, 18, 8, 3, 255, 16, 7, 1, 255, 17, 9, 0, 255, 19, 8, 1, 255, 26, 13, 4, 255, 25, 12, 2, 255, 28, 14, 5, 255, 30, 16, 6, 255, 33, 15, 3, 255, 32, 16, 3, 255, 34, 20, 8, 255, 29, 14, 2, 255, 29, 16, 4, 255, 21, 12, 4, 255, 19, 11, 5, 255, 20, 11, 2, 255, 28, 15, 3, 255, 32, 16, 2, 255, 29, 15, 1, 255, 22, 12, 3, 255, 27, 15, 4, 255, 32, 15, 1, 255, 27, 14, 3, 255, 25, 15, 3, 255, 28, 18, 3, 255, 30, 16, 3, 255, 30, 15, 3, 255, 26, 14, 4, 255, 39, 21, 5, 255, 42, 20, 0, 255, 38, 19, 1, 255, 36, 18, 4, 255, 37, 19, 6, 255, 39, 20, 5, 255, 38, 19, 2, 255, 39, 22, 0, 255, 45, 27, 2, 255, 58, 34, 7, 255, 51, 26, 2, 255, 49, 24, 2, 255, 53, 37, 8, 255, 65, 42, 10, 255, 65, 43, 8, 255, 60, 41, 8, 255, 62, 41, 2, 255, 65, 39, 5, 255, 63, 34, 5, 255, 70, 43, 5, 255, 79, 45, 13, 255, 78, 42, 9, 255, 78, 45, 2, 255, 81, 49, 6, 255, 81, 43, 2, 255, 76, 35, 3, 255, 69, 45, 5, 255, 78, 45, 3, 255, 86, 38, 8, 255, 74, 36, 3, 255, 72, 39, 4, 255, 69, 42, 4, 255, 71, 38, 5, 255, 76, 40, 3, 255, 74, 41, 2, 255, 71, 37, 6, 255, 73, 34, 4, 255, 73, 35, 3, 255, 68, 33, 3, 255, 71, 36, 4, 255, 72, 37, 2, 255, 66, 38, 0, 255, 69, 40, 1, 255, 80, 41, 3, 255, 81, 40, 4, 255, 78, 38, 2, 255, 76, 40, 0, 255, 79, 46, 3, 255, 80, 47, 1, 255, 84, 46, 2, 255, 84, 50, 4, 255, 81, 48, 2, 255, 82, 48, 1, 255, 86, 51, 3, 255, 90, 52, 3, 255, 87, 50, 1, 255, 86, 51, 0, 255, 89, 53, 1, 255, 92, 56, 3, 255, 92, 57, 3, 255, 90, 54, 1, 255, 89, 52, 2, 255, 88, 51, 4, 255, 83, 48, 4, 255, 76, 48, 2, 255, 82, 47, 3, 255, 84, 52, 4, 255, 92, 53, 4, 255, 93, 53, 2, 255, 90, 52, 2, 255, 94, 53, 2, 255, 98, 58, 3, 255, 97, 56, 1, 255, 99, 58, 5, 255, 101, 59, 3, 255, 98, 58, 0, 255, 101, 60, 3, 255, 111, 49, 3, 255, 120, 41, 2, 255, 119, 56, 8, 255, 110, 62, 2, 255, 111, 67, 1, 255, 112, 65, 4, 255, 117, 65, 5, 255, 103, 63, 3, 255, 104, 55, 7, 255, 120, 57, 9, 255, 129, 75, 2, 255, 135, 86, 3, 255, 137, 82, 3, 255, 140, 79, 0, 255, 145, 85, 5, 255, 128, 75, 2, 255, 108, 48, 3, 255, 120, 51, 7, 255, 108, 46, 5, 255, 108, 50, 3, 255, 101, 48, 4, 255, 98, 51, 8, 255, 94, 55, 5, 255, 87, 53, 6, 255, 88, 51, 4, 255, 88, 49, 9, 255, 92, 52, 16, 255, 100, 53, 4, 255, 109, 56, 6, 255, 97, 52, 7, 255, 88, 55, 9, 255, 85, 49, 7, 255, 93, 51, 8, 255, 94, 56, 4, 255, 99, 54, 12, 255, 95, 52, 12, 255, 89, 54, 3, 255, 94, 60, 13, 255, 92, 54, 13, 255, 97, 62, 8, 255, 85, 62, 8, 255, 94, 61, 7, 255, 100, 62, 14, 255, 90, 59, 27, 255, 88, 59, 13, 255, 92, 60, 12, 255, 97, 62, 19, 255, 93, 58, 23, 255, 90, 63, 22, 255, 86, 64, 18, 255, 84, 68, 21, 255, 88, 65, 27, 255, 92, 61, 28, 255, 93, 60, 23, 255, 99, 65, 19, 255, 107, 69, 26, 255, 100, 70, 11, 255, 104, 73, 18, 255, 100, 70, 23, 255, 94, 70, 25, 255, 96, 72, 22, 255, 96, 74, 27, 255, 91, 75, 27, 255, 95, 74, 31, 255, 99, 73, 33, 255, 96, 80, 29, 255, 96, 79, 30, 255, 103, 76, 34, 255, 103, 81, 32, 255, 107, 87, 28, 255, 100, 80, 36, 255, 98, 81, 35, 255, 107, 89, 30, 255, 110, 90, 39, 255, 110, 92, 32, 255, 111, 92, 41, 255, 108, 88, 45, 255, 111, 92, 35, 255, 107, 94, 37, 255, 106, 91, 45, 255, 114, 93, 43, 255, 113, 96, 36, 255, 115, 97, 44, 255, 113, 94, 42, 255, 114, 95, 37, 255, 118, 98, 42, 255, 114, 98, 26, 255, 116, 98, 30, 255, 113, 96, 40, 255, 116, 96, 38, 255, 120, 97, 41, 255, 116, 102, 21, 255, 116, 102, 30, 255, 114, 96, 33, 255, 118, 95, 39, 255, 123, 93, 35, 255, 121, 93, 35, 255, 121, 91, 39, 255, 121, 90, 29, 255, 117, 92, 17, 255, 113, 90, 35, 255, 112, 93, 21, 255, 114, 91, 27, 255, 115, 89, 26, 255, 114, 85, 23, 255, 111, 85, 26, 255, 113, 87, 25, 255, 113, 83, 26, 255, 114, 81, 24, 255, 109, 80, 11, 255, 111, 78, 31, 255, 109, 76, 22, 255, 110, 79, 18, 255, 109, 79, 27, 255, 106, 73, 25, 255, 107, 73, 17, 255, 108, 74, 14, 255, 108, 72, 21, 255, 107, 70, 17, 255, 115, 76, 12, 255, 117, 74, 13, 255, 113, 71, 19, 255, 110, 69, 13, 255, 111, 68, 7, 255, 111, 64, 11, 255, 107, 65, 14, 255, 102, 64, 8, 255, 108, 61, 14, 255, 112, 61, 13, 255, 112, 62, 11, 255, 109, 63, 8, 255, 106, 64, 7, 255, 106, 58, 7, 255, 109, 62, 8, 255, 105, 59, 4, 255, 105, 55, 7, 255, 111, 58, 7, 255, 108, 54, 2, 255, 109, 57, 7, 255, 104, 55, 4, 255, 99, 51, 5, 255, 99, 52, 9, 255, 98, 47, 9, 255, 102, 47, 7, 255, 105, 53, 6, 255, 101, 51, 2, 255, 100, 49, 3, 255, 103, 49, 3, 255, 96, 48, 2, 255, 93, 48, 3, 255, 97, 45, 3, 255, 95, 45, 2, 255, 94, 44, 2, 255, 96, 41, 2, 255, 96, 42, 0, 255, 94, 43, 4, 255, 95, 44, 6, 255, 92, 42, 2, 255, 89, 43, 1, 255, 93, 43, 3, 255, 95, 42, 3, 255, 90, 39, 2, 255, 81, 36, 1, 255, 85, 40, 8, 255, 84, 35, 4, 255, 80, 37, 4, 255, 81, 37, 2, 255, 84, 35, 1, 255, 83, 34, 3, 255, 82, 35, 6, 255, 78, 34, 3, 255, 83, 35, 5, 255, 85, 34, 4, 255, 79, 34, 1, 255, 84, 33, 1, 255, 99, 36, 4, 255, 107, 36, 4, 255, 117, 44, 10, 255, 127, 47, 6, 255, 128, 47, 0, 255, 131, 51, 6, 255, 132, 47, 6, 255, 137, 48, 3, 255, 136, 50, 3, 255, 120, 40, 5, 255, 108, 31, 6, 255, 104, 32, 5, 255, 102, 33, 0, 255, 104, 32, 4, 255, 109, 35, 9, 255, 104, 29, 3, 255, 112, 34, 3, 255, 112, 33, 3, 255, 100, 34, 3, 255, 102, 33, 5, 255, 95, 31, 0, 255, 101, 32, 2, 255, 98, 33, 4, 255, 90, 31, 1, 255, 92, 24, 1, 255, 107, 27, 9, 255, 102, 25, 4, 255, 92, 27, 0, 255, 95, 27, 2, 255, 103, 26, 4, 255, 105, 26, 2, 255, 111, 33, 6, 255, 100, 24, 1, 255, 92, 23, 3, 255, 94, 31, 4, 255, 109, 35, 4, 255, 112, 34, 3, 255, 112, 34, 2, 255, 128, 39, 6, 255, 135, 42, 5, 255, 134, 41, 6, 255, 128, 37, 2, 255, 126, 38, 3, 255, 130, 39, 3, 255, 132, 43, 2, 255, 133, 44, 2, 255, 131, 40, 2, 255, 132, 39, 5, 255, 136, 41, 7, 255, 130, 38, 5, 255, 133, 39, 3, 255, 135, 39, 0, 255, 135, 40, 0, 255, 132, 38, 1, 255, 127, 36, 4, 255, 125, 37, 3, 255, 124, 39, 2, 255, 124, 38, 5, 255, 118, 32, 4, 255, 111, 29, 0, 255, 113, 32, 1, 255, 115, 36, 3, 255, 117, 35, 2, 255, 122, 32, 3, 255, 125, 31, 3, 255, 126, 34, 4, 255, 120, 35, 1, 255, 123, 34, 0, 255, 127, 35, 1, 255, 129, 36, 2, 255, 128, 38, 1, 255, 126, 37, 2, 255, 125, 35, 1, 255, 123, 39, 3, 255, 121, 38, 3, 255, 106, 32, 5, 255, 78, 19, 3, 255, 81, 20, 2, 255, 91, 23, 1, 255, 96, 23, 5, 255, 112, 28, 1, 255, 121, 33, 0, 255, 106, 24, 2, 255, 87, 23, 2, 255, 110, 35, 5, 255, 120, 35, 2, 255, 111, 30, 1, 255, 102, 27, 1, 255, 108, 32, 3, 255, 118, 32, 6, 255, 79, 22, 1, 255, 53, 15, 1, 255, 70, 13, 7, 255, 71, 16, 4, 255, 65, 15, 0, 255, 61, 20, 0, 255, 59, 15, 1, 255, 52, 15, 6, 255, 50, 14, 5, 255, 56, 13, 3, 255, 55, 13, 4, 255, 52, 12, 1, 255, 58, 14, 4, 255, 62, 16, 6, 255, 58, 15, 4, 255, 52, 11, 0, 255, 58, 17, 4, 255, 59, 16, 5, 255, 63, 16, 6, 255, 59, 14, 5, 255, 53, 12, 3, 255, 48, 11, 1, 255, 39, 12, 2, 255, 44, 16, 1, 255, 51, 15, 1, 255, 17, 7, 3, 255, 14, 4, 0, 255, 14, 6, 2, 255, 15, 9, 4, 255, 15, 9, 3, 255, 18, 8, 4, 255, 19, 9, 2, 255, 20, 9, 0, 255, 25, 12, 3, 255, 28, 14, 4, 255, 27, 13, 2, 255, 32, 15, 4, 255, 32, 15, 1, 255, 34, 16, 4, 255, 29, 13, 4, 255, 33, 19, 6, 255, 33, 17, 3, 255, 29, 12, 3, 255, 25, 11, 2, 255, 26, 14, 4, 255, 24, 12, 3, 255, 23, 14, 5, 255, 21, 12, 3, 255, 22, 14, 2, 255, 23, 14, 2, 255, 27, 15, 4, 255, 33, 16, 4, 255, 31, 14, 2, 255, 34, 18, 2, 255, 30, 17, 2, 255, 22, 12, 3, 255, 19, 11, 7, 255, 26, 14, 5, 255, 30, 15, 2, 255, 36, 20, 3, 255, 37, 21, 6, 255, 33, 15, 1, 255, 34, 20, 3, 255, 36, 20, 5, 255, 35, 18, 2, 255, 43, 25, 4, 255, 42, 25, 2, 255, 39, 21, 1, 255, 48, 26, 5, 255, 43, 26, 3, 255, 46, 31, 5, 255, 59, 30, 6, 255, 66, 38, 12, 255, 65, 40, 9, 255, 72, 44, 11, 255, 70, 45, 17, 255, 68, 38, 11, 255, 70, 38, 2, 255, 73, 44, 1, 255, 76, 44, 7, 255, 80, 38, 3, 255, 86, 41, 1, 255, 78, 42, 1, 255, 72, 35, 1, 255, 79, 32, 5, 255, 78, 38, 2, 255, 72, 43, 9, 255, 59, 39, 6, 255, 76, 44, 12, 255, 70, 34, 6, 255, 67, 33, 5, 255, 68, 38, 4, 255, 69, 40, 3, 255, 69, 38, 4, 255, 66, 39, 2, 255, 71, 38, 1, 255, 73, 37, 1, 255, 75, 38, 4, 255, 73, 38, 3, 255, 66, 36, 1, 255, 68, 38, 3, 255, 75, 40, 6, 255, 72, 41, 3, 255, 76, 41, 2, 255, 78, 43, 2, 255, 81, 45, 3, 255, 82, 47, 2, 255, 85, 47, 0, 255, 87, 47, 2, 255, 83, 50, 3, 255, 83, 50, 3, 255, 88, 49, 5, 255, 87, 51, 4, 255, 92, 55, 6, 255, 94, 54, 3, 255, 93, 53, 2, 255, 92, 54, 3, 255, 91, 55, 3, 255, 86, 52, 3, 255, 83, 49, 3, 255, 80, 46, 2, 255, 77, 47, 1, 255, 75, 44, 0, 255, 83, 48, 3, 255, 79, 47, 1, 255, 88, 53, 2, 255, 94, 54, 2, 255, 91, 51, 2, 255, 94, 52, 2, 255, 99, 52, 3, 255, 97, 54, 3, 255, 97, 54, 1, 255, 107, 57, 2, 255, 110, 57, 1, 255, 104, 59, 3, 255, 109, 55, 2, 255, 119, 55, 2, 255, 116, 59, 2, 255, 111, 63, 4, 255, 111, 65, 6, 255, 113, 65, 2, 255, 119, 65, 8, 255, 107, 70, 6, 255, 120, 79, 3, 255, 136, 81, 3, 255, 129, 77, 6, 255, 117, 67, 4, 255, 110, 60, 2, 255, 105, 59, 3, 255, 99, 55, 2, 255, 96, 51, 7, 255, 94, 47, 7, 255, 102, 44, 4, 255, 107, 43, 8, 255, 97, 49, 6, 255, 86, 51, 4, 255, 84, 49, 2, 255, 87, 49, 2, 255, 90, 52, 6, 255, 85, 49, 3, 255, 82, 48, 10, 255, 85, 48, 13, 255, 102, 56, 0, 255, 107, 56, 4, 255, 89, 51, 2, 255, 80, 53, 3, 255, 99, 52, 6, 255, 114, 56, 5, 255, 96, 55, 5, 255, 109, 54, 15, 255, 102, 56, 7, 255, 88, 55, 4, 255, 98, 56, 19, 255, 95, 56, 9, 255, 91, 59, 5, 255, 80, 55, 16, 255, 94, 58, 19, 255, 91, 57, 7, 255, 88, 61, 21, 255, 89, 58, 17, 255, 96, 61, 12, 255, 98, 63, 8, 255, 94, 63, 18, 255, 91, 59, 25, 255, 93, 61, 25, 255, 86, 64, 15, 255, 85, 62, 19, 255, 89, 64, 26, 255, 93, 70, 25, 255, 93, 66, 19, 255, 100, 68, 24, 255, 108, 69, 31, 255, 98, 67, 32, 255, 95, 72, 18, 255, 96, 73, 18, 255, 98, 75, 24, 255, 106, 79, 28, 255, 105, 76, 32, 255, 96, 73, 28, 255, 92, 76, 38, 255, 95, 76, 33, 255, 96, 81, 20, 255, 93, 82, 33, 255, 100, 79, 44, 255, 106, 84, 39, 255, 104, 85, 41, 255, 95, 82, 38, 255, 103, 83, 39, 255, 102, 90, 31, 255, 97, 90, 37, 255, 107, 89, 42, 255, 111, 90, 37, 255, 115, 94, 32, 255, 111, 97, 27, 255, 110, 96, 38, 255, 118, 99, 32, 255, 116, 97, 31, 255, 114, 98, 31, 255, 117, 100, 39, 255, 118, 99, 38, 255, 116, 95, 41, 255, 113, 92, 46, 255, 118, 99, 45, 255, 116, 96, 41, 255, 124, 97, 44, 255, 124, 95, 40, 255, 119, 96, 34, 255, 116, 95, 35, 255, 119, 96, 42, 255, 120, 94, 38, 255, 121, 93, 34, 255, 121, 94, 36, 255, 121, 94, 32, 255, 122, 92, 28, 255, 121, 90, 26, 255, 122, 88, 36, 255, 119, 89, 28, 255, 119, 85, 39, 255, 120, 87, 35, 255, 118, 88, 23, 255, 111, 86, 26, 255, 109, 85, 29, 255, 112, 83, 29, 255, 110, 79, 23, 255, 105, 82, 16, 255, 108, 82, 10, 255, 112, 81, 14, 255, 108, 76, 18, 255, 103, 75, 22, 255, 104, 75, 10, 255, 108, 77, 5, 255, 108, 76, 15, 255, 102, 67, 18, 255, 107, 69, 16, 255, 113, 70, 10, 255, 118, 71, 7, 255, 118, 71, 14, 255, 113, 66, 16, 255, 113, 68, 8, 255, 110, 66, 3, 255, 109, 66, 10, 255, 109, 66, 13, 255, 112, 62, 8, 255, 113, 62, 6, 255, 112, 60, 2, 255, 108, 62, 2, 255, 108, 62, 4, 255, 108, 61, 6, 255, 110, 62, 3, 255, 108, 59, 1, 255, 105, 54, 5, 255, 110, 55, 7, 255, 109, 53, 6, 255, 105, 52, 10, 255, 100, 49, 3, 255, 105, 53, 8, 255, 103, 50, 9, 255, 101, 47, 5, 255, 109, 53, 8, 255, 103, 50, 2, 255, 101, 50, 3, 255, 102, 47, 7, 255, 104, 48, 6, 255, 96, 48, 3, 255, 93, 46, 2, 255, 97, 43, 3, 255, 100, 43, 2, 255, 99, 44, 5, 255, 95, 44, 5, 255, 96, 45, 1, 255, 95, 41, 1, 255, 92, 42, 6, 255, 88, 41, 3, 255, 90, 42, 2, 255, 88, 40, 5, 255, 85, 41, 1, 255, 84, 40, 0, 255, 85, 38, 2, 255, 86, 39, 5, 255, 86, 37, 5, 255, 80, 35, 3, 255, 83, 37, 4, 255, 84, 36, 3, 255, 81, 35, 3, 255, 81, 36, 5, 255, 78, 35, 2, 255, 83, 34, 7, 255, 88, 33, 10, 255, 83, 35, 3, 255, 86, 38, 1, 255, 100, 45, 4, 255, 104, 39, 3, 255, 108, 37, 4, 255, 122, 47, 3, 255, 135, 49, 1, 255, 134, 46, 5, 255, 132, 51, 4, 255, 135, 52, 1, 255, 131, 52, 2, 255, 123, 43, 5, 255, 109, 29, 3, 255, 113, 39, 6, 255, 113, 37, 3, 255, 117, 36, 4, 255, 125, 39, 11, 255, 127, 41, 6, 255, 128, 44, 6, 255, 132, 40, 8, 255, 125, 47, 2, 255, 130, 45, 0, 255, 122, 39, 3, 255, 116, 39, 4, 255, 110, 33, 2, 255, 107, 31, 2, 255, 104, 32, 2, 255, 108, 36, 1, 255, 113, 33, 2, 255, 106, 29, 6, 255, 99, 24, 7, 255, 98, 21, 1, 255, 96, 24, 3, 255, 97, 28, 2, 255, 93, 27, 2, 255, 88, 21, 6, 255, 93, 28, 5, 255, 102, 32, 0, 255, 114, 30, 4, 255, 120, 38, 6, 255, 131, 41, 5, 255, 133, 36, 4, 255, 128, 38, 3, 255, 127, 44, 4, 255, 125, 40, 2, 255, 127, 39, 1, 255, 130, 41, 2, 255, 134, 44, 4, 255, 132, 43, 5, 255, 128, 38, 4, 255, 128, 35, 2, 255, 129, 35, 2, 255, 127, 37, 2, 255, 131, 39, 3, 255, 134, 37, 1, 255, 132, 39, 4, 255, 125, 35, 4, 255, 122, 33, 2, 255, 120, 33, 0, 255, 123, 35, 2, 255, 118, 34, 4, 255, 116, 31, 2, 255, 114, 31, 1, 255, 114, 33, 3, 255, 116, 34, 4, 255, 119, 34, 6, 255, 122, 35, 5, 255, 120, 33, 3, 255, 117, 32, 2, 255, 125, 36, 2, 255, 131, 37, 4, 255, 133, 39, 5, 255, 129, 35, 2, 255, 123, 34, 0, 255, 124, 35, 1, 255, 122, 36, 2, 255, 125, 33, 1, 255, 126, 31, 4, 255, 90, 23, 7, 255, 78, 25, 1, 255, 88, 25, 3, 255, 79, 15, 2, 255, 98, 26, 3, 255, 113, 34, 0, 255, 111, 37, 7, 255, 82, 22, 1, 255, 96, 31, 4, 255, 112, 38, 2, 255, 117, 34, 0, 255, 110, 28, 3, 255, 110, 29, 4, 255, 116, 34, 2, 255, 105, 29, 1, 255, 74, 19, 4, 255, 58, 16, 5, 255, 64, 16, 2, 255, 64, 19, 3, 255, 62, 17, 3, 255, 61, 15, 3, 255, 55, 15, 4, 255, 49, 12, 0, 255, 46, 13, 1, 255, 52, 15, 7, 255, 52, 12, 6, 255, 49, 10, 0, 255, 54, 14, 3, 255, 58, 12, 7, 255, 50, 10, 3, 255, 48, 15, 3, 255, 49, 13, 4, 255, 52, 10, 4, 255, 46, 12, 1, 255, 49, 15, 2, 255, 57, 15, 3, 255, 50, 13, 5, 255, 49, 12, 2, 255, 51, 13, 2, 255, 17, 8, 6, 255, 16, 6, 4, 255, 14, 6, 3, 255, 12, 6, 3, 255, 13, 9, 4, 255, 17, 8, 3, 255, 21, 11, 4, 255, 20, 11, 1, 255, 22, 11, 2, 255, 23, 10, 1, 255, 28, 14, 3, 255, 29, 14, 1, 255, 36, 20, 6, 255, 31, 16, 1, 255, 26, 13, 3, 255, 29, 18, 2, 255, 32, 17, 2, 255, 32, 14, 6, 255, 32, 15, 5, 255, 25, 13, 4, 255, 24, 12, 3, 255, 22, 12, 2, 255, 25, 16, 3, 255, 19, 12, 1, 255, 19, 14, 2, 255, 23, 13, 3, 255, 30, 13, 4, 255, 30, 15, 6, 255, 26, 13, 3, 255, 21, 10, 0, 255, 21, 10, 2, 255, 21, 11, 4, 255, 22, 17, 4, 255, 35, 13, 3, 255, 34, 16, 3, 255, 26, 19, 3, 255, 34, 19, 5, 255, 34, 20, 1, 255, 32, 16, 2, 255, 34, 18, 5, 255, 43, 22, 5, 255, 42, 23, 4, 255, 38, 24, 6, 255, 42, 22, 6, 255, 44, 24, 8, 255, 51, 25, 5, 255, 51, 26, 7, 255, 58, 34, 10, 255, 66, 47, 15, 255, 65, 46, 24, 255, 77, 57, 28, 255, 69, 53, 25, 255, 77, 52, 19, 255, 77, 47, 13, 255, 74, 44, 8, 255, 79, 39, 3, 255, 79, 34, 3, 255, 75, 36, 7, 255, 71, 33, 6, 255, 67, 32, 5, 255, 65, 34, 7, 255, 75, 43, 4, 255, 72, 46, 1, 255, 70, 38, 7, 255, 76, 34, 5, 255, 72, 37, 4, 255, 66, 35, 3, 255, 66, 34, 2, 255, 66, 35, 1, 255, 64, 39, 1, 255, 66, 38, 2, 255, 72, 38, 3, 255, 72, 37, 3, 255, 68, 36, 1, 255, 68, 37, 0, 255, 71, 39, 2, 255, 71, 40, 2, 255, 64, 42, 1, 255, 73, 44, 4, 255, 77, 42, 2, 255, 80, 43, 1, 255, 86, 48, 4, 255, 91, 49, 5, 255, 86, 46, 2, 255, 82, 50, 3, 255, 83, 50, 3, 255, 89, 49, 3, 255, 86, 48, 1, 255, 94, 53, 3, 255, 95, 53, 3, 255, 88, 51, 0, 255, 86, 50, 2, 255, 86, 51, 4, 255, 79, 45, 0, 255, 76, 41, 0, 255, 78, 44, 2, 255, 80, 49, 2, 255, 82, 46, 1, 255, 85, 49, 3, 255, 81, 50, 3, 255, 83, 51, 0, 255, 91, 52, 2, 255, 92, 51, 1, 255, 94, 52, 1, 255, 100, 51, 3, 255, 98, 54, 4, 255, 94, 57, 4, 255, 101, 58, 3, 255, 102, 52, 1, 255, 106, 55, 7, 255, 102, 57, 6, 255, 101, 60, 2, 255, 110, 60, 1, 255, 113, 67, 2, 255, 116, 68, 0, 255, 115, 68, 0, 255, 109, 64, 0, 255, 103, 61, 2, 255, 97, 59, 2, 255, 94, 52, 0, 255, 88, 50, 3, 255, 84, 49, 1, 255, 85, 46, 3, 255, 85, 51, 7, 255, 77, 47, 1, 255, 79, 47, 5, 255, 87, 49, 2, 255, 89, 48, 2, 255, 80, 47, 7, 255, 78, 47, 6, 255, 81, 50, 5, 255, 82, 49, 2, 255, 84, 50, 4, 255, 84, 51, 4, 255, 78, 49, 0, 255, 78, 51, 5, 255, 77, 49, 6, 255, 92, 49, 5, 255, 93, 50, 6, 255, 85, 53, 8, 255, 78, 50, 7, 255, 84, 52, 13, 255, 94, 55, 1, 255, 77, 53, 10, 255, 86, 49, 10, 255, 89, 46, 15, 255, 83, 53, 14, 255, 90, 57, 6, 255, 83, 53, 15, 255, 78, 52, 16, 255, 80, 56, 16, 255, 101, 60, 15, 255, 112, 63, 15, 255, 102, 64, 21, 255, 83, 63, 16, 255, 89, 59, 19, 255, 100, 61, 21, 255, 110, 67, 22, 255, 105, 65, 18, 255, 92, 59, 22, 255, 88, 64, 19, 255, 89, 63, 21, 255, 98, 68, 22, 255, 101, 69, 9, 255, 103, 70, 29, 255, 95, 68, 25, 255, 95, 66, 26, 255, 92, 69, 30, 255, 95, 76, 25, 255, 93, 74, 25, 255, 96, 74, 28, 255, 108, 77, 20, 255, 100, 73, 29, 255, 91, 76, 28, 255, 93, 77, 27, 255, 86, 73, 45, 255, 87, 81, 36, 255, 93, 82, 43, 255, 91, 80, 43, 255, 94, 83, 40, 255, 96, 86, 41, 255, 97, 86, 33, 255, 101, 87, 44, 255, 101, 86, 37, 255, 106, 88, 46, 255, 103, 88, 43, 255, 110, 93, 41, 255, 114, 92, 35, 255, 113, 95, 38, 255, 114, 97, 34, 255, 122, 99, 30, 255, 122, 100, 40, 255, 122, 100, 35, 255, 124, 102, 37, 255, 121, 100, 37, 255, 118, 98, 37, 255, 120, 100, 42, 255, 115, 98, 44, 255, 117, 98, 39, 255, 121, 100, 44, 255, 119, 94, 42, 255, 122, 92, 51, 255, 118, 96, 44, 255, 118, 98, 39, 255, 124, 96, 33, 255, 120, 95, 36, 255, 117, 96, 30, 255, 117, 95, 33, 255, 120, 93, 35, 255, 123, 90, 31, 255, 123, 87, 27, 255, 117, 87, 31, 255, 116, 84, 33, 255, 116, 84, 26, 255, 117, 89, 19, 255, 115, 88, 21, 255, 112, 83, 30, 255, 111, 84, 29, 255, 113, 85, 21, 255, 111, 81, 22, 255, 111, 83, 6, 255, 108, 79, 11, 255, 107, 75, 24, 255, 108, 74, 20, 255, 109, 75, 13, 255, 110, 76, 15, 255, 105, 71, 14, 255, 103, 70, 18, 255, 106, 69, 19, 255, 108, 67, 12, 255, 111, 68, 9, 255, 109, 64, 15, 255, 108, 63, 18, 255, 112, 68, 15, 255, 110, 65, 11, 255, 109, 62, 15, 255, 108, 61, 15, 255, 108, 63, 10, 255, 110, 63, 6, 255, 111, 60, 3, 255, 106, 61, 5, 255, 109, 57, 6, 255, 111, 59, 11, 255, 109, 58, 6, 255, 107, 57, 3, 255, 107, 55, 9, 255, 107, 55, 6, 255, 105, 53, 5, 255, 102, 50, 7, 255, 101, 53, 3, 255, 102, 54, 1, 255, 104, 53, 4, 255, 104, 52, 3, 255, 100, 49, 1, 255, 98, 47, 1, 255, 99, 51, 5, 255, 95, 49, 5, 255, 102, 49, 4, 255, 102, 47, 5, 255, 99, 43, 3, 255, 99, 42, 4, 255, 95, 46, 4, 255, 99, 48, 5, 255, 95, 44, 4, 255, 94, 45, 6, 255, 94, 40, 2, 255, 95, 46, 5, 255, 89, 43, 4, 255, 93, 42, 7, 255, 87, 40, 5, 255, 81, 38, 3, 255, 82, 37, 4, 255, 87, 37, 6, 255, 88, 36, 5, 255, 88, 37, 3, 255, 80, 36, 0, 255, 84, 40, 5, 255, 83, 38, 4, 255, 80, 36, 2, 255, 83, 38, 4, 255, 84, 36, 3, 255, 83, 37, 3, 255, 80, 35, 1, 255, 91, 34, 1, 255, 99, 38, 6, 255, 99, 41, 6, 255, 102, 40, 5, 255, 103, 34, 0, 255, 114, 41, 6, 255, 134, 49, 2, 255, 141, 49, 0, 255, 132, 48, 4, 255, 127, 50, 5, 255, 131, 48, 2, 255, 121, 42, 3, 255, 103, 31, 1, 255, 104, 34, 1, 255, 107, 37, 4, 255, 105, 31, 1, 255, 105, 30, 4, 255, 112, 38, 5, 255, 114, 32, 1, 255, 117, 33, 5, 255, 116, 31, 3, 255, 125, 34, 4, 255, 121, 38, 4, 255, 116, 40, 3, 255, 117, 35, 4, 255, 113, 32, 6, 255, 109, 27, 3, 255, 119, 35, 4, 255, 123, 40, 4, 255, 117, 36, 5, 255, 115, 34, 6, 255, 105, 27, 1, 255, 103, 30, 6, 255, 97, 26, 2, 255, 101, 29, 3, 255, 109, 29, 4, 255, 116, 33, 2, 255, 110, 36, 3, 255, 111, 28, 3, 255, 122, 34, 3, 255, 133, 37, 3, 255, 128, 35, 3, 255, 122, 39, 2, 255, 125, 40, 3, 255, 125, 36, 2, 255, 130, 37, 3, 255, 129, 35, 2, 255, 129, 35, 2, 255, 129, 37, 3, 255, 127, 37, 2, 255, 129, 34, 1, 255, 130, 34, 2, 255, 124, 35, 0, 255, 125, 35, 1, 255, 128, 32, 0, 255, 125, 34, 3, 255, 118, 35, 5, 255, 122, 34, 4, 255, 119, 34, 1, 255, 119, 35, 0, 255, 112, 37, 1, 255, 116, 34, 3, 255, 117, 32, 3, 255, 117, 33, 4, 255, 113, 31, 2, 255, 116, 35, 3, 255, 117, 33, 2, 255, 116, 31, 0, 255, 120, 32, 1, 255, 123, 34, 0, 255, 128, 36, 2, 255, 132, 38, 4, 255, 125, 33, 1, 255, 121, 31, 1, 255, 124, 35, 2, 255, 124, 36, 1, 255, 120, 37, 1, 255, 121, 37, 5, 255, 106, 27, 3, 255, 98, 21, 0, 255, 104, 21, 3, 255, 91, 17, 3, 255, 89, 23, 4, 255, 106, 30, 5, 255, 111, 33, 3, 255, 90, 20, 1, 255, 89, 19, 6, 255, 105, 31, 2, 255, 117, 33, 1, 255, 119, 30, 6, 255, 110, 24, 2, 255, 103, 26, 0, 255, 113, 28, 3, 255, 100, 25, 5, 255, 71, 19, 1, 255, 64, 15, 1, 255, 55, 14, 2, 255, 54, 12, 3, 255, 52, 16, 5, 255, 61, 13, 3, 255, 61, 15, 0, 255, 48, 15, 4, 255, 38, 10, 3, 255, 38, 11, 5, 255, 48, 10, 2, 255, 57, 12, 1, 255, 55, 12, 7, 255, 55, 11, 7, 255, 53, 10, 3, 255, 49, 10, 3, 255, 52, 9, 3, 255, 60, 10, 4, 255, 63, 13, 3, 255, 59, 14, 1, 255, 55, 13, 5, 255, 51, 11, 1, 255, 52, 11, 1, 255, 14, 8, 4, 255, 15, 8, 5, 255, 13, 6, 3, 255, 9, 5, 1, 255, 12, 7, 2, 255, 17, 9, 4, 255, 18, 9, 2, 255, 21, 12, 2, 255, 19, 9, 0, 255, 25, 13, 4, 255, 27, 14, 4, 255, 26, 12, 1, 255, 30, 16, 2, 255, 32, 19, 4, 255, 29, 18, 6, 255, 29, 20, 4, 255, 27, 15, 1, 255, 28, 13, 2, 255, 29, 14, 3, 255, 21, 9, 1, 255, 21, 11, 1, 255, 24, 13, 3, 255, 26, 17, 6, 255, 23, 15, 4, 255, 17, 13, 2, 255, 26, 19, 7, 255, 29, 14, 4, 255, 20, 10, 2, 255, 18, 11, 5, 255, 21, 14, 5, 255, 26, 15, 4, 255, 29, 13, 3, 255, 27, 17, 3, 255, 31, 14, 4, 255, 32, 15, 3, 255, 29, 16, 2, 255, 33, 18, 3, 255, 38, 22, 6, 255, 37, 21, 6, 255, 35, 19, 3, 255, 45, 24, 2, 255, 42, 22, 1, 255, 37, 22, 3, 255, 43, 23, 3, 255, 47, 27, 4, 255, 44, 24, 1, 255, 43, 26, 3, 255, 60, 37, 3, 255, 66, 41, 11, 255, 64, 47, 21, 255, 70, 50, 15, 255, 71, 51, 18, 255, 79, 45, 16, 255, 88, 48, 15, 255, 84, 48, 14, 255, 75, 43, 5, 255, 74, 37, 3, 255, 73, 38, 10, 255, 72, 38, 8, 255, 64, 32, 6, 255, 64, 38, 9, 255, 73, 41, 1, 255, 74, 40, 5, 255, 70, 34, 10, 255, 68, 35, 0, 255, 71, 38, 3, 255, 69, 36, 4, 255, 65, 32, 1, 255, 70, 36, 4, 255, 67, 34, 1, 255, 67, 36, 3, 255, 68, 36, 1, 255, 69, 35, 3, 255, 66, 37, 2, 255, 71, 39, 3, 255, 73, 40, 2, 255, 69, 40, 1, 255, 73, 45, 4, 255, 76, 42, 4, 255, 79, 42, 3, 255, 80, 44, 3, 255, 82, 46, 4, 255, 83, 48, 3, 255, 86, 50, 4, 255, 83, 51, 4, 255, 84, 50, 2, 255, 91, 51, 3, 255, 92, 52, 3, 255, 92, 51, 2, 255, 89, 51, 2, 255, 83, 50, 3, 255, 80, 46, 1, 255, 78, 44, 1, 255, 77, 43, 1, 255, 81, 45, 3, 255, 81, 45, 1, 255, 81, 50, 1, 255, 85, 51, 4, 255, 84, 51, 4, 255, 88, 53, 7, 255, 83, 47, 1, 255, 90, 47, 3, 255, 105, 50, 4, 255, 106, 50, 3, 255, 101, 52, 4, 255, 94, 55, 4, 255, 93, 57, 5, 255, 100, 54, 5, 255, 103, 48, 3, 255, 106, 59, 3, 255, 110, 57, 2, 255, 109, 59, 1, 255, 107, 65, 6, 255, 101, 54, 4, 255, 94, 50, 4, 255, 89, 53, 7, 255, 82, 48, 3, 255, 89, 46, 6, 255, 83, 45, 5, 255, 85, 45, 4, 255, 82, 45, 1, 255, 79, 50, 2, 255, 79, 48, 5, 255, 82, 48, 4, 255, 82, 44, 1, 255, 86, 46, 5, 255, 84, 45, 0, 255, 78, 48, 7, 255, 77, 51, 4, 255, 80, 44, 0, 255, 95, 49, 3, 255, 98, 51, 3, 255, 93, 47, 4, 255, 85, 46, 3, 255, 90, 48, 3, 255, 82, 48, 4, 255, 81, 54, 5, 255, 95, 49, 7, 255, 101, 54, 3, 255, 90, 53, 8, 255, 79, 48, 11, 255, 69, 50, 12, 255, 75, 53, 2, 255, 73, 60, 10, 255, 75, 54, 12, 255, 84, 49, 17, 255, 83, 55, 15, 255, 83, 56, 15, 255, 76, 54, 12, 255, 76, 55, 16, 255, 78, 59, 22, 255, 90, 60, 14, 255, 106, 63, 8, 255, 109, 64, 9, 255, 104, 63, 10, 255, 101, 65, 15, 255, 110, 69, 10, 255, 111, 62, 10, 255, 100, 60, 21, 255, 84, 59, 28, 255, 88, 63, 15, 255, 101, 67, 22, 255, 108, 69, 22, 255, 98, 63, 21, 255, 94, 69, 20, 255, 92, 68, 21, 255, 94, 67, 20, 255, 94, 70, 22, 255, 95, 73, 27, 255, 94, 75, 24, 255, 101, 79, 21, 255, 111, 81, 17, 255, 103, 74, 34, 255, 95, 76, 35, 255, 92, 76, 28, 255, 92, 77, 36, 255, 94, 83, 41, 255, 94, 82, 41, 255, 93, 83, 33, 255, 96, 86, 30, 255, 97, 86, 37, 255, 102, 89, 27, 255, 97, 89, 32, 255, 103, 92, 34, 255, 106, 91, 36, 255, 92, 87, 45, 255, 102, 91, 39, 255, 108, 94, 38, 255, 104, 93, 44, 255, 109, 94, 50, 255, 115, 96, 50, 255, 113, 93, 48, 255, 119, 91, 48, 255, 121, 96, 45, 255, 120, 98, 45, 255, 120, 101, 41, 255, 115, 100, 34, 255, 118, 101, 42, 255, 114, 100, 42, 255, 114, 98, 36, 255, 120, 101, 30, 255, 118, 97, 45, 255, 120, 98, 45, 255, 120, 97, 33, 255, 124, 99, 25, 255, 123, 94, 26, 255, 119, 92, 36, 255, 114, 91, 40, 255, 116, 92, 43, 255, 118, 96, 28, 255, 115, 92, 23, 255, 115, 91, 36, 255, 114, 92, 20, 255, 113, 86, 32, 255, 112, 84, 35, 255, 109, 85, 15, 255, 108, 82, 27, 255, 111, 81, 24, 255, 113, 83, 14, 255, 111, 83, 18, 255, 110, 78, 22, 255, 110, 74, 19, 255, 109, 73, 18, 255, 110, 77, 14, 255, 110, 71, 15, 255, 109, 69, 20, 255, 109, 73, 18, 255, 104, 72, 14, 255, 104, 71, 19, 255, 109, 72, 17, 255, 107, 69, 12, 255, 106, 66, 14, 255, 107, 65, 13, 255, 110, 67, 13, 255, 110, 63, 16, 255, 111, 63, 16, 255, 110, 62, 9, 255, 104, 64, 9, 255, 107, 65, 6, 255, 112, 63, 5, 255, 110, 61, 7, 255, 111, 58, 8, 255, 114, 61, 8, 255, 109, 57, 7, 255, 106, 55, 4, 255, 105, 54, 9, 255, 105, 54, 6, 255, 105, 55, 6, 255, 98, 50, 6, 255, 103, 56, 5, 255, 104, 52, 2, 255, 106, 51, 6, 255, 109, 52, 8, 255, 99, 44, 2, 255, 100, 45, 5, 255, 101, 46, 8, 255, 99, 48, 4, 255, 99, 47, 2, 255, 93, 47, 2, 255, 92, 47, 6, 255, 96, 43, 5, 255, 97, 42, 4, 255, 97, 45, 2, 255, 94, 45, 3, 255, 92, 39, 5, 255, 96, 41, 4, 255, 94, 45, 2, 255, 92, 43, 3, 255, 92, 39, 6, 255, 91, 44, 0, 255, 90, 43, 5, 255, 82, 35, 6, 255, 82, 31, 9, 255, 86, 35, 10, 255, 86, 34, 5, 255, 88, 39, 3, 255, 88, 39, 3, 255, 88, 36, 4, 255, 90, 38, 5, 255, 92, 37, 4, 255, 93, 35, 3, 255, 95, 37, 7, 255, 85, 34, 2, 255, 85, 32, 2, 255, 86, 32, 3, 255, 91, 35, 3, 255, 103, 40, 4, 255, 105, 37, 0, 255, 110, 39, 3, 255, 118, 49, 2, 255, 137, 56, 4, 255, 143, 51, 8, 255, 136, 50, 4, 255, 134, 46, 8, 255, 129, 40, 7, 255, 115, 37, 8, 255, 92, 27, 1, 255, 83, 28, 1, 255, 82, 30, 4, 255, 76, 26, 7, 255, 71, 24, 1, 255, 67, 22, 4, 255, 50, 17, 6, 255, 54, 21, 6, 255, 65, 23, 6, 255, 69, 20, 6, 255, 84, 26, 4, 255, 90, 29, 2, 255, 93, 29, 2, 255, 107, 31, 3, 255, 126, 40, 6, 255, 129, 45, 4, 255, 120, 37, 0, 255, 123, 40, 2, 255, 112, 33, 1, 255, 102, 28, 2, 255, 99, 29, 2, 255, 102, 29, 2, 255, 112, 34, 0, 255, 121, 38, 0, 255, 118, 37, 7, 255, 113, 32, 4, 255, 119, 32, 1, 255, 130, 33, 1, 255, 125, 40, 4, 255, 121, 41, 3, 255, 124, 36, 1, 255, 125, 35, 1, 255, 128, 37, 3, 255, 125, 34, 3, 255, 124, 36, 4, 255, 122, 37, 1, 255, 121, 35, 0, 255, 124, 31, 3, 255, 125, 30, 3, 255, 123, 30, 1, 255, 126, 34, 2, 255, 128, 37, 3, 255, 121, 37, 1, 255, 116, 31, 1, 255, 119, 32, 3, 255, 115, 35, 4, 255, 123, 34, 2, 255, 121, 36, 2, 255, 120, 32, 0, 255, 111, 32, 1, 255, 114, 34, 5, 255, 114, 30, 1, 255, 117, 30, 0, 255, 117, 31, 0, 255, 119, 35, 2, 255, 120, 36, 4, 255, 122, 33, 2, 255, 125, 35, 1, 255, 125, 35, 2, 255, 121, 32, 3, 255, 118, 31, 2, 255, 122, 33, 2, 255, 127, 36, 2, 255, 124, 36, 2, 255, 120, 32, 2, 255, 113, 30, 0, 255, 101, 29, 1, 255, 98, 27, 2, 255, 96, 27, 2, 255, 89, 20, 2, 255, 91, 22, 5, 255, 98, 30, 2, 255, 98, 28, 5, 255, 86, 17, 4, 255, 98, 24, 1, 255, 109, 30, 1, 255, 111, 29, 1, 255, 104, 30, 2, 255, 103, 27, 5, 255, 99, 24, 1, 255, 93, 24, 0, 255, 79, 20, 2, 255, 60, 17, 5, 255, 56, 14, 2, 255, 55, 16, 3, 255, 57, 11, 0, 255, 59, 15, 3, 255, 60, 14, 2, 255, 59, 14, 7, 255, 42, 11, 5, 255, 37, 11, 4, 255, 49, 12, 4, 255, 55, 13, 3, 255, 42, 10, 1, 255, 49, 12, 4, 255, 58, 13, 5, 255, 48, 12, 2, 255, 40, 15, 2, 255, 51, 16, 3, 255, 63, 15, 2, 255, 64, 16, 2, 255, 54, 15, 3, 255, 50, 14, 4, 255, 51, 15, 5, 255, 10, 8, 2, 255, 10, 6, 2, 255, 11, 7, 4, 255, 11, 8, 4, 255, 13, 8, 3, 255, 17, 10, 3, 255, 20, 9, 1, 255, 24, 14, 5, 255, 22, 12, 3, 255, 22, 11, 3, 255, 26, 12, 2, 255, 30, 14, 1, 255, 29, 13, 1, 255, 26, 15, 4, 255, 25, 16, 4, 255, 22, 14, 5, 255, 23, 12, 3, 255, 25, 13, 0, 255, 26, 14, 5, 255, 27, 13, 2, 255, 25, 14, 2, 255, 22, 13, 4, 255, 19, 13, 3, 255, 22, 14, 4, 255, 23, 14, 1, 255, 26, 15, 3, 255, 19, 10, 1, 255, 18, 11, 3, 255, 21, 15, 6, 255, 20, 14, 4, 255, 21, 13, 2, 255, 22, 13, 3, 255, 26, 16, 1, 255, 37, 16, 5, 255, 36, 13, 3, 255, 30, 17, 2, 255, 33, 21, 5, 255, 40, 19, 5, 255, 38, 19, 5, 255, 44, 23, 5, 255, 47, 24, 1, 255, 47, 25, 4, 255, 45, 23, 6, 255, 44, 23, 2, 255, 51, 24, 1, 255, 50, 24, 2, 255, 50, 29, 1, 255, 48, 29, 1, 255, 61, 35, 4, 255, 72, 40, 4, 255, 77, 36, 10, 255, 76, 41, 17, 255, 81, 51, 11, 255, 73, 40, 0, 255, 74, 39, 8, 255, 73, 41, 13, 255, 73, 39, 15, 255, 79, 46, 22, 255, 78, 43, 16, 255, 71, 33, 6, 255, 66, 34, 2, 255, 69, 33, 1, 255, 60, 26, 5, 255, 60, 36, 11, 255, 59, 36, 4, 255, 67, 37, 1, 255, 69, 34, 4, 255, 67, 35, 6, 255, 61, 33, 1, 255, 64, 34, 4, 255, 68, 36, 2, 255, 74, 35, 0, 255, 71, 35, 0, 255, 71, 39, 4, 255, 72, 38, 6, 255, 69, 36, 3, 255, 66, 42, 3, 255, 79, 44, 1, 255, 80, 44, 2, 255, 80, 44, 1, 255, 81, 47, 4, 255, 81, 48, 3, 255, 80, 46, 0, 255, 83, 47, 4, 255, 84, 44, 2, 255, 86, 47, 1, 255, 89, 50, 1, 255, 92, 51, 3, 255, 84, 47, 2, 255, 81, 48, 2, 255, 82, 46, 1, 255, 76, 42, 0, 255, 74, 41, 0, 255, 79, 45, 4, 255, 83, 48, 4, 255, 82, 46, 1, 255, 89, 50, 5, 255, 86, 49, 4, 255, 79, 49, 2, 255, 87, 47, 4, 255, 87, 46, 2, 255, 93, 51, 5, 255, 103, 53, 6, 255, 94, 48, 1, 255, 90, 53, 2, 255, 88, 56, 1, 255, 90, 56, 1, 255, 97, 52, 4, 255, 102, 54, 7, 255, 97, 55, 1, 255, 102, 53, 3, 255, 97, 54, 6, 255, 88, 51, 5, 255, 86, 44, 2, 255, 81, 46, 2, 255, 81, 46, 2, 255, 81, 47, 1, 255, 82, 46, 4, 255, 76, 43, 3, 255, 83, 41, 5, 255, 92, 41, 2, 255, 85, 45, 2, 255, 80, 47, 3, 255, 74, 45, 0, 255, 76, 42, 2, 255, 82, 44, 2, 255, 82, 47, 1, 255, 73, 45, 7, 255, 80, 39, 4, 255, 87, 44, 6, 255, 97, 50, 4, 255, 105, 50, 3, 255, 108, 47, 8, 255, 103, 47, 8, 255, 92, 46, 11, 255, 73, 42, 7, 255, 85, 49, 9, 255, 104, 53, 9, 255, 94, 49, 6, 255, 79, 51, 13, 255, 75, 49, 10, 255, 75, 49, 5, 255, 80, 51, 8, 255, 85, 57, 2, 255, 86, 53, 8, 255, 88, 58, 4, 255, 80, 54, 6, 255, 72, 51, 16, 255, 75, 55, 16, 255, 82, 55, 10, 255, 84, 61, 10, 255, 81, 58, 14, 255, 89, 54, 14, 255, 107, 63, 15, 255, 110, 65, 16, 255, 89, 59, 13, 255, 94, 65, 22, 255, 97, 63, 23, 255, 96, 64, 25, 255, 94, 67, 31, 255, 99, 65, 18, 255, 99, 63, 28, 255, 91, 64, 25, 255, 80, 63, 34, 255, 77, 64, 27, 255, 92, 70, 28, 255, 96, 70, 30, 255, 92, 73, 20, 255, 89, 73, 29, 255, 95, 73, 33, 255, 91, 73, 29, 255, 86, 76, 29, 255, 90, 75, 40, 255, 97, 81, 24, 255, 96, 77, 32, 255, 98, 79, 33, 255, 101, 85, 35, 255, 95, 83, 34, 255, 95, 83, 40, 255, 102, 89, 34, 255, 103, 89, 37, 255, 102, 86, 51, 255, 101, 85, 50, 255, 104, 88, 42, 255, 103, 90, 41, 255, 102, 93, 51, 255, 109, 97, 43, 255, 110, 92, 47, 255, 108, 97, 44, 255, 107, 96, 42, 255, 108, 93, 48, 255, 112, 102, 40, 255, 116, 97, 46, 255, 113, 95, 43, 255, 113, 96, 49, 255, 116, 101, 47, 255, 113, 96, 51, 255, 115, 95, 42, 255, 114, 97, 38, 255, 120, 101, 40, 255, 127, 107, 34, 255, 120, 100, 38, 255, 120, 100, 35, 255, 121, 95, 31, 255, 122, 95, 38, 255, 123, 94, 42, 255, 120, 95, 46, 255, 114, 93, 28, 255, 113, 91, 29, 255, 114, 92, 27, 255, 111, 89, 32, 255, 116, 90, 27, 255, 117, 89, 27, 255, 117, 88, 25, 255, 114, 87, 28, 255, 109, 85, 29, 255, 109, 87, 20, 255, 112, 86, 17, 255, 113, 82, 20, 255, 115, 81, 20, 255, 114, 80, 18, 255, 112, 81, 16, 255, 111, 78, 13, 255, 112, 76, 11, 255, 105, 72, 3, 255, 110, 75, 14, 255, 108, 72, 18, 255, 106, 70, 16, 255, 106, 71, 12, 255, 108, 71, 8, 255, 107, 72, 8, 255, 106, 69, 10, 255, 108, 64, 6, 255, 109, 62, 6, 255, 108, 62, 11, 255, 111, 63, 15, 255, 109, 62, 8, 255, 107, 60, 10, 255, 107, 60, 6, 255, 108, 60, 6, 255, 109, 57, 10, 255, 109, 56, 10, 255, 111, 59, 4, 255, 111, 57, 4, 255, 110, 60, 5, 255, 103, 53, 5, 255, 107, 55, 8, 255, 107, 55, 8, 255, 99, 50, 8, 255, 98, 51, 3, 255, 103, 53, 4, 255, 104, 49, 6, 255, 105, 49, 8, 255, 101, 49, 6, 255, 99, 48, 5, 255, 98, 45, 4, 255, 96, 47, 5, 255, 97, 45, 5, 255, 94, 44, 3, 255, 94, 45, 7, 255, 96, 41, 5, 255, 95, 43, 3, 255, 93, 47, 1, 255, 96, 45, 4, 255, 93, 40, 4, 255, 96, 44, 5, 255, 97, 43, 2, 255, 94, 41, 2, 255, 90, 39, 5, 255, 91, 41, 2, 255, 94, 41, 4, 255, 87, 37, 4, 255, 78, 34, 4, 255, 81, 36, 6, 255, 84, 34, 4, 255, 86, 37, 2, 255, 85, 34, 1, 255, 88, 34, 3, 255, 90, 35, 5, 255, 90, 37, 2, 255, 87, 30, 0, 255, 93, 35, 5, 255, 91, 36, 6, 255, 80, 32, 4, 255, 72, 30, 0, 255, 79, 32, 2, 255, 94, 34, 3, 255, 103, 32, 2, 255, 109, 39, 3, 255, 100, 36, 3, 255, 102, 34, 5, 255, 115, 38, 4, 255, 118, 40, 2, 255, 98, 29, 5, 255, 74, 18, 2, 255, 54, 20, 6, 255, 37, 22, 10, 255, 47, 23, 2, 255, 65, 24, 4, 255, 60, 26, 3, 255, 41, 21, 1, 255, 40, 19, 2, 255, 42, 21, 3, 255, 47, 22, 1, 255, 61, 23, 1, 255, 60, 23, 3, 255, 54, 23, 2, 255, 77, 28, 1, 255, 82, 24, 1, 255, 82, 26, 3, 255, 82, 25, 1, 255, 102, 29, 4, 255, 119, 34, 4, 255, 121, 39, 3, 255, 109, 33, 3, 255, 99, 23, 1, 255, 101, 30, 2, 255, 105, 31, 3, 255, 109, 30, 4, 255, 115, 33, 5, 255, 112, 33, 3, 255, 117, 36, 4, 255, 114, 32, 2, 255, 124, 34, 3, 255, 125, 35, 2, 255, 119, 33, 2, 255, 128, 36, 4, 255, 132, 40, 5, 255, 127, 38, 2, 255, 122, 36, 3, 255, 122, 37, 7, 255, 121, 37, 7, 255, 117, 33, 1, 255, 123, 33, 6, 255, 118, 28, 3, 255, 123, 28, 4, 255, 122, 28, 2, 255, 116, 34, 3, 255, 109, 33, 1, 255, 107, 28, 0, 255, 109, 29, 3, 255, 104, 33, 5, 255, 116, 30, 3, 255, 115, 34, 1, 255, 118, 32, 2, 255, 110, 35, 5, 255, 109, 31, 4, 255, 114, 31, 4, 255, 115, 29, 2, 255, 114, 31, 2, 255, 114, 33, 2, 255, 112, 30, 1, 255, 121, 34, 3, 255, 123, 37, 2, 255, 120, 35, 2, 255, 114, 30, 3, 255, 115, 30, 3, 255, 121, 32, 2, 255, 123, 34, 1, 255, 125, 33, 0, 255, 117, 31, 0, 255, 108, 31, 2, 255, 104, 31, 1, 255, 95, 30, 0, 255, 96, 28, 1, 255, 105, 25, 3, 255, 88, 19, 3, 255, 92, 25, 4, 255, 106, 27, 4, 255, 93, 23, 0, 255, 88, 22, 3, 255, 102, 26, 3, 255, 109, 32, 1, 255, 109, 35, 3, 255, 102, 31, 7, 255, 92, 21, 1, 255, 85, 17, 1, 255, 66, 16, 2, 255, 51, 15, 1, 255, 59, 14, 4, 255, 59, 11, 2, 255, 62, 10, 1, 255, 57, 15, 0, 255, 53, 15, 2, 255, 53, 12, 2, 255, 54, 14, 4, 255, 49, 14, 5, 255, 39, 10, 1, 255, 39, 12, 3, 255, 43, 12, 3, 255, 47, 13, 3, 255, 51, 12, 4, 255, 56, 13, 3, 255, 50, 12, 1, 255, 50, 15, 2, 255, 54, 12, 2, 255, 60, 13, 3, 255, 57, 10, 2, 255, 51, 10, 4, 255, 48, 12, 5, 255, 10, 7, 2, 255, 11, 6, 2, 255, 12, 8, 4, 255, 14, 10, 5, 255, 12, 8, 1, 255, 18, 9, 3, 255, 20, 11, 2, 255, 20, 10, 0, 255, 26, 14, 5, 255, 27, 13, 4, 255, 27, 14, 3, 255, 34, 18, 5, 255, 33, 17, 5, 255, 23, 13, 4, 255, 22, 13, 3, 255, 22, 13, 5, 255, 23, 13, 4, 255, 24, 12, 3, 255, 21, 11, 5, 255, 23, 14, 5, 255, 25, 12, 3, 255, 26, 13, 5, 255, 24, 14, 3, 255, 21, 11, 1, 255, 24, 14, 3, 255, 23, 14, 3, 255, 26, 16, 6, 255, 27, 16, 5, 255, 21, 11, 0, 255, 21, 14, 2, 255, 24, 17, 5, 255, 19, 13, 3, 255, 30, 18, 2, 255, 38, 15, 3, 255, 35, 16, 2, 255, 29, 17, 0, 255, 35, 17, 3, 255, 36, 16, 2, 255, 31, 20, 4, 255, 33, 17, 3, 255, 42, 20, 3, 255, 44, 22, 5, 255, 40, 19, 4, 255, 46, 25, 5, 255, 53, 23, 2, 255, 50, 22, 3, 255, 49, 22, 2, 255, 46, 24, 4, 255, 58, 36, 3, 255, 69, 39, 3, 255, 71, 36, 12, 255, 72, 39, 8, 255, 68, 38, 7, 255, 71, 38, 15, 255, 72, 33, 14, 255, 68, 31, 12, 255, 67, 36, 21, 255, 71, 41, 38, 255, 81, 47, 25, 255, 77, 40, 8, 255, 71, 34, 11, 255, 70, 33, 3, 255, 64, 33, 4, 255, 57, 33, 2, 255, 55, 37, 4, 255, 59, 32, 1, 255, 64, 31, 4, 255, 63, 34, 6, 255, 62, 38, 3, 255, 61, 32, 5, 255, 71, 36, 9, 255, 73, 33, 3, 255, 70, 33, 2, 255, 69, 38, 3, 255, 70, 37, 1, 255, 71, 37, 0, 255, 71, 45, 1, 255, 77, 46, 0, 255, 80, 46, 1, 255, 80, 42, 0, 255, 85, 47, 3, 255, 85, 50, 4, 255, 88, 47, 2, 255, 83, 46, 3, 255, 84, 44, 2, 255, 90, 49, 5, 255, 87, 48, 4, 255, 87, 48, 5, 255, 76, 44, 2, 255, 72, 45, 2, 255, 76, 44, 2, 255, 77, 45, 4, 255, 78, 45, 4, 255, 75, 43, 1, 255, 79, 46, 2, 255, 83, 47, 1, 255, 85, 42, 0, 255, 83, 44, 0, 255, 78, 49, 2, 255, 87, 51, 4, 255, 88, 51, 3, 255, 83, 49, 0, 255, 89, 51, 3, 255, 88, 50, 4, 255, 94, 50, 5, 255, 100, 48, 3, 255, 98, 48, 1, 255, 90, 48, 2, 255, 86, 46, 1, 255, 88, 44, 3, 255, 81, 47, 3, 255, 74, 50, 0, 255, 78, 47, 0, 255, 83, 44, 2, 255, 81, 46, 5, 255, 84, 42, 2, 255, 82, 43, 4, 255, 78, 45, 7, 255, 76, 45, 6, 255, 77, 43, 1, 255, 81, 46, 3, 255, 75, 40, 2, 255, 82, 39, 6, 255, 77, 39, 4, 255, 73, 43, 6, 255, 73, 44, 2, 255, 85, 48, 0, 255, 96, 42, 1, 255, 99, 48, 6, 255, 90, 47, 2, 255, 94, 45, 7, 255, 108, 45, 12, 255, 103, 44, 1, 255, 99, 50, 3, 255, 80, 47, 6, 255, 66, 42, 6, 255, 92, 51, 9, 255, 100, 51, 4, 255, 80, 42, 9, 255, 79, 46, 13, 255, 83, 49, 4, 255, 78, 50, 8, 255, 79, 50, 13, 255, 83, 55, 6, 255, 86, 50, 12, 255, 82, 52, 8, 255, 75, 52, 6, 255, 88, 57, 7, 255, 105, 59, 12, 255, 107, 56, 13, 255, 90, 58, 14, 255, 76, 60, 10, 255, 80, 62, 15, 255, 74, 59, 16, 255, 74, 59, 16, 255, 95, 59, 23, 255, 108, 68, 23, 255, 113, 64, 20, 255, 117, 69, 11, 255, 113, 70, 8, 255, 94, 61, 26, 255, 79, 63, 16, 255, 84, 68, 25, 255, 80, 68, 24, 255, 84, 71, 23, 255, 93, 69, 20, 255, 101, 69, 30, 255, 107, 77, 18, 255, 89, 72, 26, 255, 77, 70, 39, 255, 85, 74, 28, 255, 91, 80, 26, 255, 94, 82, 20, 255, 95, 81, 29, 255, 96, 83, 28, 255, 97, 82, 34, 255, 105, 88, 42, 255, 101, 82, 42, 255, 98, 83, 42, 255, 103, 84, 49, 255, 110, 91, 42, 255, 109, 88, 42, 255, 117, 95, 32, 255, 104, 92, 41, 255, 92, 89, 50, 255, 104, 93, 46, 255, 116, 100, 35, 255, 114, 96, 42, 255, 109, 92, 53, 255, 111, 98, 43, 255, 113, 98, 46, 255, 110, 98, 44, 255, 111, 98, 38, 255, 111, 100, 39, 255, 109, 100, 46, 255, 111, 100, 50, 255, 115, 100, 36, 255, 117, 99, 39, 255, 113, 99, 44, 255, 112, 98, 41, 255, 116, 99, 38, 255, 118, 100, 44, 255, 118, 100, 44, 255, 115, 98, 33, 255, 117, 96, 41, 255, 116, 95, 39, 255, 115, 96, 30, 255, 114, 91, 35, 255, 116, 89, 37, 255, 118, 91, 27, 255, 118, 91, 26, 255, 118, 90, 31, 255, 119, 90, 26, 255, 118, 87, 24, 255, 116, 84, 32, 255, 116, 84, 28, 255, 118, 84, 21, 255, 116, 82, 25, 255, 112, 82, 20, 255, 111, 81, 18, 255, 110, 80, 15, 255, 111, 77, 16, 255, 110, 77, 13, 255, 109, 76, 12, 255, 108, 74, 14, 255, 107, 69, 15, 255, 112, 71, 22, 255, 108, 68, 20, 255, 108, 70, 13, 255, 111, 70, 4, 255, 108, 68, 13, 255, 109, 67, 17, 255, 113, 64, 20, 255, 111, 62, 14, 255, 108, 61, 15, 255, 109, 62, 14, 255, 108, 61, 7, 255, 113, 63, 10, 255, 110, 59, 10, 255, 111, 63, 8, 255, 115, 58, 8, 255, 109, 57, 5, 255, 108, 59, 2, 255, 110, 57, 7, 255, 107, 55, 5, 255, 103, 50, 4, 255, 105, 55, 6, 255, 101, 49, 0, 255, 101, 51, 3, 255, 100, 53, 2, 255, 103, 52, 3, 255, 102, 49, 3, 255, 108, 50, 7, 255, 107, 47, 2, 255, 109, 51, 6, 255, 105, 50, 3, 255, 97, 47, 3, 255, 99, 44, 4, 255, 97, 44, 3, 255, 94, 44, 3, 255, 96, 43, 2, 255, 96, 44, 2, 255, 95, 46, 2, 255, 97, 42, 1, 255, 97, 43, 3, 255, 90, 44, 3, 255, 94, 43, 4, 255, 93, 41, 3, 255, 88, 42, 3, 255, 85, 38, 5, 255, 86, 35, 2, 255, 85, 38, 1, 255, 80, 38, 0, 255, 81, 38, 2, 255, 86, 36, 1, 255, 84, 37, 2, 255, 82, 35, 5, 255, 84, 34, 5, 255, 85, 35, 3, 255, 83, 31, 4, 255, 86, 34, 6, 255, 93, 37, 2, 255, 107, 39, 2, 255, 108, 38, 4, 255, 96, 34, 4, 255, 71, 30, 3, 255, 62, 27, 3, 255, 70, 24, 3, 255, 72, 30, 3, 255, 71, 28, 5, 255, 61, 21, 7, 255, 56, 20, 3, 255, 54, 23, 4, 255, 52, 24, 5, 255, 63, 31, 1, 255, 67, 28, 2, 255, 62, 23, 13, 255, 57, 25, 6, 255, 53, 22, 0, 255, 61, 25, 2, 255, 65, 26, 7, 255, 59, 21, 5, 255, 60, 20, 10, 255, 51, 19, 1, 255, 63, 21, 4, 255, 59, 22, 4, 255, 53, 25, 1, 255, 61, 24, 7, 255, 50, 18, 4, 255, 50, 19, 3, 255, 59, 18, 7, 255, 54, 20, 6, 255, 65, 16, 2, 255, 84, 23, 6, 255, 92, 28, 2, 255, 90, 29, 2, 255, 87, 29, 2, 255, 90, 23, 1, 255, 88, 18, 3, 255, 90, 24, 4, 255, 99, 32, 2, 255, 103, 27, 0, 255, 107, 29, 2, 255, 121, 34, 7, 255, 125, 31, 0, 255, 121, 33, 1, 255, 125, 33, 4, 255, 133, 41, 7, 255, 126, 38, 1, 255, 121, 34, 4, 255, 110, 28, 4, 255, 107, 28, 2, 255, 114, 31, 2, 255, 113, 28, 1, 255, 107, 26, 2, 255, 112, 24, 4, 255, 112, 22, 1, 255, 106, 26, 3, 255, 98, 25, 1, 255, 101, 25, 2, 255, 105, 27, 2, 255, 104, 28, 3, 255, 108, 27, 1, 255, 113, 31, 1, 255, 117, 30, 1, 255, 112, 32, 3, 255, 100, 21, 1, 255, 105, 24, 5, 255, 109, 29, 5, 255, 112, 34, 4, 255, 114, 30, 3, 255, 113, 27, 1, 255, 114, 28, 2, 255, 117, 35, 1, 255, 113, 36, 1, 255, 110, 32, 3, 255, 112, 28, 1, 255, 125, 33, 3, 255, 124, 35, 5, 255, 123, 36, 3, 255, 123, 34, 2, 255, 114, 30, 5, 255, 102, 31, 2, 255, 97, 32, 2, 255, 105, 25, 4, 255, 112, 34, 4, 255, 97, 29, 4, 255, 80, 15, 0, 255, 96, 22, 0, 255, 95, 29, 1, 255, 85, 25, 5, 255, 98, 28, 4, 255, 109, 32, 3, 255, 108, 29, 0, 255, 108, 31, 4, 255, 96, 25, 2, 255, 76, 13, 4, 255, 71, 14, 6, 255, 76, 23, 6, 255, 58, 16, 4, 255, 52, 12, 3, 255, 52, 15, 5, 255, 65, 15, 3, 255, 67, 15, 2, 255, 56, 16, 2, 255, 53, 16, 3, 255, 50, 15, 4, 255, 46, 13, 4, 255, 40, 10, 2, 255, 47, 10, 4, 255, 50, 9, 3, 255, 49, 17, 5, 255, 45, 14, 2, 255, 50, 10, 1, 255, 54, 14, 4, 255, 48, 13, 3, 255, 48, 12, 4, 255, 51, 9, 2, 255, 46, 10, 2, 255, 46, 9, 2, 255, 14, 9, 4, 255, 14, 7, 3, 255, 9, 4, 0, 255, 13, 8, 2, 255, 15, 11, 2, 255, 18, 9, 2, 255, 20, 10, 2, 255, 23, 12, 4, 255, 27, 14, 6, 255, 26, 13, 2, 255, 26, 14, 0, 255, 28, 17, 3, 255, 26, 15, 3, 255, 25, 15, 4, 255, 27, 17, 7, 255, 24, 12, 3, 255, 26, 12, 5, 255, 23, 10, 4, 255, 19, 12, 3, 255, 20, 11, 2, 255, 25, 10, 3, 255, 24, 10, 5, 255, 19, 10, 1, 255, 23, 13, 3, 255, 28, 16, 4, 255, 26, 17, 4, 255, 23, 13, 3, 255, 26, 15, 2, 255, 27, 15, 2, 255, 29, 16, 4, 255, 24, 14, 2, 255, 25, 13, 3, 255, 37, 19, 6, 255, 34, 17, 3, 255, 34, 18, 4, 255, 32, 16, 3, 255, 33, 17, 3, 255, 34, 17, 2, 255, 32, 20, 5, 255, 30, 19, 3, 255, 35, 20, 4, 255, 40, 24, 8, 255, 42, 21, 5, 255, 53, 29, 7, 255, 55, 28, 3, 255, 47, 20, 2, 255, 51, 22, 6, 255, 54, 26, 7, 255, 54, 26, 1, 255, 64, 33, 5, 255, 71, 37, 11, 255, 82, 40, 5, 255, 77, 34, 5, 255, 75, 38, 10, 255, 71, 39, 8, 255, 72, 40, 11, 255, 68, 39, 22, 255, 77, 44, 29, 255, 83, 47, 14, 255, 65, 39, 3, 255, 59, 32, 4, 255, 58, 32, 2, 255, 57, 30, 11, 255, 64, 34, 3, 255, 69, 36, 4, 255, 58, 28, 5, 255, 56, 28, 5, 255, 62, 32, 3, 255, 66, 35, 3, 255, 64, 34, 3, 255, 63, 31, 2, 255, 69, 35, 4, 255, 69, 36, 4, 255, 65, 36, 1, 255, 73, 38, 2, 255, 78, 40, 3, 255, 76, 44, 3, 255, 75, 45, 3, 255, 78, 41, 0, 255, 84, 42, 1, 255, 82, 40, 2, 255, 86, 46, 4, 255, 82, 46, 3, 255, 75, 46, 3, 255, 75, 48, 5, 255, 76, 44, 4, 255, 74, 40, 2, 255, 71, 39, 2, 255, 70, 45, 6, 255, 70, 42, 4, 255, 74, 41, 2, 255, 75, 43, 2, 255, 77, 43, 2, 255, 78, 44, 4, 255, 77, 45, 3, 255, 77, 47, 2, 255, 80, 48, 2, 255, 84, 48, 3, 255, 85, 47, 2, 255, 79, 48, 1, 255, 81, 52, 3, 255, 81, 49, 0, 255, 89, 47, 3, 255, 87, 47, 4, 255, 80, 42, 2, 255, 89, 43, 6, 255, 87, 43, 4, 255, 81, 45, 3, 255, 81, 45, 2, 255, 82, 45, 5, 255, 77, 44, 6, 255, 82, 45, 1, 255, 89, 43, 1, 255, 88, 39, 5, 255, 82, 39, 6, 255, 84, 41, 2, 255, 75, 43, 2, 255, 71, 40, 2, 255, 79, 41, 3, 255, 79, 43, 2, 255, 76, 43, 5, 255, 74, 39, 5, 255, 78, 40, 6, 255, 73, 42, 2, 255, 75, 43, 3, 255, 88, 40, 4, 255, 104, 43, 5, 255, 105, 47, 3, 255, 90, 43, 4, 255, 70, 38, 7, 255, 74, 37, 4, 255, 87, 44, 4, 255, 78, 45, 5, 255, 71, 44, 4, 255, 70, 40, 6, 255, 71, 44, 8, 255, 69, 44, 8, 255, 82, 46, 6, 255, 90, 50, 4, 255, 93, 53, 6, 255, 100, 53, 12, 255, 95, 54, 8, 255, 83, 51, 6, 255, 74, 49, 14, 255, 77, 52, 17, 255, 75, 50, 11, 255, 74, 53, 8, 255, 82, 57, 19, 255, 98, 58, 14, 255, 105, 62, 7, 255, 102, 64, 16, 255, 97, 63, 18, 255, 82, 56, 7, 255, 70, 55, 13, 255, 68, 57, 18, 255, 100, 63, 16, 255, 117, 72, 9, 255, 117, 64, 18, 255, 101, 62, 22, 255, 95, 64, 20, 255, 86, 59, 18, 255, 82, 66, 25, 255, 87, 67, 34, 255, 86, 69, 19, 255, 95, 74, 25, 255, 96, 73, 26, 255, 87, 74, 26, 255, 82, 71, 33, 255, 88, 74, 20, 255, 81, 75, 32, 255, 85, 78, 27, 255, 90, 77, 30, 255, 95, 73, 39, 255, 91, 76, 30, 255, 93, 84, 31, 255, 96, 81, 38, 255, 107, 87, 41, 255, 112, 87, 43, 255, 109, 88, 38, 255, 91, 82, 45, 255, 99, 85, 48, 255, 112, 89, 44, 255, 119, 99, 36, 255, 112, 99, 38, 255, 96, 91, 40, 255, 101, 95, 46, 255, 114, 101, 46, 255, 106, 95, 47, 255, 102, 95, 44, 255, 104, 98, 49, 255, 102, 98, 44, 255, 105, 102, 50, 255, 109, 99, 50, 255, 110, 98, 46, 255, 107, 103, 36, 255, 107, 101, 49, 255, 113, 101, 40, 255, 114, 100, 45, 255, 114, 99, 47, 255, 115, 99, 44, 255, 120, 103, 36, 255, 121, 98, 43, 255, 119, 98, 40, 255, 117, 97, 34, 255, 115, 95, 41, 255, 116, 97, 32, 255, 114, 95, 25, 255, 118, 92, 44, 255, 120, 93, 42, 255, 119, 90, 42, 255, 117, 89, 34, 255, 117, 88, 27, 255, 120, 87, 37, 255, 118, 86, 29, 255, 115, 85, 18, 255, 115, 84, 26, 255, 116, 82, 31, 255, 115, 83, 23, 255, 110, 82, 17, 255, 110, 79, 21, 255, 111, 80, 24, 255, 108, 76, 20, 255, 107, 75, 14, 255, 110, 76, 24, 255, 106, 71, 23, 255, 103, 67, 19, 255, 108, 71, 8, 255, 113, 68, 20, 255, 119, 70, 19, 255, 117, 69, 9, 255, 111, 66, 12, 255, 115, 70, 10, 255, 110, 64, 10, 255, 111, 65, 9, 255, 108, 62, 12, 255, 109, 62, 9, 255, 109, 60, 7, 255, 111, 62, 9, 255, 110, 58, 9, 255, 113, 60, 10, 255, 113, 60, 8, 255, 110, 58, 1, 255, 112, 60, 9, 255, 106, 54, 3, 255, 107, 55, 3, 255, 110, 54, 10, 255, 102, 54, 4, 255, 108, 53, 3, 255, 106, 50, 4, 255, 100, 52, 4, 255, 98, 48, 3, 255, 96, 52, 3, 255, 105, 50, 6, 255, 113, 46, 6, 255, 110, 45, 5, 255, 103, 49, 6, 255, 95, 45, 2, 255, 102, 45, 3, 255, 98, 46, 2, 255, 93, 47, 3, 255, 93, 43, 2, 255, 93, 44, 4, 255, 93, 45, 3, 255, 94, 43, 1, 255, 93, 44, 4, 255, 88, 44, 3, 255, 87, 39, 0, 255, 87, 40, 1, 255, 85, 43, 1, 255, 88, 41, 3, 255, 83, 36, 5, 255, 83, 37, 2, 255, 87, 38, 3, 255, 86, 38, 6, 255, 84, 38, 2, 255, 84, 38, 2, 255, 81, 35, 7, 255, 81, 37, 4, 255, 82, 36, 2, 255, 79, 26, 6, 255, 87, 34, 10, 255, 95, 41, 3, 255, 103, 35, 2, 255, 103, 34, 1, 255, 98, 34, 4, 255, 74, 33, 1, 255, 80, 38, 7, 255, 96, 31, 5, 255, 83, 37, 1, 255, 69, 30, 5, 255, 67, 25, 6, 255, 72, 27, 5, 255, 68, 26, 5, 255, 66, 26, 3, 255, 80, 32, 4, 255, 84, 31, 4, 255, 70, 22, 2, 255, 60, 25, 3, 255, 65, 27, 2, 255, 86, 30, 2, 255, 92, 33, 3, 255, 69, 25, 4, 255, 58, 24, 1, 255, 52, 23, 1, 255, 60, 21, 4, 255, 58, 23, 4, 255, 53, 22, 1, 255, 53, 26, 4, 255, 43, 19, 8, 255, 49, 19, 4, 255, 60, 20, 6, 255, 45, 21, 5, 255, 49, 24, 4, 255, 58, 21, 4, 255, 66, 21, 3, 255, 75, 26, 0, 255, 71, 23, 5, 255, 63, 15, 6, 255, 56, 17, 3, 255, 58, 22, 5, 255, 68, 25, 2, 255, 73, 16, 3, 255, 79, 21, 6, 255, 86, 27, 1, 255, 99, 29, 1, 255, 103, 31, 3, 255, 99, 27, 6, 255, 104, 25, 3, 255, 95, 26, 1, 255, 95, 31, 3, 255, 97, 28, 3, 255, 88, 22, 1, 255, 93, 26, 4, 255, 88, 21, 3, 255, 87, 21, 2, 255, 93, 22, 1, 255, 101, 22, 1, 255, 101, 24, 2, 255, 91, 24, 3, 255, 85, 22, 3, 255, 85, 24, 3, 255, 87, 23, 3, 255, 85, 21, 2, 255, 104, 23, 6, 255, 101, 28, 2, 255, 100, 30, 1, 255, 94, 27, 1, 255, 99, 22, 3, 255, 98, 28, 6, 255, 100, 29, 2, 255, 107, 28, 0, 255, 104, 30, 3, 255, 110, 29, 7, 255, 106, 28, 0, 255, 108, 33, 1, 255, 110, 33, 4, 255, 111, 27, 2, 255, 125, 33, 4, 255, 122, 32, 1, 255, 118, 36, 4, 255, 122, 32, 3, 255, 118, 34, 2, 255, 114, 34, 2, 255, 108, 34, 3, 255, 104, 31, 0, 255, 112, 33, 3, 255, 114, 36, 5, 255, 92, 25, 1, 255, 79, 19, 2, 255, 87, 19, 4, 255, 97, 26, 1, 255, 96, 26, 1, 255, 93, 22, 1, 255, 97, 30, 2, 255, 102, 29, 0, 255, 101, 28, 2, 255, 78, 22, 1, 255, 76, 17, 2, 255, 85, 19, 5, 255, 81, 25, 6, 255, 66, 16, 0, 255, 56, 14, 1, 255, 63, 15, 4, 255, 67, 14, 3, 255, 69, 16, 3, 255, 64, 12, 3, 255, 58, 12, 2, 255, 49, 14, 1, 255, 46, 18, 5, 255, 41, 11, 5, 255, 40, 10, 4, 255, 41, 12, 1, 255, 42, 9, 1, 255, 48, 12, 4, 255, 47, 14, 5, 255, 44, 12, 3, 255, 43, 11, 2, 255, 49, 12, 2, 255, 46, 14, 4, 255, 51, 14, 3, 255, 12, 9, 2, 255, 12, 8, 1, 255, 13, 7, 1, 255, 15, 9, 3, 255, 17, 10, 2, 255, 17, 11, 3, 255, 21, 10, 2, 255, 25, 10, 2, 255, 28, 14, 6, 255, 30, 14, 4, 255, 34, 19, 5, 255, 29, 15, 2, 255, 29, 13, 3, 255, 24, 13, 3, 255, 22, 12, 4, 255, 18, 8, 0, 255, 20, 9, 1, 255, 23, 12, 3, 255, 23, 15, 4, 255, 19, 11, 1, 255, 19, 9, 0, 255, 18, 10, 1, 255, 20, 12, 2, 255, 27, 12, 4, 255, 25, 12, 1, 255, 20, 11, 1, 255, 21, 11, 1, 255, 25, 15, 5, 255, 26, 16, 4, 255, 28, 16, 5, 255, 27, 13, 4, 255, 29, 13, 5, 255, 33, 13, 4, 255, 31, 13, 3, 255, 34, 16, 5, 255, 35, 18, 6, 255, 33, 15, 1, 255, 36, 19, 2, 255, 36, 17, 3, 255, 34, 15, 1, 255, 38, 20, 5, 255, 37, 18, 4, 255, 40, 21, 6, 255, 45, 23, 4, 255, 46, 25, 2, 255, 41, 22, 4, 255, 44, 25, 3, 255, 44, 27, 3, 255, 52, 26, 3, 255, 61, 28, 5, 255, 59, 33, 6, 255, 67, 36, 6, 255, 73, 41, 5, 255, 75, 38, 2, 255, 72, 34, 5, 255, 73, 42, 18, 255, 80, 48, 22, 255, 85, 48, 18, 255, 77, 44, 9, 255, 66, 37, 5, 255, 51, 33, 2, 255, 58, 31, 9, 255, 64, 27, 4, 255, 61, 25, 1, 255, 66, 27, 2, 255, 64, 32, 3, 255, 60, 31, 1, 255, 67, 32, 4, 255, 68, 31, 1, 255, 66, 34, 0, 255, 66, 35, 1, 255, 72, 36, 2, 255, 74, 38, 4, 255, 72, 38, 4, 255, 76, 42, 5, 255, 73, 40, 2, 255, 68, 40, 3, 255, 72, 43, 7, 255, 74, 41, 1, 255, 81, 45, 1, 255, 81, 43, 4, 255, 78, 40, 3, 255, 78, 46, 1, 255, 72, 43, 6, 255, 68, 40, 6, 255, 63, 38, 1, 255, 64, 39, 1, 255, 69, 39, 3, 255, 70, 38, 3, 255, 76, 43, 6, 255, 80, 44, 3, 255, 77, 43, 0, 255, 77, 40, 0, 255, 83, 44, 5, 255, 78, 44, 4, 255, 74, 49, 2, 255, 81, 45, 2, 255, 84, 44, 5, 255, 83, 42, 3, 255, 82, 42, 3, 255, 81, 45, 6, 255, 76, 42, 3, 255, 79, 41, 1, 255, 82, 46, 3, 255, 78, 40, 2, 255, 83, 43, 5, 255, 84, 42, 5, 255, 85, 39, 0, 255, 76, 45, 1, 255, 71, 43, 3, 255, 82, 39, 6, 255, 92, 41, 3, 255, 100, 40, 1, 255, 92, 43, 4, 255, 80, 42, 0, 255, 81, 43, 2, 255, 76, 42, 3, 255, 75, 39, 4, 255, 79, 39, 3, 255, 78, 42, 4, 255, 73, 40, 2, 255, 75, 39, 5, 255, 73, 39, 4, 255, 69, 37, 0, 255, 75, 41, 3, 255, 85, 40, 6, 255, 85, 37, 6, 255, 76, 40, 4, 255, 72, 39, 4, 255, 67, 37, 7, 255, 71, 40, 5, 255, 76, 43, 1, 255, 72, 44, 7, 255, 63, 40, 12, 255, 73, 41, 11, 255, 69, 45, 7, 255, 71, 48, 6, 255, 101, 50, 7, 255, 112, 49, 9, 255, 105, 52, 6, 255, 103, 52, 5, 255, 98, 52, 19, 255, 84, 49, 11, 255, 73, 50, 3, 255, 73, 52, 11, 255, 74, 52, 18, 255, 75, 55, 14, 255, 68, 49, 9, 255, 72, 50, 16, 255, 89, 59, 25, 255, 99, 64, 6, 255, 92, 56, 10, 255, 79, 51, 26, 255, 77, 57, 18, 255, 72, 58, 12, 255, 73, 58, 17, 255, 87, 59, 23, 255, 85, 62, 15, 255, 79, 60, 27, 255, 79, 60, 30, 255, 90, 69, 28, 255, 103, 69, 9, 255, 96, 66, 28, 255, 109, 76, 14, 255, 112, 74, 18, 255, 97, 70, 26, 255, 74, 69, 21, 255, 82, 71, 37, 255, 105, 79, 33, 255, 97, 79, 26, 255, 107, 82, 31, 255, 106, 80, 35, 255, 98, 82, 29, 255, 99, 86, 31, 255, 96, 82, 38, 255, 94, 80, 40, 255, 110, 90, 36, 255, 108, 93, 45, 255, 96, 85, 43, 255, 94, 85, 42, 255, 95, 87, 45, 255, 91, 89, 46, 255, 93, 92, 53, 255, 99, 93, 48, 255, 93, 88, 53, 255, 93, 89, 52, 255, 115, 100, 48, 255, 116, 99, 50, 255, 104, 96, 40, 255, 106, 100, 48, 255, 108, 101, 44, 255, 106, 102, 42, 255, 107, 99, 49, 255, 110, 101, 43, 255, 112, 102, 40, 255, 104, 97, 43, 255, 106, 100, 48, 255, 109, 100, 46, 255, 120, 101, 35, 255, 123, 102, 34, 255, 122, 102, 34, 255, 124, 98, 31, 255, 121, 100, 38, 255, 118, 97, 49, 255, 117, 93, 49, 255, 115, 94, 40, 255, 115, 93, 43, 255, 117, 93, 38, 255, 116, 91, 23, 255, 121, 91, 36, 255, 119, 90, 34, 255, 117, 87, 30, 255, 117, 85, 31, 255, 118, 88, 26, 255, 115, 86, 19, 255, 113, 84, 23, 255, 113, 81, 28, 255, 113, 80, 20, 255, 111, 77, 29, 255, 110, 78, 26, 255, 108, 78, 12, 255, 108, 76, 18, 255, 109, 76, 15, 255, 110, 73, 21, 255, 105, 71, 18, 255, 108, 74, 10, 255, 110, 72, 16, 255, 106, 66, 11, 255, 108, 68, 13, 255, 108, 70, 14, 255, 108, 68, 11, 255, 109, 65, 16, 255, 113, 69, 6, 255, 111, 65, 8, 255, 109, 61, 8, 255, 110, 60, 11, 255, 110, 60, 13, 255, 109, 62, 7, 255, 114, 60, 0, 255, 114, 58, 7, 255, 109, 58, 11, 255, 108, 59, 6, 255, 111, 57, 7, 255, 110, 54, 8, 255, 109, 54, 5, 255, 108, 49, 9, 255, 105, 53, 7, 255, 106, 50, 2, 255, 111, 50, 6, 255, 103, 50, 3, 255, 100, 47, 4, 255, 101, 49, 5, 255, 100, 47, 3, 255, 103, 48, 4, 255, 100, 46, 3, 255, 96, 46, 1, 255, 90, 46, 4, 255, 96, 46, 7, 255, 95, 46, 5, 255, 91, 44, 3, 255, 94, 44, 4, 255, 86, 42, 1, 255, 93, 43, 3, 255, 96, 43, 3, 255, 90, 46, 5, 255, 86, 41, 2, 255, 86, 38, 2, 255, 90, 41, 5, 255, 91, 39, 3, 255, 93, 39, 2, 255, 86, 37, 7, 255, 81, 37, 3, 255, 82, 38, 4, 255, 81, 34, 4, 255, 86, 38, 4, 255, 86, 39, 6, 255, 80, 35, 3, 255, 77, 33, 2, 255, 80, 34, 4, 255, 78, 31, 6, 255, 80, 33, 2, 255, 83, 34, 1, 255, 84, 30, 3, 255, 78, 30, 1, 255, 79, 33, 5, 255, 73, 31, 2, 255, 92, 37, 4, 255, 113, 37, 4, 255, 113, 35, 2, 255, 105, 37, 3, 255, 103, 34, 2, 255, 111, 36, 4, 255, 109, 32, 3, 255, 80, 26, 1, 255, 68, 22, 0, 255, 71, 25, 4, 255, 64, 25, 4, 255, 59, 26, 2, 255, 66, 24, 0, 255, 74, 24, 0, 255, 74, 28, 2, 255, 75, 27, 4, 255, 70, 21, 1, 255, 69, 25, 6, 255, 69, 23, 5, 255, 65, 24, 4, 255, 66, 25, 4, 255, 61, 27, 2, 255, 64, 28, 7, 255, 62, 20, 1, 255, 47, 20, 1, 255, 58, 18, 1, 255, 55, 24, 4, 255, 53, 20, 5, 255, 57, 19, 2, 255, 64, 16, 3, 255, 52, 18, 8, 255, 41, 20, 5, 255, 52, 21, 2, 255, 62, 22, 5, 255, 51, 23, 1, 255, 52, 19, 5, 255, 42, 19, 4, 255, 52, 23, 4, 255, 77, 22, 5, 255, 70, 20, 3, 255, 63, 21, 1, 255, 81, 25, 4, 255, 69, 20, 9, 255, 70, 21, 3, 255, 90, 25, 0, 255, 76, 17, 2, 255, 69, 18, 1, 255, 67, 20, 0, 255, 70, 18, 4, 255, 73, 17, 5, 255, 73, 16, 3, 255, 75, 19, 2, 255, 78, 23, 4, 255, 73, 21, 2, 255, 74, 19, 3, 255, 74, 19, 5, 255, 66, 17, 4, 255, 75, 16, 4, 255, 83, 22, 3, 255, 85, 26, 3, 255, 79, 26, 0, 255, 91, 21, 0, 255, 88, 27, 4, 255, 82, 20, 1, 255, 91, 21, 3, 255, 93, 21, 1, 255, 95, 27, 4, 255, 94, 25, 0, 255, 97, 25, 1, 255, 102, 26, 3, 255, 106, 26, 3, 255, 113, 29, 4, 255, 117, 31, 2, 255, 118, 33, 3, 255, 121, 30, 1, 255, 120, 35, 1, 255, 116, 35, 1, 255, 110, 31, 0, 255, 109, 33, 2, 255, 105, 33, 3, 255, 111, 34, 2, 255, 105, 29, 1, 255, 91, 24, 6, 255, 78, 19, 3, 255, 81, 23, 0, 255, 93, 22, 0, 255, 97, 27, 5, 255, 90, 27, 2, 255, 98, 25, 2, 255, 97, 21, 1, 255, 92, 28, 7, 255, 81, 21, 3, 255, 75, 17, 1, 255, 87, 20, 7, 255, 82, 18, 3, 255, 76, 20, 4, 255, 59, 15, 0, 255, 52, 13, 0, 255, 61, 16, 1, 255, 70, 16, 3, 255, 67, 17, 4, 255, 54, 14, 2, 255, 50, 13, 3, 255, 43, 11, 4, 255, 38, 10, 2, 255, 43, 14, 4, 255, 41, 12, 1, 255, 40, 11, 1, 255, 43, 12, 3, 255, 44, 12, 2, 255, 47, 12, 3, 255, 48, 10, 1, 255, 47, 15, 4, 255, 48, 13, 2, 255, 9, 6, 1, 255, 11, 7, 1, 255, 15, 9, 3, 255, 18, 9, 4, 255, 16, 7, 1, 255, 14, 9, 1, 255, 24, 16, 5, 255, 22, 11, 1, 255, 27, 15, 6, 255, 28, 13, 4, 255, 32, 16, 4, 255, 32, 16, 5, 255, 29, 11, 3, 255, 23, 11, 3, 255, 21, 12, 3, 255, 19, 10, 1, 255, 21, 11, 2, 255, 24, 14, 4, 255, 22, 14, 3, 255, 23, 14, 5, 255, 20, 11, 2, 255, 17, 10, 0, 255, 22, 12, 3, 255, 32, 12, 6, 255, 30, 13, 5, 255, 23, 13, 2, 255, 29, 15, 6, 255, 30, 19, 9, 255, 23, 15, 3, 255, 25, 14, 4, 255, 29, 15, 6, 255, 28, 12, 3, 255, 31, 14, 3, 255, 30, 13, 3, 255, 30, 13, 4, 255, 32, 15, 3, 255, 34, 18, 4, 255, 35, 18, 4, 255, 31, 18, 2, 255, 36, 21, 5, 255, 32, 16, 1, 255, 32, 18, 3, 255, 35, 22, 6, 255, 34, 20, 1, 255, 37, 20, 1, 255, 44, 22, 6, 255, 49, 23, 2, 255, 49, 28, 0, 255, 56, 28, 3, 255, 65, 25, 7, 255, 65, 29, 1, 255, 54, 31, 3, 255, 59, 37, 6, 255, 64, 35, 3, 255, 68, 36, 14, 255, 70, 44, 23, 255, 74, 49, 23, 255, 79, 48, 13, 255, 74, 38, 6, 255, 66, 35, 9, 255, 58, 34, 4, 255, 59, 32, 4, 255, 62, 30, 1, 255, 60, 28, 7, 255, 56, 28, 1, 255, 64, 32, 0, 255, 67, 34, 2, 255, 62, 30, 5, 255, 63, 32, 11, 255, 62, 32, 4, 255, 69, 39, 1, 255, 72, 40, 1, 255, 70, 38, 1, 255, 71, 40, 2, 255, 69, 39, 2, 255, 69, 39, 2, 255, 72, 40, 3, 255, 74, 41, 3, 255, 71, 40, 1, 255, 81, 43, 3, 255, 81, 40, 2, 255, 74, 38, 2, 255, 78, 43, 5, 255, 72, 37, 2, 255, 69, 36, 1, 255, 68, 38, 1, 255, 73, 42, 3, 255, 72, 39, 1, 255, 74, 38, 0, 255, 72, 42, 1, 255, 76, 47, 5, 255, 83, 46, 4, 255, 79, 40, 2, 255, 76, 40, 3, 255, 73, 40, 3, 255, 72, 39, 1, 255, 72, 43, 3, 255, 74, 38, 1, 255, 74, 36, 0, 255, 77, 39, 3, 255, 76, 38, 2, 255, 82, 37, 4, 255, 89, 40, 3, 255, 91, 40, 4, 255, 102, 37, 6, 255, 86, 39, 3, 255, 74, 43, 3, 255, 79, 40, 3, 255, 75, 45, 5, 255, 73, 39, 2, 255, 83, 37, 3, 255, 98, 41, 5, 255, 93, 40, 1, 255, 98, 42, 4, 255, 95, 38, 0, 255, 77, 42, 3, 255, 72, 41, 3, 255, 79, 40, 7, 255, 78, 37, 5, 255, 71, 39, 4, 255, 69, 38, 3, 255, 72, 40, 2, 255, 73, 39, 0, 255, 77, 37, 4, 255, 66, 34, 4, 255, 63, 38, 8, 255, 71, 41, 10, 255, 69, 39, 2, 255, 72, 40, 1, 255, 74, 39, 5, 255, 76, 42, 2, 255, 73, 45, 1, 255, 71, 46, 2, 255, 65, 41, 3, 255, 68, 46, 3, 255, 62, 44, 8, 255, 82, 47, 11, 255, 106, 48, 5, 255, 107, 51, 5, 255, 108, 57, 10, 255, 110, 57, 9, 255, 97, 53, 6, 255, 82, 52, 7, 255, 81, 55, 13, 255, 95, 61, 6, 255, 101, 59, 6, 255, 84, 49, 18, 255, 75, 52, 17, 255, 80, 56, 10, 255, 82, 61, 13, 255, 73, 59, 13, 255, 74, 59, 15, 255, 72, 58, 20, 255, 71, 61, 17, 255, 72, 65, 15, 255, 72, 60, 23, 255, 71, 55, 15, 255, 76, 65, 16, 255, 87, 67, 27, 255, 80, 66, 27, 255, 106, 74, 17, 255, 116, 72, 21, 255, 113, 75, 21, 255, 109, 75, 13, 255, 86, 68, 28, 255, 80, 72, 30, 255, 83, 69, 40, 255, 86, 68, 36, 255, 98, 78, 25, 255, 92, 75, 29, 255, 107, 80, 34, 255, 102, 81, 33, 255, 98, 85, 36, 255, 105, 81, 38, 255, 97, 80, 40, 255, 92, 84, 42, 255, 88, 81, 38, 255, 90, 84, 43, 255, 92, 89, 38, 255, 99, 88, 49, 255, 93, 91, 47, 255, 90, 91, 43, 255, 102, 93, 52, 255, 104, 97, 49, 255, 94, 92, 52, 255, 92, 93, 55, 255, 105, 97, 45, 255, 119, 101, 47, 255, 116, 104, 45, 255, 114, 101, 48, 255, 118, 97, 53, 255, 122, 101, 44, 255, 116, 101, 47, 255, 109, 104, 46, 255, 116, 108, 47, 255, 112, 98, 46, 255, 109, 99, 48, 255, 106, 103, 43, 255, 116, 104, 39, 255, 125, 104, 37, 255, 126, 102, 38, 255, 121, 102, 39, 255, 122, 98, 46, 255, 122, 100, 26, 255, 115, 95, 40, 255, 116, 96, 37, 255, 115, 93, 41, 255, 115, 94, 28, 255, 117, 93, 27, 255, 119, 93, 24, 255, 117, 88, 27, 255, 117, 88, 34, 255, 115, 85, 26, 255, 117, 88, 23, 255, 114, 86, 22, 255, 110, 82, 21, 255, 114, 84, 26, 255, 114, 79, 26, 255, 112, 77, 26, 255, 108, 78, 17, 255, 109, 79, 18, 255, 109, 78, 15, 255, 108, 73, 20, 255, 108, 72, 15, 255, 106, 75, 13, 255, 108, 71, 12, 255, 110, 71, 8, 255, 110, 70, 10, 255, 104, 66, 12, 255, 107, 66, 12, 255, 106, 64, 10, 255, 108, 64, 19, 255, 109, 62, 4, 255, 109, 62, 9, 255, 109, 63, 7, 255, 110, 61, 8, 255, 110, 60, 5, 255, 108, 60, 7, 255, 114, 61, 1, 255, 114, 58, 10, 255, 110, 58, 10, 255, 107, 57, 7, 255, 108, 53, 5, 255, 107, 54, 8, 255, 103, 54, 6, 255, 104, 51, 10, 255, 102, 54, 8, 255, 99, 51, 1, 255, 107, 51, 4, 255, 99, 48, 0, 255, 100, 50, 5, 255, 102, 49, 5, 255, 100, 48, 5, 255, 96, 47, 3, 255, 94, 42, 2, 255, 101, 45, 7, 255, 89, 43, 4, 255, 91, 47, 5, 255, 93, 47, 6, 255, 93, 44, 3, 255, 96, 43, 3, 255, 99, 48, 6, 255, 107, 42, 5, 255, 107, 43, 7, 255, 96, 48, 6, 255, 92, 44, 3, 255, 90, 43, 3, 255, 98, 44, 5, 255, 103, 39, 3, 255, 98, 39, 1, 255, 89, 37, 4, 255, 82, 36, 2, 255, 81, 35, 1, 255, 84, 33, 3, 255, 92, 39, 5, 255, 85, 31, 3, 255, 84, 34, 1, 255, 83, 34, 3, 255, 84, 33, 9, 255, 84, 35, 5, 255, 82, 35, 1, 255, 78, 31, 4, 255, 74, 26, 6, 255, 74, 29, 1, 255, 80, 34, 2, 255, 79, 32, 2, 255, 82, 32, 1, 255, 92, 37, 2, 255, 102, 35, 7, 255, 106, 34, 2, 255, 103, 35, 3, 255, 100, 35, 4, 255, 91, 31, 0, 255, 76, 27, 5, 255, 70, 30, 4, 255, 77, 31, 2, 255, 75, 30, 4, 255, 67, 29, 2, 255, 68, 27, 3, 255, 69, 23, 7, 255, 63, 20, 6, 255, 69, 26, 1, 255, 68, 26, 1, 255, 60, 25, 1, 255, 60, 26, 3, 255, 58, 25, 1, 255, 61, 23, 2, 255, 65, 24, 2, 255, 67, 26, 2, 255, 62, 25, 0, 255, 61, 23, 5, 255, 56, 22, 2, 255, 55, 20, 2, 255, 56, 20, 8, 255, 58, 22, 2, 255, 59, 21, 3, 255, 53, 23, 4, 255, 55, 25, 2, 255, 75, 23, 0, 255, 77, 25, 3, 255, 80, 29, 8, 255, 66, 21, 5, 255, 49, 19, 3, 255, 51, 24, 4, 255, 63, 21, 3, 255, 55, 16, 0, 255, 53, 21, 1, 255, 69, 23, 2, 255, 62, 21, 2, 255, 65, 23, 4, 255, 77, 22, 6, 255, 69, 19, 1, 255, 69, 22, 0, 255, 72, 20, 3, 255, 68, 20, 4, 255, 65, 21, 3, 255, 62, 17, 0, 255, 65, 19, 0, 255, 66, 19, 1, 255, 68, 22, 3, 255, 71, 21, 0, 255, 69, 22, 0, 255, 66, 24, 1, 255, 67, 20, 1, 255, 70, 18, 1, 255, 76, 22, 4, 255, 82, 22, 7, 255, 70, 14, 4, 255, 55, 17, 6, 255, 53, 11, 4, 255, 53, 15, 3, 255, 61, 17, 5, 255, 72, 14, 4, 255, 79, 17, 1, 255, 94, 25, 2, 255, 98, 22, 1, 255, 99, 22, 3, 255, 93, 21, 3, 255, 94, 25, 2, 255, 106, 24, 4, 255, 101, 25, 1, 255, 111, 34, 4, 255, 114, 30, 4, 255, 102, 28, 3, 255, 109, 25, 3, 255, 109, 31, 3, 255, 104, 32, 2, 255, 108, 29, 4, 255, 104, 28, 5, 255, 82, 22, 1, 255, 71, 16, 2, 255, 83, 23, 4, 255, 97, 25, 5, 255, 98, 24, 1, 255, 100, 25, 1, 255, 95, 26, 1, 255, 95, 28, 2, 255, 94, 26, 1, 255, 84, 23, 1, 255, 65, 15, 1, 255, 63, 17, 0, 255, 80, 16, 1, 255, 73, 18, 3, 255, 69, 16, 7, 255, 54, 11, 1, 255, 47, 15, 2, 255, 56, 19, 5, 255, 67, 14, 4, 255, 67, 14, 3, 255, 63, 13, 1, 255, 54, 12, 2, 255, 48, 13, 3, 255, 46, 15, 4, 255, 43, 15, 4, 255, 44, 15, 4, 255, 43, 11, 1, 255, 45, 10, 1, 255, 45, 10, 2, 255, 43, 14, 5, 255, 45, 12, 4, 255, 16, 10, 3, 255, 13, 9, 2, 255, 14, 8, 2, 255, 21, 10, 6, 255, 19, 8, 2, 255, 15, 10, 2, 255, 24, 16, 5, 255, 26, 13, 3, 255, 26, 13, 4, 255, 24, 12, 2, 255, 25, 15, 3, 255, 23, 13, 3, 255, 21, 12, 2, 255, 22, 9, 4, 255, 18, 10, 2, 255, 22, 14, 4, 255, 22, 13, 4, 255, 20, 10, 1, 255, 18, 10, 0, 255, 22, 12, 3, 255, 21, 11, 2, 255, 21, 13, 3, 255, 24, 13, 4, 255, 33, 11, 5, 255, 30, 12, 4, 255, 28, 14, 3, 255, 31, 14, 4, 255, 28, 15, 3, 255, 24, 13, 1, 255, 25, 16, 4, 255, 27, 16, 4, 255, 31, 17, 5, 255, 31, 17, 3, 255, 29, 15, 1, 255, 29, 15, 2, 255, 29, 15, 4, 255, 30, 17, 5, 255, 28, 16, 3, 255, 34, 19, 4, 255, 32, 19, 2, 255, 27, 19, 4, 255, 28, 15, 2, 255, 36, 16, 2, 255, 39, 19, 4, 255, 36, 20, 7, 255, 32, 22, 8, 255, 47, 22, 3, 255, 54, 23, 5, 255, 54, 24, 4, 255, 57, 24, 1, 255, 61, 27, 2, 255, 55, 25, 4, 255, 60, 30, 8, 255, 58, 32, 4, 255, 63, 36, 6, 255, 72, 38, 15, 255, 70, 40, 18, 255, 65, 41, 20, 255, 63, 39, 12, 255, 59, 37, 5, 255, 65, 35, 5, 255, 60, 31, 0, 255, 53, 28, 2, 255, 54, 29, 4, 255, 65, 30, 3, 255, 59, 27, 1, 255, 60, 32, 3, 255, 59, 33, 1, 255, 64, 35, 4, 255, 68, 35, 3, 255, 70, 36, 1, 255, 76, 42, 5, 255, 73, 39, 2, 255, 70, 36, 0, 255, 65, 33, 0, 255, 72, 34, 2, 255, 77, 35, 2, 255, 76, 41, 0, 255, 78, 40, 5, 255, 77, 43, 7, 255, 74, 38, 2, 255, 78, 37, 2, 255, 68, 32, 3, 255, 67, 34, 4, 255, 67, 35, 1, 255, 75, 42, 5, 255, 75, 40, 4, 255, 70, 36, 1, 255, 68, 39, 1, 255, 67, 40, 2, 255, 69, 37, 2, 255, 71, 36, 1, 255, 74, 38, 3, 255, 67, 34, 1, 255, 66, 35, 3, 255, 65, 37, 4, 255, 73, 37, 3, 255, 70, 37, 3, 255, 69, 39, 1, 255, 70, 41, 2, 255, 73, 38, 1, 255, 81, 38, 3, 255, 97, 49, 6, 255, 105, 58, 12, 255, 85, 33, 1, 255, 73, 37, 4, 255, 67, 42, 6, 255, 76, 38, 2, 255, 71, 41, 2, 255, 71, 37, 4, 255, 79, 39, 4, 255, 79, 36, 3, 255, 74, 36, 2, 255, 76, 39, 3, 255, 78, 35, 2, 255, 70, 37, 1, 255, 68, 39, 1, 255, 71, 36, 2, 255, 74, 37, 4, 255, 67, 37, 3, 255, 63, 34, 1, 255, 74, 42, 6, 255, 75, 41, 5, 255, 72, 39, 2, 255, 67, 36, 3, 255, 71, 35, 5, 255, 77, 37, 5, 255, 71, 38, 1, 255, 70, 37, 1, 255, 70, 36, 6, 255, 71, 41, 9, 255, 69, 42, 5, 255, 69, 43, 5, 255, 67, 43, 3, 255, 64, 45, 6, 255, 66, 44, 7, 255, 73, 41, 12, 255, 101, 53, 11, 255, 106, 54, 9, 255, 104, 55, 10, 255, 110, 51, 8, 255, 89, 49, 11, 255, 89, 52, 6, 255, 110, 61, 11, 255, 106, 54, 10, 255, 83, 51, 8, 255, 75, 52, 15, 255, 76, 53, 13, 255, 80, 59, 14, 255, 77, 58, 5, 255, 72, 50, 18, 255, 80, 58, 28, 255, 79, 62, 13, 255, 74, 61, 13, 255, 73, 63, 8, 255, 75, 64, 17, 255, 79, 66, 13, 255, 88, 63, 22, 255, 74, 60, 31, 255, 71, 68, 30, 255, 107, 72, 24, 255, 120, 71, 38, 255, 125, 67, 29, 255, 116, 76, 23, 255, 89, 73, 24, 255, 95, 75, 23, 255, 96, 71, 37, 255, 76, 70, 33, 255, 82, 79, 25, 255, 80, 72, 38, 255, 78, 76, 39, 255, 77, 80, 25, 255, 100, 80, 40, 255, 113, 86, 43, 255, 112, 90, 50, 255, 110, 90, 43, 255, 95, 85, 48, 255, 92, 84, 50, 255, 91, 90, 44, 255, 90, 90, 51, 255, 89, 90, 43, 255, 100, 92, 45, 255, 114, 94, 44, 255, 117, 96, 46, 255, 108, 101, 45, 255, 96, 96, 51, 255, 98, 97, 49, 255, 111, 98, 57, 255, 113, 100, 50, 255, 119, 103, 61, 255, 122, 102, 63, 255, 121, 104, 39, 255, 123, 108, 37, 255, 116, 103, 52, 255, 120, 106, 45, 255, 117, 102, 46, 255, 107, 99, 48, 255, 106, 102, 45, 255, 111, 101, 46, 255, 114, 97, 60, 255, 115, 99, 47, 255, 117, 100, 34, 255, 117, 99, 29, 255, 120, 98, 37, 255, 118, 99, 31, 255, 117, 99, 36, 255, 115, 96, 29, 255, 112, 94, 19, 255, 115, 92, 33, 255, 115, 88, 29, 255, 116, 88, 24, 255, 117, 88, 32, 255, 114, 86, 26, 255, 117, 86, 29, 255, 115, 84, 31, 255, 111, 82, 22, 255, 113, 84, 18, 255, 112, 81, 13, 255, 111, 79, 19, 255, 110, 79, 21, 255, 107, 76, 23, 255, 107, 75, 16, 255, 109, 76, 9, 255, 111, 73, 17, 255, 115, 70, 20, 255, 110, 70, 16, 255, 109, 71, 12, 255, 113, 70, 10, 255, 112, 66, 9, 255, 109, 68, 5, 255, 107, 63, 12, 255, 106, 60, 11, 255, 111, 61, 15, 255, 110, 58, 14, 255, 109, 60, 12, 255, 110, 61, 13, 255, 114, 62, 9, 255, 112, 57, 10, 255, 110, 58, 2, 255, 111, 56, 16, 255, 113, 56, 10, 255, 111, 57, 0, 255, 109, 55, 11, 255, 106, 52, 9, 255, 104, 53, 5, 255, 104, 48, 7, 255, 98, 47, 0, 255, 103, 56, 6, 255, 100, 47, 2, 255, 106, 50, 3, 255, 107, 46, 3, 255, 104, 44, 2, 255, 101, 46, 5, 255, 95, 47, 6, 255, 95, 48, 9, 255, 93, 42, 5, 255, 94, 42, 3, 255, 88, 44, 3, 255, 89, 46, 3, 255, 97, 46, 3, 255, 106, 46, 5, 255, 111, 44, 3, 255, 108, 41, 4, 255, 99, 42, 2, 255, 100, 43, 1, 255, 106, 43, 2, 255, 107, 43, 2, 255, 107, 44, 2, 255, 112, 42, 3, 255, 109, 42, 3, 255, 92, 36, 3, 255, 87, 39, 3, 255, 89, 39, 3, 255, 89, 37, 6, 255, 84, 35, 0, 255, 87, 33, 5, 255, 88, 37, 1, 255, 85, 36, 3, 255, 79, 29, 3, 255, 87, 37, 5, 255, 81, 34, 1, 255, 79, 34, 2, 255, 77, 33, 2, 255, 78, 29, 4, 255, 75, 28, 2, 255, 80, 31, 2, 255, 76, 30, 1, 255, 72, 29, 2, 255, 81, 34, 4, 255, 87, 33, 1, 255, 84, 32, 3, 255, 84, 34, 5, 255, 79, 28, 1, 255, 80, 28, 5, 255, 75, 31, 7, 255, 75, 31, 4, 255, 74, 28, 2, 255, 73, 28, 0, 255, 77, 29, 1, 255, 75, 24, 1, 255, 70, 22, 2, 255, 78, 26, 5, 255, 68, 29, 4, 255, 62, 26, 2, 255, 71, 20, 3, 255, 71, 24, 5, 255, 60, 27, 1, 255, 64, 21, 5, 255, 64, 24, 6, 255, 58, 25, 1, 255, 65, 23, 6, 255, 59, 27, 2, 255, 64, 26, 1, 255, 62, 25, 5, 255, 58, 30, 2, 255, 66, 31, 1, 255, 71, 27, 1, 255, 71, 26, 0, 255, 75, 27, 3, 255, 70, 25, 5, 255, 81, 30, 3, 255, 73, 30, 6, 255, 67, 23, 3, 255, 71, 22, 2, 255, 67, 24, 1, 255, 62, 25, 2, 255, 60, 21, 1, 255, 72, 20, 8, 255, 70, 23, 3, 255, 50, 22, 0, 255, 52, 19, 6, 255, 72, 20, 2, 255, 68, 24, 2, 255, 59, 20, 1, 255, 51, 18, 2, 255, 57, 19, 6, 255, 66, 18, 5, 255, 65, 18, 4, 255, 55, 19, 2, 255, 55, 18, 0, 255, 64, 21, 2, 255, 65, 19, 1, 255, 67, 16, 3, 255, 71, 19, 7, 255, 62, 19, 4, 255, 58, 23, 0, 255, 79, 22, 6, 255, 43, 13, 3, 255, 23, 10, 4, 255, 41, 14, 7, 255, 39, 19, 4, 255, 40, 14, 3, 255, 40, 13, 5, 255, 58, 16, 3, 255, 83, 20, 2, 255, 94, 25, 0, 255, 85, 25, 3, 255, 65, 21, 0, 255, 54, 19, 1, 255, 58, 14, 3, 255, 55, 12, 2, 255, 62, 12, 1, 255, 77, 17, 3, 255, 94, 27, 5, 255, 100, 22, 1, 255, 102, 25, 5, 255, 95, 27, 2, 255, 97, 25, 1, 255, 96, 28, 2, 255, 81, 24, 4, 255, 69, 15, 3, 255, 76, 19, 6, 255, 84, 22, 4, 255, 90, 26, 2, 255, 100, 28, 3, 255, 101, 25, 5, 255, 91, 26, 4, 255, 84, 23, 2, 255, 83, 22, 2, 255, 74, 20, 2, 255, 58, 12, 0, 255, 50, 16, 4, 255, 69, 18, 6, 255, 79, 12, 4, 255, 69, 13, 9, 255, 56, 12, 2, 255, 50, 11, 0, 255, 56, 13, 3, 255, 63, 16, 5, 255, 61, 15, 2, 255, 61, 15, 2, 255, 61, 15, 3, 255, 54, 14, 2, 255, 46, 10, 0, 255, 49, 14, 4, 255, 48, 13, 4, 255, 44, 8, 1, 255, 45, 9, 3, 255, 39, 10, 3, 255, 46, 11, 6, 255, 15, 6, 0, 255, 14, 10, 1, 255, 15, 9, 3, 255, 20, 10, 5, 255, 20, 8, 2, 255, 20, 11, 4, 255, 18, 13, 2, 255, 20, 13, 2, 255, 19, 11, 3, 255, 22, 13, 5, 255, 26, 16, 5, 255, 24, 11, 2, 255, 27, 13, 6, 255, 18, 10, 3, 255, 15, 9, 1, 255, 20, 12, 4, 255, 17, 8, 0, 255, 19, 10, 2, 255, 18, 12, 5, 255, 18, 10, 2, 255, 19, 9, 1, 255, 21, 11, 3, 255, 22, 13, 3, 255, 26, 11, 2, 255, 26, 11, 2, 255, 27, 13, 4, 255, 31, 14, 5, 255, 26, 11, 2, 255, 27, 14, 4, 255, 27, 15, 4, 255, 28, 16, 3, 255, 29, 16, 3, 255, 27, 14, 0, 255, 26, 12, 0, 255, 30, 17, 3, 255, 31, 17, 5, 255, 29, 16, 4, 255, 30, 18, 5, 255, 32, 20, 3, 255, 33, 18, 4, 255, 31, 16, 6, 255, 31, 16, 4, 255, 34, 16, 3, 255, 37, 16, 2, 255, 41, 18, 5, 255, 37, 19, 5, 255, 41, 22, 9, 255, 49, 24, 6, 255, 50, 25, 3, 255, 52, 26, 7, 255, 61, 25, 8, 255, 61, 28, 2, 255, 58, 26, 3, 255, 54, 26, 5, 255, 57, 30, 5, 255, 61, 29, 3, 255, 59, 29, 4, 255, 50, 26, 6, 255, 49, 28, 3, 255, 51, 29, 2, 255, 62, 29, 6, 255, 63, 29, 0, 255, 56, 26, 4, 255, 57, 26, 4, 255, 67, 27, 2, 255, 59, 28, 9, 255, 53, 29, 7, 255, 66, 37, 4, 255, 70, 36, 0, 255, 72, 38, 3, 255, 69, 35, 5, 255, 68, 35, 5, 255, 69, 31, 2, 255, 74, 33, 4, 255, 67, 34, 4, 255, 67, 33, 4, 255, 74, 32, 5, 255, 72, 36, 2, 255, 62, 32, 3, 255, 62, 30, 3, 255, 66, 31, 1, 255, 61, 32, 1, 255, 60, 32, 5, 255, 63, 35, 8, 255, 60, 34, 4, 255, 62, 33, 3, 255, 65, 34, 4, 255, 64, 35, 3, 255, 61, 35, 4, 255, 60, 33, 4, 255, 64, 36, 5, 255, 63, 38, 2, 255, 68, 38, 3, 255, 72, 34, 5, 255, 72, 36, 6, 255, 67, 35, 3, 255, 72, 33, 1, 255, 74, 36, 3, 255, 71, 38, 1, 255, 68, 38, 0, 255, 69, 40, 1, 255, 71, 38, 0, 255, 78, 42, 1, 255, 71, 40, 1, 255, 73, 43, 3, 255, 72, 39, 0, 255, 70, 37, 2, 255, 73, 39, 6, 255, 62, 37, 2, 255, 69, 42, 5, 255, 76, 43, 3, 255, 67, 35, 0, 255, 73, 36, 3, 255, 70, 41, 1, 255, 70, 41, 2, 255, 70, 37, 5, 255, 66, 38, 3, 255, 68, 38, 2, 255, 73, 36, 4, 255, 70, 37, 5, 255, 67, 38, 2, 255, 68, 38, 4, 255, 70, 35, 6, 255, 70, 36, 0, 255, 68, 41, 1, 255, 68, 39, 0, 255, 72, 38, 0, 255, 77, 43, 5, 255, 85, 42, 5, 255, 70, 40, 6, 255, 66, 39, 7, 255, 68, 39, 3, 255, 66, 40, 4, 255, 70, 44, 3, 255, 69, 45, 3, 255, 67, 47, 6, 255, 74, 48, 8, 255, 78, 42, 14, 255, 84, 49, 8, 255, 78, 50, 4, 255, 67, 45, 9, 255, 96, 59, 15, 255, 104, 59, 14, 255, 114, 57, 9, 255, 96, 53, 5, 255, 73, 54, 11, 255, 69, 53, 8, 255, 73, 54, 10, 255, 66, 58, 10, 255, 71, 56, 17, 255, 81, 57, 18, 255, 73, 60, 17, 255, 68, 59, 23, 255, 68, 61, 20, 255, 80, 64, 15, 255, 89, 60, 18, 255, 87, 63, 21, 255, 91, 63, 27, 255, 79, 62, 31, 255, 72, 64, 27, 255, 84, 65, 33, 255, 104, 72, 25, 255, 115, 75, 22, 255, 99, 73, 25, 255, 91, 71, 27, 255, 96, 74, 26, 255, 102, 77, 29, 255, 90, 73, 34, 255, 83, 74, 44, 255, 87, 79, 45, 255, 88, 80, 35, 255, 80, 81, 31, 255, 93, 85, 40, 255, 117, 88, 29, 255, 118, 85, 39, 255, 127, 89, 39, 255, 120, 91, 41, 255, 114, 90, 50, 255, 105, 91, 44, 255, 90, 91, 44, 255, 90, 89, 49, 255, 94, 94, 51, 255, 89, 91, 44, 255, 103, 94, 55, 255, 109, 101, 57, 255, 97, 93, 53, 255, 97, 97, 40, 255, 109, 103, 54, 255, 123, 105, 55, 255, 122, 101, 56, 255, 123, 105, 58, 255, 120, 104, 48, 255, 123, 106, 48, 255, 124, 102, 51, 255, 121, 102, 48, 255, 114, 104, 53, 255, 107, 103, 40, 255, 109, 102, 47, 255, 112, 102, 46, 255, 109, 104, 41, 255, 108, 103, 37, 255, 113, 99, 38, 255, 110, 98, 27, 255, 113, 99, 32, 255, 117, 97, 36, 255, 115, 93, 45, 255, 115, 93, 41, 255, 111, 93, 28, 255, 113, 94, 23, 255, 114, 89, 32, 255, 119, 90, 42, 255, 113, 87, 29, 255, 113, 86, 23, 255, 115, 85, 24, 255, 113, 84, 28, 255, 111, 81, 28, 255, 111, 79, 26, 255, 111, 79, 18, 255, 111, 77, 21, 255, 111, 77, 16, 255, 110, 74, 15, 255, 111, 72, 21, 255, 112, 75, 9, 255, 113, 74, 15, 255, 111, 70, 13, 255, 113, 71, 11, 255, 109, 68, 13, 255, 105, 66, 14, 255, 106, 67, 10, 255, 111, 65, 13, 255, 111, 63, 19, 255, 112, 62, 15, 255, 110, 58, 16, 255, 111, 60, 12, 255, 110, 59, 8, 255, 110, 62, 5, 255, 112, 60, 3, 255, 114, 56, 6, 255, 111, 54, 8, 255, 110, 54, 7, 255, 110, 54, 5, 255, 108, 54, 2, 255, 107, 55, 7, 255, 110, 51, 6, 255, 107, 49, 2, 255, 116, 50, 9, 255, 114, 54, 8, 255, 104, 54, 3, 255, 103, 49, 6, 255, 101, 47, 2, 255, 102, 50, 4, 255, 101, 49, 5, 255, 100, 47, 5, 255, 97, 43, 4, 255, 97, 43, 6, 255, 94, 39, 3, 255, 98, 45, 6, 255, 90, 47, 4, 255, 90, 45, 2, 255, 100, 44, 3, 255, 108, 47, 5, 255, 111, 44, 2, 255, 102, 45, 2, 255, 97, 46, 2, 255, 105, 44, 2, 255, 112, 42, 1, 255, 117, 42, 4, 255, 113, 43, 6, 255, 104, 40, 2, 255, 98, 41, 3, 255, 87, 38, 3, 255, 86, 38, 1, 255, 91, 36, 1, 255, 91, 34, 4, 255, 88, 36, 4, 255, 86, 37, 2, 255, 82, 34, 0, 255, 82, 36, 4, 255, 85, 35, 5, 255, 82, 33, 0, 255, 84, 36, 4, 255, 86, 40, 6, 255, 82, 38, 0, 255, 84, 34, 2, 255, 76, 34, 6, 255, 75, 30, 9, 255, 75, 26, 4, 255, 75, 28, 0, 255, 81, 26, 1, 255, 82, 32, 3, 255, 85, 33, 2, 255, 87, 31, 2, 255, 90, 30, 3, 255, 83, 34, 1, 255, 85, 34, 3, 255, 82, 29, 2, 255, 80, 27, 1, 255, 78, 29, 1, 255, 82, 29, 1, 255, 75, 27, 2, 255, 69, 27, 3, 255, 76, 23, 1, 255, 73, 26, 3, 255, 71, 29, 6, 255, 69, 21, 1, 255, 70, 23, 3, 255, 68, 24, 2, 255, 68, 20, 1, 255, 65, 26, 6, 255, 63, 25, 2, 255, 64, 23, 3, 255, 68, 22, 5, 255, 71, 24, 3, 255, 68, 20, 5, 255, 76, 24, 7, 255, 86, 25, 1, 255, 75, 25, 2, 255, 70, 23, 2, 255, 76, 27, 4, 255, 72, 28, 4, 255, 72, 29, 4, 255, 67, 25, 1, 255, 69, 22, 1, 255, 71, 23, 3, 255, 63, 24, 2, 255, 65, 26, 4, 255, 64, 20, 0, 255, 62, 17, 5, 255, 72, 20, 6, 255, 64, 17, 0, 255, 57, 21, 6, 255, 65, 22, 3, 255, 60, 18, 4, 255, 57, 18, 2, 255, 55, 23, 7, 255, 54, 21, 4, 255, 58, 15, 5, 255, 67, 19, 7, 255, 60, 16, 7, 255, 64, 19, 3, 255, 69, 18, 3, 255, 61, 15, 1, 255, 60, 13, 3, 255, 63, 13, 4, 255, 68, 18, 3, 255, 63, 22, 0, 255, 78, 23, 6, 255, 55, 24, 9, 255, 36, 17, 4, 255, 45, 16, 2, 255, 45, 18, 2, 255, 45, 16, 2, 255, 36, 14, 4, 255, 47, 14, 1, 255, 67, 19, 1, 255, 81, 23, 3, 255, 80, 23, 4, 255, 77, 20, 6, 255, 49, 14, 3, 255, 24, 11, 1, 255, 23, 10, 4, 255, 25, 11, 6, 255, 36, 13, 1, 255, 76, 19, 2, 255, 85, 20, 1, 255, 88, 23, 2, 255, 95, 26, 1, 255, 92, 23, 0, 255, 88, 23, 2, 255, 79, 21, 4, 255, 73, 20, 3, 255, 68, 16, 0, 255, 72, 19, 1, 255, 72, 22, 2, 255, 72, 17, 0, 255, 81, 21, 4, 255, 82, 24, 3, 255, 82, 19, 2, 255, 80, 21, 5, 255, 71, 19, 1, 255, 64, 15, 3, 255, 43, 12, 5, 255, 55, 11, 6, 255, 58, 15, 2, 255, 56, 14, 4, 255, 62, 13, 5, 255, 52, 11, 2, 255, 43, 10, 1, 255, 49, 11, 4, 255, 50, 9, 2, 255, 60, 14, 1, 255, 64, 15, 1, 255, 64, 16, 4, 255, 57, 12, 2, 255, 52, 9, 1, 255, 52, 12, 5, 255, 50, 13, 4, 255, 36, 9, 0, 255, 30, 9, 0, 255, 35, 10, 2, 255, 18, 9, 2, 255, 15, 10, 2, 255, 13, 7, 0, 255, 17, 7, 1, 255, 21, 8, 2, 255, 19, 8, 2, 255, 20, 11, 2, 255, 19, 10, 0, 255, 19, 9, 3, 255, 22, 12, 5, 255, 19, 9, 0, 255, 21, 10, 1, 255, 21, 10, 2, 255, 19, 12, 4, 255, 18, 11, 3, 255, 22, 12, 6, 255, 18, 7, 1, 255, 18, 10, 3, 255, 15, 10, 5, 255, 18, 15, 5, 255, 22, 12, 4, 255, 23, 13, 3, 255, 19, 14, 2, 255, 21, 13, 2, 255, 25, 14, 4, 255, 25, 14, 4, 255, 24, 11, 3, 255, 24, 11, 2, 255, 29, 15, 7, 255, 31, 15, 8, 255, 30, 13, 4, 255, 29, 14, 1, 255, 27, 14, 3, 255, 29, 14, 3, 255, 31, 14, 4, 255, 31, 15, 3, 255, 30, 16, 1, 255, 29, 17, 1, 255, 34, 20, 3, 255, 29, 18, 4, 255, 25, 16, 4, 255, 29, 17, 5, 255, 34, 19, 4, 255, 36, 21, 5, 255, 40, 21, 5, 255, 50, 25, 2, 255, 41, 26, 3, 255, 55, 23, 2, 255, 58, 21, 0, 255, 55, 27, 2, 255, 59, 23, 7, 255, 53, 25, 3, 255, 50, 27, 3, 255, 53, 28, 4, 255, 50, 26, 2, 255, 45, 26, 0, 255, 51, 28, 6, 255, 50, 20, 4, 255, 52, 26, 2, 255, 55, 30, 1, 255, 50, 27, 2, 255, 52, 27, 5, 255, 53, 25, 7, 255, 51, 30, 2, 255, 46, 28, 0, 255, 55, 29, 6, 255, 61, 29, 9, 255, 62, 27, 8, 255, 58, 28, 7, 255, 53, 28, 4, 255, 53, 29, 5, 255, 54, 29, 3, 255, 64, 29, 7, 255, 64, 23, 2, 255, 56, 29, 3, 255, 47, 30, 1, 255, 55, 31, 4, 255, 61, 28, 4, 255, 52, 26, 2, 255, 53, 30, 6, 255, 56, 29, 7, 255, 56, 32, 6, 255, 52, 34, 3, 255, 57, 30, 1, 255, 60, 34, 4, 255, 58, 35, 2, 255, 63, 36, 4, 255, 66, 35, 7, 255, 66, 33, 7, 255, 67, 34, 8, 255, 67, 33, 4, 255, 68, 34, 2, 255, 68, 34, 2, 255, 68, 39, 6, 255, 63, 34, 3, 255, 68, 37, 5, 255, 69, 37, 1, 255, 70, 35, 0, 255, 75, 36, 2, 255, 74, 37, 3, 255, 69, 36, 1, 255, 68, 37, 2, 255, 72, 36, 3, 255, 68, 37, 2, 255, 67, 40, 4, 255, 72, 38, 3, 255, 70, 35, 2, 255, 72, 40, 5, 255, 72, 34, 4, 255, 73, 36, 8, 255, 69, 35, 0, 255, 74, 37, 7, 255, 69, 32, 4, 255, 75, 36, 3, 255, 76, 38, 4, 255, 70, 33, 3, 255, 70, 42, 8, 255, 66, 38, 1, 255, 72, 33, 2, 255, 74, 34, 5, 255, 72, 39, 3, 255, 69, 36, 0, 255, 70, 32, 2, 255, 71, 37, 5, 255, 60, 38, 2, 255, 65, 38, 3, 255, 88, 42, 7, 255, 101, 43, 7, 255, 91, 39, 3, 255, 68, 41, 3, 255, 67, 44, 4, 255, 71, 41, 2, 255, 65, 41, 6, 255, 69, 42, 7, 255, 69, 41, 4, 255, 72, 44, 4, 255, 66, 42, 7, 255, 66, 44, 11, 255, 74, 48, 6, 255, 69, 47, 3, 255, 59, 45, 12, 255, 88, 47, 15, 255, 100, 53, 12, 255, 81, 53, 5, 255, 68, 52, 9, 255, 75, 51, 16, 255, 75, 51, 18, 255, 67, 56, 12, 255, 72, 58, 14, 255, 73, 56, 14, 255, 69, 57, 11, 255, 65, 58, 9, 255, 81, 64, 16, 255, 94, 63, 16, 255, 103, 64, 26, 255, 103, 66, 18, 255, 117, 71, 15, 255, 95, 71, 18, 255, 82, 66, 16, 255, 77, 67, 21, 255, 70, 61, 30, 255, 76, 69, 23, 255, 75, 69, 27, 255, 74, 68, 45, 255, 80, 69, 38, 255, 92, 75, 30, 255, 92, 73, 27, 255, 91, 74, 34, 255, 104, 81, 29, 255, 112, 85, 23, 255, 116, 89, 28, 255, 103, 89, 34, 255, 96, 82, 46, 255, 112, 88, 42, 255, 113, 83, 43, 255, 119, 91, 47, 255, 120, 91, 32, 255, 116, 92, 51, 255, 117, 96, 48, 255, 108, 92, 40, 255, 111, 95, 62, 255, 110, 96, 51, 255, 106, 96, 52, 255, 95, 98, 54, 255, 88, 96, 52, 255, 95, 99, 59, 255, 91, 102, 54, 255, 87, 101, 49, 255, 116, 105, 54, 255, 129, 107, 52, 255, 121, 106, 54, 255, 123, 106, 53, 255, 128, 104, 54, 255, 128, 107, 50, 255, 118, 104, 50, 255, 114, 105, 57, 255, 112, 102, 49, 255, 106, 101, 53, 255, 105, 102, 43, 255, 107, 99, 44, 255, 105, 97, 48, 255, 109, 101, 42, 255, 110, 97, 44, 255, 113, 99, 37, 255, 114, 96, 39, 255, 116, 94, 39, 255, 114, 95, 42, 255, 110, 89, 43, 255, 109, 90, 35, 255, 114, 93, 28, 255, 117, 91, 38, 255, 110, 85, 37, 255, 112, 86, 24, 255, 112, 83, 20, 255, 111, 80, 27, 255, 109, 80, 26, 255, 110, 79, 23, 255, 114, 80, 28, 255, 115, 78, 27, 255, 113, 72, 25, 255, 115, 74, 14, 255, 120, 76, 17, 255, 120, 75, 17, 255, 113, 70, 14, 255, 111, 68, 11, 255, 106, 67, 9, 255, 101, 65, 16, 255, 102, 68, 10, 255, 105, 65, 14, 255, 106, 62, 13, 255, 110, 65, 9, 255, 113, 64, 13, 255, 114, 62, 5, 255, 115, 64, 6, 255, 110, 59, 6, 255, 110, 62, 5, 255, 110, 58, 8, 255, 113, 56, 3, 255, 116, 54, 3, 255, 114, 55, 1, 255, 108, 54, 8, 255, 106, 54, 6, 255, 107, 51, 3, 255, 114, 52, 6, 255, 111, 52, 3, 255, 117, 49, 4, 255, 115, 54, 4, 255, 98, 51, 0, 255, 98, 48, 5, 255, 101, 48, 6, 255, 96, 45, 4, 255, 94, 43, 3, 255, 97, 45, 5, 255, 100, 45, 6, 255, 95, 43, 1, 255, 93, 45, 3, 255, 91, 42, 3, 255, 85, 43, 0, 255, 96, 45, 5, 255, 106, 45, 8, 255, 102, 45, 4, 255, 100, 48, 2, 255, 103, 46, 3, 255, 103, 39, 1, 255, 106, 44, 3, 255, 103, 45, 2, 255, 101, 37, 2, 255, 101, 34, 4, 255, 94, 35, 3, 255, 90, 37, 2, 255, 84, 37, 5, 255, 85, 38, 2, 255, 90, 35, 2, 255, 86, 31, 1, 255, 83, 36, 5, 255, 88, 38, 2, 255, 88, 37, 1, 255, 88, 39, 5, 255, 88, 33, 4, 255, 88, 31, 2, 255, 88, 32, 1, 255, 85, 33, 1, 255, 83, 34, 2, 255, 86, 30, 2, 255, 74, 31, 1, 255, 72, 29, 2, 255, 75, 30, 4, 255, 74, 29, 5, 255, 75, 23, 3, 255, 76, 29, 5, 255, 87, 32, 2, 255, 98, 33, 1, 255, 95, 34, 4, 255, 90, 35, 2, 255, 83, 37, 1, 255, 85, 31, 0, 255, 91, 27, 4, 255, 81, 28, 3, 255, 77, 31, 4, 255, 76, 28, 3, 255, 75, 26, 3, 255, 74, 24, 0, 255, 75, 26, 3, 255, 69, 25, 2, 255, 72, 25, 3, 255, 69, 26, 2, 255, 70, 26, 3, 255, 72, 26, 2, 255, 60, 25, 5, 255, 60, 26, 2, 255, 68, 24, 3, 255, 67, 21, 3, 255, 75, 26, 4, 255, 77, 22, 2, 255, 86, 25, 1, 255, 96, 30, 0, 255, 87, 26, 7, 255, 78, 21, 6, 255, 75, 26, 5, 255, 72, 26, 1, 255, 72, 24, 4, 255, 76, 22, 2, 255, 78, 25, 6, 255, 69, 25, 2, 255, 68, 27, 3, 255, 68, 24, 4, 255, 69, 24, 2, 255, 69, 21, 0, 255, 73, 21, 2, 255, 79, 22, 3, 255, 79, 25, 7, 255, 74, 22, 3, 255, 69, 20, 4, 255, 65, 18, 1, 255, 69, 20, 5, 255, 69, 20, 2, 255, 65, 20, 1, 255, 65, 22, 4, 255, 54, 14, 1, 255, 59, 18, 9, 255, 68, 17, 7, 255, 57, 15, 1, 255, 52, 16, 0, 255, 52, 18, 1, 255, 64, 18, 4, 255, 65, 18, 2, 255, 73, 20, 6, 255, 66, 20, 4, 255, 58, 22, 2, 255, 50, 17, 1, 255, 53, 19, 6, 255, 50, 21, 6, 255, 50, 18, 2, 255, 55, 17, 3, 255, 59, 16, 2, 255, 60, 17, 1, 255, 57, 15, 1, 255, 62, 20, 2, 255, 45, 17, 2, 255, 34, 15, 1, 255, 33, 13, 2, 255, 37, 14, 4, 255, 35, 15, 3, 255, 50, 13, 5, 255, 51, 15, 5, 255, 61, 19, 1, 255, 69, 18, 7, 255, 68, 15, 5, 255, 72, 16, 5, 255, 64, 12, 2, 255, 45, 14, 4, 255, 43, 12, 2, 255, 45, 11, 4, 255, 37, 14, 7, 255, 32, 9, 8, 255, 37, 9, 6, 255, 52, 15, 5, 255, 70, 19, 6, 255, 71, 15, 1, 255, 63, 16, 4, 255, 57, 18, 4, 255, 56, 10, 1, 255, 44, 9, 1, 255, 43, 10, 9, 255, 36, 9, 4, 255, 39, 12, 4, 255, 44, 9, 2, 255, 51, 13, 8, 255, 46, 10, 2, 255, 52, 12, 1, 255, 62, 16, 2, 255, 62, 15, 2, 255, 64, 13, 2, 255, 67, 15, 4, 255, 58, 10, 0, 255, 57, 15, 2, 255, 56, 17, 3, 255, 49, 12, 2, 255, 41, 11, 3, 255, 40, 9, 1, 255, 16, 6, 2, 255, 13, 6, 1, 255, 13, 6, 3, 255, 14, 6, 3, 255, 17, 8, 5, 255, 18, 9, 3, 255, 19, 8, 1, 255, 21, 10, 4, 255, 17, 7, 1, 255, 22, 12, 3, 255, 19, 9, 1, 255, 15, 6, 0, 255, 15, 9, 2, 255, 15, 12, 1, 255, 15, 11, 1, 255, 19, 13, 3, 255, 21, 11, 2, 255, 21, 8, 2, 255, 20, 10, 3, 255, 19, 10, 3, 255, 18, 8, 1, 255, 23, 13, 4, 255, 28, 19, 7, 255, 20, 10, 1, 255, 24, 12, 2, 255, 30, 16, 2, 255, 29, 16, 1, 255, 23, 14, 3, 255, 22, 11, 2, 255, 32, 14, 7, 255, 26, 10, 2, 255, 24, 15, 3, 255, 31, 17, 7, 255, 33, 16, 5, 255, 31, 14, 2, 255, 31, 14, 4, 255, 25, 13, 3, 255, 25, 16, 3, 255, 27, 15, 4, 255, 30, 17, 5, 255, 34, 17, 5, 255, 28, 18, 2, 255, 39, 20, 6, 255, 40, 21, 4, 255, 42, 22, 4, 255, 50, 24, 4, 255, 56, 24, 6, 255, 56, 22, 5, 255, 47, 19, 0, 255, 52, 24, 1, 255, 60, 24, 5, 255, 50, 20, 2, 255, 45, 27, 5, 255, 52, 25, 6, 255, 42, 29, 6, 255, 45, 23, 4, 255, 52, 24, 4, 255, 46, 28, 4, 255, 49, 24, 3, 255, 49, 26, 3, 255, 39, 25, 0, 255, 43, 23, 2, 255, 52, 25, 3, 255, 52, 28, 1, 255, 50, 28, 3, 255, 42, 26, 2, 255, 50, 23, 7, 255, 45, 26, 2, 255, 53, 27, 6, 255, 53, 26, 2, 255, 48, 29, 2, 255, 47, 26, 3, 255, 57, 31, 6, 255, 57, 29, 2, 255, 52, 28, 1, 255, 50, 27, 2, 255, 60, 31, 3, 255, 54, 29, 1, 255, 53, 27, 4, 255, 55, 29, 3, 255, 56, 32, 3, 255, 62, 31, 7, 255, 64, 31, 2, 255, 59, 33, 3, 255, 57, 32, 2, 255, 60, 37, 4, 255, 63, 35, 3, 255, 64, 29, 1, 255, 66, 35, 4, 255, 60, 38, 6, 255, 58, 35, 2, 255, 61, 33, 2, 255, 68, 33, 5, 255, 60, 33, 1, 255, 64, 38, 3, 255, 69, 35, 2, 255, 68, 36, 6, 255, 64, 37, 3, 255, 71, 39, 3, 255, 73, 41, 4, 255, 72, 36, 1, 255, 72, 35, 2, 255, 63, 37, 2, 255, 63, 39, 1, 255, 71, 35, 4, 255, 73, 35, 5, 255, 65, 35, 3, 255, 66, 34, 1, 255, 70, 39, 3, 255, 74, 38, 3, 255, 89, 35, 1, 255, 96, 35, 2, 255, 95, 39, 5, 255, 94, 36, 3, 255, 75, 37, 3, 255, 66, 36, 6, 255, 66, 37, 0, 255, 68, 36, 4, 255, 71, 35, 6, 255, 70, 36, 3, 255, 64, 33, 2, 255, 66, 36, 2, 255, 65, 37, 7, 255, 63, 37, 7, 255, 65, 36, 2, 255, 76, 39, 2, 255, 95, 48, 6, 255, 92, 39, 2, 255, 76, 36, 6, 255, 68, 36, 0, 255, 72, 42, 3, 255, 69, 39, 6, 255, 67, 43, 11, 255, 71, 43, 7, 255, 73, 41, 5, 255, 66, 42, 10, 255, 71, 43, 5, 255, 65, 51, 4, 255, 71, 49, 2, 255, 76, 48, 5, 255, 67, 49, 11, 255, 73, 47, 13, 255, 83, 54, 13, 255, 85, 57, 15, 255, 87, 58, 11, 255, 72, 52, 11, 255, 73, 50, 18, 255, 70, 53, 11, 255, 74, 55, 12, 255, 77, 53, 20, 255, 77, 56, 24, 255, 93, 64, 23, 255, 112, 67, 18, 255, 111, 68, 16, 255, 114, 67, 14, 255, 102, 62, 24, 255, 95, 62, 19, 255, 87, 68, 18, 255, 78, 68, 22, 255, 77, 67, 20, 255, 75, 66, 23, 255, 73, 69, 27, 255, 72, 65, 38, 255, 76, 70, 30, 255, 82, 71, 32, 255, 79, 76, 29, 255, 82, 75, 33, 255, 93, 79, 39, 255, 115, 85, 28, 255, 116, 84, 38, 255, 117, 85, 38, 255, 115, 90, 35, 255, 121, 89, 53, 255, 117, 87, 42, 255, 115, 90, 43, 255, 117, 91, 47, 255, 124, 92, 41, 255, 120, 97, 51, 255, 117, 97, 50, 255, 122, 97, 44, 255, 121, 99, 55, 255, 125, 97, 52, 255, 128, 102, 47, 255, 103, 102, 56, 255, 91, 98, 49, 255, 109, 103, 58, 255, 109, 104, 50, 255, 100, 102, 46, 255, 101, 100, 53, 255, 112, 104, 59, 255, 116, 104, 56, 255, 116, 102, 56, 255, 118, 107, 54, 255, 115, 103, 52, 255, 114, 103, 52, 255, 109, 100, 54, 255, 107, 101, 55, 255, 102, 101, 45, 255, 102, 95, 52, 255, 105, 101, 48, 255, 104, 101, 41, 255, 104, 99, 42, 255, 108, 100, 43, 255, 117, 100, 38, 255, 118, 99, 37, 255, 120, 97, 36, 255, 120, 94, 33, 255, 120, 91, 40, 255, 118, 91, 41, 255, 114, 91, 23, 255, 112, 89, 26, 255, 108, 85, 30, 255, 113, 81, 34, 255, 118, 83, 31, 255, 114, 81, 24, 255, 109, 77, 28, 255, 112, 80, 24, 255, 110, 74, 21, 255, 114, 75, 18, 255, 116, 74, 19, 255, 118, 74, 22, 255, 113, 68, 18, 255, 111, 67, 16, 255, 112, 70, 14, 255, 110, 68, 24, 255, 106, 65, 19, 255, 106, 63, 22, 255, 109, 68, 8, 255, 107, 66, 11, 255, 106, 67, 12, 255, 113, 69, 5, 255, 112, 62, 7, 255, 114, 62, 12, 255, 114, 60, 17, 255, 108, 58, 10, 255, 105, 58, 7, 255, 107, 58, 4, 255, 117, 57, 5, 255, 105, 58, 4, 255, 99, 57, 3, 255, 108, 58, 9, 255, 113, 54, 8, 255, 113, 54, 5, 255, 115, 51, 6, 255, 113, 50, 3, 255, 115, 51, 1, 255, 108, 53, 2, 255, 103, 52, 5, 255, 106, 46, 3, 255, 106, 49, 6, 255, 98, 46, 4, 255, 96, 46, 4, 255, 98, 43, 5, 255, 99, 44, 9, 255, 96, 46, 8, 255, 91, 47, 4, 255, 92, 45, 3, 255, 90, 38, 3, 255, 97, 38, 4, 255, 104, 43, 4, 255, 104, 44, 4, 255, 96, 40, 2, 255, 94, 36, 5, 255, 86, 33, 2, 255, 85, 38, 2, 255, 87, 35, 3, 255, 82, 32, 4, 255, 80, 35, 3, 255, 80, 39, 5, 255, 76, 36, 3, 255, 81, 31, 2, 255, 89, 34, 3, 255, 87, 37, 1, 255, 78, 33, 0, 255, 80, 29, 8, 255, 86, 32, 5, 255, 89, 32, 2, 255, 87, 38, 5, 255, 88, 34, 4, 255, 87, 29, 4, 255, 86, 27, 5, 255, 78, 30, 3, 255, 79, 31, 3, 255, 73, 30, 5, 255, 69, 27, 2, 255, 77, 32, 5, 255, 75, 29, 2, 255, 77, 30, 4, 255, 79, 24, 6, 255, 77, 26, 2, 255, 88, 32, 3, 255, 92, 34, 3, 255, 93, 33, 2, 255, 93, 35, 2, 255, 86, 36, 4, 255, 83, 31, 2, 255, 94, 31, 4, 255, 88, 30, 2, 255, 79, 31, 2, 255, 73, 27, 2, 255, 75, 26, 5, 255, 71, 27, 5, 255, 75, 25, 1, 255, 73, 27, 2, 255, 67, 29, 4, 255, 64, 25, 2, 255, 73, 25, 2, 255, 70, 25, 1, 255, 67, 24, 2, 255, 68, 24, 3, 255, 70, 24, 7, 255, 70, 23, 4, 255, 78, 28, 3, 255, 76, 24, 0, 255, 79, 24, 4, 255, 88, 27, 4, 255, 87, 25, 1, 255, 82, 26, 2, 255, 76, 25, 2, 255, 74, 23, 4, 255, 72, 22, 2, 255, 78, 24, 4, 255, 75, 22, 2, 255, 72, 21, 0, 255, 76, 27, 7, 255, 71, 21, 3, 255, 68, 26, 4, 255, 75, 24, 1, 255, 79, 22, 1, 255, 89, 25, 4, 255, 92, 26, 5, 255, 93, 26, 5, 255, 81, 24, 3, 255, 70, 21, 6, 255, 70, 20, 2, 255, 66, 17, 1, 255, 68, 20, 4, 255, 64, 19, 3, 255, 58, 21, 2, 255, 52, 15, 2, 255, 60, 16, 9, 255, 60, 16, 4, 255, 49, 16, 3, 255, 58, 17, 5, 255, 59, 15, 1, 255, 55, 17, 1, 255, 59, 17, 3, 255, 63, 21, 4, 255, 62, 21, 3, 255, 48, 19, 1, 255, 55, 19, 6, 255, 57, 21, 3, 255, 58, 20, 2, 255, 64, 19, 3, 255, 58, 16, 3, 255, 52, 13, 6, 255, 28, 10, 0, 255, 34, 16, 1, 255, 38, 16, 2, 255, 32, 15, 1, 255, 39, 16, 2, 255, 45, 16, 3, 255, 45, 13, 2, 255, 44, 15, 5, 255, 34, 11, 4, 255, 27, 9, 4, 255, 30, 11, 2, 255, 29, 11, 4, 255, 35, 13, 0, 255, 30, 12, 4, 255, 27, 6, 4, 255, 27, 8, 2, 255, 27, 8, 6, 255, 23, 8, 5, 255, 21, 9, 3, 255, 20, 7, 0, 255, 20, 10, 1, 255, 25, 9, 4, 255, 29, 5, 0, 255, 42, 12, 6, 255, 54, 14, 5, 255, 59, 14, 2, 255, 59, 15, 1, 255, 61, 11, 3, 255, 53, 14, 3, 255, 40, 14, 4, 255, 31, 10, 1, 255, 36, 12, 3, 255, 48, 14, 4, 255, 56, 14, 1, 255, 57, 14, 1, 255, 54, 14, 2, 255, 63, 19, 4, 255, 70, 17, 2, 255, 70, 15, 1, 255, 64, 16, 2, 255, 55, 15, 3, 255, 50, 16, 5, 255, 50, 13, 2, 255, 54, 13, 2, 255, 13, 6, 2, 255, 14, 6, 3, 255, 13, 8, 4, 255, 13, 6, 3, 255, 14, 6, 2, 255, 19, 9, 2, 255, 19, 8, 2, 255, 19, 10, 3, 255, 17, 9, 1, 255, 18, 9, 0, 255, 21, 11, 2, 255, 19, 10, 2, 255, 18, 11, 3, 255, 17, 8, 2, 255, 16, 9, 2, 255, 20, 10, 2, 255, 23, 12, 4, 255, 23, 12, 3, 255, 21, 12, 2, 255, 20, 11, 2, 255, 22, 12, 3, 255, 22, 12, 3, 255, 25, 14, 4, 255, 23, 13, 2, 255, 26, 17, 5, 255, 26, 17, 5, 255, 21, 13, 2, 255, 22, 12, 5, 255, 23, 14, 5, 255, 20, 12, 0, 255, 24, 16, 3, 255, 26, 17, 3, 255, 26, 14, 2, 255, 26, 12, 2, 255, 25, 13, 4, 255, 24, 13, 6, 255, 24, 14, 5, 255, 34, 18, 5, 255, 26, 17, 3, 255, 30, 14, 2, 255, 42, 14, 4, 255, 30, 19, 3, 255, 39, 21, 5, 255, 43, 21, 4, 255, 44, 20, 4, 255, 50, 23, 5, 255, 48, 20, 1, 255, 49, 19, 1, 255, 54, 22, 2, 255, 55, 23, 3, 255, 51, 20, 1, 255, 51, 21, 3, 255, 49, 19, 1, 255, 52, 20, 3, 255, 37, 21, 1, 255, 41, 20, 2, 255, 47, 22, 3, 255, 44, 24, 1, 255, 45, 21, 2, 255, 45, 25, 5, 255, 39, 24, 3, 255, 46, 25, 4, 255, 54, 26, 5, 255, 51, 25, 3, 255, 51, 26, 3, 255, 38, 26, 0, 255, 46, 28, 4, 255, 47, 31, 2, 255, 56, 27, 6, 255, 47, 22, 5, 255, 43, 25, 5, 255, 54, 31, 8, 255, 53, 26, 2, 255, 52, 29, 7, 255, 52, 25, 3, 255, 58, 28, 3, 255, 53, 28, 3, 255, 51, 29, 2, 255, 61, 25, 4, 255, 66, 30, 1, 255, 57, 32, 0, 255, 62, 30, 3, 255, 64, 28, 5, 255, 61, 30, 2, 255, 63, 31, 3, 255, 66, 34, 5, 255, 61, 33, 2, 255, 59, 34, 2, 255, 60, 37, 4, 255, 57, 36, 3, 255, 58, 33, 2, 255, 61, 36, 4, 255, 66, 34, 4, 255, 68, 33, 3, 255, 64, 36, 2, 255, 71, 33, 2, 255, 65, 33, 3, 255, 67, 37, 3, 255, 70, 35, 3, 255, 68, 36, 3, 255, 64, 34, 2, 255, 62, 33, 3, 255, 69, 37, 7, 255, 66, 33, 4, 255, 62, 36, 7, 255, 61, 35, 7, 255, 66, 34, 6, 255, 68, 37, 7, 255, 62, 33, 1, 255, 73, 38, 5, 255, 97, 41, 6, 255, 93, 43, 4, 255, 92, 39, 3, 255, 94, 34, 4, 255, 71, 31, 5, 255, 70, 36, 1, 255, 68, 35, 7, 255, 67, 38, 6, 255, 62, 34, 0, 255, 63, 38, 3, 255, 65, 37, 5, 255, 66, 34, 1, 255, 67, 37, 3, 255, 67, 34, 4, 255, 62, 33, 3, 255, 64, 32, 6, 255, 67, 33, 5, 255, 62, 32, 7, 255, 64, 32, 9, 255, 67, 36, 6, 255, 71, 35, 1, 255, 71, 37, 4, 255, 67, 42, 7, 255, 63, 39, 6, 255, 74, 41, 7, 255, 74, 40, 6, 255, 67, 44, 10, 255, 61, 47, 11, 255, 70, 44, 6, 255, 76, 46, 9, 255, 96, 50, 17, 255, 109, 59, 15, 255, 104, 59, 7, 255, 110, 59, 12, 255, 98, 56, 9, 255, 76, 50, 13, 255, 64, 54, 15, 255, 68, 57, 19, 255, 71, 54, 18, 255, 70, 57, 16, 255, 91, 63, 14, 255, 114, 66, 14, 255, 115, 63, 17, 255, 106, 60, 23, 255, 109, 68, 13, 255, 100, 70, 16, 255, 78, 61, 35, 255, 74, 62, 24, 255, 81, 65, 17, 255, 71, 67, 22, 255, 69, 64, 31, 255, 72, 67, 34, 255, 75, 67, 34, 255, 85, 70, 30, 255, 93, 78, 30, 255, 81, 75, 47, 255, 88, 74, 45, 255, 102, 79, 32, 255, 101, 82, 30, 255, 102, 86, 38, 255, 95, 84, 33, 255, 94, 82, 37, 255, 95, 86, 45, 255, 112, 94, 40, 255, 118, 93, 29, 255, 114, 94, 44, 255, 119, 92, 54, 255, 115, 93, 51, 255, 123, 96, 52, 255, 127, 96, 52, 255, 121, 98, 51, 255, 114, 94, 60, 255, 107, 98, 48, 255, 97, 94, 66, 255, 110, 103, 53, 255, 126, 106, 45, 255, 127, 101, 58, 255, 125, 106, 58, 255, 109, 106, 55, 255, 87, 98, 54, 255, 90, 102, 58, 255, 98, 101, 52, 255, 105, 106, 53, 255, 101, 101, 54, 255, 102, 103, 51, 255, 101, 106, 42, 255, 98, 101, 50, 255, 101, 101, 51, 255, 103, 102, 46, 255, 107, 100, 49, 255, 104, 98, 46, 255, 110, 100, 48, 255, 115, 98, 46, 255, 116, 96, 44, 255, 124, 97, 39, 255, 127, 92, 40, 255, 127, 90, 43, 255, 124, 94, 19, 255, 120, 93, 37, 255, 112, 91, 35, 255, 106, 89, 27, 255, 112, 90, 34, 255, 115, 85, 22, 255, 123, 85, 35, 255, 117, 83, 19, 255, 113, 82, 15, 255, 111, 79, 22, 255, 114, 75, 27, 255, 119, 76, 25, 255, 118, 78, 16, 255, 111, 71, 18, 255, 107, 71, 14, 255, 104, 68, 15, 255, 107, 70, 19, 255, 107, 64, 9, 255, 108, 67, 9, 255, 107, 67, 19, 255, 104, 64, 15, 255, 106, 65, 12, 255, 106, 62, 10, 255, 107, 60, 10, 255, 109, 60, 8, 255, 110, 59, 14, 255, 110, 61, 5, 255, 111, 61, 1, 255, 107, 57, 2, 255, 109, 59, 11, 255, 104, 55, 5, 255, 106, 50, 9, 255, 109, 51, 8, 255, 106, 54, 1, 255, 109, 57, 1, 255, 108, 53, 2, 255, 116, 54, 9, 255, 115, 52, 5, 255, 106, 52, 1, 255, 107, 48, 3, 255, 110, 49, 6, 255, 107, 49, 6, 255, 102, 45, 3, 255, 103, 46, 5, 255, 103, 43, 2, 255, 102, 44, 2, 255, 100, 46, 6, 255, 95, 41, 2, 255, 101, 43, 4, 255, 101, 44, 5, 255, 88, 39, 2, 255, 85, 39, 0, 255, 93, 41, 1, 255, 98, 40, 1, 255, 89, 37, 1, 255, 87, 36, 4, 255, 90, 41, 5, 255, 82, 35, 0, 255, 81, 32, 1, 255, 81, 34, 3, 255, 79, 35, 2, 255, 81, 38, 3, 255, 81, 35, 5, 255, 80, 32, 1, 255, 93, 34, 1, 255, 97, 40, 3, 255, 86, 37, 3, 255, 83, 26, 4, 255, 84, 27, 3, 255, 88, 33, 5, 255, 83, 33, 2, 255, 80, 29, 0, 255, 77, 29, 2, 255, 78, 29, 5, 255, 79, 32, 8, 255, 76, 28, 4, 255, 75, 33, 9, 255, 74, 31, 7, 255, 72, 24, 0, 255, 75, 29, 3, 255, 73, 29, 4, 255, 66, 26, 8, 255, 77, 31, 5, 255, 84, 27, 0, 255, 78, 30, 4, 255, 79, 29, 6, 255, 94, 30, 4, 255, 91, 33, 2, 255, 86, 35, 3, 255, 83, 32, 1, 255, 83, 28, 1, 255, 84, 28, 5, 255, 77, 27, 4, 255, 70, 24, 2, 255, 74, 26, 5, 255, 77, 27, 2, 255, 74, 26, 0, 255, 72, 29, 5, 255, 72, 28, 4, 255, 74, 25, 2, 255, 72, 25, 2, 255, 71, 25, 3, 255, 67, 21, 1, 255, 69, 23, 4, 255, 71, 27, 5, 255, 68, 24, 1, 255, 75, 28, 3, 255, 73, 24, 1, 255, 73, 25, 3, 255, 72, 25, 4, 255, 66, 22, 0, 255, 73, 26, 3, 255, 75, 24, 1, 255, 78, 26, 5, 255, 80, 23, 5, 255, 79, 24, 5, 255, 69, 22, 1, 255, 66, 24, 2, 255, 71, 25, 3, 255, 70, 22, 4, 255, 77, 20, 5, 255, 77, 23, 1, 255, 82, 28, 1, 255, 80, 24, 2, 255, 78, 19, 2, 255, 73, 22, 7, 255, 67, 21, 3, 255, 66, 21, 0, 255, 70, 23, 4, 255, 68, 20, 5, 255, 64, 19, 4, 255, 62, 23, 4, 255, 61, 22, 3, 255, 62, 16, 4, 255, 63, 20, 4, 255, 49, 17, 2, 255, 55, 14, 3, 255, 60, 16, 2, 255, 50, 16, 2, 255, 52, 18, 1, 255, 55, 21, 2, 255, 65, 22, 4, 255, 64, 18, 4, 255, 66, 16, 4, 255, 62, 18, 1, 255, 72, 23, 2, 255, 69, 16, 2, 255, 56, 11, 0, 255, 45, 13, 3, 255, 31, 10, 2, 255, 34, 12, 5, 255, 38, 11, 6, 255, 35, 10, 3, 255, 37, 13, 4, 255, 44, 17, 6, 255, 45, 14, 4, 255, 48, 14, 5, 255, 41, 10, 3, 255, 31, 12, 4, 255, 30, 18, 6, 255, 34, 15, 4, 255, 36, 12, 2, 255, 23, 12, 0, 255, 27, 9, 3, 255, 32, 10, 3, 255, 29, 10, 4, 255, 29, 10, 3, 255, 26, 10, 0, 255, 32, 14, 4, 255, 28, 9, 1, 255, 25, 7, 3, 255, 18, 8, 3, 255, 21, 8, 1, 255, 41, 12, 2, 255, 55, 14, 4, 255, 58, 16, 5, 255, 55, 14, 5, 255, 57, 14, 4, 255, 56, 14, 7, 255, 47, 11, 6, 255, 41, 10, 2, 255, 60, 15, 2, 255, 70, 18, 3, 255, 76, 19, 3, 255, 76, 21, 3, 255, 68, 21, 0, 255, 67, 19, 0, 255, 75, 17, 2, 255, 75, 17, 6, 255, 64, 18, 5, 255, 59, 13, 3, 255, 55, 12, 0, 255, 61, 16, 6, 255, 12, 8, 4, 255, 11, 7, 4, 255, 11, 7, 3, 255, 12, 8, 3, 255, 14, 7, 1, 255, 18, 9, 1, 255, 18, 8, 3, 255, 16, 8, 1, 255, 18, 11, 3, 255, 17, 9, 0, 255, 21, 11, 2, 255, 22, 13, 4, 255, 21, 11, 3, 255, 24, 12, 7, 255, 17, 7, 2, 255, 18, 8, 0, 255, 22, 12, 3, 255, 22, 12, 3, 255, 21, 11, 1, 255, 21, 13, 3, 255, 21, 12, 3, 255, 22, 11, 2, 255, 28, 14, 5, 255, 24, 11, 2, 255, 23, 14, 3, 255, 21, 16, 4, 255, 18, 13, 4, 255, 20, 11, 4, 255, 21, 14, 6, 255, 21, 16, 3, 255, 23, 17, 1, 255, 25, 16, 2, 255, 24, 12, 2, 255, 24, 12, 3, 255, 25, 15, 5, 255, 22, 13, 5, 255, 27, 15, 4, 255, 36, 16, 4, 255, 32, 16, 1, 255, 31, 18, 3, 255, 41, 16, 4, 255, 38, 16, 3, 255, 36, 17, 1, 255, 36, 19, 2, 255, 48, 18, 3, 255, 48, 22, 4, 255, 46, 20, 1, 255, 48, 19, 1, 255, 54, 22, 2, 255, 52, 21, 1, 255, 48, 22, 2, 255, 45, 20, 2, 255, 47, 23, 3, 255, 46, 22, 3, 255, 47, 20, 4, 255, 54, 22, 9, 255, 44, 21, 2, 255, 46, 24, 2, 255, 46, 23, 4, 255, 41, 23, 4, 255, 42, 26, 5, 255, 45, 25, 6, 255, 49, 24, 5, 255, 50, 24, 4, 255, 50, 27, 4, 255, 48, 26, 0, 255, 42, 23, 9, 255, 40, 23, 8, 255, 51, 30, 2, 255, 52, 31, 3, 255, 50, 25, 2, 255, 44, 24, 1, 255, 51, 27, 5, 255, 47, 23, 2, 255, 50, 26, 5, 255, 47, 25, 3, 255, 54, 29, 5, 255, 52, 26, 3, 255, 58, 24, 1, 255, 58, 28, 0, 255, 55, 34, 1, 255, 61, 32, 5, 255, 53, 31, 3, 255, 61, 31, 2, 255, 60, 29, 1, 255, 63, 31, 4, 255, 62, 31, 3, 255, 58, 34, 3, 255, 58, 32, 2, 255, 66, 32, 3, 255, 64, 30, 4, 255, 61, 32, 3, 255, 63, 32, 3, 255, 67, 33, 4, 255, 63, 32, 2, 255, 61, 34, 4, 255, 63, 35, 0, 255, 63, 38, 2, 255, 70, 34, 5, 255, 63, 37, 3, 255, 75, 35, 1, 255, 90, 38, 2, 255, 92, 38, 1, 255, 89, 36, 2, 255, 75, 35, 1, 255, 64, 33, 0, 255, 66, 35, 3, 255, 68, 37, 5, 255, 72, 32, 4, 255, 75, 35, 1, 255, 76, 37, 1, 255, 75, 35, 4, 255, 73, 31, 2, 255, 63, 35, 1, 255, 60, 34, 2, 255, 68, 33, 1, 255, 56, 29, 10, 255, 61, 36, 8, 255, 71, 36, 0, 255, 71, 33, 1, 255, 70, 37, 1, 255, 71, 35, 1, 255, 68, 34, 7, 255, 62, 31, 3, 255, 71, 35, 7, 255, 67, 33, 6, 255, 66, 38, 4, 255, 63, 35, 3, 255, 68, 35, 4, 255, 61, 35, 10, 255, 58, 30, 9, 255, 69, 37, 7, 255, 67, 38, 0, 255, 65, 38, 5, 255, 70, 42, 13, 255, 66, 40, 5, 255, 70, 42, 3, 255, 69, 46, 8, 255, 65, 45, 6, 255, 67, 47, 7, 255, 97, 53, 8, 255, 97, 52, 6, 255, 85, 53, 8, 255, 82, 52, 13, 255, 71, 50, 7, 255, 70, 50, 16, 255, 73, 50, 25, 255, 73, 53, 23, 255, 67, 55, 16, 255, 70, 61, 20, 255, 85, 59, 20, 255, 117, 66, 17, 255, 121, 64, 13, 255, 116, 66, 23, 255, 110, 67, 26, 255, 117, 72, 22, 255, 90, 65, 22, 255, 68, 64, 19, 255, 71, 67, 31, 255, 83, 75, 25, 255, 93, 75, 25, 255, 78, 67, 30, 255, 82, 71, 36, 255, 103, 75, 33, 255, 117, 79, 32, 255, 117, 79, 32, 255, 114, 80, 37, 255, 108, 81, 31, 255, 86, 76, 38, 255, 82, 73, 52, 255, 80, 80, 44, 255, 82, 83, 46, 255, 78, 80, 51, 255, 98, 81, 49, 255, 117, 88, 41, 255, 114, 96, 54, 255, 117, 96, 49, 255, 116, 97, 54, 255, 122, 98, 55, 255, 127, 99, 60, 255, 119, 102, 51, 255, 98, 98, 60, 255, 84, 92, 61, 255, 102, 102, 58, 255, 124, 109, 54, 255, 128, 103, 54, 255, 126, 106, 56, 255, 110, 106, 68, 255, 95, 103, 52, 255, 95, 105, 52, 255, 99, 105, 69, 255, 93, 101, 54, 255, 99, 102, 58, 255, 109, 108, 53, 255, 111, 106, 51, 255, 108, 102, 52, 255, 106, 102, 53, 255, 106, 103, 51, 255, 110, 108, 43, 255, 116, 105, 39, 255, 114, 103, 41, 255, 120, 102, 48, 255, 126, 103, 40, 255, 121, 100, 35, 255, 122, 93, 38, 255, 122, 94, 39, 255, 121, 91, 45, 255, 113, 89, 22, 255, 110, 90, 30, 255, 109, 89, 34, 255, 110, 91, 21, 255, 117, 88, 27, 255, 121, 86, 22, 255, 124, 83, 24, 255, 121, 80, 15, 255, 119, 80, 17, 255, 121, 85, 14, 255, 114, 81, 9, 255, 109, 77, 22, 255, 109, 76, 21, 255, 102, 70, 15, 255, 104, 71, 13, 255, 104, 68, 11, 255, 108, 69, 18, 255, 104, 68, 14, 255, 105, 66, 14, 255, 107, 65, 11, 255, 108, 64, 8, 255, 107, 64, 12, 255, 100, 62, 7, 255, 104, 57, 16, 255, 108, 56, 13, 255, 109, 59, 14, 255, 108, 60, 7, 255, 107, 57, 6, 255, 107, 57, 5, 255, 107, 55, 7, 255, 109, 54, 7, 255, 114, 54, 8, 255, 113, 51, 5, 255, 112, 53, 5, 255, 110, 53, 5, 255, 109, 51, 5, 255, 112, 51, 4, 255, 112, 49, 1, 255, 107, 51, 3, 255, 111, 47, 5, 255, 115, 46, 7, 255, 108, 47, 5, 255, 106, 45, 2, 255, 109, 46, 3, 255, 110, 45, 6, 255, 101, 42, 6, 255, 99, 44, 7, 255, 107, 47, 7, 255, 112, 45, 1, 255, 115, 44, 0, 255, 101, 43, 3, 255, 86, 41, 5, 255, 83, 40, 4, 255, 88, 42, 3, 255, 90, 40, 2, 255, 81, 36, 0, 255, 84, 36, 2, 255, 87, 36, 3, 255, 82, 37, 4, 255, 79, 34, 1, 255, 83, 36, 2, 255, 82, 36, 0, 255, 77, 28, 0, 255, 77, 34, 3, 255, 85, 35, 4, 255, 89, 35, 4, 255, 86, 38, 4, 255, 86, 32, 5, 255, 81, 31, 2, 255, 80, 31, 2, 255, 76, 27, 2, 255, 75, 27, 4, 255, 69, 32, 5, 255, 73, 32, 2, 255, 81, 33, 6, 255, 75, 27, 5, 255, 71, 25, 2, 255, 78, 31, 5, 255, 79, 28, 2, 255, 76, 26, 2, 255, 72, 26, 3, 255, 80, 29, 5, 255, 79, 28, 3, 255, 77, 33, 2, 255, 91, 31, 5, 255, 85, 27, 2, 255, 87, 31, 4, 255, 94, 34, 4, 255, 95, 35, 5, 255, 86, 28, 0, 255, 83, 26, 0, 255, 84, 25, 3, 255, 84, 26, 5, 255, 78, 25, 3, 255, 81, 26, 4, 255, 78, 26, 2, 255, 76, 28, 2, 255, 76, 26, 2, 255, 75, 26, 2, 255, 76, 29, 4, 255, 70, 25, 1, 255, 68, 21, 1, 255, 71, 24, 4, 255, 70, 24, 3, 255, 67, 25, 4, 255, 65, 25, 2, 255, 69, 26, 5, 255, 71, 25, 4, 255, 71, 24, 1, 255, 72, 24, 2, 255, 72, 26, 3, 255, 74, 25, 3, 255, 75, 25, 2, 255, 78, 30, 5, 255, 73, 28, 5, 255, 68, 24, 3, 255, 71, 22, 3, 255, 78, 24, 4, 255, 74, 23, 2, 255, 70, 24, 7, 255, 64, 18, 2, 255, 79, 24, 3, 255, 94, 23, 5, 255, 76, 20, 1, 255, 63, 21, 4, 255, 61, 18, 3, 255, 68, 22, 1, 255, 70, 23, 1, 255, 68, 19, 0, 255, 68, 18, 1, 255, 65, 17, 3, 255, 64, 23, 5, 255, 65, 22, 1, 255, 64, 17, 1, 255, 66, 21, 3, 255, 51, 18, 0, 255, 60, 21, 6, 255, 63, 17, 3, 255, 56, 19, 3, 255, 58, 18, 2, 255, 51, 19, 1, 255, 56, 19, 1, 255, 70, 17, 5, 255, 70, 15, 6, 255, 72, 17, 3, 255, 65, 20, 4, 255, 63, 15, 2, 255, 55, 15, 3, 255, 45, 14, 2, 255, 48, 14, 5, 255, 47, 11, 3, 255, 47, 13, 7, 255, 44, 11, 3, 255, 47, 13, 3, 255, 55, 16, 6, 255, 53, 15, 3, 255, 49, 14, 1, 255, 43, 13, 0, 255, 40, 13, 4, 255, 37, 18, 6, 255, 45, 14, 2, 255, 47, 11, 5, 255, 39, 13, 2, 255, 31, 13, 2, 255, 36, 14, 3, 255, 32, 10, 0, 255, 35, 13, 2, 255, 32, 10, 2, 255, 33, 12, 4, 255, 31, 11, 2, 255, 27, 12, 5, 255, 18, 8, 3, 255, 23, 8, 3, 255, 30, 8, 2, 255, 32, 13, 2, 255, 30, 12, 0, 255, 39, 12, 4, 255, 45, 10, 1, 255, 45, 10, 4, 255, 46, 14, 8, 255, 50, 12, 4, 255, 81, 19, 5, 255, 83, 24, 4, 255, 94, 27, 3, 255, 96, 27, 2, 255, 90, 28, 3, 255, 89, 27, 5, 255, 80, 22, 1, 255, 79, 20, 2, 255, 85, 19, 4, 255, 73, 18, 0, 255, 65, 16, 0, 255, 61, 14, 2, 255, 12, 8, 5, 255, 10, 6, 3, 255, 10, 7, 2, 255, 12, 7, 2, 255, 16, 9, 2, 255, 16, 8, 0, 255, 18, 9, 3, 255, 17, 11, 4, 255, 17, 11, 2, 255, 18, 10, 2, 255, 18, 8, 0, 255, 23, 13, 4, 255, 21, 12, 2, 255, 19, 10, 2, 255, 19, 11, 3, 255, 20, 12, 3, 255, 21, 10, 4, 255, 23, 11, 4, 255, 20, 10, 3, 255, 20, 15, 5, 255, 20, 13, 3, 255, 22, 12, 3, 255, 29, 16, 8, 255, 24, 10, 3, 255, 23, 12, 4, 255, 21, 13, 2, 255, 22, 15, 3, 255, 18, 14, 3, 255, 16, 9, 1, 255, 25, 14, 5, 255, 24, 13, 3, 255, 23, 15, 5, 255, 25, 13, 6, 255, 27, 13, 2, 255, 32, 16, 1, 255, 28, 15, 0, 255, 32, 19, 3, 255, 34, 17, 4, 255, 31, 14, 1, 255, 36, 20, 4, 255, 41, 18, 5, 255, 36, 18, 3, 255, 44, 20, 6, 255, 45, 20, 3, 255, 45, 21, 3, 255, 44, 20, 3, 255, 46, 18, 1, 255, 49, 20, 2, 255, 49, 21, 2, 255, 47, 21, 1, 255, 50, 24, 3, 255, 46, 20, 3, 255, 53, 22, 4, 255, 50, 24, 5, 255, 42, 20, 3, 255, 44, 20, 4, 255, 39, 24, 3, 255, 43, 20, 2, 255, 45, 25, 4, 255, 38, 22, 1, 255, 42, 24, 4, 255, 44, 23, 2, 255, 46, 22, 2, 255, 50, 25, 5, 255, 48, 22, 6, 255, 48, 26, 10, 255, 37, 26, 5, 255, 52, 30, 3, 255, 50, 24, 1, 255, 52, 27, 5, 255, 60, 30, 4, 255, 53, 26, 4, 255, 55, 29, 7, 255, 55, 26, 2, 255, 48, 24, 3, 255, 45, 24, 1, 255, 55, 32, 0, 255, 53, 28, 2, 255, 54, 27, 6, 255, 54, 32, 6, 255, 50, 33, 1, 255, 57, 27, 1, 255, 62, 38, 4, 255, 71, 37, 8, 255, 56, 29, 0, 255, 56, 31, 1, 255, 63, 30, 5, 255, 61, 31, 3, 255, 61, 32, 2, 255, 68, 35, 7, 255, 63, 36, 6, 255, 63, 35, 5, 255, 65, 34, 3, 255, 67, 35, 4, 255, 67, 31, 2, 255, 62, 36, 6, 255, 61, 34, 3, 255, 62, 33, 6, 255, 60, 36, 7, 255, 59, 34, 2, 255, 69, 36, 1, 255, 94, 37, 4, 255, 85, 35, 5, 255, 71, 36, 5, 255, 63, 33, 1, 255, 65, 35, 2, 255, 69, 36, 3, 255, 66, 32, 0, 255, 62, 36, 2, 255, 61, 36, 5, 255, 63, 35, 1, 255, 58, 34, 0, 255, 65, 34, 2, 255, 69, 39, 6, 255, 63, 31, 5, 255, 65, 31, 1, 255, 60, 35, 3, 255, 63, 36, 7, 255, 66, 31, 2, 255, 68, 33, 6, 255, 65, 33, 4, 255, 66, 32, 1, 255, 64, 30, 3, 255, 66, 37, 4, 255, 61, 37, 2, 255, 64, 36, 5, 255, 65, 34, 1, 255, 68, 39, 5, 255, 67, 37, 1, 255, 62, 38, 8, 255, 58, 32, 8, 255, 66, 37, 8, 255, 66, 40, 3, 255, 67, 39, 5, 255, 71, 38, 11, 255, 65, 44, 4, 255, 68, 44, 5, 255, 71, 43, 6, 255, 68, 51, 4, 255, 68, 51, 11, 255, 96, 55, 10, 255, 106, 57, 17, 255, 95, 51, 18, 255, 81, 46, 15, 255, 71, 51, 9, 255, 66, 54, 17, 255, 71, 47, 25, 255, 78, 53, 15, 255, 75, 59, 11, 255, 68, 59, 9, 255, 70, 60, 16, 255, 91, 62, 22, 255, 112, 69, 20, 255, 112, 72, 14, 255, 106, 65, 23, 255, 85, 63, 22, 255, 72, 62, 17, 255, 75, 67, 32, 255, 98, 69, 25, 255, 110, 73, 30, 255, 108, 75, 25, 255, 94, 71, 22, 255, 97, 78, 35, 255, 114, 79, 31, 255, 119, 77, 35, 255, 123, 79, 27, 255, 116, 83, 34, 255, 98, 78, 38, 255, 82, 78, 40, 255, 77, 81, 41, 255, 87, 83, 43, 255, 89, 84, 43, 255, 87, 85, 47, 255, 89, 88, 38, 255, 86, 89, 42, 255, 92, 91, 56, 255, 128, 103, 48, 255, 124, 101, 50, 255, 118, 99, 57, 255, 126, 100, 50, 255, 123, 105, 53, 255, 99, 103, 49, 255, 90, 98, 51, 255, 118, 108, 58, 255, 128, 112, 52, 255, 121, 109, 51, 255, 112, 106, 60, 255, 98, 103, 71, 255, 90, 104, 58, 255, 92, 106, 56, 255, 97, 103, 55, 255, 105, 104, 60, 255, 121, 105, 61, 255, 122, 110, 52, 255, 118, 105, 58, 255, 116, 105, 59, 255, 119, 110, 44, 255, 121, 109, 42, 255, 121, 103, 44, 255, 123, 106, 44, 255, 125, 104, 45, 255, 124, 99, 45, 255, 124, 99, 41, 255, 123, 99, 34, 255, 116, 97, 28, 255, 115, 96, 41, 255, 112, 89, 42, 255, 114, 89, 34, 255, 115, 91, 33, 255, 111, 89, 27, 255, 111, 87, 31, 255, 113, 82, 24, 255, 120, 84, 28, 255, 121, 82, 23, 255, 119, 79, 28, 255, 115, 80, 17, 255, 115, 79, 19, 255, 108, 70, 26, 255, 105, 71, 19, 255, 106, 71, 24, 255, 104, 71, 23, 255, 101, 67, 19, 255, 102, 66, 26, 255, 100, 66, 17, 255, 101, 68, 17, 255, 103, 66, 13, 255, 108, 62, 11, 255, 109, 64, 3, 255, 106, 62, 16, 255, 101, 62, 15, 255, 110, 62, 19, 255, 110, 56, 14, 255, 108, 60, 5, 255, 106, 59, 8, 255, 104, 56, 10, 255, 106, 56, 11, 255, 107, 55, 6, 255, 119, 56, 7, 255, 119, 54, 3, 255, 118, 52, 5, 255, 118, 54, 9, 255, 111, 47, 4, 255, 114, 50, 7, 255, 115, 52, 7, 255, 112, 49, 5, 255, 116, 46, 7, 255, 116, 46, 7, 255, 115, 47, 6, 255, 116, 45, 3, 255, 116, 47, 8, 255, 103, 40, 4, 255, 102, 46, 4, 255, 100, 46, 4, 255, 103, 45, 5, 255, 103, 40, 2, 255, 110, 44, 4, 255, 114, 48, 2, 255, 113, 44, 4, 255, 111, 38, 6, 255, 107, 38, 6, 255, 101, 39, 3, 255, 97, 40, 2, 255, 84, 39, 3, 255, 82, 33, 2, 255, 85, 33, 4, 255, 78, 34, 2, 255, 80, 35, 2, 255, 85, 35, 3, 255, 79, 33, 1, 255, 75, 29, 3, 255, 73, 29, 2, 255, 76, 34, 3, 255, 77, 32, 0, 255, 76, 30, 1, 255, 70, 32, 2, 255, 76, 33, 2, 255, 77, 33, 4, 255, 74, 27, 3, 255, 76, 29, 6, 255, 69, 33, 5, 255, 71, 31, 0, 255, 78, 30, 1, 255, 77, 33, 5, 255, 75, 29, 1, 255, 79, 29, 1, 255, 93, 37, 7, 255, 89, 33, 6, 255, 77, 28, 2, 255, 81, 32, 0, 255, 80, 26, 0, 255, 74, 31, 2, 255, 85, 29, 1, 255, 85, 31, 0, 255, 81, 34, 4, 255, 89, 32, 4, 255, 89, 33, 2, 255, 85, 30, 0, 255, 84, 30, 1, 255, 84, 28, 0, 255, 86, 32, 2, 255, 85, 30, 2, 255, 82, 24, 3, 255, 77, 29, 3, 255, 80, 31, 6, 255, 80, 28, 4, 255, 78, 25, 1, 255, 76, 29, 4, 255, 73, 30, 6, 255, 69, 23, 1, 255, 72, 25, 5, 255, 72, 26, 4, 255, 69, 25, 2, 255, 68, 26, 5, 255, 64, 19, 2, 255, 69, 23, 3, 255, 71, 23, 1, 255, 73, 22, 1, 255, 81, 29, 6, 255, 75, 23, 2, 255, 74, 22, 2, 255, 78, 28, 3, 255, 69, 27, 3, 255, 65, 24, 1, 255, 78, 25, 7, 255, 79, 22, 3, 255, 75, 26, 3, 255, 71, 25, 3, 255, 69, 23, 3, 255, 71, 19, 0, 255, 78, 21, 2, 255, 77, 23, 2, 255, 72, 22, 0, 255, 77, 23, 3, 255, 76, 21, 0, 255, 80, 25, 4, 255, 80, 23, 3, 255, 77, 20, 1, 255, 72, 20, 2, 255, 65, 20, 2, 255, 67, 20, 1, 255, 67, 21, 4, 255, 66, 19, 0, 255, 57, 18, 0, 255, 66, 25, 7, 255, 66, 19, 1, 255, 59, 19, 1, 255, 68, 19, 5, 255, 64, 18, 3, 255, 63, 19, 2, 255, 59, 18, 4, 255, 49, 15, 5, 255, 51, 19, 5, 255, 50, 19, 3, 255, 58, 16, 4, 255, 54, 19, 5, 255, 56, 16, 4, 255, 57, 14, 2, 255, 55, 17, 2, 255, 55, 15, 2, 255, 57, 15, 4, 255, 59, 16, 4, 255, 61, 16, 4, 255, 57, 14, 3, 255, 51, 16, 3, 255, 42, 13, 0, 255, 48, 12, 2, 255, 49, 17, 4, 255, 41, 18, 3, 255, 41, 14, 3, 255, 42, 17, 8, 255, 43, 12, 2, 255, 37, 11, 3, 255, 35, 12, 4, 255, 35, 15, 5, 255, 30, 11, 2, 255, 31, 13, 1, 255, 34, 15, 2, 255, 36, 12, 2, 255, 31, 12, 5, 255, 21, 11, 3, 255, 23, 8, 3, 255, 26, 9, 2, 255, 18, 7, 0, 255, 15, 7, 1, 255, 17, 11, 0, 255, 27, 9, 2, 255, 31, 10, 4, 255, 39, 11, 1, 255, 79, 21, 1, 255, 96, 29, 4, 255, 104, 31, 4, 255, 105, 29, 1, 255, 100, 31, 3, 255, 98, 30, 3, 255, 102, 28, 4, 255, 101, 28, 4, 255, 95, 26, 1, 255, 99, 27, 4, 255, 87, 25, 5, 255, 71, 17, 1, 255, 11, 5, 3, 255, 11, 5, 2, 255, 11, 6, 1, 255, 14, 7, 1, 255, 16, 9, 3, 255, 17, 10, 3, 255, 16, 9, 3, 255, 18, 11, 5, 255, 15, 10, 2, 255, 19, 11, 3, 255, 18, 8, 1, 255, 21, 11, 2, 255, 21, 11, 2, 255, 21, 13, 2, 255, 19, 12, 1, 255, 17, 10, 1, 255, 22, 12, 5, 255, 23, 12, 6, 255, 21, 10, 3, 255, 14, 9, 1, 255, 18, 11, 2, 255, 19, 9, 1, 255, 20, 10, 2, 255, 23, 11, 2, 255, 26, 13, 5, 255, 25, 12, 2, 255, 21, 13, 1, 255, 17, 14, 2, 255, 18, 10, 1, 255, 29, 13, 4, 255, 29, 13, 5, 255, 20, 10, 2, 255, 28, 13, 7, 255, 34, 16, 4, 255, 36, 18, 1, 255, 30, 15, 0, 255, 33, 18, 2, 255, 34, 19, 5, 255, 40, 17, 5, 255, 40, 21, 6, 255, 37, 20, 4, 255, 35, 15, 0, 255, 47, 20, 7, 255, 44, 20, 3, 255, 44, 18, 2, 255, 50, 24, 7, 255, 49, 21, 3, 255, 50, 21, 3, 255, 46, 22, 2, 255, 43, 19, 0, 255, 45, 18, 2, 255, 45, 21, 3, 255, 41, 22, 1, 255, 42, 18, 0, 255, 47, 18, 2, 255, 43, 19, 3, 255, 37, 26, 4, 255, 44, 21, 1, 255, 43, 25, 3, 255, 39, 24, 1, 255, 44, 24, 3, 255, 45, 23, 2, 255, 45, 24, 3, 255, 48, 22, 1, 255, 50, 24, 1, 255, 48, 23, 4, 255, 38, 22, 4, 255, 51, 24, 3, 255, 44, 23, 6, 255, 45, 22, 5, 255, 50, 27, 3, 255, 56, 29, 3, 255, 52, 28, 1, 255, 49, 29, 5, 255, 49, 26, 1, 255, 52, 29, 1, 255, 48, 30, 1, 255, 50, 31, 2, 255, 50, 24, 7, 255, 57, 26, 5, 255, 52, 28, 3, 255, 58, 29, 1, 255, 70, 28, 1, 255, 70, 30, 4, 255, 58, 29, 1, 255, 55, 31, 1, 255, 60, 31, 3, 255, 61, 30, 2, 255, 57, 31, 1, 255, 58, 34, 3, 255, 64, 31, 5, 255, 63, 32, 5, 255, 59, 32, 3, 255, 69, 35, 7, 255, 62, 33, 5, 255, 58, 32, 3, 255, 64, 30, 3, 255, 69, 31, 2, 255, 57, 36, 0, 255, 65, 35, 0, 255, 64, 36, 4, 255, 54, 29, 2, 255, 60, 28, 4, 255, 54, 32, 3, 255, 66, 33, 6, 255, 63, 33, 3, 255, 59, 35, 4, 255, 65, 37, 8, 255, 58, 34, 4, 255, 67, 35, 7, 255, 73, 33, 5, 255, 62, 35, 6, 255, 62, 33, 3, 255, 70, 33, 1, 255, 65, 35, 4, 255, 60, 34, 7, 255, 70, 41, 3, 255, 63, 33, 4, 255, 55, 30, 3, 255, 65, 37, 4, 255, 80, 35, 5, 255, 83, 33, 3, 255, 72, 30, 4, 255, 69, 35, 4, 255, 63, 36, 2, 255, 63, 34, 8, 255, 64, 33, 4, 255, 62, 32, 5, 255, 57, 39, 10, 255, 64, 38, 3, 255, 72, 37, 1, 255, 66, 36, 3, 255, 61, 40, 10, 255, 65, 38, 7, 255, 67, 37, 8, 255, 64, 41, 12, 255, 60, 42, 9, 255, 63, 45, 15, 255, 64, 42, 8, 255, 76, 49, 11, 255, 111, 55, 12, 255, 114, 57, 4, 255, 85, 51, 6, 255, 66, 50, 8, 255, 72, 56, 4, 255, 64, 55, 7, 255, 66, 54, 19, 255, 68, 56, 13, 255, 82, 62, 7, 255, 76, 62, 11, 255, 71, 58, 24, 255, 69, 54, 22, 255, 73, 59, 27, 255, 78, 57, 30, 255, 77, 57, 27, 255, 68, 61, 28, 255, 72, 65, 29, 255, 100, 71, 26, 255, 123, 75, 14, 255, 119, 72, 37, 255, 115, 74, 18, 255, 111, 76, 29, 255, 108, 77, 38, 255, 111, 77, 36, 255, 115, 83, 40, 255, 109, 79, 35, 255, 91, 75, 38, 255, 74, 76, 41, 255, 77, 83, 45, 255, 75, 83, 44, 255, 84, 83, 48, 255, 84, 86, 42, 255, 88, 87, 48, 255, 86, 90, 45, 255, 83, 92, 51, 255, 92, 92, 47, 255, 110, 96, 51, 255, 113, 102, 59, 255, 114, 100, 61, 255, 115, 98, 58, 255, 111, 102, 61, 255, 92, 97, 64, 255, 97, 103, 57, 255, 110, 103, 60, 255, 106, 101, 58, 255, 98, 104, 58, 255, 94, 102, 59, 255, 93, 102, 58, 255, 91, 106, 61, 255, 91, 106, 57, 255, 108, 110, 56, 255, 118, 109, 52, 255, 129, 112, 49, 255, 130, 111, 51, 255, 126, 108, 63, 255, 120, 107, 54, 255, 122, 108, 53, 255, 122, 105, 52, 255, 128, 102, 57, 255, 126, 104, 47, 255, 127, 102, 30, 255, 126, 100, 38, 255, 122, 98, 44, 255, 123, 97, 44, 255, 116, 95, 35, 255, 123, 93, 29, 255, 124, 92, 42, 255, 120, 91, 36, 255, 118, 93, 22, 255, 118, 89, 32, 255, 119, 82, 40, 255, 113, 82, 29, 255, 110, 82, 25, 255, 111, 82, 23, 255, 107, 78, 23, 255, 105, 77, 23, 255, 99, 71, 23, 255, 100, 71, 25, 255, 102, 73, 19, 255, 107, 75, 5, 255, 114, 75, 14, 255, 110, 68, 17, 255, 111, 70, 13, 255, 106, 66, 10, 255, 108, 66, 20, 255, 104, 65, 9, 255, 103, 60, 20, 255, 106, 63, 15, 255, 105, 61, 11, 255, 108, 62, 8, 255, 112, 62, 3, 255, 113, 60, 6, 255, 108, 57, 0, 255, 109, 56, 8, 255, 110, 58, 9, 255, 107, 55, 6, 255, 113, 61, 6, 255, 114, 57, 6, 255, 120, 49, 10, 255, 122, 48, 9, 255, 118, 51, 3, 255, 116, 55, 4, 255, 115, 52, 5, 255, 111, 50, 6, 255, 110, 47, 7, 255, 116, 44, 6, 255, 112, 45, 4, 255, 113, 49, 5, 255, 119, 46, 4, 255, 115, 46, 6, 255, 104, 44, 6, 255, 102, 50, 4, 255, 101, 47, 4, 255, 106, 44, 6, 255, 107, 42, 6, 255, 106, 42, 5, 255, 104, 42, 6, 255, 101, 41, 1, 255, 110, 43, 0, 255, 122, 42, 2, 255, 116, 36, 2, 255, 106, 37, 6, 255, 91, 36, 4, 255, 85, 35, 4, 255, 81, 32, 5, 255, 74, 29, 1, 255, 84, 37, 5, 255, 85, 34, 3, 255, 85, 34, 2, 255, 89, 32, 5, 255, 88, 29, 6, 255, 79, 34, 8, 255, 75, 32, 5, 255, 85, 31, 4, 255, 82, 31, 2, 255, 75, 28, 3, 255, 77, 31, 4, 255, 76, 30, 1, 255, 75, 31, 1, 255, 77, 34, 4, 255, 77, 34, 7, 255, 78, 29, 4, 255, 75, 31, 2, 255, 78, 34, 5, 255, 81, 31, 2, 255, 87, 31, 1, 255, 87, 32, 5, 255, 80, 29, 5, 255, 72, 31, 4, 255, 71, 31, 2, 255, 77, 29, 5, 255, 73, 28, 5, 255, 78, 25, 5, 255, 79, 27, 4, 255, 84, 28, 2, 255, 85, 31, 3, 255, 82, 31, 1, 255, 85, 30, 1, 255, 88, 28, 0, 255, 87, 29, 0, 255, 82, 29, 0, 255, 79, 24, 1, 255, 77, 26, 2, 255, 76, 27, 2, 255, 79, 28, 1, 255, 81, 28, 3, 255, 75, 26, 3, 255, 72, 27, 2, 255, 71, 25, 2, 255, 71, 23, 4, 255, 74, 27, 6, 255, 71, 25, 1, 255, 69, 21, 2, 255, 70, 20, 2, 255, 71, 23, 0, 255, 69, 24, 3, 255, 69, 24, 3, 255, 73, 26, 5, 255, 76, 27, 3, 255, 74, 24, 0, 255, 76, 27, 2, 255, 80, 31, 6, 255, 74, 21, 2, 255, 77, 25, 6, 255, 72, 25, 4, 255, 72, 25, 2, 255, 75, 27, 4, 255, 65, 25, 1, 255, 64, 24, 1, 255, 61, 23, 1, 255, 67, 22, 0, 255, 76, 29, 3, 255, 81, 25, 1, 255, 74, 20, 3, 255, 80, 24, 4, 255, 83, 25, 3, 255, 84, 24, 5, 255, 77, 19, 0, 255, 70, 22, 1, 255, 71, 21, 2, 255, 73, 24, 8, 255, 77, 25, 5, 255, 71, 24, 5, 255, 67, 22, 2, 255, 68, 20, 1, 255, 66, 24, 4, 255, 63, 17, 2, 255, 63, 15, 1, 255, 65, 18, 1, 255, 59, 18, 5, 255, 55, 16, 8, 255, 60, 19, 6, 255, 58, 22, 2, 255, 62, 17, 3, 255, 52, 16, 1, 255, 61, 14, 1, 255, 55, 13, 0, 255, 50, 16, 2, 255, 53, 14, 3, 255, 54, 16, 5, 255, 48, 15, 2, 255, 46, 16, 3, 255, 45, 14, 3, 255, 45, 15, 5, 255, 39, 15, 4, 255, 48, 19, 5, 255, 65, 17, 4, 255, 46, 15, 0, 255, 51, 13, 2, 255, 43, 11, 4, 255, 31, 13, 1, 255, 25, 12, 1, 255, 28, 12, 0, 255, 33, 13, 2, 255, 37, 13, 4, 255, 38, 12, 4, 255, 39, 12, 3, 255, 35, 11, 0, 255, 31, 13, 2, 255, 27, 11, 3, 255, 26, 9, 2, 255, 21, 7, 2, 255, 21, 8, 2, 255, 30, 11, 8, 255, 17, 10, 5, 255, 19, 9, 1, 255, 19, 4, 2, 255, 44, 13, 6, 255, 89, 26, 6, 255, 109, 28, 4, 255, 105, 26, 2, 255, 104, 31, 1, 255, 110, 33, 5, 255, 108, 31, 3, 255, 106, 28, 1, 255, 107, 29, 1, 255, 105, 29, 1, 255, 105, 27, 1, 255, 94, 25, 1, 255, 84, 21, 1, 255, 19, 7, 6, 255, 16, 5, 2, 255, 13, 5, 0, 255, 16, 9, 2, 255, 15, 8, 3, 255, 12, 7, 1, 255, 13, 6, 0, 255, 18, 11, 5, 255, 14, 9, 3, 255, 16, 8, 1, 255, 22, 10, 5, 255, 23, 10, 4, 255, 22, 10, 3, 255, 25, 9, 3, 255, 20, 9, 2, 255, 19, 10, 1, 255, 19, 10, 1, 255, 24, 15, 4, 255, 23, 16, 2, 255, 20, 10, 1, 255, 22, 12, 3, 255, 21, 11, 4, 255, 20, 12, 5, 255, 18, 9, 1, 255, 23, 12, 4, 255, 23, 12, 3, 255, 20, 11, 1, 255, 23, 15, 6, 255, 21, 12, 3, 255, 24, 11, 1, 255, 28, 15, 3, 255, 28, 14, 4, 255, 28, 11, 1, 255, 31, 16, 1, 255, 29, 17, 3, 255, 23, 14, 1, 255, 30, 18, 4, 255, 35, 17, 1, 255, 46, 19, 5, 255, 32, 15, 1, 255, 35, 17, 2, 255, 39, 19, 5, 255, 38, 19, 3, 255, 40, 23, 4, 255, 52, 17, 3, 255, 54, 19, 4, 255, 45, 19, 2, 255, 46, 21, 2, 255, 50, 23, 6, 255, 47, 18, 4, 255, 39, 16, 2, 255, 44, 19, 3, 255, 42, 24, 3, 255, 42, 22, 1, 255, 45, 22, 3, 255, 47, 22, 4, 255, 42, 22, 1, 255, 47, 21, 3, 255, 43, 23, 6, 255, 38, 23, 3, 255, 43, 22, 3, 255, 43, 21, 2, 255, 45, 24, 3, 255, 50, 23, 4, 255, 40, 22, 3, 255, 42, 25, 2, 255, 39, 22, 6, 255, 47, 24, 6, 255, 49, 28, 3, 255, 45, 24, 3, 255, 47, 23, 4, 255, 52, 28, 5, 255, 51, 30, 3, 255, 50, 27, 2, 255, 56, 26, 3, 255, 58, 29, 7, 255, 52, 26, 2, 255, 53, 31, 5, 255, 49, 25, 5, 255, 64, 21, 3, 255, 56, 26, 1, 255, 47, 29, 3, 255, 54, 26, 5, 255, 52, 27, 1, 255, 57, 31, 4, 255, 58, 32, 3, 255, 60, 35, 4, 255, 61, 30, 2, 255, 62, 29, 2, 255, 58, 32, 1, 255, 64, 31, 1, 255, 72, 32, 5, 255, 64, 31, 3, 255, 62, 33, 2, 255, 64, 35, 3, 255, 63, 35, 3, 255, 68, 33, 2, 255, 67, 36, 3, 255, 59, 36, 4, 255, 62, 32, 3, 255, 67, 34, 5, 255, 58, 36, 7, 255, 58, 35, 4, 255, 63, 31, 1, 255, 74, 33, 4, 255, 68, 34, 5, 255, 54, 32, 1, 255, 54, 30, 2, 255, 66, 30, 8, 255, 67, 33, 6, 255, 62, 33, 1, 255, 67, 29, 5, 255, 64, 32, 4, 255, 63, 35, 0, 255, 68, 39, 2, 255, 68, 38, 8, 255, 70, 33, 4, 255, 64, 32, 6, 255, 64, 31, 6, 255, 96, 43, 7, 255, 106, 40, 2, 255, 90, 35, 6, 255, 65, 27, 3, 255, 67, 32, 1, 255, 74, 36, 6, 255, 67, 31, 7, 255, 66, 35, 6, 255, 64, 34, 4, 255, 58, 34, 10, 255, 58, 37, 6, 255, 64, 35, 0, 255, 70, 38, 6, 255, 63, 38, 5, 255, 65, 41, 11, 255, 72, 38, 4, 255, 60, 41, 3, 255, 64, 45, 11, 255, 68, 43, 14, 255, 68, 45, 7, 255, 62, 45, 8, 255, 69, 45, 18, 255, 71, 49, 18, 255, 66, 50, 9, 255, 73, 50, 14, 255, 71, 52, 19, 255, 65, 50, 22, 255, 68, 49, 22, 255, 74, 55, 21, 255, 77, 56, 10, 255, 74, 59, 9, 255, 65, 61, 21, 255, 66, 57, 31, 255, 69, 60, 22, 255, 70, 65, 15, 255, 70, 62, 27, 255, 89, 69, 12, 255, 83, 68, 25, 255, 111, 76, 29, 255, 117, 77, 32, 255, 117, 77, 31, 255, 111, 77, 33, 255, 109, 79, 21, 255, 105, 75, 30, 255, 93, 75, 36, 255, 86, 76, 38, 255, 79, 77, 41, 255, 80, 78, 39, 255, 82, 79, 36, 255, 82, 83, 37, 255, 82, 83, 40, 255, 85, 83, 50, 255, 87, 85, 59, 255, 79, 86, 57, 255, 80, 89, 56, 255, 87, 92, 60, 255, 91, 93, 57, 255, 87, 96, 51, 255, 96, 101, 45, 255, 91, 96, 57, 255, 86, 93, 64, 255, 94, 99, 68, 255, 91, 100, 65, 255, 89, 103, 61, 255, 89, 105, 58, 255, 87, 101, 66, 255, 91, 101, 69, 255, 94, 106, 63, 255, 93, 109, 64, 255, 92, 105, 62, 255, 101, 104, 58, 255, 121, 112, 62, 255, 131, 116, 51, 255, 128, 114, 45, 255, 128, 108, 60, 255, 129, 111, 54, 255, 125, 110, 45, 255, 124, 109, 45, 255, 126, 105, 56, 255, 128, 103, 57, 255, 131, 106, 38, 255, 127, 105, 21, 255, 127, 103, 44, 255, 125, 96, 52, 255, 122, 98, 42, 255, 119, 96, 30, 255, 124, 94, 38, 255, 123, 90, 38, 255, 123, 88, 32, 255, 122, 91, 22, 255, 123, 91, 30, 255, 120, 83, 36, 255, 120, 83, 27, 255, 116, 81, 30, 255, 107, 77, 24, 255, 104, 75, 19, 255, 106, 78, 20, 255, 105, 76, 26, 255, 99, 77, 14, 255, 97, 76, 15, 255, 110, 75, 14, 255, 117, 67, 13, 255, 120, 66, 11, 255, 120, 68, 21, 255, 112, 67, 15, 255, 107, 61, 16, 255, 107, 63, 15, 255, 108, 61, 18, 255, 110, 60, 14, 255, 112, 60, 14, 255, 115, 63, 4, 255, 111, 59, 7, 255, 112, 59, 6, 255, 116, 61, 1, 255, 117, 59, 4, 255, 118, 56, 14, 255, 113, 49, 8, 255, 114, 51, 6, 255, 114, 54, 2, 255, 113, 53, 9, 255, 111, 53, 10, 255, 113, 51, 9, 255, 114, 51, 6, 255, 111, 51, 7, 255, 106, 48, 1, 255, 107, 48, 3, 255, 109, 51, 7, 255, 110, 51, 5, 255, 111, 47, 3, 255, 109, 46, 4, 255, 105, 44, 7, 255, 100, 40, 5, 255, 106, 43, 3, 255, 109, 45, 3, 255, 110, 45, 6, 255, 110, 43, 5, 255, 111, 41, 3, 255, 111, 37, 6, 255, 104, 40, 4, 255, 102, 43, 3, 255, 108, 43, 3, 255, 109, 38, 2, 255, 111, 39, 4, 255, 104, 37, 4, 255, 87, 37, 3, 255, 76, 34, 2, 255, 81, 33, 3, 255, 86, 36, 4, 255, 85, 35, 1, 255, 87, 36, 3, 255, 85, 35, 3, 255, 89, 32, 2, 255, 87, 35, 2, 255, 80, 33, 1, 255, 88, 36, 3, 255, 91, 34, 3, 255, 89, 34, 2, 255, 84, 33, 2, 255, 80, 30, 5, 255, 74, 30, 5, 255, 82, 30, 6, 255, 77, 33, 2, 255, 75, 32, 3, 255, 74, 26, 4, 255, 75, 29, 8, 255, 73, 25, 3, 255, 76, 24, 1, 255, 75, 25, 2, 255, 73, 28, 4, 255, 75, 30, 3, 255, 63, 26, 2, 255, 69, 28, 8, 255, 71, 25, 5, 255, 74, 23, 2, 255, 75, 29, 5, 255, 71, 29, 3, 255, 81, 28, 2, 255, 87, 29, 5, 255, 83, 26, 0, 255, 84, 26, 1, 255, 84, 26, 3, 255, 83, 25, 2, 255, 81, 28, 2, 255, 79, 25, 4, 255, 79, 26, 3, 255, 80, 28, 1, 255, 81, 30, 4, 255, 79, 27, 5, 255, 81, 29, 5, 255, 74, 22, 2, 255, 73, 22, 7, 255, 71, 24, 4, 255, 71, 25, 0, 255, 73, 25, 3, 255, 76, 25, 5, 255, 74, 24, 2, 255, 74, 26, 2, 255, 79, 29, 4, 255, 78, 26, 2, 255, 78, 27, 3, 255, 72, 26, 1, 255, 75, 27, 1, 255, 85, 29, 6, 255, 84, 24, 4, 255, 76, 22, 2, 255, 68, 24, 3, 255, 66, 23, 3, 255, 70, 21, 1, 255, 74, 23, 2, 255, 81, 24, 4, 255, 77, 25, 2, 255, 79, 21, 2, 255, 73, 23, 3, 255, 68, 19, 1, 255, 62, 21, 4, 255, 70, 24, 3, 255, 73, 21, 1, 255, 80, 22, 4, 255, 77, 21, 2, 255, 74, 23, 3, 255, 79, 21, 2, 255, 76, 20, 3, 255, 82, 21, 2, 255, 78, 25, 5, 255, 67, 22, 2, 255, 65, 21, 1, 255, 60, 19, 3, 255, 58, 17, 1, 255, 60, 22, 3, 255, 68, 23, 3, 255, 63, 20, 3, 255, 70, 18, 6, 255, 70, 21, 4, 255, 71, 22, 3, 255, 64, 21, 3, 255, 55, 16, 0, 255, 62, 17, 2, 255, 57, 16, 1, 255, 55, 15, 4, 255, 55, 16, 7, 255, 49, 16, 6, 255, 46, 13, 0, 255, 51, 15, 3, 255, 53, 14, 2, 255, 51, 13, 4, 255, 50, 14, 3, 255, 53, 17, 6, 255, 65, 15, 5, 255, 71, 14, 1, 255, 41, 16, 5, 255, 41, 14, 3, 255, 45, 14, 3, 255, 39, 11, 4, 255, 40, 10, 1, 255, 39, 13, 1, 255, 40, 12, 5, 255, 41, 11, 6, 255, 40, 11, 0, 255, 45, 16, 4, 255, 36, 14, 2, 255, 26, 12, 2, 255, 30, 12, 6, 255, 27, 9, 3, 255, 26, 10, 2, 255, 37, 13, 5, 255, 26, 10, 6, 255, 17, 10, 0, 255, 21, 11, 5, 255, 38, 11, 3, 255, 80, 26, 3, 255, 103, 28, 3, 255, 110, 28, 4, 255, 106, 30, 0, 255, 107, 30, 0, 255, 110, 33, 2, 255, 106, 32, 1, 255, 108, 30, 0, 255, 112, 29, 4, 255, 103, 27, 3, 255, 98, 25, 0, 255, 99, 27, 2, 255, 13, 5, 3, 255, 13, 5, 1, 255, 16, 8, 2, 255, 19, 10, 3, 255, 16, 8, 1, 255, 15, 8, 3, 255, 16, 7, 3, 255, 18, 11, 5, 255, 17, 10, 4, 255, 17, 7, 1, 255, 21, 9, 3, 255, 23, 10, 3, 255, 24, 10, 4, 255, 22, 8, 4, 255, 19, 10, 5, 255, 20, 11, 3, 255, 22, 11, 2, 255, 20, 10, 0, 255, 21, 14, 3, 255, 26, 16, 6, 255, 23, 11, 3, 255, 24, 13, 5, 255, 25, 15, 7, 255, 20, 10, 3, 255, 20, 11, 2, 255, 20, 13, 2, 255, 19, 13, 3, 255, 23, 10, 5, 255, 26, 14, 6, 255, 21, 14, 3, 255, 25, 13, 2, 255, 35, 12, 5, 255, 31, 12, 5, 255, 30, 15, 5, 255, 30, 17, 7, 255, 28, 15, 3, 255, 29, 13, 3, 255, 33, 14, 3, 255, 40, 19, 5, 255, 38, 17, 2, 255, 45, 20, 8, 255, 39, 19, 4, 255, 39, 17, 1, 255, 49, 21, 7, 255, 44, 18, 6, 255, 44, 17, 4, 255, 44, 21, 3, 255, 39, 25, 3, 255, 42, 20, 3, 255, 46, 22, 4, 255, 39, 20, 4, 255, 38, 17, 2, 255, 40, 18, 1, 255, 46, 23, 4, 255, 40, 21, 0, 255, 40, 24, 2, 255, 42, 26, 5, 255, 39, 20, 4, 255, 35, 18, 3, 255, 40, 22, 2, 255, 45, 22, 4, 255, 44, 21, 2, 255, 44, 24, 2, 255, 49, 26, 7, 255, 44, 22, 5, 255, 38, 19, 4, 255, 43, 20, 5, 255, 48, 22, 2, 255, 46, 22, 2, 255, 43, 26, 2, 255, 43, 27, 2, 255, 43, 28, 5, 255, 44, 29, 4, 255, 46, 27, 0, 255, 45, 29, 3, 255, 52, 28, 5, 255, 58, 28, 4, 255, 61, 29, 7, 255, 53, 27, 2, 255, 59, 27, 4, 255, 55, 29, 4, 255, 49, 24, 4, 255, 48, 30, 4, 255, 50, 31, 2, 255, 55, 27, 1, 255, 55, 30, 1, 255, 57, 33, 5, 255, 60, 29, 5, 255, 63, 27, 3, 255, 66, 29, 6, 255, 63, 31, 5, 255, 62, 31, 5, 255, 63, 31, 5, 255, 60, 31, 3, 255, 59, 30, 2, 255, 55, 33, 3, 255, 61, 34, 2, 255, 57, 35, 3, 255, 60, 34, 6, 255, 62, 29, 4, 255, 65, 29, 5, 255, 69, 29, 5, 255, 59, 31, 1, 255, 69, 34, 6, 255, 59, 36, 4, 255, 60, 32, 3, 255, 66, 34, 5, 255, 64, 34, 3, 255, 67, 29, 3, 255, 58, 29, 4, 255, 58, 34, 4, 255, 68, 34, 4, 255, 66, 34, 3, 255, 61, 33, 5, 255, 62, 32, 7, 255, 68, 36, 4, 255, 58, 32, 1, 255, 59, 35, 2, 255, 62, 33, 3, 255, 75, 32, 0, 255, 78, 34, 2, 255, 65, 32, 1, 255, 65, 33, 2, 255, 65, 31, 4, 255, 65, 33, 2, 255, 65, 33, 2, 255, 66, 33, 2, 255, 62, 34, 6, 255, 66, 34, 4, 255, 60, 39, 7, 255, 60, 35, 7, 255, 65, 34, 4, 255, 68, 37, 10, 255, 60, 39, 5, 255, 68, 38, 3, 255, 69, 41, 10, 255, 69, 41, 8, 255, 70, 48, 9, 255, 65, 48, 8, 255, 69, 44, 4, 255, 66, 49, 6, 255, 62, 51, 9, 255, 71, 51, 10, 255, 77, 48, 20, 255, 73, 55, 14, 255, 73, 50, 21, 255, 74, 55, 11, 255, 72, 56, 14, 255, 71, 54, 23, 255, 69, 54, 25, 255, 69, 62, 24, 255, 68, 64, 15, 255, 70, 56, 25, 255, 68, 59, 24, 255, 72, 66, 18, 255, 78, 70, 16, 255, 80, 66, 24, 255, 94, 72, 19, 255, 94, 71, 30, 255, 94, 73, 27, 255, 90, 73, 36, 255, 79, 72, 30, 255, 74, 77, 25, 255, 78, 79, 27, 255, 76, 75, 40, 255, 75, 77, 41, 255, 80, 81, 44, 255, 83, 81, 48, 255, 82, 81, 41, 255, 83, 82, 43, 255, 79, 87, 44, 255, 80, 84, 51, 255, 90, 87, 56, 255, 88, 90, 55, 255, 78, 94, 47, 255, 88, 95, 54, 255, 110, 107, 66, 255, 112, 105, 58, 255, 96, 99, 61, 255, 88, 96, 74, 255, 89, 98, 66, 255, 91, 100, 62, 255, 92, 102, 71, 255, 101, 111, 71, 255, 100, 105, 62, 255, 97, 104, 60, 255, 92, 104, 63, 255, 94, 104, 67, 255, 95, 106, 55, 255, 105, 111, 67, 255, 111, 110, 62, 255, 116, 109, 58, 255, 123, 108, 63, 255, 122, 106, 70, 255, 124, 108, 60, 255, 127, 109, 53, 255, 128, 110, 47, 255, 125, 106, 48, 255, 124, 103, 45, 255, 127, 102, 43, 255, 128, 104, 46, 255, 129, 103, 40, 255, 124, 98, 43, 255, 120, 99, 43, 255, 121, 92, 30, 255, 121, 92, 34, 255, 119, 89, 35, 255, 116, 90, 27, 255, 117, 91, 23, 255, 121, 91, 21, 255, 123, 87, 20, 255, 128, 85, 29, 255, 124, 83, 31, 255, 108, 79, 21, 255, 102, 77, 20, 255, 103, 73, 19, 255, 99, 70, 24, 255, 96, 69, 24, 255, 109, 74, 21, 255, 115, 74, 19, 255, 115, 67, 16, 255, 117, 66, 15, 255, 119, 67, 11, 255, 115, 64, 7, 255, 105, 60, 8, 255, 109, 63, 12, 255, 115, 66, 13, 255, 113, 61, 12, 255, 114, 62, 9, 255, 115, 63, 5, 255, 113, 59, 15, 255, 110, 56, 9, 255, 112, 57, 5, 255, 113, 55, 8, 255, 115, 53, 12, 255, 118, 52, 7, 255, 123, 51, 7, 255, 117, 55, 3, 255, 101, 57, 2, 255, 101, 52, 7, 255, 100, 45, 9, 255, 96, 40, 4, 255, 102, 47, 7, 255, 98, 46, 9, 255, 96, 45, 1, 255, 96, 49, 3, 255, 101, 48, 6, 255, 105, 46, 2, 255, 103, 45, 3, 255, 104, 44, 7, 255, 108, 48, 6, 255, 109, 46, 2, 255, 115, 47, 1, 255, 112, 47, 4, 255, 107, 44, 6, 255, 105, 39, 6, 255, 100, 42, 4, 255, 106, 43, 8, 255, 105, 42, 7, 255, 101, 41, 5, 255, 104, 43, 4, 255, 107, 40, 0, 255, 105, 44, 4, 255, 94, 39, 4, 255, 80, 35, 0, 255, 86, 41, 2, 255, 86, 36, 1, 255, 87, 36, 4, 255, 95, 36, 3, 255, 98, 37, 1, 255, 94, 39, 1, 255, 85, 34, 4, 255, 79, 32, 5, 255, 93, 40, 6, 255, 97, 35, 4, 255, 88, 33, 0, 255, 87, 33, 4, 255, 84, 29, 5, 255, 78, 28, 5, 255, 82, 30, 6, 255, 79, 31, 1, 255, 79, 28, 2, 255, 81, 30, 7, 255, 76, 30, 5, 255, 72, 27, 2, 255, 74, 27, 4, 255, 74, 28, 6, 255, 71, 26, 3, 255, 81, 25, 6, 255, 75, 26, 4, 255, 73, 26, 3, 255, 76, 24, 3, 255, 74, 26, 3, 255, 76, 30, 5, 255, 72, 26, 2, 255, 73, 27, 2, 255, 78, 29, 3, 255, 78, 25, 0, 255, 76, 29, 2, 255, 80, 27, 3, 255, 88, 24, 4, 255, 84, 28, 4, 255, 84, 24, 2, 255, 85, 27, 4, 255, 81, 29, 2, 255, 76, 26, 0, 255, 80, 24, 2, 255, 84, 29, 4, 255, 84, 25, 4, 255, 80, 25, 3, 255, 72, 25, 2, 255, 71, 26, 1, 255, 73, 24, 2, 255, 74, 23, 5, 255, 75, 24, 7, 255, 77, 24, 2, 255, 81, 26, 1, 255, 84, 26, 1, 255, 80, 24, 3, 255, 76, 23, 4, 255, 73, 25, 2, 255, 73, 25, 4, 255, 76, 25, 3, 255, 81, 25, 2, 255, 83, 25, 7, 255, 77, 23, 5, 255, 75, 24, 3, 255, 77, 24, 3, 255, 82, 23, 3, 255, 77, 23, 1, 255, 84, 24, 6, 255, 79, 21, 6, 255, 67, 17, 2, 255, 63, 23, 2, 255, 64, 20, 1, 255, 71, 24, 5, 255, 70, 17, 1, 255, 74, 19, 3, 255, 75, 21, 3, 255, 79, 22, 2, 255, 76, 23, 4, 255, 79, 25, 2, 255, 75, 21, 3, 255, 67, 22, 3, 255, 68, 25, 1, 255, 65, 18, 1, 255, 67, 20, 5, 255, 69, 20, 5, 255, 73, 18, 1, 255, 71, 17, 1, 255, 72, 20, 7, 255, 65, 19, 2, 255, 65, 21, 1, 255, 56, 20, 2, 255, 57, 14, 1, 255, 63, 18, 4, 255, 61, 18, 2, 255, 55, 18, 3, 255, 53, 17, 3, 255, 52, 15, 1, 255, 54, 17, 2, 255, 59, 15, 1, 255, 59, 17, 2, 255, 56, 19, 4, 255, 50, 15, 1, 255, 44, 14, 2, 255, 59, 15, 3, 255, 71, 18, 3, 255, 44, 15, 0, 255, 49, 14, 2, 255, 44, 13, 3, 255, 43, 14, 4, 255, 43, 14, 4, 255, 43, 15, 4, 255, 36, 10, 0, 255, 48, 13, 7, 255, 42, 11, 3, 255, 37, 11, 3, 255, 33, 11, 4, 255, 23, 10, 1, 255, 28, 10, 3, 255, 36, 8, 2, 255, 33, 10, 2, 255, 34, 13, 5, 255, 31, 9, 4, 255, 24, 10, 0, 255, 23, 11, 3, 255, 29, 9, 2, 255, 75, 20, 0, 255, 104, 28, 4, 255, 108, 29, 6, 255, 105, 28, 0, 255, 105, 30, 1, 255, 107, 34, 3, 255, 108, 32, 2, 255, 106, 30, 2, 255, 104, 30, 3, 255, 105, 28, 5, 255, 101, 26, 2, 255, 100, 27, 2, 255, 9, 6, 1, 255, 12, 7, 3, 255, 17, 8, 1, 255, 16, 8, 1, 255, 15, 8, 1, 255, 19, 8, 5, 255, 16, 8, 4, 255, 16, 10, 3, 255, 18, 10, 4, 255, 18, 8, 1, 255, 18, 8, 2, 255, 21, 10, 1, 255, 22, 10, 1, 255, 19, 9, 3, 255, 18, 9, 4, 255, 21, 11, 3, 255, 25, 13, 3, 255, 22, 10, 0, 255, 18, 9, 2, 255, 21, 13, 4, 255, 20, 10, 1, 255, 22, 11, 2, 255, 23, 12, 3, 255, 20, 10, 1, 255, 27, 14, 5, 255, 25, 14, 5, 255, 21, 10, 1, 255, 29, 11, 5, 255, 25, 9, 2, 255, 19, 13, 3, 255, 23, 15, 4, 255, 29, 12, 2, 255, 30, 13, 4, 255, 27, 12, 1, 255, 32, 17, 3, 255, 34, 17, 2, 255, 33, 15, 0, 255, 35, 19, 5, 255, 36, 19, 4, 255, 33, 18, 3, 255, 34, 19, 4, 255, 36, 21, 3, 255, 41, 21, 3, 255, 51, 17, 4, 255, 42, 17, 6, 255, 36, 19, 5, 255, 43, 22, 3, 255, 37, 19, 2, 255, 40, 18, 2, 255, 46, 25, 4, 255, 34, 17, 1, 255, 35, 17, 1, 255, 39, 22, 2, 255, 44, 24, 4, 255, 46, 24, 4, 255, 37, 20, 1, 255, 40, 24, 8, 255, 36, 20, 4, 255, 38, 21, 1, 255, 42, 24, 3, 255, 41, 22, 7, 255, 41, 22, 4, 255, 43, 24, 0, 255, 47, 24, 1, 255, 45, 23, 4, 255, 42, 23, 7, 255, 40, 22, 5, 255, 43, 28, 7, 255, 40, 23, 6, 255, 44, 23, 3, 255, 45, 26, 4, 255, 42, 27, 0, 255, 54, 25, 4, 255, 50, 27, 2, 255, 45, 28, 5, 255, 46, 26, 1, 255, 54, 29, 8, 255, 54, 24, 6, 255, 55, 29, 6, 255, 49, 31, 4, 255, 54, 31, 7, 255, 52, 25, 1, 255, 56, 34, 4, 255, 61, 29, 3, 255, 62, 26, 2, 255, 58, 31, 2, 255, 56, 29, 4, 255, 54, 29, 5, 255, 54, 32, 3, 255, 61, 31, 6, 255, 62, 30, 3, 255, 61, 33, 5, 255, 56, 29, 2, 255, 56, 30, 3, 255, 53, 31, 4, 255, 50, 29, 4, 255, 62, 31, 4, 255, 62, 31, 3, 255, 62, 32, 2, 255, 59, 29, 3, 255, 57, 29, 4, 255, 57, 32, 5, 255, 58, 32, 3, 255, 65, 30, 2, 255, 55, 30, 1, 255, 57, 32, 2, 255, 65, 33, 4, 255, 62, 35, 1, 255, 67, 32, 2, 255, 62, 31, 2, 255, 67, 33, 4, 255, 63, 33, 5, 255, 57, 29, 3, 255, 60, 30, 3, 255, 59, 29, 6, 255, 52, 29, 3, 255, 56, 31, 3, 255, 64, 34, 5, 255, 61, 35, 5, 255, 52, 28, 0, 255, 58, 30, 5, 255, 61, 30, 4, 255, 65, 31, 3, 255, 64, 33, 6, 255, 65, 34, 5, 255, 65, 33, 0, 255, 64, 32, 2, 255, 63, 32, 5, 255, 68, 37, 4, 255, 66, 35, 7, 255, 69, 38, 8, 255, 67, 34, 1, 255, 72, 38, 9, 255, 65, 38, 12, 255, 63, 39, 6, 255, 62, 37, 6, 255, 69, 44, 9, 255, 69, 47, 6, 255, 67, 50, 12, 255, 67, 42, 14, 255, 67, 44, 14, 255, 71, 47, 12, 255, 76, 47, 13, 255, 68, 46, 13, 255, 70, 55, 12, 255, 72, 55, 17, 255, 65, 52, 27, 255, 66, 61, 21, 255, 67, 59, 15, 255, 74, 61, 22, 255, 73, 60, 18, 255, 69, 56, 24, 255, 76, 62, 29, 255, 75, 63, 29, 255, 67, 63, 30, 255, 64, 61, 41, 255, 71, 68, 17, 255, 70, 64, 25, 255, 72, 68, 31, 255, 70, 64, 38, 255, 75, 66, 27, 255, 74, 70, 35, 255, 67, 75, 28, 255, 78, 74, 39, 255, 79, 75, 45, 255, 72, 76, 48, 255, 73, 79, 47, 255, 77, 82, 51, 255, 86, 84, 51, 255, 93, 88, 46, 255, 101, 92, 49, 255, 105, 96, 45, 255, 110, 99, 51, 255, 94, 90, 56, 255, 88, 95, 53, 255, 88, 93, 53, 255, 98, 97, 58, 255, 97, 100, 60, 255, 93, 100, 67, 255, 83, 99, 71, 255, 90, 103, 69, 255, 107, 106, 75, 255, 117, 108, 67, 255, 121, 112, 60, 255, 119, 111, 64, 255, 112, 106, 65, 255, 97, 105, 65, 255, 96, 110, 68, 255, 98, 108, 59, 255, 97, 107, 64, 255, 95, 106, 67, 255, 99, 106, 64, 255, 106, 108, 57, 255, 110, 109, 54, 255, 114, 109, 48, 255, 115, 107, 59, 255, 114, 108, 60, 255, 110, 106, 48, 255, 108, 102, 52, 255, 104, 98, 39, 255, 108, 102, 38, 255, 112, 97, 39, 255, 118, 95, 43, 255, 127, 99, 43, 255, 127, 95, 36, 255, 126, 93, 33, 255, 121, 93, 34, 255, 108, 87, 33, 255, 104, 87, 27, 255, 107, 86, 31, 255, 109, 80, 40, 255, 112, 76, 34, 255, 108, 80, 24, 255, 101, 81, 18, 255, 100, 75, 24, 255, 110, 75, 19, 255, 111, 77, 16, 255, 103, 71, 17, 255, 111, 73, 10, 255, 117, 69, 18, 255, 117, 66, 17, 255, 116, 66, 9, 255, 117, 65, 11, 255, 116, 64, 6, 255, 113, 66, 13, 255, 110, 63, 10, 255, 114, 62, 17, 255, 115, 63, 7, 255, 115, 60, 13, 255, 112, 53, 12, 255, 117, 58, 4, 255, 114, 59, 9, 255, 110, 60, 11, 255, 111, 58, 9, 255, 112, 56, 1, 255, 112, 54, 0, 255, 114, 53, 6, 255, 105, 52, 4, 255, 90, 52, 6, 255, 98, 47, 8, 255, 95, 44, 4, 255, 94, 46, 4, 255, 96, 42, 2, 255, 94, 43, 10, 255, 93, 45, 5, 255, 95, 46, 5, 255, 97, 45, 6, 255, 100, 46, 2, 255, 100, 46, 2, 255, 100, 41, 3, 255, 104, 45, 1, 255, 102, 45, 4, 255, 109, 45, 6, 255, 105, 42, 4, 255, 96, 41, 3, 255, 91, 38, 4, 255, 88, 41, 2, 255, 88, 39, 1, 255, 94, 37, 3, 255, 104, 37, 5, 255, 108, 38, 5, 255, 108, 40, 4, 255, 104, 39, 2, 255, 105, 41, 2, 255, 104, 40, 5, 255, 99, 40, 8, 255, 92, 34, 3, 255, 99, 35, 2, 255, 105, 37, 4, 255, 105, 36, 3, 255, 102, 40, 1, 255, 91, 34, 5, 255, 83, 30, 4, 255, 86, 34, 1, 255, 88, 35, 4, 255, 85, 31, 3, 255, 86, 30, 3, 255, 83, 28, 1, 255, 80, 29, 1, 255, 80, 32, 4, 255, 81, 31, 4, 255, 84, 29, 4, 255, 83, 31, 3, 255, 74, 29, 0, 255, 79, 34, 4, 255, 80, 32, 5, 255, 76, 27, 3, 255, 76, 26, 3, 255, 81, 28, 5, 255, 73, 27, 2, 255, 73, 24, 1, 255, 71, 22, 3, 255, 75, 30, 7, 255, 76, 30, 5, 255, 76, 28, 4, 255, 75, 27, 4, 255, 77, 29, 4, 255, 78, 31, 4, 255, 78, 27, 1, 255, 82, 27, 3, 255, 80, 28, 3, 255, 83, 27, 4, 255, 85, 25, 2, 255, 87, 28, 4, 255, 80, 27, 1, 255, 81, 29, 3, 255, 84, 26, 4, 255, 78, 25, 1, 255, 84, 28, 5, 255, 86, 28, 2, 255, 78, 26, 3, 255, 74, 26, 5, 255, 75, 26, 4, 255, 76, 22, 3, 255, 81, 23, 3, 255, 85, 27, 4, 255, 84, 25, 0, 255, 89, 27, 3, 255, 91, 27, 5, 255, 93, 26, 6, 255, 74, 21, 1, 255, 70, 23, 2, 255, 70, 25, 0, 255, 78, 29, 3, 255, 77, 23, 3, 255, 73, 25, 4, 255, 80, 25, 3, 255, 82, 25, 3, 255, 82, 28, 4, 255, 82, 25, 3, 255, 85, 26, 6, 255, 79, 24, 4, 255, 76, 24, 3, 255, 72, 26, 2, 255, 63, 17, 0, 255, 73, 26, 8, 255, 71, 22, 5, 255, 71, 16, 0, 255, 76, 19, 1, 255, 77, 24, 0, 255, 73, 24, 5, 255, 71, 23, 3, 255, 72, 21, 1, 255, 71, 24, 2, 255, 73, 27, 2, 255, 69, 18, 6, 255, 65, 16, 8, 255, 68, 20, 6, 255, 62, 18, 1, 255, 63, 20, 3, 255, 66, 22, 4, 255, 66, 19, 3, 255, 66, 22, 4, 255, 60, 18, 2, 255, 61, 18, 3, 255, 64, 14, 2, 255, 55, 17, 1, 255, 56, 19, 3, 255, 58, 18, 2, 255, 62, 16, 2, 255, 67, 17, 4, 255, 57, 13, 0, 255, 54, 15, 2, 255, 58, 20, 5, 255, 51, 15, 1, 255, 50, 15, 3, 255, 64, 18, 5, 255, 66, 18, 4, 255, 68, 16, 2, 255, 64, 15, 6, 255, 50, 13, 6, 255, 40, 13, 5, 255, 31, 12, 3, 255, 29, 12, 1, 255, 31, 14, 0, 255, 43, 15, 3, 255, 41, 15, 4, 255, 36, 8, 2, 255, 36, 12, 6, 255, 29, 11, 6, 255, 25, 7, 2, 255, 35, 9, 4, 255, 35, 12, 4, 255, 32, 11, 3, 255, 23, 8, 2, 255, 26, 9, 1, 255, 25, 10, 3, 255, 28, 11, 5, 255, 70, 19, 0, 255, 98, 28, 2, 255, 102, 29, 3, 255, 105, 29, 3, 255, 105, 28, 0, 255, 108, 30, 2, 255, 107, 31, 4, 255, 100, 27, 1, 255, 101, 29, 2, 255, 99, 27, 3, 255, 98, 26, 2, 255, 95, 24, 0, 255, 14, 8, 4, 255, 15, 7, 5, 255, 13, 4, 2, 255, 12, 4, 0, 255, 15, 8, 2, 255, 16, 8, 3, 255, 15, 7, 2, 255, 18, 11, 5, 255, 18, 10, 4, 255, 18, 9, 2, 255, 19, 10, 3, 255, 21, 10, 4, 255, 21, 10, 2, 255, 21, 8, 3, 255, 21, 9, 4, 255, 25, 13, 5, 255, 26, 12, 3, 255, 24, 10, 1, 255, 26, 15, 6, 255, 21, 12, 3, 255, 19, 10, 1, 255, 19, 11, 2, 255, 23, 16, 5, 255, 19, 11, 1, 255, 29, 15, 5, 255, 28, 13, 4, 255, 20, 12, 0, 255, 23, 14, 3, 255, 23, 14, 4, 255, 22, 14, 2, 255, 24, 14, 2, 255, 27, 16, 3, 255, 31, 19, 3, 255, 29, 17, 3, 255, 23, 10, 0, 255, 34, 18, 5, 255, 35, 16, 2, 255, 38, 21, 5, 255, 40, 22, 7, 255, 33, 18, 3, 255, 38, 21, 7, 255, 38, 18, 4, 255, 37, 19, 1, 255, 40, 18, 1, 255, 39, 17, 2, 255, 41, 15, 5, 255, 39, 21, 5, 255, 38, 18, 5, 255, 36, 21, 6, 255, 37, 21, 2, 255, 38, 16, 2, 255, 44, 22, 5, 255, 41, 23, 3, 255, 41, 22, 2, 255, 42, 20, 3, 255, 38, 20, 4, 255, 38, 19, 4, 255, 36, 18, 3, 255, 38, 23, 3, 255, 42, 24, 0, 255, 42, 24, 4, 255, 43, 25, 4, 255, 43, 26, 2, 255, 42, 22, 1, 255, 38, 23, 5, 255, 40, 23, 5, 255, 36, 19, 2, 255, 42, 24, 6, 255, 43, 26, 6, 255, 39, 24, 4, 255, 42, 23, 7, 255, 39, 24, 2, 255, 39, 25, 3, 255, 49, 27, 2, 255, 62, 26, 6, 255, 50, 26, 1, 255, 46, 27, 2, 255, 53, 27, 2, 255, 49, 27, 3, 255, 50, 27, 5, 255, 54, 28, 5, 255, 47, 26, 2, 255, 50, 28, 6, 255, 56, 31, 4, 255, 61, 31, 4, 255, 56, 31, 1, 255, 57, 28, 2, 255, 57, 29, 3, 255, 57, 33, 4, 255, 55, 31, 1, 255, 54, 30, 0, 255, 59, 30, 2, 255, 61, 31, 5, 255, 59, 31, 5, 255, 55, 29, 6, 255, 55, 29, 6, 255, 67, 26, 6, 255, 67, 27, 3, 255, 62, 25, 0, 255, 61, 28, 4, 255, 57, 28, 3, 255, 56, 29, 1, 255, 59, 31, 1, 255, 66, 32, 4, 255, 66, 34, 5, 255, 58, 34, 3, 255, 62, 30, 2, 255, 56, 32, 2, 255, 67, 31, 4, 255, 68, 30, 3, 255, 63, 32, 3, 255, 57, 31, 3, 255, 54, 29, 4, 255, 59, 29, 6, 255, 69, 32, 2, 255, 63, 35, 7, 255, 56, 28, 2, 255, 55, 30, 2, 255, 53, 28, 1, 255, 57, 36, 7, 255, 56, 32, 3, 255, 62, 30, 4, 255, 62, 33, 5, 255, 63, 33, 1, 255, 66, 33, 2, 255, 68, 32, 5, 255, 68, 33, 6, 255, 62, 32, 1, 255, 63, 35, 6, 255, 62, 32, 5, 255, 62, 38, 4, 255, 70, 36, 8, 255, 69, 34, 7, 255, 67, 37, 5, 255, 66, 38, 1, 255, 68, 39, 8, 255, 70, 41, 11, 255, 68, 43, 11, 255, 61, 45, 9, 255, 66, 47, 8, 255, 69, 48, 6, 255, 73, 43, 15, 255, 72, 46, 15, 255, 71, 58, 11, 255, 77, 53, 15, 255, 76, 56, 21, 255, 69, 56, 17, 255, 71, 55, 23, 255, 72, 57, 29, 255, 74, 57, 28, 255, 67, 61, 20, 255, 66, 57, 25, 255, 70, 65, 13, 255, 74, 64, 25, 255, 69, 62, 32, 255, 72, 65, 25, 255, 74, 71, 24, 255, 72, 69, 29, 255, 72, 71, 33, 255, 68, 73, 32, 255, 72, 70, 40, 255, 82, 72, 39, 255, 75, 75, 33, 255, 77, 78, 41, 255, 79, 77, 45, 255, 76, 78, 48, 255, 75, 83, 43, 255, 75, 80, 53, 255, 92, 87, 45, 255, 120, 98, 40, 255, 126, 92, 55, 255, 111, 91, 45, 255, 96, 92, 54, 255, 88, 90, 49, 255, 92, 92, 65, 255, 88, 95, 62, 255, 86, 97, 63, 255, 87, 98, 70, 255, 87, 103, 67, 255, 80, 105, 61, 255, 91, 106, 62, 255, 117, 110, 75, 255, 130, 113, 71, 255, 127, 111, 59, 255, 122, 113, 62, 255, 119, 115, 66, 255, 102, 112, 63, 255, 89, 112, 60, 255, 98, 111, 66, 255, 99, 109, 62, 255, 98, 107, 68, 255, 107, 110, 62, 255, 123, 112, 67, 255, 126, 108, 69, 255, 124, 109, 59, 255, 110, 108, 59, 255, 97, 105, 49, 255, 97, 103, 51, 255, 101, 100, 54, 255, 100, 99, 41, 255, 96, 100, 40, 255, 94, 98, 43, 255, 107, 93, 43, 255, 119, 94, 41, 255, 118, 97, 39, 255, 115, 90, 38, 255, 115, 92, 36, 255, 109, 94, 21, 255, 105, 88, 35, 255, 104, 82, 27, 255, 109, 78, 31, 255, 106, 79, 34, 255, 93, 78, 13, 255, 99, 80, 7, 255, 110, 75, 19, 255, 116, 70, 21, 255, 125, 74, 15, 255, 123, 77, 10, 255, 117, 77, 9, 255, 119, 69, 17, 255, 122, 68, 20, 255, 120, 67, 11, 255, 118, 63, 12, 255, 118, 63, 9, 255, 115, 64, 13, 255, 113, 60, 16, 255, 113, 59, 7, 255, 117, 65, 3, 255, 118, 61, 13, 255, 119, 58, 9, 255, 119, 59, 4, 255, 118, 60, 13, 255, 112, 58, 10, 255, 109, 54, 6, 255, 112, 54, 11, 255, 108, 55, 12, 255, 97, 49, 2, 255, 96, 51, 6, 255, 87, 51, 6, 255, 94, 48, 7, 255, 92, 47, 2, 255, 92, 48, 3, 255, 90, 42, 1, 255, 94, 44, 7, 255, 96, 46, 5, 255, 96, 44, 1, 255, 96, 43, 2, 255, 98, 45, 4, 255, 97, 46, 0, 255, 100, 45, 1, 255, 105, 42, 3, 255, 102, 42, 5, 255, 97, 43, 3, 255, 96, 42, 4, 255, 87, 35, 1, 255, 82, 37, 5, 255, 84, 34, 1, 255, 85, 36, 4, 255, 81, 34, 3, 255, 81, 33, 3, 255, 91, 34, 4, 255, 101, 36, 4, 255, 110, 37, 4, 255, 111, 38, 1, 255, 110, 36, 1, 255, 105, 33, 7, 255, 101, 36, 3, 255, 105, 39, 2, 255, 104, 38, 7, 255, 104, 39, 5, 255, 103, 39, 3, 255, 99, 34, 0, 255, 97, 34, 0, 255, 92, 34, 1, 255, 89, 33, 1, 255, 93, 33, 4, 255, 87, 30, 2, 255, 83, 31, 2, 255, 80, 33, 4, 255, 80, 34, 6, 255, 78, 32, 3, 255, 76, 30, 1, 255, 79, 33, 2, 255, 76, 33, 1, 255, 80, 32, 3, 255, 80, 29, 2, 255, 78, 26, 1, 255, 78, 30, 4, 255, 78, 30, 2, 255, 70, 27, 2, 255, 71, 26, 5, 255, 74, 26, 8, 255, 71, 24, 3, 255, 79, 26, 3, 255, 78, 28, 4, 255, 79, 28, 6, 255, 80, 29, 5, 255, 73, 27, 1, 255, 79, 28, 4, 255, 77, 27, 4, 255, 72, 26, 2, 255, 79, 26, 3, 255, 85, 31, 6, 255, 78, 21, 1, 255, 84, 26, 4, 255, 85, 29, 6, 255, 80, 23, 3, 255, 74, 22, 2, 255, 77, 25, 6, 255, 81, 22, 2, 255, 83, 22, 4, 255, 77, 26, 8, 255, 73, 26, 2, 255, 79, 22, 2, 255, 83, 24, 1, 255, 87, 29, 4, 255, 83, 28, 0, 255, 81, 27, 0, 255, 78, 26, 0, 255, 78, 27, 2, 255, 76, 22, 2, 255, 75, 25, 0, 255, 78, 28, 4, 255, 80, 24, 3, 255, 84, 25, 2, 255, 84, 29, 6, 255, 80, 22, 3, 255, 82, 23, 2, 255, 85, 27, 3, 255, 85, 27, 3, 255, 82, 25, 1, 255, 80, 26, 2, 255, 79, 28, 3, 255, 72, 23, 3, 255, 72, 25, 6, 255, 68, 21, 3, 255, 68, 19, 2, 255, 76, 24, 7, 255, 77, 23, 6, 255, 71, 23, 4, 255, 77, 24, 2, 255, 75, 20, 0, 255, 71, 24, 1, 255, 70, 23, 2, 255, 71, 22, 4, 255, 69, 20, 5, 255, 68, 19, 6, 255, 67, 21, 4, 255, 61, 18, 5, 255, 64, 22, 5, 255, 65, 23, 1, 255, 63, 18, 2, 255, 63, 20, 1, 255, 69, 19, 3, 255, 66, 18, 2, 255, 58, 19, 0, 255, 62, 20, 1, 255, 67, 18, 3, 255, 56, 18, 2, 255, 54, 15, 2, 255, 59, 14, 3, 255, 56, 18, 5, 255, 51, 16, 2, 255, 51, 14, 1, 255, 52, 15, 2, 255, 54, 13, 2, 255, 67, 19, 5, 255, 68, 18, 2, 255, 61, 16, 1, 255, 51, 15, 1, 255, 36, 13, 2, 255, 38, 15, 5, 255, 43, 11, 5, 255, 46, 12, 8, 255, 43, 10, 3, 255, 45, 11, 2, 255, 40, 16, 2, 255, 51, 18, 6, 255, 39, 11, 3, 255, 32, 11, 7, 255, 28, 8, 7, 255, 29, 10, 5, 255, 33, 8, 0, 255, 39, 15, 3, 255, 29, 13, 5, 255, 30, 13, 4, 255, 23, 10, 1, 255, 20, 9, 1, 255, 64, 22, 2, 255, 93, 28, 1, 255, 101, 26, 2, 255, 103, 26, 0, 255, 105, 30, 1, 255, 106, 29, 1, 255, 104, 27, 0, 255, 104, 27, 2, 255, 102, 27, 3, 255, 99, 28, 3, 255, 101, 27, 3, 255, 101, 26, 3, 255, 13, 7, 1, 255, 15, 6, 3, 255, 13, 5, 2, 255, 10, 5, 2, 255, 13, 8, 4, 255, 15, 8, 1, 255, 17, 10, 3, 255, 18, 11, 5, 255, 17, 10, 2, 255, 18, 11, 3, 255, 19, 10, 3, 255, 17, 9, 1, 255, 18, 9, 2, 255, 18, 9, 2, 255, 20, 10, 2, 255, 24, 14, 4, 255, 25, 13, 4, 255, 22, 10, 1, 255, 22, 11, 2, 255, 20, 13, 5, 255, 21, 11, 3, 255, 23, 11, 2, 255, 25, 14, 4, 255, 22, 13, 2, 255, 22, 13, 0, 255, 25, 11, 2, 255, 28, 11, 4, 255, 20, 14, 2, 255, 20, 17, 5, 255, 19, 13, 2, 255, 23, 12, 2, 255, 31, 18, 6, 255, 31, 17, 2, 255, 31, 17, 4, 255, 31, 17, 6, 255, 34, 15, 5, 255, 36, 15, 4, 255, 36, 16, 4, 255, 42, 17, 4, 255, 35, 17, 3, 255, 38, 19, 5, 255, 45, 18, 5, 255, 44, 22, 5, 255, 40, 18, 2, 255, 45, 19, 6, 255, 40, 18, 6, 255, 30, 16, 0, 255, 41, 17, 6, 255, 35, 21, 7, 255, 33, 22, 3, 255, 36, 18, 3, 255, 36, 16, 1, 255, 44, 20, 5, 255, 38, 24, 6, 255, 28, 20, 1, 255, 35, 18, 1, 255, 44, 20, 3, 255, 41, 22, 6, 255, 38, 22, 5, 255, 39, 21, 0, 255, 36, 19, 1, 255, 36, 21, 2, 255, 41, 24, 4, 255, 42, 23, 6, 255, 42, 24, 3, 255, 46, 27, 0, 255, 46, 23, 1, 255, 48, 25, 4, 255, 48, 27, 0, 255, 49, 28, 4, 255, 38, 22, 2, 255, 40, 25, 2, 255, 37, 33, 5, 255, 45, 28, 1, 255, 53, 24, 6, 255, 50, 23, 3, 255, 51, 24, 6, 255, 52, 25, 4, 255, 47, 24, 6, 255, 55, 20, 5, 255, 55, 28, 4, 255, 52, 26, 1, 255, 56, 28, 5, 255, 51, 29, 3, 255, 57, 31, 4, 255, 57, 31, 1, 255, 63, 31, 4, 255, 62, 29, 4, 255, 58, 33, 3, 255, 55, 30, 1, 255, 56, 31, 5, 255, 54, 28, 3, 255, 60, 30, 6, 255, 62, 28, 3, 255, 59, 30, 3, 255, 51, 32, 0, 255, 54, 30, 4, 255, 57, 32, 3, 255, 54, 30, 1, 255, 57, 31, 3, 255, 58, 32, 3, 255, 56, 32, 1, 255, 65, 34, 6, 255, 68, 32, 4, 255, 64, 34, 4, 255, 63, 33, 4, 255, 67, 31, 5, 255, 60, 31, 5, 255, 60, 29, 5, 255, 65, 31, 7, 255, 63, 32, 2, 255, 64, 30, 1, 255, 65, 29, 6, 255, 62, 31, 7, 255, 59, 35, 2, 255, 61, 32, 4, 255, 63, 30, 6, 255, 53, 32, 5, 255, 55, 30, 4, 255, 61, 30, 4, 255, 56, 33, 2, 255, 55, 31, 0, 255, 60, 32, 4, 255, 64, 35, 4, 255, 64, 31, 2, 255, 65, 29, 0, 255, 68, 33, 5, 255, 64, 33, 3, 255, 59, 34, 5, 255, 58, 33, 6, 255, 60, 38, 2, 255, 65, 38, 8, 255, 65, 38, 5, 255, 62, 40, 3, 255, 62, 39, 7, 255, 65, 41, 14, 255, 61, 44, 13, 255, 65, 45, 10, 255, 66, 43, 9, 255, 66, 46, 9, 255, 66, 48, 9, 255, 71, 50, 11, 255, 75, 60, 5, 255, 72, 58, 9, 255, 68, 50, 7, 255, 74, 51, 24, 255, 76, 56, 19, 255, 65, 55, 13, 255, 68, 57, 13, 255, 72, 56, 24, 255, 71, 59, 25, 255, 68, 55, 34, 255, 68, 59, 35, 255, 68, 66, 11, 255, 71, 67, 22, 255, 77, 66, 26, 255, 76, 68, 34, 255, 73, 72, 31, 255, 67, 65, 40, 255, 70, 72, 34, 255, 69, 69, 35, 255, 79, 73, 41, 255, 83, 78, 37, 255, 75, 75, 40, 255, 70, 74, 45, 255, 77, 80, 52, 255, 81, 80, 47, 255, 82, 85, 50, 255, 80, 87, 54, 255, 88, 88, 47, 255, 97, 93, 44, 255, 88, 89, 58, 255, 80, 92, 50, 255, 83, 97, 53, 255, 83, 93, 62, 255, 80, 97, 62, 255, 84, 100, 65, 255, 91, 98, 72, 255, 89, 102, 69, 255, 89, 105, 64, 255, 90, 107, 62, 255, 98, 107, 68, 255, 114, 110, 66, 255, 126, 116, 61, 255, 123, 116, 64, 255, 116, 116, 63, 255, 111, 115, 63, 255, 100, 111, 57, 255, 99, 112, 64, 255, 99, 111, 64, 255, 109, 112, 67, 255, 120, 113, 63, 255, 133, 113, 59, 255, 133, 108, 51, 255, 132, 108, 53, 255, 123, 107, 57, 255, 106, 102, 53, 255, 95, 99, 56, 255, 98, 101, 50, 255, 103, 100, 50, 255, 97, 98, 42, 255, 95, 96, 41, 255, 95, 91, 40, 255, 100, 90, 40, 255, 102, 90, 35, 255, 107, 92, 21, 255, 110, 88, 22, 255, 115, 88, 24, 255, 118, 88, 29, 255, 118, 84, 26, 255, 119, 84, 22, 255, 116, 80, 22, 255, 105, 73, 28, 255, 111, 77, 29, 255, 119, 74, 18, 255, 117, 72, 18, 255, 116, 69, 22, 255, 116, 67, 19, 255, 121, 73, 13, 255, 125, 74, 8, 255, 122, 67, 15, 255, 119, 65, 17, 255, 117, 66, 19, 255, 112, 64, 12, 255, 116, 62, 8, 255, 118, 60, 13, 255, 115, 61, 9, 255, 107, 57, 11, 255, 108, 60, 8, 255, 110, 59, 6, 255, 112, 61, 4, 255, 112, 56, 9, 255, 111, 47, 10, 255, 114, 52, 8, 255, 107, 50, 5, 255, 105, 51, 9, 255, 103, 47, 5, 255, 92, 46, 5, 255, 90, 52, 3, 255, 97, 50, 6, 255, 88, 45, 5, 255, 85, 43, 7, 255, 86, 46, 7, 255, 87, 46, 4, 255, 91, 43, 4, 255, 92, 40, 3, 255, 96, 43, 5, 255, 96, 43, 6, 255, 98, 45, 2, 255, 106, 49, 4, 255, 108, 42, 4, 255, 105, 42, 3, 255, 94, 39, 0, 255, 98, 42, 3, 255, 94, 38, 3, 255, 84, 35, 3, 255, 89, 36, 4, 255, 85, 32, 3, 255, 80, 32, 4, 255, 78, 33, 5, 255, 78, 30, 1, 255, 87, 36, 1, 255, 90, 35, 3, 255, 94, 31, 2, 255, 101, 40, 5, 255, 106, 42, 6, 255, 103, 38, 1, 255, 94, 36, 1, 255, 100, 37, 5, 255, 95, 36, 1, 255, 92, 34, 2, 255, 97, 35, 1, 255, 98, 35, 3, 255, 97, 33, 6, 255, 108, 38, 5, 255, 106, 36, 5, 255, 89, 28, 0, 255, 83, 32, 2, 255, 84, 34, 4, 255, 80, 30, 3, 255, 76, 31, 3, 255, 76, 31, 3, 255, 76, 29, 2, 255, 73, 28, 1, 255, 83, 32, 6, 255, 85, 30, 4, 255, 77, 26, 0, 255, 77, 30, 3, 255, 76, 24, 4, 255, 70, 25, 0, 255, 70, 26, 0, 255, 69, 24, 2, 255, 65, 22, 2, 255, 76, 30, 6, 255, 78, 27, 4, 255, 75, 24, 0, 255, 74, 28, 2, 255, 71, 26, 0, 255, 74, 28, 4, 255, 74, 25, 2, 255, 79, 25, 3, 255, 81, 27, 4, 255, 80, 27, 3, 255, 79, 24, 2, 255, 80, 23, 3, 255, 85, 28, 7, 255, 76, 26, 3, 255, 77, 26, 5, 255, 77, 23, 6, 255, 80, 24, 3, 255, 78, 22, 4, 255, 76, 23, 5, 255, 79, 26, 1, 255, 78, 25, 2, 255, 75, 25, 3, 255, 76, 25, 3, 255, 80, 28, 5, 255, 79, 27, 5, 255, 72, 21, 1, 255, 71, 22, 1, 255, 70, 22, 2, 255, 73, 27, 1, 255, 74, 25, 3, 255, 79, 23, 5, 255, 82, 25, 0, 255, 82, 24, 3, 255, 80, 26, 5, 255, 82, 30, 5, 255, 84, 27, 3, 255, 85, 26, 2, 255, 87, 26, 2, 255, 88, 26, 3, 255, 85, 23, 2, 255, 74, 23, 3, 255, 70, 23, 3, 255, 68, 22, 2, 255, 71, 22, 5, 255, 74, 22, 5, 255, 71, 20, 3, 255, 72, 20, 4, 255, 77, 26, 2, 255, 72, 24, 3, 255, 75, 28, 5, 255, 78, 23, 5, 255, 69, 19, 5, 255, 62, 23, 0, 255, 69, 25, 1, 255, 67, 21, 0, 255, 67, 17, 2, 255, 70, 18, 4, 255, 68, 20, 4, 255, 58, 16, 1, 255, 60, 17, 1, 255, 70, 17, 2, 255, 68, 18, 1, 255, 65, 22, 3, 255, 73, 23, 7, 255, 66, 17, 3, 255, 58, 16, 3, 255, 53, 17, 3, 255, 50, 15, 2, 255, 56, 12, 4, 255, 56, 14, 4, 255, 51, 15, 1, 255, 49, 15, 2, 255, 46, 12, 2, 255, 58, 15, 3, 255, 70, 16, 2, 255, 74, 17, 3, 255, 63, 17, 5, 255, 42, 11, 1, 255, 33, 13, 0, 255, 42, 9, 1, 255, 44, 10, 2, 255, 35, 12, 1, 255, 51, 14, 5, 255, 60, 15, 1, 255, 67, 18, 4, 255, 47, 13, 2, 255, 34, 9, 1, 255, 37, 11, 4, 255, 37, 10, 3, 255, 38, 8, 2, 255, 28, 11, 0, 255, 31, 11, 2, 255, 30, 14, 0, 255, 29, 13, 0, 255, 31, 11, 4, 255, 67, 20, 5, 255, 88, 24, 3, 255, 98, 28, 4, 255, 101, 27, 1, 255, 104, 29, 0, 255, 103, 28, 0, 255, 103, 26, 0, 255, 107, 29, 5, 255, 105, 27, 4, 255, 104, 28, 2, 255, 106, 27, 3, 255, 105, 26, 2, 255, 11, 6, 2, 255, 11, 4, 2, 255, 11, 4, 2, 255, 11, 6, 3, 255, 11, 7, 2, 255, 15, 9, 2, 255, 16, 9, 3, 255, 13, 6, 0, 255, 16, 9, 1, 255, 18, 11, 3, 255, 17, 11, 3, 255, 15, 8, 0, 255, 17, 9, 3, 255, 20, 12, 4, 255, 20, 12, 3, 255, 19, 10, 1, 255, 18, 10, 2, 255, 20, 12, 3, 255, 20, 10, 2, 255, 16, 11, 2, 255, 20, 10, 2, 255, 25, 10, 2, 255, 24, 10, 1, 255, 25, 14, 3, 255, 21, 15, 1, 255, 20, 14, 2, 255, 20, 13, 3, 255, 19, 15, 4, 255, 21, 13, 3, 255, 27, 12, 4, 255, 31, 13, 5, 255, 30, 13, 3, 255, 37, 18, 0, 255, 38, 22, 4, 255, 40, 22, 6, 255, 40, 17, 4, 255, 44, 18, 6, 255, 44, 19, 3, 255, 42, 18, 4, 255, 29, 16, 1, 255, 32, 19, 4, 255, 36, 17, 3, 255, 37, 20, 3, 255, 39, 16, 2, 255, 42, 16, 4, 255, 35, 14, 2, 255, 32, 18, 1, 255, 37, 22, 7, 255, 26, 20, 2, 255, 33, 24, 2, 255, 38, 19, 4, 255, 35, 16, 4, 255, 36, 19, 5, 255, 32, 17, 2, 255, 35, 20, 4, 255, 38, 22, 3, 255, 43, 25, 5, 255, 39, 20, 3, 255, 37, 19, 2, 255, 39, 22, 2, 255, 36, 21, 6, 255, 36, 21, 7, 255, 41, 26, 5, 255, 45, 24, 7, 255, 46, 21, 5, 255, 44, 24, 2, 255, 41, 25, 4, 255, 41, 25, 6, 255, 43, 23, 1, 255, 49, 23, 3, 255, 43, 24, 7, 255, 45, 24, 4, 255, 48, 22, 5, 255, 46, 23, 0, 255, 45, 25, 3, 255, 45, 29, 3, 255, 50, 28, 4, 255, 47, 26, 1, 255, 47, 24, 2, 255, 56, 27, 7, 255, 52, 25, 2, 255, 53, 30, 5, 255, 55, 29, 8, 255, 54, 28, 3, 255, 56, 30, 2, 255, 55, 31, 3, 255, 63, 31, 6, 255, 63, 28, 3, 255, 58, 31, 1, 255, 60, 31, 3, 255, 61, 28, 4, 255, 56, 28, 2, 255, 53, 31, 5, 255, 48, 28, 2, 255, 53, 29, 3, 255, 59, 30, 6, 255, 56, 29, 3, 255, 58, 31, 3, 255, 57, 30, 0, 255, 58, 30, 0, 255, 60, 30, 2, 255, 61, 30, 2, 255, 62, 32, 3, 255, 65, 26, 1, 255, 66, 32, 4, 255, 64, 29, 2, 255, 60, 32, 4, 255, 62, 30, 4, 255, 59, 29, 6, 255, 50, 31, 7, 255, 63, 29, 2, 255, 64, 28, 2, 255, 64, 29, 4, 255, 65, 32, 3, 255, 60, 31, 4, 255, 57, 29, 1, 255, 63, 30, 2, 255, 61, 29, 2, 255, 62, 29, 3, 255, 65, 34, 6, 255, 57, 32, 1, 255, 64, 36, 4, 255, 61, 33, 4, 255, 58, 29, 2, 255, 66, 34, 6, 255, 70, 35, 5, 255, 68, 34, 5, 255, 63, 30, 4, 255, 61, 31, 6, 255, 60, 33, 8, 255, 65, 35, 3, 255, 62, 36, 3, 255, 65, 42, 2, 255, 61, 36, 7, 255, 63, 38, 9, 255, 65, 41, 9, 255, 54, 41, 7, 255, 62, 45, 4, 255, 67, 44, 6, 255, 63, 49, 7, 255, 64, 53, 8, 255, 68, 48, 15, 255, 70, 54, 11, 255, 73, 54, 8, 255, 64, 51, 17, 255, 64, 50, 17, 255, 71, 54, 21, 255, 65, 60, 22, 255, 63, 56, 15, 255, 62, 55, 26, 255, 69, 58, 25, 255, 65, 57, 24, 255, 77, 60, 33, 255, 75, 63, 33, 255, 70, 67, 22, 255, 73, 66, 37, 255, 76, 67, 33, 255, 72, 66, 35, 255, 69, 66, 45, 255, 74, 69, 45, 255, 72, 73, 34, 255, 72, 74, 42, 255, 79, 74, 37, 255, 77, 75, 47, 255, 76, 80, 61, 255, 79, 79, 58, 255, 82, 84, 48, 255, 81, 87, 48, 255, 82, 85, 50, 255, 84, 87, 48, 255, 84, 89, 59, 255, 81, 92, 67, 255, 79, 95, 54, 255, 83, 96, 57, 255, 84, 99, 60, 255, 81, 100, 63, 255, 86, 100, 64, 255, 95, 104, 67, 255, 91, 106, 70, 255, 94, 106, 67, 255, 96, 113, 66, 255, 99, 111, 72, 255, 115, 109, 67, 255, 131, 113, 64, 255, 131, 115, 72, 255, 117, 115, 68, 255, 122, 115, 66, 255, 123, 112, 60, 255, 102, 112, 63, 255, 96, 112, 65, 255, 115, 117, 62, 255, 124, 116, 59, 255, 126, 116, 53, 255, 127, 114, 56, 255, 129, 112, 59, 255, 127, 111, 59, 255, 114, 106, 54, 255, 95, 98, 56, 255, 91, 99, 50, 255, 97, 100, 52, 255, 103, 97, 42, 255, 105, 93, 40, 255, 97, 93, 36, 255, 104, 96, 38, 255, 116, 92, 38, 255, 119, 92, 34, 255, 118, 89, 24, 255, 120, 85, 29, 255, 122, 85, 32, 255, 122, 82, 23, 255, 124, 81, 16, 255, 122, 82, 23, 255, 122, 83, 21, 255, 129, 80, 16, 255, 125, 71, 7, 255, 117, 76, 16, 255, 96, 71, 28, 255, 87, 64, 27, 255, 96, 65, 21, 255, 106, 63, 18, 255, 117, 66, 13, 255, 118, 67, 3, 255, 116, 65, 12, 255, 116, 65, 19, 255, 118, 66, 8, 255, 114, 61, 7, 255, 110, 60, 16, 255, 97, 54, 16, 255, 90, 52, 10, 255, 93, 54, 8, 255, 105, 56, 3, 255, 111, 57, 10, 255, 108, 52, 5, 255, 113, 49, 2, 255, 114, 47, 5, 255, 113, 50, 7, 255, 105, 49, 4, 255, 88, 47, 9, 255, 85, 45, 6, 255, 88, 41, 3, 255, 88, 44, 3, 255, 90, 46, 4, 255, 88, 43, 3, 255, 83, 45, 3, 255, 86, 42, 3, 255, 90, 40, 7, 255, 95, 43, 9, 255, 92, 41, 4, 255, 95, 41, 3, 255, 103, 42, 5, 255, 106, 42, 2, 255, 106, 43, 4, 255, 103, 42, 2, 255, 105, 42, 4, 255, 107, 43, 8, 255, 92, 36, 3, 255, 84, 38, 4, 255, 82, 37, 3, 255, 80, 31, 2, 255, 84, 30, 4, 255, 86, 34, 5, 255, 85, 38, 4, 255, 77, 34, 0, 255, 78, 30, 3, 255, 85, 32, 5, 255, 92, 38, 3, 255, 93, 37, 4, 255, 93, 34, 4, 255, 101, 39, 3, 255, 99, 40, 5, 255, 81, 30, 0, 255, 86, 33, 2, 255, 87, 33, 5, 255, 86, 31, 4, 255, 100, 34, 2, 255, 109, 39, 5, 255, 98, 34, 1, 255, 91, 35, 2, 255, 88, 33, 3, 255, 82, 28, 1, 255, 80, 28, 1, 255, 80, 28, 3, 255, 81, 26, 3, 255, 75, 25, 3, 255, 77, 27, 3, 255, 84, 31, 3, 255, 82, 31, 2, 255, 75, 27, 0, 255, 78, 30, 4, 255, 72, 29, 6, 255, 67, 21, 3, 255, 74, 28, 9, 255, 69, 27, 3, 255, 69, 25, 1, 255, 74, 28, 4, 255, 71, 27, 2, 255, 78, 32, 6, 255, 79, 30, 4, 255, 78, 28, 3, 255, 80, 29, 5, 255, 79, 25, 2, 255, 81, 26, 3, 255, 79, 25, 3, 255, 80, 26, 4, 255, 79, 25, 3, 255, 73, 23, 2, 255, 72, 27, 3, 255, 78, 27, 4, 255, 80, 24, 4, 255, 76, 25, 1, 255, 71, 27, 5, 255, 77, 25, 4, 255, 82, 24, 1, 255, 80, 26, 3, 255, 79, 24, 2, 255, 81, 24, 3, 255, 82, 23, 2, 255, 81, 25, 4, 255, 76, 23, 3, 255, 74, 24, 4, 255, 70, 23, 5, 255, 68, 21, 0, 255, 72, 23, 5, 255, 72, 23, 5, 255, 71, 25, 1, 255, 72, 27, 3, 255, 75, 25, 3, 255, 80, 25, 3, 255, 81, 24, 2, 255, 84, 25, 2, 255, 85, 25, 4, 255, 85, 24, 4, 255, 83, 23, 3, 255, 80, 26, 6, 255, 73, 25, 2, 255, 72, 24, 1, 255, 75, 21, 1, 255, 77, 20, 2, 255, 72, 22, 3, 255, 71, 20, 1, 255, 73, 24, 2, 255, 67, 22, 4, 255, 70, 24, 3, 255, 74, 21, 0, 255, 68, 18, 4, 255, 66, 23, 3, 255, 66, 21, 4, 255, 59, 15, 4, 255, 62, 18, 0, 255, 68, 20, 3, 255, 66, 16, 4, 255, 65, 18, 3, 255, 65, 15, 3, 255, 64, 16, 1, 255, 60, 19, 0, 255, 63, 16, 1, 255, 63, 16, 2, 255, 63, 16, 1, 255, 60, 15, 3, 255, 57, 16, 3, 255, 58, 18, 5, 255, 56, 16, 5, 255, 54, 15, 4, 255, 50, 14, 2, 255, 48, 14, 4, 255, 47, 15, 8, 255, 46, 14, 3, 255, 51, 12, 0, 255, 58, 13, 1, 255, 56, 17, 4, 255, 50, 17, 5, 255, 43, 11, 2, 255, 54, 11, 3, 255, 54, 10, 3, 255, 35, 11, 0, 255, 55, 11, 3, 255, 73, 16, 3, 255, 66, 17, 0, 255, 53, 17, 2, 255, 49, 13, 1, 255, 48, 12, 1, 255, 42, 11, 1, 255, 43, 13, 7, 255, 32, 8, 4, 255, 25, 9, 3, 255, 37, 11, 3, 255, 54, 15, 6, 255, 49, 13, 6, 255, 64, 17, 2, 255, 82, 25, 1, 255, 92, 27, 2, 255, 98, 28, 4, 255, 103, 30, 4, 255, 106, 32, 2, 255, 106, 31, 3, 255, 102, 27, 3, 255, 99, 24, 1, 255, 105, 27, 1, 255, 106, 28, 2, 255, 106, 26, 0, 255, 11, 7, 4, 255, 11, 5, 2, 255, 10, 5, 3, 255, 10, 7, 2, 255, 10, 7, 2, 255, 14, 8, 2, 255, 15, 8, 2, 255, 15, 8, 2, 255, 17, 10, 2, 255, 17, 10, 2, 255, 18, 11, 3, 255, 18, 9, 3, 255, 18, 9, 4, 255, 16, 8, 2, 255, 19, 9, 1, 255, 21, 11, 2, 255, 15, 8, 1, 255, 14, 8, 1, 255, 20, 11, 3, 255, 17, 10, 0, 255, 20, 11, 2, 255, 24, 13, 4, 255, 24, 13, 3, 255, 24, 13, 2, 255, 27, 15, 3, 255, 24, 14, 3, 255, 21, 15, 4, 255, 23, 12, 2, 255, 29, 13, 4, 255, 29, 12, 3, 255, 30, 18, 5, 255, 29, 18, 4, 255, 41, 18, 1, 255, 38, 19, 1, 255, 40, 23, 2, 255, 42, 20, 2, 255, 47, 21, 3, 255, 44, 18, 1, 255, 41, 20, 4, 255, 35, 21, 5, 255, 37, 17, 6, 255, 40, 19, 7, 255, 41, 22, 7, 255, 35, 17, 3, 255, 23, 14, 2, 255, 34, 20, 5, 255, 41, 21, 3, 255, 35, 18, 3, 255, 30, 18, 1, 255, 33, 22, 2, 255, 33, 15, 1, 255, 37, 19, 5, 255, 35, 20, 4, 255, 35, 15, 1, 255, 39, 14, 2, 255, 39, 22, 5, 255, 35, 19, 2, 255, 34, 18, 5, 255, 34, 20, 5, 255, 43, 24, 1, 255, 46, 22, 4, 255, 43, 22, 4, 255, 39, 22, 1, 255, 36, 19, 3, 255, 41, 23, 4, 255, 36, 19, 3, 255, 36, 20, 3, 255, 41, 24, 7, 255, 44, 25, 9, 255, 44, 26, 6, 255, 47, 27, 3, 255, 45, 28, 2, 255, 48, 25, 5, 255, 45, 26, 4, 255, 43, 23, 6, 255, 42, 27, 4, 255, 37, 25, 3, 255, 45, 24, 4, 255, 49, 23, 1, 255, 48, 28, 3, 255, 52, 27, 2, 255, 55, 30, 3, 255, 55, 29, 2, 255, 60, 27, 5, 255, 57, 28, 3, 255, 51, 29, 0, 255, 55, 29, 3, 255, 60, 29, 5, 255, 52, 30, 1, 255, 55, 29, 0, 255, 57, 24, 0, 255, 60, 28, 4, 255, 51, 28, 3, 255, 45, 30, 4, 255, 53, 32, 7, 255, 60, 27, 6, 255, 56, 27, 1, 255, 58, 30, 3, 255, 59, 30, 2, 255, 58, 29, 2, 255, 59, 30, 3, 255, 59, 28, 1, 255, 58, 30, 0, 255, 64, 31, 3, 255, 70, 33, 7, 255, 59, 27, 1, 255, 53, 32, 2, 255, 61, 31, 3, 255, 65, 28, 1, 255, 63, 27, 5, 255, 52, 27, 9, 255, 54, 32, 7, 255, 56, 32, 2, 255, 55, 30, 3, 255, 59, 30, 3, 255, 65, 32, 4, 255, 62, 30, 3, 255, 60, 28, 1, 255, 57, 31, 1, 255, 56, 32, 2, 255, 65, 34, 6, 255, 66, 32, 6, 255, 62, 32, 4, 255, 56, 29, 0, 255, 62, 34, 5, 255, 61, 30, 3, 255, 61, 29, 3, 255, 61, 30, 3, 255, 59, 28, 2, 255, 64, 34, 2, 255, 64, 32, 7, 255, 61, 34, 10, 255, 60, 34, 6, 255, 64, 40, 3, 255, 60, 39, 3, 255, 64, 38, 8, 255, 61, 39, 8, 255, 67, 44, 10, 255, 70, 44, 16, 255, 66, 45, 17, 255, 73, 47, 19, 255, 71, 47, 16, 255, 67, 51, 13, 255, 72, 54, 11, 255, 72, 57, 13, 255, 63, 53, 20, 255, 61, 52, 26, 255, 61, 55, 24, 255, 73, 63, 22, 255, 71, 57, 34, 255, 70, 59, 24, 255, 67, 62, 25, 255, 66, 64, 25, 255, 71, 68, 27, 255, 68, 61, 29, 255, 68, 61, 47, 255, 68, 67, 38, 255, 69, 63, 36, 255, 76, 72, 29, 255, 71, 73, 36, 255, 69, 69, 44, 255, 71, 75, 45, 255, 79, 79, 37, 255, 74, 79, 38, 255, 77, 78, 53, 255, 81, 78, 45, 255, 77, 84, 48, 255, 79, 89, 51, 255, 81, 87, 61, 255, 81, 88, 56, 255, 83, 89, 64, 255, 87, 94, 64, 255, 87, 98, 51, 255, 88, 98, 61, 255, 89, 100, 63, 255, 87, 98, 65, 255, 87, 100, 63, 255, 90, 106, 62, 255, 96, 108, 66, 255, 108, 112, 76, 255, 115, 117, 67, 255, 121, 117, 67, 255, 129, 115, 72, 255, 128, 111, 68, 255, 129, 113, 71, 255, 124, 117, 70, 255, 124, 117, 66, 255, 130, 119, 68, 255, 107, 115, 67, 255, 92, 109, 65, 255, 109, 113, 61, 255, 125, 118, 65, 255, 128, 114, 58, 255, 126, 111, 57, 255, 122, 112, 58, 255, 114, 109, 54, 255, 101, 102, 50, 255, 93, 100, 47, 255, 95, 100, 45, 255, 99, 97, 46, 255, 103, 97, 39, 255, 104, 98, 31, 255, 100, 94, 31, 255, 114, 99, 42, 255, 120, 95, 36, 255, 115, 88, 29, 255, 118, 89, 32, 255, 119, 89, 32, 255, 121, 91, 22, 255, 120, 85, 33, 255, 119, 81, 30, 255, 119, 79, 29, 255, 112, 75, 12, 255, 106, 71, 20, 255, 102, 72, 24, 255, 101, 73, 15, 255, 91, 66, 16, 255, 93, 69, 15, 255, 94, 66, 4, 255, 92, 57, 20, 255, 95, 60, 21, 255, 99, 64, 11, 255, 100, 61, 14, 255, 98, 55, 11, 255, 99, 61, 4, 255, 99, 55, 9, 255, 97, 57, 4, 255, 92, 59, 13, 255, 84, 52, 7, 255, 93, 57, 2, 255, 111, 58, 6, 255, 113, 53, 9, 255, 107, 52, 7, 255, 115, 51, 9, 255, 119, 52, 8, 255, 110, 49, 6, 255, 96, 44, 7, 255, 82, 42, 7, 255, 85, 42, 10, 255, 86, 40, 7, 255, 85, 43, 1, 255, 92, 44, 2, 255, 90, 39, 1, 255, 85, 41, 8, 255, 88, 43, 2, 255, 89, 40, 3, 255, 86, 37, 8, 255, 89, 40, 8, 255, 95, 42, 3, 255, 98, 39, 2, 255, 98, 40, 4, 255, 96, 39, 3, 255, 100, 39, 3, 255, 100, 38, 1, 255, 97, 40, 5, 255, 91, 36, 4, 255, 80, 36, 1, 255, 80, 35, 1, 255, 81, 36, 3, 255, 80, 37, 3, 255, 80, 35, 1, 255, 86, 31, 2, 255, 85, 32, 1, 255, 80, 36, 5, 255, 79, 29, 3, 255, 80, 31, 3, 255, 79, 31, 3, 255, 88, 32, 3, 255, 91, 34, 1, 255, 89, 31, 1, 255, 79, 36, 4, 255, 81, 34, 3, 255, 80, 31, 2, 255, 79, 33, 3, 255, 92, 32, 1, 255, 98, 32, 1, 255, 102, 36, 4, 255, 101, 33, 4, 255, 94, 31, 2, 255, 96, 36, 7, 255, 96, 35, 7, 255, 96, 31, 3, 255, 94, 31, 4, 255, 81, 29, 5, 255, 76, 29, 2, 255, 76, 28, 0, 255, 78, 28, 1, 255, 78, 30, 6, 255, 68, 31, 1, 255, 63, 26, 3, 255, 67, 22, 7, 255, 70, 21, 4, 255, 75, 29, 3, 255, 77, 27, 4, 255, 73, 25, 1, 255, 68, 28, 3, 255, 72, 26, 2, 255, 83, 28, 4, 255, 79, 26, 3, 255, 77, 27, 1, 255, 83, 29, 4, 255, 78, 27, 2, 255, 81, 26, 3, 255, 80, 27, 6, 255, 72, 24, 1, 255, 70, 25, 1, 255, 74, 25, 4, 255, 75, 25, 1, 255, 70, 20, 1, 255, 72, 24, 0, 255, 70, 23, 3, 255, 72, 20, 2, 255, 78, 25, 2, 255, 74, 24, 0, 255, 75, 28, 1, 255, 78, 28, 4, 255, 76, 24, 1, 255, 76, 24, 2, 255, 74, 24, 3, 255, 72, 25, 3, 255, 71, 20, 3, 255, 74, 21, 5, 255, 77, 21, 4, 255, 78, 26, 5, 255, 76, 27, 6, 255, 72, 24, 1, 255, 77, 25, 2, 255, 83, 25, 5, 255, 87, 26, 4, 255, 83, 24, 2, 255, 80, 26, 2, 255, 78, 23, 2, 255, 78, 21, 1, 255, 84, 24, 4, 255, 81, 26, 3, 255, 85, 26, 3, 255, 87, 23, 3, 255, 82, 19, 1, 255, 73, 19, 1, 255, 70, 23, 5, 255, 72, 26, 5, 255, 71, 23, 2, 255, 66, 19, 2, 255, 64, 20, 4, 255, 70, 22, 3, 255, 76, 20, 2, 255, 70, 17, 4, 255, 64, 16, 5, 255, 64, 19, 2, 255, 70, 23, 3, 255, 66, 17, 0, 255, 66, 18, 4, 255, 67, 18, 5, 255, 68, 19, 4, 255, 67, 18, 3, 255, 57, 18, 1, 255, 63, 17, 3, 255, 69, 18, 2, 255, 64, 19, 3, 255, 62, 15, 1, 255, 63, 15, 2, 255, 55, 16, 4, 255, 51, 12, 3, 255, 52, 13, 5, 255, 45, 15, 5, 255, 42, 14, 3, 255, 48, 14, 3, 255, 52, 16, 4, 255, 44, 15, 1, 255, 43, 14, 0, 255, 61, 12, 5, 255, 52, 12, 6, 255, 44, 11, 2, 255, 48, 16, 4, 255, 34, 11, 0, 255, 52, 17, 8, 255, 63, 16, 2, 255, 70, 17, 2, 255, 70, 16, 5, 255, 62, 14, 7, 255, 46, 12, 3, 255, 34, 9, 0, 255, 33, 13, 1, 255, 37, 14, 4, 255, 34, 9, 6, 255, 54, 14, 9, 255, 71, 17, 6, 255, 55, 13, 1, 255, 60, 19, 3, 255, 77, 22, 1, 255, 86, 23, 3, 255, 90, 26, 4, 255, 102, 30, 5, 255, 106, 31, 4, 255, 103, 31, 2, 255, 99, 29, 4, 255, 91, 23, 0, 255, 99, 26, 1, 255, 99, 27, 2, 255, 95, 26, 0, 255, 11, 7, 5, 255, 11, 6, 5, 255, 11, 7, 3, 255, 11, 7, 2, 255, 11, 8, 3, 255, 12, 6, 3, 255, 14, 6, 2, 255, 18, 10, 4, 255, 17, 10, 2, 255, 15, 7, 0, 255, 17, 8, 1, 255, 17, 8, 2, 255, 17, 7, 3, 255, 17, 8, 3, 255, 20, 9, 1, 255, 18, 8, 1, 255, 17, 9, 4, 255, 19, 13, 6, 255, 22, 13, 4, 255, 21, 12, 2, 255, 20, 13, 3, 255, 20, 14, 3, 255, 23, 16, 5, 255, 21, 11, 1, 255, 32, 12, 3, 255, 28, 13, 2, 255, 22, 15, 2, 255, 32, 17, 7, 255, 30, 14, 2, 255, 25, 14, 0, 255, 27, 16, 0, 255, 34, 18, 3, 255, 40, 17, 5, 255, 41, 21, 6, 255, 37, 18, 2, 255, 39, 17, 1, 255, 39, 15, 1, 255, 43, 18, 5, 255, 41, 20, 6, 255, 38, 18, 5, 255, 37, 15, 4, 255, 32, 14, 2, 255, 37, 15, 2, 255, 42, 13, 2, 255, 33, 15, 2, 255, 34, 18, 3, 255, 43, 18, 5, 255, 31, 17, 1, 255, 33, 20, 4, 255, 32, 17, 2, 255, 40, 19, 10, 255, 39, 16, 4, 255, 44, 22, 8, 255, 39, 21, 3, 255, 37, 20, 3, 255, 41, 19, 4, 255, 40, 18, 5, 255, 37, 18, 6, 255, 37, 20, 3, 255, 39, 21, 0, 255, 41, 22, 4, 255, 43, 24, 5, 255, 42, 24, 1, 255, 42, 24, 2, 255, 49, 25, 1, 255, 45, 25, 5, 255, 39, 25, 3, 255, 37, 24, 2, 255, 41, 23, 3, 255, 50, 23, 1, 255, 51, 25, 2, 255, 46, 27, 2, 255, 47, 26, 6, 255, 45, 22, 5, 255, 39, 21, 5, 255, 55, 26, 7, 255, 53, 24, 6, 255, 50, 25, 3, 255, 57, 26, 3, 255, 53, 24, 1, 255, 50, 27, 4, 255, 55, 25, 4, 255, 58, 28, 3, 255, 49, 26, 2, 255, 49, 29, 1, 255, 46, 33, 1, 255, 46, 26, 2, 255, 55, 27, 3, 255, 54, 25, 0, 255, 58, 29, 3, 255, 53, 27, 5, 255, 55, 27, 5, 255, 59, 29, 8, 255, 54, 25, 2, 255, 56, 29, 1, 255, 56, 35, 4, 255, 56, 32, 5, 255, 56, 31, 3, 255, 56, 29, 3, 255, 57, 29, 4, 255, 59, 28, 5, 255, 62, 27, 4, 255, 62, 30, 2, 255, 56, 30, 1, 255, 61, 29, 4, 255, 56, 30, 3, 255, 61, 31, 4, 255, 61, 31, 2, 255, 64, 33, 3, 255, 60, 32, 5, 255, 57, 26, 6, 255, 56, 28, 12, 255, 55, 31, 7, 255, 58, 33, 2, 255, 54, 28, 2, 255, 59, 28, 2, 255, 58, 30, 2, 255, 60, 30, 2, 255, 60, 33, 4, 255, 59, 32, 3, 255, 59, 29, 1, 255, 58, 29, 6, 255, 63, 31, 7, 255, 64, 34, 2, 255, 61, 34, 4, 255, 57, 28, 5, 255, 61, 28, 5, 255, 63, 32, 3, 255, 58, 36, 6, 255, 61, 35, 1, 255, 60, 36, 8, 255, 62, 37, 7, 255, 60, 39, 3, 255, 61, 38, 8, 255, 59, 36, 9, 255, 68, 35, 16, 255, 72, 40, 12, 255, 72, 45, 8, 255, 69, 47, 11, 255, 67, 47, 12, 255, 77, 48, 7, 255, 72, 52, 10, 255, 58, 43, 34, 255, 64, 50, 23, 255, 85, 60, 4, 255, 66, 49, 21, 255, 65, 57, 22, 255, 65, 57, 12, 255, 66, 56, 18, 255, 69, 57, 24, 255, 68, 64, 17, 255, 68, 62, 25, 255, 65, 63, 37, 255, 69, 61, 29, 255, 70, 63, 36, 255, 65, 68, 37, 255, 70, 70, 29, 255, 73, 71, 32, 255, 71, 70, 42, 255, 69, 70, 43, 255, 72, 73, 49, 255, 71, 73, 42, 255, 76, 78, 43, 255, 76, 81, 56, 255, 83, 80, 57, 255, 84, 82, 53, 255, 78, 85, 46, 255, 84, 90, 52, 255, 78, 85, 60, 255, 82, 86, 66, 255, 90, 97, 61, 255, 87, 92, 63, 255, 88, 96, 68, 255, 82, 99, 58, 255, 89, 99, 66, 255, 94, 99, 72, 255, 91, 103, 69, 255, 91, 107, 64, 255, 112, 115, 71, 255, 126, 116, 73, 255, 134, 118, 66, 255, 133, 116, 65, 255, 127, 117, 65, 255, 122, 118, 64, 255, 125, 119, 69, 255, 130, 115, 70, 255, 132, 116, 65, 255, 123, 117, 67, 255, 105, 113, 70, 255, 92, 111, 66, 255, 98, 114, 63, 255, 102, 112, 57, 255, 121, 115, 60, 255, 116, 111, 53, 255, 102, 102, 58, 255, 94, 105, 50, 255, 96, 105, 52, 255, 99, 98, 51, 255, 101, 97, 55, 255, 100, 96, 49, 255, 94, 92, 45, 255, 93, 93, 49, 255, 101, 90, 39, 255, 118, 95, 40, 255, 119, 91, 37, 255, 120, 87, 50, 255, 119, 86, 39, 255, 115, 84, 29, 255, 108, 84, 23, 255, 100, 84, 22, 255, 91, 77, 24, 255, 91, 74, 28, 255, 94, 73, 18, 255, 90, 68, 19, 255, 89, 67, 18, 255, 98, 71, 18, 255, 91, 65, 15, 255, 89, 65, 19, 255, 94, 63, 14, 255, 93, 61, 10, 255, 92, 58, 13, 255, 88, 58, 10, 255, 88, 61, 13, 255, 86, 60, 11, 255, 83, 55, 8, 255, 90, 54, 15, 255, 90, 56, 3, 255, 86, 54, 8, 255, 85, 51, 10, 255, 95, 50, 11, 255, 112, 56, 13, 255, 118, 56, 4, 255, 119, 52, 3, 255, 118, 52, 9, 255, 111, 54, 9, 255, 99, 48, 3, 255, 91, 41, 4, 255, 91, 44, 9, 255, 88, 43, 6, 255, 87, 44, 8, 255, 79, 41, 7, 255, 87, 42, 7, 255, 89, 43, 5, 255, 86, 41, 5, 255, 89, 42, 1, 255, 86, 40, 4, 255, 82, 37, 5, 255, 87, 43, 2, 255, 94, 43, 4, 255, 93, 37, 7, 255, 94, 41, 9, 255, 88, 38, 4, 255, 97, 38, 5, 255, 96, 37, 4, 255, 86, 35, 2, 255, 83, 34, 2, 255, 84, 34, 2, 255, 81, 34, 2, 255, 78, 34, 1, 255, 77, 33, 0, 255, 82, 33, 4, 255, 78, 30, 1, 255, 80, 31, 2, 255, 85, 34, 3, 255, 78, 34, 2, 255, 80, 38, 7, 255, 76, 32, 2, 255, 75, 32, 3, 255, 79, 29, 6, 255, 77, 32, 2, 255, 75, 37, 2, 255, 79, 32, 0, 255, 81, 29, 0, 255, 82, 32, 2, 255, 95, 34, 5, 255, 100, 35, 5, 255, 104, 33, 4, 255, 102, 29, 1, 255, 98, 30, 1, 255, 100, 34, 3, 255, 102, 37, 2, 255, 106, 35, 2, 255, 103, 33, 2, 255, 92, 33, 5, 255, 78, 33, 2, 255, 77, 32, 0, 255, 78, 27, 1, 255, 76, 28, 6, 255, 75, 28, 9, 255, 68, 23, 2, 255, 75, 29, 7, 255, 74, 27, 5, 255, 68, 29, 3, 255, 65, 28, 2, 255, 71, 28, 4, 255, 78, 28, 5, 255, 77, 27, 2, 255, 71, 27, 0, 255, 76, 25, 0, 255, 88, 32, 6, 255, 79, 28, 1, 255, 73, 26, 1, 255, 77, 25, 2, 255, 75, 25, 2, 255, 70, 28, 3, 255, 68, 25, 2, 255, 75, 22, 2, 255, 73, 24, 0, 255, 70, 25, 1, 255, 74, 25, 2, 255, 76, 21, 5, 255, 72, 21, 4, 255, 74, 26, 3, 255, 72, 25, 3, 255, 69, 22, 1, 255, 74, 23, 4, 255, 72, 22, 2, 255, 67, 22, 3, 255, 61, 21, 2, 255, 62, 23, 3, 255, 73, 30, 6, 255, 69, 22, 4, 255, 70, 20, 1, 255, 70, 22, 0, 255, 74, 22, 2, 255, 80, 27, 5, 255, 78, 27, 3, 255, 79, 24, 3, 255, 84, 25, 5, 255, 78, 22, 1, 255, 80, 26, 2, 255, 82, 25, 4, 255, 83, 23, 3, 255, 88, 25, 4, 255, 87, 27, 3, 255, 90, 25, 2, 255, 93, 22, 2, 255, 88, 19, 1, 255, 77, 20, 2, 255, 77, 22, 2, 255, 67, 22, 4, 255, 62, 22, 2, 255, 67, 19, 2, 255, 72, 23, 6, 255, 71, 24, 3, 255, 72, 18, 1, 255, 84, 25, 2, 255, 79, 22, 2, 255, 84, 24, 7, 255, 85, 24, 3, 255, 76, 22, 1, 255, 63, 16, 4, 255, 59, 17, 0, 255, 66, 20, 1, 255, 73, 20, 6, 255, 68, 17, 4, 255, 54, 16, 0, 255, 64, 19, 1, 255, 79, 21, 5, 255, 69, 20, 2, 255, 61, 19, 1, 255, 58, 15, 2, 255, 54, 12, 3, 255, 49, 14, 5, 255, 44, 13, 1, 255, 52, 18, 2, 255, 52, 16, 1, 255, 55, 16, 3, 255, 45, 15, 2, 255, 36, 13, 0, 255, 46, 11, 2, 255, 40, 12, 3, 255, 33, 12, 1, 255, 41, 17, 4, 255, 46, 12, 4, 255, 47, 9, 3, 255, 55, 14, 3, 255, 63, 14, 1, 255, 54, 11, 1, 255, 41, 10, 3, 255, 32, 10, 3, 255, 45, 13, 7, 255, 51, 16, 7, 255, 54, 13, 3, 255, 53, 11, 3, 255, 57, 15, 3, 255, 65, 19, 2, 255, 49, 12, 0, 255, 56, 13, 5, 255, 70, 14, 3, 255, 77, 17, 2, 255, 86, 25, 5, 255, 93, 26, 1, 255, 100, 26, 1, 255, 103, 30, 3, 255, 97, 30, 3, 255, 93, 29, 4, 255, 93, 25, 0, 255, 94, 27, 1, 255, 90, 26, 1, 255, 8, 5, 1, 255, 8, 6, 1, 255, 13, 7, 3, 255, 14, 5, 2, 255, 15, 7, 4, 255, 11, 6, 3, 255, 16, 8, 2, 255, 18, 9, 1, 255, 17, 10, 2, 255, 16, 9, 3, 255, 16, 10, 4, 255, 18, 9, 2, 255, 18, 8, 2, 255, 13, 9, 2, 255, 16, 10, 5, 255, 16, 9, 1, 255, 21, 12, 5, 255, 20, 11, 3, 255, 21, 9, 2, 255, 20, 11, 2, 255, 20, 12, 4, 255, 21, 12, 4, 255, 22, 9, 3, 255, 30, 13, 5, 255, 30, 14, 5, 255, 28, 17, 6, 255, 23, 12, 2, 255, 28, 14, 5, 255, 28, 15, 4, 255, 31, 16, 5, 255, 33, 16, 4, 255, 33, 15, 3, 255, 27, 14, 5, 255, 33, 18, 4, 255, 40, 18, 4, 255, 38, 13, 2, 255, 39, 17, 6, 255, 38, 18, 4, 255, 37, 19, 4, 255, 35, 14, 1, 255, 37, 17, 3, 255, 35, 16, 2, 255, 34, 18, 4, 255, 33, 17, 2, 255, 37, 19, 5, 255, 35, 19, 7, 255, 30, 15, 0, 255, 32, 19, 2, 255, 30, 18, 5, 255, 31, 18, 6, 255, 32, 16, 5, 255, 38, 18, 5, 255, 36, 20, 7, 255, 31, 18, 3, 255, 35, 17, 0, 255, 41, 21, 0, 255, 37, 21, 0, 255, 36, 20, 3, 255, 41, 20, 7, 255, 32, 19, 4, 255, 40, 22, 6, 255, 36, 18, 1, 255, 37, 21, 2, 255, 38, 23, 3, 255, 40, 24, 5, 255, 45, 24, 3, 255, 46, 23, 2, 255, 45, 26, 5, 255, 45, 24, 4, 255, 50, 23, 2, 255, 44, 24, 3, 255, 36, 23, 3, 255, 43, 26, 2, 255, 52, 27, 6, 255, 48, 26, 5, 255, 40, 23, 4, 255, 47, 23, 8, 255, 58, 28, 4, 255, 58, 31, 0, 255, 58, 28, 3, 255, 59, 27, 9, 255, 53, 29, 4, 255, 48, 29, 4, 255, 47, 22, 5, 255, 50, 27, 2, 255, 49, 30, 2, 255, 49, 29, 6, 255, 52, 27, 5, 255, 52, 29, 3, 255, 58, 25, 1, 255, 50, 24, 0, 255, 49, 31, 3, 255, 58, 30, 4, 255, 58, 27, 5, 255, 56, 25, 3, 255, 51, 28, 3, 255, 58, 32, 1, 255, 56, 28, 3, 255, 53, 26, 5, 255, 54, 28, 4, 255, 56, 28, 5, 255, 59, 26, 3, 255, 59, 32, 4, 255, 57, 29, 0, 255, 59, 29, 1, 255, 63, 30, 4, 255, 68, 29, 6, 255, 59, 24, 2, 255, 54, 31, 5, 255, 55, 30, 3, 255, 60, 30, 2, 255, 64, 30, 2, 255, 60, 30, 7, 255, 58, 28, 5, 255, 60, 29, 3, 255, 59, 28, 4, 255, 60, 28, 8, 255, 57, 29, 5, 255, 54, 30, 0, 255, 57, 34, 3, 255, 63, 28, 2, 255, 67, 28, 10, 255, 58, 29, 3, 255, 69, 32, 4, 255, 66, 34, 3, 255, 62, 32, 7, 255, 62, 29, 0, 255, 59, 30, 5, 255, 58, 34, 8, 255, 59, 34, 2, 255, 68, 41, 5, 255, 62, 37, 3, 255, 60, 36, 5, 255, 61, 38, 5, 255, 60, 36, 11, 255, 63, 43, 15, 255, 60, 45, 6, 255, 64, 49, 8, 255, 68, 49, 9, 255, 73, 54, 8, 255, 74, 55, 5, 255, 72, 52, 11, 255, 64, 47, 17, 255, 65, 49, 9, 255, 75, 57, 15, 255, 68, 54, 20, 255, 66, 57, 18, 255, 74, 60, 22, 255, 70, 56, 17, 255, 71, 59, 29, 255, 68, 56, 33, 255, 66, 60, 27, 255, 68, 65, 35, 255, 64, 62, 35, 255, 67, 66, 33, 255, 72, 70, 38, 255, 75, 71, 40, 255, 73, 68, 36, 255, 71, 66, 43, 255, 73, 73, 40, 255, 76, 77, 44, 255, 76, 77, 42, 255, 75, 77, 46, 255, 75, 76, 54, 255, 79, 82, 59, 255, 78, 82, 52, 255, 80, 86, 51, 255, 83, 89, 50, 255, 84, 90, 64, 255, 82, 91, 70, 255, 82, 93, 63, 255, 84, 94, 62, 255, 86, 99, 66, 255, 82, 101, 62, 255, 87, 102, 69, 255, 88, 101, 70, 255, 92, 106, 73, 255, 98, 108, 72, 255, 108, 113, 73, 255, 118, 120, 71, 255, 121, 118, 68, 255, 128, 120, 74, 255, 130, 123, 70, 255, 128, 120, 65, 255, 133, 121, 73, 255, 134, 118, 68, 255, 123, 117, 64, 255, 105, 112, 63, 255, 98, 114, 67, 255, 96, 113, 64, 255, 99, 112, 58, 255, 105, 116, 58, 255, 125, 114, 60, 255, 118, 113, 55, 255, 96, 104, 52, 255, 93, 105, 59, 255, 98, 100, 53, 255, 102, 100, 48, 255, 101, 98, 45, 255, 100, 96, 49, 255, 97, 96, 45, 255, 94, 92, 39, 255, 108, 95, 42, 255, 121, 95, 46, 255, 122, 91, 24, 255, 123, 88, 30, 255, 116, 84, 31, 255, 108, 84, 25, 255, 94, 75, 26, 255, 95, 79, 32, 255, 94, 78, 23, 255, 94, 78, 21, 255, 89, 72, 18, 255, 92, 72, 17, 255, 95, 69, 24, 255, 96, 67, 18, 255, 95, 68, 12, 255, 88, 63, 20, 255, 84, 59, 23, 255, 88, 62, 21, 255, 86, 60, 15, 255, 85, 58, 11, 255, 89, 59, 13, 255, 87, 56, 9, 255, 90, 55, 15, 255, 87, 49, 23, 255, 89, 53, 17, 255, 84, 54, 3, 255, 86, 55, 5, 255, 86, 51, 12, 255, 91, 48, 9, 255, 109, 50, 8, 255, 111, 47, 9, 255, 100, 46, 6, 255, 92, 44, 7, 255, 87, 44, 6, 255, 85, 46, 5, 255, 86, 45, 9, 255, 85, 40, 6, 255, 84, 40, 8, 255, 80, 38, 13, 255, 80, 41, 3, 255, 82, 40, 1, 255, 87, 42, 1, 255, 83, 40, 3, 255, 79, 39, 3, 255, 84, 40, 4, 255, 89, 39, 2, 255, 91, 39, 3, 255, 97, 41, 7, 255, 96, 36, 2, 255, 92, 36, 1, 255, 93, 37, 2, 255, 94, 37, 5, 255, 88, 35, 3, 255, 83, 39, 4, 255, 85, 32, 5, 255, 82, 32, 1, 255, 83, 38, 3, 255, 85, 34, 3, 255, 87, 30, 4, 255, 82, 31, 4, 255, 79, 32, 2, 255, 76, 30, 1, 255, 76, 35, 3, 255, 76, 34, 2, 255, 75, 29, 0, 255, 78, 32, 2, 255, 78, 33, 4, 255, 85, 38, 4, 255, 94, 38, 6, 255, 83, 34, 3, 255, 77, 29, 4, 255, 81, 30, 3, 255, 88, 34, 3, 255, 100, 35, 2, 255, 109, 35, 2, 255, 95, 31, 0, 255, 96, 33, 4, 255, 106, 34, 3, 255, 100, 36, 4, 255, 89, 30, 2, 255, 94, 29, 3, 255, 94, 28, 3, 255, 77, 29, 0, 255, 79, 32, 2, 255, 79, 27, 3, 255, 71, 26, 3, 255, 76, 29, 6, 255, 71, 23, 1, 255, 63, 25, 3, 255, 67, 25, 3, 255, 72, 29, 5, 255, 74, 29, 2, 255, 87, 29, 2, 255, 87, 27, 0, 255, 83, 31, 3, 255, 71, 27, 0, 255, 70, 28, 2, 255, 76, 28, 4, 255, 76, 25, 2, 255, 72, 28, 5, 255, 70, 25, 2, 255, 72, 26, 2, 255, 69, 28, 2, 255, 74, 26, 2, 255, 76, 25, 3, 255, 73, 23, 2, 255, 81, 29, 8, 255, 74, 22, 3, 255, 71, 24, 3, 255, 70, 25, 2, 255, 74, 23, 2, 255, 80, 28, 5, 255, 70, 22, 0, 255, 72, 22, 2, 255, 73, 25, 2, 255, 73, 27, 6, 255, 72, 23, 5, 255, 72, 22, 3, 255, 80, 25, 4, 255, 78, 23, 5, 255, 67, 21, 3, 255, 68, 23, 3, 255, 73, 22, 2, 255, 75, 21, 0, 255, 77, 24, 4, 255, 76, 20, 3, 255, 77, 19, 4, 255, 78, 22, 3, 255, 80, 22, 0, 255, 84, 23, 3, 255, 81, 24, 3, 255, 84, 24, 2, 255, 88, 26, 2, 255, 91, 26, 3, 255, 89, 23, 3, 255, 88, 25, 6, 255, 77, 25, 1, 255, 72, 21, 1, 255, 79, 20, 2, 255, 86, 24, 5, 255, 76, 26, 4, 255, 67, 24, 2, 255, 73, 21, 1, 255, 76, 20, 3, 255, 70, 20, 3, 255, 73, 19, 2, 255, 77, 20, 1, 255, 76, 21, 1, 255, 70, 21, 4, 255, 60, 16, 2, 255, 58, 18, 1, 255, 61, 21, 1, 255, 58, 18, 1, 255, 55, 18, 1, 255, 57, 16, 1, 255, 66, 16, 3, 255, 75, 17, 5, 255, 79, 19, 3, 255, 71, 20, 1, 255, 54, 18, 2, 255, 45, 15, 4, 255, 54, 14, 5, 255, 62, 16, 4, 255, 67, 19, 1, 255, 78, 17, 4, 255, 74, 19, 3, 255, 62, 13, 2, 255, 44, 13, 2, 255, 39, 13, 6, 255, 48, 14, 3, 255, 47, 16, 6, 255, 36, 8, 1, 255, 40, 13, 3, 255, 40, 11, 1, 255, 41, 13, 3, 255, 45, 14, 4, 255, 45, 12, 4, 255, 34, 5, 3, 255, 38, 14, 3, 255, 41, 15, 2, 255, 49, 13, 4, 255, 62, 18, 7, 255, 60, 16, 2, 255, 58, 14, 5, 255, 53, 14, 6, 255, 46, 9, 3, 255, 49, 11, 2, 255, 60, 16, 3, 255, 73, 18, 4, 255, 80, 22, 3, 255, 82, 23, 1, 255, 89, 24, 1, 255, 99, 26, 3, 255, 100, 26, 2, 255, 100, 27, 2, 255, 100, 26, 2, 255, 101, 27, 4, 255, 99, 28, 2, 255, 5, 4, 1, 255, 9, 7, 3, 255, 12, 9, 4, 255, 11, 5, 2, 255, 13, 5, 2, 255, 17, 7, 5, 255, 19, 9, 3, 255, 18, 9, 1, 255, 16, 9, 3, 255, 15, 8, 2, 255, 16, 9, 3, 255, 17, 8, 1, 255, 17, 7, 0, 255, 18, 9, 4, 255, 17, 6, 2, 255, 19, 8, 3, 255, 19, 9, 2, 255, 18, 9, 2, 255, 20, 10, 2, 255, 19, 12, 2, 255, 15, 10, 1, 255, 17, 10, 0, 255, 23, 12, 3, 255, 25, 12, 3, 255, 22, 11, 2, 255, 26, 13, 4, 255, 29, 14, 5, 255, 22, 10, 1, 255, 21, 10, 1, 255, 33, 14, 6, 255, 38, 14, 5, 255, 30, 13, 0, 255, 26, 11, 1, 255, 38, 21, 7, 255, 38, 19, 5, 255, 34, 14, 0, 255, 34, 17, 4, 255, 31, 18, 3, 255, 30, 18, 3, 255, 30, 16, 3, 255, 33, 16, 4, 255, 34, 17, 5, 255, 35, 19, 5, 255, 34, 17, 3, 255, 32, 12, 2, 255, 26, 12, 6, 255, 32, 17, 2, 255, 36, 21, 4, 255, 32, 15, 3, 255, 34, 17, 3, 255, 36, 20, 0, 255, 39, 20, 2, 255, 37, 20, 3, 255, 34, 18, 2, 255, 40, 21, 2, 255, 43, 21, 2, 255, 44, 23, 4, 255, 35, 20, 2, 255, 35, 19, 3, 255, 40, 21, 5, 255, 46, 24, 7, 255, 36, 19, 2, 255, 38, 22, 5, 255, 39, 22, 5, 255, 38, 23, 6, 255, 35, 20, 5, 255, 40, 21, 6, 255, 43, 19, 1, 255, 49, 25, 5, 255, 44, 26, 4, 255, 39, 24, 0, 255, 46, 28, 4, 255, 45, 25, 1, 255, 49, 25, 3, 255, 51, 26, 3, 255, 50, 28, 1, 255, 49, 28, 2, 255, 47, 23, 6, 255, 52, 29, 2, 255, 53, 32, 5, 255, 58, 27, 4, 255, 59, 24, 2, 255, 52, 29, 2, 255, 49, 25, 4, 255, 51, 25, 3, 255, 52, 30, 2, 255, 51, 31, 0, 255, 52, 24, 8, 255, 47, 25, 7, 255, 56, 25, 4, 255, 49, 28, 3, 255, 45, 29, 2, 255, 56, 28, 1, 255, 50, 28, 3, 255, 45, 28, 3, 255, 49, 27, 1, 255, 56, 28, 1, 255, 57, 29, 6, 255, 57, 29, 6, 255, 53, 27, 1, 255, 57, 31, 1, 255, 61, 31, 3, 255, 63, 31, 7, 255, 60, 31, 6, 255, 58, 29, 4, 255, 61, 29, 5, 255, 59, 26, 2, 255, 57, 28, 2, 255, 56, 30, 3, 255, 56, 30, 3, 255, 59, 29, 4, 255, 59, 28, 4, 255, 53, 26, 1, 255, 53, 27, 6, 255, 59, 33, 8, 255, 59, 27, 3, 255, 57, 32, 3, 255, 50, 28, 2, 255, 63, 31, 2, 255, 66, 27, 1, 255, 64, 28, 5, 255, 59, 29, 2, 255, 59, 30, 4, 255, 62, 35, 2, 255, 64, 34, 4, 255, 62, 30, 5, 255, 66, 33, 4, 255, 54, 31, 5, 255, 56, 30, 8, 255, 63, 36, 8, 255, 60, 31, 0, 255, 66, 39, 9, 255, 61, 36, 7, 255, 57, 34, 3, 255, 66, 33, 9, 255, 74, 39, 14, 255, 70, 42, 10, 255, 68, 43, 9, 255, 67, 44, 7, 255, 68, 48, 14, 255, 64, 49, 22, 255, 56, 49, 16, 255, 72, 49, 16, 255, 72, 48, 19, 255, 56, 49, 22, 255, 67, 53, 28, 255, 72, 56, 19, 255, 70, 53, 20, 255, 69, 55, 20, 255, 66, 60, 35, 255, 61, 60, 26, 255, 66, 63, 27, 255, 65, 58, 36, 255, 71, 62, 35, 255, 72, 65, 29, 255, 72, 68, 34, 255, 70, 67, 41, 255, 69, 67, 39, 255, 70, 68, 44, 255, 71, 73, 46, 255, 80, 79, 49, 255, 75, 74, 51, 255, 75, 75, 57, 255, 76, 79, 57, 255, 76, 82, 53, 255, 80, 88, 54, 255, 84, 92, 58, 255, 85, 94, 48, 255, 85, 94, 55, 255, 84, 92, 66, 255, 84, 95, 64, 255, 87, 98, 64, 255, 90, 103, 66, 255, 86, 106, 60, 255, 88, 107, 66, 255, 89, 108, 70, 255, 89, 111, 74, 255, 86, 109, 71, 255, 91, 111, 73, 255, 95, 113, 77, 255, 99, 113, 74, 255, 106, 115, 79, 255, 112, 120, 74, 255, 110, 119, 68, 255, 112, 119, 72, 255, 110, 115, 73, 255, 104, 113, 77, 255, 96, 113, 68, 255, 97, 118, 63, 255, 99, 114, 67, 255, 101, 108, 71, 255, 109, 114, 71, 255, 118, 113, 65, 255, 114, 107, 61, 255, 102, 103, 52, 255, 100, 104, 58, 255, 96, 96, 59, 255, 94, 97, 56, 255, 97, 98, 49, 255, 98, 97, 42, 255, 96, 96, 39, 255, 95, 93, 36, 255, 103, 91, 41, 255, 112, 91, 37, 255, 113, 86, 36, 255, 110, 84, 34, 255, 105, 82, 22, 255, 99, 78, 22, 255, 95, 78, 23, 255, 92, 74, 24, 255, 94, 74, 17, 255, 93, 71, 22, 255, 92, 67, 22, 255, 96, 71, 21, 255, 90, 70, 22, 255, 85, 67, 15, 255, 92, 66, 15, 255, 92, 63, 17, 255, 87, 64, 15, 255, 81, 61, 19, 255, 79, 57, 16, 255, 84, 58, 13, 255, 87, 56, 9, 255, 89, 54, 8, 255, 96, 57, 14, 255, 89, 53, 10, 255, 86, 55, 6, 255, 80, 50, 7, 255, 85, 55, 9, 255, 85, 55, 3, 255, 83, 51, 4, 255, 86, 46, 4, 255, 92, 49, 7, 255, 84, 47, 3, 255, 84, 46, 3, 255, 86, 42, 1, 255, 87, 45, 0, 255, 81, 47, 1, 255, 84, 41, 2, 255, 87, 40, 4, 255, 84, 38, 8, 255, 82, 39, 6, 255, 79, 40, 4, 255, 91, 38, 4, 255, 91, 38, 5, 255, 85, 37, 3, 255, 88, 40, 4, 255, 91, 38, 2, 255, 91, 38, 2, 255, 94, 40, 4, 255, 94, 37, 0, 255, 95, 38, 4, 255, 90, 35, 2, 255, 88, 39, 5, 255, 82, 37, 3, 255, 83, 38, 2, 255, 81, 33, 3, 255, 78, 34, 3, 255, 81, 35, 4, 255, 81, 32, 1, 255, 79, 32, 0, 255, 86, 35, 6, 255, 83, 34, 3, 255, 79, 32, 1, 255, 81, 33, 4, 255, 77, 32, 5, 255, 74, 31, 1, 255, 81, 35, 1, 255, 93, 34, 3, 255, 103, 32, 4, 255, 104, 38, 4, 255, 98, 35, 2, 255, 82, 34, 3, 255, 77, 28, 4, 255, 85, 28, 8, 255, 92, 34, 2, 255, 96, 28, 3, 255, 94, 28, 6, 255, 89, 30, 2, 255, 93, 29, 1, 255, 90, 27, 7, 255, 80, 27, 7, 255, 73, 24, 2, 255, 73, 26, 4, 255, 80, 26, 5, 255, 77, 28, 3, 255, 76, 30, 4, 255, 74, 25, 4, 255, 72, 25, 2, 255, 70, 23, 1, 255, 70, 26, 3, 255, 75, 26, 6, 255, 77, 24, 3, 255, 83, 28, 4, 255, 94, 30, 5, 255, 88, 23, 1, 255, 80, 23, 4, 255, 70, 23, 3, 255, 72, 29, 5, 255, 73, 27, 2, 255, 76, 27, 1, 255, 71, 27, 3, 255, 69, 25, 3, 255, 73, 25, 3, 255, 87, 24, 1, 255, 87, 28, 2, 255, 76, 27, 1, 255, 74, 25, 2, 255, 74, 22, 3, 255, 73, 24, 3, 255, 71, 26, 4, 255, 70, 24, 0, 255, 77, 23, 2, 255, 94, 26, 7, 255, 99, 30, 6, 255, 78, 28, 1, 255, 71, 22, 1, 255, 85, 27, 5, 255, 86, 26, 3, 255, 77, 21, 2, 255, 70, 20, 4, 255, 67, 24, 7, 255, 71, 23, 6, 255, 78, 27, 6, 255, 79, 27, 3, 255, 86, 26, 3, 255, 88, 24, 1, 255, 80, 25, 0, 255, 78, 24, 3, 255, 77, 21, 1, 255, 74, 22, 0, 255, 77, 22, 2, 255, 81, 19, 4, 255, 83, 22, 5, 255, 78, 23, 2, 255, 82, 22, 4, 255, 81, 20, 4, 255, 75, 23, 4, 255, 70, 21, 1, 255, 71, 20, 2, 255, 75, 22, 2, 255, 77, 24, 4, 255, 77, 22, 2, 255, 80, 23, 5, 255, 84, 22, 4, 255, 82, 21, 4, 255, 73, 19, 4, 255, 69, 20, 2, 255, 65, 21, 1, 255, 63, 20, 0, 255, 64, 19, 2, 255, 64, 19, 4, 255, 65, 16, 2, 255, 71, 19, 6, 255, 66, 17, 2, 255, 59, 15, 2, 255, 63, 18, 7, 255, 66, 16, 5, 255, 66, 15, 3, 255, 66, 13, 2, 255, 69, 11, 4, 255, 66, 15, 5, 255, 55, 15, 2, 255, 52, 15, 4, 255, 59, 18, 9, 255, 70, 16, 5, 255, 75, 16, 5, 255, 67, 16, 3, 255, 53, 12, 0, 255, 41, 16, 2, 255, 39, 15, 3, 255, 46, 12, 2, 255, 46, 12, 3, 255, 41, 11, 4, 255, 35, 7, 0, 255, 40, 13, 1, 255, 39, 11, 2, 255, 38, 12, 2, 255, 36, 12, 5, 255, 38, 8, 6, 255, 39, 14, 4, 255, 36, 14, 1, 255, 41, 11, 0, 255, 57, 16, 5, 255, 63, 17, 3, 255, 54, 14, 5, 255, 34, 5, 0, 255, 36, 16, 5, 255, 36, 13, 1, 255, 39, 9, 3, 255, 59, 15, 3, 255, 72, 21, 2, 255, 74, 20, 1, 255, 83, 21, 3, 255, 94, 24, 6, 255, 98, 23, 1, 255, 100, 25, 0, 255, 99, 28, 3, 255, 99, 26, 2, 255, 100, 23, 0, 255, 9, 4, 2, 255, 9, 5, 2, 255, 10, 7, 3, 255, 11, 8, 3, 255, 10, 4, 1, 255, 16, 6, 4, 255, 15, 5, 2, 255, 14, 6, 1, 255, 15, 8, 2, 255, 13, 6, 1, 255, 12, 5, 0, 255, 16, 7, 2, 255, 17, 7, 2, 255, 15, 5, 1, 255, 16, 6, 1, 255, 17, 7, 3, 255, 17, 8, 1, 255, 19, 10, 3, 255, 18, 9, 2, 255, 17, 10, 1, 255, 17, 11, 2, 255, 19, 12, 4, 255, 19, 9, 2, 255, 21, 9, 3, 255, 18, 9, 1, 255, 20, 9, 1, 255, 21, 14, 2, 255, 22, 13, 3, 255, 37, 12, 8, 255, 34, 14, 8, 255, 23, 14, 0, 255, 36, 14, 2, 255, 32, 14, 3, 255, 34, 16, 3, 255, 34, 16, 1, 255, 34, 18, 4, 255, 31, 17, 4, 255, 26, 16, 1, 255, 22, 15, 3, 255, 27, 17, 7, 255, 29, 15, 6, 255, 30, 15, 5, 255, 31, 17, 4, 255, 31, 16, 1, 255, 35, 19, 3, 255, 32, 18, 2, 255, 34, 18, 3, 255, 37, 19, 4, 255, 36, 16, 1, 255, 35, 16, 1, 255, 36, 20, 5, 255, 38, 18, 1, 255, 36, 17, 0, 255, 35, 20, 3, 255, 36, 20, 1, 255, 41, 22, 4, 255, 37, 18, 1, 255, 39, 21, 5, 255, 37, 20, 5, 255, 33, 22, 2, 255, 33, 21, 1, 255, 36, 26, 5, 255, 36, 22, 3, 255, 39, 22, 4, 255, 40, 24, 2, 255, 43, 23, 7, 255, 46, 21, 7, 255, 48, 23, 1, 255, 51, 27, 0, 255, 48, 25, 2, 255, 44, 25, 5, 255, 47, 23, 5, 255, 48, 22, 5, 255, 47, 24, 6, 255, 49, 22, 3, 255, 55, 27, 4, 255, 51, 28, 2, 255, 57, 29, 2, 255, 50, 22, 4, 255, 49, 19, 5, 255, 48, 25, 0, 255, 46, 29, 0, 255, 46, 28, 3, 255, 47, 27, 2, 255, 51, 27, 3, 255, 52, 28, 5, 255, 50, 27, 4, 255, 48, 20, 5, 255, 43, 24, 5, 255, 52, 26, 3, 255, 56, 29, 5, 255, 57, 28, 2, 255, 55, 26, 4, 255, 46, 26, 1, 255, 54, 31, 3, 255, 56, 29, 5, 255, 58, 30, 4, 255, 54, 26, 3, 255, 55, 27, 4, 255, 55, 29, 2, 255, 58, 32, 2, 255, 59, 30, 2, 255, 58, 27, 3, 255, 52, 26, 3, 255, 53, 28, 4, 255, 59, 30, 5, 255, 55, 26, 1, 255, 58, 31, 4, 255, 60, 28, 2, 255, 58, 28, 6, 255, 59, 30, 4, 255, 55, 30, 2, 255, 57, 31, 8, 255, 59, 33, 4, 255, 57, 29, 5, 255, 59, 27, 3, 255, 58, 28, 3, 255, 63, 33, 5, 255, 61, 31, 4, 255, 59, 29, 3, 255, 56, 29, 2, 255, 54, 28, 2, 255, 63, 30, 5, 255, 70, 32, 3, 255, 65, 30, 4, 255, 58, 30, 5, 255, 68, 29, 4, 255, 57, 27, 5, 255, 54, 33, 6, 255, 65, 41, 8, 255, 65, 36, 3, 255, 66, 36, 5, 255, 63, 34, 4, 255, 65, 38, 5, 255, 72, 40, 3, 255, 73, 40, 7, 255, 68, 43, 10, 255, 64, 44, 4, 255, 64, 47, 8, 255, 61, 46, 15, 255, 65, 50, 14, 255, 70, 45, 15, 255, 65, 47, 21, 255, 64, 51, 13, 255, 68, 51, 18, 255, 68, 54, 29, 255, 69, 57, 20, 255, 74, 58, 18, 255, 70, 57, 28, 255, 67, 62, 24, 255, 63, 62, 32, 255, 66, 63, 41, 255, 75, 68, 24, 255, 77, 66, 23, 255, 75, 69, 27, 255, 74, 72, 35, 255, 71, 72, 26, 255, 71, 72, 36, 255, 73, 75, 36, 255, 73, 78, 39, 255, 74, 74, 49, 255, 75, 74, 52, 255, 76, 78, 57, 255, 77, 81, 57, 255, 78, 85, 54, 255, 79, 88, 54, 255, 83, 92, 58, 255, 86, 98, 49, 255, 87, 99, 54, 255, 84, 94, 63, 255, 86, 98, 60, 255, 91, 103, 62, 255, 92, 104, 67, 255, 90, 103, 71, 255, 92, 106, 72, 255, 93, 108, 74, 255, 91, 110, 74, 255, 88, 110, 72, 255, 92, 115, 76, 255, 101, 116, 73, 255, 103, 117, 73, 255, 100, 116, 82, 255, 97, 116, 79, 255, 95, 114, 72, 255, 102, 118, 76, 255, 101, 117, 67, 255, 99, 115, 71, 255, 99, 116, 80, 255, 98, 116, 66, 255, 99, 116, 64, 255, 96, 109, 68, 255, 97, 108, 66, 255, 93, 107, 62, 255, 96, 103, 65, 255, 95, 104, 59, 255, 96, 105, 53, 255, 98, 101, 50, 255, 93, 97, 56, 255, 91, 94, 49, 255, 94, 94, 39, 255, 92, 93, 50, 255, 90, 92, 35, 255, 90, 90, 26, 255, 94, 90, 26, 255, 94, 85, 43, 255, 90, 81, 36, 255, 90, 79, 29, 255, 90, 76, 35, 255, 90, 77, 29, 255, 91, 75, 26, 255, 95, 72, 32, 255, 92, 69, 27, 255, 93, 70, 21, 255, 93, 70, 15, 255, 92, 65, 14, 255, 92, 66, 12, 255, 88, 67, 11, 255, 83, 60, 12, 255, 86, 58, 13, 255, 88, 57, 15, 255, 88, 54, 16, 255, 88, 53, 16, 255, 88, 55, 11, 255, 89, 57, 6, 255, 88, 53, 16, 255, 90, 54, 6, 255, 84, 51, 0, 255, 82, 51, 11, 255, 80, 48, 8, 255, 87, 49, 8, 255, 83, 53, 9, 255, 89, 49, 3, 255, 109, 48, 9, 255, 97, 43, 6, 255, 86, 43, 5, 255, 84, 43, 6, 255, 84, 42, 6, 255, 83, 40, 6, 255, 83, 40, 8, 255, 85, 44, 7, 255, 81, 39, 5, 255, 81, 37, 5, 255, 82, 38, 3, 255, 85, 38, 3, 255, 84, 39, 3, 255, 78, 34, 0, 255, 84, 40, 6, 255, 92, 44, 7, 255, 92, 39, 2, 255, 91, 35, 0, 255, 91, 36, 1, 255, 90, 38, 1, 255, 86, 41, 1, 255, 85, 40, 2, 255, 86, 36, 3, 255, 87, 32, 4, 255, 86, 31, 3, 255, 81, 32, 2, 255, 80, 36, 4, 255, 76, 35, 3, 255, 76, 36, 4, 255, 81, 31, 1, 255, 82, 31, 3, 255, 78, 30, 3, 255, 74, 27, 2, 255, 77, 31, 6, 255, 76, 31, 3, 255, 78, 29, 0, 255, 98, 36, 6, 255, 112, 36, 5, 255, 102, 39, 2, 255, 106, 32, 0, 255, 102, 35, 4, 255, 95, 35, 2, 255, 99, 36, 2, 255, 92, 33, 4, 255, 74, 26, 3, 255, 75, 26, 7, 255, 72, 27, 4, 255, 77, 26, 7, 255, 84, 25, 4, 255, 82, 31, 1, 255, 81, 31, 4, 255, 85, 31, 5, 255, 88, 33, 5, 255, 86, 30, 1, 255, 85, 31, 1, 255, 79, 32, 3, 255, 72, 24, 1, 255, 74, 26, 3, 255, 72, 26, 2, 255, 72, 27, 3, 255, 71, 27, 2, 255, 72, 26, 0, 255, 67, 24, 2, 255, 66, 26, 3, 255, 72, 24, 1, 255, 76, 25, 3, 255, 72, 24, 1, 255, 72, 24, 2, 255, 71, 25, 3, 255, 71, 24, 1, 255, 67, 22, 2, 255, 75, 24, 3, 255, 95, 24, 1, 255, 96, 28, 1, 255, 86, 30, 4, 255, 71, 26, 3, 255, 68, 20, 0, 255, 75, 22, 3, 255, 74, 23, 4, 255, 68, 21, 1, 255, 71, 23, 3, 255, 80, 23, 2, 255, 91, 27, 3, 255, 81, 29, 3, 255, 66, 19, 0, 255, 72, 24, 1, 255, 78, 29, 2, 255, 73, 22, 1, 255, 62, 21, 5, 255, 58, 21, 3, 255, 65, 20, 4, 255, 75, 24, 4, 255, 75, 23, 0, 255, 86, 25, 2, 255, 89, 24, 4, 255, 79, 21, 0, 255, 75, 23, 2, 255, 78, 25, 4, 255, 73, 24, 2, 255, 74, 24, 2, 255, 82, 25, 5, 255, 82, 25, 5, 255, 79, 23, 2, 255, 77, 23, 2, 255, 73, 21, 1, 255, 74, 21, 1, 255, 69, 22, 0, 255, 72, 22, 4, 255, 74, 21, 3, 255, 76, 22, 1, 255, 77, 21, 2, 255, 82, 22, 6, 255, 84, 21, 4, 255, 86, 20, 3, 255, 83, 20, 4, 255, 69, 16, 2, 255, 66, 20, 4, 255, 66, 21, 3, 255, 68, 21, 3, 255, 69, 18, 3, 255, 68, 19, 3, 255, 70, 20, 4, 255, 68, 19, 3, 255, 60, 19, 4, 255, 56, 17, 5, 255, 58, 17, 4, 255, 55, 14, 2, 255, 55, 15, 3, 255, 57, 14, 3, 255, 59, 14, 1, 255, 59, 17, 3, 255, 49, 17, 2, 255, 44, 13, 2, 255, 63, 15, 5, 255, 60, 13, 1, 255, 54, 14, 0, 255, 49, 16, 3, 255, 39, 12, 0, 255, 42, 11, 2, 255, 43, 12, 2, 255, 39, 8, 0, 255, 40, 10, 2, 255, 40, 13, 4, 255, 36, 12, 2, 255, 37, 12, 2, 255, 35, 12, 2, 255, 31, 13, 5, 255, 36, 10, 5, 255, 45, 14, 4, 255, 45, 12, 2, 255, 33, 4, 0, 255, 34, 10, 1, 255, 38, 9, 3, 255, 32, 9, 1, 255, 24, 9, 1, 255, 20, 10, 4, 255, 23, 10, 7, 255, 25, 5, 3, 255, 32, 6, 2, 255, 43, 12, 3, 255, 57, 18, 3, 255, 72, 18, 2, 255, 83, 20, 3, 255, 90, 22, 3, 255, 95, 25, 3, 255, 97, 22, 3, 255, 96, 25, 4, 255, 97, 24, 4, 255, 14, 4, 3, 255, 12, 4, 2, 255, 10, 5, 2, 255, 11, 7, 4, 255, 9, 6, 1, 255, 13, 7, 3, 255, 12, 3, 1, 255, 13, 4, 2, 255, 15, 7, 4, 255, 14, 5, 3, 255, 13, 5, 1, 255, 16, 9, 3, 255, 16, 10, 4, 255, 10, 6, 2, 255, 13, 8, 2, 255, 15, 8, 2, 255, 17, 8, 3, 255, 18, 9, 2, 255, 17, 8, 1, 255, 18, 9, 2, 255, 17, 9, 2, 255, 18, 11, 3, 255, 20, 10, 4, 255, 19, 7, 1, 255, 20, 9, 4, 255, 17, 10, 1, 255, 24, 14, 4, 255, 26, 11, 4, 255, 20, 11, 2, 255, 24, 14, 4, 255, 32, 13, 3, 255, 37, 18, 4, 255, 33, 15, 1, 255, 32, 14, 1, 255, 33, 15, 3, 255, 33, 16, 3, 255, 31, 15, 2, 255, 31, 16, 6, 255, 30, 19, 4, 255, 28, 17, 0, 255, 29, 15, 3, 255, 28, 14, 4, 255, 24, 13, 4, 255, 28, 16, 9, 255, 32, 18, 7, 255, 40, 23, 2, 255, 35, 18, 2, 255, 37, 18, 4, 255, 38, 17, 2, 255, 38, 20, 6, 255, 27, 13, 3, 255, 35, 16, 3, 255, 40, 21, 6, 255, 32, 19, 2, 255, 31, 19, 2, 255, 32, 19, 4, 255, 26, 14, 1, 255, 32, 22, 4, 255, 39, 20, 7, 255, 38, 17, 3, 255, 38, 21, 5, 255, 31, 25, 2, 255, 36, 23, 0, 255, 44, 22, 3, 255, 48, 24, 2, 255, 38, 23, 5, 255, 35, 24, 7, 255, 44, 25, 4, 255, 49, 23, 2, 255, 46, 23, 7, 255, 41, 21, 5, 255, 51, 24, 5, 255, 50, 24, 3, 255, 47, 26, 0, 255, 55, 30, 5, 255, 54, 26, 4, 255, 47, 23, 2, 255, 46, 24, 1, 255, 52, 30, 8, 255, 56, 31, 8, 255, 53, 31, 4, 255, 50, 31, 8, 255, 50, 24, 5, 255, 45, 25, 5, 255, 46, 25, 2, 255, 47, 23, 2, 255, 47, 23, 6, 255, 50, 25, 3, 255, 43, 28, 2, 255, 49, 26, 2, 255, 54, 26, 3, 255, 59, 27, 6, 255, 58, 28, 3, 255, 49, 28, 3, 255, 54, 26, 5, 255, 59, 29, 2, 255, 57, 31, 4, 255, 54, 27, 3, 255, 52, 25, 2, 255, 54, 28, 3, 255, 56, 30, 5, 255, 55, 26, 4, 255, 56, 26, 4, 255, 50, 28, 1, 255, 52, 30, 2, 255, 58, 32, 5, 255, 56, 31, 3, 255, 59, 32, 2, 255, 64, 28, 3, 255, 62, 30, 6, 255, 58, 27, 4, 255, 60, 32, 5, 255, 59, 29, 1, 255, 61, 28, 4, 255, 68, 34, 4, 255, 55, 27, 1, 255, 53, 24, 2, 255, 59, 31, 4, 255, 52, 31, 4, 255, 51, 30, 4, 255, 57, 28, 4, 255, 63, 30, 7, 255, 63, 31, 7, 255, 64, 31, 1, 255, 65, 27, 5, 255, 60, 32, 8, 255, 63, 31, 5, 255, 57, 25, 3, 255, 55, 36, 5, 255, 60, 39, 4, 255, 64, 39, 4, 255, 64, 35, 6, 255, 65, 35, 6, 255, 71, 38, 6, 255, 70, 40, 6, 255, 65, 43, 3, 255, 64, 46, 7, 255, 60, 42, 12, 255, 64, 45, 14, 255, 63, 45, 7, 255, 64, 47, 6, 255, 67, 49, 18, 255, 58, 45, 17, 255, 61, 48, 17, 255, 72, 56, 22, 255, 65, 57, 17, 255, 62, 57, 22, 255, 71, 63, 20, 255, 71, 62, 22, 255, 72, 64, 16, 255, 70, 63, 24, 255, 68, 63, 33, 255, 76, 70, 21, 255, 74, 64, 32, 255, 69, 62, 42, 255, 71, 69, 43, 255, 72, 73, 39, 255, 74, 76, 39, 255, 75, 77, 40, 255, 75, 76, 47, 255, 70, 74, 54, 255, 74, 79, 51, 255, 77, 83, 48, 255, 77, 84, 53, 255, 80, 86, 59, 255, 81, 88, 58, 255, 82, 90, 62, 255, 82, 91, 59, 255, 86, 95, 69, 255, 87, 96, 76, 255, 87, 99, 64, 255, 92, 104, 66, 255, 95, 107, 76, 255, 90, 105, 81, 255, 90, 107, 81, 255, 92, 108, 81, 255, 95, 112, 82, 255, 96, 114, 81, 255, 95, 115, 81, 255, 97, 120, 74, 255, 98, 120, 71, 255, 98, 115, 79, 255, 103, 116, 82, 255, 102, 115, 80, 255, 100, 115, 78, 255, 98, 117, 68, 255, 100, 118, 68, 255, 99, 115, 70, 255, 97, 113, 64, 255, 97, 112, 74, 255, 95, 108, 75, 255, 95, 111, 60, 255, 93, 109, 60, 255, 94, 106, 64, 255, 91, 106, 58, 255, 90, 105, 45, 255, 95, 101, 49, 255, 97, 97, 54, 255, 94, 94, 57, 255, 92, 95, 46, 255, 92, 94, 41, 255, 93, 92, 40, 255, 91, 88, 34, 255, 90, 86, 32, 255, 92, 83, 37, 255, 93, 79, 32, 255, 92, 80, 25, 255, 90, 77, 24, 255, 85, 72, 29, 255, 87, 75, 26, 255, 87, 72, 26, 255, 91, 71, 29, 255, 89, 71, 18, 255, 89, 68, 16, 255, 94, 68, 18, 255, 95, 67, 12, 255, 90, 65, 12, 255, 84, 61, 16, 255, 81, 57, 18, 255, 85, 56, 15, 255, 87, 56, 15, 255, 89, 53, 12, 255, 98, 58, 13, 255, 99, 59, 8, 255, 93, 49, 13, 255, 85, 48, 5, 255, 84, 51, 7, 255, 86, 49, 15, 255, 86, 49, 10, 255, 80, 47, 9, 255, 78, 48, 7, 255, 91, 46, 4, 255, 102, 46, 7, 255, 90, 45, 6, 255, 80, 44, 5, 255, 83, 44, 8, 255, 85, 41, 6, 255, 87, 42, 5, 255, 80, 38, 5, 255, 80, 41, 1, 255, 81, 41, 1, 255, 82, 38, 4, 255, 82, 38, 1, 255, 80, 36, 1, 255, 81, 39, 4, 255, 77, 37, 1, 255, 80, 38, 4, 255, 86, 40, 6, 255, 89, 38, 3, 255, 97, 39, 7, 255, 102, 39, 10, 255, 92, 37, 1, 255, 95, 43, 1, 255, 98, 44, 5, 255, 89, 38, 5, 255, 77, 31, 5, 255, 80, 34, 5, 255, 84, 32, 5, 255, 82, 33, 5, 255, 79, 35, 6, 255, 80, 32, 3, 255, 83, 32, 1, 255, 81, 28, 4, 255, 81, 29, 10, 255, 74, 29, 2, 255, 79, 34, 5, 255, 83, 34, 6, 255, 78, 27, 4, 255, 81, 32, 8, 255, 98, 36, 5, 255, 110, 31, 3, 255, 105, 30, 2, 255, 106, 33, 4, 255, 106, 32, 3, 255, 99, 32, 1, 255, 91, 30, 1, 255, 67, 29, 1, 255, 65, 27, 2, 255, 66, 26, 4, 255, 58, 26, 5, 255, 66, 25, 2, 255, 85, 37, 2, 255, 96, 33, 1, 255, 98, 29, 1, 255, 92, 31, 0, 255, 100, 33, 2, 255, 101, 32, 4, 255, 82, 28, 1, 255, 74, 27, 4, 255, 71, 25, 1, 255, 72, 26, 1, 255, 72, 29, 4, 255, 69, 29, 3, 255, 69, 30, 3, 255, 61, 24, 2, 255, 64, 23, 5, 255, 73, 25, 5, 255, 76, 25, 4, 255, 71, 25, 3, 255, 68, 27, 5, 255, 67, 26, 3, 255, 73, 25, 2, 255, 72, 24, 6, 255, 77, 23, 4, 255, 83, 27, 1, 255, 92, 28, 1, 255, 87, 23, 1, 255, 69, 24, 3, 255, 70, 23, 5, 255, 73, 22, 5, 255, 70, 21, 4, 255, 63, 20, 2, 255, 65, 22, 4, 255, 70, 25, 4, 255, 73, 23, 2, 255, 71, 19, 3, 255, 69, 23, 4, 255, 64, 25, 2, 255, 61, 24, 3, 255, 62, 23, 1, 255, 59, 22, 3, 255, 61, 21, 3, 255, 63, 22, 4, 255, 68, 24, 4, 255, 75, 24, 3, 255, 73, 23, 3, 255, 78, 24, 5, 255, 80, 22, 4, 255, 75, 21, 4, 255, 71, 25, 7, 255, 71, 23, 6, 255, 73, 21, 3, 255, 73, 24, 3, 255, 72, 21, 1, 255, 78, 24, 3, 255, 79, 27, 5, 255, 74, 22, 2, 255, 75, 20, 1, 255, 79, 25, 4, 255, 74, 21, 4, 255, 76, 18, 1, 255, 77, 19, 1, 255, 72, 20, 1, 255, 69, 21, 2, 255, 71, 19, 1, 255, 79, 20, 1, 255, 80, 19, 0, 255, 74, 19, 3, 255, 68, 16, 2, 255, 71, 19, 4, 255, 70, 21, 2, 255, 67, 19, 0, 255, 66, 17, 2, 255, 66, 16, 1, 255, 66, 18, 2, 255, 59, 18, 3, 255, 56, 18, 3, 255, 55, 18, 2, 255, 58, 16, 5, 255, 63, 18, 6, 255, 66, 19, 4, 255, 65, 18, 3, 255, 60, 16, 2, 255, 58, 16, 2, 255, 59, 16, 3, 255, 56, 15, 2, 255, 55, 16, 2, 255, 54, 18, 4, 255, 43, 13, 2, 255, 40, 13, 3, 255, 44, 13, 5, 255, 41, 14, 4, 255, 42, 14, 4, 255, 40, 12, 1, 255, 38, 13, 3, 255, 36, 12, 2, 255, 40, 15, 6, 255, 37, 9, 0, 255, 39, 12, 3, 255, 38, 10, 2, 255, 37, 10, 0, 255, 42, 14, 5, 255, 35, 9, 8, 255, 31, 8, 4, 255, 35, 7, 4, 255, 33, 8, 3, 255, 31, 11, 3, 255, 23, 5, 0, 255, 27, 9, 5, 255, 25, 11, 2, 255, 20, 5, 2, 255, 21, 4, 3, 255, 29, 10, 1, 255, 40, 12, 1, 255, 57, 16, 3, 255, 76, 20, 6, 255, 88, 22, 5, 255, 93, 20, 2, 255, 90, 24, 1, 255, 87, 27, 1, 255, 14, 4, 3, 255, 14, 5, 3, 255, 10, 5, 2, 255, 9, 4, 1, 255, 9, 5, 1, 255, 12, 7, 3, 255, 12, 6, 3, 255, 12, 5, 2, 255, 12, 5, 2, 255, 10, 6, 2, 255, 12, 7, 3, 255, 12, 8, 3, 255, 12, 8, 3, 255, 13, 9, 4, 255, 11, 5, 2, 255, 14, 6, 2, 255, 18, 9, 4, 255, 15, 6, 1, 255, 18, 9, 2, 255, 17, 8, 3, 255, 16, 9, 3, 255, 18, 10, 3, 255, 18, 8, 2, 255, 21, 9, 2, 255, 22, 10, 4, 255, 17, 8, 0, 255, 22, 12, 4, 255, 25, 12, 3, 255, 22, 13, 2, 255, 29, 10, 1, 255, 35, 12, 2, 255, 29, 18, 3, 255, 32, 15, 2, 255, 32, 14, 3, 255, 30, 14, 3, 255, 29, 13, 1, 255, 30, 14, 2, 255, 32, 14, 5, 255, 31, 16, 5, 255, 30, 15, 4, 255, 25, 11, 1, 255, 24, 14, 4, 255, 24, 16, 5, 255, 26, 16, 4, 255, 31, 16, 3, 255, 37, 19, 5, 255, 36, 21, 6, 255, 36, 20, 4, 255, 35, 16, 2, 255, 40, 21, 7, 255, 30, 18, 2, 255, 41, 17, 7, 255, 41, 15, 4, 255, 39, 16, 3, 255, 35, 17, 3, 255, 32, 15, 1, 255, 39, 20, 6, 255, 39, 21, 4, 255, 38, 17, 3, 255, 39, 17, 3, 255, 46, 17, 5, 255, 43, 15, 1, 255, 45, 21, 3, 255, 41, 23, 3, 255, 43, 21, 0, 255, 45, 24, 3, 255, 42, 23, 2, 255, 44, 27, 3, 255, 44, 24, 1, 255, 51, 22, 3, 255, 50, 24, 4, 255, 48, 25, 1, 255, 52, 29, 4, 255, 49, 28, 1, 255, 48, 26, 1, 255, 50, 25, 5, 255, 51, 26, 7, 255, 48, 26, 3, 255, 50, 26, 11, 255, 50, 32, 11, 255, 53, 33, 8, 255, 59, 33, 11, 255, 50, 28, 2, 255, 44, 27, 10, 255, 48, 27, 6, 255, 50, 26, 3, 255, 48, 24, 2, 255, 51, 24, 1, 255, 43, 26, 2, 255, 50, 25, 6, 255, 46, 28, 2, 255, 48, 32, 3, 255, 54, 25, 3, 255, 53, 32, 7, 255, 53, 33, 5, 255, 58, 28, 3, 255, 52, 28, 4, 255, 55, 28, 6, 255, 52, 26, 3, 255, 52, 26, 3, 255, 54, 28, 6, 255, 53, 22, 4, 255, 55, 25, 4, 255, 54, 28, 2, 255, 53, 27, 0, 255, 54, 30, 3, 255, 55, 32, 3, 255, 56, 28, 1, 255, 62, 27, 2, 255, 61, 26, 4, 255, 59, 29, 5, 255, 58, 29, 4, 255, 57, 27, 3, 255, 58, 28, 2, 255, 55, 26, 3, 255, 60, 25, 7, 255, 62, 32, 5, 255, 52, 28, 4, 255, 52, 30, 5, 255, 51, 27, 4, 255, 56, 29, 6, 255, 58, 29, 3, 255, 56, 28, 5, 255, 56, 31, 2, 255, 57, 34, 6, 255, 57, 31, 9, 255, 66, 31, 4, 255, 58, 34, 7, 255, 57, 34, 6, 255, 60, 35, 5, 255, 59, 34, 3, 255, 60, 34, 9, 255, 59, 32, 9, 255, 66, 34, 7, 255, 65, 35, 5, 255, 62, 38, 7, 255, 64, 43, 11, 255, 58, 37, 7, 255, 65, 39, 14, 255, 71, 46, 16, 255, 70, 46, 9, 255, 72, 53, 10, 255, 72, 53, 10, 255, 68, 52, 13, 255, 64, 56, 17, 255, 69, 53, 17, 255, 63, 57, 22, 255, 61, 60, 21, 255, 69, 62, 15, 255, 72, 60, 34, 255, 70, 64, 20, 255, 70, 69, 17, 255, 70, 65, 26, 255, 75, 69, 34, 255, 68, 66, 35, 255, 68, 70, 30, 255, 72, 72, 46, 255, 75, 77, 36, 255, 74, 75, 49, 255, 72, 73, 57, 255, 71, 78, 57, 255, 74, 83, 50, 255, 79, 87, 49, 255, 81, 89, 55, 255, 81, 87, 61, 255, 82, 88, 59, 255, 87, 98, 59, 255, 87, 97, 56, 255, 86, 95, 67, 255, 88, 98, 74, 255, 90, 104, 73, 255, 91, 104, 79, 255, 90, 103, 77, 255, 88, 110, 78, 255, 88, 111, 81, 255, 88, 112, 83, 255, 91, 112, 85, 255, 96, 115, 88, 255, 97, 117, 90, 255, 101, 116, 89, 255, 101, 119, 83, 255, 95, 118, 80, 255, 97, 119, 79, 255, 98, 119, 80, 255, 95, 117, 81, 255, 96, 120, 75, 255, 96, 116, 73, 255, 96, 113, 75, 255, 100, 116, 72, 255, 98, 114, 70, 255, 96, 108, 72, 255, 96, 105, 71, 255, 100, 106, 57, 255, 101, 105, 56, 255, 96, 108, 52, 255, 93, 106, 52, 255, 94, 97, 61, 255, 95, 94, 56, 255, 94, 96, 53, 255, 90, 91, 54, 255, 90, 88, 42, 255, 95, 89, 44, 255, 99, 88, 33, 255, 99, 84, 34, 255, 97, 81, 38, 255, 90, 76, 38, 255, 93, 76, 35, 255, 94, 75, 26, 255, 92, 73, 23, 255, 97, 76, 17, 255, 99, 72, 16, 255, 88, 68, 23, 255, 88, 67, 19, 255, 88, 65, 21, 255, 85, 65, 19, 255, 85, 64, 16, 255, 89, 59, 17, 255, 90, 58, 16, 255, 84, 57, 18, 255, 81, 54, 17, 255, 82, 53, 13, 255, 92, 54, 7, 255, 113, 58, 11, 255, 118, 54, 9, 255, 92, 53, 6, 255, 85, 49, 8, 255, 84, 49, 10, 255, 79, 45, 9, 255, 83, 48, 8, 255, 84, 47, 2, 255, 84, 44, 7, 255, 85, 43, 7, 255, 84, 41, 4, 255, 83, 44, 5, 255, 86, 43, 5, 255, 88, 40, 3, 255, 83, 41, 0, 255, 82, 40, 1, 255, 83, 39, 7, 255, 83, 38, 3, 255, 85, 39, 2, 255, 81, 35, 9, 255, 77, 36, 8, 255, 84, 36, 4, 255, 86, 35, 4, 255, 83, 35, 2, 255, 80, 35, 2, 255, 82, 36, 3, 255, 87, 36, 1, 255, 93, 37, 3, 255, 92, 36, 4, 255, 93, 38, 2, 255, 99, 38, 1, 255, 104, 38, 5, 255, 90, 33, 4, 255, 79, 32, 4, 255, 71, 33, 0, 255, 77, 31, 3, 255, 82, 31, 8, 255, 81, 26, 5, 255, 87, 26, 3, 255, 83, 30, 0, 255, 82, 27, 2, 255, 84, 28, 5, 255, 81, 31, 2, 255, 82, 32, 1, 255, 85, 34, 6, 255, 78, 29, 5, 255, 71, 26, 7, 255, 78, 29, 5, 255, 90, 32, 4, 255, 97, 35, 4, 255, 105, 32, 1, 255, 106, 34, 2, 255, 99, 33, 0, 255, 87, 28, 4, 255, 72, 27, 5, 255, 74, 22, 4, 255, 87, 28, 4, 255, 82, 32, 1, 255, 82, 29, 2, 255, 95, 34, 7, 255, 97, 33, 1, 255, 97, 29, 2, 255, 99, 31, 3, 255, 102, 28, 2, 255, 104, 31, 9, 255, 87, 24, 4, 255, 66, 23, 0, 255, 68, 25, 3, 255, 75, 26, 3, 255, 74, 26, 3, 255, 73, 24, 2, 255, 72, 23, 3, 255, 70, 22, 1, 255, 70, 21, 3, 255, 73, 24, 7, 255, 67, 21, 3, 255, 69, 26, 5, 255, 70, 25, 2, 255, 71, 24, 1, 255, 72, 26, 3, 255, 72, 23, 2, 255, 73, 22, 4, 255, 70, 26, 3, 255, 75, 23, 3, 255, 80, 22, 4, 255, 72, 23, 5, 255, 71, 22, 5, 255, 68, 21, 4, 255, 63, 22, 3, 255, 61, 21, 3, 255, 69, 21, 6, 255, 72, 24, 7, 255, 67, 24, 5, 255, 62, 19, 6, 255, 70, 24, 8, 255, 65, 19, 2, 255, 59, 17, 3, 255, 57, 21, 2, 255, 61, 23, 2, 255, 67, 23, 5, 255, 63, 19, 2, 255, 60, 19, 1, 255, 68, 23, 6, 255, 61, 20, 4, 255, 65, 22, 1, 255, 77, 25, 2, 255, 70, 22, 1, 255, 62, 19, 1, 255, 65, 17, 5, 255, 70, 18, 7, 255, 71, 21, 6, 255, 70, 21, 2, 255, 71, 22, 3, 255, 76, 20, 3, 255, 74, 20, 5, 255, 72, 23, 5, 255, 78, 22, 6, 255, 76, 23, 2, 255, 77, 21, 2, 255, 80, 23, 3, 255, 72, 22, 1, 255, 65, 22, 2, 255, 69, 22, 2, 255, 77, 24, 3, 255, 74, 23, 1, 255, 67, 18, 1, 255, 65, 14, 1, 255, 69, 19, 4, 255, 69, 23, 4, 255, 63, 21, 1, 255, 70, 17, 4, 255, 72, 17, 3, 255, 71, 18, 3, 255, 64, 17, 3, 255, 65, 19, 6, 255, 66, 16, 2, 255, 69, 17, 5, 255, 65, 16, 3, 255, 61, 18, 1, 255, 64, 16, 1, 255, 67, 14, 1, 255, 64, 15, 1, 255, 61, 18, 2, 255, 58, 16, 2, 255, 56, 14, 0, 255, 55, 15, 2, 255, 48, 17, 5, 255, 43, 13, 2, 255, 43, 15, 4, 255, 40, 11, 2, 255, 45, 11, 2, 255, 48, 14, 4, 255, 40, 11, 2, 255, 37, 12, 5, 255, 38, 10, 5, 255, 39, 12, 3, 255, 41, 13, 2, 255, 47, 12, 5, 255, 41, 11, 1, 255, 32, 10, 4, 255, 27, 8, 6, 255, 36, 13, 7, 255, 27, 10, 3, 255, 26, 8, 6, 255, 25, 7, 5, 255, 31, 11, 5, 255, 34, 12, 4, 255, 31, 12, 6, 255, 26, 8, 3, 255, 23, 7, 3, 255, 18, 9, 3, 255, 16, 7, 2, 255, 27, 7, 2, 255, 50, 13, 2, 255, 69, 17, 3, 255, 87, 21, 5, 255, 91, 24, 2, 255, 90, 23, 0, 255, 10, 3, 1, 255, 11, 5, 3, 255, 10, 5, 2, 255, 9, 4, 1, 255, 12, 5, 3, 255, 9, 3, 0, 255, 9, 4, 1, 255, 9, 6, 2, 255, 10, 6, 3, 255, 10, 5, 1, 255, 9, 6, 1, 255, 9, 7, 2, 255, 11, 8, 3, 255, 15, 7, 4, 255, 14, 4, 2, 255, 15, 4, 2, 255, 17, 8, 3, 255, 17, 9, 3, 255, 15, 10, 4, 255, 12, 7, 1, 255, 12, 6, 1, 255, 17, 11, 3, 255, 19, 11, 3, 255, 16, 6, 0, 255, 22, 14, 4, 255, 21, 12, 3, 255, 23, 11, 4, 255, 25, 12, 2, 255, 34, 14, 3, 255, 31, 13, 1, 255, 29, 14, 1, 255, 34, 13, 2, 255, 33, 14, 1, 255, 32, 14, 3, 255, 30, 14, 4, 255, 27, 14, 1, 255, 26, 13, 0, 255, 28, 14, 4, 255, 29, 13, 6, 255, 29, 14, 7, 255, 24, 11, 3, 255, 23, 14, 5, 255, 23, 15, 3, 255, 32, 17, 2, 255, 37, 19, 3, 255, 35, 21, 6, 255, 27, 16, 3, 255, 29, 18, 3, 255, 35, 16, 1, 255, 39, 18, 3, 255, 32, 14, 5, 255, 33, 15, 4, 255, 34, 17, 2, 255, 34, 17, 1, 255, 33, 19, 3, 255, 34, 19, 4, 255, 38, 19, 3, 255, 41, 21, 3, 255, 38, 20, 2, 255, 38, 22, 2, 255, 42, 19, 4, 255, 42, 16, 5, 255, 41, 17, 3, 255, 37, 21, 5, 255, 34, 21, 7, 255, 41, 21, 4, 255, 46, 21, 2, 255, 41, 21, 1, 255, 43, 26, 4, 255, 48, 26, 3, 255, 53, 27, 2, 255, 50, 29, 2, 255, 45, 24, 2, 255, 48, 24, 4, 255, 42, 22, 4, 255, 41, 21, 3, 255, 48, 23, 4, 255, 53, 28, 0, 255, 52, 27, 3, 255, 51, 30, 3, 255, 42, 27, 6, 255, 44, 28, 16, 255, 47, 26, 7, 255, 47, 26, 3, 255, 46, 23, 4, 255, 46, 22, 3, 255, 48, 24, 1, 255, 50, 21, 2, 255, 50, 27, 6, 255, 53, 26, 5, 255, 44, 28, 1, 255, 46, 31, 3, 255, 54, 28, 5, 255, 53, 29, 5, 255, 58, 28, 4, 255, 58, 27, 3, 255, 50, 29, 5, 255, 50, 25, 3, 255, 53, 27, 5, 255, 54, 28, 3, 255, 54, 26, 2, 255, 57, 24, 4, 255, 56, 27, 5, 255, 58, 25, 4, 255, 55, 25, 3, 255, 51, 30, 4, 255, 51, 30, 5, 255, 53, 27, 4, 255, 54, 27, 4, 255, 60, 26, 3, 255, 56, 28, 7, 255, 51, 25, 5, 255, 50, 23, 3, 255, 55, 31, 11, 255, 46, 28, 16, 255, 53, 28, 8, 255, 54, 28, 1, 255, 56, 29, 1, 255, 57, 27, 3, 255, 62, 29, 9, 255, 63, 32, 6, 255, 61, 28, 4, 255, 57, 28, 6, 255, 59, 27, 3, 255, 51, 29, 1, 255, 51, 28, 5, 255, 65, 31, 1, 255, 64, 31, 6, 255, 68, 34, 4, 255, 66, 35, 3, 255, 59, 33, 1, 255, 55, 35, 6, 255, 55, 34, 7, 255, 64, 38, 7, 255, 68, 36, 6, 255, 64, 35, 10, 255, 62, 41, 13, 255, 63, 46, 7, 255, 66, 49, 4, 255, 71, 49, 10, 255, 65, 44, 15, 255, 61, 50, 19, 255, 70, 53, 17, 255, 70, 53, 11, 255, 71, 54, 13, 255, 71, 58, 21, 255, 66, 57, 21, 255, 64, 60, 29, 255, 67, 63, 17, 255, 69, 61, 35, 255, 66, 65, 30, 255, 64, 68, 24, 255, 73, 67, 43, 255, 75, 71, 31, 255, 71, 70, 31, 255, 68, 68, 40, 255, 72, 74, 39, 255, 73, 73, 40, 255, 71, 75, 49, 255, 70, 80, 45, 255, 76, 81, 53, 255, 77, 81, 55, 255, 78, 83, 57, 255, 78, 86, 58, 255, 79, 89, 58, 255, 82, 94, 60, 255, 91, 101, 61, 255, 88, 97, 59, 255, 87, 98, 70, 255, 90, 101, 74, 255, 89, 102, 77, 255, 91, 104, 80, 255, 92, 107, 69, 255, 92, 111, 76, 255, 87, 112, 77, 255, 90, 117, 84, 255, 95, 117, 86, 255, 99, 116, 85, 255, 100, 117, 84, 255, 101, 114, 92, 255, 101, 118, 87, 255, 96, 118, 79, 255, 101, 121, 79, 255, 102, 123, 81, 255, 96, 118, 79, 255, 96, 119, 77, 255, 99, 116, 75, 255, 98, 114, 70, 255, 101, 117, 73, 255, 95, 113, 68, 255, 95, 113, 68, 255, 93, 108, 65, 255, 93, 105, 64, 255, 98, 105, 60, 255, 94, 103, 55, 255, 92, 100, 58, 255, 97, 98, 54, 255, 91, 93, 52, 255, 93, 96, 45, 255, 93, 93, 46, 255, 90, 90, 37, 255, 89, 88, 37, 255, 91, 86, 40, 255, 90, 83, 37, 255, 87, 82, 24, 255, 88, 79, 25, 255, 88, 75, 31, 255, 89, 74, 27, 255, 91, 75, 18, 255, 94, 74, 20, 255, 94, 71, 12, 255, 91, 71, 19, 255, 87, 70, 12, 255, 86, 64, 19, 255, 87, 62, 24, 255, 87, 61, 14, 255, 84, 60, 15, 255, 85, 59, 12, 255, 84, 56, 7, 255, 83, 56, 12, 255, 82, 53, 12, 255, 96, 59, 15, 255, 112, 61, 12, 255, 115, 58, 0, 255, 89, 52, 7, 255, 84, 51, 15, 255, 81, 50, 7, 255, 80, 46, 8, 255, 78, 42, 7, 255, 80, 47, 3, 255, 83, 46, 6, 255, 86, 41, 5, 255, 85, 43, 4, 255, 80, 41, 2, 255, 87, 42, 6, 255, 83, 39, 3, 255, 84, 41, 2, 255, 85, 35, 4, 255, 82, 39, 10, 255, 79, 39, 4, 255, 84, 43, 1, 255, 81, 35, 8, 255, 80, 37, 7, 255, 80, 39, 4, 255, 78, 35, 1, 255, 82, 37, 3, 255, 80, 36, 4, 255, 81, 36, 4, 255, 91, 39, 4, 255, 97, 37, 0, 255, 101, 40, 4, 255, 96, 37, 5, 255, 90, 35, 3, 255, 86, 31, 2, 255, 88, 32, 2, 255, 93, 33, 2, 255, 92, 32, 8, 255, 78, 32, 4, 255, 73, 30, 3, 255, 75, 27, 3, 255, 83, 32, 7, 255, 80, 32, 1, 255, 87, 33, 0, 255, 96, 35, 1, 255, 96, 34, 2, 255, 91, 34, 2, 255, 81, 31, 1, 255, 75, 29, 2, 255, 77, 30, 4, 255, 77, 31, 2, 255, 73, 30, 2, 255, 84, 30, 5, 255, 80, 26, 1, 255, 84, 29, 2, 255, 85, 29, 3, 255, 79, 26, 4, 255, 78, 24, 1, 255, 73, 25, 2, 255, 84, 27, 6, 255, 97, 30, 3, 255, 102, 35, 3, 255, 99, 29, 1, 255, 101, 33, 4, 255, 100, 35, 6, 255, 100, 33, 5, 255, 97, 30, 4, 255, 88, 28, 4, 255, 76, 28, 2, 255, 67, 26, 5, 255, 69, 28, 5, 255, 75, 25, 4, 255, 74, 26, 4, 255, 73, 24, 3, 255, 72, 23, 5, 255, 65, 23, 4, 255, 70, 27, 6, 255, 68, 25, 2, 255, 67, 25, 1, 255, 67, 25, 1, 255, 68, 24, 2, 255, 67, 22, 4, 255, 68, 25, 2, 255, 69, 23, 0, 255, 67, 22, 2, 255, 66, 21, 6, 255, 60, 19, 5, 255, 64, 20, 2, 255, 67, 22, 2, 255, 68, 21, 3, 255, 70, 22, 3, 255, 70, 25, 5, 255, 69, 23, 5, 255, 70, 20, 3, 255, 66, 18, 3, 255, 57, 19, 2, 255, 58, 21, 3, 255, 61, 21, 4, 255, 64, 20, 2, 255, 68, 25, 5, 255, 58, 20, 3, 255, 64, 20, 2, 255, 65, 21, 5, 255, 63, 18, 3, 255, 66, 18, 3, 255, 63, 24, 6, 255, 58, 22, 5, 255, 62, 20, 4, 255, 67, 28, 5, 255, 67, 25, 4, 255, 67, 17, 2, 255, 65, 17, 4, 255, 69, 21, 4, 255, 75, 25, 5, 255, 70, 24, 2, 255, 77, 25, 3, 255, 75, 23, 2, 255, 72, 21, 2, 255, 73, 23, 4, 255, 75, 27, 3, 255, 75, 24, 0, 255, 77, 28, 3, 255, 75, 28, 4, 255, 70, 21, 1, 255, 70, 18, 2, 255, 72, 21, 3, 255, 74, 23, 3, 255, 71, 20, 1, 255, 65, 18, 3, 255, 65, 17, 4, 255, 67, 17, 3, 255, 66, 17, 3, 255, 65, 18, 4, 255, 69, 18, 5, 255, 66, 13, 0, 255, 70, 18, 4, 255, 65, 19, 3, 255, 67, 19, 4, 255, 73, 17, 2, 255, 72, 20, 1, 255, 63, 19, 3, 255, 58, 16, 3, 255, 64, 18, 3, 255, 70, 18, 1, 255, 63, 15, 0, 255, 55, 13, 1, 255, 54, 16, 4, 255, 56, 16, 2, 255, 58, 12, 2, 255, 53, 15, 5, 255, 55, 15, 6, 255, 51, 15, 1, 255, 50, 13, 2, 255, 58, 14, 5, 255, 59, 15, 6, 255, 47, 10, 4, 255, 39, 10, 5, 255, 38, 9, 5, 255, 44, 13, 6, 255, 38, 9, 1, 255, 36, 11, 3, 255, 32, 12, 1, 255, 30, 9, 3, 255, 31, 7, 5, 255, 39, 12, 4, 255, 37, 11, 4, 255, 28, 8, 1, 255, 24, 8, 1, 255, 29, 10, 4, 255, 32, 8, 4, 255, 33, 10, 3, 255, 30, 10, 2, 255, 27, 8, 0, 255, 26, 9, 2, 255, 23, 9, 5, 255, 22, 8, 5, 255, 27, 7, 4, 255, 33, 6, 0, 255, 50, 13, 2, 255, 74, 16, 1, 255, 89, 15, 1, 255, 7, 3, 2, 255, 6, 2, 1, 255, 8, 4, 1, 255, 9, 5, 2, 255, 11, 4, 1, 255, 11, 2, 0, 255, 13, 4, 2, 255, 13, 4, 2, 255, 14, 7, 4, 255, 15, 7, 4, 255, 13, 6, 3, 255, 13, 6, 4, 255, 15, 6, 3, 255, 16, 7, 3, 255, 16, 8, 2, 255, 13, 6, 1, 255, 16, 9, 3, 255, 16, 9, 3, 255, 15, 8, 2, 255, 14, 7, 2, 255, 16, 11, 4, 255, 20, 13, 4, 255, 18, 9, 1, 255, 17, 8, 1, 255, 19, 10, 2, 255, 24, 13, 6, 255, 22, 11, 2, 255, 24, 11, 3, 255, 27, 13, 3, 255, 25, 12, 1, 255, 26, 15, 3, 255, 30, 18, 6, 255, 25, 12, 1, 255, 28, 14, 4, 255, 26, 13, 3, 255, 23, 13, 2, 255, 25, 15, 3, 255, 30, 15, 4, 255, 31, 13, 2, 255, 32, 14, 5, 255, 30, 14, 7, 255, 25, 13, 3, 255, 26, 15, 2, 255, 35, 18, 7, 255, 34, 15, 6, 255, 30, 20, 3, 255, 23, 19, 4, 255, 28, 17, 3, 255, 36, 18, 4, 255, 31, 15, 1, 255, 30, 15, 1, 255, 31, 16, 6, 255, 27, 21, 4, 255, 30, 20, 1, 255, 44, 21, 5, 255, 45, 21, 6, 255, 33, 18, 1, 255, 33, 20, 3, 255, 36, 19, 4, 255, 32, 18, 1, 255, 40, 23, 4, 255, 47, 21, 3, 255, 38, 19, 1, 255, 36, 18, 4, 255, 42, 23, 6, 255, 41, 20, 5, 255, 36, 24, 8, 255, 33, 20, 2, 255, 51, 27, 5, 255, 47, 26, 5, 255, 41, 22, 4, 255, 45, 27, 3, 255, 39, 24, 6, 255, 45, 24, 6, 255, 47, 24, 3, 255, 43, 24, 5, 255, 49, 23, 2, 255, 46, 24, 2, 255, 49, 23, 3, 255, 55, 29, 4, 255, 51, 32, 14, 255, 46, 29, 10, 255, 46, 26, 5, 255, 46, 28, 3, 255, 50, 26, 4, 255, 48, 21, 1, 255, 49, 24, 2, 255, 50, 28, 5, 255, 48, 27, 1, 255, 54, 27, 3, 255, 50, 29, 4, 255, 48, 31, 1, 255, 50, 38, 7, 255, 50, 40, 12, 255, 53, 29, 7, 255, 57, 31, 5, 255, 50, 29, 1, 255, 52, 28, 0, 255, 53, 28, 4, 255, 52, 27, 4, 255, 47, 24, 2, 255, 53, 26, 4, 255, 51, 23, 4, 255, 61, 29, 7, 255, 57, 24, 2, 255, 53, 29, 4, 255, 54, 32, 3, 255, 53, 25, 2, 255, 57, 27, 5, 255, 59, 29, 4, 255, 58, 31, 1, 255, 45, 24, 8, 255, 44, 28, 15, 255, 45, 29, 46, 255, 43, 30, 46, 255, 42, 26, 5, 255, 50, 28, 4, 255, 55, 26, 2, 255, 56, 27, 2, 255, 56, 30, 3, 255, 57, 31, 0, 255, 56, 32, 3, 255, 53, 30, 3, 255, 59, 29, 2, 255, 59, 27, 3, 255, 58, 28, 3, 255, 58, 29, 3, 255, 60, 30, 1, 255, 64, 29, 1, 255, 66, 35, 5, 255, 57, 31, 6, 255, 60, 33, 7, 255, 60, 31, 10, 255, 51, 35, 7, 255, 56, 37, 12, 255, 65, 36, 4, 255, 63, 38, 5, 255, 67, 45, 6, 255, 67, 47, 4, 255, 57, 45, 8, 255, 65, 51, 13, 255, 65, 48, 14, 255, 63, 50, 24, 255, 69, 49, 27, 255, 65, 53, 18, 255, 56, 57, 20, 255, 71, 57, 22, 255, 69, 62, 21, 255, 68, 59, 36, 255, 64, 64, 24, 255, 66, 65, 39, 255, 66, 65, 34, 255, 71, 69, 33, 255, 72, 68, 34, 255, 74, 70, 37, 255, 72, 67, 41, 255, 71, 74, 31, 255, 71, 80, 43, 255, 69, 77, 45, 255, 76, 82, 46, 255, 75, 79, 54, 255, 74, 79, 56, 255, 76, 84, 63, 255, 79, 88, 67, 255, 79, 90, 59, 255, 84, 95, 62, 255, 83, 96, 71, 255, 83, 95, 70, 255, 85, 99, 67, 255, 87, 104, 73, 255, 89, 104, 82, 255, 90, 106, 78, 255, 96, 113, 72, 255, 97, 112, 79, 255, 93, 112, 82, 255, 97, 117, 88, 255, 100, 116, 86, 255, 104, 119, 87, 255, 104, 118, 86, 255, 100, 121, 81, 255, 99, 121, 80, 255, 97, 118, 81, 255, 100, 120, 85, 255, 102, 120, 84, 255, 99, 118, 82, 255, 98, 118, 81, 255, 99, 117, 75, 255, 97, 114, 71, 255, 97, 114, 73, 255, 95, 114, 69, 255, 93, 109, 70, 255, 89, 105, 66, 255, 88, 107, 66, 255, 92, 106, 58, 255, 93, 99, 64, 255, 94, 95, 58, 255, 97, 98, 51, 255, 93, 95, 47, 255, 92, 95, 39, 255, 93, 88, 45, 255, 95, 86, 37, 255, 96, 90, 41, 255, 86, 82, 46, 255, 86, 81, 34, 255, 89, 82, 27, 255, 93, 78, 35, 255, 93, 77, 22, 255, 90, 77, 19, 255, 93, 71, 24, 255, 90, 65, 32, 255, 93, 66, 22, 255, 90, 69, 13, 255, 89, 71, 17, 255, 89, 66, 16, 255, 89, 60, 14, 255, 88, 57, 24, 255, 80, 57, 17, 255, 83, 61, 4, 255, 89, 58, 12, 255, 86, 54, 6, 255, 83, 53, 5, 255, 81, 55, 12, 255, 84, 54, 10, 255, 86, 49, 9, 255, 81, 44, 8, 255, 82, 49, 7, 255, 78, 47, 3, 255, 82, 50, 3, 255, 80, 44, 6, 255, 77, 45, 5, 255, 81, 47, 8, 255, 82, 41, 2, 255, 86, 41, 1, 255, 81, 39, 1, 255, 82, 36, 7, 255, 83, 38, 11, 255, 80, 41, 8, 255, 83, 42, 3, 255, 82, 41, 5, 255, 79, 37, 0, 255, 80, 38, 1, 255, 79, 37, 2, 255, 80, 40, 1, 255, 79, 33, 7, 255, 90, 37, 3, 255, 96, 43, 1, 255, 96, 41, 4, 255, 102, 38, 5, 255, 103, 35, 2, 255, 107, 36, 5, 255, 110, 37, 7, 255, 102, 37, 4, 255, 96, 40, 5, 255, 86, 34, 1, 255, 93, 37, 4, 255, 104, 41, 7, 255, 102, 36, 7, 255, 76, 29, 2, 255, 75, 26, 1, 255, 80, 29, 3, 255, 72, 32, 4, 255, 84, 35, 4, 255, 96, 33, 1, 255, 103, 39, 3, 255, 105, 35, 3, 255, 96, 32, 5, 255, 76, 30, 3, 255, 71, 29, 0, 255, 83, 33, 3, 255, 83, 32, 2, 255, 76, 27, 4, 255, 72, 27, 6, 255, 72, 28, 5, 255, 71, 28, 4, 255, 75, 30, 3, 255, 74, 28, 2, 255, 74, 25, 1, 255, 73, 27, 3, 255, 73, 26, 5, 255, 74, 24, 2, 255, 82, 27, 3, 255, 91, 29, 4, 255, 94, 27, 3, 255, 94, 28, 6, 255, 85, 30, 5, 255, 76, 26, 2, 255, 72, 25, 1, 255, 65, 27, 2, 255, 66, 25, 2, 255, 67, 25, 3, 255, 71, 28, 5, 255, 66, 24, 2, 255, 66, 25, 3, 255, 70, 25, 3, 255, 64, 24, 5, 255, 64, 22, 5, 255, 73, 25, 4, 255, 74, 30, 4, 255, 71, 26, 3, 255, 62, 27, 7, 255, 58, 19, 3, 255, 63, 19, 2, 255, 69, 26, 8, 255, 65, 22, 5, 255, 61, 19, 4, 255, 61, 22, 6, 255, 61, 20, 1, 255, 63, 25, 2, 255, 65, 21, 1, 255, 70, 23, 4, 255, 70, 24, 5, 255, 70, 24, 6, 255, 69, 20, 3, 255, 73, 22, 4, 255, 66, 22, 7, 255, 57, 20, 2, 255, 61, 21, 1, 255, 63, 21, 1, 255, 64, 23, 3, 255, 67, 23, 2, 255, 63, 19, 3, 255, 59, 20, 3, 255, 66, 20, 4, 255, 58, 20, 4, 255, 51, 22, 2, 255, 60, 23, 1, 255, 64, 21, 4, 255, 67, 19, 4, 255, 65, 19, 3, 255, 60, 18, 2, 255, 62, 17, 0, 255, 69, 22, 2, 255, 65, 23, 1, 255, 70, 20, 5, 255, 80, 24, 9, 255, 80, 25, 4, 255, 68, 23, 0, 255, 72, 25, 3, 255, 80, 24, 4, 255, 71, 21, 0, 255, 70, 23, 0, 255, 71, 24, 1, 255, 71, 22, 2, 255, 74, 20, 4, 255, 73, 19, 4, 255, 70, 18, 2, 255, 71, 22, 1, 255, 81, 21, 5, 255, 64, 19, 1, 255, 61, 20, 1, 255, 66, 20, 5, 255, 68, 18, 4, 255, 69, 18, 5, 255, 67, 19, 5, 255, 67, 20, 3, 255, 70, 21, 2, 255, 64, 14, 1, 255, 66, 18, 3, 255, 61, 18, 2, 255, 62, 18, 3, 255, 68, 17, 5, 255, 68, 17, 3, 255, 70, 21, 5, 255, 70, 22, 6, 255, 62, 13, 2, 255, 59, 14, 6, 255, 60, 13, 3, 255, 58, 14, 0, 255, 51, 17, 1, 255, 52, 18, 4, 255, 54, 13, 3, 255, 48, 13, 2, 255, 53, 16, 5, 255, 55, 14, 4, 255, 51, 14, 5, 255, 40, 11, 2, 255, 40, 10, 3, 255, 42, 9, 4, 255, 35, 8, 3, 255, 32, 9, 0, 255, 37, 13, 1, 255, 34, 11, 3, 255, 31, 8, 1, 255, 43, 10, 2, 255, 39, 7, 3, 255, 34, 6, 0, 255, 37, 11, 1, 255, 34, 8, 3, 255, 28, 10, 4, 255, 28, 9, 2, 255, 26, 6, 1, 255, 28, 9, 4, 255, 28, 6, 2, 255, 31, 11, 4, 255, 28, 13, 3, 255, 20, 6, 1, 255, 20, 6, 5, 255, 28, 7, 2, 255, 48, 9, 0, 255, 63, 14, 2, 255, 8, 4, 3, 255, 7, 3, 1, 255, 9, 5, 2, 255, 10, 5, 2, 255, 9, 4, 1, 255, 10, 4, 0, 255, 14, 4, 2, 255, 14, 4, 2, 255, 15, 7, 4, 255, 15, 7, 4, 255, 15, 7, 4, 255, 15, 7, 4, 255, 15, 6, 3, 255, 11, 7, 3, 255, 11, 7, 1, 255, 16, 11, 4, 255, 15, 8, 2, 255, 15, 7, 3, 255, 16, 9, 3, 255, 15, 8, 2, 255, 17, 10, 4, 255, 14, 8, 0, 255, 19, 10, 2, 255, 22, 14, 4, 255, 20, 10, 2, 255, 20, 8, 2, 255, 26, 13, 3, 255, 24, 12, 3, 255, 25, 12, 3, 255, 26, 12, 4, 255, 26, 12, 4, 255, 22, 11, 2, 255, 22, 14, 3, 255, 24, 14, 4, 255, 23, 13, 3, 255, 20, 11, 1, 255, 22, 12, 2, 255, 31, 14, 6, 255, 31, 14, 4, 255, 31, 14, 5, 255, 29, 12, 5, 255, 27, 14, 3, 255, 29, 17, 3, 255, 30, 17, 5, 255, 33, 15, 5, 255, 39, 20, 5, 255, 28, 16, 2, 255, 33, 17, 5, 255, 35, 14, 1, 255, 36, 20, 4, 255, 38, 23, 9, 255, 32, 15, 3, 255, 31, 20, 3, 255, 35, 24, 3, 255, 36, 19, 1, 255, 39, 20, 2, 255, 39, 21, 4, 255, 31, 17, 1, 255, 34, 19, 5, 255, 40, 22, 4, 255, 38, 19, 0, 255, 39, 15, 2, 255, 39, 21, 6, 255, 42, 21, 3, 255, 46, 21, 0, 255, 51, 20, 3, 255, 41, 20, 5, 255, 42, 26, 6, 255, 52, 27, 3, 255, 44, 22, 3, 255, 40, 24, 6, 255, 46, 24, 2, 255, 39, 22, 2, 255, 44, 27, 6, 255, 47, 23, 2, 255, 43, 21, 4, 255, 46, 22, 3, 255, 41, 21, 1, 255, 46, 23, 6, 255, 44, 16, 3, 255, 43, 23, 6, 255, 46, 22, 5, 255, 47, 24, 3, 255, 43, 22, 2, 255, 49, 27, 6, 255, 44, 28, 5, 255, 44, 20, 0, 255, 51, 25, 7, 255, 43, 27, 3, 255, 53, 31, 7, 255, 58, 30, 7, 255, 60, 32, 6, 255, 63, 37, 13, 255, 55, 39, 13, 255, 53, 28, 5, 255, 56, 28, 4, 255, 44, 28, 1, 255, 47, 28, 3, 255, 55, 29, 6, 255, 51, 24, 1, 255, 44, 24, 2, 255, 52, 31, 3, 255, 52, 29, 0, 255, 54, 30, 4, 255, 49, 24, 2, 255, 53, 27, 6, 255, 55, 28, 5, 255, 59, 32, 5, 255, 59, 33, 11, 255, 63, 32, 9, 255, 57, 32, 3, 255, 41, 29, 26, 255, 51, 33, 48, 255, 49, 34, 59, 255, 44, 27, 18, 255, 55, 29, 0, 255, 57, 29, 2, 255, 55, 29, 2, 255, 53, 33, 5, 255, 48, 29, 2, 255, 50, 28, 4, 255, 57, 31, 8, 255, 59, 30, 3, 255, 60, 31, 5, 255, 56, 30, 4, 255, 59, 36, 4, 255, 63, 36, 9, 255, 64, 33, 3, 255, 65, 32, 10, 255, 54, 32, 3, 255, 54, 31, 13, 255, 59, 33, 3, 255, 59, 33, 8, 255, 61, 36, 13, 255, 59, 38, 7, 255, 57, 34, 9, 255, 62, 41, 12, 255, 57, 35, 13, 255, 65, 44, 11, 255, 65, 46, 15, 255, 71, 53, 11, 255, 61, 46, 10, 255, 64, 49, 14, 255, 70, 58, 7, 255, 64, 54, 22, 255, 64, 56, 26, 255, 72, 57, 13, 255, 72, 63, 20, 255, 67, 65, 30, 255, 65, 62, 24, 255, 66, 64, 35, 255, 68, 69, 41, 255, 72, 71, 32, 255, 71, 69, 40, 255, 75, 69, 42, 255, 73, 68, 42, 255, 73, 76, 38, 255, 72, 80, 35, 255, 73, 80, 43, 255, 77, 80, 55, 255, 79, 84, 57, 255, 76, 83, 58, 255, 78, 88, 63, 255, 79, 90, 60, 255, 80, 92, 60, 255, 83, 96, 64, 255, 82, 96, 68, 255, 86, 101, 70, 255, 89, 105, 70, 255, 90, 106, 81, 255, 90, 106, 82, 255, 93, 110, 79, 255, 100, 115, 82, 255, 96, 114, 84, 255, 98, 119, 84, 255, 100, 119, 85, 255, 101, 118, 86, 255, 105, 122, 89, 255, 101, 121, 83, 255, 101, 124, 86, 255, 99, 123, 88, 255, 94, 119, 83, 255, 96, 120, 82, 255, 99, 122, 83, 255, 98, 121, 81, 255, 98, 118, 82, 255, 102, 117, 80, 255, 96, 115, 74, 255, 93, 113, 73, 255, 97, 115, 70, 255, 91, 107, 69, 255, 92, 107, 68, 255, 90, 106, 70, 255, 88, 102, 63, 255, 93, 100, 58, 255, 95, 97, 56, 255, 93, 95, 53, 255, 90, 93, 46, 255, 85, 92, 47, 255, 86, 93, 43, 255, 89, 92, 34, 255, 90, 87, 33, 255, 92, 81, 38, 255, 95, 82, 32, 255, 91, 78, 20, 255, 89, 75, 33, 255, 89, 74, 22, 255, 88, 75, 17, 255, 93, 70, 26, 255, 89, 71, 14, 255, 90, 70, 14, 255, 90, 69, 12, 255, 86, 65, 13, 255, 88, 62, 19, 255, 88, 57, 13, 255, 90, 58, 13, 255, 84, 54, 12, 255, 86, 54, 9, 255, 90, 55, 11, 255, 82, 54, 5, 255, 85, 57, 12, 255, 79, 49, 14, 255, 81, 49, 12, 255, 83, 50, 7, 255, 74, 45, 13, 255, 79, 46, 12, 255, 81, 46, 13, 255, 80, 50, 5, 255, 78, 45, 8, 255, 86, 43, 6, 255, 85, 44, 5, 255, 78, 41, 5, 255, 81, 40, 5, 255, 86, 39, 6, 255, 82, 37, 4, 255, 77, 36, 4, 255, 77, 36, 7, 255, 80, 40, 8, 255, 82, 40, 5, 255, 82, 39, 4, 255, 81, 38, 4, 255, 78, 33, 5, 255, 76, 34, 9, 255, 78, 34, 2, 255, 87, 36, 4, 255, 102, 40, 7, 255, 113, 42, 3, 255, 112, 39, 2, 255, 108, 36, 3, 255, 107, 36, 3, 255, 105, 35, 1, 255, 110, 39, 0, 255, 109, 42, 2, 255, 102, 41, 4, 255, 95, 39, 3, 255, 88, 33, 0, 255, 83, 31, 0, 255, 78, 35, 1, 255, 88, 35, 7, 255, 87, 29, 7, 255, 73, 27, 1, 255, 80, 32, 1, 255, 98, 36, 2, 255, 95, 33, 2, 255, 86, 29, 3, 255, 82, 28, 2, 255, 77, 30, 1, 255, 77, 31, 3, 255, 81, 31, 8, 255, 79, 30, 3, 255, 71, 26, 1, 255, 73, 28, 5, 255, 73, 28, 5, 255, 74, 26, 1, 255, 76, 28, 2, 255, 73, 29, 4, 255, 72, 27, 2, 255, 72, 26, 3, 255, 68, 23, 1, 255, 72, 27, 4, 255, 71, 24, 1, 255, 76, 25, 1, 255, 63, 22, 1, 255, 61, 21, 4, 255, 76, 21, 3, 255, 67, 24, 3, 255, 66, 23, 7, 255, 74, 23, 4, 255, 76, 24, 4, 255, 74, 21, 3, 255, 78, 24, 3, 255, 79, 27, 3, 255, 78, 25, 1, 255, 80, 27, 2, 255, 89, 33, 5, 255, 88, 26, 1, 255, 95, 27, 2, 255, 94, 31, 5, 255, 82, 22, 1, 255, 61, 23, 3, 255, 60, 20, 4, 255, 69, 24, 3, 255, 67, 24, 3, 255, 64, 23, 3, 255, 59, 21, 2, 255, 59, 22, 1, 255, 65, 26, 0, 255, 62, 19, 1, 255, 64, 18, 2, 255, 71, 22, 5, 255, 71, 23, 5, 255, 64, 25, 4, 255, 57, 21, 1, 255, 67, 23, 2, 255, 74, 25, 4, 255, 66, 20, 2, 255, 69, 21, 2, 255, 68, 25, 7, 255, 56, 22, 9, 255, 54, 21, 3, 255, 55, 21, 1, 255, 56, 20, 0, 255, 75, 23, 4, 255, 68, 23, 3, 255, 55, 18, 0, 255, 59, 22, 4, 255, 60, 23, 3, 255, 61, 23, 3, 255, 60, 22, 3, 255, 60, 21, 4, 255, 56, 19, 1, 255, 60, 24, 7, 255, 57, 18, 0, 255, 72, 19, 3, 255, 71, 20, 5, 255, 78, 26, 6, 255, 74, 24, 0, 255, 71, 23, 2, 255, 75, 24, 3, 255, 76, 23, 2, 255, 77, 24, 3, 255, 75, 23, 1, 255, 69, 20, 1, 255, 66, 18, 0, 255, 69, 20, 3, 255, 69, 19, 3, 255, 72, 18, 2, 255, 71, 18, 3, 255, 66, 18, 3, 255, 66, 19, 3, 255, 70, 21, 5, 255, 69, 21, 4, 255, 68, 18, 1, 255, 69, 17, 3, 255, 67, 18, 4, 255, 66, 20, 5, 255, 66, 19, 3, 255, 75, 18, 3, 255, 71, 17, 3, 255, 65, 13, 2, 255, 75, 19, 6, 255, 72, 16, 3, 255, 65, 13, 0, 255, 71, 18, 4, 255, 63, 13, 0, 255, 56, 16, 4, 255, 64, 16, 3, 255, 67, 18, 5, 255, 56, 14, 0, 255, 53, 18, 3, 255, 50, 16, 4, 255, 52, 15, 3, 255, 47, 16, 3, 255, 47, 14, 2, 255, 50, 12, 4, 255, 39, 10, 1, 255, 40, 11, 2, 255, 45, 11, 5, 255, 39, 10, 3, 255, 43, 12, 3, 255, 36, 11, 2, 255, 31, 12, 5, 255, 33, 10, 4, 255, 36, 9, 3, 255, 33, 8, 4, 255, 33, 9, 3, 255, 40, 12, 5, 255, 34, 7, 2, 255, 26, 7, 2, 255, 32, 13, 5, 255, 30, 9, 3, 255, 30, 10, 4, 255, 29, 9, 1, 255, 28, 11, 2, 255, 26, 9, 3, 255, 24, 6, 2, 255, 22, 6, 2, 255, 27, 9, 5, 255, 43, 11, 2, 255, 49, 10, 0, 255, 6, 1, 0, 255, 8, 3, 0, 255, 9, 4, 1, 255, 10, 5, 2, 255, 10, 5, 2, 255, 12, 6, 3, 255, 14, 5, 2, 255, 13, 5, 1, 255, 13, 5, 2, 255, 13, 6, 2, 255, 14, 7, 3, 255, 14, 6, 3, 255, 13, 5, 2, 255, 13, 7, 4, 255, 14, 9, 3, 255, 16, 9, 3, 255, 16, 7, 4, 255, 14, 6, 4, 255, 15, 7, 4, 255, 16, 10, 4, 255, 16, 10, 3, 255, 17, 10, 2, 255, 20, 11, 3, 255, 22, 13, 4, 255, 20, 9, 2, 255, 21, 10, 2, 255, 21, 11, 1, 255, 21, 11, 1, 255, 24, 13, 4, 255, 25, 13, 5, 255, 26, 10, 5, 255, 26, 9, 5, 255, 22, 12, 2, 255, 23, 13, 3, 255, 25, 17, 6, 255, 20, 12, 1, 255, 25, 12, 3, 255, 29, 11, 4, 255, 27, 12, 3, 255, 26, 14, 5, 255, 31, 15, 7, 255, 27, 14, 1, 255, 29, 18, 3, 255, 27, 16, 2, 255, 25, 12, 0, 255, 37, 18, 2, 255, 30, 18, 2, 255, 33, 18, 5, 255, 35, 18, 4, 255, 29, 17, 1, 255, 31, 19, 4, 255, 31, 21, 4, 255, 30, 13, 0, 255, 38, 18, 4, 255, 39, 21, 6, 255, 35, 16, 3, 255, 34, 18, 3, 255, 36, 19, 3, 255, 40, 20, 5, 255, 36, 20, 3, 255, 37, 20, 3, 255, 43, 18, 4, 255, 41, 19, 4, 255, 39, 20, 3, 255, 44, 23, 3, 255, 46, 23, 3, 255, 43, 25, 6, 255, 43, 23, 3, 255, 49, 24, 2, 255, 42, 26, 6, 255, 34, 21, 2, 255, 45, 22, 1, 255, 41, 21, 1, 255, 41, 24, 3, 255, 49, 23, 5, 255, 45, 20, 4, 255, 43, 22, 2, 255, 44, 25, 4, 255, 46, 25, 6, 255, 51, 26, 6, 255, 43, 23, 4, 255, 45, 19, 0, 255, 50, 23, 3, 255, 52, 22, 2, 255, 54, 26, 5, 255, 53, 24, 2, 255, 56, 24, 2, 255, 56, 24, 3, 255, 58, 27, 5, 255, 55, 25, 1, 255, 51, 24, 2, 255, 53, 25, 5, 255, 57, 27, 6, 255, 54, 30, 3, 255, 54, 26, 3, 255, 48, 25, 3, 255, 50, 28, 2, 255, 54, 28, 4, 255, 57, 25, 3, 255, 55, 22, 2, 255, 52, 23, 4, 255, 54, 26, 4, 255, 54, 26, 4, 255, 45, 23, 8, 255, 45, 26, 6, 255, 50, 24, 0, 255, 54, 25, 2, 255, 51, 30, 1, 255, 51, 30, 2, 255, 55, 27, 7, 255, 47, 26, 10, 255, 43, 30, 26, 255, 44, 31, 59, 255, 45, 28, 43, 255, 59, 33, 8, 255, 55, 31, 3, 255, 54, 30, 6, 255, 55, 31, 7, 255, 51, 28, 3, 255, 48, 26, 2, 255, 52, 27, 4, 255, 52, 27, 5, 255, 57, 30, 5, 255, 64, 32, 6, 255, 60, 31, 3, 255, 56, 33, 1, 255, 60, 32, 3, 255, 67, 31, 2, 255, 60, 30, 0, 255, 54, 30, 6, 255, 54, 30, 7, 255, 61, 33, 2, 255, 62, 35, 4, 255, 54, 35, 13, 255, 55, 37, 8, 255, 63, 45, 1, 255, 59, 36, 7, 255, 62, 42, 11, 255, 60, 44, 13, 255, 63, 46, 17, 255, 58, 48, 15, 255, 67, 48, 19, 255, 70, 49, 16, 255, 72, 57, 10, 255, 68, 59, 19, 255, 64, 57, 17, 255, 68, 62, 20, 255, 71, 64, 20, 255, 72, 65, 24, 255, 68, 63, 35, 255, 64, 65, 35, 255, 67, 65, 45, 255, 71, 70, 41, 255, 69, 69, 32, 255, 76, 74, 33, 255, 74, 75, 48, 255, 72, 71, 57, 255, 79, 79, 46, 255, 79, 83, 48, 255, 73, 81, 56, 255, 75, 84, 53, 255, 77, 85, 57, 255, 81, 88, 64, 255, 81, 93, 55, 255, 80, 94, 63, 255, 82, 97, 68, 255, 85, 100, 62, 255, 92, 106, 76, 255, 93, 107, 81, 255, 92, 108, 80, 255, 95, 111, 85, 255, 95, 114, 85, 255, 94, 115, 82, 255, 96, 117, 89, 255, 100, 122, 84, 255, 101, 123, 84, 255, 101, 120, 87, 255, 100, 122, 88, 255, 96, 125, 82, 255, 96, 123, 89, 255, 98, 125, 92, 255, 98, 124, 86, 255, 97, 125, 83, 255, 97, 123, 80, 255, 98, 121, 77, 255, 101, 120, 82, 255, 100, 117, 84, 255, 98, 116, 79, 255, 97, 115, 75, 255, 96, 112, 68, 255, 95, 110, 69, 255, 93, 108, 66, 255, 91, 106, 65, 255, 90, 101, 62, 255, 91, 99, 54, 255, 91, 97, 53, 255, 90, 94, 52, 255, 88, 95, 44, 255, 90, 91, 42, 255, 94, 93, 31, 255, 90, 87, 38, 255, 89, 81, 32, 255, 90, 79, 26, 255, 90, 80, 35, 255, 86, 79, 33, 255, 88, 76, 34, 255, 88, 74, 26, 255, 87, 73, 21, 255, 90, 72, 14, 255, 86, 72, 8, 255, 86, 67, 19, 255, 88, 68, 20, 255, 85, 65, 11, 255, 81, 62, 15, 255, 83, 62, 15, 255, 84, 62, 7, 255, 80, 58, 11, 255, 81, 57, 14, 255, 85, 55, 11, 255, 83, 52, 12, 255, 81, 48, 10, 255, 83, 50, 9, 255, 81, 48, 10, 255, 81, 48, 9, 255, 85, 49, 10, 255, 79, 43, 6, 255, 79, 44, 6, 255, 80, 47, 5, 255, 78, 42, 11, 255, 84, 42, 6, 255, 82, 39, 7, 255, 73, 38, 5, 255, 79, 43, 6, 255, 82, 38, 7, 255, 77, 34, 6, 255, 79, 38, 5, 255, 79, 35, 1, 255, 79, 36, 1, 255, 81, 38, 3, 255, 79, 36, 5, 255, 80, 36, 7, 255, 79, 35, 6, 255, 80, 36, 6, 255, 77, 38, 2, 255, 70, 32, 7, 255, 81, 29, 8, 255, 100, 36, 4, 255, 103, 40, 4, 255, 104, 36, 9, 255, 106, 35, 9, 255, 105, 38, 4, 255, 109, 38, 2, 255, 105, 37, 2, 255, 98, 36, 3, 255, 86, 30, 0, 255, 80, 27, 2, 255, 79, 32, 1, 255, 79, 35, 1, 255, 81, 33, 5, 255, 81, 29, 7, 255, 81, 31, 4, 255, 82, 28, 1, 255, 86, 30, 3, 255, 82, 30, 3, 255, 77, 32, 4, 255, 76, 28, 2, 255, 84, 26, 4, 255, 80, 28, 5, 255, 67, 27, 2, 255, 78, 33, 6, 255, 69, 25, 0, 255, 74, 24, 1, 255, 69, 25, 1, 255, 74, 23, 1, 255, 79, 27, 6, 255, 75, 30, 5, 255, 70, 25, 2, 255, 71, 26, 4, 255, 71, 26, 6, 255, 70, 25, 3, 255, 66, 24, 0, 255, 75, 31, 5, 255, 61, 29, 7, 255, 56, 22, 7, 255, 75, 25, 6, 255, 62, 22, 2, 255, 68, 20, 4, 255, 85, 27, 3, 255, 84, 29, 3, 255, 87, 27, 1, 255, 93, 29, 2, 255, 95, 33, 5, 255, 86, 27, 1, 255, 77, 21, 1, 255, 93, 29, 3, 255, 101, 27, 2, 255, 100, 28, 3, 255, 91, 28, 4, 255, 78, 22, 1, 255, 64, 23, 2, 255, 62, 21, 3, 255, 61, 24, 3, 255, 59, 23, 4, 255, 58, 21, 4, 255, 61, 22, 4, 255, 66, 21, 4, 255, 70, 20, 3, 255, 56, 22, 3, 255, 62, 23, 4, 255, 71, 22, 4, 255, 72, 21, 0, 255, 74, 22, 4, 255, 70, 22, 6, 255, 66, 22, 4, 255, 66, 20, 2, 255, 63, 15, 1, 255, 65, 20, 6, 255, 60, 21, 3, 255, 48, 13, 3, 255, 58, 21, 6, 255, 64, 22, 4, 255, 67, 23, 3, 255, 81, 23, 3, 255, 78, 19, 1, 255, 69, 20, 4, 255, 62, 21, 6, 255, 52, 20, 3, 255, 54, 20, 2, 255, 61, 24, 6, 255, 56, 21, 3, 255, 59, 20, 4, 255, 61, 22, 5, 255, 56, 22, 3, 255, 57, 23, 2, 255, 54, 14, 0, 255, 67, 22, 5, 255, 68, 23, 3, 255, 65, 18, 3, 255, 69, 22, 2, 255, 74, 21, 0, 255, 76, 22, 2, 255, 76, 25, 4, 255, 74, 24, 3, 255, 70, 21, 1, 255, 69, 21, 2, 255, 72, 18, 3, 255, 73, 17, 6, 255, 60, 18, 2, 255, 66, 17, 4, 255, 71, 17, 5, 255, 71, 18, 3, 255, 67, 18, 1, 255, 68, 20, 2, 255, 67, 20, 4, 255, 69, 20, 3, 255, 74, 22, 5, 255, 73, 18, 4, 255, 78, 18, 4, 255, 75, 17, 3, 255, 73, 16, 4, 255, 74, 16, 4, 255, 73, 16, 3, 255, 71, 17, 3, 255, 70, 17, 3, 255, 66, 14, 1, 255, 59, 15, 0, 255, 64, 20, 4, 255, 62, 17, 2, 255, 59, 14, 1, 255, 57, 15, 3, 255, 52, 14, 3, 255, 52, 12, 1, 255, 45, 12, 0, 255, 41, 11, 1, 255, 42, 9, 3, 255, 40, 10, 3, 255, 38, 10, 2, 255, 42, 12, 3, 255, 47, 11, 1, 255, 43, 9, 1, 255, 33, 9, 1, 255, 29, 8, 3, 255, 35, 9, 5, 255, 32, 11, 4, 255, 32, 8, 4, 255, 30, 11, 4, 255, 30, 11, 4, 255, 27, 9, 3, 255, 30, 12, 4, 255, 36, 10, 2, 255, 40, 13, 3, 255, 30, 7, 0, 255, 29, 7, 4, 255, 30, 10, 4, 255, 28, 9, 0, 255, 29, 10, 4, 255, 26, 6, 4, 255, 35, 10, 6, 255, 53, 14, 7, 255, 57, 10, 1, 255, 7, 2, 0, 255, 10, 5, 2, 255, 8, 3, 1, 255, 8, 3, 0, 255, 11, 6, 3, 255, 11, 4, 2, 255, 14, 5, 3, 255, 13, 5, 2, 255, 13, 4, 1, 255, 15, 6, 3, 255, 13, 4, 2, 255, 11, 3, 0, 255, 13, 5, 1, 255, 16, 7, 3, 255, 17, 8, 2, 255, 18, 7, 2, 255, 18, 7, 4, 255, 19, 9, 6, 255, 18, 9, 3, 255, 16, 8, 3, 255, 14, 6, 1, 255, 20, 9, 4, 255, 21, 9, 3, 255, 23, 11, 4, 255, 23, 10, 5, 255, 28, 14, 8, 255, 25, 9, 3, 255, 24, 11, 4, 255, 23, 13, 5, 255, 16, 10, 1, 255, 14, 8, 0, 255, 21, 12, 3, 255, 30, 13, 5, 255, 26, 12, 3, 255, 23, 12, 2, 255, 22, 11, 1, 255, 25, 12, 4, 255, 23, 9, 1, 255, 22, 11, 2, 255, 25, 14, 5, 255, 26, 12, 2, 255, 28, 15, 3, 255, 31, 19, 6, 255, 26, 17, 2, 255, 29, 19, 3, 255, 33, 18, 4, 255, 26, 15, 3, 255, 30, 14, 2, 255, 37, 18, 3, 255, 33, 16, 1, 255, 38, 17, 3, 255, 38, 19, 2, 255, 40, 20, 2, 255, 34, 19, 3, 255, 34, 22, 5, 255, 42, 20, 6, 255, 42, 20, 4, 255, 39, 22, 3, 255, 38, 19, 2, 255, 35, 14, 2, 255, 36, 16, 3, 255, 38, 21, 1, 255, 43, 22, 3, 255, 43, 21, 7, 255, 32, 21, 4, 255, 37, 21, 2, 255, 36, 21, 3, 255, 36, 24, 3, 255, 40, 25, 0, 255, 43, 21, 3, 255, 42, 21, 6, 255, 46, 26, 7, 255, 41, 22, 3, 255, 43, 21, 3, 255, 41, 20, 2, 255, 42, 21, 2, 255, 49, 27, 4, 255, 41, 19, 4, 255, 40, 19, 5, 255, 49, 25, 2, 255, 42, 20, 5, 255, 45, 21, 1, 255, 50, 24, 8, 255, 41, 21, 3, 255, 46, 23, 2, 255, 64, 23, 5, 255, 51, 26, 5, 255, 40, 24, 2, 255, 55, 23, 4, 255, 55, 28, 6, 255, 48, 26, 4, 255, 44, 19, 2, 255, 49, 27, 5, 255, 44, 32, 2, 255, 49, 30, 3, 255, 50, 25, 5, 255, 52, 22, 6, 255, 58, 26, 3, 255, 47, 21, 0, 255, 48, 27, 8, 255, 57, 29, 4, 255, 52, 26, 1, 255, 52, 25, 5, 255, 46, 21, 5, 255, 52, 29, 7, 255, 55, 26, 0, 255, 54, 29, 4, 255, 45, 26, 7, 255, 47, 23, 7, 255, 49, 24, 2, 255, 55, 31, 10, 255, 42, 29, 3, 255, 39, 27, 14, 255, 39, 28, 23, 255, 51, 26, 13, 255, 46, 27, 10, 255, 46, 30, 9, 255, 51, 27, 5, 255, 56, 27, 4, 255, 57, 29, 3, 255, 56, 30, 0, 255, 55, 30, 5, 255, 61, 31, 5, 255, 65, 29, 1, 255, 66, 33, 5, 255, 58, 33, 2, 255, 52, 28, 2, 255, 58, 29, 3, 255, 57, 26, 5, 255, 63, 30, 6, 255, 58, 34, 3, 255, 53, 33, 4, 255, 61, 37, 11, 255, 55, 38, 6, 255, 50, 35, 8, 255, 53, 38, 9, 255, 60, 37, 7, 255, 71, 44, 15, 255, 61, 44, 2, 255, 61, 41, 24, 255, 55, 45, 19, 255, 66, 48, 28, 255, 66, 48, 18, 255, 71, 56, 13, 255, 66, 57, 19, 255, 60, 56, 19, 255, 63, 62, 25, 255, 68, 63, 21, 255, 74, 63, 23, 255, 71, 66, 42, 255, 70, 64, 52, 255, 65, 61, 39, 255, 70, 71, 39, 255, 77, 75, 34, 255, 72, 76, 35, 255, 67, 74, 40, 255, 69, 72, 46, 255, 76, 79, 43, 255, 73, 78, 46, 255, 74, 84, 71, 255, 71, 83, 58, 255, 81, 88, 58, 255, 82, 88, 69, 255, 85, 95, 63, 255, 82, 96, 67, 255, 85, 99, 76, 255, 89, 103, 72, 255, 90, 105, 75, 255, 88, 106, 81, 255, 91, 107, 85, 255, 93, 111, 80, 255, 96, 117, 81, 255, 98, 120, 89, 255, 98, 120, 89, 255, 98, 120, 85, 255, 103, 125, 87, 255, 103, 123, 88, 255, 104, 126, 94, 255, 101, 130, 97, 255, 97, 125, 92, 255, 99, 125, 87, 255, 97, 123, 83, 255, 98, 124, 82, 255, 98, 124, 82, 255, 100, 123, 80, 255, 99, 119, 79, 255, 96, 118, 80, 255, 96, 116, 76, 255, 95, 114, 71, 255, 95, 111, 67, 255, 94, 109, 65, 255, 93, 107, 64, 255, 94, 107, 58, 255, 90, 100, 56, 255, 92, 100, 54, 255, 92, 98, 53, 255, 90, 93, 51, 255, 91, 95, 44, 255, 91, 90, 31, 255, 94, 84, 37, 255, 98, 83, 41, 255, 94, 80, 34, 255, 93, 80, 35, 255, 91, 80, 30, 255, 88, 74, 28, 255, 91, 75, 35, 255, 92, 74, 30, 255, 91, 71, 20, 255, 87, 67, 22, 255, 87, 66, 22, 255, 84, 64, 19, 255, 83, 64, 17, 255, 76, 59, 16, 255, 79, 63, 13, 255, 81, 61, 4, 255, 80, 53, 17, 255, 85, 54, 23, 255, 80, 56, 12, 255, 77, 52, 9, 255, 85, 49, 9, 255, 86, 48, 8, 255, 79, 50, 4, 255, 75, 47, 10, 255, 78, 46, 9, 255, 78, 46, 3, 255, 76, 46, 10, 255, 78, 47, 9, 255, 78, 44, 0, 255, 83, 45, 6, 255, 75, 42, 4, 255, 75, 37, 10, 255, 81, 40, 12, 255, 81, 42, 5, 255, 80, 42, 0, 255, 82, 41, 4, 255, 80, 33, 6, 255, 81, 33, 8, 255, 83, 39, 5, 255, 82, 38, 3, 255, 77, 34, 0, 255, 80, 37, 0, 255, 82, 39, 2, 255, 82, 38, 3, 255, 82, 37, 3, 255, 77, 33, 3, 255, 76, 32, 6, 255, 77, 33, 2, 255, 77, 33, 0, 255, 81, 35, 3, 255, 82, 31, 5, 255, 88, 29, 3, 255, 94, 34, 4, 255, 88, 29, 0, 255, 85, 30, 2, 255, 81, 28, 4, 255, 82, 29, 6, 255, 82, 28, 4, 255, 83, 31, 0, 255, 75, 29, 2, 255, 74, 28, 7, 255, 81, 29, 4, 255, 82, 24, 1, 255, 84, 28, 7, 255, 82, 29, 4, 255, 74, 30, 0, 255, 72, 30, 2, 255, 78, 26, 5, 255, 80, 28, 4, 255, 76, 34, 4, 255, 75, 28, 4, 255, 75, 28, 2, 255, 76, 28, 3, 255, 78, 29, 6, 255, 73, 25, 3, 255, 71, 22, 1, 255, 73, 25, 2, 255, 71, 25, 3, 255, 70, 23, 5, 255, 72, 26, 5, 255, 69, 24, 2, 255, 68, 28, 2, 255, 67, 27, 2, 255, 68, 22, 2, 255, 71, 23, 6, 255, 68, 28, 6, 255, 63, 22, 1, 255, 71, 25, 1, 255, 80, 29, 0, 255, 86, 29, 1, 255, 93, 31, 2, 255, 94, 31, 3, 255, 87, 30, 3, 255, 74, 26, 3, 255, 62, 20, 5, 255, 71, 23, 5, 255, 81, 23, 4, 255, 75, 25, 3, 255, 68, 24, 3, 255, 63, 21, 1, 255, 62, 24, 4, 255, 67, 23, 5, 255, 66, 25, 3, 255, 60, 22, 5, 255, 55, 18, 1, 255, 59, 20, 3, 255, 66, 26, 7, 255, 66, 22, 4, 255, 56, 20, 2, 255, 59, 21, 1, 255, 78, 25, 2, 255, 89, 27, 5, 255, 79, 23, 1, 255, 71, 20, 1, 255, 67, 20, 3, 255, 63, 20, 5, 255, 60, 18, 6, 255, 55, 19, 6, 255, 54, 22, 5, 255, 59, 19, 2, 255, 65, 19, 3, 255, 60, 20, 3, 255, 64, 21, 4, 255, 67, 18, 4, 255, 56, 20, 2, 255, 53, 22, 3, 255, 57, 19, 2, 255, 55, 19, 5, 255, 62, 19, 9, 255, 61, 16, 4, 255, 54, 19, 1, 255, 59, 16, 0, 255, 67, 19, 1, 255, 62, 26, 2, 255, 61, 25, 6, 255, 61, 14, 4, 255, 69, 18, 6, 255, 65, 17, 4, 255, 63, 16, 5, 255, 70, 21, 4, 255, 72, 21, 1, 255, 71, 22, 1, 255, 73, 24, 2, 255, 75, 24, 3, 255, 74, 23, 3, 255, 73, 21, 2, 255, 70, 16, 0, 255, 70, 19, 4, 255, 63, 25, 5, 255, 70, 19, 4, 255, 67, 15, 1, 255, 66, 16, 2, 255, 72, 20, 5, 255, 74, 17, 4, 255, 70, 18, 2, 255, 73, 20, 2, 255, 76, 19, 0, 255, 70, 17, 0, 255, 60, 17, 1, 255, 65, 17, 2, 255, 69, 16, 2, 255, 69, 17, 3, 255, 67, 16, 2, 255, 66, 15, 1, 255, 70, 17, 3, 255, 67, 16, 2, 255, 66, 17, 3, 255, 62, 18, 3, 255, 55, 14, 0, 255, 61, 17, 4, 255, 56, 11, 3, 255, 49, 12, 2, 255, 54, 15, 3, 255, 54, 15, 4, 255, 41, 13, 3, 255, 38, 12, 5, 255, 45, 10, 6, 255, 42, 12, 4, 255, 43, 14, 3, 255, 49, 12, 2, 255, 40, 9, 1, 255, 42, 11, 2, 255, 43, 11, 4, 255, 38, 8, 2, 255, 37, 10, 1, 255, 34, 12, 3, 255, 29, 10, 1, 255, 30, 10, 4, 255, 28, 7, 4, 255, 28, 12, 6, 255, 32, 10, 2, 255, 34, 9, 0, 255, 36, 14, 3, 255, 38, 14, 7, 255, 37, 9, 5, 255, 33, 6, 2, 255, 33, 10, 3, 255, 25, 7, 0, 255, 26, 8, 1, 255, 42, 13, 3, 255, 51, 13, 3, 255, 9, 4, 0, 255, 11, 6, 2, 255, 8, 3, 1, 255, 8, 2, 1, 255, 10, 5, 2, 255, 9, 3, 1, 255, 14, 6, 4, 255, 15, 7, 5, 255, 13, 4, 2, 255, 15, 4, 2, 255, 12, 3, 0, 255, 12, 4, 0, 255, 14, 8, 2, 255, 15, 4, 0, 255, 16, 5, 0, 255, 20, 8, 2, 255, 19, 7, 4, 255, 16, 6, 2, 255, 18, 10, 2, 255, 20, 9, 4, 255, 19, 7, 4, 255, 21, 7, 4, 255, 21, 7, 2, 255, 21, 6, 2, 255, 25, 11, 5, 255, 17, 8, 2, 255, 14, 7, 2, 255, 20, 10, 4, 255, 19, 10, 3, 255, 16, 10, 1, 255, 20, 11, 2, 255, 26, 12, 3, 255, 31, 13, 6, 255, 30, 14, 5, 255, 28, 14, 5, 255, 23, 9, 1, 255, 26, 14, 6, 255, 19, 11, 1, 255, 21, 13, 5, 255, 23, 13, 4, 255, 30, 15, 5, 255, 32, 18, 7, 255, 27, 14, 3, 255, 23, 12, 0, 255, 27, 15, 3, 255, 23, 12, 2, 255, 26, 18, 6, 255, 34, 18, 8, 255, 35, 16, 2, 255, 34, 16, 0, 255, 44, 19, 4, 255, 45, 20, 8, 255, 36, 16, 4, 255, 31, 17, 3, 255, 32, 18, 3, 255, 40, 16, 3, 255, 42, 19, 5, 255, 40, 21, 6, 255, 39, 20, 4, 255, 43, 22, 4, 255, 41, 21, 4, 255, 34, 19, 3, 255, 40, 20, 5, 255, 43, 19, 2, 255, 44, 16, 9, 255, 41, 20, 5, 255, 36, 19, 2, 255, 37, 23, 6, 255, 41, 24, 1, 255, 44, 23, 3, 255, 42, 18, 5, 255, 39, 21, 6, 255, 40, 22, 2, 255, 47, 22, 5, 255, 41, 23, 6, 255, 45, 25, 3, 255, 50, 25, 3, 255, 41, 19, 6, 255, 44, 24, 7, 255, 45, 20, 2, 255, 41, 20, 1, 255, 48, 24, 5, 255, 43, 23, 5, 255, 42, 24, 7, 255, 48, 23, 5, 255, 53, 23, 3, 255, 48, 22, 2, 255, 48, 26, 6, 255, 51, 24, 5, 255, 52, 21, 4, 255, 47, 24, 5, 255, 40, 21, 2, 255, 45, 26, 5, 255, 47, 31, 4, 255, 56, 30, 7, 255, 50, 23, 3, 255, 57, 23, 10, 255, 59, 25, 2, 255, 45, 24, 3, 255, 40, 24, 4, 255, 52, 24, 1, 255, 51, 27, 3, 255, 51, 25, 2, 255, 54, 25, 0, 255, 53, 24, 6, 255, 55, 27, 6, 255, 49, 27, 3, 255, 48, 26, 10, 255, 50, 26, 7, 255, 51, 26, 5, 255, 51, 22, 5, 255, 44, 24, 14, 255, 47, 29, 22, 255, 41, 29, 25, 255, 45, 27, 7, 255, 52, 24, 2, 255, 54, 30, 8, 255, 50, 29, 5, 255, 51, 29, 3, 255, 55, 30, 4, 255, 57, 31, 7, 255, 57, 30, 7, 255, 58, 31, 3, 255, 56, 28, 0, 255, 58, 31, 2, 255, 58, 32, 3, 255, 58, 27, 7, 255, 62, 27, 5, 255, 60, 30, 6, 255, 53, 33, 4, 255, 52, 34, 2, 255, 58, 32, 10, 255, 55, 28, 7, 255, 59, 33, 7, 255, 57, 38, 14, 255, 49, 32, 10, 255, 65, 39, 15, 255, 69, 40, 11, 255, 68, 45, 9, 255, 59, 42, 17, 255, 56, 47, 23, 255, 55, 47, 24, 255, 59, 55, 11, 255, 65, 56, 17, 255, 64, 54, 18, 255, 67, 62, 17, 255, 68, 61, 27, 255, 73, 57, 36, 255, 61, 62, 32, 255, 71, 67, 19, 255, 78, 68, 36, 255, 63, 70, 38, 255, 78, 78, 46, 255, 86, 80, 39, 255, 68, 75, 37, 255, 71, 77, 54, 255, 72, 78, 46, 255, 74, 79, 46, 255, 75, 85, 48, 255, 72, 85, 58, 255, 75, 87, 66, 255, 83, 90, 62, 255, 81, 86, 70, 255, 85, 96, 72, 255, 82, 98, 69, 255, 86, 99, 78, 255, 88, 102, 75, 255, 85, 103, 77, 255, 88, 108, 85, 255, 95, 115, 87, 255, 97, 116, 86, 255, 97, 120, 86, 255, 97, 122, 85, 255, 100, 124, 90, 255, 100, 124, 92, 255, 102, 126, 92, 255, 101, 122, 86, 255, 104, 126, 95, 255, 99, 124, 99, 255, 100, 127, 92, 255, 103, 128, 86, 255, 101, 124, 82, 255, 99, 123, 82, 255, 98, 124, 87, 255, 100, 121, 84, 255, 100, 120, 79, 255, 97, 119, 78, 255, 97, 117, 73, 255, 95, 114, 67, 255, 95, 111, 67, 255, 97, 110, 65, 255, 96, 109, 65, 255, 92, 103, 62, 255, 93, 100, 65, 255, 92, 101, 48, 255, 92, 96, 50, 255, 92, 93, 53, 255, 91, 88, 49, 255, 87, 92, 44, 255, 84, 86, 36, 255, 93, 82, 37, 255, 94, 85, 26, 255, 89, 83, 22, 255, 88, 74, 31, 255, 95, 74, 20, 255, 91, 70, 31, 255, 91, 68, 37, 255, 90, 67, 23, 255, 87, 67, 12, 255, 91, 68, 16, 255, 86, 63, 11, 255, 85, 62, 15, 255, 83, 62, 15, 255, 78, 58, 16, 255, 81, 59, 17, 255, 79, 52, 17, 255, 77, 50, 16, 255, 80, 52, 9, 255, 80, 50, 4, 255, 77, 50, 9, 255, 77, 49, 13, 255, 80, 49, 11, 255, 85, 50, 11, 255, 92, 52, 9, 255, 91, 50, 9, 255, 94, 51, 9, 255, 93, 49, 5, 255, 80, 40, 3, 255, 80, 43, 8, 255, 82, 43, 4, 255, 81, 41, 4, 255, 82, 38, 2, 255, 84, 39, 8, 255, 76, 37, 7, 255, 77, 32, 4, 255, 86, 37, 8, 255, 85, 40, 10, 255, 83, 38, 8, 255, 81, 36, 5, 255, 80, 35, 4, 255, 83, 38, 6, 255, 80, 37, 4, 255, 80, 36, 4, 255, 78, 39, 7, 255, 79, 33, 0, 255, 81, 32, 4, 255, 77, 31, 7, 255, 80, 32, 3, 255, 79, 36, 2, 255, 72, 33, 3, 255, 78, 34, 4, 255, 88, 37, 5, 255, 86, 32, 1, 255, 85, 33, 3, 255, 80, 32, 3, 255, 78, 31, 2, 255, 81, 28, 6, 255, 86, 31, 4, 255, 82, 28, 5, 255, 80, 27, 7, 255, 80, 27, 5, 255, 80, 29, 5, 255, 81, 31, 3, 255, 83, 31, 4, 255, 78, 29, 5, 255, 74, 30, 3, 255, 77, 31, 2, 255, 76, 27, 1, 255, 75, 30, 5, 255, 77, 28, 4, 255, 79, 30, 3, 255, 72, 28, 0, 255, 76, 27, 5, 255, 71, 27, 5, 255, 72, 27, 2, 255, 75, 26, 1, 255, 70, 24, 1, 255, 68, 22, 4, 255, 68, 21, 1, 255, 74, 25, 4, 255, 72, 28, 5, 255, 66, 27, 5, 255, 69, 24, 4, 255, 69, 24, 2, 255, 59, 21, 3, 255, 65, 24, 9, 255, 60, 26, 2, 255, 77, 28, 4, 255, 96, 26, 4, 255, 101, 27, 3, 255, 102, 27, 2, 255, 94, 27, 1, 255, 81, 25, 1, 255, 71, 24, 5, 255, 61, 26, 1, 255, 62, 24, 0, 255, 63, 25, 1, 255, 68, 25, 3, 255, 67, 25, 6, 255, 62, 21, 4, 255, 61, 17, 0, 255, 68, 21, 3, 255, 61, 20, 5, 255, 58, 20, 3, 255, 64, 23, 3, 255, 65, 24, 3, 255, 57, 19, 1, 255, 60, 16, 0, 255, 75, 23, 6, 255, 86, 28, 5, 255, 88, 26, 1, 255, 88, 26, 1, 255, 81, 27, 4, 255, 72, 27, 2, 255, 68, 21, 1, 255, 62, 16, 2, 255, 60, 22, 8, 255, 53, 15, 4, 255, 57, 16, 0, 255, 62, 22, 9, 255, 57, 19, 1, 255, 51, 16, 1, 255, 49, 19, 5, 255, 46, 20, 3, 255, 54, 19, 2, 255, 59, 19, 1, 255, 57, 20, 2, 255, 58, 19, 3, 255, 54, 17, 0, 255, 57, 21, 3, 255, 58, 20, 5, 255, 58, 17, 4, 255, 55, 16, 1, 255, 57, 24, 2, 255, 58, 22, 4, 255, 63, 22, 4, 255, 64, 16, 1, 255, 67, 17, 3, 255, 70, 22, 1, 255, 72, 20, 1, 255, 73, 20, 2, 255, 71, 21, 1, 255, 69, 20, 0, 255, 67, 19, 0, 255, 69, 21, 1, 255, 68, 21, 0, 255, 71, 21, 1, 255, 67, 20, 1, 255, 71, 21, 2, 255, 67, 21, 3, 255, 66, 20, 2, 255, 72, 21, 4, 255, 71, 21, 2, 255, 73, 21, 4, 255, 70, 17, 4, 255, 66, 16, 2, 255, 71, 22, 6, 255, 72, 19, 3, 255, 68, 17, 1, 255, 63, 16, 0, 255, 65, 19, 3, 255, 66, 19, 4, 255, 64, 16, 2, 255, 66, 16, 2, 255, 66, 17, 2, 255, 66, 15, 2, 255, 61, 16, 2, 255, 56, 15, 3, 255, 54, 15, 2, 255, 53, 14, 3, 255, 55, 13, 6, 255, 53, 12, 2, 255, 51, 16, 4, 255, 44, 12, 4, 255, 44, 12, 5, 255, 41, 7, 2, 255, 43, 10, 1, 255, 45, 11, 1, 255, 46, 13, 3, 255, 43, 14, 4, 255, 53, 13, 5, 255, 56, 12, 1, 255, 49, 13, 1, 255, 47, 13, 1, 255, 40, 12, 1, 255, 34, 14, 3, 255, 27, 9, 1, 255, 26, 10, 5, 255, 25, 11, 5, 255, 32, 8, 2, 255, 36, 11, 2, 255, 35, 13, 2, 255, 36, 11, 4, 255, 40, 10, 5, 255, 39, 8, 3, 255, 36, 11, 4, 255, 31, 13, 5, 255, 24, 6, 3, 255, 31, 6, 2, 255, 40, 8, 6, 255, 8, 4, 1, 255, 6, 3, 1, 255, 6, 3, 2, 255, 9, 3, 3, 255, 9, 3, 3, 255, 12, 6, 3, 255, 11, 5, 2, 255, 11, 4, 2, 255, 15, 5, 4, 255, 17, 6, 4, 255, 16, 5, 4, 255, 12, 5, 1, 255, 11, 5, 1, 255, 17, 7, 4, 255, 16, 6, 2, 255, 17, 6, 3, 255, 19, 8, 5, 255, 15, 6, 1, 255, 17, 10, 1, 255, 18, 10, 4, 255, 17, 5, 2, 255, 19, 6, 2, 255, 21, 8, 2, 255, 22, 9, 3, 255, 23, 11, 5, 255, 16, 11, 2, 255, 10, 10, 0, 255, 22, 12, 5, 255, 20, 9, 2, 255, 21, 11, 1, 255, 25, 11, 3, 255, 28, 7, 2, 255, 18, 8, 0, 255, 21, 12, 1, 255, 24, 12, 3, 255, 25, 9, 3, 255, 20, 7, 1, 255, 18, 13, 2, 255, 18, 13, 4, 255, 21, 11, 1, 255, 29, 15, 4, 255, 28, 14, 3, 255, 25, 11, 4, 255, 29, 14, 6, 255, 30, 15, 5, 255, 25, 15, 6, 255, 22, 14, 5, 255, 24, 13, 4, 255, 30, 19, 4, 255, 27, 18, 2, 255, 33, 17, 3, 255, 32, 17, 2, 255, 28, 15, 0, 255, 39, 22, 4, 255, 42, 22, 4, 255, 37, 22, 0, 255, 34, 20, 0, 255, 37, 17, 3, 255, 36, 17, 3, 255, 37, 18, 0, 255, 45, 24, 6, 255, 38, 20, 3, 255, 40, 17, 3, 255, 38, 20, 3, 255, 41, 23, 7, 255, 41, 20, 1, 255, 43, 19, 4, 255, 37, 19, 5, 255, 36, 22, 1, 255, 42, 21, 2, 255, 45, 22, 6, 255, 36, 20, 4, 255, 40, 22, 0, 255, 42, 24, 5, 255, 35, 19, 6, 255, 45, 20, 2, 255, 47, 23, 3, 255, 37, 22, 3, 255, 41, 24, 1, 255, 49, 26, 2, 255, 48, 26, 2, 255, 50, 26, 3, 255, 41, 24, 2, 255, 39, 22, 4, 255, 44, 24, 4, 255, 42, 27, 2, 255, 48, 25, 2, 255, 49, 23, 2, 255, 43, 25, 3, 255, 39, 20, 4, 255, 43, 24, 5, 255, 47, 22, 1, 255, 48, 21, 1, 255, 46, 26, 4, 255, 58, 31, 9, 255, 59, 28, 4, 255, 54, 24, 1, 255, 47, 23, 1, 255, 52, 25, 3, 255, 59, 26, 7, 255, 54, 24, 10, 255, 47, 21, 4, 255, 50, 23, 3, 255, 49, 22, 1, 255, 45, 23, 4, 255, 45, 26, 7, 255, 54, 27, 4, 255, 56, 28, 2, 255, 52, 28, 3, 255, 51, 25, 5, 255, 55, 26, 5, 255, 52, 29, 9, 255, 38, 24, 19, 255, 39, 27, 20, 255, 52, 31, 5, 255, 57, 28, 0, 255, 53, 28, 0, 255, 52, 32, 3, 255, 53, 30, 4, 255, 52, 25, 1, 255, 56, 28, 6, 255, 54, 26, 5, 255, 58, 29, 4, 255, 56, 30, 3, 255, 56, 30, 4, 255, 58, 29, 2, 255, 56, 27, 6, 255, 58, 34, 6, 255, 50, 27, 5, 255, 50, 27, 7, 255, 59, 32, 4, 255, 54, 23, 10, 255, 58, 33, 10, 255, 62, 36, 5, 255, 60, 36, 3, 255, 64, 39, 10, 255, 59, 38, 10, 255, 58, 41, 10, 255, 60, 47, 10, 255, 52, 45, 15, 255, 56, 50, 18, 255, 56, 53, 15, 255, 59, 47, 23, 255, 57, 52, 13, 255, 65, 58, 19, 255, 72, 57, 30, 255, 68, 60, 19, 255, 70, 64, 24, 255, 63, 67, 35, 255, 69, 66, 32, 255, 73, 66, 31, 255, 63, 70, 39, 255, 75, 72, 44, 255, 81, 73, 43, 255, 67, 72, 43, 255, 73, 74, 52, 255, 75, 81, 49, 255, 72, 83, 48, 255, 73, 84, 50, 255, 74, 85, 54, 255, 78, 91, 63, 255, 81, 89, 63, 255, 83, 91, 69, 255, 82, 97, 71, 255, 82, 101, 72, 255, 88, 102, 75, 255, 90, 104, 79, 255, 90, 109, 81, 255, 91, 114, 84, 255, 94, 113, 88, 255, 100, 117, 91, 255, 102, 125, 94, 255, 96, 123, 91, 255, 98, 123, 94, 255, 100, 127, 93, 255, 102, 129, 93, 255, 100, 126, 91, 255, 105, 129, 99, 255, 104, 129, 99, 255, 102, 128, 94, 255, 107, 129, 91, 255, 106, 127, 88, 255, 101, 125, 90, 255, 96, 123, 91, 255, 97, 120, 86, 255, 101, 120, 81, 255, 100, 116, 80, 255, 99, 115, 75, 255, 96, 114, 67, 255, 90, 107, 64, 255, 93, 113, 63, 255, 87, 105, 60, 255, 89, 99, 63, 255, 90, 100, 65, 255, 88, 98, 50, 255, 86, 94, 43, 255, 91, 90, 56, 255, 92, 85, 52, 255, 85, 83, 43, 255, 85, 81, 48, 255, 91, 83, 45, 255, 89, 82, 27, 255, 90, 80, 26, 255, 88, 76, 24, 255, 89, 72, 24, 255, 90, 71, 18, 255, 87, 69, 18, 255, 87, 66, 18, 255, 82, 66, 14, 255, 88, 63, 21, 255, 84, 60, 15, 255, 79, 60, 14, 255, 76, 57, 13, 255, 76, 56, 13, 255, 83, 60, 6, 255, 85, 57, 8, 255, 85, 52, 19, 255, 79, 50, 7, 255, 80, 51, 7, 255, 75, 50, 15, 255, 72, 45, 11, 255, 87, 50, 12, 255, 104, 53, 7, 255, 114, 51, 8, 255, 116, 48, 9, 255, 113, 54, 0, 255, 96, 48, 5, 255, 76, 36, 21, 255, 73, 37, 20, 255, 82, 40, 1, 255, 83, 38, 4, 255, 84, 42, 7, 255, 80, 39, 1, 255, 78, 34, 5, 255, 83, 39, 14, 255, 76, 34, 5, 255, 77, 34, 1, 255, 81, 37, 1, 255, 80, 35, 4, 255, 81, 34, 8, 255, 81, 34, 10, 255, 77, 31, 6, 255, 76, 31, 4, 255, 72, 36, 8, 255, 71, 32, 6, 255, 78, 32, 8, 255, 79, 28, 6, 255, 80, 26, 2, 255, 84, 32, 4, 255, 82, 35, 3, 255, 81, 37, 4, 255, 83, 34, 1, 255, 83, 32, 0, 255, 82, 34, 3, 255, 79, 32, 2, 255, 79, 31, 0, 255, 82, 32, 4, 255, 79, 29, 2, 255, 80, 28, 1, 255, 81, 27, 2, 255, 79, 29, 7, 255, 78, 30, 5, 255, 77, 31, 1, 255, 72, 30, 1, 255, 72, 28, 2, 255, 84, 31, 6, 255, 80, 30, 4, 255, 70, 28, 1, 255, 72, 30, 6, 255, 77, 31, 5, 255, 74, 30, 0, 255, 73, 30, 2, 255, 68, 23, 2, 255, 74, 27, 6, 255, 79, 29, 4, 255, 77, 26, 1, 255, 70, 24, 4, 255, 66, 24, 7, 255, 66, 21, 2, 255, 75, 26, 3, 255, 72, 24, 3, 255, 71, 28, 6, 255, 69, 24, 3, 255, 67, 24, 4, 255, 66, 23, 4, 255, 62, 24, 10, 255, 49, 21, 4, 255, 68, 22, 2, 255, 76, 26, 0, 255, 87, 30, 3, 255, 91, 28, 2, 255, 93, 33, 4, 255, 81, 28, 1, 255, 73, 24, 1, 255, 62, 26, 1, 255, 67, 26, 2, 255, 67, 25, 1, 255, 68, 21, 1, 255, 68, 24, 5, 255, 64, 22, 6, 255, 60, 17, 2, 255, 61, 20, 3, 255, 56, 20, 5, 255, 60, 19, 3, 255, 71, 24, 3, 255, 74, 26, 5, 255, 68, 21, 6, 255, 63, 19, 3, 255, 67, 25, 3, 255, 81, 26, 2, 255, 93, 25, 3, 255, 92, 23, 0, 255, 90, 26, 5, 255, 92, 29, 6, 255, 89, 30, 4, 255, 67, 20, 0, 255, 53, 16, 3, 255, 62, 18, 5, 255, 66, 17, 2, 255, 56, 16, 4, 255, 70, 19, 3, 255, 63, 17, 3, 255, 62, 21, 5, 255, 60, 20, 2, 255, 70, 22, 6, 255, 58, 18, 2, 255, 52, 19, 2, 255, 55, 18, 3, 255, 50, 18, 3, 255, 45, 17, 1, 255, 52, 21, 6, 255, 52, 18, 8, 255, 57, 17, 6, 255, 62, 18, 3, 255, 60, 15, 3, 255, 65, 19, 4, 255, 69, 19, 4, 255, 73, 20, 7, 255, 71, 24, 4, 255, 68, 18, 0, 255, 71, 20, 3, 255, 71, 23, 3, 255, 70, 22, 2, 255, 67, 19, 0, 255, 70, 22, 3, 255, 72, 22, 2, 255, 74, 22, 1, 255, 77, 19, 2, 255, 70, 20, 1, 255, 67, 19, 2, 255, 66, 19, 1, 255, 69, 20, 3, 255, 66, 22, 1, 255, 66, 17, 2, 255, 68, 15, 3, 255, 73, 19, 7, 255, 70, 15, 3, 255, 80, 19, 5, 255, 74, 15, 2, 255, 67, 17, 2, 255, 63, 15, 1, 255, 63, 16, 2, 255, 66, 17, 4, 255, 62, 14, 1, 255, 60, 15, 0, 255, 58, 13, 1, 255, 61, 15, 5, 255, 57, 17, 3, 255, 50, 15, 1, 255, 53, 15, 3, 255, 61, 14, 3, 255, 51, 12, 2, 255, 50, 13, 3, 255, 48, 10, 2, 255, 46, 12, 3, 255, 47, 12, 2, 255, 50, 12, 3, 255, 47, 12, 2, 255, 43, 13, 3, 255, 45, 13, 2, 255, 54, 13, 2, 255, 61, 11, 1, 255, 59, 14, 4, 255, 49, 17, 6, 255, 34, 12, 4, 255, 28, 10, 1, 255, 32, 10, 1, 255, 31, 8, 2, 255, 30, 12, 5, 255, 31, 10, 2, 255, 39, 11, 2, 255, 33, 7, 0, 255, 30, 10, 5, 255, 38, 14, 6, 255, 41, 11, 1, 255, 40, 9, 2, 255, 33, 7, 3, 255, 23, 10, 4, 255, 21, 6, 1, 255, 22, 8, 2, 255, 8, 4, 1, 255, 6, 1, 0, 255, 8, 3, 1, 255, 10, 5, 3, 255, 9, 3, 2, 255, 12, 5, 3, 255, 11, 5, 2, 255, 12, 5, 2, 255, 11, 4, 1, 255, 12, 3, 0, 255, 14, 4, 2, 255, 15, 7, 3, 255, 13, 7, 2, 255, 13, 6, 4, 255, 11, 3, 1, 255, 13, 4, 2, 255, 13, 3, 1, 255, 17, 7, 3, 255, 15, 7, 0, 255, 19, 9, 5, 255, 16, 5, 1, 255, 18, 8, 3, 255, 19, 8, 3, 255, 19, 10, 3, 255, 14, 8, 0, 255, 15, 9, 1, 255, 21, 10, 2, 255, 25, 10, 4, 255, 22, 8, 1, 255, 19, 8, 2, 255, 19, 10, 2, 255, 21, 10, 2, 255, 20, 12, 2, 255, 19, 11, 1, 255, 20, 12, 2, 255, 22, 10, 3, 255, 24, 11, 3, 255, 20, 13, 1, 255, 21, 12, 3, 255, 22, 11, 4, 255, 24, 12, 2, 255, 27, 15, 4, 255, 28, 15, 6, 255, 27, 13, 4, 255, 26, 12, 2, 255, 32, 16, 6, 255, 30, 13, 6, 255, 29, 12, 5, 255, 27, 15, 3, 255, 30, 20, 5, 255, 31, 18, 4, 255, 28, 15, 5, 255, 30, 17, 5, 255, 33, 17, 1, 255, 35, 20, 4, 255, 31, 23, 6, 255, 37, 22, 5, 255, 42, 23, 4, 255, 37, 23, 4, 255, 39, 18, 5, 255, 45, 19, 6, 255, 35, 20, 0, 255, 42, 20, 4, 255, 40, 19, 8, 255, 32, 22, 1, 255, 39, 24, 1, 255, 33, 17, 3, 255, 42, 21, 9, 255, 41, 20, 3, 255, 42, 21, 4, 255, 39, 20, 2, 255, 41, 22, 1, 255, 48, 25, 2, 255, 41, 25, 3, 255, 37, 20, 7, 255, 47, 19, 5, 255, 48, 22, 5, 255, 40, 22, 4, 255, 42, 23, 7, 255, 46, 23, 2, 255, 48, 21, 4, 255, 49, 24, 4, 255, 43, 23, 3, 255, 40, 23, 6, 255, 39, 23, 2, 255, 42, 24, 2, 255, 43, 25, 3, 255, 46, 26, 6, 255, 46, 24, 4, 255, 46, 26, 6, 255, 43, 25, 4, 255, 47, 27, 1, 255, 52, 27, 4, 255, 51, 22, 4, 255, 52, 25, 2, 255, 46, 27, 2, 255, 47, 28, 3, 255, 47, 26, 7, 255, 46, 23, 0, 255, 53, 28, 3, 255, 49, 24, 7, 255, 48, 25, 3, 255, 56, 27, 5, 255, 52, 24, 5, 255, 48, 29, 4, 255, 43, 27, 1, 255, 56, 26, 4, 255, 59, 25, 2, 255, 45, 24, 4, 255, 57, 28, 3, 255, 56, 25, 2, 255, 44, 25, 6, 255, 40, 23, 11, 255, 42, 29, 17, 255, 48, 30, 15, 255, 49, 30, 10, 255, 52, 31, 9, 255, 53, 30, 2, 255, 55, 26, 0, 255, 59, 28, 6, 255, 57, 30, 7, 255, 50, 26, 3, 255, 54, 33, 4, 255, 53, 31, 3, 255, 57, 27, 6, 255, 61, 25, 3, 255, 61, 29, 4, 255, 54, 30, 1, 255, 59, 31, 2, 255, 64, 27, 5, 255, 58, 33, 10, 255, 53, 31, 9, 255, 59, 31, 4, 255, 58, 32, 7, 255, 62, 37, 10, 255, 60, 37, 8, 255, 56, 40, 15, 255, 55, 39, 12, 255, 58, 42, 9, 255, 55, 40, 16, 255, 63, 46, 13, 255, 64, 51, 16, 255, 63, 44, 28, 255, 63, 58, 24, 255, 59, 56, 24, 255, 67, 57, 23, 255, 66, 63, 22, 255, 60, 57, 45, 255, 65, 63, 36, 255, 63, 64, 37, 255, 65, 65, 47, 255, 67, 68, 47, 255, 70, 70, 36, 255, 73, 72, 39, 255, 73, 78, 40, 255, 76, 79, 43, 255, 73, 77, 47, 255, 74, 86, 46, 255, 74, 87, 62, 255, 78, 86, 62, 255, 80, 91, 61, 255, 80, 89, 66, 255, 86, 98, 73, 255, 82, 99, 71, 255, 86, 105, 78, 255, 94, 107, 78, 255, 91, 105, 78, 255, 90, 111, 85, 255, 93, 118, 86, 255, 96, 119, 88, 255, 99, 118, 93, 255, 98, 122, 95, 255, 97, 126, 97, 255, 100, 124, 99, 255, 99, 129, 92, 255, 99, 130, 90, 255, 101, 129, 95, 255, 102, 129, 96, 255, 104, 130, 92, 255, 103, 130, 97, 255, 104, 127, 96, 255, 103, 125, 92, 255, 98, 124, 91, 255, 98, 126, 93, 255, 97, 123, 88, 255, 100, 119, 82, 255, 101, 116, 83, 255, 97, 114, 76, 255, 96, 114, 69, 255, 94, 110, 67, 255, 91, 110, 59, 255, 85, 105, 58, 255, 89, 102, 61, 255, 87, 98, 58, 255, 86, 97, 55, 255, 87, 94, 44, 255, 87, 86, 51, 255, 88, 87, 41, 255, 87, 88, 32, 255, 88, 86, 30, 255, 89, 83, 19, 255, 89, 78, 24, 255, 90, 74, 31, 255, 89, 74, 18, 255, 89, 72, 21, 255, 89, 69, 22, 255, 88, 70, 21, 255, 89, 69, 20, 255, 76, 60, 25, 255, 79, 62, 14, 255, 83, 60, 14, 255, 86, 57, 12, 255, 87, 59, 13, 255, 81, 52, 13, 255, 88, 55, 14, 255, 89, 54, 11, 255, 88, 55, 9, 255, 85, 57, 7, 255, 78, 51, 12, 255, 79, 49, 11, 255, 79, 47, 7, 255, 86, 48, 8, 255, 97, 49, 4, 255, 109, 49, 7, 255, 108, 48, 9, 255, 99, 51, 9, 255, 78, 39, 7, 255, 70, 33, 16, 255, 77, 39, 12, 255, 80, 39, 4, 255, 83, 37, 3, 255, 83, 42, 6, 255, 80, 37, 5, 255, 82, 36, 3, 255, 80, 38, 4, 255, 79, 39, 4, 255, 78, 36, 2, 255, 83, 39, 7, 255, 82, 35, 3, 255, 80, 34, 1, 255, 81, 35, 4, 255, 75, 31, 3, 255, 72, 30, 3, 255, 76, 35, 4, 255, 68, 32, 3, 255, 71, 33, 7, 255, 79, 36, 3, 255, 80, 36, 2, 255, 81, 36, 1, 255, 84, 32, 2, 255, 86, 31, 4, 255, 83, 31, 1, 255, 79, 31, 1, 255, 80, 31, 3, 255, 81, 30, 3, 255, 80, 27, 2, 255, 83, 31, 4, 255, 79, 32, 4, 255, 77, 33, 1, 255, 77, 30, 0, 255, 77, 29, 5, 255, 83, 31, 4, 255, 80, 30, 2, 255, 74, 31, 2, 255, 77, 36, 6, 255, 77, 30, 6, 255, 72, 27, 2, 255, 74, 27, 3, 255, 78, 28, 3, 255, 69, 30, 3, 255, 69, 30, 2, 255, 76, 32, 3, 255, 69, 26, 2, 255, 75, 26, 5, 255, 75, 28, 2, 255, 73, 25, 1, 255, 70, 25, 4, 255, 64, 22, 4, 255, 71, 26, 4, 255, 75, 26, 3, 255, 72, 25, 4, 255, 67, 22, 0, 255, 68, 24, 0, 255, 71, 24, 4, 255, 69, 23, 2, 255, 60, 22, 4, 255, 61, 24, 9, 255, 65, 22, 1, 255, 63, 23, 2, 255, 67, 25, 4, 255, 64, 16, 0, 255, 74, 25, 6, 255, 68, 22, 3, 255, 67, 21, 2, 255, 68, 23, 2, 255, 71, 21, 2, 255, 67, 26, 5, 255, 64, 24, 3, 255, 62, 24, 2, 255, 59, 20, 3, 255, 63, 17, 3, 255, 66, 22, 4, 255, 64, 21, 5, 255, 65, 23, 3, 255, 68, 22, 0, 255, 69, 21, 1, 255, 59, 19, 2, 255, 67, 22, 6, 255, 75, 23, 5, 255, 77, 22, 2, 255, 87, 24, 1, 255, 96, 26, 4, 255, 93, 21, 1, 255, 91, 21, 2, 255, 91, 23, 6, 255, 67, 21, 6, 255, 52, 17, 2, 255, 71, 26, 4, 255, 85, 27, 7, 255, 76, 22, 3, 255, 75, 26, 7, 255, 83, 21, 6, 255, 83, 21, 5, 255, 65, 23, 3, 255, 56, 23, 1, 255, 47, 17, 3, 255, 47, 15, 4, 255, 57, 17, 10, 255, 54, 19, 8, 255, 41, 19, 3, 255, 43, 16, 4, 255, 58, 19, 8, 255, 48, 14, 3, 255, 53, 21, 5, 255, 49, 15, 3, 255, 58, 18, 4, 255, 59, 16, 3, 255, 61, 17, 4, 255, 67, 21, 7, 255, 63, 20, 1, 255, 64, 23, 2, 255, 71, 26, 6, 255, 73, 24, 4, 255, 73, 22, 4, 255, 74, 21, 5, 255, 75, 19, 4, 255, 76, 20, 4, 255, 77, 18, 4, 255, 69, 19, 1, 255, 70, 20, 3, 255, 71, 20, 3, 255, 68, 19, 0, 255, 65, 15, 2, 255, 68, 18, 4, 255, 70, 19, 3, 255, 71, 16, 1, 255, 74, 20, 5, 255, 67, 19, 3, 255, 67, 13, 1, 255, 69, 17, 4, 255, 65, 18, 4, 255, 62, 13, 1, 255, 64, 15, 2, 255, 66, 17, 2, 255, 59, 14, 0, 255, 51, 18, 2, 255, 65, 18, 6, 255, 61, 14, 3, 255, 55, 15, 2, 255, 55, 16, 2, 255, 55, 14, 2, 255, 48, 15, 4, 255, 58, 13, 5, 255, 55, 10, 3, 255, 40, 12, 1, 255, 46, 14, 4, 255, 55, 13, 3, 255, 50, 14, 4, 255, 42, 11, 2, 255, 43, 11, 2, 255, 53, 16, 3, 255, 64, 15, 2, 255, 56, 12, 3, 255, 38, 9, 3, 255, 37, 9, 3, 255, 35, 10, 2, 255, 32, 11, 2, 255, 31, 13, 4, 255, 29, 11, 2, 255, 35, 8, 0, 255, 41, 8, 4, 255, 37, 11, 4, 255, 35, 13, 3, 255, 33, 10, 0, 255, 35, 8, 2, 255, 40, 11, 3, 255, 38, 8, 1, 255, 34, 10, 4, 255, 31, 8, 3, 255, 31, 8, 2, 255, 8, 3, 0, 255, 9, 3, 0, 255, 11, 2, 1, 255, 12, 4, 2, 255, 12, 5, 3, 255, 9, 5, 2, 255, 10, 2, 1, 255, 14, 6, 3, 255, 9, 5, 1, 255, 11, 6, 2, 255, 12, 3, 1, 255, 14, 4, 3, 255, 11, 3, 1, 255, 8, 5, 0, 255, 10, 5, 2, 255, 15, 7, 4, 255, 16, 6, 2, 255, 18, 7, 2, 255, 21, 8, 3, 255, 13, 4, 0, 255, 15, 8, 2, 255, 17, 8, 4, 255, 17, 6, 3, 255, 18, 7, 3, 255, 17, 12, 2, 255, 17, 12, 3, 255, 21, 10, 5, 255, 18, 7, 1, 255, 18, 7, 1, 255, 21, 9, 3, 255, 20, 10, 3, 255, 19, 11, 1, 255, 28, 13, 4, 255, 27, 13, 3, 255, 24, 12, 4, 255, 21, 10, 1, 255, 26, 13, 5, 255, 30, 16, 4, 255, 27, 12, 4, 255, 22, 9, 3, 255, 22, 12, 4, 255, 21, 12, 1, 255, 23, 13, 0, 255, 24, 14, 1, 255, 25, 17, 5, 255, 24, 14, 4, 255, 31, 14, 7, 255, 24, 13, 3, 255, 23, 14, 2, 255, 34, 20, 6, 255, 32, 20, 2, 255, 28, 14, 2, 255, 34, 18, 3, 255, 39, 22, 5, 255, 38, 21, 6, 255, 38, 21, 6, 255, 38, 20, 3, 255, 41, 19, 0, 255, 40, 21, 2, 255, 39, 19, 4, 255, 41, 16, 5, 255, 36, 19, 3, 255, 45, 19, 6, 255, 34, 18, 4, 255, 30, 17, 1, 255, 44, 25, 5, 255, 28, 17, 6, 255, 33, 17, 3, 255, 44, 19, 1, 255, 44, 18, 3, 255, 45, 19, 2, 255, 49, 22, 2, 255, 47, 23, 2, 255, 47, 24, 4, 255, 50, 22, 7, 255, 41, 16, 2, 255, 44, 25, 4, 255, 50, 22, 0, 255, 43, 18, 4, 255, 45, 23, 6, 255, 47, 23, 3, 255, 46, 21, 4, 255, 47, 24, 3, 255, 43, 26, 2, 255, 47, 26, 3, 255, 45, 23, 1, 255, 43, 25, 2, 255, 42, 26, 3, 255, 51, 24, 2, 255, 46, 21, 2, 255, 46, 26, 6, 255, 53, 24, 2, 255, 46, 22, 3, 255, 45, 19, 2, 255, 48, 25, 2, 255, 38, 22, 5, 255, 48, 27, 4, 255, 59, 26, 6, 255, 49, 26, 2, 255, 40, 28, 1, 255, 53, 29, 7, 255, 57, 28, 5, 255, 51, 24, 2, 255, 51, 25, 3, 255, 55, 24, 2, 255, 52, 25, 0, 255, 55, 27, 4, 255, 54, 24, 4, 255, 45, 26, 1, 255, 58, 26, 3, 255, 53, 28, 4, 255, 45, 24, 3, 255, 58, 28, 6, 255, 52, 25, 2, 255, 53, 26, 17, 255, 51, 32, 23, 255, 55, 31, 15, 255, 55, 32, 5, 255, 57, 31, 4, 255, 55, 29, 3, 255, 49, 28, 4, 255, 56, 27, 8, 255, 56, 26, 6, 255, 60, 31, 4, 255, 61, 31, 6, 255, 55, 29, 2, 255, 54, 30, 3, 255, 50, 26, 6, 255, 53, 28, 5, 255, 66, 29, 4, 255, 63, 31, 5, 255, 58, 35, 7, 255, 64, 34, 6, 255, 59, 35, 4, 255, 60, 36, 8, 255, 57, 37, 8, 255, 58, 39, 10, 255, 63, 39, 15, 255, 60, 41, 15, 255, 62, 46, 15, 255, 63, 42, 16, 255, 65, 47, 24, 255, 67, 52, 26, 255, 64, 59, 19, 255, 54, 54, 19, 255, 60, 59, 27, 255, 61, 58, 24, 255, 63, 57, 32, 255, 64, 61, 40, 255, 60, 60, 44, 255, 64, 69, 42, 255, 65, 70, 41, 255, 65, 68, 34, 255, 71, 73, 44, 255, 72, 79, 39, 255, 74, 80, 49, 255, 81, 82, 52, 255, 78, 84, 49, 255, 74, 87, 66, 255, 75, 89, 61, 255, 81, 91, 67, 255, 79, 92, 67, 255, 83, 99, 73, 255, 86, 103, 78, 255, 88, 105, 79, 255, 90, 107, 81, 255, 93, 112, 86, 255, 93, 116, 89, 255, 94, 119, 91, 255, 97, 121, 92, 255, 99, 123, 93, 255, 96, 125, 94, 255, 95, 127, 96, 255, 101, 126, 100, 255, 100, 131, 95, 255, 98, 131, 90, 255, 102, 132, 95, 255, 102, 131, 97, 255, 103, 129, 97, 255, 102, 132, 99, 255, 101, 129, 95, 255, 100, 126, 90, 255, 97, 124, 85, 255, 100, 127, 88, 255, 98, 122, 86, 255, 97, 115, 79, 255, 95, 115, 77, 255, 93, 115, 74, 255, 95, 111, 71, 255, 95, 106, 70, 255, 96, 107, 63, 255, 93, 105, 61, 255, 90, 97, 58, 255, 90, 98, 59, 255, 89, 97, 51, 255, 90, 91, 46, 255, 91, 88, 47, 255, 87, 88, 40, 255, 81, 83, 38, 255, 87, 83, 38, 255, 93, 79, 24, 255, 91, 77, 30, 255, 84, 74, 24, 255, 85, 71, 24, 255, 91, 70, 22, 255, 89, 67, 26, 255, 85, 69, 18, 255, 82, 64, 13, 255, 79, 63, 21, 255, 74, 64, 13, 255, 81, 61, 13, 255, 85, 57, 16, 255, 83, 58, 11, 255, 80, 51, 11, 255, 81, 54, 12, 255, 75, 52, 6, 255, 89, 57, 13, 255, 100, 57, 11, 255, 91, 49, 5, 255, 76, 43, 4, 255, 76, 44, 7, 255, 81, 43, 5, 255, 80, 42, 2, 255, 82, 46, 6, 255, 83, 44, 10, 255, 78, 36, 6, 255, 81, 38, 6, 255, 80, 37, 4, 255, 80, 39, 2, 255, 75, 38, 3, 255, 81, 39, 7, 255, 79, 35, 5, 255, 85, 35, 6, 255, 84, 36, 6, 255, 80, 36, 3, 255, 83, 33, 2, 255, 80, 33, 8, 255, 76, 29, 8, 255, 80, 33, 5, 255, 79, 32, 3, 255, 82, 35, 8, 255, 78, 33, 7, 255, 77, 35, 4, 255, 71, 34, 4, 255, 77, 34, 4, 255, 81, 31, 2, 255, 80, 31, 3, 255, 76, 29, 2, 255, 86, 34, 3, 255, 88, 31, 2, 255, 84, 27, 2, 255, 83, 31, 4, 255, 86, 34, 5, 255, 87, 33, 3, 255, 81, 29, 1, 255, 81, 31, 5, 255, 81, 27, 4, 255, 80, 31, 1, 255, 77, 32, 3, 255, 78, 33, 7, 255, 78, 28, 4, 255, 82, 30, 1, 255, 85, 34, 2, 255, 87, 32, 2, 255, 89, 33, 6, 255, 78, 31, 3, 255, 72, 33, 4, 255, 75, 29, 4, 255, 79, 25, 2, 255, 72, 30, 1, 255, 75, 32, 5, 255, 76, 30, 1, 255, 73, 29, 1, 255, 71, 27, 8, 255, 64, 29, 3, 255, 67, 24, 2, 255, 71, 25, 4, 255, 71, 26, 4, 255, 71, 26, 3, 255, 70, 24, 3, 255, 71, 24, 5, 255, 69, 24, 5, 255, 67, 24, 2, 255, 69, 22, 3, 255, 68, 21, 3, 255, 70, 25, 3, 255, 70, 25, 3, 255, 69, 23, 3, 255, 67, 26, 3, 255, 64, 26, 3, 255, 61, 19, 0, 255, 58, 22, 5, 255, 69, 23, 7, 255, 80, 26, 4, 255, 79, 32, 2, 255, 83, 28, 3, 255, 79, 25, 6, 255, 73, 24, 4, 255, 71, 24, 4, 255, 55, 18, 0, 255, 59, 17, 1, 255, 63, 22, 4, 255, 65, 20, 3, 255, 66, 20, 2, 255, 66, 20, 5, 255, 63, 17, 4, 255, 58, 17, 4, 255, 82, 23, 5, 255, 90, 19, 3, 255, 89, 24, 7, 255, 91, 23, 5, 255, 92, 23, 4, 255, 94, 20, 3, 255, 90, 23, 4, 255, 85, 20, 4, 255, 76, 19, 5, 255, 75, 20, 4, 255, 81, 24, 2, 255, 90, 30, 2, 255, 88, 27, 1, 255, 86, 22, 7, 255, 88, 26, 4, 255, 85, 23, 2, 255, 80, 22, 4, 255, 64, 19, 1, 255, 49, 16, 3, 255, 49, 17, 2, 255, 55, 19, 6, 255, 60, 17, 5, 255, 52, 17, 5, 255, 44, 14, 3, 255, 50, 16, 4, 255, 47, 16, 5, 255, 50, 20, 2, 255, 48, 21, 2, 255, 55, 20, 3, 255, 61, 19, 3, 255, 61, 19, 2, 255, 60, 21, 2, 255, 62, 23, 3, 255, 60, 22, 2, 255, 66, 21, 4, 255, 67, 17, 2, 255, 65, 19, 1, 255, 63, 19, 3, 255, 72, 19, 4, 255, 82, 21, 5, 255, 74, 16, 1, 255, 73, 18, 1, 255, 68, 20, 1, 255, 67, 19, 2, 255, 67, 18, 2, 255, 63, 17, 2, 255, 63, 17, 2, 255, 62, 17, 2, 255, 60, 16, 0, 255, 63, 17, 1, 255, 68, 19, 3, 255, 68, 17, 3, 255, 64, 17, 2, 255, 63, 18, 2, 255, 65, 16, 1, 255, 66, 19, 2, 255, 68, 20, 3, 255, 68, 14, 1, 255, 60, 15, 2, 255, 58, 15, 1, 255, 54, 15, 1, 255, 53, 17, 1, 255, 56, 15, 2, 255, 56, 13, 4, 255, 59, 13, 4, 255, 69, 14, 4, 255, 62, 11, 4, 255, 46, 13, 6, 255, 37, 9, 1, 255, 49, 11, 1, 255, 52, 12, 4, 255, 40, 11, 1, 255, 38, 11, 3, 255, 46, 13, 3, 255, 55, 14, 2, 255, 47, 11, 2, 255, 32, 5, 1, 255, 40, 9, 1, 255, 34, 10, 3, 255, 29, 11, 3, 255, 28, 8, 2, 255, 33, 8, 3, 255, 34, 10, 2, 255, 32, 11, 3, 255, 39, 10, 4, 255, 42, 9, 2, 255, 39, 10, 2, 255, 41, 13, 5, 255, 42, 13, 3, 255, 38, 13, 2, 255, 29, 9, 4, 255, 27, 9, 2, 255, 28, 10, 3, 255, 11, 6, 3, 255, 11, 4, 2, 255, 11, 3, 1, 255, 12, 4, 2, 255, 12, 4, 2, 255, 9, 3, 0, 255, 11, 3, 1, 255, 14, 5, 3, 255, 12, 5, 2, 255, 13, 5, 3, 255, 16, 5, 3, 255, 16, 5, 3, 255, 13, 4, 2, 255, 13, 5, 2, 255, 15, 7, 4, 255, 16, 7, 5, 255, 18, 7, 5, 255, 18, 7, 4, 255, 23, 10, 5, 255, 12, 5, 1, 255, 12, 7, 1, 255, 16, 9, 3, 255, 17, 6, 3, 255, 19, 6, 3, 255, 20, 10, 5, 255, 19, 9, 2, 255, 19, 7, 1, 255, 21, 10, 6, 255, 19, 10, 5, 255, 19, 9, 4, 255, 17, 7, 1, 255, 19, 8, 1, 255, 21, 11, 3, 255, 20, 8, 0, 255, 24, 10, 1, 255, 24, 10, 2, 255, 21, 9, 2, 255, 20, 10, 2, 255, 23, 13, 4, 255, 18, 11, 1, 255, 20, 13, 2, 255, 24, 15, 4, 255, 27, 13, 4, 255, 27, 12, 3, 255, 27, 16, 6, 255, 23, 15, 3, 255, 27, 13, 4, 255, 24, 14, 3, 255, 22, 14, 1, 255, 27, 15, 0, 255, 29, 18, 2, 255, 34, 21, 3, 255, 33, 16, 1, 255, 31, 15, 2, 255, 35, 19, 4, 255, 38, 22, 3, 255, 38, 18, 2, 255, 42, 16, 4, 255, 38, 17, 3, 255, 39, 17, 0, 255, 41, 17, 2, 255, 35, 21, 4, 255, 37, 18, 3, 255, 32, 20, 2, 255, 37, 20, 4, 255, 41, 18, 1, 255, 27, 19, 3, 255, 39, 22, 5, 255, 43, 23, 3, 255, 34, 18, 1, 255, 46, 20, 4, 255, 52, 25, 7, 255, 40, 22, 0, 255, 40, 22, 2, 255, 48, 19, 4, 255, 47, 21, 2, 255, 44, 27, 4, 255, 50, 23, 3, 255, 44, 23, 3, 255, 44, 25, 7, 255, 43, 23, 4, 255, 40, 20, 0, 255, 42, 23, 4, 255, 46, 23, 7, 255, 44, 23, 4, 255, 45, 24, 3, 255, 43, 24, 3, 255, 42, 22, 5, 255, 48, 24, 7, 255, 43, 21, 4, 255, 41, 22, 1, 255, 47, 24, 0, 255, 46, 24, 7, 255, 54, 25, 5, 255, 51, 25, 6, 255, 47, 24, 4, 255, 51, 25, 6, 255, 52, 26, 3, 255, 51, 24, 2, 255, 48, 24, 2, 255, 49, 27, 4, 255, 53, 26, 2, 255, 52, 28, 5, 255, 50, 26, 3, 255, 59, 29, 5, 255, 57, 27, 3, 255, 53, 28, 4, 255, 47, 25, 2, 255, 57, 26, 7, 255, 56, 27, 5, 255, 42, 25, 1, 255, 46, 25, 4, 255, 53, 29, 4, 255, 55, 29, 1, 255, 55, 23, 3, 255, 56, 28, 5, 255, 55, 27, 3, 255, 57, 35, 6, 255, 53, 31, 3, 255, 55, 31, 5, 255, 52, 28, 0, 255, 58, 28, 4, 255, 54, 25, 8, 255, 53, 25, 4, 255, 53, 29, 1, 255, 53, 32, 5, 255, 52, 31, 8, 255, 50, 28, 7, 255, 55, 30, 6, 255, 45, 28, 3, 255, 63, 32, 6, 255, 58, 36, 6, 255, 59, 30, 10, 255, 57, 35, 7, 255, 48, 34, 6, 255, 54, 36, 14, 255, 59, 38, 11, 255, 58, 42, 9, 255, 59, 46, 11, 255, 61, 46, 16, 255, 62, 46, 17, 255, 64, 47, 15, 255, 68, 48, 16, 255, 60, 56, 20, 255, 56, 57, 23, 255, 62, 56, 27, 255, 57, 58, 36, 255, 63, 60, 42, 255, 68, 68, 26, 255, 65, 67, 28, 255, 65, 67, 37, 255, 67, 70, 43, 255, 71, 76, 42, 255, 71, 75, 49, 255, 70, 73, 52, 255, 70, 77, 58, 255, 77, 81, 62, 255, 75, 82, 58, 255, 72, 84, 61, 255, 80, 91, 66, 255, 81, 94, 68, 255, 82, 96, 70, 255, 85, 100, 74, 255, 87, 103, 77, 255, 89, 107, 80, 255, 92, 112, 84, 255, 95, 115, 87, 255, 95, 118, 89, 255, 99, 122, 94, 255, 99, 122, 94, 255, 99, 124, 95, 255, 101, 130, 99, 255, 97, 130, 98, 255, 102, 132, 101, 255, 102, 134, 98, 255, 100, 132, 95, 255, 102, 133, 99, 255, 104, 132, 103, 255, 102, 128, 102, 255, 105, 132, 98, 255, 104, 131, 95, 255, 100, 126, 89, 255, 98, 124, 86, 255, 99, 124, 85, 255, 99, 121, 83, 255, 98, 117, 81, 255, 97, 115, 73, 255, 97, 117, 71, 255, 93, 107, 76, 255, 93, 102, 79, 255, 93, 103, 72, 255, 91, 103, 58, 255, 90, 98, 57, 255, 86, 92, 56, 255, 87, 90, 57, 255, 91, 90, 42, 255, 92, 88, 35, 255, 92, 85, 45, 255, 83, 81, 36, 255, 84, 80, 38, 255, 90, 80, 35, 255, 88, 75, 29, 255, 87, 76, 22, 255, 88, 69, 30, 255, 91, 66, 19, 255, 85, 65, 22, 255, 78, 66, 15, 255, 79, 62, 19, 255, 82, 62, 7, 255, 83, 63, 8, 255, 85, 61, 8, 255, 79, 55, 12, 255, 84, 56, 12, 255, 87, 52, 15, 255, 80, 54, 9, 255, 73, 54, 3, 255, 97, 56, 15, 255, 113, 52, 9, 255, 107, 54, 5, 255, 85, 46, 6, 255, 76, 43, 8, 255, 79, 44, 10, 255, 82, 44, 8, 255, 81, 43, 3, 255, 79, 41, 7, 255, 75, 39, 7, 255, 77, 40, 10, 255, 74, 39, 9, 255, 75, 40, 4, 255, 76, 44, 4, 255, 79, 41, 7, 255, 77, 36, 8, 255, 79, 35, 4, 255, 76, 33, 1, 255, 77, 34, 5, 255, 85, 35, 7, 255, 81, 33, 3, 255, 78, 35, 2, 255, 83, 38, 5, 255, 81, 35, 2, 255, 78, 31, 2, 255, 76, 30, 3, 255, 74, 32, 5, 255, 73, 32, 5, 255, 94, 37, 6, 255, 105, 36, 0, 255, 96, 34, 8, 255, 79, 27, 8, 255, 86, 32, 6, 255, 89, 31, 3, 255, 81, 30, 1, 255, 82, 32, 1, 255, 84, 33, 1, 255, 83, 32, 2, 255, 80, 29, 1, 255, 80, 32, 4, 255, 79, 30, 5, 255, 79, 29, 0, 255, 81, 30, 1, 255, 82, 29, 4, 255, 80, 27, 3, 255, 76, 28, 0, 255, 83, 32, 3, 255, 91, 33, 3, 255, 94, 36, 0, 255, 82, 31, 0, 255, 72, 29, 3, 255, 71, 29, 7, 255, 74, 26, 4, 255, 76, 27, 3, 255, 73, 31, 6, 255, 75, 30, 3, 255, 74, 27, 2, 255, 76, 25, 7, 255, 69, 28, 2, 255, 71, 25, 2, 255, 76, 25, 4, 255, 76, 25, 3, 255, 71, 22, 2, 255, 70, 24, 5, 255, 64, 21, 4, 255, 64, 21, 4, 255, 66, 22, 5, 255, 64, 21, 4, 255, 65, 20, 1, 255, 71, 24, 2, 255, 68, 24, 2, 255, 65, 26, 3, 255, 67, 21, 2, 255, 65, 24, 2, 255, 67, 23, 3, 255, 57, 23, 2, 255, 69, 24, 2, 255, 91, 29, 6, 255, 95, 28, 2, 255, 97, 30, 4, 255, 87, 21, 1, 255, 94, 24, 3, 255, 84, 21, 3, 255, 67, 21, 4, 255, 57, 19, 3, 255, 61, 23, 0, 255, 70, 25, 2, 255, 79, 26, 5, 255, 70, 20, 2, 255, 58, 19, 1, 255, 62, 20, 2, 255, 84, 25, 3, 255, 94, 25, 4, 255, 89, 22, 1, 255, 92, 23, 1, 255, 92, 24, 3, 255, 92, 24, 6, 255, 84, 24, 2, 255, 92, 27, 0, 255, 94, 29, 1, 255, 88, 26, 1, 255, 85, 25, 4, 255, 86, 21, 2, 255, 93, 22, 2, 255, 91, 21, 2, 255, 88, 19, 2, 255, 83, 24, 3, 255, 85, 22, 3, 255, 73, 19, 3, 255, 59, 20, 4, 255, 61, 21, 8, 255, 60, 18, 2, 255, 58, 14, 0, 255, 60, 20, 1, 255, 50, 17, 1, 255, 41, 14, 4, 255, 44, 14, 5, 255, 50, 13, 5, 255, 57, 15, 6, 255, 56, 17, 4, 255, 61, 16, 2, 255, 65, 16, 2, 255, 57, 19, 1, 255, 63, 20, 4, 255, 67, 19, 4, 255, 67, 18, 4, 255, 67, 17, 3, 255, 71, 20, 5, 255, 70, 20, 6, 255, 68, 19, 2, 255, 72, 22, 3, 255, 73, 21, 3, 255, 69, 18, 2, 255, 65, 18, 2, 255, 64, 18, 2, 255, 63, 18, 2, 255, 63, 14, 1, 255, 64, 16, 2, 255, 64, 17, 3, 255, 62, 16, 1, 255, 64, 16, 2, 255, 67, 19, 4, 255, 66, 15, 2, 255, 68, 19, 3, 255, 67, 18, 1, 255, 69, 17, 0, 255, 69, 18, 1, 255, 66, 17, 2, 255, 70, 18, 4, 255, 60, 15, 1, 255, 52, 19, 2, 255, 55, 17, 2, 255, 61, 15, 3, 255, 54, 11, 0, 255, 57, 13, 4, 255, 66, 12, 2, 255, 70, 18, 3, 255, 56, 13, 0, 255, 49, 12, 5, 255, 48, 10, 3, 255, 42, 8, 0, 255, 41, 11, 2, 255, 43, 11, 1, 255, 42, 13, 3, 255, 42, 12, 3, 255, 43, 11, 3, 255, 40, 9, 2, 255, 36, 9, 2, 255, 32, 12, 3, 255, 30, 10, 3, 255, 27, 8, 2, 255, 30, 11, 5, 255, 29, 10, 3, 255, 28, 11, 2, 255, 31, 12, 3, 255, 42, 11, 5, 255, 43, 8, 1, 255, 38, 11, 0, 255, 50, 14, 6, 255, 57, 14, 5, 255, 49, 13, 1, 255, 38, 10, 5, 255, 33, 9, 2, 255, 30, 7, 1, 255, 12, 3, 2, 255, 11, 3, 1, 255, 11, 3, 1, 255, 11, 3, 1, 255, 11, 3, 1, 255, 10, 3, 0, 255, 12, 3, 1, 255, 12, 3, 1, 255, 11, 3, 0, 255, 10, 1, 0, 255, 14, 3, 2, 255, 16, 5, 3, 255, 16, 6, 4, 255, 17, 7, 3, 255, 17, 7, 4, 255, 16, 6, 4, 255, 16, 6, 4, 255, 15, 4, 2, 255, 16, 5, 3, 255, 15, 4, 2, 255, 16, 6, 4, 255, 17, 8, 3, 255, 18, 7, 3, 255, 17, 8, 3, 255, 11, 7, 1, 255, 13, 7, 0, 255, 19, 8, 3, 255, 17, 8, 3, 255, 16, 8, 2, 255, 18, 10, 4, 255, 19, 9, 3, 255, 19, 8, 2, 255, 20, 11, 4, 255, 18, 9, 0, 255, 22, 10, 1, 255, 23, 10, 2, 255, 21, 10, 4, 255, 18, 9, 3, 255, 23, 16, 6, 255, 21, 16, 3, 255, 19, 13, 1, 255, 22, 12, 2, 255, 28, 14, 6, 255, 29, 13, 5, 255, 26, 14, 4, 255, 24, 12, 3, 255, 32, 13, 6, 255, 28, 13, 3, 255, 28, 12, 1, 255, 31, 12, 1, 255, 30, 12, 0, 255, 30, 16, 3, 255, 30, 17, 3, 255, 27, 16, 5, 255, 25, 16, 5, 255, 28, 19, 5, 255, 29, 15, 3, 255, 33, 16, 2, 255, 35, 20, 4, 255, 36, 17, 6, 255, 37, 17, 3, 255, 34, 21, 1, 255, 37, 17, 1, 255, 37, 20, 7, 255, 39, 18, 5, 255, 45, 17, 5, 255, 33, 22, 5, 255, 40, 21, 4, 255, 40, 20, 2, 255, 33, 19, 2, 255, 38, 18, 2, 255, 45, 24, 5, 255, 42, 23, 2, 255, 38, 23, 1, 255, 45, 22, 4, 255, 50, 21, 3, 255, 48, 21, 1, 255, 46, 22, 5, 255, 43, 23, 2, 255, 38, 20, 2, 255, 41, 20, 3, 255, 45, 24, 0, 255, 43, 21, 6, 255, 46, 18, 5, 255, 45, 22, 4, 255, 39, 22, 0, 255, 45, 25, 5, 255, 44, 22, 6, 255, 41, 20, 4, 255, 47, 26, 9, 255, 47, 24, 3, 255, 40, 23, 0, 255, 43, 22, 2, 255, 47, 20, 1, 255, 52, 23, 3, 255, 47, 24, 0, 255, 46, 20, 3, 255, 53, 29, 4, 255, 52, 25, 3, 255, 52, 26, 5, 255, 48, 27, 0, 255, 55, 28, 4, 255, 52, 28, 7, 255, 50, 26, 3, 255, 51, 26, 1, 255, 54, 24, 0, 255, 52, 25, 2, 255, 46, 26, 2, 255, 57, 23, 7, 255, 54, 27, 6, 255, 52, 25, 4, 255, 52, 25, 8, 255, 48, 25, 3, 255, 64, 29, 4, 255, 58, 27, 4, 255, 55, 29, 2, 255, 58, 27, 0, 255, 56, 27, 2, 255, 53, 26, 3, 255, 52, 28, 4, 255, 53, 29, 3, 255, 58, 31, 4, 255, 54, 26, 3, 255, 45, 21, 4, 255, 48, 26, 6, 255, 48, 25, 6, 255, 56, 28, 9, 255, 61, 31, 3, 255, 55, 31, 6, 255, 46, 30, 4, 255, 62, 27, 5, 255, 52, 29, 5, 255, 51, 25, 8, 255, 53, 30, 10, 255, 46, 35, 7, 255, 56, 38, 8, 255, 62, 39, 9, 255, 57, 42, 9, 255, 55, 42, 6, 255, 63, 47, 11, 255, 60, 46, 10, 255, 65, 52, 13, 255, 67, 51, 24, 255, 58, 52, 22, 255, 59, 54, 29, 255, 67, 61, 28, 255, 63, 65, 32, 255, 60, 59, 39, 255, 67, 68, 28, 255, 69, 69, 25, 255, 70, 70, 35, 255, 71, 74, 39, 255, 70, 77, 43, 255, 71, 75, 53, 255, 72, 79, 42, 255, 73, 84, 49, 255, 76, 80, 65, 255, 76, 86, 58, 255, 74, 88, 60, 255, 82, 93, 69, 255, 80, 96, 70, 255, 84, 98, 74, 255, 88, 102, 77, 255, 89, 104, 78, 255, 92, 111, 82, 255, 91, 114, 82, 255, 94, 117, 85, 255, 100, 123, 92, 255, 98, 121, 94, 255, 99, 124, 97, 255, 103, 131, 102, 255, 99, 130, 99, 255, 99, 133, 100, 255, 98, 133, 100, 255, 100, 134, 99, 255, 103, 135, 98, 255, 104, 136, 101, 255, 104, 135, 103, 255, 104, 130, 102, 255, 104, 130, 100, 255, 104, 130, 99, 255, 102, 126, 94, 255, 102, 125, 92, 255, 100, 121, 88, 255, 100, 118, 84, 255, 101, 119, 83, 255, 97, 120, 73, 255, 94, 113, 68, 255, 92, 108, 70, 255, 93, 105, 72, 255, 92, 101, 70, 255, 88, 100, 51, 255, 92, 101, 55, 255, 86, 94, 49, 255, 86, 87, 54, 255, 89, 85, 50, 255, 90, 86, 37, 255, 91, 82, 36, 255, 88, 83, 24, 255, 86, 80, 23, 255, 87, 79, 33, 255, 85, 72, 31, 255, 84, 69, 33, 255, 85, 67, 18, 255, 90, 69, 15, 255, 86, 66, 17, 255, 85, 66, 18, 255, 83, 64, 10, 255, 82, 58, 17, 255, 84, 58, 8, 255, 83, 52, 17, 255, 82, 53, 20, 255, 76, 54, 9, 255, 80, 58, 9, 255, 80, 55, 11, 255, 74, 48, 7, 255, 90, 54, 13, 255, 102, 54, 8, 255, 95, 50, 3, 255, 80, 44, 4, 255, 71, 38, 4, 255, 75, 43, 10, 255, 76, 42, 7, 255, 78, 44, 7, 255, 78, 43, 6, 255, 75, 42, 6, 255, 76, 42, 6, 255, 73, 37, 5, 255, 75, 37, 5, 255, 75, 34, 7, 255, 79, 38, 5, 255, 75, 38, 1, 255, 77, 35, 2, 255, 73, 32, 6, 255, 69, 30, 7, 255, 83, 36, 5, 255, 79, 36, 0, 255, 74, 34, 0, 255, 79, 37, 2, 255, 79, 34, 1, 255, 79, 33, 2, 255, 79, 34, 5, 255, 73, 31, 4, 255, 86, 41, 8, 255, 98, 43, 3, 255, 107, 41, 5, 255, 109, 41, 4, 255, 99, 37, 3, 255, 86, 30, 2, 255, 84, 34, 4, 255, 80, 33, 4, 255, 82, 35, 3, 255, 81, 30, 2, 255, 82, 31, 4, 255, 80, 31, 5, 255, 74, 29, 2, 255, 76, 29, 4, 255, 79, 32, 2, 255, 82, 32, 0, 255, 82, 30, 2, 255, 82, 32, 5, 255, 75, 31, 4, 255, 73, 29, 1, 255, 81, 31, 2, 255, 92, 37, 7, 255, 89, 35, 6, 255, 76, 26, 3, 255, 73, 28, 3, 255, 76, 28, 3, 255, 74, 25, 6, 255, 68, 26, 3, 255, 73, 27, 3, 255, 72, 27, 3, 255, 75, 23, 3, 255, 76, 26, 1, 255, 71, 24, 0, 255, 72, 21, 1, 255, 71, 20, 1, 255, 73, 24, 3, 255, 70, 23, 3, 255, 69, 24, 3, 255, 66, 22, 4, 255, 63, 23, 5, 255, 61, 24, 4, 255, 67, 25, 3, 255, 75, 27, 4, 255, 67, 23, 2, 255, 58, 24, 4, 255, 62, 26, 2, 255, 68, 23, 3, 255, 68, 20, 3, 255, 69, 23, 5, 255, 64, 24, 1, 255, 73, 26, 2, 255, 86, 25, 4, 255, 100, 27, 6, 255, 96, 27, 3, 255, 96, 27, 3, 255, 96, 24, 4, 255, 77, 24, 7, 255, 60, 20, 2, 255, 72, 27, 3, 255, 82, 27, 3, 255, 86, 28, 4, 255, 77, 27, 7, 255, 61, 21, 1, 255, 64, 20, 2, 255, 70, 21, 2, 255, 83, 25, 5, 255, 86, 23, 1, 255, 91, 27, 2, 255, 92, 27, 4, 255, 90, 28, 5, 255, 76, 24, 2, 255, 74, 24, 6, 255, 84, 26, 4, 255, 86, 24, 0, 255, 93, 28, 2, 255, 91, 27, 3, 255, 88, 25, 4, 255, 96, 27, 2, 255, 94, 17, 2, 255, 81, 21, 4, 255, 79, 23, 7, 255, 57, 16, 2, 255, 55, 17, 2, 255, 56, 16, 4, 255, 58, 16, 2, 255, 55, 18, 5, 255, 46, 19, 1, 255, 50, 18, 1, 255, 46, 17, 9, 255, 43, 13, 4, 255, 47, 16, 6, 255, 49, 17, 3, 255, 52, 21, 3, 255, 58, 18, 2, 255, 60, 18, 3, 255, 54, 19, 1, 255, 51, 18, 1, 255, 57, 17, 2, 255, 61, 19, 3, 255, 62, 18, 2, 255, 69, 17, 3, 255, 72, 16, 3, 255, 66, 18, 2, 255, 65, 21, 2, 255, 69, 23, 5, 255, 65, 18, 2, 255, 62, 16, 2, 255, 63, 18, 2, 255, 65, 20, 5, 255, 71, 19, 6, 255, 66, 17, 3, 255, 63, 15, 1, 255, 63, 17, 2, 255, 64, 17, 2, 255, 64, 15, 2, 255, 64, 14, 1, 255, 66, 17, 3, 255, 66, 14, 1, 255, 68, 14, 2, 255, 69, 17, 6, 255, 66, 17, 6, 255, 60, 14, 3, 255, 59, 17, 1, 255, 57, 17, 3, 255, 58, 14, 3, 255, 61, 15, 3, 255, 57, 14, 2, 255, 52, 13, 2, 255, 50, 13, 0, 255, 53, 18, 1, 255, 44, 14, 0, 255, 43, 11, 5, 255, 49, 12, 5, 255, 44, 12, 3, 255, 38, 12, 4, 255, 43, 11, 2, 255, 45, 12, 2, 255, 39, 10, 3, 255, 31, 6, 2, 255, 31, 6, 1, 255, 39, 12, 5, 255, 39, 10, 5, 255, 44, 11, 7, 255, 37, 8, 4, 255, 29, 12, 5, 255, 27, 13, 2, 255, 36, 11, 5, 255, 46, 12, 4, 255, 49, 12, 3, 255, 49, 12, 2, 255, 49, 11, 2, 255, 53, 12, 3, 255, 61, 13, 2, 255, 62, 13, 1, 255, 45, 10, 5, 255, 38, 8, 2, 255, 37, 8, 4, 255, 7, 0, 0, 255, 8, 1, 1, 255, 10, 3, 1, 255, 10, 3, 1, 255, 11, 3, 1, 255, 11, 3, 1, 255, 12, 2, 1, 255, 9, 4, 1, 255, 11, 7, 4, 255, 12, 5, 3, 255, 13, 3, 1, 255, 13, 3, 1, 255, 14, 5, 1, 255, 15, 4, 2, 255, 14, 3, 2, 255, 13, 3, 1, 255, 16, 6, 4, 255, 15, 5, 3, 255, 17, 6, 4, 255, 16, 7, 5, 255, 14, 5, 3, 255, 13, 4, 1, 255, 15, 6, 1, 255, 19, 8, 4, 255, 16, 8, 2, 255, 15, 7, 1, 255, 18, 8, 4, 255, 17, 9, 3, 255, 17, 10, 4, 255, 19, 11, 5, 255, 17, 7, 1, 255, 18, 7, 1, 255, 16, 7, 0, 255, 21, 11, 1, 255, 22, 12, 3, 255, 19, 8, 1, 255, 21, 9, 6, 255, 18, 9, 3, 255, 20, 11, 1, 255, 20, 11, 0, 255, 19, 11, 1, 255, 23, 12, 4, 255, 25, 11, 4, 255, 22, 9, 1, 255, 20, 9, 0, 255, 21, 11, 2, 255, 34, 16, 7, 255, 28, 16, 4, 255, 29, 18, 6, 255, 34, 18, 7, 255, 28, 13, 3, 255, 32, 15, 5, 255, 34, 18, 3, 255, 33, 20, 2, 255, 28, 17, 5, 255, 24, 14, 5, 255, 26, 16, 2, 255, 33, 19, 4, 255, 36, 18, 4, 255, 36, 16, 2, 255, 33, 15, 1, 255, 33, 20, 3, 255, 37, 21, 5, 255, 36, 20, 3, 255, 37, 21, 2, 255, 41, 18, 5, 255, 36, 22, 3, 255, 44, 23, 6, 255, 50, 22, 8, 255, 46, 21, 6, 255, 47, 21, 7, 255, 48, 22, 5, 255, 43, 19, 2, 255, 40, 24, 4, 255, 46, 26, 7, 255, 45, 21, 2, 255, 43, 20, 1, 255, 46, 24, 5, 255, 42, 21, 1, 255, 41, 18, 2, 255, 46, 22, 5, 255, 50, 24, 3, 255, 47, 21, 6, 255, 46, 20, 3, 255, 46, 25, 3, 255, 40, 23, 0, 255, 40, 20, 0, 255, 43, 23, 5, 255, 39, 22, 4, 255, 47, 24, 5, 255, 51, 21, 9, 255, 45, 22, 6, 255, 56, 23, 7, 255, 32, 21, 4, 255, 47, 21, 3, 255, 42, 22, 1, 255, 44, 22, 4, 255, 54, 29, 4, 255, 48, 27, 3, 255, 46, 27, 4, 255, 52, 30, 4, 255, 49, 27, 3, 255, 50, 28, 5, 255, 53, 28, 4, 255, 49, 23, 0, 255, 59, 24, 2, 255, 60, 26, 6, 255, 52, 29, 7, 255, 50, 23, 2, 255, 54, 29, 1, 255, 59, 30, 3, 255, 62, 25, 6, 255, 58, 26, 4, 255, 61, 28, 1, 255, 57, 30, 3, 255, 51, 27, 6, 255, 56, 28, 6, 255, 57, 25, 2, 255, 54, 23, 2, 255, 54, 28, 6, 255, 53, 29, 9, 255, 45, 22, 2, 255, 51, 25, 5, 255, 56, 26, 7, 255, 58, 27, 2, 255, 57, 28, 3, 255, 52, 24, 3, 255, 56, 29, 5, 255, 48, 25, 8, 255, 57, 28, 5, 255, 61, 26, 7, 255, 51, 30, 8, 255, 49, 29, 2, 255, 52, 33, 6, 255, 52, 35, 10, 255, 55, 33, 9, 255, 63, 38, 10, 255, 58, 40, 5, 255, 62, 43, 11, 255, 62, 42, 16, 255, 61, 45, 18, 255, 60, 49, 12, 255, 58, 52, 18, 255, 62, 55, 31, 255, 63, 54, 30, 255, 67, 61, 21, 255, 66, 64, 20, 255, 60, 61, 24, 255, 63, 63, 37, 255, 68, 67, 42, 255, 71, 73, 37, 255, 69, 72, 45, 255, 68, 75, 40, 255, 71, 77, 49, 255, 73, 82, 45, 255, 73, 86, 52, 255, 75, 83, 61, 255, 77, 90, 60, 255, 75, 91, 60, 255, 81, 94, 68, 255, 79, 97, 73, 255, 84, 100, 77, 255, 88, 104, 81, 255, 94, 112, 86, 255, 93, 114, 86, 255, 89, 114, 84, 255, 95, 122, 90, 255, 100, 125, 95, 255, 102, 127, 98, 255, 100, 128, 101, 255, 100, 131, 103, 255, 99, 132, 102, 255, 100, 135, 103, 255, 98, 136, 102, 255, 101, 135, 102, 255, 105, 136, 103, 255, 101, 136, 98, 255, 100, 134, 97, 255, 106, 135, 102, 255, 106, 133, 99, 255, 103, 130, 95, 255, 100, 125, 92, 255, 104, 126, 92, 255, 103, 123, 87, 255, 102, 120, 83, 255, 97, 117, 78, 255, 93, 117, 79, 255, 91, 109, 79, 255, 91, 108, 65, 255, 88, 106, 59, 255, 89, 101, 68, 255, 88, 98, 56, 255, 85, 93, 56, 255, 86, 92, 48, 255, 85, 89, 44, 255, 84, 83, 46, 255, 86, 83, 39, 255, 89, 83, 25, 255, 90, 78, 26, 255, 87, 76, 19, 255, 84, 76, 22, 255, 79, 68, 24, 255, 84, 68, 27, 255, 86, 70, 15, 255, 83, 68, 15, 255, 81, 60, 24, 255, 84, 60, 12, 255, 84, 63, 12, 255, 71, 52, 21, 255, 77, 58, 18, 255, 82, 56, 12, 255, 79, 49, 17, 255, 75, 51, 11, 255, 80, 52, 6, 255, 80, 47, 7, 255, 76, 48, 10, 255, 78, 51, 11, 255, 81, 48, 8, 255, 81, 45, 7, 255, 80, 44, 7, 255, 82, 44, 9, 255, 80, 40, 8, 255, 79, 40, 9, 255, 78, 39, 7, 255, 73, 37, 7, 255, 72, 36, 3, 255, 77, 43, 3, 255, 76, 40, 2, 255, 80, 38, 4, 255, 82, 33, 10, 255, 79, 33, 4, 255, 78, 38, 3, 255, 79, 35, 3, 255, 76, 33, 9, 255, 67, 27, 8, 255, 78, 33, 10, 255, 78, 35, 3, 255, 74, 32, 5, 255, 76, 32, 7, 255, 77, 32, 7, 255, 76, 30, 5, 255, 77, 30, 6, 255, 74, 28, 5, 255, 76, 28, 1, 255, 89, 36, 5, 255, 98, 38, 5, 255, 100, 34, 2, 255, 100, 33, 1, 255, 87, 29, 0, 255, 80, 29, 4, 255, 77, 31, 3, 255, 78, 32, 2, 255, 82, 32, 5, 255, 81, 29, 7, 255, 76, 27, 4, 255, 77, 30, 5, 255, 83, 30, 2, 255, 79, 31, 2, 255, 72, 31, 3, 255, 73, 31, 6, 255, 76, 30, 4, 255, 80, 31, 3, 255, 80, 33, 1, 255, 81, 32, 1, 255, 83, 29, 4, 255, 79, 27, 4, 255, 75, 28, 3, 255, 74, 31, 4, 255, 74, 28, 3, 255, 78, 29, 5, 255, 80, 29, 4, 255, 79, 27, 5, 255, 66, 25, 4, 255, 68, 24, 2, 255, 73, 25, 6, 255, 71, 25, 2, 255, 73, 26, 3, 255, 71, 24, 3, 255, 70, 23, 0, 255, 70, 22, 0, 255, 72, 25, 1, 255, 69, 23, 1, 255, 65, 21, 2, 255, 62, 21, 0, 255, 68, 23, 2, 255, 74, 24, 5, 255, 70, 22, 6, 255, 65, 24, 7, 255, 64, 24, 2, 255, 71, 22, 4, 255, 63, 23, 5, 255, 57, 23, 3, 255, 60, 22, 2, 255, 65, 21, 3, 255, 60, 20, 1, 255, 74, 23, 4, 255, 87, 25, 3, 255, 98, 27, 7, 255, 87, 28, 7, 255, 62, 24, 2, 255, 71, 20, 5, 255, 78, 24, 4, 255, 90, 23, 1, 255, 87, 27, 2, 255, 75, 24, 4, 255, 68, 19, 5, 255, 66, 23, 7, 255, 76, 25, 5, 255, 84, 23, 2, 255, 90, 25, 4, 255, 79, 21, 3, 255, 76, 20, 4, 255, 72, 21, 5, 255, 61, 17, 0, 255, 57, 19, 3, 255, 55, 17, 5, 255, 64, 19, 5, 255, 78, 23, 2, 255, 80, 24, 0, 255, 79, 26, 4, 255, 90, 23, 7, 255, 89, 22, 8, 255, 71, 18, 0, 255, 85, 25, 8, 255, 61, 14, 4, 255, 43, 19, 5, 255, 50, 22, 4, 255, 61, 15, 0, 255, 66, 20, 6, 255, 63, 19, 6, 255, 68, 16, 2, 255, 64, 17, 4, 255, 51, 15, 2, 255, 46, 17, 5, 255, 40, 15, 1, 255, 47, 15, 1, 255, 61, 16, 5, 255, 51, 14, 2, 255, 53, 12, 3, 255, 56, 18, 4, 255, 57, 17, 3, 255, 58, 18, 3, 255, 60, 20, 3, 255, 64, 15, 1, 255, 68, 17, 3, 255, 69, 18, 3, 255, 72, 16, 0, 255, 73, 17, 4, 255, 69, 16, 2, 255, 67, 19, 4, 255, 68, 20, 4, 255, 68, 18, 2, 255, 73, 19, 5, 255, 67, 16, 2, 255, 62, 14, 0, 255, 62, 16, 2, 255, 64, 17, 3, 255, 65, 17, 3, 255, 61, 15, 1, 255, 63, 16, 0, 255, 67, 16, 0, 255, 68, 17, 2, 255, 66, 15, 4, 255, 59, 12, 2, 255, 57, 15, 1, 255, 61, 17, 2, 255, 63, 13, 3, 255, 51, 10, 1, 255, 48, 14, 0, 255, 51, 13, 1, 255, 54, 15, 5, 255, 46, 15, 7, 255, 43, 9, 0, 255, 44, 10, 2, 255, 39, 11, 4, 255, 40, 9, 1, 255, 43, 11, 1, 255, 40, 10, 2, 255, 41, 9, 1, 255, 43, 10, 3, 255, 37, 8, 3, 255, 32, 9, 5, 255, 33, 11, 5, 255, 36, 11, 5, 255, 39, 13, 7, 255, 33, 15, 4, 255, 26, 11, 1, 255, 35, 10, 2, 255, 39, 11, 3, 255, 32, 9, 2, 255, 37, 12, 1, 255, 52, 14, 1, 255, 60, 13, 2, 255, 61, 11, 2, 255, 61, 11, 4, 255, 58, 11, 2, 255, 51, 12, 2, 255, 38, 9, 1, 255, 33, 7, 0, 255, 35, 9, 2, 255, 8, 2, 2, 255, 7, 2, 2, 255, 7, 2, 1, 255, 7, 3, 0, 255, 9, 2, 0, 255, 10, 1, 0, 255, 11, 2, 1, 255, 11, 4, 2, 255, 12, 5, 3, 255, 14, 4, 3, 255, 14, 3, 1, 255, 15, 6, 3, 255, 15, 8, 2, 255, 14, 5, 3, 255, 13, 4, 1, 255, 12, 5, 2, 255, 13, 6, 3, 255, 14, 4, 2, 255, 15, 4, 2, 255, 12, 7, 3, 255, 11, 7, 2, 255, 12, 6, 3, 255, 16, 6, 4, 255, 21, 6, 3, 255, 19, 6, 3, 255, 19, 8, 3, 255, 18, 11, 5, 255, 15, 8, 2, 255, 16, 8, 3, 255, 18, 9, 4, 255, 14, 6, 0, 255, 19, 9, 3, 255, 17, 7, 1, 255, 19, 10, 1, 255, 21, 11, 3, 255, 19, 9, 4, 255, 22, 12, 5, 255, 19, 9, 1, 255, 20, 9, 2, 255, 19, 8, 2, 255, 20, 11, 3, 255, 24, 14, 5, 255, 26, 12, 4, 255, 24, 12, 2, 255, 24, 16, 4, 255, 20, 14, 3, 255, 26, 13, 3, 255, 24, 13, 1, 255, 24, 16, 3, 255, 23, 12, 2, 255, 22, 13, 5, 255, 31, 13, 2, 255, 39, 18, 2, 255, 38, 20, 2, 255, 31, 14, 0, 255, 31, 17, 3, 255, 32, 17, 1, 255, 31, 15, 2, 255, 35, 16, 4, 255, 40, 20, 2, 255, 35, 17, 2, 255, 29, 16, 5, 255, 30, 19, 4, 255, 36, 21, 0, 255, 45, 23, 2, 255, 39, 14, 4, 255, 39, 20, 2, 255, 42, 24, 7, 255, 43, 18, 4, 255, 41, 21, 4, 255, 38, 20, 1, 255, 47, 16, 0, 255, 50, 16, 2, 255, 43, 23, 6, 255, 36, 23, 4, 255, 42, 21, 2, 255, 48, 24, 3, 255, 46, 23, 4, 255, 45, 20, 5, 255, 47, 20, 4, 255, 50, 23, 4, 255, 48, 23, 3, 255, 45, 25, 3, 255, 47, 25, 4, 255, 45, 23, 2, 255, 47, 26, 5, 255, 42, 23, 5, 255, 42, 25, 6, 255, 41, 25, 4, 255, 45, 25, 1, 255, 46, 23, 5, 255, 39, 24, 3, 255, 51, 29, 3, 255, 50, 22, 4, 255, 50, 25, 5, 255, 48, 24, 1, 255, 51, 26, 6, 255, 49, 27, 4, 255, 45, 25, 1, 255, 47, 27, 5, 255, 48, 27, 6, 255, 48, 28, 5, 255, 51, 24, 0, 255, 57, 25, 4, 255, 52, 23, 2, 255, 49, 24, 4, 255, 48, 24, 3, 255, 56, 26, 6, 255, 55, 26, 3, 255, 50, 31, 0, 255, 54, 31, 0, 255, 62, 29, 5, 255, 60, 27, 5, 255, 55, 31, 1, 255, 55, 29, 3, 255, 52, 25, 6, 255, 49, 24, 2, 255, 58, 28, 4, 255, 54, 27, 4, 255, 52, 29, 6, 255, 51, 25, 6, 255, 44, 26, 5, 255, 43, 27, 4, 255, 50, 26, 4, 255, 59, 27, 4, 255, 59, 26, 3, 255, 59, 28, 4, 255, 55, 28, 4, 255, 52, 29, 6, 255, 57, 31, 2, 255, 58, 28, 3, 255, 54, 32, 9, 255, 49, 29, 3, 255, 53, 32, 6, 255, 60, 31, 17, 255, 57, 31, 12, 255, 60, 38, 8, 255, 65, 41, 8, 255, 65, 41, 11, 255, 61, 42, 17, 255, 58, 42, 23, 255, 60, 46, 20, 255, 61, 57, 11, 255, 62, 60, 11, 255, 64, 57, 23, 255, 67, 58, 24, 255, 64, 57, 35, 255, 61, 61, 32, 255, 64, 68, 27, 255, 65, 65, 46, 255, 64, 64, 52, 255, 68, 71, 52, 255, 73, 76, 55, 255, 71, 78, 47, 255, 70, 80, 57, 255, 72, 84, 66, 255, 77, 86, 59, 255, 77, 89, 66, 255, 74, 93, 67, 255, 80, 96, 71, 255, 82, 101, 80, 255, 84, 103, 82, 255, 89, 108, 87, 255, 88, 109, 86, 255, 94, 119, 92, 255, 96, 122, 93, 255, 93, 123, 93, 255, 96, 125, 96, 255, 99, 128, 99, 255, 98, 131, 102, 255, 96, 133, 103, 255, 100, 138, 107, 255, 101, 138, 106, 255, 101, 140, 107, 255, 104, 135, 106, 255, 106, 136, 106, 255, 101, 137, 100, 255, 101, 137, 99, 255, 101, 135, 101, 255, 105, 132, 97, 255, 103, 131, 95, 255, 101, 129, 94, 255, 101, 125, 90, 255, 101, 121, 85, 255, 100, 121, 82, 255, 98, 120, 80, 255, 92, 114, 82, 255, 90, 106, 79, 255, 93, 108, 72, 255, 89, 105, 60, 255, 87, 99, 59, 255, 89, 96, 62, 255, 89, 93, 51, 255, 89, 88, 54, 255, 87, 88, 49, 255, 85, 87, 39, 255, 85, 85, 36, 255, 85, 79, 37, 255, 90, 73, 42, 255, 89, 74, 29, 255, 85, 75, 24, 255, 83, 70, 22, 255, 83, 66, 14, 255, 84, 67, 18, 255, 80, 66, 16, 255, 82, 60, 19, 255, 84, 56, 14, 255, 82, 56, 25, 255, 78, 57, 17, 255, 83, 55, 19, 255, 82, 53, 10, 255, 72, 46, 9, 255, 78, 47, 14, 255, 84, 50, 9, 255, 76, 47, 5, 255, 69, 48, 8, 255, 71, 47, 8, 255, 74, 40, 8, 255, 77, 44, 7, 255, 80, 45, 8, 255, 77, 39, 5, 255, 80, 38, 9, 255, 82, 38, 9, 255, 80, 36, 4, 255, 74, 35, 11, 255, 74, 37, 10, 255, 69, 35, 2, 255, 74, 40, 4, 255, 77, 38, 3, 255, 78, 33, 4, 255, 82, 39, 6, 255, 75, 38, 2, 255, 76, 33, 0, 255, 80, 36, 5, 255, 76, 34, 4, 255, 76, 31, 2, 255, 80, 35, 5, 255, 78, 34, 3, 255, 74, 32, 3, 255, 74, 32, 3, 255, 75, 32, 2, 255, 77, 33, 3, 255, 76, 30, 3, 255, 68, 27, 3, 255, 74, 29, 6, 255, 79, 31, 0, 255, 80, 30, 6, 255, 78, 29, 7, 255, 80, 32, 3, 255, 79, 28, 5, 255, 80, 29, 3, 255, 81, 34, 4, 255, 77, 30, 3, 255, 76, 26, 5, 255, 78, 27, 6, 255, 78, 30, 5, 255, 76, 30, 5, 255, 75, 30, 3, 255, 74, 30, 0, 255, 79, 31, 2, 255, 77, 28, 2, 255, 75, 31, 7, 255, 77, 30, 3, 255, 80, 28, 0, 255, 80, 28, 5, 255, 73, 25, 2, 255, 73, 29, 4, 255, 72, 29, 5, 255, 69, 26, 4, 255, 70, 29, 6, 255, 77, 31, 5, 255, 74, 25, 4, 255, 64, 23, 0, 255, 71, 26, 1, 255, 76, 25, 2, 255, 73, 25, 2, 255, 70, 24, 2, 255, 73, 28, 7, 255, 72, 27, 5, 255, 70, 25, 3, 255, 71, 24, 2, 255, 71, 24, 1, 255, 65, 22, 2, 255, 63, 23, 3, 255, 63, 24, 2, 255, 64, 23, 2, 255, 62, 21, 2, 255, 64, 21, 4, 255, 72, 23, 4, 255, 58, 19, 2, 255, 57, 20, 3, 255, 61, 23, 4, 255, 60, 22, 3, 255, 62, 20, 4, 255, 63, 18, 3, 255, 63, 19, 3, 255, 68, 22, 2, 255, 63, 22, 2, 255, 62, 19, 1, 255, 70, 19, 4, 255, 64, 22, 3, 255, 73, 21, 7, 255, 85, 26, 3, 255, 84, 26, 1, 255, 76, 21, 2, 255, 72, 15, 1, 255, 77, 23, 5, 255, 87, 29, 7, 255, 88, 26, 2, 255, 83, 23, 1, 255, 62, 20, 2, 255, 54, 15, 5, 255, 44, 14, 3, 255, 53, 17, 1, 255, 59, 18, 1, 255, 46, 17, 6, 255, 46, 19, 8, 255, 53, 17, 2, 255, 60, 15, 0, 255, 67, 17, 2, 255, 70, 18, 6, 255, 73, 20, 5, 255, 73, 19, 2, 255, 78, 18, 3, 255, 67, 17, 2, 255, 51, 19, 4, 255, 48, 13, 3, 255, 58, 14, 3, 255, 76, 21, 1, 255, 88, 23, 2, 255, 87, 26, 6, 255, 67, 19, 4, 255, 52, 15, 3, 255, 47, 15, 2, 255, 46, 16, 2, 255, 52, 19, 6, 255, 62, 13, 4, 255, 56, 14, 3, 255, 60, 17, 7, 255, 61, 16, 4, 255, 58, 16, 3, 255, 56, 16, 3, 255, 58, 19, 3, 255, 60, 18, 1, 255, 61, 18, 1, 255, 66, 20, 3, 255, 66, 18, 2, 255, 66, 18, 3, 255, 65, 17, 2, 255, 65, 17, 1, 255, 70, 18, 1, 255, 77, 17, 2, 255, 75, 18, 2, 255, 71, 18, 3, 255, 65, 16, 2, 255, 61, 15, 1, 255, 61, 15, 1, 255, 65, 16, 3, 255, 61, 17, 2, 255, 64, 18, 1, 255, 70, 18, 3, 255, 68, 21, 2, 255, 65, 16, 1, 255, 62, 14, 1, 255, 57, 17, 1, 255, 55, 16, 1, 255, 62, 15, 6, 255, 56, 12, 4, 255, 54, 15, 5, 255, 51, 15, 4, 255, 45, 15, 4, 255, 47, 11, 5, 255, 52, 10, 2, 255, 51, 13, 6, 255, 40, 11, 4, 255, 42, 11, 2, 255, 43, 12, 1, 255, 40, 10, 1, 255, 40, 10, 3, 255, 36, 6, 2, 255, 38, 9, 5, 255, 35, 10, 3, 255, 32, 9, 2, 255, 30, 9, 3, 255, 32, 13, 6, 255, 26, 5, 0, 255, 33, 8, 1, 255, 47, 13, 6, 255, 41, 6, 2, 255, 34, 3, 1, 255, 28, 10, 1, 255, 44, 13, 3, 255, 59, 11, 0, 255, 58, 12, 1, 255, 60, 12, 5, 255, 51, 11, 4, 255, 35, 12, 1, 255, 34, 9, 3, 255, 33, 11, 2, 255, 37, 13, 2, 255, 8, 4, 3, 255, 6, 1, 1, 255, 4, 1, 0, 255, 6, 3, 0, 255, 9, 5, 2, 255, 11, 4, 2, 255, 12, 3, 1, 255, 14, 3, 2, 255, 12, 2, 1, 255, 14, 4, 3, 255, 14, 1, 2, 255, 16, 5, 2, 255, 15, 6, 2, 255, 13, 4, 2, 255, 10, 3, 1, 255, 10, 5, 2, 255, 10, 4, 1, 255, 13, 4, 2, 255, 14, 5, 3, 255, 11, 1, 0, 255, 12, 3, 1, 255, 14, 5, 3, 255, 15, 4, 3, 255, 16, 6, 1, 255, 13, 6, 1, 255, 9, 4, 1, 255, 13, 7, 1, 255, 18, 9, 3, 255, 16, 6, 2, 255, 19, 8, 3, 255, 17, 8, 1, 255, 15, 8, 1, 255, 19, 8, 2, 255, 17, 7, 0, 255, 18, 9, 2, 255, 17, 8, 3, 255, 17, 9, 1, 255, 24, 15, 3, 255, 24, 14, 5, 255, 19, 10, 3, 255, 18, 8, 1, 255, 20, 7, 0, 255, 26, 12, 3, 255, 27, 14, 3, 255, 24, 15, 2, 255, 22, 13, 3, 255, 29, 14, 4, 255, 25, 13, 1, 255, 25, 15, 3, 255, 24, 11, 2, 255, 20, 9, 2, 255, 29, 16, 5, 255, 30, 14, 4, 255, 33, 16, 4, 255, 33, 19, 4, 255, 28, 15, 1, 255, 30, 14, 3, 255, 30, 20, 5, 255, 27, 16, 0, 255, 36, 18, 6, 255, 33, 16, 5, 255, 31, 16, 3, 255, 35, 19, 4, 255, 42, 20, 4, 255, 43, 20, 3, 255, 38, 17, 6, 255, 38, 17, 0, 255, 33, 18, 1, 255, 42, 19, 5, 255, 41, 21, 2, 255, 35, 22, 1, 255, 46, 25, 6, 255, 39, 18, 1, 255, 41, 19, 4, 255, 45, 17, 4, 255, 52, 22, 8, 255, 46, 21, 1, 255, 45, 20, 2, 255, 47, 21, 9, 255, 47, 19, 4, 255, 45, 19, 0, 255, 43, 22, 2, 255, 41, 30, 3, 255, 41, 26, 1, 255, 49, 26, 6, 255, 45, 21, 4, 255, 37, 18, 2, 255, 37, 24, 6, 255, 40, 22, 2, 255, 46, 23, 3, 255, 41, 24, 4, 255, 43, 23, 5, 255, 46, 25, 2, 255, 54, 22, 3, 255, 41, 22, 8, 255, 49, 20, 1, 255, 56, 23, 1, 255, 42, 24, 3, 255, 47, 27, 3, 255, 50, 26, 3, 255, 39, 23, 4, 255, 49, 26, 5, 255, 54, 28, 3, 255, 55, 27, 4, 255, 57, 22, 3, 255, 46, 24, 3, 255, 42, 27, 3, 255, 53, 26, 3, 255, 55, 26, 2, 255, 60, 24, 5, 255, 65, 28, 5, 255, 54, 26, 4, 255, 50, 22, 2, 255, 48, 25, 1, 255, 45, 26, 4, 255, 50, 24, 3, 255, 48, 26, 2, 255, 55, 30, 6, 255, 48, 28, 3, 255, 49, 29, 5, 255, 55, 29, 3, 255, 50, 25, 4, 255, 50, 25, 7, 255, 48, 28, 2, 255, 44, 26, 4, 255, 51, 31, 6, 255, 54, 32, 3, 255, 56, 29, 6, 255, 56, 29, 6, 255, 45, 32, 4, 255, 52, 29, 1, 255, 56, 31, 2, 255, 54, 34, 7, 255, 54, 33, 2, 255, 64, 30, 6, 255, 58, 32, 7, 255, 58, 38, 6, 255, 68, 40, 9, 255, 66, 39, 8, 255, 59, 45, 9, 255, 57, 46, 13, 255, 65, 45, 23, 255, 66, 53, 15, 255, 54, 54, 19, 255, 59, 55, 33, 255, 69, 55, 24, 255, 69, 66, 25, 255, 61, 63, 40, 255, 61, 64, 34, 255, 64, 68, 41, 255, 67, 71, 53, 255, 67, 69, 54, 255, 70, 73, 48, 255, 72, 75, 56, 255, 68, 80, 57, 255, 76, 86, 67, 255, 80, 87, 64, 255, 77, 88, 66, 255, 77, 96, 76, 255, 80, 99, 78, 255, 82, 102, 83, 255, 85, 106, 86, 255, 91, 112, 91, 255, 91, 114, 92, 255, 93, 119, 93, 255, 97, 122, 95, 255, 91, 122, 95, 255, 96, 129, 103, 255, 98, 131, 102, 255, 95, 132, 102, 255, 97, 137, 105, 255, 99, 138, 107, 255, 101, 140, 108, 255, 100, 140, 107, 255, 108, 139, 111, 255, 107, 138, 109, 255, 100, 136, 102, 255, 99, 138, 103, 255, 98, 133, 102, 255, 104, 130, 100, 255, 102, 129, 101, 255, 100, 129, 100, 255, 99, 123, 96, 255, 101, 121, 93, 255, 96, 117, 85, 255, 93, 116, 78, 255, 91, 111, 71, 255, 92, 107, 70, 255, 91, 102, 70, 255, 89, 101, 60, 255, 88, 100, 47, 255, 89, 93, 59, 255, 94, 94, 49, 255, 90, 86, 49, 255, 87, 84, 48, 255, 82, 82, 41, 255, 81, 78, 41, 255, 83, 75, 45, 255, 87, 74, 28, 255, 85, 74, 22, 255, 82, 72, 26, 255, 87, 73, 14, 255, 89, 67, 18, 255, 87, 67, 14, 255, 76, 62, 15, 255, 79, 64, 11, 255, 80, 62, 11, 255, 71, 53, 22, 255, 77, 56, 16, 255, 82, 52, 15, 255, 76, 50, 10, 255, 81, 48, 15, 255, 79, 46, 11, 255, 82, 50, 0, 255, 78, 49, 6, 255, 69, 47, 12, 255, 72, 42, 5, 255, 81, 43, 8, 255, 76, 43, 3, 255, 75, 42, 5, 255, 71, 41, 8, 255, 70, 40, 10, 255, 73, 39, 5, 255, 79, 40, 1, 255, 77, 37, 5, 255, 74, 38, 7, 255, 66, 34, 5, 255, 68, 38, 11, 255, 68, 37, 7, 255, 72, 35, 7, 255, 73, 37, 3, 255, 72, 35, 4, 255, 79, 33, 8, 255, 76, 28, 4, 255, 79, 33, 4, 255, 79, 29, 0, 255, 80, 34, 2, 255, 77, 33, 1, 255, 76, 34, 6, 255, 72, 32, 5, 255, 69, 30, 0, 255, 73, 31, 3, 255, 79, 31, 8, 255, 77, 34, 10, 255, 72, 30, 2, 255, 74, 32, 4, 255, 70, 29, 4, 255, 72, 28, 6, 255, 74, 29, 4, 255, 84, 34, 6, 255, 83, 30, 5, 255, 78, 31, 2, 255, 76, 31, 2, 255, 78, 28, 7, 255, 77, 27, 5, 255, 80, 30, 3, 255, 75, 30, 1, 255, 76, 31, 5, 255, 77, 28, 4, 255, 80, 28, 5, 255, 80, 29, 5, 255, 73, 28, 1, 255, 72, 26, 7, 255, 73, 26, 6, 255, 75, 31, 3, 255, 70, 28, 0, 255, 74, 28, 4, 255, 76, 27, 4, 255, 79, 29, 6, 255, 74, 30, 5, 255, 72, 31, 0, 255, 71, 26, 3, 255, 68, 25, 5, 255, 73, 27, 3, 255, 70, 26, 4, 255, 73, 25, 1, 255, 73, 26, 3, 255, 66, 22, 1, 255, 63, 21, 2, 255, 64, 21, 4, 255, 71, 25, 8, 255, 68, 21, 3, 255, 67, 22, 4, 255, 68, 23, 7, 255, 66, 22, 5, 255, 65, 25, 3, 255, 67, 24, 1, 255, 71, 23, 4, 255, 67, 21, 3, 255, 66, 19, 5, 255, 55, 18, 0, 255, 70, 21, 4, 255, 68, 20, 1, 255, 62, 22, 3, 255, 66, 20, 5, 255, 66, 18, 1, 255, 59, 22, 1, 255, 57, 20, 3, 255, 59, 16, 3, 255, 60, 24, 6, 255, 63, 20, 2, 255, 56, 14, 2, 255, 67, 27, 3, 255, 80, 27, 0, 255, 86, 24, 4, 255, 85, 22, 3, 255, 92, 25, 0, 255, 85, 20, 1, 255, 87, 23, 4, 255, 83, 25, 6, 255, 54, 17, 1, 255, 51, 15, 6, 255, 50, 19, 5, 255, 49, 15, 3, 255, 50, 13, 2, 255, 54, 15, 1, 255, 52, 15, 1, 255, 51, 17, 2, 255, 53, 18, 5, 255, 56, 18, 6, 255, 53, 15, 1, 255, 53, 20, 0, 255, 54, 18, 7, 255, 57, 16, 8, 255, 66, 22, 1, 255, 73, 27, 2, 255, 65, 21, 3, 255, 46, 18, 3, 255, 60, 21, 4, 255, 76, 17, 5, 255, 62, 18, 4, 255, 48, 22, 1, 255, 43, 17, 3, 255, 48, 15, 5, 255, 49, 11, 2, 255, 43, 13, 2, 255, 59, 14, 5, 255, 56, 15, 3, 255, 50, 16, 3, 255, 57, 14, 2, 255, 56, 19, 4, 255, 57, 18, 3, 255, 60, 17, 3, 255, 60, 16, 1, 255, 65, 17, 2, 255, 72, 18, 4, 255, 71, 18, 3, 255, 67, 16, 2, 255, 65, 18, 2, 255, 66, 18, 2, 255, 74, 19, 2, 255, 80, 19, 1, 255, 76, 19, 0, 255, 74, 19, 3, 255, 67, 18, 2, 255, 63, 17, 2, 255, 62, 17, 2, 255, 65, 18, 3, 255, 58, 13, 1, 255, 64, 15, 4, 255, 67, 15, 3, 255, 61, 14, 0, 255, 65, 15, 2, 255, 65, 15, 3, 255, 59, 15, 3, 255, 56, 16, 2, 255, 47, 13, 1, 255, 53, 15, 6, 255, 54, 13, 5, 255, 46, 10, 1, 255, 48, 15, 5, 255, 49, 12, 4, 255, 51, 13, 1, 255, 46, 13, 0, 255, 38, 9, 1, 255, 44, 12, 1, 255, 45, 13, 3, 255, 42, 13, 3, 255, 40, 10, 3, 255, 38, 10, 6, 255, 41, 12, 7, 255, 40, 11, 0, 255, 35, 10, 1, 255, 28, 9, 3, 255, 30, 10, 4, 255, 31, 7, 3, 255, 33, 10, 4, 255, 29, 12, 2, 255, 23, 8, 1, 255, 26, 8, 5, 255, 29, 7, 5, 255, 36, 8, 5, 255, 45, 11, 2, 255, 49, 12, 1, 255, 47, 10, 1, 255, 41, 10, 2, 255, 38, 8, 3, 255, 38, 6, 4, 255, 42, 13, 6, 255, 44, 13, 3, 255, 6, 2, 2, 255, 5, 0, 0, 255, 9, 2, 2, 255, 7, 2, 2, 255, 6, 2, 1, 255, 10, 4, 1, 255, 9, 3, 0, 255, 9, 3, 0, 255, 9, 3, 1, 255, 8, 3, 0, 255, 10, 3, 0, 255, 12, 3, 1, 255, 12, 2, 1, 255, 12, 3, 2, 255, 11, 5, 3, 255, 10, 5, 2, 255, 12, 5, 2, 255, 11, 3, 0, 255, 13, 5, 2, 255, 11, 6, 1, 255, 11, 5, 1, 255, 18, 6, 6, 255, 16, 4, 4, 255, 14, 4, 1, 255, 15, 5, 3, 255, 12, 5, 3, 255, 9, 5, 3, 255, 11, 6, 2, 255, 17, 8, 3, 255, 20, 8, 4, 255, 19, 9, 2, 255, 14, 9, 0, 255, 20, 8, 0, 255, 21, 10, 4, 255, 18, 9, 2, 255, 17, 8, 1, 255, 17, 10, 2, 255, 18, 11, 3, 255, 23, 12, 4, 255, 22, 12, 3, 255, 18, 11, 1, 255, 18, 11, 1, 255, 19, 10, 2, 255, 20, 11, 4, 255, 19, 11, 2, 255, 23, 11, 0, 255, 30, 14, 5, 255, 30, 13, 3, 255, 29, 12, 4, 255, 25, 12, 3, 255, 23, 13, 4, 255, 27, 15, 4, 255, 24, 10, 0, 255, 26, 14, 3, 255, 27, 18, 3, 255, 30, 18, 3, 255, 39, 16, 4, 255, 24, 18, 2, 255, 25, 16, 4, 255, 32, 16, 5, 255, 34, 16, 4, 255, 33, 16, 1, 255, 30, 19, 4, 255, 25, 18, 6, 255, 27, 16, 1, 255, 41, 18, 6, 255, 34, 17, 5, 255, 34, 17, 2, 255, 47, 17, 2, 255, 46, 19, 3, 255, 35, 18, 1, 255, 37, 20, 6, 255, 38, 20, 5, 255, 44, 20, 0, 255, 48, 20, 3, 255, 46, 20, 2, 255, 45, 22, 2, 255, 38, 17, 3, 255, 37, 19, 4, 255, 43, 24, 5, 255, 46, 20, 0, 255, 47, 20, 1, 255, 45, 22, 6, 255, 41, 23, 3, 255, 44, 24, 1, 255, 38, 21, 6, 255, 38, 22, 6, 255, 38, 20, 5, 255, 43, 19, 9, 255, 49, 21, 5, 255, 46, 26, 3, 255, 50, 21, 4, 255, 38, 21, 5, 255, 43, 18, 6, 255, 47, 20, 7, 255, 47, 23, 6, 255, 48, 24, 1, 255, 52, 26, 5, 255, 48, 21, 1, 255, 51, 24, 3, 255, 45, 24, 1, 255, 42, 25, 1, 255, 51, 25, 2, 255, 51, 25, 0, 255, 55, 29, 0, 255, 51, 26, 0, 255, 53, 27, 5, 255, 63, 29, 6, 255, 60, 26, 2, 255, 58, 27, 6, 255, 52, 23, 2, 255, 49, 24, 2, 255, 51, 27, 4, 255, 49, 27, 3, 255, 46, 28, 4, 255, 49, 26, 2, 255, 48, 28, 4, 255, 49, 28, 4, 255, 47, 27, 4, 255, 48, 28, 3, 255, 55, 30, 6, 255, 49, 26, 1, 255, 51, 28, 2, 255, 51, 31, 4, 255, 55, 28, 6, 255, 53, 25, 4, 255, 52, 26, 4, 255, 55, 29, 8, 255, 53, 29, 3, 255, 53, 29, 6, 255, 49, 30, 5, 255, 49, 32, 2, 255, 57, 33, 3, 255, 54, 32, 1, 255, 55, 34, 4, 255, 61, 37, 6, 255, 60, 36, 4, 255, 62, 40, 6, 255, 57, 42, 12, 255, 52, 39, 17, 255, 59, 47, 15, 255, 63, 49, 22, 255, 58, 48, 25, 255, 57, 51, 24, 255, 60, 54, 26, 255, 64, 60, 25, 255, 60, 61, 37, 255, 63, 62, 44, 255, 67, 67, 47, 255, 65, 68, 44, 255, 68, 72, 43, 255, 71, 71, 60, 255, 72, 73, 53, 255, 75, 80, 49, 255, 73, 78, 60, 255, 76, 86, 70, 255, 77, 91, 66, 255, 79, 92, 65, 255, 83, 95, 73, 255, 82, 98, 69, 255, 82, 104, 79, 255, 91, 110, 85, 255, 92, 114, 87, 255, 95, 119, 92, 255, 92, 121, 95, 255, 90, 124, 97, 255, 95, 130, 100, 255, 96, 133, 101, 255, 98, 135, 107, 255, 100, 135, 110, 255, 100, 134, 109, 255, 103, 136, 110, 255, 105, 141, 112, 255, 97, 140, 109, 255, 99, 141, 107, 255, 104, 143, 107, 255, 103, 140, 105, 255, 102, 136, 104, 255, 100, 135, 105, 255, 99, 133, 102, 255, 102, 131, 97, 255, 96, 124, 94, 255, 97, 127, 91, 255, 96, 122, 85, 255, 93, 115, 82, 255, 90, 114, 76, 255, 92, 112, 70, 255, 90, 107, 72, 255, 89, 103, 67, 255, 88, 98, 60, 255, 91, 95, 57, 255, 93, 92, 53, 255, 92, 89, 49, 255, 88, 86, 40, 255, 87, 84, 36, 255, 88, 83, 33, 255, 85, 77, 36, 255, 87, 76, 43, 255, 82, 75, 33, 255, 79, 73, 24, 255, 87, 69, 26, 255, 86, 64, 22, 255, 76, 64, 22, 255, 75, 62, 13, 255, 84, 61, 22, 255, 79, 55, 20, 255, 75, 56, 8, 255, 73, 52, 16, 255, 80, 53, 20, 255, 83, 53, 12, 255, 80, 49, 14, 255, 78, 47, 18, 255, 73, 42, 13, 255, 78, 47, 15, 255, 78, 42, 10, 255, 78, 41, 12, 255, 78, 42, 13, 255, 77, 43, 8, 255, 74, 41, 2, 255, 73, 40, 7, 255, 75, 42, 11, 255, 70, 39, 7, 255, 70, 36, 7, 255, 74, 34, 11, 255, 79, 36, 11, 255, 74, 34, 6, 255, 75, 36, 6, 255, 74, 38, 6, 255, 70, 34, 4, 255, 72, 35, 8, 255, 80, 34, 6, 255, 76, 37, 5, 255, 74, 34, 5, 255, 86, 32, 6, 255, 79, 34, 4, 255, 74, 35, 5, 255, 76, 32, 6, 255, 71, 33, 3, 255, 76, 31, 4, 255, 69, 31, 2, 255, 70, 31, 2, 255, 77, 31, 4, 255, 76, 31, 1, 255, 75, 31, 2, 255, 70, 28, 6, 255, 71, 26, 4, 255, 76, 30, 2, 255, 72, 30, 2, 255, 76, 30, 5, 255, 81, 31, 4, 255, 77, 29, 3, 255, 77, 30, 4, 255, 76, 29, 3, 255, 78, 30, 3, 255, 77, 29, 2, 255, 79, 31, 2, 255, 82, 28, 6, 255, 73, 29, 5, 255, 73, 28, 4, 255, 77, 27, 3, 255, 75, 28, 2, 255, 74, 29, 2, 255, 75, 28, 6, 255, 72, 27, 6, 255, 70, 29, 2, 255, 77, 31, 1, 255, 78, 26, 0, 255, 73, 26, 2, 255, 69, 24, 3, 255, 82, 25, 2, 255, 73, 27, 3, 255, 70, 23, 5, 255, 71, 24, 5, 255, 67, 26, 4, 255, 69, 31, 5, 255, 77, 28, 4, 255, 78, 25, 1, 255, 70, 28, 3, 255, 63, 21, 1, 255, 66, 23, 1, 255, 67, 26, 7, 255, 64, 17, 6, 255, 65, 23, 2, 255, 70, 24, 5, 255, 70, 19, 6, 255, 71, 22, 1, 255, 69, 28, 2, 255, 57, 22, 4, 255, 64, 22, 5, 255, 69, 24, 8, 255, 60, 23, 2, 255, 59, 23, 1, 255, 65, 22, 5, 255, 64, 21, 4, 255, 54, 21, 2, 255, 58, 22, 1, 255, 66, 20, 2, 255, 64, 18, 3, 255, 53, 18, 7, 255, 53, 21, 5, 255, 59, 18, 2, 255, 55, 17, 8, 255, 50, 18, 4, 255, 75, 23, 9, 255, 85, 22, 2, 255, 89, 24, 0, 255, 98, 29, 2, 255, 95, 26, 3, 255, 78, 26, 2, 255, 67, 23, 5, 255, 54, 17, 3, 255, 49, 16, 1, 255, 50, 17, 2, 255, 44, 17, 2, 255, 52, 16, 3, 255, 61, 15, 3, 255, 51, 16, 3, 255, 41, 16, 4, 255, 50, 17, 6, 255, 58, 14, 3, 255, 57, 18, 3, 255, 50, 16, 1, 255, 51, 21, 8, 255, 48, 18, 5, 255, 55, 16, 1, 255, 73, 23, 4, 255, 78, 21, 6, 255, 55, 16, 3, 255, 44, 17, 4, 255, 55, 16, 8, 255, 52, 12, 4, 255, 45, 15, 3, 255, 48, 13, 3, 255, 52, 13, 2, 255, 44, 12, 7, 255, 47, 12, 8, 255, 54, 14, 3, 255, 53, 17, 2, 255, 49, 16, 4, 255, 58, 14, 3, 255, 54, 16, 3, 255, 59, 15, 5, 255, 53, 14, 2, 255, 57, 16, 1, 255, 64, 18, 3, 255, 64, 16, 2, 255, 67, 14, 2, 255, 64, 14, 1, 255, 63, 14, 1, 255, 64, 15, 1, 255, 70, 19, 5, 255, 72, 19, 5, 255, 73, 18, 4, 255, 73, 22, 4, 255, 70, 15, 1, 255, 63, 13, 2, 255, 63, 13, 5, 255, 64, 15, 1, 255, 66, 20, 2, 255, 69, 18, 2, 255, 73, 17, 3, 255, 68, 16, 1, 255, 65, 18, 3, 255, 58, 15, 1, 255, 62, 16, 2, 255, 67, 17, 4, 255, 52, 15, 1, 255, 43, 14, 1, 255, 44, 12, 2, 255, 50, 13, 5, 255, 52, 12, 3, 255, 50, 11, 1, 255, 42, 14, 3, 255, 44, 13, 4, 255, 47, 12, 4, 255, 53, 13, 4, 255, 49, 12, 3, 255, 44, 14, 3, 255, 47, 12, 2, 255, 46, 12, 2, 255, 45, 14, 3, 255, 44, 13, 3, 255, 37, 8, 3, 255, 33, 10, 5, 255, 31, 8, 1, 255, 29, 7, 1, 255, 27, 14, 4, 255, 29, 11, 2, 255, 32, 13, 5, 255, 31, 10, 5, 255, 34, 7, 3, 255, 38, 6, 3, 255, 33, 10, 4, 255, 43, 9, 6, 255, 35, 7, 2, 255, 45, 9, 6, 255, 42, 9, 2, 255, 42, 12, 1, 255, 43, 12, 1, 255, 40, 9, 1, 255, 5, 1, 0, 255, 8, 2, 2, 255, 9, 3, 3, 255, 6, 2, 1, 255, 6, 2, 1, 255, 10, 3, 1, 255, 9, 2, 0, 255, 9, 4, 1, 255, 9, 4, 1, 255, 8, 3, 0, 255, 10, 3, 1, 255, 12, 4, 2, 255, 12, 2, 1, 255, 12, 2, 2, 255, 14, 7, 4, 255, 10, 5, 1, 255, 12, 4, 1, 255, 11, 3, 0, 255, 12, 7, 2, 255, 12, 6, 2, 255, 12, 4, 0, 255, 14, 5, 4, 255, 14, 4, 3, 255, 15, 6, 3, 255, 15, 6, 3, 255, 15, 7, 4, 255, 10, 6, 3, 255, 10, 6, 2, 255, 16, 9, 3, 255, 18, 8, 3, 255, 18, 7, 2, 255, 17, 9, 3, 255, 18, 6, 0, 255, 20, 9, 3, 255, 17, 6, 2, 255, 17, 8, 2, 255, 18, 8, 2, 255, 15, 6, 0, 255, 21, 10, 2, 255, 21, 11, 2, 255, 18, 10, 1, 255, 19, 9, 1, 255, 21, 10, 2, 255, 23, 9, 2, 255, 24, 11, 3, 255, 21, 15, 3, 255, 21, 11, 1, 255, 26, 13, 3, 255, 28, 11, 4, 255, 24, 8, 1, 255, 26, 9, 2, 255, 22, 11, 3, 255, 27, 14, 2, 255, 32, 16, 2, 255, 24, 12, 1, 255, 22, 15, 5, 255, 33, 17, 5, 255, 32, 18, 1, 255, 32, 16, 2, 255, 30, 17, 3, 255, 26, 16, 0, 255, 33, 16, 1, 255, 37, 16, 4, 255, 26, 14, 3, 255, 32, 23, 4, 255, 35, 16, 5, 255, 39, 18, 5, 255, 43, 20, 4, 255, 43, 15, 4, 255, 40, 22, 5, 255, 38, 21, 3, 255, 35, 17, 2, 255, 36, 22, 2, 255, 36, 19, 3, 255, 39, 18, 2, 255, 46, 21, 5, 255, 43, 17, 4, 255, 41, 19, 6, 255, 38, 18, 4, 255, 44, 23, 7, 255, 46, 23, 3, 255, 47, 22, 4, 255, 46, 19, 7, 255, 43, 23, 5, 255, 46, 24, 2, 255, 38, 21, 2, 255, 41, 23, 3, 255, 42, 25, 3, 255, 40, 21, 1, 255, 49, 25, 4, 255, 43, 25, 3, 255, 48, 21, 2, 255, 40, 21, 4, 255, 46, 17, 4, 255, 46, 18, 4, 255, 41, 24, 6, 255, 48, 27, 3, 255, 49, 26, 3, 255, 47, 24, 2, 255, 51, 27, 5, 255, 48, 26, 3, 255, 46, 25, 2, 255, 54, 27, 6, 255, 49, 24, 1, 255, 52, 26, 2, 255, 53, 28, 4, 255, 51, 28, 2, 255, 56, 27, 3, 255, 54, 26, 2, 255, 55, 24, 5, 255, 60, 23, 4, 255, 61, 25, 5, 255, 53, 27, 5, 255, 49, 27, 4, 255, 49, 23, 3, 255, 58, 30, 5, 255, 55, 30, 7, 255, 51, 24, 4, 255, 51, 29, 5, 255, 49, 28, 1, 255, 54, 28, 4, 255, 52, 28, 4, 255, 57, 32, 8, 255, 49, 27, 4, 255, 48, 31, 5, 255, 48, 26, 2, 255, 56, 26, 5, 255, 55, 27, 6, 255, 57, 29, 1, 255, 53, 29, 4, 255, 49, 28, 8, 255, 54, 30, 8, 255, 56, 29, 5, 255, 63, 33, 5, 255, 59, 35, 2, 255, 56, 36, 6, 255, 51, 34, 12, 255, 53, 37, 15, 255, 55, 42, 10, 255, 56, 42, 17, 255, 56, 45, 14, 255, 60, 51, 21, 255, 58, 52, 24, 255, 60, 57, 21, 255, 61, 56, 26, 255, 59, 57, 35, 255, 63, 67, 32, 255, 70, 73, 24, 255, 68, 68, 35, 255, 65, 69, 36, 255, 70, 72, 51, 255, 72, 75, 53, 255, 72, 75, 59, 255, 76, 81, 62, 255, 73, 82, 59, 255, 76, 88, 71, 255, 76, 90, 68, 255, 81, 93, 71, 255, 84, 97, 77, 255, 85, 102, 79, 255, 88, 107, 81, 255, 94, 114, 93, 255, 93, 117, 94, 255, 93, 120, 91, 255, 92, 124, 92, 255, 92, 126, 102, 255, 96, 132, 106, 255, 96, 135, 107, 255, 97, 138, 111, 255, 101, 139, 112, 255, 102, 139, 113, 255, 103, 140, 113, 255, 101, 142, 114, 255, 103, 143, 116, 255, 102, 141, 110, 255, 103, 140, 107, 255, 104, 140, 107, 255, 102, 138, 105, 255, 102, 137, 106, 255, 99, 132, 101, 255, 104, 131, 99, 255, 100, 124, 90, 255, 97, 124, 85, 255, 98, 120, 83, 255, 97, 117, 83, 255, 94, 113, 77, 255, 95, 109, 72, 255, 89, 102, 73, 255, 88, 102, 60, 255, 88, 101, 59, 255, 85, 94, 61, 255, 84, 89, 48, 255, 88, 90, 41, 255, 85, 84, 47, 255, 86, 84, 41, 255, 85, 81, 27, 255, 81, 74, 30, 255, 81, 77, 26, 255, 84, 74, 16, 255, 78, 70, 16, 255, 84, 66, 35, 255, 82, 62, 19, 255, 69, 62, 21, 255, 82, 61, 8, 255, 84, 58, 8, 255, 85, 51, 17, 255, 86, 54, 9, 255, 84, 53, 13, 255, 76, 51, 14, 255, 77, 53, 11, 255, 78, 49, 3, 255, 80, 49, 5, 255, 74, 43, 7, 255, 74, 43, 8, 255, 78, 44, 2, 255, 83, 46, 3, 255, 78, 41, 4, 255, 77, 43, 9, 255, 74, 40, 6, 255, 77, 42, 6, 255, 73, 38, 5, 255, 71, 36, 7, 255, 73, 37, 7, 255, 72, 36, 4, 255, 71, 34, 6, 255, 72, 36, 5, 255, 73, 35, 4, 255, 75, 35, 4, 255, 77, 36, 7, 255, 75, 32, 6, 255, 75, 31, 1, 255, 76, 34, 1, 255, 77, 33, 4, 255, 81, 30, 3, 255, 76, 33, 2, 255, 72, 35, 6, 255, 73, 34, 8, 255, 72, 33, 5, 255, 73, 28, 0, 255, 71, 32, 3, 255, 69, 30, 3, 255, 76, 29, 3, 255, 77, 30, 1, 255, 76, 30, 1, 255, 70, 27, 2, 255, 69, 22, 2, 255, 75, 26, 5, 255, 76, 31, 3, 255, 82, 33, 3, 255, 83, 29, 2, 255, 79, 28, 3, 255, 80, 30, 5, 255, 78, 28, 3, 255, 79, 29, 4, 255, 84, 34, 5, 255, 83, 33, 3, 255, 82, 28, 3, 255, 78, 32, 4, 255, 75, 30, 3, 255, 77, 29, 3, 255, 79, 29, 4, 255, 76, 28, 2, 255, 72, 29, 2, 255, 73, 30, 5, 255, 73, 29, 5, 255, 73, 31, 5, 255, 70, 28, 1, 255, 73, 26, 4, 255, 76, 25, 5, 255, 74, 30, 4, 255, 71, 25, 3, 255, 76, 25, 3, 255, 72, 22, 3, 255, 71, 24, 0, 255, 85, 31, 4, 255, 80, 28, 6, 255, 86, 27, 3, 255, 86, 30, 9, 255, 66, 20, 3, 255, 71, 25, 4, 255, 68, 24, 4, 255, 74, 27, 10, 255, 74, 22, 5, 255, 63, 20, 2, 255, 64, 25, 7, 255, 65, 25, 4, 255, 63, 21, 0, 255, 64, 17, 7, 255, 60, 18, 2, 255, 65, 24, 6, 255, 62, 23, 3, 255, 60, 22, 1, 255, 67, 23, 6, 255, 66, 19, 4, 255, 58, 19, 0, 255, 55, 21, 2, 255, 54, 18, 7, 255, 60, 20, 5, 255, 64, 20, 1, 255, 62, 21, 7, 255, 51, 19, 6, 255, 58, 22, 1, 255, 69, 19, 4, 255, 65, 17, 2, 255, 66, 18, 1, 255, 63, 20, 2, 255, 70, 19, 3, 255, 77, 24, 5, 255, 54, 21, 0, 255, 53, 16, 1, 255, 60, 18, 5, 255, 53, 19, 3, 255, 54, 22, 6, 255, 54, 21, 8, 255, 46, 18, 6, 255, 48, 22, 5, 255, 46, 18, 3, 255, 51, 14, 4, 255, 54, 15, 6, 255, 45, 20, 2, 255, 41, 21, 3, 255, 43, 12, 0, 255, 50, 14, 5, 255, 46, 16, 5, 255, 42, 13, 1, 255, 53, 17, 1, 255, 60, 14, 2, 255, 47, 13, 1, 255, 44, 17, 5, 255, 52, 15, 7, 255, 51, 15, 3, 255, 47, 14, 2, 255, 54, 13, 3, 255, 61, 21, 4, 255, 41, 14, 0, 255, 43, 18, 4, 255, 50, 16, 4, 255, 49, 11, 1, 255, 48, 14, 4, 255, 55, 18, 1, 255, 53, 19, 0, 255, 57, 17, 2, 255, 55, 14, 2, 255, 57, 13, 3, 255, 64, 14, 6, 255, 62, 17, 6, 255, 59, 16, 2, 255, 62, 15, 3, 255, 66, 15, 3, 255, 64, 12, 0, 255, 68, 16, 2, 255, 65, 14, 1, 255, 63, 17, 2, 255, 64, 17, 1, 255, 70, 19, 4, 255, 63, 17, 3, 255, 64, 11, 2, 255, 65, 14, 2, 255, 66, 16, 5, 255, 67, 14, 4, 255, 66, 14, 0, 255, 74, 16, 4, 255, 77, 17, 6, 255, 68, 15, 2, 255, 62, 14, 0, 255, 61, 15, 1, 255, 57, 15, 4, 255, 55, 14, 6, 255, 52, 10, 4, 255, 48, 14, 5, 255, 39, 13, 1, 255, 45, 11, 5, 255, 40, 11, 5, 255, 37, 9, 4, 255, 36, 9, 2, 255, 43, 11, 3, 255, 53, 11, 4, 255, 49, 10, 2, 255, 44, 15, 2, 255, 34, 11, 1, 255, 48, 13, 6, 255, 48, 7, 2, 255, 42, 8, 3, 255, 41, 11, 7, 255, 34, 8, 5, 255, 38, 8, 8, 255, 36, 8, 6, 255, 29, 9, 1, 255, 26, 8, 0, 255, 29, 6, 3, 255, 21, 8, 1, 255, 39, 9, 5, 255, 40, 7, 5, 255, 35, 9, 3, 255, 38, 12, 5, 255, 51, 10, 5, 255, 38, 8, 1, 255, 46, 8, 2, 255, 45, 9, 3, 255, 40, 7, 2, 255, 4, 1, 1, 255, 8, 3, 3, 255, 7, 2, 1, 255, 6, 2, 1, 255, 6, 2, 1, 255, 9, 3, 0, 255, 11, 2, 0, 255, 9, 4, 1, 255, 9, 4, 1, 255, 9, 4, 1, 255, 8, 2, 0, 255, 11, 3, 1, 255, 12, 2, 0, 255, 15, 4, 2, 255, 12, 4, 2, 255, 11, 4, 1, 255, 12, 3, 1, 255, 8, 1, 0, 255, 10, 6, 3, 255, 14, 6, 3, 255, 12, 4, 1, 255, 13, 6, 3, 255, 14, 5, 3, 255, 14, 7, 4, 255, 14, 6, 3, 255, 15, 6, 4, 255, 13, 4, 2, 255, 10, 5, 1, 255, 13, 7, 3, 255, 16, 6, 1, 255, 17, 6, 2, 255, 20, 9, 5, 255, 17, 7, 2, 255, 20, 10, 5, 255, 19, 8, 4, 255, 19, 7, 3, 255, 19, 7, 2, 255, 21, 9, 2, 255, 21, 10, 2, 255, 19, 8, 2, 255, 19, 9, 2, 255, 21, 10, 1, 255, 26, 11, 4, 255, 24, 9, 2, 255, 27, 13, 5, 255, 26, 14, 5, 255, 24, 12, 3, 255, 23, 12, 3, 255, 21, 10, 2, 255, 24, 10, 2, 255, 29, 14, 6, 255, 25, 13, 3, 255, 28, 15, 4, 255, 35, 14, 4, 255, 31, 14, 3, 255, 21, 15, 2, 255, 26, 14, 2, 255, 33, 14, 3, 255, 36, 14, 2, 255, 31, 17, 3, 255, 25, 18, 2, 255, 31, 14, 1, 255, 43, 18, 7, 255, 35, 18, 7, 255, 36, 19, 3, 255, 30, 16, 1, 255, 36, 18, 4, 255, 38, 18, 3, 255, 36, 17, 1, 255, 36, 19, 3, 255, 33, 17, 2, 255, 33, 18, 0, 255, 37, 20, 3, 255, 40, 17, 6, 255, 43, 20, 7, 255, 41, 22, 5, 255, 36, 18, 4, 255, 43, 18, 4, 255, 42, 17, 3, 255, 42, 20, 4, 255, 39, 26, 4, 255, 33, 24, 2, 255, 35, 20, 3, 255, 39, 20, 5, 255, 50, 25, 8, 255, 40, 21, 4, 255, 45, 24, 7, 255, 42, 24, 3, 255, 39, 22, 1, 255, 44, 20, 1, 255, 43, 25, 3, 255, 43, 24, 2, 255, 44, 23, 1, 255, 52, 22, 6, 255, 46, 23, 7, 255, 33, 21, 1, 255, 44, 23, 0, 255, 45, 25, 3, 255, 42, 25, 3, 255, 41, 24, 2, 255, 47, 25, 3, 255, 50, 24, 2, 255, 54, 27, 6, 255, 52, 26, 3, 255, 52, 25, 5, 255, 51, 26, 4, 255, 49, 28, 0, 255, 53, 27, 2, 255, 49, 25, 4, 255, 52, 22, 3, 255, 54, 24, 2, 255, 53, 25, 3, 255, 48, 25, 2, 255, 47, 25, 4, 255, 39, 20, 2, 255, 52, 25, 3, 255, 55, 28, 2, 255, 54, 24, 0, 255, 52, 28, 6, 255, 49, 27, 5, 255, 53, 26, 4, 255, 50, 26, 2, 255, 54, 29, 6, 255, 48, 27, 4, 255, 44, 31, 5, 255, 48, 28, 4, 255, 56, 26, 5, 255, 56, 30, 5, 255, 53, 33, 4, 255, 50, 32, 6, 255, 54, 27, 5, 255, 59, 26, 4, 255, 51, 26, 2, 255, 53, 31, 5, 255, 49, 33, 7, 255, 45, 37, 8, 255, 50, 39, 10, 255, 57, 37, 17, 255, 61, 39, 8, 255, 58, 41, 20, 255, 55, 45, 25, 255, 57, 46, 30, 255, 56, 51, 22, 255, 59, 55, 25, 255, 60, 58, 25, 255, 61, 60, 34, 255, 62, 65, 38, 255, 65, 65, 34, 255, 68, 69, 40, 255, 69, 72, 47, 255, 69, 75, 43, 255, 74, 81, 44, 255, 73, 81, 57, 255, 71, 80, 62, 255, 74, 87, 61, 255, 78, 89, 69, 255, 81, 93, 72, 255, 85, 97, 79, 255, 85, 100, 81, 255, 87, 105, 84, 255, 92, 111, 91, 255, 90, 113, 89, 255, 90, 119, 92, 255, 93, 125, 99, 255, 90, 127, 99, 255, 95, 132, 104, 255, 98, 136, 111, 255, 97, 139, 112, 255, 96, 140, 112, 255, 100, 142, 114, 255, 104, 145, 116, 255, 101, 143, 115, 255, 99, 142, 114, 255, 105, 145, 119, 255, 104, 143, 114, 255, 102, 141, 108, 255, 102, 141, 107, 255, 100, 138, 105, 255, 100, 136, 103, 255, 98, 132, 101, 255, 102, 128, 100, 255, 102, 126, 90, 255, 98, 124, 87, 255, 97, 118, 82, 255, 97, 115, 79, 255, 93, 111, 79, 255, 91, 107, 70, 255, 88, 101, 62, 255, 88, 100, 59, 255, 88, 98, 61, 255, 87, 90, 62, 255, 88, 88, 50, 255, 88, 85, 40, 255, 83, 78, 45, 255, 85, 77, 34, 255, 88, 77, 25, 255, 86, 75, 19, 255, 83, 75, 23, 255, 77, 70, 28, 255, 78, 61, 24, 255, 81, 64, 16, 255, 86, 66, 17, 255, 79, 59, 22, 255, 79, 63, 13, 255, 83, 56, 16, 255, 74, 49, 20, 255, 79, 52, 6, 255, 83, 55, 9, 255, 74, 50, 8, 255, 72, 48, 4, 255, 79, 49, 6, 255, 76, 45, 8, 255, 74, 48, 6, 255, 74, 48, 8, 255, 75, 44, 10, 255, 79, 46, 7, 255, 75, 43, 3, 255, 75, 41, 9, 255, 74, 39, 6, 255, 76, 42, 4, 255, 76, 38, 4, 255, 74, 34, 7, 255, 73, 36, 7, 255, 73, 38, 4, 255, 69, 39, 5, 255, 70, 35, 2, 255, 74, 36, 4, 255, 75, 35, 4, 255, 75, 30, 1, 255, 78, 32, 7, 255, 77, 34, 4, 255, 77, 33, 2, 255, 79, 33, 4, 255, 77, 30, 2, 255, 81, 31, 4, 255, 82, 29, 5, 255, 80, 29, 8, 255, 76, 29, 5, 255, 76, 29, 3, 255, 72, 31, 4, 255, 67, 31, 4, 255, 70, 30, 4, 255, 72, 31, 3, 255, 73, 28, 4, 255, 74, 28, 3, 255, 74, 27, 6, 255, 77, 27, 8, 255, 78, 29, 2, 255, 83, 32, 1, 255, 85, 29, 3, 255, 83, 31, 3, 255, 79, 29, 2, 255, 77, 30, 4, 255, 76, 29, 2, 255, 78, 29, 0, 255, 81, 31, 0, 255, 79, 30, 2, 255, 78, 28, 0, 255, 74, 29, 1, 255, 75, 29, 1, 255, 78, 26, 2, 255, 78, 27, 3, 255, 78, 32, 2, 255, 77, 32, 1, 255, 72, 27, 2, 255, 69, 26, 2, 255, 68, 28, 4, 255, 75, 27, 5, 255, 74, 25, 4, 255, 66, 27, 6, 255, 66, 23, 6, 255, 70, 23, 3, 255, 66, 21, 4, 255, 69, 27, 3, 255, 75, 26, 2, 255, 98, 27, 2, 255, 93, 30, 1, 255, 84, 26, 4, 255, 69, 22, 7, 255, 64, 26, 6, 255, 88, 29, 3, 255, 94, 28, 2, 255, 79, 26, 4, 255, 69, 21, 0, 255, 68, 23, 1, 255, 69, 25, 1, 255, 71, 24, 0, 255, 72, 22, 5, 255, 68, 22, 6, 255, 65, 25, 7, 255, 64, 21, 3, 255, 63, 20, 2, 255, 61, 23, 4, 255, 60, 20, 1, 255, 63, 18, 3, 255, 59, 20, 5, 255, 56, 20, 6, 255, 64, 22, 7, 255, 57, 18, 1, 255, 56, 23, 6, 255, 57, 21, 7, 255, 61, 18, 0, 255, 68, 21, 6, 255, 70, 18, 4, 255, 62, 17, 2, 255, 60, 21, 5, 255, 58, 16, 2, 255, 65, 17, 4, 255, 51, 19, 4, 255, 50, 16, 2, 255, 55, 20, 4, 255, 49, 19, 2, 255, 55, 19, 3, 255, 52, 17, 5, 255, 52, 17, 5, 255, 52, 15, 4, 255, 49, 18, 6, 255, 43, 13, 2, 255, 52, 16, 5, 255, 54, 17, 5, 255, 49, 16, 7, 255, 52, 16, 6, 255, 51, 15, 5, 255, 45, 13, 4, 255, 43, 17, 5, 255, 40, 14, 2, 255, 45, 13, 1, 255, 44, 12, 1, 255, 44, 13, 3, 255, 49, 11, 1, 255, 52, 16, 2, 255, 54, 18, 2, 255, 70, 20, 7, 255, 77, 24, 5, 255, 63, 21, 1, 255, 61, 18, 3, 255, 49, 16, 4, 255, 44, 15, 3, 255, 53, 12, 5, 255, 52, 14, 2, 255, 51, 17, 3, 255, 56, 15, 3, 255, 58, 14, 4, 255, 61, 13, 2, 255, 63, 13, 2, 255, 62, 17, 5, 255, 59, 15, 3, 255, 56, 14, 0, 255, 60, 17, 4, 255, 63, 18, 5, 255, 68, 19, 6, 255, 67, 13, 2, 255, 61, 14, 3, 255, 54, 12, 2, 255, 64, 14, 4, 255, 64, 15, 2, 255, 58, 15, 1, 255, 58, 16, 4, 255, 55, 12, 4, 255, 57, 11, 2, 255, 63, 14, 1, 255, 71, 18, 4, 255, 72, 17, 2, 255, 72, 16, 3, 255, 70, 16, 4, 255, 63, 14, 2, 255, 57, 13, 1, 255, 55, 12, 4, 255, 50, 10, 3, 255, 48, 14, 5, 255, 43, 15, 3, 255, 40, 10, 2, 255, 41, 12, 6, 255, 40, 7, 4, 255, 38, 10, 4, 255, 41, 13, 4, 255, 51, 13, 4, 255, 52, 11, 2, 255, 47, 10, 2, 255, 33, 11, 3, 255, 31, 13, 5, 255, 34, 9, 2, 255, 39, 11, 5, 255, 37, 10, 5, 255, 37, 9, 2, 255, 35, 9, 3, 255, 42, 10, 3, 255, 44, 16, 5, 255, 38, 12, 2, 255, 30, 9, 0, 255, 22, 10, 0, 255, 34, 7, 3, 255, 34, 6, 1, 255, 35, 10, 2, 255, 38, 13, 3, 255, 47, 9, 1, 255, 44, 10, 1, 255, 51, 14, 4, 255, 46, 11, 3, 255, 38, 6, 2, 255, 4, 1, 0, 255, 6, 1, 1, 255, 5, 0, 0, 255, 7, 3, 2, 255, 6, 2, 1, 255, 8, 2, 0, 255, 10, 2, 0, 255, 8, 2, 0, 255, 8, 2, 2, 255, 8, 2, 2, 255, 6, 1, 0, 255, 9, 1, 0, 255, 11, 2, 0, 255, 15, 4, 2, 255, 12, 3, 2, 255, 13, 4, 2, 255, 14, 6, 4, 255, 8, 2, 0, 255, 8, 5, 2, 255, 13, 4, 2, 255, 13, 3, 1, 255, 14, 6, 3, 255, 14, 6, 3, 255, 12, 5, 1, 255, 12, 4, 1, 255, 14, 4, 3, 255, 15, 3, 2, 255, 11, 6, 2, 255, 11, 6, 2, 255, 13, 5, 1, 255, 17, 7, 2, 255, 18, 7, 3, 255, 15, 8, 2, 255, 15, 6, 1, 255, 17, 6, 2, 255, 20, 9, 5, 255, 19, 8, 2, 255, 19, 9, 2, 255, 21, 9, 3, 255, 20, 8, 3, 255, 20, 11, 4, 255, 24, 13, 5, 255, 20, 9, 2, 255, 20, 10, 2, 255, 21, 10, 1, 255, 26, 12, 0, 255, 28, 15, 5, 255, 24, 13, 4, 255, 22, 13, 3, 255, 22, 12, 2, 255, 26, 14, 4, 255, 30, 13, 3, 255, 26, 12, 3, 255, 28, 11, 3, 255, 36, 15, 6, 255, 32, 16, 3, 255, 27, 15, 4, 255, 33, 18, 8, 255, 29, 11, 0, 255, 35, 13, 4, 255, 30, 15, 4, 255, 29, 16, 3, 255, 35, 18, 7, 255, 29, 13, 4, 255, 39, 16, 4, 255, 28, 16, 0, 255, 31, 17, 4, 255, 34, 16, 2, 255, 33, 21, 2, 255, 34, 16, 2, 255, 37, 19, 4, 255, 37, 21, 5, 255, 39, 18, 7, 255, 43, 17, 4, 255, 44, 18, 6, 255, 37, 19, 2, 255, 36, 22, 1, 255, 41, 21, 4, 255, 40, 24, 3, 255, 39, 24, 1, 255, 42, 20, 1, 255, 43, 17, 1, 255, 42, 22, 5, 255, 37, 21, 2, 255, 42, 18, 3, 255, 43, 22, 6, 255, 43, 21, 5, 255, 43, 20, 4, 255, 43, 22, 4, 255, 47, 20, 5, 255, 45, 22, 3, 255, 44, 27, 1, 255, 41, 25, 1, 255, 47, 22, 2, 255, 47, 24, 3, 255, 41, 26, 5, 255, 45, 23, 6, 255, 40, 21, 3, 255, 40, 23, 2, 255, 42, 25, 1, 255, 50, 26, 2, 255, 54, 25, 1, 255, 56, 26, 2, 255, 47, 22, 2, 255, 51, 21, 3, 255, 55, 27, 5, 255, 50, 27, 2, 255, 47, 23, 1, 255, 46, 25, 7, 255, 47, 25, 4, 255, 50, 25, 3, 255, 52, 24, 2, 255, 56, 26, 6, 255, 55, 24, 8, 255, 45, 19, 6, 255, 57, 26, 5, 255, 48, 25, 1, 255, 49, 25, 3, 255, 53, 28, 5, 255, 51, 23, 2, 255, 49, 25, 5, 255, 45, 27, 3, 255, 49, 26, 1, 255, 49, 29, 4, 255, 51, 28, 4, 255, 54, 30, 6, 255, 51, 29, 3, 255, 50, 27, 0, 255, 56, 29, 4, 255, 52, 31, 4, 255, 55, 30, 3, 255, 55, 29, 1, 255, 55, 34, 5, 255, 51, 30, 5, 255, 60, 33, 15, 255, 53, 34, 8, 255, 51, 39, 6, 255, 55, 38, 13, 255, 63, 43, 10, 255, 59, 42, 15, 255, 56, 46, 19, 255, 59, 49, 18, 255, 59, 48, 21, 255, 57, 46, 40, 255, 60, 55, 32, 255, 65, 66, 28, 255, 60, 59, 37, 255, 64, 64, 41, 255, 68, 68, 42, 255, 71, 73, 54, 255, 72, 78, 47, 255, 72, 78, 50, 255, 72, 81, 53, 255, 72, 84, 57, 255, 76, 90, 64, 255, 77, 89, 64, 255, 81, 93, 73, 255, 85, 98, 78, 255, 85, 103, 79, 255, 88, 108, 82, 255, 92, 113, 96, 255, 93, 119, 94, 255, 91, 124, 95, 255, 90, 127, 101, 255, 90, 129, 107, 255, 94, 135, 106, 255, 96, 137, 111, 255, 97, 139, 114, 255, 100, 143, 116, 255, 101, 143, 114, 255, 103, 144, 113, 255, 102, 145, 115, 255, 99, 144, 114, 255, 103, 145, 117, 255, 102, 146, 114, 255, 100, 142, 107, 255, 100, 142, 107, 255, 98, 139, 103, 255, 97, 137, 100, 255, 97, 133, 98, 255, 98, 125, 99, 255, 99, 124, 93, 255, 96, 122, 91, 255, 95, 116, 82, 255, 94, 113, 69, 255, 91, 110, 72, 255, 90, 105, 68, 255, 88, 100, 63, 255, 88, 97, 64, 255, 86, 93, 58, 255, 85, 85, 55, 255, 89, 85, 50, 255, 84, 84, 41, 255, 80, 79, 40, 255, 81, 78, 26, 255, 84, 77, 21, 255, 84, 76, 19, 255, 73, 68, 28, 255, 73, 64, 36, 255, 80, 68, 20, 255, 82, 61, 13, 255, 82, 62, 16, 255, 83, 59, 15, 255, 81, 57, 14, 255, 79, 56, 18, 255, 73, 54, 10, 255, 73, 55, 6, 255, 75, 52, 15, 255, 76, 46, 12, 255, 83, 51, 9, 255, 78, 45, 12, 255, 75, 39, 12, 255, 74, 41, 7, 255, 72, 44, 7, 255, 72, 40, 10, 255, 74, 38, 11, 255, 75, 38, 7, 255, 76, 39, 6, 255, 76, 40, 7, 255, 74, 37, 7, 255, 79, 38, 9, 255, 75, 31, 4, 255, 70, 31, 4, 255, 69, 35, 9, 255, 71, 38, 4, 255, 74, 34, 3, 255, 73, 35, 4, 255, 74, 34, 4, 255, 78, 32, 5, 255, 74, 32, 5, 255, 75, 33, 7, 255, 78, 30, 5, 255, 76, 33, 5, 255, 66, 35, 4, 255, 68, 32, 3, 255, 74, 28, 1, 255, 74, 31, 4, 255, 65, 27, 1, 255, 69, 30, 3, 255, 70, 30, 4, 255, 70, 30, 5, 255, 69, 29, 4, 255, 73, 29, 2, 255, 65, 22, 4, 255, 71, 28, 4, 255, 74, 29, 1, 255, 74, 29, 4, 255, 77, 28, 1, 255, 81, 27, 1, 255, 85, 29, 5, 255, 83, 34, 3, 255, 79, 31, 3, 255, 75, 29, 3, 255, 76, 31, 4, 255, 77, 31, 1, 255, 78, 31, 1, 255, 76, 32, 2, 255, 79, 32, 4, 255, 74, 31, 2, 255, 73, 30, 2, 255, 81, 30, 5, 255, 78, 29, 5, 255, 73, 28, 0, 255, 77, 31, 0, 255, 81, 30, 2, 255, 78, 26, 3, 255, 73, 24, 2, 255, 74, 27, 4, 255, 73, 26, 4, 255, 69, 26, 5, 255, 64, 27, 5, 255, 63, 21, 3, 255, 68, 23, 5, 255, 64, 23, 4, 255, 67, 26, 5, 255, 76, 25, 4, 255, 87, 28, 2, 255, 94, 30, 1, 255, 74, 27, 1, 255, 69, 21, 4, 255, 88, 27, 8, 255, 76, 26, 3, 255, 64, 22, 1, 255, 68, 22, 5, 255, 70, 23, 4, 255, 68, 22, 3, 255, 65, 24, 5, 255, 62, 23, 4, 255, 64, 22, 5, 255, 59, 22, 3, 255, 63, 21, 4, 255, 65, 22, 5, 255, 60, 23, 4, 255, 60, 20, 1, 255, 50, 19, 2, 255, 56, 18, 1, 255, 60, 18, 0, 255, 52, 23, 2, 255, 55, 20, 4, 255, 63, 19, 5, 255, 60, 20, 3, 255, 56, 18, 2, 255, 51, 22, 1, 255, 62, 20, 3, 255, 59, 14, 0, 255, 63, 17, 2, 255, 60, 22, 2, 255, 62, 18, 1, 255, 65, 20, 5, 255, 63, 18, 4, 255, 57, 21, 2, 255, 55, 21, 2, 255, 54, 19, 3, 255, 44, 19, 1, 255, 50, 18, 0, 255, 54, 13, 1, 255, 54, 19, 7, 255, 48, 17, 6, 255, 48, 17, 6, 255, 42, 13, 3, 255, 51, 13, 5, 255, 53, 15, 5, 255, 51, 15, 4, 255, 50, 15, 4, 255, 43, 14, 3, 255, 40, 15, 3, 255, 42, 16, 4, 255, 46, 16, 5, 255, 51, 15, 3, 255, 53, 14, 2, 255, 52, 17, 0, 255, 63, 22, 4, 255, 73, 18, 3, 255, 79, 18, 2, 255, 84, 19, 2, 255, 79, 17, 3, 255, 51, 14, 1, 255, 43, 14, 2, 255, 50, 18, 3, 255, 47, 14, 1, 255, 52, 16, 4, 255, 51, 14, 3, 255, 54, 14, 1, 255, 55, 15, 0, 255, 54, 16, 0, 255, 54, 14, 1, 255, 56, 15, 3, 255, 59, 14, 1, 255, 63, 15, 0, 255, 65, 17, 4, 255, 61, 16, 3, 255, 56, 14, 2, 255, 50, 16, 4, 255, 52, 13, 5, 255, 55, 13, 3, 255, 61, 17, 4, 255, 62, 14, 0, 255, 59, 11, 2, 255, 56, 14, 5, 255, 58, 14, 3, 255, 64, 14, 1, 255, 67, 17, 1, 255, 68, 19, 1, 255, 68, 16, 0, 255, 70, 14, 2, 255, 66, 14, 3, 255, 60, 15, 3, 255, 53, 16, 4, 255, 46, 13, 1, 255, 52, 13, 3, 255, 56, 10, 2, 255, 55, 12, 2, 255, 52, 13, 2, 255, 55, 15, 6, 255, 34, 9, 1, 255, 31, 10, 2, 255, 52, 13, 6, 255, 55, 13, 3, 255, 56, 16, 7, 255, 49, 10, 6, 255, 34, 8, 3, 255, 31, 9, 2, 255, 34, 10, 1, 255, 32, 10, 0, 255, 34, 8, 1, 255, 30, 9, 0, 255, 42, 11, 4, 255, 43, 10, 4, 255, 40, 6, 3, 255, 30, 5, 3, 255, 29, 8, 4, 255, 32, 9, 3, 255, 31, 9, 1, 255, 43, 8, 2, 255, 45, 10, 1, 255, 51, 15, 6, 255, 49, 14, 4, 255, 46, 14, 2, 255, 42, 11, 3, 255, 37, 7, 2, 255, 5, 1, 1, 255, 5, 1, 0, 255, 6, 0, 1, 255, 7, 3, 2, 255, 6, 2, 1, 255, 9, 3, 0, 255, 11, 2, 2, 255, 7, 1, 1, 255, 7, 1, 1, 255, 8, 2, 2, 255, 6, 1, 0, 255, 8, 1, 0, 255, 11, 3, 0, 255, 12, 3, 1, 255, 12, 5, 2, 255, 10, 2, 1, 255, 14, 4, 3, 255, 13, 5, 2, 255, 10, 7, 4, 255, 11, 3, 1, 255, 14, 4, 2, 255, 16, 6, 3, 255, 15, 6, 3, 255, 13, 5, 2, 255, 11, 3, 1, 255, 14, 7, 4, 255, 15, 4, 2, 255, 13, 5, 2, 255, 12, 4, 1, 255, 13, 4, 2, 255, 17, 7, 3, 255, 15, 8, 1, 255, 14, 7, 1, 255, 15, 6, 1, 255, 19, 9, 4, 255, 20, 9, 5, 255, 18, 7, 3, 255, 18, 9, 2, 255, 17, 8, 1, 255, 18, 9, 3, 255, 17, 9, 2, 255, 20, 10, 3, 255, 18, 8, 2, 255, 15, 8, 1, 255, 17, 12, 3, 255, 24, 13, 2, 255, 22, 12, 2, 255, 23, 13, 3, 255, 27, 14, 5, 255, 26, 11, 2, 255, 31, 12, 3, 255, 31, 10, 5, 255, 31, 13, 3, 255, 28, 14, 0, 255, 30, 13, 5, 255, 32, 11, 9, 255, 24, 12, 2, 255, 28, 15, 1, 255, 27, 15, 4, 255, 34, 12, 5, 255, 36, 13, 6, 255, 26, 13, 1, 255, 26, 17, 3, 255, 29, 13, 2, 255, 31, 18, 2, 255, 24, 14, 3, 255, 37, 18, 5, 255, 42, 17, 2, 255, 33, 17, 2, 255, 28, 18, 3, 255, 35, 19, 2, 255, 33, 14, 3, 255, 34, 17, 6, 255, 35, 19, 2, 255, 36, 18, 3, 255, 40, 20, 3, 255, 43, 22, 1, 255, 44, 18, 3, 255, 39, 22, 0, 255, 43, 21, 1, 255, 55, 20, 7, 255, 50, 18, 6, 255, 44, 21, 3, 255, 38, 23, 0, 255, 43, 23, 3, 255, 45, 26, 3, 255, 43, 21, 1, 255, 45, 21, 3, 255, 48, 25, 3, 255, 49, 18, 3, 255, 48, 23, 6, 255, 43, 26, 3, 255, 48, 24, 1, 255, 44, 22, 0, 255, 41, 22, 2, 255, 48, 23, 2, 255, 47, 21, 5, 255, 46, 22, 4, 255, 47, 24, 5, 255, 47, 24, 1, 255, 51, 25, 2, 255, 57, 28, 2, 255, 56, 28, 4, 255, 49, 26, 4, 255, 54, 26, 5, 255, 56, 26, 5, 255, 51, 24, 3, 255, 47, 20, 3, 255, 45, 24, 6, 255, 47, 26, 4, 255, 49, 24, 3, 255, 46, 22, 1, 255, 42, 25, 1, 255, 42, 23, 3, 255, 49, 21, 7, 255, 48, 26, 5, 255, 47, 26, 3, 255, 55, 28, 6, 255, 48, 26, 3, 255, 43, 24, 1, 255, 49, 26, 6, 255, 51, 28, 6, 255, 52, 32, 4, 255, 47, 28, 2, 255, 53, 25, 3, 255, 56, 28, 6, 255, 53, 31, 7, 255, 51, 27, 3, 255, 59, 29, 0, 255, 59, 31, 4, 255, 59, 27, 5, 255, 59, 26, 4, 255, 61, 32, 6, 255, 55, 31, 3, 255, 59, 31, 9, 255, 58, 32, 6, 255, 61, 39, 13, 255, 58, 37, 7, 255, 63, 43, 11, 255, 55, 42, 19, 255, 54, 44, 24, 255, 64, 50, 18, 255, 66, 53, 20, 255, 65, 53, 27, 255, 66, 59, 30, 255, 64, 62, 29, 255, 63, 62, 29, 255, 69, 69, 45, 255, 68, 67, 52, 255, 68, 70, 43, 255, 73, 74, 55, 255, 74, 76, 59, 255, 73, 81, 62, 255, 77, 88, 65, 255, 79, 89, 65, 255, 83, 93, 68, 255, 83, 97, 77, 255, 86, 104, 83, 255, 85, 109, 80, 255, 89, 112, 83, 255, 91, 117, 95, 255, 90, 121, 98, 255, 92, 127, 103, 255, 91, 132, 106, 255, 91, 133, 108, 255, 93, 136, 112, 255, 98, 139, 115, 255, 101, 143, 119, 255, 100, 144, 118, 255, 102, 145, 118, 255, 107, 148, 121, 255, 105, 147, 118, 255, 103, 147, 116, 255, 101, 146, 116, 255, 99, 144, 113, 255, 97, 141, 107, 255, 98, 141, 106, 255, 97, 139, 103, 255, 98, 137, 101, 255, 95, 130, 97, 255, 99, 127, 100, 255, 99, 124, 97, 255, 92, 119, 89, 255, 96, 117, 83, 255, 96, 114, 71, 255, 94, 108, 67, 255, 94, 98, 72, 255, 91, 96, 67, 255, 88, 96, 50, 255, 85, 94, 39, 255, 80, 85, 54, 255, 81, 81, 56, 255, 86, 87, 26, 255, 83, 80, 40, 255, 83, 75, 40, 255, 80, 70, 31, 255, 80, 67, 35, 255, 73, 65, 23, 255, 74, 61, 20, 255, 81, 65, 13, 255, 79, 59, 23, 255, 70, 56, 20, 255, 79, 62, 14, 255, 82, 57, 7, 255, 81, 52, 12, 255, 84, 53, 8, 255, 78, 51, 15, 255, 77, 48, 9, 255, 80, 46, 5, 255, 82, 46, 11, 255, 73, 43, 8, 255, 76, 43, 3, 255, 71, 38, 9, 255, 69, 40, 8, 255, 72, 45, 4, 255, 74, 41, 10, 255, 75, 38, 10, 255, 77, 38, 2, 255, 74, 37, 3, 255, 73, 37, 9, 255, 77, 35, 10, 255, 77, 33, 5, 255, 71, 31, 4, 255, 67, 33, 9, 255, 73, 36, 4, 255, 78, 33, 4, 255, 72, 33, 3, 255, 69, 32, 3, 255, 75, 31, 5, 255, 75, 36, 5, 255, 72, 34, 7, 255, 75, 29, 6, 255, 72, 30, 2, 255, 67, 36, 4, 255, 68, 34, 5, 255, 72, 28, 1, 255, 75, 29, 4, 255, 70, 33, 6, 255, 68, 29, 3, 255, 73, 30, 6, 255, 71, 29, 5, 255, 67, 30, 4, 255, 73, 31, 6, 255, 68, 28, 9, 255, 73, 28, 5, 255, 74, 31, 2, 255, 74, 32, 3, 255, 79, 31, 2, 255, 86, 30, 6, 255, 83, 32, 5, 255, 78, 32, 1, 255, 76, 30, 0, 255, 76, 31, 2, 255, 78, 33, 4, 255, 74, 29, 1, 255, 76, 31, 5, 255, 76, 31, 3, 255, 76, 31, 2, 255, 72, 29, 1, 255, 72, 28, 2, 255, 74, 28, 2, 255, 74, 26, 4, 255, 73, 28, 1, 255, 85, 33, 4, 255, 91, 31, 3, 255, 86, 29, 4, 255, 73, 26, 1, 255, 70, 29, 3, 255, 73, 29, 5, 255, 70, 26, 2, 255, 67, 28, 1, 255, 67, 23, 3, 255, 76, 25, 2, 255, 75, 25, 5, 255, 70, 24, 3, 255, 67, 25, 2, 255, 67, 24, 6, 255, 78, 27, 7, 255, 72, 23, 3, 255, 64, 21, 8, 255, 65, 20, 7, 255, 64, 19, 1, 255, 65, 22, 1, 255, 66, 21, 3, 255, 65, 22, 2, 255, 65, 25, 5, 255, 65, 24, 5, 255, 66, 24, 3, 255, 56, 24, 3, 255, 57, 23, 3, 255, 61, 21, 3, 255, 64, 21, 4, 255, 65, 22, 5, 255, 64, 19, 2, 255, 57, 20, 1, 255, 58, 22, 3, 255, 62, 23, 4, 255, 56, 24, 3, 255, 60, 22, 4, 255, 60, 19, 5, 255, 51, 19, 3, 255, 64, 22, 3, 255, 64, 18, 1, 255, 56, 21, 1, 255, 60, 20, 4, 255, 61, 15, 3, 255, 63, 24, 7, 255, 61, 23, 2, 255, 61, 17, 1, 255, 58, 16, 1, 255, 51, 19, 0, 255, 61, 18, 1, 255, 60, 13, 1, 255, 56, 19, 2, 255, 62, 21, 3, 255, 58, 15, 4, 255, 51, 16, 4, 255, 50, 16, 4, 255, 52, 16, 5, 255, 47, 16, 6, 255, 35, 18, 2, 255, 49, 17, 4, 255, 56, 15, 3, 255, 50, 16, 4, 255, 46, 18, 6, 255, 44, 16, 4, 255, 44, 17, 4, 255, 49, 18, 7, 255, 52, 14, 3, 255, 53, 15, 2, 255, 53, 16, 3, 255, 60, 18, 3, 255, 63, 17, 2, 255, 55, 17, 1, 255, 70, 19, 4, 255, 64, 20, 4, 255, 49, 16, 2, 255, 61, 12, 6, 255, 48, 20, 5, 255, 52, 17, 1, 255, 63, 18, 4, 255, 56, 14, 1, 255, 58, 13, 3, 255, 58, 13, 4, 255, 56, 15, 5, 255, 58, 14, 4, 255, 59, 16, 3, 255, 62, 15, 2, 255, 61, 13, 0, 255, 62, 16, 0, 255, 58, 16, 1, 255, 54, 15, 2, 255, 51, 13, 4, 255, 55, 15, 6, 255, 52, 14, 2, 255, 56, 14, 2, 255, 56, 13, 2, 255, 57, 14, 2, 255, 68, 15, 5, 255, 69, 15, 3, 255, 65, 16, 1, 255, 67, 14, 0, 255, 72, 16, 2, 255, 68, 16, 2, 255, 63, 15, 0, 255, 57, 15, 3, 255, 53, 12, 2, 255, 50, 13, 0, 255, 51, 15, 1, 255, 57, 14, 3, 255, 60, 11, 1, 255, 65, 15, 2, 255, 60, 15, 1, 255, 58, 14, 3, 255, 41, 9, 0, 255, 37, 9, 2, 255, 42, 9, 3, 255, 41, 10, 2, 255, 42, 11, 4, 255, 41, 12, 8, 255, 33, 5, 2, 255, 31, 12, 5, 255, 29, 9, 3, 255, 35, 5, 1, 255, 38, 9, 2, 255, 41, 10, 4, 255, 45, 11, 4, 255, 40, 10, 1, 255, 41, 12, 3, 255, 35, 11, 3, 255, 34, 9, 4, 255, 35, 6, 2, 255, 38, 12, 4, 255, 44, 11, 3, 255, 49, 7, 0, 255, 49, 11, 3, 255, 41, 12, 0, 255, 48, 11, 1, 255, 49, 12, 2, 255, 49, 11, 3, 255, 5, 1, 0, 255, 6, 0, 0, 255, 7, 1, 1, 255, 4, 0, 0, 255, 4, 1, 0, 255, 8, 2, 0, 255, 11, 2, 3, 255, 10, 0, 2, 255, 7, 1, 1, 255, 9, 3, 3, 255, 9, 3, 2, 255, 9, 4, 1, 255, 13, 5, 2, 255, 8, 2, 0, 255, 9, 5, 2, 255, 14, 6, 4, 255, 14, 3, 2, 255, 15, 5, 3, 255, 9, 2, 1, 255, 10, 3, 1, 255, 11, 3, 1, 255, 13, 2, 1, 255, 15, 5, 3, 255, 15, 4, 3, 255, 10, 4, 1, 255, 15, 8, 5, 255, 16, 5, 3, 255, 12, 3, 2, 255, 13, 4, 2, 255, 14, 5, 3, 255, 14, 7, 4, 255, 11, 6, 1, 255, 15, 7, 0, 255, 19, 9, 4, 255, 20, 9, 6, 255, 16, 5, 2, 255, 17, 8, 3, 255, 18, 11, 4, 255, 16, 9, 1, 255, 15, 7, 0, 255, 16, 9, 2, 255, 19, 8, 3, 255, 20, 6, 4, 255, 20, 10, 6, 255, 19, 10, 4, 255, 28, 14, 5, 255, 22, 10, 2, 255, 24, 10, 4, 255, 21, 9, 3, 255, 24, 10, 3, 255, 29, 12, 4, 255, 25, 14, 6, 255, 32, 13, 4, 255, 29, 13, 3, 255, 20, 13, 2, 255, 26, 11, 3, 255, 23, 14, 3, 255, 29, 12, 1, 255, 25, 15, 1, 255, 27, 17, 5, 255, 36, 15, 5, 255, 33, 15, 2, 255, 30, 16, 1, 255, 39, 13, 4, 255, 32, 15, 5, 255, 27, 15, 5, 255, 27, 14, 2, 255, 33, 17, 1, 255, 35, 19, 2, 255, 36, 19, 4, 255, 34, 17, 3, 255, 30, 17, 2, 255, 27, 16, 3, 255, 27, 15, 4, 255, 34, 17, 4, 255, 35, 16, 0, 255, 37, 20, 3, 255, 34, 20, 4, 255, 45, 20, 4, 255, 47, 20, 3, 255, 41, 18, 4, 255, 37, 18, 4, 255, 36, 22, 2, 255, 39, 22, 3, 255, 44, 20, 7, 255, 40, 21, 1, 255, 44, 24, 6, 255, 44, 22, 3, 255, 49, 26, 3, 255, 45, 19, 4, 255, 42, 20, 1, 255, 49, 23, 1, 255, 52, 20, 4, 255, 48, 21, 3, 255, 48, 26, 2, 255, 51, 26, 3, 255, 50, 25, 1, 255, 52, 25, 4, 255, 51, 23, 2, 255, 53, 24, 4, 255, 54, 25, 5, 255, 51, 23, 1, 255, 45, 22, 2, 255, 44, 26, 3, 255, 53, 27, 3, 255, 52, 23, 2, 255, 50, 24, 4, 255, 48, 22, 1, 255, 42, 23, 1, 255, 44, 25, 1, 255, 45, 25, 1, 255, 45, 25, 4, 255, 45, 26, 5, 255, 44, 22, 4, 255, 49, 22, 6, 255, 43, 24, 3, 255, 44, 27, 3, 255, 53, 27, 4, 255, 48, 26, 1, 255, 46, 26, 2, 255, 49, 26, 3, 255, 51, 27, 2, 255, 55, 29, 1, 255, 53, 31, 3, 255, 50, 29, 5, 255, 53, 27, 6, 255, 56, 26, 7, 255, 54, 26, 4, 255, 54, 32, 3, 255, 57, 29, 4, 255, 56, 27, 3, 255, 60, 30, 5, 255, 65, 30, 7, 255, 58, 29, 6, 255, 52, 33, 12, 255, 59, 41, 7, 255, 59, 34, 9, 255, 61, 38, 4, 255, 57, 36, 16, 255, 55, 39, 17, 255, 62, 48, 12, 255, 67, 53, 9, 255, 69, 54, 26, 255, 65, 54, 24, 255, 62, 57, 30, 255, 61, 60, 35, 255, 67, 67, 37, 255, 70, 70, 42, 255, 70, 74, 42, 255, 70, 73, 43, 255, 72, 74, 55, 255, 76, 80, 57, 255, 76, 83, 61, 255, 79, 87, 69, 255, 82, 90, 65, 255, 84, 94, 68, 255, 87, 102, 84, 255, 82, 105, 86, 255, 86, 112, 85, 255, 91, 115, 89, 255, 87, 120, 98, 255, 88, 122, 97, 255, 93, 130, 104, 255, 94, 136, 113, 255, 96, 138, 117, 255, 97, 141, 116, 255, 99, 143, 117, 255, 99, 145, 122, 255, 103, 149, 126, 255, 103, 148, 126, 255, 104, 147, 123, 255, 105, 148, 121, 255, 103, 149, 120, 255, 103, 148, 120, 255, 100, 144, 115, 255, 103, 144, 116, 255, 103, 143, 112, 255, 102, 139, 107, 255, 100, 134, 102, 255, 97, 127, 100, 255, 102, 127, 97, 255, 96, 122, 93, 255, 88, 117, 82, 255, 93, 114, 77, 255, 94, 106, 78, 255, 94, 106, 67, 255, 93, 102, 59, 255, 91, 98, 61, 255, 87, 92, 59, 255, 81, 87, 49, 255, 81, 83, 48, 255, 85, 85, 36, 255, 84, 81, 27, 255, 78, 75, 32, 255, 80, 73, 40, 255, 80, 69, 30, 255, 76, 63, 31, 255, 74, 62, 24, 255, 75, 67, 18, 255, 81, 63, 12, 255, 78, 60, 28, 255, 68, 54, 27, 255, 80, 60, 6, 255, 77, 55, 10, 255, 76, 50, 20, 255, 77, 48, 5, 255, 79, 47, 10, 255, 76, 44, 10, 255, 77, 43, 13, 255, 70, 38, 11, 255, 69, 40, 12, 255, 76, 40, 9, 255, 73, 42, 5, 255, 70, 45, 7, 255, 67, 40, 7, 255, 68, 36, 5, 255, 75, 35, 5, 255, 76, 33, 3, 255, 76, 38, 7, 255, 76, 40, 8, 255, 75, 37, 6, 255, 80, 35, 8, 255, 73, 33, 5, 255, 69, 35, 5, 255, 74, 37, 6, 255, 79, 33, 5, 255, 73, 34, 6, 255, 66, 33, 4, 255, 75, 31, 3, 255, 76, 34, 3, 255, 68, 34, 4, 255, 73, 32, 6, 255, 78, 29, 3, 255, 76, 30, 5, 255, 71, 28, 6, 255, 71, 28, 7, 255, 73, 28, 5, 255, 70, 29, 3, 255, 72, 29, 4, 255, 80, 29, 6, 255, 75, 27, 6, 255, 64, 29, 4, 255, 65, 29, 2, 255, 67, 28, 2, 255, 74, 27, 4, 255, 70, 25, 0, 255, 70, 30, 3, 255, 78, 29, 9, 255, 85, 29, 3, 255, 82, 33, 1, 255, 77, 32, 2, 255, 77, 29, 0, 255, 81, 33, 2, 255, 79, 31, 3, 255, 74, 25, 2, 255, 72, 25, 4, 255, 77, 30, 4, 255, 75, 29, 4, 255, 77, 30, 5, 255, 76, 28, 5, 255, 72, 28, 3, 255, 76, 28, 4, 255, 78, 27, 6, 255, 75, 27, 3, 255, 76, 30, 0, 255, 79, 30, 1, 255, 79, 26, 3, 255, 76, 25, 5, 255, 72, 24, 4, 255, 70, 26, 7, 255, 70, 25, 4, 255, 72, 24, 2, 255, 72, 25, 4, 255, 67, 25, 2, 255, 67, 24, 1, 255, 73, 26, 5, 255, 74, 23, 7, 255, 65, 20, 3, 255, 66, 21, 1, 255, 64, 19, 2, 255, 59, 19, 3, 255, 66, 23, 5, 255, 65, 20, 2, 255, 69, 21, 6, 255, 67, 22, 3, 255, 61, 20, 4, 255, 62, 20, 4, 255, 66, 23, 1, 255, 64, 24, 6, 255, 66, 20, 4, 255, 66, 20, 4, 255, 64, 20, 4, 255, 64, 18, 1, 255, 61, 20, 2, 255, 61, 20, 3, 255, 53, 19, 0, 255, 52, 20, 1, 255, 64, 19, 4, 255, 63, 22, 5, 255, 49, 15, 3, 255, 53, 19, 9, 255, 52, 18, 3, 255, 59, 19, 1, 255, 55, 21, 1, 255, 58, 20, 5, 255, 67, 15, 5, 255, 69, 15, 2, 255, 64, 18, 3, 255, 59, 14, 2, 255, 57, 16, 5, 255, 47, 17, 2, 255, 55, 21, 1, 255, 59, 18, 1, 255, 56, 18, 1, 255, 59, 18, 2, 255, 53, 14, 3, 255, 44, 15, 3, 255, 50, 18, 4, 255, 55, 17, 1, 255, 54, 18, 4, 255, 44, 15, 4, 255, 49, 15, 2, 255, 51, 13, 1, 255, 49, 17, 6, 255, 45, 16, 5, 255, 46, 15, 3, 255, 44, 15, 4, 255, 43, 11, 1, 255, 49, 14, 3, 255, 48, 14, 3, 255, 47, 12, 5, 255, 52, 14, 6, 255, 54, 14, 5, 255, 42, 10, 3, 255, 44, 12, 3, 255, 50, 14, 4, 255, 39, 15, 2, 255, 52, 13, 2, 255, 45, 14, 3, 255, 48, 16, 3, 255, 59, 18, 6, 255, 50, 15, 1, 255, 57, 17, 5, 255, 56, 14, 3, 255, 56, 16, 3, 255, 59, 14, 4, 255, 58, 13, 3, 255, 65, 20, 5, 255, 67, 19, 3, 255, 62, 17, 2, 255, 65, 21, 7, 255, 56, 13, 4, 255, 56, 12, 6, 255, 57, 15, 2, 255, 52, 17, 2, 255, 53, 11, 2, 255, 55, 14, 4, 255, 61, 18, 2, 255, 71, 15, 1, 255, 74, 16, 3, 255, 68, 13, 1, 255, 64, 15, 2, 255, 60, 14, 1, 255, 60, 17, 3, 255, 52, 12, 0, 255, 49, 12, 3, 255, 50, 13, 3, 255, 47, 13, 1, 255, 49, 17, 5, 255, 53, 14, 2, 255, 61, 13, 4, 255, 61, 11, 2, 255, 64, 15, 1, 255, 64, 14, 0, 255, 50, 12, 3, 255, 37, 7, 4, 255, 35, 7, 2, 255, 38, 14, 2, 255, 39, 15, 4, 255, 32, 9, 2, 255, 32, 10, 3, 255, 31, 9, 1, 255, 32, 8, 2, 255, 33, 7, 4, 255, 29, 10, 5, 255, 30, 9, 2, 255, 32, 10, 0, 255, 54, 15, 4, 255, 56, 11, 0, 255, 56, 11, 2, 255, 45, 8, 4, 255, 42, 9, 7, 255, 44, 12, 6, 255, 36, 12, 1, 255, 47, 12, 4, 255, 51, 14, 5, 255, 41, 11, 2, 255, 39, 10, 5, 255, 45, 12, 5, 255, 48, 8, 1, 255, 7, 2, 1, 255, 7, 2, 1, 255, 8, 3, 3, 255, 6, 0, 0, 255, 11, 3, 2, 255, 12, 4, 2, 255, 8, 2, 1, 255, 8, 1, 2, 255, 10, 1, 2, 255, 8, 1, 2, 255, 7, 3, 1, 255, 9, 4, 1, 255, 11, 3, 1, 255, 9, 3, 0, 255, 11, 4, 1, 255, 12, 5, 2, 255, 8, 2, 0, 255, 9, 3, 1, 255, 10, 2, 0, 255, 13, 5, 3, 255, 13, 3, 1, 255, 12, 1, 0, 255, 13, 3, 1, 255, 12, 3, 1, 255, 12, 3, 2, 255, 14, 5, 4, 255, 15, 3, 3, 255, 13, 3, 2, 255, 15, 5, 4, 255, 16, 5, 1, 255, 14, 6, 2, 255, 13, 6, 2, 255, 17, 6, 2, 255, 15, 6, 1, 255, 16, 7, 1, 255, 16, 5, 0, 255, 18, 8, 4, 255, 15, 7, 2, 255, 15, 8, 3, 255, 16, 9, 3, 255, 18, 10, 4, 255, 20, 9, 4, 255, 21, 9, 4, 255, 18, 8, 3, 255, 19, 11, 4, 255, 22, 10, 1, 255, 23, 9, 3, 255, 25, 8, 3, 255, 23, 7, 1, 255, 23, 10, 2, 255, 17, 11, 1, 255, 20, 11, 0, 255, 24, 10, 2, 255, 29, 14, 6, 255, 25, 13, 2, 255, 24, 13, 1, 255, 26, 15, 3, 255, 32, 12, 5, 255, 27, 16, 5, 255, 23, 15, 1, 255, 30, 12, 0, 255, 32, 13, 1, 255, 31, 18, 4, 255, 35, 15, 3, 255, 27, 12, 2, 255, 29, 13, 3, 255, 29, 14, 4, 255, 28, 13, 3, 255, 30, 15, 3, 255, 29, 14, 4, 255, 30, 17, 6, 255, 29, 17, 2, 255, 32, 17, 3, 255, 32, 14, 4, 255, 35, 17, 5, 255, 35, 16, 2, 255, 37, 19, 4, 255, 33, 22, 3, 255, 36, 20, 4, 255, 38, 16, 1, 255, 39, 19, 4, 255, 37, 19, 4, 255, 36, 22, 4, 255, 43, 20, 3, 255, 44, 21, 6, 255, 42, 24, 8, 255, 37, 15, 2, 255, 43, 19, 5, 255, 45, 23, 4, 255, 40, 21, 3, 255, 38, 22, 2, 255, 51, 23, 5, 255, 58, 20, 5, 255, 45, 21, 3, 255, 37, 24, 3, 255, 48, 23, 2, 255, 51, 25, 4, 255, 51, 24, 6, 255, 55, 20, 4, 255, 55, 21, 5, 255, 51, 18, 1, 255, 47, 20, 3, 255, 45, 23, 7, 255, 47, 25, 7, 255, 48, 23, 3, 255, 50, 20, 1, 255, 49, 22, 4, 255, 46, 21, 4, 255, 49, 28, 7, 255, 54, 24, 3, 255, 49, 22, 1, 255, 44, 26, 2, 255, 41, 23, 2, 255, 51, 26, 6, 255, 48, 25, 4, 255, 44, 24, 5, 255, 45, 27, 5, 255, 45, 26, 1, 255, 49, 27, 2, 255, 53, 29, 5, 255, 49, 26, 5, 255, 48, 28, 3, 255, 54, 27, 3, 255, 54, 26, 6, 255, 51, 28, 4, 255, 52, 28, 3, 255, 56, 27, 7, 255, 54, 27, 6, 255, 56, 28, 8, 255, 56, 27, 6, 255, 52, 30, 8, 255, 49, 31, 1, 255, 60, 32, 8, 255, 60, 28, 9, 255, 66, 33, 7, 255, 66, 40, 3, 255, 54, 34, 5, 255, 62, 39, 11, 255, 57, 35, 18, 255, 59, 43, 18, 255, 59, 48, 14, 255, 66, 51, 16, 255, 71, 52, 23, 255, 70, 55, 27, 255, 69, 56, 36, 255, 64, 62, 33, 255, 66, 68, 38, 255, 68, 66, 42, 255, 72, 74, 43, 255, 71, 73, 54, 255, 75, 77, 62, 255, 79, 82, 62, 255, 79, 84, 64, 255, 83, 89, 72, 255, 87, 95, 69, 255, 90, 100, 76, 255, 88, 104, 84, 255, 84, 106, 87, 255, 87, 115, 92, 255, 90, 119, 96, 255, 89, 121, 100, 255, 89, 128, 101, 255, 93, 136, 107, 255, 94, 137, 116, 255, 95, 141, 123, 255, 99, 145, 123, 255, 102, 147, 123, 255, 100, 147, 125, 255, 100, 149, 127, 255, 104, 150, 129, 255, 104, 151, 126, 255, 103, 149, 121, 255, 103, 149, 121, 255, 105, 148, 120, 255, 99, 146, 115, 255, 99, 145, 113, 255, 102, 141, 108, 255, 102, 134, 103, 255, 99, 132, 100, 255, 101, 129, 96, 255, 99, 126, 86, 255, 94, 123, 83, 255, 92, 118, 76, 255, 95, 110, 78, 255, 93, 102, 77, 255, 94, 103, 74, 255, 90, 99, 57, 255, 87, 93, 49, 255, 87, 89, 59, 255, 85, 85, 52, 255, 83, 80, 49, 255, 83, 79, 41, 255, 82, 78, 43, 255, 81, 76, 24, 255, 75, 73, 23, 255, 71, 67, 29, 255, 75, 64, 24, 255, 78, 63, 21, 255, 77, 65, 18, 255, 75, 60, 16, 255, 77, 59, 23, 255, 78, 61, 8, 255, 79, 54, 14, 255, 76, 55, 7, 255, 70, 51, 7, 255, 70, 47, 12, 255, 71, 45, 12, 255, 73, 41, 14, 255, 68, 43, 20, 255, 69, 50, 11, 255, 74, 41, 4, 255, 74, 37, 10, 255, 73, 40, 7, 255, 72, 41, 6, 255, 69, 36, 5, 255, 78, 34, 6, 255, 75, 37, 5, 255, 77, 37, 8, 255, 72, 33, 5, 255, 71, 37, 3, 255, 68, 33, 4, 255, 73, 32, 8, 255, 72, 34, 4, 255, 70, 38, 2, 255, 79, 37, 8, 255, 76, 31, 5, 255, 71, 35, 3, 255, 73, 36, 6, 255, 75, 30, 5, 255, 75, 31, 4, 255, 70, 34, 7, 255, 71, 32, 3, 255, 78, 32, 4, 255, 78, 30, 5, 255, 71, 26, 3, 255, 70, 33, 9, 255, 68, 32, 1, 255, 71, 25, 1, 255, 70, 34, 6, 255, 71, 27, 2, 255, 70, 25, 3, 255, 70, 29, 5, 255, 71, 27, 3, 255, 68, 29, 2, 255, 68, 25, 3, 255, 73, 27, 6, 255, 75, 27, 3, 255, 82, 28, 2, 255, 88, 30, 3, 255, 83, 27, 0, 255, 81, 28, 2, 255, 79, 31, 2, 255, 78, 31, 2, 255, 78, 32, 2, 255, 73, 29, 2, 255, 78, 29, 6, 255, 77, 23, 2, 255, 81, 30, 7, 255, 78, 30, 4, 255, 76, 28, 2, 255, 74, 29, 4, 255, 73, 28, 5, 255, 78, 25, 4, 255, 74, 26, 4, 255, 70, 28, 3, 255, 78, 28, 3, 255, 78, 25, 2, 255, 74, 28, 4, 255, 72, 27, 2, 255, 65, 23, 5, 255, 65, 24, 5, 255, 68, 22, 2, 255, 67, 26, 5, 255, 65, 24, 1, 255, 68, 25, 2, 255, 66, 21, 5, 255, 75, 22, 7, 255, 68, 20, 3, 255, 65, 24, 5, 255, 64, 22, 6, 255, 65, 23, 5, 255, 67, 23, 5, 255, 63, 20, 4, 255, 67, 21, 9, 255, 62, 21, 3, 255, 64, 21, 6, 255, 62, 19, 7, 255, 69, 19, 4, 255, 63, 22, 3, 255, 59, 20, 2, 255, 65, 19, 2, 255, 68, 21, 6, 255, 57, 18, 4, 255, 55, 19, 1, 255, 60, 23, 4, 255, 54, 22, 3, 255, 51, 18, 3, 255, 55, 16, 3, 255, 60, 21, 8, 255, 57, 20, 6, 255, 55, 16, 4, 255, 54, 20, 4, 255, 55, 22, 3, 255, 55, 20, 2, 255, 52, 18, 5, 255, 60, 22, 7, 255, 66, 22, 2, 255, 59, 17, 3, 255, 52, 15, 6, 255, 57, 16, 6, 255, 54, 19, 2, 255, 50, 17, 3, 255, 51, 15, 2, 255, 52, 20, 3, 255, 52, 17, 6, 255, 48, 15, 9, 255, 55, 19, 5, 255, 59, 24, 2, 255, 54, 18, 3, 255, 42, 15, 3, 255, 51, 14, 6, 255, 56, 14, 5, 255, 47, 11, 0, 255, 41, 14, 3, 255, 40, 13, 2, 255, 45, 14, 3, 255, 43, 12, 2, 255, 43, 12, 2, 255, 44, 13, 1, 255, 41, 14, 1, 255, 45, 13, 3, 255, 58, 17, 6, 255, 53, 16, 3, 255, 46, 14, 5, 255, 41, 11, 4, 255, 47, 13, 6, 255, 49, 15, 5, 255, 37, 12, 1, 255, 47, 15, 7, 255, 45, 12, 2, 255, 45, 13, 4, 255, 45, 15, 4, 255, 50, 17, 0, 255, 53, 15, 4, 255, 49, 15, 3, 255, 52, 16, 0, 255, 55, 11, 0, 255, 74, 22, 6, 255, 73, 22, 3, 255, 65, 17, 1, 255, 61, 17, 2, 255, 58, 15, 2, 255, 59, 16, 5, 255, 56, 13, 0, 255, 52, 14, 1, 255, 55, 14, 5, 255, 59, 13, 4, 255, 56, 15, 1, 255, 64, 17, 1, 255, 70, 16, 4, 255, 64, 12, 2, 255, 59, 12, 1, 255, 53, 14, 0, 255, 51, 16, 2, 255, 50, 12, 2, 255, 53, 14, 3, 255, 52, 14, 4, 255, 44, 11, 1, 255, 37, 15, 3, 255, 46, 14, 4, 255, 55, 9, 2, 255, 58, 8, 2, 255, 56, 14, 4, 255, 59, 16, 4, 255, 55, 16, 6, 255, 39, 9, 1, 255, 36, 10, 2, 255, 34, 9, 1, 255, 40, 11, 3, 255, 44, 12, 3, 255, 39, 9, 2, 255, 31, 4, 1, 255, 32, 7, 6, 255, 25, 6, 5, 255, 26, 5, 4, 255, 25, 4, 2, 255, 29, 7, 3, 255, 46, 11, 8, 255, 49, 9, 4, 255, 51, 8, 3, 255, 36, 9, 3, 255, 27, 7, 2, 255, 39, 9, 4, 255, 44, 10, 3, 255, 46, 11, 2, 255, 42, 11, 1, 255, 44, 14, 4, 255, 42, 9, 2, 255, 47, 12, 2, 255, 48, 11, 2, 255, 7, 1, 1, 255, 5, 1, 0, 255, 7, 2, 2, 255, 9, 1, 0, 255, 13, 1, 0, 255, 13, 2, 1, 255, 6, 1, 0, 255, 6, 1, 1, 255, 8, 1, 1, 255, 8, 1, 1, 255, 10, 3, 2, 255, 11, 4, 1, 255, 9, 3, 1, 255, 12, 2, 1, 255, 12, 2, 1, 255, 10, 3, 1, 255, 9, 5, 2, 255, 10, 5, 2, 255, 13, 4, 2, 255, 15, 3, 2, 255, 15, 4, 2, 255, 14, 4, 3, 255, 13, 3, 2, 255, 15, 5, 3, 255, 16, 5, 2, 255, 15, 5, 3, 255, 13, 3, 2, 255, 13, 4, 2, 255, 17, 7, 5, 255, 15, 5, 2, 255, 14, 4, 1, 255, 15, 8, 4, 255, 16, 3, 2, 255, 18, 9, 3, 255, 17, 10, 1, 255, 16, 5, 0, 255, 17, 6, 2, 255, 16, 5, 0, 255, 17, 9, 4, 255, 15, 7, 1, 255, 17, 8, 2, 255, 19, 8, 2, 255, 19, 9, 0, 255, 19, 9, 2, 255, 20, 10, 3, 255, 22, 10, 1, 255, 21, 10, 2, 255, 24, 11, 3, 255, 25, 9, 2, 255, 23, 9, 2, 255, 23, 13, 3, 255, 26, 14, 5, 255, 21, 12, 3, 255, 27, 14, 4, 255, 32, 12, 1, 255, 28, 14, 1, 255, 29, 15, 4, 255, 33, 12, 3, 255, 33, 12, 5, 255, 30, 14, 3, 255, 30, 13, 4, 255, 30, 14, 3, 255, 28, 12, 0, 255, 32, 15, 3, 255, 33, 16, 7, 255, 35, 14, 5, 255, 37, 14, 5, 255, 31, 13, 1, 255, 34, 18, 6, 255, 32, 15, 4, 255, 33, 16, 6, 255, 28, 11, 1, 255, 34, 16, 2, 255, 33, 14, 0, 255, 34, 16, 2, 255, 37, 17, 3, 255, 38, 17, 2, 255, 32, 21, 3, 255, 30, 21, 3, 255, 31, 17, 2, 255, 40, 17, 4, 255, 42, 19, 4, 255, 38, 22, 4, 255, 47, 24, 3, 255, 39, 21, 1, 255, 37, 22, 3, 255, 45, 20, 6, 255, 46, 17, 2, 255, 44, 24, 3, 255, 38, 24, 2, 255, 40, 22, 4, 255, 37, 22, 1, 255, 38, 22, 1, 255, 47, 22, 5, 255, 52, 21, 7, 255, 53, 20, 4, 255, 61, 25, 1, 255, 56, 23, 1, 255, 53, 23, 4, 255, 50, 21, 7, 255, 43, 18, 6, 255, 38, 20, 11, 255, 44, 22, 5, 255, 56, 28, 6, 255, 50, 22, 2, 255, 52, 22, 2, 255, 53, 22, 2, 255, 52, 24, 4, 255, 45, 22, 2, 255, 47, 23, 3, 255, 59, 23, 6, 255, 52, 24, 2, 255, 55, 26, 7, 255, 59, 23, 7, 255, 51, 21, 2, 255, 45, 23, 4, 255, 50, 25, 5, 255, 51, 26, 6, 255, 51, 25, 8, 255, 49, 23, 7, 255, 50, 25, 1, 255, 51, 29, 4, 255, 50, 24, 4, 255, 56, 25, 6, 255, 55, 27, 7, 255, 53, 23, 2, 255, 55, 24, 3, 255, 53, 28, 3, 255, 55, 29, 6, 255, 54, 27, 5, 255, 52, 25, 4, 255, 59, 31, 4, 255, 57, 27, 6, 255, 59, 31, 8, 255, 54, 30, 4, 255, 60, 35, 9, 255, 63, 34, 8, 255, 63, 32, 20, 255, 57, 38, 11, 255, 54, 40, 5, 255, 63, 45, 18, 255, 64, 47, 25, 255, 65, 50, 24, 255, 63, 55, 35, 255, 66, 58, 27, 255, 65, 65, 32, 255, 67, 65, 52, 255, 71, 67, 44, 255, 76, 76, 50, 255, 71, 74, 52, 255, 74, 77, 58, 255, 81, 85, 60, 255, 81, 86, 60, 255, 85, 91, 70, 255, 87, 95, 75, 255, 88, 99, 81, 255, 86, 103, 84, 255, 86, 111, 90, 255, 88, 117, 95, 255, 90, 123, 98, 255, 92, 128, 105, 255, 89, 133, 105, 255, 93, 138, 110, 255, 95, 139, 116, 255, 94, 143, 122, 255, 99, 146, 126, 255, 104, 148, 126, 255, 103, 150, 128, 255, 101, 150, 128, 255, 103, 152, 129, 255, 103, 150, 122, 255, 105, 151, 123, 255, 103, 151, 123, 255, 104, 149, 119, 255, 99, 147, 117, 255, 96, 144, 112, 255, 100, 140, 109, 255, 101, 136, 102, 255, 100, 134, 97, 255, 102, 127, 93, 255, 98, 126, 83, 255, 91, 120, 79, 255, 93, 116, 73, 255, 93, 107, 73, 255, 91, 102, 74, 255, 90, 100, 66, 255, 88, 95, 58, 255, 84, 90, 54, 255, 86, 89, 56, 255, 88, 88, 42, 255, 84, 82, 35, 255, 77, 72, 47, 255, 76, 73, 38, 255, 81, 70, 36, 255, 76, 67, 26, 255, 70, 66, 22, 255, 80, 67, 28, 255, 76, 62, 15, 255, 81, 62, 15, 255, 81, 58, 14, 255, 75, 53, 17, 255, 78, 56, 13, 255, 71, 48, 13, 255, 70, 51, 8, 255, 67, 50, 7, 255, 72, 42, 12, 255, 72, 46, 10, 255, 67, 45, 7, 255, 69, 43, 5, 255, 79, 45, 6, 255, 74, 41, 5, 255, 69, 40, 8, 255, 72, 37, 7, 255, 77, 38, 10, 255, 72, 37, 4, 255, 75, 34, 5, 255, 71, 37, 8, 255, 72, 35, 7, 255, 74, 33, 6, 255, 75, 33, 10, 255, 74, 29, 12, 255, 74, 28, 8, 255, 71, 33, 5, 255, 65, 31, 6, 255, 73, 31, 6, 255, 75, 28, 7, 255, 70, 33, 4, 255, 70, 34, 2, 255, 76, 30, 6, 255, 74, 33, 4, 255, 71, 35, 3, 255, 72, 33, 5, 255, 72, 31, 3, 255, 75, 29, 4, 255, 75, 28, 4, 255, 72, 30, 3, 255, 72, 33, 5, 255, 74, 29, 6, 255, 68, 31, 5, 255, 67, 27, 3, 255, 69, 28, 3, 255, 75, 28, 5, 255, 71, 30, 3, 255, 72, 29, 5, 255, 70, 24, 2, 255, 76, 29, 6, 255, 78, 31, 2, 255, 78, 33, 0, 255, 77, 34, 2, 255, 76, 30, 2, 255, 79, 31, 5, 255, 73, 31, 1, 255, 72, 30, 1, 255, 76, 28, 4, 255, 78, 26, 3, 255, 86, 31, 4, 255, 77, 25, 4, 255, 81, 29, 7, 255, 74, 30, 1, 255, 75, 29, 1, 255, 73, 28, 2, 255, 71, 28, 5, 255, 74, 26, 1, 255, 71, 28, 3, 255, 66, 27, 2, 255, 78, 29, 2, 255, 85, 32, 6, 255, 87, 33, 5, 255, 84, 26, 1, 255, 66, 25, 1, 255, 67, 27, 2, 255, 67, 22, 2, 255, 67, 26, 4, 255, 72, 25, 5, 255, 69, 25, 4, 255, 61, 24, 3, 255, 68, 23, 1, 255, 67, 19, 2, 255, 65, 21, 4, 255, 72, 25, 2, 255, 71, 21, 2, 255, 69, 18, 4, 255, 70, 19, 0, 255, 67, 23, 4, 255, 64, 22, 6, 255, 66, 20, 3, 255, 62, 22, 2, 255, 58, 20, 2, 255, 56, 20, 5, 255, 58, 20, 8, 255, 56, 19, 6, 255, 57, 23, 5, 255, 58, 24, 1, 255, 53, 22, 1, 255, 54, 20, 1, 255, 69, 24, 5, 255, 75, 25, 4, 255, 63, 20, 0, 255, 53, 21, 5, 255, 51, 22, 8, 255, 51, 17, 1, 255, 57, 20, 2, 255, 59, 20, 1, 255, 61, 19, 3, 255, 59, 18, 2, 255, 56, 19, 1, 255, 57, 21, 4, 255, 55, 22, 4, 255, 48, 18, 5, 255, 53, 20, 5, 255, 54, 20, 1, 255, 51, 15, 4, 255, 55, 17, 5, 255, 44, 16, 0, 255, 41, 18, 5, 255, 54, 16, 4, 255, 72, 23, 3, 255, 79, 22, 3, 255, 63, 18, 5, 255, 45, 15, 4, 255, 48, 14, 2, 255, 50, 14, 2, 255, 49, 12, 1, 255, 45, 13, 1, 255, 40, 15, 1, 255, 45, 17, 5, 255, 48, 16, 4, 255, 47, 14, 4, 255, 40, 14, 4, 255, 45, 18, 4, 255, 61, 19, 5, 255, 73, 21, 7, 255, 67, 17, 3, 255, 67, 16, 2, 255, 62, 17, 4, 255, 53, 17, 3, 255, 58, 18, 5, 255, 41, 15, 0, 255, 45, 13, 2, 255, 52, 14, 1, 255, 44, 13, 7, 255, 49, 15, 3, 255, 52, 14, 0, 255, 50, 15, 4, 255, 48, 13, 2, 255, 58, 15, 5, 255, 56, 14, 3, 255, 62, 15, 0, 255, 62, 17, 0, 255, 67, 18, 4, 255, 61, 14, 2, 255, 61, 14, 0, 255, 59, 14, 1, 255, 55, 14, 1, 255, 54, 12, 2, 255, 58, 13, 5, 255, 55, 12, 3, 255, 52, 13, 3, 255, 52, 15, 4, 255, 55, 11, 1, 255, 60, 12, 1, 255, 59, 15, 4, 255, 53, 14, 6, 255, 55, 13, 3, 255, 58, 15, 3, 255, 46, 16, 2, 255, 51, 13, 1, 255, 50, 9, 3, 255, 39, 11, 3, 255, 42, 13, 4, 255, 45, 12, 2, 255, 39, 8, 0, 255, 41, 11, 1, 255, 48, 12, 2, 255, 50, 13, 4, 255, 41, 11, 2, 255, 40, 12, 5, 255, 39, 8, 3, 255, 42, 10, 2, 255, 44, 12, 0, 255, 45, 15, 4, 255, 34, 11, 5, 255, 25, 7, 3, 255, 26, 7, 4, 255, 26, 10, 3, 255, 24, 7, 3, 255, 25, 8, 4, 255, 25, 7, 4, 255, 29, 8, 4, 255, 32, 7, 1, 255, 29, 7, 2, 255, 29, 9, 3, 255, 34, 10, 3, 255, 40, 8, 0, 255, 48, 11, 3, 255, 50, 13, 4, 255, 46, 13, 3, 255, 43, 12, 2, 255, 44, 11, 3, 255, 45, 12, 3, 255, 7, 1, 1, 255, 5, 0, 0, 255, 7, 2, 1, 255, 10, 2, 1, 255, 10, 0, 0, 255, 10, 0, 0, 255, 10, 0, 1, 255, 8, 2, 2, 255, 7, 3, 2, 255, 10, 2, 2, 255, 14, 2, 2, 255, 11, 2, 1, 255, 7, 2, 0, 255, 12, 2, 1, 255, 13, 2, 2, 255, 13, 2, 1, 255, 11, 3, 1, 255, 10, 2, 0, 255, 12, 1, 1, 255, 13, 2, 0, 255, 14, 3, 1, 255, 14, 4, 3, 255, 14, 4, 3, 255, 14, 4, 2, 255, 14, 3, 1, 255, 13, 2, 1, 255, 11, 2, 1, 255, 12, 5, 2, 255, 17, 9, 6, 255, 13, 3, 2, 255, 10, 1, 0, 255, 14, 8, 4, 255, 18, 5, 3, 255, 15, 5, 0, 255, 18, 9, 2, 255, 19, 8, 4, 255, 17, 6, 4, 255, 16, 5, 4, 255, 21, 10, 5, 255, 18, 7, 0, 255, 20, 10, 1, 255, 20, 10, 0, 255, 20, 11, 1, 255, 23, 11, 3, 255, 25, 11, 3, 255, 28, 11, 4, 255, 23, 11, 3, 255, 20, 11, 2, 255, 23, 10, 2, 255, 21, 6, 0, 255, 26, 11, 2, 255, 22, 12, 3, 255, 18, 10, 2, 255, 25, 12, 3, 255, 31, 13, 1, 255, 29, 12, 1, 255, 30, 13, 1, 255, 34, 14, 3, 255, 31, 13, 3, 255, 28, 10, 1, 255, 25, 13, 2, 255, 27, 16, 3, 255, 29, 15, 4, 255, 28, 15, 3, 255, 32, 13, 5, 255, 33, 12, 4, 255, 36, 16, 5, 255, 35, 18, 3, 255, 34, 17, 1, 255, 34, 14, 0, 255, 35, 15, 6, 255, 31, 13, 4, 255, 33, 14, 3, 255, 33, 14, 2, 255, 37, 18, 7, 255, 38, 19, 5, 255, 39, 17, 3, 255, 35, 15, 1, 255, 34, 17, 3, 255, 37, 18, 5, 255, 43, 18, 7, 255, 44, 18, 6, 255, 39, 19, 4, 255, 40, 21, 1, 255, 39, 21, 0, 255, 43, 22, 4, 255, 47, 21, 4, 255, 48, 23, 3, 255, 46, 28, 3, 255, 42, 26, 3, 255, 43, 18, 1, 255, 49, 21, 1, 255, 51, 25, 4, 255, 53, 26, 7, 255, 49, 23, 4, 255, 39, 25, 0, 255, 49, 24, 0, 255, 46, 22, 0, 255, 41, 26, 2, 255, 44, 23, 4, 255, 44, 20, 6, 255, 47, 20, 10, 255, 50, 21, 3, 255, 47, 23, 0, 255, 50, 26, 3, 255, 49, 25, 2, 255, 50, 25, 2, 255, 53, 25, 1, 255, 50, 25, 3, 255, 48, 22, 7, 255, 55, 23, 6, 255, 49, 24, 4, 255, 43, 22, 3, 255, 51, 23, 6, 255, 47, 24, 2, 255, 42, 25, 4, 255, 44, 26, 4, 255, 43, 24, 1, 255, 44, 22, 1, 255, 50, 25, 5, 255, 54, 29, 6, 255, 50, 26, 3, 255, 51, 22, 2, 255, 59, 26, 10, 255, 42, 20, 3, 255, 54, 29, 4, 255, 62, 28, 1, 255, 57, 28, 7, 255, 54, 28, 2, 255, 50, 29, 7, 255, 54, 30, 5, 255, 64, 32, 4, 255, 64, 30, 7, 255, 54, 29, 7, 255, 54, 31, 7, 255, 56, 30, 13, 255, 65, 38, 8, 255, 70, 36, 7, 255, 65, 37, 20, 255, 56, 41, 24, 255, 62, 52, 17, 255, 68, 45, 26, 255, 68, 51, 24, 255, 66, 57, 29, 255, 68, 59, 30, 255, 72, 66, 29, 255, 75, 66, 39, 255, 72, 69, 39, 255, 76, 76, 47, 255, 78, 78, 57, 255, 76, 78, 61, 255, 79, 84, 63, 255, 82, 91, 65, 255, 85, 92, 72, 255, 85, 94, 80, 255, 85, 101, 84, 255, 86, 109, 90, 255, 85, 114, 92, 255, 87, 118, 95, 255, 94, 126, 102, 255, 92, 132, 108, 255, 91, 136, 108, 255, 96, 140, 112, 255, 99, 141, 118, 255, 97, 145, 123, 255, 102, 148, 127, 255, 105, 148, 128, 255, 107, 154, 132, 255, 102, 152, 130, 255, 104, 152, 130, 255, 105, 151, 126, 255, 107, 152, 126, 255, 104, 150, 125, 255, 103, 151, 123, 255, 104, 148, 121, 255, 103, 143, 117, 255, 100, 139, 112, 255, 100, 136, 105, 255, 99, 130, 96, 255, 102, 124, 91, 255, 97, 120, 92, 255, 90, 114, 72, 255, 93, 111, 75, 255, 94, 107, 72, 255, 89, 101, 64, 255, 85, 94, 61, 255, 85, 92, 52, 255, 82, 89, 46, 255, 80, 83, 54, 255, 81, 82, 46, 255, 82, 83, 37, 255, 79, 78, 37, 255, 87, 73, 26, 255, 84, 65, 33, 255, 75, 64, 31, 255, 73, 66, 20, 255, 79, 63, 22, 255, 81, 57, 22, 255, 79, 58, 16, 255, 82, 56, 11, 255, 77, 51, 14, 255, 74, 53, 15, 255, 75, 50, 10, 255, 76, 51, 10, 255, 66, 47, 8, 255, 79, 44, 6, 255, 74, 43, 9, 255, 70, 46, 9, 255, 75, 40, 6, 255, 85, 37, 6, 255, 78, 43, 4, 255, 72, 39, 1, 255, 72, 40, 0, 255, 78, 39, 1, 255, 78, 34, 7, 255, 70, 35, 2, 255, 76, 37, 4, 255, 72, 35, 8, 255, 76, 36, 2, 255, 72, 33, 3, 255, 65, 29, 3, 255, 68, 35, 5, 255, 73, 38, 4, 255, 73, 32, 4, 255, 72, 31, 3, 255, 75, 30, 8, 255, 70, 33, 7, 255, 69, 34, 4, 255, 73, 29, 5, 255, 74, 34, 4, 255, 71, 36, 0, 255, 74, 34, 5, 255, 72, 31, 6, 255, 73, 28, 4, 255, 76, 31, 5, 255, 71, 27, 2, 255, 72, 29, 10, 255, 70, 30, 8, 255, 63, 23, 1, 255, 67, 27, 4, 255, 68, 28, 4, 255, 74, 24, 3, 255, 70, 30, 2, 255, 68, 31, 5, 255, 70, 28, 2, 255, 75, 29, 0, 255, 79, 31, 2, 255, 81, 30, 6, 255, 78, 29, 3, 255, 75, 29, 3, 255, 73, 26, 3, 255, 78, 31, 0, 255, 73, 32, 2, 255, 74, 26, 5, 255, 82, 27, 8, 255, 76, 28, 1, 255, 72, 27, 0, 255, 74, 27, 1, 255, 71, 27, 0, 255, 75, 28, 3, 255, 72, 27, 2, 255, 72, 29, 4, 255, 74, 28, 4, 255, 71, 31, 3, 255, 72, 29, 1, 255, 83, 29, 5, 255, 91, 31, 4, 255, 91, 31, 3, 255, 84, 25, 0, 255, 69, 23, 1, 255, 70, 24, 0, 255, 72, 25, 2, 255, 64, 22, 0, 255, 69, 23, 1, 255, 69, 25, 2, 255, 67, 22, 4, 255, 68, 23, 3, 255, 63, 24, 3, 255, 62, 22, 3, 255, 66, 20, 2, 255, 68, 22, 4, 255, 58, 19, 1, 255, 64, 24, 3, 255, 59, 26, 3, 255, 58, 19, 2, 255, 72, 25, 7, 255, 73, 28, 6, 255, 64, 20, 2, 255, 62, 23, 0, 255, 67, 21, 3, 255, 57, 20, 5, 255, 49, 19, 3, 255, 58, 20, 4, 255, 51, 17, 9, 255, 51, 17, 7, 255, 68, 22, 3, 255, 83, 27, 3, 255, 81, 29, 3, 255, 73, 25, 4, 255, 71, 22, 7, 255, 70, 22, 6, 255, 57, 20, 2, 255, 55, 17, 0, 255, 64, 20, 4, 255, 68, 21, 2, 255, 63, 20, 1, 255, 56, 21, 6, 255, 56, 22, 3, 255, 55, 17, 2, 255, 52, 18, 3, 255, 54, 18, 2, 255, 56, 17, 3, 255, 53, 18, 3, 255, 48, 17, 1, 255, 51, 18, 2, 255, 66, 21, 3, 255, 66, 22, 3, 255, 75, 22, 1, 255, 67, 21, 2, 255, 48, 16, 2, 255, 51, 15, 5, 255, 47, 14, 2, 255, 48, 15, 2, 255, 51, 20, 7, 255, 43, 14, 2, 255, 48, 15, 6, 255, 49, 18, 4, 255, 43, 13, 1, 255, 36, 15, 6, 255, 43, 16, 4, 255, 67, 17, 2, 255, 79, 19, 3, 255, 78, 15, 1, 255, 80, 18, 3, 255, 74, 16, 3, 255, 71, 12, 1, 255, 74, 21, 6, 255, 68, 23, 7, 255, 61, 16, 3, 255, 52, 14, 6, 255, 42, 12, 5, 255, 46, 13, 2, 255, 53, 15, 5, 255, 49, 15, 2, 255, 55, 15, 1, 255, 60, 14, 7, 255, 53, 14, 3, 255, 59, 13, 3, 255, 53, 13, 1, 255, 52, 15, 3, 255, 50, 15, 1, 255, 54, 13, 0, 255, 56, 14, 1, 255, 55, 14, 2, 255, 53, 14, 3, 255, 52, 10, 3, 255, 53, 11, 2, 255, 52, 13, 4, 255, 44, 12, 3, 255, 45, 12, 3, 255, 52, 12, 1, 255, 50, 11, 2, 255, 47, 11, 4, 255, 51, 13, 4, 255, 56, 14, 3, 255, 43, 13, 2, 255, 42, 9, 0, 255, 47, 10, 2, 255, 41, 11, 3, 255, 40, 8, 3, 255, 41, 10, 2, 255, 31, 11, 1, 255, 35, 10, 1, 255, 40, 9, 1, 255, 37, 8, 0, 255, 40, 9, 5, 255, 37, 9, 5, 255, 36, 8, 4, 255, 43, 10, 5, 255, 39, 8, 1, 255, 36, 9, 1, 255, 35, 12, 5, 255, 27, 8, 1, 255, 29, 10, 2, 255, 29, 10, 3, 255, 25, 8, 2, 255, 20, 6, 1, 255, 22, 7, 2, 255, 26, 8, 3, 255, 30, 8, 4, 255, 32, 8, 3, 255, 33, 8, 3, 255, 38, 9, 3, 255, 46, 10, 3, 255, 49, 8, 2, 255, 51, 10, 2, 255, 49, 12, 3, 255, 41, 11, 3, 255, 40, 8, 1, 255, 40, 6, 1, 255, 8, 0, 1, 255, 6, 1, 0, 255, 7, 2, 2, 255, 10, 2, 1, 255, 12, 2, 0, 255, 12, 1, 0, 255, 11, 1, 1, 255, 11, 2, 2, 255, 10, 2, 0, 255, 11, 2, 0, 255, 12, 1, 1, 255, 10, 0, 0, 255, 10, 1, 0, 255, 13, 4, 2, 255, 13, 3, 2, 255, 13, 4, 2, 255, 12, 5, 3, 255, 10, 3, 0, 255, 12, 1, 1, 255, 13, 3, 1, 255, 12, 3, 1, 255, 12, 3, 1, 255, 13, 3, 2, 255, 12, 3, 1, 255, 11, 2, 0, 255, 13, 4, 1, 255, 13, 4, 2, 255, 12, 4, 1, 255, 15, 6, 3, 255, 14, 4, 2, 255, 13, 3, 2, 255, 12, 6, 3, 255, 15, 4, 2, 255, 16, 6, 1, 255, 14, 5, 0, 255, 15, 5, 3, 255, 17, 6, 5, 255, 14, 3, 1, 255, 16, 6, 1, 255, 18, 8, 1, 255, 20, 10, 4, 255, 19, 9, 2, 255, 18, 8, 0, 255, 20, 8, 1, 255, 22, 10, 3, 255, 23, 10, 2, 255, 21, 8, 0, 255, 20, 5, 0, 255, 26, 10, 4, 255, 26, 9, 1, 255, 24, 8, 2, 255, 21, 8, 2, 255, 23, 11, 3, 255, 26, 11, 2, 255, 30, 14, 4, 255, 33, 16, 5, 255, 31, 14, 2, 255, 28, 13, 3, 255, 30, 11, 2, 255, 38, 12, 5, 255, 31, 13, 3, 255, 32, 13, 3, 255, 33, 14, 5, 255, 26, 15, 4, 255, 30, 12, 2, 255, 30, 13, 2, 255, 29, 17, 4, 255, 30, 18, 3, 255, 34, 19, 4, 255, 36, 19, 3, 255, 34, 15, 4, 255, 32, 13, 4, 255, 37, 17, 5, 255, 33, 14, 2, 255, 32, 14, 2, 255, 33, 15, 2, 255, 37, 19, 4, 255, 34, 19, 2, 255, 37, 20, 5, 255, 34, 16, 2, 255, 36, 17, 3, 255, 40, 21, 5, 255, 37, 18, 1, 255, 37, 19, 2, 255, 42, 18, 3, 255, 45, 18, 5, 255, 40, 20, 3, 255, 37, 22, 1, 255, 40, 20, 0, 255, 46, 22, 1, 255, 47, 25, 5, 255, 50, 25, 5, 255, 45, 21, 0, 255, 45, 22, 1, 255, 47, 24, 3, 255, 47, 22, 3, 255, 49, 21, 7, 255, 47, 23, 4, 255, 39, 20, 0, 255, 42, 25, 5, 255, 42, 22, 2, 255, 46, 24, 2, 255, 45, 23, 2, 255, 42, 22, 2, 255, 41, 21, 3, 255, 39, 22, 4, 255, 40, 22, 3, 255, 49, 27, 4, 255, 49, 25, 4, 255, 41, 19, 2, 255, 46, 25, 4, 255, 40, 28, 4, 255, 40, 28, 5, 255, 47, 25, 4, 255, 52, 25, 2, 255, 55, 25, 5, 255, 51, 23, 3, 255, 49, 26, 5, 255, 47, 25, 4, 255, 45, 25, 2, 255, 43, 28, 2, 255, 47, 27, 4, 255, 58, 27, 8, 255, 55, 28, 5, 255, 48, 25, 3, 255, 54, 29, 9, 255, 52, 26, 6, 255, 53, 28, 3, 255, 55, 29, 3, 255, 47, 26, 5, 255, 52, 28, 8, 255, 61, 33, 4, 255, 57, 29, 3, 255, 56, 27, 11, 255, 60, 27, 8, 255, 60, 36, 3, 255, 56, 35, 3, 255, 63, 34, 4, 255, 69, 41, 14, 255, 62, 46, 13, 255, 58, 47, 17, 255, 63, 49, 16, 255, 65, 53, 19, 255, 67, 57, 26, 255, 65, 59, 32, 255, 67, 65, 39, 255, 66, 65, 48, 255, 69, 69, 46, 255, 76, 74, 52, 255, 82, 78, 61, 255, 80, 81, 63, 255, 77, 84, 64, 255, 80, 90, 73, 255, 83, 94, 77, 255, 85, 98, 77, 255, 86, 106, 83, 255, 87, 114, 91, 255, 86, 118, 95, 255, 89, 121, 99, 255, 96, 128, 106, 255, 95, 134, 111, 255, 95, 140, 115, 255, 103, 144, 121, 255, 106, 147, 125, 255, 101, 149, 127, 255, 104, 151, 130, 255, 106, 151, 130, 255, 108, 155, 135, 255, 104, 153, 133, 255, 106, 154, 134, 255, 109, 154, 132, 255, 106, 150, 128, 255, 104, 150, 129, 255, 101, 150, 123, 255, 105, 145, 119, 255, 104, 143, 113, 255, 99, 137, 105, 255, 96, 133, 99, 255, 98, 128, 97, 255, 99, 119, 89, 255, 99, 116, 90, 255, 98, 115, 80, 255, 91, 105, 73, 255, 91, 103, 66, 255, 86, 97, 63, 255, 89, 94, 65, 255, 91, 90, 56, 255, 87, 88, 43, 255, 81, 78, 52, 255, 76, 73, 54, 255, 75, 75, 40, 255, 72, 71, 36, 255, 78, 68, 29, 255, 78, 63, 23, 255, 76, 63, 20, 255, 74, 64, 19, 255, 75, 57, 16, 255, 77, 58, 17, 255, 72, 58, 17, 255, 79, 54, 18, 255, 77, 52, 9, 255, 70, 52, 11, 255, 75, 52, 2, 255, 77, 48, 10, 255, 67, 45, 12, 255, 70, 44, 4, 255, 64, 42, 8, 255, 74, 46, 4, 255, 71, 43, 11, 255, 63, 40, 2, 255, 76, 42, 4, 255, 79, 37, 5, 255, 75, 39, 2, 255, 67, 38, 3, 255, 80, 32, 3, 255, 76, 34, 2, 255, 73, 35, 6, 255, 71, 36, 8, 255, 71, 33, 6, 255, 80, 35, 4, 255, 77, 32, 6, 255, 74, 35, 9, 255, 73, 36, 2, 255, 76, 34, 0, 255, 78, 35, 1, 255, 71, 32, 2, 255, 72, 31, 3, 255, 76, 32, 7, 255, 68, 32, 6, 255, 73, 33, 5, 255, 72, 30, 3, 255, 69, 30, 1, 255, 69, 32, 6, 255, 67, 27, 2, 255, 73, 30, 4, 255, 71, 27, 6, 255, 71, 27, 5, 255, 66, 25, 2, 255, 65, 29, 5, 255, 67, 32, 6, 255, 65, 30, 4, 255, 74, 29, 6, 255, 72, 25, 4, 255, 71, 24, 7, 255, 74, 25, 3, 255, 77, 27, 1, 255, 82, 28, 4, 255, 81, 27, 6, 255, 77, 28, 5, 255, 77, 28, 3, 255, 78, 26, 1, 255, 80, 29, 4, 255, 75, 26, 3, 255, 75, 25, 4, 255, 77, 29, 5, 255, 70, 27, 2, 255, 75, 30, 3, 255, 77, 29, 3, 255, 73, 27, 3, 255, 78, 28, 5, 255, 75, 30, 5, 255, 74, 32, 4, 255, 77, 27, 5, 255, 77, 28, 4, 255, 74, 29, 3, 255, 72, 25, 2, 255, 77, 27, 0, 255, 76, 29, 0, 255, 69, 24, 3, 255, 70, 23, 1, 255, 73, 25, 4, 255, 72, 25, 3, 255, 66, 24, 2, 255, 62, 22, 1, 255, 65, 24, 2, 255, 66, 21, 4, 255, 67, 21, 1, 255, 67, 24, 2, 255, 66, 26, 4, 255, 67, 25, 5, 255, 71, 24, 4, 255, 68, 22, 1, 255, 52, 22, 2, 255, 57, 22, 9, 255, 65, 23, 6, 255, 59, 27, 6, 255, 81, 21, 11, 255, 82, 21, 7, 255, 65, 20, 5, 255, 61, 17, 4, 255, 63, 18, 0, 255, 62, 16, 0, 255, 58, 19, 9, 255, 57, 21, 6, 255, 59, 19, 6, 255, 56, 14, 5, 255, 57, 19, 4, 255, 75, 28, 7, 255, 92, 28, 4, 255, 95, 25, 3, 255, 83, 25, 6, 255, 62, 20, 1, 255, 52, 15, 3, 255, 56, 17, 7, 255, 67, 22, 6, 255, 66, 21, 2, 255, 55, 20, 3, 255, 56, 19, 2, 255, 61, 18, 5, 255, 50, 13, 1, 255, 57, 15, 5, 255, 59, 15, 4, 255, 51, 13, 1, 255, 69, 22, 5, 255, 76, 18, 3, 255, 81, 16, 8, 255, 79, 21, 12, 255, 75, 24, 1, 255, 83, 25, 2, 255, 59, 18, 5, 255, 41, 16, 4, 255, 50, 13, 4, 255, 51, 15, 6, 255, 39, 13, 2, 255, 44, 16, 6, 255, 41, 9, 2, 255, 47, 18, 5, 255, 39, 16, 3, 255, 40, 14, 4, 255, 37, 13, 1, 255, 50, 14, 0, 255, 77, 18, 3, 255, 80, 21, 2, 255, 73, 19, 1, 255, 76, 22, 4, 255, 77, 17, 2, 255, 74, 21, 2, 255, 75, 21, 6, 255, 72, 22, 6, 255, 54, 13, 3, 255, 46, 11, 3, 255, 45, 17, 0, 255, 47, 17, 3, 255, 52, 14, 5, 255, 54, 13, 2, 255, 55, 13, 4, 255, 52, 14, 3, 255, 56, 17, 6, 255, 49, 13, 1, 255, 57, 14, 4, 255, 59, 14, 4, 255, 57, 12, 1, 255, 51, 11, 0, 255, 51, 13, 1, 255, 54, 15, 3, 255, 54, 15, 5, 255, 53, 14, 5, 255, 49, 12, 4, 255, 48, 9, 1, 255, 50, 11, 4, 255, 50, 11, 6, 255, 50, 12, 5, 255, 51, 13, 4, 255, 49, 13, 4, 255, 48, 14, 6, 255, 45, 12, 3, 255, 43, 12, 2, 255, 47, 14, 3, 255, 42, 11, 3, 255, 41, 7, 3, 255, 40, 8, 4, 255, 39, 11, 6, 255, 45, 9, 4, 255, 45, 10, 4, 255, 38, 10, 2, 255, 40, 11, 6, 255, 34, 8, 3, 255, 31, 8, 2, 255, 35, 8, 5, 255, 34, 8, 5, 255, 31, 7, 3, 255, 31, 9, 4, 255, 30, 9, 3, 255, 30, 9, 1, 255, 34, 11, 4, 255, 29, 9, 3, 255, 23, 8, 3, 255, 22, 8, 3, 255, 22, 6, 2, 255, 23, 5, 1, 255, 28, 8, 2, 255, 31, 10, 3, 255, 36, 11, 3, 255, 47, 15, 7, 255, 47, 10, 2, 255, 47, 11, 2, 255, 49, 13, 4, 255, 47, 13, 4, 255, 45, 11, 3, 255, 45, 9, 2, 255, 6, 0, 0, 255, 7, 1, 1, 255, 5, 0, 0, 255, 8, 0, 2, 255, 12, 1, 0, 255, 12, 3, 0, 255, 8, 3, 0, 255, 10, 1, 0, 255, 14, 0, 1, 255, 12, 1, 1, 255, 10, 2, 0, 255, 12, 2, 1, 255, 14, 1, 1, 255, 11, 3, 1, 255, 11, 1, 0, 255, 11, 3, 1, 255, 11, 5, 2, 255, 9, 4, 1, 255, 10, 2, 0, 255, 12, 4, 1, 255, 11, 3, 1, 255, 12, 4, 2, 255, 13, 5, 3, 255, 10, 2, 0, 255, 10, 2, 0, 255, 14, 5, 2, 255, 15, 5, 3, 255, 13, 4, 2, 255, 13, 3, 2, 255, 15, 4, 3, 255, 16, 6, 4, 255, 13, 5, 2, 255, 14, 3, 2, 255, 19, 8, 5, 255, 16, 6, 1, 255, 13, 3, 0, 255, 15, 5, 3, 255, 18, 6, 4, 255, 17, 7, 3, 255, 17, 8, 3, 255, 17, 9, 5, 255, 17, 9, 4, 255, 18, 9, 3, 255, 19, 8, 3, 255, 18, 8, 1, 255, 20, 10, 3, 255, 22, 9, 2, 255, 25, 8, 3, 255, 30, 10, 6, 255, 25, 9, 2, 255, 19, 9, 2, 255, 24, 10, 3, 255, 29, 12, 5, 255, 25, 9, 3, 255, 23, 11, 2, 255, 29, 13, 4, 255, 26, 11, 1, 255, 21, 9, 1, 255, 27, 11, 3, 255, 30, 10, 2, 255, 27, 13, 2, 255, 29, 17, 5, 255, 24, 11, 1, 255, 24, 11, 1, 255, 33, 13, 1, 255, 31, 15, 3, 255, 29, 14, 4, 255, 29, 12, 4, 255, 33, 14, 5, 255, 37, 14, 5, 255, 30, 12, 2, 255, 32, 15, 3, 255, 37, 19, 7, 255, 34, 17, 5, 255, 30, 15, 3, 255, 32, 16, 3, 255, 35, 18, 3, 255, 35, 20, 3, 255, 40, 18, 4, 255, 42, 17, 4, 255, 39, 18, 3, 255, 41, 18, 1, 255, 47, 21, 5, 255, 43, 16, 6, 255, 39, 17, 4, 255, 34, 18, 2, 255, 36, 22, 5, 255, 38, 19, 3, 255, 41, 21, 4, 255, 42, 19, 4, 255, 41, 18, 2, 255, 43, 20, 2, 255, 48, 20, 2, 255, 46, 24, 2, 255, 43, 25, 3, 255, 46, 18, 1, 255, 46, 22, 5, 255, 44, 23, 2, 255, 47, 22, 3, 255, 41, 21, 6, 255, 42, 19, 6, 255, 46, 21, 4, 255, 47, 23, 3, 255, 48, 23, 4, 255, 48, 23, 5, 255, 40, 19, 1, 255, 45, 26, 5, 255, 47, 24, 3, 255, 51, 23, 3, 255, 54, 23, 6, 255, 55, 25, 5, 255, 50, 24, 4, 255, 48, 24, 4, 255, 48, 24, 2, 255, 53, 27, 2, 255, 50, 25, 1, 255, 47, 26, 2, 255, 47, 27, 7, 255, 47, 21, 3, 255, 51, 21, 2, 255, 53, 26, 5, 255, 52, 25, 1, 255, 54, 24, 2, 255, 47, 24, 6, 255, 55, 27, 5, 255, 49, 26, 4, 255, 44, 27, 6, 255, 51, 28, 5, 255, 48, 27, 9, 255, 47, 28, 3, 255, 56, 26, 6, 255, 58, 28, 2, 255, 49, 26, 10, 255, 52, 24, 8, 255, 60, 29, 2, 255, 56, 29, 4, 255, 62, 35, 15, 255, 63, 40, 9, 255, 61, 46, 9, 255, 65, 47, 18, 255, 65, 41, 17, 255, 61, 46, 23, 255, 60, 50, 26, 255, 61, 56, 27, 255, 58, 63, 23, 255, 64, 65, 38, 255, 66, 67, 48, 255, 71, 73, 49, 255, 76, 75, 52, 255, 81, 81, 57, 255, 79, 85, 57, 255, 74, 86, 62, 255, 80, 92, 75, 255, 85, 98, 78, 255, 86, 102, 74, 255, 86, 110, 83, 255, 85, 117, 91, 255, 88, 123, 99, 255, 94, 130, 110, 255, 99, 136, 117, 255, 100, 139, 120, 255, 101, 144, 125, 255, 106, 147, 129, 255, 107, 150, 130, 255, 103, 152, 130, 255, 103, 153, 134, 255, 108, 156, 137, 255, 109, 156, 139, 255, 106, 154, 138, 255, 108, 153, 135, 255, 112, 156, 133, 255, 108, 152, 129, 255, 107, 152, 129, 255, 102, 149, 122, 255, 101, 141, 112, 255, 104, 141, 107, 255, 102, 139, 103, 255, 99, 132, 99, 255, 100, 126, 98, 255, 100, 119, 89, 255, 99, 116, 82, 255, 94, 106, 81, 255, 92, 103, 72, 255, 91, 102, 64, 255, 89, 96, 69, 255, 84, 91, 57, 255, 81, 85, 56, 255, 83, 80, 49, 255, 84, 78, 43, 255, 80, 74, 45, 255, 81, 74, 31, 255, 82, 68, 41, 255, 75, 66, 36, 255, 80, 62, 30, 255, 82, 59, 26, 255, 82, 55, 27, 255, 83, 57, 19, 255, 73, 57, 12, 255, 68, 56, 9, 255, 76, 52, 13, 255, 77, 50, 7, 255, 72, 51, 14, 255, 71, 47, 6, 255, 68, 38, 10, 255, 65, 39, 11, 255, 76, 43, 7, 255, 69, 41, 6, 255, 79, 42, 6, 255, 72, 39, 7, 255, 66, 40, 8, 255, 77, 36, 7, 255, 77, 35, 10, 255, 71, 32, 9, 255, 72, 37, 12, 255, 74, 31, 1, 255, 69, 31, 5, 255, 69, 31, 6, 255, 73, 34, 6, 255, 70, 32, 9, 255, 71, 32, 5, 255, 70, 31, 7, 255, 70, 35, 6, 255, 69, 33, 1, 255, 74, 31, 4, 255, 75, 32, 5, 255, 73, 31, 6, 255, 72, 30, 3, 255, 72, 31, 3, 255, 71, 31, 6, 255, 77, 34, 3, 255, 74, 30, 6, 255, 68, 27, 6, 255, 71, 35, 6, 255, 66, 30, 3, 255, 67, 27, 6, 255, 71, 30, 6, 255, 68, 28, 2, 255, 65, 29, 2, 255, 64, 33, 4, 255, 72, 30, 5, 255, 66, 24, 1, 255, 66, 24, 3, 255, 69, 24, 4, 255, 67, 25, 6, 255, 70, 26, 5, 255, 74, 28, 3, 255, 77, 29, 5, 255, 75, 26, 5, 255, 77, 27, 4, 255, 81, 31, 4, 255, 79, 34, 6, 255, 71, 27, 6, 255, 77, 24, 4, 255, 82, 28, 3, 255, 78, 27, 3, 255, 80, 25, 6, 255, 78, 29, 5, 255, 80, 29, 6, 255, 74, 27, 4, 255, 74, 27, 3, 255, 72, 28, 4, 255, 70, 30, 1, 255, 75, 26, 3, 255, 77, 26, 3, 255, 71, 29, 3, 255, 65, 28, 3, 255, 69, 27, 2, 255, 70, 25, 3, 255, 65, 25, 7, 255, 68, 23, 2, 255, 72, 25, 5, 255, 65, 21, 2, 255, 65, 23, 4, 255, 58, 22, 1, 255, 62, 21, 3, 255, 66, 25, 1, 255, 70, 25, 2, 255, 71, 23, 2, 255, 76, 30, 4, 255, 75, 29, 3, 255, 79, 24, 3, 255, 88, 28, 8, 255, 68, 24, 3, 255, 66, 22, 4, 255, 61, 20, 3, 255, 65, 18, 1, 255, 74, 28, 7, 255, 69, 22, 4, 255, 57, 22, 5, 255, 54, 19, 3, 255, 64, 17, 3, 255, 63, 16, 1, 255, 58, 21, 0, 255, 55, 24, 3, 255, 51, 18, 10, 255, 51, 17, 10, 255, 51, 19, 3, 255, 57, 21, 0, 255, 73, 20, 2, 255, 72, 20, 1, 255, 58, 20, 1, 255, 57, 17, 5, 255, 54, 16, 5, 255, 59, 19, 5, 255, 66, 20, 3, 255, 61, 19, 2, 255, 49, 16, 4, 255, 50, 19, 4, 255, 51, 18, 3, 255, 45, 16, 4, 255, 48, 13, 5, 255, 52, 12, 2, 255, 53, 17, 4, 255, 68, 23, 6, 255, 83, 24, 3, 255, 82, 20, 3, 255, 74, 21, 4, 255, 78, 21, 3, 255, 86, 26, 4, 255, 74, 22, 2, 255, 43, 12, 2, 255, 42, 13, 3, 255, 42, 13, 3, 255, 43, 12, 3, 255, 43, 13, 4, 255, 45, 13, 4, 255, 41, 15, 4, 255, 46, 13, 4, 255, 50, 11, 0, 255, 45, 15, 4, 255, 42, 12, 3, 255, 56, 14, 1, 255, 77, 23, 5, 255, 81, 23, 3, 255, 79, 21, 4, 255, 78, 19, 2, 255, 72, 23, 1, 255, 76, 19, 2, 255, 70, 16, 1, 255, 51, 9, 2, 255, 46, 12, 2, 255, 49, 17, 0, 255, 45, 12, 4, 255, 43, 14, 5, 255, 46, 8, 3, 255, 54, 7, 6, 255, 51, 13, 0, 255, 56, 14, 4, 255, 52, 15, 3, 255, 52, 15, 2, 255, 53, 16, 3, 255, 58, 18, 5, 255, 56, 15, 5, 255, 56, 14, 4, 255, 54, 13, 4, 255, 50, 12, 2, 255, 49, 11, 3, 255, 51, 11, 5, 255, 44, 10, 2, 255, 45, 9, 1, 255, 51, 10, 1, 255, 53, 13, 4, 255, 46, 12, 4, 255, 45, 10, 2, 255, 49, 11, 2, 255, 45, 11, 3, 255, 49, 16, 4, 255, 50, 14, 4, 255, 42, 11, 2, 255, 43, 10, 4, 255, 41, 9, 3, 255, 40, 10, 3, 255, 44, 8, 1, 255, 48, 10, 2, 255, 44, 12, 4, 255, 43, 10, 4, 255, 38, 7, 0, 255, 36, 11, 4, 255, 30, 9, 3, 255, 25, 6, 3, 255, 30, 9, 7, 255, 31, 6, 3, 255, 35, 8, 4, 255, 35, 9, 4, 255, 33, 9, 2, 255, 31, 9, 3, 255, 26, 9, 4, 255, 22, 6, 1, 255, 20, 4, 1, 255, 23, 5, 2, 255, 25, 7, 1, 255, 26, 8, 1, 255, 31, 9, 1, 255, 40, 10, 2, 255, 44, 11, 2, 255, 46, 11, 2, 255, 42, 9, 0, 255, 41, 10, 0, 255, 42, 11, 1, 255, 42, 9, 0, 255, 5, 0, 0, 255, 4, 1, 0, 255, 2, 0, 0, 255, 8, 0, 1, 255, 9, 1, 0, 255, 10, 1, 0, 255, 10, 3, 0, 255, 12, 2, 1, 255, 13, 2, 1, 255, 13, 1, 1, 255, 11, 1, 0, 255, 12, 2, 1, 255, 13, 2, 1, 255, 13, 3, 2, 255, 13, 3, 1, 255, 13, 4, 3, 255, 9, 3, 1, 255, 7, 2, 0, 255, 10, 4, 1, 255, 10, 1, 1, 255, 10, 0, 0, 255, 10, 1, 0, 255, 12, 3, 2, 255, 13, 5, 3, 255, 13, 3, 1, 255, 12, 2, 0, 255, 11, 3, 1, 255, 13, 5, 3, 255, 13, 3, 2, 255, 12, 1, 0, 255, 13, 2, 1, 255, 14, 6, 1, 255, 14, 4, 3, 255, 14, 3, 2, 255, 15, 4, 1, 255, 16, 5, 3, 255, 12, 2, 1, 255, 20, 7, 2, 255, 20, 8, 3, 255, 15, 6, 1, 255, 15, 8, 2, 255, 15, 8, 1, 255, 17, 8, 3, 255, 18, 8, 2, 255, 20, 7, 1, 255, 20, 7, 2, 255, 19, 9, 3, 255, 23, 10, 4, 255, 24, 9, 3, 255, 22, 7, 2, 255, 19, 9, 3, 255, 19, 8, 0, 255, 27, 8, 1, 255, 24, 10, 2, 255, 20, 10, 1, 255, 27, 10, 2, 255, 31, 15, 7, 255, 25, 11, 3, 255, 27, 11, 4, 255, 28, 10, 3, 255, 30, 14, 5, 255, 23, 11, 0, 255, 26, 12, 3, 255, 35, 13, 7, 255, 37, 15, 4, 255, 31, 14, 4, 255, 28, 11, 3, 255, 30, 10, 4, 255, 31, 11, 2, 255, 35, 14, 4, 255, 34, 16, 3, 255, 33, 17, 2, 255, 34, 16, 2, 255, 34, 18, 4, 255, 33, 17, 6, 255, 34, 17, 5, 255, 30, 13, 0, 255, 34, 18, 3, 255, 41, 14, 3, 255, 45, 15, 5, 255, 36, 19, 4, 255, 28, 18, 1, 255, 33, 17, 1, 255, 39, 15, 4, 255, 36, 20, 5, 255, 34, 23, 6, 255, 37, 19, 5, 255, 42, 18, 6, 255, 34, 18, 4, 255, 33, 22, 5, 255, 41, 19, 4, 255, 46, 17, 5, 255, 47, 19, 4, 255, 41, 22, 1, 255, 42, 24, 3, 255, 46, 20, 6, 255, 39, 17, 4, 255, 41, 19, 3, 255, 45, 23, 5, 255, 35, 17, 3, 255, 39, 18, 5, 255, 47, 20, 4, 255, 46, 22, 2, 255, 48, 22, 1, 255, 53, 23, 3, 255, 51, 23, 5, 255, 45, 22, 1, 255, 46, 23, 2, 255, 49, 24, 6, 255, 50, 25, 2, 255, 51, 23, 1, 255, 53, 22, 2, 255, 50, 20, 2, 255, 50, 24, 4, 255, 54, 27, 4, 255, 45, 23, 3, 255, 40, 23, 1, 255, 43, 27, 2, 255, 50, 29, 3, 255, 53, 28, 4, 255, 46, 21, 5, 255, 48, 21, 7, 255, 51, 26, 4, 255, 47, 24, 2, 255, 52, 22, 2, 255, 52, 23, 7, 255, 48, 26, 6, 255, 53, 27, 2, 255, 49, 26, 5, 255, 47, 30, 5, 255, 56, 28, 8, 255, 57, 24, 1, 255, 53, 29, 10, 255, 51, 28, 6, 255, 62, 32, 1, 255, 59, 32, 9, 255, 55, 33, 11, 255, 55, 32, 7, 255, 59, 38, 11, 255, 60, 39, 18, 255, 68, 44, 19, 255, 65, 47, 24, 255, 64, 53, 27, 255, 67, 60, 23, 255, 65, 65, 34, 255, 72, 67, 42, 255, 77, 72, 39, 255, 74, 77, 43, 255, 76, 76, 53, 255, 77, 80, 57, 255, 75, 86, 58, 255, 73, 91, 65, 255, 80, 96, 74, 255, 85, 101, 76, 255, 85, 107, 82, 255, 87, 114, 91, 255, 87, 122, 100, 255, 87, 128, 109, 255, 91, 135, 119, 255, 96, 140, 126, 255, 96, 142, 126, 255, 97, 147, 132, 255, 102, 150, 134, 255, 105, 152, 134, 255, 103, 155, 134, 255, 106, 157, 140, 255, 111, 158, 143, 255, 111, 159, 145, 255, 109, 158, 142, 255, 110, 156, 137, 255, 113, 155, 134, 255, 111, 153, 129, 255, 108, 151, 126, 255, 107, 148, 121, 255, 100, 142, 113, 255, 100, 139, 108, 255, 103, 135, 104, 255, 100, 128, 98, 255, 98, 123, 94, 255, 97, 119, 83, 255, 98, 114, 84, 255, 93, 104, 77, 255, 93, 101, 70, 255, 90, 97, 63, 255, 89, 94, 59, 255, 83, 88, 56, 255, 79, 82, 51, 255, 81, 75, 49, 255, 81, 76, 35, 255, 79, 73, 33, 255, 80, 70, 28, 255, 81, 66, 30, 255, 76, 63, 25, 255, 76, 62, 19, 255, 71, 57, 24, 255, 74, 56, 31, 255, 82, 56, 22, 255, 79, 54, 18, 255, 72, 54, 12, 255, 73, 52, 13, 255, 72, 45, 10, 255, 66, 39, 13, 255, 68, 39, 15, 255, 73, 39, 11, 255, 78, 43, 5, 255, 78, 42, 4, 255, 68, 40, 4, 255, 70, 35, 9, 255, 71, 35, 11, 255, 69, 38, 6, 255, 71, 37, 2, 255, 71, 35, 2, 255, 67, 34, 10, 255, 77, 35, 5, 255, 67, 33, 2, 255, 69, 34, 5, 255, 75, 34, 3, 255, 71, 37, 5, 255, 72, 37, 3, 255, 71, 32, 2, 255, 75, 31, 4, 255, 78, 34, 3, 255, 73, 33, 1, 255, 69, 34, 9, 255, 69, 30, 9, 255, 71, 30, 12, 255, 71, 31, 6, 255, 66, 29, 1, 255, 66, 28, 3, 255, 72, 28, 1, 255, 75, 29, 4, 255, 72, 26, 7, 255, 71, 31, 5, 255, 68, 28, 4, 255, 66, 26, 5, 255, 67, 27, 2, 255, 63, 26, 3, 255, 64, 31, 4, 255, 65, 30, 3, 255, 74, 29, 4, 255, 70, 28, 4, 255, 68, 25, 2, 255, 68, 26, 4, 255, 70, 31, 4, 255, 70, 30, 5, 255, 71, 30, 6, 255, 73, 30, 5, 255, 74, 28, 3, 255, 76, 28, 3, 255, 78, 28, 3, 255, 75, 27, 2, 255, 69, 24, 1, 255, 73, 24, 3, 255, 77, 29, 4, 255, 74, 27, 2, 255, 73, 24, 3, 255, 73, 26, 4, 255, 75, 28, 5, 255, 70, 29, 3, 255, 70, 28, 2, 255, 71, 30, 4, 255, 71, 28, 2, 255, 71, 30, 3, 255, 66, 25, 1, 255, 67, 25, 3, 255, 69, 28, 3, 255, 75, 25, 3, 255, 70, 22, 2, 255, 64, 28, 2, 255, 70, 26, 3, 255, 74, 26, 6, 255, 68, 25, 4, 255, 66, 24, 4, 255, 62, 26, 4, 255, 66, 23, 5, 255, 70, 23, 6, 255, 68, 22, 4, 255, 71, 24, 2, 255, 72, 24, 2, 255, 65, 21, 4, 255, 73, 24, 5, 255, 86, 30, 4, 255, 84, 29, 3, 255, 74, 26, 2, 255, 66, 21, 3, 255, 71, 19, 4, 255, 66, 23, 1, 255, 60, 20, 1, 255, 58, 24, 3, 255, 58, 20, 2, 255, 59, 21, 6, 255, 56, 20, 1, 255, 55, 19, 0, 255, 52, 18, 3, 255, 43, 18, 5, 255, 50, 20, 5, 255, 56, 20, 2, 255, 51, 21, 2, 255, 55, 20, 3, 255, 57, 19, 5, 255, 49, 19, 5, 255, 53, 14, 5, 255, 59, 17, 3, 255, 66, 21, 2, 255, 65, 20, 1, 255, 58, 18, 3, 255, 52, 18, 6, 255, 52, 15, 4, 255, 48, 16, 0, 255, 50, 17, 5, 255, 44, 13, 4, 255, 46, 14, 0, 255, 49, 17, 3, 255, 51, 17, 2, 255, 79, 28, 7, 255, 87, 24, 5, 255, 90, 24, 4, 255, 91, 22, 8, 255, 78, 24, 8, 255, 66, 21, 2, 255, 51, 15, 5, 255, 42, 14, 3, 255, 41, 12, 0, 255, 50, 15, 5, 255, 49, 16, 5, 255, 49, 17, 4, 255, 44, 16, 5, 255, 48, 10, 2, 255, 54, 13, 3, 255, 48, 17, 7, 255, 40, 11, 3, 255, 40, 11, 0, 255, 51, 15, 3, 255, 58, 13, 1, 255, 69, 15, 6, 255, 71, 15, 7, 255, 68, 17, 5, 255, 68, 14, 4, 255, 58, 13, 4, 255, 43, 9, 1, 255, 44, 14, 5, 255, 49, 13, 8, 255, 46, 13, 0, 255, 37, 13, 11, 255, 44, 6, 16, 255, 58, 13, 3, 255, 46, 17, 3, 255, 43, 14, 1, 255, 47, 17, 2, 255, 55, 16, 2, 255, 52, 15, 0, 255, 48, 14, 3, 255, 53, 10, 2, 255, 55, 11, 3, 255, 53, 12, 2, 255, 50, 14, 1, 255, 48, 13, 4, 255, 50, 12, 4, 255, 48, 14, 5, 255, 52, 17, 1, 255, 58, 16, 0, 255, 52, 12, 0, 255, 43, 12, 2, 255, 44, 13, 2, 255, 49, 13, 1, 255, 51, 14, 3, 255, 57, 17, 7, 255, 53, 13, 3, 255, 41, 11, 1, 255, 44, 13, 4, 255, 48, 11, 2, 255, 40, 9, 1, 255, 41, 10, 0, 255, 46, 10, 2, 255, 45, 9, 2, 255, 39, 8, 2, 255, 41, 9, 1, 255, 39, 8, 0, 255, 31, 9, 2, 255, 27, 7, 2, 255, 31, 9, 4, 255, 35, 7, 1, 255, 40, 10, 4, 255, 33, 5, 2, 255, 33, 8, 4, 255, 32, 7, 3, 255, 29, 5, 3, 255, 25, 3, 1, 255, 25, 5, 2, 255, 24, 6, 1, 255, 26, 8, 2, 255, 29, 8, 2, 255, 34, 11, 4, 255, 39, 10, 3, 255, 43, 9, 1, 255, 45, 10, 1, 255, 45, 11, 2, 255, 41, 10, 1, 255, 43, 11, 2, 255, 43, 10, 2, 255, 6, 0, 0, 255, 5, 1, 0, 255, 4, 1, 1, 255, 8, 2, 3, 255, 9, 0, 1, 255, 9, 1, 1, 255, 12, 1, 1, 255, 10, 1, 0, 255, 9, 3, 1, 255, 12, 2, 1, 255, 14, 1, 1, 255, 12, 1, 1, 255, 10, 2, 1, 255, 11, 0, 1, 255, 12, 0, 1, 255, 12, 2, 1, 255, 10, 2, 1, 255, 8, 2, 0, 255, 11, 3, 1, 255, 14, 2, 2, 255, 14, 3, 2, 255, 11, 1, 0, 255, 13, 3, 2, 255, 16, 6, 5, 255, 15, 4, 3, 255, 13, 3, 1, 255, 11, 5, 2, 255, 7, 3, 0, 255, 11, 4, 2, 255, 13, 4, 2, 255, 13, 5, 2, 255, 11, 6, 0, 255, 13, 5, 3, 255, 15, 4, 2, 255, 15, 4, 0, 255, 16, 6, 3, 255, 12, 2, 1, 255, 18, 5, 2, 255, 18, 6, 2, 255, 15, 6, 1, 255, 17, 7, 3, 255, 15, 6, 2, 255, 17, 6, 1, 255, 22, 9, 3, 255, 24, 8, 3, 255, 22, 5, 1, 255, 18, 8, 2, 255, 13, 7, 0, 255, 16, 8, 1, 255, 22, 10, 4, 255, 23, 9, 2, 255, 20, 10, 2, 255, 25, 10, 2, 255, 24, 9, 2, 255, 21, 10, 2, 255, 27, 11, 3, 255, 29, 10, 4, 255, 21, 8, 1, 255, 22, 13, 6, 255, 25, 11, 3, 255, 29, 9, 2, 255, 26, 11, 2, 255, 23, 12, 2, 255, 28, 12, 4, 255, 27, 10, 1, 255, 26, 13, 3, 255, 25, 14, 5, 255, 27, 13, 5, 255, 30, 14, 3, 255, 30, 16, 1, 255, 34, 17, 2, 255, 36, 18, 3, 255, 35, 16, 1, 255, 32, 14, 1, 255, 30, 13, 3, 255, 35, 17, 6, 255, 37, 17, 4, 255, 36, 17, 4, 255, 36, 16, 5, 255, 34, 12, 1, 255, 42, 17, 5, 255, 44, 19, 7, 255, 33, 16, 1, 255, 30, 16, 0, 255, 30, 15, 1, 255, 33, 17, 2, 255, 43, 22, 7, 255, 40, 18, 4, 255, 29, 17, 1, 255, 34, 18, 3, 255, 42, 18, 4, 255, 37, 21, 6, 255, 38, 19, 3, 255, 46, 19, 2, 255, 45, 18, 4, 255, 38, 19, 4, 255, 40, 16, 4, 255, 45, 20, 5, 255, 39, 24, 4, 255, 37, 19, 5, 255, 36, 17, 6, 255, 46, 18, 4, 255, 49, 24, 4, 255, 46, 20, 0, 255, 53, 23, 6, 255, 45, 19, 2, 255, 42, 21, 3, 255, 40, 24, 7, 255, 41, 20, 4, 255, 57, 23, 6, 255, 53, 24, 4, 255, 52, 20, 1, 255, 53, 24, 7, 255, 43, 22, 2, 255, 49, 23, 3, 255, 50, 24, 2, 255, 46, 26, 5, 255, 45, 26, 6, 255, 50, 27, 5, 255, 56, 25, 5, 255, 53, 23, 6, 255, 50, 23, 9, 255, 48, 23, 5, 255, 53, 23, 4, 255, 54, 24, 10, 255, 52, 21, 4, 255, 55, 27, 1, 255, 62, 32, 4, 255, 57, 30, 5, 255, 38, 24, 4, 255, 43, 26, 7, 255, 53, 29, 3, 255, 52, 31, 0, 255, 53, 29, 3, 255, 59, 28, 8, 255, 58, 36, 7, 255, 52, 34, 7, 255, 55, 30, 15, 255, 59, 36, 12, 255, 64, 46, 6, 255, 61, 45, 15, 255, 54, 49, 30, 255, 61, 53, 31, 255, 69, 58, 29, 255, 70, 65, 31, 255, 73, 65, 41, 255, 70, 69, 45, 255, 71, 75, 42, 255, 75, 77, 55, 255, 75, 79, 63, 255, 73, 85, 66, 255, 74, 93, 74, 255, 79, 97, 75, 255, 83, 102, 78, 255, 84, 108, 88, 255, 85, 114, 95, 255, 87, 124, 105, 255, 88, 131, 115, 255, 90, 137, 124, 255, 89, 140, 128, 255, 94, 145, 131, 255, 96, 151, 138, 255, 101, 154, 141, 255, 105, 156, 141, 255, 105, 158, 140, 255, 110, 159, 144, 255, 110, 158, 144, 255, 110, 160, 145, 255, 112, 160, 144, 255, 112, 157, 138, 255, 111, 153, 131, 255, 111, 154, 129, 255, 105, 148, 121, 255, 105, 146, 115, 255, 101, 143, 115, 255, 99, 136, 111, 255, 101, 130, 106, 255, 100, 123, 96, 255, 98, 121, 87, 255, 93, 117, 80, 255, 94, 109, 80, 255, 91, 101, 76, 255, 91, 98, 65, 255, 90, 95, 63, 255, 84, 87, 51, 255, 85, 84, 48, 255, 86, 79, 51, 255, 83, 72, 48, 255, 81, 76, 26, 255, 75, 73, 31, 255, 73, 69, 27, 255, 71, 61, 35, 255, 78, 59, 31, 255, 74, 56, 22, 255, 75, 61, 10, 255, 78, 60, 4, 255, 81, 50, 19, 255, 78, 48, 14, 255, 77, 48, 21, 255, 74, 44, 21, 255, 76, 42, 11, 255, 76, 43, 9, 255, 70, 42, 11, 255, 70, 41, 7, 255, 78, 44, 2, 255, 73, 38, 4, 255, 69, 39, 5, 255, 74, 40, 6, 255, 71, 36, 9, 255, 65, 37, 2, 255, 71, 35, 6, 255, 70, 32, 9, 255, 73, 36, 5, 255, 62, 32, 7, 255, 61, 33, 7, 255, 76, 34, 7, 255, 71, 37, 9, 255, 68, 32, 5, 255, 71, 35, 4, 255, 68, 34, 1, 255, 70, 33, 5, 255, 73, 30, 7, 255, 69, 28, 6, 255, 63, 31, 8, 255, 71, 32, 9, 255, 63, 30, 8, 255, 71, 30, 7, 255, 72, 29, 5, 255, 65, 30, 7, 255, 69, 27, 6, 255, 77, 28, 5, 255, 73, 28, 5, 255, 70, 27, 6, 255, 69, 27, 4, 255, 69, 27, 1, 255, 66, 26, 5, 255, 63, 25, 4, 255, 65, 27, 3, 255, 67, 29, 8, 255, 67, 30, 4, 255, 65, 31, 1, 255, 71, 26, 1, 255, 73, 27, 4, 255, 81, 32, 2, 255, 78, 28, 3, 255, 73, 28, 5, 255, 75, 30, 5, 255, 76, 31, 3, 255, 79, 30, 5, 255, 78, 28, 4, 255, 76, 26, 2, 255, 78, 29, 5, 255, 70, 28, 3, 255, 74, 28, 4, 255, 75, 27, 4, 255, 71, 28, 1, 255, 70, 25, 4, 255, 71, 27, 3, 255, 66, 29, 2, 255, 68, 29, 4, 255, 69, 28, 4, 255, 70, 27, 3, 255, 71, 27, 2, 255, 72, 24, 4, 255, 70, 24, 7, 255, 64, 25, 0, 255, 75, 29, 4, 255, 79, 27, 6, 255, 70, 24, 1, 255, 65, 25, 1, 255, 71, 24, 3, 255, 70, 26, 5, 255, 66, 23, 2, 255, 63, 26, 4, 255, 64, 23, 4, 255, 68, 21, 1, 255, 64, 22, 4, 255, 70, 24, 6, 255, 81, 27, 4, 255, 81, 25, 2, 255, 83, 25, 4, 255, 89, 27, 2, 255, 90, 27, 6, 255, 75, 24, 6, 255, 64, 20, 0, 255, 61, 20, 2, 255, 59, 19, 3, 255, 65, 21, 5, 255, 61, 18, 3, 255, 59, 17, 2, 255, 60, 23, 2, 255, 58, 23, 3, 255, 59, 19, 6, 255, 60, 18, 6, 255, 56, 19, 1, 255, 60, 18, 4, 255, 58, 16, 8, 255, 49, 18, 4, 255, 54, 21, 3, 255, 54, 18, 1, 255, 49, 15, 2, 255, 58, 15, 4, 255, 59, 17, 2, 255, 62, 19, 5, 255, 59, 19, 3, 255, 56, 19, 2, 255, 57, 17, 2, 255, 56, 15, 3, 255, 53, 18, 2, 255, 53, 14, 1, 255, 51, 15, 5, 255, 52, 18, 2, 255, 58, 17, 4, 255, 53, 16, 3, 255, 55, 18, 2, 255, 67, 17, 4, 255, 76, 16, 0, 255, 73, 19, 2, 255, 64, 16, 8, 255, 56, 15, 10, 255, 46, 17, 3, 255, 53, 17, 4, 255, 49, 13, 2, 255, 46, 14, 3, 255, 46, 13, 1, 255, 53, 19, 4, 255, 45, 16, 2, 255, 45, 14, 2, 255, 52, 12, 4, 255, 43, 11, 3, 255, 37, 14, 5, 255, 32, 8, 2, 255, 28, 14, 5, 255, 30, 14, 5, 255, 32, 9, 3, 255, 30, 6, 1, 255, 35, 9, 2, 255, 42, 9, 5, 255, 40, 9, 8, 255, 37, 7, 4, 255, 43, 13, 4, 255, 43, 12, 5, 255, 43, 16, 4, 255, 47, 12, 7, 255, 48, 9, 13, 255, 54, 13, 6, 255, 52, 13, 4, 255, 55, 12, 5, 255, 57, 14, 5, 255, 57, 14, 3, 255, 54, 12, 2, 255, 52, 11, 3, 255, 57, 14, 5, 255, 56, 13, 4, 255, 52, 11, 3, 255, 48, 13, 3, 255, 47, 14, 3, 255, 44, 12, 1, 255, 62, 13, 3, 255, 72, 14, 3, 255, 71, 15, 5, 255, 66, 15, 3, 255, 58, 13, 1, 255, 51, 13, 2, 255, 46, 13, 3, 255, 47, 15, 1, 255, 61, 15, 5, 255, 63, 10, 4, 255, 46, 10, 2, 255, 43, 12, 3, 255, 42, 11, 2, 255, 37, 7, 1, 255, 41, 11, 4, 255, 43, 11, 2, 255, 42, 8, 1, 255, 36, 9, 2, 255, 41, 14, 5, 255, 43, 10, 2, 255, 41, 10, 3, 255, 35, 10, 3, 255, 32, 7, 0, 255, 35, 7, 0, 255, 41, 12, 5, 255, 36, 8, 4, 255, 28, 10, 3, 255, 24, 6, 0, 255, 23, 4, 0, 255, 24, 5, 1, 255, 26, 9, 4, 255, 20, 6, 1, 255, 26, 5, 2, 255, 29, 6, 2, 255, 32, 8, 2, 255, 39, 7, 1, 255, 47, 10, 3, 255, 47, 10, 2, 255, 47, 10, 3, 255, 44, 9, 2, 255, 48, 11, 4, 255, 47, 11, 4, 255, 7, 3, 1, 255, 6, 1, 0, 255, 6, 0, 1, 255, 9, 2, 2, 255, 11, 3, 2, 255, 9, 0, 0, 255, 11, 1, 1, 255, 10, 0, 1, 255, 11, 1, 0, 255, 12, 2, 0, 255, 11, 2, 0, 255, 10, 1, 0, 255, 10, 0, 1, 255, 12, 1, 1, 255, 13, 2, 2, 255, 12, 2, 1, 255, 12, 2, 0, 255, 14, 2, 1, 255, 15, 2, 0, 255, 14, 1, 1, 255, 12, 2, 1, 255, 12, 4, 2, 255, 16, 4, 4, 255, 16, 3, 2, 255, 13, 3, 2, 255, 11, 2, 1, 255, 15, 6, 4, 255, 10, 3, 2, 255, 10, 3, 0, 255, 11, 5, 1, 255, 13, 5, 2, 255, 14, 5, 2, 255, 12, 4, 2, 255, 12, 2, 2, 255, 11, 1, 1, 255, 14, 4, 2, 255, 14, 4, 2, 255, 15, 6, 4, 255, 15, 6, 2, 255, 15, 5, 1, 255, 16, 6, 4, 255, 15, 5, 3, 255, 16, 4, 1, 255, 20, 6, 1, 255, 23, 7, 1, 255, 24, 9, 4, 255, 18, 7, 1, 255, 14, 6, 1, 255, 16, 8, 1, 255, 21, 10, 2, 255, 25, 10, 3, 255, 19, 7, 1, 255, 24, 10, 2, 255, 28, 11, 2, 255, 24, 8, 1, 255, 26, 12, 4, 255, 23, 9, 1, 255, 25, 11, 4, 255, 21, 8, 0, 255, 24, 12, 4, 255, 24, 10, 2, 255, 30, 12, 3, 255, 30, 11, 1, 255, 28, 13, 3, 255, 25, 11, 4, 255, 25, 11, 1, 255, 30, 16, 6, 255, 28, 15, 6, 255, 28, 13, 4, 255, 31, 13, 3, 255, 36, 14, 2, 255, 35, 18, 3, 255, 28, 16, 1, 255, 32, 14, 1, 255, 31, 14, 5, 255, 27, 13, 4, 255, 31, 16, 5, 255, 37, 16, 5, 255, 37, 17, 3, 255, 32, 15, 0, 255, 34, 14, 1, 255, 40, 15, 2, 255, 35, 16, 1, 255, 31, 15, 1, 255, 39, 16, 5, 255, 34, 17, 3, 255, 39, 18, 3, 255, 42, 20, 4, 255, 34, 18, 2, 255, 49, 20, 7, 255, 39, 15, 1, 255, 31, 20, 4, 255, 45, 15, 3, 255, 54, 20, 5, 255, 40, 19, 4, 255, 38, 19, 5, 255, 30, 18, 8, 255, 40, 22, 5, 255, 42, 21, 1, 255, 41, 20, 2, 255, 45, 23, 7, 255, 51, 20, 4, 255, 49, 21, 1, 255, 53, 21, 2, 255, 48, 21, 3, 255, 39, 21, 1, 255, 45, 22, 4, 255, 42, 20, 1, 255, 45, 23, 5, 255, 52, 17, 11, 255, 44, 21, 3, 255, 48, 22, 2, 255, 50, 24, 4, 255, 35, 25, 1, 255, 46, 26, 2, 255, 55, 25, 3, 255, 48, 24, 3, 255, 41, 26, 3, 255, 48, 24, 4, 255, 56, 24, 5, 255, 56, 29, 6, 255, 50, 23, 1, 255, 52, 24, 6, 255, 56, 24, 6, 255, 50, 22, 5, 255, 47, 27, 4, 255, 50, 30, 5, 255, 51, 25, 1, 255, 46, 24, 11, 255, 51, 32, 2, 255, 46, 27, 1, 255, 50, 29, 6, 255, 50, 25, 5, 255, 57, 29, 9, 255, 54, 30, 4, 255, 54, 33, 3, 255, 53, 31, 6, 255, 55, 35, 16, 255, 55, 37, 13, 255, 58, 42, 15, 255, 55, 44, 22, 255, 54, 48, 27, 255, 67, 57, 27, 255, 66, 61, 21, 255, 70, 65, 26, 255, 73, 66, 35, 255, 68, 69, 42, 255, 71, 76, 50, 255, 74, 79, 54, 255, 73, 81, 58, 255, 77, 89, 69, 255, 78, 95, 75, 255, 79, 97, 79, 255, 84, 104, 85, 255, 86, 112, 91, 255, 91, 120, 101, 255, 89, 125, 104, 255, 93, 133, 112, 255, 97, 140, 121, 255, 98, 144, 129, 255, 99, 148, 136, 255, 104, 152, 140, 255, 107, 155, 143, 255, 108, 159, 145, 255, 109, 162, 146, 255, 110, 160, 145, 255, 111, 161, 146, 255, 111, 161, 143, 255, 117, 161, 142, 255, 114, 157, 137, 255, 110, 154, 134, 255, 109, 152, 131, 255, 107, 152, 126, 255, 101, 147, 113, 255, 101, 139, 110, 255, 103, 135, 105, 255, 103, 129, 101, 255, 101, 122, 95, 255, 97, 117, 80, 255, 94, 113, 81, 255, 91, 105, 77, 255, 88, 99, 69, 255, 86, 94, 60, 255, 87, 89, 58, 255, 89, 86, 55, 255, 85, 80, 45, 255, 85, 82, 43, 255, 77, 74, 32, 255, 76, 71, 37, 255, 75, 67, 36, 255, 77, 64, 18, 255, 83, 65, 19, 255, 81, 61, 16, 255, 76, 56, 24, 255, 77, 53, 24, 255, 83, 51, 17, 255, 80, 49, 18, 255, 75, 51, 10, 255, 70, 47, 9, 255, 70, 44, 6, 255, 75, 44, 8, 255, 73, 41, 12, 255, 71, 40, 7, 255, 76, 43, 4, 255, 74, 38, 3, 255, 70, 38, 6, 255, 72, 37, 5, 255, 71, 38, 1, 255, 72, 38, 3, 255, 70, 34, 7, 255, 72, 36, 7, 255, 69, 32, 4, 255, 72, 31, 5, 255, 70, 32, 10, 255, 65, 37, 5, 255, 70, 34, 5, 255, 75, 31, 1, 255, 72, 31, 6, 255, 72, 31, 6, 255, 69, 29, 3, 255, 71, 36, 6, 255, 73, 31, 3, 255, 76, 30, 4, 255, 75, 36, 7, 255, 77, 31, 7, 255, 66, 30, 3, 255, 71, 28, 2, 255, 77, 28, 2, 255, 79, 32, 4, 255, 74, 31, 2, 255, 73, 28, 3, 255, 70, 28, 7, 255, 70, 28, 4, 255, 70, 27, 5, 255, 69, 25, 4, 255, 70, 31, 4, 255, 67, 30, 2, 255, 66, 28, 0, 255, 59, 22, 8, 255, 65, 26, 8, 255, 71, 28, 2, 255, 69, 28, 2, 255, 72, 27, 5, 255, 75, 25, 4, 255, 77, 31, 6, 255, 70, 28, 3, 255, 71, 27, 3, 255, 75, 28, 2, 255, 76, 27, 0, 255, 79, 31, 3, 255, 78, 29, 2, 255, 78, 28, 3, 255, 76, 29, 4, 255, 71, 26, 2, 255, 72, 26, 3, 255, 77, 28, 5, 255, 78, 24, 4, 255, 76, 27, 2, 255, 71, 25, 0, 255, 76, 25, 9, 255, 67, 19, 4, 255, 70, 25, 1, 255, 68, 28, 2, 255, 71, 27, 3, 255, 73, 23, 2, 255, 70, 25, 3, 255, 68, 28, 5, 255, 66, 24, 3, 255, 70, 19, 2, 255, 64, 23, 1, 255, 60, 26, 4, 255, 66, 25, 5, 255, 62, 19, 2, 255, 58, 22, 1, 255, 58, 25, 3, 255, 61, 24, 1, 255, 61, 21, 1, 255, 65, 23, 7, 255, 65, 21, 6, 255, 66, 19, 4, 255, 70, 22, 5, 255, 75, 24, 5, 255, 71, 18, 2, 255, 66, 20, 4, 255, 63, 21, 6, 255, 63, 20, 5, 255, 62, 23, 5, 255, 58, 23, 3, 255, 54, 17, 0, 255, 63, 23, 4, 255, 59, 23, 2, 255, 56, 20, 1, 255, 63, 17, 3, 255, 61, 17, 1, 255, 56, 17, 2, 255, 48, 17, 4, 255, 51, 20, 4, 255, 61, 19, 1, 255, 61, 21, 0, 255, 52, 17, 1, 255, 53, 13, 6, 255, 58, 16, 7, 255, 48, 16, 6, 255, 52, 16, 7, 255, 61, 20, 0, 255, 57, 18, 2, 255, 49, 14, 6, 255, 55, 17, 2, 255, 56, 17, 2, 255, 50, 16, 1, 255, 58, 19, 6, 255, 47, 17, 3, 255, 56, 17, 3, 255, 52, 14, 1, 255, 45, 12, 1, 255, 54, 15, 2, 255, 58, 15, 6, 255, 48, 12, 4, 255, 48, 13, 4, 255, 47, 16, 5, 255, 42, 15, 6, 255, 39, 16, 1, 255, 40, 14, 3, 255, 47, 14, 8, 255, 42, 10, 1, 255, 44, 15, 1, 255, 43, 15, 2, 255, 45, 14, 2, 255, 49, 12, 4, 255, 46, 13, 6, 255, 41, 10, 6, 255, 42, 12, 5, 255, 36, 14, 4, 255, 34, 13, 5, 255, 38, 14, 4, 255, 33, 7, 1, 255, 37, 12, 5, 255, 36, 10, 4, 255, 36, 8, 0, 255, 44, 11, 2, 255, 52, 15, 5, 255, 56, 13, 7, 255, 54, 16, 7, 255, 60, 17, 2, 255, 47, 13, 0, 255, 43, 12, 5, 255, 45, 13, 4, 255, 55, 12, 5, 255, 58, 12, 4, 255, 49, 12, 4, 255, 49, 14, 5, 255, 54, 14, 4, 255, 54, 15, 4, 255, 52, 13, 6, 255, 46, 8, 5, 255, 45, 10, 6, 255, 48, 14, 5, 255, 55, 14, 4, 255, 57, 15, 3, 255, 66, 16, 4, 255, 72, 13, 4, 255, 66, 13, 1, 255, 65, 17, 3, 255, 58, 14, 4, 255, 46, 12, 2, 255, 46, 12, 4, 255, 50, 11, 2, 255, 50, 11, 3, 255, 40, 10, 1, 255, 37, 10, 1, 255, 38, 11, 4, 255, 37, 8, 2, 255, 39, 11, 4, 255, 38, 12, 4, 255, 40, 11, 2, 255, 42, 9, 0, 255, 48, 14, 2, 255, 52, 14, 7, 255, 44, 7, 3, 255, 39, 10, 3, 255, 39, 13, 2, 255, 34, 10, 0, 255, 37, 8, 2, 255, 32, 6, 5, 255, 24, 6, 0, 255, 26, 8, 1, 255, 24, 4, 1, 255, 26, 6, 3, 255, 24, 7, 2, 255, 23, 6, 2, 255, 27, 6, 4, 255, 26, 8, 2, 255, 27, 9, 1, 255, 39, 11, 3, 255, 47, 11, 2, 255, 46, 11, 2, 255, 40, 8, 1, 255, 39, 7, 0, 255, 45, 11, 3, 255, 45, 11, 3, 255, 5, 2, 5, 255, 3, 2, 1, 255, 3, 1, 0, 255, 5, 2, 0, 255, 8, 2, 2, 255, 9, 0, 0, 255, 12, 2, 0, 255, 12, 2, 1, 255, 12, 2, 1, 255, 11, 1, 0, 255, 11, 1, 0, 255, 11, 1, 0, 255, 13, 2, 2, 255, 18, 4, 4, 255, 14, 2, 2, 255, 12, 2, 1, 255, 13, 3, 2, 255, 14, 4, 2, 255, 13, 3, 1, 255, 12, 2, 1, 255, 13, 4, 3, 255, 11, 2, 1, 255, 13, 3, 2, 255, 17, 3, 1, 255, 16, 4, 3, 255, 13, 2, 1, 255, 15, 1, 2, 255, 17, 3, 3, 255, 16, 2, 2, 255, 17, 3, 2, 255, 16, 3, 3, 255, 16, 3, 3, 255, 13, 2, 1, 255, 15, 4, 2, 255, 16, 5, 3, 255, 13, 4, 2, 255, 13, 5, 3, 255, 12, 5, 1, 255, 13, 4, 1, 255, 15, 4, 2, 255, 17, 7, 5, 255, 16, 6, 5, 255, 15, 4, 1, 255, 18, 6, 0, 255, 20, 7, 0, 255, 15, 7, 2, 255, 18, 6, 2, 255, 22, 7, 5, 255, 22, 8, 4, 255, 21, 9, 5, 255, 15, 6, 1, 255, 18, 9, 4, 255, 20, 9, 1, 255, 24, 11, 2, 255, 23, 10, 2, 255, 22, 7, 1, 255, 22, 6, 1, 255, 27, 11, 4, 255, 24, 11, 4, 255, 22, 9, 2, 255, 26, 12, 3, 255, 29, 12, 4, 255, 29, 12, 2, 255, 28, 13, 2, 255, 27, 12, 3, 255, 27, 11, 2, 255, 26, 11, 1, 255, 26, 13, 4, 255, 28, 15, 6, 255, 27, 14, 2, 255, 32, 15, 1, 255, 35, 19, 4, 255, 31, 20, 3, 255, 30, 16, 2, 255, 32, 15, 3, 255, 31, 16, 4, 255, 29, 16, 1, 255, 34, 13, 3, 255, 30, 19, 4, 255, 34, 17, 3, 255, 36, 16, 3, 255, 36, 18, 4, 255, 36, 18, 4, 255, 37, 18, 4, 255, 37, 16, 4, 255, 33, 15, 3, 255, 35, 14, 2, 255, 41, 19, 3, 255, 41, 24, 6, 255, 38, 21, 5, 255, 34, 17, 3, 255, 37, 15, 3, 255, 44, 17, 5, 255, 43, 19, 5, 255, 38, 17, 3, 255, 42, 16, 6, 255, 30, 15, 4, 255, 41, 20, 4, 255, 46, 21, 4, 255, 40, 18, 2, 255, 42, 22, 6, 255, 42, 19, 3, 255, 42, 20, 2, 255, 43, 22, 5, 255, 44, 19, 3, 255, 42, 21, 2, 255, 48, 26, 5, 255, 52, 22, 3, 255, 53, 26, 6, 255, 51, 22, 5, 255, 47, 25, 4, 255, 42, 24, 4, 255, 47, 24, 9, 255, 46, 22, 3, 255, 58, 25, 4, 255, 56, 27, 2, 255, 59, 27, 5, 255, 50, 25, 2, 255, 54, 27, 4, 255, 51, 26, 1, 255, 44, 29, 0, 255, 47, 30, 1, 255, 51, 27, 5, 255, 50, 25, 3, 255, 49, 25, 3, 255, 48, 30, 6, 255, 47, 26, 4, 255, 50, 21, 2, 255, 59, 24, 6, 255, 55, 24, 6, 255, 54, 26, 5, 255, 58, 30, 3, 255, 57, 27, 11, 255, 53, 23, 12, 255, 48, 32, 2, 255, 52, 32, 5, 255, 56, 26, 10, 255, 57, 34, 13, 255, 59, 40, 13, 255, 62, 44, 19, 255, 60, 44, 20, 255, 67, 49, 20, 255, 73, 56, 32, 255, 70, 61, 34, 255, 67, 63, 28, 255, 71, 66, 36, 255, 68, 70, 48, 255, 68, 72, 55, 255, 73, 79, 61, 255, 75, 85, 66, 255, 76, 91, 72, 255, 77, 94, 75, 255, 82, 101, 81, 255, 87, 111, 89, 255, 82, 115, 94, 255, 85, 122, 104, 255, 88, 130, 113, 255, 92, 136, 117, 255, 93, 141, 123, 255, 96, 147, 132, 255, 99, 151, 138, 255, 106, 156, 144, 255, 109, 159, 147, 255, 107, 159, 147, 255, 108, 161, 147, 255, 113, 161, 148, 255, 112, 161, 150, 255, 113, 162, 149, 255, 115, 159, 144, 255, 116, 159, 139, 255, 110, 153, 131, 255, 107, 152, 125, 255, 103, 148, 120, 255, 100, 145, 114, 255, 104, 142, 105, 255, 103, 134, 101, 255, 100, 127, 95, 255, 98, 120, 89, 255, 95, 113, 87, 255, 91, 108, 76, 255, 89, 103, 70, 255, 90, 95, 62, 255, 86, 92, 59, 255, 85, 85, 57, 255, 88, 83, 41, 255, 86, 86, 30, 255, 83, 80, 29, 255, 81, 74, 33, 255, 78, 70, 29, 255, 78, 67, 27, 255, 78, 60, 32, 255, 84, 61, 20, 255, 87, 63, 10, 255, 76, 58, 9, 255, 67, 48, 27, 255, 69, 45, 29, 255, 74, 47, 11, 255, 74, 45, 9, 255, 69, 40, 15, 255, 69, 42, 9, 255, 69, 42, 9, 255, 72, 40, 10, 255, 74, 39, 6, 255, 75, 43, 7, 255, 69, 37, 7, 255, 70, 31, 5, 255, 71, 38, 0, 255, 72, 38, 2, 255, 76, 37, 10, 255, 75, 34, 6, 255, 73, 37, 4, 255, 70, 36, 3, 255, 73, 32, 2, 255, 78, 32, 2, 255, 76, 32, 1, 255, 79, 31, 1, 255, 78, 27, 4, 255, 76, 31, 7, 255, 70, 30, 2, 255, 75, 33, 7, 255, 76, 31, 6, 255, 74, 29, 3, 255, 74, 28, 3, 255, 77, 29, 3, 255, 72, 29, 5, 255, 69, 30, 5, 255, 73, 29, 6, 255, 71, 27, 2, 255, 72, 31, 5, 255, 76, 28, 8, 255, 74, 26, 4, 255, 78, 32, 3, 255, 72, 25, 3, 255, 71, 26, 6, 255, 71, 28, 5, 255, 67, 24, 5, 255, 71, 31, 6, 255, 72, 29, 7, 255, 73, 24, 1, 255, 67, 22, 7, 255, 64, 24, 10, 255, 69, 26, 2, 255, 75, 29, 3, 255, 72, 27, 1, 255, 73, 30, 3, 255, 73, 31, 2, 255, 73, 30, 3, 255, 75, 29, 3, 255, 72, 27, 2, 255, 72, 26, 2, 255, 74, 25, 3, 255, 75, 26, 1, 255, 76, 30, 1, 255, 72, 29, 0, 255, 76, 31, 6, 255, 73, 26, 5, 255, 72, 27, 3, 255, 73, 26, 2, 255, 75, 26, 2, 255, 78, 25, 4, 255, 75, 24, 4, 255, 75, 28, 4, 255, 66, 28, 2, 255, 66, 28, 3, 255, 64, 22, 1, 255, 67, 23, 2, 255, 67, 25, 4, 255, 59, 25, 3, 255, 62, 27, 6, 255, 72, 23, 3, 255, 60, 27, 3, 255, 59, 25, 3, 255, 63, 23, 4, 255, 66, 23, 4, 255, 74, 23, 6, 255, 71, 24, 3, 255, 68, 22, 3, 255, 58, 18, 0, 255, 56, 19, 3, 255, 61, 19, 4, 255, 63, 18, 3, 255, 65, 19, 3, 255, 63, 22, 5, 255, 55, 16, 1, 255, 58, 19, 5, 255, 67, 26, 9, 255, 56, 19, 4, 255, 54, 21, 4, 255, 60, 21, 4, 255, 60, 21, 5, 255, 57, 20, 4, 255, 55, 17, 2, 255, 54, 15, 1, 255, 53, 18, 1, 255, 56, 17, 3, 255, 56, 19, 4, 255, 53, 18, 1, 255, 57, 21, 3, 255, 49, 15, 0, 255, 57, 20, 5, 255, 60, 15, 5, 255, 57, 15, 5, 255, 54, 18, 3, 255, 54, 23, 4, 255, 57, 20, 7, 255, 56, 14, 4, 255, 48, 18, 4, 255, 48, 18, 1, 255, 57, 19, 2, 255, 53, 20, 4, 255, 49, 15, 1, 255, 55, 17, 4, 255, 61, 16, 4, 255, 54, 17, 5, 255, 44, 15, 5, 255, 47, 14, 3, 255, 51, 16, 6, 255, 44, 13, 3, 255, 54, 16, 7, 255, 52, 13, 2, 255, 43, 12, 6, 255, 31, 12, 7, 255, 39, 16, 3, 255, 60, 22, 4, 255, 59, 16, 2, 255, 56, 16, 4, 255, 53, 18, 4, 255, 52, 17, 5, 255, 46, 13, 2, 255, 35, 12, 1, 255, 39, 12, 3, 255, 45, 10, 2, 255, 45, 13, 3, 255, 37, 9, 3, 255, 44, 13, 6, 255, 44, 13, 8, 255, 40, 10, 4, 255, 42, 10, 5, 255, 43, 10, 3, 255, 53, 15, 2, 255, 70, 19, 4, 255, 63, 18, 3, 255, 61, 16, 5, 255, 47, 14, 0, 255, 60, 16, 3, 255, 52, 14, 3, 255, 49, 10, 3, 255, 51, 11, 1, 255, 53, 15, 2, 255, 53, 12, 3, 255, 52, 12, 2, 255, 50, 15, 3, 255, 45, 12, 1, 255, 47, 12, 3, 255, 47, 9, 2, 255, 54, 14, 4, 255, 63, 16, 5, 255, 72, 14, 4, 255, 61, 12, 1, 255, 55, 15, 2, 255, 58, 16, 4, 255, 61, 14, 4, 255, 58, 10, 2, 255, 54, 11, 3, 255, 48, 14, 3, 255, 43, 13, 5, 255, 36, 9, 0, 255, 38, 15, 3, 255, 43, 8, 4, 255, 41, 10, 3, 255, 36, 11, 0, 255, 43, 12, 2, 255, 41, 10, 2, 255, 41, 8, 3, 255, 49, 12, 6, 255, 46, 10, 3, 255, 42, 9, 4, 255, 43, 12, 6, 255, 34, 7, 1, 255, 38, 10, 2, 255, 48, 15, 6, 255, 43, 11, 1, 255, 35, 3, 0, 255, 33, 8, 6, 255, 27, 8, 2, 255, 26, 8, 3, 255, 23, 5, 1, 255, 23, 7, 3, 255, 21, 7, 2, 255, 18, 5, 0, 255, 25, 10, 5, 255, 25, 7, 3, 255, 27, 7, 2, 255, 34, 11, 3, 255, 45, 10, 1, 255, 51, 12, 5, 255, 41, 10, 2, 255, 42, 8, 3, 255, 45, 9, 5, 255, 42, 8, 3, 255, 1, 3, 4, 255, 1, 1, 6, 255, 3, 3, 5, 255, 5, 4, 1, 255, 8, 2, 0, 255, 9, 0, 2, 255, 10, 1, 2, 255, 10, 2, 0, 255, 10, 2, 0, 255, 10, 1, 2, 255, 11, 1, 2, 255, 11, 1, 0, 255, 12, 0, 0, 255, 14, 1, 1, 255, 13, 2, 2, 255, 13, 3, 2, 255, 12, 2, 1, 255, 12, 2, 1, 255, 14, 3, 1, 255, 11, 2, 0, 255, 12, 3, 1, 255, 12, 2, 1, 255, 13, 2, 1, 255, 17, 4, 2, 255, 18, 4, 3, 255, 13, 2, 1, 255, 10, 2, 0, 255, 13, 3, 2, 255, 14, 3, 2, 255, 14, 4, 2, 255, 12, 3, 1, 255, 8, 1, 0, 255, 15, 4, 2, 255, 15, 4, 2, 255, 16, 5, 3, 255, 17, 6, 4, 255, 13, 3, 1, 255, 15, 5, 3, 255, 16, 4, 2, 255, 14, 2, 1, 255, 15, 4, 2, 255, 16, 6, 4, 255, 16, 6, 2, 255, 16, 7, 0, 255, 16, 5, 0, 255, 20, 6, 2, 255, 20, 7, 4, 255, 16, 5, 1, 255, 19, 8, 4, 255, 20, 7, 4, 255, 20, 6, 2, 255, 20, 9, 5, 255, 20, 8, 2, 255, 23, 9, 1, 255, 20, 7, 0, 255, 21, 7, 2, 255, 23, 10, 4, 255, 25, 10, 4, 255, 26, 11, 5, 255, 24, 10, 2, 255, 28, 13, 4, 255, 30, 13, 5, 255, 29, 13, 5, 255, 26, 11, 3, 255, 28, 11, 3, 255, 30, 13, 3, 255, 30, 13, 3, 255, 30, 16, 5, 255, 27, 13, 3, 255, 27, 13, 1, 255, 31, 17, 3, 255, 36, 14, 1, 255, 39, 16, 2, 255, 35, 18, 4, 255, 33, 15, 3, 255, 36, 14, 2, 255, 35, 15, 2, 255, 35, 16, 5, 255, 24, 15, 1, 255, 31, 17, 5, 255, 36, 18, 6, 255, 31, 14, 1, 255, 35, 17, 3, 255, 32, 17, 2, 255, 32, 14, 1, 255, 34, 17, 6, 255, 35, 18, 6, 255, 36, 19, 3, 255, 41, 16, 3, 255, 40, 17, 1, 255, 37, 20, 7, 255, 44, 15, 7, 255, 34, 14, 2, 255, 33, 22, 5, 255, 29, 16, 0, 255, 36, 20, 8, 255, 39, 17, 6, 255, 41, 17, 3, 255, 46, 24, 5, 255, 42, 22, 4, 255, 42, 20, 6, 255, 47, 18, 3, 255, 48, 19, 5, 255, 45, 20, 5, 255, 44, 18, 3, 255, 41, 21, 2, 255, 42, 23, 2, 255, 44, 21, 0, 255, 45, 26, 3, 255, 50, 24, 6, 255, 48, 21, 2, 255, 40, 22, 1, 255, 48, 23, 2, 255, 49, 20, 3, 255, 52, 21, 6, 255, 42, 26, 1, 255, 44, 28, 5, 255, 49, 25, 6, 255, 50, 26, 4, 255, 51, 28, 4, 255, 51, 27, 3, 255, 51, 25, 2, 255, 53, 26, 3, 255, 57, 28, 4, 255, 53, 25, 3, 255, 53, 28, 5, 255, 54, 26, 9, 255, 52, 21, 7, 255, 44, 27, 6, 255, 49, 23, 10, 255, 52, 24, 11, 255, 45, 26, 1, 255, 46, 28, 2, 255, 52, 25, 8, 255, 57, 30, 8, 255, 56, 36, 11, 255, 50, 32, 8, 255, 55, 36, 9, 255, 60, 37, 15, 255, 66, 42, 19, 255, 71, 47, 15, 255, 75, 53, 15, 255, 68, 52, 31, 255, 64, 55, 45, 255, 61, 56, 45, 255, 68, 65, 50, 255, 67, 66, 50, 255, 67, 73, 58, 255, 70, 79, 63, 255, 73, 84, 67, 255, 78, 91, 74, 255, 81, 98, 80, 255, 80, 104, 82, 255, 84, 112, 90, 255, 83, 120, 100, 255, 85, 128, 111, 255, 87, 134, 120, 255, 94, 141, 126, 255, 97, 148, 133, 255, 98, 152, 136, 255, 103, 156, 146, 255, 106, 160, 147, 255, 108, 162, 149, 255, 109, 162, 149, 255, 112, 164, 151, 255, 116, 165, 153, 255, 115, 164, 153, 255, 112, 161, 150, 255, 116, 160, 145, 255, 113, 156, 137, 255, 110, 154, 133, 255, 108, 150, 126, 255, 105, 148, 120, 255, 102, 142, 116, 255, 103, 138, 106, 255, 102, 129, 101, 255, 98, 123, 92, 255, 96, 119, 81, 255, 96, 115, 78, 255, 88, 104, 75, 255, 90, 98, 76, 255, 85, 92, 59, 255, 88, 90, 60, 255, 88, 84, 58, 255, 83, 79, 40, 255, 85, 77, 40, 255, 81, 70, 36, 255, 81, 67, 32, 255, 80, 66, 30, 255, 81, 68, 27, 255, 77, 60, 27, 255, 79, 58, 22, 255, 82, 56, 18, 255, 77, 52, 12, 255, 71, 45, 17, 255, 74, 45, 14, 255, 75, 46, 3, 255, 71, 42, 9, 255, 67, 41, 18, 255, 69, 41, 10, 255, 70, 38, 7, 255, 70, 39, 10, 255, 66, 38, 4, 255, 66, 37, 3, 255, 68, 35, 9, 255, 73, 35, 11, 255, 77, 37, 4, 255, 75, 34, 5, 255, 72, 31, 7, 255, 75, 35, 8, 255, 75, 32, 4, 255, 73, 34, 2, 255, 77, 32, 7, 255, 78, 30, 6, 255, 75, 29, 10, 255, 74, 31, 6, 255, 74, 34, 11, 255, 68, 32, 3, 255, 70, 34, 4, 255, 68, 29, 2, 255, 73, 28, 4, 255, 68, 30, 3, 255, 67, 32, 4, 255, 74, 30, 3, 255, 69, 32, 5, 255, 74, 28, 5, 255, 79, 29, 8, 255, 72, 27, 4, 255, 65, 30, 4, 255, 67, 24, 8, 255, 72, 29, 7, 255, 71, 29, 0, 255, 67, 25, 4, 255, 65, 25, 5, 255, 66, 27, 4, 255, 69, 30, 8, 255, 71, 28, 3, 255, 72, 24, 5, 255, 69, 29, 3, 255, 63, 31, 3, 255, 62, 29, 4, 255, 69, 26, 3, 255, 69, 24, 4, 255, 78, 29, 6, 255, 77, 28, 2, 255, 79, 30, 2, 255, 83, 32, 5, 255, 81, 29, 5, 255, 78, 28, 6, 255, 77, 30, 7, 255, 72, 24, 2, 255, 73, 25, 3, 255, 77, 31, 7, 255, 71, 27, 3, 255, 71, 26, 1, 255, 74, 27, 1, 255, 72, 29, 4, 255, 67, 29, 3, 255, 73, 27, 3, 255, 75, 24, 1, 255, 70, 30, 1, 255, 69, 27, 4, 255, 68, 26, 2, 255, 68, 30, 4, 255, 68, 27, 5, 255, 68, 22, 2, 255, 72, 23, 3, 255, 69, 24, 3, 255, 64, 23, 3, 255, 65, 23, 2, 255, 64, 22, 3, 255, 67, 22, 6, 255, 65, 21, 4, 255, 66, 23, 3, 255, 69, 20, 2, 255, 66, 19, 3, 255, 65, 22, 6, 255, 60, 20, 4, 255, 58, 20, 3, 255, 60, 21, 4, 255, 63, 20, 4, 255, 64, 22, 4, 255, 59, 21, 3, 255, 58, 20, 3, 255, 63, 20, 4, 255, 65, 18, 1, 255, 62, 19, 2, 255, 59, 23, 4, 255, 56, 22, 4, 255, 48, 18, 2, 255, 56, 20, 6, 255, 59, 17, 5, 255, 56, 20, 3, 255, 56, 17, 1, 255, 55, 20, 5, 255, 55, 21, 3, 255, 64, 21, 4, 255, 60, 19, 4, 255, 50, 16, 3, 255, 55, 19, 4, 255, 60, 21, 2, 255, 59, 20, 4, 255, 62, 19, 4, 255, 56, 18, 1, 255, 51, 16, 7, 255, 49, 15, 3, 255, 48, 17, 4, 255, 55, 16, 3, 255, 68, 19, 6, 255, 61, 17, 5, 255, 48, 15, 1, 255, 40, 13, 1, 255, 47, 17, 4, 255, 46, 15, 5, 255, 47, 17, 8, 255, 48, 16, 4, 255, 44, 12, 1, 255, 48, 20, 6, 255, 50, 15, 3, 255, 52, 16, 2, 255, 45, 14, 1, 255, 46, 14, 6, 255, 48, 15, 2, 255, 62, 21, 1, 255, 68, 19, 1, 255, 76, 24, 3, 255, 71, 17, 1, 255, 72, 16, 4, 255, 61, 15, 4, 255, 40, 13, 3, 255, 38, 14, 7, 255, 35, 7, 3, 255, 38, 10, 4, 255, 39, 14, 4, 255, 40, 12, 3, 255, 39, 10, 3, 255, 39, 10, 5, 255, 39, 11, 3, 255, 40, 12, 1, 255, 59, 20, 3, 255, 71, 15, 2, 255, 69, 16, 2, 255, 58, 13, 0, 255, 61, 12, 3, 255, 69, 15, 9, 255, 55, 10, 1, 255, 52, 12, 3, 255, 52, 12, 0, 255, 51, 14, 2, 255, 51, 13, 4, 255, 52, 13, 4, 255, 51, 14, 3, 255, 49, 13, 4, 255, 48, 13, 4, 255, 50, 15, 6, 255, 51, 15, 1, 255, 61, 17, 1, 255, 67, 15, 0, 255, 67, 13, 3, 255, 56, 12, 3, 255, 49, 14, 4, 255, 52, 10, 4, 255, 47, 10, 2, 255, 43, 15, 3, 255, 39, 14, 2, 255, 36, 12, 3, 255, 34, 10, 0, 255, 39, 13, 5, 255, 34, 12, 5, 255, 37, 8, 1, 255, 44, 11, 0, 255, 47, 17, 3, 255, 46, 13, 1, 255, 44, 8, 0, 255, 43, 14, 5, 255, 35, 13, 5, 255, 32, 9, 2, 255, 35, 8, 2, 255, 36, 9, 0, 255, 41, 10, 4, 255, 45, 11, 7, 255, 38, 8, 1, 255, 39, 8, 5, 255, 29, 4, 2, 255, 27, 6, 3, 255, 27, 6, 3, 255, 25, 5, 1, 255, 25, 7, 3, 255, 25, 7, 3, 255, 24, 7, 2, 255, 21, 5, 1, 255, 17, 4, 0, 255, 25, 9, 4, 255, 34, 7, 3, 255, 37, 5, 0, 255, 40, 8, 1, 255, 41, 8, 2, 255, 40, 9, 4, 255, 41, 9, 4, 255, 39, 7, 2, 255, 5, 5, 9, 255, 0, 1, 1, 255, 2, 3, 0, 255, 4, 4, 4, 255, 6, 2, 4, 255, 8, 1, 3, 255, 8, 2, 2, 255, 6, 2, 0, 255, 7, 1, 1, 255, 9, 1, 2, 255, 10, 0, 1, 255, 11, 1, 0, 255, 11, 1, 0, 255, 9, 1, 0, 255, 11, 3, 1, 255, 13, 3, 2, 255, 12, 2, 1, 255, 13, 1, 1, 255, 16, 3, 3, 255, 12, 2, 1, 255, 13, 3, 2, 255, 12, 1, 1, 255, 12, 1, 1, 255, 14, 3, 1, 255, 17, 2, 1, 255, 13, 2, 1, 255, 9, 3, 0, 255, 12, 3, 2, 255, 11, 1, 0, 255, 12, 2, 1, 255, 11, 5, 2, 255, 8, 2, 1, 255, 11, 3, 0, 255, 14, 4, 2, 255, 14, 4, 2, 255, 13, 2, 0, 255, 19, 6, 4, 255, 16, 1, 1, 255, 19, 4, 4, 255, 16, 4, 2, 255, 13, 2, 0, 255, 13, 2, 1, 255, 15, 6, 2, 255, 17, 8, 3, 255, 16, 7, 1, 255, 19, 7, 1, 255, 18, 7, 0, 255, 18, 6, 3, 255, 14, 3, 0, 255, 18, 5, 0, 255, 19, 6, 0, 255, 20, 6, 2, 255, 24, 7, 2, 255, 24, 9, 2, 255, 19, 8, 1, 255, 19, 9, 3, 255, 21, 11, 4, 255, 20, 8, 1, 255, 25, 9, 4, 255, 23, 11, 3, 255, 22, 9, 1, 255, 26, 11, 2, 255, 27, 13, 5, 255, 26, 12, 3, 255, 26, 11, 2, 255, 33, 15, 5, 255, 32, 13, 3, 255, 31, 14, 4, 255, 28, 10, 3, 255, 32, 13, 3, 255, 35, 15, 4, 255, 36, 15, 2, 255, 35, 17, 3, 255, 31, 14, 1, 255, 37, 13, 3, 255, 38, 14, 3, 255, 31, 15, 1, 255, 33, 16, 3, 255, 29, 15, 3, 255, 23, 13, 1, 255, 30, 15, 3, 255, 36, 15, 4, 255, 30, 13, 0, 255, 33, 15, 0, 255, 34, 17, 3, 255, 34, 15, 6, 255, 38, 18, 7, 255, 37, 14, 2, 255, 37, 17, 3, 255, 38, 22, 6, 255, 40, 15, 3, 255, 43, 14, 4, 255, 38, 19, 4, 255, 36, 18, 3, 255, 38, 18, 4, 255, 35, 20, 7, 255, 38, 20, 7, 255, 32, 16, 1, 255, 34, 17, 1, 255, 36, 19, 1, 255, 40, 20, 5, 255, 43, 18, 5, 255, 48, 19, 3, 255, 51, 22, 5, 255, 46, 21, 4, 255, 43, 20, 2, 255, 40, 19, 0, 255, 35, 19, 0, 255, 43, 21, 2, 255, 49, 18, 0, 255, 53, 21, 4, 255, 45, 27, 5, 255, 48, 25, 3, 255, 49, 21, 3, 255, 46, 25, 6, 255, 46, 23, 2, 255, 54, 22, 4, 255, 46, 23, 5, 255, 47, 22, 1, 255, 52, 23, 2, 255, 53, 24, 3, 255, 59, 24, 5, 255, 53, 26, 5, 255, 53, 27, 3, 255, 50, 24, 2, 255, 51, 26, 3, 255, 47, 22, 2, 255, 51, 26, 7, 255, 47, 27, 7, 255, 54, 26, 6, 255, 56, 27, 7, 255, 49, 24, 11, 255, 49, 26, 10, 255, 55, 29, 4, 255, 57, 25, 2, 255, 53, 31, 8, 255, 51, 35, 7, 255, 64, 39, 10, 255, 62, 40, 13, 255, 63, 43, 13, 255, 74, 48, 13, 255, 66, 49, 21, 255, 65, 58, 21, 255, 65, 63, 25, 255, 63, 66, 30, 255, 65, 68, 40, 255, 69, 71, 47, 255, 71, 77, 58, 255, 72, 82, 63, 255, 73, 86, 68, 255, 76, 92, 75, 255, 81, 102, 83, 255, 84, 110, 89, 255, 86, 118, 97, 255, 84, 122, 104, 255, 84, 130, 114, 255, 89, 139, 127, 255, 95, 144, 133, 255, 99, 151, 136, 255, 99, 155, 140, 255, 102, 160, 148, 255, 105, 161, 150, 255, 106, 163, 150, 255, 108, 164, 151, 255, 112, 166, 153, 255, 115, 165, 153, 255, 114, 164, 150, 255, 113, 162, 145, 255, 115, 162, 142, 255, 113, 158, 138, 255, 112, 155, 136, 255, 109, 150, 128, 255, 106, 146, 121, 255, 105, 141, 117, 255, 103, 134, 109, 255, 101, 128, 96, 255, 98, 122, 89, 255, 95, 114, 81, 255, 91, 108, 69, 255, 88, 101, 73, 255, 85, 93, 61, 255, 86, 90, 68, 255, 85, 87, 48, 255, 83, 80, 43, 255, 81, 75, 51, 255, 79, 73, 37, 255, 78, 72, 41, 255, 77, 64, 29, 255, 81, 65, 27, 255, 82, 60, 31, 255, 83, 62, 15, 255, 82, 56, 14, 255, 76, 53, 15, 255, 74, 49, 12, 255, 73, 46, 14, 255, 75, 47, 9, 255, 72, 44, 5, 255, 70, 45, 5, 255, 67, 41, 11, 255, 69, 40, 9, 255, 71, 37, 7, 255, 69, 37, 6, 255, 66, 40, 4, 255, 68, 40, 3, 255, 69, 34, 5, 255, 75, 36, 3, 255, 78, 34, 9, 255, 75, 31, 3, 255, 75, 34, 2, 255, 75, 32, 2, 255, 78, 32, 3, 255, 73, 29, 2, 255, 76, 33, 9, 255, 75, 31, 6, 255, 73, 30, 10, 255, 68, 30, 3, 255, 70, 31, 4, 255, 73, 33, 3, 255, 72, 33, 5, 255, 71, 30, 5, 255, 73, 29, 6, 255, 67, 32, 4, 255, 65, 35, 6, 255, 72, 33, 5, 255, 78, 27, 2, 255, 70, 27, 3, 255, 63, 29, 2, 255, 71, 31, 4, 255, 71, 30, 4, 255, 68, 29, 12, 255, 64, 30, 5, 255, 66, 25, 2, 255, 67, 26, 4, 255, 66, 27, 5, 255, 65, 26, 5, 255, 72, 31, 3, 255, 72, 27, 3, 255, 69, 28, 6, 255, 64, 29, 2, 255, 67, 28, 1, 255, 72, 27, 4, 255, 71, 24, 6, 255, 73, 24, 3, 255, 77, 27, 6, 255, 79, 29, 6, 255, 79, 30, 3, 255, 79, 27, 1, 255, 79, 28, 2, 255, 78, 29, 4, 255, 75, 28, 3, 255, 74, 26, 4, 255, 76, 28, 7, 255, 73, 28, 4, 255, 72, 27, 2, 255, 75, 32, 5, 255, 74, 29, 1, 255, 74, 22, 2, 255, 74, 22, 4, 255, 74, 27, 6, 255, 72, 31, 5, 255, 70, 25, 0, 255, 70, 23, 4, 255, 74, 28, 4, 255, 73, 27, 1, 255, 71, 25, 2, 255, 68, 23, 2, 255, 68, 24, 0, 255, 74, 24, 2, 255, 76, 24, 5, 255, 62, 24, 1, 255, 65, 24, 3, 255, 67, 23, 6, 255, 70, 20, 5, 255, 66, 20, 1, 255, 56, 23, 0, 255, 66, 21, 0, 255, 69, 20, 0, 255, 69, 22, 4, 255, 63, 18, 4, 255, 57, 18, 4, 255, 54, 20, 4, 255, 55, 21, 5, 255, 57, 21, 4, 255, 59, 20, 5, 255, 61, 17, 3, 255, 63, 16, 1, 255, 62, 21, 6, 255, 55, 19, 5, 255, 55, 19, 0, 255, 49, 19, 1, 255, 56, 19, 7, 255, 58, 15, 3, 255, 54, 17, 0, 255, 56, 18, 3, 255, 61, 21, 6, 255, 53, 19, 2, 255, 53, 22, 1, 255, 54, 19, 3, 255, 63, 19, 9, 255, 53, 16, 2, 255, 53, 22, 0, 255, 66, 21, 2, 255, 53, 17, 2, 255, 51, 15, 1, 255, 52, 16, 6, 255, 48, 17, 1, 255, 48, 15, 5, 255, 55, 14, 3, 255, 53, 18, 1, 255, 54, 18, 2, 255, 53, 15, 1, 255, 49, 14, 1, 255, 50, 17, 5, 255, 51, 16, 5, 255, 48, 16, 2, 255, 53, 16, 2, 255, 52, 13, 2, 255, 49, 17, 4, 255, 53, 16, 6, 255, 51, 18, 6, 255, 43, 14, 7, 255, 51, 15, 2, 255, 50, 16, 2, 255, 52, 16, 4, 255, 71, 20, 5, 255, 75, 25, 5, 255, 68, 23, 3, 255, 72, 20, 4, 255, 64, 16, 4, 255, 44, 10, 1, 255, 41, 12, 7, 255, 35, 7, 4, 255, 34, 10, 4, 255, 36, 11, 2, 255, 41, 13, 4, 255, 41, 13, 4, 255, 40, 13, 5, 255, 36, 10, 1, 255, 41, 15, 4, 255, 68, 21, 3, 255, 66, 20, 3, 255, 66, 16, 3, 255, 68, 19, 1, 255, 72, 18, 3, 255, 54, 12, 2, 255, 52, 10, 2, 255, 49, 12, 4, 255, 53, 14, 4, 255, 54, 10, 3, 255, 47, 13, 5, 255, 45, 16, 5, 255, 55, 10, 3, 255, 56, 11, 5, 255, 54, 13, 6, 255, 45, 9, 2, 255, 49, 11, 1, 255, 54, 12, 0, 255, 63, 16, 3, 255, 58, 15, 5, 255, 40, 10, 1, 255, 35, 11, 1, 255, 42, 9, 2, 255, 44, 7, 2, 255, 41, 9, 0, 255, 41, 8, 1, 255, 39, 11, 2, 255, 39, 14, 5, 255, 34, 9, 4, 255, 31, 10, 4, 255, 36, 8, 2, 255, 47, 16, 5, 255, 62, 13, 4, 255, 63, 16, 6, 255, 49, 13, 2, 255, 38, 8, 0, 255, 39, 9, 3, 255, 42, 11, 6, 255, 42, 8, 3, 255, 40, 9, 1, 255, 38, 8, 3, 255, 34, 6, 1, 255, 33, 12, 3, 255, 35, 9, 4, 255, 30, 4, 1, 255, 24, 6, 1, 255, 26, 8, 4, 255, 22, 5, 1, 255, 22, 5, 1, 255, 23, 6, 2, 255, 27, 7, 3, 255, 22, 6, 2, 255, 19, 7, 1, 255, 22, 6, 1, 255, 30, 5, 1, 255, 38, 9, 3, 255, 38, 7, 2, 255, 41, 9, 4, 255, 34, 9, 1, 255, 36, 8, 2, 255, 36, 7, 1, 255, 55, 53, 43, 255, 26, 25, 24, 255, 3, 3, 11, 255, 0, 0, 9, 255, 3, 3, 6, 255, 4, 2, 1, 255, 4, 3, 2, 255, 5, 2, 3, 255, 5, 3, 1, 255, 6, 1, 1, 255, 7, 0, 0, 255, 9, 1, 2, 255, 10, 2, 3, 255, 11, 3, 0, 255, 10, 1, 0, 255, 11, 1, 0, 255, 12, 2, 1, 255, 13, 2, 2, 255, 15, 3, 3, 255, 12, 2, 2, 255, 13, 1, 2, 255, 13, 1, 1, 255, 13, 3, 1, 255, 14, 4, 2, 255, 21, 6, 5, 255, 18, 3, 2, 255, 12, 1, 0, 255, 15, 4, 2, 255, 15, 3, 2, 255, 15, 1, 0, 255, 18, 5, 4, 255, 16, 3, 1, 255, 12, 3, 0, 255, 14, 3, 1, 255, 15, 4, 2, 255, 16, 5, 3, 255, 16, 3, 2, 255, 18, 2, 2, 255, 15, 3, 1, 255, 15, 4, 2, 255, 15, 5, 3, 255, 15, 5, 3, 255, 16, 6, 3, 255, 17, 7, 3, 255, 15, 4, 0, 255, 14, 5, 1, 255, 19, 6, 1, 255, 22, 6, 3, 255, 22, 6, 3, 255, 16, 4, 0, 255, 16, 8, 1, 255, 22, 7, 2, 255, 24, 7, 0, 255, 25, 10, 1, 255, 23, 11, 4, 255, 18, 9, 3, 255, 18, 8, 1, 255, 21, 8, 2, 255, 22, 9, 4, 255, 21, 10, 3, 255, 20, 8, 1, 255, 24, 10, 2, 255, 25, 11, 4, 255, 27, 13, 4, 255, 25, 10, 3, 255, 31, 14, 5, 255, 29, 10, 1, 255, 28, 10, 1, 255, 30, 12, 4, 255, 32, 13, 4, 255, 33, 17, 5, 255, 33, 16, 4, 255, 34, 14, 0, 255, 32, 16, 2, 255, 28, 15, 3, 255, 28, 13, 1, 255, 32, 14, 2, 255, 35, 16, 4, 255, 32, 16, 5, 255, 25, 15, 3, 255, 32, 16, 5, 255, 39, 16, 5, 255, 35, 15, 1, 255, 43, 17, 5, 255, 37, 13, 3, 255, 36, 13, 5, 255, 29, 14, 2, 255, 29, 18, 1, 255, 38, 22, 6, 255, 33, 19, 4, 255, 33, 16, 2, 255, 36, 17, 3, 255, 35, 20, 3, 255, 38, 19, 3, 255, 44, 23, 7, 255, 32, 15, 1, 255, 36, 19, 4, 255, 40, 21, 6, 255, 41, 19, 5, 255, 40, 15, 3, 255, 43, 17, 4, 255, 43, 19, 3, 255, 44, 19, 1, 255, 44, 19, 1, 255, 41, 22, 3, 255, 43, 19, 4, 255, 44, 19, 4, 255, 42, 23, 6, 255, 51, 23, 7, 255, 55, 23, 2, 255, 48, 19, 5, 255, 37, 21, 7, 255, 43, 20, 5, 255, 49, 22, 1, 255, 50, 27, 3, 255, 54, 29, 5, 255, 48, 24, 2, 255, 47, 28, 3, 255, 48, 28, 3, 255, 51, 26, 3, 255, 50, 25, 1, 255, 55, 23, 3, 255, 54, 22, 4, 255, 55, 26, 3, 255, 49, 20, 2, 255, 52, 24, 3, 255, 51, 24, 6, 255, 52, 24, 6, 255, 59, 29, 4, 255, 53, 28, 3, 255, 52, 26, 7, 255, 56, 23, 13, 255, 55, 25, 5, 255, 49, 30, 4, 255, 49, 31, 6, 255, 55, 32, 6, 255, 62, 32, 9, 255, 69, 36, 11, 255, 61, 41, 7, 255, 58, 45, 9, 255, 66, 47, 17, 255, 56, 44, 26, 255, 55, 53, 29, 255, 64, 59, 37, 255, 64, 61, 40, 255, 64, 68, 43, 255, 67, 71, 42, 255, 69, 76, 56, 255, 71, 85, 65, 255, 76, 92, 74, 255, 77, 95, 79, 255, 80, 102, 86, 255, 80, 111, 92, 255, 85, 121, 101, 255, 87, 129, 109, 255, 86, 137, 120, 255, 90, 143, 130, 255, 98, 149, 137, 255, 104, 157, 143, 255, 100, 159, 145, 255, 101, 160, 148, 255, 107, 165, 153, 255, 110, 168, 155, 255, 109, 168, 153, 255, 111, 167, 154, 255, 114, 165, 153, 255, 114, 164, 150, 255, 116, 166, 146, 255, 112, 159, 139, 255, 112, 158, 137, 255, 107, 151, 131, 255, 109, 149, 127, 255, 107, 143, 120, 255, 103, 136, 114, 255, 101, 130, 105, 255, 99, 125, 90, 255, 99, 120, 86, 255, 93, 109, 84, 255, 87, 99, 73, 255, 88, 96, 66, 255, 84, 94, 56, 255, 89, 87, 55, 255, 84, 86, 34, 255, 79, 78, 33, 255, 80, 69, 43, 255, 79, 70, 39, 255, 82, 67, 35, 255, 81, 61, 25, 255, 83, 60, 28, 255, 81, 58, 23, 255, 79, 55, 23, 255, 77, 51, 25, 255, 71, 47, 11, 255, 73, 47, 5, 255, 79, 45, 13, 255, 79, 42, 15, 255, 71, 40, 9, 255, 68, 41, 6, 255, 68, 39, 10, 255, 65, 37, 4, 255, 67, 37, 7, 255, 70, 37, 8, 255, 73, 38, 3, 255, 69, 38, 2, 255, 70, 37, 9, 255, 76, 32, 4, 255, 68, 28, 7, 255, 73, 31, 9, 255, 78, 31, 5, 255, 76, 28, 3, 255, 75, 31, 6, 255, 75, 31, 5, 255, 72, 31, 3, 255, 76, 35, 2, 255, 75, 30, 0, 255, 75, 32, 3, 255, 78, 29, 3, 255, 81, 29, 3, 255, 77, 29, 5, 255, 78, 31, 9, 255, 75, 28, 6, 255, 76, 32, 9, 255, 74, 32, 6, 255, 70, 28, 0, 255, 74, 33, 3, 255, 75, 31, 9, 255, 69, 28, 6, 255, 71, 31, 3, 255, 74, 33, 5, 255, 62, 27, 4, 255, 63, 26, 2, 255, 74, 30, 8, 255, 73, 27, 3, 255, 71, 26, 4, 255, 68, 25, 6, 255, 71, 26, 2, 255, 75, 26, 5, 255, 70, 24, 1, 255, 70, 27, 5, 255, 70, 28, 2, 255, 63, 28, 7, 255, 62, 30, 12, 255, 71, 32, 1, 255, 75, 30, 3, 255, 75, 30, 4, 255, 77, 32, 5, 255, 75, 30, 2, 255, 72, 26, 0, 255, 71, 27, 0, 255, 73, 29, 5, 255, 74, 28, 7, 255, 70, 23, 1, 255, 76, 31, 2, 255, 72, 29, 1, 255, 70, 26, 3, 255, 71, 25, 6, 255, 70, 22, 4, 255, 79, 24, 5, 255, 70, 26, 3, 255, 60, 31, 3, 255, 68, 22, 1, 255, 71, 26, 4, 255, 69, 25, 1, 255, 72, 25, 2, 255, 68, 25, 4, 255, 63, 27, 3, 255, 62, 27, 2, 255, 66, 27, 3, 255, 67, 25, 3, 255, 65, 26, 2, 255, 67, 22, 2, 255, 63, 24, 5, 255, 59, 21, 3, 255, 63, 23, 3, 255, 60, 24, 3, 255, 64, 23, 4, 255, 63, 20, 3, 255, 65, 20, 4, 255, 63, 18, 3, 255, 61, 19, 3, 255, 60, 21, 2, 255, 56, 20, 1, 255, 56, 23, 5, 255, 58, 23, 3, 255, 60, 22, 2, 255, 65, 23, 4, 255, 58, 22, 3, 255, 51, 22, 5, 255, 58, 18, 1, 255, 56, 17, 3, 255, 56, 18, 4, 255, 61, 21, 3, 255, 57, 20, 1, 255, 53, 19, 4, 255, 54, 17, 2, 255, 57, 17, 1, 255, 52, 18, 2, 255, 47, 19, 1, 255, 54, 19, 3, 255, 55, 16, 3, 255, 55, 18, 1, 255, 56, 20, 0, 255, 59, 16, 3, 255, 63, 18, 7, 255, 53, 18, 4, 255, 44, 16, 2, 255, 51, 15, 8, 255, 52, 17, 5, 255, 50, 18, 4, 255, 52, 14, 2, 255, 55, 18, 5, 255, 50, 17, 4, 255, 50, 18, 6, 255, 51, 11, 1, 255, 51, 17, 3, 255, 53, 16, 2, 255, 54, 16, 3, 255, 46, 13, 2, 255, 51, 15, 6, 255, 46, 13, 2, 255, 44, 14, 7, 255, 59, 16, 1, 255, 67, 23, 3, 255, 64, 23, 3, 255, 67, 20, 0, 255, 76, 21, 4, 255, 65, 20, 5, 255, 68, 18, 5, 255, 66, 15, 2, 255, 51, 14, 1, 255, 41, 14, 5, 255, 36, 14, 3, 255, 35, 13, 2, 255, 39, 11, 6, 255, 44, 12, 3, 255, 43, 10, 1, 255, 44, 14, 5, 255, 37, 7, 0, 255, 40, 11, 3, 255, 61, 15, 1, 255, 72, 16, 7, 255, 72, 18, 5, 255, 75, 23, 0, 255, 73, 17, 0, 255, 59, 14, 2, 255, 39, 13, 0, 255, 45, 12, 4, 255, 56, 11, 6, 255, 48, 14, 4, 255, 44, 13, 4, 255, 51, 11, 3, 255, 54, 12, 2, 255, 51, 13, 1, 255, 46, 13, 3, 255, 41, 13, 4, 255, 40, 12, 1, 255, 46, 13, 2, 255, 51, 12, 2, 255, 46, 11, 3, 255, 40, 10, 1, 255, 38, 11, 2, 255, 42, 12, 6, 255, 43, 11, 6, 255, 43, 9, 4, 255, 41, 10, 4, 255, 39, 10, 3, 255, 45, 10, 5, 255, 35, 8, 2, 255, 35, 11, 5, 255, 32, 12, 3, 255, 45, 13, 4, 255, 56, 11, 3, 255, 59, 13, 4, 255, 52, 12, 3, 255, 41, 12, 4, 255, 34, 10, 1, 255, 43, 9, 2, 255, 50, 10, 3, 255, 41, 9, 1, 255, 38, 10, 5, 255, 28, 5, 0, 255, 27, 12, 2, 255, 30, 9, 3, 255, 31, 5, 2, 255, 29, 7, 1, 255, 27, 10, 3, 255, 22, 6, 1, 255, 21, 5, 0, 255, 20, 5, 0, 255, 22, 7, 1, 255, 19, 7, 1, 255, 23, 6, 2, 255, 26, 6, 3, 255, 25, 7, 2, 255, 37, 11, 4, 255, 38, 6, 1, 255, 38, 10, 6, 255, 31, 7, 1, 255, 34, 8, 2, 255, 37, 8, 2, 255, 71, 61, 57, 255, 77, 71, 68, 255, 57, 56, 55, 255, 23, 25, 25, 255, 5, 7, 8, 255, 0, 0, 6, 255, 2, 1, 8, 255, 4, 4, 6, 255, 5, 4, 4, 255, 6, 4, 0, 255, 5, 2, 0, 255, 7, 2, 3, 255, 8, 2, 4, 255, 12, 0, 0, 255, 11, 0, 0, 255, 11, 2, 1, 255, 12, 2, 1, 255, 11, 2, 0, 255, 10, 3, 1, 255, 16, 4, 3, 255, 18, 3, 3, 255, 16, 3, 2, 255, 15, 5, 3, 255, 11, 1, 1, 255, 14, 1, 0, 255, 16, 0, 0, 255, 13, 2, 0, 255, 13, 2, 1, 255, 13, 2, 0, 255, 14, 2, 2, 255, 21, 7, 5, 255, 17, 1, 1, 255, 17, 3, 2, 255, 18, 5, 4, 255, 16, 5, 4, 255, 14, 3, 2, 255, 12, 2, 1, 255, 16, 5, 3, 255, 14, 4, 2, 255, 14, 4, 2, 255, 14, 5, 3, 255, 13, 4, 1, 255, 15, 4, 3, 255, 17, 5, 4, 255, 16, 3, 2, 255, 19, 6, 4, 255, 18, 5, 3, 255, 17, 7, 4, 255, 16, 5, 3, 255, 15, 3, 1, 255, 20, 7, 3, 255, 21, 9, 2, 255, 23, 9, 1, 255, 21, 7, 0, 255, 21, 10, 3, 255, 18, 6, 3, 255, 20, 7, 3, 255, 23, 8, 4, 255, 17, 6, 2, 255, 20, 11, 2, 255, 25, 14, 4, 255, 26, 13, 3, 255, 23, 10, 0, 255, 27, 12, 5, 255, 26, 10, 3, 255, 31, 14, 5, 255, 31, 14, 3, 255, 28, 13, 4, 255, 26, 13, 4, 255, 25, 12, 2, 255, 30, 12, 3, 255, 34, 15, 3, 255, 33, 11, 0, 255, 35, 11, 2, 255, 29, 12, 4, 255, 25, 9, 0, 255, 33, 12, 2, 255, 36, 13, 3, 255, 28, 15, 2, 255, 28, 13, 2, 255, 33, 14, 3, 255, 35, 14, 2, 255, 40, 15, 2, 255, 37, 12, 3, 255, 30, 13, 1, 255, 33, 13, 2, 255, 37, 21, 7, 255, 32, 19, 2, 255, 36, 15, 3, 255, 32, 14, 1, 255, 40, 19, 5, 255, 39, 15, 3, 255, 38, 17, 4, 255, 37, 20, 4, 255, 35, 19, 3, 255, 33, 15, 1, 255, 38, 15, 2, 255, 37, 17, 3, 255, 36, 17, 3, 255, 37, 18, 3, 255, 41, 19, 3, 255, 40, 17, 1, 255, 46, 18, 3, 255, 40, 19, 2, 255, 43, 20, 4, 255, 43, 17, 2, 255, 41, 20, 3, 255, 46, 21, 5, 255, 49, 23, 4, 255, 46, 23, 6, 255, 41, 21, 6, 255, 38, 21, 5, 255, 51, 23, 4, 255, 49, 22, 1, 255, 48, 25, 3, 255, 48, 24, 4, 255, 47, 24, 5, 255, 39, 23, 4, 255, 48, 23, 5, 255, 53, 23, 6, 255, 42, 21, 4, 255, 46, 26, 5, 255, 49, 26, 2, 255, 48, 25, 1, 255, 50, 24, 5, 255, 54, 26, 7, 255, 50, 23, 7, 255, 51, 23, 7, 255, 54, 30, 3, 255, 50, 28, 11, 255, 55, 31, 4, 255, 59, 28, 0, 255, 58, 27, 2, 255, 52, 29, 6, 255, 56, 33, 12, 255, 65, 33, 6, 255, 66, 36, 6, 255, 57, 35, 9, 255, 58, 34, 8, 255, 59, 39, 9, 255, 57, 49, 18, 255, 59, 50, 24, 255, 59, 55, 34, 255, 64, 55, 40, 255, 67, 62, 43, 255, 61, 65, 45, 255, 65, 70, 56, 255, 71, 77, 65, 255, 71, 84, 69, 255, 74, 93, 78, 255, 78, 99, 84, 255, 83, 108, 93, 255, 79, 113, 95, 255, 84, 124, 103, 255, 89, 133, 112, 255, 85, 141, 121, 255, 93, 151, 134, 255, 101, 153, 139, 255, 105, 159, 146, 255, 103, 163, 151, 255, 105, 164, 154, 255, 110, 168, 156, 255, 110, 169, 155, 255, 107, 169, 154, 255, 110, 169, 154, 255, 115, 167, 154, 255, 114, 165, 150, 255, 114, 162, 145, 255, 113, 159, 140, 255, 110, 155, 135, 255, 106, 150, 129, 255, 105, 146, 120, 255, 105, 140, 116, 255, 102, 133, 113, 255, 100, 126, 101, 255, 99, 120, 97, 255, 97, 115, 91, 255, 91, 106, 75, 255, 91, 100, 68, 255, 88, 93, 62, 255, 90, 88, 56, 255, 86, 81, 50, 255, 85, 79, 39, 255, 83, 75, 37, 255, 79, 67, 33, 255, 80, 67, 33, 255, 78, 60, 31, 255, 87, 62, 30, 255, 88, 59, 22, 255, 83, 53, 18, 255, 79, 49, 22, 255, 74, 45, 15, 255, 73, 45, 12, 255, 73, 47, 7, 255, 69, 43, 8, 255, 65, 37, 13, 255, 65, 36, 14, 255, 72, 39, 4, 255, 70, 40, 6, 255, 64, 35, 3, 255, 70, 36, 11, 255, 68, 34, 11, 255, 70, 37, 4, 255, 70, 36, 2, 255, 71, 34, 8, 255, 73, 34, 4, 255, 71, 30, 2, 255, 72, 28, 6, 255, 74, 30, 10, 255, 76, 31, 4, 255, 77, 31, 4, 255, 76, 31, 3, 255, 72, 33, 1, 255, 77, 33, 5, 255, 79, 31, 7, 255, 69, 28, 8, 255, 71, 32, 5, 255, 78, 32, 6, 255, 78, 28, 5, 255, 76, 28, 7, 255, 71, 27, 6, 255, 74, 24, 5, 255, 77, 26, 2, 255, 75, 32, 2, 255, 67, 35, 3, 255, 70, 25, 6, 255, 68, 23, 8, 255, 67, 31, 5, 255, 70, 28, 0, 255, 67, 26, 3, 255, 68, 29, 5, 255, 71, 30, 2, 255, 71, 25, 2, 255, 70, 26, 3, 255, 65, 28, 3, 255, 63, 26, 6, 255, 65, 24, 5, 255, 69, 25, 5, 255, 70, 27, 4, 255, 63, 26, 4, 255, 69, 29, 4, 255, 78, 33, 3, 255, 73, 28, 5, 255, 77, 30, 1, 255, 77, 31, 0, 255, 74, 30, 1, 255, 75, 28, 4, 255, 75, 27, 5, 255, 72, 25, 3, 255, 71, 25, 3, 255, 73, 28, 3, 255, 73, 25, 2, 255, 73, 28, 2, 255, 71, 28, 3, 255, 67, 24, 3, 255, 70, 25, 5, 255, 72, 26, 6, 255, 68, 24, 0, 255, 76, 27, 3, 255, 71, 24, 6, 255, 66, 23, 5, 255, 74, 31, 4, 255, 72, 26, 1, 255, 64, 27, 3, 255, 61, 27, 7, 255, 62, 24, 5, 255, 67, 23, 3, 255, 67, 26, 4, 255, 58, 25, 1, 255, 66, 26, 2, 255, 67, 24, 3, 255, 61, 24, 4, 255, 62, 23, 4, 255, 64, 21, 3, 255, 59, 22, 3, 255, 59, 18, 5, 255, 60, 18, 5, 255, 56, 17, 3, 255, 57, 20, 5, 255, 57, 20, 5, 255, 58, 20, 3, 255, 62, 21, 6, 255, 59, 16, 5, 255, 58, 16, 3, 255, 63, 20, 4, 255, 64, 20, 3, 255, 54, 17, 3, 255, 48, 18, 6, 255, 52, 19, 2, 255, 56, 17, 5, 255, 52, 16, 2, 255, 57, 22, 2, 255, 60, 20, 2, 255, 54, 17, 7, 255, 52, 19, 3, 255, 58, 17, 1, 255, 62, 18, 8, 255, 52, 16, 2, 255, 53, 16, 0, 255, 58, 16, 4, 255, 53, 15, 6, 255, 56, 18, 5, 255, 65, 18, 2, 255, 57, 18, 3, 255, 48, 17, 2, 255, 53, 16, 11, 255, 53, 12, 5, 255, 47, 15, 4, 255, 48, 16, 4, 255, 53, 15, 4, 255, 48, 17, 3, 255, 54, 17, 3, 255, 47, 16, 1, 255, 50, 13, 3, 255, 47, 12, 5, 255, 50, 16, 5, 255, 48, 17, 5, 255, 41, 15, 3, 255, 49, 13, 4, 255, 53, 13, 2, 255, 47, 15, 2, 255, 43, 13, 3, 255, 59, 16, 4, 255, 69, 17, 2, 255, 70, 24, 6, 255, 70, 21, 3, 255, 74, 18, 1, 255, 86, 20, 5, 255, 83, 21, 4, 255, 67, 21, 4, 255, 49, 16, 3, 255, 44, 13, 4, 255, 41, 11, 4, 255, 38, 12, 8, 255, 40, 10, 2, 255, 45, 14, 3, 255, 43, 14, 4, 255, 39, 9, 2, 255, 40, 11, 6, 255, 33, 10, 3, 255, 49, 13, 8, 255, 63, 16, 4, 255, 70, 17, 0, 255, 63, 11, 3, 255, 52, 11, 4, 255, 40, 13, 2, 255, 42, 15, 4, 255, 44, 13, 2, 255, 48, 13, 4, 255, 49, 12, 4, 255, 51, 11, 1, 255, 58, 17, 2, 255, 63, 18, 2, 255, 51, 15, 3, 255, 41, 12, 4, 255, 39, 10, 4, 255, 39, 9, 1, 255, 39, 8, 0, 255, 41, 9, 3, 255, 45, 6, 3, 255, 42, 6, 0, 255, 39, 11, 3, 255, 39, 12, 5, 255, 38, 8, 3, 255, 37, 10, 4, 255, 38, 9, 2, 255, 35, 9, 1, 255, 35, 9, 2, 255, 34, 10, 5, 255, 35, 8, 3, 255, 36, 6, 0, 255, 39, 10, 2, 255, 44, 13, 4, 255, 42, 9, 2, 255, 36, 10, 3, 255, 33, 9, 3, 255, 39, 8, 2, 255, 43, 8, 1, 255, 37, 12, 1, 255, 35, 8, 2, 255, 33, 9, 5, 255, 25, 11, 3, 255, 26, 6, 0, 255, 32, 9, 5, 255, 42, 8, 5, 255, 40, 10, 7, 255, 33, 7, 4, 255, 29, 7, 4, 255, 23, 7, 2, 255, 22, 5, 1, 255, 22, 5, 1, 255, 22, 4, 0, 255, 27, 7, 4, 255, 28, 5, 1, 255, 34, 10, 3, 255, 35, 8, 1, 255, 37, 9, 4, 255, 31, 6, 2, 255, 35, 5, 3, 255, 36, 7, 4, 255, 40, 41, 48, 255, 51, 45, 41, 255, 68, 61, 51, 255, 71, 63, 53, 255, 61, 52, 52, 255, 33, 34, 33, 255, 7, 9, 18, 255, 0, 0, 5, 255, 6, 4, 8, 255, 5, 3, 3, 255, 8, 5, 0, 255, 8, 4, 3, 255, 10, 6, 0, 255, 12, 4, 0, 255, 11, 1, 1, 255, 13, 2, 2, 255, 14, 3, 1, 255, 9, 0, 1, 255, 9, 1, 2, 255, 12, 2, 1, 255, 13, 2, 1, 255, 12, 1, 0, 255, 14, 3, 1, 255, 13, 2, 1, 255, 12, 1, 0, 255, 15, 4, 2, 255, 16, 2, 1, 255, 12, 1, 0, 255, 14, 4, 2, 255, 15, 3, 2, 255, 16, 4, 2, 255, 16, 4, 2, 255, 17, 4, 4, 255, 20, 5, 3, 255, 19, 4, 1, 255, 17, 4, 3, 255, 20, 5, 4, 255, 21, 3, 1, 255, 20, 4, 2, 255, 15, 4, 3, 255, 12, 3, 0, 255, 11, 3, 0, 255, 13, 3, 1, 255, 15, 4, 1, 255, 16, 4, 1, 255, 15, 3, 1, 255, 13, 4, 4, 255, 14, 6, 4, 255, 14, 5, 2, 255, 18, 4, 0, 255, 24, 4, 2, 255, 25, 6, 3, 255, 23, 6, 1, 255, 24, 8, 1, 255, 23, 9, 3, 255, 21, 8, 3, 255, 23, 9, 4, 255, 21, 7, 2, 255, 22, 5, 0, 255, 24, 9, 1, 255, 21, 11, 2, 255, 27, 10, 4, 255, 28, 9, 3, 255, 20, 8, 1, 255, 32, 9, 3, 255, 30, 9, 1, 255, 32, 13, 5, 255, 26, 11, 3, 255, 23, 10, 1, 255, 24, 12, 3, 255, 29, 13, 5, 255, 27, 10, 2, 255, 31, 13, 1, 255, 33, 13, 2, 255, 31, 11, 2, 255, 30, 13, 3, 255, 32, 13, 5, 255, 38, 19, 6, 255, 28, 12, 1, 255, 31, 13, 1, 255, 38, 17, 3, 255, 34, 13, 1, 255, 38, 16, 4, 255, 34, 16, 4, 255, 31, 18, 3, 255, 31, 13, 2, 255, 32, 14, 5, 255, 36, 15, 7, 255, 34, 16, 1, 255, 37, 17, 2, 255, 35, 13, 2, 255, 36, 14, 4, 255, 37, 15, 3, 255, 37, 15, 2, 255, 36, 14, 1, 255, 38, 18, 4, 255, 37, 17, 3, 255, 36, 18, 5, 255, 36, 19, 5, 255, 38, 18, 1, 255, 44, 20, 4, 255, 44, 18, 6, 255, 48, 19, 9, 255, 40, 18, 5, 255, 36, 19, 4, 255, 35, 21, 2, 255, 37, 21, 0, 255, 43, 21, 3, 255, 42, 21, 6, 255, 35, 20, 9, 255, 37, 20, 5, 255, 43, 21, 9, 255, 49, 21, 8, 255, 49, 20, 2, 255, 47, 24, 5, 255, 44, 22, 5, 255, 43, 22, 3, 255, 45, 24, 7, 255, 48, 21, 7, 255, 47, 22, 5, 255, 48, 24, 2, 255, 56, 26, 6, 255, 50, 25, 4, 255, 42, 23, 6, 255, 43, 25, 10, 255, 45, 25, 6, 255, 50, 25, 2, 255, 50, 25, 9, 255, 43, 26, 11, 255, 44, 26, 4, 255, 52, 28, 5, 255, 52, 22, 4, 255, 51, 30, 3, 255, 54, 27, 9, 255, 58, 31, 11, 255, 61, 33, 8, 255, 63, 32, 2, 255, 53, 37, 4, 255, 54, 35, 14, 255, 59, 37, 16, 255, 54, 47, 11, 255, 56, 50, 22, 255, 58, 53, 32, 255, 61, 60, 25, 255, 65, 65, 37, 255, 63, 67, 52, 255, 64, 72, 59, 255, 68, 78, 58, 255, 75, 88, 69, 255, 77, 95, 74, 255, 77, 102, 79, 255, 83, 113, 94, 255, 83, 122, 100, 255, 87, 130, 108, 255, 91, 137, 119, 255, 96, 145, 129, 255, 100, 152, 137, 255, 104, 159, 144, 255, 104, 163, 148, 255, 104, 165, 152, 255, 114, 169, 158, 255, 118, 169, 158, 255, 114, 171, 157, 255, 116, 172, 157, 255, 112, 169, 154, 255, 110, 168, 153, 255, 113, 165, 151, 255, 113, 161, 146, 255, 111, 158, 137, 255, 108, 152, 131, 255, 109, 150, 127, 255, 105, 144, 117, 255, 101, 136, 108, 255, 99, 128, 106, 255, 95, 121, 91, 255, 92, 117, 82, 255, 89, 107, 82, 255, 90, 102, 73, 255, 87, 94, 60, 255, 87, 91, 60, 255, 83, 83, 48, 255, 81, 79, 41, 255, 87, 77, 38, 255, 86, 72, 39, 255, 79, 66, 27, 255, 82, 65, 21, 255, 80, 59, 29, 255, 76, 54, 22, 255, 85, 52, 16, 255, 81, 53, 18, 255, 74, 49, 17, 255, 82, 44, 9, 255, 72, 45, 16, 255, 72, 39, 19, 255, 73, 37, 13, 255, 68, 37, 10, 255, 68, 37, 17, 255, 69, 35, 4, 255, 70, 35, 7, 255, 67, 32, 10, 255, 71, 36, 6, 255, 70, 35, 5, 255, 70, 32, 4, 255, 72, 31, 6, 255, 72, 30, 3, 255, 75, 35, 1, 255, 76, 33, 1, 255, 74, 30, 2, 255, 74, 34, 5, 255, 74, 35, 1, 255, 76, 32, 4, 255, 75, 32, 6, 255, 73, 33, 3, 255, 74, 31, 5, 255, 77, 32, 6, 255, 76, 32, 6, 255, 75, 30, 2, 255, 77, 29, 4, 255, 66, 29, 3, 255, 65, 27, 2, 255, 76, 32, 8, 255, 70, 32, 5, 255, 73, 29, 4, 255, 80, 31, 10, 255, 67, 26, 6, 255, 70, 27, 9, 255, 71, 27, 6, 255, 71, 26, 3, 255, 73, 26, 9, 255, 71, 25, 7, 255, 74, 29, 4, 255, 70, 26, 0, 255, 72, 28, 0, 255, 68, 26, 4, 255, 65, 26, 3, 255, 70, 27, 3, 255, 66, 24, 3, 255, 64, 30, 5, 255, 73, 29, 6, 255, 74, 27, 4, 255, 79, 26, 3, 255, 72, 23, 1, 255, 69, 22, 4, 255, 76, 30, 6, 255, 78, 30, 5, 255, 79, 30, 6, 255, 74, 27, 4, 255, 75, 28, 5, 255, 74, 28, 5, 255, 75, 28, 4, 255, 76, 30, 3, 255, 73, 26, 5, 255, 70, 24, 2, 255, 72, 24, 1, 255, 71, 25, 1, 255, 73, 28, 5, 255, 73, 25, 4, 255, 75, 25, 0, 255, 74, 26, 3, 255, 71, 28, 6, 255, 70, 25, 2, 255, 72, 27, 4, 255, 69, 25, 6, 255, 64, 23, 3, 255, 65, 24, 1, 255, 73, 27, 5, 255, 66, 25, 3, 255, 62, 24, 1, 255, 68, 25, 4, 255, 64, 24, 4, 255, 60, 22, 3, 255, 57, 21, 4, 255, 55, 20, 3, 255, 60, 25, 5, 255, 58, 25, 3, 255, 61, 20, 0, 255, 65, 21, 7, 255, 60, 21, 3, 255, 61, 23, 2, 255, 59, 20, 6, 255, 56, 19, 3, 255, 58, 21, 3, 255, 56, 17, 3, 255, 56, 20, 5, 255, 59, 19, 5, 255, 61, 16, 1, 255, 61, 15, 1, 255, 59, 18, 5, 255, 50, 17, 2, 255, 58, 20, 5, 255, 58, 17, 2, 255, 57, 18, 0, 255, 58, 20, 2, 255, 56, 21, 3, 255, 53, 18, 2, 255, 56, 17, 4, 255, 53, 16, 7, 255, 53, 18, 4, 255, 56, 21, 0, 255, 57, 16, 3, 255, 55, 10, 5, 255, 63, 19, 3, 255, 56, 18, 3, 255, 55, 16, 4, 255, 57, 15, 5, 255, 54, 17, 9, 255, 42, 14, 6, 255, 52, 17, 6, 255, 52, 13, 1, 255, 52, 19, 3, 255, 46, 18, 2, 255, 50, 15, 4, 255, 52, 15, 5, 255, 50, 14, 4, 255, 50, 13, 3, 255, 49, 14, 2, 255, 44, 15, 2, 255, 44, 15, 2, 255, 48, 14, 4, 255, 45, 13, 6, 255, 44, 12, 4, 255, 40, 10, 4, 255, 46, 13, 4, 255, 53, 15, 2, 255, 63, 20, 7, 255, 70, 20, 3, 255, 65, 16, 5, 255, 64, 14, 3, 255, 75, 22, 7, 255, 67, 16, 5, 255, 54, 13, 2, 255, 41, 12, 5, 255, 30, 9, 7, 255, 37, 9, 2, 255, 44, 10, 3, 255, 43, 13, 2, 255, 37, 11, 2, 255, 34, 13, 4, 255, 41, 12, 4, 255, 38, 12, 6, 255, 33, 9, 1, 255, 38, 10, 3, 255, 42, 11, 1, 255, 45, 11, 2, 255, 47, 10, 5, 255, 44, 12, 2, 255, 42, 13, 3, 255, 40, 11, 1, 255, 49, 14, 3, 255, 54, 15, 4, 255, 52, 12, 0, 255, 64, 18, 5, 255, 69, 16, 7, 255, 61, 13, 1, 255, 48, 11, 3, 255, 39, 10, 6, 255, 41, 11, 3, 255, 42, 13, 3, 255, 45, 9, 1, 255, 46, 6, 2, 255, 45, 11, 6, 255, 44, 11, 3, 255, 42, 9, 2, 255, 41, 12, 6, 255, 40, 11, 5, 255, 36, 10, 3, 255, 33, 12, 3, 255, 33, 10, 2, 255, 35, 8, 2, 255, 41, 11, 5, 255, 37, 9, 3, 255, 42, 9, 1, 255, 41, 13, 3, 255, 33, 9, 2, 255, 38, 8, 3, 255, 41, 7, 5, 255, 40, 9, 4, 255, 33, 7, 0, 255, 29, 7, 2, 255, 31, 8, 7, 255, 35, 11, 4, 255, 35, 8, 2, 255, 31, 5, 1, 255, 35, 12, 5, 255, 43, 9, 3, 255, 41, 8, 4, 255, 37, 8, 5, 255, 29, 7, 3, 255, 29, 7, 2, 255, 31, 9, 3, 255, 29, 5, 1, 255, 21, 5, 1, 255, 22, 7, 2, 255, 26, 5, 2, 255, 26, 7, 1, 255, 30, 8, 2, 255, 33, 6, 3, 255, 26, 4, 2, 255, 34, 7, 5, 255, 34, 4, 2, 255, 22, 30, 52, 255, 33, 34, 56, 255, 34, 32, 54, 255, 40, 38, 50, 255, 65, 52, 62, 255, 79, 67, 62, 255, 64, 59, 53, 255, 33, 32, 23, 255, 12, 11, 12, 255, 0, 0, 4, 255, 3, 2, 3, 255, 6, 3, 5, 255, 6, 4, 0, 255, 6, 4, 3, 255, 7, 3, 2, 255, 9, 1, 0, 255, 11, 1, 1, 255, 12, 1, 5, 255, 12, 3, 2, 255, 10, 2, 0, 255, 11, 1, 0, 255, 13, 1, 1, 255, 15, 4, 2, 255, 15, 4, 2, 255, 12, 1, 0, 255, 15, 4, 2, 255, 18, 2, 2, 255, 10, 0, 0, 255, 14, 2, 0, 255, 16, 4, 2, 255, 15, 3, 1, 255, 12, 1, 0, 255, 13, 1, 1, 255, 18, 4, 1, 255, 20, 5, 2, 255, 17, 3, 2, 255, 19, 4, 3, 255, 25, 6, 3, 255, 22, 4, 3, 255, 17, 3, 2, 255, 14, 4, 2, 255, 14, 4, 2, 255, 17, 4, 3, 255, 20, 5, 3, 255, 20, 6, 3, 255, 16, 5, 2, 255, 15, 5, 4, 255, 15, 6, 5, 255, 19, 7, 3, 255, 20, 7, 1, 255, 22, 5, 2, 255, 21, 6, 4, 255, 18, 6, 0, 255, 20, 7, 0, 255, 20, 7, 1, 255, 20, 7, 1, 255, 21, 8, 2, 255, 21, 8, 0, 255, 23, 7, 0, 255, 26, 11, 3, 255, 20, 10, 1, 255, 24, 8, 2, 255, 26, 8, 1, 255, 18, 8, 0, 255, 27, 9, 3, 255, 28, 10, 4, 255, 26, 11, 3, 255, 22, 9, 1, 255, 26, 13, 4, 255, 27, 14, 5, 255, 24, 9, 1, 255, 35, 17, 8, 255, 32, 14, 5, 255, 31, 14, 4, 255, 29, 13, 3, 255, 29, 12, 3, 255, 29, 12, 2, 255, 27, 13, 2, 255, 33, 18, 4, 255, 32, 14, 2, 255, 36, 14, 2, 255, 39, 15, 4, 255, 38, 14, 1, 255, 33, 14, 5, 255, 27, 12, 1, 255, 32, 12, 2, 255, 33, 16, 7, 255, 33, 13, 5, 255, 33, 16, 2, 255, 39, 20, 6, 255, 36, 16, 3, 255, 35, 17, 3, 255, 36, 17, 3, 255, 39, 16, 3, 255, 37, 16, 2, 255, 38, 19, 3, 255, 36, 17, 2, 255, 32, 14, 1, 255, 35, 16, 3, 255, 38, 17, 3, 255, 42, 20, 4, 255, 41, 15, 4, 255, 39, 17, 3, 255, 34, 18, 2, 255, 37, 20, 5, 255, 37, 20, 3, 255, 41, 22, 3, 255, 41, 22, 4, 255, 35, 18, 4, 255, 36, 18, 6, 255, 38, 21, 3, 255, 40, 18, 5, 255, 44, 18, 5, 255, 48, 21, 2, 255, 44, 21, 3, 255, 49, 22, 1, 255, 48, 26, 1, 255, 47, 26, 2, 255, 46, 24, 6, 255, 37, 19, 4, 255, 48, 24, 6, 255, 56, 22, 1, 255, 56, 25, 2, 255, 49, 23, 4, 255, 49, 23, 3, 255, 53, 29, 3, 255, 59, 26, 0, 255, 59, 28, 5, 255, 48, 25, 10, 255, 49, 26, 3, 255, 57, 28, 6, 255, 64, 31, 13, 255, 55, 32, 4, 255, 59, 30, 11, 255, 55, 24, 6, 255, 50, 33, 7, 255, 59, 31, 3, 255, 64, 31, 8, 255, 58, 38, 16, 255, 55, 44, 19, 255, 59, 47, 14, 255, 51, 48, 26, 255, 54, 51, 39, 255, 59, 58, 37, 255, 64, 63, 47, 255, 67, 68, 52, 255, 71, 77, 45, 255, 70, 81, 56, 255, 76, 89, 72, 255, 78, 97, 79, 255, 79, 106, 83, 255, 81, 114, 97, 255, 82, 123, 106, 255, 89, 134, 115, 255, 95, 143, 126, 255, 101, 152, 137, 255, 103, 156, 143, 255, 106, 163, 148, 255, 107, 166, 154, 255, 108, 168, 158, 255, 113, 173, 158, 255, 119, 172, 160, 255, 116, 173, 159, 255, 116, 170, 157, 255, 114, 170, 156, 255, 114, 170, 156, 255, 114, 165, 152, 255, 113, 162, 144, 255, 112, 158, 137, 255, 108, 152, 131, 255, 105, 149, 123, 255, 105, 142, 114, 255, 102, 134, 105, 255, 101, 129, 101, 255, 93, 122, 85, 255, 88, 112, 73, 255, 84, 101, 75, 255, 87, 98, 70, 255, 80, 88, 54, 255, 80, 84, 61, 255, 77, 76, 60, 255, 78, 75, 40, 255, 85, 73, 26, 255, 86, 66, 27, 255, 81, 60, 26, 255, 82, 59, 21, 255, 86, 58, 18, 255, 84, 55, 13, 255, 77, 50, 14, 255, 73, 50, 12, 255, 74, 49, 10, 255, 76, 43, 12, 255, 69, 40, 11, 255, 75, 39, 15, 255, 74, 39, 8, 255, 70, 40, 4, 255, 65, 35, 10, 255, 72, 37, 12, 255, 73, 32, 9, 255, 70, 30, 6, 255, 72, 35, 4, 255, 75, 38, 6, 255, 70, 32, 5, 255, 70, 31, 4, 255, 73, 33, 5, 255, 75, 32, 4, 255, 80, 35, 8, 255, 77, 32, 8, 255, 75, 34, 5, 255, 72, 32, 0, 255, 76, 33, 6, 255, 74, 30, 6, 255, 72, 28, 4, 255, 76, 32, 7, 255, 75, 31, 5, 255, 77, 33, 6, 255, 80, 33, 7, 255, 80, 29, 5, 255, 74, 33, 6, 255, 74, 31, 4, 255, 77, 30, 3, 255, 69, 32, 1, 255, 72, 31, 3, 255, 73, 25, 3, 255, 71, 26, 6, 255, 72, 26, 6, 255, 75, 28, 3, 255, 74, 26, 3, 255, 72, 24, 7, 255, 71, 24, 4, 255, 75, 29, 3, 255, 70, 25, 5, 255, 69, 28, 3, 255, 66, 28, 2, 255, 64, 23, 6, 255, 70, 26, 5, 255, 71, 28, 4, 255, 70, 27, 4, 255, 70, 26, 2, 255, 71, 27, 4, 255, 72, 23, 1, 255, 73, 28, 5, 255, 75, 24, 4, 255, 74, 26, 3, 255, 75, 27, 4, 255, 78, 28, 5, 255, 75, 26, 3, 255, 72, 26, 2, 255, 71, 26, 3, 255, 71, 25, 1, 255, 73, 26, 2, 255, 71, 25, 2, 255, 71, 25, 2, 255, 75, 27, 4, 255, 73, 26, 2, 255, 71, 26, 3, 255, 69, 26, 2, 255, 73, 27, 2, 255, 65, 22, 7, 255, 65, 22, 9, 255, 74, 26, 3, 255, 73, 26, 0, 255, 70, 22, 3, 255, 69, 22, 5, 255, 69, 24, 1, 255, 76, 30, 7, 255, 62, 24, 3, 255, 59, 27, 3, 255, 63, 24, 2, 255, 70, 24, 4, 255, 69, 25, 7, 255, 63, 20, 4, 255, 57, 16, 2, 255, 61, 21, 6, 255, 60, 20, 3, 255, 62, 19, 6, 255, 65, 23, 2, 255, 61, 18, 2, 255, 62, 16, 6, 255, 66, 21, 3, 255, 66, 21, 4, 255, 62, 18, 5, 255, 60, 22, 2, 255, 58, 23, 4, 255, 58, 21, 3, 255, 60, 18, 1, 255, 63, 21, 6, 255, 58, 19, 7, 255, 56, 19, 4, 255, 57, 19, 3, 255, 58, 19, 3, 255, 57, 19, 3, 255, 54, 18, 0, 255, 55, 20, 1, 255, 58, 21, 4, 255, 57, 19, 4, 255, 52, 18, 1, 255, 54, 19, 1, 255, 53, 18, 1, 255, 56, 18, 3, 255, 62, 19, 5, 255, 61, 20, 2, 255, 56, 17, 3, 255, 58, 15, 6, 255, 52, 14, 3, 255, 43, 13, 0, 255, 46, 13, 6, 255, 48, 18, 6, 255, 51, 18, 3, 255, 49, 18, 3, 255, 40, 18, 1, 255, 41, 14, 1, 255, 45, 13, 3, 255, 50, 17, 4, 255, 56, 16, 4, 255, 55, 15, 4, 255, 49, 18, 3, 255, 47, 15, 0, 255, 49, 14, 3, 255, 42, 12, 4, 255, 39, 13, 3, 255, 43, 16, 6, 255, 37, 11, 4, 255, 36, 12, 1, 255, 43, 14, 3, 255, 52, 15, 0, 255, 53, 13, 5, 255, 46, 12, 2, 255, 39, 13, 0, 255, 32, 11, 1, 255, 35, 15, 2, 255, 32, 12, 0, 255, 35, 10, 4, 255, 42, 10, 5, 255, 44, 9, 1, 255, 44, 15, 4, 255, 39, 8, 1, 255, 37, 12, 4, 255, 42, 11, 3, 255, 36, 10, 5, 255, 32, 9, 1, 255, 36, 9, 5, 255, 43, 12, 5, 255, 44, 13, 1, 255, 44, 13, 4, 255, 42, 12, 2, 255, 48, 13, 7, 255, 46, 12, 3, 255, 45, 12, 3, 255, 49, 15, 5, 255, 49, 12, 2, 255, 51, 12, 3, 255, 52, 10, 2, 255, 55, 11, 0, 255, 52, 12, 4, 255, 40, 8, 4, 255, 42, 6, 0, 255, 41, 12, 1, 255, 47, 13, 4, 255, 41, 10, 2, 255, 43, 11, 4, 255, 43, 11, 4, 255, 39, 11, 1, 255, 38, 9, 1, 255, 34, 9, 1, 255, 39, 9, 1, 255, 38, 8, 1, 255, 42, 9, 3, 255, 47, 11, 5, 255, 44, 14, 6, 255, 31, 8, 1, 255, 40, 9, 2, 255, 43, 10, 3, 255, 40, 9, 3, 255, 39, 10, 5, 255, 32, 5, 1, 255, 35, 9, 2, 255, 36, 8, 3, 255, 35, 6, 5, 255, 30, 5, 6, 255, 29, 5, 1, 255, 34, 6, 1, 255, 33, 8, 7, 255, 27, 8, 2, 255, 31, 7, 0, 255, 29, 5, 1, 255, 28, 6, 3, 255, 25, 5, 2, 255, 27, 5, 3, 255, 33, 10, 4, 255, 29, 6, 4, 255, 20, 5, 2, 255, 21, 8, 2, 255, 25, 6, 2, 255, 24, 6, 1, 255, 27, 7, 1, 255, 32, 6, 2, 255, 26, 8, 2, 255, 30, 8, 3, 255, 28, 4, 2, 255, 31, 28, 40, 255, 32, 31, 44, 255, 20, 27, 42, 255, 20, 29, 48, 255, 30, 28, 54, 255, 46, 40, 49, 255, 62, 55, 58, 255, 68, 63, 52, 255, 62, 62, 46, 255, 38, 41, 29, 255, 11, 13, 14, 255, 2, 1, 14, 255, 2, 2, 11, 255, 3, 3, 13, 255, 5, 4, 10, 255, 8, 7, 3, 255, 11, 4, 0, 255, 13, 4, 2, 255, 12, 3, 3, 255, 10, 2, 1, 255, 11, 1, 0, 255, 13, 2, 1, 255, 15, 4, 2, 255, 14, 3, 1, 255, 12, 1, 0, 255, 14, 2, 1, 255, 16, 1, 1, 255, 14, 2, 1, 255, 16, 1, 0, 255, 16, 1, 1, 255, 17, 2, 2, 255, 15, 3, 1, 255, 16, 4, 1, 255, 19, 4, 1, 255, 20, 5, 2, 255, 16, 1, 0, 255, 17, 2, 1, 255, 19, 3, 0, 255, 21, 5, 2, 255, 19, 5, 2, 255, 17, 5, 2, 255, 18, 5, 1, 255, 20, 4, 2, 255, 21, 5, 3, 255, 21, 6, 3, 255, 21, 7, 3, 255, 18, 4, 1, 255, 16, 3, 1, 255, 19, 4, 1, 255, 20, 6, 0, 255, 21, 5, 1, 255, 17, 6, 3, 255, 15, 5, 1, 255, 19, 8, 2, 255, 20, 8, 2, 255, 21, 8, 2, 255, 21, 6, 1, 255, 22, 8, 0, 255, 21, 8, 0, 255, 22, 8, 3, 255, 19, 8, 2, 255, 23, 9, 4, 255, 25, 8, 4, 255, 22, 11, 2, 255, 22, 10, 3, 255, 18, 6, 0, 255, 21, 9, 1, 255, 25, 12, 3, 255, 24, 10, 1, 255, 24, 11, 2, 255, 26, 9, 1, 255, 31, 12, 4, 255, 30, 12, 5, 255, 24, 9, 2, 255, 28, 15, 5, 255, 25, 10, 1, 255, 31, 13, 4, 255, 32, 12, 5, 255, 31, 13, 4, 255, 30, 13, 2, 255, 28, 12, 0, 255, 32, 15, 2, 255, 34, 15, 1, 255, 30, 12, 3, 255, 30, 14, 5, 255, 32, 14, 4, 255, 29, 13, 2, 255, 32, 13, 4, 255, 31, 14, 2, 255, 33, 15, 1, 255, 34, 16, 2, 255, 34, 16, 2, 255, 36, 18, 3, 255, 38, 18, 4, 255, 36, 17, 1, 255, 33, 17, 3, 255, 38, 19, 5, 255, 35, 16, 3, 255, 34, 17, 3, 255, 35, 18, 3, 255, 38, 19, 4, 255, 39, 17, 3, 255, 36, 17, 0, 255, 37, 18, 2, 255, 43, 19, 6, 255, 46, 17, 4, 255, 49, 20, 6, 255, 43, 20, 5, 255, 37, 17, 2, 255, 39, 17, 3, 255, 43, 22, 4, 255, 44, 19, 5, 255, 46, 18, 4, 255, 49, 24, 4, 255, 48, 23, 5, 255, 50, 25, 5, 255, 48, 26, 2, 255, 47, 22, 0, 255, 49, 22, 4, 255, 43, 23, 7, 255, 45, 26, 6, 255, 48, 24, 2, 255, 48, 25, 9, 255, 43, 23, 7, 255, 46, 26, 6, 255, 48, 27, 5, 255, 52, 24, 6, 255, 51, 25, 3, 255, 53, 24, 2, 255, 59, 31, 7, 255, 61, 30, 4, 255, 63, 25, 4, 255, 58, 27, 2, 255, 58, 28, 6, 255, 57, 27, 11, 255, 55, 31, 8, 255, 58, 31, 2, 255, 50, 29, 8, 255, 57, 36, 9, 255, 56, 38, 17, 255, 56, 45, 19, 255, 55, 48, 27, 255, 57, 53, 40, 255, 59, 57, 41, 255, 62, 62, 49, 255, 67, 70, 54, 255, 71, 81, 48, 255, 74, 86, 63, 255, 74, 90, 77, 255, 79, 100, 87, 255, 79, 110, 94, 255, 79, 118, 106, 255, 82, 127, 115, 255, 89, 139, 121, 255, 95, 148, 132, 255, 101, 157, 143, 255, 104, 161, 148, 255, 106, 165, 152, 255, 109, 170, 156, 255, 112, 172, 162, 255, 112, 173, 159, 255, 119, 176, 163, 255, 117, 176, 161, 255, 117, 172, 159, 255, 117, 171, 158, 255, 117, 168, 155, 255, 114, 164, 148, 255, 113, 160, 141, 255, 114, 156, 135, 255, 107, 152, 127, 255, 101, 146, 119, 255, 101, 138, 109, 255, 102, 129, 99, 255, 96, 121, 93, 255, 92, 116, 86, 255, 88, 107, 76, 255, 83, 96, 75, 255, 82, 89, 66, 255, 81, 85, 58, 255, 76, 82, 50, 255, 72, 78, 35, 255, 73, 72, 30, 255, 78, 66, 28, 255, 81, 61, 30, 255, 81, 59, 26, 255, 75, 56, 19, 255, 79, 54, 14, 255, 85, 53, 15, 255, 72, 49, 11, 255, 72, 46, 10, 255, 81, 44, 11, 255, 77, 44, 12, 255, 76, 41, 3, 255, 77, 40, 9, 255, 75, 38, 12, 255, 70, 36, 10, 255, 68, 35, 8, 255, 73, 35, 7, 255, 75, 33, 8, 255, 74, 31, 8, 255, 74, 31, 3, 255, 73, 31, 3, 255, 72, 32, 3, 255, 70, 32, 2, 255, 70, 31, 4, 255, 74, 29, 7, 255, 75, 28, 5, 255, 74, 27, 7, 255, 78, 33, 8, 255, 75, 32, 0, 255, 75, 29, 3, 255, 79, 32, 10, 255, 78, 28, 7, 255, 76, 28, 5, 255, 74, 30, 5, 255, 75, 29, 6, 255, 77, 29, 6, 255, 75, 24, 3, 255, 81, 31, 10, 255, 78, 30, 8, 255, 78, 28, 6, 255, 74, 30, 3, 255, 75, 31, 6, 255, 73, 26, 4, 255, 76, 27, 5, 255, 76, 28, 6, 255, 74, 29, 2, 255, 72, 27, 0, 255, 75, 27, 7, 255, 78, 28, 7, 255, 70, 25, 3, 255, 65, 23, 6, 255, 64, 26, 4, 255, 63, 25, 4, 255, 64, 23, 6, 255, 69, 27, 4, 255, 72, 29, 6, 255, 78, 26, 5, 255, 71, 25, 3, 255, 70, 32, 7, 255, 71, 27, 4, 255, 73, 27, 4, 255, 81, 28, 7, 255, 76, 29, 3, 255, 74, 27, 1, 255, 77, 25, 2, 255, 75, 26, 3, 255, 71, 27, 2, 255, 70, 27, 3, 255, 69, 26, 0, 255, 73, 27, 2, 255, 71, 27, 3, 255, 70, 26, 3, 255, 73, 27, 4, 255, 72, 26, 2, 255, 70, 25, 2, 255, 68, 23, 9, 255, 69, 21, 5, 255, 67, 24, 2, 255, 68, 28, 3, 255, 69, 25, 2, 255, 66, 22, 2, 255, 66, 26, 4, 255, 58, 24, 1, 255, 61, 26, 2, 255, 65, 23, 3, 255, 63, 19, 2, 255, 65, 21, 3, 255, 69, 23, 4, 255, 67, 24, 3, 255, 61, 19, 0, 255, 63, 22, 4, 255, 61, 19, 2, 255, 55, 16, 1, 255, 59, 19, 6, 255, 60, 21, 4, 255, 58, 18, 4, 255, 61, 19, 4, 255, 63, 21, 4, 255, 61, 17, 3, 255, 61, 15, 3, 255, 63, 18, 2, 255, 61, 22, 2, 255, 57, 20, 2, 255, 58, 20, 2, 255, 56, 18, 1, 255, 55, 18, 4, 255, 51, 18, 6, 255, 56, 17, 5, 255, 56, 17, 4, 255, 55, 18, 2, 255, 50, 16, 0, 255, 53, 18, 3, 255, 57, 17, 5, 255, 54, 15, 4, 255, 54, 16, 1, 255, 55, 19, 0, 255, 55, 21, 3, 255, 52, 17, 7, 255, 56, 18, 4, 255, 60, 21, 0, 255, 54, 18, 2, 255, 59, 16, 6, 255, 57, 12, 4, 255, 46, 14, 1, 255, 43, 17, 4, 255, 51, 14, 6, 255, 45, 16, 4, 255, 49, 19, 6, 255, 47, 14, 3, 255, 40, 15, 2, 255, 44, 16, 4, 255, 49, 14, 2, 255, 53, 18, 4, 255, 53, 14, 2, 255, 53, 13, 3, 255, 50, 17, 3, 255, 47, 15, 0, 255, 47, 15, 3, 255, 40, 12, 1, 255, 40, 12, 1, 255, 40, 12, 5, 255, 40, 14, 9, 255, 33, 10, 4, 255, 34, 9, 3, 255, 43, 15, 4, 255, 45, 14, 5, 255, 45, 12, 4, 255, 38, 8, 3, 255, 38, 10, 8, 255, 43, 15, 8, 255, 41, 10, 0, 255, 43, 11, 2, 255, 38, 12, 5, 255, 39, 13, 3, 255, 34, 10, 1, 255, 41, 10, 4, 255, 39, 12, 4, 255, 38, 10, 1, 255, 34, 9, 5, 255, 34, 11, 4, 255, 31, 10, 5, 255, 41, 16, 5, 255, 44, 15, 1, 255, 43, 15, 3, 255, 43, 11, 1, 255, 46, 10, 4, 255, 46, 12, 4, 255, 43, 9, 1, 255, 45, 12, 3, 255, 47, 14, 4, 255, 47, 14, 4, 255, 44, 13, 3, 255, 51, 13, 0, 255, 52, 13, 2, 255, 46, 11, 5, 255, 47, 9, 2, 255, 40, 10, 1, 255, 41, 12, 4, 255, 41, 8, 1, 255, 42, 12, 2, 255, 44, 14, 4, 255, 46, 13, 2, 255, 40, 14, 3, 255, 39, 12, 5, 255, 42, 9, 2, 255, 37, 8, 0, 255, 40, 10, 2, 255, 45, 13, 6, 255, 47, 11, 6, 255, 40, 6, 2, 255, 38, 9, 3, 255, 43, 10, 4, 255, 43, 6, 3, 255, 34, 6, 1, 255, 27, 9, 1, 255, 37, 14, 6, 255, 41, 9, 5, 255, 38, 5, 2, 255, 32, 5, 3, 255, 34, 8, 4, 255, 33, 8, 4, 255, 27, 7, 5, 255, 19, 4, 1, 255, 25, 7, 2, 255, 22, 6, 2, 255, 20, 5, 4, 255, 21, 6, 5, 255, 23, 4, 3, 255, 25, 5, 2, 255, 25, 4, 3, 255, 19, 4, 1, 255, 21, 6, 3, 255, 26, 6, 2, 255, 26, 5, 1, 255, 27, 8, 2, 255, 30, 7, 2, 255, 27, 6, 0, 255, 28, 4, 1, 255, 27, 3, 0, 255, 19, 21, 30, 255, 27, 22, 34, 255, 26, 22, 35, 255, 26, 26, 39, 255, 24, 25, 50, 255, 29, 38, 50, 255, 33, 40, 46, 255, 43, 43, 42, 255, 62, 58, 63, 255, 72, 67, 61, 255, 50, 47, 41, 255, 21, 24, 29, 255, 7, 13, 23, 255, 6, 5, 14, 255, 4, 3, 14, 255, 5, 6, 11, 255, 5, 5, 2, 255, 8, 5, 1, 255, 10, 3, 5, 255, 11, 3, 3, 255, 11, 2, 0, 255, 14, 3, 2, 255, 14, 2, 0, 255, 12, 1, 0, 255, 13, 3, 1, 255, 12, 2, 0, 255, 14, 1, 0, 255, 14, 2, 1, 255, 18, 1, 1, 255, 20, 3, 2, 255, 22, 5, 5, 255, 18, 5, 4, 255, 20, 6, 3, 255, 19, 5, 2, 255, 19, 4, 1, 255, 20, 5, 2, 255, 21, 6, 3, 255, 18, 3, 0, 255, 19, 4, 1, 255, 19, 4, 1, 255, 19, 6, 1, 255, 20, 5, 0, 255, 22, 3, 1, 255, 23, 4, 3, 255, 21, 4, 1, 255, 23, 6, 2, 255, 22, 5, 3, 255, 22, 5, 2, 255, 22, 5, 1, 255, 22, 6, 1, 255, 18, 5, 0, 255, 19, 5, 1, 255, 21, 6, 1, 255, 24, 8, 3, 255, 21, 8, 3, 255, 21, 7, 4, 255, 18, 6, 0, 255, 21, 10, 0, 255, 19, 6, 0, 255, 17, 6, 0, 255, 18, 5, 1, 255, 21, 7, 3, 255, 22, 8, 3, 255, 23, 9, 2, 255, 25, 9, 4, 255, 20, 7, 1, 255, 23, 10, 2, 255, 29, 13, 6, 255, 26, 11, 2, 255, 24, 11, 2, 255, 29, 12, 4, 255, 27, 10, 2, 255, 26, 9, 2, 255, 24, 10, 3, 255, 23, 10, 2, 255, 27, 14, 4, 255, 28, 10, 2, 255, 33, 9, 5, 255, 31, 8, 3, 255, 29, 11, 3, 255, 28, 14, 3, 255, 29, 16, 3, 255, 27, 13, 1, 255, 32, 14, 7, 255, 26, 11, 2, 255, 31, 14, 5, 255, 30, 16, 4, 255, 32, 13, 1, 255, 30, 13, 2, 255, 34, 15, 4, 255, 30, 13, 1, 255, 34, 16, 3, 255, 35, 16, 4, 255, 38, 19, 5, 255, 35, 17, 2, 255, 31, 16, 2, 255, 36, 17, 3, 255, 35, 16, 2, 255, 34, 17, 4, 255, 31, 16, 3, 255, 34, 19, 3, 255, 43, 23, 7, 255, 39, 22, 4, 255, 36, 21, 2, 255, 39, 20, 3, 255, 39, 18, 1, 255, 41, 19, 5, 255, 40, 19, 3, 255, 40, 19, 3, 255, 40, 18, 4, 255, 37, 20, 3, 255, 45, 20, 5, 255, 43, 18, 3, 255, 38, 18, 2, 255, 45, 20, 4, 255, 36, 19, 7, 255, 36, 21, 4, 255, 47, 20, 3, 255, 48, 17, 2, 255, 46, 22, 4, 255, 41, 25, 0, 255, 44, 27, 3, 255, 40, 22, 10, 255, 42, 23, 5, 255, 48, 27, 6, 255, 45, 25, 3, 255, 52, 23, 9, 255, 53, 27, 3, 255, 62, 29, 3, 255, 59, 32, 7, 255, 61, 29, 5, 255, 62, 25, 4, 255, 57, 27, 6, 255, 54, 27, 5, 255, 55, 25, 12, 255, 53, 26, 5, 255, 52, 29, 6, 255, 43, 29, 9, 255, 59, 35, 8, 255, 57, 35, 15, 255, 57, 42, 20, 255, 59, 48, 23, 255, 61, 56, 30, 255, 58, 59, 33, 255, 60, 64, 43, 255, 64, 71, 58, 255, 67, 78, 63, 255, 74, 87, 67, 255, 75, 93, 78, 255, 77, 104, 91, 255, 77, 113, 99, 255, 80, 124, 114, 255, 84, 134, 121, 255, 91, 144, 128, 255, 97, 153, 140, 255, 99, 160, 148, 255, 103, 165, 155, 255, 109, 169, 158, 255, 114, 173, 162, 255, 114, 175, 164, 255, 117, 176, 165, 255, 121, 176, 166, 255, 118, 176, 163, 255, 117, 172, 159, 255, 115, 171, 157, 255, 113, 167, 153, 255, 113, 162, 146, 255, 112, 157, 137, 255, 111, 153, 133, 255, 104, 149, 125, 255, 96, 143, 115, 255, 97, 133, 103, 255, 98, 124, 92, 255, 93, 116, 86, 255, 88, 108, 80, 255, 85, 101, 69, 255, 83, 94, 66, 255, 80, 86, 53, 255, 79, 83, 46, 255, 76, 77, 39, 255, 73, 73, 35, 255, 73, 69, 32, 255, 76, 65, 29, 255, 78, 59, 26, 255, 73, 54, 26, 255, 74, 52, 18, 255, 81, 51, 11, 255, 80, 47, 12, 255, 71, 44, 11, 255, 71, 42, 14, 255, 72, 37, 14, 255, 70, 37, 15, 255, 78, 38, 9, 255, 73, 36, 8, 255, 70, 34, 9, 255, 70, 34, 8, 255, 74, 36, 7, 255, 75, 35, 8, 255, 72, 32, 5, 255, 75, 32, 7, 255, 74, 29, 4, 255, 75, 29, 3, 255, 78, 33, 5, 255, 75, 35, 6, 255, 71, 32, 4, 255, 76, 30, 6, 255, 76, 28, 2, 255, 76, 28, 6, 255, 77, 31, 8, 255, 76, 31, 4, 255, 75, 28, 4, 255, 77, 29, 4, 255, 84, 30, 7, 255, 79, 30, 6, 255, 73, 29, 3, 255, 73, 27, 2, 255, 79, 30, 6, 255, 78, 31, 6, 255, 78, 31, 5, 255, 76, 29, 4, 255, 77, 31, 2, 255, 79, 32, 2, 255, 79, 31, 3, 255, 78, 29, 4, 255, 77, 27, 5, 255, 73, 27, 4, 255, 71, 29, 2, 255, 70, 29, 2, 255, 69, 23, 5, 255, 75, 25, 5, 255, 69, 21, 3, 255, 68, 26, 8, 255, 65, 26, 2, 255, 65, 24, 6, 255, 67, 23, 4, 255, 70, 29, 0, 255, 71, 28, 3, 255, 76, 27, 4, 255, 71, 27, 4, 255, 64, 26, 2, 255, 75, 29, 7, 255, 70, 26, 2, 255, 72, 26, 3, 255, 75, 30, 4, 255, 76, 28, 3, 255, 78, 26, 2, 255, 78, 27, 3, 255, 73, 26, 2, 255, 69, 29, 5, 255, 70, 27, 2, 255, 73, 28, 3, 255, 71, 28, 3, 255, 68, 26, 2, 255, 69, 24, 3, 255, 71, 24, 3, 255, 72, 26, 4, 255, 75, 26, 5, 255, 73, 26, 4, 255, 67, 23, 5, 255, 65, 23, 7, 255, 65, 26, 4, 255, 64, 26, 2, 255, 70, 26, 6, 255, 69, 24, 4, 255, 65, 26, 3, 255, 65, 26, 5, 255, 61, 21, 3, 255, 62, 25, 5, 255, 59, 24, 3, 255, 61, 24, 5, 255, 60, 23, 4, 255, 59, 22, 3, 255, 59, 22, 2, 255, 61, 24, 6, 255, 58, 22, 4, 255, 58, 21, 2, 255, 57, 19, 6, 255, 59, 21, 6, 255, 57, 21, 0, 255, 53, 19, 2, 255, 58, 20, 6, 255, 60, 20, 4, 255, 58, 20, 3, 255, 58, 22, 3, 255, 58, 20, 2, 255, 57, 20, 4, 255, 58, 21, 6, 255, 55, 19, 4, 255, 56, 17, 6, 255, 54, 16, 3, 255, 55, 20, 5, 255, 50, 19, 1, 255, 51, 17, 2, 255, 56, 16, 5, 255, 54, 15, 4, 255, 57, 18, 4, 255, 53, 16, 1, 255, 50, 16, 2, 255, 49, 17, 5, 255, 56, 18, 3, 255, 59, 18, 1, 255, 54, 17, 5, 255, 51, 15, 4, 255, 53, 14, 4, 255, 49, 16, 5, 255, 46, 17, 5, 255, 51, 14, 5, 255, 45, 14, 4, 255, 50, 15, 5, 255, 54, 12, 5, 255, 46, 14, 3, 255, 49, 17, 6, 255, 56, 14, 4, 255, 51, 15, 3, 255, 52, 15, 6, 255, 51, 14, 5, 255, 46, 16, 5, 255, 44, 16, 3, 255, 45, 15, 5, 255, 38, 13, 4, 255, 44, 12, 4, 255, 39, 7, 1, 255, 39, 10, 6, 255, 43, 13, 9, 255, 40, 11, 6, 255, 44, 12, 2, 255, 40, 14, 5, 255, 38, 14, 4, 255, 42, 14, 5, 255, 43, 15, 7, 255, 38, 13, 4, 255, 37, 12, 3, 255, 41, 14, 6, 255, 39, 12, 4, 255, 37, 14, 3, 255, 37, 10, 2, 255, 42, 10, 5, 255, 43, 9, 4, 255, 39, 11, 3, 255, 40, 10, 5, 255, 40, 12, 4, 255, 29, 11, 3, 255, 38, 17, 3, 255, 41, 13, 1, 255, 44, 12, 4, 255, 45, 10, 0, 255, 44, 11, 2, 255, 48, 14, 5, 255, 48, 12, 4, 255, 48, 12, 3, 255, 46, 12, 3, 255, 46, 12, 4, 255, 47, 13, 4, 255, 53, 14, 3, 255, 47, 12, 2, 255, 42, 12, 4, 255, 45, 10, 2, 255, 42, 8, 2, 255, 42, 9, 4, 255, 46, 11, 1, 255, 50, 14, 3, 255, 48, 11, 3, 255, 51, 12, 1, 255, 48, 12, 0, 255, 34, 10, 3, 255, 23, 7, 1, 255, 31, 13, 3, 255, 33, 11, 1, 255, 32, 7, 0, 255, 33, 7, 1, 255, 34, 9, 5, 255, 34, 10, 4, 255, 35, 7, 4, 255, 37, 9, 4, 255, 37, 9, 3, 255, 33, 8, 0, 255, 35, 9, 2, 255, 41, 11, 4, 255, 46, 11, 5, 255, 35, 9, 4, 255, 35, 10, 6, 255, 31, 6, 2, 255, 24, 3, 0, 255, 23, 7, 3, 255, 25, 6, 2, 255, 21, 7, 2, 255, 19, 6, 3, 255, 20, 7, 5, 255, 21, 4, 2, 255, 18, 4, 1, 255, 23, 5, 4, 255, 19, 4, 2, 255, 21, 5, 2, 255, 27, 6, 3, 255, 26, 7, 2, 255, 28, 8, 3, 255, 30, 8, 3, 255, 27, 6, 2, 255, 29, 5, 1, 255, 33, 7, 3, 255, 15, 13, 28, 255, 19, 14, 24, 255, 17, 18, 23, 255, 14, 19, 35, 255, 23, 22, 58, 255, 28, 27, 43, 255, 32, 29, 38, 255, 35, 33, 44, 255, 33, 38, 65, 255, 35, 43, 50, 255, 39, 43, 36, 255, 38, 36, 30, 255, 34, 28, 30, 255, 26, 23, 23, 255, 19, 18, 23, 255, 7, 8, 25, 255, 3, 4, 22, 255, 7, 6, 12, 255, 6, 5, 2, 255, 8, 4, 1, 255, 9, 4, 1, 255, 14, 5, 3, 255, 14, 3, 1, 255, 12, 1, 0, 255, 13, 3, 1, 255, 11, 1, 0, 255, 13, 1, 0, 255, 15, 4, 2, 255, 18, 2, 1, 255, 21, 3, 1, 255, 22, 5, 2, 255, 20, 4, 3, 255, 21, 6, 2, 255, 19, 4, 1, 255, 20, 5, 2, 255, 23, 6, 2, 255, 24, 6, 3, 255, 18, 4, 2, 255, 19, 4, 2, 255, 18, 3, 0, 255, 20, 5, 0, 255, 23, 5, 0, 255, 24, 4, 2, 255, 23, 4, 3, 255, 20, 4, 3, 255, 23, 6, 1, 255, 26, 8, 2, 255, 28, 7, 2, 255, 26, 6, 2, 255, 24, 7, 5, 255, 18, 5, 0, 255, 26, 4, 1, 255, 28, 7, 2, 255, 25, 6, 1, 255, 22, 6, 3, 255, 19, 5, 2, 255, 17, 6, 0, 255, 20, 10, 2, 255, 20, 10, 1, 255, 20, 9, 3, 255, 20, 6, 3, 255, 19, 6, 2, 255, 19, 8, 0, 255, 27, 9, 3, 255, 26, 5, 1, 255, 26, 8, 2, 255, 23, 7, 0, 255, 26, 7, 2, 255, 28, 10, 3, 255, 25, 13, 3, 255, 23, 10, 2, 255, 26, 12, 3, 255, 27, 10, 3, 255, 23, 9, 2, 255, 23, 11, 3, 255, 26, 12, 5, 255, 22, 7, 0, 255, 25, 9, 2, 255, 30, 11, 4, 255, 29, 10, 3, 255, 29, 14, 3, 255, 30, 16, 3, 255, 30, 12, 1, 255, 31, 13, 3, 255, 25, 11, 2, 255, 30, 13, 5, 255, 26, 12, 2, 255, 33, 16, 4, 255, 31, 16, 3, 255, 34, 14, 4, 255, 30, 12, 3, 255, 34, 16, 5, 255, 31, 12, 1, 255, 36, 16, 5, 255, 34, 16, 3, 255, 29, 16, 0, 255, 34, 16, 2, 255, 35, 16, 2, 255, 33, 17, 4, 255, 27, 15, 2, 255, 29, 16, 2, 255, 37, 18, 1, 255, 39, 21, 4, 255, 36, 21, 2, 255, 35, 19, 0, 255, 33, 19, 1, 255, 34, 20, 3, 255, 37, 18, 1, 255, 42, 21, 3, 255, 38, 17, 4, 255, 34, 17, 4, 255, 44, 19, 5, 255, 40, 17, 3, 255, 35, 19, 5, 255, 43, 20, 5, 255, 36, 17, 7, 255, 37, 22, 7, 255, 44, 24, 5, 255, 48, 23, 6, 255, 41, 21, 5, 255, 43, 24, 6, 255, 42, 19, 2, 255, 40, 20, 10, 255, 51, 27, 3, 255, 52, 24, 1, 255, 55, 28, 3, 255, 60, 26, 6, 255, 63, 32, 2, 255, 65, 31, 4, 255, 51, 25, 5, 255, 52, 26, 1, 255, 60, 25, 5, 255, 55, 26, 12, 255, 49, 25, 5, 255, 46, 24, 10, 255, 48, 33, 5, 255, 47, 29, 15, 255, 52, 26, 12, 255, 64, 33, 9, 255, 52, 36, 13, 255, 55, 41, 19, 255, 54, 51, 23, 255, 56, 57, 24, 255, 58, 62, 35, 255, 63, 66, 46, 255, 68, 70, 59, 255, 75, 79, 64, 255, 75, 88, 66, 255, 77, 97, 78, 255, 78, 107, 90, 255, 78, 118, 98, 255, 82, 130, 117, 255, 88, 138, 126, 255, 96, 149, 134, 255, 100, 158, 145, 255, 100, 163, 153, 255, 104, 169, 160, 255, 113, 174, 164, 255, 117, 177, 167, 255, 117, 178, 169, 255, 122, 177, 166, 255, 123, 174, 165, 255, 118, 175, 162, 255, 118, 174, 159, 255, 115, 173, 157, 255, 112, 167, 151, 255, 112, 162, 145, 255, 109, 155, 135, 255, 105, 150, 129, 255, 102, 147, 123, 255, 98, 139, 113, 255, 95, 129, 100, 255, 93, 120, 88, 255, 92, 113, 84, 255, 89, 106, 79, 255, 80, 93, 60, 255, 81, 88, 54, 255, 80, 83, 44, 255, 79, 78, 38, 255, 78, 67, 42, 255, 77, 64, 38, 255, 78, 63, 28, 255, 81, 62, 19, 255, 81, 57, 16, 255, 74, 51, 19, 255, 74, 46, 21, 255, 75, 46, 10, 255, 73, 44, 6, 255, 71, 39, 11, 255, 74, 43, 12, 255, 70, 43, 4, 255, 70, 37, 9, 255, 72, 32, 9, 255, 67, 32, 11, 255, 68, 33, 10, 255, 74, 35, 7, 255, 74, 32, 5, 255, 74, 33, 8, 255, 72, 34, 6, 255, 73, 34, 7, 255, 75, 32, 8, 255, 78, 32, 8, 255, 76, 31, 3, 255, 78, 35, 4, 255, 76, 34, 4, 255, 78, 32, 2, 255, 81, 34, 0, 255, 82, 32, 4, 255, 77, 29, 6, 255, 77, 31, 5, 255, 77, 30, 7, 255, 78, 32, 3, 255, 84, 30, 3, 255, 78, 27, 1, 255, 73, 31, 3, 255, 81, 33, 6, 255, 78, 28, 2, 255, 72, 29, 1, 255, 75, 31, 5, 255, 75, 30, 4, 255, 72, 30, 0, 255, 82, 31, 1, 255, 81, 30, 2, 255, 77, 27, 1, 255, 76, 27, 6, 255, 71, 28, 5, 255, 68, 31, 3, 255, 70, 32, 6, 255, 67, 24, 5, 255, 74, 25, 6, 255, 72, 23, 1, 255, 70, 27, 9, 255, 67, 26, 3, 255, 72, 30, 4, 255, 71, 23, 3, 255, 73, 28, 0, 255, 74, 31, 1, 255, 73, 29, 5, 255, 71, 28, 4, 255, 68, 29, 3, 255, 75, 29, 6, 255, 69, 29, 4, 255, 63, 28, 3, 255, 73, 29, 3, 255, 76, 28, 2, 255, 78, 25, 2, 255, 78, 28, 3, 255, 73, 27, 2, 255, 74, 31, 6, 255, 72, 27, 3, 255, 71, 26, 1, 255, 69, 28, 3, 255, 68, 28, 4, 255, 71, 28, 6, 255, 72, 26, 6, 255, 71, 26, 3, 255, 71, 27, 1, 255, 65, 24, 2, 255, 69, 27, 3, 255, 66, 25, 2, 255, 62, 21, 6, 255, 68, 25, 8, 255, 66, 22, 3, 255, 65, 20, 1, 255, 66, 22, 2, 255, 64, 28, 4, 255, 63, 25, 3, 255, 65, 24, 4, 255, 62, 22, 3, 255, 63, 21, 6, 255, 61, 22, 5, 255, 60, 22, 3, 255, 57, 20, 1, 255, 59, 20, 2, 255, 61, 21, 3, 255, 61, 17, 3, 255, 64, 19, 2, 255, 65, 20, 5, 255, 61, 23, 6, 255, 58, 27, 2, 255, 59, 23, 5, 255, 52, 15, 6, 255, 53, 20, 6, 255, 52, 19, 3, 255, 57, 21, 5, 255, 55, 18, 2, 255, 59, 22, 5, 255, 56, 19, 2, 255, 53, 17, 4, 255, 50, 14, 0, 255, 55, 19, 3, 255, 54, 22, 4, 255, 53, 20, 4, 255, 58, 19, 7, 255, 52, 17, 3, 255, 54, 17, 5, 255, 54, 15, 7, 255, 54, 20, 8, 255, 53, 21, 5, 255, 56, 18, 2, 255, 59, 13, 3, 255, 54, 14, 3, 255, 47, 18, 2, 255, 50, 18, 3, 255, 52, 15, 6, 255, 45, 13, 4, 255, 45, 14, 4, 255, 43, 15, 4, 255, 47, 14, 4, 255, 61, 16, 7, 255, 48, 14, 3, 255, 47, 15, 4, 255, 55, 15, 6, 255, 45, 14, 2, 255, 47, 16, 6, 255, 48, 12, 5, 255, 41, 11, 3, 255, 40, 11, 2, 255, 41, 11, 4, 255, 34, 10, 4, 255, 41, 12, 4, 255, 39, 13, 4, 255, 38, 12, 6, 255, 42, 13, 5, 255, 42, 11, 3, 255, 44, 12, 0, 255, 43, 14, 4, 255, 40, 11, 3, 255, 42, 12, 1, 255, 41, 17, 0, 255, 32, 11, 0, 255, 34, 9, 5, 255, 40, 11, 8, 255, 35, 12, 3, 255, 34, 15, 3, 255, 36, 11, 2, 255, 37, 11, 4, 255, 38, 10, 4, 255, 36, 13, 4, 255, 37, 11, 2, 255, 43, 12, 2, 255, 35, 10, 2, 255, 46, 15, 3, 255, 47, 14, 2, 255, 40, 11, 4, 255, 44, 12, 3, 255, 45, 12, 0, 255, 50, 14, 3, 255, 52, 15, 4, 255, 51, 13, 3, 255, 46, 8, 0, 255, 49, 11, 3, 255, 47, 9, 2, 255, 53, 15, 3, 255, 43, 11, 2, 255, 35, 11, 4, 255, 42, 9, 0, 255, 44, 10, 2, 255, 44, 9, 4, 255, 51, 11, 0, 255, 59, 13, 4, 255, 54, 10, 3, 255, 62, 15, 3, 255, 60, 15, 3, 255, 41, 10, 5, 255, 34, 9, 6, 255, 38, 10, 4, 255, 36, 6, 1, 255, 37, 9, 3, 255, 36, 12, 6, 255, 31, 7, 4, 255, 31, 7, 4, 255, 26, 7, 1, 255, 31, 11, 4, 255, 39, 11, 4, 255, 43, 8, 4, 255, 36, 7, 2, 255, 36, 10, 2, 255, 42, 9, 1, 255, 30, 8, 1, 255, 34, 9, 5, 255, 34, 9, 5, 255, 33, 9, 1, 255, 28, 8, 2, 255, 25, 5, 2, 255, 23, 8, 3, 255, 18, 5, 1, 255, 20, 5, 2, 255, 22, 3, 2, 255, 18, 5, 2, 255, 24, 7, 5, 255, 21, 4, 2, 255, 21, 5, 2, 255, 25, 5, 2, 255, 24, 6, 0, 255, 25, 8, 1, 255, 27, 6, 2, 255, 24, 6, 4, 255, 24, 6, 0, 255, 29, 8, 2, 255];\n\
+\n\
+var sigma = 10; // radius\n\
+var kernel, kernelSize, kernelSum;\n\
+\n\
+function buildKernel() {\n\
+ var ss = sigma * sigma;\n\
+ var factor = 2 * Math.PI * ss;\n\
+ kernel = [];\n\
+ kernel.push([]);\n\
+ var i = 0, j;\n\
+\n\
+ do {\n\
+ var g = Math.exp(-(i * i) / (2 * ss)) / factor;\n\
+ if (g < 1e-3) break;\n\
+ kernel[0].push(g);\n\
+ ++i;\n\
+ } while (i < 7);\n\
+\n\
+ kernelSize = i;\n\
+ for (j = 1; j < kernelSize; ++j) {\n\
+ kernel.push([]);\n\
+ for (i = 0; i < kernelSize; ++i) {\n\
+ var g = Math.exp(-(i * i + j * j) / (2 * ss)) / factor;\n\
+ kernel[j].push(g);\n\
+ }\n\
+ }\n\
+ kernelSum = 0;\n\
+ for (j = 1 - kernelSize; j < kernelSize; ++j) {\n\
+ for (i = 1 - kernelSize; i < kernelSize; ++i) {\n\
+ kernelSum += kernel[Math.abs(j)][Math.abs(i)];\n\
+ }\n\
+ }\n\
+}\n\
+\n\
+buildKernel();\n\
+\n\
+var width = 400, height = 267;\n\
+\n\
+\n\
+TalosContentProfiler.subtestStart('imaging-gaussian-blur', true).then(() => {\n\
+ var _sunSpiderStartDate = new Date();\n\
+\n\
+ //print(\"i: \" + i + \"j: \" + j);\n\
+\n\
+ function gaussianBlur() {\n\
+ for (var y = 0; y < height; ++y) {\n\
+ for (var x = 0; x < width; ++x) {\n\
+ var r = 0, g = 0, b = 0, a = 0;\n\
+ for (var j = 1 - kernelSize; j < kernelSize; ++j) {\n\
+ if (y + j < 0 || y + j >= height) continue;\n\
+ for (var i = 1 - kernelSize; i < kernelSize; ++i) {\n\
+ if (x + i < 0 || x + i >= width) continue;\n\
+ r += squidImageData[4 * ((y + j) * width + (x + i)) + 0] * kernel[Math.abs(j)][Math.abs(i)];\n\
+ g += squidImageData[4 * ((y + j) * width + (x + i)) + 1] * kernel[Math.abs(j)][Math.abs(i)];\n\
+ b += squidImageData[4 * ((y + j) * width + (x + i)) + 2] * kernel[Math.abs(j)][Math.abs(i)];\n\
+ a += squidImageData[4 * ((y + j) * width + (x + i)) + 3] * kernel[Math.abs(j)][Math.abs(i)];\n\
+ }\n\
+ }\n\
+ squidImageData[4 * (y * width + x) + 0] = r / kernelSum;\n\
+ squidImageData[4 * (y * width + x) + 1] = g / kernelSum;\n\
+ squidImageData[4 * (y * width + x) + 2] = b / kernelSum;\n\
+ squidImageData[4 * (y * width + x) + 3] = a / kernelSum;\n\
+ }\n\
+ }\n\
+ return squidImageData;\n\
+ }\n\
+ gaussianBlur();\n\
+\n\
+ var _sunSpiderInterval = new Date() - _sunSpiderStartDate;\n\
+ TalosContentProfiler.subtestEnd('imaging-gaussian-blur', true).then(() => {\n\
+ record(_sunSpiderInterval);\n\
+ });\n\
+});\n\
+</script>\n\
+\n\
+\n\
+</body>\n\
+</html>\n\
+", "<!DOCTYPE html>\n\
+<head>\n\
+\n\
+<meta charset=utf8>\n\
+\n\
+<!--\n\
+ Copyright (C) 2007 Apple Inc. All rights reserved.\n\
+\n\
+ Redistribution and use in source and binary forms, with or without\n\
+ modification, are permitted provided that the following conditions\n\
+ are met:\n\
+ 1. Redistributions of source code must retain the above copyright\n\
+ notice, this list of conditions and the following disclaimer.\n\
+ 2. Redistributions in binary form must reproduce the above copyright\n\
+ notice, this list of conditions and the following disclaimer in the\n\
+ documentation and/or other materials provided with the distribution.\n\
+\n\
+ THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY\n\
+ EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n\
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n\
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR\n\
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n\
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n\
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n\
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n\
+ OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n\
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \n\
+-->\n\
+\n\
+<title>SunSpider imaging-darkroom</title>\n\
+<link rel=\"stylesheet\" href=\"../kraken.css\">\n\
+</head>\n\
+\n\
+<body>\n\
+<h3>imaging-darkroom</h3>\n\
+<div id=\"console\">\n\
+</div>\n\
+<script>\n\
+var TalosContentProfiler = parent.TalosContentProfiler;\n\
+function record(time) {\n\
+ document.getElementById(\"console\").innerHTML = time + \"ms\";\n\
+ if (window.parent) {\n\
+ parent.recordResult(time);\n\
+ }\n\
+}\n\
+\n\
+var squidImageData = [8, 7, 21, 255, 42, 39, 79, 255, 74, 64, 104, 255, 96, 83, 136, 255, 98, 82, 134, 255, 68, 63, 102, 255, 22, 29, 66, 255, 10, 22, 44, 255, 9, 27, 43, 255, 7, 23, 38, 255, 8, 18, 25, 255, 5, 12, 19, 255, 2, 7, 12, 255, 4, 1, 7, 255, 16, 10, 34, 255, 22, 22, 57, 255, 29, 26, 74, 255, 36, 33, 74, 255, 67, 17, 35, 255, 125, 25, 24, 255, 155, 37, 22, 255, 146, 30, 12, 255, 111, 14, 3, 255, 89, 10, 12, 255, 74, 9, 20, 255, 34, 5, 7, 255, 3, 2, 6, 255, 0, 2, 3, 255, 5, 1, 0, 255, 4, 3, 1, 255, 3, 2, 2, 255, 1, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 2, 255, 1, 1, 3, 255, 1, 1, 3, 255, 1, 1, 3, 255, 2, 1, 6, 255, 2, 1, 7, 255, 2, 1, 6, 255, 2, 1, 5, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 2, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 2, 2, 1, 255, 4, 4, 4, 255, 3, 4, 6, 255, 1, 3, 6, 255, 5, 4, 8, 255, 3, 1, 8, 255, 1, 0, 6, 255, 0, 0, 2, 255, 1, 2, 0, 255, 2, 0, 0, 255, 0, 1, 4, 255, 3, 2, 23, 255, 4, 3, 43, 255, 4, 4, 41, 255, 2, 4, 24, 255, 0, 2, 11, 255, 0, 0, 4, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 2, 255, 0, 0, 0, 255, 6, 5, 6, 255, 21, 27, 51, 255, 6, 28, 68, 255, 0, 9, 20, 255, 3, 0, 7, 255, 4, 2, 13, 255, 1, 1, 3, 255, 1, 0, 4, 255, 2, 2, 4, 255, 1, 1, 6, 255, 2, 1, 17, 255, 1, 3, 23, 255, 2, 4, 25, 255, 2, 2, 18, 255, 1, 1, 11, 255, 3, 2, 12, 255, 2, 3, 0, 255, 0, 0, 9, 255, 28, 27, 59, 255, 99, 98, 153, 255, 134, 145, 174, 255, 95, 93, 105, 255, 76, 70, 74, 255, 55, 51, 49, 255, 15, 15, 7, 255, 24, 17, 29, 255, 87, 71, 96, 255, 117, 102, 120, 255, 99, 88, 111, 255, 76, 82, 123, 255, 78, 84, 127, 255, 49, 40, 36, 255, 12, 7, 7, 255, 11, 8, 6, 255, 12, 7, 7, 255, 19, 8, 10, 255, 23, 10, 9, 255, 21, 11, 8, 255, 22, 10, 13, 255, 20, 11, 11, 255, 22, 14, 12, 255, 26, 14, 13, 255, 27, 13, 12, 255, 25, 11, 3, 255, 26, 17, 8, 255, 25, 19, 16, 255, 27, 15, 10, 255, 29, 18, 15, 255, 24, 14, 10, 255, 44, 19, 15, 255, 42, 24, 7, 255, 48, 26, 10, 255, 54, 31, 5, 255, 54, 30, 19, 255, 73, 45, 32, 255, 93, 57, 22, 255, 87, 47, 22, 255, 72, 41, 12, 255, 76, 47, 7, 255, 78, 49, 12, 255, 80, 51, 19, 255, 85, 51, 16, 255, 89, 51, 19, 255, 96, 61, 9, 255, 99, 62, 7, 255, 96, 56, 14, 255, 112, 64, 17, 255, 126, 83, 10, 255, 126, 76, 17, 255, 116, 72, 13, 255, 120, 73, 10, 255, 121, 71, 10, 255, 122, 74, 16, 255, 116, 69, 13, 255, 113, 68, 13, 255, 114, 68, 14, 255, 105, 61, 10, 255, 99, 55, 5, 255, 97, 56, 12, 255, 93, 56, 12, 255, 91, 52, 3, 255, 93, 57, 15, 255, 88, 51, 15, 255, 81, 49, 16, 255, 92, 49, 13, 255, 84, 49, 8, 255, 84, 43, 17, 255, 88, 40, 15, 255, 78, 41, 11, 255, 73, 39, 16, 255, 78, 44, 15, 255, 82, 40, 10, 255, 83, 39, 11, 255, 79, 42, 9, 255, 84, 45, 6, 255, 75, 41, 15, 255, 69, 41, 13, 255, 81, 36, 16, 255, 73, 38, 12, 255, 75, 40, 13, 255, 76, 37, 13, 255, 70, 34, 14, 255, 74, 39, 18, 255, 76, 38, 11, 255, 71, 37, 10, 255, 65, 37, 18, 255, 70, 38, 15, 255, 74, 39, 20, 255, 72, 36, 17, 255, 69, 36, 16, 255, 67, 39, 18, 255, 68, 40, 20, 255, 66, 39, 16, 255, 69, 43, 21, 255, 76, 44, 28, 255, 84, 50, 18, 255, 78, 46, 15, 255, 72, 46, 38, 255, 71, 49, 23, 255, 74, 53, 30, 255, 72, 48, 27, 255, 77, 53, 28, 255, 72, 52, 37, 255, 71, 53, 38, 255, 72, 57, 31, 255, 74, 61, 30, 255, 74, 65, 36, 255, 71, 61, 45, 255, 74, 63, 48, 255, 73, 65, 44, 255, 69, 69, 46, 255, 75, 70, 58, 255, 78, 77, 44, 255, 79, 75, 48, 255, 86, 75, 60, 255, 94, 80, 59, 255, 100, 81, 67, 255, 101, 78, 57, 255, 102, 84, 56, 255, 105, 87, 67, 255, 108, 88, 79, 255, 112, 87, 70, 255, 116, 90, 65, 255, 102, 85, 69, 255, 104, 89, 69, 255, 109, 92, 66, 255, 108, 95, 65, 255, 110, 95, 65, 255, 110, 96, 66, 255, 109, 97, 74, 255, 108, 97, 71, 255, 110, 100, 70, 255, 109, 96, 74, 255, 112, 97, 73, 255, 112, 99, 75, 255, 111, 102, 74, 255, 108, 101, 70, 255, 111, 104, 79, 255, 106, 101, 81, 255, 109, 106, 82, 255, 111, 107, 82, 255, 113, 107, 83, 255, 113, 107, 81, 255, 116, 111, 86, 255, 118, 113, 86, 255, 119, 117, 86, 255, 120, 118, 94, 255, 118, 124, 98, 255, 119, 135, 98, 255, 134, 151, 122, 255, 129, 142, 119, 255, 131, 142, 111, 255, 135, 145, 114, 255, 135, 148, 116, 255, 137, 152, 118, 255, 139, 155, 119, 255, 142, 156, 121, 255, 145, 157, 123, 255, 147, 156, 125, 255, 145, 157, 119, 255, 146, 156, 119, 255, 150, 157, 118, 255, 147, 153, 110, 255, 142, 149, 106, 255, 134, 145, 101, 255, 125, 140, 98, 255, 122, 138, 94, 255, 119, 126, 88, 255, 128, 124, 82, 255, 132, 122, 71, 255, 120, 111, 71, 255, 115, 111, 70, 255, 116, 108, 59, 255, 116, 102, 56, 255, 112, 93, 53, 255, 113, 92, 66, 255, 114, 93, 52, 255, 112, 89, 49, 255, 103, 91, 58, 255, 136, 120, 75, 255, 124, 91, 48, 255, 117, 78, 30, 255, 117, 82, 40, 255, 118, 81, 33, 255, 119, 79, 20, 255, 114, 73, 39, 255, 119, 75, 26, 255, 120, 73, 30, 255, 119, 78, 22, 255, 115, 76, 23, 255, 113, 77, 23, 255, 100, 66, 25, 255, 101, 68, 23, 255, 103, 71, 21, 255, 102, 69, 16, 255, 106, 70, 16, 255, 107, 69, 13, 255, 108, 69, 17, 255, 111, 67, 11, 255, 125, 69, 20, 255, 132, 73, 21, 255, 131, 77, 8, 255, 135, 75, 16, 255, 130, 67, 16, 255, 123, 66, 17, 255, 118, 64, 8, 255, 111, 59, 12, 255, 110, 60, 18, 255, 105, 59, 14, 255, 104, 58, 14, 255, 102, 55, 12, 255, 103, 56, 13, 255, 106, 58, 15, 255, 107, 58, 17, 255, 103, 54, 14, 255, 101, 51, 11, 255, 107, 54, 12, 255, 106, 55, 12, 255, 109, 60, 14, 255, 107, 59, 6, 255, 112, 59, 8, 255, 114, 59, 13, 255, 115, 65, 10, 255, 117, 66, 8, 255, 118, 67, 10, 255, 128, 73, 13, 255, 148, 81, 12, 255, 153, 82, 16, 255, 138, 73, 18, 255, 128, 68, 17, 255, 126, 64, 11, 255, 129, 62, 12, 255, 119, 60, 11, 255, 117, 60, 14, 255, 111, 58, 13, 255, 105, 60, 6, 255, 110, 60, 5, 255, 107, 52, 18, 255, 103, 51, 13, 255, 101, 54, 7, 255, 100, 52, 11, 255, 104, 52, 19, 255, 95, 52, 8, 255, 93, 54, 5, 255, 88, 46, 11, 255, 92, 49, 17, 255, 94, 48, 15, 255, 98, 49, 4, 255, 99, 47, 11, 255, 92, 45, 14, 255, 90, 42, 9, 255, 90, 41, 13, 255, 92, 43, 14, 255, 90, 44, 9, 255, 85, 37, 12, 255, 89, 41, 12, 255, 87, 38, 22, 255, 85, 38, 9, 255, 86, 38, 7, 255, 90, 40, 14, 255, 91, 42, 3, 255, 94, 42, 6, 255, 86, 41, 5, 255, 91, 43, 9, 255, 94, 42, 9, 255, 92, 33, 7, 255, 88, 36, 10, 255, 95, 39, 14, 255, 92, 36, 7, 255, 87, 37, 5, 255, 88, 41, 4, 255, 2, 2, 6, 255, 41, 36, 70, 255, 85, 77, 125, 255, 85, 89, 133, 255, 59, 76, 115, 255, 35, 43, 75, 255, 25, 27, 63, 255, 19, 33, 40, 255, 10, 33, 28, 255, 8, 24, 28, 255, 14, 21, 19, 255, 12, 16, 15, 255, 12, 14, 15, 255, 21, 14, 9, 255, 19, 20, 26, 255, 13, 24, 52, 255, 36, 28, 70, 255, 14, 27, 45, 255, 50, 13, 24, 255, 113, 17, 15, 255, 144, 32, 22, 255, 141, 32, 14, 255, 119, 12, 7, 255, 89, 10, 2, 255, 86, 11, 9, 255, 56, 9, 9, 255, 17, 3, 4, 255, 2, 3, 1, 255, 0, 3, 0, 255, 1, 3, 2, 255, 3, 0, 10, 255, 2, 4, 6, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 3, 255, 1, 0, 5, 255, 2, 1, 8, 255, 3, 2, 8, 255, 2, 1, 6, 255, 1, 0, 5, 255, 0, 0, 3, 255, 0, 0, 2, 255, 1, 1, 2, 255, 1, 1, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 4, 255, 0, 0, 6, 255, 2, 0, 6, 255, 1, 1, 3, 255, 2, 1, 4, 255, 0, 0, 8, 255, 1, 1, 3, 255, 2, 0, 0, 255, 1, 1, 6, 255, 0, 1, 20, 255, 3, 1, 42, 255, 4, 2, 46, 255, 3, 2, 31, 255, 0, 2, 7, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 3, 255, 1, 0, 1, 255, 6, 9, 14, 255, 20, 37, 80, 255, 9, 21, 65, 255, 0, 0, 18, 255, 1, 5, 13, 255, 5, 3, 14, 255, 0, 0, 4, 255, 1, 3, 5, 255, 2, 3, 12, 255, 3, 3, 14, 255, 3, 3, 13, 255, 0, 1, 11, 255, 3, 3, 14, 255, 2, 1, 2, 255, 0, 0, 2, 255, 15, 15, 61, 255, 86, 88, 145, 255, 143, 138, 181, 255, 113, 121, 131, 255, 71, 72, 78, 255, 55, 47, 41, 255, 20, 21, 8, 255, 22, 14, 27, 255, 85, 68, 82, 255, 118, 103, 116, 255, 103, 102, 135, 255, 95, 80, 118, 255, 81, 62, 83, 255, 55, 54, 41, 255, 17, 13, 4, 255, 5, 0, 3, 255, 14, 6, 7, 255, 14, 8, 8, 255, 12, 6, 5, 255, 20, 10, 11, 255, 23, 11, 11, 255, 20, 9, 10, 255, 24, 13, 12, 255, 23, 14, 12, 255, 21, 13, 11, 255, 22, 13, 12, 255, 26, 16, 20, 255, 24, 16, 15, 255, 24, 16, 9, 255, 24, 15, 13, 255, 27, 19, 12, 255, 33, 23, 10, 255, 42, 22, 14, 255, 53, 22, 16, 255, 51, 29, 12, 255, 58, 30, 21, 255, 73, 50, 18, 255, 87, 55, 23, 255, 89, 49, 18, 255, 78, 44, 2, 255, 69, 38, 7, 255, 75, 45, 7, 255, 83, 49, 9, 255, 83, 47, 16, 255, 88, 50, 18, 255, 92, 51, 12, 255, 98, 57, 2, 255, 105, 64, 11, 255, 101, 64, 12, 255, 96, 60, 11, 255, 108, 71, 3, 255, 116, 81, 8, 255, 111, 67, 10, 255, 105, 61, 14, 255, 111, 63, 14, 255, 111, 63, 7, 255, 113, 67, 6, 255, 110, 66, 3, 255, 105, 61, 5, 255, 99, 55, 10, 255, 93, 50, 9, 255, 93, 54, 14, 255, 95, 54, 15, 255, 97, 50, 21, 255, 99, 53, 13, 255, 103, 56, 4, 255, 101, 61, 7, 255, 103, 57, 10, 255, 106, 49, 14, 255, 103, 50, 16, 255, 95, 52, 16, 255, 91, 53, 9, 255, 88, 50, 10, 255, 88, 52, 12, 255, 92, 48, 16, 255, 95, 50, 7, 255, 95, 54, 7, 255, 93, 51, 12, 255, 81, 41, 9, 255, 83, 38, 15, 255, 76, 41, 5, 255, 79, 41, 11, 255, 78, 34, 22, 255, 74, 35, 15, 255, 79, 39, 6, 255, 79, 41, 4, 255, 78, 39, 9, 255, 78, 36, 17, 255, 75, 36, 10, 255, 73, 38, 11, 255, 75, 40, 18, 255, 72, 35, 17, 255, 75, 40, 14, 255, 73, 38, 19, 255, 69, 36, 15, 255, 67, 39, 22, 255, 66, 39, 15, 255, 70, 44, 16, 255, 70, 45, 21, 255, 80, 47, 26, 255, 78, 47, 26, 255, 79, 48, 16, 255, 71, 50, 26, 255, 68, 51, 27, 255, 64, 51, 39, 255, 67, 55, 26, 255, 69, 56, 28, 255, 70, 60, 36, 255, 69, 60, 34, 255, 70, 63, 32, 255, 68, 63, 33, 255, 66, 61, 44, 255, 73, 68, 47, 255, 74, 68, 42, 255, 70, 66, 45, 255, 79, 68, 50, 255, 81, 76, 40, 255, 82, 71, 58, 255, 77, 72, 55, 255, 85, 77, 52, 255, 97, 79, 63, 255, 104, 82, 67, 255, 106, 84, 64, 255, 108, 85, 63, 255, 108, 86, 65, 255, 103, 83, 62, 255, 107, 85, 64, 255, 102, 86, 60, 255, 104, 90, 58, 255, 105, 85, 62, 255, 109, 91, 65, 255, 106, 92, 60, 255, 110, 92, 63, 255, 116, 98, 57, 255, 113, 96, 61, 255, 110, 93, 66, 255, 105, 94, 66, 255, 113, 99, 67, 255, 115, 97, 63, 255, 111, 99, 66, 255, 111, 98, 68, 255, 112, 100, 71, 255, 110, 98, 71, 255, 112, 104, 72, 255, 112, 104, 78, 255, 115, 104, 88, 255, 116, 108, 74, 255, 121, 115, 74, 255, 121, 114, 84, 255, 121, 117, 78, 255, 124, 120, 80, 255, 122, 124, 88, 255, 114, 128, 93, 255, 128, 146, 115, 255, 133, 145, 117, 255, 132, 139, 105, 255, 137, 144, 107, 255, 137, 148, 110, 255, 136, 150, 111, 255, 139, 153, 115, 255, 139, 152, 115, 255, 143, 155, 118, 255, 148, 158, 121, 255, 147, 157, 117, 255, 141, 151, 109, 255, 149, 156, 111, 255, 152, 156, 107, 255, 141, 146, 96, 255, 134, 144, 95, 255, 131, 139, 96, 255, 125, 135, 92, 255, 114, 127, 82, 255, 122, 123, 74, 255, 136, 122, 68, 255, 126, 113, 65, 255, 116, 109, 62, 255, 122, 107, 62, 255, 120, 99, 59, 255, 120, 99, 45, 255, 115, 91, 52, 255, 116, 88, 60, 255, 119, 90, 50, 255, 100, 83, 41, 255, 132, 115, 65, 255, 131, 100, 53, 255, 115, 78, 24, 255, 115, 83, 30, 255, 115, 79, 41, 255, 117, 79, 22, 255, 116, 79, 26, 255, 117, 77, 26, 255, 117, 76, 32, 255, 116, 74, 25, 255, 117, 71, 24, 255, 119, 70, 23, 255, 104, 67, 24, 255, 100, 63, 27, 255, 103, 66, 31, 255, 106, 67, 25, 255, 109, 69, 20, 255, 108, 66, 17, 255, 113, 67, 12, 255, 110, 71, 14, 255, 118, 69, 20, 255, 125, 72, 22, 255, 133, 80, 14, 255, 136, 76, 9, 255, 120, 69, 9, 255, 119, 64, 11, 255, 120, 65, 22, 255, 114, 60, 22, 255, 107, 58, 13, 255, 103, 58, 9, 255, 106, 59, 13, 255, 104, 57, 11, 255, 103, 56, 9, 255, 104, 56, 12, 255, 106, 58, 15, 255, 104, 55, 13, 255, 108, 56, 14, 255, 112, 59, 14, 255, 108, 57, 10, 255, 109, 58, 16, 255, 112, 59, 15, 255, 114, 58, 12, 255, 116, 59, 12, 255, 117, 63, 5, 255, 122, 63, 9, 255, 123, 65, 15, 255, 135, 74, 13, 255, 150, 82, 10, 255, 151, 76, 12, 255, 143, 73, 10, 255, 133, 71, 8, 255, 125, 66, 8, 255, 126, 64, 13, 255, 121, 61, 11, 255, 121, 64, 7, 255, 116, 61, 3, 255, 114, 61, 8, 255, 110, 58, 9, 255, 109, 56, 14, 255, 107, 56, 11, 255, 102, 55, 5, 255, 104, 57, 7, 255, 106, 55, 10, 255, 92, 46, 20, 255, 94, 50, 11, 255, 98, 52, 2, 255, 98, 49, 9, 255, 96, 47, 13, 255, 90, 44, 9, 255, 91, 49, 9, 255, 92, 53, 6, 255, 87, 46, 7, 255, 85, 41, 12, 255, 91, 46, 9, 255, 91, 43, 7, 255, 92, 43, 7, 255, 86, 44, 5, 255, 86, 42, 6, 255, 88, 43, 8, 255, 91, 42, 9, 255, 89, 37, 18, 255, 92, 37, 19, 255, 94, 43, 8, 255, 87, 41, 10, 255, 89, 41, 10, 255, 95, 45, 3, 255, 93, 44, 7, 255, 91, 42, 10, 255, 94, 40, 5, 255, 89, 38, 8, 255, 86, 39, 7, 255, 88, 41, 8, 255, 0, 0, 1, 255, 20, 17, 25, 255, 51, 55, 97, 255, 49, 60, 102, 255, 26, 41, 68, 255, 5, 18, 44, 255, 14, 21, 53, 255, 19, 33, 37, 255, 18, 36, 34, 255, 19, 32, 45, 255, 23, 28, 40, 255, 18, 17, 24, 255, 15, 15, 22, 255, 21, 19, 19, 255, 27, 18, 13, 255, 25, 17, 32, 255, 20, 20, 25, 255, 22, 24, 27, 255, 15, 23, 31, 255, 69, 17, 23, 255, 133, 20, 16, 255, 144, 31, 9, 255, 111, 15, 7, 255, 87, 9, 6, 255, 102, 10, 4, 255, 80, 12, 1, 255, 68, 9, 12, 255, 56, 3, 20, 255, 18, 2, 5, 255, 0, 1, 5, 255, 3, 0, 5, 255, 1, 3, 3, 255, 2, 2, 2, 255, 2, 2, 1, 255, 0, 0, 0, 255, 0, 0, 2, 255, 0, 0, 5, 255, 3, 2, 9, 255, 2, 1, 8, 255, 1, 0, 6, 255, 2, 1, 6, 255, 2, 1, 6, 255, 1, 1, 4, 255, 0, 0, 3, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 2, 255, 1, 1, 3, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 3, 2, 8, 255, 4, 2, 12, 255, 1, 0, 5, 255, 0, 0, 0, 255, 0, 1, 1, 255, 1, 0, 0, 255, 0, 0, 0, 255, 0, 1, 5, 255, 1, 3, 24, 255, 3, 3, 44, 255, 1, 3, 35, 255, 1, 3, 11, 255, 0, 1, 1, 255, 1, 0, 1, 255, 1, 0, 1, 255, 2, 0, 1, 255, 1, 0, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 0, 3, 255, 3, 1, 5, 255, 0, 0, 0, 255, 12, 17, 31, 255, 28, 35, 75, 255, 5, 18, 42, 255, 0, 5, 11, 255, 4, 0, 16, 255, 3, 2, 11, 255, 0, 0, 10, 255, 1, 2, 12, 255, 0, 1, 7, 255, 2, 2, 13, 255, 2, 1, 7, 255, 0, 0, 0, 255, 6, 2, 42, 255, 74, 78, 148, 255, 113, 124, 184, 255, 120, 120, 133, 255, 86, 83, 73, 255, 51, 44, 43, 255, 18, 19, 20, 255, 21, 14, 27, 255, 73, 61, 81, 255, 114, 107, 122, 255, 105, 101, 147, 255, 73, 80, 175, 255, 77, 72, 110, 255, 58, 41, 59, 255, 18, 11, 12, 255, 4, 0, 3, 255, 10, 6, 5, 255, 20, 9, 15, 255, 18, 8, 10, 255, 14, 6, 5, 255, 18, 12, 8, 255, 20, 12, 9, 255, 24, 13, 13, 255, 26, 13, 14, 255, 25, 15, 10, 255, 25, 15, 13, 255, 24, 15, 11, 255, 25, 16, 8, 255, 25, 13, 13, 255, 26, 13, 9, 255, 30, 18, 8, 255, 33, 19, 18, 255, 42, 28, 11, 255, 41, 27, 3, 255, 47, 26, 13, 255, 67, 39, 11, 255, 78, 50, 24, 255, 83, 51, 20, 255, 76, 46, 16, 255, 64, 32, 11, 255, 66, 30, 9, 255, 69, 39, 9, 255, 73, 43, 11, 255, 75, 40, 10, 255, 72, 44, 19, 255, 78, 45, 13, 255, 88, 44, 2, 255, 92, 53, 15, 255, 99, 65, 10, 255, 110, 66, 16, 255, 106, 65, 11, 255, 102, 63, 4, 255, 103, 65, 3, 255, 106, 64, 17, 255, 102, 57, 5, 255, 98, 51, 11, 255, 101, 56, 16, 255, 99, 55, 10, 255, 101, 55, 9, 255, 100, 56, 11, 255, 98, 54, 14, 255, 96, 53, 19, 255, 100, 54, 20, 255, 97, 59, 9, 255, 100, 58, 8, 255, 100, 59, 10, 255, 106, 60, 14, 255, 117, 64, 14, 255, 121, 69, 8, 255, 126, 69, 10, 255, 127, 74, 9, 255, 131, 70, 12, 255, 125, 68, 12, 255, 132, 72, 5, 255, 139, 75, 3, 255, 126, 75, 5, 255, 108, 57, 15, 255, 101, 57, 11, 255, 94, 54, 9, 255, 87, 45, 16, 255, 73, 38, 8, 255, 79, 38, 13, 255, 75, 33, 18, 255, 69, 37, 10, 255, 73, 39, 7, 255, 71, 34, 18, 255, 77, 37, 16, 255, 75, 42, 11, 255, 73, 39, 8, 255, 72, 36, 19, 255, 75, 39, 11, 255, 77, 41, 7, 255, 70, 40, 14, 255, 70, 40, 16, 255, 70, 43, 6, 255, 67, 41, 16, 255, 69, 38, 17, 255, 67, 40, 20, 255, 73, 43, 22, 255, 75, 41, 18, 255, 72, 45, 19, 255, 70, 46, 22, 255, 76, 49, 30, 255, 79, 51, 28, 255, 80, 54, 28, 255, 70, 52, 30, 255, 63, 53, 38, 255, 71, 56, 26, 255, 76, 59, 25, 255, 74, 59, 39, 255, 71, 57, 42, 255, 71, 61, 42, 255, 66, 62, 36, 255, 71, 63, 40, 255, 84, 68, 31, 255, 80, 67, 40, 255, 71, 67, 42, 255, 75, 70, 42, 255, 78, 75, 43, 255, 82, 76, 48, 255, 84, 73, 47, 255, 86, 74, 47, 255, 92, 76, 60, 255, 103, 83, 70, 255, 102, 81, 62, 255, 101, 82, 66, 255, 103, 83, 70, 255, 106, 85, 62, 255, 106, 85, 62, 255, 97, 82, 57, 255, 101, 87, 55, 255, 106, 86, 59, 255, 110, 85, 65, 255, 114, 92, 62, 255, 117, 95, 64, 255, 114, 96, 61, 255, 111, 94, 61, 255, 111, 93, 70, 255, 107, 90, 63, 255, 114, 95, 62, 255, 113, 94, 59, 255, 111, 96, 63, 255, 110, 96, 70, 255, 112, 97, 69, 255, 113, 97, 68, 255, 114, 100, 73, 255, 113, 103, 72, 255, 114, 101, 75, 255, 117, 104, 82, 255, 121, 109, 81, 255, 120, 112, 73, 255, 122, 114, 78, 255, 125, 122, 76, 255, 125, 125, 82, 255, 120, 123, 94, 255, 127, 134, 104, 255, 137, 147, 112, 255, 128, 140, 103, 255, 134, 144, 99, 255, 137, 145, 101, 255, 137, 147, 104, 255, 141, 152, 110, 255, 141, 151, 110, 255, 141, 151, 109, 255, 144, 152, 110, 255, 147, 154, 110, 255, 146, 152, 104, 255, 148, 152, 100, 255, 150, 152, 96, 255, 145, 147, 92, 255, 136, 141, 90, 255, 126, 135, 83, 255, 124, 134, 81, 255, 123, 129, 79, 255, 127, 122, 73, 255, 131, 116, 73, 255, 122, 109, 75, 255, 116, 107, 68, 255, 117, 107, 45, 255, 120, 102, 64, 255, 118, 101, 41, 255, 117, 95, 45, 255, 115, 90, 55, 255, 119, 93, 37, 255, 107, 90, 23, 255, 122, 105, 49, 255, 136, 106, 66, 255, 115, 78, 34, 255, 112, 80, 31, 255, 112, 78, 35, 255, 118, 75, 35, 255, 121, 77, 29, 255, 117, 75, 20, 255, 119, 75, 27, 255, 118, 69, 33, 255, 127, 71, 29, 255, 131, 73, 12, 255, 113, 72, 24, 255, 105, 64, 22, 255, 107, 68, 24, 255, 110, 69, 19, 255, 111, 68, 14, 255, 115, 67, 19, 255, 117, 67, 20, 255, 117, 74, 17, 255, 123, 72, 11, 255, 125, 71, 17, 255, 131, 78, 26, 255, 136, 73, 18, 255, 127, 72, 17, 255, 122, 67, 20, 255, 117, 63, 19, 255, 111, 61, 10, 255, 108, 63, 8, 255, 106, 61, 14, 255, 106, 59, 13, 255, 107, 57, 11, 255, 103, 54, 9, 255, 102, 54, 10, 255, 106, 57, 11, 255, 106, 54, 9, 255, 108, 55, 11, 255, 109, 58, 13, 255, 106, 57, 13, 255, 106, 58, 14, 255, 110, 60, 8, 255, 110, 60, 6, 255, 112, 61, 9, 255, 113, 62, 8, 255, 122, 62, 6, 255, 123, 68, 4, 255, 131, 72, 7, 255, 145, 79, 13, 255, 149, 79, 12, 255, 146, 76, 8, 255, 135, 70, 7, 255, 127, 67, 17, 255, 125, 63, 22, 255, 123, 59, 16, 255, 119, 62, 14, 255, 111, 56, 8, 255, 115, 56, 12, 255, 112, 60, 12, 255, 112, 60, 5, 255, 109, 57, 6, 255, 105, 55, 8, 255, 103, 57, 5, 255, 106, 57, 10, 255, 100, 49, 11, 255, 97, 49, 12, 255, 96, 50, 10, 255, 94, 47, 10, 255, 95, 48, 6, 255, 92, 46, 9, 255, 95, 49, 13, 255, 95, 49, 11, 255, 92, 46, 9, 255, 89, 46, 9, 255, 86, 42, 7, 255, 88, 42, 7, 255, 89, 41, 11, 255, 89, 45, 11, 255, 83, 37, 15, 255, 90, 44, 13, 255, 90, 43, 2, 255, 90, 39, 8, 255, 97, 44, 16, 255, 92, 40, 9, 255, 91, 40, 16, 255, 95, 43, 13, 255, 96, 43, 6, 255, 86, 43, 2, 255, 92, 42, 6, 255, 97, 40, 7, 255, 88, 44, 4, 255, 89, 40, 4, 255, 95, 39, 6, 255, 2, 1, 1, 255, 1, 3, 0, 255, 9, 19, 32, 255, 29, 30, 57, 255, 26, 25, 46, 255, 14, 23, 44, 255, 26, 38, 55, 255, 30, 40, 45, 255, 39, 48, 46, 255, 34, 47, 47, 255, 19, 31, 38, 255, 17, 21, 34, 255, 23, 21, 27, 255, 25, 19, 17, 255, 22, 10, 8, 255, 15, 5, 11, 255, 17, 9, 7, 255, 30, 31, 34, 255, 21, 35, 47, 255, 22, 23, 14, 255, 84, 15, 10, 255, 92, 18, 10, 255, 83, 11, 6, 255, 105, 8, 4, 255, 112, 18, 10, 255, 111, 19, 7, 255, 116, 19, 8, 255, 116, 22, 19, 255, 72, 13, 13, 255, 31, 5, 1, 255, 11, 2, 0, 255, 0, 1, 0, 255, 3, 2, 7, 255, 3, 2, 5, 255, 1, 1, 2, 255, 0, 0, 0, 255, 0, 0, 2, 255, 1, 1, 5, 255, 2, 1, 9, 255, 2, 1, 9, 255, 2, 1, 7, 255, 2, 1, 5, 255, 1, 1, 2, 255, 1, 1, 1, 255, 1, 1, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 1, 1, 3, 255, 0, 0, 2, 255, 1, 1, 1, 255, 0, 1, 0, 255, 1, 0, 5, 255, 1, 0, 6, 255, 1, 1, 3, 255, 1, 1, 0, 255, 0, 0, 0, 255, 2, 1, 7, 255, 0, 3, 21, 255, 0, 5, 37, 255, 2, 4, 31, 255, 3, 1, 13, 255, 0, 3, 2, 255, 0, 1, 1, 255, 1, 0, 0, 255, 2, 1, 0, 255, 1, 1, 3, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 0, 1, 255, 2, 2, 3, 255, 0, 3, 4, 255, 2, 0, 1, 255, 16, 19, 45, 255, 15, 28, 54, 255, 2, 3, 12, 255, 1, 3, 14, 255, 1, 3, 7, 255, 0, 0, 7, 255, 2, 1, 6, 255, 4, 2, 11, 255, 0, 0, 0, 255, 1, 2, 23, 255, 60, 59, 124, 255, 133, 130, 182, 255, 126, 121, 146, 255, 91, 88, 83, 255, 53, 52, 47, 255, 23, 19, 10, 255, 19, 14, 9, 255, 53, 51, 63, 255, 111, 107, 123, 255, 102, 95, 116, 255, 71, 70, 125, 255, 75, 75, 116, 255, 48, 54, 73, 255, 20, 21, 16, 255, 6, 1, 1, 255, 6, 5, 6, 255, 14, 8, 8, 255, 19, 12, 5, 255, 16, 11, 4, 255, 19, 11, 9, 255, 26, 18, 14, 255, 25, 16, 10, 255, 24, 16, 9, 255, 27, 17, 13, 255, 26, 15, 13, 255, 24, 14, 6, 255, 23, 13, 9, 255, 23, 13, 10, 255, 26, 16, 8, 255, 28, 15, 9, 255, 34, 18, 10, 255, 40, 23, 15, 255, 33, 20, 17, 255, 39, 26, 11, 255, 69, 40, 22, 255, 93, 47, 27, 255, 92, 53, 16, 255, 67, 36, 8, 255, 56, 32, 12, 255, 52, 30, 15, 255, 57, 31, 14, 255, 68, 38, 11, 255, 72, 36, 9, 255, 71, 34, 14, 255, 72, 46, 16, 255, 72, 41, 14, 255, 77, 43, 14, 255, 83, 52, 11, 255, 96, 61, 6, 255, 102, 63, 14, 255, 93, 55, 18, 255, 98, 59, 4, 255, 98, 58, 6, 255, 98, 56, 9, 255, 98, 48, 18, 255, 93, 45, 14, 255, 93, 51, 11, 255, 97, 57, 6, 255, 97, 55, 8, 255, 95, 50, 10, 255, 96, 50, 12, 255, 96, 52, 12, 255, 100, 58, 13, 255, 104, 65, 15, 255, 109, 66, 4, 255, 106, 66, 16, 255, 116, 67, 20, 255, 125, 74, 8, 255, 137, 75, 16, 255, 163, 99, 5, 255, 186, 113, 6, 255, 183, 120, 9, 255, 190, 121, 14, 255, 188, 119, 11, 255, 183, 110, 6, 255, 172, 98, 6, 255, 139, 79, 9, 255, 98, 53, 11, 255, 83, 47, 12, 255, 80, 38, 12, 255, 79, 31, 17, 255, 81, 37, 6, 255, 75, 41, 9, 255, 77, 37, 19, 255, 73, 35, 14, 255, 64, 38, 6, 255, 71, 38, 14, 255, 77, 35, 18, 255, 71, 39, 17, 255, 78, 42, 12, 255, 76, 40, 15, 255, 78, 40, 11, 255, 81, 40, 13, 255, 73, 42, 17, 255, 74, 43, 22, 255, 71, 39, 9, 255, 71, 42, 15, 255, 69, 39, 25, 255, 68, 36, 12, 255, 72, 42, 24, 255, 69, 44, 24, 255, 71, 48, 18, 255, 79, 56, 25, 255, 78, 53, 22, 255, 73, 50, 34, 255, 80, 56, 31, 255, 74, 56, 22, 255, 69, 54, 27, 255, 73, 51, 32, 255, 78, 56, 33, 255, 76, 57, 33, 255, 73, 57, 39, 255, 77, 59, 39, 255, 77, 60, 35, 255, 76, 59, 47, 255, 80, 62, 39, 255, 83, 67, 31, 255, 82, 71, 39, 255, 81, 71, 39, 255, 74, 71, 40, 255, 75, 73, 55, 255, 87, 72, 55, 255, 83, 74, 55, 255, 83, 77, 59, 255, 100, 81, 64, 255, 108, 79, 57, 255, 104, 81, 67, 255, 103, 82, 72, 255, 109, 84, 56, 255, 103, 83, 53, 255, 104, 84, 62, 255, 101, 84, 59, 255, 104, 85, 59, 255, 113, 88, 60, 255, 116, 89, 59, 255, 115, 92, 60, 255, 109, 88, 64, 255, 107, 90, 62, 255, 108, 92, 61, 255, 108, 89, 61, 255, 111, 89, 64, 255, 109, 92, 61, 255, 106, 93, 59, 255, 106, 93, 63, 255, 110, 96, 65, 255, 113, 97, 70, 255, 112, 97, 75, 255, 113, 101, 68, 255, 115, 102, 72, 255, 116, 102, 76, 255, 117, 106, 77, 255, 121, 111, 79, 255, 122, 113, 83, 255, 124, 115, 80, 255, 124, 120, 82, 255, 120, 122, 92, 255, 118, 128, 90, 255, 135, 147, 107, 255, 133, 141, 106, 255, 133, 140, 99, 255, 137, 143, 96, 255, 137, 144, 100, 255, 141, 149, 105, 255, 143, 151, 107, 255, 143, 150, 106, 255, 146, 152, 108, 255, 150, 153, 104, 255, 148, 151, 100, 255, 149, 151, 95, 255, 152, 151, 93, 255, 148, 147, 91, 255, 140, 139, 89, 255, 129, 136, 85, 255, 123, 133, 78, 255, 125, 127, 73, 255, 126, 121, 71, 255, 125, 116, 68, 255, 122, 114, 66, 255, 119, 108, 65, 255, 114, 104, 49, 255, 116, 102, 54, 255, 115, 97, 51, 255, 116, 95, 47, 255, 115, 92, 40, 255, 114, 88, 42, 255, 112, 90, 43, 255, 109, 92, 41, 255, 133, 108, 74, 255, 116, 84, 36, 255, 114, 80, 26, 255, 118, 78, 41, 255, 118, 74, 42, 255, 114, 76, 28, 255, 117, 75, 27, 255, 121, 78, 23, 255, 120, 72, 24, 255, 125, 75, 22, 255, 123, 76, 18, 255, 115, 74, 18, 255, 111, 70, 17, 255, 109, 67, 18, 255, 110, 66, 18, 255, 111, 65, 13, 255, 116, 69, 11, 255, 120, 67, 11, 255, 120, 72, 12, 255, 115, 70, 15, 255, 124, 68, 24, 255, 136, 74, 20, 255, 133, 71, 15, 255, 129, 74, 12, 255, 125, 68, 15, 255, 119, 63, 11, 255, 116, 65, 8, 255, 110, 66, 12, 255, 105, 60, 19, 255, 108, 58, 16, 255, 110, 58, 11, 255, 109, 58, 11, 255, 105, 57, 11, 255, 106, 56, 10, 255, 108, 55, 11, 255, 107, 54, 15, 255, 108, 55, 13, 255, 107, 55, 9, 255, 109, 56, 11, 255, 112, 58, 7, 255, 114, 60, 6, 255, 116, 62, 9, 255, 119, 63, 9, 255, 124, 66, 7, 255, 124, 70, 4, 255, 130, 72, 8, 255, 143, 79, 18, 255, 152, 82, 15, 255, 151, 79, 10, 255, 142, 72, 8, 255, 132, 71, 11, 255, 127, 66, 12, 255, 126, 64, 19, 255, 117, 61, 15, 255, 109, 57, 7, 255, 119, 62, 14, 255, 113, 60, 13, 255, 113, 60, 2, 255, 110, 58, 7, 255, 109, 57, 15, 255, 106, 56, 11, 255, 106, 54, 11, 255, 99, 47, 8, 255, 97, 51, 6, 255, 94, 51, 11, 255, 93, 48, 12, 255, 94, 46, 7, 255, 97, 48, 4, 255, 96, 47, 9, 255, 96, 45, 7, 255, 97, 46, 4, 255, 98, 51, 5, 255, 90, 45, 4, 255, 92, 47, 8, 255, 91, 43, 10, 255, 93, 43, 12, 255, 92, 42, 10, 255, 89, 41, 3, 255, 98, 49, 8, 255, 95, 44, 14, 255, 91, 41, 8, 255, 96, 43, 7, 255, 99, 43, 6, 255, 102, 44, 5, 255, 102, 42, 4, 255, 92, 44, 3, 255, 98, 41, 8, 255, 102, 39, 10, 255, 98, 45, 4, 255, 92, 42, 3, 255, 92, 42, 7, 255, 3, 0, 3, 255, 0, 1, 3, 255, 0, 2, 3, 255, 5, 8, 13, 255, 9, 21, 40, 255, 19, 38, 49, 255, 23, 37, 30, 255, 43, 49, 50, 255, 50, 54, 55, 255, 25, 32, 31, 255, 17, 25, 28, 255, 27, 29, 40, 255, 40, 38, 38, 255, 33, 32, 37, 255, 21, 20, 30, 255, 21, 11, 13, 255, 16, 5, 8, 255, 19, 14, 11, 255, 24, 21, 21, 255, 22, 27, 24, 255, 19, 24, 21, 255, 12, 8, 14, 255, 18, 6, 1, 255, 67, 11, 11, 255, 110, 19, 24, 255, 121, 21, 10, 255, 124, 18, 2, 255, 120, 20, 13, 255, 124, 24, 10, 255, 91, 16, 4, 255, 26, 3, 3, 255, 0, 0, 7, 255, 2, 1, 6, 255, 2, 1, 5, 255, 1, 1, 3, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 5, 255, 2, 1, 8, 255, 2, 1, 7, 255, 3, 2, 6, 255, 2, 2, 3, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 2, 255, 0, 0, 3, 255, 2, 0, 4, 255, 3, 1, 13, 255, 0, 4, 31, 255, 1, 4, 36, 255, 3, 3, 21, 255, 2, 2, 5, 255, 0, 1, 0, 255, 0, 0, 6, 255, 2, 0, 0, 255, 1, 0, 0, 255, 1, 0, 4, 255, 0, 0, 4, 255, 0, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 3, 255, 1, 1, 3, 255, 2, 0, 3, 255, 0, 2, 14, 255, 2, 2, 11, 255, 1, 1, 7, 255, 2, 0, 9, 255, 5, 2, 6, 255, 3, 2, 4, 255, 0, 0, 0, 255, 8, 8, 27, 255, 50, 51, 110, 255, 127, 130, 183, 255, 131, 134, 159, 255, 85, 84, 74, 255, 58, 54, 36, 255, 31, 26, 20, 255, 19, 11, 19, 255, 64, 48, 76, 255, 115, 103, 113, 255, 88, 90, 113, 255, 71, 71, 152, 255, 87, 76, 114, 255, 57, 53, 61, 255, 26, 19, 8, 255, 7, 0, 1, 255, 13, 3, 3, 255, 13, 8, 7, 255, 13, 11, 10, 255, 19, 14, 2, 255, 26, 10, 9, 255, 25, 16, 15, 255, 23, 18, 13, 255, 24, 15, 10, 255, 25, 15, 9, 255, 24, 15, 8, 255, 23, 14, 9, 255, 25, 16, 10, 255, 26, 15, 7, 255, 30, 19, 11, 255, 29, 18, 15, 255, 29, 20, 16, 255, 28, 19, 10, 255, 32, 20, 12, 255, 38, 26, 15, 255, 67, 48, 11, 255, 84, 53, 12, 255, 81, 43, 20, 255, 65, 40, 6, 255, 50, 34, 8, 255, 59, 31, 12, 255, 60, 37, 3, 255, 68, 37, 11, 255, 55, 35, 10, 255, 55, 32, 17, 255, 66, 32, 18, 255, 74, 38, 8, 255, 73, 42, 6, 255, 77, 42, 8, 255, 82, 46, 10, 255, 88, 54, 13, 255, 94, 56, 4, 255, 93, 50, 6, 255, 91, 55, 6, 255, 88, 53, 8, 255, 83, 48, 1, 255, 85, 49, 9, 255, 90, 47, 13, 255, 87, 47, 16, 255, 89, 53, 12, 255, 98, 56, 12, 255, 100, 56, 14, 255, 97, 52, 10, 255, 100, 54, 11, 255, 105, 58, 10, 255, 110, 62, 12, 255, 118, 73, 10, 255, 127, 80, 8, 255, 140, 80, 13, 255, 152, 86, 9, 255, 177, 101, 1, 255, 201, 142, 8, 255, 236, 189, 2, 255, 252, 204, 3, 255, 253, 186, 6, 255, 229, 143, 6, 255, 196, 117, 5, 255, 168, 101, 10, 255, 135, 77, 15, 255, 97, 49, 16, 255, 70, 39, 9, 255, 68, 41, 17, 255, 73, 38, 16, 255, 76, 33, 10, 255, 86, 39, 3, 255, 73, 40, 5, 255, 76, 36, 13, 255, 83, 38, 13, 255, 70, 41, 11, 255, 73, 36, 16, 255, 81, 39, 10, 255, 76, 41, 14, 255, 74, 41, 5, 255, 79, 46, 8, 255, 77, 43, 7, 255, 70, 37, 10, 255, 67, 38, 15, 255, 64, 36, 19, 255, 71, 39, 23, 255, 71, 41, 26, 255, 64, 37, 26, 255, 73, 42, 18, 255, 73, 44, 20, 255, 68, 47, 16, 255, 77, 53, 11, 255, 85, 52, 25, 255, 79, 51, 28, 255, 79, 52, 23, 255, 74, 57, 24, 255, 74, 58, 31, 255, 72, 57, 25, 255, 75, 57, 31, 255, 73, 56, 32, 255, 70, 57, 30, 255, 70, 56, 37, 255, 74, 61, 43, 255, 75, 65, 40, 255, 74, 64, 46, 255, 75, 66, 34, 255, 79, 68, 38, 255, 80, 74, 37, 255, 82, 69, 47, 255, 78, 69, 41, 255, 81, 72, 45, 255, 92, 72, 54, 255, 85, 74, 49, 255, 80, 75, 43, 255, 93, 76, 55, 255, 105, 77, 59, 255, 102, 81, 67, 255, 103, 80, 67, 255, 111, 82, 58, 255, 107, 83, 57, 255, 107, 82, 54, 255, 102, 81, 58, 255, 107, 86, 69, 255, 112, 87, 54, 255, 113, 89, 56, 255, 115, 90, 56, 255, 115, 91, 53, 255, 113, 89, 54, 255, 106, 89, 46, 255, 104, 91, 57, 255, 104, 89, 64, 255, 107, 93, 59, 255, 107, 94, 54, 255, 109, 94, 55, 255, 112, 96, 60, 255, 111, 96, 64, 255, 110, 96, 70, 255, 115, 98, 71, 255, 116, 101, 67, 255, 117, 104, 67, 255, 119, 106, 68, 255, 121, 110, 69, 255, 121, 113, 63, 255, 123, 115, 78, 255, 123, 118, 81, 255, 124, 123, 84, 255, 121, 125, 84, 255, 135, 145, 104, 255, 137, 146, 109, 255, 131, 137, 98, 255, 136, 139, 96, 255, 139, 145, 99, 255, 140, 146, 100, 255, 142, 147, 101, 255, 143, 146, 101, 255, 146, 148, 102, 255, 150, 150, 101, 255, 148, 148, 97, 255, 148, 147, 91, 255, 153, 150, 92, 255, 151, 146, 89, 255, 141, 139, 87, 255, 135, 131, 83, 255, 126, 126, 80, 255, 119, 129, 73, 255, 116, 123, 68, 255, 123, 117, 72, 255, 127, 115, 63, 255, 121, 108, 55, 255, 122, 106, 61, 255, 118, 99, 50, 255, 124, 102, 46, 255, 118, 94, 43, 255, 120, 90, 52, 255, 121, 88, 45, 255, 116, 92, 30, 255, 106, 89, 33, 255, 130, 110, 59, 255, 121, 89, 44, 255, 116, 80, 22, 255, 123, 83, 27, 255, 121, 78, 33, 255, 118, 78, 27, 255, 120, 77, 25, 255, 124, 76, 22, 255, 123, 70, 27, 255, 122, 73, 23, 255, 118, 77, 15, 255, 115, 71, 25, 255, 110, 68, 18, 255, 108, 66, 16, 255, 111, 68, 22, 255, 110, 65, 18, 255, 113, 67, 15, 255, 110, 67, 15, 255, 111, 68, 17, 255, 112, 67, 26, 255, 120, 72, 23, 255, 128, 77, 4, 255, 131, 76, 10, 255, 138, 79, 17, 255, 134, 76, 14, 255, 129, 69, 10, 255, 121, 68, 9, 255, 109, 65, 10, 255, 106, 61, 11, 255, 111, 60, 10, 255, 116, 62, 13, 255, 112, 61, 14, 255, 105, 57, 12, 255, 107, 57, 10, 255, 111, 59, 12, 255, 108, 56, 13, 255, 107, 57, 10, 255, 111, 60, 8, 255, 113, 59, 15, 255, 114, 59, 10, 255, 116, 62, 8, 255, 117, 64, 9, 255, 119, 65, 7, 255, 123, 63, 9, 255, 124, 63, 14, 255, 135, 71, 14, 255, 149, 80, 14, 255, 156, 80, 12, 255, 160, 80, 9, 255, 149, 75, 5, 255, 140, 73, 6, 255, 137, 72, 8, 255, 130, 68, 14, 255, 121, 64, 12, 255, 116, 62, 7, 255, 117, 62, 10, 255, 111, 57, 18, 255, 113, 57, 8, 255, 114, 60, 11, 255, 111, 58, 14, 255, 110, 58, 11, 255, 105, 54, 1, 255, 102, 53, 9, 255, 99, 55, 8, 255, 99, 51, 7, 255, 102, 50, 7, 255, 102, 46, 12, 255, 99, 52, 9, 255, 91, 47, 8, 255, 94, 48, 7, 255, 98, 46, 11, 255, 101, 48, 13, 255, 95, 45, 9, 255, 94, 41, 12, 255, 98, 43, 7, 255, 98, 42, 12, 255, 98, 45, 1, 255, 98, 43, 11, 255, 103, 49, 11, 255, 102, 50, 7, 255, 94, 44, 5, 255, 96, 42, 8, 255, 99, 41, 11, 255, 102, 41, 10, 255, 106, 43, 1, 255, 100, 45, 6, 255, 98, 42, 8, 255, 98, 39, 1, 255, 100, 40, 5, 255, 96, 39, 5, 255, 99, 40, 9, 255, 1, 0, 3, 255, 1, 2, 2, 255, 3, 2, 3, 255, 2, 4, 8, 255, 6, 9, 9, 255, 7, 5, 9, 255, 15, 15, 13, 255, 26, 31, 24, 255, 20, 29, 32, 255, 14, 15, 21, 255, 23, 16, 17, 255, 31, 23, 25, 255, 36, 34, 34, 255, 30, 35, 34, 255, 27, 27, 25, 255, 29, 17, 20, 255, 17, 10, 5, 255, 13, 5, 6, 255, 8, 4, 4, 255, 16, 14, 9, 255, 17, 20, 23, 255, 18, 15, 13, 255, 12, 13, 19, 255, 16, 10, 36, 255, 44, 8, 38, 255, 75, 16, 30, 255, 105, 25, 30, 255, 126, 28, 34, 255, 119, 24, 21, 255, 74, 10, 15, 255, 18, 4, 10, 255, 1, 0, 3, 255, 0, 1, 0, 255, 0, 1, 1, 255, 1, 1, 3, 255, 2, 1, 5, 255, 2, 1, 3, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 2, 255, 2, 2, 5, 255, 2, 1, 4, 255, 1, 1, 4, 255, 1, 0, 4, 255, 0, 0, 3, 255, 0, 0, 2, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 2, 255, 0, 0, 2, 255, 1, 1, 0, 255, 0, 1, 0, 255, 0, 1, 10, 255, 2, 3, 26, 255, 2, 5, 32, 255, 2, 3, 22, 255, 2, 2, 6, 255, 1, 0, 0, 255, 0, 0, 2, 255, 0, 1, 2, 255, 1, 0, 2, 255, 1, 0, 2, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 2, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 0, 0, 255, 2, 1, 4, 255, 2, 3, 13, 255, 2, 1, 14, 255, 1, 2, 13, 255, 0, 0, 3, 255, 0, 2, 5, 255, 5, 2, 2, 255, 0, 0, 0, 255, 4, 4, 19, 255, 52, 54, 100, 255, 118, 119, 176, 255, 135, 137, 162, 255, 90, 90, 85, 255, 56, 52, 48, 255, 36, 34, 23, 255, 18, 9, 12, 255, 61, 45, 54, 255, 107, 93, 113, 255, 101, 95, 146, 255, 86, 90, 152, 255, 83, 63, 83, 255, 58, 51, 74, 255, 24, 28, 13, 255, 1, 3, 0, 255, 10, 5, 8, 255, 17, 11, 13, 255, 16, 7, 7, 255, 15, 10, 9, 255, 17, 17, 10, 255, 25, 18, 5, 255, 28, 19, 9, 255, 24, 20, 6, 255, 20, 20, 13, 255, 24, 16, 13, 255, 28, 15, 14, 255, 24, 13, 11, 255, 22, 13, 10, 255, 26, 17, 14, 255, 26, 18, 15, 255, 31, 20, 11, 255, 29, 16, 11, 255, 38, 23, 18, 255, 54, 36, 11, 255, 74, 48, 19, 255, 81, 47, 28, 255, 69, 41, 15, 255, 48, 32, 16, 255, 50, 30, 12, 255, 63, 33, 6, 255, 61, 35, 15, 255, 70, 37, 6, 255, 77, 42, 8, 255, 67, 41, 15, 255, 61, 31, 9, 255, 64, 30, 8, 255, 73, 39, 10, 255, 69, 38, 5, 255, 77, 40, 12, 255, 77, 42, 7, 255, 78, 43, 9, 255, 84, 47, 4, 255, 87, 54, 8, 255, 88, 53, 11, 255, 91, 51, 9, 255, 91, 48, 10, 255, 83, 46, 8, 255, 80, 54, 8, 255, 87, 52, 7, 255, 88, 50, 13, 255, 96, 54, 7, 255, 104, 59, 12, 255, 105, 62, 15, 255, 102, 58, 7, 255, 110, 64, 6, 255, 120, 73, 8, 255, 126, 77, 7, 255, 138, 86, 12, 255, 156, 101, 14, 255, 178, 113, 6, 255, 202, 146, 3, 255, 238, 204, 5, 255, 255, 242, 3, 255, 252, 225, 1, 255, 244, 186, 2, 255, 214, 140, 5, 255, 151, 87, 9, 255, 125, 69, 9, 255, 114, 59, 8, 255, 94, 47, 9, 255, 84, 42, 12, 255, 84, 43, 11, 255, 79, 42, 11, 255, 75, 39, 13, 255, 76, 41, 10, 255, 74, 38, 14, 255, 75, 38, 12, 255, 71, 37, 8, 255, 78, 38, 15, 255, 76, 38, 10, 255, 71, 40, 14, 255, 74, 41, 2, 255, 80, 47, 7, 255, 78, 46, 11, 255, 80, 43, 12, 255, 77, 42, 7, 255, 68, 41, 7, 255, 69, 43, 12, 255, 71, 43, 16, 255, 68, 44, 16, 255, 72, 42, 22, 255, 69, 41, 11, 255, 72, 45, 24, 255, 74, 49, 21, 255, 77, 51, 16, 255, 78, 54, 18, 255, 78, 55, 18, 255, 79, 55, 29, 255, 84, 61, 24, 255, 79, 56, 23, 255, 79, 60, 29, 255, 69, 54, 24, 255, 76, 61, 31, 255, 74, 62, 22, 255, 73, 61, 26, 255, 72, 59, 44, 255, 79, 61, 39, 255, 82, 65, 27, 255, 77, 63, 35, 255, 77, 67, 42, 255, 77, 66, 43, 255, 74, 68, 38, 255, 78, 69, 26, 255, 80, 72, 45, 255, 81, 70, 50, 255, 88, 77, 44, 255, 86, 76, 45, 255, 82, 72, 41, 255, 88, 71, 51, 255, 102, 81, 57, 255, 103, 80, 59, 255, 108, 79, 64, 255, 109, 81, 55, 255, 105, 80, 51, 255, 115, 85, 47, 255, 107, 84, 43, 255, 104, 82, 55, 255, 112, 81, 53, 255, 114, 85, 51, 255, 114, 87, 51, 255, 115, 90, 51, 255, 110, 87, 48, 255, 107, 87, 51, 255, 105, 87, 52, 255, 104, 89, 53, 255, 107, 92, 59, 255, 108, 89, 57, 255, 112, 91, 55, 255, 113, 90, 58, 255, 109, 91, 61, 255, 112, 96, 65, 255, 118, 98, 61, 255, 121, 104, 54, 255, 120, 103, 65, 255, 118, 101, 76, 255, 125, 110, 72, 255, 125, 114, 60, 255, 124, 115, 69, 255, 128, 119, 73, 255, 129, 122, 74, 255, 124, 124, 85, 255, 128, 135, 101, 255, 140, 147, 107, 255, 135, 138, 99, 255, 135, 137, 97, 255, 136, 138, 94, 255, 139, 142, 93, 255, 143, 146, 96, 255, 145, 147, 98, 255, 145, 145, 97, 255, 147, 145, 97, 255, 145, 144, 95, 255, 144, 144, 88, 255, 152, 147, 88, 255, 149, 145, 83, 255, 141, 137, 76, 255, 139, 133, 77, 255, 130, 127, 74, 255, 123, 128, 65, 255, 116, 121, 69, 255, 118, 113, 70, 255, 128, 114, 61, 255, 126, 107, 58, 255, 121, 104, 55, 255, 119, 98, 51, 255, 125, 100, 52, 255, 118, 94, 37, 255, 120, 90, 42, 255, 121, 86, 47, 255, 122, 87, 46, 255, 109, 86, 41, 255, 123, 102, 52, 255, 127, 94, 53, 255, 116, 81, 32, 255, 120, 83, 24, 255, 120, 79, 25, 255, 121, 77, 19, 255, 122, 77, 27, 255, 122, 74, 24, 255, 123, 71, 26, 255, 123, 73, 21, 255, 122, 77, 21, 255, 113, 69, 25, 255, 110, 66, 23, 255, 107, 67, 21, 255, 105, 66, 16, 255, 108, 69, 16, 255, 108, 69, 20, 255, 111, 69, 24, 255, 108, 70, 11, 255, 120, 72, 5, 255, 122, 75, 14, 255, 123, 77, 12, 255, 140, 78, 13, 255, 143, 79, 11, 255, 134, 73, 7, 255, 135, 71, 6, 255, 126, 68, 12, 255, 110, 65, 15, 255, 109, 66, 13, 255, 114, 63, 12, 255, 119, 62, 7, 255, 113, 63, 8, 255, 105, 61, 10, 255, 107, 59, 8, 255, 108, 57, 6, 255, 106, 55, 14, 255, 107, 59, 11, 255, 112, 63, 7, 255, 113, 58, 14, 255, 117, 60, 10, 255, 116, 64, 6, 255, 119, 65, 9, 255, 119, 64, 5, 255, 119, 67, 8, 255, 122, 67, 13, 255, 131, 69, 13, 255, 146, 77, 12, 255, 157, 82, 7, 255, 160, 80, 11, 255, 151, 77, 5, 255, 146, 74, 10, 255, 143, 70, 15, 255, 134, 70, 9, 255, 129, 66, 8, 255, 127, 63, 11, 255, 118, 62, 6, 255, 113, 63, 5, 255, 112, 58, 5, 255, 116, 60, 8, 255, 111, 57, 10, 255, 110, 56, 14, 255, 111, 57, 8, 255, 110, 56, 5, 255, 103, 54, 4, 255, 102, 51, 9, 255, 104, 47, 14, 255, 105, 49, 8, 255, 99, 49, 5, 255, 91, 47, 7, 255, 94, 48, 9, 255, 103, 48, 10, 255, 108, 51, 7, 255, 97, 46, 7, 255, 96, 47, 12, 255, 100, 50, 8, 255, 101, 46, 4, 255, 102, 45, 7, 255, 107, 47, 8, 255, 105, 46, 8, 255, 105, 48, 6, 255, 103, 46, 6, 255, 102, 46, 9, 255, 96, 44, 12, 255, 99, 44, 10, 255, 105, 46, 7, 255, 104, 45, 8, 255, 94, 46, 7, 255, 93, 43, 2, 255, 99, 41, 4, 255, 99, 44, 4, 255, 104, 49, 7, 255, 1, 1, 2, 255, 1, 0, 2, 255, 3, 1, 6, 255, 0, 0, 3, 255, 2, 0, 3, 255, 3, 0, 1, 255, 2, 1, 0, 255, 1, 2, 0, 255, 5, 10, 7, 255, 13, 16, 17, 255, 24, 16, 19, 255, 23, 26, 31, 255, 30, 30, 29, 255, 21, 26, 17, 255, 21, 24, 20, 255, 33, 25, 25, 255, 20, 20, 10, 255, 11, 8, 7, 255, 5, 0, 2, 255, 5, 0, 2, 255, 12, 2, 7, 255, 24, 15, 13, 255, 33, 25, 28, 255, 15, 19, 44, 255, 8, 13, 46, 255, 27, 24, 60, 255, 59, 36, 66, 255, 68, 36, 61, 255, 50, 23, 54, 255, 31, 16, 46, 255, 22, 15, 36, 255, 10, 4, 15, 255, 1, 0, 0, 255, 1, 0, 1, 255, 2, 1, 5, 255, 1, 1, 4, 255, 1, 2, 2, 255, 1, 1, 3, 255, 1, 0, 4, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 3, 255, 1, 0, 6, 255, 1, 0, 6, 255, 2, 1, 4, 255, 0, 0, 2, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 1, 255, 1, 0, 3, 255, 1, 0, 4, 255, 0, 0, 2, 255, 0, 1, 1, 255, 1, 3, 13, 255, 2, 4, 31, 255, 2, 3, 30, 255, 1, 4, 13, 255, 1, 1, 1, 255, 1, 0, 0, 255, 0, 0, 2, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 2, 255, 0, 0, 3, 255, 0, 1, 0, 255, 0, 2, 0, 255, 0, 0, 0, 255, 0, 0, 2, 255, 1, 1, 6, 255, 3, 2, 10, 255, 1, 3, 10, 255, 2, 1, 14, 255, 1, 1, 8, 255, 4, 4, 11, 255, 1, 0, 2, 255, 0, 0, 0, 255, 45, 39, 88, 255, 118, 118, 174, 255, 137, 137, 155, 255, 104, 103, 110, 255, 59, 60, 60, 255, 34, 26, 15, 255, 22, 12, 13, 255, 45, 36, 53, 255, 110, 93, 112, 255, 112, 107, 139, 255, 103, 93, 128, 255, 84, 81, 118, 255, 56, 69, 82, 255, 29, 24, 16, 255, 8, 4, 1, 255, 4, 2, 4, 255, 12, 6, 7, 255, 10, 7, 5, 255, 12, 12, 6, 255, 25, 17, 12, 255, 27, 22, 20, 255, 27, 24, 14, 255, 27, 24, 10, 255, 22, 19, 12, 255, 25, 17, 11, 255, 21, 17, 11, 255, 23, 13, 7, 255, 27, 14, 8, 255, 29, 17, 15, 255, 30, 18, 10, 255, 27, 19, 14, 255, 18, 15, 14, 255, 30, 20, 11, 255, 59, 32, 17, 255, 80, 47, 26, 255, 67, 48, 19, 255, 57, 34, 7, 255, 55, 26, 8, 255, 39, 22, 15, 255, 43, 27, 15, 255, 56, 34, 8, 255, 69, 40, 12, 255, 74, 40, 18, 255, 76, 38, 16, 255, 75, 39, 9, 255, 77, 38, 9, 255, 76, 38, 5, 255, 73, 37, 12, 255, 69, 39, 14, 255, 69, 40, 8, 255, 74, 35, 14, 255, 89, 45, 15, 255, 81, 47, 13, 255, 79, 47, 5, 255, 85, 52, 7, 255, 85, 53, 10, 255, 83, 46, 13, 255, 85, 47, 6, 255, 81, 48, 13, 255, 85, 53, 12, 255, 90, 52, 8, 255, 95, 55, 9, 255, 108, 62, 6, 255, 117, 69, 6, 255, 127, 76, 14, 255, 117, 66, 8, 255, 114, 67, 7, 255, 139, 88, 14, 255, 156, 97, 9, 255, 168, 111, 6, 255, 188, 131, 5, 255, 220, 165, 2, 255, 253, 216, 1, 255, 253, 233, 2, 255, 229, 173, 2, 255, 202, 123, 3, 255, 185, 111, 5, 255, 151, 89, 4, 255, 99, 60, 5, 255, 81, 49, 10, 255, 86, 45, 12, 255, 87, 46, 11, 255, 84, 47, 10, 255, 87, 46, 8, 255, 80, 40, 11, 255, 74, 42, 10, 255, 75, 43, 7, 255, 68, 38, 8, 255, 72, 43, 9, 255, 75, 48, 11, 255, 74, 42, 21, 255, 76, 39, 14, 255, 74, 42, 16, 255, 76, 44, 7, 255, 82, 42, 13, 255, 86, 45, 18, 255, 85, 45, 14, 255, 84, 44, 9, 255, 79, 43, 15, 255, 71, 43, 7, 255, 76, 46, 11, 255, 76, 43, 14, 255, 76, 43, 16, 255, 72, 46, 10, 255, 69, 45, 22, 255, 75, 46, 21, 255, 70, 45, 19, 255, 72, 54, 18, 255, 81, 59, 24, 255, 80, 54, 28, 255, 85, 56, 28, 255, 78, 55, 29, 255, 74, 62, 15, 255, 76, 54, 23, 255, 79, 55, 31, 255, 79, 60, 25, 255, 79, 64, 19, 255, 82, 59, 28, 255, 78, 61, 37, 255, 80, 65, 29, 255, 82, 64, 37, 255, 76, 67, 42, 255, 79, 66, 39, 255, 78, 67, 40, 255, 76, 65, 45, 255, 78, 73, 45, 255, 75, 71, 47, 255, 78, 73, 42, 255, 77, 72, 37, 255, 85, 76, 48, 255, 85, 75, 49, 255, 95, 78, 47, 255, 105, 77, 55, 255, 106, 81, 58, 255, 110, 80, 56, 255, 106, 79, 44, 255, 105, 81, 45, 255, 107, 82, 38, 255, 109, 83, 48, 255, 112, 82, 53, 255, 116, 85, 49, 255, 115, 85, 49, 255, 112, 89, 53, 255, 105, 87, 49, 255, 109, 89, 55, 255, 107, 89, 50, 255, 108, 89, 48, 255, 108, 87, 54, 255, 111, 89, 54, 255, 115, 90, 56, 255, 115, 89, 59, 255, 115, 92, 54, 255, 117, 100, 59, 255, 114, 95, 61, 255, 115, 99, 58, 255, 116, 101, 59, 255, 117, 101, 59, 255, 123, 105, 67, 255, 127, 110, 70, 255, 128, 114, 69, 255, 124, 115, 70, 255, 126, 123, 73, 255, 126, 125, 77, 255, 126, 125, 86, 255, 138, 144, 100, 255, 135, 142, 95, 255, 133, 136, 89, 255, 137, 137, 86, 255, 141, 140, 89, 255, 143, 142, 90, 255, 142, 144, 91, 255, 140, 141, 94, 255, 146, 143, 94, 255, 149, 143, 91, 255, 147, 142, 88, 255, 150, 146, 86, 255, 151, 144, 81, 255, 142, 138, 76, 255, 137, 134, 73, 255, 129, 126, 66, 255, 127, 125, 70, 255, 123, 120, 63, 255, 119, 116, 60, 255, 123, 114, 54, 255, 130, 112, 37, 255, 123, 106, 51, 255, 120, 101, 51, 255, 125, 98, 52, 255, 120, 90, 50, 255, 117, 89, 46, 255, 120, 90, 46, 255, 122, 87, 38, 255, 113, 88, 28, 255, 118, 94, 48, 255, 131, 99, 55, 255, 124, 81, 34, 255, 120, 81, 29, 255, 124, 80, 28, 255, 119, 75, 25, 255, 116, 74, 31, 255, 120, 75, 31, 255, 123, 75, 26, 255, 122, 75, 18, 255, 120, 76, 12, 255, 121, 73, 22, 255, 113, 69, 21, 255, 103, 67, 19, 255, 104, 70, 18, 255, 103, 67, 14, 255, 108, 69, 19, 255, 114, 68, 14, 255, 110, 71, 11, 255, 117, 70, 9, 255, 125, 72, 10, 255, 134, 78, 10, 255, 146, 76, 7, 255, 139, 74, 8, 255, 132, 71, 8, 255, 132, 72, 14, 255, 128, 74, 17, 255, 116, 70, 5, 255, 110, 64, 0, 255, 113, 62, 5, 255, 115, 62, 10, 255, 114, 62, 16, 255, 110, 61, 13, 255, 106, 57, 7, 255, 107, 57, 11, 255, 106, 57, 14, 255, 106, 57, 7, 255, 114, 63, 6, 255, 113, 60, 5, 255, 115, 60, 2, 255, 118, 59, 8, 255, 114, 61, 4, 255, 118, 62, 5, 255, 118, 66, 7, 255, 120, 66, 10, 255, 131, 73, 12, 255, 142, 77, 7, 255, 159, 85, 16, 255, 165, 85, 17, 255, 153, 78, 9, 255, 145, 74, 7, 255, 143, 71, 13, 255, 141, 73, 16, 255, 139, 72, 11, 255, 134, 66, 6, 255, 123, 61, 9, 255, 114, 61, 12, 255, 116, 59, 14, 255, 117, 62, 6, 255, 115, 61, 5, 255, 113, 58, 9, 255, 111, 58, 12, 255, 107, 51, 9, 255, 104, 49, 9, 255, 108, 54, 7, 255, 105, 53, 8, 255, 103, 55, 3, 255, 100, 50, 9, 255, 99, 48, 14, 255, 97, 42, 13, 255, 102, 48, 12, 255, 106, 54, 7, 255, 103, 51, 5, 255, 98, 50, 7, 255, 98, 50, 10, 255, 98, 46, 7, 255, 98, 45, 15, 255, 102, 49, 3, 255, 102, 46, 7, 255, 106, 50, 9, 255, 104, 47, 5, 255, 103, 48, 8, 255, 97, 49, 2, 255, 102, 50, 2, 255, 107, 50, 5, 255, 101, 48, 5, 255, 96, 45, 4, 255, 106, 45, 7, 255, 102, 41, 4, 255, 102, 42, 3, 255, 102, 47, 5, 255, 2, 1, 1, 255, 0, 1, 9, 255, 3, 8, 13, 255, 4, 6, 8, 255, 1, 0, 4, 255, 0, 0, 6, 255, 0, 1, 6, 255, 4, 0, 1, 255, 4, 2, 4, 255, 7, 6, 5, 255, 14, 6, 11, 255, 56, 28, 22, 255, 83, 33, 21, 255, 51, 31, 20, 255, 40, 30, 30, 255, 12, 16, 11, 255, 10, 6, 2, 255, 16, 2, 2, 255, 11, 2, 2, 255, 7, 0, 1, 255, 10, 1, 3, 255, 18, 10, 4, 255, 25, 20, 9, 255, 25, 24, 21, 255, 22, 25, 28, 255, 20, 25, 28, 255, 17, 22, 33, 255, 11, 16, 33, 255, 17, 16, 33, 255, 14, 13, 19, 255, 13, 9, 12, 255, 5, 4, 9, 255, 1, 1, 1, 255, 0, 0, 3, 255, 1, 1, 4, 255, 0, 1, 1, 255, 0, 2, 0, 255, 3, 2, 5, 255, 2, 1, 9, 255, 2, 1, 7, 255, 1, 1, 2, 255, 1, 1, 3, 255, 1, 0, 4, 255, 1, 1, 3, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 0, 255, 1, 1, 1, 255, 0, 1, 1, 255, 2, 3, 15, 255, 6, 6, 35, 255, 4, 4, 34, 255, 1, 3, 15, 255, 0, 2, 3, 255, 1, 1, 1, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 0, 3, 255, 2, 2, 2, 255, 2, 1, 0, 255, 1, 1, 5, 255, 3, 0, 7, 255, 4, 0, 7, 255, 3, 0, 9, 255, 1, 0, 8, 255, 1, 0, 6, 255, 2, 1, 6, 255, 0, 0, 0, 255, 0, 0, 7, 255, 21, 28, 76, 255, 101, 110, 171, 255, 140, 137, 171, 255, 105, 105, 108, 255, 63, 65, 64, 255, 29, 28, 25, 255, 11, 11, 12, 255, 47, 33, 45, 255, 92, 87, 112, 255, 109, 99, 137, 255, 100, 96, 167, 255, 40, 86, 202, 255, 61, 65, 92, 255, 37, 32, 20, 255, 5, 9, 0, 255, 2, 1, 3, 255, 12, 5, 11, 255, 17, 9, 6, 255, 16, 10, 4, 255, 25, 21, 16, 255, 30, 30, 13, 255, 31, 29, 12, 255, 33, 26, 10, 255, 25, 21, 8, 255, 27, 18, 7, 255, 30, 22, 8, 255, 19, 17, 10, 255, 19, 18, 7, 255, 27, 16, 12, 255, 33, 19, 12, 255, 31, 19, 8, 255, 19, 17, 4, 255, 31, 21, 9, 255, 53, 36, 16, 255, 71, 50, 22, 255, 71, 42, 15, 255, 54, 29, 5, 255, 36, 23, 10, 255, 40, 22, 11, 255, 51, 30, 4, 255, 44, 26, 15, 255, 47, 27, 13, 255, 58, 34, 15, 255, 69, 38, 12, 255, 68, 39, 9, 255, 65, 39, 6, 255, 67, 38, 9, 255, 71, 41, 7, 255, 78, 45, 9, 255, 80, 43, 9, 255, 75, 37, 9, 255, 76, 40, 13, 255, 77, 41, 12, 255, 87, 44, 13, 255, 79, 46, 8, 255, 80, 45, 8, 255, 81, 47, 6, 255, 80, 48, 8, 255, 84, 47, 15, 255, 79, 47, 7, 255, 80, 48, 8, 255, 92, 51, 12, 255, 95, 54, 9, 255, 95, 60, 6, 255, 105, 67, 7, 255, 115, 74, 12, 255, 141, 88, 11, 255, 138, 82, 9, 255, 133, 79, 4, 255, 161, 102, 7, 255, 184, 120, 9, 255, 201, 137, 7, 255, 221, 162, 4, 255, 236, 183, 3, 255, 248, 182, 4, 255, 207, 128, 8, 255, 134, 68, 18, 255, 115, 62, 7, 255, 109, 64, 8, 255, 95, 50, 13, 255, 92, 52, 12, 255, 88, 52, 8, 255, 87, 49, 13, 255, 84, 45, 10, 255, 82, 43, 9, 255, 80, 47, 5, 255, 78, 42, 9, 255, 82, 40, 8, 255, 83, 43, 15, 255, 84, 46, 14, 255, 85, 44, 10, 255, 84, 44, 9, 255, 84, 44, 11, 255, 74, 42, 10, 255, 74, 43, 22, 255, 83, 47, 4, 255, 90, 50, 13, 255, 85, 48, 14, 255, 86, 49, 18, 255, 86, 52, 15, 255, 79, 45, 27, 255, 79, 50, 14, 255, 77, 48, 17, 255, 77, 51, 13, 255, 77, 45, 18, 255, 73, 43, 29, 255, 73, 45, 28, 255, 77, 46, 26, 255, 70, 46, 25, 255, 76, 54, 20, 255, 84, 56, 19, 255, 85, 61, 27, 255, 78, 54, 28, 255, 81, 56, 30, 255, 75, 59, 25, 255, 77, 57, 21, 255, 79, 58, 25, 255, 76, 56, 35, 255, 80, 59, 32, 255, 86, 62, 27, 255, 78, 62, 34, 255, 76, 62, 29, 255, 85, 71, 29, 255, 80, 67, 38, 255, 79, 65, 40, 255, 80, 67, 33, 255, 80, 71, 44, 255, 75, 69, 39, 255, 80, 72, 45, 255, 81, 71, 41, 255, 81, 72, 46, 255, 88, 77, 49, 255, 80, 75, 40, 255, 85, 72, 43, 255, 102, 75, 61, 255, 101, 79, 59, 255, 110, 79, 49, 255, 105, 76, 48, 255, 100, 79, 52, 255, 105, 78, 44, 255, 109, 80, 45, 255, 107, 80, 49, 255, 112, 81, 61, 255, 117, 85, 52, 255, 114, 89, 47, 255, 108, 87, 44, 255, 109, 87, 45, 255, 104, 85, 48, 255, 106, 85, 52, 255, 111, 89, 45, 255, 111, 90, 44, 255, 111, 87, 53, 255, 114, 90, 58, 255, 112, 92, 56, 255, 114, 96, 51, 255, 117, 93, 54, 255, 114, 95, 60, 255, 114, 99, 60, 255, 120, 106, 57, 255, 117, 103, 63, 255, 122, 109, 68, 255, 126, 113, 67, 255, 126, 112, 76, 255, 130, 119, 79, 255, 130, 124, 75, 255, 129, 127, 82, 255, 136, 139, 99, 255, 137, 144, 101, 255, 131, 134, 87, 255, 139, 138, 87, 255, 141, 139, 88, 255, 141, 141, 86, 255, 143, 143, 88, 255, 142, 143, 92, 255, 144, 141, 87, 255, 149, 140, 84, 255, 147, 140, 82, 255, 148, 142, 81, 255, 152, 143, 77, 255, 145, 138, 76, 255, 135, 129, 69, 255, 131, 126, 65, 255, 129, 124, 71, 255, 121, 119, 65, 255, 120, 115, 63, 255, 124, 112, 64, 255, 128, 107, 57, 255, 124, 104, 53, 255, 117, 99, 53, 255, 123, 97, 50, 255, 122, 91, 39, 255, 116, 89, 39, 255, 121, 93, 35, 255, 124, 89, 38, 255, 116, 88, 31, 255, 112, 88, 41, 255, 129, 101, 53, 255, 128, 85, 37, 255, 121, 80, 23, 255, 125, 79, 24, 255, 121, 76, 26, 255, 117, 76, 19, 255, 119, 76, 27, 255, 120, 71, 32, 255, 119, 71, 20, 255, 120, 74, 25, 255, 123, 71, 22, 255, 117, 71, 18, 255, 109, 70, 15, 255, 110, 74, 20, 255, 112, 71, 20, 255, 115, 69, 17, 255, 118, 67, 14, 255, 113, 67, 16, 255, 118, 69, 10, 255, 125, 71, 11, 255, 133, 74, 15, 255, 142, 75, 11, 255, 141, 77, 13, 255, 140, 77, 9, 255, 132, 73, 10, 255, 124, 69, 12, 255, 117, 64, 12, 255, 116, 64, 13, 255, 114, 62, 13, 255, 114, 64, 8, 255, 113, 62, 8, 255, 112, 61, 3, 255, 110, 60, 2, 255, 106, 58, 11, 255, 106, 55, 19, 255, 110, 58, 11, 255, 115, 59, 2, 255, 112, 62, 8, 255, 109, 61, 6, 255, 118, 62, 16, 255, 120, 65, 10, 255, 124, 63, 12, 255, 124, 65, 8, 255, 128, 69, 11, 255, 133, 74, 8, 255, 143, 77, 8, 255, 154, 79, 8, 255, 162, 82, 10, 255, 155, 80, 5, 255, 149, 79, 10, 255, 143, 75, 10, 255, 142, 74, 11, 255, 138, 70, 9, 255, 128, 65, 7, 255, 124, 64, 7, 255, 119, 64, 5, 255, 121, 64, 9, 255, 121, 66, 2, 255, 117, 63, 2, 255, 113, 62, 4, 255, 111, 60, 10, 255, 109, 55, 14, 255, 107, 55, 7, 255, 107, 51, 12, 255, 110, 54, 11, 255, 109, 59, 3, 255, 102, 52, 6, 255, 101, 48, 5, 255, 103, 46, 5, 255, 104, 50, 7, 255, 103, 53, 6, 255, 105, 54, 5, 255, 102, 53, 6, 255, 103, 49, 8, 255, 102, 47, 9, 255, 101, 47, 10, 255, 101, 49, 3, 255, 102, 45, 10, 255, 106, 48, 9, 255, 106, 49, 2, 255, 103, 49, 4, 255, 101, 50, 3, 255, 102, 49, 7, 255, 104, 45, 5, 255, 101, 47, 3, 255, 100, 45, 0, 255, 109, 49, 7, 255, 97, 44, 11, 255, 94, 39, 11, 255, 99, 43, 9, 255, 4, 0, 6, 255, 2, 4, 15, 255, 9, 13, 30, 255, 6, 8, 17, 255, 2, 2, 4, 255, 1, 2, 2, 255, 0, 1, 2, 255, 0, 1, 1, 255, 0, 0, 4, 255, 0, 0, 4, 255, 47, 0, 5, 255, 162, 36, 11, 255, 163, 56, 25, 255, 129, 46, 27, 255, 55, 15, 13, 255, 0, 3, 0, 255, 8, 0, 1, 255, 19, 1, 3, 255, 13, 4, 2, 255, 10, 1, 1, 255, 11, 2, 3, 255, 10, 2, 0, 255, 21, 8, 2, 255, 28, 12, 10, 255, 31, 21, 20, 255, 29, 25, 24, 255, 24, 22, 24, 255, 19, 19, 19, 255, 17, 18, 17, 255, 12, 10, 10, 255, 8, 8, 7, 255, 1, 2, 1, 255, 1, 2, 3, 255, 0, 0, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 2, 255, 1, 1, 3, 255, 2, 1, 6, 255, 2, 1, 6, 255, 1, 1, 3, 255, 1, 1, 3, 255, 1, 1, 3, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 4, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 1, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 2, 1, 255, 2, 5, 15, 255, 6, 6, 35, 255, 5, 4, 32, 255, 1, 3, 9, 255, 0, 3, 0, 255, 0, 1, 1, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 0, 0, 255, 1, 1, 1, 255, 1, 1, 5, 255, 0, 0, 10, 255, 2, 1, 7, 255, 0, 2, 5, 255, 0, 2, 6, 255, 2, 2, 2, 255, 1, 0, 1, 255, 0, 0, 3, 255, 22, 22, 60, 255, 74, 80, 154, 255, 131, 140, 173, 255, 118, 116, 112, 255, 66, 66, 60, 255, 34, 41, 26, 255, 15, 12, 15, 255, 30, 28, 42, 255, 89, 79, 104, 255, 117, 101, 140, 255, 103, 92, 151, 255, 79, 84, 146, 255, 74, 63, 93, 255, 50, 35, 24, 255, 10, 6, 1, 255, 3, 0, 1, 255, 20, 7, 11, 255, 19, 10, 10, 255, 21, 17, 13, 255, 30, 33, 13, 255, 36, 38, 17, 255, 38, 35, 20, 255, 36, 35, 17, 255, 31, 33, 15, 255, 30, 22, 15, 255, 26, 21, 7, 255, 29, 24, 7, 255, 35, 20, 11, 255, 29, 23, 11, 255, 25, 19, 18, 255, 24, 19, 10, 255, 28, 19, 8, 255, 43, 26, 10, 255, 67, 37, 28, 255, 69, 45, 20, 255, 58, 34, 12, 255, 39, 22, 11, 255, 23, 18, 18, 255, 30, 24, 18, 255, 43, 23, 13, 255, 49, 24, 9, 255, 50, 29, 6, 255, 51, 26, 15, 255, 50, 27, 9, 255, 56, 36, 5, 255, 59, 34, 10, 255, 63, 34, 16, 255, 70, 36, 9, 255, 71, 37, 9, 255, 77, 44, 14, 255, 80, 43, 9, 255, 82, 41, 3, 255, 79, 40, 6, 255, 68, 40, 13, 255, 72, 43, 15, 255, 85, 49, 11, 255, 78, 50, 2, 255, 79, 46, 3, 255, 85, 52, 10, 255, 84, 49, 5, 255, 83, 48, 12, 255, 75, 47, 14, 255, 83, 49, 8, 255, 91, 48, 10, 255, 97, 56, 8, 255, 98, 59, 10, 255, 108, 64, 9, 255, 122, 79, 15, 255, 141, 88, 4, 255, 147, 89, 11, 255, 153, 100, 8, 255, 171, 108, 9, 255, 192, 127, 4, 255, 200, 143, 3, 255, 215, 150, 6, 255, 215, 141, 3, 255, 172, 101, 8, 255, 112, 52, 12, 255, 87, 43, 12, 255, 90, 47, 10, 255, 87, 56, 5, 255, 92, 54, 9, 255, 93, 49, 16, 255, 91, 50, 6, 255, 93, 49, 5, 255, 96, 46, 8, 255, 98, 49, 9, 255, 88, 52, 10, 255, 85, 50, 11, 255, 89, 44, 12, 255, 80, 45, 17, 255, 78, 50, 13, 255, 80, 43, 8, 255, 79, 49, 3, 255, 79, 46, 8, 255, 80, 42, 11, 255, 79, 40, 23, 255, 79, 44, 11, 255, 84, 49, 7, 255, 92, 51, 15, 255, 92, 49, 15, 255, 85, 53, 6, 255, 79, 47, 14, 255, 85, 47, 8, 255, 79, 45, 17, 255, 75, 53, 15, 255, 75, 46, 17, 255, 76, 43, 21, 255, 78, 47, 21, 255, 77, 48, 27, 255, 71, 49, 25, 255, 77, 54, 18, 255, 83, 56, 21, 255, 77, 55, 23, 255, 80, 58, 29, 255, 87, 58, 20, 255, 84, 59, 24, 255, 80, 60, 29, 255, 78, 61, 27, 255, 74, 59, 25, 255, 80, 59, 30, 255, 75, 61, 30, 255, 76, 61, 32, 255, 75, 62, 36, 255, 78, 66, 40, 255, 83, 67, 40, 255, 78, 63, 27, 255, 85, 70, 40, 255, 81, 69, 36, 255, 83, 71, 46, 255, 87, 74, 39, 255, 86, 75, 38, 255, 85, 75, 46, 255, 86, 72, 38, 255, 81, 72, 45, 255, 81, 75, 48, 255, 98, 79, 40, 255, 102, 74, 54, 255, 107, 76, 49, 255, 106, 75, 43, 255, 101, 77, 47, 255, 105, 75, 46, 255, 107, 77, 48, 255, 109, 80, 49, 255, 112, 80, 53, 255, 120, 87, 45, 255, 117, 87, 45, 255, 111, 83, 49, 255, 112, 83, 48, 255, 108, 84, 42, 255, 106, 86, 45, 255, 108, 90, 43, 255, 111, 90, 42, 255, 110, 88, 44, 255, 111, 89, 55, 255, 108, 87, 57, 255, 111, 92, 51, 255, 118, 93, 56, 255, 116, 95, 55, 255, 114, 96, 55, 255, 118, 100, 56, 255, 120, 103, 62, 255, 119, 108, 62, 255, 122, 109, 62, 255, 130, 113, 71, 255, 131, 115, 72, 255, 132, 123, 74, 255, 127, 126, 78, 255, 133, 132, 92, 255, 147, 146, 105, 255, 138, 137, 92, 255, 138, 135, 87, 255, 137, 136, 79, 255, 137, 139, 81, 255, 141, 140, 88, 255, 140, 138, 85, 255, 145, 140, 85, 255, 148, 139, 80, 255, 147, 138, 76, 255, 149, 141, 76, 255, 153, 142, 73, 255, 146, 136, 72, 255, 138, 135, 65, 255, 138, 128, 64, 255, 131, 120, 55, 255, 120, 121, 59, 255, 115, 113, 65, 255, 123, 109, 54, 255, 129, 109, 54, 255, 124, 104, 51, 255, 119, 100, 58, 255, 120, 99, 43, 255, 123, 96, 45, 255, 121, 93, 36, 255, 122, 91, 42, 255, 124, 87, 41, 255, 117, 93, 28, 255, 112, 89, 27, 255, 123, 100, 40, 255, 122, 88, 35, 255, 120, 79, 26, 255, 123, 79, 26, 255, 123, 76, 32, 255, 120, 77, 26, 255, 122, 79, 25, 255, 122, 75, 29, 255, 119, 71, 22, 255, 120, 74, 20, 255, 120, 73, 25, 255, 114, 72, 22, 255, 105, 68, 13, 255, 107, 73, 13, 255, 109, 71, 12, 255, 113, 68, 18, 255, 118, 68, 11, 255, 117, 67, 5, 255, 118, 70, 6, 255, 124, 73, 9, 255, 131, 73, 11, 255, 140, 76, 9, 255, 143, 77, 11, 255, 144, 75, 13, 255, 137, 75, 12, 255, 130, 71, 11, 255, 121, 66, 9, 255, 117, 65, 12, 255, 115, 62, 12, 255, 112, 61, 7, 255, 116, 64, 11, 255, 111, 59, 2, 255, 112, 63, 2, 255, 113, 63, 9, 255, 107, 56, 8, 255, 111, 60, 8, 255, 116, 62, 10, 255, 115, 61, 15, 255, 114, 60, 5, 255, 120, 62, 4, 255, 123, 69, 3, 255, 122, 64, 5, 255, 126, 64, 13, 255, 130, 71, 11, 255, 130, 69, 8, 255, 143, 75, 15, 255, 155, 80, 7, 255, 162, 83, 12, 255, 162, 83, 12, 255, 157, 81, 11, 255, 147, 75, 7, 255, 144, 74, 8, 255, 140, 72, 9, 255, 132, 66, 10, 255, 126, 62, 9, 255, 125, 67, 6, 255, 123, 63, 8, 255, 122, 65, 3, 255, 116, 60, 8, 255, 111, 58, 7, 255, 113, 62, 5, 255, 104, 56, 7, 255, 105, 61, 2, 255, 99, 54, 3, 255, 103, 57, 4, 255, 112, 60, 1, 255, 104, 51, 12, 255, 102, 54, 6, 255, 109, 52, 7, 255, 107, 49, 8, 255, 106, 53, 9, 255, 104, 52, 5, 255, 103, 54, 4, 255, 108, 52, 3, 255, 107, 51, 7, 255, 100, 44, 7, 255, 103, 51, 6, 255, 108, 51, 13, 255, 105, 47, 4, 255, 106, 47, 3, 255, 105, 48, 11, 255, 101, 49, 7, 255, 96, 45, 0, 255, 106, 47, 8, 255, 109, 50, 13, 255, 103, 49, 7, 255, 106, 53, 4, 255, 103, 51, 1, 255, 99, 42, 5, 255, 100, 43, 9, 255, 4, 8, 25, 255, 0, 1, 4, 255, 4, 7, 18, 255, 10, 17, 36, 255, 2, 8, 13, 255, 2, 1, 2, 255, 2, 1, 2, 255, 1, 2, 4, 255, 0, 1, 0, 255, 0, 0, 0, 255, 102, 11, 15, 255, 197, 51, 15, 255, 178, 58, 16, 255, 153, 33, 5, 255, 87, 5, 3, 255, 22, 4, 3, 255, 13, 1, 1, 255, 19, 2, 2, 255, 21, 3, 2, 255, 10, 0, 0, 255, 9, 0, 1, 255, 12, 0, 1, 255, 21, 0, 4, 255, 24, 1, 7, 255, 23, 9, 13, 255, 23, 20, 16, 255, 27, 25, 17, 255, 26, 27, 26, 255, 18, 22, 22, 255, 21, 18, 15, 255, 15, 12, 10, 255, 8, 4, 5, 255, 0, 1, 3, 255, 0, 0, 0, 255, 1, 1, 0, 255, 1, 0, 0, 255, 2, 0, 2, 255, 0, 2, 1, 255, 1, 1, 2, 255, 1, 1, 2, 255, 1, 1, 2, 255, 0, 0, 2, 255, 1, 1, 3, 255, 1, 1, 4, 255, 1, 1, 3, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 1, 1, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 4, 255, 1, 1, 9, 255, 1, 4, 19, 255, 3, 5, 22, 255, 2, 6, 10, 255, 0, 2, 0, 255, 0, 0, 5, 255, 1, 0, 4, 255, 0, 1, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 3, 255, 0, 1, 7, 255, 1, 2, 4, 255, 3, 1, 9, 255, 2, 0, 5, 255, 2, 0, 3, 255, 2, 2, 0, 255, 0, 0, 3, 255, 16, 21, 46, 255, 68, 73, 125, 255, 127, 124, 166, 255, 123, 119, 115, 255, 78, 75, 55, 255, 43, 34, 34, 255, 15, 13, 15, 255, 36, 25, 41, 255, 87, 74, 92, 255, 119, 106, 124, 255, 104, 90, 145, 255, 76, 67, 169, 255, 64, 69, 162, 255, 48, 44, 43, 255, 14, 6, 0, 255, 6, 2, 6, 255, 13, 6, 11, 255, 17, 15, 12, 255, 28, 27, 17, 255, 38, 40, 10, 255, 45, 49, 6, 255, 38, 42, 9, 255, 40, 41, 20, 255, 31, 34, 14, 255, 29, 33, 13, 255, 26, 25, 16, 255, 30, 21, 14, 255, 34, 25, 12, 255, 39, 26, 7, 255, 38, 22, 9, 255, 26, 12, 18, 255, 25, 16, 12, 255, 36, 28, 15, 255, 60, 38, 18, 255, 73, 43, 10, 255, 56, 36, 6, 255, 29, 19, 16, 255, 26, 15, 8, 255, 40, 25, 8, 255, 44, 25, 14, 255, 45, 22, 12, 255, 46, 23, 13, 255, 46, 29, 10, 255, 43, 28, 12, 255, 42, 30, 7, 255, 53, 34, 9, 255, 62, 36, 9, 255, 58, 32, 11, 255, 67, 32, 10, 255, 68, 34, 8, 255, 67, 35, 11, 255, 76, 41, 10, 255, 78, 40, 11, 255, 82, 44, 6, 255, 77, 39, 10, 255, 72, 38, 5, 255, 71, 40, 7, 255, 83, 49, 11, 255, 83, 52, 10, 255, 83, 47, 8, 255, 82, 49, 5, 255, 85, 50, 7, 255, 80, 48, 14, 255, 82, 47, 16, 255, 87, 47, 10, 255, 89, 49, 17, 255, 90, 53, 9, 255, 100, 58, 16, 255, 111, 63, 7, 255, 120, 74, 7, 255, 134, 77, 7, 255, 138, 81, 15, 255, 148, 98, 5, 255, 172, 107, 2, 255, 191, 117, 7, 255, 182, 118, 7, 255, 155, 97, 6, 255, 123, 70, 11, 255, 93, 54, 4, 255, 84, 51, 4, 255, 97, 49, 11, 255, 94, 51, 7, 255, 88, 53, 9, 255, 88, 46, 18, 255, 92, 51, 10, 255, 92, 56, 11, 255, 103, 66, 13, 255, 114, 67, 10, 255, 111, 63, 10, 255, 97, 56, 10, 255, 89, 48, 7, 255, 89, 46, 9, 255, 78, 42, 6, 255, 80, 48, 7, 255, 82, 46, 17, 255, 80, 44, 15, 255, 80, 46, 11, 255, 84, 47, 7, 255, 80, 44, 9, 255, 80, 45, 10, 255, 82, 50, 15, 255, 89, 51, 13, 255, 90, 52, 8, 255, 86, 52, 10, 255, 84, 51, 9, 255, 84, 50, 18, 255, 80, 50, 19, 255, 74, 46, 23, 255, 76, 48, 20, 255, 79, 49, 24, 255, 78, 46, 22, 255, 79, 50, 22, 255, 74, 49, 27, 255, 72, 51, 31, 255, 80, 54, 22, 255, 79, 55, 29, 255, 88, 58, 26, 255, 87, 62, 18, 255, 83, 59, 21, 255, 81, 61, 27, 255, 75, 63, 27, 255, 74, 58, 32, 255, 82, 60, 33, 255, 73, 63, 29, 255, 78, 59, 33, 255, 77, 64, 34, 255, 77, 66, 34, 255, 82, 68, 35, 255, 84, 69, 33, 255, 82, 67, 42, 255, 82, 68, 46, 255, 84, 70, 42, 255, 85, 71, 40, 255, 82, 72, 37, 255, 80, 72, 30, 255, 84, 69, 45, 255, 82, 74, 42, 255, 74, 72, 46, 255, 87, 73, 45, 255, 101, 74, 53, 255, 107, 75, 55, 255, 109, 79, 30, 255, 102, 78, 35, 255, 106, 76, 40, 255, 109, 81, 48, 255, 112, 83, 41, 255, 112, 83, 35, 255, 121, 87, 36, 255, 120, 87, 45, 255, 114, 79, 49, 255, 117, 82, 47, 255, 111, 83, 40, 255, 106, 86, 49, 255, 107, 83, 59, 255, 110, 84, 52, 255, 110, 87, 44, 255, 109, 89, 51, 255, 109, 90, 51, 255, 115, 94, 55, 255, 110, 93, 50, 255, 111, 95, 48, 255, 121, 101, 59, 255, 128, 104, 59, 255, 129, 104, 60, 255, 129, 108, 60, 255, 131, 111, 63, 255, 127, 110, 64, 255, 126, 112, 62, 255, 131, 122, 67, 255, 128, 124, 67, 255, 127, 124, 75, 255, 141, 141, 92, 255, 139, 138, 88, 255, 134, 132, 81, 255, 137, 136, 75, 255, 138, 137, 80, 255, 140, 136, 88, 255, 142, 135, 86, 255, 144, 138, 82, 255, 150, 140, 79, 255, 148, 139, 77, 255, 149, 140, 74, 255, 154, 141, 70, 255, 148, 136, 71, 255, 138, 131, 66, 255, 139, 126, 68, 255, 136, 121, 62, 255, 122, 118, 58, 255, 115, 117, 59, 255, 119, 110, 51, 255, 127, 105, 56, 255, 125, 103, 56, 255, 121, 100, 54, 255, 118, 97, 40, 255, 124, 98, 42, 255, 124, 93, 40, 255, 123, 90, 38, 255, 124, 87, 38, 255, 119, 91, 37, 255, 115, 86, 43, 255, 118, 95, 46, 255, 120, 91, 43, 255, 120, 78, 30, 255, 123, 78, 30, 255, 126, 79, 28, 255, 119, 75, 23, 255, 122, 76, 27, 255, 121, 75, 14, 255, 122, 75, 20, 255, 120, 73, 24, 255, 124, 77, 14, 255, 119, 74, 19, 255, 112, 71, 22, 255, 111, 72, 19, 255, 110, 72, 13, 255, 108, 67, 8, 255, 117, 70, 7, 255, 120, 70, 13, 255, 117, 68, 15, 255, 123, 71, 15, 255, 134, 77, 14, 255, 140, 78, 10, 255, 146, 78, 18, 255, 150, 80, 16, 255, 145, 79, 12, 255, 136, 76, 8, 255, 127, 72, 5, 255, 119, 68, 6, 255, 113, 64, 5, 255, 116, 67, 5, 255, 122, 69, 11, 255, 115, 61, 9, 255, 110, 56, 9, 255, 111, 57, 14, 255, 110, 57, 13, 255, 108, 57, 9, 255, 113, 61, 4, 255, 115, 59, 7, 255, 118, 62, 8, 255, 123, 64, 10, 255, 123, 66, 11, 255, 126, 64, 11, 255, 126, 64, 5, 255, 129, 69, 11, 255, 132, 69, 8, 255, 145, 77, 8, 255, 158, 84, 15, 255, 162, 87, 7, 255, 166, 86, 7, 255, 162, 82, 6, 255, 155, 79, 3, 255, 153, 79, 3, 255, 148, 77, 2, 255, 139, 71, 2, 255, 133, 69, 6, 255, 127, 69, 11, 255, 123, 64, 6, 255, 123, 65, 3, 255, 122, 62, 14, 255, 118, 59, 14, 255, 115, 60, 9, 255, 110, 56, 12, 255, 111, 57, 16, 255, 102, 57, 7, 255, 103, 55, 14, 255, 114, 55, 9, 255, 105, 50, 8, 255, 103, 56, 8, 255, 111, 57, 3, 255, 105, 53, 4, 255, 105, 53, 5, 255, 110, 53, 6, 255, 106, 55, 7, 255, 105, 51, 7, 255, 105, 50, 9, 255, 101, 50, 9, 255, 100, 53, 3, 255, 101, 52, 6, 255, 102, 51, 5, 255, 103, 49, 9, 255, 105, 49, 13, 255, 104, 52, 9, 255, 100, 48, 5, 255, 105, 46, 8, 255, 105, 42, 6, 255, 104, 48, 6, 255, 103, 53, 5, 255, 108, 53, 8, 255, 107, 49, 1, 255, 105, 48, 4, 255, 7, 9, 29, 255, 5, 8, 23, 255, 2, 6, 18, 255, 5, 8, 17, 255, 1, 2, 3, 255, 2, 1, 1, 255, 2, 1, 0, 255, 1, 0, 9, 255, 0, 0, 0, 255, 19, 0, 5, 255, 139, 31, 20, 255, 181, 56, 11, 255, 175, 44, 7, 255, 166, 37, 1, 255, 130, 18, 6, 255, 73, 4, 1, 255, 41, 4, 3, 255, 12, 3, 4, 255, 17, 2, 6, 255, 16, 0, 6, 255, 10, 2, 2, 255, 9, 2, 2, 255, 13, 0, 0, 255, 22, 2, 0, 255, 22, 4, 0, 255, 24, 9, 3, 255, 31, 15, 12, 255, 28, 21, 21, 255, 23, 23, 27, 255, 31, 24, 32, 255, 18, 19, 20, 255, 17, 16, 13, 255, 6, 5, 5, 255, 2, 3, 5, 255, 1, 2, 4, 255, 1, 0, 0, 255, 1, 0, 0, 255, 0, 0, 0, 255, 1, 1, 0, 255, 1, 1, 0, 255, 1, 1, 2, 255, 1, 1, 3, 255, 1, 1, 3, 255, 1, 0, 5, 255, 2, 1, 6, 255, 1, 1, 2, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 1, 2, 7, 255, 2, 2, 13, 255, 3, 2, 17, 255, 2, 4, 15, 255, 0, 1, 4, 255, 0, 1, 0, 255, 1, 2, 1, 255, 0, 0, 4, 255, 0, 0, 2, 255, 1, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 1, 255, 1, 1, 2, 255, 2, 1, 8, 255, 2, 0, 6, 255, 2, 0, 6, 255, 2, 0, 0, 255, 2, 0, 0, 255, 0, 0, 0, 255, 4, 6, 32, 255, 62, 66, 118, 255, 116, 113, 152, 255, 121, 111, 133, 255, 89, 81, 65, 255, 46, 39, 19, 255, 20, 14, 12, 255, 30, 22, 29, 255, 70, 64, 97, 255, 92, 101, 121, 255, 103, 88, 122, 255, 99, 79, 136, 255, 107, 85, 118, 255, 98, 74, 65, 255, 30, 24, 27, 255, 15, 0, 11, 255, 12, 12, 6, 255, 23, 17, 13, 255, 35, 31, 33, 255, 47, 46, 34, 255, 37, 54, 21, 255, 35, 54, 20, 255, 43, 47, 15, 255, 53, 48, 17, 255, 32, 40, 7, 255, 34, 42, 11, 255, 31, 32, 12, 255, 37, 28, 11, 255, 34, 32, 14, 255, 26, 27, 10, 255, 25, 18, 7, 255, 23, 21, 9, 255, 38, 35, 6, 255, 63, 43, 12, 255, 60, 34, 23, 255, 44, 27, 16, 255, 33, 21, 14, 255, 27, 21, 7, 255, 25, 22, 6, 255, 35, 23, 13, 255, 36, 25, 5, 255, 38, 25, 11, 255, 42, 26, 13, 255, 40, 27, 10, 255, 40, 30, 12, 255, 48, 29, 12, 255, 51, 29, 8, 255, 51, 35, 16, 255, 51, 34, 13, 255, 54, 28, 12, 255, 61, 28, 26, 255, 70, 38, 13, 255, 80, 41, 11, 255, 84, 43, 5, 255, 81, 40, 10, 255, 76, 43, 11, 255, 67, 38, 13, 255, 75, 43, 14, 255, 76, 43, 8, 255, 81, 45, 11, 255, 84, 48, 17, 255, 87, 48, 15, 255, 75, 44, 1, 255, 84, 49, 10, 255, 80, 48, 17, 255, 88, 46, 7, 255, 90, 48, 8, 255, 88, 52, 14, 255, 93, 59, 9, 255, 106, 63, 12, 255, 117, 69, 6, 255, 119, 72, 9, 255, 131, 77, 10, 255, 135, 78, 7, 255, 141, 86, 6, 255, 150, 93, 2, 255, 140, 81, 9, 255, 114, 62, 8, 255, 91, 51, 11, 255, 79, 47, 17, 255, 84, 50, 11, 255, 86, 49, 8, 255, 86, 51, 10, 255, 89, 51, 10, 255, 97, 57, 10, 255, 110, 64, 9, 255, 108, 58, 6, 255, 115, 69, 7, 255, 122, 77, 8, 255, 120, 68, 6, 255, 109, 58, 1, 255, 96, 54, 4, 255, 92, 53, 3, 255, 93, 46, 9, 255, 84, 44, 11, 255, 80, 47, 11, 255, 87, 43, 14, 255, 92, 45, 14, 255, 89, 49, 1, 255, 85, 50, 2, 255, 80, 42, 7, 255, 84, 43, 14, 255, 87, 51, 15, 255, 85, 52, 10, 255, 88, 56, 14, 255, 88, 49, 16, 255, 86, 50, 12, 255, 78, 51, 23, 255, 78, 52, 23, 255, 78, 43, 21, 255, 76, 50, 20, 255, 73, 48, 29, 255, 74, 45, 22, 255, 82, 51, 15, 255, 77, 48, 22, 255, 72, 54, 19, 255, 83, 55, 20, 255, 80, 54, 24, 255, 83, 60, 24, 255, 94, 68, 13, 255, 91, 63, 22, 255, 75, 57, 39, 255, 74, 62, 28, 255, 80, 63, 31, 255, 86, 66, 33, 255, 79, 65, 29, 255, 84, 60, 43, 255, 84, 65, 34, 255, 80, 65, 27, 255, 81, 67, 28, 255, 81, 66, 38, 255, 83, 69, 46, 255, 76, 65, 44, 255, 82, 69, 47, 255, 82, 67, 40, 255, 84, 71, 37, 255, 83, 70, 27, 255, 85, 72, 33, 255, 84, 75, 35, 255, 77, 74, 37, 255, 79, 70, 40, 255, 96, 72, 55, 255, 108, 77, 50, 255, 109, 75, 37, 255, 104, 76, 41, 255, 105, 76, 40, 255, 106, 78, 39, 255, 112, 81, 35, 255, 112, 80, 40, 255, 120, 84, 45, 255, 122, 86, 45, 255, 115, 83, 39, 255, 116, 83, 43, 255, 109, 80, 45, 255, 103, 80, 49, 255, 108, 85, 43, 255, 112, 86, 41, 255, 110, 84, 46, 255, 109, 88, 47, 255, 110, 89, 50, 255, 114, 91, 54, 255, 113, 93, 47, 255, 116, 96, 49, 255, 118, 97, 56, 255, 123, 101, 53, 255, 126, 103, 52, 255, 127, 105, 54, 255, 130, 109, 51, 255, 128, 113, 61, 255, 127, 116, 70, 255, 131, 119, 68, 255, 133, 124, 65, 255, 128, 124, 81, 255, 131, 133, 94, 255, 142, 142, 93, 255, 136, 133, 84, 255, 138, 134, 77, 255, 138, 135, 76, 255, 141, 135, 77, 255, 144, 135, 77, 255, 145, 136, 79, 255, 148, 136, 76, 255, 150, 139, 77, 255, 148, 139, 72, 255, 150, 135, 66, 255, 148, 134, 71, 255, 142, 130, 64, 255, 136, 123, 57, 255, 137, 122, 55, 255, 129, 119, 45, 255, 118, 118, 57, 255, 114, 107, 60, 255, 127, 108, 51, 255, 127, 105, 55, 255, 123, 100, 47, 255, 118, 97, 36, 255, 123, 96, 41, 255, 126, 91, 45, 255, 122, 88, 39, 255, 126, 91, 23, 255, 121, 90, 25, 255, 115, 85, 40, 255, 116, 92, 39, 255, 123, 97, 45, 255, 122, 81, 31, 255, 122, 79, 26, 255, 126, 78, 28, 255, 124, 79, 22, 255, 127, 81, 23, 255, 125, 76, 17, 255, 122, 73, 22, 255, 119, 74, 19, 255, 127, 73, 23, 255, 123, 73, 14, 255, 115, 69, 6, 255, 113, 69, 15, 255, 110, 66, 18, 255, 114, 70, 15, 255, 113, 71, 9, 255, 116, 70, 14, 255, 116, 68, 11, 255, 123, 72, 13, 255, 132, 75, 14, 255, 136, 75, 6, 255, 147, 80, 13, 255, 148, 80, 11, 255, 144, 79, 6, 255, 137, 76, 4, 255, 128, 71, 8, 255, 121, 67, 12, 255, 115, 63, 12, 255, 115, 64, 11, 255, 117, 63, 7, 255, 120, 64, 9, 255, 115, 61, 10, 255, 111, 58, 5, 255, 113, 59, 8, 255, 111, 58, 9, 255, 118, 63, 7, 255, 120, 65, 6, 255, 117, 64, 4, 255, 123, 66, 9, 255, 121, 65, 6, 255, 129, 65, 4, 255, 130, 67, 12, 255, 128, 68, 6, 255, 130, 68, 11, 255, 140, 72, 13, 255, 156, 84, 9, 255, 164, 88, 10, 255, 165, 86, 13, 255, 162, 83, 13, 255, 157, 83, 12, 255, 151, 79, 6, 255, 147, 79, 5, 255, 144, 76, 9, 255, 135, 72, 10, 255, 125, 64, 11, 255, 125, 65, 6, 255, 126, 69, 0, 255, 127, 68, 4, 255, 124, 63, 7, 255, 120, 61, 2, 255, 126, 61, 2, 255, 114, 58, 6, 255, 111, 59, 5, 255, 113, 52, 11, 255, 112, 55, 7, 255, 110, 57, 3, 255, 111, 54, 10, 255, 109, 53, 13, 255, 100, 53, 9, 255, 100, 51, 5, 255, 114, 53, 8, 255, 110, 55, 11, 255, 101, 51, 9, 255, 106, 51, 9, 255, 108, 56, 10, 255, 104, 53, 7, 255, 104, 50, 9, 255, 106, 49, 10, 255, 107, 50, 7, 255, 105, 52, 5, 255, 105, 50, 5, 255, 106, 49, 10, 255, 108, 48, 11, 255, 107, 45, 7, 255, 109, 51, 7, 255, 101, 48, 3, 255, 116, 52, 8, 255, 110, 51, 0, 255, 104, 41, 4, 255, 16, 21, 40, 255, 11, 15, 36, 255, 5, 8, 18, 255, 2, 4, 4, 255, 1, 0, 7, 255, 4, 1, 10, 255, 0, 3, 1, 255, 2, 1, 2, 255, 0, 1, 4, 255, 43, 0, 11, 255, 161, 32, 14, 255, 163, 43, 5, 255, 157, 31, 7, 255, 158, 32, 5, 255, 143, 24, 3, 255, 134, 17, 6, 255, 83, 9, 4, 255, 13, 1, 1, 255, 5, 1, 4, 255, 13, 0, 5, 255, 10, 1, 0, 255, 6, 1, 1, 255, 9, 1, 2, 255, 20, 3, 2, 255, 31, 1, 3, 255, 27, 1, 4, 255, 23, 5, 1, 255, 20, 11, 9, 255, 14, 15, 12, 255, 24, 19, 15, 255, 17, 21, 14, 255, 21, 19, 13, 255, 12, 7, 4, 255, 6, 7, 11, 255, 2, 5, 14, 255, 0, 0, 1, 255, 1, 0, 0, 255, 0, 0, 2, 255, 1, 1, 2, 255, 1, 1, 1, 255, 1, 1, 3, 255, 1, 1, 2, 255, 1, 1, 1, 255, 1, 1, 2, 255, 2, 2, 4, 255, 1, 1, 3, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 1, 3, 255, 1, 2, 7, 255, 2, 3, 9, 255, 3, 4, 10, 255, 1, 2, 9, 255, 0, 0, 5, 255, 0, 1, 0, 255, 1, 1, 0, 255, 0, 0, 1, 255, 0, 0, 0, 255, 1, 1, 2, 255, 1, 0, 3, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 2, 255, 0, 0, 2, 255, 1, 0, 4, 255, 1, 0, 5, 255, 2, 0, 2, 255, 3, 0, 5, 255, 2, 0, 3, 255, 0, 0, 0, 255, 1, 3, 23, 255, 43, 47, 113, 255, 101, 108, 154, 255, 111, 110, 120, 255, 84, 81, 72, 255, 53, 49, 34, 255, 13, 13, 6, 255, 17, 14, 31, 255, 67, 58, 86, 255, 112, 97, 125, 255, 115, 97, 121, 255, 97, 90, 136, 255, 86, 79, 112, 255, 83, 70, 59, 255, 155, 88, 15, 255, 111, 49, 0, 255, 45, 18, 4, 255, 25, 23, 13, 255, 38, 33, 20, 255, 43, 44, 21, 255, 41, 53, 26, 255, 45, 51, 20, 255, 48, 55, 29, 255, 42, 52, 31, 255, 42, 51, 22, 255, 42, 47, 18, 255, 36, 43, 12, 255, 35, 37, 16, 255, 33, 32, 14, 255, 29, 23, 8, 255, 23, 16, 7, 255, 28, 18, 11, 255, 52, 32, 18, 255, 67, 43, 17, 255, 61, 37, 10, 255, 42, 25, 8, 255, 30, 19, 12, 255, 33, 18, 6, 255, 36, 21, 5, 255, 38, 22, 11, 255, 29, 20, 9, 255, 24, 21, 15, 255, 36, 25, 7, 255, 44, 27, 9, 255, 43, 27, 7, 255, 47, 29, 8, 255, 52, 30, 19, 255, 51, 30, 12, 255, 55, 30, 13, 255, 56, 30, 7, 255, 60, 35, 10, 255, 60, 33, 4, 255, 63, 34, 8, 255, 72, 38, 2, 255, 73, 41, 9, 255, 78, 43, 10, 255, 82, 47, 5, 255, 83, 46, 13, 255, 76, 41, 8, 255, 77, 43, 7, 255, 77, 43, 7, 255, 80, 46, 7, 255, 86, 49, 12, 255, 88, 47, 10, 255, 81, 48, 3, 255, 88, 51, 6, 255, 80, 50, 10, 255, 86, 49, 7, 255, 88, 52, 11, 255, 90, 56, 11, 255, 107, 64, 11, 255, 117, 62, 7, 255, 118, 68, 11, 255, 118, 68, 11, 255, 123, 74, 9, 255, 124, 72, 2, 255, 118, 63, 8, 255, 104, 60, 10, 255, 88, 52, 16, 255, 83, 50, 13, 255, 88, 50, 15, 255, 85, 51, 7, 255, 82, 51, 11, 255, 89, 51, 5, 255, 99, 61, 13, 255, 118, 76, 10, 255, 138, 98, 10, 255, 129, 87, 3, 255, 123, 75, 6, 255, 126, 75, 12, 255, 119, 69, 8, 255, 115, 67, 10, 255, 111, 61, 7, 255, 101, 58, 6, 255, 92, 55, 4, 255, 86, 44, 8, 255, 81, 49, 13, 255, 72, 46, 15, 255, 76, 44, 8, 255, 82, 48, 10, 255, 77, 44, 20, 255, 82, 41, 18, 255, 86, 42, 9, 255, 86, 45, 22, 255, 85, 46, 17, 255, 85, 48, 10, 255, 86, 48, 18, 255, 90, 49, 13, 255, 95, 57, 14, 255, 86, 54, 13, 255, 83, 50, 17, 255, 79, 46, 12, 255, 73, 50, 22, 255, 70, 44, 31, 255, 74, 46, 26, 255, 76, 51, 19, 255, 76, 48, 25, 255, 76, 55, 19, 255, 80, 55, 22, 255, 83, 58, 18, 255, 83, 65, 23, 255, 87, 60, 23, 255, 91, 61, 30, 255, 82, 64, 35, 255, 76, 61, 32, 255, 76, 59, 33, 255, 77, 62, 28, 255, 86, 63, 32, 255, 85, 63, 32, 255, 81, 62, 22, 255, 84, 65, 32, 255, 80, 63, 41, 255, 81, 66, 31, 255, 79, 69, 31, 255, 79, 71, 33, 255, 80, 67, 50, 255, 82, 65, 42, 255, 86, 70, 39, 255, 91, 69, 34, 255, 87, 73, 29, 255, 85, 71, 35, 255, 82, 67, 42, 255, 80, 71, 41, 255, 90, 75, 42, 255, 106, 78, 42, 255, 107, 72, 40, 255, 104, 73, 46, 255, 105, 74, 43, 255, 104, 75, 39, 255, 108, 78, 35, 255, 115, 81, 40, 255, 121, 82, 46, 255, 120, 86, 40, 255, 114, 85, 37, 255, 112, 80, 43, 255, 111, 85, 45, 255, 105, 84, 41, 255, 111, 86, 35, 255, 119, 89, 37, 255, 115, 85, 40, 255, 113, 90, 40, 255, 112, 90, 42, 255, 117, 90, 43, 255, 119, 90, 47, 255, 116, 92, 50, 255, 120, 98, 63, 255, 118, 98, 48, 255, 121, 103, 43, 255, 122, 103, 53, 255, 125, 105, 59, 255, 127, 108, 63, 255, 128, 111, 69, 255, 130, 114, 67, 255, 134, 123, 64, 255, 127, 123, 68, 255, 122, 125, 78, 255, 141, 143, 96, 255, 140, 136, 86, 255, 137, 130, 78, 255, 142, 135, 77, 255, 144, 136, 69, 255, 147, 137, 69, 255, 147, 134, 75, 255, 151, 135, 72, 255, 150, 136, 72, 255, 147, 134, 67, 255, 150, 133, 62, 255, 149, 131, 67, 255, 144, 129, 62, 255, 141, 124, 55, 255, 138, 120, 59, 255, 127, 113, 51, 255, 121, 116, 51, 255, 120, 113, 52, 255, 123, 111, 46, 255, 129, 106, 49, 255, 126, 100, 44, 255, 123, 99, 41, 255, 125, 96, 34, 255, 128, 91, 42, 255, 121, 89, 37, 255, 124, 91, 29, 255, 125, 86, 30, 255, 118, 87, 38, 255, 116, 89, 29, 255, 118, 95, 37, 255, 123, 87, 30, 255, 125, 80, 22, 255, 124, 76, 21, 255, 125, 80, 16, 255, 127, 79, 22, 255, 124, 74, 21, 255, 121, 72, 24, 255, 122, 75, 27, 255, 122, 72, 25, 255, 121, 74, 16, 255, 117, 72, 11, 255, 115, 70, 19, 255, 112, 67, 21, 255, 112, 70, 12, 255, 111, 73, 8, 255, 115, 69, 10, 255, 120, 72, 8, 255, 127, 76, 12, 255, 132, 75, 13, 255, 134, 77, 7, 255, 144, 78, 10, 255, 148, 77, 13, 255, 145, 78, 7, 255, 144, 79, 10, 255, 134, 73, 11, 255, 124, 67, 10, 255, 124, 69, 13, 255, 119, 66, 10, 255, 118, 64, 2, 255, 121, 65, 6, 255, 116, 60, 7, 255, 113, 61, 4, 255, 115, 63, 10, 255, 109, 59, 11, 255, 115, 66, 7, 255, 122, 62, 11, 255, 120, 59, 9, 255, 124, 62, 9, 255, 121, 66, 12, 255, 127, 67, 9, 255, 125, 65, 6, 255, 124, 66, 6, 255, 129, 71, 6, 255, 140, 75, 9, 255, 153, 82, 8, 255, 158, 84, 5, 255, 164, 89, 5, 255, 163, 87, 11, 255, 155, 81, 6, 255, 150, 77, 1, 255, 152, 80, 5, 255, 148, 78, 8, 255, 138, 71, 4, 255, 132, 68, 8, 255, 131, 68, 13, 255, 129, 69, 6, 255, 127, 67, 7, 255, 124, 65, 7, 255, 124, 65, 8, 255, 123, 60, 11, 255, 114, 59, 7, 255, 113, 61, 4, 255, 109, 54, 7, 255, 107, 59, 3, 255, 113, 62, 7, 255, 116, 59, 8, 255, 113, 56, 11, 255, 104, 53, 8, 255, 108, 55, 9, 255, 118, 56, 12, 255, 109, 56, 7, 255, 107, 57, 9, 255, 110, 54, 6, 255, 109, 53, 9, 255, 110, 52, 12, 255, 116, 54, 12, 255, 116, 54, 8, 255, 110, 49, 4, 255, 107, 53, 10, 255, 110, 51, 7, 255, 113, 52, 2, 255, 109, 52, 4, 255, 104, 44, 3, 255, 108, 46, 5, 255, 106, 51, 3, 255, 105, 51, 2, 255, 92, 43, 10, 255, 76, 29, 15, 255, 20, 41, 82, 255, 25, 40, 68, 255, 18, 30, 42, 255, 5, 19, 29, 255, 6, 22, 33, 255, 6, 12, 27, 255, 0, 0, 4, 255, 0, 2, 1, 255, 0, 0, 3, 255, 64, 9, 1, 255, 157, 34, 4, 255, 139, 27, 7, 255, 107, 13, 9, 255, 121, 18, 2, 255, 151, 30, 9, 255, 154, 30, 7, 255, 114, 10, 1, 255, 67, 4, 4, 255, 14, 2, 0, 255, 6, 2, 1, 255, 6, 1, 0, 255, 8, 1, 1, 255, 15, 2, 2, 255, 18, 0, 0, 255, 33, 1, 2, 255, 38, 2, 7, 255, 37, 1, 5, 255, 23, 0, 3, 255, 13, 3, 1, 255, 15, 2, 0, 255, 8, 7, 4, 255, 14, 7, 6, 255, 10, 1, 2, 255, 4, 5, 15, 255, 3, 6, 15, 255, 0, 0, 3, 255, 1, 0, 0, 255, 1, 0, 3, 255, 1, 0, 2, 255, 1, 1, 1, 255, 1, 1, 5, 255, 1, 0, 4, 255, 1, 1, 1, 255, 1, 1, 0, 255, 2, 2, 1, 255, 1, 1, 3, 255, 2, 0, 5, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 2, 255, 1, 1, 9, 255, 2, 3, 10, 255, 3, 4, 10, 255, 2, 3, 6, 255, 1, 0, 2, 255, 0, 0, 0, 255, 1, 0, 0, 255, 1, 0, 3, 255, 1, 0, 3, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 1, 0, 2, 255, 1, 0, 0, 255, 1, 0, 1, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 2, 255, 1, 1, 2, 255, 0, 0, 4, 255, 1, 0, 7, 255, 2, 1, 6, 255, 0, 0, 1, 255, 0, 0, 0, 255, 2, 3, 16, 255, 39, 38, 80, 255, 100, 93, 154, 255, 116, 115, 134, 255, 77, 83, 69, 255, 50, 52, 41, 255, 16, 21, 13, 255, 18, 17, 25, 255, 60, 56, 61, 255, 91, 83, 140, 255, 85, 82, 159, 255, 77, 80, 137, 255, 82, 81, 94, 255, 68, 61, 47, 255, 42, 32, 7, 255, 94, 55, 5, 255, 150, 86, 14, 255, 98, 52, 10, 255, 63, 40, 15, 255, 47, 39, 22, 255, 40, 40, 15, 255, 34, 51, 16, 255, 39, 58, 18, 255, 41, 58, 22, 255, 44, 60, 28, 255, 54, 59, 24, 255, 50, 64, 16, 255, 37, 51, 8, 255, 40, 35, 10, 255, 29, 18, 9, 255, 13, 14, 5, 255, 24, 23, 10, 255, 44, 26, 17, 255, 59, 40, 17, 255, 53, 36, 8, 255, 36, 19, 6, 255, 21, 17, 13, 255, 24, 19, 12, 255, 37, 24, 4, 255, 36, 25, 8, 255, 30, 23, 9, 255, 25, 21, 8, 255, 31, 22, 12, 255, 37, 25, 10, 255, 41, 24, 7, 255, 36, 24, 14, 255, 35, 30, 15, 255, 48, 30, 7, 255, 53, 30, 7, 255, 47, 31, 7, 255, 48, 33, 13, 255, 48, 32, 12, 255, 53, 32, 9, 255, 62, 34, 16, 255, 76, 40, 8, 255, 79, 44, 6, 255, 73, 46, 8, 255, 73, 44, 7, 255, 79, 44, 3, 255, 84, 44, 1, 255, 84, 43, 6, 255, 75, 42, 4, 255, 72, 39, 11, 255, 76, 44, 6, 255, 85, 46, 6, 255, 89, 46, 9, 255, 86, 50, 9, 255, 87, 45, 8, 255, 87, 50, 11, 255, 91, 49, 13, 255, 91, 50, 13, 255, 103, 61, 19, 255, 108, 59, 6, 255, 115, 59, 7, 255, 103, 60, 14, 255, 96, 55, 15, 255, 93, 60, 7, 255, 94, 55, 9, 255, 92, 47, 12, 255, 90, 52, 5, 255, 80, 48, 14, 255, 81, 48, 13, 255, 85, 50, 8, 255, 92, 54, 2, 255, 95, 57, 3, 255, 113, 77, 10, 255, 130, 80, 16, 255, 140, 85, 12, 255, 153, 93, 13, 255, 137, 85, 6, 255, 122, 75, 3, 255, 121, 73, 13, 255, 116, 69, 6, 255, 112, 64, 4, 255, 105, 61, 5, 255, 100, 56, 6, 255, 94, 49, 8, 255, 82, 44, 11, 255, 83, 46, 9, 255, 80, 40, 16, 255, 82, 47, 17, 255, 82, 49, 7, 255, 78, 49, 8, 255, 72, 49, 11, 255, 73, 48, 6, 255, 80, 47, 18, 255, 79, 49, 15, 255, 80, 48, 11, 255, 87, 49, 22, 255, 86, 52, 19, 255, 84, 51, 11, 255, 87, 50, 13, 255, 80, 52, 17, 255, 74, 52, 22, 255, 72, 49, 23, 255, 76, 52, 12, 255, 77, 53, 19, 255, 71, 50, 31, 255, 77, 51, 29, 255, 79, 56, 23, 255, 77, 60, 28, 255, 86, 61, 24, 255, 89, 63, 22, 255, 89, 65, 34, 255, 90, 64, 28, 255, 87, 64, 21, 255, 82, 65, 26, 255, 80, 61, 33, 255, 74, 59, 36, 255, 84, 58, 31, 255, 84, 62, 29, 255, 82, 63, 28, 255, 83, 67, 22, 255, 84, 65, 34, 255, 81, 64, 33, 255, 82, 68, 39, 255, 79, 66, 43, 255, 85, 70, 32, 255, 83, 65, 29, 255, 87, 71, 33, 255, 91, 68, 32, 255, 85, 67, 34, 255, 86, 69, 44, 255, 87, 67, 36, 255, 84, 73, 36, 255, 86, 73, 36, 255, 103, 76, 40, 255, 107, 73, 30, 255, 105, 75, 37, 255, 106, 77, 38, 255, 106, 77, 43, 255, 108, 76, 38, 255, 117, 83, 34, 255, 120, 85, 35, 255, 119, 91, 28, 255, 111, 87, 29, 255, 111, 80, 45, 255, 108, 82, 41, 255, 107, 87, 32, 255, 108, 80, 40, 255, 114, 82, 41, 255, 114, 85, 38, 255, 112, 86, 45, 255, 111, 85, 46, 255, 116, 86, 47, 255, 119, 93, 45, 255, 116, 93, 52, 255, 115, 92, 62, 255, 118, 97, 51, 255, 122, 102, 46, 255, 125, 102, 55, 255, 125, 107, 61, 255, 130, 111, 53, 255, 134, 114, 52, 255, 134, 115, 65, 255, 130, 117, 69, 255, 127, 120, 68, 255, 125, 124, 72, 255, 137, 142, 89, 255, 144, 142, 88, 255, 136, 128, 80, 255, 143, 133, 75, 255, 141, 133, 67, 255, 143, 133, 68, 255, 148, 132, 71, 255, 156, 135, 73, 255, 151, 133, 68, 255, 146, 130, 64, 255, 153, 134, 65, 255, 152, 133, 66, 255, 144, 127, 67, 255, 143, 123, 60, 255, 138, 120, 54, 255, 129, 117, 54, 255, 123, 113, 52, 255, 122, 112, 53, 255, 116, 109, 46, 255, 126, 104, 42, 255, 128, 97, 46, 255, 125, 99, 44, 255, 125, 97, 29, 255, 129, 92, 37, 255, 123, 93, 35, 255, 124, 93, 33, 255, 129, 87, 29, 255, 120, 87, 30, 255, 117, 87, 26, 255, 117, 92, 36, 255, 125, 90, 32, 255, 125, 80, 24, 255, 125, 76, 28, 255, 126, 79, 27, 255, 129, 79, 25, 255, 129, 80, 15, 255, 124, 75, 23, 255, 120, 73, 20, 255, 125, 76, 21, 255, 125, 75, 25, 255, 120, 70, 23, 255, 120, 70, 18, 255, 117, 68, 9, 255, 118, 70, 11, 255, 116, 73, 7, 255, 117, 69, 11, 255, 121, 69, 14, 255, 124, 70, 13, 255, 129, 73, 11, 255, 136, 82, 11, 255, 142, 77, 16, 255, 149, 79, 10, 255, 150, 82, 8, 255, 149, 82, 6, 255, 138, 75, 8, 255, 128, 70, 9, 255, 120, 66, 2, 255, 117, 66, 4, 255, 118, 64, 6, 255, 121, 63, 11, 255, 120, 62, 14, 255, 117, 64, 9, 255, 114, 65, 8, 255, 109, 61, 7, 255, 114, 59, 4, 255, 117, 58, 10, 255, 123, 65, 14, 255, 122, 64, 7, 255, 122, 64, 5, 255, 128, 64, 4, 255, 129, 70, 6, 255, 129, 70, 12, 255, 129, 69, 10, 255, 138, 75, 8, 255, 147, 76, 10, 255, 159, 86, 7, 255, 168, 89, 3, 255, 168, 88, 6, 255, 161, 83, 5, 255, 159, 82, 3, 255, 158, 80, 5, 255, 154, 76, 7, 255, 145, 72, 4, 255, 138, 71, 8, 255, 134, 66, 14, 255, 128, 64, 7, 255, 126, 65, 7, 255, 123, 65, 6, 255, 123, 67, 6, 255, 121, 63, 4, 255, 122, 57, 4, 255, 115, 59, 4, 255, 107, 58, 13, 255, 117, 60, 12, 255, 120, 59, 6, 255, 112, 55, 4, 255, 114, 55, 6, 255, 109, 51, 9, 255, 108, 52, 14, 255, 112, 54, 11, 255, 111, 58, 3, 255, 111, 59, 3, 255, 108, 55, 9, 255, 113, 58, 7, 255, 111, 53, 4, 255, 113, 51, 6, 255, 118, 56, 12, 255, 110, 52, 7, 255, 109, 56, 4, 255, 114, 56, 3, 255, 113, 49, 4, 255, 111, 52, 8, 255, 111, 52, 6, 255, 109, 47, 5, 255, 102, 43, 0, 255, 93, 43, 13, 255, 80, 36, 22, 255, 68, 33, 9, 255, 38, 60, 81, 255, 28, 58, 86, 255, 24, 45, 64, 255, 14, 27, 44, 255, 7, 21, 22, 255, 1, 2, 6, 255, 1, 1, 0, 255, 3, 1, 5, 255, 3, 0, 7, 255, 67, 10, 1, 255, 134, 23, 4, 255, 100, 12, 5, 255, 73, 1, 4, 255, 103, 12, 6, 255, 138, 27, 2, 255, 158, 45, 2, 255, 168, 34, 5, 255, 118, 15, 4, 255, 35, 0, 5, 255, 15, 1, 3, 255, 7, 3, 1, 255, 7, 1, 0, 255, 15, 0, 1, 255, 15, 1, 2, 255, 29, 4, 5, 255, 41, 3, 5, 255, 39, 3, 1, 255, 24, 2, 1, 255, 14, 1, 3, 255, 13, 1, 0, 255, 6, 1, 0, 255, 7, 0, 4, 255, 7, 11, 24, 255, 5, 15, 31, 255, 4, 3, 2, 255, 7, 7, 5, 255, 3, 3, 6, 255, 0, 1, 1, 255, 1, 1, 0, 255, 2, 1, 1, 255, 1, 3, 2, 255, 0, 1, 3, 255, 0, 0, 2, 255, 0, 1, 1, 255, 1, 2, 2, 255, 0, 2, 5, 255, 5, 0, 6, 255, 2, 1, 4, 255, 1, 1, 5, 255, 3, 0, 5, 255, 2, 2, 5, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 2, 255, 1, 1, 7, 255, 3, 4, 16, 255, 2, 2, 12, 255, 0, 2, 5, 255, 0, 0, 2, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 1, 2, 255, 1, 1, 2, 255, 2, 0, 3, 255, 0, 0, 0, 255, 1, 2, 2, 255, 0, 0, 5, 255, 0, 1, 7, 255, 2, 1, 2, 255, 3, 1, 2, 255, 2, 0, 2, 255, 1, 0, 7, 255, 2, 1, 0, 255, 0, 0, 13, 255, 31, 28, 71, 255, 76, 88, 142, 255, 107, 114, 153, 255, 86, 86, 76, 255, 48, 50, 36, 255, 17, 21, 23, 255, 14, 9, 24, 255, 62, 56, 75, 255, 84, 87, 122, 255, 78, 88, 140, 255, 75, 72, 167, 255, 81, 79, 119, 255, 46, 42, 43, 255, 13, 16, 6, 255, 45, 25, 6, 255, 87, 50, 13, 255, 112, 73, 13, 255, 99, 59, 15, 255, 45, 31, 12, 255, 34, 27, 15, 255, 34, 35, 16, 255, 32, 43, 15, 255, 38, 53, 27, 255, 49, 64, 39, 255, 58, 76, 27, 255, 58, 76, 17, 255, 53, 63, 16, 255, 35, 38, 8, 255, 21, 17, 7, 255, 18, 9, 8, 255, 29, 18, 9, 255, 55, 36, 16, 255, 58, 40, 15, 255, 42, 26, 14, 255, 30, 20, 5, 255, 24, 15, 6, 255, 27, 20, 9, 255, 30, 23, 15, 255, 29, 21, 13, 255, 28, 22, 11, 255, 29, 22, 12, 255, 33, 23, 9, 255, 35, 27, 6, 255, 31, 24, 13, 255, 29, 24, 9, 255, 47, 28, 10, 255, 47, 29, 1, 255, 44, 32, 4, 255, 44, 26, 15, 255, 47, 28, 15, 255, 50, 32, 13, 255, 52, 31, 11, 255, 58, 36, 9, 255, 66, 38, 10, 255, 71, 36, 7, 255, 70, 35, 7, 255, 78, 47, 7, 255, 77, 48, 4, 255, 77, 45, 8, 255, 77, 43, 7, 255, 81, 46, 7, 255, 81, 44, 7, 255, 78, 39, 6, 255, 72, 39, 10, 255, 78, 43, 6, 255, 87, 45, 9, 255, 90, 52, 5, 255, 90, 54, 8, 255, 86, 44, 13, 255, 95, 49, 8, 255, 96, 52, 9, 255, 100, 57, 3, 255, 99, 53, 10, 255, 97, 53, 11, 255, 90, 51, 8, 255, 86, 51, 7, 255, 87, 52, 7, 255, 82, 44, 7, 255, 86, 48, 12, 255, 82, 46, 7, 255, 81, 50, 6, 255, 82, 53, 3, 255, 87, 58, 6, 255, 103, 62, 12, 255, 115, 65, 17, 255, 123, 76, 6, 255, 129, 79, 7, 255, 131, 76, 10, 255, 140, 85, 3, 255, 146, 91, 7, 255, 125, 80, 5, 255, 121, 76, 5, 255, 121, 71, 7, 255, 115, 67, 10, 255, 112, 62, 10, 255, 107, 61, 10, 255, 98, 54, 7, 255, 91, 49, 5, 255, 86, 48, 14, 255, 78, 45, 11, 255, 81, 44, 18, 255, 86, 46, 8, 255, 82, 48, 7, 255, 84, 52, 16, 255, 86, 51, 11, 255, 79, 50, 10, 255, 74, 50, 12, 255, 83, 50, 11, 255, 85, 51, 13, 255, 91, 58, 15, 255, 88, 56, 11, 255, 85, 50, 8, 255, 89, 50, 23, 255, 72, 48, 25, 255, 63, 47, 34, 255, 68, 47, 26, 255, 74, 53, 17, 255, 74, 51, 15, 255, 77, 49, 29, 255, 82, 59, 18, 255, 79, 56, 25, 255, 79, 58, 22, 255, 89, 65, 16, 255, 91, 60, 30, 255, 95, 63, 22, 255, 92, 65, 23, 255, 88, 65, 26, 255, 84, 67, 18, 255, 84, 62, 18, 255, 83, 64, 24, 255, 86, 62, 32, 255, 88, 63, 32, 255, 78, 68, 23, 255, 78, 67, 24, 255, 84, 66, 28, 255, 83, 64, 33, 255, 84, 69, 30, 255, 84, 71, 35, 255, 91, 66, 26, 255, 89, 68, 33, 255, 84, 67, 35, 255, 87, 74, 31, 255, 84, 72, 35, 255, 85, 70, 39, 255, 87, 71, 38, 255, 87, 70, 42, 255, 86, 72, 38, 255, 97, 77, 37, 255, 106, 75, 34, 255, 109, 74, 39, 255, 107, 79, 26, 255, 112, 81, 22, 255, 120, 80, 32, 255, 120, 79, 39, 255, 121, 86, 37, 255, 118, 86, 40, 255, 115, 86, 38, 255, 110, 81, 38, 255, 112, 82, 39, 255, 110, 83, 40, 255, 104, 80, 35, 255, 108, 87, 35, 255, 112, 89, 43, 255, 113, 86, 47, 255, 117, 87, 48, 255, 117, 88, 44, 255, 117, 92, 40, 255, 117, 93, 38, 255, 118, 95, 52, 255, 120, 99, 56, 255, 122, 101, 52, 255, 124, 104, 49, 255, 129, 109, 60, 255, 129, 112, 58, 255, 134, 117, 55, 255, 134, 117, 64, 255, 133, 117, 62, 255, 137, 122, 69, 255, 132, 121, 68, 255, 132, 128, 72, 255, 147, 143, 88, 255, 140, 132, 81, 255, 140, 129, 66, 255, 143, 130, 67, 255, 142, 129, 72, 255, 149, 131, 70, 255, 150, 131, 69, 255, 153, 133, 65, 255, 152, 133, 64, 255, 150, 130, 67, 255, 150, 132, 50, 255, 145, 126, 62, 255, 140, 120, 60, 255, 137, 123, 48, 255, 127, 116, 45, 255, 122, 113, 50, 255, 119, 111, 50, 255, 116, 108, 44, 255, 125, 101, 48, 255, 134, 97, 51, 255, 124, 97, 36, 255, 123, 96, 43, 255, 130, 94, 35, 255, 126, 92, 38, 255, 124, 89, 37, 255, 129, 88, 31, 255, 126, 85, 30, 255, 115, 85, 40, 255, 118, 91, 43, 255, 123, 86, 35, 255, 125, 81, 26, 255, 127, 80, 23, 255, 127, 82, 21, 255, 128, 80, 23, 255, 131, 77, 26, 255, 126, 73, 17, 255, 124, 74, 21, 255, 124, 74, 16, 255, 124, 73, 16, 255, 121, 71, 20, 255, 116, 71, 13, 255, 118, 74, 11, 255, 118, 71, 13, 255, 119, 72, 7, 255, 118, 71, 14, 255, 118, 69, 16, 255, 118, 67, 21, 255, 119, 71, 15, 255, 133, 79, 9, 255, 147, 80, 17, 255, 148, 82, 8, 255, 154, 84, 11, 255, 155, 86, 6, 255, 141, 78, 7, 255, 127, 73, 9, 255, 123, 70, 9, 255, 114, 68, 5, 255, 114, 65, 11, 255, 120, 64, 11, 255, 124, 62, 3, 255, 124, 63, 1, 255, 114, 64, 5, 255, 116, 66, 9, 255, 123, 65, 9, 255, 120, 63, 4, 255, 122, 65, 3, 255, 126, 67, 11, 255, 127, 69, 5, 255, 125, 67, 3, 255, 126, 68, 6, 255, 128, 69, 9, 255, 133, 72, 15, 255, 136, 72, 12, 255, 144, 77, 6, 255, 160, 87, 5, 255, 168, 89, 8, 255, 168, 88, 12, 255, 163, 85, 12, 255, 160, 83, 11, 255, 157, 81, 7, 255, 149, 78, 7, 255, 141, 74, 9, 255, 138, 72, 6, 255, 135, 69, 8, 255, 135, 71, 5, 255, 132, 69, 8, 255, 130, 66, 13, 255, 129, 65, 6, 255, 126, 62, 4, 255, 120, 62, 3, 255, 116, 62, 4, 255, 120, 61, 6, 255, 122, 61, 7, 255, 117, 57, 9, 255, 116, 57, 8, 255, 118, 57, 4, 255, 112, 53, 4, 255, 110, 53, 12, 255, 106, 54, 7, 255, 110, 57, 4, 255, 111, 55, 9, 255, 116, 57, 7, 255, 121, 55, 4, 255, 112, 54, 6, 255, 103, 51, 7, 255, 115, 52, 5, 255, 112, 53, 5, 255, 114, 58, 6, 255, 121, 61, 5, 255, 114, 51, 5, 255, 111, 48, 5, 255, 102, 46, 1, 255, 96, 44, 12, 255, 98, 49, 13, 255, 99, 48, 14, 255, 89, 42, 7, 255, 87, 39, 7, 255, 21, 38, 63, 255, 19, 59, 86, 255, 24, 58, 83, 255, 10, 40, 75, 255, 6, 22, 37, 255, 4, 4, 8, 255, 3, 1, 2, 255, 3, 0, 0, 255, 1, 0, 3, 255, 40, 6, 9, 255, 83, 7, 6, 255, 70, 5, 4, 255, 52, 3, 1, 255, 80, 5, 9, 255, 122, 16, 7, 255, 166, 40, 0, 255, 186, 45, 9, 255, 98, 15, 5, 255, 26, 2, 5, 255, 12, 2, 4, 255, 2, 1, 1, 255, 2, 1, 0, 255, 5, 0, 2, 255, 4, 2, 2, 255, 10, 3, 4, 255, 25, 4, 5, 255, 26, 1, 5, 255, 21, 2, 1, 255, 13, 2, 0, 255, 9, 2, 5, 255, 11, 3, 7, 255, 4, 12, 27, 255, 1, 28, 43, 255, 5, 11, 23, 255, 3, 0, 3, 255, 0, 3, 5, 255, 6, 14, 22, 255, 2, 2, 3, 255, 3, 3, 6, 255, 2, 3, 3, 255, 0, 1, 0, 255, 2, 1, 0, 255, 0, 1, 0, 255, 2, 0, 2, 255, 1, 1, 5, 255, 1, 1, 5, 255, 3, 1, 0, 255, 0, 2, 0, 255, 2, 2, 2, 255, 5, 0, 1, 255, 2, 1, 3, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 2, 255, 1, 1, 5, 255, 1, 0, 7, 255, 0, 1, 3, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 3, 255, 1, 1, 2, 255, 0, 1, 4, 255, 0, 1, 5, 255, 0, 2, 1, 255, 0, 1, 1, 255, 0, 1, 4, 255, 0, 1, 2, 255, 0, 2, 2, 255, 1, 0, 0, 255, 0, 0, 0, 255, 19, 20, 54, 255, 71, 75, 128, 255, 91, 95, 144, 255, 82, 95, 103, 255, 55, 49, 35, 255, 23, 19, 10, 255, 11, 11, 20, 255, 53, 44, 54, 255, 89, 79, 112, 255, 80, 81, 128, 255, 70, 75, 112, 255, 67, 65, 114, 255, 49, 48, 64, 255, 19, 19, 11, 255, 8, 5, 0, 255, 33, 23, 12, 255, 69, 40, 23, 255, 64, 35, 11, 255, 27, 21, 7, 255, 13, 11, 9, 255, 22, 26, 12, 255, 29, 33, 17, 255, 37, 46, 22, 255, 43, 57, 31, 255, 55, 71, 44, 255, 57, 75, 32, 255, 49, 61, 22, 255, 29, 33, 6, 255, 19, 17, 5, 255, 22, 11, 10, 255, 38, 22, 8, 255, 50, 36, 7, 255, 45, 35, 9, 255, 33, 26, 14, 255, 19, 15, 4, 255, 21, 17, 6, 255, 25, 22, 7, 255, 26, 21, 10, 255, 30, 24, 8, 255, 32, 25, 12, 255, 30, 23, 12, 255, 30, 24, 9, 255, 34, 27, 17, 255, 35, 28, 6, 255, 38, 27, 4, 255, 41, 29, 11, 255, 39, 28, 9, 255, 49, 22, 10, 255, 49, 27, 11, 255, 53, 32, 5, 255, 51, 29, 7, 255, 48, 31, 10, 255, 64, 33, 6, 255, 63, 30, 10, 255, 57, 35, 14, 255, 60, 35, 8, 255, 72, 38, 6, 255, 80, 46, 2, 255, 75, 49, 5, 255, 77, 44, 7, 255, 81, 45, 7, 255, 80, 42, 9, 255, 80, 47, 12, 255, 78, 45, 5, 255, 77, 42, 8, 255, 75, 40, 8, 255, 78, 45, 8, 255, 83, 48, 8, 255, 88, 53, 10, 255, 87, 52, 8, 255, 86, 51, 7, 255, 86, 51, 9, 255, 88, 51, 13, 255, 88, 48, 12, 255, 81, 44, 5, 255, 78, 45, 10, 255, 81, 48, 10, 255, 81, 46, 2, 255, 85, 50, 11, 255, 89, 45, 10, 255, 90, 46, 4, 255, 81, 48, 8, 255, 82, 52, 4, 255, 115, 71, 8, 255, 126, 74, 8, 255, 117, 74, 4, 255, 117, 70, 15, 255, 124, 73, 8, 255, 125, 77, 4, 255, 124, 80, 7, 255, 135, 85, 3, 255, 144, 90, 9, 255, 125, 78, 12, 255, 117, 70, 10, 255, 120, 71, 5, 255, 115, 65, 6, 255, 111, 61, 6, 255, 106, 58, 11, 255, 98, 56, 6, 255, 90, 52, 5, 255, 84, 46, 10, 255, 81, 44, 10, 255, 85, 46, 15, 255, 86, 47, 3, 255, 83, 48, 6, 255, 77, 50, 16, 255, 82, 45, 15, 255, 85, 50, 13, 255, 72, 50, 10, 255, 80, 51, 9, 255, 90, 54, 12, 255, 87, 54, 14, 255, 86, 53, 17, 255, 83, 54, 18, 255, 86, 49, 19, 255, 90, 52, 17, 255, 74, 52, 14, 255, 72, 53, 25, 255, 78, 52, 26, 255, 81, 54, 17, 255, 85, 53, 25, 255, 89, 56, 19, 255, 88, 53, 30, 255, 84, 56, 27, 255, 87, 63, 22, 255, 91, 59, 31, 255, 90, 63, 26, 255, 91, 61, 25, 255, 92, 61, 25, 255, 83, 61, 17, 255, 80, 60, 25, 255, 78, 65, 21, 255, 77, 62, 26, 255, 82, 64, 34, 255, 83, 67, 19, 255, 84, 66, 28, 255, 84, 70, 27, 255, 87, 67, 24, 255, 85, 68, 22, 255, 74, 70, 29, 255, 79, 68, 34, 255, 80, 69, 31, 255, 83, 69, 34, 255, 83, 69, 33, 255, 87, 73, 25, 255, 90, 72, 30, 255, 92, 70, 34, 255, 92, 71, 29, 255, 89, 74, 30, 255, 93, 75, 36, 255, 102, 74, 31, 255, 106, 71, 37, 255, 106, 72, 34, 255, 113, 76, 28, 255, 125, 80, 43, 255, 122, 79, 42, 255, 121, 81, 40, 255, 118, 83, 43, 255, 114, 81, 42, 255, 111, 79, 31, 255, 115, 83, 31, 255, 108, 78, 33, 255, 107, 81, 38, 255, 108, 83, 39, 255, 110, 86, 39, 255, 116, 88, 42, 255, 117, 87, 43, 255, 119, 88, 48, 255, 116, 88, 51, 255, 119, 93, 42, 255, 120, 94, 48, 255, 120, 96, 50, 255, 122, 99, 50, 255, 124, 103, 48, 255, 128, 107, 57, 255, 130, 108, 57, 255, 133, 112, 59, 255, 134, 111, 67, 255, 135, 115, 62, 255, 140, 122, 62, 255, 137, 125, 59, 255, 131, 126, 61, 255, 147, 141, 82, 255, 146, 137, 83, 255, 139, 126, 67, 255, 143, 129, 62, 255, 142, 127, 66, 255, 150, 126, 68, 255, 153, 131, 61, 255, 152, 130, 62, 255, 151, 130, 58, 255, 153, 131, 63, 255, 154, 131, 53, 255, 148, 126, 50, 255, 141, 120, 54, 255, 137, 121, 45, 255, 134, 119, 45, 255, 126, 113, 49, 255, 118, 109, 41, 255, 118, 106, 46, 255, 125, 99, 49, 255, 134, 101, 34, 255, 126, 100, 32, 255, 124, 98, 36, 255, 130, 95, 35, 255, 127, 93, 33, 255, 128, 89, 38, 255, 131, 88, 34, 255, 128, 88, 29, 255, 118, 87, 36, 255, 115, 89, 35, 255, 124, 90, 24, 255, 126, 84, 13, 255, 128, 82, 16, 255, 127, 82, 22, 255, 126, 80, 21, 255, 129, 77, 26, 255, 127, 77, 19, 255, 125, 77, 16, 255, 122, 71, 20, 255, 124, 72, 21, 255, 122, 72, 15, 255, 118, 73, 13, 255, 118, 73, 13, 255, 119, 69, 19, 255, 116, 70, 17, 255, 120, 74, 16, 255, 120, 72, 8, 255, 118, 70, 11, 255, 122, 71, 13, 255, 134, 77, 11, 255, 146, 80, 19, 255, 154, 85, 16, 255, 157, 86, 5, 255, 157, 81, 8, 255, 149, 79, 7, 255, 138, 77, 4, 255, 130, 71, 16, 255, 123, 65, 11, 255, 121, 66, 8, 255, 119, 65, 8, 255, 120, 63, 5, 255, 124, 66, 8, 255, 118, 62, 6, 255, 118, 64, 8, 255, 117, 65, 8, 255, 120, 64, 6, 255, 122, 66, 7, 255, 122, 68, 9, 255, 125, 72, 2, 255, 128, 72, 2, 255, 129, 67, 8, 255, 125, 63, 5, 255, 129, 68, 7, 255, 137, 75, 11, 255, 148, 80, 8, 255, 162, 85, 4, 255, 172, 91, 11, 255, 169, 91, 7, 255, 163, 85, 5, 255, 156, 75, 4, 255, 159, 79, 3, 255, 159, 81, 4, 255, 152, 76, 9, 255, 144, 76, 1, 255, 141, 73, 8, 255, 137, 72, 7, 255, 134, 68, 7, 255, 133, 66, 10, 255, 135, 70, 7, 255, 128, 67, 9, 255, 123, 64, 10, 255, 119, 60, 2, 255, 121, 62, 0, 255, 118, 60, 4, 255, 116, 60, 9, 255, 120, 62, 8, 255, 120, 58, 9, 255, 113, 56, 9, 255, 112, 57, 7, 255, 114, 58, 8, 255, 115, 58, 9, 255, 117, 57, 8, 255, 118, 59, 6, 255, 119, 56, 6, 255, 111, 57, 7, 255, 108, 60, 1, 255, 116, 55, 3, 255, 111, 48, 9, 255, 114, 47, 9, 255, 119, 48, 14, 255, 117, 50, 10, 255, 102, 41, 4, 255, 91, 35, 9, 255, 97, 49, 18, 255, 103, 57, 29, 255, 92, 47, 17, 255, 85, 41, 8, 255, 92, 44, 15, 255, 9, 57, 84, 255, 17, 59, 75, 255, 11, 60, 76, 255, 12, 58, 92, 255, 8, 46, 65, 255, 2, 16, 24, 255, 1, 0, 0, 255, 1, 2, 0, 255, 0, 2, 0, 255, 8, 2, 2, 255, 45, 3, 3, 255, 68, 5, 2, 255, 60, 4, 0, 255, 58, 2, 3, 255, 84, 7, 6, 255, 108, 20, 7, 255, 80, 13, 8, 255, 21, 1, 8, 255, 0, 1, 2, 255, 2, 0, 0, 255, 0, 0, 2, 255, 0, 1, 2, 255, 1, 1, 3, 255, 0, 1, 2, 255, 0, 1, 2, 255, 6, 1, 2, 255, 6, 4, 1, 255, 10, 3, 1, 255, 14, 2, 1, 255, 16, 0, 7, 255, 12, 22, 35, 255, 1, 35, 44, 255, 0, 12, 24, 255, 2, 0, 36, 255, 20, 88, 146, 255, 38, 102, 114, 255, 5, 3, 6, 255, 8, 1, 3, 255, 0, 2, 3, 255, 3, 3, 5, 255, 1, 1, 1, 255, 1, 0, 0, 255, 0, 0, 0, 255, 2, 1, 2, 255, 1, 0, 0, 255, 2, 1, 1, 255, 0, 0, 2, 255, 1, 5, 19, 255, 2, 5, 18, 255, 1, 0, 2, 255, 2, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 2, 255, 1, 1, 3, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 1, 255, 3, 3, 5, 255, 0, 2, 2, 255, 1, 0, 7, 255, 2, 0, 12, 255, 2, 2, 2, 255, 1, 0, 1, 255, 0, 0, 2, 255, 2, 1, 2, 255, 6, 8, 31, 255, 58, 66, 113, 255, 89, 96, 149, 255, 81, 86, 113, 255, 60, 54, 44, 255, 25, 20, 12, 255, 11, 8, 7, 255, 43, 39, 56, 255, 77, 73, 103, 255, 75, 81, 132, 255, 51, 67, 135, 255, 48, 65, 133, 255, 40, 43, 59, 255, 20, 12, 15, 255, 2, 2, 0, 255, 8, 7, 2, 255, 14, 12, 5, 255, 17, 12, 12, 255, 13, 12, 9, 255, 12, 11, 2, 255, 19, 17, 9, 255, 34, 30, 21, 255, 43, 38, 26, 255, 40, 39, 27, 255, 48, 56, 29, 255, 51, 62, 20, 255, 44, 51, 17, 255, 24, 27, 7, 255, 11, 12, 4, 255, 20, 8, 6, 255, 26, 17, 14, 255, 40, 32, 20, 255, 43, 31, 12, 255, 34, 25, 8, 255, 23, 24, 8, 255, 19, 20, 9, 255, 26, 24, 10, 255, 28, 24, 7, 255, 30, 23, 6, 255, 34, 24, 10, 255, 39, 24, 8, 255, 35, 22, 2, 255, 34, 26, 4, 255, 42, 27, 12, 255, 40, 24, 9, 255, 36, 27, 11, 255, 43, 29, 11, 255, 47, 24, 12, 255, 38, 24, 10, 255, 46, 29, 6, 255, 47, 30, 10, 255, 49, 32, 4, 255, 51, 34, 4, 255, 41, 25, 14, 255, 54, 31, 16, 255, 64, 34, 13, 255, 66, 34, 9, 255, 66, 32, 6, 255, 70, 37, 8, 255, 76, 46, 10, 255, 72, 43, 14, 255, 70, 41, 3, 255, 76, 41, 9, 255, 75, 40, 5, 255, 76, 47, 8, 255, 75, 45, 9, 255, 77, 43, 7, 255, 83, 43, 9, 255, 81, 45, 7, 255, 81, 47, 13, 255, 86, 47, 16, 255, 93, 49, 8, 255, 89, 51, 6, 255, 84, 51, 7, 255, 83, 51, 8, 255, 73, 44, 15, 255, 72, 43, 12, 255, 76, 42, 7, 255, 79, 40, 7, 255, 82, 42, 8, 255, 81, 44, 13, 255, 87, 50, 1, 255, 92, 53, 4, 255, 94, 55, 16, 255, 104, 65, 11, 255, 126, 76, 15, 255, 127, 75, 16, 255, 114, 72, 3, 255, 113, 68, 14, 255, 120, 69, 12, 255, 124, 74, 8, 255, 124, 74, 6, 255, 139, 83, 6, 255, 147, 86, 6, 255, 129, 78, 6, 255, 119, 70, 6, 255, 115, 66, 7, 255, 107, 60, 12, 255, 103, 61, 10, 255, 104, 60, 10, 255, 95, 57, 6, 255, 84, 52, 7, 255, 84, 48, 10, 255, 85, 46, 6, 255, 84, 46, 9, 255, 82, 49, 6, 255, 81, 50, 11, 255, 84, 46, 9, 255, 83, 50, 14, 255, 79, 47, 18, 255, 80, 47, 19, 255, 81, 52, 14, 255, 77, 53, 21, 255, 85, 51, 14, 255, 87, 56, 13, 255, 82, 59, 4, 255, 78, 53, 7, 255, 87, 53, 19, 255, 87, 50, 21, 255, 81, 53, 17, 255, 84, 54, 20, 255, 84, 54, 17, 255, 83, 54, 21, 255, 79, 50, 20, 255, 83, 55, 22, 255, 86, 58, 19, 255, 85, 57, 22, 255, 83, 57, 31, 255, 92, 64, 17, 255, 96, 66, 17, 255, 94, 62, 21, 255, 90, 61, 28, 255, 77, 58, 37, 255, 78, 61, 29, 255, 78, 63, 25, 255, 82, 67, 34, 255, 87, 65, 24, 255, 85, 67, 23, 255, 83, 64, 25, 255, 94, 69, 30, 255, 92, 66, 29, 255, 79, 66, 30, 255, 80, 66, 38, 255, 83, 67, 36, 255, 86, 69, 36, 255, 85, 69, 38, 255, 93, 76, 29, 255, 96, 75, 27, 255, 97, 73, 33, 255, 90, 73, 23, 255, 89, 71, 26, 255, 97, 72, 39, 255, 104, 73, 31, 255, 109, 77, 30, 255, 109, 78, 34, 255, 109, 76, 40, 255, 116, 80, 28, 255, 124, 83, 31, 255, 126, 84, 39, 255, 124, 86, 34, 255, 118, 83, 41, 255, 114, 80, 43, 255, 117, 86, 34, 255, 112, 82, 27, 255, 111, 83, 34, 255, 111, 83, 37, 255, 110, 84, 34, 255, 113, 87, 34, 255, 118, 88, 39, 255, 122, 91, 45, 255, 120, 93, 41, 255, 119, 91, 44, 255, 118, 88, 51, 255, 126, 97, 53, 255, 124, 97, 50, 255, 123, 99, 49, 255, 126, 104, 54, 255, 128, 107, 49, 255, 132, 112, 48, 255, 134, 113, 54, 255, 136, 115, 55, 255, 140, 118, 62, 255, 139, 122, 66, 255, 129, 122, 69, 255, 140, 134, 83, 255, 152, 144, 92, 255, 139, 127, 73, 255, 141, 127, 61, 255, 146, 130, 66, 255, 149, 125, 61, 255, 151, 126, 68, 255, 153, 127, 74, 255, 153, 129, 68, 255, 149, 128, 50, 255, 158, 132, 48, 255, 155, 130, 50, 255, 145, 124, 47, 255, 136, 116, 51, 255, 134, 116, 44, 255, 131, 115, 42, 255, 119, 105, 43, 255, 119, 107, 45, 255, 126, 100, 51, 255, 133, 99, 44, 255, 128, 101, 28, 255, 126, 96, 39, 255, 129, 94, 33, 255, 131, 94, 35, 255, 130, 90, 22, 255, 131, 91, 19, 255, 129, 88, 30, 255, 120, 86, 29, 255, 115, 89, 28, 255, 123, 88, 36, 255, 127, 82, 29, 255, 126, 79, 21, 255, 127, 81, 23, 255, 131, 82, 21, 255, 131, 82, 22, 255, 129, 79, 20, 255, 126, 75, 28, 255, 125, 74, 24, 255, 126, 74, 23, 255, 124, 75, 13, 255, 122, 75, 17, 255, 119, 73, 14, 255, 119, 68, 18, 255, 117, 71, 18, 255, 123, 74, 15, 255, 121, 70, 6, 255, 122, 73, 9, 255, 130, 76, 14, 255, 137, 77, 12, 255, 141, 82, 12, 255, 151, 83, 9, 255, 156, 84, 10, 255, 160, 82, 10, 255, 157, 82, 4, 255, 143, 75, 6, 255, 134, 71, 12, 255, 130, 64, 9, 255, 130, 69, 7, 255, 125, 71, 6, 255, 119, 66, 7, 255, 118, 65, 11, 255, 114, 61, 7, 255, 112, 62, 4, 255, 117, 66, 8, 255, 122, 63, 6, 255, 124, 64, 8, 255, 127, 70, 10, 255, 128, 69, 3, 255, 138, 71, 4, 255, 134, 71, 4, 255, 133, 72, 6, 255, 132, 74, 8, 255, 133, 74, 8, 255, 144, 76, 8, 255, 160, 81, 11, 255, 169, 87, 9, 255, 169, 89, 5, 255, 174, 93, 12, 255, 166, 82, 8, 255, 167, 84, 7, 255, 165, 86, 7, 255, 157, 78, 4, 255, 145, 77, 0, 255, 143, 75, 4, 255, 141, 75, 7, 255, 137, 71, 6, 255, 135, 69, 9, 255, 136, 70, 12, 255, 129, 67, 7, 255, 133, 68, 8, 255, 128, 63, 8, 255, 121, 62, 10, 255, 118, 64, 8, 255, 121, 62, 4, 255, 127, 59, 4, 255, 126, 62, 3, 255, 113, 63, 3, 255, 113, 61, 7, 255, 118, 58, 4, 255, 121, 59, 2, 255, 117, 59, 5, 255, 107, 54, 1, 255, 103, 54, 2, 255, 113, 53, 10, 255, 118, 54, 2, 255, 104, 44, 3, 255, 98, 35, 9, 255, 105, 41, 1, 255, 107, 46, 9, 255, 107, 52, 9, 255, 97, 47, 13, 255, 97, 48, 20, 255, 97, 54, 9, 255, 94, 49, 16, 255, 91, 46, 20, 255, 90, 44, 16, 255, 96, 52, 12, 255, 14, 34, 53, 255, 14, 19, 45, 255, 10, 51, 73, 255, 21, 55, 75, 255, 19, 47, 74, 255, 2, 18, 32, 255, 0, 2, 0, 255, 2, 0, 1, 255, 1, 0, 0, 255, 0, 0, 0, 255, 22, 5, 4, 255, 48, 5, 9, 255, 39, 2, 9, 255, 15, 4, 2, 255, 3, 2, 5, 255, 0, 1, 7, 255, 2, 1, 5, 255, 3, 1, 4, 255, 2, 0, 4, 255, 1, 1, 2, 255, 0, 1, 3, 255, 0, 0, 2, 255, 2, 0, 3, 255, 0, 0, 2, 255, 0, 0, 2, 255, 1, 0, 1, 255, 1, 1, 4, 255, 1, 0, 2, 255, 17, 9, 25, 255, 18, 33, 49, 255, 4, 26, 23, 255, 3, 2, 0, 255, 7, 24, 88, 255, 10, 133, 189, 255, 14, 157, 173, 255, 118, 228, 240, 255, 51, 119, 121, 255, 0, 0, 0, 255, 7, 8, 7, 255, 6, 1, 1, 255, 2, 2, 2, 255, 0, 2, 1, 255, 0, 1, 0, 255, 0, 2, 0, 255, 5, 1, 0, 255, 2, 3, 5, 255, 3, 5, 30, 255, 3, 10, 39, 255, 4, 14, 34, 255, 2, 8, 18, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 2, 255, 1, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 1, 1, 2, 255, 1, 1, 2, 255, 0, 0, 2, 255, 1, 1, 0, 255, 2, 0, 4, 255, 1, 0, 0, 255, 0, 0, 1, 255, 10, 7, 33, 255, 51, 48, 104, 255, 89, 97, 138, 255, 77, 86, 101, 255, 48, 55, 56, 255, 21, 22, 28, 255, 14, 13, 9, 255, 38, 29, 38, 255, 84, 65, 79, 255, 78, 82, 107, 255, 55, 65, 141, 255, 58, 73, 122, 255, 41, 47, 87, 255, 18, 13, 22, 255, 3, 1, 0, 255, 3, 4, 1, 255, 14, 7, 2, 255, 11, 6, 4, 255, 10, 7, 2, 255, 14, 14, 2, 255, 16, 12, 2, 255, 19, 18, 6, 255, 35, 36, 12, 255, 62, 43, 11, 255, 53, 41, 12, 255, 43, 40, 22, 255, 38, 37, 12, 255, 23, 25, 0, 255, 11, 11, 4, 255, 22, 11, 16, 255, 43, 26, 5, 255, 52, 37, 10, 255, 36, 31, 9, 255, 20, 19, 5, 255, 24, 17, 7, 255, 28, 21, 6, 255, 22, 21, 8, 255, 24, 22, 10, 255, 29, 24, 10, 255, 33, 27, 8, 255, 36, 27, 10, 255, 36, 25, 9, 255, 39, 25, 12, 255, 42, 26, 10, 255, 42, 31, 7, 255, 40, 30, 11, 255, 36, 27, 6, 255, 41, 31, 14, 255, 36, 24, 7, 255, 37, 24, 6, 255, 40, 28, 21, 255, 41, 22, 13, 255, 50, 26, 19, 255, 45, 33, 6, 255, 46, 29, 0, 255, 48, 25, 12, 255, 45, 32, 15, 255, 50, 29, 10, 255, 56, 30, 6, 255, 66, 34, 12, 255, 73, 42, 6, 255, 75, 44, 6, 255, 75, 42, 11, 255, 66, 41, 12, 255, 64, 35, 11, 255, 62, 33, 4, 255, 64, 37, 8, 255, 68, 39, 12, 255, 74, 38, 10, 255, 76, 36, 13, 255, 73, 40, 9, 255, 75, 47, 9, 255, 84, 49, 8, 255, 91, 49, 4, 255, 86, 46, 9, 255, 80, 45, 14, 255, 80, 41, 4, 255, 74, 37, 15, 255, 77, 44, 8, 255, 79, 44, 11, 255, 81, 44, 4, 255, 86, 49, 9, 255, 96, 56, 9, 255, 96, 59, 14, 255, 94, 61, 7, 255, 100, 62, 13, 255, 104, 59, 4, 255, 117, 68, 4, 255, 115, 69, 13, 255, 111, 69, 4, 255, 114, 68, 4, 255, 113, 70, 7, 255, 121, 70, 9, 255, 128, 69, 13, 255, 137, 80, 12, 255, 146, 88, 5, 255, 126, 76, 4, 255, 119, 70, 5, 255, 113, 62, 5, 255, 107, 61, 11, 255, 106, 64, 13, 255, 103, 62, 7, 255, 95, 58, 6, 255, 84, 50, 13, 255, 81, 49, 8, 255, 87, 51, 4, 255, 82, 49, 7, 255, 80, 48, 10, 255, 83, 50, 11, 255, 85, 49, 10, 255, 87, 52, 12, 255, 83, 52, 8, 255, 81, 51, 6, 255, 82, 51, 9, 255, 81, 52, 16, 255, 90, 53, 16, 255, 90, 56, 9, 255, 87, 55, 4, 255, 88, 54, 13, 255, 84, 52, 12, 255, 81, 51, 17, 255, 80, 50, 18, 255, 82, 56, 9, 255, 77, 51, 11, 255, 80, 55, 27, 255, 79, 59, 19, 255, 78, 58, 18, 255, 91, 63, 12, 255, 89, 62, 19, 255, 84, 60, 28, 255, 94, 65, 16, 255, 99, 66, 21, 255, 95, 60, 23, 255, 89, 58, 29, 255, 80, 61, 34, 255, 85, 63, 27, 255, 85, 62, 32, 255, 82, 62, 32, 255, 87, 63, 25, 255, 85, 65, 32, 255, 84, 63, 25, 255, 85, 67, 25, 255, 89, 65, 28, 255, 87, 65, 27, 255, 91, 67, 31, 255, 85, 62, 34, 255, 90, 73, 27, 255, 87, 70, 22, 255, 91, 72, 26, 255, 98, 78, 26, 255, 93, 73, 29, 255, 87, 72, 33, 255, 86, 70, 29, 255, 95, 71, 28, 255, 98, 72, 25, 255, 105, 72, 42, 255, 109, 76, 38, 255, 110, 76, 32, 255, 113, 78, 36, 255, 119, 81, 34, 255, 122, 84, 27, 255, 125, 87, 30, 255, 117, 81, 39, 255, 109, 77, 32, 255, 113, 82, 37, 255, 112, 79, 37, 255, 113, 80, 37, 255, 112, 81, 40, 255, 112, 84, 37, 255, 114, 85, 30, 255, 118, 86, 33, 255, 121, 88, 36, 255, 120, 91, 32, 255, 121, 93, 40, 255, 124, 94, 45, 255, 126, 94, 38, 255, 128, 98, 42, 255, 127, 103, 43, 255, 128, 108, 51, 255, 127, 107, 48, 255, 131, 111, 55, 255, 135, 113, 60, 255, 134, 114, 56, 255, 137, 117, 56, 255, 137, 118, 56, 255, 135, 120, 59, 255, 135, 123, 68, 255, 157, 146, 90, 255, 148, 132, 79, 255, 140, 121, 56, 255, 148, 129, 57, 255, 147, 127, 56, 255, 147, 124, 61, 255, 153, 128, 71, 255, 154, 130, 69, 255, 149, 126, 50, 255, 158, 131, 49, 255, 155, 128, 55, 255, 146, 125, 47, 255, 136, 116, 47, 255, 133, 113, 49, 255, 131, 112, 46, 255, 124, 108, 46, 255, 122, 109, 42, 255, 125, 102, 39, 255, 130, 97, 49, 255, 128, 95, 43, 255, 125, 94, 29, 255, 128, 93, 26, 255, 131, 92, 35, 255, 134, 90, 26, 255, 129, 88, 25, 255, 129, 87, 26, 255, 124, 83, 35, 255, 115, 84, 33, 255, 119, 88, 18, 255, 127, 87, 15, 255, 128, 83, 19, 255, 129, 79, 24, 255, 129, 80, 19, 255, 131, 82, 17, 255, 128, 79, 14, 255, 130, 79, 15, 255, 128, 77, 19, 255, 128, 76, 22, 255, 128, 79, 16, 255, 122, 75, 20, 255, 117, 71, 12, 255, 121, 71, 15, 255, 124, 77, 12, 255, 127, 73, 11, 255, 124, 67, 13, 255, 125, 73, 13, 255, 131, 76, 9, 255, 134, 75, 7, 255, 137, 82, 5, 255, 150, 85, 5, 255, 156, 84, 15, 255, 165, 87, 15, 255, 164, 87, 10, 255, 150, 78, 11, 255, 138, 73, 3, 255, 128, 70, 11, 255, 126, 71, 10, 255, 124, 70, 4, 255, 123, 68, 8, 255, 121, 64, 9, 255, 118, 65, 5, 255, 120, 69, 7, 255, 124, 66, 7, 255, 126, 64, 5, 255, 125, 65, 6, 255, 121, 64, 4, 255, 129, 71, 10, 255, 134, 71, 6, 255, 133, 69, 5, 255, 131, 71, 5, 255, 129, 71, 5, 255, 132, 75, 8, 255, 145, 80, 12, 255, 159, 84, 14, 255, 168, 88, 8, 255, 170, 89, 7, 255, 178, 96, 14, 255, 170, 89, 3, 255, 167, 87, 7, 255, 164, 87, 8, 255, 159, 83, 2, 255, 154, 82, 8, 255, 145, 79, 2, 255, 141, 75, 2, 255, 138, 71, 1, 255, 136, 69, 3, 255, 131, 66, 12, 255, 127, 67, 5, 255, 133, 67, 2, 255, 137, 63, 8, 255, 128, 60, 9, 255, 121, 62, 6, 255, 120, 61, 2, 255, 124, 62, 6, 255, 123, 61, 4, 255, 120, 62, 0, 255, 117, 60, 1, 255, 118, 62, 2, 255, 118, 57, 4, 255, 110, 43, 5, 255, 98, 33, 4, 255, 89, 34, 1, 255, 98, 36, 11, 255, 102, 37, 5, 255, 87, 33, 7, 255, 90, 38, 10, 255, 102, 47, 3, 255, 96, 41, 8, 255, 100, 50, 14, 255, 98, 56, 8, 255, 96, 54, 10, 255, 93, 51, 9, 255, 91, 45, 16, 255, 98, 46, 17, 255, 101, 49, 10, 255, 100, 49, 13, 255, 35, 39, 101, 255, 26, 69, 108, 255, 23, 56, 78, 255, 10, 47, 75, 255, 13, 42, 73, 255, 5, 30, 50, 255, 0, 11, 19, 255, 0, 0, 4, 255, 4, 0, 4, 255, 2, 0, 7, 255, 5, 2, 19, 255, 8, 2, 25, 255, 5, 0, 32, 255, 1, 1, 23, 255, 4, 1, 4, 255, 3, 2, 4, 255, 2, 1, 7, 255, 1, 3, 3, 255, 0, 1, 1, 255, 0, 1, 3, 255, 0, 0, 3, 255, 2, 1, 3, 255, 1, 0, 2, 255, 2, 0, 2, 255, 2, 0, 2, 255, 2, 0, 1, 255, 6, 1, 4, 255, 2, 1, 6, 255, 5, 17, 31, 255, 4, 20, 20, 255, 2, 0, 5, 255, 8, 39, 96, 255, 16, 197, 239, 255, 15, 202, 167, 255, 4, 46, 34, 255, 31, 73, 83, 255, 116, 241, 248, 255, 44, 99, 103, 255, 0, 0, 0, 255, 5, 10, 7, 255, 1, 0, 0, 255, 3, 1, 2, 255, 0, 2, 3, 255, 2, 0, 2, 255, 1, 2, 9, 255, 5, 5, 31, 255, 5, 7, 32, 255, 3, 9, 22, 255, 0, 19, 26, 255, 5, 25, 35, 255, 4, 9, 23, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 1, 1, 255, 0, 1, 3, 255, 1, 1, 1, 255, 0, 0, 4, 255, 1, 1, 2, 255, 0, 0, 0, 255, 9, 9, 29, 255, 39, 41, 87, 255, 72, 79, 126, 255, 79, 89, 116, 255, 49, 58, 54, 255, 20, 24, 11, 255, 8, 5, 9, 255, 38, 30, 46, 255, 73, 79, 92, 255, 72, 79, 123, 255, 73, 72, 121, 255, 59, 66, 134, 255, 49, 49, 76, 255, 25, 22, 15, 255, 0, 0, 0, 255, 6, 2, 1, 255, 12, 6, 11, 255, 5, 4, 2, 255, 7, 3, 2, 255, 14, 6, 9, 255, 9, 7, 6, 255, 14, 9, 4, 255, 22, 15, 10, 255, 40, 25, 20, 255, 71, 44, 14, 255, 64, 43, 7, 255, 26, 22, 8, 255, 15, 16, 6, 255, 8, 8, 4, 255, 21, 19, 7, 255, 35, 28, 7, 255, 40, 27, 12, 255, 40, 26, 10, 255, 28, 19, 7, 255, 24, 19, 6, 255, 19, 18, 1, 255, 28, 23, 7, 255, 30, 20, 9, 255, 31, 18, 12, 255, 29, 24, 12, 255, 25, 24, 12, 255, 30, 27, 12, 255, 32, 27, 12, 255, 38, 31, 11, 255, 33, 25, 10, 255, 44, 29, 20, 255, 48, 28, 13, 255, 42, 31, 13, 255, 42, 30, 12, 255, 53, 33, 12, 255, 46, 26, 12, 255, 41, 31, 10, 255, 42, 30, 6, 255, 50, 33, 4, 255, 54, 28, 13, 255, 46, 29, 10, 255, 52, 31, 4, 255, 54, 29, 8, 255, 45, 32, 10, 255, 53, 36, 6, 255, 51, 38, 8, 255, 53, 35, 13, 255, 67, 41, 5, 255, 73, 43, 4, 255, 66, 35, 6, 255, 64, 37, 14, 255, 62, 38, 7, 255, 62, 38, 8, 255, 62, 34, 9, 255, 66, 34, 3, 255, 72, 36, 8, 255, 70, 37, 10, 255, 66, 40, 9, 255, 71, 47, 8, 255, 76, 47, 5, 255, 82, 47, 9, 255, 77, 42, 6, 255, 75, 45, 12, 255, 76, 47, 7, 255, 85, 50, 7, 255, 85, 46, 8, 255, 87, 51, 11, 255, 89, 52, 13, 255, 96, 54, 12, 255, 95, 55, 5, 255, 95, 53, 13, 255, 94, 56, 8, 255, 90, 55, 15, 255, 99, 62, 8, 255, 115, 69, 2, 255, 121, 66, 14, 255, 117, 68, 10, 255, 115, 68, 3, 255, 111, 68, 4, 255, 119, 71, 3, 255, 127, 75, 10, 255, 130, 84, 5, 255, 137, 88, 3, 255, 118, 74, 8, 255, 115, 69, 10, 255, 115, 64, 5, 255, 111, 64, 3, 255, 107, 60, 5, 255, 100, 57, 5, 255, 97, 58, 9, 255, 88, 51, 13, 255, 82, 48, 4, 255, 84, 51, 6, 255, 80, 48, 9, 255, 78, 44, 12, 255, 84, 48, 10, 255, 86, 52, 5, 255, 85, 52, 10, 255, 79, 46, 10, 255, 82, 47, 12, 255, 89, 51, 16, 255, 78, 51, 11, 255, 88, 56, 11, 255, 95, 55, 14, 255, 85, 57, 7, 255, 83, 58, 15, 255, 81, 53, 16, 255, 78, 55, 20, 255, 77, 55, 11, 255, 77, 54, 17, 255, 79, 56, 18, 255, 80, 56, 16, 255, 82, 59, 18, 255, 84, 62, 18, 255, 87, 57, 15, 255, 86, 63, 18, 255, 90, 60, 24, 255, 94, 64, 21, 255, 98, 63, 31, 255, 95, 62, 25, 255, 87, 64, 15, 255, 86, 65, 22, 255, 88, 66, 17, 255, 89, 66, 20, 255, 91, 65, 32, 255, 91, 67, 30, 255, 87, 65, 26, 255, 85, 68, 21, 255, 78, 67, 18, 255, 88, 67, 25, 255, 87, 67, 29, 255, 91, 72, 25, 255, 92, 69, 27, 255, 89, 70, 26, 255, 89, 71, 25, 255, 90, 69, 33, 255, 92, 70, 29, 255, 89, 69, 25, 255, 90, 74, 33, 255, 88, 73, 29, 255, 91, 72, 33, 255, 96, 77, 28, 255, 103, 76, 34, 255, 112, 77, 31, 255, 114, 77, 23, 255, 116, 75, 44, 255, 116, 78, 37, 255, 124, 79, 39, 255, 125, 82, 34, 255, 121, 84, 31, 255, 113, 81, 34, 255, 112, 81, 38, 255, 116, 83, 34, 255, 114, 81, 31, 255, 110, 79, 30, 255, 113, 82, 33, 255, 116, 85, 33, 255, 120, 86, 36, 255, 122, 87, 37, 255, 123, 89, 40, 255, 124, 94, 46, 255, 122, 94, 45, 255, 130, 98, 45, 255, 130, 99, 46, 255, 132, 107, 37, 255, 129, 106, 55, 255, 127, 103, 55, 255, 130, 108, 59, 255, 132, 112, 59, 255, 134, 113, 57, 255, 137, 117, 56, 255, 136, 116, 55, 255, 136, 120, 56, 255, 129, 119, 62, 255, 149, 141, 85, 255, 154, 141, 90, 255, 139, 121, 70, 255, 142, 122, 64, 255, 145, 124, 60, 255, 146, 124, 51, 255, 151, 126, 57, 255, 154, 129, 57, 255, 153, 128, 57, 255, 155, 129, 47, 255, 153, 127, 38, 255, 145, 120, 55, 255, 138, 116, 55, 255, 136, 114, 39, 255, 135, 110, 46, 255, 128, 107, 44, 255, 123, 108, 37, 255, 123, 103, 39, 255, 127, 100, 31, 255, 132, 96, 38, 255, 132, 96, 33, 255, 130, 94, 24, 255, 133, 95, 28, 255, 135, 89, 36, 255, 128, 87, 33, 255, 132, 87, 28, 255, 132, 86, 20, 255, 116, 84, 21, 255, 115, 82, 34, 255, 125, 82, 29, 255, 132, 84, 21, 255, 129, 77, 24, 255, 132, 80, 25, 255, 131, 82, 14, 255, 131, 80, 14, 255, 134, 80, 18, 255, 131, 79, 14, 255, 130, 77, 14, 255, 128, 77, 14, 255, 123, 75, 17, 255, 120, 75, 13, 255, 121, 75, 14, 255, 126, 76, 7, 255, 127, 73, 8, 255, 125, 71, 16, 255, 128, 74, 13, 255, 130, 73, 7, 255, 132, 75, 9, 255, 140, 81, 7, 255, 152, 84, 8, 255, 156, 86, 8, 255, 165, 90, 11, 255, 166, 89, 12, 255, 157, 85, 9, 255, 144, 78, 4, 255, 134, 73, 8, 255, 129, 69, 4, 255, 125, 66, 2, 255, 128, 69, 9, 255, 123, 66, 11, 255, 118, 67, 10, 255, 117, 66, 8, 255, 121, 68, 6, 255, 118, 67, 4, 255, 121, 68, 5, 255, 127, 69, 5, 255, 130, 69, 9, 255, 133, 71, 8, 255, 133, 69, 8, 255, 133, 69, 9, 255, 132, 72, 9, 255, 132, 73, 7, 255, 140, 76, 3, 255, 157, 86, 6, 255, 167, 90, 6, 255, 170, 89, 10, 255, 178, 93, 10, 255, 174, 93, 1, 255, 168, 90, 6, 255, 164, 88, 7, 255, 162, 87, 1, 255, 157, 81, 6, 255, 148, 79, 2, 255, 143, 76, 4, 255, 144, 76, 4, 255, 142, 74, 3, 255, 133, 68, 11, 255, 129, 66, 6, 255, 136, 67, 8, 255, 137, 67, 4, 255, 127, 63, 0, 255, 125, 64, 7, 255, 126, 63, 8, 255, 126, 62, 6, 255, 124, 61, 5, 255, 125, 64, 5, 255, 120, 58, 12, 255, 123, 59, 11, 255, 122, 60, 5, 255, 114, 49, 11, 255, 94, 28, 11, 255, 85, 28, 5, 255, 84, 33, 11, 255, 88, 36, 8, 255, 94, 36, 6, 255, 102, 45, 6, 255, 103, 49, 6, 255, 94, 42, 10, 255, 95, 47, 17, 255, 94, 49, 17, 255, 93, 51, 9, 255, 94, 55, 9, 255, 90, 46, 14, 255, 94, 41, 18, 255, 103, 46, 17, 255, 106, 49, 10, 255, 42, 92, 130, 255, 28, 74, 103, 255, 27, 58, 79, 255, 10, 49, 74, 255, 4, 56, 83, 255, 13, 54, 75, 255, 9, 32, 49, 255, 5, 14, 16, 255, 0, 0, 3, 255, 3, 1, 12, 255, 1, 0, 35, 255, 0, 2, 42, 255, 1, 0, 43, 255, 3, 2, 31, 255, 3, 1, 10, 255, 6, 1, 4, 255, 2, 2, 4, 255, 0, 3, 0, 255, 4, 1, 6, 255, 1, 0, 6, 255, 1, 0, 6, 255, 2, 1, 5, 255, 0, 0, 4, 255, 1, 0, 3, 255, 2, 1, 3, 255, 0, 2, 2, 255, 3, 1, 1, 255, 3, 0, 5, 255, 3, 2, 0, 255, 2, 0, 18, 255, 11, 87, 153, 255, 14, 216, 248, 255, 3, 165, 128, 255, 3, 23, 12, 255, 12, 55, 80, 255, 0, 21, 31, 255, 44, 90, 106, 255, 118, 243, 254, 255, 28, 86, 84, 255, 0, 0, 0, 255, 10, 10, 10, 255, 4, 0, 0, 255, 3, 0, 3, 255, 1, 5, 15, 255, 2, 6, 24, 255, 2, 5, 18, 255, 2, 2, 6, 255, 4, 9, 23, 255, 0, 21, 42, 255, 4, 34, 45, 255, 4, 14, 19, 255, 1, 0, 1, 255, 1, 1, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 2, 255, 2, 1, 5, 255, 2, 1, 1, 255, 0, 0, 0, 255, 1, 2, 15, 255, 34, 38, 80, 255, 68, 77, 130, 255, 66, 79, 112, 255, 47, 56, 67, 255, 16, 21, 21, 255, 5, 7, 10, 255, 26, 25, 44, 255, 73, 64, 103, 255, 77, 82, 133, 255, 44, 64, 169, 255, 42, 61, 147, 255, 43, 52, 57, 255, 11, 18, 35, 255, 0, 1, 2, 255, 1, 0, 0, 255, 6, 4, 4, 255, 2, 6, 4, 255, 3, 3, 2, 255, 9, 5, 4, 255, 8, 5, 3, 255, 6, 4, 3, 255, 7, 4, 3, 255, 15, 8, 5, 255, 24, 17, 9, 255, 42, 22, 7, 255, 37, 24, 4, 255, 13, 13, 3, 255, 12, 11, 6, 255, 22, 15, 7, 255, 38, 27, 9, 255, 47, 31, 10, 255, 38, 21, 10, 255, 20, 15, 4, 255, 16, 19, 5, 255, 20, 21, 6, 255, 23, 21, 9, 255, 22, 16, 9, 255, 26, 21, 14, 255, 27, 24, 12, 255, 28, 23, 3, 255, 30, 26, 5, 255, 28, 24, 14, 255, 33, 28, 18, 255, 37, 30, 14, 255, 43, 34, 2, 255, 46, 33, 9, 255, 44, 30, 11, 255, 42, 32, 14, 255, 47, 30, 14, 255, 49, 32, 10, 255, 44, 29, 11, 255, 38, 25, 13, 255, 42, 25, 13, 255, 42, 28, 12, 255, 43, 33, 8, 255, 46, 31, 9, 255, 45, 29, 14, 255, 45, 28, 9, 255, 45, 30, 8, 255, 40, 29, 15, 255, 46, 30, 14, 255, 53, 34, 2, 255, 59, 37, 11, 255, 58, 39, 13, 255, 58, 41, 5, 255, 58, 36, 10, 255, 68, 33, 13, 255, 58, 33, 6, 255, 59, 39, 7, 255, 66, 36, 10, 255, 72, 37, 12, 255, 71, 39, 9, 255, 70, 39, 8, 255, 74, 43, 4, 255, 71, 40, 4, 255, 77, 45, 6, 255, 79, 46, 8, 255, 77, 44, 16, 255, 76, 49, 6, 255, 77, 48, 12, 255, 90, 58, 8, 255, 89, 52, 9, 255, 95, 55, 11, 255, 90, 54, 8, 255, 87, 56, 6, 255, 87, 55, 8, 255, 95, 56, 4, 255, 100, 56, 9, 255, 96, 54, 7, 255, 101, 60, 10, 255, 110, 62, 11, 255, 121, 70, 8, 255, 114, 68, 7, 255, 105, 65, 5, 255, 111, 65, 13, 255, 121, 74, 8, 255, 122, 75, 7, 255, 130, 81, 9, 255, 138, 88, 5, 255, 122, 79, 7, 255, 114, 68, 7, 255, 116, 64, 9, 255, 110, 63, 13, 255, 103, 60, 6, 255, 100, 56, 12, 255, 101, 55, 9, 255, 96, 50, 6, 255, 87, 50, 4, 255, 81, 49, 11, 255, 77, 43, 13, 255, 80, 45, 15, 255, 88, 54, 12, 255, 90, 52, 6, 255, 79, 48, 12, 255, 80, 49, 22, 255, 89, 49, 15, 255, 92, 51, 10, 255, 89, 54, 14, 255, 92, 54, 11, 255, 89, 55, 13, 255, 85, 56, 10, 255, 85, 54, 15, 255, 86, 56, 18, 255, 82, 56, 19, 255, 81, 55, 15, 255, 79, 50, 27, 255, 82, 57, 16, 255, 83, 58, 17, 255, 83, 58, 19, 255, 84, 60, 11, 255, 86, 58, 12, 255, 85, 59, 13, 255, 89, 60, 25, 255, 97, 62, 18, 255, 96, 61, 27, 255, 90, 65, 24, 255, 87, 66, 23, 255, 82, 60, 15, 255, 84, 68, 21, 255, 83, 66, 25, 255, 92, 65, 27, 255, 88, 61, 28, 255, 93, 63, 18, 255, 91, 66, 27, 255, 86, 64, 22, 255, 95, 69, 18, 255, 84, 67, 32, 255, 83, 69, 30, 255, 93, 70, 27, 255, 92, 70, 27, 255, 89, 72, 24, 255, 92, 73, 26, 255, 94, 71, 38, 255, 95, 71, 33, 255, 92, 71, 17, 255, 92, 72, 26, 255, 90, 72, 33, 255, 91, 75, 20, 255, 98, 73, 23, 255, 111, 76, 34, 255, 113, 75, 38, 255, 112, 77, 32, 255, 120, 83, 31, 255, 126, 83, 26, 255, 128, 81, 31, 255, 125, 86, 33, 255, 115, 83, 31, 255, 114, 83, 28, 255, 115, 80, 30, 255, 117, 83, 36, 255, 113, 81, 30, 255, 112, 81, 33, 255, 118, 85, 41, 255, 118, 85, 36, 255, 125, 88, 36, 255, 126, 87, 42, 255, 122, 92, 47, 255, 119, 93, 39, 255, 128, 100, 35, 255, 131, 99, 46, 255, 128, 100, 48, 255, 128, 101, 51, 255, 130, 105, 48, 255, 131, 108, 52, 255, 132, 111, 48, 255, 134, 115, 53, 255, 136, 116, 56, 255, 137, 114, 57, 255, 140, 122, 49, 255, 130, 118, 56, 255, 140, 131, 72, 255, 159, 149, 89, 255, 143, 126, 70, 255, 140, 121, 54, 255, 142, 124, 51, 255, 147, 123, 55, 255, 152, 123, 55, 255, 152, 122, 55, 255, 153, 123, 60, 255, 156, 128, 47, 255, 157, 127, 46, 255, 149, 120, 50, 255, 139, 115, 46, 255, 138, 113, 36, 255, 138, 107, 41, 255, 133, 105, 38, 255, 125, 107, 25, 255, 123, 107, 45, 255, 129, 101, 38, 255, 135, 97, 30, 255, 136, 96, 31, 255, 130, 93, 25, 255, 131, 92, 30, 255, 134, 92, 29, 255, 128, 90, 25, 255, 134, 89, 21, 255, 137, 86, 17, 255, 120, 87, 22, 255, 117, 87, 28, 255, 126, 86, 24, 255, 131, 84, 22, 255, 133, 80, 24, 255, 135, 81, 24, 255, 133, 83, 11, 255, 135, 80, 19, 255, 136, 77, 20, 255, 131, 75, 14, 255, 133, 78, 11, 255, 128, 77, 12, 255, 120, 74, 9, 255, 120, 76, 12, 255, 120, 75, 14, 255, 122, 72, 8, 255, 119, 74, 8, 255, 122, 78, 14, 255, 128, 76, 10, 255, 128, 75, 12, 255, 133, 76, 17, 255, 141, 77, 7, 255, 157, 84, 17, 255, 162, 91, 10, 255, 165, 93, 3, 255, 162, 85, 4, 255, 162, 87, 7, 255, 147, 79, 4, 255, 137, 70, 7, 255, 131, 68, 8, 255, 124, 66, 3, 255, 125, 67, 6, 255, 123, 64, 4, 255, 124, 67, 8, 255, 128, 66, 12, 255, 123, 61, 8, 255, 120, 68, 6, 255, 125, 70, 7, 255, 134, 69, 6, 255, 136, 68, 10, 255, 134, 72, 7, 255, 135, 70, 3, 255, 134, 68, 3, 255, 132, 68, 4, 255, 135, 73, 7, 255, 147, 80, 7, 255, 156, 84, 2, 255, 161, 85, 6, 255, 172, 91, 13, 255, 179, 95, 9, 255, 180, 98, 6, 255, 171, 92, 5, 255, 167, 88, 8, 255, 170, 90, 7, 255, 163, 85, 2, 255, 153, 80, 1, 255, 149, 77, 11, 255, 151, 77, 9, 255, 150, 79, 4, 255, 139, 74, 5, 255, 128, 65, 8, 255, 133, 67, 7, 255, 137, 68, 4, 255, 136, 69, 9, 255, 129, 66, 7, 255, 124, 66, 1, 255, 126, 68, 3, 255, 128, 66, 10, 255, 131, 61, 7, 255, 126, 59, 5, 255, 122, 63, 6, 255, 123, 65, 8, 255, 122, 58, 7, 255, 92, 30, 6, 255, 82, 31, 4, 255, 82, 34, 7, 255, 91, 37, 6, 255, 103, 47, 4, 255, 102, 46, 4, 255, 99, 49, 12, 255, 97, 48, 20, 255, 95, 45, 12, 255, 96, 45, 12, 255, 100, 45, 14, 255, 106, 50, 10, 255, 102, 45, 15, 255, 102, 51, 17, 255, 104, 49, 9, 255, 109, 51, 8, 255, 33, 82, 94, 255, 40, 76, 113, 255, 31, 76, 134, 255, 28, 81, 117, 255, 17, 73, 107, 255, 17, 63, 92, 255, 12, 58, 63, 255, 8, 36, 51, 255, 4, 15, 35, 255, 3, 3, 23, 255, 2, 1, 35, 255, 0, 1, 51, 255, 4, 0, 51, 255, 1, 1, 24, 255, 0, 2, 4, 255, 1, 0, 5, 255, 1, 0, 5, 255, 1, 1, 1, 255, 1, 1, 4, 255, 1, 0, 6, 255, 0, 0, 3, 255, 0, 0, 3, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 2, 255, 0, 1, 1, 255, 1, 1, 5, 255, 3, 1, 2, 255, 1, 0, 0, 255, 5, 28, 46, 255, 9, 167, 171, 255, 5, 108, 81, 255, 3, 7, 0, 255, 4, 0, 0, 255, 4, 19, 25, 255, 17, 82, 103, 255, 0, 17, 20, 255, 38, 97, 113, 255, 99, 235, 255, 255, 23, 65, 77, 255, 0, 0, 0, 255, 7, 11, 24, 255, 4, 0, 15, 255, 3, 5, 21, 255, 2, 1, 11, 255, 2, 3, 10, 255, 1, 6, 10, 255, 2, 17, 29, 255, 3, 28, 37, 255, 1, 9, 11, 255, 0, 2, 0, 255, 2, 0, 2, 255, 0, 2, 1, 255, 0, 0, 0, 255, 1, 1, 2, 255, 3, 0, 1, 255, 0, 2, 0, 255, 0, 0, 1, 255, 0, 0, 0, 255, 1, 1, 0, 255, 0, 0, 0, 255, 0, 0, 2, 255, 0, 0, 2, 255, 0, 0, 2, 255, 0, 1, 0, 255, 0, 1, 0, 255, 0, 1, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 1, 0, 4, 255, 0, 0, 3, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 2, 0, 0, 255, 1, 0, 2, 255, 0, 2, 0, 255, 0, 2, 0, 255, 0, 0, 2, 255, 0, 0, 3, 255, 2, 0, 0, 255, 0, 0, 2, 255, 0, 1, 7, 255, 18, 20, 68, 255, 65, 68, 130, 255, 70, 80, 121, 255, 44, 57, 56, 255, 18, 29, 19, 255, 5, 6, 4, 255, 23, 14, 30, 255, 54, 54, 82, 255, 68, 69, 117, 255, 63, 66, 107, 255, 39, 59, 154, 255, 31, 47, 105, 255, 18, 20, 22, 255, 6, 3, 2, 255, 0, 0, 0, 255, 3, 1, 5, 255, 9, 2, 2, 255, 8, 3, 5, 255, 4, 2, 2, 255, 2, 3, 0, 255, 3, 4, 1, 255, 5, 5, 0, 255, 6, 5, 0, 255, 11, 6, 1, 255, 18, 14, 3, 255, 13, 11, 4, 255, 15, 10, 7, 255, 11, 10, 5, 255, 25, 20, 18, 255, 30, 24, 16, 255, 35, 30, 14, 255, 31, 21, 5, 255, 28, 20, 4, 255, 22, 13, 7, 255, 21, 14, 7, 255, 19, 21, 5, 255, 22, 20, 8, 255, 24, 24, 5, 255, 28, 22, 13, 255, 35, 28, 16, 255, 29, 24, 5, 255, 30, 27, 9, 255, 29, 26, 8, 255, 36, 27, 8, 255, 39, 28, 11, 255, 42, 32, 18, 255, 39, 32, 13, 255, 48, 35, 11, 255, 53, 35, 9, 255, 47, 31, 9, 255, 50, 32, 19, 255, 50, 36, 4, 255, 50, 35, 7, 255, 41, 32, 15, 255, 48, 31, 12, 255, 47, 28, 11, 255, 41, 27, 16, 255, 42, 28, 12, 255, 43, 28, 12, 255, 37, 27, 11, 255, 44, 31, 9, 255, 47, 30, 12, 255, 50, 33, 12, 255, 56, 34, 6, 255, 61, 35, 12, 255, 58, 33, 13, 255, 60, 36, 6, 255, 64, 36, 9, 255, 65, 29, 13, 255, 58, 33, 17, 255, 64, 36, 9, 255, 62, 36, 12, 255, 69, 36, 12, 255, 66, 39, 2, 255, 67, 39, 8, 255, 71, 41, 10, 255, 75, 41, 17, 255, 78, 43, 3, 255, 84, 49, 5, 255, 80, 42, 10, 255, 80, 43, 9, 255, 79, 45, 6, 255, 79, 47, 9, 255, 85, 51, 13, 255, 90, 52, 6, 255, 93, 53, 3, 255, 91, 54, 6, 255, 90, 56, 7, 255, 93, 58, 10, 255, 95, 55, 10, 255, 95, 57, 4, 255, 99, 59, 4, 255, 109, 64, 9, 255, 115, 65, 6, 255, 113, 67, 4, 255, 110, 66, 4, 255, 115, 66, 8, 255, 118, 71, 5, 255, 116, 71, 7, 255, 129, 80, 15, 255, 134, 82, 9, 255, 122, 74, 5, 255, 114, 66, 11, 255, 113, 66, 9, 255, 108, 63, 11, 255, 102, 61, 10, 255, 96, 53, 14, 255, 97, 54, 11, 255, 95, 53, 13, 255, 91, 53, 13, 255, 91, 54, 10, 255, 86, 50, 13, 255, 84, 52, 8, 255, 86, 57, 8, 255, 89, 51, 11, 255, 90, 48, 9, 255, 87, 53, 9, 255, 87, 48, 9, 255, 84, 54, 13, 255, 93, 59, 18, 255, 87, 53, 14, 255, 86, 58, 9, 255, 91, 58, 7, 255, 94, 54, 13, 255, 90, 53, 15, 255, 90, 55, 19, 255, 87, 54, 18, 255, 82, 55, 19, 255, 82, 57, 17, 255, 82, 54, 15, 255, 85, 57, 19, 255, 84, 60, 19, 255, 90, 59, 18, 255, 88, 62, 18, 255, 83, 64, 20, 255, 91, 69, 20, 255, 96, 67, 27, 255, 99, 68, 22, 255, 91, 64, 22, 255, 88, 63, 23, 255, 89, 60, 27, 255, 89, 65, 16, 255, 90, 65, 11, 255, 94, 68, 17, 255, 93, 69, 13, 255, 91, 67, 23, 255, 89, 68, 12, 255, 91, 68, 24, 255, 90, 69, 25, 255, 90, 70, 27, 255, 92, 71, 26, 255, 90, 69, 26, 255, 94, 70, 29, 255, 93, 64, 35, 255, 94, 69, 31, 255, 92, 72, 27, 255, 92, 74, 23, 255, 91, 72, 31, 255, 95, 71, 31, 255, 92, 71, 19, 255, 94, 75, 28, 255, 102, 74, 30, 255, 114, 76, 29, 255, 117, 80, 35, 255, 119, 80, 27, 255, 127, 84, 20, 255, 132, 84, 27, 255, 125, 81, 31, 255, 119, 78, 36, 255, 117, 80, 19, 255, 118, 83, 27, 255, 120, 80, 31, 255, 110, 83, 29, 255, 110, 82, 35, 255, 119, 82, 38, 255, 115, 87, 34, 255, 122, 87, 30, 255, 122, 88, 39, 255, 124, 90, 48, 255, 123, 90, 47, 255, 122, 94, 40, 255, 126, 100, 43, 255, 130, 102, 45, 255, 128, 99, 50, 255, 130, 104, 47, 255, 133, 108, 48, 255, 135, 110, 51, 255, 137, 113, 49, 255, 136, 114, 49, 255, 137, 111, 63, 255, 141, 116, 57, 255, 131, 118, 54, 255, 128, 119, 60, 255, 160, 148, 85, 255, 155, 137, 87, 255, 139, 120, 55, 255, 145, 123, 50, 255, 152, 124, 57, 255, 151, 120, 55, 255, 155, 124, 53, 255, 155, 126, 49, 255, 154, 123, 54, 255, 161, 129, 53, 255, 151, 122, 52, 255, 141, 117, 48, 255, 140, 114, 40, 255, 139, 112, 33, 255, 133, 107, 42, 255, 126, 105, 37, 255, 124, 105, 39, 255, 121, 104, 36, 255, 132, 97, 35, 255, 141, 96, 29, 255, 135, 96, 38, 255, 134, 92, 29, 255, 137, 94, 23, 255, 129, 91, 27, 255, 133, 88, 23, 255, 138, 87, 20, 255, 126, 85, 24, 255, 114, 84, 22, 255, 122, 85, 16, 255, 133, 85, 16, 255, 139, 87, 19, 255, 135, 80, 21, 255, 136, 82, 18, 255, 134, 76, 22, 255, 137, 78, 19, 255, 128, 79, 9, 255, 132, 78, 9, 255, 133, 76, 14, 255, 125, 75, 10, 255, 120, 76, 8, 255, 120, 75, 9, 255, 124, 73, 8, 255, 124, 74, 13, 255, 121, 74, 12, 255, 129, 79, 2, 255, 134, 79, 3, 255, 140, 80, 8, 255, 144, 79, 8, 255, 156, 86, 9, 255, 165, 93, 5, 255, 169, 94, 6, 255, 165, 88, 5, 255, 161, 85, 5, 255, 155, 82, 7, 255, 142, 76, 6, 255, 134, 72, 7, 255, 125, 65, 12, 255, 125, 68, 8, 255, 126, 69, 9, 255, 131, 71, 11, 255, 127, 65, 10, 255, 128, 66, 8, 255, 122, 67, 4, 255, 125, 68, 5, 255, 133, 69, 8, 255, 131, 68, 5, 255, 134, 72, 5, 255, 154, 70, 6, 255, 144, 69, 12, 255, 132, 67, 9, 255, 145, 77, 8, 255, 146, 77, 13, 255, 150, 80, 5, 255, 164, 89, 1, 255, 174, 95, 8, 255, 183, 102, 7, 255, 179, 98, 4, 255, 170, 88, 5, 255, 178, 93, 4, 255, 180, 95, 2, 255, 166, 92, 2, 255, 158, 83, 4, 255, 152, 75, 6, 255, 154, 77, 6, 255, 150, 76, 4, 255, 142, 73, 2, 255, 133, 71, 9, 255, 137, 69, 6, 255, 137, 66, 3, 255, 138, 69, 9, 255, 139, 66, 10, 255, 134, 67, 5, 255, 130, 71, 4, 255, 134, 68, 7, 255, 133, 70, 8, 255, 121, 68, 7, 255, 126, 65, 0, 255, 130, 62, 6, 255, 103, 40, 4, 255, 92, 34, 4, 255, 88, 40, 1, 255, 105, 41, 5, 255, 105, 44, 9, 255, 99, 49, 7, 255, 92, 50, 13, 255, 96, 54, 14, 255, 104, 53, 11, 255, 101, 49, 8, 255, 99, 44, 4, 255, 99, 40, 5, 255, 101, 48, 11, 255, 107, 49, 17, 255, 104, 43, 18, 255, 106, 44, 16, 255, 111, 48, 15, 255, 43, 82, 119, 255, 48, 94, 139, 255, 37, 99, 148, 255, 32, 97, 144, 255, 25, 86, 124, 255, 20, 71, 108, 255, 12, 68, 96, 255, 12, 61, 80, 255, 10, 49, 75, 255, 0, 28, 51, 255, 3, 9, 48, 255, 3, 1, 55, 255, 1, 2, 50, 255, 2, 1, 24, 255, 0, 1, 4, 255, 1, 0, 6, 255, 1, 0, 4, 255, 0, 0, 1, 255, 1, 0, 3, 255, 1, 0, 5, 255, 0, 0, 2, 255, 0, 0, 2, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 2, 255, 0, 0, 1, 255, 1, 1, 5, 255, 3, 2, 6, 255, 0, 2, 5, 255, 3, 6, 11, 255, 3, 5, 9, 255, 2, 1, 1, 255, 2, 3, 9, 255, 2, 3, 7, 255, 3, 1, 3, 255, 2, 18, 30, 255, 14, 86, 111, 255, 0, 12, 28, 255, 59, 119, 147, 255, 114, 247, 255, 255, 21, 57, 56, 255, 0, 4, 22, 255, 2, 11, 27, 255, 7, 0, 0, 255, 2, 2, 7, 255, 5, 6, 17, 255, 2, 20, 19, 255, 4, 22, 22, 255, 4, 4, 8, 255, 0, 2, 0, 255, 2, 0, 3, 255, 2, 2, 3, 255, 1, 2, 1, 255, 2, 1, 2, 255, 0, 1, 1, 255, 2, 0, 0, 255, 2, 2, 1, 255, 2, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 0, 255, 1, 1, 0, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 1, 0, 255, 1, 2, 1, 255, 0, 0, 1, 255, 0, 0, 2, 255, 1, 1, 0, 255, 5, 2, 2, 255, 4, 0, 4, 255, 2, 0, 3, 255, 2, 0, 2, 255, 0, 0, 0, 255, 2, 2, 4, 255, 15, 18, 56, 255, 48, 60, 133, 255, 71, 82, 133, 255, 50, 55, 77, 255, 30, 32, 26, 255, 9, 6, 3, 255, 19, 14, 16, 255, 48, 47, 65, 255, 57, 63, 105, 255, 35, 45, 132, 255, 49, 57, 120, 255, 59, 55, 65, 255, 4, 17, 30, 255, 0, 7, 4, 255, 1, 0, 0, 255, 5, 2, 3, 255, 3, 3, 0, 255, 1, 2, 5, 255, 5, 6, 1, 255, 3, 4, 0, 255, 7, 4, 2, 255, 9, 3, 4, 255, 8, 1, 5, 255, 8, 4, 4, 255, 8, 9, 1, 255, 11, 11, 1, 255, 11, 8, 7, 255, 14, 11, 8, 255, 27, 25, 7, 255, 34, 30, 2, 255, 39, 32, 4, 255, 32, 23, 4, 255, 21, 14, 3, 255, 24, 18, 6, 255, 19, 20, 6, 255, 20, 19, 7, 255, 28, 22, 14, 255, 26, 24, 12, 255, 28, 23, 13, 255, 29, 32, 10, 255, 29, 31, 8, 255, 38, 33, 6, 255, 38, 29, 5, 255, 34, 29, 11, 255, 34, 34, 8, 255, 38, 33, 11, 255, 42, 34, 10, 255, 44, 39, 5, 255, 47, 40, 5, 255, 54, 40, 4, 255, 61, 38, 4, 255, 51, 30, 13, 255, 47, 29, 8, 255, 56, 37, 4, 255, 48, 34, 1, 255, 50, 33, 6, 255, 47, 29, 7, 255, 40, 27, 10, 255, 42, 26, 10, 255, 38, 23, 5, 255, 42, 29, 14, 255, 44, 29, 11, 255, 47, 28, 2, 255, 50, 30, 7, 255, 51, 34, 6, 255, 53, 32, 5, 255, 59, 35, 8, 255, 62, 36, 13, 255, 67, 39, 13, 255, 69, 37, 10, 255, 62, 35, 11, 255, 57, 34, 10, 255, 63, 39, 11, 255, 63, 40, 11, 255, 64, 39, 8, 255, 70, 41, 11, 255, 72, 43, 12, 255, 71, 39, 4, 255, 76, 42, 15, 255, 76, 42, 7, 255, 82, 48, 9, 255, 79, 44, 4, 255, 80, 44, 8, 255, 78, 44, 8, 255, 76, 43, 7, 255, 79, 44, 14, 255, 86, 49, 4, 255, 88, 52, 7, 255, 89, 53, 5, 255, 91, 53, 3, 255, 91, 52, 9, 255, 91, 50, 13, 255, 93, 54, 13, 255, 95, 58, 7, 255, 108, 65, 11, 255, 112, 64, 7, 255, 114, 68, 8, 255, 111, 67, 6, 255, 117, 65, 9, 255, 119, 68, 14, 255, 117, 70, 4, 255, 127, 77, 6, 255, 133, 81, 8, 255, 121, 72, 3, 255, 112, 66, 8, 255, 110, 65, 4, 255, 110, 66, 7, 255, 106, 60, 5, 255, 100, 57, 5, 255, 99, 60, 4, 255, 93, 57, 3, 255, 93, 58, 6, 255, 93, 58, 5, 255, 88, 55, 1, 255, 87, 54, 7, 255, 86, 51, 9, 255, 89, 55, 9, 255, 97, 52, 11, 255, 94, 54, 19, 255, 87, 53, 15, 255, 87, 54, 13, 255, 92, 56, 17, 255, 95, 59, 14, 255, 93, 58, 11, 255, 85, 54, 8, 255, 88, 60, 17, 255, 83, 54, 19, 255, 85, 52, 21, 255, 85, 55, 13, 255, 81, 59, 10, 255, 81, 58, 17, 255, 88, 59, 27, 255, 84, 56, 20, 255, 81, 58, 15, 255, 93, 60, 17, 255, 92, 61, 15, 255, 90, 61, 19, 255, 95, 66, 22, 255, 96, 65, 23, 255, 98, 70, 19, 255, 94, 69, 13, 255, 87, 65, 13, 255, 93, 65, 19, 255, 99, 70, 21, 255, 93, 65, 26, 255, 94, 67, 23, 255, 95, 69, 17, 255, 96, 71, 18, 255, 91, 67, 19, 255, 87, 64, 19, 255, 93, 69, 28, 255, 90, 67, 20, 255, 92, 68, 25, 255, 93, 71, 25, 255, 94, 71, 23, 255, 95, 70, 24, 255, 87, 62, 39, 255, 91, 69, 32, 255, 97, 72, 31, 255, 97, 74, 25, 255, 92, 71, 18, 255, 97, 71, 20, 255, 98, 75, 22, 255, 101, 72, 25, 255, 114, 80, 23, 255, 112, 80, 30, 255, 122, 80, 31, 255, 125, 82, 22, 255, 128, 81, 22, 255, 124, 83, 27, 255, 115, 80, 36, 255, 112, 80, 27, 255, 119, 80, 29, 255, 118, 83, 26, 255, 116, 87, 30, 255, 109, 84, 17, 255, 117, 87, 22, 255, 120, 85, 37, 255, 123, 88, 37, 255, 122, 88, 40, 255, 124, 91, 39, 255, 128, 97, 38, 255, 126, 99, 31, 255, 125, 96, 43, 255, 129, 100, 40, 255, 133, 102, 44, 255, 134, 103, 53, 255, 131, 104, 52, 255, 135, 107, 48, 255, 138, 112, 48, 255, 138, 113, 47, 255, 138, 115, 37, 255, 142, 116, 53, 255, 136, 117, 51, 255, 127, 119, 37, 255, 152, 143, 74, 255, 163, 147, 100, 255, 139, 119, 65, 255, 143, 118, 58, 255, 148, 120, 59, 255, 151, 119, 63, 255, 154, 124, 51, 255, 157, 124, 52, 255, 161, 128, 37, 255, 162, 126, 38, 255, 153, 121, 41, 255, 141, 116, 36, 255, 141, 111, 46, 255, 140, 109, 43, 255, 134, 107, 38, 255, 127, 103, 36, 255, 120, 99, 32, 255, 121, 106, 35, 255, 133, 100, 38, 255, 139, 95, 33, 255, 134, 95, 31, 255, 136, 92, 30, 255, 136, 94, 22, 255, 132, 94, 19, 255, 133, 89, 21, 255, 137, 86, 21, 255, 127, 82, 28, 255, 116, 81, 26, 255, 120, 84, 18, 255, 129, 86, 14, 255, 134, 85, 19, 255, 133, 81, 19, 255, 133, 82, 13, 255, 134, 80, 20, 255, 133, 77, 24, 255, 128, 77, 6, 255, 133, 76, 13, 255, 138, 80, 19, 255, 128, 77, 10, 255, 123, 75, 14, 255, 124, 76, 9, 255, 122, 77, 8, 255, 120, 76, 6, 255, 120, 74, 12, 255, 124, 78, 11, 255, 130, 78, 16, 255, 146, 88, 16, 255, 144, 84, 11, 255, 155, 85, 8, 255, 166, 94, 7, 255, 167, 91, 7, 255, 165, 88, 8, 255, 166, 89, 11, 255, 159, 83, 11, 255, 144, 77, 9, 255, 133, 71, 2, 255, 126, 68, 6, 255, 128, 72, 7, 255, 122, 67, 7, 255, 127, 69, 6, 255, 128, 69, 7, 255, 124, 67, 1, 255, 128, 68, 4, 255, 133, 71, 7, 255, 129, 72, 8, 255, 133, 70, 7, 255, 135, 71, 5, 255, 145, 71, 6, 255, 134, 69, 6, 255, 127, 69, 3, 255, 145, 77, 7, 255, 145, 73, 15, 255, 155, 83, 10, 255, 165, 90, 5, 255, 177, 98, 15, 255, 186, 102, 12, 255, 182, 96, 6, 255, 184, 98, 7, 255, 183, 99, 0, 255, 185, 98, 4, 255, 175, 91, 4, 255, 167, 85, 6, 255, 159, 79, 5, 255, 155, 80, 3, 255, 150, 79, 1, 255, 144, 76, 2, 255, 142, 72, 2, 255, 146, 71, 10, 255, 142, 74, 5, 255, 134, 72, 1, 255, 136, 74, 7, 255, 136, 71, 8, 255, 134, 68, 7, 255, 135, 72, 6, 255, 138, 68, 7, 255, 138, 61, 9, 255, 137, 60, 9, 255, 126, 46, 1, 255, 91, 35, 1, 255, 92, 33, 9, 255, 112, 42, 12, 255, 121, 49, 2, 255, 107, 51, 7, 255, 90, 52, 10, 255, 99, 49, 16, 255, 100, 48, 18, 255, 101, 48, 14, 255, 104, 47, 12, 255, 106, 49, 12, 255, 103, 49, 12, 255, 102, 46, 12, 255, 100, 44, 14, 255, 96, 39, 20, 255, 101, 44, 17, 255, 108, 51, 10, 255, 35, 86, 118, 255, 31, 93, 147, 255, 37, 97, 156, 255, 39, 102, 156, 255, 21, 98, 141, 255, 18, 81, 125, 255, 24, 75, 115, 255, 22, 75, 102, 255, 10, 71, 100, 255, 4, 48, 99, 255, 1, 12, 76, 255, 1, 0, 56, 255, 3, 1, 47, 255, 1, 1, 19, 255, 0, 2, 3, 255, 1, 0, 4, 255, 1, 1, 1, 255, 1, 1, 2, 255, 1, 0, 3, 255, 0, 0, 4, 255, 0, 0, 2, 255, 0, 0, 3, 255, 1, 1, 2, 255, 1, 1, 1, 255, 1, 1, 3, 255, 1, 1, 2, 255, 1, 1, 0, 255, 0, 4, 5, 255, 3, 0, 3, 255, 1, 2, 2, 255, 3, 2, 0, 255, 4, 1, 5, 255, 0, 2, 3, 255, 3, 0, 6, 255, 5, 1, 6, 255, 2, 0, 0, 255, 7, 21, 35, 255, 12, 91, 125, 255, 0, 22, 49, 255, 84, 149, 180, 255, 119, 234, 239, 255, 14, 43, 52, 255, 2, 3, 9, 255, 3, 8, 21, 255, 5, 4, 18, 255, 1, 22, 22, 255, 2, 15, 14, 255, 0, 1, 2, 255, 2, 0, 3, 255, 2, 0, 0, 255, 4, 0, 2, 255, 1, 1, 1, 255, 3, 0, 3, 255, 2, 0, 5, 255, 0, 2, 2, 255, 2, 1, 4, 255, 2, 2, 3, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 3, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 3, 255, 1, 0, 3, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 2, 255, 1, 0, 0, 255, 0, 3, 4, 255, 1, 1, 3, 255, 2, 1, 3, 255, 0, 0, 0, 255, 11, 15, 44, 255, 38, 50, 103, 255, 63, 78, 136, 255, 57, 66, 94, 255, 24, 28, 34, 255, 7, 8, 8, 255, 8, 10, 16, 255, 38, 35, 57, 255, 47, 54, 99, 255, 34, 48, 107, 255, 27, 42, 125, 255, 22, 41, 121, 255, 25, 36, 56, 255, 13, 6, 0, 255, 0, 0, 1, 255, 1, 1, 5, 255, 3, 5, 3, 255, 4, 0, 3, 255, 8, 0, 4, 255, 5, 2, 1, 255, 2, 4, 3, 255, 5, 4, 3, 255, 6, 5, 0, 255, 7, 4, 0, 255, 9, 4, 2, 255, 11, 6, 4, 255, 11, 7, 5, 255, 18, 11, 5, 255, 30, 19, 7, 255, 38, 28, 6, 255, 34, 24, 2, 255, 29, 19, 11, 255, 21, 17, 9, 255, 20, 19, 5, 255, 23, 19, 4, 255, 29, 21, 7, 255, 26, 20, 9, 255, 28, 24, 9, 255, 26, 22, 13, 255, 22, 25, 9, 255, 26, 27, 7, 255, 31, 29, 11, 255, 33, 30, 14, 255, 34, 32, 8, 255, 35, 32, 11, 255, 42, 34, 12, 255, 42, 34, 7, 255, 39, 32, 10, 255, 45, 35, 6, 255, 48, 44, 1, 255, 43, 35, 5, 255, 50, 38, 12, 255, 53, 40, 3, 255, 52, 39, 8, 255, 50, 37, 6, 255, 46, 35, 8, 255, 42, 31, 9, 255, 46, 31, 5, 255, 39, 26, 8, 255, 37, 27, 12, 255, 43, 27, 10, 255, 46, 30, 9, 255, 45, 32, 14, 255, 50, 30, 6, 255, 57, 32, 1, 255, 53, 29, 8, 255, 55, 29, 12, 255, 55, 29, 10, 255, 59, 34, 7, 255, 60, 35, 12, 255, 62, 35, 14, 255, 63, 33, 8, 255, 66, 40, 9, 255, 66, 35, 6, 255, 63, 39, 8, 255, 66, 41, 2, 255, 69, 46, 2, 255, 78, 40, 8, 255, 69, 38, 6, 255, 70, 38, 11, 255, 72, 37, 11, 255, 79, 44, 11, 255, 78, 42, 17, 255, 84, 48, 12, 255, 79, 45, 5, 255, 77, 44, 9, 255, 76, 44, 12, 255, 77, 43, 14, 255, 78, 43, 6, 255, 82, 47, 6, 255, 82, 50, 5, 255, 92, 53, 8, 255, 96, 53, 9, 255, 96, 55, 9, 255, 95, 56, 6, 255, 94, 54, 3, 255, 102, 60, 8, 255, 113, 66, 13, 255, 114, 69, 12, 255, 109, 65, 5, 255, 116, 66, 6, 255, 119, 69, 13, 255, 116, 68, 5, 255, 125, 73, 2, 255, 138, 86, 6, 255, 120, 74, 1, 255, 113, 70, 6, 255, 112, 69, 7, 255, 112, 67, 8, 255, 111, 63, 7, 255, 107, 60, 7, 255, 103, 61, 15, 255, 101, 63, 9, 255, 95, 57, 9, 255, 93, 56, 13, 255, 92, 58, 5, 255, 90, 55, 14, 255, 93, 54, 10, 255, 93, 55, 9, 255, 95, 51, 19, 255, 93, 55, 14, 255, 94, 57, 12, 255, 95, 58, 19, 255, 90, 59, 10, 255, 98, 62, 7, 255, 96, 60, 11, 255, 85, 54, 10, 255, 87, 62, 13, 255, 86, 59, 11, 255, 86, 54, 18, 255, 88, 55, 25, 255, 83, 56, 12, 255, 85, 58, 8, 255, 97, 64, 25, 255, 90, 57, 21, 255, 87, 60, 13, 255, 89, 64, 14, 255, 86, 57, 20, 255, 92, 57, 24, 255, 102, 64, 20, 255, 101, 65, 20, 255, 98, 67, 18, 255, 96, 66, 17, 255, 92, 64, 25, 255, 90, 64, 20, 255, 97, 63, 15, 255, 96, 67, 21, 255, 91, 67, 18, 255, 98, 65, 23, 255, 97, 67, 13, 255, 97, 71, 19, 255, 92, 69, 17, 255, 93, 70, 21, 255, 91, 67, 21, 255, 94, 68, 24, 255, 94, 72, 22, 255, 91, 69, 23, 255, 94, 71, 23, 255, 89, 70, 10, 255, 93, 68, 27, 255, 100, 70, 33, 255, 97, 69, 16, 255, 95, 70, 22, 255, 103, 75, 28, 255, 102, 77, 17, 255, 102, 72, 26, 255, 109, 74, 34, 255, 113, 82, 27, 255, 122, 79, 30, 255, 127, 80, 38, 255, 129, 80, 41, 255, 129, 82, 31, 255, 120, 80, 21, 255, 120, 84, 16, 255, 122, 79, 27, 255, 116, 83, 31, 255, 119, 88, 28, 255, 112, 84, 28, 255, 115, 89, 34, 255, 129, 89, 28, 255, 124, 90, 38, 255, 124, 92, 33, 255, 126, 92, 42, 255, 128, 96, 39, 255, 126, 97, 28, 255, 127, 96, 40, 255, 132, 101, 42, 255, 131, 100, 44, 255, 133, 104, 41, 255, 132, 104, 41, 255, 133, 103, 51, 255, 137, 107, 47, 255, 138, 109, 55, 255, 138, 110, 60, 255, 143, 115, 55, 255, 144, 120, 40, 255, 134, 117, 43, 255, 138, 128, 64, 255, 168, 154, 96, 255, 147, 127, 63, 255, 145, 118, 52, 255, 149, 121, 44, 255, 152, 121, 50, 255, 154, 121, 49, 255, 158, 124, 44, 255, 167, 129, 43, 255, 166, 124, 35, 255, 156, 119, 39, 255, 145, 117, 38, 255, 142, 111, 45, 255, 143, 108, 44, 255, 139, 106, 41, 255, 132, 105, 33, 255, 129, 105, 38, 255, 121, 104, 34, 255, 128, 97, 34, 255, 134, 92, 32, 255, 135, 97, 25, 255, 138, 96, 33, 255, 137, 90, 30, 255, 136, 91, 25, 255, 135, 87, 27, 255, 138, 88, 22, 255, 131, 86, 19, 255, 124, 87, 17, 255, 122, 86, 14, 255, 129, 87, 18, 255, 134, 83, 23, 255, 139, 83, 20, 255, 140, 83, 18, 255, 134, 77, 20, 255, 136, 82, 22, 255, 135, 80, 15, 255, 136, 77, 12, 255, 136, 77, 13, 255, 131, 75, 18, 255, 124, 75, 7, 255, 125, 76, 13, 255, 124, 77, 11, 255, 133, 77, 12, 255, 133, 73, 4, 255, 127, 76, 16, 255, 130, 78, 13, 255, 140, 82, 23, 255, 142, 85, 21, 255, 153, 84, 13, 255, 159, 88, 5, 255, 165, 90, 6, 255, 173, 96, 10, 255, 170, 93, 9, 255, 163, 86, 9, 255, 148, 81, 11, 255, 141, 78, 7, 255, 132, 73, 2, 255, 128, 72, 3, 255, 127, 71, 9, 255, 129, 71, 7, 255, 126, 70, 5, 255, 129, 70, 4, 255, 129, 67, 3, 255, 128, 68, 3, 255, 131, 71, 5, 255, 129, 73, 5, 255, 135, 70, 5, 255, 137, 71, 9, 255, 129, 67, 9, 255, 132, 72, 9, 255, 145, 77, 3, 255, 144, 77, 5, 255, 148, 83, 5, 255, 165, 92, 11, 255, 180, 100, 11, 255, 183, 98, 1, 255, 183, 95, 1, 255, 189, 101, 4, 255, 184, 97, 2, 255, 181, 95, 7, 255, 174, 91, 6, 255, 168, 85, 4, 255, 163, 86, 5, 255, 159, 85, 4, 255, 154, 81, 3, 255, 149, 77, 4, 255, 145, 74, 7, 255, 141, 72, 8, 255, 145, 74, 0, 255, 146, 72, 6, 255, 144, 74, 3, 255, 147, 75, 1, 255, 149, 70, 2, 255, 142, 64, 1, 255, 132, 52, 4, 255, 112, 40, 7, 255, 113, 48, 12, 255, 104, 37, 15, 255, 93, 33, 4, 255, 111, 47, 12, 255, 131, 53, 4, 255, 113, 52, 5, 255, 93, 50, 8, 255, 99, 49, 10, 255, 100, 48, 9, 255, 98, 42, 11, 255, 93, 41, 11, 255, 103, 46, 13, 255, 103, 48, 10, 255, 99, 47, 7, 255, 107, 48, 12, 255, 106, 50, 15, 255, 104, 47, 15, 255, 107, 49, 12, 255, 110, 51, 7, 255, 26, 81, 110, 255, 26, 91, 137, 255, 31, 96, 138, 255, 38, 101, 149, 255, 34, 101, 148, 255, 29, 97, 141, 255, 18, 87, 131, 255, 29, 82, 128, 255, 22, 85, 117, 255, 9, 51, 122, 255, 3, 4, 83, 255, 1, 1, 61, 255, 1, 0, 47, 255, 1, 0, 13, 255, 0, 0, 3, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 0, 2, 255, 2, 0, 5, 255, 0, 0, 5, 255, 0, 0, 2, 255, 1, 1, 3, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 2, 255, 3, 0, 3, 255, 3, 1, 4, 255, 0, 1, 3, 255, 5, 1, 1, 255, 1, 1, 2, 255, 2, 1, 3, 255, 1, 3, 2, 255, 1, 3, 2, 255, 2, 2, 5, 255, 0, 2, 0, 255, 1, 8, 10, 255, 1, 5, 6, 255, 6, 31, 52, 255, 9, 81, 116, 255, 3, 25, 41, 255, 86, 176, 190, 255, 100, 214, 220, 255, 10, 28, 38, 255, 4, 12, 23, 255, 3, 21, 28, 255, 3, 19, 18, 255, 5, 6, 10, 255, 3, 0, 4, 255, 0, 2, 2, 255, 0, 2, 1, 255, 1, 2, 0, 255, 2, 3, 5, 255, 1, 0, 3, 255, 5, 2, 2, 255, 2, 1, 0, 255, 2, 0, 0, 255, 3, 1, 3, 255, 0, 1, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 1, 1, 1, 255, 1, 1, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 1, 1, 6, 255, 1, 1, 8, 255, 1, 1, 7, 255, 2, 1, 5, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 0, 0, 2, 255, 1, 1, 2, 255, 0, 0, 1, 255, 0, 0, 2, 255, 1, 1, 6, 255, 1, 2, 7, 255, 3, 2, 5, 255, 0, 0, 0, 255, 3, 7, 24, 255, 29, 40, 94, 255, 51, 71, 123, 255, 46, 67, 105, 255, 22, 36, 45, 255, 8, 7, 9, 255, 3, 7, 8, 255, 32, 33, 69, 255, 58, 60, 104, 255, 45, 53, 98, 255, 22, 37, 108, 255, 24, 34, 95, 255, 21, 22, 48, 255, 5, 6, 4, 255, 0, 0, 0, 255, 2, 1, 5, 255, 4, 1, 3, 255, 6, 2, 0, 255, 4, 3, 2, 255, 4, 2, 4, 255, 5, 2, 2, 255, 4, 2, 1, 255, 2, 0, 5, 255, 6, 1, 1, 255, 6, 3, 2, 255, 5, 4, 1, 255, 7, 5, 2, 255, 14, 8, 4, 255, 23, 15, 8, 255, 33, 21, 10, 255, 29, 20, 4, 255, 23, 20, 2, 255, 22, 17, 7, 255, 26, 18, 13, 255, 27, 16, 6, 255, 26, 20, 5, 255, 26, 23, 12, 255, 26, 21, 7, 255, 30, 28, 14, 255, 33, 31, 8, 255, 35, 27, 10, 255, 30, 28, 6, 255, 34, 37, 8, 255, 42, 34, 10, 255, 42, 33, 8, 255, 36, 41, 5, 255, 32, 38, 9, 255, 45, 38, 11, 255, 45, 39, 8, 255, 40, 38, 11, 255, 42, 35, 10, 255, 48, 39, 10, 255, 46, 35, 7, 255, 54, 40, 13, 255, 54, 39, 6, 255, 51, 40, 6, 255, 52, 34, 12, 255, 46, 36, 17, 255, 50, 31, 20, 255, 48, 29, 9, 255, 39, 27, 4, 255, 44, 31, 9, 255, 43, 28, 9, 255, 48, 31, 7, 255, 45, 30, 6, 255, 47, 31, 8, 255, 59, 38, 7, 255, 58, 33, 5, 255, 62, 33, 14, 255, 57, 31, 8, 255, 63, 39, 5, 255, 60, 36, 3, 255, 63, 36, 9, 255, 64, 36, 7, 255, 67, 33, 11, 255, 74, 36, 17, 255, 71, 38, 12, 255, 67, 40, 7, 255, 75, 47, 5, 255, 87, 41, 11, 255, 66, 36, 13, 255, 68, 40, 7, 255, 74, 43, 2, 255, 77, 43, 9, 255, 80, 45, 11, 255, 85, 50, 4, 255, 80, 44, 3, 255, 74, 45, 9, 255, 73, 44, 13, 255, 73, 42, 9, 255, 79, 42, 16, 255, 81, 46, 8, 255, 80, 48, 5, 255, 89, 52, 7, 255, 93, 54, 9, 255, 95, 55, 10, 255, 99, 57, 12, 255, 101, 58, 10, 255, 104, 59, 10, 255, 110, 62, 8, 255, 111, 63, 2, 255, 112, 66, 12, 255, 118, 69, 9, 255, 115, 70, 0, 255, 111, 66, 4, 255, 122, 73, 11, 255, 131, 80, 12, 255, 118, 72, 9, 255, 107, 68, 7, 255, 108, 68, 7, 255, 116, 71, 8, 255, 118, 70, 6, 255, 117, 69, 6, 255, 111, 67, 6, 255, 107, 67, 5, 255, 105, 64, 11, 255, 102, 62, 14, 255, 99, 62, 11, 255, 95, 59, 15, 255, 97, 59, 6, 255, 98, 57, 7, 255, 97, 58, 12, 255, 91, 58, 7, 255, 97, 54, 11, 255, 94, 57, 7, 255, 93, 59, 8, 255, 93, 58, 7, 255, 93, 58, 15, 255, 91, 57, 13, 255, 91, 58, 14, 255, 91, 59, 11, 255, 89, 57, 12, 255, 87, 52, 22, 255, 88, 55, 14, 255, 89, 58, 4, 255, 96, 63, 14, 255, 91, 57, 17, 255, 88, 55, 18, 255, 81, 60, 16, 255, 82, 60, 19, 255, 90, 63, 18, 255, 97, 65, 15, 255, 101, 64, 20, 255, 102, 65, 22, 255, 101, 66, 23, 255, 91, 64, 20, 255, 86, 60, 31, 255, 101, 65, 22, 255, 94, 65, 23, 255, 92, 68, 20, 255, 101, 62, 31, 255, 100, 69, 16, 255, 98, 71, 13, 255, 94, 66, 30, 255, 90, 67, 19, 255, 96, 73, 19, 255, 95, 67, 27, 255, 91, 67, 28, 255, 95, 67, 30, 255, 101, 70, 27, 255, 102, 72, 24, 255, 96, 68, 22, 255, 98, 72, 21, 255, 96, 68, 25, 255, 100, 69, 32, 255, 98, 70, 30, 255, 98, 73, 28, 255, 100, 74, 28, 255, 106, 72, 27, 255, 120, 78, 31, 255, 119, 81, 30, 255, 123, 82, 35, 255, 125, 81, 30, 255, 127, 83, 20, 255, 123, 81, 18, 255, 117, 77, 21, 255, 122, 79, 31, 255, 121, 85, 30, 255, 113, 78, 26, 255, 112, 80, 38, 255, 112, 82, 40, 255, 124, 87, 32, 255, 125, 89, 29, 255, 123, 92, 29, 255, 124, 91, 36, 255, 126, 93, 45, 255, 128, 93, 44, 255, 131, 96, 45, 255, 131, 99, 44, 255, 130, 99, 42, 255, 133, 107, 36, 255, 136, 110, 44, 255, 138, 111, 43, 255, 138, 111, 32, 255, 140, 114, 43, 255, 139, 116, 51, 255, 141, 115, 46, 255, 147, 115, 53, 255, 140, 116, 53, 255, 130, 118, 45, 255, 164, 153, 86, 255, 159, 140, 85, 255, 148, 114, 48, 255, 154, 119, 50, 255, 154, 120, 46, 255, 154, 121, 40, 255, 159, 123, 41, 255, 165, 125, 49, 255, 169, 126, 42, 255, 159, 122, 34, 255, 148, 121, 35, 255, 142, 113, 34, 255, 144, 113, 22, 255, 141, 109, 32, 255, 134, 105, 37, 255, 130, 103, 36, 255, 126, 105, 31, 255, 129, 102, 30, 255, 133, 96, 31, 255, 135, 95, 30, 255, 135, 93, 23, 255, 138, 90, 27, 255, 137, 89, 24, 255, 138, 89, 20, 255, 140, 87, 28, 255, 136, 87, 21, 255, 128, 85, 23, 255, 124, 86, 12, 255, 127, 83, 15, 255, 138, 83, 22, 255, 143, 80, 21, 255, 140, 77, 22, 255, 141, 82, 21, 255, 139, 82, 15, 255, 133, 79, 13, 255, 135, 79, 14, 255, 133, 77, 11, 255, 131, 76, 14, 255, 123, 74, 11, 255, 127, 77, 14, 255, 123, 73, 8, 255, 144, 81, 9, 255, 151, 82, 4, 255, 134, 78, 10, 255, 138, 81, 13, 255, 142, 80, 16, 255, 148, 90, 15, 255, 153, 87, 9, 255, 160, 92, 4, 255, 166, 93, 2, 255, 177, 101, 8, 255, 174, 98, 6, 255, 166, 88, 5, 255, 157, 84, 9, 255, 149, 80, 8, 255, 140, 75, 5, 255, 134, 74, 3, 255, 132, 74, 6, 255, 131, 70, 8, 255, 127, 68, 8, 255, 129, 72, 13, 255, 134, 72, 14, 255, 130, 67, 6, 255, 132, 75, 8, 255, 132, 73, 4, 255, 135, 72, 8, 255, 131, 70, 8, 255, 129, 69, 7, 255, 134, 73, 5, 255, 145, 76, 5, 255, 143, 75, 8, 255, 148, 80, 8, 255, 165, 88, 6, 255, 174, 96, 5, 255, 177, 96, 6, 255, 183, 100, 3, 255, 187, 102, 0, 255, 191, 103, 5, 255, 185, 99, 3, 255, 179, 96, 5, 255, 173, 91, 0, 255, 171, 91, 3, 255, 167, 87, 1, 255, 164, 83, 3, 255, 161, 78, 4, 255, 152, 77, 6, 255, 150, 79, 6, 255, 153, 75, 2, 255, 156, 76, 7, 255, 152, 78, 7, 255, 146, 66, 3, 255, 147, 52, 5, 255, 145, 59, 3, 255, 107, 42, 4, 255, 103, 38, 6, 255, 108, 37, 5, 255, 84, 31, 9, 255, 113, 43, 8, 255, 122, 54, 3, 255, 105, 49, 5, 255, 84, 43, 21, 255, 92, 41, 11, 255, 100, 44, 8, 255, 93, 43, 8, 255, 100, 50, 8, 255, 102, 48, 9, 255, 106, 51, 15, 255, 104, 51, 13, 255, 104, 52, 9, 255, 110, 57, 12, 255, 115, 59, 12, 255, 114, 52, 9, 255, 112, 49, 8, 255, 110, 43, 7, 255, 27, 69, 100, 255, 26, 83, 105, 255, 25, 85, 127, 255, 27, 97, 139, 255, 37, 106, 142, 255, 44, 100, 152, 255, 24, 100, 158, 255, 22, 96, 150, 255, 24, 103, 134, 255, 5, 48, 123, 255, 0, 2, 80, 255, 0, 4, 59, 255, 1, 0, 31, 255, 2, 1, 8, 255, 1, 1, 4, 255, 1, 1, 4, 255, 0, 0, 1, 255, 0, 0, 3, 255, 0, 0, 2, 255, 1, 0, 4, 255, 1, 1, 3, 255, 1, 1, 3, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 2, 255, 1, 1, 3, 255, 2, 2, 4, 255, 2, 2, 7, 255, 0, 1, 2, 255, 1, 1, 2, 255, 2, 1, 4, 255, 4, 1, 5, 255, 3, 1, 4, 255, 3, 1, 0, 255, 0, 2, 2, 255, 4, 3, 12, 255, 6, 21, 22, 255, 1, 8, 4, 255, 7, 42, 66, 255, 8, 91, 117, 255, 2, 20, 37, 255, 79, 168, 182, 255, 85, 211, 210, 255, 4, 31, 31, 255, 0, 28, 24, 255, 3, 25, 28, 255, 3, 3, 10, 255, 5, 0, 1, 255, 1, 1, 1, 255, 1, 3, 3, 255, 1, 2, 3, 255, 0, 3, 3, 255, 5, 2, 9, 255, 3, 0, 0, 255, 3, 20, 52, 255, 4, 32, 68, 255, 0, 2, 4, 255, 1, 0, 2, 255, 0, 0, 0, 255, 0, 0, 2, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 1, 255, 2, 1, 7, 255, 0, 3, 19, 255, 2, 4, 19, 255, 1, 2, 13, 255, 1, 0, 6, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 1, 255, 1, 1, 0, 255, 0, 0, 0, 255, 0, 0, 3, 255, 1, 2, 3, 255, 0, 2, 0, 255, 0, 0, 0, 255, 6, 2, 13, 255, 26, 29, 76, 255, 44, 63, 115, 255, 45, 61, 92, 255, 33, 39, 47, 255, 9, 13, 9, 255, 8, 2, 7, 255, 42, 28, 60, 255, 57, 58, 107, 255, 48, 58, 113, 255, 33, 40, 119, 255, 25, 46, 93, 255, 30, 24, 36, 255, 8, 8, 10, 255, 0, 1, 0, 255, 2, 1, 0, 255, 1, 3, 2, 255, 0, 1, 2, 255, 3, 2, 5, 255, 5, 3, 2, 255, 5, 2, 0, 255, 3, 4, 1, 255, 2, 4, 0, 255, 6, 5, 4, 255, 8, 3, 3, 255, 11, 6, 6, 255, 11, 4, 2, 255, 16, 8, 5, 255, 26, 17, 13, 255, 25, 20, 12, 255, 20, 19, 5, 255, 13, 11, 2, 255, 16, 14, 4, 255, 19, 17, 9, 255, 24, 21, 12, 255, 27, 26, 3, 255, 28, 26, 3, 255, 26, 24, 9, 255, 28, 26, 14, 255, 29, 26, 7, 255, 30, 30, 6, 255, 41, 39, 7, 255, 42, 36, 5, 255, 46, 42, 11, 255, 47, 45, 10, 255, 45, 42, 7, 255, 49, 45, 13, 255, 43, 45, 6, 255, 37, 39, 7, 255, 42, 40, 10, 255, 39, 38, 6, 255, 43, 41, 9, 255, 44, 37, 9, 255, 44, 32, 12, 255, 52, 38, 13, 255, 51, 34, 5, 255, 56, 40, 11, 255, 48, 37, 7, 255, 48, 34, 14, 255, 46, 31, 4, 255, 48, 33, 7, 255, 47, 28, 9, 255, 41, 31, 10, 255, 45, 32, 4, 255, 43, 29, 10, 255, 44, 29, 5, 255, 46, 28, 5, 255, 45, 31, 11, 255, 50, 35, 5, 255, 58, 38, 7, 255, 53, 34, 11, 255, 53, 33, 6, 255, 62, 38, 7, 255, 71, 41, 7, 255, 71, 36, 8, 255, 69, 34, 7, 255, 70, 37, 9, 255, 68, 37, 11, 255, 70, 37, 5, 255, 64, 40, 12, 255, 79, 43, 9, 255, 79, 38, 11, 255, 62, 34, 17, 255, 70, 43, 7, 255, 75, 47, 4, 255, 76, 43, 5, 255, 81, 46, 6, 255, 86, 51, 1, 255, 83, 47, 8, 255, 76, 48, 10, 255, 74, 45, 8, 255, 73, 40, 8, 255, 79, 42, 13, 255, 81, 45, 12, 255, 81, 46, 6, 255, 80, 46, 1, 255, 87, 53, 6, 255, 94, 57, 7, 255, 96, 55, 8, 255, 99, 53, 7, 255, 100, 55, 7, 255, 108, 62, 7, 255, 114, 65, 5, 255, 113, 67, 7, 255, 117, 69, 5, 255, 112, 64, 13, 255, 107, 65, 9, 255, 118, 75, 3, 255, 129, 78, 14, 255, 120, 73, 14, 255, 111, 70, 8, 255, 114, 70, 8, 255, 124, 76, 8, 255, 125, 74, 5, 255, 123, 71, 10, 255, 120, 71, 5, 255, 114, 67, 4, 255, 113, 66, 10, 255, 112, 67, 8, 255, 107, 65, 8, 255, 104, 65, 5, 255, 104, 63, 4, 255, 100, 63, 9, 255, 105, 65, 2, 255, 99, 63, 11, 255, 96, 59, 8, 255, 98, 62, 6, 255, 102, 60, 8, 255, 100, 60, 10, 255, 94, 60, 18, 255, 94, 59, 13, 255, 92, 54, 15, 255, 88, 56, 17, 255, 84, 57, 13, 255, 83, 56, 18, 255, 83, 55, 14, 255, 88, 58, 21, 255, 88, 59, 10, 255, 88, 61, 5, 255, 87, 59, 14, 255, 90, 60, 16, 255, 90, 62, 22, 255, 92, 68, 15, 255, 93, 68, 7, 255, 97, 68, 12, 255, 102, 70, 24, 255, 97, 64, 16, 255, 94, 68, 7, 255, 91, 67, 12, 255, 99, 66, 15, 255, 95, 65, 15, 255, 100, 70, 20, 255, 102, 65, 19, 255, 101, 73, 11, 255, 99, 70, 16, 255, 99, 72, 19, 255, 94, 66, 28, 255, 96, 71, 26, 255, 93, 71, 13, 255, 94, 70, 17, 255, 98, 66, 35, 255, 104, 71, 26, 255, 104, 71, 27, 255, 100, 71, 23, 255, 96, 71, 19, 255, 100, 70, 30, 255, 100, 66, 32, 255, 97, 73, 25, 255, 100, 77, 25, 255, 95, 71, 29, 255, 107, 75, 22, 255, 128, 80, 26, 255, 127, 83, 24, 255, 127, 84, 20, 255, 128, 84, 22, 255, 127, 82, 28, 255, 124, 81, 33, 255, 116, 80, 25, 255, 119, 81, 31, 255, 124, 80, 31, 255, 118, 82, 29, 255, 117, 85, 31, 255, 115, 85, 23, 255, 115, 85, 20, 255, 123, 88, 24, 255, 125, 90, 31, 255, 123, 90, 36, 255, 130, 97, 30, 255, 131, 95, 42, 255, 130, 96, 40, 255, 130, 98, 42, 255, 131, 99, 49, 255, 131, 102, 47, 255, 133, 108, 33, 255, 136, 107, 43, 255, 137, 105, 57, 255, 139, 110, 45, 255, 139, 112, 53, 255, 139, 115, 32, 255, 143, 113, 35, 255, 144, 116, 50, 255, 132, 116, 33, 255, 153, 140, 68, 255, 165, 149, 98, 255, 149, 114, 50, 255, 156, 118, 50, 255, 156, 118, 55, 255, 157, 122, 41, 255, 161, 125, 37, 255, 162, 125, 34, 255, 169, 126, 41, 255, 162, 122, 37, 255, 149, 122, 28, 255, 142, 114, 27, 255, 143, 111, 25, 255, 139, 107, 32, 255, 134, 103, 38, 255, 129, 100, 22, 255, 128, 102, 37, 255, 130, 102, 35, 255, 132, 97, 19, 255, 135, 95, 21, 255, 137, 93, 25, 255, 139, 91, 29, 255, 138, 88, 24, 255, 139, 88, 29, 255, 140, 90, 18, 255, 140, 88, 19, 255, 131, 84, 10, 255, 125, 89, 7, 255, 124, 86, 18, 255, 133, 81, 28, 255, 140, 83, 12, 255, 143, 86, 13, 255, 139, 83, 17, 255, 138, 83, 19, 255, 134, 81, 13, 255, 135, 82, 13, 255, 133, 80, 10, 255, 133, 80, 13, 255, 128, 77, 15, 255, 127, 76, 12, 255, 126, 81, 13, 255, 132, 79, 8, 255, 143, 81, 18, 255, 136, 81, 13, 255, 138, 80, 3, 255, 144, 76, 13, 255, 148, 83, 19, 255, 153, 91, 12, 255, 162, 95, 8, 255, 170, 96, 5, 255, 179, 101, 2, 255, 180, 102, 0, 255, 177, 98, 1, 255, 167, 90, 5, 255, 156, 80, 6, 255, 146, 75, 7, 255, 139, 75, 5, 255, 134, 74, 1, 255, 131, 69, 7, 255, 132, 73, 13, 255, 129, 72, 14, 255, 136, 70, 16, 255, 135, 70, 9, 255, 133, 74, 5, 255, 135, 74, 4, 255, 136, 70, 5, 255, 137, 71, 12, 255, 135, 72, 11, 255, 136, 74, 7, 255, 141, 73, 5, 255, 146, 81, 10, 255, 151, 84, 7, 255, 166, 89, 4, 255, 173, 96, 9, 255, 175, 97, 13, 255, 186, 106, 3, 255, 195, 111, 0, 255, 190, 99, 7, 255, 180, 90, 3, 255, 178, 95, 3, 255, 176, 93, 2, 255, 175, 94, 4, 255, 170, 90, 4, 255, 165, 86, 5, 255, 164, 85, 9, 255, 153, 82, 7, 255, 154, 79, 8, 255, 160, 78, 3, 255, 156, 75, 0, 255, 135, 60, 2, 255, 128, 50, 3, 255, 137, 56, 4, 255, 130, 55, 2, 255, 96, 31, 2, 255, 92, 34, 5, 255, 90, 29, 3, 255, 92, 39, 7, 255, 114, 53, 13, 255, 101, 45, 7, 255, 95, 55, 15, 255, 88, 54, 19, 255, 92, 42, 17, 255, 96, 43, 10, 255, 102, 52, 11, 255, 103, 54, 11, 255, 105, 50, 11, 255, 105, 50, 15, 255, 106, 50, 18, 255, 111, 51, 18, 255, 108, 54, 12, 255, 112, 52, 9, 255, 115, 51, 14, 255, 112, 47, 9, 255, 108, 39, 7, 255, 18, 38, 54, 255, 17, 70, 111, 255, 29, 83, 128, 255, 31, 91, 134, 255, 28, 98, 151, 255, 38, 100, 154, 255, 37, 104, 168, 255, 31, 122, 167, 255, 12, 93, 142, 255, 0, 17, 101, 255, 4, 0, 60, 255, 3, 2, 56, 255, 0, 3, 26, 255, 2, 1, 3, 255, 1, 1, 4, 255, 1, 0, 6, 255, 1, 1, 2, 255, 1, 0, 6, 255, 0, 0, 2, 255, 1, 0, 5, 255, 1, 1, 3, 255, 1, 1, 3, 255, 1, 1, 2, 255, 1, 1, 1, 255, 0, 0, 2, 255, 0, 1, 1, 255, 1, 2, 1, 255, 2, 3, 5, 255, 4, 0, 5, 255, 0, 1, 2, 255, 0, 2, 3, 255, 2, 2, 8, 255, 2, 2, 3, 255, 4, 3, 0, 255, 1, 0, 5, 255, 1, 2, 4, 255, 2, 5, 4, 255, 6, 17, 18, 255, 2, 6, 8, 255, 4, 48, 75, 255, 10, 80, 110, 255, 3, 26, 50, 255, 93, 186, 206, 255, 91, 198, 192, 255, 3, 29, 24, 255, 3, 29, 30, 255, 4, 8, 16, 255, 0, 0, 0, 255, 6, 1, 1, 255, 1, 0, 4, 255, 0, 0, 2, 255, 2, 0, 0, 255, 1, 4, 22, 255, 0, 54, 98, 255, 1, 129, 166, 255, 3, 102, 112, 255, 5, 9, 9, 255, 3, 0, 1, 255, 1, 0, 1, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 1, 0, 255, 0, 1, 4, 255, 4, 3, 16, 255, 1, 6, 35, 255, 2, 6, 31, 255, 0, 1, 17, 255, 0, 0, 5, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 1, 1, 255, 0, 0, 5, 255, 1, 0, 4, 255, 1, 2, 1, 255, 0, 0, 0, 255, 5, 5, 15, 255, 18, 19, 61, 255, 37, 52, 116, 255, 40, 59, 95, 255, 32, 36, 35, 255, 16, 15, 6, 255, 0, 0, 7, 255, 33, 26, 48, 255, 61, 55, 90, 255, 48, 51, 115, 255, 27, 38, 94, 255, 22, 33, 93, 255, 13, 26, 61, 255, 4, 7, 7, 255, 3, 1, 1, 255, 0, 2, 1, 255, 2, 3, 5, 255, 4, 1, 2, 255, 2, 2, 2, 255, 5, 2, 5, 255, 5, 3, 3, 255, 3, 3, 0, 255, 4, 4, 2, 255, 0, 0, 2, 255, 5, 4, 2, 255, 9, 6, 2, 255, 12, 5, 2, 255, 16, 7, 4, 255, 26, 16, 10, 255, 29, 21, 11, 255, 21, 13, 4, 255, 13, 9, 2, 255, 9, 10, 2, 255, 23, 17, 0, 255, 26, 16, 8, 255, 31, 20, 13, 255, 35, 28, 7, 255, 38, 32, 4, 255, 40, 33, 7, 255, 34, 33, 3, 255, 33, 31, 16, 255, 43, 36, 10, 255, 43, 39, 8, 255, 47, 44, 7, 255, 53, 49, 6, 255, 43, 45, 6, 255, 47, 50, 6, 255, 50, 52, 7, 255, 49, 47, 18, 255, 51, 46, 20, 255, 47, 43, 15, 255, 44, 40, 12, 255, 43, 40, 13, 255, 44, 38, 6, 255, 50, 43, 3, 255, 50, 37, 10, 255, 47, 32, 6, 255, 54, 40, 8, 255, 50, 35, 7, 255, 43, 31, 8, 255, 44, 36, 17, 255, 44, 30, 3, 255, 49, 31, 9, 255, 40, 26, 12, 255, 31, 25, 11, 255, 43, 30, 7, 255, 48, 30, 10, 255, 48, 31, 11, 255, 49, 31, 16, 255, 51, 31, 13, 255, 51, 31, 1, 255, 57, 38, 7, 255, 57, 40, 14, 255, 56, 35, 6, 255, 63, 36, 11, 255, 68, 37, 4, 255, 71, 40, 7, 255, 66, 37, 10, 255, 70, 40, 6, 255, 68, 40, 0, 255, 75, 45, 7, 255, 70, 40, 11, 255, 93, 41, 10, 255, 80, 42, 8, 255, 70, 41, 9, 255, 74, 42, 9, 255, 72, 39, 12, 255, 78, 45, 5, 255, 79, 45, 10, 255, 79, 46, 12, 255, 79, 46, 4, 255, 79, 45, 6, 255, 80, 47, 8, 255, 79, 44, 8, 255, 76, 40, 9, 255, 77, 42, 6, 255, 78, 47, 6, 255, 83, 46, 9, 255, 85, 51, 7, 255, 90, 56, 2, 255, 98, 58, 4, 255, 101, 58, 8, 255, 96, 56, 5, 255, 106, 64, 7, 255, 112, 64, 10, 255, 108, 63, 14, 255, 112, 66, 6, 255, 109, 64, 11, 255, 110, 68, 13, 255, 120, 75, 9, 255, 132, 78, 11, 255, 124, 73, 10, 255, 123, 76, 5, 255, 128, 79, 7, 255, 138, 84, 6, 255, 138, 82, 4, 255, 135, 80, 8, 255, 134, 82, 6, 255, 127, 76, 6, 255, 122, 70, 6, 255, 120, 69, 6, 255, 115, 68, 6, 255, 113, 68, 7, 255, 107, 63, 5, 255, 106, 64, 7, 255, 109, 62, 8, 255, 104, 65, 9, 255, 102, 64, 9, 255, 100, 62, 16, 255, 96, 60, 12, 255, 97, 62, 6, 255, 93, 58, 14, 255, 90, 57, 8, 255, 90, 57, 11, 255, 92, 59, 19, 255, 89, 58, 13, 255, 84, 56, 13, 255, 87, 56, 17, 255, 87, 53, 17, 255, 88, 58, 16, 255, 88, 61, 12, 255, 93, 65, 16, 255, 93, 61, 17, 255, 91, 61, 15, 255, 98, 67, 11, 255, 99, 65, 17, 255, 100, 64, 20, 255, 101, 68, 16, 255, 100, 68, 18, 255, 95, 63, 28, 255, 91, 62, 17, 255, 94, 66, 16, 255, 100, 70, 13, 255, 103, 69, 10, 255, 102, 63, 31, 255, 99, 69, 23, 255, 101, 69, 19, 255, 100, 68, 16, 255, 97, 66, 25, 255, 94, 68, 16, 255, 95, 71, 21, 255, 100, 70, 27, 255, 101, 68, 26, 255, 100, 71, 17, 255, 99, 72, 15, 255, 101, 74, 18, 255, 101, 69, 15, 255, 101, 67, 24, 255, 101, 73, 24, 255, 102, 74, 19, 255, 105, 73, 22, 255, 102, 73, 28, 255, 106, 80, 20, 255, 119, 77, 30, 255, 127, 77, 29, 255, 126, 80, 22, 255, 132, 87, 24, 255, 131, 83, 25, 255, 128, 82, 28, 255, 122, 84, 28, 255, 120, 83, 27, 255, 127, 84, 22, 255, 124, 84, 25, 255, 117, 79, 37, 255, 114, 81, 30, 255, 116, 87, 30, 255, 123, 87, 40, 255, 127, 93, 30, 255, 126, 93, 37, 255, 129, 97, 26, 255, 130, 97, 22, 255, 131, 97, 32, 255, 129, 100, 37, 255, 134, 102, 43, 255, 133, 103, 41, 255, 132, 101, 48, 255, 135, 105, 40, 255, 140, 108, 30, 255, 141, 108, 43, 255, 141, 109, 52, 255, 143, 113, 44, 255, 145, 111, 47, 255, 147, 116, 47, 255, 141, 116, 34, 255, 142, 125, 50, 255, 167, 156, 87, 255, 152, 122, 57, 255, 150, 116, 48, 255, 156, 118, 43, 255, 159, 122, 35, 255, 162, 123, 37, 255, 166, 125, 39, 255, 171, 128, 29, 255, 161, 120, 39, 255, 148, 115, 40, 255, 146, 111, 34, 255, 148, 111, 34, 255, 140, 106, 35, 255, 136, 107, 32, 255, 133, 99, 28, 255, 131, 100, 34, 255, 128, 100, 30, 255, 134, 98, 30, 255, 139, 97, 21, 255, 137, 92, 23, 255, 138, 93, 26, 255, 142, 92, 24, 255, 140, 91, 19, 255, 140, 92, 15, 255, 144, 88, 24, 255, 139, 86, 20, 255, 129, 91, 6, 255, 123, 86, 18, 255, 134, 85, 20, 255, 142, 88, 5, 255, 144, 88, 5, 255, 144, 89, 13, 255, 139, 82, 16, 255, 136, 81, 16, 255, 133, 81, 6, 255, 134, 81, 8, 255, 137, 81, 17, 255, 132, 77, 11, 255, 129, 74, 9, 255, 131, 80, 8, 255, 130, 80, 4, 255, 134, 80, 16, 255, 137, 83, 10, 255, 142, 85, 2, 255, 148, 85, 17, 255, 144, 82, 9, 255, 149, 87, 4, 255, 166, 98, 10, 255, 172, 96, 9, 255, 175, 96, 1, 255, 184, 103, 1, 255, 188, 104, 8, 255, 175, 94, 4, 255, 162, 85, 5, 255, 150, 79, 3, 255, 139, 74, 7, 255, 135, 75, 5, 255, 132, 73, 8, 255, 136, 75, 6, 255, 137, 71, 7, 255, 128, 72, 6, 255, 136, 73, 6, 255, 156, 74, 7, 255, 149, 75, 6, 255, 137, 74, 5, 255, 146, 76, 3, 255, 142, 76, 10, 255, 134, 74, 6, 255, 139, 75, 8, 255, 139, 79, 5, 255, 151, 83, 7, 255, 162, 86, 10, 255, 169, 96, 4, 255, 179, 97, 6, 255, 191, 99, 5, 255, 199, 102, 5, 255, 179, 82, 4, 255, 179, 89, 10, 255, 188, 106, 8, 255, 187, 103, 6, 255, 186, 98, 3, 255, 184, 94, 4, 255, 175, 87, 2, 255, 170, 83, 2, 255, 168, 77, 0, 255, 170, 75, 2, 255, 160, 73, 0, 255, 130, 53, 3, 255, 122, 46, 11, 255, 145, 64, 6, 255, 144, 61, 4, 255, 102, 32, 5, 255, 88, 35, 7, 255, 84, 33, 4, 255, 103, 43, 6, 255, 117, 45, 9, 255, 99, 46, 5, 255, 90, 52, 10, 255, 105, 68, 12, 255, 105, 60, 8, 255, 83, 37, 13, 255, 87, 37, 11, 255, 103, 50, 15, 255, 99, 45, 12, 255, 102, 45, 12, 255, 109, 46, 14, 255, 109, 45, 9, 255, 113, 50, 11, 255, 112, 48, 10, 255, 112, 48, 11, 255, 118, 53, 12, 255, 118, 53, 9, 255, 115, 46, 7, 255, 16, 24, 66, 255, 22, 59, 103, 255, 25, 67, 108, 255, 23, 81, 126, 255, 21, 93, 147, 255, 32, 100, 158, 255, 26, 115, 173, 255, 27, 106, 132, 255, 5, 25, 90, 255, 0, 0, 66, 255, 3, 2, 65, 255, 3, 2, 65, 255, 2, 2, 21, 255, 1, 0, 1, 255, 1, 0, 3, 255, 1, 0, 4, 255, 1, 1, 4, 255, 1, 0, 7, 255, 1, 1, 3, 255, 2, 1, 3, 255, 1, 1, 3, 255, 0, 0, 3, 255, 1, 1, 2, 255, 1, 2, 1, 255, 0, 1, 1, 255, 0, 1, 1, 255, 2, 0, 4, 255, 2, 0, 3, 255, 3, 1, 3, 255, 0, 1, 2, 255, 2, 0, 2, 255, 3, 0, 0, 255, 0, 0, 2, 255, 0, 0, 0, 255, 1, 0, 1, 255, 2, 0, 3, 255, 1, 1, 2, 255, 2, 5, 5, 255, 3, 9, 13, 255, 6, 0, 2, 255, 7, 63, 91, 255, 8, 83, 99, 255, 8, 26, 46, 255, 108, 192, 217, 255, 82, 179, 177, 255, 4, 13, 16, 255, 6, 28, 34, 255, 2, 8, 9, 255, 2, 0, 4, 255, 2, 0, 2, 255, 2, 0, 0, 255, 3, 29, 62, 255, 2, 103, 157, 255, 3, 132, 157, 255, 4, 73, 68, 255, 3, 23, 14, 255, 3, 4, 4, 255, 2, 0, 1, 255, 1, 1, 4, 255, 2, 1, 3, 255, 1, 1, 1, 255, 1, 2, 5, 255, 0, 4, 11, 255, 3, 8, 28, 255, 2, 11, 43, 255, 5, 11, 40, 255, 1, 2, 19, 255, 0, 0, 3, 255, 1, 1, 1, 255, 0, 0, 1, 255, 1, 0, 1, 255, 1, 0, 0, 255, 0, 1, 0, 255, 0, 0, 1, 255, 0, 1, 0, 255, 0, 1, 2, 255, 0, 1, 0, 255, 0, 1, 2, 255, 2, 1, 4, 255, 0, 1, 0, 255, 1, 1, 5, 255, 13, 20, 56, 255, 36, 43, 90, 255, 44, 56, 85, 255, 24, 44, 42, 255, 9, 16, 9, 255, 7, 1, 4, 255, 25, 18, 41, 255, 35, 45, 84, 255, 38, 57, 150, 255, 23, 50, 143, 255, 8, 37, 93, 255, 17, 24, 57, 255, 9, 8, 7, 255, 0, 0, 0, 255, 3, 1, 0, 255, 5, 0, 6, 255, 1, 1, 1, 255, 1, 2, 0, 255, 5, 2, 2, 255, 3, 2, 3, 255, 2, 2, 1, 255, 8, 2, 5, 255, 6, 1, 1, 255, 10, 6, 2, 255, 8, 4, 1, 255, 10, 5, 3, 255, 17, 14, 5, 255, 18, 14, 4, 255, 18, 12, 8, 255, 15, 9, 1, 255, 13, 9, 0, 255, 10, 10, 4, 255, 10, 14, 6, 255, 16, 15, 5, 255, 14, 15, 13, 255, 24, 20, 11, 255, 61, 33, 8, 255, 83, 44, 8, 255, 81, 52, 4, 255, 58, 44, 6, 255, 41, 34, 5, 255, 42, 37, 12, 255, 42, 40, 10, 255, 44, 49, 10, 255, 51, 53, 14, 255, 57, 56, 15, 255, 54, 54, 16, 255, 49, 58, 11, 255, 51, 53, 6, 255, 56, 53, 9, 255, 43, 48, 5, 255, 46, 50, 10, 255, 41, 39, 10, 255, 45, 39, 11, 255, 46, 43, 12, 255, 42, 39, 7, 255, 49, 40, 8, 255, 53, 37, 3, 255, 54, 35, 4, 255, 49, 33, 6, 255, 44, 36, 8, 255, 39, 28, 3, 255, 48, 30, 6, 255, 58, 33, 6, 255, 48, 32, 9, 255, 41, 31, 3, 255, 46, 34, 6, 255, 48, 30, 7, 255, 53, 30, 11, 255, 48, 33, 12, 255, 54, 36, 9, 255, 58, 38, 1, 255, 60, 33, 10, 255, 62, 33, 17, 255, 62, 36, 5, 255, 69, 36, 16, 255, 71, 38, 10, 255, 69, 39, 2, 255, 65, 41, 7, 255, 73, 41, 14, 255, 71, 42, 4, 255, 70, 42, 6, 255, 73, 39, 8, 255, 102, 44, 12, 255, 85, 41, 2, 255, 74, 41, 0, 255, 71, 43, 2, 255, 69, 42, 6, 255, 73, 43, 4, 255, 80, 43, 13, 255, 82, 46, 11, 255, 79, 48, 2, 255, 78, 42, 5, 255, 75, 40, 12, 255, 74, 43, 3, 255, 81, 43, 10, 255, 80, 42, 12, 255, 79, 47, 7, 255, 86, 50, 10, 255, 86, 47, 6, 255, 87, 48, 7, 255, 94, 55, 13, 255, 95, 54, 11, 255, 93, 55, 9, 255, 101, 63, 10, 255, 107, 63, 9, 255, 110, 64, 19, 255, 112, 65, 8, 255, 108, 62, 3, 255, 110, 66, 15, 255, 121, 75, 8, 255, 139, 87, 6, 255, 133, 82, 10, 255, 130, 80, 9, 255, 137, 83, 5, 255, 146, 86, 8, 255, 152, 87, 9, 255, 150, 85, 18, 255, 144, 83, 9, 255, 135, 78, 5, 255, 130, 76, 11, 255, 127, 79, 8, 255, 122, 74, 5, 255, 120, 71, 10, 255, 116, 67, 10, 255, 116, 67, 2, 255, 115, 67, 12, 255, 108, 66, 13, 255, 108, 64, 17, 255, 103, 63, 13, 255, 96, 63, 15, 255, 95, 64, 12, 255, 92, 58, 21, 255, 90, 56, 18, 255, 91, 58, 13, 255, 91, 55, 14, 255, 89, 55, 13, 255, 86, 56, 19, 255, 89, 57, 12, 255, 92, 57, 11, 255, 94, 59, 15, 255, 90, 55, 17, 255, 92, 61, 10, 255, 86, 59, 15, 255, 90, 59, 24, 255, 100, 66, 22, 255, 102, 63, 23, 255, 103, 62, 26, 255, 106, 68, 22, 255, 102, 68, 19, 255, 96, 67, 17, 255, 97, 66, 21, 255, 92, 63, 16, 255, 100, 68, 26, 255, 110, 73, 11, 255, 103, 66, 18, 255, 100, 69, 14, 255, 104, 70, 18, 255, 101, 67, 18, 255, 105, 75, 11, 255, 102, 71, 12, 255, 99, 66, 27, 255, 101, 67, 20, 255, 100, 69, 24, 255, 100, 71, 21, 255, 97, 71, 23, 255, 96, 72, 24, 255, 104, 71, 17, 255, 103, 68, 24, 255, 103, 73, 19, 255, 104, 76, 13, 255, 103, 73, 10, 255, 103, 75, 26, 255, 98, 72, 26, 255, 109, 80, 13, 255, 120, 83, 23, 255, 125, 80, 25, 255, 128, 84, 29, 255, 131, 86, 23, 255, 128, 83, 21, 255, 122, 81, 26, 255, 120, 78, 30, 255, 126, 86, 21, 255, 126, 85, 18, 255, 123, 83, 28, 255, 120, 85, 26, 255, 119, 86, 35, 255, 119, 85, 35, 255, 130, 92, 37, 255, 128, 96, 25, 255, 126, 95, 30, 255, 131, 94, 28, 255, 135, 99, 30, 255, 131, 98, 38, 255, 131, 102, 39, 255, 132, 101, 41, 255, 134, 100, 45, 255, 139, 105, 42, 255, 140, 108, 33, 255, 142, 111, 30, 255, 142, 108, 44, 255, 144, 108, 50, 255, 146, 109, 51, 255, 149, 113, 45, 255, 144, 111, 52, 255, 136, 112, 45, 255, 163, 151, 82, 255, 155, 129, 74, 255, 146, 114, 43, 255, 153, 117, 43, 255, 156, 119, 37, 255, 162, 121, 36, 255, 166, 124, 37, 255, 173, 125, 42, 255, 163, 120, 31, 255, 152, 116, 30, 255, 147, 111, 30, 255, 147, 110, 30, 255, 142, 105, 38, 255, 138, 104, 29, 255, 138, 101, 31, 255, 132, 100, 31, 255, 128, 98, 26, 255, 133, 96, 31, 255, 142, 97, 21, 255, 141, 92, 22, 255, 141, 96, 15, 255, 145, 92, 27, 255, 141, 89, 23, 255, 140, 92, 14, 255, 144, 92, 14, 255, 138, 90, 19, 255, 127, 88, 13, 255, 130, 84, 22, 255, 138, 84, 23, 255, 141, 85, 12, 255, 143, 84, 19, 255, 142, 81, 20, 255, 139, 81, 13, 255, 134, 79, 14, 255, 133, 79, 11, 255, 139, 85, 14, 255, 141, 84, 13, 255, 133, 75, 15, 255, 131, 78, 9, 255, 141, 82, 12, 255, 138, 83, 3, 255, 133, 79, 10, 255, 137, 82, 10, 255, 139, 79, 11, 255, 146, 87, 12, 255, 155, 99, 12, 255, 146, 84, 11, 255, 159, 92, 12, 255, 171, 97, 13, 255, 175, 99, 4, 255, 180, 101, 3, 255, 184, 103, 4, 255, 178, 99, 3, 255, 164, 87, 3, 255, 150, 80, 6, 255, 139, 74, 12, 255, 136, 74, 7, 255, 136, 76, 5, 255, 137, 75, 1, 255, 138, 75, 3, 255, 143, 76, 6, 255, 142, 73, 4, 255, 143, 76, 4, 255, 144, 72, 3, 255, 140, 71, 3, 255, 141, 74, 3, 255, 137, 74, 3, 255, 131, 74, 3, 255, 136, 75, 9, 255, 146, 81, 8, 255, 160, 82, 3, 255, 165, 86, 16, 255, 165, 91, 7, 255, 182, 98, 8, 255, 178, 83, 6, 255, 172, 67, 6, 255, 182, 86, 6, 255, 200, 118, 8, 255, 202, 110, 5, 255, 190, 89, 1, 255, 171, 74, 1, 255, 161, 62, 7, 255, 156, 59, 5, 255, 150, 58, 5, 255, 148, 59, 8, 255, 160, 64, 3, 255, 155, 60, 3, 255, 120, 44, 5, 255, 132, 52, 5, 255, 163, 73, 9, 255, 159, 62, 8, 255, 130, 44, 7, 255, 101, 36, 2, 255, 103, 35, 7, 255, 112, 52, 5, 255, 105, 54, 6, 255, 103, 56, 11, 255, 107, 68, 16, 255, 111, 69, 10, 255, 105, 54, 10, 255, 77, 33, 6, 255, 67, 26, 4, 255, 91, 35, 16, 255, 102, 41, 18, 255, 102, 41, 7, 255, 109, 44, 8, 255, 109, 46, 7, 255, 112, 51, 10, 255, 113, 47, 6, 255, 117, 50, 10, 255, 120, 55, 8, 255, 120, 53, 10, 255, 115, 43, 14, 255, 46, 41, 121, 255, 43, 64, 112, 255, 30, 63, 106, 255, 26, 72, 125, 255, 23, 88, 132, 255, 30, 105, 148, 255, 20, 103, 124, 255, 4, 33, 87, 255, 3, 0, 87, 255, 3, 2, 76, 255, 0, 4, 79, 255, 2, 2, 62, 255, 2, 1, 10, 255, 1, 1, 2, 255, 0, 0, 1, 255, 0, 0, 1, 255, 1, 0, 5, 255, 1, 0, 6, 255, 1, 1, 4, 255, 1, 1, 1, 255, 1, 1, 3, 255, 1, 0, 6, 255, 0, 0, 5, 255, 0, 1, 2, 255, 1, 2, 2, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 2, 255, 1, 1, 3, 255, 0, 0, 3, 255, 0, 0, 2, 255, 0, 0, 1, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 1, 5, 255, 3, 10, 8, 255, 7, 0, 4, 255, 4, 57, 90, 255, 20, 111, 152, 255, 20, 103, 128, 255, 114, 209, 223, 255, 65, 154, 154, 255, 0, 18, 24, 255, 5, 30, 49, 255, 2, 0, 0, 255, 1, 9, 24, 255, 3, 70, 121, 255, 3, 131, 172, 255, 0, 109, 112, 255, 4, 43, 31, 255, 4, 0, 0, 255, 3, 0, 0, 255, 9, 0, 0, 255, 3, 1, 4, 255, 2, 2, 5, 255, 3, 0, 0, 255, 2, 2, 0, 255, 3, 2, 15, 255, 3, 9, 32, 255, 3, 9, 38, 255, 2, 11, 40, 255, 4, 10, 33, 255, 2, 3, 14, 255, 1, 0, 5, 255, 1, 0, 6, 255, 0, 0, 4, 255, 1, 2, 2, 255, 2, 1, 1, 255, 2, 1, 3, 255, 0, 1, 1, 255, 1, 1, 2, 255, 2, 1, 4, 255, 2, 1, 5, 255, 2, 1, 1, 255, 0, 1, 0, 255, 9, 6, 40, 255, 39, 39, 94, 255, 31, 54, 106, 255, 27, 43, 55, 255, 20, 19, 7, 255, 5, 4, 0, 255, 25, 16, 40, 255, 42, 48, 98, 255, 45, 54, 129, 255, 28, 55, 133, 255, 6, 32, 127, 255, 1, 19, 81, 255, 6, 13, 20, 255, 3, 1, 0, 255, 2, 0, 5, 255, 0, 1, 4, 255, 0, 0, 2, 255, 0, 1, 0, 255, 1, 1, 0, 255, 2, 1, 2, 255, 2, 0, 1, 255, 3, 2, 1, 255, 4, 1, 0, 255, 3, 0, 1, 255, 7, 3, 0, 255, 11, 6, 0, 255, 19, 11, 4, 255, 19, 12, 5, 255, 18, 11, 3, 255, 13, 9, 2, 255, 11, 6, 4, 255, 15, 8, 0, 255, 9, 6, 7, 255, 3, 2, 2, 255, 11, 12, 6, 255, 17, 9, 5, 255, 36, 16, 11, 255, 64, 46, 5, 255, 78, 50, 7, 255, 75, 39, 6, 255, 60, 34, 6, 255, 40, 28, 6, 255, 42, 33, 5, 255, 47, 49, 6, 255, 48, 53, 17, 255, 54, 62, 15, 255, 57, 64, 15, 255, 55, 60, 12, 255, 56, 60, 10, 255, 50, 57, 16, 255, 49, 51, 13, 255, 54, 55, 5, 255, 47, 52, 5, 255, 47, 48, 7, 255, 47, 43, 7, 255, 54, 43, 5, 255, 50, 37, 9, 255, 48, 39, 15, 255, 44, 38, 4, 255, 47, 37, 10, 255, 46, 32, 13, 255, 46, 32, 6, 255, 49, 36, 4, 255, 48, 33, 5, 255, 50, 30, 5, 255, 52, 30, 5, 255, 52, 28, 6, 255, 53, 29, 9, 255, 50, 33, 5, 255, 43, 32, 3, 255, 54, 32, 9, 255, 57, 34, 7, 255, 51, 40, 8, 255, 58, 36, 11, 255, 62, 38, 19, 255, 55, 33, 13, 255, 65, 38, 7, 255, 72, 39, 9, 255, 68, 40, 3, 255, 77, 44, 4, 255, 83, 49, 9, 255, 82, 44, 11, 255, 75, 45, 13, 255, 67, 42, 8, 255, 73, 39, 10, 255, 97, 43, 13, 255, 88, 36, 2, 255, 72, 39, 13, 255, 67, 43, 12, 255, 76, 48, 5, 255, 78, 47, 1, 255, 77, 40, 8, 255, 86, 42, 10, 255, 81, 40, 12, 255, 77, 42, 2, 255, 75, 44, 10, 255, 72, 43, 15, 255, 77, 40, 5, 255, 78, 42, 10, 255, 81, 47, 8, 255, 85, 53, 3, 255, 90, 51, 5, 255, 89, 46, 14, 255, 87, 50, 13, 255, 89, 50, 8, 255, 96, 58, 13, 255, 100, 64, 9, 255, 105, 66, 6, 255, 110, 67, 9, 255, 111, 66, 10, 255, 110, 64, 6, 255, 113, 68, 7, 255, 124, 79, 1, 255, 139, 87, 5, 255, 135, 81, 8, 255, 142, 83, 11, 255, 147, 86, 8, 255, 157, 93, 9, 255, 167, 104, 11, 255, 166, 101, 9, 255, 161, 95, 3, 255, 159, 92, 8, 255, 148, 86, 11, 255, 138, 84, 8, 255, 129, 77, 4, 255, 126, 73, 6, 255, 124, 72, 9, 255, 118, 69, 15, 255, 115, 72, 5, 255, 110, 68, 12, 255, 109, 68, 11, 255, 107, 66, 7, 255, 103, 60, 11, 255, 98, 61, 10, 255, 93, 59, 15, 255, 91, 57, 16, 255, 93, 56, 19, 255, 93, 58, 23, 255, 89, 59, 11, 255, 89, 61, 10, 255, 86, 58, 14, 255, 86, 55, 16, 255, 93, 62, 15, 255, 92, 59, 17, 255, 89, 59, 13, 255, 92, 60, 17, 255, 93, 59, 24, 255, 95, 63, 14, 255, 95, 64, 9, 255, 99, 64, 22, 255, 106, 70, 18, 255, 103, 69, 14, 255, 98, 70, 10, 255, 101, 66, 17, 255, 101, 65, 24, 255, 100, 66, 21, 255, 110, 69, 19, 255, 108, 72, 24, 255, 102, 70, 12, 255, 103, 70, 15, 255, 102, 69, 21, 255, 99, 65, 23, 255, 101, 65, 24, 255, 105, 69, 17, 255, 98, 70, 16, 255, 94, 65, 20, 255, 99, 66, 25, 255, 99, 69, 25, 255, 101, 71, 16, 255, 106, 70, 18, 255, 115, 77, 27, 255, 111, 77, 18, 255, 100, 67, 22, 255, 102, 74, 24, 255, 107, 79, 21, 255, 105, 75, 27, 255, 105, 79, 16, 255, 115, 85, 20, 255, 133, 83, 20, 255, 129, 79, 29, 255, 130, 82, 22, 255, 128, 79, 27, 255, 123, 78, 24, 255, 122, 83, 22, 255, 122, 85, 19, 255, 125, 84, 21, 255, 125, 82, 24, 255, 126, 85, 26, 255, 121, 86, 20, 255, 122, 86, 29, 255, 133, 91, 36, 255, 128, 91, 35, 255, 129, 93, 36, 255, 134, 95, 30, 255, 139, 100, 24, 255, 138, 101, 33, 255, 135, 95, 46, 255, 133, 99, 44, 255, 130, 102, 42, 255, 136, 108, 43, 255, 142, 106, 51, 255, 145, 113, 19, 255, 143, 106, 44, 255, 145, 110, 34, 255, 147, 111, 32, 255, 150, 110, 48, 255, 147, 112, 47, 255, 133, 109, 37, 255, 151, 136, 63, 255, 160, 142, 71, 255, 148, 117, 40, 255, 155, 118, 43, 255, 156, 121, 36, 255, 161, 121, 34, 255, 162, 124, 27, 255, 170, 123, 28, 255, 168, 122, 18, 255, 156, 115, 32, 255, 149, 113, 34, 255, 143, 109, 25, 255, 143, 107, 28, 255, 142, 104, 27, 255, 139, 103, 30, 255, 132, 99, 25, 255, 134, 102, 23, 255, 137, 98, 22, 255, 143, 97, 21, 255, 144, 95, 23, 255, 141, 96, 18, 255, 144, 92, 17, 255, 142, 91, 15, 255, 138, 89, 17, 255, 143, 90, 20, 255, 138, 89, 14, 255, 128, 85, 18, 255, 131, 88, 12, 255, 141, 89, 12, 255, 138, 85, 17, 255, 141, 84, 23, 255, 142, 83, 22, 255, 130, 79, 16, 255, 129, 78, 12, 255, 136, 82, 11, 255, 134, 81, 13, 255, 137, 78, 17, 255, 135, 79, 10, 255, 128, 82, 5, 255, 138, 82, 11, 255, 136, 79, 10, 255, 134, 82, 4, 255, 137, 82, 5, 255, 140, 81, 7, 255, 146, 86, 5, 255, 156, 98, 19, 255, 149, 89, 19, 255, 161, 95, 20, 255, 166, 96, 13, 255, 168, 98, 2, 255, 178, 103, 10, 255, 185, 103, 8, 255, 182, 100, 4, 255, 168, 90, 6, 255, 154, 82, 8, 255, 145, 78, 8, 255, 141, 76, 4, 255, 142, 75, 4, 255, 140, 73, 6, 255, 136, 73, 6, 255, 138, 73, 7, 255, 140, 75, 9, 255, 134, 75, 7, 255, 141, 74, 8, 255, 140, 71, 6, 255, 137, 73, 6, 255, 132, 72, 6, 255, 134, 76, 4, 255, 138, 78, 2, 255, 149, 80, 6, 255, 155, 81, 6, 255, 161, 85, 12, 255, 167, 90, 14, 255, 187, 106, 7, 255, 190, 104, 2, 255, 177, 92, 7, 255, 196, 110, 5, 255, 199, 98, 7, 255, 162, 58, 6, 255, 129, 44, 4, 255, 123, 47, 11, 255, 124, 40, 14, 255, 125, 46, 4, 255, 131, 55, 1, 255, 155, 64, 5, 255, 143, 52, 6, 255, 113, 39, 2, 255, 111, 41, 3, 255, 119, 44, 4, 255, 136, 54, 7, 255, 151, 62, 3, 255, 144, 53, 10, 255, 116, 40, 9, 255, 107, 42, 7, 255, 116, 50, 11, 255, 121, 64, 13, 255, 114, 73, 18, 255, 114, 67, 17, 255, 106, 59, 9, 255, 82, 39, 6, 255, 71, 31, 6, 255, 82, 40, 5, 255, 100, 47, 10, 255, 105, 43, 10, 255, 105, 40, 6, 255, 105, 40, 5, 255, 104, 41, 8, 255, 107, 47, 8, 255, 108, 48, 6, 255, 111, 49, 10, 255, 109, 43, 9, 255, 107, 39, 9, 255, 105, 35, 9, 255, 82, 72, 147, 255, 70, 78, 141, 255, 44, 70, 140, 255, 34, 77, 135, 255, 33, 82, 133, 255, 28, 72, 124, 255, 8, 28, 100, 255, 1, 0, 98, 255, 2, 0, 88, 255, 4, 2, 105, 255, 2, 2, 104, 255, 3, 6, 74, 255, 0, 4, 8, 255, 0, 1, 5, 255, 1, 1, 4, 255, 1, 0, 4, 255, 0, 0, 4, 255, 0, 0, 4, 255, 2, 1, 5, 255, 0, 1, 2, 255, 1, 0, 5, 255, 1, 0, 6, 255, 1, 0, 5, 255, 0, 0, 4, 255, 1, 0, 5, 255, 1, 0, 4, 255, 0, 0, 2, 255, 0, 0, 2, 255, 0, 0, 2, 255, 0, 0, 2, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 4, 0, 5, 255, 1, 0, 5, 255, 7, 7, 22, 255, 21, 119, 160, 255, 57, 215, 215, 255, 32, 174, 167, 255, 25, 84, 93, 255, 140, 227, 253, 255, 63, 143, 136, 255, 0, 11, 25, 255, 1, 50, 89, 255, 3, 105, 151, 255, 4, 126, 149, 255, 2, 70, 52, 255, 3, 12, 0, 255, 2, 0, 0, 255, 2, 0, 0, 255, 2, 0, 2, 255, 5, 15, 42, 255, 1, 68, 99, 255, 4, 50, 64, 255, 0, 4, 18, 255, 0, 1, 1, 255, 2, 0, 1, 255, 1, 6, 16, 255, 6, 11, 39, 255, 1, 10, 39, 255, 0, 7, 18, 255, 1, 2, 12, 255, 3, 1, 14, 255, 2, 1, 8, 255, 0, 0, 4, 255, 2, 1, 4, 255, 1, 2, 2, 255, 0, 3, 1, 255, 2, 0, 1, 255, 4, 0, 1, 255, 1, 0, 0, 255, 2, 0, 0, 255, 7, 2, 21, 255, 18, 29, 84, 255, 38, 56, 100, 255, 35, 46, 47, 255, 15, 22, 28, 255, 5, 4, 3, 255, 10, 4, 22, 255, 31, 37, 70, 255, 53, 54, 107, 255, 16, 46, 146, 255, 11, 38, 102, 255, 1, 16, 48, 255, 3, 6, 14, 255, 4, 0, 0, 255, 3, 0, 0, 255, 1, 0, 4, 255, 1, 2, 6, 255, 1, 1, 1, 255, 4, 0, 4, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 0, 0, 255, 3, 0, 0, 255, 6, 1, 0, 255, 7, 2, 0, 255, 14, 9, 4, 255, 20, 13, 7, 255, 17, 11, 5, 255, 14, 9, 3, 255, 10, 5, 3, 255, 6, 4, 0, 255, 10, 8, 3, 255, 15, 5, 4, 255, 10, 5, 5, 255, 16, 8, 8, 255, 55, 40, 16, 255, 60, 36, 21, 255, 120, 87, 40, 255, 202, 144, 32, 255, 108, 53, 1, 255, 57, 33, 5, 255, 48, 26, 5, 255, 31, 17, 9, 255, 30, 18, 10, 255, 47, 44, 7, 255, 62, 69, 11, 255, 64, 74, 22, 255, 65, 80, 16, 255, 62, 73, 17, 255, 58, 67, 16, 255, 55, 63, 18, 255, 51, 57, 18, 255, 54, 59, 11, 255, 54, 56, 13, 255, 53, 48, 12, 255, 45, 40, 8, 255, 50, 44, 1, 255, 50, 41, 6, 255, 58, 40, 7, 255, 60, 38, 7, 255, 47, 34, 8, 255, 37, 34, 6, 255, 41, 35, 9, 255, 49, 32, 13, 255, 56, 32, 14, 255, 51, 31, 14, 255, 50, 34, 6, 255, 49, 34, 12, 255, 50, 34, 5, 255, 54, 34, 12, 255, 52, 33, 13, 255, 49, 31, 14, 255, 55, 34, 10, 255, 55, 33, 5, 255, 62, 38, 4, 255, 59, 34, 8, 255, 58, 44, 5, 255, 66, 45, 6, 255, 68, 43, 13, 255, 71, 42, 5, 255, 79, 46, 8, 255, 85, 51, 10, 255, 90, 54, 4, 255, 91, 53, 6, 255, 81, 48, 9, 255, 78, 49, 13, 255, 84, 47, 12, 255, 106, 46, 9, 255, 97, 38, 7, 255, 79, 38, 17, 255, 70, 35, 6, 255, 80, 42, 7, 255, 81, 45, 9, 255, 78, 49, 2, 255, 80, 42, 4, 255, 78, 39, 7, 255, 75, 40, 4, 255, 79, 47, 5, 255, 74, 39, 23, 255, 67, 39, 11, 255, 75, 46, 7, 255, 80, 47, 13, 255, 82, 48, 8, 255, 90, 50, 8, 255, 89, 50, 10, 255, 88, 53, 11, 255, 89, 51, 8, 255, 96, 55, 11, 255, 101, 63, 10, 255, 104, 64, 12, 255, 108, 69, 4, 255, 109, 68, 7, 255, 108, 64, 9, 255, 111, 66, 2, 255, 125, 79, 2, 255, 139, 90, 7, 255, 141, 87, 12, 255, 148, 92, 6, 255, 164, 103, 4, 255, 178, 110, 5, 255, 188, 117, 4, 255, 197, 126, 3, 255, 191, 118, 1, 255, 182, 107, 2, 255, 165, 94, 6, 255, 147, 85, 12, 255, 131, 82, 4, 255, 123, 77, 4, 255, 122, 73, 11, 255, 119, 72, 8, 255, 113, 69, 8, 255, 109, 67, 8, 255, 107, 68, 8, 255, 104, 65, 6, 255, 103, 60, 12, 255, 101, 59, 10, 255, 98, 58, 9, 255, 101, 62, 10, 255, 98, 60, 10, 255, 96, 61, 16, 255, 96, 61, 11, 255, 94, 60, 9, 255, 90, 58, 16, 255, 86, 56, 14, 255, 90, 61, 20, 255, 91, 61, 18, 255, 94, 61, 22, 255, 100, 60, 15, 255, 97, 59, 16, 255, 100, 65, 13, 255, 102, 71, 11, 255, 102, 67, 17, 255, 105, 69, 13, 255, 107, 67, 15, 255, 104, 67, 12, 255, 104, 66, 11, 255, 106, 67, 16, 255, 103, 68, 12, 255, 108, 66, 20, 255, 106, 67, 19, 255, 101, 67, 20, 255, 102, 69, 16, 255, 99, 67, 18, 255, 98, 66, 24, 255, 97, 66, 24, 255, 100, 75, 10, 255, 97, 74, 18, 255, 99, 69, 16, 255, 98, 70, 18, 255, 102, 71, 22, 255, 101, 73, 8, 255, 101, 75, 20, 255, 108, 76, 11, 255, 106, 73, 12, 255, 107, 73, 35, 255, 108, 75, 21, 255, 105, 73, 15, 255, 106, 73, 32, 255, 110, 80, 22, 255, 111, 78, 25, 255, 126, 82, 18, 255, 131, 81, 30, 255, 134, 83, 27, 255, 130, 81, 32, 255, 127, 82, 25, 255, 122, 84, 20, 255, 122, 84, 25, 255, 124, 82, 33, 255, 127, 84, 26, 255, 125, 82, 30, 255, 127, 88, 29, 255, 125, 91, 21, 255, 125, 90, 31, 255, 130, 92, 36, 255, 133, 95, 32, 255, 134, 97, 27, 255, 133, 100, 18, 255, 137, 99, 30, 255, 133, 100, 39, 255, 135, 103, 29, 255, 137, 101, 27, 255, 139, 102, 40, 255, 140, 108, 30, 255, 142, 112, 33, 255, 145, 110, 38, 255, 146, 109, 40, 255, 148, 110, 41, 255, 151, 112, 45, 255, 149, 115, 36, 255, 138, 111, 32, 255, 140, 120, 40, 255, 164, 145, 76, 255, 145, 115, 47, 255, 152, 118, 34, 255, 155, 118, 32, 255, 159, 116, 39, 255, 160, 121, 33, 255, 168, 120, 34, 255, 170, 121, 35, 255, 159, 118, 35, 255, 150, 114, 34, 255, 144, 108, 31, 255, 142, 107, 26, 255, 143, 105, 33, 255, 138, 98, 30, 255, 132, 98, 23, 255, 130, 101, 22, 255, 135, 98, 34, 255, 140, 95, 29, 255, 142, 93, 21, 255, 141, 92, 26, 255, 145, 92, 25, 255, 144, 92, 25, 255, 142, 92, 16, 255, 147, 92, 18, 255, 147, 89, 23, 255, 137, 88, 15, 255, 129, 86, 15, 255, 135, 84, 22, 255, 141, 83, 21, 255, 142, 83, 20, 255, 134, 81, 17, 255, 131, 82, 15, 255, 134, 83, 12, 255, 135, 81, 12, 255, 135, 83, 11, 255, 141, 83, 15, 255, 131, 77, 10, 255, 128, 81, 7, 255, 135, 81, 12, 255, 138, 81, 10, 255, 136, 80, 6, 255, 140, 80, 9, 255, 144, 79, 10, 255, 146, 82, 10, 255, 151, 90, 10, 255, 155, 91, 15, 255, 162, 96, 11, 255, 164, 94, 11, 255, 166, 92, 6, 255, 181, 104, 3, 255, 191, 105, 8, 255, 184, 98, 7, 255, 176, 94, 6, 255, 163, 88, 1, 255, 153, 84, 0, 255, 147, 80, 2, 255, 144, 75, 7, 255, 141, 74, 10, 255, 135, 75, 6, 255, 140, 75, 6, 255, 144, 77, 7, 255, 141, 79, 6, 255, 142, 75, 5, 255, 144, 76, 6, 255, 142, 79, 8, 255, 140, 75, 5, 255, 139, 74, 8, 255, 139, 74, 8, 255, 147, 79, 5, 255, 155, 84, 5, 255, 161, 83, 2, 255, 171, 92, 3, 255, 167, 78, 15, 255, 178, 82, 5, 255, 210, 111, 0, 255, 187, 91, 11, 255, 130, 45, 4, 255, 101, 39, 5, 255, 109, 41, 10, 255, 129, 50, 5, 255, 129, 57, 4, 255, 138, 60, 4, 255, 161, 68, 5, 255, 145, 54, 3, 255, 123, 44, 3, 255, 111, 41, 2, 255, 120, 44, 5, 255, 126, 47, 4, 255, 130, 52, 2, 255, 141, 60, 4, 255, 140, 56, 4, 255, 118, 38, 7, 255, 111, 40, 8, 255, 126, 67, 6, 255, 122, 69, 21, 255, 112, 67, 12, 255, 109, 58, 4, 255, 91, 41, 5, 255, 79, 32, 3, 255, 100, 51, 12, 255, 116, 65, 5, 255, 115, 59, 8, 255, 106, 48, 8, 255, 107, 45, 12, 255, 102, 39, 6, 255, 100, 39, 3, 255, 103, 44, 7, 255, 105, 45, 8, 255, 102, 40, 2, 255, 104, 37, 8, 255, 107, 40, 14, 255, 100, 32, 10, 255, 62, 74, 159, 255, 74, 83, 162, 255, 71, 76, 150, 255, 50, 75, 150, 255, 27, 61, 143, 255, 6, 32, 130, 255, 0, 3, 107, 255, 0, 4, 103, 255, 2, 8, 106, 255, 3, 6, 115, 255, 4, 5, 126, 255, 1, 6, 69, 255, 1, 2, 15, 255, 1, 2, 7, 255, 0, 1, 5, 255, 0, 1, 5, 255, 1, 0, 7, 255, 1, 0, 6, 255, 1, 1, 4, 255, 0, 0, 2, 255, 1, 0, 5, 255, 1, 0, 6, 255, 1, 0, 5, 255, 1, 1, 3, 255, 1, 1, 4, 255, 1, 0, 4, 255, 0, 0, 2, 255, 0, 0, 2, 255, 0, 0, 2, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 3, 0, 1, 255, 2, 0, 0, 255, 4, 30, 46, 255, 27, 182, 184, 255, 66, 200, 190, 255, 76, 212, 211, 255, 20, 158, 157, 255, 50, 126, 154, 255, 135, 246, 255, 255, 53, 157, 172, 255, 0, 94, 117, 255, 8, 97, 102, 255, 5, 33, 20, 255, 4, 0, 0, 255, 0, 0, 0, 255, 2, 0, 0, 255, 6, 5, 14, 255, 6, 38, 73, 255, 3, 86, 131, 255, 2, 91, 104, 255, 0, 71, 67, 255, 6, 21, 30, 255, 3, 0, 0, 255, 1, 0, 1, 255, 1, 1, 0, 255, 4, 9, 29, 255, 3, 9, 41, 255, 0, 4, 25, 255, 0, 1, 15, 255, 3, 1, 11, 255, 2, 1, 4, 255, 0, 0, 0, 255, 1, 0, 2, 255, 1, 2, 4, 255, 1, 1, 8, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 3, 17, 255, 10, 21, 61, 255, 30, 48, 94, 255, 23, 52, 68, 255, 20, 30, 22, 255, 4, 3, 0, 255, 11, 11, 13, 255, 28, 28, 54, 255, 34, 48, 118, 255, 14, 47, 128, 255, 7, 30, 88, 255, 2, 12, 48, 255, 7, 7, 13, 255, 1, 4, 0, 255, 2, 1, 0, 255, 0, 1, 1, 255, 1, 2, 1, 255, 1, 0, 7, 255, 1, 1, 6, 255, 0, 1, 2, 255, 1, 1, 2, 255, 2, 0, 1, 255, 2, 1, 0, 255, 7, 3, 1, 255, 10, 5, 2, 255, 14, 8, 4, 255, 17, 9, 6, 255, 13, 6, 2, 255, 14, 9, 3, 255, 9, 4, 0, 255, 6, 2, 2, 255, 10, 7, 5, 255, 7, 5, 2, 255, 8, 8, 4, 255, 8, 9, 1, 255, 11, 10, 7, 255, 36, 25, 16, 255, 87, 61, 33, 255, 96, 57, 14, 255, 215, 163, 42, 255, 200, 131, 19, 255, 46, 14, 7, 255, 32, 21, 10, 255, 47, 25, 9, 255, 35, 19, 4, 255, 26, 21, 6, 255, 39, 46, 11, 255, 69, 79, 24, 255, 69, 83, 26, 255, 67, 83, 11, 255, 66, 78, 14, 255, 58, 66, 13, 255, 56, 65, 16, 255, 51, 63, 9, 255, 59, 63, 3, 255, 56, 53, 10, 255, 47, 48, 11, 255, 41, 45, 10, 255, 42, 43, 14, 255, 48, 45, 10, 255, 50, 43, 2, 255, 56, 38, 1, 255, 51, 37, 6, 255, 46, 37, 9, 255, 45, 34, 6, 255, 49, 32, 9, 255, 48, 31, 12, 255, 48, 31, 10, 255, 51, 34, 10, 255, 54, 38, 10, 255, 50, 34, 6, 255, 50, 33, 8, 255, 48, 31, 14, 255, 54, 30, 12, 255, 60, 33, 11, 255, 58, 38, 9, 255, 72, 42, 4, 255, 67, 42, 9, 255, 64, 42, 12, 255, 72, 38, 3, 255, 75, 45, 4, 255, 76, 48, 0, 255, 86, 48, 7, 255, 89, 56, 10, 255, 91, 58, 6, 255, 93, 56, 10, 255, 90, 56, 9, 255, 86, 57, 6, 255, 89, 53, 2, 255, 112, 53, 0, 255, 106, 44, 5, 255, 86, 41, 5, 255, 76, 44, 2, 255, 78, 45, 14, 255, 74, 40, 13, 255, 79, 49, 2, 255, 82, 46, 9, 255, 79, 46, 4, 255, 78, 44, 7, 255, 77, 43, 8, 255, 76, 41, 10, 255, 67, 45, 5, 255, 74, 46, 8, 255, 82, 48, 12, 255, 85, 47, 13, 255, 92, 50, 9, 255, 92, 53, 4, 255, 89, 54, 7, 255, 91, 50, 11, 255, 92, 47, 8, 255, 96, 54, 6, 255, 102, 59, 11, 255, 106, 65, 12, 255, 108, 68, 2, 255, 112, 67, 18, 255, 117, 70, 14, 255, 131, 80, 12, 255, 144, 92, 12, 255, 144, 90, 5, 255, 156, 96, 2, 255, 178, 112, 11, 255, 209, 137, 8, 255, 217, 141, 8, 255, 195, 108, 9, 255, 192, 110, 6, 255, 165, 93, 2, 255, 147, 86, 7, 255, 136, 84, 6, 255, 129, 78, 6, 255, 125, 73, 8, 255, 117, 72, 10, 255, 114, 70, 3, 255, 112, 68, 8, 255, 108, 65, 14, 255, 104, 65, 4, 255, 103, 64, 10, 255, 105, 65, 15, 255, 101, 59, 10, 255, 98, 56, 11, 255, 100, 59, 12, 255, 103, 63, 14, 255, 99, 60, 14, 255, 99, 62, 18, 255, 99, 60, 16, 255, 102, 63, 15, 255, 99, 61, 13, 255, 94, 59, 24, 255, 92, 61, 11, 255, 96, 66, 13, 255, 102, 61, 20, 255, 101, 62, 20, 255, 98, 65, 12, 255, 100, 67, 15, 255, 103, 67, 16, 255, 106, 67, 20, 255, 107, 67, 13, 255, 106, 66, 17, 255, 106, 69, 13, 255, 104, 68, 15, 255, 102, 66, 17, 255, 103, 64, 24, 255, 104, 67, 21, 255, 104, 69, 16, 255, 103, 70, 6, 255, 98, 63, 30, 255, 99, 68, 20, 255, 95, 67, 17, 255, 95, 68, 23, 255, 96, 72, 12, 255, 102, 72, 21, 255, 103, 71, 20, 255, 106, 72, 15, 255, 103, 66, 26, 255, 105, 72, 14, 255, 103, 70, 13, 255, 101, 70, 18, 255, 104, 73, 19, 255, 104, 71, 16, 255, 112, 74, 32, 255, 107, 75, 8, 255, 107, 77, 18, 255, 109, 78, 29, 255, 123, 81, 25, 255, 133, 83, 22, 255, 135, 83, 20, 255, 128, 79, 23, 255, 125, 79, 23, 255, 122, 81, 24, 255, 124, 83, 27, 255, 130, 88, 22, 255, 130, 89, 22, 255, 125, 84, 23, 255, 124, 84, 31, 255, 120, 85, 24, 255, 123, 92, 24, 255, 132, 96, 21, 255, 135, 93, 32, 255, 132, 94, 43, 255, 131, 97, 25, 255, 135, 96, 33, 255, 136, 97, 37, 255, 136, 100, 41, 255, 138, 104, 26, 255, 140, 102, 41, 255, 142, 105, 29, 255, 141, 107, 39, 255, 143, 110, 38, 255, 146, 108, 41, 255, 146, 110, 37, 255, 151, 113, 42, 255, 151, 114, 43, 255, 146, 115, 34, 255, 138, 112, 37, 255, 158, 138, 72, 255, 151, 125, 50, 255, 148, 114, 26, 255, 157, 114, 47, 255, 162, 120, 34, 255, 162, 122, 32, 255, 168, 122, 29, 255, 168, 120, 27, 255, 157, 114, 24, 255, 148, 112, 28, 255, 143, 111, 28, 255, 142, 108, 21, 255, 143, 105, 25, 255, 144, 104, 22, 255, 133, 100, 18, 255, 127, 100, 10, 255, 135, 100, 35, 255, 140, 99, 24, 255, 142, 94, 14, 255, 146, 92, 18, 255, 150, 91, 25, 255, 147, 90, 26, 255, 143, 91, 21, 255, 146, 92, 10, 255, 146, 90, 10, 255, 137, 87, 13, 255, 131, 87, 16, 255, 134, 87, 14, 255, 146, 87, 18, 255, 145, 87, 14, 255, 132, 85, 8, 255, 134, 87, 13, 255, 134, 82, 17, 255, 136, 81, 13, 255, 135, 82, 14, 255, 141, 83, 18, 255, 136, 82, 15, 255, 130, 81, 15, 255, 134, 82, 10, 255, 137, 83, 11, 255, 137, 79, 14, 255, 141, 80, 13, 255, 144, 81, 10, 255, 147, 85, 9, 255, 151, 88, 14, 255, 155, 88, 10, 255, 159, 92, 12, 255, 162, 95, 4, 255, 163, 93, 4, 255, 181, 102, 7, 255, 189, 103, 9, 255, 183, 98, 2, 255, 180, 97, 1, 255, 170, 91, 3, 255, 161, 86, 6, 255, 153, 82, 5, 255, 146, 79, 6, 255, 145, 79, 9, 255, 143, 78, 9, 255, 146, 77, 6, 255, 144, 77, 3, 255, 145, 78, 5, 255, 143, 76, 6, 255, 142, 75, 6, 255, 140, 79, 5, 255, 135, 73, 5, 255, 137, 74, 7, 255, 144, 77, 9, 255, 153, 81, 11, 255, 156, 83, 3, 255, 163, 87, 5, 255, 172, 89, 11, 255, 169, 73, 12, 255, 167, 66, 8, 255, 146, 52, 7, 255, 109, 32, 7, 255, 99, 37, 8, 255, 113, 49, 8, 255, 131, 51, 7, 255, 131, 50, 5, 255, 135, 62, 4, 255, 146, 65, 3, 255, 133, 47, 5, 255, 119, 40, 11, 255, 116, 46, 11, 255, 122, 45, 4, 255, 130, 53, 1, 255, 138, 58, 3, 255, 134, 55, 4, 255, 138, 57, 3, 255, 135, 55, 2, 255, 113, 38, 8, 255, 115, 52, 12, 255, 122, 77, 9, 255, 114, 69, 8, 255, 115, 58, 11, 255, 96, 54, 12, 255, 108, 65, 9, 255, 121, 69, 15, 255, 131, 74, 26, 255, 121, 67, 2, 255, 105, 54, 6, 255, 106, 48, 12, 255, 108, 44, 17, 255, 105, 42, 13, 255, 103, 43, 4, 255, 104, 45, 7, 255, 108, 46, 10, 255, 110, 46, 7, 255, 110, 44, 10, 255, 102, 36, 7, 255, 98, 31, 3, 255, 15, 35, 147, 255, 25, 54, 175, 255, 37, 54, 170, 255, 26, 49, 165, 255, 12, 20, 159, 255, 2, 3, 123, 255, 3, 6, 106, 255, 3, 7, 116, 255, 1, 8, 105, 255, 3, 2, 93, 255, 1, 6, 92, 255, 2, 6, 51, 255, 1, 1, 17, 255, 2, 2, 9, 255, 1, 2, 7, 255, 1, 2, 8, 255, 2, 2, 11, 255, 1, 1, 9, 255, 0, 0, 4, 255, 0, 0, 3, 255, 0, 0, 5, 255, 1, 0, 5, 255, 1, 1, 3, 255, 1, 1, 0, 255, 1, 1, 2, 255, 1, 1, 2, 255, 0, 0, 1, 255, 0, 0, 2, 255, 0, 0, 2, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 2, 0, 255, 2, 1, 3, 255, 0, 0, 0, 255, 6, 70, 76, 255, 46, 179, 169, 255, 79, 225, 227, 255, 41, 249, 247, 255, 24, 123, 122, 255, 59, 123, 156, 255, 136, 250, 255, 255, 38, 131, 128, 255, 0, 37, 54, 255, 3, 37, 41, 255, 3, 0, 0, 255, 1, 0, 5, 255, 1, 26, 49, 255, 0, 70, 97, 255, 3, 87, 109, 255, 2, 73, 81, 255, 6, 41, 42, 255, 1, 4, 4, 255, 6, 13, 53, 255, 2, 113, 154, 255, 3, 71, 82, 255, 1, 0, 0, 255, 4, 0, 14, 255, 3, 8, 25, 255, 3, 5, 29, 255, 1, 2, 15, 255, 1, 1, 2, 255, 1, 1, 0, 255, 0, 0, 2, 255, 1, 0, 3, 255, 0, 2, 1, 255, 0, 1, 0, 255, 0, 1, 8, 255, 7, 13, 50, 255, 17, 29, 94, 255, 15, 30, 78, 255, 14, 22, 22, 255, 3, 5, 0, 255, 11, 5, 22, 255, 24, 26, 75, 255, 31, 50, 123, 255, 18, 49, 131, 255, 8, 36, 105, 255, 11, 17, 61, 255, 5, 7, 22, 255, 2, 1, 0, 255, 0, 0, 1, 255, 0, 2, 2, 255, 2, 1, 5, 255, 1, 0, 3, 255, 2, 0, 3, 255, 3, 0, 1, 255, 2, 2, 3, 255, 1, 1, 1, 255, 0, 2, 1, 255, 5, 3, 0, 255, 7, 2, 1, 255, 10, 5, 3, 255, 13, 8, 5, 255, 16, 8, 5, 255, 15, 6, 4, 255, 10, 5, 2, 255, 8, 5, 1, 255, 10, 6, 2, 255, 10, 5, 2, 255, 9, 4, 2, 255, 11, 7, 3, 255, 9, 6, 0, 255, 11, 11, 5, 255, 14, 6, 8, 255, 40, 35, 22, 255, 56, 41, 19, 255, 147, 102, 25, 255, 226, 165, 41, 255, 114, 61, 5, 255, 36, 23, 7, 255, 22, 19, 4, 255, 28, 19, 4, 255, 41, 23, 2, 255, 33, 25, 3, 255, 45, 51, 18, 255, 75, 91, 40, 255, 74, 91, 30, 255, 70, 86, 13, 255, 68, 80, 8, 255, 68, 75, 15, 255, 60, 68, 8, 255, 56, 65, 7, 255, 57, 61, 5, 255, 54, 54, 5, 255, 56, 50, 9, 255, 47, 44, 6, 255, 51, 44, 13, 255, 44, 37, 17, 255, 48, 41, 8, 255, 50, 42, 8, 255, 49, 34, 12, 255, 47, 30, 8, 255, 48, 36, 10, 255, 48, 35, 9, 255, 55, 41, 3, 255, 57, 43, 6, 255, 54, 39, 7, 255, 54, 42, 2, 255, 58, 39, 7, 255, 62, 33, 7, 255, 57, 40, 5, 255, 61, 38, 8, 255, 64, 38, 8, 255, 72, 44, 2, 255, 67, 45, 6, 255, 69, 43, 7, 255, 65, 41, 8, 255, 66, 39, 6, 255, 77, 45, 11, 255, 80, 52, 4, 255, 86, 55, 5, 255, 88, 58, 7, 255, 96, 57, 6, 255, 94, 57, 13, 255, 90, 57, 6, 255, 85, 54, 4, 255, 85, 48, 7, 255, 112, 53, 7, 255, 110, 44, 8, 255, 93, 44, 10, 255, 80, 45, 4, 255, 74, 40, 10, 255, 72, 45, 7, 255, 76, 51, 4, 255, 75, 41, 19, 255, 73, 44, 12, 255, 77, 46, 3, 255, 79, 45, 9, 255, 82, 45, 10, 255, 72, 43, 10, 255, 75, 42, 1, 255, 83, 45, 9, 255, 87, 48, 9, 255, 93, 50, 8, 255, 94, 52, 6, 255, 91, 52, 10, 255, 93, 49, 14, 255, 92, 44, 8, 255, 98, 54, 6, 255, 104, 61, 9, 255, 109, 64, 12, 255, 108, 65, 2, 255, 114, 68, 10, 255, 120, 71, 10, 255, 131, 77, 13, 255, 144, 85, 17, 255, 156, 91, 14, 255, 172, 103, 4, 255, 191, 121, 4, 255, 204, 135, 9, 255, 189, 119, 3, 255, 161, 95, 2, 255, 164, 102, 10, 255, 152, 91, 7, 255, 148, 86, 9, 255, 137, 77, 13, 255, 122, 68, 12, 255, 116, 68, 9, 255, 114, 71, 4, 255, 112, 65, 8, 255, 110, 63, 12, 255, 111, 66, 6, 255, 106, 66, 11, 255, 100, 61, 16, 255, 95, 60, 13, 255, 94, 59, 10, 255, 97, 60, 4, 255, 96, 59, 5, 255, 100, 61, 13, 255, 101, 61, 11, 255, 99, 58, 6, 255, 107, 65, 14, 255, 102, 59, 21, 255, 95, 57, 9, 255, 92, 57, 11, 255, 98, 65, 9, 255, 101, 65, 6, 255, 98, 61, 19, 255, 97, 63, 19, 255, 99, 66, 14, 255, 99, 65, 15, 255, 104, 65, 17, 255, 109, 66, 21, 255, 110, 72, 17, 255, 104, 68, 16, 255, 98, 64, 11, 255, 99, 65, 24, 255, 100, 68, 16, 255, 99, 69, 11, 255, 107, 70, 25, 255, 108, 69, 18, 255, 104, 67, 19, 255, 102, 69, 15, 255, 100, 69, 14, 255, 99, 70, 9, 255, 97, 70, 16, 255, 97, 69, 20, 255, 96, 74, 11, 255, 101, 71, 7, 255, 106, 70, 22, 255, 105, 69, 21, 255, 109, 70, 23, 255, 101, 71, 15, 255, 101, 71, 23, 255, 106, 75, 29, 255, 104, 73, 14, 255, 108, 73, 17, 255, 105, 71, 20, 255, 109, 76, 28, 255, 111, 79, 23, 255, 118, 82, 23, 255, 131, 81, 23, 255, 134, 83, 15, 255, 129, 81, 15, 255, 129, 83, 21, 255, 127, 84, 20, 255, 127, 84, 12, 255, 133, 88, 17, 255, 131, 88, 20, 255, 127, 88, 20, 255, 123, 86, 20, 255, 121, 89, 16, 255, 123, 91, 29, 255, 133, 93, 33, 255, 133, 93, 23, 255, 133, 93, 40, 255, 136, 99, 34, 255, 135, 95, 31, 255, 137, 95, 39, 255, 140, 101, 35, 255, 140, 102, 29, 255, 138, 99, 39, 255, 141, 107, 34, 255, 145, 108, 33, 255, 147, 108, 44, 255, 145, 109, 35, 255, 144, 108, 38, 255, 148, 112, 39, 255, 148, 109, 48, 255, 147, 111, 40, 255, 140, 111, 26, 255, 147, 125, 42, 255, 159, 134, 60, 255, 147, 113, 33, 255, 159, 115, 36, 255, 162, 119, 25, 255, 164, 122, 21, 255, 172, 124, 26, 255, 172, 124, 24, 255, 160, 117, 19, 255, 150, 114, 26, 255, 145, 113, 26, 255, 144, 108, 29, 255, 146, 106, 27, 255, 148, 105, 27, 255, 136, 98, 26, 255, 132, 99, 18, 255, 134, 100, 22, 255, 136, 97, 16, 255, 142, 95, 26, 255, 146, 93, 27, 255, 151, 95, 13, 255, 151, 94, 23, 255, 148, 94, 15, 255, 151, 91, 19, 255, 151, 91, 20, 255, 141, 89, 13, 255, 131, 85, 15, 255, 133, 89, 9, 255, 146, 92, 9, 255, 144, 88, 12, 255, 133, 84, 12, 255, 132, 84, 13, 255, 133, 84, 9, 255, 138, 84, 16, 255, 133, 80, 12, 255, 144, 86, 18, 255, 137, 82, 12, 255, 129, 80, 6, 255, 134, 84, 15, 255, 135, 83, 12, 255, 137, 82, 6, 255, 142, 82, 9, 255, 143, 82, 11, 255, 147, 85, 15, 255, 153, 90, 12, 255, 157, 90, 6, 255, 157, 91, 15, 255, 160, 94, 11, 255, 163, 92, 10, 255, 174, 98, 8, 255, 177, 99, 0, 255, 182, 100, 1, 255, 183, 102, 3, 255, 176, 95, 4, 255, 166, 88, 7, 255, 157, 83, 7, 255, 149, 82, 6, 255, 148, 82, 5, 255, 150, 80, 3, 255, 148, 79, 2, 255, 148, 81, 1, 255, 148, 81, 3, 255, 144, 78, 2, 255, 143, 75, 3, 255, 145, 73, 6, 255, 145, 75, 6, 255, 141, 74, 5, 255, 143, 74, 6, 255, 152, 78, 10, 255, 155, 72, 6, 255, 150, 63, 4, 255, 137, 49, 3, 255, 135, 47, 7, 255, 123, 41, 10, 255, 100, 35, 8, 255, 101, 40, 5, 255, 112, 43, 0, 255, 114, 41, 10, 255, 114, 44, 9, 255, 128, 54, 4, 255, 143, 55, 3, 255, 125, 46, 3, 255, 112, 41, 11, 255, 111, 45, 6, 255, 112, 44, 1, 255, 129, 57, 1, 255, 141, 51, 6, 255, 130, 53, 6, 255, 136, 57, 2, 255, 138, 54, 9, 255, 118, 47, 9, 255, 119, 52, 16, 255, 122, 72, 14, 255, 120, 71, 10, 255, 120, 65, 24, 255, 118, 68, 15, 255, 133, 79, 16, 255, 148, 87, 20, 255, 152, 89, 20, 255, 141, 80, 15, 255, 133, 76, 5, 255, 112, 51, 11, 255, 98, 35, 8, 255, 101, 37, 14, 255, 112, 43, 16, 255, 110, 42, 5, 255, 108, 43, 7, 255, 109, 45, 9, 255, 110, 46, 7, 255, 110, 44, 7, 255, 103, 38, 5, 255, 99, 35, 3, 255, 0, 1, 53, 255, 0, 11, 84, 255, 0, 9, 84, 255, 0, 6, 76, 255, 1, 4, 62, 255, 2, 6, 60, 255, 3, 5, 64, 255, 3, 6, 45, 255, 1, 1, 30, 255, 3, 4, 31, 255, 1, 5, 30, 255, 1, 2, 17, 255, 5, 4, 14, 255, 2, 2, 10, 255, 1, 1, 8, 255, 2, 2, 11, 255, 2, 2, 13, 255, 1, 1, 12, 255, 1, 2, 10, 255, 1, 1, 8, 255, 1, 1, 8, 255, 1, 1, 7, 255, 0, 0, 4, 255, 0, 0, 1, 255, 1, 1, 3, 255, 1, 0, 2, 255, 0, 0, 0, 255, 0, 0, 1, 255, 1, 1, 3, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 0, 1, 2, 255, 5, 0, 0, 255, 1, 0, 0, 255, 16, 114, 131, 255, 28, 222, 214, 255, 1, 126, 101, 255, 24, 70, 95, 255, 44, 86, 120, 255, 78, 159, 193, 255, 128, 243, 243, 255, 34, 97, 87, 255, 0, 41, 40, 255, 4, 45, 57, 255, 3, 45, 75, 255, 4, 90, 118, 255, 2, 87, 96, 255, 1, 53, 54, 255, 2, 16, 5, 255, 2, 0, 14, 255, 6, 65, 133, 255, 2, 190, 236, 255, 11, 255, 255, 255, 18, 220, 223, 255, 3, 45, 50, 255, 3, 0, 0, 255, 1, 3, 6, 255, 1, 2, 12, 255, 0, 0, 7, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 5, 255, 0, 0, 2, 255, 0, 0, 4, 255, 4, 10, 30, 255, 10, 25, 69, 255, 11, 29, 70, 255, 9, 19, 31, 255, 2, 4, 0, 255, 1, 0, 8, 255, 17, 16, 50, 255, 31, 44, 97, 255, 21, 39, 112, 255, 6, 24, 97, 255, 2, 16, 59, 255, 3, 7, 16, 255, 6, 0, 0, 255, 0, 1, 2, 255, 5, 2, 8, 255, 1, 1, 6, 255, 0, 3, 5, 255, 2, 2, 3, 255, 1, 2, 0, 255, 1, 2, 3, 255, 0, 1, 1, 255, 3, 2, 3, 255, 6, 3, 1, 255, 9, 4, 0, 255, 12, 7, 2, 255, 10, 5, 1, 255, 11, 6, 2, 255, 9, 4, 0, 255, 9, 3, 0, 255, 7, 1, 0, 255, 8, 1, 1, 255, 9, 5, 2, 255, 12, 8, 4, 255, 13, 8, 4, 255, 11, 6, 2, 255, 12, 7, 3, 255, 13, 8, 2, 255, 4, 6, 3, 255, 15, 17, 14, 255, 37, 32, 12, 255, 60, 40, 21, 255, 182, 125, 30, 255, 171, 108, 14, 255, 57, 34, 7, 255, 32, 23, 3, 255, 21, 14, 3, 255, 19, 17, 2, 255, 42, 27, 6, 255, 36, 25, 7, 255, 59, 70, 18, 255, 81, 100, 42, 255, 71, 90, 24, 255, 73, 90, 16, 255, 66, 76, 11, 255, 66, 73, 19, 255, 58, 67, 13, 255, 61, 64, 10, 255, 55, 57, 12, 255, 50, 54, 6, 255, 62, 49, 9, 255, 53, 42, 8, 255, 61, 45, 4, 255, 51, 40, 10, 255, 50, 39, 8, 255, 45, 38, 7, 255, 49, 37, 7, 255, 52, 35, 9, 255, 51, 38, 13, 255, 49, 41, 12, 255, 56, 41, 11, 255, 53, 37, 10, 255, 53, 43, 10, 255, 47, 39, 1, 255, 61, 46, 2, 255, 74, 45, 6, 255, 62, 43, 7, 255, 67, 44, 6, 255, 67, 43, 8, 255, 68, 44, 7, 255, 74, 44, 1, 255, 70, 46, 2, 255, 69, 41, 6, 255, 70, 44, 11, 255, 67, 41, 11, 255, 77, 47, 5, 255, 91, 53, 3, 255, 98, 55, 7, 255, 99, 56, 10, 255, 92, 57, 3, 255, 87, 55, 0, 255, 87, 55, 11, 255, 89, 52, 16, 255, 113, 55, 6, 255, 107, 43, 4, 255, 97, 42, 10, 255, 87, 50, 5, 255, 72, 43, 6, 255, 73, 46, 4, 255, 78, 45, 3, 255, 79, 39, 11, 255, 79, 48, 10, 255, 76, 44, 0, 255, 78, 43, 7, 255, 79, 44, 9, 255, 81, 45, 7, 255, 81, 45, 9, 255, 83, 47, 7, 255, 84, 46, 9, 255, 93, 48, 12, 255, 96, 53, 6, 255, 92, 52, 6, 255, 96, 51, 12, 255, 96, 49, 12, 255, 96, 51, 12, 255, 100, 57, 5, 255, 109, 65, 5, 255, 111, 65, 6, 255, 117, 70, 4, 255, 122, 73, 3, 255, 133, 82, 6, 255, 154, 94, 7, 255, 157, 95, 10, 255, 164, 103, 3, 255, 169, 106, 6, 255, 168, 102, 10, 255, 158, 89, 2, 255, 160, 97, 10, 255, 144, 85, 13, 255, 134, 79, 8, 255, 125, 73, 1, 255, 122, 70, 13, 255, 116, 67, 13, 255, 111, 66, 9, 255, 110, 64, 4, 255, 116, 66, 7, 255, 113, 62, 9, 255, 112, 63, 9, 255, 107, 64, 10, 255, 102, 63, 13, 255, 95, 61, 9, 255, 98, 63, 15, 255, 95, 60, 8, 255, 96, 62, 8, 255, 94, 60, 7, 255, 97, 60, 12, 255, 100, 58, 19, 255, 96, 56, 12, 255, 96, 57, 10, 255, 95, 62, 13, 255, 92, 63, 6, 255, 97, 62, 5, 255, 104, 59, 10, 255, 96, 62, 17, 255, 97, 61, 17, 255, 101, 67, 10, 255, 103, 67, 17, 255, 104, 64, 17, 255, 110, 67, 13, 255, 106, 66, 29, 255, 106, 67, 21, 255, 96, 64, 12, 255, 95, 60, 20, 255, 101, 65, 16, 255, 100, 72, 3, 255, 107, 72, 15, 255, 109, 70, 19, 255, 103, 67, 18, 255, 99, 66, 12, 255, 102, 70, 16, 255, 99, 68, 19, 255, 100, 70, 13, 255, 106, 70, 20, 255, 103, 69, 17, 255, 104, 67, 20, 255, 106, 70, 18, 255, 109, 73, 17, 255, 109, 74, 20, 255, 104, 76, 15, 255, 101, 71, 16, 255, 104, 73, 27, 255, 106, 74, 20, 255, 109, 75, 21, 255, 110, 75, 21, 255, 108, 74, 26, 255, 113, 78, 17, 255, 114, 82, 16, 255, 132, 83, 25, 255, 134, 85, 18, 255, 129, 83, 18, 255, 129, 81, 18, 255, 129, 85, 12, 255, 130, 84, 15, 255, 132, 83, 23, 255, 132, 85, 20, 255, 130, 86, 32, 255, 126, 86, 27, 255, 127, 89, 22, 255, 130, 93, 22, 255, 132, 93, 28, 255, 135, 92, 29, 255, 138, 94, 30, 255, 139, 97, 34, 255, 135, 97, 29, 255, 138, 101, 25, 255, 138, 99, 32, 255, 141, 102, 30, 255, 143, 105, 33, 255, 145, 105, 36, 255, 145, 108, 28, 255, 149, 111, 31, 255, 147, 106, 42, 255, 147, 109, 35, 255, 148, 113, 28, 255, 149, 111, 35, 255, 150, 113, 27, 255, 149, 114, 22, 255, 141, 115, 32, 255, 154, 130, 50, 255, 153, 117, 55, 255, 163, 120, 28, 255, 159, 116, 24, 255, 167, 122, 27, 255, 174, 124, 26, 255, 171, 122, 17, 255, 161, 116, 19, 255, 152, 113, 30, 255, 143, 111, 23, 255, 145, 107, 34, 255, 148, 104, 25, 255, 145, 98, 24, 255, 144, 101, 23, 255, 139, 101, 26, 255, 134, 100, 23, 255, 138, 98, 23, 255, 141, 95, 16, 255, 143, 96, 22, 255, 148, 95, 21, 255, 153, 98, 9, 255, 152, 94, 17, 255, 153, 91, 19, 255, 154, 92, 15, 255, 144, 90, 19, 255, 135, 86, 24, 255, 135, 87, 16, 255, 139, 89, 14, 255, 141, 86, 9, 255, 138, 84, 9, 255, 135, 86, 10, 255, 133, 84, 11, 255, 133, 81, 7, 255, 136, 85, 9, 255, 144, 87, 9, 255, 137, 83, 2, 255, 136, 84, 10, 255, 137, 85, 7, 255, 135, 83, 9, 255, 139, 80, 15, 255, 141, 82, 14, 255, 144, 86, 8, 255, 148, 85, 6, 255, 155, 87, 13, 255, 157, 86, 11, 255, 159, 92, 16, 255, 163, 96, 9, 255, 167, 97, 5, 255, 172, 96, 8, 255, 171, 97, 4, 255, 179, 102, 4, 255, 184, 104, 4, 255, 183, 101, 3, 255, 172, 92, 2, 255, 162, 85, 4, 255, 153, 81, 3, 255, 149, 82, 3, 255, 151, 79, 3, 255, 146, 76, 0, 255, 147, 81, 3, 255, 147, 78, 3, 255, 146, 77, 2, 255, 152, 76, 5, 255, 140, 77, 2, 255, 139, 71, 0, 255, 148, 70, 3, 255, 149, 64, 5, 255, 141, 53, 6, 255, 136, 48, 8, 255, 125, 44, 6, 255, 121, 43, 8, 255, 115, 46, 5, 255, 100, 40, 7, 255, 102, 42, 7, 255, 106, 41, 6, 255, 100, 40, 1, 255, 103, 45, 3, 255, 125, 52, 2, 255, 132, 55, 2, 255, 121, 46, 9, 255, 106, 41, 5, 255, 107, 40, 0, 255, 114, 37, 3, 255, 114, 44, 4, 255, 127, 58, 4, 255, 122, 51, 2, 255, 142, 57, 5, 255, 144, 63, 2, 255, 123, 57, 8, 255, 123, 69, 12, 255, 132, 75, 21, 255, 125, 68, 6, 255, 112, 61, 1, 255, 119, 69, 19, 255, 140, 87, 8, 255, 160, 94, 8, 255, 155, 90, 16, 255, 142, 78, 11, 255, 138, 76, 7, 255, 144, 81, 11, 255, 122, 53, 8, 255, 104, 32, 6, 255, 101, 33, 8, 255, 106, 41, 10, 255, 107, 46, 10, 255, 104, 43, 5, 255, 107, 40, 5, 255, 112, 41, 8, 255, 105, 41, 6, 255, 101, 36, 5, 255, 101, 37, 6, 255, 1, 2, 14, 255, 1, 2, 4, 255, 3, 2, 10, 255, 4, 0, 8, 255, 1, 4, 12, 255, 2, 3, 15, 255, 2, 2, 9, 255, 1, 3, 8, 255, 2, 4, 7, 255, 2, 2, 14, 255, 2, 4, 16, 255, 6, 1, 14, 255, 2, 2, 11, 255, 2, 2, 10, 255, 1, 1, 9, 255, 2, 2, 12, 255, 2, 1, 15, 255, 0, 1, 14, 255, 1, 3, 16, 255, 3, 3, 14, 255, 2, 2, 13, 255, 2, 2, 10, 255, 0, 1, 7, 255, 0, 1, 4, 255, 1, 1, 6, 255, 1, 1, 4, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 3, 255, 1, 1, 3, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 2, 0, 3, 255, 1, 2, 3, 255, 2, 1, 2, 255, 2, 0, 0, 255, 5, 18, 23, 255, 3, 47, 38, 255, 0, 12, 18, 255, 2, 47, 97, 255, 18, 109, 156, 255, 15, 109, 134, 255, 61, 194, 218, 255, 111, 236, 236, 255, 13, 98, 102, 255, 0, 83, 110, 255, 4, 95, 116, 255, 1, 63, 53, 255, 6, 28, 12, 255, 3, 0, 5, 255, 5, 21, 75, 255, 0, 159, 207, 255, 5, 248, 255, 255, 13, 255, 255, 255, 48, 245, 249, 255, 92, 255, 255, 255, 23, 118, 107, 255, 0, 0, 0, 255, 2, 1, 4, 255, 1, 2, 1, 255, 0, 1, 2, 255, 2, 1, 2, 255, 1, 0, 0, 255, 0, 0, 0, 255, 0, 5, 20, 255, 7, 19, 64, 255, 12, 31, 68, 255, 9, 23, 36, 255, 3, 7, 7, 255, 2, 1, 0, 255, 10, 9, 30, 255, 25, 39, 79, 255, 15, 37, 115, 255, 3, 30, 107, 255, 9, 12, 45, 255, 5, 1, 5, 255, 1, 1, 3, 255, 0, 0, 0, 255, 2, 1, 3, 255, 1, 0, 1, 255, 2, 1, 1, 255, 3, 2, 1, 255, 2, 2, 1, 255, 4, 0, 0, 255, 1, 0, 2, 255, 3, 1, 5, 255, 4, 1, 3, 255, 9, 3, 1, 255, 11, 5, 2, 255, 12, 7, 3, 255, 14, 6, 3, 255, 12, 5, 1, 255, 11, 5, 1, 255, 9, 4, 0, 255, 8, 4, 2, 255, 11, 6, 6, 255, 13, 4, 4, 255, 15, 6, 3, 255, 15, 8, 2, 255, 11, 4, 0, 255, 12, 7, 3, 255, 13, 9, 6, 255, 11, 7, 6, 255, 4, 9, 8, 255, 13, 12, 6, 255, 24, 5, 5, 255, 88, 55, 25, 255, 189, 121, 12, 255, 98, 53, 10, 255, 34, 20, 6, 255, 28, 23, 9, 255, 24, 15, 6, 255, 23, 14, 10, 255, 35, 22, 10, 255, 64, 42, 8, 255, 80, 89, 36, 255, 82, 104, 29, 255, 66, 87, 15, 255, 69, 88, 7, 255, 65, 78, 11, 255, 62, 74, 15, 255, 56, 70, 12, 255, 61, 62, 10, 255, 59, 58, 8, 255, 52, 52, 12, 255, 48, 44, 4, 255, 50, 46, 16, 255, 56, 46, 4, 255, 57, 47, 1, 255, 54, 43, 9, 255, 50, 41, 9, 255, 54, 41, 5, 255, 56, 39, 5, 255, 55, 38, 12, 255, 49, 36, 9, 255, 53, 38, 6, 255, 61, 39, 10, 255, 65, 42, 9, 255, 73, 52, 12, 255, 76, 54, 8, 255, 77, 51, 3, 255, 73, 48, 2, 255, 68, 47, 7, 255, 63, 48, 6, 255, 75, 42, 7, 255, 76, 44, 8, 255, 69, 43, 11, 255, 71, 41, 6, 255, 67, 44, 4, 255, 71, 46, 5, 255, 75, 45, 16, 255, 78, 51, 9, 255, 88, 55, 2, 255, 92, 57, 4, 255, 94, 57, 10, 255, 89, 53, 6, 255, 85, 51, 10, 255, 89, 53, 10, 255, 115, 57, 2, 255, 112, 47, 3, 255, 88, 33, 10, 255, 91, 45, 11, 255, 84, 42, 12, 255, 75, 42, 9, 255, 76, 46, 7, 255, 85, 43, 5, 255, 83, 42, 8, 255, 78, 43, 7, 255, 78, 43, 3, 255, 80, 47, 12, 255, 88, 48, 1, 255, 79, 42, 9, 255, 74, 43, 12, 255, 82, 49, 7, 255, 89, 46, 13, 255, 94, 51, 12, 255, 96, 55, 14, 255, 95, 53, 10, 255, 93, 49, 5, 255, 94, 51, 13, 255, 98, 56, 10, 255, 106, 62, 9, 255, 111, 65, 4, 255, 115, 69, 8, 255, 121, 74, 10, 255, 137, 90, 3, 255, 160, 100, 2, 255, 157, 93, 5, 255, 158, 93, 9, 255, 157, 93, 2, 255, 148, 90, 8, 255, 137, 84, 9, 255, 135, 80, 10, 255, 131, 77, 7, 255, 122, 71, 11, 255, 120, 70, 12, 255, 121, 70, 13, 255, 115, 66, 8, 255, 112, 67, 1, 255, 112, 65, 7, 255, 115, 64, 14, 255, 114, 62, 10, 255, 114, 65, 2, 255, 106, 61, 6, 255, 99, 60, 4, 255, 100, 64, 3, 255, 100, 61, 8, 255, 99, 62, 9, 255, 95, 61, 14, 255, 95, 63, 15, 255, 100, 64, 8, 255, 99, 64, 15, 255, 93, 62, 17, 255, 97, 62, 14, 255, 95, 60, 15, 255, 94, 62, 10, 255, 99, 63, 19, 255, 101, 61, 12, 255, 99, 61, 19, 255, 99, 60, 23, 255, 104, 67, 13, 255, 103, 62, 21, 255, 108, 66, 21, 255, 107, 66, 17, 255, 104, 66, 21, 255, 108, 67, 12, 255, 102, 65, 18, 255, 101, 66, 10, 255, 104, 65, 14, 255, 102, 67, 17, 255, 108, 68, 17, 255, 105, 71, 8, 255, 103, 70, 16, 255, 103, 68, 26, 255, 100, 69, 18, 255, 100, 66, 23, 255, 104, 71, 18, 255, 105, 70, 14, 255, 106, 68, 17, 255, 104, 72, 17, 255, 107, 71, 16, 255, 110, 70, 20, 255, 105, 72, 16, 255, 108, 74, 19, 255, 106, 75, 17, 255, 104, 72, 28, 255, 106, 72, 28, 255, 112, 78, 22, 255, 111, 77, 9, 255, 113, 77, 20, 255, 115, 77, 23, 255, 112, 82, 15, 255, 130, 86, 13, 255, 134, 85, 20, 255, 131, 84, 23, 255, 131, 83, 18, 255, 128, 82, 25, 255, 130, 83, 23, 255, 129, 81, 17, 255, 135, 86, 33, 255, 135, 88, 24, 255, 130, 88, 17, 255, 130, 89, 22, 255, 131, 91, 24, 255, 131, 94, 18, 255, 138, 97, 21, 255, 142, 95, 30, 255, 141, 95, 32, 255, 136, 101, 21, 255, 139, 99, 29, 255, 139, 99, 29, 255, 138, 101, 31, 255, 138, 103, 28, 255, 142, 103, 35, 255, 147, 103, 35, 255, 150, 106, 27, 255, 148, 107, 25, 255, 149, 109, 35, 255, 148, 108, 36, 255, 151, 111, 26, 255, 151, 109, 37, 255, 153, 111, 29, 255, 142, 111, 35, 255, 148, 125, 39, 255, 157, 126, 37, 255, 160, 116, 33, 255, 164, 118, 29, 255, 167, 119, 23, 255, 173, 120, 29, 255, 171, 121, 25, 255, 164, 118, 25, 255, 153, 112, 36, 255, 144, 109, 27, 255, 147, 105, 34, 255, 149, 102, 28, 255, 149, 101, 29, 255, 146, 101, 19, 255, 144, 103, 18, 255, 135, 99, 14, 255, 137, 99, 20, 255, 141, 97, 15, 255, 146, 98, 16, 255, 148, 94, 13, 255, 150, 92, 11, 255, 152, 92, 20, 255, 154, 92, 25, 255, 149, 93, 18, 255, 140, 91, 13, 255, 137, 89, 12, 255, 136, 87, 19, 255, 136, 88, 18, 255, 140, 85, 8, 255, 143, 85, 6, 255, 135, 86, 8, 255, 131, 83, 9, 255, 137, 85, 15, 255, 136, 85, 12, 255, 142, 83, 9, 255, 140, 82, 6, 255, 138, 85, 9, 255, 140, 86, 10, 255, 140, 85, 10, 255, 142, 83, 12, 255, 141, 82, 7, 255, 148, 88, 9, 255, 154, 87, 10, 255, 159, 86, 14, 255, 160, 86, 9, 255, 163, 94, 12, 255, 164, 94, 15, 255, 169, 95, 5, 255, 174, 98, 6, 255, 175, 103, 5, 255, 179, 103, 3, 255, 185, 105, 4, 255, 188, 105, 6, 255, 180, 96, 4, 255, 170, 89, 6, 255, 161, 86, 4, 255, 151, 83, 3, 255, 149, 79, 6, 255, 149, 80, 5, 255, 151, 84, 7, 255, 152, 78, 3, 255, 154, 79, 4, 255, 162, 76, 2, 255, 168, 70, 9, 255, 155, 61, 7, 255, 138, 52, 5, 255, 127, 48, 3, 255, 128, 52, 3, 255, 129, 52, 1, 255, 126, 47, 6, 255, 115, 43, 8, 255, 103, 40, 2, 255, 98, 35, 7, 255, 99, 37, 10, 255, 97, 35, 8, 255, 102, 39, 4, 255, 117, 50, 2, 255, 123, 52, 6, 255, 119, 47, 3, 255, 104, 43, 7, 255, 107, 41, 4, 255, 112, 38, 4, 255, 112, 38, 8, 255, 118, 42, 4, 255, 120, 46, 6, 255, 142, 65, 5, 255, 150, 69, 9, 255, 128, 58, 3, 255, 127, 69, 5, 255, 127, 71, 10, 255, 119, 71, 10, 255, 115, 68, 12, 255, 130, 75, 21, 255, 151, 93, 17, 255, 157, 100, 22, 255, 158, 95, 15, 255, 135, 78, 4, 255, 131, 72, 13, 255, 145, 78, 17, 255, 155, 87, 17, 255, 126, 63, 12, 255, 102, 36, 10, 255, 102, 37, 4, 255, 100, 36, 1, 255, 103, 40, 5, 255, 102, 40, 4, 255, 106, 40, 7, 255, 106, 35, 9, 255, 101, 36, 7, 255, 101, 36, 8, 255, 101, 36, 8, 255, 3, 3, 13, 255, 1, 0, 12, 255, 2, 1, 14, 255, 3, 4, 15, 255, 1, 3, 14, 255, 0, 2, 14, 255, 0, 2, 14, 255, 2, 3, 16, 255, 2, 4, 17, 255, 0, 1, 18, 255, 1, 2, 18, 255, 3, 2, 13, 255, 1, 1, 5, 255, 1, 2, 7, 255, 1, 2, 8, 255, 1, 2, 8, 255, 2, 3, 8, 255, 2, 3, 9, 255, 1, 1, 12, 255, 3, 4, 15, 255, 1, 1, 11, 255, 1, 0, 9, 255, 2, 1, 7, 255, 0, 0, 5, 255, 0, 0, 6, 255, 2, 1, 4, 255, 0, 0, 1, 255, 0, 0, 2, 255, 0, 0, 2, 255, 1, 1, 3, 255, 0, 0, 2, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 2, 2, 2, 255, 1, 1, 0, 255, 0, 0, 3, 255, 8, 15, 29, 255, 3, 39, 71, 255, 6, 66, 105, 255, 18, 108, 141, 255, 0, 117, 155, 255, 64, 188, 227, 255, 111, 225, 244, 255, 26, 110, 124, 255, 2, 82, 94, 255, 2, 39, 25, 255, 6, 8, 40, 255, 4, 101, 173, 255, 1, 234, 255, 255, 17, 255, 255, 255, 36, 247, 250, 255, 61, 239, 250, 255, 179, 255, 255, 255, 186, 229, 197, 255, 19, 52, 30, 255, 0, 0, 0, 255, 1, 3, 2, 255, 0, 0, 0, 255, 4, 0, 0, 255, 4, 0, 1, 255, 2, 4, 17, 255, 3, 19, 51, 255, 8, 21, 72, 255, 8, 20, 42, 255, 2, 7, 9, 255, 4, 0, 5, 255, 8, 6, 30, 255, 20, 23, 90, 255, 10, 26, 89, 255, 6, 22, 97, 255, 9, 22, 82, 255, 1, 9, 35, 255, 1, 1, 0, 255, 5, 1, 0, 255, 2, 0, 1, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 1, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 2, 1, 0, 255, 3, 3, 1, 255, 6, 2, 0, 255, 10, 4, 1, 255, 11, 4, 1, 255, 7, 3, 0, 255, 8, 4, 1, 255, 9, 3, 0, 255, 8, 3, 1, 255, 8, 4, 1, 255, 7, 3, 0, 255, 7, 3, 0, 255, 8, 4, 1, 255, 9, 3, 2, 255, 13, 6, 1, 255, 14, 7, 2, 255, 13, 7, 3, 255, 13, 10, 10, 255, 7, 7, 2, 255, 8, 5, 6, 255, 17, 16, 17, 255, 30, 25, 22, 255, 148, 130, 70, 255, 155, 103, 22, 255, 74, 36, 10, 255, 37, 19, 0, 255, 24, 15, 6, 255, 28, 19, 3, 255, 25, 18, 7, 255, 22, 18, 10, 255, 40, 25, 1, 255, 77, 65, 16, 255, 84, 104, 38, 255, 77, 99, 28, 255, 72, 89, 27, 255, 68, 79, 16, 255, 69, 74, 15, 255, 64, 69, 16, 255, 59, 65, 22, 255, 61, 63, 14, 255, 60, 61, 3, 255, 58, 58, 6, 255, 52, 49, 6, 255, 53, 46, 7, 255, 56, 48, 6, 255, 58, 45, 6, 255, 58, 43, 10, 255, 54, 37, 14, 255, 53, 36, 7, 255, 54, 42, 0, 255, 51, 37, 8, 255, 55, 42, 8, 255, 54, 44, 5, 255, 71, 53, 8, 255, 92, 61, 12, 255, 93, 57, 7, 255, 85, 52, 6, 255, 76, 50, 7, 255, 81, 51, 5, 255, 80, 48, 9, 255, 72, 45, 8, 255, 69, 44, 9, 255, 67, 42, 12, 255, 72, 44, 9, 255, 69, 40, 3, 255, 65, 38, 10, 255, 67, 44, 5, 255, 72, 46, 7, 255, 85, 54, 10, 255, 90, 54, 7, 255, 94, 54, 5, 255, 96, 54, 10, 255, 90, 55, 6, 255, 87, 56, 5, 255, 87, 53, 6, 255, 118, 52, 10, 255, 123, 48, 6, 255, 79, 35, 7, 255, 85, 39, 5, 255, 79, 42, 11, 255, 73, 44, 15, 255, 82, 47, 5, 255, 85, 45, 5, 255, 85, 38, 6, 255, 80, 43, 9, 255, 80, 46, 3, 255, 75, 45, 9, 255, 82, 44, 9, 255, 84, 47, 3, 255, 85, 45, 10, 255, 85, 49, 9, 255, 85, 51, 5, 255, 94, 51, 6, 255, 99, 54, 9, 255, 91, 55, 9, 255, 92, 52, 8, 255, 100, 52, 10, 255, 99, 53, 9, 255, 104, 57, 8, 255, 109, 60, 3, 255, 114, 63, 5, 255, 127, 75, 13, 255, 135, 83, 9, 255, 159, 95, 8, 255, 149, 89, 2, 255, 147, 89, 9, 255, 140, 84, 6, 255, 135, 79, 0, 255, 134, 75, 12, 255, 126, 72, 11, 255, 122, 71, 5, 255, 119, 69, 6, 255, 118, 69, 7, 255, 115, 69, 7, 255, 106, 64, 7, 255, 103, 63, 11, 255, 100, 62, 9, 255, 100, 60, 9, 255, 104, 64, 15, 255, 104, 63, 8, 255, 106, 63, 7, 255, 111, 65, 7, 255, 104, 67, 9, 255, 99, 60, 13, 255, 95, 60, 16, 255, 96, 65, 3, 255, 100, 61, 9, 255, 101, 62, 13, 255, 97, 61, 9, 255, 102, 61, 14, 255, 101, 63, 16, 255, 93, 64, 11, 255, 97, 65, 8, 255, 100, 60, 14, 255, 96, 63, 9, 255, 96, 63, 13, 255, 93, 64, 19, 255, 96, 64, 18, 255, 101, 62, 16, 255, 105, 69, 10, 255, 109, 71, 8, 255, 113, 72, 10, 255, 107, 66, 15, 255, 106, 67, 18, 255, 106, 66, 19, 255, 105, 65, 16, 255, 109, 71, 5, 255, 110, 69, 14, 255, 110, 68, 25, 255, 111, 69, 22, 255, 104, 66, 16, 255, 101, 67, 22, 255, 102, 69, 20, 255, 107, 73, 14, 255, 106, 72, 12, 255, 105, 70, 16, 255, 106, 72, 10, 255, 110, 75, 12, 255, 108, 71, 16, 255, 108, 73, 22, 255, 111, 73, 24, 255, 113, 74, 15, 255, 110, 74, 12, 255, 111, 75, 14, 255, 111, 75, 14, 255, 118, 78, 17, 255, 116, 78, 12, 255, 111, 79, 23, 255, 111, 84, 23, 255, 120, 85, 13, 255, 134, 84, 21, 255, 134, 83, 20, 255, 133, 81, 18, 255, 133, 84, 17, 255, 129, 84, 18, 255, 129, 84, 17, 255, 137, 86, 19, 255, 138, 86, 19, 255, 132, 88, 19, 255, 128, 94, 15, 255, 130, 91, 22, 255, 133, 94, 31, 255, 136, 95, 29, 255, 136, 92, 30, 255, 139, 95, 32, 255, 141, 102, 24, 255, 136, 97, 26, 255, 140, 100, 37, 255, 138, 102, 24, 255, 141, 102, 35, 255, 143, 103, 29, 255, 149, 107, 22, 255, 144, 103, 23, 255, 142, 108, 29, 255, 146, 109, 36, 255, 152, 103, 47, 255, 151, 107, 32, 255, 151, 111, 35, 255, 151, 110, 31, 255, 147, 111, 31, 255, 147, 116, 35, 255, 155, 121, 39, 255, 160, 116, 33, 255, 170, 119, 22, 255, 170, 123, 23, 255, 173, 120, 33, 255, 176, 121, 23, 255, 172, 120, 23, 255, 158, 112, 32, 255, 150, 110, 19, 255, 151, 109, 19, 255, 155, 105, 31, 255, 149, 101, 26, 255, 147, 98, 27, 255, 148, 100, 14, 255, 141, 98, 25, 255, 136, 98, 25, 255, 144, 102, 20, 255, 151, 98, 16, 255, 148, 100, 25, 255, 148, 96, 18, 255, 155, 91, 15, 255, 157, 94, 12, 255, 149, 92, 15, 255, 144, 90, 15, 255, 137, 91, 4, 255, 136, 88, 13, 255, 134, 85, 16, 255, 141, 89, 10, 255, 141, 85, 21, 255, 140, 85, 17, 255, 140, 87, 10, 255, 142, 85, 11, 255, 141, 84, 7, 255, 142, 86, 7, 255, 142, 84, 11, 255, 144, 88, 11, 255, 142, 85, 6, 255, 142, 83, 4, 255, 144, 84, 5, 255, 143, 87, 7, 255, 152, 91, 14, 255, 162, 93, 14, 255, 161, 89, 7, 255, 163, 85, 7, 255, 166, 94, 9, 255, 168, 94, 7, 255, 169, 89, 1, 255, 174, 94, 4, 255, 172, 100, 7, 255, 179, 100, 2, 255, 189, 107, 8, 255, 185, 103, 3, 255, 180, 98, 0, 255, 177, 98, 5, 255, 167, 90, 4, 255, 161, 83, 2, 255, 155, 84, 2, 255, 156, 84, 7, 255, 191, 98, 10, 255, 194, 96, 3, 255, 189, 90, 3, 255, 187, 81, 2, 255, 172, 70, 5, 255, 149, 54, 4, 255, 123, 48, 8, 255, 117, 46, 6, 255, 129, 57, 0, 255, 130, 58, 8, 255, 112, 44, 10, 255, 96, 38, 6, 255, 93, 36, 6, 255, 94, 35, 4, 255, 91, 33, 7, 255, 98, 41, 8, 255, 110, 51, 3, 255, 119, 50, 6, 255, 116, 44, 1, 255, 108, 37, 6, 255, 102, 37, 5, 255, 109, 40, 5, 255, 123, 44, 7, 255, 124, 49, 9, 255, 120, 43, 4, 255, 135, 54, 1, 255, 162, 76, 8, 255, 140, 62, 4, 255, 128, 66, 9, 255, 119, 66, 2, 255, 118, 62, 5, 255, 129, 72, 18, 255, 143, 87, 15, 255, 150, 93, 23, 255, 154, 94, 26, 255, 158, 100, 24, 255, 154, 96, 25, 255, 142, 85, 15, 255, 157, 96, 24, 255, 163, 95, 20, 255, 154, 86, 14, 255, 137, 74, 13, 255, 112, 52, 6, 255, 100, 43, 6, 255, 103, 42, 7, 255, 108, 40, 6, 255, 91, 30, 7, 255, 87, 30, 9, 255, 99, 34, 5, 255, 93, 30, 7, 255, 99, 39, 11, 255, 104, 34, 6, 255, 3, 3, 16, 255, 1, 1, 15, 255, 0, 3, 16, 255, 0, 2, 15, 255, 0, 1, 13, 255, 0, 3, 16, 255, 1, 2, 14, 255, 0, 2, 12, 255, 0, 3, 14, 255, 2, 4, 17, 255, 0, 1, 15, 255, 2, 2, 14, 255, 4, 4, 13, 255, 2, 2, 9, 255, 3, 3, 12, 255, 2, 3, 13, 255, 2, 2, 12, 255, 2, 2, 12, 255, 1, 1, 13, 255, 1, 3, 15, 255, 1, 2, 15, 255, 1, 1, 12, 255, 0, 0, 8, 255, 1, 1, 7, 255, 2, 1, 8, 255, 0, 0, 5, 255, 1, 1, 3, 255, 1, 1, 4, 255, 1, 1, 4, 255, 1, 1, 3, 255, 0, 0, 2, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 2, 255, 0, 0, 1, 255, 0, 0, 0, 255, 1, 2, 0, 255, 0, 2, 2, 255, 0, 2, 4, 255, 1, 22, 33, 255, 0, 27, 74, 255, 48, 117, 189, 255, 50, 163, 212, 255, 48, 164, 231, 255, 210, 249, 255, 255, 157, 228, 217, 255, 18, 88, 101, 255, 4, 97, 154, 255, 3, 189, 232, 255, 5, 255, 255, 255, 45, 252, 247, 255, 52, 236, 253, 255, 59, 232, 250, 255, 211, 255, 255, 255, 210, 242, 200, 255, 41, 71, 41, 255, 0, 0, 0, 255, 6, 1, 7, 255, 1, 1, 4, 255, 5, 1, 0, 255, 2, 0, 9, 255, 0, 13, 43, 255, 1, 18, 70, 255, 4, 18, 56, 255, 5, 12, 18, 255, 3, 1, 0, 255, 6, 7, 32, 255, 12, 21, 69, 255, 9, 27, 101, 255, 7, 26, 122, 255, 2, 13, 80, 255, 2, 9, 34, 255, 1, 1, 3, 255, 2, 0, 1, 255, 1, 3, 6, 255, 0, 4, 0, 255, 2, 1, 3, 255, 2, 1, 2, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 3, 3, 1, 255, 5, 4, 2, 255, 6, 3, 0, 255, 6, 3, 0, 255, 7, 3, 1, 255, 8, 4, 1, 255, 7, 4, 0, 255, 10, 5, 2, 255, 8, 4, 1, 255, 6, 2, 0, 255, 8, 4, 1, 255, 9, 5, 2, 255, 7, 3, 0, 255, 10, 5, 2, 255, 10, 8, 2, 255, 8, 6, 7, 255, 12, 10, 2, 255, 14, 10, 6, 255, 1, 1, 4, 255, 31, 27, 26, 255, 113, 92, 64, 255, 47, 38, 14, 255, 163, 150, 65, 255, 140, 107, 24, 255, 57, 53, 32, 255, 53, 49, 44, 255, 36, 24, 6, 255, 26, 21, 3, 255, 21, 18, 8, 255, 34, 23, 8, 255, 64, 39, 11, 255, 79, 84, 20, 255, 92, 102, 21, 255, 83, 91, 11, 255, 77, 80, 12, 255, 71, 73, 9, 255, 70, 68, 11, 255, 68, 67, 10, 255, 65, 65, 11, 255, 64, 65, 16, 255, 63, 59, 1, 255, 62, 59, 4, 255, 56, 52, 4, 255, 54, 47, 7, 255, 52, 49, 10, 255, 53, 47, 12, 255, 54, 43, 10, 255, 50, 37, 16, 255, 57, 49, 8, 255, 48, 40, 2, 255, 56, 43, 10, 255, 57, 40, 3, 255, 69, 52, 5, 255, 84, 60, 5, 255, 92, 62, 0, 255, 91, 62, 7, 255, 80, 55, 9, 255, 72, 49, 11, 255, 73, 49, 6, 255, 73, 46, 7, 255, 70, 47, 9, 255, 67, 46, 4, 255, 70, 47, 4, 255, 71, 41, 5, 255, 71, 39, 7, 255, 72, 41, 7, 255, 69, 42, 4, 255, 76, 47, 4, 255, 84, 52, 5, 255, 89, 55, 4, 255, 93, 58, 6, 255, 94, 51, 5, 255, 99, 57, 11, 255, 93, 53, 10, 255, 86, 45, 4, 255, 120, 54, 4, 255, 135, 55, 9, 255, 90, 34, 6, 255, 83, 42, 5, 255, 81, 43, 10, 255, 80, 43, 6, 255, 83, 52, 2, 255, 83, 47, 5, 255, 87, 43, 2, 255, 82, 41, 12, 255, 78, 46, 9, 255, 72, 48, 8, 255, 81, 44, 13, 255, 88, 50, 6, 255, 87, 49, 7, 255, 87, 49, 11, 255, 84, 53, 3, 255, 93, 56, 1, 255, 99, 53, 7, 255, 93, 51, 12, 255, 91, 53, 10, 255, 95, 54, 9, 255, 101, 56, 10, 255, 106, 60, 8, 255, 109, 62, 13, 255, 114, 64, 10, 255, 120, 71, 3, 255, 127, 79, 4, 255, 145, 83, 7, 255, 137, 79, 3, 255, 137, 82, 10, 255, 135, 80, 8, 255, 128, 77, 3, 255, 125, 72, 7, 255, 117, 67, 6, 255, 116, 72, 3, 255, 112, 71, 0, 255, 108, 67, 2, 255, 109, 65, 10, 255, 108, 62, 12, 255, 106, 60, 9, 255, 101, 61, 6, 255, 103, 63, 6, 255, 103, 64, 10, 255, 102, 61, 15, 255, 102, 61, 16, 255, 104, 62, 10, 255, 99, 62, 9, 255, 97, 61, 10, 255, 98, 62, 14, 255, 98, 59, 14, 255, 98, 59, 12, 255, 97, 62, 16, 255, 99, 63, 11, 255, 100, 63, 19, 255, 101, 58, 14, 255, 92, 63, 6, 255, 95, 63, 12, 255, 94, 60, 15, 255, 95, 63, 9, 255, 102, 66, 17, 255, 100, 64, 11, 255, 101, 62, 16, 255, 107, 67, 15, 255, 110, 70, 6, 255, 109, 71, 11, 255, 108, 70, 10, 255, 108, 70, 16, 255, 104, 68, 14, 255, 100, 64, 13, 255, 105, 68, 18, 255, 106, 69, 10, 255, 112, 72, 16, 255, 112, 70, 16, 255, 111, 70, 9, 255, 110, 69, 15, 255, 108, 70, 19, 255, 103, 69, 14, 255, 104, 71, 9, 255, 109, 75, 15, 255, 105, 69, 13, 255, 106, 70, 15, 255, 111, 75, 12, 255, 110, 74, 13, 255, 107, 72, 18, 255, 112, 77, 15, 255, 110, 76, 18, 255, 104, 73, 16, 255, 104, 75, 5, 255, 107, 76, 14, 255, 112, 79, 18, 255, 111, 76, 18, 255, 114, 79, 18, 255, 116, 80, 20, 255, 121, 82, 21, 255, 134, 84, 29, 255, 135, 81, 27, 255, 134, 85, 19, 255, 132, 84, 18, 255, 131, 85, 15, 255, 129, 87, 20, 255, 131, 86, 26, 255, 139, 90, 23, 255, 138, 90, 20, 255, 134, 91, 17, 255, 133, 90, 26, 255, 133, 90, 30, 255, 134, 91, 31, 255, 138, 96, 21, 255, 142, 101, 20, 255, 139, 98, 33, 255, 139, 100, 29, 255, 140, 96, 33, 255, 143, 98, 24, 255, 148, 105, 23, 255, 144, 102, 28, 255, 144, 105, 33, 255, 145, 106, 37, 255, 145, 104, 36, 255, 145, 107, 36, 255, 147, 110, 29, 255, 153, 105, 25, 255, 156, 107, 34, 255, 150, 112, 37, 255, 151, 112, 27, 255, 147, 110, 25, 255, 151, 117, 30, 255, 155, 119, 32, 255, 164, 123, 20, 255, 172, 120, 19, 255, 178, 123, 28, 255, 177, 123, 22, 255, 171, 119, 16, 255, 162, 114, 24, 255, 154, 114, 13, 255, 153, 110, 17, 255, 153, 104, 26, 255, 152, 103, 23, 255, 150, 102, 19, 255, 150, 104, 10, 255, 144, 103, 19, 255, 138, 103, 13, 255, 145, 104, 10, 255, 151, 98, 19, 255, 150, 100, 17, 255, 151, 99, 14, 255, 155, 98, 8, 255, 157, 95, 13, 255, 153, 91, 17, 255, 145, 87, 22, 255, 142, 88, 17, 255, 141, 91, 9, 255, 141, 90, 5, 255, 143, 89, 5, 255, 141, 86, 14, 255, 141, 85, 14, 255, 140, 85, 11, 255, 146, 87, 10, 255, 145, 86, 5, 255, 142, 84, 4, 255, 146, 86, 11, 255, 143, 86, 12, 255, 145, 84, 10, 255, 145, 85, 6, 255, 146, 88, 5, 255, 151, 89, 8, 255, 149, 92, 12, 255, 151, 94, 16, 255, 157, 91, 13, 255, 160, 91, 7, 255, 165, 94, 11, 255, 167, 93, 8, 255, 165, 92, 3, 255, 171, 97, 2, 255, 179, 101, 6, 255, 184, 101, 6, 255, 186, 104, 5, 255, 185, 103, 3, 255, 185, 103, 3, 255, 183, 102, 5, 255, 177, 97, 3, 255, 170, 91, 3, 255, 164, 84, 5, 255, 157, 78, 5, 255, 167, 87, 8, 255, 204, 101, 5, 255, 209, 100, 8, 255, 175, 72, 11, 255, 147, 56, 9, 255, 123, 49, 12, 255, 119, 47, 7, 255, 117, 46, 7, 255, 119, 48, 7, 255, 110, 44, 8, 255, 96, 32, 0, 255, 105, 40, 12, 255, 89, 33, 8, 255, 83, 38, 6, 255, 95, 42, 5, 255, 102, 40, 3, 255, 107, 42, 8, 255, 110, 45, 11, 255, 114, 44, 3, 255, 109, 42, 8, 255, 105, 42, 5, 255, 112, 45, 8, 255, 123, 47, 11, 255, 131, 48, 3, 255, 133, 54, 7, 255, 139, 71, 12, 255, 136, 76, 5, 255, 132, 69, 4, 255, 131, 72, 13, 255, 130, 77, 11, 255, 139, 86, 5, 255, 152, 94, 26, 255, 151, 95, 16, 255, 155, 97, 17, 255, 157, 99, 28, 255, 157, 98, 14, 255, 161, 98, 13, 255, 163, 101, 14, 255, 167, 104, 18, 255, 165, 97, 19, 255, 155, 84, 17, 255, 140, 77, 17, 255, 116, 53, 6, 255, 107, 44, 9, 255, 105, 45, 7, 255, 106, 43, 5, 255, 102, 37, 8, 255, 103, 42, 10, 255, 94, 38, 3, 255, 93, 37, 7, 255, 98, 43, 10, 255, 98, 40, 7, 255, 0, 2, 14, 255, 0, 1, 16, 255, 1, 2, 20, 255, 1, 3, 18, 255, 0, 2, 14, 255, 0, 2, 14, 255, 2, 3, 14, 255, 2, 3, 14, 255, 1, 2, 12, 255, 1, 2, 11, 255, 1, 1, 12, 255, 1, 1, 13, 255, 1, 1, 12, 255, 1, 1, 10, 255, 3, 2, 15, 255, 3, 2, 16, 255, 2, 1, 15, 255, 2, 2, 13, 255, 2, 2, 14, 255, 2, 4, 14, 255, 0, 2, 12, 255, 2, 2, 10, 255, 2, 2, 7, 255, 0, 2, 5, 255, 1, 3, 5, 255, 1, 1, 5, 255, 0, 0, 4, 255, 0, 0, 4, 255, 1, 0, 5, 255, 1, 0, 4, 255, 1, 1, 3, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 2, 255, 2, 0, 1, 255, 2, 1, 0, 255, 2, 3, 0, 255, 2, 0, 0, 255, 2, 9, 17, 255, 0, 27, 65, 255, 64, 135, 188, 255, 48, 166, 218, 255, 77, 223, 253, 255, 198, 255, 249, 255, 199, 254, 254, 255, 101, 214, 238, 255, 2, 224, 251, 255, 14, 243, 250, 255, 69, 240, 246, 255, 46, 234, 249, 255, 41, 224, 249, 255, 211, 251, 255, 255, 204, 234, 192, 255, 35, 64, 33, 255, 0, 0, 1, 255, 2, 3, 4, 255, 1, 1, 3, 255, 3, 0, 5, 255, 3, 7, 42, 255, 3, 14, 61, 255, 7, 21, 56, 255, 5, 15, 22, 255, 2, 0, 2, 255, 1, 3, 15, 255, 6, 17, 67, 255, 13, 32, 103, 255, 8, 25, 93, 255, 6, 18, 69, 255, 7, 11, 48, 255, 2, 6, 15, 255, 3, 0, 0, 255, 0, 1, 1, 255, 1, 1, 4, 255, 3, 0, 4, 255, 4, 0, 4, 255, 1, 1, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 2, 2, 2, 255, 2, 2, 2, 255, 2, 2, 2, 255, 2, 0, 2, 255, 4, 2, 2, 255, 2, 2, 0, 255, 1, 1, 0, 255, 4, 2, 0, 255, 6, 3, 2, 255, 8, 2, 1, 255, 8, 4, 1, 255, 10, 6, 3, 255, 8, 4, 1, 255, 7, 3, 0, 255, 8, 4, 1, 255, 8, 5, 1, 255, 9, 5, 4, 255, 8, 5, 2, 255, 9, 7, 5, 255, 10, 10, 3, 255, 9, 9, 3, 255, 10, 8, 12, 255, 20, 20, 9, 255, 37, 29, 18, 255, 90, 79, 44, 255, 107, 73, 12, 255, 42, 31, 11, 255, 55, 60, 23, 255, 89, 109, 77, 255, 81, 91, 45, 255, 32, 26, 4, 255, 24, 23, 14, 255, 51, 33, 17, 255, 58, 55, 11, 255, 78, 87, 19, 255, 81, 86, 12, 255, 76, 78, 6, 255, 79, 75, 8, 255, 72, 70, 4, 255, 62, 67, 6, 255, 61, 65, 7, 255, 63, 60, 8, 255, 63, 61, 8, 255, 69, 60, 6, 255, 57, 53, 4, 255, 51, 48, 7, 255, 53, 43, 10, 255, 50, 47, 3, 255, 51, 45, 12, 255, 54, 45, 4, 255, 54, 43, 16, 255, 50, 39, 14, 255, 54, 40, 8, 255, 62, 39, 14, 255, 76, 48, 10, 255, 90, 61, 9, 255, 91, 65, 9, 255, 92, 63, 6, 255, 94, 65, 0, 255, 85, 58, 4, 255, 73, 54, 10, 255, 73, 51, 10, 255, 71, 47, 6, 255, 69, 44, 9, 255, 68, 45, 10, 255, 69, 45, 6, 255, 70, 41, 13, 255, 70, 36, 14, 255, 76, 43, 8, 255, 76, 43, 9, 255, 80, 49, 8, 255, 84, 51, 9, 255, 87, 53, 7, 255, 88, 54, 7, 255, 86, 53, 8, 255, 86, 52, 6, 255, 82, 45, 2, 255, 75, 39, 8, 255, 103, 54, 6, 255, 128, 58, 3, 255, 95, 37, 7, 255, 88, 41, 14, 255, 83, 43, 8, 255, 79, 42, 4, 255, 83, 45, 7, 255, 79, 45, 6, 255, 83, 48, 3, 255, 82, 47, 11, 255, 82, 42, 14, 255, 86, 50, 3, 255, 85, 50, 8, 255, 83, 50, 7, 255, 87, 53, 4, 255, 91, 45, 6, 255, 96, 53, 10, 255, 93, 54, 7, 255, 94, 51, 8, 255, 96, 51, 10, 255, 93, 48, 9, 255, 99, 54, 10, 255, 102, 60, 7, 255, 103, 59, 9, 255, 107, 60, 15, 255, 110, 62, 9, 255, 120, 70, 9, 255, 124, 73, 15, 255, 135, 77, 11, 255, 129, 72, 8, 255, 126, 73, 11, 255, 126, 74, 11, 255, 124, 74, 8, 255, 118, 71, 8, 255, 112, 65, 6, 255, 111, 66, 7, 255, 109, 66, 6, 255, 106, 66, 4, 255, 104, 64, 3, 255, 102, 61, 6, 255, 104, 61, 10, 255, 106, 62, 8, 255, 105, 63, 10, 255, 102, 59, 12, 255, 102, 62, 11, 255, 98, 59, 10, 255, 99, 61, 11, 255, 98, 65, 8, 255, 94, 65, 12, 255, 97, 64, 2, 255, 100, 57, 14, 255, 99, 61, 11, 255, 93, 62, 7, 255, 94, 63, 11, 255, 96, 63, 12, 255, 101, 62, 8, 255, 96, 63, 7, 255, 97, 62, 13, 255, 103, 64, 12, 255, 100, 63, 10, 255, 101, 60, 17, 255, 100, 65, 12, 255, 118, 71, 11, 255, 123, 69, 10, 255, 108, 66, 10, 255, 105, 70, 15, 255, 110, 69, 11, 255, 114, 70, 20, 255, 107, 65, 15, 255, 107, 68, 10, 255, 110, 70, 9, 255, 113, 68, 17, 255, 116, 70, 23, 255, 113, 71, 13, 255, 111, 68, 13, 255, 110, 68, 13, 255, 109, 71, 12, 255, 104, 69, 14, 255, 104, 71, 6, 255, 108, 75, 4, 255, 109, 73, 11, 255, 111, 72, 25, 255, 110, 72, 22, 255, 109, 71, 21, 255, 109, 71, 18, 255, 113, 74, 10, 255, 114, 73, 11, 255, 113, 74, 19, 255, 113, 76, 14, 255, 113, 76, 8, 255, 115, 77, 10, 255, 115, 76, 18, 255, 115, 79, 12, 255, 121, 81, 16, 255, 123, 82, 18, 255, 132, 87, 17, 255, 139, 82, 32, 255, 134, 84, 16, 255, 130, 81, 20, 255, 128, 84, 13, 255, 125, 86, 15, 255, 132, 89, 21, 255, 139, 91, 22, 255, 141, 89, 26, 255, 140, 91, 18, 255, 134, 92, 11, 255, 133, 88, 28, 255, 136, 93, 18, 255, 142, 99, 8, 255, 142, 97, 19, 255, 140, 97, 32, 255, 143, 100, 31, 255, 146, 99, 31, 255, 145, 98, 25, 255, 149, 100, 30, 255, 149, 104, 35, 255, 144, 105, 24, 255, 143, 106, 36, 255, 147, 106, 34, 255, 149, 104, 37, 255, 150, 110, 33, 255, 153, 108, 28, 255, 157, 109, 24, 255, 153, 110, 27, 255, 155, 110, 21, 255, 149, 108, 23, 255, 150, 114, 29, 255, 153, 118, 33, 255, 160, 120, 26, 255, 172, 119, 21, 255, 182, 128, 15, 255, 182, 124, 28, 255, 173, 118, 25, 255, 164, 113, 28, 255, 157, 112, 22, 255, 154, 105, 33, 255, 154, 103, 31, 255, 153, 102, 29, 255, 149, 101, 22, 255, 150, 102, 13, 255, 146, 102, 17, 255, 139, 101, 13, 255, 143, 100, 17, 255, 155, 97, 17, 255, 158, 97, 5, 255, 156, 96, 26, 255, 153, 96, 26, 255, 158, 96, 12, 255, 156, 93, 13, 255, 144, 88, 20, 255, 143, 90, 22, 255, 140, 88, 15, 255, 141, 90, 7, 255, 144, 90, 8, 255, 143, 89, 4, 255, 142, 87, 8, 255, 143, 85, 6, 255, 138, 86, 3, 255, 142, 84, 8, 255, 144, 83, 13, 255, 138, 86, 5, 255, 146, 88, 2, 255, 146, 87, 7, 255, 146, 88, 11, 255, 150, 87, 8, 255, 150, 87, 9, 255, 155, 91, 13, 255, 160, 96, 13, 255, 160, 94, 8, 255, 162, 92, 12, 255, 168, 94, 14, 255, 163, 92, 8, 255, 166, 98, 8, 255, 169, 98, 2, 255, 180, 98, 1, 255, 185, 102, 4, 255, 183, 101, 3, 255, 187, 104, 4, 255, 189, 106, 5, 255, 186, 103, 2, 255, 183, 99, 0, 255, 176, 94, 1, 255, 170, 85, 5, 255, 167, 89, 2, 255, 176, 96, 3, 255, 193, 95, 6, 255, 181, 72, 8, 255, 151, 55, 4, 255, 124, 55, 4, 255, 114, 49, 6, 255, 122, 49, 0, 255, 117, 50, 3, 255, 102, 42, 8, 255, 99, 39, 5, 255, 97, 39, 1, 255, 98, 35, 6, 255, 85, 28, 6, 255, 89, 40, 6, 255, 100, 46, 4, 255, 102, 38, 4, 255, 104, 40, 7, 255, 109, 49, 0, 255, 113, 49, 1, 255, 111, 47, 7, 255, 107, 45, 4, 255, 109, 44, 2, 255, 121, 49, 4, 255, 134, 59, 6, 255, 128, 66, 3, 255, 125, 69, 6, 255, 129, 69, 11, 255, 135, 77, 14, 255, 140, 83, 10, 255, 149, 91, 14, 255, 155, 99, 12, 255, 153, 94, 20, 255, 155, 96, 17, 255, 157, 97, 17, 255, 159, 98, 27, 255, 160, 98, 17, 255, 162, 96, 14, 255, 163, 97, 18, 255, 163, 97, 16, 255, 164, 96, 15, 255, 163, 94, 20, 255, 137, 71, 9, 255, 120, 52, 7, 255, 109, 43, 9, 255, 112, 56, 9, 255, 112, 54, 5, 255, 115, 50, 10, 255, 109, 49, 7, 255, 98, 42, 10, 255, 104, 44, 4, 255, 105, 48, 8, 255, 100, 44, 4, 255, 0, 1, 13, 255, 0, 1, 15, 255, 1, 3, 18, 255, 1, 3, 17, 255, 1, 3, 15, 255, 0, 2, 14, 255, 1, 2, 16, 255, 1, 2, 16, 255, 2, 2, 14, 255, 1, 1, 10, 255, 2, 2, 9, 255, 2, 2, 10, 255, 1, 1, 11, 255, 2, 2, 11, 255, 4, 3, 16, 255, 3, 2, 16, 255, 2, 2, 14, 255, 1, 1, 11, 255, 1, 1, 11, 255, 0, 3, 15, 255, 0, 0, 13, 255, 1, 1, 12, 255, 2, 2, 12, 255, 0, 0, 7, 255, 0, 1, 6, 255, 1, 2, 7, 255, 0, 1, 6, 255, 0, 1, 6, 255, 1, 0, 5, 255, 1, 0, 4, 255, 1, 1, 3, 255, 1, 1, 3, 255, 1, 1, 3, 255, 1, 1, 3, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 0, 255, 0, 0, 0, 255, 0, 0, 2, 255, 1, 1, 3, 255, 1, 0, 1, 255, 0, 0, 0, 255, 2, 2, 1, 255, 2, 0, 0, 255, 4, 16, 32, 255, 4, 62, 157, 255, 24, 195, 248, 255, 83, 254, 253, 255, 83, 255, 252, 255, 75, 201, 203, 255, 61, 201, 226, 255, 67, 250, 255, 255, 48, 233, 243, 255, 7, 208, 244, 255, 34, 224, 250, 255, 225, 255, 255, 255, 188, 228, 182, 255, 22, 56, 24, 255, 0, 0, 0, 255, 4, 3, 10, 255, 2, 2, 1, 255, 1, 8, 25, 255, 6, 12, 62, 255, 7, 15, 63, 255, 5, 12, 37, 255, 4, 3, 3, 255, 7, 1, 0, 255, 8, 9, 40, 255, 12, 17, 88, 255, 5, 19, 89, 255, 6, 17, 60, 255, 0, 6, 38, 255, 2, 6, 14, 255, 3, 0, 0, 255, 2, 0, 0, 255, 1, 1, 2, 255, 0, 0, 3, 255, 0, 0, 1, 255, 0, 2, 0, 255, 1, 2, 2, 255, 3, 0, 2, 255, 1, 0, 0, 255, 1, 1, 1, 255, 2, 2, 2, 255, 3, 1, 2, 255, 2, 0, 1, 255, 2, 0, 1, 255, 2, 0, 1, 255, 3, 0, 1, 255, 1, 1, 1, 255, 2, 2, 2, 255, 2, 2, 0, 255, 5, 2, 1, 255, 8, 2, 2, 255, 9, 4, 2, 255, 5, 1, 0, 255, 7, 3, 1, 255, 10, 6, 3, 255, 10, 6, 3, 255, 11, 7, 4, 255, 7, 10, 6, 255, 6, 8, 2, 255, 13, 8, 4, 255, 11, 8, 7, 255, 4, 8, 1, 255, 6, 11, 1, 255, 41, 37, 18, 255, 88, 58, 36, 255, 189, 143, 35, 255, 166, 115, 10, 255, 44, 34, 11, 255, 32, 17, 4, 255, 30, 27, 8, 255, 36, 46, 20, 255, 31, 20, 8, 255, 39, 21, 13, 255, 47, 38, 10, 255, 54, 58, 6, 255, 70, 70, 14, 255, 70, 67, 15, 255, 63, 68, 6, 255, 73, 69, 10, 255, 68, 67, 3, 255, 60, 67, 6, 255, 62, 66, 10, 255, 64, 58, 11, 255, 60, 54, 10, 255, 62, 56, 5, 255, 53, 52, 10, 255, 44, 44, 9, 255, 55, 45, 9, 255, 60, 47, 7, 255, 56, 45, 4, 255, 58, 47, 2, 255, 54, 41, 6, 255, 57, 41, 16, 255, 61, 42, 5, 255, 72, 42, 14, 255, 93, 61, 5, 255, 98, 69, 5, 255, 102, 67, 7, 255, 98, 64, 3, 255, 97, 66, 12, 255, 88, 61, 8, 255, 81, 53, 4, 255, 80, 51, 9, 255, 77, 50, 3, 255, 70, 42, 3, 255, 70, 45, 13, 255, 69, 45, 6, 255, 72, 46, 7, 255, 74, 43, 10, 255, 77, 47, 7, 255, 74, 45, 4, 255, 80, 47, 1, 255, 83, 48, 4, 255, 91, 55, 7, 255, 90, 54, 7, 255, 82, 50, 7, 255, 77, 44, 5, 255, 78, 42, 3, 255, 77, 38, 11, 255, 93, 46, 10, 255, 132, 57, 4, 255, 113, 48, 7, 255, 84, 32, 4, 255, 87, 46, 6, 255, 87, 46, 7, 255, 85, 43, 9, 255, 79, 46, 5, 255, 80, 44, 16, 255, 91, 50, 9, 255, 87, 48, 3, 255, 91, 47, 7, 255, 88, 44, 11, 255, 88, 48, 7, 255, 86, 53, 3, 255, 89, 52, 10, 255, 93, 48, 10, 255, 95, 46, 11, 255, 97, 49, 9, 255, 96, 52, 7, 255, 95, 52, 8, 255, 94, 53, 8, 255, 98, 57, 9, 255, 99, 58, 7, 255, 102, 59, 3, 255, 111, 63, 5, 255, 114, 63, 10, 255, 120, 66, 15, 255, 126, 73, 8, 255, 123, 71, 10, 255, 120, 69, 10, 255, 117, 66, 8, 255, 114, 65, 7, 255, 112, 68, 11, 255, 106, 65, 5, 255, 105, 62, 4, 255, 106, 61, 7, 255, 107, 63, 7, 255, 103, 62, 8, 255, 97, 60, 11, 255, 97, 60, 15, 255, 104, 57, 6, 255, 105, 59, 12, 255, 103, 59, 19, 255, 103, 64, 2, 255, 102, 64, 6, 255, 99, 61, 5, 255, 105, 59, 7, 255, 98, 59, 10, 255, 96, 59, 7, 255, 103, 61, 6, 255, 104, 66, 15, 255, 98, 59, 15, 255, 103, 58, 17, 255, 110, 61, 20, 255, 105, 57, 18, 255, 103, 63, 11, 255, 104, 64, 17, 255, 101, 61, 12, 255, 94, 64, 8, 255, 100, 63, 10, 255, 97, 63, 20, 255, 102, 69, 14, 255, 106, 68, 17, 255, 112, 68, 21, 255, 116, 69, 16, 255, 112, 69, 10, 255, 109, 70, 15, 255, 105, 67, 14, 255, 109, 70, 20, 255, 107, 67, 15, 255, 111, 70, 13, 255, 113, 72, 7, 255, 113, 73, 11, 255, 112, 72, 12, 255, 109, 67, 16, 255, 107, 67, 17, 255, 106, 70, 11, 255, 104, 71, 14, 255, 108, 72, 14, 255, 109, 70, 24, 255, 107, 69, 22, 255, 110, 70, 22, 255, 112, 73, 23, 255, 114, 75, 17, 255, 112, 73, 13, 255, 111, 74, 13, 255, 111, 73, 26, 255, 109, 72, 27, 255, 112, 78, 16, 255, 115, 80, 13, 255, 114, 80, 18, 255, 118, 83, 13, 255, 123, 82, 13, 255, 122, 81, 11, 255, 127, 84, 14, 255, 139, 85, 23, 255, 136, 82, 19, 255, 132, 87, 17, 255, 129, 86, 18, 255, 129, 84, 23, 255, 135, 86, 22, 255, 139, 87, 25, 255, 140, 89, 27, 255, 139, 92, 13, 255, 135, 93, 20, 255, 133, 92, 18, 255, 140, 97, 17, 255, 145, 96, 21, 255, 146, 95, 28, 255, 145, 95, 24, 255, 145, 97, 25, 255, 145, 99, 27, 255, 145, 101, 28, 255, 145, 100, 37, 255, 145, 101, 31, 255, 149, 103, 24, 255, 151, 104, 29, 255, 144, 100, 35, 255, 150, 107, 29, 255, 154, 106, 30, 255, 151, 105, 32, 255, 153, 109, 28, 255, 155, 105, 36, 255, 159, 109, 37, 255, 156, 114, 28, 255, 152, 115, 20, 255, 156, 114, 29, 255, 163, 114, 34, 255, 169, 119, 27, 255, 178, 125, 26, 255, 184, 128, 14, 255, 179, 123, 16, 255, 169, 117, 20, 255, 159, 111, 27, 255, 156, 108, 25, 255, 159, 105, 30, 255, 157, 105, 21, 255, 152, 103, 20, 255, 154, 104, 11, 255, 150, 101, 19, 255, 144, 98, 28, 255, 145, 98, 26, 255, 153, 98, 16, 255, 157, 99, 4, 255, 157, 100, 13, 255, 156, 96, 17, 255, 166, 96, 10, 255, 173, 96, 14, 255, 154, 95, 4, 255, 139, 95, 20, 255, 137, 89, 19, 255, 138, 87, 15, 255, 142, 88, 12, 255, 144, 89, 6, 255, 140, 87, 10, 255, 141, 82, 11, 255, 148, 86, 5, 255, 154, 85, 4, 255, 158, 87, 9, 255, 152, 89, 3, 255, 147, 86, 4, 255, 152, 84, 8, 255, 162, 83, 8, 255, 169, 86, 7, 255, 171, 90, 9, 255, 175, 89, 12, 255, 177, 87, 14, 255, 173, 88, 12, 255, 168, 87, 14, 255, 167, 90, 11, 255, 166, 91, 11, 255, 165, 91, 5, 255, 176, 101, 6, 255, 180, 102, 7, 255, 184, 103, 2, 255, 184, 102, 2, 255, 189, 107, 4, 255, 193, 108, 4, 255, 190, 104, 2, 255, 190, 103, 3, 255, 188, 100, 4, 255, 182, 98, 3, 255, 201, 109, 8, 255, 190, 95, 5, 255, 171, 84, 6, 255, 147, 59, 2, 255, 123, 52, 2, 255, 123, 50, 7, 255, 119, 50, 8, 255, 113, 54, 7, 255, 107, 43, 7, 255, 108, 41, 13, 255, 99, 39, 2, 255, 101, 42, 1, 255, 100, 45, 2, 255, 99, 45, 9, 255, 93, 38, 4, 255, 98, 42, 8, 255, 105, 46, 7, 255, 109, 47, 3, 255, 106, 43, 6, 255, 105, 41, 3, 255, 103, 38, 5, 255, 105, 41, 3, 255, 115, 49, 8, 255, 130, 59, 7, 255, 135, 62, 9, 255, 127, 59, 2, 255, 125, 70, 9, 255, 133, 83, 18, 255, 148, 92, 14, 255, 154, 95, 14, 255, 156, 98, 19, 255, 161, 100, 18, 255, 157, 97, 22, 255, 159, 98, 21, 255, 159, 96, 22, 255, 161, 98, 25, 255, 161, 98, 19, 255, 160, 97, 17, 255, 162, 99, 23, 255, 162, 98, 19, 255, 163, 97, 11, 255, 165, 98, 12, 255, 155, 88, 10, 255, 142, 74, 13, 255, 113, 53, 9, 255, 110, 54, 5, 255, 116, 53, 6, 255, 117, 57, 11, 255, 107, 50, 5, 255, 101, 38, 11, 255, 101, 45, 6, 255, 103, 45, 9, 255, 99, 43, 8, 255, 2, 5, 14, 255, 1, 3, 15, 255, 0, 2, 15, 255, 0, 2, 15, 255, 1, 3, 15, 255, 1, 3, 15, 255, 0, 2, 17, 255, 0, 1, 16, 255, 2, 2, 16, 255, 4, 4, 15, 255, 1, 2, 7, 255, 1, 1, 8, 255, 2, 4, 13, 255, 1, 2, 10, 255, 3, 3, 14, 255, 2, 2, 14, 255, 2, 2, 12, 255, 3, 3, 13, 255, 3, 3, 13, 255, 1, 3, 11, 255, 0, 3, 11, 255, 1, 2, 11, 255, 0, 0, 8, 255, 1, 2, 7, 255, 1, 2, 6, 255, 0, 1, 4, 255, 1, 2, 7, 255, 1, 2, 7, 255, 1, 2, 7, 255, 0, 0, 5, 255, 1, 1, 4, 255, 1, 1, 3, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 2, 255, 0, 0, 2, 255, 1, 1, 2, 255, 0, 0, 2, 255, 0, 1, 3, 255, 2, 1, 0, 255, 2, 7, 54, 255, 1, 154, 231, 255, 48, 255, 255, 255, 40, 242, 247, 255, 44, 197, 207, 255, 21, 149, 160, 255, 0, 168, 216, 255, 12, 234, 251, 255, 6, 223, 250, 255, 33, 221, 250, 255, 232, 255, 255, 255, 180, 221, 174, 255, 19, 48, 22, 255, 0, 0, 0, 255, 5, 2, 1, 255, 6, 2, 26, 255, 6, 14, 64, 255, 3, 25, 71, 255, 5, 19, 36, 255, 0, 5, 0, 255, 3, 1, 4, 255, 2, 6, 31, 255, 3, 16, 82, 255, 11, 19, 102, 255, 6, 14, 69, 255, 0, 3, 16, 255, 3, 2, 0, 255, 4, 2, 4, 255, 3, 0, 1, 255, 1, 2, 3, 255, 2, 0, 6, 255, 1, 0, 1, 255, 2, 0, 5, 255, 0, 1, 2, 255, 0, 2, 1, 255, 0, 2, 2, 255, 0, 1, 1, 255, 2, 3, 2, 255, 3, 3, 3, 255, 3, 1, 2, 255, 2, 0, 1, 255, 2, 0, 1, 255, 2, 0, 1, 255, 2, 2, 1, 255, 4, 1, 2, 255, 3, 1, 2, 255, 3, 3, 3, 255, 3, 2, 2, 255, 4, 1, 0, 255, 6, 2, 1, 255, 7, 4, 1, 255, 9, 5, 2, 255, 8, 4, 1, 255, 8, 4, 1, 255, 10, 6, 3, 255, 10, 7, 4, 255, 9, 6, 2, 255, 12, 8, 3, 255, 11, 8, 6, 255, 9, 7, 8, 255, 9, 10, 2, 255, 16, 14, 6, 255, 35, 24, 23, 255, 44, 45, 45, 255, 36, 60, 68, 255, 68, 106, 110, 255, 91, 126, 113, 255, 76, 90, 48, 255, 27, 20, 11, 255, 12, 17, 12, 255, 26, 20, 16, 255, 35, 22, 9, 255, 30, 35, 6, 255, 48, 47, 15, 255, 64, 60, 7, 255, 68, 67, 3, 255, 66, 64, 7, 255, 68, 60, 11, 255, 66, 56, 4, 255, 65, 58, 4, 255, 63, 57, 4, 255, 61, 50, 5, 255, 55, 46, 15, 255, 51, 50, 11, 255, 52, 51, 2, 255, 51, 46, 9, 255, 54, 47, 5, 255, 60, 42, 11, 255, 57, 45, 6, 255, 54, 44, 9, 255, 50, 40, 10, 255, 49, 38, 11, 255, 62, 46, 14, 255, 84, 62, 3, 255, 93, 63, 4, 255, 99, 68, 4, 255, 99, 66, 8, 255, 97, 62, 8, 255, 94, 62, 5, 255, 93, 61, 7, 255, 84, 52, 3, 255, 77, 47, 11, 255, 71, 42, 5, 255, 69, 42, 6, 255, 66, 42, 8, 255, 69, 45, 6, 255, 74, 47, 2, 255, 75, 47, 4, 255, 71, 44, 7, 255, 75, 46, 6, 255, 81, 46, 3, 255, 85, 46, 5, 255, 85, 47, 6, 255, 80, 44, 3, 255, 84, 44, 4, 255, 77, 43, 9, 255, 76, 40, 9, 255, 78, 39, 10, 255, 83, 42, 9, 255, 124, 55, 10, 255, 136, 57, 10, 255, 79, 26, 5, 255, 90, 44, 18, 255, 104, 51, 3, 255, 89, 47, 5, 255, 88, 47, 4, 255, 91, 50, 4, 255, 95, 47, 6, 255, 90, 47, 2, 255, 92, 51, 6, 255, 83, 49, 3, 255, 86, 48, 6, 255, 93, 50, 9, 255, 85, 47, 10, 255, 90, 47, 10, 255, 93, 50, 11, 255, 91, 54, 15, 255, 91, 52, 13, 255, 91, 52, 6, 255, 93, 54, 14, 255, 94, 51, 19, 255, 98, 58, 5, 255, 100, 61, 1, 255, 102, 58, 9, 255, 107, 57, 12, 255, 113, 64, 3, 255, 117, 70, 7, 255, 115, 67, 9, 255, 114, 65, 7, 255, 115, 66, 9, 255, 112, 66, 14, 255, 109, 66, 11, 255, 100, 63, 10, 255, 101, 63, 11, 255, 105, 62, 7, 255, 109, 60, 9, 255, 109, 60, 14, 255, 101, 58, 12, 255, 100, 59, 10, 255, 108, 64, 10, 255, 105, 63, 5, 255, 101, 59, 11, 255, 103, 62, 6, 255, 103, 61, 16, 255, 101, 59, 8, 255, 97, 60, 7, 255, 93, 54, 8, 255, 118, 66, 21, 255, 128, 68, 10, 255, 123, 62, 6, 255, 119, 64, 6, 255, 110, 59, 14, 255, 110, 64, 17, 255, 122, 63, 14, 255, 110, 65, 10, 255, 102, 58, 12, 255, 105, 63, 13, 255, 112, 68, 9, 255, 117, 63, 7, 255, 109, 64, 14, 255, 108, 66, 14, 255, 109, 67, 14, 255, 108, 70, 1, 255, 115, 71, 11, 255, 118, 71, 18, 255, 110, 68, 14, 255, 111, 69, 17, 255, 109, 68, 17, 255, 109, 66, 14, 255, 114, 69, 7, 255, 117, 72, 7, 255, 115, 70, 13, 255, 112, 71, 20, 255, 109, 69, 20, 255, 108, 68, 20, 255, 108, 71, 16, 255, 107, 71, 21, 255, 110, 72, 8, 255, 110, 71, 15, 255, 111, 74, 8, 255, 116, 77, 10, 255, 113, 74, 10, 255, 115, 74, 11, 255, 114, 75, 10, 255, 111, 77, 15, 255, 108, 73, 26, 255, 105, 72, 17, 255, 105, 72, 15, 255, 106, 75, 8, 255, 113, 81, 13, 255, 120, 83, 10, 255, 120, 80, 20, 255, 125, 83, 18, 255, 130, 84, 24, 255, 136, 85, 25, 255, 138, 83, 25, 255, 134, 89, 12, 255, 131, 87, 18, 255, 133, 84, 21, 255, 134, 84, 10, 255, 137, 87, 21, 255, 142, 90, 30, 255, 139, 92, 12, 255, 136, 92, 17, 255, 136, 94, 22, 255, 139, 93, 23, 255, 147, 98, 22, 255, 152, 101, 20, 255, 150, 100, 15, 255, 148, 100, 12, 255, 145, 99, 22, 255, 143, 101, 23, 255, 143, 103, 24, 255, 146, 102, 23, 255, 150, 99, 31, 255, 159, 106, 28, 255, 152, 106, 27, 255, 147, 108, 34, 255, 153, 107, 31, 255, 156, 104, 29, 255, 155, 108, 32, 255, 157, 112, 28, 255, 160, 110, 23, 255, 158, 112, 32, 255, 155, 112, 19, 255, 161, 117, 10, 255, 167, 119, 24, 255, 170, 122, 23, 255, 175, 121, 22, 255, 182, 125, 16, 255, 182, 126, 14, 255, 172, 120, 16, 255, 161, 112, 27, 255, 157, 112, 13, 255, 159, 108, 15, 255, 158, 104, 22, 255, 154, 104, 24, 255, 158, 105, 11, 255, 155, 104, 9, 255, 148, 99, 19, 255, 148, 98, 17, 255, 155, 96, 19, 255, 159, 98, 12, 255, 158, 98, 7, 255, 158, 94, 13, 255, 165, 97, 9, 255, 171, 97, 13, 255, 161, 93, 10, 255, 151, 93, 15, 255, 155, 93, 11, 255, 158, 90, 7, 255, 158, 87, 15, 255, 158, 91, 9, 255, 152, 91, 9, 255, 143, 85, 18, 255, 164, 82, 10, 255, 170, 83, 1, 255, 171, 84, 1, 255, 175, 90, 7, 255, 158, 91, 11, 255, 163, 88, 8, 255, 171, 83, 4, 255, 170, 82, 4, 255, 171, 77, 4, 255, 167, 79, 6, 255, 166, 82, 7, 255, 170, 81, 4, 255, 174, 84, 11, 255, 173, 88, 12, 255, 171, 92, 12, 255, 169, 91, 5, 255, 175, 99, 5, 255, 178, 103, 6, 255, 186, 106, 5, 255, 192, 109, 7, 255, 194, 111, 5, 255, 194, 110, 3, 255, 196, 109, 3, 255, 197, 107, 5, 255, 193, 105, 3, 255, 190, 102, 3, 255, 187, 102, 2, 255, 186, 100, 2, 255, 177, 79, 6, 255, 129, 50, 4, 255, 119, 48, 8, 255, 114, 47, 8, 255, 121, 43, 8, 255, 111, 42, 6, 255, 106, 36, 13, 255, 107, 42, 5, 255, 101, 48, 1, 255, 111, 52, 10, 255, 122, 67, 15, 255, 112, 63, 5, 255, 103, 49, 4, 255, 105, 52, 5, 255, 113, 56, 7, 255, 115, 48, 11, 255, 109, 47, 11, 255, 113, 51, 11, 255, 111, 48, 6, 255, 112, 50, 1, 255, 119, 53, 11, 255, 132, 61, 11, 255, 133, 67, 11, 255, 139, 80, 13, 255, 148, 90, 15, 255, 157, 96, 22, 255, 158, 95, 13, 255, 161, 98, 16, 255, 163, 101, 19, 255, 163, 101, 19, 255, 160, 98, 14, 255, 157, 94, 14, 255, 160, 95, 15, 255, 161, 96, 15, 255, 161, 97, 15, 255, 159, 98, 18, 255, 159, 96, 17, 255, 159, 96, 16, 255, 159, 93, 15, 255, 163, 97, 20, 255, 163, 95, 18, 255, 157, 89, 12, 255, 127, 69, 12, 255, 107, 50, 6, 255, 109, 46, 4, 255, 112, 54, 9, 255, 110, 56, 9, 255, 100, 39, 3, 255, 95, 43, 4, 255, 101, 42, 5, 255, 98, 43, 4, 255, 2, 2, 12, 255, 1, 2, 13, 255, 1, 1, 12, 255, 1, 2, 13, 255, 1, 3, 15, 255, 1, 3, 19, 255, 1, 3, 17, 255, 1, 3, 16, 255, 2, 3, 18, 255, 5, 4, 17, 255, 2, 2, 12, 255, 0, 1, 11, 255, 0, 2, 16, 255, 0, 2, 15, 255, 1, 1, 15, 255, 2, 2, 15, 255, 2, 2, 12, 255, 3, 3, 13, 255, 2, 2, 15, 255, 0, 3, 10, 255, 0, 3, 9, 255, 2, 3, 10, 255, 0, 1, 8, 255, 2, 2, 8, 255, 1, 2, 5, 255, 0, 0, 4, 255, 1, 2, 7, 255, 1, 2, 7, 255, 1, 2, 7, 255, 0, 1, 6, 255, 0, 1, 5, 255, 1, 2, 4, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 2, 2, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 2, 255, 2, 2, 3, 255, 3, 0, 0, 255, 4, 71, 152, 255, 3, 239, 255, 255, 0, 227, 230, 255, 26, 174, 190, 255, 47, 153, 169, 255, 3, 148, 179, 255, 7, 195, 245, 255, 0, 221, 250, 255, 42, 223, 249, 255, 227, 255, 255, 255, 184, 212, 165, 255, 24, 51, 17, 255, 2, 0, 0, 255, 7, 0, 31, 255, 2, 19, 77, 255, 5, 28, 94, 255, 9, 21, 60, 255, 6, 8, 8, 255, 1, 0, 1, 255, 5, 9, 39, 255, 4, 19, 84, 255, 6, 22, 97, 255, 3, 9, 56, 255, 1, 7, 40, 255, 2, 2, 12, 255, 1, 1, 0, 255, 1, 3, 2, 255, 2, 2, 3, 255, 3, 1, 3, 255, 1, 1, 4, 255, 0, 1, 0, 255, 1, 1, 1, 255, 2, 1, 0, 255, 1, 0, 4, 255, 2, 0, 5, 255, 2, 2, 3, 255, 3, 1, 2, 255, 1, 1, 0, 255, 1, 1, 1, 255, 3, 0, 2, 255, 3, 0, 1, 255, 3, 0, 2, 255, 2, 0, 1, 255, 1, 1, 1, 255, 3, 2, 0, 255, 3, 1, 2, 255, 3, 0, 1, 255, 4, 1, 2, 255, 6, 2, 2, 255, 6, 3, 1, 255, 8, 7, 3, 255, 9, 5, 3, 255, 9, 5, 2, 255, 9, 5, 2, 255, 10, 6, 3, 255, 8, 6, 2, 255, 9, 5, 4, 255, 10, 11, 4, 255, 6, 12, 4, 255, 10, 10, 5, 255, 12, 9, 1, 255, 15, 24, 40, 255, 53, 88, 94, 255, 73, 137, 155, 255, 132, 205, 224, 255, 173, 235, 245, 255, 144, 208, 177, 255, 71, 107, 48, 255, 31, 28, 8, 255, 24, 25, 12, 255, 27, 27, 11, 255, 27, 28, 14, 255, 27, 36, 14, 255, 43, 46, 7, 255, 62, 53, 6, 255, 62, 55, 7, 255, 61, 53, 3, 255, 61, 49, 11, 255, 66, 50, 4, 255, 69, 54, 3, 255, 60, 48, 4, 255, 56, 45, 20, 255, 47, 41, 10, 255, 49, 53, 6, 255, 55, 48, 6, 255, 59, 43, 10, 255, 48, 44, 3, 255, 54, 44, 7, 255, 61, 45, 6, 255, 62, 44, 4, 255, 63, 48, 4, 255, 67, 49, 10, 255, 76, 56, 6, 255, 90, 62, 1, 255, 94, 61, 7, 255, 92, 64, 2, 255, 95, 64, 7, 255, 95, 62, 6, 255, 97, 65, 2, 255, 91, 61, 8, 255, 82, 52, 14, 255, 71, 49, 8, 255, 69, 46, 9, 255, 68, 44, 7, 255, 70, 48, 3, 255, 70, 47, 4, 255, 74, 43, 6, 255, 77, 46, 10, 255, 73, 43, 10, 255, 75, 46, 4, 255, 82, 48, 8, 255, 83, 47, 6, 255, 81, 45, 7, 255, 77, 44, 7, 255, 82, 43, 10, 255, 70, 48, 2, 255, 67, 44, 8, 255, 74, 42, 11, 255, 79, 43, 11, 255, 114, 47, 7, 255, 140, 55, 11, 255, 104, 45, 12, 255, 85, 34, 6, 255, 110, 53, 4, 255, 108, 57, 4, 255, 98, 47, 8, 255, 97, 52, 5, 255, 89, 46, 9, 255, 89, 45, 9, 255, 96, 53, 7, 255, 82, 49, 14, 255, 84, 47, 15, 255, 92, 51, 7, 255, 93, 52, 3, 255, 96, 51, 6, 255, 92, 52, 9, 255, 93, 54, 10, 255, 94, 46, 4, 255, 91, 47, 1, 255, 93, 56, 7, 255, 94, 52, 5, 255, 93, 53, 5, 255, 97, 58, 11, 255, 94, 56, 3, 255, 99, 60, 3, 255, 100, 62, 7, 255, 105, 68, 6, 255, 105, 64, 7, 255, 107, 64, 5, 255, 109, 63, 6, 255, 106, 60, 12, 255, 100, 62, 9, 255, 97, 62, 8, 255, 98, 60, 9, 255, 100, 61, 7, 255, 104, 63, 8, 255, 101, 62, 6, 255, 94, 58, 4, 255, 95, 60, 6, 255, 100, 62, 9, 255, 97, 57, 12, 255, 101, 61, 14, 255, 101, 61, 7, 255, 102, 61, 4, 255, 101, 59, 9, 255, 94, 58, 6, 255, 111, 69, 9, 255, 117, 66, 11, 255, 117, 61, 12, 255, 125, 65, 6, 255, 120, 68, 4, 255, 103, 62, 6, 255, 108, 64, 14, 255, 125, 67, 10, 255, 112, 66, 6, 255, 108, 66, 9, 255, 115, 66, 13, 255, 131, 76, 7, 255, 117, 66, 19, 255, 103, 67, 6, 255, 105, 66, 7, 255, 109, 65, 12, 255, 106, 68, 9, 255, 112, 72, 13, 255, 116, 70, 12, 255, 112, 67, 15, 255, 113, 69, 12, 255, 110, 67, 9, 255, 113, 67, 15, 255, 118, 71, 8, 255, 123, 74, 13, 255, 122, 74, 16, 255, 111, 69, 18, 255, 108, 69, 18, 255, 111, 71, 10, 255, 111, 72, 8, 255, 108, 71, 7, 255, 111, 73, 8, 255, 113, 72, 16, 255, 115, 74, 18, 255, 115, 75, 12, 255, 116, 74, 15, 255, 116, 73, 17, 255, 115, 73, 11, 255, 113, 75, 10, 255, 117, 77, 18, 255, 115, 74, 12, 255, 116, 76, 13, 255, 116, 76, 15, 255, 120, 78, 20, 255, 122, 78, 14, 255, 122, 81, 16, 255, 128, 83, 18, 255, 130, 83, 14, 255, 128, 84, 18, 255, 135, 86, 20, 255, 139, 86, 22, 255, 135, 84, 19, 255, 133, 84, 22, 255, 134, 87, 17, 255, 136, 89, 20, 255, 143, 93, 27, 255, 145, 94, 14, 255, 139, 92, 16, 255, 139, 93, 21, 255, 140, 95, 16, 255, 141, 95, 11, 255, 146, 98, 21, 255, 146, 98, 21, 255, 148, 99, 25, 255, 148, 100, 22, 255, 147, 102, 21, 255, 146, 101, 17, 255, 151, 105, 24, 255, 148, 101, 25, 255, 149, 101, 36, 255, 152, 103, 32, 255, 150, 103, 30, 255, 150, 109, 24, 255, 156, 109, 26, 255, 158, 106, 27, 255, 157, 111, 21, 255, 161, 112, 24, 255, 162, 112, 28, 255, 157, 108, 28, 255, 156, 114, 16, 255, 164, 119, 21, 255, 176, 124, 19, 255, 180, 126, 15, 255, 182, 127, 19, 255, 184, 126, 21, 255, 172, 119, 15, 255, 162, 115, 20, 255, 157, 110, 23, 255, 158, 107, 17, 255, 159, 104, 22, 255, 155, 106, 20, 255, 159, 103, 16, 255, 158, 103, 14, 255, 151, 101, 18, 255, 153, 101, 15, 255, 161, 100, 14, 255, 161, 101, 20, 255, 159, 97, 21, 255, 163, 96, 18, 255, 162, 100, 12, 255, 160, 97, 10, 255, 166, 93, 13, 255, 168, 88, 6, 255, 171, 88, 7, 255, 172, 84, 6, 255, 171, 85, 3, 255, 168, 91, 9, 255, 158, 88, 10, 255, 153, 91, 7, 255, 161, 87, 6, 255, 172, 86, 4, 255, 174, 88, 7, 255, 166, 86, 10, 255, 158, 86, 7, 255, 161, 88, 6, 255, 165, 87, 9, 255, 167, 85, 10, 255, 163, 82, 10, 255, 161, 82, 9, 255, 167, 88, 9, 255, 172, 92, 8, 255, 175, 87, 9, 255, 176, 84, 5, 255, 177, 89, 6, 255, 174, 99, 8, 255, 171, 100, 2, 255, 178, 101, 2, 255, 184, 102, 3, 255, 194, 112, 8, 255, 195, 114, 3, 255, 199, 117, 1, 255, 205, 119, 5, 255, 201, 114, 4, 255, 198, 108, 2, 255, 200, 106, 2, 255, 200, 100, 4, 255, 183, 77, 4, 255, 142, 61, 9, 255, 117, 48, 2, 255, 124, 53, 9, 255, 123, 51, 5, 255, 118, 48, 5, 255, 117, 46, 7, 255, 102, 40, 6, 255, 99, 46, 5, 255, 105, 53, 7, 255, 110, 58, 15, 255, 121, 66, 12, 255, 125, 68, 8, 255, 114, 56, 7, 255, 115, 55, 8, 255, 112, 54, 2, 255, 116, 62, 9, 255, 119, 60, 9, 255, 119, 61, 8, 255, 124, 66, 9, 255, 128, 71, 9, 255, 129, 68, 11, 255, 139, 76, 5, 255, 150, 86, 9, 255, 158, 99, 17, 255, 159, 101, 16, 255, 161, 98, 16, 255, 162, 97, 18, 255, 159, 95, 17, 255, 165, 101, 20, 255, 161, 97, 14, 255, 162, 99, 7, 255, 163, 97, 19, 255, 162, 99, 11, 255, 160, 95, 18, 255, 161, 97, 16, 255, 164, 99, 14, 255, 160, 93, 16, 255, 158, 90, 15, 255, 161, 95, 19, 255, 165, 100, 21, 255, 163, 96, 17, 255, 160, 89, 12, 255, 129, 64, 7, 255, 105, 51, 9, 255, 118, 64, 7, 255, 118, 61, 4, 255, 104, 49, 4, 255, 93, 43, 3, 255, 94, 42, 4, 255, 103, 39, 3, 255, 102, 43, 5, 255, 5, 0, 14, 255, 1, 0, 9, 255, 1, 3, 10, 255, 2, 5, 15, 255, 0, 3, 15, 255, 1, 4, 14, 255, 0, 2, 12, 255, 0, 2, 15, 255, 0, 2, 17, 255, 1, 2, 17, 255, 1, 3, 15, 255, 0, 2, 14, 255, 0, 1, 14, 255, 2, 3, 15, 255, 1, 3, 15, 255, 1, 1, 14, 255, 1, 1, 13, 255, 0, 2, 10, 255, 0, 1, 10, 255, 2, 3, 14, 255, 1, 2, 12, 255, 1, 1, 10, 255, 1, 2, 8, 255, 0, 0, 6, 255, 0, 1, 7, 255, 1, 2, 8, 255, 0, 1, 6, 255, 0, 1, 6, 255, 0, 1, 6, 255, 0, 1, 5, 255, 0, 0, 4, 255, 0, 1, 5, 255, 0, 0, 1, 255, 1, 1, 2, 255, 2, 2, 3, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 0, 255, 4, 2, 0, 255, 3, 0, 8, 255, 8, 113, 167, 255, 3, 203, 216, 255, 30, 151, 185, 255, 53, 150, 172, 255, 11, 154, 175, 255, 2, 162, 210, 255, 0, 217, 251, 255, 53, 241, 249, 255, 233, 255, 255, 255, 187, 203, 149, 255, 61, 40, 8, 255, 9, 0, 5, 255, 3, 5, 83, 255, 3, 59, 205, 255, 34, 56, 109, 255, 24, 34, 46, 255, 4, 1, 2, 255, 2, 6, 19, 255, 6, 18, 71, 255, 11, 18, 98, 255, 8, 16, 75, 255, 2, 7, 26, 255, 0, 0, 2, 255, 2, 1, 0, 255, 2, 0, 0, 255, 0, 0, 1, 255, 0, 1, 1, 255, 0, 1, 3, 255, 0, 2, 1, 255, 0, 0, 0, 255, 1, 1, 0, 255, 0, 0, 0, 255, 0, 1, 0, 255, 1, 1, 1, 255, 2, 1, 2, 255, 3, 0, 2, 255, 5, 2, 2, 255, 1, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 2, 1, 1, 255, 2, 1, 1, 255, 1, 1, 1, 255, 1, 0, 0, 255, 1, 1, 0, 255, 5, 2, 2, 255, 4, 1, 2, 255, 4, 2, 1, 255, 8, 4, 2, 255, 7, 3, 0, 255, 9, 5, 2, 255, 8, 3, 0, 255, 7, 2, 0, 255, 12, 8, 4, 255, 8, 6, 2, 255, 8, 9, 5, 255, 11, 10, 11, 255, 10, 11, 5, 255, 10, 10, 5, 255, 17, 10, 0, 255, 9, 34, 49, 255, 89, 151, 159, 255, 114, 188, 175, 255, 110, 195, 190, 255, 222, 251, 250, 255, 255, 255, 255, 255, 189, 215, 136, 255, 33, 36, 2, 255, 30, 26, 19, 255, 27, 28, 15, 255, 30, 28, 9, 255, 33, 33, 8, 255, 32, 36, 5, 255, 46, 44, 8, 255, 62, 50, 11, 255, 58, 48, 10, 255, 51, 48, 7, 255, 62, 49, 6, 255, 65, 52, 4, 255, 63, 49, 4, 255, 57, 43, 7, 255, 48, 39, 9, 255, 46, 39, 3, 255, 51, 46, 3, 255, 53, 43, 9, 255, 53, 42, 7, 255, 52, 42, 9, 255, 58, 45, 10, 255, 59, 44, 7, 255, 58, 44, 3, 255, 69, 46, 10, 255, 75, 54, 10, 255, 77, 54, 4, 255, 79, 53, 4, 255, 91, 61, 9, 255, 94, 60, 7, 255, 99, 64, 3, 255, 99, 68, 1, 255, 94, 65, 6, 255, 91, 58, 9, 255, 81, 50, 8, 255, 74, 52, 8, 255, 65, 45, 4, 255, 70, 48, 9, 255, 71, 53, 4, 255, 75, 48, 1, 255, 76, 46, 5, 255, 79, 45, 7, 255, 76, 46, 6, 255, 76, 44, 6, 255, 81, 45, 7, 255, 80, 45, 2, 255, 74, 47, 2, 255, 73, 49, 5, 255, 80, 41, 8, 255, 74, 46, 2, 255, 76, 46, 5, 255, 76, 43, 10, 255, 75, 40, 12, 255, 112, 53, 5, 255, 144, 59, 2, 255, 144, 59, 22, 255, 106, 39, 14, 255, 87, 32, 3, 255, 106, 46, 8, 255, 114, 54, 6, 255, 112, 50, 8, 255, 94, 50, 8, 255, 92, 50, 8, 255, 91, 48, 9, 255, 83, 47, 3, 255, 88, 51, 7, 255, 93, 52, 10, 255, 100, 56, 10, 255, 94, 48, 7, 255, 95, 47, 12, 255, 96, 51, 13, 255, 95, 50, 6, 255, 93, 47, 11, 255, 89, 52, 4, 255, 97, 55, 6, 255, 95, 55, 9, 255, 90, 56, 9, 255, 92, 57, 10, 255, 96, 57, 8, 255, 97, 56, 13, 255, 99, 59, 13, 255, 99, 61, 14, 255, 100, 62, 9, 255, 99, 60, 8, 255, 98, 60, 12, 255, 101, 58, 7, 255, 102, 58, 6, 255, 98, 58, 7, 255, 95, 59, 10, 255, 95, 60, 8, 255, 95, 60, 5, 255, 98, 59, 6, 255, 104, 61, 10, 255, 102, 61, 8, 255, 100, 59, 11, 255, 97, 58, 7, 255, 99, 59, 9, 255, 100, 60, 8, 255, 103, 62, 15, 255, 125, 66, 7, 255, 125, 67, 2, 255, 113, 60, 14, 255, 107, 59, 14, 255, 106, 59, 4, 255, 107, 62, 15, 255, 110, 65, 13, 255, 111, 61, 11, 255, 104, 62, 13, 255, 98, 59, 10, 255, 106, 64, 10, 255, 109, 63, 12, 255, 106, 63, 14, 255, 99, 64, 21, 255, 105, 68, 8, 255, 102, 68, 17, 255, 103, 67, 16, 255, 110, 67, 21, 255, 114, 68, 17, 255, 115, 72, 11, 255, 111, 71, 12, 255, 109, 74, 9, 255, 111, 71, 14, 255, 112, 72, 17, 255, 114, 71, 12, 255, 122, 75, 9, 255, 123, 75, 13, 255, 121, 69, 10, 255, 112, 70, 14, 255, 109, 73, 14, 255, 112, 70, 12, 255, 108, 69, 17, 255, 109, 69, 16, 255, 114, 73, 13, 255, 111, 72, 16, 255, 112, 72, 18, 255, 118, 74, 16, 255, 120, 74, 15, 255, 119, 76, 8, 255, 117, 72, 14, 255, 113, 74, 13, 255, 110, 77, 16, 255, 114, 77, 21, 255, 115, 76, 13, 255, 119, 78, 16, 255, 120, 79, 13, 255, 123, 79, 17, 255, 124, 84, 18, 255, 118, 86, 9, 255, 120, 86, 15, 255, 134, 86, 24, 255, 143, 89, 16, 255, 138, 85, 6, 255, 140, 84, 22, 255, 137, 89, 26, 255, 137, 90, 21, 255, 141, 91, 18, 255, 151, 96, 13, 255, 144, 94, 22, 255, 144, 97, 17, 255, 143, 97, 10, 255, 144, 93, 22, 255, 145, 93, 36, 255, 144, 97, 21, 255, 146, 97, 24, 255, 144, 99, 22, 255, 147, 102, 19, 255, 151, 103, 19, 255, 151, 104, 24, 255, 150, 103, 18, 255, 148, 104, 20, 255, 146, 106, 19, 255, 149, 103, 26, 255, 152, 105, 24, 255, 153, 110, 16, 255, 157, 111, 18, 255, 160, 107, 30, 255, 163, 110, 28, 255, 164, 111, 26, 255, 160, 109, 27, 255, 154, 110, 19, 255, 161, 117, 14, 255, 173, 120, 18, 255, 186, 127, 16, 255, 187, 128, 14, 255, 183, 123, 9, 255, 174, 118, 11, 255, 164, 116, 16, 255, 159, 114, 16, 255, 159, 107, 24, 255, 160, 110, 16, 255, 158, 106, 12, 255, 161, 106, 8, 255, 161, 105, 12, 255, 156, 104, 13, 255, 153, 101, 19, 255, 158, 102, 12, 255, 161, 99, 23, 255, 164, 96, 22, 255, 166, 98, 8, 255, 163, 100, 7, 255, 161, 97, 9, 255, 167, 95, 17, 255, 172, 93, 11, 255, 171, 92, 11, 255, 165, 91, 3, 255, 162, 89, 8, 255, 157, 88, 9, 255, 148, 88, 10, 255, 146, 86, 5, 255, 147, 88, 11, 255, 160, 89, 9, 255, 165, 89, 7, 255, 152, 90, 8, 255, 159, 88, 5, 255, 161, 86, 13, 255, 159, 88, 11, 255, 165, 93, 14, 255, 170, 97, 15, 255, 173, 96, 7, 255, 171, 93, 10, 255, 167, 93, 8, 255, 169, 91, 5, 255, 171, 84, 6, 255, 173, 85, 2, 255, 181, 98, 5, 255, 179, 95, 3, 255, 181, 90, 1, 255, 182, 89, 0, 255, 192, 103, 1, 255, 200, 114, 2, 255, 199, 115, 2, 255, 200, 118, 5, 255, 207, 117, 1, 255, 204, 96, 0, 255, 188, 87, 2, 255, 159, 66, 7, 255, 139, 51, 7, 255, 135, 62, 7, 255, 121, 57, 4, 255, 119, 53, 0, 255, 120, 48, 2, 255, 113, 51, 7, 255, 105, 41, 6, 255, 96, 44, 5, 255, 98, 50, 5, 255, 103, 50, 8, 255, 101, 52, 9, 255, 108, 54, 5, 255, 116, 53, 14, 255, 117, 50, 11, 255, 116, 51, 3, 255, 120, 63, 8, 255, 122, 72, 7, 255, 127, 71, 4, 255, 133, 75, 8, 255, 141, 83, 15, 255, 151, 89, 15, 255, 153, 87, 13, 255, 155, 96, 9, 255, 163, 100, 5, 255, 163, 99, 14, 255, 161, 100, 18, 255, 156, 98, 13, 255, 160, 99, 15, 255, 164, 100, 15, 255, 161, 98, 15, 255, 157, 94, 13, 255, 158, 94, 14, 255, 164, 95, 22, 255, 165, 94, 4, 255, 163, 91, 12, 255, 158, 92, 13, 255, 155, 88, 5, 255, 157, 90, 13, 255, 154, 88, 18, 255, 157, 92, 10, 255, 159, 94, 8, 255, 163, 96, 17, 255, 151, 83, 12, 255, 135, 73, 7, 255, 135, 78, 11, 255, 144, 87, 17, 255, 133, 73, 4, 255, 112, 57, 0, 255, 93, 41, 2, 255, 88, 35, 6, 255, 86, 36, 7, 255, 97, 43, 4, 255, 1, 2, 14, 255, 1, 2, 11, 255, 0, 3, 12, 255, 3, 3, 17, 255, 2, 1, 15, 255, 3, 2, 14, 255, 2, 3, 15, 255, 1, 3, 16, 255, 1, 3, 16, 255, 2, 2, 16, 255, 2, 2, 13, 255, 2, 2, 12, 255, 0, 3, 11, 255, 3, 3, 11, 255, 3, 3, 12, 255, 2, 2, 12, 255, 4, 4, 14, 255, 1, 3, 12, 255, 0, 4, 11, 255, 2, 2, 13, 255, 1, 1, 11, 255, 1, 1, 8, 255, 1, 2, 7, 255, 0, 1, 6, 255, 1, 2, 7, 255, 2, 3, 8, 255, 1, 2, 7, 255, 1, 2, 7, 255, 1, 2, 7, 255, 2, 3, 7, 255, 1, 2, 6, 255, 1, 2, 6, 255, 0, 0, 4, 255, 0, 0, 2, 255, 1, 1, 3, 255, 1, 1, 3, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 2, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 2, 1, 3, 255, 2, 0, 0, 255, 2, 51, 86, 255, 23, 133, 181, 255, 48, 159, 186, 255, 16, 154, 182, 255, 0, 163, 210, 255, 0, 214, 247, 255, 100, 250, 252, 255, 255, 255, 255, 255, 145, 186, 144, 255, 19, 35, 13, 255, 15, 0, 30, 255, 3, 0, 27, 255, 4, 91, 191, 255, 7, 81, 157, 255, 25, 9, 4, 255, 9, 2, 0, 255, 0, 9, 47, 255, 7, 24, 109, 255, 4, 15, 80, 255, 1, 8, 32, 255, 1, 3, 2, 255, 2, 0, 0, 255, 3, 0, 4, 255, 1, 1, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 0, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 2, 0, 1, 255, 2, 0, 1, 255, 2, 1, 1, 255, 2, 1, 1, 255, 4, 0, 1, 255, 4, 2, 3, 255, 2, 2, 1, 255, 3, 2, 0, 255, 8, 4, 1, 255, 4, 2, 1, 255, 7, 4, 2, 255, 10, 6, 3, 255, 8, 5, 1, 255, 10, 8, 1, 255, 14, 13, 6, 255, 13, 10, 6, 255, 11, 13, 12, 255, 18, 25, 16, 255, 18, 41, 43, 255, 37, 111, 120, 255, 175, 229, 192, 255, 173, 206, 190, 255, 161, 225, 228, 255, 240, 255, 255, 255, 254, 255, 245, 255, 103, 138, 74, 255, 16, 26, 12, 255, 35, 34, 13, 255, 31, 29, 14, 255, 26, 30, 10, 255, 26, 27, 12, 255, 43, 38, 12, 255, 48, 42, 6, 255, 49, 42, 8, 255, 57, 48, 7, 255, 60, 42, 6, 255, 65, 47, 2, 255, 57, 45, 1, 255, 53, 37, 1, 255, 59, 40, 5, 255, 51, 38, 2, 255, 41, 39, 6, 255, 45, 40, 3, 255, 46, 40, 8, 255, 47, 45, 4, 255, 54, 43, 5, 255, 55, 42, 4, 255, 55, 46, 4, 255, 65, 49, 4, 255, 67, 48, 6, 255, 79, 53, 9, 255, 76, 54, 3, 255, 81, 56, 8, 255, 88, 63, 8, 255, 98, 63, 10, 255, 101, 62, 2, 255, 100, 67, 1, 255, 98, 64, 2, 255, 96, 60, 6, 255, 88, 59, 8, 255, 75, 52, 5, 255, 69, 47, 5, 255, 76, 49, 10, 255, 76, 47, 7, 255, 83, 48, 5, 255, 78, 48, 6, 255, 80, 47, 5, 255, 80, 46, 5, 255, 71, 44, 12, 255, 64, 46, 9, 255, 74, 50, 3, 255, 81, 47, 5, 255, 77, 41, 10, 255, 82, 40, 6, 255, 76, 42, 7, 255, 80, 46, 3, 255, 79, 46, 4, 255, 79, 43, 6, 255, 102, 51, 5, 255, 134, 56, 2, 255, 149, 63, 7, 255, 153, 67, 3, 255, 116, 49, 7, 255, 79, 26, 13, 255, 88, 39, 12, 255, 114, 46, 3, 255, 127, 52, 9, 255, 113, 56, 6, 255, 105, 58, 8, 255, 98, 48, 12, 255, 103, 50, 8, 255, 101, 55, 4, 255, 105, 57, 5, 255, 101, 57, 6, 255, 102, 55, 1, 255, 97, 52, 4, 255, 90, 49, 8, 255, 90, 50, 11, 255, 90, 51, 14, 255, 93, 49, 18, 255, 95, 52, 12, 255, 95, 51, 4, 255, 96, 55, 12, 255, 94, 57, 6, 255, 97, 59, 9, 255, 104, 55, 9, 255, 98, 57, 8, 255, 102, 57, 9, 255, 107, 54, 13, 255, 103, 55, 13, 255, 102, 59, 7, 255, 100, 60, 11, 255, 96, 58, 12, 255, 96, 58, 7, 255, 97, 58, 6, 255, 101, 58, 14, 255, 104, 59, 11, 255, 111, 63, 5, 255, 114, 62, 6, 255, 107, 66, 6, 255, 106, 65, 6, 255, 106, 65, 5, 255, 103, 61, 4, 255, 114, 61, 6, 255, 127, 68, 4, 255, 116, 64, 2, 255, 108, 61, 9, 255, 107, 64, 7, 255, 107, 65, 5, 255, 105, 66, 12, 255, 104, 61, 11, 255, 107, 59, 13, 255, 104, 61, 19, 255, 104, 63, 20, 255, 107, 67, 11, 255, 106, 66, 5, 255, 102, 61, 8, 255, 111, 67, 12, 255, 112, 67, 13, 255, 105, 67, 16, 255, 108, 66, 12, 255, 113, 67, 9, 255, 109, 71, 7, 255, 111, 72, 6, 255, 117, 72, 11, 255, 109, 70, 10, 255, 112, 73, 18, 255, 110, 70, 12, 255, 116, 71, 11, 255, 122, 76, 8, 255, 123, 73, 7, 255, 121, 71, 15, 255, 111, 69, 15, 255, 111, 72, 12, 255, 117, 71, 12, 255, 114, 71, 15, 255, 116, 71, 23, 255, 112, 72, 16, 255, 115, 73, 9, 255, 121, 77, 11, 255, 117, 76, 19, 255, 114, 77, 15, 255, 115, 75, 10, 255, 113, 74, 16, 255, 110, 76, 11, 255, 109, 78, 14, 255, 109, 75, 27, 255, 117, 77, 14, 255, 115, 82, 9, 255, 118, 84, 11, 255, 125, 82, 15, 255, 128, 81, 18, 255, 129, 84, 18, 255, 132, 88, 18, 255, 137, 83, 15, 255, 139, 86, 16, 255, 135, 87, 17, 255, 136, 85, 19, 255, 136, 88, 20, 255, 140, 93, 14, 255, 141, 92, 27, 255, 145, 92, 19, 255, 148, 92, 17, 255, 148, 100, 14, 255, 143, 99, 7, 255, 143, 97, 12, 255, 149, 101, 23, 255, 147, 97, 20, 255, 149, 96, 26, 255, 146, 99, 29, 255, 147, 100, 18, 255, 151, 99, 24, 255, 150, 103, 22, 255, 149, 102, 25, 255, 150, 102, 25, 255, 149, 107, 25, 255, 147, 104, 26, 255, 151, 103, 26, 255, 158, 108, 27, 255, 158, 108, 23, 255, 164, 105, 29, 255, 175, 113, 23, 255, 178, 116, 21, 255, 175, 115, 26, 255, 166, 111, 16, 255, 170, 116, 7, 255, 174, 112, 9, 255, 178, 113, 10, 255, 188, 125, 18, 255, 189, 125, 21, 255, 178, 117, 13, 255, 166, 115, 23, 255, 160, 114, 16, 255, 162, 110, 11, 255, 164, 108, 18, 255, 167, 107, 22, 255, 167, 106, 18, 255, 162, 105, 6, 255, 161, 107, 16, 255, 155, 103, 23, 255, 161, 102, 14, 255, 164, 103, 6, 255, 165, 102, 7, 255, 164, 100, 11, 255, 166, 101, 18, 255, 166, 98, 18, 255, 165, 95, 9, 255, 167, 98, 5, 255, 164, 96, 9, 255, 162, 93, 8, 255, 152, 89, 3, 255, 146, 88, 9, 255, 151, 89, 16, 255, 154, 91, 12, 255, 154, 89, 10, 255, 167, 89, 8, 255, 172, 90, 8, 255, 153, 92, 6, 255, 158, 93, 3, 255, 154, 89, 6, 255, 154, 89, 14, 255, 164, 94, 7, 255, 172, 96, 5, 255, 175, 95, 8, 255, 170, 96, 7, 255, 169, 96, 16, 255, 175, 91, 8, 255, 175, 89, 4, 255, 180, 91, 4, 255, 182, 88, 1, 255, 184, 86, 2, 255, 186, 81, 6, 255, 188, 84, 10, 255, 184, 86, 2, 255, 194, 100, 3, 255, 203, 113, 5, 255, 205, 114, 3, 255, 176, 84, 10, 255, 142, 54, 9, 255, 127, 51, 6, 255, 118, 50, 9, 255, 133, 52, 2, 255, 132, 56, 0, 255, 124, 53, 3, 255, 125, 51, 9, 255, 111, 46, 4, 255, 111, 47, 6, 255, 106, 44, 6, 255, 100, 48, 3, 255, 103, 54, 4, 255, 100, 48, 6, 255, 108, 51, 14, 255, 110, 52, 6, 255, 115, 57, 7, 255, 128, 69, 10, 255, 132, 73, 4, 255, 140, 79, 17, 255, 144, 83, 15, 255, 150, 88, 6, 255, 158, 94, 10, 255, 159, 97, 11, 255, 161, 94, 7, 255, 166, 92, 6, 255, 167, 98, 8, 255, 163, 98, 12, 255, 165, 101, 12, 255, 164, 99, 9, 255, 165, 100, 11, 255, 165, 99, 15, 255, 164, 98, 18, 255, 162, 96, 9, 255, 159, 94, 16, 255, 155, 93, 17, 255, 159, 93, 16, 255, 162, 91, 9, 255, 161, 89, 6, 255, 150, 80, 7, 255, 144, 77, 9, 255, 149, 86, 10, 255, 154, 92, 18, 255, 156, 91, 11, 255, 165, 97, 14, 255, 162, 92, 19, 255, 158, 89, 13, 255, 152, 85, 13, 255, 152, 86, 8, 255, 153, 86, 9, 255, 147, 78, 16, 255, 136, 73, 16, 255, 121, 62, 7, 255, 89, 37, 2, 255, 56, 26, 5, 255, 46, 24, 5, 255, 0, 3, 12, 255, 1, 3, 15, 255, 3, 1, 16, 255, 2, 2, 16, 255, 0, 1, 15, 255, 1, 6, 22, 255, 2, 5, 21, 255, 2, 3, 17, 255, 3, 3, 15, 255, 3, 3, 9, 255, 3, 2, 7, 255, 2, 1, 9, 255, 2, 1, 10, 255, 2, 3, 7, 255, 1, 2, 7, 255, 1, 1, 7, 255, 3, 3, 10, 255, 3, 3, 12, 255, 3, 3, 12, 255, 2, 2, 10, 255, 1, 1, 9, 255, 1, 1, 8, 255, 1, 2, 7, 255, 1, 2, 7, 255, 0, 1, 6, 255, 0, 1, 6, 255, 0, 1, 7, 255, 1, 2, 7, 255, 0, 0, 5, 255, 0, 2, 7, 255, 0, 2, 7, 255, 0, 0, 5, 255, 2, 0, 6, 255, 1, 0, 4, 255, 0, 0, 2, 255, 0, 0, 2, 255, 1, 1, 3, 255, 1, 1, 2, 255, 2, 2, 3, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 2, 1, 1, 255, 1, 0, 0, 255, 7, 46, 104, 255, 10, 142, 178, 255, 0, 155, 184, 255, 41, 164, 227, 255, 71, 219, 248, 255, 116, 255, 255, 255, 250, 255, 253, 255, 122, 176, 144, 255, 0, 25, 50, 255, 6, 12, 65, 255, 1, 5, 4, 255, 4, 32, 89, 255, 2, 115, 229, 255, 7, 22, 33, 255, 3, 0, 0, 255, 1, 12, 91, 255, 5, 21, 114, 255, 4, 10, 46, 255, 1, 4, 15, 255, 0, 2, 0, 255, 1, 0, 0, 255, 2, 0, 1, 255, 2, 3, 0, 255, 1, 1, 2, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 2, 0, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 2, 0, 1, 255, 3, 1, 2, 255, 3, 1, 2, 255, 3, 1, 2, 255, 3, 1, 2, 255, 2, 0, 1, 255, 2, 0, 1, 255, 3, 1, 2, 255, 5, 1, 2, 255, 3, 1, 2, 255, 2, 2, 2, 255, 4, 3, 1, 255, 3, 2, 0, 255, 8, 3, 4, 255, 12, 6, 7, 255, 9, 5, 2, 255, 12, 10, 3, 255, 12, 12, 2, 255, 15, 14, 5, 255, 18, 24, 20, 255, 22, 41, 30, 255, 38, 69, 54, 255, 41, 106, 98, 255, 57, 135, 126, 255, 107, 177, 169, 255, 151, 208, 198, 255, 187, 240, 238, 255, 205, 254, 251, 255, 160, 221, 188, 255, 66, 117, 69, 255, 30, 37, 13, 255, 30, 32, 16, 255, 32, 29, 11, 255, 35, 33, 11, 255, 31, 32, 5, 255, 37, 39, 9, 255, 39, 41, 7, 255, 52, 44, 6, 255, 59, 44, 3, 255, 62, 41, 5, 255, 70, 41, 4, 255, 61, 44, 5, 255, 44, 36, 4, 255, 47, 36, 6, 255, 47, 33, 5, 255, 36, 35, 5, 255, 39, 35, 3, 255, 50, 38, 8, 255, 49, 40, 6, 255, 59, 39, 8, 255, 60, 39, 7, 255, 62, 50, 5, 255, 69, 57, 4, 255, 70, 53, 6, 255, 67, 51, 6, 255, 77, 58, 4, 255, 80, 56, 13, 255, 85, 60, 6, 255, 91, 62, 6, 255, 100, 57, 6, 255, 102, 60, 4, 255, 102, 64, 3, 255, 99, 64, 9, 255, 89, 56, 12, 255, 76, 52, 2, 255, 74, 53, 3, 255, 76, 47, 6, 255, 81, 45, 7, 255, 85, 47, 8, 255, 71, 45, 7, 255, 71, 44, 6, 255, 75, 43, 3, 255, 69, 44, 6, 255, 68, 43, 4, 255, 73, 46, 8, 255, 73, 45, 12, 255, 69, 37, 10, 255, 83, 42, 11, 255, 75, 42, 17, 255, 74, 45, 18, 255, 71, 43, 8, 255, 76, 45, 6, 255, 80, 45, 6, 255, 109, 49, 5, 255, 136, 55, 5, 255, 153, 65, 5, 255, 167, 69, 2, 255, 156, 64, 3, 255, 128, 63, 8, 255, 116, 57, 7, 255, 116, 53, 8, 255, 114, 48, 9, 255, 114, 56, 4, 255, 124, 56, 9, 255, 124, 58, 10, 255, 121, 56, 4, 255, 127, 53, 6, 255, 125, 53, 7, 255, 119, 54, 6, 255, 124, 57, 10, 255, 125, 56, 8, 255, 118, 56, 5, 255, 108, 54, 11, 255, 96, 54, 15, 255, 96, 54, 11, 255, 97, 52, 4, 255, 100, 56, 7, 255, 95, 55, 6, 255, 96, 55, 14, 255, 99, 56, 6, 255, 98, 59, 5, 255, 101, 55, 10, 255, 107, 52, 10, 255, 105, 56, 13, 255, 99, 58, 7, 255, 100, 60, 5, 255, 104, 60, 12, 255, 109, 60, 12, 255, 108, 61, 3, 255, 103, 55, 5, 255, 100, 57, 12, 255, 103, 62, 9, 255, 102, 61, 1, 255, 103, 69, 8, 255, 110, 64, 10, 255, 109, 61, 9, 255, 108, 64, 12, 255, 115, 61, 12, 255, 116, 64, 8, 255, 111, 63, 9, 255, 108, 62, 10, 255, 109, 62, 13, 255, 108, 64, 12, 255, 104, 65, 7, 255, 105, 64, 9, 255, 105, 64, 14, 255, 104, 63, 16, 255, 106, 66, 14, 255, 102, 61, 7, 255, 107, 67, 10, 255, 108, 72, 9, 255, 108, 66, 17, 255, 107, 59, 26, 255, 107, 64, 11, 255, 110, 69, 17, 255, 111, 67, 10, 255, 112, 70, 18, 255, 117, 72, 9, 255, 121, 71, 8, 255, 116, 68, 17, 255, 109, 70, 16, 255, 111, 67, 10, 255, 118, 70, 6, 255, 119, 76, 8, 255, 117, 76, 9, 255, 115, 76, 15, 255, 117, 74, 15, 255, 116, 74, 13, 255, 111, 73, 11, 255, 112, 72, 10, 255, 115, 75, 12, 255, 119, 73, 14, 255, 123, 74, 12, 255, 121, 76, 11, 255, 121, 79, 10, 255, 118, 83, 9, 255, 112, 73, 13, 255, 117, 73, 17, 255, 114, 79, 14, 255, 117, 77, 9, 255, 118, 74, 15, 255, 117, 78, 14, 255, 123, 75, 21, 255, 122, 80, 18, 255, 120, 85, 19, 255, 127, 83, 16, 255, 131, 83, 16, 255, 133, 89, 14, 255, 130, 88, 12, 255, 154, 88, 22, 255, 164, 94, 20, 255, 143, 88, 16, 255, 138, 85, 24, 255, 140, 90, 20, 255, 149, 91, 28, 255, 151, 94, 19, 255, 148, 96, 18, 255, 147, 97, 15, 255, 145, 96, 12, 255, 148, 96, 17, 255, 151, 100, 23, 255, 144, 99, 16, 255, 148, 97, 17, 255, 148, 98, 23, 255, 150, 99, 22, 255, 155, 102, 24, 255, 151, 105, 31, 255, 148, 105, 22, 255, 149, 101, 18, 255, 151, 102, 27, 255, 151, 108, 23, 255, 146, 107, 13, 255, 156, 106, 36, 255, 158, 104, 31, 255, 159, 111, 19, 255, 174, 111, 16, 255, 180, 113, 23, 255, 180, 113, 26, 255, 174, 110, 20, 255, 176, 111, 11, 255, 174, 102, 12, 255, 175, 98, 28, 255, 185, 119, 21, 255, 188, 126, 11, 255, 182, 122, 5, 255, 169, 117, 19, 255, 161, 111, 30, 255, 164, 109, 19, 255, 162, 109, 16, 255, 162, 109, 6, 255, 167, 110, 11, 255, 165, 107, 11, 255, 167, 107, 19, 255, 164, 103, 21, 255, 162, 102, 4, 255, 167, 105, 9, 255, 168, 101, 26, 255, 166, 97, 23, 255, 165, 99, 9, 255, 166, 99, 11, 255, 165, 98, 13, 255, 163, 96, 10, 255, 158, 93, 7, 255, 152, 96, 5, 255, 152, 95, 11, 255, 163, 93, 5, 255, 173, 92, 3, 255, 173, 86, 1, 255, 172, 84, 5, 255, 176, 82, 4, 255, 177, 88, 4, 255, 163, 92, 9, 255, 159, 90, 10, 255, 158, 90, 9, 255, 167, 95, 13, 255, 174, 96, 14, 255, 174, 94, 8, 255, 172, 96, 10, 255, 172, 97, 15, 255, 173, 100, 5, 255, 180, 99, 8, 255, 180, 93, 4, 255, 182, 87, 1, 255, 180, 83, 3, 255, 181, 85, 5, 255, 187, 93, 5, 255, 181, 89, 5, 255, 183, 78, 9, 255, 188, 89, 3, 255, 204, 99, 4, 255, 181, 79, 2, 255, 128, 54, 6, 255, 124, 60, 3, 255, 124, 58, 4, 255, 127, 56, 6, 255, 130, 58, 1, 255, 122, 54, 3, 255, 125, 54, 6, 255, 123, 53, 10, 255, 119, 51, 5, 255, 111, 46, 6, 255, 99, 46, 1, 255, 100, 51, 2, 255, 103, 55, 8, 255, 102, 49, 6, 255, 110, 50, 6, 255, 111, 52, 4, 255, 114, 54, 10, 255, 118, 58, 8, 255, 138, 78, 14, 255, 148, 85, 13, 255, 151, 89, 9, 255, 155, 95, 13, 255, 149, 95, 8, 255, 152, 93, 4, 255, 157, 95, 7, 255, 161, 100, 10, 255, 166, 100, 13, 255, 163, 96, 10, 255, 166, 98, 5, 255, 167, 97, 9, 255, 169, 98, 7, 255, 165, 96, 8, 255, 160, 94, 15, 255, 162, 91, 14, 255, 163, 91, 19, 255, 155, 93, 14, 255, 151, 91, 13, 255, 156, 91, 13, 255, 163, 95, 16, 255, 162, 91, 13, 255, 147, 85, 10, 255, 141, 79, 18, 255, 139, 77, 13, 255, 146, 82, 0, 255, 160, 91, 13, 255, 159, 91, 14, 255, 159, 90, 5, 255, 154, 85, 7, 255, 150, 81, 14, 255, 147, 80, 3, 255, 146, 79, 10, 255, 141, 75, 18, 255, 140, 76, 12, 255, 118, 59, 5, 255, 67, 28, 3, 255, 24, 8, 7, 255, 2, 2, 9, 255, 2, 0, 14, 255, 3, 0, 17, 255, 3, 5, 17, 255, 1, 5, 15, 255, 2, 3, 21, 255, 1, 2, 22, 255, 1, 4, 17, 255, 1, 4, 12, 255, 1, 3, 5, 255, 0, 2, 2, 255, 2, 1, 6, 255, 2, 1, 9, 255, 1, 2, 9, 255, 1, 1, 8, 255, 1, 2, 7, 255, 1, 2, 7, 255, 1, 2, 6, 255, 2, 3, 6, 255, 2, 3, 8, 255, 1, 2, 7, 255, 1, 2, 7, 255, 2, 3, 8, 255, 1, 2, 7, 255, 0, 1, 5, 255, 0, 1, 5, 255, 2, 3, 8, 255, 4, 5, 10, 255, 1, 2, 7, 255, 1, 2, 7, 255, 1, 2, 7, 255, 0, 1, 6, 255, 2, 2, 7, 255, 2, 1, 6, 255, 1, 0, 4, 255, 0, 0, 3, 255, 1, 1, 4, 255, 0, 1, 2, 255, 2, 2, 4, 255, 1, 1, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 2, 255, 2, 0, 2, 255, 2, 1, 5, 255, 2, 76, 112, 255, 4, 148, 189, 255, 5, 172, 222, 255, 31, 220, 255, 255, 184, 255, 247, 255, 255, 255, 254, 255, 95, 178, 179, 255, 0, 30, 85, 255, 8, 16, 54, 255, 5, 8, 1, 255, 3, 0, 18, 255, 7, 105, 217, 255, 4, 79, 128, 255, 3, 0, 0, 255, 1, 5, 62, 255, 2, 27, 196, 255, 3, 12, 38, 255, 1, 0, 0, 255, 1, 0, 2, 255, 1, 0, 4, 255, 1, 0, 3, 255, 1, 0, 0, 255, 0, 0, 2, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 2, 0, 1, 255, 2, 0, 0, 255, 2, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 1, 1, 255, 2, 0, 1, 255, 3, 1, 2, 255, 3, 1, 2, 255, 4, 1, 2, 255, 3, 1, 1, 255, 3, 1, 1, 255, 2, 0, 0, 255, 3, 1, 1, 255, 4, 1, 2, 255, 4, 3, 2, 255, 4, 5, 4, 255, 4, 4, 2, 255, 5, 4, 1, 255, 13, 4, 0, 255, 15, 6, 1, 255, 15, 11, 4, 255, 14, 14, 5, 255, 17, 19, 10, 255, 29, 31, 24, 255, 38, 55, 57, 255, 60, 81, 69, 255, 83, 104, 92, 255, 94, 134, 127, 255, 92, 152, 139, 255, 85, 166, 166, 255, 124, 204, 208, 255, 160, 234, 228, 255, 174, 233, 222, 255, 126, 196, 154, 255, 62, 116, 75, 255, 30, 42, 33, 255, 28, 32, 12, 255, 29, 31, 8, 255, 40, 33, 10, 255, 40, 32, 10, 255, 36, 34, 7, 255, 42, 36, 6, 255, 50, 40, 6, 255, 49, 44, 4, 255, 56, 44, 5, 255, 61, 36, 5, 255, 53, 35, 9, 255, 41, 33, 5, 255, 37, 31, 9, 255, 39, 36, 10, 255, 44, 37, 10, 255, 45, 36, 7, 255, 48, 37, 3, 255, 45, 41, 4, 255, 57, 40, 4, 255, 63, 43, 4, 255, 64, 45, 7, 255, 71, 53, 2, 255, 72, 49, 14, 255, 72, 50, 8, 255, 80, 57, 4, 255, 84, 53, 11, 255, 89, 58, 1, 255, 90, 60, 1, 255, 103, 61, 10, 255, 105, 62, 6, 255, 99, 66, 0, 255, 98, 66, 3, 255, 91, 52, 6, 255, 83, 53, 3, 255, 75, 53, 3, 255, 74, 50, 7, 255, 79, 48, 9, 255, 79, 45, 7, 255, 70, 42, 3, 255, 67, 46, 5, 255, 67, 43, 4, 255, 72, 42, 4, 255, 79, 41, 5, 255, 80, 42, 6, 255, 73, 42, 8, 255, 69, 42, 12, 255, 78, 44, 11, 255, 80, 43, 12, 255, 77, 45, 13, 255, 73, 45, 8, 255, 78, 47, 6, 255, 77, 44, 6, 255, 89, 47, 12, 255, 115, 56, 8, 255, 129, 57, 8, 255, 135, 57, 8, 255, 145, 65, 8, 255, 153, 63, 5, 255, 160, 71, 6, 255, 159, 68, 4, 255, 148, 67, 9, 255, 147, 66, 8, 255, 152, 64, 1, 255, 156, 68, 6, 255, 148, 71, 14, 255, 155, 70, 16, 255, 151, 66, 3, 255, 136, 62, 9, 255, 137, 59, 9, 255, 127, 50, 3, 255, 116, 50, 10, 255, 115, 51, 14, 255, 120, 54, 8, 255, 126, 56, 8, 255, 121, 60, 9, 255, 116, 61, 15, 255, 116, 60, 11, 255, 110, 59, 9, 255, 102, 60, 10, 255, 102, 63, 6, 255, 101, 56, 6, 255, 103, 61, 4, 255, 96, 61, 4, 255, 99, 59, 6, 255, 100, 57, 4, 255, 101, 58, 8, 255, 103, 58, 7, 255, 107, 61, 10, 255, 106, 61, 10, 255, 105, 61, 8, 255, 102, 61, 5, 255, 106, 64, 13, 255, 105, 62, 8, 255, 106, 60, 6, 255, 110, 60, 7, 255, 117, 64, 9, 255, 120, 64, 4, 255, 110, 64, 8, 255, 109, 63, 12, 255, 112, 67, 5, 255, 110, 64, 9, 255, 107, 61, 11, 255, 106, 63, 8, 255, 106, 65, 11, 255, 105, 63, 11, 255, 106, 63, 16, 255, 110, 65, 13, 255, 111, 66, 12, 255, 112, 69, 14, 255, 110, 71, 9, 255, 104, 68, 12, 255, 103, 67, 17, 255, 106, 68, 7, 255, 110, 69, 16, 255, 112, 65, 5, 255, 111, 67, 12, 255, 119, 70, 13, 255, 118, 68, 9, 255, 117, 69, 16, 255, 112, 70, 11, 255, 113, 72, 14, 255, 113, 72, 8, 255, 118, 73, 13, 255, 123, 77, 16, 255, 122, 75, 16, 255, 116, 70, 5, 255, 113, 72, 8, 255, 111, 74, 14, 255, 111, 74, 17, 255, 112, 79, 3, 255, 118, 79, 11, 255, 117, 74, 15, 255, 117, 73, 18, 255, 119, 76, 11, 255, 118, 74, 18, 255, 118, 72, 15, 255, 119, 75, 11, 255, 116, 77, 7, 255, 116, 78, 10, 255, 118, 75, 17, 255, 118, 75, 12, 255, 123, 80, 15, 255, 122, 82, 13, 255, 118, 85, 18, 255, 123, 87, 17, 255, 131, 85, 9, 255, 154, 89, 8, 255, 161, 88, 17, 255, 173, 87, 18, 255, 174, 94, 7, 255, 147, 89, 6, 255, 143, 83, 22, 255, 142, 89, 21, 255, 145, 89, 24, 255, 151, 100, 17, 255, 155, 100, 17, 255, 149, 95, 22, 255, 149, 98, 18, 255, 150, 98, 12, 255, 151, 99, 21, 255, 150, 99, 26, 255, 152, 99, 27, 255, 150, 99, 21, 255, 153, 101, 16, 255, 157, 102, 22, 255, 152, 103, 20, 255, 152, 103, 18, 255, 157, 107, 21, 255, 157, 108, 19, 255, 155, 105, 19, 255, 162, 109, 21, 255, 177, 110, 27, 255, 178, 109, 12, 255, 164, 108, 19, 255, 162, 108, 22, 255, 169, 111, 16, 255, 175, 112, 24, 255, 176, 114, 18, 255, 175, 113, 6, 255, 177, 106, 9, 255, 180, 104, 16, 255, 187, 118, 19, 255, 191, 127, 9, 255, 187, 126, 12, 255, 172, 122, 3, 255, 167, 118, 7, 255, 167, 109, 14, 255, 171, 106, 24, 255, 171, 112, 14, 255, 171, 113, 14, 255, 169, 109, 13, 255, 174, 114, 17, 255, 166, 108, 13, 255, 162, 103, 8, 255, 173, 102, 7, 255, 183, 101, 5, 255, 179, 100, 15, 255, 167, 99, 18, 255, 166, 101, 10, 255, 169, 99, 14, 255, 161, 94, 7, 255, 157, 96, 12, 255, 162, 96, 13, 255, 173, 92, 8, 255, 175, 83, 4, 255, 170, 79, 1, 255, 171, 80, 6, 255, 170, 84, 5, 255, 169, 87, 2, 255, 166, 91, 7, 255, 156, 91, 11, 255, 158, 93, 13, 255, 164, 94, 9, 255, 172, 95, 11, 255, 175, 97, 5, 255, 173, 96, 8, 255, 176, 96, 18, 255, 181, 96, 12, 255, 182, 91, 6, 255, 183, 88, 13, 255, 178, 81, 6, 255, 171, 74, 3, 255, 168, 72, 5, 255, 165, 70, 6, 255, 172, 75, 10, 255, 167, 73, 2, 255, 183, 81, 1, 255, 185, 86, 4, 255, 182, 81, 9, 255, 147, 63, 6, 255, 133, 64, 4, 255, 144, 62, 2, 255, 126, 54, 2, 255, 121, 55, 2, 255, 128, 59, 9, 255, 118, 55, 4, 255, 118, 52, 0, 255, 128, 58, 0, 255, 123, 51, 2, 255, 110, 42, 5, 255, 94, 44, 4, 255, 98, 50, 6, 255, 100, 52, 10, 255, 104, 53, 5, 255, 108, 51, 6, 255, 108, 52, 9, 255, 116, 54, 7, 255, 127, 62, 6, 255, 145, 81, 13, 255, 148, 86, 11, 255, 150, 89, 13, 255, 156, 93, 19, 255, 153, 89, 11, 255, 163, 90, 5, 255, 167, 92, 9, 255, 164, 98, 9, 255, 166, 99, 14, 255, 166, 99, 11, 255, 166, 97, 6, 255, 167, 96, 7, 255, 165, 91, 12, 255, 163, 93, 12, 255, 158, 91, 9, 255, 162, 91, 19, 255, 161, 87, 15, 255, 158, 90, 11, 255, 155, 91, 15, 255, 155, 90, 9, 255, 160, 92, 15, 255, 161, 95, 10, 255, 152, 89, 7, 255, 137, 73, 14, 255, 133, 68, 17, 255, 143, 78, 9, 255, 153, 88, 4, 255, 154, 87, 8, 255, 148, 82, 5, 255, 146, 81, 7, 255, 143, 79, 11, 255, 140, 80, 2, 255, 136, 77, 4, 255, 131, 71, 12, 255, 131, 72, 5, 255, 129, 67, 9, 255, 101, 46, 2, 255, 65, 30, 7, 255, 2, 3, 9, 255, 4, 2, 13, 255, 3, 2, 13, 255, 1, 3, 10, 255, 1, 5, 12, 255, 4, 2, 16, 255, 3, 3, 20, 255, 2, 6, 19, 255, 2, 6, 15, 255, 0, 5, 8, 255, 0, 4, 6, 255, 0, 3, 7, 255, 0, 2, 10, 255, 2, 2, 13, 255, 3, 3, 11, 255, 3, 4, 9, 255, 1, 2, 6, 255, 1, 2, 4, 255, 1, 2, 4, 255, 1, 2, 6, 255, 2, 3, 7, 255, 2, 3, 7, 255, 1, 2, 7, 255, 2, 3, 7, 255, 2, 3, 7, 255, 0, 1, 6, 255, 0, 1, 7, 255, 3, 4, 9, 255, 0, 1, 6, 255, 0, 1, 6, 255, 1, 2, 7, 255, 1, 2, 7, 255, 0, 1, 5, 255, 0, 1, 5, 255, 0, 1, 5, 255, 1, 0, 5, 255, 1, 0, 5, 255, 1, 0, 4, 255, 0, 0, 2, 255, 0, 0, 3, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 1, 3, 255, 2, 0, 1, 255, 2, 5, 9, 255, 2, 92, 128, 255, 4, 173, 210, 255, 4, 215, 254, 255, 124, 251, 250, 255, 246, 255, 255, 255, 97, 177, 170, 255, 0, 28, 60, 255, 6, 6, 24, 255, 2, 3, 5, 255, 2, 0, 4, 255, 8, 40, 106, 255, 2, 133, 220, 255, 3, 8, 29, 255, 1, 0, 0, 255, 4, 15, 174, 255, 5, 18, 102, 255, 3, 0, 0, 255, 2, 2, 5, 255, 2, 1, 3, 255, 0, 0, 2, 255, 0, 2, 0, 255, 0, 1, 0, 255, 1, 1, 3, 255, 2, 1, 3, 255, 1, 0, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 2, 0, 1, 255, 1, 0, 0, 255, 3, 1, 2, 255, 2, 2, 2, 255, 1, 1, 1, 255, 0, 1, 1, 255, 1, 2, 2, 255, 1, 0, 0, 255, 2, 0, 1, 255, 3, 0, 1, 255, 5, 1, 1, 255, 3, 2, 0, 255, 3, 2, 0, 255, 2, 1, 0, 255, 3, 2, 0, 255, 4, 0, 0, 255, 4, 3, 1, 255, 4, 4, 2, 255, 1, 3, 0, 255, 7, 6, 2, 255, 9, 8, 1, 255, 13, 12, 5, 255, 19, 18, 9, 255, 24, 25, 12, 255, 39, 44, 30, 255, 60, 67, 54, 255, 70, 85, 73, 255, 69, 111, 85, 255, 91, 131, 111, 255, 90, 142, 119, 255, 91, 153, 138, 255, 112, 185, 180, 255, 142, 213, 210, 255, 169, 225, 217, 255, 160, 211, 189, 255, 108, 171, 143, 255, 57, 108, 74, 255, 31, 45, 25, 255, 36, 33, 16, 255, 35, 36, 6, 255, 36, 35, 2, 255, 45, 33, 12, 255, 48, 34, 6, 255, 47, 37, 1, 255, 45, 39, 4, 255, 53, 45, 5, 255, 61, 46, 5, 255, 54, 38, 3, 255, 42, 31, 3, 255, 50, 39, 8, 255, 47, 31, 12, 255, 39, 31, 3, 255, 47, 32, 6, 255, 49, 36, 6, 255, 44, 38, 3, 255, 42, 40, 5, 255, 53, 40, 10, 255, 61, 42, 13, 255, 63, 44, 10, 255, 72, 47, 8, 255, 68, 47, 9, 255, 77, 53, 10, 255, 78, 55, 4, 255, 84, 54, 2, 255, 93, 60, 3, 255, 95, 61, 7, 255, 96, 60, 10, 255, 102, 64, 10, 255, 101, 68, 5, 255, 94, 62, 2, 255, 94, 52, 8, 255, 89, 50, 9, 255, 82, 49, 7, 255, 79, 52, 12, 255, 79, 48, 9, 255, 78, 45, 7, 255, 79, 43, 4, 255, 72, 45, 4, 255, 69, 45, 7, 255, 79, 45, 8, 255, 82, 44, 6, 255, 84, 45, 5, 255, 82, 44, 6, 255, 80, 46, 12, 255, 78, 44, 11, 255, 81, 43, 5, 255, 83, 44, 1, 255, 80, 47, 2, 255, 80, 47, 4, 255, 81, 44, 2, 255, 85, 49, 6, 255, 94, 52, 6, 255, 104, 52, 8, 255, 118, 52, 7, 255, 131, 56, 6, 255, 127, 49, 5, 255, 142, 56, 5, 255, 143, 54, 2, 255, 146, 60, 1, 255, 135, 55, 3, 255, 145, 58, 9, 255, 144, 60, 2, 255, 145, 58, 4, 255, 154, 66, 1, 255, 155, 62, 13, 255, 156, 65, 15, 255, 162, 72, 0, 255, 159, 71, 1, 255, 151, 69, 6, 255, 143, 60, 10, 255, 127, 55, 13, 255, 108, 49, 10, 255, 106, 51, 10, 255, 112, 49, 11, 255, 122, 54, 9, 255, 125, 57, 10, 255, 127, 58, 7, 255, 126, 64, 6, 255, 129, 66, 8, 255, 128, 65, 5, 255, 118, 61, 2, 255, 116, 63, 9, 255, 115, 62, 10, 255, 114, 65, 5, 255, 113, 66, 4, 255, 105, 58, 11, 255, 99, 56, 7, 255, 104, 63, 5, 255, 105, 64, 12, 255, 99, 58, 9, 255, 108, 62, 10, 255, 103, 65, 10, 255, 105, 63, 11, 255, 115, 61, 12, 255, 115, 62, 8, 255, 107, 63, 3, 255, 110, 65, 8, 255, 113, 66, 6, 255, 108, 61, 9, 255, 106, 62, 11, 255, 106, 66, 8, 255, 107, 64, 8, 255, 112, 64, 16, 255, 110, 62, 17, 255, 111, 63, 12, 255, 116, 68, 13, 255, 113, 65, 11, 255, 109, 64, 9, 255, 109, 66, 11, 255, 105, 72, 7, 255, 105, 68, 9, 255, 109, 65, 18, 255, 110, 67, 10, 255, 107, 71, 12, 255, 115, 70, 12, 255, 116, 70, 16, 255, 113, 67, 13, 255, 117, 71, 9, 255, 111, 72, 8, 255, 112, 73, 12, 255, 125, 75, 19, 255, 132, 74, 6, 255, 121, 73, 16, 255, 109, 72, 7, 255, 113, 74, 6, 255, 115, 71, 13, 255, 109, 73, 13, 255, 111, 74, 16, 255, 113, 78, 12, 255, 111, 73, 9, 255, 115, 77, 9, 255, 113, 76, 15, 255, 115, 73, 15, 255, 124, 75, 8, 255, 119, 77, 12, 255, 117, 79, 13, 255, 119, 78, 9, 255, 121, 84, 13, 255, 122, 83, 12, 255, 121, 79, 12, 255, 129, 80, 5, 255, 131, 81, 17, 255, 128, 82, 16, 255, 137, 86, 10, 255, 158, 85, 5, 255, 164, 86, 11, 255, 159, 88, 17, 255, 151, 88, 16, 255, 142, 89, 15, 255, 140, 87, 17, 255, 145, 96, 13, 255, 143, 93, 20, 255, 148, 97, 20, 255, 158, 96, 19, 255, 153, 98, 11, 255, 152, 100, 13, 255, 151, 99, 14, 255, 155, 99, 20, 255, 154, 96, 28, 255, 152, 100, 23, 255, 152, 100, 25, 255, 153, 101, 16, 255, 155, 99, 18, 255, 154, 101, 18, 255, 160, 102, 19, 255, 171, 105, 16, 255, 179, 108, 18, 255, 180, 108, 18, 255, 181, 106, 19, 255, 180, 102, 22, 255, 181, 113, 19, 255, 163, 109, 17, 255, 162, 108, 18, 255, 171, 110, 26, 255, 178, 112, 19, 255, 180, 113, 18, 255, 177, 109, 19, 255, 176, 104, 12, 255, 176, 102, 11, 255, 188, 121, 5, 255, 190, 123, 12, 255, 188, 125, 13, 255, 177, 122, 16, 255, 170, 113, 21, 255, 176, 112, 2, 255, 181, 101, 8, 255, 180, 103, 20, 255, 183, 110, 11, 255, 182, 111, 1, 255, 181, 112, 9, 255, 177, 112, 18, 255, 171, 101, 19, 255, 177, 92, 12, 255, 185, 93, 5, 255, 180, 98, 8, 255, 167, 100, 15, 255, 171, 102, 10, 255, 173, 103, 6, 255, 166, 99, 8, 255, 171, 97, 4, 255, 176, 95, 3, 255, 170, 91, 5, 255, 168, 91, 5, 255, 172, 88, 8, 255, 176, 90, 13, 255, 171, 84, 9, 255, 174, 85, 3, 255, 177, 93, 3, 255, 172, 95, 6, 255, 166, 95, 7, 255, 162, 94, 7, 255, 171, 100, 6, 255, 177, 99, 2, 255, 178, 95, 9, 255, 181, 95, 13, 255, 183, 92, 9, 255, 178, 86, 9, 255, 171, 84, 8, 255, 168, 74, 3, 255, 167, 72, 4, 255, 167, 76, 3, 255, 176, 93, 11, 255, 168, 88, 8, 255, 163, 85, 4, 255, 182, 88, 14, 255, 176, 73, 3, 255, 180, 84, 2, 255, 148, 64, 3, 255, 131, 59, 4, 255, 136, 58, 5, 255, 124, 56, 3, 255, 118, 59, 2, 255, 127, 52, 9, 255, 127, 53, 5, 255, 122, 48, 5, 255, 118, 46, 2, 255, 118, 46, 4, 255, 109, 43, 5, 255, 99, 50, 5, 255, 102, 52, 6, 255, 103, 52, 9, 255, 106, 51, 7, 255, 114, 53, 7, 255, 116, 55, 10, 255, 116, 56, 4, 255, 127, 67, 6, 255, 141, 81, 11, 255, 150, 87, 9, 255, 151, 88, 12, 255, 152, 92, 15, 255, 160, 92, 13, 255, 174, 96, 10, 255, 172, 94, 11, 255, 161, 96, 2, 255, 163, 99, 7, 255, 165, 98, 8, 255, 165, 96, 10, 255, 165, 95, 4, 255, 163, 90, 22, 255, 158, 88, 19, 255, 158, 93, 6, 255, 159, 93, 15, 255, 158, 88, 12, 255, 159, 89, 6, 255, 157, 86, 8, 255, 155, 86, 11, 255, 156, 89, 15, 255, 151, 87, 12, 255, 145, 77, 13, 255, 138, 71, 6, 255, 140, 74, 12, 255, 146, 81, 19, 255, 147, 83, 4, 255, 144, 81, 9, 255, 139, 74, 11, 255, 140, 77, 10, 255, 138, 75, 7, 255, 137, 77, 2, 255, 132, 74, 4, 255, 131, 70, 11, 255, 128, 69, 5, 255, 125, 69, 9, 255, 114, 59, 2, 255, 96, 51, 4, 255, 1, 3, 12, 255, 1, 0, 9, 255, 5, 1, 8, 255, 1, 1, 8, 255, 0, 3, 9, 255, 0, 4, 11, 255, 0, 4, 15, 255, 2, 6, 18, 255, 3, 7, 19, 255, 1, 4, 14, 255, 0, 5, 11, 255, 0, 3, 10, 255, 0, 3, 11, 255, 0, 3, 12, 255, 0, 2, 10, 255, 1, 4, 9, 255, 1, 2, 7, 255, 3, 4, 8, 255, 2, 3, 7, 255, 1, 2, 7, 255, 2, 3, 8, 255, 2, 3, 6, 255, 0, 1, 3, 255, 1, 2, 5, 255, 2, 3, 7, 255, 2, 3, 7, 255, 1, 2, 7, 255, 2, 3, 8, 255, 0, 1, 5, 255, 2, 2, 7, 255, 3, 4, 8, 255, 2, 3, 7, 255, 0, 1, 5, 255, 0, 1, 5, 255, 1, 2, 6, 255, 1, 0, 5, 255, 1, 0, 5, 255, 1, 0, 5, 255, 0, 0, 3, 255, 0, 0, 2, 255, 0, 0, 0, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 2, 255, 2, 1, 2, 255, 3, 0, 0, 255, 10, 35, 70, 255, 0, 184, 233, 255, 93, 255, 255, 255, 229, 255, 255, 255, 74, 186, 162, 255, 0, 25, 14, 255, 2, 0, 0, 255, 3, 0, 2, 255, 2, 3, 5, 255, 5, 5, 37, 255, 4, 134, 239, 255, 4, 84, 136, 255, 6, 0, 0, 255, 5, 17, 126, 255, 0, 39, 195, 255, 4, 2, 0, 255, 3, 2, 3, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 2, 0, 255, 0, 2, 2, 255, 0, 0, 4, 255, 0, 1, 1, 255, 1, 0, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 2, 0, 1, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 2, 0, 1, 255, 3, 1, 2, 255, 1, 0, 0, 255, 1, 1, 1, 255, 2, 0, 1, 255, 3, 0, 0, 255, 3, 2, 0, 255, 3, 2, 0, 255, 0, 1, 0, 255, 4, 4, 2, 255, 6, 3, 2, 255, 4, 0, 0, 255, 4, 4, 0, 255, 4, 4, 0, 255, 9, 8, 3, 255, 9, 14, 5, 255, 21, 24, 15, 255, 30, 32, 22, 255, 47, 53, 38, 255, 58, 72, 55, 255, 66, 87, 72, 255, 72, 106, 88, 255, 75, 122, 101, 255, 69, 126, 104, 255, 69, 138, 113, 255, 85, 162, 149, 255, 117, 193, 186, 255, 142, 211, 201, 255, 154, 215, 194, 255, 133, 191, 170, 255, 96, 157, 122, 255, 61, 107, 63, 255, 35, 47, 29, 255, 36, 38, 12, 255, 37, 36, 10, 255, 39, 34, 9, 255, 43, 35, 8, 255, 38, 33, 9, 255, 35, 36, 11, 255, 54, 39, 11, 255, 61, 38, 5, 255, 57, 41, 6, 255, 55, 36, 5, 255, 41, 32, 0, 255, 44, 33, 4, 255, 47, 30, 4, 255, 46, 31, 6, 255, 45, 28, 5, 255, 56, 33, 5, 255, 49, 38, 5, 255, 59, 43, 3, 255, 60, 40, 5, 255, 64, 45, 10, 255, 68, 50, 4, 255, 65, 49, 12, 255, 72, 52, 4, 255, 71, 53, 7, 255, 79, 57, 6, 255, 81, 57, 1, 255, 89, 58, 4, 255, 92, 61, 5, 255, 89, 59, 3, 255, 99, 63, 5, 255, 108, 70, 8, 255, 97, 64, 2, 255, 92, 57, 2, 255, 83, 50, 6, 255, 80, 46, 7, 255, 76, 46, 8, 255, 75, 43, 8, 255, 73, 46, 9, 255, 81, 46, 7, 255, 74, 41, 5, 255, 73, 44, 8, 255, 84, 50, 7, 255, 87, 44, 5, 255, 81, 42, 8, 255, 74, 44, 7, 255, 80, 46, 3, 255, 79, 46, 7, 255, 74, 47, 10, 255, 78, 46, 7, 255, 81, 46, 7, 255, 75, 45, 8, 255, 80, 48, 5, 255, 89, 55, 5, 255, 86, 53, 4, 255, 87, 52, 6, 255, 101, 48, 4, 255, 104, 51, 10, 255, 119, 54, 14, 255, 105, 49, 1, 255, 111, 49, 4, 255, 123, 53, 3, 255, 112, 50, 6, 255, 135, 52, 16, 255, 118, 47, 6, 255, 132, 56, 8, 255, 135, 60, 2, 255, 133, 58, 5, 255, 150, 64, 6, 255, 152, 66, 4, 255, 157, 67, 6, 255, 167, 67, 2, 255, 171, 73, 5, 255, 165, 72, 10, 255, 161, 73, 6, 255, 152, 73, 9, 255, 126, 61, 7, 255, 113, 57, 5, 255, 115, 51, 9, 255, 107, 45, 9, 255, 98, 47, 8, 255, 105, 50, 8, 255, 116, 49, 8, 255, 126, 61, 9, 255, 121, 56, 6, 255, 125, 59, 6, 255, 130, 65, 3, 255, 136, 73, 10, 255, 126, 65, 7, 255, 119, 64, 4, 255, 109, 62, 6, 255, 105, 59, 16, 255, 109, 62, 13, 255, 108, 57, 3, 255, 103, 57, 3, 255, 110, 61, 11, 255, 117, 61, 11, 255, 113, 64, 5, 255, 112, 63, 10, 255, 113, 60, 10, 255, 113, 61, 12, 255, 110, 61, 9, 255, 108, 64, 8, 255, 110, 65, 13, 255, 110, 64, 15, 255, 106, 63, 10, 255, 108, 68, 5, 255, 110, 68, 10, 255, 110, 66, 13, 255, 106, 64, 12, 255, 106, 67, 15, 255, 112, 66, 11, 255, 111, 69, 8, 255, 108, 65, 8, 255, 109, 66, 8, 255, 106, 71, 9, 255, 109, 71, 12, 255, 111, 69, 15, 255, 116, 72, 16, 255, 117, 70, 4, 255, 116, 70, 8, 255, 110, 69, 12, 255, 117, 74, 17, 255, 127, 78, 9, 255, 135, 80, 6, 255, 128, 78, 12, 255, 129, 78, 7, 255, 126, 76, 8, 255, 118, 69, 11, 255, 128, 78, 8, 255, 137, 77, 14, 255, 147, 81, 8, 255, 143, 83, 7, 255, 127, 81, 10, 255, 120, 78, 16, 255, 117, 77, 13, 255, 119, 77, 16, 255, 120, 77, 19, 255, 114, 75, 8, 255, 147, 81, 19, 255, 141, 79, 14, 255, 115, 82, 9, 255, 122, 81, 10, 255, 124, 81, 19, 255, 129, 84, 19, 255, 127, 82, 13, 255, 131, 84, 12, 255, 133, 84, 12, 255, 134, 86, 11, 255, 141, 87, 15, 255, 143, 87, 23, 255, 141, 87, 21, 255, 138, 89, 19, 255, 146, 93, 23, 255, 150, 92, 17, 255, 156, 92, 17, 255, 158, 99, 18, 255, 159, 102, 14, 255, 159, 100, 18, 255, 159, 98, 17, 255, 159, 101, 15, 255, 154, 98, 25, 255, 152, 99, 12, 255, 154, 101, 12, 255, 156, 101, 20, 255, 157, 100, 25, 255, 156, 103, 23, 255, 166, 105, 11, 255, 176, 104, 20, 255, 175, 104, 23, 255, 175, 102, 21, 255, 180, 103, 21, 255, 178, 106, 14, 255, 179, 114, 9, 255, 177, 112, 15, 255, 177, 111, 12, 255, 182, 111, 11, 255, 186, 109, 22, 255, 184, 110, 20, 255, 177, 109, 14, 255, 173, 102, 20, 255, 179, 105, 13, 255, 195, 128, 10, 255, 188, 120, 16, 255, 190, 126, 11, 255, 180, 123, 12, 255, 175, 114, 17, 255, 183, 112, 10, 255, 180, 99, 12, 255, 180, 102, 17, 255, 177, 98, 3, 255, 183, 98, 10, 255, 185, 97, 16, 255, 170, 90, 14, 255, 168, 90, 9, 255, 179, 93, 8, 255, 186, 96, 11, 255, 185, 101, 5, 255, 177, 101, 2, 255, 172, 100, 6, 255, 174, 101, 12, 255, 176, 99, 12, 255, 173, 97, 11, 255, 168, 101, 7, 255, 166, 99, 2, 255, 171, 98, 6, 255, 165, 95, 8, 255, 168, 93, 6, 255, 173, 92, 3, 255, 181, 92, 1, 255, 178, 90, 0, 255, 178, 92, 8, 255, 170, 97, 10, 255, 167, 93, 0, 255, 174, 99, 4, 255, 179, 100, 12, 255, 182, 99, 13, 255, 184, 100, 13, 255, 181, 100, 11, 255, 176, 97, 9, 255, 172, 81, 14, 255, 177, 87, 10, 255, 183, 97, 4, 255, 182, 99, 1, 255, 187, 105, 7, 255, 190, 106, 3, 255, 188, 111, 1, 255, 192, 101, 3, 255, 193, 105, 6, 255, 177, 91, 5, 255, 141, 55, 6, 255, 125, 53, 14, 255, 127, 57, 6, 255, 129, 60, 0, 255, 128, 57, 2, 255, 127, 51, 7, 255, 120, 50, 0, 255, 120, 51, 2, 255, 116, 50, 8, 255, 112, 49, 7, 255, 105, 49, 3, 255, 106, 54, 6, 255, 106, 53, 7, 255, 110, 52, 5, 255, 113, 52, 6, 255, 116, 53, 3, 255, 119, 53, 3, 255, 125, 61, 3, 255, 141, 79, 10, 255, 148, 85, 12, 255, 154, 90, 11, 255, 157, 93, 15, 255, 153, 88, 12, 255, 164, 88, 15, 255, 169, 95, 9, 255, 168, 95, 15, 255, 164, 95, 5, 255, 164, 97, 11, 255, 162, 92, 7, 255, 162, 93, 8, 255, 161, 92, 6, 255, 160, 89, 21, 255, 156, 88, 11, 255, 159, 91, 6, 255, 159, 89, 17, 255, 155, 86, 14, 255, 155, 86, 10, 255, 154, 87, 9, 255, 153, 87, 12, 255, 151, 85, 11, 255, 142, 74, 9, 255, 129, 59, 6, 255, 132, 64, 9, 255, 143, 78, 7, 255, 148, 83, 12, 255, 143, 77, 12, 255, 141, 77, 7, 255, 136, 76, 5, 255, 136, 76, 6, 255, 137, 73, 9, 255, 133, 71, 10, 255, 129, 72, 4, 255, 128, 71, 4, 255, 126, 66, 12, 255, 108, 59, 5, 255, 98, 51, 4, 255, 101, 51, 5, 255, 15, 57, 69, 255, 0, 6, 9, 255, 5, 0, 5, 255, 4, 0, 8, 255, 2, 1, 10, 255, 1, 1, 6, 255, 1, 3, 11, 255, 3, 5, 18, 255, 3, 5, 20, 255, 1, 4, 20, 255, 1, 4, 16, 255, 1, 4, 10, 255, 1, 4, 11, 255, 1, 4, 12, 255, 0, 3, 10, 255, 2, 4, 9, 255, 1, 3, 8, 255, 3, 5, 10, 255, 2, 4, 9, 255, 1, 1, 9, 255, 2, 3, 9, 255, 1, 2, 7, 255, 0, 0, 5, 255, 0, 0, 4, 255, 1, 2, 6, 255, 2, 2, 7, 255, 1, 1, 7, 255, 0, 1, 6, 255, 1, 1, 5, 255, 2, 3, 7, 255, 1, 2, 5, 255, 0, 1, 4, 255, 1, 2, 6, 255, 1, 2, 6, 255, 1, 3, 6, 255, 2, 1, 6, 255, 1, 0, 6, 255, 1, 0, 6, 255, 1, 1, 4, 255, 0, 0, 2, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 2, 255, 1, 1, 3, 255, 0, 1, 3, 255, 5, 0, 0, 255, 5, 69, 104, 255, 85, 224, 215, 255, 53, 164, 131, 255, 0, 21, 16, 255, 2, 0, 3, 255, 3, 0, 9, 255, 5, 4, 11, 255, 2, 0, 0, 255, 4, 56, 141, 255, 3, 181, 222, 255, 4, 0, 14, 255, 4, 0, 29, 255, 7, 144, 225, 255, 3, 50, 96, 255, 5, 0, 0, 255, 2, 3, 5, 255, 1, 1, 2, 255, 2, 0, 2, 255, 1, 0, 4, 255, 2, 1, 4, 255, 3, 2, 1, 255, 2, 2, 1, 255, 1, 1, 5, 255, 0, 0, 3, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 0, 0, 255, 2, 2, 2, 255, 1, 1, 1, 255, 0, 0, 0, 255, 2, 0, 1, 255, 2, 0, 1, 255, 2, 0, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 0, 1, 255, 1, 1, 0, 255, 3, 3, 1, 255, 3, 2, 0, 255, 1, 2, 1, 255, 2, 1, 1, 255, 6, 3, 1, 255, 9, 5, 2, 255, 10, 9, 5, 255, 10, 10, 4, 255, 19, 18, 8, 255, 27, 28, 15, 255, 39, 40, 29, 255, 51, 58, 47, 255, 57, 75, 60, 255, 60, 89, 72, 255, 60, 100, 85, 255, 60, 110, 90, 255, 66, 115, 92, 255, 71, 116, 99, 255, 79, 143, 135, 255, 95, 173, 166, 255, 122, 195, 187, 255, 148, 207, 196, 255, 140, 198, 179, 255, 116, 178, 145, 255, 89, 147, 102, 255, 60, 101, 56, 255, 40, 55, 15, 255, 33, 34, 11, 255, 31, 35, 8, 255, 40, 38, 11, 255, 33, 29, 8, 255, 38, 36, 9, 255, 43, 36, 8, 255, 52, 35, 8, 255, 56, 39, 6, 255, 46, 34, 8, 255, 42, 34, 8, 255, 44, 33, 5, 255, 50, 30, 11, 255, 47, 32, 4, 255, 38, 34, 7, 255, 39, 33, 12, 255, 49, 32, 0, 255, 45, 36, 4, 255, 61, 43, 4, 255, 65, 41, 7, 255, 58, 40, 8, 255, 65, 43, 2, 255, 72, 45, 1, 255, 77, 49, 5, 255, 86, 54, 3, 255, 88, 55, 8, 255, 90, 56, 3, 255, 92, 57, 7, 255, 87, 59, 5, 255, 91, 63, 5, 255, 101, 61, 5, 255, 105, 64, 6, 255, 97, 65, 2, 255, 92, 58, 2, 255, 78, 54, 6, 255, 77, 49, 6, 255, 72, 44, 4, 255, 71, 44, 5, 255, 67, 46, 8, 255, 77, 47, 8, 255, 72, 45, 3, 255, 70, 45, 7, 255, 77, 46, 7, 255, 78, 45, 7, 255, 79, 43, 9, 255, 82, 44, 7, 255, 84, 44, 6, 255, 85, 44, 7, 255, 75, 45, 10, 255, 83, 49, 7, 255, 93, 52, 4, 255, 87, 52, 9, 255, 88, 53, 11, 255, 87, 53, 5, 255, 93, 54, 6, 255, 89, 51, 7, 255, 89, 50, 8, 255, 91, 50, 2, 255, 96, 52, 8, 255, 86, 46, 6, 255, 102, 54, 7, 255, 96, 46, 8, 255, 100, 50, 3, 255, 99, 48, 8, 255, 102, 46, 4, 255, 124, 55, 3, 255, 107, 45, 8, 255, 133, 60, 10, 255, 139, 56, 9, 255, 123, 46, 4, 255, 140, 64, 5, 255, 148, 65, 11, 255, 148, 63, 7, 255, 155, 64, 5, 255, 160, 69, 6, 255, 161, 76, 4, 255, 169, 79, 5, 255, 174, 79, 4, 255, 171, 79, 2, 255, 160, 76, 12, 255, 145, 68, 16, 255, 132, 65, 10, 255, 114, 57, 10, 255, 104, 56, 7, 255, 104, 53, 13, 255, 101, 48, 11, 255, 108, 54, 8, 255, 130, 67, 8, 255, 131, 61, 1, 255, 136, 64, 6, 255, 135, 67, 9, 255, 131, 66, 6, 255, 124, 67, 4, 255, 122, 68, 5, 255, 113, 66, 5, 255, 110, 65, 10, 255, 110, 62, 6, 255, 114, 64, 10, 255, 112, 63, 10, 255, 113, 63, 6, 255, 115, 65, 13, 255, 109, 66, 10, 255, 105, 66, 9, 255, 107, 67, 7, 255, 111, 67, 10, 255, 111, 63, 15, 255, 107, 64, 12, 255, 110, 68, 12, 255, 109, 66, 7, 255, 110, 69, 8, 255, 111, 68, 14, 255, 110, 65, 4, 255, 106, 67, 9, 255, 109, 67, 15, 255, 115, 66, 11, 255, 113, 71, 13, 255, 115, 72, 6, 255, 112, 71, 8, 255, 117, 71, 15, 255, 120, 72, 10, 255, 116, 70, 10, 255, 127, 76, 15, 255, 128, 75, 14, 255, 122, 74, 8, 255, 127, 76, 11, 255, 156, 83, 11, 255, 168, 79, 2, 255, 147, 76, 13, 255, 135, 77, 18, 255, 158, 83, 10, 255, 165, 79, 2, 255, 166, 77, 10, 255, 165, 80, 9, 255, 152, 80, 13, 255, 126, 75, 7, 255, 115, 76, 11, 255, 120, 75, 14, 255, 121, 77, 9, 255, 118, 78, 18, 255, 120, 76, 20, 255, 120, 78, 12, 255, 126, 77, 5, 255, 129, 83, 7, 255, 126, 82, 19, 255, 123, 82, 9, 255, 128, 84, 10, 255, 132, 83, 18, 255, 133, 88, 24, 255, 137, 87, 8, 255, 134, 86, 6, 255, 138, 87, 17, 255, 148, 90, 8, 255, 147, 91, 19, 255, 145, 87, 27, 255, 146, 93, 20, 255, 155, 98, 17, 255, 163, 98, 24, 255, 160, 103, 9, 255, 160, 105, 5, 255, 158, 103, 8, 255, 156, 101, 10, 255, 156, 99, 17, 255, 157, 101, 19, 255, 152, 101, 16, 255, 156, 102, 13, 255, 159, 101, 21, 255, 155, 103, 20, 255, 166, 102, 21, 255, 178, 102, 20, 255, 174, 104, 12, 255, 174, 102, 21, 255, 175, 101, 17, 255, 175, 106, 9, 255, 175, 107, 18, 255, 182, 107, 15, 255, 183, 110, 19, 255, 183, 108, 11, 255, 186, 108, 11, 255, 182, 108, 18, 255, 173, 108, 8, 255, 172, 110, 7, 255, 184, 115, 18, 255, 197, 131, 21, 255, 196, 134, 4, 255, 190, 127, 6, 255, 179, 119, 7, 255, 176, 112, 23, 255, 178, 101, 30, 255, 176, 98, 12, 255, 179, 104, 9, 255, 179, 99, 9, 255, 184, 99, 7, 255, 183, 104, 15, 255, 175, 102, 18, 255, 174, 98, 9, 255, 179, 99, 13, 255, 182, 96, 10, 255, 186, 93, 8, 255, 189, 99, 4, 255, 176, 102, 3, 255, 171, 102, 10, 255, 171, 99, 3, 255, 167, 100, 4, 255, 170, 98, 2, 255, 170, 97, 6, 255, 170, 99, 6, 255, 167, 95, 2, 255, 167, 91, 6, 255, 166, 90, 4, 255, 177, 96, 5, 255, 180, 97, 1, 255, 181, 93, 5, 255, 173, 92, 6, 255, 172, 92, 2, 255, 176, 100, 11, 255, 176, 104, 15, 255, 176, 104, 8, 255, 184, 105, 15, 255, 184, 106, 17, 255, 180, 102, 13, 255, 180, 101, 12, 255, 185, 106, 2, 255, 184, 102, 1, 255, 183, 100, 5, 255, 186, 102, 8, 255, 188, 103, 3, 255, 193, 104, 3, 255, 195, 108, 5, 255, 201, 107, 4, 255, 168, 77, 6, 255, 129, 56, 4, 255, 122, 56, 4, 255, 123, 61, 4, 255, 126, 55, 6, 255, 125, 49, 3, 255, 118, 54, 3, 255, 113, 55, 0, 255, 119, 52, 0, 255, 114, 46, 8, 255, 109, 51, 4, 255, 103, 52, 1, 255, 105, 51, 6, 255, 107, 52, 10, 255, 112, 52, 2, 255, 123, 57, 6, 255, 125, 62, 4, 255, 137, 69, 9, 255, 150, 78, 11, 255, 153, 80, 9, 255, 154, 85, 10, 255, 154, 93, 9, 255, 148, 88, 7, 255, 157, 86, 5, 255, 168, 91, 14, 255, 166, 94, 10, 255, 162, 90, 14, 255, 163, 87, 4, 255, 165, 90, 8, 255, 163, 88, 14, 255, 162, 91, 4, 255, 160, 92, 2, 255, 155, 86, 14, 255, 155, 87, 12, 255, 156, 87, 3, 255, 158, 88, 13, 255, 153, 85, 18, 255, 153, 85, 15, 255, 152, 87, 13, 255, 150, 87, 6, 255, 148, 84, 9, 255, 146, 82, 7, 255, 133, 70, 7, 255, 135, 71, 12, 255, 140, 78, 10, 255, 141, 75, 9, 255, 141, 75, 7, 255, 140, 73, 8, 255, 135, 77, 5, 255, 129, 75, 6, 255, 131, 73, 7, 255, 126, 69, 4, 255, 124, 67, 9, 255, 124, 68, 5, 255, 122, 67, 6, 255, 83, 39, 8, 255, 73, 35, 5, 255, 92, 44, 4, 255, 8, 84, 93, 255, 1, 2, 5, 255, 4, 2, 10, 255, 2, 1, 5, 255, 1, 2, 9, 255, 2, 3, 4, 255, 2, 2, 4, 255, 0, 4, 6, 255, 0, 2, 13, 255, 1, 3, 20, 255, 2, 4, 20, 255, 0, 4, 14, 255, 1, 6, 12, 255, 0, 6, 12, 255, 1, 5, 11, 255, 2, 3, 8, 255, 1, 3, 8, 255, 1, 3, 8, 255, 0, 3, 8, 255, 1, 1, 9, 255, 3, 3, 9, 255, 3, 3, 8, 255, 2, 2, 12, 255, 2, 2, 12, 255, 2, 2, 8, 255, 1, 2, 5, 255, 1, 2, 7, 255, 1, 2, 7, 255, 2, 3, 8, 255, 2, 3, 8, 255, 1, 2, 7, 255, 1, 2, 6, 255, 0, 1, 5, 255, 0, 1, 5, 255, 0, 1, 6, 255, 1, 2, 6, 255, 1, 2, 7, 255, 1, 2, 8, 255, 0, 0, 6, 255, 1, 1, 3, 255, 1, 1, 2, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 2, 255, 0, 0, 5, 255, 0, 0, 4, 255, 2, 1, 1, 255, 2, 2, 2, 255, 0, 23, 15, 255, 0, 4, 0, 255, 5, 2, 13, 255, 2, 2, 11, 255, 4, 1, 5, 255, 1, 4, 3, 255, 1, 0, 43, 255, 6, 174, 229, 255, 3, 66, 117, 255, 2, 0, 0, 255, 6, 23, 116, 255, 3, 96, 228, 255, 6, 7, 10, 255, 3, 2, 4, 255, 3, 0, 3, 255, 2, 4, 1, 255, 3, 3, 2, 255, 4, 2, 3, 255, 5, 1, 2, 255, 6, 2, 3, 255, 2, 0, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 2, 2, 255, 2, 1, 1, 255, 2, 0, 1, 255, 2, 0, 1, 255, 2, 0, 1, 255, 1, 1, 1, 255, 2, 1, 2, 255, 2, 0, 1, 255, 3, 2, 1, 255, 3, 2, 1, 255, 3, 2, 1, 255, 4, 3, 1, 255, 3, 3, 2, 255, 1, 2, 1, 255, 9, 6, 0, 255, 12, 8, 2, 255, 16, 13, 6, 255, 22, 23, 10, 255, 30, 34, 18, 255, 37, 46, 27, 255, 44, 62, 48, 255, 46, 73, 62, 255, 44, 90, 72, 255, 56, 97, 76, 255, 51, 100, 78, 255, 54, 109, 87, 255, 56, 106, 90, 255, 67, 122, 111, 255, 84, 158, 149, 255, 100, 181, 172, 255, 129, 197, 185, 255, 143, 197, 179, 255, 127, 182, 158, 255, 103, 162, 128, 255, 78, 132, 93, 255, 63, 95, 58, 255, 44, 56, 12, 255, 39, 38, 11, 255, 33, 34, 11, 255, 39, 36, 12, 255, 41, 33, 10, 255, 43, 34, 6, 255, 50, 38, 6, 255, 52, 39, 6, 255, 53, 40, 6, 255, 46, 34, 3, 255, 41, 30, 7, 255, 46, 33, 9, 255, 46, 32, 3, 255, 53, 37, 7, 255, 53, 35, 4, 255, 43, 32, 6, 255, 46, 35, 6, 255, 43, 36, 12, 255, 54, 40, 10, 255, 70, 41, 2, 255, 74, 46, 6, 255, 70, 44, 7, 255, 78, 48, 8, 255, 87, 54, 7, 255, 90, 53, 3, 255, 94, 57, 4, 255, 87, 57, 2, 255, 88, 60, 3, 255, 87, 54, 6, 255, 100, 60, 3, 255, 109, 62, 6, 255, 105, 64, 8, 255, 104, 64, 0, 255, 96, 54, 9, 255, 80, 47, 6, 255, 72, 46, 6, 255, 74, 48, 5, 255, 78, 49, 3, 255, 75, 43, 5, 255, 81, 47, 8, 255, 75, 46, 3, 255, 67, 44, 6, 255, 72, 45, 4, 255, 79, 48, 10, 255, 78, 43, 10, 255, 82, 46, 9, 255, 81, 45, 7, 255, 83, 44, 4, 255, 93, 51, 8, 255, 101, 59, 11, 255, 101, 60, 7, 255, 99, 57, 4, 255, 93, 52, 5, 255, 95, 50, 11, 255, 94, 47, 12, 255, 96, 52, 9, 255, 95, 54, 4, 255, 92, 51, 1, 255, 93, 50, 7, 255, 96, 51, 9, 255, 99, 53, 3, 255, 95, 52, 13, 255, 93, 55, 11, 255, 95, 57, 5, 255, 97, 52, 6, 255, 89, 41, 4, 255, 100, 51, 10, 255, 125, 54, 7, 255, 108, 47, 8, 255, 124, 59, 9, 255, 149, 63, 1, 255, 131, 52, 3, 255, 131, 59, 7, 255, 151, 70, 1, 255, 159, 63, 6, 255, 148, 65, 8, 255, 149, 66, 4, 255, 156, 67, 10, 255, 161, 72, 4, 255, 164, 73, 7, 255, 164, 68, 10, 255, 168, 70, 4, 255, 171, 77, 1, 255, 161, 79, 6, 255, 150, 70, 7, 255, 136, 66, 5, 255, 111, 59, 7, 255, 98, 52, 5, 255, 103, 52, 12, 255, 105, 56, 5, 255, 116, 62, 9, 255, 130, 65, 10, 255, 136, 67, 7, 255, 136, 69, 9, 255, 141, 69, 4, 255, 139, 72, 4, 255, 122, 68, 0, 255, 110, 63, 10, 255, 114, 67, 15, 255, 109, 64, 2, 255, 118, 68, 0, 255, 115, 64, 10, 255, 111, 59, 22, 255, 110, 67, 11, 255, 103, 68, 5, 255, 113, 65, 17, 255, 108, 65, 18, 255, 103, 68, 7, 255, 107, 67, 8, 255, 109, 68, 11, 255, 113, 66, 16, 255, 114, 65, 12, 255, 112, 63, 11, 255, 114, 71, 11, 255, 107, 69, 7, 255, 109, 69, 13, 255, 118, 71, 11, 255, 118, 72, 8, 255, 118, 71, 13, 255, 124, 74, 11, 255, 146, 75, 10, 255, 160, 78, 8, 255, 136, 76, 2, 255, 121, 74, 14, 255, 128, 80, 16, 255, 147, 77, 6, 255, 142, 76, 7, 255, 121, 75, 13, 255, 131, 82, 10, 255, 152, 76, 2, 255, 154, 78, 9, 255, 145, 82, 5, 255, 144, 80, 7, 255, 150, 82, 16, 255, 131, 77, 9, 255, 122, 77, 14, 255, 118, 73, 20, 255, 119, 80, 12, 255, 125, 81, 14, 255, 123, 79, 19, 255, 118, 77, 14, 255, 128, 81, 15, 255, 117, 82, 19, 255, 118, 83, 13, 255, 130, 87, 10, 255, 138, 90, 8, 255, 133, 91, 14, 255, 136, 87, 13, 255, 137, 87, 11, 255, 136, 92, 11, 255, 140, 88, 19, 255, 144, 91, 21, 255, 144, 90, 15, 255, 152, 89, 16, 255, 154, 93, 14, 255, 153, 97, 24, 255, 168, 99, 21, 255, 168, 104, 16, 255, 172, 105, 12, 255, 168, 103, 11, 255, 162, 103, 15, 255, 158, 100, 19, 255, 154, 99, 19, 255, 152, 102, 17, 255, 159, 104, 17, 255, 159, 100, 22, 255, 155, 104, 19, 255, 162, 105, 10, 255, 170, 104, 16, 255, 166, 106, 13, 255, 167, 106, 20, 255, 167, 104, 30, 255, 166, 105, 16, 255, 160, 106, 14, 255, 165, 105, 21, 255, 172, 110, 21, 255, 173, 110, 20, 255, 178, 113, 9, 255, 181, 114, 15, 255, 177, 113, 15, 255, 179, 119, 11, 255, 185, 125, 11, 255, 189, 128, 12, 255, 193, 131, 4, 255, 190, 126, 6, 255, 184, 123, 13, 255, 177, 118, 17, 255, 175, 116, 16, 255, 178, 113, 6, 255, 181, 110, 12, 255, 188, 101, 14, 255, 187, 103, 4, 255, 188, 116, 23, 255, 187, 114, 27, 255, 178, 101, 12, 255, 180, 105, 5, 255, 178, 100, 4, 255, 183, 97, 1, 255, 186, 100, 3, 255, 179, 101, 11, 255, 170, 101, 10, 255, 170, 102, 4, 255, 170, 98, 2, 255, 174, 99, 5, 255, 173, 97, 4, 255, 175, 98, 6, 255, 173, 96, 6, 255, 169, 91, 6, 255, 169, 95, 5, 255, 174, 101, 4, 255, 178, 98, 3, 255, 183, 95, 5, 255, 177, 89, 2, 255, 178, 96, 4, 255, 181, 103, 4, 255, 179, 101, 12, 255, 179, 102, 16, 255, 184, 108, 17, 255, 182, 107, 18, 255, 178, 104, 12, 255, 182, 104, 14, 255, 182, 102, 5, 255, 178, 96, 4, 255, 179, 98, 2, 255, 183, 100, 3, 255, 181, 93, 4, 255, 179, 74, 6, 255, 178, 85, 3, 255, 200, 110, 6, 255, 186, 88, 8, 255, 125, 55, 2, 255, 111, 52, 3, 255, 115, 57, 3, 255, 124, 57, 7, 255, 118, 51, 8, 255, 113, 48, 5, 255, 117, 54, 7, 255, 112, 51, 1, 255, 122, 59, 8, 255, 112, 53, 11, 255, 98, 46, 4, 255, 97, 46, 5, 255, 106, 54, 8, 255, 122, 63, 8, 255, 135, 70, 7, 255, 147, 78, 5, 255, 168, 93, 10, 255, 168, 88, 8, 255, 157, 82, 8, 255, 153, 89, 8, 255, 155, 93, 7, 255, 153, 86, 3, 255, 162, 96, 6, 255, 166, 98, 10, 255, 165, 93, 9, 255, 163, 89, 11, 255, 161, 87, 11, 255, 159, 87, 9, 255, 159, 84, 7, 255, 159, 87, 5, 255, 156, 87, 7, 255, 153, 85, 11, 255, 148, 80, 10, 255, 153, 85, 5, 255, 153, 88, 0, 255, 151, 86, 3, 255, 153, 84, 8, 255, 152, 81, 4, 255, 152, 79, 12, 255, 147, 80, 14, 255, 144, 85, 9, 255, 142, 83, 8, 255, 142, 80, 5, 255, 133, 77, 7, 255, 131, 76, 9, 255, 133, 72, 6, 255, 134, 71, 12, 255, 130, 67, 10, 255, 128, 68, 7, 255, 123, 67, 9, 255, 124, 64, 7, 255, 120, 58, 2, 255, 113, 57, 1, 255, 111, 57, 5, 255, 100, 43, 8, 255, 79, 39, 3, 255, 79, 38, 6, 255, 1, 5, 13, 255, 4, 3, 21, 255, 1, 6, 13, 255, 0, 4, 7, 255, 0, 3, 9, 255, 1, 2, 5, 255, 1, 1, 0, 255, 0, 0, 0, 255, 1, 1, 5, 255, 1, 2, 10, 255, 0, 2, 14, 255, 1, 5, 18, 255, 4, 7, 19, 255, 2, 5, 12, 255, 1, 5, 12, 255, 1, 5, 11, 255, 0, 4, 9, 255, 2, 5, 10, 255, 1, 4, 9, 255, 2, 2, 10, 255, 2, 3, 7, 255, 2, 4, 3, 255, 1, 3, 3, 255, 1, 2, 8, 255, 1, 1, 9, 255, 0, 1, 8, 255, 1, 2, 6, 255, 0, 1, 6, 255, 1, 2, 7, 255, 1, 2, 7, 255, 1, 2, 7, 255, 1, 2, 6, 255, 1, 2, 6, 255, 1, 2, 6, 255, 1, 2, 4, 255, 0, 1, 3, 255, 0, 1, 4, 255, 2, 3, 7, 255, 1, 1, 5, 255, 1, 1, 3, 255, 1, 1, 3, 255, 1, 1, 1, 255, 1, 1, 2, 255, 1, 1, 3, 255, 2, 0, 4, 255, 6, 2, 4, 255, 0, 2, 2, 255, 3, 2, 5, 255, 2, 0, 1, 255, 5, 2, 10, 255, 2, 4, 13, 255, 2, 0, 10, 255, 3, 3, 5, 255, 1, 0, 0, 255, 6, 93, 158, 255, 3, 166, 212, 255, 4, 8, 3, 255, 1, 0, 8, 255, 1, 47, 199, 255, 3, 28, 106, 255, 3, 0, 0, 255, 2, 2, 5, 255, 1, 2, 0, 255, 3, 2, 3, 255, 3, 3, 2, 255, 3, 1, 2, 255, 2, 0, 1, 255, 2, 0, 0, 255, 1, 0, 0, 255, 2, 2, 2, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 2, 0, 1, 255, 1, 0, 0, 255, 1, 1, 1, 255, 3, 3, 3, 255, 1, 1, 1, 255, 1, 0, 0, 255, 4, 3, 1, 255, 5, 4, 2, 255, 3, 2, 0, 255, 4, 3, 0, 255, 3, 3, 2, 255, 7, 9, 6, 255, 13, 12, 6, 255, 17, 15, 7, 255, 23, 24, 6, 255, 32, 38, 15, 255, 39, 47, 32, 255, 41, 66, 47, 255, 42, 74, 59, 255, 44, 83, 68, 255, 41, 91, 70, 255, 53, 96, 74, 255, 51, 97, 75, 255, 48, 100, 82, 255, 50, 112, 93, 255, 68, 140, 121, 255, 92, 167, 152, 255, 115, 182, 168, 255, 134, 192, 171, 255, 130, 185, 155, 255, 113, 172, 138, 255, 95, 148, 111, 255, 75, 121, 80, 255, 56, 92, 51, 255, 34, 53, 19, 255, 38, 43, 8, 255, 38, 36, 10, 255, 36, 36, 4, 255, 40, 37, 11, 255, 42, 35, 10, 255, 46, 39, 2, 255, 56, 39, 2, 255, 59, 36, 6, 255, 57, 32, 6, 255, 53, 31, 5, 255, 44, 31, 6, 255, 45, 34, 2, 255, 53, 35, 1, 255, 45, 32, 2, 255, 41, 36, 7, 255, 48, 36, 9, 255, 47, 32, 13, 255, 56, 41, 10, 255, 68, 45, 2, 255, 73, 46, 2, 255, 81, 49, 8, 255, 83, 49, 4, 255, 82, 53, 2, 255, 81, 54, 1, 255, 85, 55, 2, 255, 87, 55, 3, 255, 89, 57, 6, 255, 86, 50, 15, 255, 94, 57, 7, 255, 100, 62, 2, 255, 106, 63, 7, 255, 108, 54, 6, 255, 83, 48, 12, 255, 76, 43, 10, 255, 73, 47, 9, 255, 78, 45, 10, 255, 82, 40, 10, 255, 77, 47, 6, 255, 72, 45, 4, 255, 76, 47, 10, 255, 80, 53, 3, 255, 79, 46, 0, 255, 84, 47, 9, 255, 83, 46, 8, 255, 76, 41, 8, 255, 80, 47, 9, 255, 88, 47, 3, 255, 100, 59, 9, 255, 108, 67, 7, 255, 107, 64, 13, 255, 100, 58, 10, 255, 92, 52, 6, 255, 89, 52, 5, 255, 89, 54, 3, 255, 90, 54, 4, 255, 93, 56, 7, 255, 92, 55, 6, 255, 90, 54, 9, 255, 91, 51, 14, 255, 101, 49, 10, 255, 100, 53, 2, 255, 95, 52, 5, 255, 95, 49, 17, 255, 93, 49, 14, 255, 96, 54, 4, 255, 98, 52, 13, 255, 91, 44, 7, 255, 92, 48, 9, 255, 124, 59, 4, 255, 126, 53, 1, 255, 107, 50, 3, 255, 129, 64, 10, 255, 155, 65, 14, 255, 135, 56, 11, 255, 128, 61, 6, 255, 153, 69, 1, 255, 159, 70, 5, 255, 149, 66, 15, 255, 153, 71, 12, 255, 152, 75, 8, 255, 154, 66, 7, 255, 161, 66, 6, 255, 157, 71, 5, 255, 166, 75, 0, 255, 176, 78, 6, 255, 166, 75, 4, 255, 149, 72, 4, 255, 152, 75, 11, 255, 145, 72, 8, 255, 138, 65, 1, 255, 149, 70, 7, 255, 137, 64, 6, 255, 117, 63, 7, 255, 118, 62, 14, 255, 135, 65, 7, 255, 148, 69, 14, 255, 146, 71, 4, 255, 132, 74, 3, 255, 112, 67, 10, 255, 115, 64, 12, 255, 117, 62, 14, 255, 108, 62, 4, 255, 110, 65, 8, 255, 106, 65, 9, 255, 110, 65, 14, 255, 111, 69, 11, 255, 106, 68, 6, 255, 112, 70, 13, 255, 106, 68, 9, 255, 109, 68, 14, 255, 118, 66, 10, 255, 113, 65, 18, 255, 108, 68, 5, 255, 110, 70, 4, 255, 112, 68, 9, 255, 116, 70, 16, 255, 112, 72, 13, 255, 118, 76, 6, 255, 143, 75, 5, 255, 158, 74, 10, 255, 145, 75, 2, 255, 130, 78, 1, 255, 126, 76, 16, 255, 133, 81, 8, 255, 127, 76, 3, 255, 122, 77, 13, 255, 113, 76, 6, 255, 118, 77, 16, 255, 130, 77, 13, 255, 144, 79, 11, 255, 126, 79, 6, 255, 128, 81, 8, 255, 127, 76, 9, 255, 126, 77, 15, 255, 124, 74, 12, 255, 120, 77, 8, 255, 136, 80, 15, 255, 166, 84, 12, 255, 157, 87, 10, 255, 128, 78, 21, 255, 130, 81, 14, 255, 147, 85, 13, 255, 156, 91, 9, 255, 167, 92, 10, 255, 173, 89, 5, 255, 166, 91, 8, 255, 156, 90, 8, 255, 141, 89, 13, 255, 138, 92, 13, 255, 144, 93, 18, 255, 153, 95, 22, 255, 167, 96, 15, 255, 174, 97, 6, 255, 177, 98, 14, 255, 173, 96, 16, 255, 180, 102, 3, 255, 181, 99, 10, 255, 178, 99, 7, 255, 178, 98, 6, 255, 174, 100, 13, 255, 160, 104, 11, 255, 158, 101, 12, 255, 170, 101, 19, 255, 169, 103, 25, 255, 156, 102, 18, 255, 159, 105, 21, 255, 160, 104, 26, 255, 158, 104, 13, 255, 162, 106, 17, 255, 159, 109, 19, 255, 163, 105, 20, 255, 165, 103, 26, 255, 155, 104, 14, 255, 169, 107, 23, 255, 179, 118, 13, 255, 172, 112, 6, 255, 177, 116, 16, 255, 178, 116, 14, 255, 178, 117, 12, 255, 181, 120, 11, 255, 184, 121, 10, 255, 190, 124, 12, 255, 195, 129, 7, 255, 198, 133, 5, 255, 191, 127, 16, 255, 180, 120, 10, 255, 177, 120, 5, 255, 175, 115, 6, 255, 182, 115, 1, 255, 188, 104, 6, 255, 184, 98, 11, 255, 187, 117, 7, 255, 189, 120, 16, 255, 178, 112, 15, 255, 171, 107, 4, 255, 175, 104, 13, 255, 182, 106, 10, 255, 178, 102, 7, 255, 172, 101, 17, 255, 171, 105, 11, 255, 174, 104, 3, 255, 176, 104, 5, 255, 176, 102, 4, 255, 174, 98, 1, 255, 176, 98, 4, 255, 178, 100, 7, 255, 177, 97, 6, 255, 175, 95, 4, 255, 177, 98, 3, 255, 176, 99, 5, 255, 177, 100, 7, 255, 176, 97, 7, 255, 183, 101, 5, 255, 181, 98, 0, 255, 179, 96, 10, 255, 187, 105, 18, 255, 188, 108, 12, 255, 183, 104, 9, 255, 182, 104, 7, 255, 183, 103, 15, 255, 184, 103, 9, 255, 174, 93, 4, 255, 175, 95, 6, 255, 182, 101, 8, 255, 185, 99, 2, 255, 168, 74, 4, 255, 178, 90, 4, 255, 201, 116, 2, 255, 188, 92, 1, 255, 122, 54, 7, 255, 113, 55, 11, 255, 120, 52, 5, 255, 125, 55, 3, 255, 122, 50, 2, 255, 117, 49, 5, 255, 116, 54, 3, 255, 118, 61, 1, 255, 121, 61, 7, 255, 115, 62, 12, 255, 106, 55, 8, 255, 104, 51, 8, 255, 118, 57, 8, 255, 144, 76, 12, 255, 157, 86, 3, 255, 160, 86, 8, 255, 168, 90, 13, 255, 171, 92, 7, 255, 166, 94, 8, 255, 158, 95, 8, 255, 154, 90, 8, 255, 158, 89, 13, 255, 164, 94, 11, 255, 165, 93, 8, 255, 165, 94, 6, 255, 163, 90, 5, 255, 161, 88, 8, 255, 161, 87, 12, 255, 159, 88, 3, 255, 156, 85, 6, 255, 152, 84, 10, 255, 152, 85, 7, 255, 149, 83, 9, 255, 150, 83, 11, 255, 150, 83, 8, 255, 151, 79, 8, 255, 146, 79, 8, 255, 143, 80, 5, 255, 145, 80, 8, 255, 141, 77, 8, 255, 142, 79, 4, 255, 143, 73, 6, 255, 140, 73, 8, 255, 130, 72, 13, 255, 123, 71, 12, 255, 126, 68, 7, 255, 123, 64, 7, 255, 123, 62, 6, 255, 119, 62, 3, 255, 117, 64, 5, 255, 115, 60, 3, 255, 112, 56, 6, 255, 99, 45, 8, 255, 82, 32, 1, 255, 90, 38, 3, 255, 93, 37, 6, 255, 85, 28, 1, 255, 11, 6, 21, 255, 0, 5, 13, 255, 1, 4, 10, 255, 2, 7, 19, 255, 1, 3, 11, 255, 4, 2, 7, 255, 4, 2, 6, 255, 1, 1, 5, 255, 0, 0, 4, 255, 1, 0, 3, 255, 0, 1, 5, 255, 2, 4, 9, 255, 1, 3, 11, 255, 3, 4, 14, 255, 1, 6, 13, 255, 2, 7, 13, 255, 1, 6, 10, 255, 1, 5, 10, 255, 2, 3, 8, 255, 4, 4, 11, 255, 4, 5, 10, 255, 1, 5, 6, 255, 1, 5, 5, 255, 1, 4, 8, 255, 1, 3, 9, 255, 1, 2, 9, 255, 1, 2, 6, 255, 1, 2, 6, 255, 1, 2, 6, 255, 1, 2, 6, 255, 1, 2, 6, 255, 1, 2, 6, 255, 0, 1, 6, 255, 1, 2, 6, 255, 2, 3, 7, 255, 1, 2, 5, 255, 1, 2, 5, 255, 1, 2, 6, 255, 0, 1, 5, 255, 0, 1, 5, 255, 1, 1, 3, 255, 1, 1, 3, 255, 1, 1, 3, 255, 1, 1, 3, 255, 1, 0, 3, 255, 1, 1, 2, 255, 2, 1, 5, 255, 4, 0, 3, 255, 4, 6, 15, 255, 1, 10, 21, 255, 5, 4, 12, 255, 3, 2, 3, 255, 2, 1, 0, 255, 3, 5, 51, 255, 9, 174, 242, 255, 3, 62, 77, 255, 2, 0, 0, 255, 7, 15, 111, 255, 6, 42, 195, 255, 2, 7, 18, 255, 0, 1, 1, 255, 0, 1, 0, 255, 4, 0, 3, 255, 5, 0, 3, 255, 1, 0, 0, 255, 2, 0, 1, 255, 2, 0, 1, 255, 2, 0, 1, 255, 2, 0, 1, 255, 1, 1, 1, 255, 2, 1, 2, 255, 2, 0, 1, 255, 2, 0, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 2, 2, 2, 255, 2, 2, 1, 255, 3, 2, 0, 255, 3, 2, 0, 255, 5, 2, 0, 255, 8, 4, 1, 255, 8, 4, 1, 255, 7, 6, 1, 255, 8, 12, 4, 255, 17, 18, 13, 255, 27, 29, 20, 255, 31, 39, 21, 255, 35, 50, 27, 255, 42, 64, 38, 255, 42, 73, 48, 255, 45, 77, 56, 255, 47, 84, 63, 255, 44, 86, 60, 255, 54, 86, 63, 255, 54, 88, 66, 255, 54, 98, 79, 255, 60, 125, 104, 255, 75, 154, 133, 255, 98, 172, 155, 255, 118, 182, 167, 255, 121, 184, 158, 255, 111, 173, 138, 255, 101, 161, 121, 255, 85, 136, 97, 255, 73, 115, 73, 255, 60, 94, 37, 255, 39, 60, 14, 255, 33, 39, 13, 255, 35, 39, 9, 255, 32, 33, 9, 255, 35, 33, 2, 255, 44, 39, 4, 255, 48, 38, 3, 255, 59, 41, 5, 255, 55, 35, 6, 255, 43, 30, 7, 255, 46, 29, 9, 255, 51, 31, 6, 255, 45, 31, 5, 255, 38, 31, 5, 255, 42, 36, 7, 255, 34, 31, 8, 255, 48, 36, 4, 255, 58, 39, 8, 255, 62, 44, 5, 255, 70, 47, 6, 255, 76, 44, 7, 255, 81, 46, 5, 255, 76, 46, 2, 255, 79, 52, 4, 255, 82, 55, 1, 255, 86, 54, 6, 255, 88, 55, 8, 255, 89, 56, 4, 255, 86, 56, 11, 255, 86, 56, 4, 255, 98, 69, 0, 255, 103, 66, 4, 255, 101, 53, 8, 255, 78, 50, 8, 255, 74, 44, 7, 255, 82, 49, 0, 255, 81, 43, 2, 255, 77, 38, 7, 255, 75, 49, 10, 255, 68, 43, 5, 255, 73, 43, 7, 255, 80, 47, 6, 255, 79, 46, 4, 255, 82, 46, 7, 255, 85, 51, 6, 255, 81, 47, 4, 255, 86, 52, 6, 255, 93, 54, 8, 255, 102, 63, 3, 255, 107, 66, 4, 255, 104, 62, 4, 255, 97, 57, 8, 255, 91, 53, 8, 255, 88, 54, 5, 255, 90, 54, 8, 255, 93, 54, 10, 255, 93, 52, 7, 255, 91, 51, 2, 255, 92, 53, 3, 255, 95, 55, 6, 255, 99, 53, 4, 255, 97, 50, 6, 255, 98, 49, 8, 255, 92, 50, 8, 255, 92, 50, 5, 255, 95, 54, 7, 255, 86, 53, 13, 255, 90, 52, 4, 255, 100, 52, 7, 255, 106, 52, 7, 255, 92, 48, 2, 255, 101, 55, 12, 255, 126, 59, 10, 255, 126, 55, 4, 255, 125, 52, 7, 255, 131, 63, 3, 255, 142, 66, 9, 255, 137, 57, 11, 255, 131, 54, 13, 255, 144, 61, 7, 255, 148, 65, 7, 255, 158, 70, 4, 255, 159, 70, 7, 255, 153, 72, 12, 255, 155, 72, 3, 255, 151, 69, 12, 255, 146, 71, 11, 255, 161, 68, 8, 255, 164, 71, 3, 255, 164, 70, 6, 255, 165, 69, 2, 255, 168, 73, 5, 255, 169, 78, 9, 255, 170, 77, 5, 255, 150, 76, 8, 255, 139, 71, 13, 255, 140, 63, 9, 255, 136, 69, 8, 255, 144, 71, 7, 255, 147, 79, 6, 255, 136, 72, 6, 255, 126, 70, 15, 255, 120, 68, 20, 255, 115, 61, 14, 255, 113, 67, 18, 255, 112, 66, 14, 255, 109, 67, 6, 255, 108, 65, 14, 255, 113, 66, 26, 255, 111, 71, 13, 255, 110, 67, 12, 255, 110, 64, 12, 255, 109, 67, 13, 255, 110, 69, 15, 255, 111, 71, 10, 255, 111, 65, 7, 255, 119, 68, 20, 255, 125, 73, 17, 255, 117, 74, 10, 255, 129, 78, 11, 255, 129, 72, 6, 255, 120, 74, 7, 255, 125, 77, 10, 255, 128, 77, 19, 255, 126, 76, 13, 255, 124, 75, 14, 255, 124, 76, 21, 255, 123, 77, 11, 255, 118, 70, 18, 255, 123, 76, 15, 255, 125, 77, 4, 255, 122, 76, 6, 255, 136, 84, 14, 255, 137, 77, 13, 255, 121, 74, 15, 255, 121, 75, 10, 255, 150, 86, 8, 255, 156, 84, 5, 255, 157, 84, 7, 255, 138, 81, 6, 255, 128, 80, 6, 255, 153, 88, 9, 255, 171, 87, 10, 255, 171, 89, 13, 255, 162, 92, 9, 255, 167, 89, 6, 255, 168, 88, 10, 255, 148, 88, 9, 255, 141, 88, 14, 255, 137, 88, 20, 255, 140, 88, 18, 255, 158, 90, 12, 255, 181, 94, 16, 255, 180, 94, 12, 255, 179, 98, 10, 255, 177, 94, 4, 255, 176, 97, 5, 255, 177, 99, 7, 255, 174, 99, 5, 255, 179, 98, 5, 255, 177, 103, 13, 255, 157, 100, 19, 255, 153, 100, 20, 255, 163, 99, 11, 255, 163, 101, 17, 255, 157, 104, 12, 255, 162, 101, 18, 255, 161, 102, 14, 255, 158, 103, 12, 255, 167, 105, 21, 255, 163, 106, 18, 255, 163, 103, 18, 255, 166, 104, 17, 255, 162, 107, 23, 255, 173, 110, 14, 255, 178, 112, 12, 255, 178, 115, 5, 255, 177, 114, 10, 255, 179, 115, 10, 255, 181, 115, 1, 255, 183, 115, 12, 255, 186, 120, 14, 255, 193, 129, 13, 255, 197, 130, 9, 255, 199, 131, 7, 255, 198, 132, 10, 255, 189, 122, 14, 255, 183, 116, 19, 255, 179, 116, 9, 255, 188, 118, 10, 255, 196, 119, 19, 255, 183, 106, 13, 255, 190, 122, 14, 255, 189, 123, 16, 255, 182, 114, 20, 255, 172, 106, 17, 255, 170, 105, 16, 255, 175, 107, 10, 255, 177, 103, 10, 255, 178, 105, 10, 255, 177, 106, 5, 255, 174, 102, 7, 255, 175, 103, 6, 255, 174, 103, 6, 255, 171, 102, 5, 255, 170, 100, 4, 255, 170, 100, 6, 255, 173, 95, 2, 255, 175, 92, 1, 255, 177, 96, 5, 255, 176, 101, 7, 255, 174, 101, 6, 255, 175, 99, 6, 255, 181, 101, 4, 255, 176, 97, 3, 255, 176, 95, 13, 255, 185, 109, 18, 255, 184, 111, 9, 255, 179, 105, 7, 255, 183, 106, 13, 255, 184, 102, 13, 255, 184, 103, 11, 255, 177, 96, 7, 255, 177, 97, 5, 255, 181, 94, 3, 255, 190, 98, 4, 255, 190, 102, 4, 255, 201, 107, 5, 255, 199, 100, 2, 255, 166, 71, 11, 255, 113, 53, 5, 255, 114, 53, 7, 255, 119, 51, 3, 255, 119, 52, 7, 255, 119, 51, 1, 255, 120, 57, 2, 255, 124, 64, 8, 255, 121, 62, 9, 255, 120, 60, 5, 255, 131, 67, 4, 255, 137, 75, 9, 255, 138, 75, 7, 255, 145, 76, 8, 255, 151, 77, 6, 255, 159, 82, 8, 255, 166, 88, 13, 255, 168, 89, 11, 255, 168, 88, 6, 255, 161, 88, 5, 255, 160, 95, 10, 255, 155, 90, 8, 255, 156, 88, 9, 255, 159, 86, 10, 255, 160, 86, 10, 255, 163, 88, 11, 255, 161, 85, 6, 255, 159, 86, 7, 255, 155, 83, 6, 255, 157, 87, 2, 255, 159, 88, 8, 255, 154, 84, 14, 255, 152, 82, 11, 255, 152, 85, 6, 255, 147, 82, 9, 255, 143, 75, 9, 255, 146, 75, 7, 255, 143, 78, 10, 255, 140, 77, 6, 255, 140, 77, 7, 255, 138, 75, 9, 255, 135, 73, 8, 255, 132, 71, 11, 255, 133, 70, 10, 255, 128, 68, 11, 255, 123, 65, 8, 255, 124, 64, 3, 255, 121, 62, 5, 255, 115, 63, 11, 255, 110, 61, 10, 255, 109, 60, 9, 255, 106, 52, 1, 255, 106, 49, 5, 255, 102, 45, 12, 255, 84, 34, 6, 255, 68, 28, 0, 255, 81, 24, 4, 255, 82, 26, 3, 255, 7, 9, 8, 255, 6, 4, 3, 255, 2, 2, 9, 255, 0, 3, 9, 255, 1, 4, 11, 255, 2, 4, 11, 255, 3, 2, 11, 255, 0, 1, 8, 255, 0, 1, 5, 255, 0, 1, 2, 255, 1, 0, 0, 255, 3, 2, 4, 255, 0, 0, 4, 255, 3, 2, 10, 255, 2, 4, 11, 255, 2, 7, 11, 255, 2, 7, 11, 255, 1, 5, 10, 255, 1, 4, 9, 255, 3, 4, 11, 255, 1, 4, 12, 255, 2, 4, 14, 255, 2, 5, 13, 255, 1, 4, 10, 255, 0, 4, 7, 255, 1, 4, 7, 255, 3, 3, 8, 255, 1, 2, 6, 255, 1, 2, 6, 255, 1, 2, 6, 255, 0, 1, 5, 255, 0, 1, 5, 255, 1, 2, 8, 255, 1, 2, 7, 255, 1, 2, 6, 255, 1, 2, 6, 255, 1, 2, 6, 255, 1, 2, 6, 255, 0, 1, 5, 255, 0, 1, 5, 255, 1, 1, 3, 255, 1, 1, 3, 255, 1, 1, 3, 255, 1, 1, 3, 255, 1, 0, 2, 255, 4, 0, 2, 255, 4, 1, 1, 255, 0, 8, 9, 255, 7, 28, 55, 255, 3, 19, 49, 255, 3, 13, 23, 255, 4, 3, 4, 255, 0, 0, 0, 255, 7, 93, 160, 255, 7, 142, 202, 255, 0, 3, 9, 255, 6, 1, 25, 255, 2, 28, 198, 255, 0, 17, 71, 255, 4, 0, 0, 255, 5, 4, 3, 255, 3, 2, 0, 255, 2, 0, 5, 255, 2, 0, 5, 255, 2, 0, 1, 255, 2, 0, 1, 255, 3, 1, 2, 255, 3, 1, 2, 255, 2, 0, 1, 255, 0, 0, 0, 255, 1, 0, 1, 255, 2, 0, 1, 255, 2, 0, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 2, 2, 1, 255, 1, 1, 0, 255, 2, 2, 0, 255, 4, 3, 1, 255, 6, 4, 2, 255, 7, 3, 1, 255, 6, 4, 1, 255, 13, 12, 7, 255, 15, 16, 6, 255, 17, 20, 9, 255, 24, 31, 21, 255, 30, 43, 23, 255, 32, 50, 34, 255, 32, 57, 45, 255, 35, 69, 41, 255, 35, 72, 46, 255, 42, 76, 51, 255, 42, 82, 55, 255, 43, 83, 57, 255, 50, 84, 61, 255, 48, 87, 63, 255, 59, 106, 92, 255, 72, 137, 124, 255, 82, 155, 139, 255, 103, 171, 155, 255, 116, 183, 159, 255, 107, 174, 139, 255, 100, 160, 124, 255, 93, 150, 111, 255, 75, 130, 79, 255, 66, 109, 63, 255, 61, 88, 32, 255, 47, 62, 10, 255, 34, 42, 9, 255, 31, 34, 12, 255, 41, 33, 10, 255, 43, 33, 6, 255, 48, 43, 2, 255, 51, 43, 4, 255, 41, 33, 3, 255, 42, 38, 6, 255, 38, 31, 5, 255, 42, 32, 6, 255, 49, 33, 7, 255, 48, 33, 7, 255, 43, 33, 7, 255, 46, 35, 6, 255, 58, 33, 3, 255, 55, 39, 7, 255, 62, 45, 15, 255, 71, 42, 6, 255, 75, 45, 5, 255, 69, 47, 5, 255, 70, 49, 7, 255, 74, 51, 5, 255, 80, 53, 5, 255, 84, 51, 7, 255, 87, 51, 5, 255, 89, 55, 6, 255, 86, 53, 4, 255, 88, 56, 2, 255, 94, 59, 8, 255, 102, 63, 3, 255, 97, 61, 7, 255, 86, 49, 6, 255, 78, 45, 0, 255, 76, 47, 6, 255, 76, 43, 4, 255, 78, 51, 4, 255, 72, 45, 4, 255, 76, 40, 3, 255, 84, 45, 4, 255, 80, 45, 6, 255, 79, 44, 12, 255, 79, 47, 10, 255, 81, 50, 7, 255, 82, 49, 5, 255, 85, 48, 0, 255, 92, 51, 6, 255, 92, 55, 11, 255, 98, 60, 3, 255, 105, 66, 2, 255, 104, 64, 3, 255, 94, 58, 5, 255, 88, 57, 5, 255, 90, 56, 6, 255, 91, 53, 9, 255, 92, 50, 10, 255, 94, 50, 10, 255, 95, 52, 8, 255, 97, 54, 7, 255, 95, 53, 6, 255, 96, 52, 6, 255, 101, 53, 9, 255, 96, 51, 6, 255, 97, 50, 12, 255, 89, 48, 9, 255, 97, 56, 7, 255, 100, 55, 10, 255, 100, 53, 3, 255, 103, 55, 12, 255, 92, 48, 12, 255, 86, 49, 5, 255, 98, 52, 4, 255, 123, 58, 12, 255, 137, 57, 15, 255, 125, 57, 10, 255, 115, 55, 10, 255, 128, 58, 11, 255, 116, 52, 6, 255, 102, 42, 12, 255, 125, 54, 11, 255, 144, 62, 2, 255, 156, 71, 2, 255, 153, 68, 5, 255, 159, 69, 11, 255, 154, 70, 10, 255, 148, 70, 5, 255, 154, 64, 6, 255, 155, 67, 13, 255, 161, 69, 6, 255, 161, 68, 6, 255, 158, 71, 6, 255, 156, 68, 10, 255, 161, 70, 5, 255, 160, 75, 1, 255, 168, 75, 1, 255, 172, 76, 8, 255, 161, 78, 3, 255, 158, 80, 8, 255, 141, 73, 11, 255, 139, 67, 10, 255, 139, 62, 2, 255, 137, 66, 7, 255, 149, 78, 6, 255, 137, 75, 12, 255, 116, 68, 14, 255, 118, 67, 12, 255, 118, 72, 6, 255, 114, 70, 11, 255, 117, 67, 12, 255, 116, 70, 9, 255, 118, 69, 5, 255, 105, 71, 9, 255, 108, 66, 14, 255, 111, 69, 11, 255, 110, 73, 10, 255, 110, 67, 14, 255, 127, 71, 12, 255, 152, 81, 11, 255, 130, 72, 6, 255, 119, 74, 9, 255, 121, 71, 7, 255, 131, 76, 8, 255, 134, 75, 6, 255, 132, 78, 12, 255, 133, 78, 5, 255, 128, 75, 4, 255, 125, 77, 7, 255, 123, 78, 10, 255, 119, 74, 13, 255, 122, 77, 6, 255, 127, 80, 5, 255, 126, 80, 10, 255, 127, 76, 11, 255, 134, 76, 16, 255, 125, 74, 17, 255, 122, 74, 12, 255, 149, 86, 11, 255, 144, 79, 7, 255, 136, 78, 10, 255, 137, 83, 14, 255, 140, 84, 10, 255, 167, 87, 11, 255, 164, 83, 11, 255, 156, 79, 8, 255, 159, 87, 9, 255, 164, 89, 9, 255, 152, 85, 11, 255, 136, 88, 9, 255, 142, 93, 8, 255, 160, 95, 8, 255, 158, 94, 15, 255, 155, 92, 9, 255, 170, 92, 10, 255, 175, 95, 11, 255, 177, 104, 8, 255, 173, 98, 10, 255, 176, 96, 15, 255, 173, 106, 14, 255, 177, 107, 11, 255, 179, 105, 7, 255, 174, 106, 13, 255, 168, 99, 23, 255, 155, 101, 17, 255, 154, 97, 34, 255, 157, 101, 22, 255, 160, 102, 17, 255, 161, 101, 17, 255, 164, 102, 16, 255, 159, 102, 16, 255, 160, 104, 12, 255, 164, 105, 11, 255, 160, 106, 13, 255, 170, 106, 16, 255, 178, 110, 25, 255, 172, 108, 8, 255, 173, 108, 10, 255, 176, 112, 15, 255, 174, 112, 6, 255, 176, 114, 8, 255, 181, 118, 5, 255, 183, 116, 9, 255, 185, 120, 11, 255, 193, 128, 13, 255, 199, 133, 7, 255, 205, 134, 12, 255, 204, 132, 8, 255, 192, 119, 15, 255, 186, 112, 18, 255, 187, 117, 14, 255, 192, 122, 8, 255, 194, 127, 15, 255, 184, 117, 12, 255, 192, 122, 31, 255, 196, 128, 22, 255, 182, 119, 10, 255, 173, 106, 16, 255, 173, 105, 12, 255, 178, 106, 8, 255, 179, 107, 8, 255, 180, 110, 6, 255, 179, 108, 8, 255, 179, 105, 4, 255, 175, 104, 2, 255, 175, 102, 2, 255, 176, 103, 2, 255, 175, 101, 2, 255, 175, 99, 2, 255, 173, 99, 6, 255, 174, 95, 6, 255, 176, 95, 7, 255, 174, 99, 7, 255, 174, 100, 5, 255, 178, 100, 4, 255, 182, 102, 4, 255, 180, 103, 0, 255, 180, 101, 10, 255, 184, 107, 16, 255, 184, 109, 9, 255, 181, 104, 11, 255, 182, 105, 7, 255, 186, 106, 13, 255, 183, 105, 7, 255, 180, 99, 2, 255, 182, 96, 2, 255, 180, 84, 2, 255, 184, 83, 2, 255, 190, 86, 1, 255, 186, 92, 2, 255, 194, 90, 10, 255, 159, 65, 7, 255, 112, 48, 8, 255, 115, 52, 4, 255, 113, 53, 4, 255, 108, 54, 4, 255, 115, 56, 7, 255, 119, 59, 7, 255, 118, 57, 7, 255, 127, 65, 12, 255, 131, 67, 6, 255, 135, 66, 4, 255, 133, 67, 0, 255, 143, 78, 3, 255, 152, 82, 5, 255, 156, 79, 5, 255, 161, 82, 13, 255, 160, 81, 10, 255, 162, 83, 9, 255, 164, 85, 7, 255, 159, 84, 2, 255, 156, 88, 8, 255, 154, 87, 9, 255, 157, 89, 8, 255, 160, 89, 5, 255, 159, 87, 7, 255, 161, 86, 8, 255, 156, 82, 4, 255, 155, 82, 7, 255, 153, 81, 11, 255, 152, 81, 8, 255, 152, 80, 5, 255, 152, 79, 6, 255, 151, 81, 10, 255, 147, 79, 6, 255, 146, 78, 6, 255, 142, 75, 6, 255, 140, 75, 5, 255, 142, 77, 9, 255, 141, 75, 12, 255, 142, 78, 13, 255, 136, 74, 10, 255, 129, 71, 13, 255, 129, 67, 12, 255, 128, 63, 5, 255, 122, 62, 2, 255, 122, 68, 4, 255, 122, 66, 2, 255, 116, 62, 7, 255, 109, 59, 9, 255, 103, 54, 5, 255, 102, 50, 6, 255, 100, 47, 5, 255, 100, 44, 4, 255, 97, 41, 3, 255, 85, 34, 2, 255, 67, 20, 6, 255, 60, 14, 1, 255, 57, 21, 5, 255, 11, 16, 11, 255, 3, 1, 0, 255, 4, 4, 6, 255, 2, 2, 11, 255, 1, 2, 13, 255, 0, 7, 10, 255, 0, 2, 5, 255, 0, 3, 5, 255, 3, 4, 7, 255, 1, 2, 5, 255, 0, 0, 4, 255, 1, 0, 5, 255, 1, 0, 5, 255, 0, 1, 6, 255, 1, 2, 7, 255, 2, 4, 8, 255, 2, 5, 8, 255, 2, 5, 9, 255, 2, 6, 11, 255, 0, 4, 9, 255, 1, 4, 12, 255, 1, 5, 15, 255, 2, 6, 14, 255, 1, 5, 10, 255, 3, 6, 10, 255, 3, 6, 11, 255, 0, 3, 8, 255, 0, 2, 6, 255, 0, 3, 6, 255, 1, 2, 6, 255, 2, 3, 7, 255, 3, 4, 8, 255, 2, 3, 7, 255, 1, 2, 5, 255, 0, 0, 4, 255, 0, 1, 4, 255, 1, 1, 6, 255, 1, 2, 7, 255, 2, 1, 6, 255, 1, 0, 5, 255, 1, 0, 5, 255, 2, 1, 4, 255, 1, 1, 3, 255, 1, 1, 2, 255, 0, 1, 3, 255, 3, 1, 5, 255, 3, 0, 0, 255, 4, 27, 62, 255, 7, 45, 78, 255, 3, 30, 52, 255, 5, 28, 48, 255, 7, 13, 27, 255, 7, 25, 78, 255, 5, 164, 254, 255, 2, 60, 81, 255, 7, 0, 0, 255, 8, 17, 132, 255, 5, 22, 138, 255, 6, 2, 0, 255, 6, 5, 2, 255, 3, 2, 4, 255, 5, 0, 3, 255, 2, 1, 3, 255, 2, 2, 1, 255, 3, 1, 2, 255, 2, 0, 1, 255, 2, 0, 1, 255, 2, 0, 1, 255, 2, 1, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 2, 2, 2, 255, 0, 2, 1, 255, 1, 1, 1, 255, 1, 1, 0, 255, 3, 2, 0, 255, 3, 3, 1, 255, 2, 1, 0, 255, 4, 3, 1, 255, 3, 3, 0, 255, 7, 4, 0, 255, 10, 6, 3, 255, 11, 10, 5, 255, 16, 16, 8, 255, 19, 22, 12, 255, 24, 30, 19, 255, 28, 40, 22, 255, 29, 50, 23, 255, 32, 58, 36, 255, 33, 64, 48, 255, 35, 70, 49, 255, 39, 71, 50, 255, 44, 71, 51, 255, 43, 76, 53, 255, 41, 78, 55, 255, 46, 81, 63, 255, 46, 92, 73, 255, 62, 118, 100, 255, 75, 147, 126, 255, 90, 162, 138, 255, 110, 171, 146, 255, 111, 172, 140, 255, 98, 160, 124, 255, 96, 151, 114, 255, 85, 138, 90, 255, 74, 122, 70, 255, 64, 100, 53, 255, 58, 80, 30, 255, 50, 62, 10, 255, 41, 46, 6, 255, 36, 36, 14, 255, 31, 34, 5, 255, 49, 42, 8, 255, 56, 39, 8, 255, 44, 37, 1, 255, 47, 41, 6, 255, 46, 30, 8, 255, 48, 32, 2, 255, 50, 36, 2, 255, 47, 38, 9, 255, 46, 34, 6, 255, 52, 32, 1, 255, 55, 36, 6, 255, 57, 36, 4, 255, 55, 40, 2, 255, 62, 42, 4, 255, 68, 40, 1, 255, 70, 41, 7, 255, 77, 49, 7, 255, 74, 51, 2, 255, 72, 50, 4, 255, 79, 50, 4, 255, 85, 51, 3, 255, 88, 51, 6, 255, 88, 53, 7, 255, 87, 56, 4, 255, 88, 57, 2, 255, 92, 56, 9, 255, 95, 58, 8, 255, 76, 49, 8, 255, 71, 44, 7, 255, 76, 46, 5, 255, 72, 43, 7, 255, 81, 41, 12, 255, 80, 42, 12, 255, 70, 48, 3, 255, 73, 47, 1, 255, 82, 47, 5, 255, 81, 47, 3, 255, 79, 45, 7, 255, 77, 44, 5, 255, 83, 50, 5, 255, 89, 53, 10, 255, 95, 54, 7, 255, 95, 51, 9, 255, 91, 53, 10, 255, 95, 57, 8, 255, 103, 63, 3, 255, 106, 64, 8, 255, 96, 59, 3, 255, 90, 60, 4, 255, 92, 55, 5, 255, 94, 53, 5, 255, 96, 54, 12, 255, 96, 51, 12, 255, 97, 50, 9, 255, 98, 51, 9, 255, 98, 51, 9, 255, 96, 52, 6, 255, 101, 52, 16, 255, 104, 53, 14, 255, 97, 55, 10, 255, 97, 53, 12, 255, 101, 56, 14, 255, 103, 54, 2, 255, 104, 51, 10, 255, 98, 51, 12, 255, 93, 53, 7, 255, 91, 53, 2, 255, 104, 56, 8, 255, 116, 56, 4, 255, 126, 58, 3, 255, 124, 56, 1, 255, 116, 53, 1, 255, 115, 55, 5, 255, 115, 52, 11, 255, 133, 59, 11, 255, 129, 59, 7, 255, 148, 68, 6, 255, 144, 66, 3, 255, 141, 64, 16, 255, 148, 66, 9, 255, 138, 61, 4, 255, 135, 59, 6, 255, 145, 62, 5, 255, 165, 71, 6, 255, 157, 73, 1, 255, 155, 72, 1, 255, 161, 73, 6, 255, 159, 71, 5, 255, 155, 75, 5, 255, 155, 72, 6, 255, 158, 73, 7, 255, 145, 68, 3, 255, 136, 63, 6, 255, 159, 70, 12, 255, 172, 78, 10, 255, 169, 80, 7, 255, 150, 80, 11, 255, 113, 66, 5, 255, 128, 64, 15, 255, 151, 77, 10, 255, 133, 70, 13, 255, 134, 71, 4, 255, 134, 72, 5, 255, 129, 70, 9, 255, 129, 72, 6, 255, 114, 67, 14, 255, 114, 71, 6, 255, 111, 71, 6, 255, 115, 68, 8, 255, 116, 69, 3, 255, 108, 68, 6, 255, 112, 71, 6, 255, 130, 73, 4, 255, 144, 78, 10, 255, 137, 76, 6, 255, 133, 77, 9, 255, 131, 71, 11, 255, 144, 76, 9, 255, 139, 75, 1, 255, 131, 78, 13, 255, 134, 82, 11, 255, 134, 79, 6, 255, 131, 79, 4, 255, 124, 76, 9, 255, 120, 75, 16, 255, 123, 77, 21, 255, 124, 76, 6, 255, 127, 82, 10, 255, 125, 74, 6, 255, 124, 78, 8, 255, 126, 80, 10, 255, 131, 76, 12, 255, 129, 79, 13, 255, 124, 78, 16, 255, 133, 82, 12, 255, 133, 78, 5, 255, 136, 79, 14, 255, 155, 88, 15, 255, 134, 80, 11, 255, 130, 84, 9, 255, 158, 87, 12, 255, 157, 89, 11, 255, 143, 87, 12, 255, 139, 91, 12, 255, 145, 92, 5, 255, 152, 95, 6, 255, 153, 92, 18, 255, 161, 89, 12, 255, 172, 92, 15, 255, 177, 93, 14, 255, 180, 94, 4, 255, 183, 95, 12, 255, 176, 100, 11, 255, 178, 106, 13, 255, 183, 106, 10, 255, 178, 102, 8, 255, 173, 100, 12, 255, 180, 104, 13, 255, 166, 100, 10, 255, 161, 105, 13, 255, 160, 106, 16, 255, 159, 102, 16, 255, 158, 104, 14, 255, 162, 108, 14, 255, 162, 104, 17, 255, 177, 110, 12, 255, 178, 107, 7, 255, 165, 104, 14, 255, 179, 110, 20, 255, 174, 106, 15, 255, 168, 107, 12, 255, 168, 109, 10, 255, 171, 113, 14, 255, 173, 118, 13, 255, 171, 112, 13, 255, 177, 118, 8, 255, 181, 123, 9, 255, 185, 124, 7, 255, 194, 130, 2, 255, 205, 138, 6, 255, 207, 139, 3, 255, 196, 122, 12, 255, 187, 113, 9, 255, 187, 113, 8, 255, 189, 119, 9, 255, 195, 124, 7, 255, 197, 127, 13, 255, 199, 130, 20, 255, 196, 122, 17, 255, 191, 115, 17, 255, 192, 113, 11, 255, 184, 106, 11, 255, 182, 109, 5, 255, 181, 108, 10, 255, 181, 104, 8, 255, 187, 105, 2, 255, 187, 100, 5, 255, 183, 97, 4, 255, 182, 99, 5, 255, 179, 102, 5, 255, 178, 103, 6, 255, 176, 101, 6, 255, 177, 101, 6, 255, 173, 99, 4, 255, 173, 98, 5, 255, 174, 97, 7, 255, 175, 97, 6, 255, 179, 100, 7, 255, 180, 102, 6, 255, 182, 102, 5, 255, 184, 103, 4, 255, 184, 103, 12, 255, 186, 104, 15, 255, 187, 105, 16, 255, 185, 104, 15, 255, 185, 103, 10, 255, 182, 103, 6, 255, 181, 102, 5, 255, 185, 103, 5, 255, 184, 93, 2, 255, 176, 77, 2, 255, 177, 77, 1, 255, 185, 86, 3, 255, 191, 89, 2, 255, 194, 89, 7, 255, 143, 68, 9, 255, 113, 54, 8, 255, 118, 51, 7, 255, 105, 47, 7, 255, 118, 53, 8, 255, 123, 59, 3, 255, 123, 60, 6, 255, 123, 62, 5, 255, 128, 68, 4, 255, 132, 71, 6, 255, 136, 71, 8, 255, 130, 66, 4, 255, 135, 70, 7, 255, 146, 77, 10, 255, 150, 75, 3, 255, 159, 82, 3, 255, 161, 86, 8, 255, 159, 83, 10, 255, 158, 79, 3, 255, 156, 79, 0, 255, 147, 75, 2, 255, 139, 70, 3, 255, 143, 74, 3, 255, 151, 80, 3, 255, 156, 83, 8, 255, 159, 87, 6, 255, 158, 87, 2, 255, 154, 84, 3, 255, 150, 81, 8, 255, 147, 78, 10, 255, 148, 79, 11, 255, 147, 78, 4, 255, 146, 78, 3, 255, 147, 78, 10, 255, 149, 79, 10, 255, 143, 77, 3, 255, 136, 72, 3, 255, 133, 71, 5, 255, 135, 70, 11, 255, 136, 73, 10, 255, 130, 69, 6, 255, 126, 67, 12, 255, 124, 65, 9, 255, 124, 65, 6, 255, 116, 65, 4, 255, 114, 65, 4, 255, 116, 59, 2, 255, 116, 55, 7, 255, 106, 51, 3, 255, 105, 51, 2, 255, 103, 49, 7, 255, 95, 41, 3, 255, 92, 41, 4, 255, 89, 42, 4, 255, 80, 33, 4, 255, 65, 21, 5, 255, 45, 14, 1, 255, 34, 10, 0, 255, 13, 50, 46, 255, 12, 23, 64, 255, 8, 10, 18, 255, 3, 5, 3, 255, 2, 5, 19, 255, 4, 3, 19, 255, 0, 2, 4, 255, 2, 3, 7, 255, 2, 3, 9, 255, 2, 3, 10, 255, 3, 4, 10, 255, 1, 1, 4, 255, 1, 2, 3, 255, 1, 2, 4, 255, 0, 0, 3, 255, 0, 0, 3, 255, 1, 1, 4, 255, 1, 4, 7, 255, 1, 7, 10, 255, 2, 5, 10, 255, 2, 5, 12, 255, 2, 7, 12, 255, 1, 7, 8, 255, 0, 3, 7, 255, 1, 3, 14, 255, 3, 5, 17, 255, 1, 4, 11, 255, 1, 3, 9, 255, 1, 5, 8, 255, 2, 3, 7, 255, 1, 2, 6, 255, 2, 3, 7, 255, 1, 1, 2, 255, 1, 1, 2, 255, 2, 2, 2, 255, 2, 2, 2, 255, 1, 0, 4, 255, 3, 2, 5, 255, 2, 1, 6, 255, 1, 0, 5, 255, 1, 0, 5, 255, 1, 0, 4, 255, 0, 0, 2, 255, 0, 0, 0, 255, 1, 2, 1, 255, 2, 0, 0, 255, 7, 10, 31, 255, 4, 55, 105, 255, 9, 52, 82, 255, 4, 46, 81, 255, 5, 41, 70, 255, 3, 11, 59, 255, 6, 109, 202, 255, 5, 155, 183, 255, 3, 0, 0, 255, 10, 3, 42, 255, 1, 29, 187, 255, 10, 9, 22, 255, 9, 2, 0, 255, 2, 3, 3, 255, 5, 0, 1, 255, 0, 1, 3, 255, 2, 2, 1, 255, 4, 1, 3, 255, 2, 0, 1, 255, 2, 1, 1, 255, 2, 2, 1, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 0, 1, 255, 2, 1, 2, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 1, 1, 255, 2, 3, 2, 255, 1, 3, 2, 255, 2, 3, 2, 255, 3, 1, 2, 255, 3, 1, 0, 255, 5, 2, 1, 255, 6, 3, 2, 255, 6, 4, 1, 255, 6, 4, 1, 255, 9, 7, 3, 255, 14, 11, 7, 255, 17, 17, 11, 255, 22, 24, 16, 255, 25, 30, 17, 255, 27, 39, 18, 255, 25, 43, 20, 255, 30, 52, 36, 255, 33, 61, 36, 255, 34, 65, 35, 255, 38, 66, 48, 255, 43, 69, 46, 255, 47, 65, 42, 255, 44, 72, 45, 255, 41, 72, 47, 255, 46, 82, 61, 255, 52, 109, 86, 255, 75, 132, 114, 255, 82, 150, 129, 255, 96, 165, 136, 255, 116, 168, 136, 255, 108, 161, 119, 255, 90, 152, 102, 255, 84, 143, 91, 255, 79, 129, 78, 255, 77, 114, 68, 255, 66, 96, 42, 255, 56, 81, 23, 255, 46, 62, 6, 255, 43, 43, 14, 255, 39, 36, 6, 255, 41, 34, 6, 255, 47, 37, 7, 255, 48, 40, 5, 255, 50, 36, 4, 255, 54, 36, 5, 255, 53, 33, 5, 255, 50, 32, 4, 255, 51, 36, 7, 255, 46, 31, 3, 255, 48, 33, 10, 255, 45, 34, 7, 255, 51, 39, 6, 255, 58, 39, 6, 255, 57, 42, 6, 255, 61, 41, 1, 255, 72, 49, 3, 255, 67, 46, 5, 255, 74, 47, 2, 255, 83, 53, 3, 255, 80, 54, 4, 255, 81, 53, 2, 255, 89, 57, 9, 255, 88, 54, 7, 255, 86, 52, 4, 255, 89, 57, 6, 255, 92, 55, 2, 255, 94, 52, 6, 255, 81, 48, 3, 255, 68, 46, 9, 255, 78, 47, 15, 255, 74, 44, 11, 255, 67, 43, 3, 255, 80, 47, 4, 255, 83, 46, 3, 255, 79, 47, 5, 255, 78, 49, 8, 255, 79, 49, 5, 255, 77, 46, 2, 255, 80, 43, 3, 255, 87, 46, 9, 255, 91, 46, 6, 255, 97, 53, 4, 255, 97, 54, 8, 255, 91, 51, 4, 255, 94, 56, 10, 255, 98, 57, 9, 255, 105, 60, 10, 255, 106, 62, 6, 255, 100, 60, 6, 255, 89, 57, 7, 255, 91, 54, 8, 255, 93, 54, 11, 255, 94, 55, 13, 255, 92, 53, 8, 255, 94, 55, 5, 255, 98, 57, 7, 255, 101, 56, 7, 255, 108, 57, 8, 255, 110, 54, 8, 255, 106, 54, 9, 255, 101, 57, 6, 255, 98, 57, 5, 255, 104, 58, 9, 255, 103, 57, 3, 255, 95, 55, 7, 255, 94, 54, 5, 255, 99, 59, 5, 255, 97, 56, 11, 255, 99, 54, 12, 255, 111, 54, 13, 255, 122, 56, 12, 255, 108, 55, 7, 255, 89, 47, 8, 255, 101, 57, 7, 255, 116, 59, 12, 255, 139, 64, 7, 255, 135, 55, 8, 255, 136, 59, 5, 255, 127, 60, 6, 255, 108, 52, 7, 255, 102, 47, 6, 255, 106, 50, 8, 255, 117, 60, 5, 255, 138, 65, 5, 255, 151, 65, 5, 255, 147, 65, 5, 255, 148, 68, 6, 255, 146, 64, 10, 255, 139, 60, 5, 255, 152, 62, 2, 255, 163, 71, 9, 255, 157, 72, 7, 255, 157, 72, 4, 255, 159, 73, 7, 255, 145, 66, 3, 255, 134, 59, 7, 255, 154, 73, 4, 255, 173, 81, 8, 255, 167, 78, 6, 255, 154, 71, 13, 255, 137, 66, 7, 255, 114, 59, 24, 255, 118, 62, 17, 255, 136, 68, 10, 255, 150, 77, 4, 255, 152, 76, 4, 255, 133, 73, 10, 255, 119, 68, 8, 255, 127, 69, 12, 255, 127, 70, 16, 255, 123, 70, 12, 255, 119, 75, 7, 255, 120, 76, 10, 255, 126, 73, 13, 255, 129, 74, 10, 255, 149, 79, 17, 255, 141, 76, 3, 255, 127, 78, 3, 255, 134, 77, 6, 255, 140, 76, 4, 255, 152, 82, 15, 255, 152, 80, 8, 255, 137, 76, 10, 255, 127, 76, 22, 255, 123, 77, 14, 255, 123, 78, 6, 255, 126, 79, 8, 255, 127, 81, 11, 255, 126, 80, 12, 255, 125, 77, 12, 255, 139, 80, 16, 255, 153, 84, 14, 255, 135, 83, 12, 255, 124, 81, 15, 255, 131, 81, 10, 255, 131, 82, 19, 255, 125, 85, 2, 255, 131, 86, 9, 255, 133, 81, 17, 255, 125, 82, 7, 255, 132, 86, 11, 255, 144, 86, 12, 255, 140, 88, 6, 255, 144, 89, 9, 255, 145, 93, 13, 255, 143, 93, 14, 255, 142, 90, 14, 255, 147, 91, 14, 255, 151, 93, 9, 255, 157, 98, 12, 255, 171, 99, 17, 255, 176, 93, 13, 255, 177, 100, 18, 255, 174, 104, 11, 255, 185, 102, 9, 255, 182, 98, 6, 255, 173, 95, 10, 255, 176, 98, 13, 255, 179, 104, 7, 255, 172, 101, 10, 255, 166, 105, 9, 255, 161, 103, 16, 255, 161, 104, 19, 255, 162, 107, 14, 255, 164, 106, 16, 255, 160, 104, 8, 255, 169, 107, 13, 255, 174, 108, 22, 255, 174, 110, 12, 255, 176, 108, 14, 255, 170, 107, 20, 255, 166, 110, 7, 255, 167, 108, 14, 255, 172, 112, 13, 255, 176, 115, 8, 255, 177, 116, 8, 255, 178, 115, 15, 255, 179, 119, 14, 255, 188, 123, 15, 255, 194, 124, 13, 255, 204, 135, 5, 255, 205, 134, 6, 255, 198, 126, 7, 255, 196, 124, 16, 255, 188, 121, 15, 255, 186, 122, 12, 255, 194, 117, 8, 255, 196, 115, 14, 255, 195, 112, 11, 255, 196, 110, 5, 255, 195, 114, 12, 255, 188, 108, 11, 255, 185, 106, 7, 255, 185, 110, 10, 255, 180, 108, 9, 255, 181, 107, 3, 255, 189, 110, 4, 255, 186, 102, 6, 255, 179, 97, 5, 255, 179, 100, 6, 255, 178, 104, 7, 255, 174, 103, 6, 255, 174, 102, 6, 255, 174, 101, 6, 255, 178, 102, 3, 255, 176, 104, 2, 255, 174, 102, 2, 255, 178, 99, 5, 255, 183, 102, 9, 255, 181, 104, 9, 255, 178, 103, 7, 255, 179, 104, 2, 255, 181, 106, 5, 255, 184, 108, 12, 255, 185, 107, 17, 255, 184, 104, 14, 255, 184, 104, 4, 255, 183, 104, 7, 255, 183, 103, 12, 255, 180, 95, 6, 255, 175, 85, 2, 255, 175, 80, 5, 255, 176, 84, 3, 255, 180, 87, 3, 255, 190, 84, 9, 255, 164, 71, 4, 255, 127, 63, 8, 255, 112, 55, 2, 255, 110, 49, 4, 255, 103, 52, 12, 255, 120, 62, 8, 255, 127, 64, 3, 255, 133, 66, 6, 255, 138, 67, 12, 255, 145, 70, 9, 255, 157, 80, 4, 255, 163, 85, 6, 255, 150, 75, 2, 255, 146, 74, 7, 255, 154, 81, 16, 255, 155, 81, 13, 255, 160, 86, 11, 255, 161, 91, 6, 255, 163, 90, 10, 255, 156, 78, 8, 255, 150, 71, 4, 255, 137, 59, 1, 255, 132, 60, 3, 255, 139, 70, 1, 255, 151, 78, 5, 255, 152, 78, 12, 255, 149, 76, 9, 255, 150, 78, 5, 255, 149, 80, 5, 255, 148, 80, 8, 255, 144, 76, 9, 255, 143, 75, 5, 255, 140, 76, 3, 255, 142, 79, 5, 255, 142, 77, 4, 255, 144, 76, 6, 255, 143, 74, 5, 255, 139, 72, 3, 255, 132, 71, 7, 255, 127, 67, 10, 255, 128, 69, 6, 255, 129, 67, 2, 255, 129, 65, 11, 255, 124, 65, 8, 255, 125, 63, 7, 255, 117, 57, 10, 255, 107, 52, 6, 255, 105, 50, 1, 255, 102, 51, 1, 255, 96, 48, 3, 255, 93, 43, 3, 255, 92, 41, 5, 255, 90, 40, 3, 255, 88, 39, 2, 255, 85, 37, 2, 255, 82, 34, 5, 255, 64, 23, 3, 255, 51, 18, 1, 255, 52, 16, 4, 255, 55, 165, 219, 255, 13, 57, 84, 255, 3, 0, 0, 255, 7, 3, 8, 255, 3, 6, 7, 255, 2, 2, 11, 255, 2, 1, 6, 255, 2, 1, 12, 255, 3, 1, 7, 255, 1, 3, 4, 255, 2, 3, 8, 255, 2, 2, 10, 255, 0, 1, 6, 255, 0, 0, 5, 255, 0, 0, 3, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 3, 255, 1, 0, 6, 255, 1, 4, 6, 255, 1, 5, 8, 255, 1, 5, 8, 255, 0, 4, 8, 255, 1, 5, 9, 255, 2, 7, 12, 255, 2, 7, 13, 255, 1, 5, 12, 255, 0, 4, 12, 255, 2, 5, 12, 255, 2, 5, 12, 255, 0, 1, 7, 255, 1, 2, 6, 255, 1, 1, 3, 255, 0, 0, 3, 255, 1, 1, 5, 255, 2, 3, 6, 255, 0, 1, 3, 255, 0, 2, 3, 255, 1, 1, 2, 255, 0, 0, 5, 255, 0, 1, 3, 255, 0, 1, 2, 255, 1, 2, 6, 255, 0, 1, 3, 255, 2, 0, 3, 255, 0, 0, 10, 255, 13, 55, 99, 255, 12, 82, 118, 255, 12, 65, 94, 255, 7, 57, 91, 255, 9, 46, 74, 255, 4, 23, 135, 255, 0, 196, 242, 255, 2, 35, 76, 255, 13, 0, 0, 255, 8, 23, 155, 255, 5, 28, 112, 255, 12, 1, 0, 255, 6, 5, 5, 255, 5, 3, 2, 255, 8, 2, 0, 255, 6, 1, 2, 255, 3, 2, 2, 255, 0, 0, 2, 255, 4, 1, 2, 255, 3, 1, 2, 255, 2, 0, 1, 255, 1, 0, 0, 255, 2, 0, 1, 255, 2, 0, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 2, 2, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 0, 0, 255, 3, 1, 2, 255, 2, 2, 1, 255, 2, 2, 0, 255, 3, 0, 0, 255, 5, 2, 3, 255, 8, 3, 4, 255, 5, 1, 1, 255, 8, 7, 3, 255, 6, 6, 1, 255, 11, 10, 8, 255, 19, 18, 11, 255, 20, 24, 6, 255, 22, 29, 12, 255, 25, 35, 19, 255, 32, 44, 20, 255, 36, 45, 30, 255, 37, 54, 38, 255, 33, 57, 28, 255, 36, 60, 30, 255, 33, 64, 36, 255, 36, 66, 49, 255, 40, 60, 33, 255, 44, 65, 33, 255, 41, 78, 46, 255, 46, 95, 72, 255, 64, 112, 91, 255, 86, 137, 115, 255, 90, 151, 125, 255, 98, 161, 131, 255, 107, 164, 125, 255, 97, 150, 98, 255, 90, 142, 91, 255, 81, 131, 85, 255, 75, 122, 71, 255, 69, 105, 61, 255, 68, 100, 30, 255, 56, 80, 23, 255, 44, 57, 17, 255, 38, 40, 14, 255, 35, 36, 12, 255, 46, 35, 5, 255, 51, 36, 6, 255, 45, 35, 6, 255, 46, 36, 4, 255, 53, 36, 7, 255, 57, 33, 6, 255, 53, 35, 6, 255, 50, 33, 9, 255, 53, 35, 11, 255, 46, 33, 6, 255, 47, 37, 4, 255, 59, 44, 10, 255, 61, 38, 7, 255, 61, 40, 7, 255, 64, 43, 1, 255, 70, 48, 4, 255, 72, 44, 7, 255, 78, 49, 6, 255, 86, 57, 6, 255, 82, 54, 2, 255, 80, 53, 3, 255, 84, 56, 6, 255, 84, 54, 2, 255, 85, 53, 0, 255, 88, 57, 4, 255, 88, 54, 6, 255, 85, 46, 3, 255, 80, 46, 5, 255, 77, 44, 8, 255, 82, 45, 4, 255, 79, 45, 8, 255, 75, 45, 6, 255, 73, 42, 2, 255, 78, 48, 8, 255, 77, 45, 9, 255, 75, 42, 5, 255, 77, 44, 4, 255, 81, 47, 8, 255, 84, 45, 6, 255, 91, 52, 7, 255, 92, 52, 5, 255, 93, 54, 2, 255, 92, 54, 2, 255, 91, 56, 1, 255, 90, 58, 5, 255, 96, 58, 7, 255, 103, 60, 3, 255, 108, 62, 4, 255, 102, 62, 3, 255, 94, 60, 3, 255, 93, 55, 5, 255, 96, 55, 5, 255, 93, 54, 11, 255, 95, 54, 10, 255, 100, 55, 5, 255, 100, 56, 9, 255, 97, 56, 5, 255, 100, 56, 7, 255, 106, 57, 7, 255, 100, 55, 6, 255, 99, 56, 4, 255, 98, 56, 5, 255, 98, 60, 9, 255, 104, 57, 9, 255, 105, 60, 9, 255, 100, 54, 4, 255, 102, 55, 5, 255, 98, 53, 4, 255, 98, 55, 5, 255, 102, 52, 10, 255, 97, 52, 12, 255, 84, 49, 14, 255, 97, 48, 7, 255, 127, 70, 11, 255, 135, 71, 5, 255, 141, 67, 8, 255, 114, 47, 9, 255, 89, 50, 7, 255, 82, 57, 5, 255, 100, 52, 5, 255, 109, 52, 6, 255, 126, 64, 10, 255, 140, 65, 6, 255, 142, 65, 2, 255, 148, 69, 3, 255, 159, 68, 4, 255, 161, 73, 8, 255, 144, 65, 14, 255, 136, 61, 6, 255, 137, 60, 6, 255, 134, 58, 8, 255, 138, 61, 10, 255, 149, 60, 17, 255, 156, 68, 4, 255, 153, 69, 5, 255, 154, 69, 11, 255, 157, 73, 4, 255, 157, 71, 7, 255, 159, 73, 6, 255, 166, 78, 9, 255, 175, 81, 9, 255, 159, 77, 5, 255, 123, 68, 14, 255, 129, 67, 17, 255, 146, 70, 3, 255, 142, 72, 7, 255, 147, 74, 17, 255, 137, 72, 8, 255, 144, 74, 5, 255, 150, 74, 14, 255, 117, 72, 12, 255, 116, 75, 8, 255, 122, 68, 16, 255, 120, 70, 16, 255, 140, 72, 7, 255, 144, 75, 10, 255, 130, 75, 2, 255, 140, 82, 8, 255, 150, 81, 8, 255, 161, 82, 4, 255, 159, 85, 3, 255, 154, 82, 2, 255, 135, 76, 10, 255, 127, 77, 24, 255, 129, 78, 15, 255, 132, 79, 4, 255, 124, 79, 8, 255, 124, 81, 13, 255, 150, 82, 9, 255, 139, 80, 15, 255, 150, 76, 13, 255, 163, 80, 9, 255, 132, 78, 15, 255, 129, 82, 3, 255, 132, 80, 6, 255, 131, 82, 6, 255, 125, 81, 9, 255, 141, 88, 14, 255, 157, 89, 12, 255, 159, 91, 12, 255, 138, 86, 11, 255, 139, 83, 15, 255, 137, 86, 12, 255, 136, 90, 12, 255, 145, 93, 10, 255, 162, 91, 18, 255, 170, 92, 15, 255, 160, 93, 14, 255, 146, 95, 10, 255, 152, 101, 13, 255, 165, 103, 17, 255, 162, 98, 15, 255, 162, 103, 18, 255, 173, 106, 14, 255, 182, 103, 7, 255, 183, 105, 17, 255, 183, 108, 14, 255, 183, 106, 9, 255, 170, 101, 15, 255, 163, 101, 12, 255, 162, 104, 13, 255, 155, 100, 15, 255, 158, 102, 25, 255, 162, 107, 6, 255, 166, 104, 12, 255, 166, 107, 15, 255, 163, 107, 11, 255, 170, 106, 12, 255, 178, 110, 12, 255, 171, 108, 7, 255, 167, 108, 11, 255, 167, 110, 11, 255, 172, 110, 5, 255, 176, 112, 11, 255, 173, 109, 10, 255, 175, 112, 17, 255, 181, 117, 12, 255, 187, 123, 14, 255, 192, 120, 10, 255, 182, 102, 11, 255, 202, 130, 8, 255, 206, 137, 12, 255, 202, 134, 2, 255, 198, 129, 4, 255, 194, 124, 13, 255, 188, 119, 7, 255, 189, 117, 1, 255, 198, 124, 9, 255, 187, 109, 20, 255, 193, 115, 22, 255, 193, 116, 12, 255, 184, 108, 13, 255, 187, 107, 5, 255, 185, 100, 7, 255, 183, 108, 9, 255, 180, 113, 1, 255, 183, 109, 4, 255, 189, 112, 5, 255, 182, 110, 3, 255, 178, 106, 0, 255, 179, 107, 3, 255, 179, 106, 4, 255, 177, 104, 2, 255, 177, 103, 2, 255, 182, 104, 5, 255, 177, 100, 2, 255, 177, 99, 4, 255, 181, 102, 8, 255, 181, 103, 7, 255, 181, 104, 6, 255, 181, 105, 3, 255, 182, 103, 1, 255, 184, 105, 11, 255, 182, 110, 14, 255, 184, 108, 10, 255, 186, 101, 8, 255, 182, 100, 5, 255, 180, 103, 4, 255, 183, 101, 7, 255, 180, 89, 5, 255, 163, 77, 6, 255, 162, 77, 15, 255, 185, 94, 9, 255, 172, 81, 5, 255, 150, 74, 6, 255, 140, 72, 9, 255, 124, 65, 5, 255, 100, 44, 2, 255, 109, 50, 12, 255, 128, 73, 13, 255, 126, 67, 4, 255, 122, 64, 0, 255, 133, 69, 1, 255, 152, 79, 5, 255, 168, 89, 11, 255, 171, 92, 13, 255, 167, 88, 11, 255, 164, 86, 9, 255, 161, 83, 9, 255, 165, 84, 10, 255, 171, 91, 9, 255, 169, 94, 10, 255, 166, 92, 6, 255, 168, 93, 9, 255, 163, 91, 12, 255, 160, 83, 6, 255, 158, 75, 14, 255, 140, 67, 4, 255, 136, 65, 0, 255, 140, 68, 8, 255, 143, 71, 9, 255, 142, 76, 5, 255, 144, 77, 7, 255, 144, 75, 4, 255, 143, 76, 10, 255, 139, 74, 9, 255, 140, 75, 2, 255, 140, 75, 0, 255, 139, 76, 5, 255, 136, 72, 7, 255, 136, 72, 9, 255, 135, 69, 8, 255, 133, 74, 9, 255, 127, 74, 7, 255, 128, 69, 3, 255, 125, 65, 6, 255, 129, 65, 11, 255, 125, 64, 3, 255, 119, 60, 3, 255, 115, 57, 1, 255, 112, 53, 1, 255, 109, 51, 4, 255, 107, 51, 5, 255, 98, 49, 1, 255, 95, 47, 2, 255, 90, 44, 1, 255, 87, 34, 2, 255, 88, 37, 5, 255, 84, 35, 3, 255, 76, 29, 1, 255, 67, 26, 1, 255, 64, 22, 2, 255, 50, 16, 1, 255, 43, 12, 2, 255, 38, 86, 132, 255, 23, 138, 170, 255, 2, 27, 33, 255, 5, 0, 9, 255, 0, 1, 3, 255, 1, 3, 4, 255, 3, 4, 6, 255, 2, 3, 5, 255, 1, 2, 11, 255, 3, 4, 5, 255, 2, 3, 10, 255, 1, 1, 4, 255, 1, 3, 2, 255, 0, 0, 6, 255, 0, 0, 3, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 1, 0, 3, 255, 0, 1, 3, 255, 0, 4, 6, 255, 2, 6, 10, 255, 3, 6, 11, 255, 1, 6, 12, 255, 0, 5, 11, 255, 0, 5, 11, 255, 1, 5, 12, 255, 0, 4, 10, 255, 0, 3, 10, 255, 2, 5, 12, 255, 1, 3, 8, 255, 3, 4, 7, 255, 2, 3, 5, 255, 0, 1, 5, 255, 1, 2, 6, 255, 2, 3, 7, 255, 0, 1, 4, 255, 0, 2, 3, 255, 1, 1, 2, 255, 2, 1, 4, 255, 2, 2, 7, 255, 1, 1, 3, 255, 2, 0, 4, 255, 4, 2, 7, 255, 2, 0, 0, 255, 3, 24, 61, 255, 27, 86, 143, 255, 13, 89, 109, 255, 14, 71, 114, 255, 10, 75, 113, 255, 2, 21, 106, 255, 5, 119, 227, 255, 8, 130, 183, 255, 6, 0, 0, 255, 9, 3, 63, 255, 3, 32, 198, 255, 10, 16, 12, 255, 13, 12, 5, 255, 6, 6, 5, 255, 11, 7, 4, 255, 9, 5, 2, 255, 6, 1, 0, 255, 4, 2, 3, 255, 1, 1, 1, 255, 2, 0, 1, 255, 3, 1, 2, 255, 2, 0, 1, 255, 2, 0, 1, 255, 2, 0, 1, 255, 0, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 2, 2, 2, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 0, 0, 255, 3, 1, 2, 255, 3, 1, 1, 255, 2, 2, 0, 255, 6, 3, 2, 255, 6, 1, 2, 255, 6, 2, 1, 255, 8, 5, 0, 255, 8, 8, 6, 255, 11, 10, 9, 255, 17, 16, 10, 255, 19, 20, 8, 255, 21, 24, 11, 255, 26, 34, 19, 255, 31, 42, 22, 255, 33, 42, 25, 255, 35, 44, 29, 255, 38, 53, 33, 255, 31, 54, 31, 255, 34, 60, 35, 255, 31, 60, 39, 255, 35, 64, 39, 255, 36, 63, 35, 255, 38, 66, 45, 255, 45, 83, 57, 255, 55, 105, 78, 255, 68, 123, 95, 255, 82, 139, 107, 255, 93, 151, 122, 255, 100, 159, 130, 255, 96, 153, 109, 255, 86, 138, 86, 255, 86, 133, 85, 255, 80, 127, 67, 255, 72, 113, 61, 255, 61, 93, 51, 255, 67, 94, 26, 255, 61, 82, 17, 255, 50, 60, 13, 255, 39, 41, 14, 255, 42, 39, 13, 255, 46, 37, 4, 255, 46, 38, 4, 255, 48, 35, 7, 255, 50, 37, 6, 255, 50, 38, 6, 255, 48, 32, 4, 255, 51, 35, 5, 255, 52, 32, 6, 255, 52, 34, 5, 255, 60, 36, 3, 255, 72, 41, 6, 255, 72, 43, 5, 255, 62, 37, 4, 255, 68, 45, 9, 255, 66, 42, 5, 255, 68, 42, 8, 255, 75, 46, 8, 255, 81, 51, 3, 255, 87, 53, 1, 255, 85, 51, 2, 255, 86, 52, 4, 255, 86, 52, 3, 255, 86, 54, 2, 255, 92, 58, 7, 255, 89, 54, 5, 255, 79, 47, 4, 255, 75, 46, 4, 255, 79, 47, 6, 255, 76, 48, 3, 255, 73, 50, 7, 255, 72, 48, 6, 255, 72, 41, 5, 255, 73, 42, 1, 255, 76, 47, 10, 255, 74, 43, 13, 255, 77, 45, 5, 255, 80, 48, 5, 255, 82, 45, 8, 255, 86, 45, 3, 255, 89, 49, 3, 255, 92, 53, 3, 255, 87, 49, 4, 255, 90, 50, 9, 255, 86, 49, 5, 255, 93, 56, 9, 255, 100, 60, 7, 255, 106, 64, 4, 255, 101, 60, 1, 255, 99, 60, 6, 255, 94, 57, 7, 255, 97, 56, 7, 255, 96, 56, 4, 255, 95, 54, 10, 255, 96, 53, 8, 255, 98, 53, 3, 255, 98, 55, 4, 255, 99, 57, 3, 255, 102, 55, 9, 255, 106, 58, 5, 255, 111, 57, 4, 255, 107, 56, 14, 255, 98, 55, 7, 255, 102, 54, 5, 255, 102, 52, 11, 255, 105, 57, 7, 255, 104, 55, 3, 255, 103, 56, 10, 255, 101, 55, 9, 255, 101, 56, 7, 255, 97, 55, 8, 255, 88, 54, 8, 255, 91, 56, 13, 255, 90, 54, 10, 255, 105, 58, 4, 255, 123, 57, 6, 255, 106, 50, 12, 255, 91, 53, 4, 255, 88, 56, 6, 255, 97, 58, 3, 255, 146, 63, 2, 255, 140, 62, 7, 255, 139, 61, 9, 255, 138, 59, 9, 255, 143, 62, 9, 255, 145, 65, 4, 255, 137, 60, 8, 255, 145, 61, 4, 255, 141, 60, 6, 255, 127, 62, 2, 255, 127, 61, 5, 255, 129, 62, 5, 255, 132, 63, 15, 255, 137, 64, 2, 255, 140, 66, 4, 255, 149, 70, 8, 255, 156, 74, 7, 255, 158, 74, 6, 255, 155, 70, 4, 255, 156, 74, 10, 255, 153, 73, 7, 255, 153, 74, 10, 255, 174, 84, 11, 255, 170, 83, 2, 255, 154, 78, 3, 255, 157, 79, 9, 255, 134, 69, 11, 255, 130, 66, 9, 255, 128, 71, 9, 255, 143, 70, 11, 255, 148, 73, 10, 255, 145, 79, 8, 255, 126, 75, 3, 255, 121, 69, 16, 255, 125, 77, 9, 255, 127, 76, 8, 255, 130, 75, 19, 255, 139, 75, 13, 255, 145, 76, 11, 255, 142, 74, 7, 255, 147, 78, 7, 255, 145, 82, 10, 255, 137, 80, 6, 255, 134, 84, 11, 255, 130, 81, 7, 255, 130, 80, 6, 255, 130, 82, 9, 255, 129, 74, 16, 255, 124, 80, 10, 255, 142, 83, 9, 255, 142, 78, 9, 255, 132, 82, 5, 255, 134, 85, 9, 255, 131, 81, 13, 255, 132, 81, 9, 255, 136, 78, 13, 255, 133, 86, 14, 255, 138, 86, 18, 255, 146, 82, 8, 255, 163, 89, 4, 255, 165, 92, 3, 255, 143, 89, 12, 255, 138, 83, 8, 255, 142, 86, 14, 255, 151, 92, 20, 255, 156, 93, 8, 255, 166, 95, 12, 255, 165, 98, 11, 255, 160, 94, 19, 255, 156, 95, 19, 255, 151, 98, 2, 255, 157, 97, 11, 255, 166, 98, 18, 255, 168, 100, 10, 255, 169, 103, 14, 255, 179, 115, 17, 255, 191, 119, 6, 255, 188, 117, 9, 255, 172, 110, 11, 255, 167, 104, 12, 255, 165, 101, 16, 255, 164, 104, 11, 255, 161, 102, 8, 255, 167, 105, 23, 255, 165, 104, 22, 255, 168, 108, 10, 255, 164, 105, 16, 255, 166, 105, 19, 255, 171, 105, 21, 255, 171, 105, 14, 255, 168, 105, 9, 255, 168, 109, 7, 255, 171, 108, 20, 255, 174, 111, 13, 255, 175, 112, 9, 255, 173, 110, 11, 255, 171, 109, 15, 255, 180, 118, 7, 255, 189, 122, 8, 255, 187, 114, 4, 255, 180, 98, 16, 255, 192, 105, 9, 255, 198, 113, 9, 255, 205, 131, 4, 255, 201, 138, 1, 255, 196, 134, 6, 255, 192, 120, 8, 255, 192, 120, 7, 255, 200, 130, 12, 255, 202, 132, 13, 255, 200, 129, 11, 255, 203, 125, 14, 255, 196, 121, 16, 255, 192, 110, 12, 255, 185, 95, 3, 255, 188, 103, 2, 255, 186, 110, 4, 255, 185, 109, 7, 255, 187, 109, 4, 255, 185, 106, 1, 255, 187, 108, 3, 255, 188, 108, 7, 255, 180, 99, 2, 255, 179, 98, 3, 255, 184, 103, 4, 255, 180, 102, 2, 255, 179, 101, 1, 255, 180, 100, 4, 255, 182, 102, 8, 255, 181, 103, 5, 255, 182, 105, 3, 255, 184, 103, 4, 255, 187, 100, 6, 255, 188, 102, 9, 255, 184, 105, 12, 255, 186, 104, 10, 255, 187, 100, 9, 255, 188, 99, 10, 255, 188, 98, 12, 255, 185, 95, 6, 255, 186, 97, 1, 255, 189, 104, 7, 255, 180, 97, 4, 255, 194, 100, 10, 255, 174, 86, 6, 255, 138, 69, 8, 255, 158, 76, 6, 255, 135, 66, 2, 255, 118, 69, 9, 255, 147, 81, 11, 255, 142, 72, 6, 255, 132, 69, 3, 255, 132, 70, 6, 255, 150, 84, 10, 255, 172, 99, 11, 255, 177, 101, 8, 255, 171, 98, 7, 255, 171, 92, 8, 255, 182, 105, 13, 255, 186, 106, 13, 255, 182, 102, 6, 255, 179, 101, 2, 255, 172, 97, 5, 255, 172, 94, 6, 255, 174, 93, 7, 255, 168, 94, 10, 255, 167, 94, 2, 255, 172, 88, 9, 255, 165, 85, 11, 255, 153, 78, 3, 255, 149, 77, 7, 255, 146, 65, 9, 255, 133, 58, 4, 255, 131, 63, 10, 255, 135, 66, 4, 255, 141, 72, 2, 255, 143, 71, 7, 255, 139, 74, 5, 255, 132, 76, 1, 255, 132, 73, 4, 255, 133, 69, 7, 255, 133, 71, 7, 255, 134, 71, 2, 255, 133, 70, 7, 255, 130, 74, 11, 255, 126, 68, 3, 255, 119, 62, 2, 255, 114, 60, 6, 255, 113, 59, 1, 255, 107, 55, 3, 255, 104, 54, 2, 255, 99, 50, 1, 255, 97, 46, 5, 255, 93, 41, 6, 255, 86, 35, 5, 255, 80, 32, 11, 255, 73, 30, 10, 255, 72, 26, 5, 255, 70, 23, 4, 255, 64, 22, 4, 255, 62, 23, 5, 255, 55, 20, 5, 255, 39, 16, 9, 255, 27, 10, 4, 255, 20, 6, 4, 255, 3, 0, 0, 255, 9, 54, 83, 255, 9, 83, 134, 255, 3, 14, 15, 255, 3, 0, 0, 255, 2, 2, 10, 255, 1, 4, 6, 255, 4, 3, 3, 255, 3, 1, 11, 255, 2, 3, 10, 255, 4, 4, 6, 255, 1, 3, 7, 255, 0, 4, 8, 255, 1, 1, 6, 255, 1, 0, 4, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 5, 255, 1, 2, 7, 255, 2, 3, 8, 255, 1, 2, 9, 255, 1, 3, 11, 255, 1, 4, 11, 255, 0, 3, 10, 255, 0, 3, 8, 255, 0, 2, 9, 255, 0, 2, 10, 255, 1, 4, 10, 255, 0, 3, 8, 255, 2, 4, 8, 255, 2, 3, 7, 255, 2, 3, 7, 255, 2, 3, 7, 255, 1, 2, 6, 255, 0, 0, 4, 255, 0, 1, 2, 255, 0, 1, 2, 255, 1, 1, 2, 255, 0, 0, 5, 255, 5, 2, 4, 255, 4, 1, 2, 255, 2, 0, 3, 255, 1, 3, 12, 255, 11, 55, 110, 255, 20, 82, 134, 255, 22, 78, 116, 255, 17, 81, 125, 255, 12, 66, 112, 255, 7, 45, 173, 255, 3, 185, 244, 255, 3, 18, 44, 255, 4, 0, 0, 255, 1, 24, 174, 255, 5, 29, 109, 255, 19, 15, 4, 255, 17, 17, 13, 255, 16, 17, 11, 255, 13, 9, 5, 255, 9, 4, 1, 255, 11, 7, 4, 255, 6, 2, 2, 255, 2, 0, 0, 255, 1, 0, 0, 255, 3, 1, 1, 255, 2, 2, 0, 255, 0, 1, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 2, 2, 2, 255, 1, 0, 0, 255, 2, 0, 1, 255, 4, 2, 2, 255, 4, 3, 1, 255, 5, 3, 1, 255, 7, 3, 2, 255, 10, 7, 4, 255, 8, 7, 0, 255, 10, 10, 7, 255, 14, 15, 13, 255, 18, 21, 7, 255, 23, 28, 9, 255, 25, 32, 19, 255, 24, 34, 19, 255, 29, 40, 22, 255, 37, 47, 36, 255, 34, 48, 28, 255, 35, 50, 25, 255, 32, 53, 31, 255, 27, 55, 27, 255, 31, 54, 31, 255, 36, 59, 34, 255, 32, 64, 41, 255, 35, 77, 46, 255, 52, 94, 66, 255, 65, 113, 80, 255, 72, 133, 95, 255, 84, 144, 109, 255, 96, 154, 116, 255, 96, 154, 104, 255, 88, 143, 88, 255, 81, 129, 72, 255, 84, 127, 64, 255, 78, 121, 55, 255, 73, 108, 51, 255, 70, 96, 51, 255, 69, 90, 32, 255, 60, 76, 16, 255, 52, 59, 15, 255, 44, 41, 18, 255, 39, 39, 6, 255, 53, 44, 7, 255, 47, 36, 6, 255, 46, 36, 10, 255, 46, 38, 8, 255, 47, 38, 2, 255, 57, 39, 6, 255, 55, 40, 5, 255, 52, 40, 3, 255, 60, 40, 3, 255, 72, 43, 5, 255, 78, 45, 6, 255, 71, 44, 5, 255, 60, 38, 8, 255, 69, 48, 7, 255, 69, 46, 2, 255, 73, 45, 4, 255, 80, 50, 5, 255, 82, 48, 2, 255, 80, 47, 1, 255, 86, 54, 5, 255, 89, 55, 7, 255, 88, 54, 4, 255, 89, 57, 6, 255, 86, 55, 8, 255, 80, 50, 7, 255, 73, 46, 5, 255, 70, 48, 6, 255, 75, 44, 4, 255, 75, 45, 1, 255, 75, 49, 10, 255, 73, 46, 5, 255, 73, 44, 6, 255, 74, 46, 4, 255, 75, 45, 6, 255, 74, 44, 8, 255, 78, 46, 5, 255, 83, 50, 7, 255, 83, 52, 10, 255, 76, 49, 7, 255, 81, 51, 8, 255, 86, 54, 1, 255, 87, 52, 4, 255, 89, 51, 14, 255, 92, 54, 12, 255, 96, 52, 11, 255, 100, 56, 2, 255, 103, 62, 5, 255, 99, 60, 8, 255, 97, 58, 13, 255, 95, 54, 6, 255, 97, 53, 2, 255, 96, 53, 5, 255, 97, 53, 8, 255, 96, 53, 8, 255, 96, 54, 3, 255, 97, 56, 4, 255, 99, 58, 5, 255, 103, 58, 6, 255, 112, 58, 9, 255, 110, 53, 10, 255, 102, 55, 3, 255, 101, 56, 7, 255, 107, 56, 11, 255, 103, 56, 11, 255, 101, 57, 6, 255, 100, 55, 4, 255, 99, 54, 9, 255, 98, 55, 8, 255, 93, 53, 5, 255, 93, 51, 10, 255, 95, 51, 6, 255, 97, 56, 1, 255, 99, 56, 10, 255, 94, 57, 8, 255, 94, 56, 6, 255, 95, 51, 17, 255, 93, 50, 16, 255, 92, 53, 12, 255, 104, 53, 13, 255, 114, 56, 17, 255, 98, 56, 8, 255, 102, 56, 9, 255, 108, 50, 4, 255, 118, 56, 10, 255, 112, 49, 16, 255, 108, 56, 5, 255, 93, 54, 5, 255, 93, 53, 11, 255, 103, 51, 11, 255, 120, 56, 4, 255, 139, 73, 2, 255, 146, 71, 3, 255, 133, 61, 8, 255, 140, 61, 19, 255, 143, 61, 17, 255, 144, 66, 3, 255, 148, 68, 7, 255, 150, 69, 7, 255, 147, 69, 6, 255, 148, 70, 4, 255, 149, 72, 6, 255, 156, 71, 8, 255, 158, 73, 1, 255, 159, 75, 4, 255, 165, 79, 9, 255, 145, 74, 9, 255, 134, 68, 9, 255, 120, 64, 10, 255, 125, 73, 9, 255, 144, 73, 4, 255, 150, 76, 8, 255, 149, 80, 4, 255, 149, 81, 14, 255, 135, 77, 10, 255, 132, 76, 8, 255, 133, 76, 12, 255, 140, 77, 8, 255, 138, 77, 5, 255, 137, 80, 7, 255, 143, 82, 4, 255, 144, 82, 10, 255, 141, 77, 10, 255, 137, 82, 1, 255, 133, 81, 4, 255, 134, 80, 12, 255, 130, 77, 10, 255, 129, 78, 19, 255, 131, 80, 13, 255, 135, 83, 10, 255, 132, 82, 12, 255, 129, 81, 17, 255, 134, 79, 12, 255, 134, 84, 7, 255, 129, 83, 18, 255, 132, 81, 11, 255, 140, 87, 7, 255, 165, 95, 10, 255, 167, 86, 7, 255, 154, 85, 8, 255, 142, 84, 14, 255, 136, 83, 5, 255, 153, 88, 15, 255, 169, 93, 13, 255, 172, 95, 8, 255, 160, 92, 5, 255, 156, 97, 8, 255, 154, 100, 10, 255, 156, 93, 13, 255, 160, 94, 13, 255, 163, 101, 7, 255, 169, 99, 8, 255, 171, 99, 16, 255, 166, 102, 13, 255, 174, 104, 13, 255, 181, 114, 12, 255, 193, 119, 5, 255, 190, 118, 3, 255, 176, 112, 5, 255, 169, 103, 11, 255, 167, 104, 8, 255, 164, 102, 7, 255, 166, 102, 8, 255, 171, 109, 13, 255, 165, 102, 26, 255, 167, 108, 17, 255, 166, 104, 24, 255, 171, 109, 11, 255, 170, 105, 16, 255, 169, 103, 13, 255, 170, 106, 14, 255, 173, 106, 16, 255, 175, 110, 8, 255, 173, 110, 15, 255, 172, 109, 10, 255, 174, 112, 10, 255, 173, 110, 7, 255, 180, 116, 12, 255, 186, 114, 11, 255, 176, 101, 5, 255, 178, 105, 7, 255, 191, 119, 5, 255, 192, 115, 8, 255, 200, 116, 11, 255, 202, 115, 11, 255, 200, 120, 7, 255, 193, 124, 8, 255, 194, 123, 3, 255, 202, 130, 8, 255, 208, 136, 10, 255, 203, 129, 10, 255, 199, 118, 10, 255, 190, 112, 10, 255, 191, 114, 15, 255, 186, 110, 4, 255, 186, 108, 2, 255, 186, 107, 9, 255, 187, 109, 9, 255, 188, 111, 4, 255, 187, 107, 1, 255, 188, 108, 3, 255, 184, 103, 4, 255, 176, 95, 0, 255, 182, 101, 5, 255, 186, 106, 6, 255, 181, 103, 2, 255, 183, 104, 3, 255, 182, 102, 4, 255, 183, 103, 6, 255, 183, 103, 3, 255, 184, 105, 4, 255, 182, 104, 7, 255, 183, 102, 7, 255, 186, 105, 7, 255, 182, 108, 11, 255, 182, 104, 13, 255, 182, 101, 11, 255, 181, 101, 9, 255, 188, 103, 6, 255, 183, 103, 2, 255, 181, 100, 2, 255, 184, 92, 2, 255, 186, 100, 0, 255, 192, 100, 2, 255, 162, 74, 2, 255, 146, 74, 2, 255, 156, 83, 2, 255, 152, 87, 3, 255, 154, 93, 11, 255, 148, 84, 6, 255, 127, 66, 4, 255, 130, 64, 5, 255, 141, 77, 2, 255, 159, 90, 5, 255, 167, 91, 1, 255, 174, 99, 5, 255, 174, 101, 3, 255, 178, 100, 6, 255, 183, 104, 13, 255, 180, 101, 7, 255, 179, 99, 2, 255, 177, 98, 3, 255, 173, 96, 4, 255, 170, 94, 11, 255, 168, 85, 12, 255, 152, 77, 8, 255, 155, 89, 6, 255, 166, 87, 5, 255, 169, 87, 7, 255, 165, 89, 9, 255, 166, 90, 6, 255, 170, 83, 8, 255, 149, 70, 7, 255, 121, 52, 9, 255, 118, 53, 6, 255, 121, 59, 3, 255, 130, 66, 5, 255, 133, 65, 1, 255, 136, 65, 0, 255, 134, 66, 5, 255, 128, 64, 8, 255, 128, 64, 8, 255, 126, 62, 5, 255, 118, 60, 3, 255, 111, 59, 3, 255, 111, 59, 3, 255, 114, 61, 4, 255, 108, 61, 6, 255, 107, 53, 3, 255, 108, 50, 4, 255, 96, 47, 2, 255, 84, 43, 2, 255, 81, 41, 5, 255, 79, 37, 5, 255, 75, 30, 2, 255, 70, 30, 5, 255, 71, 28, 4, 255, 71, 27, 2, 255, 60, 19, 2, 255, 50, 14, 7, 255, 32, 10, 3, 255, 26, 9, 1, 255, 25, 7, 0, 255, 27, 10, 3, 255, 29, 13, 5, 255, 8, 10, 10, 255, 4, 0, 0, 255, 4, 20, 28, 255, 4, 29, 36, 255, 2, 11, 13, 255, 2, 0, 6, 255, 3, 3, 3, 255, 2, 1, 3, 255, 3, 0, 2, 255, 5, 1, 5, 255, 3, 3, 3, 255, 2, 2, 8, 255, 4, 0, 9, 255, 0, 1, 6, 255, 1, 0, 6, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 2, 1, 3, 255, 1, 1, 5, 255, 2, 1, 6, 255, 2, 2, 8, 255, 2, 2, 9, 255, 2, 3, 9, 255, 2, 3, 9, 255, 1, 3, 8, 255, 0, 3, 8, 255, 1, 4, 11, 255, 1, 4, 10, 255, 0, 5, 8, 255, 0, 4, 7, 255, 2, 3, 7, 255, 3, 4, 8, 255, 1, 2, 6, 255, 0, 1, 5, 255, 0, 1, 4, 255, 1, 1, 2, 255, 1, 1, 3, 255, 2, 1, 5, 255, 1, 0, 5, 255, 3, 0, 4, 255, 2, 1, 0, 255, 0, 1, 3, 255, 9, 22, 51, 255, 19, 67, 114, 255, 13, 63, 104, 255, 8, 71, 111, 255, 17, 84, 111, 255, 12, 41, 130, 255, 6, 148, 235, 255, 9, 98, 153, 255, 8, 0, 0, 255, 5, 10, 89, 255, 6, 39, 184, 255, 17, 18, 20, 255, 17, 18, 14, 255, 11, 17, 8, 255, 19, 19, 13, 255, 15, 12, 7, 255, 13, 9, 5, 255, 10, 8, 4, 255, 9, 6, 3, 255, 5, 1, 1, 255, 2, 1, 0, 255, 4, 4, 1, 255, 4, 4, 2, 255, 1, 1, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 0, 0, 255, 1, 0, 0, 255, 3, 1, 1, 255, 4, 3, 0, 255, 6, 5, 1, 255, 7, 5, 2, 255, 9, 9, 2, 255, 13, 13, 1, 255, 15, 16, 8, 255, 17, 19, 10, 255, 20, 25, 9, 255, 23, 31, 9, 255, 25, 36, 12, 255, 26, 39, 20, 255, 31, 43, 26, 255, 30, 47, 21, 255, 30, 49, 15, 255, 34, 49, 17, 255, 31, 52, 20, 255, 30, 54, 26, 255, 37, 53, 27, 255, 35, 54, 27, 255, 37, 66, 40, 255, 46, 86, 48, 255, 60, 101, 75, 255, 70, 118, 85, 255, 77, 133, 92, 255, 88, 145, 103, 255, 93, 148, 99, 255, 91, 144, 84, 255, 86, 132, 82, 255, 83, 122, 69, 255, 83, 121, 46, 255, 76, 109, 48, 255, 70, 100, 39, 255, 71, 96, 28, 255, 69, 91, 20, 255, 62, 76, 19, 255, 55, 59, 17, 255, 48, 46, 6, 255, 45, 42, 4, 255, 47, 42, 5, 255, 42, 39, 5, 255, 47, 34, 5, 255, 53, 36, 6, 255, 53, 40, 6, 255, 55, 41, 5, 255, 51, 42, 4, 255, 47, 42, 0, 255, 68, 48, 5, 255, 78, 47, 4, 255, 75, 45, 3, 255, 71, 44, 4, 255, 60, 48, 8, 255, 63, 50, 4, 255, 69, 48, 5, 255, 76, 47, 8, 255, 83, 49, 3, 255, 90, 47, 3, 255, 88, 53, 6, 255, 83, 53, 5, 255, 84, 51, 1, 255, 87, 52, 1, 255, 90, 54, 7, 255, 84, 49, 7, 255, 73, 41, 4, 255, 73, 47, 8, 255, 73, 45, 7, 255, 79, 49, 7, 255, 83, 48, 8, 255, 82, 46, 4, 255, 80, 46, 7, 255, 76, 46, 7, 255, 76, 47, 6, 255, 77, 48, 6, 255, 80, 50, 6, 255, 82, 49, 6, 255, 83, 51, 4, 255, 86, 53, 7, 255, 84, 48, 11, 255, 87, 50, 12, 255, 93, 55, 2, 255, 93, 54, 2, 255, 92, 52, 8, 255, 95, 57, 5, 255, 93, 50, 7, 255, 99, 53, 6, 255, 105, 59, 13, 255, 106, 65, 7, 255, 96, 57, 3, 255, 96, 59, 9, 255, 97, 54, 3, 255, 99, 54, 5, 255, 99, 55, 6, 255, 96, 54, 7, 255, 95, 53, 7, 255, 97, 54, 6, 255, 96, 56, 6, 255, 102, 61, 7, 255, 116, 60, 9, 255, 108, 56, 5, 255, 99, 54, 6, 255, 104, 55, 10, 255, 104, 56, 8, 255, 105, 57, 8, 255, 105, 57, 7, 255, 102, 53, 7, 255, 103, 56, 9, 255, 101, 57, 7, 255, 97, 55, 7, 255, 95, 54, 11, 255, 97, 54, 8, 255, 100, 57, 8, 255, 100, 58, 9, 255, 98, 55, 4, 255, 102, 58, 6, 255, 96, 57, 9, 255, 94, 52, 12, 255, 98, 53, 8, 255, 104, 57, 5, 255, 89, 57, 8, 255, 94, 55, 9, 255, 98, 57, 5, 255, 93, 56, 8, 255, 86, 59, 2, 255, 88, 62, 7, 255, 93, 56, 5, 255, 115, 62, 9, 255, 131, 66, 7, 255, 141, 68, 8, 255, 144, 62, 8, 255, 145, 63, 7, 255, 149, 66, 8, 255, 141, 69, 2, 255, 144, 69, 6, 255, 143, 65, 7, 255, 143, 66, 4, 255, 144, 65, 7, 255, 149, 70, 5, 255, 152, 71, 6, 255, 156, 70, 4, 255, 165, 75, 1, 255, 162, 74, 5, 255, 151, 74, 1, 255, 157, 76, 3, 255, 157, 72, 6, 255, 162, 80, 4, 255, 172, 87, 6, 255, 164, 80, 13, 255, 139, 74, 9, 255, 147, 78, 0, 255, 124, 64, 9, 255, 133, 72, 6, 255, 153, 76, 10, 255, 160, 83, 9, 255, 153, 81, 2, 255, 143, 77, 6, 255, 148, 82, 10, 255, 142, 80, 8, 255, 140, 83, 10, 255, 143, 82, 6, 255, 142, 81, 5, 255, 143, 81, 7, 255, 138, 78, 18, 255, 133, 81, 18, 255, 136, 82, 8, 255, 139, 79, 4, 255, 132, 83, 10, 255, 130, 82, 8, 255, 131, 83, 4, 255, 136, 80, 9, 255, 139, 78, 21, 255, 149, 82, 8, 255, 159, 89, 6, 255, 142, 87, 11, 255, 132, 83, 10, 255, 148, 90, 9, 255, 164, 90, 2, 255, 171, 92, 9, 255, 163, 91, 10, 255, 162, 89, 15, 255, 158, 90, 9, 255, 159, 95, 10, 255, 157, 90, 5, 255, 165, 89, 2, 255, 171, 93, 5, 255, 171, 99, 10, 255, 159, 95, 15, 255, 165, 96, 8, 255, 173, 96, 4, 255, 170, 100, 11, 255, 168, 102, 12, 255, 166, 100, 11, 255, 167, 103, 17, 255, 179, 107, 10, 255, 188, 109, 14, 255, 190, 116, 12, 255, 191, 120, 2, 255, 186, 110, 8, 255, 174, 104, 11, 255, 162, 102, 10, 255, 162, 103, 13, 255, 163, 102, 11, 255, 164, 105, 5, 255, 167, 104, 23, 255, 167, 105, 15, 255, 167, 106, 13, 255, 173, 110, 12, 255, 176, 108, 12, 255, 181, 109, 4, 255, 185, 111, 6, 255, 182, 110, 9, 255, 179, 110, 12, 255, 181, 112, 18, 255, 179, 112, 10, 255, 177, 110, 16, 255, 178, 111, 16, 255, 182, 115, 10, 255, 190, 118, 2, 255, 185, 112, 11, 255, 189, 118, 7, 255, 201, 127, 1, 255, 207, 135, 2, 255, 205, 129, 6, 255, 183, 97, 10, 255, 190, 104, 16, 255, 197, 126, 9, 255, 197, 124, 6, 255, 206, 132, 15, 255, 202, 126, 29, 255, 193, 113, 19, 255, 192, 110, 14, 255, 190, 107, 20, 255, 193, 120, 11, 255, 188, 119, 5, 255, 183, 113, 5, 255, 187, 110, 11, 255, 189, 110, 8, 255, 188, 114, 0, 255, 185, 111, 1, 255, 185, 111, 2, 255, 183, 107, 3, 255, 183, 106, 6, 255, 186, 108, 8, 255, 183, 105, 3, 255, 185, 103, 4, 255, 182, 102, 2, 255, 181, 101, 3, 255, 183, 103, 6, 255, 182, 102, 4, 255, 182, 102, 3, 255, 182, 102, 5, 255, 184, 101, 2, 255, 191, 106, 4, 255, 187, 109, 11, 255, 184, 104, 15, 255, 183, 100, 11, 255, 180, 101, 8, 255, 185, 104, 6, 255, 180, 105, 5, 255, 185, 100, 0, 255, 185, 96, 1, 255, 183, 103, 7, 255, 147, 71, 5, 255, 132, 61, 6, 255, 152, 80, 7, 255, 141, 74, 4, 255, 132, 68, 5, 255, 131, 63, 6, 255, 123, 58, 5, 255, 125, 63, 10, 255, 129, 64, 10, 255, 139, 71, 7, 255, 144, 70, 7, 255, 155, 76, 15, 255, 166, 88, 13, 255, 174, 101, 8, 255, 181, 106, 9, 255, 177, 100, 21, 255, 176, 99, 11, 255, 184, 105, 9, 255, 186, 102, 21, 255, 181, 99, 11, 255, 177, 96, 3, 255, 174, 84, 8, 255, 148, 65, 2, 255, 148, 78, 4, 255, 165, 83, 3, 255, 171, 85, 1, 255, 166, 86, 3, 255, 159, 82, 5, 255, 171, 84, 7, 255, 184, 98, 8, 255, 171, 86, 1, 255, 150, 72, 4, 255, 115, 54, 2, 255, 109, 49, 4, 255, 112, 51, 3, 255, 115, 56, 5, 255, 117, 60, 7, 255, 119, 62, 7, 255, 120, 61, 3, 255, 119, 59, 3, 255, 119, 58, 4, 255, 114, 61, 2, 255, 113, 58, 3, 255, 110, 51, 2, 255, 102, 50, 2, 255, 105, 43, 2, 255, 96, 41, 0, 255, 94, 41, 3, 255, 91, 39, 5, 255, 87, 37, 4, 255, 78, 35, 0, 255, 71, 36, 1, 255, 71, 29, 3, 255, 66, 17, 1, 255, 48, 18, 2, 255, 38, 16, 6, 255, 33, 8, 5, 255, 24, 10, 6, 255, 22, 11, 6, 255, 23, 12, 6, 255, 22, 11, 4, 255, 25, 10, 3, 255, 2, 20, 28, 255, 6, 40, 54, 255, 4, 18, 21, 255, 0, 0, 15, 255, 1, 11, 37, 255, 3, 0, 0, 255, 1, 0, 0, 255, 2, 15, 26, 255, 9, 61, 68, 255, 4, 6, 4, 255, 1, 0, 4, 255, 2, 2, 7, 255, 2, 2, 6, 255, 0, 1, 6, 255, 1, 0, 5, 255, 1, 0, 4, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 2, 255, 0, 0, 2, 255, 1, 1, 4, 255, 2, 2, 7, 255, 2, 3, 8, 255, 2, 3, 8, 255, 2, 3, 7, 255, 3, 4, 8, 255, 2, 3, 8, 255, 2, 2, 10, 255, 0, 2, 8, 255, 1, 4, 9, 255, 0, 4, 7, 255, 2, 3, 8, 255, 3, 4, 9, 255, 2, 3, 7, 255, 1, 2, 6, 255, 2, 1, 6, 255, 1, 1, 6, 255, 2, 1, 4, 255, 2, 0, 6, 255, 1, 0, 5, 255, 1, 1, 2, 255, 1, 2, 0, 255, 1, 2, 8, 255, 9, 21, 53, 255, 3, 43, 70, 255, 9, 53, 103, 255, 3, 67, 106, 255, 11, 54, 106, 255, 5, 73, 190, 255, 4, 161, 244, 255, 9, 20, 34, 255, 7, 0, 12, 255, 6, 30, 197, 255, 9, 35, 92, 255, 20, 14, 0, 255, 11, 14, 11, 255, 11, 17, 13, 255, 16, 16, 10, 255, 19, 14, 10, 255, 15, 10, 6, 255, 13, 11, 6, 255, 10, 8, 4, 255, 8, 3, 1, 255, 7, 3, 2, 255, 8, 4, 1, 255, 6, 3, 0, 255, 2, 1, 0, 255, 1, 1, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 1, 1, 255, 2, 0, 1, 255, 3, 1, 2, 255, 3, 3, 1, 255, 4, 3, 0, 255, 8, 7, 3, 255, 10, 9, 5, 255, 13, 12, 6, 255, 18, 19, 6, 255, 18, 21, 6, 255, 17, 22, 6, 255, 21, 28, 14, 255, 21, 31, 14, 255, 21, 35, 7, 255, 26, 39, 16, 255, 28, 41, 29, 255, 29, 44, 24, 255, 30, 46, 25, 255, 33, 46, 26, 255, 30, 48, 19, 255, 30, 47, 23, 255, 36, 50, 23, 255, 37, 58, 31, 255, 50, 76, 42, 255, 60, 94, 55, 255, 65, 108, 71, 255, 77, 124, 88, 255, 84, 135, 95, 255, 93, 143, 101, 255, 91, 139, 92, 255, 88, 131, 80, 255, 82, 120, 68, 255, 82, 117, 59, 255, 84, 114, 55, 255, 75, 102, 48, 255, 75, 99, 43, 255, 71, 91, 30, 255, 68, 84, 18, 255, 64, 75, 8, 255, 58, 62, 7, 255, 53, 49, 6, 255, 48, 40, 6, 255, 46, 38, 7, 255, 43, 42, 2, 255, 55, 41, 0, 255, 61, 37, 2, 255, 57, 39, 9, 255, 52, 34, 7, 255, 56, 36, 8, 255, 59, 37, 3, 255, 75, 49, 5, 255, 83, 51, 4, 255, 78, 47, 1, 255, 68, 43, 0, 255, 67, 44, 6, 255, 68, 45, 3, 255, 69, 44, 1, 255, 76, 48, 4, 255, 78, 50, 1, 255, 83, 55, 3, 255, 82, 54, 4, 255, 82, 52, 4, 255, 84, 52, 3, 255, 88, 54, 5, 255, 90, 53, 8, 255, 84, 48, 9, 255, 79, 45, 10, 255, 74, 45, 6, 255, 78, 45, 6, 255, 75, 46, 6, 255, 77, 47, 9, 255, 79, 47, 1, 255, 71, 47, 6, 255, 73, 47, 9, 255, 76, 48, 0, 255, 76, 47, 3, 255, 81, 49, 9, 255, 85, 53, 3, 255, 88, 54, 6, 255, 86, 53, 7, 255, 81, 50, 2, 255, 88, 52, 9, 255, 90, 53, 1, 255, 95, 54, 4, 255, 97, 54, 8, 255, 97, 56, 7, 255, 94, 52, 17, 255, 99, 54, 8, 255, 108, 62, 6, 255, 107, 65, 1, 255, 101, 63, 4, 255, 95, 59, 9, 255, 97, 56, 7, 255, 99, 55, 7, 255, 99, 56, 5, 255, 97, 53, 7, 255, 96, 54, 11, 255, 98, 54, 8, 255, 100, 53, 8, 255, 104, 58, 3, 255, 107, 57, 5, 255, 113, 57, 7, 255, 110, 55, 11, 255, 103, 55, 9, 255, 104, 52, 4, 255, 103, 56, 10, 255, 105, 60, 4, 255, 104, 58, 4, 255, 103, 57, 11, 255, 99, 55, 8, 255, 97, 57, 6, 255, 94, 55, 6, 255, 96, 55, 10, 255, 99, 59, 11, 255, 101, 54, 8, 255, 99, 54, 11, 255, 90, 58, 9, 255, 94, 57, 5, 255, 101, 54, 4, 255, 92, 58, 2, 255, 92, 62, 11, 255, 104, 60, 12, 255, 98, 55, 4, 255, 102, 58, 5, 255, 109, 59, 9, 255, 94, 60, 2, 255, 104, 61, 5, 255, 146, 67, 16, 255, 143, 62, 9, 255, 132, 61, 7, 255, 142, 68, 8, 255, 144, 69, 5, 255, 149, 67, 6, 255, 153, 73, 11, 255, 162, 76, 2, 255, 142, 66, 2, 255, 138, 69, 8, 255, 144, 68, 11, 255, 144, 63, 3, 255, 157, 72, 1, 255, 169, 78, 6, 255, 167, 74, 5, 255, 161, 73, 3, 255, 156, 72, 4, 255, 160, 76, 4, 255, 167, 77, 6, 255, 164, 78, 10, 255, 160, 75, 5, 255, 163, 74, 7, 255, 163, 78, 8, 255, 175, 82, 7, 255, 174, 89, 12, 255, 141, 78, 15, 255, 136, 73, 4, 255, 129, 67, 10, 255, 143, 75, 17, 255, 160, 82, 8, 255, 161, 84, 16, 255, 160, 83, 8, 255, 150, 82, 5, 255, 140, 83, 7, 255, 148, 81, 10, 255, 147, 79, 14, 255, 140, 85, 6, 255, 136, 83, 7, 255, 137, 82, 14, 255, 132, 80, 6, 255, 132, 85, 2, 255, 139, 84, 12, 255, 134, 83, 10, 255, 137, 83, 13, 255, 144, 83, 8, 255, 149, 87, 9, 255, 159, 89, 7, 255, 171, 86, 14, 255, 168, 86, 0, 255, 165, 92, 7, 255, 165, 88, 11, 255, 160, 86, 7, 255, 157, 89, 12, 255, 158, 85, 8, 255, 172, 89, 10, 255, 172, 90, 10, 255, 162, 90, 6, 255, 158, 93, 5, 255, 166, 97, 9, 255, 168, 93, 5, 255, 167, 93, 8, 255, 168, 92, 11, 255, 175, 99, 8, 255, 175, 102, 0, 255, 171, 104, 8, 255, 164, 103, 18, 255, 162, 97, 14, 255, 172, 103, 14, 255, 175, 108, 8, 255, 187, 114, 18, 255, 190, 119, 12, 255, 191, 119, 16, 255, 183, 108, 11, 255, 178, 108, 5, 255, 168, 103, 10, 255, 166, 103, 16, 255, 163, 102, 15, 255, 161, 104, 4, 255, 169, 107, 11, 255, 170, 103, 17, 255, 175, 107, 13, 255, 176, 107, 8, 255, 183, 108, 14, 255, 185, 101, 23, 255, 188, 105, 15, 255, 190, 113, 2, 255, 187, 114, 7, 255, 189, 115, 6, 255, 190, 113, 7, 255, 185, 109, 8, 255, 184, 112, 7, 255, 187, 116, 7, 255, 194, 123, 0, 255, 195, 122, 11, 255, 196, 124, 8, 255, 208, 133, 9, 255, 208, 129, 4, 255, 210, 129, 6, 255, 200, 126, 7, 255, 201, 134, 5, 255, 200, 128, 2, 255, 196, 121, 3, 255, 206, 132, 13, 255, 194, 120, 16, 255, 200, 126, 16, 255, 199, 122, 8, 255, 195, 116, 19, 255, 197, 123, 10, 255, 191, 114, 10, 255, 190, 109, 4, 255, 192, 111, 1, 255, 191, 111, 7, 255, 189, 111, 2, 255, 192, 113, 4, 255, 189, 109, 0, 255, 189, 108, 2, 255, 188, 107, 5, 255, 185, 104, 3, 255, 182, 103, 0, 255, 186, 104, 5, 255, 182, 100, 1, 255, 183, 101, 3, 255, 185, 102, 6, 255, 182, 102, 5, 255, 182, 103, 4, 255, 185, 104, 5, 255, 188, 102, 3, 255, 191, 106, 8, 255, 187, 110, 13, 255, 182, 105, 12, 255, 182, 101, 9, 255, 181, 103, 9, 255, 183, 102, 6, 255, 188, 102, 7, 255, 185, 98, 5, 255, 196, 100, 1, 255, 161, 85, 5, 255, 117, 51, 3, 255, 135, 66, 9, 255, 163, 84, 10, 255, 153, 74, 1, 255, 132, 74, 6, 255, 137, 72, 9, 255, 137, 67, 7, 255, 133, 77, 2, 255, 147, 81, 6, 255, 148, 79, 8, 255, 154, 79, 10, 255, 162, 86, 10, 255, 173, 98, 10, 255, 180, 106, 9, 255, 183, 107, 16, 255, 178, 103, 6, 255, 177, 101, 4, 255, 184, 103, 7, 255, 186, 102, 5, 255, 184, 100, 10, 255, 182, 98, 9, 255, 179, 89, 6, 255, 156, 73, 10, 255, 137, 65, 7, 255, 149, 70, 10, 255, 158, 78, 10, 255, 143, 61, 0, 255, 148, 69, 6, 255, 149, 74, 9, 255, 152, 81, 6, 255, 165, 85, 5, 255, 174, 88, 5, 255, 155, 73, 6, 255, 113, 55, 5, 255, 101, 45, 3, 255, 96, 39, 5, 255, 91, 37, 4, 255, 96, 44, 4, 255, 106, 55, 4, 255, 113, 57, 7, 255, 112, 53, 7, 255, 107, 55, 0, 255, 103, 48, 5, 255, 94, 42, 10, 255, 86, 40, 9, 255, 87, 36, 8, 255, 87, 35, 4, 255, 83, 34, 5, 255, 81, 33, 3, 255, 78, 31, 2, 255, 71, 26, 3, 255, 60, 21, 8, 255, 51, 15, 6, 255, 37, 11, 3, 255, 22, 11, 4, 255, 26, 11, 9, 255, 24, 7, 3, 255, 23, 10, 3, 255, 26, 10, 2, 255, 26, 11, 2, 255, 25, 9, 1, 255, 27, 9, 3, 255, 1, 1, 7, 255, 6, 34, 60, 255, 23, 65, 85, 255, 16, 40, 63, 255, 29, 85, 123, 255, 5, 42, 60, 255, 2, 0, 0, 255, 2, 4, 10, 255, 8, 35, 39, 255, 2, 3, 2, 255, 4, 7, 9, 255, 2, 3, 8, 255, 4, 3, 11, 255, 1, 2, 7, 255, 2, 1, 7, 255, 1, 0, 6, 255, 1, 0, 5, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 2, 255, 0, 2, 5, 255, 2, 3, 6, 255, 2, 3, 6, 255, 0, 1, 5, 255, 1, 2, 7, 255, 3, 4, 9, 255, 3, 3, 11, 255, 0, 1, 8, 255, 1, 3, 9, 255, 0, 4, 7, 255, 0, 3, 8, 255, 2, 4, 9, 255, 1, 2, 7, 255, 1, 2, 6, 255, 3, 2, 7, 255, 1, 0, 6, 255, 2, 1, 4, 255, 1, 0, 5, 255, 0, 0, 4, 255, 1, 1, 0, 255, 2, 2, 4, 255, 2, 4, 17, 255, 1, 7, 20, 255, 6, 14, 35, 255, 12, 27, 66, 255, 13, 51, 71, 255, 5, 32, 135, 255, 3, 141, 251, 255, 6, 83, 124, 255, 6, 0, 0, 255, 2, 8, 95, 255, 12, 40, 186, 255, 17, 27, 16, 255, 24, 19, 10, 255, 17, 13, 12, 255, 8, 13, 2, 255, 15, 16, 10, 255, 14, 10, 6, 255, 9, 4, 1, 255, 15, 14, 9, 255, 11, 11, 6, 255, 11, 7, 3, 255, 11, 4, 1, 255, 9, 4, 1, 255, 6, 2, 0, 255, 3, 1, 0, 255, 2, 1, 0, 255, 2, 0, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 2, 2, 2, 255, 0, 0, 0, 255, 1, 1, 1, 255, 3, 1, 2, 255, 5, 3, 4, 255, 5, 4, 0, 255, 7, 6, 2, 255, 10, 9, 5, 255, 11, 10, 5, 255, 16, 17, 6, 255, 17, 20, 4, 255, 21, 26, 5, 255, 18, 25, 7, 255, 19, 29, 15, 255, 17, 30, 15, 255, 22, 35, 18, 255, 29, 42, 23, 255, 24, 39, 16, 255, 26, 40, 17, 255, 32, 39, 25, 255, 27, 39, 22, 255, 31, 48, 21, 255, 32, 48, 16, 255, 38, 57, 25, 255, 42, 67, 39, 255, 56, 86, 51, 255, 65, 101, 65, 255, 69, 115, 68, 255, 78, 127, 81, 255, 82, 135, 93, 255, 92, 140, 96, 255, 89, 132, 79, 255, 85, 119, 76, 255, 81, 113, 66, 255, 80, 114, 47, 255, 81, 111, 41, 255, 76, 101, 40, 255, 74, 94, 32, 255, 73, 88, 28, 255, 68, 77, 23, 255, 65, 70, 21, 255, 63, 62, 11, 255, 59, 51, 5, 255, 56, 42, 6, 255, 54, 39, 12, 255, 41, 34, 2, 255, 60, 41, 4, 255, 66, 39, 6, 255, 58, 39, 6, 255, 58, 38, 6, 255, 62, 33, 6, 255, 74, 42, 6, 255, 84, 52, 7, 255, 83, 52, 4, 255, 76, 48, 4, 255, 66, 43, 6, 255, 68, 42, 5, 255, 70, 43, 6, 255, 71, 44, 2, 255, 80, 53, 2, 255, 84, 54, 5, 255, 84, 52, 4, 255, 86, 53, 5, 255, 90, 54, 7, 255, 85, 51, 4, 255, 87, 54, 6, 255, 89, 54, 9, 255, 75, 42, 4, 255, 75, 41, 5, 255, 76, 46, 4, 255, 73, 47, 7, 255, 74, 45, 5, 255, 78, 44, 4, 255, 77, 45, 5, 255, 72, 48, 4, 255, 73, 46, 9, 255, 72, 43, 2, 255, 78, 47, 6, 255, 84, 52, 12, 255, 84, 50, 4, 255, 87, 50, 5, 255, 85, 49, 2, 255, 89, 55, 4, 255, 87, 50, 6, 255, 90, 51, 8, 255, 89, 51, 4, 255, 91, 56, 7, 255, 90, 54, 6, 255, 95, 53, 9, 255, 97, 54, 9, 255, 101, 62, 7, 255, 101, 63, 8, 255, 100, 63, 8, 255, 98, 57, 6, 255, 97, 55, 6, 255, 99, 55, 8, 255, 101, 58, 5, 255, 98, 56, 6, 255, 99, 58, 11, 255, 103, 58, 7, 255, 104, 55, 7, 255, 103, 55, 1, 255, 101, 56, 6, 255, 108, 57, 12, 255, 111, 57, 10, 255, 108, 56, 11, 255, 103, 58, 9, 255, 106, 57, 13, 255, 106, 55, 4, 255, 109, 58, 5, 255, 106, 54, 10, 255, 104, 56, 10, 255, 103, 57, 9, 255, 95, 54, 7, 255, 96, 57, 10, 255, 93, 58, 10, 255, 94, 52, 5, 255, 121, 64, 14, 255, 106, 62, 7, 255, 89, 54, 12, 255, 92, 56, 11, 255, 97, 60, 3, 255, 91, 59, 6, 255, 105, 57, 13, 255, 104, 58, 5, 255, 99, 60, 7, 255, 106, 58, 10, 255, 101, 60, 8, 255, 106, 59, 12, 255, 120, 59, 11, 255, 116, 61, 4, 255, 111, 60, 7, 255, 131, 66, 9, 255, 148, 68, 3, 255, 138, 62, 7, 255, 145, 70, 4, 255, 154, 68, 2, 255, 150, 70, 4, 255, 139, 70, 7, 255, 136, 62, 11, 255, 138, 62, 6, 255, 149, 67, 7, 255, 163, 75, 3, 255, 165, 76, 3, 255, 153, 69, 5, 255, 147, 69, 7, 255, 158, 73, 7, 255, 163, 70, 4, 255, 162, 75, 10, 255, 165, 81, 5, 255, 161, 78, 4, 255, 156, 80, 5, 255, 158, 79, 9, 255, 176, 81, 9, 255, 176, 87, 2, 255, 169, 87, 6, 255, 133, 71, 8, 255, 127, 69, 15, 255, 146, 78, 4, 255, 157, 86, 12, 255, 163, 86, 8, 255, 165, 87, 8, 255, 153, 83, 5, 255, 153, 83, 5, 255, 148, 84, 10, 255, 148, 86, 8, 255, 145, 85, 3, 255, 144, 83, 1, 255, 141, 81, 4, 255, 148, 88, 10, 255, 153, 85, 8, 255, 142, 82, 9, 255, 140, 82, 17, 255, 149, 87, 9, 255, 163, 92, 5, 255, 170, 90, 14, 255, 170, 85, 16, 255, 171, 88, 4, 255, 169, 89, 11, 255, 165, 88, 13, 255, 153, 87, 7, 255, 153, 90, 7, 255, 156, 90, 9, 255, 152, 89, 2, 255, 153, 89, 10, 255, 164, 91, 16, 255, 171, 94, 9, 255, 171, 94, 4, 255, 171, 96, 7, 255, 170, 93, 16, 255, 176, 100, 5, 255, 168, 100, 10, 255, 168, 101, 15, 255, 182, 106, 7, 255, 174, 104, 5, 255, 164, 99, 14, 255, 171, 103, 19, 255, 179, 113, 9, 255, 183, 116, 14, 255, 191, 119, 9, 255, 192, 118, 10, 255, 183, 110, 8, 255, 182, 107, 5, 255, 184, 105, 9, 255, 178, 105, 15, 255, 172, 108, 15, 255, 165, 104, 9, 255, 171, 105, 12, 255, 182, 108, 9, 255, 187, 109, 10, 255, 182, 109, 4, 255, 182, 110, 14, 255, 184, 107, 20, 255, 187, 104, 15, 255, 193, 109, 15, 255, 190, 107, 3, 255, 191, 106, 5, 255, 194, 107, 4, 255, 192, 105, 12, 255, 186, 105, 12, 255, 189, 116, 6, 255, 193, 124, 1, 255, 198, 128, 5, 255, 203, 132, 2, 255, 209, 133, 6, 255, 210, 135, 1, 255, 211, 139, 3, 255, 210, 135, 5, 255, 207, 130, 1, 255, 202, 128, 5, 255, 203, 126, 6, 255, 206, 131, 10, 255, 206, 135, 13, 255, 207, 137, 8, 255, 203, 132, 4, 255, 201, 125, 11, 255, 201, 123, 10, 255, 197, 116, 10, 255, 192, 113, 4, 255, 190, 112, 1, 255, 194, 113, 8, 255, 192, 108, 5, 255, 188, 105, 4, 255, 191, 109, 3, 255, 192, 110, 3, 255, 186, 106, 3, 255, 185, 104, 5, 255, 185, 104, 6, 255, 186, 103, 3, 255, 185, 103, 2, 255, 185, 102, 3, 255, 186, 104, 5, 255, 186, 104, 4, 255, 185, 104, 4, 255, 182, 101, 5, 255, 183, 97, 6, 255, 187, 102, 14, 255, 184, 110, 19, 255, 180, 108, 11, 255, 180, 103, 7, 255, 180, 106, 6, 255, 186, 104, 10, 255, 190, 100, 17, 255, 185, 101, 5, 255, 182, 87, 3, 255, 128, 57, 4, 255, 122, 58, 7, 255, 138, 70, 7, 255, 144, 81, 4, 255, 146, 79, 4, 255, 145, 78, 2, 255, 148, 81, 3, 255, 149, 78, 6, 255, 150, 79, 3, 255, 147, 77, 3, 255, 158, 86, 9, 255, 169, 95, 9, 255, 176, 101, 10, 255, 183, 105, 12, 255, 181, 101, 9, 255, 182, 98, 8, 255, 177, 95, 5, 255, 171, 86, 4, 255, 172, 85, 6, 255, 177, 88, 7, 255, 173, 86, 7, 255, 171, 86, 7, 255, 169, 84, 2, 255, 155, 78, 11, 255, 132, 64, 5, 255, 133, 64, 8, 255, 139, 74, 9, 255, 132, 64, 4, 255, 122, 57, 5, 255, 127, 59, 5, 255, 134, 67, 1, 255, 142, 71, 5, 255, 147, 70, 7, 255, 138, 65, 5, 255, 120, 64, 8, 255, 111, 49, 3, 255, 102, 37, 2, 255, 88, 31, 2, 255, 80, 33, 4, 255, 78, 30, 4, 255, 83, 31, 4, 255, 92, 43, 4, 255, 96, 46, 2, 255, 96, 39, 5, 255, 85, 39, 3, 255, 87, 44, 6, 255, 87, 39, 7, 255, 81, 33, 4, 255, 73, 28, 8, 255, 63, 21, 10, 255, 51, 15, 4, 255, 39, 13, 2, 255, 27, 9, 4, 255, 21, 12, 6, 255, 29, 16, 5, 255, 41, 16, 3, 255, 31, 15, 2, 255, 27, 12, 3, 255, 35, 9, 2, 255, 36, 15, 5, 255, 32, 13, 5, 255, 30, 12, 3, 255, 30, 12, 5, 255, 1, 0, 0, 255, 0, 0, 0, 255, 15, 45, 66, 255, 57, 138, 153, 255, 95, 182, 208, 255, 58, 173, 180, 255, 0, 31, 34, 255, 4, 0, 5, 255, 4, 9, 19, 255, 6, 26, 74, 255, 2, 43, 85, 255, 5, 26, 51, 255, 3, 0, 0, 255, 2, 2, 7, 255, 1, 2, 8, 255, 5, 1, 6, 255, 4, 1, 7, 255, 2, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 1, 0, 255, 0, 1, 3, 255, 2, 3, 5, 255, 2, 3, 5, 255, 2, 3, 5, 255, 2, 2, 6, 255, 1, 1, 6, 255, 3, 4, 9, 255, 3, 3, 10, 255, 0, 3, 8, 255, 1, 4, 9, 255, 1, 2, 9, 255, 0, 2, 8, 255, 2, 4, 9, 255, 2, 3, 7, 255, 0, 1, 5, 255, 2, 1, 6, 255, 2, 1, 6, 255, 1, 0, 6, 255, 1, 1, 3, 255, 1, 1, 3, 255, 0, 2, 3, 255, 1, 1, 10, 255, 5, 4, 19, 255, 1, 3, 5, 255, 2, 2, 18, 255, 1, 14, 30, 255, 7, 20, 55, 255, 8, 68, 195, 255, 3, 157, 204, 255, 7, 1, 18, 255, 7, 0, 13, 255, 1, 32, 201, 255, 17, 44, 73, 255, 29, 26, 10, 255, 22, 25, 25, 255, 18, 15, 14, 255, 15, 14, 11, 255, 10, 12, 7, 255, 7, 5, 2, 255, 9, 4, 6, 255, 8, 11, 7, 255, 14, 17, 10, 255, 15, 10, 7, 255, 8, 3, 1, 255, 8, 3, 0, 255, 8, 3, 2, 255, 4, 1, 0, 255, 2, 1, 0, 255, 3, 0, 2, 255, 1, 1, 2, 255, 0, 1, 0, 255, 1, 2, 2, 255, 0, 0, 0, 255, 2, 1, 1, 255, 3, 1, 1, 255, 5, 3, 3, 255, 6, 5, 1, 255, 9, 8, 2, 255, 11, 11, 5, 255, 11, 12, 7, 255, 12, 13, 5, 255, 17, 19, 4, 255, 20, 25, 6, 255, 19, 24, 9, 255, 21, 28, 10, 255, 22, 30, 14, 255, 23, 31, 21, 255, 25, 36, 20, 255, 24, 37, 14, 255, 28, 35, 16, 255, 32, 36, 20, 255, 30, 40, 26, 255, 33, 41, 22, 255, 38, 52, 18, 255, 36, 64, 24, 255, 50, 76, 34, 255, 55, 89, 56, 255, 66, 106, 72, 255, 74, 117, 83, 255, 76, 126, 79, 255, 80, 135, 82, 255, 88, 134, 78, 255, 83, 123, 64, 255, 80, 116, 48, 255, 80, 109, 56, 255, 81, 109, 42, 255, 80, 107, 33, 255, 78, 97, 32, 255, 79, 92, 26, 255, 73, 85, 21, 255, 70, 82, 15, 255, 72, 75, 7, 255, 66, 56, 14, 255, 63, 50, 18, 255, 58, 40, 5, 255, 46, 37, 5, 255, 43, 38, 5, 255, 63, 40, 7, 255, 65, 40, 5, 255, 59, 42, 4, 255, 58, 41, 3, 255, 63, 43, 2, 255, 75, 49, 3, 255, 84, 52, 6, 255, 77, 50, 3, 255, 67, 42, 5, 255, 70, 43, 8, 255, 68, 41, 2, 255, 70, 43, 5, 255, 76, 44, 4, 255, 84, 51, 4, 255, 85, 54, 5, 255, 83, 52, 1, 255, 87, 51, 4, 255, 92, 53, 6, 255, 91, 54, 6, 255, 86, 49, 7, 255, 82, 47, 2, 255, 78, 44, 4, 255, 77, 42, 11, 255, 76, 47, 3, 255, 72, 44, 2, 255, 79, 45, 8, 255, 83, 46, 5, 255, 81, 47, 7, 255, 79, 47, 4, 255, 78, 48, 9, 255, 77, 46, 7, 255, 81, 49, 7, 255, 88, 53, 9, 255, 87, 51, 7, 255, 87, 51, 7, 255, 85, 51, 5, 255, 85, 52, 4, 255, 89, 49, 7, 255, 91, 49, 10, 255, 93, 50, 8, 255, 95, 54, 6, 255, 94, 53, 4, 255, 95, 51, 3, 255, 99, 58, 3, 255, 102, 64, 9, 255, 97, 61, 13, 255, 96, 58, 11, 255, 100, 58, 6, 255, 97, 54, 5, 255, 99, 55, 9, 255, 99, 55, 3, 255, 99, 57, 2, 255, 101, 57, 8, 255, 105, 60, 2, 255, 103, 56, 5, 255, 102, 57, 5, 255, 106, 60, 6, 255, 107, 63, 5, 255, 105, 56, 9, 255, 106, 55, 8, 255, 97, 57, 5, 255, 104, 58, 10, 255, 104, 57, 9, 255, 105, 53, 11, 255, 102, 54, 8, 255, 100, 58, 6, 255, 98, 56, 4, 255, 96, 52, 11, 255, 101, 54, 10, 255, 105, 57, 6, 255, 104, 61, 9, 255, 109, 59, 5, 255, 106, 56, 3, 255, 99, 61, 7, 255, 100, 58, 8, 255, 129, 61, 11, 255, 125, 65, 8, 255, 101, 58, 4, 255, 104, 54, 9, 255, 103, 59, 11, 255, 105, 59, 10, 255, 109, 65, 7, 255, 110, 65, 1, 255, 111, 59, 2, 255, 115, 63, 1, 255, 116, 62, 5, 255, 130, 65, 6, 255, 125, 62, 3, 255, 102, 56, 13, 255, 112, 61, 17, 255, 106, 58, 9, 255, 115, 56, 11, 255, 117, 58, 4, 255, 123, 59, 3, 255, 137, 66, 10, 255, 135, 65, 5, 255, 143, 66, 6, 255, 149, 70, 6, 255, 153, 71, 10, 255, 154, 71, 7, 255, 157, 73, 5, 255, 161, 70, 10, 255, 157, 66, 13, 255, 163, 75, 6, 255, 167, 79, 2, 255, 164, 76, 3, 255, 159, 76, 6, 255, 159, 75, 12, 255, 163, 76, 3, 255, 173, 84, 14, 255, 174, 88, 9, 255, 158, 86, 5, 255, 149, 81, 2, 255, 139, 73, 3, 255, 145, 78, 3, 255, 159, 85, 9, 255, 163, 87, 13, 255, 165, 88, 8, 255, 159, 86, 8, 255, 154, 84, 8, 255, 153, 86, 7, 255, 146, 83, 6, 255, 153, 85, 7, 255, 169, 90, 9, 255, 173, 87, 6, 255, 161, 87, 2, 255, 158, 88, 9, 255, 168, 84, 13, 255, 170, 86, 11, 255, 168, 88, 9, 255, 167, 90, 7, 255, 160, 91, 8, 255, 154, 87, 10, 255, 153, 89, 9, 255, 147, 88, 5, 255, 151, 88, 8, 255, 155, 88, 10, 255, 157, 95, 5, 255, 164, 94, 11, 255, 165, 94, 8, 255, 164, 92, 9, 255, 167, 90, 14, 255, 171, 97, 8, 255, 169, 97, 8, 255, 171, 103, 7, 255, 165, 102, 11, 255, 170, 103, 15, 255, 180, 103, 7, 255, 168, 102, 13, 255, 160, 103, 10, 255, 171, 103, 14, 255, 185, 112, 16, 255, 189, 113, 3, 255, 194, 115, 10, 255, 191, 109, 4, 255, 190, 103, 5, 255, 188, 100, 9, 255, 188, 100, 10, 255, 188, 107, 16, 255, 179, 110, 7, 255, 169, 102, 7, 255, 176, 105, 15, 255, 188, 112, 6, 255, 188, 107, 8, 255, 179, 103, 12, 255, 174, 104, 12, 255, 176, 109, 7, 255, 183, 109, 11, 255, 191, 108, 12, 255, 193, 103, 7, 255, 192, 102, 10, 255, 192, 103, 5, 255, 191, 104, 8, 255, 186, 105, 4, 255, 189, 115, 4, 255, 193, 123, 7, 255, 196, 125, 2, 255, 201, 129, 0, 255, 208, 136, 6, 255, 212, 135, 3, 255, 217, 135, 4, 255, 215, 134, 5, 255, 208, 130, 2, 255, 203, 128, 10, 255, 202, 124, 8, 255, 207, 131, 16, 255, 206, 133, 17, 255, 203, 129, 15, 255, 204, 129, 19, 255, 202, 127, 7, 255, 199, 124, 12, 255, 193, 120, 8, 255, 187, 117, 5, 255, 185, 114, 7, 255, 192, 116, 7, 255, 189, 108, 2, 255, 181, 97, 1, 255, 189, 108, 3, 255, 192, 112, 6, 255, 184, 105, 1, 255, 187, 108, 7, 255, 184, 103, 4, 255, 187, 103, 2, 255, 186, 102, 1, 255, 183, 101, 1, 255, 185, 103, 2, 255, 185, 102, 4, 255, 182, 101, 5, 255, 183, 98, 3, 255, 180, 90, 3, 255, 185, 100, 14, 255, 185, 108, 14, 255, 186, 108, 8, 255, 187, 104, 4, 255, 188, 103, 6, 255, 188, 104, 6, 255, 185, 99, 12, 255, 186, 99, 6, 255, 156, 75, 6, 255, 138, 74, 6, 255, 141, 81, 5, 255, 155, 90, 10, 255, 149, 84, 8, 255, 142, 80, 8, 255, 142, 77, 5, 255, 147, 79, 6, 255, 149, 82, 4, 255, 146, 74, 0, 255, 153, 79, 7, 255, 172, 94, 15, 255, 177, 97, 14, 255, 177, 96, 10, 255, 180, 99, 10, 255, 180, 95, 4, 255, 179, 87, 6, 255, 173, 80, 7, 255, 166, 73, 8, 255, 168, 75, 7, 255, 173, 84, 8, 255, 166, 77, 4, 255, 163, 76, 9, 255, 160, 78, 8, 255, 148, 76, 8, 255, 135, 67, 4, 255, 131, 64, 2, 255, 132, 69, 3, 255, 139, 74, 13, 255, 131, 65, 5, 255, 128, 59, 1, 255, 131, 66, 2, 255, 135, 73, 6, 255, 138, 74, 6, 255, 136, 73, 6, 255, 125, 65, 7, 255, 110, 51, 4, 255, 101, 46, 2, 255, 94, 47, 6, 255, 88, 45, 9, 255, 79, 34, 5, 255, 76, 31, 7, 255, 68, 32, 6, 255, 67, 30, 7, 255, 65, 23, 4, 255, 66, 29, 0, 255, 71, 31, 1, 255, 74, 30, 5, 255, 64, 30, 2, 255, 48, 20, 1, 255, 34, 15, 4, 255, 33, 16, 6, 255, 41, 19, 4, 255, 47, 22, 2, 255, 54, 24, 9, 255, 56, 25, 8, 255, 65, 30, 6, 255, 57, 26, 4, 255, 40, 20, 3, 255, 40, 17, 3, 255, 39, 13, 1, 255, 32, 13, 4, 255, 27, 11, 2, 255, 26, 10, 3, 255, 0, 2, 2, 255, 1, 1, 3, 255, 1, 3, 3, 255, 35, 63, 86, 255, 111, 181, 217, 255, 121, 194, 201, 255, 25, 65, 90, 255, 0, 31, 85, 255, 2, 71, 128, 255, 5, 77, 161, 255, 3, 108, 183, 255, 4, 100, 155, 255, 5, 35, 51, 255, 0, 0, 4, 255, 1, 4, 3, 255, 4, 1, 6, 255, 3, 0, 6, 255, 3, 2, 1, 255, 0, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 3, 255, 1, 2, 5, 255, 0, 1, 5, 255, 1, 2, 6, 255, 2, 3, 7, 255, 2, 3, 7, 255, 2, 3, 7, 255, 1, 2, 5, 255, 1, 2, 6, 255, 1, 2, 7, 255, 2, 2, 9, 255, 2, 3, 7, 255, 1, 2, 6, 255, 2, 3, 7, 255, 1, 2, 6, 255, 1, 2, 6, 255, 3, 2, 7, 255, 1, 1, 7, 255, 1, 1, 4, 255, 2, 1, 0, 255, 0, 2, 5, 255, 1, 4, 15, 255, 1, 2, 12, 255, 3, 1, 4, 255, 2, 0, 5, 255, 5, 2, 9, 255, 6, 11, 82, 255, 4, 170, 243, 255, 8, 58, 106, 255, 11, 0, 0, 255, 4, 10, 132, 255, 7, 55, 164, 255, 20, 31, 15, 255, 20, 37, 48, 255, 26, 32, 31, 255, 18, 21, 17, 255, 20, 24, 26, 255, 11, 12, 4, 255, 6, 5, 0, 255, 8, 5, 8, 255, 9, 15, 15, 255, 13, 23, 17, 255, 12, 12, 13, 255, 6, 5, 1, 255, 8, 2, 1, 255, 8, 3, 3, 255, 4, 3, 1, 255, 3, 2, 0, 255, 2, 0, 2, 255, 1, 1, 2, 255, 1, 2, 1, 255, 3, 3, 3, 255, 0, 0, 0, 255, 2, 1, 1, 255, 4, 3, 0, 255, 6, 5, 1, 255, 9, 9, 5, 255, 10, 11, 4, 255, 11, 12, 4, 255, 15, 17, 9, 255, 11, 13, 3, 255, 20, 21, 7, 255, 21, 27, 12, 255, 18, 27, 10, 255, 23, 32, 12, 255, 29, 37, 14, 255, 25, 33, 10, 255, 22, 35, 15, 255, 25, 34, 18, 255, 28, 32, 13, 255, 26, 38, 14, 255, 32, 40, 19, 255, 37, 43, 22, 255, 37, 55, 30, 255, 41, 75, 31, 255, 59, 84, 44, 255, 59, 94, 64, 255, 68, 109, 70, 255, 78, 120, 82, 255, 78, 127, 84, 255, 85, 130, 74, 255, 87, 124, 56, 255, 79, 116, 49, 255, 77, 113, 37, 255, 80, 108, 37, 255, 82, 103, 37, 255, 82, 101, 32, 255, 79, 96, 31, 255, 76, 87, 23, 255, 76, 83, 14, 255, 73, 77, 16, 255, 70, 69, 6, 255, 66, 54, 13, 255, 58, 49, 8, 255, 50, 41, 7, 255, 45, 40, 6, 255, 52, 39, 3, 255, 61, 39, 2, 255, 64, 45, 3, 255, 59, 41, 4, 255, 61, 38, 9, 255, 70, 47, 5, 255, 77, 52, 0, 255, 77, 52, 4, 255, 72, 48, 6, 255, 68, 43, 7, 255, 72, 46, 1, 255, 69, 43, 4, 255, 64, 47, 0, 255, 71, 44, 4, 255, 84, 47, 2, 255, 87, 53, 4, 255, 86, 55, 5, 255, 86, 54, 2, 255, 84, 54, 3, 255, 86, 54, 5, 255, 82, 48, 6, 255, 80, 45, 9, 255, 80, 46, 9, 255, 76, 44, 5, 255, 78, 46, 6, 255, 80, 46, 4, 255, 79, 44, 5, 255, 82, 49, 9, 255, 81, 50, 5, 255, 79, 45, 6, 255, 79, 49, 5, 255, 84, 50, 6, 255, 87, 48, 4, 255, 90, 55, 6, 255, 91, 59, 6, 255, 89, 53, 4, 255, 93, 53, 9, 255, 88, 53, 7, 255, 93, 52, 8, 255, 95, 54, 5, 255, 97, 54, 4, 255, 95, 52, 7, 255, 96, 54, 13, 255, 92, 51, 10, 255, 97, 58, 5, 255, 103, 63, 7, 255, 102, 59, 7, 255, 101, 59, 5, 255, 101, 56, 7, 255, 96, 51, 6, 255, 100, 56, 8, 255, 99, 56, 7, 255, 102, 57, 8, 255, 104, 56, 5, 255, 104, 57, 8, 255, 99, 54, 4, 255, 107, 58, 8, 255, 108, 56, 6, 255, 112, 61, 3, 255, 110, 60, 4, 255, 109, 61, 12, 255, 102, 55, 9, 255, 105, 57, 12, 255, 109, 58, 12, 255, 107, 59, 8, 255, 105, 60, 6, 255, 103, 60, 6, 255, 99, 59, 6, 255, 95, 52, 4, 255, 101, 56, 9, 255, 104, 58, 4, 255, 101, 61, 6, 255, 100, 58, 6, 255, 120, 61, 9, 255, 117, 58, 4, 255, 104, 60, 3, 255, 121, 65, 9, 255, 112, 59, 9, 255, 99, 58, 4, 255, 103, 57, 18, 255, 101, 56, 9, 255, 102, 58, 1, 255, 115, 64, 2, 255, 115, 60, 13, 255, 119, 66, 7, 255, 122, 66, 7, 255, 125, 69, 2, 255, 121, 63, 6, 255, 102, 59, 3, 255, 90, 61, 9, 255, 98, 57, 9, 255, 101, 58, 6, 255, 101, 57, 16, 255, 123, 60, 9, 255, 131, 67, 1, 255, 137, 66, 8, 255, 145, 71, 0, 255, 137, 68, 13, 255, 137, 68, 12, 255, 150, 73, 5, 255, 162, 74, 5, 255, 165, 73, 2, 255, 158, 70, 0, 255, 155, 67, 10, 255, 153, 71, 4, 255, 161, 80, 0, 255, 165, 79, 4, 255, 167, 79, 7, 255, 161, 77, 11, 255, 157, 78, 5, 255, 158, 76, 3, 255, 164, 77, 11, 255, 171, 77, 11, 255, 169, 87, 8, 255, 164, 89, 6, 255, 162, 86, 11, 255, 155, 79, 3, 255, 163, 85, 4, 255, 165, 90, 10, 255, 166, 88, 6, 255, 170, 90, 10, 255, 165, 89, 6, 255, 157, 88, 2, 255, 150, 84, 7, 255, 148, 82, 6, 255, 158, 87, 7, 255, 164, 91, 5, 255, 168, 90, 5, 255, 168, 86, 11, 255, 165, 85, 9, 255, 164, 91, 2, 255, 159, 94, 7, 255, 153, 89, 8, 255, 152, 91, 10, 255, 148, 88, 9, 255, 152, 91, 7, 255, 156, 88, 10, 255, 158, 87, 11, 255, 162, 91, 7, 255, 169, 94, 6, 255, 165, 96, 4, 255, 162, 94, 8, 255, 167, 95, 12, 255, 169, 98, 6, 255, 169, 102, 7, 255, 174, 100, 6, 255, 171, 102, 3, 255, 173, 107, 9, 255, 179, 107, 12, 255, 168, 105, 7, 255, 165, 102, 2, 255, 180, 101, 8, 255, 190, 101, 10, 255, 198, 109, 3, 255, 191, 109, 5, 255, 185, 102, 8, 255, 186, 99, 12, 255, 182, 101, 9, 255, 181, 105, 6, 255, 178, 106, 11, 255, 169, 102, 9, 255, 165, 101, 7, 255, 173, 104, 10, 255, 182, 109, 18, 255, 179, 107, 14, 255, 176, 106, 12, 255, 176, 109, 7, 255, 177, 109, 6, 255, 183, 112, 8, 255, 188, 111, 11, 255, 188, 105, 9, 255, 192, 108, 3, 255, 196, 115, 5, 255, 188, 112, 8, 255, 188, 115, 3, 255, 193, 123, 2, 255, 195, 124, 6, 255, 198, 123, 7, 255, 202, 128, 2, 255, 207, 133, 1, 255, 214, 135, 5, 255, 218, 135, 6, 255, 196, 112, 8, 255, 192, 112, 2, 255, 204, 126, 3, 255, 207, 126, 6, 255, 204, 125, 6, 255, 208, 134, 12, 255, 206, 134, 15, 255, 200, 128, 12, 255, 199, 123, 8, 255, 200, 123, 11, 255, 195, 120, 7, 255, 191, 117, 3, 255, 192, 115, 6, 255, 192, 114, 5, 255, 192, 112, 4, 255, 192, 109, 6, 255, 192, 110, 4, 255, 189, 109, 2, 255, 185, 106, 0, 255, 185, 106, 2, 255, 186, 104, 4, 255, 187, 102, 4, 255, 186, 104, 4, 255, 183, 102, 2, 255, 184, 101, 3, 255, 183, 99, 4, 255, 179, 96, 3, 255, 186, 103, 5, 255, 184, 101, 6, 255, 186, 108, 11, 255, 186, 111, 6, 255, 184, 105, 7, 255, 187, 104, 5, 255, 186, 100, 3, 255, 178, 98, 3, 255, 179, 99, 4, 255, 179, 93, 13, 255, 169, 94, 11, 255, 162, 97, 6, 255, 160, 88, 8, 255, 154, 86, 5, 255, 148, 86, 5, 255, 143, 78, 1, 255, 153, 84, 6, 255, 163, 90, 13, 255, 160, 87, 14, 255, 153, 82, 10, 255, 162, 88, 7, 255, 172, 92, 5, 255, 180, 97, 6, 255, 180, 96, 8, 255, 183, 97, 14, 255, 176, 90, 7, 255, 175, 83, 9, 255, 167, 74, 7, 255, 166, 73, 4, 255, 169, 80, 0, 255, 170, 86, 0, 255, 165, 82, 4, 255, 155, 73, 6, 255, 146, 71, 6, 255, 138, 69, 5, 255, 136, 68, 4, 255, 136, 67, 3, 255, 134, 67, 6, 255, 136, 72, 8, 255, 139, 71, 11, 255, 134, 67, 15, 255, 133, 68, 10, 255, 133, 72, 7, 255, 128, 68, 6, 255, 130, 69, 5, 255, 128, 73, 2, 255, 120, 64, 6, 255, 113, 59, 6, 255, 106, 59, 9, 255, 106, 62, 5, 255, 111, 64, 3, 255, 107, 57, 3, 255, 97, 51, 7, 255, 85, 44, 6, 255, 78, 36, 10, 255, 71, 28, 6, 255, 65, 25, 4, 255, 61, 26, 3, 255, 73, 28, 1, 255, 70, 35, 5, 255, 68, 39, 7, 255, 65, 36, 4, 255, 75, 41, 7, 255, 84, 43, 8, 255, 82, 40, 4, 255, 83, 38, 5, 255, 79, 40, 5, 255, 72, 39, 3, 255, 68, 31, 2, 255, 65, 29, 5, 255, 54, 28, 5, 255, 46, 19, 5, 255, 35, 15, 5, 255, 27, 12, 3, 255, 1, 2, 2, 255, 3, 0, 1, 255, 4, 0, 0, 255, 0, 0, 3, 255, 37, 70, 86, 255, 105, 147, 174, 255, 100, 129, 151, 255, 34, 70, 102, 255, 9, 87, 157, 255, 2, 113, 183, 255, 5, 132, 190, 255, 2, 125, 181, 255, 2, 51, 85, 255, 1, 1, 10, 255, 3, 3, 7, 255, 4, 4, 9, 255, 0, 2, 4, 255, 2, 2, 1, 255, 1, 2, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 1, 2, 5, 255, 1, 2, 7, 255, 1, 2, 7, 255, 1, 2, 8, 255, 1, 3, 6, 255, 1, 2, 6, 255, 1, 2, 6, 255, 1, 2, 7, 255, 2, 3, 8, 255, 2, 3, 8, 255, 0, 1, 4, 255, 0, 0, 4, 255, 1, 2, 6, 255, 2, 3, 7, 255, 2, 3, 7, 255, 1, 1, 7, 255, 0, 2, 3, 255, 0, 0, 5, 255, 0, 1, 1, 255, 1, 3, 5, 255, 0, 2, 17, 255, 2, 2, 12, 255, 3, 2, 7, 255, 2, 5, 4, 255, 4, 0, 1, 255, 3, 100, 189, 255, 4, 144, 204, 255, 13, 0, 0, 255, 8, 2, 42, 255, 2, 39, 219, 255, 18, 40, 51, 255, 29, 25, 25, 255, 26, 30, 33, 255, 23, 25, 19, 255, 25, 28, 27, 255, 22, 31, 28, 255, 9, 17, 17, 255, 6, 9, 3, 255, 7, 5, 2, 255, 14, 17, 14, 255, 18, 26, 19, 255, 15, 17, 13, 255, 10, 8, 4, 255, 8, 3, 1, 255, 7, 2, 2, 255, 6, 2, 1, 255, 4, 3, 1, 255, 4, 2, 1, 255, 5, 1, 1, 255, 2, 1, 0, 255, 3, 3, 3, 255, 2, 2, 1, 255, 2, 2, 0, 255, 6, 5, 1, 255, 11, 8, 4, 255, 9, 8, 3, 255, 9, 11, 2, 255, 12, 14, 3, 255, 13, 15, 3, 255, 17, 19, 5, 255, 22, 24, 8, 255, 15, 26, 7, 255, 15, 29, 12, 255, 16, 28, 14, 255, 23, 35, 13, 255, 24, 34, 7, 255, 20, 32, 10, 255, 25, 31, 19, 255, 28, 33, 17, 255, 28, 39, 23, 255, 34, 43, 22, 255, 34, 53, 18, 255, 37, 65, 32, 255, 47, 79, 36, 255, 59, 90, 50, 255, 65, 104, 60, 255, 70, 110, 65, 255, 83, 123, 66, 255, 85, 124, 72, 255, 88, 124, 57, 255, 84, 114, 55, 255, 78, 107, 48, 255, 78, 102, 51, 255, 82, 104, 33, 255, 82, 101, 23, 255, 83, 95, 22, 255, 77, 87, 27, 255, 73, 85, 25, 255, 76, 83, 16, 255, 77, 76, 15, 255, 71, 66, 13, 255, 63, 63, 4, 255, 53, 49, 4, 255, 51, 40, 9, 255, 56, 40, 7, 255, 59, 38, 5, 255, 67, 41, 5, 255, 70, 42, 4, 255, 58, 37, 2, 255, 62, 44, 5, 255, 80, 52, 6, 255, 84, 50, 5, 255, 85, 48, 4, 255, 82, 50, 2, 255, 74, 46, 4, 255, 69, 41, 2, 255, 70, 47, 6, 255, 65, 49, 3, 255, 73, 48, 7, 255, 86, 50, 6, 255, 87, 50, 5, 255, 87, 54, 7, 255, 91, 56, 4, 255, 88, 52, 9, 255, 83, 51, 7, 255, 82, 49, 3, 255, 80, 44, 12, 255, 77, 41, 11, 255, 77, 44, 0, 255, 79, 46, 5, 255, 84, 46, 8, 255, 82, 46, 5, 255, 79, 48, 5, 255, 77, 46, 7, 255, 81, 44, 6, 255, 83, 47, 10, 255, 87, 49, 11, 255, 88, 50, 10, 255, 88, 52, 8, 255, 89, 52, 6, 255, 93, 52, 6, 255, 90, 54, 4, 255, 82, 53, 6, 255, 90, 52, 12, 255, 90, 53, 8, 255, 95, 56, 4, 255, 96, 57, 4, 255, 95, 56, 8, 255, 97, 55, 12, 255, 99, 56, 7, 255, 103, 58, 5, 255, 103, 58, 10, 255, 101, 58, 4, 255, 99, 59, 2, 255, 98, 56, 4, 255, 102, 59, 6, 255, 100, 57, 6, 255, 100, 55, 9, 255, 103, 57, 6, 255, 103, 56, 13, 255, 105, 58, 10, 255, 109, 58, 10, 255, 106, 55, 1, 255, 109, 56, 7, 255, 111, 58, 5, 255, 110, 59, 9, 255, 106, 56, 9, 255, 107, 57, 2, 255, 107, 57, 6, 255, 107, 56, 7, 255, 103, 57, 5, 255, 104, 57, 3, 255, 105, 58, 5, 255, 93, 58, 4, 255, 95, 59, 9, 255, 102, 60, 11, 255, 96, 57, 3, 255, 106, 61, 7, 255, 109, 62, 12, 255, 104, 55, 8, 255, 106, 57, 8, 255, 102, 61, 8, 255, 98, 58, 8, 255, 98, 61, 9, 255, 100, 53, 15, 255, 117, 66, 7, 255, 123, 66, 3, 255, 118, 64, 10, 255, 113, 63, 13, 255, 114, 70, 2, 255, 119, 68, 6, 255, 120, 64, 11, 255, 107, 58, 11, 255, 107, 63, 12, 255, 106, 66, 8, 255, 110, 62, 2, 255, 134, 65, 8, 255, 140, 68, 10, 255, 152, 73, 6, 255, 166, 81, 5, 255, 151, 66, 15, 255, 149, 67, 6, 255, 143, 74, 2, 255, 137, 69, 5, 255, 153, 74, 14, 255, 167, 81, 10, 255, 162, 72, 4, 255, 158, 69, 5, 255, 159, 77, 6, 255, 156, 76, 2, 255, 163, 79, 4, 255, 172, 83, 4, 255, 171, 84, 5, 255, 167, 83, 4, 255, 164, 82, 4, 255, 164, 82, 4, 255, 159, 77, 4, 255, 154, 76, 6, 255, 164, 78, 10, 255, 176, 86, 14, 255, 172, 86, 3, 255, 158, 85, 8, 255, 146, 80, 12, 255, 150, 79, 6, 255, 158, 83, 3, 255, 163, 85, 7, 255, 170, 94, 13, 255, 166, 93, 6, 255, 158, 87, 13, 255, 157, 89, 7, 255, 160, 92, 9, 255, 154, 89, 12, 255, 157, 92, 8, 255, 162, 93, 6, 255, 161, 90, 4, 255, 161, 91, 4, 255, 165, 94, 11, 255, 157, 92, 13, 255, 147, 90, 8, 255, 147, 90, 6, 255, 151, 90, 5, 255, 155, 87, 7, 255, 162, 89, 11, 255, 164, 90, 6, 255, 168, 92, 5, 255, 167, 94, 8, 255, 167, 96, 12, 255, 168, 98, 11, 255, 168, 98, 1, 255, 169, 102, 6, 255, 168, 101, 11, 255, 165, 105, 2, 255, 172, 110, 0, 255, 179, 103, 8, 255, 178, 103, 12, 255, 177, 100, 8, 255, 185, 99, 2, 255, 189, 105, 12, 255, 195, 111, 10, 255, 195, 117, 7, 255, 194, 117, 12, 255, 188, 112, 12, 255, 178, 108, 9, 255, 173, 107, 12, 255, 167, 104, 16, 255, 163, 104, 11, 255, 165, 105, 11, 255, 169, 105, 9, 255, 172, 107, 13, 255, 173, 107, 13, 255, 172, 109, 1, 255, 175, 108, 9, 255, 181, 111, 8, 255, 185, 113, 7, 255, 185, 113, 6, 255, 187, 113, 10, 255, 191, 111, 10, 255, 194, 118, 10, 255, 190, 116, 12, 255, 189, 119, 7, 255, 194, 124, 4, 255, 195, 126, 4, 255, 199, 125, 10, 255, 203, 129, 5, 255, 205, 131, 4, 255, 213, 134, 6, 255, 217, 139, 3, 255, 209, 129, 15, 255, 204, 130, 7, 255, 201, 131, 3, 255, 203, 128, 1, 255, 206, 131, 3, 255, 211, 135, 14, 255, 208, 131, 16, 255, 206, 127, 12, 255, 203, 128, 9, 255, 199, 125, 4, 255, 196, 120, 5, 255, 192, 114, 5, 255, 194, 114, 4, 255, 193, 110, 3, 255, 194, 109, 3, 255, 191, 110, 3, 255, 191, 110, 2, 255, 192, 111, 3, 255, 190, 109, 3, 255, 188, 107, 5, 255, 186, 104, 4, 255, 184, 102, 1, 255, 185, 104, 5, 255, 182, 100, 5, 255, 183, 98, 5, 255, 186, 100, 4, 255, 183, 100, 1, 255, 184, 103, 5, 255, 186, 107, 12, 255, 186, 108, 11, 255, 184, 110, 10, 255, 179, 103, 14, 255, 180, 103, 14, 255, 175, 101, 8, 255, 169, 98, 14, 255, 176, 104, 19, 255, 177, 107, 9, 255, 166, 100, 16, 255, 148, 84, 19, 255, 155, 90, 12, 255, 153, 92, 5, 255, 153, 91, 6, 255, 164, 99, 13, 255, 168, 99, 11, 255, 166, 92, 9, 255, 159, 87, 12, 255, 155, 83, 7, 255, 162, 86, 3, 255, 173, 92, 6, 255, 175, 92, 5, 255, 176, 92, 8, 255, 178, 92, 11, 255, 181, 92, 11, 255, 176, 92, 8, 255, 168, 82, 4, 255, 166, 81, 7, 255, 163, 81, 7, 255, 159, 80, 7, 255, 154, 78, 6, 255, 148, 73, 6, 255, 147, 71, 9, 255, 143, 69, 11, 255, 139, 69, 9, 255, 136, 69, 6, 255, 137, 72, 6, 255, 141, 75, 8, 255, 136, 68, 6, 255, 126, 57, 17, 255, 119, 54, 7, 255, 125, 65, 0, 255, 124, 68, 3, 255, 117, 62, 11, 255, 115, 59, 7, 255, 115, 60, 10, 255, 112, 59, 9, 255, 107, 56, 7, 255, 112, 62, 2, 255, 117, 65, 1, 255, 112, 56, 4, 255, 108, 56, 5, 255, 106, 56, 3, 255, 103, 56, 8, 255, 90, 43, 4, 255, 84, 40, 4, 255, 87, 46, 4, 255, 95, 45, 6, 255, 98, 49, 7, 255, 97, 49, 5, 255, 93, 45, 3, 255, 91, 45, 8, 255, 85, 43, 10, 255, 77, 37, 5, 255, 79, 39, 4, 255, 80, 42, 2, 255, 82, 44, 3, 255, 87, 41, 3, 255, 85, 35, 2, 255, 79, 35, 5, 255, 66, 29, 7, 255, 55, 22, 4, 255, 47, 19, 4, 255, 0, 0, 5, 255, 0, 1, 0, 255, 3, 1, 1, 255, 2, 1, 3, 255, 0, 0, 0, 255, 0, 6, 14, 255, 83, 75, 111, 255, 153, 139, 152, 255, 91, 104, 136, 255, 22, 117, 183, 255, 2, 103, 147, 255, 5, 66, 95, 255, 9, 36, 88, 255, 12, 78, 95, 255, 3, 41, 35, 255, 2, 0, 4, 255, 6, 1, 5, 255, 4, 0, 5, 255, 0, 1, 5, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 1, 255, 2, 1, 5, 255, 2, 3, 8, 255, 3, 3, 11, 255, 1, 3, 9, 255, 1, 2, 6, 255, 2, 3, 7, 255, 2, 3, 7, 255, 2, 3, 7, 255, 2, 3, 8, 255, 2, 3, 8, 255, 1, 1, 2, 255, 4, 5, 8, 255, 2, 3, 7, 255, 0, 1, 5, 255, 2, 3, 8, 255, 2, 3, 8, 255, 1, 2, 8, 255, 0, 2, 4, 255, 1, 4, 4, 255, 0, 3, 12, 255, 0, 2, 13, 255, 1, 1, 6, 255, 1, 2, 14, 255, 1, 0, 0, 255, 6, 8, 90, 255, 3, 161, 245, 255, 10, 24, 68, 255, 8, 0, 0, 255, 1, 26, 169, 255, 7, 41, 140, 255, 31, 25, 8, 255, 28, 32, 26, 255, 26, 23, 18, 255, 22, 25, 25, 255, 28, 26, 31, 255, 27, 30, 32, 255, 21, 32, 32, 255, 7, 13, 6, 255, 8, 7, 2, 255, 8, 6, 5, 255, 18, 20, 20, 255, 24, 24, 25, 255, 11, 12, 6, 255, 7, 5, 2, 255, 8, 3, 3, 255, 7, 3, 2, 255, 3, 2, 0, 255, 5, 3, 1, 255, 8, 2, 2, 255, 5, 0, 0, 255, 3, 2, 0, 255, 3, 3, 1, 255, 3, 5, 0, 255, 6, 5, 0, 255, 13, 10, 4, 255, 9, 9, 4, 255, 10, 11, 3, 255, 15, 17, 7, 255, 16, 19, 8, 255, 18, 22, 7, 255, 20, 24, 8, 255, 22, 28, 12, 255, 19, 27, 10, 255, 19, 27, 13, 255, 25, 31, 14, 255, 29, 32, 8, 255, 31, 34, 12, 255, 28, 33, 15, 255, 29, 34, 13, 255, 35, 39, 22, 255, 31, 50, 16, 255, 34, 60, 20, 255, 46, 73, 37, 255, 53, 84, 45, 255, 65, 93, 48, 255, 73, 106, 48, 255, 78, 115, 59, 255, 83, 122, 60, 255, 83, 121, 62, 255, 82, 118, 60, 255, 82, 110, 51, 255, 80, 106, 27, 255, 83, 101, 40, 255, 83, 98, 37, 255, 83, 92, 43, 255, 80, 88, 28, 255, 76, 82, 14, 255, 72, 79, 25, 255, 64, 78, 17, 255, 75, 74, 2, 255, 75, 64, 3, 255, 56, 56, 2, 255, 46, 49, 7, 255, 49, 40, 6, 255, 52, 38, 4, 255, 62, 42, 8, 255, 68, 43, 8, 255, 64, 39, 2, 255, 60, 39, 2, 255, 71, 46, 6, 255, 82, 51, 4, 255, 87, 53, 4, 255, 85, 53, 4, 255, 73, 50, 2, 255, 65, 47, 1, 255, 65, 48, 5, 255, 65, 46, 2, 255, 72, 47, 1, 255, 80, 49, 7, 255, 84, 53, 6, 255, 83, 52, 5, 255, 86, 52, 5, 255, 90, 52, 8, 255, 85, 48, 5, 255, 81, 48, 5, 255, 81, 48, 4, 255, 81, 47, 2, 255, 82, 45, 6, 255, 79, 43, 7, 255, 80, 46, 3, 255, 83, 43, 7, 255, 84, 50, 6, 255, 70, 45, 1, 255, 75, 48, 9, 255, 85, 47, 9, 255, 86, 46, 10, 255, 83, 49, 6, 255, 87, 54, 8, 255, 85, 50, 9, 255, 89, 50, 12, 255, 94, 53, 7, 255, 93, 52, 3, 255, 90, 54, 6, 255, 91, 50, 1, 255, 94, 54, 4, 255, 97, 54, 7, 255, 93, 52, 7, 255, 94, 54, 8, 255, 100, 58, 5, 255, 103, 59, 1, 255, 106, 61, 8, 255, 105, 60, 5, 255, 100, 58, 6, 255, 97, 59, 6, 255, 101, 62, 0, 255, 105, 60, 2, 255, 105, 60, 7, 255, 101, 57, 3, 255, 104, 57, 9, 255, 103, 57, 2, 255, 106, 58, 7, 255, 106, 55, 7, 255, 108, 57, 6, 255, 109, 57, 10, 255, 110, 57, 7, 255, 109, 57, 4, 255, 113, 62, 9, 255, 110, 58, 11, 255, 110, 59, 11, 255, 107, 61, 6, 255, 111, 63, 6, 255, 102, 56, 1, 255, 106, 56, 4, 255, 117, 57, 13, 255, 111, 50, 11, 255, 107, 55, 12, 255, 107, 58, 11, 255, 124, 66, 9, 255, 114, 61, 4, 255, 108, 57, 9, 255, 105, 57, 9, 255, 114, 56, 9, 255, 121, 63, 19, 255, 95, 56, 5, 255, 102, 58, 8, 255, 129, 66, 10, 255, 139, 67, 4, 255, 116, 66, 6, 255, 114, 67, 2, 255, 118, 63, 9, 255, 121, 65, 6, 255, 123, 72, 11, 255, 120, 70, 2, 255, 122, 66, 5, 255, 113, 66, 2, 255, 118, 59, 4, 255, 136, 63, 8, 255, 123, 58, 1, 255, 125, 58, 15, 255, 137, 68, 9, 255, 143, 69, 3, 255, 149, 71, 14, 255, 173, 83, 12, 255, 170, 78, 2, 255, 151, 70, 11, 255, 154, 75, 8, 255, 160, 76, 5, 255, 160, 71, 6, 255, 164, 77, 3, 255, 165, 80, 6, 255, 165, 77, 9, 255, 168, 80, 4, 255, 158, 76, 3, 255, 160, 77, 6, 255, 159, 72, 6, 255, 159, 70, 13, 255, 162, 79, 12, 255, 150, 77, 6, 255, 155, 79, 7, 255, 159, 80, 7, 255, 164, 84, 10, 255, 178, 87, 10, 255, 173, 85, 12, 255, 152, 84, 12, 255, 145, 83, 5, 255, 156, 80, 6, 255, 167, 88, 7, 255, 172, 91, 5, 255, 172, 92, 11, 255, 167, 91, 2, 255, 166, 93, 4, 255, 166, 93, 11, 255, 164, 93, 5, 255, 164, 93, 7, 255, 166, 93, 16, 255, 163, 90, 11, 255, 160, 89, 3, 255, 159, 87, 5, 255, 158, 87, 9, 255, 156, 90, 6, 255, 153, 90, 4, 255, 155, 90, 8, 255, 158, 92, 10, 255, 160, 95, 7, 255, 164, 93, 7, 255, 165, 96, 4, 255, 167, 99, 5, 255, 167, 97, 8, 255, 169, 98, 9, 255, 172, 101, 4, 255, 174, 102, 13, 255, 171, 102, 12, 255, 177, 106, 4, 255, 181, 106, 7, 255, 177, 107, 14, 255, 171, 103, 13, 255, 177, 108, 2, 255, 183, 113, 12, 255, 189, 115, 12, 255, 195, 122, 5, 255, 195, 120, 9, 255, 186, 111, 6, 255, 181, 108, 12, 255, 174, 105, 18, 255, 170, 104, 9, 255, 168, 104, 4, 255, 173, 106, 6, 255, 174, 103, 7, 255, 176, 106, 8, 255, 177, 108, 7, 255, 179, 107, 10, 255, 180, 109, 9, 255, 183, 110, 15, 255, 182, 110, 16, 255, 184, 111, 15, 255, 186, 114, 13, 255, 189, 114, 18, 255, 186, 116, 4, 255, 186, 116, 6, 255, 189, 118, 9, 255, 189, 119, 5, 255, 195, 125, 3, 255, 201, 129, 1, 255, 206, 131, 0, 255, 210, 131, 6, 255, 215, 135, 7, 255, 215, 137, 1, 255, 212, 134, 3, 255, 208, 133, 1, 255, 204, 127, 4, 255, 205, 127, 4, 255, 206, 131, 4, 255, 212, 139, 11, 255, 210, 137, 7, 255, 205, 129, 6, 255, 201, 128, 7, 255, 198, 126, 4, 255, 197, 123, 14, 255, 192, 117, 16, 255, 192, 117, 9, 255, 191, 115, 0, 255, 193, 116, 1, 255, 192, 112, 2, 255, 189, 109, 0, 255, 192, 111, 3, 255, 191, 110, 4, 255, 188, 106, 4, 255, 184, 101, 3, 255, 184, 103, 4, 255, 182, 102, 4, 255, 179, 99, 3, 255, 182, 100, 5, 255, 185, 103, 6, 255, 184, 104, 5, 255, 180, 102, 1, 255, 184, 105, 8, 255, 184, 107, 8, 255, 184, 110, 10, 255, 183, 109, 17, 255, 179, 110, 18, 255, 175, 108, 14, 255, 173, 107, 24, 255, 177, 111, 20, 255, 177, 111, 18, 255, 171, 105, 23, 255, 167, 107, 14, 255, 168, 108, 0, 255, 169, 103, 9, 255, 161, 96, 7, 255, 158, 95, 8, 255, 154, 89, 7, 255, 154, 87, 8, 255, 158, 84, 10, 255, 156, 81, 4, 255, 160, 83, 1, 255, 163, 82, 3, 255, 167, 84, 7, 255, 164, 81, 7, 255, 166, 82, 9, 255, 167, 81, 10, 255, 157, 75, 7, 255, 157, 75, 4, 255, 158, 78, 5, 255, 153, 74, 7, 255, 149, 70, 9, 255, 149, 73, 14, 255, 144, 73, 8, 255, 145, 72, 6, 255, 145, 65, 9, 255, 137, 63, 7, 255, 132, 66, 5, 255, 133, 68, 3, 255, 138, 69, 5, 255, 137, 71, 6, 255, 134, 69, 6, 255, 127, 64, 2, 255, 125, 64, 3, 255, 122, 65, 5, 255, 118, 64, 2, 255, 112, 60, 0, 255, 107, 54, 5, 255, 104, 54, 1, 255, 105, 57, 2, 255, 107, 58, 8, 255, 110, 58, 7, 255, 103, 52, 8, 255, 99, 53, 8, 255, 99, 54, 6, 255, 105, 60, 6, 255, 104, 59, 7, 255, 102, 57, 6, 255, 101, 57, 6, 255, 102, 55, 9, 255, 102, 52, 7, 255, 95, 48, 2, 255, 95, 47, 4, 255, 90, 41, 4, 255, 80, 40, 6, 255, 83, 37, 4, 255, 92, 42, 6, 255, 92, 47, 5, 255, 91, 46, 4, 255, 87, 42, 1, 255, 84, 39, 2, 255, 80, 37, 4, 255, 75, 32, 8, 255, 68, 29, 3, 255, 68, 30, 3, 255, 1, 1, 4, 255, 2, 1, 0, 255, 1, 3, 2, 255, 4, 0, 2, 255, 4, 1, 2, 255, 2, 0, 0, 255, 11, 5, 12, 255, 57, 57, 69, 255, 46, 38, 51, 255, 24, 100, 144, 255, 0, 97, 130, 255, 8, 51, 89, 255, 29, 123, 155, 255, 11, 105, 113, 255, 1, 34, 28, 255, 4, 6, 3, 255, 1, 0, 1, 255, 2, 2, 1, 255, 3, 1, 4, 255, 1, 1, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 0, 3, 255, 0, 1, 6, 255, 2, 3, 10, 255, 2, 5, 10, 255, 1, 2, 6, 255, 3, 4, 8, 255, 2, 3, 8, 255, 2, 3, 6, 255, 2, 3, 7, 255, 2, 3, 7, 255, 1, 2, 3, 255, 3, 4, 7, 255, 1, 2, 6, 255, 1, 2, 6, 255, 0, 1, 6, 255, 2, 3, 8, 255, 3, 3, 9, 255, 1, 5, 6, 255, 1, 4, 12, 255, 1, 3, 14, 255, 0, 1, 7, 255, 0, 0, 10, 255, 1, 2, 2, 255, 5, 0, 7, 255, 3, 106, 193, 255, 1, 87, 161, 255, 13, 1, 0, 255, 8, 5, 74, 255, 8, 33, 201, 255, 15, 22, 31, 255, 27, 31, 25, 255, 30, 28, 26, 255, 22, 26, 22, 255, 23, 30, 20, 255, 23, 26, 26, 255, 19, 25, 24, 255, 21, 24, 33, 255, 17, 22, 24, 255, 13, 9, 7, 255, 12, 8, 3, 255, 14, 16, 11, 255, 19, 22, 18, 255, 16, 18, 14, 255, 10, 7, 5, 255, 7, 2, 1, 255, 7, 2, 3, 255, 6, 2, 1, 255, 5, 1, 0, 255, 8, 3, 1, 255, 7, 2, 0, 255, 4, 3, 1, 255, 5, 5, 2, 255, 7, 7, 2, 255, 7, 7, 0, 255, 10, 9, 0, 255, 9, 10, 4, 255, 13, 14, 6, 255, 12, 13, 5, 255, 16, 19, 7, 255, 14, 18, 4, 255, 19, 23, 9, 255, 20, 24, 13, 255, 22, 28, 9, 255, 19, 26, 7, 255, 23, 25, 13, 255, 27, 29, 10, 255, 29, 32, 8, 255, 31, 36, 12, 255, 29, 37, 8, 255, 35, 47, 14, 255, 38, 55, 18, 255, 48, 69, 33, 255, 52, 80, 27, 255, 59, 87, 47, 255, 66, 98, 54, 255, 73, 106, 55, 255, 80, 117, 57, 255, 83, 118, 57, 255, 86, 114, 58, 255, 82, 105, 61, 255, 78, 102, 41, 255, 78, 100, 34, 255, 82, 99, 26, 255, 85, 99, 29, 255, 80, 92, 20, 255, 79, 84, 22, 255, 76, 80, 18, 255, 71, 80, 21, 255, 64, 78, 11, 255, 74, 72, 4, 255, 74, 64, 8, 255, 53, 52, 8, 255, 48, 46, 3, 255, 55, 41, 6, 255, 48, 41, 4, 255, 58, 45, 6, 255, 64, 40, 4, 255, 59, 42, 2, 255, 69, 46, 6, 255, 76, 50, 4, 255, 75, 55, 3, 255, 84, 54, 5, 255, 84, 54, 3, 255, 75, 51, 2, 255, 68, 48, 0, 255, 66, 46, 4, 255, 74, 48, 4, 255, 80, 48, 1, 255, 81, 48, 3, 255, 83, 52, 1, 255, 85, 54, 5, 255, 83, 53, 3, 255, 84, 51, 3, 255, 84, 50, 4, 255, 80, 48, 2, 255, 79, 46, 6, 255, 83, 47, 3, 255, 85, 48, 2, 255, 84, 48, 7, 255, 77, 45, 1, 255, 80, 43, 4, 255, 82, 48, 4, 255, 76, 48, 2, 255, 77, 46, 6, 255, 87, 49, 10, 255, 87, 56, 4, 255, 87, 53, 4, 255, 85, 49, 4, 255, 86, 55, 4, 255, 91, 61, 8, 255, 92, 52, 5, 255, 98, 52, 8, 255, 95, 53, 4, 255, 96, 52, 3, 255, 95, 54, 3, 255, 99, 56, 7, 255, 96, 56, 9, 255, 93, 53, 11, 255, 96, 57, 5, 255, 97, 56, 6, 255, 105, 59, 9, 255, 105, 58, 7, 255, 103, 58, 10, 255, 99, 57, 6, 255, 104, 59, 4, 255, 105, 59, 5, 255, 106, 60, 10, 255, 103, 57, 8, 255, 106, 59, 9, 255, 106, 59, 5, 255, 109, 62, 5, 255, 110, 60, 9, 255, 109, 59, 14, 255, 109, 59, 4, 255, 112, 61, 10, 255, 110, 58, 7, 255, 113, 61, 2, 255, 107, 53, 14, 255, 110, 59, 12, 255, 110, 57, 1, 255, 105, 60, 7, 255, 108, 61, 14, 255, 123, 59, 7, 255, 133, 65, 6, 255, 118, 60, 6, 255, 104, 56, 3, 255, 115, 60, 3, 255, 134, 62, 9, 255, 126, 62, 6, 255, 111, 56, 8, 255, 103, 57, 6, 255, 116, 64, 4, 255, 126, 60, 11, 255, 121, 58, 6, 255, 138, 74, 10, 255, 130, 66, 6, 255, 128, 65, 9, 255, 115, 66, 6, 255, 115, 68, 3, 255, 121, 69, 11, 255, 125, 68, 3, 255, 127, 71, 5, 255, 124, 70, 8, 255, 116, 65, 7, 255, 120, 70, 7, 255, 120, 69, 8, 255, 107, 64, 2, 255, 114, 66, 2, 255, 113, 61, 14, 255, 129, 65, 7, 255, 136, 67, 3, 255, 141, 62, 10, 255, 151, 69, 7, 255, 155, 74, 10, 255, 138, 63, 10, 255, 143, 68, 8, 255, 157, 75, 2, 255, 160, 74, 2, 255, 162, 75, 3, 255, 165, 81, 8, 255, 160, 77, 5, 255, 156, 74, 1, 255, 151, 71, 7, 255, 152, 73, 12, 255, 155, 75, 7, 255, 158, 76, 5, 255, 164, 80, 8, 255, 161, 76, 10, 255, 159, 80, 10, 255, 157, 77, 8, 255, 162, 80, 12, 255, 162, 84, 15, 255, 173, 91, 9, 255, 180, 90, 3, 255, 167, 83, 5, 255, 161, 88, 7, 255, 162, 85, 0, 255, 159, 82, 2, 255, 163, 86, 5, 255, 172, 95, 6, 255, 175, 96, 9, 255, 175, 93, 9, 255, 172, 93, 3, 255, 166, 92, 5, 255, 161, 90, 13, 255, 157, 88, 10, 255, 159, 91, 5, 255, 161, 90, 4, 255, 163, 91, 8, 255, 156, 90, 7, 255, 155, 91, 8, 255, 159, 94, 7, 255, 158, 93, 4, 255, 158, 93, 7, 255, 161, 96, 3, 255, 164, 98, 7, 255, 166, 97, 6, 255, 166, 97, 4, 255, 171, 99, 10, 255, 176, 102, 10, 255, 175, 102, 8, 255, 172, 98, 17, 255, 178, 104, 7, 255, 185, 109, 11, 255, 181, 110, 6, 255, 174, 106, 3, 255, 181, 110, 12, 255, 185, 115, 0, 255, 191, 120, 10, 255, 197, 120, 10, 255, 195, 118, 14, 255, 183, 113, 9, 255, 177, 108, 13, 255, 176, 106, 19, 255, 175, 107, 2, 255, 174, 104, 11, 255, 178, 107, 5, 255, 179, 106, 5, 255, 180, 105, 15, 255, 181, 105, 4, 255, 188, 107, 5, 255, 187, 113, 9, 255, 180, 112, 7, 255, 182, 114, 6, 255, 187, 117, 5, 255, 187, 115, 1, 255, 192, 117, 10, 255, 190, 119, 4, 255, 188, 117, 7, 255, 189, 118, 6, 255, 191, 120, 3, 255, 197, 122, 6, 255, 204, 129, 5, 255, 210, 133, 4, 255, 211, 131, 0, 255, 216, 136, 0, 255, 218, 137, 4, 255, 215, 135, 5, 255, 211, 129, 11, 255, 208, 132, 6, 255, 204, 128, 5, 255, 207, 131, 13, 255, 211, 136, 11, 255, 203, 125, 10, 255, 200, 117, 10, 255, 198, 117, 6, 255, 198, 117, 4, 255, 198, 120, 12, 255, 192, 115, 12, 255, 189, 115, 5, 255, 191, 116, 0, 255, 193, 116, 2, 255, 196, 115, 2, 255, 191, 111, 1, 255, 189, 109, 0, 255, 190, 109, 3, 255, 186, 104, 3, 255, 186, 105, 6, 255, 184, 100, 7, 255, 181, 101, 4, 255, 182, 102, 2, 255, 183, 103, 3, 255, 181, 102, 2, 255, 180, 104, 6, 255, 179, 102, 3, 255, 184, 103, 7, 255, 185, 104, 13, 255, 185, 108, 11, 255, 184, 113, 13, 255, 179, 112, 18, 255, 178, 115, 19, 255, 175, 109, 13, 255, 180, 108, 17, 255, 175, 108, 6, 255, 169, 100, 6, 255, 172, 100, 13, 255, 169, 99, 8, 255, 165, 97, 10, 255, 163, 94, 10, 255, 155, 88, 5, 255, 150, 84, 7, 255, 143, 76, 6, 255, 148, 78, 11, 255, 151, 78, 13, 255, 153, 76, 8, 255, 158, 79, 8, 255, 162, 82, 6, 255, 162, 83, 7, 255, 158, 78, 9, 255, 148, 64, 6, 255, 146, 63, 6, 255, 153, 71, 8, 255, 157, 75, 10, 255, 153, 73, 8, 255, 154, 74, 8, 255, 151, 73, 3, 255, 145, 75, 4, 255, 144, 73, 6, 255, 143, 65, 7, 255, 142, 68, 10, 255, 138, 71, 10, 255, 134, 68, 8, 255, 135, 68, 6, 255, 139, 73, 3, 255, 139, 73, 4, 255, 137, 69, 6, 255, 134, 67, 9, 255, 128, 64, 4, 255, 123, 61, 2, 255, 112, 57, 6, 255, 102, 50, 4, 255, 99, 51, 0, 255, 99, 52, 4, 255, 99, 52, 8, 255, 98, 52, 10, 255, 87, 44, 6, 255, 84, 42, 0, 255, 97, 49, 11, 255, 104, 54, 6, 255, 107, 59, 4, 255, 104, 60, 4, 255, 102, 59, 6, 255, 104, 54, 2, 255, 95, 54, 2, 255, 101, 58, 7, 255, 100, 53, 6, 255, 93, 50, 2, 255, 95, 50, 3, 255, 101, 48, 8, 255, 99, 48, 8, 255, 93, 47, 4, 255, 90, 43, 3, 255, 83, 38, 1, 255, 83, 39, 6, 255, 81, 37, 6, 255, 86, 36, 7, 255, 83, 35, 7, 255, 85, 37, 6, 255, 1, 2, 2, 255, 7, 2, 1, 255, 2, 2, 0, 255, 0, 3, 3, 255, 3, 0, 3, 255, 3, 1, 3, 255, 2, 1, 2, 255, 0, 0, 0, 255, 1, 0, 0, 255, 1, 38, 69, 255, 3, 133, 183, 255, 20, 148, 170, 255, 12, 87, 96, 255, 3, 48, 95, 255, 3, 25, 59, 255, 4, 20, 56, 255, 5, 45, 75, 255, 4, 6, 7, 255, 3, 1, 2, 255, 0, 1, 2, 255, 0, 0, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 1, 3, 255, 3, 4, 8, 255, 4, 5, 9, 255, 2, 3, 7, 255, 3, 3, 7, 255, 1, 2, 7, 255, 1, 2, 7, 255, 0, 1, 5, 255, 0, 1, 5, 255, 0, 2, 4, 255, 0, 0, 4, 255, 0, 0, 5, 255, 2, 3, 9, 255, 0, 1, 5, 255, 2, 2, 5, 255, 3, 3, 6, 255, 0, 3, 10, 255, 0, 2, 16, 255, 0, 2, 9, 255, 2, 1, 6, 255, 2, 2, 10, 255, 4, 0, 0, 255, 5, 47, 114, 255, 4, 127, 228, 255, 6, 18, 28, 255, 5, 0, 4, 255, 10, 25, 173, 255, 4, 20, 103, 255, 13, 12, 0, 255, 18, 31, 22, 255, 27, 32, 31, 255, 26, 33, 28, 255, 29, 30, 24, 255, 24, 25, 22, 255, 21, 23, 23, 255, 19, 30, 32, 255, 17, 28, 37, 255, 11, 10, 14, 255, 9, 4, 1, 255, 15, 12, 8, 255, 23, 20, 19, 255, 19, 20, 21, 255, 11, 10, 6, 255, 7, 2, 0, 255, 8, 4, 2, 255, 8, 5, 3, 255, 8, 4, 2, 255, 8, 5, 1, 255, 6, 4, 1, 255, 6, 5, 3, 255, 7, 7, 2, 255, 9, 9, 4, 255, 9, 9, 2, 255, 11, 13, 1, 255, 13, 15, 3, 255, 10, 12, 3, 255, 16, 16, 7, 255, 17, 18, 5, 255, 18, 20, 6, 255, 21, 23, 12, 255, 18, 23, 9, 255, 17, 26, 3, 255, 19, 27, 9, 255, 24, 27, 18, 255, 25, 29, 9, 255, 27, 36, 9, 255, 30, 37, 14, 255, 28, 42, 13, 255, 32, 54, 23, 255, 46, 62, 25, 255, 54, 69, 37, 255, 61, 88, 29, 255, 66, 96, 32, 255, 76, 98, 56, 255, 84, 106, 50, 255, 84, 114, 53, 255, 82, 114, 55, 255, 84, 113, 41, 255, 77, 106, 41, 255, 72, 99, 39, 255, 76, 95, 36, 255, 81, 94, 24, 255, 79, 91, 21, 255, 76, 87, 21, 255, 78, 85, 23, 255, 76, 79, 15, 255, 69, 79, 13, 255, 67, 77, 14, 255, 71, 69, 15, 255, 65, 60, 8, 255, 56, 55, 4, 255, 61, 47, 10, 255, 59, 41, 7, 255, 55, 42, 5, 255, 61, 42, 5, 255, 64, 40, 4, 255, 65, 48, 7, 255, 71, 50, 4, 255, 80, 49, 2, 255, 88, 48, 5, 255, 92, 53, 3, 255, 88, 53, 2, 255, 77, 47, 7, 255, 72, 46, 4, 255, 72, 45, 3, 255, 76, 43, 2, 255, 82, 46, 2, 255, 82, 48, 4, 255, 83, 52, 2, 255, 88, 53, 3, 255, 85, 55, 5, 255, 80, 51, 1, 255, 78, 46, 2, 255, 78, 46, 5, 255, 80, 46, 7, 255, 82, 45, 7, 255, 84, 48, 4, 255, 84, 51, 1, 255, 82, 45, 6, 255, 83, 49, 6, 255, 83, 49, 6, 255, 86, 50, 6, 255, 88, 49, 6, 255, 88, 48, 6, 255, 88, 52, 3, 255, 88, 54, 9, 255, 83, 50, 8, 255, 86, 52, 4, 255, 93, 55, 5, 255, 89, 48, 7, 255, 98, 54, 14, 255, 96, 54, 7, 255, 95, 48, 12, 255, 98, 54, 12, 255, 99, 54, 2, 255, 100, 58, 1, 255, 101, 60, 4, 255, 104, 56, 11, 255, 104, 53, 13, 255, 108, 59, 8, 255, 105, 59, 9, 255, 100, 59, 10, 255, 96, 59, 5, 255, 101, 57, 7, 255, 108, 57, 9, 255, 109, 59, 11, 255, 107, 57, 12, 255, 109, 59, 6, 255, 106, 57, 10, 255, 108, 60, 4, 255, 111, 60, 7, 255, 110, 59, 4, 255, 108, 58, 4, 255, 114, 62, 12, 255, 115, 63, 5, 255, 115, 62, 4, 255, 107, 57, 11, 255, 113, 57, 13, 255, 111, 57, 7, 255, 113, 61, 4, 255, 124, 63, 8, 255, 124, 60, 7, 255, 113, 56, 8, 255, 106, 60, 12, 255, 101, 62, 12, 255, 110, 61, 10, 255, 122, 63, 5, 255, 126, 65, 8, 255, 128, 68, 11, 255, 107, 60, 8, 255, 112, 67, 4, 255, 104, 63, 4, 255, 124, 68, 9, 255, 147, 66, 5, 255, 129, 67, 7, 255, 114, 68, 4, 255, 121, 67, 5, 255, 124, 67, 7, 255, 123, 67, 6, 255, 131, 69, 7, 255, 134, 71, 10, 255, 128, 71, 16, 255, 123, 69, 8, 255, 133, 72, 10, 255, 135, 69, 7, 255, 124, 69, 10, 255, 118, 69, 5, 255, 110, 60, 2, 255, 112, 63, 4, 255, 112, 60, 5, 255, 118, 58, 11, 255, 105, 56, 4, 255, 98, 53, 6, 255, 116, 59, 8, 255, 120, 60, 3, 255, 134, 70, 4, 255, 151, 74, 9, 255, 160, 74, 9, 255, 159, 72, 8, 255, 157, 72, 9, 255, 157, 74, 6, 255, 158, 76, 3, 255, 157, 75, 0, 255, 160, 75, 6, 255, 162, 75, 2, 255, 164, 82, 2, 255, 153, 76, 6, 255, 141, 70, 4, 255, 140, 71, 4, 255, 155, 82, 6, 255, 165, 85, 5, 255, 159, 78, 3, 255, 161, 81, 6, 255, 174, 86, 5, 255, 187, 94, 12, 255, 174, 91, 11, 255, 157, 85, 16, 255, 147, 80, 13, 255, 163, 91, 11, 255, 169, 88, 10, 255, 175, 92, 13, 255, 176, 98, 9, 255, 168, 95, 5, 255, 162, 93, 6, 255, 160, 94, 5, 255, 161, 96, 8, 255, 161, 94, 8, 255, 162, 95, 6, 255, 159, 96, 4, 255, 155, 93, 9, 255, 159, 91, 10, 255, 159, 90, 2, 255, 164, 95, 4, 255, 161, 95, 2, 255, 165, 98, 12, 255, 168, 99, 10, 255, 168, 100, 5, 255, 166, 99, 4, 255, 174, 100, 9, 255, 171, 104, 9, 255, 176, 113, 7, 255, 183, 114, 7, 255, 181, 112, 3, 255, 183, 113, 5, 255, 179, 106, 1, 255, 179, 104, 10, 255, 183, 112, 12, 255, 190, 117, 16, 255, 195, 113, 5, 255, 198, 118, 5, 255, 188, 114, 13, 255, 179, 106, 10, 255, 177, 106, 13, 255, 177, 108, 18, 255, 176, 107, 12, 255, 176, 106, 4, 255, 178, 105, 0, 255, 184, 112, 8, 255, 188, 113, 10, 255, 187, 109, 5, 255, 184, 109, 10, 255, 182, 111, 11, 255, 184, 113, 8, 255, 186, 113, 9, 255, 190, 114, 14, 255, 192, 115, 10, 255, 189, 114, 12, 255, 188, 113, 17, 255, 190, 119, 6, 255, 194, 122, 0, 255, 197, 122, 6, 255, 203, 127, 10, 255, 205, 128, 8, 255, 209, 128, 7, 255, 216, 134, 2, 255, 217, 137, 3, 255, 212, 132, 1, 255, 206, 124, 5, 255, 212, 129, 4, 255, 210, 130, 0, 255, 209, 133, 2, 255, 208, 131, 21, 255, 199, 123, 20, 255, 199, 120, 14, 255, 203, 118, 10, 255, 202, 118, 9, 255, 201, 120, 9, 255, 199, 118, 6, 255, 192, 113, 1, 255, 195, 115, 5, 255, 195, 113, 3, 255, 193, 113, 1, 255, 194, 113, 4, 255, 193, 112, 5, 255, 186, 105, 1, 255, 185, 106, 5, 255, 183, 104, 3, 255, 182, 101, 3, 255, 182, 102, 3, 255, 183, 102, 4, 255, 181, 98, 0, 255, 182, 100, 3, 255, 183, 104, 7, 255, 183, 104, 9, 255, 183, 102, 12, 255, 185, 102, 18, 255, 183, 105, 17, 255, 175, 102, 12, 255, 173, 104, 22, 255, 177, 111, 27, 255, 175, 111, 23, 255, 177, 111, 11, 255, 175, 111, 18, 255, 169, 104, 10, 255, 167, 96, 3, 255, 160, 91, 11, 255, 160, 94, 9, 255, 162, 93, 4, 255, 163, 90, 1, 255, 162, 90, 4, 255, 159, 89, 10, 255, 157, 88, 11, 255, 150, 79, 3, 255, 159, 84, 10, 255, 165, 88, 10, 255, 163, 86, 4, 255, 160, 83, 4, 255, 144, 66, 0, 255, 148, 66, 11, 255, 157, 71, 4, 255, 160, 75, 5, 255, 159, 75, 2, 255, 155, 76, 3, 255, 154, 77, 6, 255, 147, 72, 5, 255, 150, 76, 10, 255, 143, 72, 6, 255, 139, 68, 6, 255, 140, 69, 9, 255, 135, 65, 4, 255, 131, 65, 3, 255, 134, 70, 8, 255, 129, 70, 2, 255, 133, 72, 7, 255, 132, 68, 13, 255, 128, 65, 11, 255, 120, 60, 3, 255, 112, 56, 6, 255, 112, 56, 10, 255, 108, 56, 7, 255, 106, 58, 3, 255, 104, 55, 6, 255, 102, 53, 2, 255, 99, 55, 1, 255, 96, 54, 6, 255, 96, 53, 5, 255, 94, 50, 5, 255, 94, 50, 6, 255, 99, 55, 10, 255, 102, 50, 10, 255, 100, 43, 5, 255, 105, 52, 5, 255, 105, 53, 7, 255, 97, 50, 4, 255, 96, 48, 4, 255, 105, 50, 6, 255, 106, 52, 6, 255, 103, 50, 8, 255, 89, 43, 2, 255, 85, 42, 1, 255, 95, 46, 6, 255, 91, 42, 4, 255, 90, 43, 7, 255, 94, 43, 8, 255, 94, 40, 5, 255, 93, 41, 6, 255, 90, 39, 5, 255, 0, 1, 0, 255, 2, 1, 2, 255, 2, 0, 5, 255, 0, 1, 2, 255, 2, 1, 1, 255, 2, 3, 3, 255, 0, 1, 0, 255, 3, 0, 3, 255, 2, 0, 0, 255, 0, 0, 0, 255, 8, 35, 71, 255, 20, 144, 190, 255, 13, 127, 139, 255, 1, 52, 95, 255, 10, 81, 159, 255, 16, 142, 213, 255, 3, 84, 101, 255, 5, 8, 3, 255, 3, 0, 2, 255, 0, 1, 5, 255, 0, 1, 3, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 3, 255, 3, 3, 8, 255, 2, 3, 7, 255, 0, 2, 5, 255, 0, 1, 6, 255, 2, 3, 8, 255, 1, 2, 6, 255, 0, 0, 4, 255, 0, 1, 5, 255, 1, 2, 7, 255, 0, 1, 6, 255, 2, 3, 8, 255, 2, 1, 5, 255, 1, 1, 2, 255, 3, 4, 6, 255, 1, 4, 12, 255, 0, 2, 12, 255, 0, 0, 11, 255, 1, 0, 6, 255, 2, 0, 0, 255, 1, 14, 45, 255, 1, 154, 255, 255, 13, 76, 114, 255, 12, 0, 0, 255, 15, 12, 92, 255, 3, 33, 175, 255, 2, 4, 2, 255, 16, 6, 0, 255, 22, 23, 25, 255, 26, 26, 33, 255, 29, 29, 22, 255, 30, 32, 23, 255, 29, 34, 28, 255, 23, 27, 31, 255, 24, 33, 33, 255, 23, 33, 48, 255, 19, 20, 27, 255, 8, 6, 1, 255, 9, 10, 2, 255, 16, 19, 14, 255, 19, 21, 24, 255, 15, 14, 12, 255, 11, 6, 2, 255, 8, 3, 0, 255, 7, 3, 2, 255, 8, 3, 3, 255, 6, 5, 0, 255, 4, 5, 2, 255, 7, 6, 3, 255, 9, 5, 2, 255, 10, 8, 4, 255, 10, 11, 3, 255, 13, 15, 3, 255, 11, 13, 0, 255, 13, 15, 4, 255, 18, 18, 6, 255, 17, 18, 4, 255, 19, 20, 6, 255, 21, 22, 11, 255, 22, 23, 5, 255, 23, 27, 7, 255, 23, 25, 14, 255, 24, 24, 15, 255, 24, 26, 2, 255, 26, 33, 7, 255, 28, 39, 21, 255, 29, 47, 17, 255, 37, 63, 21, 255, 47, 73, 16, 255, 62, 77, 36, 255, 72, 87, 47, 255, 69, 98, 52, 255, 76, 104, 52, 255, 85, 108, 53, 255, 86, 113, 52, 255, 83, 111, 49, 255, 85, 102, 41, 255, 82, 97, 31, 255, 75, 96, 35, 255, 73, 90, 28, 255, 79, 90, 22, 255, 80, 90, 17, 255, 73, 85, 12, 255, 74, 82, 12, 255, 76, 77, 17, 255, 68, 74, 18, 255, 59, 71, 8, 255, 65, 69, 6, 255, 64, 58, 6, 255, 64, 55, 6, 255, 57, 44, 4, 255, 56, 38, 5, 255, 65, 41, 7, 255, 69, 39, 5, 255, 71, 44, 6, 255, 73, 49, 8, 255, 73, 51, 2, 255, 77, 53, 4, 255, 80, 50, 5, 255, 85, 54, 0, 255, 85, 55, 2, 255, 72, 47, 6, 255, 68, 45, 2, 255, 75, 48, 6, 255, 78, 49, 10, 255, 85, 45, 3, 255, 87, 47, 5, 255, 84, 53, 3, 255, 86, 51, 3, 255, 88, 51, 4, 255, 81, 49, 3, 255, 75, 46, 6, 255, 75, 44, 8, 255, 83, 50, 8, 255, 83, 48, 1, 255, 80, 46, 0, 255, 82, 46, 7, 255, 83, 44, 5, 255, 82, 49, 3, 255, 86, 50, 7, 255, 92, 47, 7, 255, 95, 49, 4, 255, 94, 52, 8, 255, 88, 53, 11, 255, 87, 52, 2, 255, 94, 56, 4, 255, 90, 52, 4, 255, 92, 52, 8, 255, 93, 51, 8, 255, 95, 52, 5, 255, 91, 54, 1, 255, 96, 54, 6, 255, 98, 56, 8, 255, 99, 54, 6, 255, 100, 56, 7, 255, 102, 56, 5, 255, 104, 57, 3, 255, 106, 58, 3, 255, 109, 62, 5, 255, 106, 60, 2, 255, 103, 55, 7, 255, 108, 59, 12, 255, 110, 59, 4, 255, 110, 61, 5, 255, 109, 61, 7, 255, 107, 58, 4, 255, 109, 57, 9, 255, 109, 59, 4, 255, 109, 59, 6, 255, 112, 61, 5, 255, 113, 62, 5, 255, 112, 59, 6, 255, 113, 60, 3, 255, 115, 59, 6, 255, 117, 60, 6, 255, 116, 61, 5, 255, 112, 62, 11, 255, 112, 58, 7, 255, 134, 63, 9, 255, 134, 64, 7, 255, 112, 60, 5, 255, 108, 61, 8, 255, 104, 56, 4, 255, 107, 60, 7, 255, 116, 62, 9, 255, 114, 65, 7, 255, 119, 64, 5, 255, 122, 61, 4, 255, 110, 60, 11, 255, 110, 62, 6, 255, 111, 60, 6, 255, 123, 62, 8, 255, 131, 67, 7, 255, 120, 66, 3, 255, 115, 68, 5, 255, 119, 67, 12, 255, 125, 67, 7, 255, 132, 68, 7, 255, 134, 75, 10, 255, 131, 74, 5, 255, 133, 74, 1, 255, 129, 67, 6, 255, 123, 64, 10, 255, 125, 71, 8, 255, 135, 67, 8, 255, 133, 68, 3, 255, 125, 66, 8, 255, 117, 70, 12, 255, 119, 70, 7, 255, 111, 66, 7, 255, 101, 61, 0, 255, 105, 58, 12, 255, 119, 63, 11, 255, 133, 69, 7, 255, 134, 68, 9, 255, 138, 68, 8, 255, 144, 74, 5, 255, 144, 71, 3, 255, 156, 75, 9, 255, 161, 77, 4, 255, 160, 74, 3, 255, 156, 73, 3, 255, 163, 79, 9, 255, 162, 76, 7, 255, 166, 83, 3, 255, 157, 74, 5, 255, 151, 72, 4, 255, 156, 80, 3, 255, 153, 77, 2, 255, 161, 82, 10, 255, 166, 82, 11, 255, 169, 86, 5, 255, 164, 83, 0, 255, 172, 83, 6, 255, 183, 94, 11, 255, 177, 91, 4, 255, 166, 83, 4, 255, 176, 95, 5, 255, 169, 88, 12, 255, 164, 82, 6, 255, 169, 92, 5, 255, 170, 94, 7, 255, 170, 94, 8, 255, 167, 94, 3, 255, 169, 93, 2, 255, 171, 96, 8, 255, 166, 96, 3, 255, 157, 91, 4, 255, 158, 92, 13, 255, 157, 92, 7, 255, 162, 96, 2, 255, 162, 95, 5, 255, 164, 96, 11, 255, 166, 96, 12, 255, 169, 99, 7, 255, 167, 102, 5, 255, 166, 101, 7, 255, 176, 108, 10, 255, 177, 108, 5, 255, 181, 109, 4, 255, 186, 111, 8, 255, 186, 112, 0, 255, 186, 110, 3, 255, 182, 99, 7, 255, 184, 101, 13, 255, 185, 111, 13, 255, 185, 111, 7, 255, 191, 105, 7, 255, 199, 112, 9, 255, 189, 113, 11, 255, 182, 109, 9, 255, 181, 108, 8, 255, 179, 108, 11, 255, 177, 109, 0, 255, 178, 107, 4, 255, 179, 104, 6, 255, 183, 109, 2, 255, 184, 112, 12, 255, 183, 112, 13, 255, 185, 111, 10, 255, 187, 112, 11, 255, 187, 112, 14, 255, 188, 113, 13, 255, 187, 114, 7, 255, 191, 117, 2, 255, 189, 116, 3, 255, 188, 115, 9, 255, 190, 119, 2, 255, 196, 124, 0, 255, 197, 123, 7, 255, 199, 127, 7, 255, 202, 128, 1, 255, 211, 131, 7, 255, 215, 136, 0, 255, 217, 140, 1, 255, 213, 135, 2, 255, 209, 127, 3, 255, 204, 119, 2, 255, 198, 116, 0, 255, 203, 123, 4, 255, 210, 136, 12, 255, 204, 130, 12, 255, 202, 124, 17, 255, 201, 124, 6, 255, 197, 122, 6, 255, 197, 121, 7, 255, 196, 120, 7, 255, 191, 113, 4, 255, 195, 115, 7, 255, 193, 112, 2, 255, 192, 111, 3, 255, 192, 110, 3, 255, 191, 109, 3, 255, 186, 105, 1, 255, 185, 106, 4, 255, 181, 103, 2, 255, 180, 102, 0, 255, 181, 102, 2, 255, 182, 99, 6, 255, 180, 92, 2, 255, 185, 97, 4, 255, 183, 97, 1, 255, 181, 100, 2, 255, 183, 104, 4, 255, 185, 107, 8, 255, 184, 109, 12, 255, 166, 96, 4, 255, 169, 101, 17, 255, 174, 109, 14, 255, 174, 107, 16, 255, 179, 109, 19, 255, 174, 109, 14, 255, 170, 103, 18, 255, 166, 92, 7, 255, 167, 97, 11, 255, 169, 99, 7, 255, 173, 101, 9, 255, 171, 100, 12, 255, 171, 102, 17, 255, 172, 100, 19, 255, 167, 88, 4, 255, 168, 89, 0, 255, 166, 93, 1, 255, 170, 91, 9, 255, 169, 89, 12, 255, 159, 80, 5, 255, 150, 71, 0, 255, 153, 72, 7, 255, 165, 75, 4, 255, 167, 77, 7, 255, 161, 75, 4, 255, 159, 79, 6, 255, 149, 76, 2, 255, 145, 75, 6, 255, 146, 73, 10, 255, 143, 71, 11, 255, 136, 69, 8, 255, 134, 66, 3, 255, 136, 68, 3, 255, 136, 69, 3, 255, 134, 70, 7, 255, 132, 68, 6, 255, 131, 67, 6, 255, 124, 58, 8, 255, 120, 56, 6, 255, 116, 56, 2, 255, 108, 54, 5, 255, 106, 49, 2, 255, 104, 48, 5, 255, 106, 54, 4, 255, 105, 51, 4, 255, 102, 47, 6, 255, 102, 53, 5, 255, 99, 53, 6, 255, 100, 52, 9, 255, 97, 50, 3, 255, 89, 44, 9, 255, 78, 39, 7, 255, 77, 38, 6, 255, 81, 42, 6, 255, 91, 45, 3, 255, 92, 50, 3, 255, 95, 54, 6, 255, 95, 52, 4, 255, 94, 51, 4, 255, 90, 47, 3, 255, 91, 41, 1, 255, 91, 44, 3, 255, 88, 44, 3, 255, 92, 42, 3, 255, 92, 45, 3, 255, 92, 45, 1, 255, 94, 43, 1, 255, 94, 44, 2, 255, 93, 46, 5, 255, 91, 46, 3, 255, 0, 0, 3, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 2, 255, 0, 1, 1, 255, 2, 0, 0, 255, 1, 0, 1, 255, 4, 9, 16, 255, 3, 36, 31, 255, 4, 25, 53, 255, 11, 104, 142, 255, 2, 76, 81, 255, 1, 11, 27, 255, 6, 24, 23, 255, 4, 16, 12, 255, 1, 1, 1, 255, 1, 0, 3, 255, 4, 0, 4, 255, 0, 1, 0, 255, 0, 2, 0, 255, 0, 0, 0, 255, 0, 1, 4, 255, 2, 3, 7, 255, 1, 5, 8, 255, 0, 4, 7, 255, 0, 2, 6, 255, 0, 0, 3, 255, 1, 1, 3, 255, 0, 2, 5, 255, 0, 1, 5, 255, 1, 2, 6, 255, 1, 1, 4, 255, 1, 1, 3, 255, 0, 2, 0, 255, 0, 3, 10, 255, 1, 6, 18, 255, 1, 1, 11, 255, 2, 1, 8, 255, 2, 3, 2, 255, 2, 0, 3, 255, 4, 94, 184, 255, 2, 164, 198, 255, 10, 0, 12, 255, 13, 0, 6, 255, 16, 22, 179, 255, 2, 16, 60, 255, 1, 0, 0, 255, 6, 5, 8, 255, 17, 18, 11, 255, 26, 27, 27, 255, 20, 27, 30, 255, 22, 36, 20, 255, 23, 34, 29, 255, 27, 32, 47, 255, 25, 33, 32, 255, 28, 37, 40, 255, 24, 25, 31, 255, 13, 11, 13, 255, 6, 7, 5, 255, 14, 14, 9, 255, 21, 28, 26, 255, 18, 21, 21, 255, 14, 8, 4, 255, 8, 4, 0, 255, 1, 4, 1, 255, 6, 4, 3, 255, 8, 4, 0, 255, 7, 7, 2, 255, 4, 5, 1, 255, 9, 7, 3, 255, 11, 8, 2, 255, 12, 12, 2, 255, 13, 16, 4, 255, 11, 15, 4, 255, 16, 21, 4, 255, 17, 19, 4, 255, 17, 19, 8, 255, 17, 18, 9, 255, 20, 21, 7, 255, 24, 24, 8, 255, 24, 26, 8, 255, 24, 28, 10, 255, 26, 30, 9, 255, 30, 32, 10, 255, 28, 32, 11, 255, 33, 40, 17, 255, 37, 49, 20, 255, 45, 63, 26, 255, 50, 72, 23, 255, 63, 83, 36, 255, 74, 95, 36, 255, 77, 101, 39, 255, 79, 104, 37, 255, 82, 108, 47, 255, 82, 106, 47, 255, 79, 103, 35, 255, 78, 99, 28, 255, 78, 92, 29, 255, 73, 89, 33, 255, 71, 87, 25, 255, 77, 85, 14, 255, 83, 85, 15, 255, 72, 84, 9, 255, 70, 82, 11, 255, 71, 74, 12, 255, 63, 74, 13, 255, 67, 69, 10, 255, 68, 67, 8, 255, 62, 64, 3, 255, 55, 54, 0, 255, 56, 49, 5, 255, 52, 40, 3, 255, 59, 42, 6, 255, 72, 42, 6, 255, 70, 45, 3, 255, 72, 52, 3, 255, 78, 51, 2, 255, 77, 50, 2, 255, 82, 52, 7, 255, 93, 54, 6, 255, 89, 51, 0, 255, 76, 47, 3, 255, 72, 49, 9, 255, 75, 51, 3, 255, 77, 49, 7, 255, 79, 47, 2, 255, 90, 54, 7, 255, 87, 51, 3, 255, 89, 52, 8, 255, 88, 48, 7, 255, 78, 46, 3, 255, 78, 47, 6, 255, 86, 48, 9, 255, 83, 51, 5, 255, 85, 50, 2, 255, 83, 47, 2, 255, 79, 47, 6, 255, 86, 48, 7, 255, 89, 47, 8, 255, 85, 50, 4, 255, 87, 53, 3, 255, 93, 55, 4, 255, 89, 54, 4, 255, 89, 54, 5, 255, 86, 52, 4, 255, 91, 53, 10, 255, 90, 55, 11, 255, 92, 55, 5, 255, 91, 55, 8, 255, 96, 51, 10, 255, 113, 57, 3, 255, 108, 55, 7, 255, 97, 57, 2, 255, 97, 59, 3, 255, 99, 56, 8, 255, 100, 53, 10, 255, 102, 55, 9, 255, 101, 59, 5, 255, 101, 62, 13, 255, 106, 54, 9, 255, 124, 59, 4, 255, 141, 61, 8, 255, 143, 64, 8, 255, 115, 60, 5, 255, 106, 60, 4, 255, 106, 60, 4, 255, 108, 61, 10, 255, 111, 60, 4, 255, 113, 61, 8, 255, 115, 64, 8, 255, 111, 62, 3, 255, 115, 61, 2, 255, 113, 65, 6, 255, 115, 62, 9, 255, 112, 58, 6, 255, 116, 67, 7, 255, 115, 61, 8, 255, 115, 61, 9, 255, 114, 59, 5, 255, 116, 62, 14, 255, 111, 63, 10, 255, 111, 65, 3, 255, 128, 61, 4, 255, 134, 62, 11, 255, 112, 63, 8, 255, 112, 65, 9, 255, 122, 59, 9, 255, 109, 57, 9, 255, 115, 57, 13, 255, 102, 61, 8, 255, 111, 64, 10, 255, 131, 67, 12, 255, 114, 66, 4, 255, 119, 66, 6, 255, 125, 70, 11, 255, 123, 70, 4, 255, 126, 70, 6, 255, 131, 72, 3, 255, 135, 74, 2, 255, 132, 70, 9, 255, 128, 70, 7, 255, 129, 68, 4, 255, 140, 70, 12, 255, 137, 69, 3, 255, 136, 69, 4, 255, 126, 69, 5, 255, 121, 67, 8, 255, 118, 73, 6, 255, 122, 68, 2, 255, 120, 70, 5, 255, 127, 65, 4, 255, 155, 67, 14, 255, 151, 69, 12, 255, 150, 71, 6, 255, 160, 78, 8, 255, 149, 74, 8, 255, 144, 70, 6, 255, 145, 76, 4, 255, 160, 75, 3, 255, 162, 76, 3, 255, 157, 75, 4, 255, 159, 71, 3, 255, 164, 75, 1, 255, 162, 77, 4, 255, 166, 84, 5, 255, 170, 85, 6, 255, 171, 82, 10, 255, 169, 83, 3, 255, 162, 82, 2, 255, 169, 88, 13, 255, 175, 88, 14, 255, 176, 89, 2, 255, 175, 87, 2, 255, 167, 87, 6, 255, 170, 89, 7, 255, 164, 85, 3, 255, 167, 85, 5, 255, 182, 96, 10, 255, 175, 94, 12, 255, 160, 86, 12, 255, 150, 84, 8, 255, 161, 88, 5, 255, 171, 93, 9, 255, 168, 93, 8, 255, 170, 92, 4, 255, 173, 92, 9, 255, 171, 96, 5, 255, 164, 91, 9, 255, 163, 94, 6, 255, 160, 93, 7, 255, 163, 97, 4, 255, 164, 97, 6, 255, 169, 99, 11, 255, 167, 98, 6, 255, 168, 101, 8, 255, 172, 104, 7, 255, 173, 104, 4, 255, 176, 105, 7, 255, 180, 108, 1, 255, 184, 109, 9, 255, 187, 114, 7, 255, 185, 113, 3, 255, 186, 112, 11, 255, 185, 113, 10, 255, 184, 112, 15, 255, 184, 115, 4, 255, 188, 115, 7, 255, 195, 116, 16, 255, 199, 120, 10, 255, 189, 115, 4, 255, 181, 110, 5, 255, 185, 109, 10, 255, 183, 109, 11, 255, 183, 112, 8, 255, 179, 109, 9, 255, 181, 110, 12, 255, 181, 111, 7, 255, 182, 112, 8, 255, 186, 113, 10, 255, 185, 112, 8, 255, 184, 110, 10, 255, 183, 110, 12, 255, 188, 115, 10, 255, 187, 117, 2, 255, 189, 116, 9, 255, 190, 118, 6, 255, 191, 115, 5, 255, 194, 116, 1, 255, 199, 120, 3, 255, 197, 120, 8, 255, 198, 126, 4, 255, 203, 130, 2, 255, 209, 133, 3, 255, 213, 135, 2, 255, 216, 136, 3, 255, 213, 131, 5, 255, 207, 124, 4, 255, 206, 126, 5, 255, 205, 125, 6, 255, 207, 126, 3, 255, 209, 134, 5, 255, 200, 131, 11, 255, 197, 124, 10, 255, 198, 123, 8, 255, 195, 118, 8, 255, 198, 119, 11, 255, 197, 117, 7, 255, 193, 113, 2, 255, 195, 112, 5, 255, 194, 111, 6, 255, 192, 109, 5, 255, 191, 109, 2, 255, 187, 104, 3, 255, 190, 108, 5, 255, 186, 105, 0, 255, 187, 105, 5, 255, 182, 100, 0, 255, 181, 100, 1, 255, 183, 101, 5, 255, 181, 94, 4, 255, 182, 93, 3, 255, 185, 97, 2, 255, 183, 100, 5, 255, 182, 102, 3, 255, 187, 107, 10, 255, 187, 106, 8, 255, 163, 95, 10, 255, 167, 100, 14, 255, 173, 103, 10, 255, 172, 99, 13, 255, 174, 106, 11, 255, 171, 105, 15, 255, 166, 100, 17, 255, 165, 95, 9, 255, 173, 101, 6, 255, 179, 106, 0, 255, 174, 102, 10, 255, 179, 103, 12, 255, 173, 98, 10, 255, 167, 89, 8, 255, 171, 85, 1, 255, 180, 98, 12, 255, 180, 97, 7, 255, 176, 93, 3, 255, 177, 91, 7, 255, 169, 86, 5, 255, 161, 79, 8, 255, 162, 80, 8, 255, 161, 78, 3, 255, 160, 77, 3, 255, 160, 78, 7, 255, 151, 75, 2, 255, 146, 75, 3, 255, 147, 78, 5, 255, 148, 77, 6, 255, 143, 76, 7, 255, 137, 73, 8, 255, 133, 69, 7, 255, 134, 70, 8, 255, 129, 66, 4, 255, 129, 66, 5, 255, 135, 66, 7, 255, 128, 62, 4, 255, 122, 59, 4, 255, 114, 55, 5, 255, 115, 56, 5, 255, 116, 57, 2, 255, 107, 55, 0, 255, 103, 52, 2, 255, 99, 46, 5, 255, 93, 39, 4, 255, 91, 38, 4, 255, 94, 47, 6, 255, 92, 45, 6, 255, 99, 50, 5, 255, 99, 51, 1, 255, 88, 39, 6, 255, 81, 34, 8, 255, 80, 40, 0, 255, 85, 48, 4, 255, 99, 48, 7, 255, 101, 56, 3, 255, 100, 58, 3, 255, 102, 54, 5, 255, 107, 58, 10, 255, 94, 47, 2, 255, 94, 46, 4, 255, 99, 49, 6, 255, 96, 44, 3, 255, 94, 44, 5, 255, 84, 42, 3, 255, 82, 39, 1, 255, 90, 40, 4, 255, 94, 44, 6, 255, 93, 45, 3, 255, 97, 49, 7, 255, 1, 0, 6, 255, 0, 0, 2, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 3, 255, 2, 0, 4, 255, 0, 0, 3, 255, 3, 1, 1, 255, 3, 2, 3, 255, 0, 3, 1, 255, 6, 0, 2, 255, 2, 0, 0, 255, 5, 28, 58, 255, 16, 78, 120, 255, 8, 79, 113, 255, 18, 74, 99, 255, 6, 31, 53, 255, 4, 18, 27, 255, 2, 8, 0, 255, 4, 0, 0, 255, 3, 2, 0, 255, 1, 2, 3, 255, 2, 1, 3, 255, 1, 2, 3, 255, 1, 2, 3, 255, 2, 2, 6, 255, 1, 4, 6, 255, 1, 4, 7, 255, 2, 3, 6, 255, 4, 3, 7, 255, 1, 2, 6, 255, 1, 2, 6, 255, 1, 2, 5, 255, 1, 1, 3, 255, 0, 1, 4, 255, 0, 1, 4, 255, 2, 3, 10, 255, 4, 3, 17, 255, 2, 1, 9, 255, 4, 1, 11, 255, 1, 0, 0, 255, 2, 24, 92, 255, 1, 197, 239, 255, 10, 36, 69, 255, 8, 0, 0, 255, 6, 21, 133, 255, 4, 29, 174, 255, 5, 0, 0, 255, 3, 2, 5, 255, 4, 2, 6, 255, 27, 26, 21, 255, 21, 31, 21, 255, 19, 28, 29, 255, 21, 27, 35, 255, 25, 34, 33, 255, 26, 33, 30, 255, 29, 37, 52, 255, 24, 35, 48, 255, 27, 34, 37, 255, 16, 17, 17, 255, 7, 5, 2, 255, 9, 9, 3, 255, 21, 21, 24, 255, 21, 23, 24, 255, 15, 13, 7, 255, 11, 8, 0, 255, 4, 6, 2, 255, 5, 6, 4, 255, 9, 8, 2, 255, 8, 7, 2, 255, 5, 5, 1, 255, 11, 9, 4, 255, 13, 11, 6, 255, 12, 13, 4, 255, 13, 16, 5, 255, 14, 17, 6, 255, 14, 16, 1, 255, 18, 21, 6, 255, 17, 20, 9, 255, 18, 19, 9, 255, 19, 20, 5, 255, 19, 23, 9, 255, 24, 23, 10, 255, 29, 27, 9, 255, 26, 31, 6, 255, 27, 37, 9, 255, 31, 37, 13, 255, 39, 48, 13, 255, 44, 63, 13, 255, 52, 67, 24, 255, 60, 78, 28, 255, 63, 86, 37, 255, 71, 98, 31, 255, 78, 102, 25, 255, 83, 102, 43, 255, 80, 106, 41, 255, 77, 103, 43, 255, 75, 100, 27, 255, 72, 94, 24, 255, 62, 90, 26, 255, 68, 88, 28, 255, 75, 88, 23, 255, 76, 86, 15, 255, 80, 85, 18, 255, 69, 79, 10, 255, 66, 78, 11, 255, 67, 73, 13, 255, 69, 73, 10, 255, 68, 68, 9, 255, 66, 66, 9, 255, 61, 62, 4, 255, 55, 50, 0, 255, 65, 50, 8, 255, 68, 46, 8, 255, 60, 46, 4, 255, 69, 44, 4, 255, 73, 42, 3, 255, 75, 49, 5, 255, 78, 50, 4, 255, 75, 48, 2, 255, 84, 52, 3, 255, 94, 60, 5, 255, 88, 53, 1, 255, 76, 47, 2, 255, 76, 49, 5, 255, 84, 47, 3, 255, 76, 46, 3, 255, 75, 49, 1, 255, 80, 53, 1, 255, 84, 50, 2, 255, 85, 49, 4, 255, 77, 47, 1, 255, 79, 45, 3, 255, 82, 43, 3, 255, 82, 46, 3, 255, 83, 47, 2, 255, 87, 49, 5, 255, 83, 49, 4, 255, 79, 49, 3, 255, 85, 53, 5, 255, 88, 49, 1, 255, 91, 55, 1, 255, 94, 59, 3, 255, 95, 56, 8, 255, 89, 50, 11, 255, 84, 51, 8, 255, 89, 56, 5, 255, 94, 54, 5, 255, 94, 55, 9, 255, 94, 53, 6, 255, 94, 55, 7, 255, 105, 55, 5, 255, 138, 70, 5, 255, 119, 59, 5, 255, 94, 52, 4, 255, 99, 59, 14, 255, 94, 56, 18, 255, 97, 55, 7, 255, 103, 57, 8, 255, 99, 63, 10, 255, 104, 59, 7, 255, 111, 58, 6, 255, 123, 63, 7, 255, 128, 61, 3, 255, 131, 65, 7, 255, 112, 60, 3, 255, 111, 55, 7, 255, 111, 60, 7, 255, 103, 58, 2, 255, 109, 63, 10, 255, 110, 60, 2, 255, 115, 62, 4, 255, 115, 64, 6, 255, 113, 59, 6, 255, 112, 64, 11, 255, 113, 60, 8, 255, 111, 60, 4, 255, 113, 64, 5, 255, 113, 62, 7, 255, 115, 57, 8, 255, 112, 60, 15, 255, 114, 61, 6, 255, 122, 62, 6, 255, 122, 65, 1, 255, 135, 70, 8, 255, 127, 61, 5, 255, 117, 63, 2, 255, 117, 65, 10, 255, 119, 60, 13, 255, 122, 62, 11, 255, 126, 67, 10, 255, 117, 63, 11, 255, 119, 65, 6, 255, 113, 63, 3, 255, 133, 67, 5, 255, 148, 68, 7, 255, 135, 67, 11, 255, 128, 67, 9, 255, 125, 70, 1, 255, 129, 71, 5, 255, 133, 67, 16, 255, 135, 73, 12, 255, 130, 72, 13, 255, 126, 69, 7, 255, 133, 72, 3, 255, 140, 71, 10, 255, 135, 72, 7, 255, 129, 66, 3, 255, 123, 66, 5, 255, 122, 72, 3, 255, 128, 67, 8, 255, 129, 69, 9, 255, 126, 72, 4, 255, 122, 69, 2, 255, 123, 62, 8, 255, 137, 62, 11, 255, 145, 70, 4, 255, 158, 78, 3, 255, 162, 79, 4, 255, 149, 77, 2, 255, 158, 83, 5, 255, 161, 81, 5, 255, 159, 69, 11, 255, 168, 77, 5, 255, 174, 85, 6, 255, 161, 73, 8, 255, 156, 71, 6, 255, 166, 82, 4, 255, 180, 87, 4, 255, 176, 88, 5, 255, 169, 83, 2, 255, 166, 80, 6, 255, 177, 96, 2, 255, 178, 89, 7, 255, 179, 93, 8, 255, 177, 88, 8, 255, 169, 87, 6, 255, 173, 89, 6, 255, 175, 91, 0, 255, 179, 95, 8, 255, 186, 99, 8, 255, 171, 98, 4, 255, 161, 84, 9, 255, 170, 92, 12, 255, 181, 98, 10, 255, 168, 89, 2, 255, 165, 92, 6, 255, 168, 92, 9, 255, 169, 96, 9, 255, 167, 94, 4, 255, 169, 94, 10, 255, 167, 95, 6, 255, 164, 94, 11, 255, 164, 98, 7, 255, 172, 97, 7, 255, 173, 100, 6, 255, 175, 103, 8, 255, 174, 104, 6, 255, 176, 106, 0, 255, 180, 108, 2, 255, 182, 110, 4, 255, 186, 114, 6, 255, 188, 116, 2, 255, 186, 114, 6, 255, 185, 113, 7, 255, 184, 112, 6, 255, 185, 112, 19, 255, 188, 117, 9, 255, 192, 118, 1, 255, 199, 120, 13, 255, 196, 118, 9, 255, 191, 115, 4, 255, 187, 112, 6, 255, 186, 109, 6, 255, 184, 111, 2, 255, 186, 113, 9, 255, 181, 109, 6, 255, 183, 109, 7, 255, 184, 110, 4, 255, 184, 112, 4, 255, 186, 113, 14, 255, 185, 111, 15, 255, 185, 111, 13, 255, 187, 114, 9, 255, 185, 113, 3, 255, 185, 113, 2, 255, 188, 115, 7, 255, 187, 118, 3, 255, 184, 116, 6, 255, 189, 117, 5, 255, 191, 117, 1, 255, 196, 124, 1, 255, 199, 125, 4, 255, 204, 125, 5, 255, 210, 130, 2, 255, 216, 133, 5, 255, 211, 126, 6, 255, 212, 128, 4, 255, 211, 128, 4, 255, 207, 126, 2, 255, 206, 128, 3, 255, 206, 128, 2, 255, 205, 132, 8, 255, 203, 134, 16, 255, 201, 129, 9, 255, 201, 124, 4, 255, 202, 122, 16, 255, 194, 118, 12, 255, 190, 119, 3, 255, 188, 114, 9, 255, 191, 113, 5, 255, 190, 110, 1, 255, 191, 108, 1, 255, 192, 108, 3, 255, 190, 103, 1, 255, 196, 108, 6, 255, 196, 108, 7, 255, 194, 107, 5, 255, 187, 102, 3, 255, 184, 100, 2, 255, 184, 100, 2, 255, 182, 98, 3, 255, 183, 99, 5, 255, 183, 103, 5, 255, 183, 105, 3, 255, 182, 102, 8, 255, 185, 105, 10, 255, 182, 99, 8, 255, 162, 90, 16, 255, 165, 98, 12, 255, 173, 104, 16, 255, 168, 99, 5, 255, 167, 98, 7, 255, 167, 99, 10, 255, 170, 101, 16, 255, 169, 95, 9, 255, 174, 98, 2, 255, 176, 97, 3, 255, 172, 96, 8, 255, 173, 95, 4, 255, 177, 102, 6, 255, 173, 97, 2, 255, 178, 97, 4, 255, 184, 105, 6, 255, 189, 103, 8, 255, 186, 101, 8, 255, 182, 99, 3, 255, 181, 98, 7, 255, 174, 92, 10, 255, 168, 85, 6, 255, 160, 76, 5, 255, 161, 75, 4, 255, 160, 77, 3, 255, 154, 77, 7, 255, 145, 73, 8, 255, 139, 68, 16, 255, 133, 66, 4, 255, 137, 74, 3, 255, 132, 73, 7, 255, 129, 68, 8, 255, 129, 65, 5, 255, 132, 68, 8, 255, 129, 70, 2, 255, 126, 63, 3, 255, 130, 63, 2, 255, 130, 67, 4, 255, 129, 66, 6, 255, 109, 58, 3, 255, 108, 63, 11, 255, 112, 56, 7, 255, 102, 50, 1, 255, 96, 51, 3, 255, 93, 49, 2, 255, 96, 50, 5, 255, 97, 49, 1, 255, 97, 48, 5, 255, 101, 51, 7, 255, 96, 48, 1, 255, 86, 38, 2, 255, 86, 39, 5, 255, 90, 46, 3, 255, 94, 49, 9, 255, 102, 52, 12, 255, 101, 54, 4, 255, 100, 53, 3, 255, 106, 52, 8, 255, 109, 52, 7, 255, 104, 49, 5, 255, 91, 44, 3, 255, 90, 38, 1, 255, 96, 40, 3, 255, 93, 47, 5, 255, 93, 46, 5, 255, 92, 42, 1, 255, 96, 47, 4, 255, 97, 44, 3, 255, 97, 43, 2, 255, 101, 46, 4, 255, 1, 0, 6, 255, 1, 0, 4, 255, 0, 0, 2, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 1, 255, 1, 1, 0, 255, 1, 1, 0, 255, 2, 1, 1, 255, 1, 1, 1, 255, 1, 1, 0, 255, 0, 3, 2, 255, 6, 0, 11, 255, 0, 0, 0, 255, 7, 21, 50, 255, 26, 92, 129, 255, 16, 88, 138, 255, 7, 94, 156, 255, 5, 95, 137, 255, 1, 60, 106, 255, 0, 36, 82, 255, 2, 22, 35, 255, 4, 0, 3, 255, 4, 1, 2, 255, 1, 2, 3, 255, 1, 2, 2, 255, 1, 0, 1, 255, 1, 3, 2, 255, 1, 2, 4, 255, 1, 3, 6, 255, 1, 2, 7, 255, 3, 3, 8, 255, 1, 1, 5, 255, 2, 2, 4, 255, 0, 0, 2, 255, 0, 0, 2, 255, 0, 1, 5, 255, 1, 1, 9, 255, 3, 1, 10, 255, 3, 0, 9, 255, 4, 1, 9, 255, 2, 3, 2, 255, 3, 0, 29, 255, 4, 145, 219, 255, 9, 111, 155, 255, 11, 0, 0, 255, 10, 4, 60, 255, 4, 43, 228, 255, 3, 11, 37, 255, 1, 2, 0, 255, 0, 1, 2, 255, 10, 7, 5, 255, 33, 25, 31, 255, 24, 27, 26, 255, 39, 33, 23, 255, 51, 43, 38, 255, 23, 30, 24, 255, 29, 34, 29, 255, 29, 34, 34, 255, 36, 40, 39, 255, 40, 33, 47, 255, 23, 24, 41, 255, 5, 11, 11, 255, 12, 6, 0, 255, 20, 21, 23, 255, 20, 30, 30, 255, 13, 18, 11, 255, 15, 12, 3, 255, 15, 9, 5, 255, 10, 6, 3, 255, 13, 9, 4, 255, 12, 11, 4, 255, 9, 10, 4, 255, 11, 10, 6, 255, 12, 12, 5, 255, 13, 14, 6, 255, 13, 17, 5, 255, 14, 15, 3, 255, 16, 17, 5, 255, 17, 17, 5, 255, 16, 16, 6, 255, 22, 22, 9, 255, 21, 23, 4, 255, 20, 21, 8, 255, 20, 22, 8, 255, 26, 29, 11, 255, 28, 32, 9, 255, 31, 36, 9, 255, 36, 43, 13, 255, 42, 55, 13, 255, 49, 68, 16, 255, 60, 78, 28, 255, 64, 85, 23, 255, 69, 89, 36, 255, 73, 97, 40, 255, 71, 99, 30, 255, 72, 99, 43, 255, 72, 102, 32, 255, 74, 99, 29, 255, 79, 94, 17, 255, 76, 86, 22, 255, 73, 86, 32, 255, 74, 84, 24, 255, 73, 83, 15, 255, 71, 83, 12, 255, 74, 79, 14, 255, 71, 75, 11, 255, 69, 77, 12, 255, 65, 73, 11, 255, 68, 72, 8, 255, 65, 62, 5, 255, 66, 58, 6, 255, 62, 54, 2, 255, 61, 51, 3, 255, 58, 43, 2, 255, 63, 44, 2, 255, 60, 50, 4, 255, 61, 44, 0, 255, 72, 45, 5, 255, 72, 50, 6, 255, 70, 50, 3, 255, 73, 51, 4, 255, 85, 57, 4, 255, 92, 56, 1, 255, 89, 51, 3, 255, 82, 50, 5, 255, 84, 52, 7, 255, 80, 46, 2, 255, 79, 48, 4, 255, 84, 51, 5, 255, 82, 47, 1, 255, 80, 46, 0, 255, 82, 50, 4, 255, 81, 48, 4, 255, 79, 44, 5, 255, 79, 46, 3, 255, 83, 51, 2, 255, 87, 47, 3, 255, 87, 48, 7, 255, 85, 48, 4, 255, 88, 49, 2, 255, 84, 51, 0, 255, 93, 53, 4, 255, 100, 60, 9, 255, 94, 58, 5, 255, 91, 55, 3, 255, 91, 54, 6, 255, 89, 51, 4, 255, 91, 54, 5, 255, 94, 56, 8, 255, 93, 55, 8, 255, 97, 55, 4, 255, 89, 52, 6, 255, 108, 62, 10, 255, 124, 62, 1, 255, 108, 54, 7, 255, 117, 57, 9, 255, 126, 62, 4, 255, 119, 58, 2, 255, 98, 58, 8, 255, 103, 57, 3, 255, 114, 61, 8, 255, 122, 61, 8, 255, 108, 60, 1, 255, 112, 60, 3, 255, 125, 59, 5, 255, 123, 60, 5, 255, 109, 60, 6, 255, 104, 58, 7, 255, 107, 58, 3, 255, 110, 61, 5, 255, 118, 59, 6, 255, 122, 61, 5, 255, 119, 63, 8, 255, 118, 63, 5, 255, 119, 63, 4, 255, 119, 66, 8, 255, 113, 61, 5, 255, 114, 64, 8, 255, 115, 65, 2, 255, 116, 63, 9, 255, 116, 60, 5, 255, 115, 60, 7, 255, 113, 66, 3, 255, 123, 66, 5, 255, 137, 68, 8, 255, 120, 59, 11, 255, 126, 64, 3, 255, 129, 67, 8, 255, 126, 66, 9, 255, 119, 64, 4, 255, 129, 67, 6, 255, 128, 64, 9, 255, 135, 67, 9, 255, 142, 66, 11, 255, 134, 70, 2, 255, 134, 73, 5, 255, 134, 68, 7, 255, 126, 70, 13, 255, 125, 66, 10, 255, 132, 69, 2, 255, 141, 76, 3, 255, 135, 71, 7, 255, 133, 73, 2, 255, 130, 67, 7, 255, 127, 68, 13, 255, 130, 72, 4, 255, 135, 71, 3, 255, 130, 70, 9, 255, 131, 69, 7, 255, 126, 71, 6, 255, 120, 70, 9, 255, 126, 71, 11, 255, 125, 69, 4, 255, 130, 72, 4, 255, 129, 75, 8, 255, 125, 72, 7, 255, 133, 70, 8, 255, 144, 70, 9, 255, 156, 67, 2, 255, 154, 74, 4, 255, 140, 67, 11, 255, 139, 67, 11, 255, 148, 78, 3, 255, 166, 83, 4, 255, 167, 78, 6, 255, 162, 72, 7, 255, 154, 72, 3, 255, 153, 72, 3, 255, 163, 79, 11, 255, 170, 84, 8, 255, 169, 85, 7, 255, 157, 73, 6, 255, 164, 76, 10, 255, 184, 93, 9, 255, 184, 94, 8, 255, 181, 90, 0, 255, 170, 89, 2, 255, 168, 89, 5, 255, 176, 88, 7, 255, 178, 89, 3, 255, 169, 88, 6, 255, 167, 87, 6, 255, 176, 91, 3, 255, 187, 93, 1, 255, 183, 98, 4, 255, 173, 89, 8, 255, 177, 89, 4, 255, 180, 99, 3, 255, 174, 93, 4, 255, 170, 88, 2, 255, 171, 91, 6, 255, 171, 93, 16, 255, 173, 99, 3, 255, 175, 98, 4, 255, 178, 100, 2, 255, 172, 96, 4, 255, 174, 97, 13, 255, 177, 102, 8, 255, 176, 103, 3, 255, 178, 104, 9, 255, 182, 107, 6, 255, 184, 109, 7, 255, 186, 111, 6, 255, 192, 117, 7, 255, 192, 118, 3, 255, 189, 116, 5, 255, 187, 114, 9, 255, 189, 116, 14, 255, 192, 117, 7, 255, 191, 117, 0, 255, 198, 121, 5, 255, 197, 120, 6, 255, 197, 119, 13, 255, 192, 114, 7, 255, 191, 113, 15, 255, 188, 114, 10, 255, 185, 113, 5, 255, 183, 110, 0, 255, 186, 112, 7, 255, 185, 110, 14, 255, 182, 109, 6, 255, 183, 112, 2, 255, 183, 113, 3, 255, 183, 112, 5, 255, 186, 112, 11, 255, 188, 114, 9, 255, 192, 116, 8, 255, 189, 116, 3, 255, 186, 116, 0, 255, 187, 119, 1, 255, 190, 121, 2, 255, 189, 117, 9, 255, 195, 123, 10, 255, 199, 127, 3, 255, 203, 129, 1, 255, 207, 130, 4, 255, 214, 133, 6, 255, 214, 134, 4, 255, 205, 126, 1, 255, 208, 129, 5, 255, 205, 118, 7, 255, 192, 109, 0, 255, 206, 125, 5, 255, 201, 124, 16, 255, 194, 122, 15, 255, 192, 114, 13, 255, 188, 105, 19, 255, 184, 104, 7, 255, 185, 109, 5, 255, 195, 120, 9, 255, 191, 113, 11, 255, 191, 110, 5, 255, 194, 113, 0, 255, 193, 110, 1, 255, 196, 109, 4, 255, 201, 113, 6, 255, 198, 110, 5, 255, 190, 101, 3, 255, 190, 104, 1, 255, 185, 100, 6, 255, 182, 99, 3, 255, 180, 97, 1, 255, 178, 95, 0, 255, 177, 96, 3, 255, 174, 101, 2, 255, 179, 101, 5, 255, 184, 101, 5, 255, 183, 96, 10, 255, 183, 95, 14, 255, 167, 89, 14, 255, 172, 101, 10, 255, 174, 100, 14, 255, 163, 92, 5, 255, 161, 89, 10, 255, 171, 97, 15, 255, 169, 94, 5, 255, 171, 93, 5, 255, 174, 92, 8, 255, 167, 89, 8, 255, 173, 98, 13, 255, 177, 102, 3, 255, 162, 85, 4, 255, 158, 73, 6, 255, 178, 90, 6, 255, 180, 97, 1, 255, 188, 111, 3, 255, 188, 107, 7, 255, 184, 100, 11, 255, 191, 106, 6, 255, 188, 101, 4, 255, 173, 86, 1, 255, 162, 78, 2, 255, 163, 76, 3, 255, 159, 73, 9, 255, 151, 70, 12, 255, 140, 65, 9, 255, 134, 64, 3, 255, 132, 66, 6, 255, 132, 70, 14, 255, 131, 70, 9, 255, 130, 68, 9, 255, 128, 65, 11, 255, 125, 62, 3, 255, 119, 58, 6, 255, 109, 53, 9, 255, 110, 53, 9, 255, 111, 53, 3, 255, 116, 61, 3, 255, 116, 62, 4, 255, 112, 62, 7, 255, 98, 41, 7, 255, 91, 39, 5, 255, 90, 46, 4, 255, 91, 50, 4, 255, 97, 53, 7, 255, 98, 51, 5, 255, 101, 50, 7, 255, 103, 50, 5, 255, 105, 55, 7, 255, 99, 50, 8, 255, 100, 52, 6, 255, 103, 55, 4, 255, 102, 52, 9, 255, 103, 50, 9, 255, 102, 53, 5, 255, 98, 50, 4, 255, 96, 46, 3, 255, 91, 41, 0, 255, 93, 50, 3, 255, 88, 43, 5, 255, 84, 37, 2, 255, 92, 42, 5, 255, 96, 45, 5, 255, 94, 47, 3, 255, 92, 45, 1, 255, 96, 48, 2, 255, 98, 44, 0, 255, 103, 45, 4, 255, 105, 43, 5, 255, 2, 1, 9, 255, 2, 1, 8, 255, 1, 0, 5, 255, 1, 0, 5, 255, 1, 0, 5, 255, 1, 1, 3, 255, 2, 2, 1, 255, 1, 1, 1, 255, 4, 0, 1, 255, 0, 1, 5, 255, 2, 1, 7, 255, 0, 1, 0, 255, 14, 5, 20, 255, 105, 82, 78, 255, 72, 89, 95, 255, 0, 22, 61, 255, 13, 40, 80, 255, 11, 109, 166, 255, 5, 111, 181, 255, 79, 149, 221, 255, 87, 178, 201, 255, 0, 49, 60, 255, 0, 0, 1, 255, 2, 1, 2, 255, 0, 1, 1, 255, 0, 1, 0, 255, 1, 0, 1, 255, 1, 1, 1, 255, 0, 1, 1, 255, 0, 1, 3, 255, 0, 1, 4, 255, 1, 2, 6, 255, 0, 0, 4, 255, 1, 1, 3, 255, 0, 0, 2, 255, 0, 0, 2, 255, 0, 1, 6, 255, 2, 1, 11, 255, 1, 4, 9, 255, 0, 1, 6, 255, 3, 3, 4, 255, 6, 0, 0, 255, 1, 75, 147, 255, 8, 168, 238, 255, 7, 9, 13, 255, 11, 3, 7, 255, 11, 25, 192, 255, 0, 24, 113, 255, 6, 0, 0, 255, 4, 2, 8, 255, 0, 0, 0, 255, 7, 6, 7, 255, 33, 25, 32, 255, 26, 25, 33, 255, 43, 31, 26, 255, 44, 33, 24, 255, 26, 35, 27, 255, 29, 34, 27, 255, 30, 34, 30, 255, 28, 35, 38, 255, 37, 36, 63, 255, 37, 30, 66, 255, 19, 15, 35, 255, 10, 8, 6, 255, 20, 21, 19, 255, 18, 29, 29, 255, 14, 22, 16, 255, 18, 15, 6, 255, 15, 6, 3, 255, 9, 4, 0, 255, 14, 10, 3, 255, 12, 11, 3, 255, 10, 10, 2, 255, 9, 9, 2, 255, 11, 11, 4, 255, 12, 14, 3, 255, 15, 17, 6, 255, 13, 15, 2, 255, 17, 18, 5, 255, 18, 18, 6, 255, 19, 18, 7, 255, 23, 23, 7, 255, 25, 24, 3, 255, 24, 23, 9, 255, 21, 24, 6, 255, 25, 31, 6, 255, 30, 35, 6, 255, 34, 39, 8, 255, 43, 52, 12, 255, 44, 59, 19, 255, 51, 68, 25, 255, 57, 76, 22, 255, 65, 86, 19, 255, 67, 87, 28, 255, 70, 91, 42, 255, 71, 97, 42, 255, 73, 102, 30, 255, 76, 97, 26, 255, 78, 92, 25, 255, 76, 88, 23, 255, 72, 85, 23, 255, 70, 82, 21, 255, 76, 84, 21, 255, 74, 81, 12, 255, 72, 80, 8, 255, 75, 78, 14, 255, 77, 74, 10, 255, 75, 71, 7, 255, 68, 69, 6, 255, 68, 72, 8, 255, 65, 62, 5, 255, 65, 57, 5, 255, 67, 57, 8, 255, 64, 52, 6, 255, 60, 47, 3, 255, 62, 43, 3, 255, 67, 46, 7, 255, 67, 44, 3, 255, 76, 47, 8, 255, 72, 49, 4, 255, 71, 49, 1, 255, 79, 53, 6, 255, 87, 56, 4, 255, 97, 55, 3, 255, 84, 48, 4, 255, 81, 47, 6, 255, 82, 47, 4, 255, 71, 45, 3, 255, 78, 46, 5, 255, 82, 46, 3, 255, 88, 51, 7, 255, 83, 49, 6, 255, 77, 45, 3, 255, 80, 46, 3, 255, 81, 45, 5, 255, 81, 50, 5, 255, 91, 54, 6, 255, 90, 49, 4, 255, 84, 49, 5, 255, 88, 52, 5, 255, 95, 53, 4, 255, 91, 54, 5, 255, 98, 55, 7, 255, 98, 57, 8, 255, 92, 55, 6, 255, 88, 55, 4, 255, 89, 55, 4, 255, 89, 54, 8, 255, 93, 53, 9, 255, 90, 53, 8, 255, 86, 56, 5, 255, 90, 58, 4, 255, 88, 52, 4, 255, 100, 62, 9, 255, 115, 58, 4, 255, 122, 57, 5, 255, 133, 61, 4, 255, 132, 57, 1, 255, 121, 60, 4, 255, 100, 54, 9, 255, 111, 59, 6, 255, 136, 59, 5, 255, 132, 57, 6, 255, 122, 62, 10, 255, 112, 59, 2, 255, 111, 61, 9, 255, 110, 61, 11, 255, 112, 62, 6, 255, 107, 58, 9, 255, 116, 61, 6, 255, 107, 66, 0, 255, 121, 60, 8, 255, 131, 63, 7, 255, 130, 61, 12, 255, 130, 60, 3, 255, 133, 65, 4, 255, 131, 64, 5, 255, 123, 61, 5, 255, 123, 63, 9, 255, 123, 66, 7, 255, 119, 56, 12, 255, 123, 69, 13, 255, 114, 64, 5, 255, 111, 64, 2, 255, 121, 64, 13, 255, 125, 63, 14, 255, 113, 64, 15, 255, 122, 64, 2, 255, 128, 69, 8, 255, 125, 65, 10, 255, 115, 61, 6, 255, 113, 61, 10, 255, 118, 61, 8, 255, 132, 68, 6, 255, 147, 69, 5, 255, 140, 68, 3, 255, 127, 67, 10, 255, 129, 71, 6, 255, 134, 69, 4, 255, 132, 68, 8, 255, 131, 71, 8, 255, 135, 74, 5, 255, 138, 73, 4, 255, 136, 77, 0, 255, 133, 77, 4, 255, 128, 72, 9, 255, 135, 70, 5, 255, 135, 74, 2, 255, 126, 71, 9, 255, 124, 73, 12, 255, 129, 71, 6, 255, 131, 71, 7, 255, 126, 71, 6, 255, 127, 71, 8, 255, 128, 72, 6, 255, 138, 78, 6, 255, 135, 75, 6, 255, 130, 69, 5, 255, 134, 69, 2, 255, 132, 70, 5, 255, 126, 67, 6, 255, 117, 59, 2, 255, 114, 61, 6, 255, 126, 68, 11, 255, 155, 78, 10, 255, 153, 74, 1, 255, 150, 69, 5, 255, 153, 76, 8, 255, 154, 76, 9, 255, 162, 77, 5, 255, 163, 82, 4, 255, 159, 77, 14, 255, 157, 78, 9, 255, 171, 90, 3, 255, 181, 88, 11, 255, 182, 93, 2, 255, 177, 86, 1, 255, 177, 92, 4, 255, 180, 94, 4, 255, 171, 91, 1, 255, 169, 89, 5, 255, 172, 90, 2, 255, 175, 93, 6, 255, 167, 91, 8, 255, 171, 89, 17, 255, 176, 90, 6, 255, 174, 91, 0, 255, 181, 95, 11, 255, 175, 90, 9, 255, 156, 87, 6, 255, 155, 93, 6, 255, 162, 93, 9, 255, 167, 94, 7, 255, 172, 96, 5, 255, 175, 96, 17, 255, 176, 100, 5, 255, 173, 101, 3, 255, 175, 101, 2, 255, 179, 106, 4, 255, 181, 107, 10, 255, 181, 105, 8, 255, 183, 106, 5, 255, 185, 105, 8, 255, 191, 111, 9, 255, 195, 117, 10, 255, 194, 116, 3, 255, 195, 118, 7, 255, 196, 116, 15, 255, 193, 116, 12, 255, 196, 119, 7, 255, 198, 124, 3, 255, 199, 123, 11, 255, 201, 123, 10, 255, 196, 118, 7, 255, 192, 112, 12, 255, 190, 112, 7, 255, 186, 110, 13, 255, 182, 108, 12, 255, 180, 109, 9, 255, 182, 111, 6, 255, 178, 110, 4, 255, 176, 108, 8, 255, 178, 109, 7, 255, 184, 112, 9, 255, 183, 109, 9, 255, 183, 108, 10, 255, 187, 111, 14, 255, 183, 108, 9, 255, 186, 113, 9, 255, 193, 118, 7, 255, 196, 119, 6, 255, 196, 120, 2, 255, 193, 118, 4, 255, 191, 121, 5, 255, 192, 122, 1, 255, 201, 126, 6, 255, 204, 128, 6, 255, 194, 112, 2, 255, 196, 113, 12, 255, 194, 114, 6, 255, 191, 113, 3, 255, 193, 115, 7, 255, 183, 109, 1, 255, 178, 104, 6, 255, 179, 109, 17, 255, 176, 107, 31, 255, 172, 98, 16, 255, 169, 93, 11, 255, 171, 92, 13, 255, 185, 104, 7, 255, 193, 107, 10, 255, 197, 111, 6, 255, 194, 108, 5, 255, 191, 106, 1, 255, 189, 104, 7, 255, 189, 101, 9, 255, 189, 100, 4, 255, 179, 93, 0, 255, 175, 89, 2, 255, 176, 95, 0, 255, 172, 91, 2, 255, 175, 93, 2, 255, 176, 95, 3, 255, 176, 92, 2, 255, 174, 94, 3, 255, 170, 95, 2, 255, 175, 98, 3, 255, 172, 93, 6, 255, 178, 93, 8, 255, 177, 94, 14, 255, 167, 90, 19, 255, 169, 98, 15, 255, 175, 98, 16, 255, 169, 91, 13, 255, 172, 97, 8, 255, 170, 94, 8, 255, 167, 89, 7, 255, 169, 92, 4, 255, 178, 102, 7, 255, 184, 112, 6, 255, 180, 105, 7, 255, 166, 87, 6, 255, 148, 65, 1, 255, 165, 81, 11, 255, 189, 108, 16, 255, 188, 105, 4, 255, 189, 103, 6, 255, 186, 98, 12, 255, 183, 97, 13, 255, 181, 100, 0, 255, 176, 94, 5, 255, 172, 92, 7, 255, 170, 89, 7, 255, 168, 84, 6, 255, 161, 78, 9, 255, 150, 71, 7, 255, 139, 66, 7, 255, 134, 65, 6, 255, 136, 69, 9, 255, 136, 72, 5, 255, 128, 66, 4, 255, 131, 69, 13, 255, 121, 58, 11, 255, 117, 55, 11, 255, 109, 52, 3, 255, 104, 54, 6, 255, 98, 47, 2, 255, 103, 49, 2, 255, 104, 56, 5, 255, 113, 62, 11, 255, 103, 49, 3, 255, 82, 30, 0, 255, 87, 36, 5, 255, 90, 43, 3, 255, 94, 47, 4, 255, 97, 50, 4, 255, 96, 52, 4, 255, 100, 52, 5, 255, 109, 56, 6, 255, 106, 56, 2, 255, 103, 54, 2, 255, 105, 56, 5, 255, 108, 58, 5, 255, 105, 52, 1, 255, 109, 52, 5, 255, 103, 51, 2, 255, 97, 45, 2, 255, 95, 41, 1, 255, 97, 42, 0, 255, 98, 46, 3, 255, 91, 43, 4, 255, 89, 43, 5, 255, 93, 42, 3, 255, 96, 42, 3, 255, 91, 44, 2, 255, 94, 47, 6, 255, 99, 48, 6, 255, 99, 46, 3, 255, 100, 42, 5, 255, 100, 34, 4, 255, 1, 1, 9, 255, 1, 0, 8, 255, 1, 0, 7, 255, 1, 0, 6, 255, 1, 0, 5, 255, 1, 0, 5, 255, 0, 1, 2, 255, 1, 0, 2, 255, 2, 1, 2, 255, 2, 0, 4, 255, 3, 5, 7, 255, 0, 0, 8, 255, 135, 109, 145, 255, 209, 208, 177, 255, 34, 58, 60, 255, 8, 69, 118, 255, 3, 50, 67, 255, 12, 45, 115, 255, 157, 215, 255, 255, 180, 245, 234, 255, 35, 103, 95, 255, 3, 5, 5, 255, 5, 3, 6, 255, 1, 2, 6, 255, 0, 1, 4, 255, 1, 1, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 2, 255, 0, 0, 3, 255, 1, 1, 3, 255, 0, 0, 2, 255, 1, 1, 3, 255, 0, 0, 3, 255, 0, 0, 4, 255, 2, 1, 7, 255, 2, 2, 11, 255, 2, 1, 9, 255, 6, 0, 5, 255, 1, 0, 0, 255, 6, 14, 70, 255, 6, 179, 252, 255, 7, 65, 86, 255, 6, 0, 0, 255, 14, 18, 119, 255, 4, 30, 184, 255, 4, 4, 14, 255, 1, 1, 0, 255, 4, 2, 2, 255, 4, 1, 1, 255, 0, 0, 5, 255, 18, 14, 21, 255, 26, 29, 43, 255, 27, 26, 31, 255, 25, 26, 22, 255, 25, 34, 31, 255, 26, 32, 28, 255, 19, 29, 39, 255, 14, 33, 45, 255, 25, 29, 60, 255, 38, 31, 54, 255, 28, 22, 49, 255, 14, 11, 21, 255, 21, 16, 11, 255, 26, 29, 32, 255, 21, 26, 25, 255, 15, 16, 9, 255, 11, 11, 5, 255, 8, 10, 1, 255, 12, 10, 0, 255, 12, 8, 1, 255, 10, 10, 1, 255, 11, 12, 4, 255, 17, 16, 7, 255, 15, 14, 3, 255, 14, 15, 2, 255, 16, 15, 3, 255, 17, 17, 5, 255, 17, 17, 5, 255, 22, 19, 6, 255, 28, 26, 10, 255, 28, 27, 8, 255, 26, 31, 5, 255, 28, 30, 7, 255, 32, 30, 15, 255, 33, 36, 21, 255, 37, 46, 17, 255, 52, 62, 12, 255, 51, 65, 17, 255, 52, 72, 27, 255, 67, 80, 25, 255, 67, 84, 24, 255, 66, 92, 27, 255, 70, 97, 26, 255, 77, 98, 21, 255, 71, 98, 24, 255, 72, 91, 24, 255, 71, 87, 21, 255, 67, 87, 19, 255, 66, 87, 17, 255, 68, 82, 17, 255, 72, 79, 16, 255, 77, 78, 10, 255, 78, 79, 9, 255, 74, 77, 11, 255, 75, 72, 7, 255, 77, 69, 4, 255, 71, 65, 3, 255, 69, 66, 6, 255, 63, 62, 5, 255, 57, 56, 1, 255, 60, 55, 3, 255, 63, 53, 5, 255, 64, 48, 4, 255, 63, 45, 4, 255, 69, 43, 6, 255, 71, 47, 6, 255, 71, 49, 5, 255, 68, 46, 1, 255, 72, 53, 3, 255, 76, 51, 2, 255, 91, 52, 5, 255, 91, 53, 4, 255, 77, 49, 3, 255, 76, 47, 4, 255, 77, 43, 5, 255, 72, 43, 4, 255, 80, 48, 6, 255, 77, 48, 2, 255, 78, 51, 4, 255, 78, 46, 4, 255, 79, 44, 3, 255, 80, 50, 5, 255, 82, 49, 5, 255, 87, 49, 5, 255, 90, 47, 3, 255, 89, 47, 2, 255, 89, 52, 4, 255, 87, 53, 2, 255, 91, 54, 3, 255, 94, 52, 7, 255, 99, 59, 6, 255, 101, 60, 3, 255, 92, 56, 3, 255, 87, 55, 8, 255, 91, 51, 11, 255, 94, 51, 6, 255, 122, 61, 6, 255, 121, 58, 3, 255, 109, 60, 8, 255, 100, 59, 5, 255, 112, 56, 5, 255, 103, 55, 5, 255, 104, 59, 7, 255, 124, 61, 9, 255, 120, 59, 7, 255, 105, 58, 2, 255, 111, 54, 6, 255, 115, 56, 7, 255, 108, 58, 4, 255, 129, 62, 3, 255, 122, 62, 6, 255, 118, 61, 8, 255, 118, 63, 4, 255, 114, 62, 10, 255, 122, 63, 10, 255, 123, 61, 5, 255, 126, 63, 10, 255, 143, 67, 12, 255, 128, 64, 5, 255, 126, 62, 9, 255, 120, 63, 4, 255, 120, 60, 3, 255, 126, 63, 6, 255, 126, 65, 6, 255, 124, 60, 2, 255, 117, 61, 2, 255, 118, 67, 2, 255, 122, 63, 5, 255, 126, 59, 8, 255, 125, 60, 4, 255, 115, 65, 5, 255, 118, 64, 1, 255, 122, 64, 13, 255, 112, 67, 6, 255, 117, 66, 1, 255, 125, 69, 2, 255, 121, 71, 1, 255, 124, 68, 6, 255, 122, 63, 13, 255, 121, 68, 13, 255, 124, 68, 7, 255, 128, 67, 10, 255, 126, 65, 10, 255, 117, 67, 9, 255, 126, 68, 11, 255, 135, 71, 12, 255, 135, 69, 14, 255, 138, 77, 8, 255, 136, 74, 11, 255, 133, 71, 5, 255, 134, 73, 7, 255, 132, 71, 5, 255, 130, 71, 4, 255, 133, 65, 14, 255, 132, 70, 7, 255, 129, 75, 3, 255, 133, 71, 0, 255, 132, 70, 10, 255, 132, 71, 12, 255, 127, 70, 5, 255, 131, 69, 6, 255, 140, 72, 10, 255, 137, 70, 12, 255, 137, 69, 14, 255, 143, 72, 10, 255, 137, 73, 6, 255, 129, 72, 6, 255, 126, 73, 9, 255, 112, 62, 12, 255, 120, 68, 11, 255, 127, 76, 3, 255, 130, 70, 2, 255, 143, 72, 7, 255, 157, 81, 5, 255, 159, 77, 7, 255, 152, 70, 10, 255, 154, 75, 4, 255, 158, 76, 7, 255, 164, 77, 0, 255, 164, 83, 8, 255, 170, 89, 9, 255, 158, 76, 7, 255, 162, 78, 11, 255, 176, 88, 3, 255, 171, 87, 13, 255, 180, 91, 8, 255, 182, 87, 6, 255, 176, 89, 7, 255, 174, 90, 13, 255, 178, 92, 6, 255, 174, 91, 11, 255, 175, 91, 11, 255, 173, 88, 5, 255, 181, 92, 7, 255, 181, 98, 11, 255, 185, 100, 7, 255, 185, 97, 10, 255, 171, 88, 11, 255, 180, 101, 4, 255, 172, 94, 8, 255, 166, 89, 5, 255, 170, 94, 6, 255, 174, 97, 7, 255, 175, 98, 9, 255, 177, 103, 3, 255, 178, 102, 6, 255, 182, 106, 8, 255, 185, 109, 9, 255, 185, 106, 8, 255, 180, 103, 7, 255, 188, 108, 15, 255, 194, 115, 10, 255, 197, 116, 10, 255, 197, 117, 11, 255, 195, 115, 3, 255, 194, 113, 5, 255, 195, 117, 11, 255, 194, 120, 9, 255, 197, 122, 7, 255, 196, 118, 11, 255, 199, 120, 11, 255, 193, 114, 10, 255, 187, 108, 10, 255, 184, 106, 9, 255, 183, 109, 11, 255, 179, 109, 2, 255, 179, 109, 5, 255, 177, 107, 6, 255, 173, 108, 0, 255, 172, 107, 3, 255, 176, 107, 9, 255, 185, 111, 16, 255, 187, 108, 10, 255, 189, 110, 9, 255, 186, 111, 6, 255, 178, 103, 5, 255, 183, 112, 6, 255, 191, 118, 2, 255, 191, 111, 4, 255, 191, 114, 2, 255, 195, 125, 0, 255, 197, 128, 4, 255, 197, 124, 4, 255, 203, 126, 5, 255, 202, 123, 7, 255, 194, 115, 2, 255, 196, 115, 2, 255, 193, 111, 2, 255, 195, 113, 7, 255, 187, 110, 4, 255, 179, 101, 7, 255, 184, 106, 10, 255, 191, 121, 7, 255, 185, 120, 14, 255, 184, 113, 18, 255, 171, 99, 7, 255, 174, 101, 4, 255, 186, 106, 7, 255, 181, 93, 14, 255, 193, 106, 4, 255, 190, 103, 6, 255, 182, 97, 1, 255, 180, 96, 4, 255, 174, 90, 1, 255, 174, 90, 1, 255, 170, 90, 2, 255, 171, 92, 5, 255, 169, 92, 3, 255, 170, 91, 6, 255, 173, 94, 6, 255, 171, 92, 3, 255, 171, 90, 3, 255, 174, 92, 6, 255, 174, 95, 7, 255, 174, 98, 7, 255, 156, 87, 6, 255, 161, 84, 14, 255, 172, 103, 11, 255, 164, 98, 11, 255, 162, 98, 17, 255, 167, 96, 3, 255, 176, 103, 6, 255, 184, 108, 15, 255, 178, 102, 10, 255, 170, 93, 4, 255, 181, 104, 11, 255, 191, 117, 13, 255, 186, 105, 7, 255, 171, 84, 7, 255, 163, 81, 9, 255, 163, 83, 4, 255, 191, 115, 14, 255, 196, 123, 12, 255, 185, 102, 4, 255, 184, 97, 5, 255, 185, 100, 6, 255, 180, 97, 6, 255, 174, 92, 5, 255, 165, 85, 5, 255, 159, 80, 9, 255, 157, 79, 9, 255, 157, 80, 4, 255, 154, 81, 0, 255, 147, 79, 3, 255, 140, 74, 9, 255, 132, 64, 20, 255, 137, 71, 15, 255, 136, 72, 13, 255, 130, 70, 16, 255, 131, 72, 12, 255, 128, 71, 4, 255, 119, 66, 3, 255, 108, 57, 4, 255, 107, 56, 3, 255, 107, 55, 2, 255, 112, 60, 11, 255, 104, 48, 8, 255, 89, 41, 7, 255, 74, 29, 4, 255, 78, 30, 2, 255, 87, 38, 6, 255, 92, 40, 5, 255, 95, 42, 3, 255, 95, 43, 1, 255, 97, 51, 5, 255, 101, 54, 7, 255, 109, 55, 6, 255, 107, 56, 1, 255, 107, 56, 3, 255, 109, 56, 9, 255, 109, 56, 8, 255, 105, 51, 1, 255, 105, 45, 4, 255, 95, 43, 1, 255, 85, 38, 2, 255, 85, 37, 4, 255, 94, 45, 6, 255, 87, 40, 5, 255, 85, 40, 2, 255, 94, 46, 3, 255, 95, 48, 4, 255, 95, 50, 5, 255, 98, 47, 3, 255, 102, 48, 8, 255, 96, 48, 5, 255, 96, 42, 0, 255, 94, 35, 4, 255, 94, 29, 6, 255, 0, 0, 8, 255, 0, 0, 8, 255, 0, 0, 8, 255, 0, 1, 8, 255, 0, 1, 7, 255, 0, 1, 6, 255, 0, 2, 4, 255, 1, 0, 3, 255, 0, 0, 0, 255, 2, 2, 7, 255, 1, 5, 15, 255, 3, 0, 9, 255, 46, 49, 62, 255, 57, 55, 34, 255, 25, 32, 38, 255, 33, 50, 40, 255, 17, 21, 19, 255, 11, 11, 21, 255, 80, 112, 107, 255, 35, 75, 59, 255, 0, 0, 4, 255, 6, 4, 15, 255, 1, 1, 2, 255, 1, 1, 0, 255, 5, 3, 2, 255, 0, 1, 1, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 0, 1, 255, 0, 0, 0, 255, 1, 0, 0, 255, 0, 0, 2, 255, 1, 2, 3, 255, 2, 1, 5, 255, 1, 0, 5, 255, 2, 1, 6, 255, 2, 1, 7, 255, 4, 0, 5, 255, 6, 2, 1, 255, 2, 0, 18, 255, 2, 123, 208, 255, 14, 128, 169, 255, 15, 0, 0, 255, 12, 6, 43, 255, 8, 33, 211, 255, 3, 17, 68, 255, 3, 0, 0, 255, 1, 2, 9, 255, 4, 2, 0, 255, 2, 0, 2, 255, 0, 2, 0, 255, 4, 2, 2, 255, 22, 15, 29, 255, 30, 26, 32, 255, 20, 23, 25, 255, 27, 32, 39, 255, 28, 31, 21, 255, 27, 28, 34, 255, 26, 30, 50, 255, 31, 25, 60, 255, 30, 22, 56, 255, 25, 25, 42, 255, 19, 17, 19, 255, 17, 14, 5, 255, 22, 26, 27, 255, 23, 27, 30, 255, 17, 19, 16, 255, 12, 16, 9, 255, 14, 13, 3, 255, 19, 14, 4, 255, 15, 12, 3, 255, 12, 12, 2, 255, 12, 11, 1, 255, 19, 16, 5, 255, 18, 16, 3, 255, 18, 17, 4, 255, 15, 15, 3, 255, 18, 18, 6, 255, 24, 22, 8, 255, 25, 23, 6, 255, 26, 25, 5, 255, 25, 22, 5, 255, 24, 27, 5, 255, 30, 32, 8, 255, 32, 34, 9, 255, 38, 40, 16, 255, 45, 48, 17, 255, 55, 63, 12, 255, 54, 67, 22, 255, 60, 79, 30, 255, 64, 82, 16, 255, 68, 85, 27, 255, 68, 91, 29, 255, 73, 95, 27, 255, 78, 94, 25, 255, 71, 92, 29, 255, 66, 86, 25, 255, 63, 82, 23, 255, 66, 84, 8, 255, 72, 85, 12, 255, 73, 77, 18, 255, 75, 78, 15, 255, 78, 75, 4, 255, 79, 75, 4, 255, 71, 76, 8, 255, 67, 71, 6, 255, 71, 68, 5, 255, 72, 66, 8, 255, 70, 64, 8, 255, 65, 61, 6, 255, 63, 57, 4, 255, 64, 56, 5, 255, 64, 51, 2, 255, 63, 50, 4, 255, 64, 47, 3, 255, 72, 44, 4, 255, 65, 47, 4, 255, 70, 51, 7, 255, 77, 44, 3, 255, 72, 52, 6, 255, 74, 52, 0, 255, 87, 55, 4, 255, 82, 54, 6, 255, 84, 47, 2, 255, 80, 47, 5, 255, 72, 46, 7, 255, 75, 43, 4, 255, 79, 45, 2, 255, 82, 48, 3, 255, 79, 46, 0, 255, 80, 48, 2, 255, 81, 46, 2, 255, 86, 49, 2, 255, 86, 51, 3, 255, 82, 48, 3, 255, 85, 50, 6, 255, 94, 52, 6, 255, 110, 54, 6, 255, 108, 54, 5, 255, 94, 55, 4, 255, 97, 59, 12, 255, 95, 58, 6, 255, 98, 58, 3, 255, 91, 57, 3, 255, 90, 58, 7, 255, 98, 53, 8, 255, 100, 58, 3, 255, 129, 65, 10, 255, 136, 62, 5, 255, 137, 63, 6, 255, 136, 62, 6, 255, 140, 65, 9, 255, 113, 60, 4, 255, 102, 59, 14, 255, 108, 61, 8, 255, 109, 61, 6, 255, 113, 61, 6, 255, 138, 57, 3, 255, 149, 63, 7, 255, 131, 64, 11, 255, 123, 63, 5, 255, 133, 65, 10, 255, 128, 62, 4, 255, 121, 65, 3, 255, 121, 65, 5, 255, 131, 66, 7, 255, 117, 62, 7, 255, 129, 64, 8, 255, 136, 63, 3, 255, 139, 62, 7, 255, 126, 64, 2, 255, 119, 63, 4, 255, 122, 61, 13, 255, 129, 64, 10, 255, 126, 64, 3, 255, 133, 65, 7, 255, 122, 62, 3, 255, 120, 66, 4, 255, 123, 63, 2, 255, 124, 68, 12, 255, 118, 61, 7, 255, 131, 68, 8, 255, 130, 65, 4, 255, 129, 66, 8, 255, 131, 68, 6, 255, 133, 63, 5, 255, 119, 62, 9, 255, 117, 66, 12, 255, 115, 62, 8, 255, 127, 63, 6, 255, 135, 67, 8, 255, 129, 71, 9, 255, 141, 67, 13, 255, 127, 68, 10, 255, 125, 64, 9, 255, 128, 60, 16, 255, 122, 67, 8, 255, 130, 72, 10, 255, 132, 71, 11, 255, 131, 60, 20, 255, 146, 73, 11, 255, 157, 85, 5, 255, 153, 80, 7, 255, 146, 75, 10, 255, 137, 70, 2, 255, 142, 75, 11, 255, 137, 70, 12, 255, 139, 71, 10, 255, 150, 77, 10, 255, 158, 79, 11, 255, 153, 80, 15, 255, 148, 81, 13, 255, 178, 92, 10, 255, 171, 89, 3, 255, 134, 68, 8, 255, 147, 80, 17, 255, 154, 93, 5, 255, 162, 88, 9, 255, 138, 69, 7, 255, 134, 73, 14, 255, 134, 74, 11, 255, 134, 71, 10, 255, 144, 70, 10, 255, 155, 74, 14, 255, 184, 105, 12, 255, 180, 96, 5, 255, 157, 71, 4, 255, 162, 82, 7, 255, 183, 102, 10, 255, 174, 88, 9, 255, 166, 82, 2, 255, 151, 71, 2, 255, 157, 77, 11, 255, 175, 94, 4, 255, 173, 85, 7, 255, 175, 84, 13, 255, 179, 94, 7, 255, 179, 94, 5, 255, 181, 93, 8, 255, 166, 85, 4, 255, 160, 83, 4, 255, 168, 90, 6, 255, 177, 92, 0, 255, 176, 93, 8, 255, 173, 93, 6, 255, 175, 88, 5, 255, 172, 90, 5, 255, 177, 94, 2, 255, 186, 97, 7, 255, 184, 97, 11, 255, 176, 94, 9, 255, 170, 90, 4, 255, 179, 100, 7, 255, 182, 100, 4, 255, 185, 101, 1, 255, 188, 105, 11, 255, 189, 107, 9, 255, 187, 106, 6, 255, 186, 108, 5, 255, 186, 109, 9, 255, 184, 109, 11, 255, 187, 114, 5, 255, 192, 118, 1, 255, 196, 119, 8, 255, 196, 119, 9, 255, 192, 115, 4, 255, 191, 111, 6, 255, 191, 114, 9, 255, 188, 116, 11, 255, 191, 117, 3, 255, 192, 114, 9, 255, 191, 111, 12, 255, 190, 109, 16, 255, 185, 106, 9, 255, 181, 108, 11, 255, 179, 108, 14, 255, 174, 104, 14, 255, 178, 106, 13, 255, 178, 105, 6, 255, 177, 106, 4, 255, 175, 108, 4, 255, 174, 108, 8, 255, 183, 107, 11, 255, 189, 106, 8, 255, 201, 119, 11, 255, 189, 112, 8, 255, 180, 106, 8, 255, 187, 116, 5, 255, 191, 118, 6, 255, 197, 128, 12, 255, 200, 140, 3, 255, 199, 138, 2, 255, 198, 130, 4, 255, 202, 130, 4, 255, 204, 133, 11, 255, 189, 119, 9, 255, 189, 118, 7, 255, 190, 116, 2, 255, 186, 108, 1, 255, 186, 106, 8, 255, 182, 101, 10, 255, 182, 101, 5, 255, 191, 108, 0, 255, 195, 116, 13, 255, 195, 122, 21, 255, 190, 116, 14, 255, 192, 107, 10, 255, 183, 102, 8, 255, 179, 102, 6, 255, 174, 101, 11, 255, 174, 103, 6, 255, 167, 93, 8, 255, 169, 91, 2, 255, 174, 90, 0, 255, 172, 91, 0, 255, 173, 94, 9, 255, 168, 88, 4, 255, 168, 89, 1, 255, 169, 89, 4, 255, 173, 88, 6, 255, 171, 92, 5, 255, 168, 90, 3, 255, 170, 91, 5, 255, 173, 94, 6, 255, 172, 94, 4, 255, 169, 94, 3, 255, 163, 95, 6, 255, 180, 108, 15, 255, 182, 119, 12, 255, 172, 110, 11, 255, 178, 119, 8, 255, 178, 105, 10, 255, 181, 112, 13, 255, 187, 115, 18, 255, 187, 112, 14, 255, 191, 112, 12, 255, 184, 105, 9, 255, 175, 93, 9, 255, 163, 87, 13, 255, 162, 79, 9, 255, 157, 77, 2, 255, 165, 78, 2, 255, 194, 110, 12, 255, 199, 123, 0, 255, 198, 113, 5, 255, 184, 99, 4, 255, 170, 83, 2, 255, 158, 72, 8, 255, 147, 63, 7, 255, 136, 57, 4, 255, 132, 57, 2, 255, 135, 63, 4, 255, 135, 66, 4, 255, 135, 69, 7, 255, 138, 76, 13, 255, 132, 73, 12, 255, 131, 68, 9, 255, 131, 70, 13, 255, 125, 69, 9, 255, 124, 72, 6, 255, 123, 69, 5, 255, 118, 62, 6, 255, 108, 54, 4, 255, 103, 51, 8, 255, 104, 53, 4, 255, 107, 56, 2, 255, 103, 54, 5, 255, 88, 39, 6, 255, 84, 35, 6, 255, 98, 48, 6, 255, 101, 54, 8, 255, 91, 44, 2, 255, 93, 44, 2, 255, 101, 50, 7, 255, 108, 55, 9, 255, 107, 57, 4, 255, 108, 59, 2, 255, 109, 58, 3, 255, 105, 52, 2, 255, 106, 53, 2, 255, 105, 52, 1, 255, 107, 55, 5, 255, 105, 53, 5, 255, 106, 47, 5, 255, 95, 47, 4, 255, 85, 42, 5, 255, 85, 40, 4, 255, 101, 51, 7, 255, 98, 46, 5, 255, 101, 47, 5, 255, 101, 47, 2, 255, 103, 51, 4, 255, 102, 52, 4, 255, 101, 51, 2, 255, 103, 49, 2, 255, 104, 46, 1, 255, 100, 42, 1, 255, 90, 29, 2, 255, 89, 24, 5, 255, 0, 0, 12, 255, 2, 2, 13, 255, 1, 2, 12, 255, 0, 0, 10, 255, 1, 1, 11, 255, 1, 1, 8, 255, 0, 1, 6, 255, 2, 0, 7, 255, 0, 1, 1, 255, 0, 2, 2, 255, 4, 2, 6, 255, 6, 20, 46, 255, 3, 49, 106, 255, 11, 42, 63, 255, 36, 52, 61, 255, 40, 51, 60, 255, 31, 32, 35, 255, 23, 18, 18, 255, 4, 1, 2, 255, 0, 0, 0, 255, 7, 8, 15, 255, 4, 5, 10, 255, 0, 5, 10, 255, 1, 1, 4, 255, 6, 0, 1, 255, 0, 0, 0, 255, 1, 2, 1, 255, 3, 0, 1, 255, 0, 1, 0, 255, 0, 1, 0, 255, 0, 0, 0, 255, 5, 0, 3, 255, 4, 0, 4, 255, 0, 0, 7, 255, 2, 0, 7, 255, 0, 2, 7, 255, 0, 0, 8, 255, 1, 1, 2, 255, 0, 1, 3, 255, 1, 0, 0, 255, 9, 51, 128, 255, 1, 174, 235, 255, 12, 20, 47, 255, 17, 2, 0, 255, 13, 23, 180, 255, 1, 28, 144, 255, 4, 1, 0, 255, 3, 1, 1, 255, 4, 1, 2, 255, 0, 3, 0, 255, 2, 1, 5, 255, 3, 0, 2, 255, 2, 1, 1, 255, 10, 7, 7, 255, 21, 18, 13, 255, 29, 27, 25, 255, 25, 27, 35, 255, 25, 28, 33, 255, 33, 27, 32, 255, 39, 32, 36, 255, 33, 30, 60, 255, 9, 16, 30, 255, 11, 16, 9, 255, 24, 14, 14, 255, 18, 15, 10, 255, 24, 30, 29, 255, 24, 33, 28, 255, 27, 29, 16, 255, 24, 23, 10, 255, 20, 19, 7, 255, 13, 11, 3, 255, 13, 14, 4, 255, 14, 14, 2, 255, 18, 17, 4, 255, 18, 15, 3, 255, 16, 15, 3, 255, 15, 14, 3, 255, 16, 16, 4, 255, 21, 17, 3, 255, 29, 24, 9, 255, 27, 24, 7, 255, 22, 20, 1, 255, 28, 24, 5, 255, 26, 29, 8, 255, 29, 35, 5, 255, 36, 42, 7, 255, 43, 49, 6, 255, 50, 58, 11, 255, 51, 61, 26, 255, 55, 71, 21, 255, 63, 80, 12, 255, 70, 83, 23, 255, 63, 85, 27, 255, 71, 95, 28, 255, 73, 93, 20, 255, 75, 91, 20, 255, 78, 88, 21, 255, 73, 82, 17, 255, 69, 79, 30, 255, 73, 79, 22, 255, 79, 77, 13, 255, 74, 73, 13, 255, 71, 72, 7, 255, 73, 73, 5, 255, 80, 75, 4, 255, 71, 71, 5, 255, 66, 69, 5, 255, 71, 69, 6, 255, 66, 63, 9, 255, 66, 61, 6, 255, 67, 60, 3, 255, 62, 56, 6, 255, 71, 53, 10, 255, 63, 51, 6, 255, 63, 49, 4, 255, 65, 44, 5, 255, 71, 44, 2, 255, 72, 48, 6, 255, 71, 47, 10, 255, 78, 43, 9, 255, 76, 46, 3, 255, 81, 52, 4, 255, 85, 57, 2, 255, 80, 55, 6, 255, 79, 44, 1, 255, 81, 46, 7, 255, 72, 41, 3, 255, 78, 43, 4, 255, 82, 49, 0, 255, 83, 48, 1, 255, 81, 44, 3, 255, 78, 45, 3, 255, 81, 49, 2, 255, 85, 50, 4, 255, 88, 52, 7, 255, 86, 52, 8, 255, 84, 50, 7, 255, 101, 51, 8, 255, 121, 52, 8, 255, 105, 55, 3, 255, 94, 54, 5, 255, 97, 53, 12, 255, 102, 60, 3, 255, 95, 57, 4, 255, 89, 55, 9, 255, 104, 59, 4, 255, 133, 63, 6, 255, 109, 57, 10, 255, 117, 66, 5, 255, 113, 56, 5, 255, 115, 54, 8, 255, 126, 61, 6, 255, 119, 58, 5, 255, 105, 60, 8, 255, 106, 59, 8, 255, 113, 63, 2, 255, 110, 62, 1, 255, 107, 63, 6, 255, 126, 66, 6, 255, 138, 66, 2, 255, 118, 62, 8, 255, 123, 63, 9, 255, 134, 62, 5, 255, 134, 67, 8, 255, 120, 65, 1, 255, 118, 62, 6, 255, 126, 61, 6, 255, 133, 65, 7, 255, 135, 66, 6, 255, 123, 66, 1, 255, 121, 64, 0, 255, 124, 64, 1, 255, 126, 66, 7, 255, 129, 67, 8, 255, 129, 65, 10, 255, 126, 67, 8, 255, 127, 67, 1, 255, 122, 67, 3, 255, 121, 65, 14, 255, 124, 62, 8, 255, 127, 65, 10, 255, 124, 67, 11, 255, 132, 68, 8, 255, 123, 66, 8, 255, 112, 66, 2, 255, 124, 62, 7, 255, 129, 63, 6, 255, 124, 66, 7, 255, 133, 71, 16, 255, 145, 82, 10, 255, 148, 76, 4, 255, 165, 83, 9, 255, 167, 83, 12, 255, 186, 98, 1, 255, 190, 102, 4, 255, 199, 105, 8, 255, 201, 106, 6, 255, 199, 112, 2, 255, 193, 98, 5, 255, 199, 107, 6, 255, 209, 124, 4, 255, 198, 107, 3, 255, 198, 98, 7, 255, 209, 106, 2, 255, 215, 112, 5, 255, 198, 102, 3, 255, 197, 99, 10, 255, 197, 101, 13, 255, 192, 101, 8, 255, 197, 102, 1, 255, 210, 107, 3, 255, 212, 105, 6, 255, 196, 96, 7, 255, 198, 93, 9, 255, 200, 97, 8, 255, 186, 100, 8, 255, 194, 104, 9, 255, 210, 114, 12, 255, 204, 111, 13, 255, 190, 100, 6, 255, 195, 109, 9, 255, 175, 97, 0, 255, 186, 108, 13, 255, 182, 99, 9, 255, 173, 92, 12, 255, 211, 116, 12, 255, 192, 105, 4, 255, 164, 81, 10, 255, 186, 93, 8, 255, 198, 112, 7, 255, 182, 97, 11, 255, 165, 79, 5, 255, 157, 79, 11, 255, 179, 92, 9, 255, 197, 100, 8, 255, 179, 87, 9, 255, 166, 83, 1, 255, 187, 100, 3, 255, 182, 98, 4, 255, 186, 100, 8, 255, 178, 96, 5, 255, 172, 92, 9, 255, 173, 91, 11, 255, 179, 97, 3, 255, 183, 98, 6, 255, 178, 95, 2, 255, 179, 92, 8, 255, 177, 93, 7, 255, 180, 100, 5, 255, 189, 105, 13, 255, 175, 90, 11, 255, 177, 97, 4, 255, 177, 96, 3, 255, 183, 101, 3, 255, 189, 100, 2, 255, 201, 108, 11, 255, 200, 112, 8, 255, 193, 107, 5, 255, 186, 103, 4, 255, 185, 104, 3, 255, 189, 109, 8, 255, 188, 110, 6, 255, 185, 108, 0, 255, 193, 114, 3, 255, 196, 116, 9, 255, 196, 116, 10, 255, 192, 112, 8, 255, 187, 110, 10, 255, 185, 111, 3, 255, 188, 115, 10, 255, 187, 111, 1, 255, 188, 109, 5, 255, 181, 102, 6, 255, 185, 109, 10, 255, 181, 109, 6, 255, 180, 108, 5, 255, 185, 114, 7, 255, 185, 113, 10, 255, 186, 111, 7, 255, 183, 108, 6, 255, 177, 105, 4, 255, 175, 109, 6, 255, 187, 120, 10, 255, 191, 115, 11, 255, 179, 104, 7, 255, 182, 107, 11, 255, 181, 109, 10, 255, 182, 116, 9, 255, 187, 122, 5, 255, 192, 131, 4, 255, 194, 135, 6, 255, 186, 125, 0, 255, 186, 120, 12, 255, 175, 106, 11, 255, 177, 111, 2, 255, 175, 111, 6, 255, 174, 112, 2, 255, 175, 111, 1, 255, 177, 109, 5, 255, 178, 107, 4, 255, 177, 104, 2, 255, 189, 115, 3, 255, 195, 114, 7, 255, 192, 104, 7, 255, 193, 112, 7, 255, 192, 121, 19, 255, 183, 113, 16, 255, 177, 104, 9, 255, 181, 106, 16, 255, 183, 115, 9, 255, 192, 129, 13, 255, 191, 128, 6, 255, 185, 118, 4, 255, 182, 108, 6, 255, 178, 101, 4, 255, 172, 92, 5, 255, 169, 92, 6, 255, 166, 89, 4, 255, 164, 87, 3, 255, 163, 83, 2, 255, 166, 86, 2, 255, 168, 85, 6, 255, 150, 77, 3, 255, 151, 83, 4, 255, 158, 86, 8, 255, 161, 88, 0, 255, 163, 88, 0, 255, 171, 105, 13, 255, 185, 120, 11, 255, 179, 121, 12, 255, 189, 130, 9, 255, 195, 131, 20, 255, 185, 115, 18, 255, 188, 118, 20, 255, 195, 116, 14, 255, 190, 115, 14, 255, 169, 92, 12, 255, 164, 78, 4, 255, 164, 81, 6, 255, 157, 82, 4, 255, 152, 74, 6, 255, 142, 63, 5, 255, 164, 79, 7, 255, 197, 112, 4, 255, 204, 124, 0, 255, 202, 115, 7, 255, 184, 90, 10, 255, 161, 73, 3, 255, 134, 58, 2, 255, 123, 49, 3, 255, 111, 40, 3, 255, 119, 54, 6, 255, 124, 61, 4, 255, 127, 60, 15, 255, 121, 60, 9, 255, 119, 65, 12, 255, 126, 70, 14, 255, 132, 75, 7, 255, 122, 68, 4, 255, 121, 64, 6, 255, 122, 64, 10, 255, 113, 58, 8, 255, 99, 48, 5, 255, 103, 48, 8, 255, 106, 52, 2, 255, 104, 54, 1, 255, 105, 56, 6, 255, 99, 48, 7, 255, 104, 57, 9, 255, 110, 60, 2, 255, 120, 63, 7, 255, 115, 64, 8, 255, 108, 59, 4, 255, 109, 60, 5, 255, 108, 59, 4, 255, 111, 60, 6, 255, 112, 59, 6, 255, 108, 55, 6, 255, 101, 49, 6, 255, 99, 45, 1, 255, 107, 54, 6, 255, 110, 56, 10, 255, 104, 50, 7, 255, 104, 51, 5, 255, 101, 49, 5, 255, 107, 53, 9, 255, 104, 53, 8, 255, 98, 50, 3, 255, 101, 47, 1, 255, 104, 50, 1, 255, 106, 51, 5, 255, 99, 49, 3, 255, 98, 48, 0, 255, 102, 48, 0, 255, 103, 51, 2, 255, 103, 47, 2, 255, 102, 44, 2, 255, 102, 36, 2, 255, 90, 24, 3, 255, 82, 20, 5, 255, 0, 0, 14, 255, 1, 0, 14, 255, 1, 1, 13, 255, 0, 0, 11, 255, 1, 1, 11, 255, 1, 1, 10, 255, 1, 0, 15, 255, 1, 1, 8, 255, 4, 1, 7, 255, 4, 1, 5, 255, 5, 2, 10, 255, 4, 48, 103, 255, 44, 128, 224, 255, 40, 183, 238, 255, 23, 124, 158, 255, 37, 60, 66, 255, 38, 41, 51, 255, 40, 40, 52, 255, 32, 33, 61, 255, 25, 31, 55, 255, 19, 40, 62, 255, 29, 40, 55, 255, 6, 24, 30, 255, 32, 41, 41, 255, 24, 45, 63, 255, 5, 18, 26, 255, 2, 0, 0, 255, 2, 1, 2, 255, 2, 1, 5, 255, 0, 2, 1, 255, 1, 2, 2, 255, 1, 3, 1, 255, 1, 2, 1, 255, 0, 2, 3, 255, 4, 1, 3, 255, 3, 1, 5, 255, 4, 2, 2, 255, 1, 1, 2, 255, 3, 2, 0, 255, 2, 8, 57, 255, 10, 168, 254, 255, 7, 78, 120, 255, 9, 0, 0, 255, 11, 19, 103, 255, 4, 35, 201, 255, 6, 8, 7, 255, 6, 0, 1, 255, 1, 3, 2, 255, 1, 1, 2, 255, 1, 0, 2, 255, 1, 0, 0, 255, 3, 1, 1, 255, 1, 0, 1, 255, 3, 2, 3, 255, 13, 14, 9, 255, 27, 29, 23, 255, 28, 30, 31, 255, 28, 26, 32, 255, 31, 26, 36, 255, 33, 33, 40, 255, 31, 30, 50, 255, 19, 19, 22, 255, 20, 20, 10, 255, 18, 16, 9, 255, 22, 20, 13, 255, 27, 31, 31, 255, 30, 38, 33, 255, 27, 29, 17, 255, 27, 26, 15, 255, 19, 21, 9, 255, 12, 15, 4, 255, 15, 15, 5, 255, 19, 18, 6, 255, 18, 16, 3, 255, 18, 16, 3, 255, 17, 17, 5, 255, 15, 16, 5, 255, 16, 18, 4, 255, 23, 20, 4, 255, 27, 23, 6, 255, 23, 22, 4, 255, 22, 21, 3, 255, 26, 25, 5, 255, 33, 31, 8, 255, 37, 40, 7, 255, 39, 47, 14, 255, 40, 55, 8, 255, 46, 65, 5, 255, 53, 71, 12, 255, 57, 74, 15, 255, 65, 75, 30, 255, 70, 83, 27, 255, 62, 89, 22, 255, 60, 93, 19, 255, 64, 89, 20, 255, 71, 91, 18, 255, 70, 85, 13, 255, 70, 80, 13, 255, 67, 81, 11, 255, 68, 79, 11, 255, 74, 74, 13, 255, 68, 72, 15, 255, 68, 71, 11, 255, 71, 69, 8, 255, 74, 68, 5, 255, 75, 68, 6, 255, 73, 69, 4, 255, 76, 67, 2, 255, 70, 63, 4, 255, 65, 61, 4, 255, 70, 56, 6, 255, 64, 56, 5, 255, 64, 52, 6, 255, 65, 52, 5, 255, 65, 46, 5, 255, 68, 48, 6, 255, 77, 48, 6, 255, 71, 47, 3, 255, 76, 47, 8, 255, 83, 48, 4, 255, 78, 44, 2, 255, 88, 53, 6, 255, 87, 54, 4, 255, 88, 53, 7, 255, 76, 45, 3, 255, 72, 48, 5, 255, 75, 48, 4, 255, 86, 49, 6, 255, 81, 47, 8, 255, 76, 48, 1, 255, 76, 48, 4, 255, 84, 43, 7, 255, 85, 47, 6, 255, 81, 47, 2, 255, 86, 46, 2, 255, 89, 54, 4, 255, 92, 50, 6, 255, 97, 51, 8, 255, 97, 51, 4, 255, 104, 57, 6, 255, 110, 56, 7, 255, 101, 55, 5, 255, 99, 59, 2, 255, 93, 58, 7, 255, 101, 52, 6, 255, 126, 59, 4, 255, 119, 58, 8, 255, 111, 62, 4, 255, 111, 60, 7, 255, 100, 53, 11, 255, 99, 61, 7, 255, 108, 61, 16, 255, 116, 57, 9, 255, 121, 64, 2, 255, 114, 63, 6, 255, 122, 64, 10, 255, 116, 59, 7, 255, 114, 55, 3, 255, 117, 65, 7, 255, 109, 57, 10, 255, 103, 58, 2, 255, 115, 64, 8, 255, 117, 63, 3, 255, 121, 66, 2, 255, 117, 62, 7, 255, 119, 66, 4, 255, 128, 69, 2, 255, 138, 65, 4, 255, 134, 62, 7, 255, 121, 64, 7, 255, 121, 69, 7, 255, 127, 66, 2, 255, 133, 67, 6, 255, 132, 67, 4, 255, 124, 67, 2, 255, 126, 64, 12, 255, 124, 63, 12, 255, 126, 61, 5, 255, 121, 62, 7, 255, 121, 63, 8, 255, 114, 67, 6, 255, 127, 64, 7, 255, 136, 67, 1, 255, 143, 76, 9, 255, 157, 81, 8, 255, 165, 88, 15, 255, 172, 96, 14, 255, 187, 106, 12, 255, 203, 106, 7, 255, 209, 109, 7, 255, 207, 110, 12, 255, 205, 106, 3, 255, 207, 105, 11, 255, 213, 113, 5, 255, 217, 113, 2, 255, 223, 117, 8, 255, 232, 125, 5, 255, 235, 127, 11, 255, 211, 96, 6, 255, 220, 106, 10, 255, 220, 111, 2, 255, 227, 119, 10, 255, 224, 117, 4, 255, 231, 124, 6, 255, 228, 121, 4, 255, 222, 119, 4, 255, 217, 116, 8, 255, 212, 114, 6, 255, 217, 121, 5, 255, 215, 117, 5, 255, 209, 109, 2, 255, 207, 105, 1, 255, 201, 97, 8, 255, 193, 88, 4, 255, 200, 97, 8, 255, 211, 116, 5, 255, 210, 113, 5, 255, 218, 120, 6, 255, 220, 121, 7, 255, 221, 128, 2, 255, 222, 131, 3, 255, 224, 126, 10, 255, 222, 130, 6, 255, 221, 129, 2, 255, 213, 124, 2, 255, 217, 123, 2, 255, 218, 127, 7, 255, 212, 124, 10, 255, 213, 121, 6, 255, 212, 115, 0, 255, 210, 117, 3, 255, 194, 109, 5, 255, 194, 110, 13, 255, 202, 111, 7, 255, 204, 108, 8, 255, 190, 98, 11, 255, 179, 96, 11, 255, 185, 97, 5, 255, 194, 105, 15, 255, 197, 108, 13, 255, 194, 105, 5, 255, 188, 97, 1, 255, 184, 91, 6, 255, 192, 99, 15, 255, 187, 98, 3, 255, 181, 92, 4, 255, 184, 94, 10, 255, 184, 98, 10, 255, 194, 109, 7, 255, 202, 120, 10, 255, 182, 99, 5, 255, 178, 102, 1, 255, 174, 97, 7, 255, 175, 97, 9, 255, 179, 99, 1, 255, 187, 102, 5, 255, 184, 103, 4, 255, 180, 99, 9, 255, 178, 100, 13, 255, 186, 107, 8, 255, 196, 117, 3, 255, 192, 110, 3, 255, 189, 110, 6, 255, 193, 116, 4, 255, 191, 112, 2, 255, 193, 114, 6, 255, 191, 112, 7, 255, 185, 109, 5, 255, 187, 116, 2, 255, 185, 113, 7, 255, 184, 110, 2, 255, 186, 109, 7, 255, 187, 109, 5, 255, 186, 111, 3, 255, 182, 110, 1, 255, 177, 105, 7, 255, 188, 110, 12, 255, 195, 111, 9, 255, 190, 108, 7, 255, 185, 112, 2, 255, 189, 122, 2, 255, 197, 127, 4, 255, 203, 124, 11, 255, 166, 99, 15, 255, 160, 104, 26, 255, 185, 121, 17, 255, 185, 126, 6, 255, 179, 115, 7, 255, 177, 110, 8, 255, 183, 116, 3, 255, 189, 121, 7, 255, 168, 100, 1, 255, 159, 93, 3, 255, 168, 99, 4, 255, 166, 100, 0, 255, 168, 102, 5, 255, 173, 104, 7, 255, 173, 101, 4, 255, 177, 101, 10, 255, 172, 95, 2, 255, 181, 102, 3, 255, 192, 109, 6, 255, 189, 108, 5, 255, 188, 112, 2, 255, 190, 116, 7, 255, 183, 112, 15, 255, 173, 107, 16, 255, 169, 111, 14, 255, 165, 102, 9, 255, 169, 96, 13, 255, 176, 100, 5, 255, 187, 114, 6, 255, 194, 125, 2, 255, 188, 119, 1, 255, 187, 114, 7, 255, 181, 106, 6, 255, 174, 99, 0, 255, 168, 94, 5, 255, 164, 88, 11, 255, 164, 86, 2, 255, 163, 85, 7, 255, 165, 90, 7, 255, 161, 86, 7, 255, 148, 81, 11, 255, 130, 64, 8, 255, 149, 83, 8, 255, 166, 96, 7, 255, 184, 113, 15, 255, 182, 109, 1, 255, 188, 133, 7, 255, 193, 142, 11, 255, 196, 133, 19, 255, 178, 113, 17, 255, 178, 107, 15, 255, 166, 89, 13, 255, 150, 72, 11, 255, 147, 75, 4, 255, 150, 77, 5, 255, 151, 78, 7, 255, 153, 78, 0, 255, 148, 70, 1, 255, 152, 68, 5, 255, 179, 96, 9, 255, 199, 120, 2, 255, 201, 120, 6, 255, 191, 107, 6, 255, 175, 85, 4, 255, 157, 72, 7, 255, 138, 67, 2, 255, 132, 62, 6, 255, 132, 60, 8, 255, 131, 66, 6, 255, 133, 67, 12, 255, 133, 68, 8, 255, 123, 60, 1, 255, 118, 57, 12, 255, 123, 64, 9, 255, 124, 64, 5, 255, 127, 66, 7, 255, 123, 65, 6, 255, 119, 66, 4, 255, 121, 65, 2, 255, 114, 60, 4, 255, 108, 58, 6, 255, 110, 59, 6, 255, 106, 54, 4, 255, 104, 50, 7, 255, 102, 49, 5, 255, 107, 58, 4, 255, 108, 59, 1, 255, 111, 57, 4, 255, 114, 61, 4, 255, 114, 63, 5, 255, 113, 62, 6, 255, 105, 55, 1, 255, 105, 54, 4, 255, 108, 55, 8, 255, 100, 46, 6, 255, 104, 52, 9, 255, 109, 54, 1, 255, 108, 50, 4, 255, 99, 43, 5, 255, 101, 49, 7, 255, 101, 54, 4, 255, 103, 55, 3, 255, 103, 48, 3, 255, 100, 47, 5, 255, 96, 46, 5, 255, 96, 42, 3, 255, 102, 49, 6, 255, 94, 48, 5, 255, 92, 48, 6, 255, 97, 46, 5, 255, 101, 46, 4, 255, 101, 45, 5, 255, 100, 37, 3, 255, 98, 36, 4, 255, 99, 33, 3, 255, 86, 20, 0, 255, 85, 23, 6, 255, 1, 0, 16, 255, 0, 0, 14, 255, 1, 1, 13, 255, 1, 1, 11, 255, 0, 0, 12, 255, 0, 0, 13, 255, 1, 0, 18, 255, 4, 1, 4, 255, 1, 1, 2, 255, 2, 2, 6, 255, 0, 0, 2, 255, 8, 11, 54, 255, 81, 184, 233, 255, 40, 151, 167, 255, 23, 93, 145, 255, 28, 101, 118, 255, 45, 66, 78, 255, 58, 67, 94, 255, 52, 59, 87, 255, 47, 72, 106, 255, 38, 59, 88, 255, 30, 50, 67, 255, 35, 44, 67, 255, 16, 33, 40, 255, 34, 58, 76, 255, 47, 77, 112, 255, 20, 43, 59, 255, 0, 1, 3, 255, 0, 1, 0, 255, 2, 0, 3, 255, 1, 1, 2, 255, 1, 1, 1, 255, 0, 2, 0, 255, 4, 1, 6, 255, 5, 0, 8, 255, 1, 2, 3, 255, 1, 1, 10, 255, 4, 3, 0, 255, 3, 0, 0, 255, 6, 110, 191, 255, 5, 141, 197, 255, 11, 0, 0, 255, 17, 7, 26, 255, 5, 28, 206, 255, 4, 13, 57, 255, 6, 2, 0, 255, 0, 5, 4, 255, 2, 0, 8, 255, 2, 0, 6, 255, 4, 0, 6, 255, 0, 0, 0, 255, 0, 1, 1, 255, 1, 0, 0, 255, 3, 0, 0, 255, 10, 12, 6, 255, 25, 30, 22, 255, 30, 31, 28, 255, 30, 27, 30, 255, 33, 30, 39, 255, 38, 32, 45, 255, 37, 30, 35, 255, 28, 23, 25, 255, 22, 21, 16, 255, 24, 27, 7, 255, 26, 29, 20, 255, 35, 39, 40, 255, 36, 42, 42, 255, 27, 33, 27, 255, 24, 28, 20, 255, 21, 23, 10, 255, 18, 18, 5, 255, 15, 13, 1, 255, 15, 13, 2, 255, 21, 18, 7, 255, 17, 15, 2, 255, 19, 17, 4, 255, 18, 20, 5, 255, 16, 20, 6, 255, 24, 23, 7, 255, 24, 21, 5, 255, 24, 22, 5, 255, 22, 24, 5, 255, 26, 28, 8, 255, 32, 36, 7, 255, 36, 42, 11, 255, 39, 48, 18, 255, 44, 57, 16, 255, 50, 65, 17, 255, 55, 71, 15, 255, 59, 75, 17, 255, 64, 84, 11, 255, 65, 82, 24, 255, 71, 84, 35, 255, 68, 90, 15, 255, 63, 82, 26, 255, 70, 83, 24, 255, 66, 79, 17, 255, 67, 78, 16, 255, 67, 81, 7, 255, 66, 76, 10, 255, 69, 73, 15, 255, 62, 69, 12, 255, 63, 68, 15, 255, 73, 72, 9, 255, 73, 72, 6, 255, 70, 66, 6, 255, 72, 67, 2, 255, 72, 65, 4, 255, 72, 60, 8, 255, 67, 60, 4, 255, 73, 55, 3, 255, 66, 54, 5, 255, 67, 56, 1, 255, 62, 53, 4, 255, 75, 49, 7, 255, 85, 53, 6, 255, 97, 53, 9, 255, 78, 45, 3, 255, 93, 56, 2, 255, 100, 53, 1, 255, 93, 50, 2, 255, 108, 57, 8, 255, 101, 53, 5, 255, 84, 50, 3, 255, 74, 46, 1, 255, 76, 45, 3, 255, 84, 49, 5, 255, 81, 50, 4, 255, 79, 48, 3, 255, 79, 46, 2, 255, 79, 46, 10, 255, 78, 47, 8, 255, 92, 50, 3, 255, 106, 50, 3, 255, 94, 49, 5, 255, 89, 52, 7, 255, 96, 50, 5, 255, 100, 51, 4, 255, 98, 57, 4, 255, 130, 64, 11, 255, 132, 60, 6, 255, 103, 59, 10, 255, 97, 55, 5, 255, 93, 57, 5, 255, 99, 60, 5, 255, 128, 64, 8, 255, 112, 57, 12, 255, 93, 59, 9, 255, 108, 58, 8, 255, 120, 64, 7, 255, 111, 66, 3, 255, 107, 61, 8, 255, 126, 65, 4, 255, 123, 62, 2, 255, 111, 56, 10, 255, 117, 62, 7, 255, 126, 69, 1, 255, 122, 63, 4, 255, 122, 61, 5, 255, 125, 66, 4, 255, 116, 66, 3, 255, 113, 61, 3, 255, 114, 63, 8, 255, 112, 62, 9, 255, 114, 62, 10, 255, 118, 64, 7, 255, 135, 69, 8, 255, 133, 62, 3, 255, 125, 59, 9, 255, 126, 66, 9, 255, 128, 65, 4, 255, 126, 64, 14, 255, 119, 65, 6, 255, 126, 64, 13, 255, 121, 64, 4, 255, 124, 65, 6, 255, 140, 70, 17, 255, 145, 75, 13, 255, 150, 84, 11, 255, 160, 89, 4, 255, 168, 87, 8, 255, 177, 96, 12, 255, 191, 104, 5, 255, 196, 101, 12, 255, 197, 106, 10, 255, 207, 108, 5, 255, 204, 104, 8, 255, 201, 106, 11, 255, 204, 110, 5, 255, 201, 105, 6, 255, 196, 99, 4, 255, 203, 99, 4, 255, 198, 101, 6, 255, 196, 103, 5, 255, 194, 101, 8, 255, 190, 96, 6, 255, 196, 103, 7, 255, 192, 96, 8, 255, 192, 91, 9, 255, 193, 89, 5, 255, 194, 91, 4, 255, 199, 97, 4, 255, 201, 101, 4, 255, 201, 103, 6, 255, 202, 104, 9, 255, 204, 104, 9, 255, 201, 102, 4, 255, 197, 100, 1, 255, 204, 106, 4, 255, 199, 102, 5, 255, 197, 99, 11, 255, 200, 103, 7, 255, 201, 102, 9, 255, 194, 98, 5, 255, 199, 105, 11, 255, 204, 110, 5, 255, 202, 108, 8, 255, 205, 113, 10, 255, 209, 112, 3, 255, 210, 114, 1, 255, 212, 114, 0, 255, 205, 107, 1, 255, 213, 115, 4, 255, 215, 120, 8, 255, 213, 115, 5, 255, 214, 124, 5, 255, 221, 127, 2, 255, 220, 122, 6, 255, 208, 117, 9, 255, 207, 108, 1, 255, 209, 112, 4, 255, 210, 118, 11, 255, 210, 117, 8, 255, 209, 121, 1, 255, 213, 130, 4, 255, 211, 128, 5, 255, 212, 127, 6, 255, 207, 122, 8, 255, 207, 124, 8, 255, 206, 123, 2, 255, 206, 125, 2, 255, 199, 119, 0, 255, 193, 114, 5, 255, 201, 119, 2, 255, 191, 104, 8, 255, 184, 96, 12, 255, 182, 95, 8, 255, 186, 98, 10, 255, 187, 99, 0, 255, 190, 105, 4, 255, 196, 117, 4, 255, 200, 122, 7, 255, 186, 106, 5, 255, 192, 112, 7, 255, 190, 110, 7, 255, 182, 99, 5, 255, 182, 97, 7, 255, 183, 100, 12, 255, 181, 101, 7, 255, 184, 102, 1, 255, 188, 104, 3, 255, 189, 105, 2, 255, 195, 110, 7, 255, 196, 112, 5, 255, 198, 114, 6, 255, 193, 111, 3, 255, 189, 110, 5, 255, 191, 114, 9, 255, 193, 120, 5, 255, 189, 113, 5, 255, 186, 112, 1, 255, 184, 111, 1, 255, 183, 110, 9, 255, 180, 105, 17, 255, 180, 106, 5, 255, 180, 110, 10, 255, 180, 112, 16, 255, 185, 120, 19, 255, 184, 119, 10, 255, 182, 112, 7, 255, 193, 125, 7, 255, 196, 125, 1, 255, 184, 109, 0, 255, 179, 112, 14, 255, 183, 123, 13, 255, 183, 124, 14, 255, 166, 102, 17, 255, 167, 93, 12, 255, 161, 92, 15, 255, 177, 115, 4, 255, 181, 120, 4, 255, 162, 96, 6, 255, 154, 87, 9, 255, 157, 94, 9, 255, 169, 106, 9, 255, 171, 107, 2, 255, 166, 100, 4, 255, 165, 97, 5, 255, 167, 96, 7, 255, 165, 90, 5, 255, 171, 91, 1, 255, 183, 97, 0, 255, 181, 101, 6, 255, 174, 99, 2, 255, 176, 102, 11, 255, 175, 107, 25, 255, 171, 117, 16, 255, 170, 108, 6, 255, 170, 102, 6, 255, 177, 108, 11, 255, 185, 113, 18, 255, 191, 122, 6, 255, 183, 110, 8, 255, 181, 109, 2, 255, 182, 109, 1, 255, 181, 106, 1, 255, 181, 106, 4, 255, 176, 103, 3, 255, 175, 102, 4, 255, 173, 96, 5, 255, 174, 92, 3, 255, 170, 100, 3, 255, 164, 90, 0, 255, 129, 68, 5, 255, 122, 66, 9, 255, 165, 95, 13, 255, 181, 121, 7, 255, 188, 125, 1, 255, 195, 128, 4, 255, 197, 140, 10, 255, 199, 141, 13, 255, 181, 106, 10, 255, 146, 75, 6, 255, 138, 70, 10, 255, 124, 63, 7, 255, 138, 67, 3, 255, 147, 71, 13, 255, 139, 72, 10, 255, 144, 72, 9, 255, 151, 76, 4, 255, 151, 68, 5, 255, 164, 77, 5, 255, 189, 111, 6, 255, 199, 126, 5, 255, 201, 121, 6, 255, 199, 117, 6, 255, 194, 113, 4, 255, 162, 77, 9, 255, 145, 66, 9, 255, 147, 73, 3, 255, 141, 65, 1, 255, 134, 63, 5, 255, 126, 57, 4, 255, 121, 56, 7, 255, 124, 57, 7, 255, 125, 61, 14, 255, 120, 65, 10, 255, 119, 60, 7, 255, 122, 59, 4, 255, 123, 66, 6, 255, 118, 61, 3, 255, 110, 49, 4, 255, 110, 52, 7, 255, 109, 59, 6, 255, 105, 55, 6, 255, 97, 41, 11, 255, 94, 43, 2, 255, 97, 46, 7, 255, 102, 50, 6, 255, 109, 58, 3, 255, 107, 58, 4, 255, 113, 58, 5, 255, 114, 59, 7, 255, 104, 51, 2, 255, 100, 48, 1, 255, 105, 53, 7, 255, 102, 50, 4, 255, 99, 47, 0, 255, 101, 49, 2, 255, 102, 48, 7, 255, 103, 47, 5, 255, 103, 50, 4, 255, 101, 51, 4, 255, 100, 52, 3, 255, 94, 47, 0, 255, 96, 45, 3, 255, 94, 43, 6, 255, 88, 40, 2, 255, 92, 41, 3, 255, 92, 39, 0, 255, 88, 41, 2, 255, 91, 43, 6, 255, 93, 40, 3, 255, 100, 43, 8, 255, 105, 42, 9, 255, 98, 37, 4, 255, 95, 31, 1, 255, 92, 27, 2, 255, 87, 26, 0, 255, 98, 32, 5, 255, 1, 0, 20, 255, 1, 0, 16, 255, 1, 1, 13, 255, 1, 1, 12, 255, 0, 0, 12, 255, 1, 0, 17, 255, 1, 0, 10, 255, 2, 2, 5, 255, 1, 1, 2, 255, 2, 0, 8, 255, 7, 1, 6, 255, 5, 5, 4, 255, 22, 59, 57, 255, 11, 29, 21, 255, 22, 29, 59, 255, 17, 72, 120, 255, 15, 41, 43, 255, 29, 46, 68, 255, 32, 49, 57, 255, 42, 65, 83, 255, 53, 63, 85, 255, 26, 46, 66, 255, 43, 58, 86, 255, 44, 64, 90, 255, 19, 29, 38, 255, 15, 23, 29, 255, 45, 76, 136, 255, 23, 57, 62, 255, 1, 1, 0, 255, 5, 1, 2, 255, 2, 2, 4, 255, 0, 2, 1, 255, 0, 1, 5, 255, 3, 1, 2, 255, 5, 0, 3, 255, 1, 2, 1, 255, 2, 2, 5, 255, 3, 0, 0, 255, 2, 41, 110, 255, 3, 173, 245, 255, 10, 19, 47, 255, 10, 3, 0, 255, 13, 26, 154, 255, 2, 20, 136, 255, 2, 0, 0, 255, 0, 5, 5, 255, 0, 4, 6, 255, 5, 0, 5, 255, 2, 2, 1, 255, 0, 0, 3, 255, 0, 0, 0, 255, 2, 2, 2, 255, 0, 1, 1, 255, 0, 0, 0, 255, 3, 4, 1, 255, 20, 19, 11, 255, 26, 25, 19, 255, 28, 24, 19, 255, 35, 29, 32, 255, 34, 31, 47, 255, 36, 34, 36, 255, 32, 27, 22, 255, 25, 23, 15, 255, 26, 30, 19, 255, 24, 33, 30, 255, 36, 44, 46, 255, 38, 45, 43, 255, 33, 41, 30, 255, 28, 33, 21, 255, 27, 27, 12, 255, 27, 23, 8, 255, 19, 16, 3, 255, 18, 14, 4, 255, 19, 15, 4, 255, 20, 16, 5, 255, 19, 17, 3, 255, 21, 21, 5, 255, 18, 18, 5, 255, 22, 22, 4, 255, 27, 23, 5, 255, 32, 28, 10, 255, 25, 25, 5, 255, 30, 31, 9, 255, 30, 44, 11, 255, 38, 51, 14, 255, 45, 54, 10, 255, 52, 59, 9, 255, 57, 65, 14, 255, 62, 73, 16, 255, 58, 74, 27, 255, 58, 83, 20, 255, 66, 82, 15, 255, 82, 84, 19, 255, 81, 86, 14, 255, 72, 82, 16, 255, 72, 79, 11, 255, 66, 74, 15, 255, 67, 73, 13, 255, 71, 77, 7, 255, 71, 75, 8, 255, 70, 69, 16, 255, 66, 66, 9, 255, 64, 66, 14, 255, 70, 68, 7, 255, 66, 69, 3, 255, 69, 68, 9, 255, 73, 69, 1, 255, 65, 65, 1, 255, 70, 62, 8, 255, 72, 58, 6, 255, 67, 55, 1, 255, 68, 57, 3, 255, 69, 52, 2, 255, 89, 56, 6, 255, 77, 51, 7, 255, 68, 46, 2, 255, 84, 47, 8, 255, 82, 48, 5, 255, 82, 54, 1, 255, 87, 52, 5, 255, 91, 50, 4, 255, 105, 58, 6, 255, 100, 57, 4, 255, 81, 52, 1, 255, 78, 52, 6, 255, 78, 49, 5, 255, 84, 49, 4, 255, 82, 51, 3, 255, 84, 45, 1, 255, 92, 51, 1, 255, 108, 55, 7, 255, 113, 51, 7, 255, 110, 53, 1, 255, 113, 53, 3, 255, 95, 49, 5, 255, 87, 53, 7, 255, 84, 56, 2, 255, 96, 57, 5, 255, 96, 58, 2, 255, 112, 63, 3, 255, 115, 62, 1, 255, 96, 56, 3, 255, 110, 59, 5, 255, 136, 61, 9, 255, 125, 61, 6, 255, 118, 62, 0, 255, 112, 58, 5, 255, 105, 54, 4, 255, 122, 65, 10, 255, 118, 64, 3, 255, 110, 62, 3, 255, 110, 59, 2, 255, 115, 67, 2, 255, 113, 63, 9, 255, 120, 63, 4, 255, 132, 65, 5, 255, 134, 66, 2, 255, 127, 64, 3, 255, 122, 56, 1, 255, 136, 66, 5, 255, 123, 63, 5, 255, 114, 57, 13, 255, 112, 61, 8, 255, 113, 64, 7, 255, 118, 65, 5, 255, 123, 63, 5, 255, 119, 61, 2, 255, 125, 70, 6, 255, 129, 68, 4, 255, 129, 65, 10, 255, 131, 66, 9, 255, 138, 73, 5, 255, 144, 77, 8, 255, 155, 85, 6, 255, 167, 92, 6, 255, 177, 94, 11, 255, 176, 92, 11, 255, 182, 89, 3, 255, 191, 92, 5, 255, 186, 87, 10, 255, 185, 91, 10, 255, 192, 92, 7, 255, 195, 97, 0, 255, 190, 99, 8, 255, 191, 101, 12, 255, 188, 100, 9, 255, 188, 102, 6, 255, 188, 101, 4, 255, 197, 105, 2, 255, 194, 100, 10, 255, 178, 86, 7, 255, 188, 93, 7, 255, 195, 101, 11, 255, 194, 103, 6, 255, 192, 101, 9, 255, 193, 103, 6, 255, 192, 103, 3, 255, 195, 101, 6, 255, 193, 104, 6, 255, 192, 102, 9, 255, 189, 95, 9, 255, 191, 96, 2, 255, 194, 99, 5, 255, 190, 95, 7, 255, 188, 95, 4, 255, 193, 95, 2, 255, 197, 100, 0, 255, 195, 95, 5, 255, 187, 89, 5, 255, 183, 87, 0, 255, 187, 95, 0, 255, 189, 96, 2, 255, 191, 94, 5, 255, 193, 103, 5, 255, 196, 108, 2, 255, 201, 105, 6, 255, 201, 109, 13, 255, 193, 109, 8, 255, 199, 111, 8, 255, 203, 116, 8, 255, 195, 105, 1, 255, 200, 106, 7, 255, 200, 110, 5, 255, 199, 114, 8, 255, 203, 112, 7, 255, 207, 118, 6, 255, 207, 119, 0, 255, 207, 117, 13, 255, 205, 113, 12, 255, 200, 108, 1, 255, 198, 106, 4, 255, 200, 108, 4, 255, 205, 115, 4, 255, 208, 121, 4, 255, 205, 120, 4, 255, 204, 119, 2, 255, 208, 121, 4, 255, 207, 122, 5, 255, 207, 123, 1, 255, 212, 129, 6, 255, 212, 129, 10, 255, 209, 127, 7, 255, 211, 133, 7, 255, 210, 132, 3, 255, 213, 136, 3, 255, 213, 137, 10, 255, 207, 132, 13, 255, 205, 132, 4, 255, 201, 130, 7, 255, 201, 124, 10, 255, 214, 130, 3, 255, 211, 126, 8, 255, 214, 131, 4, 255, 211, 127, 8, 255, 198, 113, 5, 255, 187, 101, 10, 255, 187, 102, 6, 255, 187, 107, 4, 255, 187, 110, 3, 255, 186, 109, 6, 255, 185, 107, 10, 255, 181, 107, 8, 255, 183, 106, 12, 255, 186, 104, 7, 255, 184, 102, 0, 255, 189, 104, 4, 255, 197, 112, 6, 255, 202, 116, 3, 255, 195, 110, 1, 255, 194, 111, 4, 255, 191, 114, 2, 255, 187, 116, 3, 255, 182, 113, 2, 255, 184, 116, 11, 255, 190, 123, 7, 255, 195, 122, 13, 255, 197, 124, 13, 255, 192, 121, 12, 255, 183, 107, 13, 255, 188, 107, 11, 255, 199, 113, 13, 255, 195, 112, 7, 255, 173, 102, 5, 255, 175, 116, 11, 255, 180, 123, 14, 255, 192, 139, 15, 255, 181, 133, 15, 255, 181, 122, 17, 255, 179, 119, 16, 255, 182, 120, 12, 255, 170, 107, 2, 255, 148, 81, 9, 255, 155, 90, 7, 255, 168, 105, 4, 255, 171, 105, 4, 255, 172, 105, 3, 255, 164, 95, 3, 255, 164, 97, 1, 255, 164, 96, 7, 255, 153, 81, 8, 255, 155, 81, 3, 255, 174, 92, 10, 255, 180, 100, 1, 255, 171, 88, 5, 255, 172, 98, 7, 255, 177, 117, 19, 255, 173, 121, 27, 255, 173, 119, 12, 255, 171, 110, 9, 255, 171, 99, 8, 255, 187, 109, 7, 255, 188, 110, 10, 255, 191, 119, 11, 255, 188, 118, 6, 255, 180, 104, 5, 255, 186, 108, 6, 255, 184, 109, 1, 255, 180, 106, 3, 255, 182, 107, 7, 255, 177, 102, 1, 255, 179, 104, 1, 255, 178, 105, 3, 255, 168, 92, 6, 255, 122, 66, 3, 255, 144, 85, 6, 255, 188, 119, 7, 255, 190, 130, 13, 255, 188, 127, 11, 255, 189, 131, 5, 255, 195, 132, 8, 255, 202, 138, 8, 255, 168, 90, 12, 255, 139, 71, 17, 255, 135, 68, 17, 255, 131, 71, 12, 255, 145, 74, 11, 255, 153, 74, 2, 255, 156, 78, 5, 255, 154, 72, 4, 255, 149, 67, 0, 255, 158, 75, 7, 255, 180, 100, 7, 255, 199, 122, 4, 255, 199, 120, 9, 255, 192, 112, 6, 255, 193, 116, 2, 255, 194, 109, 7, 255, 171, 81, 6, 255, 156, 75, 3, 255, 148, 70, 3, 255, 143, 69, 3, 255, 137, 67, 2, 255, 116, 49, 2, 255, 115, 50, 3, 255, 127, 65, 10, 255, 118, 59, 10, 255, 116, 62, 8, 255, 120, 65, 8, 255, 118, 62, 3, 255, 111, 50, 0, 255, 100, 36, 5, 255, 81, 27, 5, 255, 87, 36, 2, 255, 99, 47, 3, 255, 92, 41, 2, 255, 92, 42, 5, 255, 96, 53, 2, 255, 100, 55, 6, 255, 101, 48, 6, 255, 103, 49, 5, 255, 104, 54, 9, 255, 109, 55, 9, 255, 107, 52, 5, 255, 99, 46, 1, 255, 102, 49, 5, 255, 106, 53, 8, 255, 102, 51, 3, 255, 105, 49, 6, 255, 102, 44, 9, 255, 100, 47, 7, 255, 104, 55, 4, 255, 109, 60, 4, 255, 109, 53, 4, 255, 102, 41, 1, 255, 89, 38, 1, 255, 93, 41, 2, 255, 95, 45, 4, 255, 89, 42, 2, 255, 87, 41, 3, 255, 86, 35, 3, 255, 88, 36, 6, 255, 97, 36, 5, 255, 96, 38, 0, 255, 103, 42, 2, 255, 107, 41, 4, 255, 94, 36, 3, 255, 92, 27, 1, 255, 97, 24, 4, 255, 105, 34, 4, 255, 115, 33, 2, 255, 2, 1, 20, 255, 2, 1, 18, 255, 2, 1, 15, 255, 2, 2, 14, 255, 1, 0, 13, 255, 1, 0, 16, 255, 0, 2, 12, 255, 0, 1, 9, 255, 6, 0, 11, 255, 3, 1, 10, 255, 2, 1, 6, 255, 2, 2, 10, 255, 0, 1, 8, 255, 0, 3, 7, 255, 6, 1, 11, 255, 35, 54, 76, 255, 18, 50, 60, 255, 0, 0, 0, 255, 0, 2, 0, 255, 16, 20, 41, 255, 54, 67, 107, 255, 56, 73, 105, 255, 28, 50, 76, 255, 45, 61, 87, 255, 47, 74, 111, 255, 5, 21, 25, 255, 12, 15, 31, 255, 44, 78, 95, 255, 12, 28, 34, 255, 3, 0, 0, 255, 3, 1, 3, 255, 1, 1, 3, 255, 2, 0, 2, 255, 1, 1, 6, 255, 1, 3, 5, 255, 2, 2, 3, 255, 1, 0, 0, 255, 5, 0, 48, 255, 2, 153, 237, 255, 14, 74, 119, 255, 15, 0, 0, 255, 14, 12, 84, 255, 8, 29, 200, 255, 0, 6, 28, 255, 2, 0, 0, 255, 5, 1, 4, 255, 3, 0, 7, 255, 1, 1, 2, 255, 0, 2, 1, 255, 1, 2, 2, 255, 1, 0, 1, 255, 2, 0, 1, 255, 0, 1, 1, 255, 0, 2, 1, 255, 3, 2, 0, 255, 13, 9, 4, 255, 18, 16, 8, 255, 24, 20, 10, 255, 39, 31, 26, 255, 34, 35, 48, 255, 39, 43, 47, 255, 36, 36, 26, 255, 24, 25, 13, 255, 24, 25, 25, 255, 27, 37, 41, 255, 33, 45, 48, 255, 38, 49, 42, 255, 37, 46, 29, 255, 37, 39, 25, 255, 35, 32, 16, 255, 29, 26, 9, 255, 26, 22, 10, 255, 22, 18, 7, 255, 17, 13, 3, 255, 24, 20, 7, 255, 21, 19, 4, 255, 23, 20, 4, 255, 23, 20, 5, 255, 25, 22, 3, 255, 32, 26, 6, 255, 31, 24, 4, 255, 33, 28, 6, 255, 34, 36, 9, 255, 37, 41, 15, 255, 44, 50, 18, 255, 49, 57, 11, 255, 55, 64, 12, 255, 61, 70, 16, 255, 69, 79, 15, 255, 65, 76, 21, 255, 60, 77, 18, 255, 67, 84, 18, 255, 72, 84, 16, 255, 73, 83, 12, 255, 69, 81, 11, 255, 69, 78, 8, 255, 64, 74, 4, 255, 64, 74, 4, 255, 70, 74, 9, 255, 70, 71, 6, 255, 63, 65, 14, 255, 67, 68, 17, 255, 70, 66, 4, 255, 77, 68, 4, 255, 73, 69, 10, 255, 69, 63, 7, 255, 71, 61, 6, 255, 70, 63, 9, 255, 70, 64, 2, 255, 73, 62, 6, 255, 85, 56, 9, 255, 65, 54, 2, 255, 88, 61, 7, 255, 109, 66, 9, 255, 69, 42, 4, 255, 73, 50, 4, 255, 82, 47, 7, 255, 89, 52, 1, 255, 77, 52, 3, 255, 73, 46, 2, 255, 93, 51, 2, 255, 95, 55, 2, 255, 91, 51, 5, 255, 89, 48, 4, 255, 91, 49, 6, 255, 78, 50, 1, 255, 86, 52, 2, 255, 101, 53, 4, 255, 89, 46, 7, 255, 110, 48, 2, 255, 120, 50, 0, 255, 118, 51, 3, 255, 108, 53, 4, 255, 97, 55, 8, 255, 91, 51, 3, 255, 95, 53, 2, 255, 85, 53, 3, 255, 96, 53, 8, 255, 105, 56, 7, 255, 111, 61, 2, 255, 124, 63, 3, 255, 102, 62, 5, 255, 100, 62, 1, 255, 135, 60, 4, 255, 129, 60, 6, 255, 107, 63, 2, 255, 103, 57, 3, 255, 108, 57, 6, 255, 127, 63, 10, 255, 126, 60, 4, 255, 115, 64, 7, 255, 108, 61, 9, 255, 116, 58, 5, 255, 124, 59, 7, 255, 125, 64, 7, 255, 119, 57, 19, 255, 121, 63, 10, 255, 129, 65, 15, 255, 133, 66, 4, 255, 138, 64, 5, 255, 139, 63, 16, 255, 130, 61, 13, 255, 131, 70, 11, 255, 136, 75, 8, 255, 138, 72, 9, 255, 144, 71, 12, 255, 140, 74, 11, 255, 138, 72, 7, 255, 156, 77, 8, 255, 166, 82, 11, 255, 174, 93, 15, 255, 182, 96, 4, 255, 192, 94, 4, 255, 190, 92, 8, 255, 188, 96, 2, 255, 184, 96, 4, 255, 183, 89, 1, 255, 182, 93, 5, 255, 179, 90, 12, 255, 182, 91, 13, 255, 190, 95, 11, 255, 190, 96, 11, 255, 192, 103, 11, 255, 195, 100, 9, 255, 194, 101, 5, 255, 189, 97, 4, 255, 193, 98, 6, 255, 191, 101, 10, 255, 195, 100, 2, 255, 191, 100, 5, 255, 186, 95, 12, 255, 186, 91, 5, 255, 185, 92, 5, 255, 193, 102, 7, 255, 201, 109, 10, 255, 196, 103, 6, 255, 194, 99, 3, 255, 202, 103, 6, 255, 195, 104, 4, 255, 193, 103, 8, 255, 185, 89, 3, 255, 190, 92, 4, 255, 188, 87, 7, 255, 182, 81, 5, 255, 190, 91, 3, 255, 196, 100, 2, 255, 201, 105, 6, 255, 194, 98, 6, 255, 190, 95, 4, 255, 190, 97, 6, 255, 173, 80, 3, 255, 178, 84, 7, 255, 184, 89, 3, 255, 191, 100, 3, 255, 197, 106, 10, 255, 199, 105, 3, 255, 197, 108, 5, 255, 194, 111, 1, 255, 195, 109, 6, 255, 195, 108, 12, 255, 194, 106, 6, 255, 198, 107, 2, 255, 198, 113, 5, 255, 194, 107, 10, 255, 198, 108, 2, 255, 200, 113, 5, 255, 198, 110, 6, 255, 198, 106, 5, 255, 198, 110, 0, 255, 202, 112, 5, 255, 201, 111, 7, 255, 201, 116, 2, 255, 202, 122, 2, 255, 203, 120, 5, 255, 207, 119, 7, 255, 210, 122, 9, 255, 203, 119, 2, 255, 206, 124, 0, 255, 209, 124, 7, 255, 211, 125, 12, 255, 210, 124, 13, 255, 209, 123, 10, 255, 209, 126, 8, 255, 207, 129, 6, 255, 212, 136, 9, 255, 212, 139, 5, 255, 216, 143, 0, 255, 216, 143, 3, 255, 223, 147, 15, 255, 215, 140, 3, 255, 216, 137, 5, 255, 217, 137, 11, 255, 218, 138, 5, 255, 209, 129, 7, 255, 209, 133, 1, 255, 204, 128, 2, 255, 194, 115, 2, 255, 190, 113, 2, 255, 190, 113, 7, 255, 193, 115, 11, 255, 186, 105, 4, 255, 177, 95, 7, 255, 166, 89, 6, 255, 177, 103, 11, 255, 181, 107, 7, 255, 180, 104, 10, 255, 185, 110, 8, 255, 190, 115, 7, 255, 184, 106, 11, 255, 190, 114, 15, 255, 187, 118, 5, 255, 179, 113, 4, 255, 185, 118, 12, 255, 189, 121, 11, 255, 190, 120, 2, 255, 198, 123, 13, 255, 193, 113, 5, 255, 191, 104, 5, 255, 189, 106, 3, 255, 191, 116, 6, 255, 179, 108, 2, 255, 180, 110, 9, 255, 182, 114, 8, 255, 181, 125, 13, 255, 194, 139, 11, 255, 199, 137, 4, 255, 200, 149, 6, 255, 197, 139, 9, 255, 195, 149, 6, 255, 203, 153, 5, 255, 185, 128, 6, 255, 149, 89, 10, 255, 143, 82, 13, 255, 162, 100, 6, 255, 159, 93, 0, 255, 162, 92, 5, 255, 166, 90, 6, 255, 172, 96, 4, 255, 160, 87, 5, 255, 136, 70, 3, 255, 138, 74, 5, 255, 161, 81, 5, 255, 177, 94, 6, 255, 173, 96, 2, 255, 173, 112, 5, 255, 179, 125, 12, 255, 176, 115, 15, 255, 169, 100, 13, 255, 153, 84, 8, 255, 156, 86, 9, 255, 174, 100, 14, 255, 183, 110, 6, 255, 192, 126, 5, 255, 175, 102, 12, 255, 175, 95, 10, 255, 190, 111, 5, 255, 186, 108, 1, 255, 183, 107, 4, 255, 177, 102, 3, 255, 174, 97, 5, 255, 176, 102, 4, 255, 173, 103, 4, 255, 164, 86, 8, 255, 131, 64, 10, 255, 153, 91, 11, 255, 184, 117, 3, 255, 187, 124, 11, 255, 189, 128, 19, 255, 188, 124, 11, 255, 199, 130, 14, 255, 198, 135, 12, 255, 181, 113, 9, 255, 163, 94, 14, 255, 156, 83, 1, 255, 163, 90, 10, 255, 162, 88, 14, 255, 163, 82, 9, 255, 169, 83, 5, 255, 159, 75, 3, 255, 156, 69, 6, 255, 178, 98, 7, 255, 195, 122, 8, 255, 199, 120, 8, 255, 197, 111, 7, 255, 194, 114, 9, 255, 189, 111, 5, 255, 194, 105, 13, 255, 186, 93, 9, 255, 158, 73, 2, 255, 153, 77, 11, 255, 149, 81, 5, 255, 137, 71, 10, 255, 127, 59, 10, 255, 123, 48, 9, 255, 114, 47, 1, 255, 114, 55, 5, 255, 123, 61, 6, 255, 119, 59, 6, 255, 103, 43, 4, 255, 95, 32, 5, 255, 85, 29, 4, 255, 72, 27, 2, 255, 86, 32, 2, 255, 89, 32, 8, 255, 64, 15, 0, 255, 79, 33, 3, 255, 92, 48, 6, 255, 94, 47, 1, 255, 98, 46, 1, 255, 101, 47, 3, 255, 103, 50, 2, 255, 98, 45, 2, 255, 98, 44, 2, 255, 101, 48, 5, 255, 103, 50, 6, 255, 103, 51, 5, 255, 100, 49, 1, 255, 100, 49, 3, 255, 102, 50, 4, 255, 99, 44, 4, 255, 95, 39, 5, 255, 100, 40, 4, 255, 107, 47, 5, 255, 102, 41, 1, 255, 93, 37, 0, 255, 91, 39, 3, 255, 91, 39, 4, 255, 84, 33, 0, 255, 78, 32, 0, 255, 86, 37, 2, 255, 88, 33, 5, 255, 92, 30, 5, 255, 94, 32, 3, 255, 97, 31, 2, 255, 100, 30, 0, 255, 96, 30, 0, 255, 98, 27, 2, 255, 99, 30, 4, 255, 109, 37, 3, 255, 118, 37, 3, 255, 1, 0, 18, 255, 2, 1, 18, 255, 2, 1, 17, 255, 2, 1, 15, 255, 2, 1, 15, 255, 1, 0, 14, 255, 2, 1, 17, 255, 1, 1, 9, 255, 1, 0, 7, 255, 1, 2, 10, 255, 2, 5, 17, 255, 3, 8, 31, 255, 3, 11, 34, 255, 2, 8, 23, 255, 0, 0, 8, 255, 12, 30, 39, 255, 37, 86, 119, 255, 11, 29, 35, 255, 2, 0, 0, 255, 1, 0, 2, 255, 17, 23, 46, 255, 47, 65, 89, 255, 41, 74, 111, 255, 12, 34, 47, 255, 41, 64, 103, 255, 32, 86, 122, 255, 0, 10, 7, 255, 17, 19, 38, 255, 25, 57, 91, 255, 3, 10, 13, 255, 1, 1, 4, 255, 1, 1, 4, 255, 2, 0, 2, 255, 3, 2, 1, 255, 0, 2, 1, 255, 4, 1, 2, 255, 6, 0, 5, 255, 1, 78, 172, 255, 13, 114, 193, 255, 25, 2, 6, 255, 14, 5, 22, 255, 14, 23, 202, 255, 2, 16, 85, 255, 7, 1, 0, 255, 7, 1, 4, 255, 4, 3, 1, 255, 0, 0, 2, 255, 2, 0, 0, 255, 3, 0, 0, 255, 2, 1, 4, 255, 3, 1, 3, 255, 3, 1, 1, 255, 2, 2, 2, 255, 2, 2, 2, 255, 1, 0, 0, 255, 6, 2, 0, 255, 17, 14, 7, 255, 24, 23, 14, 255, 32, 28, 24, 255, 39, 31, 33, 255, 44, 41, 41, 255, 32, 37, 36, 255, 17, 21, 15, 255, 21, 21, 10, 255, 28, 33, 36, 255, 33, 46, 48, 255, 37, 51, 45, 255, 42, 49, 38, 255, 42, 42, 31, 255, 36, 38, 19, 255, 31, 31, 13, 255, 28, 25, 14, 255, 18, 16, 2, 255, 23, 20, 5, 255, 22, 19, 4, 255, 25, 22, 7, 255, 24, 20, 5, 255, 24, 21, 2, 255, 27, 24, 3, 255, 36, 31, 7, 255, 37, 29, 6, 255, 37, 33, 6, 255, 37, 40, 8, 255, 42, 48, 8, 255, 47, 52, 13, 255, 53, 61, 13, 255, 57, 67, 15, 255, 60, 73, 14, 255, 60, 74, 14, 255, 62, 77, 14, 255, 69, 80, 20, 255, 65, 79, 14, 255, 66, 86, 13, 255, 65, 79, 15, 255, 67, 77, 8, 255, 64, 74, 7, 255, 65, 77, 7, 255, 63, 75, 5, 255, 68, 70, 14, 255, 68, 65, 11, 255, 62, 67, 3, 255, 66, 67, 4, 255, 77, 66, 5, 255, 74, 64, 5, 255, 70, 62, 4, 255, 72, 62, 7, 255, 74, 61, 7, 255, 79, 63, 4, 255, 79, 63, 3, 255, 77, 55, 6, 255, 72, 54, 3, 255, 78, 59, 7, 255, 122, 70, 13, 255, 80, 44, 2, 255, 69, 50, 6, 255, 87, 54, 4, 255, 93, 54, 3, 255, 80, 48, 1, 255, 79, 51, 5, 255, 85, 50, 5, 255, 96, 57, 3, 255, 99, 57, 8, 255, 96, 53, 9, 255, 88, 51, 4, 255, 109, 51, 9, 255, 99, 47, 2, 255, 103, 56, 8, 255, 111, 51, 7, 255, 88, 47, 3, 255, 91, 54, 6, 255, 97, 48, 6, 255, 98, 50, 5, 255, 100, 55, 1, 255, 103, 53, 5, 255, 106, 54, 8, 255, 104, 53, 9, 255, 105, 50, 11, 255, 111, 54, 5, 255, 120, 63, 5, 255, 120, 66, 5, 255, 125, 61, 6, 255, 115, 55, 7, 255, 115, 60, 4, 255, 120, 61, 3, 255, 114, 56, 11, 255, 107, 59, 11, 255, 101, 57, 4, 255, 110, 60, 3, 255, 111, 56, 3, 255, 109, 59, 17, 255, 103, 62, 7, 255, 114, 65, 5, 255, 134, 68, 12, 255, 145, 71, 16, 255, 159, 84, 9, 255, 163, 92, 13, 255, 170, 91, 7, 255, 177, 88, 14, 255, 184, 96, 6, 255, 176, 90, 20, 255, 184, 95, 13, 255, 182, 101, 3, 255, 180, 103, 7, 255, 182, 101, 11, 255, 194, 109, 5, 255, 189, 100, 15, 255, 179, 89, 8, 255, 162, 77, 3, 255, 177, 95, 8, 255, 192, 102, 1, 255, 191, 99, 5, 255, 191, 100, 10, 255, 190, 96, 7, 255, 188, 93, 7, 255, 188, 99, 11, 255, 193, 101, 13, 255, 194, 101, 5, 255, 198, 100, 3, 255, 193, 100, 13, 255, 198, 103, 12, 255, 195, 95, 5, 255, 190, 93, 6, 255, 196, 102, 7, 255, 193, 95, 4, 255, 195, 98, 2, 255, 199, 103, 4, 255, 196, 102, 6, 255, 190, 101, 4, 255, 188, 95, 2, 255, 191, 97, 13, 255, 196, 102, 10, 255, 196, 99, 2, 255, 189, 94, 3, 255, 192, 96, 8, 255, 196, 100, 2, 255, 197, 99, 4, 255, 199, 101, 8, 255, 198, 97, 14, 255, 188, 92, 4, 255, 191, 97, 7, 255, 187, 91, 5, 255, 184, 89, 7, 255, 177, 81, 2, 255, 186, 91, 4, 255, 197, 103, 6, 255, 197, 100, 5, 255, 191, 93, 7, 255, 179, 82, 5, 255, 190, 95, 8, 255, 193, 100, 5, 255, 177, 82, 10, 255, 179, 87, 9, 255, 185, 90, 11, 255, 192, 96, 6, 255, 191, 95, 7, 255, 195, 102, 9, 255, 195, 105, 10, 255, 200, 104, 0, 255, 192, 100, 2, 255, 195, 104, 4, 255, 198, 104, 3, 255, 198, 107, 7, 255, 197, 105, 3, 255, 193, 104, 5, 255, 200, 105, 8, 255, 195, 110, 1, 255, 198, 108, 8, 255, 202, 105, 11, 255, 196, 108, 0, 255, 199, 111, 5, 255, 201, 110, 10, 255, 197, 113, 2, 255, 200, 117, 2, 255, 202, 117, 5, 255, 205, 115, 2, 255, 206, 120, 1, 255, 204, 120, 4, 255, 206, 120, 6, 255, 208, 124, 9, 255, 206, 125, 5, 255, 205, 125, 2, 255, 205, 132, 2, 255, 206, 136, 1, 255, 211, 131, 2, 255, 211, 128, 10, 255, 212, 131, 9, 255, 214, 138, 8, 255, 212, 139, 5, 255, 212, 139, 4, 255, 208, 133, 4, 255, 211, 139, 4, 255, 211, 139, 2, 255, 209, 134, 5, 255, 220, 149, 3, 255, 224, 157, 1, 255, 220, 155, 0, 255, 217, 151, 11, 255, 212, 147, 12, 255, 205, 142, 6, 255, 201, 134, 4, 255, 192, 121, 8, 255, 181, 111, 3, 255, 180, 116, 1, 255, 180, 120, 6, 255, 188, 128, 10, 255, 191, 130, 10, 255, 182, 118, 4, 255, 181, 115, 4, 255, 178, 111, 10, 255, 177, 115, 12, 255, 172, 111, 6, 255, 168, 105, 12, 255, 181, 117, 14, 255, 182, 115, 4, 255, 181, 108, 10, 255, 184, 110, 12, 255, 184, 111, 13, 255, 187, 116, 11, 255, 184, 111, 5, 255, 182, 115, 8, 255, 184, 132, 9, 255, 200, 158, 5, 255, 209, 160, 10, 255, 203, 145, 9, 255, 201, 142, 9, 255, 199, 137, 12, 255, 203, 140, 10, 255, 214, 154, 11, 255, 222, 165, 9, 255, 210, 152, 5, 255, 199, 142, 9, 255, 169, 109, 5, 255, 141, 73, 5, 255, 151, 80, 3, 255, 150, 82, 3, 255, 159, 91, 5, 255, 168, 98, 8, 255, 170, 98, 7, 255, 170, 105, 4, 255, 169, 110, 7, 255, 163, 102, 10, 255, 170, 94, 2, 255, 172, 94, 5, 255, 181, 111, 11, 255, 180, 122, 15, 255, 169, 111, 24, 255, 159, 94, 22, 255, 153, 90, 21, 255, 140, 79, 2, 255, 148, 82, 7, 255, 169, 96, 12, 255, 188, 109, 15, 255, 190, 114, 13, 255, 179, 106, 7, 255, 174, 96, 12, 255, 182, 103, 7, 255, 180, 102, 4, 255, 175, 101, 1, 255, 171, 97, 1, 255, 175, 99, 9, 255, 182, 102, 10, 255, 168, 88, 3, 255, 156, 91, 4, 255, 153, 97, 12, 255, 167, 99, 7, 255, 179, 111, 3, 255, 190, 135, 6, 255, 190, 133, 9, 255, 191, 122, 17, 255, 184, 113, 18, 255, 182, 108, 10, 255, 184, 105, 3, 255, 171, 95, 6, 255, 169, 94, 8, 255, 175, 94, 14, 255, 164, 85, 9, 255, 157, 78, 4, 255, 164, 80, 4, 255, 158, 74, 1, 255, 168, 84, 2, 255, 193, 112, 9, 255, 198, 120, 9, 255, 195, 114, 11, 255, 195, 113, 6, 255, 195, 115, 3, 255, 193, 112, 4, 255, 196, 109, 5, 255, 185, 94, 2, 255, 156, 72, 2, 255, 141, 64, 3, 255, 132, 59, 5, 255, 130, 61, 4, 255, 132, 64, 3, 255, 136, 65, 8, 255, 119, 50, 1, 255, 105, 39, 4, 255, 110, 47, 4, 255, 105, 40, 5, 255, 97, 34, 5, 255, 88, 32, 5, 255, 82, 32, 6, 255, 87, 31, 8, 255, 84, 23, 7, 255, 73, 21, 4, 255, 69, 27, 3, 255, 90, 46, 7, 255, 97, 50, 4, 255, 97, 45, 6, 255, 101, 49, 9, 255, 101, 52, 3, 255, 97, 45, 6, 255, 95, 44, 3, 255, 100, 49, 5, 255, 102, 51, 5, 255, 100, 48, 1, 255, 99, 46, 3, 255, 98, 46, 5, 255, 98, 47, 3, 255, 96, 48, 2, 255, 98, 42, 7, 255, 94, 36, 1, 255, 98, 39, 3, 255, 94, 35, 4, 255, 92, 36, 2, 255, 94, 36, 4, 255, 87, 33, 3, 255, 85, 30, 3, 255, 86, 33, 4, 255, 86, 37, 5, 255, 89, 34, 1, 255, 88, 27, 0, 255, 83, 26, 1, 255, 84, 21, 3, 255, 86, 20, 5, 255, 91, 24, 5, 255, 100, 27, 0, 255, 102, 31, 1, 255, 109, 34, 6, 255, 113, 32, 1, 255, 117, 38, 2, 255, 2, 1, 18, 255, 2, 1, 22, 255, 2, 1, 20, 255, 2, 1, 13, 255, 2, 2, 14, 255, 2, 2, 15, 255, 1, 1, 18, 255, 3, 0, 13, 255, 4, 0, 9, 255, 2, 2, 22, 255, 5, 15, 34, 255, 2, 13, 27, 255, 4, 12, 35, 255, 2, 8, 28, 255, 6, 7, 26, 255, 1, 8, 15, 255, 2, 38, 56, 255, 16, 52, 59, 255, 5, 8, 7, 255, 0, 1, 0, 255, 0, 0, 0, 255, 6, 2, 8, 255, 47, 65, 104, 255, 35, 73, 103, 255, 21, 30, 58, 255, 44, 89, 130, 255, 6, 26, 25, 255, 1, 0, 0, 255, 4, 8, 19, 255, 4, 6, 12, 255, 4, 1, 0, 255, 1, 2, 0, 255, 0, 2, 1, 255, 1, 0, 1, 255, 2, 2, 6, 255, 2, 0, 0, 255, 1, 34, 100, 255, 4, 134, 244, 255, 14, 27, 54, 255, 19, 2, 0, 255, 4, 21, 134, 255, 5, 20, 161, 255, 5, 0, 0, 255, 3, 2, 3, 255, 1, 0, 2, 255, 3, 3, 4, 255, 0, 2, 1, 255, 2, 1, 0, 255, 0, 2, 1, 255, 0, 2, 1, 255, 3, 1, 1, 255, 2, 2, 2, 255, 2, 1, 1, 255, 6, 1, 2, 255, 3, 0, 1, 255, 1, 0, 0, 255, 12, 8, 4, 255, 26, 19, 13, 255, 29, 23, 17, 255, 32, 26, 23, 255, 40, 37, 33, 255, 38, 38, 37, 255, 27, 28, 25, 255, 20, 22, 8, 255, 27, 32, 30, 255, 34, 49, 50, 255, 37, 52, 52, 255, 45, 51, 47, 255, 37, 38, 31, 255, 23, 32, 12, 255, 32, 35, 18, 255, 31, 28, 14, 255, 22, 21, 8, 255, 20, 19, 5, 255, 24, 22, 5, 255, 27, 26, 8, 255, 24, 23, 8, 255, 27, 24, 7, 255, 26, 26, 2, 255, 29, 28, 1, 255, 39, 35, 6, 255, 39, 35, 3, 255, 46, 48, 15, 255, 45, 56, 15, 255, 44, 58, 11, 255, 55, 66, 10, 255, 58, 67, 15, 255, 61, 70, 14, 255, 62, 74, 15, 255, 60, 79, 17, 255, 65, 80, 14, 255, 68, 82, 6, 255, 68, 83, 11, 255, 70, 77, 10, 255, 71, 73, 4, 255, 67, 75, 4, 255, 63, 71, 8, 255, 63, 69, 11, 255, 66, 64, 8, 255, 70, 65, 12, 255, 65, 66, 9, 255, 66, 59, 11, 255, 74, 62, 15, 255, 73, 66, 4, 255, 75, 67, 1, 255, 75, 63, 4, 255, 76, 63, 3, 255, 79, 64, 2, 255, 79, 61, 15, 255, 77, 49, 7, 255, 76, 61, 7, 255, 128, 69, 7, 255, 90, 53, 6, 255, 66, 50, 4, 255, 82, 54, 3, 255, 100, 59, 1, 255, 106, 58, 3, 255, 84, 55, 3, 255, 88, 48, 1, 255, 111, 61, 6, 255, 95, 54, 2, 255, 98, 56, 2, 255, 91, 54, 3, 255, 82, 56, 1, 255, 108, 56, 10, 255, 95, 46, 2, 255, 91, 50, 6, 255, 90, 45, 4, 255, 93, 46, 5, 255, 109, 52, 8, 255, 99, 50, 3, 255, 93, 53, 3, 255, 101, 57, 5, 255, 109, 54, 1, 255, 102, 54, 3, 255, 88, 51, 1, 255, 114, 59, 8, 255, 129, 64, 5, 255, 127, 60, 1, 255, 115, 59, 4, 255, 115, 63, 18, 255, 130, 62, 1, 255, 128, 64, 4, 255, 104, 59, 1, 255, 106, 59, 6, 255, 114, 58, 6, 255, 107, 60, 8, 255, 113, 66, 10, 255, 125, 68, 7, 255, 140, 78, 10, 255, 161, 95, 6, 255, 176, 97, 8, 255, 182, 96, 7, 255, 189, 99, 12, 255, 190, 100, 5, 255, 194, 98, 7, 255, 195, 97, 4, 255, 193, 98, 7, 255, 189, 101, 0, 255, 190, 102, 12, 255, 188, 98, 6, 255, 188, 99, 8, 255, 185, 99, 8, 255, 194, 103, 14, 255, 197, 105, 5, 255, 193, 97, 7, 255, 180, 80, 14, 255, 186, 93, 11, 255, 189, 99, 4, 255, 194, 98, 11, 255, 196, 100, 9, 255, 195, 101, 9, 255, 195, 98, 5, 255, 194, 96, 7, 255, 195, 98, 5, 255, 192, 96, 5, 255, 194, 95, 8, 255, 190, 91, 1, 255, 192, 89, 0, 255, 189, 88, 8, 255, 188, 87, 9, 255, 187, 88, 5, 255, 184, 95, 0, 255, 187, 90, 8, 255, 192, 92, 11, 255, 190, 89, 5, 255, 188, 86, 12, 255, 186, 89, 16, 255, 183, 82, 8, 255, 184, 85, 13, 255, 181, 91, 4, 255, 193, 97, 12, 255, 193, 96, 8, 255, 192, 99, 8, 255, 193, 98, 5, 255, 196, 101, 3, 255, 190, 96, 4, 255, 173, 77, 3, 255, 178, 77, 1, 255, 184, 86, 1, 255, 184, 87, 5, 255, 177, 80, 4, 255, 174, 77, 8, 255, 186, 90, 9, 255, 194, 99, 6, 255, 200, 102, 8, 255, 191, 96, 6, 255, 184, 90, 8, 255, 197, 104, 13, 255, 194, 102, 0, 255, 195, 102, 6, 255, 194, 102, 5, 255, 196, 103, 2, 255, 197, 100, 7, 255, 184, 84, 5, 255, 191, 98, 8, 255, 198, 108, 9, 255, 198, 101, 2, 255, 197, 101, 8, 255, 195, 101, 7, 255, 194, 103, 5, 255, 197, 102, 8, 255, 195, 104, 5, 255, 196, 106, 8, 255, 197, 106, 8, 255, 192, 103, 8, 255, 193, 107, 1, 255, 197, 107, 6, 255, 196, 108, 3, 255, 197, 111, 2, 255, 196, 107, 10, 255, 196, 107, 3, 255, 198, 110, 6, 255, 199, 109, 13, 255, 200, 111, 8, 255, 199, 113, 2, 255, 199, 113, 11, 255, 199, 112, 15, 255, 202, 116, 5, 255, 207, 121, 4, 255, 207, 122, 5, 255, 205, 122, 6, 255, 203, 122, 4, 255, 202, 121, 6, 255, 208, 129, 2, 255, 209, 134, 0, 255, 208, 134, 2, 255, 208, 132, 5, 255, 209, 134, 11, 255, 213, 140, 6, 255, 215, 143, 4, 255, 213, 140, 3, 255, 212, 141, 7, 255, 221, 152, 4, 255, 220, 151, 3, 255, 223, 154, 7, 255, 223, 154, 2, 255, 224, 159, 0, 255, 224, 161, 0, 255, 223, 162, 3, 255, 221, 161, 4, 255, 216, 161, 3, 255, 214, 156, 4, 255, 213, 151, 11, 255, 213, 155, 8, 255, 211, 156, 0, 255, 212, 157, 6, 255, 212, 156, 3, 255, 212, 157, 0, 255, 217, 163, 3, 255, 215, 159, 11, 255, 210, 155, 8, 255, 200, 147, 4, 255, 199, 141, 11, 255, 200, 142, 8, 255, 199, 141, 13, 255, 202, 142, 17, 255, 200, 140, 20, 255, 198, 146, 13, 255, 212, 162, 9, 255, 216, 164, 9, 255, 208, 145, 4, 255, 203, 126, 0, 255, 201, 136, 5, 255, 203, 152, 3, 255, 208, 146, 10, 255, 212, 154, 9, 255, 217, 166, 1, 255, 232, 177, 1, 255, 215, 152, 9, 255, 190, 127, 11, 255, 177, 121, 6, 255, 157, 101, 3, 255, 164, 100, 6, 255, 187, 112, 9, 255, 193, 120, 5, 255, 187, 122, 1, 255, 189, 125, 12, 255, 189, 124, 8, 255, 189, 119, 2, 255, 188, 114, 12, 255, 183, 113, 2, 255, 181, 110, 4, 255, 182, 112, 7, 255, 179, 113, 6, 255, 180, 120, 23, 255, 175, 121, 26, 255, 154, 94, 11, 255, 137, 77, 8, 255, 143, 84, 7, 255, 171, 102, 10, 255, 183, 107, 3, 255, 183, 105, 13, 255, 178, 105, 12, 255, 173, 102, 0, 255, 175, 101, 1, 255, 172, 94, 10, 255, 159, 82, 4, 255, 165, 89, 5, 255, 164, 89, 3, 255, 165, 86, 2, 255, 150, 83, 4, 255, 170, 105, 5, 255, 192, 123, 6, 255, 184, 127, 2, 255, 187, 131, 14, 255, 184, 116, 10, 255, 178, 108, 7, 255, 171, 97, 7, 255, 170, 98, 20, 255, 175, 93, 8, 255, 168, 82, 11, 255, 162, 91, 17, 255, 166, 94, 13, 255, 163, 86, 9, 255, 161, 81, 5, 255, 158, 78, 4, 255, 155, 73, 4, 255, 175, 88, 5, 255, 191, 110, 3, 255, 199, 118, 11, 255, 196, 113, 5, 255, 193, 115, 1, 255, 194, 115, 7, 255, 191, 108, 9, 255, 191, 106, 6, 255, 193, 108, 6, 255, 179, 87, 2, 255, 153, 70, 7, 255, 139, 64, 5, 255, 137, 65, 1, 255, 133, 63, 0, 255, 120, 52, 4, 255, 114, 47, 13, 255, 102, 35, 3, 255, 92, 25, 0, 255, 95, 34, 5, 255, 94, 32, 5, 255, 89, 29, 2, 255, 85, 34, 2, 255, 97, 42, 3, 255, 104, 39, 2, 255, 89, 32, 4, 255, 76, 30, 5, 255, 87, 42, 5, 255, 104, 60, 3, 255, 106, 56, 2, 255, 111, 58, 5, 255, 109, 61, 2, 255, 101, 57, 2, 255, 101, 52, 3, 255, 102, 53, 6, 255, 96, 48, 2, 255, 96, 49, 2, 255, 96, 47, 1, 255, 97, 43, 2, 255, 101, 43, 6, 255, 97, 40, 6, 255, 95, 40, 4, 255, 93, 41, 1, 255, 92, 39, 2, 255, 93, 38, 2, 255, 94, 39, 2, 255, 95, 38, 2, 255, 94, 35, 4, 255, 88, 34, 3, 255, 92, 35, 5, 255, 87, 29, 3, 255, 79, 23, 2, 255, 82, 19, 2, 255, 89, 19, 3, 255, 90, 26, 4, 255, 94, 29, 1, 255, 95, 31, 1, 255, 95, 33, 2, 255, 100, 32, 1, 255, 100, 35, 2, 255, 111, 34, 3, 255, 113, 31, 1, 255, 115, 38, 4, 255, 4, 1, 24, 255, 0, 1, 25, 255, 1, 2, 18, 255, 3, 0, 10, 255, 1, 1, 17, 255, 1, 2, 21, 255, 0, 0, 15, 255, 2, 0, 10, 255, 3, 0, 12, 255, 3, 6, 29, 255, 4, 11, 30, 255, 1, 7, 17, 255, 2, 11, 37, 255, 2, 10, 35, 255, 1, 10, 30, 255, 2, 11, 23, 255, 0, 6, 15, 255, 4, 10, 17, 255, 3, 8, 7, 255, 0, 0, 1, 255, 1, 0, 1, 255, 0, 0, 0, 255, 20, 20, 40, 255, 47, 82, 115, 255, 7, 22, 16, 255, 25, 53, 81, 255, 16, 34, 37, 255, 0, 0, 0, 255, 0, 2, 3, 255, 0, 0, 0, 255, 1, 0, 4, 255, 1, 2, 2, 255, 1, 1, 0, 255, 1, 0, 7, 255, 1, 1, 1, 255, 7, 3, 29, 255, 4, 110, 230, 255, 17, 73, 120, 255, 15, 0, 0, 255, 13, 11, 69, 255, 2, 28, 203, 255, 3, 6, 22, 255, 1, 1, 0, 255, 2, 1, 2, 255, 3, 1, 2, 255, 1, 1, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 2, 0, 255, 1, 1, 1, 255, 5, 2, 3, 255, 6, 1, 2, 255, 6, 1, 1, 255, 8, 4, 1, 255, 17, 12, 7, 255, 18, 12, 3, 255, 20, 16, 4, 255, 30, 27, 18, 255, 38, 36, 33, 255, 33, 32, 29, 255, 27, 30, 23, 255, 30, 37, 33, 255, 32, 45, 40, 255, 35, 49, 50, 255, 43, 49, 45, 255, 40, 42, 31, 255, 31, 38, 31, 255, 38, 34, 21, 255, 39, 31, 9, 255, 25, 21, 12, 255, 22, 19, 6, 255, 27, 21, 0, 255, 27, 21, 7, 255, 26, 23, 11, 255, 27, 25, 6, 255, 31, 31, 3, 255, 28, 32, 6, 255, 36, 37, 6, 255, 45, 42, 10, 255, 43, 48, 13, 255, 56, 57, 12, 255, 52, 60, 13, 255, 55, 68, 12, 255, 56, 69, 12, 255, 61, 71, 10, 255, 63, 75, 7, 255, 65, 78, 16, 255, 70, 76, 11, 255, 77, 84, 3, 255, 71, 78, 7, 255, 67, 72, 6, 255, 68, 72, 4, 255, 65, 72, 7, 255, 67, 68, 8, 255, 70, 66, 5, 255, 78, 68, 5, 255, 78, 66, 4, 255, 68, 62, 3, 255, 69, 62, 7, 255, 72, 63, 7, 255, 79, 62, 7, 255, 79, 62, 6, 255, 77, 60, 4, 255, 74, 64, 5, 255, 75, 63, 2, 255, 93, 59, 5, 255, 88, 59, 11, 255, 136, 78, 8, 255, 113, 61, 2, 255, 62, 50, 9, 255, 76, 57, 3, 255, 85, 55, 3, 255, 90, 56, 5, 255, 90, 45, 4, 255, 81, 52, 4, 255, 96, 55, 2, 255, 104, 52, 2, 255, 91, 53, 8, 255, 94, 54, 2, 255, 108, 56, 4, 255, 100, 53, 3, 255, 92, 50, 2, 255, 85, 51, 2, 255, 86, 52, 4, 255, 84, 48, 3, 255, 96, 54, 2, 255, 101, 52, 5, 255, 103, 51, 6, 255, 103, 52, 1, 255, 110, 56, 5, 255, 111, 57, 1, 255, 103, 53, 5, 255, 106, 57, 8, 255, 113, 62, 4, 255, 119, 64, 9, 255, 118, 59, 6, 255, 113, 63, 5, 255, 101, 60, 6, 255, 108, 55, 5, 255, 116, 61, 1, 255, 118, 61, 7, 255, 132, 69, 11, 255, 146, 79, 6, 255, 163, 89, 13, 255, 179, 97, 16, 255, 190, 102, 18, 255, 195, 104, 10, 255, 195, 108, 9, 255, 192, 103, 7, 255, 191, 101, 3, 255, 189, 96, 4, 255, 183, 87, 6, 255, 181, 95, 8, 255, 193, 102, 1, 255, 194, 98, 10, 255, 191, 101, 7, 255, 193, 102, 6, 255, 189, 100, 9, 255, 186, 95, 1, 255, 192, 97, 11, 255, 193, 103, 7, 255, 193, 104, 9, 255, 196, 102, 9, 255, 192, 104, 6, 255, 197, 102, 8, 255, 190, 96, 1, 255, 190, 102, 6, 255, 197, 98, 10, 255, 188, 85, 2, 255, 185, 92, 12, 255, 186, 90, 11, 255, 185, 94, 7, 255, 189, 93, 3, 255, 192, 87, 7, 255, 190, 86, 5, 255, 184, 87, 4, 255, 178, 80, 8, 255, 183, 83, 7, 255, 187, 86, 4, 255, 183, 86, 5, 255, 183, 90, 5, 255, 188, 90, 10, 255, 182, 78, 6, 255, 177, 81, 10, 255, 169, 78, 13, 255, 171, 72, 8, 255, 172, 78, 6, 255, 176, 86, 8, 255, 185, 86, 5, 255, 186, 88, 10, 255, 189, 94, 12, 255, 190, 98, 3, 255, 194, 101, 11, 255, 189, 92, 1, 255, 181, 85, 2, 255, 187, 89, 6, 255, 180, 83, 3, 255, 179, 86, 3, 255, 180, 87, 4, 255, 177, 84, 5, 255, 185, 88, 6, 255, 200, 100, 2, 255, 196, 100, 1, 255, 194, 101, 6, 255, 189, 98, 1, 255, 188, 92, 2, 255, 199, 103, 7, 255, 198, 103, 4, 255, 200, 103, 6, 255, 196, 100, 2, 255, 184, 89, 9, 255, 183, 87, 19, 255, 192, 102, 4, 255, 194, 106, 4, 255, 194, 103, 1, 255, 196, 104, 6, 255, 192, 99, 6, 255, 193, 102, 4, 255, 193, 103, 6, 255, 193, 102, 4, 255, 196, 109, 4, 255, 193, 107, 3, 255, 190, 102, 4, 255, 193, 102, 5, 255, 196, 104, 8, 255, 196, 107, 8, 255, 198, 109, 5, 255, 197, 108, 11, 255, 195, 108, 3, 255, 200, 111, 7, 255, 200, 110, 11, 255, 200, 112, 6, 255, 200, 112, 4, 255, 202, 112, 6, 255, 200, 111, 6, 255, 200, 114, 8, 255, 202, 115, 9, 255, 202, 119, 3, 255, 201, 116, 4, 255, 201, 117, 8, 255, 205, 120, 7, 255, 208, 124, 7, 255, 208, 126, 6, 255, 206, 126, 7, 255, 208, 128, 8, 255, 208, 132, 7, 255, 209, 134, 2, 255, 209, 136, 5, 255, 211, 138, 5, 255, 214, 147, 3, 255, 213, 146, 2, 255, 215, 148, 1, 255, 218, 151, 2, 255, 220, 151, 2, 255, 216, 147, 2, 255, 217, 147, 3, 255, 221, 153, 1, 255, 227, 162, 1, 255, 228, 164, 2, 255, 224, 165, 3, 255, 222, 164, 2, 255, 222, 158, 1, 255, 214, 149, 1, 255, 215, 154, 4, 255, 221, 159, 1, 255, 225, 161, 1, 255, 230, 167, 4, 255, 225, 158, 0, 255, 212, 144, 1, 255, 204, 143, 4, 255, 208, 153, 4, 255, 214, 156, 4, 255, 215, 157, 6, 255, 215, 155, 6, 255, 212, 152, 7, 255, 214, 158, 6, 255, 215, 150, 4, 255, 209, 139, 7, 255, 207, 141, 5, 255, 204, 141, 4, 255, 210, 153, 4, 255, 218, 161, 6, 255, 223, 165, 6, 255, 222, 168, 3, 255, 224, 174, 2, 255, 219, 165, 8, 255, 203, 142, 10, 255, 195, 133, 1, 255, 186, 129, 1, 255, 200, 145, 10, 255, 197, 139, 7, 255, 190, 120, 9, 255, 173, 97, 6, 255, 176, 104, 2, 255, 189, 118, 1, 255, 185, 109, 4, 255, 177, 97, 3, 255, 181, 105, 4, 255, 173, 97, 7, 255, 170, 95, 2, 255, 179, 108, 0, 255, 190, 120, 3, 255, 193, 126, 9, 255, 178, 113, 15, 255, 160, 100, 22, 255, 142, 89, 12, 255, 150, 97, 11, 255, 165, 96, 10, 255, 176, 97, 7, 255, 170, 98, 12, 255, 161, 95, 9, 255, 158, 86, 1, 255, 157, 83, 2, 255, 163, 86, 7, 255, 161, 84, 2, 255, 163, 88, 2, 255, 166, 93, 5, 255, 159, 91, 3, 255, 142, 74, 4, 255, 143, 73, 1, 255, 173, 104, 9, 255, 196, 135, 1, 255, 195, 134, 6, 255, 176, 102, 5, 255, 168, 90, 7, 255, 168, 97, 12, 255, 174, 100, 15, 255, 170, 94, 6, 255, 161, 82, 10, 255, 165, 87, 10, 255, 163, 83, 10, 255, 159, 78, 8, 255, 161, 78, 10, 255, 167, 83, 3, 255, 174, 90, 8, 255, 193, 112, 6, 255, 202, 121, 2, 255, 197, 116, 7, 255, 193, 113, 8, 255, 191, 114, 3, 255, 192, 112, 3, 255, 192, 109, 7, 255, 189, 107, 7, 255, 188, 101, 5, 255, 170, 75, 3, 255, 147, 61, 7, 255, 139, 68, 5, 255, 137, 67, 4, 255, 135, 64, 4, 255, 128, 57, 5, 255, 122, 55, 3, 255, 111, 48, 5, 255, 104, 41, 7, 255, 95, 33, 6, 255, 92, 32, 5, 255, 90, 37, 4, 255, 89, 37, 1, 255, 102, 46, 8, 255, 101, 45, 3, 255, 96, 38, 4, 255, 88, 35, 3, 255, 91, 39, 1, 255, 109, 55, 3, 255, 117, 63, 8, 255, 118, 62, 5, 255, 120, 68, 3, 255, 111, 59, 6, 255, 115, 56, 5, 255, 111, 57, 3, 255, 107, 55, 3, 255, 106, 50, 4, 255, 108, 50, 3, 255, 110, 51, 4, 255, 106, 48, 5, 255, 105, 49, 8, 255, 99, 41, 4, 255, 93, 35, 7, 255, 96, 36, 5, 255, 100, 39, 1, 255, 100, 36, 1, 255, 100, 31, 7, 255, 96, 24, 2, 255, 88, 26, 5, 255, 88, 28, 4, 255, 85, 24, 2, 255, 85, 26, 7, 255, 93, 29, 3, 255, 102, 35, 1, 255, 109, 40, 2, 255, 112, 40, 4, 255, 111, 38, 4, 255, 107, 34, 0, 255, 111, 38, 2, 255, 110, 38, 3, 255, 110, 35, 3, 255, 109, 36, 2, 255, 109, 38, 3, 255, 1, 3, 19, 255, 1, 0, 17, 255, 1, 0, 21, 255, 1, 2, 23, 255, 0, 1, 20, 255, 1, 0, 16, 255, 3, 1, 13, 255, 3, 3, 18, 255, 1, 8, 30, 255, 1, 13, 36, 255, 2, 11, 31, 255, 4, 12, 26, 255, 2, 14, 36, 255, 0, 11, 40, 255, 0, 8, 28, 255, 2, 16, 35, 255, 0, 12, 18, 255, 1, 3, 0, 255, 1, 0, 1, 255, 1, 0, 1, 255, 1, 2, 1, 255, 0, 2, 1, 255, 0, 0, 0, 255, 28, 58, 93, 255, 11, 35, 36, 255, 17, 29, 51, 255, 16, 27, 37, 255, 0, 0, 0, 255, 0, 0, 7, 255, 1, 1, 0, 255, 0, 1, 4, 255, 3, 2, 5, 255, 6, 0, 2, 255, 2, 1, 4, 255, 1, 0, 0, 255, 3, 49, 181, 255, 6, 95, 182, 255, 15, 8, 0, 255, 20, 1, 18, 255, 8, 23, 194, 255, 0, 13, 66, 255, 1, 0, 0, 255, 2, 1, 5, 255, 0, 0, 0, 255, 2, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 4, 1, 0, 255, 8, 2, 2, 255, 7, 2, 3, 255, 5, 1, 1, 255, 7, 4, 2, 255, 4, 3, 0, 255, 6, 3, 0, 255, 11, 7, 2, 255, 14, 11, 2, 255, 21, 19, 10, 255, 32, 31, 28, 255, 35, 37, 35, 255, 28, 32, 27, 255, 36, 42, 40, 255, 43, 50, 48, 255, 38, 48, 42, 255, 36, 45, 36, 255, 37, 41, 23, 255, 44, 38, 39, 255, 44, 34, 24, 255, 41, 33, 16, 255, 35, 27, 17, 255, 30, 21, 7, 255, 31, 20, 3, 255, 32, 22, 9, 255, 29, 25, 8, 255, 26, 26, 4, 255, 32, 29, 4, 255, 35, 33, 5, 255, 43, 39, 14, 255, 47, 45, 8, 255, 45, 56, 2, 255, 50, 56, 7, 255, 60, 61, 12, 255, 59, 68, 13, 255, 63, 70, 12, 255, 66, 74, 14, 255, 60, 74, 14, 255, 69, 78, 13, 255, 70, 73, 11, 255, 72, 73, 18, 255, 72, 73, 8, 255, 63, 71, 8, 255, 61, 65, 11, 255, 71, 66, 2, 255, 70, 71, 4, 255, 75, 71, 6, 255, 87, 69, 7, 255, 87, 65, 6, 255, 76, 61, 3, 255, 76, 64, 8, 255, 82, 63, 9, 255, 80, 62, 4, 255, 74, 62, 2, 255, 77, 60, 6, 255, 82, 59, 9, 255, 90, 62, 9, 255, 100, 59, 7, 255, 106, 69, 12, 255, 138, 66, 14, 255, 81, 48, 2, 255, 78, 53, 5, 255, 92, 55, 7, 255, 91, 53, 4, 255, 91, 55, 2, 255, 96, 57, 2, 255, 94, 47, 10, 255, 99, 57, 4, 255, 96, 53, 2, 255, 109, 56, 6, 255, 117, 63, 2, 255, 113, 60, 2, 255, 96, 52, 1, 255, 88, 50, 4, 255, 84, 54, 7, 255, 87, 52, 5, 255, 93, 51, 4, 255, 90, 49, 8, 255, 95, 53, 4, 255, 106, 55, 10, 255, 104, 54, 4, 255, 99, 57, 2, 255, 111, 57, 0, 255, 125, 57, 1, 255, 128, 65, 10, 255, 108, 58, 12, 255, 102, 61, 5, 255, 104, 62, 0, 255, 107, 57, 11, 255, 117, 62, 12, 255, 136, 81, 4, 255, 150, 84, 18, 255, 174, 90, 19, 255, 182, 96, 5, 255, 191, 100, 18, 255, 192, 100, 15, 255, 195, 102, 2, 255, 195, 101, 11, 255, 190, 98, 12, 255, 194, 101, 13, 255, 192, 97, 9, 255, 191, 101, 1, 255, 184, 89, 5, 255, 164, 70, 7, 255, 170, 82, 7, 255, 183, 92, 1, 255, 184, 85, 11, 255, 186, 88, 13, 255, 188, 92, 3, 255, 194, 103, 14, 255, 197, 111, 11, 255, 193, 103, 9, 255, 194, 100, 3, 255, 192, 99, 1, 255, 188, 101, 6, 255, 189, 104, 6, 255, 194, 101, 8, 255, 195, 97, 3, 255, 196, 101, 4, 255, 189, 99, 6, 255, 186, 96, 9, 255, 186, 97, 5, 255, 183, 94, 4, 255, 186, 91, 8, 255, 186, 94, 12, 255, 186, 93, 2, 255, 187, 89, 6, 255, 176, 84, 11, 255, 178, 88, 6, 255, 178, 87, 2, 255, 177, 84, 4, 255, 182, 83, 11, 255, 177, 77, 5, 255, 166, 74, 1, 255, 162, 75, 2, 255, 170, 82, 7, 255, 165, 86, 2, 255, 178, 90, 1, 255, 181, 96, 7, 255, 182, 98, 7, 255, 188, 96, 3, 255, 188, 93, 12, 255, 191, 97, 6, 255, 189, 97, 3, 255, 184, 87, 5, 255, 183, 84, 8, 255, 180, 83, 14, 255, 181, 92, 8, 255, 178, 82, 12, 255, 179, 78, 12, 255, 180, 86, 8, 255, 189, 94, 9, 255, 177, 79, 5, 255, 183, 87, 7, 255, 189, 94, 7, 255, 193, 99, 5, 255, 193, 100, 5, 255, 183, 85, 7, 255, 183, 86, 2, 255, 195, 99, 3, 255, 194, 102, 10, 255, 189, 98, 6, 255, 188, 97, 4, 255, 181, 91, 6, 255, 183, 92, 3, 255, 185, 91, 4, 255, 190, 94, 6, 255, 192, 97, 6, 255, 190, 96, 7, 255, 186, 96, 7, 255, 183, 95, 5, 255, 185, 99, 11, 255, 189, 105, 6, 255, 195, 106, 6, 255, 194, 106, 2, 255, 194, 107, 3, 255, 193, 105, 6, 255, 197, 106, 12, 255, 195, 104, 7, 255, 201, 109, 12, 255, 198, 107, 8, 255, 195, 107, 1, 255, 197, 109, 1, 255, 198, 112, 3, 255, 196, 109, 5, 255, 198, 111, 9, 255, 203, 111, 2, 255, 200, 110, 3, 255, 203, 113, 11, 255, 196, 110, 3, 255, 199, 113, 6, 255, 205, 118, 9, 255, 203, 116, 7, 255, 201, 114, 8, 255, 206, 121, 13, 255, 205, 123, 6, 255, 203, 125, 1, 255, 206, 128, 1, 255, 210, 130, 0, 255, 211, 132, 4, 255, 207, 132, 5, 255, 209, 136, 6, 255, 206, 137, 7, 255, 212, 145, 5, 255, 216, 149, 1, 255, 216, 149, 3, 255, 213, 145, 2, 255, 212, 143, 7, 255, 216, 152, 3, 255, 221, 158, 0, 255, 227, 164, 1, 255, 228, 169, 4, 255, 229, 170, 2, 255, 224, 163, 0, 255, 216, 154, 2, 255, 216, 157, 1, 255, 220, 160, 3, 255, 211, 147, 3, 255, 208, 146, 1, 255, 213, 145, 6, 255, 204, 134, 7, 255, 204, 138, 6, 255, 211, 149, 11, 255, 208, 145, 3, 255, 207, 148, 6, 255, 204, 140, 6, 255, 202, 138, 7, 255, 207, 148, 7, 255, 207, 145, 4, 255, 207, 150, 3, 255, 223, 170, 5, 255, 233, 178, 7, 255, 230, 177, 6, 255, 229, 178, 3, 255, 226, 175, 0, 255, 231, 179, 3, 255, 231, 182, 3, 255, 213, 163, 6, 255, 196, 133, 7, 255, 176, 100, 4, 255, 182, 111, 5, 255, 190, 122, 5, 255, 184, 110, 9, 255, 178, 102, 1, 255, 176, 97, 3, 255, 170, 94, 3, 255, 182, 107, 10, 255, 179, 101, 5, 255, 175, 97, 1, 255, 174, 97, 3, 255, 166, 92, 5, 255, 170, 97, 4, 255, 179, 107, 4, 255, 184, 113, 6, 255, 184, 117, 11, 255, 179, 115, 17, 255, 177, 115, 23, 255, 167, 108, 14, 255, 156, 97, 7, 255, 158, 94, 18, 255, 152, 85, 6, 255, 162, 96, 12, 255, 165, 96, 16, 255, 168, 91, 10, 255, 162, 88, 0, 255, 165, 88, 7, 255, 172, 97, 7, 255, 174, 101, 3, 255, 166, 91, 5, 255, 167, 89, 2, 255, 153, 75, 8, 255, 145, 81, 9, 255, 183, 131, 11, 255, 198, 139, 3, 255, 192, 130, 2, 255, 183, 114, 4, 255, 171, 95, 9, 255, 169, 95, 6, 255, 168, 92, 9, 255, 162, 82, 6, 255, 159, 78, 15, 255, 160, 83, 9, 255, 161, 82, 15, 255, 163, 82, 10, 255, 161, 77, 3, 255, 165, 80, 1, 255, 180, 95, 9, 255, 199, 117, 8, 255, 194, 113, 6, 255, 193, 113, 4, 255, 192, 112, 6, 255, 191, 110, 9, 255, 191, 109, 5, 255, 190, 105, 6, 255, 190, 106, 7, 255, 186, 101, 1, 255, 168, 73, 1, 255, 148, 63, 5, 255, 146, 73, 5, 255, 141, 67, 7, 255, 131, 57, 11, 255, 125, 56, 10, 255, 119, 52, 6, 255, 120, 56, 7, 255, 116, 56, 5, 255, 108, 49, 0, 255, 108, 47, 7, 255, 107, 49, 6, 255, 110, 54, 5, 255, 104, 46, 1, 255, 106, 46, 5, 255, 105, 43, 4, 255, 93, 31, 2, 255, 100, 40, 11, 255, 114, 62, 2, 255, 122, 63, 3, 255, 118, 61, 8, 255, 119, 62, 10, 255, 107, 45, 4, 255, 97, 34, 7, 255, 100, 47, 4, 255, 110, 56, 2, 255, 115, 54, 3, 255, 113, 46, 5, 255, 108, 41, 7, 255, 103, 45, 6, 255, 104, 45, 3, 255, 104, 38, 3, 255, 100, 32, 2, 255, 100, 30, 3, 255, 102, 30, 5, 255, 101, 30, 4, 255, 99, 28, 3, 255, 94, 31, 4, 255, 94, 31, 3, 255, 96, 27, 1, 255, 99, 31, 1, 255, 102, 40, 3, 255, 105, 37, 4, 255, 115, 42, 5, 255, 119, 46, 3, 255, 116, 42, 2, 255, 119, 41, 4, 255, 119, 38, 5, 255, 122, 40, 5, 255, 120, 40, 2, 255, 122, 42, 7, 255, 124, 45, 6, 255, 124, 47, 4, 255, 1, 2, 18, 255, 3, 1, 22, 255, 1, 0, 24, 255, 0, 2, 20, 255, 2, 1, 10, 255, 0, 0, 17, 255, 0, 4, 28, 255, 5, 18, 42, 255, 1, 22, 43, 255, 0, 21, 39, 255, 2, 17, 44, 255, 4, 20, 45, 255, 0, 17, 31, 255, 2, 12, 20, 255, 4, 10, 26, 255, 1, 10, 27, 255, 4, 13, 27, 255, 4, 9, 19, 255, 2, 6, 18, 255, 0, 3, 6, 255, 3, 1, 3, 255, 2, 1, 0, 255, 0, 0, 1, 255, 8, 22, 40, 255, 10, 22, 46, 255, 0, 3, 9, 255, 2, 5, 11, 255, 0, 0, 0, 255, 1, 0, 5, 255, 2, 0, 1, 255, 0, 0, 6, 255, 3, 0, 2, 255, 3, 1, 4, 255, 2, 0, 0, 255, 1, 7, 87, 255, 9, 74, 231, 255, 23, 23, 23, 255, 7, 1, 0, 255, 6, 16, 144, 255, 4, 25, 143, 255, 2, 1, 1, 255, 3, 1, 4, 255, 3, 1, 0, 255, 0, 1, 0, 255, 2, 0, 4, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 0, 0, 255, 3, 1, 2, 255, 6, 0, 0, 255, 7, 1, 1, 255, 6, 2, 1, 255, 5, 1, 1, 255, 7, 4, 0, 255, 7, 6, 1, 255, 7, 5, 2, 255, 7, 5, 2, 255, 17, 11, 4, 255, 19, 11, 4, 255, 28, 22, 17, 255, 35, 35, 30, 255, 33, 41, 34, 255, 32, 50, 55, 255, 30, 46, 54, 255, 35, 47, 54, 255, 37, 46, 44, 255, 37, 44, 32, 255, 35, 42, 26, 255, 42, 37, 32, 255, 43, 33, 25, 255, 41, 33, 21, 255, 33, 20, 10, 255, 36, 22, 5, 255, 30, 21, 3, 255, 26, 25, 3, 255, 25, 31, 10, 255, 35, 35, 6, 255, 36, 37, 3, 255, 42, 42, 8, 255, 54, 53, 2, 255, 52, 54, 13, 255, 43, 55, 21, 255, 55, 62, 19, 255, 59, 65, 19, 255, 63, 68, 11, 255, 68, 73, 10, 255, 68, 73, 11, 255, 69, 74, 6, 255, 68, 75, 6, 255, 71, 70, 8, 255, 72, 71, 5, 255, 74, 73, 9, 255, 72, 66, 4, 255, 85, 71, 1, 255, 80, 72, 1, 255, 77, 69, 3, 255, 83, 67, 5, 255, 84, 62, 4, 255, 81, 61, 1, 255, 88, 66, 2, 255, 89, 66, 4, 255, 83, 64, 4, 255, 78, 62, 4, 255, 84, 66, 7, 255, 83, 59, 3, 255, 83, 61, 3, 255, 84, 60, 2, 255, 115, 71, 2, 255, 143, 70, 11, 255, 114, 62, 10, 255, 100, 57, 1, 255, 107, 55, 5, 255, 104, 55, 1, 255, 101, 52, 1, 255, 107, 56, 4, 255, 114, 52, 8, 255, 101, 52, 3, 255, 94, 56, 4, 255, 119, 61, 3, 255, 122, 59, 1, 255, 104, 53, 2, 255, 95, 51, 7, 255, 90, 50, 6, 255, 84, 49, 4, 255, 96, 55, 10, 255, 101, 55, 7, 255, 98, 52, 6, 255, 104, 56, 3, 255, 106, 57, 1, 255, 108, 61, 2, 255, 106, 56, 10, 255, 106, 57, 6, 255, 119, 63, 4, 255, 125, 62, 6, 255, 125, 60, 14, 255, 133, 69, 13, 255, 147, 84, 11, 255, 162, 90, 8, 255, 183, 98, 17, 255, 186, 100, 11, 255, 186, 98, 9, 255, 192, 101, 4, 255, 195, 103, 13, 255, 196, 99, 15, 255, 185, 93, 9, 255, 173, 75, 15, 255, 156, 64, 8, 255, 174, 81, 10, 255, 182, 83, 16, 255, 182, 89, 2, 255, 167, 77, 9, 255, 126, 48, 9, 255, 118, 49, 13, 255, 168, 84, 12, 255, 176, 84, 2, 255, 177, 89, 5, 255, 182, 95, 10, 255, 182, 91, 3, 255, 193, 97, 11, 255, 179, 82, 10, 255, 163, 72, 11, 255, 171, 78, 6, 255, 173, 79, 7, 255, 177, 83, 7, 255, 174, 80, 7, 255, 174, 81, 8, 255, 180, 86, 4, 255, 193, 99, 5, 255, 194, 99, 1, 255, 185, 87, 3, 255, 174, 79, 7, 255, 163, 73, 10, 255, 163, 74, 6, 255, 168, 77, 3, 255, 167, 78, 7, 255, 159, 72, 11, 255, 167, 75, 7, 255, 167, 78, 2, 255, 170, 84, 7, 255, 163, 74, 2, 255, 145, 63, 2, 255, 128, 61, 8, 255, 125, 59, 12, 255, 142, 66, 10, 255, 152, 74, 5, 255, 147, 67, 9, 255, 139, 62, 3, 255, 169, 85, 9, 255, 184, 95, 6, 255, 180, 95, 10, 255, 175, 86, 4, 255, 164, 79, 9, 255, 169, 80, 15, 255, 171, 79, 11, 255, 182, 92, 13, 255, 188, 97, 7, 255, 188, 94, 4, 255, 189, 94, 8, 255, 188, 93, 7, 255, 184, 91, 2, 255, 185, 85, 7, 255, 179, 79, 3, 255, 177, 83, 10, 255, 188, 100, 7, 255, 192, 104, 3, 255, 191, 100, 0, 255, 183, 87, 6, 255, 187, 93, 10, 255, 188, 99, 3, 255, 189, 100, 7, 255, 174, 81, 12, 255, 166, 72, 10, 255, 172, 81, 4, 255, 188, 96, 2, 255, 191, 95, 4, 255, 196, 98, 10, 255, 194, 97, 11, 255, 195, 102, 7, 255, 191, 101, 5, 255, 183, 96, 2, 255, 182, 94, 6, 255, 182, 95, 3, 255, 183, 91, 9, 255, 188, 98, 4, 255, 193, 106, 7, 255, 192, 103, 9, 255, 189, 99, 13, 255, 192, 100, 14, 255, 197, 108, 2, 255, 196, 107, 0, 255, 197, 107, 5, 255, 200, 109, 18, 255, 202, 112, 15, 255, 198, 111, 2, 255, 200, 112, 11, 255, 195, 105, 8, 255, 199, 108, 2, 255, 206, 114, 9, 255, 200, 110, 1, 255, 199, 112, 5, 255, 198, 114, 9, 255, 197, 111, 7, 255, 196, 111, 1, 255, 202, 118, 2, 255, 204, 120, 3, 255, 203, 120, 4, 255, 207, 124, 5, 255, 208, 124, 4, 255, 202, 117, 7, 255, 199, 117, 10, 255, 206, 130, 11, 255, 206, 131, 7, 255, 214, 139, 9, 255, 213, 137, 2, 255, 212, 136, 2, 255, 217, 147, 2, 255, 216, 148, 6, 255, 212, 148, 1, 255, 217, 153, 2, 255, 223, 158, 4, 255, 220, 157, 1, 255, 223, 161, 1, 255, 230, 169, 4, 255, 228, 170, 4, 255, 225, 169, 0, 255, 223, 165, 4, 255, 210, 147, 9, 255, 201, 135, 6, 255, 201, 130, 5, 255, 194, 122, 5, 255, 203, 135, 4, 255, 202, 139, 5, 255, 201, 138, 3, 255, 199, 142, 7, 255, 198, 135, 0, 255, 205, 139, 6, 255, 206, 140, 8, 255, 210, 142, 9, 255, 227, 168, 11, 255, 238, 188, 4, 255, 234, 182, 0, 255, 229, 177, 4, 255, 228, 175, 6, 255, 227, 175, 1, 255, 230, 177, 0, 255, 234, 183, 5, 255, 222, 172, 4, 255, 187, 121, 1, 255, 177, 105, 10, 255, 193, 119, 4, 255, 180, 105, 5, 255, 173, 94, 9, 255, 174, 91, 6, 255, 177, 99, 4, 255, 168, 93, 1, 255, 165, 88, 4, 255, 167, 89, 6, 255, 169, 92, 2, 255, 165, 89, 1, 255, 168, 96, 2, 255, 167, 94, 1, 255, 172, 99, 7, 255, 170, 95, 6, 255, 173, 101, 14, 255, 182, 114, 31, 255, 178, 118, 14, 255, 172, 110, 12, 255, 154, 93, 4, 255, 151, 92, 8, 255, 153, 92, 9, 255, 174, 107, 17, 255, 180, 107, 5, 255, 171, 93, 5, 255, 170, 94, 3, 255, 166, 91, 2, 255, 171, 95, 8, 255, 173, 97, 6, 255, 170, 94, 4, 255, 161, 89, 1, 255, 159, 88, 3, 255, 183, 125, 8, 255, 201, 148, 5, 255, 199, 135, 4, 255, 192, 123, 10, 255, 183, 116, 6, 255, 173, 101, 2, 255, 172, 94, 7, 255, 171, 88, 13, 255, 166, 83, 3, 255, 168, 90, 14, 255, 162, 87, 11, 255, 166, 87, 6, 255, 174, 93, 8, 255, 176, 93, 3, 255, 171, 84, 7, 255, 184, 98, 12, 255, 200, 117, 13, 255, 195, 113, 10, 255, 192, 111, 3, 255, 190, 109, 2, 255, 190, 108, 7, 255, 191, 108, 6, 255, 190, 104, 3, 255, 186, 102, 5, 255, 185, 98, 5, 255, 173, 80, 5, 255, 146, 62, 4, 255, 133, 57, 1, 255, 127, 51, 2, 255, 121, 46, 2, 255, 120, 47, 3, 255, 117, 45, 2, 255, 117, 47, 1, 255, 116, 49, 1, 255, 122, 56, 10, 255, 113, 44, 9, 255, 112, 44, 5, 255, 114, 49, 4, 255, 108, 44, 4, 255, 107, 43, 5, 255, 108, 46, 1, 255, 105, 41, 2, 255, 101, 36, 6, 255, 118, 60, 5, 255, 124, 61, 4, 255, 120, 59, 11, 255, 108, 51, 5, 255, 96, 43, 0, 255, 82, 34, 6, 255, 93, 40, 5, 255, 99, 50, 1, 255, 102, 53, 3, 255, 105, 46, 10, 255, 100, 29, 5, 255, 107, 31, 3, 255, 103, 33, 4, 255, 99, 35, 4, 255, 106, 38, 0, 255, 110, 38, 3, 255, 102, 26, 3, 255, 104, 30, 3, 255, 105, 35, 0, 255, 104, 32, 3, 255, 107, 35, 1, 255, 111, 32, 0, 255, 115, 35, 5, 255, 113, 40, 0, 255, 117, 38, 3, 255, 121, 39, 8, 255, 116, 37, 1, 255, 119, 40, 1, 255, 121, 39, 1, 255, 125, 43, 3, 255, 123, 39, 1, 255, 126, 44, 2, 255, 133, 51, 1, 255, 136, 52, 2, 255, 135, 52, 1, 255, 1, 0, 24, 255, 1, 0, 20, 255, 0, 2, 20, 255, 2, 2, 16, 255, 4, 0, 10, 255, 3, 2, 22, 255, 1, 20, 46, 255, 4, 28, 58, 255, 0, 17, 48, 255, 3, 18, 39, 255, 2, 20, 44, 255, 0, 17, 50, 255, 2, 15, 45, 255, 4, 15, 32, 255, 4, 15, 30, 255, 4, 7, 21, 255, 3, 6, 19, 255, 0, 8, 19, 255, 2, 14, 23, 255, 2, 8, 18, 255, 5, 4, 5, 255, 3, 0, 2, 255, 0, 3, 2, 255, 0, 1, 0, 255, 1, 0, 2, 255, 1, 1, 0, 255, 0, 0, 1, 255, 1, 1, 2, 255, 1, 1, 4, 255, 2, 2, 7, 255, 1, 3, 4, 255, 3, 2, 3, 255, 0, 2, 0, 255, 1, 1, 35, 255, 36, 51, 172, 255, 42, 40, 61, 255, 16, 3, 0, 255, 9, 8, 93, 255, 2, 26, 182, 255, 2, 5, 23, 255, 7, 3, 4, 255, 0, 1, 2, 255, 2, 0, 2, 255, 2, 2, 1, 255, 4, 0, 2, 255, 0, 0, 0, 255, 2, 1, 1, 255, 2, 0, 1, 255, 1, 0, 0, 255, 2, 0, 1, 255, 4, 2, 3, 255, 5, 2, 1, 255, 5, 2, 1, 255, 5, 1, 0, 255, 7, 3, 0, 255, 7, 3, 0, 255, 12, 7, 3, 255, 12, 7, 3, 255, 12, 8, 4, 255, 17, 11, 3, 255, 20, 12, 2, 255, 22, 16, 6, 255, 25, 24, 15, 255, 33, 36, 27, 255, 38, 45, 46, 255, 35, 50, 46, 255, 34, 49, 40, 255, 34, 39, 25, 255, 44, 41, 34, 255, 38, 40, 33, 255, 41, 41, 34, 255, 40, 37, 25, 255, 35, 32, 21, 255, 39, 32, 15, 255, 34, 24, 8, 255, 30, 22, 11, 255, 31, 29, 11, 255, 36, 31, 12, 255, 39, 37, 5, 255, 39, 46, 9, 255, 39, 48, 4, 255, 49, 53, 16, 255, 53, 59, 10, 255, 47, 61, 12, 255, 50, 63, 10, 255, 61, 65, 10, 255, 66, 70, 4, 255, 68, 75, 6, 255, 75, 76, 11, 255, 67, 75, 7, 255, 68, 72, 7, 255, 74, 71, 1, 255, 72, 69, 2, 255, 77, 63, 7, 255, 80, 63, 9, 255, 74, 68, 8, 255, 71, 62, 6, 255, 68, 61, 3, 255, 77, 64, 3, 255, 82, 63, 0, 255, 83, 64, 1, 255, 88, 68, 4, 255, 86, 64, 4, 255, 85, 64, 4, 255, 94, 63, 3, 255, 99, 63, 2, 255, 82, 65, 0, 255, 85, 69, 8, 255, 93, 63, 11, 255, 106, 66, 4, 255, 151, 83, 5, 255, 172, 93, 12, 255, 155, 96, 7, 255, 153, 94, 7, 255, 142, 84, 5, 255, 134, 70, 3, 255, 125, 64, 2, 255, 121, 68, 8, 255, 118, 64, 9, 255, 114, 64, 4, 255, 111, 60, 9, 255, 113, 60, 7, 255, 108, 60, 7, 255, 110, 60, 11, 255, 109, 59, 2, 255, 111, 63, 4, 255, 109, 59, 5, 255, 114, 64, 6, 255, 111, 66, 1, 255, 119, 63, 7, 255, 125, 64, 9, 255, 128, 72, 4, 255, 134, 78, 2, 255, 144, 81, 8, 255, 161, 87, 19, 255, 172, 96, 9, 255, 179, 103, 10, 255, 189, 103, 15, 255, 196, 104, 9, 255, 193, 101, 10, 255, 170, 81, 6, 255, 162, 72, 8, 255, 168, 77, 13, 255, 182, 87, 3, 255, 186, 85, 4, 255, 179, 89, 0, 255, 168, 81, 8, 255, 121, 48, 11, 255, 139, 63, 9, 255, 178, 93, 15, 255, 185, 96, 12, 255, 160, 74, 4, 255, 119, 47, 13, 255, 118, 52, 13, 255, 153, 74, 2, 255, 179, 86, 4, 255, 170, 72, 12, 255, 173, 87, 10, 255, 164, 81, 4, 255, 170, 84, 6, 255, 147, 76, 4, 255, 117, 51, 10, 255, 131, 62, 2, 255, 160, 79, 10, 255, 180, 88, 10, 255, 167, 76, 6, 255, 155, 70, 22, 255, 172, 84, 12, 255, 186, 97, 5, 255, 193, 99, 10, 255, 177, 79, 8, 255, 142, 52, 5, 255, 124, 54, 12, 255, 135, 65, 3, 255, 151, 75, 3, 255, 166, 79, 4, 255, 159, 68, 4, 255, 174, 86, 13, 255, 179, 88, 8, 255, 175, 73, 7, 255, 169, 71, 12, 255, 127, 48, 7, 255, 109, 46, 13, 255, 145, 76, 14, 255, 180, 94, 9, 255, 187, 91, 9, 255, 178, 85, 6, 255, 148, 68, 6, 255, 122, 63, 8, 255, 154, 82, 14, 255, 162, 74, 4, 255, 136, 59, 10, 255, 117, 53, 10, 255, 114, 49, 4, 255, 122, 60, 7, 255, 136, 65, 8, 255, 168, 85, 1, 255, 185, 95, 3, 255, 188, 94, 7, 255, 189, 97, 6, 255, 191, 102, 5, 255, 188, 94, 5, 255, 183, 93, 2, 255, 181, 91, 5, 255, 188, 94, 2, 255, 191, 101, 8, 255, 188, 93, 10, 255, 189, 92, 5, 255, 189, 94, 5, 255, 188, 95, 5, 255, 175, 81, 2, 255, 162, 69, 0, 255, 168, 77, 4, 255, 187, 96, 12, 255, 191, 99, 8, 255, 196, 103, 2, 255, 197, 100, 7, 255, 195, 98, 5, 255, 195, 100, 5, 255, 193, 99, 1, 255, 192, 99, 3, 255, 193, 98, 9, 255, 192, 98, 1, 255, 193, 100, 2, 255, 179, 89, 5, 255, 174, 83, 7, 255, 179, 90, 8, 255, 184, 96, 4, 255, 180, 91, 5, 255, 176, 82, 12, 255, 177, 87, 3, 255, 179, 89, 6, 255, 183, 93, 3, 255, 189, 100, 2, 255, 193, 102, 7, 255, 196, 105, 5, 255, 198, 106, 4, 255, 196, 106, 2, 255, 189, 102, 7, 255, 181, 95, 13, 255, 192, 110, 11, 255, 193, 109, 0, 255, 198, 109, 5, 255, 198, 110, 10, 255, 200, 113, 9, 255, 199, 113, 4, 255, 200, 114, 4, 255, 202, 115, 7, 255, 200, 115, 7, 255, 200, 114, 7, 255, 200, 119, 4, 255, 207, 127, 7, 255, 207, 125, 11, 255, 202, 119, 1, 255, 211, 128, 3, 255, 215, 131, 8, 255, 208, 125, 4, 255, 205, 127, 0, 255, 209, 135, 9, 255, 221, 152, 8, 255, 217, 150, 4, 255, 215, 148, 4, 255, 216, 149, 4, 255, 214, 147, 3, 255, 224, 163, 8, 255, 229, 171, 2, 255, 229, 174, 0, 255, 228, 171, 0, 255, 220, 161, 3, 255, 207, 138, 4, 255, 204, 132, 2, 255, 204, 132, 3, 255, 208, 140, 9, 255, 199, 136, 7, 255, 193, 133, 5, 255, 195, 135, 7, 255, 200, 133, 2, 255, 203, 134, 0, 255, 210, 144, 6, 255, 223, 157, 6, 255, 236, 178, 2, 255, 237, 186, 4, 255, 230, 175, 1, 255, 230, 173, 1, 255, 233, 176, 1, 255, 238, 183, 4, 255, 234, 179, 2, 255, 232, 175, 2, 255, 229, 171, 2, 255, 195, 134, 5, 255, 174, 105, 7, 255, 178, 114, 6, 255, 181, 110, 8, 255, 173, 95, 1, 255, 163, 84, 4, 255, 166, 89, 2, 255, 167, 93, 4, 255, 156, 81, 1, 255, 159, 83, 0, 255, 164, 88, 4, 255, 156, 81, 5, 255, 162, 83, 10, 255, 159, 81, 7, 255, 155, 78, 2, 255, 167, 91, 8, 255, 175, 100, 13, 255, 173, 104, 14, 255, 177, 113, 13, 255, 180, 115, 16, 255, 166, 102, 6, 255, 153, 96, 4, 255, 151, 92, 11, 255, 161, 92, 16, 255, 182, 108, 10, 255, 172, 95, 2, 255, 168, 90, 2, 255, 172, 97, 1, 255, 175, 101, 5, 255, 166, 89, 5, 255, 171, 95, 0, 255, 174, 100, 0, 255, 179, 117, 5, 255, 200, 143, 8, 255, 197, 138, 0, 255, 197, 136, 5, 255, 190, 120, 6, 255, 190, 117, 4, 255, 188, 113, 14, 255, 175, 96, 10, 255, 167, 89, 6, 255, 172, 93, 14, 255, 179, 98, 17, 255, 181, 101, 9, 255, 175, 93, 17, 255, 180, 98, 9, 255, 182, 96, 11, 255, 177, 90, 6, 255, 190, 106, 9, 255, 201, 120, 5, 255, 195, 114, 6, 255, 192, 110, 7, 255, 189, 108, 2, 255, 188, 106, 1, 255, 187, 103, 6, 255, 187, 101, 4, 255, 182, 100, 3, 255, 180, 95, 3, 255, 172, 81, 6, 255, 153, 69, 13, 255, 138, 59, 7, 255, 124, 45, 5, 255, 114, 37, 5, 255, 115, 32, 2, 255, 116, 34, 2, 255, 110, 33, 1, 255, 102, 35, 3, 255, 104, 44, 9, 255, 104, 48, 7, 255, 110, 54, 6, 255, 109, 55, 3, 255, 110, 54, 9, 255, 107, 50, 5, 255, 109, 50, 0, 255, 114, 52, 4, 255, 105, 38, 2, 255, 112, 41, 4, 255, 117, 56, 8, 255, 120, 60, 4, 255, 103, 43, 5, 255, 89, 32, 5, 255, 99, 41, 1, 255, 102, 43, 6, 255, 102, 35, 3, 255, 104, 32, 0, 255, 106, 36, 3, 255, 99, 32, 1, 255, 107, 38, 2, 255, 106, 37, 4, 255, 103, 31, 5, 255, 115, 40, 3, 255, 120, 43, 5, 255, 114, 35, 4, 255, 106, 29, 5, 255, 101, 25, 5, 255, 105, 31, 8, 255, 109, 40, 1, 255, 114, 40, 4, 255, 113, 32, 5, 255, 116, 37, 4, 255, 120, 42, 1, 255, 128, 45, 3, 255, 128, 45, 2, 255, 123, 41, 0, 255, 120, 36, 3, 255, 123, 40, 7, 255, 122, 41, 3, 255, 129, 49, 0, 255, 140, 58, 1, 255, 143, 60, 4, 255, 146, 61, 5, 255, 1, 0, 18, 255, 0, 1, 23, 255, 1, 4, 23, 255, 1, 1, 15, 255, 0, 3, 20, 255, 1, 14, 41, 255, 1, 20, 53, 255, 2, 21, 51, 255, 2, 14, 41, 255, 5, 12, 36, 255, 3, 17, 45, 255, 1, 15, 54, 255, 6, 18, 50, 255, 0, 18, 39, 255, 0, 17, 39, 255, 2, 11, 21, 255, 2, 5, 15, 255, 1, 8, 24, 255, 3, 11, 23, 255, 3, 10, 21, 255, 0, 4, 5, 255, 2, 2, 4, 255, 1, 0, 5, 255, 1, 2, 1, 255, 3, 0, 3, 255, 2, 0, 3, 255, 0, 2, 0, 255, 1, 1, 1, 255, 0, 1, 6, 255, 1, 0, 5, 255, 1, 1, 0, 255, 2, 2, 3, 255, 0, 0, 9, 255, 27, 43, 148, 255, 39, 61, 94, 255, 20, 11, 0, 255, 9, 10, 23, 255, 12, 25, 137, 255, 3, 8, 54, 255, 3, 0, 0, 255, 3, 2, 3, 255, 4, 2, 3, 255, 3, 1, 5, 255, 3, 1, 0, 255, 3, 0, 0, 255, 1, 0, 0, 255, 3, 0, 2, 255, 3, 1, 1, 255, 2, 1, 1, 255, 1, 0, 0, 255, 3, 2, 0, 255, 5, 3, 1, 255, 6, 4, 2, 255, 4, 2, 0, 255, 7, 3, 1, 255, 9, 4, 1, 255, 11, 4, 2, 255, 11, 5, 2, 255, 12, 6, 3, 255, 14, 9, 2, 255, 17, 10, 1, 255, 20, 13, 2, 255, 22, 18, 6, 255, 29, 23, 12, 255, 36, 32, 27, 255, 38, 45, 46, 255, 36, 49, 47, 255, 29, 34, 32, 255, 40, 36, 37, 255, 41, 36, 33, 255, 43, 41, 33, 255, 39, 39, 26, 255, 40, 38, 28, 255, 40, 32, 21, 255, 41, 31, 9, 255, 33, 27, 4, 255, 35, 31, 9, 255, 45, 30, 12, 255, 47, 37, 3, 255, 47, 51, 12, 255, 43, 56, 5, 255, 46, 57, 2, 255, 49, 58, 17, 255, 58, 60, 12, 255, 61, 67, 10, 255, 69, 70, 13, 255, 68, 71, 9, 255, 66, 69, 6, 255, 69, 72, 12, 255, 68, 74, 8, 255, 66, 71, 6, 255, 61, 62, 7, 255, 81, 65, 9, 255, 95, 79, 11, 255, 86, 79, 3, 255, 87, 76, 4, 255, 85, 80, 5, 255, 84, 80, 5, 255, 92, 78, 7, 255, 101, 78, 8, 255, 99, 81, 6, 255, 97, 85, 4, 255, 105, 81, 11, 255, 106, 81, 8, 255, 110, 84, 3, 255, 111, 85, 5, 255, 106, 80, 5, 255, 111, 78, 5, 255, 111, 83, 5, 255, 102, 71, 6, 255, 134, 72, 13, 255, 163, 87, 9, 255, 172, 100, 6, 255, 179, 97, 2, 255, 181, 95, 6, 255, 175, 90, 8, 255, 163, 85, 6, 255, 136, 74, 11, 255, 148, 74, 11, 255, 166, 89, 9, 255, 151, 90, 16, 255, 146, 88, 10, 255, 142, 80, 12, 255, 146, 79, 13, 255, 154, 83, 5, 255, 154, 86, 6, 255, 156, 86, 14, 255, 158, 90, 12, 255, 164, 95, 10, 255, 176, 96, 13, 255, 178, 99, 18, 255, 180, 104, 16, 255, 189, 104, 7, 255, 196, 107, 9, 255, 192, 106, 7, 255, 192, 99, 9, 255, 179, 88, 7, 255, 158, 70, 7, 255, 186, 89, 16, 255, 194, 96, 4, 255, 167, 78, 1, 255, 142, 62, 6, 255, 149, 64, 8, 255, 169, 79, 11, 255, 153, 76, 12, 255, 189, 95, 5, 255, 140, 61, 4, 255, 96, 43, 8, 255, 168, 92, 12, 255, 182, 88, 12, 255, 142, 58, 7, 255, 123, 48, 9, 255, 140, 66, 13, 255, 159, 77, 9, 255, 161, 68, 7, 255, 151, 61, 12, 255, 137, 55, 8, 255, 146, 71, 6, 255, 140, 62, 5, 255, 140, 68, 13, 255, 131, 61, 11, 255, 160, 85, 4, 255, 173, 93, 9, 255, 174, 85, 10, 255, 176, 91, 4, 255, 157, 74, 4, 255, 171, 83, 10, 255, 164, 82, 7, 255, 157, 73, 7, 255, 150, 63, 10, 255, 123, 55, 13, 255, 119, 60, 7, 255, 160, 84, 8, 255, 175, 88, 5, 255, 178, 90, 5, 255, 165, 80, 6, 255, 166, 78, 12, 255, 168, 73, 5, 255, 148, 55, 6, 255, 135, 57, 11, 255, 132, 62, 6, 255, 142, 69, 6, 255, 157, 73, 9, 255, 159, 69, 8, 255, 162, 68, 5, 255, 167, 75, 3, 255, 152, 72, 6, 255, 132, 65, 6, 255, 144, 72, 6, 255, 152, 78, 8, 255, 147, 71, 8, 255, 148, 71, 8, 255, 142, 73, 8, 255, 139, 73, 3, 255, 148, 78, 5, 255, 168, 93, 8, 255, 169, 87, 13, 255, 179, 91, 10, 255, 177, 88, 12, 255, 163, 82, 13, 255, 162, 83, 10, 255, 169, 88, 11, 255, 165, 86, 4, 255, 180, 96, 6, 255, 185, 91, 7, 255, 190, 100, 6, 255, 190, 95, 8, 255, 190, 94, 5, 255, 185, 91, 6, 255, 185, 91, 5, 255, 182, 87, 5, 255, 179, 87, 6, 255, 187, 97, 5, 255, 193, 102, 1, 255, 193, 99, 4, 255, 195, 102, 3, 255, 194, 102, 4, 255, 191, 99, 4, 255, 192, 98, 5, 255, 195, 102, 6, 255, 194, 101, 7, 255, 196, 102, 10, 255, 198, 103, 7, 255, 195, 98, 12, 255, 174, 85, 9, 255, 170, 81, 8, 255, 179, 91, 5, 255, 184, 95, 6, 255, 176, 87, 7, 255, 170, 81, 1, 255, 171, 83, 3, 255, 173, 85, 15, 255, 179, 91, 11, 255, 182, 95, 7, 255, 187, 97, 8, 255, 192, 105, 2, 255, 182, 95, 2, 255, 175, 91, 9, 255, 189, 108, 3, 255, 191, 107, 8, 255, 199, 115, 11, 255, 197, 113, 1, 255, 194, 111, 0, 255, 196, 111, 1, 255, 199, 111, 10, 255, 197, 108, 10, 255, 199, 112, 4, 255, 203, 118, 1, 255, 201, 117, 2, 255, 199, 118, 4, 255, 204, 126, 6, 255, 205, 123, 9, 255, 201, 115, 8, 255, 207, 122, 6, 255, 211, 128, 9, 255, 206, 124, 3, 255, 205, 122, 8, 255, 209, 130, 0, 255, 220, 144, 5, 255, 222, 149, 6, 255, 218, 146, 5, 255, 218, 145, 6, 255, 220, 152, 0, 255, 223, 159, 0, 255, 229, 170, 4, 255, 228, 170, 0, 255, 229, 170, 1, 255, 232, 174, 4, 255, 229, 170, 4, 255, 208, 138, 3, 255, 204, 135, 6, 255, 217, 153, 5, 255, 205, 142, 2, 255, 191, 128, 5, 255, 197, 139, 2, 255, 204, 140, 2, 255, 195, 121, 6, 255, 211, 144, 9, 255, 226, 170, 3, 255, 231, 173, 3, 255, 234, 178, 2, 255, 230, 178, 1, 255, 231, 175, 3, 255, 230, 172, 3, 255, 230, 171, 3, 255, 231, 175, 3, 255, 234, 177, 2, 255, 236, 176, 2, 255, 235, 172, 7, 255, 221, 159, 4, 255, 194, 135, 11, 255, 189, 126, 8, 255, 188, 122, 1, 255, 175, 102, 2, 255, 169, 92, 5, 255, 161, 84, 4, 255, 163, 88, 9, 255, 158, 83, 4, 255, 162, 87, 1, 255, 161, 86, 4, 255, 159, 84, 10, 255, 168, 92, 5, 255, 163, 87, 6, 255, 161, 85, 5, 255, 169, 93, 4, 255, 172, 99, 11, 255, 172, 104, 20, 255, 176, 107, 20, 255, 175, 105, 10, 255, 161, 93, 4, 255, 143, 81, 4, 255, 141, 82, 10, 255, 145, 83, 9, 255, 177, 112, 7, 255, 185, 113, 4, 255, 181, 107, 2, 255, 179, 104, 1, 255, 175, 97, 2, 255, 169, 91, 2, 255, 168, 89, 5, 255, 182, 105, 6, 255, 200, 138, 6, 255, 199, 142, 4, 255, 198, 138, 3, 255, 195, 133, 7, 255, 199, 128, 10, 255, 201, 131, 4, 255, 201, 131, 11, 255, 200, 121, 8, 255, 187, 104, 10, 255, 176, 95, 11, 255, 176, 97, 9, 255, 179, 99, 8, 255, 180, 97, 10, 255, 183, 98, 12, 255, 178, 90, 11, 255, 178, 90, 6, 255, 192, 107, 6, 255, 200, 118, 4, 255, 192, 112, 1, 255, 192, 110, 6, 255, 190, 108, 4, 255, 187, 105, 0, 255, 186, 101, 5, 255, 184, 99, 7, 255, 180, 96, 8, 255, 175, 92, 8, 255, 168, 82, 5, 255, 146, 61, 6, 255, 132, 49, 5, 255, 125, 42, 7, 255, 118, 41, 4, 255, 113, 42, 6, 255, 115, 38, 5, 255, 108, 34, 4, 255, 99, 33, 6, 255, 91, 34, 3, 255, 99, 43, 3, 255, 114, 50, 2, 255, 118, 50, 3, 255, 117, 51, 7, 255, 112, 50, 5, 255, 114, 52, 5, 255, 113, 51, 6, 255, 111, 48, 8, 255, 88, 27, 2, 255, 87, 32, 6, 255, 94, 32, 4, 255, 93, 27, 2, 255, 98, 36, 7, 255, 97, 35, 2, 255, 100, 34, 5, 255, 97, 30, 4, 255, 98, 28, 2, 255, 105, 33, 3, 255, 108, 37, 2, 255, 109, 43, 4, 255, 109, 40, 3, 255, 114, 34, 4, 255, 123, 43, 9, 255, 129, 47, 5, 255, 133, 52, 4, 255, 126, 47, 5, 255, 107, 29, 1, 255, 103, 38, 1, 255, 114, 42, 2, 255, 117, 38, 4, 255, 97, 29, 3, 255, 97, 35, 7, 255, 122, 44, 7, 255, 140, 50, 4, 255, 148, 60, 2, 255, 143, 59, 3, 255, 134, 51, 3, 255, 125, 42, 5, 255, 127, 45, 5, 255, 136, 53, 3, 255, 154, 65, 0, 255, 155, 66, 1, 255, 161, 69, 2, 255, 2, 1, 17, 255, 0, 2, 16, 255, 2, 1, 15, 255, 1, 3, 30, 255, 3, 21, 58, 255, 1, 32, 61, 255, 2, 19, 47, 255, 1, 15, 40, 255, 0, 19, 43, 255, 1, 12, 37, 255, 1, 18, 45, 255, 1, 23, 55, 255, 3, 24, 46, 255, 2, 20, 34, 255, 2, 18, 42, 255, 1, 17, 45, 255, 1, 13, 31, 255, 3, 8, 15, 255, 0, 6, 15, 255, 2, 9, 18, 255, 3, 6, 13, 255, 2, 3, 1, 255, 1, 1, 2, 255, 0, 0, 2, 255, 1, 1, 5, 255, 0, 1, 1, 255, 0, 0, 2, 255, 2, 0, 6, 255, 0, 2, 3, 255, 2, 2, 1, 255, 2, 0, 3, 255, 0, 0, 2, 255, 13, 21, 106, 255, 40, 66, 151, 255, 17, 18, 0, 255, 12, 5, 0, 255, 20, 23, 50, 255, 7, 13, 31, 255, 4, 0, 0, 255, 3, 2, 8, 255, 2, 2, 2, 255, 1, 1, 2, 255, 7, 2, 2, 255, 3, 1, 0, 255, 1, 1, 3, 255, 4, 1, 2, 255, 2, 1, 1, 255, 1, 0, 0, 255, 1, 0, 0, 255, 2, 1, 0, 255, 3, 3, 0, 255, 6, 2, 1, 255, 9, 3, 3, 255, 8, 4, 0, 255, 10, 6, 3, 255, 8, 5, 1, 255, 9, 6, 1, 255, 11, 5, 1, 255, 12, 7, 3, 255, 13, 9, 4, 255, 12, 9, 1, 255, 18, 14, 3, 255, 26, 20, 8, 255, 28, 21, 10, 255, 34, 32, 25, 255, 40, 40, 39, 255, 37, 40, 33, 255, 32, 32, 22, 255, 40, 39, 31, 255, 50, 47, 36, 255, 49, 45, 25, 255, 47, 43, 25, 255, 46, 41, 32, 255, 44, 36, 21, 255, 46, 33, 6, 255, 41, 29, 5, 255, 40, 34, 8, 255, 51, 47, 10, 255, 56, 47, 10, 255, 50, 47, 9, 255, 47, 49, 14, 255, 54, 55, 8, 255, 54, 60, 9, 255, 61, 62, 8, 255, 67, 68, 14, 255, 61, 70, 5, 255, 74, 72, 9, 255, 80, 71, 9, 255, 74, 73, 3, 255, 70, 68, 5, 255, 76, 69, 1, 255, 99, 89, 9, 255, 107, 101, 10, 255, 108, 108, 7, 255, 106, 105, 1, 255, 105, 99, 2, 255, 110, 98, 5, 255, 106, 100, 5, 255, 107, 97, 5, 255, 110, 91, 5, 255, 107, 88, 6, 255, 104, 87, 8, 255, 117, 87, 6, 255, 108, 88, 1, 255, 100, 83, 3, 255, 101, 77, 6, 255, 103, 79, 11, 255, 103, 73, 4, 255, 103, 71, 5, 255, 101, 68, 9, 255, 104, 66, 2, 255, 117, 69, 4, 255, 124, 65, 4, 255, 143, 69, 6, 255, 160, 77, 3, 255, 164, 86, 7, 255, 180, 91, 2, 255, 172, 87, 1, 255, 177, 95, 6, 255, 179, 97, 6, 255, 174, 96, 4, 255, 179, 99, 3, 255, 192, 106, 11, 255, 191, 103, 14, 255, 196, 109, 6, 255, 197, 112, 7, 255, 193, 103, 7, 255, 198, 110, 6, 255, 200, 113, 11, 255, 193, 103, 5, 255, 193, 103, 3, 255, 196, 110, 3, 255, 175, 88, 12, 255, 160, 66, 13, 255, 193, 97, 3, 255, 193, 92, 6, 255, 157, 71, 4, 255, 135, 61, 5, 255, 170, 77, 15, 255, 163, 64, 7, 255, 130, 55, 5, 255, 115, 51, 4, 255, 153, 75, 4, 255, 169, 89, 7, 255, 197, 123, 20, 255, 194, 105, 12, 255, 128, 63, 6, 255, 122, 64, 5, 255, 154, 72, 3, 255, 137, 61, 3, 255, 113, 59, 7, 255, 137, 71, 13, 255, 156, 78, 7, 255, 141, 72, 7, 255, 137, 65, 7, 255, 135, 58, 1, 255, 132, 66, 5, 255, 128, 62, 7, 255, 132, 63, 5, 255, 132, 67, 11, 255, 147, 74, 11, 255, 162, 84, 0, 255, 163, 78, 7, 255, 150, 65, 10, 255, 153, 72, 10, 255, 148, 70, 8, 255, 163, 75, 12, 255, 154, 72, 2, 255, 132, 63, 3, 255, 128, 59, 9, 255, 131, 62, 4, 255, 150, 78, 6, 255, 164, 83, 6, 255, 168, 77, 10, 255, 155, 72, 13, 255, 147, 66, 5, 255, 155, 73, 2, 255, 140, 61, 2, 255, 133, 62, 8, 255, 124, 63, 5, 255, 131, 61, 18, 255, 141, 64, 12, 255, 134, 61, 1, 255, 119, 52, 5, 255, 124, 61, 10, 255, 124, 65, 0, 255, 130, 66, 5, 255, 141, 66, 6, 255, 145, 72, 4, 255, 144, 74, 0, 255, 148, 73, 5, 255, 151, 72, 7, 255, 150, 74, 5, 255, 156, 74, 9, 255, 175, 84, 15, 255, 180, 85, 9, 255, 178, 84, 9, 255, 165, 76, 6, 255, 162, 79, 11, 255, 134, 67, 5, 255, 107, 60, 7, 255, 131, 76, 11, 255, 178, 97, 8, 255, 186, 97, 9, 255, 158, 78, 6, 255, 175, 92, 5, 255, 185, 101, 9, 255, 178, 92, 3, 255, 160, 75, 4, 255, 167, 82, 10, 255, 172, 87, 5, 255, 171, 84, 4, 255, 180, 90, 5, 255, 191, 100, 5, 255, 194, 99, 8, 255, 190, 98, 3, 255, 186, 98, 4, 255, 186, 98, 3, 255, 188, 94, 6, 255, 182, 90, 7, 255, 177, 85, 8, 255, 185, 96, 6, 255, 187, 95, 9, 255, 173, 81, 5, 255, 176, 91, 3, 255, 175, 90, 6, 255, 186, 100, 2, 255, 188, 101, 8, 255, 169, 80, 5, 255, 174, 88, 3, 255, 174, 91, 3, 255, 162, 78, 5, 255, 167, 84, 6, 255, 182, 100, 16, 255, 169, 85, 10, 255, 170, 89, 0, 255, 177, 95, 11, 255, 181, 97, 14, 255, 193, 114, 3, 255, 181, 99, 3, 255, 176, 89, 6, 255, 181, 91, 7, 255, 185, 94, 3, 255, 196, 108, 6, 255, 194, 106, 4, 255, 197, 108, 5, 255, 197, 110, 3, 255, 200, 113, 4, 255, 198, 112, 3, 255, 191, 110, 3, 255, 199, 125, 4, 255, 204, 125, 0, 255, 206, 122, 2, 255, 206, 124, 1, 255, 201, 122, 6, 255, 201, 122, 12, 255, 208, 136, 2, 255, 218, 145, 5, 255, 218, 143, 3, 255, 211, 134, 3, 255, 213, 136, 7, 255, 213, 134, 5, 255, 208, 131, 5, 255, 220, 153, 9, 255, 228, 169, 3, 255, 228, 169, 1, 255, 229, 168, 2, 255, 225, 164, 4, 255, 215, 153, 5, 255, 207, 138, 5, 255, 214, 151, 5, 255, 218, 159, 4, 255, 194, 131, 1, 255, 195, 131, 1, 255, 204, 141, 8, 255, 201, 139, 6, 255, 205, 140, 5, 255, 224, 169, 8, 255, 230, 180, 6, 255, 228, 172, 1, 255, 230, 168, 1, 255, 224, 165, 5, 255, 224, 169, 3, 255, 228, 170, 0, 255, 228, 172, 1, 255, 225, 171, 0, 255, 228, 173, 1, 255, 235, 178, 2, 255, 230, 168, 4, 255, 221, 160, 4, 255, 208, 145, 4, 255, 189, 118, 5, 255, 191, 117, 3, 255, 183, 111, 6, 255, 167, 89, 5, 255, 159, 80, 1, 255, 159, 84, 5, 255, 154, 77, 1, 255, 158, 81, 4, 255, 157, 81, 1, 255, 162, 85, 4, 255, 166, 94, 4, 255, 161, 90, 5, 255, 167, 93, 7, 255, 179, 107, 2, 255, 176, 108, 5, 255, 178, 114, 20, 255, 171, 113, 17, 255, 164, 104, 15, 255, 154, 90, 10, 255, 149, 86, 4, 255, 141, 78, 4, 255, 138, 75, 4, 255, 178, 117, 5, 255, 192, 122, 3, 255, 186, 115, 7, 255, 182, 107, 5, 255, 181, 101, 4, 255, 176, 97, 3, 255, 179, 104, 4, 255, 192, 135, 10, 255, 199, 141, 5, 255, 194, 133, 5, 255, 197, 129, 6, 255, 203, 126, 12, 255, 201, 128, 14, 255, 199, 128, 5, 255, 203, 126, 16, 255, 206, 128, 12, 255, 202, 126, 12, 255, 193, 119, 13, 255, 190, 111, 13, 255, 190, 105, 13, 255, 185, 101, 9, 255, 176, 89, 4, 255, 170, 77, 11, 255, 173, 83, 3, 255, 192, 106, 7, 255, 200, 118, 9, 255, 194, 114, 3, 255, 193, 112, 4, 255, 190, 108, 7, 255, 187, 105, 5, 255, 184, 102, 2, 255, 178, 93, 4, 255, 168, 85, 10, 255, 159, 74, 5, 255, 153, 63, 5, 255, 137, 53, 5, 255, 136, 55, 2, 255, 138, 56, 3, 255, 135, 59, 2, 255, 133, 61, 4, 255, 126, 47, 1, 255, 121, 42, 3, 255, 107, 37, 2, 255, 96, 33, 2, 255, 93, 29, 4, 255, 103, 32, 2, 255, 105, 31, 1, 255, 104, 34, 2, 255, 103, 34, 0, 255, 105, 36, 7, 255, 102, 34, 4, 255, 104, 38, 1, 255, 99, 30, 3, 255, 89, 23, 4, 255, 84, 23, 1, 255, 93, 30, 3, 255, 105, 37, 0, 255, 102, 34, 3, 255, 101, 36, 3, 255, 106, 37, 1, 255, 111, 36, 1, 255, 114, 40, 5, 255, 116, 42, 4, 255, 121, 43, 2, 255, 125, 47, 5, 255, 118, 44, 3, 255, 122, 45, 1, 255, 123, 44, 2, 255, 121, 42, 3, 255, 118, 41, 3, 255, 119, 44, 3, 255, 124, 46, 4, 255, 111, 36, 2, 255, 103, 29, 1, 255, 99, 28, 3, 255, 97, 28, 3, 255, 119, 39, 4, 255, 154, 62, 6, 255, 163, 71, 2, 255, 154, 66, 2, 255, 147, 62, 5, 255, 138, 52, 3, 255, 139, 53, 1, 255, 154, 67, 3, 255, 165, 73, 4, 255, 162, 68, 2, 255, 165, 71, 4, 255, 3, 2, 22, 255, 0, 3, 17, 255, 3, 1, 30, 255, 7, 24, 72, 255, 1, 34, 74, 255, 1, 27, 56, 255, 5, 25, 63, 255, 3, 21, 48, 255, 2, 18, 29, 255, 0, 11, 33, 255, 2, 14, 45, 255, 3, 19, 49, 255, 2, 24, 47, 255, 0, 21, 51, 255, 0, 19, 51, 255, 4, 21, 49, 255, 5, 18, 39, 255, 1, 9, 22, 255, 1, 7, 20, 255, 1, 8, 22, 255, 2, 4, 18, 255, 3, 3, 10, 255, 0, 0, 1, 255, 1, 1, 0, 255, 0, 0, 0, 255, 1, 2, 4, 255, 0, 1, 8, 255, 5, 0, 7, 255, 2, 0, 3, 255, 2, 2, 2, 255, 3, 1, 0, 255, 1, 3, 44, 255, 38, 67, 186, 255, 46, 41, 40, 255, 9, 0, 0, 255, 18, 17, 35, 255, 18, 19, 37, 255, 3, 0, 0, 255, 3, 0, 3, 255, 2, 2, 3, 255, 2, 1, 1, 255, 0, 1, 0, 255, 1, 0, 0, 255, 1, 0, 0, 255, 1, 0, 1, 255, 2, 1, 2, 255, 4, 0, 2, 255, 4, 2, 0, 255, 2, 2, 0, 255, 3, 3, 0, 255, 6, 2, 1, 255, 7, 3, 0, 255, 9, 4, 1, 255, 9, 4, 1, 255, 10, 5, 1, 255, 12, 7, 1, 255, 12, 8, 4, 255, 12, 4, 3, 255, 14, 7, 3, 255, 11, 11, 1, 255, 13, 8, 0, 255, 17, 11, 4, 255, 19, 19, 6, 255, 28, 24, 5, 255, 36, 30, 20, 255, 47, 31, 30, 255, 42, 36, 20, 255, 34, 35, 20, 255, 43, 38, 34, 255, 47, 49, 34, 255, 45, 48, 27, 255, 47, 45, 28, 255, 46, 41, 34, 255, 47, 41, 25, 255, 44, 39, 12, 255, 41, 37, 12, 255, 42, 39, 13, 255, 53, 46, 18, 255, 59, 50, 5, 255, 56, 50, 2, 255, 55, 55, 10, 255, 56, 56, 12, 255, 66, 61, 10, 255, 73, 68, 3, 255, 66, 70, 4, 255, 71, 76, 1, 255, 87, 74, 1, 255, 77, 76, 4, 255, 71, 69, 1, 255, 84, 74, 7, 255, 98, 90, 5, 255, 109, 102, 10, 255, 102, 98, 10, 255, 104, 108, 5, 255, 121, 116, 11, 255, 101, 95, 3, 255, 100, 89, 7, 255, 99, 90, 8, 255, 95, 86, 11, 255, 99, 88, 8, 255, 100, 84, 5, 255, 97, 79, 2, 255, 99, 80, 1, 255, 97, 78, 5, 255, 93, 69, 3, 255, 98, 69, 1, 255, 100, 72, 6, 255, 97, 68, 5, 255, 102, 68, 3, 255, 101, 63, 5, 255, 105, 65, 2, 255, 107, 64, 1, 255, 106, 64, 4, 255, 107, 61, 7, 255, 109, 57, 4, 255, 124, 66, 5, 255, 138, 73, 6, 255, 141, 74, 2, 255, 167, 90, 6, 255, 168, 88, 2, 255, 173, 90, 2, 255, 172, 90, 8, 255, 183, 97, 6, 255, 175, 84, 5, 255, 195, 101, 8, 255, 174, 87, 12, 255, 159, 74, 2, 255, 191, 97, 8, 255, 187, 90, 4, 255, 147, 64, 10, 255, 171, 83, 4, 255, 183, 87, 4, 255, 139, 57, 8, 255, 151, 66, 19, 255, 166, 76, 12, 255, 140, 60, 4, 255, 120, 55, 7, 255, 153, 82, 7, 255, 146, 63, 2, 255, 110, 45, 14, 255, 108, 58, 12, 255, 129, 67, 9, 255, 157, 74, 5, 255, 149, 64, 4, 255, 165, 80, 12, 255, 138, 65, 7, 255, 114, 54, 8, 255, 133, 58, 13, 255, 132, 55, 9, 255, 126, 62, 8, 255, 148, 87, 13, 255, 157, 79, 14, 255, 168, 88, 11, 255, 161, 87, 4, 255, 142, 62, 4, 255, 143, 63, 16, 255, 158, 83, 21, 255, 148, 74, 2, 255, 154, 77, 12, 255, 168, 94, 16, 255, 165, 88, 11, 255, 152, 74, 3, 255, 151, 78, 18, 255, 128, 67, 6, 255, 122, 57, 9, 255, 150, 70, 10, 255, 144, 68, 4, 255, 133, 62, 4, 255, 138, 67, 9, 255, 135, 64, 13, 255, 131, 64, 9, 255, 129, 65, 7, 255, 131, 65, 5, 255, 134, 65, 6, 255, 128, 60, 4, 255, 128, 59, 14, 255, 128, 64, 8, 255, 124, 65, 2, 255, 123, 64, 6, 255, 126, 68, 3, 255, 124, 66, 5, 255, 122, 63, 2, 255, 126, 65, 7, 255, 132, 69, 4, 255, 132, 66, 8, 255, 132, 67, 10, 255, 138, 71, 4, 255, 140, 69, 11, 255, 137, 69, 6, 255, 137, 69, 9, 255, 138, 70, 4, 255, 144, 77, 11, 255, 156, 86, 4, 255, 162, 84, 8, 255, 164, 90, 12, 255, 163, 91, 11, 255, 171, 94, 5, 255, 159, 78, 10, 255, 142, 73, 8, 255, 137, 67, 2, 255, 163, 88, 12, 255, 180, 103, 18, 255, 175, 86, 9, 255, 181, 88, 13, 255, 166, 82, 8, 255, 164, 83, 4, 255, 182, 102, 12, 255, 181, 99, 11, 255, 178, 95, 12, 255, 171, 89, 13, 255, 161, 83, 8, 255, 169, 83, 7, 255, 195, 107, 15, 255, 196, 109, 7, 255, 192, 103, 10, 255, 180, 93, 3, 255, 189, 103, 16, 255, 189, 106, 6, 255, 185, 98, 5, 255, 184, 94, 7, 255, 179, 94, 14, 255, 180, 96, 12, 255, 185, 101, 3, 255, 183, 101, 8, 255, 187, 106, 6, 255, 183, 101, 9, 255, 184, 104, 7, 255, 196, 120, 8, 255, 185, 106, 12, 255, 186, 107, 7, 255, 184, 106, 9, 255, 182, 108, 8, 255, 181, 103, 8, 255, 183, 98, 14, 255, 180, 101, 9, 255, 175, 102, 10, 255, 186, 112, 10, 255, 197, 122, 13, 255, 196, 121, 9, 255, 172, 94, 9, 255, 170, 91, 6, 255, 175, 97, 6, 255, 186, 108, 10, 255, 188, 110, 15, 255, 200, 125, 7, 255, 201, 123, 6, 255, 194, 115, 6, 255, 196, 115, 18, 255, 193, 114, 10, 255, 194, 116, 11, 255, 198, 123, 9, 255, 198, 122, 6, 255, 191, 114, 2, 255, 187, 108, 6, 255, 196, 120, 5, 255, 209, 139, 4, 255, 206, 128, 5, 255, 200, 120, 5, 255, 205, 126, 3, 255, 209, 134, 0, 255, 210, 140, 2, 255, 208, 140, 4, 255, 216, 150, 10, 255, 217, 156, 4, 255, 225, 168, 2, 255, 229, 169, 2, 255, 227, 163, 1, 255, 218, 152, 3, 255, 205, 138, 5, 255, 208, 139, 5, 255, 210, 147, 4, 255, 202, 142, 2, 255, 198, 138, 8, 255, 200, 138, 5, 255, 198, 133, 3, 255, 204, 145, 7, 255, 221, 165, 9, 255, 229, 173, 3, 255, 227, 168, 2, 255, 225, 164, 5, 255, 225, 166, 4, 255, 227, 169, 1, 255, 229, 172, 2, 255, 227, 171, 1, 255, 228, 172, 0, 255, 225, 168, 3, 255, 225, 166, 4, 255, 230, 171, 0, 255, 226, 168, 2, 255, 213, 152, 11, 255, 200, 135, 7, 255, 188, 116, 8, 255, 190, 115, 9, 255, 183, 112, 0, 255, 166, 91, 6, 255, 158, 83, 2, 255, 158, 82, 1, 255, 149, 74, 2, 255, 153, 80, 4, 255, 164, 91, 4, 255, 166, 93, 2, 255, 172, 97, 8, 255, 160, 90, 9, 255, 161, 94, 6, 255, 189, 124, 9, 255, 179, 118, 2, 255, 183, 127, 15, 255, 183, 133, 13, 255, 178, 124, 14, 255, 167, 112, 16, 255, 161, 103, 8, 255, 145, 87, 7, 255, 150, 91, 12, 255, 184, 118, 6, 255, 187, 117, 9, 255, 188, 112, 17, 255, 192, 115, 6, 255, 187, 111, 4, 255, 181, 107, 7, 255, 196, 131, 6, 255, 201, 144, 4, 255, 199, 138, 4, 255, 197, 129, 10, 255, 195, 125, 4, 255, 200, 124, 4, 255, 201, 126, 4, 255, 205, 128, 3, 255, 206, 126, 4, 255, 202, 127, 8, 255, 203, 130, 5, 255, 205, 132, 9, 255, 206, 131, 16, 255, 207, 129, 9, 255, 205, 124, 17, 255, 177, 94, 12, 255, 165, 79, 11, 255, 177, 94, 11, 255, 195, 114, 12, 255, 199, 118, 9, 255, 195, 113, 6, 255, 192, 110, 1, 255, 191, 105, 5, 255, 188, 101, 6, 255, 180, 91, 4, 255, 170, 80, 4, 255, 160, 78, 3, 255, 147, 70, 4, 255, 146, 64, 9, 255, 142, 59, 5, 255, 139, 56, 2, 255, 143, 62, 6, 255, 137, 61, 2, 255, 136, 55, 5, 255, 132, 49, 2, 255, 128, 47, 5, 255, 118, 43, 3, 255, 113, 44, 4, 255, 109, 44, 4, 255, 107, 38, 2, 255, 110, 36, 1, 255, 112, 38, 1, 255, 115, 40, 4, 255, 113, 37, 5, 255, 109, 39, 3, 255, 113, 46, 5, 255, 119, 42, 5, 255, 99, 29, 1, 255, 94, 35, 4, 255, 105, 34, 2, 255, 109, 36, 1, 255, 114, 39, 2, 255, 113, 36, 2, 255, 106, 40, 2, 255, 114, 44, 1, 255, 122, 42, 3, 255, 128, 50, 9, 255, 131, 49, 3, 255, 119, 46, 2, 255, 115, 44, 3, 255, 112, 42, 4, 255, 106, 35, 3, 255, 99, 28, 3, 255, 97, 31, 4, 255, 98, 37, 5, 255, 102, 34, 5, 255, 101, 35, 8, 255, 105, 34, 5, 255, 111, 37, 1, 255, 110, 33, 2, 255, 136, 45, 4, 255, 164, 66, 5, 255, 168, 73, 4, 255, 162, 71, 0, 255, 158, 66, 2, 255, 153, 60, 3, 255, 156, 68, 1, 255, 164, 77, 0, 255, 162, 73, 3, 255, 163, 73, 5, 255, 160, 69, 5, 255, 2, 0, 14, 255, 3, 2, 25, 255, 2, 21, 69, 255, 3, 38, 85, 255, 4, 34, 75, 255, 2, 23, 65, 255, 0, 27, 60, 255, 1, 27, 53, 255, 2, 23, 50, 255, 1, 20, 46, 255, 1, 21, 37, 255, 2, 21, 36, 255, 4, 21, 42, 255, 2, 22, 55, 255, 1, 22, 50, 255, 1, 21, 34, 255, 3, 19, 41, 255, 1, 13, 42, 255, 0, 10, 34, 255, 0, 7, 24, 255, 2, 7, 17, 255, 4, 5, 10, 255, 2, 3, 7, 255, 0, 0, 4, 255, 0, 0, 1, 255, 2, 2, 0, 255, 1, 1, 4, 255, 2, 2, 4, 255, 1, 0, 3, 255, 5, 2, 3, 255, 3, 0, 9, 255, 15, 48, 175, 255, 50, 60, 86, 255, 19, 9, 0, 255, 18, 14, 29, 255, 32, 23, 60, 255, 2, 3, 4, 255, 4, 2, 2, 255, 2, 2, 0, 255, 2, 1, 1, 255, 2, 2, 2, 255, 2, 2, 1, 255, 1, 1, 0, 255, 2, 1, 0, 255, 2, 1, 1, 255, 2, 1, 3, 255, 4, 0, 1, 255, 4, 0, 0, 255, 2, 1, 0, 255, 2, 2, 0, 255, 6, 2, 1, 255, 11, 2, 0, 255, 10, 2, 1, 255, 9, 4, 1, 255, 11, 6, 1, 255, 12, 7, 1, 255, 10, 7, 2, 255, 11, 7, 4, 255, 11, 6, 1, 255, 14, 11, 1, 255, 22, 13, 4, 255, 19, 11, 4, 255, 18, 16, 4, 255, 30, 23, 7, 255, 40, 27, 12, 255, 48, 35, 20, 255, 48, 38, 26, 255, 42, 35, 38, 255, 46, 44, 52, 255, 45, 48, 42, 255, 45, 45, 34, 255, 47, 45, 32, 255, 49, 46, 32, 255, 49, 46, 28, 255, 52, 48, 26, 255, 44, 40, 14, 255, 47, 43, 11, 255, 50, 43, 16, 255, 58, 54, 13, 255, 60, 57, 7, 255, 57, 55, 4, 255, 64, 61, 9, 255, 72, 67, 11, 255, 69, 70, 6, 255, 66, 70, 10, 255, 75, 74, 12, 255, 82, 67, 3, 255, 66, 55, 6, 255, 81, 77, 4, 255, 92, 97, 11, 255, 90, 100, 17, 255, 86, 101, 18, 255, 94, 98, 9, 255, 91, 95, 4, 255, 128, 116, 23, 255, 115, 96, 9, 255, 90, 78, 4, 255, 93, 81, 3, 255, 91, 79, 1, 255, 92, 76, 2, 255, 96, 75, 1, 255, 92, 65, 11, 255, 94, 66, 13, 255, 99, 69, 2, 255, 93, 69, 2, 255, 85, 71, 2, 255, 90, 69, 1, 255, 100, 66, 2, 255, 103, 67, 6, 255, 100, 65, 2, 255, 105, 63, 2, 255, 107, 61, 3, 255, 107, 62, 7, 255, 108, 63, 7, 255, 115, 64, 5, 255, 106, 62, 7, 255, 99, 53, 2, 255, 120, 67, 6, 255, 143, 74, 8, 255, 143, 71, 3, 255, 150, 79, 2, 255, 150, 72, 12, 255, 158, 75, 9, 255, 138, 68, 0, 255, 179, 85, 5, 255, 134, 61, 5, 255, 147, 77, 15, 255, 169, 76, 6, 255, 129, 56, 1, 255, 145, 65, 15, 255, 157, 74, 10, 255, 121, 57, 0, 255, 122, 59, 4, 255, 167, 83, 5, 255, 136, 58, 6, 255, 104, 58, 7, 255, 123, 66, 6, 255, 151, 75, 5, 255, 126, 61, 6, 255, 123, 62, 10, 255, 123, 58, 5, 255, 120, 55, 6, 255, 112, 48, 4, 255, 105, 35, 4, 255, 119, 45, 6, 255, 140, 68, 16, 255, 151, 74, 8, 255, 176, 101, 6, 255, 184, 101, 25, 255, 198, 105, 24, 255, 200, 108, 7, 255, 189, 99, 15, 255, 197, 107, 22, 255, 199, 109, 13, 255, 199, 114, 24, 255, 202, 122, 19, 255, 197, 117, 10, 255, 196, 114, 14, 255, 192, 108, 15, 255, 190, 107, 16, 255, 171, 91, 12, 255, 176, 95, 15, 255, 181, 100, 12, 255, 174, 93, 14, 255, 157, 81, 13, 255, 145, 72, 10, 255, 129, 61, 5, 255, 129, 58, 13, 255, 134, 66, 4, 255, 128, 66, 1, 255, 129, 65, 3, 255, 133, 65, 5, 255, 132, 67, 4, 255, 136, 64, 9, 255, 131, 65, 7, 255, 125, 61, 11, 255, 125, 59, 14, 255, 124, 61, 7, 255, 121, 63, 8, 255, 125, 61, 11, 255, 128, 60, 11, 255, 127, 60, 9, 255, 133, 69, 15, 255, 133, 73, 3, 255, 136, 71, 9, 255, 140, 69, 7, 255, 143, 71, 7, 255, 133, 61, 14, 255, 136, 68, 8, 255, 143, 76, 9, 255, 150, 76, 12, 255, 147, 68, 13, 255, 133, 62, 10, 255, 154, 82, 18, 255, 173, 96, 5, 255, 176, 95, 7, 255, 170, 91, 7, 255, 183, 101, 9, 255, 182, 100, 11, 255, 182, 109, 21, 255, 193, 119, 17, 255, 194, 112, 7, 255, 188, 111, 10, 255, 197, 120, 15, 255, 195, 105, 4, 255, 187, 102, 8, 255, 196, 117, 19, 255, 197, 116, 7, 255, 211, 121, 13, 255, 199, 112, 9, 255, 160, 80, 8, 255, 171, 88, 10, 255, 208, 130, 11, 255, 213, 135, 13, 255, 215, 134, 18, 255, 193, 111, 14, 255, 193, 112, 15, 255, 206, 129, 9, 255, 207, 123, 10, 255, 193, 105, 6, 255, 211, 135, 8, 255, 215, 142, 10, 255, 215, 137, 19, 255, 210, 137, 9, 255, 212, 140, 5, 255, 217, 145, 10, 255, 216, 145, 18, 255, 213, 144, 9, 255, 219, 150, 11, 255, 216, 146, 13, 255, 215, 148, 12, 255, 218, 147, 15, 255, 210, 138, 10, 255, 203, 137, 9, 255, 217, 150, 8, 255, 222, 151, 10, 255, 220, 157, 9, 255, 223, 156, 3, 255, 221, 149, 12, 255, 208, 134, 11, 255, 200, 124, 17, 255, 206, 136, 7, 255, 221, 154, 4, 255, 211, 141, 8, 255, 212, 145, 3, 255, 217, 153, 4, 255, 223, 159, 8, 255, 214, 148, 13, 255, 205, 134, 2, 255, 208, 137, 9, 255, 209, 141, 8, 255, 207, 140, 4, 255, 203, 135, 6, 255, 201, 130, 6, 255, 208, 138, 10, 255, 203, 135, 2, 255, 203, 129, 4, 255, 204, 128, 8, 255, 211, 137, 11, 255, 214, 146, 6, 255, 213, 148, 2, 255, 211, 150, 0, 255, 217, 158, 4, 255, 226, 165, 1, 255, 229, 164, 3, 255, 224, 159, 12, 255, 219, 155, 10, 255, 212, 146, 6, 255, 205, 136, 8, 255, 202, 135, 0, 255, 209, 145, 10, 255, 201, 138, 4, 255, 202, 140, 3, 255, 196, 133, 4, 255, 209, 147, 6, 255, 220, 164, 9, 255, 221, 165, 3, 255, 225, 167, 0, 255, 222, 163, 0, 255, 223, 164, 2, 255, 232, 173, 10, 255, 230, 173, 4, 255, 227, 168, 2, 255, 224, 166, 5, 255, 226, 169, 2, 255, 225, 167, 1, 255, 227, 168, 5, 255, 226, 166, 1, 255, 225, 166, 2, 255, 217, 158, 4, 255, 203, 143, 0, 255, 191, 123, 4, 255, 188, 116, 4, 255, 180, 105, 7, 255, 171, 94, 0, 255, 162, 85, 5, 255, 161, 85, 3, 255, 159, 84, 8, 255, 161, 86, 5, 255, 160, 82, 4, 255, 174, 97, 2, 255, 177, 101, 5, 255, 158, 81, 1, 255, 160, 90, 4, 255, 181, 119, 12, 255, 182, 122, 9, 255, 189, 126, 7, 255, 186, 130, 12, 255, 185, 125, 18, 255, 184, 123, 12, 255, 177, 115, 8, 255, 162, 110, 4, 255, 164, 106, 6, 255, 193, 124, 4, 255, 199, 132, 6, 255, 197, 128, 2, 255, 189, 117, 4, 255, 185, 115, 2, 255, 196, 132, 0, 255, 202, 141, 2, 255, 200, 138, 1, 255, 197, 130, 5, 255, 194, 123, 5, 255, 196, 123, 6, 255, 199, 124, 2, 255, 202, 125, 2, 255, 204, 124, 8, 255, 204, 125, 5, 255, 204, 127, 13, 255, 204, 128, 18, 255, 205, 130, 17, 255, 207, 131, 23, 255, 209, 131, 19, 255, 208, 130, 13, 255, 201, 123, 16, 255, 199, 121, 11, 255, 202, 124, 6, 255, 198, 118, 0, 255, 195, 115, 4, 255, 193, 106, 8, 255, 185, 96, 0, 255, 184, 94, 2, 255, 181, 92, 4, 255, 170, 83, 2, 255, 163, 82, 5, 255, 161, 80, 6, 255, 153, 72, 3, 255, 144, 65, 2, 255, 141, 57, 6, 255, 144, 55, 5, 255, 145, 59, 5, 255, 132, 53, 3, 255, 128, 47, 1, 255, 129, 46, 1, 255, 127, 45, 2, 255, 123, 45, 3, 255, 120, 48, 5, 255, 119, 49, 5, 255, 112, 40, 3, 255, 119, 46, 7, 255, 126, 51, 7, 255, 120, 45, 1, 255, 118, 44, 5, 255, 113, 43, 5, 255, 110, 43, 2, 255, 118, 41, 2, 255, 111, 36, 2, 255, 109, 39, 4, 255, 116, 45, 6, 255, 115, 44, 2, 255, 114, 41, 1, 255, 113, 39, 5, 255, 119, 42, 9, 255, 122, 43, 6, 255, 114, 42, 3, 255, 111, 36, 1, 255, 117, 40, 5, 255, 111, 37, 4, 255, 105, 38, 3, 255, 104, 39, 5, 255, 97, 32, 3, 255, 92, 27, 0, 255, 96, 32, 5, 255, 100, 38, 9, 255, 102, 34, 1, 255, 112, 34, 6, 255, 110, 38, 6, 255, 106, 40, 1, 255, 113, 32, 6, 255, 126, 44, 8, 255, 156, 67, 3, 255, 169, 73, 1, 255, 164, 71, 3, 255, 164, 72, 2, 255, 166, 75, 3, 255, 166, 77, 5, 255, 161, 73, 3, 255, 158, 70, 2, 255, 159, 70, 3, 255, 155, 66, 2, 255, 3, 1, 21, 255, 1, 22, 67, 255, 4, 37, 85, 255, 1, 34, 86, 255, 2, 36, 83, 255, 2, 25, 62, 255, 1, 30, 68, 255, 1, 33, 70, 255, 1, 26, 65, 255, 3, 22, 58, 255, 2, 21, 40, 255, 2, 22, 40, 255, 0, 21, 50, 255, 3, 22, 56, 255, 2, 20, 58, 255, 0, 17, 46, 255, 1, 18, 46, 255, 5, 22, 39, 255, 1, 17, 33, 255, 0, 11, 22, 255, 1, 9, 19, 255, 0, 3, 15, 255, 2, 6, 12, 255, 1, 2, 5, 255, 0, 1, 4, 255, 2, 1, 8, 255, 3, 0, 12, 255, 1, 2, 5, 255, 1, 2, 8, 255, 2, 0, 0, 255, 4, 24, 143, 255, 39, 74, 159, 255, 30, 22, 0, 255, 22, 11, 8, 255, 23, 29, 58, 255, 7, 6, 18, 255, 4, 1, 0, 255, 1, 3, 3, 255, 1, 0, 1, 255, 0, 0, 0, 255, 1, 0, 0, 255, 4, 0, 1, 255, 3, 1, 3, 255, 3, 1, 2, 255, 1, 0, 1, 255, 1, 0, 0, 255, 4, 1, 1, 255, 5, 1, 1, 255, 5, 3, 0, 255, 6, 3, 0, 255, 10, 4, 1, 255, 13, 4, 1, 255, 11, 2, 1, 255, 10, 1, 0, 255, 12, 5, 0, 255, 13, 8, 0, 255, 12, 9, 1, 255, 13, 8, 4, 255, 13, 9, 1, 255, 21, 11, 2, 255, 22, 6, 0, 255, 14, 10, 1, 255, 21, 13, 4, 255, 26, 16, 6, 255, 33, 23, 14, 255, 40, 28, 11, 255, 50, 39, 30, 255, 51, 44, 45, 255, 56, 53, 61, 255, 50, 50, 57, 255, 47, 47, 42, 255, 55, 51, 43, 255, 51, 49, 37, 255, 51, 48, 34, 255, 53, 52, 24, 255, 56, 55, 15, 255, 46, 42, 10, 255, 46, 44, 10, 255, 51, 49, 11, 255, 56, 53, 7, 255, 63, 59, 2, 255, 66, 62, 1, 255, 69, 66, 4, 255, 68, 67, 5, 255, 65, 69, 5, 255, 61, 65, 5, 255, 80, 75, 26, 255, 147, 156, 84, 255, 170, 186, 75, 255, 183, 194, 64, 255, 160, 162, 21, 255, 106, 111, 7, 255, 100, 92, 8, 255, 86, 86, 6, 255, 102, 94, 8, 255, 116, 91, 13, 255, 89, 73, 3, 255, 90, 73, 2, 255, 89, 66, 1, 255, 93, 67, 6, 255, 98, 71, 1, 255, 96, 65, 10, 255, 97, 66, 10, 255, 94, 68, 1, 255, 89, 64, 1, 255, 86, 64, 3, 255, 89, 64, 3, 255, 96, 64, 3, 255, 97, 60, 5, 255, 100, 65, 5, 255, 101, 62, 2, 255, 104, 61, 2, 255, 106, 62, 3, 255, 109, 64, 7, 255, 110, 60, 4, 255, 109, 58, 1, 255, 113, 64, 1, 255, 108, 61, 7, 255, 108, 54, 6, 255, 108, 54, 8, 255, 106, 56, 0, 255, 109, 60, 9, 255, 105, 51, 9, 255, 119, 64, 7, 255, 128, 58, 5, 255, 102, 56, 9, 255, 140, 69, 8, 255, 110, 49, 6, 255, 84, 56, 3, 255, 131, 71, 5, 255, 139, 62, 3, 255, 119, 64, 3, 255, 120, 65, 3, 255, 121, 63, 3, 255, 123, 69, 4, 255, 120, 62, 3, 255, 136, 68, 11, 255, 131, 62, 3, 255, 131, 56, 5, 255, 147, 66, 16, 255, 107, 38, 2, 255, 95, 34, 8, 255, 119, 61, 9, 255, 154, 78, 8, 255, 183, 102, 7, 255, 186, 100, 7, 255, 200, 115, 11, 255, 200, 112, 9, 255, 205, 122, 16, 255, 211, 126, 30, 255, 214, 127, 21, 255, 204, 129, 16, 255, 211, 132, 28, 255, 214, 128, 10, 255, 209, 123, 10, 255, 202, 116, 10, 255, 200, 115, 5, 255, 198, 110, 9, 255, 198, 112, 15, 255, 191, 107, 15, 255, 190, 104, 11, 255, 182, 101, 15, 255, 178, 98, 8, 255, 189, 99, 15, 255, 182, 90, 15, 255, 179, 98, 17, 255, 171, 92, 6, 255, 141, 69, 10, 255, 123, 65, 8, 255, 125, 66, 5, 255, 125, 61, 6, 255, 126, 65, 10, 255, 123, 63, 3, 255, 126, 65, 7, 255, 129, 63, 7, 255, 132, 67, 5, 255, 126, 64, 6, 255, 132, 70, 9, 255, 138, 72, 4, 255, 128, 61, 7, 255, 127, 65, 5, 255, 138, 73, 13, 255, 146, 75, 13, 255, 142, 67, 6, 255, 143, 72, 10, 255, 150, 76, 17, 255, 151, 74, 6, 255, 146, 72, 12, 255, 140, 67, 6, 255, 156, 83, 7, 255, 167, 88, 10, 255, 171, 88, 7, 255, 157, 93, 11, 255, 167, 103, 14, 255, 179, 105, 11, 255, 190, 110, 20, 255, 194, 124, 15, 255, 194, 125, 14, 255, 199, 122, 9, 255, 202, 122, 8, 255, 203, 127, 12, 255, 197, 127, 22, 255, 202, 128, 22, 255, 200, 119, 12, 255, 193, 110, 17, 255, 193, 121, 15, 255, 197, 127, 5, 255, 204, 130, 4, 255, 202, 123, 13, 255, 184, 103, 18, 255, 184, 112, 9, 255, 202, 134, 14, 255, 207, 140, 7, 255, 205, 134, 16, 255, 206, 136, 7, 255, 205, 133, 10, 255, 204, 134, 13, 255, 208, 138, 2, 255, 204, 120, 8, 255, 181, 93, 3, 255, 201, 126, 8, 255, 205, 133, 12, 255, 206, 131, 13, 255, 206, 135, 7, 255, 212, 136, 10, 255, 206, 131, 7, 255, 208, 134, 14, 255, 210, 139, 14, 255, 209, 137, 11, 255, 211, 138, 16, 255, 211, 140, 11, 255, 204, 134, 14, 255, 203, 137, 10, 255, 213, 147, 6, 255, 211, 147, 3, 255, 212, 145, 4, 255, 215, 145, 7, 255, 212, 141, 10, 255, 205, 132, 7, 255, 209, 135, 21, 255, 212, 141, 8, 255, 216, 146, 6, 255, 212, 143, 7, 255, 207, 134, 12, 255, 214, 148, 10, 255, 216, 156, 4, 255, 217, 159, 2, 255, 220, 161, 0, 255, 218, 153, 5, 255, 216, 150, 9, 255, 219, 158, 2, 255, 225, 164, 1, 255, 227, 164, 6, 255, 224, 163, 3, 255, 225, 162, 6, 255, 218, 153, 4, 255, 213, 147, 3, 255, 209, 141, 6, 255, 208, 142, 9, 255, 213, 149, 8, 255, 216, 154, 5, 255, 222, 161, 3, 255, 224, 165, 0, 255, 226, 163, 2, 255, 218, 148, 3, 255, 216, 149, 2, 255, 217, 154, 3, 255, 202, 136, 0, 255, 203, 132, 7, 255, 205, 138, 2, 255, 205, 140, 5, 255, 198, 131, 4, 255, 193, 127, 11, 255, 207, 145, 10, 255, 220, 163, 2, 255, 220, 164, 2, 255, 219, 163, 2, 255, 220, 163, 3, 255, 225, 167, 4, 255, 224, 167, 0, 255, 226, 168, 0, 255, 224, 165, 2, 255, 221, 160, 4, 255, 221, 160, 1, 255, 223, 164, 1, 255, 222, 163, 4, 255, 227, 167, 11, 255, 224, 164, 4, 255, 225, 165, 4, 255, 216, 160, 0, 255, 214, 158, 1, 255, 209, 149, 1, 255, 193, 122, 9, 255, 173, 95, 1, 255, 164, 91, 0, 255, 166, 92, 6, 255, 159, 87, 2, 255, 165, 94, 2, 255, 177, 106, 0, 255, 165, 93, 3, 255, 165, 90, 6, 255, 170, 94, 10, 255, 157, 76, 2, 255, 172, 93, 4, 255, 192, 128, 2, 255, 178, 116, 4, 255, 182, 116, 15, 255, 184, 124, 13, 255, 187, 128, 14, 255, 182, 118, 10, 255, 183, 116, 4, 255, 184, 121, 3, 255, 182, 121, 10, 255, 180, 113, 7, 255, 198, 128, 15, 255, 191, 125, 5, 255, 180, 115, 4, 255, 195, 134, 4, 255, 203, 146, 1, 255, 195, 135, 8, 255, 198, 129, 5, 255, 196, 128, 3, 255, 196, 126, 1, 255, 199, 123, 16, 255, 199, 120, 15, 255, 202, 123, 4, 255, 205, 126, 3, 255, 207, 129, 3, 255, 205, 128, 13, 255, 206, 129, 22, 255, 208, 132, 18, 255, 206, 132, 10, 255, 205, 131, 8, 255, 205, 127, 12, 255, 206, 126, 16, 255, 203, 123, 14, 255, 202, 121, 13, 255, 194, 110, 5, 255, 190, 105, 2, 255, 185, 97, 4, 255, 179, 89, 1, 255, 180, 91, 1, 255, 176, 88, 0, 255, 171, 85, 1, 255, 170, 87, 4, 255, 161, 81, 4, 255, 154, 72, 3, 255, 155, 67, 6, 255, 148, 61, 5, 255, 142, 57, 3, 255, 143, 57, 7, 255, 138, 52, 6, 255, 132, 51, 4, 255, 129, 47, 2, 255, 126, 43, 0, 255, 126, 46, 2, 255, 122, 47, 1, 255, 124, 47, 2, 255, 121, 47, 5, 255, 121, 47, 3, 255, 126, 50, 2, 255, 123, 46, 0, 255, 121, 47, 4, 255, 117, 46, 5, 255, 119, 47, 6, 255, 122, 44, 5, 255, 123, 46, 3, 255, 125, 44, 3, 255, 123, 47, 8, 255, 117, 41, 2, 255, 120, 47, 3, 255, 124, 50, 2, 255, 132, 45, 0, 255, 126, 43, 2, 255, 107, 45, 2, 255, 107, 39, 1, 255, 109, 37, 2, 255, 120, 39, 5, 255, 113, 37, 5, 255, 110, 40, 5, 255, 103, 35, 0, 255, 105, 36, 2, 255, 111, 38, 3, 255, 116, 41, 4, 255, 113, 39, 1, 255, 112, 37, 1, 255, 110, 44, 0, 255, 117, 50, 3, 255, 129, 48, 8, 255, 134, 54, 5, 255, 159, 73, 2, 255, 173, 78, 5, 255, 168, 74, 7, 255, 163, 72, 4, 255, 163, 73, 3, 255, 163, 74, 4, 255, 160, 71, 4, 255, 157, 68, 1, 255, 157, 69, 0, 255, 158, 69, 0, 255, 4, 17, 63, 255, 0, 38, 72, 255, 2, 31, 79, 255, 2, 30, 75, 255, 4, 33, 76, 255, 3, 24, 72, 255, 0, 32, 72, 255, 5, 30, 69, 255, 4, 14, 43, 255, 5, 18, 37, 255, 3, 23, 52, 255, 0, 21, 58, 255, 6, 26, 50, 255, 1, 22, 45, 255, 2, 22, 47, 255, 0, 18, 32, 255, 1, 17, 40, 255, 3, 16, 40, 255, 3, 16, 35, 255, 2, 11, 33, 255, 3, 11, 26, 255, 0, 7, 12, 255, 3, 8, 12, 255, 2, 4, 12, 255, 2, 1, 14, 255, 4, 0, 13, 255, 3, 1, 8, 255, 0, 0, 7, 255, 1, 0, 0, 255, 0, 9, 94, 255, 14, 78, 210, 255, 37, 39, 28, 255, 10, 7, 0, 255, 24, 25, 55, 255, 10, 18, 33, 255, 4, 0, 4, 255, 3, 0, 6, 255, 1, 0, 3, 255, 2, 1, 1, 255, 2, 1, 1, 255, 3, 0, 1, 255, 4, 0, 1, 255, 5, 2, 3, 255, 4, 2, 1, 255, 2, 1, 0, 255, 4, 1, 0, 255, 6, 3, 2, 255, 7, 3, 2, 255, 8, 3, 0, 255, 9, 2, 0, 255, 11, 3, 1, 255, 9, 3, 0, 255, 10, 4, 1, 255, 12, 4, 2, 255, 15, 6, 2, 255, 19, 10, 2, 255, 18, 10, 2, 255, 17, 7, 1, 255, 20, 10, 3, 255, 25, 9, 1, 255, 26, 11, 3, 255, 20, 15, 2, 255, 17, 9, 0, 255, 24, 16, 5, 255, 32, 24, 9, 255, 38, 27, 22, 255, 35, 31, 29, 255, 45, 49, 39, 255, 60, 55, 55, 255, 58, 49, 53, 255, 55, 50, 46, 255, 55, 51, 43, 255, 55, 54, 31, 255, 54, 53, 33, 255, 58, 55, 36, 255, 55, 52, 18, 255, 54, 50, 16, 255, 53, 53, 11, 255, 62, 56, 6, 255, 63, 56, 4, 255, 66, 64, 12, 255, 62, 62, 6, 255, 67, 65, 2, 255, 79, 68, 11, 255, 77, 69, 7, 255, 65, 55, 0, 255, 136, 127, 45, 255, 227, 240, 103, 255, 239, 242, 88, 255, 240, 230, 23, 255, 154, 133, 6, 255, 88, 75, 17, 255, 84, 77, 5, 255, 79, 71, 10, 255, 92, 79, 0, 255, 117, 81, 3, 255, 83, 68, 1, 255, 86, 66, 2, 255, 94, 66, 6, 255, 97, 68, 4, 255, 92, 63, 1, 255, 92, 63, 3, 255, 98, 66, 2, 255, 103, 71, 7, 255, 110, 71, 5, 255, 120, 69, 7, 255, 116, 71, 6, 255, 111, 71, 2, 255, 123, 73, 5, 255, 123, 67, 2, 255, 119, 62, 5, 255, 123, 66, 9, 255, 121, 65, 7, 255, 119, 63, 3, 255, 124, 65, 0, 255, 127, 70, 11, 255, 128, 71, 4, 255, 130, 69, 4, 255, 132, 64, 7, 255, 132, 61, 8, 255, 131, 60, 2, 255, 119, 57, 7, 255, 113, 58, 6, 255, 122, 58, 15, 255, 126, 57, 6, 255, 120, 63, 3, 255, 118, 53, 6, 255, 116, 57, 7, 255, 126, 60, 6, 255, 106, 54, 7, 255, 120, 59, 8, 255, 107, 52, 3, 255, 106, 41, 2, 255, 107, 40, 6, 255, 102, 41, 8, 255, 111, 37, 4, 255, 112, 44, 10, 255, 122, 47, 4, 255, 172, 76, 12, 255, 153, 61, 5, 255, 120, 43, 3, 255, 113, 42, 10, 255, 142, 59, 9, 255, 171, 76, 6, 255, 181, 87, 13, 255, 200, 99, 13, 255, 193, 94, 4, 255, 202, 108, 6, 255, 215, 127, 6, 255, 207, 121, 15, 255, 209, 123, 15, 255, 212, 129, 19, 255, 208, 119, 8, 255, 210, 116, 13, 255, 206, 117, 11, 255, 201, 111, 15, 255, 201, 110, 14, 255, 202, 113, 11, 255, 205, 119, 10, 255, 199, 115, 10, 255, 201, 112, 10, 255, 188, 100, 20, 255, 195, 113, 4, 255, 188, 103, 2, 255, 179, 90, 7, 255, 189, 104, 24, 255, 185, 106, 4, 255, 183, 101, 8, 255, 172, 95, 6, 255, 159, 83, 13, 255, 152, 75, 11, 255, 146, 78, 6, 255, 133, 72, 5, 255, 126, 66, 10, 255, 127, 67, 5, 255, 130, 67, 15, 255, 137, 69, 7, 255, 149, 76, 6, 255, 151, 78, 8, 255, 135, 68, 17, 255, 132, 66, 9, 255, 150, 83, 9, 255, 141, 66, 10, 255, 149, 71, 16, 255, 163, 81, 9, 255, 170, 90, 17, 255, 168, 95, 9, 255, 190, 116, 17, 255, 191, 112, 12, 255, 180, 100, 1, 255, 191, 109, 14, 255, 195, 114, 9, 255, 190, 109, 14, 255, 186, 102, 10, 255, 198, 119, 11, 255, 201, 124, 20, 255, 201, 124, 23, 255, 205, 128, 18, 255, 198, 123, 18, 255, 200, 125, 7, 255, 210, 134, 18, 255, 207, 135, 22, 255, 205, 132, 9, 255, 205, 129, 8, 255, 205, 129, 21, 255, 205, 133, 18, 255, 210, 131, 12, 255, 205, 123, 7, 255, 192, 110, 8, 255, 205, 126, 13, 255, 214, 136, 10, 255, 207, 136, 9, 255, 207, 135, 8, 255, 209, 137, 11, 255, 208, 135, 7, 255, 209, 135, 7, 255, 210, 133, 15, 255, 211, 135, 17, 255, 189, 103, 11, 255, 180, 91, 9, 255, 202, 125, 24, 255, 205, 133, 18, 255, 207, 133, 9, 255, 205, 133, 10, 255, 203, 128, 13, 255, 204, 130, 18, 255, 205, 136, 4, 255, 207, 136, 7, 255, 209, 138, 19, 255, 204, 133, 13, 255, 205, 134, 17, 255, 206, 135, 17, 255, 209, 138, 9, 255, 210, 137, 3, 255, 212, 141, 13, 255, 216, 147, 13, 255, 212, 144, 10, 255, 210, 142, 9, 255, 210, 142, 9, 255, 214, 148, 2, 255, 212, 144, 8, 255, 211, 143, 6, 255, 207, 138, 9, 255, 212, 144, 9, 255, 219, 151, 11, 255, 220, 153, 4, 255, 218, 155, 1, 255, 218, 155, 5, 255, 216, 153, 7, 255, 215, 154, 4, 255, 221, 160, 8, 255, 222, 157, 13, 255, 219, 155, 5, 255, 223, 163, 0, 255, 224, 160, 6, 255, 223, 155, 7, 255, 216, 149, 7, 255, 210, 146, 2, 255, 212, 151, 0, 255, 223, 164, 3, 255, 228, 168, 2, 255, 232, 169, 3, 255, 229, 170, 2, 255, 222, 163, 2, 255, 210, 146, 2, 255, 211, 141, 4, 255, 215, 144, 4, 255, 211, 138, 11, 255, 190, 117, 6, 255, 202, 136, 5, 255, 200, 133, 3, 255, 194, 125, 1, 255, 206, 143, 6, 255, 218, 159, 5, 255, 217, 159, 5, 255, 219, 163, 1, 255, 222, 164, 3, 255, 216, 161, 5, 255, 220, 164, 7, 255, 221, 163, 3, 255, 221, 159, 5, 255, 219, 154, 6, 255, 217, 153, 3, 255, 221, 159, 0, 255, 219, 157, 0, 255, 216, 154, 4, 255, 216, 156, 6, 255, 216, 158, 3, 255, 219, 160, 5, 255, 222, 163, 10, 255, 214, 158, 0, 255, 214, 157, 2, 255, 207, 142, 8, 255, 178, 102, 6, 255, 168, 95, 1, 255, 175, 102, 6, 255, 175, 114, 5, 255, 178, 121, 4, 255, 187, 123, 5, 255, 181, 114, 9, 255, 161, 84, 11, 255, 161, 87, 5, 255, 167, 90, 9, 255, 166, 85, 4, 255, 184, 107, 9, 255, 192, 127, 5, 255, 185, 129, 4, 255, 194, 135, 4, 255, 181, 130, 5, 255, 181, 126, 15, 255, 184, 117, 6, 255, 182, 117, 10, 255, 188, 121, 10, 255, 187, 117, 5, 255, 179, 111, 4, 255, 178, 112, 6, 255, 191, 132, 7, 255, 203, 148, 3, 255, 199, 142, 1, 255, 202, 139, 12, 255, 204, 135, 8, 255, 201, 132, 5, 255, 199, 128, 5, 255, 200, 126, 9, 255, 200, 124, 9, 255, 204, 126, 5, 255, 207, 129, 5, 255, 208, 130, 7, 255, 205, 128, 6, 255, 206, 131, 7, 255, 209, 133, 14, 255, 206, 129, 15, 255, 204, 127, 14, 255, 204, 126, 16, 255, 204, 123, 16, 255, 197, 114, 13, 255, 195, 109, 13, 255, 189, 103, 10, 255, 186, 97, 6, 255, 178, 93, 2, 255, 180, 93, 8, 255, 178, 91, 2, 255, 175, 86, 3, 255, 173, 86, 7, 255, 170, 83, 3, 255, 162, 76, 3, 255, 156, 72, 4, 255, 153, 70, 6, 255, 150, 67, 1, 255, 147, 61, 2, 255, 145, 58, 7, 255, 136, 53, 2, 255, 135, 51, 4, 255, 137, 52, 4, 255, 134, 49, 3, 255, 132, 51, 5, 255, 131, 54, 6, 255, 126, 49, 1, 255, 129, 53, 3, 255, 131, 53, 2, 255, 131, 49, 1, 255, 128, 49, 4, 255, 123, 45, 5, 255, 123, 46, 2, 255, 124, 50, 1, 255, 125, 53, 3, 255, 132, 53, 2, 255, 137, 50, 1, 255, 127, 50, 2, 255, 127, 48, 1, 255, 127, 49, 1, 255, 126, 47, 2, 255, 128, 44, 1, 255, 119, 45, 5, 255, 113, 42, 2, 255, 111, 44, 3, 255, 114, 40, 3, 255, 117, 38, 1, 255, 106, 34, 2, 255, 117, 39, 7, 255, 115, 36, 4, 255, 113, 38, 4, 255, 112, 40, 1, 255, 113, 44, 0, 255, 119, 48, 2, 255, 119, 55, 7, 255, 122, 51, 0, 255, 139, 58, 5, 255, 138, 58, 3, 255, 144, 63, 0, 255, 160, 72, 3, 255, 161, 73, 3, 255, 157, 69, 0, 255, 156, 68, 0, 255, 156, 69, 0, 255, 156, 68, 0, 255, 160, 73, 3, 255, 167, 79, 3, 255, 164, 76, 1, 255, 164, 77, 0, 255, 2, 32, 82, 255, 3, 34, 82, 255, 1, 28, 73, 255, 4, 24, 70, 255, 2, 25, 58, 255, 0, 20, 50, 255, 2, 20, 44, 255, 3, 15, 31, 255, 1, 8, 32, 255, 2, 19, 55, 255, 1, 25, 66, 255, 1, 22, 50, 255, 3, 19, 32, 255, 2, 22, 52, 255, 2, 21, 50, 255, 3, 20, 42, 255, 2, 17, 38, 255, 2, 14, 38, 255, 3, 16, 32, 255, 3, 13, 30, 255, 3, 15, 31, 255, 3, 13, 28, 255, 3, 7, 24, 255, 2, 1, 16, 255, 2, 1, 11, 255, 2, 0, 8, 255, 1, 3, 5, 255, 4, 1, 1, 255, 4, 5, 57, 255, 15, 71, 238, 255, 41, 66, 87, 255, 18, 11, 0, 255, 32, 13, 45, 255, 19, 26, 78, 255, 0, 3, 0, 255, 3, 4, 3, 255, 1, 2, 1, 255, 2, 4, 1, 255, 3, 1, 0, 255, 3, 2, 0, 255, 5, 1, 0, 255, 4, 0, 0, 255, 5, 1, 0, 255, 5, 1, 0, 255, 3, 1, 0, 255, 5, 1, 0, 255, 4, 2, 0, 255, 4, 1, 0, 255, 8, 2, 0, 255, 12, 1, 0, 255, 13, 3, 1, 255, 9, 3, 0, 255, 12, 7, 3, 255, 14, 6, 3, 255, 16, 7, 2, 255, 21, 11, 2, 255, 23, 9, 2, 255, 17, 7, 0, 255, 31, 12, 6, 255, 30, 14, 6, 255, 21, 14, 3, 255, 28, 14, 4, 255, 22, 16, 3, 255, 28, 18, 4, 255, 26, 22, 7, 255, 28, 26, 9, 255, 40, 28, 15, 255, 55, 41, 33, 255, 53, 49, 57, 255, 59, 54, 57, 255, 63, 59, 45, 255, 57, 54, 42, 255, 60, 58, 32, 255, 63, 61, 31, 255, 61, 55, 43, 255, 59, 52, 36, 255, 56, 53, 16, 255, 59, 56, 4, 255, 70, 59, 8, 255, 71, 60, 7, 255, 61, 61, 5, 255, 62, 64, 7, 255, 70, 64, 9, 255, 71, 68, 2, 255, 84, 68, 3, 255, 93, 74, 5, 255, 102, 90, 9, 255, 97, 95, 7, 255, 100, 83, 7, 255, 92, 67, 2, 255, 77, 55, 6, 255, 84, 63, 4, 255, 83, 70, 5, 255, 76, 63, 4, 255, 87, 75, 7, 255, 111, 75, 3, 255, 84, 61, 2, 255, 82, 57, 6, 255, 95, 68, 3, 255, 99, 71, 1, 255, 115, 78, 9, 255, 136, 87, 10, 255, 145, 84, 4, 255, 162, 92, 5, 255, 172, 100, 6, 255, 159, 88, 3, 255, 158, 82, 1, 255, 167, 85, 7, 255, 162, 81, 10, 255, 158, 75, 4, 255, 153, 69, 3, 255, 155, 68, 8, 255, 155, 71, 8, 255, 157, 76, 6, 255, 155, 75, 2, 255, 157, 67, 9, 255, 160, 73, 5, 255, 158, 71, 2, 255, 155, 70, 1, 255, 161, 69, 1, 255, 163, 72, 5, 255, 164, 67, 6, 255, 159, 67, 3, 255, 160, 67, 1, 255, 160, 72, 5, 255, 149, 64, 2, 255, 152, 67, 6, 255, 161, 76, 6, 255, 142, 70, 4, 255, 151, 74, 8, 255, 126, 49, 12, 255, 107, 41, 10, 255, 119, 48, 5, 255, 128, 50, 7, 255, 132, 52, 4, 255, 144, 61, 9, 255, 155, 75, 8, 255, 177, 92, 12, 255, 178, 83, 9, 255, 163, 70, 3, 255, 144, 58, 9, 255, 129, 47, 6, 255, 168, 72, 6, 255, 182, 85, 5, 255, 180, 91, 16, 255, 168, 71, 9, 255, 148, 50, 8, 255, 166, 59, 5, 255, 174, 70, 10, 255, 193, 100, 9, 255, 196, 106, 13, 255, 205, 118, 7, 255, 207, 117, 7, 255, 206, 115, 9, 255, 195, 110, 4, 255, 186, 99, 14, 255, 191, 105, 16, 255, 201, 116, 11, 255, 201, 117, 15, 255, 198, 116, 17, 255, 200, 117, 7, 255, 197, 112, 10, 255, 185, 98, 14, 255, 177, 92, 18, 255, 186, 105, 7, 255, 191, 108, 5, 255, 191, 104, 7, 255, 185, 102, 14, 255, 179, 99, 8, 255, 179, 95, 8, 255, 182, 92, 8, 255, 171, 87, 11, 255, 154, 81, 4, 255, 146, 75, 8, 255, 139, 67, 7, 255, 145, 72, 14, 255, 158, 87, 8, 255, 152, 80, 11, 255, 162, 89, 14, 255, 165, 89, 19, 255, 177, 102, 11, 255, 183, 103, 19, 255, 185, 107, 9, 255, 187, 114, 13, 255, 186, 115, 25, 255, 193, 123, 22, 255, 191, 118, 16, 255, 180, 95, 20, 255, 179, 90, 6, 255, 166, 75, 7, 255, 178, 92, 21, 255, 187, 109, 8, 255, 190, 106, 17, 255, 201, 114, 17, 255, 206, 131, 12, 255, 200, 129, 18, 255, 208, 128, 24, 255, 210, 128, 16, 255, 208, 136, 14, 255, 204, 137, 8, 255, 210, 137, 13, 255, 215, 135, 10, 255, 211, 135, 10, 255, 209, 136, 12, 255, 210, 135, 8, 255, 206, 135, 11, 255, 205, 132, 18, 255, 199, 123, 21, 255, 211, 133, 15, 255, 212, 135, 2, 255, 207, 133, 11, 255, 205, 128, 14, 255, 205, 127, 13, 255, 204, 129, 0, 255, 209, 132, 10, 255, 212, 136, 13, 255, 210, 134, 10, 255, 214, 137, 16, 255, 190, 102, 12, 255, 190, 101, 14, 255, 212, 138, 19, 255, 209, 137, 14, 255, 208, 135, 5, 255, 206, 132, 8, 255, 208, 131, 9, 255, 212, 137, 4, 255, 211, 134, 13, 255, 209, 131, 12, 255, 209, 132, 6, 255, 210, 133, 3, 255, 207, 135, 7, 255, 207, 135, 16, 255, 212, 135, 10, 255, 203, 124, 4, 255, 199, 120, 11, 255, 210, 140, 10, 255, 213, 148, 6, 255, 217, 151, 18, 255, 218, 151, 14, 255, 216, 149, 7, 255, 216, 149, 8, 255, 214, 146, 13, 255, 209, 140, 11, 255, 212, 144, 1, 255, 214, 144, 4, 255, 216, 143, 6, 255, 215, 142, 5, 255, 213, 143, 10, 255, 214, 150, 5, 255, 217, 154, 2, 255, 220, 152, 7, 255, 214, 144, 6, 255, 216, 149, 3, 255, 217, 154, 6, 255, 214, 147, 7, 255, 219, 147, 4, 255, 220, 153, 7, 255, 219, 155, 1, 255, 223, 160, 1, 255, 227, 166, 4, 255, 227, 165, 0, 255, 227, 163, 2, 255, 222, 157, 9, 255, 215, 155, 3, 255, 218, 158, 2, 255, 213, 143, 6, 255, 200, 121, 3, 255, 198, 122, 6, 255, 203, 132, 14, 255, 203, 134, 8, 255, 195, 126, 4, 255, 201, 137, 1, 255, 215, 154, 3, 255, 214, 155, 1, 255, 218, 159, 4, 255, 221, 163, 3, 255, 221, 163, 5, 255, 220, 163, 11, 255, 215, 157, 5, 255, 212, 152, 0, 255, 214, 152, 6, 255, 211, 148, 3, 255, 218, 153, 3, 255, 217, 153, 3, 255, 216, 151, 2, 255, 218, 155, 3, 255, 215, 154, 2, 255, 211, 151, 3, 255, 215, 153, 3, 255, 216, 155, 4, 255, 214, 155, 1, 255, 205, 148, 3, 255, 206, 146, 2, 255, 187, 118, 5, 255, 171, 98, 5, 255, 176, 97, 6, 255, 185, 117, 6, 255, 187, 120, 6, 255, 181, 109, 0, 255, 171, 101, 3, 255, 186, 109, 2, 255, 184, 108, 3, 255, 192, 124, 6, 255, 187, 119, 3, 255, 165, 86, 10, 255, 174, 97, 15, 255, 192, 128, 4, 255, 195, 128, 5, 255, 194, 143, 17, 255, 217, 178, 13, 255, 221, 170, 11, 255, 199, 128, 9, 255, 187, 110, 2, 255, 177, 107, 4, 255, 172, 105, 6, 255, 192, 129, 12, 255, 207, 150, 8, 255, 201, 143, 1, 255, 202, 138, 6, 255, 201, 134, 3, 255, 203, 133, 5, 255, 200, 128, 6, 255, 198, 124, 12, 255, 201, 127, 5, 255, 201, 128, 5, 255, 202, 128, 9, 255, 204, 128, 8, 255, 207, 129, 17, 255, 208, 131, 11, 255, 206, 132, 4, 255, 207, 130, 10, 255, 205, 128, 13, 255, 205, 127, 13, 255, 203, 123, 9, 255, 199, 117, 6, 255, 196, 113, 6, 255, 193, 107, 6, 255, 187, 99, 5, 255, 184, 95, 5, 255, 181, 90, 4, 255, 182, 90, 7, 255, 178, 89, 1, 255, 174, 87, 4, 255, 169, 84, 4, 255, 163, 79, 1, 255, 161, 76, 5, 255, 154, 69, 2, 255, 149, 69, 0, 255, 148, 67, 4, 255, 147, 64, 3, 255, 144, 61, 1, 255, 134, 54, 1, 255, 136, 53, 3, 255, 135, 49, 1, 255, 133, 49, 0, 255, 132, 52, 1, 255, 132, 55, 3, 255, 132, 54, 5, 255, 137, 59, 6, 255, 137, 57, 1, 255, 136, 52, 4, 255, 133, 50, 8, 255, 123, 43, 3, 255, 128, 47, 3, 255, 132, 50, 1, 255, 125, 50, 3, 255, 118, 44, 2, 255, 126, 47, 6, 255, 129, 46, 0, 255, 134, 48, 3, 255, 124, 45, 7, 255, 116, 37, 2, 255, 121, 43, 2, 255, 122, 45, 5, 255, 124, 37, 2, 255, 109, 34, 0, 255, 113, 38, 8, 255, 116, 41, 7, 255, 115, 39, 3, 255, 120, 39, 5, 255, 117, 37, 4, 255, 116, 40, 4, 255, 124, 51, 5, 255, 130, 54, 2, 255, 137, 58, 6, 255, 134, 58, 7, 255, 135, 59, 2, 255, 139, 59, 2, 255, 142, 62, 2, 255, 153, 67, 6, 255, 153, 67, 2, 255, 148, 64, 2, 255, 142, 56, 3, 255, 144, 57, 3, 255, 151, 64, 1, 255, 158, 71, 1, 255, 168, 80, 7, 255, 171, 83, 2, 255, 170, 81, 1, 255, 169, 80, 0, 255, 1, 21, 67, 255, 0, 26, 68, 255, 6, 28, 64, 255, 3, 27, 69, 255, 1, 32, 77, 255, 3, 15, 39, 255, 3, 2, 5, 255, 1, 7, 20, 255, 5, 22, 56, 255, 3, 25, 61, 255, 1, 21, 46, 255, 2, 23, 38, 255, 2, 23, 39, 255, 1, 19, 46, 255, 2, 17, 46, 255, 1, 14, 50, 255, 3, 18, 40, 255, 1, 15, 37, 255, 1, 19, 34, 255, 4, 15, 28, 255, 1, 12, 29, 255, 4, 16, 38, 255, 2, 7, 28, 255, 0, 0, 13, 255, 2, 1, 6, 255, 1, 2, 7, 255, 3, 1, 8, 255, 4, 0, 18, 255, 3, 46, 200, 255, 39, 91, 148, 255, 35, 15, 0, 255, 29, 6, 23, 255, 16, 24, 141, 255, 2, 4, 36, 255, 8, 1, 0, 255, 5, 2, 4, 255, 8, 4, 3, 255, 3, 2, 3, 255, 3, 1, 1, 255, 5, 1, 0, 255, 3, 2, 0, 255, 2, 1, 0, 255, 4, 1, 0, 255, 6, 2, 1, 255, 6, 1, 0, 255, 6, 1, 1, 255, 3, 2, 0, 255, 4, 1, 1, 255, 11, 3, 1, 255, 14, 3, 2, 255, 15, 5, 2, 255, 13, 5, 0, 255, 15, 7, 3, 255, 16, 6, 4, 255, 17, 7, 1, 255, 20, 10, 1, 255, 20, 10, 1, 255, 24, 11, 1, 255, 31, 16, 4, 255, 20, 13, 2, 255, 17, 14, 2, 255, 32, 19, 6, 255, 39, 20, 5, 255, 29, 18, 0, 255, 28, 23, 4, 255, 29, 22, 6, 255, 52, 33, 10, 255, 57, 36, 19, 255, 50, 45, 33, 255, 57, 55, 50, 255, 64, 60, 55, 255, 62, 58, 42, 255, 65, 59, 37, 255, 67, 60, 36, 255, 66, 59, 37, 255, 66, 60, 39, 255, 58, 54, 22, 255, 66, 55, 12, 255, 69, 60, 10, 255, 69, 60, 5, 255, 65, 62, 7, 255, 66, 62, 6, 255, 70, 63, 5, 255, 84, 68, 2, 255, 95, 70, 11, 255, 83, 70, 2, 255, 76, 65, 4, 255, 70, 57, 12, 255, 78, 62, 7, 255, 79, 64, 4, 255, 84, 63, 4, 255, 85, 63, 2, 255, 82, 65, 3, 255, 85, 61, 1, 255, 89, 67, 8, 255, 104, 73, 5, 255, 91, 70, 6, 255, 123, 85, 18, 255, 151, 93, 11, 255, 163, 95, 4, 255, 169, 93, 8, 255, 175, 91, 5, 255, 173, 92, 9, 255, 170, 91, 7, 255, 175, 99, 11, 255, 168, 93, 11, 255, 153, 77, 5, 255, 161, 76, 5, 255, 172, 81, 3, 255, 163, 75, 2, 255, 157, 70, 2, 255, 154, 71, 1, 255, 158, 74, 1, 255, 165, 76, 3, 255, 163, 72, 0, 255, 158, 69, 10, 255, 154, 70, 1, 255, 154, 63, 7, 255, 153, 66, 6, 255, 155, 68, 0, 255, 151, 67, 2, 255, 154, 71, 4, 255, 158, 79, 8, 255, 162, 86, 6, 255, 148, 72, 2, 255, 149, 65, 9, 255, 156, 81, 11, 255, 177, 95, 9, 255, 185, 101, 9, 255, 186, 103, 9, 255, 175, 85, 10, 255, 163, 68, 4, 255, 162, 62, 3, 255, 165, 68, 3, 255, 179, 91, 8, 255, 178, 87, 6, 255, 179, 83, 11, 255, 181, 90, 8, 255, 169, 76, 4, 255, 167, 74, 4, 255, 151, 66, 6, 255, 177, 95, 17, 255, 188, 98, 10, 255, 187, 93, 6, 255, 194, 98, 11, 255, 154, 65, 10, 255, 151, 69, 10, 255, 148, 60, 8, 255, 153, 68, 20, 255, 186, 96, 13, 255, 184, 85, 3, 255, 156, 66, 10, 255, 173, 87, 18, 255, 197, 104, 9, 255, 185, 93, 9, 255, 177, 86, 13, 255, 196, 114, 7, 255, 198, 114, 5, 255, 200, 114, 10, 255, 201, 114, 16, 255, 201, 117, 11, 255, 195, 104, 12, 255, 196, 98, 26, 255, 184, 91, 8, 255, 181, 94, 14, 255, 191, 111, 16, 255, 185, 104, 14, 255, 187, 109, 3, 255, 192, 111, 3, 255, 179, 95, 5, 255, 173, 95, 7, 255, 178, 96, 21, 255, 186, 103, 7, 255, 180, 101, 7, 255, 182, 100, 11, 255, 183, 104, 15, 255, 186, 111, 14, 255, 187, 109, 18, 255, 187, 112, 8, 255, 193, 110, 18, 255, 196, 115, 18, 255, 194, 119, 13, 255, 196, 119, 15, 255, 198, 118, 18, 255, 200, 123, 23, 255, 203, 126, 26, 255, 189, 107, 8, 255, 173, 86, 16, 255, 179, 94, 7, 255, 193, 110, 21, 255, 201, 123, 19, 255, 203, 129, 16, 255, 209, 132, 14, 255, 210, 129, 16, 255, 211, 128, 27, 255, 210, 130, 23, 255, 211, 135, 16, 255, 212, 134, 12, 255, 210, 133, 18, 255, 215, 139, 12, 255, 214, 134, 16, 255, 196, 114, 11, 255, 212, 131, 18, 255, 218, 139, 17, 255, 213, 134, 4, 255, 212, 133, 11, 255, 207, 129, 14, 255, 208, 131, 13, 255, 208, 130, 9, 255, 208, 126, 7, 255, 211, 126, 8, 255, 209, 123, 6, 255, 210, 124, 7, 255, 212, 127, 4, 255, 214, 131, 6, 255, 216, 133, 12, 255, 214, 131, 12, 255, 212, 130, 11, 255, 205, 120, 9, 255, 200, 113, 5, 255, 205, 131, 1, 255, 211, 138, 5, 255, 212, 134, 8, 255, 210, 133, 8, 255, 213, 139, 12, 255, 214, 141, 7, 255, 213, 140, 5, 255, 212, 136, 17, 255, 212, 135, 11, 255, 210, 130, 15, 255, 199, 123, 11, 255, 206, 128, 8, 255, 210, 135, 6, 255, 215, 144, 21, 255, 222, 150, 22, 255, 219, 148, 6, 255, 214, 149, 9, 255, 214, 144, 17, 255, 219, 151, 12, 255, 218, 149, 9, 255, 214, 144, 6, 255, 215, 143, 13, 255, 215, 146, 6, 255, 215, 142, 6, 255, 212, 137, 8, 255, 210, 136, 15, 255, 210, 140, 4, 255, 213, 144, 9, 255, 213, 146, 2, 255, 210, 142, 3, 255, 209, 138, 1, 255, 211, 137, 3, 255, 210, 141, 4, 255, 214, 148, 9, 255, 213, 147, 6, 255, 210, 133, 6, 255, 205, 135, 8, 255, 216, 148, 5, 255, 221, 155, 6, 255, 220, 153, 6, 255, 217, 150, 5, 255, 213, 146, 9, 255, 207, 141, 6, 255, 215, 149, 5, 255, 220, 154, 3, 255, 214, 145, 8, 255, 194, 123, 7, 255, 196, 127, 10, 255, 198, 129, 6, 255, 192, 121, 1, 255, 204, 136, 9, 255, 212, 150, 7, 255, 212, 151, 4, 255, 216, 156, 2, 255, 219, 159, 0, 255, 217, 157, 7, 255, 217, 158, 8, 255, 221, 162, 8, 255, 219, 160, 5, 255, 216, 158, 4, 255, 219, 161, 9, 255, 217, 157, 10, 255, 219, 156, 11, 255, 218, 153, 4, 255, 216, 149, 5, 255, 217, 152, 4, 255, 222, 162, 3, 255, 217, 160, 2, 255, 217, 158, 2, 255, 215, 151, 1, 255, 217, 155, 5, 255, 207, 150, 7, 255, 201, 143, 7, 255, 199, 138, 2, 255, 175, 101, 7, 255, 170, 85, 2, 255, 167, 100, 2, 255, 169, 105, 8, 255, 175, 102, 2, 255, 168, 96, 5, 255, 185, 101, 9, 255, 171, 93, 6, 255, 190, 114, 4, 255, 189, 115, 3, 255, 181, 107, 2, 255, 165, 85, 14, 255, 171, 92, 8, 255, 202, 149, 4, 255, 228, 185, 7, 255, 232, 163, 13, 255, 207, 128, 4, 255, 192, 123, 6, 255, 191, 121, 5, 255, 195, 129, 4, 255, 197, 135, 4, 255, 206, 147, 9, 255, 205, 146, 2, 255, 200, 137, 0, 255, 201, 130, 4, 255, 201, 125, 5, 255, 201, 123, 6, 255, 202, 125, 1, 255, 202, 126, 1, 255, 205, 129, 12, 255, 206, 131, 13, 255, 206, 132, 5, 255, 205, 134, 1, 255, 207, 133, 7, 255, 208, 134, 8, 255, 208, 131, 10, 255, 207, 126, 12, 255, 205, 126, 6, 255, 203, 123, 7, 255, 199, 120, 5, 255, 193, 112, 6, 255, 192, 106, 5, 255, 190, 104, 3, 255, 186, 100, 4, 255, 184, 97, 9, 255, 181, 92, 10, 255, 179, 90, 4, 255, 180, 90, 7, 255, 176, 86, 3, 255, 168, 80, 0, 255, 166, 77, 2, 255, 163, 75, 1, 255, 159, 73, 1, 255, 155, 70, 1, 255, 150, 66, 5, 255, 145, 63, 4, 255, 140, 60, 3, 255, 136, 54, 6, 255, 132, 53, 0, 255, 137, 54, 1, 255, 136, 56, 3, 255, 134, 55, 3, 255, 135, 55, 4, 255, 137, 55, 4, 255, 132, 55, 3, 255, 133, 57, 2, 255, 140, 58, 5, 255, 131, 49, 1, 255, 127, 48, 3, 255, 131, 50, 5, 255, 125, 42, 1, 255, 121, 43, 5, 255, 119, 42, 1, 255, 119, 45, 3, 255, 120, 39, 3, 255, 119, 38, 3, 255, 123, 41, 6, 255, 134, 47, 5, 255, 124, 42, 3, 255, 118, 38, 0, 255, 109, 34, 4, 255, 109, 33, 2, 255, 124, 44, 2, 255, 123, 51, 2, 255, 118, 49, 2, 255, 119, 42, 1, 255, 114, 37, 0, 255, 118, 45, 3, 255, 135, 57, 8, 255, 145, 62, 3, 255, 138, 62, 0, 255, 142, 56, 1, 255, 152, 63, 4, 255, 148, 62, 6, 255, 153, 68, 5, 255, 154, 68, 3, 255, 139, 55, 2, 255, 135, 53, 1, 255, 144, 61, 1, 255, 152, 67, 4, 255, 162, 74, 9, 255, 166, 77, 5, 255, 171, 79, 4, 255, 170, 81, 1, 255, 171, 81, 2, 255, 167, 77, 2, 255, 6, 19, 56, 255, 1, 22, 50, 255, 3, 22, 60, 255, 1, 26, 69, 255, 1, 26, 57, 255, 2, 6, 18, 255, 2, 0, 0, 255, 2, 4, 21, 255, 2, 14, 39, 255, 1, 22, 42, 255, 3, 22, 49, 255, 1, 16, 49, 255, 3, 22, 44, 255, 2, 18, 57, 255, 0, 18, 54, 255, 1, 20, 48, 255, 2, 21, 41, 255, 2, 18, 48, 255, 0, 18, 43, 255, 3, 13, 35, 255, 2, 13, 31, 255, 2, 17, 25, 255, 4, 5, 14, 255, 3, 0, 14, 255, 1, 0, 7, 255, 1, 1, 13, 255, 6, 0, 0, 255, 1, 14, 138, 255, 27, 82, 189, 255, 39, 30, 17, 255, 9, 8, 0, 255, 14, 21, 159, 255, 5, 17, 106, 255, 7, 1, 0, 255, 11, 5, 3, 255, 1, 4, 1, 255, 3, 1, 3, 255, 2, 3, 2, 255, 4, 0, 0, 255, 6, 0, 0, 255, 4, 1, 0, 255, 3, 2, 0, 255, 6, 3, 2, 255, 7, 5, 3, 255, 7, 2, 1, 255, 9, 2, 1, 255, 7, 2, 0, 255, 8, 3, 1, 255, 11, 3, 2, 255, 15, 4, 3, 255, 14, 5, 1, 255, 17, 8, 1, 255, 22, 9, 3, 255, 21, 7, 2, 255, 17, 8, 1, 255, 19, 9, 2, 255, 19, 9, 0, 255, 22, 10, 0, 255, 24, 13, 1, 255, 26, 16, 4, 255, 26, 18, 4, 255, 28, 16, 2, 255, 40, 16, 2, 255, 31, 17, 1, 255, 35, 17, 4, 255, 41, 23, 11, 255, 51, 32, 10, 255, 52, 37, 12, 255, 59, 47, 28, 255, 68, 56, 37, 255, 64, 58, 53, 255, 60, 59, 51, 255, 64, 60, 51, 255, 68, 61, 43, 255, 67, 63, 26, 255, 65, 60, 34, 255, 65, 60, 28, 255, 67, 54, 13, 255, 74, 57, 10, 255, 70, 63, 3, 255, 70, 62, 11, 255, 65, 63, 9, 255, 77, 69, 1, 255, 93, 70, 5, 255, 80, 66, 2, 255, 81, 73, 5, 255, 81, 70, 2, 255, 79, 65, 7, 255, 82, 64, 3, 255, 77, 67, 5, 255, 79, 61, 2, 255, 87, 62, 4, 255, 71, 59, 7, 255, 79, 63, 9, 255, 113, 79, 11, 255, 151, 98, 11, 255, 168, 104, 4, 255, 179, 105, 13, 255, 177, 92, 7, 255, 173, 85, 1, 255, 172, 83, 2, 255, 179, 89, 4, 255, 174, 85, 4, 255, 159, 82, 3, 255, 174, 103, 10, 255, 188, 111, 16, 255, 178, 100, 16, 255, 160, 82, 16, 255, 136, 58, 5, 255, 149, 70, 3, 255, 150, 73, 9, 255, 148, 64, 7, 255, 159, 65, 1, 255, 158, 72, 7, 255, 149, 67, 7, 255, 151, 72, 1, 255, 153, 76, 7, 255, 147, 64, 6, 255, 129, 53, 6, 255, 141, 64, 5, 255, 170, 88, 12, 255, 185, 104, 21, 255, 183, 103, 19, 255, 162, 72, 8, 255, 156, 65, 2, 255, 171, 76, 10, 255, 178, 87, 9, 255, 191, 98, 6, 255, 193, 96, 6, 255, 194, 101, 8, 255, 190, 103, 14, 255, 182, 86, 9, 255, 179, 81, 9, 255, 166, 77, 5, 255, 173, 88, 7, 255, 166, 86, 6, 255, 157, 79, 8, 255, 152, 74, 0, 255, 134, 57, 14, 255, 141, 69, 17, 255, 148, 74, 5, 255, 148, 71, 6, 255, 134, 62, 10, 255, 137, 68, 7, 255, 134, 61, 10, 255, 126, 56, 5, 255, 143, 76, 7, 255, 140, 70, 7, 255, 131, 61, 16, 255, 141, 65, 11, 255, 154, 77, 20, 255, 130, 59, 5, 255, 148, 70, 7, 255, 173, 82, 11, 255, 175, 87, 6, 255, 178, 94, 8, 255, 189, 104, 11, 255, 195, 109, 15, 255, 196, 108, 19, 255, 197, 113, 14, 255, 203, 116, 17, 255, 201, 115, 11, 255, 186, 98, 14, 255, 184, 96, 9, 255, 195, 109, 12, 255, 199, 117, 10, 255, 191, 110, 7, 255, 185, 102, 10, 255, 174, 92, 13, 255, 166, 87, 25, 255, 183, 105, 24, 255, 190, 112, 10, 255, 190, 112, 8, 255, 178, 94, 16, 255, 173, 92, 9, 255, 183, 102, 13, 255, 190, 108, 19, 255, 199, 115, 21, 255, 191, 104, 5, 255, 167, 86, 11, 255, 187, 106, 21, 255, 207, 125, 24, 255, 207, 126, 13, 255, 206, 127, 16, 255, 205, 130, 12, 255, 212, 135, 23, 255, 204, 124, 25, 255, 206, 126, 22, 255, 217, 141, 18, 255, 216, 135, 24, 255, 213, 135, 10, 255, 216, 134, 22, 255, 215, 133, 30, 255, 212, 130, 23, 255, 214, 131, 7, 255, 217, 134, 6, 255, 214, 137, 20, 255, 215, 140, 21, 255, 213, 137, 18, 255, 216, 139, 10, 255, 205, 122, 11, 255, 185, 101, 10, 255, 209, 130, 20, 255, 215, 138, 16, 255, 216, 136, 9, 255, 215, 135, 8, 255, 219, 137, 17, 255, 217, 136, 19, 255, 210, 132, 14, 255, 208, 128, 11, 255, 213, 128, 11, 255, 202, 111, 17, 255, 200, 110, 4, 255, 203, 114, 9, 255, 202, 117, 10, 255, 194, 111, 7, 255, 201, 121, 7, 255, 208, 128, 11, 255, 214, 130, 14, 255, 209, 123, 14, 255, 206, 124, 14, 255, 213, 136, 10, 255, 213, 132, 9, 255, 215, 132, 7, 255, 208, 126, 14, 255, 191, 106, 8, 255, 201, 117, 8, 255, 204, 120, 11, 255, 204, 119, 8, 255, 202, 120, 1, 255, 211, 130, 14, 255, 211, 134, 17, 255, 216, 142, 8, 255, 223, 145, 8, 255, 222, 150, 6, 255, 219, 151, 3, 255, 222, 149, 11, 255, 218, 146, 18, 255, 216, 145, 11, 255, 219, 147, 5, 255, 219, 148, 10, 255, 217, 145, 21, 255, 214, 143, 9, 255, 215, 140, 3, 255, 209, 135, 9, 255, 210, 136, 17, 255, 209, 138, 9, 255, 208, 137, 11, 255, 209, 138, 3, 255, 212, 140, 8, 255, 208, 135, 10, 255, 211, 139, 8, 255, 213, 143, 8, 255, 209, 142, 5, 255, 210, 142, 0, 255, 213, 140, 5, 255, 208, 140, 6, 255, 214, 149, 0, 255, 217, 147, 4, 255, 213, 143, 4, 255, 211, 146, 1, 255, 205, 137, 8, 255, 214, 146, 20, 255, 211, 140, 7, 255, 216, 137, 6, 255, 194, 113, 11, 255, 176, 102, 8, 255, 180, 113, 1, 255, 186, 119, 1, 255, 200, 130, 8, 255, 214, 148, 7, 255, 209, 146, 3, 255, 213, 153, 3, 255, 217, 159, 2, 255, 217, 157, 2, 255, 215, 155, 6, 255, 219, 160, 4, 255, 221, 163, 2, 255, 223, 162, 5, 255, 221, 160, 5, 255, 219, 158, 4, 255, 218, 154, 8, 255, 219, 150, 10, 255, 220, 151, 7, 255, 217, 150, 4, 255, 218, 151, 1, 255, 220, 155, 9, 255, 213, 150, 6, 255, 202, 128, 5, 255, 189, 111, 4, 255, 192, 117, 0, 255, 207, 139, 9, 255, 199, 134, 2, 255, 206, 143, 2, 255, 203, 138, 10, 255, 177, 104, 4, 255, 176, 110, 8, 255, 168, 103, 8, 255, 169, 101, 9, 255, 165, 99, 1, 255, 160, 81, 8, 255, 161, 80, 5, 255, 174, 90, 5, 255, 181, 98, 7, 255, 177, 95, 8, 255, 164, 91, 8, 255, 168, 93, 8, 255, 204, 135, 2, 255, 219, 154, 10, 255, 195, 120, 19, 255, 185, 109, 11, 255, 178, 107, 6, 255, 193, 119, 5, 255, 202, 131, 4, 255, 208, 146, 7, 255, 204, 145, 3, 255, 199, 139, 2, 255, 200, 135, 6, 255, 200, 129, 5, 255, 198, 121, 1, 255, 200, 122, 9, 255, 202, 126, 9, 255, 204, 128, 5, 255, 206, 129, 13, 255, 209, 133, 14, 255, 207, 135, 8, 255, 206, 131, 12, 255, 204, 128, 8, 255, 206, 131, 9, 255, 207, 129, 14, 255, 206, 126, 8, 255, 204, 126, 1, 255, 200, 120, 13, 255, 195, 112, 11, 255, 194, 110, 8, 255, 193, 106, 9, 255, 187, 100, 4, 255, 187, 100, 3, 255, 185, 98, 4, 255, 180, 92, 12, 255, 181, 95, 12, 255, 181, 92, 15, 255, 174, 80, 4, 255, 168, 78, 1, 255, 167, 74, 4, 255, 163, 69, 0, 255, 155, 67, 3, 255, 148, 67, 10, 255, 139, 61, 1, 255, 137, 56, 0, 255, 138, 54, 4, 255, 137, 57, 3, 255, 135, 58, 0, 255, 141, 60, 4, 255, 147, 63, 5, 255, 141, 58, 4, 255, 135, 53, 4, 255, 135, 53, 5, 255, 132, 52, 5, 255, 136, 56, 5, 255, 141, 58, 1, 255, 128, 49, 1, 255, 119, 43, 3, 255, 122, 40, 3, 255, 126, 44, 3, 255, 125, 50, 1, 255, 136, 52, 1, 255, 134, 51, 4, 255, 122, 47, 5, 255, 117, 46, 3, 255, 124, 45, 0, 255, 140, 54, 2, 255, 125, 41, 2, 255, 117, 36, 4, 255, 111, 42, 7, 255, 116, 40, 6, 255, 121, 39, 2, 255, 120, 42, 2, 255, 120, 47, 1, 255, 120, 48, 2, 255, 112, 44, 5, 255, 114, 48, 5, 255, 135, 61, 7, 255, 145, 61, 2, 255, 146, 66, 5, 255, 154, 69, 3, 255, 155, 67, 0, 255, 156, 69, 4, 255, 156, 69, 3, 255, 159, 63, 2, 255, 152, 63, 5, 255, 156, 73, 7, 255, 172, 86, 4, 255, 175, 86, 0, 255, 175, 84, 3, 255, 168, 78, 3, 255, 169, 79, 2, 255, 174, 81, 1, 255, 171, 78, 3, 255, 166, 72, 2, 255, 2, 14, 41, 255, 1, 24, 49, 255, 0, 29, 72, 255, 4, 21, 60, 255, 5, 16, 37, 255, 3, 13, 42, 255, 4, 6, 18, 255, 1, 0, 0, 255, 1, 6, 13, 255, 3, 15, 32, 255, 1, 17, 43, 255, 2, 19, 49, 255, 1, 16, 39, 255, 1, 19, 47, 255, 4, 26, 58, 255, 2, 26, 46, 255, 1, 20, 35, 255, 1, 16, 36, 255, 0, 14, 39, 255, 1, 13, 32, 255, 3, 14, 35, 255, 5, 9, 27, 255, 3, 0, 12, 255, 3, 1, 13, 255, 3, 1, 11, 255, 1, 0, 0, 255, 0, 8, 61, 255, 28, 62, 183, 255, 39, 45, 32, 255, 21, 3, 0, 255, 23, 22, 121, 255, 6, 21, 164, 255, 9, 0, 8, 255, 6, 1, 6, 255, 4, 3, 0, 255, 2, 1, 0, 255, 2, 0, 1, 255, 4, 2, 2, 255, 6, 1, 1, 255, 6, 1, 0, 255, 3, 0, 0, 255, 3, 2, 2, 255, 8, 6, 5, 255, 7, 4, 2, 255, 5, 1, 0, 255, 11, 2, 0, 255, 12, 3, 1, 255, 11, 2, 0, 255, 12, 3, 1, 255, 14, 4, 2, 255, 15, 4, 3, 255, 17, 8, 1, 255, 28, 10, 2, 255, 26, 8, 1, 255, 19, 9, 3, 255, 20, 10, 4, 255, 23, 12, 2, 255, 26, 16, 4, 255, 26, 15, 3, 255, 31, 16, 5, 255, 36, 17, 5, 255, 35, 15, 2, 255, 33, 17, 2, 255, 38, 20, 7, 255, 28, 17, 1, 255, 34, 23, 3, 255, 46, 32, 12, 255, 54, 33, 7, 255, 61, 42, 12, 255, 60, 50, 36, 255, 66, 59, 43, 255, 73, 65, 51, 255, 70, 66, 49, 255, 68, 65, 42, 255, 69, 63, 41, 255, 69, 60, 54, 255, 65, 62, 31, 255, 69, 60, 9, 255, 75, 61, 9, 255, 70, 62, 8, 255, 68, 65, 5, 255, 79, 70, 4, 255, 94, 69, 5, 255, 83, 66, 6, 255, 83, 66, 1, 255, 89, 65, 5, 255, 83, 65, 8, 255, 78, 65, 6, 255, 80, 60, 2, 255, 81, 60, 2, 255, 94, 71, 6, 255, 105, 77, 4, 255, 111, 78, 8, 255, 154, 98, 16, 255, 178, 99, 14, 255, 173, 95, 7, 255, 179, 93, 6, 255, 173, 85, 9, 255, 172, 82, 16, 255, 174, 84, 10, 255, 177, 87, 13, 255, 176, 89, 9, 255, 176, 89, 1, 255, 163, 80, 3, 255, 157, 84, 4, 255, 179, 104, 4, 255, 195, 115, 11, 255, 189, 114, 20, 255, 175, 107, 20, 255, 162, 102, 16, 255, 152, 94, 16, 255, 147, 80, 4, 255, 152, 68, 5, 255, 144, 71, 10, 255, 145, 76, 7, 255, 164, 88, 5, 255, 177, 102, 15, 255, 180, 100, 15, 255, 164, 80, 8, 255, 178, 95, 17, 255, 200, 113, 16, 255, 195, 103, 5, 255, 187, 89, 9, 255, 179, 79, 7, 255, 188, 99, 5, 255, 195, 102, 4, 255, 190, 105, 10, 255, 190, 101, 11, 255, 186, 99, 3, 255, 179, 95, 3, 255, 163, 82, 2, 255, 149, 72, 9, 255, 141, 71, 3, 255, 118, 45, 5, 255, 112, 36, 11, 255, 108, 40, 8, 255, 123, 62, 9, 255, 128, 62, 3, 255, 126, 58, 10, 255, 118, 53, 7, 255, 122, 52, 8, 255, 115, 47, 7, 255, 107, 44, 6, 255, 111, 48, 10, 255, 120, 51, 9, 255, 129, 59, 6, 255, 120, 52, 14, 255, 118, 54, 8, 255, 125, 63, 7, 255, 116, 54, 4, 255, 110, 44, 10, 255, 123, 53, 7, 255, 124, 56, 6, 255, 113, 47, 12, 255, 131, 65, 5, 255, 161, 87, 3, 255, 171, 89, 12, 255, 189, 108, 15, 255, 191, 112, 11, 255, 191, 110, 15, 255, 197, 112, 7, 255, 194, 113, 7, 255, 194, 114, 20, 255, 195, 117, 7, 255, 203, 123, 16, 255, 198, 115, 12, 255, 188, 108, 17, 255, 181, 104, 25, 255, 187, 111, 16, 255, 189, 113, 9, 255, 178, 98, 15, 255, 176, 96, 18, 255, 195, 119, 14, 255, 195, 119, 10, 255, 189, 110, 12, 255, 191, 115, 3, 255, 198, 124, 14, 255, 204, 128, 23, 255, 199, 119, 15, 255, 178, 99, 15, 255, 201, 122, 13, 255, 210, 127, 13, 255, 212, 129, 21, 255, 214, 134, 32, 255, 213, 134, 17, 255, 212, 130, 22, 255, 211, 130, 13, 255, 216, 137, 10, 255, 213, 130, 24, 255, 212, 130, 15, 255, 214, 134, 14, 255, 213, 134, 9, 255, 213, 131, 23, 255, 216, 135, 22, 255, 213, 131, 20, 255, 215, 135, 9, 255, 215, 137, 18, 255, 206, 129, 16, 255, 201, 128, 14, 255, 207, 133, 18, 255, 197, 115, 12, 255, 196, 111, 10, 255, 218, 138, 25, 255, 217, 136, 23, 255, 216, 135, 13, 255, 214, 139, 10, 255, 214, 139, 13, 255, 215, 139, 14, 255, 217, 139, 13, 255, 217, 139, 12, 255, 218, 139, 12, 255, 218, 141, 19, 255, 214, 131, 11, 255, 194, 100, 11, 255, 190, 96, 10, 255, 209, 125, 13, 255, 206, 126, 6, 255, 211, 133, 10, 255, 215, 140, 4, 255, 220, 141, 11, 255, 218, 139, 10, 255, 214, 140, 13, 255, 214, 139, 10, 255, 216, 136, 3, 255, 210, 133, 16, 255, 197, 117, 11, 255, 199, 119, 10, 255, 201, 121, 14, 255, 200, 124, 14, 255, 212, 140, 18, 255, 217, 145, 15, 255, 215, 141, 18, 255, 219, 142, 12, 255, 218, 135, 7, 255, 220, 140, 0, 255, 220, 143, 9, 255, 216, 143, 6, 255, 220, 148, 7, 255, 216, 144, 8, 255, 218, 146, 15, 255, 221, 149, 15, 255, 219, 146, 7, 255, 217, 144, 6, 255, 218, 140, 3, 255, 215, 136, 1, 255, 211, 132, 3, 255, 209, 131, 7, 255, 214, 136, 10, 255, 212, 134, 6, 255, 211, 135, 5, 255, 210, 138, 5, 255, 213, 141, 6, 255, 213, 142, 6, 255, 211, 141, 2, 255, 213, 141, 0, 255, 211, 138, 0, 255, 209, 138, 5, 255, 209, 140, 4, 255, 212, 138, 2, 255, 195, 115, 13, 255, 192, 122, 5, 255, 205, 137, 4, 255, 209, 140, 7, 255, 201, 127, 9, 255, 198, 120, 7, 255, 171, 93, 1, 255, 167, 89, 13, 255, 186, 111, 10, 255, 191, 116, 4, 255, 207, 140, 6, 255, 215, 150, 3, 255, 213, 149, 5, 255, 213, 152, 4, 255, 215, 157, 1, 255, 215, 158, 7, 255, 219, 159, 9, 255, 219, 156, 4, 255, 210, 145, 0, 255, 211, 146, 1, 255, 210, 147, 0, 255, 214, 148, 1, 255, 210, 143, 2, 255, 215, 151, 4, 255, 220, 154, 6, 255, 217, 148, 1, 255, 210, 135, 13, 255, 199, 122, 13, 255, 192, 111, 4, 255, 194, 106, 4, 255, 187, 99, 9, 255, 181, 95, 5, 255, 182, 100, 4, 255, 183, 105, 2, 255, 177, 100, 6, 255, 192, 121, 4, 255, 189, 120, 0, 255, 181, 112, 4, 255, 171, 107, 3, 255, 163, 102, 9, 255, 165, 98, 17, 255, 169, 101, 12, 255, 165, 96, 0, 255, 165, 87, 6, 255, 171, 94, 3, 255, 168, 82, 15, 255, 171, 93, 13, 255, 187, 112, 0, 255, 169, 97, 1, 255, 191, 123, 19, 255, 202, 133, 12, 255, 197, 127, 8, 255, 198, 128, 4, 255, 199, 131, 1, 255, 199, 131, 11, 255, 204, 137, 8, 255, 202, 140, 0, 255, 198, 135, 2, 255, 200, 132, 8, 255, 200, 128, 4, 255, 199, 125, 3, 255, 198, 127, 4, 255, 201, 127, 8, 255, 203, 127, 9, 255, 205, 129, 5, 255, 209, 135, 7, 255, 206, 133, 10, 255, 206, 129, 11, 255, 204, 128, 4, 255, 206, 128, 15, 255, 206, 127, 16, 255, 205, 124, 12, 255, 203, 123, 9, 255, 199, 119, 15, 255, 194, 110, 13, 255, 194, 110, 4, 255, 195, 110, 7, 255, 188, 102, 5, 255, 190, 104, 4, 255, 187, 100, 1, 255, 179, 94, 5, 255, 182, 95, 14, 255, 168, 79, 15, 255, 161, 73, 9, 255, 165, 78, 1, 255, 162, 76, 1, 255, 158, 70, 4, 255, 151, 63, 7, 255, 147, 68, 8, 255, 137, 61, 2, 255, 133, 52, 3, 255, 148, 62, 11, 255, 150, 67, 2, 255, 145, 62, 4, 255, 146, 63, 3, 255, 147, 64, 1, 255, 138, 55, 0, 255, 136, 55, 4, 255, 139, 57, 5, 255, 133, 59, 3, 255, 130, 55, 4, 255, 133, 47, 7, 255, 120, 42, 3, 255, 113, 42, 2, 255, 123, 44, 3, 255, 132, 47, 6, 255, 142, 60, 4, 255, 140, 58, 2, 255, 137, 47, 3, 255, 133, 51, 4, 255, 136, 58, 5, 255, 120, 48, 3, 255, 116, 40, 1, 255, 119, 40, 3, 255, 126, 49, 7, 255, 130, 52, 4, 255, 122, 43, 1, 255, 116, 40, 2, 255, 123, 47, 4, 255, 129, 48, 0, 255, 124, 45, 1, 255, 117, 43, 5, 255, 120, 49, 2, 255, 142, 66, 2, 255, 154, 67, 3, 255, 150, 66, 5, 255, 154, 69, 1, 255, 156, 66, 0, 255, 161, 71, 7, 255, 163, 73, 5, 255, 166, 73, 3, 255, 175, 85, 2, 255, 181, 92, 7, 255, 175, 81, 4, 255, 174, 79, 0, 255, 176, 81, 6, 255, 171, 78, 6, 255, 173, 82, 3, 255, 175, 83, 0, 255, 171, 78, 1, 255, 169, 76, 2, 255, 0, 22, 53, 255, 1, 24, 55, 255, 4, 29, 63, 255, 3, 29, 65, 255, 1, 21, 55, 255, 1, 22, 61, 255, 5, 21, 59, 255, 4, 12, 37, 255, 2, 2, 7, 255, 4, 6, 23, 255, 3, 15, 40, 255, 0, 20, 36, 255, 2, 23, 35, 255, 3, 21, 41, 255, 1, 21, 46, 255, 1, 21, 37, 255, 3, 21, 33, 255, 3, 18, 34, 255, 1, 15, 31, 255, 3, 13, 28, 255, 5, 3, 24, 255, 1, 0, 13, 255, 4, 4, 11, 255, 2, 1, 12, 255, 1, 3, 9, 255, 0, 0, 24, 255, 27, 40, 142, 255, 67, 63, 56, 255, 33, 11, 0, 255, 16, 18, 55, 255, 11, 21, 164, 255, 1, 7, 33, 255, 6, 1, 2, 255, 6, 2, 2, 255, 7, 4, 0, 255, 4, 2, 0, 255, 5, 2, 1, 255, 6, 2, 1, 255, 4, 1, 0, 255, 4, 3, 1, 255, 3, 2, 0, 255, 5, 3, 2, 255, 9, 5, 2, 255, 10, 2, 0, 255, 12, 2, 1, 255, 11, 3, 1, 255, 14, 6, 4, 255, 13, 5, 3, 255, 15, 5, 3, 255, 14, 4, 2, 255, 15, 5, 3, 255, 15, 4, 1, 255, 29, 11, 5, 255, 27, 11, 3, 255, 19, 9, 1, 255, 24, 12, 5, 255, 27, 13, 4, 255, 28, 15, 1, 255, 25, 13, 1, 255, 27, 13, 1, 255, 37, 14, 6, 255, 38, 17, 5, 255, 35, 19, 2, 255, 41, 24, 4, 255, 40, 20, 3, 255, 46, 21, 3, 255, 51, 31, 7, 255, 58, 33, 10, 255, 58, 39, 18, 255, 61, 44, 28, 255, 64, 55, 32, 255, 74, 65, 44, 255, 73, 64, 47, 255, 70, 67, 41, 255, 74, 65, 44, 255, 73, 63, 44, 255, 71, 61, 45, 255, 73, 58, 23, 255, 71, 60, 0, 255, 68, 62, 8, 255, 81, 72, 5, 255, 103, 79, 8, 255, 89, 70, 2, 255, 79, 71, 5, 255, 83, 66, 3, 255, 81, 65, 5, 255, 78, 63, 4, 255, 76, 58, 7, 255, 83, 61, 6, 255, 100, 68, 6, 255, 126, 83, 14, 255, 160, 92, 9, 255, 177, 88, 13, 255, 188, 91, 7, 255, 179, 84, 7, 255, 169, 84, 6, 255, 171, 81, 4, 255, 169, 82, 4, 255, 168, 83, 2, 255, 171, 87, 5, 255, 173, 91, 8, 255, 167, 83, 8, 255, 161, 84, 6, 255, 166, 84, 7, 255, 150, 73, 3, 255, 144, 76, 2, 255, 174, 102, 6, 255, 203, 125, 11, 255, 221, 137, 25, 255, 217, 135, 20, 255, 216, 137, 18, 255, 200, 118, 10, 255, 179, 90, 7, 255, 180, 101, 6, 255, 192, 112, 12, 255, 190, 109, 17, 255, 201, 118, 18, 255, 201, 119, 15, 255, 200, 112, 9, 255, 206, 113, 17, 255, 193, 105, 9, 255, 189, 100, 0, 255, 181, 96, 6, 255, 175, 91, 15, 255, 168, 90, 14, 255, 158, 79, 5, 255, 154, 74, 3, 255, 149, 70, 10, 255, 128, 58, 3, 255, 132, 58, 3, 255, 128, 59, 12, 255, 107, 43, 13, 255, 112, 52, 6, 255, 133, 65, 8, 255, 130, 64, 12, 255, 160, 93, 12, 255, 158, 75, 5, 255, 145, 60, 1, 255, 158, 65, 5, 255, 158, 60, 7, 255, 157, 68, 7, 255, 175, 96, 13, 255, 172, 82, 9, 255, 155, 59, 7, 255, 152, 58, 4, 255, 147, 63, 7, 255, 142, 63, 6, 255, 142, 68, 2, 255, 144, 70, 8, 255, 134, 59, 11, 255, 131, 57, 8, 255, 127, 57, 8, 255, 118, 52, 7, 255, 111, 46, 9, 255, 112, 44, 9, 255, 123, 55, 6, 255, 144, 71, 14, 255, 168, 90, 14, 255, 188, 108, 3, 255, 193, 110, 13, 255, 194, 112, 10, 255, 191, 110, 5, 255, 195, 113, 16, 255, 198, 118, 13, 255, 202, 121, 16, 255, 194, 109, 12, 255, 195, 110, 20, 255, 198, 115, 22, 255, 189, 106, 13, 255, 191, 110, 4, 255, 190, 109, 12, 255, 194, 111, 20, 255, 199, 117, 12, 255, 200, 116, 16, 255, 202, 118, 15, 255, 208, 121, 26, 255, 202, 119, 19, 255, 204, 124, 3, 255, 210, 129, 14, 255, 204, 121, 19, 255, 208, 121, 17, 255, 212, 124, 17, 255, 209, 125, 19, 255, 201, 121, 7, 255, 201, 117, 16, 255, 199, 111, 20, 255, 215, 133, 23, 255, 214, 133, 14, 255, 211, 128, 25, 255, 215, 135, 13, 255, 214, 133, 19, 255, 213, 132, 29, 255, 209, 129, 11, 255, 198, 115, 10, 255, 208, 131, 16, 255, 207, 130, 22, 255, 210, 137, 26, 255, 207, 135, 18, 255, 212, 135, 25, 255, 218, 137, 23, 255, 210, 126, 17, 255, 211, 128, 16, 255, 217, 138, 16, 255, 214, 136, 16, 255, 209, 133, 4, 255, 213, 138, 11, 255, 213, 138, 13, 255, 214, 139, 14, 255, 218, 141, 14, 255, 219, 141, 11, 255, 217, 139, 6, 255, 215, 143, 13, 255, 216, 140, 11, 255, 200, 113, 6, 255, 196, 106, 12, 255, 191, 104, 11, 255, 203, 122, 19, 255, 217, 139, 17, 255, 217, 136, 11, 255, 218, 133, 11, 255, 216, 135, 0, 255, 214, 139, 8, 255, 215, 141, 14, 255, 218, 144, 3, 255, 218, 145, 4, 255, 220, 147, 9, 255, 216, 144, 11, 255, 211, 138, 15, 255, 215, 142, 16, 255, 217, 143, 13, 255, 215, 144, 5, 255, 215, 142, 7, 255, 217, 142, 14, 255, 216, 135, 14, 255, 214, 135, 5, 255, 222, 141, 12, 255, 219, 138, 8, 255, 218, 139, 4, 255, 218, 142, 2, 255, 218, 143, 3, 255, 220, 145, 12, 255, 221, 149, 6, 255, 219, 149, 3, 255, 220, 144, 4, 255, 215, 138, 4, 255, 212, 133, 9, 255, 210, 132, 6, 255, 212, 134, 5, 255, 212, 133, 9, 255, 211, 131, 6, 255, 211, 132, 1, 255, 210, 132, 3, 255, 207, 129, 3, 255, 204, 125, 8, 255, 203, 125, 11, 255, 206, 130, 7, 255, 205, 129, 3, 255, 208, 130, 7, 255, 189, 112, 6, 255, 183, 106, 2, 255, 185, 107, 7, 255, 184, 108, 6, 255, 188, 113, 4, 255, 204, 130, 7, 255, 191, 121, 6, 255, 161, 93, 3, 255, 176, 110, 10, 255, 188, 115, 11, 255, 190, 113, 8, 255, 207, 139, 8, 255, 211, 148, 3, 255, 212, 152, 2, 255, 213, 154, 4, 255, 212, 156, 2, 255, 215, 158, 5, 255, 216, 153, 5, 255, 207, 140, 1, 255, 204, 133, 7, 255, 207, 137, 8, 255, 205, 137, 3, 255, 214, 145, 7, 255, 215, 143, 13, 255, 211, 139, 4, 255, 200, 124, 11, 255, 193, 116, 16, 255, 188, 113, 12, 255, 196, 123, 5, 255, 193, 120, 8, 255, 167, 86, 5, 255, 159, 76, 7, 255, 175, 94, 5, 255, 183, 101, 3, 255, 181, 97, 2, 255, 177, 92, 2, 255, 179, 98, 0, 255, 183, 106, 6, 255, 167, 93, 4, 255, 168, 99, 1, 255, 159, 92, 5, 255, 150, 82, 14, 255, 159, 99, 7, 255, 177, 115, 5, 255, 178, 104, 6, 255, 163, 90, 2, 255, 166, 89, 6, 255, 173, 94, 7, 255, 171, 93, 6, 255, 162, 90, 10, 255, 190, 117, 6, 255, 207, 136, 8, 255, 199, 129, 13, 255, 200, 132, 2, 255, 202, 143, 5, 255, 195, 137, 0, 255, 192, 121, 3, 255, 200, 130, 9, 255, 203, 132, 9, 255, 200, 129, 5, 255, 201, 130, 0, 255, 203, 128, 7, 255, 202, 125, 4, 255, 205, 127, 2, 255, 205, 126, 4, 255, 206, 126, 10, 255, 207, 127, 11, 255, 209, 132, 10, 255, 206, 131, 4, 255, 206, 130, 9, 255, 202, 124, 15, 255, 201, 123, 8, 255, 201, 118, 14, 255, 199, 116, 13, 255, 193, 111, 2, 255, 190, 108, 1, 255, 190, 106, 6, 255, 190, 104, 5, 255, 186, 100, 1, 255, 186, 100, 4, 255, 187, 98, 2, 255, 182, 99, 12, 255, 181, 93, 21, 255, 170, 83, 11, 255, 170, 88, 6, 255, 159, 71, 3, 255, 155, 67, 1, 255, 154, 67, 5, 255, 157, 68, 7, 255, 151, 70, 2, 255, 144, 62, 6, 255, 147, 61, 5, 255, 154, 66, 4, 255, 152, 61, 4, 255, 149, 61, 7, 255, 148, 60, 4, 255, 135, 59, 6, 255, 128, 57, 6, 255, 139, 59, 4, 255, 139, 56, 1, 255, 131, 54, 4, 255, 124, 55, 1, 255, 130, 59, 4, 255, 126, 50, 3, 255, 125, 45, 3, 255, 136, 52, 2, 255, 137, 58, 2, 255, 131, 54, 4, 255, 133, 56, 1, 255, 138, 59, 2, 255, 129, 57, 1, 255, 128, 57, 1, 255, 120, 52, 3, 255, 123, 54, 4, 255, 123, 50, 2, 255, 124, 49, 1, 255, 125, 48, 1, 255, 122, 42, 3, 255, 118, 40, 3, 255, 119, 43, 4, 255, 123, 48, 4, 255, 126, 49, 1, 255, 130, 51, 2, 255, 135, 56, 1, 255, 143, 60, 2, 255, 152, 60, 8, 255, 155, 66, 5, 255, 160, 72, 3, 255, 159, 66, 1, 255, 160, 66, 2, 255, 166, 74, 1, 255, 176, 83, 0, 255, 183, 87, 3, 255, 177, 81, 4, 255, 172, 81, 2, 255, 172, 83, 1, 255, 174, 83, 3, 255, 174, 78, 2, 255, 177, 81, 2, 255, 175, 84, 2, 255, 172, 81, 1, 255, 171, 80, 3, 255, 1, 28, 67, 255, 0, 20, 54, 255, 2, 23, 49, 255, 3, 31, 67, 255, 1, 30, 71, 255, 2, 30, 62, 255, 2, 31, 67, 255, 5, 29, 64, 255, 4, 13, 34, 255, 0, 2, 3, 255, 1, 6, 11, 255, 2, 9, 25, 255, 4, 12, 36, 255, 0, 16, 31, 255, 1, 16, 37, 255, 2, 17, 33, 255, 3, 15, 30, 255, 2, 13, 31, 255, 2, 15, 29, 255, 0, 8, 25, 255, 2, 2, 20, 255, 0, 3, 10, 255, 1, 1, 6, 255, 2, 0, 5, 255, 0, 0, 13, 255, 6, 27, 156, 255, 49, 69, 93, 255, 36, 28, 0, 255, 19, 16, 11, 255, 26, 31, 74, 255, 7, 6, 31, 255, 12, 0, 0, 255, 8, 4, 4, 255, 7, 3, 1, 255, 5, 1, 0, 255, 4, 0, 1, 255, 5, 1, 2, 255, 5, 1, 1, 255, 3, 0, 0, 255, 3, 1, 0, 255, 9, 7, 4, 255, 9, 5, 2, 255, 7, 0, 0, 255, 14, 4, 3, 255, 14, 4, 3, 255, 11, 0, 0, 255, 12, 3, 1, 255, 14, 5, 3, 255, 13, 3, 1, 255, 13, 3, 1, 255, 13, 3, 2, 255, 24, 10, 2, 255, 31, 11, 4, 255, 28, 11, 4, 255, 19, 9, 1, 255, 22, 10, 2, 255, 27, 14, 4, 255, 23, 13, 0, 255, 30, 17, 4, 255, 36, 16, 4, 255, 33, 15, 1, 255, 39, 19, 2, 255, 42, 22, 4, 255, 35, 19, 1, 255, 34, 19, 2, 255, 37, 22, 3, 255, 52, 27, 4, 255, 60, 38, 4, 255, 65, 45, 12, 255, 64, 51, 21, 255, 66, 56, 36, 255, 73, 66, 39, 255, 74, 67, 43, 255, 77, 67, 49, 255, 72, 67, 43, 255, 69, 66, 35, 255, 78, 65, 49, 255, 76, 64, 25, 255, 70, 65, 4, 255, 83, 64, 9, 255, 91, 72, 3, 255, 82, 64, 9, 255, 80, 63, 4, 255, 83, 65, 1, 255, 80, 59, 5, 255, 73, 57, 11, 255, 76, 62, 5, 255, 100, 72, 4, 255, 134, 82, 6, 255, 162, 87, 6, 255, 171, 85, 7, 255, 172, 79, 4, 255, 182, 88, 5, 255, 178, 92, 3, 255, 175, 91, 4, 255, 182, 94, 3, 255, 178, 90, 3, 255, 175, 90, 1, 255, 173, 89, 1, 255, 167, 82, 6, 255, 167, 83, 1, 255, 161, 73, 1, 255, 158, 77, 5, 255, 142, 68, 4, 255, 144, 69, 3, 255, 140, 71, 2, 255, 137, 70, 3, 255, 167, 89, 8, 255, 169, 90, 11, 255, 186, 108, 17, 255, 194, 109, 5, 255, 188, 98, 9, 255, 190, 104, 10, 255, 188, 109, 9, 255, 186, 106, 11, 255, 186, 95, 14, 255, 170, 86, 1, 255, 166, 81, 7, 255, 163, 82, 8, 255, 153, 67, 7, 255, 144, 57, 10, 255, 137, 60, 1, 255, 131, 53, 7, 255, 110, 44, 3, 255, 107, 45, 12, 255, 116, 59, 9, 255, 125, 55, 1, 255, 120, 49, 2, 255, 110, 49, 7, 255, 135, 64, 3, 255, 157, 73, 7, 255, 147, 55, 5, 255, 151, 61, 3, 255, 162, 73, 4, 255, 161, 75, 6, 255, 177, 88, 5, 255, 158, 64, 8, 255, 147, 57, 5, 255, 149, 54, 2, 255, 143, 52, 3, 255, 147, 69, 5, 255, 163, 71, 13, 255, 134, 50, 6, 255, 132, 53, 3, 255, 125, 53, 4, 255, 122, 51, 5, 255, 115, 51, 5, 255, 127, 62, 6, 255, 117, 52, 3, 255, 110, 48, 10, 255, 103, 43, 11, 255, 101, 42, 10, 255, 107, 44, 4, 255, 105, 42, 4, 255, 112, 54, 6, 255, 132, 68, 6, 255, 134, 65, 9, 255, 137, 65, 16, 255, 159, 85, 21, 255, 184, 109, 12, 255, 193, 110, 19, 255, 192, 110, 7, 255, 195, 112, 12, 255, 192, 110, 9, 255, 193, 110, 14, 255, 200, 117, 19, 255, 200, 116, 15, 255, 186, 103, 6, 255, 186, 100, 17, 255, 180, 94, 11, 255, 198, 114, 21, 255, 201, 122, 4, 255, 191, 109, 10, 255, 193, 108, 27, 255, 203, 118, 15, 255, 205, 120, 3, 255, 207, 121, 12, 255, 211, 125, 25, 255, 213, 127, 22, 255, 195, 103, 6, 255, 182, 92, 5, 255, 201, 118, 15, 255, 206, 120, 23, 255, 204, 119, 12, 255, 195, 109, 15, 255, 203, 124, 15, 255, 213, 133, 19, 255, 212, 132, 15, 255, 213, 130, 21, 255, 210, 128, 10, 255, 209, 128, 8, 255, 210, 131, 11, 255, 210, 131, 5, 255, 205, 126, 14, 255, 212, 137, 18, 255, 211, 139, 15, 255, 213, 140, 16, 255, 213, 138, 16, 255, 215, 141, 15, 255, 212, 137, 13, 255, 211, 132, 7, 255, 217, 135, 13, 255, 215, 129, 16, 255, 211, 128, 10, 255, 214, 135, 5, 255, 216, 138, 10, 255, 213, 137, 11, 255, 213, 138, 12, 255, 216, 142, 12, 255, 216, 143, 9, 255, 216, 142, 7, 255, 223, 143, 7, 255, 220, 138, 11, 255, 217, 136, 17, 255, 213, 140, 9, 255, 216, 144, 14, 255, 219, 145, 20, 255, 218, 142, 12, 255, 220, 141, 15, 255, 220, 137, 13, 255, 216, 133, 6, 255, 214, 137, 8, 255, 215, 139, 12, 255, 215, 139, 12, 255, 217, 138, 18, 255, 214, 137, 12, 255, 210, 136, 1, 255, 212, 138, 11, 255, 217, 139, 15, 255, 218, 139, 5, 255, 216, 133, 11, 255, 213, 129, 11, 255, 216, 134, 3, 255, 218, 138, 1, 255, 220, 140, 7, 255, 221, 138, 4, 255, 220, 136, 4, 255, 216, 136, 10, 255, 216, 137, 13, 255, 216, 140, 9, 255, 220, 143, 16, 255, 220, 143, 16, 255, 216, 142, 3, 255, 218, 140, 7, 255, 212, 133, 6, 255, 215, 136, 12, 255, 214, 135, 8, 255, 210, 131, 0, 255, 211, 131, 1, 255, 210, 129, 5, 255, 213, 130, 7, 255, 212, 130, 6, 255, 198, 116, 2, 255, 196, 116, 7, 255, 199, 120, 5, 255, 207, 128, 6, 255, 211, 132, 5, 255, 201, 117, 10, 255, 178, 99, 12, 255, 173, 99, 4, 255, 175, 96, 0, 255, 177, 102, 7, 255, 191, 124, 6, 255, 206, 139, 7, 255, 193, 118, 7, 255, 183, 107, 4, 255, 185, 116, 1, 255, 188, 120, 7, 255, 201, 135, 8, 255, 209, 146, 8, 255, 212, 152, 4, 255, 215, 156, 4, 255, 216, 157, 2, 255, 211, 151, 0, 255, 212, 149, 4, 255, 211, 141, 19, 255, 201, 129, 3, 255, 204, 134, 3, 255, 201, 131, 4, 255, 208, 139, 2, 255, 203, 127, 6, 255, 210, 134, 15, 255, 205, 138, 11, 255, 199, 125, 21, 255, 195, 118, 10, 255, 193, 115, 3, 255, 190, 107, 3, 255, 180, 94, 10, 255, 162, 82, 10, 255, 156, 73, 9, 255, 163, 80, 3, 255, 175, 90, 1, 255, 169, 79, 5, 255, 172, 82, 9, 255, 178, 95, 4, 255, 182, 105, 6, 255, 178, 107, 1, 255, 176, 101, 5, 255, 162, 83, 8, 255, 145, 73, 5, 255, 131, 66, 3, 255, 144, 74, 5, 255, 147, 71, 4, 255, 149, 73, 5, 255, 157, 81, 3, 255, 163, 87, 11, 255, 162, 85, 11, 255, 164, 87, 6, 255, 157, 84, 2, 255, 167, 93, 2, 255, 190, 113, 14, 255, 201, 140, 10, 255, 198, 148, 1, 255, 198, 136, 4, 255, 191, 114, 8, 255, 198, 120, 11, 255, 202, 124, 10, 255, 199, 122, 11, 255, 200, 126, 1, 255, 200, 125, 4, 255, 204, 126, 1, 255, 205, 125, 8, 255, 206, 125, 12, 255, 206, 126, 5, 255, 204, 125, 1, 255, 207, 127, 9, 255, 207, 128, 10, 255, 205, 128, 11, 255, 199, 122, 12, 255, 198, 120, 1, 255, 201, 116, 11, 255, 200, 113, 14, 255, 195, 111, 9, 255, 187, 104, 7, 255, 183, 96, 12, 255, 183, 97, 8, 255, 189, 102, 6, 255, 189, 101, 8, 255, 189, 100, 4, 255, 185, 94, 10, 255, 191, 103, 24, 255, 205, 119, 10, 255, 199, 107, 10, 255, 167, 76, 7, 255, 157, 67, 2, 255, 154, 64, 4, 255, 156, 72, 4, 255, 153, 73, 1, 255, 146, 64, 4, 255, 152, 68, 5, 255, 150, 65, 0, 255, 157, 66, 9, 255, 154, 60, 7, 255, 132, 52, 3, 255, 129, 49, 6, 255, 138, 57, 4, 255, 138, 65, 2, 255, 138, 57, 4, 255, 133, 49, 6, 255, 118, 47, 3, 255, 110, 44, 2, 255, 102, 37, 1, 255, 104, 38, 4, 255, 118, 41, 7, 255, 118, 42, 8, 255, 101, 34, 5, 255, 116, 52, 8, 255, 128, 63, 8, 255, 124, 65, 6, 255, 118, 56, 4, 255, 115, 54, 5, 255, 122, 62, 4, 255, 125, 60, 1, 255, 126, 53, 0, 255, 122, 45, 0, 255, 120, 42, 4, 255, 121, 43, 2, 255, 125, 51, 2, 255, 133, 59, 5, 255, 144, 62, 6, 255, 148, 63, 7, 255, 146, 61, 5, 255, 146, 61, 3, 255, 152, 63, 0, 255, 167, 75, 7, 255, 177, 85, 6, 255, 180, 88, 4, 255, 181, 88, 5, 255, 180, 88, 4, 255, 176, 80, 2, 255, 173, 76, 3, 255, 169, 73, 1, 255, 169, 75, 0, 255, 170, 79, 1, 255, 171, 80, 1, 255, 175, 81, 3, 255, 179, 84, 5, 255, 175, 82, 1, 255, 174, 81, 1, 255, 174, 83, 2, 255, 2, 25, 55, 255, 4, 30, 65, 255, 1, 28, 59, 255, 5, 24, 66, 255, 5, 24, 71, 255, 2, 33, 63, 255, 1, 34, 59, 255, 1, 28, 63, 255, 2, 25, 59, 255, 0, 14, 38, 255, 0, 4, 14, 255, 2, 3, 6, 255, 2, 6, 17, 255, 1, 10, 26, 255, 3, 14, 35, 255, 2, 13, 31, 255, 1, 10, 27, 255, 3, 10, 30, 255, 2, 8, 26, 255, 1, 1, 7, 255, 1, 1, 12, 255, 2, 3, 7, 255, 4, 2, 8, 255, 2, 0, 4, 255, 0, 29, 169, 255, 25, 65, 180, 255, 44, 37, 9, 255, 20, 7, 1, 255, 27, 27, 45, 255, 18, 12, 27, 255, 11, 1, 1, 255, 10, 4, 2, 255, 7, 3, 1, 255, 6, 2, 2, 255, 5, 1, 1, 255, 7, 3, 4, 255, 9, 4, 5, 255, 7, 2, 1, 255, 7, 0, 0, 255, 8, 2, 1, 255, 9, 4, 2, 255, 7, 2, 1, 255, 9, 2, 0, 255, 12, 3, 1, 255, 13, 3, 2, 255, 14, 4, 2, 255, 14, 4, 2, 255, 16, 6, 4, 255, 15, 6, 4, 255, 17, 7, 3, 255, 19, 8, 4, 255, 30, 12, 3, 255, 30, 8, 1, 255, 28, 10, 3, 255, 22, 12, 1, 255, 25, 12, 2, 255, 28, 16, 7, 255, 25, 13, 4, 255, 31, 14, 3, 255, 34, 16, 1, 255, 40, 21, 2, 255, 42, 23, 3, 255, 37, 19, 1, 255, 38, 20, 4, 255, 50, 27, 7, 255, 50, 23, 5, 255, 52, 24, 7, 255, 54, 30, 7, 255, 61, 39, 15, 255, 65, 45, 17, 255, 74, 54, 25, 255, 86, 67, 32, 255, 86, 68, 50, 255, 81, 68, 52, 255, 74, 67, 48, 255, 72, 67, 45, 255, 80, 70, 33, 255, 72, 61, 32, 255, 68, 65, 16, 255, 96, 68, 11, 255, 81, 63, 7, 255, 74, 63, 2, 255, 88, 61, 1, 255, 77, 59, 1, 255, 93, 81, 5, 255, 107, 73, 12, 255, 130, 73, 7, 255, 162, 83, 9, 255, 173, 81, 11, 255, 169, 81, 5, 255, 169, 81, 7, 255, 173, 88, 4, 255, 182, 95, 3, 255, 179, 88, 7, 255, 176, 89, 5, 255, 165, 82, 6, 255, 153, 74, 4, 255, 156, 80, 5, 255, 147, 72, 7, 255, 131, 63, 4, 255, 127, 65, 4, 255, 120, 64, 4, 255, 114, 62, 3, 255, 103, 57, 3, 255, 104, 60, 1, 255, 113, 61, 4, 255, 115, 62, 12, 255, 115, 65, 12, 255, 116, 59, 5, 255, 132, 64, 9, 255, 139, 64, 12, 255, 152, 82, 8, 255, 138, 73, 16, 255, 126, 56, 8, 255, 135, 65, 6, 255, 155, 74, 3, 255, 141, 63, 5, 255, 106, 47, 4, 255, 137, 69, 11, 255, 112, 55, 6, 255, 86, 47, 4, 255, 132, 67, 6, 255, 118, 56, 8, 255, 101, 43, 2, 255, 108, 46, 4, 255, 154, 84, 9, 255, 142, 70, 5, 255, 108, 46, 6, 255, 129, 57, 2, 255, 129, 59, 6, 255, 126, 54, 3, 255, 133, 54, 8, 255, 134, 50, 1, 255, 140, 55, 4, 255, 144, 58, 8, 255, 137, 52, 1, 255, 138, 58, 1, 255, 131, 55, 3, 255, 125, 56, 6, 255, 125, 57, 5, 255, 125, 56, 5, 255, 121, 55, 5, 255, 120, 56, 3, 255, 109, 48, 5, 255, 108, 52, 5, 255, 111, 52, 8, 255, 115, 49, 5, 255, 116, 55, 5, 255, 118, 54, 10, 255, 110, 49, 5, 255, 109, 51, 7, 255, 107, 50, 5, 255, 113, 50, 6, 255, 115, 45, 12, 255, 137, 60, 8, 255, 157, 76, 6, 255, 132, 60, 6, 255, 117, 62, 3, 255, 111, 50, 6, 255, 144, 71, 14, 255, 179, 96, 10, 255, 186, 104, 10, 255, 187, 106, 6, 255, 182, 103, 11, 255, 186, 107, 7, 255, 188, 102, 13, 255, 182, 97, 6, 255, 185, 103, 14, 255, 188, 105, 18, 255, 186, 105, 10, 255, 194, 113, 15, 255, 193, 112, 9, 255, 191, 110, 20, 255, 196, 122, 14, 255, 200, 122, 9, 255, 202, 120, 15, 255, 205, 123, 18, 255, 205, 123, 11, 255, 201, 117, 5, 255, 198, 111, 16, 255, 205, 120, 15, 255, 209, 130, 12, 255, 211, 133, 13, 255, 208, 126, 24, 255, 210, 130, 26, 255, 210, 131, 23, 255, 208, 127, 18, 255, 209, 128, 13, 255, 209, 124, 26, 255, 204, 121, 20, 255, 208, 128, 18, 255, 206, 126, 26, 255, 207, 126, 30, 255, 209, 133, 18, 255, 212, 138, 18, 255, 211, 136, 15, 255, 210, 133, 14, 255, 213, 132, 13, 255, 206, 126, 3, 255, 201, 121, 20, 255, 210, 130, 16, 255, 216, 137, 10, 255, 214, 132, 15, 255, 212, 134, 1, 255, 211, 134, 6, 255, 213, 133, 9, 255, 215, 136, 12, 255, 214, 139, 13, 255, 214, 140, 13, 255, 213, 140, 12, 255, 215, 142, 16, 255, 214, 142, 6, 255, 214, 139, 6, 255, 210, 133, 12, 255, 206, 130, 7, 255, 216, 142, 15, 255, 218, 143, 17, 255, 216, 145, 11, 255, 210, 139, 12, 255, 206, 130, 10, 255, 211, 134, 9, 255, 216, 140, 16, 255, 216, 140, 16, 255, 215, 139, 10, 255, 212, 134, 6, 255, 215, 137, 17, 255, 213, 140, 4, 255, 216, 141, 6, 255, 213, 134, 8, 255, 215, 134, 2, 255, 217, 136, 3, 255, 220, 138, 9, 255, 218, 139, 4, 255, 213, 136, 7, 255, 207, 132, 12, 255, 195, 115, 10, 255, 208, 126, 18, 255, 216, 147, 2, 255, 212, 138, 10, 255, 214, 137, 12, 255, 219, 142, 1, 255, 219, 138, 3, 255, 217, 131, 9, 255, 214, 130, 6, 255, 217, 132, 7, 255, 214, 129, 6, 255, 215, 130, 7, 255, 214, 129, 5, 255, 212, 127, 1, 255, 213, 128, 5, 255, 211, 127, 9, 255, 209, 127, 7, 255, 204, 124, 2, 255, 203, 123, 2, 255, 204, 126, 2, 255, 213, 136, 2, 255, 207, 123, 7, 255, 178, 91, 11, 255, 166, 88, 0, 255, 171, 96, 8, 255, 186, 110, 7, 255, 195, 128, 7, 255, 215, 157, 3, 255, 206, 140, 9, 255, 177, 100, 12, 255, 183, 105, 5, 255, 194, 122, 4, 255, 207, 138, 6, 255, 211, 148, 5, 255, 212, 154, 5, 255, 214, 155, 2, 255, 211, 149, 1, 255, 209, 144, 3, 255, 207, 138, 3, 255, 210, 139, 8, 255, 200, 128, 9, 255, 197, 122, 11, 255, 201, 129, 5, 255, 203, 131, 9, 255, 199, 127, 7, 255, 183, 101, 10, 255, 206, 127, 16, 255, 214, 140, 19, 255, 206, 128, 21, 255, 202, 124, 10, 255, 196, 118, 8, 255, 196, 117, 3, 255, 189, 109, 8, 255, 189, 105, 3, 255, 181, 95, 3, 255, 174, 86, 4, 255, 173, 86, 6, 255, 167, 84, 2, 255, 176, 97, 3, 255, 183, 103, 4, 255, 185, 110, 7, 255, 179, 105, 2, 255, 168, 87, 6, 255, 169, 86, 12, 255, 170, 95, 11, 255, 143, 72, 2, 255, 130, 58, 6, 255, 130, 60, 3, 255, 151, 74, 4, 255, 147, 72, 5, 255, 151, 78, 8, 255, 160, 82, 6, 255, 167, 95, 7, 255, 164, 101, 2, 255, 142, 74, 7, 255, 184, 125, 26, 255, 207, 152, 8, 255, 207, 144, 0, 255, 202, 137, 6, 255, 196, 119, 8, 255, 196, 115, 3, 255, 198, 118, 3, 255, 198, 120, 12, 255, 201, 126, 6, 255, 200, 124, 1, 255, 203, 125, 5, 255, 204, 126, 6, 255, 205, 125, 7, 255, 205, 125, 7, 255, 202, 124, 5, 255, 203, 125, 4, 255, 204, 124, 7, 255, 202, 123, 8, 255, 200, 123, 15, 255, 198, 118, 9, 255, 198, 112, 7, 255, 194, 108, 3, 255, 195, 111, 8, 255, 195, 109, 13, 255, 187, 102, 11, 255, 187, 103, 6, 255, 192, 107, 5, 255, 189, 103, 5, 255, 189, 101, 6, 255, 197, 112, 17, 255, 207, 121, 21, 255, 203, 116, 12, 255, 183, 92, 5, 255, 167, 78, 3, 255, 161, 75, 6, 255, 157, 74, 8, 255, 150, 72, 1, 255, 152, 72, 5, 255, 149, 70, 4, 255, 146, 69, 3, 255, 148, 66, 3, 255, 150, 65, 2, 255, 154, 65, 4, 255, 148, 58, 8, 255, 144, 61, 4, 255, 148, 65, 1, 255, 148, 63, 2, 255, 141, 62, 5, 255, 135, 58, 2, 255, 132, 52, 3, 255, 128, 41, 6, 255, 108, 33, 5, 255, 89, 29, 1, 255, 95, 27, 3, 255, 99, 27, 5, 255, 91, 31, 0, 255, 109, 50, 5, 255, 121, 57, 5, 255, 117, 56, 2, 255, 115, 50, 2, 255, 117, 53, 6, 255, 114, 54, 6, 255, 124, 58, 2, 255, 129, 56, 2, 255, 125, 48, 4, 255, 127, 49, 4, 255, 139, 61, 2, 255, 146, 68, 2, 255, 144, 62, 3, 255, 150, 65, 6, 255, 143, 60, 5, 255, 136, 53, 1, 255, 155, 70, 4, 255, 175, 85, 4, 255, 182, 89, 2, 255, 188, 98, 1, 255, 190, 98, 0, 255, 186, 91, 1, 255, 180, 85, 1, 255, 169, 73, 1, 255, 164, 72, 3, 255, 167, 77, 2, 255, 171, 79, 3, 255, 174, 80, 7, 255, 174, 81, 5, 255, 174, 85, 2, 255, 174, 84, 0, 255, 176, 80, 1, 255, 176, 81, 0, 255, 177, 85, 1, 255, 1, 26, 59, 255, 6, 30, 73, 255, 1, 23, 59, 255, 1, 23, 54, 255, 2, 24, 62, 255, 3, 25, 67, 255, 2, 24, 65, 255, 4, 29, 54, 255, 0, 25, 53, 255, 1, 20, 53, 255, 4, 15, 41, 255, 1, 7, 19, 255, 2, 4, 12, 255, 1, 5, 19, 255, 3, 11, 29, 255, 1, 10, 26, 255, 2, 9, 27, 255, 4, 10, 28, 255, 2, 6, 16, 255, 0, 1, 13, 255, 0, 1, 15, 255, 3, 0, 16, 255, 4, 0, 0, 255, 0, 15, 118, 255, 8, 90, 227, 255, 45, 45, 33, 255, 24, 7, 0, 255, 21, 20, 68, 255, 12, 16, 71, 255, 5, 0, 4, 255, 5, 2, 3, 255, 8, 2, 1, 255, 6, 1, 0, 255, 6, 2, 1, 255, 5, 1, 0, 255, 7, 3, 3, 255, 8, 3, 2, 255, 7, 2, 1, 255, 8, 2, 0, 255, 11, 5, 2, 255, 9, 4, 2, 255, 8, 3, 1, 255, 12, 3, 1, 255, 12, 2, 0, 255, 16, 5, 2, 255, 15, 4, 2, 255, 13, 3, 1, 255, 16, 6, 4, 255, 17, 6, 3, 255, 20, 7, 2, 255, 24, 10, 3, 255, 26, 8, 0, 255, 31, 11, 5, 255, 26, 10, 3, 255, 23, 12, 0, 255, 33, 17, 4, 255, 33, 16, 4, 255, 32, 16, 3, 255, 38, 21, 6, 255, 34, 19, 3, 255, 34, 14, 0, 255, 38, 20, 2, 255, 36, 21, 2, 255, 41, 21, 5, 255, 42, 24, 4, 255, 48, 26, 3, 255, 47, 31, 3, 255, 54, 36, 11, 255, 54, 40, 10, 255, 60, 44, 19, 255, 68, 49, 27, 255, 82, 65, 14, 255, 87, 66, 39, 255, 79, 68, 54, 255, 79, 71, 37, 255, 85, 71, 40, 255, 82, 70, 31, 255, 82, 63, 29, 255, 101, 71, 18, 255, 86, 66, 13, 255, 82, 65, 7, 255, 83, 64, 2, 255, 90, 69, 5, 255, 101, 71, 5, 255, 124, 87, 6, 255, 146, 84, 9, 255, 168, 90, 8, 255, 175, 90, 5, 255, 171, 88, 5, 255, 176, 97, 7, 255, 175, 89, 6, 255, 171, 86, 7, 255, 166, 89, 0, 255, 161, 79, 3, 255, 153, 75, 2, 255, 128, 64, 1, 255, 107, 56, 3, 255, 105, 58, 6, 255, 97, 57, 2, 255, 95, 61, 10, 255, 91, 58, 11, 255, 90, 59, 6, 255, 88, 55, 5, 255, 91, 56, 2, 255, 92, 60, 2, 255, 100, 57, 2, 255, 114, 62, 3, 255, 115, 65, 2, 255, 122, 66, 1, 255, 119, 62, 3, 255, 114, 52, 5, 255, 119, 59, 8, 255, 105, 43, 6, 255, 128, 52, 4, 255, 152, 76, 2, 255, 151, 71, 2, 255, 131, 64, 11, 255, 130, 64, 1, 255, 139, 67, 7, 255, 98, 49, 7, 255, 91, 49, 6, 255, 108, 51, 9, 255, 98, 53, 8, 255, 100, 55, 3, 255, 98, 51, 1, 255, 123, 54, 1, 255, 113, 52, 5, 255, 104, 54, 10, 255, 103, 52, 4, 255, 104, 47, 2, 255, 119, 55, 2, 255, 128, 58, 4, 255, 130, 57, 6, 255, 130, 57, 7, 255, 122, 49, 5, 255, 120, 56, 0, 255, 117, 55, 5, 255, 118, 53, 3, 255, 115, 51, 9, 255, 111, 48, 4, 255, 111, 45, 4, 255, 111, 53, 4, 255, 108, 49, 2, 255, 105, 47, 11, 255, 107, 46, 7, 255, 110, 49, 11, 255, 115, 47, 7, 255, 126, 57, 1, 255, 125, 52, 3, 255, 119, 48, 4, 255, 114, 52, 1, 255, 112, 54, 8, 255, 112, 50, 7, 255, 115, 49, 6, 255, 117, 51, 9, 255, 117, 54, 6, 255, 113, 53, 3, 255, 109, 49, 18, 255, 99, 44, 9, 255, 103, 50, 11, 255, 136, 69, 11, 255, 155, 77, 12, 255, 172, 88, 9, 255, 174, 87, 15, 255, 181, 102, 8, 255, 178, 98, 5, 255, 177, 96, 11, 255, 172, 90, 18, 255, 180, 100, 11, 255, 192, 113, 12, 255, 188, 109, 11, 255, 190, 110, 11, 255, 196, 116, 17, 255, 199, 115, 11, 255, 200, 115, 13, 255, 202, 115, 15, 255, 201, 117, 5, 255, 205, 121, 11, 255, 198, 109, 10, 255, 195, 114, 20, 255, 203, 123, 17, 255, 210, 128, 15, 255, 206, 129, 13, 255, 201, 125, 19, 255, 199, 122, 14, 255, 202, 125, 24, 255, 197, 123, 18, 255, 198, 122, 6, 255, 203, 121, 13, 255, 203, 118, 15, 255, 193, 105, 15, 255, 195, 111, 12, 255, 200, 123, 15, 255, 207, 130, 24, 255, 204, 129, 12, 255, 207, 132, 12, 255, 209, 130, 26, 255, 200, 119, 16, 255, 183, 104, 5, 255, 180, 102, 21, 255, 186, 109, 14, 255, 202, 123, 10, 255, 208, 126, 9, 255, 206, 125, 8, 255, 209, 129, 9, 255, 212, 135, 9, 255, 210, 135, 7, 255, 211, 138, 8, 255, 212, 140, 7, 255, 212, 137, 7, 255, 212, 137, 11, 255, 210, 143, 2, 255, 218, 146, 18, 255, 216, 138, 22, 255, 215, 136, 17, 255, 219, 143, 19, 255, 217, 140, 16, 255, 216, 142, 4, 255, 215, 140, 13, 255, 208, 130, 15, 255, 203, 123, 17, 255, 208, 127, 13, 255, 212, 133, 6, 255, 212, 132, 8, 255, 210, 130, 8, 255, 211, 129, 18, 255, 213, 133, 10, 255, 215, 136, 8, 255, 216, 134, 12, 255, 218, 133, 12, 255, 213, 130, 12, 255, 205, 126, 2, 255, 204, 122, 3, 255, 211, 135, 4, 255, 213, 142, 14, 255, 204, 130, 5, 255, 216, 133, 14, 255, 214, 132, 4, 255, 209, 127, 2, 255, 209, 126, 11, 255, 213, 130, 11, 255, 213, 131, 6, 255, 211, 130, 9, 255, 214, 134, 7, 255, 217, 136, 13, 255, 204, 122, 5, 255, 205, 123, 5, 255, 211, 128, 7, 255, 209, 126, 6, 255, 209, 125, 6, 255, 209, 125, 6, 255, 207, 124, 5, 255, 208, 126, 5, 255, 209, 128, 2, 255, 212, 131, 7, 255, 210, 129, 10, 255, 185, 98, 9, 255, 169, 88, 4, 255, 170, 93, 3, 255, 180, 98, 12, 255, 193, 116, 10, 255, 207, 139, 7, 255, 208, 133, 13, 255, 178, 98, 12, 255, 180, 108, 6, 255, 194, 127, 4, 255, 209, 147, 9, 255, 211, 151, 6, 255, 210, 149, 9, 255, 211, 150, 1, 255, 210, 144, 6, 255, 205, 135, 4, 255, 203, 131, 6, 255, 201, 129, 7, 255, 200, 126, 7, 255, 202, 131, 6, 255, 207, 138, 2, 255, 207, 137, 5, 255, 207, 137, 17, 255, 206, 134, 12, 255, 193, 114, 6, 255, 196, 117, 12, 255, 208, 136, 22, 255, 201, 124, 18, 255, 201, 121, 7, 255, 202, 121, 8, 255, 203, 123, 7, 255, 198, 117, 4, 255, 195, 112, 1, 255, 189, 103, 4, 255, 179, 91, 3, 255, 170, 81, 4, 255, 169, 80, 6, 255, 176, 91, 1, 255, 184, 107, 3, 255, 189, 114, 2, 255, 187, 107, 5, 255, 179, 97, 6, 255, 171, 92, 4, 255, 159, 83, 3, 255, 156, 79, 3, 255, 142, 66, 8, 255, 134, 61, 0, 255, 146, 67, 15, 255, 137, 65, 13, 255, 139, 69, 4, 255, 145, 73, 6, 255, 153, 76, 5, 255, 173, 91, 9, 255, 180, 116, 9, 255, 205, 151, 7, 255, 211, 147, 10, 255, 202, 135, 8, 255, 200, 132, 3, 255, 194, 119, 1, 255, 197, 114, 8, 255, 199, 119, 9, 255, 197, 122, 8, 255, 201, 127, 7, 255, 205, 127, 5, 255, 203, 127, 6, 255, 202, 127, 4, 255, 204, 125, 4, 255, 204, 124, 7, 255, 204, 123, 8, 255, 201, 121, 7, 255, 202, 118, 5, 255, 199, 117, 2, 255, 199, 118, 15, 255, 198, 114, 16, 255, 194, 109, 10, 255, 193, 109, 4, 255, 192, 108, 6, 255, 191, 105, 1, 255, 192, 107, 3, 255, 190, 106, 7, 255, 190, 107, 6, 255, 196, 110, 4, 255, 203, 117, 6, 255, 201, 121, 16, 255, 201, 113, 20, 255, 191, 101, 13, 255, 179, 94, 1, 255, 165, 78, 3, 255, 154, 70, 10, 255, 152, 75, 5, 255, 157, 75, 6, 255, 157, 75, 3, 255, 154, 74, 3, 255, 141, 62, 2, 255, 147, 67, 7, 255, 155, 73, 3, 255, 157, 68, 2, 255, 153, 66, 3, 255, 150, 67, 3, 255, 148, 65, 1, 255, 148, 59, 4, 255, 141, 62, 2, 255, 137, 58, 2, 255, 137, 57, 2, 255, 134, 50, 0, 255, 136, 52, 4, 255, 119, 43, 4, 255, 98, 29, 0, 255, 91, 33, 1, 255, 103, 39, 3, 255, 111, 45, 7, 255, 120, 51, 1, 255, 117, 50, 3, 255, 117, 46, 8, 255, 118, 52, 5, 255, 115, 48, 2, 255, 126, 54, 4, 255, 138, 58, 7, 255, 141, 61, 7, 255, 145, 67, 2, 255, 153, 70, 2, 255, 150, 66, 2, 255, 144, 61, 1, 255, 143, 53, 2, 255, 144, 56, 1, 255, 159, 74, 6, 255, 171, 87, 5, 255, 186, 99, 2, 255, 191, 99, 2, 255, 189, 99, 1, 255, 185, 95, 0, 255, 183, 88, 0, 255, 181, 85, 1, 255, 173, 78, 1, 255, 165, 75, 7, 255, 171, 83, 6, 255, 177, 87, 3, 255, 176, 81, 5, 255, 172, 78, 1, 255, 172, 82, 1, 255, 171, 82, 4, 255, 172, 78, 1, 255, 177, 83, 2, 255, 178, 86, 0, 255, 1, 29, 70, 255, 2, 23, 67, 255, 2, 23, 56, 255, 2, 29, 51, 255, 1, 27, 54, 255, 1, 16, 48, 255, 1, 21, 56, 255, 1, 25, 55, 255, 2, 23, 52, 255, 0, 21, 54, 255, 3, 19, 55, 255, 6, 14, 38, 255, 1, 2, 5, 255, 3, 3, 13, 255, 0, 6, 19, 255, 1, 9, 22, 255, 2, 9, 23, 255, 0, 4, 20, 255, 0, 2, 9, 255, 1, 0, 8, 255, 0, 2, 8, 255, 3, 3, 1, 255, 3, 1, 73, 255, 3, 66, 229, 255, 45, 54, 62, 255, 26, 12, 0, 255, 14, 16, 68, 255, 8, 23, 159, 255, 2, 3, 17, 255, 10, 2, 1, 255, 7, 3, 3, 255, 6, 3, 1, 255, 6, 2, 1, 255, 7, 3, 2, 255, 6, 2, 0, 255, 8, 3, 1, 255, 7, 2, 0, 255, 9, 4, 1, 255, 11, 7, 3, 255, 7, 3, 0, 255, 8, 3, 1, 255, 11, 4, 2, 255, 12, 2, 1, 255, 17, 3, 2, 255, 18, 4, 3, 255, 16, 6, 2, 255, 12, 2, 0, 255, 17, 8, 4, 255, 18, 7, 2, 255, 22, 9, 2, 255, 25, 10, 1, 255, 24, 7, 2, 255, 26, 9, 5, 255, 21, 7, 1, 255, 29, 16, 3, 255, 34, 16, 2, 255, 35, 15, 1, 255, 37, 20, 4, 255, 36, 19, 2, 255, 35, 16, 2, 255, 34, 19, 8, 255, 37, 21, 8, 255, 40, 20, 3, 255, 41, 24, 0, 255, 44, 29, 1, 255, 48, 32, 5, 255, 51, 34, 4, 255, 51, 42, 7, 255, 53, 42, 8, 255, 65, 50, 11, 255, 73, 56, 14, 255, 77, 61, 20, 255, 80, 64, 38, 255, 79, 69, 46, 255, 71, 74, 41, 255, 71, 69, 61, 255, 84, 70, 51, 255, 104, 76, 29, 255, 89, 66, 7, 255, 78, 67, 7, 255, 76, 66, 9, 255, 88, 64, 4, 255, 123, 79, 16, 255, 143, 85, 7, 255, 150, 79, 13, 255, 163, 90, 8, 255, 178, 100, 9, 255, 180, 99, 7, 255, 180, 99, 0, 255, 171, 88, 0, 255, 162, 78, 1, 255, 161, 73, 8, 255, 151, 80, 6, 255, 128, 62, 1, 255, 123, 62, 10, 255, 102, 61, 3, 255, 91, 60, 2, 255, 94, 60, 1, 255, 95, 60, 1, 255, 99, 62, 2, 255, 95, 55, 5, 255, 93, 56, 1, 255, 98, 57, 1, 255, 100, 55, 8, 255, 100, 56, 4, 255, 97, 57, 3, 255, 99, 57, 4, 255, 112, 61, 5, 255, 109, 62, 10, 255, 103, 59, 3, 255, 108, 59, 2, 255, 111, 60, 3, 255, 114, 60, 5, 255, 141, 74, 4, 255, 131, 67, 3, 255, 103, 45, 6, 255, 106, 52, 5, 255, 132, 63, 5, 255, 113, 49, 6, 255, 93, 42, 3, 255, 96, 49, 2, 255, 87, 51, 2, 255, 97, 54, 2, 255, 89, 49, 6, 255, 85, 47, 5, 255, 91, 48, 4, 255, 94, 47, 1, 255, 111, 52, 3, 255, 112, 49, 7, 255, 119, 46, 6, 255, 124, 49, 2, 255, 124, 53, 4, 255, 115, 47, 4, 255, 121, 53, 2, 255, 119, 49, 8, 255, 110, 44, 3, 255, 113, 46, 7, 255, 112, 48, 1, 255, 107, 45, 1, 255, 105, 46, 5, 255, 102, 47, 1, 255, 103, 41, 6, 255, 110, 47, 8, 255, 114, 52, 5, 255, 107, 49, 3, 255, 125, 58, 5, 255, 141, 64, 4, 255, 140, 65, 3, 255, 130, 59, 11, 255, 110, 45, 9, 255, 92, 40, 2, 255, 97, 48, 5, 255, 109, 52, 3, 255, 124, 57, 4, 255, 123, 57, 4, 255, 121, 62, 2, 255, 118, 55, 3, 255, 120, 53, 6, 255, 116, 52, 9, 255, 116, 60, 3, 255, 121, 63, 4, 255, 132, 62, 12, 255, 147, 69, 8, 255, 165, 86, 12, 255, 178, 100, 2, 255, 181, 98, 11, 255, 167, 82, 13, 255, 164, 82, 8, 255, 187, 108, 10, 255, 188, 108, 7, 255, 186, 106, 7, 255, 178, 98, 7, 255, 183, 101, 8, 255, 196, 109, 12, 255, 194, 105, 16, 255, 194, 107, 15, 255, 195, 112, 12, 255, 175, 91, 7, 255, 190, 102, 19, 255, 190, 108, 7, 255, 189, 111, 7, 255, 197, 121, 13, 255, 195, 112, 9, 255, 183, 95, 8, 255, 190, 112, 12, 255, 196, 124, 9, 255, 199, 120, 15, 255, 195, 115, 12, 255, 183, 99, 7, 255, 175, 90, 13, 255, 159, 75, 7, 255, 182, 103, 11, 255, 192, 114, 16, 255, 193, 113, 18, 255, 197, 120, 14, 255, 196, 121, 5, 255, 200, 125, 12, 255, 195, 122, 11, 255, 196, 120, 11, 255, 188, 112, 11, 255, 177, 102, 11, 255, 197, 120, 12, 255, 205, 122, 12, 255, 200, 116, 15, 255, 199, 120, 13, 255, 207, 135, 13, 255, 207, 136, 11, 255, 209, 136, 7, 255, 210, 135, 5, 255, 209, 133, 5, 255, 214, 135, 14, 255, 216, 137, 8, 255, 216, 137, 11, 255, 207, 128, 9, 255, 211, 137, 17, 255, 214, 145, 7, 255, 213, 140, 11, 255, 217, 141, 12, 255, 215, 140, 24, 255, 215, 143, 19, 255, 211, 141, 4, 255, 213, 142, 12, 255, 215, 141, 19, 255, 211, 139, 3, 255, 215, 143, 11, 255, 214, 142, 19, 255, 210, 138, 12, 255, 211, 137, 12, 255, 208, 132, 10, 255, 201, 123, 11, 255, 197, 117, 10, 255, 206, 123, 9, 255, 209, 123, 3, 255, 210, 125, 5, 255, 213, 129, 15, 255, 209, 123, 7, 255, 208, 117, 1, 255, 203, 114, 10, 255, 207, 119, 12, 255, 210, 126, 6, 255, 215, 130, 7, 255, 215, 131, 4, 255, 213, 128, 5, 255, 212, 127, 8, 255, 195, 108, 1, 255, 198, 111, 8, 255, 211, 125, 13, 255, 211, 127, 2, 255, 211, 126, 5, 255, 212, 127, 7, 255, 210, 126, 6, 255, 209, 124, 9, 255, 207, 123, 6, 255, 208, 124, 3, 255, 205, 119, 7, 255, 194, 107, 8, 255, 176, 90, 11, 255, 174, 98, 8, 255, 175, 95, 4, 255, 193, 106, 12, 255, 188, 106, 8, 255, 192, 112, 8, 255, 179, 100, 4, 255, 179, 105, 11, 255, 199, 132, 19, 255, 211, 148, 13, 255, 209, 148, 3, 255, 209, 148, 6, 255, 208, 146, 6, 255, 206, 137, 7, 255, 197, 122, 7, 255, 197, 117, 4, 255, 196, 117, 2, 255, 195, 123, 4, 255, 204, 136, 10, 255, 207, 138, 3, 255, 209, 139, 4, 255, 203, 134, 8, 255, 208, 141, 3, 255, 212, 144, 7, 255, 206, 132, 2, 255, 204, 124, 16, 255, 205, 128, 24, 255, 202, 123, 22, 255, 197, 117, 6, 255, 199, 117, 10, 255, 199, 120, 3, 255, 196, 114, 14, 255, 201, 112, 15, 255, 201, 114, 1, 255, 194, 107, 4, 255, 188, 102, 2, 255, 182, 99, 1, 255, 182, 101, 5, 255, 188, 109, 11, 255, 189, 108, 4, 255, 183, 98, 1, 255, 189, 108, 10, 255, 184, 110, 9, 255, 168, 92, 6, 255, 159, 81, 6, 255, 135, 66, 2, 255, 132, 57, 4, 255, 151, 78, 5, 255, 140, 71, 6, 255, 149, 71, 11, 255, 150, 75, 5, 255, 142, 69, 0, 255, 144, 75, 4, 255, 191, 128, 13, 255, 197, 136, 9, 255, 201, 136, 10, 255, 201, 130, 10, 255, 198, 123, 13, 255, 197, 121, 11, 255, 196, 116, 7, 255, 197, 117, 10, 255, 196, 119, 20, 255, 200, 124, 20, 255, 205, 128, 3, 255, 205, 127, 2, 255, 204, 126, 4, 255, 203, 123, 4, 255, 202, 121, 2, 255, 202, 118, 3, 255, 199, 114, 10, 255, 198, 112, 8, 255, 197, 113, 5, 255, 195, 112, 11, 255, 193, 111, 11, 255, 191, 107, 11, 255, 194, 110, 12, 255, 190, 106, 13, 255, 191, 101, 10, 255, 191, 105, 1, 255, 191, 108, 3, 255, 197, 114, 9, 255, 205, 123, 8, 255, 205, 122, 2, 255, 202, 114, 12, 255, 195, 105, 17, 255, 196, 103, 13, 255, 192, 97, 7, 255, 167, 77, 7, 255, 158, 74, 6, 255, 155, 73, 1, 255, 158, 73, 4, 255, 150, 63, 1, 255, 153, 68, 6, 255, 152, 70, 7, 255, 150, 67, 3, 255, 160, 74, 12, 255, 158, 67, 2, 255, 146, 64, 0, 255, 138, 57, 4, 255, 140, 55, 7, 255, 143, 58, 4, 255, 138, 57, 4, 255, 140, 53, 2, 255, 141, 56, 4, 255, 138, 51, 1, 255, 142, 55, 2, 255, 136, 53, 5, 255, 128, 49, 8, 255, 106, 38, 2, 255, 100, 35, 6, 255, 105, 36, 4, 255, 115, 41, 4, 255, 111, 44, 4, 255, 115, 46, 7, 255, 118, 56, 3, 255, 126, 55, 5, 255, 137, 57, 1, 255, 143, 62, 1, 255, 146, 65, 1, 255, 148, 68, 1, 255, 157, 68, 7, 255, 150, 56, 5, 255, 144, 55, 6, 255, 150, 61, 10, 255, 163, 83, 3, 255, 182, 105, 4, 255, 185, 99, 3, 255, 182, 87, 0, 255, 187, 93, 5, 255, 188, 97, 5, 255, 185, 94, 4, 255, 183, 90, 2, 255, 182, 89, 0, 255, 178, 87, 3, 255, 174, 83, 5, 255, 173, 83, 1, 255, 175, 85, 1, 255, 172, 81, 4, 255, 171, 78, 4, 255, 172, 78, 1, 255, 173, 79, 3, 255, 170, 79, 1, 255, 176, 86, 2, 255, 176, 86, 0, 255, 1, 22, 52, 255, 1, 25, 54, 255, 3, 26, 61, 255, 2, 23, 59, 255, 2, 21, 56, 255, 2, 17, 58, 255, 3, 19, 48, 255, 3, 19, 55, 255, 2, 22, 57, 255, 1, 20, 47, 255, 3, 18, 44, 255, 2, 17, 43, 255, 1, 16, 33, 255, 3, 3, 14, 255, 2, 2, 8, 255, 5, 5, 15, 255, 2, 2, 27, 255, 3, 1, 19, 255, 3, 1, 11, 255, 3, 2, 16, 255, 1, 2, 2, 255, 2, 0, 40, 255, 0, 60, 220, 255, 33, 66, 110, 255, 31, 19, 0, 255, 28, 5, 45, 255, 15, 27, 184, 255, 5, 14, 56, 255, 11, 0, 2, 255, 8, 2, 3, 255, 2, 6, 0, 255, 12, 1, 2, 255, 10, 3, 4, 255, 7, 4, 2, 255, 7, 5, 2, 255, 7, 3, 1, 255, 8, 2, 0, 255, 14, 3, 2, 255, 16, 9, 6, 255, 8, 4, 1, 255, 12, 3, 1, 255, 13, 4, 2, 255, 15, 5, 3, 255, 18, 7, 5, 255, 15, 5, 3, 255, 17, 7, 4, 255, 19, 6, 3, 255, 18, 5, 0, 255, 23, 9, 1, 255, 27, 12, 3, 255, 32, 14, 4, 255, 33, 13, 5, 255, 30, 12, 4, 255, 31, 10, 3, 255, 39, 14, 5, 255, 30, 16, 2, 255, 31, 15, 1, 255, 39, 15, 2, 255, 36, 21, 4, 255, 35, 21, 4, 255, 37, 19, 3, 255, 38, 21, 3, 255, 44, 27, 5, 255, 44, 23, 2, 255, 45, 29, 5, 255, 50, 30, 0, 255, 59, 38, 6, 255, 56, 40, 3, 255, 65, 43, 5, 255, 71, 50, 7, 255, 74, 55, 6, 255, 75, 56, 20, 255, 78, 58, 33, 255, 81, 71, 39, 255, 71, 71, 55, 255, 76, 73, 57, 255, 113, 78, 54, 255, 93, 68, 32, 255, 77, 63, 16, 255, 80, 64, 9, 255, 89, 65, 13, 255, 132, 85, 13, 255, 158, 91, 6, 255, 164, 92, 10, 255, 167, 94, 5, 255, 180, 104, 2, 255, 180, 100, 3, 255, 177, 95, 7, 255, 165, 90, 3, 255, 148, 78, 3, 255, 124, 64, 3, 255, 106, 56, 5, 255, 91, 56, 8, 255, 82, 54, 1, 255, 112, 68, 8, 255, 113, 64, 3, 255, 99, 58, 5, 255, 98, 60, 1, 255, 99, 59, 1, 255, 98, 57, 6, 255, 96, 53, 9, 255, 95, 54, 4, 255, 91, 54, 2, 255, 97, 54, 5, 255, 97, 57, 4, 255, 99, 56, 4, 255, 95, 55, 1, 255, 102, 55, 2, 255, 108, 60, 5, 255, 103, 55, 6, 255, 106, 56, 7, 255, 101, 57, 3, 255, 97, 54, 6, 255, 99, 54, 3, 255, 95, 52, 2, 255, 87, 52, 2, 255, 101, 57, 6, 255, 92, 48, 4, 255, 88, 45, 7, 255, 100, 47, 8, 255, 96, 47, 5, 255, 84, 48, 5, 255, 92, 44, 6, 255, 97, 53, 5, 255, 112, 56, 3, 255, 118, 49, 1, 255, 127, 53, 1, 255, 125, 49, 5, 255, 119, 47, 4, 255, 120, 47, 3, 255, 114, 49, 1, 255, 113, 48, 2, 255, 118, 50, 7, 255, 126, 52, 9, 255, 114, 48, 6, 255, 111, 50, 4, 255, 128, 62, 7, 255, 131, 60, 5, 255, 128, 56, 4, 255, 123, 53, 3, 255, 108, 49, 5, 255, 116, 54, 5, 255, 128, 57, 2, 255, 122, 51, 3, 255, 122, 52, 6, 255, 143, 60, 5, 255, 147, 57, 2, 255, 125, 51, 7, 255, 106, 46, 7, 255, 93, 45, 2, 255, 97, 50, 4, 255, 94, 49, 8, 255, 88, 42, 6, 255, 107, 45, 11, 255, 119, 51, 6, 255, 113, 58, 4, 255, 105, 48, 12, 255, 105, 46, 11, 255, 112, 52, 3, 255, 116, 61, 4, 255, 117, 59, 6, 255, 116, 54, 10, 255, 111, 51, 1, 255, 134, 72, 13, 255, 149, 78, 6, 255, 156, 81, 7, 255, 155, 78, 12, 255, 161, 86, 15, 255, 168, 91, 18, 255, 175, 90, 23, 255, 180, 96, 13, 255, 168, 89, 2, 255, 167, 84, 9, 255, 175, 92, 8, 255, 183, 97, 13, 255, 186, 105, 16, 255, 184, 104, 7, 255, 183, 98, 19, 255, 173, 95, 9, 255, 167, 89, 8, 255, 183, 104, 16, 255, 189, 111, 11, 255, 187, 100, 6, 255, 177, 96, 15, 255, 182, 113, 18, 255, 186, 109, 14, 255, 181, 108, 10, 255, 185, 109, 19, 255, 180, 108, 7, 255, 175, 101, 6, 255, 176, 102, 14, 255, 174, 100, 4, 255, 163, 88, 14, 255, 188, 109, 23, 255, 195, 113, 14, 255, 187, 116, 11, 255, 191, 116, 6, 255, 192, 114, 14, 255, 190, 107, 16, 255, 191, 105, 8, 255, 190, 118, 10, 255, 191, 120, 9, 255, 193, 118, 6, 255, 188, 111, 8, 255, 179, 103, 7, 255, 195, 122, 8, 255, 199, 127, 7, 255, 202, 126, 7, 255, 200, 125, 15, 255, 193, 123, 12, 255, 205, 133, 16, 255, 202, 131, 11, 255, 204, 135, 9, 255, 201, 128, 6, 255, 205, 130, 15, 255, 207, 137, 4, 255, 209, 141, 16, 255, 210, 143, 10, 255, 208, 144, 9, 255, 211, 144, 14, 255, 211, 146, 6, 255, 210, 151, 19, 255, 208, 141, 17, 255, 198, 133, 7, 255, 198, 122, 12, 255, 198, 127, 12, 255, 193, 124, 4, 255, 196, 121, 6, 255, 185, 103, 15, 255, 182, 103, 10, 255, 203, 130, 13, 255, 208, 130, 14, 255, 209, 126, 11, 255, 203, 118, 7, 255, 207, 121, 6, 255, 207, 120, 6, 255, 206, 120, 8, 255, 200, 116, 14, 255, 204, 120, 14, 255, 205, 122, 9, 255, 205, 123, 7, 255, 214, 130, 12, 255, 208, 121, 12, 255, 194, 107, 6, 255, 191, 106, 3, 255, 207, 125, 6, 255, 211, 130, 11, 255, 213, 136, 4, 255, 211, 135, 9, 255, 208, 128, 2, 255, 209, 125, 5, 255, 208, 128, 4, 255, 205, 124, 6, 255, 203, 121, 4, 255, 204, 123, 2, 255, 196, 114, 5, 255, 178, 88, 7, 255, 177, 94, 2, 255, 183, 101, 6, 255, 194, 114, 13, 255, 200, 124, 3, 255, 183, 107, 7, 255, 177, 105, 12, 255, 198, 134, 7, 255, 209, 146, 6, 255, 205, 141, 10, 255, 208, 142, 5, 255, 202, 132, 1, 255, 198, 128, 3, 255, 199, 130, 3, 255, 197, 125, 12, 255, 196, 124, 10, 255, 202, 132, 1, 255, 208, 140, 5, 255, 202, 133, 11, 255, 193, 122, 3, 255, 200, 129, 6, 255, 199, 129, 3, 255, 202, 131, 12, 255, 203, 132, 8, 255, 201, 128, 1, 255, 205, 129, 10, 255, 204, 128, 18, 255, 200, 122, 23, 255, 199, 121, 16, 255, 199, 122, 5, 255, 198, 118, 8, 255, 196, 115, 7, 255, 200, 114, 3, 255, 195, 111, 2, 255, 198, 116, 10, 255, 189, 111, 3, 255, 188, 109, 1, 255, 194, 113, 8, 255, 185, 98, 5, 255, 175, 90, 4, 255, 163, 82, 3, 255, 164, 85, 7, 255, 178, 97, 6, 255, 186, 102, 6, 255, 177, 92, 6, 255, 158, 85, 4, 255, 146, 73, 3, 255, 151, 76, 0, 255, 143, 67, 2, 255, 144, 70, 13, 255, 142, 77, 13, 255, 141, 69, 9, 255, 170, 98, 5, 255, 171, 92, 7, 255, 189, 111, 9, 255, 199, 126, 3, 255, 198, 125, 7, 255, 198, 120, 20, 255, 196, 118, 9, 255, 194, 116, 4, 255, 196, 117, 9, 255, 199, 120, 10, 255, 203, 121, 13, 255, 204, 122, 6, 255, 205, 123, 12, 255, 202, 121, 6, 255, 203, 122, 3, 255, 201, 121, 3, 255, 195, 114, 1, 255, 194, 111, 5, 255, 191, 108, 4, 255, 190, 107, 6, 255, 192, 111, 1, 255, 193, 109, 13, 255, 194, 109, 17, 255, 193, 107, 11, 255, 191, 105, 4, 255, 190, 102, 14, 255, 191, 109, 9, 255, 200, 121, 5, 255, 205, 124, 5, 255, 205, 121, 2, 255, 201, 116, 8, 255, 195, 107, 14, 255, 190, 104, 5, 255, 198, 111, 10, 255, 190, 98, 12, 255, 166, 69, 2, 255, 162, 70, 2, 255, 153, 65, 6, 255, 156, 72, 1, 255, 158, 74, 2, 255, 147, 63, 6, 255, 146, 61, 5, 255, 148, 66, 6, 255, 141, 57, 12, 255, 140, 56, 7, 255, 141, 57, 3, 255, 134, 52, 2, 255, 132, 51, 6, 255, 131, 49, 0, 255, 139, 52, 4, 255, 147, 57, 4, 255, 147, 57, 0, 255, 140, 53, 10, 255, 137, 54, 1, 255, 128, 45, 5, 255, 126, 44, 2, 255, 120, 40, 2, 255, 104, 36, 2, 255, 101, 33, 4, 255, 107, 45, 3, 255, 109, 48, 2, 255, 121, 51, 9, 255, 135, 57, 5, 255, 136, 59, 6, 255, 139, 59, 1, 255, 147, 66, 2, 255, 147, 66, 6, 255, 150, 70, 1, 255, 159, 72, 1, 255, 160, 66, 4, 255, 174, 85, 3, 255, 186, 98, 1, 255, 190, 101, 2, 255, 190, 100, 4, 255, 189, 98, 4, 255, 180, 89, 1, 255, 181, 90, 1, 255, 187, 96, 5, 255, 179, 90, 1, 255, 178, 87, 3, 255, 179, 88, 5, 255, 182, 92, 2, 255, 182, 88, 2, 255, 177, 85, 3, 255, 175, 84, 4, 255, 172, 82, 4, 255, 171, 80, 2, 255, 172, 79, 0, 255, 175, 81, 1, 255, 175, 83, 1, 255, 177, 85, 4, 255, 175, 82, 2, 255, 1, 26, 53, 255, 3, 29, 61, 255, 0, 27, 60, 255, 0, 26, 64, 255, 3, 28, 61, 255, 6, 31, 62, 255, 1, 21, 46, 255, 0, 21, 44, 255, 0, 21, 44, 255, 0, 21, 44, 255, 3, 20, 48, 255, 4, 20, 53, 255, 1, 20, 55, 255, 2, 14, 29, 255, 2, 2, 6, 255, 0, 2, 4, 255, 0, 5, 19, 255, 0, 1, 9, 255, 1, 3, 12, 255, 1, 2, 7, 255, 2, 0, 19, 255, 0, 46, 205, 255, 31, 82, 162, 255, 32, 23, 0, 255, 21, 5, 12, 255, 26, 19, 172, 255, 1, 22, 107, 255, 6, 5, 0, 255, 12, 1, 5, 255, 9, 4, 4, 255, 6, 3, 4, 255, 11, 5, 5, 255, 8, 4, 4, 255, 7, 3, 2, 255, 6, 1, 0, 255, 10, 3, 1, 255, 12, 2, 2, 255, 20, 6, 5, 255, 13, 3, 2, 255, 11, 4, 1, 255, 15, 5, 2, 255, 20, 8, 4, 255, 19, 8, 3, 255, 18, 6, 1, 255, 16, 5, 0, 255, 13, 7, 1, 255, 17, 8, 2, 255, 20, 7, 1, 255, 26, 8, 1, 255, 33, 9, 1, 255, 41, 11, 3, 255, 37, 13, 2, 255, 34, 14, 1, 255, 34, 16, 3, 255, 40, 17, 4, 255, 40, 15, 3, 255, 36, 16, 3, 255, 34, 19, 3, 255, 36, 23, 3, 255, 35, 22, 1, 255, 38, 24, 3, 255, 42, 26, 5, 255, 53, 31, 8, 255, 50, 26, 4, 255, 50, 29, 5, 255, 59, 33, 2, 255, 60, 36, 4, 255, 59, 41, 3, 255, 63, 41, 4, 255, 70, 48, 6, 255, 74, 55, 4, 255, 82, 56, 12, 255, 76, 61, 30, 255, 80, 71, 37, 255, 87, 70, 51, 255, 110, 80, 60, 255, 97, 70, 53, 255, 79, 66, 29, 255, 83, 62, 11, 255, 91, 68, 16, 255, 151, 88, 25, 255, 167, 90, 9, 255, 166, 91, 5, 255, 176, 102, 3, 255, 171, 100, 0, 255, 177, 108, 1, 255, 175, 99, 3, 255, 156, 82, 5, 255, 129, 68, 5, 255, 105, 58, 7, 255, 85, 55, 7, 255, 82, 53, 6, 255, 91, 58, 7, 255, 91, 56, 1, 255, 109, 67, 3, 255, 115, 60, 1, 255, 105, 59, 7, 255, 98, 57, 2, 255, 93, 59, 2, 255, 91, 58, 2, 255, 96, 58, 4, 255, 98, 59, 3, 255, 96, 59, 2, 255, 95, 58, 1, 255, 95, 58, 1, 255, 95, 58, 5, 255, 94, 57, 4, 255, 101, 58, 3, 255, 106, 59, 1, 255, 104, 58, 1, 255, 100, 53, 1, 255, 97, 54, 3, 255, 91, 50, 5, 255, 84, 48, 1, 255, 82, 52, 3, 255, 85, 45, 3, 255, 94, 48, 4, 255, 84, 47, 3, 255, 79, 47, 1, 255, 103, 51, 2, 255, 119, 56, 4, 255, 119, 57, 5, 255, 119, 57, 3, 255, 134, 56, 6, 255, 136, 51, 5, 255, 123, 49, 2, 255, 120, 50, 9, 255, 121, 52, 2, 255, 137, 63, 4, 255, 143, 68, 7, 255, 140, 64, 7, 255, 145, 68, 7, 255, 160, 77, 4, 255, 156, 73, 3, 255, 138, 62, 2, 255, 138, 66, 3, 255, 152, 70, 2, 255, 151, 64, 8, 255, 140, 64, 4, 255, 141, 65, 3, 255, 141, 60, 9, 255, 135, 55, 8, 255, 125, 54, 10, 255, 117, 51, 2, 255, 122, 48, 5, 255, 103, 41, 11, 255, 101, 44, 9, 255, 100, 45, 4, 255, 96, 43, 6, 255, 94, 42, 7, 255, 101, 45, 8, 255, 96, 41, 4, 255, 104, 53, 6, 255, 132, 69, 16, 255, 118, 54, 5, 255, 110, 49, 3, 255, 106, 50, 4, 255, 114, 51, 8, 255, 111, 48, 8, 255, 105, 43, 6, 255, 107, 50, 5, 255, 98, 51, 5, 255, 93, 48, 2, 255, 98, 50, 6, 255, 109, 59, 13, 255, 120, 64, 8, 255, 136, 72, 3, 255, 131, 71, 0, 255, 138, 77, 7, 255, 147, 77, 8, 255, 153, 84, 10, 255, 150, 83, 8, 255, 153, 82, 10, 255, 152, 76, 11, 255, 161, 89, 9, 255, 163, 88, 15, 255, 146, 80, 5, 255, 163, 94, 15, 255, 165, 90, 13, 255, 155, 88, 10, 255, 165, 91, 9, 255, 163, 90, 7, 255, 161, 83, 9, 255, 168, 89, 6, 255, 171, 93, 15, 255, 171, 92, 15, 255, 166, 94, 12, 255, 172, 97, 11, 255, 168, 95, 14, 255, 172, 97, 12, 255, 165, 92, 17, 255, 158, 87, 9, 255, 145, 78, 10, 255, 169, 104, 10, 255, 169, 102, 5, 255, 160, 98, 16, 255, 177, 103, 14, 255, 183, 109, 10, 255, 155, 86, 7, 255, 165, 96, 16, 255, 173, 99, 13, 255, 173, 102, 15, 255, 164, 98, 10, 255, 160, 96, 8, 255, 160, 97, 4, 255, 169, 101, 15, 255, 172, 103, 13, 255, 176, 112, 8, 255, 180, 114, 7, 255, 182, 113, 6, 255, 172, 110, 12, 255, 174, 110, 12, 255, 177, 112, 4, 255, 185, 120, 16, 255, 183, 122, 4, 255, 184, 119, 9, 255, 192, 119, 13, 255, 190, 114, 8, 255, 192, 119, 2, 255, 198, 125, 9, 255, 199, 129, 6, 255, 195, 127, 4, 255, 191, 121, 14, 255, 180, 109, 20, 255, 173, 100, 13, 255, 182, 105, 3, 255, 192, 110, 12, 255, 184, 106, 9, 255, 185, 108, 11, 255, 190, 110, 12, 255, 197, 114, 4, 255, 204, 121, 11, 255, 196, 119, 6, 255, 190, 112, 8, 255, 198, 115, 12, 255, 201, 117, 8, 255, 198, 115, 8, 255, 201, 120, 13, 255, 208, 123, 10, 255, 207, 117, 5, 255, 206, 117, 3, 255, 211, 126, 8, 255, 199, 115, 8, 255, 196, 113, 10, 255, 203, 123, 11, 255, 210, 131, 6, 255, 208, 131, 3, 255, 212, 136, 5, 255, 209, 134, 9, 255, 205, 130, 1, 255, 209, 131, 2, 255, 209, 130, 8, 255, 210, 132, 3, 255, 211, 130, 11, 255, 197, 115, 11, 255, 188, 104, 8, 255, 192, 106, 7, 255, 181, 98, 4, 255, 188, 111, 3, 255, 207, 133, 5, 255, 188, 113, 10, 255, 178, 106, 14, 255, 206, 138, 27, 255, 206, 142, 5, 255, 203, 140, 6, 255, 203, 140, 7, 255, 198, 132, 3, 255, 190, 119, 3, 255, 201, 131, 11, 255, 204, 136, 13, 255, 205, 138, 8, 255, 203, 134, 7, 255, 200, 130, 13, 255, 203, 133, 10, 255, 204, 134, 6, 255, 202, 133, 9, 255, 202, 131, 15, 255, 203, 134, 9, 255, 202, 134, 7, 255, 201, 129, 13, 255, 199, 127, 14, 255, 199, 125, 6, 255, 201, 126, 7, 255, 198, 121, 15, 255, 196, 121, 9, 255, 195, 119, 7, 255, 196, 117, 5, 255, 197, 116, 7, 255, 194, 112, 5, 255, 194, 112, 4, 255, 196, 114, 7, 255, 196, 113, 6, 255, 197, 112, 8, 255, 188, 104, 6, 255, 173, 87, 0, 255, 175, 93, 3, 255, 168, 88, 0, 255, 166, 81, 0, 255, 169, 79, 2, 255, 170, 84, 9, 255, 170, 88, 3, 255, 170, 88, 4, 255, 162, 82, 7, 255, 150, 71, 6, 255, 144, 66, 2, 255, 137, 65, 7, 255, 166, 108, 13, 255, 183, 125, 14, 255, 176, 109, 6, 255, 161, 80, 6, 255, 183, 101, 6, 255, 198, 117, 8, 255, 199, 118, 2, 255, 197, 116, 11, 255, 195, 117, 6, 255, 194, 117, 3, 255, 196, 120, 4, 255, 197, 119, 2, 255, 200, 120, 5, 255, 202, 121, 1, 255, 202, 122, 1, 255, 202, 122, 3, 255, 199, 117, 3, 255, 195, 114, 2, 255, 195, 112, 4, 255, 193, 110, 2, 255, 192, 107, 3, 255, 190, 103, 10, 255, 190, 105, 5, 255, 194, 110, 8, 255, 194, 111, 4, 255, 192, 109, 5, 255, 193, 110, 9, 255, 197, 115, 7, 255, 203, 124, 9, 255, 205, 125, 9, 255, 204, 119, 6, 255, 202, 114, 7, 255, 198, 111, 9, 255, 195, 108, 6, 255, 195, 107, 4, 255, 197, 106, 11, 255, 165, 76, 12, 255, 151, 64, 3, 255, 154, 67, 2, 255, 157, 65, 6, 255, 163, 73, 6, 255, 154, 72, 3, 255, 139, 61, 0, 255, 138, 60, 0, 255, 143, 63, 5, 255, 140, 57, 7, 255, 137, 58, 9, 255, 138, 58, 1, 255, 136, 55, 0, 255, 132, 48, 2, 255, 134, 49, 2, 255, 139, 50, 1, 255, 142, 59, 3, 255, 135, 53, 1, 255, 131, 48, 7, 255, 132, 51, 4, 255, 125, 44, 4, 255, 124, 41, 7, 255, 122, 41, 8, 255, 113, 46, 2, 255, 116, 44, 2, 255, 130, 55, 2, 255, 135, 61, 0, 255, 137, 60, 2, 255, 142, 62, 3, 255, 146, 65, 4, 255, 152, 68, 1, 255, 158, 69, 5, 255, 157, 68, 4, 255, 161, 73, 2, 255, 160, 69, 1, 255, 172, 78, 3, 255, 188, 98, 7, 255, 191, 102, 2, 255, 191, 102, 2, 255, 191, 101, 3, 255, 190, 100, 2, 255, 186, 97, 2, 255, 181, 88, 3, 255, 177, 84, 3, 255, 175, 84, 6, 255, 168, 76, 1, 255, 171, 80, 0, 255, 179, 89, 0, 255, 180, 89, 2, 255, 177, 87, 2, 255, 173, 82, 0, 255, 175, 84, 1, 255, 176, 84, 3, 255, 174, 82, 2, 255, 175, 82, 1, 255, 179, 88, 2, 255, 179, 88, 4, 255, 175, 84, 1, 255, 4, 25, 66, 255, 3, 23, 66, 255, 1, 26, 60, 255, 2, 27, 64, 255, 0, 25, 57, 255, 2, 27, 57, 255, 1, 23, 50, 255, 1, 22, 44, 255, 1, 22, 45, 255, 2, 21, 51, 255, 2, 20, 47, 255, 0, 17, 41, 255, 0, 16, 46, 255, 2, 18, 54, 255, 3, 6, 23, 255, 0, 2, 12, 255, 3, 0, 12, 255, 4, 0, 12, 255, 4, 2, 13, 255, 3, 0, 11, 255, 0, 34, 171, 255, 24, 84, 194, 255, 52, 32, 8, 255, 22, 11, 0, 255, 27, 22, 136, 255, 4, 24, 137, 255, 11, 1, 0, 255, 5, 5, 0, 255, 9, 2, 0, 255, 13, 7, 5, 255, 7, 4, 4, 255, 10, 5, 5, 255, 9, 5, 2, 255, 9, 5, 2, 255, 8, 3, 1, 255, 10, 2, 1, 255, 19, 8, 6, 255, 18, 4, 3, 255, 14, 2, 1, 255, 13, 3, 2, 255, 17, 6, 2, 255, 23, 10, 5, 255, 19, 6, 1, 255, 23, 9, 4, 255, 22, 9, 3, 255, 21, 7, 2, 255, 23, 10, 3, 255, 26, 10, 4, 255, 31, 12, 5, 255, 35, 13, 5, 255, 37, 12, 1, 255, 39, 16, 0, 255, 35, 15, 0, 255, 37, 17, 1, 255, 41, 18, 5, 255, 41, 16, 3, 255, 39, 19, 5, 255, 31, 17, 0, 255, 43, 25, 5, 255, 44, 24, 4, 255, 34, 24, 1, 255, 42, 27, 2, 255, 49, 25, 1, 255, 46, 29, 2, 255, 57, 32, 4, 255, 65, 35, 2, 255, 63, 38, 4, 255, 65, 44, 4, 255, 65, 43, 4, 255, 67, 48, 6, 255, 78, 57, 7, 255, 80, 56, 5, 255, 76, 61, 15, 255, 81, 60, 27, 255, 115, 75, 55, 255, 106, 78, 57, 255, 79, 75, 47, 255, 84, 71, 14, 255, 113, 77, 9, 255, 144, 79, 10, 255, 166, 83, 7, 255, 163, 96, 9, 255, 176, 98, 7, 255, 176, 99, 2, 255, 171, 95, 3, 255, 160, 87, 3, 255, 128, 68, 6, 255, 99, 57, 8, 255, 88, 59, 4, 255, 88, 58, 1, 255, 93, 59, 5, 255, 94, 60, 3, 255, 99, 57, 1, 255, 92, 57, 0, 255, 112, 65, 5, 255, 113, 61, 6, 255, 93, 55, 3, 255, 94, 58, 6, 255, 90, 60, 5, 255, 96, 59, 2, 255, 97, 60, 2, 255, 96, 56, 0, 255, 97, 57, 3, 255, 94, 60, 3, 255, 101, 59, 3, 255, 99, 59, 2, 255, 98, 55, 2, 255, 97, 54, 5, 255, 96, 46, 5, 255, 90, 49, 7, 255, 87, 49, 3, 255, 103, 55, 6, 255, 108, 59, 10, 255, 99, 57, 2, 255, 102, 54, 4, 255, 109, 55, 6, 255, 122, 58, 4, 255, 132, 61, 2, 255, 146, 68, 6, 255, 158, 68, 5, 255, 153, 59, 3, 255, 146, 59, 8, 255, 126, 55, 4, 255, 121, 42, 4, 255, 118, 53, 1, 255, 129, 62, 5, 255, 127, 51, 6, 255, 134, 60, 6, 255, 161, 75, 9, 255, 177, 77, 1, 255, 174, 80, 1, 255, 177, 83, 6, 255, 173, 80, 3, 255, 162, 66, 5, 255, 143, 57, 4, 255, 131, 59, 5, 255, 130, 56, 9, 255, 129, 50, 5, 255, 146, 65, 5, 255, 163, 74, 8, 255, 143, 55, 2, 255, 123, 48, 5, 255, 104, 52, 4, 255, 102, 51, 5, 255, 99, 44, 10, 255, 85, 35, 9, 255, 87, 44, 4, 255, 91, 46, 6, 255, 96, 44, 4, 255, 101, 49, 5, 255, 100, 44, 8, 255, 93, 41, 7, 255, 118, 59, 4, 255, 140, 69, 2, 255, 126, 64, 4, 255, 123, 58, 3, 255, 127, 62, 2, 255, 135, 62, 1, 255, 132, 58, 6, 255, 125, 51, 11, 255, 122, 48, 7, 255, 114, 55, 1, 255, 107, 54, 8, 255, 98, 46, 5, 255, 99, 49, 9, 255, 104, 54, 4, 255, 114, 56, 3, 255, 104, 48, 6, 255, 113, 60, 16, 255, 124, 67, 10, 255, 114, 54, 10, 255, 115, 56, 14, 255, 128, 68, 5, 255, 129, 69, 8, 255, 122, 61, 3, 255, 129, 58, 11, 255, 105, 49, 12, 255, 103, 53, 7, 255, 114, 62, 10, 255, 125, 67, 15, 255, 142, 77, 15, 255, 139, 79, 9, 255, 120, 64, 4, 255, 122, 63, 4, 255, 116, 51, 14, 255, 120, 57, 15, 255, 143, 82, 21, 255, 129, 71, 7, 255, 135, 72, 13, 255, 125, 64, 9, 255, 139, 81, 7, 255, 129, 70, 11, 255, 100, 56, 7, 255, 117, 60, 7, 255, 122, 69, 10, 255, 120, 72, 10, 255, 153, 83, 12, 255, 129, 66, 6, 255, 109, 62, 3, 255, 127, 77, 12, 255, 135, 80, 9, 255, 132, 77, 5, 255, 134, 79, 12, 255, 135, 77, 2, 255, 142, 81, 3, 255, 141, 79, 11, 255, 142, 79, 11, 255, 152, 92, 13, 255, 168, 101, 10, 255, 180, 104, 7, 255, 173, 103, 4, 255, 172, 99, 8, 255, 167, 93, 10, 255, 175, 104, 16, 255, 178, 105, 6, 255, 170, 92, 13, 255, 169, 93, 20, 255, 161, 90, 5, 255, 173, 96, 7, 255, 184, 109, 15, 255, 178, 103, 6, 255, 182, 98, 3, 255, 181, 99, 15, 255, 181, 95, 15, 255, 176, 96, 11, 255, 183, 97, 13, 255, 187, 107, 4, 255, 188, 113, 10, 255, 191, 115, 7, 255, 193, 105, 5, 255, 185, 94, 3, 255, 171, 83, 13, 255, 190, 108, 17, 255, 195, 111, 11, 255, 197, 108, 11, 255, 189, 107, 11, 255, 191, 115, 8, 255, 191, 105, 2, 255, 179, 88, 6, 255, 180, 89, 15, 255, 197, 112, 9, 255, 191, 103, 4, 255, 193, 106, 8, 255, 200, 119, 10, 255, 207, 131, 10, 255, 210, 137, 6, 255, 210, 137, 3, 255, 208, 135, 4, 255, 206, 132, 8, 255, 209, 134, 8, 255, 212, 135, 4, 255, 200, 120, 5, 255, 201, 121, 3, 255, 201, 119, 8, 255, 192, 109, 6, 255, 194, 110, 10, 255, 187, 103, 3, 255, 178, 94, 5, 255, 180, 102, 6, 255, 187, 115, 2, 255, 190, 121, 7, 255, 201, 138, 9, 255, 208, 144, 6, 255, 209, 142, 7, 255, 205, 141, 2, 255, 205, 139, 8, 255, 190, 121, 3, 255, 194, 123, 8, 255, 210, 140, 9, 255, 207, 138, 7, 255, 204, 135, 4, 255, 202, 135, 2, 255, 198, 129, 12, 255, 202, 129, 20, 255, 201, 129, 7, 255, 202, 130, 10, 255, 202, 131, 19, 255, 205, 136, 15, 255, 201, 133, 7, 255, 198, 126, 15, 255, 199, 125, 21, 255, 195, 122, 9, 255, 197, 121, 11, 255, 198, 120, 19, 255, 196, 120, 11, 255, 195, 118, 10, 255, 194, 119, 5, 255, 194, 118, 4, 255, 195, 120, 5, 255, 205, 127, 7, 255, 197, 117, 0, 255, 193, 109, 1, 255, 186, 100, 3, 255, 188, 101, 3, 255, 182, 95, 7, 255, 174, 86, 3, 255, 176, 88, 6, 255, 162, 74, 6, 255, 151, 68, 2, 255, 150, 70, 0, 255, 150, 72, 5, 255, 152, 77, 1, 255, 161, 82, 1, 255, 143, 67, 6, 255, 124, 59, 2, 255, 130, 66, 12, 255, 185, 121, 12, 255, 215, 151, 6, 255, 183, 111, 8, 255, 182, 110, 8, 255, 181, 113, 1, 255, 186, 113, 3, 255, 195, 116, 10, 255, 196, 114, 11, 255, 196, 113, 14, 255, 196, 117, 9, 255, 197, 119, 8, 255, 197, 118, 7, 255, 199, 118, 10, 255, 200, 119, 7, 255, 200, 119, 0, 255, 197, 117, 1, 255, 194, 111, 3, 255, 193, 108, 4, 255, 192, 106, 2, 255, 191, 105, 1, 255, 190, 103, 0, 255, 190, 102, 3, 255, 190, 103, 6, 255, 191, 105, 9, 255, 193, 110, 9, 255, 198, 117, 8, 255, 201, 121, 13, 255, 202, 122, 8, 255, 204, 123, 4, 255, 204, 119, 8, 255, 202, 115, 6, 255, 201, 113, 9, 255, 195, 109, 3, 255, 196, 108, 1, 255, 197, 105, 16, 255, 171, 78, 7, 255, 148, 60, 5, 255, 157, 75, 9, 255, 158, 74, 9, 255, 159, 70, 5, 255, 158, 72, 5, 255, 149, 64, 2, 255, 147, 64, 1, 255, 146, 65, 4, 255, 141, 60, 6, 255, 138, 61, 5, 255, 136, 58, 3, 255, 137, 55, 1, 255, 141, 55, 4, 255, 141, 54, 4, 255, 137, 52, 2, 255, 134, 48, 2, 255, 126, 46, 3, 255, 120, 42, 3, 255, 125, 46, 1, 255, 126, 47, 2, 255, 127, 47, 5, 255, 122, 42, 6, 255, 121, 46, 3, 255, 117, 51, 2, 255, 134, 61, 2, 255, 141, 61, 2, 255, 140, 59, 2, 255, 143, 63, 4, 255, 146, 66, 2, 255, 153, 69, 1, 255, 164, 74, 3, 255, 165, 70, 2, 255, 169, 73, 0, 255, 170, 77, 2, 255, 171, 77, 2, 255, 176, 84, 0, 255, 189, 99, 0, 255, 191, 102, 0, 255, 191, 102, 3, 255, 190, 100, 2, 255, 188, 98, 0, 255, 190, 100, 4, 255, 182, 91, 3, 255, 174, 83, 0, 255, 177, 86, 6, 255, 172, 79, 4, 255, 171, 79, 2, 255, 173, 82, 1, 255, 169, 80, 0, 255, 170, 81, 1, 255, 173, 82, 0, 255, 173, 82, 0, 255, 173, 80, 2, 255, 173, 81, 3, 255, 175, 82, 4, 255, 175, 83, 1, 255, 176, 85, 3, 255, 173, 82, 1, 255, 1, 21, 48, 255, 2, 23, 57, 255, 4, 27, 61, 255, 3, 26, 67, 255, 4, 28, 65, 255, 0, 23, 54, 255, 0, 21, 56, 255, 2, 21, 49, 255, 3, 21, 47, 255, 3, 19, 50, 255, 1, 18, 42, 255, 0, 17, 32, 255, 1, 17, 33, 255, 3, 15, 45, 255, 1, 7, 31, 255, 4, 1, 13, 255, 1, 0, 14, 255, 2, 2, 18, 255, 3, 1, 2, 255, 0, 11, 117, 255, 18, 88, 215, 255, 47, 45, 27, 255, 26, 8, 0, 255, 29, 22, 97, 255, 6, 25, 165, 255, 7, 2, 4, 255, 10, 1, 4, 255, 6, 4, 3, 255, 11, 3, 3, 255, 12, 3, 0, 255, 13, 4, 4, 255, 14, 3, 1, 255, 11, 3, 1, 255, 11, 3, 2, 255, 14, 6, 4, 255, 15, 7, 5, 255, 15, 7, 4, 255, 14, 5, 2, 255, 16, 5, 3, 255, 16, 5, 3, 255, 17, 4, 1, 255, 21, 7, 4, 255, 17, 3, 0, 255, 21, 9, 3, 255, 22, 9, 2, 255, 26, 8, 2, 255, 24, 8, 2, 255, 26, 10, 2, 255, 32, 11, 2, 255, 37, 16, 3, 255, 35, 17, 1, 255, 41, 19, 5, 255, 37, 18, 4, 255, 41, 16, 3, 255, 42, 15, 2, 255, 33, 19, 0, 255, 37, 22, 3, 255, 42, 18, 1, 255, 38, 18, 1, 255, 39, 24, 3, 255, 46, 26, 5, 255, 45, 28, 3, 255, 43, 28, 0, 255, 54, 32, 4, 255, 61, 38, 5, 255, 69, 37, 2, 255, 64, 41, 5, 255, 67, 47, 5, 255, 66, 45, 5, 255, 66, 49, 7, 255, 78, 58, 9, 255, 71, 60, 7, 255, 79, 61, 10, 255, 101, 70, 13, 255, 112, 74, 37, 255, 81, 65, 53, 255, 86, 74, 26, 255, 130, 73, 16, 255, 146, 75, 8, 255, 160, 91, 4, 255, 170, 96, 4, 255, 162, 97, 6, 255, 169, 93, 5, 255, 155, 84, 2, 255, 126, 70, 7, 255, 93, 60, 6, 255, 80, 53, 6, 255, 85, 54, 4, 255, 89, 59, 3, 255, 89, 57, 3, 255, 93, 59, 3, 255, 93, 60, 3, 255, 89, 60, 1, 255, 92, 57, 2, 255, 112, 66, 5, 255, 115, 63, 2, 255, 106, 56, 2, 255, 104, 55, 8, 255, 89, 54, 5, 255, 90, 53, 4, 255, 97, 58, 8, 255, 95, 57, 7, 255, 97, 57, 8, 255, 91, 56, 1, 255, 99, 57, 1, 255, 95, 56, 1, 255, 103, 57, 2, 255, 112, 70, 5, 255, 122, 73, 3, 255, 135, 80, 12, 255, 144, 83, 9, 255, 158, 84, 7, 255, 161, 79, 3, 255, 156, 70, 1, 255, 160, 69, 7, 255, 166, 73, 3, 255, 168, 73, 1, 255, 170, 77, 2, 255, 167, 72, 4, 255, 169, 72, 2, 255, 167, 73, 1, 255, 161, 72, 2, 255, 151, 66, 2, 255, 159, 73, 4, 255, 171, 84, 4, 255, 161, 71, 4, 255, 147, 65, 4, 255, 156, 69, 4, 255, 171, 80, 2, 255, 174, 84, 4, 255, 166, 74, 4, 255, 153, 58, 5, 255, 147, 54, 8, 255, 140, 51, 4, 255, 125, 52, 7, 255, 111, 49, 4, 255, 101, 42, 10, 255, 119, 56, 9, 255, 136, 62, 8, 255, 108, 40, 9, 255, 79, 41, 2, 255, 90, 44, 4, 255, 82, 37, 2, 255, 70, 37, 4, 255, 68, 41, 7, 255, 83, 39, 5, 255, 76, 39, 3, 255, 79, 41, 8, 255, 86, 45, 11, 255, 83, 45, 4, 255, 88, 46, 8, 255, 86, 45, 10, 255, 96, 47, 2, 255, 130, 67, 11, 255, 123, 59, 7, 255, 117, 56, 4, 255, 120, 55, 12, 255, 127, 59, 10, 255, 133, 62, 3, 255, 134, 58, 4, 255, 123, 54, 7, 255, 124, 51, 5, 255, 125, 56, 5, 255, 129, 62, 7, 255, 125, 53, 13, 255, 123, 54, 10, 255, 124, 58, 6, 255, 119, 57, 6, 255, 113, 55, 8, 255, 113, 52, 10, 255, 109, 51, 7, 255, 110, 54, 7, 255, 112, 54, 4, 255, 113, 57, 13, 255, 102, 52, 7, 255, 98, 47, 9, 255, 101, 50, 7, 255, 115, 62, 8, 255, 115, 59, 11, 255, 121, 64, 7, 255, 138, 76, 8, 255, 124, 63, 7, 255, 89, 37, 8, 255, 99, 48, 10, 255, 108, 57, 9, 255, 108, 59, 13, 255, 141, 82, 18, 255, 127, 70, 8, 255, 130, 71, 8, 255, 118, 64, 16, 255, 137, 77, 11, 255, 135, 67, 7, 255, 102, 58, 5, 255, 100, 48, 8, 255, 110, 59, 12, 255, 127, 69, 10, 255, 130, 69, 8, 255, 116, 64, 11, 255, 96, 51, 5, 255, 97, 51, 5, 255, 96, 49, 8, 255, 100, 51, 11, 255, 106, 53, 10, 255, 118, 61, 14, 255, 127, 69, 6, 255, 122, 65, 8, 255, 114, 60, 4, 255, 119, 57, 9, 255, 127, 60, 3, 255, 124, 61, 3, 255, 126, 66, 10, 255, 130, 66, 10, 255, 138, 72, 12, 255, 141, 71, 10, 255, 137, 68, 13, 255, 138, 72, 9, 255, 136, 73, 11, 255, 142, 79, 9, 255, 151, 79, 16, 255, 136, 69, 5, 255, 137, 70, 1, 255, 149, 74, 8, 255, 141, 72, 14, 255, 144, 74, 5, 255, 152, 76, 9, 255, 144, 72, 11, 255, 149, 75, 6, 255, 162, 76, 7, 255, 166, 75, 8, 255, 164, 83, 6, 255, 160, 83, 9, 255, 177, 100, 19, 255, 175, 98, 10, 255, 173, 86, 13, 255, 185, 95, 6, 255, 187, 101, 6, 255, 181, 98, 9, 255, 166, 77, 9, 255, 165, 76, 13, 255, 186, 103, 11, 255, 191, 108, 10, 255, 187, 105, 4, 255, 203, 119, 16, 255, 209, 135, 7, 255, 209, 136, 1, 255, 205, 132, 3, 255, 213, 138, 16, 255, 203, 127, 15, 255, 191, 112, 6, 255, 201, 120, 9, 255, 210, 131, 3, 255, 200, 119, 2, 255, 197, 112, 6, 255, 189, 104, 12, 255, 188, 103, 13, 255, 182, 98, 6, 255, 174, 89, 5, 255, 180, 98, 3, 255, 183, 106, 11, 255, 185, 110, 18, 255, 203, 135, 7, 255, 209, 144, 2, 255, 198, 131, 3, 255, 191, 120, 6, 255, 202, 134, 4, 255, 212, 142, 9, 255, 201, 127, 8, 255, 199, 124, 4, 255, 199, 122, 4, 255, 201, 123, 2, 255, 207, 135, 6, 255, 202, 130, 14, 255, 203, 133, 12, 255, 196, 125, 7, 255, 199, 127, 10, 255, 202, 128, 22, 255, 202, 129, 11, 255, 198, 126, 11, 255, 198, 125, 17, 255, 200, 128, 7, 255, 197, 123, 4, 255, 196, 119, 7, 255, 198, 122, 10, 255, 198, 120, 18, 255, 198, 119, 15, 255, 197, 121, 9, 255, 197, 121, 10, 255, 196, 124, 4, 255, 200, 131, 5, 255, 206, 132, 5, 255, 205, 127, 5, 255, 197, 115, 7, 255, 183, 98, 4, 255, 174, 90, 0, 255, 173, 84, 9, 255, 164, 78, 6, 255, 155, 78, 1, 255, 153, 72, 4, 255, 160, 78, 3, 255, 175, 97, 1, 255, 172, 98, 6, 255, 159, 78, 7, 255, 167, 85, 10, 255, 151, 81, 11, 255, 116, 61, 1, 255, 123, 61, 6, 255, 173, 95, 9, 255, 199, 135, 2, 255, 196, 131, 4, 255, 197, 125, 4, 255, 186, 109, 6, 255, 185, 106, 2, 255, 192, 110, 13, 255, 195, 112, 10, 255, 197, 115, 10, 255, 196, 116, 5, 255, 196, 119, 2, 255, 197, 119, 4, 255, 199, 117, 5, 255, 198, 115, 6, 255, 197, 111, 8, 255, 193, 107, 4, 255, 190, 104, 1, 255, 190, 104, 3, 255, 189, 103, 3, 255, 190, 102, 5, 255, 189, 101, 2, 255, 187, 98, 3, 255, 187, 98, 4, 255, 188, 102, 5, 255, 194, 110, 10, 255, 201, 120, 9, 255, 204, 123, 16, 255, 205, 122, 13, 255, 201, 116, 3, 255, 201, 115, 6, 255, 201, 115, 3, 255, 198, 114, 6, 255, 193, 112, 2, 255, 193, 106, 1, 255, 168, 77, 10, 255, 156, 69, 2, 255, 163, 75, 7, 255, 156, 66, 10, 255, 150, 59, 6, 255, 146, 62, 0, 255, 151, 69, 7, 255, 154, 68, 9, 255, 153, 67, 3, 255, 148, 63, 4, 255, 143, 59, 7, 255, 142, 61, 4, 255, 143, 61, 5, 255, 139, 50, 1, 255, 140, 48, 2, 255, 143, 56, 6, 255, 134, 52, 2, 255, 131, 48, 4, 255, 129, 50, 4, 255, 121, 44, 5, 255, 124, 47, 4, 255, 122, 45, 1, 255, 124, 50, 0, 255, 121, 48, 6, 255, 118, 47, 2, 255, 133, 59, 11, 255, 140, 63, 3, 255, 144, 63, 0, 255, 148, 66, 5, 255, 155, 69, 6, 255, 161, 73, 0, 255, 163, 73, 6, 255, 164, 70, 7, 255, 176, 82, 1, 255, 188, 94, 3, 255, 180, 87, 1, 255, 180, 89, 2, 255, 186, 97, 5, 255, 192, 105, 3, 255, 191, 103, 0, 255, 190, 100, 4, 255, 189, 97, 3, 255, 187, 92, 0, 255, 189, 94, 2, 255, 185, 94, 3, 255, 181, 91, 0, 255, 179, 90, 1, 255, 179, 89, 1, 255, 177, 87, 1, 255, 174, 83, 1, 255, 172, 83, 2, 255, 172, 83, 1, 255, 175, 84, 1, 255, 177, 86, 2, 255, 177, 84, 3, 255, 172, 81, 2, 255, 168, 76, 0, 255, 170, 77, 1, 255, 171, 78, 2, 255, 170, 78, 1, 255, 1, 23, 58, 255, 2, 25, 59, 255, 0, 24, 57, 255, 0, 26, 57, 255, 0, 26, 62, 255, 0, 26, 59, 255, 2, 24, 60, 255, 4, 24, 52, 255, 3, 20, 42, 255, 0, 16, 38, 255, 0, 16, 38, 255, 4, 15, 38, 255, 4, 14, 37, 255, 3, 6, 27, 255, 0, 1, 8, 255, 4, 2, 12, 255, 0, 3, 12, 255, 0, 1, 0, 255, 0, 4, 82, 255, 18, 71, 223, 255, 51, 55, 46, 255, 23, 10, 0, 255, 18, 21, 66, 255, 10, 32, 189, 255, 8, 3, 32, 255, 10, 4, 0, 255, 9, 7, 4, 255, 3, 6, 4, 255, 10, 4, 6, 255, 11, 3, 3, 255, 12, 6, 8, 255, 14, 4, 3, 255, 13, 3, 1, 255, 14, 4, 3, 255, 16, 6, 4, 255, 18, 7, 4, 255, 14, 5, 1, 255, 14, 6, 0, 255, 17, 5, 1, 255, 25, 10, 6, 255, 22, 7, 2, 255, 25, 9, 4, 255, 25, 10, 4, 255, 22, 6, 1, 255, 21, 8, 1, 255, 21, 9, 2, 255, 23, 10, 2, 255, 32, 12, 2, 255, 40, 12, 1, 255, 45, 16, 3, 255, 45, 21, 4, 255, 39, 13, 1, 255, 38, 17, 3, 255, 46, 17, 5, 255, 47, 17, 4, 255, 33, 21, 0, 255, 38, 23, 2, 255, 46, 22, 5, 255, 37, 23, 4, 255, 39, 25, 4, 255, 43, 23, 2, 255, 52, 29, 3, 255, 56, 30, 2, 255, 67, 35, 5, 255, 63, 41, 2, 255, 74, 41, 4, 255, 63, 42, 3, 255, 68, 45, 2, 255, 68, 46, 2, 255, 67, 48, 5, 255, 70, 56, 1, 255, 70, 59, 1, 255, 93, 69, 14, 255, 104, 65, 17, 255, 75, 62, 20, 255, 94, 71, 21, 255, 147, 80, 15, 255, 163, 80, 8, 255, 156, 84, 7, 255, 164, 90, 8, 255, 162, 82, 7, 255, 152, 75, 8, 255, 125, 60, 3, 255, 90, 55, 6, 255, 84, 54, 6, 255, 85, 56, 0, 255, 87, 62, 0, 255, 86, 61, 0, 255, 91, 61, 1, 255, 92, 60, 4, 255, 90, 57, 2, 255, 88, 56, 3, 255, 87, 59, 5, 255, 88, 59, 7, 255, 114, 65, 6, 255, 113, 63, 3, 255, 96, 59, 6, 255, 97, 59, 3, 255, 93, 60, 4, 255, 97, 54, 3, 255, 92, 58, 6, 255, 82, 55, 5, 255, 97, 58, 4, 255, 111, 67, 4, 255, 133, 82, 6, 255, 154, 95, 7, 255, 169, 98, 5, 255, 174, 94, 5, 255, 176, 84, 3, 255, 174, 78, 2, 255, 169, 77, 1, 255, 166, 72, 1, 255, 169, 77, 2, 255, 167, 77, 3, 255, 167, 75, 2, 255, 172, 76, 5, 255, 169, 75, 1, 255, 169, 75, 1, 255, 172, 78, 2, 255, 177, 83, 1, 255, 174, 83, 2, 255, 172, 84, 4, 255, 177, 82, 9, 255, 172, 83, 9, 255, 168, 77, 0, 255, 177, 77, 2, 255, 169, 78, 2, 255, 157, 72, 0, 255, 151, 69, 1, 255, 141, 52, 2, 255, 125, 51, 9, 255, 118, 57, 9, 255, 101, 48, 1, 255, 96, 52, 3, 255, 88, 47, 3, 255, 79, 45, 3, 255, 88, 51, 5, 255, 100, 53, 5, 255, 86, 44, 5, 255, 81, 40, 12, 255, 87, 52, 10, 255, 88, 48, 7, 255, 88, 42, 4, 255, 88, 45, 6, 255, 85, 43, 6, 255, 69, 36, 1, 255, 80, 41, 6, 255, 85, 46, 5, 255, 77, 43, 7, 255, 78, 46, 10, 255, 91, 48, 8, 255, 92, 47, 6, 255, 91, 48, 7, 255, 105, 56, 12, 255, 108, 55, 3, 255, 107, 61, 4, 255, 99, 48, 10, 255, 102, 49, 10, 255, 111, 55, 4, 255, 114, 55, 6, 255, 121, 54, 3, 255, 128, 52, 12, 255, 126, 53, 4, 255, 136, 60, 1, 255, 141, 57, 3, 255, 133, 57, 4, 255, 126, 58, 10, 255, 117, 55, 7, 255, 109, 50, 2, 255, 104, 44, 2, 255, 102, 46, 8, 255, 97, 43, 9, 255, 97, 42, 15, 255, 106, 50, 9, 255, 139, 71, 7, 255, 115, 54, 11, 255, 103, 53, 10, 255, 109, 57, 0, 255, 108, 46, 1, 255, 100, 48, 2, 255, 113, 59, 12, 255, 127, 66, 15, 255, 107, 50, 6, 255, 105, 54, 6, 255, 109, 50, 5, 255, 106, 48, 8, 255, 109, 57, 8, 255, 126, 71, 14, 255, 133, 65, 7, 255, 163, 87, 7, 255, 135, 67, 7, 255, 107, 58, 8, 255, 93, 45, 8, 255, 87, 42, 2, 255, 92, 52, 8, 255, 135, 76, 10, 255, 144, 74, 12, 255, 133, 72, 9, 255, 120, 71, 5, 255, 105, 52, 8, 255, 109, 57, 12, 255, 112, 60, 10, 255, 107, 55, 8, 255, 114, 63, 6, 255, 125, 74, 9, 255, 121, 71, 10, 255, 112, 69, 2, 255, 111, 64, 9, 255, 105, 60, 10, 255, 93, 55, 10, 255, 96, 56, 7, 255, 102, 57, 6, 255, 104, 59, 0, 255, 102, 53, 1, 255, 106, 56, 6, 255, 117, 64, 10, 255, 115, 58, 1, 255, 124, 67, 5, 255, 117, 62, 13, 255, 111, 55, 14, 255, 120, 64, 6, 255, 134, 70, 8, 255, 131, 66, 9, 255, 131, 70, 6, 255, 129, 70, 12, 255, 129, 69, 9, 255, 133, 74, 10, 255, 136, 74, 12, 255, 136, 74, 9, 255, 133, 69, 11, 255, 152, 78, 17, 255, 171, 93, 10, 255, 155, 81, 0, 255, 154, 80, 6, 255, 162, 87, 13, 255, 167, 89, 10, 255, 153, 69, 15, 255, 161, 83, 6, 255, 186, 106, 8, 255, 191, 109, 2, 255, 193, 111, 4, 255, 203, 127, 8, 255, 203, 131, 8, 255, 210, 137, 13, 255, 210, 138, 8, 255, 211, 140, 1, 255, 216, 143, 7, 255, 208, 130, 4, 255, 199, 116, 4, 255, 203, 120, 6, 255, 199, 116, 7, 255, 193, 105, 10, 255, 191, 106, 4, 255, 184, 100, 1, 255, 183, 99, 13, 255, 173, 91, 4, 255, 177, 100, 8, 255, 190, 113, 12, 255, 187, 112, 6, 255, 200, 131, 13, 255, 204, 137, 6, 255, 196, 125, 7, 255, 182, 108, 5, 255, 193, 119, 11, 255, 194, 119, 14, 255, 197, 120, 8, 255, 193, 112, 11, 255, 186, 104, 5, 255, 186, 104, 1, 255, 198, 120, 10, 255, 206, 132, 11, 255, 204, 132, 8, 255, 201, 131, 10, 255, 197, 125, 12, 255, 203, 132, 7, 255, 202, 130, 7, 255, 201, 130, 10, 255, 198, 126, 12, 255, 200, 127, 11, 255, 202, 126, 14, 255, 198, 119, 12, 255, 198, 122, 6, 255, 198, 123, 5, 255, 197, 118, 10, 255, 196, 117, 8, 255, 195, 120, 5, 255, 196, 121, 12, 255, 194, 122, 6, 255, 196, 122, 6, 255, 198, 122, 9, 255, 190, 109, 5, 255, 180, 96, 4, 255, 171, 85, 4, 255, 163, 79, 2, 255, 158, 76, 5, 255, 156, 77, 2, 255, 150, 72, 1, 255, 158, 79, 10, 255, 155, 72, 6, 255, 158, 72, 1, 255, 175, 88, 1, 255, 175, 83, 3, 255, 165, 78, 4, 255, 174, 102, 8, 255, 142, 74, 4, 255, 129, 58, 7, 255, 156, 86, 4, 255, 170, 93, 5, 255, 188, 111, 0, 255, 188, 103, 10, 255, 188, 103, 13, 255, 187, 104, 10, 255, 193, 108, 13, 255, 196, 113, 1, 255, 196, 116, 7, 255, 196, 116, 3, 255, 198, 119, 1, 255, 198, 117, 4, 255, 197, 115, 3, 255, 193, 110, 4, 255, 189, 101, 10, 255, 187, 100, 5, 255, 183, 97, 0, 255, 183, 96, 0, 255, 185, 96, 1, 255, 182, 94, 3, 255, 180, 92, 1, 255, 180, 91, 2, 255, 184, 96, 4, 255, 195, 109, 4, 255, 203, 118, 9, 255, 204, 123, 7, 255, 204, 123, 16, 255, 203, 122, 6, 255, 202, 116, 7, 255, 200, 114, 6, 255, 195, 111, 3, 255, 194, 112, 8, 255, 196, 111, 10, 255, 170, 80, 4, 255, 150, 61, 1, 255, 160, 74, 7, 255, 155, 67, 4, 255, 150, 58, 3, 255, 151, 61, 10, 255, 146, 62, 2, 255, 144, 59, 4, 255, 144, 62, 6, 255, 145, 65, 2, 255, 143, 61, 3, 255, 143, 57, 4, 255, 147, 57, 2, 255, 142, 54, 2, 255, 140, 54, 4, 255, 133, 51, 1, 255, 133, 52, 4, 255, 122, 41, 1, 255, 125, 46, 3, 255, 129, 52, 3, 255, 128, 50, 7, 255, 128, 52, 3, 255, 127, 52, 4, 255, 122, 49, 3, 255, 118, 47, 3, 255, 128, 56, 2, 255, 148, 64, 4, 255, 151, 64, 4, 255, 156, 69, 0, 255, 162, 74, 1, 255, 164, 72, 1, 255, 168, 71, 1, 255, 169, 77, 4, 255, 168, 77, 2, 255, 187, 96, 2, 255, 194, 101, 1, 255, 187, 96, 2, 255, 185, 98, 2, 255, 190, 102, 7, 255, 188, 100, 2, 255, 185, 97, 0, 255, 186, 95, 3, 255, 187, 95, 2, 255, 188, 94, 0, 255, 185, 89, 3, 255, 177, 87, 2, 255, 180, 90, 3, 255, 177, 88, 2, 255, 181, 92, 0, 255, 183, 94, 0, 255, 182, 93, 1, 255, 183, 93, 3, 255, 180, 90, 1, 255, 179, 90, 0, 255, 180, 91, 1, 255, 181, 92, 2, 255, 180, 90, 2, 255, 174, 84, 1, 255, 175, 81, 8, 255, 173, 82, 5, 255, 171, 79, 2, 255, 3, 21, 58, 255, 3, 22, 53, 255, 1, 21, 55, 255, 2, 24, 49, 255, 2, 24, 55, 255, 3, 25, 56, 255, 2, 28, 55, 255, 2, 25, 52, 255, 3, 21, 43, 255, 3, 20, 38, 255, 3, 18, 44, 255, 2, 14, 41, 255, 3, 8, 25, 255, 3, 0, 16, 255, 3, 1, 14, 255, 2, 3, 5, 255, 3, 1, 4, 255, 0, 3, 51, 255, 10, 60, 227, 255, 54, 72, 93, 255, 31, 15, 0, 255, 36, 17, 30, 255, 20, 32, 171, 255, 4, 13, 63, 255, 8, 3, 0, 255, 10, 7, 2, 255, 11, 4, 0, 255, 8, 4, 2, 255, 13, 4, 5, 255, 15, 6, 0, 255, 12, 5, 2, 255, 10, 3, 4, 255, 13, 4, 2, 255, 17, 6, 3, 255, 20, 7, 4, 255, 19, 5, 2, 255, 21, 4, 1, 255, 22, 5, 2, 255, 25, 8, 2, 255, 27, 9, 1, 255, 27, 8, 1, 255, 27, 7, 1, 255, 29, 10, 3, 255, 28, 9, 3, 255, 25, 8, 2, 255, 18, 8, 2, 255, 24, 10, 2, 255, 37, 13, 2, 255, 49, 15, 2, 255, 52, 19, 5, 255, 42, 16, 1, 255, 46, 18, 2, 255, 46, 19, 1, 255, 45, 17, 1, 255, 51, 20, 5, 255, 44, 18, 1, 255, 41, 20, 2, 255, 40, 22, 3, 255, 42, 21, 4, 255, 45, 22, 4, 255, 48, 30, 5, 255, 53, 30, 1, 255, 65, 32, 2, 255, 66, 38, 2, 255, 63, 43, 1, 255, 76, 41, 3, 255, 66, 44, 4, 255, 73, 48, 2, 255, 71, 48, 2, 255, 73, 50, 6, 255, 70, 53, 4, 255, 96, 59, 2, 255, 102, 63, 6, 255, 71, 61, 7, 255, 110, 79, 3, 255, 151, 86, 11, 255, 164, 85, 2, 255, 171, 96, 7, 255, 166, 95, 12, 255, 160, 91, 5, 255, 151, 76, 1, 255, 120, 58, 1, 255, 90, 56, 4, 255, 91, 62, 3, 255, 91, 60, 5, 255, 84, 57, 0, 255, 86, 59, 3, 255, 87, 57, 2, 255, 86, 59, 3, 255, 89, 56, 6, 255, 91, 57, 5, 255, 91, 58, 5, 255, 92, 55, 4, 255, 87, 52, 5, 255, 112, 66, 9, 255, 116, 63, 4, 255, 91, 59, 0, 255, 97, 57, 2, 255, 83, 53, 5, 255, 96, 50, 10, 255, 101, 56, 5, 255, 114, 78, 7, 255, 159, 95, 10, 255, 180, 93, 7, 255, 182, 92, 3, 255, 181, 82, 4, 255, 173, 76, 5, 255, 171, 72, 3, 255, 166, 72, 2, 255, 164, 72, 2, 255, 172, 76, 2, 255, 168, 78, 3, 255, 174, 83, 3, 255, 178, 78, 3, 255, 172, 74, 0, 255, 176, 75, 2, 255, 174, 77, 1, 255, 167, 74, 4, 255, 167, 73, 6, 255, 171, 76, 2, 255, 182, 83, 2, 255, 183, 83, 5, 255, 175, 78, 4, 255, 169, 73, 2, 255, 158, 64, 3, 255, 143, 61, 6, 255, 126, 50, 6, 255, 111, 48, 4, 255, 101, 49, 7, 255, 99, 48, 1, 255, 89, 48, 3, 255, 84, 47, 7, 255, 78, 47, 3, 255, 82, 49, 4, 255, 80, 47, 3, 255, 78, 45, 4, 255, 83, 49, 5, 255, 79, 48, 3, 255, 78, 45, 6, 255, 88, 47, 7, 255, 81, 44, 2, 255, 83, 43, 1, 255, 85, 42, 4, 255, 90, 40, 10, 255, 78, 34, 4, 255, 75, 40, 4, 255, 85, 42, 9, 255, 79, 43, 4, 255, 85, 44, 12, 255, 82, 44, 8, 255, 79, 44, 3, 255, 78, 47, 3, 255, 99, 56, 4, 255, 129, 68, 10, 255, 115, 61, 2, 255, 101, 53, 2, 255, 82, 43, 7, 255, 82, 46, 16, 255, 85, 47, 10, 255, 90, 45, 4, 255, 99, 50, 4, 255, 99, 48, 13, 255, 110, 54, 9, 255, 115, 55, 6, 255, 121, 56, 9, 255, 126, 59, 0, 255, 134, 63, 2, 255, 128, 59, 6, 255, 122, 55, 5, 255, 125, 56, 8, 255, 122, 57, 2, 255, 115, 55, 2, 255, 106, 49, 10, 255, 133, 74, 10, 255, 142, 63, 8, 255, 99, 47, 6, 255, 102, 50, 5, 255, 103, 50, 10, 255, 104, 51, 6, 255, 100, 48, 2, 255, 106, 55, 11, 255, 149, 86, 8, 255, 116, 50, 6, 255, 100, 46, 11, 255, 105, 48, 11, 255, 103, 44, 5, 255, 100, 45, 10, 255, 101, 47, 4, 255, 133, 67, 13, 255, 165, 87, 8, 255, 115, 51, 7, 255, 84, 46, 5, 255, 94, 49, 12, 255, 90, 48, 7, 255, 91, 46, 9, 255, 112, 56, 6, 255, 123, 65, 4, 255, 134, 74, 10, 255, 125, 66, 6, 255, 107, 52, 2, 255, 107, 54, 5, 255, 102, 55, 3, 255, 100, 50, 4, 255, 135, 69, 12, 255, 158, 86, 1, 255, 169, 98, 5, 255, 165, 88, 13, 255, 150, 81, 15, 255, 115, 60, 6, 255, 102, 57, 5, 255, 99, 56, 7, 255, 101, 60, 4, 255, 115, 77, 12, 255, 115, 70, 13, 255, 112, 59, 6, 255, 111, 56, 8, 255, 115, 64, 10, 255, 106, 61, 4, 255, 93, 54, 9, 255, 99, 60, 12, 255, 106, 60, 5, 255, 115, 63, 7, 255, 124, 66, 6, 255, 119, 66, 6, 255, 115, 64, 14, 255, 122, 69, 4, 255, 125, 67, 8, 255, 130, 72, 14, 255, 130, 73, 5, 255, 135, 74, 5, 255, 118, 65, 7, 255, 118, 62, 12, 255, 140, 75, 15, 255, 151, 86, 13, 255, 157, 95, 16, 255, 143, 72, 14, 255, 161, 85, 7, 255, 195, 120, 11, 255, 204, 130, 9, 255, 204, 127, 6, 255, 207, 129, 9, 255, 206, 130, 12, 255, 209, 136, 9, 255, 211, 138, 6, 255, 212, 139, 7, 255, 211, 139, 2, 255, 210, 133, 5, 255, 203, 120, 1, 255, 192, 101, 3, 255, 201, 113, 9, 255, 194, 112, 5, 255, 191, 107, 2, 255, 180, 95, 9, 255, 174, 93, 4, 255, 177, 100, 6, 255, 173, 97, 8, 255, 179, 113, 6, 255, 191, 123, 8, 255, 194, 126, 9, 255, 193, 128, 4, 255, 199, 133, 6, 255, 191, 115, 13, 255, 184, 104, 10, 255, 182, 104, 2, 255, 167, 85, 2, 255, 173, 91, 6, 255, 185, 106, 9, 255, 189, 109, 18, 255, 197, 122, 13, 255, 203, 135, 11, 255, 201, 132, 4, 255, 203, 134, 4, 255, 201, 130, 10, 255, 200, 128, 13, 255, 202, 128, 17, 255, 204, 134, 15, 255, 202, 134, 8, 255, 201, 131, 11, 255, 201, 132, 8, 255, 198, 123, 9, 255, 198, 119, 19, 255, 200, 122, 13, 255, 198, 121, 9, 255, 198, 117, 12, 255, 198, 117, 6, 255, 200, 121, 10, 255, 197, 123, 10, 255, 192, 121, 3, 255, 202, 121, 1, 255, 196, 113, 3, 255, 182, 99, 1, 255, 170, 86, 0, 255, 170, 86, 2, 255, 164, 81, 3, 255, 157, 74, 0, 255, 168, 84, 7, 255, 168, 82, 7, 255, 159, 72, 5, 255, 157, 71, 4, 255, 151, 66, 4, 255, 147, 64, 8, 255, 154, 69, 6, 255, 163, 77, 4, 255, 165, 84, 3, 255, 151, 76, 6, 255, 153, 83, 4, 255, 152, 82, 7, 255, 145, 71, 8, 255, 167, 94, 1, 255, 177, 98, 2, 255, 180, 97, 4, 255, 186, 105, 5, 255, 189, 106, 7, 255, 192, 111, 2, 255, 195, 115, 6, 255, 196, 115, 6, 255, 197, 117, 6, 255, 195, 114, 10, 255, 194, 110, 5, 255, 189, 102, 7, 255, 184, 94, 3, 255, 183, 93, 2, 255, 182, 93, 3, 255, 182, 92, 2, 255, 179, 90, 2, 255, 177, 89, 2, 255, 181, 94, 1, 255, 188, 104, 1, 255, 197, 113, 4, 255, 202, 118, 5, 255, 204, 119, 18, 255, 204, 121, 12, 255, 201, 117, 13, 255, 197, 117, 13, 255, 199, 115, 17, 255, 196, 114, 3, 255, 195, 115, 1, 255, 201, 118, 7, 255, 192, 100, 6, 255, 154, 67, 1, 255, 158, 70, 4, 255, 156, 67, 1, 255, 153, 66, 1, 255, 146, 63, 4, 255, 146, 64, 2, 255, 142, 59, 6, 255, 137, 57, 3, 255, 138, 56, 1, 255, 141, 58, 1, 255, 142, 60, 3, 255, 145, 63, 7, 255, 142, 62, 4, 255, 141, 61, 2, 255, 136, 53, 8, 255, 130, 50, 5, 255, 120, 47, 1, 255, 117, 44, 1, 255, 126, 45, 4, 255, 128, 46, 4, 255, 124, 46, 7, 255, 119, 42, 1, 255, 123, 49, 4, 255, 122, 49, 5, 255, 127, 55, 2, 255, 140, 68, 1, 255, 148, 67, 3, 255, 157, 70, 7, 255, 163, 72, 1, 255, 162, 69, 1, 255, 164, 72, 4, 255, 179, 89, 1, 255, 188, 100, 3, 255, 189, 101, 3, 255, 192, 104, 4, 255, 192, 102, 2, 255, 190, 99, 2, 255, 191, 101, 5, 255, 190, 100, 4, 255, 187, 95, 2, 255, 187, 96, 1, 255, 185, 95, 4, 255, 184, 94, 1, 255, 187, 98, 2, 255, 182, 91, 3, 255, 175, 86, 1, 255, 175, 85, 4, 255, 173, 83, 5, 255, 176, 86, 3, 255, 185, 95, 6, 255, 186, 96, 3, 255, 187, 93, 1, 255, 184, 91, 1, 255, 182, 91, 2, 255, 180, 91, 2, 255, 179, 91, 1, 255, 183, 91, 3, 255, 180, 87, 1, 255, 179, 84, 3, 255, 177, 85, 2, 255, 173, 81, 0, 255, 2, 17, 48, 255, 4, 20, 53, 255, 4, 23, 56, 255, 3, 22, 55, 255, 3, 21, 56, 255, 1, 18, 53, 255, 4, 22, 54, 255, 1, 24, 50, 255, 2, 22, 45, 255, 5, 22, 48, 255, 2, 21, 47, 255, 0, 8, 32, 255, 0, 4, 12, 255, 0, 3, 10, 255, 2, 0, 16, 255, 4, 0, 8, 255, 3, 0, 31, 255, 6, 52, 213, 255, 46, 81, 127, 255, 35, 28, 0, 255, 36, 10, 16, 255, 29, 29, 161, 255, 6, 18, 97, 255, 9, 0, 0, 255, 8, 6, 1, 255, 10, 4, 3, 255, 11, 4, 2, 255, 12, 3, 3, 255, 12, 3, 2, 255, 13, 3, 1, 255, 14, 3, 1, 255, 11, 5, 3, 255, 13, 6, 2, 255, 18, 11, 5, 255, 15, 6, 1, 255, 17, 6, 3, 255, 20, 4, 2, 255, 24, 9, 5, 255, 24, 6, 2, 255, 26, 9, 3, 255, 27, 11, 3, 255, 28, 9, 0, 255, 27, 10, 1, 255, 27, 10, 3, 255, 26, 8, 3, 255, 28, 10, 4, 255, 40, 15, 5, 255, 52, 16, 3, 255, 56, 19, 3, 255, 50, 20, 4, 255, 45, 13, 2, 255, 53, 21, 2, 255, 50, 19, 5, 255, 42, 22, 1, 255, 45, 24, 3, 255, 44, 22, 3, 255, 34, 23, 0, 255, 37, 20, 2, 255, 44, 22, 3, 255, 47, 30, 2, 255, 57, 31, 4, 255, 57, 32, 6, 255, 58, 35, 3, 255, 73, 41, 2, 255, 68, 40, 1, 255, 66, 40, 4, 255, 69, 48, 2, 255, 79, 49, 5, 255, 78, 47, 2, 255, 75, 53, 4, 255, 91, 53, 9, 255, 102, 64, 12, 255, 78, 58, 2, 255, 105, 73, 13, 255, 147, 85, 13, 255, 161, 91, 9, 255, 178, 105, 6, 255, 175, 110, 8, 255, 166, 97, 11, 255, 148, 67, 3, 255, 106, 53, 4, 255, 82, 53, 7, 255, 87, 55, 3, 255, 94, 57, 1, 255, 91, 59, 8, 255, 84, 56, 5, 255, 83, 58, 4, 255, 85, 57, 2, 255, 89, 60, 8, 255, 86, 57, 3, 255, 92, 61, 4, 255, 88, 58, 2, 255, 93, 57, 2, 255, 93, 56, 0, 255, 105, 58, 2, 255, 91, 53, 1, 255, 89, 47, 10, 255, 95, 57, 4, 255, 114, 77, 4, 255, 140, 86, 8, 255, 167, 96, 7, 255, 188, 96, 5, 255, 178, 80, 5, 255, 164, 67, 1, 255, 157, 68, 0, 255, 164, 71, 5, 255, 167, 78, 4, 255, 168, 77, 0, 255, 167, 77, 3, 255, 169, 74, 4, 255, 171, 75, 4, 255, 167, 72, 1, 255, 168, 73, 0, 255, 170, 74, 3, 255, 166, 72, 1, 255, 165, 72, 4, 255, 162, 75, 1, 255, 165, 81, 2, 255, 174, 82, 4, 255, 178, 81, 6, 255, 171, 79, 6, 255, 154, 67, 5, 255, 135, 61, 8, 255, 127, 54, 4, 255, 124, 49, 6, 255, 103, 50, 3, 255, 91, 54, 4, 255, 95, 51, 4, 255, 103, 49, 4, 255, 99, 51, 3, 255, 87, 49, 5, 255, 78, 46, 3, 255, 83, 48, 3, 255, 88, 44, 4, 255, 81, 46, 6, 255, 78, 46, 6, 255, 84, 46, 4, 255, 82, 46, 4, 255, 78, 48, 8, 255, 78, 47, 5, 255, 78, 40, 4, 255, 75, 45, 5, 255, 72, 44, 2, 255, 68, 35, 7, 255, 65, 37, 2, 255, 83, 47, 6, 255, 82, 45, 7, 255, 80, 44, 6, 255, 85, 49, 7, 255, 80, 47, 4, 255, 76, 44, 3, 255, 89, 53, 9, 255, 118, 65, 15, 255, 117, 57, 10, 255, 94, 50, 7, 255, 88, 49, 7, 255, 82, 47, 2, 255, 93, 53, 6, 255, 92, 52, 7, 255, 90, 47, 2, 255, 95, 56, 4, 255, 90, 46, 8, 255, 95, 52, 5, 255, 89, 47, 6, 255, 91, 44, 9, 255, 96, 51, 8, 255, 108, 51, 15, 255, 114, 53, 10, 255, 119, 59, 6, 255, 135, 62, 5, 255, 134, 63, 3, 255, 131, 59, 5, 255, 145, 65, 8, 255, 141, 75, 9, 255, 105, 49, 4, 255, 100, 52, 7, 255, 107, 56, 2, 255, 112, 45, 16, 255, 106, 52, 8, 255, 102, 56, 1, 255, 112, 57, 3, 255, 119, 61, 2, 255, 106, 49, 11, 255, 102, 49, 6, 255, 101, 48, 9, 255, 101, 46, 11, 255, 100, 41, 6, 255, 95, 38, 1, 255, 139, 79, 16, 255, 134, 69, 11, 255, 101, 39, 6, 255, 103, 49, 2, 255, 103, 52, 6, 255, 107, 50, 7, 255, 96, 50, 3, 255, 80, 43, 3, 255, 81, 49, 5, 255, 128, 72, 14, 255, 128, 63, 5, 255, 112, 56, 6, 255, 113, 58, 1, 255, 110, 59, 6, 255, 100, 58, 13, 255, 101, 56, 10, 255, 132, 67, 9, 255, 176, 97, 6, 255, 178, 92, 5, 255, 127, 66, 13, 255, 78, 42, 15, 255, 77, 49, 4, 255, 84, 54, 8, 255, 104, 61, 17, 255, 153, 85, 16, 255, 170, 101, 9, 255, 162, 93, 13, 255, 164, 91, 11, 255, 149, 90, 14, 255, 127, 68, 15, 255, 117, 70, 7, 255, 116, 70, 5, 255, 117, 69, 5, 255, 110, 61, 9, 255, 110, 62, 8, 255, 107, 66, 8, 255, 110, 58, 8, 255, 116, 63, 7, 255, 111, 62, 8, 255, 110, 60, 8, 255, 111, 62, 14, 255, 136, 82, 20, 255, 147, 90, 1, 255, 147, 90, 6, 255, 149, 84, 11, 255, 159, 94, 14, 255, 166, 103, 12, 255, 175, 102, 15, 255, 204, 133, 15, 255, 210, 138, 9, 255, 206, 138, 3, 255, 209, 141, 7, 255, 209, 140, 8, 255, 212, 141, 3, 255, 213, 140, 5, 255, 213, 140, 11, 255, 208, 139, 5, 255, 210, 136, 2, 255, 208, 125, 7, 255, 199, 110, 6, 255, 193, 103, 12, 255, 201, 118, 5, 255, 207, 126, 5, 255, 199, 113, 3, 255, 189, 103, 11, 255, 184, 104, 8, 255, 177, 105, 8, 255, 186, 118, 14, 255, 201, 138, 8, 255, 197, 135, 2, 255, 194, 127, 9, 255, 202, 134, 7, 255, 198, 125, 12, 255, 183, 105, 12, 255, 185, 105, 15, 255, 175, 92, 7, 255, 178, 97, 4, 255, 186, 109, 6, 255, 193, 122, 6, 255, 201, 131, 14, 255, 206, 139, 17, 255, 204, 137, 18, 255, 199, 134, 9, 255, 201, 136, 7, 255, 203, 133, 14, 255, 202, 131, 13, 255, 201, 130, 16, 255, 204, 134, 24, 255, 202, 133, 20, 255, 199, 130, 12, 255, 198, 129, 13, 255, 197, 127, 8, 255, 195, 123, 6, 255, 197, 120, 15, 255, 197, 117, 19, 255, 195, 120, 14, 255, 197, 122, 13, 255, 197, 122, 13, 255, 198, 125, 5, 255, 197, 122, 4, 255, 197, 112, 9, 255, 179, 94, 3, 255, 169, 83, 3, 255, 164, 79, 0, 255, 169, 84, 3, 255, 175, 89, 6, 255, 165, 74, 4, 255, 158, 65, 6, 255, 161, 72, 5, 255, 175, 83, 6, 255, 182, 90, 4, 255, 174, 88, 1, 255, 160, 81, 10, 255, 141, 70, 3, 255, 153, 74, 4, 255, 167, 83, 8, 255, 164, 87, 8, 255, 163, 94, 4, 255, 169, 99, 4, 255, 166, 99, 10, 255, 157, 85, 4, 255, 161, 78, 1, 255, 180, 89, 13, 255, 190, 104, 6, 255, 188, 107, 5, 255, 190, 110, 4, 255, 193, 111, 8, 255, 194, 113, 12, 255, 195, 114, 4, 255, 190, 105, 4, 255, 185, 96, 5, 255, 182, 93, 3, 255, 183, 90, 1, 255, 181, 88, 1, 255, 181, 90, 6, 255, 181, 92, 6, 255, 185, 97, 4, 255, 190, 105, 3, 255, 197, 112, 3, 255, 200, 116, 4, 255, 201, 117, 5, 255, 199, 115, 3, 255, 200, 113, 7, 255, 200, 115, 7, 255, 200, 117, 10, 255, 200, 122, 14, 255, 198, 115, 15, 255, 197, 111, 5, 255, 195, 119, 1, 255, 204, 119, 11, 255, 180, 83, 5, 255, 164, 72, 6, 255, 158, 73, 7, 255, 153, 69, 4, 255, 152, 63, 2, 255, 144, 57, 1, 255, 142, 56, 2, 255, 140, 57, 5, 255, 135, 57, 2, 255, 140, 60, 4, 255, 136, 55, 0, 255, 139, 58, 2, 255, 141, 59, 3, 255, 143, 59, 1, 255, 145, 58, 3, 255, 138, 53, 3, 255, 125, 51, 6, 255, 113, 45, 1, 255, 112, 42, 0, 255, 109, 36, 8, 255, 111, 38, 6, 255, 115, 44, 5, 255, 110, 43, 2, 255, 119, 49, 3, 255, 132, 55, 3, 255, 144, 63, 3, 255, 148, 67, 1, 255, 150, 70, 0, 255, 159, 72, 4, 255, 160, 68, 5, 255, 167, 74, 4, 255, 183, 90, 5, 255, 194, 101, 3, 255, 197, 102, 3, 255, 193, 100, 1, 255, 190, 99, 2, 255, 190, 103, 4, 255, 189, 99, 2, 255, 188, 98, 3, 255, 186, 94, 0, 255, 188, 94, 0, 255, 187, 94, 0, 255, 184, 93, 1, 255, 184, 95, 0, 255, 185, 94, 1, 255, 183, 92, 2, 255, 177, 87, 0, 255, 173, 86, 2, 255, 171, 84, 2, 255, 172, 84, 1, 255, 178, 88, 2, 255, 183, 92, 3, 255, 183, 89, 3, 255, 180, 86, 1, 255, 179, 87, 1, 255, 183, 90, 3, 255, 180, 89, 2, 255, 182, 88, 3, 255, 179, 83, 1, 255, 178, 82, 5, 255, 173, 79, 2, 255, 169, 78, 2, 255, 3, 19, 47, 255, 1, 20, 45, 255, 2, 22, 51, 255, 4, 23, 50, 255, 2, 19, 50, 255, 3, 22, 53, 255, 3, 22, 50, 255, 2, 26, 44, 255, 1, 22, 44, 255, 5, 23, 49, 255, 3, 17, 41, 255, 0, 3, 16, 255, 3, 0, 10, 255, 2, 0, 13, 255, 2, 4, 12, 255, 1, 0, 13, 255, 3, 41, 195, 255, 40, 80, 156, 255, 30, 17, 0, 255, 26, 12, 0, 255, 37, 29, 129, 255, 3, 16, 119, 255, 12, 0, 0, 255, 14, 3, 2, 255, 12, 7, 4, 255, 16, 0, 3, 255, 14, 5, 3, 255, 12, 7, 3, 255, 13, 6, 4, 255, 15, 4, 4, 255, 14, 3, 2, 255, 12, 4, 3, 255, 26, 7, 6, 255, 19, 4, 2, 255, 19, 5, 3, 255, 22, 6, 5, 255, 21, 5, 4, 255, 25, 10, 4, 255, 28, 7, 2, 255, 31, 13, 7, 255, 26, 9, 2, 255, 34, 13, 6, 255, 27, 12, 3, 255, 25, 13, 3, 255, 25, 7, 3, 255, 34, 12, 4, 255, 42, 15, 0, 255, 55, 17, 0, 255, 58, 21, 5, 255, 43, 20, 2, 255, 52, 18, 1, 255, 62, 22, 2, 255, 57, 21, 4, 255, 48, 22, 4, 255, 46, 22, 0, 255, 41, 20, 2, 255, 39, 24, 5, 255, 46, 24, 4, 255, 48, 27, 3, 255, 49, 33, 0, 255, 59, 32, 2, 255, 62, 34, 6, 255, 58, 34, 0, 255, 73, 42, 1, 255, 75, 42, 2, 255, 71, 49, 6, 255, 78, 46, 3, 255, 74, 49, 4, 255, 69, 51, 6, 255, 80, 50, 2, 255, 104, 61, 4, 255, 74, 53, 5, 255, 107, 80, 11, 255, 159, 96, 18, 255, 173, 106, 11, 255, 177, 112, 0, 255, 181, 112, 8, 255, 168, 92, 7, 255, 142, 67, 5, 255, 100, 53, 4, 255, 81, 55, 7, 255, 84, 58, 5, 255, 84, 60, 1, 255, 85, 56, 3, 255, 85, 60, 3, 255, 81, 60, 1, 255, 81, 59, 2, 255, 79, 58, 4, 255, 91, 60, 3, 255, 93, 56, 1, 255, 90, 57, 4, 255, 86, 59, 8, 255, 90, 55, 7, 255, 95, 51, 4, 255, 89, 55, 1, 255, 114, 74, 13, 255, 145, 89, 4, 255, 176, 107, 9, 255, 190, 103, 6, 255, 188, 95, 0, 255, 181, 86, 1, 255, 167, 71, 3, 255, 159, 64, 5, 255, 154, 62, 6, 255, 160, 69, 5, 255, 160, 72, 1, 255, 166, 69, 2, 255, 163, 67, 1, 255, 159, 67, 0, 255, 162, 71, 1, 255, 166, 70, 1, 255, 169, 73, 1, 255, 168, 78, 6, 255, 167, 75, 5, 255, 168, 69, 3, 255, 168, 71, 2, 255, 167, 75, 5, 255, 161, 75, 7, 255, 142, 67, 4, 255, 120, 56, 2, 255, 103, 52, 5, 255, 95, 49, 4, 255, 93, 51, 2, 255, 93, 50, 2, 255, 105, 52, 5, 255, 103, 53, 2, 255, 101, 57, 5, 255, 103, 50, 4, 255, 104, 51, 1, 255, 100, 50, 4, 255, 89, 44, 1, 255, 90, 52, 5, 255, 85, 48, 3, 255, 86, 45, 5, 255, 86, 48, 5, 255, 82, 50, 2, 255, 80, 46, 4, 255, 83, 44, 7, 255, 78, 44, 6, 255, 76, 44, 6, 255, 76, 40, 3, 255, 76, 41, 2, 255, 72, 46, 0, 255, 67, 42, 7, 255, 79, 44, 7, 255, 79, 41, 4, 255, 77, 47, 8, 255, 80, 46, 7, 255, 78, 43, 0, 255, 82, 48, 5, 255, 74, 43, 5, 255, 79, 49, 2, 255, 92, 51, 4, 255, 95, 47, 2, 255, 96, 54, 2, 255, 84, 51, 2, 255, 85, 50, 4, 255, 109, 62, 6, 255, 95, 52, 4, 255, 88, 51, 10, 255, 92, 52, 8, 255, 93, 45, 3, 255, 98, 54, 3, 255, 96, 55, 7, 255, 89, 45, 8, 255, 93, 48, 4, 255, 87, 45, 7, 255, 88, 43, 6, 255, 93, 50, 5, 255, 127, 61, 6, 255, 130, 55, 2, 255, 130, 59, 3, 255, 128, 59, 12, 255, 128, 58, 10, 255, 127, 63, 4, 255, 119, 54, 5, 255, 118, 49, 7, 255, 115, 54, 2, 255, 111, 55, 10, 255, 111, 51, 7, 255, 114, 52, 8, 255, 103, 48, 7, 255, 103, 55, 7, 255, 104, 50, 10, 255, 104, 47, 4, 255, 104, 44, 9, 255, 101, 44, 9, 255, 104, 53, 9, 255, 127, 65, 8, 255, 108, 48, 12, 255, 88, 46, 8, 255, 93, 55, 3, 255, 99, 50, 3, 255, 104, 46, 3, 255, 103, 53, 4, 255, 105, 57, 10, 255, 100, 53, 9, 255, 112, 57, 6, 255, 115, 57, 4, 255, 111, 62, 5, 255, 112, 60, 2, 255, 113, 54, 6, 255, 97, 57, 4, 255, 72, 49, 10, 255, 99, 65, 12, 255, 168, 93, 12, 255, 138, 69, 4, 255, 84, 54, 2, 255, 83, 52, 10, 255, 87, 52, 8, 255, 79, 49, 4, 255, 106, 67, 12, 255, 142, 80, 11, 255, 181, 105, 7, 255, 180, 101, 11, 255, 164, 84, 10, 255, 126, 67, 4, 255, 106, 55, 5, 255, 106, 54, 7, 255, 103, 60, 10, 255, 98, 66, 4, 255, 98, 67, 8, 255, 107, 66, 9, 255, 122, 70, 9, 255, 120, 69, 1, 255, 114, 69, 7, 255, 100, 63, 8, 255, 90, 59, 2, 255, 116, 74, 13, 255, 150, 86, 13, 255, 162, 90, 17, 255, 171, 98, 14, 255, 164, 92, 8, 255, 169, 97, 5, 255, 197, 126, 14, 255, 208, 145, 9, 255, 206, 140, 7, 255, 207, 135, 14, 255, 206, 137, 6, 255, 208, 139, 13, 255, 209, 139, 8, 255, 209, 139, 6, 255, 211, 136, 11, 255, 213, 133, 10, 255, 207, 128, 9, 255, 210, 130, 2, 255, 201, 115, 1, 255, 194, 105, 2, 255, 197, 112, 10, 255, 197, 118, 9, 255, 192, 112, 5, 255, 180, 96, 4, 255, 184, 101, 4, 255, 187, 109, 8, 255, 183, 112, 3, 255, 186, 117, 10, 255, 192, 125, 5, 255, 200, 134, 20, 255, 208, 143, 11, 255, 200, 131, 1, 255, 188, 112, 13, 255, 194, 120, 7, 255, 188, 115, 4, 255, 187, 113, 6, 255, 198, 124, 15, 255, 205, 132, 18, 255, 206, 136, 15, 255, 203, 133, 15, 255, 203, 134, 18, 255, 202, 134, 9, 255, 199, 133, 8, 255, 201, 134, 10, 255, 202, 132, 6, 255, 203, 133, 7, 255, 204, 135, 8, 255, 203, 135, 8, 255, 204, 136, 13, 255, 202, 133, 9, 255, 201, 129, 16, 255, 200, 128, 12, 255, 196, 126, 2, 255, 198, 122, 14, 255, 197, 119, 18, 255, 198, 126, 7, 255, 195, 123, 12, 255, 197, 120, 26, 255, 203, 125, 9, 255, 201, 120, 7, 255, 177, 92, 3, 255, 166, 80, 3, 255, 165, 79, 7, 255, 164, 78, 3, 255, 165, 79, 1, 255, 166, 78, 3, 255, 166, 78, 2, 255, 162, 77, 2, 255, 151, 70, 1, 255, 161, 74, 7, 255, 180, 86, 6, 255, 182, 85, 1, 255, 169, 73, 7, 255, 148, 63, 12, 255, 153, 69, 10, 255, 164, 79, 4, 255, 162, 83, 6, 255, 156, 85, 5, 255, 172, 101, 5, 255, 171, 97, 11, 255, 146, 70, 5, 255, 153, 76, 3, 255, 177, 99, 7, 255, 187, 105, 6, 255, 188, 101, 6, 255, 197, 113, 3, 255, 197, 115, 5, 255, 196, 114, 7, 255, 190, 106, 1, 255, 184, 94, 2, 255, 180, 87, 7, 255, 179, 87, 3, 255, 179, 87, 3, 255, 182, 92, 5, 255, 184, 97, 2, 255, 193, 108, 3, 255, 202, 117, 8, 255, 201, 116, 3, 255, 200, 115, 2, 255, 201, 115, 4, 255, 198, 114, 1, 255, 198, 114, 1, 255, 199, 112, 3, 255, 197, 112, 4, 255, 197, 115, 9, 255, 196, 117, 15, 255, 198, 116, 15, 255, 201, 117, 14, 255, 202, 123, 13, 255, 189, 103, 12, 255, 166, 72, 5, 255, 167, 73, 4, 255, 150, 66, 1, 255, 142, 61, 1, 255, 145, 55, 5, 255, 141, 53, 2, 255, 141, 56, 2, 255, 146, 61, 8, 255, 141, 58, 5, 255, 137, 55, 1, 255, 137, 57, 3, 255, 136, 56, 3, 255, 142, 59, 6, 255, 145, 58, 3, 255, 141, 55, 2, 255, 137, 53, 1, 255, 120, 47, 4, 255, 102, 38, 1, 255, 102, 36, 1, 255, 107, 44, 3, 255, 113, 45, 2, 255, 122, 47, 2, 255, 125, 50, 5, 255, 124, 51, 2, 255, 137, 62, 7, 255, 148, 66, 4, 255, 153, 66, 1, 255, 152, 69, 4, 255, 157, 70, 3, 255, 164, 73, 1, 255, 181, 91, 6, 255, 192, 101, 2, 255, 195, 100, 0, 255, 192, 96, 2, 255, 190, 96, 1, 255, 188, 99, 1, 255, 189, 102, 4, 255, 188, 99, 3, 255, 188, 96, 3, 255, 184, 90, 1, 255, 185, 92, 3, 255, 185, 94, 4, 255, 183, 93, 1, 255, 186, 95, 3, 255, 185, 94, 4, 255, 181, 90, 1, 255, 177, 85, 2, 255, 173, 84, 1, 255, 172, 86, 3, 255, 175, 87, 3, 255, 176, 86, 1, 255, 174, 83, 1, 255, 172, 79, 1, 255, 173, 80, 0, 255, 175, 82, 2, 255, 172, 80, 0, 255, 173, 81, 1, 255, 176, 82, 4, 255, 170, 76, 1, 255, 169, 76, 2, 255, 166, 74, 0, 255, 165, 73, 0, 255, 3, 20, 42, 255, 3, 22, 46, 255, 2, 20, 44, 255, 3, 18, 45, 255, 4, 20, 45, 255, 1, 19, 43, 255, 2, 21, 38, 255, 1, 18, 44, 255, 0, 19, 43, 255, 4, 16, 31, 255, 3, 4, 20, 255, 2, 2, 17, 255, 2, 0, 22, 255, 4, 2, 12, 255, 1, 0, 4, 255, 0, 26, 162, 255, 30, 88, 183, 255, 38, 21, 3, 255, 23, 3, 0, 255, 49, 22, 85, 255, 7, 21, 129, 255, 12, 1, 1, 255, 17, 0, 6, 255, 21, 3, 7, 255, 16, 3, 1, 255, 15, 4, 2, 255, 15, 4, 4, 255, 11, 2, 1, 255, 15, 5, 4, 255, 17, 6, 5, 255, 13, 1, 1, 255, 18, 7, 5, 255, 26, 7, 6, 255, 21, 4, 1, 255, 28, 11, 7, 255, 24, 7, 4, 255, 29, 9, 4, 255, 31, 9, 3, 255, 35, 9, 2, 255, 32, 10, 1, 255, 32, 10, 2, 255, 30, 7, 0, 255, 29, 11, 3, 255, 27, 12, 3, 255, 34, 14, 6, 255, 40, 13, 7, 255, 49, 21, 2, 255, 54, 21, 0, 255, 52, 19, 3, 255, 45, 19, 1, 255, 59, 26, 1, 255, 59, 22, 2, 255, 54, 21, 0, 255, 54, 21, 2, 255, 48, 23, 1, 255, 40, 19, 5, 255, 44, 18, 5, 255, 50, 29, 1, 255, 54, 32, 3, 255, 57, 36, 3, 255, 60, 35, 1, 255, 69, 38, 2, 255, 71, 41, 2, 255, 69, 45, 2, 255, 76, 43, 3, 255, 75, 49, 3, 255, 78, 52, 1, 255, 77, 49, 4, 255, 72, 53, 3, 255, 100, 59, 8, 255, 73, 51, 1, 255, 111, 79, 8, 255, 158, 97, 6, 255, 170, 106, 6, 255, 185, 117, 7, 255, 186, 123, 1, 255, 155, 91, 4, 255, 111, 57, 7, 255, 93, 56, 2, 255, 79, 57, 1, 255, 85, 59, 2, 255, 97, 61, 5, 255, 83, 61, 2, 255, 83, 61, 2, 255, 86, 62, 5, 255, 84, 59, 2, 255, 82, 57, 1, 255, 84, 61, 1, 255, 92, 60, 7, 255, 92, 54, 6, 255, 89, 57, 7, 255, 91, 51, 2, 255, 93, 57, 5, 255, 119, 79, 9, 255, 166, 105, 6, 255, 192, 110, 2, 255, 189, 102, 6, 255, 182, 88, 4, 255, 177, 78, 4, 255, 170, 74, 4, 255, 160, 67, 3, 255, 156, 66, 3, 255, 152, 62, 0, 255, 148, 64, 0, 255, 151, 68, 1, 255, 159, 72, 4, 255, 164, 69, 3, 255, 167, 67, 5, 255, 169, 66, 3, 255, 163, 72, 0, 255, 163, 74, 4, 255, 157, 70, 3, 255, 149, 67, 4, 255, 137, 65, 5, 255, 123, 61, 3, 255, 120, 59, 4, 255, 108, 55, 4, 255, 93, 50, 4, 255, 92, 48, 4, 255, 97, 52, 5, 255, 99, 57, 3, 255, 97, 54, 1, 255, 105, 54, 7, 255, 105, 51, 5, 255, 103, 50, 3, 255, 106, 56, 7, 255, 105, 54, 6, 255, 99, 49, 3, 255, 97, 54, 2, 255, 99, 53, 3, 255, 98, 51, 3, 255, 96, 52, 5, 255, 89, 48, 2, 255, 85, 48, 4, 255, 83, 49, 5, 255, 81, 48, 2, 255, 80, 49, 3, 255, 77, 45, 0, 255, 81, 43, 2, 255, 79, 42, 5, 255, 75, 46, 10, 255, 79, 40, 5, 255, 73, 40, 0, 255, 72, 43, 6, 255, 83, 45, 7, 255, 78, 45, 4, 255, 73, 47, 5, 255, 83, 47, 7, 255, 82, 46, 2, 255, 84, 48, 6, 255, 82, 45, 9, 255, 81, 46, 6, 255, 84, 49, 6, 255, 77, 45, 4, 255, 78, 49, 7, 255, 86, 49, 10, 255, 94, 52, 3, 255, 107, 57, 3, 255, 88, 45, 9, 255, 90, 51, 4, 255, 100, 51, 5, 255, 106, 56, 6, 255, 108, 57, 6, 255, 101, 53, 2, 255, 91, 47, 7, 255, 92, 48, 10, 255, 102, 55, 6, 255, 91, 50, 4, 255, 103, 53, 8, 255, 96, 52, 13, 255, 96, 52, 4, 255, 120, 55, 7, 255, 117, 53, 4, 255, 121, 56, 4, 255, 131, 63, 4, 255, 128, 62, 4, 255, 118, 58, 8, 255, 124, 67, 4, 255, 128, 64, 3, 255, 119, 53, 7, 255, 113, 52, 6, 255, 114, 53, 6, 255, 110, 48, 7, 255, 103, 48, 8, 255, 105, 50, 12, 255, 104, 47, 7, 255, 102, 48, 5, 255, 100, 48, 7, 255, 99, 46, 3, 255, 103, 43, 12, 255, 103, 51, 8, 255, 97, 52, 1, 255, 99, 50, 3, 255, 100, 47, 6, 255, 102, 50, 5, 255, 106, 50, 4, 255, 104, 50, 4, 255, 105, 54, 4, 255, 109, 58, 9, 255, 112, 62, 7, 255, 99, 56, 3, 255, 103, 54, 8, 255, 95, 51, 5, 255, 88, 54, 9, 255, 141, 90, 11, 255, 139, 73, 2, 255, 81, 49, 7, 255, 78, 47, 6, 255, 84, 50, 2, 255, 79, 54, 11, 255, 75, 54, 8, 255, 99, 68, 1, 255, 153, 90, 11, 255, 163, 88, 2, 255, 139, 73, 11, 255, 118, 67, 14, 255, 102, 61, 11, 255, 86, 60, 7, 255, 84, 62, 8, 255, 77, 51, 19, 255, 86, 58, 9, 255, 109, 69, 8, 255, 129, 78, 12, 255, 142, 86, 4, 255, 140, 75, 15, 255, 98, 64, 10, 255, 109, 69, 8, 255, 133, 82, 11, 255, 156, 98, 18, 255, 176, 108, 17, 255, 186, 112, 9, 255, 190, 115, 9, 255, 194, 125, 11, 255, 202, 135, 4, 255, 208, 139, 6, 255, 209, 138, 7, 255, 213, 139, 8, 255, 209, 136, 3, 255, 211, 138, 5, 255, 208, 137, 6, 255, 210, 137, 4, 255, 210, 136, 7, 255, 210, 133, 17, 255, 206, 123, 4, 255, 193, 104, 8, 255, 185, 95, 13, 255, 178, 87, 6, 255, 187, 99, 3, 255, 185, 102, 4, 255, 175, 93, 2, 255, 179, 104, 6, 255, 171, 94, 2, 255, 171, 93, 4, 255, 183, 108, 9, 255, 179, 107, 3, 255, 186, 111, 14, 255, 195, 126, 11, 255, 205, 141, 10, 255, 199, 133, 10, 255, 193, 122, 11, 255, 199, 129, 4, 255, 199, 129, 9, 255, 193, 125, 9, 255, 201, 134, 11, 255, 204, 136, 7, 255, 207, 137, 13, 255, 206, 135, 19, 255, 205, 134, 18, 255, 206, 137, 14, 255, 202, 135, 6, 255, 202, 136, 11, 255, 201, 134, 15, 255, 202, 131, 14, 255, 203, 131, 10, 255, 203, 134, 7, 255, 203, 135, 6, 255, 203, 134, 6, 255, 201, 131, 7, 255, 199, 126, 13, 255, 200, 124, 9, 255, 201, 126, 7, 255, 201, 124, 9, 255, 197, 121, 6, 255, 200, 123, 19, 255, 197, 118, 16, 255, 202, 125, 4, 255, 202, 119, 6, 255, 182, 92, 6, 255, 166, 79, 2, 255, 167, 81, 4, 255, 169, 83, 5, 255, 176, 89, 9, 255, 176, 88, 8, 255, 168, 77, 5, 255, 164, 76, 5, 255, 163, 80, 1, 255, 158, 75, 3, 255, 156, 68, 6, 255, 177, 84, 1, 255, 185, 91, 3, 255, 168, 73, 6, 255, 154, 68, 3, 255, 149, 66, 2, 255, 161, 78, 8, 255, 150, 74, 0, 255, 127, 59, 5, 255, 134, 67, 9, 255, 163, 95, 4, 255, 165, 90, 6, 255, 169, 91, 6, 255, 179, 107, 7, 255, 189, 117, 12, 255, 188, 107, 3, 255, 196, 111, 2, 255, 197, 116, 3, 255, 198, 114, 10, 255, 184, 96, 2, 255, 182, 91, 0, 255, 182, 93, 1, 255, 178, 91, 3, 255, 180, 93, 3, 255, 189, 101, 9, 255, 192, 105, 5, 255, 201, 116, 4, 255, 206, 120, 5, 255, 204, 118, 7, 255, 201, 116, 3, 255, 200, 114, 2, 255, 196, 112, 4, 255, 196, 112, 4, 255, 197, 112, 2, 255, 195, 111, 4, 255, 195, 113, 7, 255, 195, 116, 7, 255, 200, 120, 13, 255, 202, 123, 19, 255, 199, 113, 9, 255, 169, 83, 0, 255, 154, 68, 3, 255, 160, 68, 3, 255, 147, 63, 0, 255, 141, 59, 3, 255, 140, 52, 5, 255, 138, 54, 7, 255, 137, 57, 4, 255, 140, 58, 5, 255, 138, 55, 4, 255, 139, 56, 4, 255, 135, 56, 5, 255, 129, 53, 4, 255, 134, 56, 7, 255, 135, 57, 3, 255, 130, 57, 2, 255, 124, 46, 5, 255, 129, 55, 6, 255, 136, 68, 6, 255, 132, 56, 1, 255, 131, 56, 0, 255, 140, 61, 8, 255, 140, 58, 9, 255, 132, 50, 2, 255, 135, 56, 2, 255, 140, 61, 2, 255, 150, 69, 5, 255, 149, 63, 1, 255, 152, 68, 5, 255, 161, 74, 3, 255, 177, 88, 0, 255, 188, 100, 2, 255, 190, 98, 2, 255, 190, 95, 3, 255, 186, 97, 0, 255, 187, 98, 2, 255, 188, 97, 2, 255, 187, 96, 2, 255, 187, 94, 2, 255, 185, 91, 2, 255, 181, 88, 0, 255, 181, 91, 1, 255, 183, 94, 2, 255, 182, 93, 0, 255, 185, 96, 1, 255, 189, 102, 3, 255, 186, 96, 1, 255, 178, 85, 3, 255, 173, 83, 1, 255, 175, 87, 4, 255, 175, 87, 4, 255, 175, 84, 4, 255, 169, 76, 2, 255, 166, 76, 3, 255, 164, 75, 1, 255, 169, 77, 2, 255, 168, 76, 1, 255, 170, 78, 4, 255, 168, 78, 4, 255, 170, 80, 6, 255, 173, 82, 1, 255, 170, 80, 2, 255, 164, 73, 1, 255, 2, 15, 35, 255, 1, 20, 40, 255, 1, 17, 41, 255, 1, 16, 41, 255, 4, 17, 42, 255, 2, 19, 41, 255, 4, 18, 41, 255, 5, 16, 43, 255, 2, 19, 42, 255, 3, 7, 17, 255, 4, 0, 13, 255, 1, 1, 17, 255, 4, 2, 20, 255, 1, 0, 0, 255, 0, 14, 127, 255, 26, 84, 210, 255, 56, 44, 21, 255, 14, 8, 0, 255, 34, 20, 71, 255, 9, 26, 163, 255, 10, 3, 25, 255, 6, 5, 3, 255, 14, 5, 5, 255, 16, 7, 5, 255, 18, 5, 9, 255, 11, 5, 4, 255, 17, 5, 5, 255, 17, 6, 5, 255, 13, 1, 1, 255, 18, 6, 5, 255, 18, 5, 3, 255, 20, 5, 4, 255, 16, 8, 4, 255, 19, 9, 2, 255, 23, 11, 3, 255, 21, 7, 1, 255, 29, 10, 4, 255, 32, 6, 0, 255, 40, 12, 1, 255, 38, 14, 2, 255, 35, 11, 3, 255, 34, 9, 2, 255, 32, 11, 3, 255, 32, 12, 2, 255, 38, 12, 2, 255, 41, 13, 4, 255, 56, 18, 4, 255, 58, 19, 1, 255, 50, 21, 0, 255, 66, 25, 6, 255, 65, 26, 4, 255, 50, 21, 3, 255, 43, 16, 1, 255, 49, 19, 0, 255, 42, 23, 1, 255, 38, 22, 7, 255, 49, 25, 6, 255, 53, 32, 0, 255, 57, 31, 1, 255, 61, 34, 5, 255, 62, 37, 0, 255, 74, 42, 2, 255, 78, 43, 4, 255, 68, 45, 4, 255, 69, 44, 3, 255, 82, 50, 6, 255, 81, 55, 3, 255, 77, 51, 0, 255, 98, 60, 6, 255, 82, 60, 8, 255, 111, 86, 8, 255, 155, 94, 7, 255, 168, 100, 14, 255, 173, 108, 4, 255, 177, 108, 2, 255, 150, 79, 4, 255, 105, 57, 2, 255, 77, 52, 4, 255, 82, 60, 4, 255, 90, 58, 2, 255, 87, 61, 4, 255, 88, 62, 6, 255, 92, 62, 2, 255, 91, 57, 1, 255, 86, 57, 3, 255, 88, 60, 6, 255, 86, 55, 3, 255, 87, 61, 4, 255, 87, 58, 5, 255, 81, 50, 7, 255, 81, 60, 2, 255, 121, 76, 7, 255, 165, 102, 6, 255, 190, 109, 4, 255, 188, 91, 3, 255, 174, 79, 7, 255, 173, 75, 2, 255, 166, 72, 5, 255, 165, 76, 3, 255, 159, 68, 2, 255, 155, 64, 4, 255, 147, 64, 4, 255, 144, 70, 6, 255, 158, 76, 5, 255, 156, 73, 2, 255, 152, 68, 3, 255, 143, 66, 1, 255, 141, 66, 3, 255, 123, 58, 5, 255, 116, 56, 4, 255, 116, 56, 5, 255, 108, 55, 3, 255, 96, 54, 3, 255, 88, 52, 4, 255, 91, 51, 7, 255, 85, 48, 4, 255, 87, 50, 4, 255, 95, 53, 4, 255, 98, 51, 1, 255, 102, 52, 3, 255, 100, 54, 5, 255, 94, 54, 3, 255, 98, 57, 5, 255, 101, 53, 5, 255, 95, 52, 1, 255, 101, 57, 5, 255, 102, 52, 4, 255, 97, 51, 4, 255, 94, 56, 7, 255, 92, 53, 3, 255, 91, 54, 3, 255, 91, 51, 3, 255, 88, 48, 2, 255, 87, 49, 6, 255, 77, 44, 2, 255, 82, 47, 4, 255, 80, 45, 4, 255, 76, 44, 3, 255, 80, 43, 4, 255, 85, 46, 6, 255, 73, 45, 3, 255, 69, 40, 9, 255, 74, 40, 6, 255, 74, 40, 2, 255, 80, 49, 5, 255, 77, 48, 2, 255, 77, 48, 1, 255, 81, 54, 7, 255, 77, 46, 2, 255, 84, 47, 3, 255, 87, 46, 8, 255, 88, 48, 8, 255, 86, 47, 3, 255, 87, 52, 7, 255, 81, 48, 7, 255, 97, 56, 5, 255, 122, 68, 7, 255, 119, 48, 5, 255, 106, 43, 8, 255, 106, 56, 4, 255, 107, 56, 5, 255, 110, 61, 4, 255, 109, 55, 6, 255, 107, 55, 8, 255, 98, 54, 8, 255, 99, 49, 10, 255, 113, 56, 8, 255, 100, 56, 8, 255, 101, 55, 3, 255, 108, 58, 5, 255, 124, 60, 6, 255, 90, 48, 5, 255, 89, 48, 11, 255, 100, 51, 5, 255, 109, 51, 10, 255, 108, 53, 2, 255, 122, 57, 6, 255, 126, 58, 8, 255, 136, 59, 7, 255, 140, 56, 8, 255, 126, 58, 6, 255, 121, 62, 3, 255, 122, 57, 2, 255, 111, 50, 6, 255, 103, 52, 5, 255, 109, 56, 6, 255, 108, 48, 4, 255, 98, 43, 9, 255, 102, 51, 11, 255, 101, 47, 2, 255, 107, 47, 9, 255, 113, 51, 10, 255, 103, 50, 5, 255, 99, 48, 7, 255, 100, 49, 10, 255, 98, 50, 4, 255, 99, 51, 2, 255, 104, 52, 8, 255, 103, 54, 7, 255, 110, 55, 7, 255, 105, 57, 9, 255, 102, 56, 7, 255, 101, 57, 6, 255, 103, 61, 6, 255, 127, 63, 17, 255, 93, 49, 8, 255, 83, 51, 5, 255, 83, 53, 4, 255, 84, 51, 5, 255, 81, 51, 7, 255, 75, 52, 10, 255, 90, 62, 7, 255, 112, 66, 5, 255, 96, 51, 12, 255, 98, 56, 5, 255, 94, 59, 9, 255, 90, 56, 4, 255, 79, 56, 2, 255, 78, 58, 3, 255, 100, 66, 8, 255, 112, 71, 9, 255, 113, 69, 7, 255, 126, 73, 9, 255, 145, 83, 7, 255, 148, 87, 3, 255, 146, 86, 20, 255, 169, 107, 11, 255, 194, 124, 9, 255, 199, 125, 15, 255, 201, 128, 12, 255, 209, 134, 15, 255, 207, 136, 6, 255, 213, 138, 18, 255, 210, 136, 14, 255, 208, 138, 8, 255, 210, 135, 3, 255, 209, 137, 4, 255, 213, 136, 8, 255, 211, 135, 10, 255, 211, 135, 6, 255, 210, 133, 7, 255, 214, 136, 10, 255, 207, 127, 12, 255, 201, 119, 7, 255, 201, 120, 9, 255, 183, 97, 13, 255, 178, 93, 9, 255, 184, 104, 3, 255, 175, 93, 7, 255, 184, 104, 7, 255, 182, 104, 3, 255, 174, 99, 3, 255, 178, 103, 10, 255, 179, 104, 5, 255, 188, 111, 16, 255, 198, 126, 13, 255, 202, 136, 6, 255, 200, 135, 4, 255, 194, 128, 8, 255, 198, 130, 11, 255, 198, 130, 5, 255, 200, 133, 21, 255, 204, 139, 15, 255, 203, 138, 12, 255, 202, 137, 10, 255, 206, 140, 12, 255, 203, 137, 9, 255, 205, 140, 11, 255, 205, 140, 11, 255, 201, 136, 11, 255, 201, 136, 14, 255, 198, 132, 14, 255, 199, 129, 12, 255, 200, 130, 12, 255, 199, 130, 12, 255, 199, 128, 12, 255, 199, 128, 8, 255, 198, 126, 8, 255, 200, 125, 12, 255, 200, 123, 8, 255, 201, 122, 12, 255, 201, 121, 10, 255, 202, 124, 4, 255, 203, 127, 9, 255, 202, 126, 8, 255, 199, 121, 9, 255, 177, 94, 6, 255, 167, 78, 8, 255, 171, 86, 8, 255, 175, 90, 9, 255, 172, 88, 1, 255, 179, 93, 7, 255, 175, 85, 6, 255, 161, 69, 1, 255, 171, 78, 4, 255, 181, 90, 4, 255, 173, 80, 4, 255, 172, 77, 8, 255, 183, 90, 9, 255, 177, 90, 7, 255, 160, 73, 5, 255, 160, 70, 3, 255, 156, 72, 8, 255, 152, 70, 4, 255, 151, 73, 5, 255, 128, 59, 1, 255, 155, 94, 7, 255, 168, 93, 3, 255, 147, 69, 5, 255, 134, 59, 2, 255, 158, 86, 6, 255, 184, 106, 6, 255, 190, 103, 6, 255, 190, 101, 8, 255, 193, 108, 6, 255, 191, 104, 3, 255, 187, 97, 1, 255, 183, 91, 1, 255, 178, 90, 0, 255, 179, 95, 1, 255, 187, 102, 0, 255, 189, 100, 3, 255, 193, 104, 11, 255, 199, 111, 11, 255, 197, 112, 3, 255, 194, 110, 3, 255, 195, 110, 3, 255, 198, 113, 3, 255, 194, 112, 2, 255, 194, 112, 5, 255, 195, 110, 6, 255, 194, 111, 3, 255, 196, 117, 1, 255, 198, 120, 6, 255, 199, 122, 4, 255, 200, 122, 15, 255, 184, 92, 4, 255, 162, 71, 3, 255, 152, 66, 2, 255, 149, 59, 2, 255, 141, 59, 1, 255, 142, 62, 5, 255, 139, 57, 4, 255, 133, 55, 2, 255, 133, 57, 2, 255, 134, 54, 2, 255, 137, 57, 1, 255, 137, 56, 2, 255, 128, 50, 0, 255, 127, 51, 2, 255, 131, 53, 5, 255, 133, 54, 3, 255, 129, 49, 3, 255, 134, 50, 2, 255, 137, 56, 2, 255, 141, 61, 6, 255, 141, 58, 4, 255, 139, 56, 2, 255, 139, 56, 3, 255, 133, 52, 1, 255, 133, 57, 1, 255, 142, 62, 3, 255, 148, 64, 3, 255, 148, 67, 2, 255, 145, 66, 1, 255, 156, 68, 0, 255, 172, 81, 6, 255, 189, 98, 4, 255, 188, 96, 1, 255, 189, 95, 6, 255, 189, 93, 7, 255, 183, 94, 3, 255, 183, 94, 2, 255, 183, 92, 1, 255, 183, 89, 0, 255, 180, 88, 1, 255, 181, 91, 5, 255, 180, 88, 4, 255, 178, 86, 2, 255, 179, 88, 3, 255, 181, 91, 3, 255, 182, 92, 2, 255, 185, 96, 3, 255, 183, 92, 1, 255, 176, 83, 4, 255, 173, 84, 3, 255, 173, 86, 4, 255, 172, 82, 1, 255, 169, 79, 2, 255, 168, 78, 6, 255, 164, 77, 4, 255, 162, 75, 2, 255, 164, 74, 2, 255, 166, 74, 2, 255, 164, 75, 3, 255, 159, 73, 1, 255, 163, 77, 3, 255, 170, 82, 1, 255, 168, 78, 2, 255, 169, 77, 3, 255, 2, 12, 31, 255, 3, 17, 34, 255, 2, 16, 41, 255, 1, 15, 38, 255, 0, 12, 35, 255, 1, 16, 36, 255, 0, 18, 40, 255, 2, 17, 40, 255, 2, 9, 22, 255, 3, 0, 12, 255, 2, 1, 16, 255, 0, 2, 16, 255, 6, 0, 0, 255, 0, 11, 95, 255, 19, 80, 223, 255, 53, 62, 50, 255, 25, 11, 0, 255, 44, 21, 40, 255, 19, 26, 164, 255, 9, 10, 56, 255, 23, 2, 0, 255, 7, 7, 4, 255, 19, 6, 4, 255, 15, 7, 5, 255, 13, 3, 6, 255, 12, 8, 3, 255, 14, 3, 1, 255, 14, 3, 1, 255, 19, 8, 6, 255, 20, 8, 6, 255, 20, 5, 2, 255, 26, 9, 5, 255, 26, 9, 4, 255, 28, 9, 3, 255, 30, 9, 3, 255, 31, 12, 6, 255, 32, 12, 3, 255, 38, 12, 1, 255, 38, 12, 1, 255, 35, 13, 1, 255, 38, 16, 5, 255, 38, 13, 6, 255, 32, 11, 1, 255, 35, 12, 2, 255, 46, 15, 6, 255, 48, 18, 2, 255, 63, 16, 6, 255, 66, 18, 4, 255, 56, 21, 0, 255, 78, 26, 5, 255, 61, 21, 3, 255, 47, 19, 2, 255, 43, 15, 4, 255, 50, 22, 3, 255, 46, 24, 4, 255, 43, 22, 7, 255, 55, 29, 2, 255, 56, 31, 1, 255, 59, 32, 3, 255, 66, 35, 5, 255, 65, 39, 2, 255, 74, 44, 3, 255, 75, 42, 2, 255, 67, 42, 3, 255, 71, 48, 2, 255, 84, 48, 4, 255, 72, 50, 2, 255, 96, 62, 8, 255, 86, 57, 8, 255, 89, 75, 6, 255, 170, 101, 9, 255, 156, 89, 4, 255, 163, 99, 3, 255, 171, 102, 2, 255, 146, 75, 3, 255, 99, 48, 6, 255, 82, 52, 1, 255, 91, 57, 3, 255, 91, 60, 7, 255, 81, 57, 1, 255, 90, 57, 2, 255, 84, 58, 1, 255, 81, 56, 1, 255, 92, 57, 6, 255, 81, 61, 3, 255, 88, 62, 4, 255, 100, 57, 5, 255, 85, 57, 2, 255, 78, 57, 1, 255, 116, 83, 0, 255, 164, 110, 6, 255, 187, 110, 6, 255, 185, 99, 5, 255, 178, 84, 5, 255, 166, 77, 3, 255, 165, 71, 4, 255, 167, 69, 3, 255, 159, 70, 0, 255, 159, 74, 3, 255, 159, 73, 4, 255, 137, 57, 2, 255, 120, 56, 7, 255, 120, 61, 9, 255, 111, 56, 5, 255, 103, 50, 3, 255, 98, 51, 4, 255, 89, 49, 2, 255, 89, 53, 3, 255, 95, 54, 3, 255, 91, 56, 4, 255, 92, 54, 2, 255, 97, 53, 0, 255, 100, 54, 2, 255, 100, 54, 3, 255, 97, 54, 3, 255, 92, 53, 3, 255, 90, 51, 3, 255, 90, 53, 5, 255, 88, 55, 5, 255, 93, 56, 5, 255, 97, 54, 3, 255, 101, 54, 3, 255, 106, 55, 5, 255, 107, 51, 4, 255, 97, 50, 1, 255, 95, 53, 2, 255, 92, 48, 1, 255, 87, 50, 4, 255, 85, 48, 5, 255, 79, 45, 0, 255, 79, 49, 0, 255, 80, 47, 1, 255, 84, 47, 3, 255, 88, 48, 5, 255, 79, 43, 4, 255, 82, 45, 8, 255, 88, 48, 8, 255, 82, 46, 2, 255, 85, 47, 4, 255, 85, 43, 2, 255, 80, 40, 3, 255, 68, 42, 6, 255, 69, 42, 5, 255, 81, 46, 3, 255, 80, 47, 3, 255, 88, 49, 7, 255, 85, 52, 7, 255, 80, 49, 3, 255, 90, 52, 8, 255, 92, 46, 1, 255, 93, 49, 2, 255, 91, 52, 4, 255, 95, 54, 4, 255, 93, 54, 0, 255, 98, 52, 6, 255, 109, 56, 4, 255, 119, 61, 2, 255, 118, 53, 6, 255, 112, 57, 5, 255, 107, 55, 3, 255, 107, 56, 11, 255, 107, 58, 5, 255, 104, 51, 5, 255, 108, 56, 10, 255, 104, 56, 7, 255, 110, 57, 1, 255, 112, 54, 3, 255, 100, 56, 3, 255, 101, 58, 9, 255, 126, 63, 13, 255, 122, 59, 1, 255, 100, 57, 4, 255, 101, 58, 7, 255, 119, 66, 9, 255, 102, 56, 9, 255, 86, 48, 8, 255, 100, 51, 5, 255, 104, 52, 4, 255, 113, 55, 7, 255, 138, 62, 10, 255, 137, 64, 5, 255, 141, 70, 5, 255, 131, 61, 1, 255, 114, 51, 9, 255, 107, 50, 8, 255, 111, 54, 7, 255, 107, 48, 7, 255, 105, 47, 7, 255, 107, 53, 4, 255, 103, 52, 5, 255, 98, 49, 7, 255, 99, 50, 9, 255, 103, 49, 4, 255, 100, 49, 6, 255, 98, 49, 10, 255, 91, 52, 8, 255, 95, 54, 6, 255, 100, 49, 8, 255, 100, 52, 4, 255, 95, 54, 3, 255, 101, 56, 12, 255, 104, 57, 5, 255, 104, 55, 10, 255, 103, 53, 9, 255, 98, 50, 3, 255, 102, 53, 4, 255, 99, 60, 2, 255, 90, 56, 5, 255, 89, 55, 13, 255, 86, 55, 9, 255, 78, 53, 2, 255, 84, 51, 10, 255, 82, 54, 8, 255, 98, 70, 10, 255, 85, 50, 16, 255, 82, 55, 11, 255, 80, 53, 10, 255, 77, 61, 13, 255, 94, 65, 12, 255, 129, 79, 14, 255, 137, 79, 14, 255, 135, 83, 12, 255, 152, 96, 16, 255, 168, 100, 16, 255, 176, 114, 20, 255, 204, 127, 23, 255, 207, 136, 12, 255, 206, 136, 5, 255, 203, 130, 5, 255, 206, 132, 10, 255, 208, 135, 13, 255, 206, 134, 6, 255, 212, 137, 17, 255, 213, 140, 5, 255, 215, 140, 3, 255, 210, 138, 6, 255, 211, 136, 5, 255, 215, 136, 8, 255, 210, 132, 5, 255, 210, 133, 3, 255, 213, 135, 5, 255, 208, 130, 4, 255, 205, 124, 2, 255, 201, 127, 9, 255, 192, 115, 10, 255, 192, 114, 14, 255, 185, 108, 2, 255, 178, 103, 4, 255, 179, 98, 24, 255, 183, 100, 8, 255, 188, 106, 8, 255, 180, 105, 8, 255, 175, 102, 5, 255, 185, 110, 10, 255, 194, 123, 7, 255, 203, 135, 4, 255, 202, 135, 8, 255, 197, 134, 2, 255, 197, 133, 6, 255, 202, 137, 9, 255, 199, 132, 10, 255, 204, 139, 14, 255, 203, 139, 5, 255, 203, 136, 6, 255, 204, 136, 13, 255, 203, 138, 10, 255, 201, 137, 3, 255, 205, 143, 12, 255, 203, 140, 15, 255, 202, 140, 11, 255, 200, 139, 10, 255, 199, 137, 8, 255, 200, 134, 9, 255, 201, 132, 12, 255, 197, 129, 12, 255, 199, 125, 16, 255, 199, 127, 8, 255, 199, 127, 8, 255, 200, 127, 8, 255, 199, 123, 4, 255, 199, 119, 9, 255, 199, 118, 11, 255, 199, 118, 9, 255, 202, 123, 7, 255, 198, 121, 10, 255, 176, 94, 14, 255, 160, 77, 4, 255, 170, 87, 8, 255, 178, 92, 12, 255, 175, 88, 8, 255, 174, 86, 4, 255, 171, 80, 1, 255, 169, 75, 5, 255, 167, 73, 9, 255, 170, 73, 6, 255, 171, 73, 5, 255, 159, 66, 0, 255, 169, 78, 5, 255, 178, 87, 8, 255, 171, 77, 5, 255, 166, 70, 5, 255, 161, 72, 3, 255, 157, 76, 4, 255, 154, 72, 5, 255, 146, 67, 3, 255, 127, 55, 3, 255, 151, 85, 6, 255, 189, 112, 8, 255, 178, 94, 6, 255, 152, 72, 4, 255, 126, 47, 12, 255, 137, 64, 2, 255, 142, 61, 6, 255, 162, 73, 5, 255, 174, 82, 3, 255, 168, 77, 1, 255, 176, 83, 0, 255, 184, 89, 2, 255, 185, 90, 5, 255, 185, 94, 9, 255, 183, 92, 2, 255, 190, 100, 3, 255, 199, 110, 5, 255, 202, 116, 3, 255, 197, 114, 2, 255, 193, 112, 6, 255, 195, 110, 4, 255, 198, 114, 5, 255, 196, 114, 6, 255, 196, 114, 8, 255, 195, 115, 5, 255, 197, 116, 3, 255, 197, 121, 4, 255, 197, 120, 3, 255, 200, 122, 6, 255, 198, 118, 14, 255, 177, 84, 5, 255, 161, 70, 5, 255, 155, 67, 6, 255, 148, 60, 1, 255, 143, 63, 4, 255, 141, 62, 6, 255, 133, 51, 1, 255, 132, 55, 1, 255, 137, 61, 1, 255, 141, 61, 2, 255, 136, 57, 2, 255, 135, 55, 1, 255, 127, 49, 0, 255, 128, 51, 3, 255, 133, 54, 6, 255, 133, 52, 1, 255, 121, 38, 4, 255, 124, 37, 6, 255, 131, 50, 7, 255, 138, 62, 3, 255, 143, 63, 0, 255, 142, 64, 0, 255, 140, 65, 5, 255, 137, 59, 3, 255, 145, 66, 4, 255, 144, 65, 1, 255, 147, 68, 2, 255, 148, 67, 1, 255, 152, 69, 3, 255, 161, 70, 3, 255, 175, 81, 8, 255, 185, 89, 4, 255, 186, 91, 3, 255, 183, 90, 3, 255, 182, 89, 1, 255, 178, 89, 1, 255, 177, 88, 1, 255, 178, 87, 3, 255, 178, 86, 2, 255, 175, 85, 2, 255, 176, 88, 6, 255, 175, 87, 5, 255, 176, 84, 4, 255, 176, 85, 6, 255, 173, 83, 3, 255, 173, 83, 3, 255, 176, 85, 4, 255, 171, 82, 1, 255, 167, 80, 2, 255, 167, 81, 3, 255, 167, 81, 3, 255, 167, 79, 2, 255, 166, 76, 1, 255, 163, 75, 3, 255, 157, 71, 0, 255, 162, 77, 4, 255, 162, 75, 4, 255, 160, 72, 2, 255, 155, 70, 0, 255, 155, 71, 1, 255, 156, 72, 1, 255, 166, 77, 4, 255, 164, 73, 0, 255, 167, 74, 1, 255, 0, 1, 16, 255, 2, 9, 30, 255, 1, 16, 34, 255, 0, 15, 39, 255, 3, 15, 35, 255, 0, 13, 28, 255, 3, 16, 41, 255, 1, 11, 17, 255, 2, 2, 3, 255, 0, 0, 16, 255, 2, 0, 10, 255, 1, 0, 0, 255, 0, 4, 71, 255, 24, 73, 227, 255, 70, 82, 70, 255, 27, 15, 0, 255, 39, 13, 26, 255, 34, 24, 167, 255, 3, 16, 75, 255, 19, 3, 0, 255, 15, 7, 2, 255, 8, 5, 6, 255, 16, 7, 8, 255, 21, 5, 5, 255, 17, 5, 4, 255, 14, 5, 3, 255, 17, 7, 5, 255, 20, 6, 5, 255, 18, 7, 5, 255, 15, 5, 1, 255, 21, 8, 3, 255, 26, 8, 2, 255, 26, 7, 1, 255, 35, 10, 4, 255, 39, 10, 3, 255, 35, 10, 4, 255, 35, 11, 3, 255, 41, 13, 3, 255, 41, 13, 3, 255, 39, 14, 6, 255, 36, 10, 3, 255, 40, 14, 4, 255, 32, 13, 1, 255, 34, 14, 4, 255, 46, 16, 6, 255, 57, 23, 2, 255, 69, 20, 2, 255, 75, 24, 4, 255, 71, 23, 1, 255, 69, 26, 2, 255, 57, 24, 3, 255, 54, 23, 2, 255, 51, 20, 5, 255, 44, 21, 2, 255, 45, 23, 0, 255, 50, 24, 3, 255, 55, 31, 3, 255, 54, 30, 1, 255, 58, 32, 3, 255, 67, 35, 2, 255, 68, 41, 2, 255, 70, 46, 5, 255, 72, 45, 4, 255, 79, 47, 6, 255, 83, 51, 2, 255, 71, 48, 1, 255, 88, 55, 4, 255, 89, 53, 5, 255, 83, 62, 5, 255, 143, 91, 8, 255, 159, 90, 5, 255, 164, 96, 3, 255, 163, 96, 4, 255, 148, 74, 2, 255, 100, 55, 0, 255, 77, 57, 3, 255, 83, 54, 2, 255, 89, 56, 3, 255, 90, 56, 3, 255, 88, 56, 2, 255, 95, 57, 2, 255, 85, 58, 1, 255, 83, 56, 6, 255, 88, 59, 4, 255, 87, 57, 2, 255, 90, 59, 4, 255, 79, 51, 1, 255, 94, 64, 12, 255, 156, 105, 9, 255, 194, 114, 3, 255, 189, 94, 5, 255, 181, 91, 7, 255, 179, 79, 1, 255, 175, 80, 4, 255, 170, 83, 3, 255, 170, 80, 1, 255, 162, 73, 3, 255, 149, 69, 0, 255, 128, 65, 7, 255, 107, 62, 7, 255, 84, 48, 1, 255, 85, 51, 2, 255, 82, 51, 4, 255, 86, 51, 7, 255, 94, 53, 5, 255, 90, 56, 1, 255, 98, 56, 4, 255, 100, 56, 6, 255, 98, 54, 3, 255, 99, 54, 2, 255, 101, 54, 2, 255, 98, 53, 1, 255, 96, 55, 3, 255, 95, 56, 4, 255, 93, 50, 1, 255, 98, 52, 9, 255, 92, 49, 4, 255, 90, 50, 1, 255, 94, 51, 1, 255, 98, 51, 1, 255, 99, 52, 3, 255, 101, 54, 4, 255, 103, 52, 4, 255, 102, 51, 4, 255, 90, 48, 0, 255, 84, 50, 0, 255, 81, 50, 3, 255, 76, 48, 4, 255, 81, 47, 6, 255, 78, 46, 2, 255, 82, 51, 4, 255, 84, 47, 3, 255, 89, 47, 5, 255, 91, 52, 6, 255, 86, 45, 1, 255, 83, 47, 3, 255, 83, 50, 4, 255, 88, 47, 5, 255, 87, 42, 3, 255, 85, 42, 1, 255, 83, 40, 3, 255, 79, 43, 7, 255, 76, 40, 4, 255, 83, 46, 1, 255, 89, 48, 2, 255, 95, 49, 8, 255, 93, 49, 6, 255, 98, 49, 3, 255, 100, 53, 7, 255, 105, 57, 6, 255, 107, 57, 4, 255, 102, 51, 4, 255, 103, 56, 4, 255, 105, 55, 0, 255, 107, 45, 10, 255, 105, 47, 11, 255, 107, 52, 2, 255, 113, 52, 7, 255, 104, 53, 1, 255, 105, 56, 3, 255, 106, 54, 4, 255, 114, 59, 5, 255, 109, 56, 6, 255, 101, 54, 7, 255, 102, 54, 6, 255, 106, 55, 3, 255, 101, 54, 5, 255, 106, 57, 7, 255, 105, 59, 4, 255, 116, 53, 9, 255, 111, 56, 8, 255, 105, 56, 3, 255, 109, 58, 2, 255, 111, 56, 7, 255, 101, 55, 7, 255, 103, 55, 8, 255, 99, 55, 9, 255, 95, 50, 13, 255, 83, 50, 11, 255, 98, 55, 17, 255, 139, 69, 15, 255, 156, 70, 5, 255, 140, 60, 7, 255, 126, 58, 3, 255, 119, 52, 1, 255, 121, 58, 5, 255, 125, 59, 8, 255, 132, 56, 6, 255, 127, 61, 3, 255, 128, 60, 5, 255, 127, 58, 9, 255, 112, 53, 10, 255, 110, 51, 7, 255, 102, 53, 5, 255, 95, 48, 6, 255, 87, 47, 6, 255, 96, 51, 6, 255, 97, 52, 6, 255, 90, 49, 8, 255, 92, 54, 8, 255, 90, 55, 16, 255, 95, 57, 7, 255, 101, 55, 4, 255, 99, 49, 4, 255, 103, 55, 9, 255, 97, 57, 5, 255, 92, 54, 4, 255, 107, 60, 8, 255, 95, 58, 4, 255, 92, 53, 5, 255, 89, 53, 3, 255, 87, 58, 7, 255, 96, 60, 11, 255, 137, 82, 5, 255, 131, 81, 9, 255, 137, 85, 10, 255, 142, 84, 22, 255, 147, 84, 13, 255, 168, 94, 11, 255, 164, 96, 14, 255, 179, 112, 17, 255, 195, 124, 13, 255, 203, 127, 10, 255, 206, 131, 6, 255, 207, 136, 12, 255, 203, 139, 11, 255, 204, 136, 8, 255, 209, 134, 11, 255, 201, 134, 7, 255, 208, 136, 17, 255, 213, 136, 22, 255, 212, 136, 11, 255, 209, 136, 18, 255, 212, 140, 15, 255, 212, 137, 6, 255, 211, 135, 7, 255, 216, 135, 12, 255, 208, 135, 1, 255, 210, 135, 5, 255, 211, 133, 7, 255, 211, 132, 13, 255, 195, 112, 9, 255, 196, 114, 1, 255, 202, 125, 10, 255, 196, 114, 10, 255, 200, 120, 8, 255, 196, 118, 14, 255, 178, 99, 11, 255, 169, 88, 4, 255, 174, 88, 3, 255, 174, 94, 4, 255, 176, 103, 9, 255, 171, 101, 4, 255, 196, 123, 9, 255, 204, 137, 1, 255, 202, 137, 8, 255, 205, 137, 16, 255, 203, 140, 3, 255, 203, 141, 8, 255, 205, 141, 8, 255, 202, 137, 8, 255, 204, 142, 10, 255, 202, 137, 5, 255, 200, 133, 3, 255, 203, 136, 6, 255, 206, 138, 11, 255, 206, 139, 15, 255, 204, 139, 13, 255, 205, 141, 10, 255, 205, 143, 9, 255, 204, 142, 9, 255, 206, 142, 13, 255, 205, 137, 14, 255, 203, 132, 15, 255, 196, 126, 13, 255, 199, 127, 13, 255, 201, 130, 6, 255, 199, 127, 12, 255, 199, 125, 11, 255, 197, 122, 5, 255, 197, 119, 10, 255, 200, 121, 11, 255, 198, 119, 5, 255, 199, 119, 2, 255, 188, 105, 11, 255, 171, 85, 10, 255, 175, 90, 12, 255, 174, 89, 7, 255, 176, 86, 7, 255, 177, 86, 7, 255, 176, 84, 6, 255, 169, 77, 4, 255, 167, 74, 4, 255, 167, 74, 5, 255, 167, 72, 6, 255, 162, 66, 6, 255, 158, 64, 1, 255, 170, 80, 3, 255, 169, 79, 2, 255, 169, 71, 8, 255, 167, 66, 10, 255, 150, 62, 7, 255, 138, 59, 3, 255, 146, 67, 1, 255, 144, 70, 4, 255, 140, 73, 13, 255, 121, 56, 2, 255, 139, 66, 5, 255, 166, 79, 5, 255, 172, 81, 7, 255, 137, 60, 6, 255, 105, 43, 5, 255, 103, 45, 1, 255, 117, 46, 2, 255, 135, 55, 5, 255, 142, 64, 6, 255, 148, 63, 4, 255, 160, 68, 3, 255, 174, 80, 4, 255, 180, 87, 3, 255, 189, 100, 3, 255, 194, 104, 8, 255, 188, 96, 2, 255, 190, 98, 6, 255, 194, 106, 8, 255, 200, 117, 5, 255, 201, 117, 4, 255, 198, 116, 3, 255, 195, 119, 1, 255, 195, 118, 5, 255, 194, 116, 10, 255, 194, 116, 7, 255, 196, 119, 3, 255, 195, 116, 3, 255, 197, 117, 0, 255, 193, 111, 5, 255, 160, 77, 8, 255, 148, 63, 5, 255, 149, 65, 2, 255, 149, 68, 5, 255, 143, 65, 3, 255, 141, 62, 5, 255, 139, 58, 3, 255, 135, 57, 2, 255, 137, 59, 2, 255, 140, 59, 3, 255, 137, 60, 6, 255, 133, 53, 2, 255, 130, 51, 4, 255, 126, 50, 6, 255, 124, 49, 1, 255, 131, 56, 2, 255, 121, 47, 4, 255, 124, 47, 5, 255, 125, 52, 3, 255, 128, 57, 0, 255, 148, 67, 11, 255, 149, 67, 5, 255, 147, 70, 3, 255, 150, 70, 4, 255, 153, 67, 1, 255, 156, 70, 0, 255, 151, 69, 0, 255, 149, 68, 2, 255, 148, 63, 1, 255, 160, 68, 3, 255, 170, 76, 2, 255, 173, 78, 0, 255, 178, 85, 4, 255, 175, 85, 1, 255, 174, 85, 1, 255, 171, 83, 2, 255, 170, 83, 2, 255, 171, 84, 4, 255, 172, 83, 3, 255, 170, 81, 1, 255, 173, 84, 4, 255, 172, 84, 2, 255, 173, 84, 1, 255, 170, 81, 2, 255, 165, 78, 1, 255, 164, 78, 2, 255, 164, 78, 1, 255, 161, 75, 0, 255, 157, 74, 1, 255, 157, 74, 2, 255, 159, 74, 3, 255, 162, 75, 3, 255, 165, 77, 3, 255, 161, 75, 2, 255, 157, 71, 0, 255, 157, 71, 0, 255, 155, 70, 2, 255, 152, 67, 2, 255, 148, 65, 0, 255, 151, 67, 2, 255, 150, 67, 1, 255, 154, 69, 1, 255, 160, 72, 2, 255, 167, 75, 4, 255, 2, 9, 27, 255, 0, 1, 13, 255, 1, 9, 29, 255, 4, 17, 36, 255, 2, 15, 32, 255, 2, 16, 30, 255, 4, 6, 22, 255, 3, 0, 6, 255, 2, 0, 3, 255, 0, 2, 19, 255, 8, 0, 6, 255, 1, 0, 48, 255, 16, 45, 221, 255, 72, 77, 94, 255, 37, 22, 0, 255, 28, 9, 6, 255, 33, 29, 147, 255, 6, 17, 94, 255, 18, 0, 0, 255, 9, 5, 2, 255, 13, 6, 3, 255, 22, 5, 4, 255, 17, 5, 2, 255, 19, 8, 2, 255, 26, 7, 5, 255, 18, 5, 7, 255, 14, 5, 2, 255, 18, 7, 5, 255, 19, 7, 6, 255, 18, 6, 3, 255, 23, 10, 4, 255, 31, 11, 5, 255, 28, 13, 4, 255, 31, 9, 2, 255, 37, 10, 3, 255, 37, 10, 2, 255, 39, 13, 5, 255, 44, 12, 4, 255, 41, 12, 5, 255, 35, 9, 3, 255, 37, 12, 3, 255, 32, 11, 0, 255, 36, 17, 4, 255, 37, 11, 2, 255, 53, 17, 6, 255, 67, 23, 5, 255, 76, 26, 4, 255, 80, 25, 2, 255, 88, 25, 5, 255, 63, 28, 3, 255, 50, 26, 3, 255, 53, 22, 1, 255, 49, 21, 0, 255, 39, 22, 2, 255, 52, 29, 2, 255, 60, 31, 5, 255, 55, 30, 5, 255, 56, 32, 2, 255, 62, 39, 6, 255, 69, 38, 1, 255, 72, 42, 0, 255, 68, 46, 2, 255, 68, 43, 1, 255, 78, 46, 2, 255, 77, 53, 1, 255, 84, 54, 4, 255, 101, 54, 7, 255, 73, 53, 4, 255, 121, 81, 7, 255, 157, 90, 5, 255, 165, 96, 8, 255, 164, 101, 4, 255, 153, 81, 6, 255, 113, 51, 4, 255, 87, 55, 4, 255, 80, 57, 5, 255, 89, 59, 3, 255, 92, 57, 4, 255, 89, 53, 0, 255, 88, 59, 8, 255, 88, 54, 9, 255, 83, 50, 2, 255, 82, 58, 1, 255, 92, 59, 6, 255, 80, 51, 6, 255, 77, 55, 4, 255, 122, 86, 5, 255, 175, 111, 7, 255, 185, 103, 4, 255, 176, 90, 1, 255, 182, 89, 3, 255, 179, 90, 5, 255, 172, 82, 3, 255, 170, 80, 3, 255, 160, 72, 4, 255, 143, 72, 5, 255, 107, 61, 6, 255, 99, 52, 4, 255, 87, 46, 3, 255, 79, 48, 9, 255, 77, 54, 4, 255, 86, 52, 3, 255, 91, 51, 4, 255, 94, 56, 0, 255, 99, 58, 7, 255, 97, 50, 7, 255, 94, 55, 5, 255, 95, 57, 4, 255, 97, 55, 3, 255, 100, 55, 5, 255, 102, 52, 2, 255, 101, 52, 1, 255, 97, 54, 3, 255, 94, 52, 5, 255, 94, 53, 4, 255, 95, 53, 1, 255, 97, 52, 4, 255, 102, 52, 6, 255, 97, 52, 5, 255, 91, 49, 3, 255, 93, 50, 5, 255, 95, 53, 6, 255, 91, 48, 1, 255, 93, 50, 3, 255, 89, 48, 2, 255, 85, 49, 1, 255, 85, 52, 6, 255, 79, 45, 6, 255, 82, 49, 8, 255, 80, 48, 5, 255, 82, 46, 2, 255, 88, 47, 4, 255, 91, 49, 5, 255, 89, 49, 3, 255, 93, 49, 4, 255, 83, 48, 3, 255, 82, 51, 2, 255, 97, 49, 3, 255, 101, 46, 2, 255, 96, 46, 5, 255, 92, 48, 7, 255, 86, 42, 9, 255, 94, 44, 10, 255, 102, 56, 7, 255, 100, 52, 3, 255, 105, 56, 8, 255, 105, 52, 4, 255, 98, 55, 2, 255, 97, 54, 6, 255, 102, 54, 6, 255, 102, 56, 1, 255, 99, 51, 1, 255, 109, 58, 9, 255, 106, 53, 3, 255, 106, 53, 4, 255, 106, 56, 6, 255, 99, 54, 9, 255, 100, 54, 9, 255, 101, 55, 2, 255, 106, 55, 6, 255, 104, 57, 8, 255, 107, 55, 5, 255, 105, 56, 2, 255, 100, 51, 4, 255, 107, 54, 4, 255, 107, 52, 9, 255, 110, 55, 9, 255, 108, 57, 2, 255, 109, 52, 6, 255, 108, 59, 5, 255, 107, 60, 14, 255, 109, 57, 5, 255, 106, 54, 10, 255, 104, 53, 7, 255, 108, 57, 7, 255, 110, 54, 2, 255, 111, 52, 7, 255, 113, 54, 8, 255, 106, 53, 5, 255, 95, 51, 10, 255, 116, 57, 6, 255, 147, 70, 5, 255, 151, 73, 4, 255, 147, 66, 9, 255, 144, 64, 6, 255, 145, 67, 4, 255, 155, 68, 2, 255, 159, 69, 7, 255, 158, 70, 10, 255, 157, 70, 3, 255, 150, 66, 3, 255, 140, 58, 10, 255, 125, 59, 6, 255, 108, 56, 2, 255, 100, 52, 10, 255, 95, 51, 12, 255, 94, 49, 3, 255, 90, 52, 2, 255, 87, 51, 14, 255, 98, 47, 9, 255, 93, 51, 6, 255, 97, 58, 3, 255, 97, 52, 4, 255, 88, 48, 8, 255, 97, 52, 7, 255, 96, 59, 8, 255, 101, 52, 9, 255, 105, 50, 4, 255, 97, 55, 4, 255, 90, 58, 7, 255, 97, 60, 8, 255, 88, 56, 9, 255, 96, 60, 13, 255, 147, 94, 16, 255, 158, 97, 12, 255, 177, 109, 12, 255, 174, 101, 11, 255, 190, 113, 11, 255, 191, 121, 16, 255, 197, 130, 14, 255, 201, 132, 9, 255, 204, 131, 10, 255, 207, 131, 13, 255, 207, 134, 10, 255, 207, 135, 9, 255, 205, 137, 11, 255, 201, 122, 19, 255, 197, 123, 14, 255, 207, 140, 16, 255, 215, 143, 14, 255, 211, 139, 5, 255, 211, 140, 9, 255, 216, 136, 20, 255, 218, 137, 9, 255, 214, 135, 5, 255, 217, 136, 12, 255, 213, 138, 12, 255, 208, 134, 3, 255, 209, 135, 5, 255, 210, 133, 5, 255, 201, 120, 5, 255, 206, 123, 9, 255, 210, 129, 9, 255, 206, 126, 6, 255, 201, 119, 15, 255, 207, 127, 10, 255, 213, 135, 13, 255, 177, 95, 6, 255, 165, 79, 6, 255, 172, 91, 3, 255, 170, 96, 3, 255, 172, 103, 9, 255, 183, 116, 8, 255, 201, 134, 5, 255, 204, 137, 10, 255, 205, 139, 11, 255, 208, 142, 11, 255, 205, 142, 7, 255, 204, 143, 10, 255, 201, 138, 10, 255, 207, 144, 10, 255, 204, 141, 13, 255, 198, 133, 12, 255, 193, 126, 5, 255, 195, 126, 5, 255, 203, 135, 10, 255, 208, 140, 12, 255, 205, 137, 7, 255, 208, 140, 9, 255, 205, 138, 4, 255, 200, 135, 7, 255, 200, 134, 10, 255, 201, 130, 16, 255, 200, 128, 17, 255, 197, 124, 16, 255, 197, 124, 9, 255, 199, 125, 3, 255, 200, 125, 12, 255, 199, 123, 18, 255, 197, 121, 15, 255, 195, 119, 10, 255, 199, 121, 11, 255, 201, 122, 13, 255, 199, 118, 9, 255, 184, 101, 6, 255, 185, 99, 10, 255, 181, 99, 0, 255, 175, 88, 4, 255, 174, 84, 3, 255, 184, 92, 10, 255, 175, 82, 2, 255, 174, 81, 2, 255, 168, 77, 0, 255, 167, 75, 0, 255, 166, 75, 2, 255, 160, 67, 1, 255, 160, 65, 1, 255, 166, 72, 5, 255, 169, 77, 6, 255, 163, 72, 0, 255, 164, 73, 0, 255, 156, 64, 0, 255, 148, 63, 7, 255, 149, 68, 8, 255, 147, 67, 2, 255, 130, 61, 2, 255, 121, 56, 5, 255, 125, 54, 3, 255, 130, 58, 4, 255, 140, 68, 5, 255, 136, 65, 3, 255, 125, 57, 3, 255, 119, 49, 9, 255, 109, 45, 3, 255, 111, 48, 2, 255, 118, 54, 4, 255, 125, 54, 10, 255, 141, 59, 5, 255, 156, 69, 0, 255, 161, 71, 3, 255, 181, 94, 4, 255, 196, 109, 7, 255, 185, 94, 0, 255, 177, 84, 0, 255, 173, 82, 0, 255, 181, 91, 3, 255, 192, 104, 7, 255, 196, 115, 3, 255, 193, 119, 0, 255, 193, 117, 2, 255, 194, 114, 6, 255, 191, 113, 5, 255, 191, 111, 5, 255, 192, 109, 6, 255, 191, 109, 2, 255, 189, 103, 5, 255, 147, 64, 6, 255, 135, 57, 3, 255, 141, 62, 4, 255, 143, 63, 2, 255, 141, 63, 1, 255, 143, 64, 2, 255, 143, 65, 3, 255, 139, 62, 5, 255, 138, 55, 6, 255, 139, 54, 5, 255, 134, 51, 1, 255, 131, 50, 2, 255, 131, 50, 8, 255, 119, 41, 0, 255, 132, 55, 7, 255, 132, 55, 5, 255, 130, 53, 1, 255, 129, 50, 0, 255, 118, 41, 6, 255, 115, 39, 5, 255, 144, 65, 6, 255, 151, 68, 7, 255, 155, 68, 3, 255, 160, 73, 1, 255, 158, 76, 1, 255, 160, 76, 2, 255, 159, 72, 4, 255, 150, 68, 3, 255, 150, 67, 4, 255, 162, 73, 3, 255, 171, 81, 1, 255, 174, 81, 3, 255, 171, 79, 3, 255, 169, 79, 2, 255, 166, 78, 4, 255, 163, 78, 1, 255, 164, 80, 1, 255, 165, 78, 0, 255, 167, 77, 2, 255, 168, 78, 1, 255, 172, 80, 4, 255, 170, 80, 1, 255, 166, 80, 2, 255, 162, 76, 1, 255, 158, 74, 3, 255, 156, 73, 4, 255, 151, 68, 2, 255, 152, 68, 3, 255, 148, 69, 2, 255, 150, 69, 2, 255, 151, 68, 2, 255, 157, 72, 1, 255, 167, 78, 5, 255, 166, 77, 3, 255, 162, 73, 5, 255, 154, 66, 3, 255, 149, 65, 2, 255, 145, 61, 1, 255, 146, 61, 4, 255, 147, 62, 4, 255, 147, 62, 2, 255, 153, 69, 2, 255, 160, 72, 5, 255, 161, 70, 2, 255, 19, 65, 117, 255, 3, 21, 33, 255, 2, 6, 9, 255, 3, 9, 18, 255, 2, 12, 33, 255, 4, 12, 30, 255, 2, 1, 7, 255, 2, 0, 5, 255, 1, 2, 6, 255, 2, 3, 5, 255, 1, 0, 26, 255, 10, 37, 216, 255, 73, 85, 121, 255, 52, 32, 0, 255, 27, 10, 0, 255, 29, 28, 110, 255, 6, 22, 122, 255, 18, 2, 0, 255, 14, 5, 6, 255, 12, 5, 3, 255, 15, 5, 4, 255, 18, 5, 4, 255, 18, 6, 5, 255, 16, 5, 4, 255, 16, 5, 2, 255, 18, 8, 4, 255, 17, 9, 7, 255, 19, 6, 3, 255, 23, 8, 4, 255, 26, 9, 7, 255, 27, 9, 4, 255, 31, 9, 3, 255, 33, 8, 2, 255, 38, 9, 5, 255, 44, 14, 8, 255, 44, 13, 4, 255, 43, 13, 2, 255, 47, 13, 4, 255, 44, 15, 7, 255, 41, 16, 7, 255, 39, 13, 2, 255, 35, 14, 1, 255, 46, 17, 5, 255, 63, 19, 4, 255, 69, 26, 3, 255, 81, 24, 2, 255, 88, 24, 5, 255, 88, 23, 4, 255, 87, 23, 4, 255, 61, 22, 1, 255, 46, 24, 4, 255, 51, 24, 4, 255, 48, 23, 1, 255, 48, 25, 3, 255, 61, 30, 8, 255, 59, 25, 2, 255, 58, 30, 3, 255, 58, 34, 2, 255, 69, 40, 6, 255, 72, 38, 2, 255, 73, 41, 3, 255, 71, 45, 4, 255, 77, 47, 4, 255, 70, 47, 1, 255, 77, 53, 1, 255, 90, 62, 6, 255, 78, 54, 10, 255, 91, 68, 5, 255, 143, 88, 7, 255, 151, 94, 3, 255, 161, 97, 5, 255, 151, 79, 6, 255, 127, 59, 0, 255, 92, 49, 4, 255, 83, 55, 8, 255, 86, 57, 3, 255, 89, 58, 6, 255, 88, 60, 9, 255, 83, 60, 4, 255, 86, 58, 2, 255, 88, 53, 5, 255, 90, 59, 0, 255, 83, 59, 6, 255, 75, 51, 5, 255, 96, 70, 7, 255, 158, 101, 11, 255, 193, 113, 1, 255, 177, 93, 4, 255, 176, 85, 4, 255, 179, 92, 3, 255, 180, 97, 2, 255, 176, 85, 3, 255, 158, 78, 12, 255, 118, 65, 3, 255, 87, 54, 4, 255, 81, 51, 3, 255, 82, 46, 3, 255, 79, 49, 6, 255, 82, 50, 9, 255, 83, 48, 4, 255, 83, 52, 4, 255, 87, 53, 5, 255, 94, 53, 6, 255, 90, 59, 3, 255, 91, 55, 3, 255, 97, 54, 7, 255, 93, 57, 3, 255, 94, 55, 4, 255, 96, 58, 2, 255, 94, 57, 3, 255, 101, 53, 4, 255, 95, 51, 2, 255, 91, 56, 3, 255, 94, 54, 5, 255, 97, 52, 5, 255, 98, 52, 3, 255, 98, 53, 8, 255, 90, 49, 6, 255, 83, 48, 2, 255, 92, 48, 3, 255, 103, 52, 8, 255, 89, 49, 3, 255, 89, 50, 6, 255, 89, 49, 2, 255, 92, 51, 5, 255, 87, 48, 3, 255, 88, 49, 1, 255, 90, 49, 6, 255, 85, 50, 3, 255, 82, 46, 2, 255, 85, 48, 4, 255, 89, 52, 5, 255, 92, 55, 7, 255, 88, 50, 8, 255, 87, 50, 7, 255, 81, 50, 4, 255, 93, 52, 5, 255, 115, 55, 8, 255, 117, 55, 2, 255, 105, 48, 4, 255, 101, 54, 0, 255, 92, 47, 4, 255, 101, 53, 9, 255, 115, 54, 5, 255, 116, 57, 4, 255, 113, 56, 3, 255, 100, 50, 7, 255, 100, 53, 8, 255, 99, 53, 1, 255, 108, 55, 8, 255, 106, 56, 7, 255, 106, 57, 7, 255, 104, 52, 4, 255, 105, 56, 1, 255, 105, 56, 3, 255, 101, 52, 5, 255, 99, 53, 5, 255, 101, 56, 6, 255, 106, 57, 8, 255, 107, 57, 6, 255, 107, 56, 6, 255, 108, 57, 6, 255, 109, 56, 8, 255, 112, 59, 6, 255, 109, 59, 1, 255, 108, 58, 7, 255, 113, 55, 7, 255, 110, 59, 8, 255, 106, 51, 5, 255, 105, 56, 3, 255, 121, 66, 9, 255, 113, 57, 6, 255, 109, 56, 5, 255, 105, 57, 4, 255, 108, 57, 9, 255, 108, 60, 4, 255, 111, 63, 3, 255, 111, 61, 8, 255, 111, 60, 6, 255, 106, 61, 4, 255, 111, 52, 8, 255, 134, 55, 14, 255, 163, 74, 7, 255, 162, 71, 6, 255, 161, 74, 3, 255, 161, 69, 5, 255, 163, 70, 6, 255, 164, 71, 3, 255, 166, 73, 1, 255, 163, 69, 7, 255, 154, 66, 3, 255, 151, 68, 6, 255, 149, 72, 2, 255, 137, 64, 8, 255, 117, 55, 14, 255, 105, 56, 7, 255, 95, 53, 3, 255, 90, 48, 7, 255, 90, 55, 9, 255, 97, 58, 4, 255, 97, 52, 3, 255, 92, 54, 10, 255, 98, 59, 8, 255, 106, 60, 12, 255, 97, 55, 8, 255, 98, 55, 10, 255, 105, 67, 9, 255, 95, 54, 14, 255, 126, 81, 8, 255, 136, 84, 9, 255, 148, 90, 14, 255, 151, 92, 23, 255, 166, 106, 18, 255, 179, 113, 10, 255, 182, 107, 17, 255, 190, 116, 17, 255, 195, 123, 18, 255, 204, 136, 15, 255, 205, 132, 7, 255, 206, 131, 7, 255, 205, 130, 15, 255, 205, 135, 14, 255, 208, 136, 7, 255, 209, 134, 11, 255, 208, 135, 11, 255, 212, 139, 13, 255, 203, 131, 8, 255, 204, 132, 12, 255, 215, 144, 13, 255, 210, 139, 8, 255, 204, 133, 6, 255, 203, 130, 10, 255, 207, 132, 15, 255, 214, 140, 9, 255, 212, 138, 9, 255, 210, 140, 6, 255, 207, 138, 9, 255, 211, 137, 4, 255, 214, 138, 3, 255, 213, 134, 12, 255, 207, 125, 11, 255, 208, 129, 1, 255, 210, 132, 4, 255, 207, 128, 2, 255, 208, 135, 3, 255, 206, 134, 11, 255, 205, 126, 13, 255, 173, 87, 6, 255, 160, 84, 11, 255, 171, 104, 13, 255, 183, 116, 12, 255, 175, 105, 12, 255, 192, 124, 8, 255, 204, 138, 8, 255, 203, 138, 9, 255, 209, 142, 12, 255, 206, 141, 10, 255, 206, 144, 14, 255, 203, 144, 7, 255, 205, 144, 15, 255, 206, 144, 9, 255, 200, 134, 7, 255, 199, 130, 12, 255, 195, 125, 11, 255, 196, 127, 11, 255, 201, 132, 8, 255, 203, 135, 5, 255, 205, 135, 7, 255, 204, 133, 11, 255, 202, 129, 8, 255, 199, 127, 10, 255, 201, 128, 9, 255, 202, 129, 12, 255, 198, 126, 6, 255, 199, 123, 14, 255, 198, 124, 7, 255, 196, 121, 9, 255, 200, 121, 12, 255, 197, 119, 8, 255, 196, 118, 10, 255, 198, 123, 6, 255, 198, 119, 12, 255, 199, 117, 12, 255, 195, 111, 10, 255, 189, 108, 3, 255, 188, 106, 5, 255, 182, 99, 4, 255, 180, 92, 3, 255, 177, 89, 6, 255, 183, 93, 13, 255, 177, 86, 4, 255, 177, 85, 3, 255, 180, 89, 5, 255, 172, 80, 7, 255, 164, 73, 2, 255, 161, 71, 2, 255, 159, 68, 1, 255, 160, 67, 4, 255, 169, 76, 6, 255, 174, 82, 4, 255, 170, 81, 0, 255, 157, 65, 1, 255, 149, 60, 6, 255, 151, 66, 6, 255, 151, 69, 0, 255, 142, 69, 4, 255, 138, 71, 11, 255, 123, 55, 6, 255, 111, 49, 7, 255, 145, 71, 8, 255, 169, 90, 4, 255, 150, 75, 3, 255, 143, 63, 4, 255, 138, 60, 3, 255, 129, 57, 5, 255, 125, 56, 6, 255, 132, 59, 4, 255, 135, 56, 1, 255, 137, 61, 0, 255, 137, 62, 6, 255, 161, 76, 4, 255, 187, 100, 1, 255, 194, 104, 6, 255, 182, 93, 3, 255, 172, 83, 2, 255, 170, 75, 4, 255, 171, 75, 10, 255, 174, 84, 5, 255, 181, 99, 3, 255, 185, 103, 3, 255, 190, 103, 4, 255, 188, 100, 4, 255, 187, 99, 5, 255, 187, 100, 3, 255, 192, 105, 4, 255, 181, 93, 2, 255, 148, 61, 10, 255, 136, 60, 8, 255, 143, 67, 1, 255, 146, 68, 1, 255, 145, 65, 3, 255, 147, 66, 5, 255, 141, 65, 1, 255, 136, 61, 4, 255, 136, 56, 6, 255, 132, 49, 5, 255, 131, 51, 4, 255, 131, 59, 2, 255, 123, 50, 4, 255, 122, 47, 2, 255, 132, 56, 6, 255, 130, 54, 2, 255, 130, 53, 3, 255, 127, 49, 7, 255, 119, 43, 5, 255, 118, 43, 6, 255, 131, 53, 2, 255, 152, 67, 4, 255, 159, 72, 0, 255, 160, 71, 2, 255, 151, 73, 2, 255, 148, 72, 2, 255, 151, 71, 2, 255, 145, 66, 1, 255, 152, 65, 6, 255, 161, 74, 5, 255, 166, 76, 3, 255, 170, 77, 1, 255, 167, 74, 1, 255, 164, 72, 4, 255, 160, 72, 2, 255, 152, 70, 1, 255, 148, 64, 0, 255, 154, 69, 2, 255, 156, 71, 5, 255, 154, 69, 2, 255, 159, 73, 3, 255, 159, 72, 0, 255, 160, 73, 2, 255, 155, 69, 3, 255, 145, 62, 0, 255, 142, 62, 0, 255, 148, 67, 4, 255, 146, 65, 3, 255, 136, 63, 1, 255, 138, 62, 2, 255, 143, 60, 1, 255, 156, 68, 5, 255, 162, 72, 6, 255, 160, 67, 1, 255, 154, 64, 3, 255, 151, 61, 2, 255, 142, 62, 0, 255, 139, 60, 0, 255, 142, 60, 4, 255, 138, 62, 4, 255, 140, 60, 2, 255, 144, 62, 1, 255, 148, 66, 3, 255, 145, 62, 1, 255, 35, 76, 133, 255, 12, 50, 82, 255, 0, 7, 25, 255, 3, 15, 28, 255, 3, 7, 23, 255, 1, 1, 12, 255, 2, 0, 3, 255, 4, 2, 10, 255, 1, 2, 3, 255, 1, 0, 19, 255, 2, 25, 190, 255, 69, 90, 144, 255, 57, 45, 3, 255, 19, 6, 0, 255, 34, 23, 86, 255, 6, 23, 148, 255, 11, 3, 11, 255, 18, 3, 12, 255, 13, 5, 11, 255, 14, 4, 2, 255, 23, 9, 6, 255, 23, 9, 7, 255, 19, 8, 5, 255, 16, 8, 5, 255, 16, 7, 4, 255, 15, 9, 5, 255, 21, 8, 7, 255, 31, 7, 3, 255, 30, 8, 0, 255, 36, 14, 4, 255, 34, 12, 5, 255, 24, 8, 1, 255, 34, 11, 3, 255, 44, 15, 3, 255, 49, 12, 1, 255, 49, 11, 4, 255, 47, 11, 3, 255, 47, 17, 4, 255, 50, 17, 4, 255, 38, 12, 3, 255, 41, 14, 6, 255, 46, 13, 4, 255, 54, 19, 4, 255, 55, 22, 3, 255, 62, 30, 1, 255, 116, 40, 3, 255, 112, 33, 3, 255, 103, 37, 10, 255, 71, 28, 3, 255, 52, 21, 1, 255, 50, 24, 3, 255, 44, 24, 1, 255, 51, 30, 6, 255, 53, 27, 3, 255, 54, 27, 2, 255, 52, 30, 0, 255, 51, 34, 1, 255, 58, 43, 3, 255, 69, 38, 4, 255, 77, 41, 7, 255, 69, 43, 8, 255, 75, 45, 4, 255, 80, 48, 4, 255, 78, 44, 3, 255, 94, 55, 9, 255, 82, 52, 3, 255, 73, 57, 0, 255, 141, 88, 12, 255, 153, 89, 6, 255, 159, 101, 4, 255, 158, 91, 0, 255, 130, 60, 5, 255, 99, 51, 8, 255, 76, 52, 3, 255, 80, 55, 2, 255, 83, 58, 4, 255, 85, 58, 2, 255, 83, 56, 2, 255, 84, 58, 6, 255, 90, 56, 4, 255, 92, 59, 9, 255, 72, 52, 5, 255, 65, 52, 6, 255, 123, 91, 8, 255, 183, 114, 8, 255, 189, 99, 4, 255, 167, 83, 5, 255, 175, 83, 13, 255, 178, 88, 3, 255, 177, 93, 1, 255, 169, 87, 1, 255, 127, 71, 4, 255, 89, 53, 8, 255, 78, 49, 8, 255, 74, 48, 6, 255, 76, 53, 4, 255, 83, 52, 6, 255, 84, 51, 1, 255, 89, 54, 2, 255, 88, 50, 3, 255, 92, 53, 6, 255, 94, 55, 3, 255, 96, 57, 1, 255, 94, 60, 3, 255, 94, 56, 2, 255, 102, 54, 3, 255, 98, 54, 2, 255, 95, 52, 1, 255, 96, 59, 9, 255, 91, 56, 2, 255, 93, 53, 3, 255, 94, 49, 10, 255, 95, 51, 11, 255, 92, 52, 3, 255, 94, 53, 3, 255, 90, 52, 4, 255, 85, 50, 0, 255, 92, 52, 2, 255, 93, 57, 2, 255, 104, 60, 3, 255, 108, 58, 2, 255, 98, 54, 2, 255, 94, 53, 9, 255, 91, 52, 4, 255, 88, 51, 3, 255, 87, 50, 10, 255, 89, 49, 5, 255, 91, 48, 2, 255, 91, 54, 5, 255, 90, 52, 4, 255, 90, 49, 2, 255, 98, 56, 7, 255, 96, 53, 4, 255, 94, 50, 3, 255, 89, 51, 6, 255, 99, 53, 5, 255, 114, 58, 4, 255, 120, 57, 2, 255, 126, 58, 7, 255, 106, 45, 10, 255, 104, 48, 3, 255, 99, 50, 6, 255, 98, 46, 5, 255, 107, 50, 4, 255, 116, 57, 10, 255, 109, 56, 6, 255, 100, 54, 7, 255, 109, 58, 6, 255, 119, 61, 1, 255, 121, 56, 2, 255, 105, 55, 6, 255, 96, 56, 8, 255, 108, 57, 9, 255, 112, 61, 6, 255, 100, 57, 5, 255, 103, 58, 5, 255, 110, 58, 2, 255, 111, 60, 2, 255, 103, 60, 3, 255, 103, 58, 4, 255, 110, 61, 4, 255, 111, 61, 5, 255, 111, 60, 4, 255, 111, 59, 1, 255, 110, 58, 1, 255, 112, 60, 7, 255, 110, 59, 5, 255, 104, 59, 3, 255, 116, 56, 6, 255, 118, 55, 2, 255, 123, 61, 5, 255, 112, 57, 3, 255, 110, 59, 8, 255, 113, 56, 8, 255, 112, 56, 6, 255, 115, 62, 4, 255, 114, 60, 5, 255, 109, 55, 7, 255, 107, 54, 3, 255, 115, 61, 6, 255, 114, 56, 4, 255, 116, 53, 10, 255, 145, 68, 7, 255, 168, 78, 4, 255, 170, 74, 4, 255, 173, 76, 8, 255, 173, 74, 7, 255, 172, 68, 4, 255, 171, 69, 1, 255, 166, 70, 5, 255, 163, 68, 3, 255, 163, 65, 6, 255, 162, 70, 9, 255, 162, 72, 9, 255, 150, 65, 5, 255, 139, 65, 8, 255, 123, 63, 9, 255, 104, 54, 13, 255, 110, 69, 0, 255, 133, 77, 16, 255, 120, 65, 8, 255, 89, 53, 4, 255, 92, 54, 6, 255, 105, 64, 5, 255, 92, 59, 7, 255, 108, 67, 10, 255, 143, 94, 13, 255, 162, 97, 18, 255, 182, 112, 11, 255, 177, 99, 14, 255, 188, 108, 18, 255, 199, 124, 23, 255, 201, 127, 17, 255, 200, 123, 5, 255, 205, 126, 15, 255, 208, 131, 13, 255, 209, 135, 11, 255, 206, 135, 6, 255, 206, 136, 6, 255, 210, 137, 7, 255, 211, 139, 11, 255, 211, 142, 7, 255, 210, 137, 14, 255, 208, 132, 9, 255, 213, 135, 11, 255, 212, 137, 6, 255, 213, 139, 9, 255, 215, 139, 13, 255, 206, 132, 6, 255, 198, 124, 10, 255, 210, 134, 19, 255, 214, 142, 11, 255, 213, 146, 8, 255, 215, 153, 8, 255, 210, 145, 10, 255, 207, 137, 7, 255, 212, 141, 7, 255, 213, 140, 6, 255, 216, 142, 6, 255, 209, 131, 6, 255, 206, 125, 8, 255, 209, 133, 0, 255, 209, 131, 10, 255, 207, 130, 16, 255, 209, 135, 8, 255, 209, 135, 8, 255, 204, 131, 6, 255, 190, 114, 14, 255, 173, 101, 13, 255, 184, 116, 16, 255, 183, 117, 8, 255, 190, 121, 5, 255, 208, 139, 7, 255, 208, 141, 3, 255, 205, 142, 7, 255, 206, 146, 11, 255, 209, 147, 15, 255, 207, 146, 10, 255, 207, 147, 6, 255, 202, 141, 4, 255, 195, 129, 15, 255, 202, 135, 1, 255, 194, 124, 3, 255, 193, 124, 4, 255, 203, 133, 8, 255, 203, 133, 9, 255, 201, 131, 9, 255, 201, 131, 6, 255, 200, 131, 3, 255, 202, 131, 4, 255, 201, 129, 10, 255, 199, 126, 11, 255, 197, 122, 10, 255, 199, 123, 7, 255, 202, 125, 8, 255, 198, 126, 1, 255, 195, 123, 7, 255, 200, 126, 22, 255, 198, 124, 9, 255, 197, 123, 0, 255, 201, 123, 8, 255, 202, 124, 11, 255, 201, 119, 14, 255, 190, 106, 6, 255, 191, 108, 5, 255, 189, 106, 4, 255, 185, 100, 5, 255, 183, 93, 8, 255, 183, 89, 5, 255, 181, 88, 6, 255, 179, 86, 3, 255, 177, 82, 3, 255, 178, 83, 2, 255, 172, 75, 3, 255, 169, 74, 3, 255, 166, 74, 6, 255, 163, 71, 4, 255, 163, 72, 2, 255, 166, 76, 1, 255, 172, 81, 8, 255, 161, 67, 3, 255, 160, 64, 6, 255, 150, 64, 3, 255, 146, 62, 0, 255, 152, 69, 3, 255, 151, 76, 8, 255, 149, 72, 7, 255, 115, 56, 1, 255, 97, 47, 5, 255, 127, 56, 10, 255, 176, 90, 14, 255, 169, 92, 3, 255, 161, 77, 1, 255, 150, 64, 4, 255, 129, 59, 0, 255, 138, 62, 4, 255, 140, 58, 4, 255, 131, 58, 4, 255, 128, 56, 2, 255, 140, 71, 11, 255, 161, 81, 5, 255, 177, 93, 3, 255, 189, 97, 5, 255, 188, 97, 8, 255, 185, 95, 11, 255, 173, 86, 3, 255, 174, 85, 4, 255, 172, 80, 5, 255, 167, 72, 2, 255, 165, 75, 4, 255, 165, 83, 2, 255, 174, 88, 1, 255, 177, 89, 2, 255, 174, 84, 3, 255, 180, 79, 6, 255, 155, 73, 1, 255, 135, 64, 7, 255, 139, 62, 1, 255, 143, 65, 2, 255, 143, 66, 3, 255, 144, 64, 1, 255, 144, 62, 6, 255, 134, 55, 4, 255, 126, 51, 1, 255, 118, 45, 1, 255, 111, 39, 1, 255, 121, 51, 2, 255, 121, 50, 3, 255, 113, 40, 3, 255, 124, 55, 7, 255, 124, 52, 2, 255, 125, 48, 0, 255, 120, 41, 5, 255, 126, 49, 5, 255, 127, 53, 3, 255, 122, 49, 2, 255, 123, 49, 2, 255, 131, 53, 6, 255, 143, 63, 4, 255, 151, 66, 2, 255, 144, 64, 1, 255, 144, 63, 3, 255, 146, 63, 2, 255, 142, 63, 1, 255, 143, 60, 2, 255, 158, 74, 7, 255, 160, 73, 2, 255, 160, 70, 0, 255, 158, 69, 1, 255, 150, 64, 1, 255, 147, 64, 4, 255, 140, 61, 6, 255, 133, 54, 2, 255, 131, 54, 1, 255, 132, 59, 3, 255, 134, 63, 2, 255, 138, 67, 1, 255, 145, 68, 3, 255, 147, 65, 5, 255, 145, 63, 7, 255, 140, 62, 6, 255, 138, 62, 3, 255, 139, 63, 1, 255, 138, 63, 0, 255, 135, 61, 5, 255, 128, 52, 5, 255, 123, 44, 5, 255, 118, 36, 2, 255, 126, 46, 4, 255, 134, 51, 3, 255, 135, 53, 0, 255, 139, 55, 4, 255, 136, 57, 7, 255, 137, 57, 6, 255, 135, 53, 1, 255, 133, 57, 4, 255, 131, 53, 4, 255, 126, 47, 4, 255, 129, 49, 4, 255, 134, 52, 7, 255, 17, 49, 71, 255, 4, 14, 67, 255, 3, 14, 70, 255, 1, 17, 52, 255, 1, 4, 2, 255, 0, 2, 2, 255, 3, 0, 5, 255, 2, 1, 3, 255, 0, 0, 10, 255, 3, 22, 168, 255, 61, 89, 170, 255, 70, 55, 15, 255, 27, 9, 0, 255, 36, 19, 61, 255, 9, 23, 154, 255, 11, 7, 29, 255, 12, 4, 0, 255, 22, 8, 6, 255, 20, 6, 4, 255, 21, 6, 5, 255, 22, 6, 4, 255, 26, 8, 6, 255, 23, 6, 5, 255, 21, 5, 6, 255, 25, 8, 7, 255, 24, 7, 6, 255, 22, 8, 5, 255, 30, 10, 3, 255, 42, 13, 8, 255, 38, 11, 4, 255, 29, 8, 1, 255, 37, 14, 7, 255, 43, 16, 5, 255, 44, 12, 1, 255, 51, 12, 1, 255, 58, 19, 8, 255, 52, 16, 5, 255, 48, 14, 2, 255, 49, 20, 3, 255, 45, 16, 3, 255, 34, 16, 2, 255, 44, 16, 5, 255, 61, 21, 6, 255, 59, 24, 1, 255, 91, 32, 7, 255, 135, 44, 8, 255, 121, 29, 1, 255, 92, 32, 3, 255, 57, 22, 1, 255, 56, 22, 5, 255, 57, 26, 4, 255, 57, 23, 3, 255, 52, 25, 4, 255, 48, 26, 2, 255, 55, 29, 1, 255, 62, 34, 4, 255, 60, 34, 1, 255, 61, 41, 2, 255, 68, 45, 2, 255, 75, 42, 4, 255, 69, 44, 4, 255, 73, 49, 0, 255, 76, 47, 1, 255, 96, 52, 3, 255, 90, 56, 1, 255, 75, 47, 4, 255, 107, 74, 7, 255, 171, 107, 5, 255, 171, 111, 2, 255, 170, 103, 2, 255, 148, 71, 0, 255, 119, 54, 3, 255, 99, 56, 5, 255, 83, 54, 5, 255, 84, 60, 4, 255, 86, 56, 0, 255, 86, 58, 3, 255, 81, 58, 3, 255, 89, 58, 3, 255, 96, 59, 3, 255, 78, 57, 0, 255, 79, 61, 8, 255, 149, 105, 8, 255, 197, 117, 4, 255, 187, 98, 1, 255, 168, 83, 5, 255, 169, 80, 4, 255, 174, 87, 5, 255, 171, 92, 7, 255, 154, 80, 6, 255, 111, 63, 0, 255, 87, 53, 6, 255, 79, 49, 4, 255, 91, 54, 5, 255, 88, 52, 3, 255, 86, 57, 1, 255, 88, 53, 1, 255, 98, 59, 4, 255, 99, 64, 6, 255, 92, 57, 2, 255, 97, 52, 3, 255, 102, 58, 5, 255, 101, 55, 1, 255, 98, 57, 5, 255, 103, 58, 3, 255, 94, 55, 0, 255, 92, 53, 5, 255, 95, 53, 2, 255, 98, 56, 4, 255, 93, 59, 5, 255, 93, 62, 5, 255, 98, 58, 1, 255, 99, 51, 3, 255, 90, 51, 5, 255, 85, 53, 3, 255, 87, 55, 4, 255, 88, 56, 2, 255, 100, 59, 5, 255, 95, 57, 3, 255, 93, 57, 1, 255, 95, 57, 5, 255, 91, 54, 8, 255, 96, 54, 6, 255, 96, 54, 0, 255, 90, 48, 0, 255, 93, 54, 6, 255, 94, 56, 6, 255, 93, 53, 2, 255, 99, 51, 7, 255, 96, 47, 3, 255, 104, 54, 7, 255, 107, 57, 6, 255, 104, 56, 3, 255, 103, 58, 3, 255, 100, 58, 1, 255, 107, 54, 8, 255, 119, 61, 5, 255, 125, 59, 1, 255, 129, 54, 2, 255, 117, 52, 9, 255, 102, 47, 6, 255, 111, 50, 3, 255, 112, 47, 6, 255, 103, 48, 12, 255, 115, 55, 6, 255, 114, 56, 5, 255, 113, 58, 6, 255, 109, 56, 7, 255, 111, 58, 8, 255, 111, 52, 6, 255, 103, 53, 4, 255, 104, 58, 5, 255, 110, 57, 3, 255, 110, 56, 4, 255, 100, 54, 4, 255, 103, 58, 4, 255, 116, 55, 5, 255, 115, 58, 3, 255, 104, 59, 0, 255, 109, 57, 6, 255, 110, 59, 5, 255, 110, 58, 8, 255, 111, 59, 5, 255, 110, 57, 2, 255, 108, 57, 8, 255, 107, 57, 8, 255, 113, 60, 13, 255, 110, 58, 2, 255, 115, 57, 2, 255, 115, 53, 11, 255, 121, 60, 6, 255, 123, 61, 5, 255, 111, 53, 11, 255, 114, 58, 10, 255, 117, 59, 5, 255, 118, 58, 3, 255, 114, 54, 8, 255, 113, 56, 12, 255, 106, 54, 3, 255, 105, 54, 6, 255, 112, 56, 11, 255, 113, 57, 6, 255, 116, 65, 2, 255, 146, 74, 4, 255, 169, 74, 2, 255, 170, 76, 6, 255, 167, 74, 4, 255, 166, 70, 4, 255, 165, 70, 1, 255, 162, 68, 2, 255, 162, 67, 3, 255, 168, 70, 14, 255, 164, 72, 7, 255, 163, 71, 3, 255, 160, 71, 3, 255, 155, 74, 5, 255, 142, 75, 2, 255, 133, 76, 9, 255, 135, 76, 13, 255, 144, 73, 9, 255, 140, 76, 5, 255, 136, 87, 11, 255, 146, 89, 15, 255, 163, 95, 17, 255, 171, 105, 24, 255, 184, 116, 18, 255, 197, 122, 12, 255, 203, 123, 20, 255, 200, 121, 25, 255, 198, 124, 21, 255, 201, 129, 9, 255, 201, 128, 9, 255, 203, 130, 16, 255, 203, 129, 17, 255, 207, 134, 19, 255, 205, 134, 10, 255, 208, 133, 11, 255, 208, 136, 12, 255, 211, 141, 12, 255, 212, 139, 10, 255, 217, 144, 12, 255, 214, 142, 14, 255, 208, 132, 17, 255, 209, 134, 13, 255, 213, 136, 5, 255, 213, 137, 8, 255, 210, 134, 10, 255, 212, 137, 12, 255, 211, 139, 4, 255, 216, 144, 7, 255, 220, 153, 4, 255, 219, 154, 6, 255, 217, 152, 7, 255, 216, 152, 4, 255, 216, 145, 11, 255, 218, 137, 10, 255, 220, 137, 5, 255, 214, 142, 8, 255, 210, 136, 3, 255, 209, 133, 8, 255, 206, 130, 7, 255, 208, 133, 4, 255, 209, 135, 7, 255, 207, 137, 10, 255, 207, 137, 2, 255, 213, 138, 2, 255, 207, 135, 5, 255, 199, 129, 16, 255, 193, 121, 6, 255, 200, 126, 10, 255, 196, 126, 4, 255, 201, 136, 5, 255, 206, 144, 5, 255, 206, 144, 3, 255, 208, 146, 8, 255, 212, 148, 17, 255, 207, 145, 10, 255, 206, 144, 5, 255, 207, 145, 4, 255, 196, 131, 4, 255, 183, 109, 21, 255, 192, 120, 5, 255, 196, 126, 4, 255, 205, 135, 9, 255, 207, 138, 11, 255, 204, 134, 11, 255, 204, 134, 14, 255, 204, 133, 11, 255, 200, 130, 3, 255, 201, 131, 3, 255, 200, 128, 13, 255, 196, 124, 14, 255, 194, 124, 8, 255, 197, 128, 12, 255, 194, 128, 10, 255, 200, 124, 13, 255, 203, 126, 14, 255, 199, 124, 10, 255, 204, 129, 14, 255, 203, 130, 3, 255, 195, 120, 2, 255, 199, 121, 7, 255, 194, 113, 7, 255, 187, 102, 2, 255, 186, 100, 4, 255, 183, 97, 4, 255, 186, 99, 2, 255, 188, 100, 3, 255, 184, 91, 3, 255, 174, 82, 0, 255, 178, 86, 5, 255, 179, 85, 4, 255, 171, 75, 0, 255, 173, 73, 2, 255, 172, 75, 3, 255, 168, 74, 2, 255, 165, 71, 4, 255, 161, 68, 2, 255, 158, 66, 2, 255, 158, 67, 13, 255, 148, 54, 9, 255, 152, 56, 6, 255, 145, 60, 3, 255, 141, 59, 1, 255, 148, 69, 1, 255, 153, 75, 5, 255, 147, 63, 8, 255, 124, 60, 8, 255, 106, 57, 2, 255, 95, 39, 5, 255, 140, 70, 9, 255, 177, 87, 7, 255, 157, 73, 6, 255, 111, 50, 4, 255, 125, 55, 8, 255, 147, 65, 3, 255, 141, 66, 8, 255, 126, 55, 4, 255, 128, 56, 2, 255, 163, 84, 7, 255, 164, 79, 3, 255, 182, 99, 3, 255, 190, 104, 5, 255, 188, 100, 6, 255, 187, 100, 1, 255, 185, 97, 0, 255, 173, 84, 2, 255, 177, 89, 2, 255, 184, 96, 3, 255, 169, 82, 7, 255, 162, 79, 6, 255, 167, 85, 3, 255, 166, 81, 1, 255, 157, 71, 2, 255, 147, 64, 3, 255, 141, 62, 4, 255, 137, 60, 7, 255, 137, 61, 2, 255, 136, 59, 4, 255, 139, 60, 4, 255, 138, 61, 1, 255, 133, 56, 5, 255, 126, 51, 4, 255, 124, 52, 3, 255, 121, 49, 6, 255, 122, 48, 5, 255, 122, 48, 3, 255, 123, 46, 2, 255, 123, 46, 3, 255, 125, 46, 7, 255, 125, 49, 1, 255, 125, 50, 1, 255, 123, 48, 8, 255, 126, 52, 3, 255, 127, 54, 3, 255, 120, 49, 0, 255, 113, 41, 2, 255, 112, 39, 6, 255, 124, 49, 3, 255, 136, 57, 3, 255, 145, 65, 4, 255, 147, 65, 4, 255, 143, 62, 7, 255, 139, 59, 6, 255, 135, 56, 0, 255, 143, 60, 1, 255, 151, 67, 1, 255, 155, 72, 3, 255, 150, 68, 1, 255, 141, 61, 1, 255, 137, 59, 3, 255, 129, 53, 7, 255, 123, 47, 2, 255, 122, 49, 4, 255, 116, 48, 1, 255, 123, 55, 6, 255, 131, 59, 6, 255, 130, 59, 4, 255, 125, 59, 3, 255, 127, 61, 2, 255, 132, 62, 1, 255, 137, 63, 2, 255, 136, 59, 6, 255, 129, 51, 5, 255, 118, 43, 5, 255, 105, 33, 2, 255, 97, 30, 3, 255, 92, 29, 2, 255, 106, 35, 5, 255, 113, 38, 4, 255, 115, 42, 5, 255, 113, 38, 4, 255, 106, 33, 2, 255, 110, 37, 3, 255, 118, 39, 1, 255, 120, 41, 5, 255, 112, 32, 3, 255, 100, 33, 6, 255, 99, 30, 2, 255, 103, 31, 3, 255, 12, 45, 69, 255, 0, 0, 34, 255, 2, 6, 45, 255, 0, 7, 25, 255, 2, 0, 10, 255, 2, 1, 4, 255, 2, 2, 4, 255, 0, 0, 2, 255, 1, 20, 160, 255, 59, 86, 183, 255, 73, 64, 12, 255, 25, 10, 0, 255, 44, 12, 51, 255, 22, 25, 153, 255, 7, 7, 38, 255, 16, 1, 0, 255, 16, 7, 2, 255, 19, 3, 7, 255, 17, 7, 4, 255, 22, 8, 6, 255, 25, 9, 8, 255, 21, 5, 4, 255, 22, 6, 7, 255, 25, 10, 11, 255, 27, 8, 9, 255, 30, 11, 6, 255, 28, 12, 4, 255, 29, 11, 5, 255, 36, 13, 9, 255, 34, 10, 6, 255, 34, 7, 1, 255, 46, 13, 4, 255, 49, 15, 2, 255, 50, 14, 3, 255, 51, 15, 4, 255, 52, 18, 2, 255, 52, 19, 2, 255, 50, 14, 5, 255, 52, 17, 8, 255, 49, 14, 2, 255, 48, 18, 2, 255, 51, 15, 4, 255, 59, 16, 5, 255, 73, 21, 3, 255, 109, 31, 9, 255, 100, 29, 3, 255, 92, 26, 4, 255, 59, 25, 2, 255, 45, 25, 5, 255, 49, 24, 6, 255, 47, 28, 2, 255, 55, 28, 7, 255, 48, 22, 1, 255, 53, 28, 1, 255, 59, 31, 3, 255, 65, 34, 2, 255, 67, 35, 1, 255, 69, 37, 4, 255, 73, 39, 3, 255, 71, 43, 2, 255, 73, 47, 3, 255, 70, 48, 6, 255, 88, 60, 0, 255, 84, 59, 8, 255, 73, 51, 8, 255, 68, 52, 7, 255, 139, 95, 6, 255, 174, 122, 2, 255, 172, 118, 6, 255, 157, 87, 3, 255, 115, 52, 6, 255, 117, 60, 4, 255, 125, 77, 5, 255, 87, 56, 8, 255, 81, 55, 6, 255, 93, 59, 3, 255, 89, 57, 7, 255, 97, 59, 7, 255, 91, 60, 3, 255, 83, 61, 2, 255, 115, 84, 5, 255, 174, 111, 10, 255, 191, 107, 8, 255, 179, 90, 4, 255, 170, 91, 16, 255, 162, 85, 19, 255, 167, 88, 7, 255, 168, 84, 8, 255, 130, 68, 7, 255, 83, 53, 5, 255, 77, 54, 6, 255, 86, 56, 5, 255, 85, 54, 6, 255, 84, 53, 4, 255, 84, 55, 0, 255, 89, 56, 5, 255, 97, 56, 2, 255, 103, 56, 6, 255, 96, 54, 3, 255, 102, 63, 4, 255, 105, 60, 1, 255, 100, 58, 4, 255, 97, 58, 6, 255, 100, 56, 10, 255, 108, 61, 5, 255, 104, 63, 1, 255, 91, 57, 8, 255, 104, 59, 9, 255, 103, 60, 1, 255, 99, 56, 1, 255, 97, 60, 5, 255, 101, 57, 4, 255, 105, 56, 3, 255, 92, 52, 2, 255, 81, 48, 1, 255, 94, 49, 7, 255, 102, 58, 7, 255, 101, 55, 2, 255, 98, 57, 4, 255, 95, 60, 1, 255, 100, 59, 2, 255, 94, 56, 11, 255, 91, 59, 8, 255, 96, 55, 0, 255, 105, 57, 9, 255, 106, 58, 2, 255, 106, 58, 7, 255, 105, 57, 9, 255, 102, 57, 2, 255, 106, 58, 4, 255, 112, 63, 8, 255, 107, 56, 2, 255, 106, 56, 5, 255, 105, 57, 6, 255, 106, 59, 2, 255, 110, 56, 6, 255, 129, 62, 8, 255, 129, 61, 4, 255, 126, 58, 1, 255, 126, 57, 4, 255, 113, 57, 5, 255, 110, 50, 5, 255, 116, 59, 3, 255, 122, 59, 10, 255, 125, 56, 4, 255, 118, 61, 6, 255, 115, 58, 6, 255, 111, 51, 4, 255, 103, 57, 6, 255, 102, 56, 7, 255, 104, 54, 6, 255, 113, 56, 9, 255, 108, 54, 3, 255, 107, 57, 4, 255, 106, 56, 4, 255, 101, 54, 6, 255, 116, 59, 8, 255, 112, 58, 5, 255, 104, 55, 2, 255, 117, 60, 5, 255, 118, 59, 5, 255, 116, 56, 8, 255, 113, 56, 2, 255, 115, 59, 4, 255, 108, 55, 6, 255, 110, 60, 8, 255, 109, 56, 7, 255, 110, 58, 4, 255, 112, 60, 6, 255, 111, 56, 13, 255, 113, 61, 9, 255, 119, 59, 5, 255, 115, 57, 16, 255, 109, 57, 6, 255, 109, 61, 2, 255, 109, 64, 6, 255, 105, 58, 9, 255, 106, 55, 8, 255, 112, 58, 10, 255, 108, 60, 3, 255, 111, 57, 8, 255, 115, 58, 10, 255, 124, 59, 12, 255, 128, 57, 4, 255, 140, 66, 5, 255, 162, 75, 3, 255, 166, 76, 1, 255, 162, 75, 4, 255, 160, 71, 3, 255, 163, 68, 3, 255, 166, 71, 5, 255, 163, 70, 8, 255, 158, 72, 5, 255, 154, 69, 3, 255, 151, 72, 3, 255, 150, 78, 4, 255, 146, 81, 8, 255, 142, 79, 9, 255, 146, 85, 11, 255, 165, 97, 21, 255, 184, 109, 14, 255, 196, 116, 13, 255, 194, 118, 16, 255, 194, 125, 14, 255, 198, 126, 11, 255, 203, 125, 15, 255, 203, 129, 18, 255, 202, 127, 13, 255, 206, 133, 5, 255, 207, 133, 11, 255, 207, 134, 13, 255, 211, 134, 9, 255, 212, 133, 11, 255, 211, 134, 13, 255, 209, 133, 14, 255, 209, 135, 21, 255, 209, 136, 20, 255, 213, 142, 15, 255, 215, 145, 9, 255, 215, 144, 8, 255, 215, 144, 2, 255, 213, 136, 12, 255, 206, 129, 9, 255, 208, 133, 12, 255, 213, 139, 6, 255, 215, 141, 13, 255, 214, 140, 11, 255, 215, 143, 12, 255, 211, 141, 5, 255, 217, 148, 6, 255, 219, 156, 4, 255, 218, 154, 10, 255, 223, 154, 7, 255, 219, 148, 10, 255, 211, 140, 8, 255, 213, 138, 2, 255, 216, 138, 5, 255, 207, 133, 5, 255, 204, 127, 9, 255, 209, 136, 2, 255, 213, 141, 9, 255, 211, 140, 3, 255, 209, 137, 5, 255, 211, 138, 10, 255, 210, 134, 2, 255, 211, 134, 4, 255, 203, 131, 4, 255, 203, 137, 10, 255, 208, 143, 5, 255, 204, 135, 5, 255, 200, 130, 5, 255, 203, 138, 7, 255, 209, 148, 8, 255, 205, 144, 3, 255, 208, 147, 8, 255, 207, 147, 4, 255, 207, 146, 7, 255, 207, 144, 13, 255, 208, 143, 7, 255, 204, 138, 3, 255, 195, 124, 6, 255, 201, 130, 11, 255, 209, 140, 12, 255, 208, 138, 15, 255, 203, 135, 13, 255, 203, 135, 13, 255, 204, 134, 11, 255, 204, 133, 9, 255, 201, 130, 5, 255, 199, 130, 5, 255, 200, 128, 18, 255, 199, 127, 13, 255, 199, 128, 4, 255, 202, 128, 17, 255, 204, 132, 8, 255, 204, 132, 10, 255, 204, 128, 22, 255, 202, 126, 8, 255, 206, 128, 10, 255, 201, 118, 8, 255, 189, 99, 5, 255, 183, 97, 6, 255, 176, 93, 0, 255, 179, 91, 3, 255, 178, 90, 4, 255, 183, 96, 4, 255, 190, 103, 8, 255, 190, 103, 3, 255, 188, 97, 7, 255, 180, 91, 6, 255, 173, 86, 2, 255, 178, 88, 7, 255, 176, 84, 3, 255, 172, 76, 2, 255, 172, 74, 3, 255, 168, 71, 3, 255, 166, 71, 4, 255, 157, 64, 0, 255, 152, 59, 0, 255, 151, 60, 2, 255, 154, 63, 3, 255, 154, 65, 1, 255, 155, 64, 6, 255, 139, 58, 6, 255, 128, 61, 2, 255, 159, 66, 5, 255, 150, 72, 7, 255, 131, 65, 8, 255, 125, 66, 3, 255, 102, 47, 8, 255, 104, 42, 1, 255, 157, 69, 8, 255, 155, 70, 9, 255, 133, 62, 9, 255, 148, 64, 4, 255, 138, 61, 2, 255, 137, 62, 6, 255, 124, 57, 0, 255, 132, 65, 7, 255, 149, 70, 7, 255, 168, 77, 3, 255, 184, 100, 5, 255, 191, 112, 5, 255, 190, 108, 5, 255, 190, 103, 3, 255, 190, 98, 3, 255, 179, 82, 6, 255, 172, 78, 2, 255, 178, 89, 3, 255, 182, 93, 2, 255, 175, 83, 1, 255, 165, 76, 3, 255, 152, 67, 6, 255, 128, 54, 2, 255, 128, 57, 5, 255, 140, 60, 7, 255, 139, 58, 4, 255, 136, 63, 4, 255, 136, 59, 3, 255, 136, 55, 3, 255, 131, 57, 5, 255, 116, 48, 2, 255, 120, 54, 1, 255, 126, 57, 6, 255, 125, 49, 8, 255, 132, 54, 2, 255, 128, 50, 0, 255, 120, 46, 3, 255, 121, 45, 3, 255, 125, 44, 4, 255, 119, 44, 1, 255, 119, 50, 3, 255, 122, 51, 0, 255, 122, 49, 2, 255, 123, 48, 8, 255, 122, 52, 4, 255, 112, 43, 2, 255, 102, 33, 2, 255, 113, 43, 1, 255, 118, 45, 3, 255, 138, 58, 7, 255, 144, 67, 1, 255, 137, 63, 4, 255, 127, 49, 3, 255, 129, 51, 4, 255, 133, 54, 5, 255, 134, 54, 2, 255, 140, 61, 3, 255, 139, 61, 3, 255, 135, 61, 5, 255, 128, 55, 5, 255, 116, 49, 1, 255, 115, 49, 1, 255, 116, 49, 2, 255, 110, 44, 1, 255, 112, 45, 3, 255, 119, 49, 4, 255, 120, 52, 3, 255, 114, 51, 0, 255, 116, 53, 2, 255, 122, 54, 3, 255, 122, 50, 5, 255, 113, 40, 4, 255, 100, 30, 1, 255, 81, 28, 1, 255, 76, 27, 1, 255, 86, 29, 3, 255, 96, 33, 6, 255, 97, 34, 4, 255, 99, 31, 1, 255, 102, 30, 4, 255, 93, 22, 2, 255, 82, 23, 2, 255, 81, 26, 0, 255, 90, 30, 1, 255, 94, 30, 3, 255, 89, 22, 1, 255, 80, 21, 3, 255, 79, 17, 0, 255, 83, 19, 1, 255, 1, 28, 93, 255, 6, 19, 69, 255, 5, 2, 20, 255, 1, 1, 4, 255, 8, 1, 9, 255, 1, 2, 3, 255, 6, 0, 0, 255, 1, 11, 132, 255, 49, 86, 201, 255, 79, 63, 27, 255, 33, 14, 0, 255, 40, 16, 28, 255, 15, 25, 153, 255, 10, 8, 57, 255, 13, 2, 0, 255, 8, 4, 9, 255, 15, 8, 8, 255, 12, 3, 5, 255, 18, 6, 6, 255, 24, 8, 8, 255, 20, 4, 5, 255, 20, 6, 4, 255, 20, 7, 6, 255, 22, 10, 9, 255, 25, 11, 8, 255, 28, 12, 4, 255, 34, 12, 4, 255, 35, 13, 5, 255, 28, 11, 3, 255, 39, 15, 10, 255, 47, 12, 7, 255, 47, 10, 1, 255, 46, 14, 1, 255, 50, 16, 5, 255, 53, 18, 7, 255, 48, 16, 3, 255, 50, 20, 5, 255, 45, 14, 5, 255, 43, 14, 5, 255, 44, 16, 3, 255, 56, 17, 2, 255, 54, 17, 3, 255, 53, 19, 2, 255, 77, 26, 6, 255, 82, 23, 0, 255, 76, 25, 6, 255, 64, 24, 8, 255, 48, 25, 7, 255, 40, 22, 2, 255, 46, 22, 1, 255, 45, 24, 1, 255, 43, 29, 3, 255, 51, 30, 4, 255, 60, 30, 5, 255, 59, 30, 0, 255, 60, 36, 1, 255, 65, 39, 2, 255, 71, 40, 4, 255, 68, 40, 3, 255, 71, 42, 1, 255, 69, 49, 0, 255, 83, 50, 3, 255, 104, 65, 2, 255, 75, 50, 35, 255, 79, 52, 17, 255, 97, 69, 2, 255, 160, 109, 3, 255, 169, 116, 0, 255, 169, 103, 5, 255, 152, 81, 7, 255, 103, 54, 7, 255, 103, 55, 6, 255, 112, 68, 0, 255, 93, 59, 3, 255, 84, 56, 7, 255, 87, 60, 3, 255, 102, 65, 7, 255, 98, 68, 4, 255, 93, 73, 0, 255, 138, 100, 12, 255, 186, 117, 11, 255, 180, 100, 1, 255, 166, 92, 4, 255, 175, 98, 13, 255, 171, 96, 36, 255, 172, 106, 47, 255, 155, 95, 19, 255, 108, 64, 7, 255, 74, 59, 8, 255, 74, 58, 3, 255, 88, 56, 8, 255, 90, 58, 7, 255, 93, 60, 0, 255, 95, 59, 2, 255, 98, 61, 3, 255, 97, 58, 2, 255, 108, 62, 4, 255, 106, 59, 6, 255, 103, 58, 4, 255, 110, 66, 7, 255, 109, 66, 4, 255, 104, 60, 1, 255, 102, 62, 0, 255, 101, 61, 1, 255, 110, 52, 1, 255, 113, 58, 2, 255, 104, 53, 3, 255, 103, 64, 10, 255, 92, 66, 3, 255, 97, 56, 8, 255, 99, 63, 2, 255, 95, 60, 2, 255, 96, 59, 5, 255, 99, 61, 7, 255, 93, 56, 7, 255, 91, 58, 4, 255, 101, 69, 2, 255, 111, 63, 5, 255, 105, 53, 6, 255, 102, 56, 1, 255, 110, 57, 2, 255, 110, 58, 7, 255, 110, 65, 5, 255, 110, 60, 3, 255, 110, 60, 5, 255, 109, 62, 0, 255, 107, 61, 5, 255, 105, 59, 5, 255, 107, 62, 4, 255, 111, 64, 4, 255, 115, 65, 4, 255, 120, 68, 8, 255, 114, 64, 5, 255, 113, 65, 3, 255, 112, 65, 4, 255, 117, 63, 8, 255, 128, 57, 1, 255, 133, 62, 5, 255, 125, 63, 3, 255, 133, 64, 7, 255, 133, 66, 3, 255, 125, 60, 6, 255, 126, 61, 5, 255, 123, 59, 11, 255, 121, 57, 11, 255, 125, 59, 4, 255, 124, 61, 11, 255, 117, 60, 3, 255, 111, 55, 3, 255, 115, 55, 6, 255, 112, 58, 4, 255, 118, 65, 4, 255, 125, 63, 9, 255, 120, 58, 9, 255, 116, 60, 2, 255, 115, 61, 3, 255, 119, 61, 9, 255, 119, 62, 6, 255, 117, 61, 3, 255, 122, 59, 7, 255, 127, 63, 7, 255, 127, 63, 5, 255, 125, 60, 1, 255, 123, 60, 4, 255, 122, 60, 5, 255, 119, 61, 3, 255, 116, 64, 5, 255, 113, 61, 4, 255, 121, 65, 13, 255, 121, 61, 10, 255, 110, 59, 4, 255, 118, 60, 6, 255, 118, 62, 5, 255, 122, 65, 7, 255, 122, 63, 3, 255, 119, 59, 6, 255, 115, 56, 7, 255, 114, 56, 3, 255, 113, 57, 3, 255, 112, 56, 7, 255, 110, 62, 2, 255, 116, 59, 1, 255, 119, 61, 10, 255, 112, 61, 7, 255, 126, 61, 12, 255, 154, 67, 7, 255, 160, 64, 6, 255, 158, 70, 4, 255, 164, 76, 14, 255, 158, 70, 13, 255, 153, 71, 6, 255, 153, 79, 9, 255, 152, 87, 11, 255, 159, 93, 13, 255, 167, 101, 7, 255, 175, 103, 16, 255, 186, 113, 8, 255, 194, 115, 10, 255, 194, 115, 10, 255, 194, 118, 16, 255, 195, 117, 8, 255, 200, 122, 7, 255, 198, 126, 15, 255, 202, 133, 18, 255, 207, 131, 15, 255, 204, 132, 9, 255, 209, 134, 15, 255, 209, 135, 14, 255, 207, 139, 9, 255, 207, 137, 8, 255, 216, 138, 14, 255, 215, 143, 12, 255, 210, 139, 11, 255, 212, 140, 12, 255, 211, 139, 3, 255, 216, 141, 13, 255, 216, 140, 11, 255, 217, 141, 8, 255, 214, 142, 3, 255, 216, 143, 7, 255, 214, 140, 7, 255, 210, 130, 14, 255, 207, 129, 12, 255, 213, 139, 19, 255, 214, 143, 5, 255, 218, 145, 14, 255, 214, 141, 10, 255, 209, 138, 5, 255, 211, 142, 6, 255, 220, 153, 7, 255, 224, 153, 5, 255, 222, 144, 6, 255, 219, 136, 8, 255, 214, 132, 9, 255, 209, 133, 10, 255, 211, 136, 17, 255, 213, 139, 4, 255, 208, 132, 10, 255, 211, 137, 6, 255, 209, 137, 8, 255, 211, 144, 8, 255, 213, 147, 2, 255, 210, 141, 5, 255, 208, 139, 8, 255, 209, 139, 8, 255, 208, 137, 10, 255, 204, 135, 8, 255, 211, 142, 13, 255, 210, 141, 7, 255, 198, 130, 7, 255, 203, 141, 7, 255, 211, 148, 3, 255, 211, 145, 7, 255, 210, 146, 13, 255, 207, 148, 8, 255, 207, 150, 12, 255, 206, 145, 6, 255, 205, 144, 0, 255, 208, 141, 10, 255, 206, 134, 18, 255, 203, 133, 4, 255, 204, 134, 8, 255, 209, 141, 8, 255, 204, 138, 9, 255, 204, 138, 10, 255, 207, 141, 15, 255, 204, 137, 12, 255, 203, 134, 8, 255, 204, 135, 9, 255, 201, 132, 7, 255, 200, 130, 5, 255, 198, 124, 10, 255, 205, 130, 5, 255, 202, 124, 13, 255, 189, 109, 5, 255, 191, 109, 8, 255, 199, 118, 11, 255, 201, 117, 7, 255, 188, 102, 8, 255, 182, 95, 8, 255, 179, 93, 8, 255, 176, 90, 9, 255, 181, 96, 6, 255, 189, 102, 3, 255, 188, 102, 2, 255, 185, 101, 3, 255, 187, 104, 8, 255, 189, 105, 8, 255, 191, 105, 6, 255, 192, 107, 10, 255, 181, 97, 6, 255, 182, 94, 3, 255, 184, 94, 9, 255, 184, 92, 3, 255, 177, 81, 2, 255, 178, 82, 2, 255, 175, 82, 4, 255, 166, 74, 1, 255, 163, 71, 4, 255, 163, 71, 5, 255, 162, 70, 3, 255, 147, 58, 4, 255, 150, 64, 2, 255, 150, 71, 5, 255, 145, 65, 8, 255, 139, 57, 2, 255, 144, 68, 5, 255, 151, 73, 3, 255, 133, 68, 2, 255, 109, 53, 4, 255, 95, 42, 5, 255, 124, 55, 6, 255, 166, 75, 3, 255, 152, 64, 3, 255, 138, 60, 4, 255, 142, 58, 7, 255, 133, 57, 9, 255, 123, 58, 9, 255, 135, 58, 9, 255, 145, 62, 7, 255, 170, 87, 5, 255, 178, 101, 10, 255, 189, 116, 5, 255, 191, 115, 3, 255, 190, 109, 8, 255, 183, 103, 2, 255, 185, 99, 7, 255, 176, 90, 2, 255, 173, 88, 2, 255, 177, 86, 10, 255, 170, 79, 3, 255, 163, 75, 1, 255, 151, 70, 6, 255, 135, 61, 4, 255, 133, 51, 0, 255, 133, 51, 0, 255, 131, 54, 2, 255, 130, 55, 3, 255, 131, 54, 1, 255, 128, 52, 3, 255, 124, 54, 3, 255, 114, 48, 2, 255, 121, 56, 2, 255, 129, 57, 6, 255, 124, 47, 6, 255, 125, 53, 2, 255, 120, 51, 3, 255, 119, 41, 7, 255, 114, 41, 6, 255, 108, 46, 4, 255, 106, 41, 8, 255, 114, 42, 5, 255, 121, 50, 1, 255, 119, 46, 3, 255, 114, 39, 9, 255, 117, 46, 2, 255, 115, 46, 1, 255, 116, 46, 3, 255, 114, 42, 3, 255, 108, 38, 0, 255, 127, 54, 2, 255, 129, 58, 0, 255, 122, 54, 4, 255, 122, 47, 4, 255, 130, 55, 5, 255, 128, 55, 3, 255, 129, 54, 1, 255, 131, 56, 1, 255, 131, 58, 0, 255, 130, 60, 2, 255, 123, 55, 2, 255, 124, 55, 4, 255, 125, 56, 3, 255, 124, 56, 4, 255, 117, 55, 4, 255, 107, 48, 1, 255, 103, 48, 0, 255, 113, 52, 2, 255, 118, 49, 2, 255, 109, 43, 4, 255, 105, 36, 5, 255, 98, 28, 1, 255, 92, 27, 1, 255, 85, 29, 1, 255, 86, 28, 4, 255, 84, 25, 4, 255, 80, 27, 1, 255, 80, 31, 1, 255, 85, 27, 0, 255, 87, 26, 0, 255, 90, 29, 4, 255, 85, 24, 3, 255, 80, 26, 3, 255, 80, 26, 2, 255, 88, 28, 3, 255, 90, 27, 4, 255, 88, 22, 3, 255, 76, 22, 3, 255, 75, 19, 2, 255, 79, 21, 6, 255, 5, 8, 23, 255, 5, 13, 40, 255, 1, 3, 10, 255, 2, 0, 9, 255, 4, 1, 7, 255, 2, 0, 0, 255, 0, 9, 111, 255, 41, 73, 216, 255, 85, 75, 41, 255, 31, 22, 0, 255, 43, 16, 27, 255, 23, 24, 154, 255, 4, 13, 68, 255, 17, 2, 0, 255, 13, 4, 9, 255, 12, 6, 2, 255, 26, 8, 3, 255, 25, 7, 5, 255, 26, 9, 8, 255, 22, 7, 7, 255, 23, 7, 5, 255, 24, 7, 5, 255, 25, 7, 6, 255, 31, 11, 8, 255, 38, 11, 7, 255, 40, 11, 5, 255, 37, 13, 5, 255, 41, 17, 5, 255, 42, 14, 3, 255, 44, 15, 6, 255, 43, 13, 4, 255, 46, 11, 2, 255, 46, 17, 8, 255, 46, 13, 1, 255, 56, 18, 5, 255, 52, 14, 5, 255, 41, 12, 4, 255, 36, 14, 3, 255, 33, 16, 1, 255, 41, 17, 5, 255, 46, 14, 3, 255, 53, 20, 3, 255, 61, 21, 1, 255, 76, 22, 2, 255, 71, 22, 1, 255, 64, 23, 1, 255, 50, 23, 4, 255, 49, 19, 5, 255, 44, 23, 0, 255, 53, 26, 2, 255, 51, 22, 5, 255, 49, 23, 2, 255, 54, 29, 3, 255, 55, 29, 0, 255, 61, 34, 2, 255, 65, 37, 3, 255, 67, 36, 1, 255, 68, 40, 2, 255, 71, 42, 3, 255, 76, 39, 3, 255, 84, 50, 6, 255, 109, 76, 23, 255, 91, 65, 2, 255, 87, 60, 12, 255, 84, 58, 6, 255, 132, 84, 8, 255, 147, 94, 6, 255, 154, 95, 3, 255, 155, 90, 3, 255, 135, 71, 1, 255, 106, 58, 4, 255, 102, 55, 2, 255, 111, 67, 4, 255, 94, 59, 5, 255, 97, 66, 1, 255, 115, 78, 4, 255, 110, 73, 4, 255, 116, 81, 5, 255, 162, 110, 11, 255, 192, 111, 5, 255, 179, 95, 1, 255, 175, 102, 3, 255, 183, 107, 4, 255, 175, 94, 2, 255, 164, 91, 6, 255, 138, 77, 8, 255, 109, 66, 2, 255, 89, 61, 2, 255, 93, 61, 3, 255, 97, 58, 6, 255, 103, 59, 6, 255, 112, 68, 2, 255, 115, 72, 4, 255, 105, 64, 9, 255, 107, 68, 6, 255, 106, 66, 5, 255, 113, 65, 6, 255, 107, 66, 4, 255, 105, 61, 0, 255, 111, 63, 5, 255, 111, 67, 6, 255, 119, 72, 5, 255, 116, 68, 4, 255, 111, 73, 12, 255, 120, 92, 22, 255, 137, 108, 8, 255, 158, 107, 7, 255, 152, 84, 12, 255, 129, 78, 4, 255, 118, 76, 4, 255, 120, 75, 6, 255, 118, 80, 8, 255, 118, 80, 7, 255, 129, 80, 6, 255, 149, 98, 19, 255, 158, 104, 20, 255, 151, 104, 6, 255, 158, 102, 11, 255, 155, 102, 20, 255, 170, 128, 31, 255, 179, 134, 31, 255, 163, 113, 13, 255, 138, 84, 9, 255, 127, 74, 15, 255, 125, 80, 4, 255, 125, 84, 14, 255, 123, 79, 13, 255, 119, 71, 4, 255, 119, 65, 1, 255, 122, 66, 0, 255, 127, 65, 1, 255, 124, 59, 1, 255, 121, 58, 3, 255, 121, 61, 4, 255, 113, 61, 1, 255, 112, 56, 9, 255, 128, 66, 6, 255, 136, 65, 4, 255, 131, 62, 1, 255, 132, 66, 2, 255, 138, 59, 2, 255, 139, 63, 4, 255, 143, 70, 2, 255, 145, 66, 6, 255, 138, 62, 7, 255, 133, 61, 0, 255, 124, 58, 4, 255, 121, 60, 5, 255, 120, 62, 7, 255, 129, 67, 3, 255, 132, 68, 5, 255, 137, 66, 3, 255, 157, 75, 10, 255, 142, 65, 6, 255, 131, 61, 3, 255, 137, 65, 6, 255, 134, 61, 2, 255, 135, 62, 2, 255, 136, 61, 8, 255, 133, 58, 11, 255, 134, 64, 11, 255, 136, 67, 4, 255, 136, 64, 6, 255, 137, 62, 12, 255, 137, 65, 9, 255, 135, 64, 7, 255, 133, 64, 5, 255, 134, 67, 3, 255, 133, 65, 5, 255, 134, 64, 9, 255, 126, 66, 6, 255, 135, 65, 3, 255, 136, 67, 2, 255, 136, 65, 2, 255, 136, 68, 7, 255, 126, 60, 9, 255, 123, 59, 6, 255, 123, 62, 0, 255, 122, 61, 4, 255, 119, 58, 15, 255, 116, 54, 5, 255, 116, 60, 3, 255, 115, 60, 9, 255, 134, 68, 5, 255, 146, 74, 11, 255, 145, 77, 14, 255, 148, 79, 14, 255, 163, 90, 12, 255, 165, 91, 15, 255, 158, 85, 15, 255, 166, 96, 16, 255, 183, 112, 21, 255, 189, 115, 10, 255, 193, 116, 22, 255, 196, 120, 18, 255, 197, 122, 14, 255, 199, 124, 8, 255, 202, 123, 18, 255, 194, 114, 15, 255, 191, 110, 7, 255, 195, 110, 21, 255, 200, 126, 12, 255, 205, 135, 9, 255, 212, 137, 26, 255, 212, 136, 17, 255, 212, 135, 13, 255, 213, 136, 18, 255, 214, 140, 8, 255, 214, 142, 7, 255, 215, 144, 13, 255, 216, 143, 17, 255, 215, 140, 18, 255, 215, 141, 14, 255, 219, 144, 12, 255, 213, 139, 0, 255, 211, 137, 11, 255, 209, 137, 7, 255, 212, 137, 9, 255, 217, 142, 7, 255, 215, 141, 8, 255, 213, 136, 12, 255, 216, 136, 14, 255, 219, 142, 12, 255, 213, 144, 7, 255, 212, 138, 8, 255, 208, 135, 10, 255, 206, 133, 5, 255, 207, 135, 2, 255, 217, 146, 10, 255, 221, 151, 10, 255, 214, 143, 0, 255, 211, 131, 10, 255, 207, 127, 4, 255, 207, 131, 4, 255, 218, 148, 8, 255, 217, 143, 8, 255, 216, 136, 1, 255, 212, 134, 11, 255, 205, 130, 10, 255, 209, 139, 5, 255, 214, 147, 7, 255, 213, 147, 3, 255, 212, 143, 4, 255, 213, 143, 11, 255, 210, 143, 13, 255, 203, 138, 7, 255, 207, 143, 6, 255, 214, 150, 8, 255, 203, 140, 2, 255, 199, 133, 17, 255, 208, 143, 18, 255, 209, 150, 5, 255, 207, 150, 3, 255, 208, 150, 8, 255, 209, 148, 9, 255, 209, 144, 11, 255, 206, 146, 4, 255, 211, 146, 9, 255, 205, 135, 6, 255, 201, 129, 6, 255, 199, 127, 9, 255, 203, 133, 14, 255, 210, 143, 10, 255, 207, 144, 6, 255, 208, 147, 4, 255, 206, 143, 8, 255, 204, 139, 16, 255, 206, 139, 16, 255, 205, 137, 7, 255, 205, 134, 5, 255, 203, 132, 11, 255, 204, 134, 17, 255, 196, 130, 7, 255, 165, 94, 14, 255, 147, 78, 6, 255, 166, 89, 0, 255, 175, 92, 5, 255, 174, 84, 12, 255, 176, 87, 3, 255, 181, 93, 1, 255, 173, 87, 0, 255, 175, 92, 2, 255, 192, 110, 10, 255, 191, 106, 5, 255, 194, 108, 7, 255, 187, 104, 3, 255, 185, 103, 5, 255, 191, 109, 10, 255, 192, 110, 6, 255, 189, 107, 6, 255, 193, 107, 13, 255, 194, 107, 9, 255, 191, 104, 8, 255, 191, 103, 1, 255, 187, 94, 1, 255, 184, 90, 2, 255, 178, 86, 4, 255, 178, 87, 7, 255, 175, 84, 4, 255, 174, 80, 9, 255, 165, 69, 8, 255, 155, 65, 6, 255, 160, 76, 10, 255, 164, 82, 6, 255, 171, 82, 10, 255, 139, 68, 0, 255, 145, 70, 2, 255, 138, 63, 4, 255, 123, 60, 12, 255, 110, 50, 8, 255, 102, 46, 1, 255, 101, 37, 2, 255, 130, 56, 7, 255, 130, 54, 0, 255, 135, 57, 7, 255, 139, 60, 5, 255, 130, 54, 2, 255, 136, 58, 11, 255, 152, 76, 8, 255, 162, 82, 2, 255, 168, 80, 4, 255, 176, 89, 8, 255, 186, 99, 4, 255, 189, 97, 4, 255, 187, 96, 1, 255, 184, 101, 1, 255, 185, 104, 3, 255, 189, 106, 3, 255, 192, 101, 5, 255, 180, 89, 3, 255, 177, 89, 1, 255, 184, 99, 3, 255, 180, 93, 1, 255, 173, 83, 3, 255, 151, 68, 5, 255, 128, 51, 2, 255, 125, 49, 3, 255, 125, 46, 5, 255, 115, 40, 2, 255, 119, 47, 6, 255, 124, 55, 1, 255, 122, 51, 7, 255, 123, 49, 5, 255, 124, 48, 1, 255, 120, 46, 6, 255, 121, 51, 3, 255, 121, 51, 5, 255, 111, 44, 5, 255, 116, 52, 6, 255, 112, 45, 3, 255, 108, 39, 1, 255, 116, 46, 4, 255, 118, 48, 1, 255, 120, 48, 2, 255, 111, 36, 7, 255, 111, 40, 2, 255, 110, 38, 3, 255, 119, 44, 4, 255, 116, 42, 4, 255, 114, 46, 2, 255, 122, 51, 5, 255, 108, 42, 5, 255, 107, 47, 4, 255, 123, 52, 3, 255, 123, 49, 2, 255, 123, 53, 1, 255, 127, 55, 5, 255, 126, 54, 2, 255, 128, 57, 2, 255, 124, 54, 1, 255, 117, 50, 2, 255, 120, 52, 2, 255, 123, 54, 2, 255, 127, 55, 2, 255, 128, 59, 6, 255, 121, 53, 3, 255, 120, 52, 3, 255, 116, 48, 2, 255, 109, 43, 2, 255, 103, 39, 3, 255, 102, 34, 2, 255, 99, 30, 0, 255, 95, 33, 1, 255, 89, 36, 3, 255, 91, 29, 1, 255, 90, 28, 3, 255, 85, 25, 4, 255, 80, 24, 3, 255, 82, 28, 4, 255, 82, 28, 4, 255, 77, 23, 2, 255, 78, 22, 1, 255, 78, 24, 1, 255, 79, 23, 3, 255, 80, 20, 3, 255, 78, 25, 3, 255, 76, 23, 1, 255, 77, 22, 2, 255, 79, 24, 4, 255, 75, 20, 2, 255, 4, 0, 7, 255, 3, 0, 3, 255, 0, 0, 10, 255, 4, 0, 11, 255, 3, 0, 0, 255, 0, 6, 100, 255, 34, 66, 233, 255, 74, 80, 51, 255, 38, 25, 0, 255, 33, 16, 19, 255, 29, 26, 139, 255, 4, 14, 85, 255, 12, 1, 0, 255, 14, 4, 5, 255, 15, 3, 3, 255, 21, 4, 4, 255, 26, 6, 6, 255, 29, 8, 9, 255, 24, 6, 6, 255, 21, 5, 5, 255, 26, 7, 5, 255, 30, 6, 2, 255, 42, 14, 8, 255, 39, 12, 5, 255, 35, 10, 5, 255, 32, 9, 7, 255, 34, 9, 7, 255, 44, 14, 7, 255, 42, 13, 6, 255, 33, 12, 5, 255, 40, 12, 5, 255, 49, 13, 4, 255, 42, 14, 5, 255, 44, 12, 3, 255, 38, 15, 2, 255, 41, 17, 6, 255, 42, 13, 5, 255, 41, 14, 3, 255, 37, 14, 3, 255, 41, 15, 4, 255, 47, 18, 3, 255, 52, 20, 2, 255, 62, 19, 3, 255, 70, 20, 4, 255, 69, 21, 5, 255, 50, 24, 2, 255, 45, 22, 1, 255, 54, 22, 4, 255, 43, 27, 0, 255, 50, 27, 1, 255, 57, 30, 5, 255, 60, 31, 5, 255, 58, 26, 1, 255, 60, 29, 2, 255, 63, 34, 1, 255, 71, 32, 4, 255, 75, 38, 4, 255, 66, 38, 4, 255, 73, 42, 4, 255, 73, 39, 2, 255, 104, 73, 11, 255, 109, 72, 13, 255, 87, 60, 3, 255, 85, 58, 1, 255, 90, 57, 11, 255, 141, 91, 4, 255, 144, 86, 2, 255, 138, 78, 4, 255, 143, 82, 3, 255, 141, 76, 3, 255, 137, 65, 5, 255, 120, 61, 2, 255, 113, 63, 3, 255, 102, 64, 6, 255, 123, 79, 3, 255, 108, 77, 5, 255, 134, 91, 7, 255, 179, 114, 10, 255, 188, 111, 7, 255, 174, 101, 9, 255, 179, 92, 2, 255, 179, 99, 3, 255, 170, 92, 5, 255, 138, 74, 4, 255, 106, 63, 5, 255, 107, 61, 12, 255, 90, 52, 16, 255, 107, 72, 5, 255, 104, 59, 8, 255, 92, 54, 8, 255, 111, 66, 3, 255, 111, 66, 2, 255, 95, 60, 8, 255, 104, 65, 7, 255, 105, 61, 2, 255, 96, 60, 7, 255, 95, 59, 8, 255, 104, 66, 5, 255, 105, 69, 3, 255, 103, 66, 3, 255, 99, 61, 6, 255, 107, 65, 6, 255, 121, 71, 6, 255, 116, 69, 6, 255, 119, 84, 12, 255, 148, 100, 12, 255, 164, 95, 6, 255, 149, 78, 10, 255, 123, 76, 2, 255, 118, 72, 2, 255, 114, 67, 3, 255, 121, 77, 11, 255, 135, 81, 8, 255, 150, 83, 15, 255, 157, 90, 12, 255, 151, 83, 9, 255, 143, 83, 3, 255, 161, 93, 4, 255, 170, 100, 9, 255, 195, 126, 26, 255, 224, 172, 23, 255, 237, 212, 15, 255, 236, 204, 11, 255, 232, 180, 22, 255, 227, 170, 27, 255, 216, 161, 23, 255, 213, 166, 55, 255, 222, 191, 104, 255, 226, 216, 164, 255, 227, 222, 188, 255, 228, 221, 183, 255, 228, 214, 164, 255, 225, 198, 86, 255, 217, 176, 17, 255, 196, 161, 16, 255, 181, 142, 20, 255, 190, 119, 17, 255, 182, 110, 18, 255, 179, 110, 14, 255, 165, 109, 11, 255, 165, 96, 15, 255, 170, 95, 22, 255, 165, 93, 17, 255, 158, 82, 22, 255, 153, 82, 27, 255, 152, 82, 26, 255, 157, 80, 23, 255, 159, 79, 12, 255, 157, 77, 15, 255, 153, 74, 9, 255, 147, 75, 9, 255, 141, 70, 8, 255, 140, 65, 5, 255, 147, 71, 5, 255, 140, 69, 3, 255, 135, 65, 10, 255, 135, 64, 2, 255, 134, 64, 3, 255, 135, 62, 13, 255, 134, 62, 8, 255, 129, 61, 3, 255, 132, 57, 2, 255, 139, 63, 9, 255, 137, 65, 7, 255, 132, 67, 3, 255, 142, 65, 8, 255, 140, 64, 7, 255, 137, 66, 9, 255, 139, 68, 4, 255, 141, 66, 2, 255, 137, 66, 3, 255, 133, 62, 12, 255, 142, 67, 12, 255, 147, 66, 5, 255, 139, 66, 9, 255, 125, 57, 7, 255, 131, 62, 14, 255, 138, 69, 9, 255, 134, 66, 3, 255, 128, 66, 4, 255, 128, 61, 10, 255, 131, 66, 14, 255, 140, 81, 10, 255, 160, 92, 9, 255, 170, 99, 15, 255, 175, 102, 24, 255, 181, 103, 11, 255, 188, 113, 2, 255, 191, 113, 13, 255, 193, 115, 17, 255, 200, 123, 16, 255, 202, 123, 17, 255, 201, 123, 19, 255, 203, 123, 18, 255, 203, 122, 18, 255, 203, 124, 9, 255, 204, 124, 9, 255, 200, 122, 10, 255, 186, 106, 12, 255, 178, 99, 8, 255, 185, 106, 21, 255, 205, 132, 15, 255, 212, 143, 6, 255, 215, 146, 9, 255, 215, 145, 19, 255, 212, 144, 10, 255, 213, 143, 17, 255, 217, 145, 20, 255, 220, 145, 11, 255, 221, 147, 10, 255, 213, 145, 12, 255, 216, 143, 16, 255, 219, 147, 14, 255, 219, 144, 1, 255, 214, 138, 4, 255, 204, 134, 15, 255, 208, 140, 14, 255, 213, 146, 10, 255, 212, 147, 8, 255, 218, 143, 9, 255, 211, 131, 3, 255, 204, 125, 11, 255, 203, 132, 6, 255, 200, 134, 4, 255, 210, 139, 13, 255, 218, 146, 2, 255, 211, 142, 2, 255, 209, 140, 9, 255, 217, 146, 6, 255, 221, 152, 5, 255, 215, 148, 2, 255, 210, 141, 4, 255, 206, 138, 5, 255, 216, 147, 10, 255, 225, 154, 11, 255, 216, 144, 3, 255, 213, 139, 1, 255, 214, 139, 3, 255, 211, 142, 3, 255, 216, 151, 5, 255, 215, 149, 5, 255, 215, 148, 7, 255, 211, 144, 3, 255, 212, 146, 6, 255, 209, 147, 4, 255, 210, 149, 7, 255, 212, 154, 12, 255, 213, 153, 8, 255, 206, 141, 1, 255, 204, 137, 4, 255, 208, 144, 3, 255, 211, 152, 8, 255, 209, 153, 8, 255, 207, 153, 0, 255, 205, 147, 3, 255, 204, 141, 7, 255, 211, 148, 3, 255, 204, 142, 9, 255, 194, 130, 6, 255, 194, 126, 0, 255, 196, 123, 8, 255, 206, 139, 10, 255, 209, 147, 9, 255, 210, 149, 6, 255, 209, 147, 7, 255, 205, 144, 6, 255, 206, 144, 8, 255, 207, 142, 15, 255, 203, 140, 6, 255, 204, 137, 8, 255, 205, 134, 19, 255, 207, 139, 14, 255, 199, 130, 8, 255, 181, 106, 8, 255, 177, 101, 7, 255, 178, 99, 5, 255, 183, 103, 5, 255, 188, 109, 5, 255, 183, 103, 7, 255, 172, 88, 2, 255, 171, 83, 6, 255, 175, 84, 15, 255, 186, 95, 6, 255, 184, 99, 1, 255, 192, 110, 6, 255, 192, 111, 6, 255, 194, 112, 10, 255, 196, 112, 5, 255, 193, 112, 4, 255, 188, 106, 4, 255, 194, 108, 9, 255, 195, 108, 9, 255, 186, 96, 10, 255, 178, 84, 7, 255, 177, 85, 3, 255, 184, 93, 3, 255, 182, 90, 2, 255, 175, 84, 4, 255, 163, 70, 3, 255, 158, 62, 3, 255, 168, 70, 8, 255, 176, 82, 6, 255, 164, 76, 11, 255, 150, 62, 4, 255, 162, 71, 5, 255, 152, 68, 2, 255, 152, 77, 6, 255, 129, 61, 9, 255, 131, 62, 11, 255, 123, 54, 2, 255, 109, 50, 0, 255, 104, 48, 8, 255, 109, 47, 4, 255, 139, 65, 6, 255, 148, 66, 0, 255, 139, 64, 4, 255, 130, 53, 5, 255, 138, 60, 4, 255, 152, 73, 9, 255, 149, 67, 5, 255, 138, 57, 8, 255, 151, 68, 0, 255, 165, 79, 4, 255, 164, 74, 4, 255, 173, 85, 1, 255, 175, 82, 5, 255, 172, 81, 3, 255, 175, 86, 1, 255, 181, 91, 2, 255, 179, 89, 0, 255, 183, 91, 0, 255, 188, 94, 4, 255, 185, 90, 2, 255, 174, 85, 2, 255, 155, 77, 4, 255, 132, 59, 2, 255, 123, 48, 1, 255, 123, 47, 5, 255, 115, 42, 3, 255, 121, 48, 2, 255, 125, 49, 1, 255, 130, 52, 6, 255, 126, 50, 3, 255, 121, 48, 0, 255, 122, 49, 3, 255, 120, 46, 1, 255, 118, 45, 1, 255, 116, 45, 4, 255, 116, 45, 5, 255, 121, 47, 6, 255, 123, 47, 5, 255, 121, 45, 2, 255, 116, 43, 4, 255, 120, 46, 3, 255, 116, 42, 1, 255, 113, 41, 4, 255, 109, 38, 3, 255, 117, 42, 8, 255, 118, 44, 7, 255, 107, 33, 3, 255, 108, 35, 3, 255, 119, 49, 4, 255, 121, 53, 0, 255, 124, 52, 1, 255, 128, 54, 2, 255, 130, 56, 6, 255, 130, 57, 4, 255, 124, 53, 0, 255, 117, 51, 1, 255, 121, 53, 2, 255, 127, 56, 4, 255, 128, 57, 1, 255, 137, 66, 2, 255, 140, 63, 1, 255, 132, 54, 2, 255, 130, 56, 10, 255, 124, 57, 3, 255, 119, 54, 5, 255, 104, 38, 4, 255, 99, 33, 3, 255, 100, 35, 6, 255, 94, 35, 3, 255, 94, 33, 2, 255, 98, 35, 4, 255, 92, 30, 3, 255, 86, 27, 2, 255, 84, 27, 4, 255, 81, 23, 3, 255, 79, 23, 4, 255, 81, 22, 3, 255, 78, 25, 4, 255, 66, 21, 1, 255, 69, 21, 1, 255, 78, 21, 4, 255, 77, 18, 3, 255, 73, 23, 3, 255, 69, 20, 0, 255, 70, 19, 2, 255, 79, 25, 6, 255, 76, 23, 2, 255, 2, 0, 9, 255, 4, 1, 18, 255, 0, 4, 13, 255, 2, 2, 0, 255, 0, 4, 90, 255, 27, 65, 231, 255, 82, 82, 66, 255, 39, 25, 0, 255, 36, 13, 7, 255, 29, 22, 126, 255, 0, 15, 93, 255, 15, 2, 0, 255, 17, 3, 7, 255, 12, 2, 1, 255, 16, 4, 3, 255, 25, 8, 8, 255, 26, 8, 7, 255, 29, 11, 10, 255, 25, 7, 7, 255, 21, 7, 6, 255, 26, 11, 9, 255, 31, 11, 7, 255, 35, 11, 5, 255, 33, 10, 5, 255, 30, 11, 5, 255, 32, 11, 8, 255, 34, 12, 8, 255, 38, 13, 3, 255, 37, 12, 3, 255, 30, 10, 5, 255, 36, 8, 1, 255, 44, 14, 3, 255, 41, 15, 5, 255, 46, 18, 7, 255, 36, 15, 3, 255, 38, 14, 3, 255, 42, 14, 6, 255, 45, 17, 6, 255, 43, 11, 4, 255, 42, 15, 5, 255, 46, 18, 3, 255, 53, 19, 1, 255, 56, 25, 5, 255, 54, 22, 1, 255, 56, 18, 0, 255, 52, 22, 1, 255, 53, 24, 3, 255, 45, 25, 2, 255, 39, 26, 0, 255, 47, 26, 3, 255, 54, 29, 4, 255, 57, 25, 1, 255, 68, 32, 2, 255, 64, 30, 6, 255, 67, 36, 3, 255, 64, 36, 2, 255, 58, 37, 5, 255, 62, 40, 4, 255, 70, 38, 3, 255, 91, 54, 1, 255, 92, 64, 3, 255, 81, 58, 3, 255, 84, 56, 2, 255, 78, 46, 3, 255, 112, 75, 4, 255, 167, 106, 5, 255, 164, 103, 2, 255, 158, 94, 6, 255, 166, 92, 3, 255, 160, 90, 6, 255, 144, 75, 5, 255, 123, 64, 2, 255, 122, 73, 7, 255, 123, 77, 2, 255, 101, 77, 3, 255, 148, 104, 11, 255, 178, 119, 1, 255, 172, 100, 2, 255, 170, 98, 4, 255, 157, 94, 8, 255, 154, 88, 7, 255, 164, 99, 9, 255, 139, 76, 5, 255, 110, 68, 3, 255, 119, 76, 8, 255, 99, 67, 7, 255, 119, 75, 11, 255, 113, 61, 8, 255, 92, 54, 4, 255, 126, 81, 7, 255, 108, 65, 7, 255, 90, 56, 9, 255, 122, 74, 12, 255, 123, 72, 6, 255, 96, 58, 0, 255, 99, 59, 10, 255, 137, 81, 10, 255, 143, 81, 8, 255, 102, 63, 7, 255, 124, 64, 10, 255, 128, 72, 8, 255, 141, 86, 13, 255, 155, 82, 10, 255, 127, 59, 19, 255, 144, 72, 12, 255, 141, 74, 2, 255, 134, 71, 12, 255, 126, 72, 12, 255, 119, 70, 7, 255, 116, 74, 16, 255, 125, 82, 9, 255, 151, 93, 13, 255, 160, 92, 6, 255, 156, 91, 4, 255, 154, 89, 11, 255, 160, 92, 4, 255, 158, 87, 0, 255, 145, 81, 7, 255, 135, 69, 10, 255, 127, 65, 2, 255, 126, 60, 2, 255, 152, 62, 9, 255, 161, 73, 3, 255, 155, 81, 2, 255, 151, 73, 4, 255, 137, 60, 3, 255, 144, 69, 1, 255, 186, 103, 7, 255, 203, 129, 24, 255, 208, 143, 51, 255, 224, 166, 61, 255, 229, 175, 68, 255, 228, 172, 34, 255, 230, 174, 3, 255, 231, 168, 12, 255, 230, 164, 16, 255, 192, 112, 9, 255, 187, 109, 15, 255, 228, 143, 7, 255, 240, 164, 22, 255, 233, 174, 23, 255, 235, 179, 36, 255, 238, 195, 60, 255, 232, 208, 125, 255, 233, 222, 151, 255, 244, 228, 146, 255, 251, 231, 126, 255, 250, 225, 41, 255, 246, 208, 0, 255, 237, 174, 21, 255, 216, 140, 18, 255, 195, 120, 4, 255, 172, 93, 10, 255, 181, 102, 14, 255, 180, 94, 0, 255, 168, 80, 2, 255, 147, 69, 3, 255, 145, 67, 10, 255, 146, 74, 6, 255, 146, 72, 3, 255, 144, 71, 12, 255, 143, 68, 9, 255, 137, 64, 1, 255, 137, 67, 3, 255, 141, 70, 4, 255, 146, 65, 6, 255, 138, 63, 8, 255, 128, 64, 10, 255, 135, 67, 9, 255, 143, 67, 2, 255, 145, 72, 9, 255, 136, 73, 8, 255, 137, 73, 6, 255, 144, 64, 12, 255, 134, 63, 9, 255, 131, 63, 6, 255, 148, 79, 12, 255, 155, 86, 13, 255, 149, 78, 12, 255, 146, 82, 12, 255, 156, 93, 11, 255, 170, 99, 18, 255, 183, 103, 19, 255, 185, 104, 11, 255, 192, 109, 15, 255, 190, 107, 16, 255, 193, 113, 11, 255, 196, 116, 10, 255, 203, 123, 22, 255, 202, 124, 14, 255, 202, 125, 7, 255, 203, 125, 14, 255, 205, 124, 19, 255, 208, 127, 15, 255, 209, 131, 17, 255, 206, 134, 12, 255, 205, 133, 11, 255, 211, 127, 15, 255, 213, 133, 15, 255, 214, 142, 12, 255, 215, 145, 13, 255, 207, 134, 11, 255, 208, 132, 13, 255, 218, 147, 17, 255, 219, 148, 16, 255, 219, 143, 16, 255, 217, 150, 5, 255, 218, 149, 20, 255, 219, 147, 16, 255, 220, 147, 6, 255, 219, 145, 7, 255, 222, 145, 11, 255, 219, 146, 15, 255, 214, 141, 6, 255, 208, 134, 2, 255, 205, 137, 10, 255, 219, 149, 12, 255, 224, 147, 14, 255, 215, 141, 6, 255, 207, 130, 4, 255, 196, 118, 5, 255, 202, 129, 8, 255, 208, 139, 10, 255, 208, 140, 5, 255, 211, 147, 7, 255, 210, 143, 9, 255, 216, 144, 8, 255, 212, 143, 5, 255, 217, 156, 11, 255, 228, 164, 11, 255, 224, 155, 13, 255, 215, 147, 6, 255, 211, 144, 5, 255, 221, 151, 8, 255, 225, 155, 8, 255, 219, 148, 12, 255, 218, 150, 5, 255, 220, 154, 10, 255, 214, 152, 5, 255, 216, 156, 5, 255, 215, 154, 4, 255, 217, 153, 4, 255, 214, 149, 1, 255, 214, 149, 7, 255, 211, 148, 5, 255, 205, 144, 7, 255, 211, 153, 9, 255, 211, 152, 4, 255, 207, 145, 2, 255, 208, 142, 10, 255, 210, 148, 5, 255, 211, 153, 3, 255, 210, 154, 10, 255, 208, 150, 11, 255, 203, 146, 2, 255, 206, 146, 6, 255, 206, 145, 9, 255, 194, 134, 4, 255, 196, 130, 14, 255, 197, 125, 7, 255, 206, 131, 10, 255, 208, 140, 14, 255, 211, 151, 9, 255, 210, 152, 3, 255, 211, 150, 5, 255, 210, 149, 5, 255, 205, 143, 5, 255, 202, 137, 13, 255, 203, 138, 14, 255, 204, 140, 11, 255, 204, 137, 11, 255, 209, 143, 10, 255, 195, 124, 7, 255, 190, 114, 16, 255, 194, 119, 11, 255, 188, 111, 6, 255, 193, 117, 7, 255, 195, 120, 1, 255, 192, 114, 10, 255, 189, 108, 11, 255, 185, 103, 5, 255, 188, 101, 7, 255, 192, 103, 7, 255, 192, 104, 15, 255, 196, 113, 10, 255, 196, 116, 4, 255, 191, 111, 6, 255, 192, 110, 11, 255, 191, 109, 9, 255, 191, 107, 12, 255, 188, 101, 9, 255, 176, 86, 3, 255, 175, 81, 0, 255, 178, 81, 2, 255, 171, 75, 2, 255, 170, 74, 4, 255, 169, 71, 7, 255, 164, 70, 7, 255, 161, 70, 7, 255, 162, 72, 6, 255, 168, 77, 11, 255, 164, 71, 2, 255, 150, 66, 1, 255, 136, 58, 0, 255, 135, 58, 2, 255, 135, 55, 7, 255, 136, 60, 7, 255, 134, 64, 9, 255, 133, 64, 4, 255, 132, 61, 6, 255, 130, 62, 6, 255, 122, 57, 8, 255, 105, 46, 2, 255, 143, 71, 10, 255, 155, 68, 5, 255, 134, 58, 2, 255, 124, 46, 6, 255, 148, 67, 9, 255, 152, 75, 12, 255, 139, 69, 10, 255, 134, 65, 1, 255, 153, 76, 2, 255, 155, 69, 4, 255, 144, 54, 6, 255, 150, 65, 8, 255, 154, 74, 3, 255, 167, 82, 4, 255, 168, 81, 5, 255, 173, 86, 11, 255, 175, 89, 5, 255, 180, 93, 0, 255, 183, 95, 1, 255, 178, 86, 0, 255, 172, 78, 2, 255, 157, 70, 3, 255, 149, 68, 3, 255, 148, 67, 0, 255, 144, 63, 1, 255, 140, 61, 9, 255, 131, 51, 10, 255, 130, 52, 5, 255, 131, 54, 2, 255, 129, 52, 2, 255, 125, 48, 6, 255, 125, 47, 6, 255, 121, 45, 4, 255, 117, 45, 2, 255, 119, 43, 0, 255, 117, 40, 2, 255, 121, 43, 9, 255, 116, 40, 4, 255, 118, 46, 2, 255, 113, 41, 2, 255, 111, 36, 2, 255, 118, 46, 6, 255, 112, 43, 1, 255, 109, 41, 1, 255, 120, 50, 1, 255, 113, 46, 0, 255, 109, 40, 6, 255, 124, 51, 9, 255, 123, 49, 3, 255, 124, 51, 3, 255, 126, 54, 7, 255, 136, 64, 4, 255, 147, 66, 0, 255, 150, 67, 4, 255, 147, 63, 5, 255, 147, 64, 5, 255, 158, 74, 5, 255, 163, 80, 1, 255, 171, 82, 5, 255, 168, 80, 1, 255, 159, 71, 2, 255, 141, 57, 2, 255, 133, 57, 0, 255, 129, 54, 0, 255, 125, 51, 4, 255, 117, 45, 2, 255, 106, 35, 1, 255, 94, 30, 1, 255, 90, 33, 3, 255, 87, 31, 1, 255, 90, 32, 2, 255, 86, 32, 4, 255, 78, 26, 0, 255, 75, 25, 1, 255, 72, 24, 1, 255, 71, 24, 2, 255, 70, 23, 1, 255, 74, 26, 3, 255, 70, 23, 2, 255, 61, 20, 2, 255, 69, 22, 4, 255, 63, 21, 3, 255, 55, 24, 2, 255, 70, 20, 3, 255, 70, 20, 3, 255, 75, 21, 5, 255, 75, 22, 1, 255, 1, 2, 13, 255, 1, 1, 25, 255, 5, 5, 5, 255, 0, 2, 66, 255, 17, 66, 228, 255, 82, 87, 72, 255, 54, 36, 0, 255, 46, 16, 3, 255, 34, 29, 123, 255, 6, 19, 117, 255, 8, 4, 1, 255, 11, 3, 3, 255, 14, 0, 3, 255, 17, 3, 2, 255, 22, 6, 6, 255, 23, 5, 3, 255, 26, 8, 6, 255, 22, 5, 3, 255, 21, 7, 4, 255, 23, 11, 9, 255, 22, 8, 8, 255, 32, 14, 12, 255, 32, 12, 8, 255, 30, 11, 6, 255, 28, 10, 3, 255, 31, 9, 3, 255, 35, 12, 4, 255, 35, 14, 4, 255, 34, 11, 2, 255, 34, 10, 3, 255, 44, 14, 6, 255, 42, 13, 2, 255, 47, 12, 5, 255, 45, 17, 5, 255, 39, 15, 4, 255, 41, 13, 6, 255, 34, 13, 4, 255, 35, 15, 4, 255, 42, 16, 3, 255, 46, 19, 3, 255, 48, 19, 0, 255, 54, 20, 3, 255, 62, 23, 7, 255, 60, 18, 5, 255, 56, 17, 3, 255, 52, 21, 2, 255, 52, 21, 2, 255, 43, 23, 2, 255, 45, 24, 1, 255, 52, 26, 3, 255, 57, 26, 5, 255, 51, 32, 2, 255, 58, 34, 4, 255, 57, 31, 2, 255, 66, 36, 4, 255, 59, 37, 3, 255, 57, 37, 8, 255, 68, 37, 0, 255, 86, 51, 5, 255, 92, 59, 4, 255, 72, 48, 5, 255, 75, 53, 1, 255, 75, 53, 3, 255, 76, 44, 5, 255, 95, 59, 6, 255, 135, 87, 8, 255, 157, 99, 4, 255, 160, 95, 5, 255, 165, 99, 7, 255, 174, 97, 9, 255, 151, 84, 5, 255, 129, 68, 5, 255, 121, 79, 10, 255, 121, 83, 6, 255, 150, 110, 2, 255, 184, 113, 6, 255, 178, 102, 17, 255, 179, 106, 17, 255, 182, 109, 26, 255, 192, 122, 29, 255, 192, 123, 18, 255, 185, 105, 19, 255, 180, 101, 23, 255, 185, 104, 30, 255, 182, 105, 20, 255, 173, 103, 12, 255, 173, 105, 8, 255, 165, 91, 20, 255, 167, 93, 15, 255, 174, 97, 18, 255, 162, 85, 11, 255, 165, 98, 6, 255, 171, 104, 5, 255, 171, 98, 15, 255, 171, 96, 17, 255, 174, 98, 12, 255, 174, 101, 11, 255, 178, 98, 14, 255, 174, 89, 10, 255, 167, 81, 12, 255, 170, 88, 14, 255, 177, 98, 17, 255, 177, 100, 15, 255, 178, 104, 11, 255, 184, 111, 16, 255, 188, 107, 5, 255, 192, 111, 8, 255, 189, 114, 21, 255, 199, 116, 16, 255, 202, 123, 16, 255, 197, 120, 21, 255, 194, 122, 9, 255, 196, 121, 13, 255, 189, 111, 12, 255, 195, 117, 19, 255, 202, 123, 15, 255, 200, 115, 11, 255, 185, 106, 10, 255, 186, 107, 11, 255, 195, 116, 6, 255, 186, 115, 8, 255, 185, 112, 15, 255, 178, 105, 11, 255, 169, 99, 4, 255, 164, 84, 6, 255, 164, 85, 11, 255, 158, 85, 6, 255, 151, 70, 12, 255, 137, 65, 4, 255, 135, 62, 2, 255, 146, 64, 1, 255, 145, 61, 3, 255, 142, 57, 0, 255, 136, 53, 9, 255, 132, 49, 12, 255, 124, 47, 9, 255, 125, 60, 8, 255, 133, 58, 1, 255, 124, 49, 4, 255, 144, 63, 6, 255, 178, 88, 2, 255, 184, 92, 3, 255, 187, 99, 1, 255, 195, 105, 0, 255, 198, 108, 2, 255, 203, 115, 2, 255, 210, 114, 4, 255, 210, 114, 9, 255, 205, 114, 1, 255, 201, 111, 6, 255, 198, 105, 4, 255, 209, 114, 1, 255, 206, 107, 3, 255, 203, 108, 12, 255, 193, 106, 6, 255, 202, 109, 9, 255, 189, 90, 11, 255, 178, 88, 8, 255, 172, 85, 5, 255, 177, 78, 6, 255, 174, 83, 4, 255, 162, 80, 6, 255, 147, 73, 2, 255, 146, 77, 4, 255, 155, 80, 3, 255, 150, 76, 3, 255, 169, 82, 8, 255, 176, 86, 8, 255, 174, 83, 5, 255, 161, 77, 5, 255, 141, 71, 16, 255, 134, 71, 7, 255, 146, 74, 3, 255, 138, 68, 6, 255, 135, 66, 13, 255, 148, 80, 11, 255, 172, 102, 9, 255, 177, 99, 12, 255, 181, 102, 10, 255, 193, 112, 7, 255, 186, 110, 10, 255, 184, 105, 8, 255, 168, 83, 5, 255, 168, 89, 6, 255, 187, 112, 10, 255, 192, 111, 12, 255, 204, 123, 15, 255, 202, 121, 14, 255, 201, 121, 22, 255, 206, 129, 20, 255, 209, 133, 13, 255, 210, 131, 19, 255, 213, 130, 17, 255, 213, 139, 7, 255, 215, 143, 5, 255, 218, 141, 17, 255, 220, 144, 7, 255, 219, 145, 16, 255, 218, 144, 14, 255, 220, 147, 11, 255, 219, 147, 12, 255, 216, 142, 12, 255, 220, 145, 18, 255, 218, 145, 15, 255, 216, 146, 8, 255, 220, 143, 13, 255, 218, 146, 15, 255, 218, 149, 11, 255, 221, 150, 15, 255, 221, 148, 7, 255, 219, 141, 10, 255, 220, 141, 7, 255, 215, 142, 1, 255, 215, 143, 6, 255, 219, 147, 6, 255, 223, 154, 9, 255, 216, 139, 7, 255, 211, 130, 9, 255, 197, 118, 7, 255, 191, 113, 15, 255, 197, 127, 12, 255, 207, 144, 8, 255, 208, 144, 7, 255, 215, 148, 6, 255, 214, 153, 7, 255, 218, 152, 14, 255, 217, 149, 3, 255, 224, 157, 5, 255, 229, 164, 5, 255, 224, 158, 5, 255, 214, 141, 13, 255, 217, 147, 4, 255, 225, 160, 2, 255, 227, 160, 9, 255, 222, 155, 4, 255, 220, 155, 5, 255, 221, 157, 11, 255, 217, 158, 5, 255, 213, 157, 3, 255, 213, 158, 2, 255, 216, 158, 1, 255, 220, 159, 4, 255, 216, 155, 0, 255, 218, 155, 5, 255, 207, 146, 6, 255, 212, 151, 15, 255, 217, 162, 3, 255, 211, 156, 7, 255, 209, 151, 6, 255, 209, 149, 5, 255, 211, 151, 5, 255, 211, 154, 4, 255, 209, 152, 2, 255, 207, 146, 18, 255, 205, 145, 15, 255, 208, 151, 3, 255, 193, 133, 9, 255, 195, 134, 1, 255, 199, 133, 5, 255, 202, 129, 5, 255, 207, 137, 1, 255, 208, 144, 3, 255, 210, 153, 13, 255, 213, 156, 14, 255, 214, 153, 10, 255, 210, 148, 3, 255, 208, 145, 1, 255, 207, 143, 8, 255, 206, 143, 10, 255, 208, 144, 5, 255, 205, 140, 7, 255, 208, 142, 8, 255, 202, 133, 6, 255, 197, 124, 14, 255, 196, 125, 7, 255, 195, 124, 5, 255, 200, 127, 8, 255, 200, 126, 5, 255, 198, 121, 10, 255, 197, 118, 11, 255, 202, 123, 6, 255, 197, 117, 0, 255, 201, 118, 13, 255, 202, 118, 11, 255, 201, 119, 5, 255, 197, 115, 1, 255, 192, 113, 3, 255, 190, 110, 14, 255, 191, 107, 6, 255, 190, 104, 7, 255, 181, 91, 8, 255, 173, 78, 6, 255, 171, 74, 0, 255, 173, 73, 3, 255, 172, 80, 12, 255, 163, 73, 6, 255, 168, 74, 0, 255, 171, 76, 6, 255, 164, 70, 5, 255, 163, 71, 2, 255, 156, 66, 2, 255, 152, 63, 6, 255, 152, 61, 8, 255, 136, 50, 6, 255, 135, 57, 8, 255, 124, 50, 0, 255, 127, 50, 5, 255, 147, 74, 6, 255, 131, 59, 5, 255, 132, 62, 8, 255, 133, 65, 4, 255, 131, 61, 6, 255, 112, 46, 2, 255, 129, 58, 4, 255, 150, 71, 3, 255, 123, 45, 9, 255, 131, 51, 13, 255, 163, 83, 6, 255, 173, 94, 2, 255, 176, 98, 3, 255, 180, 89, 2, 255, 160, 72, 2, 255, 134, 53, 2, 255, 131, 55, 2, 255, 149, 73, 3, 255, 178, 99, 2, 255, 191, 107, 3, 255, 191, 103, 4, 255, 180, 93, 5, 255, 176, 89, 2, 255, 179, 91, 2, 255, 179, 88, 0, 255, 179, 88, 0, 255, 182, 92, 3, 255, 173, 87, 3, 255, 163, 78, 6, 255, 154, 67, 4, 255, 146, 59, 2, 255, 147, 67, 2, 255, 148, 66, 3, 255, 140, 62, 3, 255, 130, 56, 0, 255, 131, 53, 2, 255, 128, 48, 0, 255, 126, 48, 0, 255, 125, 50, 3, 255, 117, 45, 3, 255, 110, 43, 4, 255, 105, 42, 3, 255, 102, 38, 0, 255, 105, 40, 0, 255, 109, 41, 3, 255, 106, 40, 6, 255, 106, 41, 3, 255, 110, 43, 3, 255, 111, 43, 3, 255, 112, 43, 3, 255, 116, 43, 5, 255, 115, 44, 2, 255, 119, 48, 8, 255, 117, 45, 6, 255, 110, 39, 0, 255, 122, 52, 2, 255, 136, 62, 5, 255, 142, 66, 1, 255, 151, 69, 1, 255, 164, 75, 2, 255, 175, 83, 5, 255, 178, 86, 5, 255, 176, 83, 2, 255, 174, 80, 1, 255, 178, 79, 2, 255, 175, 77, 1, 255, 157, 63, 1, 255, 134, 46, 2, 255, 128, 49, 3, 255, 129, 54, 3, 255, 128, 53, 3, 255, 120, 48, 1, 255, 109, 39, 3, 255, 93, 30, 1, 255, 85, 29, 1, 255, 86, 31, 2, 255, 85, 31, 2, 255, 82, 29, 2, 255, 78, 25, 0, 255, 79, 26, 3, 255, 75, 25, 3, 255, 69, 23, 2, 255, 63, 19, 0, 255, 63, 20, 0, 255, 80, 23, 7, 255, 76, 23, 8, 255, 65, 17, 3, 255, 63, 18, 3, 255, 55, 16, 1, 255, 63, 18, 4, 255, 62, 20, 1, 255, 65, 18, 0, 255, 69, 20, 2, 255, 1, 5, 19, 255, 1, 1, 0, 255, 3, 0, 59, 255, 14, 52, 229, 255, 73, 84, 93, 255, 58, 34, 0, 255, 36, 13, 0, 255, 47, 27, 106, 255, 4, 25, 141, 255, 14, 4, 10, 255, 14, 6, 3, 255, 15, 5, 6, 255, 17, 4, 1, 255, 18, 2, 2, 255, 21, 5, 5, 255, 22, 6, 5, 255, 23, 7, 4, 255, 20, 5, 2, 255, 20, 6, 2, 255, 18, 4, 3, 255, 23, 9, 8, 255, 27, 11, 9, 255, 28, 10, 7, 255, 27, 7, 4, 255, 35, 15, 11, 255, 32, 8, 3, 255, 34, 11, 5, 255, 31, 14, 6, 255, 29, 9, 2, 255, 36, 12, 5, 255, 46, 14, 9, 255, 38, 13, 3, 255, 41, 13, 4, 255, 40, 15, 4, 255, 36, 14, 3, 255, 38, 10, 5, 255, 33, 14, 5, 255, 37, 15, 4, 255, 47, 19, 5, 255, 49, 17, 1, 255, 51, 18, 0, 255, 49, 22, 2, 255, 49, 20, 4, 255, 48, 21, 6, 255, 41, 23, 6, 255, 38, 23, 5, 255, 40, 25, 4, 255, 49, 27, 6, 255, 48, 27, 2, 255, 46, 28, 2, 255, 46, 29, 2, 255, 50, 34, 3, 255, 60, 36, 4, 255, 66, 37, 5, 255, 66, 33, 11, 255, 61, 42, 1, 255, 61, 40, 2, 255, 80, 46, 4, 255, 93, 60, 4, 255, 76, 49, 2, 255, 72, 49, 7, 255, 74, 54, 0, 255, 60, 48, 5, 255, 80, 47, 5, 255, 77, 41, 6, 255, 94, 62, 3, 255, 143, 90, 2, 255, 155, 91, 1, 255, 164, 96, 5, 255, 165, 90, 1, 255, 147, 85, 2, 255, 115, 69, 2, 255, 123, 79, 5, 255, 164, 105, 15, 255, 188, 110, 19, 255, 194, 113, 22, 255, 200, 123, 32, 255, 202, 134, 29, 255, 208, 142, 24, 255, 213, 145, 17, 255, 201, 125, 20, 255, 194, 116, 27, 255, 198, 122, 22, 255, 200, 119, 25, 255, 198, 122, 26, 255, 201, 124, 19, 255, 199, 121, 13, 255, 201, 120, 22, 255, 199, 120, 11, 255, 190, 118, 19, 255, 196, 119, 21, 255, 200, 118, 14, 255, 196, 118, 15, 255, 195, 117, 17, 255, 199, 115, 20, 255, 197, 116, 14, 255, 192, 114, 19, 255, 198, 115, 19, 255, 193, 115, 17, 255, 189, 115, 9, 255, 186, 114, 14, 255, 199, 120, 18, 255, 200, 120, 10, 255, 201, 119, 15, 255, 197, 116, 8, 255, 199, 117, 12, 255, 200, 126, 13, 255, 202, 121, 19, 255, 198, 122, 16, 255, 201, 121, 13, 255, 198, 116, 7, 255, 194, 115, 15, 255, 191, 109, 15, 255, 202, 116, 8, 255, 204, 117, 21, 255, 201, 117, 10, 255, 197, 120, 11, 255, 198, 111, 4, 255, 203, 120, 4, 255, 201, 120, 10, 255, 206, 119, 10, 255, 201, 122, 11, 255, 198, 116, 14, 255, 205, 118, 7, 255, 198, 115, 7, 255, 190, 103, 12, 255, 194, 105, 9, 255, 187, 108, 13, 255, 188, 106, 8, 255, 182, 104, 8, 255, 183, 101, 15, 255, 176, 99, 12, 255, 176, 103, 1, 255, 171, 101, 9, 255, 159, 91, 10, 255, 150, 74, 9, 255, 138, 69, 6, 255, 128, 64, 4, 255, 112, 61, 14, 255, 111, 53, 4, 255, 120, 52, 9, 255, 137, 64, 7, 255, 145, 68, 4, 255, 146, 64, 7, 255, 154, 69, 7, 255, 153, 65, 0, 255, 152, 68, 3, 255, 152, 71, 7, 255, 145, 67, 16, 255, 140, 64, 14, 255, 137, 59, 4, 255, 151, 68, 8, 255, 150, 73, 6, 255, 153, 67, 6, 255, 166, 72, 10, 255, 167, 82, 8, 255, 157, 78, 7, 255, 153, 74, 8, 255, 166, 74, 4, 255, 170, 77, 2, 255, 163, 77, 3, 255, 154, 80, 5, 255, 148, 78, 6, 255, 145, 73, 11, 255, 155, 72, 5, 255, 154, 76, 2, 255, 179, 93, 5, 255, 172, 84, 11, 255, 153, 68, 8, 255, 146, 69, 14, 255, 142, 76, 11, 255, 148, 85, 9, 255, 161, 94, 9, 255, 167, 101, 8, 255, 175, 107, 10, 255, 183, 111, 20, 255, 193, 116, 12, 255, 193, 110, 9, 255, 191, 103, 6, 255, 193, 108, 16, 255, 204, 118, 11, 255, 200, 111, 1, 255, 192, 101, 14, 255, 202, 116, 21, 255, 208, 131, 15, 255, 210, 136, 12, 255, 214, 136, 8, 255, 212, 132, 15, 255, 205, 125, 14, 255, 202, 124, 9, 255, 215, 136, 15, 255, 217, 138, 14, 255, 214, 137, 16, 255, 210, 132, 16, 255, 207, 127, 16, 255, 212, 133, 18, 255, 218, 143, 18, 255, 212, 139, 13, 255, 215, 140, 10, 255, 219, 144, 8, 255, 218, 145, 14, 255, 220, 145, 10, 255, 219, 144, 12, 255, 220, 148, 11, 255, 212, 144, 3, 255, 217, 149, 13, 255, 220, 148, 15, 255, 220, 147, 12, 255, 222, 149, 8, 255, 210, 138, 4, 255, 204, 131, 12, 255, 215, 144, 9, 255, 219, 148, 4, 255, 218, 144, 12, 255, 223, 148, 11, 255, 220, 145, 4, 255, 202, 121, 19, 255, 196, 123, 6, 255, 208, 138, 12, 255, 214, 144, 10, 255, 213, 146, 7, 255, 214, 150, 10, 255, 215, 151, 10, 255, 222, 157, 4, 255, 226, 153, 3, 255, 220, 148, 5, 255, 221, 158, 10, 255, 220, 154, 1, 255, 220, 137, 5, 255, 220, 135, 17, 255, 217, 144, 4, 255, 221, 152, 7, 255, 224, 158, 7, 255, 223, 158, 2, 255, 224, 160, 4, 255, 223, 163, 4, 255, 220, 162, 4, 255, 221, 162, 3, 255, 213, 158, 0, 255, 216, 160, 2, 255, 218, 158, 2, 255, 215, 155, 0, 255, 216, 158, 2, 255, 215, 158, 3, 255, 213, 156, 3, 255, 217, 160, 7, 255, 214, 160, 3, 255, 210, 155, 8, 255, 204, 150, 3, 255, 207, 151, 5, 255, 212, 155, 6, 255, 211, 154, 4, 255, 207, 149, 3, 255, 208, 150, 11, 255, 209, 153, 13, 255, 211, 156, 2, 255, 185, 123, 9, 255, 195, 132, 8, 255, 177, 105, 8, 255, 189, 116, 15, 255, 199, 134, 5, 255, 204, 149, 2, 255, 214, 161, 11, 255, 214, 159, 12, 255, 212, 152, 9, 255, 208, 144, 4, 255, 208, 141, 7, 255, 209, 145, 12, 255, 208, 144, 10, 255, 203, 140, 6, 255, 207, 140, 11, 255, 205, 139, 5, 255, 209, 138, 20, 255, 201, 129, 12, 255, 199, 127, 9, 255, 207, 135, 14, 255, 203, 133, 2, 255, 201, 130, 6, 255, 203, 127, 15, 255, 200, 124, 6, 255, 199, 117, 9, 255, 197, 116, 14, 255, 197, 119, 12, 255, 201, 119, 13, 255, 190, 103, 8, 255, 187, 99, 7, 255, 196, 110, 7, 255, 188, 104, 9, 255, 187, 97, 2, 255, 179, 89, 2, 255, 167, 75, 4, 255, 166, 73, 3, 255, 163, 68, 4, 255, 167, 69, 6, 255, 176, 83, 10, 255, 174, 85, 5, 255, 166, 76, 3, 255, 160, 73, 2, 255, 162, 72, 1, 255, 163, 63, 8, 255, 158, 57, 5, 255, 146, 60, 5, 255, 143, 57, 5, 255, 126, 50, 2, 255, 121, 57, 4, 255, 116, 49, 3, 255, 137, 59, 7, 255, 158, 78, 10, 255, 132, 50, 8, 255, 127, 53, 4, 255, 124, 59, 3, 255, 117, 56, 1, 255, 113, 52, 2, 255, 106, 38, 5, 255, 126, 56, 0, 255, 124, 50, 8, 255, 149, 78, 2, 255, 172, 94, 3, 255, 183, 93, 5, 255, 181, 79, 9, 255, 157, 67, 9, 255, 139, 53, 8, 255, 131, 51, 3, 255, 147, 69, 2, 255, 171, 86, 7, 255, 198, 105, 3, 255, 197, 105, 1, 255, 187, 96, 1, 255, 176, 87, 0, 255, 177, 86, 4, 255, 177, 86, 6, 255, 179, 88, 4, 255, 184, 93, 1, 255, 189, 100, 1, 255, 187, 99, 2, 255, 187, 99, 4, 255, 184, 93, 5, 255, 169, 77, 3, 255, 159, 68, 5, 255, 148, 59, 1, 255, 136, 53, 3, 255, 121, 43, 1, 255, 127, 48, 4, 255, 134, 50, 4, 255, 127, 50, 3, 255, 121, 47, 7, 255, 117, 42, 9, 255, 116, 45, 7, 255, 110, 42, 4, 255, 109, 43, 6, 255, 107, 41, 2, 255, 107, 42, 2, 255, 104, 37, 4, 255, 105, 38, 1, 255, 106, 38, 5, 255, 105, 35, 4, 255, 113, 40, 1, 255, 116, 40, 3, 255, 118, 47, 2, 255, 126, 57, 7, 255, 120, 49, 2, 255, 115, 47, 3, 255, 124, 57, 1, 255, 138, 62, 3, 255, 144, 60, 0, 255, 150, 69, 2, 255, 161, 73, 1, 255, 171, 78, 0, 255, 176, 83, 2, 255, 174, 82, 1, 255, 171, 80, 2, 255, 170, 78, 3, 255, 170, 75, 5, 255, 160, 64, 2, 255, 146, 56, 7, 255, 130, 48, 10, 255, 122, 46, 2, 255, 121, 50, 1, 255, 106, 40, 1, 255, 93, 31, 0, 255, 87, 28, 5, 255, 84, 27, 3, 255, 86, 30, 3, 255, 88, 29, 1, 255, 85, 27, 2, 255, 82, 24, 1, 255, 79, 22, 1, 255, 77, 21, 4, 255, 74, 23, 7, 255, 66, 19, 3, 255, 57, 15, 0, 255, 59, 21, 3, 255, 61, 20, 2, 255, 64, 18, 3, 255, 60, 17, 1, 255, 58, 18, 1, 255, 55, 20, 1, 255, 58, 23, 1, 255, 59, 20, 0, 255, 62, 18, 2, 255, 3, 1, 0, 255, 0, 0, 48, 255, 10, 43, 217, 255, 65, 81, 106, 255, 54, 40, 4, 255, 37, 16, 0, 255, 42, 21, 90, 255, 8, 17, 151, 255, 10, 3, 16, 255, 10, 6, 0, 255, 15, 5, 5, 255, 16, 5, 5, 255, 15, 6, 2, 255, 19, 4, 4, 255, 18, 4, 3, 255, 18, 4, 3, 255, 18, 5, 3, 255, 20, 6, 5, 255, 20, 8, 6, 255, 21, 7, 6, 255, 24, 7, 7, 255, 27, 9, 6, 255, 31, 11, 8, 255, 32, 11, 7, 255, 32, 11, 8, 255, 30, 8, 4, 255, 28, 14, 6, 255, 23, 13, 4, 255, 26, 14, 6, 255, 28, 13, 5, 255, 33, 11, 5, 255, 31, 12, 3, 255, 32, 12, 2, 255, 34, 14, 3, 255, 34, 17, 4, 255, 34, 12, 1, 255, 32, 14, 1, 255, 36, 17, 3, 255, 45, 18, 9, 255, 41, 15, 4, 255, 47, 20, 3, 255, 54, 22, 3, 255, 45, 20, 0, 255, 43, 23, 1, 255, 44, 23, 2, 255, 35, 19, 3, 255, 30, 24, 2, 255, 38, 26, 1, 255, 47, 31, 4, 255, 51, 34, 4, 255, 57, 29, 1, 255, 63, 35, 3, 255, 63, 34, 4, 255, 62, 30, 2, 255, 63, 33, 2, 255, 62, 40, 0, 255, 70, 45, 4, 255, 87, 54, 3, 255, 80, 48, 3, 255, 66, 51, 1, 255, 73, 54, 0, 255, 72, 48, 4, 255, 62, 42, 4, 255, 73, 51, 1, 255, 70, 47, 1, 255, 79, 55, 7, 255, 136, 79, 7, 255, 158, 96, 4, 255, 142, 85, 1, 255, 134, 75, 2, 255, 145, 81, 10, 255, 158, 93, 10, 255, 178, 107, 13, 255, 192, 106, 10, 255, 192, 122, 25, 255, 192, 149, 29, 255, 202, 151, 11, 255, 194, 133, 8, 255, 197, 134, 26, 255, 194, 128, 11, 255, 191, 114, 14, 255, 194, 123, 11, 255, 195, 121, 15, 255, 197, 121, 26, 255, 198, 121, 11, 255, 200, 120, 12, 255, 199, 116, 24, 255, 199, 121, 11, 255, 200, 121, 6, 255, 201, 120, 14, 255, 198, 120, 15, 255, 197, 121, 13, 255, 196, 117, 16, 255, 201, 118, 10, 255, 204, 118, 15, 255, 197, 116, 4, 255, 201, 120, 5, 255, 202, 117, 10, 255, 201, 119, 9, 255, 205, 119, 12, 255, 208, 125, 7, 255, 201, 121, 5, 255, 200, 119, 15, 255, 202, 122, 18, 255, 203, 123, 6, 255, 196, 121, 8, 255, 195, 110, 5, 255, 204, 123, 15, 255, 208, 136, 15, 255, 205, 128, 13, 255, 215, 135, 21, 255, 209, 122, 16, 255, 210, 126, 20, 255, 204, 128, 13, 255, 201, 123, 15, 255, 207, 123, 10, 255, 203, 124, 7, 255, 203, 123, 4, 255, 206, 122, 6, 255, 201, 118, 5, 255, 197, 118, 5, 255, 202, 121, 10, 255, 204, 115, 12, 255, 203, 117, 9, 255, 201, 120, 2, 255, 201, 119, 3, 255, 204, 120, 8, 255, 205, 120, 14, 255, 201, 115, 15, 255, 198, 117, 7, 255, 199, 114, 5, 255, 197, 112, 5, 255, 195, 108, 7, 255, 192, 108, 5, 255, 186, 114, 4, 255, 185, 101, 6, 255, 179, 100, 6, 255, 166, 96, 12, 255, 162, 89, 14, 255, 161, 81, 4, 255, 136, 68, 5, 255, 128, 64, 11, 255, 133, 68, 6, 255, 134, 66, 3, 255, 138, 67, 10, 255, 142, 73, 7, 255, 138, 72, 7, 255, 136, 70, 3, 255, 153, 82, 6, 255, 158, 83, 3, 255, 141, 67, 9, 255, 132, 60, 6, 255, 147, 67, 8, 255, 154, 69, 6, 255, 151, 71, 4, 255, 146, 71, 2, 255, 154, 81, 10, 255, 153, 72, 10, 255, 145, 64, 5, 255, 147, 67, 2, 255, 158, 69, 6, 255, 146, 69, 5, 255, 145, 75, 9, 255, 137, 74, 12, 255, 137, 70, 8, 255, 120, 61, 7, 255, 126, 60, 4, 255, 132, 68, 13, 255, 150, 82, 5, 255, 181, 101, 9, 255, 186, 110, 4, 255, 184, 108, 10, 255, 190, 112, 10, 255, 193, 116, 9, 255, 197, 118, 11, 255, 199, 118, 8, 255, 197, 117, 21, 255, 202, 124, 9, 255, 202, 121, 11, 255, 191, 113, 14, 255, 204, 120, 16, 255, 202, 115, 14, 255, 175, 85, 5, 255, 182, 88, 7, 255, 205, 121, 19, 255, 207, 129, 18, 255, 212, 133, 11, 255, 214, 135, 27, 255, 204, 126, 25, 255, 204, 125, 14, 255, 210, 131, 12, 255, 208, 127, 11, 255, 208, 127, 6, 255, 200, 123, 16, 255, 208, 137, 20, 255, 219, 149, 15, 255, 217, 141, 17, 255, 210, 130, 10, 255, 211, 132, 19, 255, 217, 143, 12, 255, 216, 143, 14, 255, 221, 147, 9, 255, 217, 144, 6, 255, 217, 145, 8, 255, 210, 142, 7, 255, 209, 145, 10, 255, 219, 148, 10, 255, 225, 150, 9, 255, 210, 136, 1, 255, 206, 134, 14, 255, 218, 152, 19, 255, 218, 153, 6, 255, 222, 150, 7, 255, 206, 132, 4, 255, 204, 130, 5, 255, 210, 135, 8, 255, 188, 116, 13, 255, 206, 143, 9, 255, 218, 151, 6, 255, 210, 137, 10, 255, 211, 136, 6, 255, 216, 145, 10, 255, 217, 146, 13, 255, 216, 147, 2, 255, 213, 147, 7, 255, 210, 153, 13, 255, 220, 157, 9, 255, 207, 129, 8, 255, 195, 114, 18, 255, 209, 143, 11, 255, 221, 158, 0, 255, 226, 161, 7, 255, 227, 164, 7, 255, 225, 164, 0, 255, 230, 168, 8, 255, 227, 167, 11, 255, 220, 164, 1, 255, 218, 159, 1, 255, 217, 159, 0, 255, 219, 161, 2, 255, 218, 159, 3, 255, 216, 159, 3, 255, 217, 161, 7, 255, 215, 161, 2, 255, 215, 162, 2, 255, 216, 162, 3, 255, 216, 161, 7, 255, 209, 152, 8, 255, 208, 154, 5, 255, 209, 154, 3, 255, 211, 155, 4, 255, 209, 153, 5, 255, 208, 151, 6, 255, 210, 154, 6, 255, 209, 156, 12, 255, 212, 160, 11, 255, 205, 147, 8, 255, 177, 114, 5, 255, 166, 98, 9, 255, 184, 120, 12, 255, 201, 143, 9, 255, 206, 153, 5, 255, 212, 161, 4, 255, 213, 159, 4, 255, 210, 152, 3, 255, 207, 144, 5, 255, 208, 143, 14, 255, 209, 144, 19, 255, 207, 141, 19, 255, 206, 140, 12, 255, 207, 140, 4, 255, 208, 140, 8, 255, 206, 137, 15, 255, 204, 133, 17, 255, 208, 136, 13, 255, 206, 135, 7, 255, 202, 132, 10, 255, 204, 128, 20, 255, 205, 129, 16, 255, 202, 124, 5, 255, 204, 121, 14, 255, 200, 118, 14, 255, 193, 114, 7, 255, 193, 109, 3, 255, 182, 92, 2, 255, 187, 97, 4, 255, 193, 106, 3, 255, 189, 102, 2, 255, 172, 80, 3, 255, 161, 67, 5, 255, 161, 68, 2, 255, 165, 73, 5, 255, 168, 75, 6, 255, 174, 80, 4, 255, 166, 75, 1, 255, 169, 77, 7, 255, 174, 80, 9, 255, 163, 70, 2, 255, 153, 62, 3, 255, 145, 58, 3, 255, 142, 55, 9, 255, 138, 51, 2, 255, 141, 56, 6, 255, 126, 47, 8, 255, 117, 49, 0, 255, 127, 58, 3, 255, 145, 65, 5, 255, 139, 69, 12, 255, 126, 54, 5, 255, 119, 44, 0, 255, 121, 49, 2, 255, 115, 46, 4, 255, 118, 51, 10, 255, 112, 41, 7, 255, 110, 38, 10, 255, 122, 52, 6, 255, 157, 81, 0, 255, 180, 93, 3, 255, 172, 84, 4, 255, 138, 54, 2, 255, 121, 48, 5, 255, 122, 48, 10, 255, 132, 55, 4, 255, 158, 76, 1, 255, 170, 83, 1, 255, 188, 98, 4, 255, 188, 101, 4, 255, 185, 98, 9, 255, 172, 85, 6, 255, 172, 85, 6, 255, 174, 88, 2, 255, 175, 90, 1, 255, 176, 89, 1, 255, 185, 96, 4, 255, 191, 103, 6, 255, 188, 100, 1, 255, 187, 99, 1, 255, 189, 99, 5, 255, 183, 93, 3, 255, 174, 82, 7, 255, 158, 72, 7, 255, 138, 53, 2, 255, 132, 43, 5, 255, 123, 37, 3, 255, 117, 38, 1, 255, 118, 43, 5, 255, 116, 41, 4, 255, 113, 42, 2, 255, 109, 42, 2, 255, 109, 44, 5, 255, 107, 42, 4, 255, 108, 43, 5, 255, 106, 39, 3, 255, 97, 33, 4, 255, 93, 33, 3, 255, 93, 35, 1, 255, 91, 32, 2, 255, 91, 32, 1, 255, 99, 41, 8, 255, 114, 48, 6, 255, 129, 57, 0, 255, 126, 53, 2, 255, 128, 57, 4, 255, 128, 54, 2, 255, 133, 56, 0, 255, 142, 60, 3, 255, 153, 62, 4, 255, 164, 69, 3, 255, 172, 78, 3, 255, 174, 82, 1, 255, 175, 84, 0, 255, 170, 83, 0, 255, 168, 76, 3, 255, 169, 73, 1, 255, 173, 80, 3, 255, 151, 64, 5, 255, 129, 45, 3, 255, 120, 43, 3, 255, 103, 40, 3, 255, 89, 29, 0, 255, 83, 25, 3, 255, 84, 26, 6, 255, 82, 23, 0, 255, 88, 28, 3, 255, 81, 29, 4, 255, 78, 26, 3, 255, 74, 23, 1, 255, 68, 18, 0, 255, 66, 19, 3, 255, 64, 18, 3, 255, 61, 20, 5, 255, 48, 21, 2, 255, 49, 21, 2, 255, 45, 17, 1, 255, 49, 18, 0, 255, 57, 15, 1, 255, 51, 19, 1, 255, 59, 21, 3, 255, 59, 18, 2, 255, 57, 17, 2, 255, 0, 0, 44, 255, 11, 39, 205, 255, 66, 84, 111, 255, 46, 48, 0, 255, 31, 10, 0, 255, 47, 24, 83, 255, 13, 21, 149, 255, 14, 6, 18, 255, 16, 2, 0, 255, 11, 3, 2, 255, 13, 6, 9, 255, 17, 9, 5, 255, 15, 5, 2, 255, 14, 4, 2, 255, 15, 4, 3, 255, 16, 4, 4, 255, 18, 6, 6, 255, 17, 6, 6, 255, 17, 6, 5, 255, 19, 8, 7, 255, 24, 9, 8, 255, 27, 7, 4, 255, 34, 14, 7, 255, 31, 10, 4, 255, 29, 10, 4, 255, 28, 9, 4, 255, 28, 13, 6, 255, 27, 14, 8, 255, 29, 15, 9, 255, 26, 14, 5, 255, 36, 13, 5, 255, 37, 13, 5, 255, 34, 13, 7, 255, 37, 10, 2, 255, 33, 14, 2, 255, 35, 13, 2, 255, 38, 14, 2, 255, 42, 20, 4, 255, 42, 15, 3, 255, 45, 17, 4, 255, 51, 20, 2, 255, 54, 20, 3, 255, 49, 21, 6, 255, 38, 19, 2, 255, 38, 23, 5, 255, 45, 22, 4, 255, 50, 27, 7, 255, 48, 29, 4, 255, 57, 28, 4, 255, 53, 28, 1, 255, 53, 31, 4, 255, 60, 33, 2, 255, 58, 37, 7, 255, 64, 34, 3, 255, 65, 39, 2, 255, 70, 37, 3, 255, 95, 55, 5, 255, 73, 50, 0, 255, 72, 49, 5, 255, 78, 46, 4, 255, 66, 48, 3, 255, 62, 48, 6, 255, 66, 49, 2, 255, 73, 48, 5, 255, 72, 54, 5, 255, 77, 55, 1, 255, 100, 68, 1, 255, 136, 79, 4, 255, 143, 78, 7, 255, 160, 97, 11, 255, 176, 101, 17, 255, 176, 104, 8, 255, 173, 103, 13, 255, 170, 96, 6, 255, 166, 100, 7, 255, 174, 124, 12, 255, 172, 120, 8, 255, 121, 88, 5, 255, 92, 63, 12, 255, 103, 65, 13, 255, 102, 63, 5, 255, 121, 76, 0, 255, 144, 88, 16, 255, 166, 96, 20, 255, 175, 103, 20, 255, 181, 112, 8, 255, 188, 116, 6, 255, 187, 110, 15, 255, 192, 113, 11, 255, 193, 114, 16, 255, 189, 111, 12, 255, 188, 113, 7, 255, 186, 111, 15, 255, 186, 108, 4, 255, 194, 111, 5, 255, 196, 109, 7, 255, 194, 107, 10, 255, 187, 98, 9, 255, 191, 105, 6, 255, 198, 116, 7, 255, 199, 118, 3, 255, 193, 108, 3, 255, 192, 99, 8, 255, 199, 106, 10, 255, 197, 111, 7, 255, 195, 107, 6, 255, 188, 95, 7, 255, 194, 118, 17, 255, 199, 127, 12, 255, 204, 126, 13, 255, 196, 114, 7, 255, 199, 112, 6, 255, 203, 120, 6, 255, 201, 117, 10, 255, 203, 115, 4, 255, 197, 104, 9, 255, 203, 108, 4, 255, 203, 119, 2, 255, 202, 124, 10, 255, 206, 123, 13, 255, 209, 122, 10, 255, 208, 122, 5, 255, 204, 123, 5, 255, 204, 122, 11, 255, 207, 122, 7, 255, 207, 122, 6, 255, 205, 122, 10, 255, 205, 118, 5, 255, 202, 111, 17, 255, 203, 123, 7, 255, 201, 119, 6, 255, 201, 119, 9, 255, 197, 111, 6, 255, 199, 111, 0, 255, 200, 117, 10, 255, 198, 112, 12, 255, 192, 103, 6, 255, 192, 101, 3, 255, 190, 110, 5, 255, 186, 112, 9, 255, 182, 103, 15, 255, 174, 96, 11, 255, 168, 99, 6, 255, 166, 98, 6, 255, 160, 87, 10, 255, 152, 83, 6, 255, 151, 83, 7, 255, 148, 80, 11, 255, 136, 72, 5, 255, 131, 67, 7, 255, 133, 63, 8, 255, 135, 59, 8, 255, 137, 62, 1, 255, 142, 69, 4, 255, 142, 67, 1, 255, 147, 72, 6, 255, 145, 69, 5, 255, 143, 71, 7, 255, 135, 66, 8, 255, 141, 65, 8, 255, 150, 71, 14, 255, 145, 71, 4, 255, 147, 76, 2, 255, 144, 77, 15, 255, 140, 73, 10, 255, 133, 70, 17, 255, 145, 76, 6, 255, 166, 96, 13, 255, 184, 114, 17, 255, 193, 113, 3, 255, 193, 109, 4, 255, 193, 115, 13, 255, 197, 120, 16, 255, 204, 125, 17, 255, 205, 120, 22, 255, 204, 119, 19, 255, 206, 126, 13, 255, 209, 130, 21, 255, 213, 132, 18, 255, 203, 122, 6, 255, 200, 120, 7, 255, 196, 111, 11, 255, 200, 113, 11, 255, 196, 111, 10, 255, 193, 107, 11, 255, 203, 118, 19, 255, 211, 130, 30, 255, 217, 140, 23, 255, 218, 145, 7, 255, 216, 141, 7, 255, 215, 133, 20, 255, 197, 113, 10, 255, 201, 120, 5, 255, 205, 134, 16, 255, 215, 151, 19, 255, 220, 147, 18, 255, 217, 136, 15, 255, 219, 143, 6, 255, 222, 149, 13, 255, 220, 148, 15, 255, 222, 149, 27, 255, 221, 148, 15, 255, 213, 139, 3, 255, 212, 140, 10, 255, 218, 153, 3, 255, 226, 162, 3, 255, 222, 151, 3, 255, 211, 134, 16, 255, 213, 143, 5, 255, 224, 159, 6, 255, 226, 158, 9, 255, 214, 144, 4, 255, 210, 137, 5, 255, 202, 134, 9, 255, 203, 141, 4, 255, 203, 133, 17, 255, 198, 136, 7, 255, 223, 168, 5, 255, 222, 154, 9, 255, 198, 126, 4, 255, 209, 142, 6, 255, 211, 149, 5, 255, 212, 147, 11, 255, 218, 155, 8, 255, 221, 162, 9, 255, 224, 156, 6, 255, 213, 133, 4, 255, 201, 124, 10, 255, 216, 155, 13, 255, 221, 167, 4, 255, 223, 165, 3, 255, 229, 170, 5, 255, 228, 169, 3, 255, 228, 166, 9, 255, 228, 167, 9, 255, 222, 165, 1, 255, 220, 165, 5, 255, 219, 164, 4, 255, 218, 163, 3, 255, 221, 165, 6, 255, 221, 162, 3, 255, 219, 159, 3, 255, 220, 163, 4, 255, 219, 164, 4, 255, 216, 161, 1, 255, 212, 154, 5, 255, 213, 153, 3, 255, 216, 155, 11, 255, 214, 157, 6, 255, 209, 152, 3, 255, 210, 151, 7, 255, 212, 155, 6, 255, 211, 157, 3, 255, 212, 159, 6, 255, 211, 160, 5, 255, 211, 160, 5, 255, 211, 162, 6, 255, 204, 154, 3, 255, 185, 131, 13, 255, 190, 138, 11, 255, 201, 150, 8, 255, 215, 160, 5, 255, 213, 155, 10, 255, 209, 152, 13, 255, 209, 151, 3, 255, 209, 151, 2, 255, 212, 149, 8, 255, 210, 147, 8, 255, 208, 142, 13, 255, 208, 141, 8, 255, 206, 138, 5, 255, 209, 139, 12, 255, 205, 136, 2, 255, 206, 135, 5, 255, 207, 136, 10, 255, 205, 131, 14, 255, 204, 131, 13, 255, 206, 130, 19, 255, 201, 125, 6, 255, 203, 124, 5, 255, 206, 122, 15, 255, 189, 101, 3, 255, 185, 93, 6, 255, 190, 98, 4, 255, 186, 94, 5, 255, 189, 98, 7, 255, 183, 90, 10, 255, 176, 84, 3, 255, 161, 74, 7, 255, 159, 70, 7, 255, 160, 72, 3, 255, 164, 74, 1, 255, 176, 85, 2, 255, 189, 95, 5, 255, 167, 78, 3, 255, 157, 69, 6, 255, 160, 69, 3, 255, 149, 56, 5, 255, 136, 44, 10, 255, 132, 49, 6, 255, 137, 57, 8, 255, 141, 54, 8, 255, 134, 44, 17, 255, 130, 42, 16, 255, 132, 53, 4, 255, 139, 59, 5, 255, 147, 66, 4, 255, 142, 69, 13, 255, 127, 58, 11, 255, 114, 45, 8, 255, 121, 49, 6, 255, 123, 46, 3, 255, 122, 45, 6, 255, 116, 48, 4, 255, 101, 35, 13, 255, 125, 55, 4, 255, 157, 78, 8, 255, 147, 61, 9, 255, 129, 52, 10, 255, 116, 55, 2, 255, 119, 50, 4, 255, 120, 49, 3, 255, 135, 60, 5, 255, 152, 70, 7, 255, 168, 83, 7, 255, 173, 88, 7, 255, 181, 96, 1, 255, 188, 102, 10, 255, 176, 89, 5, 255, 174, 89, 3, 255, 175, 91, 1, 255, 176, 90, 1, 255, 180, 93, 6, 255, 188, 102, 10, 255, 190, 105, 3, 255, 190, 106, 1, 255, 187, 102, 3, 255, 190, 100, 5, 255, 190, 97, 1, 255, 185, 96, 3, 255, 184, 93, 5, 255, 177, 84, 2, 255, 166, 78, 3, 255, 147, 65, 2, 255, 126, 46, 4, 255, 120, 43, 3, 255, 126, 51, 2, 255, 115, 48, 2, 255, 108, 47, 1, 255, 106, 45, 1, 255, 107, 42, 2, 255, 103, 33, 2, 255, 95, 33, 0, 255, 90, 33, 3, 255, 84, 33, 2, 255, 88, 34, 2, 255, 92, 36, 9, 255, 79, 25, 3, 255, 80, 26, 6, 255, 98, 37, 6, 255, 121, 51, 3, 255, 117, 46, 3, 255, 113, 46, 0, 255, 120, 50, 2, 255, 128, 53, 4, 255, 127, 49, 3, 255, 137, 54, 4, 255, 152, 61, 1, 255, 165, 72, 2, 255, 165, 73, 1, 255, 168, 73, 4, 255, 169, 75, 2, 255, 170, 75, 2, 255, 171, 77, 1, 255, 169, 79, 0, 255, 158, 69, 2, 255, 146, 56, 5, 255, 130, 45, 1, 255, 118, 45, 5, 255, 99, 35, 2, 255, 87, 26, 1, 255, 86, 27, 5, 255, 81, 24, 2, 255, 79, 24, 1, 255, 71, 25, 2, 255, 70, 25, 1, 255, 73, 28, 5, 255, 69, 23, 4, 255, 60, 16, 0, 255, 59, 15, 2, 255, 59, 18, 3, 255, 60, 20, 4, 255, 59, 18, 4, 255, 49, 20, 4, 255, 47, 16, 3, 255, 55, 13, 6, 255, 45, 15, 4, 255, 44, 14, 4, 255, 48, 14, 3, 255, 52, 17, 3, 255, 14, 37, 213, 255, 60, 74, 122, 255, 55, 43, 0, 255, 34, 17, 0, 255, 44, 22, 71, 255, 8, 25, 151, 255, 13, 7, 27, 255, 16, 0, 0, 255, 13, 5, 2, 255, 12, 5, 3, 255, 14, 4, 2, 255, 15, 5, 3, 255, 13, 2, 4, 255, 13, 4, 3, 255, 14, 4, 3, 255, 17, 6, 5, 255, 12, 1, 0, 255, 17, 6, 5, 255, 22, 8, 9, 255, 25, 9, 6, 255, 24, 9, 4, 255, 22, 7, 1, 255, 25, 9, 3, 255, 29, 12, 6, 255, 23, 9, 4, 255, 28, 11, 7, 255, 32, 11, 6, 255, 32, 11, 8, 255, 29, 12, 5, 255, 25, 12, 5, 255, 31, 13, 4, 255, 36, 14, 4, 255, 32, 13, 2, 255, 32, 14, 4, 255, 29, 15, 4, 255, 41, 18, 7, 255, 47, 18, 6, 255, 41, 16, 2, 255, 39, 15, 3, 255, 47, 22, 5, 255, 42, 19, 1, 255, 45, 25, 6, 255, 41, 22, 4, 255, 39, 21, 6, 255, 39, 22, 4, 255, 47, 25, 1, 255, 51, 23, 1, 255, 50, 29, 2, 255, 55, 29, 5, 255, 55, 30, 5, 255, 57, 33, 5, 255, 63, 32, 2, 255, 62, 36, 9, 255, 59, 38, 2, 255, 56, 39, 4, 255, 82, 56, 7, 255, 84, 53, 1, 255, 65, 48, 5, 255, 65, 47, 3, 255, 71, 47, 7, 255, 65, 44, 7, 255, 72, 46, 0, 255, 73, 50, 3, 255, 73, 53, 3, 255, 70, 49, 2, 255, 68, 44, 0, 255, 91, 60, 7, 255, 157, 90, 10, 255, 181, 99, 5, 255, 170, 95, 12, 255, 170, 104, 4, 255, 187, 127, 5, 255, 191, 127, 4, 255, 176, 116, 7, 255, 183, 118, 5, 255, 152, 89, 5, 255, 102, 63, 4, 255, 89, 57, 3, 255, 79, 53, 1, 255, 81, 47, 7, 255, 61, 40, 5, 255, 63, 44, 4, 255, 70, 44, 0, 255, 76, 47, 5, 255, 82, 46, 6, 255, 100, 58, 10, 255, 112, 61, 4, 255, 135, 79, 13, 255, 139, 84, 10, 255, 135, 77, 8, 255, 140, 81, 16, 255, 149, 84, 8, 255, 154, 85, 7, 255, 152, 86, 12, 255, 156, 86, 4, 255, 163, 88, 9, 255, 172, 91, 7, 255, 172, 87, 9, 255, 181, 95, 11, 255, 172, 98, 6, 255, 183, 103, 9, 255, 187, 102, 13, 255, 178, 93, 5, 255, 179, 99, 4, 255, 192, 107, 3, 255, 195, 102, 11, 255, 193, 111, 5, 255, 198, 113, 12, 255, 197, 118, 11, 255, 188, 106, 6, 255, 185, 97, 8, 255, 189, 103, 8, 255, 186, 99, 3, 255, 183, 89, 11, 255, 186, 91, 8, 255, 182, 90, 7, 255, 186, 100, 9, 255, 192, 99, 4, 255, 196, 104, 7, 255, 194, 118, 9, 255, 199, 122, 9, 255, 205, 119, 7, 255, 203, 119, 6, 255, 207, 119, 12, 255, 211, 121, 10, 255, 201, 111, 3, 255, 192, 104, 11, 255, 203, 122, 13, 255, 208, 123, 5, 255, 208, 124, 1, 255, 208, 121, 4, 255, 210, 123, 6, 255, 208, 121, 8, 255, 202, 119, 6, 255, 206, 121, 10, 255, 203, 118, 4, 255, 189, 103, 8, 255, 167, 78, 4, 255, 168, 77, 11, 255, 175, 84, 12, 255, 182, 93, 7, 255, 195, 103, 17, 255, 197, 111, 13, 255, 190, 108, 15, 255, 190, 106, 17, 255, 187, 103, 0, 255, 183, 101, 6, 255, 178, 99, 11, 255, 167, 95, 10, 255, 157, 92, 5, 255, 152, 84, 14, 255, 156, 87, 7, 255, 144, 74, 3, 255, 134, 67, 10, 255, 129, 70, 7, 255, 117, 51, 15, 255, 114, 56, 12, 255, 128, 72, 14, 255, 146, 75, 9, 255, 158, 81, 4, 255, 163, 93, 7, 255, 164, 91, 10, 255, 172, 96, 10, 255, 169, 90, 12, 255, 159, 80, 3, 255, 175, 98, 17, 255, 198, 113, 18, 255, 205, 121, 8, 255, 197, 117, 11, 255, 198, 112, 13, 255, 182, 97, 6, 255, 187, 109, 15, 255, 205, 131, 21, 255, 209, 132, 12, 255, 213, 131, 20, 255, 213, 131, 8, 255, 215, 137, 4, 255, 218, 135, 15, 255, 201, 112, 15, 255, 190, 100, 14, 255, 197, 104, 28, 255, 179, 83, 7, 255, 194, 97, 17, 255, 197, 105, 9, 255, 184, 95, 2, 255, 186, 102, 8, 255, 213, 139, 18, 255, 215, 145, 12, 255, 218, 143, 9, 255, 215, 142, 7, 255, 208, 135, 6, 255, 218, 136, 20, 255, 220, 146, 6, 255, 215, 144, 10, 255, 216, 142, 18, 255, 221, 141, 12, 255, 219, 140, 4, 255, 218, 145, 5, 255, 221, 148, 17, 255, 221, 150, 4, 255, 222, 150, 5, 255, 218, 147, 11, 255, 211, 137, 1, 255, 215, 140, 4, 255, 224, 156, 18, 255, 224, 158, 11, 255, 207, 134, 9, 255, 198, 122, 17, 255, 215, 150, 4, 255, 217, 153, 0, 255, 212, 140, 6, 255, 205, 124, 15, 255, 201, 128, 15, 255, 217, 157, 22, 255, 214, 157, 7, 255, 200, 138, 10, 255, 223, 166, 14, 255, 223, 163, 9, 255, 212, 149, 10, 255, 207, 150, 12, 255, 206, 151, 2, 255, 210, 152, 7, 255, 219, 163, 2, 255, 220, 159, 2, 255, 221, 155, 8, 255, 211, 138, 7, 255, 199, 129, 12, 255, 215, 158, 12, 255, 228, 176, 5, 255, 228, 173, 10, 255, 226, 166, 10, 255, 234, 176, 12, 255, 233, 176, 0, 255, 229, 169, 3, 255, 221, 158, 10, 255, 218, 159, 6, 255, 221, 167, 4, 255, 219, 167, 6, 255, 221, 168, 8, 255, 221, 165, 6, 255, 219, 163, 3, 255, 223, 165, 5, 255, 220, 164, 5, 255, 215, 162, 10, 255, 218, 160, 4, 255, 211, 147, 3, 255, 208, 147, 9, 255, 219, 163, 9, 255, 213, 155, 0, 255, 206, 139, 3, 255, 212, 150, 7, 255, 213, 161, 2, 255, 209, 160, 5, 255, 213, 163, 13, 255, 215, 165, 7, 255, 212, 163, 7, 255, 209, 165, 9, 255, 213, 170, 3, 255, 213, 169, 9, 255, 202, 154, 8, 255, 201, 145, 5, 255, 211, 157, 6, 255, 215, 158, 15, 255, 213, 154, 15, 255, 208, 152, 3, 255, 211, 155, 4, 255, 210, 151, 4, 255, 209, 147, 3, 255, 209, 142, 8, 255, 205, 139, 4, 255, 208, 140, 13, 255, 208, 139, 7, 255, 205, 136, 5, 255, 208, 138, 7, 255, 211, 139, 13, 255, 207, 132, 20, 255, 203, 131, 3, 255, 202, 127, 5, 255, 207, 125, 7, 255, 210, 128, 3, 255, 190, 103, 10, 255, 172, 82, 5, 255, 176, 81, 6, 255, 178, 85, 6, 255, 161, 63, 7, 255, 181, 89, 6, 255, 174, 85, 0, 255, 166, 75, 6, 255, 155, 68, 4, 255, 154, 70, 0, 255, 153, 66, 4, 255, 165, 74, 8, 255, 174, 81, 4, 255, 175, 79, 6, 255, 159, 67, 6, 255, 152, 63, 4, 255, 145, 56, 9, 255, 133, 52, 6, 255, 133, 57, 2, 255, 139, 59, 2, 255, 155, 67, 7, 255, 160, 71, 5, 255, 149, 68, 5, 255, 134, 57, 7, 255, 128, 53, 4, 255, 140, 64, 4, 255, 153, 73, 4, 255, 148, 69, 3, 255, 121, 48, 4, 255, 115, 46, 11, 255, 118, 50, 5, 255, 121, 50, 0, 255, 125, 52, 4, 255, 111, 44, 1, 255, 109, 41, 4, 255, 113, 51, 5, 255, 115, 56, 4, 255, 116, 49, 2, 255, 120, 53, 0, 255, 117, 48, 0, 255, 115, 41, 7, 255, 124, 54, 6, 255, 143, 69, 1, 255, 175, 86, 12, 255, 184, 89, 12, 255, 169, 83, 1, 255, 177, 90, 0, 255, 180, 90, 1, 255, 180, 90, 2, 255, 183, 95, 5, 255, 176, 88, 2, 255, 178, 89, 2, 255, 186, 99, 4, 255, 189, 103, 0, 255, 190, 103, 1, 255, 191, 104, 1, 255, 192, 103, 2, 255, 192, 100, 4, 255, 190, 95, 2, 255, 184, 95, 1, 255, 187, 96, 5, 255, 184, 90, 2, 255, 178, 87, 0, 255, 170, 84, 2, 255, 155, 70, 3, 255, 141, 60, 4, 255, 135, 61, 4, 255, 132, 59, 5, 255, 121, 51, 2, 255, 117, 46, 5, 255, 112, 39, 6, 255, 104, 32, 3, 255, 97, 34, 0, 255, 91, 35, 2, 255, 92, 33, 6, 255, 83, 27, 1, 255, 97, 33, 5, 255, 106, 33, 10, 255, 94, 34, 2, 255, 95, 35, 2, 255, 98, 31, 3, 255, 102, 38, 7, 255, 102, 39, 1, 255, 115, 47, 6, 255, 114, 46, 3, 255, 115, 46, 2, 255, 131, 46, 3, 255, 137, 52, 1, 255, 144, 63, 2, 255, 149, 64, 2, 255, 147, 65, 4, 255, 156, 68, 5, 255, 159, 65, 2, 255, 157, 66, 1, 255, 150, 65, 2, 255, 144, 61, 1, 255, 148, 62, 3, 255, 140, 54, 0, 255, 126, 45, 2, 255, 109, 38, 5, 255, 88, 28, 1, 255, 82, 24, 1, 255, 83, 28, 5, 255, 71, 22, 1, 255, 68, 21, 0, 255, 69, 21, 2, 255, 64, 21, 3, 255, 59, 23, 5, 255, 62, 19, 4, 255, 65, 16, 2, 255, 59, 18, 3, 255, 52, 12, 1, 255, 52, 14, 2, 255, 45, 16, 4, 255, 43, 14, 4, 255, 44, 9, 2, 255, 41, 9, 2, 255, 33, 11, 3, 255, 38, 11, 2, 255, 45, 15, 3, 255, 59, 73, 119, 255, 55, 40, 6, 255, 25, 18, 1, 255, 51, 25, 50, 255, 16, 24, 140, 255, 6, 6, 37, 255, 15, 3, 0, 255, 14, 7, 4, 255, 13, 4, 2, 255, 12, 3, 2, 255, 14, 4, 3, 255, 16, 5, 3, 255, 13, 4, 1, 255, 14, 4, 3, 255, 13, 3, 2, 255, 16, 5, 4, 255, 13, 3, 1, 255, 16, 4, 2, 255, 23, 6, 6, 255, 24, 7, 4, 255, 22, 8, 3, 255, 18, 8, 1, 255, 22, 11, 4, 255, 26, 9, 5, 255, 26, 9, 5, 255, 26, 10, 5, 255, 27, 9, 2, 255, 35, 15, 7, 255, 28, 11, 3, 255, 26, 11, 4, 255, 30, 15, 6, 255, 33, 14, 2, 255, 35, 13, 3, 255, 30, 14, 4, 255, 30, 15, 5, 255, 40, 17, 6, 255, 39, 14, 3, 255, 41, 18, 5, 255, 41, 18, 7, 255, 40, 19, 4, 255, 36, 21, 4, 255, 38, 20, 4, 255, 37, 21, 0, 255, 40, 22, 4, 255, 47, 22, 1, 255, 51, 28, 3, 255, 52, 29, 1, 255, 48, 30, 4, 255, 45, 29, 5, 255, 56, 33, 4, 255, 63, 36, 3, 255, 61, 32, 2, 255, 56, 34, 4, 255, 55, 41, 5, 255, 81, 50, 3, 255, 87, 57, 3, 255, 63, 40, 5, 255, 74, 49, 2, 255, 60, 46, 2, 255, 67, 46, 2, 255, 77, 46, 1, 255, 70, 47, 1, 255, 79, 49, 5, 255, 71, 45, 3, 255, 68, 46, 13, 255, 119, 79, 8, 255, 172, 96, 16, 255, 165, 82, 9, 255, 147, 81, 8, 255, 167, 115, 0, 255, 185, 130, 7, 255, 198, 141, 6, 255, 193, 128, 2, 255, 187, 126, 2, 255, 165, 108, 11, 255, 107, 57, 4, 255, 82, 57, 1, 255, 79, 56, 5, 255, 80, 54, 5, 255, 73, 52, 1, 255, 71, 47, 2, 255, 74, 52, 11, 255, 74, 53, 5, 255, 69, 44, 6, 255, 72, 49, 1, 255, 75, 48, 1, 255, 78, 44, 5, 255, 103, 65, 8, 255, 89, 52, 2, 255, 75, 39, 2, 255, 82, 46, 4, 255, 79, 44, 4, 255, 76, 38, 4, 255, 82, 37, 6, 255, 81, 41, 1, 255, 109, 61, 7, 255, 95, 51, 5, 255, 115, 67, 7, 255, 112, 60, 5, 255, 121, 65, 2, 255, 123, 61, 5, 255, 124, 56, 6, 255, 128, 66, 4, 255, 132, 73, 10, 255, 145, 79, 5, 255, 141, 71, 6, 255, 138, 68, 1, 255, 142, 71, 8, 255, 151, 82, 11, 255, 155, 81, 12, 255, 167, 87, 13, 255, 174, 95, 4, 255, 174, 91, 2, 255, 177, 89, 10, 255, 178, 94, 7, 255, 187, 99, 4, 255, 185, 98, 12, 255, 165, 86, 8, 255, 180, 92, 4, 255, 194, 108, 4, 255, 196, 114, 3, 255, 203, 113, 5, 255, 198, 111, 16, 255, 198, 111, 9, 255, 203, 118, 2, 255, 201, 115, 6, 255, 201, 116, 8, 255, 203, 117, 4, 255, 206, 120, 3, 255, 207, 121, 13, 255, 210, 126, 5, 255, 210, 126, 4, 255, 207, 125, 6, 255, 211, 129, 8, 255, 210, 127, 16, 255, 210, 126, 4, 255, 202, 117, 13, 255, 184, 106, 9, 255, 187, 106, 15, 255, 193, 104, 14, 255, 203, 116, 11, 255, 198, 118, 17, 255, 200, 118, 9, 255, 202, 118, 4, 255, 199, 111, 17, 255, 194, 108, 15, 255, 192, 109, 8, 255, 186, 104, 5, 255, 178, 97, 12, 255, 178, 102, 8, 255, 181, 103, 8, 255, 175, 97, 12, 255, 161, 84, 9, 255, 165, 90, 16, 255, 165, 94, 8, 255, 157, 81, 18, 255, 169, 89, 20, 255, 174, 95, 7, 255, 179, 100, 12, 255, 184, 106, 11, 255, 183, 109, 8, 255, 187, 110, 13, 255, 190, 110, 13, 255, 192, 109, 20, 255, 184, 102, 14, 255, 200, 125, 14, 255, 199, 120, 12, 255, 199, 115, 4, 255, 195, 104, 7, 255, 188, 100, 11, 255, 192, 111, 9, 255, 209, 129, 20, 255, 213, 136, 5, 255, 213, 133, 11, 255, 215, 132, 20, 255, 217, 136, 13, 255, 215, 137, 7, 255, 210, 128, 11, 255, 199, 111, 8, 255, 207, 124, 10, 255, 200, 109, 16, 255, 179, 84, 5, 255, 187, 93, 10, 255, 169, 78, 4, 255, 169, 84, 23, 255, 200, 125, 18, 255, 217, 143, 17, 255, 213, 139, 14, 255, 221, 139, 11, 255, 222, 143, 19, 255, 218, 145, 16, 255, 220, 146, 14, 255, 221, 149, 13, 255, 221, 146, 17, 255, 220, 145, 13, 255, 216, 139, 8, 255, 199, 117, 17, 255, 206, 131, 10, 255, 218, 149, 14, 255, 217, 150, 7, 255, 218, 144, 8, 255, 215, 145, 8, 255, 206, 133, 8, 255, 207, 128, 4, 255, 219, 154, 22, 255, 223, 161, 14, 255, 214, 150, 9, 255, 208, 141, 3, 255, 222, 157, 14, 255, 210, 144, 8, 255, 211, 144, 6, 255, 204, 131, 12, 255, 203, 138, 11, 255, 218, 162, 7, 255, 209, 151, 2, 255, 217, 162, 8, 255, 222, 164, 4, 255, 218, 153, 0, 255, 225, 166, 3, 255, 222, 169, 12, 255, 203, 140, 5, 255, 219, 157, 7, 255, 223, 168, 7, 255, 213, 158, 1, 255, 221, 159, 9, 255, 215, 158, 0, 255, 218, 164, 7, 255, 228, 172, 16, 255, 232, 177, 8, 255, 228, 175, 5, 255, 226, 172, 2, 255, 233, 177, 4, 255, 229, 169, 8, 255, 220, 157, 10, 255, 217, 156, 9, 255, 224, 166, 11, 255, 222, 167, 8, 255, 220, 168, 6, 255, 223, 169, 9, 255, 221, 166, 7, 255, 220, 166, 5, 255, 221, 167, 6, 255, 219, 163, 6, 255, 220, 163, 12, 255, 221, 163, 9, 255, 217, 158, 6, 255, 218, 163, 5, 255, 215, 163, 2, 255, 205, 143, 2, 255, 203, 132, 3, 255, 210, 144, 7, 255, 210, 157, 6, 255, 210, 165, 6, 255, 215, 169, 7, 255, 216, 168, 6, 255, 215, 168, 2, 255, 213, 166, 10, 255, 216, 166, 4, 255, 213, 163, 2, 255, 213, 154, 5, 255, 205, 135, 7, 255, 207, 147, 9, 255, 211, 155, 5, 255, 213, 154, 7, 255, 209, 152, 5, 255, 211, 153, 9, 255, 208, 149, 7, 255, 211, 148, 6, 255, 210, 144, 10, 255, 210, 143, 5, 255, 209, 141, 12, 255, 205, 137, 3, 255, 206, 138, 2, 255, 207, 137, 12, 255, 205, 132, 12, 255, 205, 132, 12, 255, 202, 130, 8, 255, 206, 129, 10, 255, 198, 113, 12, 255, 174, 82, 4, 255, 166, 79, 2, 255, 185, 101, 8, 255, 186, 97, 11, 255, 182, 94, 4, 255, 183, 94, 7, 255, 179, 91, 4, 255, 175, 88, 7, 255, 163, 76, 6, 255, 169, 81, 4, 255, 169, 85, 3, 255, 155, 71, 0, 255, 158, 71, 1, 255, 173, 84, 0, 255, 173, 82, 6, 255, 158, 70, 4, 255, 149, 60, 1, 255, 160, 67, 4, 255, 159, 72, 3, 255, 144, 62, 3, 255, 138, 52, 6, 255, 137, 44, 9, 255, 149, 54, 7, 255, 155, 70, 8, 255, 145, 71, 4, 255, 145, 72, 6, 255, 148, 70, 4, 255, 148, 67, 4, 255, 132, 59, 2, 255, 120, 57, 4, 255, 123, 51, 4, 255, 120, 52, 1, 255, 121, 51, 5, 255, 124, 45, 8, 255, 114, 47, 2, 255, 112, 47, 8, 255, 102, 42, 9, 255, 93, 36, 0, 255, 114, 47, 5, 255, 121, 54, 3, 255, 117, 47, 5, 255, 109, 37, 5, 255, 140, 63, 16, 255, 164, 79, 12, 255, 175, 85, 4, 255, 174, 85, 0, 255, 172, 90, 2, 255, 177, 91, 3, 255, 180, 90, 1, 255, 182, 92, 3, 255, 184, 95, 7, 255, 181, 93, 5, 255, 180, 93, 2, 255, 184, 97, 2, 255, 184, 98, 0, 255, 189, 101, 3, 255, 188, 101, 4, 255, 189, 101, 4, 255, 189, 102, 4, 255, 187, 100, 2, 255, 186, 96, 2, 255, 184, 94, 1, 255, 184, 94, 3, 255, 182, 91, 4, 255, 177, 84, 1, 255, 177, 82, 3, 255, 171, 81, 6, 255, 139, 60, 1, 255, 126, 51, 2, 255, 126, 52, 1, 255, 123, 54, 1, 255, 119, 55, 3, 255, 109, 46, 3, 255, 104, 36, 5, 255, 97, 34, 0, 255, 107, 36, 4, 255, 98, 37, 8, 255, 90, 27, 3, 255, 91, 29, 3, 255, 101, 40, 2, 255, 97, 34, 3, 255, 83, 23, 2, 255, 93, 30, 4, 255, 95, 32, 0, 255, 104, 43, 2, 255, 112, 49, 3, 255, 119, 50, 3, 255, 118, 43, 2, 255, 120, 47, 4, 255, 120, 52, 3, 255, 125, 54, 4, 255, 135, 55, 6, 255, 140, 61, 2, 255, 139, 57, 0, 255, 140, 56, 1, 255, 136, 56, 4, 255, 131, 53, 4, 255, 130, 52, 4, 255, 129, 50, 4, 255, 120, 42, 4, 255, 99, 29, 2, 255, 82, 25, 0, 255, 83, 28, 4, 255, 80, 27, 7, 255, 64, 20, 3, 255, 66, 23, 1, 255, 72, 25, 4, 255, 65, 26, 5, 255, 53, 20, 0, 255, 55, 17, 1, 255, 62, 17, 2, 255, 59, 19, 3, 255, 55, 14, 1, 255, 61, 17, 5, 255, 54, 12, 2, 255, 51, 13, 2, 255, 44, 16, 2, 255, 31, 15, 1, 255, 32, 11, 5, 255, 31, 11, 3, 255, 33, 12, 1, 255, 40, 40, 7, 255, 27, 20, 0, 255, 47, 26, 48, 255, 14, 25, 158, 255, 6, 6, 40, 255, 14, 2, 0, 255, 11, 6, 4, 255, 13, 5, 3, 255, 15, 5, 4, 255, 14, 3, 1, 255, 16, 5, 2, 255, 12, 1, 1, 255, 11, 3, 1, 255, 13, 5, 3, 255, 13, 4, 3, 255, 15, 5, 3, 255, 15, 6, 3, 255, 16, 5, 3, 255, 21, 7, 5, 255, 15, 3, 3, 255, 16, 6, 4, 255, 19, 9, 6, 255, 23, 9, 4, 255, 25, 8, 2, 255, 27, 10, 2, 255, 26, 12, 7, 255, 21, 9, 7, 255, 26, 11, 6, 255, 25, 10, 5, 255, 28, 11, 7, 255, 30, 12, 9, 255, 30, 11, 7, 255, 32, 15, 9, 255, 33, 14, 4, 255, 34, 16, 3, 255, 35, 16, 9, 255, 32, 16, 7, 255, 40, 19, 6, 255, 35, 19, 4, 255, 37, 20, 2, 255, 37, 23, 4, 255, 36, 24, 5, 255, 37, 22, 2, 255, 42, 23, 5, 255, 43, 26, 4, 255, 47, 27, 5, 255, 44, 29, 1, 255, 45, 27, 8, 255, 54, 32, 4, 255, 55, 35, 3, 255, 57, 36, 5, 255, 59, 37, 6, 255, 54, 36, 2, 255, 73, 49, 2, 255, 86, 58, 2, 255, 68, 46, 8, 255, 72, 47, 7, 255, 73, 46, 1, 255, 66, 47, 4, 255, 69, 44, 3, 255, 72, 45, 3, 255, 68, 49, 6, 255, 62, 44, 1, 255, 90, 61, 9, 255, 155, 88, 17, 255, 180, 88, 13, 255, 136, 69, 3, 255, 95, 68, 6, 255, 157, 123, 8, 255, 193, 137, 0, 255, 191, 121, 10, 255, 191, 131, 11, 255, 192, 125, 1, 255, 148, 87, 3, 255, 89, 54, 2, 255, 87, 53, 4, 255, 85, 52, 9, 255, 81, 52, 3, 255, 77, 50, 5, 255, 63, 46, 3, 255, 71, 49, 1, 255, 72, 45, 1, 255, 76, 48, 2, 255, 79, 50, 2, 255, 81, 49, 1, 255, 84, 50, 6, 255, 81, 48, 9, 255, 76, 46, 3, 255, 78, 49, 4, 255, 85, 49, 7, 255, 94, 47, 2, 255, 77, 47, 3, 255, 71, 42, 8, 255, 79, 45, 6, 255, 68, 46, 5, 255, 103, 58, 8, 255, 70, 34, 3, 255, 67, 40, 6, 255, 85, 48, 3, 255, 94, 51, 6, 255, 61, 38, 2, 255, 67, 38, 7, 255, 69, 40, 4, 255, 76, 39, 6, 255, 81, 41, 3, 255, 81, 39, 6, 255, 81, 40, 3, 255, 77, 37, 3, 255, 94, 46, 8, 255, 90, 51, 6, 255, 95, 46, 4, 255, 114, 53, 8, 255, 123, 57, 6, 255, 135, 68, 8, 255, 147, 77, 8, 255, 152, 81, 8, 255, 163, 77, 10, 255, 166, 83, 7, 255, 176, 92, 5, 255, 182, 99, 8, 255, 181, 102, 3, 255, 193, 107, 4, 255, 188, 104, 6, 255, 184, 96, 13, 255, 187, 97, 12, 255, 198, 110, 12, 255, 196, 109, 4, 255, 196, 109, 2, 255, 201, 114, 4, 255, 206, 119, 13, 255, 205, 119, 8, 255, 209, 124, 7, 255, 210, 125, 9, 255, 212, 127, 3, 255, 213, 127, 5, 255, 213, 129, 10, 255, 212, 128, 16, 255, 220, 139, 11, 255, 217, 140, 18, 255, 216, 136, 31, 255, 207, 123, 10, 255, 206, 124, 9, 255, 210, 124, 12, 255, 206, 119, 6, 255, 203, 115, 10, 255, 198, 110, 18, 255, 191, 107, 6, 255, 188, 103, 5, 255, 185, 104, 14, 255, 188, 112, 13, 255, 194, 115, 9, 255, 193, 110, 10, 255, 181, 101, 6, 255, 184, 106, 9, 255, 194, 113, 12, 255, 194, 112, 7, 255, 185, 101, 6, 255, 190, 106, 13, 255, 193, 113, 11, 255, 194, 117, 4, 255, 196, 115, 14, 255, 196, 113, 17, 255, 201, 119, 8, 255, 202, 118, 4, 255, 196, 106, 16, 255, 196, 105, 6, 255, 201, 116, 10, 255, 198, 114, 11, 255, 193, 106, 14, 255, 206, 120, 19, 255, 213, 133, 12, 255, 215, 134, 15, 255, 212, 130, 8, 255, 210, 129, 10, 255, 218, 139, 7, 255, 214, 136, 13, 255, 214, 139, 9, 255, 212, 136, 9, 255, 216, 136, 12, 255, 220, 137, 14, 255, 192, 109, 11, 255, 193, 107, 10, 255, 176, 85, 6, 255, 178, 98, 11, 255, 208, 139, 25, 255, 214, 146, 10, 255, 216, 138, 13, 255, 221, 139, 6, 255, 217, 145, 8, 255, 221, 146, 14, 255, 211, 134, 5, 255, 207, 136, 20, 255, 215, 149, 29, 255, 217, 151, 6, 255, 212, 140, 9, 255, 199, 125, 12, 255, 207, 137, 12, 255, 210, 144, 7, 255, 209, 132, 13, 255, 207, 127, 5, 255, 204, 128, 9, 255, 215, 147, 17, 255, 202, 133, 7, 255, 205, 134, 4, 255, 217, 157, 2, 255, 225, 166, 10, 255, 216, 160, 16, 255, 217, 159, 12, 255, 221, 159, 11, 255, 216, 156, 4, 255, 218, 161, 5, 255, 209, 148, 10, 255, 209, 147, 10, 255, 206, 147, 11, 255, 214, 157, 9, 255, 224, 166, 7, 255, 217, 158, 5, 255, 212, 155, 11, 255, 225, 167, 3, 255, 223, 160, 7, 255, 214, 154, 16, 255, 218, 166, 3, 255, 221, 164, 2, 255, 225, 165, 6, 255, 221, 164, 13, 255, 218, 163, 13, 255, 211, 157, 5, 255, 223, 168, 11, 255, 231, 177, 9, 255, 228, 174, 4, 255, 230, 178, 4, 255, 228, 174, 7, 255, 223, 167, 9, 255, 220, 164, 5, 255, 222, 167, 5, 255, 225, 171, 10, 255, 221, 169, 9, 255, 221, 167, 6, 255, 224, 170, 9, 255, 220, 166, 6, 255, 222, 168, 6, 255, 222, 169, 4, 255, 220, 167, 4, 255, 220, 161, 6, 255, 207, 151, 9, 255, 205, 156, 4, 255, 220, 163, 8, 255, 216, 152, 2, 255, 203, 137, 6, 255, 206, 140, 12, 255, 207, 142, 6, 255, 207, 153, 7, 255, 214, 166, 8, 255, 218, 171, 4, 255, 217, 169, 4, 255, 216, 168, 10, 255, 219, 167, 13, 255, 216, 162, 1, 255, 214, 159, 4, 255, 208, 147, 2, 255, 203, 130, 2, 255, 209, 144, 9, 255, 215, 154, 13, 255, 208, 147, 9, 255, 209, 149, 7, 255, 212, 152, 12, 255, 210, 148, 8, 255, 209, 145, 2, 255, 210, 142, 7, 255, 211, 142, 6, 255, 208, 137, 11, 255, 206, 133, 4, 255, 207, 134, 4, 255, 206, 133, 11, 255, 200, 128, 8, 255, 200, 128, 4, 255, 199, 128, 1, 255, 209, 135, 4, 255, 182, 97, 3, 255, 172, 82, 9, 255, 192, 109, 7, 255, 193, 113, 7, 255, 197, 116, 6, 255, 197, 115, 9, 255, 197, 115, 5, 255, 181, 98, 2, 255, 179, 96, 12, 255, 168, 84, 7, 255, 163, 73, 6, 255, 165, 81, 12, 255, 150, 68, 9, 255, 149, 65, 4, 255, 166, 80, 3, 255, 166, 79, 1, 255, 171, 78, 8, 255, 168, 73, 9, 255, 156, 61, 0, 255, 155, 62, 0, 255, 142, 51, 7, 255, 131, 44, 8, 255, 130, 47, 9, 255, 122, 43, 5, 255, 126, 48, 1, 255, 146, 60, 5, 255, 149, 67, 6, 255, 144, 67, 4, 255, 127, 54, 3, 255, 123, 44, 11, 255, 119, 55, 14, 255, 127, 50, 6, 255, 124, 53, 1, 255, 121, 51, 5, 255, 121, 41, 7, 255, 114, 49, 4, 255, 117, 55, 6, 255, 113, 52, 8, 255, 102, 38, 0, 255, 108, 43, 2, 255, 117, 51, 3, 255, 107, 44, 4, 255, 114, 48, 2, 255, 157, 78, 5, 255, 168, 81, 2, 255, 165, 86, 10, 255, 167, 92, 4, 255, 175, 91, 1, 255, 176, 88, 3, 255, 177, 90, 1, 255, 177, 89, 0, 255, 178, 89, 3, 255, 181, 94, 5, 255, 183, 94, 1, 255, 183, 93, 2, 255, 185, 93, 1, 255, 183, 92, 1, 255, 185, 94, 3, 255, 186, 97, 3, 255, 186, 97, 3, 255, 185, 97, 1, 255, 186, 95, 1, 255, 185, 94, 1, 255, 186, 94, 2, 255, 186, 92, 4, 255, 184, 90, 2, 255, 182, 88, 1, 255, 178, 89, 2, 255, 156, 72, 2, 255, 134, 51, 5, 255, 129, 54, 6, 255, 129, 53, 6, 255, 125, 45, 3, 255, 125, 49, 3, 255, 108, 40, 8, 255, 101, 31, 0, 255, 106, 36, 4, 255, 97, 32, 2, 255, 88, 31, 4, 255, 78, 30, 2, 255, 84, 29, 4, 255, 106, 42, 8, 255, 95, 36, 1, 255, 67, 19, 2, 255, 64, 19, 9, 255, 76, 27, 6, 255, 86, 32, 1, 255, 87, 30, 0, 255, 98, 29, 5, 255, 118, 43, 7, 255, 121, 47, 3, 255, 122, 49, 4, 255, 123, 50, 1, 255, 130, 48, 5, 255, 127, 46, 4, 255, 125, 45, 4, 255, 121, 42, 5, 255, 110, 36, 3, 255, 96, 31, 4, 255, 92, 30, 2, 255, 100, 34, 1, 255, 99, 33, 6, 255, 90, 30, 4, 255, 80, 24, 1, 255, 67, 16, 1, 255, 58, 18, 7, 255, 67, 23, 2, 255, 69, 25, 1, 255, 76, 27, 4, 255, 73, 19, 1, 255, 72, 22, 4, 255, 66, 21, 7, 255, 68, 20, 7, 255, 65, 18, 3, 255, 66, 23, 6, 255, 63, 19, 3, 255, 60, 20, 3, 255, 54, 20, 4, 255, 45, 16, 1, 255, 41, 15, 2, 255, 38, 13, 1, 255, 32, 12, 0, 255, 31, 17, 0, 255, 38, 29, 43, 255, 15, 24, 152, 255, 10, 10, 56, 255, 13, 2, 0, 255, 11, 4, 2, 255, 13, 3, 5, 255, 16, 5, 6, 255, 14, 6, 4, 255, 10, 4, 1, 255, 12, 5, 2, 255, 13, 2, 2, 255, 14, 3, 3, 255, 9, 3, 1, 255, 14, 4, 3, 255, 14, 4, 3, 255, 13, 5, 2, 255, 14, 4, 2, 255, 19, 5, 4, 255, 16, 5, 4, 255, 16, 6, 5, 255, 21, 9, 6, 255, 24, 9, 4, 255, 25, 7, 3, 255, 24, 10, 5, 255, 23, 12, 9, 255, 19, 9, 6, 255, 24, 13, 7, 255, 25, 12, 7, 255, 21, 11, 6, 255, 19, 11, 5, 255, 22, 17, 9, 255, 27, 12, 5, 255, 30, 14, 5, 255, 30, 15, 4, 255, 33, 14, 7, 255, 33, 18, 9, 255, 33, 16, 5, 255, 32, 20, 6, 255, 36, 20, 3, 255, 42, 24, 7, 255, 37, 25, 6, 255, 38, 23, 3, 255, 42, 25, 8, 255, 39, 24, 0, 255, 50, 26, 0, 255, 45, 28, 4, 255, 53, 29, 3, 255, 63, 35, 1, 255, 59, 36, 1, 255, 63, 39, 1, 255, 60, 39, 5, 255, 66, 36, 6, 255, 84, 61, 0, 255, 78, 49, 6, 255, 72, 46, 2, 255, 71, 52, 1, 255, 69, 46, 7, 255, 63, 46, 5, 255, 63, 41, 0, 255, 60, 43, 2, 255, 74, 47, 7, 255, 130, 75, 4, 255, 171, 100, 13, 255, 140, 76, 9, 255, 96, 54, 2, 255, 85, 51, 4, 255, 152, 99, 6, 255, 201, 140, 1, 255, 188, 125, 5, 255, 179, 120, 3, 255, 196, 132, 4, 255, 151, 87, 4, 255, 91, 49, 4, 255, 77, 55, 1, 255, 77, 52, 5, 255, 74, 49, 2, 255, 68, 44, 0, 255, 68, 44, 3, 255, 83, 51, 7, 255, 69, 47, 6, 255, 71, 47, 1, 255, 82, 49, 0, 255, 73, 46, 5, 255, 81, 50, 8, 255, 80, 45, 3, 255, 78, 45, 4, 255, 78, 47, 8, 255, 75, 42, 1, 255, 80, 43, 3, 255, 83, 45, 7, 255, 84, 46, 2, 255, 90, 41, 2, 255, 80, 42, 3, 255, 75, 45, 3, 255, 71, 40, 3, 255, 70, 37, 10, 255, 70, 41, 1, 255, 75, 48, 2, 255, 67, 36, 12, 255, 75, 44, 7, 255, 81, 44, 2, 255, 86, 49, 5, 255, 81, 43, 2, 255, 84, 46, 2, 255, 82, 45, 6, 255, 82, 47, 4, 255, 82, 44, 3, 255, 86, 43, 1, 255, 86, 43, 5, 255, 81, 43, 3, 255, 83, 40, 2, 255, 90, 48, 7, 255, 88, 50, 6, 255, 88, 40, 4, 255, 92, 41, 7, 255, 88, 45, 4, 255, 101, 53, 1, 255, 127, 60, 13, 255, 149, 71, 8, 255, 169, 88, 1, 255, 183, 101, 5, 255, 190, 108, 5, 255, 186, 102, 8, 255, 180, 96, 6, 255, 187, 105, 6, 255, 190, 105, 3, 255, 191, 105, 5, 255, 196, 107, 12, 255, 187, 100, 5, 255, 183, 96, 11, 255, 202, 116, 12, 255, 206, 118, 19, 255, 208, 118, 13, 255, 209, 120, 10, 255, 207, 123, 13, 255, 210, 124, 21, 255, 213, 126, 5, 255, 212, 129, 25, 255, 209, 125, 38, 255, 207, 120, 15, 255, 209, 123, 22, 255, 205, 112, 38, 255, 200, 109, 10, 255, 201, 112, 8, 255, 198, 111, 9, 255, 190, 105, 5, 255, 189, 109, 16, 255, 197, 112, 27, 255, 195, 111, 7, 255, 193, 110, 8, 255, 192, 111, 6, 255, 191, 109, 4, 255, 202, 116, 19, 255, 197, 113, 14, 255, 186, 104, 5, 255, 189, 110, 5, 255, 181, 98, 18, 255, 195, 114, 13, 255, 198, 114, 6, 255, 193, 108, 15, 255, 199, 119, 8, 255, 189, 109, 11, 255, 196, 116, 14, 255, 198, 117, 10, 255, 201, 119, 9, 255, 213, 129, 14, 255, 208, 126, 7, 255, 209, 128, 14, 255, 218, 138, 15, 255, 208, 128, 1, 255, 201, 116, 10, 255, 197, 108, 10, 255, 205, 117, 18, 255, 218, 135, 16, 255, 214, 136, 8, 255, 213, 139, 8, 255, 216, 140, 12, 255, 211, 131, 17, 255, 209, 119, 13, 255, 209, 125, 14, 255, 205, 130, 10, 255, 183, 111, 7, 255, 201, 132, 20, 255, 218, 147, 20, 255, 218, 143, 10, 255, 210, 122, 15, 255, 201, 118, 13, 255, 212, 147, 13, 255, 215, 148, 15, 255, 213, 134, 14, 255, 217, 141, 22, 255, 218, 151, 19, 255, 212, 148, 18, 255, 202, 135, 10, 255, 195, 121, 14, 255, 209, 136, 14, 255, 210, 145, 10, 255, 196, 125, 12, 255, 180, 99, 8, 255, 181, 105, 11, 255, 198, 132, 10, 255, 197, 129, 8, 255, 201, 133, 17, 255, 217, 160, 13, 255, 219, 159, 8, 255, 216, 165, 10, 255, 228, 177, 12, 255, 213, 154, 1, 255, 223, 165, 4, 255, 216, 161, 12, 255, 205, 148, 9, 255, 220, 159, 9, 255, 215, 156, 7, 255, 212, 159, 0, 255, 209, 147, 7, 255, 220, 165, 5, 255, 213, 163, 10, 255, 211, 151, 6, 255, 213, 141, 13, 255, 214, 154, 5, 255, 213, 159, 3, 255, 223, 169, 7, 255, 217, 168, 2, 255, 217, 162, 3, 255, 224, 171, 9, 255, 217, 164, 3, 255, 214, 158, 3, 255, 227, 174, 3, 255, 227, 173, 5, 255, 228, 178, 1, 255, 228, 177, 2, 255, 221, 168, 0, 255, 225, 171, 2, 255, 227, 173, 7, 255, 222, 168, 9, 255, 222, 169, 9, 255, 223, 170, 3, 255, 222, 169, 6, 255, 221, 167, 5, 255, 223, 170, 4, 255, 223, 171, 2, 255, 222, 171, 2, 255, 224, 168, 5, 255, 215, 163, 6, 255, 214, 169, 3, 255, 211, 157, 4, 255, 204, 136, 10, 255, 196, 129, 8, 255, 199, 135, 5, 255, 201, 138, 7, 255, 210, 152, 8, 255, 214, 165, 5, 255, 218, 172, 4, 255, 216, 170, 4, 255, 217, 170, 8, 255, 214, 164, 13, 255, 212, 157, 10, 255, 212, 158, 10, 255, 196, 137, 7, 255, 201, 135, 5, 255, 211, 151, 5, 255, 213, 153, 13, 255, 207, 141, 13, 255, 205, 143, 9, 255, 211, 148, 6, 255, 209, 145, 7, 255, 206, 141, 3, 255, 209, 141, 4, 255, 210, 143, 5, 255, 206, 133, 10, 255, 203, 129, 8, 255, 205, 132, 10, 255, 208, 136, 13, 255, 206, 137, 5, 255, 201, 129, 15, 255, 197, 123, 16, 255, 200, 123, 6, 255, 196, 114, 6, 255, 197, 117, 3, 255, 198, 119, 8, 255, 202, 125, 5, 255, 199, 119, 8, 255, 198, 116, 12, 255, 188, 104, 4, 255, 179, 96, 4, 255, 174, 92, 4, 255, 180, 100, 5, 255, 181, 97, 5, 255, 166, 86, 2, 255, 150, 71, 4, 255, 151, 70, 10, 255, 160, 75, 8, 255, 159, 74, 4, 255, 173, 82, 6, 255, 163, 71, 1, 255, 147, 63, 6, 255, 148, 67, 7, 255, 137, 50, 8, 255, 137, 49, 13, 255, 130, 48, 1, 255, 120, 48, 2, 255, 125, 46, 4, 255, 120, 43, 3, 255, 117, 44, 5, 255, 116, 39, 1, 255, 115, 42, 4, 255, 118, 46, 2, 255, 114, 50, 8, 255, 118, 47, 2, 255, 116, 46, 2, 255, 115, 44, 6, 255, 118, 48, 2, 255, 116, 54, 4, 255, 110, 49, 3, 255, 104, 41, 4, 255, 102, 38, 1, 255, 109, 49, 3, 255, 128, 59, 4, 255, 136, 66, 2, 255, 154, 81, 11, 255, 172, 96, 5, 255, 173, 93, 1, 255, 173, 93, 10, 255, 169, 92, 1, 255, 172, 92, 0, 255, 175, 92, 3, 255, 174, 90, 2, 255, 174, 88, 0, 255, 179, 92, 3, 255, 180, 93, 4, 255, 180, 92, 0, 255, 182, 92, 1, 255, 183, 93, 2, 255, 185, 95, 4, 255, 183, 93, 2, 255, 181, 92, 0, 255, 185, 94, 1, 255, 188, 96, 3, 255, 184, 95, 1, 255, 186, 96, 0, 255, 184, 94, 2, 255, 181, 90, 1, 255, 181, 91, 2, 255, 182, 92, 0, 255, 185, 92, 3, 255, 175, 83, 3, 255, 145, 67, 3, 255, 126, 53, 7, 255, 108, 41, 6, 255, 94, 31, 1, 255, 101, 36, 4, 255, 110, 51, 4, 255, 104, 41, 0, 255, 97, 37, 1, 255, 97, 34, 1, 255, 87, 29, 0, 255, 84, 33, 4, 255, 83, 25, 3, 255, 83, 27, 1, 255, 77, 26, 2, 255, 67, 21, 3, 255, 60, 22, 3, 255, 53, 19, 1, 255, 60, 21, 5, 255, 54, 16, 4, 255, 55, 11, 6, 255, 67, 19, 1, 255, 72, 20, 0, 255, 72, 21, 3, 255, 78, 28, 3, 255, 85, 21, 3, 255, 81, 18, 0, 255, 86, 25, 0, 255, 95, 27, 1, 255, 90, 25, 1, 255, 79, 24, 1, 255, 75, 26, 2, 255, 82, 27, 2, 255, 94, 31, 4, 255, 96, 35, 6, 255, 84, 25, 1, 255, 74, 22, 4, 255, 56, 17, 1, 255, 68, 24, 4, 255, 61, 23, 0, 255, 70, 24, 4, 255, 75, 19, 4, 255, 69, 19, 4, 255, 63, 19, 5, 255, 63, 18, 5, 255, 56, 19, 2, 255, 61, 24, 5, 255, 65, 20, 2, 255, 62, 18, 1, 255, 59, 15, 2, 255, 60, 13, 2, 255, 57, 18, 2, 255, 52, 17, 3, 255, 44, 13, 3, 255, 45, 23, 29, 255, 14, 22, 144, 255, 4, 8, 46, 255, 14, 3, 0, 255, 15, 5, 9, 255, 15, 5, 5, 255, 14, 3, 4, 255, 15, 6, 8, 255, 11, 2, 1, 255, 11, 4, 2, 255, 11, 3, 1, 255, 13, 3, 2, 255, 12, 4, 2, 255, 12, 5, 2, 255, 15, 5, 4, 255, 16, 6, 5, 255, 16, 6, 5, 255, 16, 6, 4, 255, 18, 6, 5, 255, 21, 8, 7, 255, 17, 6, 2, 255, 18, 6, 2, 255, 24, 10, 4, 255, 25, 11, 7, 255, 23, 13, 9, 255, 21, 11, 7, 255, 22, 11, 4, 255, 27, 17, 6, 255, 27, 13, 5, 255, 29, 13, 6, 255, 29, 15, 7, 255, 27, 15, 5, 255, 31, 16, 7, 255, 28, 16, 10, 255, 28, 17, 10, 255, 34, 16, 5, 255, 33, 16, 2, 255, 31, 17, 7, 255, 29, 17, 6, 255, 41, 23, 6, 255, 38, 19, 3, 255, 37, 23, 4, 255, 40, 24, 4, 255, 44, 28, 9, 255, 37, 26, 2, 255, 43, 27, 4, 255, 48, 27, 6, 255, 50, 33, 2, 255, 54, 34, 2, 255, 63, 38, 0, 255, 57, 37, 3, 255, 58, 37, 3, 255, 90, 56, 11, 255, 83, 46, 4, 255, 70, 42, 1, 255, 64, 44, 5, 255, 59, 44, 1, 255, 54, 39, 6, 255, 63, 44, 2, 255, 84, 56, 4, 255, 121, 78, 12, 255, 159, 89, 9, 255, 151, 84, 7, 255, 105, 57, 4, 255, 83, 54, 1, 255, 84, 64, 3, 255, 120, 85, 6, 255, 187, 132, 11, 255, 198, 141, 2, 255, 189, 131, 3, 255, 184, 130, 3, 255, 152, 98, 1, 255, 98, 56, 10, 255, 77, 46, 4, 255, 77, 42, 0, 255, 70, 49, 4, 255, 68, 48, 1, 255, 74, 49, 4, 255, 66, 46, 6, 255, 64, 45, 4, 255, 70, 50, 3, 255, 76, 49, 1, 255, 82, 50, 5, 255, 75, 48, 2, 255, 78, 47, 4, 255, 79, 43, 1, 255, 77, 45, 4, 255, 75, 46, 6, 255, 79, 49, 5, 255, 78, 45, 2, 255, 73, 43, 8, 255, 78, 41, 6, 255, 80, 42, 4, 255, 69, 41, 4, 255, 79, 45, 6, 255, 72, 43, 6, 255, 72, 44, 6, 255, 66, 45, 1, 255, 81, 46, 3, 255, 86, 47, 4, 255, 74, 44, 4, 255, 77, 44, 0, 255, 93, 45, 2, 255, 86, 46, 5, 255, 80, 43, 2, 255, 82, 43, 5, 255, 82, 42, 3, 255, 87, 46, 5, 255, 77, 46, 2, 255, 83, 44, 6, 255, 87, 42, 6, 255, 82, 42, 6, 255, 80, 41, 7, 255, 86, 43, 7, 255, 83, 44, 1, 255, 82, 41, 1, 255, 85, 43, 2, 255, 84, 39, 6, 255, 90, 38, 6, 255, 90, 50, 5, 255, 109, 64, 6, 255, 150, 80, 5, 255, 171, 87, 10, 255, 174, 91, 11, 255, 180, 97, 7, 255, 170, 88, 0, 255, 176, 95, 4, 255, 178, 99, 9, 255, 184, 101, 7, 255, 176, 93, 1, 255, 178, 95, 2, 255, 197, 113, 7, 255, 198, 111, 6, 255, 204, 116, 5, 255, 202, 118, 1, 255, 202, 122, 8, 255, 208, 123, 18, 255, 209, 122, 10, 255, 208, 126, 4, 255, 204, 123, 0, 255, 207, 119, 9, 255, 205, 119, 22, 255, 198, 109, 27, 255, 200, 114, 14, 255, 198, 113, 7, 255, 193, 109, 11, 255, 198, 117, 7, 255, 198, 118, 5, 255, 198, 118, 14, 255, 200, 118, 15, 255, 200, 115, 18, 255, 198, 113, 6, 255, 202, 120, 12, 255, 182, 101, 8, 255, 165, 78, 14, 255, 197, 114, 8, 255, 199, 116, 14, 255, 179, 89, 10, 255, 194, 108, 13, 255, 189, 104, 17, 255, 196, 115, 22, 255, 207, 132, 8, 255, 206, 128, 17, 255, 210, 131, 13, 255, 213, 132, 13, 255, 206, 120, 9, 255, 205, 119, 14, 255, 204, 125, 5, 255, 208, 128, 8, 255, 209, 129, 13, 255, 204, 122, 5, 255, 199, 112, 9, 255, 210, 125, 15, 255, 216, 131, 15, 255, 212, 130, 9, 255, 211, 131, 15, 255, 209, 133, 14, 255, 212, 137, 3, 255, 204, 123, 14, 255, 203, 120, 11, 255, 215, 132, 15, 255, 213, 137, 18, 255, 212, 143, 30, 255, 212, 141, 12, 255, 212, 143, 5, 255, 213, 142, 10, 255, 196, 118, 8, 255, 180, 103, 16, 255, 207, 138, 13, 255, 216, 149, 17, 255, 213, 147, 15, 255, 221, 152, 25, 255, 218, 151, 16, 255, 223, 155, 14, 255, 220, 149, 11, 255, 205, 135, 8, 255, 210, 143, 15, 255, 215, 151, 11, 255, 197, 127, 12, 255, 181, 104, 21, 255, 183, 118, 11, 255, 205, 152, 13, 255, 206, 151, 9, 255, 205, 150, 12, 255, 215, 164, 8, 255, 215, 157, 4, 255, 216, 163, 11, 255, 228, 179, 7, 255, 217, 159, 4, 255, 218, 160, 3, 255, 217, 163, 17, 255, 203, 146, 7, 255, 204, 141, 6, 255, 210, 151, 1, 255, 202, 141, 8, 255, 204, 143, 8, 255, 217, 167, 3, 255, 219, 175, 8, 255, 204, 148, 12, 255, 179, 111, 13, 255, 210, 155, 14, 255, 212, 161, 9, 255, 208, 148, 8, 255, 210, 150, 1, 255, 215, 155, 6, 255, 220, 164, 1, 255, 220, 164, 5, 255, 207, 148, 7, 255, 223, 168, 6, 255, 220, 169, 4, 255, 225, 173, 6, 255, 225, 171, 5, 255, 218, 164, 1, 255, 219, 163, 2, 255, 216, 161, 1, 255, 217, 162, 2, 255, 218, 165, 5, 255, 224, 171, 1, 255, 223, 170, 2, 255, 223, 170, 3, 255, 225, 173, 3, 255, 224, 173, 2, 255, 223, 172, 2, 255, 221, 170, 6, 255, 222, 169, 10, 255, 220, 169, 7, 255, 208, 154, 4, 255, 192, 133, 10, 255, 187, 122, 13, 255, 194, 132, 1, 255, 201, 142, 4, 255, 216, 161, 8, 255, 216, 167, 4, 255, 220, 175, 10, 255, 215, 171, 6, 255, 217, 170, 7, 255, 210, 158, 4, 255, 207, 151, 4, 255, 209, 156, 4, 255, 201, 145, 8, 255, 207, 145, 7, 255, 210, 150, 4, 255, 210, 150, 5, 255, 208, 144, 12, 255, 208, 146, 10, 255, 208, 147, 1, 255, 206, 139, 6, 255, 207, 138, 9, 255, 210, 142, 10, 255, 209, 142, 11, 255, 203, 135, 9, 255, 202, 132, 4, 255, 206, 137, 8, 255, 209, 140, 14, 255, 208, 142, 10, 255, 209, 138, 20, 255, 201, 125, 19, 255, 199, 121, 2, 255, 203, 124, 9, 255, 201, 124, 7, 255, 197, 118, 12, 255, 200, 121, 10, 255, 202, 120, 9, 255, 190, 107, 3, 255, 183, 98, 3, 255, 185, 101, 2, 255, 179, 95, 6, 255, 177, 95, 4, 255, 185, 102, 5, 255, 182, 104, 7, 255, 179, 102, 9, 255, 167, 89, 1, 255, 172, 90, 2, 255, 176, 93, 7, 255, 179, 88, 5, 255, 175, 82, 1, 255, 164, 76, 10, 255, 153, 68, 5, 255, 144, 62, 1, 255, 136, 58, 6, 255, 125, 49, 6, 255, 115, 43, 7, 255, 121, 45, 4, 255, 115, 44, 2, 255, 106, 36, 0, 255, 102, 39, 3, 255, 111, 46, 2, 255, 115, 44, 4, 255, 116, 41, 3, 255, 117, 47, 3, 255, 117, 42, 2, 255, 117, 40, 6, 255, 121, 52, 5, 255, 127, 55, 0, 255, 119, 48, 2, 255, 112, 42, 10, 255, 102, 40, 5, 255, 101, 46, 6, 255, 121, 56, 6, 255, 154, 85, 2, 255, 168, 94, 8, 255, 171, 93, 9, 255, 173, 89, 1, 255, 176, 91, 2, 255, 174, 93, 6, 255, 169, 90, 3, 255, 171, 92, 1, 255, 173, 89, 5, 255, 176, 90, 2, 255, 179, 94, 2, 255, 178, 93, 3, 255, 179, 91, 2, 255, 182, 94, 1, 255, 181, 95, 2, 255, 179, 93, 1, 255, 181, 94, 2, 255, 184, 96, 2, 255, 184, 92, 0, 255, 183, 89, 0, 255, 182, 95, 0, 255, 181, 95, 1, 255, 181, 95, 4, 255, 180, 92, 3, 255, 177, 88, 1, 255, 181, 92, 4, 255, 184, 94, 6, 255, 180, 89, 1, 255, 177, 88, 2, 255, 169, 83, 8, 255, 154, 74, 4, 255, 134, 61, 0, 255, 116, 51, 6, 255, 110, 51, 4, 255, 107, 41, 2, 255, 101, 40, 4, 255, 95, 30, 3, 255, 88, 29, 2, 255, 83, 30, 0, 255, 79, 26, 6, 255, 69, 22, 6, 255, 68, 26, 1, 255, 78, 29, 0, 255, 86, 25, 1, 255, 76, 25, 3, 255, 72, 32, 2, 255, 74, 25, 1, 255, 66, 23, 7, 255, 69, 22, 4, 255, 64, 18, 5, 255, 47, 12, 6, 255, 45, 15, 3, 255, 51, 18, 2, 255, 52, 20, 3, 255, 60, 24, 3, 255, 70, 23, 2, 255, 77, 24, 3, 255, 75, 24, 4, 255, 73, 24, 4, 255, 80, 24, 5, 255, 84, 27, 1, 255, 86, 35, 2, 255, 85, 32, 2, 255, 84, 29, 4, 255, 82, 30, 3, 255, 85, 33, 4, 255, 74, 30, 2, 255, 70, 23, 2, 255, 75, 22, 4, 255, 73, 23, 5, 255, 69, 20, 0, 255, 69, 20, 1, 255, 64, 21, 1, 255, 72, 25, 4, 255, 82, 25, 5, 255, 75, 22, 0, 255, 68, 21, 0, 255, 68, 21, 2, 255, 60, 17, 1, 255, 59, 17, 3, 255, 55, 16, 5, 255, 11, 26, 141, 255, 2, 4, 60, 255, 5, 2, 0, 255, 6, 4, 3, 255, 17, 3, 17, 255, 18, 3, 11, 255, 11, 5, 2, 255, 14, 6, 6, 255, 16, 6, 7, 255, 17, 5, 6, 255, 12, 2, 2, 255, 11, 6, 3, 255, 10, 6, 3, 255, 13, 4, 3, 255, 14, 3, 3, 255, 16, 5, 4, 255, 15, 5, 4, 255, 16, 6, 4, 255, 17, 6, 4, 255, 18, 6, 5, 255, 16, 5, 2, 255, 18, 8, 3, 255, 22, 10, 3, 255, 23, 9, 4, 255, 23, 11, 7, 255, 24, 13, 9, 255, 25, 12, 8, 255, 22, 12, 8, 255, 21, 8, 7, 255, 28, 11, 12, 255, 33, 14, 15, 255, 28, 12, 9, 255, 29, 16, 9, 255, 27, 15, 9, 255, 31, 17, 10, 255, 37, 20, 9, 255, 32, 17, 3, 255, 32, 16, 5, 255, 31, 18, 7, 255, 36, 23, 6, 255, 34, 20, 3, 255, 37, 21, 3, 255, 42, 26, 4, 255, 37, 21, 3, 255, 42, 29, 3, 255, 43, 30, 4, 255, 61, 30, 1, 255, 65, 37, 0, 255, 62, 39, 0, 255, 66, 40, 0, 255, 57, 35, 3, 255, 69, 44, 3, 255, 85, 49, 3, 255, 63, 45, 6, 255, 61, 50, 4, 255, 84, 52, 8, 255, 95, 55, 2, 255, 115, 72, 9, 255, 150, 88, 14, 255, 174, 92, 12, 255, 161, 87, 8, 255, 124, 67, 3, 255, 98, 58, 0, 255, 95, 57, 7, 255, 100, 58, 8, 255, 119, 78, 4, 255, 179, 124, 15, 255, 197, 134, 3, 255, 195, 137, 2, 255, 192, 136, 3, 255, 161, 103, 5, 255, 106, 56, 1, 255, 77, 49, 4, 255, 74, 50, 5, 255, 70, 50, 4, 255, 61, 48, 7, 255, 70, 42, 2, 255, 81, 48, 4, 255, 74, 48, 6, 255, 62, 47, 5, 255, 78, 50, 5, 255, 83, 46, 6, 255, 83, 49, 6, 255, 78, 45, 1, 255, 76, 44, 3, 255, 78, 45, 5, 255, 76, 43, 3, 255, 76, 44, 4, 255, 73, 44, 9, 255, 70, 42, 7, 255, 72, 46, 4, 255, 71, 43, 2, 255, 71, 41, 1, 255, 67, 44, 1, 255, 70, 44, 3, 255, 72, 42, 2, 255, 76, 43, 2, 255, 79, 48, 6, 255, 87, 44, 1, 255, 87, 45, 2, 255, 81, 45, 5, 255, 78, 46, 4, 255, 89, 43, 4, 255, 88, 45, 5, 255, 81, 41, 4, 255, 84, 43, 5, 255, 85, 42, 3, 255, 83, 41, 2, 255, 76, 44, 4, 255, 72, 44, 1, 255, 82, 41, 7, 255, 78, 44, 2, 255, 74, 42, 1, 255, 79, 42, 4, 255, 74, 44, 2, 255, 93, 48, 9, 255, 89, 46, 4, 255, 76, 45, 3, 255, 90, 48, 2, 255, 85, 46, 5, 255, 69, 41, 4, 255, 86, 45, 5, 255, 99, 49, 6, 255, 119, 61, 10, 255, 135, 64, 6, 255, 164, 88, 3, 255, 173, 97, 2, 255, 163, 85, 2, 255, 164, 87, 1, 255, 174, 95, 7, 255, 185, 103, 2, 255, 186, 104, 4, 255, 193, 108, 7, 255, 192, 107, 10, 255, 200, 118, 16, 255, 199, 116, 10, 255, 199, 115, 4, 255, 202, 119, 5, 255, 201, 115, 16, 255, 200, 113, 11, 255, 208, 120, 12, 255, 206, 118, 16, 255, 203, 119, 4, 255, 199, 116, 6, 255, 182, 99, 9, 255, 184, 100, 7, 255, 201, 119, 7, 255, 203, 119, 13, 255, 200, 121, 10, 255, 203, 125, 13, 255, 205, 121, 9, 255, 208, 123, 2, 255, 183, 99, 15, 255, 153, 70, 4, 255, 173, 93, 10, 255, 200, 116, 14, 255, 195, 100, 15, 255, 202, 111, 14, 255, 212, 130, 13, 255, 200, 119, 10, 255, 208, 119, 9, 255, 202, 113, 12, 255, 203, 112, 13, 255, 191, 99, 7, 255, 201, 108, 16, 255, 213, 121, 9, 255, 197, 109, 9, 255, 207, 129, 6, 255, 203, 126, 9, 255, 200, 120, 13, 255, 206, 125, 7, 255, 210, 131, 10, 255, 214, 137, 7, 255, 212, 132, 7, 255, 204, 124, 7, 255, 195, 117, 14, 255, 194, 118, 8, 255, 208, 133, 9, 255, 207, 126, 12, 255, 192, 113, 16, 255, 191, 111, 15, 255, 209, 131, 19, 255, 212, 138, 15, 255, 208, 135, 14, 255, 206, 139, 6, 255, 203, 142, 5, 255, 204, 145, 8, 255, 202, 138, 21, 255, 206, 135, 22, 255, 208, 144, 9, 255, 206, 149, 9, 255, 208, 150, 14, 255, 214, 150, 7, 255, 217, 146, 0, 255, 202, 124, 7, 255, 196, 125, 15, 255, 204, 145, 4, 255, 217, 157, 7, 255, 204, 135, 13, 255, 187, 110, 7, 255, 204, 143, 9, 255, 209, 157, 9, 255, 214, 157, 3, 255, 216, 160, 5, 255, 217, 161, 10, 255, 218, 164, 4, 255, 220, 165, 8, 255, 229, 177, 7, 255, 217, 160, 17, 255, 210, 154, 13, 255, 217, 163, 14, 255, 210, 156, 8, 255, 201, 147, 2, 255, 207, 153, 9, 255, 208, 149, 14, 255, 209, 155, 2, 255, 215, 166, 7, 255, 216, 167, 1, 255, 208, 154, 5, 255, 196, 144, 3, 255, 210, 159, 2, 255, 203, 150, 10, 255, 198, 146, 14, 255, 201, 149, 13, 255, 206, 149, 8, 255, 207, 153, 0, 255, 208, 151, 7, 255, 203, 144, 7, 255, 215, 160, 1, 255, 218, 168, 4, 255, 218, 165, 6, 255, 219, 162, 6, 255, 217, 161, 4, 255, 216, 159, 7, 255, 210, 152, 10, 255, 216, 159, 6, 255, 222, 170, 0, 255, 224, 171, 1, 255, 224, 171, 3, 255, 224, 172, 3, 255, 225, 174, 3, 255, 222, 171, 3, 255, 218, 167, 3, 255, 219, 170, 9, 255, 220, 168, 7, 255, 223, 169, 8, 255, 207, 151, 6, 255, 205, 153, 4, 255, 197, 143, 3, 255, 192, 137, 2, 255, 207, 152, 5, 255, 214, 160, 4, 255, 216, 167, 2, 255, 219, 175, 7, 255, 216, 172, 7, 255, 215, 168, 8, 255, 212, 156, 3, 255, 210, 149, 2, 255, 205, 148, 0, 255, 206, 149, 9, 255, 216, 154, 9, 255, 213, 150, 6, 255, 206, 146, 4, 255, 209, 149, 14, 255, 211, 151, 11, 255, 210, 149, 5, 255, 207, 142, 3, 255, 209, 142, 4, 255, 212, 144, 10, 255, 205, 137, 8, 255, 206, 138, 7, 255, 209, 141, 2, 255, 209, 141, 4, 255, 208, 138, 11, 255, 208, 139, 15, 255, 205, 137, 5, 255, 208, 133, 9, 255, 205, 127, 10, 255, 206, 128, 14, 255, 201, 126, 6, 255, 194, 114, 6, 255, 179, 94, 7, 255, 177, 93, 4, 255, 185, 101, 2, 255, 187, 102, 5, 255, 186, 102, 1, 255, 184, 101, 2, 255, 188, 106, 9, 255, 190, 106, 8, 255, 186, 107, 6, 255, 182, 104, 1, 255, 184, 104, 2, 255, 179, 96, 2, 255, 176, 92, 4, 255, 172, 86, 8, 255, 179, 92, 3, 255, 165, 74, 8, 255, 139, 48, 7, 255, 135, 55, 2, 255, 126, 50, 0, 255, 118, 41, 5, 255, 122, 49, 6, 255, 122, 45, 5, 255, 111, 40, 0, 255, 110, 44, 4, 255, 104, 40, 4, 255, 112, 46, 1, 255, 106, 46, 2, 255, 107, 45, 5, 255, 101, 42, 5, 255, 105, 45, 1, 255, 106, 43, 1, 255, 102, 41, 3, 255, 108, 47, 2, 255, 112, 51, 2, 255, 110, 47, 2, 255, 108, 50, 3, 255, 106, 47, 3, 255, 119, 48, 5, 255, 156, 76, 1, 255, 166, 86, 3, 255, 170, 88, 13, 255, 172, 92, 7, 255, 171, 96, 1, 255, 172, 94, 11, 255, 172, 87, 6, 255, 172, 88, 2, 255, 174, 90, 4, 255, 176, 90, 1, 255, 175, 91, 0, 255, 176, 91, 2, 255, 178, 92, 2, 255, 181, 94, 1, 255, 179, 94, 2, 255, 179, 95, 4, 255, 177, 94, 2, 255, 179, 93, 1, 255, 182, 94, 1, 255, 181, 92, 0, 255, 179, 92, 1, 255, 177, 92, 1, 255, 177, 93, 3, 255, 178, 93, 2, 255, 176, 88, 0, 255, 178, 88, 1, 255, 179, 89, 3, 255, 177, 87, 2, 255, 179, 86, 0, 255, 184, 83, 3, 255, 180, 81, 3, 255, 158, 71, 0, 255, 145, 64, 10, 255, 126, 51, 3, 255, 115, 42, 2, 255, 106, 42, 4, 255, 103, 40, 1, 255, 97, 38, 1, 255, 92, 31, 5, 255, 76, 24, 6, 255, 61, 19, 2, 255, 71, 26, 4, 255, 83, 29, 6, 255, 85, 27, 5, 255, 82, 24, 5, 255, 79, 23, 4, 255, 79, 29, 8, 255, 80, 25, 5, 255, 79, 29, 2, 255, 83, 28, 2, 255, 78, 24, 2, 255, 66, 27, 3, 255, 59, 23, 3, 255, 61, 22, 5, 255, 61, 21, 4, 255, 56, 16, 2, 255, 60, 16, 2, 255, 62, 18, 2, 255, 66, 18, 4, 255, 74, 21, 5, 255, 75, 23, 0, 255, 75, 30, 2, 255, 77, 29, 2, 255, 84, 26, 1, 255, 95, 34, 1, 255, 92, 38, 1, 255, 87, 35, 1, 255, 81, 32, 2, 255, 73, 27, 1, 255, 70, 22, 1, 255, 74, 24, 1, 255, 75, 27, 5, 255, 71, 21, 1, 255, 76, 21, 1, 255, 88, 29, 4, 255, 89, 28, 2, 255, 84, 27, 0, 255, 83, 31, 2, 255, 79, 24, 1, 255, 78, 23, 1, 255, 77, 23, 3, 255, 3, 9, 60, 255, 1, 1, 0, 255, 6, 2, 3, 255, 7, 1, 0, 255, 12, 2, 6, 255, 18, 6, 10, 255, 16, 6, 6, 255, 12, 3, 5, 255, 11, 4, 4, 255, 7, 2, 2, 255, 8, 3, 1, 255, 11, 3, 1, 255, 11, 4, 2, 255, 13, 2, 2, 255, 17, 4, 5, 255, 18, 6, 6, 255, 14, 4, 3, 255, 16, 6, 4, 255, 18, 7, 5, 255, 18, 5, 7, 255, 13, 3, 1, 255, 15, 8, 2, 255, 22, 10, 4, 255, 24, 9, 2, 255, 25, 11, 5, 255, 27, 12, 7, 255, 24, 12, 4, 255, 22, 15, 7, 255, 20, 13, 11, 255, 20, 11, 10, 255, 20, 12, 9, 255, 22, 18, 9, 255, 22, 15, 11, 255, 33, 18, 11, 255, 35, 19, 8, 255, 33, 19, 9, 255, 25, 16, 4, 255, 35, 16, 3, 255, 34, 19, 7, 255, 30, 22, 4, 255, 32, 24, 5, 255, 35, 19, 4, 255, 38, 24, 6, 255, 37, 23, 4, 255, 44, 23, 1, 255, 46, 28, 2, 255, 44, 30, 4, 255, 42, 28, 5, 255, 38, 31, 3, 255, 49, 35, 4, 255, 84, 45, 3, 255, 109, 65, 17, 255, 122, 76, 12, 255, 136, 82, 13, 255, 157, 89, 17, 255, 163, 92, 18, 255, 162, 95, 17, 255, 154, 87, 10, 255, 128, 69, 4, 255, 101, 61, 2, 255, 90, 55, 3, 255, 87, 50, 6, 255, 87, 53, 13, 255, 98, 50, 4, 255, 86, 61, 6, 255, 171, 124, 4, 255, 197, 141, 2, 255, 187, 133, 3, 255, 194, 140, 1, 255, 178, 118, 3, 255, 120, 71, 5, 255, 81, 51, 3, 255, 69, 50, 1, 255, 71, 46, 2, 255, 69, 43, 4, 255, 68, 47, 4, 255, 72, 46, 1, 255, 74, 50, 1, 255, 68, 46, 5, 255, 74, 47, 5, 255, 72, 48, 4, 255, 70, 44, 1, 255, 75, 45, 4, 255, 74, 45, 1, 255, 74, 47, 3, 255, 70, 44, 4, 255, 72, 41, 2, 255, 80, 47, 0, 255, 76, 45, 4, 255, 80, 47, 9, 255, 72, 42, 1, 255, 68, 42, 3, 255, 74, 39, 5, 255, 68, 40, 3, 255, 69, 41, 3, 255, 79, 43, 6, 255, 83, 46, 3, 255, 85, 43, 2, 255, 80, 42, 8, 255, 82, 44, 2, 255, 86, 46, 2, 255, 88, 44, 3, 255, 77, 42, 1, 255, 78, 42, 1, 255, 73, 38, 2, 255, 78, 43, 2, 255, 82, 46, 2, 255, 73, 40, 1, 255, 82, 45, 6, 255, 80, 45, 2, 255, 78, 46, 4, 255, 78, 43, 1, 255, 79, 44, 3, 255, 70, 39, 4, 255, 82, 44, 2, 255, 80, 44, 2, 255, 78, 42, 4, 255, 78, 46, 4, 255, 76, 46, 7, 255, 74, 44, 2, 255, 83, 48, 2, 255, 81, 38, 3, 255, 83, 44, 4, 255, 80, 46, 1, 255, 81, 46, 3, 255, 94, 51, 8, 255, 119, 64, 3, 255, 141, 76, 4, 255, 153, 78, 9, 255, 156, 77, 8, 255, 167, 85, 1, 255, 175, 92, 2, 255, 184, 101, 5, 255, 179, 98, 13, 255, 190, 108, 10, 255, 195, 107, 4, 255, 194, 107, 7, 255, 186, 106, 3, 255, 194, 109, 13, 255, 200, 113, 5, 255, 203, 116, 3, 255, 200, 109, 7, 255, 200, 111, 17, 255, 196, 111, 20, 255, 193, 111, 13, 255, 202, 121, 10, 255, 199, 114, 14, 255, 189, 104, 15, 255, 203, 118, 25, 255, 210, 126, 6, 255, 208, 121, 11, 255, 190, 102, 9, 255, 167, 78, 9, 255, 193, 110, 19, 255, 211, 133, 21, 255, 210, 131, 18, 255, 196, 117, 11, 255, 199, 119, 15, 255, 211, 133, 11, 255, 205, 127, 18, 255, 197, 115, 5, 255, 198, 114, 6, 255, 208, 122, 27, 255, 198, 111, 11, 255, 184, 95, 4, 255, 199, 112, 10, 255, 207, 121, 20, 255, 215, 137, 11, 255, 208, 131, 13, 255, 209, 129, 23, 255, 213, 133, 12, 255, 201, 124, 2, 255, 210, 134, 20, 255, 203, 127, 7, 255, 201, 125, 10, 255, 201, 125, 18, 255, 202, 129, 13, 255, 204, 128, 11, 255, 197, 116, 14, 255, 203, 125, 20, 255, 199, 128, 8, 255, 202, 133, 9, 255, 209, 139, 8, 255, 208, 141, 19, 255, 206, 138, 23, 255, 210, 138, 20, 255, 210, 139, 17, 255, 211, 142, 9, 255, 204, 132, 13, 255, 212, 140, 12, 255, 208, 135, 9, 255, 192, 116, 10, 255, 192, 117, 11, 255, 188, 115, 6, 255, 183, 107, 16, 255, 196, 126, 10, 255, 201, 138, 9, 255, 207, 151, 8, 255, 211, 150, 12, 255, 185, 111, 9, 255, 199, 139, 16, 255, 209, 159, 7, 255, 205, 146, 4, 255, 207, 150, 10, 255, 212, 157, 8, 255, 209, 156, 5, 255, 214, 161, 9, 255, 214, 162, 4, 255, 211, 161, 11, 255, 210, 163, 1, 255, 214, 162, 9, 255, 205, 150, 10, 255, 203, 156, 13, 255, 209, 161, 4, 255, 210, 152, 4, 255, 209, 157, 5, 255, 211, 162, 13, 255, 211, 157, 0, 255, 211, 157, 6, 255, 205, 162, 8, 255, 205, 158, 2, 255, 206, 156, 7, 255, 211, 164, 6, 255, 205, 157, 3, 255, 209, 160, 1, 255, 211, 161, 5, 255, 217, 164, 10, 255, 205, 147, 2, 255, 197, 136, 10, 255, 216, 162, 12, 255, 215, 160, 10, 255, 211, 152, 6, 255, 210, 153, 2, 255, 212, 155, 3, 255, 223, 168, 8, 255, 222, 170, 2, 255, 223, 173, 3, 255, 223, 172, 2, 255, 223, 172, 4, 255, 225, 175, 5, 255, 223, 172, 2, 255, 222, 171, 5, 255, 214, 161, 3, 255, 224, 174, 12, 255, 220, 170, 1, 255, 224, 171, 3, 255, 215, 162, 4, 255, 209, 159, 2, 255, 190, 140, 9, 255, 192, 142, 8, 255, 211, 161, 5, 255, 207, 155, 0, 255, 216, 167, 4, 255, 218, 175, 2, 255, 215, 171, 4, 255, 211, 163, 8, 255, 211, 155, 7, 255, 200, 139, 6, 255, 197, 140, 1, 255, 198, 142, 17, 255, 210, 152, 8, 255, 208, 152, 0, 255, 203, 146, 2, 255, 213, 156, 9, 255, 211, 153, 5, 255, 212, 150, 12, 255, 210, 145, 5, 255, 208, 141, 0, 255, 209, 139, 10, 255, 208, 141, 2, 255, 209, 141, 5, 255, 211, 144, 4, 255, 211, 143, 6, 255, 206, 136, 13, 255, 203, 131, 9, 255, 205, 136, 6, 255, 206, 132, 11, 255, 211, 132, 14, 255, 205, 129, 7, 255, 201, 127, 0, 255, 199, 119, 6, 255, 190, 108, 8, 255, 175, 92, 9, 255, 181, 96, 9, 255, 176, 90, 7, 255, 182, 97, 10, 255, 190, 108, 6, 255, 190, 109, 1, 255, 188, 105, 3, 255, 183, 101, 3, 255, 181, 98, 3, 255, 181, 97, 5, 255, 174, 89, 2, 255, 174, 95, 4, 255, 173, 90, 10, 255, 168, 81, 5, 255, 148, 60, 6, 255, 128, 50, 5, 255, 118, 50, 8, 255, 115, 47, 9, 255, 115, 43, 1, 255, 113, 43, 4, 255, 113, 38, 8, 255, 113, 35, 1, 255, 115, 46, 5, 255, 105, 40, 3, 255, 104, 39, 0, 255, 100, 38, 0, 255, 94, 36, 5, 255, 97, 37, 4, 255, 98, 38, 4, 255, 104, 40, 6, 255, 107, 43, 2, 255, 107, 47, 3, 255, 110, 45, 3, 255, 112, 43, 3, 255, 104, 41, 2, 255, 102, 41, 6, 255, 104, 44, 6, 255, 142, 69, 8, 255, 165, 88, 4, 255, 166, 88, 7, 255, 172, 95, 5, 255, 174, 96, 3, 255, 173, 92, 6, 255, 171, 92, 6, 255, 169, 87, 4, 255, 173, 88, 2, 255, 176, 91, 0, 255, 178, 94, 3, 255, 177, 94, 2, 255, 176, 92, 0, 255, 177, 93, 2, 255, 177, 93, 1, 255, 180, 96, 3, 255, 178, 95, 2, 255, 175, 93, 0, 255, 176, 92, 1, 255, 180, 95, 4, 255, 177, 90, 2, 255, 178, 91, 2, 255, 177, 90, 2, 255, 177, 88, 0, 255, 180, 90, 2, 255, 179, 89, 0, 255, 176, 82, 3, 255, 171, 76, 7, 255, 156, 65, 1, 255, 140, 52, 1, 255, 130, 45, 5, 255, 126, 46, 8, 255, 114, 38, 2, 255, 106, 33, 1, 255, 113, 38, 4, 255, 116, 41, 3, 255, 112, 37, 1, 255, 106, 37, 2, 255, 99, 34, 4, 255, 79, 25, 3, 255, 70, 25, 2, 255, 67, 22, 2, 255, 73, 26, 6, 255, 78, 29, 3, 255, 79, 32, 1, 255, 82, 33, 6, 255, 82, 29, 2, 255, 74, 25, 0, 255, 73, 25, 2, 255, 74, 24, 3, 255, 73, 24, 4, 255, 60, 23, 4, 255, 60, 21, 1, 255, 61, 18, 0, 255, 58, 16, 2, 255, 53, 17, 5, 255, 49, 16, 1, 255, 60, 18, 2, 255, 66, 23, 5, 255, 64, 20, 1, 255, 75, 22, 2, 255, 76, 24, 3, 255, 75, 20, 1, 255, 89, 30, 4, 255, 98, 39, 4, 255, 91, 36, 3, 255, 96, 32, 4, 255, 93, 35, 5, 255, 79, 31, 0, 255, 75, 25, 2, 255, 73, 21, 3, 255, 67, 17, 2, 255, 73, 21, 4, 255, 79, 25, 6, 255, 77, 26, 2, 255, 85, 27, 3, 255, 87, 30, 4, 255, 83, 31, 2, 255, 91, 28, 5, 255, 92, 27, 3, 255, 93, 27, 3, 255, 3, 0, 0, 255, 7, 0, 0, 255, 7, 0, 0, 255, 2, 1, 0, 255, 3, 2, 0, 255, 16, 5, 6, 255, 24, 7, 13, 255, 16, 2, 9, 255, 10, 2, 4, 255, 10, 3, 2, 255, 16, 5, 6, 255, 13, 2, 4, 255, 10, 1, 3, 255, 9, 1, 2, 255, 15, 5, 5, 255, 15, 5, 3, 255, 17, 6, 4, 255, 15, 4, 2, 255, 19, 8, 7, 255, 19, 3, 3, 255, 15, 7, 4, 255, 12, 7, 3, 255, 18, 6, 3, 255, 16, 8, 0, 255, 19, 10, 2, 255, 22, 12, 3, 255, 23, 14, 7, 255, 24, 15, 7, 255, 21, 10, 7, 255, 25, 15, 15, 255, 23, 13, 10, 255, 23, 14, 6, 255, 26, 16, 11, 255, 29, 15, 6, 255, 34, 17, 5, 255, 36, 21, 10, 255, 37, 22, 9, 255, 40, 22, 4, 255, 35, 21, 5, 255, 26, 21, 6, 255, 40, 27, 5, 255, 55, 32, 5, 255, 54, 33, 4, 255, 61, 38, 10, 255, 63, 38, 8, 255, 72, 44, 10, 255, 79, 53, 9, 255, 93, 66, 9, 255, 118, 76, 17, 255, 143, 82, 22, 255, 154, 94, 13, 255, 152, 90, 16, 255, 135, 82, 8, 255, 124, 78, 4, 255, 114, 72, 12, 255, 94, 60, 6, 255, 74, 56, 5, 255, 56, 44, 4, 255, 53, 39, 5, 255, 61, 49, 2, 255, 61, 51, 0, 255, 64, 51, 2, 255, 67, 52, 8, 255, 69, 51, 2, 255, 132, 99, 4, 255, 197, 147, 7, 255, 205, 155, 0, 255, 203, 156, 7, 255, 183, 129, 2, 255, 153, 86, 4, 255, 101, 54, 8, 255, 71, 47, 1, 255, 67, 48, 4, 255, 71, 46, 4, 255, 71, 44, 1, 255, 73, 46, 2, 255, 79, 48, 6, 255, 71, 47, 5, 255, 72, 48, 2, 255, 75, 45, 1, 255, 60, 47, 1, 255, 66, 43, 3, 255, 72, 43, 5, 255, 69, 46, 0, 255, 66, 45, 3, 255, 71, 46, 5, 255, 70, 43, 3, 255, 77, 43, 1, 255, 75, 42, 3, 255, 78, 44, 3, 255, 71, 43, 0, 255, 69, 43, 2, 255, 75, 42, 5, 255, 78, 37, 5, 255, 78, 40, 4, 255, 72, 43, 3, 255, 79, 45, 1, 255, 83, 45, 2, 255, 79, 46, 2, 255, 83, 42, 0, 255, 87, 44, 3, 255, 79, 45, 1, 255, 77, 42, 2, 255, 75, 38, 3, 255, 77, 45, 4, 255, 78, 44, 2, 255, 81, 44, 3, 255, 80, 45, 1, 255, 83, 49, 2, 255, 84, 47, 4, 255, 82, 41, 3, 255, 88, 45, 3, 255, 85, 45, 3, 255, 84, 44, 4, 255, 82, 45, 2, 255, 79, 46, 1, 255, 81, 46, 4, 255, 80, 45, 3, 255, 78, 46, 3, 255, 76, 44, 3, 255, 83, 46, 5, 255, 84, 42, 0, 255, 86, 46, 5, 255, 84, 46, 4, 255, 83, 50, 0, 255, 81, 49, 4, 255, 78, 41, 5, 255, 83, 40, 3, 255, 97, 52, 6, 255, 106, 58, 3, 255, 121, 63, 4, 255, 142, 75, 6, 255, 156, 83, 3, 255, 155, 79, 3, 255, 170, 92, 8, 255, 182, 98, 6, 255, 182, 98, 8, 255, 178, 99, 0, 255, 196, 109, 11, 255, 201, 110, 13, 255, 202, 117, 2, 255, 199, 111, 8, 255, 195, 109, 10, 255, 198, 114, 13, 255, 201, 121, 5, 255, 203, 124, 10, 255, 197, 116, 11, 255, 198, 121, 15, 255, 205, 124, 17, 255, 204, 120, 9, 255, 183, 90, 9, 255, 179, 84, 7, 255, 150, 54, 5, 255, 191, 105, 6, 255, 214, 131, 13, 255, 209, 128, 12, 255, 209, 131, 9, 255, 211, 135, 4, 255, 212, 133, 17, 255, 213, 133, 15, 255, 217, 135, 13, 255, 216, 134, 9, 255, 212, 130, 20, 255, 195, 114, 7, 255, 188, 105, 8, 255, 196, 111, 16, 255, 210, 127, 15, 255, 214, 131, 17, 255, 207, 129, 8, 255, 206, 125, 14, 255, 209, 127, 15, 255, 199, 119, 6, 255, 207, 131, 20, 255, 207, 133, 19, 255, 199, 124, 11, 255, 205, 127, 14, 255, 210, 130, 5, 255, 206, 125, 2, 255, 204, 125, 21, 255, 203, 128, 16, 255, 201, 125, 8, 255, 196, 123, 17, 255, 201, 133, 5, 255, 205, 138, 2, 255, 207, 138, 13, 255, 203, 136, 10, 255, 205, 136, 13, 255, 204, 132, 12, 255, 191, 124, 12, 255, 198, 120, 11, 255, 191, 115, 11, 255, 184, 108, 17, 255, 187, 109, 10, 255, 185, 121, 19, 255, 190, 125, 15, 255, 186, 109, 10, 255, 194, 126, 9, 255, 204, 146, 11, 255, 208, 151, 15, 255, 203, 143, 9, 255, 193, 125, 4, 255, 201, 147, 5, 255, 207, 152, 6, 255, 204, 142, 1, 255, 205, 144, 3, 255, 204, 150, 5, 255, 201, 150, 1, 255, 208, 159, 6, 255, 212, 166, 7, 255, 217, 173, 1, 255, 213, 158, 11, 255, 204, 147, 10, 255, 206, 158, 2, 255, 202, 150, 2, 255, 203, 141, 14, 255, 211, 152, 8, 255, 208, 151, 4, 255, 200, 140, 4, 255, 200, 143, 8, 255, 197, 138, 11, 255, 192, 133, 13, 255, 186, 129, 7, 255, 182, 122, 10, 255, 179, 116, 7, 255, 174, 113, 8, 255, 167, 107, 7, 255, 162, 101, 13, 255, 169, 112, 5, 255, 185, 124, 10, 255, 202, 135, 18, 255, 205, 143, 16, 255, 204, 144, 9, 255, 206, 145, 2, 255, 206, 146, 6, 255, 215, 160, 3, 255, 220, 167, 2, 255, 221, 165, 0, 255, 220, 166, 6, 255, 222, 169, 5, 255, 222, 171, 0, 255, 226, 175, 3, 255, 218, 166, 3, 255, 221, 168, 6, 255, 222, 175, 6, 255, 221, 174, 0, 255, 225, 173, 1, 255, 215, 163, 7, 255, 206, 157, 4, 255, 213, 163, 12, 255, 209, 160, 5, 255, 210, 161, 5, 255, 206, 157, 1, 255, 210, 162, 10, 255, 221, 174, 12, 255, 219, 174, 3, 255, 209, 162, 6, 255, 207, 156, 6, 255, 204, 149, 3, 255, 189, 126, 1, 255, 199, 134, 14, 255, 212, 154, 12, 255, 211, 154, 5, 255, 207, 149, 5, 255, 211, 156, 1, 255, 210, 152, 9, 255, 207, 144, 10, 255, 212, 148, 4, 255, 199, 129, 5, 255, 190, 117, 4, 255, 204, 136, 1, 255, 211, 143, 9, 255, 210, 143, 7, 255, 210, 145, 4, 255, 209, 140, 17, 255, 207, 138, 9, 255, 208, 139, 10, 255, 207, 135, 16, 255, 206, 135, 8, 255, 204, 132, 5, 255, 204, 129, 9, 255, 198, 123, 4, 255, 193, 115, 0, 255, 185, 101, 7, 255, 184, 100, 9, 255, 186, 105, 9, 255, 184, 103, 5, 255, 189, 107, 6, 255, 188, 107, 3, 255, 188, 104, 4, 255, 176, 99, 4, 255, 177, 98, 3, 255, 180, 93, 3, 255, 179, 92, 3, 255, 174, 101, 1, 255, 177, 93, 5, 255, 157, 75, 8, 255, 128, 57, 4, 255, 132, 53, 5, 255, 125, 50, 4, 255, 116, 48, 1, 255, 123, 52, 7, 255, 106, 40, 2, 255, 101, 38, 5, 255, 98, 38, 5, 255, 102, 43, 2, 255, 102, 44, 0, 255, 99, 43, 2, 255, 109, 46, 3, 255, 106, 45, 8, 255, 103, 44, 5, 255, 97, 40, 3, 255, 113, 44, 4, 255, 128, 58, 4, 255, 137, 60, 5, 255, 131, 54, 4, 255, 127, 53, 5, 255, 120, 50, 0, 255, 110, 43, 6, 255, 97, 33, 5, 255, 114, 55, 7, 255, 164, 86, 3, 255, 166, 86, 2, 255, 165, 92, 8, 255, 169, 91, 3, 255, 175, 95, 6, 255, 172, 93, 5, 255, 172, 88, 4, 255, 174, 89, 4, 255, 178, 90, 3, 255, 178, 90, 3, 255, 179, 93, 4, 255, 178, 93, 2, 255, 176, 94, 1, 255, 174, 93, 0, 255, 179, 94, 1, 255, 177, 93, 1, 255, 178, 95, 1, 255, 175, 91, 1, 255, 177, 89, 4, 255, 175, 90, 2, 255, 175, 92, 3, 255, 173, 90, 1, 255, 175, 88, 2, 255, 180, 86, 5, 255, 178, 80, 8, 255, 167, 70, 8, 255, 145, 53, 4, 255, 126, 40, 2, 255, 117, 41, 2, 255, 113, 42, 3, 255, 115, 43, 4, 255, 116, 41, 4, 255, 108, 37, 1, 255, 106, 40, 3, 255, 109, 43, 2, 255, 105, 32, 2, 255, 107, 34, 6, 255, 97, 34, 3, 255, 90, 31, 3, 255, 88, 29, 1, 255, 87, 31, 1, 255, 87, 26, 1, 255, 79, 26, 2, 255, 82, 28, 3, 255, 84, 28, 2, 255, 83, 29, 2, 255, 79, 28, 2, 255, 74, 25, 1, 255, 73, 24, 4, 255, 74, 27, 5, 255, 71, 27, 3, 255, 68, 24, 3, 255, 70, 24, 3, 255, 63, 21, 1, 255, 54, 19, 3, 255, 53, 18, 4, 255, 66, 20, 3, 255, 69, 20, 1, 255, 69, 22, 2, 255, 71, 20, 0, 255, 74, 21, 4, 255, 78, 26, 3, 255, 87, 33, 0, 255, 92, 35, 4, 255, 92, 39, 3, 255, 96, 41, 6, 255, 91, 33, 1, 255, 87, 35, 3, 255, 81, 34, 2, 255, 76, 26, 1, 255, 75, 22, 4, 255, 66, 15, 4, 255, 65, 15, 4, 255, 74, 21, 2, 255, 84, 25, 0, 255, 85, 26, 2, 255, 83, 28, 7, 255, 90, 26, 4, 255, 94, 27, 1, 255, 97, 26, 1, 255, 0, 1, 1, 255, 4, 1, 0, 255, 5, 0, 0, 255, 2, 2, 0, 255, 0, 0, 0, 255, 6, 2, 1, 255, 14, 4, 2, 255, 15, 8, 5, 255, 12, 6, 7, 255, 11, 4, 8, 255, 13, 3, 5, 255, 14, 5, 3, 255, 13, 4, 1, 255, 14, 5, 5, 255, 16, 6, 6, 255, 18, 7, 5, 255, 20, 9, 7, 255, 17, 6, 5, 255, 18, 9, 6, 255, 14, 7, 4, 255, 18, 8, 6, 255, 20, 8, 7, 255, 17, 8, 4, 255, 15, 9, 2, 255, 18, 9, 2, 255, 18, 8, 2, 255, 18, 10, 4, 255, 21, 12, 6, 255, 20, 11, 8, 255, 23, 15, 13, 255, 27, 18, 14, 255, 23, 12, 5, 255, 26, 19, 12, 255, 23, 16, 5, 255, 27, 15, 4, 255, 37, 19, 10, 255, 41, 20, 13, 255, 37, 19, 5, 255, 32, 20, 6, 255, 20, 17, 9, 255, 42, 29, 7, 255, 83, 58, 7, 255, 91, 66, 13, 255, 100, 67, 22, 255, 108, 72, 16, 255, 115, 78, 9, 255, 122, 78, 15, 255, 111, 72, 10, 255, 107, 64, 9, 255, 100, 67, 9, 255, 73, 54, 7, 255, 53, 40, 1, 255, 57, 41, 4, 255, 56, 39, 3, 255, 52, 41, 6, 255, 46, 43, 2, 255, 51, 49, 0, 255, 59, 50, 1, 255, 64, 44, 6, 255, 65, 49, 3, 255, 70, 49, 0, 255, 72, 55, 3, 255, 60, 54, 4, 255, 100, 80, 5, 255, 190, 135, 3, 255, 201, 148, 6, 255, 199, 153, 4, 255, 191, 139, 4, 255, 161, 101, 7, 255, 121, 62, 6, 255, 81, 48, 2, 255, 66, 50, 0, 255, 63, 50, 3, 255, 65, 49, 3, 255, 71, 48, 3, 255, 71, 44, 1, 255, 71, 43, 1, 255, 75, 45, 4, 255, 73, 42, 2, 255, 77, 42, 3, 255, 68, 47, 4, 255, 71, 45, 3, 255, 74, 46, 4, 255, 70, 45, 2, 255, 66, 42, 3, 255, 69, 42, 4, 255, 67, 41, 4, 255, 73, 42, 1, 255, 65, 39, 0, 255, 68, 41, 2, 255, 70, 41, 3, 255, 71, 39, 2, 255, 75, 40, 3, 255, 77, 42, 5, 255, 79, 45, 6, 255, 76, 41, 1, 255, 76, 43, 2, 255, 86, 42, 4, 255, 79, 41, 1, 255, 77, 42, 1, 255, 79, 43, 2, 255, 80, 44, 3, 255, 82, 41, 4, 255, 81, 42, 2, 255, 85, 50, 1, 255, 83, 47, 4, 255, 83, 41, 7, 255, 83, 41, 3, 255, 86, 49, 1, 255, 86, 49, 2, 255, 93, 45, 6, 255, 93, 47, 4, 255, 84, 47, 2, 255, 82, 46, 4, 255, 90, 48, 6, 255, 85, 49, 1, 255, 85, 50, 4, 255, 81, 44, 0, 255, 84, 51, 4, 255, 80, 48, 2, 255, 83, 50, 1, 255, 86, 47, 2, 255, 81, 42, 2, 255, 86, 47, 6, 255, 86, 49, 1, 255, 87, 52, 5, 255, 87, 49, 8, 255, 88, 47, 4, 255, 87, 44, 6, 255, 83, 47, 1, 255, 81, 48, 0, 255, 91, 48, 8, 255, 106, 52, 9, 255, 126, 66, 5, 255, 146, 80, 6, 255, 167, 90, 9, 255, 166, 83, 11, 255, 173, 96, 9, 255, 188, 104, 5, 255, 193, 105, 17, 255, 194, 116, 7, 255, 196, 112, 9, 255, 190, 108, 1, 255, 195, 114, 8, 255, 194, 114, 7, 255, 197, 115, 8, 255, 203, 120, 8, 255, 202, 126, 5, 255, 206, 127, 15, 255, 197, 115, 7, 255, 168, 79, 8, 255, 175, 89, 6, 255, 172, 89, 11, 255, 194, 114, 6, 255, 208, 125, 20, 255, 210, 130, 6, 255, 214, 132, 11, 255, 217, 133, 22, 255, 211, 127, 15, 255, 206, 121, 5, 255, 196, 108, 10, 255, 205, 119, 12, 255, 203, 120, 8, 255, 188, 101, 13, 255, 194, 109, 11, 255, 205, 118, 14, 255, 207, 124, 13, 255, 205, 126, 8, 255, 198, 120, 4, 255, 189, 106, 5, 255, 191, 106, 13, 255, 197, 115, 15, 255, 195, 118, 2, 255, 199, 124, 15, 255, 197, 122, 18, 255, 192, 117, 12, 255, 185, 108, 12, 255, 182, 107, 7, 255, 187, 115, 11, 255, 190, 122, 3, 255, 195, 122, 6, 255, 182, 111, 18, 255, 187, 118, 1, 255, 198, 127, 21, 255, 199, 132, 21, 255, 202, 130, 8, 255, 202, 127, 16, 255, 188, 124, 6, 255, 187, 121, 14, 255, 198, 135, 11, 255, 190, 128, 0, 255, 192, 122, 12, 255, 189, 123, 16, 255, 186, 123, 5, 255, 195, 132, 9, 255, 189, 123, 16, 255, 187, 127, 9, 255, 195, 136, 4, 255, 196, 142, 10, 255, 201, 144, 11, 255, 194, 129, 2, 255, 191, 129, 16, 255, 198, 137, 13, 255, 205, 141, 3, 255, 196, 133, 3, 255, 196, 137, 1, 255, 201, 137, 13, 255, 191, 129, 19, 255, 193, 132, 13, 255, 203, 137, 3, 255, 206, 136, 12, 255, 200, 136, 7, 255, 190, 130, 9, 255, 188, 133, 7, 255, 185, 123, 12, 255, 183, 112, 9, 255, 162, 97, 11, 255, 143, 88, 9, 255, 153, 92, 16, 255, 150, 88, 7, 255, 155, 92, 12, 255, 157, 96, 5, 255, 162, 100, 10, 255, 157, 92, 7, 255, 155, 94, 11, 255, 153, 87, 19, 255, 149, 86, 11, 255, 152, 98, 10, 255, 184, 130, 8, 255, 188, 114, 17, 255, 198, 134, 6, 255, 192, 134, 3, 255, 195, 129, 12, 255, 209, 149, 11, 255, 219, 165, 10, 255, 213, 157, 4, 255, 213, 153, 4, 255, 217, 162, 7, 255, 224, 171, 5, 255, 225, 171, 2, 255, 222, 168, 6, 255, 212, 156, 2, 255, 216, 162, 4, 255, 221, 170, 5, 255, 220, 167, 1, 255, 224, 173, 1, 255, 207, 156, 8, 255, 208, 163, 7, 255, 220, 176, 6, 255, 214, 165, 1, 255, 206, 153, 0, 255, 210, 160, 4, 255, 215, 168, 4, 255, 222, 175, 10, 255, 219, 169, 5, 255, 206, 151, 10, 255, 203, 150, 7, 255, 210, 153, 10, 255, 198, 140, 4, 255, 208, 149, 17, 255, 211, 157, 12, 255, 211, 157, 8, 255, 209, 149, 14, 255, 208, 150, 3, 255, 208, 150, 7, 255, 204, 143, 6, 255, 206, 144, 3, 255, 185, 116, 7, 255, 171, 97, 13, 255, 188, 117, 9, 255, 204, 137, 7, 255, 210, 142, 11, 255, 211, 145, 5, 255, 211, 144, 10, 255, 211, 143, 5, 255, 209, 141, 8, 255, 208, 139, 12, 255, 205, 133, 4, 255, 207, 133, 7, 255, 206, 132, 8, 255, 200, 126, 8, 255, 196, 119, 6, 255, 196, 117, 5, 255, 192, 114, 4, 255, 192, 115, 4, 255, 191, 113, 5, 255, 187, 109, 0, 255, 188, 108, 6, 255, 183, 102, 3, 255, 179, 101, 4, 255, 173, 95, 7, 255, 170, 85, 3, 255, 177, 86, 7, 255, 180, 84, 5, 255, 161, 77, 8, 255, 129, 59, 2, 255, 124, 54, 9, 255, 137, 62, 10, 255, 128, 50, 0, 255, 128, 52, 3, 255, 134, 59, 3, 255, 114, 39, 8, 255, 112, 44, 2, 255, 108, 42, 5, 255, 102, 35, 5, 255, 103, 39, 4, 255, 101, 38, 4, 255, 110, 42, 1, 255, 121, 45, 7, 255, 117, 39, 10, 255, 102, 40, 5, 255, 94, 38, 0, 255, 111, 47, 5, 255, 124, 47, 5, 255, 125, 51, 2, 255, 125, 53, 6, 255, 119, 48, 1, 255, 118, 50, 7, 255, 112, 47, 6, 255, 107, 46, 0, 255, 141, 70, 5, 255, 165, 84, 4, 255, 166, 89, 4, 255, 170, 90, 3, 255, 171, 88, 0, 255, 174, 92, 1, 255, 176, 95, 0, 255, 174, 93, 1, 255, 173, 87, 8, 255, 177, 90, 9, 255, 178, 93, 3, 255, 175, 90, 0, 255, 177, 90, 3, 255, 176, 93, 2, 255, 171, 92, 0, 255, 173, 92, 2, 255, 178, 92, 3, 255, 176, 89, 1, 255, 170, 85, 2, 255, 171, 89, 2, 255, 172, 90, 4, 255, 174, 88, 2, 255, 167, 78, 3, 255, 172, 80, 2, 255, 167, 75, 3, 255, 138, 50, 4, 255, 118, 46, 1, 255, 110, 41, 2, 255, 106, 37, 2, 255, 118, 41, 0, 255, 127, 47, 5, 255, 123, 45, 11, 255, 117, 48, 6, 255, 115, 45, 1, 255, 112, 41, 2, 255, 105, 37, 2, 255, 99, 35, 2, 255, 97, 35, 3, 255, 97, 34, 3, 255, 96, 30, 1, 255, 88, 29, 2, 255, 85, 30, 3, 255, 79, 27, 0, 255, 84, 27, 2, 255, 79, 28, 1, 255, 81, 29, 4, 255, 81, 29, 2, 255, 79, 27, 0, 255, 81, 28, 1, 255, 80, 27, 1, 255, 81, 28, 0, 255, 80, 26, 2, 255, 77, 25, 4, 255, 69, 21, 4, 255, 55, 18, 2, 255, 49, 18, 0, 255, 59, 22, 4, 255, 63, 19, 4, 255, 66, 21, 2, 255, 65, 23, 2, 255, 71, 22, 8, 255, 74, 24, 6, 255, 76, 26, 1, 255, 75, 26, 1, 255, 80, 26, 1, 255, 86, 34, 5, 255, 91, 37, 6, 255, 94, 31, 2, 255, 87, 37, 3, 255, 85, 35, 3, 255, 84, 30, 2, 255, 70, 27, 3, 255, 68, 24, 5, 255, 71, 21, 4, 255, 70, 22, 2, 255, 73, 25, 2, 255, 76, 22, 1, 255, 81, 27, 3, 255, 87, 28, 0, 255, 96, 32, 3, 255, 0, 2, 0, 255, 3, 1, 0, 255, 4, 0, 0, 255, 3, 2, 0, 255, 1, 1, 0, 255, 3, 1, 0, 255, 9, 3, 3, 255, 13, 8, 7, 255, 11, 6, 3, 255, 11, 3, 1, 255, 11, 3, 3, 255, 14, 6, 6, 255, 13, 4, 4, 255, 17, 7, 6, 255, 15, 5, 4, 255, 16, 4, 3, 255, 17, 6, 5, 255, 15, 6, 3, 255, 15, 8, 5, 255, 13, 9, 5, 255, 14, 4, 2, 255, 16, 6, 4, 255, 18, 8, 4, 255, 20, 7, 3, 255, 19, 10, 3, 255, 20, 14, 7, 255, 16, 9, 4, 255, 17, 13, 9, 255, 21, 13, 11, 255, 20, 11, 9, 255, 27, 16, 13, 255, 25, 16, 10, 255, 24, 16, 9, 255, 30, 18, 8, 255, 34, 18, 9, 255, 31, 17, 9, 255, 28, 17, 10, 255, 28, 19, 6, 255, 26, 17, 10, 255, 26, 21, 6, 255, 34, 24, 3, 255, 35, 28, 4, 255, 33, 27, 2, 255, 40, 32, 3, 255, 35, 34, 5, 255, 36, 34, 3, 255, 42, 35, 3, 255, 41, 31, 1, 255, 49, 43, 0, 255, 64, 51, 3, 255, 46, 37, 5, 255, 62, 46, 8, 255, 58, 42, 6, 255, 60, 50, 3, 255, 62, 52, 2, 255, 59, 45, 3, 255, 63, 46, 6, 255, 65, 47, 4, 255, 67, 48, 1, 255, 61, 47, 3, 255, 81, 50, 6, 255, 70, 51, 3, 255, 75, 59, 5, 255, 156, 115, 10, 255, 201, 145, 0, 255, 198, 145, 4, 255, 193, 136, 4, 255, 174, 110, 1, 255, 135, 79, 2, 255, 97, 56, 1, 255, 70, 46, 0, 255, 72, 52, 5, 255, 67, 49, 3, 255, 66, 50, 2, 255, 76, 48, 4, 255, 78, 44, 5, 255, 73, 42, 3, 255, 71, 45, 2, 255, 69, 40, 1, 255, 73, 42, 6, 255, 67, 42, 2, 255, 76, 43, 4, 255, 79, 42, 2, 255, 68, 45, 2, 255, 64, 46, 6, 255, 65, 42, 2, 255, 61, 38, 2, 255, 66, 42, 4, 255, 61, 45, 5, 255, 67, 42, 3, 255, 73, 40, 4, 255, 74, 45, 5, 255, 79, 45, 5, 255, 81, 43, 2, 255, 79, 42, 2, 255, 72, 41, 0, 255, 77, 44, 4, 255, 86, 43, 5, 255, 78, 42, 2, 255, 79, 45, 4, 255, 81, 44, 4, 255, 80, 40, 2, 255, 85, 43, 6, 255, 88, 47, 5, 255, 83, 44, 0, 255, 86, 45, 4, 255, 81, 36, 2, 255, 86, 40, 4, 255, 89, 44, 1, 255, 92, 45, 0, 255, 95, 42, 3, 255, 92, 45, 1, 255, 87, 49, 2, 255, 84, 48, 5, 255, 88, 46, 2, 255, 88, 51, 5, 255, 82, 46, 1, 255, 86, 47, 3, 255, 88, 47, 5, 255, 88, 50, 7, 255, 86, 48, 3, 255, 86, 50, 4, 255, 83, 47, 3, 255, 89, 48, 5, 255, 90, 49, 3, 255, 88, 48, 3, 255, 89, 49, 5, 255, 86, 46, 2, 255, 81, 49, 3, 255, 77, 47, 2, 255, 82, 51, 4, 255, 85, 50, 5, 255, 91, 47, 8, 255, 97, 52, 4, 255, 105, 53, 3, 255, 128, 69, 12, 255, 154, 83, 8, 255, 182, 96, 5, 255, 188, 102, 2, 255, 184, 101, 3, 255, 185, 105, 6, 255, 188, 107, 10, 255, 190, 110, 9, 255, 193, 111, 11, 255, 192, 108, 9, 255, 191, 107, 8, 255, 197, 112, 11, 255, 192, 112, 8, 255, 203, 123, 14, 255, 184, 99, 8, 255, 196, 111, 10, 255, 185, 97, 7, 255, 185, 97, 16, 255, 181, 94, 8, 255, 191, 105, 13, 255, 211, 125, 21, 255, 204, 115, 4, 255, 194, 103, 9, 255, 184, 93, 10, 255, 193, 104, 13, 255, 184, 99, 4, 255, 200, 117, 7, 255, 203, 120, 13, 255, 204, 121, 10, 255, 185, 99, 1, 255, 187, 98, 3, 255, 194, 111, 16, 255, 195, 116, 12, 255, 194, 115, 14, 255, 191, 111, 7, 255, 205, 125, 10, 255, 194, 115, 7, 255, 196, 118, 15, 255, 197, 124, 5, 255, 186, 112, 15, 255, 179, 103, 18, 255, 190, 115, 16, 255, 189, 119, 8, 255, 190, 125, 9, 255, 193, 120, 16, 255, 188, 121, 14, 255, 186, 116, 8, 255, 193, 121, 0, 255, 186, 119, 8, 255, 189, 122, 13, 255, 200, 128, 13, 255, 191, 124, 19, 255, 187, 123, 12, 255, 196, 123, 18, 255, 188, 129, 6, 255, 191, 126, 7, 255, 189, 121, 7, 255, 178, 114, 12, 255, 172, 110, 10, 255, 185, 121, 11, 255, 191, 127, 7, 255, 179, 118, 11, 255, 172, 108, 15, 255, 160, 101, 15, 255, 151, 90, 14, 255, 174, 110, 15, 255, 170, 107, 17, 255, 150, 86, 7, 255, 156, 96, 14, 255, 161, 106, 18, 255, 170, 102, 11, 255, 163, 94, 8, 255, 137, 76, 4, 255, 128, 71, 13, 255, 133, 77, 8, 255, 136, 86, 6, 255, 142, 83, 20, 255, 146, 81, 7, 255, 148, 83, 8, 255, 154, 94, 3, 255, 145, 81, 16, 255, 134, 79, 12, 255, 143, 91, 11, 255, 164, 99, 6, 255, 176, 108, 8, 255, 182, 109, 11, 255, 186, 114, 8, 255, 183, 107, 4, 255, 174, 94, 2, 255, 175, 99, 6, 255, 191, 113, 8, 255, 190, 108, 0, 255, 195, 111, 17, 255, 191, 115, 12, 255, 169, 101, 10, 255, 195, 134, 5, 255, 199, 136, 9, 255, 182, 118, 15, 255, 200, 142, 13, 255, 218, 164, 11, 255, 213, 163, 2, 255, 215, 168, 0, 255, 221, 169, 3, 255, 223, 168, 9, 255, 222, 168, 7, 255, 221, 166, 4, 255, 213, 158, 2, 255, 213, 160, 0, 255, 220, 169, 0, 255, 215, 159, 7, 255, 219, 170, 6, 255, 217, 171, 8, 255, 216, 171, 6, 255, 221, 178, 4, 255, 221, 177, 3, 255, 212, 166, 4, 255, 206, 161, 5, 255, 212, 171, 5, 255, 213, 171, 1, 255, 206, 159, 5, 255, 202, 148, 11, 255, 203, 151, 2, 255, 208, 156, 4, 255, 204, 149, 10, 255, 209, 155, 19, 255, 211, 161, 7, 255, 210, 158, 7, 255, 204, 146, 10, 255, 211, 154, 7, 255, 208, 150, 6, 255, 205, 146, 9, 255, 205, 145, 5, 255, 203, 143, 11, 255, 198, 136, 5, 255, 199, 134, 5, 255, 207, 142, 11, 255, 211, 145, 6, 255, 213, 147, 6, 255, 210, 140, 18, 255, 200, 128, 14, 255, 200, 128, 11, 255, 201, 130, 6, 255, 203, 130, 6, 255, 207, 132, 11, 255, 203, 129, 1, 255, 200, 125, 3, 255, 200, 123, 10, 255, 198, 122, 2, 255, 195, 119, 5, 255, 193, 118, 9, 255, 189, 111, 10, 255, 188, 111, 2, 255, 186, 108, 8, 255, 185, 102, 5, 255, 181, 96, 3, 255, 172, 90, 7, 255, 162, 85, 5, 255, 142, 65, 5, 255, 143, 64, 10, 255, 130, 54, 6, 255, 128, 52, 5, 255, 128, 50, 1, 255, 122, 51, 8, 255, 119, 52, 5, 255, 128, 55, 3, 255, 124, 42, 4, 255, 111, 37, 6, 255, 108, 40, 4, 255, 105, 42, 0, 255, 101, 38, 1, 255, 101, 40, 5, 255, 96, 38, 1, 255, 106, 43, 4, 255, 112, 45, 3, 255, 108, 40, 6, 255, 100, 41, 4, 255, 100, 44, 7, 255, 99, 40, 4, 255, 110, 43, 3, 255, 118, 48, 7, 255, 114, 45, 5, 255, 112, 43, 5, 255, 113, 47, 2, 255, 112, 47, 3, 255, 105, 42, 5, 255, 100, 43, 4, 255, 146, 73, 4, 255, 163, 87, 0, 255, 165, 89, 5, 255, 168, 87, 2, 255, 170, 90, 6, 255, 175, 96, 3, 255, 175, 94, 2, 255, 176, 92, 2, 255, 177, 92, 5, 255, 174, 89, 4, 255, 170, 85, 2, 255, 173, 89, 5, 255, 172, 89, 2, 255, 168, 86, 1, 255, 174, 91, 4, 255, 174, 87, 0, 255, 172, 85, 1, 255, 170, 88, 7, 255, 176, 87, 7, 255, 168, 81, 5, 255, 143, 58, 2, 255, 129, 39, 5, 255, 152, 64, 6, 255, 154, 61, 2, 255, 127, 39, 3, 255, 118, 46, 3, 255, 118, 43, 3, 255, 119, 39, 4, 255, 128, 46, 4, 255, 119, 43, 1, 255, 104, 34, 1, 255, 115, 40, 4, 255, 116, 40, 1, 255, 116, 39, 8, 255, 109, 39, 5, 255, 99, 31, 1, 255, 100, 30, 2, 255, 99, 34, 0, 255, 96, 29, 2, 255, 90, 29, 5, 255, 91, 34, 3, 255, 89, 33, 0, 255, 94, 33, 1, 255, 89, 31, 2, 255, 88, 30, 0, 255, 87, 29, 0, 255, 90, 33, 4, 255, 88, 35, 3, 255, 80, 29, 0, 255, 82, 30, 3, 255, 83, 29, 3, 255, 80, 28, 3, 255, 72, 25, 1, 255, 63, 24, 3, 255, 52, 16, 2, 255, 53, 15, 3, 255, 63, 19, 7, 255, 63, 19, 1, 255, 54, 20, 1, 255, 55, 19, 3, 255, 63, 19, 3, 255, 70, 20, 0, 255, 72, 21, 3, 255, 72, 18, 3, 255, 69, 26, 0, 255, 92, 34, 4, 255, 99, 33, 1, 255, 96, 38, 2, 255, 95, 40, 2, 255, 91, 36, 0, 255, 93, 39, 5, 255, 83, 31, 3, 255, 63, 22, 1, 255, 62, 20, 4, 255, 71, 19, 2, 255, 79, 22, 2, 255, 81, 24, 3, 255, 90, 26, 2, 255, 98, 29, 3, 255, 3, 3, 1, 255, 4, 2, 1, 255, 5, 1, 0, 255, 6, 2, 1, 255, 6, 2, 1, 255, 6, 3, 1, 255, 6, 1, 2, 255, 9, 3, 6, 255, 17, 8, 8, 255, 14, 4, 3, 255, 14, 4, 5, 255, 15, 4, 10, 255, 15, 4, 11, 255, 16, 6, 4, 255, 16, 6, 4, 255, 15, 5, 3, 255, 16, 6, 4, 255, 17, 6, 4, 255, 17, 8, 5, 255, 13, 9, 5, 255, 15, 6, 4, 255, 16, 7, 3, 255, 19, 10, 5, 255, 29, 15, 12, 255, 19, 10, 5, 255, 12, 14, 4, 255, 16, 10, 4, 255, 16, 12, 8, 255, 17, 11, 8, 255, 28, 12, 11, 255, 19, 14, 7, 255, 25, 17, 11, 255, 23, 18, 9, 255, 31, 20, 10, 255, 35, 22, 12, 255, 30, 22, 13, 255, 26, 23, 14, 255, 27, 25, 11, 255, 30, 24, 11, 255, 26, 25, 6, 255, 30, 23, 8, 255, 38, 29, 5, 255, 40, 31, 6, 255, 45, 32, 5, 255, 39, 28, 9, 255, 43, 34, 4, 255, 52, 35, 3, 255, 53, 40, 7, 255, 73, 60, 9, 255, 61, 45, 8, 255, 63, 47, 5, 255, 68, 49, 6, 255, 59, 44, 3, 255, 60, 51, 6, 255, 63, 53, 4, 255, 62, 47, 4, 255, 67, 48, 6, 255, 69, 50, 1, 255, 65, 51, 1, 255, 60, 55, 7, 255, 73, 51, 5, 255, 60, 51, 7, 255, 108, 85, 9, 255, 185, 138, 3, 255, 199, 153, 2, 255, 196, 150, 1, 255, 181, 128, 2, 255, 154, 95, 8, 255, 111, 61, 2, 255, 84, 53, 6, 255, 71, 49, 3, 255, 72, 47, 3, 255, 71, 48, 4, 255, 69, 48, 2, 255, 74, 43, 0, 255, 83, 45, 8, 255, 72, 39, 1, 255, 70, 44, 3, 255, 68, 44, 5, 255, 64, 40, 4, 255, 65, 43, 4, 255, 73, 42, 3, 255, 79, 41, 3, 255, 69, 40, 1, 255, 64, 40, 4, 255, 68, 39, 1, 255, 70, 38, 3, 255, 77, 40, 4, 255, 69, 39, 2, 255, 75, 41, 2, 255, 82, 43, 4, 255, 78, 44, 2, 255, 79, 45, 1, 255, 79, 42, 1, 255, 77, 42, 1, 255, 74, 47, 4, 255, 76, 43, 2, 255, 80, 43, 4, 255, 73, 43, 1, 255, 82, 45, 4, 255, 87, 42, 3, 255, 85, 41, 1, 255, 82, 42, 1, 255, 84, 43, 5, 255, 87, 44, 7, 255, 86, 41, 4, 255, 87, 44, 3, 255, 89, 46, 4, 255, 89, 44, 3, 255, 88, 45, 1, 255, 87, 46, 4, 255, 87, 46, 1, 255, 91, 47, 3, 255, 94, 45, 3, 255, 96, 46, 1, 255, 96, 45, 2, 255, 94, 45, 3, 255, 93, 47, 5, 255, 91, 46, 5, 255, 85, 45, 2, 255, 85, 50, 4, 255, 84, 51, 4, 255, 86, 50, 1, 255, 89, 47, 0, 255, 92, 48, 3, 255, 90, 48, 3, 255, 90, 49, 4, 255, 89, 47, 4, 255, 84, 53, 4, 255, 80, 49, 5, 255, 85, 52, 4, 255, 86, 52, 0, 255, 87, 53, 6, 255, 80, 50, 7, 255, 78, 53, 2, 255, 88, 50, 1, 255, 121, 63, 7, 255, 147, 76, 13, 255, 167, 86, 8, 255, 184, 95, 1, 255, 181, 91, 13, 255, 182, 103, 13, 255, 189, 109, 15, 255, 189, 108, 8, 255, 191, 108, 9, 255, 194, 110, 16, 255, 182, 99, 11, 255, 176, 86, 12, 255, 196, 106, 20, 255, 172, 82, 5, 255, 201, 116, 15, 255, 202, 122, 10, 255, 180, 101, 8, 255, 188, 107, 13, 255, 190, 107, 3, 255, 174, 87, 6, 255, 169, 78, 12, 255, 177, 89, 13, 255, 198, 118, 15, 255, 198, 122, 10, 255, 195, 118, 2, 255, 191, 110, 13, 255, 189, 109, 12, 255, 189, 108, 18, 255, 180, 97, 5, 255, 188, 104, 8, 255, 194, 116, 5, 255, 190, 115, 17, 255, 188, 111, 13, 255, 187, 108, 11, 255, 177, 97, 8, 255, 172, 95, 10, 255, 179, 105, 11, 255, 185, 113, 6, 255, 181, 109, 13, 255, 179, 110, 5, 255, 186, 116, 5, 255, 188, 114, 17, 255, 185, 113, 12, 255, 185, 112, 9, 255, 178, 113, 9, 255, 184, 108, 14, 255, 181, 107, 18, 255, 182, 111, 4, 255, 184, 106, 13, 255, 179, 104, 17, 255, 175, 104, 9, 255, 182, 105, 11, 255, 164, 93, 17, 255, 158, 91, 18, 255, 162, 91, 7, 255, 153, 89, 9, 255, 144, 92, 20, 255, 166, 103, 16, 255, 160, 95, 7, 255, 126, 71, 6, 255, 114, 69, 8, 255, 104, 67, 8, 255, 110, 74, 9, 255, 148, 98, 7, 255, 170, 111, 9, 255, 125, 75, 19, 255, 93, 58, 3, 255, 101, 62, 4, 255, 112, 67, 12, 255, 101, 66, 16, 255, 105, 70, 3, 255, 119, 78, 10, 255, 133, 85, 11, 255, 136, 87, 10, 255, 149, 93, 11, 255, 167, 103, 5, 255, 180, 114, 14, 255, 183, 110, 7, 255, 190, 115, 9, 255, 190, 117, 14, 255, 193, 119, 8, 255, 199, 122, 13, 255, 203, 125, 5, 255, 202, 122, 2, 255, 200, 118, 3, 255, 199, 119, 8, 255, 194, 116, 13, 255, 186, 107, 19, 255, 194, 110, 16, 255, 195, 116, 11, 255, 196, 117, 5, 255, 193, 112, 3, 255, 182, 103, 5, 255, 186, 118, 8, 255, 196, 132, 6, 255, 191, 131, 14, 255, 194, 147, 10, 255, 209, 160, 3, 255, 214, 154, 6, 255, 220, 167, 2, 255, 218, 174, 9, 255, 222, 170, 5, 255, 223, 171, 0, 255, 221, 169, 1, 255, 224, 170, 3, 255, 218, 166, 0, 255, 218, 166, 3, 255, 223, 170, 4, 255, 217, 164, 8, 255, 217, 168, 3, 255, 223, 179, 4, 255, 222, 179, 6, 255, 220, 176, 9, 255, 220, 178, 1, 255, 218, 176, 2, 255, 215, 173, 7, 255, 212, 169, 11, 255, 203, 159, 9, 255, 201, 154, 11, 255, 207, 162, 3, 255, 207, 163, 2, 255, 204, 157, 3, 255, 209, 158, 8, 255, 213, 164, 8, 255, 210, 159, 7, 255, 212, 156, 12, 255, 209, 152, 9, 255, 207, 150, 7, 255, 199, 141, 2, 255, 209, 152, 7, 255, 209, 152, 14, 255, 208, 152, 16, 255, 207, 150, 1, 255, 209, 148, 3, 255, 207, 146, 4, 255, 208, 146, 4, 255, 208, 143, 2, 255, 201, 130, 15, 255, 193, 120, 16, 255, 182, 105, 4, 255, 186, 108, 10, 255, 195, 117, 13, 255, 199, 122, 4, 255, 201, 124, 10, 255, 202, 124, 12, 255, 200, 123, 9, 255, 195, 120, 6, 255, 195, 120, 4, 255, 193, 118, 2, 255, 188, 111, 6, 255, 188, 111, 4, 255, 183, 103, 10, 255, 182, 101, 6, 255, 185, 99, 2, 255, 172, 84, 7, 255, 150, 72, 2, 255, 137, 65, 1, 255, 144, 71, 2, 255, 136, 63, 6, 255, 123, 49, 8, 255, 131, 56, 5, 255, 135, 63, 0, 255, 127, 54, 7, 255, 117, 45, 6, 255, 116, 47, 7, 255, 116, 42, 1, 255, 114, 46, 3, 255, 112, 48, 4, 255, 108, 45, 5, 255, 95, 32, 1, 255, 92, 34, 5, 255, 107, 48, 11, 255, 106, 50, 5, 255, 100, 43, 4, 255, 100, 41, 3, 255, 101, 41, 3, 255, 96, 38, 1, 255, 100, 42, 1, 255, 105, 41, 1, 255, 107, 42, 1, 255, 108, 44, 4, 255, 112, 50, 3, 255, 113, 52, 2, 255, 105, 43, 8, 255, 98, 43, 6, 255, 132, 66, 3, 255, 161, 87, 6, 255, 163, 86, 11, 255, 169, 87, 5, 255, 169, 90, 2, 255, 175, 94, 2, 255, 176, 91, 1, 255, 175, 90, 1, 255, 171, 88, 1, 255, 168, 86, 4, 255, 166, 85, 4, 255, 168, 88, 6, 255, 170, 88, 1, 255, 175, 88, 1, 255, 175, 86, 1, 255, 173, 88, 0, 255, 174, 90, 3, 255, 173, 88, 3, 255, 152, 67, 4, 255, 129, 49, 1, 255, 119, 44, 6, 255, 119, 47, 8, 255, 123, 47, 2, 255, 125, 44, 0, 255, 122, 40, 2, 255, 124, 44, 4, 255, 128, 46, 4, 255, 124, 46, 3, 255, 113, 41, 5, 255, 101, 32, 2, 255, 106, 38, 5, 255, 116, 42, 5, 255, 110, 41, 1, 255, 108, 39, 5, 255, 107, 39, 2, 255, 107, 37, 3, 255, 108, 41, 4, 255, 119, 49, 2, 255, 111, 40, 0, 255, 100, 37, 3, 255, 100, 34, 2, 255, 96, 37, 0, 255, 95, 34, 3, 255, 92, 31, 4, 255, 94, 34, 2, 255, 93, 31, 3, 255, 88, 30, 2, 255, 82, 29, 0, 255, 82, 31, 3, 255, 82, 29, 4, 255, 84, 27, 6, 255, 77, 24, 0, 255, 71, 25, 0, 255, 64, 21, 1, 255, 57, 16, 4, 255, 52, 16, 5, 255, 47, 13, 3, 255, 45, 16, 1, 255, 42, 17, 0, 255, 46, 14, 4, 255, 56, 15, 3, 255, 58, 16, 0, 255, 57, 18, 2, 255, 64, 19, 1, 255, 70, 25, 0, 255, 90, 32, 2, 255, 99, 36, 4, 255, 102, 36, 4, 255, 101, 39, 1, 255, 97, 39, 4, 255, 94, 31, 2, 255, 92, 30, 0, 255, 77, 28, 2, 255, 62, 19, 2, 255, 67, 19, 5, 255, 76, 25, 8, 255, 76, 22, 6, 255, 80, 23, 5, 255, 86, 25, 1, 255, 5, 1, 0, 255, 6, 2, 1, 255, 4, 1, 0, 255, 5, 2, 1, 255, 5, 1, 0, 255, 4, 0, 0, 255, 5, 2, 0, 255, 8, 1, 1, 255, 16, 5, 9, 255, 18, 5, 14, 255, 18, 7, 15, 255, 15, 4, 8, 255, 14, 4, 6, 255, 13, 5, 6, 255, 14, 7, 6, 255, 12, 4, 2, 255, 14, 5, 3, 255, 14, 4, 2, 255, 16, 6, 4, 255, 9, 6, 3, 255, 13, 5, 2, 255, 18, 6, 4, 255, 19, 10, 4, 255, 17, 11, 5, 255, 16, 10, 4, 255, 18, 11, 4, 255, 19, 11, 5, 255, 17, 12, 8, 255, 18, 13, 8, 255, 30, 20, 13, 255, 25, 18, 9, 255, 26, 18, 12, 255, 26, 18, 11, 255, 26, 23, 10, 255, 28, 24, 10, 255, 29, 21, 11, 255, 28, 19, 10, 255, 30, 25, 11, 255, 29, 26, 3, 255, 33, 29, 0, 255, 37, 29, 9, 255, 34, 32, 9, 255, 34, 28, 12, 255, 41, 32, 8, 255, 37, 38, 10, 255, 44, 41, 2, 255, 54, 36, 1, 255, 74, 59, 4, 255, 60, 47, 4, 255, 67, 46, 5, 255, 71, 52, 1, 255, 60, 48, 0, 255, 59, 54, 0, 255, 54, 52, 3, 255, 64, 53, 4, 255, 70, 48, 4, 255, 64, 46, 2, 255, 69, 49, 0, 255, 77, 53, 3, 255, 70, 52, 3, 255, 75, 52, 4, 255, 73, 56, 9, 255, 153, 116, 8, 255, 200, 151, 1, 255, 190, 146, 5, 255, 190, 140, 8, 255, 167, 110, 3, 255, 127, 69, 2, 255, 96, 46, 2, 255, 68, 46, 1, 255, 69, 51, 0, 255, 70, 45, 1, 255, 72, 47, 6, 255, 71, 47, 4, 255, 71, 45, 1, 255, 74, 43, 4, 255, 71, 39, 0, 255, 73, 40, 2, 255, 70, 41, 4, 255, 67, 42, 2, 255, 68, 45, 2, 255, 69, 44, 4, 255, 68, 39, 4, 255, 63, 37, 4, 255, 61, 39, 4, 255, 66, 39, 1, 255, 69, 38, 2, 255, 74, 36, 0, 255, 74, 41, 4, 255, 79, 44, 3, 255, 79, 42, 1, 255, 83, 40, 1, 255, 83, 44, 4, 255, 78, 46, 4, 255, 73, 42, 1, 255, 75, 40, 3, 255, 77, 42, 3, 255, 80, 42, 4, 255, 74, 43, 1, 255, 84, 42, 2, 255, 88, 40, 1, 255, 87, 43, 2, 255, 85, 45, 3, 255, 83, 42, 2, 255, 83, 39, 5, 255, 89, 46, 6, 255, 88, 48, 4, 255, 87, 46, 2, 255, 87, 44, 3, 255, 92, 46, 5, 255, 85, 44, 4, 255, 84, 45, 0, 255, 94, 47, 3, 255, 95, 46, 5, 255, 93, 48, 1, 255, 95, 48, 0, 255, 96, 51, 2, 255, 90, 47, 0, 255, 91, 48, 2, 255, 93, 49, 2, 255, 91, 48, 0, 255, 93, 53, 3, 255, 91, 52, 2, 255, 92, 49, 0, 255, 92, 47, 3, 255, 92, 48, 4, 255, 90, 47, 1, 255, 90, 47, 4, 255, 95, 50, 2, 255, 98, 55, 4, 255, 93, 52, 2, 255, 91, 48, 2, 255, 92, 49, 5, 255, 93, 50, 6, 255, 85, 47, 2, 255, 82, 52, 6, 255, 82, 51, 9, 255, 89, 51, 4, 255, 95, 51, 2, 255, 120, 63, 10, 255, 157, 87, 15, 255, 165, 96, 11, 255, 173, 99, 9, 255, 181, 104, 7, 255, 181, 102, 9, 255, 175, 94, 6, 255, 175, 93, 10, 255, 171, 92, 9, 255, 184, 106, 12, 255, 190, 112, 13, 255, 186, 108, 10, 255, 198, 123, 5, 255, 202, 130, 0, 255, 197, 120, 7, 255, 202, 121, 15, 255, 188, 105, 13, 255, 174, 90, 1, 255, 191, 109, 2, 255, 193, 113, 11, 255, 190, 112, 11, 255, 185, 104, 8, 255, 181, 100, 10, 255, 189, 111, 10, 255, 182, 105, 9, 255, 174, 98, 15, 255, 172, 99, 6, 255, 181, 109, 1, 255, 179, 105, 6, 255, 179, 103, 9, 255, 168, 91, 4, 255, 164, 87, 12, 255, 159, 88, 9, 255, 150, 82, 7, 255, 160, 93, 10, 255, 165, 97, 10, 255, 170, 99, 10, 255, 167, 93, 13, 255, 169, 99, 9, 255, 166, 100, 7, 255, 167, 97, 10, 255, 163, 87, 6, 255, 155, 78, 12, 255, 141, 78, 14, 255, 141, 74, 13, 255, 128, 60, 5, 255, 110, 60, 9, 255, 128, 68, 7, 255, 115, 55, 4, 255, 99, 47, 14, 255, 98, 63, 15, 255, 126, 79, 12, 255, 141, 85, 12, 255, 131, 73, 8, 255, 141, 83, 9, 255, 135, 81, 17, 255, 121, 73, 15, 255, 108, 59, 20, 255, 118, 71, 9, 255, 133, 80, 6, 255, 151, 86, 13, 255, 130, 70, 11, 255, 115, 71, 11, 255, 120, 79, 9, 255, 143, 87, 12, 255, 160, 93, 11, 255, 163, 97, 15, 255, 174, 109, 10, 255, 190, 114, 11, 255, 196, 117, 8, 255, 201, 122, 10, 255, 210, 120, 15, 255, 211, 127, 12, 255, 199, 128, 9, 255, 197, 126, 10, 255, 202, 118, 3, 255, 208, 123, 4, 255, 205, 123, 8, 255, 200, 122, 4, 255, 197, 120, 13, 255, 201, 119, 11, 255, 205, 124, 8, 255, 204, 123, 8, 255, 200, 121, 5, 255, 202, 122, 9, 255, 206, 119, 3, 255, 206, 118, 5, 255, 199, 116, 7, 255, 198, 123, 7, 255, 185, 113, 17, 255, 198, 130, 7, 255, 199, 140, 0, 255, 199, 149, 9, 255, 206, 165, 5, 255, 218, 171, 5, 255, 213, 149, 6, 255, 213, 150, 6, 255, 224, 171, 5, 255, 226, 176, 5, 255, 223, 173, 2, 255, 220, 170, 2, 255, 221, 171, 2, 255, 221, 171, 2, 255, 217, 166, 1, 255, 220, 168, 6, 255, 221, 175, 1, 255, 222, 179, 0, 255, 219, 173, 7, 255, 226, 178, 10, 255, 222, 179, 11, 255, 222, 180, 4, 255, 220, 173, 6, 255, 220, 173, 2, 255, 217, 169, 0, 255, 210, 160, 7, 255, 210, 159, 10, 255, 208, 160, 4, 255, 207, 166, 0, 255, 204, 158, 3, 255, 202, 152, 4, 255, 208, 158, 10, 255, 211, 160, 5, 255, 209, 155, 4, 255, 210, 157, 4, 255, 207, 153, 7, 255, 206, 148, 12, 255, 208, 152, 6, 255, 208, 152, 4, 255, 206, 149, 7, 255, 206, 150, 6, 255, 207, 144, 7, 255, 206, 141, 10, 255, 206, 143, 7, 255, 205, 139, 3, 255, 202, 134, 3, 255, 202, 131, 9, 255, 201, 127, 7, 255, 193, 118, 2, 255, 193, 118, 2, 255, 198, 123, 1, 255, 203, 127, 5, 255, 200, 124, 7, 255, 197, 120, 6, 255, 197, 120, 9, 255, 195, 120, 5, 255, 189, 114, 3, 255, 189, 112, 9, 255, 184, 107, 2, 255, 184, 105, 4, 255, 178, 97, 4, 255, 181, 100, 10, 255, 165, 89, 7, 255, 137, 67, 0, 255, 131, 63, 3, 255, 134, 61, 6, 255, 123, 59, 0, 255, 117, 56, 4, 255, 127, 54, 5, 255, 145, 64, 2, 255, 139, 63, 5, 255, 123, 53, 7, 255, 122, 54, 3, 255, 121, 46, 7, 255, 121, 51, 2, 255, 111, 44, 2, 255, 107, 41, 5, 255, 99, 35, 2, 255, 94, 35, 1, 255, 106, 44, 1, 255, 112, 45, 0, 255, 109, 44, 3, 255, 106, 41, 6, 255, 91, 33, 3, 255, 95, 32, 3, 255, 101, 39, 6, 255, 104, 40, 2, 255, 106, 43, 3, 255, 106, 42, 4, 255, 105, 43, 1, 255, 105, 44, 1, 255, 105, 41, 6, 255, 105, 41, 3, 255, 113, 50, 1, 255, 151, 75, 4, 255, 165, 82, 4, 255, 168, 84, 2, 255, 170, 86, 1, 255, 175, 93, 1, 255, 174, 89, 0, 255, 169, 84, 6, 255, 165, 81, 4, 255, 166, 85, 2, 255, 165, 85, 0, 255, 164, 84, 3, 255, 171, 85, 10, 255, 175, 83, 4, 255, 175, 84, 0, 255, 172, 88, 3, 255, 159, 76, 5, 255, 146, 57, 4, 255, 129, 49, 1, 255, 125, 47, 2, 255, 122, 43, 1, 255, 127, 47, 2, 255, 121, 45, 1, 255, 112, 41, 1, 255, 116, 44, 5, 255, 119, 42, 5, 255, 120, 45, 3, 255, 112, 46, 1, 255, 94, 34, 2, 255, 94, 27, 6, 255, 116, 39, 8, 255, 121, 43, 3, 255, 112, 39, 0, 255, 108, 39, 1, 255, 111, 41, 3, 255, 117, 42, 3, 255, 121, 49, 3, 255, 133, 53, 6, 255, 123, 45, 2, 255, 112, 44, 5, 255, 112, 38, 2, 255, 106, 44, 3, 255, 99, 42, 2, 255, 94, 38, 1, 255, 91, 34, 3, 255, 87, 26, 2, 255, 87, 28, 5, 255, 82, 27, 1, 255, 84, 30, 0, 255, 87, 28, 1, 255, 86, 25, 4, 255, 75, 19, 1, 255, 68, 18, 0, 255, 70, 24, 2, 255, 61, 22, 1, 255, 42, 12, 0, 255, 38, 12, 5, 255, 44, 17, 7, 255, 41, 18, 5, 255, 39, 13, 4, 255, 46, 16, 6, 255, 48, 14, 1, 255, 47, 13, 5, 255, 56, 23, 5, 255, 69, 23, 2, 255, 74, 24, 0, 255, 85, 25, 2, 255, 92, 33, 6, 255, 95, 36, 1, 255, 93, 36, 4, 255, 89, 35, 4, 255, 88, 29, 0, 255, 88, 27, 3, 255, 71, 25, 3, 255, 57, 20, 0, 255, 65, 21, 2, 255, 68, 20, 2, 255, 68, 19, 1, 255, 78, 27, 5, 255, 6, 0, 0, 255, 5, 2, 1, 255, 1, 1, 0, 255, 2, 2, 0, 255, 3, 1, 0, 255, 5, 1, 2, 255, 4, 2, 1, 255, 6, 3, 0, 255, 12, 2, 2, 255, 17, 6, 8, 255, 12, 5, 7, 255, 12, 4, 7, 255, 12, 5, 7, 255, 11, 7, 8, 255, 13, 7, 8, 255, 13, 6, 4, 255, 16, 8, 6, 255, 15, 5, 3, 255, 17, 6, 5, 255, 17, 9, 6, 255, 15, 11, 6, 255, 14, 7, 3, 255, 20, 10, 5, 255, 18, 12, 6, 255, 19, 14, 8, 255, 19, 12, 4, 255, 25, 13, 6, 255, 14, 13, 5, 255, 21, 19, 11, 255, 42, 18, 13, 255, 20, 16, 4, 255, 18, 18, 8, 255, 32, 19, 13, 255, 33, 20, 10, 255, 29, 19, 6, 255, 29, 24, 11, 255, 29, 24, 10, 255, 33, 26, 8, 255, 35, 25, 11, 255, 39, 29, 4, 255, 43, 26, 7, 255, 39, 31, 6, 255, 42, 32, 8, 255, 51, 34, 1, 255, 42, 38, 9, 255, 40, 33, 10, 255, 66, 48, 7, 255, 71, 54, 3, 255, 56, 48, 1, 255, 63, 55, 7, 255, 61, 48, 4, 255, 57, 43, 4, 255, 63, 50, 1, 255, 66, 50, 3, 255, 73, 54, 4, 255, 73, 53, 0, 255, 71, 50, 1, 255, 69, 53, 3, 255, 69, 55, 4, 255, 80, 54, 3, 255, 73, 49, 5, 255, 107, 76, 5, 255, 191, 142, 8, 255, 199, 150, 1, 255, 188, 134, 4, 255, 187, 113, 6, 255, 150, 79, 4, 255, 98, 53, 6, 255, 79, 42, 4, 255, 68, 43, 4, 255, 73, 43, 0, 255, 73, 45, 1, 255, 73, 46, 5, 255, 72, 41, 1, 255, 70, 45, 1, 255, 70, 44, 2, 255, 72, 42, 3, 255, 69, 40, 3, 255, 71, 37, 2, 255, 79, 40, 4, 255, 87, 45, 6, 255, 73, 41, 3, 255, 59, 33, 5, 255, 59, 35, 5, 255, 60, 40, 7, 255, 63, 39, 1, 255, 64, 37, 2, 255, 74, 39, 3, 255, 77, 45, 6, 255, 78, 44, 3, 255, 79, 44, 6, 255, 79, 40, 6, 255, 75, 38, 4, 255, 76, 38, 2, 255, 76, 38, 2, 255, 78, 40, 3, 255, 79, 42, 6, 255, 84, 36, 3, 255, 79, 40, 3, 255, 85, 44, 4, 255, 86, 43, 2, 255, 85, 44, 2, 255, 83, 43, 0, 255, 86, 44, 0, 255, 90, 46, 2, 255, 88, 45, 2, 255, 86, 45, 4, 255, 87, 45, 3, 255, 89, 46, 2, 255, 87, 44, 2, 255, 86, 44, 3, 255, 90, 45, 3, 255, 89, 47, 4, 255, 89, 44, 3, 255, 90, 46, 1, 255, 91, 51, 2, 255, 88, 51, 2, 255, 84, 48, 1, 255, 89, 49, 3, 255, 92, 47, 2, 255, 97, 49, 6, 255, 95, 49, 3, 255, 97, 52, 4, 255, 98, 51, 3, 255, 95, 47, 7, 255, 95, 51, 6, 255, 94, 54, 1, 255, 95, 51, 5, 255, 98, 44, 4, 255, 100, 53, 2, 255, 97, 55, 2, 255, 95, 53, 6, 255, 95, 54, 2, 255, 93, 54, 1, 255, 94, 56, 7, 255, 91, 55, 3, 255, 90, 51, 3, 255, 95, 54, 3, 255, 87, 52, 5, 255, 94, 52, 9, 255, 137, 81, 8, 255, 144, 84, 6, 255, 146, 77, 6, 255, 161, 88, 12, 255, 177, 98, 17, 255, 174, 94, 7, 255, 175, 93, 17, 255, 183, 103, 10, 255, 174, 93, 8, 255, 183, 103, 15, 255, 192, 113, 13, 255, 186, 105, 11, 255, 187, 107, 7, 255, 189, 107, 12, 255, 187, 110, 6, 255, 184, 106, 9, 255, 169, 88, 2, 255, 168, 85, 14, 255, 182, 103, 11, 255, 182, 104, 6, 255, 183, 103, 13, 255, 180, 99, 8, 255, 177, 99, 9, 255, 174, 101, 5, 255, 170, 96, 13, 255, 159, 87, 11, 255, 170, 98, 4, 255, 169, 93, 4, 255, 170, 92, 7, 255, 170, 91, 4, 255, 161, 85, 4, 255, 147, 77, 11, 255, 136, 73, 1, 255, 138, 73, 5, 255, 153, 87, 19, 255, 144, 77, 11, 255, 148, 78, 10, 255, 141, 74, 1, 255, 127, 67, 0, 255, 128, 67, 14, 255, 123, 57, 8, 255, 121, 61, 13, 255, 133, 72, 11, 255, 117, 66, 6, 255, 100, 58, 19, 255, 135, 86, 5, 255, 142, 84, 12, 255, 114, 68, 8, 255, 119, 75, 11, 255, 132, 75, 11, 255, 129, 76, 20, 255, 123, 67, 16, 255, 104, 60, 15, 255, 121, 75, 10, 255, 124, 77, 9, 255, 131, 75, 5, 255, 153, 78, 19, 255, 153, 84, 16, 255, 156, 88, 7, 255, 173, 94, 10, 255, 170, 97, 10, 255, 176, 104, 7, 255, 189, 108, 12, 255, 197, 111, 8, 255, 196, 114, 12, 255, 199, 117, 15, 255, 203, 118, 13, 255, 205, 124, 11, 255, 206, 131, 9, 255, 203, 125, 10, 255, 198, 124, 4, 255, 205, 126, 5, 255, 207, 121, 5, 255, 206, 123, 5, 255, 203, 124, 11, 255, 199, 122, 7, 255, 200, 121, 5, 255, 201, 125, 0, 255, 203, 123, 12, 255, 203, 121, 12, 255, 205, 125, 1, 255, 206, 126, 6, 255, 203, 125, 3, 255, 202, 124, 0, 255, 199, 115, 6, 255, 197, 119, 5, 255, 194, 117, 17, 255, 207, 133, 11, 255, 192, 116, 12, 255, 198, 128, 17, 255, 211, 151, 8, 255, 216, 159, 6, 255, 216, 161, 3, 255, 223, 169, 3, 255, 221, 166, 8, 255, 204, 142, 8, 255, 211, 149, 5, 255, 218, 164, 8, 255, 222, 176, 2, 255, 220, 176, 4, 255, 217, 171, 11, 255, 220, 172, 12, 255, 219, 171, 7, 255, 217, 170, 2, 255, 220, 177, 3, 255, 225, 183, 0, 255, 219, 170, 8, 255, 216, 168, 4, 255, 225, 182, 4, 255, 220, 180, 0, 255, 223, 179, 7, 255, 220, 174, 2, 255, 217, 167, 4, 255, 212, 165, 2, 255, 210, 163, 6, 255, 208, 164, 5, 255, 207, 163, 2, 255, 205, 154, 5, 255, 202, 147, 10, 255, 200, 147, 2, 255, 209, 161, 6, 255, 207, 161, 4, 255, 208, 159, 4, 255, 207, 156, 7, 255, 209, 154, 12, 255, 210, 154, 12, 255, 206, 150, 1, 255, 205, 149, 0, 255, 208, 149, 10, 255, 207, 145, 4, 255, 208, 146, 4, 255, 208, 144, 6, 255, 204, 135, 10, 255, 202, 132, 12, 255, 201, 133, 3, 255, 200, 130, 10, 255, 201, 131, 4, 255, 197, 124, 7, 255, 197, 124, 6, 255, 200, 128, 2, 255, 199, 127, 4, 255, 196, 122, 1, 255, 196, 116, 12, 255, 193, 115, 7, 255, 192, 115, 8, 255, 188, 109, 15, 255, 183, 102, 11, 255, 185, 104, 8, 255, 180, 102, 2, 255, 172, 92, 3, 255, 162, 84, 3, 255, 145, 67, 7, 255, 136, 63, 7, 255, 128, 64, 5, 255, 130, 61, 1, 255, 119, 55, 3, 255, 110, 48, 5, 255, 128, 50, 8, 255, 129, 53, 2, 255, 132, 62, 4, 255, 135, 59, 5, 255, 117, 49, 4, 255, 114, 47, 5, 255, 109, 44, 7, 255, 102, 40, 1, 255, 99, 41, 2, 255, 89, 35, 3, 255, 98, 38, 3, 255, 110, 40, 6, 255, 106, 40, 3, 255, 98, 32, 1, 255, 89, 33, 2, 255, 104, 38, 3, 255, 108, 41, 6, 255, 110, 43, 2, 255, 111, 46, 1, 255, 109, 43, 2, 255, 108, 45, 4, 255, 103, 43, 1, 255, 105, 42, 4, 255, 103, 37, 1, 255, 89, 36, 6, 255, 130, 57, 6, 255, 160, 78, 5, 255, 159, 80, 4, 255, 167, 87, 4, 255, 169, 88, 3, 255, 167, 85, 0, 255, 165, 81, 2, 255, 165, 82, 3, 255, 168, 86, 4, 255, 167, 85, 1, 255, 168, 84, 1, 255, 171, 85, 3, 255, 169, 82, 4, 255, 164, 75, 2, 255, 158, 68, 4, 255, 141, 54, 2, 255, 125, 44, 2, 255, 120, 38, 2, 255, 121, 40, 6, 255, 123, 47, 1, 255, 124, 47, 6, 255, 121, 39, 6, 255, 116, 35, 2, 255, 114, 36, 5, 255, 115, 42, 2, 255, 118, 43, 1, 255, 114, 41, 4, 255, 108, 37, 4, 255, 111, 44, 3, 255, 115, 47, 2, 255, 120, 43, 3, 255, 122, 40, 7, 255, 112, 36, 3, 255, 102, 33, 3, 255, 102, 35, 3, 255, 116, 41, 2, 255, 124, 47, 2, 255, 126, 50, 3, 255, 122, 51, 4, 255, 121, 44, 4, 255, 120, 43, 4, 255, 121, 48, 4, 255, 110, 49, 1, 255, 98, 40, 3, 255, 90, 27, 1, 255, 87, 28, 6, 255, 81, 30, 3, 255, 78, 28, 0, 255, 84, 28, 4, 255, 76, 22, 4, 255, 67, 18, 1, 255, 68, 21, 1, 255, 72, 26, 4, 255, 69, 23, 6, 255, 47, 15, 5, 255, 46, 16, 6, 255, 63, 23, 5, 255, 62, 22, 4, 255, 51, 12, 1, 255, 53, 18, 3, 255, 53, 18, 2, 255, 53, 15, 6, 255, 44, 16, 8, 255, 54, 19, 5, 255, 69, 18, 5, 255, 68, 15, 2, 255, 70, 27, 5, 255, 86, 32, 2, 255, 94, 30, 1, 255, 92, 28, 2, 255, 87, 24, 3, 255, 83, 24, 3, 255, 81, 26, 4, 255, 81, 25, 2, 255, 77, 23, 1, 255, 71, 20, 2, 255, 68, 18, 2, 255, 72, 22, 6, 255, 2, 0, 0, 255, 4, 2, 1, 255, 3, 1, 2, 255, 3, 1, 0, 255, 5, 2, 1, 255, 4, 0, 1, 255, 4, 0, 0, 255, 7, 3, 1, 255, 7, 0, 0, 255, 15, 6, 3, 255, 18, 12, 9, 255, 12, 8, 6, 255, 9, 7, 5, 255, 11, 6, 6, 255, 13, 7, 6, 255, 13, 6, 3, 255, 18, 9, 7, 255, 16, 6, 5, 255, 19, 9, 7, 255, 17, 7, 4, 255, 15, 10, 6, 255, 14, 7, 5, 255, 17, 6, 2, 255, 18, 8, 2, 255, 18, 11, 9, 255, 17, 12, 10, 255, 18, 11, 7, 255, 20, 13, 9, 255, 20, 14, 8, 255, 18, 14, 10, 255, 23, 17, 9, 255, 30, 19, 14, 255, 35, 18, 8, 255, 34, 22, 9, 255, 27, 22, 7, 255, 26, 24, 9, 255, 32, 27, 13, 255, 37, 29, 8, 255, 36, 26, 8, 255, 35, 29, 6, 255, 33, 30, 6, 255, 41, 34, 2, 255, 46, 38, 1, 255, 57, 38, 4, 255, 46, 32, 6, 255, 51, 38, 14, 255, 76, 61, 9, 255, 60, 46, 0, 255, 63, 52, 10, 255, 65, 47, 4, 255, 62, 46, 4, 255, 63, 45, 4, 255, 70, 53, 1, 255, 79, 56, 8, 255, 72, 55, 5, 255, 66, 54, 1, 255, 67, 51, 1, 255, 67, 52, 0, 255, 71, 54, 1, 255, 71, 55, 1, 255, 68, 57, 3, 255, 153, 106, 6, 255, 195, 140, 4, 255, 191, 140, 1, 255, 192, 131, 5, 255, 163, 96, 4, 255, 117, 58, 3, 255, 77, 42, 1, 255, 72, 44, 6, 255, 70, 43, 5, 255, 72, 45, 0, 255, 73, 42, 5, 255, 73, 40, 5, 255, 75, 40, 3, 255, 69, 41, 3, 255, 68, 42, 2, 255, 77, 42, 2, 255, 70, 45, 2, 255, 68, 39, 3, 255, 70, 45, 3, 255, 74, 46, 4, 255, 68, 34, 5, 255, 68, 36, 3, 255, 61, 34, 8, 255, 67, 39, 3, 255, 65, 43, 1, 255, 69, 43, 6, 255, 68, 39, 6, 255, 69, 39, 2, 255, 76, 40, 3, 255, 77, 38, 2, 255, 81, 45, 3, 255, 78, 39, 4, 255, 81, 39, 8, 255, 81, 43, 1, 255, 89, 42, 2, 255, 88, 45, 7, 255, 87, 41, 1, 255, 88, 42, 1, 255, 86, 43, 2, 255, 86, 49, 3, 255, 87, 45, 4, 255, 86, 42, 0, 255, 88, 45, 0, 255, 90, 49, 5, 255, 88, 43, 4, 255, 94, 46, 2, 255, 88, 52, 2, 255, 83, 48, 2, 255, 89, 46, 3, 255, 92, 43, 6, 255, 89, 44, 5, 255, 87, 45, 1, 255, 82, 46, 3, 255, 91, 48, 3, 255, 91, 46, 0, 255, 88, 46, 2, 255, 87, 45, 4, 255, 92, 48, 7, 255, 92, 45, 3, 255, 99, 52, 6, 255, 92, 46, 3, 255, 91, 48, 6, 255, 94, 53, 6, 255, 96, 52, 4, 255, 94, 53, 2, 255, 100, 53, 3, 255, 98, 53, 3, 255, 97, 45, 5, 255, 98, 49, 4, 255, 94, 51, 3, 255, 96, 53, 7, 255, 99, 53, 4, 255, 103, 53, 7, 255, 97, 51, 7, 255, 95, 54, 4, 255, 97, 57, 4, 255, 96, 51, 3, 255, 105, 55, 5, 255, 113, 56, 5, 255, 118, 59, 0, 255, 111, 60, 2, 255, 111, 58, 14, 255, 144, 73, 13, 255, 152, 84, 4, 255, 162, 82, 8, 255, 173, 92, 9, 255, 178, 101, 7, 255, 181, 97, 14, 255, 181, 104, 11, 255, 180, 106, 6, 255, 176, 94, 6, 255, 169, 90, 5, 255, 179, 103, 16, 255, 177, 100, 6, 255, 178, 96, 3, 255, 164, 84, 5, 255, 167, 83, 15, 255, 180, 97, 8, 255, 175, 91, 7, 255, 171, 88, 4, 255, 166, 89, 6, 255, 167, 88, 11, 255, 165, 88, 5, 255, 156, 84, 11, 255, 148, 80, 16, 255, 153, 78, 8, 255, 140, 70, 2, 255, 123, 63, 15, 255, 110, 53, 15, 255, 116, 66, 12, 255, 112, 61, 8, 255, 103, 54, 6, 255, 120, 70, 10, 255, 132, 72, 16, 255, 128, 69, 7, 255, 115, 74, 3, 255, 103, 54, 7, 255, 99, 48, 7, 255, 96, 51, 6, 255, 96, 51, 3, 255, 94, 56, 9, 255, 95, 56, 8, 255, 116, 66, 12, 255, 129, 78, 11, 255, 128, 78, 5, 255, 133, 73, 11, 255, 131, 68, 7, 255, 133, 74, 11, 255, 134, 75, 6, 255, 124, 67, 7, 255, 126, 71, 11, 255, 149, 85, 10, 255, 162, 87, 13, 255, 161, 87, 5, 255, 171, 94, 8, 255, 174, 98, 11, 255, 179, 103, 7, 255, 189, 106, 10, 255, 192, 110, 5, 255, 191, 111, 7, 255, 189, 110, 8, 255, 188, 107, 7, 255, 191, 113, 11, 255, 194, 119, 6, 255, 194, 120, 10, 255, 199, 128, 4, 255, 198, 126, 9, 255, 195, 122, 4, 255, 195, 117, 5, 255, 200, 122, 6, 255, 207, 124, 7, 255, 209, 123, 13, 255, 206, 125, 0, 255, 207, 130, 6, 255, 205, 129, 6, 255, 200, 120, 14, 255, 205, 128, 4, 255, 206, 132, 3, 255, 206, 128, 5, 255, 212, 134, 5, 255, 210, 135, 8, 255, 207, 126, 5, 255, 204, 120, 9, 255, 190, 116, 11, 255, 193, 124, 9, 255, 191, 121, 9, 255, 204, 132, 14, 255, 195, 123, 2, 255, 211, 138, 12, 255, 222, 161, 12, 255, 219, 162, 6, 255, 212, 149, 4, 255, 185, 115, 5, 255, 201, 135, 6, 255, 205, 138, 11, 255, 202, 138, 3, 255, 205, 146, 5, 255, 221, 170, 3, 255, 223, 178, 1, 255, 218, 172, 4, 255, 215, 168, 5, 255, 227, 180, 7, 255, 226, 179, 8, 255, 224, 177, 5, 255, 231, 183, 3, 255, 222, 171, 11, 255, 210, 157, 2, 255, 221, 171, 1, 255, 224, 176, 3, 255, 221, 177, 2, 255, 215, 173, 1, 255, 212, 166, 3, 255, 211, 164, 3, 255, 211, 165, 5, 255, 207, 165, 2, 255, 204, 155, 3, 255, 200, 145, 13, 255, 207, 154, 8, 255, 201, 152, 1, 255, 206, 159, 5, 255, 207, 160, 6, 255, 206, 156, 6, 255, 206, 154, 2, 255, 212, 155, 7, 255, 209, 151, 11, 255, 202, 142, 6, 255, 210, 152, 9, 255, 206, 148, 11, 255, 204, 146, 2, 255, 208, 147, 8, 255, 207, 147, 1, 255, 204, 140, 9, 255, 205, 136, 18, 255, 209, 139, 5, 255, 205, 137, 10, 255, 202, 133, 9, 255, 203, 133, 8, 255, 202, 131, 5, 255, 198, 127, 2, 255, 197, 124, 1, 255, 197, 122, 5, 255, 192, 116, 12, 255, 191, 116, 11, 255, 190, 113, 10, 255, 185, 107, 5, 255, 185, 107, 6, 255, 184, 107, 6, 255, 177, 100, 3, 255, 165, 87, 0, 255, 161, 78, 3, 255, 155, 68, 9, 255, 154, 69, 9, 255, 147, 68, 4, 255, 149, 72, 6, 255, 136, 61, 1, 255, 127, 58, 2, 255, 128, 59, 8, 255, 130, 55, 6, 255, 132, 56, 0, 255, 126, 50, 5, 255, 115, 45, 1, 255, 103, 44, 2, 255, 108, 47, 4, 255, 106, 42, 5, 255, 100, 41, 8, 255, 91, 34, 2, 255, 98, 39, 1, 255, 108, 42, 7, 255, 108, 41, 3, 255, 98, 33, 0, 255, 97, 39, 6, 255, 107, 42, 5, 255, 112, 47, 4, 255, 110, 44, 0, 255, 114, 46, 2, 255, 111, 46, 2, 255, 108, 42, 2, 255, 107, 38, 3, 255, 105, 42, 1, 255, 111, 47, 5, 255, 101, 44, 3, 255, 99, 40, 6, 255, 122, 52, 7, 255, 151, 76, 7, 255, 162, 83, 2, 255, 165, 81, 0, 255, 169, 84, 3, 255, 168, 85, 3, 255, 167, 84, 1, 255, 172, 81, 2, 255, 171, 76, 4, 255, 163, 72, 4, 255, 147, 64, 0, 255, 132, 57, 3, 255, 126, 49, 4, 255, 121, 42, 3, 255, 118, 41, 5, 255, 117, 43, 0, 255, 123, 41, 3, 255, 122, 43, 6, 255, 120, 46, 3, 255, 116, 42, 2, 255, 113, 37, 2, 255, 109, 37, 1, 255, 111, 41, 3, 255, 116, 42, 2, 255, 118, 41, 0, 255, 120, 45, 4, 255, 123, 45, 4, 255, 123, 46, 7, 255, 117, 49, 2, 255, 122, 42, 6, 255, 117, 41, 5, 255, 113, 40, 3, 255, 104, 35, 2, 255, 102, 36, 1, 255, 119, 42, 3, 255, 120, 46, 5, 255, 121, 47, 2, 255, 124, 48, 0, 255, 123, 48, 2, 255, 116, 44, 2, 255, 117, 46, 5, 255, 119, 52, 7, 255, 114, 43, 5, 255, 101, 31, 2, 255, 87, 27, 2, 255, 79, 24, 0, 255, 76, 27, 2, 255, 79, 24, 5, 255, 78, 19, 7, 255, 73, 21, 0, 255, 71, 26, 2, 255, 72, 22, 6, 255, 65, 19, 4, 255, 60, 21, 4, 255, 64, 21, 3, 255, 70, 22, 0, 255, 76, 23, 2, 255, 71, 24, 2, 255, 69, 24, 2, 255, 62, 19, 0, 255, 56, 19, 4, 255, 42, 14, 2, 255, 48, 16, 1, 255, 61, 21, 6, 255, 66, 24, 7, 255, 67, 24, 2, 255, 85, 30, 4, 255, 88, 28, 4, 255, 86, 26, 5, 255, 81, 23, 3, 255, 84, 29, 3, 255, 84, 30, 1, 255, 85, 30, 3, 255, 79, 24, 3, 255, 78, 24, 7, 255, 70, 20, 3, 255, 65, 21, 1, 255, 3, 2, 0, 255, 2, 0, 1, 255, 2, 0, 1, 255, 3, 0, 0, 255, 6, 2, 1, 255, 6, 1, 1, 255, 7, 1, 2, 255, 5, 1, 0, 255, 6, 0, 0, 255, 9, 1, 1, 255, 16, 9, 7, 255, 13, 8, 5, 255, 12, 8, 6, 255, 13, 9, 8, 255, 12, 6, 6, 255, 15, 8, 7, 255, 14, 6, 3, 255, 17, 9, 6, 255, 16, 8, 5, 255, 14, 7, 1, 255, 16, 7, 5, 255, 16, 7, 6, 255, 19, 8, 2, 255, 19, 9, 0, 255, 19, 12, 7, 255, 19, 15, 12, 255, 18, 16, 10, 255, 19, 17, 6, 255, 20, 19, 8, 255, 19, 17, 13, 255, 24, 19, 8, 255, 29, 21, 9, 255, 25, 18, 10, 255, 29, 23, 9, 255, 31, 26, 9, 255, 31, 25, 7, 255, 33, 25, 13, 255, 31, 26, 8, 255, 32, 28, 18, 255, 37, 31, 15, 255, 39, 39, 1, 255, 43, 32, 4, 255, 47, 34, 7, 255, 47, 40, 1, 255, 48, 37, 3, 255, 75, 51, 12, 255, 63, 53, 11, 255, 55, 50, 5, 255, 65, 53, 6, 255, 63, 54, 1, 255, 67, 51, 9, 255, 70, 45, 5, 255, 71, 54, 16, 255, 73, 57, 9, 255, 67, 54, 0, 255, 58, 52, 7, 255, 61, 50, 4, 255, 67, 52, 7, 255, 70, 54, 3, 255, 65, 50, 0, 255, 84, 69, 6, 255, 174, 125, 2, 255, 190, 132, 4, 255, 185, 124, 11, 255, 165, 107, 2, 255, 126, 76, 1, 255, 94, 58, 2, 255, 69, 47, 2, 255, 67, 43, 7, 255, 70, 42, 2, 255, 73, 45, 4, 255, 72, 43, 2, 255, 66, 40, 2, 255, 64, 45, 2, 255, 70, 44, 1, 255, 72, 37, 3, 255, 72, 37, 2, 255, 66, 38, 1, 255, 68, 40, 2, 255, 71, 39, 4, 255, 68, 37, 1, 255, 64, 38, 2, 255, 64, 38, 3, 255, 61, 36, 6, 255, 74, 42, 2, 255, 69, 45, 6, 255, 76, 43, 2, 255, 76, 43, 1, 255, 81, 41, 4, 255, 91, 44, 5, 255, 86, 41, 2, 255, 84, 41, 0, 255, 82, 42, 5, 255, 81, 42, 10, 255, 83, 44, 0, 255, 84, 44, 6, 255, 86, 46, 4, 255, 92, 42, 0, 255, 94, 43, 7, 255, 85, 42, 7, 255, 91, 44, 4, 255, 93, 50, 5, 255, 83, 45, 1, 255, 87, 47, 5, 255, 86, 48, 4, 255, 87, 44, 1, 255, 93, 46, 3, 255, 92, 47, 1, 255, 93, 47, 1, 255, 96, 47, 0, 255, 94, 44, 2, 255, 91, 46, 4, 255, 92, 47, 1, 255, 86, 46, 5, 255, 90, 49, 3, 255, 100, 51, 5, 255, 95, 49, 3, 255, 91, 47, 2, 255, 96, 50, 4, 255, 95, 45, 1, 255, 99, 51, 5, 255, 97, 50, 4, 255, 94, 52, 3, 255, 94, 52, 3, 255, 97, 52, 3, 255, 94, 54, 3, 255, 102, 52, 4, 255, 102, 52, 3, 255, 94, 51, 3, 255, 95, 50, 2, 255, 98, 51, 2, 255, 102, 55, 4, 255, 99, 54, 1, 255, 99, 56, 2, 255, 97, 54, 1, 255, 97, 57, 3, 255, 96, 58, 1, 255, 98, 58, 3, 255, 99, 53, 2, 255, 103, 55, 3, 255, 105, 55, 1, 255, 100, 54, 11, 255, 108, 59, 9, 255, 125, 71, 3, 255, 108, 60, 6, 255, 138, 69, 16, 255, 141, 69, 10, 255, 151, 82, 23, 255, 160, 83, 5, 255, 156, 84, 8, 255, 168, 92, 13, 255, 164, 81, 7, 255, 153, 77, 13, 255, 159, 87, 7, 255, 161, 90, 9, 255, 158, 85, 3, 255, 154, 82, 3, 255, 144, 77, 0, 255, 139, 77, 4, 255, 143, 69, 10, 255, 134, 65, 7, 255, 131, 66, 7, 255, 118, 56, 6, 255, 130, 66, 10, 255, 131, 71, 6, 255, 102, 58, 10, 255, 95, 51, 4, 255, 119, 66, 11, 255, 111, 62, 12, 255, 82, 39, 12, 255, 101, 63, 8, 255, 99, 49, 14, 255, 100, 60, 6, 255, 92, 50, 4, 255, 93, 51, 10, 255, 107, 64, 18, 255, 84, 47, 11, 255, 81, 50, 3, 255, 87, 50, 9, 255, 90, 48, 10, 255, 91, 49, 9, 255, 113, 61, 13, 255, 122, 74, 8, 255, 131, 68, 19, 255, 132, 64, 12, 255, 120, 65, 8, 255, 128, 62, 6, 255, 140, 70, 10, 255, 135, 75, 14, 255, 141, 86, 9, 255, 161, 91, 10, 255, 172, 94, 18, 255, 180, 102, 10, 255, 182, 106, 10, 255, 174, 105, 3, 255, 188, 112, 3, 255, 193, 113, 14, 255, 187, 111, 15, 255, 196, 115, 14, 255, 198, 116, 12, 255, 199, 118, 11, 255, 198, 121, 7, 255, 198, 121, 8, 255, 198, 119, 13, 255, 199, 121, 1, 255, 199, 123, 2, 255, 204, 130, 3, 255, 202, 128, 6, 255, 201, 127, 5, 255, 205, 126, 9, 255, 210, 129, 5, 255, 210, 130, 8, 255, 208, 128, 13, 255, 208, 127, 6, 255, 207, 127, 10, 255, 211, 137, 1, 255, 209, 135, 9, 255, 212, 140, 7, 255, 208, 136, 5, 255, 209, 127, 15, 255, 215, 132, 7, 255, 206, 129, 7, 255, 200, 118, 10, 255, 197, 119, 15, 255, 204, 137, 7, 255, 199, 130, 12, 255, 207, 139, 7, 255, 195, 125, 16, 255, 197, 130, 9, 255, 208, 141, 3, 255, 219, 159, 1, 255, 218, 159, 5, 255, 206, 146, 10, 255, 176, 115, 9, 255, 158, 97, 12, 255, 186, 124, 14, 255, 209, 145, 12, 255, 208, 149, 10, 255, 213, 158, 7, 255, 219, 170, 3, 255, 218, 172, 1, 255, 215, 167, 8, 255, 221, 175, 5, 255, 229, 184, 8, 255, 220, 176, 2, 255, 227, 183, 2, 255, 223, 174, 1, 255, 212, 158, 0, 255, 210, 157, 4, 255, 218, 172, 2, 255, 222, 176, 0, 255, 217, 173, 0, 255, 213, 169, 3, 255, 216, 168, 10, 255, 212, 165, 10, 255, 201, 157, 4, 255, 198, 152, 1, 255, 196, 147, 5, 255, 202, 155, 5, 255, 197, 150, 4, 255, 198, 151, 3, 255, 205, 158, 7, 255, 205, 155, 1, 255, 207, 155, 1, 255, 208, 153, 1, 255, 204, 146, 7, 255, 198, 139, 6, 255, 206, 147, 11, 255, 206, 146, 15, 255, 204, 148, 5, 255, 207, 147, 4, 255, 207, 146, 6, 255, 207, 145, 4, 255, 206, 142, 8, 255, 207, 137, 5, 255, 206, 137, 5, 255, 204, 135, 6, 255, 203, 134, 7, 255, 199, 129, 5, 255, 198, 127, 6, 255, 197, 122, 7, 255, 197, 120, 9, 255, 190, 117, 4, 255, 188, 115, 7, 255, 189, 115, 11, 255, 187, 109, 6, 255, 185, 110, 6, 255, 183, 110, 8, 255, 176, 100, 4, 255, 175, 97, 9, 255, 164, 83, 2, 255, 161, 79, 4, 255, 162, 83, 3, 255, 158, 80, 2, 255, 163, 86, 6, 255, 156, 81, 7, 255, 154, 75, 7, 255, 149, 72, 6, 255, 131, 57, 1, 255, 119, 49, 0, 255, 122, 52, 4, 255, 123, 47, 8, 255, 113, 47, 1, 255, 115, 46, 4, 255, 103, 39, 2, 255, 91, 37, 1, 255, 96, 40, 4, 255, 99, 39, 5, 255, 99, 37, 0, 255, 106, 42, 3, 255, 104, 40, 7, 255, 99, 34, 1, 255, 105, 42, 4, 255, 109, 44, 5, 255, 117, 47, 3, 255, 117, 44, 1, 255, 115, 41, 4, 255, 117, 43, 8, 255, 114, 39, 2, 255, 115, 45, 6, 255, 111, 44, 5, 255, 110, 47, 4, 255, 95, 33, 1, 255, 104, 40, 4, 255, 141, 68, 6, 255, 163, 82, 6, 255, 162, 81, 7, 255, 156, 73, 2, 255, 152, 68, 2, 255, 151, 67, 6, 255, 147, 56, 6, 255, 137, 49, 5, 255, 127, 48, 4, 255, 121, 42, 2, 255, 112, 41, 1, 255, 115, 45, 0, 255, 121, 48, 3, 255, 113, 42, 2, 255, 119, 46, 2, 255, 120, 51, 2, 255, 115, 48, 2, 255, 113, 44, 4, 255, 111, 42, 5, 255, 110, 40, 3, 255, 116, 42, 4, 255, 121, 46, 4, 255, 117, 44, 3, 255, 114, 46, 1, 255, 121, 51, 1, 255, 121, 48, 5, 255, 120, 46, 5, 255, 126, 50, 4, 255, 119, 48, 2, 255, 105, 44, 0, 255, 113, 47, 2, 255, 125, 48, 7, 255, 126, 45, 3, 255, 131, 46, 1, 255, 127, 43, 0, 255, 123, 41, 4, 255, 120, 38, 2, 255, 121, 38, 0, 255, 125, 46, 1, 255, 121, 47, 1, 255, 112, 42, 1, 255, 112, 41, 2, 255, 105, 36, 1, 255, 94, 34, 3, 255, 88, 29, 5, 255, 80, 26, 3, 255, 82, 25, 2, 255, 82, 20, 1, 255, 79, 21, 1, 255, 69, 21, 0, 255, 66, 17, 1, 255, 64, 18, 2, 255, 63, 23, 2, 255, 74, 27, 5, 255, 74, 23, 2, 255, 72, 21, 0, 255, 74, 24, 2, 255, 72, 25, 2, 255, 64, 20, 2, 255, 63, 21, 8, 255, 64, 17, 3, 255, 60, 17, 1, 255, 65, 23, 1, 255, 76, 28, 2, 255, 83, 28, 0, 255, 86, 31, 0, 255, 89, 29, 3, 255, 83, 24, 2, 255, 83, 23, 0, 255, 92, 26, 4, 255, 89, 27, 3, 255, 88, 31, 2, 255, 93, 31, 3, 255, 88, 28, 1, 255, 89, 28, 1, 255, 89, 26, 0, 255, 8, 4, 1, 255, 4, 0, 1, 255, 3, 0, 1, 255, 6, 3, 2, 255, 5, 1, 0, 255, 6, 1, 0, 255, 7, 0, 0, 255, 5, 0, 0, 255, 7, 2, 1, 255, 8, 3, 0, 255, 8, 3, 2, 255, 17, 8, 9, 255, 16, 7, 9, 255, 14, 9, 9, 255, 11, 5, 5, 255, 14, 7, 7, 255, 14, 9, 7, 255, 13, 8, 4, 255, 12, 9, 4, 255, 16, 10, 6, 255, 18, 9, 7, 255, 18, 10, 7, 255, 18, 10, 2, 255, 18, 11, 0, 255, 17, 11, 1, 255, 16, 14, 5, 255, 14, 14, 9, 255, 17, 16, 9, 255, 18, 19, 8, 255, 22, 21, 11, 255, 24, 19, 9, 255, 25, 16, 10, 255, 24, 18, 10, 255, 28, 24, 11, 255, 32, 29, 14, 255, 31, 28, 14, 255, 32, 25, 13, 255, 35, 28, 10, 255, 38, 31, 11, 255, 38, 36, 7, 255, 43, 35, 4, 255, 45, 36, 1, 255, 54, 42, 4, 255, 47, 39, 6, 255, 57, 49, 7, 255, 78, 58, 4, 255, 65, 49, 7, 255, 67, 59, 3, 255, 66, 57, 3, 255, 61, 42, 0, 255, 54, 34, 0, 255, 48, 35, 1, 255, 63, 42, 7, 255, 72, 58, 8, 255, 67, 51, 3, 255, 70, 51, 7, 255, 65, 52, 3, 255, 70, 53, 6, 255, 72, 56, 2, 255, 67, 51, 1, 255, 116, 85, 4, 255, 187, 127, 1, 255, 169, 115, 4, 255, 165, 100, 2, 255, 149, 85, 3, 255, 122, 66, 7, 255, 95, 50, 7, 255, 72, 47, 3, 255, 67, 39, 5, 255, 65, 45, 1, 255, 73, 39, 4, 255, 68, 42, 5, 255, 67, 45, 5, 255, 66, 40, 3, 255, 73, 41, 5, 255, 71, 42, 3, 255, 62, 39, 4, 255, 75, 42, 5, 255, 70, 37, 10, 255, 65, 33, 2, 255, 71, 37, 2, 255, 75, 38, 7, 255, 69, 37, 5, 255, 49, 31, 1, 255, 71, 43, 5, 255, 79, 39, 7, 255, 83, 40, 4, 255, 77, 46, 0, 255, 79, 45, 3, 255, 76, 41, 2, 255, 85, 44, 4, 255, 86, 42, 1, 255, 80, 41, 4, 255, 74, 39, 2, 255, 82, 41, 2, 255, 80, 46, 4, 255, 80, 39, 2, 255, 91, 52, 5, 255, 95, 54, 7, 255, 89, 44, 5, 255, 85, 50, 6, 255, 91, 48, 3, 255, 96, 47, 3, 255, 89, 43, 3, 255, 85, 43, 0, 255, 87, 51, 1, 255, 86, 48, 7, 255, 88, 43, 7, 255, 91, 49, 4, 255, 94, 52, 0, 255, 100, 46, 7, 255, 92, 43, 6, 255, 87, 46, 1, 255, 84, 46, 3, 255, 98, 49, 7, 255, 92, 47, 3, 255, 92, 44, 0, 255, 100, 48, 1, 255, 100, 52, 2, 255, 94, 49, 0, 255, 97, 50, 6, 255, 94, 50, 5, 255, 93, 51, 0, 255, 100, 51, 2, 255, 103, 51, 4, 255, 95, 51, 3, 255, 100, 50, 4, 255, 104, 53, 5, 255, 99, 56, 8, 255, 97, 52, 5, 255, 100, 51, 4, 255, 105, 54, 6, 255, 99, 50, 2, 255, 99, 55, 4, 255, 101, 54, 3, 255, 102, 55, 2, 255, 100, 58, 2, 255, 100, 57, 3, 255, 101, 55, 4, 255, 101, 55, 4, 255, 102, 55, 4, 255, 107, 53, 4, 255, 104, 57, 4, 255, 100, 54, 8, 255, 108, 65, 4, 255, 121, 67, 5, 255, 112, 53, 6, 255, 106, 47, 14, 255, 107, 57, 15, 255, 105, 57, 11, 255, 119, 58, 7, 255, 100, 53, 4, 255, 97, 55, 7, 255, 114, 58, 7, 255, 95, 47, 8, 255, 98, 52, 4, 255, 98, 54, 5, 255, 131, 72, 5, 255, 107, 58, 3, 255, 84, 44, 7, 255, 90, 51, 4, 255, 83, 50, 4, 255, 91, 54, 11, 255, 136, 83, 12, 255, 128, 68, 9, 255, 99, 50, 4, 255, 84, 52, 5, 255, 96, 50, 3, 255, 106, 63, 6, 255, 93, 53, 4, 255, 92, 44, 4, 255, 85, 45, 10, 255, 90, 54, 11, 255, 107, 60, 8, 255, 146, 81, 6, 255, 154, 78, 7, 255, 112, 61, 6, 255, 95, 56, 7, 255, 105, 63, 9, 255, 118, 67, 14, 255, 149, 79, 16, 255, 154, 76, 15, 255, 153, 79, 5, 255, 164, 81, 9, 255, 158, 76, 12, 255, 147, 74, 10, 255, 159, 84, 14, 255, 171, 94, 12, 255, 174, 95, 12, 255, 188, 103, 15, 255, 193, 105, 11, 255, 188, 104, 8, 255, 187, 110, 6, 255, 190, 109, 12, 255, 190, 108, 15, 255, 201, 123, 9, 255, 201, 125, 12, 255, 201, 122, 16, 255, 206, 122, 8, 255, 207, 123, 4, 255, 205, 124, 6, 255, 208, 126, 7, 255, 207, 126, 7, 255, 205, 124, 8, 255, 207, 125, 16, 255, 209, 130, 7, 255, 210, 134, 6, 255, 207, 132, 8, 255, 209, 133, 9, 255, 212, 134, 9, 255, 212, 134, 2, 255, 212, 136, 5, 255, 210, 135, 8, 255, 211, 138, 6, 255, 209, 135, 13, 255, 213, 140, 9, 255, 210, 137, 3, 255, 212, 140, 8, 255, 211, 144, 11, 255, 213, 138, 11, 255, 212, 135, 11, 255, 197, 125, 16, 255, 198, 128, 12, 255, 207, 143, 8, 255, 200, 133, 8, 255, 201, 135, 10, 255, 219, 159, 9, 255, 200, 141, 7, 255, 189, 127, 17, 255, 201, 142, 17, 255, 221, 169, 11, 255, 215, 159, 5, 255, 206, 145, 6, 255, 202, 143, 15, 255, 165, 106, 10, 255, 189, 129, 21, 255, 209, 149, 7, 255, 208, 157, 0, 255, 217, 165, 2, 255, 221, 172, 6, 255, 221, 172, 5, 255, 217, 167, 8, 255, 222, 175, 14, 255, 230, 182, 2, 255, 223, 178, 6, 255, 211, 165, 8, 255, 221, 168, 5, 255, 211, 152, 7, 255, 214, 162, 4, 255, 224, 177, 6, 255, 213, 165, 2, 255, 216, 172, 2, 255, 218, 172, 2, 255, 219, 173, 2, 255, 206, 158, 5, 255, 195, 143, 18, 255, 199, 155, 6, 255, 200, 156, 4, 255, 201, 155, 5, 255, 197, 146, 3, 255, 205, 154, 8, 255, 205, 156, 15, 255, 202, 151, 10, 255, 207, 155, 6, 255, 204, 148, 6, 255, 202, 145, 8, 255, 202, 148, 0, 255, 205, 149, 8, 255, 209, 153, 6, 255, 206, 149, 9, 255, 208, 147, 10, 255, 207, 146, 1, 255, 206, 144, 4, 255, 206, 140, 10, 255, 205, 138, 6, 255, 204, 138, 9, 255, 204, 135, 9, 255, 202, 128, 6, 255, 199, 121, 6, 255, 196, 120, 7, 255, 190, 118, 2, 255, 189, 118, 3, 255, 190, 116, 8, 255, 189, 116, 10, 255, 188, 115, 9, 255, 188, 113, 7, 255, 184, 111, 7, 255, 180, 108, 6, 255, 183, 109, 8, 255, 183, 108, 7, 255, 175, 99, 2, 255, 165, 90, 2, 255, 156, 81, 2, 255, 149, 74, 9, 255, 157, 79, 6, 255, 165, 90, 3, 255, 163, 85, 6, 255, 157, 75, 2, 255, 135, 62, 0, 255, 117, 55, 6, 255, 116, 51, 5, 255, 117, 46, 4, 255, 114, 46, 0, 255, 121, 52, 8, 255, 106, 39, 2, 255, 97, 37, 3, 255, 99, 39, 4, 255, 99, 38, 5, 255, 97, 39, 1, 255, 104, 43, 7, 255, 102, 35, 5, 255, 103, 34, 2, 255, 104, 42, 5, 255, 104, 40, 0, 255, 115, 46, 2, 255, 112, 41, 0, 255, 117, 39, 3, 255, 116, 40, 3, 255, 114, 44, 3, 255, 117, 47, 3, 255, 112, 46, 3, 255, 106, 40, 4, 255, 110, 40, 3, 255, 101, 39, 3, 255, 121, 54, 7, 255, 138, 57, 3, 255, 129, 53, 4, 255, 127, 49, 3, 255, 124, 45, 2, 255, 120, 40, 2, 255, 117, 34, 6, 255, 117, 37, 6, 255, 113, 42, 3, 255, 113, 40, 4, 255, 113, 45, 5, 255, 120, 46, 2, 255, 122, 45, 1, 255, 116, 43, 1, 255, 121, 45, 2, 255, 122, 42, 5, 255, 125, 43, 7, 255, 120, 40, 1, 255, 116, 44, 0, 255, 116, 50, 3, 255, 118, 48, 2, 255, 119, 46, 2, 255, 119, 47, 6, 255, 116, 46, 2, 255, 123, 50, 2, 255, 122, 47, 8, 255, 118, 46, 3, 255, 114, 44, 0, 255, 112, 41, 1, 255, 112, 48, 3, 255, 118, 45, 4, 255, 129, 40, 7, 255, 130, 41, 7, 255, 130, 44, 4, 255, 137, 54, 2, 255, 139, 58, 4, 255, 132, 49, 3, 255, 128, 45, 3, 255, 131, 49, 4, 255, 126, 49, 1, 255, 117, 47, 0, 255, 114, 49, 3, 255, 109, 44, 2, 255, 95, 37, 1, 255, 87, 31, 7, 255, 82, 28, 5, 255, 83, 29, 1, 255, 83, 29, 0, 255, 81, 24, 5, 255, 70, 23, 4, 255, 68, 21, 0, 255, 74, 21, 5, 255, 69, 20, 5, 255, 77, 24, 2, 255, 76, 26, 1, 255, 69, 22, 2, 255, 74, 21, 6, 255, 70, 21, 2, 255, 64, 20, 0, 255, 71, 21, 3, 255, 75, 24, 6, 255, 66, 24, 3, 255, 67, 24, 1, 255, 78, 26, 1, 255, 89, 29, 2, 255, 87, 30, 3, 255, 81, 27, 1, 255, 86, 28, 2, 255, 87, 26, 1, 255, 84, 23, 2, 255, 85, 22, 3, 255, 90, 27, 0, 255, 96, 34, 0, 255, 96, 30, 3, 255, 96, 31, 6, 255, 93, 27, 4, 255, 13, 7, 4, 255, 7, 2, 2, 255, 3, 1, 1, 255, 3, 3, 2, 255, 4, 0, 0, 255, 4, 0, 0, 255, 6, 1, 1, 255, 8, 2, 2, 255, 6, 2, 1, 255, 7, 4, 3, 255, 5, 1, 0, 255, 14, 6, 6, 255, 19, 9, 10, 255, 16, 8, 9, 255, 15, 7, 7, 255, 15, 6, 7, 255, 15, 8, 7, 255, 14, 10, 6, 255, 13, 9, 5, 255, 15, 9, 5, 255, 16, 10, 6, 255, 20, 12, 8, 255, 19, 12, 4, 255, 17, 12, 2, 255, 15, 12, 3, 255, 20, 15, 6, 255, 21, 15, 7, 255, 21, 13, 6, 255, 23, 18, 6, 255, 24, 19, 6, 255, 26, 19, 4, 255, 34, 22, 14, 255, 35, 23, 15, 255, 37, 25, 11, 255, 36, 27, 10, 255, 36, 28, 13, 255, 37, 30, 15, 255, 41, 32, 13, 255, 46, 37, 7, 255, 47, 34, 0, 255, 58, 32, 9, 255, 49, 37, 12, 255, 42, 36, 3, 255, 54, 41, 3, 255, 89, 64, 7, 255, 81, 70, 0, 255, 77, 74, 7, 255, 75, 74, 2, 255, 58, 50, 0, 255, 73, 65, 17, 255, 85, 85, 54, 255, 87, 85, 42, 255, 90, 82, 4, 255, 80, 70, 9, 255, 72, 64, 8, 255, 76, 55, 3, 255, 74, 58, 4, 255, 75, 59, 4, 255, 71, 49, 4, 255, 80, 59, 5, 255, 155, 100, 3, 255, 174, 117, 7, 255, 171, 114, 2, 255, 162, 97, 2, 255, 145, 82, 4, 255, 110, 57, 5, 255, 79, 37, 9, 255, 71, 46, 3, 255, 70, 39, 2, 255, 68, 41, 2, 255, 82, 39, 6, 255, 66, 44, 1, 255, 63, 44, 1, 255, 77, 39, 3, 255, 74, 38, 2, 255, 69, 37, 2, 255, 64, 39, 2, 255, 62, 38, 7, 255, 65, 35, 5, 255, 61, 37, 2, 255, 60, 36, 2, 255, 66, 39, 6, 255, 56, 34, 0, 255, 80, 43, 5, 255, 84, 44, 2, 255, 83, 46, 8, 255, 87, 42, 7, 255, 88, 43, 3, 255, 82, 43, 4, 255, 67, 40, 8, 255, 77, 37, 2, 255, 79, 43, 5, 255, 79, 43, 4, 255, 86, 41, 2, 255, 82, 49, 4, 255, 79, 44, 1, 255, 82, 41, 3, 255, 86, 46, 2, 255, 86, 45, 0, 255, 90, 45, 3, 255, 88, 50, 0, 255, 92, 46, 3, 255, 91, 47, 3, 255, 84, 44, 0, 255, 96, 45, 3, 255, 99, 46, 5, 255, 87, 42, 2, 255, 87, 41, 3, 255, 84, 45, 5, 255, 89, 49, 6, 255, 85, 46, 1, 255, 84, 43, 2, 255, 88, 45, 5, 255, 90, 45, 2, 255, 96, 49, 0, 255, 89, 50, 3, 255, 93, 45, 3, 255, 99, 45, 2, 255, 97, 47, 3, 255, 93, 51, 5, 255, 92, 50, 3, 255, 92, 51, 3, 255, 96, 53, 7, 255, 96, 49, 1, 255, 99, 51, 3, 255, 97, 53, 3, 255, 99, 52, 4, 255, 103, 51, 4, 255, 99, 51, 3, 255, 98, 50, 4, 255, 101, 53, 5, 255, 102, 53, 3, 255, 105, 55, 5, 255, 103, 51, 2, 255, 105, 51, 4, 255, 101, 50, 2, 255, 105, 55, 6, 255, 102, 51, 2, 255, 107, 55, 7, 255, 105, 55, 6, 255, 105, 56, 5, 255, 108, 55, 4, 255, 104, 53, 3, 255, 111, 56, 6, 255, 107, 53, 8, 255, 104, 57, 3, 255, 119, 63, 5, 255, 104, 56, 7, 255, 107, 63, 10, 255, 131, 72, 7, 255, 106, 58, 9, 255, 88, 55, 5, 255, 132, 78, 14, 255, 106, 53, 3, 255, 75, 46, 6, 255, 86, 50, 8, 255, 105, 60, 9, 255, 135, 74, 7, 255, 111, 59, 10, 255, 92, 44, 13, 255, 89, 51, 5, 255, 89, 52, 7, 255, 104, 56, 7, 255, 113, 64, 9, 255, 92, 48, 13, 255, 89, 44, 11, 255, 93, 55, 10, 255, 92, 56, 10, 255, 84, 47, 6, 255, 84, 47, 5, 255, 93, 57, 10, 255, 122, 76, 16, 255, 152, 89, 7, 255, 157, 83, 3, 255, 154, 73, 14, 255, 136, 67, 12, 255, 144, 77, 5, 255, 154, 79, 16, 255, 166, 90, 9, 255, 166, 92, 8, 255, 168, 91, 17, 255, 161, 79, 13, 255, 154, 82, 9, 255, 159, 92, 17, 255, 163, 92, 14, 255, 168, 94, 13, 255, 178, 99, 9, 255, 188, 103, 2, 255, 192, 103, 8, 255, 184, 97, 10, 255, 185, 102, 6, 255, 194, 113, 9, 255, 199, 117, 12, 255, 203, 121, 11, 255, 206, 124, 8, 255, 206, 125, 8, 255, 205, 125, 9, 255, 207, 128, 12, 255, 209, 127, 9, 255, 210, 128, 6, 255, 209, 127, 7, 255, 210, 127, 17, 255, 211, 132, 8, 255, 211, 133, 1, 255, 214, 133, 15, 255, 213, 134, 13, 255, 213, 137, 9, 255, 212, 139, 8, 255, 213, 140, 9, 255, 213, 139, 8, 255, 216, 141, 7, 255, 216, 141, 16, 255, 215, 141, 11, 255, 215, 144, 5, 255, 216, 144, 7, 255, 217, 142, 23, 255, 212, 139, 2, 255, 219, 147, 6, 255, 216, 149, 9, 255, 213, 143, 16, 255, 210, 145, 6, 255, 205, 146, 5, 255, 213, 152, 5, 255, 215, 154, 1, 255, 211, 142, 9, 255, 209, 143, 8, 255, 218, 157, 4, 255, 207, 145, 2, 255, 197, 130, 16, 255, 205, 142, 12, 255, 223, 165, 9, 255, 210, 153, 5, 255, 195, 139, 18, 255, 208, 160, 9, 255, 192, 139, 19, 255, 191, 138, 10, 255, 195, 142, 6, 255, 208, 158, 6, 255, 211, 161, 2, 255, 212, 161, 4, 255, 218, 167, 7, 255, 216, 167, 0, 255, 220, 172, 5, 255, 221, 171, 2, 255, 224, 175, 3, 255, 226, 175, 11, 255, 200, 145, 12, 255, 197, 140, 7, 255, 214, 162, 7, 255, 219, 169, 1, 255, 213, 165, 9, 255, 214, 167, 4, 255, 216, 171, 2, 255, 218, 172, 9, 255, 198, 147, 5, 255, 193, 141, 7, 255, 203, 158, 1, 255, 200, 152, 4, 255, 200, 149, 5, 255, 201, 149, 2, 255, 204, 153, 2, 255, 201, 157, 5, 255, 205, 157, 11, 255, 206, 152, 15, 255, 202, 147, 14, 255, 202, 146, 9, 255, 204, 151, 7, 255, 204, 151, 5, 255, 206, 152, 10, 255, 206, 150, 11, 255, 208, 147, 6, 255, 206, 146, 5, 255, 205, 144, 4, 255, 203, 139, 5, 255, 203, 136, 8, 255, 201, 135, 11, 255, 199, 130, 3, 255, 199, 124, 0, 255, 199, 119, 9, 255, 195, 117, 15, 255, 190, 121, 10, 255, 189, 122, 4, 255, 191, 118, 4, 255, 186, 114, 3, 255, 183, 111, 3, 255, 186, 111, 5, 255, 183, 110, 6, 255, 182, 110, 8, 255, 181, 108, 6, 255, 174, 98, 11, 255, 167, 88, 8, 255, 162, 85, 2, 255, 160, 82, 1, 255, 157, 76, 9, 255, 162, 80, 8, 255, 167, 85, 2, 255, 165, 85, 1, 255, 156, 78, 3, 255, 141, 67, 1, 255, 127, 58, 5, 255, 114, 45, 6, 255, 118, 45, 1, 255, 115, 48, 1, 255, 118, 51, 4, 255, 118, 49, 10, 255, 104, 39, 2, 255, 98, 41, 4, 255, 97, 42, 4, 255, 97, 34, 2, 255, 104, 36, 4, 255, 108, 40, 3, 255, 104, 39, 5, 255, 106, 43, 6, 255, 110, 46, 1, 255, 108, 44, 1, 255, 109, 44, 5, 255, 117, 44, 3, 255, 112, 41, 1, 255, 108, 45, 4, 255, 116, 51, 1, 255, 115, 50, 0, 255, 114, 42, 3, 255, 114, 44, 4, 255, 103, 41, 2, 255, 98, 34, 1, 255, 108, 35, 3, 255, 118, 45, 4, 255, 121, 49, 3, 255, 122, 50, 3, 255, 120, 50, 4, 255, 119, 43, 3, 255, 120, 39, 3, 255, 116, 40, 0, 255, 117, 49, 0, 255, 114, 47, 2, 255, 125, 49, 6, 255, 123, 43, 2, 255, 124, 48, 4, 255, 124, 48, 4, 255, 125, 43, 1, 255, 125, 43, 2, 255, 118, 39, 2, 255, 119, 44, 4, 255, 118, 46, 1, 255, 121, 49, 2, 255, 117, 47, 0, 255, 118, 45, 2, 255, 123, 44, 5, 255, 124, 47, 2, 255, 123, 44, 5, 255, 115, 39, 5, 255, 102, 42, 1, 255, 115, 44, 3, 255, 119, 46, 5, 255, 120, 42, 0, 255, 122, 39, 0, 255, 115, 43, 0, 255, 124, 53, 4, 255, 141, 67, 4, 255, 154, 74, 2, 255, 156, 73, 2, 255, 147, 66, 4, 255, 133, 56, 4, 255, 125, 51, 2, 255, 127, 50, 1, 255, 126, 47, 3, 255, 115, 38, 4, 255, 96, 25, 0, 255, 91, 26, 2, 255, 90, 27, 4, 255, 85, 24, 1, 255, 86, 26, 1, 255, 86, 21, 3, 255, 72, 19, 3, 255, 67, 21, 2, 255, 75, 25, 4, 255, 68, 21, 2, 255, 70, 23, 2, 255, 70, 22, 0, 255, 68, 19, 1, 255, 71, 23, 5, 255, 78, 28, 5, 255, 82, 30, 2, 255, 87, 32, 1, 255, 89, 34, 3, 255, 86, 32, 4, 255, 81, 28, 0, 255, 84, 30, 0, 255, 88, 32, 2, 255, 84, 28, 6, 255, 73, 23, 0, 255, 85, 26, 4, 255, 86, 23, 3, 255, 82, 29, 5, 255, 87, 22, 2, 255, 90, 20, 2, 255, 88, 27, 3, 255, 96, 24, 3, 255, 89, 23, 3, 255, 80, 18, 1, 255, 16, 6, 4, 255, 9, 3, 2, 255, 3, 0, 0, 255, 0, 0, 0, 255, 2, 2, 0, 255, 4, 2, 0, 255, 7, 1, 2, 255, 5, 1, 2, 255, 5, 1, 1, 255, 5, 1, 0, 255, 9, 3, 2, 255, 7, 1, 1, 255, 18, 8, 9, 255, 19, 8, 9, 255, 19, 9, 10, 255, 18, 8, 9, 255, 14, 5, 4, 255, 18, 12, 9, 255, 14, 9, 4, 255, 13, 10, 5, 255, 15, 9, 4, 255, 20, 13, 7, 255, 19, 12, 6, 255, 16, 12, 3, 255, 21, 14, 6, 255, 21, 14, 7, 255, 26, 16, 8, 255, 28, 19, 3, 255, 26, 18, 3, 255, 27, 17, 14, 255, 32, 22, 11, 255, 38, 25, 9, 255, 50, 27, 14, 255, 43, 24, 7, 255, 38, 27, 12, 255, 35, 30, 19, 255, 38, 31, 15, 255, 50, 35, 7, 255, 57, 42, 6, 255, 55, 42, 7, 255, 58, 38, 7, 255, 62, 41, 6, 255, 58, 40, 7, 255, 84, 85, 20, 255, 117, 128, 15, 255, 124, 133, 18, 255, 114, 121, 7, 255, 86, 90, 14, 255, 114, 138, 46, 255, 202, 227, 138, 255, 239, 246, 167, 255, 244, 244, 89, 255, 176, 164, 5, 255, 99, 98, 11, 255, 82, 77, 5, 255, 78, 63, 6, 255, 78, 57, 2, 255, 76, 58, 3, 255, 71, 62, 7, 255, 139, 94, 9, 255, 159, 96, 7, 255, 152, 102, 8, 255, 210, 160, 20, 255, 202, 138, 17, 255, 138, 83, 6, 255, 90, 45, 1, 255, 70, 35, 5, 255, 64, 39, 1, 255, 71, 40, 2, 255, 74, 38, 4, 255, 78, 40, 5, 255, 61, 40, 3, 255, 58, 40, 2, 255, 65, 43, 0, 255, 63, 41, 1, 255, 60, 39, 7, 255, 58, 33, 5, 255, 73, 41, 1, 255, 68, 40, 2, 255, 66, 38, 0, 255, 65, 35, 10, 255, 70, 35, 8, 255, 108, 62, 6, 255, 152, 82, 5, 255, 144, 74, 3, 255, 88, 46, 3, 255, 79, 37, 5, 255, 73, 38, 7, 255, 89, 49, 2, 255, 118, 58, 3, 255, 107, 52, 3, 255, 123, 64, 8, 255, 120, 62, 9, 255, 75, 35, 8, 255, 76, 40, 7, 255, 83, 40, 7, 255, 100, 51, 5, 255, 129, 60, 4, 255, 127, 60, 4, 255, 125, 69, 7, 255, 149, 76, 7, 255, 115, 57, 3, 255, 83, 38, 8, 255, 83, 45, 8, 255, 91, 46, 3, 255, 91, 41, 6, 255, 89, 40, 3, 255, 90, 43, 0, 255, 90, 45, 0, 255, 90, 38, 3, 255, 87, 43, 5, 255, 85, 40, 3, 255, 88, 43, 8, 255, 95, 47, 4, 255, 93, 47, 4, 255, 95, 45, 4, 255, 94, 47, 2, 255, 92, 49, 4, 255, 94, 49, 6, 255, 95, 47, 4, 255, 95, 49, 1, 255, 91, 51, 2, 255, 92, 48, 7, 255, 93, 46, 2, 255, 100, 51, 2, 255, 103, 53, 2, 255, 98, 54, 3, 255, 99, 55, 4, 255, 96, 56, 4, 255, 98, 55, 4, 255, 101, 54, 3, 255, 102, 54, 2, 255, 103, 55, 3, 255, 102, 56, 3, 255, 100, 55, 6, 255, 98, 52, 6, 255, 100, 51, 6, 255, 102, 52, 5, 255, 104, 53, 3, 255, 103, 54, 2, 255, 103, 56, 7, 255, 103, 57, 5, 255, 104, 55, 3, 255, 104, 55, 4, 255, 110, 57, 6, 255, 106, 53, 6, 255, 101, 55, 7, 255, 101, 61, 7, 255, 102, 56, 0, 255, 100, 54, 2, 255, 94, 50, 4, 255, 107, 61, 5, 255, 109, 58, 7, 255, 96, 48, 7, 255, 95, 58, 8, 255, 94, 51, 6, 255, 93, 51, 1, 255, 90, 55, 5, 255, 86, 53, 11, 255, 87, 48, 10, 255, 94, 51, 11, 255, 90, 47, 6, 255, 85, 47, 0, 255, 87, 52, 6, 255, 117, 66, 13, 255, 139, 73, 11, 255, 142, 68, 14, 255, 121, 57, 14, 255, 107, 67, 5, 255, 120, 76, 6, 255, 144, 74, 13, 255, 157, 78, 4, 255, 166, 75, 1, 255, 152, 68, 6, 255, 142, 69, 16, 255, 152, 79, 14, 255, 172, 90, 4, 255, 176, 93, 9, 255, 172, 96, 11, 255, 178, 102, 10, 255, 187, 94, 15, 255, 183, 97, 10, 255, 185, 101, 8, 255, 191, 101, 10, 255, 190, 102, 8, 255, 193, 101, 9, 255, 195, 101, 16, 255, 190, 98, 5, 255, 190, 101, 10, 255, 184, 108, 6, 255, 200, 123, 13, 255, 211, 122, 10, 255, 204, 118, 9, 255, 198, 115, 12, 255, 204, 119, 11, 255, 208, 122, 16, 255, 212, 128, 8, 255, 207, 127, 8, 255, 200, 123, 10, 255, 202, 125, 5, 255, 204, 124, 11, 255, 210, 131, 13, 255, 213, 136, 4, 255, 212, 134, 7, 255, 213, 138, 5, 255, 213, 141, 2, 255, 215, 143, 5, 255, 216, 146, 6, 255, 216, 146, 9, 255, 213, 145, 4, 255, 216, 148, 4, 255, 218, 146, 5, 255, 218, 148, 0, 255, 218, 147, 7, 255, 220, 148, 11, 255, 215, 143, 8, 255, 212, 139, 7, 255, 224, 152, 9, 255, 219, 150, 5, 255, 211, 137, 9, 255, 219, 146, 5, 255, 220, 158, 6, 255, 222, 157, 3, 255, 220, 156, 5, 255, 218, 149, 4, 255, 214, 150, 6, 255, 212, 147, 5, 255, 197, 125, 10, 255, 197, 124, 18, 255, 206, 139, 13, 255, 212, 151, 1, 255, 220, 167, 1, 255, 218, 177, 7, 255, 217, 177, 1, 255, 220, 172, 5, 255, 205, 155, 4, 255, 201, 157, 3, 255, 210, 160, 10, 255, 208, 159, 3, 255, 214, 166, 2, 255, 211, 160, 4, 255, 210, 159, 4, 255, 216, 166, 5, 255, 214, 172, 7, 255, 219, 174, 3, 255, 221, 173, 2, 255, 200, 154, 4, 255, 202, 162, 3, 255, 210, 163, 8, 255, 213, 164, 1, 255, 209, 159, 7, 255, 216, 169, 2, 255, 205, 158, 0, 255, 205, 159, 7, 255, 203, 155, 4, 255, 197, 144, 3, 255, 204, 152, 7, 255, 199, 148, 10, 255, 199, 147, 12, 255, 199, 147, 2, 255, 206, 155, 6, 255, 202, 158, 2, 255, 202, 158, 0, 255, 200, 152, 5, 255, 200, 149, 6, 255, 203, 153, 5, 255, 206, 152, 17, 255, 206, 154, 10, 255, 205, 151, 19, 255, 206, 150, 9, 255, 206, 148, 3, 255, 207, 145, 8, 255, 205, 146, 6, 255, 203, 143, 4, 255, 202, 139, 11, 255, 203, 131, 7, 255, 198, 127, 4, 255, 195, 126, 8, 255, 197, 128, 13, 255, 196, 125, 13, 255, 195, 124, 12, 255, 193, 121, 10, 255, 188, 115, 7, 255, 187, 114, 9, 255, 184, 110, 6, 255, 184, 110, 4, 255, 182, 108, 1, 255, 179, 108, 2, 255, 177, 103, 3, 255, 170, 94, 5, 255, 166, 85, 7, 255, 162, 79, 6, 255, 169, 86, 7, 255, 167, 85, 4, 255, 166, 85, 1, 255, 163, 77, 2, 255, 161, 78, 4, 255, 150, 76, 6, 255, 136, 59, 5, 255, 134, 56, 5, 255, 121, 54, 4, 255, 113, 52, 1, 255, 122, 54, 6, 255, 114, 46, 3, 255, 106, 40, 2, 255, 105, 38, 3, 255, 105, 38, 2, 255, 95, 38, 0, 255, 108, 43, 7, 255, 113, 40, 7, 255, 107, 39, 4, 255, 104, 43, 3, 255, 106, 43, 2, 255, 108, 41, 2, 255, 109, 42, 2, 255, 113, 45, 4, 255, 115, 43, 5, 255, 114, 43, 5, 255, 113, 46, 4, 255, 115, 46, 3, 255, 113, 46, 2, 255, 116, 40, 5, 255, 108, 40, 3, 255, 110, 45, 2, 255, 95, 35, 3, 255, 92, 32, 2, 255, 109, 41, 1, 255, 120, 44, 3, 255, 128, 48, 4, 255, 129, 52, 1, 255, 131, 55, 1, 255, 128, 51, 3, 255, 120, 48, 1, 255, 126, 55, 0, 255, 127, 54, 0, 255, 134, 53, 4, 255, 132, 50, 2, 255, 126, 51, 1, 255, 126, 49, 3, 255, 122, 45, 5, 255, 116, 43, 5, 255, 115, 46, 4, 255, 125, 50, 4, 255, 128, 46, 0, 255, 127, 45, 1, 255, 124, 46, 4, 255, 126, 50, 3, 255, 121, 47, 5, 255, 119, 45, 1, 255, 129, 55, 7, 255, 113, 43, 6, 255, 111, 45, 4, 255, 125, 53, 3, 255, 124, 45, 3, 255, 121, 37, 2, 255, 123, 41, 5, 255, 123, 55, 3, 255, 144, 66, 4, 255, 156, 72, 2, 255, 162, 75, 3, 255, 163, 80, 4, 255, 164, 77, 0, 255, 157, 68, 0, 255, 141, 57, 0, 255, 130, 51, 2, 255, 124, 46, 4, 255, 102, 30, 3, 255, 87, 23, 2, 255, 84, 28, 0, 255, 85, 30, 1, 255, 79, 27, 3, 255, 84, 26, 5, 255, 85, 23, 3, 255, 70, 19, 2, 255, 66, 17, 4, 255, 76, 25, 3, 255, 76, 26, 0, 255, 74, 24, 4, 255, 74, 24, 4, 255, 79, 24, 1, 255, 79, 32, 0, 255, 87, 37, 2, 255, 91, 32, 2, 255, 83, 27, 0, 255, 71, 22, 1, 255, 76, 23, 5, 255, 82, 26, 6, 255, 84, 29, 1, 255, 89, 35, 4, 255, 85, 25, 2, 255, 76, 19, 0, 255, 76, 22, 4, 255, 77, 19, 2, 255, 83, 26, 3, 255, 80, 23, 1, 255, 79, 20, 4, 255, 78, 21, 6, 255, 86, 27, 3, 255, 84, 23, 3, 255, 82, 18, 1, 255, 14, 5, 1, 255, 11, 4, 2, 255, 3, 2, 2, 255, 0, 2, 1, 255, 2, 2, 0, 255, 3, 3, 1, 255, 4, 2, 1, 255, 5, 1, 1, 255, 6, 2, 0, 255, 7, 3, 0, 255, 9, 4, 2, 255, 6, 2, 1, 255, 12, 7, 6, 255, 18, 10, 9, 255, 18, 9, 8, 255, 18, 9, 9, 255, 17, 10, 7, 255, 15, 10, 6, 255, 15, 12, 5, 255, 16, 14, 8, 255, 14, 8, 4, 255, 20, 12, 6, 255, 18, 13, 4, 255, 17, 14, 3, 255, 23, 17, 5, 255, 26, 18, 7, 255, 28, 19, 13, 255, 25, 16, 6, 255, 22, 16, 7, 255, 22, 16, 16, 255, 29, 21, 14, 255, 38, 25, 16, 255, 34, 22, 14, 255, 43, 26, 10, 255, 51, 32, 9, 255, 46, 33, 16, 255, 40, 33, 12, 255, 43, 35, 9, 255, 53, 39, 9, 255, 55, 37, 15, 255, 51, 44, 5, 255, 48, 47, 0, 255, 73, 75, 5, 255, 118, 124, 15, 255, 110, 121, 15, 255, 112, 108, 16, 255, 98, 88, 2, 255, 101, 105, 12, 255, 176, 175, 65, 255, 205, 197, 99, 255, 205, 197, 50, 255, 164, 141, 5, 255, 96, 91, 11, 255, 97, 85, 7, 255, 85, 71, 4, 255, 73, 59, 8, 255, 76, 59, 3, 255, 79, 56, 2, 255, 113, 79, 6, 255, 161, 101, 3, 255, 158, 101, 1, 255, 134, 83, 7, 255, 124, 76, 11, 255, 118, 61, 4, 255, 102, 51, 2, 255, 81, 37, 2, 255, 74, 39, 3, 255, 70, 39, 2, 255, 67, 37, 3, 255, 66, 36, 2, 255, 63, 36, 2, 255, 62, 35, 6, 255, 56, 35, 6, 255, 58, 42, 3, 255, 56, 39, 3, 255, 56, 34, 4, 255, 111, 64, 10, 255, 155, 81, 8, 255, 127, 56, 6, 255, 74, 32, 3, 255, 63, 37, 5, 255, 118, 66, 3, 255, 167, 82, 4, 255, 165, 80, 5, 255, 148, 70, 6, 255, 76, 37, 8, 255, 68, 35, 7, 255, 109, 56, 2, 255, 152, 75, 7, 255, 151, 68, 3, 255, 150, 69, 10, 255, 159, 70, 4, 255, 153, 74, 3, 255, 121, 58, 11, 255, 112, 53, 5, 255, 134, 65, 4, 255, 153, 78, 5, 255, 163, 76, 4, 255, 156, 70, 0, 255, 155, 76, 1, 255, 166, 77, 1, 255, 164, 82, 4, 255, 128, 62, 4, 255, 101, 47, 3, 255, 92, 48, 8, 255, 109, 57, 7, 255, 138, 69, 4, 255, 142, 66, 7, 255, 136, 61, 10, 255, 134, 65, 4, 255, 148, 74, 9, 255, 132, 64, 5, 255, 85, 46, 2, 255, 82, 47, 0, 255, 92, 46, 1, 255, 86, 44, 9, 255, 91, 48, 8, 255, 95, 47, 3, 255, 97, 47, 4, 255, 93, 45, 2, 255, 91, 48, 2, 255, 99, 53, 0, 255, 118, 59, 6, 255, 109, 57, 5, 255, 106, 55, 4, 255, 106, 50, 3, 255, 98, 53, 1, 255, 97, 58, 2, 255, 98, 57, 4, 255, 97, 54, 3, 255, 101, 54, 4, 255, 103, 53, 2, 255, 101, 49, 0, 255, 102, 52, 1, 255, 104, 58, 6, 255, 100, 55, 6, 255, 101, 54, 6, 255, 105, 53, 5, 255, 105, 53, 3, 255, 103, 52, 3, 255, 101, 56, 10, 255, 100, 55, 8, 255, 105, 57, 3, 255, 99, 53, 3, 255, 102, 61, 1, 255, 104, 59, 2, 255, 100, 55, 3, 255, 105, 54, 6, 255, 108, 54, 1, 255, 124, 62, 3, 255, 125, 68, 4, 255, 106, 57, 6, 255, 99, 54, 5, 255, 100, 57, 6, 255, 100, 54, 6, 255, 88, 57, 9, 255, 110, 60, 11, 255, 137, 72, 13, 255, 149, 77, 8, 255, 99, 56, 9, 255, 89, 49, 11, 255, 98, 57, 2, 255, 114, 63, 9, 255, 139, 73, 4, 255, 154, 72, 8, 255, 148, 70, 3, 255, 149, 72, 4, 255, 143, 83, 2, 255, 159, 84, 12, 255, 163, 73, 5, 255, 147, 74, 2, 255, 134, 65, 10, 255, 135, 68, 3, 255, 151, 80, 9, 255, 168, 91, 5, 255, 178, 102, 1, 255, 189, 103, 10, 255, 182, 105, 13, 255, 194, 110, 6, 255, 192, 102, 8, 255, 187, 103, 6, 255, 187, 103, 11, 255, 192, 102, 10, 255, 191, 106, 7, 255, 188, 106, 19, 255, 190, 105, 6, 255, 190, 105, 3, 255, 189, 111, 2, 255, 198, 115, 11, 255, 206, 128, 15, 255, 203, 128, 13, 255, 202, 117, 12, 255, 199, 116, 15, 255, 203, 119, 9, 255, 211, 122, 3, 255, 209, 127, 14, 255, 211, 130, 8, 255, 214, 132, 6, 255, 203, 127, 8, 255, 196, 121, 4, 255, 204, 127, 8, 255, 211, 137, 6, 255, 214, 139, 6, 255, 216, 140, 15, 255, 218, 145, 7, 255, 217, 146, 1, 255, 218, 148, 6, 255, 217, 149, 3, 255, 220, 151, 10, 255, 219, 152, 7, 255, 217, 150, 5, 255, 217, 145, 11, 255, 217, 144, 10, 255, 217, 145, 12, 255, 215, 144, 10, 255, 211, 144, 1, 255, 214, 146, 14, 255, 214, 145, 8, 255, 212, 145, 5, 255, 198, 127, 11, 255, 191, 118, 12, 255, 213, 149, 18, 255, 228, 162, 7, 255, 216, 149, 5, 255, 206, 138, 12, 255, 216, 156, 18, 255, 214, 158, 4, 255, 193, 128, 10, 255, 184, 117, 10, 255, 201, 145, 7, 255, 216, 167, 6, 255, 221, 173, 10, 255, 221, 173, 9, 255, 219, 165, 3, 255, 216, 156, 4, 255, 207, 149, 1, 255, 205, 152, 3, 255, 211, 162, 7, 255, 210, 163, 7, 255, 215, 172, 0, 255, 211, 163, 10, 255, 203, 152, 8, 255, 212, 160, 0, 255, 212, 168, 2, 255, 211, 168, 2, 255, 213, 167, 10, 255, 216, 177, 6, 255, 211, 175, 0, 255, 211, 169, 2, 255, 206, 160, 6, 255, 209, 160, 9, 255, 214, 167, 2, 255, 205, 160, 6, 255, 208, 166, 4, 255, 219, 174, 5, 255, 187, 132, 7, 255, 178, 123, 11, 255, 201, 155, 15, 255, 197, 152, 7, 255, 203, 153, 5, 255, 204, 153, 8, 255, 200, 154, 6, 255, 204, 159, 6, 255, 200, 155, 1, 255, 200, 153, 4, 255, 201, 153, 2, 255, 202, 151, 8, 255, 201, 148, 8, 255, 204, 152, 3, 255, 205, 153, 6, 255, 203, 146, 6, 255, 203, 145, 3, 255, 205, 146, 10, 255, 202, 144, 7, 255, 199, 140, 10, 255, 199, 130, 8, 255, 197, 125, 13, 255, 193, 124, 15, 255, 195, 129, 10, 255, 193, 128, 2, 255, 191, 123, 2, 255, 191, 119, 4, 255, 191, 119, 6, 255, 189, 118, 13, 255, 178, 103, 5, 255, 178, 100, 3, 255, 182, 105, 7, 255, 178, 103, 4, 255, 176, 96, 8, 255, 176, 97, 1, 255, 176, 97, 3, 255, 153, 72, 2, 255, 150, 67, 1, 255, 163, 79, 2, 255, 162, 81, 0, 255, 161, 79, 2, 255, 159, 76, 5, 255, 148, 69, 1, 255, 133, 56, 2, 255, 124, 54, 7, 255, 119, 54, 4, 255, 124, 56, 3, 255, 132, 55, 8, 255, 112, 44, 2, 255, 101, 43, 6, 255, 101, 41, 5, 255, 102, 41, 3, 255, 100, 40, 3, 255, 107, 44, 6, 255, 106, 41, 5, 255, 104, 41, 4, 255, 104, 44, 1, 255, 104, 44, 1, 255, 104, 39, 4, 255, 113, 41, 4, 255, 115, 44, 1, 255, 113, 44, 4, 255, 113, 43, 3, 255, 116, 42, 4, 255, 114, 40, 5, 255, 115, 41, 6, 255, 113, 38, 6, 255, 108, 38, 4, 255, 102, 36, 3, 255, 95, 33, 3, 255, 85, 32, 1, 255, 95, 36, 1, 255, 120, 46, 4, 255, 132, 51, 5, 255, 127, 49, 1, 255, 130, 51, 5, 255, 130, 52, 4, 255, 131, 59, 3, 255, 148, 72, 3, 255, 150, 71, 5, 255, 141, 55, 2, 255, 131, 49, 2, 255, 123, 51, 0, 255, 123, 46, 3, 255, 128, 48, 3, 255, 124, 47, 3, 255, 122, 45, 6, 255, 123, 47, 5, 255, 124, 48, 5, 255, 118, 39, 2, 255, 115, 38, 2, 255, 102, 35, 1, 255, 105, 41, 5, 255, 115, 46, 3, 255, 113, 43, 1, 255, 114, 45, 4, 255, 117, 45, 5, 255, 129, 53, 4, 255, 126, 51, 2, 255, 128, 52, 4, 255, 136, 54, 3, 255, 138, 62, 1, 255, 163, 70, 5, 255, 168, 73, 4, 255, 162, 72, 2, 255, 162, 76, 1, 255, 168, 77, 0, 255, 164, 69, 1, 255, 146, 58, 0, 255, 131, 53, 2, 255, 116, 37, 3, 255, 94, 30, 1, 255, 88, 29, 4, 255, 82, 31, 2, 255, 83, 27, 0, 255, 80, 25, 2, 255, 83, 21, 3, 255, 80, 20, 1, 255, 71, 22, 1, 255, 73, 22, 3, 255, 78, 28, 6, 255, 83, 36, 4, 255, 90, 36, 5, 255, 91, 32, 4, 255, 94, 34, 4, 255, 91, 33, 3, 255, 88, 32, 2, 255, 83, 26, 2, 255, 78, 22, 4, 255, 64, 17, 1, 255, 66, 17, 4, 255, 75, 25, 5, 255, 83, 33, 0, 255, 88, 39, 2, 255, 81, 32, 1, 255, 77, 23, 1, 255, 75, 25, 4, 255, 72, 22, 1, 255, 75, 20, 0, 255, 69, 21, 0, 255, 65, 22, 3, 255, 65, 19, 2, 255, 72, 22, 4, 255, 74, 21, 3, 255, 81, 25, 6, 255, 15, 7, 3, 255, 9, 3, 2, 255, 3, 1, 2, 255, 0, 2, 1, 255, 1, 2, 0, 255, 4, 3, 1, 255, 6, 4, 2, 255, 9, 6, 4, 255, 6, 2, 1, 255, 8, 4, 0, 255, 6, 2, 0, 255, 7, 4, 1, 255, 5, 3, 1, 255, 16, 10, 7, 255, 20, 11, 12, 255, 18, 11, 13, 255, 17, 10, 8, 255, 17, 11, 5, 255, 17, 11, 7, 255, 16, 11, 8, 255, 13, 9, 3, 255, 17, 11, 4, 255, 20, 15, 5, 255, 20, 15, 4, 255, 27, 18, 3, 255, 26, 18, 0, 255, 24, 20, 5, 255, 25, 21, 14, 255, 22, 20, 12, 255, 26, 24, 12, 255, 29, 27, 9, 255, 28, 23, 9, 255, 32, 25, 13, 255, 42, 32, 14, 255, 46, 33, 12, 255, 40, 29, 14, 255, 42, 35, 13, 255, 43, 38, 10, 255, 47, 40, 9, 255, 50, 43, 7, 255, 48, 42, 8, 255, 62, 50, 3, 255, 84, 75, 8, 255, 79, 73, 2, 255, 73, 64, 6, 255, 71, 66, 7, 255, 73, 74, 7, 255, 80, 74, 2, 255, 66, 59, 0, 255, 70, 58, 0, 255, 70, 55, 2, 255, 67, 64, 11, 255, 79, 79, 11, 255, 75, 74, 1, 255, 71, 61, 1, 255, 73, 61, 1, 255, 73, 57, 4, 255, 69, 58, 8, 255, 129, 68, 7, 255, 143, 76, 6, 255, 142, 83, 0, 255, 126, 81, 5, 255, 105, 62, 3, 255, 86, 46, 8, 255, 83, 41, 6, 255, 68, 40, 5, 255, 61, 43, 2, 255, 63, 41, 6, 255, 63, 37, 7, 255, 69, 39, 4, 255, 59, 34, 1, 255, 52, 31, 6, 255, 69, 41, 5, 255, 88, 54, 10, 255, 55, 28, 2, 255, 124, 67, 10, 255, 174, 85, 0, 255, 165, 81, 5, 255, 124, 53, 7, 255, 67, 31, 5, 255, 95, 55, 4, 255, 162, 80, 5, 255, 165, 78, 9, 255, 162, 81, 3, 255, 149, 76, 0, 255, 144, 70, 4, 255, 155, 75, 7, 255, 161, 82, 10, 255, 162, 77, 4, 255, 164, 81, 5, 255, 167, 85, 1, 255, 166, 80, 2, 255, 173, 88, 5, 255, 171, 83, 0, 255, 182, 85, 7, 255, 180, 92, 6, 255, 177, 86, 4, 255, 171, 80, 5, 255, 167, 92, 4, 255, 170, 89, 3, 255, 173, 79, 7, 255, 176, 76, 3, 255, 170, 81, 2, 255, 163, 77, 4, 255, 156, 77, 5, 255, 164, 78, 5, 255, 168, 71, 3, 255, 166, 74, 3, 255, 169, 81, 1, 255, 167, 81, 1, 255, 164, 77, 3, 255, 152, 73, 4, 255, 119, 68, 5, 255, 106, 61, 2, 255, 104, 52, 6, 255, 94, 49, 2, 255, 128, 62, 9, 255, 147, 66, 7, 255, 139, 64, 2, 255, 131, 64, 3, 255, 134, 70, 7, 255, 144, 71, 7, 255, 146, 70, 5, 255, 111, 60, 5, 255, 95, 52, 7, 255, 99, 51, 3, 255, 103, 55, 2, 255, 103, 53, 3, 255, 114, 56, 3, 255, 118, 60, 2, 255, 123, 66, 5, 255, 129, 71, 12, 255, 119, 62, 3, 255, 134, 67, 9, 255, 116, 60, 4, 255, 101, 55, 1, 255, 107, 56, 7, 255, 108, 51, 4, 255, 110, 55, 4, 255, 104, 53, 3, 255, 106, 53, 5, 255, 99, 50, 1, 255, 100, 55, 6, 255, 104, 52, 11, 255, 103, 55, 5, 255, 105, 59, 5, 255, 105, 54, 3, 255, 102, 54, 5, 255, 108, 71, 8, 255, 160, 91, 7, 255, 152, 68, 10, 255, 98, 54, 6, 255, 90, 59, 4, 255, 94, 50, 8, 255, 113, 64, 6, 255, 147, 88, 9, 255, 175, 89, 5, 255, 169, 86, 0, 255, 170, 79, 8, 255, 142, 64, 11, 255, 113, 62, 4, 255, 136, 73, 11, 255, 156, 78, 17, 255, 160, 74, 11, 255, 154, 80, 7, 255, 153, 82, 12, 255, 139, 69, 7, 255, 150, 76, 4, 255, 150, 69, 6, 255, 139, 64, 5, 255, 140, 68, 8, 255, 150, 75, 9, 255, 160, 86, 6, 255, 172, 91, 19, 255, 179, 99, 14, 255, 187, 113, 6, 255, 194, 111, 7, 255, 196, 112, 3, 255, 190, 110, 3, 255, 192, 106, 10, 255, 192, 105, 2, 255, 187, 104, 9, 255, 198, 107, 17, 255, 205, 109, 6, 255, 201, 110, 11, 255, 198, 109, 3, 255, 192, 107, 10, 255, 198, 117, 12, 255, 201, 115, 20, 255, 205, 119, 13, 255, 210, 125, 10, 255, 210, 121, 8, 255, 205, 122, 12, 255, 208, 130, 8, 255, 206, 121, 6, 255, 211, 126, 16, 255, 213, 128, 17, 255, 211, 132, 10, 255, 211, 138, 10, 255, 212, 141, 2, 255, 217, 144, 10, 255, 218, 144, 9, 255, 212, 138, 6, 255, 213, 137, 17, 255, 219, 146, 13, 255, 224, 155, 10, 255, 223, 151, 5, 255, 219, 150, 0, 255, 220, 154, 7, 255, 220, 154, 6, 255, 215, 145, 7, 255, 215, 146, 9, 255, 217, 146, 10, 255, 220, 152, 1, 255, 215, 148, 0, 255, 215, 147, 6, 255, 218, 157, 3, 255, 205, 141, 6, 255, 209, 149, 10, 255, 210, 153, 12, 255, 207, 153, 3, 255, 221, 172, 5, 255, 226, 168, 1, 255, 212, 146, 4, 255, 211, 144, 10, 255, 217, 162, 8, 255, 214, 158, 6, 255, 191, 123, 10, 255, 183, 117, 13, 255, 202, 153, 14, 255, 215, 169, 5, 255, 225, 176, 1, 255, 223, 174, 8, 255, 212, 163, 2, 255, 200, 149, 8, 255, 202, 152, 6, 255, 199, 145, 11, 255, 213, 167, 7, 255, 213, 169, 4, 255, 219, 175, 2, 255, 206, 158, 13, 255, 189, 137, 11, 255, 198, 144, 9, 255, 210, 160, 7, 255, 212, 166, 2, 255, 210, 164, 1, 255, 215, 169, 2, 255, 220, 174, 3, 255, 217, 170, 6, 255, 208, 161, 4, 255, 208, 160, 3, 255, 208, 160, 1, 255, 200, 154, 5, 255, 210, 166, 7, 255, 217, 170, 6, 255, 193, 140, 6, 255, 188, 136, 19, 255, 198, 156, 2, 255, 195, 155, 1, 255, 200, 154, 1, 255, 201, 150, 3, 255, 202, 158, 2, 255, 202, 158, 5, 255, 201, 155, 9, 255, 199, 153, 5, 255, 200, 152, 10, 255, 201, 150, 9, 255, 201, 148, 15, 255, 207, 154, 9, 255, 204, 149, 3, 255, 201, 145, 0, 255, 203, 145, 9, 255, 205, 147, 8, 255, 201, 143, 3, 255, 192, 133, 8, 255, 191, 127, 8, 255, 192, 126, 7, 255, 191, 119, 3, 255, 197, 122, 5, 255, 197, 126, 8, 255, 191, 126, 7, 255, 188, 122, 7, 255, 189, 119, 10, 255, 185, 113, 12, 255, 178, 102, 7, 255, 177, 99, 6, 255, 181, 105, 7, 255, 178, 104, 4, 255, 178, 103, 0, 255, 172, 94, 0, 255, 169, 87, 5, 255, 163, 81, 6, 255, 150, 71, 5, 255, 147, 68, 7, 255, 151, 72, 5, 255, 156, 80, 4, 255, 153, 74, 0, 255, 153, 71, 3, 255, 143, 68, 4, 255, 127, 60, 8, 255, 123, 55, 15, 255, 126, 58, 2, 255, 116, 46, 0, 255, 111, 48, 6, 255, 103, 42, 6, 255, 103, 40, 4, 255, 100, 44, 2, 255, 104, 41, 4, 255, 100, 37, 4, 255, 97, 37, 3, 255, 95, 36, 1, 255, 97, 39, 3, 255, 98, 41, 3, 255, 100, 38, 0, 255, 112, 42, 5, 255, 111, 42, 3, 255, 105, 44, 1, 255, 108, 43, 3, 255, 107, 33, 2, 255, 112, 38, 4, 255, 111, 37, 3, 255, 108, 37, 5, 255, 105, 31, 0, 255, 102, 33, 6, 255, 94, 30, 3, 255, 82, 28, 2, 255, 88, 31, 4, 255, 106, 41, 5, 255, 118, 48, 1, 255, 117, 45, 1, 255, 126, 49, 3, 255, 147, 64, 3, 255, 162, 80, 5, 255, 164, 83, 3, 255, 154, 73, 1, 255, 137, 51, 2, 255, 126, 45, 4, 255, 120, 47, 2, 255, 121, 44, 3, 255, 121, 47, 3, 255, 120, 46, 2, 255, 121, 47, 5, 255, 120, 49, 3, 255, 113, 46, 1, 255, 105, 38, 1, 255, 100, 36, 3, 255, 95, 34, 6, 255, 102, 36, 7, 255, 111, 41, 3, 255, 117, 43, 3, 255, 115, 40, 2, 255, 112, 45, 4, 255, 122, 50, 3, 255, 118, 49, 4, 255, 108, 43, 6, 255, 105, 34, 2, 255, 126, 53, 5, 255, 157, 70, 2, 255, 160, 73, 0, 255, 163, 75, 2, 255, 166, 78, 1, 255, 167, 77, 2, 255, 160, 68, 5, 255, 141, 55, 4, 255, 126, 44, 3, 255, 109, 34, 5, 255, 92, 30, 0, 255, 84, 29, 1, 255, 76, 26, 0, 255, 80, 23, 1, 255, 86, 25, 3, 255, 80, 24, 4, 255, 70, 21, 2, 255, 67, 22, 0, 255, 75, 23, 1, 255, 76, 24, 1, 255, 88, 32, 1, 255, 107, 43, 2, 255, 102, 40, 1, 255, 90, 29, 3, 255, 87, 24, 2, 255, 80, 20, 1, 255, 71, 18, 2, 255, 73, 20, 5, 255, 69, 18, 3, 255, 65, 19, 4, 255, 69, 21, 3, 255, 86, 29, 3, 255, 95, 30, 5, 255, 89, 27, 7, 255, 82, 24, 4, 255, 81, 25, 1, 255, 77, 21, 1, 255, 77, 22, 5, 255, 71, 20, 7, 255, 70, 23, 5, 255, 72, 25, 3, 255, 73, 19, 3, 255, 72, 19, 0, 255, 74, 25, 2, 255, 15, 7, 5, 255, 9, 4, 1, 255, 5, 2, 0, 255, 1, 0, 0, 255, 4, 1, 1, 255, 8, 2, 2, 255, 6, 0, 0, 255, 7, 2, 0, 255, 11, 6, 2, 255, 9, 4, 1, 255, 9, 4, 1, 255, 10, 5, 3, 255, 9, 4, 1, 255, 10, 8, 3, 255, 15, 10, 12, 255, 16, 7, 12, 255, 17, 10, 8, 255, 16, 10, 5, 255, 16, 12, 11, 255, 17, 11, 6, 255, 18, 11, 3, 255, 21, 15, 6, 255, 20, 13, 6, 255, 23, 13, 6, 255, 23, 12, 3, 255, 28, 19, 4, 255, 24, 20, 2, 255, 22, 23, 7, 255, 22, 20, 7, 255, 32, 23, 8, 255, 32, 22, 4, 255, 35, 31, 9, 255, 39, 32, 6, 255, 35, 28, 7, 255, 42, 33, 20, 255, 45, 33, 18, 255, 48, 39, 13, 255, 48, 44, 12, 255, 46, 45, 7, 255, 45, 44, 4, 255, 53, 43, 9, 255, 74, 57, 3, 255, 77, 67, 3, 255, 70, 66, 4, 255, 68, 60, 8, 255, 68, 67, 11, 255, 70, 66, 3, 255, 73, 65, 7, 255, 75, 69, 4, 255, 76, 70, 8, 255, 75, 69, 1, 255, 70, 70, 6, 255, 73, 74, 6, 255, 70, 66, 3, 255, 69, 57, 0, 255, 76, 54, 0, 255, 73, 53, 3, 255, 66, 47, 0, 255, 102, 60, 6, 255, 123, 65, 4, 255, 121, 68, 8, 255, 104, 55, 3, 255, 87, 47, 3, 255, 99, 46, 5, 255, 71, 40, 6, 255, 70, 43, 5, 255, 60, 32, 1, 255, 54, 32, 5, 255, 89, 54, 6, 255, 61, 39, 2, 255, 40, 36, 5, 255, 72, 49, 6, 255, 134, 69, 8, 255, 140, 68, 7, 255, 102, 59, 8, 255, 157, 81, 5, 255, 159, 79, 1, 255, 160, 84, 3, 255, 154, 81, 7, 255, 156, 72, 11, 255, 164, 85, 3, 255, 169, 87, 1, 255, 169, 84, 5, 255, 170, 82, 8, 255, 176, 88, 6, 255, 180, 91, 0, 255, 179, 91, 1, 255, 181, 90, 5, 255, 181, 90, 4, 255, 183, 90, 2, 255, 182, 91, 6, 255, 182, 89, 8, 255, 176, 86, 5, 255, 181, 97, 3, 255, 184, 89, 0, 255, 182, 82, 0, 255, 184, 89, 1, 255, 182, 87, 3, 255, 188, 93, 5, 255, 186, 98, 4, 255, 186, 94, 6, 255, 177, 90, 0, 255, 176, 87, 3, 255, 177, 86, 3, 255, 176, 86, 1, 255, 171, 81, 2, 255, 168, 80, 7, 255, 166, 79, 6, 255, 165, 81, 3, 255, 165, 77, 1, 255, 163, 76, 4, 255, 155, 68, 4, 255, 151, 64, 1, 255, 153, 70, 5, 255, 148, 67, 3, 255, 136, 61, 5, 255, 143, 69, 3, 255, 141, 66, 0, 255, 146, 66, 3, 255, 163, 77, 7, 255, 165, 76, 4, 255, 158, 72, 3, 255, 147, 75, 2, 255, 132, 63, 5, 255, 123, 58, 9, 255, 109, 60, 7, 255, 110, 57, 3, 255, 111, 50, 3, 255, 127, 58, 3, 255, 138, 62, 4, 255, 135, 63, 3, 255, 138, 62, 5, 255, 136, 65, 7, 255, 147, 69, 6, 255, 111, 54, 2, 255, 94, 50, 7, 255, 96, 52, 4, 255, 101, 55, 1, 255, 98, 52, 5, 255, 103, 55, 2, 255, 120, 66, 4, 255, 119, 68, 7, 255, 108, 56, 6, 255, 102, 48, 7, 255, 105, 57, 5, 255, 101, 51, 3, 255, 110, 54, 6, 255, 129, 77, 9, 255, 164, 98, 7, 255, 175, 93, 4, 255, 131, 62, 3, 255, 98, 55, 6, 255, 106, 67, 8, 255, 131, 73, 10, 255, 168, 85, 6, 255, 175, 80, 7, 255, 167, 75, 5, 255, 166, 82, 7, 255, 159, 78, 14, 255, 160, 79, 11, 255, 164, 91, 12, 255, 170, 86, 10, 255, 175, 93, 9, 255, 171, 94, 3, 255, 178, 97, 7, 255, 172, 90, 13, 255, 142, 67, 4, 255, 133, 62, 10, 255, 144, 73, 11, 255, 155, 85, 9, 255, 163, 89, 5, 255, 178, 100, 7, 255, 184, 104, 9, 255, 190, 106, 14, 255, 197, 112, 8, 255, 198, 111, 6, 255, 197, 107, 8, 255, 198, 108, 10, 255, 196, 107, 6, 255, 195, 108, 4, 255, 195, 107, 8, 255, 203, 112, 10, 255, 199, 107, 11, 255, 194, 101, 10, 255, 200, 111, 6, 255, 199, 112, 11, 255, 205, 120, 15, 255, 201, 114, 9, 255, 198, 115, 5, 255, 208, 127, 9, 255, 210, 129, 9, 255, 212, 133, 8, 255, 212, 132, 10, 255, 218, 136, 12, 255, 201, 117, 10, 255, 205, 120, 7, 255, 214, 135, 8, 255, 214, 139, 9, 255, 216, 142, 10, 255, 220, 148, 4, 255, 220, 148, 5, 255, 221, 149, 6, 255, 216, 144, 3, 255, 218, 141, 13, 255, 222, 150, 6, 255, 218, 153, 6, 255, 221, 149, 10, 255, 218, 144, 7, 255, 222, 155, 5, 255, 223, 161, 5, 255, 219, 151, 8, 255, 216, 150, 9, 255, 212, 147, 4, 255, 212, 145, 8, 255, 206, 138, 6, 255, 213, 148, 14, 255, 224, 166, 2, 255, 219, 163, 10, 255, 217, 164, 7, 255, 223, 168, 7, 255, 226, 169, 10, 255, 227, 168, 10, 255, 218, 159, 4, 255, 209, 150, 4, 255, 216, 163, 5, 255, 223, 169, 9, 255, 216, 160, 5, 255, 169, 104, 10, 255, 182, 127, 7, 255, 219, 181, 18, 255, 218, 179, 4, 255, 217, 173, 4, 255, 224, 177, 7, 255, 216, 169, 4, 255, 213, 168, 4, 255, 218, 174, 10, 255, 207, 162, 2, 255, 210, 169, 7, 255, 218, 175, 4, 255, 217, 173, 0, 255, 221, 177, 4, 255, 188, 140, 5, 255, 182, 132, 9, 255, 209, 168, 3, 255, 214, 173, 1, 255, 204, 160, 2, 255, 207, 161, 0, 255, 218, 172, 0, 255, 213, 166, 3, 255, 212, 165, 1, 255, 212, 162, 5, 255, 203, 155, 5, 255, 206, 159, 14, 255, 211, 167, 9, 255, 210, 165, 3, 255, 191, 139, 4, 255, 200, 152, 11, 255, 201, 159, 4, 255, 197, 154, 9, 255, 201, 154, 3, 255, 202, 151, 3, 255, 204, 158, 8, 255, 202, 158, 8, 255, 201, 156, 1, 255, 201, 155, 2, 255, 200, 152, 8, 255, 199, 150, 6, 255, 203, 151, 14, 255, 205, 153, 7, 255, 203, 147, 2, 255, 199, 142, 4, 255, 203, 144, 3, 255, 203, 146, 1, 255, 200, 142, 2, 255, 195, 136, 5, 255, 198, 135, 10, 255, 197, 132, 10, 255, 193, 125, 5, 255, 196, 127, 6, 255, 194, 126, 5, 255, 191, 126, 4, 255, 192, 129, 8, 255, 186, 119, 13, 255, 180, 107, 2, 255, 182, 108, 4, 255, 185, 113, 9, 255, 184, 114, 7, 255, 179, 108, 6, 255, 177, 100, 2, 255, 164, 85, 4, 255, 160, 79, 3, 255, 167, 87, 0, 255, 161, 81, 8, 255, 146, 72, 7, 255, 152, 76, 4, 255, 150, 71, 2, 255, 150, 72, 4, 255, 150, 73, 8, 255, 142, 65, 3, 255, 142, 67, 2, 255, 134, 60, 8, 255, 122, 57, 4, 255, 114, 50, 6, 255, 110, 47, 5, 255, 106, 42, 6, 255, 105, 43, 6, 255, 101, 42, 3, 255, 99, 36, 2, 255, 100, 38, 1, 255, 96, 37, 4, 255, 90, 31, 4, 255, 96, 33, 1, 255, 100, 37, 1, 255, 100, 37, 2, 255, 104, 40, 3, 255, 105, 42, 2, 255, 104, 41, 2, 255, 105, 39, 4, 255, 107, 39, 3, 255, 110, 40, 2, 255, 99, 33, 1, 255, 102, 35, 3, 255, 101, 31, 2, 255, 103, 32, 2, 255, 102, 35, 5, 255, 102, 35, 9, 255, 94, 31, 6, 255, 88, 32, 0, 255, 109, 46, 3, 255, 115, 45, 2, 255, 131, 56, 1, 255, 161, 78, 2, 255, 162, 79, 2, 255, 164, 76, 2, 255, 152, 69, 3, 255, 129, 50, 2, 255, 120, 45, 5, 255, 116, 44, 1, 255, 117, 45, 2, 255, 120, 47, 1, 255, 120, 44, 2, 255, 113, 35, 4, 255, 106, 32, 5, 255, 101, 32, 4, 255, 105, 37, 5, 255, 104, 36, 1, 255, 106, 39, 3, 255, 111, 45, 3, 255, 118, 45, 6, 255, 118, 42, 5, 255, 110, 38, 2, 255, 106, 41, 2, 255, 117, 46, 7, 255, 117, 37, 0, 255, 100, 32, 5, 255, 80, 20, 3, 255, 111, 35, 4, 255, 141, 57, 3, 255, 157, 73, 1, 255, 166, 71, 3, 255, 164, 70, 5, 255, 164, 71, 3, 255, 155, 65, 0, 255, 133, 52, 7, 255, 117, 33, 6, 255, 101, 29, 1, 255, 93, 27, 1, 255, 87, 29, 3, 255, 78, 22, 0, 255, 78, 23, 3, 255, 81, 22, 4, 255, 76, 22, 2, 255, 74, 25, 2, 255, 77, 25, 2, 255, 80, 26, 5, 255, 76, 25, 1, 255, 91, 32, 1, 255, 108, 44, 6, 255, 88, 30, 2, 255, 67, 14, 7, 255, 75, 22, 6, 255, 79, 20, 2, 255, 71, 16, 6, 255, 62, 15, 3, 255, 75, 20, 1, 255, 72, 21, 2, 255, 77, 27, 5, 255, 82, 26, 2, 255, 84, 25, 3, 255, 82, 24, 2, 255, 73, 24, 3, 255, 70, 20, 2, 255, 77, 21, 2, 255, 81, 23, 5, 255, 81, 21, 3, 255, 85, 21, 3, 255, 84, 21, 2, 255, 77, 26, 4, 255, 79, 24, 2, 255, 77, 21, 0, 255, 17, 6, 4, 255, 14, 7, 3, 255, 7, 3, 1, 255, 5, 2, 1, 255, 5, 1, 0, 255, 7, 1, 1, 255, 6, 1, 1, 255, 7, 2, 2, 255, 8, 4, 1, 255, 9, 4, 1, 255, 8, 3, 0, 255, 10, 5, 2, 255, 11, 7, 3, 255, 10, 6, 3, 255, 13, 8, 4, 255, 15, 12, 6, 255, 15, 12, 7, 255, 15, 12, 8, 255, 15, 12, 9, 255, 18, 13, 7, 255, 20, 14, 8, 255, 22, 15, 7, 255, 22, 13, 6, 255, 26, 16, 10, 255, 26, 16, 7, 255, 26, 18, 3, 255, 29, 19, 3, 255, 29, 21, 9, 255, 32, 22, 8, 255, 38, 22, 8, 255, 44, 30, 13, 255, 37, 29, 10, 255, 35, 31, 11, 255, 40, 36, 2, 255, 46, 40, 8, 255, 47, 44, 10, 255, 44, 40, 9, 255, 50, 39, 11, 255, 54, 46, 12, 255, 48, 45, 6, 255, 58, 51, 6, 255, 78, 64, 11, 255, 70, 57, 7, 255, 67, 60, 6, 255, 72, 64, 2, 255, 74, 63, 5, 255, 66, 61, 2, 255, 67, 62, 10, 255, 75, 67, 11, 255, 70, 61, 2, 255, 71, 63, 4, 255, 70, 67, 10, 255, 80, 69, 9, 255, 77, 61, 7, 255, 67, 56, 2, 255, 75, 52, 5, 255, 69, 50, 1, 255, 69, 47, 2, 255, 70, 49, 7, 255, 87, 56, 7, 255, 103, 54, 6, 255, 101, 48, 2, 255, 90, 44, 6, 255, 79, 37, 2, 255, 77, 44, 9, 255, 82, 46, 8, 255, 60, 36, 3, 255, 105, 68, 4, 255, 130, 77, 1, 255, 112, 62, 5, 255, 127, 71, 12, 255, 162, 80, 5, 255, 167, 86, 5, 255, 162, 82, 7, 255, 172, 85, 3, 255, 171, 84, 1, 255, 165, 90, 8, 255, 167, 88, 5, 255, 175, 88, 0, 255, 185, 89, 0, 255, 181, 87, 5, 255, 178, 90, 3, 255, 179, 89, 1, 255, 179, 88, 5, 255, 181, 90, 5, 255, 180, 91, 5, 255, 182, 93, 4, 255, 184, 94, 1, 255, 186, 93, 1, 255, 186, 95, 8, 255, 189, 93, 7, 255, 189, 101, 6, 255, 217, 134, 18, 255, 213, 127, 20, 255, 206, 150, 89, 255, 218, 165, 54, 255, 207, 132, 13, 255, 209, 143, 17, 255, 201, 118, 25, 255, 197, 96, 7, 255, 189, 93, 0, 255, 185, 93, 1, 255, 181, 93, 2, 255, 181, 90, 0, 255, 183, 91, 4, 255, 179, 87, 2, 255, 177, 87, 3, 255, 174, 86, 2, 255, 175, 87, 1, 255, 179, 84, 2, 255, 174, 79, 2, 255, 164, 73, 0, 255, 160, 72, 1, 255, 158, 72, 3, 255, 152, 69, 4, 255, 142, 56, 4, 255, 133, 60, 3, 255, 143, 65, 6, 255, 162, 69, 6, 255, 163, 77, 4, 255, 160, 79, 3, 255, 160, 71, 0, 255, 153, 65, 5, 255, 148, 65, 4, 255, 147, 68, 2, 255, 134, 66, 7, 255, 126, 56, 3, 255, 137, 62, 7, 255, 136, 61, 2, 255, 133, 59, 4, 255, 136, 61, 2, 255, 147, 65, 0, 255, 147, 71, 3, 255, 144, 63, 7, 255, 117, 53, 3, 255, 105, 48, 7, 255, 105, 52, 17, 255, 100, 52, 3, 255, 114, 60, 7, 255, 137, 75, 12, 255, 151, 76, 11, 255, 166, 79, 4, 255, 157, 82, 2, 255, 141, 71, 0, 255, 106, 52, 5, 255, 102, 56, 7, 255, 142, 74, 2, 255, 169, 82, 9, 255, 170, 69, 2, 255, 166, 80, 4, 255, 144, 75, 9, 255, 133, 63, 7, 255, 148, 72, 2, 255, 168, 82, 6, 255, 149, 67, 5, 255, 133, 58, 5, 255, 145, 66, 5, 255, 161, 76, 9, 255, 170, 88, 6, 255, 176, 91, 3, 255, 178, 93, 5, 255, 181, 91, 10, 255, 178, 89, 7, 255, 183, 101, 9, 255, 184, 96, 4, 255, 180, 94, 10, 255, 169, 86, 11, 255, 174, 94, 10, 255, 187, 106, 7, 255, 194, 111, 9, 255, 197, 109, 14, 255, 197, 106, 7, 255, 201, 111, 9, 255, 197, 111, 1, 255, 198, 109, 6, 255, 201, 110, 10, 255, 200, 106, 5, 255, 202, 110, 7, 255, 201, 109, 7, 255, 196, 104, 4, 255, 199, 109, 14, 255, 200, 110, 12, 255, 190, 100, 10, 255, 192, 104, 8, 255, 199, 113, 14, 255, 205, 120, 15, 255, 199, 112, 9, 255, 202, 119, 6, 255, 209, 132, 7, 255, 211, 137, 13, 255, 210, 135, 8, 255, 212, 138, 11, 255, 214, 136, 12, 255, 214, 139, 2, 255, 199, 120, 6, 255, 192, 114, 13, 255, 206, 133, 5, 255, 218, 149, 5, 255, 215, 147, 4, 255, 217, 148, 8, 255, 219, 150, 6, 255, 222, 153, 0, 255, 218, 146, 9, 255, 214, 138, 9, 255, 217, 141, 6, 255, 218, 144, 6, 255, 215, 142, 10, 255, 215, 146, 3, 255, 226, 158, 2, 255, 223, 162, 2, 255, 218, 164, 8, 255, 219, 158, 6, 255, 215, 150, 7, 255, 215, 150, 10, 255, 214, 151, 6, 255, 217, 158, 9, 255, 225, 171, 6, 255, 227, 171, 6, 255, 220, 153, 14, 255, 216, 152, 6, 255, 223, 164, 2, 255, 223, 167, 9, 255, 214, 159, 13, 255, 210, 157, 10, 255, 217, 172, 1, 255, 227, 169, 2, 255, 223, 170, 7, 255, 188, 143, 22, 255, 186, 138, 23, 255, 227, 180, 19, 255, 224, 179, 8, 255, 221, 176, 4, 255, 223, 178, 1, 255, 221, 175, 1, 255, 213, 168, 3, 255, 220, 177, 5, 255, 221, 178, 4, 255, 216, 173, 10, 255, 218, 173, 2, 255, 215, 170, 4, 255, 211, 167, 4, 255, 206, 164, 1, 255, 210, 168, 1, 255, 209, 167, 4, 255, 215, 173, 2, 255, 207, 159, 9, 255, 195, 143, 8, 255, 212, 164, 1, 255, 215, 168, 0, 255, 206, 158, 4, 255, 201, 150, 5, 255, 204, 156, 5, 255, 211, 167, 3, 255, 217, 175, 6, 255, 210, 167, 2, 255, 191, 141, 9, 255, 198, 147, 5, 255, 203, 160, 5, 255, 197, 157, 5, 255, 200, 154, 10, 255, 199, 150, 0, 255, 202, 153, 5, 255, 203, 156, 12, 255, 200, 155, 6, 255, 199, 154, 5, 255, 200, 152, 7, 255, 202, 152, 13, 255, 203, 155, 11, 255, 203, 153, 6, 255, 200, 147, 3, 255, 202, 146, 10, 255, 203, 147, 9, 255, 204, 149, 5, 255, 200, 144, 0, 255, 198, 141, 1, 255, 200, 140, 5, 255, 197, 134, 4, 255, 197, 132, 9, 255, 197, 130, 8, 255, 191, 125, 2, 255, 190, 125, 1, 255, 189, 125, 3, 255, 183, 116, 9, 255, 178, 105, 6, 255, 182, 108, 9, 255, 184, 109, 5, 255, 179, 104, 0, 255, 176, 96, 4, 255, 173, 90, 3, 255, 165, 84, 5, 255, 166, 88, 6, 255, 166, 90, 1, 255, 168, 89, 3, 255, 158, 76, 2, 255, 161, 80, 3, 255, 157, 75, 0, 255, 158, 76, 7, 255, 148, 69, 3, 255, 141, 67, 4, 255, 141, 70, 11, 255, 128, 55, 2, 255, 135, 60, 7, 255, 131, 65, 5, 255, 116, 54, 5, 255, 109, 48, 7, 255, 102, 39, 1, 255, 98, 37, 1, 255, 96, 40, 3, 255, 95, 39, 0, 255, 95, 33, 1, 255, 99, 34, 3, 255, 105, 37, 2, 255, 105, 39, 3, 255, 100, 38, 4, 255, 102, 40, 8, 255, 103, 40, 3, 255, 106, 39, 2, 255, 109, 38, 3, 255, 105, 40, 2, 255, 101, 44, 3, 255, 101, 39, 3, 255, 103, 39, 4, 255, 97, 35, 2, 255, 100, 35, 3, 255, 104, 34, 2, 255, 111, 35, 8, 255, 102, 36, 3, 255, 90, 31, 0, 255, 94, 32, 2, 255, 124, 55, 7, 255, 152, 76, 4, 255, 154, 75, 1, 255, 156, 78, 4, 255, 151, 69, 2, 255, 132, 52, 5, 255, 117, 40, 5, 255, 117, 41, 5, 255, 115, 39, 4, 255, 116, 40, 3, 255, 120, 43, 3, 255, 118, 40, 3, 255, 109, 33, 3, 255, 99, 34, 4, 255, 100, 39, 4, 255, 110, 39, 3, 255, 108, 35, 1, 255, 111, 38, 7, 255, 119, 45, 6, 255, 116, 41, 5, 255, 107, 36, 1, 255, 105, 36, 2, 255, 105, 37, 1, 255, 115, 41, 1, 255, 109, 36, 1, 255, 89, 30, 3, 255, 82, 26, 6, 255, 103, 30, 3, 255, 117, 39, 2, 255, 141, 62, 2, 255, 162, 73, 2, 255, 158, 71, 3, 255, 150, 63, 4, 255, 139, 58, 1, 255, 125, 55, 5, 255, 107, 35, 3, 255, 100, 27, 3, 255, 93, 25, 2, 255, 83, 21, 0, 255, 78, 22, 1, 255, 81, 29, 5, 255, 78, 27, 1, 255, 84, 29, 1, 255, 84, 25, 0, 255, 85, 24, 0, 255, 89, 31, 6, 255, 91, 34, 4, 255, 97, 41, 3, 255, 99, 40, 2, 255, 80, 24, 1, 255, 62, 17, 4, 255, 72, 22, 3, 255, 73, 22, 2, 255, 63, 17, 2, 255, 65, 21, 0, 255, 73, 25, 2, 255, 71, 21, 1, 255, 81, 31, 6, 255, 76, 28, 2, 255, 68, 20, 0, 255, 72, 24, 0, 255, 65, 19, 4, 255, 66, 16, 3, 255, 77, 21, 1, 255, 80, 25, 1, 255, 79, 24, 1, 255, 77, 22, 0, 255, 76, 22, 1, 255, 77, 24, 3, 255, 82, 25, 2, 255, 82, 23, 1, 255, 18, 8, 6, 255, 14, 7, 4, 255, 5, 0, 0, 255, 6, 2, 2, 255, 6, 2, 1, 255, 6, 1, 1, 255, 8, 3, 3, 255, 8, 4, 3, 255, 6, 2, 0, 255, 8, 3, 0, 255, 11, 5, 1, 255, 9, 4, 0, 255, 10, 4, 1, 255, 12, 3, 2, 255, 10, 4, 2, 255, 15, 12, 8, 255, 19, 15, 14, 255, 15, 11, 8, 255, 19, 13, 9, 255, 14, 13, 6, 255, 18, 17, 8, 255, 20, 16, 7, 255, 21, 16, 7, 255, 22, 18, 9, 255, 23, 21, 9, 255, 21, 20, 7, 255, 25, 21, 9, 255, 28, 23, 11, 255, 33, 25, 13, 255, 35, 26, 10, 255, 35, 28, 10, 255, 31, 29, 11, 255, 31, 30, 22, 255, 38, 34, 12, 255, 44, 36, 16, 255, 47, 41, 11, 255, 47, 38, 16, 255, 51, 40, 12, 255, 57, 49, 7, 255, 53, 46, 9, 255, 68, 59, 7, 255, 73, 62, 11, 255, 65, 56, 9, 255, 62, 55, 13, 255, 67, 61, 2, 255, 65, 57, 6, 255, 64, 64, 20, 255, 70, 72, 17, 255, 72, 64, 11, 255, 72, 58, 3, 255, 70, 57, 9, 255, 70, 65, 15, 255, 82, 69, 12, 255, 69, 63, 2, 255, 66, 55, 1, 255, 66, 52, 1, 255, 67, 46, 1, 255, 62, 45, 0, 255, 79, 51, 4, 255, 76, 47, 4, 255, 81, 54, 4, 255, 113, 59, 11, 255, 86, 42, 9, 255, 93, 53, 7, 255, 140, 79, 6, 255, 138, 62, 9, 255, 139, 72, 10, 255, 166, 80, 3, 255, 169, 78, 6, 255, 172, 84, 3, 255, 174, 89, 2, 255, 172, 93, 0, 255, 173, 87, 3, 255, 180, 92, 5, 255, 177, 90, 8, 255, 176, 91, 5, 255, 176, 91, 3, 255, 179, 92, 4, 255, 178, 90, 3, 255, 175, 88, 8, 255, 177, 84, 4, 255, 177, 81, 2, 255, 174, 84, 0, 255, 180, 85, 1, 255, 182, 86, 3, 255, 180, 88, 7, 255, 181, 92, 4, 255, 187, 98, 3, 255, 187, 99, 2, 255, 184, 98, 4, 255, 188, 91, 3, 255, 197, 103, 3, 255, 207, 122, 3, 255, 207, 111, 6, 255, 209, 122, 32, 255, 209, 137, 25, 255, 208, 131, 12, 255, 224, 158, 12, 255, 208, 136, 16, 255, 185, 88, 1, 255, 190, 96, 6, 255, 188, 93, 4, 255, 188, 96, 5, 255, 190, 96, 3, 255, 186, 90, 5, 255, 186, 90, 5, 255, 184, 90, 1, 255, 185, 94, 1, 255, 183, 94, 3, 255, 179, 89, 5, 255, 171, 80, 1, 255, 172, 81, 4, 255, 173, 86, 8, 255, 159, 71, 2, 255, 145, 55, 4, 255, 150, 64, 4, 255, 162, 73, 6, 255, 165, 72, 5, 255, 163, 74, 3, 255, 164, 78, 1, 255, 162, 73, 3, 255, 163, 69, 9, 255, 156, 72, 3, 255, 155, 76, 7, 255, 159, 72, 10, 255, 158, 76, 5, 255, 156, 75, 4, 255, 156, 78, 5, 255, 155, 73, 7, 255, 152, 66, 1, 255, 157, 73, 5, 255, 157, 69, 3, 255, 153, 68, 7, 255, 148, 64, 5, 255, 139, 64, 9, 255, 145, 73, 4, 255, 142, 71, 7, 255, 134, 65, 8, 255, 153, 71, 7, 255, 166, 75, 2, 255, 162, 73, 2, 255, 162, 76, 4, 255, 159, 74, 10, 255, 146, 62, 10, 255, 135, 58, 6, 255, 142, 71, 1, 255, 154, 71, 7, 255, 151, 69, 5, 255, 152, 66, 6, 255, 141, 60, 4, 255, 137, 60, 4, 255, 142, 69, 11, 255, 134, 65, 9, 255, 130, 60, 6, 255, 122, 61, 3, 255, 129, 70, 14, 255, 153, 82, 10, 255, 171, 90, 6, 255, 174, 91, 8, 255, 174, 90, 17, 255, 186, 96, 13, 255, 187, 100, 6, 255, 183, 98, 10, 255, 179, 98, 9, 255, 177, 91, 12, 255, 186, 101, 13, 255, 196, 111, 7, 255, 199, 110, 8, 255, 195, 108, 3, 255, 194, 105, 6, 255, 198, 108, 5, 255, 190, 107, 2, 255, 198, 111, 19, 255, 199, 113, 5, 255, 198, 111, 2, 255, 198, 108, 11, 255, 203, 114, 10, 255, 204, 117, 1, 255, 198, 111, 5, 255, 199, 109, 12, 255, 198, 107, 18, 255, 194, 107, 10, 255, 191, 105, 15, 255, 194, 113, 4, 255, 206, 124, 14, 255, 204, 119, 7, 255, 195, 106, 7, 255, 200, 119, 14, 255, 211, 134, 18, 255, 211, 137, 11, 255, 213, 140, 4, 255, 214, 140, 9, 255, 215, 141, 13, 255, 210, 139, 10, 255, 206, 134, 26, 255, 202, 135, 12, 255, 204, 139, 9, 255, 214, 149, 15, 255, 218, 150, 12, 255, 220, 153, 12, 255, 220, 154, 10, 255, 219, 154, 3, 255, 213, 144, 13, 255, 203, 136, 6, 255, 207, 136, 8, 255, 218, 138, 8, 255, 211, 142, 4, 255, 211, 152, 0, 255, 220, 166, 4, 255, 225, 169, 11, 255, 225, 171, 5, 255, 227, 166, 5, 255, 213, 149, 1, 255, 207, 145, 0, 255, 217, 159, 1, 255, 227, 172, 6, 255, 230, 178, 13, 255, 226, 171, 0, 255, 212, 147, 5, 255, 214, 154, 6, 255, 222, 167, 3, 255, 217, 164, 3, 255, 217, 167, 5, 255, 213, 164, 9, 255, 218, 166, 7, 255, 224, 178, 16, 255, 220, 174, 8, 255, 225, 180, 10, 255, 221, 179, 9, 255, 220, 176, 2, 255, 219, 173, 8, 255, 221, 178, 6, 255, 221, 175, 1, 255, 220, 172, 10, 255, 214, 166, 13, 255, 216, 171, 4, 255, 216, 172, 5, 255, 215, 172, 2, 255, 213, 167, 3, 255, 207, 158, 13, 255, 199, 154, 6, 255, 212, 170, 10, 255, 217, 177, 8, 255, 212, 170, 5, 255, 207, 163, 7, 255, 203, 155, 6, 255, 206, 155, 8, 255, 211, 161, 7, 255, 210, 164, 8, 255, 201, 151, 18, 255, 196, 145, 13, 255, 199, 151, 3, 255, 206, 160, 3, 255, 214, 169, 2, 255, 214, 167, 3, 255, 191, 138, 9, 255, 188, 134, 14, 255, 202, 160, 3, 255, 202, 162, 5, 255, 199, 154, 12, 255, 199, 152, 2, 255, 200, 151, 1, 255, 201, 155, 7, 255, 201, 154, 11, 255, 199, 152, 10, 255, 201, 155, 4, 255, 200, 153, 10, 255, 201, 155, 3, 255, 204, 156, 9, 255, 202, 150, 5, 255, 202, 149, 7, 255, 200, 147, 10, 255, 203, 150, 10, 255, 202, 146, 8, 255, 202, 144, 17, 255, 201, 140, 18, 255, 196, 135, 9, 255, 195, 132, 4, 255, 192, 127, 5, 255, 188, 122, 5, 255, 187, 120, 5, 255, 186, 118, 3, 255, 184, 112, 7, 255, 180, 107, 5, 255, 179, 105, 5, 255, 177, 102, 3, 255, 175, 97, 0, 255, 176, 93, 3, 255, 172, 96, 4, 255, 170, 89, 2, 255, 172, 88, 4, 255, 169, 88, 7, 255, 162, 86, 3, 255, 151, 74, 5, 255, 145, 67, 9, 255, 153, 76, 3, 255, 151, 75, 1, 255, 152, 74, 3, 255, 152, 74, 0, 255, 136, 60, 2, 255, 128, 51, 6, 255, 145, 66, 5, 255, 135, 65, 0, 255, 120, 53, 0, 255, 112, 47, 1, 255, 97, 34, 1, 255, 94, 35, 3, 255, 102, 42, 6, 255, 99, 38, 1, 255, 105, 39, 4, 255, 107, 41, 6, 255, 101, 43, 3, 255, 101, 42, 3, 255, 100, 38, 4, 255, 102, 39, 6, 255, 107, 38, 3, 255, 109, 39, 1, 255, 103, 39, 1, 255, 98, 38, 0, 255, 98, 39, 2, 255, 104, 36, 2, 255, 102, 36, 2, 255, 97, 32, 1, 255, 99, 35, 3, 255, 99, 36, 3, 255, 100, 36, 2, 255, 97, 36, 0, 255, 94, 31, 4, 255, 89, 31, 10, 255, 122, 54, 1, 255, 158, 77, 1, 255, 156, 79, 3, 255, 151, 73, 2, 255, 132, 49, 2, 255, 122, 42, 5, 255, 115, 42, 2, 255, 111, 42, 1, 255, 104, 34, 3, 255, 100, 30, 2, 255, 112, 33, 6, 255, 107, 33, 1, 255, 102, 37, 1, 255, 105, 41, 2, 255, 107, 39, 2, 255, 105, 34, 5, 255, 102, 33, 4, 255, 104, 34, 1, 255, 113, 38, 2, 255, 110, 38, 4, 255, 103, 36, 1, 255, 105, 38, 7, 255, 109, 36, 5, 255, 108, 35, 0, 255, 95, 31, 3, 255, 76, 24, 2, 255, 83, 29, 4, 255, 106, 34, 6, 255, 108, 35, 3, 255, 126, 43, 4, 255, 149, 59, 3, 255, 151, 63, 2, 255, 143, 49, 3, 255, 130, 39, 0, 255, 118, 36, 1, 255, 104, 26, 4, 255, 97, 25, 4, 255, 87, 24, 3, 255, 77, 24, 2, 255, 77, 28, 3, 255, 83, 31, 2, 255, 92, 34, 4, 255, 88, 32, 2, 255, 95, 34, 4, 255, 97, 40, 5, 255, 96, 42, 1, 255, 104, 41, 2, 255, 113, 43, 3, 255, 95, 30, 1, 255, 66, 16, 1, 255, 65, 20, 2, 255, 68, 19, 2, 255, 56, 17, 2, 255, 54, 19, 4, 255, 75, 26, 2, 255, 78, 29, 4, 255, 84, 27, 7, 255, 79, 20, 1, 255, 82, 30, 6, 255, 76, 29, 4, 255, 76, 23, 5, 255, 76, 23, 2, 255, 80, 26, 3, 255, 82, 24, 2, 255, 84, 23, 5, 255, 81, 22, 8, 255, 73, 18, 3, 255, 72, 21, 3, 255, 71, 22, 1, 255, 80, 24, 2, 255, 84, 25, 1, 255, 15, 7, 4, 255, 14, 8, 5, 255, 2, 1, 0, 255, 3, 2, 1, 255, 2, 1, 0, 255, 4, 4, 1, 255, 6, 3, 2, 255, 6, 2, 1, 255, 7, 3, 1, 255, 7, 3, 0, 255, 10, 5, 1, 255, 11, 6, 2, 255, 9, 4, 1, 255, 11, 6, 4, 255, 7, 6, 0, 255, 6, 8, 4, 255, 14, 15, 20, 255, 13, 12, 14, 255, 18, 16, 4, 255, 21, 16, 7, 255, 20, 14, 5, 255, 24, 18, 8, 255, 23, 16, 8, 255, 25, 19, 10, 255, 22, 19, 7, 255, 25, 24, 7, 255, 27, 25, 6, 255, 29, 25, 9, 255, 31, 27, 9, 255, 37, 32, 11, 255, 33, 31, 9, 255, 34, 34, 13, 255, 41, 39, 6, 255, 39, 37, 11, 255, 44, 39, 14, 255, 57, 50, 6, 255, 58, 44, 12, 255, 53, 40, 14, 255, 56, 47, 7, 255, 63, 51, 9, 255, 75, 63, 11, 255, 66, 59, 2, 255, 64, 59, 3, 255, 63, 60, 8, 255, 60, 62, 8, 255, 63, 70, 29, 255, 67, 72, 49, 255, 73, 77, 24, 255, 74, 64, 11, 255, 72, 55, 5, 255, 69, 54, 8, 255, 69, 62, 14, 255, 72, 71, 14, 255, 63, 66, 4, 255, 56, 49, 8, 255, 64, 48, 4, 255, 54, 37, 3, 255, 69, 53, 4, 255, 103, 59, 7, 255, 90, 43, 4, 255, 117, 67, 9, 255, 140, 68, 5, 255, 146, 70, 5, 255, 167, 85, 9, 255, 175, 81, 3, 255, 172, 86, 6, 255, 173, 86, 2, 255, 176, 93, 2, 255, 180, 89, 5, 255, 177, 89, 7, 255, 180, 89, 0, 255, 175, 89, 3, 255, 179, 91, 1, 255, 182, 87, 1, 255, 173, 85, 4, 255, 165, 84, 1, 255, 166, 85, 2, 255, 165, 79, 3, 255, 163, 75, 2, 255, 165, 75, 4, 255, 166, 77, 3, 255, 171, 77, 5, 255, 166, 78, 3, 255, 167, 78, 11, 255, 172, 84, 6, 255, 177, 89, 0, 255, 181, 88, 1, 255, 179, 86, 4, 255, 178, 89, 4, 255, 179, 91, 5, 255, 183, 91, 6, 255, 190, 108, 3, 255, 199, 115, 3, 255, 201, 106, 3, 255, 187, 91, 0, 255, 185, 86, 11, 255, 197, 100, 4, 255, 190, 86, 1, 255, 184, 75, 7, 255, 179, 88, 2, 255, 189, 96, 1, 255, 189, 94, 2, 255, 189, 98, 1, 255, 187, 91, 3, 255, 182, 85, 1, 255, 187, 90, 0, 255, 191, 97, 1, 255, 187, 93, 1, 255, 184, 89, 5, 255, 183, 87, 3, 255, 178, 82, 0, 255, 182, 87, 3, 255, 180, 85, 4, 255, 174, 81, 4, 255, 171, 79, 5, 255, 180, 92, 5, 255, 184, 87, 1, 255, 181, 84, 3, 255, 178, 87, 2, 255, 182, 88, 1, 255, 180, 85, 2, 255, 169, 78, 3, 255, 150, 67, 1, 255, 147, 64, 8, 255, 170, 78, 6, 255, 175, 85, 0, 255, 178, 87, 6, 255, 175, 86, 6, 255, 176, 84, 1, 255, 162, 79, 1, 255, 163, 82, 7, 255, 167, 78, 5, 255, 156, 71, 1, 255, 148, 70, 4, 255, 133, 64, 3, 255, 143, 70, 6, 255, 142, 64, 0, 255, 144, 66, 6, 255, 147, 64, 10, 255, 138, 63, 2, 255, 131, 64, 7, 255, 132, 61, 3, 255, 137, 60, 3, 255, 129, 57, 1, 255, 135, 61, 10, 255, 142, 65, 5, 255, 136, 65, 7, 255, 131, 59, 6, 255, 136, 64, 6, 255, 153, 74, 7, 255, 163, 84, 9, 255, 172, 89, 1, 255, 168, 84, 5, 255, 155, 76, 10, 255, 176, 94, 11, 255, 180, 92, 9, 255, 178, 91, 6, 255, 180, 92, 7, 255, 187, 99, 4, 255, 186, 103, 11, 255, 195, 106, 5, 255, 186, 99, 13, 255, 177, 92, 10, 255, 179, 93, 3, 255, 183, 99, 7, 255, 189, 100, 6, 255, 195, 107, 4, 255, 195, 109, 10, 255, 200, 110, 11, 255, 197, 105, 8, 255, 197, 109, 12, 255, 201, 114, 7, 255, 200, 116, 7, 255, 198, 108, 10, 255, 195, 107, 3, 255, 197, 110, 7, 255, 203, 117, 7, 255, 201, 115, 2, 255, 192, 103, 7, 255, 192, 105, 9, 255, 195, 108, 20, 255, 194, 111, 8, 255, 197, 113, 12, 255, 202, 119, 9, 255, 201, 117, 4, 255, 196, 110, 7, 255, 194, 108, 17, 255, 194, 111, 20, 255, 207, 129, 9, 255, 216, 138, 0, 255, 215, 132, 7, 255, 218, 137, 10, 255, 218, 142, 12, 255, 217, 144, 11, 255, 215, 144, 11, 255, 217, 150, 5, 255, 217, 149, 10, 255, 221, 152, 15, 255, 219, 153, 11, 255, 218, 155, 5, 255, 215, 155, 3, 255, 215, 156, 4, 255, 213, 153, 9, 255, 206, 148, 5, 255, 205, 149, 7, 255, 206, 152, 5, 255, 210, 152, 8, 255, 218, 163, 6, 255, 221, 171, 7, 255, 226, 169, 13, 255, 232, 166, 9, 255, 211, 144, 16, 255, 207, 145, 9, 255, 206, 146, 5, 255, 218, 160, 11, 255, 226, 176, 2, 255, 228, 174, 12, 255, 228, 174, 13, 255, 215, 161, 8, 255, 213, 161, 9, 255, 216, 166, 6, 255, 216, 168, 2, 255, 229, 179, 3, 255, 215, 159, 15, 255, 211, 158, 14, 255, 218, 175, 1, 255, 218, 174, 2, 255, 223, 172, 2, 255, 224, 176, 4, 255, 217, 173, 14, 255, 218, 176, 2, 255, 221, 177, 10, 255, 216, 172, 7, 255, 216, 172, 9, 255, 213, 170, 3, 255, 214, 171, 1, 255, 212, 169, 4, 255, 209, 165, 1, 255, 205, 159, 7, 255, 194, 146, 3, 255, 200, 155, 10, 255, 212, 171, 7, 255, 208, 169, 0, 255, 212, 169, 5, 255, 207, 160, 13, 255, 189, 136, 19, 255, 200, 150, 7, 255, 210, 164, 4, 255, 196, 148, 9, 255, 200, 152, 10, 255, 201, 156, 5, 255, 201, 155, 3, 255, 206, 156, 8, 255, 206, 155, 9, 255, 208, 155, 9, 255, 179, 121, 5, 255, 167, 111, 15, 255, 201, 155, 10, 255, 203, 158, 10, 255, 199, 155, 5, 255, 196, 151, 1, 255, 199, 151, 4, 255, 198, 153, 1, 255, 202, 157, 3, 255, 200, 155, 1, 255, 198, 152, 1, 255, 198, 149, 14, 255, 195, 148, 6, 255, 196, 150, 1, 255, 204, 153, 6, 255, 202, 151, 7, 255, 199, 150, 1, 255, 202, 151, 4, 255, 201, 146, 12, 255, 199, 141, 15, 255, 197, 139, 10, 255, 195, 135, 9, 255, 193, 132, 10, 255, 193, 129, 8, 255, 188, 122, 2, 255, 185, 117, 6, 255, 191, 118, 14, 255, 182, 105, 10, 255, 181, 105, 3, 255, 179, 104, 8, 255, 172, 96, 8, 255, 169, 92, 2, 255, 178, 97, 5, 255, 176, 93, 4, 255, 170, 91, 2, 255, 165, 88, 3, 255, 163, 84, 7, 255, 155, 78, 2, 255, 140, 70, 6, 255, 133, 61, 3, 255, 151, 75, 3, 255, 148, 69, 3, 255, 152, 71, 9, 255, 150, 75, 3, 255, 138, 66, 2, 255, 131, 57, 2, 255, 135, 59, 5, 255, 129, 55, 3, 255, 121, 47, 2, 255, 112, 44, 2, 255, 98, 35, 6, 255, 92, 38, 2, 255, 103, 37, 3, 255, 104, 33, 4, 255, 102, 39, 6, 255, 103, 43, 2, 255, 108, 40, 1, 255, 103, 35, 1, 255, 106, 41, 5, 255, 108, 38, 3, 255, 107, 39, 2, 255, 106, 43, 3, 255, 106, 44, 3, 255, 102, 40, 3, 255, 101, 36, 4, 255, 99, 36, 4, 255, 101, 36, 4, 255, 101, 33, 5, 255, 99, 32, 5, 255, 95, 35, 4, 255, 90, 36, 1, 255, 93, 36, 1, 255, 93, 32, 2, 255, 82, 26, 1, 255, 109, 43, 3, 255, 137, 56, 5, 255, 140, 59, 11, 255, 133, 53, 3, 255, 124, 47, 3, 255, 121, 47, 5, 255, 115, 44, 1, 255, 104, 35, 0, 255, 96, 29, 1, 255, 94, 31, 0, 255, 102, 33, 2, 255, 101, 32, 2, 255, 103, 35, 5, 255, 107, 37, 8, 255, 105, 35, 7, 255, 99, 31, 3, 255, 97, 33, 2, 255, 98, 35, 1, 255, 104, 36, 2, 255, 100, 33, 1, 255, 98, 34, 0, 255, 100, 34, 4, 255, 100, 27, 1, 255, 97, 30, 4, 255, 81, 24, 4, 255, 72, 22, 2, 255, 84, 28, 0, 255, 104, 32, 2, 255, 109, 35, 1, 255, 111, 34, 7, 255, 117, 36, 3, 255, 119, 35, 0, 255, 108, 27, 3, 255, 101, 30, 5, 255, 94, 26, 2, 255, 85, 20, 5, 255, 81, 25, 0, 255, 83, 28, 2, 255, 83, 32, 4, 255, 86, 34, 6, 255, 91, 32, 1, 255, 104, 40, 6, 255, 100, 42, 4, 255, 106, 45, 5, 255, 108, 49, 4, 255, 105, 48, 2, 255, 107, 41, 1, 255, 100, 30, 4, 255, 85, 21, 2, 255, 70, 23, 3, 255, 61, 20, 5, 255, 64, 18, 3, 255, 56, 17, 0, 255, 58, 22, 3, 255, 79, 26, 8, 255, 79, 23, 1, 255, 86, 21, 3, 255, 83, 18, 1, 255, 76, 23, 1, 255, 75, 30, 4, 255, 73, 23, 3, 255, 77, 19, 4, 255, 81, 20, 4, 255, 84, 20, 2, 255, 89, 23, 4, 255, 89, 24, 5, 255, 84, 24, 4, 255, 76, 22, 1, 255, 79, 22, 3, 255, 88, 25, 3, 255, 93, 27, 2, 255, 10, 6, 2, 255, 12, 7, 4, 255, 5, 2, 0, 255, 4, 3, 1, 255, 4, 1, 0, 255, 5, 2, 0, 255, 7, 3, 0, 255, 9, 4, 1, 255, 10, 5, 2, 255, 10, 5, 1, 255, 9, 4, 0, 255, 9, 4, 0, 255, 10, 5, 1, 255, 13, 6, 1, 255, 12, 5, 2, 255, 10, 5, 4, 255, 16, 11, 9, 255, 21, 14, 10, 255, 25, 17, 11, 255, 27, 17, 10, 255, 27, 16, 7, 255, 28, 17, 8, 255, 28, 19, 11, 255, 25, 17, 8, 255, 27, 21, 8, 255, 27, 21, 6, 255, 29, 21, 7, 255, 31, 21, 9, 255, 34, 25, 12, 255, 39, 31, 14, 255, 38, 31, 11, 255, 42, 35, 16, 255, 44, 40, 14, 255, 45, 39, 13, 255, 52, 44, 15, 255, 61, 47, 11, 255, 60, 45, 12, 255, 58, 50, 9, 255, 51, 46, 5, 255, 62, 52, 14, 255, 75, 62, 10, 255, 67, 57, 3, 255, 68, 60, 7, 255, 62, 58, 14, 255, 62, 64, 32, 255, 73, 78, 53, 255, 73, 74, 56, 255, 76, 73, 37, 255, 75, 68, 17, 255, 63, 56, 0, 255, 59, 54, 1, 255, 60, 58, 13, 255, 86, 69, 24, 255, 74, 67, 4, 255, 85, 58, 11, 255, 116, 62, 8, 255, 101, 62, 5, 255, 142, 73, 9, 255, 146, 69, 3, 255, 155, 82, 5, 255, 166, 82, 1, 255, 165, 81, 3, 255, 174, 84, 3, 255, 183, 90, 3, 255, 175, 89, 2, 255, 178, 86, 6, 255, 176, 87, 6, 255, 168, 88, 5, 255, 171, 84, 6, 255, 164, 82, 4, 255, 169, 81, 5, 255, 171, 76, 6, 255, 159, 82, 1, 255, 155, 78, 7, 255, 152, 75, 5, 255, 156, 74, 11, 255, 155, 79, 3, 255, 147, 73, 5, 255, 145, 68, 2, 255, 156, 75, 0, 255, 152, 74, 8, 255, 152, 81, 7, 255, 159, 79, 3, 255, 149, 71, 2, 255, 142, 70, 2, 255, 132, 64, 3, 255, 129, 58, 2, 255, 130, 57, 3, 255, 129, 61, 8, 255, 134, 64, 8, 255, 147, 67, 4, 255, 154, 80, 4, 255, 162, 82, 5, 255, 162, 75, 5, 255, 157, 78, 0, 255, 177, 90, 4, 255, 184, 93, 9, 255, 185, 89, 5, 255, 171, 81, 10, 255, 174, 90, 4, 255, 182, 92, 1, 255, 184, 93, 1, 255, 185, 92, 3, 255, 177, 83, 1, 255, 184, 88, 1, 255, 192, 98, 4, 255, 191, 96, 2, 255, 180, 84, 1, 255, 184, 87, 9, 255, 185, 89, 1, 255, 183, 88, 2, 255, 190, 96, 5, 255, 192, 98, 2, 255, 188, 93, 5, 255, 177, 81, 8, 255, 187, 86, 9, 255, 187, 93, 3, 255, 192, 100, 5, 255, 196, 98, 4, 255, 191, 92, 0, 255, 188, 94, 4, 255, 187, 95, 9, 255, 178, 89, 5, 255, 179, 86, 5, 255, 187, 87, 1, 255, 185, 91, 5, 255, 188, 94, 2, 255, 190, 94, 2, 255, 186, 91, 3, 255, 184, 88, 6, 255, 174, 79, 6, 255, 157, 68, 2, 255, 158, 73, 8, 255, 158, 73, 4, 255, 169, 77, 7, 255, 162, 70, 11, 255, 133, 50, 10, 255, 138, 60, 7, 255, 142, 63, 4, 255, 137, 60, 4, 255, 135, 62, 4, 255, 133, 60, 5, 255, 142, 65, 7, 255, 133, 63, 7, 255, 144, 69, 7, 255, 147, 64, 0, 255, 141, 66, 10, 255, 159, 81, 15, 255, 177, 95, 9, 255, 183, 97, 0, 255, 184, 98, 4, 255, 186, 95, 2, 255, 185, 94, 5, 255, 181, 98, 9, 255, 192, 100, 4, 255, 189, 94, 1, 255, 185, 97, 3, 255, 185, 99, 12, 255, 196, 110, 6, 255, 194, 106, 7, 255, 196, 102, 6, 255, 189, 102, 8, 255, 191, 107, 4, 255, 201, 112, 6, 255, 190, 103, 7, 255, 197, 105, 12, 255, 196, 110, 3, 255, 192, 102, 7, 255, 194, 105, 9, 255, 204, 114, 4, 255, 206, 111, 7, 255, 206, 114, 8, 255, 208, 114, 6, 255, 199, 107, 10, 255, 198, 108, 9, 255, 206, 119, 6, 255, 206, 120, 5, 255, 201, 113, 14, 255, 206, 118, 20, 255, 202, 120, 9, 255, 201, 118, 16, 255, 199, 116, 10, 255, 190, 107, 3, 255, 200, 119, 5, 255, 202, 120, 11, 255, 203, 123, 9, 255, 195, 116, 6, 255, 186, 110, 7, 255, 203, 128, 15, 255, 215, 134, 10, 255, 213, 132, 8, 255, 214, 138, 6, 255, 211, 142, 3, 255, 211, 144, 3, 255, 211, 146, 9, 255, 215, 150, 13, 255, 216, 152, 14, 255, 217, 156, 1, 255, 215, 155, 3, 255, 215, 157, 4, 255, 217, 160, 1, 255, 217, 163, 4, 255, 216, 162, 7, 255, 216, 163, 6, 255, 219, 169, 7, 255, 218, 171, 5, 255, 219, 160, 12, 255, 218, 158, 5, 255, 221, 169, 1, 255, 222, 172, 5, 255, 218, 162, 9, 255, 200, 140, 17, 255, 203, 146, 15, 255, 212, 158, 11, 255, 217, 167, 6, 255, 223, 174, 3, 255, 226, 173, 8, 255, 225, 176, 8, 255, 222, 176, 6, 255, 222, 176, 7, 255, 223, 176, 8, 255, 223, 176, 7, 255, 224, 174, 4, 255, 208, 153, 5, 255, 207, 166, 6, 255, 223, 175, 0, 255, 222, 174, 7, 255, 217, 171, 9, 255, 219, 171, 4, 255, 218, 173, 18, 255, 215, 175, 4, 255, 216, 173, 4, 255, 213, 168, 3, 255, 212, 168, 3, 255, 209, 163, 10, 255, 208, 162, 6, 255, 209, 166, 10, 255, 208, 164, 12, 255, 194, 148, 3, 255, 187, 140, 4, 255, 198, 155, 7, 255, 214, 172, 5, 255, 210, 165, 5, 255, 210, 167, 2, 255, 206, 162, 4, 255, 200, 153, 8, 255, 198, 153, 2, 255, 206, 163, 0, 255, 201, 156, 6, 255, 207, 163, 11, 255, 202, 159, 6, 255, 196, 150, 2, 255, 199, 150, 5, 255, 202, 151, 14, 255, 211, 161, 13, 255, 197, 146, 11, 255, 153, 97, 6, 255, 195, 147, 12, 255, 204, 157, 10, 255, 199, 154, 6, 255, 196, 151, 5, 255, 196, 151, 6, 255, 198, 154, 0, 255, 201, 155, 7, 255, 199, 151, 8, 255, 198, 152, 1, 255, 197, 149, 4, 255, 194, 147, 5, 255, 199, 153, 4, 255, 203, 152, 7, 255, 202, 153, 3, 255, 201, 151, 3, 255, 201, 151, 3, 255, 202, 149, 3, 255, 201, 143, 5, 255, 197, 139, 4, 255, 197, 139, 5, 255, 194, 135, 6, 255, 191, 127, 9, 255, 190, 123, 10, 255, 189, 118, 4, 255, 184, 112, 2, 255, 176, 98, 8, 255, 179, 100, 3, 255, 174, 97, 3, 255, 171, 94, 6, 255, 172, 96, 4, 255, 172, 95, 2, 255, 166, 93, 2, 255, 167, 94, 1, 255, 165, 93, 2, 255, 165, 95, 1, 255, 169, 96, 0, 255, 173, 90, 4, 255, 164, 84, 4, 255, 153, 76, 0, 255, 149, 68, 1, 255, 152, 73, 7, 255, 138, 64, 2, 255, 127, 59, 5, 255, 121, 56, 4, 255, 124, 51, 4, 255, 115, 42, 8, 255, 105, 35, 4, 255, 99, 32, 1, 255, 101, 39, 6, 255, 100, 43, 4, 255, 104, 43, 3, 255, 96, 35, 2, 255, 101, 39, 7, 255, 102, 41, 2, 255, 99, 40, 3, 255, 100, 37, 6, 255, 109, 37, 6, 255, 107, 39, 2, 255, 101, 41, 2, 255, 101, 42, 3, 255, 106, 42, 4, 255, 106, 39, 4, 255, 100, 34, 3, 255, 99, 38, 7, 255, 98, 36, 2, 255, 100, 34, 3, 255, 100, 34, 5, 255, 98, 34, 6, 255, 93, 31, 2, 255, 89, 28, 0, 255, 93, 33, 6, 255, 85, 30, 2, 255, 91, 31, 4, 255, 106, 37, 9, 255, 107, 30, 3, 255, 110, 33, 5, 255, 110, 38, 2, 255, 109, 34, 1, 255, 108, 30, 4, 255, 108, 32, 6, 255, 105, 35, 9, 255, 100, 34, 3, 255, 95, 33, 0, 255, 97, 33, 0, 255, 102, 33, 0, 255, 100, 32, 0, 255, 99, 34, 2, 255, 97, 33, 1, 255, 98, 34, 2, 255, 99, 35, 4, 255, 101, 37, 5, 255, 100, 35, 6, 255, 103, 38, 4, 255, 102, 36, 5, 255, 98, 32, 3, 255, 85, 27, 1, 255, 74, 21, 3, 255, 75, 25, 5, 255, 86, 30, 4, 255, 95, 29, 2, 255, 102, 32, 2, 255, 102, 30, 4, 255, 95, 29, 1, 255, 93, 30, 1, 255, 85, 24, 4, 255, 85, 30, 6, 255, 80, 29, 1, 255, 77, 31, 2, 255, 86, 34, 2, 255, 90, 35, 3, 255, 95, 34, 3, 255, 98, 35, 4, 255, 98, 36, 1, 255, 107, 44, 5, 255, 107, 43, 1, 255, 110, 45, 1, 255, 110, 44, 3, 255, 104, 38, 2, 255, 90, 28, 0, 255, 74, 22, 5, 255, 71, 17, 5, 255, 71, 20, 4, 255, 53, 19, 1, 255, 57, 17, 2, 255, 67, 17, 4, 255, 75, 23, 4, 255, 76, 26, 3, 255, 75, 26, 3, 255, 75, 21, 0, 255, 77, 21, 0, 255, 76, 23, 0, 255, 81, 29, 3, 255, 83, 25, 4, 255, 82, 18, 4, 255, 84, 23, 4, 255, 86, 28, 2, 255, 88, 29, 0, 255, 84, 25, 1, 255, 75, 23, 1, 255, 77, 27, 4, 255, 89, 27, 4, 255, 97, 33, 3, 255, 101, 35, 1, 255, 13, 6, 3, 255, 9, 4, 2, 255, 4, 0, 0, 255, 7, 4, 3, 255, 10, 6, 3, 255, 8, 3, 0, 255, 10, 5, 2, 255, 10, 5, 1, 255, 10, 5, 1, 255, 14, 9, 5, 255, 10, 5, 1, 255, 8, 3, 0, 255, 13, 8, 5, 255, 11, 7, 4, 255, 9, 6, 1, 255, 17, 13, 2, 255, 17, 12, 0, 255, 19, 13, 5, 255, 24, 17, 15, 255, 26, 19, 11, 255, 25, 19, 8, 255, 24, 21, 8, 255, 21, 19, 7, 255, 23, 21, 10, 255, 22, 23, 9, 255, 29, 26, 8, 255, 38, 28, 8, 255, 36, 27, 9, 255, 38, 31, 13, 255, 38, 31, 8, 255, 41, 33, 9, 255, 42, 34, 11, 255, 41, 37, 18, 255, 54, 43, 10, 255, 61, 44, 10, 255, 57, 40, 10, 255, 59, 49, 11, 255, 59, 51, 14, 255, 47, 45, 16, 255, 67, 62, 16, 255, 72, 60, 2, 255, 73, 63, 6, 255, 70, 57, 8, 255, 67, 57, 18, 255, 74, 72, 60, 255, 77, 85, 59, 255, 72, 80, 50, 255, 69, 74, 56, 255, 66, 70, 19, 255, 72, 62, 2, 255, 81, 54, 1, 255, 100, 63, 16, 255, 134, 82, 22, 255, 137, 89, 1, 255, 161, 96, 9, 255, 171, 90, 2, 255, 175, 89, 8, 255, 177, 85, 7, 255, 178, 91, 5, 255, 176, 91, 0, 255, 173, 88, 3, 255, 169, 86, 4, 255, 163, 81, 8, 255, 155, 89, 5, 255, 153, 84, 3, 255, 142, 73, 3, 255, 142, 72, 5, 255, 135, 66, 6, 255, 128, 66, 5, 255, 134, 65, 7, 255, 124, 65, 1, 255, 128, 69, 8, 255, 109, 56, 1, 255, 99, 44, 3, 255, 99, 52, 7, 255, 115, 51, 7, 255, 109, 49, 3, 255, 95, 47, 4, 255, 99, 43, 5, 255, 105, 53, 2, 255, 116, 54, 6, 255, 106, 51, 2, 255, 106, 52, 1, 255, 99, 47, 5, 255, 77, 33, 2, 255, 62, 27, 4, 255, 69, 33, 8, 255, 78, 36, 5, 255, 81, 34, 2, 255, 81, 39, 5, 255, 77, 40, 2, 255, 83, 36, 1, 255, 87, 38, 5, 255, 95, 46, 3, 255, 105, 51, 8, 255, 111, 50, 5, 255, 111, 54, 7, 255, 125, 67, 5, 255, 153, 81, 3, 255, 168, 85, 2, 255, 174, 89, 3, 255, 176, 89, 4, 255, 176, 89, 1, 255, 180, 91, 1, 255, 178, 85, 2, 255, 183, 87, 4, 255, 180, 83, 2, 255, 183, 87, 2, 255, 185, 90, 3, 255, 187, 92, 6, 255, 185, 90, 4, 255, 188, 92, 2, 255, 195, 100, 4, 255, 188, 93, 1, 255, 183, 88, 3, 255, 189, 95, 6, 255, 193, 100, 0, 255, 200, 105, 3, 255, 196, 100, 5, 255, 191, 100, 4, 255, 193, 103, 6, 255, 196, 95, 7, 255, 193, 96, 5, 255, 193, 104, 1, 255, 198, 99, 6, 255, 200, 103, 6, 255, 185, 89, 2, 255, 173, 80, 5, 255, 183, 91, 4, 255, 175, 78, 5, 255, 152, 58, 0, 255, 151, 66, 4, 255, 162, 77, 6, 255, 165, 76, 4, 255, 159, 65, 9, 255, 137, 55, 4, 255, 137, 61, 8, 255, 151, 71, 4, 255, 154, 72, 6, 255, 157, 76, 8, 255, 148, 68, 1, 255, 145, 67, 3, 255, 158, 72, 6, 255, 168, 81, 8, 255, 165, 80, 3, 255, 168, 78, 12, 255, 180, 94, 10, 255, 192, 99, 4, 255, 188, 98, 5, 255, 188, 101, 1, 255, 192, 97, 6, 255, 187, 100, 10, 255, 185, 101, 8, 255, 193, 98, 9, 255, 188, 96, 2, 255, 191, 100, 10, 255, 193, 101, 4, 255, 194, 106, 7, 255, 193, 106, 5, 255, 196, 107, 1, 255, 184, 94, 2, 255, 161, 76, 10, 255, 174, 85, 14, 255, 179, 89, 6, 255, 192, 104, 11, 255, 199, 114, 7, 255, 202, 112, 5, 255, 195, 106, 6, 255, 193, 104, 5, 255, 201, 112, 11, 255, 202, 113, 7, 255, 203, 117, 2, 255, 206, 116, 14, 255, 191, 106, 9, 255, 192, 107, 7, 255, 206, 125, 7, 255, 201, 123, 6, 255, 204, 124, 17, 255, 208, 130, 10, 255, 209, 127, 7, 255, 202, 117, 11, 255, 193, 107, 7, 255, 195, 111, 8, 255, 206, 126, 13, 255, 207, 134, 6, 255, 203, 131, 5, 255, 196, 122, 6, 255, 200, 130, 15, 255, 206, 135, 15, 255, 202, 123, 19, 255, 195, 120, 11, 255, 205, 138, 10, 255, 211, 144, 7, 255, 212, 145, 8, 255, 213, 147, 17, 255, 211, 147, 6, 255, 215, 152, 8, 255, 214, 152, 6, 255, 215, 157, 3, 255, 216, 158, 18, 255, 217, 161, 7, 255, 218, 162, 7, 255, 218, 163, 11, 255, 219, 164, 5, 255, 223, 169, 2, 255, 226, 168, 6, 255, 212, 156, 5, 255, 208, 152, 5, 255, 222, 168, 8, 255, 220, 165, 3, 255, 220, 163, 17, 255, 209, 158, 15, 255, 211, 164, 11, 255, 213, 167, 4, 255, 216, 172, 3, 255, 220, 174, 8, 255, 222, 173, 6, 255, 223, 174, 1, 255, 223, 171, 3, 255, 223, 175, 3, 255, 222, 175, 3, 255, 222, 174, 14, 255, 209, 156, 14, 255, 205, 151, 2, 255, 216, 171, 6, 255, 216, 173, 6, 255, 216, 172, 5, 255, 215, 172, 9, 255, 212, 172, 6, 255, 211, 168, 3, 255, 213, 169, 5, 255, 212, 169, 6, 255, 208, 164, 0, 255, 205, 160, 3, 255, 206, 161, 10, 255, 205, 162, 5, 255, 204, 162, 6, 255, 203, 162, 7, 255, 205, 161, 4, 255, 183, 132, 18, 255, 195, 149, 10, 255, 210, 168, 0, 255, 208, 163, 2, 255, 210, 166, 1, 255, 202, 157, 3, 255, 195, 146, 5, 255, 196, 148, 6, 255, 201, 156, 5, 255, 203, 160, 5, 255, 205, 161, 8, 255, 200, 154, 8, 255, 195, 149, 1, 255, 190, 142, 6, 255, 201, 155, 6, 255, 209, 170, 1, 255, 212, 173, 9, 255, 179, 127, 16, 255, 179, 126, 2, 255, 196, 145, 4, 255, 194, 146, 4, 255, 197, 154, 3, 255, 194, 149, 11, 255, 194, 150, 2, 255, 198, 151, 7, 255, 199, 151, 6, 255, 199, 149, 1, 255, 198, 149, 5, 255, 195, 147, 14, 255, 199, 153, 2, 255, 202, 151, 3, 255, 203, 152, 9, 255, 202, 151, 14, 255, 200, 146, 10, 255, 203, 146, 10, 255, 201, 143, 3, 255, 198, 139, 6, 255, 193, 135, 5, 255, 192, 133, 5, 255, 189, 126, 3, 255, 189, 122, 7, 255, 184, 111, 3, 255, 180, 107, 3, 255, 175, 102, 8, 255, 175, 97, 4, 255, 174, 95, 3, 255, 176, 100, 6, 255, 178, 102, 5, 255, 174, 96, 2, 255, 174, 98, 1, 255, 176, 100, 2, 255, 173, 94, 5, 255, 171, 94, 4, 255, 166, 90, 3, 255, 156, 81, 0, 255, 153, 80, 4, 255, 152, 78, 7, 255, 154, 76, 6, 255, 144, 65, 1, 255, 138, 63, 1, 255, 137, 69, 2, 255, 135, 67, 10, 255, 137, 64, 3, 255, 110, 45, 3, 255, 94, 34, 4, 255, 89, 31, 2, 255, 104, 44, 1, 255, 106, 44, 4, 255, 108, 46, 1, 255, 103, 38, 2, 255, 100, 33, 3, 255, 102, 37, 3, 255, 97, 34, 4, 255, 88, 31, 6, 255, 89, 33, 2, 255, 98, 36, 3, 255, 99, 36, 4, 255, 97, 35, 2, 255, 96, 36, 1, 255, 100, 37, 3, 255, 103, 34, 3, 255, 103, 34, 3, 255, 102, 35, 1, 255, 101, 37, 1, 255, 98, 35, 3, 255, 96, 31, 4, 255, 96, 31, 4, 255, 95, 29, 4, 255, 88, 29, 4, 255, 86, 28, 1, 255, 78, 24, 1, 255, 90, 37, 7, 255, 105, 39, 2, 255, 102, 34, 1, 255, 106, 37, 4, 255, 113, 39, 3, 255, 119, 39, 4, 255, 122, 44, 3, 255, 120, 46, 3, 255, 107, 35, 2, 255, 97, 30, 4, 255, 90, 30, 1, 255, 94, 35, 3, 255, 99, 35, 2, 255, 102, 34, 2, 255, 97, 33, 2, 255, 101, 36, 4, 255, 99, 31, 4, 255, 95, 31, 1, 255, 94, 29, 2, 255, 104, 36, 2, 255, 100, 34, 3, 255, 94, 34, 3, 255, 81, 27, 1, 255, 74, 23, 3, 255, 72, 21, 2, 255, 82, 26, 3, 255, 83, 24, 5, 255, 89, 26, 4, 255, 90, 25, 0, 255, 86, 29, 6, 255, 89, 28, 5, 255, 88, 28, 1, 255, 88, 30, 2, 255, 93, 26, 1, 255, 95, 31, 6, 255, 98, 36, 4, 255, 95, 32, 0, 255, 100, 37, 2, 255, 104, 41, 4, 255, 103, 39, 1, 255, 108, 44, 3, 255, 115, 41, 2, 255, 109, 41, 7, 255, 95, 32, 4, 255, 90, 25, 2, 255, 77, 22, 1, 255, 68, 21, 3, 255, 66, 17, 4, 255, 64, 15, 2, 255, 57, 16, 5, 255, 58, 15, 5, 255, 75, 22, 4, 255, 84, 26, 2, 255, 79, 22, 0, 255, 76, 20, 2, 255, 74, 19, 2, 255, 79, 24, 4, 255, 80, 23, 1, 255, 85, 25, 1, 255, 86, 22, 2, 255, 91, 26, 4, 255, 89, 26, 1, 255, 89, 27, 2, 255, 92, 26, 6, 255, 90, 20, 3, 255, 90, 22, 4, 255, 92, 27, 2, 255, 104, 31, 3, 255, 109, 36, 1, 255, 113, 41, 2, 255, 16, 8, 5, 255, 8, 5, 2, 255, 1, 1, 0, 255, 5, 2, 0, 255, 12, 7, 2, 255, 8, 2, 0, 255, 11, 3, 1, 255, 10, 4, 1, 255, 10, 6, 2, 255, 10, 7, 2, 255, 13, 8, 3, 255, 10, 4, 1, 255, 16, 9, 4, 255, 8, 6, 1, 255, 11, 9, 1, 255, 15, 12, 4, 255, 14, 9, 4, 255, 13, 8, 6, 255, 25, 19, 20, 255, 26, 18, 18, 255, 24, 18, 10, 255, 21, 22, 6, 255, 25, 21, 9, 255, 29, 21, 12, 255, 29, 26, 10, 255, 35, 27, 8, 255, 41, 27, 11, 255, 40, 29, 10, 255, 37, 34, 6, 255, 41, 37, 11, 255, 39, 34, 11, 255, 45, 44, 12, 255, 47, 41, 15, 255, 53, 44, 10, 255, 51, 44, 15, 255, 56, 43, 24, 255, 56, 51, 11, 255, 52, 51, 13, 255, 55, 50, 7, 255, 77, 65, 10, 255, 67, 59, 5, 255, 63, 52, 7, 255, 66, 57, 8, 255, 70, 72, 34, 255, 78, 83, 70, 255, 70, 84, 60, 255, 74, 78, 54, 255, 97, 85, 56, 255, 109, 83, 33, 255, 133, 83, 21, 255, 144, 78, 12, 255, 164, 91, 16, 255, 175, 97, 6, 255, 183, 103, 14, 255, 174, 98, 12, 255, 166, 90, 6, 255, 162, 87, 5, 255, 152, 81, 13, 255, 140, 72, 4, 255, 130, 64, 3, 255, 122, 63, 6, 255, 108, 60, 5, 255, 99, 54, 6, 255, 83, 47, 2, 255, 90, 46, 8, 255, 83, 39, 4, 255, 75, 36, 3, 255, 64, 34, 2, 255, 67, 37, 4, 255, 75, 37, 5, 255, 67, 36, 4, 255, 74, 39, 10, 255, 71, 30, 6, 255, 62, 29, 0, 255, 58, 36, 0, 255, 60, 30, 0, 255, 56, 28, 2, 255, 55, 34, 2, 255, 61, 27, 3, 255, 64, 27, 2, 255, 65, 29, 2, 255, 66, 30, 1, 255, 69, 33, 1, 255, 61, 29, 6, 255, 59, 29, 1, 255, 68, 34, 4, 255, 70, 36, 6, 255, 67, 31, 3, 255, 74, 37, 4, 255, 74, 41, 5, 255, 73, 41, 4, 255, 81, 39, 0, 255, 74, 35, 1, 255, 81, 37, 2, 255, 90, 40, 2, 255, 85, 38, 1, 255, 74, 35, 5, 255, 78, 45, 2, 255, 116, 61, 2, 255, 144, 65, 1, 255, 147, 73, 5, 255, 162, 80, 4, 255, 173, 83, 1, 255, 178, 89, 5, 255, 177, 88, 8, 255, 177, 87, 2, 255, 184, 90, 1, 255, 180, 90, 1, 255, 175, 84, 11, 255, 176, 85, 11, 255, 183, 91, 0, 255, 185, 89, 0, 255, 190, 93, 3, 255, 189, 95, 5, 255, 184, 93, 0, 255, 190, 99, 0, 255, 195, 102, 1, 255, 200, 104, 3, 255, 197, 106, 1, 255, 195, 109, 2, 255, 195, 101, 2, 255, 195, 97, 2, 255, 197, 102, 3, 255, 194, 97, 1, 255, 182, 80, 3, 255, 178, 77, 6, 255, 166, 67, 6, 255, 179, 89, 7, 255, 177, 79, 3, 255, 157, 64, 4, 255, 160, 69, 6, 255, 165, 73, 2, 255, 172, 82, 3, 255, 176, 89, 3, 255, 172, 86, 1, 255, 162, 78, 1, 255, 167, 84, 1, 255, 182, 94, 4, 255, 191, 99, 6, 255, 185, 98, 5, 255, 161, 77, 2, 255, 169, 86, 5, 255, 186, 102, 10, 255, 191, 103, 6, 255, 186, 98, 2, 255, 190, 102, 8, 255, 191, 102, 2, 255, 189, 96, 6, 255, 185, 93, 9, 255, 178, 89, 4, 255, 189, 101, 9, 255, 193, 105, 10, 255, 191, 103, 5, 255, 190, 100, 2, 255, 193, 105, 7, 255, 191, 102, 8, 255, 189, 101, 4, 255, 196, 108, 4, 255, 192, 104, 1, 255, 195, 108, 3, 255, 192, 105, 3, 255, 183, 100, 8, 255, 188, 100, 12, 255, 198, 108, 14, 255, 201, 116, 11, 255, 199, 112, 4, 255, 198, 107, 6, 255, 196, 106, 9, 255, 200, 111, 10, 255, 203, 114, 10, 255, 202, 115, 5, 255, 206, 119, 4, 255, 205, 118, 9, 255, 207, 120, 2, 255, 205, 121, 10, 255, 204, 126, 6, 255, 205, 130, 6, 255, 205, 128, 18, 255, 204, 128, 9, 255, 196, 119, 7, 255, 188, 109, 10, 255, 187, 108, 7, 255, 203, 128, 14, 255, 202, 129, 12, 255, 203, 130, 16, 255, 203, 129, 15, 255, 199, 127, 4, 255, 205, 135, 9, 255, 206, 138, 10, 255, 204, 138, 8, 255, 195, 128, 18, 255, 198, 136, 8, 255, 207, 147, 5, 255, 208, 146, 4, 255, 210, 154, 2, 255, 212, 152, 8, 255, 210, 151, 12, 255, 209, 151, 7, 255, 212, 153, 3, 255, 217, 157, 15, 255, 216, 157, 8, 255, 214, 160, 4, 255, 215, 160, 6, 255, 215, 161, 3, 255, 218, 161, 3, 255, 218, 164, 3, 255, 212, 157, 7, 255, 209, 152, 14, 255, 216, 162, 7, 255, 217, 165, 5, 255, 205, 150, 7, 255, 208, 155, 16, 255, 217, 168, 11, 255, 219, 170, 1, 255, 218, 171, 1, 255, 220, 170, 5, 255, 218, 170, 7, 255, 218, 170, 9, 255, 220, 173, 6, 255, 218, 171, 0, 255, 219, 170, 3, 255, 218, 170, 13, 255, 199, 150, 16, 255, 195, 148, 16, 255, 211, 167, 5, 255, 211, 170, 3, 255, 211, 168, 6, 255, 208, 163, 3, 255, 208, 163, 7, 255, 208, 164, 9, 255, 204, 164, 6, 255, 204, 165, 5, 255, 200, 159, 2, 255, 200, 157, 5, 255, 201, 158, 0, 255, 199, 156, 2, 255, 190, 145, 2, 255, 200, 154, 6, 255, 206, 164, 1, 255, 191, 143, 10, 255, 194, 148, 10, 255, 202, 158, 6, 255, 201, 156, 6, 255, 204, 158, 9, 255, 201, 156, 1, 255, 192, 144, 13, 255, 195, 148, 13, 255, 200, 155, 4, 255, 207, 162, 4, 255, 209, 164, 0, 255, 202, 159, 3, 255, 196, 152, 5, 255, 199, 155, 3, 255, 201, 157, 0, 255, 207, 164, 6, 255, 209, 167, 5, 255, 203, 161, 6, 255, 176, 128, 3, 255, 187, 138, 6, 255, 186, 137, 6, 255, 191, 142, 9, 255, 193, 145, 12, 255, 194, 146, 5, 255, 200, 149, 9, 255, 198, 147, 5, 255, 195, 146, 6, 255, 201, 154, 17, 255, 199, 152, 12, 255, 199, 153, 2, 255, 202, 156, 6, 255, 202, 151, 8, 255, 204, 152, 4, 255, 203, 148, 5, 255, 202, 144, 15, 255, 200, 138, 9, 255, 198, 134, 12, 255, 197, 132, 8, 255, 189, 128, 3, 255, 188, 126, 3, 255, 188, 113, 6, 255, 168, 89, 2, 255, 169, 94, 9, 255, 176, 101, 19, 255, 178, 99, 7, 255, 179, 97, 9, 255, 179, 99, 1, 255, 174, 96, 1, 255, 171, 91, 9, 255, 169, 91, 7, 255, 165, 86, 6, 255, 161, 82, 5, 255, 159, 81, 2, 255, 160, 84, 2, 255, 153, 80, 2, 255, 153, 82, 2, 255, 160, 86, 5, 255, 156, 80, 3, 255, 153, 73, 1, 255, 149, 70, 2, 255, 143, 67, 1, 255, 138, 63, 3, 255, 138, 62, 2, 255, 126, 57, 2, 255, 115, 45, 2, 255, 107, 42, 7, 255, 107, 40, 7, 255, 98, 39, 1, 255, 102, 41, 2, 255, 106, 33, 3, 255, 103, 38, 4, 255, 99, 35, 0, 255, 100, 32, 7, 255, 88, 29, 2, 255, 95, 37, 2, 255, 101, 36, 1, 255, 103, 36, 2, 255, 98, 36, 3, 255, 94, 36, 2, 255, 97, 35, 2, 255, 100, 32, 1, 255, 99, 30, 2, 255, 98, 32, 4, 255, 95, 33, 5, 255, 93, 33, 3, 255, 93, 32, 3, 255, 95, 32, 1, 255, 98, 36, 6, 255, 95, 31, 4, 255, 92, 31, 2, 255, 84, 30, 4, 255, 75, 25, 2, 255, 92, 30, 4, 255, 108, 33, 5, 255, 111, 36, 5, 255, 105, 44, 5, 255, 114, 44, 2, 255, 125, 40, 1, 255, 113, 39, 8, 255, 109, 37, 5, 255, 103, 32, 4, 255, 96, 31, 3, 255, 89, 28, 2, 255, 91, 30, 4, 255, 95, 33, 3, 255, 93, 33, 1, 255, 89, 34, 1, 255, 93, 32, 2, 255, 93, 25, 2, 255, 92, 28, 1, 255, 100, 32, 3, 255, 92, 31, 2, 255, 84, 29, 4, 255, 77, 24, 3, 255, 74, 20, 5, 255, 73, 26, 5, 255, 80, 26, 1, 255, 83, 22, 2, 255, 83, 28, 8, 255, 82, 26, 3, 255, 92, 31, 5, 255, 95, 32, 3, 255, 89, 30, 0, 255, 88, 33, 3, 255, 98, 35, 3, 255, 103, 39, 4, 255, 97, 41, 3, 255, 100, 38, 2, 255, 103, 44, 3, 255, 109, 44, 2, 255, 111, 46, 0, 255, 121, 50, 1, 255, 131, 50, 5, 255, 113, 34, 3, 255, 90, 26, 2, 255, 76, 24, 6, 255, 75, 21, 1, 255, 75, 21, 3, 255, 69, 20, 6, 255, 64, 18, 1, 255, 58, 16, 5, 255, 62, 20, 2, 255, 74, 25, 5, 255, 73, 20, 4, 255, 69, 20, 2, 255, 75, 24, 2, 255, 84, 28, 5, 255, 88, 27, 3, 255, 87, 26, 1, 255, 87, 28, 4, 255, 80, 24, 0, 255, 91, 25, 0, 255, 95, 26, 1, 255, 91, 27, 0, 255, 89, 27, 3, 255, 87, 24, 8, 255, 90, 23, 6, 255, 98, 29, 1, 255, 102, 28, 2, 255, 100, 25, 1, 255, 107, 29, 2, 255, 11, 6, 0, 255, 7, 4, 2, 255, 3, 3, 1, 255, 4, 0, 0, 255, 6, 2, 0, 255, 8, 4, 0, 255, 10, 5, 1, 255, 11, 6, 2, 255, 10, 6, 1, 255, 9, 7, 1, 255, 12, 8, 3, 255, 14, 8, 2, 255, 16, 8, 2, 255, 19, 8, 2, 255, 19, 11, 1, 255, 16, 9, 0, 255, 13, 9, 3, 255, 14, 12, 6, 255, 14, 12, 6, 255, 22, 19, 13, 255, 24, 21, 9, 255, 26, 19, 2, 255, 30, 28, 9, 255, 22, 21, 7, 255, 29, 22, 10, 255, 34, 27, 14, 255, 38, 31, 13, 255, 38, 28, 10, 255, 35, 35, 3, 255, 42, 40, 11, 255, 42, 38, 7, 255, 46, 43, 17, 255, 47, 43, 21, 255, 45, 42, 17, 255, 50, 47, 15, 255, 51, 46, 16, 255, 54, 47, 9, 255, 55, 51, 6, 255, 61, 54, 14, 255, 82, 69, 4, 255, 65, 56, 4, 255, 58, 55, 1, 255, 60, 56, 32, 255, 75, 75, 71, 255, 84, 84, 74, 255, 109, 96, 63, 255, 129, 99, 67, 255, 155, 108, 69, 255, 169, 105, 54, 255, 172, 105, 41, 255, 175, 104, 32, 255, 171, 96, 19, 255, 156, 88, 11, 255, 138, 83, 13, 255, 116, 71, 10, 255, 109, 69, 2, 255, 106, 68, 6, 255, 84, 51, 7, 255, 68, 38, 2, 255, 66, 35, 2, 255, 63, 36, 2, 255, 59, 31, 0, 255, 60, 28, 1, 255, 69, 27, 6, 255, 55, 25, 1, 255, 54, 27, 3, 255, 55, 29, 6, 255, 54, 29, 4, 255, 58, 32, 5, 255, 60, 28, 0, 255, 60, 28, 0, 255, 57, 33, 2, 255, 59, 33, 4, 255, 65, 34, 5, 255, 58, 33, 1, 255, 55, 33, 2, 255, 62, 34, 6, 255, 66, 38, 4, 255, 64, 35, 4, 255, 67, 33, 5, 255, 68, 32, 4, 255, 71, 33, 5, 255, 71, 35, 6, 255, 63, 33, 2, 255, 66, 34, 4, 255, 72, 38, 7, 255, 72, 39, 3, 255, 73, 39, 1, 255, 74, 38, 2, 255, 75, 34, 3, 255, 78, 35, 1, 255, 82, 38, 2, 255, 84, 41, 4, 255, 82, 41, 5, 255, 80, 40, 2, 255, 79, 43, 1, 255, 88, 39, 2, 255, 77, 39, 2, 255, 75, 41, 2, 255, 81, 44, 4, 255, 97, 47, 5, 255, 122, 66, 5, 255, 149, 75, 10, 255, 159, 74, 8, 255, 161, 81, 6, 255, 175, 88, 6, 255, 178, 92, 4, 255, 184, 90, 0, 255, 183, 90, 2, 255, 176, 86, 5, 255, 178, 87, 4, 255, 178, 83, 5, 255, 176, 81, 1, 255, 183, 89, 6, 255, 181, 90, 3, 255, 188, 98, 2, 255, 197, 101, 2, 255, 198, 102, 4, 255, 196, 106, 2, 255, 199, 104, 4, 255, 192, 100, 3, 255, 193, 106, 0, 255, 200, 105, 5, 255, 194, 92, 8, 255, 165, 64, 10, 255, 158, 68, 11, 255, 184, 99, 1, 255, 195, 101, 1, 255, 182, 87, 7, 255, 166, 76, 2, 255, 179, 91, 9, 255, 186, 94, 6, 255, 189, 95, 1, 255, 187, 92, 8, 255, 177, 85, 4, 255, 187, 97, 11, 255, 187, 101, 6, 255, 191, 102, 1, 255, 194, 99, 4, 255, 186, 94, 4, 255, 184, 95, 10, 255, 188, 103, 4, 255, 184, 95, 12, 255, 185, 97, 2, 255, 191, 104, 0, 255, 190, 101, 6, 255, 189, 101, 5, 255, 187, 98, 0, 255, 186, 96, 2, 255, 186, 97, 6, 255, 196, 107, 11, 255, 195, 109, 2, 255, 194, 106, 1, 255, 194, 103, 15, 255, 186, 96, 14, 255, 189, 101, 8, 255, 195, 107, 12, 255, 193, 105, 4, 255, 197, 109, 5, 255, 200, 110, 9, 255, 200, 112, 10, 255, 198, 116, 3, 255, 200, 114, 7, 255, 202, 114, 7, 255, 199, 114, 9, 255, 198, 111, 5, 255, 202, 114, 3, 255, 206, 118, 11, 255, 204, 116, 4, 255, 203, 117, 5, 255, 205, 119, 12, 255, 204, 118, 4, 255, 201, 116, 6, 255, 205, 120, 11, 255, 206, 125, 7, 255, 204, 124, 18, 255, 191, 113, 15, 255, 191, 115, 3, 255, 201, 126, 13, 255, 202, 128, 10, 255, 195, 120, 6, 255, 202, 128, 13, 255, 200, 129, 5, 255, 202, 130, 8, 255, 202, 130, 12, 255, 205, 135, 17, 255, 204, 135, 18, 255, 204, 136, 13, 255, 207, 139, 14, 255, 207, 142, 9, 255, 207, 141, 16, 255, 205, 140, 7, 255, 205, 146, 4, 255, 204, 143, 1, 255, 206, 143, 14, 255, 202, 138, 12, 255, 206, 145, 9, 255, 210, 153, 8, 255, 206, 146, 3, 255, 209, 152, 7, 255, 209, 155, 10, 255, 211, 156, 11, 255, 213, 158, 6, 255, 211, 159, 3, 255, 208, 158, 13, 255, 211, 160, 8, 255, 214, 163, 3, 255, 212, 158, 14, 255, 209, 159, 4, 255, 212, 167, 5, 255, 203, 150, 11, 255, 204, 159, 2, 255, 212, 166, 15, 255, 211, 166, 7, 255, 212, 167, 9, 255, 212, 167, 8, 255, 212, 167, 4, 255, 212, 167, 7, 255, 211, 166, 4, 255, 210, 166, 6, 255, 210, 166, 9, 255, 207, 166, 7, 255, 201, 162, 12, 255, 200, 163, 13, 255, 194, 152, 13, 255, 204, 162, 8, 255, 212, 165, 6, 255, 206, 153, 6, 255, 190, 137, 5, 255, 206, 162, 14, 255, 202, 159, 6, 255, 202, 158, 2, 255, 197, 155, 4, 255, 194, 153, 9, 255, 194, 151, 7, 255, 194, 146, 8, 255, 186, 135, 8, 255, 187, 137, 6, 255, 195, 150, 1, 255, 194, 148, 3, 255, 197, 151, 0, 255, 198, 153, 1, 255, 197, 149, 3, 255, 196, 150, 7, 255, 202, 159, 3, 255, 198, 156, 5, 255, 193, 151, 4, 255, 195, 153, 7, 255, 202, 159, 3, 255, 208, 165, 0, 255, 205, 162, 3, 255, 200, 159, 3, 255, 203, 160, 7, 255, 198, 152, 6, 255, 204, 160, 8, 255, 208, 168, 3, 255, 208, 169, 8, 255, 177, 130, 5, 255, 172, 122, 8, 255, 185, 138, 7, 255, 184, 136, 7, 255, 192, 147, 3, 255, 190, 143, 4, 255, 193, 145, 6, 255, 196, 148, 3, 255, 199, 153, 0, 255, 200, 154, 0, 255, 199, 151, 3, 255, 201, 151, 6, 255, 200, 153, 7, 255, 207, 156, 10, 255, 206, 154, 6, 255, 199, 148, 3, 255, 197, 143, 6, 255, 197, 140, 7, 255, 190, 130, 2, 255, 187, 123, 8, 255, 188, 121, 8, 255, 187, 113, 10, 255, 171, 93, 9, 255, 162, 87, 7, 255, 162, 93, 6, 255, 155, 85, 0, 255, 165, 92, 3, 255, 169, 89, 7, 255, 172, 90, 2, 255, 172, 91, 5, 255, 169, 89, 7, 255, 167, 90, 7, 255, 166, 89, 6, 255, 166, 89, 6, 255, 164, 89, 4, 255, 163, 90, 4, 255, 159, 84, 0, 255, 158, 83, 3, 255, 159, 82, 6, 255, 158, 80, 4, 255, 158, 79, 5, 255, 152, 73, 3, 255, 143, 64, 3, 255, 135, 59, 3, 255, 135, 59, 2, 255, 135, 57, 0, 255, 130, 58, 4, 255, 118, 48, 2, 255, 101, 38, 0, 255, 110, 47, 6, 255, 110, 47, 6, 255, 92, 40, 1, 255, 106, 44, 5, 255, 111, 41, 2, 255, 105, 40, 4, 255, 109, 42, 6, 255, 110, 37, 2, 255, 109, 36, 4, 255, 104, 38, 2, 255, 100, 36, 1, 255, 106, 41, 4, 255, 101, 38, 3, 255, 99, 37, 1, 255, 95, 29, 3, 255, 94, 32, 3, 255, 93, 33, 1, 255, 94, 36, 2, 255, 95, 32, 0, 255, 94, 30, 0, 255, 91, 28, 0, 255, 92, 36, 4, 255, 87, 30, 0, 255, 90, 29, 4, 255, 80, 27, 5, 255, 75, 24, 1, 255, 97, 32, 5, 255, 113, 37, 3, 255, 110, 35, 3, 255, 113, 34, 3, 255, 118, 39, 0, 255, 99, 36, 0, 255, 108, 39, 4, 255, 110, 40, 6, 255, 99, 33, 5, 255, 99, 33, 3, 255, 99, 32, 0, 255, 98, 34, 4, 255, 89, 29, 2, 255, 88, 30, 2, 255, 89, 31, 1, 255, 86, 33, 5, 255, 87, 34, 3, 255, 90, 30, 0, 255, 86, 28, 1, 255, 78, 26, 1, 255, 70, 22, 2, 255, 61, 18, 3, 255, 71, 23, 4, 255, 80, 24, 1, 255, 85, 27, 1, 255, 88, 28, 2, 255, 91, 30, 1, 255, 95, 31, 2, 255, 99, 33, 7, 255, 88, 28, 2, 255, 86, 29, 3, 255, 95, 35, 1, 255, 104, 40, 0, 255, 108, 46, 1, 255, 118, 52, 2, 255, 123, 55, 3, 255, 124, 55, 5, 255, 127, 54, 4, 255, 135, 57, 3, 255, 127, 53, 7, 255, 101, 25, 1, 255, 93, 27, 4, 255, 85, 29, 6, 255, 75, 20, 1, 255, 71, 20, 4, 255, 58, 17, 2, 255, 54, 15, 1, 255, 64, 17, 1, 255, 68, 19, 0, 255, 67, 19, 2, 255, 69, 17, 3, 255, 79, 21, 2, 255, 82, 26, 5, 255, 84, 25, 3, 255, 87, 24, 2, 255, 90, 27, 2, 255, 90, 29, 4, 255, 88, 28, 3, 255, 93, 26, 3, 255, 92, 24, 3, 255, 86, 20, 0, 255, 90, 25, 1, 255, 94, 31, 5, 255, 86, 25, 3, 255, 82, 23, 5, 255, 84, 24, 6, 255, 85, 23, 6, 255, 89, 24, 6, 255, 14, 9, 3, 255, 4, 3, 0, 255, 1, 1, 0, 255, 5, 1, 0, 255, 8, 4, 1, 255, 7, 3, 0, 255, 9, 5, 1, 255, 11, 7, 3, 255, 11, 8, 3, 255, 10, 7, 2, 255, 10, 5, 1, 255, 16, 9, 3, 255, 17, 9, 2, 255, 23, 12, 5, 255, 18, 11, 0, 255, 20, 15, 2, 255, 17, 12, 3, 255, 17, 10, 1, 255, 23, 16, 6, 255, 31, 26, 16, 255, 24, 24, 13, 255, 28, 21, 14, 255, 23, 22, 9, 255, 31, 29, 11, 255, 34, 30, 7, 255, 29, 29, 11, 255, 33, 33, 13, 255, 38, 35, 11, 255, 39, 38, 11, 255, 48, 44, 10, 255, 51, 42, 12, 255, 43, 40, 15, 255, 45, 46, 22, 255, 43, 48, 11, 255, 56, 50, 14, 255, 54, 54, 4, 255, 55, 49, 15, 255, 62, 45, 7, 255, 58, 51, 12, 255, 78, 65, 7, 255, 70, 52, 3, 255, 73, 60, 12, 255, 105, 83, 58, 255, 130, 99, 73, 255, 145, 111, 78, 255, 176, 120, 78, 255, 174, 120, 74, 255, 165, 115, 62, 255, 149, 107, 51, 255, 131, 101, 45, 255, 106, 85, 38, 255, 86, 63, 21, 255, 68, 55, 11, 255, 55, 39, 3, 255, 64, 36, 7, 255, 81, 51, 4, 255, 72, 43, 2, 255, 64, 37, 3, 255, 62, 31, 6, 255, 62, 28, 4, 255, 59, 33, 4, 255, 58, 31, 3, 255, 59, 31, 1, 255, 71, 27, 3, 255, 66, 31, 2, 255, 59, 32, 2, 255, 59, 28, 2, 255, 64, 31, 4, 255, 62, 32, 4, 255, 70, 33, 5, 255, 67, 31, 1, 255, 70, 36, 4, 255, 69, 30, 4, 255, 71, 33, 5, 255, 66, 32, 3, 255, 66, 30, 3, 255, 70, 29, 3, 255, 68, 33, 1, 255, 62, 33, 1, 255, 60, 32, 0, 255, 66, 32, 2, 255, 69, 31, 4, 255, 66, 30, 4, 255, 64, 32, 6, 255, 64, 33, 5, 255, 64, 33, 3, 255, 65, 35, 5, 255, 68, 35, 6, 255, 72, 35, 5, 255, 79, 39, 7, 255, 75, 38, 5, 255, 70, 35, 1, 255, 79, 40, 1, 255, 78, 39, 4, 255, 71, 37, 3, 255, 76, 40, 2, 255, 79, 36, 3, 255, 79, 41, 8, 255, 74, 38, 4, 255, 76, 38, 5, 255, 77, 36, 1, 255, 91, 47, 5, 255, 99, 54, 5, 255, 96, 49, 1, 255, 117, 59, 1, 255, 124, 61, 5, 255, 140, 72, 6, 255, 155, 71, 9, 255, 169, 79, 6, 255, 174, 87, 3, 255, 177, 83, 7, 255, 177, 84, 9, 255, 163, 76, 1, 255, 169, 81, 7, 255, 184, 92, 6, 255, 186, 98, 1, 255, 192, 101, 3, 255, 194, 99, 4, 255, 193, 97, 5, 255, 175, 81, 1, 255, 176, 85, 3, 255, 191, 92, 7, 255, 188, 82, 3, 255, 164, 69, 6, 255, 168, 78, 5, 255, 194, 99, 7, 255, 191, 93, 6, 255, 182, 86, 3, 255, 177, 78, 3, 255, 185, 93, 2, 255, 188, 99, 0, 255, 189, 96, 4, 255, 193, 96, 1, 255, 188, 96, 1, 255, 186, 94, 3, 255, 190, 99, 5, 255, 192, 103, 2, 255, 191, 98, 1, 255, 194, 96, 5, 255, 190, 96, 1, 255, 196, 105, 5, 255, 192, 99, 6, 255, 190, 101, 7, 255, 193, 105, 3, 255, 192, 105, 2, 255, 191, 99, 10, 255, 191, 99, 11, 255, 194, 102, 3, 255, 193, 103, 6, 255, 194, 105, 4, 255, 193, 106, 1, 255, 194, 106, 7, 255, 195, 106, 10, 255, 197, 108, 10, 255, 188, 99, 7, 255, 187, 98, 6, 255, 196, 109, 6, 255, 198, 111, 3, 255, 200, 112, 9, 255, 198, 108, 11, 255, 200, 111, 8, 255, 200, 114, 5, 255, 194, 106, 9, 255, 190, 102, 1, 255, 195, 109, 10, 255, 200, 113, 14, 255, 200, 112, 5, 255, 200, 110, 13, 255, 200, 112, 10, 255, 202, 116, 10, 255, 204, 119, 14, 255, 204, 121, 11, 255, 194, 113, 9, 255, 192, 112, 9, 255, 193, 113, 4, 255, 191, 111, 9, 255, 189, 110, 12, 255, 198, 124, 8, 255, 199, 125, 23, 255, 201, 125, 16, 255, 192, 117, 5, 255, 201, 129, 15, 255, 198, 128, 5, 255, 200, 132, 8, 255, 202, 133, 8, 255, 198, 131, 0, 255, 199, 134, 9, 255, 202, 135, 13, 255, 203, 135, 11, 255, 202, 134, 10, 255, 197, 128, 7, 255, 202, 133, 10, 255, 206, 145, 6, 255, 206, 147, 9, 255, 202, 133, 11, 255, 196, 129, 13, 255, 202, 140, 4, 255, 203, 142, 6, 255, 194, 137, 11, 255, 199, 149, 1, 255, 206, 152, 5, 255, 205, 153, 6, 255, 204, 152, 10, 255, 203, 154, 8, 255, 205, 156, 10, 255, 207, 156, 5, 255, 209, 156, 5, 255, 199, 142, 9, 255, 198, 143, 10, 255, 205, 155, 9, 255, 210, 160, 5, 255, 206, 159, 2, 255, 205, 161, 1, 255, 202, 157, 5, 255, 204, 162, 4, 255, 206, 163, 4, 255, 209, 161, 8, 255, 210, 163, 8, 255, 204, 160, 4, 255, 207, 161, 12, 255, 204, 159, 9, 255, 204, 159, 1, 255, 207, 159, 8, 255, 200, 149, 5, 255, 183, 137, 11, 255, 201, 159, 8, 255, 205, 162, 5, 255, 191, 140, 9, 255, 182, 127, 16, 255, 190, 141, 12, 255, 191, 142, 9, 255, 195, 147, 12, 255, 190, 142, 12, 255, 185, 137, 18, 255, 183, 134, 14, 255, 182, 132, 2, 255, 182, 130, 6, 255, 181, 130, 4, 255, 187, 139, 3, 255, 190, 142, 11, 255, 193, 145, 6, 255, 194, 145, 7, 255, 197, 149, 4, 255, 199, 151, 2, 255, 203, 154, 5, 255, 195, 146, 6, 255, 188, 139, 10, 255, 199, 154, 1, 255, 202, 157, 3, 255, 204, 158, 2, 255, 205, 162, 3, 255, 201, 161, 2, 255, 202, 160, 7, 255, 196, 150, 4, 255, 203, 159, 7, 255, 210, 171, 5, 255, 209, 170, 0, 255, 202, 160, 5, 255, 172, 121, 13, 255, 180, 131, 7, 255, 186, 139, 5, 255, 190, 145, 5, 255, 189, 141, 7, 255, 190, 142, 6, 255, 197, 148, 6, 255, 199, 154, 1, 255, 198, 152, 4, 255, 200, 151, 5, 255, 203, 152, 9, 255, 201, 152, 13, 255, 204, 152, 8, 255, 200, 149, 6, 255, 202, 151, 7, 255, 204, 152, 7, 255, 200, 145, 8, 255, 192, 131, 2, 255, 189, 127, 9, 255, 191, 119, 7, 255, 189, 108, 7, 255, 170, 94, 8, 255, 158, 89, 7, 255, 157, 90, 8, 255, 148, 81, 3, 255, 151, 79, 4, 255, 158, 83, 5, 255, 161, 84, 3, 255, 166, 86, 6, 255, 168, 90, 4, 255, 168, 93, 8, 255, 167, 92, 3, 255, 164, 90, 1, 255, 163, 88, 3, 255, 164, 90, 6, 255, 163, 89, 3, 255, 166, 90, 1, 255, 161, 85, 1, 255, 156, 78, 3, 255, 156, 78, 6, 255, 153, 75, 2, 255, 150, 72, 1, 255, 146, 70, 1, 255, 144, 68, 3, 255, 140, 63, 3, 255, 133, 58, 5, 255, 131, 52, 5, 255, 118, 50, 2, 255, 116, 52, 2, 255, 112, 43, 7, 255, 96, 39, 3, 255, 104, 39, 4, 255, 109, 38, 2, 255, 105, 41, 3, 255, 107, 41, 2, 255, 108, 40, 2, 255, 109, 42, 6, 255, 100, 39, 2, 255, 102, 39, 2, 255, 109, 40, 5, 255, 104, 36, 5, 255, 97, 33, 2, 255, 101, 35, 1, 255, 97, 33, 4, 255, 88, 30, 4, 255, 86, 33, 8, 255, 81, 28, 4, 255, 81, 29, 3, 255, 79, 28, 2, 255, 72, 29, 1, 255, 78, 32, 3, 255, 87, 29, 5, 255, 78, 23, 3, 255, 76, 27, 6, 255, 83, 28, 4, 255, 110, 37, 5, 255, 108, 32, 2, 255, 108, 33, 5, 255, 116, 39, 3, 255, 118, 44, 2, 255, 114, 32, 2, 255, 111, 38, 6, 255, 107, 38, 3, 255, 108, 39, 4, 255, 106, 36, 0, 255, 110, 42, 7, 255, 95, 30, 1, 255, 91, 25, 0, 255, 90, 33, 2, 255, 85, 34, 3, 255, 88, 30, 1, 255, 87, 29, 1, 255, 77, 23, 0, 255, 72, 24, 3, 255, 68, 21, 5, 255, 58, 22, 3, 255, 69, 21, 1, 255, 77, 23, 2, 255, 84, 27, 4, 255, 96, 31, 0, 255, 102, 39, 0, 255, 105, 40, 4, 255, 102, 36, 5, 255, 91, 27, 2, 255, 89, 27, 3, 255, 98, 34, 2, 255, 112, 42, 3, 255, 127, 52, 3, 255, 122, 54, 1, 255, 126, 53, 0, 255, 133, 57, 3, 255, 141, 56, 10, 255, 130, 49, 4, 255, 105, 36, 0, 255, 95, 26, 4, 255, 87, 25, 5, 255, 77, 21, 0, 255, 69, 17, 2, 255, 62, 18, 4, 255, 54, 17, 2, 255, 55, 16, 3, 255, 66, 16, 1, 255, 74, 20, 0, 255, 79, 25, 3, 255, 79, 24, 5, 255, 85, 26, 7, 255, 83, 27, 4, 255, 85, 26, 5, 255, 85, 24, 3, 255, 82, 24, 1, 255, 82, 24, 1, 255, 86, 26, 1, 255, 89, 28, 5, 255, 85, 24, 3, 255, 88, 20, 2, 255, 96, 28, 4, 255, 105, 39, 2, 255, 103, 38, 2, 255, 90, 27, 3, 255, 91, 26, 3, 255, 88, 22, 2, 255, 92, 26, 4, 255, 14, 9, 3, 255, 6, 2, 0, 255, 5, 1, 1, 255, 9, 5, 1, 255, 11, 5, 2, 255, 8, 3, 0, 255, 9, 5, 2, 255, 9, 6, 1, 255, 10, 7, 3, 255, 11, 7, 3, 255, 11, 6, 3, 255, 14, 9, 3, 255, 15, 9, 3, 255, 15, 10, 2, 255, 16, 11, 1, 255, 19, 15, 3, 255, 23, 18, 7, 255, 23, 14, 4, 255, 28, 18, 7, 255, 29, 23, 10, 255, 30, 24, 13, 255, 29, 27, 15, 255, 31, 26, 12, 255, 36, 30, 13, 255, 35, 31, 16, 255, 30, 29, 16, 255, 32, 38, 12, 255, 44, 40, 10, 255, 45, 42, 17, 255, 40, 39, 22, 255, 50, 42, 12, 255, 51, 48, 10, 255, 49, 48, 10, 255, 58, 47, 3, 255, 57, 44, 16, 255, 53, 53, 12, 255, 52, 54, 9, 255, 52, 47, 3, 255, 65, 50, 4, 255, 102, 64, 3, 255, 118, 70, 10, 255, 156, 96, 40, 255, 166, 119, 71, 255, 173, 121, 67, 255, 164, 121, 72, 255, 141, 112, 79, 255, 115, 96, 60, 255, 97, 84, 59, 255, 79, 77, 54, 255, 72, 68, 49, 255, 53, 55, 34, 255, 56, 57, 17, 255, 56, 60, 11, 255, 57, 49, 2, 255, 75, 41, 8, 255, 71, 36, 2, 255, 63, 37, 5, 255, 62, 41, 6, 255, 57, 35, 4, 255, 62, 33, 4, 255, 58, 34, 5, 255, 45, 32, 2, 255, 51, 37, 3, 255, 53, 34, 3, 255, 59, 28, 2, 255, 58, 26, 2, 255, 59, 29, 3, 255, 58, 28, 2, 255, 65, 32, 7, 255, 65, 30, 6, 255, 64, 34, 2, 255, 72, 34, 3, 255, 67, 26, 0, 255, 62, 29, 2, 255, 62, 30, 2, 255, 67, 30, 3, 255, 64, 27, 0, 255, 64, 30, 3, 255, 64, 34, 5, 255, 60, 34, 3, 255, 62, 34, 4, 255, 61, 31, 1, 255, 67, 33, 5, 255, 62, 30, 3, 255, 65, 34, 1, 255, 66, 37, 0, 255, 66, 37, 4, 255, 66, 34, 7, 255, 68, 33, 2, 255, 73, 35, 1, 255, 73, 38, 5, 255, 72, 41, 6, 255, 78, 38, 0, 255, 78, 35, 3, 255, 77, 37, 8, 255, 78, 35, 2, 255, 69, 39, 4, 255, 75, 37, 3, 255, 74, 40, 3, 255, 75, 42, 4, 255, 79, 39, 2, 255, 80, 40, 1, 255, 73, 41, 4, 255, 72, 42, 3, 255, 84, 40, 5, 255, 77, 42, 2, 255, 81, 42, 6, 255, 93, 48, 9, 255, 107, 50, 8, 255, 129, 65, 1, 255, 139, 69, 4, 255, 151, 79, 3, 255, 153, 77, 2, 255, 159, 77, 2, 255, 178, 90, 1, 255, 188, 100, 1, 255, 191, 99, 5, 255, 186, 88, 0, 255, 179, 80, 11, 255, 173, 84, 14, 255, 179, 88, 2, 255, 182, 81, 3, 255, 175, 80, 0, 255, 159, 68, 10, 255, 177, 88, 9, 255, 189, 97, 1, 255, 169, 73, 5, 255, 159, 70, 3, 255, 168, 70, 3, 255, 186, 91, 11, 255, 190, 97, 2, 255, 190, 96, 3, 255, 190, 94, 4, 255, 187, 96, 0, 255, 191, 100, 10, 255, 191, 99, 7, 255, 192, 102, 1, 255, 192, 99, 1, 255, 192, 96, 5, 255, 193, 100, 7, 255, 193, 100, 1, 255, 196, 100, 7, 255, 195, 102, 3, 255, 196, 106, 9, 255, 187, 97, 4, 255, 185, 94, 1, 255, 190, 99, 6, 255, 194, 104, 5, 255, 197, 107, 6, 255, 192, 104, 4, 255, 190, 102, 3, 255, 190, 103, 3, 255, 188, 99, 6, 255, 192, 102, 7, 255, 198, 112, 2, 255, 198, 113, 4, 255, 199, 113, 7, 255, 199, 113, 7, 255, 197, 111, 3, 255, 201, 114, 7, 255, 203, 115, 4, 255, 204, 117, 1, 255, 194, 108, 1, 255, 186, 99, 4, 255, 194, 106, 16, 255, 197, 112, 12, 255, 197, 113, 4, 255, 192, 105, 5, 255, 193, 106, 8, 255, 198, 113, 12, 255, 197, 114, 12, 255, 196, 116, 14, 255, 187, 106, 15, 255, 185, 106, 10, 255, 191, 114, 3, 255, 192, 114, 4, 255, 194, 116, 11, 255, 198, 122, 19, 255, 196, 122, 18, 255, 194, 121, 10, 255, 189, 116, 7, 255, 198, 127, 14, 255, 197, 129, 13, 255, 194, 125, 14, 255, 198, 128, 16, 255, 196, 128, 4, 255, 196, 129, 0, 255, 199, 131, 3, 255, 194, 124, 6, 255, 192, 122, 13, 255, 187, 121, 5, 255, 190, 121, 13, 255, 193, 129, 16, 255, 194, 133, 17, 255, 197, 128, 4, 255, 189, 123, 14, 255, 194, 130, 15, 255, 189, 126, 7, 255, 182, 129, 21, 255, 193, 144, 11, 255, 200, 145, 8, 255, 200, 147, 0, 255, 196, 147, 11, 255, 198, 147, 16, 255, 200, 149, 4, 255, 202, 153, 8, 255, 191, 137, 11, 255, 186, 130, 8, 255, 195, 144, 11, 255, 193, 145, 5, 255, 197, 147, 4, 255, 197, 148, 12, 255, 200, 154, 11, 255, 198, 154, 4, 255, 198, 156, 3, 255, 196, 150, 7, 255, 196, 146, 15, 255, 203, 153, 11, 255, 203, 153, 8, 255, 197, 149, 10, 255, 194, 150, 5, 255, 196, 153, 3, 255, 199, 153, 6, 255, 194, 145, 8, 255, 192, 145, 2, 255, 189, 144, 4, 255, 180, 139, 6, 255, 176, 134, 9, 255, 179, 132, 17, 255, 165, 115, 3, 255, 174, 124, 10, 255, 176, 126, 15, 255, 177, 124, 4, 255, 183, 128, 9, 255, 186, 134, 9, 255, 183, 134, 2, 255, 182, 134, 9, 255, 180, 132, 7, 255, 184, 136, 6, 255, 187, 140, 8, 255, 191, 145, 3, 255, 190, 141, 5, 255, 194, 146, 3, 255, 199, 151, 4, 255, 195, 149, 4, 255, 193, 147, 6, 255, 195, 150, 3, 255, 201, 159, 5, 255, 200, 159, 3, 255, 196, 153, 5, 255, 199, 155, 3, 255, 199, 158, 2, 255, 202, 161, 4, 255, 204, 160, 5, 255, 202, 159, 1, 255, 209, 169, 7, 255, 207, 164, 1, 255, 209, 167, 1, 255, 197, 151, 3, 255, 186, 135, 10, 255, 179, 127, 11, 255, 187, 138, 8, 255, 188, 139, 6, 255, 189, 137, 4, 255, 195, 142, 9, 255, 198, 149, 6, 255, 198, 150, 12, 255, 200, 154, 9, 255, 200, 152, 2, 255, 204, 154, 6, 255, 205, 152, 2, 255, 202, 148, 2, 255, 202, 148, 3, 255, 205, 149, 5, 255, 198, 137, 5, 255, 199, 131, 11, 255, 193, 129, 9, 255, 185, 114, 13, 255, 170, 92, 9, 255, 156, 86, 6, 255, 155, 86, 4, 255, 163, 92, 6, 255, 159, 93, 5, 255, 160, 91, 7, 255, 167, 98, 2, 255, 173, 103, 5, 255, 171, 100, 5, 255, 169, 99, 2, 255, 173, 97, 12, 255, 169, 95, 4, 255, 165, 92, 0, 255, 163, 89, 3, 255, 164, 90, 7, 255, 164, 89, 2, 255, 164, 87, 0, 255, 160, 83, 0, 255, 157, 81, 1, 255, 158, 82, 2, 255, 157, 80, 2, 255, 155, 77, 2, 255, 152, 72, 2, 255, 148, 69, 3, 255, 142, 68, 2, 255, 144, 66, 4, 255, 140, 58, 5, 255, 127, 48, 2, 255, 113, 48, 4, 255, 114, 44, 5, 255, 104, 37, 1, 255, 107, 42, 5, 255, 110, 39, 2, 255, 108, 43, 2, 255, 100, 40, 0, 255, 101, 37, 1, 255, 105, 39, 5, 255, 102, 38, 3, 255, 96, 36, 2, 255, 89, 32, 2, 255, 85, 31, 2, 255, 82, 27, 3, 255, 79, 22, 6, 255, 78, 26, 7, 255, 72, 26, 4, 255, 72, 28, 4, 255, 72, 26, 3, 255, 75, 29, 7, 255, 76, 27, 4, 255, 75, 26, 1, 255, 81, 35, 3, 255, 82, 34, 2, 255, 84, 27, 0, 255, 85, 29, 3, 255, 79, 27, 2, 255, 96, 27, 7, 255, 105, 35, 4, 255, 109, 40, 7, 255, 114, 38, 4, 255, 117, 42, 3, 255, 108, 33, 4, 255, 109, 33, 2, 255, 109, 38, 1, 255, 103, 36, 3, 255, 99, 31, 1, 255, 109, 38, 2, 255, 112, 38, 2, 255, 108, 36, 6, 255, 94, 34, 3, 255, 90, 31, 1, 255, 92, 27, 5, 255, 77, 27, 2, 255, 68, 22, 1, 255, 67, 20, 3, 255, 65, 21, 2, 255, 71, 25, 5, 255, 72, 26, 1, 255, 85, 31, 6, 255, 94, 31, 7, 255, 102, 38, 5, 255, 101, 34, 2, 255, 101, 34, 3, 255, 106, 38, 4, 255, 107, 40, 4, 255, 113, 47, 5, 255, 123, 54, 7, 255, 130, 56, 4, 255, 131, 53, 2, 255, 124, 53, 2, 255, 136, 60, 6, 255, 133, 59, 2, 255, 132, 52, 6, 255, 113, 37, 4, 255, 94, 29, 1, 255, 86, 28, 3, 255, 72, 19, 2, 255, 65, 16, 3, 255, 65, 20, 4, 255, 59, 17, 0, 255, 60, 18, 3, 255, 65, 18, 5, 255, 75, 21, 5, 255, 82, 24, 4, 255, 82, 25, 1, 255, 80, 27, 2, 255, 79, 26, 6, 255, 85, 25, 3, 255, 87, 24, 3, 255, 86, 22, 2, 255, 86, 23, 3, 255, 86, 23, 1, 255, 89, 23, 0, 255, 90, 28, 2, 255, 88, 29, 1, 255, 87, 25, 2, 255, 89, 25, 3, 255, 99, 31, 0, 255, 109, 37, 0, 255, 108, 35, 4, 255, 99, 33, 3, 255, 86, 24, 0, 255, 84, 24, 1, 255, 12, 7, 3, 255, 7, 2, 0, 255, 6, 2, 2, 255, 9, 4, 1, 255, 10, 3, 0, 255, 10, 5, 1, 255, 13, 9, 5, 255, 9, 6, 1, 255, 9, 6, 1, 255, 12, 8, 4, 255, 14, 9, 4, 255, 12, 7, 1, 255, 14, 8, 3, 255, 19, 10, 6, 255, 18, 12, 4, 255, 18, 13, 2, 255, 19, 17, 5, 255, 18, 17, 4, 255, 16, 17, 2, 255, 19, 20, 3, 255, 37, 26, 14, 255, 34, 25, 16, 255, 34, 28, 16, 255, 31, 32, 14, 255, 34, 33, 14, 255, 47, 38, 14, 255, 38, 43, 6, 255, 41, 40, 21, 255, 40, 39, 20, 255, 41, 42, 14, 255, 56, 48, 11, 255, 48, 51, 12, 255, 47, 52, 8, 255, 51, 52, 9, 255, 45, 47, 9, 255, 53, 44, 11, 255, 67, 46, 6, 255, 107, 65, 7, 255, 145, 76, 14, 255, 159, 95, 11, 255, 167, 107, 18, 255, 162, 123, 57, 255, 137, 115, 63, 255, 107, 95, 68, 255, 86, 84, 61, 255, 74, 82, 72, 255, 67, 73, 65, 255, 61, 67, 59, 255, 69, 65, 57, 255, 65, 64, 45, 255, 62, 65, 42, 255, 66, 61, 26, 255, 66, 60, 21, 255, 68, 58, 3, 255, 65, 39, 2, 255, 63, 35, 7, 255, 55, 35, 4, 255, 56, 39, 9, 255, 49, 36, 1, 255, 59, 37, 5, 255, 62, 34, 5, 255, 52, 28, 4, 255, 55, 26, 5, 255, 51, 24, 3, 255, 51, 30, 3, 255, 56, 30, 4, 255, 58, 34, 3, 255, 58, 31, 0, 255, 65, 28, 0, 255, 68, 34, 0, 255, 67, 31, 2, 255, 66, 32, 3, 255, 62, 33, 1, 255, 64, 31, 3, 255, 60, 29, 2, 255, 58, 32, 2, 255, 59, 33, 3, 255, 61, 30, 5, 255, 60, 30, 4, 255, 59, 31, 3, 255, 60, 35, 5, 255, 60, 32, 2, 255, 62, 32, 3, 255, 62, 33, 2, 255, 61, 32, 2, 255, 61, 30, 1, 255, 62, 33, 2, 255, 66, 36, 2, 255, 71, 37, 5, 255, 72, 37, 5, 255, 67, 35, 2, 255, 66, 38, 1, 255, 73, 41, 1, 255, 75, 39, 4, 255, 71, 38, 3, 255, 70, 38, 0, 255, 75, 41, 2, 255, 77, 36, 0, 255, 75, 38, 2, 255, 71, 42, 4, 255, 77, 40, 2, 255, 76, 43, 6, 255, 71, 41, 7, 255, 77, 45, 1, 255, 79, 45, 0, 255, 75, 42, 0, 255, 68, 39, 5, 255, 74, 44, 2, 255, 77, 44, 0, 255, 79, 38, 2, 255, 79, 44, 6, 255, 90, 48, 1, 255, 111, 52, 6, 255, 120, 52, 6, 255, 119, 52, 10, 255, 139, 66, 5, 255, 165, 77, 8, 255, 177, 86, 6, 255, 165, 80, 1, 255, 178, 91, 8, 255, 184, 92, 0, 255, 181, 91, 5, 255, 182, 96, 5, 255, 183, 92, 6, 255, 183, 91, 4, 255, 179, 90, 1, 255, 170, 80, 4, 255, 173, 85, 6, 255, 158, 68, 4, 255, 170, 78, 8, 255, 187, 96, 3, 255, 188, 93, 0, 255, 190, 95, 6, 255, 192, 96, 7, 255, 191, 99, 6, 255, 189, 100, 2, 255, 191, 100, 6, 255, 188, 97, 5, 255, 189, 98, 7, 255, 185, 94, 6, 255, 191, 100, 6, 255, 193, 100, 8, 255, 194, 102, 3, 255, 194, 101, 1, 255, 189, 95, 6, 255, 187, 95, 7, 255, 194, 105, 7, 255, 197, 109, 2, 255, 194, 106, 0, 255, 193, 106, 2, 255, 194, 107, 5, 255, 193, 108, 7, 255, 193, 107, 10, 255, 191, 106, 6, 255, 195, 110, 3, 255, 196, 113, 10, 255, 195, 112, 10, 255, 195, 111, 7, 255, 200, 116, 5, 255, 202, 116, 5, 255, 203, 117, 10, 255, 205, 118, 9, 255, 200, 117, 4, 255, 195, 114, 9, 255, 195, 109, 11, 255, 192, 109, 12, 255, 195, 112, 8, 255, 196, 113, 8, 255, 195, 113, 5, 255, 194, 111, 5, 255, 189, 109, 6, 255, 187, 109, 3, 255, 187, 110, 8, 255, 190, 114, 8, 255, 196, 122, 2, 255, 194, 118, 9, 255, 193, 119, 9, 255, 192, 118, 7, 255, 194, 121, 5, 255, 189, 118, 3, 255, 182, 111, 6, 255, 190, 120, 15, 255, 190, 123, 8, 255, 188, 121, 6, 255, 192, 121, 13, 255, 189, 119, 13, 255, 189, 119, 10, 255, 194, 126, 10, 255, 184, 117, 1, 255, 175, 107, 8, 255, 187, 124, 17, 255, 180, 119, 12, 255, 181, 118, 21, 255, 181, 122, 4, 255, 182, 120, 12, 255, 178, 118, 20, 255, 178, 123, 4, 255, 178, 122, 7, 255, 183, 129, 16, 255, 188, 140, 9, 255, 186, 139, 7, 255, 193, 142, 3, 255, 197, 143, 11, 255, 194, 140, 15, 255, 189, 140, 7, 255, 193, 143, 10, 255, 183, 126, 16, 255, 173, 115, 12, 255, 191, 139, 11, 255, 194, 143, 12, 255, 183, 128, 12, 255, 181, 126, 12, 255, 189, 138, 3, 255, 194, 144, 10, 255, 194, 143, 11, 255, 187, 135, 11, 255, 186, 132, 11, 255, 187, 136, 5, 255, 187, 140, 6, 255, 185, 139, 10, 255, 178, 135, 4, 255, 184, 141, 8, 255, 190, 145, 7, 255, 187, 139, 6, 255, 178, 133, 11, 255, 181, 137, 7, 255, 178, 132, 8, 255, 176, 134, 7, 255, 174, 133, 12, 255, 164, 122, 6, 255, 166, 119, 7, 255, 168, 118, 6, 255, 175, 124, 6, 255, 177, 124, 9, 255, 182, 131, 11, 255, 180, 132, 5, 255, 178, 132, 5, 255, 181, 134, 8, 255, 178, 129, 9, 255, 180, 130, 15, 255, 185, 138, 6, 255, 185, 138, 2, 255, 189, 142, 0, 255, 191, 143, 9, 255, 194, 146, 5, 255, 194, 147, 7, 255, 196, 150, 2, 255, 200, 153, 10, 255, 192, 147, 3, 255, 194, 146, 11, 255, 200, 154, 9, 255, 198, 159, 0, 255, 199, 159, 0, 255, 201, 156, 1, 255, 203, 159, 3, 255, 203, 160, 4, 255, 203, 156, 8, 255, 205, 158, 8, 255, 193, 145, 0, 255, 191, 140, 11, 255, 169, 115, 8, 255, 184, 133, 10, 255, 192, 144, 7, 255, 185, 133, 1, 255, 189, 134, 6, 255, 197, 147, 0, 255, 198, 152, 4, 255, 199, 155, 3, 255, 201, 152, 7, 255, 203, 147, 13, 255, 195, 139, 3, 255, 199, 141, 4, 255, 202, 145, 4, 255, 199, 139, 5, 255, 191, 124, 5, 255, 190, 119, 8, 255, 183, 117, 2, 255, 164, 96, 2, 255, 156, 87, 3, 255, 163, 97, 4, 255, 162, 91, 9, 255, 170, 95, 9, 255, 172, 104, 0, 255, 181, 113, 11, 255, 173, 106, 1, 255, 172, 105, 3, 255, 170, 101, 4, 255, 170, 99, 7, 255, 169, 93, 6, 255, 166, 93, 3, 255, 165, 91, 3, 255, 164, 91, 6, 255, 166, 91, 8, 255, 164, 88, 5, 255, 162, 85, 3, 255, 158, 81, 3, 255, 155, 79, 3, 255, 152, 75, 0, 255, 155, 76, 4, 255, 154, 76, 6, 255, 152, 72, 5, 255, 146, 70, 1, 255, 146, 68, 1, 255, 147, 63, 1, 255, 134, 59, 2, 255, 127, 51, 4, 255, 113, 41, 2, 255, 110, 41, 1, 255, 105, 43, 2, 255, 99, 37, 1, 255, 112, 37, 5, 255, 107, 41, 3, 255, 103, 41, 3, 255, 103, 33, 3, 255, 97, 36, 3, 255, 101, 37, 5, 255, 91, 32, 1, 255, 79, 29, 0, 255, 83, 30, 5, 255, 86, 28, 7, 255, 84, 25, 4, 255, 84, 28, 6, 255, 82, 29, 3, 255, 79, 30, 0, 255, 81, 31, 1, 255, 84, 31, 1, 255, 84, 29, 0, 255, 89, 30, 1, 255, 82, 30, 0, 255, 74, 31, 0, 255, 82, 29, 4, 255, 84, 25, 9, 255, 76, 30, 11, 255, 76, 25, 1, 255, 94, 33, 1, 255, 106, 37, 2, 255, 103, 28, 1, 255, 102, 38, 2, 255, 104, 39, 7, 255, 115, 41, 3, 255, 109, 36, 3, 255, 101, 33, 4, 255, 100, 34, 2, 255, 102, 31, 1, 255, 110, 35, 2, 255, 110, 37, 0, 255, 98, 33, 1, 255, 87, 28, 1, 255, 74, 25, 2, 255, 56, 24, 0, 255, 57, 19, 0, 255, 72, 23, 5, 255, 76, 29, 2, 255, 82, 24, 5, 255, 81, 30, 2, 255, 96, 39, 1, 255, 105, 39, 4, 255, 98, 33, 1, 255, 101, 32, 0, 255, 109, 39, 3, 255, 117, 48, 5, 255, 121, 52, 2, 255, 126, 54, 1, 255, 133, 58, 2, 255, 134, 58, 2, 255, 131, 56, 1, 255, 137, 58, 2, 255, 138, 59, 2, 255, 121, 52, 1, 255, 117, 50, 6, 255, 102, 35, 2, 255, 89, 27, 4, 255, 76, 25, 0, 255, 66, 19, 3, 255, 63, 15, 5, 255, 60, 19, 1, 255, 61, 19, 1, 255, 56, 16, 2, 255, 63, 21, 4, 255, 79, 24, 1, 255, 82, 24, 3, 255, 79, 22, 4, 255, 81, 20, 1, 255, 89, 22, 3, 255, 85, 23, 3, 255, 85, 23, 2, 255, 89, 25, 4, 255, 89, 26, 5, 255, 85, 24, 2, 255, 87, 23, 4, 255, 93, 24, 2, 255, 93, 26, 1, 255, 84, 22, 0, 255, 79, 18, 2, 255, 85, 21, 5, 255, 90, 21, 1, 255, 101, 27, 2, 255, 105, 30, 2, 255, 92, 23, 0, 255, 84, 20, 3, 255, 9, 6, 1, 255, 5, 3, 1, 255, 5, 3, 2, 255, 8, 3, 0, 255, 8, 4, 0, 255, 10, 7, 2, 255, 11, 8, 4, 255, 12, 7, 3, 255, 9, 5, 1, 255, 13, 8, 4, 255, 14, 9, 3, 255, 14, 10, 2, 255, 15, 11, 3, 255, 17, 11, 4, 255, 19, 13, 4, 255, 21, 14, 3, 255, 21, 15, 4, 255, 19, 17, 4, 255, 21, 23, 4, 255, 21, 20, 1, 255, 31, 25, 8, 255, 42, 32, 18, 255, 34, 32, 17, 255, 35, 37, 20, 255, 41, 39, 12, 255, 49, 44, 10, 255, 42, 45, 7, 255, 48, 44, 12, 255, 43, 44, 13, 255, 39, 50, 17, 255, 53, 47, 18, 255, 50, 54, 7, 255, 44, 48, 6, 255, 52, 49, 13, 255, 78, 54, 8, 255, 126, 71, 19, 255, 165, 91, 16, 255, 167, 100, 7, 255, 143, 89, 9, 255, 101, 87, 3, 255, 94, 76, 23, 255, 81, 74, 51, 255, 63, 65, 50, 255, 59, 70, 61, 255, 72, 70, 66, 255, 75, 79, 65, 255, 70, 78, 59, 255, 62, 68, 54, 255, 69, 67, 56, 255, 63, 62, 50, 255, 60, 67, 41, 255, 62, 64, 31, 255, 63, 55, 23, 255, 68, 56, 19, 255, 62, 46, 3, 255, 57, 33, 2, 255, 59, 35, 3, 255, 56, 33, 3, 255, 59, 38, 7, 255, 57, 40, 6, 255, 57, 36, 6, 255, 55, 24, 5, 255, 54, 24, 5, 255, 57, 29, 6, 255, 57, 27, 1, 255, 61, 34, 4, 255, 62, 32, 1, 255, 68, 33, 2, 255, 67, 30, 1, 255, 67, 33, 1, 255, 68, 33, 4, 255, 63, 30, 1, 255, 67, 34, 0, 255, 68, 31, 1, 255, 71, 33, 7, 255, 68, 33, 5, 255, 65, 34, 2, 255, 64, 34, 2, 255, 56, 30, 1, 255, 60, 30, 2, 255, 63, 29, 3, 255, 63, 31, 3, 255, 56, 31, 1, 255, 58, 33, 5, 255, 61, 31, 4, 255, 64, 32, 4, 255, 63, 32, 5, 255, 66, 35, 5, 255, 69, 37, 5, 255, 67, 33, 3, 255, 72, 36, 2, 255, 75, 45, 4, 255, 70, 41, 2, 255, 74, 37, 1, 255, 77, 39, 3, 255, 71, 41, 6, 255, 76, 36, 2, 255, 86, 42, 2, 255, 86, 39, 2, 255, 82, 39, 3, 255, 77, 41, 1, 255, 79, 43, 5, 255, 76, 43, 6, 255, 74, 40, 4, 255, 78, 44, 2, 255, 82, 41, 3, 255, 83, 42, 3, 255, 76, 38, 0, 255, 82, 47, 3, 255, 81, 44, 8, 255, 81, 41, 6, 255, 79, 40, 1, 255, 78, 43, 6, 255, 78, 45, 4, 255, 76, 40, 7, 255, 76, 39, 9, 255, 82, 39, 12, 255, 107, 52, 10, 255, 139, 69, 2, 255, 158, 72, 8, 255, 168, 79, 11, 255, 175, 92, 3, 255, 177, 89, 3, 255, 177, 86, 3, 255, 176, 86, 7, 255, 178, 90, 8, 255, 180, 92, 12, 255, 176, 86, 5, 255, 166, 84, 1, 255, 172, 86, 6, 255, 183, 92, 5, 255, 182, 90, 2, 255, 187, 95, 2, 255, 184, 90, 4, 255, 183, 89, 3, 255, 184, 92, 2, 255, 172, 77, 3, 255, 180, 87, 9, 255, 188, 98, 5, 255, 189, 99, 6, 255, 192, 100, 5, 255, 191, 101, 6, 255, 193, 101, 4, 255, 197, 104, 2, 255, 196, 103, 6, 255, 186, 93, 5, 255, 189, 102, 2, 255, 195, 108, 3, 255, 194, 108, 2, 255, 194, 109, 3, 255, 190, 105, 2, 255, 191, 107, 11, 255, 191, 109, 10, 255, 194, 110, 4, 255, 194, 109, 4, 255, 192, 109, 10, 255, 191, 110, 4, 255, 195, 114, 4, 255, 199, 115, 12, 255, 198, 112, 12, 255, 197, 114, 6, 255, 197, 109, 5, 255, 188, 106, 9, 255, 189, 112, 11, 255, 187, 101, 10, 255, 180, 95, 16, 255, 189, 109, 17, 255, 190, 111, 15, 255, 192, 109, 12, 255, 195, 111, 13, 255, 191, 109, 12, 255, 190, 111, 8, 255, 187, 108, 11, 255, 177, 98, 6, 255, 181, 107, 1, 255, 185, 114, 7, 255, 183, 112, 9, 255, 183, 111, 4, 255, 186, 113, 9, 255, 185, 115, 9, 255, 172, 102, 7, 255, 178, 109, 14, 255, 182, 116, 6, 255, 183, 115, 3, 255, 183, 110, 8, 255, 172, 99, 19, 255, 170, 105, 23, 255, 179, 116, 9, 255, 177, 114, 10, 255, 170, 105, 14, 255, 177, 117, 13, 255, 176, 120, 12, 255, 179, 120, 11, 255, 180, 121, 11, 255, 174, 123, 9, 255, 176, 125, 12, 255, 174, 124, 16, 255, 174, 125, 8, 255, 181, 126, 14, 255, 183, 131, 14, 255, 181, 130, 17, 255, 181, 132, 22, 255, 179, 131, 17, 255, 177, 131, 13, 255, 177, 132, 8, 255, 176, 132, 10, 255, 184, 137, 14, 255, 173, 124, 9, 255, 169, 123, 7, 255, 176, 129, 18, 255, 178, 130, 10, 255, 174, 128, 7, 255, 171, 124, 6, 255, 178, 131, 2, 255, 182, 134, 6, 255, 179, 132, 10, 255, 174, 129, 13, 255, 175, 131, 6, 255, 179, 135, 8, 255, 181, 138, 8, 255, 176, 134, 7, 255, 174, 131, 13, 255, 172, 127, 10, 255, 167, 119, 8, 255, 165, 119, 7, 255, 168, 120, 15, 255, 161, 112, 9, 255, 161, 117, 11, 255, 163, 119, 11, 255, 171, 125, 5, 255, 173, 120, 10, 255, 167, 115, 6, 255, 163, 112, 11, 255, 160, 109, 21, 255, 166, 117, 18, 255, 173, 122, 13, 255, 175, 123, 8, 255, 176, 123, 3, 255, 181, 130, 2, 255, 181, 132, 11, 255, 180, 132, 5, 255, 181, 131, 6, 255, 184, 135, 7, 255, 186, 138, 7, 255, 186, 139, 2, 255, 181, 132, 7, 255, 190, 140, 11, 255, 198, 147, 9, 255, 184, 129, 14, 255, 183, 133, 8, 255, 199, 155, 4, 255, 197, 156, 2, 255, 196, 154, 3, 255, 201, 156, 4, 255, 202, 156, 2, 255, 191, 145, 1, 255, 196, 148, 11, 255, 198, 152, 7, 255, 197, 149, 7, 255, 196, 150, 2, 255, 183, 132, 19, 255, 181, 130, 17, 255, 192, 146, 9, 255, 186, 138, 2, 255, 189, 136, 7, 255, 198, 147, 0, 255, 203, 153, 7, 255, 204, 155, 4, 255, 203, 150, 6, 255, 195, 135, 4, 255, 196, 136, 5, 255, 200, 142, 3, 255, 199, 144, 1, 255, 192, 134, 4, 255, 186, 122, 10, 255, 180, 115, 9, 255, 182, 113, 3, 255, 185, 118, 5, 255, 176, 113, 4, 255, 174, 110, 2, 255, 179, 109, 5, 255, 177, 107, 7, 255, 176, 108, 1, 255, 178, 112, 6, 255, 173, 106, 2, 255, 172, 103, 7, 255, 173, 100, 5, 255, 168, 93, 4, 255, 171, 96, 2, 255, 170, 95, 6, 255, 165, 93, 7, 255, 164, 93, 4, 255, 163, 92, 3, 255, 162, 88, 6, 255, 159, 85, 4, 255, 159, 84, 3, 255, 157, 80, 4, 255, 156, 78, 4, 255, 158, 79, 8, 255, 151, 72, 6, 255, 150, 71, 5, 255, 151, 72, 1, 255, 146, 67, 2, 255, 140, 63, 2, 255, 139, 60, 3, 255, 133, 60, 7, 255, 117, 47, 3, 255, 109, 41, 2, 255, 107, 44, 4, 255, 101, 36, 3, 255, 106, 35, 6, 255, 110, 42, 4, 255, 110, 40, 3, 255, 100, 34, 3, 255, 97, 39, 5, 255, 89, 35, 2, 255, 87, 35, 1, 255, 92, 35, 4, 255, 97, 36, 7, 255, 95, 29, 3, 255, 86, 29, 1, 255, 81, 30, 1, 255, 76, 27, 2, 255, 76, 28, 3, 255, 81, 29, 4, 255, 79, 30, 2, 255, 82, 28, 1, 255, 90, 29, 3, 255, 97, 34, 6, 255, 97, 37, 2, 255, 106, 41, 5, 255, 107, 38, 5, 255, 100, 36, 3, 255, 95, 30, 2, 255, 88, 28, 4, 255, 99, 32, 1, 255, 110, 30, 4, 255, 105, 36, 3, 255, 109, 35, 1, 255, 114, 39, 2, 255, 109, 36, 2, 255, 103, 30, 2, 255, 105, 33, 4, 255, 106, 34, 5, 255, 99, 33, 2, 255, 95, 31, 1, 255, 101, 32, 3, 255, 83, 25, 2, 255, 61, 21, 1, 255, 62, 24, 4, 255, 69, 24, 4, 255, 81, 25, 4, 255, 81, 27, 6, 255, 84, 29, 2, 255, 98, 37, 0, 255, 107, 43, 0, 255, 108, 39, 3, 255, 105, 34, 2, 255, 119, 44, 2, 255, 128, 54, 5, 255, 124, 52, 1, 255, 127, 55, 3, 255, 131, 57, 3, 255, 135, 58, 4, 255, 134, 57, 3, 255, 141, 59, 3, 255, 141, 59, 5, 255, 134, 55, 1, 255, 131, 50, 2, 255, 113, 46, 6, 255, 89, 31, 2, 255, 77, 20, 6, 255, 70, 22, 2, 255, 69, 19, 3, 255, 75, 21, 2, 255, 69, 23, 4, 255, 58, 16, 6, 255, 64, 16, 4, 255, 78, 22, 4, 255, 77, 24, 0, 255, 78, 23, 2, 255, 79, 22, 5, 255, 81, 23, 3, 255, 81, 21, 2, 255, 79, 23, 3, 255, 82, 23, 2, 255, 86, 24, 3, 255, 85, 23, 3, 255, 82, 21, 2, 255, 82, 20, 2, 255, 85, 21, 4, 255, 82, 17, 4, 255, 79, 18, 4, 255, 77, 21, 0, 255, 78, 21, 0, 255, 89, 27, 4, 255, 100, 33, 5, 255, 104, 31, 5, 255, 86, 22, 1, 255, 77, 20, 5, 255, 5, 2, 0, 255, 5, 3, 2, 255, 7, 5, 4, 255, 9, 5, 2, 255, 7, 4, 0, 255, 8, 6, 1, 255, 8, 6, 2, 255, 10, 8, 1, 255, 10, 6, 0, 255, 14, 10, 2, 255, 16, 11, 3, 255, 17, 12, 3, 255, 17, 14, 4, 255, 13, 14, 4, 255, 18, 15, 3, 255, 21, 18, 4, 255, 23, 20, 5, 255, 25, 23, 5, 255, 28, 23, 3, 255, 28, 26, 6, 255, 28, 29, 3, 255, 41, 35, 8, 255, 42, 36, 22, 255, 35, 40, 18, 255, 39, 40, 19, 255, 41, 39, 11, 255, 44, 43, 10, 255, 48, 46, 17, 255, 54, 50, 10, 255, 47, 50, 11, 255, 50, 43, 6, 255, 66, 49, 5, 255, 111, 68, 20, 255, 157, 94, 22, 255, 177, 107, 22, 255, 154, 107, 12, 255, 129, 103, 18, 255, 101, 73, 15, 255, 60, 42, 5, 255, 35, 35, 13, 255, 48, 54, 35, 255, 79, 77, 49, 255, 71, 73, 37, 255, 68, 74, 66, 255, 73, 73, 67, 255, 72, 77, 65, 255, 66, 74, 63, 255, 64, 68, 54, 255, 66, 65, 56, 255, 65, 61, 43, 255, 65, 63, 41, 255, 67, 66, 40, 255, 65, 58, 16, 255, 64, 54, 27, 255, 59, 51, 15, 255, 55, 40, 5, 255, 51, 30, 7, 255, 54, 31, 2, 255, 66, 36, 5, 255, 55, 38, 3, 255, 57, 44, 11, 255, 56, 32, 4, 255, 54, 26, 0, 255, 55, 25, 1, 255, 63, 25, 4, 255, 64, 31, 5, 255, 61, 28, 2, 255, 66, 31, 4, 255, 62, 30, 3, 255, 58, 30, 4, 255, 62, 33, 4, 255, 67, 31, 1, 255, 72, 34, 3, 255, 66, 34, 4, 255, 66, 32, 4, 255, 66, 31, 3, 255, 63, 32, 2, 255, 63, 36, 3, 255, 56, 33, 0, 255, 59, 30, 1, 255, 67, 30, 3, 255, 69, 32, 5, 255, 61, 32, 1, 255, 61, 32, 2, 255, 64, 33, 2, 255, 70, 38, 2, 255, 70, 35, 1, 255, 72, 37, 4, 255, 72, 41, 4, 255, 72, 40, 6, 255, 77, 36, 3, 255, 85, 39, 3, 255, 80, 39, 3, 255, 84, 40, 3, 255, 88, 40, 1, 255, 84, 39, 4, 255, 84, 42, 4, 255, 83, 37, 0, 255, 82, 38, 2, 255, 81, 42, 3, 255, 80, 43, 2, 255, 82, 43, 3, 255, 81, 44, 4, 255, 81, 43, 4, 255, 83, 40, 3, 255, 84, 40, 1, 255, 87, 42, 0, 255, 83, 44, 1, 255, 81, 45, 3, 255, 80, 45, 2, 255, 83, 46, 1, 255, 87, 50, 3, 255, 79, 47, 3, 255, 80, 48, 1, 255, 89, 49, 3, 255, 90, 48, 1, 255, 84, 51, 5, 255, 80, 48, 4, 255, 97, 54, 1, 255, 100, 46, 0, 255, 104, 47, 7, 255, 124, 61, 1, 255, 144, 69, 4, 255, 159, 77, 3, 255, 173, 86, 9, 255, 177, 90, 4, 255, 176, 90, 0, 255, 175, 84, 2, 255, 178, 91, 5, 255, 182, 94, 5, 255, 180, 89, 1, 255, 177, 84, 6, 255, 180, 90, 7, 255, 176, 92, 0, 255, 174, 88, 1, 255, 176, 87, 5, 255, 173, 82, 5, 255, 179, 89, 3, 255, 186, 96, 0, 255, 187, 98, 2, 255, 190, 101, 5, 255, 191, 104, 0, 255, 194, 102, 7, 255, 196, 103, 4, 255, 195, 102, 2, 255, 194, 102, 4, 255, 190, 102, 3, 255, 193, 104, 3, 255, 192, 104, 9, 255, 192, 105, 11, 255, 189, 103, 6, 255, 190, 104, 3, 255, 190, 106, 5, 255, 190, 106, 8, 255, 189, 108, 2, 255, 192, 111, 3, 255, 191, 110, 7, 255, 189, 107, 10, 255, 190, 106, 2, 255, 190, 105, 10, 255, 192, 107, 13, 255, 188, 101, 6, 255, 186, 100, 13, 255, 183, 101, 6, 255, 186, 102, 10, 255, 182, 101, 11, 255, 182, 105, 1, 255, 187, 106, 9, 255, 185, 106, 9, 255, 184, 107, 10, 255, 182, 107, 6, 255, 184, 108, 8, 255, 173, 100, 6, 255, 163, 89, 10, 255, 173, 100, 6, 255, 178, 110, 8, 255, 172, 104, 14, 255, 163, 93, 4, 255, 168, 96, 11, 255, 181, 110, 9, 255, 172, 101, 9, 255, 175, 105, 17, 255, 179, 110, 12, 255, 179, 108, 13, 255, 175, 103, 22, 255, 154, 93, 20, 255, 154, 99, 16, 255, 167, 110, 9, 255, 172, 112, 7, 255, 171, 114, 20, 255, 164, 107, 12, 255, 163, 110, 8, 255, 167, 109, 15, 255, 170, 108, 25, 255, 175, 116, 12, 255, 169, 114, 14, 255, 169, 116, 15, 255, 166, 114, 10, 255, 172, 113, 12, 255, 169, 117, 7, 255, 162, 114, 14, 255, 168, 114, 19, 255, 166, 115, 13, 255, 162, 116, 5, 255, 169, 120, 9, 255, 175, 118, 12, 255, 169, 113, 9, 255, 167, 113, 5, 255, 165, 114, 6, 255, 163, 111, 13, 255, 162, 110, 11, 255, 160, 110, 6, 255, 161, 108, 19, 255, 152, 106, 12, 255, 142, 100, 6, 255, 152, 105, 3, 255, 158, 113, 6, 255, 157, 106, 25, 255, 155, 100, 10, 255, 147, 97, 5, 255, 166, 113, 14, 255, 154, 103, 21, 255, 143, 97, 14, 255, 154, 104, 13, 255, 145, 97, 6, 255, 138, 88, 5, 255, 129, 85, 11, 255, 135, 91, 15, 255, 145, 100, 11, 255, 143, 98, 7, 255, 134, 88, 8, 255, 141, 95, 12, 255, 133, 90, 16, 255, 125, 84, 12, 255, 132, 87, 9, 255, 140, 92, 13, 255, 145, 93, 11, 255, 136, 89, 9, 255, 144, 96, 8, 255, 165, 107, 14, 255, 172, 117, 5, 255, 175, 127, 8, 255, 178, 125, 7, 255, 182, 131, 8, 255, 179, 132, 2, 255, 179, 129, 12, 255, 181, 132, 14, 255, 186, 140, 7, 255, 191, 146, 4, 255, 193, 146, 2, 255, 191, 147, 2, 255, 193, 151, 2, 255, 193, 150, 5, 255, 194, 148, 2, 255, 189, 143, 2, 255, 192, 148, 8, 255, 197, 155, 5, 255, 203, 158, 5, 255, 199, 151, 9, 255, 190, 141, 5, 255, 198, 149, 5, 255, 180, 129, 12, 255, 175, 126, 8, 255, 187, 140, 4, 255, 187, 137, 8, 255, 195, 143, 0, 255, 200, 148, 8, 255, 202, 149, 5, 255, 195, 139, 0, 255, 190, 136, 2, 255, 204, 150, 7, 255, 206, 152, 1, 255, 202, 151, 0, 255, 201, 147, 7, 255, 196, 139, 10, 255, 190, 133, 10, 255, 189, 125, 8, 255, 187, 123, 4, 255, 185, 124, 6, 255, 185, 120, 5, 255, 183, 117, 3, 255, 182, 115, 8, 255, 179, 110, 5, 255, 174, 105, 5, 255, 177, 107, 7, 255, 172, 100, 1, 255, 173, 100, 2, 255, 172, 95, 4, 255, 168, 94, 2, 255, 169, 93, 4, 255, 165, 91, 4, 255, 165, 91, 3, 255, 165, 90, 4, 255, 161, 87, 4, 255, 161, 88, 5, 255, 162, 87, 4, 255, 160, 83, 1, 255, 156, 81, 1, 255, 154, 79, 2, 255, 155, 77, 6, 255, 154, 74, 7, 255, 151, 70, 2, 255, 147, 71, 0, 255, 145, 72, 3, 255, 142, 64, 3, 255, 124, 50, 1, 255, 113, 45, 5, 255, 109, 47, 6, 255, 104, 41, 1, 255, 105, 39, 3, 255, 97, 35, 3, 255, 101, 39, 1, 255, 105, 42, 3, 255, 95, 32, 0, 255, 100, 36, 3, 255, 95, 36, 1, 255, 93, 34, 2, 255, 97, 38, 3, 255, 103, 38, 2, 255, 98, 33, 0, 255, 93, 32, 2, 255, 93, 32, 4, 255, 92, 31, 3, 255, 97, 36, 1, 255, 104, 40, 2, 255, 109, 43, 5, 255, 111, 42, 4, 255, 115, 44, 4, 255, 120, 45, 3, 255, 120, 42, 0, 255, 126, 46, 4, 255, 128, 45, 2, 255, 128, 40, 1, 255, 124, 41, 9, 255, 100, 32, 7, 255, 90, 26, 1, 255, 111, 34, 7, 255, 107, 33, 0, 255, 110, 35, 4, 255, 113, 37, 5, 255, 111, 37, 1, 255, 104, 33, 0, 255, 104, 30, 3, 255, 106, 36, 3, 255, 98, 39, 5, 255, 88, 31, 4, 255, 87, 27, 4, 255, 77, 22, 2, 255, 68, 25, 3, 255, 76, 23, 8, 255, 83, 26, 4, 255, 76, 29, 0, 255, 80, 22, 3, 255, 91, 37, 0, 255, 112, 47, 1, 255, 111, 43, 1, 255, 109, 41, 4, 255, 124, 47, 6, 255, 135, 53, 5, 255, 131, 54, 4, 255, 129, 53, 4, 255, 130, 56, 3, 255, 132, 58, 3, 255, 136, 57, 6, 255, 134, 55, 1, 255, 137, 56, 2, 255, 126, 55, 3, 255, 125, 52, 1, 255, 130, 46, 4, 255, 101, 29, 1, 255, 68, 22, 2, 255, 67, 17, 3, 255, 68, 20, 1, 255, 71, 18, 1, 255, 79, 24, 6, 255, 59, 16, 3, 255, 51, 15, 1, 255, 73, 19, 6, 255, 82, 23, 4, 255, 75, 26, 0, 255, 76, 24, 2, 255, 81, 22, 2, 255, 84, 24, 1, 255, 79, 24, 3, 255, 80, 21, 4, 255, 88, 23, 5, 255, 89, 22, 2, 255, 84, 22, 1, 255, 85, 24, 5, 255, 88, 22, 4, 255, 85, 22, 9, 255, 67, 16, 2, 255, 77, 25, 2, 255, 101, 34, 4, 255, 106, 33, 2, 255, 106, 36, 3, 255, 100, 29, 4, 255, 80, 19, 3, 255, 68, 17, 0, 255, 78, 19, 4, 255, 4, 2, 0, 255, 4, 2, 1, 255, 6, 4, 3, 255, 8, 7, 2, 255, 7, 6, 1, 255, 8, 5, 1, 255, 10, 7, 3, 255, 11, 9, 2, 255, 12, 9, 1, 255, 14, 10, 1, 255, 16, 12, 1, 255, 16, 12, 1, 255, 16, 15, 3, 255, 11, 13, 4, 255, 15, 13, 4, 255, 18, 15, 3, 255, 20, 20, 5, 255, 24, 22, 5, 255, 32, 28, 8, 255, 29, 26, 5, 255, 36, 32, 9, 255, 42, 36, 9, 255, 44, 38, 14, 255, 41, 45, 16, 255, 34, 39, 19, 255, 47, 44, 15, 255, 50, 49, 18, 255, 37, 48, 20, 255, 37, 41, 19, 255, 60, 49, 21, 255, 126, 89, 23, 255, 160, 121, 20, 255, 161, 125, 11, 255, 122, 93, 10, 255, 79, 69, 12, 255, 49, 52, 5, 255, 37, 42, 7, 255, 50, 41, 17, 255, 49, 42, 6, 255, 47, 42, 4, 255, 60, 58, 37, 255, 75, 70, 48, 255, 73, 73, 40, 255, 65, 69, 61, 255, 71, 72, 55, 255, 70, 73, 57, 255, 66, 71, 57, 255, 62, 63, 58, 255, 66, 64, 51, 255, 70, 66, 42, 255, 71, 63, 44, 255, 72, 64, 49, 255, 68, 58, 26, 255, 59, 52, 20, 255, 59, 55, 29, 255, 53, 40, 5, 255, 57, 33, 1, 255, 55, 32, 2, 255, 49, 33, 4, 255, 54, 39, 6, 255, 68, 46, 6, 255, 73, 43, 3, 255, 70, 35, 1, 255, 69, 33, 1, 255, 63, 30, 3, 255, 72, 34, 5, 255, 73, 34, 2, 255, 70, 34, 0, 255, 68, 35, 1, 255, 66, 32, 2, 255, 70, 30, 1, 255, 67, 34, 2, 255, 62, 36, 3, 255, 64, 32, 3, 255, 67, 31, 1, 255, 66, 34, 3, 255, 63, 32, 4, 255, 56, 30, 7, 255, 55, 36, 6, 255, 63, 33, 3, 255, 68, 33, 5, 255, 63, 33, 0, 255, 72, 38, 3, 255, 75, 41, 5, 255, 72, 37, 2, 255, 77, 38, 2, 255, 79, 40, 2, 255, 77, 39, 1, 255, 76, 38, 2, 255, 77, 40, 3, 255, 74, 38, 2, 255, 77, 42, 5, 255, 85, 42, 4, 255, 86, 39, 0, 255, 86, 40, 1, 255, 90, 42, 3, 255, 85, 41, 1, 255, 84, 40, 1, 255, 86, 42, 3, 255, 83, 43, 2, 255, 84, 45, 5, 255, 83, 44, 6, 255, 85, 43, 4, 255, 88, 46, 4, 255, 86, 42, 1, 255, 85, 41, 0, 255, 86, 43, 1, 255, 87, 47, 4, 255, 85, 46, 2, 255, 88, 47, 5, 255, 87, 48, 2, 255, 84, 46, 1, 255, 89, 47, 4, 255, 90, 47, 5, 255, 87, 48, 2, 255, 90, 50, 2, 255, 92, 51, 2, 255, 91, 49, 2, 255, 89, 48, 3, 255, 88, 48, 3, 255, 83, 45, 1, 255, 86, 47, 4, 255, 97, 51, 4, 255, 120, 60, 7, 255, 138, 70, 4, 255, 163, 83, 7, 255, 178, 87, 4, 255, 179, 92, 2, 255, 180, 90, 6, 255, 173, 87, 1, 255, 173, 89, 0, 255, 177, 92, 1, 255, 180, 89, 7, 255, 172, 78, 5, 255, 170, 77, 0, 255, 181, 92, 9, 255, 185, 97, 9, 255, 186, 97, 2, 255, 184, 95, 0, 255, 183, 94, 6, 255, 176, 89, 5, 255, 189, 105, 5, 255, 189, 102, 1, 255, 189, 99, 3, 255, 192, 103, 10, 255, 187, 99, 2, 255, 189, 102, 5, 255, 193, 102, 6, 255, 186, 96, 4, 255, 186, 99, 8, 255, 190, 102, 5, 255, 187, 98, 0, 255, 190, 104, 4, 255, 189, 105, 4, 255, 184, 104, 6, 255, 185, 105, 10, 255, 184, 102, 5, 255, 179, 102, 7, 255, 182, 101, 7, 255, 175, 96, 10, 255, 183, 98, 15, 255, 182, 99, 5, 255, 181, 97, 6, 255, 180, 96, 3, 255, 178, 97, 1, 255, 178, 99, 3, 255, 180, 106, 5, 255, 183, 101, 6, 255, 181, 97, 6, 255, 178, 100, 10, 255, 176, 100, 3, 255, 177, 100, 6, 255, 177, 102, 11, 255, 177, 99, 8, 255, 176, 99, 12, 255, 170, 95, 4, 255, 164, 94, 9, 255, 159, 94, 15, 255, 157, 95, 15, 255, 162, 98, 14, 255, 160, 97, 4, 255, 159, 93, 12, 255, 165, 98, 17, 255, 161, 105, 14, 255, 159, 102, 15, 255, 156, 100, 11, 255, 159, 99, 10, 255, 162, 104, 9, 255, 167, 103, 5, 255, 160, 104, 11, 255, 153, 104, 6, 255, 150, 96, 22, 255, 146, 93, 14, 255, 156, 99, 7, 255, 143, 91, 9, 255, 153, 102, 10, 255, 149, 95, 15, 255, 140, 91, 15, 255, 134, 87, 24, 255, 152, 101, 19, 255, 146, 96, 10, 255, 138, 95, 10, 255, 129, 81, 9, 255, 138, 87, 6, 255, 140, 89, 19, 255, 141, 92, 19, 255, 130, 86, 6, 255, 134, 91, 16, 255, 130, 91, 12, 255, 115, 76, 9, 255, 122, 85, 14, 255, 124, 89, 20, 255, 132, 89, 19, 255, 118, 82, 18, 255, 102, 81, 7, 255, 116, 85, 8, 255, 126, 86, 25, 255, 116, 80, 18, 255, 110, 82, 8, 255, 104, 76, 17, 255, 128, 85, 12, 255, 130, 85, 9, 255, 124, 89, 9, 255, 132, 93, 15, 255, 124, 87, 12, 255, 120, 81, 9, 255, 120, 86, 14, 255, 122, 85, 12, 255, 140, 99, 12, 255, 125, 93, 14, 255, 113, 77, 5, 255, 132, 87, 9, 255, 125, 86, 9, 255, 120, 83, 10, 255, 117, 81, 15, 255, 112, 82, 6, 255, 114, 78, 12, 255, 110, 79, 11, 255, 128, 88, 10, 255, 139, 94, 9, 255, 152, 100, 13, 255, 165, 108, 15, 255, 164, 114, 0, 255, 170, 116, 12, 255, 172, 118, 17, 255, 178, 128, 8, 255, 175, 126, 5, 255, 181, 131, 12, 255, 184, 136, 0, 255, 187, 139, 4, 255, 192, 144, 8, 255, 191, 147, 4, 255, 188, 144, 3, 255, 182, 136, 3, 255, 179, 134, 3, 255, 192, 152, 7, 255, 200, 156, 3, 255, 199, 158, 0, 255, 198, 153, 11, 255, 182, 130, 18, 255, 172, 119, 11, 255, 183, 131, 6, 255, 177, 121, 4, 255, 184, 140, 2, 255, 187, 140, 1, 255, 193, 140, 1, 255, 193, 146, 0, 255, 201, 149, 8, 255, 191, 140, 3, 255, 192, 145, 11, 255, 202, 154, 7, 255, 203, 153, 7, 255, 204, 151, 7, 255, 202, 147, 4, 255, 200, 145, 6, 255, 198, 145, 9, 255, 194, 138, 5, 255, 190, 131, 3, 255, 188, 127, 6, 255, 188, 123, 8, 255, 185, 118, 8, 255, 182, 115, 7, 255, 180, 113, 7, 255, 177, 108, 6, 255, 178, 106, 6, 255, 172, 99, 0, 255, 172, 99, 3, 255, 169, 94, 6, 255, 169, 94, 8, 255, 168, 95, 7, 255, 164, 90, 4, 255, 165, 90, 4, 255, 165, 90, 4, 255, 158, 87, 0, 255, 160, 88, 1, 255, 163, 87, 3, 255, 161, 84, 6, 255, 155, 80, 6, 255, 150, 77, 4, 255, 152, 77, 5, 255, 151, 72, 1, 255, 152, 74, 4, 255, 147, 70, 5, 255, 143, 66, 6, 255, 140, 65, 2, 255, 132, 60, 3, 255, 124, 57, 2, 255, 117, 48, 4, 255, 108, 39, 5, 255, 109, 43, 3, 255, 110, 44, 2, 255, 105, 40, 2, 255, 96, 34, 2, 255, 91, 29, 0, 255, 99, 38, 3, 255, 102, 39, 2, 255, 93, 30, 0, 255, 94, 39, 4, 255, 107, 43, 7, 255, 104, 39, 3, 255, 106, 36, 3, 255, 113, 38, 4, 255, 117, 43, 3, 255, 121, 43, 3, 255, 124, 42, 3, 255, 123, 44, 4, 255, 120, 42, 3, 255, 119, 36, 2, 255, 117, 34, 2, 255, 104, 30, 1, 255, 98, 31, 3, 255, 99, 30, 2, 255, 101, 28, 2, 255, 106, 31, 3, 255, 103, 27, 3, 255, 76, 22, 1, 255, 95, 30, 2, 255, 120, 44, 5, 255, 106, 40, 2, 255, 103, 36, 6, 255, 105, 35, 2, 255, 98, 36, 1, 255, 98, 34, 2, 255, 102, 31, 0, 255, 98, 31, 2, 255, 88, 26, 3, 255, 74, 22, 2, 255, 78, 26, 6, 255, 85, 30, 4, 255, 85, 27, 3, 255, 96, 28, 3, 255, 88, 34, 3, 255, 99, 40, 6, 255, 102, 41, 4, 255, 116, 43, 5, 255, 122, 46, 4, 255, 123, 53, 0, 255, 129, 57, 1, 255, 131, 49, 1, 255, 129, 52, 1, 255, 134, 58, 3, 255, 133, 57, 2, 255, 133, 58, 2, 255, 133, 56, 1, 255, 126, 57, 1, 255, 126, 59, 4, 255, 120, 57, 5, 255, 116, 47, 3, 255, 100, 33, 3, 255, 72, 18, 0, 255, 66, 18, 4, 255, 77, 23, 8, 255, 79, 20, 2, 255, 75, 19, 6, 255, 60, 17, 4, 255, 51, 14, 4, 255, 59, 20, 2, 255, 67, 22, 2, 255, 72, 20, 2, 255, 74, 22, 3, 255, 78, 22, 4, 255, 78, 20, 1, 255, 80, 21, 2, 255, 81, 21, 2, 255, 83, 22, 1, 255, 90, 26, 3, 255, 89, 27, 3, 255, 82, 23, 3, 255, 77, 19, 3, 255, 79, 17, 5, 255, 78, 15, 3, 255, 89, 28, 2, 255, 119, 49, 6, 255, 135, 50, 5, 255, 127, 44, 1, 255, 114, 39, 1, 255, 98, 25, 4, 255, 66, 15, 5, 255, 60, 19, 0, 255, 84, 21, 2, 255, 4, 4, 2, 255, 5, 3, 2, 255, 4, 3, 2, 255, 7, 6, 2, 255, 10, 7, 2, 255, 10, 6, 2, 255, 12, 8, 3, 255, 14, 8, 2, 255, 15, 10, 3, 255, 16, 12, 3, 255, 15, 11, 1, 255, 15, 13, 1, 255, 16, 15, 3, 255, 16, 17, 7, 255, 20, 17, 7, 255, 24, 18, 6, 255, 24, 20, 5, 255, 25, 23, 5, 255, 30, 29, 9, 255, 36, 26, 12, 255, 32, 33, 7, 255, 38, 40, 3, 255, 32, 45, 7, 255, 40, 49, 25, 255, 47, 48, 27, 255, 42, 43, 20, 255, 38, 47, 17, 255, 75, 57, 15, 255, 130, 100, 16, 255, 153, 121, 25, 255, 127, 98, 19, 255, 77, 64, 13, 255, 56, 56, 7, 255, 48, 51, 9, 255, 52, 49, 4, 255, 53, 42, 15, 255, 47, 43, 14, 255, 48, 42, 4, 255, 45, 43, 3, 255, 48, 40, 2, 255, 66, 51, 24, 255, 64, 61, 48, 255, 64, 64, 46, 255, 74, 67, 50, 255, 74, 72, 57, 255, 69, 71, 56, 255, 64, 67, 50, 255, 64, 65, 50, 255, 68, 66, 51, 255, 67, 64, 46, 255, 63, 63, 41, 255, 65, 66, 45, 255, 68, 61, 35, 255, 55, 49, 13, 255, 56, 56, 23, 255, 52, 47, 27, 255, 49, 33, 8, 255, 52, 29, 3, 255, 52, 24, 7, 255, 62, 38, 2, 255, 66, 45, 4, 255, 67, 45, 6, 255, 60, 33, 3, 255, 57, 29, 5, 255, 60, 29, 1, 255, 69, 30, 2, 255, 75, 32, 4, 255, 70, 33, 2, 255, 63, 32, 2, 255, 65, 32, 3, 255, 64, 32, 3, 255, 67, 32, 5, 255, 69, 32, 5, 255, 62, 29, 1, 255, 61, 32, 2, 255, 63, 30, 2, 255, 63, 28, 2, 255, 63, 34, 5, 255, 61, 34, 2, 255, 67, 34, 2, 255, 71, 39, 7, 255, 63, 37, 2, 255, 70, 36, 3, 255, 73, 38, 3, 255, 78, 36, 4, 255, 78, 34, 3, 255, 76, 39, 4, 255, 76, 43, 5, 255, 78, 42, 5, 255, 79, 39, 2, 255, 81, 38, 3, 255, 86, 37, 2, 255, 85, 43, 5, 255, 79, 43, 3, 255, 80, 39, 1, 255, 87, 38, 5, 255, 81, 43, 4, 255, 83, 44, 4, 255, 85, 42, 2, 255, 84, 42, 2, 255, 85, 43, 3, 255, 86, 42, 2, 255, 87, 42, 1, 255, 90, 47, 4, 255, 89, 46, 3, 255, 87, 45, 3, 255, 87, 45, 3, 255, 87, 45, 3, 255, 82, 43, 1, 255, 85, 48, 2, 255, 89, 45, 0, 255, 93, 43, 1, 255, 92, 43, 2, 255, 89, 45, 3, 255, 87, 48, 2, 255, 89, 49, 3, 255, 87, 47, 1, 255, 90, 49, 3, 255, 93, 52, 6, 255, 92, 51, 5, 255, 91, 50, 3, 255, 91, 50, 4, 255, 89, 46, 4, 255, 95, 48, 4, 255, 104, 52, 3, 255, 132, 67, 7, 255, 158, 79, 7, 255, 176, 89, 6, 255, 183, 96, 0, 255, 176, 91, 2, 255, 175, 86, 5, 255, 180, 91, 3, 255, 176, 88, 1, 255, 172, 87, 4, 255, 179, 91, 9, 255, 181, 93, 8, 255, 182, 96, 3, 255, 188, 101, 2, 255, 188, 98, 1, 255, 188, 95, 8, 255, 172, 80, 3, 255, 181, 92, 13, 255, 185, 95, 12, 255, 183, 94, 3, 255, 190, 101, 7, 255, 189, 101, 8, 255, 183, 94, 3, 255, 189, 99, 6, 255, 189, 103, 1, 255, 185, 101, 2, 255, 186, 101, 8, 255, 184, 100, 6, 255, 184, 101, 5, 255, 186, 102, 11, 255, 181, 102, 9, 255, 177, 98, 3, 255, 176, 96, 8, 255, 171, 95, 10, 255, 173, 93, 3, 255, 172, 92, 11, 255, 172, 91, 14, 255, 176, 97, 3, 255, 170, 90, 2, 255, 168, 88, 5, 255, 171, 91, 15, 255, 169, 91, 17, 255, 164, 88, 9, 255, 169, 88, 8, 255, 165, 87, 9, 255, 155, 88, 1, 255, 167, 95, 11, 255, 169, 93, 13, 255, 162, 89, 9, 255, 157, 93, 5, 255, 159, 92, 10, 255, 152, 90, 7, 255, 151, 87, 6, 255, 156, 91, 8, 255, 146, 93, 9, 255, 152, 93, 9, 255, 148, 91, 19, 255, 141, 84, 18, 255, 143, 93, 8, 255, 148, 85, 14, 255, 134, 78, 20, 255, 142, 84, 8, 255, 143, 85, 4, 255, 129, 76, 7, 255, 116, 74, 15, 255, 112, 70, 15, 255, 128, 81, 12, 255, 136, 87, 6, 255, 143, 87, 3, 255, 107, 63, 12, 255, 91, 63, 17, 255, 112, 78, 19, 255, 118, 74, 17, 255, 122, 85, 18, 255, 117, 84, 11, 255, 114, 75, 15, 255, 109, 76, 7, 255, 107, 74, 13, 255, 108, 72, 13, 255, 111, 73, 16, 255, 108, 71, 11, 255, 108, 76, 7, 255, 107, 78, 5, 255, 103, 75, 9, 255, 103, 77, 11, 255, 103, 78, 10, 255, 104, 76, 14, 255, 107, 83, 12, 255, 113, 80, 13, 255, 111, 84, 2, 255, 105, 84, 12, 255, 108, 80, 12, 255, 115, 81, 17, 255, 116, 81, 11, 255, 114, 81, 14, 255, 109, 85, 19, 255, 116, 84, 13, 255, 116, 80, 7, 255, 119, 85, 11, 255, 120, 83, 9, 255, 122, 82, 10, 255, 121, 83, 18, 255, 125, 85, 11, 255, 124, 84, 13, 255, 136, 88, 10, 255, 134, 88, 9, 255, 127, 87, 12, 255, 138, 92, 11, 255, 133, 88, 11, 255, 127, 84, 7, 255, 119, 77, 14, 255, 114, 80, 13, 255, 118, 81, 14, 255, 113, 78, 14, 255, 110, 76, 10, 255, 115, 84, 15, 255, 143, 98, 9, 255, 156, 98, 2, 255, 152, 107, 19, 255, 168, 118, 9, 255, 170, 118, 7, 255, 169, 121, 8, 255, 174, 123, 5, 255, 179, 126, 6, 255, 178, 127, 2, 255, 183, 134, 3, 255, 184, 135, 1, 255, 190, 142, 13, 255, 188, 142, 7, 255, 187, 141, 2, 255, 190, 147, 2, 255, 189, 148, 6, 255, 196, 147, 9, 255, 199, 160, 2, 255, 200, 160, 6, 255, 192, 149, 11, 255, 153, 103, 17, 255, 169, 113, 14, 255, 153, 93, 17, 255, 177, 131, 17, 255, 187, 143, 10, 255, 192, 141, 9, 255, 191, 143, 3, 255, 196, 148, 9, 255, 203, 152, 10, 255, 200, 156, 10, 255, 202, 158, 4, 255, 205, 154, 10, 255, 203, 151, 9, 255, 200, 148, 0, 255, 201, 146, 0, 255, 198, 144, 3, 255, 194, 138, 1, 255, 193, 134, 3, 255, 191, 130, 6, 255, 187, 122, 8, 255, 185, 119, 8, 255, 183, 115, 7, 255, 183, 116, 3, 255, 182, 115, 2, 255, 177, 109, 1, 255, 172, 102, 3, 255, 173, 103, 8, 255, 170, 100, 5, 255, 172, 99, 4, 255, 168, 96, 3, 255, 163, 93, 2, 255, 165, 91, 4, 255, 162, 89, 4, 255, 158, 87, 3, 255, 160, 90, 2, 255, 162, 89, 1, 255, 160, 85, 2, 255, 156, 81, 1, 255, 155, 82, 5, 255, 152, 77, 3, 255, 149, 74, 1, 255, 144, 72, 4, 255, 142, 70, 2, 255, 143, 69, 1, 255, 142, 63, 4, 255, 142, 65, 7, 255, 133, 60, 3, 255, 113, 46, 0, 255, 104, 41, 7, 255, 101, 40, 4, 255, 106, 38, 2, 255, 113, 39, 8, 255, 103, 34, 4, 255, 95, 32, 2, 255, 99, 39, 3, 255, 102, 39, 2, 255, 95, 31, 2, 255, 93, 37, 5, 255, 100, 38, 4, 255, 96, 33, 0, 255, 99, 39, 2, 255, 108, 46, 1, 255, 125, 47, 1, 255, 129, 42, 6, 255, 118, 40, 9, 255, 109, 35, 3, 255, 98, 33, 0, 255, 85, 28, 0, 255, 76, 24, 6, 255, 64, 21, 5, 255, 58, 21, 3, 255, 57, 20, 2, 255, 57, 22, 4, 255, 51, 20, 1, 255, 51, 17, 1, 255, 43, 18, 5, 255, 55, 19, 3, 255, 102, 30, 6, 255, 104, 38, 3, 255, 87, 31, 2, 255, 96, 30, 2, 255, 98, 32, 2, 255, 92, 32, 3, 255, 92, 28, 0, 255, 85, 26, 0, 255, 76, 27, 2, 255, 89, 33, 2, 255, 95, 40, 10, 255, 87, 33, 3, 255, 96, 38, 0, 255, 108, 47, 2, 255, 117, 46, 8, 255, 114, 40, 1, 255, 115, 41, 1, 255, 121, 45, 2, 255, 124, 51, 1, 255, 125, 56, 1, 255, 126, 56, 2, 255, 130, 54, 5, 255, 132, 57, 3, 255, 135, 57, 0, 255, 125, 47, 5, 255, 119, 47, 10, 255, 123, 53, 3, 255, 124, 51, 5, 255, 122, 46, 3, 255, 104, 40, 4, 255, 93, 30, 4, 255, 77, 22, 2, 255, 70, 23, 4, 255, 76, 21, 5, 255, 68, 18, 3, 255, 74, 15, 1, 255, 74, 22, 1, 255, 57, 19, 0, 255, 62, 16, 3, 255, 67, 14, 4, 255, 64, 19, 3, 255, 64, 19, 2, 255, 77, 22, 3, 255, 82, 24, 6, 255, 79, 21, 4, 255, 81, 20, 3, 255, 89, 22, 5, 255, 82, 22, 8, 255, 80, 20, 1, 255, 84, 21, 1, 255, 89, 23, 4, 255, 83, 21, 5, 255, 67, 17, 2, 255, 67, 17, 1, 255, 104, 33, 3, 255, 142, 53, 2, 255, 148, 61, 3, 255, 134, 49, 2, 255, 119, 39, 5, 255, 93, 23, 1, 255, 74, 15, 2, 255, 68, 21, 1, 255, 81, 21, 3, 255, 7, 6, 1, 255, 7, 6, 2, 255, 7, 4, 1, 255, 11, 7, 2, 255, 12, 9, 1, 255, 11, 6, 1, 255, 15, 9, 3, 255, 14, 8, 2, 255, 15, 10, 5, 255, 16, 11, 4, 255, 15, 12, 1, 255, 17, 15, 3, 255, 17, 16, 2, 255, 18, 19, 2, 255, 22, 20, 4, 255, 29, 25, 6, 255, 33, 29, 6, 255, 31, 30, 5, 255, 30, 31, 5, 255, 33, 30, 12, 255, 39, 40, 7, 255, 34, 44, 1, 255, 40, 39, 5, 255, 56, 44, 22, 255, 40, 43, 16, 255, 60, 51, 25, 255, 122, 99, 29, 255, 137, 110, 22, 255, 103, 90, 20, 255, 56, 54, 7, 255, 38, 39, 17, 255, 45, 49, 20, 255, 53, 52, 10, 255, 57, 55, 8, 255, 57, 51, 3, 255, 53, 49, 3, 255, 47, 43, 13, 255, 52, 41, 9, 255, 46, 39, 4, 255, 41, 36, 6, 255, 61, 49, 16, 255, 65, 62, 39, 255, 66, 64, 30, 255, 78, 68, 37, 255, 74, 75, 48, 255, 69, 67, 55, 255, 69, 69, 60, 255, 66, 67, 47, 255, 65, 66, 33, 255, 67, 65, 55, 255, 60, 62, 50, 255, 61, 65, 48, 255, 67, 61, 39, 255, 61, 52, 24, 255, 53, 53, 18, 255, 52, 53, 27, 255, 49, 37, 10, 255, 53, 29, 1, 255, 55, 30, 8, 255, 56, 39, 3, 255, 62, 48, 7, 255, 65, 45, 8, 255, 60, 31, 3, 255, 56, 25, 3, 255, 47, 26, 3, 255, 48, 26, 1, 255, 55, 26, 3, 255, 62, 27, 3, 255, 63, 27, 3, 255, 62, 29, 5, 255, 61, 30, 2, 255, 64, 29, 1, 255, 66, 31, 3, 255, 62, 31, 2, 255, 67, 35, 4, 255, 69, 36, 5, 255, 74, 37, 6, 255, 81, 37, 3, 255, 91, 38, 5, 255, 84, 37, 3, 255, 81, 39, 4, 255, 82, 35, 1, 255, 84, 36, 0, 255, 76, 39, 1, 255, 77, 40, 4, 255, 74, 37, 2, 255, 75, 41, 5, 255, 73, 39, 1, 255, 80, 41, 3, 255, 82, 41, 2, 255, 79, 40, 2, 255, 78, 42, 0, 255, 78, 43, 3, 255, 84, 43, 4, 255, 85, 38, 3, 255, 85, 40, 6, 255, 81, 44, 6, 255, 83, 42, 3, 255, 85, 43, 3, 255, 86, 44, 3, 255, 85, 44, 1, 255, 88, 45, 2, 255, 87, 43, 1, 255, 87, 44, 1, 255, 86, 44, 1, 255, 87, 46, 2, 255, 89, 45, 3, 255, 90, 45, 4, 255, 88, 43, 1, 255, 88, 47, 2, 255, 95, 50, 3, 255, 95, 48, 4, 255, 93, 45, 3, 255, 92, 48, 5, 255, 92, 51, 4, 255, 86, 49, 2, 255, 90, 52, 5, 255, 89, 48, 3, 255, 91, 49, 2, 255, 92, 48, 1, 255, 90, 46, 1, 255, 100, 51, 5, 255, 94, 51, 6, 255, 86, 52, 7, 255, 94, 48, 7, 255, 98, 50, 5, 255, 103, 56, 0, 255, 125, 62, 5, 255, 138, 69, 6, 255, 148, 73, 11, 255, 154, 73, 3, 255, 165, 79, 5, 255, 172, 87, 5, 255, 163, 87, 2, 255, 174, 91, 6, 255, 176, 88, 1, 255, 172, 88, 3, 255, 181, 97, 8, 255, 182, 97, 2, 255, 187, 101, 4, 255, 181, 97, 2, 255, 179, 92, 6, 255, 177, 89, 9, 255, 178, 91, 4, 255, 187, 103, 4, 255, 183, 97, 4, 255, 175, 86, 9, 255, 184, 95, 3, 255, 188, 99, 10, 255, 188, 103, 6, 255, 187, 104, 3, 255, 176, 92, 3, 255, 174, 92, 5, 255, 178, 96, 4, 255, 171, 92, 7, 255, 172, 91, 9, 255, 174, 90, 13, 255, 172, 93, 7, 255, 172, 89, 0, 255, 167, 83, 7, 255, 156, 79, 11, 255, 165, 89, 13, 255, 159, 83, 14, 255, 158, 84, 8, 255, 160, 91, 7, 255, 150, 78, 5, 255, 145, 82, 11, 255, 146, 89, 11, 255, 144, 87, 7, 255, 149, 87, 3, 255, 156, 84, 10, 255, 152, 88, 4, 255, 138, 86, 8, 255, 136, 83, 3, 255, 133, 84, 4, 255, 142, 87, 7, 255, 150, 88, 12, 255, 140, 83, 6, 255, 129, 75, 6, 255, 121, 71, 11, 255, 115, 73, 18, 255, 111, 69, 18, 255, 111, 72, 12, 255, 119, 65, 13, 255, 120, 75, 19, 255, 127, 77, 8, 255, 96, 62, 8, 255, 103, 63, 16, 255, 93, 62, 20, 255, 88, 66, 20, 255, 114, 86, 12, 255, 146, 88, 16, 255, 136, 79, 12, 255, 87, 64, 15, 255, 86, 66, 15, 255, 88, 64, 21, 255, 94, 68, 11, 255, 118, 81, 17, 255, 110, 66, 23, 255, 87, 61, 12, 255, 96, 77, 11, 255, 103, 73, 5, 255, 109, 76, 10, 255, 104, 74, 16, 255, 107, 77, 15, 255, 112, 78, 15, 255, 111, 74, 17, 255, 106, 73, 8, 255, 106, 75, 11, 255, 111, 78, 14, 255, 115, 82, 4, 255, 110, 78, 10, 255, 108, 77, 14, 255, 110, 86, 9, 255, 111, 86, 8, 255, 112, 77, 14, 255, 110, 79, 12, 255, 109, 80, 20, 255, 114, 81, 16, 255, 116, 79, 18, 255, 122, 81, 10, 255, 118, 81, 12, 255, 117, 79, 29, 255, 124, 81, 14, 255, 129, 89, 8, 255, 125, 88, 9, 255, 123, 87, 8, 255, 125, 84, 18, 255, 125, 78, 20, 255, 129, 85, 9, 255, 130, 90, 10, 255, 137, 89, 15, 255, 136, 85, 16, 255, 131, 83, 11, 255, 124, 80, 10, 255, 119, 80, 17, 255, 116, 75, 15, 255, 100, 73, 17, 255, 98, 76, 7, 255, 128, 89, 15, 255, 152, 95, 12, 255, 156, 97, 6, 255, 157, 100, 8, 255, 160, 96, 11, 255, 165, 109, 4, 255, 164, 111, 16, 255, 165, 110, 6, 255, 173, 116, 2, 255, 171, 118, 9, 255, 173, 122, 9, 255, 173, 121, 2, 255, 166, 115, 4, 255, 166, 115, 7, 255, 161, 110, 0, 255, 180, 133, 10, 255, 191, 147, 9, 255, 189, 144, 6, 255, 195, 146, 10, 255, 190, 147, 8, 255, 203, 162, 13, 255, 178, 126, 5, 255, 152, 95, 10, 255, 149, 96, 10, 255, 184, 133, 6, 255, 185, 142, 6, 255, 192, 144, 4, 255, 198, 143, 14, 255, 194, 152, 11, 255, 205, 152, 9, 255, 205, 159, 3, 255, 204, 156, 1, 255, 202, 152, 3, 255, 202, 149, 7, 255, 202, 148, 7, 255, 201, 145, 6, 255, 195, 140, 6, 255, 194, 137, 5, 255, 194, 135, 6, 255, 192, 132, 5, 255, 188, 126, 2, 255, 186, 123, 1, 255, 185, 120, 2, 255, 185, 117, 3, 255, 181, 114, 2, 255, 180, 112, 3, 255, 178, 109, 5, 255, 173, 105, 5, 255, 173, 105, 8, 255, 172, 98, 2, 255, 169, 96, 2, 255, 166, 92, 2, 255, 166, 91, 4, 255, 163, 89, 2, 255, 164, 92, 4, 255, 163, 91, 3, 255, 163, 89, 2, 255, 163, 86, 4, 255, 161, 83, 5, 255, 158, 81, 8, 255, 149, 71, 2, 255, 148, 71, 1, 255, 145, 75, 3, 255, 146, 74, 3, 255, 147, 73, 0, 255, 144, 66, 1, 255, 141, 63, 4, 255, 132, 54, 9, 255, 109, 39, 7, 255, 113, 49, 4, 255, 109, 47, 2, 255, 105, 39, 0, 255, 109, 41, 4, 255, 103, 35, 5, 255, 98, 33, 2, 255, 103, 43, 4, 255, 103, 38, 2, 255, 95, 31, 2, 255, 87, 31, 2, 255, 92, 34, 3, 255, 93, 32, 2, 255, 107, 44, 1, 255, 117, 50, 4, 255, 119, 43, 2, 255, 112, 34, 0, 255, 102, 33, 2, 255, 100, 33, 2, 255, 93, 31, 1, 255, 72, 23, 1, 255, 55, 22, 4, 255, 54, 22, 6, 255, 59, 21, 0, 255, 57, 21, 0, 255, 48, 23, 4, 255, 42, 21, 10, 255, 44, 18, 5, 255, 57, 20, 11, 255, 39, 18, 5, 255, 65, 19, 3, 255, 95, 27, 5, 255, 94, 30, 2, 255, 94, 30, 4, 255, 95, 25, 1, 255, 95, 34, 8, 255, 86, 28, 4, 255, 78, 21, 0, 255, 80, 32, 5, 255, 95, 36, 4, 255, 92, 32, 3, 255, 75, 25, 3, 255, 96, 37, 2, 255, 111, 45, 4, 255, 116, 38, 1, 255, 116, 47, 3, 255, 121, 56, 4, 255, 125, 58, 4, 255, 124, 55, 5, 255, 125, 54, 7, 255, 127, 55, 4, 255, 127, 58, 1, 255, 132, 64, 1, 255, 139, 62, 2, 255, 109, 34, 7, 255, 83, 16, 8, 255, 86, 21, 2, 255, 91, 25, 11, 255, 89, 28, 2, 255, 79, 23, 1, 255, 70, 22, 3, 255, 68, 20, 3, 255, 71, 20, 2, 255, 74, 21, 0, 255, 68, 22, 3, 255, 63, 18, 3, 255, 67, 18, 3, 255, 63, 13, 3, 255, 54, 14, 0, 255, 61, 18, 7, 255, 64, 18, 1, 255, 68, 21, 2, 255, 77, 24, 1, 255, 81, 25, 3, 255, 81, 23, 2, 255, 84, 24, 1, 255, 86, 23, 0, 255, 77, 14, 4, 255, 79, 20, 3, 255, 82, 26, 5, 255, 80, 24, 4, 255, 72, 18, 1, 255, 68, 17, 1, 255, 84, 28, 9, 255, 109, 42, 8, 255, 125, 51, 1, 255, 137, 58, 3, 255, 130, 44, 0, 255, 113, 34, 4, 255, 81, 21, 2, 255, 70, 17, 1, 255, 74, 28, 9, 255, 78, 21, 6, 255, 8, 5, 0, 255, 9, 6, 1, 255, 10, 6, 2, 255, 14, 10, 2, 255, 15, 11, 0, 255, 14, 8, 0, 255, 16, 9, 2, 255, 14, 9, 2, 255, 14, 10, 2, 255, 15, 11, 4, 255, 16, 14, 3, 255, 20, 18, 4, 255, 19, 18, 3, 255, 19, 20, 4, 255, 22, 20, 6, 255, 29, 25, 8, 255, 32, 29, 4, 255, 31, 30, 3, 255, 31, 32, 7, 255, 34, 36, 12, 255, 38, 39, 5, 255, 37, 47, 5, 255, 54, 45, 12, 255, 33, 36, 12, 255, 67, 63, 27, 255, 129, 99, 28, 255, 109, 86, 15, 255, 47, 54, 6, 255, 41, 42, 12, 255, 45, 57, 12, 255, 48, 55, 18, 255, 49, 51, 17, 255, 59, 53, 13, 255, 57, 48, 23, 255, 50, 44, 20, 255, 53, 45, 7, 255, 57, 39, 5, 255, 46, 38, 11, 255, 41, 37, 10, 255, 37, 31, 5, 255, 52, 41, 16, 255, 66, 56, 37, 255, 61, 58, 38, 255, 66, 60, 40, 255, 74, 70, 43, 255, 71, 65, 58, 255, 65, 64, 54, 255, 65, 66, 49, 255, 63, 62, 45, 255, 62, 60, 50, 255, 63, 63, 49, 255, 64, 63, 55, 255, 69, 65, 37, 255, 66, 56, 17, 255, 55, 44, 20, 255, 55, 51, 31, 255, 61, 52, 19, 255, 54, 30, 3, 255, 55, 27, 3, 255, 51, 29, 9, 255, 62, 43, 11, 255, 62, 46, 15, 255, 52, 36, 6, 255, 52, 25, 1, 255, 49, 26, 3, 255, 55, 28, 5, 255, 60, 28, 3, 255, 61, 28, 2, 255, 64, 32, 2, 255, 67, 35, 3, 255, 65, 33, 1, 255, 66, 32, 3, 255, 70, 32, 5, 255, 65, 29, 2, 255, 61, 32, 2, 255, 64, 33, 2, 255, 71, 31, 3, 255, 72, 31, 2, 255, 76, 33, 1, 255, 74, 35, 0, 255, 73, 38, 2, 255, 75, 38, 0, 255, 79, 40, 1, 255, 83, 40, 2, 255, 82, 43, 5, 255, 79, 43, 3, 255, 83, 45, 5, 255, 85, 42, 3, 255, 87, 44, 3, 255, 87, 45, 3, 255, 84, 42, 3, 255, 85, 42, 2, 255, 83, 38, 0, 255, 81, 42, 3, 255, 80, 42, 4, 255, 85, 37, 3, 255, 82, 40, 2, 255, 86, 42, 3, 255, 87, 43, 2, 255, 86, 45, 2, 255, 88, 49, 4, 255, 89, 48, 3, 255, 90, 47, 5, 255, 89, 46, 4, 255, 86, 42, 1, 255, 88, 43, 1, 255, 88, 42, 0, 255, 89, 43, 1, 255, 90, 43, 1, 255, 91, 47, 4, 255, 94, 51, 4, 255, 85, 43, 0, 255, 86, 47, 2, 255, 91, 50, 5, 255, 92, 46, 1, 255, 90, 49, 2, 255, 93, 51, 6, 255, 92, 50, 3, 255, 92, 47, 1, 255, 98, 50, 4, 255, 98, 49, 3, 255, 97, 50, 3, 255, 92, 51, 1, 255, 90, 50, 0, 255, 94, 51, 3, 255, 96, 54, 4, 255, 92, 51, 0, 255, 95, 50, 1, 255, 89, 46, 6, 255, 97, 51, 6, 255, 111, 57, 6, 255, 123, 59, 4, 255, 128, 61, 1, 255, 135, 70, 5, 255, 150, 76, 6, 255, 154, 74, 3, 255, 151, 74, 5, 255, 157, 79, 6, 255, 165, 85, 5, 255, 171, 89, 4, 255, 172, 92, 3, 255, 174, 95, 7, 255, 172, 93, 3, 255, 172, 92, 6, 255, 175, 94, 6, 255, 177, 95, 6, 255, 174, 90, 10, 255, 178, 90, 6, 255, 184, 96, 5, 255, 178, 90, 8, 255, 176, 93, 8, 255, 173, 94, 5, 255, 168, 87, 8, 255, 159, 79, 10, 255, 149, 75, 8, 255, 154, 83, 2, 255, 149, 77, 6, 255, 147, 80, 9, 255, 148, 77, 19, 255, 142, 75, 7, 255, 139, 75, 10, 255, 142, 78, 6, 255, 141, 77, 3, 255, 140, 79, 3, 255, 135, 72, 4, 255, 130, 68, 11, 255, 135, 78, 10, 255, 135, 75, 4, 255, 131, 68, 16, 255, 127, 70, 7, 255, 129, 74, 2, 255, 126, 68, 8, 255, 119, 63, 11, 255, 116, 64, 11, 255, 109, 70, 16, 255, 121, 68, 15, 255, 106, 55, 8, 255, 87, 56, 12, 255, 87, 51, 15, 255, 80, 51, 11, 255, 97, 64, 12, 255, 135, 84, 6, 255, 114, 70, 9, 255, 107, 67, 17, 255, 120, 79, 16, 255, 109, 71, 12, 255, 92, 65, 12, 255, 101, 68, 12, 255, 93, 64, 7, 255, 94, 63, 2, 255, 102, 68, 4, 255, 114, 75, 18, 255, 90, 62, 14, 255, 82, 61, 10, 255, 85, 65, 16, 255, 89, 66, 17, 255, 88, 69, 11, 255, 108, 79, 13, 255, 97, 68, 11, 255, 99, 68, 11, 255, 106, 74, 23, 255, 102, 78, 11, 255, 105, 77, 7, 255, 110, 77, 7, 255, 105, 73, 16, 255, 104, 72, 18, 255, 105, 72, 15, 255, 106, 73, 19, 255, 107, 77, 17, 255, 110, 80, 14, 255, 114, 79, 9, 255, 114, 77, 15, 255, 115, 78, 12, 255, 116, 81, 12, 255, 113, 82, 11, 255, 114, 82, 12, 255, 114, 80, 16, 255, 113, 78, 25, 255, 113, 79, 19, 255, 114, 80, 16, 255, 117, 79, 14, 255, 123, 85, 8, 255, 128, 85, 12, 255, 130, 78, 17, 255, 130, 86, 9, 255, 129, 85, 7, 255, 127, 86, 13, 255, 129, 82, 9, 255, 128, 84, 22, 255, 126, 85, 16, 255, 132, 83, 11, 255, 144, 88, 16, 255, 143, 89, 13, 255, 129, 82, 15, 255, 117, 78, 13, 255, 107, 76, 14, 255, 109, 75, 11, 255, 117, 85, 6, 255, 127, 89, 11, 255, 156, 97, 15, 255, 166, 97, 8, 255, 165, 99, 12, 255, 159, 93, 2, 255, 158, 88, 8, 255, 158, 92, 11, 255, 154, 94, 11, 255, 156, 99, 4, 255, 158, 102, 5, 255, 159, 103, 13, 255, 161, 106, 11, 255, 163, 110, 4, 255, 157, 107, 7, 255, 153, 101, 6, 255, 160, 108, 3, 255, 167, 116, 7, 255, 183, 135, 6, 255, 188, 147, 4, 255, 184, 137, 8, 255, 187, 134, 14, 255, 201, 152, 4, 255, 187, 137, 4, 255, 174, 123, 6, 255, 175, 123, 9, 255, 185, 133, 10, 255, 187, 139, 5, 255, 194, 141, 4, 255, 196, 143, 8, 255, 198, 152, 7, 255, 204, 151, 5, 255, 207, 153, 9, 255, 200, 146, 4, 255, 200, 149, 0, 255, 202, 150, 5, 255, 201, 146, 17, 255, 197, 143, 14, 255, 197, 140, 8, 255, 196, 139, 7, 255, 194, 135, 6, 255, 190, 130, 3, 255, 188, 127, 2, 255, 186, 126, 2, 255, 186, 123, 2, 255, 186, 119, 7, 255, 181, 112, 7, 255, 179, 112, 6, 255, 178, 112, 1, 255, 173, 106, 2, 255, 172, 102, 7, 255, 173, 97, 8, 255, 170, 96, 6, 255, 168, 94, 5, 255, 166, 91, 2, 255, 166, 90, 1, 255, 168, 94, 1, 255, 167, 93, 3, 255, 163, 88, 2, 255, 160, 84, 0, 255, 160, 84, 1, 255, 157, 83, 3, 255, 151, 76, 2, 255, 154, 75, 4, 255, 151, 76, 9, 255, 148, 74, 4, 255, 146, 71, 1, 255, 145, 67, 6, 255, 138, 62, 2, 255, 132, 59, 1, 255, 122, 51, 6, 255, 121, 45, 9, 255, 114, 41, 5, 255, 107, 41, 3, 255, 103, 41, 4, 255, 100, 37, 3, 255, 97, 33, 3, 255, 102, 39, 3, 255, 107, 41, 5, 255, 93, 31, 4, 255, 77, 26, 0, 255, 90, 33, 5, 255, 99, 38, 8, 255, 109, 42, 4, 255, 117, 34, 3, 255, 111, 35, 2, 255, 104, 39, 3, 255, 100, 34, 3, 255, 88, 30, 5, 255, 67, 27, 5, 255, 52, 19, 1, 255, 57, 22, 3, 255, 70, 23, 3, 255, 79, 25, 1, 255, 79, 28, 4, 255, 68, 26, 3, 255, 69, 24, 3, 255, 79, 23, 3, 255, 75, 27, 2, 255, 56, 25, 2, 255, 55, 28, 5, 255, 71, 22, 2, 255, 88, 34, 4, 255, 88, 42, 8, 255, 86, 27, 1, 255, 83, 23, 3, 255, 72, 25, 3, 255, 75, 28, 2, 255, 91, 36, 5, 255, 92, 34, 2, 255, 85, 27, 1, 255, 84, 26, 2, 255, 81, 24, 0, 255, 97, 32, 7, 255, 124, 48, 5, 255, 127, 55, 5, 255, 129, 54, 4, 255, 129, 54, 1, 255, 132, 55, 1, 255, 136, 56, 2, 255, 135, 54, 5, 255, 130, 60, 4, 255, 137, 69, 4, 255, 141, 62, 4, 255, 96, 31, 3, 255, 58, 14, 4, 255, 62, 18, 1, 255, 65, 17, 6, 255, 64, 20, 0, 255, 65, 25, 2, 255, 63, 18, 0, 255, 65, 21, 2, 255, 59, 19, 1, 255, 59, 18, 2, 255, 70, 20, 1, 255, 58, 15, 0, 255, 58, 16, 8, 255, 48, 9, 7, 255, 48, 17, 3, 255, 59, 24, 5, 255, 69, 22, 0, 255, 78, 23, 1, 255, 74, 24, 2, 255, 78, 25, 4, 255, 82, 22, 3, 255, 79, 19, 2, 255, 73, 17, 3, 255, 75, 22, 0, 255, 76, 20, 1, 255, 75, 19, 3, 255, 73, 19, 4, 255, 74, 20, 1, 255, 86, 30, 2, 255, 107, 36, 5, 255, 118, 45, 4, 255, 119, 49, 1, 255, 128, 50, 3, 255, 128, 46, 2, 255, 117, 42, 6, 255, 97, 27, 7, 255, 81, 21, 3, 255, 79, 25, 3, 255, 79, 21, 3, 255, 9, 6, 1, 255, 9, 6, 2, 255, 10, 6, 2, 255, 12, 9, 2, 255, 13, 10, 0, 255, 15, 10, 2, 255, 16, 12, 3, 255, 16, 12, 2, 255, 14, 12, 2, 255, 16, 14, 4, 255, 19, 16, 4, 255, 20, 17, 3, 255, 23, 21, 6, 255, 23, 24, 10, 255, 22, 23, 10, 255, 26, 27, 8, 255, 31, 31, 5, 255, 35, 34, 6, 255, 36, 37, 13, 255, 33, 42, 8, 255, 50, 47, 6, 255, 44, 45, 6, 255, 33, 35, 8, 255, 84, 82, 11, 255, 100, 87, 19, 255, 63, 60, 20, 255, 35, 46, 28, 255, 49, 50, 16, 255, 61, 56, 14, 255, 51, 52, 20, 255, 56, 50, 16, 255, 55, 55, 4, 255, 50, 51, 20, 255, 50, 44, 23, 255, 54, 42, 25, 255, 52, 40, 19, 255, 49, 32, 14, 255, 41, 32, 13, 255, 41, 34, 3, 255, 37, 28, 1, 255, 47, 37, 10, 255, 65, 51, 30, 255, 64, 56, 46, 255, 61, 56, 40, 255, 73, 63, 46, 255, 75, 69, 58, 255, 64, 63, 51, 255, 63, 63, 60, 255, 63, 60, 50, 255, 63, 61, 40, 255, 65, 61, 45, 255, 65, 62, 49, 255, 65, 56, 51, 255, 61, 45, 21, 255, 59, 40, 10, 255, 60, 51, 20, 255, 64, 58, 21, 255, 52, 35, 6, 255, 55, 26, 2, 255, 53, 27, 7, 255, 51, 37, 10, 255, 62, 50, 6, 255, 65, 42, 2, 255, 58, 27, 1, 255, 53, 30, 5, 255, 58, 27, 5, 255, 64, 26, 3, 255, 65, 32, 6, 255, 66, 32, 2, 255, 72, 30, 1, 255, 75, 34, 6, 255, 70, 33, 5, 255, 64, 32, 3, 255, 61, 31, 2, 255, 67, 31, 3, 255, 69, 33, 4, 255, 65, 34, 2, 255, 71, 34, 2, 255, 68, 36, 1, 255, 70, 39, 5, 255, 68, 35, 4, 255, 69, 35, 4, 255, 72, 39, 6, 255, 73, 33, 2, 255, 77, 36, 4, 255, 80, 39, 5, 255, 80, 37, 2, 255, 86, 40, 5, 255, 88, 41, 6, 255, 85, 41, 4, 255, 88, 45, 6, 255, 90, 42, 5, 255, 90, 42, 4, 255, 95, 43, 7, 255, 100, 44, 8, 255, 93, 41, 2, 255, 89, 44, 4, 255, 93, 47, 6, 255, 89, 43, 1, 255, 84, 42, 0, 255, 87, 45, 2, 255, 87, 46, 2, 255, 89, 45, 2, 255, 89, 44, 2, 255, 87, 42, 0, 255, 89, 45, 3, 255, 88, 44, 3, 255, 86, 46, 3, 255, 86, 46, 4, 255, 89, 46, 6, 255, 90, 45, 3, 255, 90, 47, 4, 255, 85, 46, 2, 255, 86, 46, 1, 255, 96, 47, 1, 255, 92, 48, 1, 255, 92, 48, 1, 255, 97, 53, 5, 255, 93, 49, 2, 255, 96, 51, 4, 255, 96, 51, 4, 255, 90, 47, 1, 255, 92, 47, 3, 255, 97, 49, 3, 255, 93, 53, 2, 255, 98, 55, 4, 255, 102, 51, 3, 255, 100, 54, 4, 255, 97, 56, 0, 255, 97, 58, 1, 255, 90, 50, 1, 255, 94, 52, 2, 255, 99, 52, 4, 255, 103, 55, 8, 255, 103, 55, 7, 255, 98, 51, 2, 255, 103, 56, 3, 255, 106, 55, 1, 255, 120, 59, 7, 255, 127, 60, 8, 255, 133, 65, 13, 255, 137, 66, 13, 255, 144, 72, 7, 255, 150, 78, 2, 255, 152, 76, 4, 255, 150, 76, 9, 255, 153, 82, 4, 255, 152, 80, 5, 255, 146, 72, 3, 255, 148, 76, 6, 255, 134, 66, 6, 255, 130, 66, 7, 255, 133, 69, 11, 255, 115, 50, 5, 255, 113, 58, 1, 255, 119, 64, 1, 255, 111, 56, 9, 255, 108, 57, 10, 255, 117, 64, 10, 255, 113, 65, 7, 255, 110, 60, 5, 255, 114, 63, 10, 255, 106, 52, 4, 255, 105, 54, 6, 255, 100, 49, 7, 255, 110, 63, 8, 255, 138, 74, 9, 255, 118, 55, 9, 255, 85, 53, 12, 255, 74, 50, 6, 255, 96, 59, 10, 255, 95, 53, 7, 255, 82, 49, 14, 255, 96, 58, 9, 255, 109, 64, 11, 255, 104, 59, 11, 255, 86, 47, 7, 255, 84, 53, 5, 255, 85, 57, 8, 255, 82, 57, 12, 255, 112, 84, 7, 255, 138, 84, 9, 255, 90, 55, 1, 255, 85, 66, 8, 255, 78, 61, 7, 255, 90, 62, 13, 255, 91, 60, 17, 255, 80, 62, 6, 255, 79, 60, 13, 255, 86, 61, 20, 255, 86, 61, 7, 255, 85, 61, 3, 255, 78, 65, 11, 255, 92, 64, 14, 255, 94, 71, 7, 255, 94, 70, 11, 255, 97, 69, 13, 255, 96, 75, 12, 255, 101, 75, 5, 255, 101, 69, 19, 255, 100, 72, 19, 255, 102, 74, 6, 255, 105, 77, 3, 255, 105, 74, 19, 255, 105, 74, 18, 255, 103, 76, 8, 255, 108, 76, 10, 255, 109, 79, 8, 255, 107, 78, 18, 255, 110, 80, 11, 255, 117, 80, 13, 255, 116, 82, 16, 255, 115, 79, 14, 255, 114, 80, 9, 255, 110, 80, 10, 255, 112, 82, 17, 255, 114, 80, 13, 255, 118, 81, 11, 255, 117, 82, 11, 255, 123, 84, 17, 255, 125, 83, 16, 255, 129, 84, 16, 255, 129, 85, 16, 255, 128, 87, 16, 255, 136, 86, 12, 255, 140, 89, 14, 255, 139, 86, 14, 255, 145, 90, 7, 255, 133, 87, 8, 255, 133, 84, 15, 255, 140, 89, 10, 255, 154, 96, 18, 255, 153, 96, 5, 255, 141, 88, 4, 255, 133, 84, 12, 255, 132, 88, 14, 255, 147, 97, 13, 255, 165, 99, 15, 255, 171, 103, 7, 255, 176, 105, 4, 255, 171, 99, 2, 255, 162, 94, 9, 255, 158, 95, 12, 255, 152, 93, 10, 255, 149, 87, 8, 255, 147, 85, 3, 255, 145, 86, 10, 255, 140, 86, 10, 255, 146, 90, 5, 255, 148, 91, 11, 255, 148, 98, 5, 255, 150, 103, 4, 255, 157, 109, 2, 255, 173, 121, 8, 255, 174, 120, 15, 255, 175, 122, 9, 255, 187, 142, 6, 255, 192, 152, 10, 255, 191, 143, 12, 255, 189, 138, 4, 255, 190, 143, 8, 255, 191, 143, 6, 255, 179, 122, 3, 255, 178, 128, 16, 255, 184, 133, 2, 255, 186, 130, 4, 255, 194, 147, 3, 255, 197, 144, 7, 255, 202, 151, 6, 255, 200, 150, 6, 255, 197, 149, 6, 255, 203, 153, 2, 255, 200, 149, 2, 255, 196, 143, 8, 255, 196, 143, 6, 255, 197, 142, 6, 255, 194, 136, 4, 255, 192, 133, 4, 255, 192, 131, 5, 255, 189, 127, 5, 255, 188, 126, 6, 255, 186, 123, 6, 255, 183, 120, 7, 255, 180, 116, 7, 255, 177, 112, 4, 255, 177, 110, 3, 255, 176, 108, 5, 255, 172, 102, 5, 255, 171, 99, 3, 255, 168, 98, 1, 255, 166, 97, 2, 255, 164, 92, 1, 255, 164, 89, 3, 255, 163, 88, 7, 255, 159, 86, 6, 255, 156, 83, 3, 255, 155, 81, 2, 255, 155, 84, 4, 255, 152, 81, 4, 255, 150, 76, 3, 255, 150, 72, 2, 255, 154, 79, 3, 255, 150, 76, 4, 255, 148, 70, 5, 255, 144, 66, 3, 255, 139, 62, 2, 255, 136, 65, 3, 255, 125, 62, 3, 255, 115, 51, 8, 255, 109, 46, 2, 255, 109, 46, 1, 255, 105, 40, 1, 255, 102, 35, 1, 255, 101, 33, 6, 255, 99, 34, 2, 255, 102, 36, 1, 255, 92, 33, 6, 255, 74, 25, 0, 255, 84, 28, 1, 255, 97, 34, 6, 255, 97, 31, 2, 255, 109, 35, 4, 255, 118, 37, 8, 255, 103, 32, 4, 255, 77, 26, 2, 255, 60, 21, 2, 255, 55, 22, 4, 255, 57, 21, 4, 255, 73, 25, 7, 255, 80, 25, 4, 255, 80, 25, 1, 255, 81, 28, 3, 255, 81, 30, 3, 255, 84, 26, 0, 255, 87, 28, 4, 255, 82, 31, 1, 255, 92, 27, 8, 255, 77, 18, 9, 255, 61, 15, 3, 255, 72, 22, 1, 255, 76, 25, 4, 255, 83, 24, 3, 255, 80, 20, 1, 255, 69, 20, 1, 255, 83, 33, 7, 255, 96, 34, 4, 255, 86, 28, 3, 255, 77, 25, 2, 255, 85, 28, 1, 255, 80, 26, 4, 255, 73, 25, 3, 255, 96, 34, 5, 255, 131, 48, 1, 255, 119, 37, 5, 255, 98, 27, 6, 255, 90, 26, 1, 255, 99, 29, 0, 255, 103, 32, 2, 255, 109, 41, 4, 255, 119, 45, 4, 255, 124, 39, 4, 255, 87, 24, 0, 255, 52, 19, 1, 255, 60, 23, 3, 255, 67, 16, 0, 255, 70, 19, 3, 255, 64, 25, 4, 255, 71, 21, 4, 255, 68, 16, 2, 255, 53, 17, 2, 255, 46, 16, 2, 255, 61, 19, 4, 255, 58, 17, 4, 255, 47, 16, 4, 255, 42, 18, 1, 255, 56, 19, 3, 255, 70, 18, 2, 255, 80, 22, 7, 255, 80, 24, 2, 255, 79, 26, 0, 255, 79, 26, 4, 255, 77, 19, 7, 255, 72, 12, 5, 255, 74, 16, 6, 255, 70, 18, 5, 255, 66, 16, 0, 255, 76, 23, 0, 255, 92, 34, 4, 255, 104, 40, 4, 255, 112, 43, 1, 255, 119, 43, 2, 255, 122, 47, 0, 255, 122, 46, 0, 255, 128, 45, 2, 255, 128, 46, 2, 255, 125, 43, 2, 255, 121, 35, 4, 255, 102, 31, 4, 255, 89, 23, 1, 255, 83, 21, 0, 255, 10, 8, 3, 255, 9, 7, 3, 255, 9, 7, 3, 255, 11, 9, 3, 255, 10, 9, 2, 255, 11, 10, 3, 255, 14, 13, 3, 255, 16, 16, 4, 255, 14, 15, 5, 255, 17, 16, 5, 255, 19, 17, 5, 255, 19, 17, 3, 255, 25, 24, 6, 255, 25, 28, 7, 255, 22, 26, 6, 255, 27, 30, 8, 255, 35, 37, 5, 255, 39, 40, 6, 255, 38, 40, 8, 255, 35, 44, 9, 255, 49, 47, 1, 255, 44, 51, 8, 255, 109, 114, 18, 255, 124, 111, 9, 255, 49, 48, 8, 255, 51, 50, 26, 255, 53, 54, 26, 255, 56, 53, 23, 255, 51, 49, 24, 255, 54, 49, 22, 255, 58, 48, 17, 255, 56, 50, 26, 255, 51, 47, 25, 255, 53, 47, 14, 255, 57, 47, 5, 255, 52, 44, 12, 255, 49, 41, 20, 255, 45, 34, 2, 255, 48, 29, 4, 255, 43, 28, 3, 255, 41, 34, 5, 255, 58, 44, 15, 255, 73, 54, 24, 255, 64, 53, 41, 255, 66, 59, 45, 255, 74, 67, 57, 255, 63, 62, 52, 255, 63, 66, 52, 255, 63, 63, 51, 255, 64, 61, 41, 255, 66, 58, 42, 255, 66, 61, 53, 255, 59, 52, 44, 255, 66, 48, 27, 255, 67, 45, 14, 255, 59, 46, 21, 255, 64, 59, 27, 255, 62, 48, 6, 255, 55, 30, 0, 255, 56, 28, 7, 255, 66, 38, 9, 255, 76, 53, 8, 255, 66, 45, 8, 255, 56, 29, 9, 255, 57, 28, 1, 255, 59, 31, 3, 255, 60, 28, 1, 255, 63, 28, 1, 255, 66, 29, 1, 255, 67, 30, 1, 255, 70, 32, 4, 255, 64, 29, 2, 255, 61, 30, 1, 255, 68, 34, 6, 255, 67, 31, 4, 255, 66, 32, 3, 255, 68, 35, 5, 255, 74, 34, 4, 255, 72, 33, 1, 255, 68, 39, 3, 255, 71, 36, 2, 255, 81, 37, 4, 255, 74, 38, 3, 255, 67, 40, 4, 255, 71, 37, 2, 255, 81, 41, 4, 255, 76, 40, 2, 255, 72, 38, 0, 255, 78, 37, 1, 255, 80, 40, 2, 255, 74, 41, 1, 255, 82, 44, 3, 255, 86, 43, 2, 255, 85, 42, 2, 255, 85, 44, 1, 255, 86, 43, 0, 255, 91, 47, 5, 255, 95, 50, 7, 255, 93, 47, 3, 255, 92, 49, 4, 255, 88, 45, 1, 255, 92, 47, 4, 255, 95, 48, 3, 255, 96, 48, 3, 255, 92, 47, 3, 255, 89, 45, 3, 255, 83, 46, 2, 255, 81, 48, 5, 255, 78, 46, 3, 255, 85, 44, 2, 255, 91, 45, 4, 255, 93, 46, 4, 255, 91, 47, 4, 255, 88, 44, 0, 255, 93, 48, 2, 255, 96, 48, 2, 255, 94, 47, 2, 255, 91, 46, 2, 255, 92, 48, 3, 255, 95, 53, 4, 255, 92, 53, 4, 255, 91, 50, 4, 255, 93, 45, 1, 255, 93, 48, 2, 255, 93, 52, 2, 255, 95, 54, 3, 255, 97, 50, 1, 255, 101, 53, 2, 255, 100, 52, 4, 255, 95, 47, 5, 255, 99, 49, 5, 255, 103, 51, 4, 255, 100, 52, 0, 255, 96, 54, 4, 255, 98, 52, 6, 255, 95, 49, 1, 255, 96, 55, 5, 255, 93, 51, 3, 255, 96, 52, 8, 255, 94, 50, 6, 255, 95, 49, 4, 255, 92, 45, 4, 255, 102, 52, 5, 255, 111, 59, 10, 255, 100, 46, 3, 255, 107, 54, 7, 255, 103, 55, 3, 255, 95, 44, 8, 255, 102, 50, 10, 255, 103, 50, 9, 255, 95, 47, 4, 255, 87, 46, 6, 255, 88, 50, 5, 255, 98, 57, 4, 255, 88, 46, 8, 255, 91, 49, 6, 255, 105, 58, 4, 255, 96, 49, 7, 255, 120, 67, 6, 255, 108, 57, 8, 255, 91, 48, 5, 255, 89, 45, 7, 255, 91, 47, 7, 255, 109, 64, 12, 255, 97, 52, 11, 255, 104, 62, 14, 255, 99, 59, 2, 255, 92, 54, 5, 255, 81, 54, 9, 255, 75, 52, 13, 255, 86, 53, 9, 255, 87, 51, 9, 255, 81, 56, 4, 255, 86, 62, 8, 255, 103, 60, 12, 255, 94, 56, 11, 255, 81, 50, 16, 255, 87, 54, 18, 255, 82, 57, 5, 255, 79, 57, 5, 255, 94, 59, 19, 255, 88, 58, 16, 255, 87, 54, 12, 255, 86, 62, 7, 255, 83, 62, 13, 255, 83, 60, 10, 255, 83, 62, 8, 255, 80, 67, 8, 255, 81, 63, 12, 255, 83, 63, 10, 255, 89, 67, 8, 255, 83, 64, 6, 255, 93, 64, 17, 255, 98, 66, 26, 255, 98, 68, 6, 255, 100, 73, 10, 255, 102, 72, 15, 255, 109, 77, 16, 255, 106, 75, 17, 255, 97, 71, 17, 255, 99, 74, 13, 255, 101, 74, 12, 255, 103, 76, 8, 255, 102, 74, 14, 255, 103, 77, 12, 255, 105, 74, 19, 255, 111, 77, 20, 255, 112, 79, 9, 255, 109, 80, 9, 255, 113, 82, 12, 255, 119, 82, 12, 255, 120, 81, 6, 255, 116, 79, 16, 255, 115, 82, 11, 255, 116, 81, 6, 255, 120, 79, 11, 255, 121, 77, 14, 255, 124, 82, 12, 255, 134, 84, 20, 255, 144, 87, 12, 255, 147, 89, 11, 255, 149, 92, 11, 255, 154, 93, 11, 255, 157, 90, 12, 255, 158, 91, 12, 255, 155, 93, 10, 255, 162, 89, 10, 255, 164, 92, 11, 255, 158, 92, 13, 255, 152, 87, 7, 255, 151, 90, 14, 255, 161, 97, 19, 255, 159, 92, 5, 255, 162, 95, 11, 255, 167, 104, 8, 255, 165, 101, 6, 255, 174, 103, 5, 255, 176, 105, 10, 255, 178, 108, 6, 255, 176, 105, 6, 255, 175, 101, 6, 255, 167, 93, 4, 255, 161, 90, 9, 255, 144, 88, 14, 255, 144, 84, 10, 255, 147, 85, 7, 255, 141, 86, 11, 255, 133, 82, 9, 255, 138, 82, 7, 255, 138, 82, 5, 255, 138, 86, 4, 255, 140, 90, 11, 255, 148, 97, 6, 255, 164, 110, 8, 255, 172, 116, 4, 255, 175, 118, 7, 255, 177, 132, 8, 255, 194, 152, 4, 255, 193, 154, 8, 255, 193, 153, 15, 255, 197, 151, 5, 255, 188, 136, 8, 255, 176, 121, 2, 255, 186, 138, 4, 255, 185, 133, 5, 255, 170, 111, 7, 255, 184, 132, 8, 255, 193, 143, 9, 255, 201, 151, 4, 255, 198, 152, 5, 255, 200, 154, 8, 255, 201, 154, 11, 255, 198, 149, 9, 255, 197, 144, 9, 255, 195, 140, 3, 255, 194, 137, 4, 255, 188, 130, 2, 255, 190, 132, 5, 255, 192, 133, 9, 255, 189, 128, 6, 255, 187, 126, 5, 255, 187, 126, 6, 255, 184, 122, 7, 255, 181, 119, 3, 255, 178, 115, 4, 255, 176, 110, 6, 255, 175, 106, 6, 255, 173, 103, 4, 255, 167, 98, 3, 255, 164, 98, 3, 255, 163, 98, 3, 255, 162, 93, 2, 255, 163, 91, 5, 255, 158, 85, 5, 255, 155, 83, 5, 255, 157, 84, 7, 255, 154, 82, 4, 255, 149, 81, 2, 255, 146, 79, 1, 255, 152, 80, 6, 255, 154, 76, 7, 255, 151, 78, 2, 255, 149, 76, 0, 255, 148, 72, 1, 255, 146, 70, 0, 255, 143, 67, 4, 255, 137, 65, 3, 255, 127, 54, 1, 255, 122, 55, 1, 255, 117, 51, 5, 255, 113, 42, 6, 255, 111, 37, 4, 255, 108, 37, 4, 255, 100, 33, 3, 255, 98, 34, 2, 255, 99, 35, 0, 255, 89, 30, 3, 255, 72, 26, 3, 255, 86, 31, 3, 255, 99, 33, 3, 255, 103, 34, 2, 255, 103, 40, 5, 255, 90, 33, 3, 255, 67, 22, 2, 255, 58, 22, 5, 255, 60, 25, 5, 255, 65, 22, 3, 255, 69, 24, 3, 255, 69, 27, 2, 255, 75, 27, 4, 255, 82, 26, 5, 255, 84, 25, 2, 255, 93, 31, 3, 255, 88, 28, 1, 255, 84, 27, 5, 255, 86, 24, 2, 255, 81, 21, 3, 255, 66, 16, 4, 255, 50, 17, 0, 255, 45, 18, 3, 255, 55, 16, 4, 255, 67, 24, 2, 255, 81, 33, 5, 255, 75, 26, 2, 255, 79, 25, 1, 255, 98, 30, 5, 255, 89, 27, 1, 255, 92, 33, 2, 255, 95, 31, 5, 255, 86, 33, 4, 255, 83, 28, 0, 255, 69, 16, 3, 255, 68, 18, 4, 255, 62, 15, 3, 255, 48, 15, 2, 255, 47, 13, 4, 255, 56, 11, 5, 255, 55, 14, 5, 255, 64, 18, 5, 255, 65, 18, 0, 255, 66, 20, 4, 255, 61, 18, 3, 255, 48, 11, 2, 255, 51, 14, 6, 255, 48, 18, 1, 255, 50, 19, 2, 255, 54, 14, 2, 255, 61, 15, 3, 255, 55, 16, 2, 255, 58, 19, 3, 255, 60, 16, 1, 255, 55, 14, 0, 255, 55, 16, 2, 255, 50, 15, 4, 255, 52, 19, 1, 255, 63, 18, 2, 255, 76, 21, 1, 255, 77, 18, 2, 255, 81, 24, 5, 255, 82, 25, 3, 255, 79, 26, 2, 255, 75, 25, 1, 255, 75, 20, 1, 255, 76, 17, 2, 255, 61, 12, 5, 255, 75, 28, 1, 255, 103, 47, 0, 255, 125, 54, 4, 255, 126, 47, 3, 255, 114, 38, 2, 255, 118, 39, 4, 255, 129, 48, 3, 255, 129, 50, 0, 255, 126, 45, 1, 255, 123, 43, 2, 255, 120, 42, 0, 255, 117, 40, 1, 255, 112, 36, 3, 255, 103, 32, 2, 255, 97, 30, 4, 255, 11, 8, 4, 255, 13, 10, 4, 255, 12, 8, 2, 255, 12, 8, 4, 255, 14, 10, 3, 255, 15, 11, 1, 255, 14, 15, 2, 255, 20, 18, 8, 255, 21, 17, 7, 255, 20, 23, 2, 255, 24, 23, 6, 255, 22, 20, 4, 255, 25, 28, 8, 255, 35, 32, 6, 255, 33, 32, 2, 255, 34, 32, 12, 255, 37, 37, 10, 255, 39, 44, 5, 255, 41, 48, 4, 255, 44, 45, 10, 255, 43, 45, 7, 255, 67, 68, 10, 255, 105, 99, 17, 255, 48, 42, 5, 255, 42, 48, 8, 255, 53, 57, 4, 255, 55, 52, 13, 255, 49, 49, 33, 255, 53, 51, 20, 255, 49, 50, 12, 255, 59, 51, 38, 255, 56, 50, 25, 255, 49, 49, 14, 255, 53, 46, 3, 255, 50, 42, 12, 255, 41, 41, 9, 255, 47, 44, 5, 255, 57, 41, 5, 255, 49, 27, 5, 255, 42, 30, 2, 255, 44, 33, 6, 255, 53, 38, 6, 255, 69, 53, 22, 255, 67, 57, 37, 255, 53, 52, 41, 255, 66, 66, 52, 255, 61, 62, 42, 255, 61, 60, 48, 255, 66, 61, 58, 255, 63, 60, 40, 255, 67, 61, 45, 255, 69, 61, 50, 255, 70, 52, 37, 255, 76, 49, 33, 255, 64, 48, 8, 255, 51, 48, 24, 255, 62, 55, 29, 255, 72, 50, 10, 255, 61, 32, 1, 255, 59, 29, 1, 255, 63, 44, 4, 255, 63, 51, 9, 255, 69, 46, 9, 255, 72, 32, 6, 255, 61, 26, 1, 255, 64, 25, 3, 255, 65, 31, 4, 255, 62, 30, 2, 255, 65, 29, 2, 255, 64, 31, 3, 255, 63, 35, 4, 255, 66, 33, 4, 255, 71, 31, 3, 255, 72, 32, 3, 255, 67, 33, 2, 255, 70, 33, 2, 255, 71, 34, 2, 255, 74, 37, 3, 255, 73, 33, 1, 255, 67, 33, 1, 255, 70, 38, 2, 255, 74, 39, 2, 255, 75, 40, 0, 255, 68, 41, 3, 255, 68, 37, 2, 255, 76, 39, 2, 255, 81, 42, 5, 255, 78, 42, 3, 255, 79, 41, 1, 255, 83, 41, 3, 255, 79, 37, 2, 255, 79, 43, 2, 255, 79, 44, 1, 255, 84, 46, 2, 255, 86, 47, 4, 255, 81, 43, 1, 255, 80, 41, 1, 255, 78, 44, 1, 255, 79, 46, 1, 255, 86, 48, 5, 255, 89, 45, 1, 255, 89, 45, 0, 255, 90, 48, 1, 255, 96, 51, 6, 255, 97, 47, 4, 255, 90, 47, 2, 255, 85, 46, 1, 255, 94, 52, 2, 255, 98, 51, 2, 255, 95, 46, 2, 255, 90, 47, 3, 255, 90, 49, 3, 255, 91, 49, 2, 255, 88, 47, 0, 255, 86, 48, 3, 255, 92, 49, 6, 255, 91, 49, 6, 255, 84, 49, 6, 255, 93, 46, 4, 255, 99, 48, 4, 255, 90, 49, 3, 255, 88, 49, 4, 255, 92, 49, 4, 255, 95, 48, 2, 255, 96, 48, 2, 255, 101, 53, 3, 255, 101, 53, 5, 255, 98, 49, 1, 255, 97, 50, 4, 255, 98, 46, 4, 255, 101, 48, 5, 255, 105, 52, 6, 255, 100, 53, 2, 255, 97, 55, 2, 255, 98, 57, 2, 255, 97, 54, 1, 255, 97, 52, 3, 255, 102, 55, 3, 255, 100, 52, 4, 255, 99, 53, 6, 255, 98, 55, 2, 255, 94, 53, 5, 255, 94, 51, 3, 255, 90, 56, 1, 255, 86, 50, 5, 255, 92, 49, 4, 255, 90, 48, 3, 255, 87, 46, 7, 255, 96, 56, 2, 255, 88, 47, 6, 255, 84, 49, 2, 255, 85, 52, 8, 255, 84, 49, 5, 255, 105, 63, 7, 255, 93, 49, 2, 255, 87, 52, 0, 255, 99, 54, 4, 255, 91, 52, 11, 255, 106, 58, 10, 255, 101, 54, 10, 255, 91, 50, 5, 255, 87, 49, 4, 255, 77, 49, 2, 255, 106, 59, 17, 255, 96, 52, 12, 255, 86, 52, 11, 255, 79, 53, 10, 255, 79, 53, 4, 255, 87, 55, 7, 255, 87, 50, 10, 255, 87, 54, 10, 255, 80, 55, 5, 255, 76, 55, 5, 255, 81, 57, 7, 255, 85, 54, 9, 255, 82, 53, 12, 255, 79, 53, 11, 255, 82, 57, 9, 255, 79, 62, 5, 255, 78, 58, 12, 255, 84, 55, 15, 255, 89, 57, 8, 255, 87, 58, 19, 255, 81, 59, 13, 255, 82, 62, 11, 255, 79, 61, 5, 255, 83, 61, 11, 255, 90, 59, 16, 255, 88, 59, 12, 255, 87, 63, 15, 255, 91, 64, 9, 255, 100, 64, 16, 255, 97, 68, 12, 255, 99, 69, 15, 255, 100, 67, 26, 255, 102, 71, 11, 255, 105, 74, 8, 255, 101, 69, 15, 255, 103, 70, 21, 255, 102, 72, 13, 255, 102, 73, 7, 255, 101, 72, 14, 255, 105, 74, 10, 255, 111, 76, 11, 255, 114, 76, 11, 255, 122, 80, 11, 255, 122, 81, 9, 255, 128, 82, 10, 255, 128, 84, 8, 255, 122, 81, 13, 255, 129, 83, 12, 255, 131, 86, 13, 255, 129, 83, 19, 255, 132, 82, 14, 255, 137, 85, 16, 255, 141, 89, 9, 255, 139, 88, 22, 255, 146, 86, 22, 255, 161, 90, 15, 255, 166, 94, 13, 255, 171, 98, 7, 255, 176, 98, 13, 255, 174, 94, 16, 255, 173, 92, 9, 255, 168, 91, 19, 255, 167, 90, 18, 255, 168, 91, 8, 255, 168, 91, 3, 255, 165, 92, 7, 255, 154, 89, 10, 255, 168, 97, 16, 255, 181, 109, 11, 255, 176, 106, 8, 255, 172, 98, 13, 255, 174, 98, 11, 255, 177, 102, 7, 255, 174, 102, 3, 255, 174, 102, 7, 255, 179, 100, 13, 255, 176, 99, 6, 255, 170, 96, 2, 255, 160, 90, 7, 255, 160, 88, 10, 255, 163, 92, 3, 255, 149, 84, 10, 255, 143, 78, 19, 255, 155, 86, 7, 255, 153, 85, 1, 255, 137, 80, 7, 255, 134, 78, 10, 255, 139, 79, 10, 255, 136, 87, 6, 255, 143, 91, 7, 255, 148, 93, 13, 255, 158, 105, 6, 255, 176, 119, 12, 255, 172, 127, 12, 255, 189, 148, 13, 255, 195, 151, 2, 255, 200, 151, 13, 255, 199, 149, 15, 255, 187, 140, 2, 255, 183, 130, 8, 255, 190, 134, 5, 255, 184, 122, 7, 255, 151, 86, 6, 255, 165, 105, 6, 255, 194, 146, 11, 255, 193, 147, 8, 255, 199, 144, 7, 255, 200, 148, 6, 255, 199, 148, 2, 255, 196, 145, 0, 255, 193, 139, 2, 255, 192, 136, 5, 255, 192, 133, 3, 255, 193, 135, 10, 255, 190, 137, 6, 255, 188, 132, 4, 255, 187, 127, 7, 255, 187, 127, 5, 255, 188, 129, 7, 255, 183, 124, 5, 255, 181, 118, 5, 255, 181, 117, 7, 255, 179, 113, 3, 255, 173, 106, 0, 255, 171, 104, 2, 255, 169, 99, 4, 255, 166, 96, 10, 255, 162, 94, 13, 255, 161, 93, 7, 255, 161, 90, 2, 255, 162, 88, 2, 255, 158, 86, 3, 255, 156, 81, 3, 255, 157, 80, 3, 255, 153, 79, 1, 255, 150, 81, 2, 255, 150, 78, 3, 255, 153, 76, 5, 255, 152, 74, 4, 255, 143, 71, 2, 255, 135, 67, 0, 255, 136, 65, 2, 255, 136, 62, 4, 255, 137, 61, 5, 255, 135, 63, 4, 255, 129, 56, 2, 255, 123, 49, 1, 255, 115, 46, 1, 255, 105, 42, 0, 255, 105, 42, 4, 255, 101, 37, 2, 255, 93, 37, 1, 255, 93, 38, 3, 255, 91, 33, 3, 255, 75, 30, 1, 255, 85, 31, 2, 255, 103, 33, 4, 255, 104, 34, 1, 255, 85, 29, 4, 255, 62, 25, 4, 255, 52, 24, 2, 255, 64, 22, 2, 255, 73, 25, 4, 255, 59, 24, 3, 255, 62, 26, 6, 255, 67, 29, 3, 255, 77, 28, 0, 255, 87, 27, 2, 255, 82, 25, 4, 255, 89, 24, 3, 255, 87, 25, 4, 255, 70, 24, 2, 255, 66, 21, 4, 255, 59, 15, 2, 255, 55, 17, 3, 255, 60, 21, 4, 255, 58, 19, 1, 255, 43, 16, 2, 255, 47, 17, 5, 255, 76, 19, 5, 255, 83, 26, 3, 255, 66, 23, 1, 255, 77, 21, 6, 255, 81, 21, 2, 255, 76, 26, 1, 255, 83, 27, 4, 255, 79, 25, 4, 255, 62, 20, 3, 255, 52, 18, 4, 255, 63, 18, 5, 255, 58, 17, 4, 255, 47, 18, 0, 255, 40, 12, 4, 255, 40, 9, 5, 255, 35, 11, 4, 255, 23, 11, 1, 255, 22, 9, 2, 255, 38, 14, 5, 255, 49, 18, 2, 255, 46, 13, 1, 255, 42, 11, 4, 255, 41, 16, 1, 255, 40, 16, 3, 255, 43, 14, 5, 255, 53, 14, 6, 255, 50, 17, 0, 255, 65, 19, 3, 255, 65, 17, 3, 255, 46, 15, 0, 255, 42, 11, 3, 255, 45, 17, 4, 255, 60, 20, 1, 255, 78, 20, 4, 255, 79, 21, 5, 255, 77, 18, 3, 255, 78, 18, 4, 255, 83, 24, 2, 255, 77, 21, 0, 255, 74, 21, 2, 255, 68, 16, 1, 255, 68, 20, 3, 255, 82, 33, 4, 255, 118, 56, 3, 255, 141, 63, 3, 255, 130, 50, 5, 255, 116, 39, 5, 255, 115, 35, 5, 255, 124, 41, 3, 255, 129, 50, 4, 255, 126, 51, 3, 255, 124, 46, 1, 255, 124, 44, 0, 255, 123, 43, 1, 255, 122, 42, 3, 255, 123, 40, 3, 255, 110, 31, 2, 255, 97, 23, 3, 255, 8, 9, 3, 255, 10, 9, 3, 255, 14, 12, 4, 255, 11, 10, 3, 255, 15, 13, 4, 255, 18, 16, 4, 255, 16, 18, 1, 255, 24, 22, 7, 255, 24, 21, 6, 255, 18, 19, 0, 255, 29, 26, 6, 255, 32, 28, 9, 255, 30, 31, 6, 255, 38, 36, 8, 255, 36, 38, 7, 255, 35, 41, 10, 255, 34, 42, 12, 255, 35, 47, 5, 255, 37, 51, 9, 255, 42, 48, 12, 255, 45, 47, 14, 255, 44, 47, 16, 255, 41, 50, 9, 255, 59, 58, 8, 255, 52, 54, 6, 255, 42, 51, 6, 255, 53, 49, 5, 255, 51, 47, 17, 255, 50, 47, 9, 255, 52, 53, 6, 255, 54, 55, 18, 255, 53, 53, 21, 255, 46, 45, 10, 255, 45, 49, 9, 255, 51, 42, 12, 255, 45, 39, 10, 255, 43, 36, 10, 255, 55, 34, 5, 255, 47, 28, 6, 255, 41, 28, 6, 255, 42, 32, 6, 255, 43, 35, 7, 255, 50, 44, 18, 255, 53, 50, 32, 255, 51, 50, 43, 255, 57, 57, 54, 255, 59, 57, 48, 255, 66, 62, 48, 255, 65, 60, 48, 255, 59, 57, 43, 255, 56, 60, 38, 255, 59, 59, 43, 255, 70, 51, 23, 255, 61, 53, 18, 255, 49, 51, 12, 255, 52, 47, 20, 255, 61, 52, 38, 255, 61, 49, 22, 255, 60, 38, 9, 255, 61, 34, 2, 255, 56, 35, 3, 255, 57, 48, 14, 255, 64, 46, 9, 255, 74, 36, 7, 255, 55, 29, 4, 255, 61, 28, 6, 255, 62, 31, 3, 255, 62, 29, 3, 255, 68, 28, 3, 255, 69, 30, 5, 255, 67, 30, 2, 255, 71, 32, 1, 255, 80, 36, 7, 255, 73, 34, 2, 255, 66, 35, 3, 255, 68, 38, 4, 255, 72, 41, 6, 255, 68, 38, 2, 255, 71, 36, 2, 255, 72, 39, 6, 255, 73, 40, 4, 255, 75, 36, 0, 255, 78, 41, 4, 255, 71, 39, 3, 255, 73, 38, 3, 255, 77, 38, 2, 255, 77, 40, 2, 255, 78, 42, 3, 255, 79, 39, 0, 255, 85, 41, 3, 255, 83, 37, 4, 255, 83, 42, 5, 255, 83, 41, 4, 255, 85, 40, 3, 255, 86, 41, 4, 255, 84, 39, 4, 255, 86, 41, 7, 255, 80, 41, 3, 255, 81, 43, 4, 255, 88, 45, 6, 255, 92, 44, 5, 255, 88, 40, 2, 255, 85, 45, 1, 255, 85, 46, 1, 255, 86, 43, 1, 255, 85, 45, 2, 255, 90, 51, 7, 255, 94, 49, 5, 255, 96, 48, 1, 255, 96, 49, 3, 255, 90, 45, 2, 255, 90, 47, 5, 255, 94, 49, 5, 255, 91, 48, 2, 255, 88, 48, 2, 255, 91, 53, 2, 255, 93, 50, 4, 255, 86, 48, 3, 255, 91, 49, 3, 255, 91, 48, 1, 255, 90, 50, 0, 255, 90, 49, 2, 255, 91, 50, 5, 255, 93, 48, 2, 255, 96, 50, 4, 255, 94, 51, 2, 255, 95, 51, 2, 255, 96, 50, 2, 255, 100, 52, 3, 255, 95, 48, 2, 255, 90, 52, 4, 255, 88, 54, 2, 255, 96, 56, 4, 255, 98, 52, 3, 255, 95, 51, 1, 255, 98, 54, 5, 255, 98, 51, 4, 255, 100, 54, 1, 255, 100, 55, 4, 255, 96, 53, 3, 255, 97, 57, 3, 255, 100, 54, 7, 255, 97, 54, 6, 255, 97, 56, 5, 255, 94, 52, 8, 255, 93, 51, 5, 255, 91, 50, 0, 255, 93, 47, 4, 255, 95, 47, 3, 255, 94, 52, 2, 255, 85, 50, 4, 255, 84, 47, 4, 255, 91, 54, 3, 255, 94, 53, 8, 255, 92, 48, 12, 255, 92, 52, 10, 255, 96, 52, 7, 255, 82, 51, 5, 255, 89, 57, 0, 255, 91, 54, 1, 255, 83, 51, 6, 255, 81, 53, 8, 255, 71, 55, 5, 255, 81, 51, 10, 255, 83, 51, 2, 255, 87, 51, 7, 255, 85, 50, 4, 255, 85, 51, 2, 255, 84, 50, 2, 255, 84, 50, 6, 255, 86, 53, 7, 255, 87, 54, 6, 255, 86, 55, 7, 255, 86, 61, 11, 255, 82, 51, 10, 255, 79, 53, 11, 255, 82, 58, 8, 255, 86, 57, 8, 255, 84, 56, 10, 255, 87, 55, 20, 255, 90, 57, 14, 255, 86, 59, 7, 255, 77, 54, 17, 255, 78, 58, 9, 255, 86, 64, 6, 255, 87, 63, 6, 255, 83, 61, 10, 255, 83, 61, 12, 255, 85, 63, 13, 255, 90, 66, 14, 255, 96, 67, 17, 255, 101, 65, 26, 255, 105, 70, 11, 255, 99, 71, 7, 255, 99, 73, 11, 255, 102, 67, 22, 255, 106, 66, 15, 255, 108, 70, 11, 255, 109, 73, 13, 255, 113, 76, 12, 255, 114, 76, 7, 255, 118, 74, 18, 255, 124, 78, 17, 255, 127, 78, 17, 255, 131, 79, 23, 255, 146, 83, 14, 255, 152, 89, 9, 255, 155, 90, 21, 255, 151, 89, 14, 255, 151, 86, 12, 255, 158, 93, 12, 255, 153, 90, 13, 255, 147, 82, 13, 255, 155, 89, 8, 255, 160, 92, 9, 255, 160, 90, 11, 255, 162, 90, 13, 255, 171, 99, 12, 255, 170, 96, 5, 255, 172, 96, 10, 255, 174, 97, 9, 255, 174, 98, 11, 255, 175, 97, 16, 255, 172, 96, 9, 255, 170, 97, 8, 255, 171, 91, 11, 255, 179, 98, 11, 255, 179, 100, 20, 255, 172, 99, 6, 255, 179, 103, 21, 255, 199, 112, 12, 255, 202, 113, 8, 255, 190, 110, 6, 255, 180, 104, 4, 255, 179, 100, 13, 255, 179, 99, 16, 255, 178, 100, 6, 255, 180, 98, 4, 255, 177, 94, 7, 255, 170, 89, 6, 255, 165, 89, 5, 255, 161, 93, 10, 255, 151, 90, 7, 255, 160, 86, 7, 255, 149, 86, 7, 255, 136, 80, 12, 255, 142, 80, 10, 255, 141, 82, 7, 255, 124, 73, 9, 255, 108, 69, 8, 255, 95, 65, 8, 255, 116, 83, 5, 255, 135, 86, 7, 255, 137, 84, 6, 255, 137, 91, 5, 255, 157, 110, 17, 255, 168, 122, 8, 255, 187, 144, 11, 255, 192, 148, 8, 255, 195, 149, 7, 255, 195, 148, 12, 255, 180, 133, 5, 255, 186, 136, 13, 255, 186, 129, 10, 255, 170, 115, 6, 255, 150, 102, 5, 255, 158, 99, 8, 255, 191, 131, 8, 255, 195, 146, 7, 255, 192, 143, 7, 255, 194, 144, 6, 255, 196, 145, 5, 255, 196, 143, 5, 255, 189, 132, 5, 255, 187, 126, 7, 255, 186, 127, 2, 255, 191, 137, 3, 255, 185, 130, 3, 255, 192, 134, 6, 255, 192, 132, 1, 255, 184, 121, 2, 255, 184, 123, 6, 255, 182, 123, 2, 255, 182, 119, 4, 255, 179, 116, 5, 255, 179, 112, 4, 255, 175, 108, 2, 255, 173, 105, 4, 255, 169, 100, 5, 255, 163, 97, 1, 255, 163, 98, 3, 255, 162, 96, 5, 255, 158, 90, 4, 255, 159, 88, 4, 255, 158, 86, 4, 255, 155, 85, 4, 255, 153, 82, 5, 255, 150, 79, 2, 255, 155, 83, 6, 255, 152, 80, 6, 255, 141, 70, 1, 255, 140, 67, 7, 255, 135, 62, 4, 255, 132, 61, 1, 255, 138, 68, 1, 255, 144, 69, 4, 255, 141, 64, 5, 255, 139, 62, 4, 255, 136, 61, 3, 255, 128, 55, 3, 255, 121, 50, 1, 255, 113, 45, 2, 255, 107, 44, 2, 255, 103, 41, 4, 255, 100, 37, 7, 255, 96, 33, 1, 255, 95, 35, 5, 255, 80, 33, 3, 255, 81, 31, 1, 255, 92, 34, 3, 255, 86, 31, 5, 255, 71, 23, 1, 255, 74, 25, 6, 255, 74, 29, 2, 255, 71, 23, 5, 255, 68, 21, 5, 255, 62, 24, 3, 255, 69, 22, 4, 255, 71, 26, 3, 255, 70, 26, 5, 255, 80, 28, 6, 255, 74, 24, 1, 255, 66, 20, 1, 255, 64, 20, 0, 255, 64, 22, 2, 255, 65, 23, 4, 255, 56, 18, 2, 255, 55, 19, 0, 255, 68, 23, 3, 255, 78, 21, 4, 255, 68, 24, 9, 255, 46, 18, 2, 255, 55, 20, 3, 255, 59, 19, 1, 255, 56, 19, 3, 255, 57, 14, 4, 255, 52, 17, 5, 255, 48, 21, 3, 255, 56, 17, 3, 255, 54, 13, 3, 255, 46, 16, 6, 255, 38, 16, 7, 255, 40, 15, 7, 255, 45, 16, 5, 255, 46, 14, 3, 255, 34, 13, 2, 255, 18, 12, 1, 255, 21, 13, 5, 255, 20, 9, 4, 255, 22, 9, 2, 255, 36, 17, 3, 255, 42, 21, 0, 255, 46, 16, 0, 255, 51, 14, 4, 255, 50, 17, 5, 255, 48, 17, 4, 255, 53, 16, 0, 255, 56, 20, 0, 255, 56, 20, 4, 255, 53, 20, 6, 255, 48, 20, 2, 255, 41, 14, 7, 255, 39, 13, 4, 255, 46, 16, 5, 255, 51, 15, 4, 255, 53, 15, 1, 255, 61, 18, 1, 255, 73, 22, 2, 255, 75, 21, 2, 255, 75, 20, 3, 255, 72, 17, 3, 255, 61, 13, 4, 255, 67, 20, 3, 255, 100, 40, 5, 255, 122, 59, 6, 255, 137, 61, 3, 255, 146, 64, 2, 255, 137, 58, 3, 255, 123, 46, 0, 255, 129, 51, 0, 255, 136, 58, 1, 255, 140, 61, 3, 255, 139, 61, 5, 255, 135, 54, 3, 255, 132, 48, 4, 255, 128, 44, 5, 255, 120, 40, 4, 255, 105, 38, 2, 255, 94, 28, 0, 255, 89, 27, 0, 255, 6, 7, 2, 255, 6, 7, 0, 255, 12, 12, 2, 255, 15, 13, 4, 255, 18, 14, 5, 255, 20, 16, 3, 255, 20, 19, 3, 255, 24, 22, 8, 255, 27, 24, 10, 255, 23, 22, 2, 255, 29, 27, 7, 255, 33, 31, 10, 255, 34, 37, 6, 255, 35, 39, 6, 255, 36, 40, 15, 255, 33, 44, 9, 255, 41, 54, 11, 255, 36, 52, 2, 255, 38, 51, 14, 255, 43, 56, 13, 255, 43, 54, 4, 255, 58, 56, 8, 255, 55, 59, 4, 255, 48, 55, 11, 255, 50, 49, 4, 255, 55, 55, 9, 255, 47, 52, 5, 255, 49, 47, 3, 255, 47, 45, 5, 255, 50, 45, 1, 255, 58, 54, 12, 255, 55, 52, 20, 255, 53, 47, 11, 255, 46, 37, 13, 255, 42, 38, 14, 255, 47, 38, 9, 255, 43, 32, 11, 255, 45, 35, 7, 255, 43, 28, 8, 255, 49, 28, 8, 255, 50, 30, 3, 255, 46, 30, 2, 255, 49, 37, 16, 255, 56, 45, 30, 255, 57, 48, 35, 255, 61, 60, 43, 255, 58, 56, 49, 255, 63, 64, 44, 255, 61, 65, 36, 255, 60, 58, 50, 255, 56, 55, 38, 255, 55, 57, 33, 255, 67, 51, 24, 255, 58, 54, 33, 255, 48, 53, 41, 255, 56, 48, 25, 255, 62, 53, 35, 255, 59, 54, 20, 255, 58, 48, 8, 255, 58, 34, 1, 255, 55, 31, 4, 255, 66, 49, 15, 255, 63, 54, 5, 255, 52, 38, 3, 255, 55, 30, 4, 255, 63, 26, 3, 255, 62, 23, 0, 255, 71, 32, 5, 255, 67, 29, 2, 255, 57, 26, 2, 255, 57, 29, 2, 255, 62, 30, 1, 255, 68, 32, 4, 255, 66, 30, 1, 255, 67, 34, 3, 255, 66, 33, 4, 255, 66, 32, 3, 255, 71, 37, 1, 255, 75, 35, 2, 255, 75, 37, 3, 255, 78, 37, 4, 255, 81, 35, 2, 255, 78, 37, 2, 255, 73, 38, 3, 255, 73, 35, 1, 255, 78, 39, 4, 255, 75, 39, 1, 255, 75, 42, 1, 255, 83, 43, 4, 255, 84, 41, 3, 255, 84, 39, 1, 255, 85, 42, 3, 255, 84, 40, 1, 255, 83, 39, 1, 255, 84, 39, 1, 255, 86, 40, 1, 255, 89, 43, 4, 255, 84, 42, 1, 255, 85, 42, 1, 255, 90, 43, 3, 255, 92, 42, 2, 255, 91, 45, 3, 255, 90, 44, 1, 255, 95, 43, 3, 255, 91, 44, 3, 255, 85, 45, 2, 255, 83, 49, 4, 255, 82, 48, 2, 255, 85, 49, 3, 255, 86, 48, 0, 255, 86, 48, 2, 255, 87, 46, 3, 255, 89, 45, 2, 255, 90, 46, 1, 255, 91, 44, 0, 255, 92, 51, 1, 255, 93, 50, 2, 255, 89, 51, 3, 255, 94, 54, 7, 255, 89, 50, 2, 255, 92, 53, 3, 255, 91, 49, 1, 255, 91, 52, 5, 255, 93, 51, 3, 255, 94, 52, 4, 255, 91, 51, 2, 255, 93, 52, 2, 255, 96, 52, 2, 255, 96, 53, 3, 255, 92, 55, 3, 255, 91, 51, 1, 255, 96, 53, 3, 255, 93, 54, 4, 255, 93, 52, 5, 255, 92, 53, 4, 255, 94, 56, 5, 255, 97, 56, 5, 255, 98, 54, 2, 255, 101, 54, 4, 255, 98, 53, 4, 255, 98, 53, 4, 255, 98, 54, 5, 255, 96, 55, 5, 255, 99, 53, 5, 255, 98, 52, 6, 255, 92, 51, 1, 255, 98, 55, 4, 255, 100, 54, 8, 255, 93, 48, 9, 255, 96, 51, 2, 255, 95, 49, 8, 255, 85, 47, 3, 255, 88, 54, 11, 255, 96, 52, 1, 255, 96, 51, 6, 255, 90, 53, 7, 255, 96, 48, 8, 255, 84, 47, 6, 255, 88, 50, 3, 255, 81, 52, 8, 255, 83, 55, 7, 255, 81, 51, 5, 255, 88, 51, 6, 255, 87, 54, 3, 255, 87, 51, 12, 255, 87, 47, 10, 255, 80, 48, 7, 255, 82, 52, 16, 255, 81, 51, 15, 255, 81, 54, 5, 255, 79, 51, 6, 255, 85, 55, 11, 255, 88, 58, 7, 255, 83, 52, 14, 255, 87, 54, 16, 255, 81, 55, 11, 255, 82, 58, 5, 255, 89, 55, 9, 255, 92, 56, 21, 255, 101, 57, 19, 255, 99, 56, 13, 255, 91, 59, 9, 255, 80, 58, 10, 255, 81, 63, 10, 255, 83, 64, 4, 255, 91, 62, 8, 255, 97, 63, 17, 255, 86, 64, 12, 255, 90, 67, 15, 255, 97, 65, 12, 255, 101, 67, 12, 255, 99, 69, 15, 255, 106, 68, 13, 255, 106, 65, 19, 255, 109, 74, 9, 255, 109, 74, 12, 255, 113, 73, 13, 255, 125, 78, 5, 255, 124, 77, 8, 255, 130, 82, 19, 255, 137, 84, 15, 255, 142, 82, 13, 255, 144, 82, 10, 255, 143, 80, 10, 255, 150, 86, 9, 255, 164, 86, 11, 255, 173, 92, 15, 255, 171, 97, 14, 255, 161, 90, 5, 255, 167, 95, 8, 255, 164, 93, 18, 255, 159, 86, 17, 255, 164, 93, 11, 255, 164, 94, 10, 255, 164, 92, 9, 255, 167, 94, 9, 255, 170, 95, 12, 255, 173, 95, 5, 255, 179, 96, 13, 255, 178, 97, 22, 255, 176, 96, 14, 255, 178, 97, 12, 255, 186, 105, 22, 255, 181, 101, 13, 255, 182, 99, 8, 255, 182, 99, 10, 255, 184, 100, 12, 255, 188, 102, 12, 255, 192, 104, 9, 255, 196, 110, 5, 255, 192, 110, 5, 255, 188, 108, 7, 255, 190, 110, 12, 255, 189, 108, 12, 255, 182, 100, 10, 255, 174, 98, 8, 255, 173, 100, 1, 255, 175, 94, 9, 255, 164, 93, 9, 255, 160, 86, 13, 255, 156, 86, 15, 255, 159, 85, 7, 255, 157, 86, 10, 255, 148, 82, 3, 255, 139, 84, 3, 255, 140, 87, 7, 255, 131, 79, 7, 255, 98, 65, 5, 255, 83, 67, 6, 255, 84, 72, 2, 255, 93, 71, 4, 255, 103, 71, 5, 255, 100, 71, 7, 255, 113, 75, 11, 255, 125, 78, 1, 255, 130, 88, 6, 255, 167, 124, 10, 255, 181, 135, 6, 255, 187, 143, 14, 255, 194, 150, 3, 255, 195, 147, 3, 255, 195, 147, 4, 255, 198, 154, 1, 255, 178, 123, 7, 255, 181, 131, 13, 255, 184, 145, 11, 255, 175, 122, 7, 255, 167, 103, 2, 255, 188, 136, 5, 255, 191, 146, 4, 255, 190, 143, 7, 255, 194, 142, 12, 255, 196, 140, 15, 255, 188, 128, 5, 255, 184, 123, 0, 255, 189, 132, 3, 255, 189, 136, 3, 255, 188, 129, 11, 255, 186, 124, 8, 255, 188, 125, 0, 255, 183, 117, 1, 255, 184, 121, 3, 255, 185, 124, 2, 255, 183, 120, 4, 255, 180, 115, 4, 255, 176, 111, 4, 255, 173, 107, 3, 255, 170, 103, 4, 255, 167, 102, 3, 255, 165, 101, 0, 255, 163, 99, 0, 255, 161, 96, 1, 255, 159, 93, 4, 255, 157, 89, 3, 255, 156, 84, 1, 255, 152, 83, 1, 255, 150, 83, 4, 255, 151, 82, 3, 255, 155, 81, 5, 255, 151, 77, 4, 255, 141, 72, 0, 255, 140, 71, 2, 255, 141, 71, 4, 255, 141, 71, 4, 255, 141, 70, 0, 255, 140, 67, 1, 255, 137, 61, 3, 255, 137, 62, 1, 255, 135, 65, 3, 255, 129, 59, 3, 255, 129, 55, 4, 255, 124, 47, 3, 255, 113, 42, 1, 255, 101, 37, 1, 255, 100, 34, 4, 255, 95, 29, 1, 255, 97, 35, 6, 255, 85, 35, 5, 255, 76, 29, 1, 255, 78, 31, 2, 255, 81, 29, 3, 255, 70, 23, 4, 255, 83, 27, 3, 255, 82, 25, 1, 255, 72, 27, 8, 255, 60, 25, 7, 255, 64, 22, 2, 255, 77, 29, 1, 255, 74, 26, 1, 255, 76, 24, 6, 255, 72, 22, 3, 255, 70, 24, 1, 255, 69, 20, 2, 255, 63, 20, 3, 255, 67, 21, 2, 255, 69, 21, 3, 255, 68, 23, 5, 255, 69, 23, 5, 255, 76, 18, 1, 255, 80, 21, 1, 255, 84, 24, 3, 255, 73, 23, 3, 255, 54, 19, 1, 255, 49, 18, 2, 255, 53, 18, 3, 255, 51, 17, 1, 255, 47, 19, 2, 255, 53, 18, 3, 255, 52, 13, 2, 255, 46, 16, 1, 255, 45, 20, 4, 255, 49, 17, 4, 255, 46, 17, 6, 255, 41, 14, 0, 255, 43, 12, 5, 255, 41, 14, 4, 255, 27, 12, 1, 255, 24, 13, 1, 255, 29, 14, 3, 255, 29, 13, 6, 255, 36, 15, 6, 255, 44, 14, 1, 255, 44, 16, 3, 255, 43, 19, 6, 255, 47, 18, 6, 255, 50, 12, 5, 255, 54, 20, 3, 255, 58, 19, 3, 255, 48, 11, 2, 255, 42, 18, 8, 255, 42, 17, 5, 255, 47, 14, 3, 255, 48, 20, 2, 255, 55, 16, 1, 255, 54, 15, 6, 255, 54, 19, 6, 255, 58, 18, 1, 255, 65, 19, 3, 255, 79, 23, 3, 255, 76, 18, 2, 255, 71, 20, 7, 255, 71, 20, 4, 255, 101, 38, 4, 255, 135, 60, 8, 255, 141, 62, 2, 255, 139, 59, 3, 255, 145, 60, 3, 255, 145, 63, 5, 255, 137, 62, 5, 255, 137, 60, 1, 255, 143, 63, 0, 255, 147, 67, 3, 255, 146, 64, 4, 255, 135, 51, 1, 255, 129, 44, 3, 255, 122, 38, 4, 255, 110, 32, 1, 255, 100, 32, 4, 255, 99, 31, 4, 255, 101, 34, 6, 255, 10, 9, 1, 255, 14, 13, 3, 255, 15, 13, 3, 255, 18, 15, 6, 255, 16, 12, 1, 255, 19, 15, 3, 255, 27, 24, 4, 255, 24, 24, 1, 255, 24, 26, 1, 255, 29, 32, 3, 255, 29, 34, 6, 255, 26, 34, 5, 255, 32, 39, 5, 255, 33, 40, 9, 255, 38, 48, 12, 255, 38, 49, 10, 255, 41, 54, 7, 255, 44, 54, 10, 255, 46, 54, 10, 255, 49, 59, 7, 255, 55, 54, 2, 255, 49, 54, 2, 255, 42, 59, 6, 255, 38, 53, 5, 255, 46, 53, 8, 255, 46, 48, 2, 255, 45, 48, 6, 255, 44, 42, 3, 255, 44, 40, 4, 255, 44, 37, 4, 255, 53, 47, 19, 255, 51, 44, 22, 255, 50, 41, 15, 255, 48, 38, 10, 255, 42, 37, 10, 255, 46, 33, 13, 255, 45, 31, 12, 255, 45, 37, 10, 255, 35, 33, 8, 255, 42, 33, 7, 255, 48, 33, 2, 255, 43, 28, 0, 255, 39, 28, 8, 255, 48, 40, 24, 255, 53, 47, 30, 255, 60, 58, 38, 255, 61, 60, 35, 255, 56, 57, 42, 255, 61, 59, 47, 255, 67, 62, 52, 255, 64, 57, 43, 255, 62, 57, 35, 255, 60, 53, 34, 255, 65, 53, 41, 255, 63, 56, 43, 255, 66, 56, 30, 255, 63, 50, 33, 255, 59, 56, 19, 255, 67, 50, 9, 255, 60, 38, 6, 255, 65, 40, 0, 255, 65, 42, 3, 255, 75, 50, 12, 255, 67, 39, 3, 255, 64, 26, 0, 255, 73, 31, 7, 255, 70, 32, 7, 255, 63, 30, 0, 255, 67, 31, 1, 255, 66, 31, 6, 255, 68, 34, 6, 255, 73, 37, 6, 255, 73, 34, 1, 255, 73, 33, 0, 255, 75, 32, 1, 255, 78, 32, 2, 255, 77, 31, 1, 255, 72, 35, 0, 255, 74, 35, 1, 255, 70, 33, 0, 255, 73, 34, 0, 255, 76, 35, 0, 255, 69, 35, 0, 255, 69, 35, 1, 255, 77, 38, 5, 255, 75, 36, 3, 255, 72, 37, 1, 255, 75, 42, 4, 255, 78, 39, 2, 255, 82, 39, 1, 255, 81, 39, 0, 255, 82, 40, 2, 255, 84, 42, 2, 255, 84, 42, 2, 255, 86, 43, 3, 255, 89, 44, 4, 255, 86, 42, 0, 255, 87, 45, 1, 255, 88, 46, 2, 255, 90, 44, 2, 255, 94, 47, 5, 255, 90, 47, 4, 255, 89, 44, 0, 255, 96, 50, 7, 255, 91, 46, 4, 255, 90, 47, 4, 255, 87, 46, 2, 255, 87, 47, 2, 255, 89, 47, 3, 255, 90, 45, 1, 255, 89, 46, 2, 255, 87, 44, 2, 255, 86, 45, 1, 255, 87, 50, 2, 255, 86, 51, 3, 255, 91, 49, 0, 255, 92, 49, 0, 255, 85, 52, 2, 255, 88, 50, 4, 255, 93, 51, 5, 255, 90, 53, 3, 255, 92, 51, 1, 255, 91, 49, 1, 255, 94, 50, 3, 255, 94, 52, 4, 255, 96, 55, 5, 255, 96, 55, 4, 255, 93, 49, 1, 255, 92, 56, 2, 255, 95, 52, 1, 255, 101, 55, 6, 255, 98, 50, 2, 255, 98, 49, 2, 255, 90, 51, 4, 255, 91, 53, 3, 255, 95, 54, 1, 255, 98, 55, 3, 255, 96, 54, 2, 255, 94, 52, 1, 255, 93, 53, 4, 255, 90, 51, 4, 255, 94, 54, 3, 255, 92, 53, 3, 255, 101, 51, 6, 255, 105, 54, 7, 255, 99, 53, 4, 255, 102, 52, 4, 255, 100, 50, 12, 255, 98, 52, 5, 255, 93, 54, 8, 255, 86, 51, 7, 255, 91, 53, 4, 255, 91, 50, 7, 255, 93, 51, 3, 255, 96, 51, 6, 255, 87, 52, 8, 255, 91, 49, 5, 255, 91, 47, 5, 255, 87, 51, 5, 255, 81, 52, 5, 255, 87, 53, 4, 255, 89, 52, 6, 255, 88, 49, 9, 255, 84, 52, 10, 255, 83, 55, 6, 255, 84, 54, 5, 255, 83, 53, 5, 255, 85, 54, 9, 255, 83, 51, 9, 255, 85, 52, 8, 255, 80, 51, 4, 255, 81, 56, 9, 255, 81, 57, 11, 255, 80, 50, 13, 255, 84, 53, 15, 255, 78, 54, 14, 255, 81, 59, 14, 255, 85, 55, 7, 255, 94, 62, 5, 255, 103, 63, 6, 255, 99, 56, 9, 255, 98, 58, 13, 255, 96, 61, 15, 255, 95, 64, 17, 255, 90, 60, 13, 255, 87, 62, 17, 255, 92, 72, 8, 255, 101, 65, 12, 255, 106, 67, 16, 255, 100, 63, 16, 255, 106, 67, 10, 255, 117, 74, 6, 255, 113, 76, 9, 255, 125, 78, 19, 255, 130, 78, 8, 255, 128, 77, 15, 255, 127, 73, 25, 255, 134, 79, 15, 255, 138, 79, 7, 255, 146, 83, 16, 255, 151, 86, 13, 255, 156, 85, 13, 255, 160, 85, 4, 255, 161, 84, 3, 255, 166, 91, 7, 255, 172, 94, 10, 255, 177, 94, 16, 255, 174, 95, 17, 255, 174, 99, 15, 255, 174, 96, 15, 255, 168, 92, 16, 255, 173, 97, 20, 255, 177, 99, 20, 255, 175, 97, 15, 255, 175, 97, 16, 255, 176, 95, 13, 255, 180, 101, 14, 255, 178, 97, 13, 255, 177, 95, 7, 255, 179, 98, 15, 255, 179, 98, 5, 255, 182, 101, 3, 255, 194, 110, 15, 255, 192, 107, 12, 255, 191, 109, 12, 255, 182, 105, 12, 255, 182, 103, 13, 255, 191, 109, 5, 255, 194, 111, 4, 255, 194, 111, 8, 255, 194, 110, 7, 255, 193, 107, 11, 255, 196, 111, 6, 255, 192, 107, 15, 255, 180, 99, 16, 255, 167, 98, 3, 255, 163, 96, 15, 255, 161, 90, 8, 255, 153, 87, 3, 255, 152, 87, 9, 255, 144, 81, 14, 255, 134, 79, 6, 255, 124, 76, 7, 255, 130, 81, 12, 255, 108, 73, 10, 255, 103, 67, 3, 255, 122, 75, 7, 255, 107, 73, 9, 255, 84, 66, 2, 255, 86, 67, 2, 255, 106, 70, 10, 255, 115, 75, 7, 255, 84, 65, 4, 255, 91, 71, 5, 255, 118, 78, 5, 255, 116, 76, 11, 255, 155, 116, 10, 255, 178, 132, 9, 255, 189, 142, 15, 255, 196, 151, 5, 255, 195, 142, 3, 255, 201, 148, 0, 255, 193, 144, 7, 255, 184, 135, 12, 255, 189, 139, 9, 255, 191, 143, 7, 255, 190, 140, 5, 255, 170, 117, 5, 255, 176, 124, 11, 255, 189, 139, 5, 255, 188, 137, 3, 255, 189, 137, 3, 255, 190, 136, 5, 255, 182, 127, 1, 255, 180, 124, 1, 255, 187, 133, 6, 255, 187, 132, 6, 255, 188, 131, 1, 255, 184, 125, 0, 255, 182, 119, 1, 255, 191, 125, 8, 255, 187, 124, 4, 255, 184, 123, 2, 255, 182, 119, 4, 255, 180, 117, 5, 255, 176, 112, 5, 255, 172, 108, 4, 255, 170, 104, 6, 255, 167, 101, 0, 255, 164, 99, 4, 255, 162, 97, 9, 255, 159, 95, 6, 255, 160, 95, 3, 255, 158, 91, 3, 255, 157, 86, 1, 255, 150, 81, 0, 255, 147, 81, 1, 255, 154, 84, 6, 255, 158, 82, 6, 255, 152, 77, 2, 255, 144, 75, 2, 255, 148, 78, 7, 255, 145, 71, 1, 255, 143, 69, 1, 255, 138, 67, 3, 255, 135, 65, 5, 255, 135, 64, 5, 255, 142, 63, 3, 255, 138, 62, 2, 255, 129, 57, 1, 255, 130, 55, 5, 255, 124, 50, 3, 255, 110, 45, 2, 255, 101, 41, 0, 255, 103, 40, 2, 255, 101, 38, 3, 255, 95, 36, 4, 255, 87, 31, 3, 255, 78, 27, 3, 255, 78, 28, 7, 255, 79, 30, 7, 255, 72, 27, 8, 255, 82, 28, 3, 255, 80, 27, 3, 255, 73, 27, 4, 255, 71, 30, 4, 255, 72, 29, 1, 255, 74, 26, 1, 255, 75, 24, 2, 255, 74, 23, 1, 255, 66, 24, 3, 255, 66, 24, 4, 255, 68, 25, 4, 255, 62, 24, 4, 255, 58, 21, 0, 255, 58, 21, 0, 255, 63, 21, 1, 255, 68, 20, 2, 255, 72, 22, 4, 255, 78, 23, 2, 255, 85, 23, 3, 255, 75, 18, 1, 255, 61, 16, 3, 255, 62, 18, 9, 255, 55, 12, 2, 255, 51, 20, 3, 255, 49, 18, 2, 255, 55, 17, 5, 255, 52, 13, 3, 255, 45, 17, 2, 255, 44, 20, 4, 255, 47, 14, 3, 255, 52, 15, 6, 255, 48, 18, 3, 255, 37, 16, 3, 255, 37, 16, 0, 255, 44, 16, 8, 255, 29, 7, 8, 255, 36, 16, 3, 255, 48, 18, 1, 255, 49, 16, 4, 255, 47, 13, 5, 255, 52, 13, 2, 255, 58, 17, 1, 255, 53, 18, 0, 255, 44, 14, 2, 255, 47, 16, 6, 255, 48, 16, 4, 255, 47, 19, 2, 255, 47, 18, 0, 255, 52, 17, 0, 255, 59, 16, 2, 255, 58, 19, 1, 255, 59, 14, 1, 255, 59, 16, 2, 255, 67, 21, 1, 255, 64, 19, 0, 255, 62, 20, 3, 255, 77, 22, 6, 255, 74, 21, 1, 255, 73, 22, 0, 255, 98, 38, 3, 255, 129, 55, 4, 255, 138, 58, 1, 255, 138, 59, 1, 255, 143, 59, 7, 255, 140, 61, 3, 255, 138, 62, 0, 255, 142, 62, 5, 255, 138, 59, 3, 255, 143, 63, 4, 255, 145, 63, 4, 255, 142, 59, 4, 255, 132, 49, 2, 255, 117, 37, 1, 255, 109, 32, 0, 255, 111, 36, 3, 255, 114, 41, 3, 255, 114, 41, 5, 255, 112, 38, 3, 255, 17, 13, 5, 255, 19, 15, 5, 255, 15, 14, 1, 255, 19, 17, 5, 255, 18, 16, 4, 255, 22, 20, 6, 255, 27, 24, 7, 255, 21, 22, 3, 255, 26, 30, 6, 255, 30, 34, 7, 255, 28, 37, 9, 255, 29, 41, 9, 255, 37, 47, 8, 255, 35, 47, 9, 255, 36, 47, 7, 255, 43, 51, 8, 255, 49, 57, 5, 255, 45, 52, 9, 255, 50, 57, 11, 255, 47, 56, 6, 255, 51, 54, 3, 255, 48, 57, 7, 255, 54, 60, 2, 255, 56, 52, 6, 255, 49, 52, 2, 255, 46, 46, 2, 255, 53, 46, 9, 255, 45, 39, 9, 255, 40, 35, 3, 255, 39, 33, 13, 255, 40, 37, 16, 255, 48, 44, 21, 255, 44, 42, 9, 255, 35, 35, 14, 255, 48, 34, 10, 255, 51, 35, 6, 255, 45, 30, 12, 255, 44, 28, 7, 255, 40, 32, 9, 255, 40, 33, 11, 255, 40, 28, 3, 255, 44, 29, 6, 255, 42, 28, 11, 255, 48, 39, 21, 255, 52, 47, 29, 255, 58, 58, 46, 255, 55, 52, 40, 255, 63, 54, 50, 255, 68, 59, 53, 255, 67, 62, 49, 255, 61, 58, 44, 255, 64, 60, 30, 255, 61, 59, 31, 255, 72, 56, 36, 255, 69, 60, 38, 255, 67, 60, 35, 255, 63, 49, 26, 255, 57, 50, 20, 255, 68, 54, 22, 255, 74, 42, 13, 255, 64, 31, 1, 255, 64, 40, 16, 255, 66, 47, 16, 255, 66, 43, 7, 255, 59, 32, 2, 255, 66, 29, 3, 255, 67, 30, 4, 255, 70, 33, 5, 255, 72, 30, 3, 255, 65, 27, 1, 255, 68, 28, 4, 255, 72, 30, 5, 255, 71, 32, 2, 255, 74, 36, 2, 255, 76, 37, 2, 255, 78, 39, 5, 255, 78, 36, 4, 255, 83, 36, 3, 255, 83, 37, 4, 255, 79, 40, 4, 255, 81, 38, 4, 255, 81, 35, 2, 255, 75, 38, 2, 255, 76, 42, 6, 255, 75, 35, 2, 255, 79, 38, 3, 255, 80, 42, 5, 255, 77, 42, 3, 255, 82, 41, 2, 255, 86, 42, 5, 255, 83, 41, 6, 255, 84, 39, 4, 255, 85, 40, 3, 255, 82, 41, 1, 255, 84, 41, 3, 255, 87, 40, 4, 255, 90, 45, 4, 255, 83, 41, 0, 255, 87, 47, 5, 255, 89, 45, 4, 255, 91, 44, 4, 255, 89, 45, 4, 255, 91, 47, 4, 255, 93, 49, 5, 255, 87, 45, 1, 255, 92, 51, 5, 255, 91, 48, 3, 255, 91, 44, 0, 255, 91, 44, 1, 255, 93, 50, 4, 255, 91, 47, 4, 255, 89, 46, 2, 255, 90, 50, 3, 255, 90, 52, 5, 255, 88, 48, 4, 255, 90, 46, 2, 255, 90, 47, 1, 255, 86, 53, 1, 255, 89, 50, 3, 255, 93, 50, 5, 255, 88, 53, 2, 255, 89, 49, 0, 255, 93, 50, 2, 255, 96, 53, 3, 255, 91, 50, 0, 255, 90, 52, 1, 255, 94, 53, 3, 255, 96, 53, 4, 255, 96, 53, 4, 255, 93, 54, 3, 255, 97, 55, 4, 255, 101, 53, 4, 255, 96, 50, 0, 255, 95, 52, 6, 255, 93, 57, 6, 255, 91, 56, 0, 255, 94, 56, 2, 255, 97, 54, 7, 255, 95, 51, 3, 255, 96, 52, 4, 255, 93, 51, 5, 255, 94, 54, 2, 255, 96, 53, 3, 255, 98, 52, 5, 255, 101, 55, 2, 255, 100, 51, 5, 255, 102, 52, 10, 255, 100, 51, 8, 255, 92, 49, 8, 255, 95, 54, 5, 255, 93, 51, 3, 255, 94, 54, 5, 255, 94, 55, 6, 255, 92, 54, 7, 255, 91, 53, 5, 255, 85, 51, 7, 255, 89, 47, 7, 255, 86, 50, 3, 255, 85, 54, 4, 255, 84, 55, 8, 255, 80, 55, 7, 255, 83, 50, 10, 255, 79, 47, 6, 255, 87, 52, 12, 255, 82, 49, 8, 255, 78, 49, 8, 255, 81, 52, 6, 255, 82, 55, 10, 255, 82, 52, 14, 255, 83, 53, 11, 255, 82, 55, 9, 255, 81, 54, 10, 255, 78, 54, 9, 255, 75, 57, 11, 255, 79, 56, 10, 255, 76, 56, 10, 255, 74, 53, 9, 255, 84, 55, 12, 255, 84, 55, 7, 255, 96, 64, 9, 255, 103, 67, 6, 255, 108, 64, 10, 255, 111, 62, 16, 255, 110, 62, 14, 255, 105, 62, 12, 255, 108, 63, 25, 255, 112, 72, 8, 255, 102, 66, 13, 255, 99, 65, 12, 255, 106, 65, 19, 255, 119, 70, 21, 255, 129, 74, 18, 255, 135, 72, 15, 255, 135, 75, 14, 255, 130, 71, 23, 255, 137, 77, 23, 255, 146, 81, 18, 255, 153, 82, 17, 255, 156, 85, 11, 255, 160, 85, 15, 255, 163, 86, 12, 255, 167, 88, 10, 255, 173, 90, 12, 255, 176, 93, 19, 255, 178, 98, 13, 255, 177, 100, 11, 255, 185, 104, 12, 255, 184, 102, 12, 255, 182, 101, 11, 255, 181, 100, 1, 255, 180, 93, 17, 255, 173, 94, 17, 255, 172, 94, 10, 255, 179, 99, 12, 255, 182, 103, 5, 255, 183, 101, 14, 255, 181, 102, 13, 255, 186, 107, 13, 255, 185, 105, 12, 255, 185, 106, 11, 255, 186, 108, 7, 255, 183, 103, 4, 255, 187, 103, 11, 255, 193, 107, 16, 255, 189, 106, 14, 255, 191, 106, 5, 255, 194, 109, 8, 255, 192, 114, 12, 255, 189, 111, 18, 255, 188, 106, 15, 255, 190, 104, 9, 255, 188, 104, 10, 255, 181, 99, 6, 255, 173, 93, 11, 255, 168, 90, 15, 255, 160, 89, 10, 255, 152, 87, 14, 255, 151, 89, 9, 255, 144, 82, 11, 255, 124, 79, 11, 255, 107, 64, 15, 255, 87, 68, 7, 255, 88, 72, 9, 255, 92, 65, 4, 255, 92, 68, 11, 255, 90, 70, 10, 255, 88, 65, 8, 255, 88, 69, 8, 255, 88, 68, 7, 255, 88, 66, 4, 255, 104, 75, 9, 255, 108, 71, 5, 255, 94, 64, 6, 255, 93, 71, 7, 255, 101, 72, 4, 255, 96, 60, 10, 255, 124, 88, 11, 255, 175, 129, 7, 255, 187, 137, 15, 255, 191, 149, 2, 255, 196, 142, 7, 255, 196, 140, 8, 255, 194, 148, 2, 255, 196, 148, 6, 255, 188, 136, 1, 255, 181, 126, 5, 255, 186, 133, 8, 255, 182, 134, 9, 255, 181, 134, 3, 255, 186, 135, 1, 255, 187, 134, 2, 255, 187, 132, 2, 255, 189, 134, 5, 255, 183, 127, 2, 255, 181, 128, 1, 255, 187, 133, 7, 255, 190, 133, 13, 255, 189, 131, 6, 255, 182, 125, 5, 255, 179, 118, 10, 255, 179, 116, 0, 255, 181, 118, 0, 255, 181, 118, 3, 255, 179, 115, 4, 255, 180, 116, 7, 255, 176, 112, 4, 255, 174, 109, 5, 255, 173, 106, 5, 255, 167, 103, 1, 255, 161, 97, 4, 255, 160, 95, 11, 255, 159, 95, 8, 255, 158, 94, 3, 255, 157, 92, 3, 255, 158, 89, 4, 255, 155, 87, 4, 255, 153, 85, 5, 255, 150, 80, 2, 255, 148, 76, 1, 255, 149, 77, 3, 255, 144, 75, 4, 255, 144, 72, 4, 255, 147, 70, 1, 255, 147, 71, 2, 255, 142, 72, 4, 255, 140, 73, 4, 255, 139, 71, 1, 255, 137, 65, 2, 255, 135, 62, 4, 255, 127, 55, 1, 255, 126, 52, 1, 255, 126, 54, 4, 255, 121, 53, 7, 255, 113, 50, 5, 255, 108, 44, 2, 255, 99, 38, 1, 255, 89, 35, 1, 255, 90, 32, 3, 255, 86, 29, 5, 255, 82, 29, 7, 255, 84, 30, 5, 255, 86, 33, 3, 255, 84, 25, 3, 255, 80, 28, 3, 255, 72, 26, 1, 255, 68, 26, 3, 255, 70, 29, 3, 255, 72, 22, 4, 255, 79, 27, 11, 255, 65, 25, 3, 255, 58, 23, 4, 255, 57, 17, 4, 255, 55, 23, 2, 255, 62, 25, 4, 255, 61, 23, 3, 255, 54, 21, 1, 255, 60, 22, 3, 255, 71, 23, 5, 255, 75, 24, 3, 255, 80, 25, 1, 255, 86, 26, 3, 255, 83, 24, 1, 255, 71, 25, 2, 255, 66, 22, 2, 255, 67, 19, 1, 255, 61, 18, 1, 255, 56, 18, 2, 255, 56, 18, 2, 255, 62, 19, 6, 255, 57, 18, 6, 255, 52, 21, 7, 255, 49, 18, 4, 255, 43, 16, 3, 255, 44, 16, 5, 255, 41, 17, 6, 255, 43, 19, 2, 255, 61, 22, 3, 255, 65, 18, 0, 255, 67, 21, 4, 255, 60, 20, 2, 255, 48, 14, 1, 255, 44, 11, 5, 255, 48, 14, 4, 255, 56, 19, 0, 255, 56, 16, 0, 255, 54, 17, 4, 255, 60, 15, 6, 255, 55, 20, 6, 255, 56, 20, 4, 255, 66, 16, 3, 255, 62, 19, 4, 255, 56, 19, 4, 255, 63, 18, 3, 255, 67, 19, 3, 255, 69, 21, 2, 255, 74, 21, 1, 255, 72, 20, 2, 255, 72, 23, 2, 255, 77, 23, 1, 255, 80, 30, 4, 255, 101, 40, 3, 255, 121, 56, 7, 255, 128, 57, 5, 255, 138, 57, 2, 255, 139, 60, 4, 255, 135, 61, 3, 255, 134, 60, 1, 255, 139, 62, 1, 255, 142, 63, 2, 255, 141, 62, 4, 255, 141, 59, 4, 255, 141, 59, 3, 255, 141, 56, 4, 255, 128, 48, 4, 255, 115, 38, 3, 255, 111, 37, 3, 255, 114, 41, 5, 255, 116, 40, 2, 255, 114, 38, 0, 255, 115, 38, 0, 255, 18, 14, 3, 255, 19, 16, 4, 255, 17, 17, 3, 255, 18, 17, 5, 255, 15, 16, 4, 255, 19, 21, 7, 255, 25, 25, 7, 255, 26, 29, 7, 255, 30, 37, 12, 255, 34, 36, 11, 255, 30, 38, 13, 255, 34, 44, 13, 255, 43, 50, 9, 255, 40, 52, 10, 255, 44, 54, 9, 255, 48, 56, 2, 255, 50, 56, 12, 255, 49, 56, 16, 255, 50, 59, 10, 255, 46, 57, 7, 255, 39, 58, 9, 255, 47, 56, 7, 255, 54, 50, 5, 255, 54, 53, 3, 255, 47, 47, 6, 255, 45, 44, 2, 255, 47, 39, 3, 255, 41, 37, 4, 255, 35, 29, 4, 255, 30, 26, 9, 255, 38, 31, 6, 255, 46, 39, 11, 255, 39, 40, 13, 255, 40, 31, 7, 255, 53, 36, 9, 255, 54, 39, 8, 255, 52, 38, 9, 255, 43, 35, 7, 255, 52, 30, 5, 255, 51, 31, 4, 255, 41, 31, 4, 255, 42, 29, 5, 255, 43, 26, 5, 255, 50, 33, 12, 255, 50, 37, 19, 255, 56, 51, 43, 255, 54, 50, 42, 255, 56, 55, 40, 255, 63, 62, 50, 255, 61, 61, 46, 255, 65, 66, 49, 255, 62, 59, 44, 255, 65, 59, 35, 255, 65, 56, 36, 255, 61, 59, 46, 255, 62, 58, 49, 255, 62, 48, 23, 255, 62, 47, 24, 255, 62, 46, 28, 255, 67, 42, 14, 255, 57, 31, 1, 255, 61, 38, 6, 255, 69, 47, 7, 255, 65, 43, 8, 255, 63, 33, 3, 255, 61, 26, 1, 255, 60, 29, 4, 255, 64, 33, 7, 255, 70, 30, 5, 255, 70, 29, 3, 255, 71, 29, 5, 255, 70, 31, 5, 255, 73, 35, 4, 255, 74, 37, 2, 255, 76, 39, 1, 255, 75, 36, 1, 255, 76, 34, 1, 255, 87, 37, 3, 255, 82, 38, 2, 255, 78, 41, 4, 255, 83, 40, 5, 255, 83, 35, 2, 255, 81, 40, 4, 255, 80, 43, 5, 255, 79, 38, 3, 255, 82, 37, 2, 255, 82, 39, 1, 255, 84, 43, 3, 255, 86, 40, 0, 255, 87, 40, 1, 255, 88, 43, 3, 255, 93, 44, 3, 255, 96, 47, 3, 255, 92, 47, 1, 255, 94, 47, 3, 255, 96, 44, 2, 255, 95, 47, 3, 255, 89, 48, 3, 255, 91, 52, 6, 255, 88, 46, 1, 255, 91, 45, 1, 255, 92, 46, 2, 255, 91, 47, 4, 255, 87, 46, 3, 255, 86, 45, 3, 255, 89, 47, 3, 255, 89, 45, 1, 255, 89, 44, 1, 255, 92, 48, 4, 255, 91, 46, 4, 255, 91, 43, 2, 255, 95, 47, 4, 255, 93, 51, 2, 255, 90, 47, 3, 255, 93, 45, 6, 255, 89, 47, 5, 255, 93, 47, 2, 255, 94, 53, 1, 255, 95, 57, 4, 255, 87, 53, 1, 255, 88, 55, 1, 255, 92, 52, 0, 255, 94, 53, 2, 255, 94, 52, 1, 255, 92, 52, 0, 255, 89, 54, 1, 255, 93, 56, 3, 255, 96, 55, 4, 255, 94, 51, 3, 255, 90, 52, 3, 255, 92, 54, 1, 255, 100, 57, 4, 255, 97, 55, 1, 255, 93, 55, 4, 255, 91, 57, 7, 255, 91, 57, 3, 255, 93, 55, 4, 255, 98, 55, 11, 255, 100, 56, 6, 255, 98, 54, 1, 255, 98, 56, 6, 255, 94, 53, 2, 255, 98, 54, 3, 255, 96, 55, 4, 255, 99, 56, 1, 255, 102, 52, 7, 255, 96, 47, 12, 255, 95, 50, 3, 255, 96, 54, 11, 255, 98, 58, 6, 255, 101, 57, 3, 255, 101, 56, 6, 255, 99, 56, 3, 255, 100, 52, 6, 255, 98, 50, 8, 255, 84, 51, 11, 255, 91, 49, 11, 255, 93, 51, 8, 255, 88, 52, 9, 255, 81, 50, 7, 255, 90, 51, 8, 255, 82, 52, 10, 255, 88, 48, 10, 255, 88, 55, 10, 255, 102, 54, 13, 255, 107, 56, 13, 255, 104, 57, 14, 255, 98, 54, 13, 255, 90, 54, 13, 255, 81, 53, 10, 255, 82, 58, 6, 255, 82, 57, 6, 255, 81, 55, 9, 255, 88, 60, 11, 255, 102, 65, 16, 255, 102, 64, 8, 255, 105, 64, 1, 255, 116, 68, 7, 255, 115, 65, 11, 255, 125, 67, 16, 255, 139, 78, 10, 255, 138, 76, 2, 255, 139, 72, 7, 255, 140, 71, 15, 255, 140, 77, 9, 255, 141, 76, 16, 255, 141, 75, 12, 255, 130, 71, 22, 255, 128, 70, 15, 255, 135, 76, 8, 255, 139, 76, 12, 255, 138, 77, 17, 255, 142, 81, 20, 255, 148, 80, 12, 255, 157, 84, 14, 255, 156, 84, 18, 255, 157, 87, 12, 255, 162, 87, 9, 255, 169, 88, 7, 255, 169, 83, 20, 255, 169, 87, 16, 255, 174, 95, 11, 255, 179, 100, 9, 255, 186, 102, 15, 255, 189, 103, 9, 255, 187, 104, 7, 255, 189, 106, 12, 255, 192, 107, 4, 255, 178, 92, 12, 255, 164, 85, 16, 255, 163, 82, 17, 255, 167, 86, 21, 255, 174, 96, 8, 255, 183, 102, 6, 255, 186, 103, 6, 255, 185, 103, 12, 255, 183, 107, 5, 255, 184, 107, 7, 255, 186, 104, 13, 255, 180, 101, 9, 255, 180, 103, 9, 255, 179, 100, 13, 255, 181, 99, 13, 255, 191, 109, 12, 255, 196, 106, 10, 255, 193, 105, 6, 255, 190, 103, 9, 255, 184, 103, 6, 255, 179, 101, 10, 255, 175, 97, 12, 255, 172, 95, 12, 255, 167, 95, 4, 255, 162, 88, 11, 255, 158, 87, 7, 255, 143, 82, 8, 255, 127, 77, 20, 255, 115, 79, 11, 255, 103, 71, 8, 255, 117, 77, 16, 255, 112, 78, 5, 255, 90, 72, 11, 255, 87, 74, 9, 255, 90, 73, 7, 255, 93, 71, 4, 255, 92, 70, 16, 255, 88, 68, 8, 255, 88, 66, 5, 255, 88, 65, 9, 255, 88, 68, 5, 255, 88, 70, 3, 255, 94, 69, 7, 255, 96, 60, 13, 255, 85, 65, 4, 255, 84, 71, 8, 255, 90, 67, 3, 255, 89, 58, 3, 255, 106, 75, 6, 255, 172, 126, 4, 255, 181, 134, 2, 255, 192, 151, 7, 255, 200, 150, 10, 255, 186, 140, 5, 255, 198, 156, 10, 255, 195, 142, 9, 255, 174, 118, 10, 255, 186, 140, 6, 255, 185, 131, 6, 255, 185, 128, 13, 255, 179, 131, 4, 255, 181, 133, 0, 255, 182, 131, 1, 255, 182, 128, 1, 255, 187, 132, 6, 255, 184, 127, 3, 255, 186, 129, 8, 255, 184, 128, 8, 255, 183, 126, 3, 255, 184, 126, 8, 255, 180, 125, 10, 255, 178, 123, 7, 255, 176, 114, 2, 255, 174, 110, 0, 255, 178, 114, 5, 255, 178, 114, 4, 255, 177, 113, 3, 255, 172, 109, 0, 255, 174, 108, 3, 255, 171, 103, 3, 255, 168, 102, 5, 255, 163, 98, 2, 255, 160, 96, 3, 255, 158, 94, 4, 255, 157, 92, 6, 255, 155, 88, 3, 255, 149, 84, 1, 255, 149, 84, 3, 255, 150, 81, 5, 255, 146, 79, 3, 255, 139, 75, 1, 255, 142, 76, 3, 255, 139, 71, 1, 255, 136, 69, 0, 255, 146, 70, 6, 255, 147, 68, 4, 255, 141, 72, 1, 255, 142, 74, 3, 255, 140, 69, 3, 255, 132, 61, 3, 255, 132, 60, 3, 255, 134, 58, 5, 255, 129, 56, 3, 255, 122, 55, 0, 255, 120, 54, 3, 255, 115, 51, 4, 255, 112, 43, 2, 255, 99, 39, 3, 255, 88, 42, 4, 255, 92, 34, 2, 255, 89, 30, 1, 255, 84, 29, 3, 255, 82, 29, 2, 255, 93, 37, 0, 255, 99, 38, 4, 255, 87, 33, 5, 255, 92, 37, 4, 255, 78, 29, 5, 255, 65, 22, 4, 255, 69, 26, 2, 255, 78, 24, 2, 255, 73, 23, 3, 255, 64, 23, 1, 255, 72, 26, 6, 255, 64, 21, 4, 255, 61, 23, 5, 255, 69, 21, 6, 255, 61, 21, 4, 255, 60, 23, 4, 255, 72, 20, 2, 255, 87, 24, 2, 255, 93, 25, 1, 255, 94, 30, 4, 255, 95, 26, 5, 255, 86, 27, 1, 255, 79, 26, 2, 255, 75, 22, 3, 255, 67, 20, 4, 255, 63, 21, 3, 255, 57, 21, 1, 255, 63, 21, 3, 255, 60, 18, 3, 255, 56, 18, 3, 255, 56, 15, 3, 255, 49, 17, 2, 255, 49, 18, 8, 255, 51, 18, 5, 255, 51, 15, 2, 255, 61, 21, 1, 255, 77, 26, 5, 255, 68, 18, 6, 255, 57, 18, 1, 255, 54, 19, 1, 255, 50, 17, 5, 255, 51, 19, 1, 255, 57, 23, 1, 255, 61, 22, 7, 255, 73, 27, 6, 255, 79, 28, 1, 255, 81, 31, 1, 255, 79, 23, 2, 255, 56, 18, 1, 255, 54, 16, 3, 255, 59, 13, 3, 255, 66, 15, 1, 255, 80, 27, 1, 255, 89, 30, 1, 255, 85, 29, 5, 255, 88, 35, 6, 255, 100, 42, 5, 255, 108, 49, 5, 255, 123, 49, 5, 255, 132, 54, 2, 255, 133, 57, 4, 255, 132, 55, 3, 255, 138, 56, 2, 255, 137, 58, 6, 255, 133, 61, 0, 255, 134, 61, 3, 255, 138, 59, 6, 255, 141, 59, 4, 255, 135, 57, 0, 255, 138, 58, 2, 255, 141, 59, 2, 255, 137, 55, 1, 255, 125, 46, 1, 255, 114, 38, 2, 255, 113, 37, 3, 255, 118, 40, 2, 255, 119, 41, 5, 255, 117, 37, 2, 255, 119, 39, 2, 255, 18, 15, 6, 255, 21, 16, 6, 255, 23, 18, 5, 255, 23, 22, 5, 255, 20, 22, 4, 255, 21, 25, 8, 255, 27, 31, 7, 255, 30, 32, 8, 255, 33, 38, 8, 255, 41, 43, 6, 255, 41, 46, 12, 255, 40, 50, 15, 255, 41, 52, 9, 255, 43, 54, 9, 255, 45, 59, 6, 255, 45, 62, 1, 255, 47, 60, 12, 255, 47, 55, 18, 255, 47, 54, 8, 255, 44, 53, 7, 255, 40, 55, 8, 255, 43, 54, 3, 255, 46, 49, 1, 255, 48, 46, 1, 255, 45, 39, 8, 255, 39, 34, 4, 255, 37, 30, 1, 255, 34, 28, 0, 255, 34, 28, 6, 255, 29, 24, 3, 255, 33, 27, 2, 255, 42, 35, 9, 255, 43, 36, 15, 255, 46, 33, 8, 255, 44, 32, 6, 255, 47, 35, 18, 255, 49, 37, 16, 255, 42, 33, 4, 255, 48, 32, 8, 255, 49, 32, 11, 255, 39, 27, 6, 255, 43, 26, 5, 255, 47, 28, 4, 255, 47, 33, 5, 255, 54, 46, 20, 255, 59, 48, 43, 255, 59, 56, 36, 255, 60, 53, 35, 255, 66, 63, 49, 255, 63, 61, 49, 255, 66, 63, 52, 255, 65, 61, 56, 255, 68, 54, 36, 255, 68, 55, 32, 255, 64, 60, 42, 255, 63, 56, 48, 255, 69, 51, 19, 255, 71, 45, 18, 255, 62, 48, 13, 255, 57, 45, 5, 255, 59, 33, 4, 255, 63, 38, 5, 255, 63, 49, 3, 255, 62, 44, 7, 255, 59, 33, 3, 255, 57, 30, 2, 255, 58, 31, 4, 255, 56, 28, 1, 255, 65, 33, 5, 255, 65, 32, 5, 255, 67, 32, 3, 255, 69, 34, 2, 255, 72, 37, 2, 255, 73, 33, 0, 255, 80, 36, 1, 255, 78, 36, 2, 255, 73, 37, 1, 255, 77, 39, 3, 255, 81, 36, 2, 255, 78, 39, 3, 255, 77, 41, 4, 255, 78, 39, 1, 255, 75, 43, 2, 255, 78, 43, 2, 255, 83, 45, 3, 255, 82, 41, 1, 255, 82, 39, 1, 255, 86, 43, 3, 255, 85, 43, 0, 255, 88, 43, 0, 255, 90, 44, 2, 255, 93, 47, 3, 255, 96, 48, 2, 255, 96, 47, 2, 255, 98, 49, 0, 255, 97, 47, 7, 255, 98, 47, 3, 255, 97, 50, 4, 255, 96, 52, 3, 255, 96, 54, 2, 255, 104, 49, 2, 255, 101, 46, 2, 255, 95, 50, 4, 255, 92, 52, 1, 255, 94, 54, 1, 255, 98, 54, 4, 255, 97, 50, 3, 255, 94, 47, 0, 255, 91, 51, 1, 255, 93, 48, 3, 255, 97, 44, 5, 255, 87, 45, 2, 255, 94, 45, 5, 255, 85, 43, 0, 255, 90, 47, 5, 255, 93, 44, 3, 255, 89, 47, 5, 255, 89, 45, 3, 255, 95, 48, 2, 255, 92, 49, 0, 255, 94, 53, 4, 255, 88, 49, 2, 255, 90, 50, 3, 255, 86, 51, 6, 255, 97, 51, 10, 255, 93, 50, 0, 255, 93, 52, 3, 255, 92, 53, 2, 255, 89, 53, 5, 255, 95, 52, 2, 255, 95, 54, 1, 255, 95, 56, 3, 255, 97, 54, 5, 255, 94, 53, 3, 255, 93, 57, 5, 255, 94, 55, 7, 255, 91, 48, 6, 255, 96, 48, 8, 255, 98, 56, 6, 255, 93, 59, 1, 255, 94, 56, 2, 255, 101, 54, 2, 255, 112, 53, 2, 255, 103, 55, 2, 255, 99, 56, 1, 255, 95, 57, 8, 255, 96, 50, 5, 255, 100, 49, 3, 255, 103, 56, 2, 255, 94, 55, 3, 255, 98, 57, 5, 255, 113, 58, 8, 255, 96, 50, 3, 255, 92, 52, 9, 255, 93, 53, 6, 255, 89, 49, 10, 255, 93, 54, 13, 255, 119, 59, 6, 255, 113, 61, 8, 255, 107, 58, 8, 255, 101, 52, 11, 255, 89, 51, 5, 255, 98, 56, 7, 255, 108, 65, 9, 255, 148, 70, 8, 255, 158, 72, 6, 255, 145, 69, 8, 255, 117, 58, 11, 255, 88, 53, 8, 255, 79, 53, 5, 255, 89, 59, 8, 255, 91, 60, 11, 255, 97, 63, 13, 255, 126, 64, 9, 255, 124, 62, 11, 255, 127, 66, 14, 255, 135, 72, 14, 255, 139, 70, 6, 255, 136, 71, 5, 255, 144, 71, 13, 255, 152, 76, 11, 255, 153, 74, 6, 255, 158, 74, 15, 255, 160, 76, 19, 255, 155, 77, 7, 255, 147, 72, 9, 255, 140, 70, 20, 255, 143, 76, 19, 255, 147, 77, 14, 255, 150, 79, 12, 255, 153, 80, 9, 255, 155, 80, 23, 255, 156, 85, 8, 255, 162, 85, 11, 255, 166, 86, 11, 255, 160, 82, 10, 255, 154, 80, 14, 255, 158, 86, 18, 255, 172, 93, 10, 255, 174, 90, 12, 255, 176, 95, 13, 255, 180, 98, 13, 255, 183, 97, 11, 255, 190, 102, 11, 255, 194, 107, 6, 255, 193, 103, 5, 255, 196, 105, 8, 255, 185, 98, 23, 255, 160, 86, 11, 255, 157, 88, 14, 255, 168, 95, 14, 255, 180, 100, 16, 255, 185, 100, 15, 255, 188, 101, 10, 255, 191, 102, 7, 255, 184, 97, 15, 255, 180, 101, 12, 255, 181, 103, 7, 255, 183, 100, 12, 255, 184, 100, 10, 255, 183, 104, 10, 255, 183, 103, 11, 255, 185, 103, 19, 255, 177, 99, 11, 255, 180, 98, 5, 255, 177, 99, 12, 255, 172, 96, 12, 255, 174, 95, 8, 255, 169, 93, 10, 255, 156, 90, 12, 255, 145, 87, 17, 255, 139, 83, 10, 255, 120, 76, 16, 255, 106, 70, 16, 255, 103, 73, 8, 255, 96, 74, 9, 255, 94, 70, 10, 255, 83, 73, 16, 255, 84, 68, 11, 255, 94, 74, 6, 255, 91, 74, 6, 255, 89, 71, 11, 255, 87, 71, 12, 255, 89, 71, 4, 255, 94, 69, 5, 255, 95, 66, 8, 255, 87, 67, 8, 255, 78, 67, 5, 255, 87, 71, 4, 255, 89, 71, 0, 255, 88, 68, 4, 255, 89, 65, 6, 255, 89, 67, 4, 255, 92, 66, 2, 255, 93, 68, 4, 255, 96, 63, 12, 255, 98, 59, 15, 255, 135, 94, 7, 255, 179, 139, 4, 255, 193, 150, 5, 255, 198, 152, 3, 255, 199, 157, 0, 255, 198, 155, 5, 255, 195, 145, 8, 255, 180, 125, 11, 255, 190, 144, 1, 255, 186, 132, 5, 255, 178, 121, 6, 255, 179, 125, 9, 255, 176, 125, 5, 255, 179, 125, 6, 255, 181, 125, 3, 255, 186, 128, 7, 255, 185, 127, 6, 255, 180, 123, 3, 255, 181, 123, 4, 255, 182, 126, 0, 255, 178, 123, 1, 255, 181, 124, 5, 255, 178, 118, 1, 255, 172, 110, 2, 255, 167, 105, 1, 255, 174, 115, 5, 255, 176, 115, 8, 255, 174, 112, 4, 255, 171, 108, 1, 255, 169, 105, 2, 255, 169, 102, 5, 255, 164, 99, 4, 255, 161, 96, 6, 255, 159, 97, 7, 255, 156, 92, 2, 255, 157, 91, 2, 255, 152, 86, 3, 255, 146, 79, 2, 255, 146, 76, 1, 255, 148, 76, 7, 255, 145, 76, 5, 255, 142, 76, 3, 255, 143, 76, 8, 255, 138, 71, 1, 255, 138, 70, 2, 255, 141, 69, 2, 255, 138, 66, 1, 255, 139, 66, 1, 255, 135, 64, 1, 255, 127, 61, 2, 255, 126, 55, 0, 255, 133, 61, 2, 255, 136, 64, 3, 255, 131, 60, 1, 255, 127, 57, 0, 255, 123, 56, 2, 255, 117, 49, 0, 255, 116, 47, 2, 255, 109, 47, 4, 255, 101, 42, 5, 255, 93, 34, 3, 255, 89, 34, 6, 255, 78, 29, 2, 255, 73, 26, 4, 255, 93, 35, 5, 255, 101, 37, 4, 255, 97, 33, 2, 255, 99, 33, 3, 255, 94, 32, 5, 255, 78, 25, 2, 255, 71, 26, 3, 255, 69, 22, 3, 255, 70, 16, 3, 255, 68, 21, 4, 255, 68, 24, 4, 255, 65, 20, 3, 255, 64, 25, 5, 255, 60, 23, 1, 255, 55, 18, 3, 255, 64, 20, 2, 255, 81, 29, 1, 255, 91, 31, 4, 255, 95, 26, 2, 255, 100, 29, 5, 255, 94, 23, 1, 255, 88, 24, 0, 255, 83, 25, 1, 255, 79, 24, 2, 255, 73, 23, 4, 255, 62, 21, 2, 255, 64, 21, 3, 255, 66, 20, 5, 255, 59, 19, 5, 255, 51, 17, 4, 255, 55, 18, 6, 255, 57, 21, 4, 255, 53, 16, 3, 255, 56, 15, 3, 255, 54, 11, 1, 255, 56, 14, 2, 255, 65, 18, 6, 255, 57, 17, 8, 255, 48, 18, 2, 255, 65, 23, 3, 255, 89, 31, 5, 255, 84, 27, 0, 255, 84, 31, 3, 255, 91, 36, 6, 255, 94, 33, 1, 255, 107, 45, 0, 255, 112, 46, 3, 255, 92, 30, 3, 255, 67, 21, 3, 255, 68, 20, 2, 255, 61, 16, 4, 255, 69, 18, 3, 255, 91, 30, 5, 255, 103, 36, 4, 255, 105, 39, 2, 255, 118, 50, 2, 255, 132, 55, 4, 255, 135, 57, 3, 255, 137, 57, 1, 255, 131, 53, 0, 255, 130, 54, 2, 255, 136, 58, 6, 255, 135, 56, 3, 255, 133, 55, 2, 255, 136, 58, 1, 255, 132, 57, 1, 255, 135, 59, 4, 255, 136, 59, 1, 255, 136, 62, 1, 255, 140, 61, 2, 255, 140, 57, 0, 255, 141, 60, 1, 255, 139, 60, 4, 255, 130, 52, 2, 255, 124, 48, 1, 255, 123, 50, 2, 255, 124, 51, 2, 255, 125, 42, 1, 255, 123, 41, 3, 255, 21, 19, 7, 255, 19, 16, 2, 255, 25, 22, 5, 255, 24, 25, 4, 255, 25, 28, 6, 255, 25, 31, 7, 255, 28, 35, 3, 255, 34, 41, 8, 255, 35, 41, 8, 255, 42, 50, 7, 255, 45, 56, 8, 255, 38, 53, 9, 255, 40, 55, 13, 255, 48, 58, 18, 255, 47, 58, 14, 255, 49, 59, 10, 255, 49, 60, 10, 255, 46, 55, 11, 255, 42, 51, 5, 255, 41, 53, 12, 255, 41, 48, 8, 255, 45, 45, 4, 255, 47, 46, 3, 255, 41, 42, 3, 255, 29, 36, 2, 255, 28, 31, 4, 255, 30, 26, 3, 255, 29, 26, 5, 255, 34, 27, 8, 255, 33, 21, 4, 255, 34, 22, 6, 255, 40, 28, 12, 255, 38, 26, 8, 255, 40, 27, 8, 255, 43, 31, 0, 255, 47, 33, 22, 255, 53, 36, 23, 255, 54, 38, 3, 255, 51, 33, 9, 255, 47, 31, 12, 255, 40, 28, 4, 255, 39, 27, 3, 255, 44, 28, 5, 255, 41, 26, 6, 255, 46, 34, 16, 255, 56, 51, 32, 255, 53, 56, 41, 255, 57, 51, 44, 255, 68, 63, 49, 255, 67, 63, 47, 255, 66, 65, 53, 255, 67, 62, 53, 255, 60, 51, 41, 255, 59, 54, 29, 255, 65, 59, 39, 255, 71, 55, 41, 255, 68, 48, 15, 255, 58, 39, 25, 255, 59, 47, 21, 255, 69, 46, 9, 255, 64, 35, 8, 255, 64, 41, 8, 255, 68, 50, 2, 255, 68, 45, 1, 255, 62, 38, 5, 255, 59, 30, 1, 255, 65, 30, 3, 255, 69, 32, 5, 255, 67, 31, 4, 255, 64, 31, 3, 255, 69, 35, 5, 255, 73, 37, 5, 255, 70, 36, 1, 255, 76, 36, 2, 255, 82, 38, 5, 255, 73, 36, 2, 255, 71, 37, 3, 255, 76, 35, 1, 255, 76, 38, 1, 255, 81, 39, 4, 255, 82, 38, 3, 255, 82, 42, 4, 255, 78, 43, 3, 255, 76, 41, 2, 255, 74, 39, 1, 255, 75, 40, 3, 255, 78, 41, 3, 255, 84, 44, 3, 255, 86, 44, 1, 255, 89, 44, 1, 255, 86, 42, 2, 255, 92, 46, 1, 255, 98, 49, 1, 255, 96, 47, 4, 255, 96, 47, 3, 255, 95, 46, 4, 255, 102, 52, 7, 255, 95, 49, 1, 255, 105, 51, 3, 255, 99, 52, 2, 255, 96, 52, 1, 255, 99, 49, 2, 255, 99, 50, 0, 255, 102, 54, 2, 255, 103, 54, 3, 255, 102, 49, 3, 255, 103, 49, 5, 255, 99, 52, 4, 255, 95, 56, 1, 255, 100, 54, 4, 255, 101, 53, 3, 255, 105, 64, 4, 255, 102, 51, 9, 255, 92, 53, 2, 255, 92, 54, 3, 255, 99, 49, 8, 255, 101, 53, 7, 255, 97, 51, 0, 255, 116, 52, 4, 255, 114, 47, 6, 255, 94, 43, 4, 255, 90, 46, 4, 255, 99, 44, 4, 255, 95, 45, 4, 255, 97, 47, 3, 255, 106, 48, 3, 255, 120, 52, 9, 255, 103, 50, 5, 255, 101, 53, 5, 255, 99, 53, 4, 255, 103, 55, 6, 255, 101, 53, 5, 255, 101, 52, 3, 255, 118, 55, 0, 255, 117, 53, 0, 255, 102, 49, 3, 255, 94, 50, 8, 255, 105, 54, 5, 255, 101, 56, 3, 255, 89, 55, 4, 255, 107, 57, 9, 255, 133, 60, 6, 255, 137, 59, 2, 255, 130, 58, 7, 255, 117, 54, 5, 255, 104, 50, 5, 255, 99, 51, 9, 255, 99, 54, 8, 255, 96, 52, 6, 255, 108, 54, 11, 255, 130, 65, 6, 255, 135, 65, 6, 255, 109, 52, 7, 255, 108, 54, 7, 255, 100, 54, 7, 255, 97, 55, 8, 255, 121, 62, 4, 255, 132, 66, 6, 255, 144, 68, 3, 255, 144, 64, 4, 255, 108, 51, 7, 255, 84, 47, 7, 255, 105, 55, 10, 255, 140, 65, 6, 255, 161, 71, 2, 255, 154, 69, 4, 255, 143, 64, 4, 255, 132, 66, 7, 255, 107, 65, 9, 255, 101, 60, 7, 255, 116, 63, 11, 255, 126, 62, 19, 255, 132, 67, 8, 255, 129, 62, 12, 255, 131, 71, 9, 255, 137, 70, 6, 255, 144, 68, 11, 255, 147, 71, 15, 255, 152, 74, 13, 255, 153, 75, 7, 255, 155, 76, 10, 255, 158, 78, 5, 255, 158, 78, 6, 255, 156, 75, 8, 255, 152, 73, 7, 255, 150, 73, 6, 255, 152, 75, 14, 255, 154, 79, 19, 255, 156, 80, 13, 255, 159, 80, 18, 255, 158, 81, 17, 255, 155, 84, 12, 255, 160, 80, 17, 255, 156, 78, 11, 255, 152, 80, 12, 255, 155, 86, 16, 255, 160, 87, 15, 255, 175, 89, 15, 255, 184, 97, 16, 255, 179, 96, 16, 255, 181, 98, 15, 255, 183, 99, 12, 255, 186, 98, 13, 255, 189, 100, 12, 255, 191, 106, 9, 255, 186, 101, 7, 255, 186, 99, 12, 255, 178, 94, 25, 255, 178, 102, 15, 255, 181, 105, 9, 255, 185, 102, 11, 255, 181, 101, 9, 255, 180, 101, 11, 255, 179, 99, 9, 255, 177, 98, 6, 255, 175, 99, 6, 255, 179, 101, 12, 255, 183, 105, 16, 255, 181, 102, 22, 255, 184, 107, 16, 255, 177, 107, 11, 255, 176, 101, 12, 255, 174, 96, 5, 255, 166, 94, 15, 255, 156, 90, 19, 255, 157, 87, 11, 255, 152, 87, 19, 255, 127, 78, 18, 255, 109, 76, 26, 255, 107, 79, 14, 255, 96, 73, 12, 255, 93, 71, 9, 255, 89, 73, 9, 255, 86, 73, 8, 255, 90, 74, 12, 255, 89, 74, 15, 255, 94, 72, 12, 255, 94, 74, 9, 255, 88, 70, 8, 255, 90, 72, 10, 255, 90, 68, 6, 255, 92, 70, 8, 255, 88, 71, 3, 255, 88, 67, 8, 255, 90, 70, 13, 255, 90, 68, 4, 255, 94, 68, 6, 255, 92, 69, 7, 255, 93, 67, 7, 255, 96, 65, 10, 255, 94, 67, 8, 255, 94, 69, 7, 255, 109, 73, 9, 255, 103, 65, 7, 255, 95, 69, 8, 255, 101, 70, 6, 255, 101, 70, 9, 255, 132, 92, 7, 255, 172, 126, 13, 255, 194, 149, 2, 255, 193, 148, 10, 255, 194, 148, 14, 255, 204, 158, 3, 255, 184, 135, 1, 255, 185, 134, 5, 255, 196, 145, 8, 255, 185, 132, 0, 255, 176, 119, 2, 255, 175, 119, 5, 255, 173, 122, 1, 255, 179, 124, 2, 255, 180, 123, 1, 255, 182, 124, 5, 255, 184, 125, 9, 255, 183, 122, 9, 255, 179, 121, 6, 255, 178, 126, 4, 255, 176, 124, 4, 255, 177, 119, 5, 255, 174, 113, 1, 255, 170, 109, 4, 255, 169, 109, 8, 255, 172, 114, 7, 255, 174, 114, 7, 255, 174, 113, 6, 255, 174, 110, 5, 255, 170, 104, 5, 255, 167, 99, 5, 255, 160, 101, 3, 255, 156, 97, 6, 255, 158, 95, 9, 255, 157, 92, 2, 255, 159, 89, 3, 255, 155, 84, 8, 255, 153, 78, 6, 255, 152, 80, 3, 255, 139, 73, 3, 255, 130, 69, 0, 255, 139, 77, 0, 255, 142, 74, 4, 255, 141, 67, 5, 255, 141, 69, 3, 255, 136, 69, 1, 255, 134, 68, 0, 255, 140, 70, 4, 255, 139, 68, 6, 255, 133, 64, 5, 255, 130, 62, 3, 255, 131, 64, 4, 255, 131, 64, 4, 255, 131, 61, 2, 255, 130, 59, 5, 255, 129, 57, 5, 255, 121, 53, 1, 255, 120, 54, 3, 255, 116, 50, 7, 255, 106, 42, 1, 255, 102, 42, 2, 255, 90, 34, 2, 255, 78, 27, 4, 255, 72, 24, 3, 255, 94, 34, 8, 255, 101, 38, 4, 255, 101, 38, 3, 255, 100, 35, 5, 255, 93, 34, 5, 255, 82, 30, 0, 255, 77, 28, 2, 255, 69, 21, 2, 255, 66, 20, 2, 255, 72, 25, 6, 255, 71, 21, 1, 255, 72, 23, 3, 255, 71, 23, 5, 255, 62, 23, 3, 255, 61, 16, 4, 255, 73, 20, 5, 255, 82, 26, 0, 255, 88, 24, 4, 255, 94, 27, 2, 255, 100, 28, 2, 255, 97, 26, 1, 255, 94, 28, 3, 255, 87, 27, 1, 255, 87, 25, 2, 255, 85, 24, 3, 255, 76, 23, 1, 255, 77, 23, 3, 255, 69, 21, 1, 255, 67, 21, 2, 255, 64, 17, 2, 255, 55, 15, 2, 255, 58, 21, 5, 255, 57, 17, 2, 255, 60, 18, 4, 255, 60, 18, 3, 255, 60, 17, 2, 255, 61, 19, 6, 255, 60, 15, 2, 255, 63, 21, 2, 255, 69, 18, 6, 255, 91, 27, 1, 255, 102, 37, 7, 255, 101, 34, 6, 255, 104, 30, 0, 255, 107, 36, 4, 255, 124, 45, 7, 255, 115, 32, 1, 255, 93, 26, 1, 255, 81, 27, 6, 255, 86, 21, 5, 255, 75, 19, 5, 255, 66, 17, 0, 255, 75, 21, 0, 255, 88, 24, 2, 255, 103, 28, 0, 255, 120, 42, 5, 255, 131, 52, 5, 255, 138, 56, 2, 255, 134, 54, 2, 255, 134, 55, 6, 255, 129, 52, 2, 255, 130, 55, 2, 255, 133, 58, 1, 255, 134, 55, 2, 255, 134, 57, 3, 255, 134, 57, 4, 255, 135, 58, 3, 255, 138, 58, 1, 255, 140, 61, 1, 255, 139, 57, 1, 255, 140, 59, 1, 255, 142, 63, 1, 255, 143, 63, 1, 255, 142, 61, 3, 255, 141, 62, 5, 255, 139, 64, 5, 255, 138, 61, 3, 255, 136, 49, 3, 255, 124, 44, 4, 255, 17, 17, 3, 255, 22, 22, 11, 255, 24, 26, 15, 255, 24, 27, 9, 255, 28, 32, 10, 255, 30, 34, 13, 255, 30, 38, 11, 255, 34, 45, 17, 255, 36, 49, 17, 255, 36, 54, 10, 255, 39, 59, 9, 255, 43, 61, 11, 255, 39, 56, 10, 255, 51, 61, 13, 255, 55, 66, 6, 255, 53, 60, 4, 255, 49, 57, 7, 255, 48, 58, 10, 255, 42, 55, 9, 255, 36, 48, 4, 255, 42, 44, 5, 255, 47, 41, 6, 255, 43, 38, 5, 255, 37, 34, 5, 255, 32, 28, 8, 255, 34, 27, 10, 255, 31, 24, 4, 255, 34, 21, 4, 255, 35, 21, 4, 255, 33, 23, 6, 255, 32, 22, 7, 255, 30, 19, 4, 255, 36, 26, 11, 255, 35, 25, 13, 255, 37, 29, 1, 255, 41, 31, 24, 255, 49, 36, 24, 255, 49, 35, 11, 255, 54, 33, 14, 255, 52, 32, 9, 255, 46, 35, 5, 255, 39, 31, 0, 255, 40, 28, 0, 255, 45, 27, 6, 255, 50, 30, 11, 255, 57, 49, 30, 255, 58, 52, 42, 255, 56, 48, 43, 255, 63, 63, 50, 255, 61, 62, 46, 255, 63, 61, 49, 255, 63, 62, 48, 255, 60, 57, 48, 255, 54, 53, 36, 255, 57, 53, 40, 255, 73, 57, 36, 255, 68, 51, 13, 255, 52, 40, 12, 255, 62, 47, 17, 255, 73, 47, 11, 255, 58, 39, 4, 255, 59, 38, 4, 255, 71, 42, 5, 255, 64, 41, 8, 255, 69, 38, 6, 255, 63, 31, 1, 255, 63, 30, 3, 255, 65, 32, 3, 255, 68, 32, 2, 255, 72, 30, 3, 255, 72, 31, 3, 255, 74, 37, 3, 255, 72, 36, 1, 255, 75, 36, 1, 255, 80, 40, 5, 255, 71, 36, 1, 255, 72, 38, 3, 255, 84, 36, 3, 255, 72, 38, 0, 255, 80, 38, 3, 255, 87, 39, 5, 255, 83, 40, 5, 255, 80, 39, 4, 255, 78, 44, 5, 255, 78, 42, 3, 255, 81, 40, 3, 255, 86, 40, 4, 255, 89, 43, 3, 255, 93, 46, 2, 255, 93, 48, 3, 255, 89, 46, 6, 255, 92, 47, 2, 255, 94, 48, 0, 255, 95, 47, 6, 255, 99, 50, 9, 255, 99, 49, 1, 255, 103, 48, 1, 255, 94, 51, 4, 255, 97, 50, 5, 255, 101, 50, 1, 255, 105, 54, 1, 255, 100, 57, 4, 255, 94, 54, 3, 255, 96, 52, 2, 255, 99, 52, 3, 255, 102, 52, 5, 255, 105, 53, 3, 255, 103, 51, 3, 255, 101, 48, 3, 255, 109, 49, 0, 255, 104, 51, 7, 255, 125, 55, 10, 255, 143, 58, 3, 255, 136, 61, 2, 255, 105, 51, 1, 255, 103, 42, 5, 255, 102, 51, 4, 255, 107, 52, 1, 255, 130, 51, 2, 255, 135, 53, 4, 255, 121, 50, 1, 255, 121, 55, 4, 255, 114, 51, 6, 255, 104, 49, 5, 255, 85, 47, 0, 255, 100, 49, 6, 255, 131, 58, 12, 255, 123, 50, 5, 255, 122, 52, 3, 255, 118, 52, 4, 255, 101, 50, 4, 255, 86, 41, 0, 255, 104, 45, 3, 255, 128, 53, 4, 255, 129, 54, 0, 255, 116, 54, 6, 255, 105, 51, 4, 255, 109, 52, 1, 255, 99, 51, 3, 255, 93, 52, 4, 255, 127, 60, 7, 255, 130, 54, 0, 255, 121, 58, 3, 255, 137, 61, 9, 255, 136, 60, 5, 255, 103, 48, 0, 255, 85, 49, 0, 255, 89, 52, 3, 255, 102, 59, 8, 255, 140, 67, 4, 255, 159, 72, 4, 255, 154, 71, 6, 255, 135, 61, 4, 255, 117, 52, 6, 255, 100, 53, 6, 255, 99, 51, 2, 255, 144, 63, 11, 255, 161, 73, 3, 255, 163, 67, 9, 255, 135, 53, 11, 255, 115, 58, 9, 255, 80, 51, 7, 255, 85, 48, 10, 255, 117, 60, 8, 255, 137, 68, 7, 255, 138, 70, 10, 255, 142, 69, 12, 255, 147, 73, 12, 255, 143, 67, 10, 255, 146, 69, 11, 255, 143, 67, 6, 255, 134, 62, 8, 255, 138, 69, 8, 255, 142, 68, 12, 255, 152, 80, 8, 255, 155, 78, 4, 255, 154, 71, 5, 255, 156, 73, 11, 255, 154, 73, 6, 255, 158, 77, 8, 255, 156, 75, 11, 255, 152, 76, 5, 255, 153, 77, 10, 255, 151, 75, 18, 255, 154, 78, 14, 255, 156, 82, 16, 255, 156, 79, 13, 255, 159, 76, 11, 255, 161, 80, 9, 255, 157, 81, 7, 255, 151, 73, 29, 255, 153, 76, 24, 255, 156, 81, 18, 255, 160, 87, 12, 255, 166, 88, 14, 255, 174, 91, 25, 255, 180, 97, 12, 255, 179, 98, 6, 255, 180, 94, 17, 255, 184, 97, 19, 255, 184, 100, 14, 255, 184, 98, 14, 255, 190, 104, 17, 255, 183, 100, 14, 255, 176, 94, 12, 255, 181, 96, 13, 255, 189, 107, 10, 255, 187, 106, 10, 255, 185, 103, 23, 255, 178, 94, 22, 255, 176, 96, 17, 255, 176, 100, 15, 255, 181, 102, 15, 255, 180, 101, 13, 255, 176, 104, 10, 255, 180, 110, 10, 255, 183, 104, 21, 255, 184, 101, 12, 255, 183, 100, 15, 255, 170, 97, 13, 255, 164, 100, 11, 255, 164, 95, 18, 255, 158, 91, 8, 255, 148, 92, 8, 255, 145, 88, 16, 255, 137, 83, 14, 255, 111, 73, 15, 255, 92, 80, 17, 255, 77, 75, 17, 255, 83, 75, 14, 255, 89, 76, 15, 255, 92, 77, 6, 255, 93, 74, 16, 255, 94, 74, 8, 255, 93, 73, 3, 255, 89, 72, 17, 255, 91, 73, 8, 255, 94, 73, 6, 255, 92, 74, 10, 255, 91, 71, 16, 255, 90, 71, 15, 255, 87, 71, 6, 255, 87, 73, 2, 255, 88, 71, 4, 255, 87, 70, 8, 255, 89, 67, 5, 255, 102, 68, 6, 255, 113, 73, 11, 255, 114, 72, 9, 255, 108, 67, 9, 255, 99, 65, 8, 255, 99, 65, 7, 255, 97, 65, 4, 255, 103, 70, 11, 255, 111, 67, 9, 255, 108, 66, 4, 255, 95, 66, 13, 255, 138, 102, 9, 255, 166, 113, 10, 255, 186, 140, 6, 255, 192, 147, 10, 255, 194, 147, 11, 255, 196, 150, 0, 255, 179, 126, 9, 255, 179, 125, 5, 255, 191, 138, 6, 255, 186, 131, 4, 255, 183, 125, 6, 255, 167, 106, 8, 255, 164, 115, 5, 255, 167, 118, 5, 255, 169, 120, 2, 255, 173, 121, 5, 255, 177, 121, 9, 255, 178, 118, 10, 255, 179, 120, 9, 255, 175, 120, 2, 255, 174, 119, 5, 255, 172, 114, 6, 255, 174, 115, 6, 255, 173, 114, 6, 255, 170, 112, 6, 255, 171, 111, 5, 255, 171, 108, 5, 255, 170, 106, 4, 255, 170, 106, 4, 255, 168, 100, 5, 255, 167, 98, 7, 255, 160, 96, 0, 255, 156, 92, 2, 255, 155, 89, 3, 255, 154, 86, 0, 255, 155, 85, 4, 255, 147, 76, 5, 255, 135, 62, 0, 255, 141, 72, 2, 255, 143, 77, 5, 255, 137, 73, 1, 255, 139, 75, 3, 255, 135, 69, 2, 255, 136, 66, 1, 255, 141, 66, 4, 255, 138, 69, 2, 255, 135, 70, 2, 255, 137, 70, 2, 255, 139, 68, 4, 255, 138, 67, 4, 255, 135, 61, 4, 255, 132, 60, 5, 255, 129, 61, 3, 255, 129, 61, 5, 255, 126, 57, 4, 255, 122, 55, 4, 255, 119, 53, 1, 255, 123, 54, 2, 255, 117, 50, 6, 255, 112, 48, 3, 255, 110, 47, 4, 255, 94, 34, 0, 255, 84, 27, 7, 255, 76, 29, 6, 255, 91, 32, 4, 255, 94, 34, 0, 255, 97, 38, 3, 255, 94, 33, 4, 255, 89, 32, 3, 255, 86, 33, 1, 255, 83, 26, 0, 255, 74, 25, 5, 255, 64, 24, 1, 255, 75, 26, 3, 255, 85, 25, 7, 255, 76, 17, 3, 255, 71, 22, 2, 255, 67, 25, 1, 255, 64, 17, 5, 255, 78, 22, 5, 255, 89, 30, 0, 255, 90, 26, 4, 255, 97, 27, 3, 255, 102, 27, 2, 255, 102, 27, 2, 255, 99, 28, 3, 255, 95, 27, 2, 255, 97, 27, 4, 255, 97, 27, 5, 255, 89, 27, 6, 255, 81, 20, 1, 255, 75, 18, 2, 255, 72, 18, 2, 255, 71, 19, 3, 255, 72, 23, 7, 255, 64, 20, 5, 255, 63, 18, 2, 255, 66, 18, 2, 255, 65, 17, 0, 255, 62, 18, 1, 255, 55, 16, 2, 255, 61, 16, 2, 255, 70, 20, 3, 255, 78, 23, 9, 255, 75, 21, 1, 255, 72, 20, 2, 255, 78, 20, 5, 255, 81, 18, 0, 255, 86, 25, 3, 255, 100, 29, 6, 255, 92, 28, 1, 255, 86, 29, 0, 255, 92, 30, 3, 255, 88, 28, 2, 255, 77, 22, 5, 255, 64, 18, 1, 255, 62, 20, 1, 255, 69, 19, 3, 255, 83, 20, 1, 255, 88, 24, 0, 255, 102, 33, 0, 255, 129, 48, 6, 255, 133, 53, 7, 255, 135, 54, 4, 255, 132, 52, 0, 255, 133, 57, 1, 255, 134, 59, 2, 255, 132, 56, 2, 255, 131, 54, 1, 255, 138, 57, 4, 255, 136, 55, 1, 255, 139, 56, 2, 255, 142, 58, 2, 255, 140, 58, 3, 255, 140, 60, 4, 255, 141, 62, 1, 255, 144, 62, 1, 255, 145, 60, 0, 255, 147, 62, 2, 255, 147, 67, 3, 255, 143, 65, 2, 255, 135, 52, 1, 255, 119, 41, 0, 255, 22, 20, 9, 255, 20, 22, 2, 255, 24, 28, 5, 255, 25, 28, 13, 255, 30, 31, 16, 255, 38, 42, 12, 255, 37, 46, 10, 255, 39, 51, 14, 255, 40, 54, 12, 255, 44, 62, 13, 255, 42, 60, 13, 255, 45, 62, 13, 255, 49, 63, 10, 255, 49, 62, 8, 255, 46, 59, 6, 255, 43, 53, 11, 255, 44, 53, 12, 255, 44, 52, 3, 255, 42, 49, 5, 255, 41, 42, 4, 255, 44, 44, 11, 255, 37, 37, 7, 255, 33, 32, 3, 255, 30, 27, 1, 255, 35, 28, 7, 255, 26, 24, 2, 255, 27, 24, 3, 255, 39, 21, 5, 255, 40, 24, 7, 255, 27, 21, 1, 255, 26, 17, 0, 255, 39, 22, 8, 255, 39, 24, 9, 255, 40, 24, 13, 255, 36, 24, 8, 255, 40, 26, 18, 255, 45, 35, 22, 255, 53, 35, 26, 255, 53, 33, 20, 255, 50, 28, 8, 255, 54, 34, 10, 255, 46, 28, 3, 255, 41, 23, 1, 255, 49, 27, 5, 255, 57, 31, 7, 255, 59, 40, 31, 255, 58, 51, 40, 255, 56, 49, 34, 255, 64, 60, 50, 255, 63, 59, 51, 255, 62, 62, 50, 255, 65, 66, 46, 255, 70, 57, 36, 255, 72, 52, 32, 255, 71, 55, 41, 255, 76, 57, 33, 255, 79, 47, 24, 255, 71, 40, 10, 255, 71, 45, 13, 255, 70, 48, 11, 255, 54, 46, 4, 255, 56, 46, 0, 255, 70, 44, 4, 255, 71, 37, 14, 255, 69, 38, 4, 255, 65, 32, 2, 255, 67, 33, 4, 255, 68, 32, 2, 255, 71, 33, 2, 255, 74, 33, 3, 255, 75, 35, 2, 255, 74, 36, 0, 255, 76, 38, 2, 255, 77, 37, 2, 255, 79, 38, 3, 255, 76, 36, 1, 255, 77, 38, 2, 255, 88, 40, 4, 255, 81, 38, 1, 255, 81, 41, 3, 255, 81, 40, 3, 255, 79, 35, 1, 255, 82, 41, 4, 255, 87, 43, 2, 255, 86, 43, 1, 255, 85, 42, 1, 255, 86, 43, 1, 255, 92, 45, 3, 255, 97, 46, 2, 255, 98, 45, 1, 255, 94, 43, 2, 255, 93, 50, 3, 255, 97, 54, 4, 255, 101, 49, 6, 255, 103, 50, 3, 255, 100, 49, 3, 255, 102, 48, 1, 255, 105, 49, 6, 255, 96, 43, 2, 255, 105, 46, 0, 255, 122, 50, 3, 255, 121, 46, 3, 255, 105, 51, 4, 255, 99, 48, 3, 255, 106, 43, 1, 255, 118, 47, 2, 255, 124, 50, 1, 255, 122, 50, 4, 255, 113, 45, 6, 255, 102, 43, 5, 255, 100, 44, 0, 255, 111, 42, 0, 255, 126, 51, 4, 255, 132, 50, 4, 255, 129, 57, 3, 255, 115, 49, 2, 255, 104, 46, 5, 255, 105, 44, 6, 255, 111, 47, 3, 255, 128, 54, 1, 255, 142, 56, 1, 255, 135, 54, 0, 255, 123, 54, 2, 255, 114, 51, 4, 255, 102, 46, 3, 255, 108, 46, 3, 255, 121, 55, 4, 255, 128, 54, 1, 255, 138, 55, 2, 255, 128, 53, 3, 255, 113, 52, 4, 255, 97, 46, 5, 255, 96, 40, 3, 255, 113, 46, 9, 255, 127, 55, 4, 255, 135, 59, 1, 255, 130, 56, 2, 255, 112, 49, 4, 255, 92, 42, 5, 255, 90, 46, 2, 255, 115, 56, 1, 255, 141, 65, 2, 255, 153, 69, 3, 255, 143, 59, 3, 255, 128, 48, 4, 255, 101, 42, 5, 255, 87, 45, 4, 255, 78, 46, 5, 255, 97, 52, 5, 255, 145, 60, 6, 255, 155, 63, 6, 255, 147, 60, 1, 255, 128, 52, 5, 255, 106, 49, 10, 255, 99, 52, 6, 255, 90, 51, 7, 255, 132, 56, 10, 255, 145, 67, 5, 255, 129, 60, 4, 255, 134, 59, 9, 255, 129, 61, 6, 255, 131, 65, 13, 255, 124, 65, 13, 255, 121, 66, 10, 255, 137, 61, 12, 255, 143, 67, 8, 255, 148, 69, 8, 255, 144, 68, 7, 255, 139, 60, 10, 255, 143, 68, 8, 255, 142, 67, 6, 255, 148, 69, 5, 255, 155, 70, 16, 255, 152, 69, 11, 255, 160, 71, 8, 255, 159, 75, 11, 255, 152, 71, 11, 255, 155, 73, 15, 255, 148, 74, 15, 255, 154, 75, 12, 255, 151, 70, 12, 255, 147, 72, 7, 255, 150, 78, 11, 255, 152, 76, 9, 255, 156, 76, 10, 255, 157, 78, 18, 255, 153, 78, 14, 255, 159, 79, 11, 255, 155, 78, 14, 255, 148, 77, 15, 255, 154, 80, 16, 255, 168, 88, 12, 255, 169, 95, 12, 255, 176, 93, 11, 255, 181, 94, 11, 255, 180, 92, 24, 255, 176, 91, 14, 255, 181, 94, 18, 255, 184, 95, 17, 255, 184, 100, 8, 255, 186, 103, 11, 255, 188, 101, 18, 255, 185, 102, 12, 255, 177, 98, 3, 255, 174, 100, 8, 255, 179, 101, 13, 255, 181, 100, 9, 255, 181, 99, 9, 255, 180, 102, 12, 255, 180, 104, 16, 255, 182, 107, 11, 255, 180, 107, 15, 255, 185, 103, 13, 255, 185, 100, 8, 255, 179, 99, 12, 255, 177, 97, 24, 255, 172, 94, 16, 255, 166, 90, 25, 255, 162, 94, 6, 255, 151, 92, 12, 255, 142, 89, 19, 255, 146, 90, 21, 255, 140, 86, 14, 255, 125, 81, 16, 255, 119, 80, 12, 255, 108, 79, 12, 255, 98, 76, 14, 255, 97, 76, 9, 255, 95, 75, 12, 255, 94, 78, 16, 255, 87, 75, 15, 255, 89, 74, 17, 255, 92, 75, 17, 255, 92, 75, 13, 255, 94, 76, 13, 255, 94, 76, 12, 255, 89, 72, 9, 255, 89, 71, 11, 255, 90, 72, 10, 255, 89, 70, 15, 255, 87, 70, 13, 255, 88, 72, 5, 255, 88, 73, 8, 255, 93, 71, 7, 255, 102, 74, 4, 255, 114, 72, 11, 255, 118, 71, 9, 255, 115, 70, 6, 255, 125, 69, 8, 255, 129, 71, 6, 255, 123, 71, 6, 255, 130, 73, 8, 255, 103, 68, 7, 255, 100, 66, 8, 255, 120, 69, 9, 255, 102, 66, 4, 255, 106, 69, 6, 255, 128, 94, 2, 255, 151, 106, 9, 255, 172, 130, 11, 255, 190, 146, 0, 255, 192, 145, 4, 255, 192, 145, 10, 255, 183, 132, 15, 255, 182, 133, 6, 255, 186, 136, 5, 255, 184, 130, 9, 255, 167, 110, 1, 255, 168, 108, 8, 255, 173, 117, 7, 255, 170, 115, 6, 255, 167, 114, 5, 255, 171, 116, 9, 255, 175, 114, 9, 255, 175, 111, 6, 255, 174, 116, 8, 255, 173, 115, 1, 255, 175, 116, 4, 255, 170, 111, 6, 255, 172, 113, 6, 255, 171, 111, 2, 255, 170, 110, 2, 255, 170, 110, 3, 255, 171, 108, 4, 255, 167, 101, 3, 255, 164, 96, 0, 255, 159, 89, 2, 255, 158, 88, 7, 255, 161, 90, 5, 255, 156, 85, 2, 255, 155, 85, 2, 255, 157, 87, 2, 255, 150, 81, 1, 255, 141, 74, 3, 255, 135, 67, 3, 255, 138, 70, 6, 255, 142, 73, 7, 255, 142, 73, 1, 255, 144, 75, 4, 255, 140, 71, 9, 255, 139, 72, 2, 255, 142, 72, 4, 255, 143, 73, 4, 255, 146, 74, 5, 255, 143, 72, 3, 255, 139, 69, 2, 255, 136, 66, 0, 255, 131, 60, 0, 255, 131, 61, 3, 255, 128, 62, 2, 255, 131, 62, 6, 255, 132, 60, 8, 255, 128, 54, 4, 255, 125, 51, 3, 255, 119, 48, 1, 255, 115, 48, 1, 255, 112, 48, 2, 255, 105, 43, 1, 255, 89, 30, 0, 255, 81, 26, 3, 255, 79, 32, 4, 255, 91, 35, 2, 255, 100, 40, 3, 255, 96, 36, 1, 255, 96, 34, 5, 255, 88, 31, 2, 255, 90, 30, 2, 255, 83, 26, 3, 255, 69, 24, 4, 255, 69, 22, 2, 255, 77, 22, 1, 255, 79, 23, 3, 255, 73, 23, 5, 255, 74, 24, 2, 255, 74, 21, 3, 255, 76, 25, 4, 255, 89, 28, 2, 255, 103, 27, 1, 255, 102, 29, 0, 255, 108, 30, 2, 255, 110, 30, 4, 255, 108, 30, 4, 255, 101, 27, 1, 255, 99, 27, 1, 255, 103, 29, 3, 255, 100, 25, 0, 255, 95, 28, 0, 255, 93, 31, 2, 255, 93, 28, 4, 255, 86, 26, 3, 255, 80, 25, 2, 255, 82, 22, 2, 255, 81, 23, 5, 255, 80, 22, 3, 255, 82, 22, 2, 255, 82, 23, 2, 255, 76, 21, 1, 255, 68, 19, 4, 255, 62, 21, 3, 255, 69, 20, 0, 255, 85, 26, 2, 255, 84, 26, 1, 255, 75, 22, 4, 255, 66, 17, 5, 255, 66, 22, 2, 255, 73, 27, 4, 255, 79, 23, 1, 255, 76, 21, 1, 255, 73, 23, 3, 255, 74, 18, 1, 255, 85, 22, 3, 255, 71, 18, 4, 255, 63, 14, 1, 255, 68, 20, 4, 255, 72, 24, 5, 255, 78, 24, 5, 255, 75, 21, 2, 255, 85, 23, 3, 255, 102, 28, 4, 255, 119, 43, 5, 255, 130, 51, 1, 255, 135, 54, 1, 255, 136, 57, 2, 255, 134, 56, 2, 255, 132, 55, 1, 255, 135, 56, 1, 255, 138, 58, 2, 255, 137, 57, 1, 255, 139, 58, 3, 255, 139, 59, 4, 255, 139, 59, 3, 255, 138, 57, 1, 255, 140, 59, 0, 255, 146, 63, 4, 255, 145, 60, 3, 255, 143, 58, 0, 255, 145, 62, 1, 255, 145, 59, 6, 255, 135, 48, 3, 255, 120, 40, 2, 255, 26, 24, 11, 255, 26, 28, 6, 255, 31, 37, 11, 255, 35, 39, 17, 255, 39, 42, 19, 255, 41, 50, 13, 255, 40, 52, 9, 255, 44, 57, 7, 255, 45, 57, 10, 255, 45, 59, 17, 255, 45, 64, 10, 255, 48, 63, 9, 255, 48, 58, 16, 255, 47, 61, 11, 255, 45, 61, 7, 255, 44, 61, 15, 255, 42, 53, 16, 255, 40, 44, 12, 255, 47, 42, 16, 255, 43, 42, 5, 255, 36, 40, 4, 255, 30, 30, 2, 255, 34, 26, 3, 255, 37, 24, 5, 255, 32, 25, 7, 255, 26, 22, 5, 255, 24, 19, 2, 255, 27, 18, 2, 255, 27, 15, 3, 255, 30, 16, 4, 255, 30, 15, 4, 255, 31, 16, 5, 255, 38, 19, 3, 255, 40, 24, 1, 255, 39, 22, 2, 255, 43, 30, 10, 255, 51, 36, 26, 255, 53, 37, 21, 255, 48, 33, 11, 255, 50, 34, 3, 255, 60, 35, 5, 255, 53, 28, 3, 255, 46, 23, 3, 255, 51, 25, 3, 255, 51, 28, 0, 255, 51, 45, 22, 255, 55, 51, 38, 255, 56, 48, 31, 255, 62, 59, 50, 255, 64, 61, 52, 255, 66, 58, 45, 255, 69, 66, 39, 255, 73, 59, 37, 255, 74, 53, 26, 255, 76, 56, 30, 255, 83, 60, 19, 255, 82, 48, 8, 255, 73, 36, 8, 255, 68, 41, 16, 255, 66, 51, 11, 255, 73, 48, 7, 255, 81, 44, 3, 255, 82, 44, 5, 255, 76, 42, 6, 255, 76, 39, 6, 255, 72, 31, 3, 255, 74, 30, 2, 255, 79, 33, 3, 255, 79, 34, 1, 255, 81, 36, 4, 255, 78, 38, 3, 255, 74, 37, 1, 255, 75, 35, 0, 255, 78, 35, 1, 255, 81, 37, 2, 255, 84, 39, 5, 255, 79, 35, 0, 255, 84, 40, 2, 255, 89, 37, 3, 255, 84, 42, 4, 255, 78, 40, 1, 255, 82, 38, 0, 255, 84, 43, 3, 255, 82, 43, 2, 255, 86, 44, 3, 255, 91, 45, 4, 255, 92, 44, 3, 255, 95, 47, 6, 255, 93, 46, 5, 255, 100, 49, 4, 255, 110, 54, 6, 255, 102, 49, 2, 255, 104, 46, 3, 255, 113, 48, 3, 255, 112, 51, 0, 255, 99, 45, 2, 255, 103, 42, 3, 255, 114, 48, 1, 255, 120, 56, 5, 255, 105, 49, 3, 255, 98, 43, 0, 255, 120, 50, 3, 255, 134, 54, 6, 255, 126, 50, 9, 255, 112, 40, 9, 255, 103, 36, 5, 255, 111, 42, 3, 255, 129, 51, 4, 255, 134, 52, 2, 255, 131, 54, 3, 255, 133, 52, 3, 255, 128, 50, 3, 255, 120, 51, 3, 255, 132, 49, 4, 255, 138, 51, 2, 255, 133, 55, 2, 255, 134, 59, 5, 255, 129, 55, 3, 255, 130, 53, 7, 255, 122, 53, 6, 255, 127, 55, 3, 255, 136, 50, 2, 255, 133, 54, 2, 255, 134, 52, 2, 255, 131, 54, 6, 255, 131, 54, 1, 255, 128, 51, 2, 255, 130, 55, 1, 255, 139, 57, 2, 255, 136, 57, 0, 255, 135, 59, 2, 255, 129, 58, 6, 255, 114, 48, 0, 255, 117, 46, 2, 255, 136, 60, 6, 255, 140, 57, 1, 255, 136, 60, 7, 255, 124, 58, 8, 255, 117, 51, 5, 255, 105, 50, 5, 255, 101, 50, 5, 255, 138, 60, 5, 255, 152, 57, 4, 255, 134, 55, 4, 255, 135, 56, 5, 255, 123, 58, 5, 255, 110, 55, 3, 255, 104, 55, 11, 255, 106, 50, 9, 255, 121, 54, 4, 255, 128, 67, 1, 255, 137, 67, 4, 255, 132, 59, 7, 255, 129, 61, 10, 255, 128, 59, 5, 255, 109, 60, 3, 255, 125, 63, 9, 255, 128, 60, 4, 255, 139, 69, 1, 255, 144, 66, 4, 255, 145, 68, 6, 255, 148, 66, 5, 255, 141, 66, 6, 255, 140, 68, 9, 255, 142, 66, 10, 255, 139, 65, 0, 255, 143, 63, 14, 255, 147, 67, 5, 255, 149, 69, 3, 255, 147, 71, 2, 255, 146, 68, 8, 255, 155, 73, 11, 255, 158, 72, 8, 255, 152, 74, 4, 255, 157, 75, 13, 255, 159, 73, 13, 255, 150, 70, 9, 255, 147, 71, 13, 255, 146, 70, 12, 255, 148, 70, 18, 255, 150, 74, 15, 255, 150, 76, 8, 255, 154, 79, 14, 255, 161, 83, 14, 255, 165, 83, 10, 255, 165, 77, 13, 255, 154, 73, 12, 255, 142, 77, 22, 255, 148, 81, 17, 255, 167, 88, 12, 255, 176, 93, 12, 255, 172, 94, 12, 255, 180, 89, 13, 255, 180, 92, 16, 255, 174, 93, 9, 255, 174, 93, 16, 255, 179, 94, 20, 255, 181, 94, 16, 255, 183, 97, 15, 255, 183, 100, 17, 255, 181, 98, 19, 255, 178, 93, 18, 255, 179, 96, 15, 255, 178, 99, 11, 255, 178, 102, 17, 255, 183, 100, 19, 255, 190, 104, 11, 255, 194, 108, 17, 255, 187, 109, 14, 255, 183, 107, 16, 255, 180, 103, 6, 255, 172, 100, 7, 255, 171, 93, 19, 255, 166, 96, 11, 255, 157, 95, 15, 255, 156, 90, 15, 255, 151, 91, 12, 255, 140, 92, 8, 255, 136, 88, 22, 255, 121, 80, 23, 255, 104, 74, 12, 255, 106, 80, 11, 255, 109, 86, 8, 255, 94, 80, 16, 255, 82, 74, 25, 255, 90, 80, 11, 255, 90, 74, 12, 255, 93, 79, 14, 255, 88, 77, 14, 255, 88, 75, 15, 255, 94, 76, 10, 255, 92, 72, 15, 255, 91, 74, 10, 255, 91, 75, 9, 255, 90, 72, 21, 255, 94, 73, 10, 255, 92, 71, 6, 255, 95, 74, 7, 255, 97, 74, 6, 255, 97, 72, 8, 255, 96, 73, 9, 255, 97, 73, 9, 255, 99, 71, 14, 255, 99, 69, 15, 255, 100, 70, 8, 255, 110, 73, 3, 255, 115, 72, 7, 255, 110, 68, 10, 255, 116, 66, 8, 255, 123, 72, 10, 255, 110, 66, 6, 255, 110, 63, 14, 255, 101, 65, 8, 255, 101, 63, 0, 255, 119, 69, 5, 255, 110, 68, 4, 255, 112, 63, 7, 255, 115, 71, 5, 255, 126, 92, 16, 255, 157, 111, 12, 255, 184, 138, 3, 255, 186, 143, 2, 255, 184, 134, 5, 255, 183, 137, 1, 255, 191, 145, 8, 255, 186, 141, 0, 255, 178, 129, 4, 255, 177, 125, 2, 255, 174, 121, 2, 255, 172, 119, 2, 255, 170, 118, 4, 255, 167, 116, 5, 255, 167, 114, 5, 255, 166, 111, 4, 255, 166, 109, 2, 255, 165, 111, 3, 255, 168, 115, 2, 255, 171, 115, 5, 255, 165, 107, 5, 255, 163, 107, 3, 255, 165, 108, 2, 255, 169, 109, 4, 255, 170, 107, 4, 255, 169, 104, 5, 255, 166, 98, 4, 255, 161, 91, 3, 255, 152, 82, 1, 255, 146, 78, 2, 255, 147, 79, 2, 255, 152, 85, 4, 255, 155, 85, 3, 255, 155, 84, 1, 255, 152, 79, 0, 255, 146, 75, 3, 255, 144, 76, 5, 255, 145, 79, 2, 255, 146, 77, 4, 255, 145, 75, 5, 255, 144, 75, 3, 255, 140, 72, 6, 255, 136, 70, 3, 255, 137, 69, 1, 255, 142, 69, 2, 255, 147, 70, 4, 255, 145, 71, 5, 255, 140, 71, 3, 255, 135, 69, 2, 255, 139, 66, 4, 255, 141, 68, 8, 255, 134, 63, 4, 255, 132, 61, 3, 255, 130, 58, 1, 255, 126, 57, 0, 255, 126, 54, 4, 255, 118, 43, 2, 255, 117, 49, 0, 255, 110, 46, 0, 255, 101, 37, 3, 255, 91, 34, 5, 255, 88, 35, 5, 255, 84, 35, 3, 255, 95, 36, 1, 255, 99, 39, 2, 255, 93, 33, 0, 255, 93, 29, 3, 255, 86, 27, 2, 255, 93, 30, 5, 255, 79, 27, 4, 255, 65, 23, 0, 255, 77, 23, 5, 255, 79, 23, 4, 255, 71, 24, 1, 255, 67, 25, 3, 255, 69, 20, 3, 255, 77, 20, 3, 255, 74, 17, 1, 255, 95, 27, 3, 255, 117, 31, 3, 255, 111, 31, 3, 255, 114, 31, 3, 255, 114, 30, 3, 255, 110, 31, 4, 255, 106, 31, 5, 255, 101, 26, 1, 255, 102, 27, 0, 255, 103, 27, 1, 255, 106, 28, 0, 255, 103, 28, 0, 255, 98, 28, 1, 255, 98, 28, 2, 255, 99, 27, 3, 255, 95, 24, 2, 255, 93, 24, 2, 255, 91, 21, 0, 255, 92, 21, 1, 255, 97, 25, 3, 255, 91, 23, 1, 255, 84, 22, 3, 255, 68, 21, 3, 255, 65, 18, 6, 255, 80, 24, 3, 255, 89, 26, 0, 255, 87, 26, 1, 255, 79, 20, 1, 255, 78, 21, 4, 255, 75, 19, 2, 255, 79, 23, 3, 255, 70, 21, 0, 255, 73, 21, 8, 255, 78, 17, 8, 255, 70, 16, 1, 255, 56, 15, 3, 255, 59, 15, 2, 255, 69, 17, 1, 255, 75, 22, 0, 255, 77, 24, 1, 255, 77, 20, 2, 255, 82, 22, 6, 255, 84, 21, 1, 255, 98, 30, 2, 255, 113, 38, 3, 255, 119, 41, 1, 255, 129, 51, 2, 255, 133, 55, 1, 255, 133, 56, 2, 255, 138, 58, 3, 255, 137, 58, 1, 255, 137, 58, 1, 255, 135, 59, 1, 255, 132, 59, 2, 255, 136, 58, 1, 255, 138, 57, 1, 255, 139, 59, 1, 255, 143, 61, 4, 255, 143, 61, 5, 255, 141, 60, 3, 255, 141, 61, 1, 255, 145, 61, 2, 255, 139, 53, 1, 255, 131, 51, 1, 255, 28, 26, 15, 255, 32, 37, 17, 255, 32, 38, 16, 255, 38, 42, 18, 255, 43, 50, 20, 255, 38, 56, 17, 255, 40, 61, 15, 255, 39, 55, 14, 255, 46, 57, 20, 255, 44, 62, 15, 255, 40, 62, 9, 255, 48, 63, 17, 255, 46, 56, 12, 255, 45, 59, 12, 255, 43, 55, 9, 255, 43, 53, 2, 255, 44, 51, 2, 255, 44, 45, 6, 255, 41, 37, 8, 255, 33, 34, 4, 255, 27, 27, 1, 255, 35, 28, 5, 255, 36, 24, 5, 255, 37, 22, 3, 255, 37, 21, 2, 255, 38, 22, 5, 255, 30, 17, 3, 255, 26, 20, 5, 255, 25, 17, 4, 255, 29, 14, 4, 255, 28, 14, 3, 255, 23, 18, 2, 255, 33, 20, 4, 255, 39, 24, 1, 255, 40, 24, 0, 255, 40, 27, 4, 255, 45, 31, 13, 255, 50, 36, 11, 255, 48, 36, 15, 255, 52, 38, 13, 255, 59, 36, 4, 255, 55, 32, 6, 255, 42, 22, 5, 255, 49, 22, 6, 255, 57, 26, 3, 255, 53, 39, 15, 255, 56, 52, 29, 255, 62, 53, 21, 255, 69, 56, 47, 255, 71, 60, 54, 255, 66, 60, 40, 255, 70, 68, 52, 255, 72, 60, 46, 255, 72, 53, 37, 255, 76, 55, 39, 255, 80, 50, 21, 255, 79, 45, 6, 255, 70, 40, 6, 255, 67, 40, 13, 255, 72, 48, 13, 255, 75, 47, 7, 255, 76, 45, 4, 255, 78, 42, 4, 255, 77, 35, 2, 255, 82, 38, 4, 255, 77, 32, 2, 255, 77, 30, 2, 255, 79, 31, 1, 255, 81, 36, 1, 255, 85, 39, 2, 255, 80, 37, 1, 255, 80, 38, 4, 255, 79, 36, 1, 255, 80, 36, 1, 255, 83, 37, 3, 255, 89, 40, 5, 255, 84, 36, 0, 255, 84, 38, 3, 255, 84, 38, 2, 255, 86, 41, 2, 255, 86, 40, 2, 255, 88, 42, 3, 255, 84, 41, 1, 255, 89, 41, 5, 255, 93, 44, 6, 255, 94, 47, 2, 255, 99, 48, 1, 255, 105, 49, 2, 255, 108, 48, 3, 255, 115, 48, 1, 255, 126, 51, 3, 255, 122, 52, 5, 255, 112, 48, 1, 255, 109, 46, 2, 255, 121, 52, 2, 255, 130, 49, 4, 255, 120, 47, 4, 255, 128, 53, 3, 255, 131, 58, 4, 255, 125, 47, 1, 255, 120, 48, 3, 255, 121, 48, 2, 255, 128, 44, 1, 255, 136, 51, 3, 255, 136, 54, 4, 255, 130, 53, 4, 255, 128, 51, 4, 255, 127, 49, 1, 255, 132, 50, 2, 255, 139, 54, 1, 255, 138, 54, 1, 255, 141, 54, 9, 255, 132, 51, 0, 255, 131, 48, 4, 255, 131, 50, 5, 255, 130, 50, 5, 255, 139, 55, 3, 255, 146, 61, 3, 255, 144, 57, 3, 255, 135, 53, 3, 255, 132, 55, 2, 255, 137, 54, 4, 255, 141, 52, 5, 255, 146, 55, 2, 255, 140, 63, 3, 255, 141, 62, 3, 255, 141, 56, 4, 255, 139, 58, 3, 255, 138, 59, 3, 255, 149, 61, 3, 255, 150, 62, 2, 255, 142, 60, 1, 255, 140, 58, 4, 255, 138, 57, 1, 255, 135, 57, 3, 255, 129, 49, 6, 255, 127, 55, 9, 255, 131, 57, 2, 255, 140, 58, 3, 255, 133, 59, 6, 255, 131, 60, 9, 255, 133, 55, 3, 255, 131, 55, 9, 255, 135, 57, 8, 255, 145, 61, 1, 255, 142, 65, 5, 255, 148, 66, 4, 255, 135, 58, 3, 255, 132, 57, 6, 255, 136, 64, 4, 255, 139, 66, 4, 255, 146, 63, 5, 255, 148, 68, 3, 255, 151, 65, 0, 255, 147, 67, 7, 255, 147, 63, 7, 255, 141, 60, 3, 255, 132, 62, 2, 255, 133, 58, 5, 255, 147, 58, 5, 255, 146, 61, 2, 255, 138, 57, 2, 255, 134, 60, 5, 255, 138, 61, 8, 255, 144, 68, 9, 255, 148, 69, 5, 255, 158, 69, 11, 255, 157, 68, 5, 255, 160, 71, 10, 255, 156, 70, 13, 255, 151, 71, 0, 255, 151, 73, 5, 255, 152, 74, 6, 255, 150, 73, 4, 255, 154, 76, 3, 255, 152, 70, 2, 255, 150, 70, 4, 255, 152, 76, 8, 255, 159, 79, 11, 255, 154, 77, 7, 255, 156, 79, 17, 255, 160, 81, 17, 255, 163, 83, 14, 255, 168, 87, 9, 255, 170, 89, 5, 255, 168, 85, 12, 255, 164, 81, 18, 255, 168, 85, 16, 255, 168, 90, 19, 255, 170, 93, 23, 255, 173, 92, 12, 255, 178, 89, 20, 255, 178, 91, 19, 255, 177, 89, 14, 255, 178, 93, 13, 255, 175, 98, 15, 255, 171, 95, 15, 255, 177, 96, 13, 255, 181, 96, 13, 255, 172, 90, 13, 255, 170, 92, 14, 255, 175, 96, 12, 255, 181, 101, 13, 255, 184, 103, 16, 255, 184, 105, 15, 255, 186, 102, 14, 255, 185, 105, 11, 255, 181, 102, 14, 255, 174, 97, 20, 255, 168, 95, 15, 255, 165, 92, 22, 255, 163, 96, 19, 255, 160, 92, 16, 255, 151, 92, 21, 255, 145, 90, 21, 255, 146, 89, 14, 255, 121, 83, 18, 255, 93, 77, 24, 255, 97, 81, 20, 255, 104, 87, 11, 255, 92, 78, 19, 255, 87, 74, 23, 255, 92, 81, 4, 255, 89, 81, 4, 255, 90, 74, 21, 255, 87, 77, 18, 255, 83, 76, 17, 255, 89, 81, 10, 255, 91, 74, 20, 255, 93, 73, 24, 255, 95, 76, 6, 255, 94, 79, 2, 255, 100, 79, 11, 255, 99, 77, 14, 255, 93, 74, 11, 255, 98, 74, 8, 255, 93, 74, 6, 255, 99, 71, 14, 255, 102, 71, 16, 255, 101, 71, 9, 255, 102, 75, 9, 255, 99, 72, 5, 255, 103, 72, 2, 255, 105, 74, 10, 255, 93, 72, 8, 255, 92, 71, 4, 255, 99, 69, 8, 255, 101, 68, 9, 255, 101, 67, 3, 255, 112, 71, 8, 255, 118, 68, 8, 255, 109, 63, 6, 255, 102, 67, 6, 255, 104, 65, 12, 255, 107, 59, 9, 255, 117, 66, 9, 255, 119, 69, 7, 255, 114, 65, 9, 255, 119, 73, 16, 255, 142, 89, 13, 255, 163, 114, 6, 255, 173, 131, 9, 255, 177, 128, 7, 255, 178, 127, 4, 255, 183, 135, 7, 255, 180, 132, 5, 255, 182, 133, 6, 255, 178, 129, 1, 255, 180, 128, 3, 255, 170, 113, 8, 255, 169, 112, 5, 255, 167, 110, 3, 255, 165, 110, 4, 255, 162, 106, 5, 255, 162, 105, 9, 255, 167, 106, 9, 255, 173, 109, 6, 255, 169, 102, 1, 255, 163, 95, 4, 255, 160, 93, 2, 255, 161, 93, 2, 255, 162, 95, 3, 255, 162, 98, 5, 255, 161, 94, 5, 255, 159, 89, 2, 255, 156, 85, 2, 255, 150, 81, 3, 255, 145, 78, 4, 255, 147, 83, 6, 255, 156, 89, 10, 255, 157, 89, 6, 255, 157, 86, 2, 255, 154, 82, 3, 255, 144, 73, 1, 255, 138, 70, 2, 255, 139, 73, 1, 255, 142, 75, 2, 255, 140, 69, 8, 255, 135, 65, 5, 255, 134, 68, 4, 255, 136, 73, 1, 255, 138, 71, 1, 255, 141, 71, 4, 255, 138, 67, 3, 255, 134, 66, 3, 255, 129, 65, 1, 255, 131, 67, 3, 255, 136, 70, 6, 255, 134, 68, 4, 255, 127, 59, 1, 255, 131, 60, 4, 255, 135, 61, 3, 255, 132, 60, 1, 255, 128, 56, 2, 255, 126, 50, 2, 255, 120, 52, 0, 255, 115, 49, 3, 255, 104, 39, 1, 255, 98, 37, 3, 255, 89, 32, 2, 255, 89, 34, 2, 255, 100, 37, 3, 255, 99, 37, 1, 255, 95, 36, 5, 255, 84, 25, 2, 255, 81, 27, 4, 255, 81, 26, 5, 255, 74, 23, 1, 255, 72, 25, 2, 255, 74, 25, 4, 255, 72, 22, 3, 255, 73, 24, 2, 255, 72, 25, 0, 255, 73, 26, 2, 255, 72, 24, 6, 255, 85, 28, 4, 255, 105, 36, 7, 255, 107, 30, 4, 255, 110, 31, 3, 255, 117, 32, 1, 255, 113, 30, 1, 255, 106, 29, 1, 255, 106, 30, 6, 255, 102, 26, 2, 255, 103, 25, 2, 255, 106, 28, 5, 255, 109, 30, 5, 255, 104, 27, 3, 255, 101, 26, 3, 255, 99, 24, 0, 255, 102, 22, 1, 255, 103, 23, 2, 255, 102, 28, 3, 255, 98, 27, 2, 255, 98, 24, 3, 255, 101, 23, 2, 255, 102, 25, 3, 255, 97, 24, 5, 255, 78, 24, 6, 255, 52, 11, 4, 255, 65, 21, 4, 255, 85, 24, 5, 255, 83, 21, 1, 255, 79, 22, 1, 255, 81, 21, 2, 255, 79, 20, 4, 255, 73, 18, 2, 255, 79, 22, 5, 255, 78, 23, 3, 255, 68, 25, 2, 255, 69, 21, 2, 255, 61, 15, 2, 255, 64, 21, 5, 255, 65, 18, 1, 255, 73, 23, 2, 255, 75, 22, 0, 255, 77, 22, 2, 255, 76, 21, 4, 255, 80, 22, 2, 255, 88, 27, 4, 255, 95, 28, 2, 255, 101, 30, 1, 255, 114, 41, 3, 255, 124, 50, 3, 255, 130, 54, 1, 255, 135, 57, 4, 255, 136, 57, 0, 255, 134, 55, 0, 255, 132, 56, 0, 255, 129, 56, 1, 255, 134, 57, 3, 255, 139, 60, 3, 255, 138, 62, 2, 255, 137, 61, 0, 255, 140, 60, 2, 255, 140, 60, 3, 255, 138, 60, 0, 255, 138, 62, 2, 255, 140, 59, 3, 255, 137, 58, 3, 255, 32, 35, 7, 255, 28, 37, 16, 255, 34, 46, 18, 255, 41, 53, 13, 255, 44, 57, 9, 255, 44, 62, 18, 255, 39, 61, 19, 255, 42, 64, 9, 255, 50, 68, 12, 255, 44, 63, 14, 255, 43, 64, 11, 255, 47, 64, 11, 255, 48, 59, 14, 255, 44, 56, 12, 255, 40, 47, 9, 255, 40, 43, 6, 255, 44, 43, 12, 255, 42, 36, 8, 255, 39, 36, 4, 255, 32, 28, 1, 255, 30, 20, 2, 255, 34, 25, 6, 255, 25, 22, 2, 255, 25, 23, 3, 255, 24, 17, 1, 255, 27, 18, 2, 255, 27, 20, 1, 255, 27, 22, 4, 255, 29, 19, 5, 255, 32, 14, 2, 255, 33, 18, 2, 255, 31, 20, 3, 255, 28, 20, 6, 255, 30, 16, 5, 255, 36, 18, 3, 255, 43, 24, 8, 255, 51, 32, 9, 255, 56, 35, 15, 255, 48, 38, 19, 255, 47, 35, 17, 255, 50, 35, 3, 255, 53, 36, 5, 255, 45, 25, 3, 255, 47, 22, 1, 255, 60, 28, 3, 255, 63, 33, 18, 255, 77, 55, 26, 255, 76, 55, 19, 255, 65, 54, 41, 255, 67, 59, 51, 255, 70, 63, 44, 255, 70, 65, 45, 255, 77, 63, 38, 255, 82, 61, 26, 255, 79, 53, 28, 255, 73, 45, 17, 255, 80, 44, 11, 255, 77, 45, 10, 255, 68, 43, 15, 255, 72, 45, 19, 255, 72, 49, 10, 255, 72, 46, 1, 255, 72, 42, 2, 255, 67, 36, 5, 255, 71, 40, 4, 255, 73, 35, 1, 255, 80, 34, 4, 255, 81, 35, 2, 255, 79, 38, 1, 255, 81, 40, 2, 255, 80, 36, 1, 255, 79, 35, 2, 255, 82, 36, 3, 255, 83, 38, 4, 255, 80, 37, 3, 255, 83, 38, 2, 255, 87, 39, 4, 255, 88, 39, 6, 255, 81, 40, 2, 255, 87, 42, 2, 255, 92, 40, 2, 255, 91, 41, 0, 255, 94, 45, 3, 255, 100, 48, 7, 255, 104, 44, 4, 255, 111, 46, 2, 255, 118, 48, 1, 255, 123, 50, 0, 255, 127, 49, 3, 255, 120, 48, 3, 255, 118, 43, 1, 255, 130, 42, 1, 255, 134, 50, 4, 255, 124, 48, 7, 255, 123, 46, 4, 255, 129, 51, 2, 255, 130, 53, 2, 255, 131, 48, 3, 255, 126, 45, 1, 255, 135, 50, 4, 255, 133, 49, 1, 255, 123, 49, 3, 255, 124, 49, 3, 255, 130, 50, 1, 255, 133, 46, 1, 255, 127, 42, 3, 255, 116, 40, 3, 255, 117, 43, 4, 255, 120, 46, 3, 255, 115, 43, 3, 255, 117, 43, 6, 255, 120, 42, 5, 255, 120, 45, 1, 255, 119, 46, 4, 255, 121, 42, 5, 255, 121, 41, 9, 255, 117, 43, 4, 255, 132, 51, 5, 255, 135, 48, 2, 255, 136, 54, 1, 255, 138, 56, 3, 255, 136, 54, 2, 255, 138, 52, 0, 255, 143, 53, 1, 255, 140, 53, 2, 255, 142, 55, 4, 255, 143, 57, 1, 255, 137, 56, 2, 255, 141, 56, 2, 255, 140, 58, 0, 255, 147, 60, 4, 255, 142, 54, 2, 255, 135, 55, 3, 255, 135, 54, 2, 255, 141, 56, 0, 255, 139, 55, 7, 255, 134, 55, 7, 255, 142, 58, 0, 255, 149, 61, 5, 255, 141, 58, 6, 255, 135, 55, 4, 255, 125, 50, 7, 255, 136, 57, 4, 255, 131, 55, 3, 255, 126, 58, 4, 255, 139, 62, 4, 255, 154, 62, 0, 255, 154, 63, 6, 255, 139, 60, 3, 255, 127, 54, 9, 255, 133, 55, 12, 255, 141, 59, 8, 255, 141, 61, 8, 255, 141, 56, 5, 255, 139, 59, 6, 255, 145, 60, 9, 255, 138, 59, 9, 255, 133, 58, 10, 255, 143, 66, 12, 255, 146, 67, 5, 255, 151, 66, 11, 255, 152, 65, 6, 255, 149, 67, 4, 255, 145, 66, 3, 255, 155, 72, 8, 255, 156, 70, 3, 255, 160, 69, 10, 255, 156, 70, 14, 255, 153, 69, 3, 255, 152, 67, 7, 255, 156, 71, 6, 255, 151, 68, 7, 255, 151, 72, 8, 255, 153, 72, 12, 255, 161, 74, 10, 255, 158, 76, 8, 255, 153, 75, 12, 255, 150, 71, 15, 255, 149, 74, 11, 255, 145, 73, 11, 255, 147, 72, 18, 255, 159, 80, 14, 255, 171, 85, 12, 255, 170, 84, 13, 255, 170, 86, 14, 255, 170, 85, 20, 255, 170, 87, 12, 255, 175, 90, 5, 255, 174, 86, 15, 255, 175, 92, 9, 255, 176, 97, 9, 255, 177, 93, 16, 255, 178, 93, 15, 255, 177, 95, 15, 255, 173, 96, 18, 255, 170, 92, 18, 255, 166, 88, 18, 255, 167, 88, 24, 255, 176, 94, 20, 255, 178, 98, 22, 255, 181, 102, 20, 255, 176, 102, 13, 255, 181, 102, 15, 255, 183, 103, 14, 255, 178, 98, 18, 255, 174, 99, 16, 255, 170, 103, 13, 255, 169, 101, 13, 255, 169, 97, 12, 255, 163, 95, 3, 255, 153, 88, 23, 255, 142, 88, 14, 255, 124, 84, 7, 255, 103, 78, 29, 255, 96, 79, 19, 255, 106, 82, 12, 255, 99, 81, 25, 255, 79, 77, 22, 255, 84, 78, 18, 255, 93, 80, 10, 255, 91, 82, 20, 255, 86, 79, 23, 255, 88, 79, 19, 255, 88, 77, 12, 255, 88, 78, 18, 255, 89, 76, 10, 255, 92, 74, 15, 255, 88, 78, 14, 255, 82, 75, 14, 255, 91, 70, 20, 255, 92, 75, 19, 255, 89, 78, 18, 255, 102, 80, 10, 255, 102, 73, 15, 255, 98, 71, 8, 255, 106, 77, 1, 255, 102, 74, 4, 255, 103, 75, 12, 255, 104, 73, 13, 255, 102, 73, 10, 255, 96, 70, 8, 255, 97, 70, 12, 255, 102, 71, 11, 255, 103, 71, 8, 255, 96, 72, 6, 255, 101, 74, 12, 255, 101, 70, 6, 255, 102, 70, 4, 255, 105, 66, 7, 255, 115, 72, 7, 255, 129, 71, 6, 255, 127, 70, 9, 255, 116, 71, 13, 255, 126, 71, 12, 255, 126, 68, 6, 255, 115, 64, 4, 255, 112, 66, 0, 255, 124, 78, 6, 255, 114, 63, 4, 255, 102, 63, 6, 255, 121, 79, 3, 255, 158, 110, 6, 255, 179, 129, 11, 255, 168, 113, 7, 255, 171, 120, 8, 255, 175, 127, 12, 255, 174, 123, 7, 255, 179, 124, 7, 255, 157, 100, 8, 255, 146, 87, 8, 255, 154, 98, 10, 255, 156, 103, 7, 255, 156, 104, 6, 255, 152, 99, 3, 255, 149, 100, 2, 255, 153, 100, 6, 255, 159, 101, 3, 255, 158, 96, 3, 255, 152, 90, 4, 255, 147, 87, 3, 255, 152, 90, 6, 255, 151, 88, 2, 255, 154, 89, 4, 255, 154, 87, 7, 255, 152, 84, 4, 255, 146, 79, 0, 255, 145, 80, 1, 255, 144, 80, 4, 255, 147, 80, 4, 255, 145, 78, 0, 255, 146, 79, 0, 255, 152, 79, 2, 255, 147, 76, 1, 255, 139, 72, 1, 255, 138, 68, 4, 255, 130, 61, 3, 255, 125, 61, 7, 255, 125, 66, 5, 255, 130, 69, 3, 255, 135, 68, 3, 255, 140, 70, 2, 255, 137, 68, 4, 255, 135, 65, 1, 255, 132, 66, 2, 255, 130, 67, 6, 255, 126, 63, 3, 255, 130, 65, 4, 255, 130, 63, 1, 255, 134, 66, 3, 255, 134, 64, 2, 255, 136, 65, 3, 255, 131, 61, 2, 255, 128, 60, 1, 255, 131, 60, 2, 255, 130, 58, 2, 255, 126, 57, 5, 255, 119, 51, 4, 255, 111, 46, 1, 255, 103, 42, 0, 255, 93, 33, 0, 255, 88, 32, 1, 255, 97, 37, 3, 255, 96, 37, 2, 255, 90, 31, 2, 255, 86, 25, 4, 255, 80, 26, 7, 255, 69, 25, 2, 255, 86, 30, 4, 255, 83, 26, 0, 255, 72, 27, 5, 255, 65, 20, 3, 255, 73, 18, 2, 255, 80, 25, 1, 255, 83, 29, 3, 255, 79, 27, 0, 255, 95, 27, 3, 255, 106, 30, 3, 255, 105, 32, 0, 255, 116, 34, 6, 255, 120, 36, 3, 255, 116, 36, 2, 255, 107, 28, 0, 255, 103, 27, 2, 255, 105, 28, 4, 255, 106, 25, 2, 255, 105, 25, 1, 255, 103, 28, 2, 255, 103, 31, 2, 255, 105, 31, 2, 255, 101, 28, 0, 255, 102, 29, 1, 255, 103, 26, 1, 255, 95, 21, 0, 255, 97, 24, 3, 255, 100, 26, 5, 255, 99, 22, 2, 255, 97, 20, 0, 255, 95, 21, 2, 255, 85, 20, 1, 255, 68, 20, 4, 255, 66, 22, 0, 255, 79, 18, 2, 255, 79, 18, 4, 255, 73, 20, 1, 255, 82, 25, 0, 255, 82, 24, 1, 255, 78, 24, 4, 255, 77, 22, 2, 255, 82, 24, 1, 255, 80, 25, 3, 255, 69, 20, 6, 255, 70, 18, 3, 255, 74, 21, 7, 255, 68, 17, 2, 255, 78, 22, 6, 255, 79, 21, 3, 255, 75, 22, 1, 255, 74, 22, 1, 255, 81, 23, 2, 255, 85, 25, 0, 255, 93, 29, 1, 255, 101, 33, 5, 255, 101, 31, 1, 255, 106, 34, 3, 255, 122, 49, 1, 255, 131, 53, 3, 255, 137, 56, 2, 255, 135, 55, 2, 255, 134, 54, 2, 255, 133, 55, 1, 255, 134, 56, 2, 255, 134, 57, 2, 255, 136, 61, 2, 255, 137, 61, 0, 255, 140, 59, 1, 255, 141, 60, 2, 255, 140, 60, 0, 255, 140, 60, 1, 255, 141, 59, 2, 255, 140, 58, 2, 255, 34, 47, 7, 255, 37, 47, 13, 255, 40, 52, 16, 255, 36, 54, 13, 255, 44, 65, 12, 255, 50, 64, 19, 255, 48, 62, 21, 255, 50, 70, 11, 255, 49, 69, 4, 255, 47, 64, 11, 255, 49, 61, 14, 255, 49, 59, 8, 255, 43, 54, 6, 255, 38, 49, 13, 255, 41, 44, 8, 255, 38, 38, 6, 255, 40, 34, 9, 255, 39, 25, 5, 255, 38, 27, 5, 255, 33, 26, 6, 255, 32, 23, 8, 255, 31, 20, 7, 255, 29, 16, 2, 255, 28, 17, 1, 255, 23, 16, 4, 255, 26, 18, 5, 255, 29, 15, 1, 255, 34, 17, 4, 255, 35, 18, 5, 255, 36, 16, 5, 255, 32, 14, 3, 255, 26, 20, 5, 255, 25, 20, 3, 255, 31, 17, 0, 255, 27, 15, 3, 255, 32, 23, 3, 255, 44, 31, 12, 255, 49, 34, 15, 255, 49, 42, 8, 255, 52, 38, 12, 255, 53, 33, 14, 255, 61, 32, 7, 255, 61, 30, 4, 255, 47, 27, 3, 255, 45, 23, 0, 255, 57, 36, 12, 255, 73, 52, 30, 255, 74, 46, 29, 255, 67, 56, 38, 255, 66, 61, 45, 255, 71, 66, 43, 255, 74, 62, 49, 255, 75, 60, 47, 255, 78, 65, 32, 255, 77, 54, 23, 255, 67, 50, 8, 255, 71, 51, 5, 255, 72, 46, 12, 255, 73, 40, 13, 255, 75, 47, 10, 255, 75, 52, 13, 255, 77, 44, 1, 255, 73, 36, 3, 255, 71, 37, 6, 255, 71, 37, 6, 255, 76, 38, 6, 255, 74, 39, 2, 255, 78, 39, 0, 255, 80, 38, 0, 255, 83, 38, 1, 255, 86, 35, 0, 255, 89, 38, 1, 255, 88, 41, 3, 255, 84, 39, 1, 255, 83, 39, 2, 255, 80, 37, 2, 255, 82, 41, 3, 255, 85, 42, 4, 255, 88, 44, 1, 255, 95, 44, 1, 255, 107, 47, 2, 255, 111, 45, 2, 255, 115, 47, 4, 255, 114, 48, 4, 255, 119, 39, 3, 255, 122, 41, 6, 255, 123, 43, 2, 255, 122, 45, 1, 255, 120, 38, 3, 255, 112, 35, 2, 255, 119, 41, 3, 255, 121, 42, 3, 255, 125, 42, 1, 255, 126, 41, 1, 255, 124, 45, 2, 255, 122, 46, 3, 255, 131, 48, 1, 255, 127, 47, 1, 255, 125, 45, 0, 255, 129, 46, 5, 255, 127, 44, 3, 255, 129, 49, 3, 255, 128, 52, 2, 255, 126, 49, 0, 255, 127, 41, 0, 255, 127, 42, 4, 255, 122, 42, 2, 255, 121, 43, 2, 255, 118, 44, 1, 255, 117, 43, 2, 255, 118, 40, 2, 255, 120, 40, 2, 255, 123, 46, 4, 255, 126, 48, 3, 255, 128, 45, 1, 255, 132, 44, 2, 255, 132, 46, 2, 255, 132, 49, 3, 255, 133, 52, 5, 255, 130, 49, 2, 255, 132, 51, 2, 255, 135, 51, 3, 255, 139, 55, 4, 255, 141, 55, 4, 255, 139, 51, 3, 255, 138, 50, 3, 255, 138, 54, 3, 255, 136, 56, 3, 255, 132, 50, 5, 255, 132, 53, 4, 255, 133, 54, 3, 255, 133, 49, 2, 255, 131, 51, 3, 255, 133, 52, 4, 255, 136, 54, 2, 255, 143, 60, 5, 255, 143, 55, 4, 255, 152, 61, 4, 255, 151, 58, 2, 255, 140, 55, 4, 255, 128, 51, 4, 255, 132, 53, 8, 255, 137, 58, 11, 255, 128, 59, 4, 255, 131, 59, 5, 255, 145, 58, 5, 255, 149, 59, 3, 255, 152, 61, 3, 255, 144, 60, 4, 255, 137, 60, 6, 255, 137, 59, 7, 255, 145, 62, 9, 255, 147, 61, 4, 255, 146, 61, 3, 255, 144, 61, 2, 255, 147, 61, 9, 255, 149, 65, 8, 255, 147, 64, 5, 255, 151, 67, 4, 255, 153, 66, 5, 255, 149, 66, 3, 255, 150, 66, 6, 255, 150, 67, 3, 255, 148, 66, 6, 255, 151, 69, 7, 255, 151, 65, 8, 255, 150, 64, 12, 255, 153, 69, 7, 255, 155, 71, 5, 255, 154, 71, 4, 255, 158, 72, 9, 255, 162, 74, 13, 255, 162, 76, 11, 255, 162, 80, 5, 255, 161, 77, 4, 255, 158, 75, 12, 255, 151, 72, 9, 255, 144, 69, 13, 255, 144, 69, 21, 255, 146, 74, 12, 255, 150, 81, 13, 255, 161, 83, 13, 255, 172, 84, 11, 255, 167, 84, 10, 255, 167, 84, 13, 255, 173, 89, 18, 255, 171, 89, 14, 255, 172, 86, 15, 255, 173, 88, 12, 255, 177, 92, 15, 255, 177, 94, 18, 255, 172, 94, 15, 255, 173, 92, 19, 255, 171, 92, 15, 255, 173, 89, 21, 255, 174, 91, 23, 255, 175, 96, 16, 255, 174, 98, 15, 255, 173, 103, 11, 255, 180, 99, 22, 255, 175, 93, 17, 255, 165, 97, 19, 255, 174, 97, 22, 255, 173, 95, 16, 255, 174, 98, 14, 255, 168, 94, 15, 255, 159, 89, 23, 255, 151, 90, 23, 255, 136, 89, 12, 255, 126, 89, 17, 255, 115, 83, 16, 255, 101, 77, 19, 255, 89, 81, 23, 255, 90, 81, 15, 255, 93, 80, 13, 255, 92, 77, 24, 255, 95, 83, 16, 255, 88, 84, 13, 255, 86, 80, 14, 255, 87, 79, 7, 255, 85, 78, 8, 255, 88, 81, 19, 255, 86, 75, 23, 255, 88, 75, 11, 255, 90, 78, 13, 255, 87, 77, 11, 255, 92, 79, 5, 255, 91, 81, 6, 255, 84, 76, 16, 255, 87, 74, 13, 255, 93, 83, 14, 255, 92, 77, 13, 255, 97, 75, 7, 255, 99, 74, 10, 255, 96, 72, 17, 255, 96, 74, 11, 255, 99, 72, 12, 255, 98, 69, 11, 255, 98, 73, 8, 255, 99, 74, 8, 255, 98, 71, 10, 255, 102, 70, 11, 255, 104, 69, 8, 255, 98, 68, 12, 255, 92, 68, 5, 255, 99, 72, 5, 255, 95, 68, 2, 255, 100, 67, 6, 255, 103, 64, 3, 255, 100, 63, 3, 255, 106, 67, 7, 255, 107, 68, 4, 255, 116, 66, 5, 255, 128, 69, 4, 255, 115, 68, 0, 255, 107, 62, 7, 255, 107, 68, 4, 255, 105, 67, 1, 255, 89, 61, 6, 255, 90, 65, 6, 255, 98, 60, 4, 255, 106, 64, 2, 255, 144, 93, 3, 255, 160, 106, 5, 255, 166, 118, 6, 255, 168, 120, 8, 255, 171, 117, 7, 255, 172, 113, 6, 255, 140, 85, 10, 255, 143, 90, 7, 255, 150, 96, 13, 255, 150, 96, 8, 255, 148, 92, 6, 255, 150, 93, 10, 255, 148, 93, 5, 255, 146, 96, 3, 255, 145, 93, 1, 255, 151, 94, 9, 255, 146, 88, 5, 255, 140, 82, 1, 255, 147, 87, 8, 255, 149, 88, 1, 255, 150, 88, 2, 255, 144, 84, 1, 255, 141, 82, 4, 255, 133, 75, 3, 255, 136, 78, 4, 255, 137, 80, 2, 255, 140, 82, 5, 255, 138, 79, 3, 255, 130, 70, 0, 255, 140, 72, 7, 255, 139, 72, 2, 255, 137, 71, 2, 255, 134, 67, 5, 255, 127, 62, 1, 255, 128, 65, 3, 255, 129, 67, 2, 255, 133, 70, 3, 255, 138, 69, 6, 255, 137, 66, 8, 255, 138, 70, 5, 255, 134, 67, 1, 255, 133, 65, 1, 255, 132, 63, 4, 255, 130, 63, 4, 255, 130, 65, 1, 255, 128, 62, 2, 255, 126, 59, 1, 255, 127, 58, 2, 255, 127, 60, 2, 255, 124, 57, 1, 255, 122, 53, 2, 255, 125, 52, 2, 255, 125, 55, 1, 255, 124, 59, 5, 255, 123, 54, 3, 255, 115, 50, 2, 255, 102, 43, 2, 255, 100, 38, 2, 255, 88, 31, 1, 255, 87, 34, 2, 255, 93, 36, 4, 255, 97, 33, 5, 255, 87, 26, 3, 255, 76, 22, 3, 255, 75, 28, 3, 255, 87, 27, 2, 255, 86, 27, 1, 255, 88, 28, 1, 255, 89, 33, 3, 255, 95, 36, 6, 255, 86, 28, 2, 255, 77, 25, 3, 255, 92, 30, 2, 255, 104, 28, 7, 255, 105, 26, 1, 255, 109, 34, 0, 255, 110, 32, 3, 255, 117, 34, 1, 255, 121, 37, 4, 255, 116, 34, 3, 255, 110, 32, 2, 255, 109, 31, 3, 255, 110, 29, 2, 255, 107, 26, 3, 255, 104, 26, 4, 255, 102, 26, 0, 255, 105, 31, 1, 255, 105, 31, 1, 255, 105, 30, 2, 255, 103, 29, 4, 255, 94, 22, 3, 255, 93, 21, 3, 255, 101, 28, 6, 255, 99, 24, 1, 255, 98, 24, 1, 255, 95, 26, 5, 255, 90, 21, 4, 255, 83, 25, 4, 255, 69, 20, 0, 255, 76, 21, 4, 255, 75, 23, 3, 255, 74, 20, 0, 255, 89, 24, 5, 255, 85, 25, 1, 255, 79, 22, 1, 255, 79, 28, 5, 255, 80, 27, 4, 255, 79, 25, 5, 255, 69, 20, 4, 255, 64, 20, 3, 255, 70, 21, 4, 255, 72, 16, 0, 255, 81, 22, 3, 255, 82, 24, 6, 255, 76, 23, 2, 255, 76, 24, 1, 255, 84, 28, 3, 255, 90, 31, 2, 255, 94, 30, 0, 255, 102, 33, 3, 255, 101, 31, 5, 255, 96, 26, 4, 255, 110, 39, 1, 255, 128, 51, 2, 255, 136, 54, 1, 255, 136, 54, 3, 255, 134, 54, 6, 255, 135, 57, 3, 255, 135, 54, 1, 255, 132, 51, 0, 255, 135, 59, 3, 255, 136, 58, 2, 255, 139, 57, 2, 255, 139, 57, 2, 255, 139, 58, 4, 255, 140, 59, 3, 255, 139, 57, 1, 255, 141, 57, 2, 255, 32, 47, 23, 255, 39, 53, 28, 255, 48, 63, 23, 255, 45, 62, 28, 255, 43, 66, 16, 255, 39, 64, 15, 255, 48, 64, 25, 255, 52, 66, 14, 255, 49, 66, 7, 255, 47, 63, 8, 255, 45, 59, 6, 255, 48, 55, 8, 255, 37, 46, 6, 255, 31, 42, 5, 255, 38, 37, 3, 255, 37, 33, 2, 255, 36, 28, 2, 255, 39, 28, 8, 255, 34, 30, 8, 255, 31, 21, 3, 255, 26, 21, 3, 255, 28, 19, 4, 255, 33, 14, 1, 255, 33, 16, 0, 255, 30, 17, 3, 255, 30, 17, 4, 255, 35, 19, 4, 255, 37, 17, 4, 255, 25, 18, 1, 255, 25, 21, 3, 255, 34, 17, 3, 255, 26, 19, 2, 255, 31, 18, 1, 255, 44, 19, 4, 255, 35, 18, 6, 255, 29, 21, 2, 255, 36, 29, 12, 255, 47, 32, 20, 255, 54, 40, 15, 255, 63, 42, 16, 255, 66, 35, 13, 255, 64, 34, 6, 255, 56, 32, 5, 255, 48, 27, 6, 255, 49, 21, 2, 255, 52, 33, 16, 255, 63, 49, 34, 255, 75, 49, 21, 255, 82, 60, 31, 255, 79, 62, 44, 255, 80, 61, 42, 255, 77, 64, 50, 255, 78, 65, 44, 255, 78, 68, 29, 255, 74, 62, 8, 255, 82, 49, 18, 255, 82, 50, 9, 255, 75, 44, 8, 255, 64, 34, 11, 255, 67, 49, 13, 255, 76, 53, 17, 255, 77, 43, 8, 255, 78, 40, 2, 255, 75, 42, 0, 255, 73, 42, 7, 255, 79, 34, 2, 255, 82, 38, 5, 255, 93, 38, 8, 255, 84, 35, 3, 255, 81, 39, 5, 255, 87, 39, 3, 255, 88, 41, 1, 255, 88, 40, 1, 255, 94, 41, 3, 255, 98, 43, 7, 255, 93, 38, 4, 255, 98, 40, 4, 255, 111, 43, 1, 255, 118, 47, 3, 255, 122, 45, 2, 255, 128, 47, 5, 255, 127, 45, 5, 255, 119, 41, 3, 255, 106, 37, 1, 255, 110, 40, 4, 255, 111, 42, 5, 255, 109, 41, 0, 255, 106, 49, 1, 255, 107, 48, 3, 255, 109, 46, 5, 255, 113, 49, 5, 255, 110, 50, 4, 255, 111, 46, 2, 255, 114, 47, 4, 255, 117, 48, 3, 255, 121, 45, 2, 255, 122, 46, 1, 255, 126, 49, 3, 255, 132, 50, 1, 255, 137, 50, 2, 255, 130, 46, 1, 255, 126, 50, 4, 255, 130, 48, 2, 255, 132, 47, 7, 255, 117, 45, 6, 255, 118, 40, 1, 255, 135, 45, 2, 255, 131, 46, 1, 255, 131, 45, 3, 255, 134, 44, 4, 255, 129, 44, 4, 255, 127, 47, 3, 255, 128, 48, 2, 255, 127, 46, 2, 255, 125, 44, 3, 255, 110, 41, 1, 255, 103, 39, 5, 255, 109, 41, 6, 255, 124, 45, 2, 255, 133, 46, 2, 255, 131, 50, 1, 255, 131, 51, 0, 255, 134, 48, 2, 255, 134, 48, 1, 255, 135, 51, 3, 255, 129, 44, 2, 255, 128, 45, 7, 255, 129, 49, 5, 255, 130, 47, 7, 255, 139, 45, 5, 255, 137, 49, 4, 255, 129, 52, 3, 255, 131, 52, 1, 255, 138, 54, 0, 255, 136, 53, 6, 255, 137, 55, 3, 255, 143, 55, 0, 255, 147, 55, 5, 255, 146, 58, 6, 255, 138, 56, 1, 255, 139, 59, 4, 255, 146, 61, 3, 255, 146, 62, 1, 255, 144, 61, 1, 255, 148, 59, 2, 255, 150, 59, 6, 255, 140, 57, 3, 255, 141, 58, 2, 255, 140, 58, 2, 255, 144, 62, 6, 255, 149, 63, 8, 255, 148, 62, 4, 255, 151, 66, 5, 255, 146, 61, 4, 255, 149, 63, 6, 255, 148, 64, 0, 255, 148, 66, 2, 255, 148, 67, 2, 255, 149, 67, 2, 255, 152, 66, 6, 255, 148, 63, 2, 255, 150, 63, 8, 255, 153, 68, 12, 255, 149, 68, 5, 255, 150, 69, 2, 255, 151, 66, 5, 255, 153, 68, 11, 255, 152, 67, 11, 255, 158, 74, 6, 255, 160, 74, 11, 255, 163, 76, 12, 255, 166, 81, 3, 255, 164, 75, 10, 255, 167, 78, 12, 255, 160, 74, 14, 255, 151, 71, 12, 255, 147, 71, 7, 255, 154, 75, 14, 255, 162, 81, 9, 255, 166, 80, 7, 255, 166, 83, 10, 255, 167, 85, 11, 255, 169, 84, 11, 255, 166, 86, 11, 255, 165, 86, 12, 255, 170, 87, 10, 255, 173, 85, 18, 255, 173, 88, 18, 255, 173, 92, 10, 255, 173, 91, 24, 255, 170, 88, 21, 255, 171, 89, 13, 255, 171, 93, 13, 255, 174, 91, 16, 255, 176, 93, 20, 255, 181, 96, 24, 255, 181, 99, 17, 255, 174, 97, 11, 255, 172, 95, 13, 255, 171, 94, 19, 255, 166, 96, 14, 255, 171, 94, 14, 255, 167, 95, 16, 255, 158, 89, 14, 255, 144, 90, 14, 255, 128, 80, 31, 255, 112, 76, 22, 255, 103, 78, 21, 255, 103, 82, 28, 255, 96, 80, 28, 255, 92, 81, 22, 255, 93, 79, 30, 255, 96, 80, 17, 255, 90, 81, 15, 255, 92, 83, 20, 255, 99, 82, 18, 255, 99, 80, 9, 255, 93, 81, 11, 255, 90, 83, 21, 255, 92, 83, 17, 255, 89, 81, 8, 255, 90, 83, 11, 255, 91, 81, 16, 255, 92, 81, 17, 255, 98, 78, 18, 255, 91, 78, 13, 255, 90, 79, 12, 255, 98, 82, 15, 255, 98, 76, 16, 255, 91, 78, 19, 255, 92, 78, 11, 255, 96, 76, 14, 255, 93, 76, 9, 255, 97, 76, 8, 255, 97, 72, 15, 255, 96, 76, 11, 255, 96, 76, 9, 255, 102, 72, 17, 255, 100, 72, 11, 255, 101, 74, 9, 255, 101, 74, 9, 255, 100, 72, 9, 255, 98, 69, 6, 255, 99, 68, 2, 255, 100, 73, 1, 255, 102, 72, 3, 255, 97, 67, 6, 255, 97, 67, 7, 255, 97, 64, 6, 255, 94, 62, 9, 255, 105, 69, 14, 255, 103, 67, 6, 255, 111, 67, 7, 255, 113, 67, 7, 255, 95, 65, 2, 255, 97, 63, 9, 255, 95, 61, 10, 255, 100, 61, 5, 255, 100, 60, 8, 255, 98, 59, 5, 255, 104, 63, 6, 255, 99, 64, 10, 255, 99, 51, 8, 255, 125, 76, 11, 255, 146, 102, 11, 255, 162, 108, 6, 255, 162, 111, 0, 255, 154, 110, 7, 255, 156, 111, 7, 255, 146, 100, 1, 255, 134, 86, 8, 255, 142, 94, 6, 255, 143, 92, 0, 255, 141, 90, 8, 255, 140, 90, 8, 255, 137, 89, 7, 255, 136, 85, 6, 255, 139, 86, 7, 255, 140, 84, 9, 255, 134, 76, 3, 255, 143, 82, 5, 255, 147, 84, 6, 255, 139, 81, 0, 255, 138, 78, 6, 255, 135, 76, 8, 255, 133, 75, 4, 255, 131, 75, 1, 255, 136, 79, 4, 255, 138, 82, 4, 255, 136, 82, 4, 255, 136, 73, 7, 255, 131, 69, 5, 255, 133, 68, 2, 255, 131, 68, 3, 255, 127, 62, 5, 255, 130, 63, 3, 255, 131, 66, 0, 255, 133, 68, 3, 255, 135, 70, 9, 255, 132, 66, 4, 255, 133, 67, 1, 255, 135, 68, 2, 255, 133, 65, 2, 255, 129, 62, 2, 255, 129, 63, 4, 255, 129, 64, 5, 255, 124, 60, 4, 255, 122, 60, 1, 255, 124, 59, 5, 255, 118, 52, 6, 255, 117, 51, 7, 255, 117, 54, 5, 255, 115, 52, 1, 255, 120, 53, 2, 255, 124, 52, 1, 255, 122, 57, 4, 255, 120, 55, 2, 255, 118, 50, 2, 255, 107, 39, 2, 255, 97, 35, 5, 255, 91, 34, 3, 255, 97, 33, 6, 255, 95, 31, 6, 255, 86, 29, 2, 255, 81, 27, 0, 255, 82, 34, 2, 255, 80, 29, 1, 255, 71, 24, 3, 255, 80, 31, 5, 255, 106, 38, 3, 255, 118, 52, 3, 255, 126, 54, 2, 255, 116, 37, 4, 255, 90, 24, 2, 255, 99, 29, 7, 255, 110, 31, 7, 255, 108, 29, 1, 255, 109, 34, 5, 255, 111, 30, 2, 255, 114, 30, 0, 255, 116, 33, 3, 255, 115, 30, 3, 255, 114, 32, 3, 255, 110, 30, 2, 255, 114, 30, 3, 255, 112, 28, 2, 255, 106, 27, 1, 255, 106, 28, 0, 255, 104, 28, 1, 255, 106, 30, 3, 255, 103, 27, 1, 255, 105, 28, 3, 255, 97, 27, 2, 255, 97, 27, 3, 255, 96, 25, 1, 255, 100, 26, 2, 255, 101, 26, 2, 255, 99, 25, 5, 255, 93, 24, 3, 255, 85, 25, 2, 255, 71, 20, 0, 255, 71, 20, 1, 255, 74, 23, 2, 255, 79, 24, 1, 255, 89, 27, 2, 255, 92, 27, 2, 255, 83, 27, 3, 255, 76, 24, 2, 255, 69, 22, 0, 255, 68, 24, 1, 255, 75, 19, 4, 255, 74, 19, 2, 255, 74, 20, 1, 255, 74, 19, 0, 255, 78, 21, 1, 255, 78, 21, 2, 255, 75, 20, 1, 255, 76, 18, 0, 255, 77, 18, 1, 255, 84, 24, 3, 255, 87, 26, 3, 255, 92, 28, 4, 255, 95, 28, 3, 255, 91, 23, 1, 255, 116, 38, 5, 255, 133, 53, 5, 255, 137, 56, 0, 255, 133, 53, 0, 255, 129, 52, 3, 255, 128, 53, 2, 255, 130, 51, 1, 255, 130, 52, 1, 255, 132, 58, 3, 255, 133, 57, 1, 255, 136, 56, 1, 255, 135, 55, 1, 255, 137, 58, 4, 255, 137, 58, 1, 255, 139, 58, 2, 255, 140, 58, 2, 255, 43, 56, 25, 255, 39, 60, 21, 255, 39, 67, 11, 255, 48, 70, 26, 255, 48, 66, 17, 255, 52, 71, 16, 255, 50, 65, 20, 255, 49, 63, 12, 255, 48, 65, 6, 255, 45, 61, 5, 255, 39, 50, 3, 255, 37, 42, 5, 255, 39, 40, 5, 255, 35, 36, 1, 255, 31, 29, 2, 255, 27, 28, 7, 255, 22, 20, 3, 255, 30, 20, 4, 255, 30, 22, 2, 255, 24, 16, 0, 255, 38, 19, 5, 255, 37, 18, 4, 255, 25, 15, 0, 255, 28, 19, 5, 255, 25, 17, 6, 255, 27, 10, 0, 255, 46, 16, 5, 255, 39, 16, 3, 255, 38, 13, 2, 255, 41, 14, 3, 255, 33, 17, 2, 255, 30, 17, 2, 255, 24, 17, 3, 255, 34, 17, 5, 255, 39, 14, 3, 255, 36, 20, 3, 255, 47, 30, 10, 255, 52, 32, 12, 255, 45, 38, 15, 255, 56, 41, 24, 255, 60, 41, 16, 255, 53, 40, 3, 255, 54, 36, 4, 255, 53, 28, 3, 255, 51, 25, 0, 255, 57, 32, 7, 255, 70, 49, 27, 255, 77, 54, 34, 255, 84, 58, 32, 255, 83, 59, 41, 255, 72, 57, 47, 255, 73, 64, 56, 255, 71, 66, 47, 255, 71, 65, 37, 255, 69, 57, 22, 255, 79, 41, 11, 255, 87, 48, 14, 255, 83, 51, 10, 255, 61, 44, 9, 255, 58, 48, 18, 255, 71, 52, 22, 255, 70, 44, 8, 255, 72, 40, 3, 255, 77, 39, 4, 255, 78, 45, 5, 255, 80, 38, 0, 255, 79, 39, 0, 255, 79, 39, 2, 255, 79, 39, 2, 255, 90, 41, 3, 255, 99, 43, 2, 255, 103, 45, 1, 255, 109, 44, 2, 255, 109, 42, 1, 255, 111, 42, 2, 255, 113, 40, 1, 255, 115, 39, 2, 255, 115, 41, 4, 255, 111, 43, 3, 255, 108, 45, 3, 255, 105, 42, 1, 255, 102, 41, 1, 255, 101, 41, 2, 255, 94, 43, 1, 255, 92, 46, 4, 255, 93, 44, 4, 255, 95, 45, 3, 255, 94, 53, 4, 255, 97, 52, 4, 255, 105, 52, 4, 255, 109, 52, 0, 255, 110, 55, 5, 255, 102, 55, 3, 255, 104, 55, 3, 255, 109, 53, 4, 255, 111, 53, 3, 255, 110, 50, 5, 255, 105, 49, 1, 255, 110, 56, 5, 255, 110, 55, 1, 255, 112, 51, 0, 255, 116, 51, 3, 255, 112, 47, 0, 255, 115, 49, 5, 255, 110, 47, 6, 255, 107, 45, 1, 255, 116, 49, 1, 255, 120, 51, 1, 255, 127, 49, 3, 255, 128, 49, 1, 255, 134, 53, 5, 255, 134, 51, 3, 255, 130, 47, 0, 255, 127, 48, 2, 255, 121, 45, 2, 255, 103, 35, 1, 255, 105, 41, 2, 255, 115, 47, 2, 255, 123, 46, 0, 255, 136, 54, 2, 255, 134, 53, 5, 255, 136, 54, 6, 255, 137, 53, 0, 255, 136, 54, 5, 255, 136, 55, 4, 255, 133, 55, 1, 255, 133, 55, 3, 255, 132, 51, 2, 255, 132, 52, 2, 255, 130, 47, 0, 255, 125, 49, 1, 255, 118, 51, 0, 255, 120, 49, 1, 255, 130, 50, 4, 255, 132, 51, 3, 255, 138, 54, 2, 255, 148, 57, 4, 255, 147, 57, 5, 255, 144, 61, 3, 255, 140, 59, 1, 255, 143, 58, 5, 255, 144, 60, 7, 255, 143, 60, 1, 255, 147, 62, 0, 255, 150, 60, 1, 255, 149, 63, 7, 255, 141, 63, 6, 255, 143, 63, 4, 255, 144, 62, 2, 255, 143, 63, 2, 255, 144, 62, 4, 255, 145, 62, 3, 255, 147, 68, 3, 255, 148, 64, 1, 255, 154, 62, 7, 255, 153, 64, 5, 255, 153, 68, 5, 255, 151, 67, 3, 255, 148, 61, 6, 255, 153, 64, 10, 255, 151, 66, 12, 255, 153, 66, 14, 255, 154, 69, 9, 255, 150, 67, 13, 255, 148, 66, 7, 255, 150, 67, 3, 255, 151, 69, 5, 255, 154, 69, 18, 255, 154, 69, 9, 255, 157, 72, 6, 255, 164, 76, 15, 255, 163, 77, 4, 255, 162, 76, 6, 255, 160, 75, 10, 255, 158, 75, 14, 255, 151, 72, 17, 255, 148, 72, 12, 255, 162, 82, 18, 255, 170, 85, 14, 255, 164, 82, 17, 255, 162, 81, 14, 255, 165, 82, 12, 255, 170, 85, 18, 255, 170, 87, 16, 255, 168, 86, 12, 255, 168, 86, 15, 255, 166, 88, 17, 255, 163, 87, 9, 255, 163, 85, 6, 255, 167, 88, 17, 255, 166, 90, 17, 255, 173, 95, 14, 255, 181, 93, 12, 255, 181, 95, 22, 255, 177, 96, 14, 255, 171, 94, 25, 255, 168, 94, 23, 255, 166, 95, 20, 255, 167, 96, 22, 255, 158, 89, 13, 255, 147, 88, 24, 255, 145, 85, 21, 255, 130, 83, 11, 255, 109, 79, 18, 255, 95, 77, 25, 255, 90, 80, 24, 255, 91, 83, 10, 255, 93, 82, 16, 255, 97, 85, 14, 255, 92, 78, 16, 255, 95, 80, 30, 255, 88, 80, 26, 255, 105, 81, 7, 255, 97, 80, 17, 255, 90, 84, 10, 255, 98, 80, 17, 255, 98, 79, 25, 255, 91, 81, 14, 255, 91, 82, 19, 255, 93, 83, 19, 255, 92, 82, 15, 255, 92, 82, 19, 255, 92, 81, 23, 255, 93, 82, 17, 255, 104, 81, 14, 255, 99, 81, 11, 255, 95, 82, 16, 255, 99, 79, 10, 255, 104, 76, 4, 255, 92, 74, 10, 255, 94, 77, 9, 255, 102, 75, 16, 255, 100, 75, 17, 255, 98, 72, 21, 255, 101, 73, 17, 255, 101, 72, 11, 255, 103, 74, 17, 255, 102, 73, 19, 255, 102, 72, 11, 255, 103, 72, 6, 255, 101, 72, 2, 255, 101, 70, 4, 255, 103, 72, 9, 255, 107, 73, 11, 255, 104, 73, 8, 255, 103, 65, 10, 255, 95, 59, 14, 255, 93, 61, 6, 255, 95, 62, 8, 255, 98, 67, 8, 255, 109, 66, 4, 255, 103, 62, 4, 255, 91, 64, 8, 255, 96, 63, 8, 255, 107, 64, 7, 255, 107, 60, 1, 255, 112, 66, 8, 255, 103, 59, 6, 255, 96, 56, 2, 255, 98, 57, 2, 255, 100, 57, 4, 255, 99, 60, 4, 255, 98, 59, 5, 255, 104, 59, 8, 255, 108, 67, 1, 255, 140, 92, 7, 255, 145, 93, 5, 255, 144, 100, 6, 255, 151, 103, 6, 255, 150, 95, 11, 255, 147, 95, 1, 255, 143, 89, 2, 255, 140, 82, 3, 255, 142, 85, 4, 255, 140, 83, 3, 255, 139, 82, 6, 255, 137, 82, 8, 255, 132, 81, 3, 255, 131, 82, 7, 255, 129, 79, 7, 255, 134, 81, 2, 255, 139, 82, 11, 255, 136, 78, 11, 255, 133, 76, 4, 255, 129, 75, 2, 255, 131, 76, 6, 255, 126, 72, 2, 255, 129, 74, 4, 255, 141, 80, 9, 255, 137, 78, 1, 255, 140, 76, 2, 255, 133, 71, 0, 255, 134, 71, 3, 255, 125, 61, 3, 255, 126, 63, 1, 255, 134, 70, 5, 255, 133, 68, 4, 255, 133, 68, 4, 255, 133, 71, 4, 255, 130, 71, 1, 255, 129, 70, 0, 255, 134, 67, 2, 255, 130, 62, 2, 255, 131, 62, 4, 255, 131, 65, 4, 255, 126, 61, 1, 255, 122, 58, 3, 255, 124, 62, 1, 255, 123, 58, 1, 255, 121, 53, 3, 255, 119, 52, 3, 255, 116, 53, 1, 255, 116, 53, 0, 255, 120, 55, 3, 255, 119, 50, 4, 255, 118, 52, 5, 255, 111, 52, 1, 255, 117, 48, 3, 255, 116, 41, 4, 255, 100, 42, 5, 255, 91, 36, 1, 255, 88, 31, 1, 255, 93, 31, 4, 255, 93, 31, 3, 255, 87, 29, 0, 255, 92, 31, 2, 255, 97, 32, 4, 255, 87, 26, 6, 255, 84, 22, 2, 255, 93, 28, 3, 255, 99, 32, 7, 255, 108, 32, 3, 255, 95, 26, 6, 255, 86, 28, 0, 255, 87, 27, 1, 255, 93, 28, 0, 255, 99, 29, 0, 255, 104, 30, 4, 255, 113, 29, 3, 255, 113, 32, 3, 255, 114, 33, 4, 255, 109, 26, 0, 255, 110, 28, 0, 255, 110, 29, 0, 255, 113, 29, 0, 255, 113, 28, 0, 255, 112, 28, 1, 255, 114, 30, 4, 255, 111, 29, 5, 255, 111, 29, 5, 255, 105, 24, 0, 255, 107, 28, 2, 255, 107, 31, 2, 255, 101, 27, 1, 255, 101, 27, 3, 255, 101, 26, 3, 255, 97, 21, 1, 255, 97, 23, 2, 255, 95, 23, 0, 255, 91, 22, 1, 255, 77, 17, 0, 255, 69, 15, 0, 255, 75, 21, 5, 255, 85, 27, 5, 255, 87, 27, 1, 255, 85, 25, 2, 255, 79, 23, 2, 255, 77, 25, 4, 255, 67, 21, 1, 255, 68, 24, 2, 255, 81, 24, 6, 255, 73, 19, 2, 255, 71, 18, 0, 255, 74, 22, 1, 255, 77, 24, 3, 255, 78, 21, 2, 255, 80, 21, 3, 255, 79, 20, 3, 255, 76, 17, 1, 255, 77, 18, 0, 255, 82, 24, 5, 255, 81, 23, 2, 255, 83, 21, 0, 255, 92, 26, 1, 255, 120, 41, 3, 255, 131, 50, 4, 255, 132, 51, 0, 255, 133, 53, 0, 255, 130, 52, 3, 255, 128, 51, 2, 255, 127, 48, 0, 255, 131, 51, 1, 255, 132, 55, 1, 255, 132, 56, 0, 255, 136, 58, 1, 255, 135, 57, 1, 255, 137, 57, 3, 255, 137, 56, 0, 255, 139, 58, 2, 255, 138, 57, 1, 255, 45, 66, 23, 255, 46, 68, 22, 255, 54, 73, 29, 255, 47, 63, 33, 255, 52, 67, 19, 255, 59, 70, 8, 255, 47, 64, 7, 255, 47, 68, 6, 255, 38, 55, 5, 255, 40, 50, 16, 255, 35, 42, 6, 255, 36, 38, 0, 255, 35, 32, 4, 255, 28, 27, 3, 255, 31, 26, 7, 255, 19, 18, 5, 255, 25, 21, 8, 255, 26, 17, 5, 255, 26, 19, 3, 255, 22, 15, 3, 255, 28, 14, 5, 255, 28, 14, 2, 255, 25, 16, 2, 255, 27, 20, 6, 255, 28, 20, 5, 255, 25, 15, 1, 255, 35, 17, 4, 255, 39, 16, 4, 255, 39, 16, 3, 255, 43, 17, 6, 255, 43, 17, 4, 255, 35, 15, 0, 255, 28, 16, 3, 255, 32, 18, 4, 255, 34, 18, 1, 255, 34, 18, 0, 255, 48, 25, 5, 255, 52, 33, 8, 255, 50, 38, 17, 255, 49, 39, 22, 255, 51, 39, 19, 255, 54, 35, 4, 255, 58, 38, 7, 255, 47, 29, 8, 255, 44, 25, 3, 255, 55, 30, 0, 255, 53, 41, 16, 255, 59, 50, 35, 255, 69, 54, 26, 255, 70, 57, 41, 255, 71, 64, 48, 255, 83, 67, 52, 255, 70, 65, 49, 255, 66, 65, 52, 255, 73, 63, 32, 255, 82, 50, 2, 255, 76, 47, 16, 255, 79, 55, 15, 255, 70, 48, 2, 255, 77, 57, 18, 255, 75, 52, 18, 255, 66, 43, 5, 255, 69, 42, 5, 255, 79, 36, 4, 255, 73, 40, 6, 255, 71, 39, 3, 255, 85, 37, 4, 255, 93, 39, 5, 255, 104, 39, 6, 255, 105, 36, 3, 255, 101, 37, 4, 255, 95, 35, 2, 255, 92, 38, 3, 255, 92, 39, 4, 255, 91, 37, 2, 255, 90, 41, 5, 255, 86, 39, 3, 255, 92, 41, 4, 255, 88, 41, 2, 255, 88, 41, 2, 255, 91, 44, 4, 255, 92, 43, 3, 255, 92, 46, 5, 255, 99, 46, 4, 255, 95, 45, 2, 255, 99, 46, 6, 255, 100, 46, 5, 255, 96, 46, 1, 255, 96, 44, 0, 255, 106, 49, 3, 255, 110, 53, 3, 255, 111, 51, 4, 255, 99, 46, 0, 255, 100, 51, 3, 255, 104, 55, 5, 255, 103, 55, 2, 255, 105, 55, 3, 255, 106, 53, 4, 255, 107, 53, 6, 255, 103, 49, 2, 255, 109, 54, 3, 255, 113, 55, 2, 255, 114, 54, 2, 255, 113, 52, 1, 255, 120, 52, 3, 255, 111, 46, 0, 255, 113, 53, 7, 255, 117, 52, 4, 255, 116, 49, 1, 255, 118, 54, 5, 255, 116, 53, 3, 255, 117, 50, 1, 255, 125, 50, 2, 255, 124, 49, 5, 255, 114, 43, 3, 255, 109, 39, 7, 255, 123, 49, 9, 255, 133, 53, 5, 255, 135, 53, 5, 255, 136, 55, 7, 255, 139, 57, 5, 255, 138, 55, 5, 255, 142, 58, 8, 255, 141, 58, 1, 255, 136, 54, 3, 255, 133, 52, 1, 255, 143, 59, 2, 255, 146, 58, 3, 255, 140, 57, 5, 255, 137, 57, 3, 255, 137, 53, 4, 255, 136, 49, 2, 255, 135, 56, 6, 255, 131, 52, 1, 255, 136, 55, 1, 255, 143, 58, 5, 255, 143, 55, 4, 255, 142, 59, 2, 255, 139, 58, 3, 255, 140, 58, 4, 255, 149, 61, 4, 255, 150, 58, 7, 255, 143, 64, 3, 255, 149, 67, 3, 255, 154, 60, 1, 255, 152, 60, 4, 255, 144, 62, 4, 255, 144, 62, 8, 255, 148, 67, 9, 255, 145, 66, 2, 255, 142, 62, 2, 255, 144, 60, 5, 255, 150, 57, 9, 255, 155, 63, 11, 255, 151, 63, 10, 255, 151, 61, 12, 255, 149, 63, 12, 255, 146, 65, 4, 255, 143, 62, 2, 255, 149, 66, 8, 255, 149, 68, 4, 255, 150, 67, 5, 255, 151, 67, 5, 255, 147, 63, 12, 255, 148, 66, 12, 255, 147, 68, 10, 255, 148, 68, 10, 255, 150, 70, 12, 255, 153, 70, 13, 255, 155, 71, 9, 255, 157, 73, 8, 255, 159, 75, 10, 255, 158, 76, 10, 255, 147, 68, 18, 255, 153, 72, 14, 255, 157, 76, 10, 255, 161, 81, 13, 255, 160, 82, 14, 255, 158, 78, 13, 255, 158, 82, 20, 255, 156, 80, 10, 255, 167, 86, 14, 255, 167, 85, 18, 255, 163, 82, 13, 255, 161, 83, 13, 255, 156, 82, 14, 255, 163, 88, 19, 255, 168, 86, 22, 255, 168, 88, 17, 255, 173, 91, 16, 255, 171, 91, 15, 255, 172, 97, 20, 255, 174, 93, 20, 255, 176, 93, 16, 255, 171, 91, 15, 255, 164, 92, 18, 255, 156, 93, 15, 255, 151, 88, 27, 255, 139, 86, 18, 255, 141, 90, 20, 255, 135, 89, 25, 255, 91, 81, 20, 255, 86, 80, 17, 255, 88, 81, 24, 255, 86, 82, 21, 255, 98, 79, 24, 255, 93, 81, 17, 255, 92, 80, 21, 255, 94, 84, 15, 255, 94, 83, 24, 255, 92, 87, 16, 255, 92, 84, 18, 255, 104, 83, 15, 255, 100, 82, 23, 255, 97, 86, 16, 255, 96, 81, 18, 255, 99, 81, 19, 255, 102, 82, 11, 255, 100, 80, 18, 255, 101, 80, 28, 255, 101, 80, 22, 255, 104, 82, 20, 255, 103, 81, 17, 255, 101, 83, 16, 255, 94, 80, 22, 255, 97, 80, 12, 255, 95, 81, 19, 255, 93, 77, 22, 255, 96, 74, 16, 255, 93, 75, 17, 255, 95, 76, 15, 255, 103, 78, 13, 255, 104, 77, 9, 255, 99, 76, 9, 255, 96, 72, 20, 255, 100, 70, 12, 255, 106, 70, 17, 255, 98, 74, 16, 255, 99, 71, 17, 255, 98, 71, 15, 255, 97, 70, 10, 255, 95, 69, 6, 255, 97, 72, 7, 255, 97, 67, 14, 255, 95, 66, 10, 255, 101, 66, 14, 255, 95, 64, 6, 255, 93, 64, 4, 255, 101, 68, 6, 255, 96, 63, 8, 255, 96, 63, 6, 255, 99, 63, 2, 255, 102, 62, 1, 255, 102, 58, 7, 255, 99, 59, 9, 255, 108, 61, 6, 255, 108, 62, 2, 255, 99, 62, 9, 255, 99, 63, 11, 255, 108, 62, 4, 255, 110, 61, 1, 255, 103, 57, 1, 255, 102, 61, 1, 255, 108, 59, 6, 255, 102, 60, 2, 255, 105, 66, 6, 255, 117, 66, 7, 255, 133, 82, 3, 255, 145, 93, 4, 255, 140, 89, 2, 255, 127, 75, 6, 255, 135, 82, 9, 255, 142, 90, 2, 255, 138, 86, 2, 255, 134, 79, 8, 255, 130, 79, 3, 255, 131, 81, 6, 255, 127, 79, 3, 255, 125, 78, 8, 255, 125, 76, 7, 255, 130, 77, 5, 255, 133, 78, 7, 255, 130, 76, 3, 255, 124, 72, 3, 255, 123, 71, 3, 255, 123, 71, 4, 255, 121, 68, 4, 255, 124, 70, 10, 255, 134, 77, 3, 255, 140, 79, 3, 255, 131, 73, 1, 255, 134, 72, 6, 255, 128, 69, 2, 255, 128, 69, 3, 255, 128, 64, 4, 255, 130, 64, 3, 255, 135, 68, 3, 255, 134, 65, 1, 255, 131, 63, 3, 255, 129, 63, 9, 255, 123, 57, 5, 255, 127, 59, 2, 255, 129, 60, 7, 255, 129, 58, 4, 255, 129, 61, 2, 255, 128, 62, 3, 255, 124, 58, 2, 255, 124, 59, 2, 255, 125, 58, 1, 255, 125, 55, 1, 255, 125, 56, 2, 255, 122, 56, 2, 255, 120, 54, 2, 255, 118, 51, 4, 255, 110, 47, 2, 255, 108, 47, 2, 255, 115, 51, 8, 255, 117, 48, 4, 255, 111, 46, 1, 255, 105, 45, 1, 255, 98, 37, 2, 255, 92, 33, 0, 255, 92, 34, 1, 255, 96, 33, 3, 255, 97, 28, 3, 255, 94, 26, 4, 255, 96, 33, 1, 255, 94, 30, 4, 255, 96, 27, 6, 255, 83, 25, 3, 255, 87, 28, 4, 255, 96, 27, 2, 255, 90, 24, 4, 255, 93, 27, 1, 255, 98, 31, 2, 255, 99, 25, 1, 255, 101, 26, 3, 255, 98, 27, 0, 255, 103, 26, 3, 255, 104, 27, 2, 255, 109, 29, 3, 255, 108, 27, 0, 255, 110, 28, 0, 255, 112, 31, 2, 255, 117, 34, 4, 255, 117, 32, 3, 255, 119, 31, 4, 255, 115, 27, 2, 255, 114, 27, 3, 255, 114, 28, 4, 255, 110, 25, 2, 255, 110, 27, 4, 255, 113, 30, 2, 255, 110, 29, 2, 255, 103, 25, 1, 255, 103, 24, 3, 255, 98, 21, 2, 255, 95, 23, 1, 255, 94, 25, 2, 255, 90, 23, 2, 255, 81, 21, 3, 255, 70, 18, 3, 255, 66, 17, 4, 255, 74, 23, 5, 255, 75, 25, 2, 255, 71, 23, 3, 255, 78, 21, 3, 255, 75, 22, 4, 255, 71, 22, 4, 255, 71, 20, 0, 255, 73, 22, 1, 255, 65, 18, 2, 255, 63, 18, 0, 255, 69, 22, 2, 255, 72, 23, 1, 255, 76, 21, 1, 255, 78, 20, 0, 255, 78, 19, 2, 255, 77, 21, 3, 255, 78, 20, 2, 255, 77, 21, 3, 255, 76, 20, 3, 255, 78, 21, 0, 255, 97, 35, 6, 255, 120, 44, 2, 255, 125, 49, 4, 255, 125, 49, 1, 255, 130, 51, 3, 255, 131, 50, 3, 255, 132, 52, 2, 255, 131, 53, 0, 255, 134, 54, 3, 255, 134, 54, 0, 255, 138, 59, 3, 255, 136, 57, 1, 255, 135, 54, 0, 255, 137, 56, 1, 255, 140, 56, 2, 255, 140, 57, 3, 255, 138, 57, 2, 255, 43, 73, 22, 255, 40, 73, 26, 255, 45, 75, 25, 255, 50, 68, 19, 255, 54, 65, 26, 255, 44, 65, 17, 255, 41, 63, 9, 255, 38, 53, 6, 255, 39, 51, 8, 255, 34, 40, 5, 255, 37, 36, 9, 255, 29, 26, 4, 255, 28, 24, 6, 255, 24, 22, 9, 255, 29, 22, 10, 255, 23, 19, 4, 255, 25, 19, 3, 255, 27, 16, 4, 255, 22, 15, 5, 255, 21, 12, 5, 255, 17, 11, 2, 255, 22, 13, 2, 255, 34, 18, 5, 255, 29, 16, 2, 255, 32, 19, 2, 255, 26, 17, 2, 255, 17, 14, 2, 255, 40, 16, 7, 255, 34, 13, 0, 255, 29, 17, 2, 255, 43, 18, 6, 255, 40, 22, 7, 255, 38, 19, 1, 255, 40, 18, 3, 255, 33, 26, 2, 255, 35, 20, 2, 255, 43, 25, 7, 255, 45, 36, 16, 255, 62, 38, 23, 255, 53, 36, 15, 255, 55, 43, 16, 255, 59, 42, 10, 255, 48, 36, 8, 255, 40, 25, 5, 255, 48, 25, 3, 255, 48, 24, 3, 255, 58, 44, 25, 255, 70, 56, 20, 255, 76, 55, 19, 255, 67, 58, 37, 255, 74, 61, 47, 255, 77, 67, 54, 255, 72, 63, 51, 255, 68, 62, 47, 255, 72, 61, 31, 255, 76, 52, 13, 255, 77, 45, 14, 255, 71, 49, 25, 255, 64, 42, 8, 255, 69, 47, 15, 255, 71, 52, 14, 255, 75, 45, 12, 255, 79, 47, 7, 255, 90, 44, 2, 255, 95, 47, 2, 255, 96, 43, 3, 255, 101, 35, 5, 255, 86, 35, 3, 255, 80, 36, 1, 255, 82, 40, 5, 255, 86, 41, 3, 255, 89, 37, 0, 255, 86, 36, 1, 255, 85, 40, 3, 255, 80, 38, 1, 255, 85, 38, 1, 255, 88, 40, 3, 255, 84, 40, 5, 255, 87, 39, 3, 255, 92, 38, 3, 255, 93, 38, 2, 255, 95, 41, 2, 255, 89, 41, 1, 255, 82, 36, 4, 255, 77, 35, 1, 255, 81, 36, 4, 255, 76, 38, 3, 255, 80, 38, 5, 255, 76, 38, 3, 255, 80, 38, 2, 255, 79, 38, 2, 255, 83, 38, 3, 255, 87, 34, 2, 255, 87, 37, 2, 255, 88, 39, 3, 255, 97, 38, 5, 255, 94, 39, 1, 255, 99, 38, 2, 255, 106, 42, 8, 255, 101, 39, 5, 255, 101, 41, 3, 255, 102, 41, 1, 255, 108, 42, 2, 255, 107, 43, 2, 255, 103, 41, 1, 255, 101, 42, 3, 255, 94, 40, 4, 255, 93, 40, 3, 255, 88, 37, 1, 255, 100, 35, 4, 255, 93, 36, 2, 255, 89, 39, 1, 255, 94, 44, 5, 255, 90, 41, 4, 255, 84, 39, 4, 255, 80, 36, 3, 255, 82, 36, 3, 255, 89, 38, 1, 255, 101, 45, 6, 255, 97, 37, 5, 255, 108, 47, 4, 255, 118, 51, 1, 255, 125, 49, 4, 255, 132, 52, 6, 255, 132, 52, 6, 255, 137, 59, 4, 255, 140, 59, 0, 255, 146, 57, 2, 255, 141, 62, 0, 255, 146, 63, 2, 255, 154, 60, 6, 255, 149, 52, 4, 255, 142, 54, 4, 255, 144, 57, 4, 255, 140, 56, 2, 255, 132, 52, 1, 255, 124, 47, 0, 255, 127, 50, 2, 255, 131, 52, 7, 255, 135, 53, 5, 255, 144, 58, 2, 255, 144, 55, 0, 255, 149, 63, 1, 255, 155, 62, 2, 255, 151, 61, 3, 255, 143, 60, 3, 255, 144, 57, 4, 255, 146, 57, 5, 255, 151, 62, 7, 255, 147, 60, 4, 255, 142, 59, 6, 255, 140, 60, 9, 255, 141, 57, 7, 255, 146, 61, 11, 255, 144, 61, 5, 255, 149, 65, 0, 255, 148, 64, 9, 255, 143, 62, 10, 255, 140, 62, 2, 255, 144, 66, 1, 255, 145, 66, 5, 255, 145, 63, 12, 255, 146, 64, 13, 255, 145, 64, 13, 255, 143, 65, 9, 255, 142, 64, 6, 255, 144, 66, 12, 255, 144, 67, 2, 255, 150, 70, 10, 255, 154, 71, 12, 255, 156, 74, 2, 255, 159, 75, 12, 255, 156, 75, 10, 255, 154, 76, 12, 255, 158, 76, 12, 255, 167, 83, 17, 255, 161, 79, 18, 255, 159, 81, 15, 255, 158, 80, 19, 255, 160, 82, 17, 255, 165, 85, 9, 255, 162, 85, 12, 255, 154, 80, 16, 255, 153, 80, 12, 255, 157, 87, 14, 255, 160, 87, 20, 255, 167, 88, 14, 255, 169, 94, 15, 255, 171, 92, 20, 255, 169, 92, 18, 255, 162, 90, 20, 255, 162, 88, 10, 255, 155, 91, 19, 255, 155, 91, 25, 255, 150, 89, 21, 255, 136, 85, 17, 255, 125, 81, 19, 255, 125, 83, 15, 255, 120, 82, 25, 255, 109, 78, 25, 255, 107, 81, 26, 255, 91, 82, 12, 255, 89, 77, 16, 255, 89, 80, 21, 255, 85, 78, 19, 255, 92, 83, 20, 255, 89, 83, 24, 255, 90, 82, 25, 255, 92, 80, 31, 255, 97, 82, 27, 255, 98, 83, 8, 255, 93, 86, 10, 255, 101, 83, 23, 255, 102, 84, 16, 255, 100, 87, 16, 255, 104, 83, 22, 255, 105, 83, 12, 255, 99, 80, 25, 255, 98, 79, 24, 255, 99, 82, 16, 255, 101, 84, 9, 255, 105, 83, 22, 255, 102, 80, 26, 255, 101, 84, 23, 255, 99, 85, 17, 255, 97, 80, 4, 255, 97, 75, 9, 255, 101, 79, 17, 255, 98, 78, 12, 255, 100, 78, 14, 255, 97, 76, 12, 255, 100, 75, 22, 255, 103, 78, 9, 255, 98, 75, 10, 255, 95, 73, 22, 255, 99, 71, 15, 255, 104, 73, 5, 255, 102, 71, 16, 255, 101, 69, 16, 255, 101, 69, 15, 255, 102, 71, 13, 255, 100, 69, 12, 255, 101, 68, 14, 255, 100, 67, 6, 255, 99, 66, 8, 255, 104, 66, 4, 255, 98, 66, 0, 255, 97, 65, 3, 255, 109, 64, 17, 255, 102, 60, 6, 255, 106, 64, 10, 255, 103, 61, 13, 255, 104, 62, 5, 255, 108, 64, 5, 255, 97, 62, 7, 255, 98, 62, 11, 255, 99, 62, 10, 255, 100, 61, 2, 255, 113, 61, 10, 255, 118, 61, 9, 255, 114, 62, 5, 255, 115, 56, 7, 255, 113, 59, 4, 255, 107, 57, 8, 255, 100, 54, 5, 255, 94, 55, 3, 255, 100, 53, 11, 255, 107, 53, 2, 255, 125, 73, 2, 255, 128, 82, 4, 255, 125, 79, 5, 255, 128, 82, 12, 255, 127, 79, 7, 255, 127, 78, 6, 255, 121, 71, 11, 255, 118, 74, 4, 255, 121, 76, 2, 255, 120, 76, 5, 255, 121, 75, 8, 255, 119, 70, 5, 255, 128, 72, 5, 255, 131, 75, 5, 255, 123, 72, 2, 255, 119, 68, 2, 255, 119, 67, 5, 255, 118, 67, 7, 255, 119, 66, 5, 255, 122, 68, 4, 255, 128, 68, 4, 255, 134, 71, 2, 255, 134, 73, 3, 255, 128, 65, 4, 255, 122, 60, 4, 255, 116, 50, 7, 255, 114, 48, 8, 255, 116, 52, 2, 255, 125, 59, 0, 255, 131, 65, 1, 255, 132, 65, 2, 255, 132, 62, 6, 255, 130, 59, 6, 255, 129, 60, 7, 255, 130, 62, 7, 255, 128, 60, 4, 255, 126, 59, 2, 255, 123, 59, 3, 255, 121, 58, 2, 255, 120, 55, 4, 255, 118, 52, 3, 255, 118, 50, 1, 255, 120, 51, 2, 255, 118, 52, 2, 255, 115, 49, 4, 255, 108, 45, 2, 255, 107, 47, 2, 255, 115, 49, 5, 255, 121, 56, 8, 255, 118, 52, 3, 255, 116, 49, 5, 255, 106, 43, 2, 255, 107, 38, 4, 255, 100, 35, 2, 255, 96, 34, 3, 255, 92, 32, 2, 255, 93, 29, 2, 255, 93, 27, 3, 255, 103, 36, 2, 255, 101, 34, 2, 255, 98, 25, 1, 255, 108, 37, 4, 255, 118, 44, 3, 255, 122, 48, 1, 255, 120, 36, 3, 255, 115, 29, 5, 255, 110, 30, 5, 255, 105, 27, 2, 255, 102, 29, 3, 255, 101, 31, 4, 255, 104, 27, 2, 255, 102, 25, 0, 255, 108, 28, 1, 255, 115, 31, 4, 255, 115, 31, 3, 255, 114, 30, 2, 255, 118, 34, 5, 255, 116, 31, 1, 255, 115, 29, 1, 255, 116, 30, 2, 255, 114, 27, 1, 255, 112, 28, 3, 255, 108, 25, 1, 255, 109, 27, 2, 255, 109, 26, 1, 255, 110, 27, 1, 255, 107, 25, 1, 255, 104, 22, 3, 255, 99, 22, 3, 255, 92, 23, 0, 255, 91, 24, 5, 255, 86, 24, 4, 255, 79, 23, 2, 255, 75, 22, 6, 255, 60, 17, 3, 255, 56, 17, 1, 255, 66, 21, 3, 255, 68, 22, 5, 255, 72, 20, 2, 255, 68, 18, 1, 255, 66, 16, 1, 255, 68, 17, 1, 255, 63, 19, 0, 255, 58, 17, 1, 255, 60, 18, 2, 255, 67, 19, 2, 255, 72, 20, 1, 255, 74, 21, 1, 255, 73, 19, 1, 255, 72, 20, 1, 255, 71, 19, 0, 255, 79, 23, 2, 255, 76, 19, 1, 255, 77, 22, 4, 255, 79, 22, 0, 255, 93, 31, 2, 255, 116, 40, 2, 255, 121, 48, 5, 255, 122, 49, 3, 255, 126, 50, 2, 255, 126, 46, 0, 255, 130, 50, 1, 255, 128, 51, 1, 255, 131, 54, 4, 255, 135, 54, 1, 255, 135, 55, 0, 255, 136, 57, 1, 255, 139, 57, 2, 255, 137, 53, 0, 255, 137, 52, 2, 255, 135, 52, 1, 255, 133, 52, 0, 255, 56, 73, 24, 255, 46, 69, 23, 255, 44, 67, 18, 255, 52, 71, 12, 255, 51, 61, 20, 255, 42, 53, 12, 255, 40, 52, 12, 255, 34, 41, 8, 255, 35, 38, 7, 255, 30, 28, 4, 255, 29, 25, 4, 255, 25, 23, 4, 255, 25, 21, 8, 255, 25, 19, 5, 255, 24, 18, 7, 255, 16, 16, 4, 255, 20, 19, 4, 255, 38, 28, 12, 255, 26, 15, 2, 255, 24, 13, 0, 255, 34, 17, 1, 255, 39, 17, 3, 255, 32, 17, 3, 255, 26, 13, 2, 255, 35, 17, 6, 255, 28, 15, 4, 255, 18, 10, 0, 255, 30, 16, 7, 255, 29, 18, 6, 255, 32, 14, 1, 255, 38, 15, 2, 255, 42, 18, 5, 255, 32, 21, 1, 255, 35, 18, 2, 255, 41, 23, 2, 255, 33, 19, 4, 255, 35, 21, 5, 255, 41, 30, 14, 255, 47, 42, 20, 255, 50, 40, 16, 255, 60, 44, 19, 255, 51, 45, 6, 255, 46, 40, 1, 255, 55, 34, 5, 255, 50, 32, 4, 255, 48, 28, 4, 255, 66, 42, 12, 255, 81, 57, 30, 255, 79, 57, 19, 255, 65, 57, 35, 255, 61, 59, 43, 255, 79, 73, 38, 255, 82, 62, 42, 255, 70, 60, 45, 255, 72, 64, 34, 255, 76, 53, 19, 255, 74, 46, 17, 255, 70, 56, 20, 255, 78, 39, 5, 255, 81, 45, 16, 255, 79, 54, 13, 255, 95, 48, 11, 255, 92, 48, 8, 255, 88, 38, 3, 255, 75, 42, 5, 255, 73, 38, 3, 255, 73, 30, 0, 255, 77, 34, 2, 255, 82, 36, 2, 255, 86, 39, 4, 255, 83, 32, 0, 255, 87, 35, 5, 255, 76, 32, 1, 255, 75, 36, 2, 255, 79, 38, 6, 255, 80, 35, 3, 255, 81, 35, 3, 255, 76, 35, 1, 255, 78, 39, 3, 255, 78, 36, 2, 255, 83, 36, 3, 255, 84, 35, 1, 255, 90, 41, 5, 255, 80, 39, 2, 255, 83, 40, 2, 255, 87, 42, 5, 255, 74, 38, 1, 255, 83, 38, 4, 255, 81, 39, 4, 255, 76, 34, 0, 255, 80, 34, 2, 255, 88, 38, 5, 255, 85, 40, 2, 255, 83, 40, 1, 255, 89, 38, 1, 255, 96, 38, 4, 255, 92, 35, 3, 255, 93, 35, 2, 255, 94, 39, 2, 255, 88, 39, 1, 255, 94, 41, 3, 255, 94, 36, 2, 255, 102, 38, 1, 255, 105, 40, 5, 255, 91, 36, 4, 255, 90, 40, 4, 255, 89, 39, 1, 255, 82, 38, 0, 255, 87, 38, 6, 255, 91, 34, 1, 255, 91, 37, 3, 255, 89, 33, 1, 255, 98, 39, 3, 255, 94, 38, 3, 255, 85, 38, 1, 255, 85, 35, 3, 255, 84, 39, 2, 255, 83, 43, 4, 255, 81, 37, 3, 255, 85, 37, 6, 255, 80, 35, 2, 255, 78, 38, 4, 255, 80, 38, 6, 255, 84, 34, 3, 255, 90, 39, 2, 255, 100, 47, 8, 255, 99, 41, 4, 255, 111, 47, 5, 255, 114, 50, 4, 255, 127, 49, 7, 255, 124, 48, 5, 255, 116, 50, 3, 255, 125, 54, 4, 255, 141, 58, 5, 255, 135, 50, 0, 255, 123, 46, 3, 255, 111, 42, 8, 255, 107, 39, 5, 255, 126, 50, 5, 255, 133, 52, 2, 255, 136, 53, 8, 255, 137, 55, 5, 255, 146, 60, 7, 255, 149, 56, 4, 255, 146, 58, 7, 255, 134, 59, 4, 255, 132, 58, 1, 255, 130, 55, 4, 255, 139, 60, 6, 255, 145, 61, 5, 255, 141, 61, 6, 255, 134, 58, 7, 255, 133, 60, 6, 255, 134, 59, 4, 255, 134, 55, 3, 255, 139, 55, 7, 255, 144, 61, 4, 255, 141, 62, 6, 255, 137, 62, 6, 255, 133, 59, 8, 255, 136, 59, 8, 255, 138, 58, 7, 255, 144, 63, 11, 255, 142, 62, 19, 255, 141, 62, 17, 255, 143, 67, 11, 255, 144, 68, 9, 255, 148, 70, 5, 255, 154, 74, 11, 255, 157, 76, 4, 255, 159, 78, 0, 255, 159, 76, 8, 255, 160, 78, 6, 255, 164, 81, 9, 255, 164, 79, 11, 255, 163, 82, 11, 255, 158, 79, 16, 255, 160, 82, 17, 255, 159, 80, 19, 255, 162, 80, 19, 255, 168, 88, 17, 255, 153, 82, 17, 255, 143, 78, 23, 255, 154, 82, 18, 255, 163, 88, 13, 255, 168, 92, 15, 255, 167, 89, 10, 255, 158, 89, 13, 255, 149, 87, 22, 255, 149, 91, 20, 255, 151, 91, 14, 255, 147, 80, 31, 255, 143, 87, 21, 255, 128, 83, 17, 255, 103, 75, 28, 255, 81, 75, 15, 255, 78, 72, 26, 255, 91, 78, 17, 255, 99, 76, 33, 255, 93, 73, 27, 255, 87, 82, 15, 255, 87, 81, 18, 255, 86, 78, 24, 255, 88, 78, 25, 255, 86, 81, 28, 255, 88, 81, 28, 255, 92, 82, 31, 255, 98, 87, 13, 255, 98, 80, 21, 255, 99, 86, 11, 255, 98, 86, 24, 255, 102, 80, 24, 255, 101, 84, 21, 255, 106, 87, 5, 255, 102, 83, 13, 255, 100, 83, 23, 255, 101, 86, 15, 255, 97, 81, 23, 255, 101, 83, 14, 255, 102, 85, 13, 255, 104, 85, 10, 255, 107, 82, 22, 255, 103, 79, 19, 255, 103, 85, 10, 255, 96, 81, 14, 255, 92, 82, 2, 255, 99, 80, 7, 255, 104, 78, 19, 255, 97, 76, 19, 255, 96, 76, 10, 255, 104, 75, 11, 255, 104, 72, 16, 255, 102, 74, 10, 255, 102, 75, 11, 255, 103, 74, 11, 255, 102, 73, 9, 255, 102, 73, 15, 255, 103, 76, 3, 255, 103, 73, 9, 255, 99, 72, 11, 255, 99, 72, 9, 255, 100, 70, 5, 255, 101, 69, 6, 255, 103, 69, 4, 255, 100, 65, 16, 255, 99, 59, 14, 255, 94, 64, 6, 255, 95, 64, 9, 255, 107, 64, 8, 255, 106, 67, 0, 255, 103, 64, 3, 255, 102, 63, 9, 255, 109, 67, 6, 255, 119, 64, 4, 255, 116, 65, 10, 255, 102, 59, 4, 255, 100, 61, 2, 255, 104, 63, 1, 255, 113, 60, 8, 255, 117, 64, 4, 255, 102, 56, 4, 255, 113, 62, 13, 255, 120, 63, 2, 255, 111, 62, 6, 255, 110, 61, 3, 255, 106, 60, 2, 255, 98, 60, 5, 255, 96, 55, 1, 255, 99, 52, 9, 255, 108, 58, 6, 255, 112, 68, 0, 255, 113, 68, 5, 255, 114, 64, 8, 255, 116, 67, 3, 255, 118, 69, 3, 255, 117, 69, 7, 255, 114, 67, 1, 255, 114, 66, 5, 255, 114, 68, 6, 255, 115, 67, 3, 255, 120, 69, 6, 255, 123, 72, 2, 255, 121, 71, 2, 255, 121, 70, 3, 255, 119, 68, 4, 255, 115, 64, 2, 255, 114, 59, 5, 255, 112, 55, 7, 255, 109, 50, 11, 255, 110, 54, 6, 255, 115, 54, 3, 255, 108, 53, 1, 255, 112, 58, 4, 255, 110, 50, 6, 255, 103, 51, 2, 255, 99, 50, 2, 255, 97, 43, 8, 255, 110, 53, 8, 255, 120, 60, 2, 255, 120, 58, 0, 255, 125, 60, 6, 255, 128, 62, 7, 255, 126, 62, 1, 255, 125, 60, 0, 255, 121, 55, 2, 255, 116, 53, 1, 255, 115, 54, 0, 255, 112, 55, 0, 255, 112, 51, 1, 255, 115, 51, 4, 255, 117, 53, 6, 255, 111, 49, 2, 255, 107, 46, 1, 255, 110, 48, 4, 255, 108, 47, 2, 255, 120, 53, 3, 255, 129, 55, 2, 255, 117, 52, 0, 255, 108, 45, 3, 255, 107, 36, 6, 255, 104, 40, 3, 255, 100, 33, 2, 255, 93, 28, 4, 255, 86, 29, 4, 255, 90, 33, 4, 255, 97, 31, 1, 255, 110, 33, 4, 255, 111, 35, 3, 255, 114, 40, 0, 255, 128, 45, 4, 255, 145, 44, 7, 255, 142, 48, 7, 255, 138, 43, 2, 255, 116, 37, 4, 255, 108, 29, 4, 255, 113, 33, 2, 255, 106, 29, 0, 255, 101, 27, 5, 255, 107, 32, 3, 255, 111, 33, 1, 255, 113, 29, 1, 255, 116, 30, 3, 255, 116, 29, 3, 255, 115, 28, 1, 255, 119, 32, 4, 255, 117, 31, 3, 255, 115, 30, 2, 255, 114, 29, 2, 255, 116, 32, 4, 255, 110, 30, 2, 255, 106, 28, 2, 255, 103, 25, 1, 255, 106, 27, 4, 255, 108, 30, 3, 255, 109, 29, 2, 255, 104, 23, 3, 255, 93, 17, 1, 255, 92, 24, 1, 255, 92, 23, 4, 255, 88, 22, 2, 255, 86, 24, 1, 255, 85, 23, 5, 255, 63, 17, 3, 255, 54, 15, 2, 255, 70, 19, 8, 255, 71, 18, 3, 255, 65, 22, 1, 255, 67, 21, 1, 255, 67, 19, 5, 255, 62, 17, 5, 255, 58, 17, 3, 255, 60, 19, 3, 255, 66, 19, 4, 255, 70, 17, 2, 255, 74, 18, 2, 255, 73, 20, 4, 255, 65, 17, 1, 255, 69, 23, 5, 255, 69, 20, 1, 255, 74, 19, 1, 255, 76, 19, 2, 255, 74, 19, 4, 255, 79, 23, 2, 255, 89, 28, 1, 255, 113, 33, 2, 255, 117, 43, 4, 255, 121, 50, 2, 255, 127, 53, 2, 255, 125, 48, 0, 255, 128, 52, 4, 255, 125, 54, 4, 255, 127, 53, 4, 255, 131, 52, 2, 255, 131, 53, 1, 255, 132, 52, 0, 255, 138, 56, 2, 255, 137, 51, 1, 255, 134, 50, 3, 255, 132, 50, 2, 255, 131, 53, 3, 255, 45, 70, 26, 255, 49, 70, 24, 255, 44, 64, 26, 255, 36, 61, 10, 255, 37, 56, 14, 255, 40, 43, 17, 255, 39, 36, 8, 255, 38, 35, 10, 255, 30, 28, 8, 255, 25, 22, 7, 255, 24, 22, 7, 255, 23, 22, 5, 255, 21, 17, 3, 255, 24, 15, 6, 255, 15, 15, 2, 255, 17, 14, 2, 255, 20, 16, 5, 255, 16, 14, 3, 255, 25, 17, 3, 255, 31, 18, 6, 255, 28, 14, 4, 255, 28, 15, 1, 255, 29, 16, 3, 255, 22, 9, 5, 255, 23, 10, 4, 255, 28, 16, 2, 255, 30, 16, 4, 255, 25, 16, 2, 255, 24, 15, 3, 255, 27, 18, 4, 255, 29, 16, 2, 255, 33, 15, 3, 255, 34, 17, 6, 255, 38, 22, 2, 255, 35, 22, 3, 255, 29, 23, 7, 255, 36, 23, 4, 255, 52, 29, 5, 255, 53, 47, 15, 255, 46, 46, 30, 255, 53, 46, 28, 255, 56, 44, 8, 255, 63, 39, 10, 255, 56, 33, 7, 255, 42, 28, 2, 255, 50, 29, 7, 255, 50, 31, 7, 255, 66, 54, 21, 255, 79, 61, 25, 255, 72, 56, 33, 255, 68, 60, 44, 255, 83, 66, 54, 255, 85, 65, 36, 255, 76, 61, 37, 255, 85, 65, 38, 255, 82, 61, 6, 255, 76, 50, 17, 255, 62, 47, 25, 255, 64, 41, 7, 255, 68, 48, 6, 255, 76, 55, 15, 255, 84, 54, 17, 255, 74, 52, 9, 255, 78, 38, 4, 255, 80, 49, 7, 255, 81, 44, 4, 255, 84, 37, 3, 255, 86, 36, 2, 255, 85, 37, 1, 255, 87, 40, 3, 255, 86, 37, 4, 255, 87, 39, 4, 255, 87, 39, 1, 255, 88, 41, 3, 255, 91, 45, 4, 255, 86, 42, 1, 255, 85, 42, 2, 255, 86, 40, 5, 255, 86, 36, 1, 255, 94, 38, 3, 255, 94, 37, 3, 255, 91, 40, 3, 255, 86, 40, 2, 255, 84, 46, 2, 255, 89, 40, 0, 255, 89, 38, 0, 255, 85, 41, 2, 255, 85, 39, 2, 255, 85, 39, 2, 255, 85, 42, 3, 255, 89, 43, 1, 255, 92, 41, 2, 255, 94, 42, 2, 255, 90, 39, 0, 255, 88, 39, 1, 255, 87, 38, 0, 255, 90, 37, 3, 255, 93, 40, 7, 255, 88, 34, 2, 255, 90, 37, 4, 255, 92, 40, 2, 255, 93, 40, 2, 255, 95, 42, 3, 255, 92, 37, 1, 255, 92, 38, 3, 255, 88, 35, 4, 255, 88, 37, 4, 255, 93, 40, 3, 255, 101, 43, 4, 255, 101, 40, 3, 255, 90, 37, 4, 255, 91, 38, 1, 255, 102, 41, 2, 255, 103, 40, 4, 255, 91, 38, 3, 255, 93, 40, 5, 255, 86, 37, 1, 255, 91, 40, 2, 255, 97, 38, 1, 255, 96, 39, 2, 255, 95, 42, 5, 255, 92, 37, 2, 255, 97, 41, 6, 255, 96, 44, 7, 255, 86, 40, 1, 255, 83, 42, 1, 255, 84, 41, 1, 255, 86, 40, 2, 255, 77, 38, 2, 255, 74, 39, 4, 255, 79, 40, 5, 255, 90, 46, 4, 255, 122, 59, 10, 255, 140, 58, 4, 255, 143, 60, 0, 255, 139, 60, 2, 255, 131, 58, 5, 255, 127, 56, 4, 255, 131, 54, 3, 255, 134, 53, 3, 255, 138, 56, 6, 255, 144, 62, 7, 255, 148, 61, 3, 255, 150, 57, 1, 255, 145, 61, 4, 255, 139, 59, 6, 255, 134, 54, 4, 255, 130, 51, 8, 255, 125, 57, 1, 255, 136, 64, 6, 255, 152, 67, 5, 255, 141, 66, 0, 255, 141, 66, 6, 255, 143, 63, 5, 255, 135, 62, 8, 255, 130, 57, 16, 255, 141, 61, 5, 255, 138, 61, 4, 255, 126, 59, 4, 255, 123, 57, 13, 255, 133, 60, 6, 255, 147, 71, 5, 255, 155, 70, 14, 255, 157, 71, 6, 255, 158, 71, 13, 255, 158, 76, 10, 255, 154, 75, 6, 255, 160, 78, 10, 255, 160, 75, 14, 255, 162, 79, 13, 255, 161, 77, 5, 255, 156, 74, 6, 255, 158, 82, 20, 255, 165, 80, 19, 255, 159, 78, 11, 255, 153, 82, 12, 255, 156, 83, 21, 255, 154, 79, 17, 255, 158, 79, 15, 255, 157, 76, 12, 255, 160, 81, 15, 255, 151, 80, 17, 255, 144, 75, 27, 255, 155, 84, 18, 255, 161, 88, 19, 255, 151, 85, 17, 255, 143, 87, 14, 255, 141, 86, 21, 255, 141, 82, 23, 255, 129, 77, 18, 255, 108, 80, 17, 255, 108, 82, 20, 255, 97, 73, 25, 255, 91, 78, 15, 255, 78, 77, 17, 255, 74, 77, 18, 255, 76, 78, 19, 255, 78, 74, 38, 255, 79, 75, 27, 255, 83, 81, 14, 255, 89, 84, 17, 255, 89, 82, 15, 255, 88, 80, 19, 255, 89, 81, 29, 255, 90, 83, 23, 255, 97, 85, 13, 255, 96, 84, 7, 255, 96, 82, 16, 255, 97, 85, 24, 255, 100, 88, 19, 255, 100, 84, 20, 255, 101, 82, 27, 255, 96, 82, 26, 255, 101, 87, 16, 255, 101, 80, 28, 255, 93, 78, 26, 255, 96, 83, 17, 255, 104, 85, 19, 255, 104, 83, 22, 255, 104, 86, 14, 255, 105, 85, 14, 255, 103, 82, 13, 255, 101, 80, 18, 255, 99, 81, 16, 255, 101, 79, 22, 255, 96, 77, 17, 255, 97, 78, 19, 255, 98, 80, 16, 255, 95, 75, 16, 255, 101, 77, 12, 255, 108, 78, 9, 255, 104, 73, 17, 255, 101, 74, 14, 255, 105, 75, 8, 255, 102, 71, 8, 255, 105, 74, 10, 255, 109, 71, 12, 255, 109, 71, 10, 255, 107, 69, 11, 255, 108, 71, 13, 255, 107, 73, 10, 255, 103, 70, 10, 255, 101, 75, 3, 255, 100, 67, 6, 255, 98, 66, 9, 255, 99, 66, 11, 255, 100, 64, 4, 255, 104, 64, 10, 255, 105, 65, 8, 255, 99, 62, 9, 255, 100, 64, 9, 255, 107, 64, 5, 255, 116, 66, 7, 255, 116, 61, 5, 255, 119, 65, 7, 255, 112, 61, 1, 255, 106, 60, 6, 255, 109, 62, 4, 255, 111, 61, 5, 255, 110, 59, 5, 255, 108, 57, 2, 255, 111, 61, 6, 255, 114, 62, 5, 255, 112, 60, 1, 255, 114, 59, 2, 255, 109, 56, 5, 255, 99, 51, 3, 255, 100, 56, 5, 255, 99, 54, 1, 255, 103, 53, 5, 255, 100, 51, 12, 255, 90, 51, 2, 255, 91, 50, 1, 255, 102, 49, 8, 255, 104, 55, 7, 255, 107, 62, 4, 255, 112, 64, 6, 255, 115, 64, 7, 255, 112, 59, 4, 255, 110, 59, 7, 255, 107, 58, 5, 255, 107, 58, 6, 255, 113, 63, 4, 255, 115, 66, 0, 255, 124, 74, 6, 255, 120, 67, 9, 255, 111, 54, 9, 255, 110, 54, 3, 255, 103, 50, 5, 255, 103, 53, 1, 255, 95, 47, 2, 255, 104, 53, 6, 255, 110, 56, 0, 255, 119, 62, 4, 255, 109, 53, 3, 255, 113, 60, 3, 255, 112, 57, 6, 255, 109, 53, 7, 255, 114, 57, 1, 255, 115, 59, 4, 255, 111, 53, 3, 255, 119, 53, 3, 255, 120, 59, 4, 255, 121, 62, 2, 255, 127, 61, 1, 255, 122, 60, 1, 255, 124, 58, 3, 255, 125, 52, 1, 255, 124, 56, 3, 255, 120, 55, 3, 255, 115, 49, 4, 255, 109, 43, 3, 255, 108, 46, 3, 255, 105, 45, 3, 255, 101, 39, 1, 255, 109, 41, 1, 255, 118, 48, 5, 255, 113, 49, 7, 255, 102, 40, 2, 255, 104, 37, 3, 255, 108, 41, 6, 255, 96, 34, 2, 255, 89, 31, 1, 255, 98, 34, 4, 255, 102, 36, 5, 255, 96, 34, 2, 255, 95, 29, 3, 255, 95, 28, 4, 255, 93, 29, 1, 255, 100, 27, 2, 255, 106, 27, 3, 255, 119, 33, 7, 255, 124, 32, 4, 255, 110, 34, 2, 255, 110, 32, 2, 255, 117, 28, 3, 255, 115, 28, 4, 255, 106, 25, 2, 255, 110, 28, 2, 255, 118, 30, 5, 255, 115, 26, 2, 255, 114, 27, 2, 255, 113, 29, 1, 255, 115, 31, 2, 255, 117, 32, 3, 255, 115, 28, 0, 255, 117, 32, 2, 255, 115, 32, 4, 255, 114, 29, 1, 255, 112, 29, 1, 255, 107, 28, 2, 255, 104, 28, 5, 255, 102, 25, 1, 255, 110, 26, 2, 255, 108, 26, 3, 255, 101, 23, 3, 255, 91, 19, 0, 255, 90, 23, 1, 255, 95, 20, 1, 255, 92, 19, 0, 255, 88, 24, 2, 255, 86, 25, 4, 255, 71, 13, 0, 255, 58, 14, 5, 255, 53, 16, 8, 255, 70, 15, 3, 255, 73, 24, 0, 255, 63, 21, 1, 255, 57, 18, 2, 255, 62, 18, 3, 255, 61, 15, 2, 255, 54, 16, 1, 255, 63, 19, 2, 255, 70, 20, 2, 255, 68, 18, 4, 255, 65, 17, 4, 255, 69, 21, 3, 255, 69, 21, 1, 255, 71, 19, 2, 255, 70, 19, 6, 255, 69, 16, 2, 255, 71, 20, 1, 255, 73, 20, 3, 255, 87, 24, 1, 255, 109, 36, 1, 255, 121, 45, 4, 255, 120, 43, 2, 255, 122, 45, 3, 255, 126, 49, 1, 255, 124, 45, 1, 255, 126, 51, 3, 255, 125, 52, 3, 255, 124, 50, 1, 255, 130, 50, 2, 255, 131, 49, 0, 255, 133, 51, 2, 255, 132, 51, 1, 255, 128, 51, 3, 255, 129, 48, 1, 255, 129, 49, 2, 255, 37, 69, 16, 255, 48, 69, 8, 255, 49, 61, 14, 255, 39, 50, 16, 255, 31, 41, 12, 255, 32, 39, 7, 255, 31, 33, 5, 255, 26, 26, 5, 255, 24, 22, 4, 255, 24, 20, 8, 255, 21, 15, 4, 255, 22, 14, 3, 255, 21, 15, 4, 255, 17, 14, 3, 255, 20, 14, 2, 255, 23, 11, 2, 255, 24, 14, 5, 255, 18, 13, 3, 255, 24, 13, 2, 255, 26, 17, 6, 255, 29, 15, 6, 255, 27, 13, 2, 255, 25, 16, 0, 255, 25, 15, 0, 255, 28, 18, 3, 255, 32, 19, 2, 255, 36, 19, 3, 255, 32, 19, 3, 255, 31, 15, 2, 255, 36, 16, 4, 255, 41, 18, 3, 255, 37, 21, 1, 255, 38, 22, 1, 255, 33, 17, 3, 255, 30, 17, 2, 255, 37, 21, 5, 255, 29, 20, 4, 255, 36, 24, 5, 255, 68, 43, 9, 255, 60, 43, 18, 255, 58, 48, 24, 255, 57, 44, 10, 255, 50, 38, 6, 255, 57, 38, 8, 255, 53, 33, 4, 255, 47, 27, 1, 255, 63, 37, 10, 255, 73, 53, 26, 255, 79, 56, 35, 255, 77, 59, 32, 255, 83, 65, 36, 255, 92, 62, 43, 255, 80, 65, 38, 255, 79, 64, 33, 255, 91, 64, 28, 255, 90, 63, 9, 255, 67, 47, 10, 255, 58, 47, 22, 255, 65, 46, 9, 255, 63, 47, 7, 255, 72, 57, 26, 255, 76, 65, 19, 255, 65, 58, 18, 255, 73, 48, 4, 255, 84, 49, 4, 255, 82, 44, 1, 255, 81, 41, 2, 255, 82, 41, 3, 255, 82, 39, 2, 255, 86, 41, 5, 255, 90, 41, 4, 255, 92, 41, 2, 255, 100, 45, 5, 255, 99, 43, 4, 255, 96, 42, 0, 255, 99, 50, 5, 255, 92, 48, 2, 255, 94, 49, 5, 255, 97, 47, 4, 255, 100, 45, 2, 255, 102, 47, 3, 255, 102, 50, 6, 255, 99, 51, 5, 255, 95, 51, 1, 255, 101, 46, 2, 255, 101, 45, 3, 255, 97, 51, 4, 255, 97, 52, 5, 255, 93, 48, 1, 255, 92, 45, 1, 255, 97, 43, 3, 255, 93, 39, 2, 255, 95, 40, 3, 255, 91, 40, 1, 255, 95, 42, 5, 255, 96, 40, 3, 255, 90, 46, 1, 255, 90, 40, 1, 255, 93, 39, 1, 255, 95, 41, 2, 255, 95, 42, 2, 255, 97, 45, 3, 255, 96, 43, 7, 255, 93, 43, 2, 255, 96, 44, 0, 255, 95, 42, 3, 255, 97, 43, 4, 255, 99, 41, 1, 255, 103, 40, 3, 255, 104, 40, 3, 255, 97, 41, 2, 255, 96, 42, 6, 255, 96, 39, 7, 255, 95, 40, 2, 255, 90, 43, 3, 255, 92, 39, 3, 255, 88, 40, 2, 255, 92, 40, 2, 255, 103, 42, 6, 255, 98, 43, 4, 255, 92, 42, 3, 255, 95, 41, 4, 255, 92, 37, 1, 255, 91, 37, 1, 255, 89, 39, 2, 255, 87, 40, 1, 255, 92, 44, 5, 255, 95, 42, 4, 255, 93, 43, 3, 255, 87, 43, 0, 255, 98, 49, 7, 255, 103, 49, 7, 255, 105, 45, 2, 255, 103, 44, 1, 255, 106, 51, 3, 255, 120, 58, 8, 255, 129, 56, 2, 255, 142, 59, 3, 255, 143, 61, 7, 255, 142, 63, 9, 255, 141, 57, 3, 255, 148, 63, 4, 255, 143, 64, 0, 255, 142, 62, 4, 255, 142, 64, 4, 255, 138, 57, 11, 255, 129, 53, 9, 255, 137, 54, 1, 255, 135, 58, 10, 255, 139, 65, 8, 255, 152, 67, 7, 255, 150, 65, 3, 255, 153, 70, 1, 255, 146, 60, 12, 255, 132, 57, 12, 255, 135, 67, 8, 255, 136, 64, 3, 255, 136, 61, 7, 255, 132, 62, 8, 255, 131, 61, 11, 255, 140, 59, 10, 255, 151, 70, 15, 255, 156, 67, 11, 255, 157, 71, 10, 255, 153, 76, 15, 255, 158, 72, 8, 255, 162, 74, 19, 255, 163, 78, 7, 255, 163, 81, 1, 255, 157, 79, 15, 255, 158, 78, 15, 255, 155, 74, 7, 255, 160, 77, 15, 255, 158, 76, 17, 255, 149, 77, 8, 255, 146, 80, 12, 255, 141, 75, 15, 255, 146, 74, 13, 255, 152, 76, 25, 255, 147, 80, 19, 255, 153, 84, 11, 255, 149, 79, 16, 255, 148, 80, 24, 255, 149, 80, 17, 255, 139, 75, 20, 255, 129, 80, 21, 255, 117, 75, 35, 255, 117, 78, 27, 255, 116, 79, 20, 255, 87, 71, 20, 255, 69, 75, 27, 255, 86, 78, 20, 255, 83, 76, 14, 255, 79, 74, 28, 255, 76, 74, 31, 255, 81, 78, 18, 255, 85, 75, 24, 255, 90, 79, 25, 255, 90, 79, 25, 255, 93, 80, 34, 255, 97, 84, 22, 255, 99, 86, 15, 255, 96, 82, 24, 255, 95, 82, 33, 255, 92, 83, 20, 255, 94, 89, 19, 255, 98, 88, 19, 255, 95, 81, 29, 255, 94, 85, 14, 255, 94, 84, 27, 255, 93, 82, 30, 255, 96, 81, 15, 255, 99, 87, 14, 255, 99, 80, 28, 255, 103, 81, 24, 255, 104, 86, 29, 255, 99, 82, 17, 255, 106, 83, 23, 255, 105, 84, 18, 255, 105, 83, 22, 255, 104, 82, 31, 255, 103, 82, 21, 255, 102, 80, 18, 255, 104, 81, 19, 255, 102, 74, 24, 255, 103, 80, 16, 255, 100, 78, 23, 255, 96, 77, 12, 255, 100, 77, 12, 255, 108, 78, 13, 255, 108, 78, 7, 255, 101, 74, 17, 255, 99, 72, 15, 255, 107, 75, 10, 255, 107, 77, 12, 255, 102, 73, 8, 255, 107, 71, 14, 255, 107, 70, 6, 255, 105, 73, 9, 255, 103, 71, 12, 255, 105, 72, 5, 255, 107, 69, 13, 255, 108, 68, 5, 255, 106, 65, 10, 255, 102, 65, 7, 255, 100, 66, 3, 255, 100, 65, 3, 255, 100, 61, 7, 255, 100, 61, 8, 255, 100, 62, 9, 255, 105, 64, 12, 255, 103, 64, 4, 255, 102, 61, 1, 255, 109, 64, 8, 255, 113, 64, 8, 255, 113, 61, 4, 255, 108, 58, 6, 255, 117, 65, 5, 255, 118, 62, 5, 255, 118, 62, 7, 255, 115, 62, 3, 255, 112, 58, 0, 255, 108, 59, 1, 255, 108, 57, 3, 255, 102, 51, 2, 255, 99, 52, 4, 255, 100, 57, 5, 255, 104, 55, 3, 255, 115, 56, 5, 255, 109, 52, 0, 255, 95, 51, 3, 255, 99, 52, 7, 255, 102, 50, 7, 255, 91, 43, 3, 255, 81, 42, 3, 255, 88, 50, 4, 255, 86, 45, 0, 255, 89, 47, 2, 255, 92, 49, 5, 255, 99, 51, 8, 255, 101, 50, 9, 255, 96, 52, 4, 255, 102, 61, 3, 255, 112, 60, 6, 255, 123, 63, 3, 255, 121, 63, 0, 255, 114, 61, 4, 255, 102, 53, 2, 255, 100, 52, 6, 255, 108, 59, 3, 255, 108, 56, 6, 255, 102, 52, 5, 255, 101, 50, 2, 255, 110, 52, 1, 255, 103, 50, 3, 255, 105, 56, 2, 255, 109, 53, 4, 255, 116, 54, 6, 255, 122, 59, 4, 255, 120, 59, 4, 255, 114, 54, 3, 255, 117, 51, 8, 255, 117, 54, 4, 255, 116, 56, 0, 255, 113, 55, 0, 255, 121, 55, 4, 255, 112, 49, 7, 255, 104, 45, 6, 255, 105, 44, 3, 255, 105, 45, 2, 255, 104, 46, 3, 255, 105, 45, 4, 255, 103, 43, 0, 255, 108, 48, 1, 255, 113, 50, 2, 255, 120, 50, 5, 255, 117, 47, 4, 255, 113, 46, 5, 255, 107, 41, 3, 255, 103, 36, 3, 255, 105, 41, 0, 255, 103, 39, 1, 255, 101, 35, 3, 255, 96, 29, 4, 255, 92, 28, 8, 255, 82, 25, 5, 255, 70, 22, 2, 255, 71, 24, 1, 255, 83, 28, 4, 255, 79, 23, 2, 255, 68, 22, 0, 255, 77, 22, 3, 255, 96, 27, 4, 255, 98, 27, 3, 255, 101, 26, 7, 255, 108, 25, 1, 255, 116, 32, 1, 255, 113, 31, 5, 255, 115, 29, 6, 255, 118, 31, 2, 255, 114, 29, 0, 255, 113, 31, 2, 255, 113, 32, 3, 255, 108, 29, 1, 255, 110, 33, 3, 255, 106, 26, 0, 255, 113, 28, 4, 255, 109, 26, 2, 255, 108, 25, 0, 255, 110, 27, 1, 255, 108, 30, 3, 255, 102, 26, 1, 255, 99, 27, 1, 255, 105, 27, 4, 255, 102, 24, 3, 255, 96, 22, 2, 255, 92, 21, 4, 255, 90, 23, 4, 255, 92, 21, 2, 255, 89, 22, 1, 255, 83, 25, 3, 255, 78, 21, 1, 255, 73, 20, 5, 255, 58, 16, 4, 255, 42, 10, 0, 255, 60, 17, 3, 255, 62, 13, 4, 255, 57, 17, 3, 255, 60, 16, 4, 255, 62, 14, 4, 255, 62, 18, 3, 255, 60, 19, 2, 255, 64, 20, 2, 255, 67, 18, 1, 255, 66, 17, 2, 255, 64, 15, 2, 255, 69, 18, 3, 255, 70, 19, 3, 255, 65, 18, 4, 255, 64, 20, 5, 255, 66, 18, 4, 255, 64, 18, 3, 255, 68, 17, 4, 255, 91, 31, 3, 255, 112, 43, 5, 255, 121, 46, 3, 255, 125, 47, 5, 255, 126, 48, 7, 255, 124, 48, 1, 255, 123, 46, 2, 255, 126, 48, 1, 255, 128, 52, 2, 255, 126, 49, 1, 255, 129, 50, 2, 255, 131, 51, 3, 255, 130, 53, 4, 255, 126, 52, 2, 255, 128, 51, 3, 255, 127, 50, 2, 255, 127, 52, 3, 255, 41, 66, 18, 255, 42, 55, 17, 255, 45, 52, 7, 255, 36, 41, 4, 255, 29, 32, 13, 255, 28, 28, 8, 255, 22, 24, 1, 255, 23, 25, 5, 255, 22, 19, 4, 255, 25, 17, 7, 255, 22, 12, 4, 255, 21, 11, 4, 255, 22, 12, 4, 255, 23, 13, 3, 255, 19, 16, 3, 255, 17, 15, 2, 255, 19, 13, 3, 255, 16, 10, 2, 255, 22, 17, 5, 255, 20, 14, 4, 255, 28, 15, 6, 255, 23, 13, 3, 255, 28, 15, 4, 255, 47, 19, 4, 255, 44, 18, 4, 255, 30, 14, 4, 255, 26, 13, 3, 255, 26, 15, 2, 255, 31, 17, 2, 255, 41, 17, 4, 255, 39, 19, 5, 255, 35, 19, 5, 255, 34, 19, 8, 255, 31, 18, 3, 255, 31, 20, 2, 255, 31, 19, 5, 255, 35, 14, 3, 255, 59, 28, 8, 255, 61, 37, 13, 255, 58, 44, 25, 255, 53, 50, 19, 255, 59, 48, 11, 255, 67, 40, 12, 255, 69, 43, 8, 255, 59, 40, 1, 255, 45, 28, 0, 255, 61, 34, 10, 255, 68, 48, 23, 255, 69, 52, 24, 255, 71, 57, 23, 255, 80, 63, 34, 255, 84, 66, 46, 255, 82, 63, 42, 255, 96, 66, 33, 255, 85, 62, 25, 255, 73, 56, 19, 255, 66, 49, 18, 255, 77, 48, 19, 255, 73, 46, 9, 255, 65, 48, 13, 255, 78, 60, 37, 255, 87, 65, 25, 255, 76, 58, 20, 255, 76, 52, 5, 255, 78, 52, 3, 255, 77, 46, 1, 255, 79, 41, 0, 255, 79, 40, 1, 255, 77, 39, 0, 255, 76, 40, 0, 255, 84, 39, 0, 255, 97, 47, 6, 255, 89, 42, 1, 255, 89, 42, 0, 255, 96, 48, 2, 255, 98, 50, 4, 255, 99, 50, 2, 255, 96, 51, 1, 255, 100, 52, 1, 255, 103, 53, 1, 255, 107, 55, 3, 255, 105, 52, 1, 255, 106, 55, 2, 255, 101, 58, 2, 255, 106, 55, 2, 255, 109, 55, 3, 255, 108, 59, 5, 255, 110, 59, 5, 255, 110, 57, 1, 255, 108, 55, 1, 255, 108, 56, 6, 255, 107, 53, 6, 255, 103, 49, 4, 255, 94, 45, 1, 255, 98, 49, 4, 255, 101, 52, 5, 255, 86, 47, 1, 255, 94, 47, 2, 255, 101, 45, 5, 255, 100, 41, 1, 255, 101, 44, 5, 255, 99, 45, 3, 255, 97, 46, 3, 255, 97, 46, 4, 255, 98, 43, 3, 255, 97, 43, 4, 255, 99, 45, 4, 255, 101, 42, 3, 255, 104, 43, 5, 255, 96, 41, 2, 255, 99, 44, 0, 255, 100, 44, 2, 255, 98, 41, 1, 255, 101, 41, 1, 255, 101, 40, 2, 255, 98, 39, 3, 255, 100, 42, 4, 255, 101, 40, 4, 255, 97, 36, 0, 255, 98, 39, 2, 255, 93, 40, 2, 255, 90, 39, 1, 255, 95, 42, 4, 255, 94, 40, 3, 255, 95, 43, 5, 255, 92, 41, 3, 255, 94, 42, 4, 255, 94, 39, 3, 255, 91, 42, 4, 255, 92, 43, 2, 255, 98, 46, 2, 255, 92, 47, 2, 255, 89, 46, 4, 255, 86, 42, 4, 255, 84, 39, 6, 255, 94, 46, 5, 255, 116, 56, 4, 255, 127, 50, 1, 255, 128, 54, 6, 255, 130, 58, 7, 255, 141, 57, 4, 255, 143, 63, 3, 255, 143, 66, 3, 255, 146, 63, 7, 255, 145, 63, 3, 255, 142, 60, 7, 255, 128, 60, 1, 255, 126, 60, 7, 255, 142, 66, 10, 255, 149, 67, 2, 255, 146, 63, 4, 255, 149, 67, 7, 255, 151, 72, 8, 255, 145, 65, 10, 255, 139, 63, 10, 255, 137, 66, 3, 255, 140, 63, 7, 255, 149, 65, 10, 255, 150, 67, 8, 255, 153, 70, 15, 255, 133, 61, 17, 255, 118, 56, 15, 255, 144, 74, 11, 255, 155, 73, 9, 255, 153, 74, 12, 255, 153, 77, 0, 255, 153, 76, 8, 255, 155, 75, 9, 255, 157, 74, 8, 255, 153, 71, 15, 255, 155, 71, 24, 255, 156, 76, 18, 255, 155, 81, 10, 255, 162, 78, 15, 255, 152, 74, 13, 255, 139, 74, 9, 255, 141, 75, 21, 255, 147, 76, 18, 255, 153, 80, 18, 255, 155, 80, 21, 255, 136, 73, 27, 255, 132, 74, 22, 255, 127, 75, 13, 255, 99, 66, 24, 255, 85, 68, 21, 255, 89, 71, 20, 255, 97, 71, 26, 255, 91, 70, 27, 255, 86, 78, 20, 255, 81, 74, 21, 255, 74, 72, 24, 255, 79, 74, 31, 255, 88, 78, 27, 255, 85, 80, 18, 255, 83, 75, 32, 255, 87, 77, 33, 255, 92, 81, 28, 255, 94, 83, 27, 255, 93, 82, 29, 255, 91, 78, 31, 255, 96, 83, 32, 255, 96, 82, 29, 255, 97, 83, 31, 255, 96, 84, 22, 255, 94, 86, 19, 255, 95, 86, 17, 255, 102, 86, 29, 255, 102, 83, 26, 255, 101, 83, 24, 255, 99, 84, 30, 255, 97, 87, 21, 255, 98, 84, 13, 255, 99, 88, 12, 255, 103, 88, 14, 255, 105, 84, 18, 255, 104, 84, 21, 255, 107, 84, 31, 255, 111, 85, 22, 255, 110, 86, 20, 255, 109, 84, 17, 255, 107, 86, 12, 255, 107, 84, 23, 255, 105, 81, 19, 255, 107, 80, 15, 255, 105, 82, 23, 255, 108, 82, 11, 255, 108, 75, 19, 255, 109, 78, 16, 255, 108, 80, 18, 255, 105, 77, 20, 255, 100, 72, 10, 255, 101, 74, 17, 255, 104, 76, 11, 255, 106, 72, 5, 255, 108, 76, 17, 255, 102, 73, 10, 255, 106, 74, 10, 255, 107, 72, 11, 255, 106, 69, 12, 255, 107, 69, 8, 255, 107, 68, 13, 255, 105, 66, 14, 255, 106, 69, 9, 255, 110, 69, 7, 255, 106, 65, 10, 255, 100, 62, 6, 255, 101, 62, 7, 255, 102, 64, 4, 255, 99, 62, 7, 255, 101, 60, 8, 255, 107, 61, 9, 255, 109, 64, 5, 255, 106, 62, 2, 255, 106, 58, 3, 255, 112, 62, 9, 255, 113, 62, 9, 255, 112, 58, 0, 255, 116, 63, 0, 255, 119, 63, 4, 255, 120, 59, 7, 255, 116, 56, 4, 255, 112, 58, 6, 255, 107, 59, 6, 255, 99, 55, 3, 255, 97, 54, 6, 255, 103, 56, 7, 255, 108, 55, 3, 255, 109, 56, 4, 255, 105, 56, 6, 255, 100, 52, 2, 255, 97, 49, 2, 255, 98, 49, 7, 255, 95, 45, 5, 255, 92, 47, 4, 255, 83, 43, 3, 255, 83, 43, 7, 255, 77, 39, 5, 255, 77, 37, 5, 255, 73, 34, 2, 255, 74, 38, 3, 255, 75, 39, 3, 255, 78, 37, 0, 255, 86, 43, 4, 255, 87, 40, 6, 255, 97, 44, 7, 255, 104, 48, 5, 255, 98, 44, 4, 255, 95, 48, 1, 255, 98, 46, 3, 255, 109, 56, 6, 255, 104, 51, 1, 255, 97, 47, 1, 255, 96, 47, 5, 255, 99, 50, 2, 255, 101, 48, 4, 255, 100, 49, 1, 255, 100, 48, 1, 255, 108, 51, 2, 255, 118, 55, 1, 255, 120, 55, 3, 255, 118, 52, 2, 255, 109, 46, 4, 255, 107, 48, 5, 255, 109, 45, 4, 255, 103, 43, 1, 255, 111, 47, 7, 255, 103, 41, 4, 255, 93, 40, 1, 255, 98, 39, 0, 255, 103, 41, 2, 255, 103, 44, 2, 255, 105, 45, 4, 255, 107, 40, 3, 255, 124, 50, 7, 255, 131, 55, 3, 255, 128, 54, 6, 255, 116, 45, 2, 255, 106, 41, 0, 255, 106, 39, 2, 255, 107, 35, 3, 255, 100, 37, 3, 255, 96, 33, 1, 255, 91, 29, 2, 255, 88, 31, 8, 255, 74, 23, 2, 255, 72, 21, 1, 255, 71, 25, 8, 255, 76, 30, 2, 255, 87, 27, 3, 255, 92, 28, 4, 255, 88, 31, 1, 255, 87, 24, 4, 255, 100, 26, 1, 255, 107, 27, 3, 255, 106, 30, 4, 255, 108, 30, 4, 255, 118, 33, 3, 255, 117, 32, 0, 255, 119, 33, 5, 255, 123, 34, 4, 255, 123, 35, 2, 255, 119, 30, 1, 255, 118, 30, 2, 255, 116, 30, 3, 255, 115, 32, 5, 255, 110, 28, 2, 255, 110, 24, 4, 255, 108, 25, 4, 255, 107, 24, 0, 255, 109, 27, 0, 255, 105, 26, 0, 255, 105, 29, 4, 255, 95, 25, 2, 255, 96, 25, 3, 255, 98, 24, 3, 255, 96, 25, 8, 255, 87, 21, 5, 255, 83, 18, 1, 255, 90, 20, 2, 255, 91, 22, 4, 255, 87, 24, 6, 255, 79, 17, 1, 255, 80, 19, 5, 255, 70, 18, 5, 255, 61, 19, 2, 255, 64, 23, 7, 255, 63, 19, 5, 255, 59, 19, 2, 255, 69, 20, 2, 255, 54, 18, 2, 255, 47, 18, 1, 255, 70, 18, 4, 255, 73, 18, 3, 255, 70, 18, 1, 255, 67, 19, 3, 255, 63, 16, 2, 255, 64, 18, 1, 255, 67, 18, 2, 255, 66, 18, 2, 255, 62, 17, 1, 255, 64, 16, 2, 255, 67, 18, 2, 255, 74, 19, 4, 255, 97, 33, 1, 255, 113, 43, 3, 255, 123, 49, 2, 255, 129, 50, 5, 255, 124, 43, 3, 255, 124, 46, 1, 255, 126, 48, 5, 255, 129, 49, 6, 255, 127, 48, 1, 255, 126, 47, 0, 255, 127, 49, 0, 255, 126, 48, 0, 255, 125, 49, 2, 255, 123, 51, 3, 255, 122, 50, 1, 255, 126, 50, 2, 255, 125, 48, 0, 255, 39, 57, 9, 255, 36, 43, 27, 255, 31, 35, 10, 255, 28, 31, 5, 255, 23, 23, 8, 255, 27, 22, 5, 255, 25, 22, 2, 255, 24, 20, 3, 255, 22, 15, 2, 255, 23, 14, 3, 255, 23, 14, 5, 255, 23, 13, 5, 255, 19, 11, 1, 255, 25, 15, 5, 255, 31, 16, 7, 255, 27, 12, 4, 255, 24, 11, 4, 255, 21, 11, 4, 255, 18, 11, 2, 255, 18, 10, 0, 255, 25, 13, 1, 255, 22, 17, 6, 255, 26, 20, 6, 255, 39, 18, 2, 255, 32, 18, 2, 255, 19, 14, 3, 255, 26, 15, 3, 255, 26, 14, 3, 255, 29, 18, 4, 255, 26, 17, 2, 255, 34, 17, 3, 255, 41, 21, 8, 255, 43, 17, 8, 255, 38, 15, 3, 255, 39, 21, 9, 255, 34, 22, 7, 255, 50, 23, 3, 255, 58, 22, 3, 255, 48, 37, 5, 255, 54, 53, 19, 255, 59, 53, 25, 255, 55, 49, 18, 255, 57, 39, 10, 255, 72, 41, 10, 255, 62, 36, 1, 255, 59, 31, 0, 255, 63, 30, 7, 255, 71, 50, 16, 255, 76, 58, 18, 255, 73, 56, 25, 255, 76, 60, 36, 255, 68, 60, 52, 255, 80, 62, 43, 255, 82, 64, 28, 255, 71, 60, 28, 255, 72, 55, 28, 255, 68, 52, 21, 255, 88, 51, 10, 255, 86, 49, 9, 255, 79, 58, 15, 255, 90, 69, 20, 255, 93, 65, 15, 255, 85, 60, 14, 255, 79, 55, 3, 255, 79, 51, 8, 255, 82, 46, 5, 255, 86, 41, 3, 255, 85, 39, 1, 255, 84, 42, 1, 255, 83, 43, 1, 255, 81, 44, 0, 255, 86, 48, 4, 255, 85, 42, 1, 255, 92, 46, 5, 255, 93, 48, 4, 255, 89, 47, 0, 255, 92, 50, 0, 255, 98, 50, 1, 255, 100, 53, 2, 255, 106, 57, 5, 255, 108, 56, 3, 255, 107, 55, 2, 255, 107, 55, 2, 255, 106, 57, 3, 255, 108, 56, 3, 255, 106, 53, 0, 255, 105, 55, 0, 255, 107, 60, 2, 255, 109, 62, 1, 255, 111, 60, 1, 255, 116, 61, 1, 255, 119, 57, 1, 255, 115, 51, 0, 255, 111, 53, 0, 255, 110, 59, 1, 255, 108, 61, 1, 255, 108, 59, 3, 255, 110, 55, 3, 255, 109, 47, 1, 255, 106, 45, 1, 255, 104, 50, 6, 255, 98, 48, 3, 255, 103, 50, 1, 255, 107, 48, 5, 255, 100, 43, 4, 255, 100, 47, 3, 255, 95, 42, 4, 255, 93, 41, 3, 255, 100, 49, 1, 255, 98, 45, 3, 255, 97, 40, 5, 255, 98, 42, 4, 255, 100, 46, 2, 255, 101, 47, 1, 255, 105, 48, 3, 255, 102, 43, 3, 255, 96, 37, 0, 255, 103, 41, 4, 255, 104, 41, 6, 255, 97, 40, 3, 255, 96, 43, 5, 255, 95, 42, 3, 255, 99, 43, 4, 255, 99, 41, 3, 255, 97, 42, 3, 255, 96, 43, 4, 255, 95, 43, 3, 255, 97, 42, 3, 255, 97, 41, 5, 255, 93, 43, 3, 255, 97, 42, 1, 255, 98, 44, 0, 255, 101, 45, 3, 255, 99, 47, 5, 255, 94, 49, 8, 255, 93, 48, 2, 255, 107, 55, 2, 255, 112, 52, 8, 255, 97, 47, 4, 255, 105, 49, 4, 255, 124, 50, 3, 255, 118, 56, 7, 255, 132, 57, 7, 255, 145, 58, 6, 255, 146, 62, 9, 255, 150, 65, 6, 255, 152, 69, 1, 255, 147, 68, 6, 255, 149, 65, 7, 255, 149, 64, 10, 255, 146, 65, 2, 255, 153, 65, 7, 255, 153, 66, 10, 255, 147, 69, 0, 255, 146, 68, 10, 255, 147, 66, 12, 255, 149, 65, 12, 255, 155, 66, 8, 255, 152, 67, 3, 255, 149, 70, 9, 255, 146, 72, 10, 255, 142, 69, 4, 255, 147, 72, 7, 255, 151, 72, 13, 255, 149, 73, 8, 255, 151, 73, 9, 255, 152, 77, 15, 255, 153, 76, 12, 255, 156, 76, 12, 255, 151, 76, 10, 255, 155, 76, 9, 255, 161, 77, 11, 255, 153, 75, 7, 255, 136, 71, 22, 255, 135, 69, 20, 255, 137, 77, 16, 255, 147, 72, 22, 255, 113, 71, 21, 255, 91, 64, 23, 255, 99, 70, 16, 255, 87, 62, 15, 255, 91, 63, 22, 255, 99, 72, 15, 255, 90, 67, 39, 255, 81, 70, 23, 255, 71, 73, 29, 255, 74, 74, 19, 255, 86, 71, 15, 255, 77, 75, 33, 255, 79, 77, 26, 255, 88, 78, 28, 255, 91, 79, 25, 255, 92, 78, 19, 255, 94, 81, 23, 255, 94, 82, 23, 255, 91, 80, 20, 255, 92, 82, 32, 255, 92, 83, 31, 255, 96, 84, 22, 255, 96, 84, 11, 255, 101, 86, 25, 255, 103, 85, 24, 255, 104, 83, 32, 255, 103, 82, 28, 255, 104, 83, 22, 255, 104, 86, 15, 255, 105, 85, 25, 255, 101, 85, 22, 255, 104, 85, 26, 255, 106, 84, 33, 255, 107, 87, 17, 255, 106, 91, 21, 255, 97, 87, 18, 255, 102, 88, 19, 255, 105, 84, 21, 255, 102, 81, 20, 255, 106, 85, 21, 255, 109, 85, 16, 255, 111, 85, 20, 255, 109, 82, 17, 255, 107, 83, 9, 255, 108, 84, 17, 255, 109, 86, 7, 255, 109, 80, 17, 255, 107, 79, 23, 255, 107, 77, 18, 255, 110, 80, 17, 255, 110, 82, 17, 255, 103, 76, 15, 255, 104, 74, 15, 255, 106, 77, 14, 255, 100, 73, 16, 255, 105, 75, 14, 255, 108, 73, 8, 255, 107, 74, 12, 255, 101, 71, 9, 255, 104, 70, 10, 255, 104, 71, 9, 255, 110, 71, 13, 255, 110, 68, 8, 255, 107, 69, 7, 255, 104, 70, 11, 255, 100, 70, 6, 255, 107, 68, 10, 255, 105, 65, 10, 255, 104, 65, 2, 255, 107, 67, 10, 255, 106, 65, 8, 255, 102, 60, 9, 255, 109, 63, 8, 255, 112, 62, 5, 255, 110, 59, 2, 255, 112, 61, 5, 255, 110, 61, 6, 255, 112, 62, 9, 255, 106, 58, 5, 255, 104, 57, 4, 255, 108, 57, 0, 255, 114, 59, 7, 255, 110, 56, 7, 255, 108, 57, 5, 255, 109, 59, 6, 255, 111, 58, 6, 255, 107, 59, 3, 255, 102, 56, 3, 255, 112, 56, 9, 255, 111, 46, 3, 255, 108, 50, 3, 255, 102, 54, 2, 255, 102, 54, 7, 255, 94, 51, 3, 255, 95, 47, 4, 255, 86, 43, 2, 255, 83, 47, 4, 255, 93, 45, 6, 255, 87, 39, 2, 255, 83, 39, 3, 255, 77, 42, 6, 255, 65, 38, 3, 255, 69, 37, 4, 255, 70, 35, 3, 255, 67, 35, 1, 255, 68, 34, 1, 255, 72, 29, 1, 255, 67, 30, 2, 255, 59, 30, 2, 255, 72, 36, 7, 255, 98, 47, 5, 255, 98, 44, 5, 255, 90, 40, 3, 255, 96, 49, 6, 255, 103, 51, 4, 255, 98, 46, 0, 255, 97, 50, 2, 255, 100, 46, 4, 255, 100, 44, 1, 255, 96, 46, 2, 255, 104, 50, 3, 255, 113, 53, 2, 255, 113, 47, 4, 255, 112, 48, 3, 255, 100, 47, 2, 255, 95, 46, 5, 255, 96, 41, 5, 255, 100, 38, 4, 255, 100, 44, 4, 255, 100, 40, 0, 255, 98, 38, 6, 255, 102, 36, 5, 255, 104, 34, 1, 255, 106, 40, 4, 255, 107, 43, 3, 255, 114, 42, 4, 255, 119, 46, 5, 255, 114, 48, 1, 255, 119, 46, 5, 255, 115, 41, 6, 255, 109, 40, 5, 255, 101, 39, 5, 255, 92, 33, 1, 255, 80, 26, 4, 255, 81, 27, 5, 255, 79, 27, 4, 255, 74, 28, 2, 255, 73, 28, 0, 255, 79, 30, 4, 255, 86, 29, 7, 255, 82, 30, 1, 255, 85, 27, 1, 255, 106, 35, 8, 255, 110, 37, 2, 255, 99, 30, 8, 255, 91, 26, 1, 255, 98, 31, 2, 255, 104, 38, 0, 255, 102, 28, 4, 255, 111, 25, 7, 255, 120, 30, 1, 255, 118, 33, 2, 255, 117, 29, 1, 255, 128, 38, 6, 255, 125, 33, 2, 255, 124, 30, 3, 255, 126, 32, 4, 255, 121, 29, 2, 255, 118, 29, 3, 255, 113, 27, 3, 255, 112, 26, 2, 255, 111, 27, 1, 255, 112, 29, 3, 255, 110, 29, 5, 255, 101, 25, 3, 255, 96, 22, 1, 255, 95, 22, 2, 255, 93, 21, 3, 255, 88, 19, 3, 255, 85, 19, 3, 255, 87, 22, 6, 255, 89, 24, 3, 255, 89, 24, 1, 255, 84, 21, 1, 255, 84, 21, 4, 255, 83, 22, 5, 255, 76, 22, 2, 255, 71, 23, 2, 255, 85, 30, 6, 255, 91, 33, 4, 255, 80, 30, 3, 255, 84, 24, 6, 255, 64, 18, 1, 255, 53, 20, 0, 255, 67, 15, 1, 255, 70, 18, 2, 255, 68, 20, 2, 255, 67, 20, 3, 255, 66, 18, 3, 255, 69, 18, 4, 255, 69, 17, 1, 255, 70, 20, 2, 255, 61, 16, 5, 255, 64, 15, 3, 255, 69, 18, 0, 255, 75, 19, 1, 255, 93, 27, 1, 255, 111, 38, 2, 255, 121, 44, 0, 255, 125, 43, 1, 255, 123, 41, 3, 255, 124, 45, 5, 255, 118, 38, 1, 255, 122, 41, 3, 255, 122, 44, 1, 255, 124, 47, 3, 255, 128, 48, 3, 255, 127, 46, 1, 255, 125, 46, 1, 255, 123, 48, 2, 255, 121, 50, 2, 255, 126, 49, 3, 255, 127, 47, 1, 255, 26, 42, 3, 255, 29, 37, 10, 255, 26, 26, 2, 255, 24, 20, 2, 255, 22, 19, 4, 255, 21, 18, 5, 255, 22, 14, 5, 255, 23, 13, 0, 255, 24, 14, 2, 255, 21, 13, 2, 255, 19, 10, 2, 255, 21, 13, 3, 255, 22, 13, 3, 255, 28, 11, 4, 255, 30, 13, 6, 255, 22, 10, 2, 255, 17, 8, 1, 255, 18, 9, 1, 255, 18, 14, 3, 255, 15, 13, 3, 255, 27, 14, 5, 255, 27, 11, 5, 255, 21, 11, 2, 255, 24, 12, 0, 255, 25, 13, 4, 255, 26, 15, 2, 255, 40, 20, 1, 255, 40, 19, 5, 255, 32, 16, 6, 255, 31, 19, 4, 255, 38, 22, 2, 255, 50, 23, 1, 255, 39, 19, 0, 255, 34, 18, 3, 255, 30, 17, 3, 255, 38, 21, 4, 255, 34, 25, 7, 255, 34, 29, 7, 255, 45, 35, 18, 255, 52, 46, 27, 255, 54, 52, 29, 255, 67, 51, 26, 255, 67, 44, 14, 255, 60, 44, 9, 255, 58, 40, 3, 255, 62, 31, 4, 255, 60, 29, 6, 255, 61, 44, 13, 255, 70, 50, 24, 255, 70, 52, 35, 255, 74, 62, 35, 255, 72, 63, 44, 255, 82, 65, 42, 255, 69, 62, 34, 255, 61, 56, 34, 255, 71, 56, 30, 255, 69, 50, 29, 255, 83, 48, 14, 255, 103, 62, 1, 255, 104, 67, 20, 255, 104, 68, 35, 255, 90, 65, 12, 255, 82, 61, 11, 255, 83, 53, 11, 255, 76, 44, 4, 255, 81, 46, 6, 255, 82, 43, 3, 255, 84, 46, 4, 255, 85, 44, 1, 255, 87, 44, 1, 255, 85, 42, 0, 255, 85, 43, 2, 255, 87, 44, 2, 255, 91, 45, 4, 255, 94, 47, 4, 255, 98, 51, 5, 255, 96, 50, 2, 255, 102, 53, 4, 255, 103, 52, 3, 255, 107, 56, 6, 255, 106, 54, 4, 255, 104, 53, 3, 255, 103, 54, 2, 255, 101, 51, 0, 255, 105, 58, 4, 255, 109, 59, 6, 255, 105, 56, 2, 255, 104, 61, 2, 255, 108, 61, 2, 255, 111, 59, 1, 255, 114, 58, 1, 255, 117, 53, 2, 255, 115, 48, 1, 255, 119, 55, 6, 255, 114, 59, 5, 255, 110, 60, 2, 255, 111, 61, 2, 255, 113, 59, 2, 255, 112, 53, 0, 255, 114, 54, 0, 255, 118, 61, 5, 255, 118, 61, 3, 255, 118, 62, 1, 255, 111, 53, 2, 255, 110, 52, 2, 255, 119, 67, 4, 255, 106, 57, 0, 255, 98, 48, 1, 255, 104, 55, 4, 255, 98, 51, 6, 255, 91, 42, 7, 255, 96, 48, 3, 255, 100, 50, 1, 255, 99, 47, 0, 255, 100, 48, 4, 255, 94, 45, 2, 255, 103, 45, 5, 255, 101, 46, 6, 255, 93, 45, 4, 255, 93, 40, 0, 255, 94, 41, 0, 255, 98, 45, 3, 255, 107, 47, 7, 255, 101, 41, 2, 255, 95, 39, 1, 255, 98, 45, 3, 255, 98, 45, 3, 255, 101, 46, 5, 255, 96, 43, 3, 255, 98, 45, 5, 255, 104, 42, 6, 255, 102, 42, 4, 255, 99, 42, 4, 255, 94, 46, 4, 255, 99, 51, 7, 255, 95, 47, 1, 255, 96, 49, 2, 255, 101, 47, 10, 255, 89, 40, 6, 255, 89, 41, 3, 255, 98, 48, 5, 255, 74, 44, 7, 255, 80, 42, 9, 255, 94, 48, 5, 255, 96, 49, 11, 255, 105, 49, 2, 255, 118, 54, 9, 255, 124, 58, 12, 255, 134, 62, 5, 255, 137, 63, 5, 255, 137, 64, 9, 255, 143, 65, 5, 255, 143, 64, 4, 255, 149, 69, 8, 255, 154, 66, 10, 255, 153, 66, 13, 255, 153, 69, 14, 255, 154, 69, 4, 255, 149, 65, 16, 255, 141, 70, 10, 255, 156, 72, 7, 255, 159, 75, 6, 255, 153, 68, 10, 255, 160, 73, 13, 255, 163, 76, 7, 255, 160, 78, 8, 255, 159, 77, 9, 255, 156, 75, 10, 255, 151, 77, 12, 255, 157, 83, 8, 255, 159, 77, 10, 255, 146, 75, 15, 255, 115, 67, 12, 255, 88, 59, 17, 255, 73, 56, 13, 255, 105, 73, 17, 255, 143, 76, 25, 255, 102, 68, 17, 255, 73, 67, 5, 255, 77, 64, 21, 255, 81, 70, 15, 255, 84, 64, 21, 255, 94, 67, 26, 255, 96, 72, 26, 255, 85, 67, 26, 255, 81, 71, 23, 255, 89, 77, 15, 255, 91, 72, 23, 255, 96, 79, 22, 255, 96, 74, 31, 255, 95, 78, 23, 255, 100, 82, 26, 255, 95, 81, 24, 255, 94, 78, 27, 255, 97, 83, 20, 255, 96, 83, 31, 255, 97, 85, 25, 255, 99, 82, 27, 255, 99, 83, 18, 255, 100, 85, 26, 255, 99, 87, 14, 255, 103, 91, 12, 255, 102, 85, 16, 255, 108, 87, 26, 255, 108, 83, 29, 255, 104, 84, 29, 255, 99, 86, 28, 255, 98, 89, 17, 255, 102, 88, 29, 255, 105, 88, 18, 255, 106, 83, 32, 255, 105, 84, 33, 255, 102, 90, 12, 255, 100, 84, 17, 255, 105, 84, 24, 255, 106, 87, 28, 255, 105, 86, 20, 255, 111, 88, 15, 255, 112, 88, 8, 255, 112, 82, 16, 255, 110, 81, 21, 255, 107, 83, 21, 255, 109, 84, 23, 255, 109, 81, 21, 255, 109, 79, 17, 255, 110, 78, 21, 255, 110, 80, 12, 255, 107, 79, 14, 255, 100, 73, 16, 255, 101, 75, 13, 255, 106, 75, 17, 255, 100, 72, 17, 255, 105, 75, 14, 255, 111, 74, 9, 255, 108, 72, 12, 255, 106, 74, 11, 255, 106, 72, 9, 255, 102, 69, 11, 255, 105, 69, 12, 255, 103, 68, 4, 255, 103, 69, 7, 255, 105, 70, 9, 255, 111, 71, 7, 255, 107, 69, 6, 255, 106, 67, 8, 255, 106, 67, 9, 255, 102, 62, 7, 255, 104, 62, 6, 255, 110, 63, 8, 255, 112, 63, 5, 255, 115, 65, 6, 255, 108, 61, 5, 255, 105, 63, 7, 255, 102, 60, 5, 255, 101, 56, 1, 255, 105, 58, 4, 255, 109, 61, 6, 255, 103, 59, 0, 255, 104, 59, 1, 255, 102, 54, 1, 255, 108, 60, 2, 255, 106, 58, 2, 255, 106, 55, 4, 255, 110, 56, 1, 255, 107, 56, 1, 255, 107, 58, 4, 255, 98, 49, 3, 255, 106, 53, 9, 255, 109, 52, 5, 255, 110, 50, 1, 255, 98, 53, 2, 255, 92, 51, 1, 255, 89, 47, 5, 255, 86, 44, 7, 255, 86, 43, 7, 255, 86, 44, 3, 255, 79, 42, 1, 255, 77, 40, 2, 255, 75, 39, 2, 255, 71, 38, 3, 255, 71, 35, 4, 255, 68, 35, 6, 255, 67, 36, 5, 255, 74, 34, 6, 255, 68, 35, 2, 255, 59, 34, 1, 255, 62, 32, 5, 255, 78, 36, 5, 255, 79, 37, 4, 255, 69, 36, 3, 255, 73, 38, 3, 255, 90, 40, 1, 255, 107, 48, 1, 255, 104, 48, 5, 255, 95, 43, 3, 255, 94, 44, 2, 255, 97, 44, 5, 255, 107, 47, 4, 255, 114, 50, 6, 255, 101, 41, 4, 255, 92, 41, 3, 255, 100, 42, 6, 255, 97, 36, 3, 255, 91, 38, 1, 255, 102, 38, 2, 255, 107, 41, 5, 255, 105, 39, 5, 255, 100, 39, 1, 255, 103, 39, 1, 255, 106, 40, 3, 255, 108, 45, 6, 255, 106, 44, 1, 255, 110, 43, 2, 255, 110, 41, 1, 255, 108, 41, 1, 255, 109, 43, 8, 255, 95, 30, 5, 255, 81, 21, 1, 255, 78, 26, 4, 255, 74, 28, 6, 255, 68, 26, 3, 255, 75, 31, 7, 255, 76, 28, 3, 255, 81, 30, 3, 255, 82, 31, 4, 255, 79, 30, 3, 255, 83, 24, 2, 255, 90, 34, 3, 255, 91, 35, 5, 255, 103, 31, 0, 255, 115, 37, 1, 255, 102, 31, 1, 255, 103, 36, 1, 255, 118, 31, 5, 255, 137, 41, 6, 255, 129, 44, 0, 255, 111, 38, 1, 255, 110, 35, 4, 255, 116, 31, 2, 255, 117, 32, 0, 255, 119, 35, 1, 255, 120, 33, 0, 255, 123, 34, 3, 255, 124, 35, 5, 255, 117, 30, 1, 255, 119, 31, 1, 255, 116, 28, 0, 255, 113, 27, 0, 255, 112, 28, 2, 255, 110, 27, 2, 255, 106, 26, 3, 255, 97, 22, 1, 255, 97, 20, 1, 255, 94, 20, 0, 255, 92, 22, 4, 255, 92, 21, 5, 255, 85, 16, 1, 255, 84, 21, 3, 255, 89, 25, 3, 255, 91, 24, 1, 255, 88, 22, 1, 255, 90, 22, 3, 255, 89, 23, 5, 255, 83, 23, 4, 255, 70, 20, 0, 255, 74, 27, 3, 255, 100, 26, 4, 255, 71, 16, 1, 255, 55, 10, 4, 255, 64, 16, 8, 255, 66, 16, 6, 255, 66, 16, 3, 255, 67, 20, 5, 255, 65, 19, 3, 255, 63, 17, 1, 255, 64, 17, 1, 255, 64, 15, 1, 255, 64, 16, 1, 255, 62, 18, 4, 255, 50, 9, 6, 255, 58, 13, 6, 255, 68, 21, 1, 255, 70, 19, 3, 255, 80, 22, 4, 255, 103, 31, 4, 255, 118, 42, 3, 255, 122, 42, 2, 255, 121, 39, 4, 255, 115, 35, 2, 255, 113, 35, 3, 255, 111, 35, 2, 255, 113, 38, 2, 255, 119, 44, 4, 255, 122, 43, 1, 255, 127, 46, 3, 255, 128, 47, 3, 255, 125, 49, 2, 255, 122, 50, 3, 255, 125, 48, 2, 255, 126, 48, 2, 255, 26, 30, 9, 255, 21, 24, 3, 255, 22, 24, 3, 255, 21, 20, 1, 255, 22, 19, 3, 255, 23, 15, 5, 255, 24, 12, 4, 255, 24, 13, 4, 255, 21, 11, 3, 255, 18, 9, 1, 255, 17, 9, 1, 255, 24, 13, 4, 255, 22, 12, 2, 255, 17, 10, 1, 255, 16, 10, 2, 255, 12, 13, 0, 255, 16, 13, 4, 255, 22, 10, 5, 255, 22, 10, 3, 255, 14, 13, 2, 255, 20, 10, 3, 255, 36, 18, 6, 255, 32, 18, 3, 255, 23, 12, 2, 255, 35, 19, 7, 255, 37, 17, 2, 255, 38, 18, 4, 255, 41, 19, 3, 255, 44, 22, 4, 255, 42, 25, 4, 255, 41, 19, 2, 255, 39, 17, 3, 255, 35, 18, 3, 255, 34, 20, 4, 255, 30, 15, 2, 255, 37, 18, 6, 255, 36, 20, 8, 255, 42, 31, 13, 255, 43, 36, 18, 255, 49, 49, 27, 255, 58, 54, 32, 255, 72, 58, 22, 255, 78, 56, 4, 255, 74, 46, 7, 255, 65, 40, 9, 255, 56, 31, 2, 255, 61, 28, 5, 255, 64, 44, 20, 255, 67, 52, 23, 255, 69, 55, 23, 255, 79, 64, 31, 255, 92, 63, 37, 255, 88, 64, 38, 255, 69, 57, 18, 255, 65, 63, 35, 255, 64, 68, 36, 255, 72, 53, 15, 255, 80, 55, 13, 255, 88, 59, 35, 255, 104, 69, 43, 255, 99, 63, 35, 255, 90, 65, 23, 255, 80, 56, 9, 255, 86, 50, 9, 255, 79, 49, 4, 255, 83, 49, 5, 255, 79, 40, 0, 255, 83, 41, 1, 255, 85, 42, 2, 255, 88, 44, 2, 255, 85, 42, 2, 255, 85, 43, 3, 255, 89, 48, 5, 255, 87, 45, 1, 255, 90, 46, 1, 255, 94, 48, 2, 255, 98, 50, 4, 255, 104, 53, 5, 255, 108, 55, 5, 255, 107, 55, 3, 255, 106, 56, 4, 255, 102, 54, 2, 255, 98, 54, 2, 255, 105, 59, 2, 255, 102, 58, 0, 255, 105, 57, 0, 255, 109, 57, 2, 255, 104, 59, 1, 255, 109, 59, 2, 255, 115, 56, 1, 255, 115, 57, 0, 255, 116, 53, 1, 255, 112, 48, 0, 255, 114, 54, 1, 255, 115, 57, 2, 255, 119, 61, 2, 255, 113, 59, 2, 255, 114, 58, 1, 255, 117, 60, 4, 255, 115, 60, 3, 255, 117, 62, 4, 255, 119, 61, 3, 255, 112, 57, 1, 255, 115, 62, 2, 255, 122, 65, 2, 255, 121, 64, 3, 255, 118, 65, 1, 255, 124, 70, 3, 255, 121, 61, 4, 255, 115, 56, 3, 255, 118, 69, 7, 255, 118, 68, 4, 255, 121, 65, 4, 255, 115, 58, 4, 255, 105, 54, 6, 255, 101, 50, 4, 255, 100, 45, 2, 255, 97, 41, 2, 255, 95, 44, 4, 255, 99, 45, 4, 255, 102, 45, 2, 255, 104, 44, 3, 255, 103, 40, 2, 255, 101, 42, 2, 255, 99, 44, 3, 255, 96, 44, 2, 255, 100, 45, 4, 255, 103, 43, 3, 255, 102, 46, 2, 255, 102, 49, 4, 255, 101, 45, 2, 255, 99, 47, 3, 255, 100, 46, 3, 255, 102, 44, 3, 255, 101, 48, 5, 255, 100, 47, 4, 255, 102, 48, 5, 255, 97, 46, 2, 255, 96, 45, 1, 255, 97, 48, 2, 255, 101, 51, 4, 255, 97, 50, 5, 255, 95, 50, 3, 255, 96, 51, 2, 255, 88, 50, 8, 255, 91, 47, 6, 255, 89, 43, 2, 255, 79, 41, 9, 255, 89, 46, 14, 255, 99, 52, 4, 255, 97, 51, 3, 255, 99, 52, 12, 255, 105, 54, 7, 255, 114, 58, 8, 255, 117, 53, 17, 255, 113, 54, 6, 255, 108, 58, 1, 255, 121, 59, 16, 255, 136, 69, 8, 255, 130, 65, 12, 255, 138, 62, 14, 255, 109, 58, 13, 255, 95, 57, 11, 255, 102, 58, 8, 255, 110, 60, 11, 255, 125, 65, 16, 255, 143, 73, 16, 255, 148, 73, 11, 255, 149, 77, 10, 255, 143, 74, 21, 255, 127, 67, 18, 255, 94, 60, 15, 255, 70, 59, 21, 255, 75, 61, 17, 255, 74, 66, 17, 255, 72, 59, 23, 255, 95, 71, 15, 255, 118, 68, 17, 255, 82, 68, 23, 255, 80, 67, 19, 255, 86, 70, 23, 255, 90, 71, 30, 255, 93, 69, 27, 255, 91, 69, 27, 255, 88, 75, 16, 255, 94, 77, 27, 255, 98, 74, 23, 255, 92, 74, 38, 255, 91, 78, 21, 255, 101, 75, 33, 255, 97, 76, 33, 255, 96, 81, 26, 255, 100, 83, 26, 255, 100, 82, 17, 255, 98, 78, 31, 255, 97, 83, 24, 255, 98, 85, 25, 255, 102, 85, 24, 255, 104, 87, 21, 255, 103, 88, 23, 255, 101, 86, 35, 255, 98, 85, 30, 255, 99, 85, 31, 255, 103, 86, 33, 255, 105, 88, 18, 255, 102, 87, 30, 255, 99, 88, 18, 255, 102, 90, 17, 255, 107, 88, 27, 255, 106, 87, 20, 255, 105, 82, 40, 255, 108, 84, 29, 255, 106, 86, 30, 255, 106, 86, 22, 255, 107, 85, 22, 255, 104, 84, 27, 255, 108, 87, 21, 255, 109, 87, 13, 255, 108, 82, 18, 255, 114, 82, 18, 255, 114, 84, 21, 255, 108, 85, 18, 255, 103, 80, 28, 255, 105, 78, 29, 255, 116, 83, 17, 255, 116, 80, 11, 255, 111, 75, 7, 255, 107, 76, 11, 255, 104, 79, 15, 255, 103, 79, 15, 255, 103, 73, 16, 255, 102, 72, 22, 255, 104, 74, 9, 255, 112, 76, 8, 255, 111, 73, 15, 255, 109, 72, 10, 255, 111, 73, 8, 255, 109, 71, 17, 255, 113, 69, 17, 255, 111, 69, 5, 255, 105, 69, 12, 255, 102, 67, 8, 255, 108, 68, 8, 255, 108, 68, 9, 255, 102, 62, 4, 255, 108, 67, 11, 255, 107, 68, 5, 255, 103, 62, 3, 255, 109, 62, 4, 255, 114, 62, 8, 255, 113, 63, 6, 255, 109, 60, 11, 255, 105, 57, 10, 255, 104, 58, 8, 255, 104, 59, 6, 255, 103, 59, 4, 255, 102, 56, 6, 255, 104, 57, 2, 255, 102, 55, 5, 255, 97, 52, 4, 255, 102, 57, 6, 255, 106, 55, 6, 255, 105, 54, 0, 255, 107, 55, 1, 255, 108, 52, 4, 255, 103, 49, 5, 255, 104, 54, 8, 255, 108, 54, 9, 255, 104, 48, 4, 255, 105, 52, 5, 255, 109, 54, 2, 255, 97, 49, 3, 255, 91, 44, 4, 255, 95, 43, 2, 255, 89, 42, 2, 255, 84, 39, 6, 255, 86, 39, 7, 255, 78, 41, 4, 255, 69, 40, 1, 255, 68, 36, 2, 255, 68, 31, 2, 255, 71, 35, 7, 255, 69, 34, 6, 255, 62, 34, 7, 255, 63, 36, 5, 255, 66, 34, 2, 255, 61, 29, 5, 255, 62, 34, 4, 255, 62, 29, 7, 255, 58, 31, 1, 255, 62, 33, 4, 255, 75, 34, 6, 255, 95, 46, 1, 255, 95, 42, 2, 255, 94, 42, 5, 255, 86, 41, 2, 255, 88, 41, 4, 255, 100, 43, 2, 255, 106, 41, 3, 255, 95, 34, 4, 255, 92, 38, 1, 255, 97, 36, 4, 255, 94, 35, 5, 255, 91, 35, 3, 255, 94, 37, 4, 255, 98, 33, 3, 255, 98, 32, 4, 255, 97, 38, 3, 255, 92, 33, 0, 255, 96, 36, 8, 255, 97, 34, 7, 255, 96, 31, 1, 255, 99, 33, 1, 255, 96, 34, 5, 255, 78, 26, 3, 255, 65, 25, 2, 255, 58, 25, 3, 255, 60, 24, 1, 255, 71, 28, 2, 255, 79, 29, 1, 255, 75, 26, 4, 255, 74, 29, 4, 255, 75, 29, 2, 255, 88, 33, 6, 255, 89, 28, 3, 255, 84, 24, 0, 255, 89, 29, 4, 255, 101, 35, 5, 255, 117, 42, 5, 255, 110, 33, 3, 255, 97, 26, 3, 255, 103, 31, 6, 255, 122, 39, 6, 255, 137, 46, 4, 255, 138, 42, 2, 255, 138, 47, 0, 255, 136, 41, 1, 255, 137, 39, 6, 255, 129, 43, 2, 255, 123, 39, 1, 255, 117, 32, 0, 255, 120, 35, 3, 255, 121, 36, 5, 255, 116, 32, 1, 255, 117, 35, 3, 255, 115, 31, 2, 255, 112, 27, 1, 255, 111, 28, 4, 255, 112, 29, 4, 255, 105, 26, 1, 255, 100, 24, 1, 255, 94, 22, 2, 255, 96, 23, 3, 255, 93, 24, 1, 255, 90, 22, 2, 255, 90, 19, 2, 255, 93, 22, 5, 255, 90, 23, 1, 255, 88, 22, 1, 255, 89, 19, 1, 255, 91, 22, 1, 255, 89, 19, 0, 255, 86, 19, 2, 255, 84, 21, 4, 255, 77, 19, 0, 255, 74, 22, 3, 255, 71, 20, 3, 255, 58, 20, 1, 255, 48, 17, 2, 255, 51, 14, 4, 255, 54, 14, 4, 255, 60, 14, 3, 255, 61, 17, 3, 255, 61, 18, 2, 255, 65, 19, 2, 255, 68, 19, 2, 255, 67, 20, 4, 255, 62, 16, 1, 255, 61, 15, 2, 255, 54, 13, 4, 255, 59, 14, 1, 255, 67, 19, 0, 255, 68, 20, 4, 255, 75, 23, 2, 255, 91, 23, 2, 255, 110, 38, 3, 255, 119, 42, 4, 255, 111, 32, 2, 255, 105, 29, 0, 255, 102, 29, 0, 255, 103, 30, 3, 255, 106, 32, 3, 255, 109, 35, 1, 255, 116, 40, 1, 255, 122, 46, 2, 255, 122, 48, 1, 255, 123, 52, 3, 255, 122, 48, 0, 255, 125, 46, 0, 255, 126, 46, 0, 255, 22, 17, 4, 255, 21, 15, 9, 255, 19, 16, 7, 255, 17, 17, 3, 255, 21, 18, 3, 255, 30, 17, 5, 255, 27, 12, 3, 255, 25, 13, 6, 255, 23, 13, 5, 255, 21, 12, 3, 255, 20, 11, 2, 255, 24, 10, 2, 255, 24, 11, 3, 255, 20, 14, 4, 255, 24, 12, 3, 255, 20, 11, 3, 255, 16, 12, 3, 255, 18, 13, 4, 255, 19, 12, 2, 255, 19, 9, 2, 255, 20, 10, 3, 255, 24, 11, 2, 255, 27, 14, 6, 255, 22, 14, 4, 255, 25, 18, 4, 255, 26, 14, 3, 255, 24, 11, 5, 255, 34, 20, 3, 255, 40, 22, 2, 255, 38, 18, 2, 255, 33, 14, 4, 255, 28, 12, 5, 255, 32, 16, 5, 255, 34, 13, 2, 255, 28, 18, 4, 255, 27, 19, 3, 255, 39, 22, 4, 255, 39, 30, 12, 255, 53, 34, 19, 255, 62, 42, 19, 255, 62, 55, 30, 255, 64, 54, 25, 255, 73, 53, 16, 255, 72, 48, 8, 255, 66, 48, 3, 255, 61, 36, 1, 255, 75, 35, 2, 255, 78, 48, 8, 255, 71, 54, 21, 255, 76, 58, 19, 255, 88, 61, 26, 255, 91, 59, 44, 255, 79, 62, 45, 255, 71, 58, 23, 255, 74, 69, 41, 255, 78, 66, 39, 255, 79, 56, 14, 255, 72, 59, 14, 255, 79, 66, 51, 255, 87, 72, 53, 255, 86, 69, 17, 255, 90, 68, 12, 255, 81, 55, 10, 255, 74, 49, 3, 255, 71, 55, 2, 255, 77, 47, 2, 255, 83, 42, 2, 255, 82, 42, 1, 255, 77, 42, 1, 255, 78, 43, 2, 255, 84, 45, 3, 255, 86, 45, 3, 255, 88, 45, 1, 255, 92, 44, 1, 255, 91, 49, 3, 255, 95, 53, 4, 255, 97, 50, 1, 255, 101, 49, 2, 255, 101, 53, 2, 255, 101, 51, 1, 255, 104, 55, 2, 255, 100, 57, 2, 255, 97, 58, 1, 255, 106, 58, 1, 255, 111, 58, 1, 255, 113, 58, 1, 255, 106, 58, 1, 255, 98, 58, 3, 255, 106, 59, 2, 255, 115, 55, 2, 255, 121, 53, 6, 255, 116, 49, 2, 255, 115, 51, 2, 255, 113, 50, 1, 255, 115, 52, 1, 255, 116, 54, 2, 255, 117, 55, 5, 255, 116, 50, 2, 255, 117, 59, 7, 255, 112, 63, 4, 255, 112, 63, 3, 255, 112, 65, 4, 255, 113, 63, 3, 255, 116, 68, 2, 255, 111, 64, 4, 255, 116, 61, 6, 255, 125, 67, 5, 255, 125, 65, 1, 255, 119, 56, 2, 255, 128, 65, 2, 255, 130, 70, 1, 255, 123, 68, 0, 255, 131, 66, 2, 255, 131, 68, 6, 255, 113, 61, 3, 255, 106, 55, 4, 255, 104, 50, 4, 255, 102, 51, 2, 255, 98, 50, 4, 255, 105, 50, 4, 255, 114, 54, 6, 255, 104, 45, 2, 255, 107, 45, 3, 255, 105, 45, 3, 255, 102, 45, 3, 255, 101, 45, 2, 255, 100, 46, 2, 255, 102, 43, 3, 255, 102, 43, 6, 255, 101, 46, 2, 255, 102, 43, 3, 255, 104, 44, 5, 255, 106, 44, 4, 255, 106, 48, 6, 255, 105, 47, 6, 255, 106, 46, 5, 255, 99, 47, 4, 255, 99, 50, 3, 255, 101, 51, 4, 255, 105, 50, 4, 255, 102, 47, 4, 255, 102, 49, 7, 255, 97, 51, 9, 255, 101, 50, 7, 255, 107, 50, 7, 255, 108, 51, 11, 255, 96, 52, 8, 255, 98, 50, 5, 255, 100, 52, 1, 255, 96, 52, 3, 255, 91, 52, 5, 255, 90, 52, 6, 255, 83, 49, 5, 255, 87, 54, 6, 255, 79, 53, 7, 255, 75, 55, 10, 255, 74, 52, 7, 255, 83, 50, 14, 255, 100, 63, 12, 255, 99, 58, 15, 255, 93, 54, 15, 255, 78, 51, 14, 255, 72, 50, 15, 255, 71, 51, 13, 255, 72, 55, 13, 255, 79, 57, 9, 255, 96, 59, 24, 255, 109, 67, 11, 255, 107, 67, 12, 255, 92, 59, 20, 255, 80, 56, 21, 255, 80, 59, 17, 255, 79, 63, 10, 255, 77, 65, 13, 255, 76, 66, 18, 255, 82, 62, 27, 255, 80, 67, 18, 255, 95, 68, 21, 255, 95, 70, 32, 255, 94, 72, 24, 255, 94, 72, 14, 255, 96, 70, 21, 255, 92, 74, 29, 255, 99, 71, 24, 255, 110, 75, 28, 255, 98, 77, 27, 255, 102, 79, 13, 255, 100, 80, 26, 255, 98, 83, 16, 255, 102, 77, 23, 255, 101, 80, 23, 255, 104, 84, 18, 255, 105, 79, 32, 255, 106, 85, 22, 255, 105, 83, 23, 255, 104, 84, 22, 255, 100, 82, 39, 255, 106, 88, 38, 255, 105, 86, 32, 255, 105, 84, 25, 255, 107, 86, 28, 255, 103, 87, 32, 255, 111, 92, 31, 255, 110, 87, 28, 255, 103, 86, 27, 255, 104, 89, 23, 255, 103, 89, 24, 255, 100, 91, 24, 255, 109, 87, 26, 255, 110, 86, 19, 255, 107, 91, 19, 255, 108, 89, 21, 255, 106, 85, 26, 255, 109, 85, 24, 255, 109, 85, 24, 255, 107, 88, 16, 255, 110, 88, 13, 255, 114, 86, 33, 255, 111, 83, 26, 255, 113, 80, 24, 255, 115, 83, 27, 255, 107, 81, 17, 255, 105, 83, 17, 255, 114, 89, 21, 255, 114, 80, 11, 255, 111, 80, 14, 255, 103, 78, 15, 255, 105, 76, 20, 255, 109, 82, 13, 255, 105, 79, 9, 255, 107, 75, 20, 255, 103, 73, 20, 255, 105, 72, 16, 255, 109, 73, 10, 255, 110, 74, 12, 255, 110, 70, 14, 255, 112, 72, 10, 255, 109, 71, 7, 255, 114, 70, 8, 255, 116, 71, 8, 255, 111, 70, 8, 255, 107, 71, 10, 255, 103, 66, 8, 255, 107, 68, 7, 255, 106, 65, 3, 255, 106, 64, 7, 255, 106, 63, 8, 255, 106, 60, 8, 255, 113, 63, 7, 255, 112, 61, 2, 255, 110, 59, 3, 255, 116, 61, 9, 255, 116, 59, 11, 255, 106, 55, 3, 255, 106, 58, 5, 255, 102, 55, 3, 255, 104, 53, 7, 255, 102, 54, 2, 255, 101, 55, 5, 255, 103, 54, 8, 255, 108, 58, 6, 255, 112, 58, 8, 255, 108, 56, 4, 255, 106, 58, 4, 255, 103, 52, 6, 255, 104, 52, 0, 255, 104, 53, 4, 255, 101, 53, 2, 255, 93, 49, 5, 255, 99, 51, 11, 255, 102, 50, 3, 255, 98, 46, 4, 255, 94, 40, 3, 255, 91, 43, 1, 255, 93, 44, 3, 255, 93, 41, 4, 255, 88, 42, 4, 255, 83, 40, 3, 255, 84, 38, 4, 255, 75, 40, 6, 255, 61, 38, 5, 255, 70, 31, 5, 255, 71, 34, 2, 255, 68, 35, 2, 255, 69, 34, 6, 255, 67, 32, 5, 255, 72, 34, 6, 255, 66, 36, 2, 255, 56, 25, 4, 255, 63, 28, 0, 255, 66, 35, 4, 255, 64, 31, 4, 255, 78, 36, 3, 255, 79, 35, 0, 255, 78, 33, 0, 255, 85, 35, 3, 255, 87, 40, 5, 255, 94, 44, 2, 255, 100, 40, 0, 255, 96, 38, 4, 255, 92, 38, 2, 255, 84, 35, 1, 255, 69, 32, 2, 255, 68, 23, 1, 255, 64, 19, 0, 255, 67, 27, 1, 255, 78, 29, 4, 255, 72, 26, 5, 255, 59, 22, 1, 255, 55, 24, 3, 255, 54, 22, 2, 255, 58, 22, 2, 255, 61, 24, 6, 255, 55, 26, 6, 255, 50, 24, 4, 255, 55, 22, 4, 255, 59, 28, 3, 255, 65, 29, 4, 255, 74, 26, 5, 255, 82, 28, 5, 255, 73, 24, 2, 255, 77, 30, 5, 255, 85, 35, 3, 255, 93, 33, 2, 255, 98, 32, 5, 255, 95, 29, 2, 255, 101, 34, 5, 255, 111, 37, 2, 255, 126, 46, 1, 255, 131, 45, 7, 255, 103, 32, 3, 255, 115, 42, 5, 255, 130, 46, 2, 255, 132, 43, 0, 255, 135, 45, 1, 255, 137, 46, 2, 255, 140, 45, 2, 255, 143, 43, 3, 255, 139, 44, 1, 255, 134, 40, 2, 255, 132, 39, 1, 255, 131, 39, 2, 255, 124, 37, 3, 255, 120, 34, 3, 255, 122, 37, 7, 255, 122, 34, 6, 255, 124, 34, 4, 255, 120, 33, 4, 255, 116, 31, 5, 255, 111, 29, 3, 255, 105, 30, 3, 255, 93, 26, 2, 255, 93, 26, 6, 255, 87, 22, 0, 255, 90, 26, 3, 255, 92, 25, 5, 255, 94, 24, 6, 255, 93, 24, 2, 255, 87, 22, 3, 255, 84, 22, 1, 255, 85, 21, 2, 255, 86, 21, 2, 255, 86, 22, 3, 255, 80, 19, 4, 255, 77, 19, 2, 255, 76, 17, 4, 255, 55, 14, 5, 255, 53, 19, 5, 255, 55, 22, 7, 255, 47, 11, 2, 255, 54, 11, 5, 255, 51, 14, 4, 255, 52, 12, 3, 255, 60, 15, 3, 255, 67, 19, 2, 255, 70, 20, 1, 255, 71, 18, 3, 255, 69, 16, 2, 255, 73, 19, 3, 255, 68, 18, 1, 255, 67, 20, 1, 255, 75, 23, 3, 255, 78, 24, 4, 255, 77, 21, 0, 255, 85, 20, 2, 255, 106, 33, 6, 255, 109, 32, 4, 255, 97, 22, 0, 255, 101, 32, 1, 255, 104, 36, 2, 255, 106, 32, 5, 255, 103, 29, 3, 255, 106, 34, 2, 255, 114, 41, 3, 255, 122, 43, 3, 255, 123, 43, 1, 255, 123, 47, 3, 255, 120, 48, 3, 255, 121, 44, 0, 255, 126, 44, 1, 255, 14, 15, 2, 255, 22, 14, 5, 255, 25, 14, 6, 255, 18, 12, 2, 255, 21, 16, 3, 255, 22, 14, 3, 255, 23, 10, 2, 255, 21, 10, 1, 255, 21, 11, 1, 255, 20, 12, 1, 255, 21, 12, 3, 255, 20, 9, 1, 255, 20, 10, 2, 255, 21, 12, 2, 255, 21, 11, 2, 255, 18, 9, 2, 255, 16, 9, 1, 255, 18, 12, 2, 255, 19, 11, 1, 255, 21, 10, 2, 255, 18, 13, 2, 255, 20, 14, 3, 255, 21, 15, 5, 255, 17, 12, 2, 255, 26, 17, 3, 255, 35, 20, 8, 255, 28, 18, 5, 255, 33, 17, 4, 255, 36, 17, 8, 255, 28, 14, 4, 255, 30, 15, 2, 255, 31, 20, 4, 255, 35, 17, 4, 255, 37, 19, 4, 255, 35, 14, 0, 255, 32, 18, 2, 255, 37, 19, 5, 255, 40, 22, 7, 255, 43, 30, 7, 255, 48, 40, 14, 255, 66, 53, 24, 255, 71, 55, 20, 255, 68, 49, 8, 255, 71, 42, 2, 255, 76, 48, 6, 255, 68, 41, 5, 255, 76, 37, 1, 255, 79, 44, 4, 255, 69, 56, 23, 255, 71, 57, 23, 255, 77, 59, 23, 255, 73, 59, 24, 255, 74, 59, 31, 255, 77, 60, 25, 255, 75, 74, 49, 255, 78, 62, 39, 255, 74, 55, 21, 255, 70, 56, 31, 255, 79, 68, 55, 255, 81, 69, 51, 255, 81, 65, 26, 255, 89, 64, 11, 255, 88, 58, 2, 255, 80, 50, 6, 255, 96, 54, 11, 255, 98, 48, 8, 255, 94, 40, 3, 255, 92, 44, 4, 255, 83, 43, 2, 255, 77, 44, 2, 255, 82, 47, 4, 255, 89, 45, 3, 255, 96, 45, 3, 255, 105, 45, 4, 255, 98, 50, 5, 255, 99, 51, 2, 255, 106, 52, 4, 255, 98, 52, 3, 255, 95, 58, 6, 255, 95, 53, 2, 255, 95, 50, 0, 255, 98, 55, 2, 255, 103, 58, 2, 255, 105, 53, 3, 255, 103, 57, 1, 255, 101, 58, 0, 255, 104, 53, 1, 255, 109, 51, 4, 255, 115, 60, 4, 255, 108, 59, 3, 255, 102, 52, 3, 255, 112, 59, 5, 255, 118, 60, 5, 255, 117, 55, 4, 255, 115, 54, 4, 255, 117, 58, 7, 255, 112, 58, 1, 255, 117, 58, 3, 255, 116, 62, 4, 255, 110, 67, 1, 255, 111, 66, 0, 255, 114, 63, 3, 255, 117, 61, 1, 255, 116, 65, 5, 255, 111, 65, 4, 255, 120, 68, 2, 255, 122, 64, 2, 255, 123, 59, 1, 255, 130, 65, 3, 255, 131, 69, 4, 255, 126, 68, 5, 255, 122, 76, 4, 255, 120, 60, 0, 255, 118, 51, 5, 255, 120, 65, 4, 255, 122, 68, 2, 255, 126, 70, 5, 255, 123, 67, 0, 255, 126, 69, 4, 255, 118, 64, 2, 255, 114, 63, 2, 255, 110, 56, 3, 255, 110, 51, 6, 255, 111, 50, 4, 255, 106, 47, 3, 255, 101, 47, 4, 255, 103, 48, 6, 255, 100, 46, 1, 255, 104, 43, 3, 255, 104, 42, 5, 255, 104, 44, 2, 255, 103, 46, 5, 255, 103, 49, 5, 255, 105, 51, 2, 255, 102, 53, 1, 255, 104, 51, 4, 255, 101, 47, 5, 255, 103, 51, 2, 255, 99, 51, 4, 255, 102, 48, 7, 255, 105, 47, 8, 255, 104, 55, 6, 255, 97, 50, 5, 255, 102, 53, 4, 255, 107, 52, 3, 255, 101, 46, 2, 255, 105, 53, 4, 255, 104, 52, 7, 255, 105, 53, 11, 255, 106, 54, 6, 255, 104, 51, 7, 255, 104, 54, 11, 255, 97, 51, 4, 255, 98, 55, 8, 255, 99, 58, 7, 255, 95, 53, 7, 255, 96, 56, 10, 255, 93, 56, 7, 255, 94, 56, 12, 255, 96, 55, 13, 255, 101, 61, 13, 255, 97, 58, 10, 255, 94, 57, 10, 255, 96, 60, 10, 255, 94, 61, 14, 255, 95, 63, 14, 255, 94, 59, 18, 255, 95, 62, 23, 255, 90, 64, 23, 255, 89, 68, 20, 255, 87, 63, 25, 255, 87, 60, 23, 255, 93, 65, 15, 255, 92, 67, 21, 255, 93, 65, 17, 255, 98, 70, 13, 255, 102, 69, 18, 255, 105, 71, 26, 255, 106, 75, 19, 255, 97, 69, 20, 255, 97, 71, 21, 255, 98, 70, 23, 255, 93, 74, 23, 255, 101, 77, 18, 255, 109, 79, 24, 255, 102, 77, 36, 255, 105, 77, 24, 255, 103, 77, 24, 255, 103, 79, 33, 255, 111, 85, 22, 255, 104, 85, 22, 255, 103, 85, 23, 255, 104, 81, 37, 255, 103, 81, 41, 255, 108, 85, 28, 255, 111, 88, 26, 255, 106, 87, 26, 255, 108, 88, 22, 255, 105, 88, 24, 255, 105, 88, 20, 255, 109, 91, 12, 255, 108, 89, 28, 255, 108, 86, 29, 255, 109, 85, 28, 255, 110, 91, 19, 255, 117, 90, 11, 255, 116, 89, 22, 255, 105, 90, 20, 255, 110, 88, 29, 255, 112, 87, 22, 255, 107, 88, 22, 255, 108, 87, 25, 255, 114, 91, 25, 255, 114, 89, 22, 255, 118, 91, 11, 255, 115, 87, 16, 255, 111, 84, 21, 255, 111, 82, 29, 255, 113, 83, 22, 255, 113, 84, 18, 255, 115, 87, 16, 255, 109, 81, 25, 255, 109, 82, 24, 255, 111, 83, 13, 255, 108, 79, 10, 255, 109, 84, 6, 255, 105, 82, 17, 255, 108, 74, 13, 255, 114, 78, 8, 255, 107, 74, 16, 255, 109, 71, 27, 255, 110, 71, 19, 255, 112, 72, 21, 255, 110, 72, 19, 255, 106, 73, 10, 255, 104, 72, 11, 255, 105, 71, 9, 255, 108, 69, 10, 255, 108, 68, 8, 255, 110, 69, 12, 255, 107, 66, 11, 255, 109, 68, 10, 255, 109, 69, 4, 255, 112, 67, 7, 255, 109, 64, 7, 255, 108, 65, 8, 255, 106, 63, 7, 255, 109, 62, 11, 255, 110, 61, 10, 255, 113, 63, 7, 255, 110, 60, 3, 255, 115, 60, 1, 255, 117, 62, 6, 255, 107, 58, 7, 255, 106, 58, 7, 255, 108, 56, 3, 255, 109, 58, 4, 255, 110, 60, 2, 255, 107, 56, 5, 255, 107, 56, 10, 255, 108, 58, 6, 255, 108, 53, 6, 255, 111, 51, 4, 255, 109, 53, 3, 255, 103, 52, 7, 255, 103, 56, 3, 255, 102, 52, 1, 255, 107, 55, 6, 255, 104, 52, 6, 255, 99, 43, 8, 255, 95, 46, 8, 255, 90, 47, 5, 255, 92, 45, 4, 255, 90, 45, 7, 255, 89, 40, 4, 255, 95, 42, 3, 255, 92, 43, 4, 255, 90, 40, 4, 255, 88, 39, 4, 255, 86, 39, 4, 255, 77, 40, 4, 255, 74, 36, 7, 255, 70, 37, 8, 255, 70, 37, 3, 255, 73, 37, 2, 255, 67, 32, 3, 255, 66, 29, 5, 255, 61, 32, 5, 255, 58, 27, 8, 255, 67, 31, 2, 255, 71, 36, 2, 255, 71, 38, 8, 255, 73, 34, 4, 255, 81, 33, 1, 255, 80, 33, 5, 255, 74, 33, 3, 255, 81, 33, 1, 255, 93, 37, 5, 255, 92, 35, 3, 255, 90, 34, 2, 255, 85, 32, 3, 255, 66, 28, 3, 255, 54, 27, 4, 255, 58, 23, 4, 255, 51, 23, 3, 255, 59, 29, 2, 255, 62, 28, 1, 255, 65, 25, 2, 255, 59, 26, 0, 255, 57, 31, 3, 255, 51, 26, 2, 255, 48, 24, 3, 255, 44, 21, 5, 255, 33, 16, 1, 255, 42, 21, 3, 255, 60, 22, 5, 255, 67, 30, 3, 255, 71, 32, 2, 255, 76, 27, 3, 255, 75, 26, 2, 255, 75, 25, 3, 255, 80, 30, 5, 255, 90, 37, 3, 255, 96, 36, 3, 255, 98, 33, 5, 255, 100, 31, 2, 255, 110, 39, 1, 255, 131, 46, 3, 255, 133, 45, 1, 255, 131, 42, 1, 255, 131, 38, 4, 255, 134, 38, 3, 255, 129, 43, 1, 255, 138, 47, 4, 255, 140, 46, 2, 255, 141, 46, 0, 255, 142, 47, 2, 255, 142, 46, 3, 255, 143, 44, 1, 255, 142, 43, 1, 255, 142, 45, 2, 255, 135, 41, 0, 255, 131, 40, 2, 255, 130, 41, 8, 255, 117, 30, 1, 255, 114, 28, 1, 255, 119, 31, 1, 255, 122, 32, 1, 255, 111, 28, 0, 255, 115, 29, 1, 255, 117, 31, 1, 255, 104, 33, 3, 255, 94, 24, 3, 255, 91, 27, 1, 255, 91, 28, 2, 255, 90, 23, 1, 255, 90, 22, 3, 255, 82, 21, 2, 255, 81, 20, 0, 255, 89, 25, 2, 255, 88, 23, 4, 255, 85, 20, 2, 255, 84, 21, 1, 255, 83, 21, 5, 255, 80, 19, 2, 255, 79, 19, 4, 255, 59, 21, 3, 255, 47, 14, 2, 255, 61, 19, 8, 255, 60, 13, 3, 255, 59, 17, 2, 255, 55, 15, 3, 255, 53, 15, 3, 255, 57, 18, 3, 255, 63, 18, 1, 255, 69, 17, 1, 255, 71, 19, 2, 255, 67, 16, 0, 255, 70, 17, 4, 255, 73, 16, 2, 255, 72, 21, 2, 255, 69, 16, 3, 255, 76, 14, 6, 255, 74, 19, 4, 255, 80, 22, 1, 255, 96, 27, 3, 255, 98, 23, 4, 255, 91, 23, 2, 255, 97, 34, 3, 255, 107, 38, 3, 255, 114, 36, 5, 255, 113, 37, 6, 255, 110, 37, 2, 255, 110, 35, 0, 255, 115, 35, 0, 255, 122, 39, 4, 255, 119, 39, 4, 255, 116, 41, 6, 255, 115, 37, 2, 255, 118, 35, 2, 255, 18, 14, 0, 255, 22, 14, 3, 255, 24, 14, 5, 255, 18, 10, 1, 255, 19, 15, 4, 255, 17, 10, 3, 255, 19, 10, 2, 255, 20, 11, 2, 255, 20, 11, 2, 255, 18, 9, 0, 255, 21, 13, 4, 255, 20, 14, 4, 255, 15, 10, 1, 255, 20, 10, 2, 255, 24, 12, 4, 255, 21, 10, 1, 255, 19, 9, 0, 255, 24, 12, 4, 255, 28, 13, 6, 255, 19, 11, 4, 255, 16, 14, 1, 255, 23, 17, 4, 255, 25, 16, 3, 255, 22, 13, 0, 255, 31, 17, 3, 255, 33, 17, 0, 255, 28, 19, 0, 255, 29, 16, 4, 255, 29, 12, 2, 255, 31, 17, 3, 255, 37, 20, 5, 255, 36, 20, 5, 255, 36, 21, 5, 255, 40, 23, 7, 255, 36, 18, 4, 255, 32, 15, 1, 255, 38, 21, 5, 255, 41, 26, 5, 255, 41, 28, 8, 255, 46, 36, 18, 255, 67, 49, 26, 255, 78, 57, 23, 255, 73, 51, 12, 255, 72, 44, 4, 255, 70, 47, 9, 255, 64, 46, 3, 255, 67, 36, 0, 255, 66, 36, 6, 255, 68, 56, 18, 255, 72, 59, 23, 255, 71, 57, 22, 255, 77, 62, 21, 255, 82, 59, 19, 255, 78, 59, 19, 255, 70, 71, 49, 255, 66, 63, 34, 255, 67, 54, 22, 255, 72, 60, 37, 255, 77, 68, 56, 255, 76, 66, 48, 255, 79, 62, 30, 255, 91, 64, 16, 255, 90, 55, 7, 255, 82, 44, 6, 255, 87, 51, 6, 255, 89, 49, 5, 255, 86, 41, 0, 255, 86, 41, 0, 255, 90, 47, 5, 255, 84, 44, 2, 255, 87, 41, 0, 255, 98, 47, 5, 255, 95, 49, 3, 255, 99, 47, 2, 255, 95, 49, 2, 255, 100, 50, 3, 255, 99, 50, 2, 255, 100, 55, 5, 255, 96, 54, 4, 255, 103, 54, 5, 255, 106, 53, 3, 255, 103, 51, 0, 255, 105, 51, 0, 255, 100, 50, 3, 255, 100, 59, 6, 255, 95, 56, 2, 255, 102, 49, 2, 255, 108, 49, 6, 255, 106, 55, 4, 255, 96, 58, 2, 255, 93, 55, 2, 255, 103, 59, 3, 255, 100, 56, 0, 255, 101, 56, 0, 255, 104, 56, 0, 255, 113, 61, 5, 255, 106, 63, 3, 255, 107, 65, 7, 255, 110, 61, 3, 255, 115, 65, 5, 255, 113, 65, 3, 255, 113, 64, 5, 255, 115, 61, 4, 255, 114, 64, 2, 255, 117, 68, 3, 255, 123, 64, 5, 255, 122, 64, 4, 255, 121, 65, 2, 255, 123, 65, 3, 255, 126, 62, 5, 255, 126, 58, 2, 255, 125, 68, 5, 255, 120, 61, 2, 255, 120, 64, 5, 255, 122, 67, 5, 255, 117, 55, 5, 255, 121, 57, 6, 255, 130, 67, 8, 255, 132, 72, 1, 255, 132, 73, 4, 255, 131, 71, 7, 255, 135, 78, 3, 255, 129, 75, 3, 255, 126, 68, 6, 255, 123, 66, 8, 255, 111, 59, 2, 255, 109, 53, 2, 255, 111, 53, 6, 255, 111, 56, 0, 255, 106, 54, 3, 255, 100, 50, 5, 255, 99, 52, 3, 255, 99, 49, 5, 255, 100, 47, 3, 255, 104, 52, 1, 255, 99, 53, 4, 255, 99, 48, 10, 255, 99, 46, 12, 255, 101, 46, 2, 255, 102, 53, 5, 255, 99, 51, 6, 255, 103, 50, 7, 255, 105, 52, 11, 255, 102, 51, 3, 255, 102, 54, 5, 255, 106, 54, 10, 255, 109, 52, 7, 255, 102, 51, 7, 255, 102, 55, 8, 255, 102, 52, 5, 255, 104, 52, 6, 255, 102, 54, 6, 255, 102, 54, 6, 255, 102, 56, 7, 255, 101, 54, 11, 255, 104, 55, 11, 255, 102, 58, 11, 255, 106, 55, 8, 255, 111, 56, 11, 255, 104, 59, 12, 255, 103, 60, 17, 255, 102, 57, 17, 255, 101, 58, 21, 255, 96, 57, 18, 255, 97, 59, 20, 255, 98, 62, 13, 255, 97, 62, 13, 255, 100, 64, 19, 255, 99, 66, 13, 255, 100, 66, 18, 255, 99, 65, 20, 255, 101, 68, 16, 255, 102, 69, 17, 255, 96, 64, 23, 255, 97, 66, 27, 255, 101, 70, 13, 255, 105, 70, 18, 255, 108, 71, 27, 255, 106, 73, 19, 255, 102, 68, 29, 255, 103, 69, 22, 255, 100, 76, 28, 255, 96, 76, 24, 255, 105, 81, 23, 255, 107, 80, 20, 255, 105, 80, 13, 255, 105, 75, 24, 255, 110, 80, 31, 255, 102, 82, 28, 255, 107, 82, 31, 255, 104, 83, 22, 255, 97, 84, 32, 255, 97, 81, 35, 255, 102, 80, 40, 255, 104, 85, 23, 255, 108, 89, 25, 255, 108, 85, 28, 255, 107, 86, 20, 255, 109, 89, 26, 255, 104, 90, 27, 255, 104, 91, 18, 255, 115, 89, 30, 255, 110, 86, 37, 255, 106, 86, 32, 255, 119, 92, 21, 255, 125, 91, 23, 255, 117, 89, 12, 255, 114, 91, 19, 255, 109, 87, 23, 255, 116, 87, 27, 255, 112, 88, 26, 255, 109, 89, 23, 255, 110, 90, 23, 255, 110, 88, 23, 255, 114, 85, 23, 255, 111, 81, 28, 255, 108, 87, 24, 255, 108, 87, 20, 255, 113, 86, 19, 255, 112, 81, 32, 255, 109, 84, 14, 255, 109, 82, 25, 255, 113, 84, 24, 255, 113, 82, 6, 255, 113, 79, 21, 255, 112, 82, 17, 255, 115, 78, 20, 255, 115, 74, 16, 255, 122, 78, 9, 255, 117, 72, 26, 255, 111, 73, 19, 255, 112, 75, 11, 255, 110, 70, 11, 255, 111, 72, 10, 255, 107, 70, 8, 255, 105, 70, 10, 255, 107, 73, 7, 255, 109, 73, 12, 255, 109, 69, 16, 255, 106, 67, 12, 255, 106, 69, 5, 255, 110, 69, 5, 255, 112, 65, 11, 255, 106, 63, 4, 255, 104, 62, 11, 255, 103, 62, 8, 255, 108, 66, 3, 255, 109, 61, 7, 255, 115, 62, 9, 255, 117, 63, 6, 255, 112, 61, 8, 255, 120, 64, 9, 255, 114, 59, 3, 255, 105, 57, 3, 255, 109, 60, 10, 255, 109, 57, 9, 255, 105, 55, 4, 255, 109, 58, 7, 255, 103, 51, 2, 255, 103, 52, 2, 255, 106, 56, 7, 255, 108, 55, 7, 255, 112, 55, 2, 255, 111, 56, 2, 255, 104, 55, 1, 255, 100, 52, 2, 255, 107, 55, 2, 255, 111, 57, 3, 255, 109, 51, 3, 255, 105, 46, 7, 255, 90, 40, 3, 255, 88, 47, 7, 255, 90, 46, 4, 255, 88, 45, 2, 255, 92, 43, 5, 255, 89, 43, 4, 255, 92, 45, 7, 255, 91, 42, 4, 255, 85, 44, 4, 255, 86, 43, 5, 255, 84, 37, 3, 255, 72, 38, 3, 255, 69, 34, 6, 255, 67, 32, 4, 255, 70, 35, 2, 255, 66, 33, 2, 255, 67, 32, 8, 255, 57, 28, 6, 255, 52, 31, 4, 255, 70, 37, 4, 255, 74, 33, 2, 255, 76, 36, 5, 255, 78, 35, 3, 255, 84, 28, 3, 255, 87, 32, 5, 255, 77, 34, 0, 255, 81, 32, 1, 255, 80, 26, 2, 255, 75, 27, 7, 255, 67, 26, 6, 255, 64, 25, 3, 255, 67, 24, 7, 255, 63, 24, 6, 255, 70, 29, 7, 255, 63, 29, 4, 255, 71, 31, 3, 255, 66, 30, 1, 255, 69, 28, 3, 255, 71, 27, 2, 255, 69, 26, 2, 255, 69, 28, 3, 255, 66, 29, 6, 255, 58, 27, 5, 255, 52, 23, 5, 255, 57, 22, 6, 255, 62, 24, 3, 255, 68, 30, 4, 255, 74, 30, 2, 255, 75, 28, 2, 255, 73, 30, 6, 255, 74, 29, 0, 255, 77, 29, 1, 255, 93, 39, 2, 255, 105, 43, 5, 255, 112, 37, 4, 255, 125, 43, 5, 255, 136, 52, 3, 255, 132, 52, 2, 255, 133, 46, 4, 255, 131, 41, 0, 255, 134, 46, 1, 255, 133, 48, 2, 255, 138, 45, 4, 255, 143, 50, 4, 255, 145, 49, 2, 255, 145, 49, 1, 255, 144, 48, 1, 255, 143, 46, 1, 255, 144, 47, 2, 255, 144, 47, 2, 255, 146, 49, 4, 255, 142, 45, 4, 255, 133, 40, 1, 255, 126, 36, 1, 255, 116, 28, 1, 255, 107, 24, 0, 255, 105, 26, 0, 255, 111, 31, 4, 255, 108, 26, 2, 255, 116, 27, 1, 255, 122, 30, 1, 255, 121, 34, 4, 255, 114, 33, 3, 255, 118, 34, 4, 255, 114, 30, 3, 255, 98, 24, 1, 255, 86, 19, 0, 255, 85, 19, 3, 255, 88, 21, 3, 255, 88, 23, 4, 255, 87, 22, 1, 255, 86, 21, 1, 255, 82, 18, 1, 255, 82, 19, 0, 255, 84, 21, 4, 255, 82, 23, 4, 255, 72, 21, 2, 255, 61, 15, 0, 255, 54, 12, 3, 255, 52, 13, 2, 255, 59, 20, 2, 255, 64, 17, 1, 255, 63, 21, 0, 255, 58, 22, 0, 255, 56, 14, 1, 255, 60, 12, 5, 255, 65, 17, 5, 255, 56, 15, 1, 255, 63, 17, 5, 255, 77, 17, 4, 255, 70, 17, 3, 255, 67, 19, 3, 255, 72, 21, 4, 255, 76, 18, 5, 255, 82, 24, 3, 255, 88, 26, 0, 255, 92, 24, 4, 255, 88, 25, 5, 255, 93, 29, 2, 255, 99, 29, 3, 255, 104, 28, 1, 255, 108, 33, 2, 255, 107, 33, 1, 255, 112, 37, 2, 255, 111, 35, 1, 255, 113, 38, 3, 255, 110, 37, 0, 255, 113, 38, 1, 255, 115, 38, 2, 255, 115, 36, 1, 255, 20, 11, 0, 255, 18, 9, 0, 255, 16, 10, 3, 255, 15, 13, 2, 255, 13, 10, 1, 255, 19, 10, 3, 255, 17, 9, 1, 255, 19, 11, 2, 255, 24, 13, 4, 255, 20, 9, 0, 255, 19, 8, 0, 255, 16, 11, 2, 255, 14, 10, 2, 255, 17, 8, 1, 255, 21, 12, 3, 255, 22, 12, 3, 255, 22, 11, 2, 255, 26, 12, 4, 255, 26, 11, 3, 255, 21, 12, 5, 255, 21, 13, 3, 255, 33, 16, 1, 255, 42, 18, 5, 255, 36, 17, 3, 255, 36, 20, 6, 255, 38, 19, 5, 255, 31, 17, 4, 255, 29, 14, 3, 255, 30, 15, 2, 255, 33, 23, 4, 255, 29, 15, 1, 255, 21, 10, 1, 255, 28, 19, 2, 255, 40, 19, 5, 255, 35, 20, 4, 255, 32, 17, 5, 255, 38, 17, 4, 255, 38, 25, 3, 255, 43, 29, 12, 255, 52, 35, 19, 255, 70, 50, 21, 255, 72, 54, 24, 255, 70, 55, 22, 255, 69, 48, 7, 255, 72, 50, 6, 255, 74, 49, 5, 255, 72, 38, 0, 255, 67, 34, 6, 255, 70, 52, 22, 255, 72, 55, 20, 255, 68, 56, 19, 255, 82, 60, 27, 255, 88, 57, 15, 255, 75, 57, 18, 255, 66, 62, 47, 255, 65, 61, 26, 255, 69, 58, 22, 255, 71, 63, 41, 255, 71, 65, 55, 255, 73, 66, 41, 255, 80, 65, 30, 255, 88, 62, 13, 255, 85, 52, 0, 255, 77, 44, 0, 255, 78, 48, 4, 255, 85, 44, 4, 255, 86, 40, 3, 255, 83, 42, 3, 255, 82, 44, 1, 255, 84, 41, 0, 255, 98, 41, 2, 255, 107, 48, 6, 255, 95, 50, 1, 255, 96, 48, 1, 255, 98, 52, 3, 255, 99, 55, 5, 255, 94, 55, 3, 255, 98, 53, 3, 255, 97, 49, 0, 255, 107, 51, 4, 255, 108, 54, 5, 255, 97, 54, 1, 255, 91, 55, 1, 255, 98, 50, 0, 255, 112, 56, 4, 255, 109, 52, 2, 255, 103, 49, 3, 255, 98, 53, 7, 255, 94, 53, 5, 255, 92, 53, 2, 255, 96, 57, 3, 255, 99, 57, 1, 255, 101, 61, 2, 255, 99, 62, 1, 255, 106, 63, 3, 255, 111, 60, 2, 255, 107, 64, 2, 255, 103, 67, 2, 255, 107, 62, 0, 255, 116, 62, 1, 255, 115, 65, 1, 255, 115, 69, 3, 255, 118, 65, 3, 255, 113, 67, 2, 255, 107, 68, 0, 255, 116, 61, 1, 255, 119, 52, 3, 255, 124, 51, 6, 255, 122, 52, 1, 255, 117, 60, 2, 255, 122, 59, 2, 255, 119, 63, 4, 255, 115, 64, 1, 255, 114, 68, 2, 255, 119, 68, 3, 255, 128, 68, 3, 255, 130, 69, 1, 255, 135, 74, 4, 255, 132, 72, 3, 255, 129, 72, 0, 255, 135, 79, 4, 255, 130, 78, 2, 255, 133, 76, 0, 255, 136, 81, 0, 255, 133, 78, 2, 255, 133, 72, 7, 255, 126, 70, 2, 255, 137, 78, 2, 255, 133, 74, 1, 255, 130, 77, 9, 255, 112, 61, 8, 255, 109, 58, 7, 255, 123, 68, 2, 255, 141, 78, 5, 255, 130, 69, 13, 255, 98, 54, 8, 255, 98, 56, 6, 255, 97, 54, 7, 255, 106, 49, 5, 255, 99, 50, 6, 255, 100, 56, 4, 255, 103, 49, 6, 255, 102, 49, 6, 255, 103, 51, 4, 255, 101, 52, 7, 255, 99, 50, 13, 255, 101, 51, 11, 255, 102, 51, 11, 255, 102, 53, 9, 255, 102, 53, 9, 255, 104, 55, 13, 255, 101, 52, 9, 255, 104, 55, 14, 255, 100, 56, 8, 255, 98, 55, 8, 255, 102, 58, 17, 255, 106, 59, 20, 255, 104, 53, 14, 255, 105, 57, 12, 255, 104, 63, 12, 255, 102, 61, 6, 255, 101, 59, 16, 255, 104, 63, 26, 255, 98, 61, 15, 255, 98, 64, 13, 255, 100, 66, 13, 255, 98, 64, 13, 255, 100, 65, 17, 255, 103, 64, 22, 255, 102, 65, 17, 255, 104, 70, 13, 255, 101, 68, 25, 255, 97, 68, 11, 255, 98, 70, 23, 255, 103, 67, 31, 255, 104, 69, 26, 255, 101, 74, 17, 255, 101, 74, 23, 255, 105, 73, 22, 255, 105, 75, 22, 255, 98, 73, 15, 255, 103, 74, 29, 255, 102, 76, 24, 255, 105, 78, 23, 255, 108, 75, 26, 255, 106, 80, 25, 255, 106, 78, 23, 255, 111, 80, 22, 255, 104, 85, 21, 255, 110, 86, 21, 255, 113, 82, 26, 255, 100, 86, 24, 255, 102, 89, 23, 255, 111, 90, 31, 255, 105, 87, 30, 255, 107, 88, 40, 255, 109, 86, 35, 255, 108, 88, 33, 255, 104, 87, 36, 255, 101, 88, 38, 255, 104, 91, 30, 255, 114, 93, 27, 255, 111, 91, 30, 255, 107, 90, 29, 255, 122, 93, 27, 255, 134, 90, 30, 255, 121, 90, 22, 255, 123, 93, 28, 255, 115, 90, 25, 255, 115, 89, 20, 255, 109, 91, 28, 255, 111, 87, 35, 255, 114, 87, 21, 255, 118, 90, 26, 255, 113, 90, 26, 255, 113, 92, 25, 255, 111, 87, 24, 255, 115, 87, 21, 255, 113, 85, 16, 255, 112, 83, 27, 255, 108, 86, 9, 255, 110, 84, 30, 255, 108, 77, 34, 255, 112, 79, 15, 255, 109, 80, 14, 255, 106, 78, 22, 255, 112, 75, 19, 255, 113, 79, 10, 255, 118, 80, 16, 255, 109, 73, 13, 255, 104, 73, 18, 255, 108, 74, 9, 255, 113, 73, 14, 255, 115, 75, 19, 255, 114, 77, 14, 255, 107, 72, 7, 255, 107, 72, 10, 255, 108, 70, 15, 255, 109, 69, 17, 255, 106, 66, 10, 255, 107, 68, 6, 255, 113, 70, 6, 255, 117, 67, 9, 255, 112, 64, 5, 255, 109, 62, 12, 255, 104, 61, 7, 255, 106, 66, 0, 255, 109, 66, 1, 255, 110, 62, 1, 255, 111, 61, 4, 255, 109, 59, 7, 255, 110, 58, 4, 255, 110, 60, 4, 255, 105, 58, 4, 255, 103, 56, 5, 255, 103, 53, 6, 255, 103, 53, 4, 255, 110, 60, 2, 255, 105, 53, 5, 255, 103, 51, 10, 255, 100, 50, 0, 255, 103, 50, 4, 255, 101, 51, 6, 255, 102, 54, 5, 255, 101, 51, 3, 255, 94, 41, 5, 255, 100, 48, 4, 255, 103, 50, 5, 255, 101, 49, 4, 255, 104, 49, 2, 255, 99, 49, 3, 255, 94, 50, 6, 255, 93, 43, 1, 255, 91, 45, 2, 255, 86, 44, 0, 255, 87, 39, 2, 255, 93, 40, 3, 255, 89, 42, 3, 255, 88, 41, 5, 255, 79, 40, 4, 255, 76, 32, 1, 255, 73, 33, 0, 255, 77, 38, 2, 255, 70, 32, 4, 255, 70, 31, 9, 255, 69, 32, 4, 255, 68, 33, 0, 255, 58, 27, 2, 255, 63, 37, 3, 255, 91, 38, 3, 255, 95, 36, 1, 255, 92, 42, 1, 255, 92, 40, 2, 255, 84, 31, 5, 255, 75, 31, 6, 255, 82, 35, 3, 255, 77, 35, 1, 255, 71, 32, 2, 255, 73, 25, 5, 255, 74, 28, 4, 255, 76, 32, 0, 255, 77, 26, 1, 255, 77, 28, 4, 255, 79, 35, 3, 255, 76, 28, 2, 255, 73, 27, 0, 255, 71, 28, 4, 255, 75, 26, 6, 255, 72, 23, 1, 255, 75, 27, 4, 255, 71, 26, 2, 255, 64, 23, 1, 255, 63, 25, 4, 255, 58, 22, 3, 255, 59, 25, 3, 255, 67, 28, 2, 255, 74, 30, 7, 255, 75, 30, 6, 255, 75, 28, 3, 255, 73, 23, 8, 255, 71, 29, 2, 255, 86, 34, 3, 255, 110, 44, 4, 255, 122, 46, 1, 255, 129, 46, 1, 255, 138, 51, 2, 255, 145, 53, 1, 255, 139, 49, 1, 255, 141, 47, 6, 255, 134, 46, 3, 255, 140, 45, 1, 255, 138, 46, 1, 255, 141, 46, 2, 255, 142, 47, 1, 255, 145, 49, 2, 255, 146, 50, 2, 255, 147, 50, 5, 255, 143, 45, 2, 255, 145, 48, 3, 255, 145, 48, 3, 255, 147, 49, 4, 255, 145, 47, 4, 255, 136, 40, 0, 255, 125, 34, 1, 255, 117, 31, 3, 255, 111, 30, 5, 255, 105, 27, 1, 255, 108, 29, 2, 255, 103, 26, 2, 255, 114, 30, 5, 255, 120, 31, 4, 255, 121, 33, 3, 255, 122, 36, 3, 255, 121, 31, 0, 255, 125, 35, 4, 255, 112, 29, 4, 255, 95, 21, 2, 255, 93, 24, 8, 255, 90, 23, 3, 255, 89, 23, 6, 255, 88, 23, 1, 255, 86, 21, 0, 255, 87, 21, 5, 255, 89, 23, 2, 255, 85, 20, 5, 255, 80, 21, 4, 255, 80, 20, 2, 255, 71, 17, 4, 255, 54, 10, 5, 255, 48, 12, 5, 255, 52, 16, 1, 255, 69, 20, 2, 255, 80, 25, 5, 255, 79, 25, 4, 255, 71, 21, 2, 255, 64, 19, 3, 255, 61, 16, 5, 255, 57, 13, 3, 255, 60, 15, 5, 255, 61, 15, 6, 255, 60, 16, 1, 255, 70, 17, 2, 255, 77, 18, 1, 255, 81, 23, 1, 255, 84, 25, 4, 255, 84, 24, 0, 255, 83, 23, 4, 255, 79, 19, 2, 255, 85, 24, 1, 255, 90, 23, 3, 255, 92, 25, 4, 255, 93, 27, 2, 255, 94, 26, 1, 255, 108, 34, 4, 255, 109, 34, 2, 255, 111, 36, 1, 255, 112, 38, 0, 255, 110, 37, 1, 255, 113, 40, 4, 255, 111, 37, 2, 255, 21, 13, 5, 255, 20, 11, 6, 255, 16, 7, 3, 255, 17, 10, 2, 255, 17, 11, 1, 255, 19, 12, 1, 255, 18, 11, 1, 255, 19, 10, 2, 255, 23, 13, 4, 255, 24, 10, 3, 255, 20, 8, 1, 255, 15, 7, 0, 255, 17, 10, 2, 255, 20, 11, 4, 255, 17, 10, 2, 255, 20, 12, 3, 255, 24, 14, 4, 255, 23, 10, 2, 255, 25, 12, 2, 255, 25, 11, 5, 255, 27, 16, 4, 255, 32, 16, 1, 255, 37, 19, 3, 255, 29, 17, 1, 255, 30, 18, 3, 255, 37, 20, 7, 255, 26, 18, 4, 255, 25, 13, 4, 255, 27, 12, 3, 255, 27, 16, 3, 255, 30, 14, 2, 255, 28, 15, 5, 255, 28, 16, 1, 255, 40, 20, 6, 255, 33, 17, 3, 255, 32, 14, 3, 255, 37, 17, 3, 255, 45, 27, 6, 255, 53, 33, 10, 255, 54, 43, 25, 255, 55, 51, 23, 255, 64, 57, 21, 255, 73, 56, 23, 255, 76, 48, 9, 255, 66, 42, 3, 255, 72, 46, 10, 255, 68, 37, 0, 255, 70, 40, 13, 255, 77, 54, 32, 255, 80, 54, 16, 255, 81, 55, 11, 255, 78, 59, 16, 255, 81, 48, 21, 255, 78, 54, 31, 255, 70, 61, 41, 255, 67, 60, 28, 255, 76, 60, 23, 255, 75, 60, 36, 255, 75, 66, 53, 255, 75, 66, 48, 255, 82, 66, 33, 255, 84, 61, 9, 255, 82, 52, 6, 255, 79, 49, 8, 255, 79, 44, 4, 255, 83, 45, 7, 255, 78, 40, 2, 255, 82, 44, 5, 255, 80, 43, 2, 255, 81, 46, 2, 255, 85, 49, 2, 255, 93, 48, 0, 255, 97, 48, 1, 255, 95, 47, 1, 255, 92, 50, 3, 255, 93, 50, 1, 255, 93, 52, 2, 255, 97, 48, 2, 255, 100, 52, 4, 255, 105, 52, 4, 255, 102, 52, 3, 255, 96, 53, 3, 255, 97, 52, 4, 255, 102, 52, 2, 255, 105, 53, 4, 255, 104, 53, 3, 255, 99, 50, 1, 255, 96, 51, 1, 255, 94, 55, 1, 255, 96, 59, 4, 255, 101, 58, 5, 255, 106, 54, 1, 255, 110, 53, 3, 255, 111, 56, 3, 255, 110, 60, 3, 255, 107, 62, 1, 255, 110, 61, 5, 255, 110, 60, 2, 255, 114, 62, 2, 255, 110, 64, 3, 255, 109, 67, 4, 255, 117, 63, 4, 255, 116, 56, 0, 255, 115, 67, 1, 255, 119, 70, 1, 255, 126, 57, 2, 255, 128, 54, 2, 255, 124, 64, 5, 255, 115, 64, 1, 255, 122, 66, 2, 255, 116, 67, 3, 255, 109, 63, 2, 255, 114, 61, 5, 255, 113, 65, 3, 255, 122, 71, 3, 255, 125, 70, 8, 255, 126, 69, 5, 255, 123, 59, 3, 255, 119, 48, 7, 255, 125, 60, 2, 255, 136, 76, 2, 255, 128, 70, 6, 255, 129, 73, 4, 255, 134, 74, 2, 255, 138, 77, 6, 255, 131, 69, 6, 255, 130, 66, 4, 255, 134, 70, 2, 255, 137, 75, 6, 255, 138, 75, 3, 255, 139, 77, 2, 255, 141, 81, 0, 255, 135, 76, 4, 255, 130, 73, 3, 255, 116, 62, 4, 255, 120, 66, 5, 255, 135, 77, 4, 255, 113, 62, 2, 255, 97, 51, 1, 255, 93, 52, 7, 255, 96, 51, 5, 255, 99, 54, 8, 255, 94, 50, 4, 255, 102, 54, 5, 255, 104, 50, 6, 255, 103, 50, 10, 255, 98, 53, 5, 255, 100, 53, 4, 255, 101, 51, 7, 255, 102, 55, 6, 255, 104, 55, 14, 255, 99, 53, 12, 255, 99, 55, 11, 255, 102, 55, 14, 255, 102, 55, 14, 255, 105, 57, 17, 255, 108, 54, 14, 255, 104, 59, 13, 255, 98, 61, 10, 255, 106, 63, 15, 255, 107, 59, 16, 255, 103, 60, 6, 255, 106, 64, 12, 255, 102, 60, 19, 255, 102, 60, 28, 255, 105, 65, 22, 255, 107, 65, 19, 255, 107, 64, 16, 255, 105, 61, 20, 255, 107, 64, 21, 255, 107, 69, 14, 255, 101, 64, 22, 255, 105, 71, 19, 255, 106, 73, 15, 255, 110, 72, 19, 255, 110, 70, 24, 255, 109, 69, 29, 255, 106, 71, 25, 255, 105, 75, 15, 255, 103, 75, 23, 255, 98, 80, 25, 255, 109, 76, 25, 255, 106, 75, 23, 255, 103, 80, 31, 255, 107, 81, 32, 255, 101, 82, 31, 255, 107, 79, 37, 255, 111, 80, 24, 255, 108, 84, 28, 255, 108, 81, 32, 255, 115, 82, 22, 255, 110, 91, 21, 255, 104, 86, 30, 255, 107, 82, 36, 255, 107, 84, 36, 255, 108, 88, 32, 255, 109, 88, 26, 255, 107, 90, 30, 255, 102, 89, 35, 255, 104, 90, 36, 255, 106, 89, 39, 255, 109, 92, 30, 255, 111, 92, 27, 255, 110, 90, 25, 255, 111, 92, 25, 255, 114, 88, 30, 255, 114, 88, 29, 255, 126, 97, 21, 255, 119, 92, 28, 255, 118, 88, 27, 255, 124, 85, 38, 255, 126, 88, 27, 255, 120, 89, 17, 255, 114, 88, 22, 255, 112, 90, 20, 255, 115, 88, 20, 255, 119, 84, 28, 255, 119, 85, 17, 255, 118, 89, 17, 255, 112, 83, 17, 255, 112, 85, 22, 255, 106, 82, 19, 255, 108, 81, 18, 255, 111, 80, 17, 255, 111, 78, 19, 255, 110, 80, 11, 255, 116, 78, 16, 255, 113, 77, 14, 255, 113, 76, 17, 255, 108, 75, 14, 255, 106, 76, 17, 255, 106, 71, 25, 255, 111, 72, 24, 255, 112, 73, 18, 255, 115, 77, 17, 255, 108, 72, 9, 255, 110, 73, 7, 255, 110, 72, 5, 255, 111, 70, 16, 255, 108, 66, 15, 255, 107, 65, 7, 255, 109, 65, 5, 255, 114, 63, 10, 255, 106, 60, 13, 255, 107, 63, 9, 255, 108, 66, 7, 255, 104, 60, 6, 255, 108, 59, 9, 255, 110, 57, 4, 255, 110, 59, 8, 255, 105, 57, 6, 255, 106, 60, 2, 255, 106, 61, 4, 255, 104, 57, 8, 255, 103, 55, 8, 255, 103, 55, 5, 255, 101, 51, 4, 255, 106, 54, 6, 255, 106, 54, 8, 255, 101, 52, 5, 255, 101, 52, 7, 255, 101, 47, 3, 255, 99, 51, 5, 255, 96, 50, 4, 255, 97, 52, 3, 255, 92, 47, 7, 255, 91, 47, 3, 255, 92, 43, 2, 255, 99, 45, 5, 255, 107, 50, 8, 255, 97, 49, 2, 255, 91, 51, 5, 255, 94, 43, 8, 255, 93, 42, 8, 255, 92, 43, 4, 255, 86, 43, 4, 255, 87, 42, 4, 255, 87, 43, 4, 255, 81, 42, 6, 255, 77, 38, 4, 255, 84, 34, 2, 255, 80, 38, 2, 255, 83, 39, 6, 255, 80, 36, 7, 255, 78, 35, 5, 255, 81, 35, 4, 255, 70, 29, 0, 255, 75, 35, 6, 255, 98, 44, 4, 255, 99, 45, 3, 255, 97, 39, 4, 255, 99, 36, 5, 255, 107, 43, 2, 255, 104, 52, 3, 255, 108, 47, 4, 255, 114, 47, 3, 255, 105, 44, 1, 255, 97, 42, 5, 255, 82, 30, 4, 255, 84, 29, 6, 255, 87, 31, 5, 255, 77, 27, 1, 255, 72, 28, 3, 255, 78, 31, 5, 255, 74, 30, 4, 255, 74, 28, 2, 255, 74, 28, 3, 255, 77, 25, 4, 255, 77, 26, 5, 255, 73, 25, 2, 255, 70, 27, 3, 255, 65, 24, 2, 255, 67, 21, 2, 255, 61, 21, 3, 255, 54, 23, 2, 255, 69, 28, 4, 255, 77, 29, 6, 255, 80, 30, 3, 255, 82, 28, 0, 255, 89, 25, 4, 255, 84, 24, 6, 255, 98, 32, 7, 255, 119, 44, 3, 255, 130, 52, 1, 255, 133, 49, 3, 255, 140, 49, 3, 255, 143, 47, 1, 255, 145, 51, 3, 255, 140, 48, 2, 255, 134, 46, 1, 255, 139, 44, 2, 255, 141, 46, 4, 255, 139, 44, 1, 255, 144, 48, 4, 255, 146, 47, 2, 255, 145, 47, 2, 255, 144, 47, 4, 255, 142, 45, 3, 255, 142, 45, 2, 255, 145, 48, 3, 255, 144, 45, 2, 255, 141, 42, 1, 255, 137, 41, 2, 255, 129, 39, 5, 255, 119, 33, 3, 255, 115, 33, 7, 255, 113, 30, 3, 255, 111, 26, 0, 255, 99, 25, 1, 255, 106, 30, 4, 255, 115, 31, 3, 255, 110, 31, 4, 255, 112, 34, 1, 255, 127, 39, 5, 255, 129, 37, 4, 255, 117, 34, 3, 255, 97, 24, 1, 255, 92, 23, 1, 255, 90, 21, 2, 255, 89, 20, 4, 255, 89, 22, 2, 255, 89, 24, 4, 255, 87, 21, 3, 255, 87, 21, 1, 255, 87, 20, 3, 255, 84, 21, 0, 255, 83, 24, 1, 255, 77, 22, 3, 255, 66, 16, 6, 255, 55, 13, 2, 255, 53, 20, 1, 255, 63, 20, 2, 255, 69, 21, 3, 255, 80, 26, 3, 255, 94, 33, 2, 255, 98, 36, 1, 255, 88, 31, 2, 255, 78, 23, 2, 255, 72, 20, 1, 255, 67, 18, 2, 255, 64, 15, 3, 255, 69, 15, 0, 255, 87, 21, 3, 255, 90, 26, 7, 255, 86, 24, 6, 255, 80, 20, 1, 255, 77, 20, 3, 255, 74, 16, 1, 255, 84, 24, 4, 255, 81, 21, 4, 255, 84, 23, 5, 255, 88, 25, 1, 255, 93, 27, 2, 255, 95, 27, 1, 255, 96, 27, 2, 255, 100, 29, 2, 255, 107, 34, 2, 255, 114, 37, 5, 255, 114, 36, 4, 255, 112, 34, 2, 255, 16, 12, 3, 255, 17, 10, 6, 255, 15, 6, 4, 255, 18, 9, 3, 255, 21, 12, 3, 255, 17, 13, 1, 255, 18, 12, 3, 255, 18, 8, 2, 255, 20, 9, 2, 255, 20, 9, 2, 255, 19, 8, 3, 255, 17, 8, 1, 255, 18, 10, 4, 255, 18, 10, 3, 255, 17, 10, 1, 255, 18, 11, 1, 255, 25, 14, 5, 255, 24, 10, 2, 255, 26, 14, 5, 255, 27, 12, 4, 255, 28, 15, 2, 255, 28, 18, 1, 255, 33, 22, 5, 255, 28, 21, 4, 255, 28, 16, 2, 255, 30, 13, 3, 255, 21, 12, 2, 255, 25, 11, 1, 255, 34, 18, 9, 255, 28, 17, 8, 255, 26, 14, 4, 255, 26, 19, 3, 255, 32, 17, 2, 255, 26, 17, 1, 255, 33, 17, 2, 255, 31, 19, 2, 255, 40, 23, 5, 255, 45, 25, 2, 255, 49, 33, 5, 255, 60, 45, 25, 255, 61, 46, 27, 255, 69, 57, 39, 255, 68, 59, 31, 255, 74, 56, 12, 255, 65, 41, 9, 255, 71, 46, 11, 255, 63, 40, 3, 255, 64, 44, 24, 255, 70, 55, 31, 255, 80, 53, 17, 255, 81, 51, 10, 255, 78, 59, 30, 255, 89, 57, 15, 255, 76, 55, 23, 255, 66, 54, 28, 255, 68, 60, 29, 255, 73, 60, 32, 255, 74, 60, 39, 255, 81, 68, 36, 255, 79, 66, 27, 255, 84, 65, 25, 255, 86, 59, 8, 255, 84, 51, 7, 255, 80, 46, 5, 255, 82, 43, 3, 255, 80, 44, 4, 255, 82, 43, 4, 255, 83, 40, 2, 255, 85, 43, 1, 255, 84, 50, 3, 255, 79, 50, 1, 255, 88, 49, 1, 255, 86, 47, 0, 255, 89, 50, 3, 255, 89, 48, 2, 255, 100, 48, 3, 255, 100, 50, 4, 255, 90, 47, 2, 255, 88, 50, 2, 255, 93, 53, 4, 255, 91, 53, 3, 255, 87, 49, 1, 255, 94, 44, 2, 255, 88, 49, 2, 255, 86, 52, 2, 255, 91, 55, 3, 255, 91, 54, 0, 255, 100, 58, 2, 255, 103, 58, 1, 255, 108, 56, 2, 255, 112, 51, 2, 255, 111, 49, 0, 255, 112, 47, 1, 255, 117, 52, 5, 255, 110, 58, 3, 255, 102, 61, 0, 255, 108, 62, 4, 255, 115, 59, 1, 255, 118, 61, 2, 255, 112, 63, 2, 255, 109, 63, 2, 255, 114, 62, 1, 255, 116, 65, 0, 255, 114, 68, 4, 255, 112, 68, 4, 255, 116, 64, 2, 255, 115, 62, 0, 255, 113, 65, 0, 255, 115, 62, 2, 255, 119, 57, 8, 255, 118, 57, 4, 255, 117, 50, 5, 255, 126, 56, 3, 255, 123, 67, 0, 255, 119, 60, 5, 255, 121, 53, 4, 255, 123, 59, 2, 255, 117, 54, 4, 255, 107, 43, 5, 255, 121, 59, 7, 255, 126, 64, 3, 255, 123, 60, 4, 255, 128, 75, 5, 255, 132, 75, 1, 255, 141, 80, 4, 255, 129, 71, 1, 255, 134, 69, 3, 255, 142, 75, 7, 255, 137, 74, 3, 255, 136, 74, 3, 255, 141, 82, 5, 255, 138, 79, 5, 255, 126, 67, 4, 255, 133, 80, 1, 255, 132, 78, 3, 255, 144, 76, 3, 255, 147, 73, 1, 255, 130, 67, 2, 255, 102, 58, 3, 255, 103, 61, 5, 255, 109, 64, 2, 255, 100, 57, 3, 255, 98, 52, 1, 255, 103, 54, 4, 255, 100, 51, 8, 255, 102, 51, 13, 255, 101, 50, 5, 255, 101, 56, 3, 255, 102, 56, 1, 255, 104, 59, 6, 255, 104, 59, 6, 255, 106, 60, 10, 255, 107, 62, 12, 255, 105, 57, 8, 255, 104, 56, 13, 255, 98, 56, 8, 255, 107, 59, 7, 255, 110, 56, 3, 255, 112, 62, 9, 255, 110, 63, 14, 255, 107, 60, 18, 255, 108, 63, 13, 255, 106, 62, 13, 255, 106, 62, 17, 255, 108, 64, 22, 255, 109, 66, 8, 255, 110, 66, 12, 255, 109, 63, 17, 255, 109, 66, 20, 255, 108, 68, 16, 255, 108, 70, 23, 255, 109, 70, 28, 255, 112, 72, 18, 255, 112, 71, 18, 255, 107, 72, 29, 255, 102, 74, 19, 255, 106, 71, 38, 255, 107, 72, 23, 255, 106, 73, 22, 255, 112, 75, 25, 255, 103, 73, 27, 255, 111, 75, 20, 255, 117, 83, 22, 255, 106, 82, 21, 255, 108, 82, 21, 255, 107, 85, 26, 255, 105, 84, 33, 255, 108, 83, 30, 255, 110, 86, 19, 255, 107, 81, 38, 255, 112, 81, 33, 255, 107, 86, 27, 255, 110, 89, 39, 255, 104, 84, 29, 255, 110, 87, 35, 255, 111, 87, 40, 255, 108, 90, 21, 255, 107, 88, 27, 255, 105, 89, 26, 255, 109, 91, 22, 255, 112, 91, 35, 255, 109, 91, 33, 255, 111, 90, 33, 255, 110, 89, 29, 255, 109, 88, 34, 255, 109, 88, 39, 255, 106, 92, 32, 255, 112, 94, 24, 255, 114, 88, 29, 255, 110, 87, 31, 255, 115, 92, 17, 255, 121, 93, 13, 255, 116, 91, 25, 255, 106, 89, 18, 255, 112, 88, 33, 255, 113, 84, 33, 255, 116, 86, 26, 255, 114, 85, 22, 255, 113, 82, 28, 255, 113, 83, 13, 255, 112, 82, 20, 255, 110, 82, 14, 255, 113, 86, 11, 255, 110, 80, 11, 255, 110, 78, 23, 255, 109, 76, 12, 255, 110, 75, 12, 255, 112, 74, 18, 255, 112, 76, 12, 255, 111, 76, 5, 255, 110, 77, 10, 255, 104, 72, 16, 255, 107, 70, 14, 255, 109, 69, 12, 255, 114, 72, 10, 255, 117, 70, 7, 255, 117, 68, 16, 255, 110, 69, 11, 255, 112, 68, 7, 255, 114, 68, 8, 255, 111, 68, 7, 255, 111, 66, 7, 255, 110, 62, 3, 255, 111, 61, 14, 255, 110, 60, 10, 255, 107, 58, 0, 255, 111, 62, 8, 255, 107, 58, 13, 255, 106, 57, 12, 255, 103, 57, 4, 255, 105, 59, 5, 255, 102, 57, 5, 255, 104, 58, 7, 255, 105, 57, 6, 255, 104, 53, 5, 255, 106, 55, 7, 255, 105, 53, 9, 255, 101, 50, 3, 255, 102, 52, 5, 255, 100, 54, 5, 255, 105, 57, 7, 255, 109, 55, 6, 255, 104, 50, 7, 255, 96, 46, 3, 255, 96, 49, 5, 255, 95, 52, 5, 255, 91, 47, 7, 255, 94, 44, 7, 255, 101, 45, 7, 255, 99, 44, 6, 255, 91, 46, 4, 255, 87, 47, 3, 255, 97, 45, 7, 255, 100, 46, 8, 255, 97, 45, 5, 255, 108, 47, 5, 255, 107, 44, 2, 255, 100, 42, 4, 255, 82, 39, 5, 255, 76, 34, 3, 255, 85, 41, 6, 255, 80, 40, 3, 255, 78, 33, 5, 255, 80, 35, 4, 255, 77, 33, 0, 255, 88, 35, 4, 255, 79, 33, 5, 255, 83, 36, 4, 255, 97, 42, 1, 255, 110, 48, 4, 255, 108, 44, 6, 255, 94, 34, 2, 255, 105, 42, 1, 255, 125, 48, 3, 255, 133, 46, 3, 255, 127, 48, 1, 255, 129, 48, 2, 255, 125, 49, 5, 255, 99, 39, 1, 255, 92, 34, 3, 255, 94, 34, 7, 255, 85, 26, 4, 255, 75, 23, 5, 255, 75, 25, 5, 255, 67, 25, 3, 255, 81, 26, 3, 255, 87, 33, 6, 255, 81, 31, 5, 255, 80, 28, 1, 255, 81, 28, 2, 255, 78, 28, 3, 255, 74, 28, 3, 255, 72, 24, 2, 255, 71, 21, 2, 255, 66, 20, 3, 255, 69, 22, 1, 255, 83, 27, 3, 255, 87, 32, 2, 255, 89, 34, 1, 255, 101, 38, 0, 255, 102, 33, 5, 255, 113, 39, 7, 255, 127, 48, 4, 255, 135, 55, 4, 255, 136, 48, 4, 255, 143, 44, 5, 255, 144, 46, 2, 255, 142, 50, 3, 255, 137, 49, 0, 255, 143, 51, 5, 255, 140, 46, 4, 255, 141, 45, 3, 255, 140, 45, 1, 255, 143, 47, 3, 255, 147, 49, 4, 255, 145, 47, 2, 255, 139, 42, 0, 255, 140, 43, 1, 255, 142, 45, 1, 255, 142, 44, 2, 255, 141, 43, 2, 255, 139, 41, 3, 255, 132, 36, 2, 255, 126, 35, 3, 255, 120, 33, 2, 255, 116, 29, 2, 255, 114, 30, 2, 255, 112, 30, 1, 255, 107, 27, 2, 255, 100, 25, 0, 255, 105, 29, 0, 255, 105, 24, 1, 255, 119, 33, 3, 255, 125, 38, 5, 255, 126, 33, 0, 255, 130, 35, 6, 255, 113, 26, 3, 255, 96, 21, 0, 255, 86, 19, 1, 255, 91, 24, 4, 255, 91, 23, 5, 255, 92, 24, 5, 255, 90, 22, 2, 255, 88, 21, 3, 255, 88, 22, 3, 255, 90, 27, 1, 255, 91, 25, 2, 255, 81, 21, 1, 255, 69, 19, 2, 255, 67, 22, 3, 255, 58, 16, 2, 255, 53, 14, 2, 255, 57, 18, 0, 255, 70, 22, 0, 255, 92, 28, 1, 255, 108, 33, 2, 255, 107, 38, 2, 255, 104, 38, 4, 255, 104, 34, 4, 255, 95, 31, 4, 255, 93, 35, 3, 255, 96, 26, 0, 255, 95, 26, 6, 255, 83, 22, 4, 255, 72, 16, 1, 255, 69, 17, 0, 255, 68, 16, 2, 255, 73, 17, 3, 255, 80, 23, 2, 255, 73, 19, 1, 255, 74, 18, 1, 255, 85, 24, 1, 255, 92, 30, 3, 255, 90, 25, 1, 255, 88, 23, 1, 255, 99, 30, 4, 255, 108, 34, 2, 255, 114, 36, 1, 255, 111, 34, 0, 255, 112, 36, 2, 255, 17, 9, 1, 255, 14, 8, 2, 255, 10, 7, 2, 255, 16, 12, 5, 255, 17, 9, 1, 255, 19, 8, 2, 255, 16, 10, 2, 255, 15, 9, 1, 255, 18, 9, 3, 255, 18, 8, 2, 255, 20, 9, 3, 255, 19, 10, 3, 255, 19, 11, 5, 255, 18, 8, 1, 255, 19, 11, 1, 255, 21, 12, 3, 255, 24, 14, 4, 255, 22, 9, 0, 255, 23, 12, 2, 255, 31, 17, 8, 255, 31, 18, 5, 255, 33, 17, 2, 255, 31, 13, 0, 255, 29, 15, 2, 255, 30, 16, 3, 255, 26, 12, 4, 255, 22, 17, 7, 255, 25, 15, 0, 255, 29, 15, 1, 255, 25, 15, 2, 255, 29, 16, 6, 255, 23, 15, 4, 255, 32, 16, 1, 255, 41, 16, 2, 255, 36, 21, 3, 255, 39, 23, 6, 255, 41, 17, 1, 255, 51, 25, 2, 255, 50, 33, 5, 255, 50, 36, 18, 255, 64, 44, 15, 255, 70, 55, 22, 255, 69, 59, 31, 255, 73, 58, 20, 255, 69, 51, 13, 255, 68, 52, 4, 255, 56, 42, 1, 255, 60, 49, 33, 255, 65, 57, 28, 255, 74, 48, 18, 255, 82, 49, 26, 255, 76, 57, 29, 255, 76, 50, 23, 255, 68, 55, 28, 255, 69, 54, 16, 255, 73, 54, 25, 255, 75, 63, 22, 255, 73, 61, 37, 255, 83, 62, 48, 255, 84, 67, 37, 255, 90, 64, 36, 255, 92, 58, 14, 255, 89, 49, 2, 255, 85, 43, 2, 255, 80, 40, 2, 255, 87, 42, 4, 255, 89, 41, 4, 255, 91, 43, 4, 255, 88, 41, 0, 255, 93, 47, 2, 255, 96, 48, 3, 255, 98, 47, 3, 255, 96, 48, 2, 255, 103, 45, 3, 255, 109, 42, 6, 255, 105, 42, 4, 255, 95, 48, 3, 255, 94, 50, 5, 255, 92, 50, 2, 255, 89, 47, 1, 255, 87, 49, 2, 255, 85, 50, 4, 255, 90, 49, 5, 255, 96, 51, 3, 255, 92, 51, 1, 255, 94, 55, 3, 255, 102, 55, 3, 255, 114, 56, 5, 255, 111, 52, 3, 255, 115, 50, 3, 255, 119, 51, 2, 255, 110, 54, 1, 255, 110, 54, 4, 255, 116, 50, 5, 255, 115, 51, 3, 255, 113, 54, 1, 255, 113, 55, 3, 255, 111, 59, 1, 255, 106, 65, 2, 255, 110, 64, 4, 255, 115, 56, 1, 255, 117, 60, 2, 255, 115, 66, 2, 255, 113, 66, 2, 255, 111, 63, 5, 255, 109, 66, 7, 255, 102, 65, 1, 255, 110, 58, 2, 255, 122, 48, 5, 255, 120, 44, 1, 255, 114, 51, 4, 255, 112, 45, 3, 255, 119, 42, 3, 255, 119, 53, 5, 255, 116, 59, 6, 255, 120, 64, 5, 255, 124, 67, 1, 255, 119, 57, 2, 255, 121, 58, 3, 255, 128, 70, 5, 255, 122, 67, 1, 255, 124, 74, 2, 255, 127, 75, 3, 255, 131, 73, 6, 255, 131, 71, 2, 255, 137, 74, 3, 255, 130, 68, 4, 255, 122, 55, 4, 255, 129, 67, 0, 255, 141, 77, 1, 255, 130, 62, 2, 255, 124, 53, 2, 255, 122, 48, 7, 255, 133, 59, 8, 255, 130, 65, 4, 255, 143, 81, 4, 255, 139, 78, 5, 255, 139, 76, 5, 255, 133, 73, 10, 255, 139, 73, 4, 255, 139, 76, 5, 255, 128, 74, 3, 255, 129, 72, 8, 255, 123, 73, 8, 255, 107, 63, 9, 255, 98, 55, 14, 255, 105, 57, 13, 255, 100, 56, 9, 255, 99, 55, 11, 255, 101, 57, 10, 255, 98, 54, 10, 255, 106, 59, 16, 255, 106, 60, 11, 255, 101, 55, 8, 255, 105, 54, 12, 255, 110, 57, 17, 255, 106, 62, 19, 255, 107, 63, 17, 255, 105, 55, 12, 255, 106, 60, 13, 255, 105, 62, 16, 255, 104, 62, 16, 255, 105, 62, 16, 255, 110, 69, 16, 255, 107, 67, 15, 255, 106, 67, 14, 255, 107, 67, 18, 255, 106, 69, 12, 255, 104, 69, 15, 255, 104, 71, 14, 255, 106, 72, 24, 255, 104, 67, 20, 255, 108, 70, 18, 255, 115, 78, 24, 255, 114, 72, 38, 255, 110, 74, 23, 255, 106, 75, 28, 255, 104, 72, 30, 255, 106, 72, 24, 255, 108, 74, 25, 255, 105, 76, 36, 255, 106, 81, 21, 255, 110, 80, 20, 255, 108, 81, 28, 255, 111, 85, 23, 255, 114, 83, 32, 255, 104, 85, 25, 255, 107, 84, 38, 255, 107, 83, 29, 255, 104, 83, 34, 255, 108, 85, 37, 255, 106, 88, 32, 255, 111, 93, 29, 255, 104, 86, 33, 255, 111, 88, 32, 255, 115, 90, 25, 255, 112, 93, 26, 255, 114, 91, 36, 255, 110, 85, 38, 255, 110, 89, 29, 255, 112, 90, 30, 255, 112, 91, 28, 255, 112, 91, 29, 255, 112, 92, 28, 255, 113, 91, 31, 255, 116, 91, 27, 255, 118, 96, 31, 255, 113, 91, 23, 255, 112, 89, 27, 255, 105, 92, 30, 255, 111, 90, 28, 255, 114, 89, 36, 255, 116, 91, 27, 255, 117, 92, 10, 255, 116, 87, 25, 255, 117, 88, 27, 255, 115, 83, 20, 255, 115, 86, 24, 255, 111, 84, 29, 255, 111, 82, 23, 255, 109, 79, 19, 255, 110, 81, 22, 255, 116, 84, 27, 255, 113, 79, 22, 255, 107, 80, 23, 255, 107, 74, 29, 255, 103, 77, 22, 255, 106, 74, 14, 255, 106, 74, 15, 255, 108, 73, 24, 255, 114, 72, 18, 255, 113, 70, 20, 255, 113, 71, 18, 255, 111, 72, 10, 255, 110, 70, 8, 255, 115, 70, 8, 255, 113, 67, 11, 255, 113, 68, 6, 255, 115, 67, 7, 255, 118, 69, 11, 255, 111, 65, 7, 255, 110, 66, 6, 255, 110, 65, 5, 255, 110, 66, 4, 255, 110, 61, 10, 255, 115, 64, 12, 255, 113, 64, 3, 255, 109, 59, 3, 255, 107, 58, 12, 255, 105, 57, 7, 255, 106, 57, 4, 255, 107, 60, 6, 255, 105, 58, 7, 255, 106, 54, 8, 255, 107, 54, 8, 255, 108, 55, 5, 255, 104, 52, 6, 255, 100, 53, 1, 255, 103, 57, 7, 255, 96, 51, 2, 255, 102, 56, 2, 255, 109, 52, 4, 255, 100, 48, 4, 255, 97, 48, 1, 255, 107, 54, 8, 255, 102, 52, 0, 255, 92, 44, 2, 255, 94, 46, 2, 255, 99, 48, 3, 255, 94, 47, 4, 255, 89, 45, 3, 255, 95, 49, 4, 255, 107, 49, 4, 255, 101, 45, 0, 255, 99, 50, 3, 255, 108, 46, 6, 255, 103, 41, 3, 255, 98, 43, 4, 255, 87, 35, 2, 255, 82, 35, 2, 255, 93, 49, 5, 255, 93, 38, 2, 255, 77, 35, 2, 255, 80, 37, 3, 255, 80, 34, 8, 255, 87, 31, 8, 255, 83, 33, 1, 255, 90, 39, 2, 255, 108, 42, 3, 255, 119, 44, 1, 255, 117, 48, 3, 255, 101, 40, 3, 255, 103, 34, 3, 255, 107, 34, 1, 255, 115, 49, 3, 255, 125, 48, 2, 255, 129, 47, 3, 255, 129, 51, 2, 255, 119, 48, 0, 255, 100, 40, 0, 255, 94, 34, 3, 255, 97, 33, 3, 255, 84, 25, 0, 255, 70, 28, 2, 255, 69, 25, 4, 255, 87, 27, 3, 255, 90, 31, 3, 255, 87, 32, 3, 255, 90, 33, 1, 255, 91, 29, 0, 255, 90, 30, 1, 255, 86, 30, 1, 255, 82, 31, 3, 255, 84, 31, 4, 255, 79, 29, 3, 255, 71, 25, 1, 255, 94, 36, 8, 255, 106, 38, 8, 255, 103, 36, 3, 255, 109, 41, 1, 255, 118, 43, 1, 255, 133, 48, 4, 255, 142, 53, 3, 255, 140, 54, 0, 255, 137, 53, 3, 255, 136, 51, 2, 255, 141, 50, 2, 255, 143, 47, 2, 255, 138, 49, 2, 255, 146, 50, 2, 255, 143, 45, 1, 255, 146, 44, 4, 255, 144, 48, 5, 255, 143, 47, 1, 255, 148, 51, 3, 255, 145, 47, 1, 255, 143, 47, 2, 255, 143, 46, 3, 255, 144, 47, 2, 255, 140, 44, 2, 255, 140, 43, 4, 255, 138, 41, 4, 255, 127, 33, 0, 255, 123, 32, 2, 255, 122, 33, 2, 255, 113, 29, 1, 255, 112, 28, 1, 255, 118, 31, 3, 255, 113, 35, 6, 255, 109, 32, 3, 255, 116, 33, 5, 255, 107, 25, 1, 255, 114, 31, 2, 255, 123, 38, 2, 255, 130, 39, 4, 255, 127, 35, 4, 255, 116, 29, 5, 255, 96, 23, 3, 255, 85, 19, 1, 255, 89, 22, 2, 255, 90, 21, 3, 255, 93, 22, 5, 255, 93, 25, 4, 255, 87, 22, 3, 255, 90, 22, 2, 255, 93, 22, 3, 255, 88, 25, 5, 255, 81, 22, 1, 255, 82, 21, 3, 255, 74, 18, 3, 255, 64, 16, 6, 255, 54, 15, 2, 255, 61, 19, 3, 255, 71, 19, 5, 255, 77, 18, 4, 255, 83, 19, 3, 255, 92, 24, 1, 255, 99, 28, 2, 255, 106, 26, 4, 255, 116, 31, 6, 255, 115, 37, 4, 255, 109, 38, 1, 255, 102, 33, 5, 255, 79, 18, 1, 255, 69, 18, 3, 255, 69, 22, 6, 255, 66, 19, 4, 255, 71, 18, 3, 255, 73, 18, 0, 255, 72, 21, 1, 255, 67, 17, 2, 255, 76, 23, 4, 255, 84, 27, 2, 255, 90, 28, 5, 255, 89, 24, 0, 255, 103, 30, 0, 255, 112, 33, 2, 255, 108, 33, 4, 255, 104, 30, 0, 255, 103, 31, 1, 255, 15, 10, 5, 255, 15, 9, 4, 255, 17, 8, 3, 255, 17, 8, 0, 255, 15, 5, 2, 255, 19, 10, 8, 255, 16, 10, 2, 255, 13, 9, 2, 255, 14, 9, 6, 255, 18, 7, 3, 255, 26, 9, 3, 255, 23, 8, 1, 255, 18, 9, 2, 255, 21, 12, 2, 255, 23, 14, 3, 255, 24, 15, 4, 255, 23, 15, 3, 255, 25, 16, 3, 255, 25, 16, 3, 255, 30, 18, 8, 255, 26, 13, 3, 255, 31, 16, 3, 255, 31, 17, 2, 255, 25, 15, 1, 255, 18, 13, 1, 255, 21, 15, 2, 255, 26, 16, 1, 255, 23, 13, 1, 255, 26, 16, 3, 255, 23, 13, 2, 255, 24, 13, 2, 255, 26, 15, 5, 255, 34, 16, 2, 255, 39, 20, 7, 255, 33, 17, 5, 255, 30, 17, 6, 255, 38, 23, 6, 255, 49, 25, 1, 255, 52, 30, 0, 255, 50, 28, 7, 255, 63, 41, 9, 255, 60, 47, 12, 255, 72, 55, 31, 255, 81, 57, 26, 255, 71, 54, 3, 255, 68, 46, 2, 255, 60, 33, 6, 255, 63, 44, 21, 255, 64, 51, 17, 255, 68, 48, 19, 255, 72, 49, 23, 255, 66, 49, 27, 255, 62, 50, 41, 255, 72, 56, 20, 255, 76, 54, 12, 255, 68, 56, 29, 255, 74, 61, 27, 255, 84, 63, 34, 255, 80, 66, 44, 255, 79, 66, 23, 255, 80, 65, 20, 255, 82, 51, 19, 255, 85, 42, 8, 255, 84, 46, 1, 255, 78, 42, 2, 255, 79, 45, 5, 255, 80, 45, 3, 255, 87, 46, 2, 255, 91, 46, 1, 255, 95, 44, 2, 255, 93, 48, 2, 255, 92, 52, 3, 255, 96, 45, 0, 255, 101, 45, 1, 255, 90, 43, 4, 255, 87, 46, 5, 255, 96, 47, 2, 255, 104, 49, 5, 255, 99, 51, 2, 255, 84, 42, 2, 255, 87, 46, 11, 255, 89, 48, 5, 255, 89, 50, 0, 255, 98, 50, 0, 255, 102, 55, 6, 255, 103, 54, 2, 255, 113, 52, 4, 255, 115, 54, 5, 255, 113, 52, 1, 255, 118, 50, 4, 255, 115, 54, 1, 255, 114, 55, 0, 255, 118, 52, 1, 255, 120, 49, 3, 255, 114, 52, 3, 255, 109, 59, 4, 255, 106, 60, 2, 255, 110, 61, 3, 255, 110, 64, 3, 255, 110, 62, 2, 255, 116, 57, 2, 255, 120, 58, 3, 255, 111, 54, 1, 255, 113, 57, 2, 255, 115, 61, 2, 255, 111, 62, 6, 255, 100, 57, 1, 255, 107, 60, 2, 255, 116, 54, 0, 255, 124, 61, 3, 255, 126, 57, 3, 255, 124, 52, 1, 255, 116, 46, 4, 255, 115, 53, 8, 255, 124, 74, 5, 255, 120, 75, 3, 255, 120, 70, 1, 255, 116, 55, 4, 255, 126, 62, 4, 255, 126, 68, 4, 255, 122, 66, 4, 255, 122, 72, 1, 255, 123, 68, 6, 255, 137, 70, 8, 255, 125, 61, 6, 255, 118, 61, 4, 255, 123, 63, 4, 255, 124, 66, 2, 255, 135, 81, 5, 255, 128, 68, 5, 255, 121, 52, 10, 255, 113, 48, 1, 255, 106, 47, 9, 255, 104, 52, 8, 255, 129, 72, 9, 255, 146, 85, 4, 255, 144, 81, 4, 255, 146, 82, 1, 255, 148, 79, 10, 255, 143, 77, 3, 255, 139, 74, 7, 255, 138, 66, 6, 255, 128, 70, 5, 255, 127, 75, 8, 255, 129, 70, 7, 255, 120, 68, 8, 255, 102, 65, 9, 255, 101, 57, 9, 255, 100, 56, 10, 255, 100, 57, 9, 255, 103, 60, 10, 255, 98, 55, 8, 255, 97, 56, 8, 255, 103, 61, 10, 255, 106, 58, 7, 255, 105, 60, 6, 255, 101, 61, 12, 255, 106, 64, 16, 255, 108, 61, 15, 255, 107, 61, 20, 255, 108, 63, 11, 255, 108, 61, 12, 255, 107, 59, 17, 255, 110, 63, 18, 255, 109, 62, 18, 255, 109, 70, 19, 255, 103, 65, 15, 255, 107, 67, 17, 255, 110, 68, 16, 255, 112, 72, 13, 255, 108, 66, 25, 255, 111, 69, 21, 255, 113, 70, 37, 255, 111, 77, 27, 255, 111, 71, 30, 255, 110, 72, 24, 255, 107, 74, 26, 255, 109, 76, 34, 255, 108, 74, 30, 255, 111, 80, 20, 255, 111, 79, 35, 255, 108, 77, 26, 255, 111, 78, 28, 255, 115, 82, 32, 255, 118, 87, 28, 255, 112, 81, 33, 255, 107, 82, 38, 255, 105, 82, 34, 255, 106, 86, 32, 255, 107, 87, 28, 255, 106, 85, 28, 255, 107, 86, 35, 255, 103, 89, 29, 255, 113, 90, 35, 255, 114, 88, 36, 255, 110, 90, 36, 255, 109, 92, 36, 255, 109, 90, 32, 255, 108, 87, 34, 255, 111, 92, 36, 255, 111, 90, 32, 255, 116, 95, 38, 255, 117, 97, 29, 255, 115, 94, 31, 255, 109, 89, 24, 255, 113, 93, 28, 255, 117, 97, 25, 255, 112, 91, 24, 255, 110, 89, 31, 255, 112, 91, 23, 255, 112, 89, 18, 255, 115, 89, 28, 255, 116, 92, 30, 255, 117, 94, 16, 255, 115, 85, 20, 255, 120, 86, 26, 255, 120, 86, 23, 255, 110, 80, 29, 255, 109, 85, 23, 255, 113, 86, 16, 255, 112, 83, 20, 255, 108, 83, 21, 255, 111, 85, 16, 255, 110, 79, 13, 255, 115, 79, 14, 255, 113, 77, 19, 255, 104, 76, 20, 255, 105, 75, 25, 255, 101, 71, 19, 255, 109, 75, 22, 255, 110, 71, 9, 255, 112, 73, 18, 255, 108, 74, 13, 255, 111, 75, 13, 255, 110, 69, 13, 255, 109, 68, 5, 255, 110, 69, 6, 255, 109, 67, 3, 255, 113, 66, 11, 255, 111, 66, 12, 255, 106, 67, 5, 255, 106, 68, 5, 255, 106, 65, 10, 255, 108, 61, 11, 255, 115, 63, 5, 255, 117, 64, 10, 255, 112, 63, 7, 255, 110, 58, 8, 255, 106, 56, 10, 255, 103, 56, 3, 255, 110, 59, 5, 255, 109, 55, 6, 255, 106, 54, 7, 255, 105, 54, 7, 255, 106, 54, 7, 255, 108, 54, 7, 255, 106, 53, 6, 255, 96, 54, 3, 255, 92, 51, 0, 255, 99, 54, 4, 255, 99, 51, 3, 255, 101, 48, 4, 255, 100, 48, 5, 255, 94, 45, 2, 255, 94, 44, 2, 255, 93, 47, 5, 255, 92, 45, 4, 255, 100, 44, 4, 255, 97, 47, 1, 255, 93, 48, 2, 255, 90, 43, 1, 255, 94, 43, 6, 255, 94, 42, 7, 255, 95, 40, 3, 255, 99, 47, 2, 255, 103, 47, 8, 255, 91, 37, 5, 255, 85, 37, 3, 255, 75, 37, 2, 255, 80, 40, 2, 255, 95, 41, 1, 255, 94, 37, 2, 255, 81, 38, 2, 255, 79, 33, 1, 255, 79, 31, 6, 255, 87, 33, 3, 255, 93, 35, 1, 255, 101, 40, 3, 255, 114, 48, 2, 255, 119, 44, 4, 255, 124, 48, 2, 255, 121, 49, 4, 255, 105, 36, 4, 255, 112, 42, 4, 255, 125, 52, 2, 255, 133, 52, 4, 255, 129, 49, 4, 255, 132, 51, 3, 255, 127, 49, 1, 255, 113, 46, 2, 255, 108, 38, 6, 255, 113, 37, 4, 255, 106, 42, 2, 255, 99, 37, 0, 255, 102, 33, 8, 255, 116, 42, 7, 255, 117, 39, 4, 255, 122, 42, 8, 255, 111, 38, 1, 255, 105, 36, 4, 255, 110, 37, 7, 255, 110, 37, 1, 255, 109, 38, 0, 255, 109, 38, 5, 255, 102, 33, 5, 255, 93, 27, 2, 255, 96, 30, 7, 255, 111, 42, 2, 255, 114, 36, 1, 255, 121, 37, 5, 255, 120, 39, 2, 255, 131, 42, 2, 255, 140, 50, 3, 255, 140, 52, 1, 255, 139, 49, 1, 255, 134, 44, 3, 255, 138, 48, 4, 255, 140, 47, 2, 255, 139, 45, 1, 255, 145, 51, 0, 255, 147, 47, 7, 255, 145, 45, 5, 255, 141, 46, 0, 255, 144, 47, 2, 255, 146, 47, 3, 255, 145, 46, 2, 255, 141, 44, 2, 255, 138, 41, 0, 255, 140, 43, 2, 255, 141, 45, 4, 255, 138, 44, 0, 255, 137, 44, 0, 255, 132, 40, 2, 255, 120, 33, 2, 255, 116, 33, 4, 255, 111, 32, 1, 255, 115, 35, 3, 255, 121, 35, 6, 255, 118, 31, 0, 255, 119, 32, 0, 255, 120, 35, 4, 255, 114, 28, 1, 255, 111, 32, 3, 255, 124, 39, 4, 255, 127, 40, 2, 255, 130, 39, 3, 255, 130, 37, 4, 255, 111, 31, 5, 255, 85, 21, 2, 255, 88, 21, 3, 255, 89, 20, 2, 255, 84, 20, 4, 255, 92, 24, 5, 255, 95, 26, 2, 255, 90, 27, 1, 255, 87, 22, 3, 255, 85, 23, 4, 255, 87, 25, 2, 255, 88, 21, 2, 255, 76, 19, 5, 255, 74, 18, 0, 255, 75, 23, 1, 255, 62, 17, 2, 255, 64, 14, 5, 255, 65, 19, 3, 255, 68, 20, 5, 255, 76, 21, 4, 255, 79, 22, 0, 255, 92, 26, 2, 255, 102, 31, 4, 255, 111, 36, 4, 255, 114, 43, 0, 255, 105, 38, 0, 255, 87, 19, 4, 255, 73, 18, 4, 255, 72, 22, 8, 255, 67, 19, 4, 255, 70, 17, 2, 255, 73, 18, 2, 255, 67, 17, 2, 255, 68, 21, 3, 255, 71, 17, 0, 255, 79, 18, 3, 255, 88, 24, 3, 255, 95, 28, 1, 255, 102, 30, 1, 255, 105, 31, 2, 255, 108, 33, 1, 255, 108, 32, 0, 255, 107, 28, 0, 255, 12, 8, 1, 255, 16, 11, 4, 255, 17, 11, 4, 255, 16, 8, 2, 255, 16, 7, 1, 255, 18, 9, 3, 255, 16, 4, 0, 255, 17, 8, 3, 255, 15, 11, 6, 255, 17, 11, 1, 255, 22, 12, 2, 255, 24, 10, 2, 255, 22, 10, 3, 255, 22, 16, 5, 255, 21, 9, 1, 255, 25, 10, 1, 255, 29, 14, 5, 255, 30, 17, 5, 255, 25, 17, 4, 255, 23, 13, 2, 255, 24, 12, 3, 255, 24, 12, 1, 255, 25, 16, 3, 255, 23, 16, 4, 255, 21, 14, 4, 255, 23, 16, 6, 255, 26, 14, 6, 255, 28, 15, 7, 255, 28, 14, 6, 255, 30, 14, 5, 255, 27, 10, 1, 255, 32, 14, 4, 255, 38, 17, 3, 255, 27, 19, 1, 255, 34, 18, 4, 255, 32, 17, 3, 255, 39, 23, 6, 255, 41, 25, 3, 255, 52, 27, 5, 255, 60, 29, 10, 255, 53, 33, 5, 255, 59, 44, 10, 255, 71, 54, 31, 255, 65, 57, 30, 255, 65, 53, 15, 255, 66, 43, 5, 255, 59, 30, 4, 255, 56, 33, 16, 255, 57, 42, 6, 255, 65, 48, 13, 255, 69, 51, 12, 255, 63, 48, 24, 255, 63, 46, 34, 255, 70, 53, 12, 255, 65, 50, 14, 255, 69, 58, 29, 255, 75, 59, 42, 255, 77, 59, 28, 255, 77, 61, 19, 255, 81, 57, 15, 255, 83, 55, 11, 255, 89, 57, 4, 255, 88, 51, 1, 255, 83, 47, 2, 255, 80, 42, 1, 255, 78, 44, 3, 255, 78, 43, 2, 255, 86, 49, 5, 255, 89, 50, 5, 255, 90, 47, 4, 255, 83, 48, 5, 255, 81, 48, 4, 255, 86, 45, 2, 255, 88, 48, 6, 255, 87, 47, 7, 255, 90, 46, 4, 255, 94, 45, 1, 255, 96, 46, 4, 255, 88, 48, 3, 255, 94, 44, 4, 255, 105, 45, 3, 255, 99, 47, 0, 255, 94, 51, 2, 255, 103, 49, 5, 255, 93, 51, 6, 255, 93, 50, 3, 255, 97, 50, 4, 255, 90, 47, 1, 255, 102, 49, 2, 255, 107, 49, 5, 255, 106, 56, 3, 255, 108, 56, 1, 255, 118, 54, 2, 255, 118, 54, 3, 255, 112, 58, 2, 255, 96, 65, 1, 255, 101, 63, 2, 255, 108, 61, 3, 255, 109, 60, 3, 255, 104, 61, 2, 255, 105, 64, 3, 255, 112, 60, 4, 255, 116, 53, 5, 255, 126, 52, 3, 255, 120, 59, 1, 255, 102, 54, 1, 255, 93, 50, 5, 255, 90, 58, 7, 255, 103, 61, 5, 255, 108, 68, 3, 255, 119, 60, 0, 255, 126, 55, 2, 255, 119, 52, 2, 255, 121, 60, 5, 255, 121, 60, 2, 255, 125, 61, 3, 255, 125, 69, 1, 255, 115, 68, 3, 255, 116, 68, 1, 255, 125, 73, 4, 255, 126, 72, 5, 255, 127, 74, 3, 255, 123, 64, 4, 255, 124, 65, 0, 255, 122, 70, 2, 255, 122, 78, 3, 255, 126, 77, 5, 255, 136, 74, 5, 255, 135, 82, 6, 255, 128, 71, 13, 255, 125, 69, 7, 255, 114, 59, 6, 255, 129, 76, 6, 255, 140, 85, 5, 255, 137, 77, 7, 255, 145, 80, 3, 255, 148, 87, 4, 255, 137, 83, 0, 255, 147, 83, 3, 255, 145, 74, 2, 255, 135, 71, 9, 255, 124, 64, 4, 255, 119, 71, 2, 255, 119, 72, 6, 255, 117, 72, 4, 255, 123, 70, 5, 255, 125, 73, 11, 255, 118, 68, 6, 255, 113, 65, 1, 255, 109, 63, 7, 255, 108, 64, 8, 255, 108, 64, 5, 255, 101, 56, 8, 255, 101, 59, 13, 255, 95, 60, 8, 255, 98, 59, 12, 255, 106, 55, 16, 255, 106, 56, 15, 255, 98, 63, 6, 255, 98, 66, 14, 255, 104, 65, 18, 255, 108, 69, 19, 255, 116, 76, 26, 255, 105, 62, 17, 255, 107, 62, 21, 255, 107, 66, 17, 255, 105, 66, 20, 255, 107, 66, 18, 255, 109, 67, 20, 255, 112, 71, 25, 255, 111, 71, 28, 255, 114, 75, 16, 255, 110, 68, 32, 255, 106, 74, 32, 255, 109, 76, 13, 255, 111, 75, 25, 255, 109, 74, 30, 255, 109, 75, 31, 255, 112, 77, 27, 255, 114, 82, 29, 255, 111, 83, 23, 255, 112, 81, 30, 255, 117, 82, 40, 255, 116, 82, 29, 255, 114, 82, 30, 255, 112, 80, 38, 255, 116, 84, 43, 255, 112, 83, 40, 255, 112, 87, 39, 255, 109, 85, 33, 255, 109, 85, 34, 255, 112, 88, 41, 255, 110, 86, 46, 255, 112, 87, 35, 255, 112, 88, 30, 255, 108, 91, 36, 255, 107, 93, 31, 255, 113, 93, 36, 255, 115, 94, 37, 255, 113, 94, 33, 255, 113, 94, 24, 255, 114, 93, 36, 255, 113, 92, 31, 255, 112, 93, 27, 255, 111, 91, 34, 255, 108, 91, 30, 255, 115, 94, 35, 255, 115, 96, 26, 255, 113, 92, 28, 255, 115, 91, 27, 255, 118, 89, 24, 255, 118, 93, 23, 255, 117, 92, 18, 255, 116, 90, 23, 255, 115, 87, 22, 255, 116, 84, 30, 255, 114, 86, 23, 255, 113, 85, 16, 255, 116, 88, 12, 255, 116, 86, 16, 255, 121, 84, 22, 255, 120, 81, 20, 255, 113, 76, 17, 255, 108, 78, 18, 255, 109, 79, 20, 255, 108, 74, 23, 255, 107, 72, 18, 255, 108, 77, 10, 255, 107, 75, 17, 255, 105, 75, 15, 255, 106, 70, 15, 255, 111, 70, 17, 255, 106, 72, 6, 255, 108, 69, 7, 255, 113, 69, 13, 255, 109, 67, 9, 255, 106, 64, 13, 255, 107, 67, 10, 255, 113, 67, 11, 255, 109, 63, 7, 255, 109, 67, 12, 255, 104, 64, 7, 255, 106, 65, 5, 255, 111, 63, 6, 255, 109, 63, 1, 255, 111, 62, 5, 255, 112, 60, 6, 255, 105, 60, 9, 255, 101, 57, 8, 255, 106, 56, 6, 255, 104, 56, 10, 255, 98, 54, 5, 255, 102, 55, 7, 255, 108, 55, 8, 255, 107, 55, 8, 255, 102, 53, 5, 255, 102, 52, 6, 255, 102, 52, 6, 255, 95, 51, 3, 255, 95, 50, 3, 255, 102, 50, 5, 255, 100, 48, 3, 255, 98, 48, 3, 255, 96, 44, 1, 255, 96, 44, 2, 255, 91, 47, 6, 255, 89, 42, 2, 255, 98, 43, 2, 255, 96, 50, 3, 255, 97, 51, 4, 255, 97, 44, 5, 255, 96, 42, 3, 255, 94, 44, 3, 255, 91, 44, 2, 255, 94, 44, 4, 255, 101, 42, 4, 255, 103, 41, 3, 255, 85, 35, 3, 255, 81, 39, 4, 255, 79, 41, 3, 255, 80, 40, 1, 255, 97, 44, 4, 255, 90, 39, 4, 255, 81, 35, 2, 255, 79, 36, 7, 255, 87, 34, 4, 255, 109, 46, 4, 255, 111, 40, 3, 255, 118, 48, 5, 255, 125, 45, 2, 255, 133, 51, 5, 255, 117, 46, 4, 255, 104, 38, 4, 255, 109, 38, 3, 255, 129, 50, 6, 255, 134, 54, 2, 255, 131, 57, 0, 255, 134, 54, 2, 255, 138, 48, 5, 255, 135, 49, 6, 255, 130, 48, 4, 255, 116, 38, 2, 255, 119, 36, 2, 255, 118, 31, 0, 255, 117, 30, 1, 255, 127, 43, 2, 255, 125, 41, 0, 255, 120, 47, 1, 255, 119, 48, 1, 255, 119, 44, 5, 255, 118, 39, 6, 255, 125, 42, 4, 255, 127, 41, 2, 255, 123, 37, 1, 255, 107, 28, 0, 255, 99, 30, 2, 255, 96, 28, 0, 255, 116, 40, 2, 255, 117, 39, 3, 255, 114, 36, 3, 255, 123, 41, 2, 255, 121, 42, 2, 255, 133, 46, 6, 255, 145, 48, 7, 255, 141, 46, 3, 255, 138, 46, 2, 255, 138, 47, 2, 255, 140, 45, 3, 255, 142, 45, 2, 255, 139, 41, 1, 255, 144, 49, 2, 255, 146, 47, 4, 255, 147, 43, 4, 255, 145, 44, 3, 255, 146, 43, 2, 255, 146, 45, 3, 255, 144, 47, 4, 255, 138, 42, 1, 255, 139, 42, 2, 255, 139, 43, 1, 255, 142, 47, 2, 255, 138, 44, 2, 255, 133, 42, 1, 255, 127, 42, 2, 255, 118, 37, 1, 255, 116, 35, 1, 255, 120, 34, 2, 255, 122, 32, 2, 255, 128, 36, 3, 255, 126, 38, 5, 255, 117, 33, 2, 255, 111, 28, 0, 255, 118, 35, 4, 255, 124, 37, 1, 255, 129, 40, 2, 255, 135, 41, 4, 255, 137, 42, 5, 255, 123, 37, 5, 255, 101, 30, 8, 255, 85, 20, 1, 255, 88, 22, 3, 255, 87, 23, 4, 255, 92, 22, 5, 255, 103, 26, 8, 255, 89, 22, 0, 255, 86, 23, 1, 255, 87, 23, 8, 255, 86, 22, 5, 255, 82, 18, 1, 255, 79, 22, 3, 255, 93, 27, 4, 255, 96, 23, 4, 255, 75, 18, 2, 255, 54, 15, 0, 255, 58, 18, 1, 255, 71, 16, 3, 255, 82, 20, 5, 255, 83, 22, 3, 255, 86, 24, 4, 255, 93, 25, 4, 255, 94, 27, 0, 255, 112, 40, 2, 255, 110, 37, 3, 255, 85, 22, 2, 255, 75, 18, 4, 255, 64, 17, 2, 255, 64, 17, 2, 255, 68, 16, 1, 255, 71, 22, 5, 255, 67, 18, 2, 255, 72, 20, 4, 255, 77, 21, 7, 255, 77, 15, 4, 255, 83, 19, 2, 255, 95, 27, 2, 255, 102, 29, 1, 255, 104, 30, 0, 255, 108, 37, 3, 255, 107, 34, 2, 255, 106, 32, 1, 255, 14, 10, 1, 255, 15, 11, 4, 255, 15, 9, 4, 255, 16, 10, 4, 255, 17, 9, 1, 255, 20, 10, 2, 255, 22, 9, 4, 255, 19, 7, 2, 255, 18, 11, 2, 255, 16, 10, 0, 255, 19, 10, 1, 255, 19, 8, 1, 255, 19, 8, 1, 255, 21, 10, 1, 255, 22, 11, 2, 255, 25, 15, 5, 255, 29, 16, 7, 255, 32, 17, 7, 255, 32, 17, 5, 255, 26, 13, 1, 255, 26, 15, 3, 255, 20, 12, 2, 255, 20, 13, 4, 255, 22, 14, 5, 255, 20, 11, 1, 255, 23, 12, 2, 255, 25, 11, 1, 255, 27, 13, 2, 255, 32, 16, 4, 255, 36, 19, 6, 255, 31, 14, 1, 255, 36, 19, 4, 255, 42, 22, 6, 255, 35, 20, 1, 255, 35, 18, 0, 255, 47, 21, 2, 255, 44, 26, 3, 255, 48, 28, 2, 255, 50, 26, 3, 255, 52, 28, 2, 255, 63, 29, 7, 255, 62, 35, 2, 255, 47, 41, 17, 255, 60, 58, 40, 255, 62, 53, 29, 255, 63, 43, 8, 255, 59, 32, 2, 255, 60, 38, 5, 255, 60, 44, 8, 255, 62, 43, 5, 255, 65, 45, 13, 255, 67, 48, 18, 255, 69, 48, 14, 255, 67, 49, 20, 255, 60, 45, 25, 255, 71, 52, 37, 255, 81, 61, 38, 255, 79, 63, 21, 255, 83, 57, 19, 255, 88, 57, 15, 255, 78, 51, 1, 255, 84, 53, 7, 255, 90, 49, 6, 255, 87, 42, 0, 255, 84, 43, 3, 255, 82, 45, 4, 255, 81, 46, 5, 255, 85, 46, 3, 255, 86, 44, 2, 255, 84, 43, 1, 255, 84, 40, 0, 255, 92, 43, 1, 255, 88, 46, 1, 255, 75, 44, 4, 255, 76, 45, 5, 255, 81, 44, 2, 255, 77, 42, 3, 255, 87, 43, 4, 255, 87, 42, 0, 255, 99, 47, 1, 255, 111, 53, 5, 255, 107, 50, 2, 255, 102, 51, 5, 255, 90, 49, 5, 255, 90, 46, 4, 255, 86, 47, 0, 255, 90, 50, 3, 255, 100, 50, 5, 255, 103, 54, 6, 255, 96, 52, 5, 255, 96, 53, 3, 255, 102, 52, 2, 255, 110, 55, 5, 255, 112, 53, 4, 255, 106, 57, 1, 255, 105, 59, 0, 255, 103, 58, 1, 255, 97, 63, 2, 255, 99, 61, 3, 255, 103, 56, 2, 255, 99, 55, 1, 255, 99, 58, 2, 255, 96, 60, 5, 255, 96, 55, 3, 255, 95, 56, 1, 255, 90, 55, 0, 255, 98, 56, 4, 255, 99, 58, 2, 255, 102, 64, 6, 255, 102, 60, 3, 255, 110, 61, 5, 255, 120, 61, 5, 255, 128, 66, 5, 255, 120, 64, 1, 255, 110, 66, 1, 255, 114, 64, 2, 255, 120, 69, 1, 255, 124, 70, 5, 255, 126, 68, 2, 255, 124, 68, 1, 255, 119, 70, 3, 255, 122, 74, 4, 255, 122, 74, 2, 255, 116, 75, 3, 255, 120, 68, 3, 255, 134, 77, 1, 255, 136, 83, 6, 255, 135, 87, 2, 255, 135, 91, 4, 255, 141, 91, 7, 255, 145, 88, 3, 255, 133, 70, 3, 255, 145, 83, 4, 255, 147, 82, 4, 255, 128, 63, 6, 255, 132, 66, 6, 255, 141, 76, 5, 255, 141, 80, 10, 255, 141, 79, 0, 255, 140, 79, 7, 255, 130, 78, 8, 255, 127, 76, 8, 255, 121, 69, 12, 255, 114, 61, 2, 255, 117, 69, 9, 255, 115, 63, 7, 255, 114, 60, 4, 255, 122, 68, 10, 255, 117, 65, 7, 255, 108, 63, 5, 255, 103, 60, 14, 255, 100, 60, 10, 255, 104, 62, 8, 255, 101, 61, 8, 255, 95, 64, 7, 255, 93, 59, 12, 255, 98, 61, 17, 255, 94, 58, 20, 255, 97, 58, 19, 255, 118, 70, 18, 255, 101, 64, 15, 255, 96, 67, 18, 255, 106, 71, 22, 255, 106, 64, 18, 255, 103, 68, 18, 255, 107, 68, 26, 255, 108, 69, 24, 255, 110, 75, 12, 255, 109, 70, 24, 255, 107, 69, 28, 255, 108, 72, 21, 255, 109, 72, 16, 255, 110, 73, 18, 255, 109, 74, 23, 255, 110, 74, 21, 255, 112, 78, 24, 255, 110, 78, 23, 255, 108, 79, 26, 255, 108, 78, 30, 255, 112, 78, 38, 255, 111, 79, 30, 255, 111, 81, 30, 255, 116, 83, 34, 255, 114, 82, 26, 255, 110, 84, 27, 255, 110, 84, 29, 255, 112, 85, 31, 255, 111, 87, 33, 255, 111, 89, 34, 255, 108, 88, 33, 255, 110, 90, 35, 255, 113, 92, 41, 255, 113, 90, 39, 255, 112, 91, 28, 255, 113, 92, 32, 255, 111, 93, 43, 255, 109, 93, 32, 255, 113, 90, 38, 255, 115, 93, 38, 255, 112, 93, 26, 255, 113, 96, 23, 255, 112, 93, 30, 255, 111, 92, 31, 255, 110, 92, 30, 255, 113, 97, 22, 255, 123, 95, 28, 255, 119, 91, 32, 255, 117, 93, 26, 255, 110, 90, 33, 255, 111, 92, 34, 255, 116, 97, 31, 255, 119, 91, 24, 255, 117, 87, 22, 255, 117, 88, 24, 255, 117, 88, 25, 255, 116, 86, 24, 255, 114, 89, 24, 255, 110, 87, 13, 255, 110, 85, 23, 255, 107, 82, 30, 255, 109, 82, 8, 255, 113, 81, 19, 255, 109, 80, 17, 255, 105, 82, 14, 255, 107, 78, 16, 255, 105, 78, 19, 255, 112, 76, 23, 255, 110, 76, 10, 255, 108, 71, 16, 255, 107, 73, 27, 255, 107, 74, 22, 255, 110, 70, 18, 255, 111, 71, 14, 255, 109, 67, 7, 255, 114, 71, 6, 255, 113, 70, 9, 255, 111, 68, 17, 255, 108, 68, 5, 255, 114, 67, 6, 255, 112, 64, 5, 255, 111, 66, 13, 255, 103, 63, 10, 255, 104, 62, 8, 255, 110, 61, 7, 255, 110, 63, 5, 255, 111, 62, 5, 255, 109, 57, 6, 255, 106, 60, 8, 255, 106, 61, 4, 255, 104, 56, 3, 255, 99, 53, 8, 255, 104, 58, 9, 255, 104, 53, 5, 255, 106, 50, 3, 255, 106, 54, 7, 255, 98, 53, 5, 255, 103, 53, 7, 255, 102, 48, 5, 255, 103, 53, 9, 255, 96, 49, 5, 255, 102, 49, 5, 255, 102, 53, 7, 255, 105, 49, 5, 255, 96, 47, 2, 255, 91, 46, 2, 255, 96, 44, 7, 255, 89, 45, 4, 255, 93, 46, 3, 255, 105, 48, 4, 255, 106, 46, 6, 255, 92, 45, 4, 255, 96, 45, 5, 255, 110, 44, 3, 255, 109, 44, 6, 255, 88, 41, 6, 255, 89, 40, 1, 255, 91, 40, 0, 255, 85, 35, 3, 255, 81, 38, 4, 255, 79, 38, 2, 255, 85, 38, 5, 255, 87, 37, 1, 255, 82, 35, 2, 255, 80, 36, 1, 255, 78, 36, 3, 255, 93, 36, 3, 255, 115, 47, 3, 255, 121, 43, 4, 255, 119, 45, 3, 255, 128, 48, 0, 255, 130, 49, 1, 255, 114, 41, 1, 255, 111, 43, 5, 255, 108, 36, 4, 255, 120, 41, 1, 255, 135, 53, 4, 255, 132, 51, 2, 255, 136, 47, 1, 255, 143, 47, 4, 255, 142, 55, 5, 255, 135, 53, 2, 255, 120, 43, 3, 255, 109, 32, 2, 255, 107, 33, 8, 255, 101, 27, 1, 255, 106, 31, 0, 255, 110, 33, 6, 255, 116, 41, 3, 255, 130, 45, 2, 255, 132, 42, 0, 255, 132, 45, 0, 255, 130, 46, 1, 255, 130, 46, 5, 255, 119, 35, 2, 255, 107, 31, 6, 255, 95, 27, 1, 255, 110, 34, 4, 255, 129, 39, 6, 255, 126, 40, 1, 255, 112, 39, 4, 255, 129, 44, 5, 255, 125, 44, 2, 255, 133, 44, 2, 255, 144, 46, 4, 255, 140, 44, 1, 255, 138, 47, 0, 255, 139, 47, 2, 255, 135, 41, 2, 255, 134, 40, 6, 255, 138, 43, 1, 255, 143, 49, 2, 255, 144, 46, 2, 255, 149, 43, 3, 255, 147, 46, 4, 255, 147, 44, 3, 255, 146, 44, 2, 255, 142, 44, 2, 255, 143, 48, 4, 255, 139, 43, 1, 255, 139, 43, 1, 255, 137, 40, 3, 255, 135, 37, 4, 255, 136, 38, 3, 255, 134, 38, 0, 255, 127, 33, 1, 255, 127, 35, 4, 255, 131, 37, 4, 255, 130, 34, 2, 255, 130, 37, 3, 255, 126, 41, 5, 255, 114, 34, 0, 255, 109, 32, 2, 255, 125, 39, 6, 255, 124, 38, 0, 255, 128, 37, 1, 255, 133, 39, 1, 255, 137, 41, 1, 255, 128, 37, 1, 255, 112, 27, 3, 255, 91, 22, 3, 255, 91, 21, 6, 255, 83, 19, 1, 255, 84, 22, 2, 255, 100, 24, 6, 255, 90, 23, 1, 255, 90, 17, 3, 255, 87, 21, 5, 255, 83, 24, 3, 255, 84, 25, 3, 255, 82, 22, 2, 255, 94, 20, 2, 255, 86, 18, 1, 255, 83, 19, 4, 255, 62, 16, 0, 255, 61, 16, 2, 255, 69, 15, 2, 255, 73, 17, 2, 255, 78, 19, 2, 255, 82, 21, 4, 255, 82, 20, 3, 255, 81, 22, 0, 255, 103, 32, 4, 255, 102, 27, 3, 255, 73, 17, 0, 255, 74, 19, 5, 255, 61, 17, 0, 255, 70, 20, 5, 255, 74, 19, 5, 255, 64, 19, 1, 255, 67, 20, 2, 255, 72, 20, 3, 255, 73, 20, 6, 255, 70, 16, 2, 255, 76, 18, 3, 255, 81, 21, 0, 255, 98, 33, 3, 255, 103, 32, 0, 255, 111, 35, 3, 255, 110, 33, 2, 255, 105, 29, 0, 255, 17, 10, 2, 255, 12, 8, 0, 255, 12, 7, 2, 255, 15, 9, 3, 255, 16, 8, 1, 255, 23, 13, 3, 255, 19, 10, 2, 255, 17, 8, 1, 255, 21, 12, 2, 255, 26, 13, 4, 255, 25, 14, 5, 255, 19, 12, 2, 255, 21, 12, 4, 255, 23, 10, 3, 255, 23, 14, 5, 255, 23, 14, 4, 255, 25, 11, 2, 255, 27, 11, 1, 255, 30, 13, 2, 255, 30, 16, 2, 255, 28, 16, 4, 255, 22, 13, 2, 255, 20, 11, 1, 255, 26, 14, 5, 255, 26, 12, 2, 255, 30, 15, 3, 255, 31, 19, 3, 255, 32, 19, 4, 255, 27, 15, 0, 255, 31, 18, 2, 255, 33, 19, 4, 255, 30, 17, 2, 255, 22, 14, 4, 255, 30, 17, 3, 255, 39, 19, 2, 255, 48, 26, 7, 255, 43, 27, 4, 255, 46, 26, 1, 255, 56, 27, 5, 255, 50, 26, 5, 255, 56, 26, 3, 255, 54, 30, 5, 255, 42, 38, 3, 255, 55, 47, 29, 255, 69, 53, 29, 255, 70, 52, 15, 255, 61, 39, 2, 255, 52, 35, 10, 255, 60, 50, 11, 255, 59, 38, 5, 255, 70, 37, 7, 255, 74, 48, 3, 255, 71, 46, 6, 255, 65, 49, 7, 255, 72, 57, 15, 255, 86, 58, 21, 255, 80, 58, 13, 255, 81, 62, 37, 255, 87, 59, 21, 255, 86, 52, 4, 255, 80, 47, 5, 255, 80, 45, 5, 255, 83, 40, 4, 255, 87, 39, 1, 255, 82, 39, 2, 255, 77, 38, 1, 255, 84, 43, 4, 255, 91, 44, 4, 255, 98, 45, 7, 255, 97, 42, 6, 255, 93, 44, 4, 255, 95, 47, 1, 255, 87, 47, 0, 255, 75, 43, 3, 255, 78, 42, 2, 255, 86, 40, 1, 255, 84, 40, 4, 255, 83, 41, 6, 255, 85, 44, 1, 255, 92, 51, 1, 255, 94, 51, 3, 255, 90, 43, 1, 255, 95, 46, 2, 255, 94, 52, 7, 255, 85, 44, 4, 255, 83, 48, 3, 255, 88, 45, 1, 255, 97, 48, 3, 255, 101, 54, 5, 255, 99, 50, 4, 255, 99, 53, 2, 255, 100, 53, 1, 255, 106, 50, 1, 255, 111, 46, 1, 255, 110, 52, 2, 255, 106, 58, 2, 255, 97, 56, 0, 255, 100, 61, 4, 255, 99, 56, 3, 255, 100, 54, 3, 255, 93, 57, 4, 255, 94, 56, 3, 255, 90, 54, 1, 255, 96, 53, 3, 255, 102, 54, 4, 255, 95, 57, 0, 255, 99, 65, 3, 255, 98, 64, 1, 255, 97, 65, 0, 255, 101, 63, 6, 255, 106, 52, 4, 255, 120, 62, 4, 255, 114, 68, 1, 255, 102, 65, 2, 255, 102, 67, 3, 255, 109, 58, 1, 255, 111, 50, 0, 255, 123, 56, 4, 255, 124, 66, 4, 255, 121, 71, 0, 255, 123, 72, 5, 255, 120, 70, 2, 255, 121, 73, 3, 255, 122, 68, 1, 255, 134, 74, 6, 255, 131, 80, 3, 255, 130, 91, 4, 255, 135, 88, 7, 255, 144, 80, 2, 255, 145, 87, 4, 255, 134, 78, 1, 255, 117, 60, 8, 255, 139, 84, 5, 255, 145, 81, 6, 255, 134, 74, 8, 255, 111, 58, 1, 255, 125, 69, 4, 255, 130, 63, 6, 255, 129, 63, 5, 255, 130, 70, 7, 255, 134, 75, 7, 255, 131, 71, 13, 255, 123, 62, 5, 255, 112, 59, 10, 255, 113, 63, 12, 255, 110, 66, 8, 255, 112, 63, 6, 255, 107, 57, 6, 255, 111, 61, 8, 255, 103, 59, 4, 255, 99, 62, 8, 255, 96, 61, 15, 255, 97, 59, 20, 255, 102, 61, 13, 255, 103, 60, 11, 255, 97, 59, 16, 255, 92, 62, 9, 255, 99, 64, 11, 255, 104, 62, 28, 255, 104, 67, 24, 255, 102, 64, 17, 255, 98, 63, 16, 255, 98, 66, 18, 255, 102, 66, 18, 255, 102, 66, 16, 255, 102, 67, 27, 255, 100, 66, 25, 255, 103, 67, 19, 255, 108, 72, 22, 255, 105, 70, 18, 255, 102, 69, 22, 255, 106, 71, 28, 255, 105, 68, 31, 255, 103, 69, 36, 255, 104, 72, 27, 255, 107, 73, 37, 255, 107, 75, 28, 255, 107, 79, 23, 255, 109, 79, 38, 255, 111, 78, 29, 255, 111, 80, 28, 255, 111, 81, 36, 255, 114, 84, 27, 255, 111, 84, 30, 255, 107, 85, 35, 255, 111, 88, 26, 255, 110, 83, 28, 255, 112, 89, 31, 255, 111, 90, 32, 255, 111, 93, 33, 255, 111, 92, 31, 255, 112, 93, 33, 255, 115, 92, 44, 255, 114, 93, 38, 255, 111, 91, 38, 255, 110, 92, 44, 255, 113, 94, 27, 255, 117, 92, 33, 255, 116, 94, 30, 255, 113, 95, 27, 255, 115, 95, 36, 255, 113, 91, 39, 255, 114, 94, 33, 255, 113, 95, 33, 255, 112, 97, 23, 255, 116, 96, 34, 255, 115, 90, 40, 255, 117, 91, 34, 255, 116, 91, 32, 255, 118, 95, 24, 255, 121, 96, 24, 255, 123, 90, 26, 255, 122, 90, 29, 255, 119, 88, 26, 255, 116, 84, 28, 255, 116, 86, 25, 255, 113, 88, 19, 255, 111, 86, 16, 255, 115, 85, 14, 255, 114, 83, 23, 255, 111, 85, 15, 255, 108, 83, 23, 255, 109, 80, 18, 255, 115, 82, 14, 255, 114, 75, 11, 255, 105, 81, 7, 255, 106, 78, 18, 255, 107, 75, 12, 255, 114, 75, 7, 255, 108, 72, 17, 255, 106, 74, 12, 255, 110, 70, 13, 255, 112, 71, 13, 255, 110, 68, 8, 255, 110, 67, 12, 255, 109, 66, 12, 255, 113, 71, 7, 255, 119, 71, 7, 255, 114, 63, 5, 255, 115, 62, 6, 255, 110, 64, 5, 255, 107, 65, 8, 255, 104, 61, 7, 255, 108, 62, 5, 255, 111, 60, 2, 255, 112, 62, 4, 255, 107, 60, 8, 255, 107, 56, 9, 255, 109, 56, 8, 255, 110, 58, 7, 255, 107, 54, 4, 255, 113, 60, 8, 255, 109, 59, 6, 255, 103, 55, 4, 255, 102, 52, 5, 255, 103, 50, 5, 255, 99, 47, 1, 255, 99, 49, 2, 255, 102, 49, 5, 255, 104, 51, 7, 255, 95, 47, 1, 255, 98, 49, 1, 255, 102, 46, 4, 255, 95, 49, 5, 255, 91, 48, 3, 255, 98, 45, 6, 255, 93, 44, 5, 255, 97, 44, 4, 255, 101, 44, 4, 255, 95, 42, 1, 255, 91, 42, 4, 255, 96, 45, 5, 255, 106, 46, 4, 255, 101, 40, 1, 255, 85, 35, 4, 255, 82, 38, 3, 255, 81, 35, 4, 255, 85, 35, 3, 255, 82, 35, 5, 255, 79, 35, 4, 255, 89, 39, 6, 255, 79, 33, 4, 255, 69, 32, 2, 255, 77, 35, 1, 255, 80, 34, 0, 255, 105, 45, 3, 255, 118, 48, 5, 255, 121, 41, 3, 255, 122, 45, 4, 255, 127, 54, 1, 255, 123, 51, 1, 255, 119, 42, 2, 255, 120, 43, 5, 255, 115, 42, 7, 255, 108, 36, 0, 255, 125, 43, 5, 255, 131, 46, 5, 255, 127, 41, 1, 255, 131, 45, 4, 255, 134, 53, 3, 255, 141, 53, 1, 255, 140, 47, 3, 255, 108, 32, 1, 255, 98, 32, 6, 255, 99, 28, 1, 255, 106, 32, 5, 255, 100, 27, 5, 255, 97, 33, 2, 255, 120, 41, 5, 255, 135, 44, 5, 255, 138, 46, 4, 255, 133, 42, 0, 255, 132, 44, 5, 255, 120, 34, 3, 255, 113, 32, 6, 255, 97, 31, 2, 255, 111, 40, 3, 255, 131, 42, 8, 255, 130, 42, 4, 255, 110, 31, 2, 255, 112, 39, 4, 255, 127, 40, 4, 255, 133, 42, 0, 255, 139, 46, 2, 255, 140, 43, 1, 255, 139, 41, 0, 255, 139, 41, 6, 255, 123, 35, 3, 255, 114, 30, 2, 255, 135, 44, 1, 255, 145, 49, 4, 255, 143, 47, 3, 255, 145, 47, 2, 255, 142, 45, 0, 255, 143, 43, 0, 255, 147, 46, 2, 255, 143, 45, 1, 255, 142, 45, 2, 255, 144, 45, 3, 255, 138, 44, 3, 255, 130, 38, 2, 255, 130, 39, 6, 255, 127, 39, 3, 255, 125, 40, 1, 255, 119, 39, 2, 255, 121, 38, 3, 255, 129, 42, 4, 255, 131, 38, 4, 255, 127, 34, 0, 255, 128, 38, 2, 255, 123, 34, 1, 255, 119, 30, 2, 255, 121, 35, 2, 255, 127, 41, 3, 255, 131, 39, 4, 255, 132, 38, 2, 255, 131, 39, 0, 255, 132, 39, 4, 255, 119, 29, 4, 255, 91, 21, 2, 255, 87, 20, 4, 255, 84, 20, 0, 255, 83, 21, 0, 255, 99, 25, 4, 255, 94, 27, 2, 255, 96, 24, 2, 255, 88, 19, 0, 255, 88, 22, 3, 255, 96, 21, 3, 255, 91, 22, 3, 255, 79, 21, 3, 255, 72, 20, 3, 255, 80, 18, 3, 255, 69, 17, 2, 255, 66, 17, 5, 255, 68, 15, 3, 255, 65, 16, 1, 255, 73, 20, 3, 255, 80, 20, 1, 255, 77, 20, 1, 255, 72, 19, 1, 255, 86, 24, 5, 255, 85, 20, 2, 255, 65, 18, 2, 255, 70, 16, 2, 255, 65, 20, 5, 255, 73, 19, 7, 255, 72, 14, 2, 255, 66, 19, 1, 255, 67, 19, 2, 255, 71, 17, 1, 255, 72, 18, 2, 255, 72, 19, 5, 255, 72, 19, 4, 255, 72, 18, 0, 255, 90, 30, 3, 255, 98, 32, 0, 255, 102, 30, 0, 255, 105, 34, 5, 255, 101, 28, 1, 255, 16, 9, 2, 255, 19, 12, 4, 255, 14, 7, 0, 255, 18, 11, 3, 255, 17, 9, 2, 255, 19, 9, 2, 255, 18, 12, 3, 255, 18, 10, 1, 255, 21, 11, 1, 255, 23, 10, 1, 255, 20, 9, 0, 255, 17, 8, 0, 255, 19, 12, 1, 255, 23, 14, 5, 255, 24, 14, 5, 255, 26, 13, 4, 255, 31, 11, 4, 255, 29, 14, 3, 255, 24, 16, 3, 255, 27, 16, 2, 255, 28, 16, 5, 255, 27, 17, 6, 255, 23, 13, 3, 255, 31, 17, 6, 255, 33, 14, 4, 255, 34, 16, 3, 255, 25, 12, 1, 255, 28, 14, 4, 255, 27, 13, 3, 255, 28, 14, 3, 255, 29, 14, 6, 255, 27, 13, 5, 255, 23, 13, 1, 255, 32, 14, 1, 255, 50, 22, 6, 255, 45, 27, 3, 255, 43, 23, 1, 255, 56, 28, 4, 255, 49, 29, 1, 255, 48, 27, 5, 255, 42, 26, 2, 255, 45, 23, 4, 255, 53, 28, 6, 255, 51, 38, 20, 255, 59, 47, 33, 255, 64, 48, 35, 255, 65, 42, 15, 255, 57, 37, 12, 255, 64, 47, 19, 255, 64, 41, 5, 255, 65, 31, 4, 255, 65, 34, 10, 255, 72, 44, 12, 255, 70, 49, 6, 255, 75, 54, 20, 255, 88, 58, 31, 255, 80, 54, 15, 255, 79, 59, 14, 255, 89, 60, 16, 255, 89, 50, 8, 255, 90, 49, 3, 255, 92, 46, 7, 255, 89, 41, 4, 255, 83, 42, 2, 255, 80, 45, 5, 255, 73, 43, 4, 255, 74, 41, 3, 255, 81, 39, 0, 255, 90, 41, 1, 255, 90, 43, 2, 255, 91, 43, 5, 255, 90, 43, 6, 255, 80, 41, 2, 255, 71, 37, 0, 255, 80, 43, 1, 255, 90, 46, 4, 255, 89, 45, 7, 255, 79, 37, 3, 255, 86, 42, 3, 255, 96, 47, 5, 255, 88, 43, 4, 255, 82, 41, 5, 255, 100, 46, 5, 255, 92, 50, 2, 255, 83, 49, 4, 255, 82, 51, 2, 255, 79, 48, 0, 255, 98, 51, 4, 255, 107, 54, 4, 255, 101, 54, 3, 255, 107, 55, 1, 255, 115, 55, 3, 255, 119, 50, 1, 255, 114, 51, 2, 255, 114, 58, 6, 255, 103, 57, 1, 255, 98, 56, 4, 255, 98, 55, 4, 255, 98, 56, 5, 255, 94, 55, 2, 255, 88, 52, 0, 255, 90, 53, 4, 255, 108, 58, 7, 255, 130, 53, 5, 255, 124, 51, 1, 255, 114, 56, 3, 255, 108, 59, 7, 255, 104, 59, 2, 255, 121, 55, 0, 255, 128, 56, 5, 255, 128, 51, 6, 255, 119, 55, 0, 255, 109, 60, 2, 255, 103, 55, 3, 255, 115, 56, 4, 255, 116, 57, 7, 255, 114, 47, 3, 255, 118, 46, 3, 255, 122, 62, 4, 255, 120, 73, 1, 255, 116, 66, 0, 255, 117, 66, 0, 255, 120, 70, 3, 255, 123, 68, 3, 255, 132, 80, 1, 255, 133, 88, 3, 255, 145, 97, 0, 255, 147, 89, 1, 255, 118, 62, 3, 255, 128, 71, 4, 255, 140, 84, 5, 255, 140, 84, 7, 255, 138, 81, 2, 255, 143, 85, 4, 255, 144, 82, 7, 255, 117, 59, 7, 255, 123, 71, 9, 255, 114, 52, 4, 255, 105, 48, 5, 255, 117, 63, 3, 255, 134, 78, 1, 255, 125, 73, 7, 255, 115, 59, 5, 255, 108, 59, 4, 255, 113, 63, 9, 255, 101, 60, 7, 255, 103, 64, 14, 255, 102, 61, 7, 255, 101, 57, 13, 255, 101, 58, 15, 255, 95, 58, 7, 255, 95, 61, 9, 255, 95, 59, 7, 255, 97, 59, 8, 255, 100, 60, 15, 255, 101, 61, 16, 255, 93, 61, 20, 255, 95, 62, 25, 255, 104, 66, 14, 255, 106, 68, 17, 255, 99, 63, 18, 255, 104, 63, 14, 255, 99, 70, 16, 255, 90, 64, 15, 255, 103, 63, 23, 255, 101, 68, 25, 255, 97, 67, 26, 255, 103, 69, 22, 255, 105, 69, 22, 255, 100, 68, 19, 255, 101, 72, 22, 255, 101, 71, 27, 255, 101, 72, 27, 255, 98, 72, 40, 255, 99, 78, 22, 255, 102, 76, 32, 255, 104, 70, 43, 255, 106, 72, 35, 255, 108, 78, 42, 255, 110, 79, 35, 255, 111, 82, 32, 255, 110, 85, 31, 255, 112, 86, 30, 255, 111, 85, 36, 255, 107, 85, 36, 255, 113, 88, 36, 255, 115, 87, 31, 255, 117, 91, 36, 255, 114, 89, 37, 255, 114, 91, 41, 255, 114, 90, 37, 255, 116, 89, 35, 255, 115, 88, 50, 255, 114, 95, 35, 255, 111, 94, 31, 255, 113, 92, 41, 255, 117, 93, 39, 255, 118, 95, 34, 255, 115, 94, 35, 255, 115, 94, 39, 255, 114, 95, 30, 255, 113, 93, 33, 255, 115, 96, 25, 255, 114, 97, 25, 255, 112, 91, 41, 255, 114, 94, 38, 255, 116, 92, 37, 255, 116, 93, 27, 255, 119, 98, 9, 255, 121, 94, 27, 255, 120, 86, 43, 255, 120, 91, 26, 255, 119, 92, 18, 255, 115, 85, 28, 255, 114, 80, 32, 255, 116, 83, 30, 255, 113, 86, 18, 255, 111, 83, 26, 255, 116, 85, 10, 255, 118, 85, 23, 255, 111, 80, 32, 255, 108, 80, 27, 255, 112, 81, 22, 255, 118, 80, 20, 255, 117, 77, 19, 255, 108, 80, 9, 255, 106, 79, 20, 255, 110, 74, 20, 255, 112, 71, 9, 255, 107, 71, 10, 255, 106, 74, 14, 255, 108, 68, 19, 255, 110, 66, 22, 255, 111, 70, 18, 255, 108, 68, 14, 255, 106, 66, 17, 255, 109, 67, 9, 255, 116, 64, 8, 255, 116, 62, 9, 255, 117, 64, 10, 255, 109, 62, 2, 255, 110, 66, 2, 255, 112, 66, 2, 255, 105, 58, 8, 255, 108, 57, 9, 255, 109, 59, 4, 255, 104, 58, 5, 255, 110, 57, 9, 255, 115, 59, 6, 255, 116, 58, 5, 255, 117, 55, 3, 255, 111, 56, 2, 255, 102, 54, 2, 255, 99, 55, 3, 255, 107, 55, 8, 255, 111, 49, 6, 255, 102, 50, 3, 255, 102, 52, 4, 255, 104, 51, 3, 255, 103, 51, 4, 255, 96, 49, 3, 255, 101, 51, 6, 255, 95, 42, 1, 255, 95, 46, 4, 255, 95, 47, 2, 255, 94, 48, 3, 255, 95, 43, 4, 255, 99, 40, 3, 255, 92, 45, 3, 255, 91, 43, 1, 255, 87, 43, 3, 255, 90, 43, 4, 255, 91, 42, 4, 255, 88, 40, 4, 255, 83, 37, 2, 255, 81, 36, 3, 255, 87, 34, 9, 255, 83, 34, 3, 255, 81, 35, 4, 255, 81, 38, 5, 255, 80, 39, 2, 255, 82, 35, 7, 255, 69, 35, 4, 255, 77, 34, 2, 255, 86, 36, 5, 255, 106, 42, 1, 255, 121, 49, 5, 255, 121, 45, 3, 255, 129, 50, 6, 255, 123, 51, 0, 255, 121, 49, 1, 255, 127, 46, 4, 255, 126, 43, 2, 255, 121, 44, 5, 255, 110, 36, 2, 255, 120, 38, 2, 255, 125, 45, 1, 255, 122, 44, 4, 255, 118, 39, 3, 255, 129, 46, 5, 255, 142, 46, 3, 255, 130, 39, 4, 255, 109, 33, 4, 255, 98, 28, 3, 255, 102, 27, 1, 255, 99, 24, 4, 255, 92, 28, 4, 255, 90, 33, 2, 255, 105, 33, 2, 255, 116, 34, 7, 255, 114, 32, 3, 255, 126, 37, 2, 255, 123, 37, 2, 255, 115, 32, 0, 255, 113, 29, 0, 255, 108, 32, 3, 255, 122, 37, 1, 255, 139, 42, 6, 255, 127, 37, 2, 255, 103, 29, 2, 255, 101, 26, 3, 255, 121, 32, 6, 255, 127, 37, 4, 255, 128, 42, 3, 255, 129, 39, 4, 255, 120, 31, 2, 255, 125, 33, 1, 255, 121, 36, 7, 255, 118, 39, 3, 255, 138, 45, 4, 255, 143, 45, 1, 255, 141, 47, 6, 255, 144, 49, 0, 255, 140, 44, 0, 255, 145, 47, 3, 255, 145, 46, 2, 255, 142, 45, 2, 255, 140, 44, 1, 255, 141, 41, 2, 255, 136, 43, 2, 255, 132, 41, 1, 255, 134, 41, 2, 255, 125, 33, 0, 255, 125, 35, 1, 255, 125, 38, 1, 255, 125, 36, 0, 255, 130, 37, 3, 255, 130, 36, 2, 255, 126, 35, 0, 255, 128, 39, 4, 255, 126, 37, 4, 255, 121, 30, 1, 255, 122, 34, 1, 255, 128, 43, 4, 255, 133, 41, 5, 255, 134, 40, 5, 255, 131, 42, 3, 255, 130, 38, 6, 255, 118, 30, 2, 255, 94, 25, 2, 255, 84, 20, 5, 255, 93, 26, 4, 255, 95, 25, 3, 255, 97, 20, 1, 255, 111, 35, 4, 255, 117, 37, 3, 255, 105, 29, 4, 255, 88, 21, 3, 255, 96, 20, 6, 255, 96, 22, 1, 255, 85, 25, 1, 255, 80, 21, 6, 255, 88, 24, 4, 255, 75, 22, 2, 255, 59, 15, 1, 255, 66, 16, 2, 255, 66, 19, 4, 255, 64, 18, 2, 255, 75, 20, 1, 255, 75, 23, 2, 255, 67, 18, 2, 255, 70, 17, 3, 255, 70, 15, 0, 255, 64, 19, 5, 255, 69, 19, 5, 255, 58, 13, 0, 255, 67, 15, 4, 255, 70, 16, 3, 255, 63, 16, 0, 255, 67, 17, 3, 255, 74, 16, 3, 255, 74, 16, 2, 255, 71, 17, 2, 255, 69, 18, 4, 255, 71, 18, 4, 255, 77, 21, 0, 255, 86, 27, 2, 255, 90, 25, 4, 255, 89, 25, 5, 255, 81, 19, 1, 255, 16, 8, 2, 255, 18, 10, 2, 255, 19, 9, 1, 255, 21, 10, 4, 255, 19, 10, 3, 255, 16, 8, 3, 255, 19, 11, 3, 255, 19, 11, 0, 255, 21, 13, 2, 255, 16, 9, 1, 255, 18, 10, 5, 255, 24, 13, 4, 255, 27, 13, 3, 255, 25, 14, 6, 255, 20, 12, 2, 255, 20, 11, 1, 255, 26, 13, 3, 255, 27, 11, 3, 255, 23, 14, 2, 255, 20, 13, 1, 255, 20, 12, 2, 255, 24, 14, 4, 255, 27, 13, 4, 255, 27, 10, 1, 255, 30, 12, 2, 255, 31, 16, 5, 255, 26, 14, 2, 255, 31, 17, 5, 255, 32, 18, 5, 255, 30, 14, 2, 255, 33, 16, 2, 255, 33, 17, 3, 255, 31, 16, 3, 255, 45, 20, 6, 255, 42, 23, 2, 255, 40, 20, 1, 255, 55, 26, 8, 255, 49, 26, 4, 255, 41, 26, 1, 255, 43, 23, 4, 255, 45, 25, 7, 255, 43, 24, 4, 255, 47, 22, 5, 255, 57, 33, 9, 255, 54, 41, 26, 255, 59, 51, 22, 255, 75, 51, 12, 255, 69, 44, 11, 255, 67, 49, 11, 255, 67, 43, 7, 255, 63, 32, 2, 255, 53, 33, 4, 255, 66, 38, 11, 255, 76, 44, 12, 255, 74, 53, 5, 255, 77, 59, 13, 255, 79, 56, 9, 255, 85, 51, 7, 255, 91, 48, 11, 255, 88, 44, 7, 255, 89, 46, 3, 255, 93, 43, 3, 255, 92, 39, 2, 255, 84, 41, 2, 255, 72, 38, 1, 255, 72, 42, 4, 255, 71, 38, 0, 255, 87, 42, 5, 255, 96, 44, 4, 255, 91, 42, 1, 255, 86, 39, 1, 255, 78, 39, 3, 255, 75, 43, 6, 255, 74, 41, 2, 255, 73, 41, 3, 255, 69, 38, 2, 255, 75, 39, 1, 255, 75, 43, 0, 255, 75, 41, 7, 255, 77, 40, 2, 255, 83, 42, 2, 255, 86, 44, 5, 255, 85, 50, 0, 255, 84, 52, 0, 255, 83, 49, 5, 255, 79, 50, 3, 255, 81, 47, 3, 255, 94, 46, 3, 255, 99, 55, 5, 255, 91, 56, 5, 255, 90, 55, 2, 255, 94, 54, 2, 255, 101, 57, 6, 255, 96, 52, 1, 255, 94, 54, 1, 255, 93, 57, 0, 255, 97, 56, 5, 255, 93, 50, 1, 255, 91, 53, 4, 255, 88, 51, 2, 255, 94, 52, 4, 255, 86, 51, 2, 255, 104, 53, 2, 255, 116, 55, 4, 255, 107, 54, 3, 255, 107, 57, 5, 255, 98, 56, 1, 255, 96, 57, 1, 255, 110, 58, 6, 255, 111, 62, 5, 255, 102, 62, 1, 255, 106, 62, 3, 255, 117, 59, 4, 255, 119, 57, 2, 255, 112, 64, 0, 255, 115, 69, 3, 255, 118, 65, 4, 255, 114, 56, 0, 255, 118, 59, 6, 255, 119, 60, 9, 255, 113, 51, 3, 255, 113, 48, 2, 255, 127, 67, 4, 255, 129, 80, 9, 255, 128, 86, 3, 255, 143, 91, 4, 255, 141, 77, 2, 255, 125, 62, 2, 255, 126, 63, 6, 255, 137, 78, 4, 255, 142, 82, 3, 255, 136, 75, 5, 255, 148, 89, 8, 255, 154, 94, 4, 255, 119, 53, 9, 255, 116, 58, 11, 255, 143, 92, 5, 255, 141, 87, 3, 255, 127, 73, 9, 255, 120, 70, 15, 255, 115, 67, 4, 255, 113, 63, 3, 255, 108, 66, 6, 255, 100, 61, 7, 255, 93, 56, 5, 255, 97, 58, 12, 255, 95, 57, 15, 255, 91, 59, 9, 255, 94, 59, 9, 255, 97, 57, 10, 255, 93, 56, 12, 255, 88, 57, 9, 255, 93, 58, 7, 255, 100, 59, 15, 255, 103, 63, 18, 255, 98, 64, 11, 255, 98, 63, 15, 255, 93, 62, 13, 255, 93, 63, 18, 255, 99, 60, 23, 255, 101, 66, 16, 255, 95, 67, 14, 255, 93, 65, 14, 255, 99, 67, 18, 255, 97, 67, 25, 255, 98, 66, 23, 255, 101, 67, 32, 255, 105, 72, 25, 255, 106, 74, 25, 255, 97, 66, 29, 255, 96, 71, 28, 255, 98, 73, 28, 255, 102, 76, 29, 255, 108, 79, 17, 255, 103, 77, 21, 255, 102, 80, 20, 255, 100, 75, 31, 255, 98, 76, 24, 255, 97, 81, 36, 255, 103, 81, 38, 255, 104, 84, 29, 255, 104, 84, 30, 255, 109, 83, 43, 255, 113, 83, 43, 255, 110, 83, 39, 255, 114, 88, 42, 255, 113, 89, 34, 255, 114, 92, 36, 255, 112, 91, 36, 255, 113, 92, 39, 255, 114, 92, 36, 255, 115, 93, 33, 255, 117, 92, 35, 255, 119, 96, 37, 255, 117, 94, 39, 255, 114, 91, 44, 255, 113, 90, 45, 255, 114, 94, 43, 255, 116, 95, 43, 255, 116, 97, 41, 255, 113, 94, 32, 255, 116, 94, 40, 255, 113, 92, 33, 255, 115, 93, 40, 255, 115, 93, 34, 255, 121, 93, 37, 255, 122, 92, 43, 255, 118, 94, 23, 255, 117, 94, 29, 255, 116, 92, 30, 255, 119, 97, 16, 255, 115, 92, 30, 255, 113, 92, 19, 255, 114, 87, 30, 255, 117, 84, 37, 255, 117, 86, 19, 255, 114, 85, 23, 255, 112, 86, 24, 255, 111, 83, 21, 255, 111, 81, 15, 255, 117, 83, 14, 255, 119, 82, 13, 255, 115, 80, 20, 255, 105, 75, 27, 255, 105, 77, 19, 255, 118, 79, 13, 255, 116, 76, 17, 255, 112, 71, 16, 255, 105, 70, 21, 255, 105, 71, 12, 255, 108, 70, 17, 255, 109, 71, 9, 255, 109, 68, 14, 255, 107, 69, 19, 255, 101, 67, 9, 255, 107, 68, 15, 255, 108, 66, 14, 255, 111, 63, 8, 255, 115, 66, 6, 255, 110, 62, 3, 255, 107, 62, 7, 255, 110, 61, 8, 255, 116, 63, 1, 255, 106, 59, 13, 255, 102, 60, 16, 255, 105, 61, 3, 255, 106, 57, 5, 255, 107, 57, 9, 255, 112, 57, 2, 255, 114, 53, 2, 255, 112, 58, 5, 255, 108, 56, 4, 255, 105, 51, 4, 255, 108, 49, 3, 255, 111, 53, 6, 255, 109, 55, 7, 255, 99, 49, 3, 255, 102, 49, 3, 255, 100, 49, 1, 255, 97, 49, 0, 255, 95, 45, 1, 255, 97, 43, 5, 255, 98, 41, 5, 255, 100, 47, 6, 255, 97, 46, 0, 255, 96, 47, 1, 255, 97, 45, 4, 255, 97, 43, 6, 255, 89, 44, 4, 255, 96, 40, 2, 255, 94, 41, 4, 255, 86, 37, 3, 255, 85, 36, 4, 255, 87, 39, 6, 255, 85, 41, 3, 255, 82, 37, 3, 255, 85, 37, 3, 255, 86, 36, 5, 255, 81, 35, 1, 255, 82, 39, 3, 255, 82, 35, 4, 255, 84, 36, 2, 255, 80, 38, 2, 255, 80, 33, 1, 255, 87, 36, 5, 255, 102, 39, 4, 255, 117, 49, 2, 255, 124, 50, 4, 255, 124, 48, 1, 255, 126, 51, 2, 255, 127, 48, 2, 255, 132, 47, 4, 255, 137, 47, 6, 255, 133, 43, 3, 255, 129, 43, 1, 255, 133, 45, 3, 255, 125, 43, 1, 255, 123, 42, 3, 255, 123, 42, 4, 255, 119, 42, 3, 255, 122, 40, 2, 255, 116, 40, 2, 255, 102, 34, 5, 255, 91, 26, 2, 255, 92, 28, 2, 255, 86, 21, 6, 255, 83, 22, 2, 255, 94, 29, 5, 255, 99, 28, 1, 255, 94, 30, 1, 255, 92, 30, 0, 255, 116, 35, 4, 255, 117, 33, 4, 255, 99, 25, 3, 255, 98, 27, 5, 255, 98, 27, 7, 255, 116, 39, 9, 255, 125, 40, 1, 255, 118, 34, 1, 255, 110, 33, 5, 255, 103, 27, 2, 255, 108, 34, 4, 255, 115, 33, 2, 255, 121, 33, 0, 255, 119, 36, 4, 255, 108, 31, 1, 255, 124, 39, 4, 255, 125, 43, 3, 255, 126, 43, 0, 255, 136, 38, 0, 255, 138, 42, 2, 255, 138, 46, 3, 255, 147, 47, 2, 255, 142, 43, 2, 255, 145, 43, 3, 255, 142, 42, 2, 255, 139, 43, 3, 255, 136, 41, 2, 255, 133, 37, 0, 255, 134, 40, 3, 255, 133, 40, 1, 255, 133, 39, 2, 255, 127, 35, 3, 255, 124, 35, 5, 255, 121, 36, 1, 255, 127, 38, 2, 255, 130, 33, 0, 255, 127, 33, 2, 255, 125, 36, 2, 255, 124, 38, 1, 255, 125, 36, 1, 255, 127, 32, 3, 255, 126, 37, 2, 255, 128, 40, 0, 255, 134, 37, 0, 255, 136, 37, 2, 255, 129, 41, 1, 255, 123, 32, 3, 255, 124, 30, 2, 255, 104, 25, 6, 255, 84, 15, 2, 255, 97, 23, 1, 255, 103, 27, 4, 255, 99, 26, 2, 255, 111, 35, 1, 255, 125, 37, 1, 255, 122, 37, 6, 255, 93, 25, 2, 255, 103, 30, 4, 255, 106, 30, 1, 255, 97, 22, 2, 255, 87, 24, 2, 255, 102, 26, 1, 255, 102, 28, 6, 255, 65, 21, 3, 255, 55, 17, 0, 255, 64, 18, 2, 255, 62, 17, 4, 255, 66, 19, 2, 255, 70, 23, 0, 255, 65, 18, 3, 255, 64, 16, 2, 255, 67, 18, 3, 255, 64, 15, 3, 255, 59, 16, 2, 255, 60, 13, 3, 255, 62, 12, 2, 255, 66, 17, 4, 255, 67, 18, 3, 255, 63, 16, 1, 255, 65, 15, 2, 255, 68, 16, 1, 255, 66, 17, 2, 255, 58, 12, 1, 255, 57, 14, 3, 255, 64, 20, 4, 255, 67, 20, 1, 255, 68, 19, 3, 255, 63, 17, 2, 255, 59, 16, 1, 255, 16, 8, 2, 255, 17, 8, 1, 255, 18, 10, 2, 255, 17, 9, 1, 255, 15, 8, 1, 255, 18, 8, 4, 255, 15, 8, 2, 255, 17, 10, 1, 255, 20, 10, 3, 255, 18, 8, 1, 255, 23, 12, 5, 255, 23, 10, 2, 255, 28, 12, 4, 255, 33, 15, 4, 255, 29, 17, 2, 255, 26, 14, 2, 255, 24, 12, 1, 255, 29, 17, 3, 255, 21, 12, 4, 255, 20, 11, 3, 255, 26, 16, 6, 255, 21, 12, 2, 255, 24, 13, 2, 255, 28, 14, 3, 255, 32, 16, 6, 255, 34, 16, 3, 255, 30, 15, 0, 255, 24, 13, 2, 255, 19, 13, 2, 255, 26, 16, 3, 255, 35, 19, 2, 255, 40, 19, 1, 255, 27, 12, 2, 255, 41, 20, 4, 255, 37, 20, 0, 255, 40, 23, 4, 255, 47, 18, 7, 255, 34, 17, 1, 255, 36, 21, 4, 255, 42, 20, 7, 255, 41, 23, 8, 255, 39, 21, 2, 255, 52, 26, 6, 255, 52, 26, 2, 255, 59, 33, 14, 255, 63, 43, 18, 255, 75, 50, 13, 255, 78, 45, 16, 255, 69, 44, 13, 255, 60, 41, 8, 255, 62, 39, 3, 255, 58, 39, 4, 255, 62, 42, 6, 255, 72, 46, 8, 255, 72, 47, 8, 255, 71, 53, 5, 255, 80, 55, 2, 255, 88, 44, 1, 255, 87, 40, 5, 255, 75, 45, 4, 255, 75, 43, 1, 255, 85, 39, 3, 255, 77, 37, 2, 255, 78, 39, 5, 255, 80, 36, 1, 255, 83, 37, 4, 255, 83, 39, 1, 255, 83, 44, 2, 255, 77, 42, 7, 255, 73, 37, 5, 255, 74, 38, 2, 255, 70, 39, 1, 255, 71, 39, 2, 255, 73, 38, 2, 255, 67, 39, 3, 255, 69, 38, 3, 255, 77, 38, 3, 255, 74, 40, 1, 255, 75, 38, 3, 255, 74, 39, 2, 255, 80, 46, 4, 255, 84, 45, 3, 255, 85, 46, 1, 255, 82, 51, 3, 255, 80, 49, 1, 255, 81, 49, 1, 255, 85, 51, 3, 255, 92, 51, 3, 255, 89, 53, 1, 255, 87, 56, 5, 255, 88, 55, 4, 255, 87, 55, 2, 255, 94, 60, 6, 255, 97, 57, 4, 255, 94, 56, 4, 255, 95, 55, 5, 255, 90, 48, 3, 255, 84, 49, 2, 255, 84, 49, 2, 255, 83, 51, 3, 255, 87, 49, 1, 255, 87, 53, 3, 255, 99, 54, 5, 255, 100, 53, 2, 255, 96, 58, 1, 255, 95, 58, 2, 255, 95, 57, 3, 255, 96, 56, 3, 255, 95, 60, 3, 255, 99, 62, 2, 255, 103, 58, 3, 255, 113, 53, 3, 255, 116, 49, 0, 255, 112, 59, 1, 255, 112, 65, 1, 255, 113, 64, 4, 255, 116, 69, 1, 255, 118, 73, 0, 255, 117, 62, 3, 255, 112, 44, 4, 255, 110, 43, 2, 255, 119, 55, 4, 255, 131, 76, 3, 255, 135, 85, 3, 255, 138, 92, 2, 255, 135, 82, 1, 255, 112, 47, 6, 255, 110, 50, 10, 255, 108, 48, 4, 255, 117, 50, 4, 255, 132, 71, 2, 255, 138, 82, 4, 255, 136, 79, 8, 255, 137, 73, 2, 255, 122, 65, 4, 255, 112, 60, 3, 255, 116, 60, 1, 255, 113, 59, 8, 255, 105, 55, 8, 255, 98, 52, 10, 255, 95, 53, 6, 255, 94, 55, 11, 255, 86, 54, 10, 255, 89, 51, 12, 255, 85, 54, 2, 255, 94, 56, 13, 255, 92, 54, 12, 255, 85, 55, 13, 255, 93, 57, 13, 255, 92, 53, 5, 255, 91, 60, 21, 255, 99, 59, 13, 255, 113, 63, 9, 255, 106, 59, 13, 255, 103, 64, 16, 255, 94, 60, 20, 255, 94, 62, 17, 255, 98, 63, 14, 255, 95, 63, 16, 255, 94, 64, 20, 255, 97, 65, 10, 255, 97, 71, 13, 255, 93, 62, 25, 255, 101, 66, 21, 255, 102, 67, 18, 255, 101, 67, 21, 255, 108, 70, 21, 255, 112, 71, 34, 255, 99, 72, 24, 255, 97, 71, 30, 255, 98, 72, 30, 255, 96, 75, 21, 255, 101, 73, 26, 255, 96, 77, 19, 255, 95, 78, 25, 255, 97, 76, 42, 255, 97, 75, 37, 255, 96, 81, 30, 255, 97, 81, 30, 255, 105, 81, 34, 255, 103, 80, 38, 255, 103, 81, 39, 255, 105, 89, 27, 255, 109, 85, 35, 255, 114, 86, 38, 255, 107, 90, 29, 255, 107, 88, 34, 255, 111, 89, 35, 255, 110, 94, 36, 255, 109, 91, 39, 255, 114, 92, 44, 255, 113, 92, 35, 255, 115, 92, 38, 255, 115, 93, 41, 255, 115, 95, 36, 255, 115, 96, 41, 255, 116, 96, 44, 255, 117, 99, 37, 255, 113, 95, 41, 255, 113, 96, 36, 255, 118, 98, 38, 255, 117, 96, 27, 255, 117, 96, 44, 255, 115, 94, 34, 255, 120, 95, 27, 255, 120, 94, 39, 255, 119, 92, 38, 255, 121, 92, 32, 255, 121, 90, 35, 255, 117, 90, 31, 255, 113, 94, 21, 255, 114, 90, 26, 255, 116, 89, 20, 255, 116, 87, 25, 255, 116, 86, 26, 255, 114, 86, 24, 255, 109, 81, 30, 255, 111, 80, 24, 255, 116, 82, 23, 255, 111, 81, 20, 255, 114, 82, 20, 255, 118, 79, 23, 255, 114, 76, 21, 255, 108, 76, 32, 255, 107, 76, 22, 255, 111, 75, 14, 255, 111, 75, 8, 255, 110, 74, 12, 255, 108, 71, 23, 255, 109, 73, 14, 255, 106, 68, 15, 255, 107, 70, 16, 255, 108, 70, 6, 255, 108, 67, 8, 255, 107, 63, 16, 255, 108, 66, 18, 255, 103, 66, 8, 255, 108, 66, 16, 255, 111, 63, 11, 255, 107, 62, 9, 255, 107, 61, 8, 255, 106, 64, 7, 255, 110, 60, 6, 255, 104, 60, 4, 255, 103, 63, 5, 255, 107, 61, 7, 255, 108, 56, 5, 255, 105, 54, 4, 255, 105, 54, 6, 255, 103, 53, 3, 255, 102, 55, 1, 255, 106, 56, 9, 255, 107, 52, 10, 255, 107, 47, 4, 255, 108, 52, 4, 255, 106, 55, 3, 255, 96, 50, 1, 255, 101, 49, 3, 255, 96, 49, 2, 255, 94, 49, 3, 255, 96, 46, 5, 255, 91, 44, 4, 255, 96, 47, 6, 255, 99, 42, 4, 255, 99, 43, 5, 255, 94, 43, 2, 255, 99, 47, 5, 255, 92, 41, 2, 255, 88, 41, 3, 255, 96, 40, 2, 255, 99, 41, 7, 255, 94, 38, 8, 255, 82, 35, 5, 255, 85, 42, 8, 255, 86, 37, 3, 255, 75, 36, 0, 255, 80, 40, 3, 255, 88, 40, 5, 255, 85, 36, 2, 255, 83, 38, 6, 255, 80, 35, 5, 255, 83, 38, 2, 255, 88, 39, 3, 255, 80, 31, 0, 255, 85, 31, 4, 255, 96, 35, 5, 255, 110, 41, 3, 255, 123, 48, 6, 255, 124, 46, 1, 255, 126, 49, 1, 255, 132, 53, 2, 255, 127, 45, 1, 255, 129, 51, 2, 255, 133, 50, 3, 255, 123, 41, 1, 255, 118, 35, 1, 255, 119, 29, 3, 255, 126, 40, 3, 255, 119, 39, 4, 255, 112, 36, 4, 255, 105, 27, 0, 255, 109, 33, 2, 255, 104, 34, 7, 255, 95, 28, 2, 255, 92, 29, 4, 255, 80, 24, 5, 255, 84, 27, 4, 255, 92, 27, 4, 255, 92, 26, 2, 255, 88, 29, 1, 255, 90, 31, 2, 255, 101, 30, 3, 255, 106, 35, 5, 255, 94, 29, 1, 255, 95, 27, 5, 255, 102, 29, 4, 255, 118, 38, 8, 255, 112, 28, 2, 255, 107, 28, 0, 255, 103, 32, 0, 255, 109, 34, 4, 255, 108, 36, 2, 255, 108, 32, 0, 255, 124, 34, 3, 255, 125, 39, 1, 255, 123, 36, 1, 255, 130, 34, 3, 255, 132, 37, 3, 255, 132, 38, 2, 255, 137, 41, 2, 255, 136, 41, 0, 255, 137, 41, 1, 255, 141, 42, 4, 255, 142, 46, 3, 255, 138, 44, 3, 255, 140, 42, 3, 255, 137, 38, 1, 255, 135, 40, 3, 255, 132, 36, 4, 255, 129, 37, 4, 255, 132, 37, 3, 255, 132, 36, 1, 255, 122, 33, 2, 255, 113, 29, 1, 255, 114, 29, 1, 255, 125, 36, 4, 255, 123, 36, 2, 255, 118, 34, 1, 255, 122, 36, 4, 255, 123, 33, 1, 255, 128, 34, 2, 255, 129, 34, 2, 255, 123, 34, 1, 255, 127, 37, 2, 255, 129, 38, 2, 255, 129, 38, 1, 255, 128, 39, 1, 255, 125, 35, 2, 255, 123, 36, 2, 255, 120, 29, 4, 255, 98, 21, 3, 255, 79, 20, 0, 255, 92, 23, 4, 255, 98, 23, 2, 255, 108, 33, 4, 255, 116, 35, 2, 255, 122, 32, 3, 255, 107, 22, 3, 255, 98, 25, 2, 255, 116, 37, 6, 255, 112, 30, 2, 255, 101, 27, 3, 255, 105, 28, 2, 255, 119, 31, 4, 255, 90, 24, 2, 255, 63, 17, 2, 255, 69, 18, 8, 255, 68, 16, 1, 255, 69, 16, 1, 255, 68, 21, 2, 255, 66, 17, 4, 255, 59, 17, 7, 255, 53, 10, 3, 255, 53, 17, 4, 255, 54, 14, 5, 255, 56, 14, 3, 255, 58, 14, 2, 255, 56, 12, 0, 255, 61, 13, 1, 255, 62, 14, 1, 255, 63, 16, 1, 255, 67, 17, 3, 255, 63, 15, 1, 255, 56, 14, 1, 255, 56, 12, 2, 255, 60, 12, 4, 255, 54, 12, 3, 255, 49, 11, 2, 255, 52, 14, 2, 255, 55, 14, 2, 255, 17, 10, 3, 255, 17, 8, 2, 255, 17, 9, 3, 255, 16, 10, 4, 255, 15, 7, 2, 255, 18, 8, 3, 255, 16, 7, 1, 255, 17, 9, 0, 255, 19, 8, 1, 255, 26, 13, 4, 255, 25, 12, 2, 255, 28, 14, 5, 255, 30, 16, 6, 255, 33, 15, 3, 255, 32, 16, 3, 255, 34, 20, 8, 255, 29, 14, 2, 255, 29, 16, 4, 255, 21, 12, 4, 255, 19, 11, 5, 255, 20, 11, 2, 255, 28, 15, 3, 255, 32, 16, 2, 255, 29, 15, 1, 255, 22, 12, 3, 255, 27, 15, 4, 255, 32, 15, 1, 255, 27, 14, 3, 255, 25, 15, 3, 255, 28, 18, 3, 255, 30, 16, 3, 255, 30, 15, 3, 255, 26, 14, 4, 255, 39, 21, 5, 255, 42, 20, 0, 255, 38, 19, 1, 255, 36, 18, 4, 255, 37, 19, 6, 255, 39, 20, 5, 255, 38, 19, 2, 255, 39, 22, 0, 255, 45, 27, 2, 255, 58, 34, 7, 255, 51, 26, 2, 255, 49, 24, 2, 255, 53, 37, 8, 255, 65, 42, 10, 255, 65, 43, 8, 255, 60, 41, 8, 255, 62, 41, 2, 255, 65, 39, 5, 255, 63, 34, 5, 255, 70, 43, 5, 255, 79, 45, 13, 255, 78, 42, 9, 255, 78, 45, 2, 255, 81, 49, 6, 255, 81, 43, 2, 255, 76, 35, 3, 255, 69, 45, 5, 255, 78, 45, 3, 255, 86, 38, 8, 255, 74, 36, 3, 255, 72, 39, 4, 255, 69, 42, 4, 255, 71, 38, 5, 255, 76, 40, 3, 255, 74, 41, 2, 255, 71, 37, 6, 255, 73, 34, 4, 255, 73, 35, 3, 255, 68, 33, 3, 255, 71, 36, 4, 255, 72, 37, 2, 255, 66, 38, 0, 255, 69, 40, 1, 255, 80, 41, 3, 255, 81, 40, 4, 255, 78, 38, 2, 255, 76, 40, 0, 255, 79, 46, 3, 255, 80, 47, 1, 255, 84, 46, 2, 255, 84, 50, 4, 255, 81, 48, 2, 255, 82, 48, 1, 255, 86, 51, 3, 255, 90, 52, 3, 255, 87, 50, 1, 255, 86, 51, 0, 255, 89, 53, 1, 255, 92, 56, 3, 255, 92, 57, 3, 255, 90, 54, 1, 255, 89, 52, 2, 255, 88, 51, 4, 255, 83, 48, 4, 255, 76, 48, 2, 255, 82, 47, 3, 255, 84, 52, 4, 255, 92, 53, 4, 255, 93, 53, 2, 255, 90, 52, 2, 255, 94, 53, 2, 255, 98, 58, 3, 255, 97, 56, 1, 255, 99, 58, 5, 255, 101, 59, 3, 255, 98, 58, 0, 255, 101, 60, 3, 255, 111, 49, 3, 255, 120, 41, 2, 255, 119, 56, 8, 255, 110, 62, 2, 255, 111, 67, 1, 255, 112, 65, 4, 255, 117, 65, 5, 255, 103, 63, 3, 255, 104, 55, 7, 255, 120, 57, 9, 255, 129, 75, 2, 255, 135, 86, 3, 255, 137, 82, 3, 255, 140, 79, 0, 255, 145, 85, 5, 255, 128, 75, 2, 255, 108, 48, 3, 255, 120, 51, 7, 255, 108, 46, 5, 255, 108, 50, 3, 255, 101, 48, 4, 255, 98, 51, 8, 255, 94, 55, 5, 255, 87, 53, 6, 255, 88, 51, 4, 255, 88, 49, 9, 255, 92, 52, 16, 255, 100, 53, 4, 255, 109, 56, 6, 255, 97, 52, 7, 255, 88, 55, 9, 255, 85, 49, 7, 255, 93, 51, 8, 255, 94, 56, 4, 255, 99, 54, 12, 255, 95, 52, 12, 255, 89, 54, 3, 255, 94, 60, 13, 255, 92, 54, 13, 255, 97, 62, 8, 255, 85, 62, 8, 255, 94, 61, 7, 255, 100, 62, 14, 255, 90, 59, 27, 255, 88, 59, 13, 255, 92, 60, 12, 255, 97, 62, 19, 255, 93, 58, 23, 255, 90, 63, 22, 255, 86, 64, 18, 255, 84, 68, 21, 255, 88, 65, 27, 255, 92, 61, 28, 255, 93, 60, 23, 255, 99, 65, 19, 255, 107, 69, 26, 255, 100, 70, 11, 255, 104, 73, 18, 255, 100, 70, 23, 255, 94, 70, 25, 255, 96, 72, 22, 255, 96, 74, 27, 255, 91, 75, 27, 255, 95, 74, 31, 255, 99, 73, 33, 255, 96, 80, 29, 255, 96, 79, 30, 255, 103, 76, 34, 255, 103, 81, 32, 255, 107, 87, 28, 255, 100, 80, 36, 255, 98, 81, 35, 255, 107, 89, 30, 255, 110, 90, 39, 255, 110, 92, 32, 255, 111, 92, 41, 255, 108, 88, 45, 255, 111, 92, 35, 255, 107, 94, 37, 255, 106, 91, 45, 255, 114, 93, 43, 255, 113, 96, 36, 255, 115, 97, 44, 255, 113, 94, 42, 255, 114, 95, 37, 255, 118, 98, 42, 255, 114, 98, 26, 255, 116, 98, 30, 255, 113, 96, 40, 255, 116, 96, 38, 255, 120, 97, 41, 255, 116, 102, 21, 255, 116, 102, 30, 255, 114, 96, 33, 255, 118, 95, 39, 255, 123, 93, 35, 255, 121, 93, 35, 255, 121, 91, 39, 255, 121, 90, 29, 255, 117, 92, 17, 255, 113, 90, 35, 255, 112, 93, 21, 255, 114, 91, 27, 255, 115, 89, 26, 255, 114, 85, 23, 255, 111, 85, 26, 255, 113, 87, 25, 255, 113, 83, 26, 255, 114, 81, 24, 255, 109, 80, 11, 255, 111, 78, 31, 255, 109, 76, 22, 255, 110, 79, 18, 255, 109, 79, 27, 255, 106, 73, 25, 255, 107, 73, 17, 255, 108, 74, 14, 255, 108, 72, 21, 255, 107, 70, 17, 255, 115, 76, 12, 255, 117, 74, 13, 255, 113, 71, 19, 255, 110, 69, 13, 255, 111, 68, 7, 255, 111, 64, 11, 255, 107, 65, 14, 255, 102, 64, 8, 255, 108, 61, 14, 255, 112, 61, 13, 255, 112, 62, 11, 255, 109, 63, 8, 255, 106, 64, 7, 255, 106, 58, 7, 255, 109, 62, 8, 255, 105, 59, 4, 255, 105, 55, 7, 255, 111, 58, 7, 255, 108, 54, 2, 255, 109, 57, 7, 255, 104, 55, 4, 255, 99, 51, 5, 255, 99, 52, 9, 255, 98, 47, 9, 255, 102, 47, 7, 255, 105, 53, 6, 255, 101, 51, 2, 255, 100, 49, 3, 255, 103, 49, 3, 255, 96, 48, 2, 255, 93, 48, 3, 255, 97, 45, 3, 255, 95, 45, 2, 255, 94, 44, 2, 255, 96, 41, 2, 255, 96, 42, 0, 255, 94, 43, 4, 255, 95, 44, 6, 255, 92, 42, 2, 255, 89, 43, 1, 255, 93, 43, 3, 255, 95, 42, 3, 255, 90, 39, 2, 255, 81, 36, 1, 255, 85, 40, 8, 255, 84, 35, 4, 255, 80, 37, 4, 255, 81, 37, 2, 255, 84, 35, 1, 255, 83, 34, 3, 255, 82, 35, 6, 255, 78, 34, 3, 255, 83, 35, 5, 255, 85, 34, 4, 255, 79, 34, 1, 255, 84, 33, 1, 255, 99, 36, 4, 255, 107, 36, 4, 255, 117, 44, 10, 255, 127, 47, 6, 255, 128, 47, 0, 255, 131, 51, 6, 255, 132, 47, 6, 255, 137, 48, 3, 255, 136, 50, 3, 255, 120, 40, 5, 255, 108, 31, 6, 255, 104, 32, 5, 255, 102, 33, 0, 255, 104, 32, 4, 255, 109, 35, 9, 255, 104, 29, 3, 255, 112, 34, 3, 255, 112, 33, 3, 255, 100, 34, 3, 255, 102, 33, 5, 255, 95, 31, 0, 255, 101, 32, 2, 255, 98, 33, 4, 255, 90, 31, 1, 255, 92, 24, 1, 255, 107, 27, 9, 255, 102, 25, 4, 255, 92, 27, 0, 255, 95, 27, 2, 255, 103, 26, 4, 255, 105, 26, 2, 255, 111, 33, 6, 255, 100, 24, 1, 255, 92, 23, 3, 255, 94, 31, 4, 255, 109, 35, 4, 255, 112, 34, 3, 255, 112, 34, 2, 255, 128, 39, 6, 255, 135, 42, 5, 255, 134, 41, 6, 255, 128, 37, 2, 255, 126, 38, 3, 255, 130, 39, 3, 255, 132, 43, 2, 255, 133, 44, 2, 255, 131, 40, 2, 255, 132, 39, 5, 255, 136, 41, 7, 255, 130, 38, 5, 255, 133, 39, 3, 255, 135, 39, 0, 255, 135, 40, 0, 255, 132, 38, 1, 255, 127, 36, 4, 255, 125, 37, 3, 255, 124, 39, 2, 255, 124, 38, 5, 255, 118, 32, 4, 255, 111, 29, 0, 255, 113, 32, 1, 255, 115, 36, 3, 255, 117, 35, 2, 255, 122, 32, 3, 255, 125, 31, 3, 255, 126, 34, 4, 255, 120, 35, 1, 255, 123, 34, 0, 255, 127, 35, 1, 255, 129, 36, 2, 255, 128, 38, 1, 255, 126, 37, 2, 255, 125, 35, 1, 255, 123, 39, 3, 255, 121, 38, 3, 255, 106, 32, 5, 255, 78, 19, 3, 255, 81, 20, 2, 255, 91, 23, 1, 255, 96, 23, 5, 255, 112, 28, 1, 255, 121, 33, 0, 255, 106, 24, 2, 255, 87, 23, 2, 255, 110, 35, 5, 255, 120, 35, 2, 255, 111, 30, 1, 255, 102, 27, 1, 255, 108, 32, 3, 255, 118, 32, 6, 255, 79, 22, 1, 255, 53, 15, 1, 255, 70, 13, 7, 255, 71, 16, 4, 255, 65, 15, 0, 255, 61, 20, 0, 255, 59, 15, 1, 255, 52, 15, 6, 255, 50, 14, 5, 255, 56, 13, 3, 255, 55, 13, 4, 255, 52, 12, 1, 255, 58, 14, 4, 255, 62, 16, 6, 255, 58, 15, 4, 255, 52, 11, 0, 255, 58, 17, 4, 255, 59, 16, 5, 255, 63, 16, 6, 255, 59, 14, 5, 255, 53, 12, 3, 255, 48, 11, 1, 255, 39, 12, 2, 255, 44, 16, 1, 255, 51, 15, 1, 255, 17, 7, 3, 255, 14, 4, 0, 255, 14, 6, 2, 255, 15, 9, 4, 255, 15, 9, 3, 255, 18, 8, 4, 255, 19, 9, 2, 255, 20, 9, 0, 255, 25, 12, 3, 255, 28, 14, 4, 255, 27, 13, 2, 255, 32, 15, 4, 255, 32, 15, 1, 255, 34, 16, 4, 255, 29, 13, 4, 255, 33, 19, 6, 255, 33, 17, 3, 255, 29, 12, 3, 255, 25, 11, 2, 255, 26, 14, 4, 255, 24, 12, 3, 255, 23, 14, 5, 255, 21, 12, 3, 255, 22, 14, 2, 255, 23, 14, 2, 255, 27, 15, 4, 255, 33, 16, 4, 255, 31, 14, 2, 255, 34, 18, 2, 255, 30, 17, 2, 255, 22, 12, 3, 255, 19, 11, 7, 255, 26, 14, 5, 255, 30, 15, 2, 255, 36, 20, 3, 255, 37, 21, 6, 255, 33, 15, 1, 255, 34, 20, 3, 255, 36, 20, 5, 255, 35, 18, 2, 255, 43, 25, 4, 255, 42, 25, 2, 255, 39, 21, 1, 255, 48, 26, 5, 255, 43, 26, 3, 255, 46, 31, 5, 255, 59, 30, 6, 255, 66, 38, 12, 255, 65, 40, 9, 255, 72, 44, 11, 255, 70, 45, 17, 255, 68, 38, 11, 255, 70, 38, 2, 255, 73, 44, 1, 255, 76, 44, 7, 255, 80, 38, 3, 255, 86, 41, 1, 255, 78, 42, 1, 255, 72, 35, 1, 255, 79, 32, 5, 255, 78, 38, 2, 255, 72, 43, 9, 255, 59, 39, 6, 255, 76, 44, 12, 255, 70, 34, 6, 255, 67, 33, 5, 255, 68, 38, 4, 255, 69, 40, 3, 255, 69, 38, 4, 255, 66, 39, 2, 255, 71, 38, 1, 255, 73, 37, 1, 255, 75, 38, 4, 255, 73, 38, 3, 255, 66, 36, 1, 255, 68, 38, 3, 255, 75, 40, 6, 255, 72, 41, 3, 255, 76, 41, 2, 255, 78, 43, 2, 255, 81, 45, 3, 255, 82, 47, 2, 255, 85, 47, 0, 255, 87, 47, 2, 255, 83, 50, 3, 255, 83, 50, 3, 255, 88, 49, 5, 255, 87, 51, 4, 255, 92, 55, 6, 255, 94, 54, 3, 255, 93, 53, 2, 255, 92, 54, 3, 255, 91, 55, 3, 255, 86, 52, 3, 255, 83, 49, 3, 255, 80, 46, 2, 255, 77, 47, 1, 255, 75, 44, 0, 255, 83, 48, 3, 255, 79, 47, 1, 255, 88, 53, 2, 255, 94, 54, 2, 255, 91, 51, 2, 255, 94, 52, 2, 255, 99, 52, 3, 255, 97, 54, 3, 255, 97, 54, 1, 255, 107, 57, 2, 255, 110, 57, 1, 255, 104, 59, 3, 255, 109, 55, 2, 255, 119, 55, 2, 255, 116, 59, 2, 255, 111, 63, 4, 255, 111, 65, 6, 255, 113, 65, 2, 255, 119, 65, 8, 255, 107, 70, 6, 255, 120, 79, 3, 255, 136, 81, 3, 255, 129, 77, 6, 255, 117, 67, 4, 255, 110, 60, 2, 255, 105, 59, 3, 255, 99, 55, 2, 255, 96, 51, 7, 255, 94, 47, 7, 255, 102, 44, 4, 255, 107, 43, 8, 255, 97, 49, 6, 255, 86, 51, 4, 255, 84, 49, 2, 255, 87, 49, 2, 255, 90, 52, 6, 255, 85, 49, 3, 255, 82, 48, 10, 255, 85, 48, 13, 255, 102, 56, 0, 255, 107, 56, 4, 255, 89, 51, 2, 255, 80, 53, 3, 255, 99, 52, 6, 255, 114, 56, 5, 255, 96, 55, 5, 255, 109, 54, 15, 255, 102, 56, 7, 255, 88, 55, 4, 255, 98, 56, 19, 255, 95, 56, 9, 255, 91, 59, 5, 255, 80, 55, 16, 255, 94, 58, 19, 255, 91, 57, 7, 255, 88, 61, 21, 255, 89, 58, 17, 255, 96, 61, 12, 255, 98, 63, 8, 255, 94, 63, 18, 255, 91, 59, 25, 255, 93, 61, 25, 255, 86, 64, 15, 255, 85, 62, 19, 255, 89, 64, 26, 255, 93, 70, 25, 255, 93, 66, 19, 255, 100, 68, 24, 255, 108, 69, 31, 255, 98, 67, 32, 255, 95, 72, 18, 255, 96, 73, 18, 255, 98, 75, 24, 255, 106, 79, 28, 255, 105, 76, 32, 255, 96, 73, 28, 255, 92, 76, 38, 255, 95, 76, 33, 255, 96, 81, 20, 255, 93, 82, 33, 255, 100, 79, 44, 255, 106, 84, 39, 255, 104, 85, 41, 255, 95, 82, 38, 255, 103, 83, 39, 255, 102, 90, 31, 255, 97, 90, 37, 255, 107, 89, 42, 255, 111, 90, 37, 255, 115, 94, 32, 255, 111, 97, 27, 255, 110, 96, 38, 255, 118, 99, 32, 255, 116, 97, 31, 255, 114, 98, 31, 255, 117, 100, 39, 255, 118, 99, 38, 255, 116, 95, 41, 255, 113, 92, 46, 255, 118, 99, 45, 255, 116, 96, 41, 255, 124, 97, 44, 255, 124, 95, 40, 255, 119, 96, 34, 255, 116, 95, 35, 255, 119, 96, 42, 255, 120, 94, 38, 255, 121, 93, 34, 255, 121, 94, 36, 255, 121, 94, 32, 255, 122, 92, 28, 255, 121, 90, 26, 255, 122, 88, 36, 255, 119, 89, 28, 255, 119, 85, 39, 255, 120, 87, 35, 255, 118, 88, 23, 255, 111, 86, 26, 255, 109, 85, 29, 255, 112, 83, 29, 255, 110, 79, 23, 255, 105, 82, 16, 255, 108, 82, 10, 255, 112, 81, 14, 255, 108, 76, 18, 255, 103, 75, 22, 255, 104, 75, 10, 255, 108, 77, 5, 255, 108, 76, 15, 255, 102, 67, 18, 255, 107, 69, 16, 255, 113, 70, 10, 255, 118, 71, 7, 255, 118, 71, 14, 255, 113, 66, 16, 255, 113, 68, 8, 255, 110, 66, 3, 255, 109, 66, 10, 255, 109, 66, 13, 255, 112, 62, 8, 255, 113, 62, 6, 255, 112, 60, 2, 255, 108, 62, 2, 255, 108, 62, 4, 255, 108, 61, 6, 255, 110, 62, 3, 255, 108, 59, 1, 255, 105, 54, 5, 255, 110, 55, 7, 255, 109, 53, 6, 255, 105, 52, 10, 255, 100, 49, 3, 255, 105, 53, 8, 255, 103, 50, 9, 255, 101, 47, 5, 255, 109, 53, 8, 255, 103, 50, 2, 255, 101, 50, 3, 255, 102, 47, 7, 255, 104, 48, 6, 255, 96, 48, 3, 255, 93, 46, 2, 255, 97, 43, 3, 255, 100, 43, 2, 255, 99, 44, 5, 255, 95, 44, 5, 255, 96, 45, 1, 255, 95, 41, 1, 255, 92, 42, 6, 255, 88, 41, 3, 255, 90, 42, 2, 255, 88, 40, 5, 255, 85, 41, 1, 255, 84, 40, 0, 255, 85, 38, 2, 255, 86, 39, 5, 255, 86, 37, 5, 255, 80, 35, 3, 255, 83, 37, 4, 255, 84, 36, 3, 255, 81, 35, 3, 255, 81, 36, 5, 255, 78, 35, 2, 255, 83, 34, 7, 255, 88, 33, 10, 255, 83, 35, 3, 255, 86, 38, 1, 255, 100, 45, 4, 255, 104, 39, 3, 255, 108, 37, 4, 255, 122, 47, 3, 255, 135, 49, 1, 255, 134, 46, 5, 255, 132, 51, 4, 255, 135, 52, 1, 255, 131, 52, 2, 255, 123, 43, 5, 255, 109, 29, 3, 255, 113, 39, 6, 255, 113, 37, 3, 255, 117, 36, 4, 255, 125, 39, 11, 255, 127, 41, 6, 255, 128, 44, 6, 255, 132, 40, 8, 255, 125, 47, 2, 255, 130, 45, 0, 255, 122, 39, 3, 255, 116, 39, 4, 255, 110, 33, 2, 255, 107, 31, 2, 255, 104, 32, 2, 255, 108, 36, 1, 255, 113, 33, 2, 255, 106, 29, 6, 255, 99, 24, 7, 255, 98, 21, 1, 255, 96, 24, 3, 255, 97, 28, 2, 255, 93, 27, 2, 255, 88, 21, 6, 255, 93, 28, 5, 255, 102, 32, 0, 255, 114, 30, 4, 255, 120, 38, 6, 255, 131, 41, 5, 255, 133, 36, 4, 255, 128, 38, 3, 255, 127, 44, 4, 255, 125, 40, 2, 255, 127, 39, 1, 255, 130, 41, 2, 255, 134, 44, 4, 255, 132, 43, 5, 255, 128, 38, 4, 255, 128, 35, 2, 255, 129, 35, 2, 255, 127, 37, 2, 255, 131, 39, 3, 255, 134, 37, 1, 255, 132, 39, 4, 255, 125, 35, 4, 255, 122, 33, 2, 255, 120, 33, 0, 255, 123, 35, 2, 255, 118, 34, 4, 255, 116, 31, 2, 255, 114, 31, 1, 255, 114, 33, 3, 255, 116, 34, 4, 255, 119, 34, 6, 255, 122, 35, 5, 255, 120, 33, 3, 255, 117, 32, 2, 255, 125, 36, 2, 255, 131, 37, 4, 255, 133, 39, 5, 255, 129, 35, 2, 255, 123, 34, 0, 255, 124, 35, 1, 255, 122, 36, 2, 255, 125, 33, 1, 255, 126, 31, 4, 255, 90, 23, 7, 255, 78, 25, 1, 255, 88, 25, 3, 255, 79, 15, 2, 255, 98, 26, 3, 255, 113, 34, 0, 255, 111, 37, 7, 255, 82, 22, 1, 255, 96, 31, 4, 255, 112, 38, 2, 255, 117, 34, 0, 255, 110, 28, 3, 255, 110, 29, 4, 255, 116, 34, 2, 255, 105, 29, 1, 255, 74, 19, 4, 255, 58, 16, 5, 255, 64, 16, 2, 255, 64, 19, 3, 255, 62, 17, 3, 255, 61, 15, 3, 255, 55, 15, 4, 255, 49, 12, 0, 255, 46, 13, 1, 255, 52, 15, 7, 255, 52, 12, 6, 255, 49, 10, 0, 255, 54, 14, 3, 255, 58, 12, 7, 255, 50, 10, 3, 255, 48, 15, 3, 255, 49, 13, 4, 255, 52, 10, 4, 255, 46, 12, 1, 255, 49, 15, 2, 255, 57, 15, 3, 255, 50, 13, 5, 255, 49, 12, 2, 255, 51, 13, 2, 255, 17, 8, 6, 255, 16, 6, 4, 255, 14, 6, 3, 255, 12, 6, 3, 255, 13, 9, 4, 255, 17, 8, 3, 255, 21, 11, 4, 255, 20, 11, 1, 255, 22, 11, 2, 255, 23, 10, 1, 255, 28, 14, 3, 255, 29, 14, 1, 255, 36, 20, 6, 255, 31, 16, 1, 255, 26, 13, 3, 255, 29, 18, 2, 255, 32, 17, 2, 255, 32, 14, 6, 255, 32, 15, 5, 255, 25, 13, 4, 255, 24, 12, 3, 255, 22, 12, 2, 255, 25, 16, 3, 255, 19, 12, 1, 255, 19, 14, 2, 255, 23, 13, 3, 255, 30, 13, 4, 255, 30, 15, 6, 255, 26, 13, 3, 255, 21, 10, 0, 255, 21, 10, 2, 255, 21, 11, 4, 255, 22, 17, 4, 255, 35, 13, 3, 255, 34, 16, 3, 255, 26, 19, 3, 255, 34, 19, 5, 255, 34, 20, 1, 255, 32, 16, 2, 255, 34, 18, 5, 255, 43, 22, 5, 255, 42, 23, 4, 255, 38, 24, 6, 255, 42, 22, 6, 255, 44, 24, 8, 255, 51, 25, 5, 255, 51, 26, 7, 255, 58, 34, 10, 255, 66, 47, 15, 255, 65, 46, 24, 255, 77, 57, 28, 255, 69, 53, 25, 255, 77, 52, 19, 255, 77, 47, 13, 255, 74, 44, 8, 255, 79, 39, 3, 255, 79, 34, 3, 255, 75, 36, 7, 255, 71, 33, 6, 255, 67, 32, 5, 255, 65, 34, 7, 255, 75, 43, 4, 255, 72, 46, 1, 255, 70, 38, 7, 255, 76, 34, 5, 255, 72, 37, 4, 255, 66, 35, 3, 255, 66, 34, 2, 255, 66, 35, 1, 255, 64, 39, 1, 255, 66, 38, 2, 255, 72, 38, 3, 255, 72, 37, 3, 255, 68, 36, 1, 255, 68, 37, 0, 255, 71, 39, 2, 255, 71, 40, 2, 255, 64, 42, 1, 255, 73, 44, 4, 255, 77, 42, 2, 255, 80, 43, 1, 255, 86, 48, 4, 255, 91, 49, 5, 255, 86, 46, 2, 255, 82, 50, 3, 255, 83, 50, 3, 255, 89, 49, 3, 255, 86, 48, 1, 255, 94, 53, 3, 255, 95, 53, 3, 255, 88, 51, 0, 255, 86, 50, 2, 255, 86, 51, 4, 255, 79, 45, 0, 255, 76, 41, 0, 255, 78, 44, 2, 255, 80, 49, 2, 255, 82, 46, 1, 255, 85, 49, 3, 255, 81, 50, 3, 255, 83, 51, 0, 255, 91, 52, 2, 255, 92, 51, 1, 255, 94, 52, 1, 255, 100, 51, 3, 255, 98, 54, 4, 255, 94, 57, 4, 255, 101, 58, 3, 255, 102, 52, 1, 255, 106, 55, 7, 255, 102, 57, 6, 255, 101, 60, 2, 255, 110, 60, 1, 255, 113, 67, 2, 255, 116, 68, 0, 255, 115, 68, 0, 255, 109, 64, 0, 255, 103, 61, 2, 255, 97, 59, 2, 255, 94, 52, 0, 255, 88, 50, 3, 255, 84, 49, 1, 255, 85, 46, 3, 255, 85, 51, 7, 255, 77, 47, 1, 255, 79, 47, 5, 255, 87, 49, 2, 255, 89, 48, 2, 255, 80, 47, 7, 255, 78, 47, 6, 255, 81, 50, 5, 255, 82, 49, 2, 255, 84, 50, 4, 255, 84, 51, 4, 255, 78, 49, 0, 255, 78, 51, 5, 255, 77, 49, 6, 255, 92, 49, 5, 255, 93, 50, 6, 255, 85, 53, 8, 255, 78, 50, 7, 255, 84, 52, 13, 255, 94, 55, 1, 255, 77, 53, 10, 255, 86, 49, 10, 255, 89, 46, 15, 255, 83, 53, 14, 255, 90, 57, 6, 255, 83, 53, 15, 255, 78, 52, 16, 255, 80, 56, 16, 255, 101, 60, 15, 255, 112, 63, 15, 255, 102, 64, 21, 255, 83, 63, 16, 255, 89, 59, 19, 255, 100, 61, 21, 255, 110, 67, 22, 255, 105, 65, 18, 255, 92, 59, 22, 255, 88, 64, 19, 255, 89, 63, 21, 255, 98, 68, 22, 255, 101, 69, 9, 255, 103, 70, 29, 255, 95, 68, 25, 255, 95, 66, 26, 255, 92, 69, 30, 255, 95, 76, 25, 255, 93, 74, 25, 255, 96, 74, 28, 255, 108, 77, 20, 255, 100, 73, 29, 255, 91, 76, 28, 255, 93, 77, 27, 255, 86, 73, 45, 255, 87, 81, 36, 255, 93, 82, 43, 255, 91, 80, 43, 255, 94, 83, 40, 255, 96, 86, 41, 255, 97, 86, 33, 255, 101, 87, 44, 255, 101, 86, 37, 255, 106, 88, 46, 255, 103, 88, 43, 255, 110, 93, 41, 255, 114, 92, 35, 255, 113, 95, 38, 255, 114, 97, 34, 255, 122, 99, 30, 255, 122, 100, 40, 255, 122, 100, 35, 255, 124, 102, 37, 255, 121, 100, 37, 255, 118, 98, 37, 255, 120, 100, 42, 255, 115, 98, 44, 255, 117, 98, 39, 255, 121, 100, 44, 255, 119, 94, 42, 255, 122, 92, 51, 255, 118, 96, 44, 255, 118, 98, 39, 255, 124, 96, 33, 255, 120, 95, 36, 255, 117, 96, 30, 255, 117, 95, 33, 255, 120, 93, 35, 255, 123, 90, 31, 255, 123, 87, 27, 255, 117, 87, 31, 255, 116, 84, 33, 255, 116, 84, 26, 255, 117, 89, 19, 255, 115, 88, 21, 255, 112, 83, 30, 255, 111, 84, 29, 255, 113, 85, 21, 255, 111, 81, 22, 255, 111, 83, 6, 255, 108, 79, 11, 255, 107, 75, 24, 255, 108, 74, 20, 255, 109, 75, 13, 255, 110, 76, 15, 255, 105, 71, 14, 255, 103, 70, 18, 255, 106, 69, 19, 255, 108, 67, 12, 255, 111, 68, 9, 255, 109, 64, 15, 255, 108, 63, 18, 255, 112, 68, 15, 255, 110, 65, 11, 255, 109, 62, 15, 255, 108, 61, 15, 255, 108, 63, 10, 255, 110, 63, 6, 255, 111, 60, 3, 255, 106, 61, 5, 255, 109, 57, 6, 255, 111, 59, 11, 255, 109, 58, 6, 255, 107, 57, 3, 255, 107, 55, 9, 255, 107, 55, 6, 255, 105, 53, 5, 255, 102, 50, 7, 255, 101, 53, 3, 255, 102, 54, 1, 255, 104, 53, 4, 255, 104, 52, 3, 255, 100, 49, 1, 255, 98, 47, 1, 255, 99, 51, 5, 255, 95, 49, 5, 255, 102, 49, 4, 255, 102, 47, 5, 255, 99, 43, 3, 255, 99, 42, 4, 255, 95, 46, 4, 255, 99, 48, 5, 255, 95, 44, 4, 255, 94, 45, 6, 255, 94, 40, 2, 255, 95, 46, 5, 255, 89, 43, 4, 255, 93, 42, 7, 255, 87, 40, 5, 255, 81, 38, 3, 255, 82, 37, 4, 255, 87, 37, 6, 255, 88, 36, 5, 255, 88, 37, 3, 255, 80, 36, 0, 255, 84, 40, 5, 255, 83, 38, 4, 255, 80, 36, 2, 255, 83, 38, 4, 255, 84, 36, 3, 255, 83, 37, 3, 255, 80, 35, 1, 255, 91, 34, 1, 255, 99, 38, 6, 255, 99, 41, 6, 255, 102, 40, 5, 255, 103, 34, 0, 255, 114, 41, 6, 255, 134, 49, 2, 255, 141, 49, 0, 255, 132, 48, 4, 255, 127, 50, 5, 255, 131, 48, 2, 255, 121, 42, 3, 255, 103, 31, 1, 255, 104, 34, 1, 255, 107, 37, 4, 255, 105, 31, 1, 255, 105, 30, 4, 255, 112, 38, 5, 255, 114, 32, 1, 255, 117, 33, 5, 255, 116, 31, 3, 255, 125, 34, 4, 255, 121, 38, 4, 255, 116, 40, 3, 255, 117, 35, 4, 255, 113, 32, 6, 255, 109, 27, 3, 255, 119, 35, 4, 255, 123, 40, 4, 255, 117, 36, 5, 255, 115, 34, 6, 255, 105, 27, 1, 255, 103, 30, 6, 255, 97, 26, 2, 255, 101, 29, 3, 255, 109, 29, 4, 255, 116, 33, 2, 255, 110, 36, 3, 255, 111, 28, 3, 255, 122, 34, 3, 255, 133, 37, 3, 255, 128, 35, 3, 255, 122, 39, 2, 255, 125, 40, 3, 255, 125, 36, 2, 255, 130, 37, 3, 255, 129, 35, 2, 255, 129, 35, 2, 255, 129, 37, 3, 255, 127, 37, 2, 255, 129, 34, 1, 255, 130, 34, 2, 255, 124, 35, 0, 255, 125, 35, 1, 255, 128, 32, 0, 255, 125, 34, 3, 255, 118, 35, 5, 255, 122, 34, 4, 255, 119, 34, 1, 255, 119, 35, 0, 255, 112, 37, 1, 255, 116, 34, 3, 255, 117, 32, 3, 255, 117, 33, 4, 255, 113, 31, 2, 255, 116, 35, 3, 255, 117, 33, 2, 255, 116, 31, 0, 255, 120, 32, 1, 255, 123, 34, 0, 255, 128, 36, 2, 255, 132, 38, 4, 255, 125, 33, 1, 255, 121, 31, 1, 255, 124, 35, 2, 255, 124, 36, 1, 255, 120, 37, 1, 255, 121, 37, 5, 255, 106, 27, 3, 255, 98, 21, 0, 255, 104, 21, 3, 255, 91, 17, 3, 255, 89, 23, 4, 255, 106, 30, 5, 255, 111, 33, 3, 255, 90, 20, 1, 255, 89, 19, 6, 255, 105, 31, 2, 255, 117, 33, 1, 255, 119, 30, 6, 255, 110, 24, 2, 255, 103, 26, 0, 255, 113, 28, 3, 255, 100, 25, 5, 255, 71, 19, 1, 255, 64, 15, 1, 255, 55, 14, 2, 255, 54, 12, 3, 255, 52, 16, 5, 255, 61, 13, 3, 255, 61, 15, 0, 255, 48, 15, 4, 255, 38, 10, 3, 255, 38, 11, 5, 255, 48, 10, 2, 255, 57, 12, 1, 255, 55, 12, 7, 255, 55, 11, 7, 255, 53, 10, 3, 255, 49, 10, 3, 255, 52, 9, 3, 255, 60, 10, 4, 255, 63, 13, 3, 255, 59, 14, 1, 255, 55, 13, 5, 255, 51, 11, 1, 255, 52, 11, 1, 255, 14, 8, 4, 255, 15, 8, 5, 255, 13, 6, 3, 255, 9, 5, 1, 255, 12, 7, 2, 255, 17, 9, 4, 255, 18, 9, 2, 255, 21, 12, 2, 255, 19, 9, 0, 255, 25, 13, 4, 255, 27, 14, 4, 255, 26, 12, 1, 255, 30, 16, 2, 255, 32, 19, 4, 255, 29, 18, 6, 255, 29, 20, 4, 255, 27, 15, 1, 255, 28, 13, 2, 255, 29, 14, 3, 255, 21, 9, 1, 255, 21, 11, 1, 255, 24, 13, 3, 255, 26, 17, 6, 255, 23, 15, 4, 255, 17, 13, 2, 255, 26, 19, 7, 255, 29, 14, 4, 255, 20, 10, 2, 255, 18, 11, 5, 255, 21, 14, 5, 255, 26, 15, 4, 255, 29, 13, 3, 255, 27, 17, 3, 255, 31, 14, 4, 255, 32, 15, 3, 255, 29, 16, 2, 255, 33, 18, 3, 255, 38, 22, 6, 255, 37, 21, 6, 255, 35, 19, 3, 255, 45, 24, 2, 255, 42, 22, 1, 255, 37, 22, 3, 255, 43, 23, 3, 255, 47, 27, 4, 255, 44, 24, 1, 255, 43, 26, 3, 255, 60, 37, 3, 255, 66, 41, 11, 255, 64, 47, 21, 255, 70, 50, 15, 255, 71, 51, 18, 255, 79, 45, 16, 255, 88, 48, 15, 255, 84, 48, 14, 255, 75, 43, 5, 255, 74, 37, 3, 255, 73, 38, 10, 255, 72, 38, 8, 255, 64, 32, 6, 255, 64, 38, 9, 255, 73, 41, 1, 255, 74, 40, 5, 255, 70, 34, 10, 255, 68, 35, 0, 255, 71, 38, 3, 255, 69, 36, 4, 255, 65, 32, 1, 255, 70, 36, 4, 255, 67, 34, 1, 255, 67, 36, 3, 255, 68, 36, 1, 255, 69, 35, 3, 255, 66, 37, 2, 255, 71, 39, 3, 255, 73, 40, 2, 255, 69, 40, 1, 255, 73, 45, 4, 255, 76, 42, 4, 255, 79, 42, 3, 255, 80, 44, 3, 255, 82, 46, 4, 255, 83, 48, 3, 255, 86, 50, 4, 255, 83, 51, 4, 255, 84, 50, 2, 255, 91, 51, 3, 255, 92, 52, 3, 255, 92, 51, 2, 255, 89, 51, 2, 255, 83, 50, 3, 255, 80, 46, 1, 255, 78, 44, 1, 255, 77, 43, 1, 255, 81, 45, 3, 255, 81, 45, 1, 255, 81, 50, 1, 255, 85, 51, 4, 255, 84, 51, 4, 255, 88, 53, 7, 255, 83, 47, 1, 255, 90, 47, 3, 255, 105, 50, 4, 255, 106, 50, 3, 255, 101, 52, 4, 255, 94, 55, 4, 255, 93, 57, 5, 255, 100, 54, 5, 255, 103, 48, 3, 255, 106, 59, 3, 255, 110, 57, 2, 255, 109, 59, 1, 255, 107, 65, 6, 255, 101, 54, 4, 255, 94, 50, 4, 255, 89, 53, 7, 255, 82, 48, 3, 255, 89, 46, 6, 255, 83, 45, 5, 255, 85, 45, 4, 255, 82, 45, 1, 255, 79, 50, 2, 255, 79, 48, 5, 255, 82, 48, 4, 255, 82, 44, 1, 255, 86, 46, 5, 255, 84, 45, 0, 255, 78, 48, 7, 255, 77, 51, 4, 255, 80, 44, 0, 255, 95, 49, 3, 255, 98, 51, 3, 255, 93, 47, 4, 255, 85, 46, 3, 255, 90, 48, 3, 255, 82, 48, 4, 255, 81, 54, 5, 255, 95, 49, 7, 255, 101, 54, 3, 255, 90, 53, 8, 255, 79, 48, 11, 255, 69, 50, 12, 255, 75, 53, 2, 255, 73, 60, 10, 255, 75, 54, 12, 255, 84, 49, 17, 255, 83, 55, 15, 255, 83, 56, 15, 255, 76, 54, 12, 255, 76, 55, 16, 255, 78, 59, 22, 255, 90, 60, 14, 255, 106, 63, 8, 255, 109, 64, 9, 255, 104, 63, 10, 255, 101, 65, 15, 255, 110, 69, 10, 255, 111, 62, 10, 255, 100, 60, 21, 255, 84, 59, 28, 255, 88, 63, 15, 255, 101, 67, 22, 255, 108, 69, 22, 255, 98, 63, 21, 255, 94, 69, 20, 255, 92, 68, 21, 255, 94, 67, 20, 255, 94, 70, 22, 255, 95, 73, 27, 255, 94, 75, 24, 255, 101, 79, 21, 255, 111, 81, 17, 255, 103, 74, 34, 255, 95, 76, 35, 255, 92, 76, 28, 255, 92, 77, 36, 255, 94, 83, 41, 255, 94, 82, 41, 255, 93, 83, 33, 255, 96, 86, 30, 255, 97, 86, 37, 255, 102, 89, 27, 255, 97, 89, 32, 255, 103, 92, 34, 255, 106, 91, 36, 255, 92, 87, 45, 255, 102, 91, 39, 255, 108, 94, 38, 255, 104, 93, 44, 255, 109, 94, 50, 255, 115, 96, 50, 255, 113, 93, 48, 255, 119, 91, 48, 255, 121, 96, 45, 255, 120, 98, 45, 255, 120, 101, 41, 255, 115, 100, 34, 255, 118, 101, 42, 255, 114, 100, 42, 255, 114, 98, 36, 255, 120, 101, 30, 255, 118, 97, 45, 255, 120, 98, 45, 255, 120, 97, 33, 255, 124, 99, 25, 255, 123, 94, 26, 255, 119, 92, 36, 255, 114, 91, 40, 255, 116, 92, 43, 255, 118, 96, 28, 255, 115, 92, 23, 255, 115, 91, 36, 255, 114, 92, 20, 255, 113, 86, 32, 255, 112, 84, 35, 255, 109, 85, 15, 255, 108, 82, 27, 255, 111, 81, 24, 255, 113, 83, 14, 255, 111, 83, 18, 255, 110, 78, 22, 255, 110, 74, 19, 255, 109, 73, 18, 255, 110, 77, 14, 255, 110, 71, 15, 255, 109, 69, 20, 255, 109, 73, 18, 255, 104, 72, 14, 255, 104, 71, 19, 255, 109, 72, 17, 255, 107, 69, 12, 255, 106, 66, 14, 255, 107, 65, 13, 255, 110, 67, 13, 255, 110, 63, 16, 255, 111, 63, 16, 255, 110, 62, 9, 255, 104, 64, 9, 255, 107, 65, 6, 255, 112, 63, 5, 255, 110, 61, 7, 255, 111, 58, 8, 255, 114, 61, 8, 255, 109, 57, 7, 255, 106, 55, 4, 255, 105, 54, 9, 255, 105, 54, 6, 255, 105, 55, 6, 255, 98, 50, 6, 255, 103, 56, 5, 255, 104, 52, 2, 255, 106, 51, 6, 255, 109, 52, 8, 255, 99, 44, 2, 255, 100, 45, 5, 255, 101, 46, 8, 255, 99, 48, 4, 255, 99, 47, 2, 255, 93, 47, 2, 255, 92, 47, 6, 255, 96, 43, 5, 255, 97, 42, 4, 255, 97, 45, 2, 255, 94, 45, 3, 255, 92, 39, 5, 255, 96, 41, 4, 255, 94, 45, 2, 255, 92, 43, 3, 255, 92, 39, 6, 255, 91, 44, 0, 255, 90, 43, 5, 255, 82, 35, 6, 255, 82, 31, 9, 255, 86, 35, 10, 255, 86, 34, 5, 255, 88, 39, 3, 255, 88, 39, 3, 255, 88, 36, 4, 255, 90, 38, 5, 255, 92, 37, 4, 255, 93, 35, 3, 255, 95, 37, 7, 255, 85, 34, 2, 255, 85, 32, 2, 255, 86, 32, 3, 255, 91, 35, 3, 255, 103, 40, 4, 255, 105, 37, 0, 255, 110, 39, 3, 255, 118, 49, 2, 255, 137, 56, 4, 255, 143, 51, 8, 255, 136, 50, 4, 255, 134, 46, 8, 255, 129, 40, 7, 255, 115, 37, 8, 255, 92, 27, 1, 255, 83, 28, 1, 255, 82, 30, 4, 255, 76, 26, 7, 255, 71, 24, 1, 255, 67, 22, 4, 255, 50, 17, 6, 255, 54, 21, 6, 255, 65, 23, 6, 255, 69, 20, 6, 255, 84, 26, 4, 255, 90, 29, 2, 255, 93, 29, 2, 255, 107, 31, 3, 255, 126, 40, 6, 255, 129, 45, 4, 255, 120, 37, 0, 255, 123, 40, 2, 255, 112, 33, 1, 255, 102, 28, 2, 255, 99, 29, 2, 255, 102, 29, 2, 255, 112, 34, 0, 255, 121, 38, 0, 255, 118, 37, 7, 255, 113, 32, 4, 255, 119, 32, 1, 255, 130, 33, 1, 255, 125, 40, 4, 255, 121, 41, 3, 255, 124, 36, 1, 255, 125, 35, 1, 255, 128, 37, 3, 255, 125, 34, 3, 255, 124, 36, 4, 255, 122, 37, 1, 255, 121, 35, 0, 255, 124, 31, 3, 255, 125, 30, 3, 255, 123, 30, 1, 255, 126, 34, 2, 255, 128, 37, 3, 255, 121, 37, 1, 255, 116, 31, 1, 255, 119, 32, 3, 255, 115, 35, 4, 255, 123, 34, 2, 255, 121, 36, 2, 255, 120, 32, 0, 255, 111, 32, 1, 255, 114, 34, 5, 255, 114, 30, 1, 255, 117, 30, 0, 255, 117, 31, 0, 255, 119, 35, 2, 255, 120, 36, 4, 255, 122, 33, 2, 255, 125, 35, 1, 255, 125, 35, 2, 255, 121, 32, 3, 255, 118, 31, 2, 255, 122, 33, 2, 255, 127, 36, 2, 255, 124, 36, 2, 255, 120, 32, 2, 255, 113, 30, 0, 255, 101, 29, 1, 255, 98, 27, 2, 255, 96, 27, 2, 255, 89, 20, 2, 255, 91, 22, 5, 255, 98, 30, 2, 255, 98, 28, 5, 255, 86, 17, 4, 255, 98, 24, 1, 255, 109, 30, 1, 255, 111, 29, 1, 255, 104, 30, 2, 255, 103, 27, 5, 255, 99, 24, 1, 255, 93, 24, 0, 255, 79, 20, 2, 255, 60, 17, 5, 255, 56, 14, 2, 255, 55, 16, 3, 255, 57, 11, 0, 255, 59, 15, 3, 255, 60, 14, 2, 255, 59, 14, 7, 255, 42, 11, 5, 255, 37, 11, 4, 255, 49, 12, 4, 255, 55, 13, 3, 255, 42, 10, 1, 255, 49, 12, 4, 255, 58, 13, 5, 255, 48, 12, 2, 255, 40, 15, 2, 255, 51, 16, 3, 255, 63, 15, 2, 255, 64, 16, 2, 255, 54, 15, 3, 255, 50, 14, 4, 255, 51, 15, 5, 255, 10, 8, 2, 255, 10, 6, 2, 255, 11, 7, 4, 255, 11, 8, 4, 255, 13, 8, 3, 255, 17, 10, 3, 255, 20, 9, 1, 255, 24, 14, 5, 255, 22, 12, 3, 255, 22, 11, 3, 255, 26, 12, 2, 255, 30, 14, 1, 255, 29, 13, 1, 255, 26, 15, 4, 255, 25, 16, 4, 255, 22, 14, 5, 255, 23, 12, 3, 255, 25, 13, 0, 255, 26, 14, 5, 255, 27, 13, 2, 255, 25, 14, 2, 255, 22, 13, 4, 255, 19, 13, 3, 255, 22, 14, 4, 255, 23, 14, 1, 255, 26, 15, 3, 255, 19, 10, 1, 255, 18, 11, 3, 255, 21, 15, 6, 255, 20, 14, 4, 255, 21, 13, 2, 255, 22, 13, 3, 255, 26, 16, 1, 255, 37, 16, 5, 255, 36, 13, 3, 255, 30, 17, 2, 255, 33, 21, 5, 255, 40, 19, 5, 255, 38, 19, 5, 255, 44, 23, 5, 255, 47, 24, 1, 255, 47, 25, 4, 255, 45, 23, 6, 255, 44, 23, 2, 255, 51, 24, 1, 255, 50, 24, 2, 255, 50, 29, 1, 255, 48, 29, 1, 255, 61, 35, 4, 255, 72, 40, 4, 255, 77, 36, 10, 255, 76, 41, 17, 255, 81, 51, 11, 255, 73, 40, 0, 255, 74, 39, 8, 255, 73, 41, 13, 255, 73, 39, 15, 255, 79, 46, 22, 255, 78, 43, 16, 255, 71, 33, 6, 255, 66, 34, 2, 255, 69, 33, 1, 255, 60, 26, 5, 255, 60, 36, 11, 255, 59, 36, 4, 255, 67, 37, 1, 255, 69, 34, 4, 255, 67, 35, 6, 255, 61, 33, 1, 255, 64, 34, 4, 255, 68, 36, 2, 255, 74, 35, 0, 255, 71, 35, 0, 255, 71, 39, 4, 255, 72, 38, 6, 255, 69, 36, 3, 255, 66, 42, 3, 255, 79, 44, 1, 255, 80, 44, 2, 255, 80, 44, 1, 255, 81, 47, 4, 255, 81, 48, 3, 255, 80, 46, 0, 255, 83, 47, 4, 255, 84, 44, 2, 255, 86, 47, 1, 255, 89, 50, 1, 255, 92, 51, 3, 255, 84, 47, 2, 255, 81, 48, 2, 255, 82, 46, 1, 255, 76, 42, 0, 255, 74, 41, 0, 255, 79, 45, 4, 255, 83, 48, 4, 255, 82, 46, 1, 255, 89, 50, 5, 255, 86, 49, 4, 255, 79, 49, 2, 255, 87, 47, 4, 255, 87, 46, 2, 255, 93, 51, 5, 255, 103, 53, 6, 255, 94, 48, 1, 255, 90, 53, 2, 255, 88, 56, 1, 255, 90, 56, 1, 255, 97, 52, 4, 255, 102, 54, 7, 255, 97, 55, 1, 255, 102, 53, 3, 255, 97, 54, 6, 255, 88, 51, 5, 255, 86, 44, 2, 255, 81, 46, 2, 255, 81, 46, 2, 255, 81, 47, 1, 255, 82, 46, 4, 255, 76, 43, 3, 255, 83, 41, 5, 255, 92, 41, 2, 255, 85, 45, 2, 255, 80, 47, 3, 255, 74, 45, 0, 255, 76, 42, 2, 255, 82, 44, 2, 255, 82, 47, 1, 255, 73, 45, 7, 255, 80, 39, 4, 255, 87, 44, 6, 255, 97, 50, 4, 255, 105, 50, 3, 255, 108, 47, 8, 255, 103, 47, 8, 255, 92, 46, 11, 255, 73, 42, 7, 255, 85, 49, 9, 255, 104, 53, 9, 255, 94, 49, 6, 255, 79, 51, 13, 255, 75, 49, 10, 255, 75, 49, 5, 255, 80, 51, 8, 255, 85, 57, 2, 255, 86, 53, 8, 255, 88, 58, 4, 255, 80, 54, 6, 255, 72, 51, 16, 255, 75, 55, 16, 255, 82, 55, 10, 255, 84, 61, 10, 255, 81, 58, 14, 255, 89, 54, 14, 255, 107, 63, 15, 255, 110, 65, 16, 255, 89, 59, 13, 255, 94, 65, 22, 255, 97, 63, 23, 255, 96, 64, 25, 255, 94, 67, 31, 255, 99, 65, 18, 255, 99, 63, 28, 255, 91, 64, 25, 255, 80, 63, 34, 255, 77, 64, 27, 255, 92, 70, 28, 255, 96, 70, 30, 255, 92, 73, 20, 255, 89, 73, 29, 255, 95, 73, 33, 255, 91, 73, 29, 255, 86, 76, 29, 255, 90, 75, 40, 255, 97, 81, 24, 255, 96, 77, 32, 255, 98, 79, 33, 255, 101, 85, 35, 255, 95, 83, 34, 255, 95, 83, 40, 255, 102, 89, 34, 255, 103, 89, 37, 255, 102, 86, 51, 255, 101, 85, 50, 255, 104, 88, 42, 255, 103, 90, 41, 255, 102, 93, 51, 255, 109, 97, 43, 255, 110, 92, 47, 255, 108, 97, 44, 255, 107, 96, 42, 255, 108, 93, 48, 255, 112, 102, 40, 255, 116, 97, 46, 255, 113, 95, 43, 255, 113, 96, 49, 255, 116, 101, 47, 255, 113, 96, 51, 255, 115, 95, 42, 255, 114, 97, 38, 255, 120, 101, 40, 255, 127, 107, 34, 255, 120, 100, 38, 255, 120, 100, 35, 255, 121, 95, 31, 255, 122, 95, 38, 255, 123, 94, 42, 255, 120, 95, 46, 255, 114, 93, 28, 255, 113, 91, 29, 255, 114, 92, 27, 255, 111, 89, 32, 255, 116, 90, 27, 255, 117, 89, 27, 255, 117, 88, 25, 255, 114, 87, 28, 255, 109, 85, 29, 255, 109, 87, 20, 255, 112, 86, 17, 255, 113, 82, 20, 255, 115, 81, 20, 255, 114, 80, 18, 255, 112, 81, 16, 255, 111, 78, 13, 255, 112, 76, 11, 255, 105, 72, 3, 255, 110, 75, 14, 255, 108, 72, 18, 255, 106, 70, 16, 255, 106, 71, 12, 255, 108, 71, 8, 255, 107, 72, 8, 255, 106, 69, 10, 255, 108, 64, 6, 255, 109, 62, 6, 255, 108, 62, 11, 255, 111, 63, 15, 255, 109, 62, 8, 255, 107, 60, 10, 255, 107, 60, 6, 255, 108, 60, 6, 255, 109, 57, 10, 255, 109, 56, 10, 255, 111, 59, 4, 255, 111, 57, 4, 255, 110, 60, 5, 255, 103, 53, 5, 255, 107, 55, 8, 255, 107, 55, 8, 255, 99, 50, 8, 255, 98, 51, 3, 255, 103, 53, 4, 255, 104, 49, 6, 255, 105, 49, 8, 255, 101, 49, 6, 255, 99, 48, 5, 255, 98, 45, 4, 255, 96, 47, 5, 255, 97, 45, 5, 255, 94, 44, 3, 255, 94, 45, 7, 255, 96, 41, 5, 255, 95, 43, 3, 255, 93, 47, 1, 255, 96, 45, 4, 255, 93, 40, 4, 255, 96, 44, 5, 255, 97, 43, 2, 255, 94, 41, 2, 255, 90, 39, 5, 255, 91, 41, 2, 255, 94, 41, 4, 255, 87, 37, 4, 255, 78, 34, 4, 255, 81, 36, 6, 255, 84, 34, 4, 255, 86, 37, 2, 255, 85, 34, 1, 255, 88, 34, 3, 255, 90, 35, 5, 255, 90, 37, 2, 255, 87, 30, 0, 255, 93, 35, 5, 255, 91, 36, 6, 255, 80, 32, 4, 255, 72, 30, 0, 255, 79, 32, 2, 255, 94, 34, 3, 255, 103, 32, 2, 255, 109, 39, 3, 255, 100, 36, 3, 255, 102, 34, 5, 255, 115, 38, 4, 255, 118, 40, 2, 255, 98, 29, 5, 255, 74, 18, 2, 255, 54, 20, 6, 255, 37, 22, 10, 255, 47, 23, 2, 255, 65, 24, 4, 255, 60, 26, 3, 255, 41, 21, 1, 255, 40, 19, 2, 255, 42, 21, 3, 255, 47, 22, 1, 255, 61, 23, 1, 255, 60, 23, 3, 255, 54, 23, 2, 255, 77, 28, 1, 255, 82, 24, 1, 255, 82, 26, 3, 255, 82, 25, 1, 255, 102, 29, 4, 255, 119, 34, 4, 255, 121, 39, 3, 255, 109, 33, 3, 255, 99, 23, 1, 255, 101, 30, 2, 255, 105, 31, 3, 255, 109, 30, 4, 255, 115, 33, 5, 255, 112, 33, 3, 255, 117, 36, 4, 255, 114, 32, 2, 255, 124, 34, 3, 255, 125, 35, 2, 255, 119, 33, 2, 255, 128, 36, 4, 255, 132, 40, 5, 255, 127, 38, 2, 255, 122, 36, 3, 255, 122, 37, 7, 255, 121, 37, 7, 255, 117, 33, 1, 255, 123, 33, 6, 255, 118, 28, 3, 255, 123, 28, 4, 255, 122, 28, 2, 255, 116, 34, 3, 255, 109, 33, 1, 255, 107, 28, 0, 255, 109, 29, 3, 255, 104, 33, 5, 255, 116, 30, 3, 255, 115, 34, 1, 255, 118, 32, 2, 255, 110, 35, 5, 255, 109, 31, 4, 255, 114, 31, 4, 255, 115, 29, 2, 255, 114, 31, 2, 255, 114, 33, 2, 255, 112, 30, 1, 255, 121, 34, 3, 255, 123, 37, 2, 255, 120, 35, 2, 255, 114, 30, 3, 255, 115, 30, 3, 255, 121, 32, 2, 255, 123, 34, 1, 255, 125, 33, 0, 255, 117, 31, 0, 255, 108, 31, 2, 255, 104, 31, 1, 255, 95, 30, 0, 255, 96, 28, 1, 255, 105, 25, 3, 255, 88, 19, 3, 255, 92, 25, 4, 255, 106, 27, 4, 255, 93, 23, 0, 255, 88, 22, 3, 255, 102, 26, 3, 255, 109, 32, 1, 255, 109, 35, 3, 255, 102, 31, 7, 255, 92, 21, 1, 255, 85, 17, 1, 255, 66, 16, 2, 255, 51, 15, 1, 255, 59, 14, 4, 255, 59, 11, 2, 255, 62, 10, 1, 255, 57, 15, 0, 255, 53, 15, 2, 255, 53, 12, 2, 255, 54, 14, 4, 255, 49, 14, 5, 255, 39, 10, 1, 255, 39, 12, 3, 255, 43, 12, 3, 255, 47, 13, 3, 255, 51, 12, 4, 255, 56, 13, 3, 255, 50, 12, 1, 255, 50, 15, 2, 255, 54, 12, 2, 255, 60, 13, 3, 255, 57, 10, 2, 255, 51, 10, 4, 255, 48, 12, 5, 255, 10, 7, 2, 255, 11, 6, 2, 255, 12, 8, 4, 255, 14, 10, 5, 255, 12, 8, 1, 255, 18, 9, 3, 255, 20, 11, 2, 255, 20, 10, 0, 255, 26, 14, 5, 255, 27, 13, 4, 255, 27, 14, 3, 255, 34, 18, 5, 255, 33, 17, 5, 255, 23, 13, 4, 255, 22, 13, 3, 255, 22, 13, 5, 255, 23, 13, 4, 255, 24, 12, 3, 255, 21, 11, 5, 255, 23, 14, 5, 255, 25, 12, 3, 255, 26, 13, 5, 255, 24, 14, 3, 255, 21, 11, 1, 255, 24, 14, 3, 255, 23, 14, 3, 255, 26, 16, 6, 255, 27, 16, 5, 255, 21, 11, 0, 255, 21, 14, 2, 255, 24, 17, 5, 255, 19, 13, 3, 255, 30, 18, 2, 255, 38, 15, 3, 255, 35, 16, 2, 255, 29, 17, 0, 255, 35, 17, 3, 255, 36, 16, 2, 255, 31, 20, 4, 255, 33, 17, 3, 255, 42, 20, 3, 255, 44, 22, 5, 255, 40, 19, 4, 255, 46, 25, 5, 255, 53, 23, 2, 255, 50, 22, 3, 255, 49, 22, 2, 255, 46, 24, 4, 255, 58, 36, 3, 255, 69, 39, 3, 255, 71, 36, 12, 255, 72, 39, 8, 255, 68, 38, 7, 255, 71, 38, 15, 255, 72, 33, 14, 255, 68, 31, 12, 255, 67, 36, 21, 255, 71, 41, 38, 255, 81, 47, 25, 255, 77, 40, 8, 255, 71, 34, 11, 255, 70, 33, 3, 255, 64, 33, 4, 255, 57, 33, 2, 255, 55, 37, 4, 255, 59, 32, 1, 255, 64, 31, 4, 255, 63, 34, 6, 255, 62, 38, 3, 255, 61, 32, 5, 255, 71, 36, 9, 255, 73, 33, 3, 255, 70, 33, 2, 255, 69, 38, 3, 255, 70, 37, 1, 255, 71, 37, 0, 255, 71, 45, 1, 255, 77, 46, 0, 255, 80, 46, 1, 255, 80, 42, 0, 255, 85, 47, 3, 255, 85, 50, 4, 255, 88, 47, 2, 255, 83, 46, 3, 255, 84, 44, 2, 255, 90, 49, 5, 255, 87, 48, 4, 255, 87, 48, 5, 255, 76, 44, 2, 255, 72, 45, 2, 255, 76, 44, 2, 255, 77, 45, 4, 255, 78, 45, 4, 255, 75, 43, 1, 255, 79, 46, 2, 255, 83, 47, 1, 255, 85, 42, 0, 255, 83, 44, 0, 255, 78, 49, 2, 255, 87, 51, 4, 255, 88, 51, 3, 255, 83, 49, 0, 255, 89, 51, 3, 255, 88, 50, 4, 255, 94, 50, 5, 255, 100, 48, 3, 255, 98, 48, 1, 255, 90, 48, 2, 255, 86, 46, 1, 255, 88, 44, 3, 255, 81, 47, 3, 255, 74, 50, 0, 255, 78, 47, 0, 255, 83, 44, 2, 255, 81, 46, 5, 255, 84, 42, 2, 255, 82, 43, 4, 255, 78, 45, 7, 255, 76, 45, 6, 255, 77, 43, 1, 255, 81, 46, 3, 255, 75, 40, 2, 255, 82, 39, 6, 255, 77, 39, 4, 255, 73, 43, 6, 255, 73, 44, 2, 255, 85, 48, 0, 255, 96, 42, 1, 255, 99, 48, 6, 255, 90, 47, 2, 255, 94, 45, 7, 255, 108, 45, 12, 255, 103, 44, 1, 255, 99, 50, 3, 255, 80, 47, 6, 255, 66, 42, 6, 255, 92, 51, 9, 255, 100, 51, 4, 255, 80, 42, 9, 255, 79, 46, 13, 255, 83, 49, 4, 255, 78, 50, 8, 255, 79, 50, 13, 255, 83, 55, 6, 255, 86, 50, 12, 255, 82, 52, 8, 255, 75, 52, 6, 255, 88, 57, 7, 255, 105, 59, 12, 255, 107, 56, 13, 255, 90, 58, 14, 255, 76, 60, 10, 255, 80, 62, 15, 255, 74, 59, 16, 255, 74, 59, 16, 255, 95, 59, 23, 255, 108, 68, 23, 255, 113, 64, 20, 255, 117, 69, 11, 255, 113, 70, 8, 255, 94, 61, 26, 255, 79, 63, 16, 255, 84, 68, 25, 255, 80, 68, 24, 255, 84, 71, 23, 255, 93, 69, 20, 255, 101, 69, 30, 255, 107, 77, 18, 255, 89, 72, 26, 255, 77, 70, 39, 255, 85, 74, 28, 255, 91, 80, 26, 255, 94, 82, 20, 255, 95, 81, 29, 255, 96, 83, 28, 255, 97, 82, 34, 255, 105, 88, 42, 255, 101, 82, 42, 255, 98, 83, 42, 255, 103, 84, 49, 255, 110, 91, 42, 255, 109, 88, 42, 255, 117, 95, 32, 255, 104, 92, 41, 255, 92, 89, 50, 255, 104, 93, 46, 255, 116, 100, 35, 255, 114, 96, 42, 255, 109, 92, 53, 255, 111, 98, 43, 255, 113, 98, 46, 255, 110, 98, 44, 255, 111, 98, 38, 255, 111, 100, 39, 255, 109, 100, 46, 255, 111, 100, 50, 255, 115, 100, 36, 255, 117, 99, 39, 255, 113, 99, 44, 255, 112, 98, 41, 255, 116, 99, 38, 255, 118, 100, 44, 255, 118, 100, 44, 255, 115, 98, 33, 255, 117, 96, 41, 255, 116, 95, 39, 255, 115, 96, 30, 255, 114, 91, 35, 255, 116, 89, 37, 255, 118, 91, 27, 255, 118, 91, 26, 255, 118, 90, 31, 255, 119, 90, 26, 255, 118, 87, 24, 255, 116, 84, 32, 255, 116, 84, 28, 255, 118, 84, 21, 255, 116, 82, 25, 255, 112, 82, 20, 255, 111, 81, 18, 255, 110, 80, 15, 255, 111, 77, 16, 255, 110, 77, 13, 255, 109, 76, 12, 255, 108, 74, 14, 255, 107, 69, 15, 255, 112, 71, 22, 255, 108, 68, 20, 255, 108, 70, 13, 255, 111, 70, 4, 255, 108, 68, 13, 255, 109, 67, 17, 255, 113, 64, 20, 255, 111, 62, 14, 255, 108, 61, 15, 255, 109, 62, 14, 255, 108, 61, 7, 255, 113, 63, 10, 255, 110, 59, 10, 255, 111, 63, 8, 255, 115, 58, 8, 255, 109, 57, 5, 255, 108, 59, 2, 255, 110, 57, 7, 255, 107, 55, 5, 255, 103, 50, 4, 255, 105, 55, 6, 255, 101, 49, 0, 255, 101, 51, 3, 255, 100, 53, 2, 255, 103, 52, 3, 255, 102, 49, 3, 255, 108, 50, 7, 255, 107, 47, 2, 255, 109, 51, 6, 255, 105, 50, 3, 255, 97, 47, 3, 255, 99, 44, 4, 255, 97, 44, 3, 255, 94, 44, 3, 255, 96, 43, 2, 255, 96, 44, 2, 255, 95, 46, 2, 255, 97, 42, 1, 255, 97, 43, 3, 255, 90, 44, 3, 255, 94, 43, 4, 255, 93, 41, 3, 255, 88, 42, 3, 255, 85, 38, 5, 255, 86, 35, 2, 255, 85, 38, 1, 255, 80, 38, 0, 255, 81, 38, 2, 255, 86, 36, 1, 255, 84, 37, 2, 255, 82, 35, 5, 255, 84, 34, 5, 255, 85, 35, 3, 255, 83, 31, 4, 255, 86, 34, 6, 255, 93, 37, 2, 255, 107, 39, 2, 255, 108, 38, 4, 255, 96, 34, 4, 255, 71, 30, 3, 255, 62, 27, 3, 255, 70, 24, 3, 255, 72, 30, 3, 255, 71, 28, 5, 255, 61, 21, 7, 255, 56, 20, 3, 255, 54, 23, 4, 255, 52, 24, 5, 255, 63, 31, 1, 255, 67, 28, 2, 255, 62, 23, 13, 255, 57, 25, 6, 255, 53, 22, 0, 255, 61, 25, 2, 255, 65, 26, 7, 255, 59, 21, 5, 255, 60, 20, 10, 255, 51, 19, 1, 255, 63, 21, 4, 255, 59, 22, 4, 255, 53, 25, 1, 255, 61, 24, 7, 255, 50, 18, 4, 255, 50, 19, 3, 255, 59, 18, 7, 255, 54, 20, 6, 255, 65, 16, 2, 255, 84, 23, 6, 255, 92, 28, 2, 255, 90, 29, 2, 255, 87, 29, 2, 255, 90, 23, 1, 255, 88, 18, 3, 255, 90, 24, 4, 255, 99, 32, 2, 255, 103, 27, 0, 255, 107, 29, 2, 255, 121, 34, 7, 255, 125, 31, 0, 255, 121, 33, 1, 255, 125, 33, 4, 255, 133, 41, 7, 255, 126, 38, 1, 255, 121, 34, 4, 255, 110, 28, 4, 255, 107, 28, 2, 255, 114, 31, 2, 255, 113, 28, 1, 255, 107, 26, 2, 255, 112, 24, 4, 255, 112, 22, 1, 255, 106, 26, 3, 255, 98, 25, 1, 255, 101, 25, 2, 255, 105, 27, 2, 255, 104, 28, 3, 255, 108, 27, 1, 255, 113, 31, 1, 255, 117, 30, 1, 255, 112, 32, 3, 255, 100, 21, 1, 255, 105, 24, 5, 255, 109, 29, 5, 255, 112, 34, 4, 255, 114, 30, 3, 255, 113, 27, 1, 255, 114, 28, 2, 255, 117, 35, 1, 255, 113, 36, 1, 255, 110, 32, 3, 255, 112, 28, 1, 255, 125, 33, 3, 255, 124, 35, 5, 255, 123, 36, 3, 255, 123, 34, 2, 255, 114, 30, 5, 255, 102, 31, 2, 255, 97, 32, 2, 255, 105, 25, 4, 255, 112, 34, 4, 255, 97, 29, 4, 255, 80, 15, 0, 255, 96, 22, 0, 255, 95, 29, 1, 255, 85, 25, 5, 255, 98, 28, 4, 255, 109, 32, 3, 255, 108, 29, 0, 255, 108, 31, 4, 255, 96, 25, 2, 255, 76, 13, 4, 255, 71, 14, 6, 255, 76, 23, 6, 255, 58, 16, 4, 255, 52, 12, 3, 255, 52, 15, 5, 255, 65, 15, 3, 255, 67, 15, 2, 255, 56, 16, 2, 255, 53, 16, 3, 255, 50, 15, 4, 255, 46, 13, 4, 255, 40, 10, 2, 255, 47, 10, 4, 255, 50, 9, 3, 255, 49, 17, 5, 255, 45, 14, 2, 255, 50, 10, 1, 255, 54, 14, 4, 255, 48, 13, 3, 255, 48, 12, 4, 255, 51, 9, 2, 255, 46, 10, 2, 255, 46, 9, 2, 255, 14, 9, 4, 255, 14, 7, 3, 255, 9, 4, 0, 255, 13, 8, 2, 255, 15, 11, 2, 255, 18, 9, 2, 255, 20, 10, 2, 255, 23, 12, 4, 255, 27, 14, 6, 255, 26, 13, 2, 255, 26, 14, 0, 255, 28, 17, 3, 255, 26, 15, 3, 255, 25, 15, 4, 255, 27, 17, 7, 255, 24, 12, 3, 255, 26, 12, 5, 255, 23, 10, 4, 255, 19, 12, 3, 255, 20, 11, 2, 255, 25, 10, 3, 255, 24, 10, 5, 255, 19, 10, 1, 255, 23, 13, 3, 255, 28, 16, 4, 255, 26, 17, 4, 255, 23, 13, 3, 255, 26, 15, 2, 255, 27, 15, 2, 255, 29, 16, 4, 255, 24, 14, 2, 255, 25, 13, 3, 255, 37, 19, 6, 255, 34, 17, 3, 255, 34, 18, 4, 255, 32, 16, 3, 255, 33, 17, 3, 255, 34, 17, 2, 255, 32, 20, 5, 255, 30, 19, 3, 255, 35, 20, 4, 255, 40, 24, 8, 255, 42, 21, 5, 255, 53, 29, 7, 255, 55, 28, 3, 255, 47, 20, 2, 255, 51, 22, 6, 255, 54, 26, 7, 255, 54, 26, 1, 255, 64, 33, 5, 255, 71, 37, 11, 255, 82, 40, 5, 255, 77, 34, 5, 255, 75, 38, 10, 255, 71, 39, 8, 255, 72, 40, 11, 255, 68, 39, 22, 255, 77, 44, 29, 255, 83, 47, 14, 255, 65, 39, 3, 255, 59, 32, 4, 255, 58, 32, 2, 255, 57, 30, 11, 255, 64, 34, 3, 255, 69, 36, 4, 255, 58, 28, 5, 255, 56, 28, 5, 255, 62, 32, 3, 255, 66, 35, 3, 255, 64, 34, 3, 255, 63, 31, 2, 255, 69, 35, 4, 255, 69, 36, 4, 255, 65, 36, 1, 255, 73, 38, 2, 255, 78, 40, 3, 255, 76, 44, 3, 255, 75, 45, 3, 255, 78, 41, 0, 255, 84, 42, 1, 255, 82, 40, 2, 255, 86, 46, 4, 255, 82, 46, 3, 255, 75, 46, 3, 255, 75, 48, 5, 255, 76, 44, 4, 255, 74, 40, 2, 255, 71, 39, 2, 255, 70, 45, 6, 255, 70, 42, 4, 255, 74, 41, 2, 255, 75, 43, 2, 255, 77, 43, 2, 255, 78, 44, 4, 255, 77, 45, 3, 255, 77, 47, 2, 255, 80, 48, 2, 255, 84, 48, 3, 255, 85, 47, 2, 255, 79, 48, 1, 255, 81, 52, 3, 255, 81, 49, 0, 255, 89, 47, 3, 255, 87, 47, 4, 255, 80, 42, 2, 255, 89, 43, 6, 255, 87, 43, 4, 255, 81, 45, 3, 255, 81, 45, 2, 255, 82, 45, 5, 255, 77, 44, 6, 255, 82, 45, 1, 255, 89, 43, 1, 255, 88, 39, 5, 255, 82, 39, 6, 255, 84, 41, 2, 255, 75, 43, 2, 255, 71, 40, 2, 255, 79, 41, 3, 255, 79, 43, 2, 255, 76, 43, 5, 255, 74, 39, 5, 255, 78, 40, 6, 255, 73, 42, 2, 255, 75, 43, 3, 255, 88, 40, 4, 255, 104, 43, 5, 255, 105, 47, 3, 255, 90, 43, 4, 255, 70, 38, 7, 255, 74, 37, 4, 255, 87, 44, 4, 255, 78, 45, 5, 255, 71, 44, 4, 255, 70, 40, 6, 255, 71, 44, 8, 255, 69, 44, 8, 255, 82, 46, 6, 255, 90, 50, 4, 255, 93, 53, 6, 255, 100, 53, 12, 255, 95, 54, 8, 255, 83, 51, 6, 255, 74, 49, 14, 255, 77, 52, 17, 255, 75, 50, 11, 255, 74, 53, 8, 255, 82, 57, 19, 255, 98, 58, 14, 255, 105, 62, 7, 255, 102, 64, 16, 255, 97, 63, 18, 255, 82, 56, 7, 255, 70, 55, 13, 255, 68, 57, 18, 255, 100, 63, 16, 255, 117, 72, 9, 255, 117, 64, 18, 255, 101, 62, 22, 255, 95, 64, 20, 255, 86, 59, 18, 255, 82, 66, 25, 255, 87, 67, 34, 255, 86, 69, 19, 255, 95, 74, 25, 255, 96, 73, 26, 255, 87, 74, 26, 255, 82, 71, 33, 255, 88, 74, 20, 255, 81, 75, 32, 255, 85, 78, 27, 255, 90, 77, 30, 255, 95, 73, 39, 255, 91, 76, 30, 255, 93, 84, 31, 255, 96, 81, 38, 255, 107, 87, 41, 255, 112, 87, 43, 255, 109, 88, 38, 255, 91, 82, 45, 255, 99, 85, 48, 255, 112, 89, 44, 255, 119, 99, 36, 255, 112, 99, 38, 255, 96, 91, 40, 255, 101, 95, 46, 255, 114, 101, 46, 255, 106, 95, 47, 255, 102, 95, 44, 255, 104, 98, 49, 255, 102, 98, 44, 255, 105, 102, 50, 255, 109, 99, 50, 255, 110, 98, 46, 255, 107, 103, 36, 255, 107, 101, 49, 255, 113, 101, 40, 255, 114, 100, 45, 255, 114, 99, 47, 255, 115, 99, 44, 255, 120, 103, 36, 255, 121, 98, 43, 255, 119, 98, 40, 255, 117, 97, 34, 255, 115, 95, 41, 255, 116, 97, 32, 255, 114, 95, 25, 255, 118, 92, 44, 255, 120, 93, 42, 255, 119, 90, 42, 255, 117, 89, 34, 255, 117, 88, 27, 255, 120, 87, 37, 255, 118, 86, 29, 255, 115, 85, 18, 255, 115, 84, 26, 255, 116, 82, 31, 255, 115, 83, 23, 255, 110, 82, 17, 255, 110, 79, 21, 255, 111, 80, 24, 255, 108, 76, 20, 255, 107, 75, 14, 255, 110, 76, 24, 255, 106, 71, 23, 255, 103, 67, 19, 255, 108, 71, 8, 255, 113, 68, 20, 255, 119, 70, 19, 255, 117, 69, 9, 255, 111, 66, 12, 255, 115, 70, 10, 255, 110, 64, 10, 255, 111, 65, 9, 255, 108, 62, 12, 255, 109, 62, 9, 255, 109, 60, 7, 255, 111, 62, 9, 255, 110, 58, 9, 255, 113, 60, 10, 255, 113, 60, 8, 255, 110, 58, 1, 255, 112, 60, 9, 255, 106, 54, 3, 255, 107, 55, 3, 255, 110, 54, 10, 255, 102, 54, 4, 255, 108, 53, 3, 255, 106, 50, 4, 255, 100, 52, 4, 255, 98, 48, 3, 255, 96, 52, 3, 255, 105, 50, 6, 255, 113, 46, 6, 255, 110, 45, 5, 255, 103, 49, 6, 255, 95, 45, 2, 255, 102, 45, 3, 255, 98, 46, 2, 255, 93, 47, 3, 255, 93, 43, 2, 255, 93, 44, 4, 255, 93, 45, 3, 255, 94, 43, 1, 255, 93, 44, 4, 255, 88, 44, 3, 255, 87, 39, 0, 255, 87, 40, 1, 255, 85, 43, 1, 255, 88, 41, 3, 255, 83, 36, 5, 255, 83, 37, 2, 255, 87, 38, 3, 255, 86, 38, 6, 255, 84, 38, 2, 255, 84, 38, 2, 255, 81, 35, 7, 255, 81, 37, 4, 255, 82, 36, 2, 255, 79, 26, 6, 255, 87, 34, 10, 255, 95, 41, 3, 255, 103, 35, 2, 255, 103, 34, 1, 255, 98, 34, 4, 255, 74, 33, 1, 255, 80, 38, 7, 255, 96, 31, 5, 255, 83, 37, 1, 255, 69, 30, 5, 255, 67, 25, 6, 255, 72, 27, 5, 255, 68, 26, 5, 255, 66, 26, 3, 255, 80, 32, 4, 255, 84, 31, 4, 255, 70, 22, 2, 255, 60, 25, 3, 255, 65, 27, 2, 255, 86, 30, 2, 255, 92, 33, 3, 255, 69, 25, 4, 255, 58, 24, 1, 255, 52, 23, 1, 255, 60, 21, 4, 255, 58, 23, 4, 255, 53, 22, 1, 255, 53, 26, 4, 255, 43, 19, 8, 255, 49, 19, 4, 255, 60, 20, 6, 255, 45, 21, 5, 255, 49, 24, 4, 255, 58, 21, 4, 255, 66, 21, 3, 255, 75, 26, 0, 255, 71, 23, 5, 255, 63, 15, 6, 255, 56, 17, 3, 255, 58, 22, 5, 255, 68, 25, 2, 255, 73, 16, 3, 255, 79, 21, 6, 255, 86, 27, 1, 255, 99, 29, 1, 255, 103, 31, 3, 255, 99, 27, 6, 255, 104, 25, 3, 255, 95, 26, 1, 255, 95, 31, 3, 255, 97, 28, 3, 255, 88, 22, 1, 255, 93, 26, 4, 255, 88, 21, 3, 255, 87, 21, 2, 255, 93, 22, 1, 255, 101, 22, 1, 255, 101, 24, 2, 255, 91, 24, 3, 255, 85, 22, 3, 255, 85, 24, 3, 255, 87, 23, 3, 255, 85, 21, 2, 255, 104, 23, 6, 255, 101, 28, 2, 255, 100, 30, 1, 255, 94, 27, 1, 255, 99, 22, 3, 255, 98, 28, 6, 255, 100, 29, 2, 255, 107, 28, 0, 255, 104, 30, 3, 255, 110, 29, 7, 255, 106, 28, 0, 255, 108, 33, 1, 255, 110, 33, 4, 255, 111, 27, 2, 255, 125, 33, 4, 255, 122, 32, 1, 255, 118, 36, 4, 255, 122, 32, 3, 255, 118, 34, 2, 255, 114, 34, 2, 255, 108, 34, 3, 255, 104, 31, 0, 255, 112, 33, 3, 255, 114, 36, 5, 255, 92, 25, 1, 255, 79, 19, 2, 255, 87, 19, 4, 255, 97, 26, 1, 255, 96, 26, 1, 255, 93, 22, 1, 255, 97, 30, 2, 255, 102, 29, 0, 255, 101, 28, 2, 255, 78, 22, 1, 255, 76, 17, 2, 255, 85, 19, 5, 255, 81, 25, 6, 255, 66, 16, 0, 255, 56, 14, 1, 255, 63, 15, 4, 255, 67, 14, 3, 255, 69, 16, 3, 255, 64, 12, 3, 255, 58, 12, 2, 255, 49, 14, 1, 255, 46, 18, 5, 255, 41, 11, 5, 255, 40, 10, 4, 255, 41, 12, 1, 255, 42, 9, 1, 255, 48, 12, 4, 255, 47, 14, 5, 255, 44, 12, 3, 255, 43, 11, 2, 255, 49, 12, 2, 255, 46, 14, 4, 255, 51, 14, 3, 255, 12, 9, 2, 255, 12, 8, 1, 255, 13, 7, 1, 255, 15, 9, 3, 255, 17, 10, 2, 255, 17, 11, 3, 255, 21, 10, 2, 255, 25, 10, 2, 255, 28, 14, 6, 255, 30, 14, 4, 255, 34, 19, 5, 255, 29, 15, 2, 255, 29, 13, 3, 255, 24, 13, 3, 255, 22, 12, 4, 255, 18, 8, 0, 255, 20, 9, 1, 255, 23, 12, 3, 255, 23, 15, 4, 255, 19, 11, 1, 255, 19, 9, 0, 255, 18, 10, 1, 255, 20, 12, 2, 255, 27, 12, 4, 255, 25, 12, 1, 255, 20, 11, 1, 255, 21, 11, 1, 255, 25, 15, 5, 255, 26, 16, 4, 255, 28, 16, 5, 255, 27, 13, 4, 255, 29, 13, 5, 255, 33, 13, 4, 255, 31, 13, 3, 255, 34, 16, 5, 255, 35, 18, 6, 255, 33, 15, 1, 255, 36, 19, 2, 255, 36, 17, 3, 255, 34, 15, 1, 255, 38, 20, 5, 255, 37, 18, 4, 255, 40, 21, 6, 255, 45, 23, 4, 255, 46, 25, 2, 255, 41, 22, 4, 255, 44, 25, 3, 255, 44, 27, 3, 255, 52, 26, 3, 255, 61, 28, 5, 255, 59, 33, 6, 255, 67, 36, 6, 255, 73, 41, 5, 255, 75, 38, 2, 255, 72, 34, 5, 255, 73, 42, 18, 255, 80, 48, 22, 255, 85, 48, 18, 255, 77, 44, 9, 255, 66, 37, 5, 255, 51, 33, 2, 255, 58, 31, 9, 255, 64, 27, 4, 255, 61, 25, 1, 255, 66, 27, 2, 255, 64, 32, 3, 255, 60, 31, 1, 255, 67, 32, 4, 255, 68, 31, 1, 255, 66, 34, 0, 255, 66, 35, 1, 255, 72, 36, 2, 255, 74, 38, 4, 255, 72, 38, 4, 255, 76, 42, 5, 255, 73, 40, 2, 255, 68, 40, 3, 255, 72, 43, 7, 255, 74, 41, 1, 255, 81, 45, 1, 255, 81, 43, 4, 255, 78, 40, 3, 255, 78, 46, 1, 255, 72, 43, 6, 255, 68, 40, 6, 255, 63, 38, 1, 255, 64, 39, 1, 255, 69, 39, 3, 255, 70, 38, 3, 255, 76, 43, 6, 255, 80, 44, 3, 255, 77, 43, 0, 255, 77, 40, 0, 255, 83, 44, 5, 255, 78, 44, 4, 255, 74, 49, 2, 255, 81, 45, 2, 255, 84, 44, 5, 255, 83, 42, 3, 255, 82, 42, 3, 255, 81, 45, 6, 255, 76, 42, 3, 255, 79, 41, 1, 255, 82, 46, 3, 255, 78, 40, 2, 255, 83, 43, 5, 255, 84, 42, 5, 255, 85, 39, 0, 255, 76, 45, 1, 255, 71, 43, 3, 255, 82, 39, 6, 255, 92, 41, 3, 255, 100, 40, 1, 255, 92, 43, 4, 255, 80, 42, 0, 255, 81, 43, 2, 255, 76, 42, 3, 255, 75, 39, 4, 255, 79, 39, 3, 255, 78, 42, 4, 255, 73, 40, 2, 255, 75, 39, 5, 255, 73, 39, 4, 255, 69, 37, 0, 255, 75, 41, 3, 255, 85, 40, 6, 255, 85, 37, 6, 255, 76, 40, 4, 255, 72, 39, 4, 255, 67, 37, 7, 255, 71, 40, 5, 255, 76, 43, 1, 255, 72, 44, 7, 255, 63, 40, 12, 255, 73, 41, 11, 255, 69, 45, 7, 255, 71, 48, 6, 255, 101, 50, 7, 255, 112, 49, 9, 255, 105, 52, 6, 255, 103, 52, 5, 255, 98, 52, 19, 255, 84, 49, 11, 255, 73, 50, 3, 255, 73, 52, 11, 255, 74, 52, 18, 255, 75, 55, 14, 255, 68, 49, 9, 255, 72, 50, 16, 255, 89, 59, 25, 255, 99, 64, 6, 255, 92, 56, 10, 255, 79, 51, 26, 255, 77, 57, 18, 255, 72, 58, 12, 255, 73, 58, 17, 255, 87, 59, 23, 255, 85, 62, 15, 255, 79, 60, 27, 255, 79, 60, 30, 255, 90, 69, 28, 255, 103, 69, 9, 255, 96, 66, 28, 255, 109, 76, 14, 255, 112, 74, 18, 255, 97, 70, 26, 255, 74, 69, 21, 255, 82, 71, 37, 255, 105, 79, 33, 255, 97, 79, 26, 255, 107, 82, 31, 255, 106, 80, 35, 255, 98, 82, 29, 255, 99, 86, 31, 255, 96, 82, 38, 255, 94, 80, 40, 255, 110, 90, 36, 255, 108, 93, 45, 255, 96, 85, 43, 255, 94, 85, 42, 255, 95, 87, 45, 255, 91, 89, 46, 255, 93, 92, 53, 255, 99, 93, 48, 255, 93, 88, 53, 255, 93, 89, 52, 255, 115, 100, 48, 255, 116, 99, 50, 255, 104, 96, 40, 255, 106, 100, 48, 255, 108, 101, 44, 255, 106, 102, 42, 255, 107, 99, 49, 255, 110, 101, 43, 255, 112, 102, 40, 255, 104, 97, 43, 255, 106, 100, 48, 255, 109, 100, 46, 255, 120, 101, 35, 255, 123, 102, 34, 255, 122, 102, 34, 255, 124, 98, 31, 255, 121, 100, 38, 255, 118, 97, 49, 255, 117, 93, 49, 255, 115, 94, 40, 255, 115, 93, 43, 255, 117, 93, 38, 255, 116, 91, 23, 255, 121, 91, 36, 255, 119, 90, 34, 255, 117, 87, 30, 255, 117, 85, 31, 255, 118, 88, 26, 255, 115, 86, 19, 255, 113, 84, 23, 255, 113, 81, 28, 255, 113, 80, 20, 255, 111, 77, 29, 255, 110, 78, 26, 255, 108, 78, 12, 255, 108, 76, 18, 255, 109, 76, 15, 255, 110, 73, 21, 255, 105, 71, 18, 255, 108, 74, 10, 255, 110, 72, 16, 255, 106, 66, 11, 255, 108, 68, 13, 255, 108, 70, 14, 255, 108, 68, 11, 255, 109, 65, 16, 255, 113, 69, 6, 255, 111, 65, 8, 255, 109, 61, 8, 255, 110, 60, 11, 255, 110, 60, 13, 255, 109, 62, 7, 255, 114, 60, 0, 255, 114, 58, 7, 255, 109, 58, 11, 255, 108, 59, 6, 255, 111, 57, 7, 255, 110, 54, 8, 255, 109, 54, 5, 255, 108, 49, 9, 255, 105, 53, 7, 255, 106, 50, 2, 255, 111, 50, 6, 255, 103, 50, 3, 255, 100, 47, 4, 255, 101, 49, 5, 255, 100, 47, 3, 255, 103, 48, 4, 255, 100, 46, 3, 255, 96, 46, 1, 255, 90, 46, 4, 255, 96, 46, 7, 255, 95, 46, 5, 255, 91, 44, 3, 255, 94, 44, 4, 255, 86, 42, 1, 255, 93, 43, 3, 255, 96, 43, 3, 255, 90, 46, 5, 255, 86, 41, 2, 255, 86, 38, 2, 255, 90, 41, 5, 255, 91, 39, 3, 255, 93, 39, 2, 255, 86, 37, 7, 255, 81, 37, 3, 255, 82, 38, 4, 255, 81, 34, 4, 255, 86, 38, 4, 255, 86, 39, 6, 255, 80, 35, 3, 255, 77, 33, 2, 255, 80, 34, 4, 255, 78, 31, 6, 255, 80, 33, 2, 255, 83, 34, 1, 255, 84, 30, 3, 255, 78, 30, 1, 255, 79, 33, 5, 255, 73, 31, 2, 255, 92, 37, 4, 255, 113, 37, 4, 255, 113, 35, 2, 255, 105, 37, 3, 255, 103, 34, 2, 255, 111, 36, 4, 255, 109, 32, 3, 255, 80, 26, 1, 255, 68, 22, 0, 255, 71, 25, 4, 255, 64, 25, 4, 255, 59, 26, 2, 255, 66, 24, 0, 255, 74, 24, 0, 255, 74, 28, 2, 255, 75, 27, 4, 255, 70, 21, 1, 255, 69, 25, 6, 255, 69, 23, 5, 255, 65, 24, 4, 255, 66, 25, 4, 255, 61, 27, 2, 255, 64, 28, 7, 255, 62, 20, 1, 255, 47, 20, 1, 255, 58, 18, 1, 255, 55, 24, 4, 255, 53, 20, 5, 255, 57, 19, 2, 255, 64, 16, 3, 255, 52, 18, 8, 255, 41, 20, 5, 255, 52, 21, 2, 255, 62, 22, 5, 255, 51, 23, 1, 255, 52, 19, 5, 255, 42, 19, 4, 255, 52, 23, 4, 255, 77, 22, 5, 255, 70, 20, 3, 255, 63, 21, 1, 255, 81, 25, 4, 255, 69, 20, 9, 255, 70, 21, 3, 255, 90, 25, 0, 255, 76, 17, 2, 255, 69, 18, 1, 255, 67, 20, 0, 255, 70, 18, 4, 255, 73, 17, 5, 255, 73, 16, 3, 255, 75, 19, 2, 255, 78, 23, 4, 255, 73, 21, 2, 255, 74, 19, 3, 255, 74, 19, 5, 255, 66, 17, 4, 255, 75, 16, 4, 255, 83, 22, 3, 255, 85, 26, 3, 255, 79, 26, 0, 255, 91, 21, 0, 255, 88, 27, 4, 255, 82, 20, 1, 255, 91, 21, 3, 255, 93, 21, 1, 255, 95, 27, 4, 255, 94, 25, 0, 255, 97, 25, 1, 255, 102, 26, 3, 255, 106, 26, 3, 255, 113, 29, 4, 255, 117, 31, 2, 255, 118, 33, 3, 255, 121, 30, 1, 255, 120, 35, 1, 255, 116, 35, 1, 255, 110, 31, 0, 255, 109, 33, 2, 255, 105, 33, 3, 255, 111, 34, 2, 255, 105, 29, 1, 255, 91, 24, 6, 255, 78, 19, 3, 255, 81, 23, 0, 255, 93, 22, 0, 255, 97, 27, 5, 255, 90, 27, 2, 255, 98, 25, 2, 255, 97, 21, 1, 255, 92, 28, 7, 255, 81, 21, 3, 255, 75, 17, 1, 255, 87, 20, 7, 255, 82, 18, 3, 255, 76, 20, 4, 255, 59, 15, 0, 255, 52, 13, 0, 255, 61, 16, 1, 255, 70, 16, 3, 255, 67, 17, 4, 255, 54, 14, 2, 255, 50, 13, 3, 255, 43, 11, 4, 255, 38, 10, 2, 255, 43, 14, 4, 255, 41, 12, 1, 255, 40, 11, 1, 255, 43, 12, 3, 255, 44, 12, 2, 255, 47, 12, 3, 255, 48, 10, 1, 255, 47, 15, 4, 255, 48, 13, 2, 255, 9, 6, 1, 255, 11, 7, 1, 255, 15, 9, 3, 255, 18, 9, 4, 255, 16, 7, 1, 255, 14, 9, 1, 255, 24, 16, 5, 255, 22, 11, 1, 255, 27, 15, 6, 255, 28, 13, 4, 255, 32, 16, 4, 255, 32, 16, 5, 255, 29, 11, 3, 255, 23, 11, 3, 255, 21, 12, 3, 255, 19, 10, 1, 255, 21, 11, 2, 255, 24, 14, 4, 255, 22, 14, 3, 255, 23, 14, 5, 255, 20, 11, 2, 255, 17, 10, 0, 255, 22, 12, 3, 255, 32, 12, 6, 255, 30, 13, 5, 255, 23, 13, 2, 255, 29, 15, 6, 255, 30, 19, 9, 255, 23, 15, 3, 255, 25, 14, 4, 255, 29, 15, 6, 255, 28, 12, 3, 255, 31, 14, 3, 255, 30, 13, 3, 255, 30, 13, 4, 255, 32, 15, 3, 255, 34, 18, 4, 255, 35, 18, 4, 255, 31, 18, 2, 255, 36, 21, 5, 255, 32, 16, 1, 255, 32, 18, 3, 255, 35, 22, 6, 255, 34, 20, 1, 255, 37, 20, 1, 255, 44, 22, 6, 255, 49, 23, 2, 255, 49, 28, 0, 255, 56, 28, 3, 255, 65, 25, 7, 255, 65, 29, 1, 255, 54, 31, 3, 255, 59, 37, 6, 255, 64, 35, 3, 255, 68, 36, 14, 255, 70, 44, 23, 255, 74, 49, 23, 255, 79, 48, 13, 255, 74, 38, 6, 255, 66, 35, 9, 255, 58, 34, 4, 255, 59, 32, 4, 255, 62, 30, 1, 255, 60, 28, 7, 255, 56, 28, 1, 255, 64, 32, 0, 255, 67, 34, 2, 255, 62, 30, 5, 255, 63, 32, 11, 255, 62, 32, 4, 255, 69, 39, 1, 255, 72, 40, 1, 255, 70, 38, 1, 255, 71, 40, 2, 255, 69, 39, 2, 255, 69, 39, 2, 255, 72, 40, 3, 255, 74, 41, 3, 255, 71, 40, 1, 255, 81, 43, 3, 255, 81, 40, 2, 255, 74, 38, 2, 255, 78, 43, 5, 255, 72, 37, 2, 255, 69, 36, 1, 255, 68, 38, 1, 255, 73, 42, 3, 255, 72, 39, 1, 255, 74, 38, 0, 255, 72, 42, 1, 255, 76, 47, 5, 255, 83, 46, 4, 255, 79, 40, 2, 255, 76, 40, 3, 255, 73, 40, 3, 255, 72, 39, 1, 255, 72, 43, 3, 255, 74, 38, 1, 255, 74, 36, 0, 255, 77, 39, 3, 255, 76, 38, 2, 255, 82, 37, 4, 255, 89, 40, 3, 255, 91, 40, 4, 255, 102, 37, 6, 255, 86, 39, 3, 255, 74, 43, 3, 255, 79, 40, 3, 255, 75, 45, 5, 255, 73, 39, 2, 255, 83, 37, 3, 255, 98, 41, 5, 255, 93, 40, 1, 255, 98, 42, 4, 255, 95, 38, 0, 255, 77, 42, 3, 255, 72, 41, 3, 255, 79, 40, 7, 255, 78, 37, 5, 255, 71, 39, 4, 255, 69, 38, 3, 255, 72, 40, 2, 255, 73, 39, 0, 255, 77, 37, 4, 255, 66, 34, 4, 255, 63, 38, 8, 255, 71, 41, 10, 255, 69, 39, 2, 255, 72, 40, 1, 255, 74, 39, 5, 255, 76, 42, 2, 255, 73, 45, 1, 255, 71, 46, 2, 255, 65, 41, 3, 255, 68, 46, 3, 255, 62, 44, 8, 255, 82, 47, 11, 255, 106, 48, 5, 255, 107, 51, 5, 255, 108, 57, 10, 255, 110, 57, 9, 255, 97, 53, 6, 255, 82, 52, 7, 255, 81, 55, 13, 255, 95, 61, 6, 255, 101, 59, 6, 255, 84, 49, 18, 255, 75, 52, 17, 255, 80, 56, 10, 255, 82, 61, 13, 255, 73, 59, 13, 255, 74, 59, 15, 255, 72, 58, 20, 255, 71, 61, 17, 255, 72, 65, 15, 255, 72, 60, 23, 255, 71, 55, 15, 255, 76, 65, 16, 255, 87, 67, 27, 255, 80, 66, 27, 255, 106, 74, 17, 255, 116, 72, 21, 255, 113, 75, 21, 255, 109, 75, 13, 255, 86, 68, 28, 255, 80, 72, 30, 255, 83, 69, 40, 255, 86, 68, 36, 255, 98, 78, 25, 255, 92, 75, 29, 255, 107, 80, 34, 255, 102, 81, 33, 255, 98, 85, 36, 255, 105, 81, 38, 255, 97, 80, 40, 255, 92, 84, 42, 255, 88, 81, 38, 255, 90, 84, 43, 255, 92, 89, 38, 255, 99, 88, 49, 255, 93, 91, 47, 255, 90, 91, 43, 255, 102, 93, 52, 255, 104, 97, 49, 255, 94, 92, 52, 255, 92, 93, 55, 255, 105, 97, 45, 255, 119, 101, 47, 255, 116, 104, 45, 255, 114, 101, 48, 255, 118, 97, 53, 255, 122, 101, 44, 255, 116, 101, 47, 255, 109, 104, 46, 255, 116, 108, 47, 255, 112, 98, 46, 255, 109, 99, 48, 255, 106, 103, 43, 255, 116, 104, 39, 255, 125, 104, 37, 255, 126, 102, 38, 255, 121, 102, 39, 255, 122, 98, 46, 255, 122, 100, 26, 255, 115, 95, 40, 255, 116, 96, 37, 255, 115, 93, 41, 255, 115, 94, 28, 255, 117, 93, 27, 255, 119, 93, 24, 255, 117, 88, 27, 255, 117, 88, 34, 255, 115, 85, 26, 255, 117, 88, 23, 255, 114, 86, 22, 255, 110, 82, 21, 255, 114, 84, 26, 255, 114, 79, 26, 255, 112, 77, 26, 255, 108, 78, 17, 255, 109, 79, 18, 255, 109, 78, 15, 255, 108, 73, 20, 255, 108, 72, 15, 255, 106, 75, 13, 255, 108, 71, 12, 255, 110, 71, 8, 255, 110, 70, 10, 255, 104, 66, 12, 255, 107, 66, 12, 255, 106, 64, 10, 255, 108, 64, 19, 255, 109, 62, 4, 255, 109, 62, 9, 255, 109, 63, 7, 255, 110, 61, 8, 255, 110, 60, 5, 255, 108, 60, 7, 255, 114, 61, 1, 255, 114, 58, 10, 255, 110, 58, 10, 255, 107, 57, 7, 255, 108, 53, 5, 255, 107, 54, 8, 255, 103, 54, 6, 255, 104, 51, 10, 255, 102, 54, 8, 255, 99, 51, 1, 255, 107, 51, 4, 255, 99, 48, 0, 255, 100, 50, 5, 255, 102, 49, 5, 255, 100, 48, 5, 255, 96, 47, 3, 255, 94, 42, 2, 255, 101, 45, 7, 255, 89, 43, 4, 255, 91, 47, 5, 255, 93, 47, 6, 255, 93, 44, 3, 255, 96, 43, 3, 255, 99, 48, 6, 255, 107, 42, 5, 255, 107, 43, 7, 255, 96, 48, 6, 255, 92, 44, 3, 255, 90, 43, 3, 255, 98, 44, 5, 255, 103, 39, 3, 255, 98, 39, 1, 255, 89, 37, 4, 255, 82, 36, 2, 255, 81, 35, 1, 255, 84, 33, 3, 255, 92, 39, 5, 255, 85, 31, 3, 255, 84, 34, 1, 255, 83, 34, 3, 255, 84, 33, 9, 255, 84, 35, 5, 255, 82, 35, 1, 255, 78, 31, 4, 255, 74, 26, 6, 255, 74, 29, 1, 255, 80, 34, 2, 255, 79, 32, 2, 255, 82, 32, 1, 255, 92, 37, 2, 255, 102, 35, 7, 255, 106, 34, 2, 255, 103, 35, 3, 255, 100, 35, 4, 255, 91, 31, 0, 255, 76, 27, 5, 255, 70, 30, 4, 255, 77, 31, 2, 255, 75, 30, 4, 255, 67, 29, 2, 255, 68, 27, 3, 255, 69, 23, 7, 255, 63, 20, 6, 255, 69, 26, 1, 255, 68, 26, 1, 255, 60, 25, 1, 255, 60, 26, 3, 255, 58, 25, 1, 255, 61, 23, 2, 255, 65, 24, 2, 255, 67, 26, 2, 255, 62, 25, 0, 255, 61, 23, 5, 255, 56, 22, 2, 255, 55, 20, 2, 255, 56, 20, 8, 255, 58, 22, 2, 255, 59, 21, 3, 255, 53, 23, 4, 255, 55, 25, 2, 255, 75, 23, 0, 255, 77, 25, 3, 255, 80, 29, 8, 255, 66, 21, 5, 255, 49, 19, 3, 255, 51, 24, 4, 255, 63, 21, 3, 255, 55, 16, 0, 255, 53, 21, 1, 255, 69, 23, 2, 255, 62, 21, 2, 255, 65, 23, 4, 255, 77, 22, 6, 255, 69, 19, 1, 255, 69, 22, 0, 255, 72, 20, 3, 255, 68, 20, 4, 255, 65, 21, 3, 255, 62, 17, 0, 255, 65, 19, 0, 255, 66, 19, 1, 255, 68, 22, 3, 255, 71, 21, 0, 255, 69, 22, 0, 255, 66, 24, 1, 255, 67, 20, 1, 255, 70, 18, 1, 255, 76, 22, 4, 255, 82, 22, 7, 255, 70, 14, 4, 255, 55, 17, 6, 255, 53, 11, 4, 255, 53, 15, 3, 255, 61, 17, 5, 255, 72, 14, 4, 255, 79, 17, 1, 255, 94, 25, 2, 255, 98, 22, 1, 255, 99, 22, 3, 255, 93, 21, 3, 255, 94, 25, 2, 255, 106, 24, 4, 255, 101, 25, 1, 255, 111, 34, 4, 255, 114, 30, 4, 255, 102, 28, 3, 255, 109, 25, 3, 255, 109, 31, 3, 255, 104, 32, 2, 255, 108, 29, 4, 255, 104, 28, 5, 255, 82, 22, 1, 255, 71, 16, 2, 255, 83, 23, 4, 255, 97, 25, 5, 255, 98, 24, 1, 255, 100, 25, 1, 255, 95, 26, 1, 255, 95, 28, 2, 255, 94, 26, 1, 255, 84, 23, 1, 255, 65, 15, 1, 255, 63, 17, 0, 255, 80, 16, 1, 255, 73, 18, 3, 255, 69, 16, 7, 255, 54, 11, 1, 255, 47, 15, 2, 255, 56, 19, 5, 255, 67, 14, 4, 255, 67, 14, 3, 255, 63, 13, 1, 255, 54, 12, 2, 255, 48, 13, 3, 255, 46, 15, 4, 255, 43, 15, 4, 255, 44, 15, 4, 255, 43, 11, 1, 255, 45, 10, 1, 255, 45, 10, 2, 255, 43, 14, 5, 255, 45, 12, 4, 255, 16, 10, 3, 255, 13, 9, 2, 255, 14, 8, 2, 255, 21, 10, 6, 255, 19, 8, 2, 255, 15, 10, 2, 255, 24, 16, 5, 255, 26, 13, 3, 255, 26, 13, 4, 255, 24, 12, 2, 255, 25, 15, 3, 255, 23, 13, 3, 255, 21, 12, 2, 255, 22, 9, 4, 255, 18, 10, 2, 255, 22, 14, 4, 255, 22, 13, 4, 255, 20, 10, 1, 255, 18, 10, 0, 255, 22, 12, 3, 255, 21, 11, 2, 255, 21, 13, 3, 255, 24, 13, 4, 255, 33, 11, 5, 255, 30, 12, 4, 255, 28, 14, 3, 255, 31, 14, 4, 255, 28, 15, 3, 255, 24, 13, 1, 255, 25, 16, 4, 255, 27, 16, 4, 255, 31, 17, 5, 255, 31, 17, 3, 255, 29, 15, 1, 255, 29, 15, 2, 255, 29, 15, 4, 255, 30, 17, 5, 255, 28, 16, 3, 255, 34, 19, 4, 255, 32, 19, 2, 255, 27, 19, 4, 255, 28, 15, 2, 255, 36, 16, 2, 255, 39, 19, 4, 255, 36, 20, 7, 255, 32, 22, 8, 255, 47, 22, 3, 255, 54, 23, 5, 255, 54, 24, 4, 255, 57, 24, 1, 255, 61, 27, 2, 255, 55, 25, 4, 255, 60, 30, 8, 255, 58, 32, 4, 255, 63, 36, 6, 255, 72, 38, 15, 255, 70, 40, 18, 255, 65, 41, 20, 255, 63, 39, 12, 255, 59, 37, 5, 255, 65, 35, 5, 255, 60, 31, 0, 255, 53, 28, 2, 255, 54, 29, 4, 255, 65, 30, 3, 255, 59, 27, 1, 255, 60, 32, 3, 255, 59, 33, 1, 255, 64, 35, 4, 255, 68, 35, 3, 255, 70, 36, 1, 255, 76, 42, 5, 255, 73, 39, 2, 255, 70, 36, 0, 255, 65, 33, 0, 255, 72, 34, 2, 255, 77, 35, 2, 255, 76, 41, 0, 255, 78, 40, 5, 255, 77, 43, 7, 255, 74, 38, 2, 255, 78, 37, 2, 255, 68, 32, 3, 255, 67, 34, 4, 255, 67, 35, 1, 255, 75, 42, 5, 255, 75, 40, 4, 255, 70, 36, 1, 255, 68, 39, 1, 255, 67, 40, 2, 255, 69, 37, 2, 255, 71, 36, 1, 255, 74, 38, 3, 255, 67, 34, 1, 255, 66, 35, 3, 255, 65, 37, 4, 255, 73, 37, 3, 255, 70, 37, 3, 255, 69, 39, 1, 255, 70, 41, 2, 255, 73, 38, 1, 255, 81, 38, 3, 255, 97, 49, 6, 255, 105, 58, 12, 255, 85, 33, 1, 255, 73, 37, 4, 255, 67, 42, 6, 255, 76, 38, 2, 255, 71, 41, 2, 255, 71, 37, 4, 255, 79, 39, 4, 255, 79, 36, 3, 255, 74, 36, 2, 255, 76, 39, 3, 255, 78, 35, 2, 255, 70, 37, 1, 255, 68, 39, 1, 255, 71, 36, 2, 255, 74, 37, 4, 255, 67, 37, 3, 255, 63, 34, 1, 255, 74, 42, 6, 255, 75, 41, 5, 255, 72, 39, 2, 255, 67, 36, 3, 255, 71, 35, 5, 255, 77, 37, 5, 255, 71, 38, 1, 255, 70, 37, 1, 255, 70, 36, 6, 255, 71, 41, 9, 255, 69, 42, 5, 255, 69, 43, 5, 255, 67, 43, 3, 255, 64, 45, 6, 255, 66, 44, 7, 255, 73, 41, 12, 255, 101, 53, 11, 255, 106, 54, 9, 255, 104, 55, 10, 255, 110, 51, 8, 255, 89, 49, 11, 255, 89, 52, 6, 255, 110, 61, 11, 255, 106, 54, 10, 255, 83, 51, 8, 255, 75, 52, 15, 255, 76, 53, 13, 255, 80, 59, 14, 255, 77, 58, 5, 255, 72, 50, 18, 255, 80, 58, 28, 255, 79, 62, 13, 255, 74, 61, 13, 255, 73, 63, 8, 255, 75, 64, 17, 255, 79, 66, 13, 255, 88, 63, 22, 255, 74, 60, 31, 255, 71, 68, 30, 255, 107, 72, 24, 255, 120, 71, 38, 255, 125, 67, 29, 255, 116, 76, 23, 255, 89, 73, 24, 255, 95, 75, 23, 255, 96, 71, 37, 255, 76, 70, 33, 255, 82, 79, 25, 255, 80, 72, 38, 255, 78, 76, 39, 255, 77, 80, 25, 255, 100, 80, 40, 255, 113, 86, 43, 255, 112, 90, 50, 255, 110, 90, 43, 255, 95, 85, 48, 255, 92, 84, 50, 255, 91, 90, 44, 255, 90, 90, 51, 255, 89, 90, 43, 255, 100, 92, 45, 255, 114, 94, 44, 255, 117, 96, 46, 255, 108, 101, 45, 255, 96, 96, 51, 255, 98, 97, 49, 255, 111, 98, 57, 255, 113, 100, 50, 255, 119, 103, 61, 255, 122, 102, 63, 255, 121, 104, 39, 255, 123, 108, 37, 255, 116, 103, 52, 255, 120, 106, 45, 255, 117, 102, 46, 255, 107, 99, 48, 255, 106, 102, 45, 255, 111, 101, 46, 255, 114, 97, 60, 255, 115, 99, 47, 255, 117, 100, 34, 255, 117, 99, 29, 255, 120, 98, 37, 255, 118, 99, 31, 255, 117, 99, 36, 255, 115, 96, 29, 255, 112, 94, 19, 255, 115, 92, 33, 255, 115, 88, 29, 255, 116, 88, 24, 255, 117, 88, 32, 255, 114, 86, 26, 255, 117, 86, 29, 255, 115, 84, 31, 255, 111, 82, 22, 255, 113, 84, 18, 255, 112, 81, 13, 255, 111, 79, 19, 255, 110, 79, 21, 255, 107, 76, 23, 255, 107, 75, 16, 255, 109, 76, 9, 255, 111, 73, 17, 255, 115, 70, 20, 255, 110, 70, 16, 255, 109, 71, 12, 255, 113, 70, 10, 255, 112, 66, 9, 255, 109, 68, 5, 255, 107, 63, 12, 255, 106, 60, 11, 255, 111, 61, 15, 255, 110, 58, 14, 255, 109, 60, 12, 255, 110, 61, 13, 255, 114, 62, 9, 255, 112, 57, 10, 255, 110, 58, 2, 255, 111, 56, 16, 255, 113, 56, 10, 255, 111, 57, 0, 255, 109, 55, 11, 255, 106, 52, 9, 255, 104, 53, 5, 255, 104, 48, 7, 255, 98, 47, 0, 255, 103, 56, 6, 255, 100, 47, 2, 255, 106, 50, 3, 255, 107, 46, 3, 255, 104, 44, 2, 255, 101, 46, 5, 255, 95, 47, 6, 255, 95, 48, 9, 255, 93, 42, 5, 255, 94, 42, 3, 255, 88, 44, 3, 255, 89, 46, 3, 255, 97, 46, 3, 255, 106, 46, 5, 255, 111, 44, 3, 255, 108, 41, 4, 255, 99, 42, 2, 255, 100, 43, 1, 255, 106, 43, 2, 255, 107, 43, 2, 255, 107, 44, 2, 255, 112, 42, 3, 255, 109, 42, 3, 255, 92, 36, 3, 255, 87, 39, 3, 255, 89, 39, 3, 255, 89, 37, 6, 255, 84, 35, 0, 255, 87, 33, 5, 255, 88, 37, 1, 255, 85, 36, 3, 255, 79, 29, 3, 255, 87, 37, 5, 255, 81, 34, 1, 255, 79, 34, 2, 255, 77, 33, 2, 255, 78, 29, 4, 255, 75, 28, 2, 255, 80, 31, 2, 255, 76, 30, 1, 255, 72, 29, 2, 255, 81, 34, 4, 255, 87, 33, 1, 255, 84, 32, 3, 255, 84, 34, 5, 255, 79, 28, 1, 255, 80, 28, 5, 255, 75, 31, 7, 255, 75, 31, 4, 255, 74, 28, 2, 255, 73, 28, 0, 255, 77, 29, 1, 255, 75, 24, 1, 255, 70, 22, 2, 255, 78, 26, 5, 255, 68, 29, 4, 255, 62, 26, 2, 255, 71, 20, 3, 255, 71, 24, 5, 255, 60, 27, 1, 255, 64, 21, 5, 255, 64, 24, 6, 255, 58, 25, 1, 255, 65, 23, 6, 255, 59, 27, 2, 255, 64, 26, 1, 255, 62, 25, 5, 255, 58, 30, 2, 255, 66, 31, 1, 255, 71, 27, 1, 255, 71, 26, 0, 255, 75, 27, 3, 255, 70, 25, 5, 255, 81, 30, 3, 255, 73, 30, 6, 255, 67, 23, 3, 255, 71, 22, 2, 255, 67, 24, 1, 255, 62, 25, 2, 255, 60, 21, 1, 255, 72, 20, 8, 255, 70, 23, 3, 255, 50, 22, 0, 255, 52, 19, 6, 255, 72, 20, 2, 255, 68, 24, 2, 255, 59, 20, 1, 255, 51, 18, 2, 255, 57, 19, 6, 255, 66, 18, 5, 255, 65, 18, 4, 255, 55, 19, 2, 255, 55, 18, 0, 255, 64, 21, 2, 255, 65, 19, 1, 255, 67, 16, 3, 255, 71, 19, 7, 255, 62, 19, 4, 255, 58, 23, 0, 255, 79, 22, 6, 255, 43, 13, 3, 255, 23, 10, 4, 255, 41, 14, 7, 255, 39, 19, 4, 255, 40, 14, 3, 255, 40, 13, 5, 255, 58, 16, 3, 255, 83, 20, 2, 255, 94, 25, 0, 255, 85, 25, 3, 255, 65, 21, 0, 255, 54, 19, 1, 255, 58, 14, 3, 255, 55, 12, 2, 255, 62, 12, 1, 255, 77, 17, 3, 255, 94, 27, 5, 255, 100, 22, 1, 255, 102, 25, 5, 255, 95, 27, 2, 255, 97, 25, 1, 255, 96, 28, 2, 255, 81, 24, 4, 255, 69, 15, 3, 255, 76, 19, 6, 255, 84, 22, 4, 255, 90, 26, 2, 255, 100, 28, 3, 255, 101, 25, 5, 255, 91, 26, 4, 255, 84, 23, 2, 255, 83, 22, 2, 255, 74, 20, 2, 255, 58, 12, 0, 255, 50, 16, 4, 255, 69, 18, 6, 255, 79, 12, 4, 255, 69, 13, 9, 255, 56, 12, 2, 255, 50, 11, 0, 255, 56, 13, 3, 255, 63, 16, 5, 255, 61, 15, 2, 255, 61, 15, 2, 255, 61, 15, 3, 255, 54, 14, 2, 255, 46, 10, 0, 255, 49, 14, 4, 255, 48, 13, 4, 255, 44, 8, 1, 255, 45, 9, 3, 255, 39, 10, 3, 255, 46, 11, 6, 255, 15, 6, 0, 255, 14, 10, 1, 255, 15, 9, 3, 255, 20, 10, 5, 255, 20, 8, 2, 255, 20, 11, 4, 255, 18, 13, 2, 255, 20, 13, 2, 255, 19, 11, 3, 255, 22, 13, 5, 255, 26, 16, 5, 255, 24, 11, 2, 255, 27, 13, 6, 255, 18, 10, 3, 255, 15, 9, 1, 255, 20, 12, 4, 255, 17, 8, 0, 255, 19, 10, 2, 255, 18, 12, 5, 255, 18, 10, 2, 255, 19, 9, 1, 255, 21, 11, 3, 255, 22, 13, 3, 255, 26, 11, 2, 255, 26, 11, 2, 255, 27, 13, 4, 255, 31, 14, 5, 255, 26, 11, 2, 255, 27, 14, 4, 255, 27, 15, 4, 255, 28, 16, 3, 255, 29, 16, 3, 255, 27, 14, 0, 255, 26, 12, 0, 255, 30, 17, 3, 255, 31, 17, 5, 255, 29, 16, 4, 255, 30, 18, 5, 255, 32, 20, 3, 255, 33, 18, 4, 255, 31, 16, 6, 255, 31, 16, 4, 255, 34, 16, 3, 255, 37, 16, 2, 255, 41, 18, 5, 255, 37, 19, 5, 255, 41, 22, 9, 255, 49, 24, 6, 255, 50, 25, 3, 255, 52, 26, 7, 255, 61, 25, 8, 255, 61, 28, 2, 255, 58, 26, 3, 255, 54, 26, 5, 255, 57, 30, 5, 255, 61, 29, 3, 255, 59, 29, 4, 255, 50, 26, 6, 255, 49, 28, 3, 255, 51, 29, 2, 255, 62, 29, 6, 255, 63, 29, 0, 255, 56, 26, 4, 255, 57, 26, 4, 255, 67, 27, 2, 255, 59, 28, 9, 255, 53, 29, 7, 255, 66, 37, 4, 255, 70, 36, 0, 255, 72, 38, 3, 255, 69, 35, 5, 255, 68, 35, 5, 255, 69, 31, 2, 255, 74, 33, 4, 255, 67, 34, 4, 255, 67, 33, 4, 255, 74, 32, 5, 255, 72, 36, 2, 255, 62, 32, 3, 255, 62, 30, 3, 255, 66, 31, 1, 255, 61, 32, 1, 255, 60, 32, 5, 255, 63, 35, 8, 255, 60, 34, 4, 255, 62, 33, 3, 255, 65, 34, 4, 255, 64, 35, 3, 255, 61, 35, 4, 255, 60, 33, 4, 255, 64, 36, 5, 255, 63, 38, 2, 255, 68, 38, 3, 255, 72, 34, 5, 255, 72, 36, 6, 255, 67, 35, 3, 255, 72, 33, 1, 255, 74, 36, 3, 255, 71, 38, 1, 255, 68, 38, 0, 255, 69, 40, 1, 255, 71, 38, 0, 255, 78, 42, 1, 255, 71, 40, 1, 255, 73, 43, 3, 255, 72, 39, 0, 255, 70, 37, 2, 255, 73, 39, 6, 255, 62, 37, 2, 255, 69, 42, 5, 255, 76, 43, 3, 255, 67, 35, 0, 255, 73, 36, 3, 255, 70, 41, 1, 255, 70, 41, 2, 255, 70, 37, 5, 255, 66, 38, 3, 255, 68, 38, 2, 255, 73, 36, 4, 255, 70, 37, 5, 255, 67, 38, 2, 255, 68, 38, 4, 255, 70, 35, 6, 255, 70, 36, 0, 255, 68, 41, 1, 255, 68, 39, 0, 255, 72, 38, 0, 255, 77, 43, 5, 255, 85, 42, 5, 255, 70, 40, 6, 255, 66, 39, 7, 255, 68, 39, 3, 255, 66, 40, 4, 255, 70, 44, 3, 255, 69, 45, 3, 255, 67, 47, 6, 255, 74, 48, 8, 255, 78, 42, 14, 255, 84, 49, 8, 255, 78, 50, 4, 255, 67, 45, 9, 255, 96, 59, 15, 255, 104, 59, 14, 255, 114, 57, 9, 255, 96, 53, 5, 255, 73, 54, 11, 255, 69, 53, 8, 255, 73, 54, 10, 255, 66, 58, 10, 255, 71, 56, 17, 255, 81, 57, 18, 255, 73, 60, 17, 255, 68, 59, 23, 255, 68, 61, 20, 255, 80, 64, 15, 255, 89, 60, 18, 255, 87, 63, 21, 255, 91, 63, 27, 255, 79, 62, 31, 255, 72, 64, 27, 255, 84, 65, 33, 255, 104, 72, 25, 255, 115, 75, 22, 255, 99, 73, 25, 255, 91, 71, 27, 255, 96, 74, 26, 255, 102, 77, 29, 255, 90, 73, 34, 255, 83, 74, 44, 255, 87, 79, 45, 255, 88, 80, 35, 255, 80, 81, 31, 255, 93, 85, 40, 255, 117, 88, 29, 255, 118, 85, 39, 255, 127, 89, 39, 255, 120, 91, 41, 255, 114, 90, 50, 255, 105, 91, 44, 255, 90, 91, 44, 255, 90, 89, 49, 255, 94, 94, 51, 255, 89, 91, 44, 255, 103, 94, 55, 255, 109, 101, 57, 255, 97, 93, 53, 255, 97, 97, 40, 255, 109, 103, 54, 255, 123, 105, 55, 255, 122, 101, 56, 255, 123, 105, 58, 255, 120, 104, 48, 255, 123, 106, 48, 255, 124, 102, 51, 255, 121, 102, 48, 255, 114, 104, 53, 255, 107, 103, 40, 255, 109, 102, 47, 255, 112, 102, 46, 255, 109, 104, 41, 255, 108, 103, 37, 255, 113, 99, 38, 255, 110, 98, 27, 255, 113, 99, 32, 255, 117, 97, 36, 255, 115, 93, 45, 255, 115, 93, 41, 255, 111, 93, 28, 255, 113, 94, 23, 255, 114, 89, 32, 255, 119, 90, 42, 255, 113, 87, 29, 255, 113, 86, 23, 255, 115, 85, 24, 255, 113, 84, 28, 255, 111, 81, 28, 255, 111, 79, 26, 255, 111, 79, 18, 255, 111, 77, 21, 255, 111, 77, 16, 255, 110, 74, 15, 255, 111, 72, 21, 255, 112, 75, 9, 255, 113, 74, 15, 255, 111, 70, 13, 255, 113, 71, 11, 255, 109, 68, 13, 255, 105, 66, 14, 255, 106, 67, 10, 255, 111, 65, 13, 255, 111, 63, 19, 255, 112, 62, 15, 255, 110, 58, 16, 255, 111, 60, 12, 255, 110, 59, 8, 255, 110, 62, 5, 255, 112, 60, 3, 255, 114, 56, 6, 255, 111, 54, 8, 255, 110, 54, 7, 255, 110, 54, 5, 255, 108, 54, 2, 255, 107, 55, 7, 255, 110, 51, 6, 255, 107, 49, 2, 255, 116, 50, 9, 255, 114, 54, 8, 255, 104, 54, 3, 255, 103, 49, 6, 255, 101, 47, 2, 255, 102, 50, 4, 255, 101, 49, 5, 255, 100, 47, 5, 255, 97, 43, 4, 255, 97, 43, 6, 255, 94, 39, 3, 255, 98, 45, 6, 255, 90, 47, 4, 255, 90, 45, 2, 255, 100, 44, 3, 255, 108, 47, 5, 255, 111, 44, 2, 255, 102, 45, 2, 255, 97, 46, 2, 255, 105, 44, 2, 255, 112, 42, 1, 255, 117, 42, 4, 255, 113, 43, 6, 255, 104, 40, 2, 255, 98, 41, 3, 255, 87, 38, 3, 255, 86, 38, 1, 255, 91, 36, 1, 255, 91, 34, 4, 255, 88, 36, 4, 255, 86, 37, 2, 255, 82, 34, 0, 255, 82, 36, 4, 255, 85, 35, 5, 255, 82, 33, 0, 255, 84, 36, 4, 255, 86, 40, 6, 255, 82, 38, 0, 255, 84, 34, 2, 255, 76, 34, 6, 255, 75, 30, 9, 255, 75, 26, 4, 255, 75, 28, 0, 255, 81, 26, 1, 255, 82, 32, 3, 255, 85, 33, 2, 255, 87, 31, 2, 255, 90, 30, 3, 255, 83, 34, 1, 255, 85, 34, 3, 255, 82, 29, 2, 255, 80, 27, 1, 255, 78, 29, 1, 255, 82, 29, 1, 255, 75, 27, 2, 255, 69, 27, 3, 255, 76, 23, 1, 255, 73, 26, 3, 255, 71, 29, 6, 255, 69, 21, 1, 255, 70, 23, 3, 255, 68, 24, 2, 255, 68, 20, 1, 255, 65, 26, 6, 255, 63, 25, 2, 255, 64, 23, 3, 255, 68, 22, 5, 255, 71, 24, 3, 255, 68, 20, 5, 255, 76, 24, 7, 255, 86, 25, 1, 255, 75, 25, 2, 255, 70, 23, 2, 255, 76, 27, 4, 255, 72, 28, 4, 255, 72, 29, 4, 255, 67, 25, 1, 255, 69, 22, 1, 255, 71, 23, 3, 255, 63, 24, 2, 255, 65, 26, 4, 255, 64, 20, 0, 255, 62, 17, 5, 255, 72, 20, 6, 255, 64, 17, 0, 255, 57, 21, 6, 255, 65, 22, 3, 255, 60, 18, 4, 255, 57, 18, 2, 255, 55, 23, 7, 255, 54, 21, 4, 255, 58, 15, 5, 255, 67, 19, 7, 255, 60, 16, 7, 255, 64, 19, 3, 255, 69, 18, 3, 255, 61, 15, 1, 255, 60, 13, 3, 255, 63, 13, 4, 255, 68, 18, 3, 255, 63, 22, 0, 255, 78, 23, 6, 255, 55, 24, 9, 255, 36, 17, 4, 255, 45, 16, 2, 255, 45, 18, 2, 255, 45, 16, 2, 255, 36, 14, 4, 255, 47, 14, 1, 255, 67, 19, 1, 255, 81, 23, 3, 255, 80, 23, 4, 255, 77, 20, 6, 255, 49, 14, 3, 255, 24, 11, 1, 255, 23, 10, 4, 255, 25, 11, 6, 255, 36, 13, 1, 255, 76, 19, 2, 255, 85, 20, 1, 255, 88, 23, 2, 255, 95, 26, 1, 255, 92, 23, 0, 255, 88, 23, 2, 255, 79, 21, 4, 255, 73, 20, 3, 255, 68, 16, 0, 255, 72, 19, 1, 255, 72, 22, 2, 255, 72, 17, 0, 255, 81, 21, 4, 255, 82, 24, 3, 255, 82, 19, 2, 255, 80, 21, 5, 255, 71, 19, 1, 255, 64, 15, 3, 255, 43, 12, 5, 255, 55, 11, 6, 255, 58, 15, 2, 255, 56, 14, 4, 255, 62, 13, 5, 255, 52, 11, 2, 255, 43, 10, 1, 255, 49, 11, 4, 255, 50, 9, 2, 255, 60, 14, 1, 255, 64, 15, 1, 255, 64, 16, 4, 255, 57, 12, 2, 255, 52, 9, 1, 255, 52, 12, 5, 255, 50, 13, 4, 255, 36, 9, 0, 255, 30, 9, 0, 255, 35, 10, 2, 255, 18, 9, 2, 255, 15, 10, 2, 255, 13, 7, 0, 255, 17, 7, 1, 255, 21, 8, 2, 255, 19, 8, 2, 255, 20, 11, 2, 255, 19, 10, 0, 255, 19, 9, 3, 255, 22, 12, 5, 255, 19, 9, 0, 255, 21, 10, 1, 255, 21, 10, 2, 255, 19, 12, 4, 255, 18, 11, 3, 255, 22, 12, 6, 255, 18, 7, 1, 255, 18, 10, 3, 255, 15, 10, 5, 255, 18, 15, 5, 255, 22, 12, 4, 255, 23, 13, 3, 255, 19, 14, 2, 255, 21, 13, 2, 255, 25, 14, 4, 255, 25, 14, 4, 255, 24, 11, 3, 255, 24, 11, 2, 255, 29, 15, 7, 255, 31, 15, 8, 255, 30, 13, 4, 255, 29, 14, 1, 255, 27, 14, 3, 255, 29, 14, 3, 255, 31, 14, 4, 255, 31, 15, 3, 255, 30, 16, 1, 255, 29, 17, 1, 255, 34, 20, 3, 255, 29, 18, 4, 255, 25, 16, 4, 255, 29, 17, 5, 255, 34, 19, 4, 255, 36, 21, 5, 255, 40, 21, 5, 255, 50, 25, 2, 255, 41, 26, 3, 255, 55, 23, 2, 255, 58, 21, 0, 255, 55, 27, 2, 255, 59, 23, 7, 255, 53, 25, 3, 255, 50, 27, 3, 255, 53, 28, 4, 255, 50, 26, 2, 255, 45, 26, 0, 255, 51, 28, 6, 255, 50, 20, 4, 255, 52, 26, 2, 255, 55, 30, 1, 255, 50, 27, 2, 255, 52, 27, 5, 255, 53, 25, 7, 255, 51, 30, 2, 255, 46, 28, 0, 255, 55, 29, 6, 255, 61, 29, 9, 255, 62, 27, 8, 255, 58, 28, 7, 255, 53, 28, 4, 255, 53, 29, 5, 255, 54, 29, 3, 255, 64, 29, 7, 255, 64, 23, 2, 255, 56, 29, 3, 255, 47, 30, 1, 255, 55, 31, 4, 255, 61, 28, 4, 255, 52, 26, 2, 255, 53, 30, 6, 255, 56, 29, 7, 255, 56, 32, 6, 255, 52, 34, 3, 255, 57, 30, 1, 255, 60, 34, 4, 255, 58, 35, 2, 255, 63, 36, 4, 255, 66, 35, 7, 255, 66, 33, 7, 255, 67, 34, 8, 255, 67, 33, 4, 255, 68, 34, 2, 255, 68, 34, 2, 255, 68, 39, 6, 255, 63, 34, 3, 255, 68, 37, 5, 255, 69, 37, 1, 255, 70, 35, 0, 255, 75, 36, 2, 255, 74, 37, 3, 255, 69, 36, 1, 255, 68, 37, 2, 255, 72, 36, 3, 255, 68, 37, 2, 255, 67, 40, 4, 255, 72, 38, 3, 255, 70, 35, 2, 255, 72, 40, 5, 255, 72, 34, 4, 255, 73, 36, 8, 255, 69, 35, 0, 255, 74, 37, 7, 255, 69, 32, 4, 255, 75, 36, 3, 255, 76, 38, 4, 255, 70, 33, 3, 255, 70, 42, 8, 255, 66, 38, 1, 255, 72, 33, 2, 255, 74, 34, 5, 255, 72, 39, 3, 255, 69, 36, 0, 255, 70, 32, 2, 255, 71, 37, 5, 255, 60, 38, 2, 255, 65, 38, 3, 255, 88, 42, 7, 255, 101, 43, 7, 255, 91, 39, 3, 255, 68, 41, 3, 255, 67, 44, 4, 255, 71, 41, 2, 255, 65, 41, 6, 255, 69, 42, 7, 255, 69, 41, 4, 255, 72, 44, 4, 255, 66, 42, 7, 255, 66, 44, 11, 255, 74, 48, 6, 255, 69, 47, 3, 255, 59, 45, 12, 255, 88, 47, 15, 255, 100, 53, 12, 255, 81, 53, 5, 255, 68, 52, 9, 255, 75, 51, 16, 255, 75, 51, 18, 255, 67, 56, 12, 255, 72, 58, 14, 255, 73, 56, 14, 255, 69, 57, 11, 255, 65, 58, 9, 255, 81, 64, 16, 255, 94, 63, 16, 255, 103, 64, 26, 255, 103, 66, 18, 255, 117, 71, 15, 255, 95, 71, 18, 255, 82, 66, 16, 255, 77, 67, 21, 255, 70, 61, 30, 255, 76, 69, 23, 255, 75, 69, 27, 255, 74, 68, 45, 255, 80, 69, 38, 255, 92, 75, 30, 255, 92, 73, 27, 255, 91, 74, 34, 255, 104, 81, 29, 255, 112, 85, 23, 255, 116, 89, 28, 255, 103, 89, 34, 255, 96, 82, 46, 255, 112, 88, 42, 255, 113, 83, 43, 255, 119, 91, 47, 255, 120, 91, 32, 255, 116, 92, 51, 255, 117, 96, 48, 255, 108, 92, 40, 255, 111, 95, 62, 255, 110, 96, 51, 255, 106, 96, 52, 255, 95, 98, 54, 255, 88, 96, 52, 255, 95, 99, 59, 255, 91, 102, 54, 255, 87, 101, 49, 255, 116, 105, 54, 255, 129, 107, 52, 255, 121, 106, 54, 255, 123, 106, 53, 255, 128, 104, 54, 255, 128, 107, 50, 255, 118, 104, 50, 255, 114, 105, 57, 255, 112, 102, 49, 255, 106, 101, 53, 255, 105, 102, 43, 255, 107, 99, 44, 255, 105, 97, 48, 255, 109, 101, 42, 255, 110, 97, 44, 255, 113, 99, 37, 255, 114, 96, 39, 255, 116, 94, 39, 255, 114, 95, 42, 255, 110, 89, 43, 255, 109, 90, 35, 255, 114, 93, 28, 255, 117, 91, 38, 255, 110, 85, 37, 255, 112, 86, 24, 255, 112, 83, 20, 255, 111, 80, 27, 255, 109, 80, 26, 255, 110, 79, 23, 255, 114, 80, 28, 255, 115, 78, 27, 255, 113, 72, 25, 255, 115, 74, 14, 255, 120, 76, 17, 255, 120, 75, 17, 255, 113, 70, 14, 255, 111, 68, 11, 255, 106, 67, 9, 255, 101, 65, 16, 255, 102, 68, 10, 255, 105, 65, 14, 255, 106, 62, 13, 255, 110, 65, 9, 255, 113, 64, 13, 255, 114, 62, 5, 255, 115, 64, 6, 255, 110, 59, 6, 255, 110, 62, 5, 255, 110, 58, 8, 255, 113, 56, 3, 255, 116, 54, 3, 255, 114, 55, 1, 255, 108, 54, 8, 255, 106, 54, 6, 255, 107, 51, 3, 255, 114, 52, 6, 255, 111, 52, 3, 255, 117, 49, 4, 255, 115, 54, 4, 255, 98, 51, 0, 255, 98, 48, 5, 255, 101, 48, 6, 255, 96, 45, 4, 255, 94, 43, 3, 255, 97, 45, 5, 255, 100, 45, 6, 255, 95, 43, 1, 255, 93, 45, 3, 255, 91, 42, 3, 255, 85, 43, 0, 255, 96, 45, 5, 255, 106, 45, 8, 255, 102, 45, 4, 255, 100, 48, 2, 255, 103, 46, 3, 255, 103, 39, 1, 255, 106, 44, 3, 255, 103, 45, 2, 255, 101, 37, 2, 255, 101, 34, 4, 255, 94, 35, 3, 255, 90, 37, 2, 255, 84, 37, 5, 255, 85, 38, 2, 255, 90, 35, 2, 255, 86, 31, 1, 255, 83, 36, 5, 255, 88, 38, 2, 255, 88, 37, 1, 255, 88, 39, 5, 255, 88, 33, 4, 255, 88, 31, 2, 255, 88, 32, 1, 255, 85, 33, 1, 255, 83, 34, 2, 255, 86, 30, 2, 255, 74, 31, 1, 255, 72, 29, 2, 255, 75, 30, 4, 255, 74, 29, 5, 255, 75, 23, 3, 255, 76, 29, 5, 255, 87, 32, 2, 255, 98, 33, 1, 255, 95, 34, 4, 255, 90, 35, 2, 255, 83, 37, 1, 255, 85, 31, 0, 255, 91, 27, 4, 255, 81, 28, 3, 255, 77, 31, 4, 255, 76, 28, 3, 255, 75, 26, 3, 255, 74, 24, 0, 255, 75, 26, 3, 255, 69, 25, 2, 255, 72, 25, 3, 255, 69, 26, 2, 255, 70, 26, 3, 255, 72, 26, 2, 255, 60, 25, 5, 255, 60, 26, 2, 255, 68, 24, 3, 255, 67, 21, 3, 255, 75, 26, 4, 255, 77, 22, 2, 255, 86, 25, 1, 255, 96, 30, 0, 255, 87, 26, 7, 255, 78, 21, 6, 255, 75, 26, 5, 255, 72, 26, 1, 255, 72, 24, 4, 255, 76, 22, 2, 255, 78, 25, 6, 255, 69, 25, 2, 255, 68, 27, 3, 255, 68, 24, 4, 255, 69, 24, 2, 255, 69, 21, 0, 255, 73, 21, 2, 255, 79, 22, 3, 255, 79, 25, 7, 255, 74, 22, 3, 255, 69, 20, 4, 255, 65, 18, 1, 255, 69, 20, 5, 255, 69, 20, 2, 255, 65, 20, 1, 255, 65, 22, 4, 255, 54, 14, 1, 255, 59, 18, 9, 255, 68, 17, 7, 255, 57, 15, 1, 255, 52, 16, 0, 255, 52, 18, 1, 255, 64, 18, 4, 255, 65, 18, 2, 255, 73, 20, 6, 255, 66, 20, 4, 255, 58, 22, 2, 255, 50, 17, 1, 255, 53, 19, 6, 255, 50, 21, 6, 255, 50, 18, 2, 255, 55, 17, 3, 255, 59, 16, 2, 255, 60, 17, 1, 255, 57, 15, 1, 255, 62, 20, 2, 255, 45, 17, 2, 255, 34, 15, 1, 255, 33, 13, 2, 255, 37, 14, 4, 255, 35, 15, 3, 255, 50, 13, 5, 255, 51, 15, 5, 255, 61, 19, 1, 255, 69, 18, 7, 255, 68, 15, 5, 255, 72, 16, 5, 255, 64, 12, 2, 255, 45, 14, 4, 255, 43, 12, 2, 255, 45, 11, 4, 255, 37, 14, 7, 255, 32, 9, 8, 255, 37, 9, 6, 255, 52, 15, 5, 255, 70, 19, 6, 255, 71, 15, 1, 255, 63, 16, 4, 255, 57, 18, 4, 255, 56, 10, 1, 255, 44, 9, 1, 255, 43, 10, 9, 255, 36, 9, 4, 255, 39, 12, 4, 255, 44, 9, 2, 255, 51, 13, 8, 255, 46, 10, 2, 255, 52, 12, 1, 255, 62, 16, 2, 255, 62, 15, 2, 255, 64, 13, 2, 255, 67, 15, 4, 255, 58, 10, 0, 255, 57, 15, 2, 255, 56, 17, 3, 255, 49, 12, 2, 255, 41, 11, 3, 255, 40, 9, 1, 255, 16, 6, 2, 255, 13, 6, 1, 255, 13, 6, 3, 255, 14, 6, 3, 255, 17, 8, 5, 255, 18, 9, 3, 255, 19, 8, 1, 255, 21, 10, 4, 255, 17, 7, 1, 255, 22, 12, 3, 255, 19, 9, 1, 255, 15, 6, 0, 255, 15, 9, 2, 255, 15, 12, 1, 255, 15, 11, 1, 255, 19, 13, 3, 255, 21, 11, 2, 255, 21, 8, 2, 255, 20, 10, 3, 255, 19, 10, 3, 255, 18, 8, 1, 255, 23, 13, 4, 255, 28, 19, 7, 255, 20, 10, 1, 255, 24, 12, 2, 255, 30, 16, 2, 255, 29, 16, 1, 255, 23, 14, 3, 255, 22, 11, 2, 255, 32, 14, 7, 255, 26, 10, 2, 255, 24, 15, 3, 255, 31, 17, 7, 255, 33, 16, 5, 255, 31, 14, 2, 255, 31, 14, 4, 255, 25, 13, 3, 255, 25, 16, 3, 255, 27, 15, 4, 255, 30, 17, 5, 255, 34, 17, 5, 255, 28, 18, 2, 255, 39, 20, 6, 255, 40, 21, 4, 255, 42, 22, 4, 255, 50, 24, 4, 255, 56, 24, 6, 255, 56, 22, 5, 255, 47, 19, 0, 255, 52, 24, 1, 255, 60, 24, 5, 255, 50, 20, 2, 255, 45, 27, 5, 255, 52, 25, 6, 255, 42, 29, 6, 255, 45, 23, 4, 255, 52, 24, 4, 255, 46, 28, 4, 255, 49, 24, 3, 255, 49, 26, 3, 255, 39, 25, 0, 255, 43, 23, 2, 255, 52, 25, 3, 255, 52, 28, 1, 255, 50, 28, 3, 255, 42, 26, 2, 255, 50, 23, 7, 255, 45, 26, 2, 255, 53, 27, 6, 255, 53, 26, 2, 255, 48, 29, 2, 255, 47, 26, 3, 255, 57, 31, 6, 255, 57, 29, 2, 255, 52, 28, 1, 255, 50, 27, 2, 255, 60, 31, 3, 255, 54, 29, 1, 255, 53, 27, 4, 255, 55, 29, 3, 255, 56, 32, 3, 255, 62, 31, 7, 255, 64, 31, 2, 255, 59, 33, 3, 255, 57, 32, 2, 255, 60, 37, 4, 255, 63, 35, 3, 255, 64, 29, 1, 255, 66, 35, 4, 255, 60, 38, 6, 255, 58, 35, 2, 255, 61, 33, 2, 255, 68, 33, 5, 255, 60, 33, 1, 255, 64, 38, 3, 255, 69, 35, 2, 255, 68, 36, 6, 255, 64, 37, 3, 255, 71, 39, 3, 255, 73, 41, 4, 255, 72, 36, 1, 255, 72, 35, 2, 255, 63, 37, 2, 255, 63, 39, 1, 255, 71, 35, 4, 255, 73, 35, 5, 255, 65, 35, 3, 255, 66, 34, 1, 255, 70, 39, 3, 255, 74, 38, 3, 255, 89, 35, 1, 255, 96, 35, 2, 255, 95, 39, 5, 255, 94, 36, 3, 255, 75, 37, 3, 255, 66, 36, 6, 255, 66, 37, 0, 255, 68, 36, 4, 255, 71, 35, 6, 255, 70, 36, 3, 255, 64, 33, 2, 255, 66, 36, 2, 255, 65, 37, 7, 255, 63, 37, 7, 255, 65, 36, 2, 255, 76, 39, 2, 255, 95, 48, 6, 255, 92, 39, 2, 255, 76, 36, 6, 255, 68, 36, 0, 255, 72, 42, 3, 255, 69, 39, 6, 255, 67, 43, 11, 255, 71, 43, 7, 255, 73, 41, 5, 255, 66, 42, 10, 255, 71, 43, 5, 255, 65, 51, 4, 255, 71, 49, 2, 255, 76, 48, 5, 255, 67, 49, 11, 255, 73, 47, 13, 255, 83, 54, 13, 255, 85, 57, 15, 255, 87, 58, 11, 255, 72, 52, 11, 255, 73, 50, 18, 255, 70, 53, 11, 255, 74, 55, 12, 255, 77, 53, 20, 255, 77, 56, 24, 255, 93, 64, 23, 255, 112, 67, 18, 255, 111, 68, 16, 255, 114, 67, 14, 255, 102, 62, 24, 255, 95, 62, 19, 255, 87, 68, 18, 255, 78, 68, 22, 255, 77, 67, 20, 255, 75, 66, 23, 255, 73, 69, 27, 255, 72, 65, 38, 255, 76, 70, 30, 255, 82, 71, 32, 255, 79, 76, 29, 255, 82, 75, 33, 255, 93, 79, 39, 255, 115, 85, 28, 255, 116, 84, 38, 255, 117, 85, 38, 255, 115, 90, 35, 255, 121, 89, 53, 255, 117, 87, 42, 255, 115, 90, 43, 255, 117, 91, 47, 255, 124, 92, 41, 255, 120, 97, 51, 255, 117, 97, 50, 255, 122, 97, 44, 255, 121, 99, 55, 255, 125, 97, 52, 255, 128, 102, 47, 255, 103, 102, 56, 255, 91, 98, 49, 255, 109, 103, 58, 255, 109, 104, 50, 255, 100, 102, 46, 255, 101, 100, 53, 255, 112, 104, 59, 255, 116, 104, 56, 255, 116, 102, 56, 255, 118, 107, 54, 255, 115, 103, 52, 255, 114, 103, 52, 255, 109, 100, 54, 255, 107, 101, 55, 255, 102, 101, 45, 255, 102, 95, 52, 255, 105, 101, 48, 255, 104, 101, 41, 255, 104, 99, 42, 255, 108, 100, 43, 255, 117, 100, 38, 255, 118, 99, 37, 255, 120, 97, 36, 255, 120, 94, 33, 255, 120, 91, 40, 255, 118, 91, 41, 255, 114, 91, 23, 255, 112, 89, 26, 255, 108, 85, 30, 255, 113, 81, 34, 255, 118, 83, 31, 255, 114, 81, 24, 255, 109, 77, 28, 255, 112, 80, 24, 255, 110, 74, 21, 255, 114, 75, 18, 255, 116, 74, 19, 255, 118, 74, 22, 255, 113, 68, 18, 255, 111, 67, 16, 255, 112, 70, 14, 255, 110, 68, 24, 255, 106, 65, 19, 255, 106, 63, 22, 255, 109, 68, 8, 255, 107, 66, 11, 255, 106, 67, 12, 255, 113, 69, 5, 255, 112, 62, 7, 255, 114, 62, 12, 255, 114, 60, 17, 255, 108, 58, 10, 255, 105, 58, 7, 255, 107, 58, 4, 255, 117, 57, 5, 255, 105, 58, 4, 255, 99, 57, 3, 255, 108, 58, 9, 255, 113, 54, 8, 255, 113, 54, 5, 255, 115, 51, 6, 255, 113, 50, 3, 255, 115, 51, 1, 255, 108, 53, 2, 255, 103, 52, 5, 255, 106, 46, 3, 255, 106, 49, 6, 255, 98, 46, 4, 255, 96, 46, 4, 255, 98, 43, 5, 255, 99, 44, 9, 255, 96, 46, 8, 255, 91, 47, 4, 255, 92, 45, 3, 255, 90, 38, 3, 255, 97, 38, 4, 255, 104, 43, 4, 255, 104, 44, 4, 255, 96, 40, 2, 255, 94, 36, 5, 255, 86, 33, 2, 255, 85, 38, 2, 255, 87, 35, 3, 255, 82, 32, 4, 255, 80, 35, 3, 255, 80, 39, 5, 255, 76, 36, 3, 255, 81, 31, 2, 255, 89, 34, 3, 255, 87, 37, 1, 255, 78, 33, 0, 255, 80, 29, 8, 255, 86, 32, 5, 255, 89, 32, 2, 255, 87, 38, 5, 255, 88, 34, 4, 255, 87, 29, 4, 255, 86, 27, 5, 255, 78, 30, 3, 255, 79, 31, 3, 255, 73, 30, 5, 255, 69, 27, 2, 255, 77, 32, 5, 255, 75, 29, 2, 255, 77, 30, 4, 255, 79, 24, 6, 255, 77, 26, 2, 255, 88, 32, 3, 255, 92, 34, 3, 255, 93, 33, 2, 255, 93, 35, 2, 255, 86, 36, 4, 255, 83, 31, 2, 255, 94, 31, 4, 255, 88, 30, 2, 255, 79, 31, 2, 255, 73, 27, 2, 255, 75, 26, 5, 255, 71, 27, 5, 255, 75, 25, 1, 255, 73, 27, 2, 255, 67, 29, 4, 255, 64, 25, 2, 255, 73, 25, 2, 255, 70, 25, 1, 255, 67, 24, 2, 255, 68, 24, 3, 255, 70, 24, 7, 255, 70, 23, 4, 255, 78, 28, 3, 255, 76, 24, 0, 255, 79, 24, 4, 255, 88, 27, 4, 255, 87, 25, 1, 255, 82, 26, 2, 255, 76, 25, 2, 255, 74, 23, 4, 255, 72, 22, 2, 255, 78, 24, 4, 255, 75, 22, 2, 255, 72, 21, 0, 255, 76, 27, 7, 255, 71, 21, 3, 255, 68, 26, 4, 255, 75, 24, 1, 255, 79, 22, 1, 255, 89, 25, 4, 255, 92, 26, 5, 255, 93, 26, 5, 255, 81, 24, 3, 255, 70, 21, 6, 255, 70, 20, 2, 255, 66, 17, 1, 255, 68, 20, 4, 255, 64, 19, 3, 255, 58, 21, 2, 255, 52, 15, 2, 255, 60, 16, 9, 255, 60, 16, 4, 255, 49, 16, 3, 255, 58, 17, 5, 255, 59, 15, 1, 255, 55, 17, 1, 255, 59, 17, 3, 255, 63, 21, 4, 255, 62, 21, 3, 255, 48, 19, 1, 255, 55, 19, 6, 255, 57, 21, 3, 255, 58, 20, 2, 255, 64, 19, 3, 255, 58, 16, 3, 255, 52, 13, 6, 255, 28, 10, 0, 255, 34, 16, 1, 255, 38, 16, 2, 255, 32, 15, 1, 255, 39, 16, 2, 255, 45, 16, 3, 255, 45, 13, 2, 255, 44, 15, 5, 255, 34, 11, 4, 255, 27, 9, 4, 255, 30, 11, 2, 255, 29, 11, 4, 255, 35, 13, 0, 255, 30, 12, 4, 255, 27, 6, 4, 255, 27, 8, 2, 255, 27, 8, 6, 255, 23, 8, 5, 255, 21, 9, 3, 255, 20, 7, 0, 255, 20, 10, 1, 255, 25, 9, 4, 255, 29, 5, 0, 255, 42, 12, 6, 255, 54, 14, 5, 255, 59, 14, 2, 255, 59, 15, 1, 255, 61, 11, 3, 255, 53, 14, 3, 255, 40, 14, 4, 255, 31, 10, 1, 255, 36, 12, 3, 255, 48, 14, 4, 255, 56, 14, 1, 255, 57, 14, 1, 255, 54, 14, 2, 255, 63, 19, 4, 255, 70, 17, 2, 255, 70, 15, 1, 255, 64, 16, 2, 255, 55, 15, 3, 255, 50, 16, 5, 255, 50, 13, 2, 255, 54, 13, 2, 255, 13, 6, 2, 255, 14, 6, 3, 255, 13, 8, 4, 255, 13, 6, 3, 255, 14, 6, 2, 255, 19, 9, 2, 255, 19, 8, 2, 255, 19, 10, 3, 255, 17, 9, 1, 255, 18, 9, 0, 255, 21, 11, 2, 255, 19, 10, 2, 255, 18, 11, 3, 255, 17, 8, 2, 255, 16, 9, 2, 255, 20, 10, 2, 255, 23, 12, 4, 255, 23, 12, 3, 255, 21, 12, 2, 255, 20, 11, 2, 255, 22, 12, 3, 255, 22, 12, 3, 255, 25, 14, 4, 255, 23, 13, 2, 255, 26, 17, 5, 255, 26, 17, 5, 255, 21, 13, 2, 255, 22, 12, 5, 255, 23, 14, 5, 255, 20, 12, 0, 255, 24, 16, 3, 255, 26, 17, 3, 255, 26, 14, 2, 255, 26, 12, 2, 255, 25, 13, 4, 255, 24, 13, 6, 255, 24, 14, 5, 255, 34, 18, 5, 255, 26, 17, 3, 255, 30, 14, 2, 255, 42, 14, 4, 255, 30, 19, 3, 255, 39, 21, 5, 255, 43, 21, 4, 255, 44, 20, 4, 255, 50, 23, 5, 255, 48, 20, 1, 255, 49, 19, 1, 255, 54, 22, 2, 255, 55, 23, 3, 255, 51, 20, 1, 255, 51, 21, 3, 255, 49, 19, 1, 255, 52, 20, 3, 255, 37, 21, 1, 255, 41, 20, 2, 255, 47, 22, 3, 255, 44, 24, 1, 255, 45, 21, 2, 255, 45, 25, 5, 255, 39, 24, 3, 255, 46, 25, 4, 255, 54, 26, 5, 255, 51, 25, 3, 255, 51, 26, 3, 255, 38, 26, 0, 255, 46, 28, 4, 255, 47, 31, 2, 255, 56, 27, 6, 255, 47, 22, 5, 255, 43, 25, 5, 255, 54, 31, 8, 255, 53, 26, 2, 255, 52, 29, 7, 255, 52, 25, 3, 255, 58, 28, 3, 255, 53, 28, 3, 255, 51, 29, 2, 255, 61, 25, 4, 255, 66, 30, 1, 255, 57, 32, 0, 255, 62, 30, 3, 255, 64, 28, 5, 255, 61, 30, 2, 255, 63, 31, 3, 255, 66, 34, 5, 255, 61, 33, 2, 255, 59, 34, 2, 255, 60, 37, 4, 255, 57, 36, 3, 255, 58, 33, 2, 255, 61, 36, 4, 255, 66, 34, 4, 255, 68, 33, 3, 255, 64, 36, 2, 255, 71, 33, 2, 255, 65, 33, 3, 255, 67, 37, 3, 255, 70, 35, 3, 255, 68, 36, 3, 255, 64, 34, 2, 255, 62, 33, 3, 255, 69, 37, 7, 255, 66, 33, 4, 255, 62, 36, 7, 255, 61, 35, 7, 255, 66, 34, 6, 255, 68, 37, 7, 255, 62, 33, 1, 255, 73, 38, 5, 255, 97, 41, 6, 255, 93, 43, 4, 255, 92, 39, 3, 255, 94, 34, 4, 255, 71, 31, 5, 255, 70, 36, 1, 255, 68, 35, 7, 255, 67, 38, 6, 255, 62, 34, 0, 255, 63, 38, 3, 255, 65, 37, 5, 255, 66, 34, 1, 255, 67, 37, 3, 255, 67, 34, 4, 255, 62, 33, 3, 255, 64, 32, 6, 255, 67, 33, 5, 255, 62, 32, 7, 255, 64, 32, 9, 255, 67, 36, 6, 255, 71, 35, 1, 255, 71, 37, 4, 255, 67, 42, 7, 255, 63, 39, 6, 255, 74, 41, 7, 255, 74, 40, 6, 255, 67, 44, 10, 255, 61, 47, 11, 255, 70, 44, 6, 255, 76, 46, 9, 255, 96, 50, 17, 255, 109, 59, 15, 255, 104, 59, 7, 255, 110, 59, 12, 255, 98, 56, 9, 255, 76, 50, 13, 255, 64, 54, 15, 255, 68, 57, 19, 255, 71, 54, 18, 255, 70, 57, 16, 255, 91, 63, 14, 255, 114, 66, 14, 255, 115, 63, 17, 255, 106, 60, 23, 255, 109, 68, 13, 255, 100, 70, 16, 255, 78, 61, 35, 255, 74, 62, 24, 255, 81, 65, 17, 255, 71, 67, 22, 255, 69, 64, 31, 255, 72, 67, 34, 255, 75, 67, 34, 255, 85, 70, 30, 255, 93, 78, 30, 255, 81, 75, 47, 255, 88, 74, 45, 255, 102, 79, 32, 255, 101, 82, 30, 255, 102, 86, 38, 255, 95, 84, 33, 255, 94, 82, 37, 255, 95, 86, 45, 255, 112, 94, 40, 255, 118, 93, 29, 255, 114, 94, 44, 255, 119, 92, 54, 255, 115, 93, 51, 255, 123, 96, 52, 255, 127, 96, 52, 255, 121, 98, 51, 255, 114, 94, 60, 255, 107, 98, 48, 255, 97, 94, 66, 255, 110, 103, 53, 255, 126, 106, 45, 255, 127, 101, 58, 255, 125, 106, 58, 255, 109, 106, 55, 255, 87, 98, 54, 255, 90, 102, 58, 255, 98, 101, 52, 255, 105, 106, 53, 255, 101, 101, 54, 255, 102, 103, 51, 255, 101, 106, 42, 255, 98, 101, 50, 255, 101, 101, 51, 255, 103, 102, 46, 255, 107, 100, 49, 255, 104, 98, 46, 255, 110, 100, 48, 255, 115, 98, 46, 255, 116, 96, 44, 255, 124, 97, 39, 255, 127, 92, 40, 255, 127, 90, 43, 255, 124, 94, 19, 255, 120, 93, 37, 255, 112, 91, 35, 255, 106, 89, 27, 255, 112, 90, 34, 255, 115, 85, 22, 255, 123, 85, 35, 255, 117, 83, 19, 255, 113, 82, 15, 255, 111, 79, 22, 255, 114, 75, 27, 255, 119, 76, 25, 255, 118, 78, 16, 255, 111, 71, 18, 255, 107, 71, 14, 255, 104, 68, 15, 255, 107, 70, 19, 255, 107, 64, 9, 255, 108, 67, 9, 255, 107, 67, 19, 255, 104, 64, 15, 255, 106, 65, 12, 255, 106, 62, 10, 255, 107, 60, 10, 255, 109, 60, 8, 255, 110, 59, 14, 255, 110, 61, 5, 255, 111, 61, 1, 255, 107, 57, 2, 255, 109, 59, 11, 255, 104, 55, 5, 255, 106, 50, 9, 255, 109, 51, 8, 255, 106, 54, 1, 255, 109, 57, 1, 255, 108, 53, 2, 255, 116, 54, 9, 255, 115, 52, 5, 255, 106, 52, 1, 255, 107, 48, 3, 255, 110, 49, 6, 255, 107, 49, 6, 255, 102, 45, 3, 255, 103, 46, 5, 255, 103, 43, 2, 255, 102, 44, 2, 255, 100, 46, 6, 255, 95, 41, 2, 255, 101, 43, 4, 255, 101, 44, 5, 255, 88, 39, 2, 255, 85, 39, 0, 255, 93, 41, 1, 255, 98, 40, 1, 255, 89, 37, 1, 255, 87, 36, 4, 255, 90, 41, 5, 255, 82, 35, 0, 255, 81, 32, 1, 255, 81, 34, 3, 255, 79, 35, 2, 255, 81, 38, 3, 255, 81, 35, 5, 255, 80, 32, 1, 255, 93, 34, 1, 255, 97, 40, 3, 255, 86, 37, 3, 255, 83, 26, 4, 255, 84, 27, 3, 255, 88, 33, 5, 255, 83, 33, 2, 255, 80, 29, 0, 255, 77, 29, 2, 255, 78, 29, 5, 255, 79, 32, 8, 255, 76, 28, 4, 255, 75, 33, 9, 255, 74, 31, 7, 255, 72, 24, 0, 255, 75, 29, 3, 255, 73, 29, 4, 255, 66, 26, 8, 255, 77, 31, 5, 255, 84, 27, 0, 255, 78, 30, 4, 255, 79, 29, 6, 255, 94, 30, 4, 255, 91, 33, 2, 255, 86, 35, 3, 255, 83, 32, 1, 255, 83, 28, 1, 255, 84, 28, 5, 255, 77, 27, 4, 255, 70, 24, 2, 255, 74, 26, 5, 255, 77, 27, 2, 255, 74, 26, 0, 255, 72, 29, 5, 255, 72, 28, 4, 255, 74, 25, 2, 255, 72, 25, 2, 255, 71, 25, 3, 255, 67, 21, 1, 255, 69, 23, 4, 255, 71, 27, 5, 255, 68, 24, 1, 255, 75, 28, 3, 255, 73, 24, 1, 255, 73, 25, 3, 255, 72, 25, 4, 255, 66, 22, 0, 255, 73, 26, 3, 255, 75, 24, 1, 255, 78, 26, 5, 255, 80, 23, 5, 255, 79, 24, 5, 255, 69, 22, 1, 255, 66, 24, 2, 255, 71, 25, 3, 255, 70, 22, 4, 255, 77, 20, 5, 255, 77, 23, 1, 255, 82, 28, 1, 255, 80, 24, 2, 255, 78, 19, 2, 255, 73, 22, 7, 255, 67, 21, 3, 255, 66, 21, 0, 255, 70, 23, 4, 255, 68, 20, 5, 255, 64, 19, 4, 255, 62, 23, 4, 255, 61, 22, 3, 255, 62, 16, 4, 255, 63, 20, 4, 255, 49, 17, 2, 255, 55, 14, 3, 255, 60, 16, 2, 255, 50, 16, 2, 255, 52, 18, 1, 255, 55, 21, 2, 255, 65, 22, 4, 255, 64, 18, 4, 255, 66, 16, 4, 255, 62, 18, 1, 255, 72, 23, 2, 255, 69, 16, 2, 255, 56, 11, 0, 255, 45, 13, 3, 255, 31, 10, 2, 255, 34, 12, 5, 255, 38, 11, 6, 255, 35, 10, 3, 255, 37, 13, 4, 255, 44, 17, 6, 255, 45, 14, 4, 255, 48, 14, 5, 255, 41, 10, 3, 255, 31, 12, 4, 255, 30, 18, 6, 255, 34, 15, 4, 255, 36, 12, 2, 255, 23, 12, 0, 255, 27, 9, 3, 255, 32, 10, 3, 255, 29, 10, 4, 255, 29, 10, 3, 255, 26, 10, 0, 255, 32, 14, 4, 255, 28, 9, 1, 255, 25, 7, 3, 255, 18, 8, 3, 255, 21, 8, 1, 255, 41, 12, 2, 255, 55, 14, 4, 255, 58, 16, 5, 255, 55, 14, 5, 255, 57, 14, 4, 255, 56, 14, 7, 255, 47, 11, 6, 255, 41, 10, 2, 255, 60, 15, 2, 255, 70, 18, 3, 255, 76, 19, 3, 255, 76, 21, 3, 255, 68, 21, 0, 255, 67, 19, 0, 255, 75, 17, 2, 255, 75, 17, 6, 255, 64, 18, 5, 255, 59, 13, 3, 255, 55, 12, 0, 255, 61, 16, 6, 255, 12, 8, 4, 255, 11, 7, 4, 255, 11, 7, 3, 255, 12, 8, 3, 255, 14, 7, 1, 255, 18, 9, 1, 255, 18, 8, 3, 255, 16, 8, 1, 255, 18, 11, 3, 255, 17, 9, 0, 255, 21, 11, 2, 255, 22, 13, 4, 255, 21, 11, 3, 255, 24, 12, 7, 255, 17, 7, 2, 255, 18, 8, 0, 255, 22, 12, 3, 255, 22, 12, 3, 255, 21, 11, 1, 255, 21, 13, 3, 255, 21, 12, 3, 255, 22, 11, 2, 255, 28, 14, 5, 255, 24, 11, 2, 255, 23, 14, 3, 255, 21, 16, 4, 255, 18, 13, 4, 255, 20, 11, 4, 255, 21, 14, 6, 255, 21, 16, 3, 255, 23, 17, 1, 255, 25, 16, 2, 255, 24, 12, 2, 255, 24, 12, 3, 255, 25, 15, 5, 255, 22, 13, 5, 255, 27, 15, 4, 255, 36, 16, 4, 255, 32, 16, 1, 255, 31, 18, 3, 255, 41, 16, 4, 255, 38, 16, 3, 255, 36, 17, 1, 255, 36, 19, 2, 255, 48, 18, 3, 255, 48, 22, 4, 255, 46, 20, 1, 255, 48, 19, 1, 255, 54, 22, 2, 255, 52, 21, 1, 255, 48, 22, 2, 255, 45, 20, 2, 255, 47, 23, 3, 255, 46, 22, 3, 255, 47, 20, 4, 255, 54, 22, 9, 255, 44, 21, 2, 255, 46, 24, 2, 255, 46, 23, 4, 255, 41, 23, 4, 255, 42, 26, 5, 255, 45, 25, 6, 255, 49, 24, 5, 255, 50, 24, 4, 255, 50, 27, 4, 255, 48, 26, 0, 255, 42, 23, 9, 255, 40, 23, 8, 255, 51, 30, 2, 255, 52, 31, 3, 255, 50, 25, 2, 255, 44, 24, 1, 255, 51, 27, 5, 255, 47, 23, 2, 255, 50, 26, 5, 255, 47, 25, 3, 255, 54, 29, 5, 255, 52, 26, 3, 255, 58, 24, 1, 255, 58, 28, 0, 255, 55, 34, 1, 255, 61, 32, 5, 255, 53, 31, 3, 255, 61, 31, 2, 255, 60, 29, 1, 255, 63, 31, 4, 255, 62, 31, 3, 255, 58, 34, 3, 255, 58, 32, 2, 255, 66, 32, 3, 255, 64, 30, 4, 255, 61, 32, 3, 255, 63, 32, 3, 255, 67, 33, 4, 255, 63, 32, 2, 255, 61, 34, 4, 255, 63, 35, 0, 255, 63, 38, 2, 255, 70, 34, 5, 255, 63, 37, 3, 255, 75, 35, 1, 255, 90, 38, 2, 255, 92, 38, 1, 255, 89, 36, 2, 255, 75, 35, 1, 255, 64, 33, 0, 255, 66, 35, 3, 255, 68, 37, 5, 255, 72, 32, 4, 255, 75, 35, 1, 255, 76, 37, 1, 255, 75, 35, 4, 255, 73, 31, 2, 255, 63, 35, 1, 255, 60, 34, 2, 255, 68, 33, 1, 255, 56, 29, 10, 255, 61, 36, 8, 255, 71, 36, 0, 255, 71, 33, 1, 255, 70, 37, 1, 255, 71, 35, 1, 255, 68, 34, 7, 255, 62, 31, 3, 255, 71, 35, 7, 255, 67, 33, 6, 255, 66, 38, 4, 255, 63, 35, 3, 255, 68, 35, 4, 255, 61, 35, 10, 255, 58, 30, 9, 255, 69, 37, 7, 255, 67, 38, 0, 255, 65, 38, 5, 255, 70, 42, 13, 255, 66, 40, 5, 255, 70, 42, 3, 255, 69, 46, 8, 255, 65, 45, 6, 255, 67, 47, 7, 255, 97, 53, 8, 255, 97, 52, 6, 255, 85, 53, 8, 255, 82, 52, 13, 255, 71, 50, 7, 255, 70, 50, 16, 255, 73, 50, 25, 255, 73, 53, 23, 255, 67, 55, 16, 255, 70, 61, 20, 255, 85, 59, 20, 255, 117, 66, 17, 255, 121, 64, 13, 255, 116, 66, 23, 255, 110, 67, 26, 255, 117, 72, 22, 255, 90, 65, 22, 255, 68, 64, 19, 255, 71, 67, 31, 255, 83, 75, 25, 255, 93, 75, 25, 255, 78, 67, 30, 255, 82, 71, 36, 255, 103, 75, 33, 255, 117, 79, 32, 255, 117, 79, 32, 255, 114, 80, 37, 255, 108, 81, 31, 255, 86, 76, 38, 255, 82, 73, 52, 255, 80, 80, 44, 255, 82, 83, 46, 255, 78, 80, 51, 255, 98, 81, 49, 255, 117, 88, 41, 255, 114, 96, 54, 255, 117, 96, 49, 255, 116, 97, 54, 255, 122, 98, 55, 255, 127, 99, 60, 255, 119, 102, 51, 255, 98, 98, 60, 255, 84, 92, 61, 255, 102, 102, 58, 255, 124, 109, 54, 255, 128, 103, 54, 255, 126, 106, 56, 255, 110, 106, 68, 255, 95, 103, 52, 255, 95, 105, 52, 255, 99, 105, 69, 255, 93, 101, 54, 255, 99, 102, 58, 255, 109, 108, 53, 255, 111, 106, 51, 255, 108, 102, 52, 255, 106, 102, 53, 255, 106, 103, 51, 255, 110, 108, 43, 255, 116, 105, 39, 255, 114, 103, 41, 255, 120, 102, 48, 255, 126, 103, 40, 255, 121, 100, 35, 255, 122, 93, 38, 255, 122, 94, 39, 255, 121, 91, 45, 255, 113, 89, 22, 255, 110, 90, 30, 255, 109, 89, 34, 255, 110, 91, 21, 255, 117, 88, 27, 255, 121, 86, 22, 255, 124, 83, 24, 255, 121, 80, 15, 255, 119, 80, 17, 255, 121, 85, 14, 255, 114, 81, 9, 255, 109, 77, 22, 255, 109, 76, 21, 255, 102, 70, 15, 255, 104, 71, 13, 255, 104, 68, 11, 255, 108, 69, 18, 255, 104, 68, 14, 255, 105, 66, 14, 255, 107, 65, 11, 255, 108, 64, 8, 255, 107, 64, 12, 255, 100, 62, 7, 255, 104, 57, 16, 255, 108, 56, 13, 255, 109, 59, 14, 255, 108, 60, 7, 255, 107, 57, 6, 255, 107, 57, 5, 255, 107, 55, 7, 255, 109, 54, 7, 255, 114, 54, 8, 255, 113, 51, 5, 255, 112, 53, 5, 255, 110, 53, 5, 255, 109, 51, 5, 255, 112, 51, 4, 255, 112, 49, 1, 255, 107, 51, 3, 255, 111, 47, 5, 255, 115, 46, 7, 255, 108, 47, 5, 255, 106, 45, 2, 255, 109, 46, 3, 255, 110, 45, 6, 255, 101, 42, 6, 255, 99, 44, 7, 255, 107, 47, 7, 255, 112, 45, 1, 255, 115, 44, 0, 255, 101, 43, 3, 255, 86, 41, 5, 255, 83, 40, 4, 255, 88, 42, 3, 255, 90, 40, 2, 255, 81, 36, 0, 255, 84, 36, 2, 255, 87, 36, 3, 255, 82, 37, 4, 255, 79, 34, 1, 255, 83, 36, 2, 255, 82, 36, 0, 255, 77, 28, 0, 255, 77, 34, 3, 255, 85, 35, 4, 255, 89, 35, 4, 255, 86, 38, 4, 255, 86, 32, 5, 255, 81, 31, 2, 255, 80, 31, 2, 255, 76, 27, 2, 255, 75, 27, 4, 255, 69, 32, 5, 255, 73, 32, 2, 255, 81, 33, 6, 255, 75, 27, 5, 255, 71, 25, 2, 255, 78, 31, 5, 255, 79, 28, 2, 255, 76, 26, 2, 255, 72, 26, 3, 255, 80, 29, 5, 255, 79, 28, 3, 255, 77, 33, 2, 255, 91, 31, 5, 255, 85, 27, 2, 255, 87, 31, 4, 255, 94, 34, 4, 255, 95, 35, 5, 255, 86, 28, 0, 255, 83, 26, 0, 255, 84, 25, 3, 255, 84, 26, 5, 255, 78, 25, 3, 255, 81, 26, 4, 255, 78, 26, 2, 255, 76, 28, 2, 255, 76, 26, 2, 255, 75, 26, 2, 255, 76, 29, 4, 255, 70, 25, 1, 255, 68, 21, 1, 255, 71, 24, 4, 255, 70, 24, 3, 255, 67, 25, 4, 255, 65, 25, 2, 255, 69, 26, 5, 255, 71, 25, 4, 255, 71, 24, 1, 255, 72, 24, 2, 255, 72, 26, 3, 255, 74, 25, 3, 255, 75, 25, 2, 255, 78, 30, 5, 255, 73, 28, 5, 255, 68, 24, 3, 255, 71, 22, 3, 255, 78, 24, 4, 255, 74, 23, 2, 255, 70, 24, 7, 255, 64, 18, 2, 255, 79, 24, 3, 255, 94, 23, 5, 255, 76, 20, 1, 255, 63, 21, 4, 255, 61, 18, 3, 255, 68, 22, 1, 255, 70, 23, 1, 255, 68, 19, 0, 255, 68, 18, 1, 255, 65, 17, 3, 255, 64, 23, 5, 255, 65, 22, 1, 255, 64, 17, 1, 255, 66, 21, 3, 255, 51, 18, 0, 255, 60, 21, 6, 255, 63, 17, 3, 255, 56, 19, 3, 255, 58, 18, 2, 255, 51, 19, 1, 255, 56, 19, 1, 255, 70, 17, 5, 255, 70, 15, 6, 255, 72, 17, 3, 255, 65, 20, 4, 255, 63, 15, 2, 255, 55, 15, 3, 255, 45, 14, 2, 255, 48, 14, 5, 255, 47, 11, 3, 255, 47, 13, 7, 255, 44, 11, 3, 255, 47, 13, 3, 255, 55, 16, 6, 255, 53, 15, 3, 255, 49, 14, 1, 255, 43, 13, 0, 255, 40, 13, 4, 255, 37, 18, 6, 255, 45, 14, 2, 255, 47, 11, 5, 255, 39, 13, 2, 255, 31, 13, 2, 255, 36, 14, 3, 255, 32, 10, 0, 255, 35, 13, 2, 255, 32, 10, 2, 255, 33, 12, 4, 255, 31, 11, 2, 255, 27, 12, 5, 255, 18, 8, 3, 255, 23, 8, 3, 255, 30, 8, 2, 255, 32, 13, 2, 255, 30, 12, 0, 255, 39, 12, 4, 255, 45, 10, 1, 255, 45, 10, 4, 255, 46, 14, 8, 255, 50, 12, 4, 255, 81, 19, 5, 255, 83, 24, 4, 255, 94, 27, 3, 255, 96, 27, 2, 255, 90, 28, 3, 255, 89, 27, 5, 255, 80, 22, 1, 255, 79, 20, 2, 255, 85, 19, 4, 255, 73, 18, 0, 255, 65, 16, 0, 255, 61, 14, 2, 255, 12, 8, 5, 255, 10, 6, 3, 255, 10, 7, 2, 255, 12, 7, 2, 255, 16, 9, 2, 255, 16, 8, 0, 255, 18, 9, 3, 255, 17, 11, 4, 255, 17, 11, 2, 255, 18, 10, 2, 255, 18, 8, 0, 255, 23, 13, 4, 255, 21, 12, 2, 255, 19, 10, 2, 255, 19, 11, 3, 255, 20, 12, 3, 255, 21, 10, 4, 255, 23, 11, 4, 255, 20, 10, 3, 255, 20, 15, 5, 255, 20, 13, 3, 255, 22, 12, 3, 255, 29, 16, 8, 255, 24, 10, 3, 255, 23, 12, 4, 255, 21, 13, 2, 255, 22, 15, 3, 255, 18, 14, 3, 255, 16, 9, 1, 255, 25, 14, 5, 255, 24, 13, 3, 255, 23, 15, 5, 255, 25, 13, 6, 255, 27, 13, 2, 255, 32, 16, 1, 255, 28, 15, 0, 255, 32, 19, 3, 255, 34, 17, 4, 255, 31, 14, 1, 255, 36, 20, 4, 255, 41, 18, 5, 255, 36, 18, 3, 255, 44, 20, 6, 255, 45, 20, 3, 255, 45, 21, 3, 255, 44, 20, 3, 255, 46, 18, 1, 255, 49, 20, 2, 255, 49, 21, 2, 255, 47, 21, 1, 255, 50, 24, 3, 255, 46, 20, 3, 255, 53, 22, 4, 255, 50, 24, 5, 255, 42, 20, 3, 255, 44, 20, 4, 255, 39, 24, 3, 255, 43, 20, 2, 255, 45, 25, 4, 255, 38, 22, 1, 255, 42, 24, 4, 255, 44, 23, 2, 255, 46, 22, 2, 255, 50, 25, 5, 255, 48, 22, 6, 255, 48, 26, 10, 255, 37, 26, 5, 255, 52, 30, 3, 255, 50, 24, 1, 255, 52, 27, 5, 255, 60, 30, 4, 255, 53, 26, 4, 255, 55, 29, 7, 255, 55, 26, 2, 255, 48, 24, 3, 255, 45, 24, 1, 255, 55, 32, 0, 255, 53, 28, 2, 255, 54, 27, 6, 255, 54, 32, 6, 255, 50, 33, 1, 255, 57, 27, 1, 255, 62, 38, 4, 255, 71, 37, 8, 255, 56, 29, 0, 255, 56, 31, 1, 255, 63, 30, 5, 255, 61, 31, 3, 255, 61, 32, 2, 255, 68, 35, 7, 255, 63, 36, 6, 255, 63, 35, 5, 255, 65, 34, 3, 255, 67, 35, 4, 255, 67, 31, 2, 255, 62, 36, 6, 255, 61, 34, 3, 255, 62, 33, 6, 255, 60, 36, 7, 255, 59, 34, 2, 255, 69, 36, 1, 255, 94, 37, 4, 255, 85, 35, 5, 255, 71, 36, 5, 255, 63, 33, 1, 255, 65, 35, 2, 255, 69, 36, 3, 255, 66, 32, 0, 255, 62, 36, 2, 255, 61, 36, 5, 255, 63, 35, 1, 255, 58, 34, 0, 255, 65, 34, 2, 255, 69, 39, 6, 255, 63, 31, 5, 255, 65, 31, 1, 255, 60, 35, 3, 255, 63, 36, 7, 255, 66, 31, 2, 255, 68, 33, 6, 255, 65, 33, 4, 255, 66, 32, 1, 255, 64, 30, 3, 255, 66, 37, 4, 255, 61, 37, 2, 255, 64, 36, 5, 255, 65, 34, 1, 255, 68, 39, 5, 255, 67, 37, 1, 255, 62, 38, 8, 255, 58, 32, 8, 255, 66, 37, 8, 255, 66, 40, 3, 255, 67, 39, 5, 255, 71, 38, 11, 255, 65, 44, 4, 255, 68, 44, 5, 255, 71, 43, 6, 255, 68, 51, 4, 255, 68, 51, 11, 255, 96, 55, 10, 255, 106, 57, 17, 255, 95, 51, 18, 255, 81, 46, 15, 255, 71, 51, 9, 255, 66, 54, 17, 255, 71, 47, 25, 255, 78, 53, 15, 255, 75, 59, 11, 255, 68, 59, 9, 255, 70, 60, 16, 255, 91, 62, 22, 255, 112, 69, 20, 255, 112, 72, 14, 255, 106, 65, 23, 255, 85, 63, 22, 255, 72, 62, 17, 255, 75, 67, 32, 255, 98, 69, 25, 255, 110, 73, 30, 255, 108, 75, 25, 255, 94, 71, 22, 255, 97, 78, 35, 255, 114, 79, 31, 255, 119, 77, 35, 255, 123, 79, 27, 255, 116, 83, 34, 255, 98, 78, 38, 255, 82, 78, 40, 255, 77, 81, 41, 255, 87, 83, 43, 255, 89, 84, 43, 255, 87, 85, 47, 255, 89, 88, 38, 255, 86, 89, 42, 255, 92, 91, 56, 255, 128, 103, 48, 255, 124, 101, 50, 255, 118, 99, 57, 255, 126, 100, 50, 255, 123, 105, 53, 255, 99, 103, 49, 255, 90, 98, 51, 255, 118, 108, 58, 255, 128, 112, 52, 255, 121, 109, 51, 255, 112, 106, 60, 255, 98, 103, 71, 255, 90, 104, 58, 255, 92, 106, 56, 255, 97, 103, 55, 255, 105, 104, 60, 255, 121, 105, 61, 255, 122, 110, 52, 255, 118, 105, 58, 255, 116, 105, 59, 255, 119, 110, 44, 255, 121, 109, 42, 255, 121, 103, 44, 255, 123, 106, 44, 255, 125, 104, 45, 255, 124, 99, 45, 255, 124, 99, 41, 255, 123, 99, 34, 255, 116, 97, 28, 255, 115, 96, 41, 255, 112, 89, 42, 255, 114, 89, 34, 255, 115, 91, 33, 255, 111, 89, 27, 255, 111, 87, 31, 255, 113, 82, 24, 255, 120, 84, 28, 255, 121, 82, 23, 255, 119, 79, 28, 255, 115, 80, 17, 255, 115, 79, 19, 255, 108, 70, 26, 255, 105, 71, 19, 255, 106, 71, 24, 255, 104, 71, 23, 255, 101, 67, 19, 255, 102, 66, 26, 255, 100, 66, 17, 255, 101, 68, 17, 255, 103, 66, 13, 255, 108, 62, 11, 255, 109, 64, 3, 255, 106, 62, 16, 255, 101, 62, 15, 255, 110, 62, 19, 255, 110, 56, 14, 255, 108, 60, 5, 255, 106, 59, 8, 255, 104, 56, 10, 255, 106, 56, 11, 255, 107, 55, 6, 255, 119, 56, 7, 255, 119, 54, 3, 255, 118, 52, 5, 255, 118, 54, 9, 255, 111, 47, 4, 255, 114, 50, 7, 255, 115, 52, 7, 255, 112, 49, 5, 255, 116, 46, 7, 255, 116, 46, 7, 255, 115, 47, 6, 255, 116, 45, 3, 255, 116, 47, 8, 255, 103, 40, 4, 255, 102, 46, 4, 255, 100, 46, 4, 255, 103, 45, 5, 255, 103, 40, 2, 255, 110, 44, 4, 255, 114, 48, 2, 255, 113, 44, 4, 255, 111, 38, 6, 255, 107, 38, 6, 255, 101, 39, 3, 255, 97, 40, 2, 255, 84, 39, 3, 255, 82, 33, 2, 255, 85, 33, 4, 255, 78, 34, 2, 255, 80, 35, 2, 255, 85, 35, 3, 255, 79, 33, 1, 255, 75, 29, 3, 255, 73, 29, 2, 255, 76, 34, 3, 255, 77, 32, 0, 255, 76, 30, 1, 255, 70, 32, 2, 255, 76, 33, 2, 255, 77, 33, 4, 255, 74, 27, 3, 255, 76, 29, 6, 255, 69, 33, 5, 255, 71, 31, 0, 255, 78, 30, 1, 255, 77, 33, 5, 255, 75, 29, 1, 255, 79, 29, 1, 255, 93, 37, 7, 255, 89, 33, 6, 255, 77, 28, 2, 255, 81, 32, 0, 255, 80, 26, 0, 255, 74, 31, 2, 255, 85, 29, 1, 255, 85, 31, 0, 255, 81, 34, 4, 255, 89, 32, 4, 255, 89, 33, 2, 255, 85, 30, 0, 255, 84, 30, 1, 255, 84, 28, 0, 255, 86, 32, 2, 255, 85, 30, 2, 255, 82, 24, 3, 255, 77, 29, 3, 255, 80, 31, 6, 255, 80, 28, 4, 255, 78, 25, 1, 255, 76, 29, 4, 255, 73, 30, 6, 255, 69, 23, 1, 255, 72, 25, 5, 255, 72, 26, 4, 255, 69, 25, 2, 255, 68, 26, 5, 255, 64, 19, 2, 255, 69, 23, 3, 255, 71, 23, 1, 255, 73, 22, 1, 255, 81, 29, 6, 255, 75, 23, 2, 255, 74, 22, 2, 255, 78, 28, 3, 255, 69, 27, 3, 255, 65, 24, 1, 255, 78, 25, 7, 255, 79, 22, 3, 255, 75, 26, 3, 255, 71, 25, 3, 255, 69, 23, 3, 255, 71, 19, 0, 255, 78, 21, 2, 255, 77, 23, 2, 255, 72, 22, 0, 255, 77, 23, 3, 255, 76, 21, 0, 255, 80, 25, 4, 255, 80, 23, 3, 255, 77, 20, 1, 255, 72, 20, 2, 255, 65, 20, 2, 255, 67, 20, 1, 255, 67, 21, 4, 255, 66, 19, 0, 255, 57, 18, 0, 255, 66, 25, 7, 255, 66, 19, 1, 255, 59, 19, 1, 255, 68, 19, 5, 255, 64, 18, 3, 255, 63, 19, 2, 255, 59, 18, 4, 255, 49, 15, 5, 255, 51, 19, 5, 255, 50, 19, 3, 255, 58, 16, 4, 255, 54, 19, 5, 255, 56, 16, 4, 255, 57, 14, 2, 255, 55, 17, 2, 255, 55, 15, 2, 255, 57, 15, 4, 255, 59, 16, 4, 255, 61, 16, 4, 255, 57, 14, 3, 255, 51, 16, 3, 255, 42, 13, 0, 255, 48, 12, 2, 255, 49, 17, 4, 255, 41, 18, 3, 255, 41, 14, 3, 255, 42, 17, 8, 255, 43, 12, 2, 255, 37, 11, 3, 255, 35, 12, 4, 255, 35, 15, 5, 255, 30, 11, 2, 255, 31, 13, 1, 255, 34, 15, 2, 255, 36, 12, 2, 255, 31, 12, 5, 255, 21, 11, 3, 255, 23, 8, 3, 255, 26, 9, 2, 255, 18, 7, 0, 255, 15, 7, 1, 255, 17, 11, 0, 255, 27, 9, 2, 255, 31, 10, 4, 255, 39, 11, 1, 255, 79, 21, 1, 255, 96, 29, 4, 255, 104, 31, 4, 255, 105, 29, 1, 255, 100, 31, 3, 255, 98, 30, 3, 255, 102, 28, 4, 255, 101, 28, 4, 255, 95, 26, 1, 255, 99, 27, 4, 255, 87, 25, 5, 255, 71, 17, 1, 255, 11, 5, 3, 255, 11, 5, 2, 255, 11, 6, 1, 255, 14, 7, 1, 255, 16, 9, 3, 255, 17, 10, 3, 255, 16, 9, 3, 255, 18, 11, 5, 255, 15, 10, 2, 255, 19, 11, 3, 255, 18, 8, 1, 255, 21, 11, 2, 255, 21, 11, 2, 255, 21, 13, 2, 255, 19, 12, 1, 255, 17, 10, 1, 255, 22, 12, 5, 255, 23, 12, 6, 255, 21, 10, 3, 255, 14, 9, 1, 255, 18, 11, 2, 255, 19, 9, 1, 255, 20, 10, 2, 255, 23, 11, 2, 255, 26, 13, 5, 255, 25, 12, 2, 255, 21, 13, 1, 255, 17, 14, 2, 255, 18, 10, 1, 255, 29, 13, 4, 255, 29, 13, 5, 255, 20, 10, 2, 255, 28, 13, 7, 255, 34, 16, 4, 255, 36, 18, 1, 255, 30, 15, 0, 255, 33, 18, 2, 255, 34, 19, 5, 255, 40, 17, 5, 255, 40, 21, 6, 255, 37, 20, 4, 255, 35, 15, 0, 255, 47, 20, 7, 255, 44, 20, 3, 255, 44, 18, 2, 255, 50, 24, 7, 255, 49, 21, 3, 255, 50, 21, 3, 255, 46, 22, 2, 255, 43, 19, 0, 255, 45, 18, 2, 255, 45, 21, 3, 255, 41, 22, 1, 255, 42, 18, 0, 255, 47, 18, 2, 255, 43, 19, 3, 255, 37, 26, 4, 255, 44, 21, 1, 255, 43, 25, 3, 255, 39, 24, 1, 255, 44, 24, 3, 255, 45, 23, 2, 255, 45, 24, 3, 255, 48, 22, 1, 255, 50, 24, 1, 255, 48, 23, 4, 255, 38, 22, 4, 255, 51, 24, 3, 255, 44, 23, 6, 255, 45, 22, 5, 255, 50, 27, 3, 255, 56, 29, 3, 255, 52, 28, 1, 255, 49, 29, 5, 255, 49, 26, 1, 255, 52, 29, 1, 255, 48, 30, 1, 255, 50, 31, 2, 255, 50, 24, 7, 255, 57, 26, 5, 255, 52, 28, 3, 255, 58, 29, 1, 255, 70, 28, 1, 255, 70, 30, 4, 255, 58, 29, 1, 255, 55, 31, 1, 255, 60, 31, 3, 255, 61, 30, 2, 255, 57, 31, 1, 255, 58, 34, 3, 255, 64, 31, 5, 255, 63, 32, 5, 255, 59, 32, 3, 255, 69, 35, 7, 255, 62, 33, 5, 255, 58, 32, 3, 255, 64, 30, 3, 255, 69, 31, 2, 255, 57, 36, 0, 255, 65, 35, 0, 255, 64, 36, 4, 255, 54, 29, 2, 255, 60, 28, 4, 255, 54, 32, 3, 255, 66, 33, 6, 255, 63, 33, 3, 255, 59, 35, 4, 255, 65, 37, 8, 255, 58, 34, 4, 255, 67, 35, 7, 255, 73, 33, 5, 255, 62, 35, 6, 255, 62, 33, 3, 255, 70, 33, 1, 255, 65, 35, 4, 255, 60, 34, 7, 255, 70, 41, 3, 255, 63, 33, 4, 255, 55, 30, 3, 255, 65, 37, 4, 255, 80, 35, 5, 255, 83, 33, 3, 255, 72, 30, 4, 255, 69, 35, 4, 255, 63, 36, 2, 255, 63, 34, 8, 255, 64, 33, 4, 255, 62, 32, 5, 255, 57, 39, 10, 255, 64, 38, 3, 255, 72, 37, 1, 255, 66, 36, 3, 255, 61, 40, 10, 255, 65, 38, 7, 255, 67, 37, 8, 255, 64, 41, 12, 255, 60, 42, 9, 255, 63, 45, 15, 255, 64, 42, 8, 255, 76, 49, 11, 255, 111, 55, 12, 255, 114, 57, 4, 255, 85, 51, 6, 255, 66, 50, 8, 255, 72, 56, 4, 255, 64, 55, 7, 255, 66, 54, 19, 255, 68, 56, 13, 255, 82, 62, 7, 255, 76, 62, 11, 255, 71, 58, 24, 255, 69, 54, 22, 255, 73, 59, 27, 255, 78, 57, 30, 255, 77, 57, 27, 255, 68, 61, 28, 255, 72, 65, 29, 255, 100, 71, 26, 255, 123, 75, 14, 255, 119, 72, 37, 255, 115, 74, 18, 255, 111, 76, 29, 255, 108, 77, 38, 255, 111, 77, 36, 255, 115, 83, 40, 255, 109, 79, 35, 255, 91, 75, 38, 255, 74, 76, 41, 255, 77, 83, 45, 255, 75, 83, 44, 255, 84, 83, 48, 255, 84, 86, 42, 255, 88, 87, 48, 255, 86, 90, 45, 255, 83, 92, 51, 255, 92, 92, 47, 255, 110, 96, 51, 255, 113, 102, 59, 255, 114, 100, 61, 255, 115, 98, 58, 255, 111, 102, 61, 255, 92, 97, 64, 255, 97, 103, 57, 255, 110, 103, 60, 255, 106, 101, 58, 255, 98, 104, 58, 255, 94, 102, 59, 255, 93, 102, 58, 255, 91, 106, 61, 255, 91, 106, 57, 255, 108, 110, 56, 255, 118, 109, 52, 255, 129, 112, 49, 255, 130, 111, 51, 255, 126, 108, 63, 255, 120, 107, 54, 255, 122, 108, 53, 255, 122, 105, 52, 255, 128, 102, 57, 255, 126, 104, 47, 255, 127, 102, 30, 255, 126, 100, 38, 255, 122, 98, 44, 255, 123, 97, 44, 255, 116, 95, 35, 255, 123, 93, 29, 255, 124, 92, 42, 255, 120, 91, 36, 255, 118, 93, 22, 255, 118, 89, 32, 255, 119, 82, 40, 255, 113, 82, 29, 255, 110, 82, 25, 255, 111, 82, 23, 255, 107, 78, 23, 255, 105, 77, 23, 255, 99, 71, 23, 255, 100, 71, 25, 255, 102, 73, 19, 255, 107, 75, 5, 255, 114, 75, 14, 255, 110, 68, 17, 255, 111, 70, 13, 255, 106, 66, 10, 255, 108, 66, 20, 255, 104, 65, 9, 255, 103, 60, 20, 255, 106, 63, 15, 255, 105, 61, 11, 255, 108, 62, 8, 255, 112, 62, 3, 255, 113, 60, 6, 255, 108, 57, 0, 255, 109, 56, 8, 255, 110, 58, 9, 255, 107, 55, 6, 255, 113, 61, 6, 255, 114, 57, 6, 255, 120, 49, 10, 255, 122, 48, 9, 255, 118, 51, 3, 255, 116, 55, 4, 255, 115, 52, 5, 255, 111, 50, 6, 255, 110, 47, 7, 255, 116, 44, 6, 255, 112, 45, 4, 255, 113, 49, 5, 255, 119, 46, 4, 255, 115, 46, 6, 255, 104, 44, 6, 255, 102, 50, 4, 255, 101, 47, 4, 255, 106, 44, 6, 255, 107, 42, 6, 255, 106, 42, 5, 255, 104, 42, 6, 255, 101, 41, 1, 255, 110, 43, 0, 255, 122, 42, 2, 255, 116, 36, 2, 255, 106, 37, 6, 255, 91, 36, 4, 255, 85, 35, 4, 255, 81, 32, 5, 255, 74, 29, 1, 255, 84, 37, 5, 255, 85, 34, 3, 255, 85, 34, 2, 255, 89, 32, 5, 255, 88, 29, 6, 255, 79, 34, 8, 255, 75, 32, 5, 255, 85, 31, 4, 255, 82, 31, 2, 255, 75, 28, 3, 255, 77, 31, 4, 255, 76, 30, 1, 255, 75, 31, 1, 255, 77, 34, 4, 255, 77, 34, 7, 255, 78, 29, 4, 255, 75, 31, 2, 255, 78, 34, 5, 255, 81, 31, 2, 255, 87, 31, 1, 255, 87, 32, 5, 255, 80, 29, 5, 255, 72, 31, 4, 255, 71, 31, 2, 255, 77, 29, 5, 255, 73, 28, 5, 255, 78, 25, 5, 255, 79, 27, 4, 255, 84, 28, 2, 255, 85, 31, 3, 255, 82, 31, 1, 255, 85, 30, 1, 255, 88, 28, 0, 255, 87, 29, 0, 255, 82, 29, 0, 255, 79, 24, 1, 255, 77, 26, 2, 255, 76, 27, 2, 255, 79, 28, 1, 255, 81, 28, 3, 255, 75, 26, 3, 255, 72, 27, 2, 255, 71, 25, 2, 255, 71, 23, 4, 255, 74, 27, 6, 255, 71, 25, 1, 255, 69, 21, 2, 255, 70, 20, 2, 255, 71, 23, 0, 255, 69, 24, 3, 255, 69, 24, 3, 255, 73, 26, 5, 255, 76, 27, 3, 255, 74, 24, 0, 255, 76, 27, 2, 255, 80, 31, 6, 255, 74, 21, 2, 255, 77, 25, 6, 255, 72, 25, 4, 255, 72, 25, 2, 255, 75, 27, 4, 255, 65, 25, 1, 255, 64, 24, 1, 255, 61, 23, 1, 255, 67, 22, 0, 255, 76, 29, 3, 255, 81, 25, 1, 255, 74, 20, 3, 255, 80, 24, 4, 255, 83, 25, 3, 255, 84, 24, 5, 255, 77, 19, 0, 255, 70, 22, 1, 255, 71, 21, 2, 255, 73, 24, 8, 255, 77, 25, 5, 255, 71, 24, 5, 255, 67, 22, 2, 255, 68, 20, 1, 255, 66, 24, 4, 255, 63, 17, 2, 255, 63, 15, 1, 255, 65, 18, 1, 255, 59, 18, 5, 255, 55, 16, 8, 255, 60, 19, 6, 255, 58, 22, 2, 255, 62, 17, 3, 255, 52, 16, 1, 255, 61, 14, 1, 255, 55, 13, 0, 255, 50, 16, 2, 255, 53, 14, 3, 255, 54, 16, 5, 255, 48, 15, 2, 255, 46, 16, 3, 255, 45, 14, 3, 255, 45, 15, 5, 255, 39, 15, 4, 255, 48, 19, 5, 255, 65, 17, 4, 255, 46, 15, 0, 255, 51, 13, 2, 255, 43, 11, 4, 255, 31, 13, 1, 255, 25, 12, 1, 255, 28, 12, 0, 255, 33, 13, 2, 255, 37, 13, 4, 255, 38, 12, 4, 255, 39, 12, 3, 255, 35, 11, 0, 255, 31, 13, 2, 255, 27, 11, 3, 255, 26, 9, 2, 255, 21, 7, 2, 255, 21, 8, 2, 255, 30, 11, 8, 255, 17, 10, 5, 255, 19, 9, 1, 255, 19, 4, 2, 255, 44, 13, 6, 255, 89, 26, 6, 255, 109, 28, 4, 255, 105, 26, 2, 255, 104, 31, 1, 255, 110, 33, 5, 255, 108, 31, 3, 255, 106, 28, 1, 255, 107, 29, 1, 255, 105, 29, 1, 255, 105, 27, 1, 255, 94, 25, 1, 255, 84, 21, 1, 255, 19, 7, 6, 255, 16, 5, 2, 255, 13, 5, 0, 255, 16, 9, 2, 255, 15, 8, 3, 255, 12, 7, 1, 255, 13, 6, 0, 255, 18, 11, 5, 255, 14, 9, 3, 255, 16, 8, 1, 255, 22, 10, 5, 255, 23, 10, 4, 255, 22, 10, 3, 255, 25, 9, 3, 255, 20, 9, 2, 255, 19, 10, 1, 255, 19, 10, 1, 255, 24, 15, 4, 255, 23, 16, 2, 255, 20, 10, 1, 255, 22, 12, 3, 255, 21, 11, 4, 255, 20, 12, 5, 255, 18, 9, 1, 255, 23, 12, 4, 255, 23, 12, 3, 255, 20, 11, 1, 255, 23, 15, 6, 255, 21, 12, 3, 255, 24, 11, 1, 255, 28, 15, 3, 255, 28, 14, 4, 255, 28, 11, 1, 255, 31, 16, 1, 255, 29, 17, 3, 255, 23, 14, 1, 255, 30, 18, 4, 255, 35, 17, 1, 255, 46, 19, 5, 255, 32, 15, 1, 255, 35, 17, 2, 255, 39, 19, 5, 255, 38, 19, 3, 255, 40, 23, 4, 255, 52, 17, 3, 255, 54, 19, 4, 255, 45, 19, 2, 255, 46, 21, 2, 255, 50, 23, 6, 255, 47, 18, 4, 255, 39, 16, 2, 255, 44, 19, 3, 255, 42, 24, 3, 255, 42, 22, 1, 255, 45, 22, 3, 255, 47, 22, 4, 255, 42, 22, 1, 255, 47, 21, 3, 255, 43, 23, 6, 255, 38, 23, 3, 255, 43, 22, 3, 255, 43, 21, 2, 255, 45, 24, 3, 255, 50, 23, 4, 255, 40, 22, 3, 255, 42, 25, 2, 255, 39, 22, 6, 255, 47, 24, 6, 255, 49, 28, 3, 255, 45, 24, 3, 255, 47, 23, 4, 255, 52, 28, 5, 255, 51, 30, 3, 255, 50, 27, 2, 255, 56, 26, 3, 255, 58, 29, 7, 255, 52, 26, 2, 255, 53, 31, 5, 255, 49, 25, 5, 255, 64, 21, 3, 255, 56, 26, 1, 255, 47, 29, 3, 255, 54, 26, 5, 255, 52, 27, 1, 255, 57, 31, 4, 255, 58, 32, 3, 255, 60, 35, 4, 255, 61, 30, 2, 255, 62, 29, 2, 255, 58, 32, 1, 255, 64, 31, 1, 255, 72, 32, 5, 255, 64, 31, 3, 255, 62, 33, 2, 255, 64, 35, 3, 255, 63, 35, 3, 255, 68, 33, 2, 255, 67, 36, 3, 255, 59, 36, 4, 255, 62, 32, 3, 255, 67, 34, 5, 255, 58, 36, 7, 255, 58, 35, 4, 255, 63, 31, 1, 255, 74, 33, 4, 255, 68, 34, 5, 255, 54, 32, 1, 255, 54, 30, 2, 255, 66, 30, 8, 255, 67, 33, 6, 255, 62, 33, 1, 255, 67, 29, 5, 255, 64, 32, 4, 255, 63, 35, 0, 255, 68, 39, 2, 255, 68, 38, 8, 255, 70, 33, 4, 255, 64, 32, 6, 255, 64, 31, 6, 255, 96, 43, 7, 255, 106, 40, 2, 255, 90, 35, 6, 255, 65, 27, 3, 255, 67, 32, 1, 255, 74, 36, 6, 255, 67, 31, 7, 255, 66, 35, 6, 255, 64, 34, 4, 255, 58, 34, 10, 255, 58, 37, 6, 255, 64, 35, 0, 255, 70, 38, 6, 255, 63, 38, 5, 255, 65, 41, 11, 255, 72, 38, 4, 255, 60, 41, 3, 255, 64, 45, 11, 255, 68, 43, 14, 255, 68, 45, 7, 255, 62, 45, 8, 255, 69, 45, 18, 255, 71, 49, 18, 255, 66, 50, 9, 255, 73, 50, 14, 255, 71, 52, 19, 255, 65, 50, 22, 255, 68, 49, 22, 255, 74, 55, 21, 255, 77, 56, 10, 255, 74, 59, 9, 255, 65, 61, 21, 255, 66, 57, 31, 255, 69, 60, 22, 255, 70, 65, 15, 255, 70, 62, 27, 255, 89, 69, 12, 255, 83, 68, 25, 255, 111, 76, 29, 255, 117, 77, 32, 255, 117, 77, 31, 255, 111, 77, 33, 255, 109, 79, 21, 255, 105, 75, 30, 255, 93, 75, 36, 255, 86, 76, 38, 255, 79, 77, 41, 255, 80, 78, 39, 255, 82, 79, 36, 255, 82, 83, 37, 255, 82, 83, 40, 255, 85, 83, 50, 255, 87, 85, 59, 255, 79, 86, 57, 255, 80, 89, 56, 255, 87, 92, 60, 255, 91, 93, 57, 255, 87, 96, 51, 255, 96, 101, 45, 255, 91, 96, 57, 255, 86, 93, 64, 255, 94, 99, 68, 255, 91, 100, 65, 255, 89, 103, 61, 255, 89, 105, 58, 255, 87, 101, 66, 255, 91, 101, 69, 255, 94, 106, 63, 255, 93, 109, 64, 255, 92, 105, 62, 255, 101, 104, 58, 255, 121, 112, 62, 255, 131, 116, 51, 255, 128, 114, 45, 255, 128, 108, 60, 255, 129, 111, 54, 255, 125, 110, 45, 255, 124, 109, 45, 255, 126, 105, 56, 255, 128, 103, 57, 255, 131, 106, 38, 255, 127, 105, 21, 255, 127, 103, 44, 255, 125, 96, 52, 255, 122, 98, 42, 255, 119, 96, 30, 255, 124, 94, 38, 255, 123, 90, 38, 255, 123, 88, 32, 255, 122, 91, 22, 255, 123, 91, 30, 255, 120, 83, 36, 255, 120, 83, 27, 255, 116, 81, 30, 255, 107, 77, 24, 255, 104, 75, 19, 255, 106, 78, 20, 255, 105, 76, 26, 255, 99, 77, 14, 255, 97, 76, 15, 255, 110, 75, 14, 255, 117, 67, 13, 255, 120, 66, 11, 255, 120, 68, 21, 255, 112, 67, 15, 255, 107, 61, 16, 255, 107, 63, 15, 255, 108, 61, 18, 255, 110, 60, 14, 255, 112, 60, 14, 255, 115, 63, 4, 255, 111, 59, 7, 255, 112, 59, 6, 255, 116, 61, 1, 255, 117, 59, 4, 255, 118, 56, 14, 255, 113, 49, 8, 255, 114, 51, 6, 255, 114, 54, 2, 255, 113, 53, 9, 255, 111, 53, 10, 255, 113, 51, 9, 255, 114, 51, 6, 255, 111, 51, 7, 255, 106, 48, 1, 255, 107, 48, 3, 255, 109, 51, 7, 255, 110, 51, 5, 255, 111, 47, 3, 255, 109, 46, 4, 255, 105, 44, 7, 255, 100, 40, 5, 255, 106, 43, 3, 255, 109, 45, 3, 255, 110, 45, 6, 255, 110, 43, 5, 255, 111, 41, 3, 255, 111, 37, 6, 255, 104, 40, 4, 255, 102, 43, 3, 255, 108, 43, 3, 255, 109, 38, 2, 255, 111, 39, 4, 255, 104, 37, 4, 255, 87, 37, 3, 255, 76, 34, 2, 255, 81, 33, 3, 255, 86, 36, 4, 255, 85, 35, 1, 255, 87, 36, 3, 255, 85, 35, 3, 255, 89, 32, 2, 255, 87, 35, 2, 255, 80, 33, 1, 255, 88, 36, 3, 255, 91, 34, 3, 255, 89, 34, 2, 255, 84, 33, 2, 255, 80, 30, 5, 255, 74, 30, 5, 255, 82, 30, 6, 255, 77, 33, 2, 255, 75, 32, 3, 255, 74, 26, 4, 255, 75, 29, 8, 255, 73, 25, 3, 255, 76, 24, 1, 255, 75, 25, 2, 255, 73, 28, 4, 255, 75, 30, 3, 255, 63, 26, 2, 255, 69, 28, 8, 255, 71, 25, 5, 255, 74, 23, 2, 255, 75, 29, 5, 255, 71, 29, 3, 255, 81, 28, 2, 255, 87, 29, 5, 255, 83, 26, 0, 255, 84, 26, 1, 255, 84, 26, 3, 255, 83, 25, 2, 255, 81, 28, 2, 255, 79, 25, 4, 255, 79, 26, 3, 255, 80, 28, 1, 255, 81, 30, 4, 255, 79, 27, 5, 255, 81, 29, 5, 255, 74, 22, 2, 255, 73, 22, 7, 255, 71, 24, 4, 255, 71, 25, 0, 255, 73, 25, 3, 255, 76, 25, 5, 255, 74, 24, 2, 255, 74, 26, 2, 255, 79, 29, 4, 255, 78, 26, 2, 255, 78, 27, 3, 255, 72, 26, 1, 255, 75, 27, 1, 255, 85, 29, 6, 255, 84, 24, 4, 255, 76, 22, 2, 255, 68, 24, 3, 255, 66, 23, 3, 255, 70, 21, 1, 255, 74, 23, 2, 255, 81, 24, 4, 255, 77, 25, 2, 255, 79, 21, 2, 255, 73, 23, 3, 255, 68, 19, 1, 255, 62, 21, 4, 255, 70, 24, 3, 255, 73, 21, 1, 255, 80, 22, 4, 255, 77, 21, 2, 255, 74, 23, 3, 255, 79, 21, 2, 255, 76, 20, 3, 255, 82, 21, 2, 255, 78, 25, 5, 255, 67, 22, 2, 255, 65, 21, 1, 255, 60, 19, 3, 255, 58, 17, 1, 255, 60, 22, 3, 255, 68, 23, 3, 255, 63, 20, 3, 255, 70, 18, 6, 255, 70, 21, 4, 255, 71, 22, 3, 255, 64, 21, 3, 255, 55, 16, 0, 255, 62, 17, 2, 255, 57, 16, 1, 255, 55, 15, 4, 255, 55, 16, 7, 255, 49, 16, 6, 255, 46, 13, 0, 255, 51, 15, 3, 255, 53, 14, 2, 255, 51, 13, 4, 255, 50, 14, 3, 255, 53, 17, 6, 255, 65, 15, 5, 255, 71, 14, 1, 255, 41, 16, 5, 255, 41, 14, 3, 255, 45, 14, 3, 255, 39, 11, 4, 255, 40, 10, 1, 255, 39, 13, 1, 255, 40, 12, 5, 255, 41, 11, 6, 255, 40, 11, 0, 255, 45, 16, 4, 255, 36, 14, 2, 255, 26, 12, 2, 255, 30, 12, 6, 255, 27, 9, 3, 255, 26, 10, 2, 255, 37, 13, 5, 255, 26, 10, 6, 255, 17, 10, 0, 255, 21, 11, 5, 255, 38, 11, 3, 255, 80, 26, 3, 255, 103, 28, 3, 255, 110, 28, 4, 255, 106, 30, 0, 255, 107, 30, 0, 255, 110, 33, 2, 255, 106, 32, 1, 255, 108, 30, 0, 255, 112, 29, 4, 255, 103, 27, 3, 255, 98, 25, 0, 255, 99, 27, 2, 255, 13, 5, 3, 255, 13, 5, 1, 255, 16, 8, 2, 255, 19, 10, 3, 255, 16, 8, 1, 255, 15, 8, 3, 255, 16, 7, 3, 255, 18, 11, 5, 255, 17, 10, 4, 255, 17, 7, 1, 255, 21, 9, 3, 255, 23, 10, 3, 255, 24, 10, 4, 255, 22, 8, 4, 255, 19, 10, 5, 255, 20, 11, 3, 255, 22, 11, 2, 255, 20, 10, 0, 255, 21, 14, 3, 255, 26, 16, 6, 255, 23, 11, 3, 255, 24, 13, 5, 255, 25, 15, 7, 255, 20, 10, 3, 255, 20, 11, 2, 255, 20, 13, 2, 255, 19, 13, 3, 255, 23, 10, 5, 255, 26, 14, 6, 255, 21, 14, 3, 255, 25, 13, 2, 255, 35, 12, 5, 255, 31, 12, 5, 255, 30, 15, 5, 255, 30, 17, 7, 255, 28, 15, 3, 255, 29, 13, 3, 255, 33, 14, 3, 255, 40, 19, 5, 255, 38, 17, 2, 255, 45, 20, 8, 255, 39, 19, 4, 255, 39, 17, 1, 255, 49, 21, 7, 255, 44, 18, 6, 255, 44, 17, 4, 255, 44, 21, 3, 255, 39, 25, 3, 255, 42, 20, 3, 255, 46, 22, 4, 255, 39, 20, 4, 255, 38, 17, 2, 255, 40, 18, 1, 255, 46, 23, 4, 255, 40, 21, 0, 255, 40, 24, 2, 255, 42, 26, 5, 255, 39, 20, 4, 255, 35, 18, 3, 255, 40, 22, 2, 255, 45, 22, 4, 255, 44, 21, 2, 255, 44, 24, 2, 255, 49, 26, 7, 255, 44, 22, 5, 255, 38, 19, 4, 255, 43, 20, 5, 255, 48, 22, 2, 255, 46, 22, 2, 255, 43, 26, 2, 255, 43, 27, 2, 255, 43, 28, 5, 255, 44, 29, 4, 255, 46, 27, 0, 255, 45, 29, 3, 255, 52, 28, 5, 255, 58, 28, 4, 255, 61, 29, 7, 255, 53, 27, 2, 255, 59, 27, 4, 255, 55, 29, 4, 255, 49, 24, 4, 255, 48, 30, 4, 255, 50, 31, 2, 255, 55, 27, 1, 255, 55, 30, 1, 255, 57, 33, 5, 255, 60, 29, 5, 255, 63, 27, 3, 255, 66, 29, 6, 255, 63, 31, 5, 255, 62, 31, 5, 255, 63, 31, 5, 255, 60, 31, 3, 255, 59, 30, 2, 255, 55, 33, 3, 255, 61, 34, 2, 255, 57, 35, 3, 255, 60, 34, 6, 255, 62, 29, 4, 255, 65, 29, 5, 255, 69, 29, 5, 255, 59, 31, 1, 255, 69, 34, 6, 255, 59, 36, 4, 255, 60, 32, 3, 255, 66, 34, 5, 255, 64, 34, 3, 255, 67, 29, 3, 255, 58, 29, 4, 255, 58, 34, 4, 255, 68, 34, 4, 255, 66, 34, 3, 255, 61, 33, 5, 255, 62, 32, 7, 255, 68, 36, 4, 255, 58, 32, 1, 255, 59, 35, 2, 255, 62, 33, 3, 255, 75, 32, 0, 255, 78, 34, 2, 255, 65, 32, 1, 255, 65, 33, 2, 255, 65, 31, 4, 255, 65, 33, 2, 255, 65, 33, 2, 255, 66, 33, 2, 255, 62, 34, 6, 255, 66, 34, 4, 255, 60, 39, 7, 255, 60, 35, 7, 255, 65, 34, 4, 255, 68, 37, 10, 255, 60, 39, 5, 255, 68, 38, 3, 255, 69, 41, 10, 255, 69, 41, 8, 255, 70, 48, 9, 255, 65, 48, 8, 255, 69, 44, 4, 255, 66, 49, 6, 255, 62, 51, 9, 255, 71, 51, 10, 255, 77, 48, 20, 255, 73, 55, 14, 255, 73, 50, 21, 255, 74, 55, 11, 255, 72, 56, 14, 255, 71, 54, 23, 255, 69, 54, 25, 255, 69, 62, 24, 255, 68, 64, 15, 255, 70, 56, 25, 255, 68, 59, 24, 255, 72, 66, 18, 255, 78, 70, 16, 255, 80, 66, 24, 255, 94, 72, 19, 255, 94, 71, 30, 255, 94, 73, 27, 255, 90, 73, 36, 255, 79, 72, 30, 255, 74, 77, 25, 255, 78, 79, 27, 255, 76, 75, 40, 255, 75, 77, 41, 255, 80, 81, 44, 255, 83, 81, 48, 255, 82, 81, 41, 255, 83, 82, 43, 255, 79, 87, 44, 255, 80, 84, 51, 255, 90, 87, 56, 255, 88, 90, 55, 255, 78, 94, 47, 255, 88, 95, 54, 255, 110, 107, 66, 255, 112, 105, 58, 255, 96, 99, 61, 255, 88, 96, 74, 255, 89, 98, 66, 255, 91, 100, 62, 255, 92, 102, 71, 255, 101, 111, 71, 255, 100, 105, 62, 255, 97, 104, 60, 255, 92, 104, 63, 255, 94, 104, 67, 255, 95, 106, 55, 255, 105, 111, 67, 255, 111, 110, 62, 255, 116, 109, 58, 255, 123, 108, 63, 255, 122, 106, 70, 255, 124, 108, 60, 255, 127, 109, 53, 255, 128, 110, 47, 255, 125, 106, 48, 255, 124, 103, 45, 255, 127, 102, 43, 255, 128, 104, 46, 255, 129, 103, 40, 255, 124, 98, 43, 255, 120, 99, 43, 255, 121, 92, 30, 255, 121, 92, 34, 255, 119, 89, 35, 255, 116, 90, 27, 255, 117, 91, 23, 255, 121, 91, 21, 255, 123, 87, 20, 255, 128, 85, 29, 255, 124, 83, 31, 255, 108, 79, 21, 255, 102, 77, 20, 255, 103, 73, 19, 255, 99, 70, 24, 255, 96, 69, 24, 255, 109, 74, 21, 255, 115, 74, 19, 255, 115, 67, 16, 255, 117, 66, 15, 255, 119, 67, 11, 255, 115, 64, 7, 255, 105, 60, 8, 255, 109, 63, 12, 255, 115, 66, 13, 255, 113, 61, 12, 255, 114, 62, 9, 255, 115, 63, 5, 255, 113, 59, 15, 255, 110, 56, 9, 255, 112, 57, 5, 255, 113, 55, 8, 255, 115, 53, 12, 255, 118, 52, 7, 255, 123, 51, 7, 255, 117, 55, 3, 255, 101, 57, 2, 255, 101, 52, 7, 255, 100, 45, 9, 255, 96, 40, 4, 255, 102, 47, 7, 255, 98, 46, 9, 255, 96, 45, 1, 255, 96, 49, 3, 255, 101, 48, 6, 255, 105, 46, 2, 255, 103, 45, 3, 255, 104, 44, 7, 255, 108, 48, 6, 255, 109, 46, 2, 255, 115, 47, 1, 255, 112, 47, 4, 255, 107, 44, 6, 255, 105, 39, 6, 255, 100, 42, 4, 255, 106, 43, 8, 255, 105, 42, 7, 255, 101, 41, 5, 255, 104, 43, 4, 255, 107, 40, 0, 255, 105, 44, 4, 255, 94, 39, 4, 255, 80, 35, 0, 255, 86, 41, 2, 255, 86, 36, 1, 255, 87, 36, 4, 255, 95, 36, 3, 255, 98, 37, 1, 255, 94, 39, 1, 255, 85, 34, 4, 255, 79, 32, 5, 255, 93, 40, 6, 255, 97, 35, 4, 255, 88, 33, 0, 255, 87, 33, 4, 255, 84, 29, 5, 255, 78, 28, 5, 255, 82, 30, 6, 255, 79, 31, 1, 255, 79, 28, 2, 255, 81, 30, 7, 255, 76, 30, 5, 255, 72, 27, 2, 255, 74, 27, 4, 255, 74, 28, 6, 255, 71, 26, 3, 255, 81, 25, 6, 255, 75, 26, 4, 255, 73, 26, 3, 255, 76, 24, 3, 255, 74, 26, 3, 255, 76, 30, 5, 255, 72, 26, 2, 255, 73, 27, 2, 255, 78, 29, 3, 255, 78, 25, 0, 255, 76, 29, 2, 255, 80, 27, 3, 255, 88, 24, 4, 255, 84, 28, 4, 255, 84, 24, 2, 255, 85, 27, 4, 255, 81, 29, 2, 255, 76, 26, 0, 255, 80, 24, 2, 255, 84, 29, 4, 255, 84, 25, 4, 255, 80, 25, 3, 255, 72, 25, 2, 255, 71, 26, 1, 255, 73, 24, 2, 255, 74, 23, 5, 255, 75, 24, 7, 255, 77, 24, 2, 255, 81, 26, 1, 255, 84, 26, 1, 255, 80, 24, 3, 255, 76, 23, 4, 255, 73, 25, 2, 255, 73, 25, 4, 255, 76, 25, 3, 255, 81, 25, 2, 255, 83, 25, 7, 255, 77, 23, 5, 255, 75, 24, 3, 255, 77, 24, 3, 255, 82, 23, 3, 255, 77, 23, 1, 255, 84, 24, 6, 255, 79, 21, 6, 255, 67, 17, 2, 255, 63, 23, 2, 255, 64, 20, 1, 255, 71, 24, 5, 255, 70, 17, 1, 255, 74, 19, 3, 255, 75, 21, 3, 255, 79, 22, 2, 255, 76, 23, 4, 255, 79, 25, 2, 255, 75, 21, 3, 255, 67, 22, 3, 255, 68, 25, 1, 255, 65, 18, 1, 255, 67, 20, 5, 255, 69, 20, 5, 255, 73, 18, 1, 255, 71, 17, 1, 255, 72, 20, 7, 255, 65, 19, 2, 255, 65, 21, 1, 255, 56, 20, 2, 255, 57, 14, 1, 255, 63, 18, 4, 255, 61, 18, 2, 255, 55, 18, 3, 255, 53, 17, 3, 255, 52, 15, 1, 255, 54, 17, 2, 255, 59, 15, 1, 255, 59, 17, 2, 255, 56, 19, 4, 255, 50, 15, 1, 255, 44, 14, 2, 255, 59, 15, 3, 255, 71, 18, 3, 255, 44, 15, 0, 255, 49, 14, 2, 255, 44, 13, 3, 255, 43, 14, 4, 255, 43, 14, 4, 255, 43, 15, 4, 255, 36, 10, 0, 255, 48, 13, 7, 255, 42, 11, 3, 255, 37, 11, 3, 255, 33, 11, 4, 255, 23, 10, 1, 255, 28, 10, 3, 255, 36, 8, 2, 255, 33, 10, 2, 255, 34, 13, 5, 255, 31, 9, 4, 255, 24, 10, 0, 255, 23, 11, 3, 255, 29, 9, 2, 255, 75, 20, 0, 255, 104, 28, 4, 255, 108, 29, 6, 255, 105, 28, 0, 255, 105, 30, 1, 255, 107, 34, 3, 255, 108, 32, 2, 255, 106, 30, 2, 255, 104, 30, 3, 255, 105, 28, 5, 255, 101, 26, 2, 255, 100, 27, 2, 255, 9, 6, 1, 255, 12, 7, 3, 255, 17, 8, 1, 255, 16, 8, 1, 255, 15, 8, 1, 255, 19, 8, 5, 255, 16, 8, 4, 255, 16, 10, 3, 255, 18, 10, 4, 255, 18, 8, 1, 255, 18, 8, 2, 255, 21, 10, 1, 255, 22, 10, 1, 255, 19, 9, 3, 255, 18, 9, 4, 255, 21, 11, 3, 255, 25, 13, 3, 255, 22, 10, 0, 255, 18, 9, 2, 255, 21, 13, 4, 255, 20, 10, 1, 255, 22, 11, 2, 255, 23, 12, 3, 255, 20, 10, 1, 255, 27, 14, 5, 255, 25, 14, 5, 255, 21, 10, 1, 255, 29, 11, 5, 255, 25, 9, 2, 255, 19, 13, 3, 255, 23, 15, 4, 255, 29, 12, 2, 255, 30, 13, 4, 255, 27, 12, 1, 255, 32, 17, 3, 255, 34, 17, 2, 255, 33, 15, 0, 255, 35, 19, 5, 255, 36, 19, 4, 255, 33, 18, 3, 255, 34, 19, 4, 255, 36, 21, 3, 255, 41, 21, 3, 255, 51, 17, 4, 255, 42, 17, 6, 255, 36, 19, 5, 255, 43, 22, 3, 255, 37, 19, 2, 255, 40, 18, 2, 255, 46, 25, 4, 255, 34, 17, 1, 255, 35, 17, 1, 255, 39, 22, 2, 255, 44, 24, 4, 255, 46, 24, 4, 255, 37, 20, 1, 255, 40, 24, 8, 255, 36, 20, 4, 255, 38, 21, 1, 255, 42, 24, 3, 255, 41, 22, 7, 255, 41, 22, 4, 255, 43, 24, 0, 255, 47, 24, 1, 255, 45, 23, 4, 255, 42, 23, 7, 255, 40, 22, 5, 255, 43, 28, 7, 255, 40, 23, 6, 255, 44, 23, 3, 255, 45, 26, 4, 255, 42, 27, 0, 255, 54, 25, 4, 255, 50, 27, 2, 255, 45, 28, 5, 255, 46, 26, 1, 255, 54, 29, 8, 255, 54, 24, 6, 255, 55, 29, 6, 255, 49, 31, 4, 255, 54, 31, 7, 255, 52, 25, 1, 255, 56, 34, 4, 255, 61, 29, 3, 255, 62, 26, 2, 255, 58, 31, 2, 255, 56, 29, 4, 255, 54, 29, 5, 255, 54, 32, 3, 255, 61, 31, 6, 255, 62, 30, 3, 255, 61, 33, 5, 255, 56, 29, 2, 255, 56, 30, 3, 255, 53, 31, 4, 255, 50, 29, 4, 255, 62, 31, 4, 255, 62, 31, 3, 255, 62, 32, 2, 255, 59, 29, 3, 255, 57, 29, 4, 255, 57, 32, 5, 255, 58, 32, 3, 255, 65, 30, 2, 255, 55, 30, 1, 255, 57, 32, 2, 255, 65, 33, 4, 255, 62, 35, 1, 255, 67, 32, 2, 255, 62, 31, 2, 255, 67, 33, 4, 255, 63, 33, 5, 255, 57, 29, 3, 255, 60, 30, 3, 255, 59, 29, 6, 255, 52, 29, 3, 255, 56, 31, 3, 255, 64, 34, 5, 255, 61, 35, 5, 255, 52, 28, 0, 255, 58, 30, 5, 255, 61, 30, 4, 255, 65, 31, 3, 255, 64, 33, 6, 255, 65, 34, 5, 255, 65, 33, 0, 255, 64, 32, 2, 255, 63, 32, 5, 255, 68, 37, 4, 255, 66, 35, 7, 255, 69, 38, 8, 255, 67, 34, 1, 255, 72, 38, 9, 255, 65, 38, 12, 255, 63, 39, 6, 255, 62, 37, 6, 255, 69, 44, 9, 255, 69, 47, 6, 255, 67, 50, 12, 255, 67, 42, 14, 255, 67, 44, 14, 255, 71, 47, 12, 255, 76, 47, 13, 255, 68, 46, 13, 255, 70, 55, 12, 255, 72, 55, 17, 255, 65, 52, 27, 255, 66, 61, 21, 255, 67, 59, 15, 255, 74, 61, 22, 255, 73, 60, 18, 255, 69, 56, 24, 255, 76, 62, 29, 255, 75, 63, 29, 255, 67, 63, 30, 255, 64, 61, 41, 255, 71, 68, 17, 255, 70, 64, 25, 255, 72, 68, 31, 255, 70, 64, 38, 255, 75, 66, 27, 255, 74, 70, 35, 255, 67, 75, 28, 255, 78, 74, 39, 255, 79, 75, 45, 255, 72, 76, 48, 255, 73, 79, 47, 255, 77, 82, 51, 255, 86, 84, 51, 255, 93, 88, 46, 255, 101, 92, 49, 255, 105, 96, 45, 255, 110, 99, 51, 255, 94, 90, 56, 255, 88, 95, 53, 255, 88, 93, 53, 255, 98, 97, 58, 255, 97, 100, 60, 255, 93, 100, 67, 255, 83, 99, 71, 255, 90, 103, 69, 255, 107, 106, 75, 255, 117, 108, 67, 255, 121, 112, 60, 255, 119, 111, 64, 255, 112, 106, 65, 255, 97, 105, 65, 255, 96, 110, 68, 255, 98, 108, 59, 255, 97, 107, 64, 255, 95, 106, 67, 255, 99, 106, 64, 255, 106, 108, 57, 255, 110, 109, 54, 255, 114, 109, 48, 255, 115, 107, 59, 255, 114, 108, 60, 255, 110, 106, 48, 255, 108, 102, 52, 255, 104, 98, 39, 255, 108, 102, 38, 255, 112, 97, 39, 255, 118, 95, 43, 255, 127, 99, 43, 255, 127, 95, 36, 255, 126, 93, 33, 255, 121, 93, 34, 255, 108, 87, 33, 255, 104, 87, 27, 255, 107, 86, 31, 255, 109, 80, 40, 255, 112, 76, 34, 255, 108, 80, 24, 255, 101, 81, 18, 255, 100, 75, 24, 255, 110, 75, 19, 255, 111, 77, 16, 255, 103, 71, 17, 255, 111, 73, 10, 255, 117, 69, 18, 255, 117, 66, 17, 255, 116, 66, 9, 255, 117, 65, 11, 255, 116, 64, 6, 255, 113, 66, 13, 255, 110, 63, 10, 255, 114, 62, 17, 255, 115, 63, 7, 255, 115, 60, 13, 255, 112, 53, 12, 255, 117, 58, 4, 255, 114, 59, 9, 255, 110, 60, 11, 255, 111, 58, 9, 255, 112, 56, 1, 255, 112, 54, 0, 255, 114, 53, 6, 255, 105, 52, 4, 255, 90, 52, 6, 255, 98, 47, 8, 255, 95, 44, 4, 255, 94, 46, 4, 255, 96, 42, 2, 255, 94, 43, 10, 255, 93, 45, 5, 255, 95, 46, 5, 255, 97, 45, 6, 255, 100, 46, 2, 255, 100, 46, 2, 255, 100, 41, 3, 255, 104, 45, 1, 255, 102, 45, 4, 255, 109, 45, 6, 255, 105, 42, 4, 255, 96, 41, 3, 255, 91, 38, 4, 255, 88, 41, 2, 255, 88, 39, 1, 255, 94, 37, 3, 255, 104, 37, 5, 255, 108, 38, 5, 255, 108, 40, 4, 255, 104, 39, 2, 255, 105, 41, 2, 255, 104, 40, 5, 255, 99, 40, 8, 255, 92, 34, 3, 255, 99, 35, 2, 255, 105, 37, 4, 255, 105, 36, 3, 255, 102, 40, 1, 255, 91, 34, 5, 255, 83, 30, 4, 255, 86, 34, 1, 255, 88, 35, 4, 255, 85, 31, 3, 255, 86, 30, 3, 255, 83, 28, 1, 255, 80, 29, 1, 255, 80, 32, 4, 255, 81, 31, 4, 255, 84, 29, 4, 255, 83, 31, 3, 255, 74, 29, 0, 255, 79, 34, 4, 255, 80, 32, 5, 255, 76, 27, 3, 255, 76, 26, 3, 255, 81, 28, 5, 255, 73, 27, 2, 255, 73, 24, 1, 255, 71, 22, 3, 255, 75, 30, 7, 255, 76, 30, 5, 255, 76, 28, 4, 255, 75, 27, 4, 255, 77, 29, 4, 255, 78, 31, 4, 255, 78, 27, 1, 255, 82, 27, 3, 255, 80, 28, 3, 255, 83, 27, 4, 255, 85, 25, 2, 255, 87, 28, 4, 255, 80, 27, 1, 255, 81, 29, 3, 255, 84, 26, 4, 255, 78, 25, 1, 255, 84, 28, 5, 255, 86, 28, 2, 255, 78, 26, 3, 255, 74, 26, 5, 255, 75, 26, 4, 255, 76, 22, 3, 255, 81, 23, 3, 255, 85, 27, 4, 255, 84, 25, 0, 255, 89, 27, 3, 255, 91, 27, 5, 255, 93, 26, 6, 255, 74, 21, 1, 255, 70, 23, 2, 255, 70, 25, 0, 255, 78, 29, 3, 255, 77, 23, 3, 255, 73, 25, 4, 255, 80, 25, 3, 255, 82, 25, 3, 255, 82, 28, 4, 255, 82, 25, 3, 255, 85, 26, 6, 255, 79, 24, 4, 255, 76, 24, 3, 255, 72, 26, 2, 255, 63, 17, 0, 255, 73, 26, 8, 255, 71, 22, 5, 255, 71, 16, 0, 255, 76, 19, 1, 255, 77, 24, 0, 255, 73, 24, 5, 255, 71, 23, 3, 255, 72, 21, 1, 255, 71, 24, 2, 255, 73, 27, 2, 255, 69, 18, 6, 255, 65, 16, 8, 255, 68, 20, 6, 255, 62, 18, 1, 255, 63, 20, 3, 255, 66, 22, 4, 255, 66, 19, 3, 255, 66, 22, 4, 255, 60, 18, 2, 255, 61, 18, 3, 255, 64, 14, 2, 255, 55, 17, 1, 255, 56, 19, 3, 255, 58, 18, 2, 255, 62, 16, 2, 255, 67, 17, 4, 255, 57, 13, 0, 255, 54, 15, 2, 255, 58, 20, 5, 255, 51, 15, 1, 255, 50, 15, 3, 255, 64, 18, 5, 255, 66, 18, 4, 255, 68, 16, 2, 255, 64, 15, 6, 255, 50, 13, 6, 255, 40, 13, 5, 255, 31, 12, 3, 255, 29, 12, 1, 255, 31, 14, 0, 255, 43, 15, 3, 255, 41, 15, 4, 255, 36, 8, 2, 255, 36, 12, 6, 255, 29, 11, 6, 255, 25, 7, 2, 255, 35, 9, 4, 255, 35, 12, 4, 255, 32, 11, 3, 255, 23, 8, 2, 255, 26, 9, 1, 255, 25, 10, 3, 255, 28, 11, 5, 255, 70, 19, 0, 255, 98, 28, 2, 255, 102, 29, 3, 255, 105, 29, 3, 255, 105, 28, 0, 255, 108, 30, 2, 255, 107, 31, 4, 255, 100, 27, 1, 255, 101, 29, 2, 255, 99, 27, 3, 255, 98, 26, 2, 255, 95, 24, 0, 255, 14, 8, 4, 255, 15, 7, 5, 255, 13, 4, 2, 255, 12, 4, 0, 255, 15, 8, 2, 255, 16, 8, 3, 255, 15, 7, 2, 255, 18, 11, 5, 255, 18, 10, 4, 255, 18, 9, 2, 255, 19, 10, 3, 255, 21, 10, 4, 255, 21, 10, 2, 255, 21, 8, 3, 255, 21, 9, 4, 255, 25, 13, 5, 255, 26, 12, 3, 255, 24, 10, 1, 255, 26, 15, 6, 255, 21, 12, 3, 255, 19, 10, 1, 255, 19, 11, 2, 255, 23, 16, 5, 255, 19, 11, 1, 255, 29, 15, 5, 255, 28, 13, 4, 255, 20, 12, 0, 255, 23, 14, 3, 255, 23, 14, 4, 255, 22, 14, 2, 255, 24, 14, 2, 255, 27, 16, 3, 255, 31, 19, 3, 255, 29, 17, 3, 255, 23, 10, 0, 255, 34, 18, 5, 255, 35, 16, 2, 255, 38, 21, 5, 255, 40, 22, 7, 255, 33, 18, 3, 255, 38, 21, 7, 255, 38, 18, 4, 255, 37, 19, 1, 255, 40, 18, 1, 255, 39, 17, 2, 255, 41, 15, 5, 255, 39, 21, 5, 255, 38, 18, 5, 255, 36, 21, 6, 255, 37, 21, 2, 255, 38, 16, 2, 255, 44, 22, 5, 255, 41, 23, 3, 255, 41, 22, 2, 255, 42, 20, 3, 255, 38, 20, 4, 255, 38, 19, 4, 255, 36, 18, 3, 255, 38, 23, 3, 255, 42, 24, 0, 255, 42, 24, 4, 255, 43, 25, 4, 255, 43, 26, 2, 255, 42, 22, 1, 255, 38, 23, 5, 255, 40, 23, 5, 255, 36, 19, 2, 255, 42, 24, 6, 255, 43, 26, 6, 255, 39, 24, 4, 255, 42, 23, 7, 255, 39, 24, 2, 255, 39, 25, 3, 255, 49, 27, 2, 255, 62, 26, 6, 255, 50, 26, 1, 255, 46, 27, 2, 255, 53, 27, 2, 255, 49, 27, 3, 255, 50, 27, 5, 255, 54, 28, 5, 255, 47, 26, 2, 255, 50, 28, 6, 255, 56, 31, 4, 255, 61, 31, 4, 255, 56, 31, 1, 255, 57, 28, 2, 255, 57, 29, 3, 255, 57, 33, 4, 255, 55, 31, 1, 255, 54, 30, 0, 255, 59, 30, 2, 255, 61, 31, 5, 255, 59, 31, 5, 255, 55, 29, 6, 255, 55, 29, 6, 255, 67, 26, 6, 255, 67, 27, 3, 255, 62, 25, 0, 255, 61, 28, 4, 255, 57, 28, 3, 255, 56, 29, 1, 255, 59, 31, 1, 255, 66, 32, 4, 255, 66, 34, 5, 255, 58, 34, 3, 255, 62, 30, 2, 255, 56, 32, 2, 255, 67, 31, 4, 255, 68, 30, 3, 255, 63, 32, 3, 255, 57, 31, 3, 255, 54, 29, 4, 255, 59, 29, 6, 255, 69, 32, 2, 255, 63, 35, 7, 255, 56, 28, 2, 255, 55, 30, 2, 255, 53, 28, 1, 255, 57, 36, 7, 255, 56, 32, 3, 255, 62, 30, 4, 255, 62, 33, 5, 255, 63, 33, 1, 255, 66, 33, 2, 255, 68, 32, 5, 255, 68, 33, 6, 255, 62, 32, 1, 255, 63, 35, 6, 255, 62, 32, 5, 255, 62, 38, 4, 255, 70, 36, 8, 255, 69, 34, 7, 255, 67, 37, 5, 255, 66, 38, 1, 255, 68, 39, 8, 255, 70, 41, 11, 255, 68, 43, 11, 255, 61, 45, 9, 255, 66, 47, 8, 255, 69, 48, 6, 255, 73, 43, 15, 255, 72, 46, 15, 255, 71, 58, 11, 255, 77, 53, 15, 255, 76, 56, 21, 255, 69, 56, 17, 255, 71, 55, 23, 255, 72, 57, 29, 255, 74, 57, 28, 255, 67, 61, 20, 255, 66, 57, 25, 255, 70, 65, 13, 255, 74, 64, 25, 255, 69, 62, 32, 255, 72, 65, 25, 255, 74, 71, 24, 255, 72, 69, 29, 255, 72, 71, 33, 255, 68, 73, 32, 255, 72, 70, 40, 255, 82, 72, 39, 255, 75, 75, 33, 255, 77, 78, 41, 255, 79, 77, 45, 255, 76, 78, 48, 255, 75, 83, 43, 255, 75, 80, 53, 255, 92, 87, 45, 255, 120, 98, 40, 255, 126, 92, 55, 255, 111, 91, 45, 255, 96, 92, 54, 255, 88, 90, 49, 255, 92, 92, 65, 255, 88, 95, 62, 255, 86, 97, 63, 255, 87, 98, 70, 255, 87, 103, 67, 255, 80, 105, 61, 255, 91, 106, 62, 255, 117, 110, 75, 255, 130, 113, 71, 255, 127, 111, 59, 255, 122, 113, 62, 255, 119, 115, 66, 255, 102, 112, 63, 255, 89, 112, 60, 255, 98, 111, 66, 255, 99, 109, 62, 255, 98, 107, 68, 255, 107, 110, 62, 255, 123, 112, 67, 255, 126, 108, 69, 255, 124, 109, 59, 255, 110, 108, 59, 255, 97, 105, 49, 255, 97, 103, 51, 255, 101, 100, 54, 255, 100, 99, 41, 255, 96, 100, 40, 255, 94, 98, 43, 255, 107, 93, 43, 255, 119, 94, 41, 255, 118, 97, 39, 255, 115, 90, 38, 255, 115, 92, 36, 255, 109, 94, 21, 255, 105, 88, 35, 255, 104, 82, 27, 255, 109, 78, 31, 255, 106, 79, 34, 255, 93, 78, 13, 255, 99, 80, 7, 255, 110, 75, 19, 255, 116, 70, 21, 255, 125, 74, 15, 255, 123, 77, 10, 255, 117, 77, 9, 255, 119, 69, 17, 255, 122, 68, 20, 255, 120, 67, 11, 255, 118, 63, 12, 255, 118, 63, 9, 255, 115, 64, 13, 255, 113, 60, 16, 255, 113, 59, 7, 255, 117, 65, 3, 255, 118, 61, 13, 255, 119, 58, 9, 255, 119, 59, 4, 255, 118, 60, 13, 255, 112, 58, 10, 255, 109, 54, 6, 255, 112, 54, 11, 255, 108, 55, 12, 255, 97, 49, 2, 255, 96, 51, 6, 255, 87, 51, 6, 255, 94, 48, 7, 255, 92, 47, 2, 255, 92, 48, 3, 255, 90, 42, 1, 255, 94, 44, 7, 255, 96, 46, 5, 255, 96, 44, 1, 255, 96, 43, 2, 255, 98, 45, 4, 255, 97, 46, 0, 255, 100, 45, 1, 255, 105, 42, 3, 255, 102, 42, 5, 255, 97, 43, 3, 255, 96, 42, 4, 255, 87, 35, 1, 255, 82, 37, 5, 255, 84, 34, 1, 255, 85, 36, 4, 255, 81, 34, 3, 255, 81, 33, 3, 255, 91, 34, 4, 255, 101, 36, 4, 255, 110, 37, 4, 255, 111, 38, 1, 255, 110, 36, 1, 255, 105, 33, 7, 255, 101, 36, 3, 255, 105, 39, 2, 255, 104, 38, 7, 255, 104, 39, 5, 255, 103, 39, 3, 255, 99, 34, 0, 255, 97, 34, 0, 255, 92, 34, 1, 255, 89, 33, 1, 255, 93, 33, 4, 255, 87, 30, 2, 255, 83, 31, 2, 255, 80, 33, 4, 255, 80, 34, 6, 255, 78, 32, 3, 255, 76, 30, 1, 255, 79, 33, 2, 255, 76, 33, 1, 255, 80, 32, 3, 255, 80, 29, 2, 255, 78, 26, 1, 255, 78, 30, 4, 255, 78, 30, 2, 255, 70, 27, 2, 255, 71, 26, 5, 255, 74, 26, 8, 255, 71, 24, 3, 255, 79, 26, 3, 255, 78, 28, 4, 255, 79, 28, 6, 255, 80, 29, 5, 255, 73, 27, 1, 255, 79, 28, 4, 255, 77, 27, 4, 255, 72, 26, 2, 255, 79, 26, 3, 255, 85, 31, 6, 255, 78, 21, 1, 255, 84, 26, 4, 255, 85, 29, 6, 255, 80, 23, 3, 255, 74, 22, 2, 255, 77, 25, 6, 255, 81, 22, 2, 255, 83, 22, 4, 255, 77, 26, 8, 255, 73, 26, 2, 255, 79, 22, 2, 255, 83, 24, 1, 255, 87, 29, 4, 255, 83, 28, 0, 255, 81, 27, 0, 255, 78, 26, 0, 255, 78, 27, 2, 255, 76, 22, 2, 255, 75, 25, 0, 255, 78, 28, 4, 255, 80, 24, 3, 255, 84, 25, 2, 255, 84, 29, 6, 255, 80, 22, 3, 255, 82, 23, 2, 255, 85, 27, 3, 255, 85, 27, 3, 255, 82, 25, 1, 255, 80, 26, 2, 255, 79, 28, 3, 255, 72, 23, 3, 255, 72, 25, 6, 255, 68, 21, 3, 255, 68, 19, 2, 255, 76, 24, 7, 255, 77, 23, 6, 255, 71, 23, 4, 255, 77, 24, 2, 255, 75, 20, 0, 255, 71, 24, 1, 255, 70, 23, 2, 255, 71, 22, 4, 255, 69, 20, 5, 255, 68, 19, 6, 255, 67, 21, 4, 255, 61, 18, 5, 255, 64, 22, 5, 255, 65, 23, 1, 255, 63, 18, 2, 255, 63, 20, 1, 255, 69, 19, 3, 255, 66, 18, 2, 255, 58, 19, 0, 255, 62, 20, 1, 255, 67, 18, 3, 255, 56, 18, 2, 255, 54, 15, 2, 255, 59, 14, 3, 255, 56, 18, 5, 255, 51, 16, 2, 255, 51, 14, 1, 255, 52, 15, 2, 255, 54, 13, 2, 255, 67, 19, 5, 255, 68, 18, 2, 255, 61, 16, 1, 255, 51, 15, 1, 255, 36, 13, 2, 255, 38, 15, 5, 255, 43, 11, 5, 255, 46, 12, 8, 255, 43, 10, 3, 255, 45, 11, 2, 255, 40, 16, 2, 255, 51, 18, 6, 255, 39, 11, 3, 255, 32, 11, 7, 255, 28, 8, 7, 255, 29, 10, 5, 255, 33, 8, 0, 255, 39, 15, 3, 255, 29, 13, 5, 255, 30, 13, 4, 255, 23, 10, 1, 255, 20, 9, 1, 255, 64, 22, 2, 255, 93, 28, 1, 255, 101, 26, 2, 255, 103, 26, 0, 255, 105, 30, 1, 255, 106, 29, 1, 255, 104, 27, 0, 255, 104, 27, 2, 255, 102, 27, 3, 255, 99, 28, 3, 255, 101, 27, 3, 255, 101, 26, 3, 255, 13, 7, 1, 255, 15, 6, 3, 255, 13, 5, 2, 255, 10, 5, 2, 255, 13, 8, 4, 255, 15, 8, 1, 255, 17, 10, 3, 255, 18, 11, 5, 255, 17, 10, 2, 255, 18, 11, 3, 255, 19, 10, 3, 255, 17, 9, 1, 255, 18, 9, 2, 255, 18, 9, 2, 255, 20, 10, 2, 255, 24, 14, 4, 255, 25, 13, 4, 255, 22, 10, 1, 255, 22, 11, 2, 255, 20, 13, 5, 255, 21, 11, 3, 255, 23, 11, 2, 255, 25, 14, 4, 255, 22, 13, 2, 255, 22, 13, 0, 255, 25, 11, 2, 255, 28, 11, 4, 255, 20, 14, 2, 255, 20, 17, 5, 255, 19, 13, 2, 255, 23, 12, 2, 255, 31, 18, 6, 255, 31, 17, 2, 255, 31, 17, 4, 255, 31, 17, 6, 255, 34, 15, 5, 255, 36, 15, 4, 255, 36, 16, 4, 255, 42, 17, 4, 255, 35, 17, 3, 255, 38, 19, 5, 255, 45, 18, 5, 255, 44, 22, 5, 255, 40, 18, 2, 255, 45, 19, 6, 255, 40, 18, 6, 255, 30, 16, 0, 255, 41, 17, 6, 255, 35, 21, 7, 255, 33, 22, 3, 255, 36, 18, 3, 255, 36, 16, 1, 255, 44, 20, 5, 255, 38, 24, 6, 255, 28, 20, 1, 255, 35, 18, 1, 255, 44, 20, 3, 255, 41, 22, 6, 255, 38, 22, 5, 255, 39, 21, 0, 255, 36, 19, 1, 255, 36, 21, 2, 255, 41, 24, 4, 255, 42, 23, 6, 255, 42, 24, 3, 255, 46, 27, 0, 255, 46, 23, 1, 255, 48, 25, 4, 255, 48, 27, 0, 255, 49, 28, 4, 255, 38, 22, 2, 255, 40, 25, 2, 255, 37, 33, 5, 255, 45, 28, 1, 255, 53, 24, 6, 255, 50, 23, 3, 255, 51, 24, 6, 255, 52, 25, 4, 255, 47, 24, 6, 255, 55, 20, 5, 255, 55, 28, 4, 255, 52, 26, 1, 255, 56, 28, 5, 255, 51, 29, 3, 255, 57, 31, 4, 255, 57, 31, 1, 255, 63, 31, 4, 255, 62, 29, 4, 255, 58, 33, 3, 255, 55, 30, 1, 255, 56, 31, 5, 255, 54, 28, 3, 255, 60, 30, 6, 255, 62, 28, 3, 255, 59, 30, 3, 255, 51, 32, 0, 255, 54, 30, 4, 255, 57, 32, 3, 255, 54, 30, 1, 255, 57, 31, 3, 255, 58, 32, 3, 255, 56, 32, 1, 255, 65, 34, 6, 255, 68, 32, 4, 255, 64, 34, 4, 255, 63, 33, 4, 255, 67, 31, 5, 255, 60, 31, 5, 255, 60, 29, 5, 255, 65, 31, 7, 255, 63, 32, 2, 255, 64, 30, 1, 255, 65, 29, 6, 255, 62, 31, 7, 255, 59, 35, 2, 255, 61, 32, 4, 255, 63, 30, 6, 255, 53, 32, 5, 255, 55, 30, 4, 255, 61, 30, 4, 255, 56, 33, 2, 255, 55, 31, 0, 255, 60, 32, 4, 255, 64, 35, 4, 255, 64, 31, 2, 255, 65, 29, 0, 255, 68, 33, 5, 255, 64, 33, 3, 255, 59, 34, 5, 255, 58, 33, 6, 255, 60, 38, 2, 255, 65, 38, 8, 255, 65, 38, 5, 255, 62, 40, 3, 255, 62, 39, 7, 255, 65, 41, 14, 255, 61, 44, 13, 255, 65, 45, 10, 255, 66, 43, 9, 255, 66, 46, 9, 255, 66, 48, 9, 255, 71, 50, 11, 255, 75, 60, 5, 255, 72, 58, 9, 255, 68, 50, 7, 255, 74, 51, 24, 255, 76, 56, 19, 255, 65, 55, 13, 255, 68, 57, 13, 255, 72, 56, 24, 255, 71, 59, 25, 255, 68, 55, 34, 255, 68, 59, 35, 255, 68, 66, 11, 255, 71, 67, 22, 255, 77, 66, 26, 255, 76, 68, 34, 255, 73, 72, 31, 255, 67, 65, 40, 255, 70, 72, 34, 255, 69, 69, 35, 255, 79, 73, 41, 255, 83, 78, 37, 255, 75, 75, 40, 255, 70, 74, 45, 255, 77, 80, 52, 255, 81, 80, 47, 255, 82, 85, 50, 255, 80, 87, 54, 255, 88, 88, 47, 255, 97, 93, 44, 255, 88, 89, 58, 255, 80, 92, 50, 255, 83, 97, 53, 255, 83, 93, 62, 255, 80, 97, 62, 255, 84, 100, 65, 255, 91, 98, 72, 255, 89, 102, 69, 255, 89, 105, 64, 255, 90, 107, 62, 255, 98, 107, 68, 255, 114, 110, 66, 255, 126, 116, 61, 255, 123, 116, 64, 255, 116, 116, 63, 255, 111, 115, 63, 255, 100, 111, 57, 255, 99, 112, 64, 255, 99, 111, 64, 255, 109, 112, 67, 255, 120, 113, 63, 255, 133, 113, 59, 255, 133, 108, 51, 255, 132, 108, 53, 255, 123, 107, 57, 255, 106, 102, 53, 255, 95, 99, 56, 255, 98, 101, 50, 255, 103, 100, 50, 255, 97, 98, 42, 255, 95, 96, 41, 255, 95, 91, 40, 255, 100, 90, 40, 255, 102, 90, 35, 255, 107, 92, 21, 255, 110, 88, 22, 255, 115, 88, 24, 255, 118, 88, 29, 255, 118, 84, 26, 255, 119, 84, 22, 255, 116, 80, 22, 255, 105, 73, 28, 255, 111, 77, 29, 255, 119, 74, 18, 255, 117, 72, 18, 255, 116, 69, 22, 255, 116, 67, 19, 255, 121, 73, 13, 255, 125, 74, 8, 255, 122, 67, 15, 255, 119, 65, 17, 255, 117, 66, 19, 255, 112, 64, 12, 255, 116, 62, 8, 255, 118, 60, 13, 255, 115, 61, 9, 255, 107, 57, 11, 255, 108, 60, 8, 255, 110, 59, 6, 255, 112, 61, 4, 255, 112, 56, 9, 255, 111, 47, 10, 255, 114, 52, 8, 255, 107, 50, 5, 255, 105, 51, 9, 255, 103, 47, 5, 255, 92, 46, 5, 255, 90, 52, 3, 255, 97, 50, 6, 255, 88, 45, 5, 255, 85, 43, 7, 255, 86, 46, 7, 255, 87, 46, 4, 255, 91, 43, 4, 255, 92, 40, 3, 255, 96, 43, 5, 255, 96, 43, 6, 255, 98, 45, 2, 255, 106, 49, 4, 255, 108, 42, 4, 255, 105, 42, 3, 255, 94, 39, 0, 255, 98, 42, 3, 255, 94, 38, 3, 255, 84, 35, 3, 255, 89, 36, 4, 255, 85, 32, 3, 255, 80, 32, 4, 255, 78, 33, 5, 255, 78, 30, 1, 255, 87, 36, 1, 255, 90, 35, 3, 255, 94, 31, 2, 255, 101, 40, 5, 255, 106, 42, 6, 255, 103, 38, 1, 255, 94, 36, 1, 255, 100, 37, 5, 255, 95, 36, 1, 255, 92, 34, 2, 255, 97, 35, 1, 255, 98, 35, 3, 255, 97, 33, 6, 255, 108, 38, 5, 255, 106, 36, 5, 255, 89, 28, 0, 255, 83, 32, 2, 255, 84, 34, 4, 255, 80, 30, 3, 255, 76, 31, 3, 255, 76, 31, 3, 255, 76, 29, 2, 255, 73, 28, 1, 255, 83, 32, 6, 255, 85, 30, 4, 255, 77, 26, 0, 255, 77, 30, 3, 255, 76, 24, 4, 255, 70, 25, 0, 255, 70, 26, 0, 255, 69, 24, 2, 255, 65, 22, 2, 255, 76, 30, 6, 255, 78, 27, 4, 255, 75, 24, 0, 255, 74, 28, 2, 255, 71, 26, 0, 255, 74, 28, 4, 255, 74, 25, 2, 255, 79, 25, 3, 255, 81, 27, 4, 255, 80, 27, 3, 255, 79, 24, 2, 255, 80, 23, 3, 255, 85, 28, 7, 255, 76, 26, 3, 255, 77, 26, 5, 255, 77, 23, 6, 255, 80, 24, 3, 255, 78, 22, 4, 255, 76, 23, 5, 255, 79, 26, 1, 255, 78, 25, 2, 255, 75, 25, 3, 255, 76, 25, 3, 255, 80, 28, 5, 255, 79, 27, 5, 255, 72, 21, 1, 255, 71, 22, 1, 255, 70, 22, 2, 255, 73, 27, 1, 255, 74, 25, 3, 255, 79, 23, 5, 255, 82, 25, 0, 255, 82, 24, 3, 255, 80, 26, 5, 255, 82, 30, 5, 255, 84, 27, 3, 255, 85, 26, 2, 255, 87, 26, 2, 255, 88, 26, 3, 255, 85, 23, 2, 255, 74, 23, 3, 255, 70, 23, 3, 255, 68, 22, 2, 255, 71, 22, 5, 255, 74, 22, 5, 255, 71, 20, 3, 255, 72, 20, 4, 255, 77, 26, 2, 255, 72, 24, 3, 255, 75, 28, 5, 255, 78, 23, 5, 255, 69, 19, 5, 255, 62, 23, 0, 255, 69, 25, 1, 255, 67, 21, 0, 255, 67, 17, 2, 255, 70, 18, 4, 255, 68, 20, 4, 255, 58, 16, 1, 255, 60, 17, 1, 255, 70, 17, 2, 255, 68, 18, 1, 255, 65, 22, 3, 255, 73, 23, 7, 255, 66, 17, 3, 255, 58, 16, 3, 255, 53, 17, 3, 255, 50, 15, 2, 255, 56, 12, 4, 255, 56, 14, 4, 255, 51, 15, 1, 255, 49, 15, 2, 255, 46, 12, 2, 255, 58, 15, 3, 255, 70, 16, 2, 255, 74, 17, 3, 255, 63, 17, 5, 255, 42, 11, 1, 255, 33, 13, 0, 255, 42, 9, 1, 255, 44, 10, 2, 255, 35, 12, 1, 255, 51, 14, 5, 255, 60, 15, 1, 255, 67, 18, 4, 255, 47, 13, 2, 255, 34, 9, 1, 255, 37, 11, 4, 255, 37, 10, 3, 255, 38, 8, 2, 255, 28, 11, 0, 255, 31, 11, 2, 255, 30, 14, 0, 255, 29, 13, 0, 255, 31, 11, 4, 255, 67, 20, 5, 255, 88, 24, 3, 255, 98, 28, 4, 255, 101, 27, 1, 255, 104, 29, 0, 255, 103, 28, 0, 255, 103, 26, 0, 255, 107, 29, 5, 255, 105, 27, 4, 255, 104, 28, 2, 255, 106, 27, 3, 255, 105, 26, 2, 255, 11, 6, 2, 255, 11, 4, 2, 255, 11, 4, 2, 255, 11, 6, 3, 255, 11, 7, 2, 255, 15, 9, 2, 255, 16, 9, 3, 255, 13, 6, 0, 255, 16, 9, 1, 255, 18, 11, 3, 255, 17, 11, 3, 255, 15, 8, 0, 255, 17, 9, 3, 255, 20, 12, 4, 255, 20, 12, 3, 255, 19, 10, 1, 255, 18, 10, 2, 255, 20, 12, 3, 255, 20, 10, 2, 255, 16, 11, 2, 255, 20, 10, 2, 255, 25, 10, 2, 255, 24, 10, 1, 255, 25, 14, 3, 255, 21, 15, 1, 255, 20, 14, 2, 255, 20, 13, 3, 255, 19, 15, 4, 255, 21, 13, 3, 255, 27, 12, 4, 255, 31, 13, 5, 255, 30, 13, 3, 255, 37, 18, 0, 255, 38, 22, 4, 255, 40, 22, 6, 255, 40, 17, 4, 255, 44, 18, 6, 255, 44, 19, 3, 255, 42, 18, 4, 255, 29, 16, 1, 255, 32, 19, 4, 255, 36, 17, 3, 255, 37, 20, 3, 255, 39, 16, 2, 255, 42, 16, 4, 255, 35, 14, 2, 255, 32, 18, 1, 255, 37, 22, 7, 255, 26, 20, 2, 255, 33, 24, 2, 255, 38, 19, 4, 255, 35, 16, 4, 255, 36, 19, 5, 255, 32, 17, 2, 255, 35, 20, 4, 255, 38, 22, 3, 255, 43, 25, 5, 255, 39, 20, 3, 255, 37, 19, 2, 255, 39, 22, 2, 255, 36, 21, 6, 255, 36, 21, 7, 255, 41, 26, 5, 255, 45, 24, 7, 255, 46, 21, 5, 255, 44, 24, 2, 255, 41, 25, 4, 255, 41, 25, 6, 255, 43, 23, 1, 255, 49, 23, 3, 255, 43, 24, 7, 255, 45, 24, 4, 255, 48, 22, 5, 255, 46, 23, 0, 255, 45, 25, 3, 255, 45, 29, 3, 255, 50, 28, 4, 255, 47, 26, 1, 255, 47, 24, 2, 255, 56, 27, 7, 255, 52, 25, 2, 255, 53, 30, 5, 255, 55, 29, 8, 255, 54, 28, 3, 255, 56, 30, 2, 255, 55, 31, 3, 255, 63, 31, 6, 255, 63, 28, 3, 255, 58, 31, 1, 255, 60, 31, 3, 255, 61, 28, 4, 255, 56, 28, 2, 255, 53, 31, 5, 255, 48, 28, 2, 255, 53, 29, 3, 255, 59, 30, 6, 255, 56, 29, 3, 255, 58, 31, 3, 255, 57, 30, 0, 255, 58, 30, 0, 255, 60, 30, 2, 255, 61, 30, 2, 255, 62, 32, 3, 255, 65, 26, 1, 255, 66, 32, 4, 255, 64, 29, 2, 255, 60, 32, 4, 255, 62, 30, 4, 255, 59, 29, 6, 255, 50, 31, 7, 255, 63, 29, 2, 255, 64, 28, 2, 255, 64, 29, 4, 255, 65, 32, 3, 255, 60, 31, 4, 255, 57, 29, 1, 255, 63, 30, 2, 255, 61, 29, 2, 255, 62, 29, 3, 255, 65, 34, 6, 255, 57, 32, 1, 255, 64, 36, 4, 255, 61, 33, 4, 255, 58, 29, 2, 255, 66, 34, 6, 255, 70, 35, 5, 255, 68, 34, 5, 255, 63, 30, 4, 255, 61, 31, 6, 255, 60, 33, 8, 255, 65, 35, 3, 255, 62, 36, 3, 255, 65, 42, 2, 255, 61, 36, 7, 255, 63, 38, 9, 255, 65, 41, 9, 255, 54, 41, 7, 255, 62, 45, 4, 255, 67, 44, 6, 255, 63, 49, 7, 255, 64, 53, 8, 255, 68, 48, 15, 255, 70, 54, 11, 255, 73, 54, 8, 255, 64, 51, 17, 255, 64, 50, 17, 255, 71, 54, 21, 255, 65, 60, 22, 255, 63, 56, 15, 255, 62, 55, 26, 255, 69, 58, 25, 255, 65, 57, 24, 255, 77, 60, 33, 255, 75, 63, 33, 255, 70, 67, 22, 255, 73, 66, 37, 255, 76, 67, 33, 255, 72, 66, 35, 255, 69, 66, 45, 255, 74, 69, 45, 255, 72, 73, 34, 255, 72, 74, 42, 255, 79, 74, 37, 255, 77, 75, 47, 255, 76, 80, 61, 255, 79, 79, 58, 255, 82, 84, 48, 255, 81, 87, 48, 255, 82, 85, 50, 255, 84, 87, 48, 255, 84, 89, 59, 255, 81, 92, 67, 255, 79, 95, 54, 255, 83, 96, 57, 255, 84, 99, 60, 255, 81, 100, 63, 255, 86, 100, 64, 255, 95, 104, 67, 255, 91, 106, 70, 255, 94, 106, 67, 255, 96, 113, 66, 255, 99, 111, 72, 255, 115, 109, 67, 255, 131, 113, 64, 255, 131, 115, 72, 255, 117, 115, 68, 255, 122, 115, 66, 255, 123, 112, 60, 255, 102, 112, 63, 255, 96, 112, 65, 255, 115, 117, 62, 255, 124, 116, 59, 255, 126, 116, 53, 255, 127, 114, 56, 255, 129, 112, 59, 255, 127, 111, 59, 255, 114, 106, 54, 255, 95, 98, 56, 255, 91, 99, 50, 255, 97, 100, 52, 255, 103, 97, 42, 255, 105, 93, 40, 255, 97, 93, 36, 255, 104, 96, 38, 255, 116, 92, 38, 255, 119, 92, 34, 255, 118, 89, 24, 255, 120, 85, 29, 255, 122, 85, 32, 255, 122, 82, 23, 255, 124, 81, 16, 255, 122, 82, 23, 255, 122, 83, 21, 255, 129, 80, 16, 255, 125, 71, 7, 255, 117, 76, 16, 255, 96, 71, 28, 255, 87, 64, 27, 255, 96, 65, 21, 255, 106, 63, 18, 255, 117, 66, 13, 255, 118, 67, 3, 255, 116, 65, 12, 255, 116, 65, 19, 255, 118, 66, 8, 255, 114, 61, 7, 255, 110, 60, 16, 255, 97, 54, 16, 255, 90, 52, 10, 255, 93, 54, 8, 255, 105, 56, 3, 255, 111, 57, 10, 255, 108, 52, 5, 255, 113, 49, 2, 255, 114, 47, 5, 255, 113, 50, 7, 255, 105, 49, 4, 255, 88, 47, 9, 255, 85, 45, 6, 255, 88, 41, 3, 255, 88, 44, 3, 255, 90, 46, 4, 255, 88, 43, 3, 255, 83, 45, 3, 255, 86, 42, 3, 255, 90, 40, 7, 255, 95, 43, 9, 255, 92, 41, 4, 255, 95, 41, 3, 255, 103, 42, 5, 255, 106, 42, 2, 255, 106, 43, 4, 255, 103, 42, 2, 255, 105, 42, 4, 255, 107, 43, 8, 255, 92, 36, 3, 255, 84, 38, 4, 255, 82, 37, 3, 255, 80, 31, 2, 255, 84, 30, 4, 255, 86, 34, 5, 255, 85, 38, 4, 255, 77, 34, 0, 255, 78, 30, 3, 255, 85, 32, 5, 255, 92, 38, 3, 255, 93, 37, 4, 255, 93, 34, 4, 255, 101, 39, 3, 255, 99, 40, 5, 255, 81, 30, 0, 255, 86, 33, 2, 255, 87, 33, 5, 255, 86, 31, 4, 255, 100, 34, 2, 255, 109, 39, 5, 255, 98, 34, 1, 255, 91, 35, 2, 255, 88, 33, 3, 255, 82, 28, 1, 255, 80, 28, 1, 255, 80, 28, 3, 255, 81, 26, 3, 255, 75, 25, 3, 255, 77, 27, 3, 255, 84, 31, 3, 255, 82, 31, 2, 255, 75, 27, 0, 255, 78, 30, 4, 255, 72, 29, 6, 255, 67, 21, 3, 255, 74, 28, 9, 255, 69, 27, 3, 255, 69, 25, 1, 255, 74, 28, 4, 255, 71, 27, 2, 255, 78, 32, 6, 255, 79, 30, 4, 255, 78, 28, 3, 255, 80, 29, 5, 255, 79, 25, 2, 255, 81, 26, 3, 255, 79, 25, 3, 255, 80, 26, 4, 255, 79, 25, 3, 255, 73, 23, 2, 255, 72, 27, 3, 255, 78, 27, 4, 255, 80, 24, 4, 255, 76, 25, 1, 255, 71, 27, 5, 255, 77, 25, 4, 255, 82, 24, 1, 255, 80, 26, 3, 255, 79, 24, 2, 255, 81, 24, 3, 255, 82, 23, 2, 255, 81, 25, 4, 255, 76, 23, 3, 255, 74, 24, 4, 255, 70, 23, 5, 255, 68, 21, 0, 255, 72, 23, 5, 255, 72, 23, 5, 255, 71, 25, 1, 255, 72, 27, 3, 255, 75, 25, 3, 255, 80, 25, 3, 255, 81, 24, 2, 255, 84, 25, 2, 255, 85, 25, 4, 255, 85, 24, 4, 255, 83, 23, 3, 255, 80, 26, 6, 255, 73, 25, 2, 255, 72, 24, 1, 255, 75, 21, 1, 255, 77, 20, 2, 255, 72, 22, 3, 255, 71, 20, 1, 255, 73, 24, 2, 255, 67, 22, 4, 255, 70, 24, 3, 255, 74, 21, 0, 255, 68, 18, 4, 255, 66, 23, 3, 255, 66, 21, 4, 255, 59, 15, 4, 255, 62, 18, 0, 255, 68, 20, 3, 255, 66, 16, 4, 255, 65, 18, 3, 255, 65, 15, 3, 255, 64, 16, 1, 255, 60, 19, 0, 255, 63, 16, 1, 255, 63, 16, 2, 255, 63, 16, 1, 255, 60, 15, 3, 255, 57, 16, 3, 255, 58, 18, 5, 255, 56, 16, 5, 255, 54, 15, 4, 255, 50, 14, 2, 255, 48, 14, 4, 255, 47, 15, 8, 255, 46, 14, 3, 255, 51, 12, 0, 255, 58, 13, 1, 255, 56, 17, 4, 255, 50, 17, 5, 255, 43, 11, 2, 255, 54, 11, 3, 255, 54, 10, 3, 255, 35, 11, 0, 255, 55, 11, 3, 255, 73, 16, 3, 255, 66, 17, 0, 255, 53, 17, 2, 255, 49, 13, 1, 255, 48, 12, 1, 255, 42, 11, 1, 255, 43, 13, 7, 255, 32, 8, 4, 255, 25, 9, 3, 255, 37, 11, 3, 255, 54, 15, 6, 255, 49, 13, 6, 255, 64, 17, 2, 255, 82, 25, 1, 255, 92, 27, 2, 255, 98, 28, 4, 255, 103, 30, 4, 255, 106, 32, 2, 255, 106, 31, 3, 255, 102, 27, 3, 255, 99, 24, 1, 255, 105, 27, 1, 255, 106, 28, 2, 255, 106, 26, 0, 255, 11, 7, 4, 255, 11, 5, 2, 255, 10, 5, 3, 255, 10, 7, 2, 255, 10, 7, 2, 255, 14, 8, 2, 255, 15, 8, 2, 255, 15, 8, 2, 255, 17, 10, 2, 255, 17, 10, 2, 255, 18, 11, 3, 255, 18, 9, 3, 255, 18, 9, 4, 255, 16, 8, 2, 255, 19, 9, 1, 255, 21, 11, 2, 255, 15, 8, 1, 255, 14, 8, 1, 255, 20, 11, 3, 255, 17, 10, 0, 255, 20, 11, 2, 255, 24, 13, 4, 255, 24, 13, 3, 255, 24, 13, 2, 255, 27, 15, 3, 255, 24, 14, 3, 255, 21, 15, 4, 255, 23, 12, 2, 255, 29, 13, 4, 255, 29, 12, 3, 255, 30, 18, 5, 255, 29, 18, 4, 255, 41, 18, 1, 255, 38, 19, 1, 255, 40, 23, 2, 255, 42, 20, 2, 255, 47, 21, 3, 255, 44, 18, 1, 255, 41, 20, 4, 255, 35, 21, 5, 255, 37, 17, 6, 255, 40, 19, 7, 255, 41, 22, 7, 255, 35, 17, 3, 255, 23, 14, 2, 255, 34, 20, 5, 255, 41, 21, 3, 255, 35, 18, 3, 255, 30, 18, 1, 255, 33, 22, 2, 255, 33, 15, 1, 255, 37, 19, 5, 255, 35, 20, 4, 255, 35, 15, 1, 255, 39, 14, 2, 255, 39, 22, 5, 255, 35, 19, 2, 255, 34, 18, 5, 255, 34, 20, 5, 255, 43, 24, 1, 255, 46, 22, 4, 255, 43, 22, 4, 255, 39, 22, 1, 255, 36, 19, 3, 255, 41, 23, 4, 255, 36, 19, 3, 255, 36, 20, 3, 255, 41, 24, 7, 255, 44, 25, 9, 255, 44, 26, 6, 255, 47, 27, 3, 255, 45, 28, 2, 255, 48, 25, 5, 255, 45, 26, 4, 255, 43, 23, 6, 255, 42, 27, 4, 255, 37, 25, 3, 255, 45, 24, 4, 255, 49, 23, 1, 255, 48, 28, 3, 255, 52, 27, 2, 255, 55, 30, 3, 255, 55, 29, 2, 255, 60, 27, 5, 255, 57, 28, 3, 255, 51, 29, 0, 255, 55, 29, 3, 255, 60, 29, 5, 255, 52, 30, 1, 255, 55, 29, 0, 255, 57, 24, 0, 255, 60, 28, 4, 255, 51, 28, 3, 255, 45, 30, 4, 255, 53, 32, 7, 255, 60, 27, 6, 255, 56, 27, 1, 255, 58, 30, 3, 255, 59, 30, 2, 255, 58, 29, 2, 255, 59, 30, 3, 255, 59, 28, 1, 255, 58, 30, 0, 255, 64, 31, 3, 255, 70, 33, 7, 255, 59, 27, 1, 255, 53, 32, 2, 255, 61, 31, 3, 255, 65, 28, 1, 255, 63, 27, 5, 255, 52, 27, 9, 255, 54, 32, 7, 255, 56, 32, 2, 255, 55, 30, 3, 255, 59, 30, 3, 255, 65, 32, 4, 255, 62, 30, 3, 255, 60, 28, 1, 255, 57, 31, 1, 255, 56, 32, 2, 255, 65, 34, 6, 255, 66, 32, 6, 255, 62, 32, 4, 255, 56, 29, 0, 255, 62, 34, 5, 255, 61, 30, 3, 255, 61, 29, 3, 255, 61, 30, 3, 255, 59, 28, 2, 255, 64, 34, 2, 255, 64, 32, 7, 255, 61, 34, 10, 255, 60, 34, 6, 255, 64, 40, 3, 255, 60, 39, 3, 255, 64, 38, 8, 255, 61, 39, 8, 255, 67, 44, 10, 255, 70, 44, 16, 255, 66, 45, 17, 255, 73, 47, 19, 255, 71, 47, 16, 255, 67, 51, 13, 255, 72, 54, 11, 255, 72, 57, 13, 255, 63, 53, 20, 255, 61, 52, 26, 255, 61, 55, 24, 255, 73, 63, 22, 255, 71, 57, 34, 255, 70, 59, 24, 255, 67, 62, 25, 255, 66, 64, 25, 255, 71, 68, 27, 255, 68, 61, 29, 255, 68, 61, 47, 255, 68, 67, 38, 255, 69, 63, 36, 255, 76, 72, 29, 255, 71, 73, 36, 255, 69, 69, 44, 255, 71, 75, 45, 255, 79, 79, 37, 255, 74, 79, 38, 255, 77, 78, 53, 255, 81, 78, 45, 255, 77, 84, 48, 255, 79, 89, 51, 255, 81, 87, 61, 255, 81, 88, 56, 255, 83, 89, 64, 255, 87, 94, 64, 255, 87, 98, 51, 255, 88, 98, 61, 255, 89, 100, 63, 255, 87, 98, 65, 255, 87, 100, 63, 255, 90, 106, 62, 255, 96, 108, 66, 255, 108, 112, 76, 255, 115, 117, 67, 255, 121, 117, 67, 255, 129, 115, 72, 255, 128, 111, 68, 255, 129, 113, 71, 255, 124, 117, 70, 255, 124, 117, 66, 255, 130, 119, 68, 255, 107, 115, 67, 255, 92, 109, 65, 255, 109, 113, 61, 255, 125, 118, 65, 255, 128, 114, 58, 255, 126, 111, 57, 255, 122, 112, 58, 255, 114, 109, 54, 255, 101, 102, 50, 255, 93, 100, 47, 255, 95, 100, 45, 255, 99, 97, 46, 255, 103, 97, 39, 255, 104, 98, 31, 255, 100, 94, 31, 255, 114, 99, 42, 255, 120, 95, 36, 255, 115, 88, 29, 255, 118, 89, 32, 255, 119, 89, 32, 255, 121, 91, 22, 255, 120, 85, 33, 255, 119, 81, 30, 255, 119, 79, 29, 255, 112, 75, 12, 255, 106, 71, 20, 255, 102, 72, 24, 255, 101, 73, 15, 255, 91, 66, 16, 255, 93, 69, 15, 255, 94, 66, 4, 255, 92, 57, 20, 255, 95, 60, 21, 255, 99, 64, 11, 255, 100, 61, 14, 255, 98, 55, 11, 255, 99, 61, 4, 255, 99, 55, 9, 255, 97, 57, 4, 255, 92, 59, 13, 255, 84, 52, 7, 255, 93, 57, 2, 255, 111, 58, 6, 255, 113, 53, 9, 255, 107, 52, 7, 255, 115, 51, 9, 255, 119, 52, 8, 255, 110, 49, 6, 255, 96, 44, 7, 255, 82, 42, 7, 255, 85, 42, 10, 255, 86, 40, 7, 255, 85, 43, 1, 255, 92, 44, 2, 255, 90, 39, 1, 255, 85, 41, 8, 255, 88, 43, 2, 255, 89, 40, 3, 255, 86, 37, 8, 255, 89, 40, 8, 255, 95, 42, 3, 255, 98, 39, 2, 255, 98, 40, 4, 255, 96, 39, 3, 255, 100, 39, 3, 255, 100, 38, 1, 255, 97, 40, 5, 255, 91, 36, 4, 255, 80, 36, 1, 255, 80, 35, 1, 255, 81, 36, 3, 255, 80, 37, 3, 255, 80, 35, 1, 255, 86, 31, 2, 255, 85, 32, 1, 255, 80, 36, 5, 255, 79, 29, 3, 255, 80, 31, 3, 255, 79, 31, 3, 255, 88, 32, 3, 255, 91, 34, 1, 255, 89, 31, 1, 255, 79, 36, 4, 255, 81, 34, 3, 255, 80, 31, 2, 255, 79, 33, 3, 255, 92, 32, 1, 255, 98, 32, 1, 255, 102, 36, 4, 255, 101, 33, 4, 255, 94, 31, 2, 255, 96, 36, 7, 255, 96, 35, 7, 255, 96, 31, 3, 255, 94, 31, 4, 255, 81, 29, 5, 255, 76, 29, 2, 255, 76, 28, 0, 255, 78, 28, 1, 255, 78, 30, 6, 255, 68, 31, 1, 255, 63, 26, 3, 255, 67, 22, 7, 255, 70, 21, 4, 255, 75, 29, 3, 255, 77, 27, 4, 255, 73, 25, 1, 255, 68, 28, 3, 255, 72, 26, 2, 255, 83, 28, 4, 255, 79, 26, 3, 255, 77, 27, 1, 255, 83, 29, 4, 255, 78, 27, 2, 255, 81, 26, 3, 255, 80, 27, 6, 255, 72, 24, 1, 255, 70, 25, 1, 255, 74, 25, 4, 255, 75, 25, 1, 255, 70, 20, 1, 255, 72, 24, 0, 255, 70, 23, 3, 255, 72, 20, 2, 255, 78, 25, 2, 255, 74, 24, 0, 255, 75, 28, 1, 255, 78, 28, 4, 255, 76, 24, 1, 255, 76, 24, 2, 255, 74, 24, 3, 255, 72, 25, 3, 255, 71, 20, 3, 255, 74, 21, 5, 255, 77, 21, 4, 255, 78, 26, 5, 255, 76, 27, 6, 255, 72, 24, 1, 255, 77, 25, 2, 255, 83, 25, 5, 255, 87, 26, 4, 255, 83, 24, 2, 255, 80, 26, 2, 255, 78, 23, 2, 255, 78, 21, 1, 255, 84, 24, 4, 255, 81, 26, 3, 255, 85, 26, 3, 255, 87, 23, 3, 255, 82, 19, 1, 255, 73, 19, 1, 255, 70, 23, 5, 255, 72, 26, 5, 255, 71, 23, 2, 255, 66, 19, 2, 255, 64, 20, 4, 255, 70, 22, 3, 255, 76, 20, 2, 255, 70, 17, 4, 255, 64, 16, 5, 255, 64, 19, 2, 255, 70, 23, 3, 255, 66, 17, 0, 255, 66, 18, 4, 255, 67, 18, 5, 255, 68, 19, 4, 255, 67, 18, 3, 255, 57, 18, 1, 255, 63, 17, 3, 255, 69, 18, 2, 255, 64, 19, 3, 255, 62, 15, 1, 255, 63, 15, 2, 255, 55, 16, 4, 255, 51, 12, 3, 255, 52, 13, 5, 255, 45, 15, 5, 255, 42, 14, 3, 255, 48, 14, 3, 255, 52, 16, 4, 255, 44, 15, 1, 255, 43, 14, 0, 255, 61, 12, 5, 255, 52, 12, 6, 255, 44, 11, 2, 255, 48, 16, 4, 255, 34, 11, 0, 255, 52, 17, 8, 255, 63, 16, 2, 255, 70, 17, 2, 255, 70, 16, 5, 255, 62, 14, 7, 255, 46, 12, 3, 255, 34, 9, 0, 255, 33, 13, 1, 255, 37, 14, 4, 255, 34, 9, 6, 255, 54, 14, 9, 255, 71, 17, 6, 255, 55, 13, 1, 255, 60, 19, 3, 255, 77, 22, 1, 255, 86, 23, 3, 255, 90, 26, 4, 255, 102, 30, 5, 255, 106, 31, 4, 255, 103, 31, 2, 255, 99, 29, 4, 255, 91, 23, 0, 255, 99, 26, 1, 255, 99, 27, 2, 255, 95, 26, 0, 255, 11, 7, 5, 255, 11, 6, 5, 255, 11, 7, 3, 255, 11, 7, 2, 255, 11, 8, 3, 255, 12, 6, 3, 255, 14, 6, 2, 255, 18, 10, 4, 255, 17, 10, 2, 255, 15, 7, 0, 255, 17, 8, 1, 255, 17, 8, 2, 255, 17, 7, 3, 255, 17, 8, 3, 255, 20, 9, 1, 255, 18, 8, 1, 255, 17, 9, 4, 255, 19, 13, 6, 255, 22, 13, 4, 255, 21, 12, 2, 255, 20, 13, 3, 255, 20, 14, 3, 255, 23, 16, 5, 255, 21, 11, 1, 255, 32, 12, 3, 255, 28, 13, 2, 255, 22, 15, 2, 255, 32, 17, 7, 255, 30, 14, 2, 255, 25, 14, 0, 255, 27, 16, 0, 255, 34, 18, 3, 255, 40, 17, 5, 255, 41, 21, 6, 255, 37, 18, 2, 255, 39, 17, 1, 255, 39, 15, 1, 255, 43, 18, 5, 255, 41, 20, 6, 255, 38, 18, 5, 255, 37, 15, 4, 255, 32, 14, 2, 255, 37, 15, 2, 255, 42, 13, 2, 255, 33, 15, 2, 255, 34, 18, 3, 255, 43, 18, 5, 255, 31, 17, 1, 255, 33, 20, 4, 255, 32, 17, 2, 255, 40, 19, 10, 255, 39, 16, 4, 255, 44, 22, 8, 255, 39, 21, 3, 255, 37, 20, 3, 255, 41, 19, 4, 255, 40, 18, 5, 255, 37, 18, 6, 255, 37, 20, 3, 255, 39, 21, 0, 255, 41, 22, 4, 255, 43, 24, 5, 255, 42, 24, 1, 255, 42, 24, 2, 255, 49, 25, 1, 255, 45, 25, 5, 255, 39, 25, 3, 255, 37, 24, 2, 255, 41, 23, 3, 255, 50, 23, 1, 255, 51, 25, 2, 255, 46, 27, 2, 255, 47, 26, 6, 255, 45, 22, 5, 255, 39, 21, 5, 255, 55, 26, 7, 255, 53, 24, 6, 255, 50, 25, 3, 255, 57, 26, 3, 255, 53, 24, 1, 255, 50, 27, 4, 255, 55, 25, 4, 255, 58, 28, 3, 255, 49, 26, 2, 255, 49, 29, 1, 255, 46, 33, 1, 255, 46, 26, 2, 255, 55, 27, 3, 255, 54, 25, 0, 255, 58, 29, 3, 255, 53, 27, 5, 255, 55, 27, 5, 255, 59, 29, 8, 255, 54, 25, 2, 255, 56, 29, 1, 255, 56, 35, 4, 255, 56, 32, 5, 255, 56, 31, 3, 255, 56, 29, 3, 255, 57, 29, 4, 255, 59, 28, 5, 255, 62, 27, 4, 255, 62, 30, 2, 255, 56, 30, 1, 255, 61, 29, 4, 255, 56, 30, 3, 255, 61, 31, 4, 255, 61, 31, 2, 255, 64, 33, 3, 255, 60, 32, 5, 255, 57, 26, 6, 255, 56, 28, 12, 255, 55, 31, 7, 255, 58, 33, 2, 255, 54, 28, 2, 255, 59, 28, 2, 255, 58, 30, 2, 255, 60, 30, 2, 255, 60, 33, 4, 255, 59, 32, 3, 255, 59, 29, 1, 255, 58, 29, 6, 255, 63, 31, 7, 255, 64, 34, 2, 255, 61, 34, 4, 255, 57, 28, 5, 255, 61, 28, 5, 255, 63, 32, 3, 255, 58, 36, 6, 255, 61, 35, 1, 255, 60, 36, 8, 255, 62, 37, 7, 255, 60, 39, 3, 255, 61, 38, 8, 255, 59, 36, 9, 255, 68, 35, 16, 255, 72, 40, 12, 255, 72, 45, 8, 255, 69, 47, 11, 255, 67, 47, 12, 255, 77, 48, 7, 255, 72, 52, 10, 255, 58, 43, 34, 255, 64, 50, 23, 255, 85, 60, 4, 255, 66, 49, 21, 255, 65, 57, 22, 255, 65, 57, 12, 255, 66, 56, 18, 255, 69, 57, 24, 255, 68, 64, 17, 255, 68, 62, 25, 255, 65, 63, 37, 255, 69, 61, 29, 255, 70, 63, 36, 255, 65, 68, 37, 255, 70, 70, 29, 255, 73, 71, 32, 255, 71, 70, 42, 255, 69, 70, 43, 255, 72, 73, 49, 255, 71, 73, 42, 255, 76, 78, 43, 255, 76, 81, 56, 255, 83, 80, 57, 255, 84, 82, 53, 255, 78, 85, 46, 255, 84, 90, 52, 255, 78, 85, 60, 255, 82, 86, 66, 255, 90, 97, 61, 255, 87, 92, 63, 255, 88, 96, 68, 255, 82, 99, 58, 255, 89, 99, 66, 255, 94, 99, 72, 255, 91, 103, 69, 255, 91, 107, 64, 255, 112, 115, 71, 255, 126, 116, 73, 255, 134, 118, 66, 255, 133, 116, 65, 255, 127, 117, 65, 255, 122, 118, 64, 255, 125, 119, 69, 255, 130, 115, 70, 255, 132, 116, 65, 255, 123, 117, 67, 255, 105, 113, 70, 255, 92, 111, 66, 255, 98, 114, 63, 255, 102, 112, 57, 255, 121, 115, 60, 255, 116, 111, 53, 255, 102, 102, 58, 255, 94, 105, 50, 255, 96, 105, 52, 255, 99, 98, 51, 255, 101, 97, 55, 255, 100, 96, 49, 255, 94, 92, 45, 255, 93, 93, 49, 255, 101, 90, 39, 255, 118, 95, 40, 255, 119, 91, 37, 255, 120, 87, 50, 255, 119, 86, 39, 255, 115, 84, 29, 255, 108, 84, 23, 255, 100, 84, 22, 255, 91, 77, 24, 255, 91, 74, 28, 255, 94, 73, 18, 255, 90, 68, 19, 255, 89, 67, 18, 255, 98, 71, 18, 255, 91, 65, 15, 255, 89, 65, 19, 255, 94, 63, 14, 255, 93, 61, 10, 255, 92, 58, 13, 255, 88, 58, 10, 255, 88, 61, 13, 255, 86, 60, 11, 255, 83, 55, 8, 255, 90, 54, 15, 255, 90, 56, 3, 255, 86, 54, 8, 255, 85, 51, 10, 255, 95, 50, 11, 255, 112, 56, 13, 255, 118, 56, 4, 255, 119, 52, 3, 255, 118, 52, 9, 255, 111, 54, 9, 255, 99, 48, 3, 255, 91, 41, 4, 255, 91, 44, 9, 255, 88, 43, 6, 255, 87, 44, 8, 255, 79, 41, 7, 255, 87, 42, 7, 255, 89, 43, 5, 255, 86, 41, 5, 255, 89, 42, 1, 255, 86, 40, 4, 255, 82, 37, 5, 255, 87, 43, 2, 255, 94, 43, 4, 255, 93, 37, 7, 255, 94, 41, 9, 255, 88, 38, 4, 255, 97, 38, 5, 255, 96, 37, 4, 255, 86, 35, 2, 255, 83, 34, 2, 255, 84, 34, 2, 255, 81, 34, 2, 255, 78, 34, 1, 255, 77, 33, 0, 255, 82, 33, 4, 255, 78, 30, 1, 255, 80, 31, 2, 255, 85, 34, 3, 255, 78, 34, 2, 255, 80, 38, 7, 255, 76, 32, 2, 255, 75, 32, 3, 255, 79, 29, 6, 255, 77, 32, 2, 255, 75, 37, 2, 255, 79, 32, 0, 255, 81, 29, 0, 255, 82, 32, 2, 255, 95, 34, 5, 255, 100, 35, 5, 255, 104, 33, 4, 255, 102, 29, 1, 255, 98, 30, 1, 255, 100, 34, 3, 255, 102, 37, 2, 255, 106, 35, 2, 255, 103, 33, 2, 255, 92, 33, 5, 255, 78, 33, 2, 255, 77, 32, 0, 255, 78, 27, 1, 255, 76, 28, 6, 255, 75, 28, 9, 255, 68, 23, 2, 255, 75, 29, 7, 255, 74, 27, 5, 255, 68, 29, 3, 255, 65, 28, 2, 255, 71, 28, 4, 255, 78, 28, 5, 255, 77, 27, 2, 255, 71, 27, 0, 255, 76, 25, 0, 255, 88, 32, 6, 255, 79, 28, 1, 255, 73, 26, 1, 255, 77, 25, 2, 255, 75, 25, 2, 255, 70, 28, 3, 255, 68, 25, 2, 255, 75, 22, 2, 255, 73, 24, 0, 255, 70, 25, 1, 255, 74, 25, 2, 255, 76, 21, 5, 255, 72, 21, 4, 255, 74, 26, 3, 255, 72, 25, 3, 255, 69, 22, 1, 255, 74, 23, 4, 255, 72, 22, 2, 255, 67, 22, 3, 255, 61, 21, 2, 255, 62, 23, 3, 255, 73, 30, 6, 255, 69, 22, 4, 255, 70, 20, 1, 255, 70, 22, 0, 255, 74, 22, 2, 255, 80, 27, 5, 255, 78, 27, 3, 255, 79, 24, 3, 255, 84, 25, 5, 255, 78, 22, 1, 255, 80, 26, 2, 255, 82, 25, 4, 255, 83, 23, 3, 255, 88, 25, 4, 255, 87, 27, 3, 255, 90, 25, 2, 255, 93, 22, 2, 255, 88, 19, 1, 255, 77, 20, 2, 255, 77, 22, 2, 255, 67, 22, 4, 255, 62, 22, 2, 255, 67, 19, 2, 255, 72, 23, 6, 255, 71, 24, 3, 255, 72, 18, 1, 255, 84, 25, 2, 255, 79, 22, 2, 255, 84, 24, 7, 255, 85, 24, 3, 255, 76, 22, 1, 255, 63, 16, 4, 255, 59, 17, 0, 255, 66, 20, 1, 255, 73, 20, 6, 255, 68, 17, 4, 255, 54, 16, 0, 255, 64, 19, 1, 255, 79, 21, 5, 255, 69, 20, 2, 255, 61, 19, 1, 255, 58, 15, 2, 255, 54, 12, 3, 255, 49, 14, 5, 255, 44, 13, 1, 255, 52, 18, 2, 255, 52, 16, 1, 255, 55, 16, 3, 255, 45, 15, 2, 255, 36, 13, 0, 255, 46, 11, 2, 255, 40, 12, 3, 255, 33, 12, 1, 255, 41, 17, 4, 255, 46, 12, 4, 255, 47, 9, 3, 255, 55, 14, 3, 255, 63, 14, 1, 255, 54, 11, 1, 255, 41, 10, 3, 255, 32, 10, 3, 255, 45, 13, 7, 255, 51, 16, 7, 255, 54, 13, 3, 255, 53, 11, 3, 255, 57, 15, 3, 255, 65, 19, 2, 255, 49, 12, 0, 255, 56, 13, 5, 255, 70, 14, 3, 255, 77, 17, 2, 255, 86, 25, 5, 255, 93, 26, 1, 255, 100, 26, 1, 255, 103, 30, 3, 255, 97, 30, 3, 255, 93, 29, 4, 255, 93, 25, 0, 255, 94, 27, 1, 255, 90, 26, 1, 255, 8, 5, 1, 255, 8, 6, 1, 255, 13, 7, 3, 255, 14, 5, 2, 255, 15, 7, 4, 255, 11, 6, 3, 255, 16, 8, 2, 255, 18, 9, 1, 255, 17, 10, 2, 255, 16, 9, 3, 255, 16, 10, 4, 255, 18, 9, 2, 255, 18, 8, 2, 255, 13, 9, 2, 255, 16, 10, 5, 255, 16, 9, 1, 255, 21, 12, 5, 255, 20, 11, 3, 255, 21, 9, 2, 255, 20, 11, 2, 255, 20, 12, 4, 255, 21, 12, 4, 255, 22, 9, 3, 255, 30, 13, 5, 255, 30, 14, 5, 255, 28, 17, 6, 255, 23, 12, 2, 255, 28, 14, 5, 255, 28, 15, 4, 255, 31, 16, 5, 255, 33, 16, 4, 255, 33, 15, 3, 255, 27, 14, 5, 255, 33, 18, 4, 255, 40, 18, 4, 255, 38, 13, 2, 255, 39, 17, 6, 255, 38, 18, 4, 255, 37, 19, 4, 255, 35, 14, 1, 255, 37, 17, 3, 255, 35, 16, 2, 255, 34, 18, 4, 255, 33, 17, 2, 255, 37, 19, 5, 255, 35, 19, 7, 255, 30, 15, 0, 255, 32, 19, 2, 255, 30, 18, 5, 255, 31, 18, 6, 255, 32, 16, 5, 255, 38, 18, 5, 255, 36, 20, 7, 255, 31, 18, 3, 255, 35, 17, 0, 255, 41, 21, 0, 255, 37, 21, 0, 255, 36, 20, 3, 255, 41, 20, 7, 255, 32, 19, 4, 255, 40, 22, 6, 255, 36, 18, 1, 255, 37, 21, 2, 255, 38, 23, 3, 255, 40, 24, 5, 255, 45, 24, 3, 255, 46, 23, 2, 255, 45, 26, 5, 255, 45, 24, 4, 255, 50, 23, 2, 255, 44, 24, 3, 255, 36, 23, 3, 255, 43, 26, 2, 255, 52, 27, 6, 255, 48, 26, 5, 255, 40, 23, 4, 255, 47, 23, 8, 255, 58, 28, 4, 255, 58, 31, 0, 255, 58, 28, 3, 255, 59, 27, 9, 255, 53, 29, 4, 255, 48, 29, 4, 255, 47, 22, 5, 255, 50, 27, 2, 255, 49, 30, 2, 255, 49, 29, 6, 255, 52, 27, 5, 255, 52, 29, 3, 255, 58, 25, 1, 255, 50, 24, 0, 255, 49, 31, 3, 255, 58, 30, 4, 255, 58, 27, 5, 255, 56, 25, 3, 255, 51, 28, 3, 255, 58, 32, 1, 255, 56, 28, 3, 255, 53, 26, 5, 255, 54, 28, 4, 255, 56, 28, 5, 255, 59, 26, 3, 255, 59, 32, 4, 255, 57, 29, 0, 255, 59, 29, 1, 255, 63, 30, 4, 255, 68, 29, 6, 255, 59, 24, 2, 255, 54, 31, 5, 255, 55, 30, 3, 255, 60, 30, 2, 255, 64, 30, 2, 255, 60, 30, 7, 255, 58, 28, 5, 255, 60, 29, 3, 255, 59, 28, 4, 255, 60, 28, 8, 255, 57, 29, 5, 255, 54, 30, 0, 255, 57, 34, 3, 255, 63, 28, 2, 255, 67, 28, 10, 255, 58, 29, 3, 255, 69, 32, 4, 255, 66, 34, 3, 255, 62, 32, 7, 255, 62, 29, 0, 255, 59, 30, 5, 255, 58, 34, 8, 255, 59, 34, 2, 255, 68, 41, 5, 255, 62, 37, 3, 255, 60, 36, 5, 255, 61, 38, 5, 255, 60, 36, 11, 255, 63, 43, 15, 255, 60, 45, 6, 255, 64, 49, 8, 255, 68, 49, 9, 255, 73, 54, 8, 255, 74, 55, 5, 255, 72, 52, 11, 255, 64, 47, 17, 255, 65, 49, 9, 255, 75, 57, 15, 255, 68, 54, 20, 255, 66, 57, 18, 255, 74, 60, 22, 255, 70, 56, 17, 255, 71, 59, 29, 255, 68, 56, 33, 255, 66, 60, 27, 255, 68, 65, 35, 255, 64, 62, 35, 255, 67, 66, 33, 255, 72, 70, 38, 255, 75, 71, 40, 255, 73, 68, 36, 255, 71, 66, 43, 255, 73, 73, 40, 255, 76, 77, 44, 255, 76, 77, 42, 255, 75, 77, 46, 255, 75, 76, 54, 255, 79, 82, 59, 255, 78, 82, 52, 255, 80, 86, 51, 255, 83, 89, 50, 255, 84, 90, 64, 255, 82, 91, 70, 255, 82, 93, 63, 255, 84, 94, 62, 255, 86, 99, 66, 255, 82, 101, 62, 255, 87, 102, 69, 255, 88, 101, 70, 255, 92, 106, 73, 255, 98, 108, 72, 255, 108, 113, 73, 255, 118, 120, 71, 255, 121, 118, 68, 255, 128, 120, 74, 255, 130, 123, 70, 255, 128, 120, 65, 255, 133, 121, 73, 255, 134, 118, 68, 255, 123, 117, 64, 255, 105, 112, 63, 255, 98, 114, 67, 255, 96, 113, 64, 255, 99, 112, 58, 255, 105, 116, 58, 255, 125, 114, 60, 255, 118, 113, 55, 255, 96, 104, 52, 255, 93, 105, 59, 255, 98, 100, 53, 255, 102, 100, 48, 255, 101, 98, 45, 255, 100, 96, 49, 255, 97, 96, 45, 255, 94, 92, 39, 255, 108, 95, 42, 255, 121, 95, 46, 255, 122, 91, 24, 255, 123, 88, 30, 255, 116, 84, 31, 255, 108, 84, 25, 255, 94, 75, 26, 255, 95, 79, 32, 255, 94, 78, 23, 255, 94, 78, 21, 255, 89, 72, 18, 255, 92, 72, 17, 255, 95, 69, 24, 255, 96, 67, 18, 255, 95, 68, 12, 255, 88, 63, 20, 255, 84, 59, 23, 255, 88, 62, 21, 255, 86, 60, 15, 255, 85, 58, 11, 255, 89, 59, 13, 255, 87, 56, 9, 255, 90, 55, 15, 255, 87, 49, 23, 255, 89, 53, 17, 255, 84, 54, 3, 255, 86, 55, 5, 255, 86, 51, 12, 255, 91, 48, 9, 255, 109, 50, 8, 255, 111, 47, 9, 255, 100, 46, 6, 255, 92, 44, 7, 255, 87, 44, 6, 255, 85, 46, 5, 255, 86, 45, 9, 255, 85, 40, 6, 255, 84, 40, 8, 255, 80, 38, 13, 255, 80, 41, 3, 255, 82, 40, 1, 255, 87, 42, 1, 255, 83, 40, 3, 255, 79, 39, 3, 255, 84, 40, 4, 255, 89, 39, 2, 255, 91, 39, 3, 255, 97, 41, 7, 255, 96, 36, 2, 255, 92, 36, 1, 255, 93, 37, 2, 255, 94, 37, 5, 255, 88, 35, 3, 255, 83, 39, 4, 255, 85, 32, 5, 255, 82, 32, 1, 255, 83, 38, 3, 255, 85, 34, 3, 255, 87, 30, 4, 255, 82, 31, 4, 255, 79, 32, 2, 255, 76, 30, 1, 255, 76, 35, 3, 255, 76, 34, 2, 255, 75, 29, 0, 255, 78, 32, 2, 255, 78, 33, 4, 255, 85, 38, 4, 255, 94, 38, 6, 255, 83, 34, 3, 255, 77, 29, 4, 255, 81, 30, 3, 255, 88, 34, 3, 255, 100, 35, 2, 255, 109, 35, 2, 255, 95, 31, 0, 255, 96, 33, 4, 255, 106, 34, 3, 255, 100, 36, 4, 255, 89, 30, 2, 255, 94, 29, 3, 255, 94, 28, 3, 255, 77, 29, 0, 255, 79, 32, 2, 255, 79, 27, 3, 255, 71, 26, 3, 255, 76, 29, 6, 255, 71, 23, 1, 255, 63, 25, 3, 255, 67, 25, 3, 255, 72, 29, 5, 255, 74, 29, 2, 255, 87, 29, 2, 255, 87, 27, 0, 255, 83, 31, 3, 255, 71, 27, 0, 255, 70, 28, 2, 255, 76, 28, 4, 255, 76, 25, 2, 255, 72, 28, 5, 255, 70, 25, 2, 255, 72, 26, 2, 255, 69, 28, 2, 255, 74, 26, 2, 255, 76, 25, 3, 255, 73, 23, 2, 255, 81, 29, 8, 255, 74, 22, 3, 255, 71, 24, 3, 255, 70, 25, 2, 255, 74, 23, 2, 255, 80, 28, 5, 255, 70, 22, 0, 255, 72, 22, 2, 255, 73, 25, 2, 255, 73, 27, 6, 255, 72, 23, 5, 255, 72, 22, 3, 255, 80, 25, 4, 255, 78, 23, 5, 255, 67, 21, 3, 255, 68, 23, 3, 255, 73, 22, 2, 255, 75, 21, 0, 255, 77, 24, 4, 255, 76, 20, 3, 255, 77, 19, 4, 255, 78, 22, 3, 255, 80, 22, 0, 255, 84, 23, 3, 255, 81, 24, 3, 255, 84, 24, 2, 255, 88, 26, 2, 255, 91, 26, 3, 255, 89, 23, 3, 255, 88, 25, 6, 255, 77, 25, 1, 255, 72, 21, 1, 255, 79, 20, 2, 255, 86, 24, 5, 255, 76, 26, 4, 255, 67, 24, 2, 255, 73, 21, 1, 255, 76, 20, 3, 255, 70, 20, 3, 255, 73, 19, 2, 255, 77, 20, 1, 255, 76, 21, 1, 255, 70, 21, 4, 255, 60, 16, 2, 255, 58, 18, 1, 255, 61, 21, 1, 255, 58, 18, 1, 255, 55, 18, 1, 255, 57, 16, 1, 255, 66, 16, 3, 255, 75, 17, 5, 255, 79, 19, 3, 255, 71, 20, 1, 255, 54, 18, 2, 255, 45, 15, 4, 255, 54, 14, 5, 255, 62, 16, 4, 255, 67, 19, 1, 255, 78, 17, 4, 255, 74, 19, 3, 255, 62, 13, 2, 255, 44, 13, 2, 255, 39, 13, 6, 255, 48, 14, 3, 255, 47, 16, 6, 255, 36, 8, 1, 255, 40, 13, 3, 255, 40, 11, 1, 255, 41, 13, 3, 255, 45, 14, 4, 255, 45, 12, 4, 255, 34, 5, 3, 255, 38, 14, 3, 255, 41, 15, 2, 255, 49, 13, 4, 255, 62, 18, 7, 255, 60, 16, 2, 255, 58, 14, 5, 255, 53, 14, 6, 255, 46, 9, 3, 255, 49, 11, 2, 255, 60, 16, 3, 255, 73, 18, 4, 255, 80, 22, 3, 255, 82, 23, 1, 255, 89, 24, 1, 255, 99, 26, 3, 255, 100, 26, 2, 255, 100, 27, 2, 255, 100, 26, 2, 255, 101, 27, 4, 255, 99, 28, 2, 255, 5, 4, 1, 255, 9, 7, 3, 255, 12, 9, 4, 255, 11, 5, 2, 255, 13, 5, 2, 255, 17, 7, 5, 255, 19, 9, 3, 255, 18, 9, 1, 255, 16, 9, 3, 255, 15, 8, 2, 255, 16, 9, 3, 255, 17, 8, 1, 255, 17, 7, 0, 255, 18, 9, 4, 255, 17, 6, 2, 255, 19, 8, 3, 255, 19, 9, 2, 255, 18, 9, 2, 255, 20, 10, 2, 255, 19, 12, 2, 255, 15, 10, 1, 255, 17, 10, 0, 255, 23, 12, 3, 255, 25, 12, 3, 255, 22, 11, 2, 255, 26, 13, 4, 255, 29, 14, 5, 255, 22, 10, 1, 255, 21, 10, 1, 255, 33, 14, 6, 255, 38, 14, 5, 255, 30, 13, 0, 255, 26, 11, 1, 255, 38, 21, 7, 255, 38, 19, 5, 255, 34, 14, 0, 255, 34, 17, 4, 255, 31, 18, 3, 255, 30, 18, 3, 255, 30, 16, 3, 255, 33, 16, 4, 255, 34, 17, 5, 255, 35, 19, 5, 255, 34, 17, 3, 255, 32, 12, 2, 255, 26, 12, 6, 255, 32, 17, 2, 255, 36, 21, 4, 255, 32, 15, 3, 255, 34, 17, 3, 255, 36, 20, 0, 255, 39, 20, 2, 255, 37, 20, 3, 255, 34, 18, 2, 255, 40, 21, 2, 255, 43, 21, 2, 255, 44, 23, 4, 255, 35, 20, 2, 255, 35, 19, 3, 255, 40, 21, 5, 255, 46, 24, 7, 255, 36, 19, 2, 255, 38, 22, 5, 255, 39, 22, 5, 255, 38, 23, 6, 255, 35, 20, 5, 255, 40, 21, 6, 255, 43, 19, 1, 255, 49, 25, 5, 255, 44, 26, 4, 255, 39, 24, 0, 255, 46, 28, 4, 255, 45, 25, 1, 255, 49, 25, 3, 255, 51, 26, 3, 255, 50, 28, 1, 255, 49, 28, 2, 255, 47, 23, 6, 255, 52, 29, 2, 255, 53, 32, 5, 255, 58, 27, 4, 255, 59, 24, 2, 255, 52, 29, 2, 255, 49, 25, 4, 255, 51, 25, 3, 255, 52, 30, 2, 255, 51, 31, 0, 255, 52, 24, 8, 255, 47, 25, 7, 255, 56, 25, 4, 255, 49, 28, 3, 255, 45, 29, 2, 255, 56, 28, 1, 255, 50, 28, 3, 255, 45, 28, 3, 255, 49, 27, 1, 255, 56, 28, 1, 255, 57, 29, 6, 255, 57, 29, 6, 255, 53, 27, 1, 255, 57, 31, 1, 255, 61, 31, 3, 255, 63, 31, 7, 255, 60, 31, 6, 255, 58, 29, 4, 255, 61, 29, 5, 255, 59, 26, 2, 255, 57, 28, 2, 255, 56, 30, 3, 255, 56, 30, 3, 255, 59, 29, 4, 255, 59, 28, 4, 255, 53, 26, 1, 255, 53, 27, 6, 255, 59, 33, 8, 255, 59, 27, 3, 255, 57, 32, 3, 255, 50, 28, 2, 255, 63, 31, 2, 255, 66, 27, 1, 255, 64, 28, 5, 255, 59, 29, 2, 255, 59, 30, 4, 255, 62, 35, 2, 255, 64, 34, 4, 255, 62, 30, 5, 255, 66, 33, 4, 255, 54, 31, 5, 255, 56, 30, 8, 255, 63, 36, 8, 255, 60, 31, 0, 255, 66, 39, 9, 255, 61, 36, 7, 255, 57, 34, 3, 255, 66, 33, 9, 255, 74, 39, 14, 255, 70, 42, 10, 255, 68, 43, 9, 255, 67, 44, 7, 255, 68, 48, 14, 255, 64, 49, 22, 255, 56, 49, 16, 255, 72, 49, 16, 255, 72, 48, 19, 255, 56, 49, 22, 255, 67, 53, 28, 255, 72, 56, 19, 255, 70, 53, 20, 255, 69, 55, 20, 255, 66, 60, 35, 255, 61, 60, 26, 255, 66, 63, 27, 255, 65, 58, 36, 255, 71, 62, 35, 255, 72, 65, 29, 255, 72, 68, 34, 255, 70, 67, 41, 255, 69, 67, 39, 255, 70, 68, 44, 255, 71, 73, 46, 255, 80, 79, 49, 255, 75, 74, 51, 255, 75, 75, 57, 255, 76, 79, 57, 255, 76, 82, 53, 255, 80, 88, 54, 255, 84, 92, 58, 255, 85, 94, 48, 255, 85, 94, 55, 255, 84, 92, 66, 255, 84, 95, 64, 255, 87, 98, 64, 255, 90, 103, 66, 255, 86, 106, 60, 255, 88, 107, 66, 255, 89, 108, 70, 255, 89, 111, 74, 255, 86, 109, 71, 255, 91, 111, 73, 255, 95, 113, 77, 255, 99, 113, 74, 255, 106, 115, 79, 255, 112, 120, 74, 255, 110, 119, 68, 255, 112, 119, 72, 255, 110, 115, 73, 255, 104, 113, 77, 255, 96, 113, 68, 255, 97, 118, 63, 255, 99, 114, 67, 255, 101, 108, 71, 255, 109, 114, 71, 255, 118, 113, 65, 255, 114, 107, 61, 255, 102, 103, 52, 255, 100, 104, 58, 255, 96, 96, 59, 255, 94, 97, 56, 255, 97, 98, 49, 255, 98, 97, 42, 255, 96, 96, 39, 255, 95, 93, 36, 255, 103, 91, 41, 255, 112, 91, 37, 255, 113, 86, 36, 255, 110, 84, 34, 255, 105, 82, 22, 255, 99, 78, 22, 255, 95, 78, 23, 255, 92, 74, 24, 255, 94, 74, 17, 255, 93, 71, 22, 255, 92, 67, 22, 255, 96, 71, 21, 255, 90, 70, 22, 255, 85, 67, 15, 255, 92, 66, 15, 255, 92, 63, 17, 255, 87, 64, 15, 255, 81, 61, 19, 255, 79, 57, 16, 255, 84, 58, 13, 255, 87, 56, 9, 255, 89, 54, 8, 255, 96, 57, 14, 255, 89, 53, 10, 255, 86, 55, 6, 255, 80, 50, 7, 255, 85, 55, 9, 255, 85, 55, 3, 255, 83, 51, 4, 255, 86, 46, 4, 255, 92, 49, 7, 255, 84, 47, 3, 255, 84, 46, 3, 255, 86, 42, 1, 255, 87, 45, 0, 255, 81, 47, 1, 255, 84, 41, 2, 255, 87, 40, 4, 255, 84, 38, 8, 255, 82, 39, 6, 255, 79, 40, 4, 255, 91, 38, 4, 255, 91, 38, 5, 255, 85, 37, 3, 255, 88, 40, 4, 255, 91, 38, 2, 255, 91, 38, 2, 255, 94, 40, 4, 255, 94, 37, 0, 255, 95, 38, 4, 255, 90, 35, 2, 255, 88, 39, 5, 255, 82, 37, 3, 255, 83, 38, 2, 255, 81, 33, 3, 255, 78, 34, 3, 255, 81, 35, 4, 255, 81, 32, 1, 255, 79, 32, 0, 255, 86, 35, 6, 255, 83, 34, 3, 255, 79, 32, 1, 255, 81, 33, 4, 255, 77, 32, 5, 255, 74, 31, 1, 255, 81, 35, 1, 255, 93, 34, 3, 255, 103, 32, 4, 255, 104, 38, 4, 255, 98, 35, 2, 255, 82, 34, 3, 255, 77, 28, 4, 255, 85, 28, 8, 255, 92, 34, 2, 255, 96, 28, 3, 255, 94, 28, 6, 255, 89, 30, 2, 255, 93, 29, 1, 255, 90, 27, 7, 255, 80, 27, 7, 255, 73, 24, 2, 255, 73, 26, 4, 255, 80, 26, 5, 255, 77, 28, 3, 255, 76, 30, 4, 255, 74, 25, 4, 255, 72, 25, 2, 255, 70, 23, 1, 255, 70, 26, 3, 255, 75, 26, 6, 255, 77, 24, 3, 255, 83, 28, 4, 255, 94, 30, 5, 255, 88, 23, 1, 255, 80, 23, 4, 255, 70, 23, 3, 255, 72, 29, 5, 255, 73, 27, 2, 255, 76, 27, 1, 255, 71, 27, 3, 255, 69, 25, 3, 255, 73, 25, 3, 255, 87, 24, 1, 255, 87, 28, 2, 255, 76, 27, 1, 255, 74, 25, 2, 255, 74, 22, 3, 255, 73, 24, 3, 255, 71, 26, 4, 255, 70, 24, 0, 255, 77, 23, 2, 255, 94, 26, 7, 255, 99, 30, 6, 255, 78, 28, 1, 255, 71, 22, 1, 255, 85, 27, 5, 255, 86, 26, 3, 255, 77, 21, 2, 255, 70, 20, 4, 255, 67, 24, 7, 255, 71, 23, 6, 255, 78, 27, 6, 255, 79, 27, 3, 255, 86, 26, 3, 255, 88, 24, 1, 255, 80, 25, 0, 255, 78, 24, 3, 255, 77, 21, 1, 255, 74, 22, 0, 255, 77, 22, 2, 255, 81, 19, 4, 255, 83, 22, 5, 255, 78, 23, 2, 255, 82, 22, 4, 255, 81, 20, 4, 255, 75, 23, 4, 255, 70, 21, 1, 255, 71, 20, 2, 255, 75, 22, 2, 255, 77, 24, 4, 255, 77, 22, 2, 255, 80, 23, 5, 255, 84, 22, 4, 255, 82, 21, 4, 255, 73, 19, 4, 255, 69, 20, 2, 255, 65, 21, 1, 255, 63, 20, 0, 255, 64, 19, 2, 255, 64, 19, 4, 255, 65, 16, 2, 255, 71, 19, 6, 255, 66, 17, 2, 255, 59, 15, 2, 255, 63, 18, 7, 255, 66, 16, 5, 255, 66, 15, 3, 255, 66, 13, 2, 255, 69, 11, 4, 255, 66, 15, 5, 255, 55, 15, 2, 255, 52, 15, 4, 255, 59, 18, 9, 255, 70, 16, 5, 255, 75, 16, 5, 255, 67, 16, 3, 255, 53, 12, 0, 255, 41, 16, 2, 255, 39, 15, 3, 255, 46, 12, 2, 255, 46, 12, 3, 255, 41, 11, 4, 255, 35, 7, 0, 255, 40, 13, 1, 255, 39, 11, 2, 255, 38, 12, 2, 255, 36, 12, 5, 255, 38, 8, 6, 255, 39, 14, 4, 255, 36, 14, 1, 255, 41, 11, 0, 255, 57, 16, 5, 255, 63, 17, 3, 255, 54, 14, 5, 255, 34, 5, 0, 255, 36, 16, 5, 255, 36, 13, 1, 255, 39, 9, 3, 255, 59, 15, 3, 255, 72, 21, 2, 255, 74, 20, 1, 255, 83, 21, 3, 255, 94, 24, 6, 255, 98, 23, 1, 255, 100, 25, 0, 255, 99, 28, 3, 255, 99, 26, 2, 255, 100, 23, 0, 255, 9, 4, 2, 255, 9, 5, 2, 255, 10, 7, 3, 255, 11, 8, 3, 255, 10, 4, 1, 255, 16, 6, 4, 255, 15, 5, 2, 255, 14, 6, 1, 255, 15, 8, 2, 255, 13, 6, 1, 255, 12, 5, 0, 255, 16, 7, 2, 255, 17, 7, 2, 255, 15, 5, 1, 255, 16, 6, 1, 255, 17, 7, 3, 255, 17, 8, 1, 255, 19, 10, 3, 255, 18, 9, 2, 255, 17, 10, 1, 255, 17, 11, 2, 255, 19, 12, 4, 255, 19, 9, 2, 255, 21, 9, 3, 255, 18, 9, 1, 255, 20, 9, 1, 255, 21, 14, 2, 255, 22, 13, 3, 255, 37, 12, 8, 255, 34, 14, 8, 255, 23, 14, 0, 255, 36, 14, 2, 255, 32, 14, 3, 255, 34, 16, 3, 255, 34, 16, 1, 255, 34, 18, 4, 255, 31, 17, 4, 255, 26, 16, 1, 255, 22, 15, 3, 255, 27, 17, 7, 255, 29, 15, 6, 255, 30, 15, 5, 255, 31, 17, 4, 255, 31, 16, 1, 255, 35, 19, 3, 255, 32, 18, 2, 255, 34, 18, 3, 255, 37, 19, 4, 255, 36, 16, 1, 255, 35, 16, 1, 255, 36, 20, 5, 255, 38, 18, 1, 255, 36, 17, 0, 255, 35, 20, 3, 255, 36, 20, 1, 255, 41, 22, 4, 255, 37, 18, 1, 255, 39, 21, 5, 255, 37, 20, 5, 255, 33, 22, 2, 255, 33, 21, 1, 255, 36, 26, 5, 255, 36, 22, 3, 255, 39, 22, 4, 255, 40, 24, 2, 255, 43, 23, 7, 255, 46, 21, 7, 255, 48, 23, 1, 255, 51, 27, 0, 255, 48, 25, 2, 255, 44, 25, 5, 255, 47, 23, 5, 255, 48, 22, 5, 255, 47, 24, 6, 255, 49, 22, 3, 255, 55, 27, 4, 255, 51, 28, 2, 255, 57, 29, 2, 255, 50, 22, 4, 255, 49, 19, 5, 255, 48, 25, 0, 255, 46, 29, 0, 255, 46, 28, 3, 255, 47, 27, 2, 255, 51, 27, 3, 255, 52, 28, 5, 255, 50, 27, 4, 255, 48, 20, 5, 255, 43, 24, 5, 255, 52, 26, 3, 255, 56, 29, 5, 255, 57, 28, 2, 255, 55, 26, 4, 255, 46, 26, 1, 255, 54, 31, 3, 255, 56, 29, 5, 255, 58, 30, 4, 255, 54, 26, 3, 255, 55, 27, 4, 255, 55, 29, 2, 255, 58, 32, 2, 255, 59, 30, 2, 255, 58, 27, 3, 255, 52, 26, 3, 255, 53, 28, 4, 255, 59, 30, 5, 255, 55, 26, 1, 255, 58, 31, 4, 255, 60, 28, 2, 255, 58, 28, 6, 255, 59, 30, 4, 255, 55, 30, 2, 255, 57, 31, 8, 255, 59, 33, 4, 255, 57, 29, 5, 255, 59, 27, 3, 255, 58, 28, 3, 255, 63, 33, 5, 255, 61, 31, 4, 255, 59, 29, 3, 255, 56, 29, 2, 255, 54, 28, 2, 255, 63, 30, 5, 255, 70, 32, 3, 255, 65, 30, 4, 255, 58, 30, 5, 255, 68, 29, 4, 255, 57, 27, 5, 255, 54, 33, 6, 255, 65, 41, 8, 255, 65, 36, 3, 255, 66, 36, 5, 255, 63, 34, 4, 255, 65, 38, 5, 255, 72, 40, 3, 255, 73, 40, 7, 255, 68, 43, 10, 255, 64, 44, 4, 255, 64, 47, 8, 255, 61, 46, 15, 255, 65, 50, 14, 255, 70, 45, 15, 255, 65, 47, 21, 255, 64, 51, 13, 255, 68, 51, 18, 255, 68, 54, 29, 255, 69, 57, 20, 255, 74, 58, 18, 255, 70, 57, 28, 255, 67, 62, 24, 255, 63, 62, 32, 255, 66, 63, 41, 255, 75, 68, 24, 255, 77, 66, 23, 255, 75, 69, 27, 255, 74, 72, 35, 255, 71, 72, 26, 255, 71, 72, 36, 255, 73, 75, 36, 255, 73, 78, 39, 255, 74, 74, 49, 255, 75, 74, 52, 255, 76, 78, 57, 255, 77, 81, 57, 255, 78, 85, 54, 255, 79, 88, 54, 255, 83, 92, 58, 255, 86, 98, 49, 255, 87, 99, 54, 255, 84, 94, 63, 255, 86, 98, 60, 255, 91, 103, 62, 255, 92, 104, 67, 255, 90, 103, 71, 255, 92, 106, 72, 255, 93, 108, 74, 255, 91, 110, 74, 255, 88, 110, 72, 255, 92, 115, 76, 255, 101, 116, 73, 255, 103, 117, 73, 255, 100, 116, 82, 255, 97, 116, 79, 255, 95, 114, 72, 255, 102, 118, 76, 255, 101, 117, 67, 255, 99, 115, 71, 255, 99, 116, 80, 255, 98, 116, 66, 255, 99, 116, 64, 255, 96, 109, 68, 255, 97, 108, 66, 255, 93, 107, 62, 255, 96, 103, 65, 255, 95, 104, 59, 255, 96, 105, 53, 255, 98, 101, 50, 255, 93, 97, 56, 255, 91, 94, 49, 255, 94, 94, 39, 255, 92, 93, 50, 255, 90, 92, 35, 255, 90, 90, 26, 255, 94, 90, 26, 255, 94, 85, 43, 255, 90, 81, 36, 255, 90, 79, 29, 255, 90, 76, 35, 255, 90, 77, 29, 255, 91, 75, 26, 255, 95, 72, 32, 255, 92, 69, 27, 255, 93, 70, 21, 255, 93, 70, 15, 255, 92, 65, 14, 255, 92, 66, 12, 255, 88, 67, 11, 255, 83, 60, 12, 255, 86, 58, 13, 255, 88, 57, 15, 255, 88, 54, 16, 255, 88, 53, 16, 255, 88, 55, 11, 255, 89, 57, 6, 255, 88, 53, 16, 255, 90, 54, 6, 255, 84, 51, 0, 255, 82, 51, 11, 255, 80, 48, 8, 255, 87, 49, 8, 255, 83, 53, 9, 255, 89, 49, 3, 255, 109, 48, 9, 255, 97, 43, 6, 255, 86, 43, 5, 255, 84, 43, 6, 255, 84, 42, 6, 255, 83, 40, 6, 255, 83, 40, 8, 255, 85, 44, 7, 255, 81, 39, 5, 255, 81, 37, 5, 255, 82, 38, 3, 255, 85, 38, 3, 255, 84, 39, 3, 255, 78, 34, 0, 255, 84, 40, 6, 255, 92, 44, 7, 255, 92, 39, 2, 255, 91, 35, 0, 255, 91, 36, 1, 255, 90, 38, 1, 255, 86, 41, 1, 255, 85, 40, 2, 255, 86, 36, 3, 255, 87, 32, 4, 255, 86, 31, 3, 255, 81, 32, 2, 255, 80, 36, 4, 255, 76, 35, 3, 255, 76, 36, 4, 255, 81, 31, 1, 255, 82, 31, 3, 255, 78, 30, 3, 255, 74, 27, 2, 255, 77, 31, 6, 255, 76, 31, 3, 255, 78, 29, 0, 255, 98, 36, 6, 255, 112, 36, 5, 255, 102, 39, 2, 255, 106, 32, 0, 255, 102, 35, 4, 255, 95, 35, 2, 255, 99, 36, 2, 255, 92, 33, 4, 255, 74, 26, 3, 255, 75, 26, 7, 255, 72, 27, 4, 255, 77, 26, 7, 255, 84, 25, 4, 255, 82, 31, 1, 255, 81, 31, 4, 255, 85, 31, 5, 255, 88, 33, 5, 255, 86, 30, 1, 255, 85, 31, 1, 255, 79, 32, 3, 255, 72, 24, 1, 255, 74, 26, 3, 255, 72, 26, 2, 255, 72, 27, 3, 255, 71, 27, 2, 255, 72, 26, 0, 255, 67, 24, 2, 255, 66, 26, 3, 255, 72, 24, 1, 255, 76, 25, 3, 255, 72, 24, 1, 255, 72, 24, 2, 255, 71, 25, 3, 255, 71, 24, 1, 255, 67, 22, 2, 255, 75, 24, 3, 255, 95, 24, 1, 255, 96, 28, 1, 255, 86, 30, 4, 255, 71, 26, 3, 255, 68, 20, 0, 255, 75, 22, 3, 255, 74, 23, 4, 255, 68, 21, 1, 255, 71, 23, 3, 255, 80, 23, 2, 255, 91, 27, 3, 255, 81, 29, 3, 255, 66, 19, 0, 255, 72, 24, 1, 255, 78, 29, 2, 255, 73, 22, 1, 255, 62, 21, 5, 255, 58, 21, 3, 255, 65, 20, 4, 255, 75, 24, 4, 255, 75, 23, 0, 255, 86, 25, 2, 255, 89, 24, 4, 255, 79, 21, 0, 255, 75, 23, 2, 255, 78, 25, 4, 255, 73, 24, 2, 255, 74, 24, 2, 255, 82, 25, 5, 255, 82, 25, 5, 255, 79, 23, 2, 255, 77, 23, 2, 255, 73, 21, 1, 255, 74, 21, 1, 255, 69, 22, 0, 255, 72, 22, 4, 255, 74, 21, 3, 255, 76, 22, 1, 255, 77, 21, 2, 255, 82, 22, 6, 255, 84, 21, 4, 255, 86, 20, 3, 255, 83, 20, 4, 255, 69, 16, 2, 255, 66, 20, 4, 255, 66, 21, 3, 255, 68, 21, 3, 255, 69, 18, 3, 255, 68, 19, 3, 255, 70, 20, 4, 255, 68, 19, 3, 255, 60, 19, 4, 255, 56, 17, 5, 255, 58, 17, 4, 255, 55, 14, 2, 255, 55, 15, 3, 255, 57, 14, 3, 255, 59, 14, 1, 255, 59, 17, 3, 255, 49, 17, 2, 255, 44, 13, 2, 255, 63, 15, 5, 255, 60, 13, 1, 255, 54, 14, 0, 255, 49, 16, 3, 255, 39, 12, 0, 255, 42, 11, 2, 255, 43, 12, 2, 255, 39, 8, 0, 255, 40, 10, 2, 255, 40, 13, 4, 255, 36, 12, 2, 255, 37, 12, 2, 255, 35, 12, 2, 255, 31, 13, 5, 255, 36, 10, 5, 255, 45, 14, 4, 255, 45, 12, 2, 255, 33, 4, 0, 255, 34, 10, 1, 255, 38, 9, 3, 255, 32, 9, 1, 255, 24, 9, 1, 255, 20, 10, 4, 255, 23, 10, 7, 255, 25, 5, 3, 255, 32, 6, 2, 255, 43, 12, 3, 255, 57, 18, 3, 255, 72, 18, 2, 255, 83, 20, 3, 255, 90, 22, 3, 255, 95, 25, 3, 255, 97, 22, 3, 255, 96, 25, 4, 255, 97, 24, 4, 255, 14, 4, 3, 255, 12, 4, 2, 255, 10, 5, 2, 255, 11, 7, 4, 255, 9, 6, 1, 255, 13, 7, 3, 255, 12, 3, 1, 255, 13, 4, 2, 255, 15, 7, 4, 255, 14, 5, 3, 255, 13, 5, 1, 255, 16, 9, 3, 255, 16, 10, 4, 255, 10, 6, 2, 255, 13, 8, 2, 255, 15, 8, 2, 255, 17, 8, 3, 255, 18, 9, 2, 255, 17, 8, 1, 255, 18, 9, 2, 255, 17, 9, 2, 255, 18, 11, 3, 255, 20, 10, 4, 255, 19, 7, 1, 255, 20, 9, 4, 255, 17, 10, 1, 255, 24, 14, 4, 255, 26, 11, 4, 255, 20, 11, 2, 255, 24, 14, 4, 255, 32, 13, 3, 255, 37, 18, 4, 255, 33, 15, 1, 255, 32, 14, 1, 255, 33, 15, 3, 255, 33, 16, 3, 255, 31, 15, 2, 255, 31, 16, 6, 255, 30, 19, 4, 255, 28, 17, 0, 255, 29, 15, 3, 255, 28, 14, 4, 255, 24, 13, 4, 255, 28, 16, 9, 255, 32, 18, 7, 255, 40, 23, 2, 255, 35, 18, 2, 255, 37, 18, 4, 255, 38, 17, 2, 255, 38, 20, 6, 255, 27, 13, 3, 255, 35, 16, 3, 255, 40, 21, 6, 255, 32, 19, 2, 255, 31, 19, 2, 255, 32, 19, 4, 255, 26, 14, 1, 255, 32, 22, 4, 255, 39, 20, 7, 255, 38, 17, 3, 255, 38, 21, 5, 255, 31, 25, 2, 255, 36, 23, 0, 255, 44, 22, 3, 255, 48, 24, 2, 255, 38, 23, 5, 255, 35, 24, 7, 255, 44, 25, 4, 255, 49, 23, 2, 255, 46, 23, 7, 255, 41, 21, 5, 255, 51, 24, 5, 255, 50, 24, 3, 255, 47, 26, 0, 255, 55, 30, 5, 255, 54, 26, 4, 255, 47, 23, 2, 255, 46, 24, 1, 255, 52, 30, 8, 255, 56, 31, 8, 255, 53, 31, 4, 255, 50, 31, 8, 255, 50, 24, 5, 255, 45, 25, 5, 255, 46, 25, 2, 255, 47, 23, 2, 255, 47, 23, 6, 255, 50, 25, 3, 255, 43, 28, 2, 255, 49, 26, 2, 255, 54, 26, 3, 255, 59, 27, 6, 255, 58, 28, 3, 255, 49, 28, 3, 255, 54, 26, 5, 255, 59, 29, 2, 255, 57, 31, 4, 255, 54, 27, 3, 255, 52, 25, 2, 255, 54, 28, 3, 255, 56, 30, 5, 255, 55, 26, 4, 255, 56, 26, 4, 255, 50, 28, 1, 255, 52, 30, 2, 255, 58, 32, 5, 255, 56, 31, 3, 255, 59, 32, 2, 255, 64, 28, 3, 255, 62, 30, 6, 255, 58, 27, 4, 255, 60, 32, 5, 255, 59, 29, 1, 255, 61, 28, 4, 255, 68, 34, 4, 255, 55, 27, 1, 255, 53, 24, 2, 255, 59, 31, 4, 255, 52, 31, 4, 255, 51, 30, 4, 255, 57, 28, 4, 255, 63, 30, 7, 255, 63, 31, 7, 255, 64, 31, 1, 255, 65, 27, 5, 255, 60, 32, 8, 255, 63, 31, 5, 255, 57, 25, 3, 255, 55, 36, 5, 255, 60, 39, 4, 255, 64, 39, 4, 255, 64, 35, 6, 255, 65, 35, 6, 255, 71, 38, 6, 255, 70, 40, 6, 255, 65, 43, 3, 255, 64, 46, 7, 255, 60, 42, 12, 255, 64, 45, 14, 255, 63, 45, 7, 255, 64, 47, 6, 255, 67, 49, 18, 255, 58, 45, 17, 255, 61, 48, 17, 255, 72, 56, 22, 255, 65, 57, 17, 255, 62, 57, 22, 255, 71, 63, 20, 255, 71, 62, 22, 255, 72, 64, 16, 255, 70, 63, 24, 255, 68, 63, 33, 255, 76, 70, 21, 255, 74, 64, 32, 255, 69, 62, 42, 255, 71, 69, 43, 255, 72, 73, 39, 255, 74, 76, 39, 255, 75, 77, 40, 255, 75, 76, 47, 255, 70, 74, 54, 255, 74, 79, 51, 255, 77, 83, 48, 255, 77, 84, 53, 255, 80, 86, 59, 255, 81, 88, 58, 255, 82, 90, 62, 255, 82, 91, 59, 255, 86, 95, 69, 255, 87, 96, 76, 255, 87, 99, 64, 255, 92, 104, 66, 255, 95, 107, 76, 255, 90, 105, 81, 255, 90, 107, 81, 255, 92, 108, 81, 255, 95, 112, 82, 255, 96, 114, 81, 255, 95, 115, 81, 255, 97, 120, 74, 255, 98, 120, 71, 255, 98, 115, 79, 255, 103, 116, 82, 255, 102, 115, 80, 255, 100, 115, 78, 255, 98, 117, 68, 255, 100, 118, 68, 255, 99, 115, 70, 255, 97, 113, 64, 255, 97, 112, 74, 255, 95, 108, 75, 255, 95, 111, 60, 255, 93, 109, 60, 255, 94, 106, 64, 255, 91, 106, 58, 255, 90, 105, 45, 255, 95, 101, 49, 255, 97, 97, 54, 255, 94, 94, 57, 255, 92, 95, 46, 255, 92, 94, 41, 255, 93, 92, 40, 255, 91, 88, 34, 255, 90, 86, 32, 255, 92, 83, 37, 255, 93, 79, 32, 255, 92, 80, 25, 255, 90, 77, 24, 255, 85, 72, 29, 255, 87, 75, 26, 255, 87, 72, 26, 255, 91, 71, 29, 255, 89, 71, 18, 255, 89, 68, 16, 255, 94, 68, 18, 255, 95, 67, 12, 255, 90, 65, 12, 255, 84, 61, 16, 255, 81, 57, 18, 255, 85, 56, 15, 255, 87, 56, 15, 255, 89, 53, 12, 255, 98, 58, 13, 255, 99, 59, 8, 255, 93, 49, 13, 255, 85, 48, 5, 255, 84, 51, 7, 255, 86, 49, 15, 255, 86, 49, 10, 255, 80, 47, 9, 255, 78, 48, 7, 255, 91, 46, 4, 255, 102, 46, 7, 255, 90, 45, 6, 255, 80, 44, 5, 255, 83, 44, 8, 255, 85, 41, 6, 255, 87, 42, 5, 255, 80, 38, 5, 255, 80, 41, 1, 255, 81, 41, 1, 255, 82, 38, 4, 255, 82, 38, 1, 255, 80, 36, 1, 255, 81, 39, 4, 255, 77, 37, 1, 255, 80, 38, 4, 255, 86, 40, 6, 255, 89, 38, 3, 255, 97, 39, 7, 255, 102, 39, 10, 255, 92, 37, 1, 255, 95, 43, 1, 255, 98, 44, 5, 255, 89, 38, 5, 255, 77, 31, 5, 255, 80, 34, 5, 255, 84, 32, 5, 255, 82, 33, 5, 255, 79, 35, 6, 255, 80, 32, 3, 255, 83, 32, 1, 255, 81, 28, 4, 255, 81, 29, 10, 255, 74, 29, 2, 255, 79, 34, 5, 255, 83, 34, 6, 255, 78, 27, 4, 255, 81, 32, 8, 255, 98, 36, 5, 255, 110, 31, 3, 255, 105, 30, 2, 255, 106, 33, 4, 255, 106, 32, 3, 255, 99, 32, 1, 255, 91, 30, 1, 255, 67, 29, 1, 255, 65, 27, 2, 255, 66, 26, 4, 255, 58, 26, 5, 255, 66, 25, 2, 255, 85, 37, 2, 255, 96, 33, 1, 255, 98, 29, 1, 255, 92, 31, 0, 255, 100, 33, 2, 255, 101, 32, 4, 255, 82, 28, 1, 255, 74, 27, 4, 255, 71, 25, 1, 255, 72, 26, 1, 255, 72, 29, 4, 255, 69, 29, 3, 255, 69, 30, 3, 255, 61, 24, 2, 255, 64, 23, 5, 255, 73, 25, 5, 255, 76, 25, 4, 255, 71, 25, 3, 255, 68, 27, 5, 255, 67, 26, 3, 255, 73, 25, 2, 255, 72, 24, 6, 255, 77, 23, 4, 255, 83, 27, 1, 255, 92, 28, 1, 255, 87, 23, 1, 255, 69, 24, 3, 255, 70, 23, 5, 255, 73, 22, 5, 255, 70, 21, 4, 255, 63, 20, 2, 255, 65, 22, 4, 255, 70, 25, 4, 255, 73, 23, 2, 255, 71, 19, 3, 255, 69, 23, 4, 255, 64, 25, 2, 255, 61, 24, 3, 255, 62, 23, 1, 255, 59, 22, 3, 255, 61, 21, 3, 255, 63, 22, 4, 255, 68, 24, 4, 255, 75, 24, 3, 255, 73, 23, 3, 255, 78, 24, 5, 255, 80, 22, 4, 255, 75, 21, 4, 255, 71, 25, 7, 255, 71, 23, 6, 255, 73, 21, 3, 255, 73, 24, 3, 255, 72, 21, 1, 255, 78, 24, 3, 255, 79, 27, 5, 255, 74, 22, 2, 255, 75, 20, 1, 255, 79, 25, 4, 255, 74, 21, 4, 255, 76, 18, 1, 255, 77, 19, 1, 255, 72, 20, 1, 255, 69, 21, 2, 255, 71, 19, 1, 255, 79, 20, 1, 255, 80, 19, 0, 255, 74, 19, 3, 255, 68, 16, 2, 255, 71, 19, 4, 255, 70, 21, 2, 255, 67, 19, 0, 255, 66, 17, 2, 255, 66, 16, 1, 255, 66, 18, 2, 255, 59, 18, 3, 255, 56, 18, 3, 255, 55, 18, 2, 255, 58, 16, 5, 255, 63, 18, 6, 255, 66, 19, 4, 255, 65, 18, 3, 255, 60, 16, 2, 255, 58, 16, 2, 255, 59, 16, 3, 255, 56, 15, 2, 255, 55, 16, 2, 255, 54, 18, 4, 255, 43, 13, 2, 255, 40, 13, 3, 255, 44, 13, 5, 255, 41, 14, 4, 255, 42, 14, 4, 255, 40, 12, 1, 255, 38, 13, 3, 255, 36, 12, 2, 255, 40, 15, 6, 255, 37, 9, 0, 255, 39, 12, 3, 255, 38, 10, 2, 255, 37, 10, 0, 255, 42, 14, 5, 255, 35, 9, 8, 255, 31, 8, 4, 255, 35, 7, 4, 255, 33, 8, 3, 255, 31, 11, 3, 255, 23, 5, 0, 255, 27, 9, 5, 255, 25, 11, 2, 255, 20, 5, 2, 255, 21, 4, 3, 255, 29, 10, 1, 255, 40, 12, 1, 255, 57, 16, 3, 255, 76, 20, 6, 255, 88, 22, 5, 255, 93, 20, 2, 255, 90, 24, 1, 255, 87, 27, 1, 255, 14, 4, 3, 255, 14, 5, 3, 255, 10, 5, 2, 255, 9, 4, 1, 255, 9, 5, 1, 255, 12, 7, 3, 255, 12, 6, 3, 255, 12, 5, 2, 255, 12, 5, 2, 255, 10, 6, 2, 255, 12, 7, 3, 255, 12, 8, 3, 255, 12, 8, 3, 255, 13, 9, 4, 255, 11, 5, 2, 255, 14, 6, 2, 255, 18, 9, 4, 255, 15, 6, 1, 255, 18, 9, 2, 255, 17, 8, 3, 255, 16, 9, 3, 255, 18, 10, 3, 255, 18, 8, 2, 255, 21, 9, 2, 255, 22, 10, 4, 255, 17, 8, 0, 255, 22, 12, 4, 255, 25, 12, 3, 255, 22, 13, 2, 255, 29, 10, 1, 255, 35, 12, 2, 255, 29, 18, 3, 255, 32, 15, 2, 255, 32, 14, 3, 255, 30, 14, 3, 255, 29, 13, 1, 255, 30, 14, 2, 255, 32, 14, 5, 255, 31, 16, 5, 255, 30, 15, 4, 255, 25, 11, 1, 255, 24, 14, 4, 255, 24, 16, 5, 255, 26, 16, 4, 255, 31, 16, 3, 255, 37, 19, 5, 255, 36, 21, 6, 255, 36, 20, 4, 255, 35, 16, 2, 255, 40, 21, 7, 255, 30, 18, 2, 255, 41, 17, 7, 255, 41, 15, 4, 255, 39, 16, 3, 255, 35, 17, 3, 255, 32, 15, 1, 255, 39, 20, 6, 255, 39, 21, 4, 255, 38, 17, 3, 255, 39, 17, 3, 255, 46, 17, 5, 255, 43, 15, 1, 255, 45, 21, 3, 255, 41, 23, 3, 255, 43, 21, 0, 255, 45, 24, 3, 255, 42, 23, 2, 255, 44, 27, 3, 255, 44, 24, 1, 255, 51, 22, 3, 255, 50, 24, 4, 255, 48, 25, 1, 255, 52, 29, 4, 255, 49, 28, 1, 255, 48, 26, 1, 255, 50, 25, 5, 255, 51, 26, 7, 255, 48, 26, 3, 255, 50, 26, 11, 255, 50, 32, 11, 255, 53, 33, 8, 255, 59, 33, 11, 255, 50, 28, 2, 255, 44, 27, 10, 255, 48, 27, 6, 255, 50, 26, 3, 255, 48, 24, 2, 255, 51, 24, 1, 255, 43, 26, 2, 255, 50, 25, 6, 255, 46, 28, 2, 255, 48, 32, 3, 255, 54, 25, 3, 255, 53, 32, 7, 255, 53, 33, 5, 255, 58, 28, 3, 255, 52, 28, 4, 255, 55, 28, 6, 255, 52, 26, 3, 255, 52, 26, 3, 255, 54, 28, 6, 255, 53, 22, 4, 255, 55, 25, 4, 255, 54, 28, 2, 255, 53, 27, 0, 255, 54, 30, 3, 255, 55, 32, 3, 255, 56, 28, 1, 255, 62, 27, 2, 255, 61, 26, 4, 255, 59, 29, 5, 255, 58, 29, 4, 255, 57, 27, 3, 255, 58, 28, 2, 255, 55, 26, 3, 255, 60, 25, 7, 255, 62, 32, 5, 255, 52, 28, 4, 255, 52, 30, 5, 255, 51, 27, 4, 255, 56, 29, 6, 255, 58, 29, 3, 255, 56, 28, 5, 255, 56, 31, 2, 255, 57, 34, 6, 255, 57, 31, 9, 255, 66, 31, 4, 255, 58, 34, 7, 255, 57, 34, 6, 255, 60, 35, 5, 255, 59, 34, 3, 255, 60, 34, 9, 255, 59, 32, 9, 255, 66, 34, 7, 255, 65, 35, 5, 255, 62, 38, 7, 255, 64, 43, 11, 255, 58, 37, 7, 255, 65, 39, 14, 255, 71, 46, 16, 255, 70, 46, 9, 255, 72, 53, 10, 255, 72, 53, 10, 255, 68, 52, 13, 255, 64, 56, 17, 255, 69, 53, 17, 255, 63, 57, 22, 255, 61, 60, 21, 255, 69, 62, 15, 255, 72, 60, 34, 255, 70, 64, 20, 255, 70, 69, 17, 255, 70, 65, 26, 255, 75, 69, 34, 255, 68, 66, 35, 255, 68, 70, 30, 255, 72, 72, 46, 255, 75, 77, 36, 255, 74, 75, 49, 255, 72, 73, 57, 255, 71, 78, 57, 255, 74, 83, 50, 255, 79, 87, 49, 255, 81, 89, 55, 255, 81, 87, 61, 255, 82, 88, 59, 255, 87, 98, 59, 255, 87, 97, 56, 255, 86, 95, 67, 255, 88, 98, 74, 255, 90, 104, 73, 255, 91, 104, 79, 255, 90, 103, 77, 255, 88, 110, 78, 255, 88, 111, 81, 255, 88, 112, 83, 255, 91, 112, 85, 255, 96, 115, 88, 255, 97, 117, 90, 255, 101, 116, 89, 255, 101, 119, 83, 255, 95, 118, 80, 255, 97, 119, 79, 255, 98, 119, 80, 255, 95, 117, 81, 255, 96, 120, 75, 255, 96, 116, 73, 255, 96, 113, 75, 255, 100, 116, 72, 255, 98, 114, 70, 255, 96, 108, 72, 255, 96, 105, 71, 255, 100, 106, 57, 255, 101, 105, 56, 255, 96, 108, 52, 255, 93, 106, 52, 255, 94, 97, 61, 255, 95, 94, 56, 255, 94, 96, 53, 255, 90, 91, 54, 255, 90, 88, 42, 255, 95, 89, 44, 255, 99, 88, 33, 255, 99, 84, 34, 255, 97, 81, 38, 255, 90, 76, 38, 255, 93, 76, 35, 255, 94, 75, 26, 255, 92, 73, 23, 255, 97, 76, 17, 255, 99, 72, 16, 255, 88, 68, 23, 255, 88, 67, 19, 255, 88, 65, 21, 255, 85, 65, 19, 255, 85, 64, 16, 255, 89, 59, 17, 255, 90, 58, 16, 255, 84, 57, 18, 255, 81, 54, 17, 255, 82, 53, 13, 255, 92, 54, 7, 255, 113, 58, 11, 255, 118, 54, 9, 255, 92, 53, 6, 255, 85, 49, 8, 255, 84, 49, 10, 255, 79, 45, 9, 255, 83, 48, 8, 255, 84, 47, 2, 255, 84, 44, 7, 255, 85, 43, 7, 255, 84, 41, 4, 255, 83, 44, 5, 255, 86, 43, 5, 255, 88, 40, 3, 255, 83, 41, 0, 255, 82, 40, 1, 255, 83, 39, 7, 255, 83, 38, 3, 255, 85, 39, 2, 255, 81, 35, 9, 255, 77, 36, 8, 255, 84, 36, 4, 255, 86, 35, 4, 255, 83, 35, 2, 255, 80, 35, 2, 255, 82, 36, 3, 255, 87, 36, 1, 255, 93, 37, 3, 255, 92, 36, 4, 255, 93, 38, 2, 255, 99, 38, 1, 255, 104, 38, 5, 255, 90, 33, 4, 255, 79, 32, 4, 255, 71, 33, 0, 255, 77, 31, 3, 255, 82, 31, 8, 255, 81, 26, 5, 255, 87, 26, 3, 255, 83, 30, 0, 255, 82, 27, 2, 255, 84, 28, 5, 255, 81, 31, 2, 255, 82, 32, 1, 255, 85, 34, 6, 255, 78, 29, 5, 255, 71, 26, 7, 255, 78, 29, 5, 255, 90, 32, 4, 255, 97, 35, 4, 255, 105, 32, 1, 255, 106, 34, 2, 255, 99, 33, 0, 255, 87, 28, 4, 255, 72, 27, 5, 255, 74, 22, 4, 255, 87, 28, 4, 255, 82, 32, 1, 255, 82, 29, 2, 255, 95, 34, 7, 255, 97, 33, 1, 255, 97, 29, 2, 255, 99, 31, 3, 255, 102, 28, 2, 255, 104, 31, 9, 255, 87, 24, 4, 255, 66, 23, 0, 255, 68, 25, 3, 255, 75, 26, 3, 255, 74, 26, 3, 255, 73, 24, 2, 255, 72, 23, 3, 255, 70, 22, 1, 255, 70, 21, 3, 255, 73, 24, 7, 255, 67, 21, 3, 255, 69, 26, 5, 255, 70, 25, 2, 255, 71, 24, 1, 255, 72, 26, 3, 255, 72, 23, 2, 255, 73, 22, 4, 255, 70, 26, 3, 255, 75, 23, 3, 255, 80, 22, 4, 255, 72, 23, 5, 255, 71, 22, 5, 255, 68, 21, 4, 255, 63, 22, 3, 255, 61, 21, 3, 255, 69, 21, 6, 255, 72, 24, 7, 255, 67, 24, 5, 255, 62, 19, 6, 255, 70, 24, 8, 255, 65, 19, 2, 255, 59, 17, 3, 255, 57, 21, 2, 255, 61, 23, 2, 255, 67, 23, 5, 255, 63, 19, 2, 255, 60, 19, 1, 255, 68, 23, 6, 255, 61, 20, 4, 255, 65, 22, 1, 255, 77, 25, 2, 255, 70, 22, 1, 255, 62, 19, 1, 255, 65, 17, 5, 255, 70, 18, 7, 255, 71, 21, 6, 255, 70, 21, 2, 255, 71, 22, 3, 255, 76, 20, 3, 255, 74, 20, 5, 255, 72, 23, 5, 255, 78, 22, 6, 255, 76, 23, 2, 255, 77, 21, 2, 255, 80, 23, 3, 255, 72, 22, 1, 255, 65, 22, 2, 255, 69, 22, 2, 255, 77, 24, 3, 255, 74, 23, 1, 255, 67, 18, 1, 255, 65, 14, 1, 255, 69, 19, 4, 255, 69, 23, 4, 255, 63, 21, 1, 255, 70, 17, 4, 255, 72, 17, 3, 255, 71, 18, 3, 255, 64, 17, 3, 255, 65, 19, 6, 255, 66, 16, 2, 255, 69, 17, 5, 255, 65, 16, 3, 255, 61, 18, 1, 255, 64, 16, 1, 255, 67, 14, 1, 255, 64, 15, 1, 255, 61, 18, 2, 255, 58, 16, 2, 255, 56, 14, 0, 255, 55, 15, 2, 255, 48, 17, 5, 255, 43, 13, 2, 255, 43, 15, 4, 255, 40, 11, 2, 255, 45, 11, 2, 255, 48, 14, 4, 255, 40, 11, 2, 255, 37, 12, 5, 255, 38, 10, 5, 255, 39, 12, 3, 255, 41, 13, 2, 255, 47, 12, 5, 255, 41, 11, 1, 255, 32, 10, 4, 255, 27, 8, 6, 255, 36, 13, 7, 255, 27, 10, 3, 255, 26, 8, 6, 255, 25, 7, 5, 255, 31, 11, 5, 255, 34, 12, 4, 255, 31, 12, 6, 255, 26, 8, 3, 255, 23, 7, 3, 255, 18, 9, 3, 255, 16, 7, 2, 255, 27, 7, 2, 255, 50, 13, 2, 255, 69, 17, 3, 255, 87, 21, 5, 255, 91, 24, 2, 255, 90, 23, 0, 255, 10, 3, 1, 255, 11, 5, 3, 255, 10, 5, 2, 255, 9, 4, 1, 255, 12, 5, 3, 255, 9, 3, 0, 255, 9, 4, 1, 255, 9, 6, 2, 255, 10, 6, 3, 255, 10, 5, 1, 255, 9, 6, 1, 255, 9, 7, 2, 255, 11, 8, 3, 255, 15, 7, 4, 255, 14, 4, 2, 255, 15, 4, 2, 255, 17, 8, 3, 255, 17, 9, 3, 255, 15, 10, 4, 255, 12, 7, 1, 255, 12, 6, 1, 255, 17, 11, 3, 255, 19, 11, 3, 255, 16, 6, 0, 255, 22, 14, 4, 255, 21, 12, 3, 255, 23, 11, 4, 255, 25, 12, 2, 255, 34, 14, 3, 255, 31, 13, 1, 255, 29, 14, 1, 255, 34, 13, 2, 255, 33, 14, 1, 255, 32, 14, 3, 255, 30, 14, 4, 255, 27, 14, 1, 255, 26, 13, 0, 255, 28, 14, 4, 255, 29, 13, 6, 255, 29, 14, 7, 255, 24, 11, 3, 255, 23, 14, 5, 255, 23, 15, 3, 255, 32, 17, 2, 255, 37, 19, 3, 255, 35, 21, 6, 255, 27, 16, 3, 255, 29, 18, 3, 255, 35, 16, 1, 255, 39, 18, 3, 255, 32, 14, 5, 255, 33, 15, 4, 255, 34, 17, 2, 255, 34, 17, 1, 255, 33, 19, 3, 255, 34, 19, 4, 255, 38, 19, 3, 255, 41, 21, 3, 255, 38, 20, 2, 255, 38, 22, 2, 255, 42, 19, 4, 255, 42, 16, 5, 255, 41, 17, 3, 255, 37, 21, 5, 255, 34, 21, 7, 255, 41, 21, 4, 255, 46, 21, 2, 255, 41, 21, 1, 255, 43, 26, 4, 255, 48, 26, 3, 255, 53, 27, 2, 255, 50, 29, 2, 255, 45, 24, 2, 255, 48, 24, 4, 255, 42, 22, 4, 255, 41, 21, 3, 255, 48, 23, 4, 255, 53, 28, 0, 255, 52, 27, 3, 255, 51, 30, 3, 255, 42, 27, 6, 255, 44, 28, 16, 255, 47, 26, 7, 255, 47, 26, 3, 255, 46, 23, 4, 255, 46, 22, 3, 255, 48, 24, 1, 255, 50, 21, 2, 255, 50, 27, 6, 255, 53, 26, 5, 255, 44, 28, 1, 255, 46, 31, 3, 255, 54, 28, 5, 255, 53, 29, 5, 255, 58, 28, 4, 255, 58, 27, 3, 255, 50, 29, 5, 255, 50, 25, 3, 255, 53, 27, 5, 255, 54, 28, 3, 255, 54, 26, 2, 255, 57, 24, 4, 255, 56, 27, 5, 255, 58, 25, 4, 255, 55, 25, 3, 255, 51, 30, 4, 255, 51, 30, 5, 255, 53, 27, 4, 255, 54, 27, 4, 255, 60, 26, 3, 255, 56, 28, 7, 255, 51, 25, 5, 255, 50, 23, 3, 255, 55, 31, 11, 255, 46, 28, 16, 255, 53, 28, 8, 255, 54, 28, 1, 255, 56, 29, 1, 255, 57, 27, 3, 255, 62, 29, 9, 255, 63, 32, 6, 255, 61, 28, 4, 255, 57, 28, 6, 255, 59, 27, 3, 255, 51, 29, 1, 255, 51, 28, 5, 255, 65, 31, 1, 255, 64, 31, 6, 255, 68, 34, 4, 255, 66, 35, 3, 255, 59, 33, 1, 255, 55, 35, 6, 255, 55, 34, 7, 255, 64, 38, 7, 255, 68, 36, 6, 255, 64, 35, 10, 255, 62, 41, 13, 255, 63, 46, 7, 255, 66, 49, 4, 255, 71, 49, 10, 255, 65, 44, 15, 255, 61, 50, 19, 255, 70, 53, 17, 255, 70, 53, 11, 255, 71, 54, 13, 255, 71, 58, 21, 255, 66, 57, 21, 255, 64, 60, 29, 255, 67, 63, 17, 255, 69, 61, 35, 255, 66, 65, 30, 255, 64, 68, 24, 255, 73, 67, 43, 255, 75, 71, 31, 255, 71, 70, 31, 255, 68, 68, 40, 255, 72, 74, 39, 255, 73, 73, 40, 255, 71, 75, 49, 255, 70, 80, 45, 255, 76, 81, 53, 255, 77, 81, 55, 255, 78, 83, 57, 255, 78, 86, 58, 255, 79, 89, 58, 255, 82, 94, 60, 255, 91, 101, 61, 255, 88, 97, 59, 255, 87, 98, 70, 255, 90, 101, 74, 255, 89, 102, 77, 255, 91, 104, 80, 255, 92, 107, 69, 255, 92, 111, 76, 255, 87, 112, 77, 255, 90, 117, 84, 255, 95, 117, 86, 255, 99, 116, 85, 255, 100, 117, 84, 255, 101, 114, 92, 255, 101, 118, 87, 255, 96, 118, 79, 255, 101, 121, 79, 255, 102, 123, 81, 255, 96, 118, 79, 255, 96, 119, 77, 255, 99, 116, 75, 255, 98, 114, 70, 255, 101, 117, 73, 255, 95, 113, 68, 255, 95, 113, 68, 255, 93, 108, 65, 255, 93, 105, 64, 255, 98, 105, 60, 255, 94, 103, 55, 255, 92, 100, 58, 255, 97, 98, 54, 255, 91, 93, 52, 255, 93, 96, 45, 255, 93, 93, 46, 255, 90, 90, 37, 255, 89, 88, 37, 255, 91, 86, 40, 255, 90, 83, 37, 255, 87, 82, 24, 255, 88, 79, 25, 255, 88, 75, 31, 255, 89, 74, 27, 255, 91, 75, 18, 255, 94, 74, 20, 255, 94, 71, 12, 255, 91, 71, 19, 255, 87, 70, 12, 255, 86, 64, 19, 255, 87, 62, 24, 255, 87, 61, 14, 255, 84, 60, 15, 255, 85, 59, 12, 255, 84, 56, 7, 255, 83, 56, 12, 255, 82, 53, 12, 255, 96, 59, 15, 255, 112, 61, 12, 255, 115, 58, 0, 255, 89, 52, 7, 255, 84, 51, 15, 255, 81, 50, 7, 255, 80, 46, 8, 255, 78, 42, 7, 255, 80, 47, 3, 255, 83, 46, 6, 255, 86, 41, 5, 255, 85, 43, 4, 255, 80, 41, 2, 255, 87, 42, 6, 255, 83, 39, 3, 255, 84, 41, 2, 255, 85, 35, 4, 255, 82, 39, 10, 255, 79, 39, 4, 255, 84, 43, 1, 255, 81, 35, 8, 255, 80, 37, 7, 255, 80, 39, 4, 255, 78, 35, 1, 255, 82, 37, 3, 255, 80, 36, 4, 255, 81, 36, 4, 255, 91, 39, 4, 255, 97, 37, 0, 255, 101, 40, 4, 255, 96, 37, 5, 255, 90, 35, 3, 255, 86, 31, 2, 255, 88, 32, 2, 255, 93, 33, 2, 255, 92, 32, 8, 255, 78, 32, 4, 255, 73, 30, 3, 255, 75, 27, 3, 255, 83, 32, 7, 255, 80, 32, 1, 255, 87, 33, 0, 255, 96, 35, 1, 255, 96, 34, 2, 255, 91, 34, 2, 255, 81, 31, 1, 255, 75, 29, 2, 255, 77, 30, 4, 255, 77, 31, 2, 255, 73, 30, 2, 255, 84, 30, 5, 255, 80, 26, 1, 255, 84, 29, 2, 255, 85, 29, 3, 255, 79, 26, 4, 255, 78, 24, 1, 255, 73, 25, 2, 255, 84, 27, 6, 255, 97, 30, 3, 255, 102, 35, 3, 255, 99, 29, 1, 255, 101, 33, 4, 255, 100, 35, 6, 255, 100, 33, 5, 255, 97, 30, 4, 255, 88, 28, 4, 255, 76, 28, 2, 255, 67, 26, 5, 255, 69, 28, 5, 255, 75, 25, 4, 255, 74, 26, 4, 255, 73, 24, 3, 255, 72, 23, 5, 255, 65, 23, 4, 255, 70, 27, 6, 255, 68, 25, 2, 255, 67, 25, 1, 255, 67, 25, 1, 255, 68, 24, 2, 255, 67, 22, 4, 255, 68, 25, 2, 255, 69, 23, 0, 255, 67, 22, 2, 255, 66, 21, 6, 255, 60, 19, 5, 255, 64, 20, 2, 255, 67, 22, 2, 255, 68, 21, 3, 255, 70, 22, 3, 255, 70, 25, 5, 255, 69, 23, 5, 255, 70, 20, 3, 255, 66, 18, 3, 255, 57, 19, 2, 255, 58, 21, 3, 255, 61, 21, 4, 255, 64, 20, 2, 255, 68, 25, 5, 255, 58, 20, 3, 255, 64, 20, 2, 255, 65, 21, 5, 255, 63, 18, 3, 255, 66, 18, 3, 255, 63, 24, 6, 255, 58, 22, 5, 255, 62, 20, 4, 255, 67, 28, 5, 255, 67, 25, 4, 255, 67, 17, 2, 255, 65, 17, 4, 255, 69, 21, 4, 255, 75, 25, 5, 255, 70, 24, 2, 255, 77, 25, 3, 255, 75, 23, 2, 255, 72, 21, 2, 255, 73, 23, 4, 255, 75, 27, 3, 255, 75, 24, 0, 255, 77, 28, 3, 255, 75, 28, 4, 255, 70, 21, 1, 255, 70, 18, 2, 255, 72, 21, 3, 255, 74, 23, 3, 255, 71, 20, 1, 255, 65, 18, 3, 255, 65, 17, 4, 255, 67, 17, 3, 255, 66, 17, 3, 255, 65, 18, 4, 255, 69, 18, 5, 255, 66, 13, 0, 255, 70, 18, 4, 255, 65, 19, 3, 255, 67, 19, 4, 255, 73, 17, 2, 255, 72, 20, 1, 255, 63, 19, 3, 255, 58, 16, 3, 255, 64, 18, 3, 255, 70, 18, 1, 255, 63, 15, 0, 255, 55, 13, 1, 255, 54, 16, 4, 255, 56, 16, 2, 255, 58, 12, 2, 255, 53, 15, 5, 255, 55, 15, 6, 255, 51, 15, 1, 255, 50, 13, 2, 255, 58, 14, 5, 255, 59, 15, 6, 255, 47, 10, 4, 255, 39, 10, 5, 255, 38, 9, 5, 255, 44, 13, 6, 255, 38, 9, 1, 255, 36, 11, 3, 255, 32, 12, 1, 255, 30, 9, 3, 255, 31, 7, 5, 255, 39, 12, 4, 255, 37, 11, 4, 255, 28, 8, 1, 255, 24, 8, 1, 255, 29, 10, 4, 255, 32, 8, 4, 255, 33, 10, 3, 255, 30, 10, 2, 255, 27, 8, 0, 255, 26, 9, 2, 255, 23, 9, 5, 255, 22, 8, 5, 255, 27, 7, 4, 255, 33, 6, 0, 255, 50, 13, 2, 255, 74, 16, 1, 255, 89, 15, 1, 255, 7, 3, 2, 255, 6, 2, 1, 255, 8, 4, 1, 255, 9, 5, 2, 255, 11, 4, 1, 255, 11, 2, 0, 255, 13, 4, 2, 255, 13, 4, 2, 255, 14, 7, 4, 255, 15, 7, 4, 255, 13, 6, 3, 255, 13, 6, 4, 255, 15, 6, 3, 255, 16, 7, 3, 255, 16, 8, 2, 255, 13, 6, 1, 255, 16, 9, 3, 255, 16, 9, 3, 255, 15, 8, 2, 255, 14, 7, 2, 255, 16, 11, 4, 255, 20, 13, 4, 255, 18, 9, 1, 255, 17, 8, 1, 255, 19, 10, 2, 255, 24, 13, 6, 255, 22, 11, 2, 255, 24, 11, 3, 255, 27, 13, 3, 255, 25, 12, 1, 255, 26, 15, 3, 255, 30, 18, 6, 255, 25, 12, 1, 255, 28, 14, 4, 255, 26, 13, 3, 255, 23, 13, 2, 255, 25, 15, 3, 255, 30, 15, 4, 255, 31, 13, 2, 255, 32, 14, 5, 255, 30, 14, 7, 255, 25, 13, 3, 255, 26, 15, 2, 255, 35, 18, 7, 255, 34, 15, 6, 255, 30, 20, 3, 255, 23, 19, 4, 255, 28, 17, 3, 255, 36, 18, 4, 255, 31, 15, 1, 255, 30, 15, 1, 255, 31, 16, 6, 255, 27, 21, 4, 255, 30, 20, 1, 255, 44, 21, 5, 255, 45, 21, 6, 255, 33, 18, 1, 255, 33, 20, 3, 255, 36, 19, 4, 255, 32, 18, 1, 255, 40, 23, 4, 255, 47, 21, 3, 255, 38, 19, 1, 255, 36, 18, 4, 255, 42, 23, 6, 255, 41, 20, 5, 255, 36, 24, 8, 255, 33, 20, 2, 255, 51, 27, 5, 255, 47, 26, 5, 255, 41, 22, 4, 255, 45, 27, 3, 255, 39, 24, 6, 255, 45, 24, 6, 255, 47, 24, 3, 255, 43, 24, 5, 255, 49, 23, 2, 255, 46, 24, 2, 255, 49, 23, 3, 255, 55, 29, 4, 255, 51, 32, 14, 255, 46, 29, 10, 255, 46, 26, 5, 255, 46, 28, 3, 255, 50, 26, 4, 255, 48, 21, 1, 255, 49, 24, 2, 255, 50, 28, 5, 255, 48, 27, 1, 255, 54, 27, 3, 255, 50, 29, 4, 255, 48, 31, 1, 255, 50, 38, 7, 255, 50, 40, 12, 255, 53, 29, 7, 255, 57, 31, 5, 255, 50, 29, 1, 255, 52, 28, 0, 255, 53, 28, 4, 255, 52, 27, 4, 255, 47, 24, 2, 255, 53, 26, 4, 255, 51, 23, 4, 255, 61, 29, 7, 255, 57, 24, 2, 255, 53, 29, 4, 255, 54, 32, 3, 255, 53, 25, 2, 255, 57, 27, 5, 255, 59, 29, 4, 255, 58, 31, 1, 255, 45, 24, 8, 255, 44, 28, 15, 255, 45, 29, 46, 255, 43, 30, 46, 255, 42, 26, 5, 255, 50, 28, 4, 255, 55, 26, 2, 255, 56, 27, 2, 255, 56, 30, 3, 255, 57, 31, 0, 255, 56, 32, 3, 255, 53, 30, 3, 255, 59, 29, 2, 255, 59, 27, 3, 255, 58, 28, 3, 255, 58, 29, 3, 255, 60, 30, 1, 255, 64, 29, 1, 255, 66, 35, 5, 255, 57, 31, 6, 255, 60, 33, 7, 255, 60, 31, 10, 255, 51, 35, 7, 255, 56, 37, 12, 255, 65, 36, 4, 255, 63, 38, 5, 255, 67, 45, 6, 255, 67, 47, 4, 255, 57, 45, 8, 255, 65, 51, 13, 255, 65, 48, 14, 255, 63, 50, 24, 255, 69, 49, 27, 255, 65, 53, 18, 255, 56, 57, 20, 255, 71, 57, 22, 255, 69, 62, 21, 255, 68, 59, 36, 255, 64, 64, 24, 255, 66, 65, 39, 255, 66, 65, 34, 255, 71, 69, 33, 255, 72, 68, 34, 255, 74, 70, 37, 255, 72, 67, 41, 255, 71, 74, 31, 255, 71, 80, 43, 255, 69, 77, 45, 255, 76, 82, 46, 255, 75, 79, 54, 255, 74, 79, 56, 255, 76, 84, 63, 255, 79, 88, 67, 255, 79, 90, 59, 255, 84, 95, 62, 255, 83, 96, 71, 255, 83, 95, 70, 255, 85, 99, 67, 255, 87, 104, 73, 255, 89, 104, 82, 255, 90, 106, 78, 255, 96, 113, 72, 255, 97, 112, 79, 255, 93, 112, 82, 255, 97, 117, 88, 255, 100, 116, 86, 255, 104, 119, 87, 255, 104, 118, 86, 255, 100, 121, 81, 255, 99, 121, 80, 255, 97, 118, 81, 255, 100, 120, 85, 255, 102, 120, 84, 255, 99, 118, 82, 255, 98, 118, 81, 255, 99, 117, 75, 255, 97, 114, 71, 255, 97, 114, 73, 255, 95, 114, 69, 255, 93, 109, 70, 255, 89, 105, 66, 255, 88, 107, 66, 255, 92, 106, 58, 255, 93, 99, 64, 255, 94, 95, 58, 255, 97, 98, 51, 255, 93, 95, 47, 255, 92, 95, 39, 255, 93, 88, 45, 255, 95, 86, 37, 255, 96, 90, 41, 255, 86, 82, 46, 255, 86, 81, 34, 255, 89, 82, 27, 255, 93, 78, 35, 255, 93, 77, 22, 255, 90, 77, 19, 255, 93, 71, 24, 255, 90, 65, 32, 255, 93, 66, 22, 255, 90, 69, 13, 255, 89, 71, 17, 255, 89, 66, 16, 255, 89, 60, 14, 255, 88, 57, 24, 255, 80, 57, 17, 255, 83, 61, 4, 255, 89, 58, 12, 255, 86, 54, 6, 255, 83, 53, 5, 255, 81, 55, 12, 255, 84, 54, 10, 255, 86, 49, 9, 255, 81, 44, 8, 255, 82, 49, 7, 255, 78, 47, 3, 255, 82, 50, 3, 255, 80, 44, 6, 255, 77, 45, 5, 255, 81, 47, 8, 255, 82, 41, 2, 255, 86, 41, 1, 255, 81, 39, 1, 255, 82, 36, 7, 255, 83, 38, 11, 255, 80, 41, 8, 255, 83, 42, 3, 255, 82, 41, 5, 255, 79, 37, 0, 255, 80, 38, 1, 255, 79, 37, 2, 255, 80, 40, 1, 255, 79, 33, 7, 255, 90, 37, 3, 255, 96, 43, 1, 255, 96, 41, 4, 255, 102, 38, 5, 255, 103, 35, 2, 255, 107, 36, 5, 255, 110, 37, 7, 255, 102, 37, 4, 255, 96, 40, 5, 255, 86, 34, 1, 255, 93, 37, 4, 255, 104, 41, 7, 255, 102, 36, 7, 255, 76, 29, 2, 255, 75, 26, 1, 255, 80, 29, 3, 255, 72, 32, 4, 255, 84, 35, 4, 255, 96, 33, 1, 255, 103, 39, 3, 255, 105, 35, 3, 255, 96, 32, 5, 255, 76, 30, 3, 255, 71, 29, 0, 255, 83, 33, 3, 255, 83, 32, 2, 255, 76, 27, 4, 255, 72, 27, 6, 255, 72, 28, 5, 255, 71, 28, 4, 255, 75, 30, 3, 255, 74, 28, 2, 255, 74, 25, 1, 255, 73, 27, 3, 255, 73, 26, 5, 255, 74, 24, 2, 255, 82, 27, 3, 255, 91, 29, 4, 255, 94, 27, 3, 255, 94, 28, 6, 255, 85, 30, 5, 255, 76, 26, 2, 255, 72, 25, 1, 255, 65, 27, 2, 255, 66, 25, 2, 255, 67, 25, 3, 255, 71, 28, 5, 255, 66, 24, 2, 255, 66, 25, 3, 255, 70, 25, 3, 255, 64, 24, 5, 255, 64, 22, 5, 255, 73, 25, 4, 255, 74, 30, 4, 255, 71, 26, 3, 255, 62, 27, 7, 255, 58, 19, 3, 255, 63, 19, 2, 255, 69, 26, 8, 255, 65, 22, 5, 255, 61, 19, 4, 255, 61, 22, 6, 255, 61, 20, 1, 255, 63, 25, 2, 255, 65, 21, 1, 255, 70, 23, 4, 255, 70, 24, 5, 255, 70, 24, 6, 255, 69, 20, 3, 255, 73, 22, 4, 255, 66, 22, 7, 255, 57, 20, 2, 255, 61, 21, 1, 255, 63, 21, 1, 255, 64, 23, 3, 255, 67, 23, 2, 255, 63, 19, 3, 255, 59, 20, 3, 255, 66, 20, 4, 255, 58, 20, 4, 255, 51, 22, 2, 255, 60, 23, 1, 255, 64, 21, 4, 255, 67, 19, 4, 255, 65, 19, 3, 255, 60, 18, 2, 255, 62, 17, 0, 255, 69, 22, 2, 255, 65, 23, 1, 255, 70, 20, 5, 255, 80, 24, 9, 255, 80, 25, 4, 255, 68, 23, 0, 255, 72, 25, 3, 255, 80, 24, 4, 255, 71, 21, 0, 255, 70, 23, 0, 255, 71, 24, 1, 255, 71, 22, 2, 255, 74, 20, 4, 255, 73, 19, 4, 255, 70, 18, 2, 255, 71, 22, 1, 255, 81, 21, 5, 255, 64, 19, 1, 255, 61, 20, 1, 255, 66, 20, 5, 255, 68, 18, 4, 255, 69, 18, 5, 255, 67, 19, 5, 255, 67, 20, 3, 255, 70, 21, 2, 255, 64, 14, 1, 255, 66, 18, 3, 255, 61, 18, 2, 255, 62, 18, 3, 255, 68, 17, 5, 255, 68, 17, 3, 255, 70, 21, 5, 255, 70, 22, 6, 255, 62, 13, 2, 255, 59, 14, 6, 255, 60, 13, 3, 255, 58, 14, 0, 255, 51, 17, 1, 255, 52, 18, 4, 255, 54, 13, 3, 255, 48, 13, 2, 255, 53, 16, 5, 255, 55, 14, 4, 255, 51, 14, 5, 255, 40, 11, 2, 255, 40, 10, 3, 255, 42, 9, 4, 255, 35, 8, 3, 255, 32, 9, 0, 255, 37, 13, 1, 255, 34, 11, 3, 255, 31, 8, 1, 255, 43, 10, 2, 255, 39, 7, 3, 255, 34, 6, 0, 255, 37, 11, 1, 255, 34, 8, 3, 255, 28, 10, 4, 255, 28, 9, 2, 255, 26, 6, 1, 255, 28, 9, 4, 255, 28, 6, 2, 255, 31, 11, 4, 255, 28, 13, 3, 255, 20, 6, 1, 255, 20, 6, 5, 255, 28, 7, 2, 255, 48, 9, 0, 255, 63, 14, 2, 255, 8, 4, 3, 255, 7, 3, 1, 255, 9, 5, 2, 255, 10, 5, 2, 255, 9, 4, 1, 255, 10, 4, 0, 255, 14, 4, 2, 255, 14, 4, 2, 255, 15, 7, 4, 255, 15, 7, 4, 255, 15, 7, 4, 255, 15, 7, 4, 255, 15, 6, 3, 255, 11, 7, 3, 255, 11, 7, 1, 255, 16, 11, 4, 255, 15, 8, 2, 255, 15, 7, 3, 255, 16, 9, 3, 255, 15, 8, 2, 255, 17, 10, 4, 255, 14, 8, 0, 255, 19, 10, 2, 255, 22, 14, 4, 255, 20, 10, 2, 255, 20, 8, 2, 255, 26, 13, 3, 255, 24, 12, 3, 255, 25, 12, 3, 255, 26, 12, 4, 255, 26, 12, 4, 255, 22, 11, 2, 255, 22, 14, 3, 255, 24, 14, 4, 255, 23, 13, 3, 255, 20, 11, 1, 255, 22, 12, 2, 255, 31, 14, 6, 255, 31, 14, 4, 255, 31, 14, 5, 255, 29, 12, 5, 255, 27, 14, 3, 255, 29, 17, 3, 255, 30, 17, 5, 255, 33, 15, 5, 255, 39, 20, 5, 255, 28, 16, 2, 255, 33, 17, 5, 255, 35, 14, 1, 255, 36, 20, 4, 255, 38, 23, 9, 255, 32, 15, 3, 255, 31, 20, 3, 255, 35, 24, 3, 255, 36, 19, 1, 255, 39, 20, 2, 255, 39, 21, 4, 255, 31, 17, 1, 255, 34, 19, 5, 255, 40, 22, 4, 255, 38, 19, 0, 255, 39, 15, 2, 255, 39, 21, 6, 255, 42, 21, 3, 255, 46, 21, 0, 255, 51, 20, 3, 255, 41, 20, 5, 255, 42, 26, 6, 255, 52, 27, 3, 255, 44, 22, 3, 255, 40, 24, 6, 255, 46, 24, 2, 255, 39, 22, 2, 255, 44, 27, 6, 255, 47, 23, 2, 255, 43, 21, 4, 255, 46, 22, 3, 255, 41, 21, 1, 255, 46, 23, 6, 255, 44, 16, 3, 255, 43, 23, 6, 255, 46, 22, 5, 255, 47, 24, 3, 255, 43, 22, 2, 255, 49, 27, 6, 255, 44, 28, 5, 255, 44, 20, 0, 255, 51, 25, 7, 255, 43, 27, 3, 255, 53, 31, 7, 255, 58, 30, 7, 255, 60, 32, 6, 255, 63, 37, 13, 255, 55, 39, 13, 255, 53, 28, 5, 255, 56, 28, 4, 255, 44, 28, 1, 255, 47, 28, 3, 255, 55, 29, 6, 255, 51, 24, 1, 255, 44, 24, 2, 255, 52, 31, 3, 255, 52, 29, 0, 255, 54, 30, 4, 255, 49, 24, 2, 255, 53, 27, 6, 255, 55, 28, 5, 255, 59, 32, 5, 255, 59, 33, 11, 255, 63, 32, 9, 255, 57, 32, 3, 255, 41, 29, 26, 255, 51, 33, 48, 255, 49, 34, 59, 255, 44, 27, 18, 255, 55, 29, 0, 255, 57, 29, 2, 255, 55, 29, 2, 255, 53, 33, 5, 255, 48, 29, 2, 255, 50, 28, 4, 255, 57, 31, 8, 255, 59, 30, 3, 255, 60, 31, 5, 255, 56, 30, 4, 255, 59, 36, 4, 255, 63, 36, 9, 255, 64, 33, 3, 255, 65, 32, 10, 255, 54, 32, 3, 255, 54, 31, 13, 255, 59, 33, 3, 255, 59, 33, 8, 255, 61, 36, 13, 255, 59, 38, 7, 255, 57, 34, 9, 255, 62, 41, 12, 255, 57, 35, 13, 255, 65, 44, 11, 255, 65, 46, 15, 255, 71, 53, 11, 255, 61, 46, 10, 255, 64, 49, 14, 255, 70, 58, 7, 255, 64, 54, 22, 255, 64, 56, 26, 255, 72, 57, 13, 255, 72, 63, 20, 255, 67, 65, 30, 255, 65, 62, 24, 255, 66, 64, 35, 255, 68, 69, 41, 255, 72, 71, 32, 255, 71, 69, 40, 255, 75, 69, 42, 255, 73, 68, 42, 255, 73, 76, 38, 255, 72, 80, 35, 255, 73, 80, 43, 255, 77, 80, 55, 255, 79, 84, 57, 255, 76, 83, 58, 255, 78, 88, 63, 255, 79, 90, 60, 255, 80, 92, 60, 255, 83, 96, 64, 255, 82, 96, 68, 255, 86, 101, 70, 255, 89, 105, 70, 255, 90, 106, 81, 255, 90, 106, 82, 255, 93, 110, 79, 255, 100, 115, 82, 255, 96, 114, 84, 255, 98, 119, 84, 255, 100, 119, 85, 255, 101, 118, 86, 255, 105, 122, 89, 255, 101, 121, 83, 255, 101, 124, 86, 255, 99, 123, 88, 255, 94, 119, 83, 255, 96, 120, 82, 255, 99, 122, 83, 255, 98, 121, 81, 255, 98, 118, 82, 255, 102, 117, 80, 255, 96, 115, 74, 255, 93, 113, 73, 255, 97, 115, 70, 255, 91, 107, 69, 255, 92, 107, 68, 255, 90, 106, 70, 255, 88, 102, 63, 255, 93, 100, 58, 255, 95, 97, 56, 255, 93, 95, 53, 255, 90, 93, 46, 255, 85, 92, 47, 255, 86, 93, 43, 255, 89, 92, 34, 255, 90, 87, 33, 255, 92, 81, 38, 255, 95, 82, 32, 255, 91, 78, 20, 255, 89, 75, 33, 255, 89, 74, 22, 255, 88, 75, 17, 255, 93, 70, 26, 255, 89, 71, 14, 255, 90, 70, 14, 255, 90, 69, 12, 255, 86, 65, 13, 255, 88, 62, 19, 255, 88, 57, 13, 255, 90, 58, 13, 255, 84, 54, 12, 255, 86, 54, 9, 255, 90, 55, 11, 255, 82, 54, 5, 255, 85, 57, 12, 255, 79, 49, 14, 255, 81, 49, 12, 255, 83, 50, 7, 255, 74, 45, 13, 255, 79, 46, 12, 255, 81, 46, 13, 255, 80, 50, 5, 255, 78, 45, 8, 255, 86, 43, 6, 255, 85, 44, 5, 255, 78, 41, 5, 255, 81, 40, 5, 255, 86, 39, 6, 255, 82, 37, 4, 255, 77, 36, 4, 255, 77, 36, 7, 255, 80, 40, 8, 255, 82, 40, 5, 255, 82, 39, 4, 255, 81, 38, 4, 255, 78, 33, 5, 255, 76, 34, 9, 255, 78, 34, 2, 255, 87, 36, 4, 255, 102, 40, 7, 255, 113, 42, 3, 255, 112, 39, 2, 255, 108, 36, 3, 255, 107, 36, 3, 255, 105, 35, 1, 255, 110, 39, 0, 255, 109, 42, 2, 255, 102, 41, 4, 255, 95, 39, 3, 255, 88, 33, 0, 255, 83, 31, 0, 255, 78, 35, 1, 255, 88, 35, 7, 255, 87, 29, 7, 255, 73, 27, 1, 255, 80, 32, 1, 255, 98, 36, 2, 255, 95, 33, 2, 255, 86, 29, 3, 255, 82, 28, 2, 255, 77, 30, 1, 255, 77, 31, 3, 255, 81, 31, 8, 255, 79, 30, 3, 255, 71, 26, 1, 255, 73, 28, 5, 255, 73, 28, 5, 255, 74, 26, 1, 255, 76, 28, 2, 255, 73, 29, 4, 255, 72, 27, 2, 255, 72, 26, 3, 255, 68, 23, 1, 255, 72, 27, 4, 255, 71, 24, 1, 255, 76, 25, 1, 255, 63, 22, 1, 255, 61, 21, 4, 255, 76, 21, 3, 255, 67, 24, 3, 255, 66, 23, 7, 255, 74, 23, 4, 255, 76, 24, 4, 255, 74, 21, 3, 255, 78, 24, 3, 255, 79, 27, 3, 255, 78, 25, 1, 255, 80, 27, 2, 255, 89, 33, 5, 255, 88, 26, 1, 255, 95, 27, 2, 255, 94, 31, 5, 255, 82, 22, 1, 255, 61, 23, 3, 255, 60, 20, 4, 255, 69, 24, 3, 255, 67, 24, 3, 255, 64, 23, 3, 255, 59, 21, 2, 255, 59, 22, 1, 255, 65, 26, 0, 255, 62, 19, 1, 255, 64, 18, 2, 255, 71, 22, 5, 255, 71, 23, 5, 255, 64, 25, 4, 255, 57, 21, 1, 255, 67, 23, 2, 255, 74, 25, 4, 255, 66, 20, 2, 255, 69, 21, 2, 255, 68, 25, 7, 255, 56, 22, 9, 255, 54, 21, 3, 255, 55, 21, 1, 255, 56, 20, 0, 255, 75, 23, 4, 255, 68, 23, 3, 255, 55, 18, 0, 255, 59, 22, 4, 255, 60, 23, 3, 255, 61, 23, 3, 255, 60, 22, 3, 255, 60, 21, 4, 255, 56, 19, 1, 255, 60, 24, 7, 255, 57, 18, 0, 255, 72, 19, 3, 255, 71, 20, 5, 255, 78, 26, 6, 255, 74, 24, 0, 255, 71, 23, 2, 255, 75, 24, 3, 255, 76, 23, 2, 255, 77, 24, 3, 255, 75, 23, 1, 255, 69, 20, 1, 255, 66, 18, 0, 255, 69, 20, 3, 255, 69, 19, 3, 255, 72, 18, 2, 255, 71, 18, 3, 255, 66, 18, 3, 255, 66, 19, 3, 255, 70, 21, 5, 255, 69, 21, 4, 255, 68, 18, 1, 255, 69, 17, 3, 255, 67, 18, 4, 255, 66, 20, 5, 255, 66, 19, 3, 255, 75, 18, 3, 255, 71, 17, 3, 255, 65, 13, 2, 255, 75, 19, 6, 255, 72, 16, 3, 255, 65, 13, 0, 255, 71, 18, 4, 255, 63, 13, 0, 255, 56, 16, 4, 255, 64, 16, 3, 255, 67, 18, 5, 255, 56, 14, 0, 255, 53, 18, 3, 255, 50, 16, 4, 255, 52, 15, 3, 255, 47, 16, 3, 255, 47, 14, 2, 255, 50, 12, 4, 255, 39, 10, 1, 255, 40, 11, 2, 255, 45, 11, 5, 255, 39, 10, 3, 255, 43, 12, 3, 255, 36, 11, 2, 255, 31, 12, 5, 255, 33, 10, 4, 255, 36, 9, 3, 255, 33, 8, 4, 255, 33, 9, 3, 255, 40, 12, 5, 255, 34, 7, 2, 255, 26, 7, 2, 255, 32, 13, 5, 255, 30, 9, 3, 255, 30, 10, 4, 255, 29, 9, 1, 255, 28, 11, 2, 255, 26, 9, 3, 255, 24, 6, 2, 255, 22, 6, 2, 255, 27, 9, 5, 255, 43, 11, 2, 255, 49, 10, 0, 255, 6, 1, 0, 255, 8, 3, 0, 255, 9, 4, 1, 255, 10, 5, 2, 255, 10, 5, 2, 255, 12, 6, 3, 255, 14, 5, 2, 255, 13, 5, 1, 255, 13, 5, 2, 255, 13, 6, 2, 255, 14, 7, 3, 255, 14, 6, 3, 255, 13, 5, 2, 255, 13, 7, 4, 255, 14, 9, 3, 255, 16, 9, 3, 255, 16, 7, 4, 255, 14, 6, 4, 255, 15, 7, 4, 255, 16, 10, 4, 255, 16, 10, 3, 255, 17, 10, 2, 255, 20, 11, 3, 255, 22, 13, 4, 255, 20, 9, 2, 255, 21, 10, 2, 255, 21, 11, 1, 255, 21, 11, 1, 255, 24, 13, 4, 255, 25, 13, 5, 255, 26, 10, 5, 255, 26, 9, 5, 255, 22, 12, 2, 255, 23, 13, 3, 255, 25, 17, 6, 255, 20, 12, 1, 255, 25, 12, 3, 255, 29, 11, 4, 255, 27, 12, 3, 255, 26, 14, 5, 255, 31, 15, 7, 255, 27, 14, 1, 255, 29, 18, 3, 255, 27, 16, 2, 255, 25, 12, 0, 255, 37, 18, 2, 255, 30, 18, 2, 255, 33, 18, 5, 255, 35, 18, 4, 255, 29, 17, 1, 255, 31, 19, 4, 255, 31, 21, 4, 255, 30, 13, 0, 255, 38, 18, 4, 255, 39, 21, 6, 255, 35, 16, 3, 255, 34, 18, 3, 255, 36, 19, 3, 255, 40, 20, 5, 255, 36, 20, 3, 255, 37, 20, 3, 255, 43, 18, 4, 255, 41, 19, 4, 255, 39, 20, 3, 255, 44, 23, 3, 255, 46, 23, 3, 255, 43, 25, 6, 255, 43, 23, 3, 255, 49, 24, 2, 255, 42, 26, 6, 255, 34, 21, 2, 255, 45, 22, 1, 255, 41, 21, 1, 255, 41, 24, 3, 255, 49, 23, 5, 255, 45, 20, 4, 255, 43, 22, 2, 255, 44, 25, 4, 255, 46, 25, 6, 255, 51, 26, 6, 255, 43, 23, 4, 255, 45, 19, 0, 255, 50, 23, 3, 255, 52, 22, 2, 255, 54, 26, 5, 255, 53, 24, 2, 255, 56, 24, 2, 255, 56, 24, 3, 255, 58, 27, 5, 255, 55, 25, 1, 255, 51, 24, 2, 255, 53, 25, 5, 255, 57, 27, 6, 255, 54, 30, 3, 255, 54, 26, 3, 255, 48, 25, 3, 255, 50, 28, 2, 255, 54, 28, 4, 255, 57, 25, 3, 255, 55, 22, 2, 255, 52, 23, 4, 255, 54, 26, 4, 255, 54, 26, 4, 255, 45, 23, 8, 255, 45, 26, 6, 255, 50, 24, 0, 255, 54, 25, 2, 255, 51, 30, 1, 255, 51, 30, 2, 255, 55, 27, 7, 255, 47, 26, 10, 255, 43, 30, 26, 255, 44, 31, 59, 255, 45, 28, 43, 255, 59, 33, 8, 255, 55, 31, 3, 255, 54, 30, 6, 255, 55, 31, 7, 255, 51, 28, 3, 255, 48, 26, 2, 255, 52, 27, 4, 255, 52, 27, 5, 255, 57, 30, 5, 255, 64, 32, 6, 255, 60, 31, 3, 255, 56, 33, 1, 255, 60, 32, 3, 255, 67, 31, 2, 255, 60, 30, 0, 255, 54, 30, 6, 255, 54, 30, 7, 255, 61, 33, 2, 255, 62, 35, 4, 255, 54, 35, 13, 255, 55, 37, 8, 255, 63, 45, 1, 255, 59, 36, 7, 255, 62, 42, 11, 255, 60, 44, 13, 255, 63, 46, 17, 255, 58, 48, 15, 255, 67, 48, 19, 255, 70, 49, 16, 255, 72, 57, 10, 255, 68, 59, 19, 255, 64, 57, 17, 255, 68, 62, 20, 255, 71, 64, 20, 255, 72, 65, 24, 255, 68, 63, 35, 255, 64, 65, 35, 255, 67, 65, 45, 255, 71, 70, 41, 255, 69, 69, 32, 255, 76, 74, 33, 255, 74, 75, 48, 255, 72, 71, 57, 255, 79, 79, 46, 255, 79, 83, 48, 255, 73, 81, 56, 255, 75, 84, 53, 255, 77, 85, 57, 255, 81, 88, 64, 255, 81, 93, 55, 255, 80, 94, 63, 255, 82, 97, 68, 255, 85, 100, 62, 255, 92, 106, 76, 255, 93, 107, 81, 255, 92, 108, 80, 255, 95, 111, 85, 255, 95, 114, 85, 255, 94, 115, 82, 255, 96, 117, 89, 255, 100, 122, 84, 255, 101, 123, 84, 255, 101, 120, 87, 255, 100, 122, 88, 255, 96, 125, 82, 255, 96, 123, 89, 255, 98, 125, 92, 255, 98, 124, 86, 255, 97, 125, 83, 255, 97, 123, 80, 255, 98, 121, 77, 255, 101, 120, 82, 255, 100, 117, 84, 255, 98, 116, 79, 255, 97, 115, 75, 255, 96, 112, 68, 255, 95, 110, 69, 255, 93, 108, 66, 255, 91, 106, 65, 255, 90, 101, 62, 255, 91, 99, 54, 255, 91, 97, 53, 255, 90, 94, 52, 255, 88, 95, 44, 255, 90, 91, 42, 255, 94, 93, 31, 255, 90, 87, 38, 255, 89, 81, 32, 255, 90, 79, 26, 255, 90, 80, 35, 255, 86, 79, 33, 255, 88, 76, 34, 255, 88, 74, 26, 255, 87, 73, 21, 255, 90, 72, 14, 255, 86, 72, 8, 255, 86, 67, 19, 255, 88, 68, 20, 255, 85, 65, 11, 255, 81, 62, 15, 255, 83, 62, 15, 255, 84, 62, 7, 255, 80, 58, 11, 255, 81, 57, 14, 255, 85, 55, 11, 255, 83, 52, 12, 255, 81, 48, 10, 255, 83, 50, 9, 255, 81, 48, 10, 255, 81, 48, 9, 255, 85, 49, 10, 255, 79, 43, 6, 255, 79, 44, 6, 255, 80, 47, 5, 255, 78, 42, 11, 255, 84, 42, 6, 255, 82, 39, 7, 255, 73, 38, 5, 255, 79, 43, 6, 255, 82, 38, 7, 255, 77, 34, 6, 255, 79, 38, 5, 255, 79, 35, 1, 255, 79, 36, 1, 255, 81, 38, 3, 255, 79, 36, 5, 255, 80, 36, 7, 255, 79, 35, 6, 255, 80, 36, 6, 255, 77, 38, 2, 255, 70, 32, 7, 255, 81, 29, 8, 255, 100, 36, 4, 255, 103, 40, 4, 255, 104, 36, 9, 255, 106, 35, 9, 255, 105, 38, 4, 255, 109, 38, 2, 255, 105, 37, 2, 255, 98, 36, 3, 255, 86, 30, 0, 255, 80, 27, 2, 255, 79, 32, 1, 255, 79, 35, 1, 255, 81, 33, 5, 255, 81, 29, 7, 255, 81, 31, 4, 255, 82, 28, 1, 255, 86, 30, 3, 255, 82, 30, 3, 255, 77, 32, 4, 255, 76, 28, 2, 255, 84, 26, 4, 255, 80, 28, 5, 255, 67, 27, 2, 255, 78, 33, 6, 255, 69, 25, 0, 255, 74, 24, 1, 255, 69, 25, 1, 255, 74, 23, 1, 255, 79, 27, 6, 255, 75, 30, 5, 255, 70, 25, 2, 255, 71, 26, 4, 255, 71, 26, 6, 255, 70, 25, 3, 255, 66, 24, 0, 255, 75, 31, 5, 255, 61, 29, 7, 255, 56, 22, 7, 255, 75, 25, 6, 255, 62, 22, 2, 255, 68, 20, 4, 255, 85, 27, 3, 255, 84, 29, 3, 255, 87, 27, 1, 255, 93, 29, 2, 255, 95, 33, 5, 255, 86, 27, 1, 255, 77, 21, 1, 255, 93, 29, 3, 255, 101, 27, 2, 255, 100, 28, 3, 255, 91, 28, 4, 255, 78, 22, 1, 255, 64, 23, 2, 255, 62, 21, 3, 255, 61, 24, 3, 255, 59, 23, 4, 255, 58, 21, 4, 255, 61, 22, 4, 255, 66, 21, 4, 255, 70, 20, 3, 255, 56, 22, 3, 255, 62, 23, 4, 255, 71, 22, 4, 255, 72, 21, 0, 255, 74, 22, 4, 255, 70, 22, 6, 255, 66, 22, 4, 255, 66, 20, 2, 255, 63, 15, 1, 255, 65, 20, 6, 255, 60, 21, 3, 255, 48, 13, 3, 255, 58, 21, 6, 255, 64, 22, 4, 255, 67, 23, 3, 255, 81, 23, 3, 255, 78, 19, 1, 255, 69, 20, 4, 255, 62, 21, 6, 255, 52, 20, 3, 255, 54, 20, 2, 255, 61, 24, 6, 255, 56, 21, 3, 255, 59, 20, 4, 255, 61, 22, 5, 255, 56, 22, 3, 255, 57, 23, 2, 255, 54, 14, 0, 255, 67, 22, 5, 255, 68, 23, 3, 255, 65, 18, 3, 255, 69, 22, 2, 255, 74, 21, 0, 255, 76, 22, 2, 255, 76, 25, 4, 255, 74, 24, 3, 255, 70, 21, 1, 255, 69, 21, 2, 255, 72, 18, 3, 255, 73, 17, 6, 255, 60, 18, 2, 255, 66, 17, 4, 255, 71, 17, 5, 255, 71, 18, 3, 255, 67, 18, 1, 255, 68, 20, 2, 255, 67, 20, 4, 255, 69, 20, 3, 255, 74, 22, 5, 255, 73, 18, 4, 255, 78, 18, 4, 255, 75, 17, 3, 255, 73, 16, 4, 255, 74, 16, 4, 255, 73, 16, 3, 255, 71, 17, 3, 255, 70, 17, 3, 255, 66, 14, 1, 255, 59, 15, 0, 255, 64, 20, 4, 255, 62, 17, 2, 255, 59, 14, 1, 255, 57, 15, 3, 255, 52, 14, 3, 255, 52, 12, 1, 255, 45, 12, 0, 255, 41, 11, 1, 255, 42, 9, 3, 255, 40, 10, 3, 255, 38, 10, 2, 255, 42, 12, 3, 255, 47, 11, 1, 255, 43, 9, 1, 255, 33, 9, 1, 255, 29, 8, 3, 255, 35, 9, 5, 255, 32, 11, 4, 255, 32, 8, 4, 255, 30, 11, 4, 255, 30, 11, 4, 255, 27, 9, 3, 255, 30, 12, 4, 255, 36, 10, 2, 255, 40, 13, 3, 255, 30, 7, 0, 255, 29, 7, 4, 255, 30, 10, 4, 255, 28, 9, 0, 255, 29, 10, 4, 255, 26, 6, 4, 255, 35, 10, 6, 255, 53, 14, 7, 255, 57, 10, 1, 255, 7, 2, 0, 255, 10, 5, 2, 255, 8, 3, 1, 255, 8, 3, 0, 255, 11, 6, 3, 255, 11, 4, 2, 255, 14, 5, 3, 255, 13, 5, 2, 255, 13, 4, 1, 255, 15, 6, 3, 255, 13, 4, 2, 255, 11, 3, 0, 255, 13, 5, 1, 255, 16, 7, 3, 255, 17, 8, 2, 255, 18, 7, 2, 255, 18, 7, 4, 255, 19, 9, 6, 255, 18, 9, 3, 255, 16, 8, 3, 255, 14, 6, 1, 255, 20, 9, 4, 255, 21, 9, 3, 255, 23, 11, 4, 255, 23, 10, 5, 255, 28, 14, 8, 255, 25, 9, 3, 255, 24, 11, 4, 255, 23, 13, 5, 255, 16, 10, 1, 255, 14, 8, 0, 255, 21, 12, 3, 255, 30, 13, 5, 255, 26, 12, 3, 255, 23, 12, 2, 255, 22, 11, 1, 255, 25, 12, 4, 255, 23, 9, 1, 255, 22, 11, 2, 255, 25, 14, 5, 255, 26, 12, 2, 255, 28, 15, 3, 255, 31, 19, 6, 255, 26, 17, 2, 255, 29, 19, 3, 255, 33, 18, 4, 255, 26, 15, 3, 255, 30, 14, 2, 255, 37, 18, 3, 255, 33, 16, 1, 255, 38, 17, 3, 255, 38, 19, 2, 255, 40, 20, 2, 255, 34, 19, 3, 255, 34, 22, 5, 255, 42, 20, 6, 255, 42, 20, 4, 255, 39, 22, 3, 255, 38, 19, 2, 255, 35, 14, 2, 255, 36, 16, 3, 255, 38, 21, 1, 255, 43, 22, 3, 255, 43, 21, 7, 255, 32, 21, 4, 255, 37, 21, 2, 255, 36, 21, 3, 255, 36, 24, 3, 255, 40, 25, 0, 255, 43, 21, 3, 255, 42, 21, 6, 255, 46, 26, 7, 255, 41, 22, 3, 255, 43, 21, 3, 255, 41, 20, 2, 255, 42, 21, 2, 255, 49, 27, 4, 255, 41, 19, 4, 255, 40, 19, 5, 255, 49, 25, 2, 255, 42, 20, 5, 255, 45, 21, 1, 255, 50, 24, 8, 255, 41, 21, 3, 255, 46, 23, 2, 255, 64, 23, 5, 255, 51, 26, 5, 255, 40, 24, 2, 255, 55, 23, 4, 255, 55, 28, 6, 255, 48, 26, 4, 255, 44, 19, 2, 255, 49, 27, 5, 255, 44, 32, 2, 255, 49, 30, 3, 255, 50, 25, 5, 255, 52, 22, 6, 255, 58, 26, 3, 255, 47, 21, 0, 255, 48, 27, 8, 255, 57, 29, 4, 255, 52, 26, 1, 255, 52, 25, 5, 255, 46, 21, 5, 255, 52, 29, 7, 255, 55, 26, 0, 255, 54, 29, 4, 255, 45, 26, 7, 255, 47, 23, 7, 255, 49, 24, 2, 255, 55, 31, 10, 255, 42, 29, 3, 255, 39, 27, 14, 255, 39, 28, 23, 255, 51, 26, 13, 255, 46, 27, 10, 255, 46, 30, 9, 255, 51, 27, 5, 255, 56, 27, 4, 255, 57, 29, 3, 255, 56, 30, 0, 255, 55, 30, 5, 255, 61, 31, 5, 255, 65, 29, 1, 255, 66, 33, 5, 255, 58, 33, 2, 255, 52, 28, 2, 255, 58, 29, 3, 255, 57, 26, 5, 255, 63, 30, 6, 255, 58, 34, 3, 255, 53, 33, 4, 255, 61, 37, 11, 255, 55, 38, 6, 255, 50, 35, 8, 255, 53, 38, 9, 255, 60, 37, 7, 255, 71, 44, 15, 255, 61, 44, 2, 255, 61, 41, 24, 255, 55, 45, 19, 255, 66, 48, 28, 255, 66, 48, 18, 255, 71, 56, 13, 255, 66, 57, 19, 255, 60, 56, 19, 255, 63, 62, 25, 255, 68, 63, 21, 255, 74, 63, 23, 255, 71, 66, 42, 255, 70, 64, 52, 255, 65, 61, 39, 255, 70, 71, 39, 255, 77, 75, 34, 255, 72, 76, 35, 255, 67, 74, 40, 255, 69, 72, 46, 255, 76, 79, 43, 255, 73, 78, 46, 255, 74, 84, 71, 255, 71, 83, 58, 255, 81, 88, 58, 255, 82, 88, 69, 255, 85, 95, 63, 255, 82, 96, 67, 255, 85, 99, 76, 255, 89, 103, 72, 255, 90, 105, 75, 255, 88, 106, 81, 255, 91, 107, 85, 255, 93, 111, 80, 255, 96, 117, 81, 255, 98, 120, 89, 255, 98, 120, 89, 255, 98, 120, 85, 255, 103, 125, 87, 255, 103, 123, 88, 255, 104, 126, 94, 255, 101, 130, 97, 255, 97, 125, 92, 255, 99, 125, 87, 255, 97, 123, 83, 255, 98, 124, 82, 255, 98, 124, 82, 255, 100, 123, 80, 255, 99, 119, 79, 255, 96, 118, 80, 255, 96, 116, 76, 255, 95, 114, 71, 255, 95, 111, 67, 255, 94, 109, 65, 255, 93, 107, 64, 255, 94, 107, 58, 255, 90, 100, 56, 255, 92, 100, 54, 255, 92, 98, 53, 255, 90, 93, 51, 255, 91, 95, 44, 255, 91, 90, 31, 255, 94, 84, 37, 255, 98, 83, 41, 255, 94, 80, 34, 255, 93, 80, 35, 255, 91, 80, 30, 255, 88, 74, 28, 255, 91, 75, 35, 255, 92, 74, 30, 255, 91, 71, 20, 255, 87, 67, 22, 255, 87, 66, 22, 255, 84, 64, 19, 255, 83, 64, 17, 255, 76, 59, 16, 255, 79, 63, 13, 255, 81, 61, 4, 255, 80, 53, 17, 255, 85, 54, 23, 255, 80, 56, 12, 255, 77, 52, 9, 255, 85, 49, 9, 255, 86, 48, 8, 255, 79, 50, 4, 255, 75, 47, 10, 255, 78, 46, 9, 255, 78, 46, 3, 255, 76, 46, 10, 255, 78, 47, 9, 255, 78, 44, 0, 255, 83, 45, 6, 255, 75, 42, 4, 255, 75, 37, 10, 255, 81, 40, 12, 255, 81, 42, 5, 255, 80, 42, 0, 255, 82, 41, 4, 255, 80, 33, 6, 255, 81, 33, 8, 255, 83, 39, 5, 255, 82, 38, 3, 255, 77, 34, 0, 255, 80, 37, 0, 255, 82, 39, 2, 255, 82, 38, 3, 255, 82, 37, 3, 255, 77, 33, 3, 255, 76, 32, 6, 255, 77, 33, 2, 255, 77, 33, 0, 255, 81, 35, 3, 255, 82, 31, 5, 255, 88, 29, 3, 255, 94, 34, 4, 255, 88, 29, 0, 255, 85, 30, 2, 255, 81, 28, 4, 255, 82, 29, 6, 255, 82, 28, 4, 255, 83, 31, 0, 255, 75, 29, 2, 255, 74, 28, 7, 255, 81, 29, 4, 255, 82, 24, 1, 255, 84, 28, 7, 255, 82, 29, 4, 255, 74, 30, 0, 255, 72, 30, 2, 255, 78, 26, 5, 255, 80, 28, 4, 255, 76, 34, 4, 255, 75, 28, 4, 255, 75, 28, 2, 255, 76, 28, 3, 255, 78, 29, 6, 255, 73, 25, 3, 255, 71, 22, 1, 255, 73, 25, 2, 255, 71, 25, 3, 255, 70, 23, 5, 255, 72, 26, 5, 255, 69, 24, 2, 255, 68, 28, 2, 255, 67, 27, 2, 255, 68, 22, 2, 255, 71, 23, 6, 255, 68, 28, 6, 255, 63, 22, 1, 255, 71, 25, 1, 255, 80, 29, 0, 255, 86, 29, 1, 255, 93, 31, 2, 255, 94, 31, 3, 255, 87, 30, 3, 255, 74, 26, 3, 255, 62, 20, 5, 255, 71, 23, 5, 255, 81, 23, 4, 255, 75, 25, 3, 255, 68, 24, 3, 255, 63, 21, 1, 255, 62, 24, 4, 255, 67, 23, 5, 255, 66, 25, 3, 255, 60, 22, 5, 255, 55, 18, 1, 255, 59, 20, 3, 255, 66, 26, 7, 255, 66, 22, 4, 255, 56, 20, 2, 255, 59, 21, 1, 255, 78, 25, 2, 255, 89, 27, 5, 255, 79, 23, 1, 255, 71, 20, 1, 255, 67, 20, 3, 255, 63, 20, 5, 255, 60, 18, 6, 255, 55, 19, 6, 255, 54, 22, 5, 255, 59, 19, 2, 255, 65, 19, 3, 255, 60, 20, 3, 255, 64, 21, 4, 255, 67, 18, 4, 255, 56, 20, 2, 255, 53, 22, 3, 255, 57, 19, 2, 255, 55, 19, 5, 255, 62, 19, 9, 255, 61, 16, 4, 255, 54, 19, 1, 255, 59, 16, 0, 255, 67, 19, 1, 255, 62, 26, 2, 255, 61, 25, 6, 255, 61, 14, 4, 255, 69, 18, 6, 255, 65, 17, 4, 255, 63, 16, 5, 255, 70, 21, 4, 255, 72, 21, 1, 255, 71, 22, 1, 255, 73, 24, 2, 255, 75, 24, 3, 255, 74, 23, 3, 255, 73, 21, 2, 255, 70, 16, 0, 255, 70, 19, 4, 255, 63, 25, 5, 255, 70, 19, 4, 255, 67, 15, 1, 255, 66, 16, 2, 255, 72, 20, 5, 255, 74, 17, 4, 255, 70, 18, 2, 255, 73, 20, 2, 255, 76, 19, 0, 255, 70, 17, 0, 255, 60, 17, 1, 255, 65, 17, 2, 255, 69, 16, 2, 255, 69, 17, 3, 255, 67, 16, 2, 255, 66, 15, 1, 255, 70, 17, 3, 255, 67, 16, 2, 255, 66, 17, 3, 255, 62, 18, 3, 255, 55, 14, 0, 255, 61, 17, 4, 255, 56, 11, 3, 255, 49, 12, 2, 255, 54, 15, 3, 255, 54, 15, 4, 255, 41, 13, 3, 255, 38, 12, 5, 255, 45, 10, 6, 255, 42, 12, 4, 255, 43, 14, 3, 255, 49, 12, 2, 255, 40, 9, 1, 255, 42, 11, 2, 255, 43, 11, 4, 255, 38, 8, 2, 255, 37, 10, 1, 255, 34, 12, 3, 255, 29, 10, 1, 255, 30, 10, 4, 255, 28, 7, 4, 255, 28, 12, 6, 255, 32, 10, 2, 255, 34, 9, 0, 255, 36, 14, 3, 255, 38, 14, 7, 255, 37, 9, 5, 255, 33, 6, 2, 255, 33, 10, 3, 255, 25, 7, 0, 255, 26, 8, 1, 255, 42, 13, 3, 255, 51, 13, 3, 255, 9, 4, 0, 255, 11, 6, 2, 255, 8, 3, 1, 255, 8, 2, 1, 255, 10, 5, 2, 255, 9, 3, 1, 255, 14, 6, 4, 255, 15, 7, 5, 255, 13, 4, 2, 255, 15, 4, 2, 255, 12, 3, 0, 255, 12, 4, 0, 255, 14, 8, 2, 255, 15, 4, 0, 255, 16, 5, 0, 255, 20, 8, 2, 255, 19, 7, 4, 255, 16, 6, 2, 255, 18, 10, 2, 255, 20, 9, 4, 255, 19, 7, 4, 255, 21, 7, 4, 255, 21, 7, 2, 255, 21, 6, 2, 255, 25, 11, 5, 255, 17, 8, 2, 255, 14, 7, 2, 255, 20, 10, 4, 255, 19, 10, 3, 255, 16, 10, 1, 255, 20, 11, 2, 255, 26, 12, 3, 255, 31, 13, 6, 255, 30, 14, 5, 255, 28, 14, 5, 255, 23, 9, 1, 255, 26, 14, 6, 255, 19, 11, 1, 255, 21, 13, 5, 255, 23, 13, 4, 255, 30, 15, 5, 255, 32, 18, 7, 255, 27, 14, 3, 255, 23, 12, 0, 255, 27, 15, 3, 255, 23, 12, 2, 255, 26, 18, 6, 255, 34, 18, 8, 255, 35, 16, 2, 255, 34, 16, 0, 255, 44, 19, 4, 255, 45, 20, 8, 255, 36, 16, 4, 255, 31, 17, 3, 255, 32, 18, 3, 255, 40, 16, 3, 255, 42, 19, 5, 255, 40, 21, 6, 255, 39, 20, 4, 255, 43, 22, 4, 255, 41, 21, 4, 255, 34, 19, 3, 255, 40, 20, 5, 255, 43, 19, 2, 255, 44, 16, 9, 255, 41, 20, 5, 255, 36, 19, 2, 255, 37, 23, 6, 255, 41, 24, 1, 255, 44, 23, 3, 255, 42, 18, 5, 255, 39, 21, 6, 255, 40, 22, 2, 255, 47, 22, 5, 255, 41, 23, 6, 255, 45, 25, 3, 255, 50, 25, 3, 255, 41, 19, 6, 255, 44, 24, 7, 255, 45, 20, 2, 255, 41, 20, 1, 255, 48, 24, 5, 255, 43, 23, 5, 255, 42, 24, 7, 255, 48, 23, 5, 255, 53, 23, 3, 255, 48, 22, 2, 255, 48, 26, 6, 255, 51, 24, 5, 255, 52, 21, 4, 255, 47, 24, 5, 255, 40, 21, 2, 255, 45, 26, 5, 255, 47, 31, 4, 255, 56, 30, 7, 255, 50, 23, 3, 255, 57, 23, 10, 255, 59, 25, 2, 255, 45, 24, 3, 255, 40, 24, 4, 255, 52, 24, 1, 255, 51, 27, 3, 255, 51, 25, 2, 255, 54, 25, 0, 255, 53, 24, 6, 255, 55, 27, 6, 255, 49, 27, 3, 255, 48, 26, 10, 255, 50, 26, 7, 255, 51, 26, 5, 255, 51, 22, 5, 255, 44, 24, 14, 255, 47, 29, 22, 255, 41, 29, 25, 255, 45, 27, 7, 255, 52, 24, 2, 255, 54, 30, 8, 255, 50, 29, 5, 255, 51, 29, 3, 255, 55, 30, 4, 255, 57, 31, 7, 255, 57, 30, 7, 255, 58, 31, 3, 255, 56, 28, 0, 255, 58, 31, 2, 255, 58, 32, 3, 255, 58, 27, 7, 255, 62, 27, 5, 255, 60, 30, 6, 255, 53, 33, 4, 255, 52, 34, 2, 255, 58, 32, 10, 255, 55, 28, 7, 255, 59, 33, 7, 255, 57, 38, 14, 255, 49, 32, 10, 255, 65, 39, 15, 255, 69, 40, 11, 255, 68, 45, 9, 255, 59, 42, 17, 255, 56, 47, 23, 255, 55, 47, 24, 255, 59, 55, 11, 255, 65, 56, 17, 255, 64, 54, 18, 255, 67, 62, 17, 255, 68, 61, 27, 255, 73, 57, 36, 255, 61, 62, 32, 255, 71, 67, 19, 255, 78, 68, 36, 255, 63, 70, 38, 255, 78, 78, 46, 255, 86, 80, 39, 255, 68, 75, 37, 255, 71, 77, 54, 255, 72, 78, 46, 255, 74, 79, 46, 255, 75, 85, 48, 255, 72, 85, 58, 255, 75, 87, 66, 255, 83, 90, 62, 255, 81, 86, 70, 255, 85, 96, 72, 255, 82, 98, 69, 255, 86, 99, 78, 255, 88, 102, 75, 255, 85, 103, 77, 255, 88, 108, 85, 255, 95, 115, 87, 255, 97, 116, 86, 255, 97, 120, 86, 255, 97, 122, 85, 255, 100, 124, 90, 255, 100, 124, 92, 255, 102, 126, 92, 255, 101, 122, 86, 255, 104, 126, 95, 255, 99, 124, 99, 255, 100, 127, 92, 255, 103, 128, 86, 255, 101, 124, 82, 255, 99, 123, 82, 255, 98, 124, 87, 255, 100, 121, 84, 255, 100, 120, 79, 255, 97, 119, 78, 255, 97, 117, 73, 255, 95, 114, 67, 255, 95, 111, 67, 255, 97, 110, 65, 255, 96, 109, 65, 255, 92, 103, 62, 255, 93, 100, 65, 255, 92, 101, 48, 255, 92, 96, 50, 255, 92, 93, 53, 255, 91, 88, 49, 255, 87, 92, 44, 255, 84, 86, 36, 255, 93, 82, 37, 255, 94, 85, 26, 255, 89, 83, 22, 255, 88, 74, 31, 255, 95, 74, 20, 255, 91, 70, 31, 255, 91, 68, 37, 255, 90, 67, 23, 255, 87, 67, 12, 255, 91, 68, 16, 255, 86, 63, 11, 255, 85, 62, 15, 255, 83, 62, 15, 255, 78, 58, 16, 255, 81, 59, 17, 255, 79, 52, 17, 255, 77, 50, 16, 255, 80, 52, 9, 255, 80, 50, 4, 255, 77, 50, 9, 255, 77, 49, 13, 255, 80, 49, 11, 255, 85, 50, 11, 255, 92, 52, 9, 255, 91, 50, 9, 255, 94, 51, 9, 255, 93, 49, 5, 255, 80, 40, 3, 255, 80, 43, 8, 255, 82, 43, 4, 255, 81, 41, 4, 255, 82, 38, 2, 255, 84, 39, 8, 255, 76, 37, 7, 255, 77, 32, 4, 255, 86, 37, 8, 255, 85, 40, 10, 255, 83, 38, 8, 255, 81, 36, 5, 255, 80, 35, 4, 255, 83, 38, 6, 255, 80, 37, 4, 255, 80, 36, 4, 255, 78, 39, 7, 255, 79, 33, 0, 255, 81, 32, 4, 255, 77, 31, 7, 255, 80, 32, 3, 255, 79, 36, 2, 255, 72, 33, 3, 255, 78, 34, 4, 255, 88, 37, 5, 255, 86, 32, 1, 255, 85, 33, 3, 255, 80, 32, 3, 255, 78, 31, 2, 255, 81, 28, 6, 255, 86, 31, 4, 255, 82, 28, 5, 255, 80, 27, 7, 255, 80, 27, 5, 255, 80, 29, 5, 255, 81, 31, 3, 255, 83, 31, 4, 255, 78, 29, 5, 255, 74, 30, 3, 255, 77, 31, 2, 255, 76, 27, 1, 255, 75, 30, 5, 255, 77, 28, 4, 255, 79, 30, 3, 255, 72, 28, 0, 255, 76, 27, 5, 255, 71, 27, 5, 255, 72, 27, 2, 255, 75, 26, 1, 255, 70, 24, 1, 255, 68, 22, 4, 255, 68, 21, 1, 255, 74, 25, 4, 255, 72, 28, 5, 255, 66, 27, 5, 255, 69, 24, 4, 255, 69, 24, 2, 255, 59, 21, 3, 255, 65, 24, 9, 255, 60, 26, 2, 255, 77, 28, 4, 255, 96, 26, 4, 255, 101, 27, 3, 255, 102, 27, 2, 255, 94, 27, 1, 255, 81, 25, 1, 255, 71, 24, 5, 255, 61, 26, 1, 255, 62, 24, 0, 255, 63, 25, 1, 255, 68, 25, 3, 255, 67, 25, 6, 255, 62, 21, 4, 255, 61, 17, 0, 255, 68, 21, 3, 255, 61, 20, 5, 255, 58, 20, 3, 255, 64, 23, 3, 255, 65, 24, 3, 255, 57, 19, 1, 255, 60, 16, 0, 255, 75, 23, 6, 255, 86, 28, 5, 255, 88, 26, 1, 255, 88, 26, 1, 255, 81, 27, 4, 255, 72, 27, 2, 255, 68, 21, 1, 255, 62, 16, 2, 255, 60, 22, 8, 255, 53, 15, 4, 255, 57, 16, 0, 255, 62, 22, 9, 255, 57, 19, 1, 255, 51, 16, 1, 255, 49, 19, 5, 255, 46, 20, 3, 255, 54, 19, 2, 255, 59, 19, 1, 255, 57, 20, 2, 255, 58, 19, 3, 255, 54, 17, 0, 255, 57, 21, 3, 255, 58, 20, 5, 255, 58, 17, 4, 255, 55, 16, 1, 255, 57, 24, 2, 255, 58, 22, 4, 255, 63, 22, 4, 255, 64, 16, 1, 255, 67, 17, 3, 255, 70, 22, 1, 255, 72, 20, 1, 255, 73, 20, 2, 255, 71, 21, 1, 255, 69, 20, 0, 255, 67, 19, 0, 255, 69, 21, 1, 255, 68, 21, 0, 255, 71, 21, 1, 255, 67, 20, 1, 255, 71, 21, 2, 255, 67, 21, 3, 255, 66, 20, 2, 255, 72, 21, 4, 255, 71, 21, 2, 255, 73, 21, 4, 255, 70, 17, 4, 255, 66, 16, 2, 255, 71, 22, 6, 255, 72, 19, 3, 255, 68, 17, 1, 255, 63, 16, 0, 255, 65, 19, 3, 255, 66, 19, 4, 255, 64, 16, 2, 255, 66, 16, 2, 255, 66, 17, 2, 255, 66, 15, 2, 255, 61, 16, 2, 255, 56, 15, 3, 255, 54, 15, 2, 255, 53, 14, 3, 255, 55, 13, 6, 255, 53, 12, 2, 255, 51, 16, 4, 255, 44, 12, 4, 255, 44, 12, 5, 255, 41, 7, 2, 255, 43, 10, 1, 255, 45, 11, 1, 255, 46, 13, 3, 255, 43, 14, 4, 255, 53, 13, 5, 255, 56, 12, 1, 255, 49, 13, 1, 255, 47, 13, 1, 255, 40, 12, 1, 255, 34, 14, 3, 255, 27, 9, 1, 255, 26, 10, 5, 255, 25, 11, 5, 255, 32, 8, 2, 255, 36, 11, 2, 255, 35, 13, 2, 255, 36, 11, 4, 255, 40, 10, 5, 255, 39, 8, 3, 255, 36, 11, 4, 255, 31, 13, 5, 255, 24, 6, 3, 255, 31, 6, 2, 255, 40, 8, 6, 255, 8, 4, 1, 255, 6, 3, 1, 255, 6, 3, 2, 255, 9, 3, 3, 255, 9, 3, 3, 255, 12, 6, 3, 255, 11, 5, 2, 255, 11, 4, 2, 255, 15, 5, 4, 255, 17, 6, 4, 255, 16, 5, 4, 255, 12, 5, 1, 255, 11, 5, 1, 255, 17, 7, 4, 255, 16, 6, 2, 255, 17, 6, 3, 255, 19, 8, 5, 255, 15, 6, 1, 255, 17, 10, 1, 255, 18, 10, 4, 255, 17, 5, 2, 255, 19, 6, 2, 255, 21, 8, 2, 255, 22, 9, 3, 255, 23, 11, 5, 255, 16, 11, 2, 255, 10, 10, 0, 255, 22, 12, 5, 255, 20, 9, 2, 255, 21, 11, 1, 255, 25, 11, 3, 255, 28, 7, 2, 255, 18, 8, 0, 255, 21, 12, 1, 255, 24, 12, 3, 255, 25, 9, 3, 255, 20, 7, 1, 255, 18, 13, 2, 255, 18, 13, 4, 255, 21, 11, 1, 255, 29, 15, 4, 255, 28, 14, 3, 255, 25, 11, 4, 255, 29, 14, 6, 255, 30, 15, 5, 255, 25, 15, 6, 255, 22, 14, 5, 255, 24, 13, 4, 255, 30, 19, 4, 255, 27, 18, 2, 255, 33, 17, 3, 255, 32, 17, 2, 255, 28, 15, 0, 255, 39, 22, 4, 255, 42, 22, 4, 255, 37, 22, 0, 255, 34, 20, 0, 255, 37, 17, 3, 255, 36, 17, 3, 255, 37, 18, 0, 255, 45, 24, 6, 255, 38, 20, 3, 255, 40, 17, 3, 255, 38, 20, 3, 255, 41, 23, 7, 255, 41, 20, 1, 255, 43, 19, 4, 255, 37, 19, 5, 255, 36, 22, 1, 255, 42, 21, 2, 255, 45, 22, 6, 255, 36, 20, 4, 255, 40, 22, 0, 255, 42, 24, 5, 255, 35, 19, 6, 255, 45, 20, 2, 255, 47, 23, 3, 255, 37, 22, 3, 255, 41, 24, 1, 255, 49, 26, 2, 255, 48, 26, 2, 255, 50, 26, 3, 255, 41, 24, 2, 255, 39, 22, 4, 255, 44, 24, 4, 255, 42, 27, 2, 255, 48, 25, 2, 255, 49, 23, 2, 255, 43, 25, 3, 255, 39, 20, 4, 255, 43, 24, 5, 255, 47, 22, 1, 255, 48, 21, 1, 255, 46, 26, 4, 255, 58, 31, 9, 255, 59, 28, 4, 255, 54, 24, 1, 255, 47, 23, 1, 255, 52, 25, 3, 255, 59, 26, 7, 255, 54, 24, 10, 255, 47, 21, 4, 255, 50, 23, 3, 255, 49, 22, 1, 255, 45, 23, 4, 255, 45, 26, 7, 255, 54, 27, 4, 255, 56, 28, 2, 255, 52, 28, 3, 255, 51, 25, 5, 255, 55, 26, 5, 255, 52, 29, 9, 255, 38, 24, 19, 255, 39, 27, 20, 255, 52, 31, 5, 255, 57, 28, 0, 255, 53, 28, 0, 255, 52, 32, 3, 255, 53, 30, 4, 255, 52, 25, 1, 255, 56, 28, 6, 255, 54, 26, 5, 255, 58, 29, 4, 255, 56, 30, 3, 255, 56, 30, 4, 255, 58, 29, 2, 255, 56, 27, 6, 255, 58, 34, 6, 255, 50, 27, 5, 255, 50, 27, 7, 255, 59, 32, 4, 255, 54, 23, 10, 255, 58, 33, 10, 255, 62, 36, 5, 255, 60, 36, 3, 255, 64, 39, 10, 255, 59, 38, 10, 255, 58, 41, 10, 255, 60, 47, 10, 255, 52, 45, 15, 255, 56, 50, 18, 255, 56, 53, 15, 255, 59, 47, 23, 255, 57, 52, 13, 255, 65, 58, 19, 255, 72, 57, 30, 255, 68, 60, 19, 255, 70, 64, 24, 255, 63, 67, 35, 255, 69, 66, 32, 255, 73, 66, 31, 255, 63, 70, 39, 255, 75, 72, 44, 255, 81, 73, 43, 255, 67, 72, 43, 255, 73, 74, 52, 255, 75, 81, 49, 255, 72, 83, 48, 255, 73, 84, 50, 255, 74, 85, 54, 255, 78, 91, 63, 255, 81, 89, 63, 255, 83, 91, 69, 255, 82, 97, 71, 255, 82, 101, 72, 255, 88, 102, 75, 255, 90, 104, 79, 255, 90, 109, 81, 255, 91, 114, 84, 255, 94, 113, 88, 255, 100, 117, 91, 255, 102, 125, 94, 255, 96, 123, 91, 255, 98, 123, 94, 255, 100, 127, 93, 255, 102, 129, 93, 255, 100, 126, 91, 255, 105, 129, 99, 255, 104, 129, 99, 255, 102, 128, 94, 255, 107, 129, 91, 255, 106, 127, 88, 255, 101, 125, 90, 255, 96, 123, 91, 255, 97, 120, 86, 255, 101, 120, 81, 255, 100, 116, 80, 255, 99, 115, 75, 255, 96, 114, 67, 255, 90, 107, 64, 255, 93, 113, 63, 255, 87, 105, 60, 255, 89, 99, 63, 255, 90, 100, 65, 255, 88, 98, 50, 255, 86, 94, 43, 255, 91, 90, 56, 255, 92, 85, 52, 255, 85, 83, 43, 255, 85, 81, 48, 255, 91, 83, 45, 255, 89, 82, 27, 255, 90, 80, 26, 255, 88, 76, 24, 255, 89, 72, 24, 255, 90, 71, 18, 255, 87, 69, 18, 255, 87, 66, 18, 255, 82, 66, 14, 255, 88, 63, 21, 255, 84, 60, 15, 255, 79, 60, 14, 255, 76, 57, 13, 255, 76, 56, 13, 255, 83, 60, 6, 255, 85, 57, 8, 255, 85, 52, 19, 255, 79, 50, 7, 255, 80, 51, 7, 255, 75, 50, 15, 255, 72, 45, 11, 255, 87, 50, 12, 255, 104, 53, 7, 255, 114, 51, 8, 255, 116, 48, 9, 255, 113, 54, 0, 255, 96, 48, 5, 255, 76, 36, 21, 255, 73, 37, 20, 255, 82, 40, 1, 255, 83, 38, 4, 255, 84, 42, 7, 255, 80, 39, 1, 255, 78, 34, 5, 255, 83, 39, 14, 255, 76, 34, 5, 255, 77, 34, 1, 255, 81, 37, 1, 255, 80, 35, 4, 255, 81, 34, 8, 255, 81, 34, 10, 255, 77, 31, 6, 255, 76, 31, 4, 255, 72, 36, 8, 255, 71, 32, 6, 255, 78, 32, 8, 255, 79, 28, 6, 255, 80, 26, 2, 255, 84, 32, 4, 255, 82, 35, 3, 255, 81, 37, 4, 255, 83, 34, 1, 255, 83, 32, 0, 255, 82, 34, 3, 255, 79, 32, 2, 255, 79, 31, 0, 255, 82, 32, 4, 255, 79, 29, 2, 255, 80, 28, 1, 255, 81, 27, 2, 255, 79, 29, 7, 255, 78, 30, 5, 255, 77, 31, 1, 255, 72, 30, 1, 255, 72, 28, 2, 255, 84, 31, 6, 255, 80, 30, 4, 255, 70, 28, 1, 255, 72, 30, 6, 255, 77, 31, 5, 255, 74, 30, 0, 255, 73, 30, 2, 255, 68, 23, 2, 255, 74, 27, 6, 255, 79, 29, 4, 255, 77, 26, 1, 255, 70, 24, 4, 255, 66, 24, 7, 255, 66, 21, 2, 255, 75, 26, 3, 255, 72, 24, 3, 255, 71, 28, 6, 255, 69, 24, 3, 255, 67, 24, 4, 255, 66, 23, 4, 255, 62, 24, 10, 255, 49, 21, 4, 255, 68, 22, 2, 255, 76, 26, 0, 255, 87, 30, 3, 255, 91, 28, 2, 255, 93, 33, 4, 255, 81, 28, 1, 255, 73, 24, 1, 255, 62, 26, 1, 255, 67, 26, 2, 255, 67, 25, 1, 255, 68, 21, 1, 255, 68, 24, 5, 255, 64, 22, 6, 255, 60, 17, 2, 255, 61, 20, 3, 255, 56, 20, 5, 255, 60, 19, 3, 255, 71, 24, 3, 255, 74, 26, 5, 255, 68, 21, 6, 255, 63, 19, 3, 255, 67, 25, 3, 255, 81, 26, 2, 255, 93, 25, 3, 255, 92, 23, 0, 255, 90, 26, 5, 255, 92, 29, 6, 255, 89, 30, 4, 255, 67, 20, 0, 255, 53, 16, 3, 255, 62, 18, 5, 255, 66, 17, 2, 255, 56, 16, 4, 255, 70, 19, 3, 255, 63, 17, 3, 255, 62, 21, 5, 255, 60, 20, 2, 255, 70, 22, 6, 255, 58, 18, 2, 255, 52, 19, 2, 255, 55, 18, 3, 255, 50, 18, 3, 255, 45, 17, 1, 255, 52, 21, 6, 255, 52, 18, 8, 255, 57, 17, 6, 255, 62, 18, 3, 255, 60, 15, 3, 255, 65, 19, 4, 255, 69, 19, 4, 255, 73, 20, 7, 255, 71, 24, 4, 255, 68, 18, 0, 255, 71, 20, 3, 255, 71, 23, 3, 255, 70, 22, 2, 255, 67, 19, 0, 255, 70, 22, 3, 255, 72, 22, 2, 255, 74, 22, 1, 255, 77, 19, 2, 255, 70, 20, 1, 255, 67, 19, 2, 255, 66, 19, 1, 255, 69, 20, 3, 255, 66, 22, 1, 255, 66, 17, 2, 255, 68, 15, 3, 255, 73, 19, 7, 255, 70, 15, 3, 255, 80, 19, 5, 255, 74, 15, 2, 255, 67, 17, 2, 255, 63, 15, 1, 255, 63, 16, 2, 255, 66, 17, 4, 255, 62, 14, 1, 255, 60, 15, 0, 255, 58, 13, 1, 255, 61, 15, 5, 255, 57, 17, 3, 255, 50, 15, 1, 255, 53, 15, 3, 255, 61, 14, 3, 255, 51, 12, 2, 255, 50, 13, 3, 255, 48, 10, 2, 255, 46, 12, 3, 255, 47, 12, 2, 255, 50, 12, 3, 255, 47, 12, 2, 255, 43, 13, 3, 255, 45, 13, 2, 255, 54, 13, 2, 255, 61, 11, 1, 255, 59, 14, 4, 255, 49, 17, 6, 255, 34, 12, 4, 255, 28, 10, 1, 255, 32, 10, 1, 255, 31, 8, 2, 255, 30, 12, 5, 255, 31, 10, 2, 255, 39, 11, 2, 255, 33, 7, 0, 255, 30, 10, 5, 255, 38, 14, 6, 255, 41, 11, 1, 255, 40, 9, 2, 255, 33, 7, 3, 255, 23, 10, 4, 255, 21, 6, 1, 255, 22, 8, 2, 255, 8, 4, 1, 255, 6, 1, 0, 255, 8, 3, 1, 255, 10, 5, 3, 255, 9, 3, 2, 255, 12, 5, 3, 255, 11, 5, 2, 255, 12, 5, 2, 255, 11, 4, 1, 255, 12, 3, 0, 255, 14, 4, 2, 255, 15, 7, 3, 255, 13, 7, 2, 255, 13, 6, 4, 255, 11, 3, 1, 255, 13, 4, 2, 255, 13, 3, 1, 255, 17, 7, 3, 255, 15, 7, 0, 255, 19, 9, 5, 255, 16, 5, 1, 255, 18, 8, 3, 255, 19, 8, 3, 255, 19, 10, 3, 255, 14, 8, 0, 255, 15, 9, 1, 255, 21, 10, 2, 255, 25, 10, 4, 255, 22, 8, 1, 255, 19, 8, 2, 255, 19, 10, 2, 255, 21, 10, 2, 255, 20, 12, 2, 255, 19, 11, 1, 255, 20, 12, 2, 255, 22, 10, 3, 255, 24, 11, 3, 255, 20, 13, 1, 255, 21, 12, 3, 255, 22, 11, 4, 255, 24, 12, 2, 255, 27, 15, 4, 255, 28, 15, 6, 255, 27, 13, 4, 255, 26, 12, 2, 255, 32, 16, 6, 255, 30, 13, 6, 255, 29, 12, 5, 255, 27, 15, 3, 255, 30, 20, 5, 255, 31, 18, 4, 255, 28, 15, 5, 255, 30, 17, 5, 255, 33, 17, 1, 255, 35, 20, 4, 255, 31, 23, 6, 255, 37, 22, 5, 255, 42, 23, 4, 255, 37, 23, 4, 255, 39, 18, 5, 255, 45, 19, 6, 255, 35, 20, 0, 255, 42, 20, 4, 255, 40, 19, 8, 255, 32, 22, 1, 255, 39, 24, 1, 255, 33, 17, 3, 255, 42, 21, 9, 255, 41, 20, 3, 255, 42, 21, 4, 255, 39, 20, 2, 255, 41, 22, 1, 255, 48, 25, 2, 255, 41, 25, 3, 255, 37, 20, 7, 255, 47, 19, 5, 255, 48, 22, 5, 255, 40, 22, 4, 255, 42, 23, 7, 255, 46, 23, 2, 255, 48, 21, 4, 255, 49, 24, 4, 255, 43, 23, 3, 255, 40, 23, 6, 255, 39, 23, 2, 255, 42, 24, 2, 255, 43, 25, 3, 255, 46, 26, 6, 255, 46, 24, 4, 255, 46, 26, 6, 255, 43, 25, 4, 255, 47, 27, 1, 255, 52, 27, 4, 255, 51, 22, 4, 255, 52, 25, 2, 255, 46, 27, 2, 255, 47, 28, 3, 255, 47, 26, 7, 255, 46, 23, 0, 255, 53, 28, 3, 255, 49, 24, 7, 255, 48, 25, 3, 255, 56, 27, 5, 255, 52, 24, 5, 255, 48, 29, 4, 255, 43, 27, 1, 255, 56, 26, 4, 255, 59, 25, 2, 255, 45, 24, 4, 255, 57, 28, 3, 255, 56, 25, 2, 255, 44, 25, 6, 255, 40, 23, 11, 255, 42, 29, 17, 255, 48, 30, 15, 255, 49, 30, 10, 255, 52, 31, 9, 255, 53, 30, 2, 255, 55, 26, 0, 255, 59, 28, 6, 255, 57, 30, 7, 255, 50, 26, 3, 255, 54, 33, 4, 255, 53, 31, 3, 255, 57, 27, 6, 255, 61, 25, 3, 255, 61, 29, 4, 255, 54, 30, 1, 255, 59, 31, 2, 255, 64, 27, 5, 255, 58, 33, 10, 255, 53, 31, 9, 255, 59, 31, 4, 255, 58, 32, 7, 255, 62, 37, 10, 255, 60, 37, 8, 255, 56, 40, 15, 255, 55, 39, 12, 255, 58, 42, 9, 255, 55, 40, 16, 255, 63, 46, 13, 255, 64, 51, 16, 255, 63, 44, 28, 255, 63, 58, 24, 255, 59, 56, 24, 255, 67, 57, 23, 255, 66, 63, 22, 255, 60, 57, 45, 255, 65, 63, 36, 255, 63, 64, 37, 255, 65, 65, 47, 255, 67, 68, 47, 255, 70, 70, 36, 255, 73, 72, 39, 255, 73, 78, 40, 255, 76, 79, 43, 255, 73, 77, 47, 255, 74, 86, 46, 255, 74, 87, 62, 255, 78, 86, 62, 255, 80, 91, 61, 255, 80, 89, 66, 255, 86, 98, 73, 255, 82, 99, 71, 255, 86, 105, 78, 255, 94, 107, 78, 255, 91, 105, 78, 255, 90, 111, 85, 255, 93, 118, 86, 255, 96, 119, 88, 255, 99, 118, 93, 255, 98, 122, 95, 255, 97, 126, 97, 255, 100, 124, 99, 255, 99, 129, 92, 255, 99, 130, 90, 255, 101, 129, 95, 255, 102, 129, 96, 255, 104, 130, 92, 255, 103, 130, 97, 255, 104, 127, 96, 255, 103, 125, 92, 255, 98, 124, 91, 255, 98, 126, 93, 255, 97, 123, 88, 255, 100, 119, 82, 255, 101, 116, 83, 255, 97, 114, 76, 255, 96, 114, 69, 255, 94, 110, 67, 255, 91, 110, 59, 255, 85, 105, 58, 255, 89, 102, 61, 255, 87, 98, 58, 255, 86, 97, 55, 255, 87, 94, 44, 255, 87, 86, 51, 255, 88, 87, 41, 255, 87, 88, 32, 255, 88, 86, 30, 255, 89, 83, 19, 255, 89, 78, 24, 255, 90, 74, 31, 255, 89, 74, 18, 255, 89, 72, 21, 255, 89, 69, 22, 255, 88, 70, 21, 255, 89, 69, 20, 255, 76, 60, 25, 255, 79, 62, 14, 255, 83, 60, 14, 255, 86, 57, 12, 255, 87, 59, 13, 255, 81, 52, 13, 255, 88, 55, 14, 255, 89, 54, 11, 255, 88, 55, 9, 255, 85, 57, 7, 255, 78, 51, 12, 255, 79, 49, 11, 255, 79, 47, 7, 255, 86, 48, 8, 255, 97, 49, 4, 255, 109, 49, 7, 255, 108, 48, 9, 255, 99, 51, 9, 255, 78, 39, 7, 255, 70, 33, 16, 255, 77, 39, 12, 255, 80, 39, 4, 255, 83, 37, 3, 255, 83, 42, 6, 255, 80, 37, 5, 255, 82, 36, 3, 255, 80, 38, 4, 255, 79, 39, 4, 255, 78, 36, 2, 255, 83, 39, 7, 255, 82, 35, 3, 255, 80, 34, 1, 255, 81, 35, 4, 255, 75, 31, 3, 255, 72, 30, 3, 255, 76, 35, 4, 255, 68, 32, 3, 255, 71, 33, 7, 255, 79, 36, 3, 255, 80, 36, 2, 255, 81, 36, 1, 255, 84, 32, 2, 255, 86, 31, 4, 255, 83, 31, 1, 255, 79, 31, 1, 255, 80, 31, 3, 255, 81, 30, 3, 255, 80, 27, 2, 255, 83, 31, 4, 255, 79, 32, 4, 255, 77, 33, 1, 255, 77, 30, 0, 255, 77, 29, 5, 255, 83, 31, 4, 255, 80, 30, 2, 255, 74, 31, 2, 255, 77, 36, 6, 255, 77, 30, 6, 255, 72, 27, 2, 255, 74, 27, 3, 255, 78, 28, 3, 255, 69, 30, 3, 255, 69, 30, 2, 255, 76, 32, 3, 255, 69, 26, 2, 255, 75, 26, 5, 255, 75, 28, 2, 255, 73, 25, 1, 255, 70, 25, 4, 255, 64, 22, 4, 255, 71, 26, 4, 255, 75, 26, 3, 255, 72, 25, 4, 255, 67, 22, 0, 255, 68, 24, 0, 255, 71, 24, 4, 255, 69, 23, 2, 255, 60, 22, 4, 255, 61, 24, 9, 255, 65, 22, 1, 255, 63, 23, 2, 255, 67, 25, 4, 255, 64, 16, 0, 255, 74, 25, 6, 255, 68, 22, 3, 255, 67, 21, 2, 255, 68, 23, 2, 255, 71, 21, 2, 255, 67, 26, 5, 255, 64, 24, 3, 255, 62, 24, 2, 255, 59, 20, 3, 255, 63, 17, 3, 255, 66, 22, 4, 255, 64, 21, 5, 255, 65, 23, 3, 255, 68, 22, 0, 255, 69, 21, 1, 255, 59, 19, 2, 255, 67, 22, 6, 255, 75, 23, 5, 255, 77, 22, 2, 255, 87, 24, 1, 255, 96, 26, 4, 255, 93, 21, 1, 255, 91, 21, 2, 255, 91, 23, 6, 255, 67, 21, 6, 255, 52, 17, 2, 255, 71, 26, 4, 255, 85, 27, 7, 255, 76, 22, 3, 255, 75, 26, 7, 255, 83, 21, 6, 255, 83, 21, 5, 255, 65, 23, 3, 255, 56, 23, 1, 255, 47, 17, 3, 255, 47, 15, 4, 255, 57, 17, 10, 255, 54, 19, 8, 255, 41, 19, 3, 255, 43, 16, 4, 255, 58, 19, 8, 255, 48, 14, 3, 255, 53, 21, 5, 255, 49, 15, 3, 255, 58, 18, 4, 255, 59, 16, 3, 255, 61, 17, 4, 255, 67, 21, 7, 255, 63, 20, 1, 255, 64, 23, 2, 255, 71, 26, 6, 255, 73, 24, 4, 255, 73, 22, 4, 255, 74, 21, 5, 255, 75, 19, 4, 255, 76, 20, 4, 255, 77, 18, 4, 255, 69, 19, 1, 255, 70, 20, 3, 255, 71, 20, 3, 255, 68, 19, 0, 255, 65, 15, 2, 255, 68, 18, 4, 255, 70, 19, 3, 255, 71, 16, 1, 255, 74, 20, 5, 255, 67, 19, 3, 255, 67, 13, 1, 255, 69, 17, 4, 255, 65, 18, 4, 255, 62, 13, 1, 255, 64, 15, 2, 255, 66, 17, 2, 255, 59, 14, 0, 255, 51, 18, 2, 255, 65, 18, 6, 255, 61, 14, 3, 255, 55, 15, 2, 255, 55, 16, 2, 255, 55, 14, 2, 255, 48, 15, 4, 255, 58, 13, 5, 255, 55, 10, 3, 255, 40, 12, 1, 255, 46, 14, 4, 255, 55, 13, 3, 255, 50, 14, 4, 255, 42, 11, 2, 255, 43, 11, 2, 255, 53, 16, 3, 255, 64, 15, 2, 255, 56, 12, 3, 255, 38, 9, 3, 255, 37, 9, 3, 255, 35, 10, 2, 255, 32, 11, 2, 255, 31, 13, 4, 255, 29, 11, 2, 255, 35, 8, 0, 255, 41, 8, 4, 255, 37, 11, 4, 255, 35, 13, 3, 255, 33, 10, 0, 255, 35, 8, 2, 255, 40, 11, 3, 255, 38, 8, 1, 255, 34, 10, 4, 255, 31, 8, 3, 255, 31, 8, 2, 255, 8, 3, 0, 255, 9, 3, 0, 255, 11, 2, 1, 255, 12, 4, 2, 255, 12, 5, 3, 255, 9, 5, 2, 255, 10, 2, 1, 255, 14, 6, 3, 255, 9, 5, 1, 255, 11, 6, 2, 255, 12, 3, 1, 255, 14, 4, 3, 255, 11, 3, 1, 255, 8, 5, 0, 255, 10, 5, 2, 255, 15, 7, 4, 255, 16, 6, 2, 255, 18, 7, 2, 255, 21, 8, 3, 255, 13, 4, 0, 255, 15, 8, 2, 255, 17, 8, 4, 255, 17, 6, 3, 255, 18, 7, 3, 255, 17, 12, 2, 255, 17, 12, 3, 255, 21, 10, 5, 255, 18, 7, 1, 255, 18, 7, 1, 255, 21, 9, 3, 255, 20, 10, 3, 255, 19, 11, 1, 255, 28, 13, 4, 255, 27, 13, 3, 255, 24, 12, 4, 255, 21, 10, 1, 255, 26, 13, 5, 255, 30, 16, 4, 255, 27, 12, 4, 255, 22, 9, 3, 255, 22, 12, 4, 255, 21, 12, 1, 255, 23, 13, 0, 255, 24, 14, 1, 255, 25, 17, 5, 255, 24, 14, 4, 255, 31, 14, 7, 255, 24, 13, 3, 255, 23, 14, 2, 255, 34, 20, 6, 255, 32, 20, 2, 255, 28, 14, 2, 255, 34, 18, 3, 255, 39, 22, 5, 255, 38, 21, 6, 255, 38, 21, 6, 255, 38, 20, 3, 255, 41, 19, 0, 255, 40, 21, 2, 255, 39, 19, 4, 255, 41, 16, 5, 255, 36, 19, 3, 255, 45, 19, 6, 255, 34, 18, 4, 255, 30, 17, 1, 255, 44, 25, 5, 255, 28, 17, 6, 255, 33, 17, 3, 255, 44, 19, 1, 255, 44, 18, 3, 255, 45, 19, 2, 255, 49, 22, 2, 255, 47, 23, 2, 255, 47, 24, 4, 255, 50, 22, 7, 255, 41, 16, 2, 255, 44, 25, 4, 255, 50, 22, 0, 255, 43, 18, 4, 255, 45, 23, 6, 255, 47, 23, 3, 255, 46, 21, 4, 255, 47, 24, 3, 255, 43, 26, 2, 255, 47, 26, 3, 255, 45, 23, 1, 255, 43, 25, 2, 255, 42, 26, 3, 255, 51, 24, 2, 255, 46, 21, 2, 255, 46, 26, 6, 255, 53, 24, 2, 255, 46, 22, 3, 255, 45, 19, 2, 255, 48, 25, 2, 255, 38, 22, 5, 255, 48, 27, 4, 255, 59, 26, 6, 255, 49, 26, 2, 255, 40, 28, 1, 255, 53, 29, 7, 255, 57, 28, 5, 255, 51, 24, 2, 255, 51, 25, 3, 255, 55, 24, 2, 255, 52, 25, 0, 255, 55, 27, 4, 255, 54, 24, 4, 255, 45, 26, 1, 255, 58, 26, 3, 255, 53, 28, 4, 255, 45, 24, 3, 255, 58, 28, 6, 255, 52, 25, 2, 255, 53, 26, 17, 255, 51, 32, 23, 255, 55, 31, 15, 255, 55, 32, 5, 255, 57, 31, 4, 255, 55, 29, 3, 255, 49, 28, 4, 255, 56, 27, 8, 255, 56, 26, 6, 255, 60, 31, 4, 255, 61, 31, 6, 255, 55, 29, 2, 255, 54, 30, 3, 255, 50, 26, 6, 255, 53, 28, 5, 255, 66, 29, 4, 255, 63, 31, 5, 255, 58, 35, 7, 255, 64, 34, 6, 255, 59, 35, 4, 255, 60, 36, 8, 255, 57, 37, 8, 255, 58, 39, 10, 255, 63, 39, 15, 255, 60, 41, 15, 255, 62, 46, 15, 255, 63, 42, 16, 255, 65, 47, 24, 255, 67, 52, 26, 255, 64, 59, 19, 255, 54, 54, 19, 255, 60, 59, 27, 255, 61, 58, 24, 255, 63, 57, 32, 255, 64, 61, 40, 255, 60, 60, 44, 255, 64, 69, 42, 255, 65, 70, 41, 255, 65, 68, 34, 255, 71, 73, 44, 255, 72, 79, 39, 255, 74, 80, 49, 255, 81, 82, 52, 255, 78, 84, 49, 255, 74, 87, 66, 255, 75, 89, 61, 255, 81, 91, 67, 255, 79, 92, 67, 255, 83, 99, 73, 255, 86, 103, 78, 255, 88, 105, 79, 255, 90, 107, 81, 255, 93, 112, 86, 255, 93, 116, 89, 255, 94, 119, 91, 255, 97, 121, 92, 255, 99, 123, 93, 255, 96, 125, 94, 255, 95, 127, 96, 255, 101, 126, 100, 255, 100, 131, 95, 255, 98, 131, 90, 255, 102, 132, 95, 255, 102, 131, 97, 255, 103, 129, 97, 255, 102, 132, 99, 255, 101, 129, 95, 255, 100, 126, 90, 255, 97, 124, 85, 255, 100, 127, 88, 255, 98, 122, 86, 255, 97, 115, 79, 255, 95, 115, 77, 255, 93, 115, 74, 255, 95, 111, 71, 255, 95, 106, 70, 255, 96, 107, 63, 255, 93, 105, 61, 255, 90, 97, 58, 255, 90, 98, 59, 255, 89, 97, 51, 255, 90, 91, 46, 255, 91, 88, 47, 255, 87, 88, 40, 255, 81, 83, 38, 255, 87, 83, 38, 255, 93, 79, 24, 255, 91, 77, 30, 255, 84, 74, 24, 255, 85, 71, 24, 255, 91, 70, 22, 255, 89, 67, 26, 255, 85, 69, 18, 255, 82, 64, 13, 255, 79, 63, 21, 255, 74, 64, 13, 255, 81, 61, 13, 255, 85, 57, 16, 255, 83, 58, 11, 255, 80, 51, 11, 255, 81, 54, 12, 255, 75, 52, 6, 255, 89, 57, 13, 255, 100, 57, 11, 255, 91, 49, 5, 255, 76, 43, 4, 255, 76, 44, 7, 255, 81, 43, 5, 255, 80, 42, 2, 255, 82, 46, 6, 255, 83, 44, 10, 255, 78, 36, 6, 255, 81, 38, 6, 255, 80, 37, 4, 255, 80, 39, 2, 255, 75, 38, 3, 255, 81, 39, 7, 255, 79, 35, 5, 255, 85, 35, 6, 255, 84, 36, 6, 255, 80, 36, 3, 255, 83, 33, 2, 255, 80, 33, 8, 255, 76, 29, 8, 255, 80, 33, 5, 255, 79, 32, 3, 255, 82, 35, 8, 255, 78, 33, 7, 255, 77, 35, 4, 255, 71, 34, 4, 255, 77, 34, 4, 255, 81, 31, 2, 255, 80, 31, 3, 255, 76, 29, 2, 255, 86, 34, 3, 255, 88, 31, 2, 255, 84, 27, 2, 255, 83, 31, 4, 255, 86, 34, 5, 255, 87, 33, 3, 255, 81, 29, 1, 255, 81, 31, 5, 255, 81, 27, 4, 255, 80, 31, 1, 255, 77, 32, 3, 255, 78, 33, 7, 255, 78, 28, 4, 255, 82, 30, 1, 255, 85, 34, 2, 255, 87, 32, 2, 255, 89, 33, 6, 255, 78, 31, 3, 255, 72, 33, 4, 255, 75, 29, 4, 255, 79, 25, 2, 255, 72, 30, 1, 255, 75, 32, 5, 255, 76, 30, 1, 255, 73, 29, 1, 255, 71, 27, 8, 255, 64, 29, 3, 255, 67, 24, 2, 255, 71, 25, 4, 255, 71, 26, 4, 255, 71, 26, 3, 255, 70, 24, 3, 255, 71, 24, 5, 255, 69, 24, 5, 255, 67, 24, 2, 255, 69, 22, 3, 255, 68, 21, 3, 255, 70, 25, 3, 255, 70, 25, 3, 255, 69, 23, 3, 255, 67, 26, 3, 255, 64, 26, 3, 255, 61, 19, 0, 255, 58, 22, 5, 255, 69, 23, 7, 255, 80, 26, 4, 255, 79, 32, 2, 255, 83, 28, 3, 255, 79, 25, 6, 255, 73, 24, 4, 255, 71, 24, 4, 255, 55, 18, 0, 255, 59, 17, 1, 255, 63, 22, 4, 255, 65, 20, 3, 255, 66, 20, 2, 255, 66, 20, 5, 255, 63, 17, 4, 255, 58, 17, 4, 255, 82, 23, 5, 255, 90, 19, 3, 255, 89, 24, 7, 255, 91, 23, 5, 255, 92, 23, 4, 255, 94, 20, 3, 255, 90, 23, 4, 255, 85, 20, 4, 255, 76, 19, 5, 255, 75, 20, 4, 255, 81, 24, 2, 255, 90, 30, 2, 255, 88, 27, 1, 255, 86, 22, 7, 255, 88, 26, 4, 255, 85, 23, 2, 255, 80, 22, 4, 255, 64, 19, 1, 255, 49, 16, 3, 255, 49, 17, 2, 255, 55, 19, 6, 255, 60, 17, 5, 255, 52, 17, 5, 255, 44, 14, 3, 255, 50, 16, 4, 255, 47, 16, 5, 255, 50, 20, 2, 255, 48, 21, 2, 255, 55, 20, 3, 255, 61, 19, 3, 255, 61, 19, 2, 255, 60, 21, 2, 255, 62, 23, 3, 255, 60, 22, 2, 255, 66, 21, 4, 255, 67, 17, 2, 255, 65, 19, 1, 255, 63, 19, 3, 255, 72, 19, 4, 255, 82, 21, 5, 255, 74, 16, 1, 255, 73, 18, 1, 255, 68, 20, 1, 255, 67, 19, 2, 255, 67, 18, 2, 255, 63, 17, 2, 255, 63, 17, 2, 255, 62, 17, 2, 255, 60, 16, 0, 255, 63, 17, 1, 255, 68, 19, 3, 255, 68, 17, 3, 255, 64, 17, 2, 255, 63, 18, 2, 255, 65, 16, 1, 255, 66, 19, 2, 255, 68, 20, 3, 255, 68, 14, 1, 255, 60, 15, 2, 255, 58, 15, 1, 255, 54, 15, 1, 255, 53, 17, 1, 255, 56, 15, 2, 255, 56, 13, 4, 255, 59, 13, 4, 255, 69, 14, 4, 255, 62, 11, 4, 255, 46, 13, 6, 255, 37, 9, 1, 255, 49, 11, 1, 255, 52, 12, 4, 255, 40, 11, 1, 255, 38, 11, 3, 255, 46, 13, 3, 255, 55, 14, 2, 255, 47, 11, 2, 255, 32, 5, 1, 255, 40, 9, 1, 255, 34, 10, 3, 255, 29, 11, 3, 255, 28, 8, 2, 255, 33, 8, 3, 255, 34, 10, 2, 255, 32, 11, 3, 255, 39, 10, 4, 255, 42, 9, 2, 255, 39, 10, 2, 255, 41, 13, 5, 255, 42, 13, 3, 255, 38, 13, 2, 255, 29, 9, 4, 255, 27, 9, 2, 255, 28, 10, 3, 255, 11, 6, 3, 255, 11, 4, 2, 255, 11, 3, 1, 255, 12, 4, 2, 255, 12, 4, 2, 255, 9, 3, 0, 255, 11, 3, 1, 255, 14, 5, 3, 255, 12, 5, 2, 255, 13, 5, 3, 255, 16, 5, 3, 255, 16, 5, 3, 255, 13, 4, 2, 255, 13, 5, 2, 255, 15, 7, 4, 255, 16, 7, 5, 255, 18, 7, 5, 255, 18, 7, 4, 255, 23, 10, 5, 255, 12, 5, 1, 255, 12, 7, 1, 255, 16, 9, 3, 255, 17, 6, 3, 255, 19, 6, 3, 255, 20, 10, 5, 255, 19, 9, 2, 255, 19, 7, 1, 255, 21, 10, 6, 255, 19, 10, 5, 255, 19, 9, 4, 255, 17, 7, 1, 255, 19, 8, 1, 255, 21, 11, 3, 255, 20, 8, 0, 255, 24, 10, 1, 255, 24, 10, 2, 255, 21, 9, 2, 255, 20, 10, 2, 255, 23, 13, 4, 255, 18, 11, 1, 255, 20, 13, 2, 255, 24, 15, 4, 255, 27, 13, 4, 255, 27, 12, 3, 255, 27, 16, 6, 255, 23, 15, 3, 255, 27, 13, 4, 255, 24, 14, 3, 255, 22, 14, 1, 255, 27, 15, 0, 255, 29, 18, 2, 255, 34, 21, 3, 255, 33, 16, 1, 255, 31, 15, 2, 255, 35, 19, 4, 255, 38, 22, 3, 255, 38, 18, 2, 255, 42, 16, 4, 255, 38, 17, 3, 255, 39, 17, 0, 255, 41, 17, 2, 255, 35, 21, 4, 255, 37, 18, 3, 255, 32, 20, 2, 255, 37, 20, 4, 255, 41, 18, 1, 255, 27, 19, 3, 255, 39, 22, 5, 255, 43, 23, 3, 255, 34, 18, 1, 255, 46, 20, 4, 255, 52, 25, 7, 255, 40, 22, 0, 255, 40, 22, 2, 255, 48, 19, 4, 255, 47, 21, 2, 255, 44, 27, 4, 255, 50, 23, 3, 255, 44, 23, 3, 255, 44, 25, 7, 255, 43, 23, 4, 255, 40, 20, 0, 255, 42, 23, 4, 255, 46, 23, 7, 255, 44, 23, 4, 255, 45, 24, 3, 255, 43, 24, 3, 255, 42, 22, 5, 255, 48, 24, 7, 255, 43, 21, 4, 255, 41, 22, 1, 255, 47, 24, 0, 255, 46, 24, 7, 255, 54, 25, 5, 255, 51, 25, 6, 255, 47, 24, 4, 255, 51, 25, 6, 255, 52, 26, 3, 255, 51, 24, 2, 255, 48, 24, 2, 255, 49, 27, 4, 255, 53, 26, 2, 255, 52, 28, 5, 255, 50, 26, 3, 255, 59, 29, 5, 255, 57, 27, 3, 255, 53, 28, 4, 255, 47, 25, 2, 255, 57, 26, 7, 255, 56, 27, 5, 255, 42, 25, 1, 255, 46, 25, 4, 255, 53, 29, 4, 255, 55, 29, 1, 255, 55, 23, 3, 255, 56, 28, 5, 255, 55, 27, 3, 255, 57, 35, 6, 255, 53, 31, 3, 255, 55, 31, 5, 255, 52, 28, 0, 255, 58, 28, 4, 255, 54, 25, 8, 255, 53, 25, 4, 255, 53, 29, 1, 255, 53, 32, 5, 255, 52, 31, 8, 255, 50, 28, 7, 255, 55, 30, 6, 255, 45, 28, 3, 255, 63, 32, 6, 255, 58, 36, 6, 255, 59, 30, 10, 255, 57, 35, 7, 255, 48, 34, 6, 255, 54, 36, 14, 255, 59, 38, 11, 255, 58, 42, 9, 255, 59, 46, 11, 255, 61, 46, 16, 255, 62, 46, 17, 255, 64, 47, 15, 255, 68, 48, 16, 255, 60, 56, 20, 255, 56, 57, 23, 255, 62, 56, 27, 255, 57, 58, 36, 255, 63, 60, 42, 255, 68, 68, 26, 255, 65, 67, 28, 255, 65, 67, 37, 255, 67, 70, 43, 255, 71, 76, 42, 255, 71, 75, 49, 255, 70, 73, 52, 255, 70, 77, 58, 255, 77, 81, 62, 255, 75, 82, 58, 255, 72, 84, 61, 255, 80, 91, 66, 255, 81, 94, 68, 255, 82, 96, 70, 255, 85, 100, 74, 255, 87, 103, 77, 255, 89, 107, 80, 255, 92, 112, 84, 255, 95, 115, 87, 255, 95, 118, 89, 255, 99, 122, 94, 255, 99, 122, 94, 255, 99, 124, 95, 255, 101, 130, 99, 255, 97, 130, 98, 255, 102, 132, 101, 255, 102, 134, 98, 255, 100, 132, 95, 255, 102, 133, 99, 255, 104, 132, 103, 255, 102, 128, 102, 255, 105, 132, 98, 255, 104, 131, 95, 255, 100, 126, 89, 255, 98, 124, 86, 255, 99, 124, 85, 255, 99, 121, 83, 255, 98, 117, 81, 255, 97, 115, 73, 255, 97, 117, 71, 255, 93, 107, 76, 255, 93, 102, 79, 255, 93, 103, 72, 255, 91, 103, 58, 255, 90, 98, 57, 255, 86, 92, 56, 255, 87, 90, 57, 255, 91, 90, 42, 255, 92, 88, 35, 255, 92, 85, 45, 255, 83, 81, 36, 255, 84, 80, 38, 255, 90, 80, 35, 255, 88, 75, 29, 255, 87, 76, 22, 255, 88, 69, 30, 255, 91, 66, 19, 255, 85, 65, 22, 255, 78, 66, 15, 255, 79, 62, 19, 255, 82, 62, 7, 255, 83, 63, 8, 255, 85, 61, 8, 255, 79, 55, 12, 255, 84, 56, 12, 255, 87, 52, 15, 255, 80, 54, 9, 255, 73, 54, 3, 255, 97, 56, 15, 255, 113, 52, 9, 255, 107, 54, 5, 255, 85, 46, 6, 255, 76, 43, 8, 255, 79, 44, 10, 255, 82, 44, 8, 255, 81, 43, 3, 255, 79, 41, 7, 255, 75, 39, 7, 255, 77, 40, 10, 255, 74, 39, 9, 255, 75, 40, 4, 255, 76, 44, 4, 255, 79, 41, 7, 255, 77, 36, 8, 255, 79, 35, 4, 255, 76, 33, 1, 255, 77, 34, 5, 255, 85, 35, 7, 255, 81, 33, 3, 255, 78, 35, 2, 255, 83, 38, 5, 255, 81, 35, 2, 255, 78, 31, 2, 255, 76, 30, 3, 255, 74, 32, 5, 255, 73, 32, 5, 255, 94, 37, 6, 255, 105, 36, 0, 255, 96, 34, 8, 255, 79, 27, 8, 255, 86, 32, 6, 255, 89, 31, 3, 255, 81, 30, 1, 255, 82, 32, 1, 255, 84, 33, 1, 255, 83, 32, 2, 255, 80, 29, 1, 255, 80, 32, 4, 255, 79, 30, 5, 255, 79, 29, 0, 255, 81, 30, 1, 255, 82, 29, 4, 255, 80, 27, 3, 255, 76, 28, 0, 255, 83, 32, 3, 255, 91, 33, 3, 255, 94, 36, 0, 255, 82, 31, 0, 255, 72, 29, 3, 255, 71, 29, 7, 255, 74, 26, 4, 255, 76, 27, 3, 255, 73, 31, 6, 255, 75, 30, 3, 255, 74, 27, 2, 255, 76, 25, 7, 255, 69, 28, 2, 255, 71, 25, 2, 255, 76, 25, 4, 255, 76, 25, 3, 255, 71, 22, 2, 255, 70, 24, 5, 255, 64, 21, 4, 255, 64, 21, 4, 255, 66, 22, 5, 255, 64, 21, 4, 255, 65, 20, 1, 255, 71, 24, 2, 255, 68, 24, 2, 255, 65, 26, 3, 255, 67, 21, 2, 255, 65, 24, 2, 255, 67, 23, 3, 255, 57, 23, 2, 255, 69, 24, 2, 255, 91, 29, 6, 255, 95, 28, 2, 255, 97, 30, 4, 255, 87, 21, 1, 255, 94, 24, 3, 255, 84, 21, 3, 255, 67, 21, 4, 255, 57, 19, 3, 255, 61, 23, 0, 255, 70, 25, 2, 255, 79, 26, 5, 255, 70, 20, 2, 255, 58, 19, 1, 255, 62, 20, 2, 255, 84, 25, 3, 255, 94, 25, 4, 255, 89, 22, 1, 255, 92, 23, 1, 255, 92, 24, 3, 255, 92, 24, 6, 255, 84, 24, 2, 255, 92, 27, 0, 255, 94, 29, 1, 255, 88, 26, 1, 255, 85, 25, 4, 255, 86, 21, 2, 255, 93, 22, 2, 255, 91, 21, 2, 255, 88, 19, 2, 255, 83, 24, 3, 255, 85, 22, 3, 255, 73, 19, 3, 255, 59, 20, 4, 255, 61, 21, 8, 255, 60, 18, 2, 255, 58, 14, 0, 255, 60, 20, 1, 255, 50, 17, 1, 255, 41, 14, 4, 255, 44, 14, 5, 255, 50, 13, 5, 255, 57, 15, 6, 255, 56, 17, 4, 255, 61, 16, 2, 255, 65, 16, 2, 255, 57, 19, 1, 255, 63, 20, 4, 255, 67, 19, 4, 255, 67, 18, 4, 255, 67, 17, 3, 255, 71, 20, 5, 255, 70, 20, 6, 255, 68, 19, 2, 255, 72, 22, 3, 255, 73, 21, 3, 255, 69, 18, 2, 255, 65, 18, 2, 255, 64, 18, 2, 255, 63, 18, 2, 255, 63, 14, 1, 255, 64, 16, 2, 255, 64, 17, 3, 255, 62, 16, 1, 255, 64, 16, 2, 255, 67, 19, 4, 255, 66, 15, 2, 255, 68, 19, 3, 255, 67, 18, 1, 255, 69, 17, 0, 255, 69, 18, 1, 255, 66, 17, 2, 255, 70, 18, 4, 255, 60, 15, 1, 255, 52, 19, 2, 255, 55, 17, 2, 255, 61, 15, 3, 255, 54, 11, 0, 255, 57, 13, 4, 255, 66, 12, 2, 255, 70, 18, 3, 255, 56, 13, 0, 255, 49, 12, 5, 255, 48, 10, 3, 255, 42, 8, 0, 255, 41, 11, 2, 255, 43, 11, 1, 255, 42, 13, 3, 255, 42, 12, 3, 255, 43, 11, 3, 255, 40, 9, 2, 255, 36, 9, 2, 255, 32, 12, 3, 255, 30, 10, 3, 255, 27, 8, 2, 255, 30, 11, 5, 255, 29, 10, 3, 255, 28, 11, 2, 255, 31, 12, 3, 255, 42, 11, 5, 255, 43, 8, 1, 255, 38, 11, 0, 255, 50, 14, 6, 255, 57, 14, 5, 255, 49, 13, 1, 255, 38, 10, 5, 255, 33, 9, 2, 255, 30, 7, 1, 255, 12, 3, 2, 255, 11, 3, 1, 255, 11, 3, 1, 255, 11, 3, 1, 255, 11, 3, 1, 255, 10, 3, 0, 255, 12, 3, 1, 255, 12, 3, 1, 255, 11, 3, 0, 255, 10, 1, 0, 255, 14, 3, 2, 255, 16, 5, 3, 255, 16, 6, 4, 255, 17, 7, 3, 255, 17, 7, 4, 255, 16, 6, 4, 255, 16, 6, 4, 255, 15, 4, 2, 255, 16, 5, 3, 255, 15, 4, 2, 255, 16, 6, 4, 255, 17, 8, 3, 255, 18, 7, 3, 255, 17, 8, 3, 255, 11, 7, 1, 255, 13, 7, 0, 255, 19, 8, 3, 255, 17, 8, 3, 255, 16, 8, 2, 255, 18, 10, 4, 255, 19, 9, 3, 255, 19, 8, 2, 255, 20, 11, 4, 255, 18, 9, 0, 255, 22, 10, 1, 255, 23, 10, 2, 255, 21, 10, 4, 255, 18, 9, 3, 255, 23, 16, 6, 255, 21, 16, 3, 255, 19, 13, 1, 255, 22, 12, 2, 255, 28, 14, 6, 255, 29, 13, 5, 255, 26, 14, 4, 255, 24, 12, 3, 255, 32, 13, 6, 255, 28, 13, 3, 255, 28, 12, 1, 255, 31, 12, 1, 255, 30, 12, 0, 255, 30, 16, 3, 255, 30, 17, 3, 255, 27, 16, 5, 255, 25, 16, 5, 255, 28, 19, 5, 255, 29, 15, 3, 255, 33, 16, 2, 255, 35, 20, 4, 255, 36, 17, 6, 255, 37, 17, 3, 255, 34, 21, 1, 255, 37, 17, 1, 255, 37, 20, 7, 255, 39, 18, 5, 255, 45, 17, 5, 255, 33, 22, 5, 255, 40, 21, 4, 255, 40, 20, 2, 255, 33, 19, 2, 255, 38, 18, 2, 255, 45, 24, 5, 255, 42, 23, 2, 255, 38, 23, 1, 255, 45, 22, 4, 255, 50, 21, 3, 255, 48, 21, 1, 255, 46, 22, 5, 255, 43, 23, 2, 255, 38, 20, 2, 255, 41, 20, 3, 255, 45, 24, 0, 255, 43, 21, 6, 255, 46, 18, 5, 255, 45, 22, 4, 255, 39, 22, 0, 255, 45, 25, 5, 255, 44, 22, 6, 255, 41, 20, 4, 255, 47, 26, 9, 255, 47, 24, 3, 255, 40, 23, 0, 255, 43, 22, 2, 255, 47, 20, 1, 255, 52, 23, 3, 255, 47, 24, 0, 255, 46, 20, 3, 255, 53, 29, 4, 255, 52, 25, 3, 255, 52, 26, 5, 255, 48, 27, 0, 255, 55, 28, 4, 255, 52, 28, 7, 255, 50, 26, 3, 255, 51, 26, 1, 255, 54, 24, 0, 255, 52, 25, 2, 255, 46, 26, 2, 255, 57, 23, 7, 255, 54, 27, 6, 255, 52, 25, 4, 255, 52, 25, 8, 255, 48, 25, 3, 255, 64, 29, 4, 255, 58, 27, 4, 255, 55, 29, 2, 255, 58, 27, 0, 255, 56, 27, 2, 255, 53, 26, 3, 255, 52, 28, 4, 255, 53, 29, 3, 255, 58, 31, 4, 255, 54, 26, 3, 255, 45, 21, 4, 255, 48, 26, 6, 255, 48, 25, 6, 255, 56, 28, 9, 255, 61, 31, 3, 255, 55, 31, 6, 255, 46, 30, 4, 255, 62, 27, 5, 255, 52, 29, 5, 255, 51, 25, 8, 255, 53, 30, 10, 255, 46, 35, 7, 255, 56, 38, 8, 255, 62, 39, 9, 255, 57, 42, 9, 255, 55, 42, 6, 255, 63, 47, 11, 255, 60, 46, 10, 255, 65, 52, 13, 255, 67, 51, 24, 255, 58, 52, 22, 255, 59, 54, 29, 255, 67, 61, 28, 255, 63, 65, 32, 255, 60, 59, 39, 255, 67, 68, 28, 255, 69, 69, 25, 255, 70, 70, 35, 255, 71, 74, 39, 255, 70, 77, 43, 255, 71, 75, 53, 255, 72, 79, 42, 255, 73, 84, 49, 255, 76, 80, 65, 255, 76, 86, 58, 255, 74, 88, 60, 255, 82, 93, 69, 255, 80, 96, 70, 255, 84, 98, 74, 255, 88, 102, 77, 255, 89, 104, 78, 255, 92, 111, 82, 255, 91, 114, 82, 255, 94, 117, 85, 255, 100, 123, 92, 255, 98, 121, 94, 255, 99, 124, 97, 255, 103, 131, 102, 255, 99, 130, 99, 255, 99, 133, 100, 255, 98, 133, 100, 255, 100, 134, 99, 255, 103, 135, 98, 255, 104, 136, 101, 255, 104, 135, 103, 255, 104, 130, 102, 255, 104, 130, 100, 255, 104, 130, 99, 255, 102, 126, 94, 255, 102, 125, 92, 255, 100, 121, 88, 255, 100, 118, 84, 255, 101, 119, 83, 255, 97, 120, 73, 255, 94, 113, 68, 255, 92, 108, 70, 255, 93, 105, 72, 255, 92, 101, 70, 255, 88, 100, 51, 255, 92, 101, 55, 255, 86, 94, 49, 255, 86, 87, 54, 255, 89, 85, 50, 255, 90, 86, 37, 255, 91, 82, 36, 255, 88, 83, 24, 255, 86, 80, 23, 255, 87, 79, 33, 255, 85, 72, 31, 255, 84, 69, 33, 255, 85, 67, 18, 255, 90, 69, 15, 255, 86, 66, 17, 255, 85, 66, 18, 255, 83, 64, 10, 255, 82, 58, 17, 255, 84, 58, 8, 255, 83, 52, 17, 255, 82, 53, 20, 255, 76, 54, 9, 255, 80, 58, 9, 255, 80, 55, 11, 255, 74, 48, 7, 255, 90, 54, 13, 255, 102, 54, 8, 255, 95, 50, 3, 255, 80, 44, 4, 255, 71, 38, 4, 255, 75, 43, 10, 255, 76, 42, 7, 255, 78, 44, 7, 255, 78, 43, 6, 255, 75, 42, 6, 255, 76, 42, 6, 255, 73, 37, 5, 255, 75, 37, 5, 255, 75, 34, 7, 255, 79, 38, 5, 255, 75, 38, 1, 255, 77, 35, 2, 255, 73, 32, 6, 255, 69, 30, 7, 255, 83, 36, 5, 255, 79, 36, 0, 255, 74, 34, 0, 255, 79, 37, 2, 255, 79, 34, 1, 255, 79, 33, 2, 255, 79, 34, 5, 255, 73, 31, 4, 255, 86, 41, 8, 255, 98, 43, 3, 255, 107, 41, 5, 255, 109, 41, 4, 255, 99, 37, 3, 255, 86, 30, 2, 255, 84, 34, 4, 255, 80, 33, 4, 255, 82, 35, 3, 255, 81, 30, 2, 255, 82, 31, 4, 255, 80, 31, 5, 255, 74, 29, 2, 255, 76, 29, 4, 255, 79, 32, 2, 255, 82, 32, 0, 255, 82, 30, 2, 255, 82, 32, 5, 255, 75, 31, 4, 255, 73, 29, 1, 255, 81, 31, 2, 255, 92, 37, 7, 255, 89, 35, 6, 255, 76, 26, 3, 255, 73, 28, 3, 255, 76, 28, 3, 255, 74, 25, 6, 255, 68, 26, 3, 255, 73, 27, 3, 255, 72, 27, 3, 255, 75, 23, 3, 255, 76, 26, 1, 255, 71, 24, 0, 255, 72, 21, 1, 255, 71, 20, 1, 255, 73, 24, 3, 255, 70, 23, 3, 255, 69, 24, 3, 255, 66, 22, 4, 255, 63, 23, 5, 255, 61, 24, 4, 255, 67, 25, 3, 255, 75, 27, 4, 255, 67, 23, 2, 255, 58, 24, 4, 255, 62, 26, 2, 255, 68, 23, 3, 255, 68, 20, 3, 255, 69, 23, 5, 255, 64, 24, 1, 255, 73, 26, 2, 255, 86, 25, 4, 255, 100, 27, 6, 255, 96, 27, 3, 255, 96, 27, 3, 255, 96, 24, 4, 255, 77, 24, 7, 255, 60, 20, 2, 255, 72, 27, 3, 255, 82, 27, 3, 255, 86, 28, 4, 255, 77, 27, 7, 255, 61, 21, 1, 255, 64, 20, 2, 255, 70, 21, 2, 255, 83, 25, 5, 255, 86, 23, 1, 255, 91, 27, 2, 255, 92, 27, 4, 255, 90, 28, 5, 255, 76, 24, 2, 255, 74, 24, 6, 255, 84, 26, 4, 255, 86, 24, 0, 255, 93, 28, 2, 255, 91, 27, 3, 255, 88, 25, 4, 255, 96, 27, 2, 255, 94, 17, 2, 255, 81, 21, 4, 255, 79, 23, 7, 255, 57, 16, 2, 255, 55, 17, 2, 255, 56, 16, 4, 255, 58, 16, 2, 255, 55, 18, 5, 255, 46, 19, 1, 255, 50, 18, 1, 255, 46, 17, 9, 255, 43, 13, 4, 255, 47, 16, 6, 255, 49, 17, 3, 255, 52, 21, 3, 255, 58, 18, 2, 255, 60, 18, 3, 255, 54, 19, 1, 255, 51, 18, 1, 255, 57, 17, 2, 255, 61, 19, 3, 255, 62, 18, 2, 255, 69, 17, 3, 255, 72, 16, 3, 255, 66, 18, 2, 255, 65, 21, 2, 255, 69, 23, 5, 255, 65, 18, 2, 255, 62, 16, 2, 255, 63, 18, 2, 255, 65, 20, 5, 255, 71, 19, 6, 255, 66, 17, 3, 255, 63, 15, 1, 255, 63, 17, 2, 255, 64, 17, 2, 255, 64, 15, 2, 255, 64, 14, 1, 255, 66, 17, 3, 255, 66, 14, 1, 255, 68, 14, 2, 255, 69, 17, 6, 255, 66, 17, 6, 255, 60, 14, 3, 255, 59, 17, 1, 255, 57, 17, 3, 255, 58, 14, 3, 255, 61, 15, 3, 255, 57, 14, 2, 255, 52, 13, 2, 255, 50, 13, 0, 255, 53, 18, 1, 255, 44, 14, 0, 255, 43, 11, 5, 255, 49, 12, 5, 255, 44, 12, 3, 255, 38, 12, 4, 255, 43, 11, 2, 255, 45, 12, 2, 255, 39, 10, 3, 255, 31, 6, 2, 255, 31, 6, 1, 255, 39, 12, 5, 255, 39, 10, 5, 255, 44, 11, 7, 255, 37, 8, 4, 255, 29, 12, 5, 255, 27, 13, 2, 255, 36, 11, 5, 255, 46, 12, 4, 255, 49, 12, 3, 255, 49, 12, 2, 255, 49, 11, 2, 255, 53, 12, 3, 255, 61, 13, 2, 255, 62, 13, 1, 255, 45, 10, 5, 255, 38, 8, 2, 255, 37, 8, 4, 255, 7, 0, 0, 255, 8, 1, 1, 255, 10, 3, 1, 255, 10, 3, 1, 255, 11, 3, 1, 255, 11, 3, 1, 255, 12, 2, 1, 255, 9, 4, 1, 255, 11, 7, 4, 255, 12, 5, 3, 255, 13, 3, 1, 255, 13, 3, 1, 255, 14, 5, 1, 255, 15, 4, 2, 255, 14, 3, 2, 255, 13, 3, 1, 255, 16, 6, 4, 255, 15, 5, 3, 255, 17, 6, 4, 255, 16, 7, 5, 255, 14, 5, 3, 255, 13, 4, 1, 255, 15, 6, 1, 255, 19, 8, 4, 255, 16, 8, 2, 255, 15, 7, 1, 255, 18, 8, 4, 255, 17, 9, 3, 255, 17, 10, 4, 255, 19, 11, 5, 255, 17, 7, 1, 255, 18, 7, 1, 255, 16, 7, 0, 255, 21, 11, 1, 255, 22, 12, 3, 255, 19, 8, 1, 255, 21, 9, 6, 255, 18, 9, 3, 255, 20, 11, 1, 255, 20, 11, 0, 255, 19, 11, 1, 255, 23, 12, 4, 255, 25, 11, 4, 255, 22, 9, 1, 255, 20, 9, 0, 255, 21, 11, 2, 255, 34, 16, 7, 255, 28, 16, 4, 255, 29, 18, 6, 255, 34, 18, 7, 255, 28, 13, 3, 255, 32, 15, 5, 255, 34, 18, 3, 255, 33, 20, 2, 255, 28, 17, 5, 255, 24, 14, 5, 255, 26, 16, 2, 255, 33, 19, 4, 255, 36, 18, 4, 255, 36, 16, 2, 255, 33, 15, 1, 255, 33, 20, 3, 255, 37, 21, 5, 255, 36, 20, 3, 255, 37, 21, 2, 255, 41, 18, 5, 255, 36, 22, 3, 255, 44, 23, 6, 255, 50, 22, 8, 255, 46, 21, 6, 255, 47, 21, 7, 255, 48, 22, 5, 255, 43, 19, 2, 255, 40, 24, 4, 255, 46, 26, 7, 255, 45, 21, 2, 255, 43, 20, 1, 255, 46, 24, 5, 255, 42, 21, 1, 255, 41, 18, 2, 255, 46, 22, 5, 255, 50, 24, 3, 255, 47, 21, 6, 255, 46, 20, 3, 255, 46, 25, 3, 255, 40, 23, 0, 255, 40, 20, 0, 255, 43, 23, 5, 255, 39, 22, 4, 255, 47, 24, 5, 255, 51, 21, 9, 255, 45, 22, 6, 255, 56, 23, 7, 255, 32, 21, 4, 255, 47, 21, 3, 255, 42, 22, 1, 255, 44, 22, 4, 255, 54, 29, 4, 255, 48, 27, 3, 255, 46, 27, 4, 255, 52, 30, 4, 255, 49, 27, 3, 255, 50, 28, 5, 255, 53, 28, 4, 255, 49, 23, 0, 255, 59, 24, 2, 255, 60, 26, 6, 255, 52, 29, 7, 255, 50, 23, 2, 255, 54, 29, 1, 255, 59, 30, 3, 255, 62, 25, 6, 255, 58, 26, 4, 255, 61, 28, 1, 255, 57, 30, 3, 255, 51, 27, 6, 255, 56, 28, 6, 255, 57, 25, 2, 255, 54, 23, 2, 255, 54, 28, 6, 255, 53, 29, 9, 255, 45, 22, 2, 255, 51, 25, 5, 255, 56, 26, 7, 255, 58, 27, 2, 255, 57, 28, 3, 255, 52, 24, 3, 255, 56, 29, 5, 255, 48, 25, 8, 255, 57, 28, 5, 255, 61, 26, 7, 255, 51, 30, 8, 255, 49, 29, 2, 255, 52, 33, 6, 255, 52, 35, 10, 255, 55, 33, 9, 255, 63, 38, 10, 255, 58, 40, 5, 255, 62, 43, 11, 255, 62, 42, 16, 255, 61, 45, 18, 255, 60, 49, 12, 255, 58, 52, 18, 255, 62, 55, 31, 255, 63, 54, 30, 255, 67, 61, 21, 255, 66, 64, 20, 255, 60, 61, 24, 255, 63, 63, 37, 255, 68, 67, 42, 255, 71, 73, 37, 255, 69, 72, 45, 255, 68, 75, 40, 255, 71, 77, 49, 255, 73, 82, 45, 255, 73, 86, 52, 255, 75, 83, 61, 255, 77, 90, 60, 255, 75, 91, 60, 255, 81, 94, 68, 255, 79, 97, 73, 255, 84, 100, 77, 255, 88, 104, 81, 255, 94, 112, 86, 255, 93, 114, 86, 255, 89, 114, 84, 255, 95, 122, 90, 255, 100, 125, 95, 255, 102, 127, 98, 255, 100, 128, 101, 255, 100, 131, 103, 255, 99, 132, 102, 255, 100, 135, 103, 255, 98, 136, 102, 255, 101, 135, 102, 255, 105, 136, 103, 255, 101, 136, 98, 255, 100, 134, 97, 255, 106, 135, 102, 255, 106, 133, 99, 255, 103, 130, 95, 255, 100, 125, 92, 255, 104, 126, 92, 255, 103, 123, 87, 255, 102, 120, 83, 255, 97, 117, 78, 255, 93, 117, 79, 255, 91, 109, 79, 255, 91, 108, 65, 255, 88, 106, 59, 255, 89, 101, 68, 255, 88, 98, 56, 255, 85, 93, 56, 255, 86, 92, 48, 255, 85, 89, 44, 255, 84, 83, 46, 255, 86, 83, 39, 255, 89, 83, 25, 255, 90, 78, 26, 255, 87, 76, 19, 255, 84, 76, 22, 255, 79, 68, 24, 255, 84, 68, 27, 255, 86, 70, 15, 255, 83, 68, 15, 255, 81, 60, 24, 255, 84, 60, 12, 255, 84, 63, 12, 255, 71, 52, 21, 255, 77, 58, 18, 255, 82, 56, 12, 255, 79, 49, 17, 255, 75, 51, 11, 255, 80, 52, 6, 255, 80, 47, 7, 255, 76, 48, 10, 255, 78, 51, 11, 255, 81, 48, 8, 255, 81, 45, 7, 255, 80, 44, 7, 255, 82, 44, 9, 255, 80, 40, 8, 255, 79, 40, 9, 255, 78, 39, 7, 255, 73, 37, 7, 255, 72, 36, 3, 255, 77, 43, 3, 255, 76, 40, 2, 255, 80, 38, 4, 255, 82, 33, 10, 255, 79, 33, 4, 255, 78, 38, 3, 255, 79, 35, 3, 255, 76, 33, 9, 255, 67, 27, 8, 255, 78, 33, 10, 255, 78, 35, 3, 255, 74, 32, 5, 255, 76, 32, 7, 255, 77, 32, 7, 255, 76, 30, 5, 255, 77, 30, 6, 255, 74, 28, 5, 255, 76, 28, 1, 255, 89, 36, 5, 255, 98, 38, 5, 255, 100, 34, 2, 255, 100, 33, 1, 255, 87, 29, 0, 255, 80, 29, 4, 255, 77, 31, 3, 255, 78, 32, 2, 255, 82, 32, 5, 255, 81, 29, 7, 255, 76, 27, 4, 255, 77, 30, 5, 255, 83, 30, 2, 255, 79, 31, 2, 255, 72, 31, 3, 255, 73, 31, 6, 255, 76, 30, 4, 255, 80, 31, 3, 255, 80, 33, 1, 255, 81, 32, 1, 255, 83, 29, 4, 255, 79, 27, 4, 255, 75, 28, 3, 255, 74, 31, 4, 255, 74, 28, 3, 255, 78, 29, 5, 255, 80, 29, 4, 255, 79, 27, 5, 255, 66, 25, 4, 255, 68, 24, 2, 255, 73, 25, 6, 255, 71, 25, 2, 255, 73, 26, 3, 255, 71, 24, 3, 255, 70, 23, 0, 255, 70, 22, 0, 255, 72, 25, 1, 255, 69, 23, 1, 255, 65, 21, 2, 255, 62, 21, 0, 255, 68, 23, 2, 255, 74, 24, 5, 255, 70, 22, 6, 255, 65, 24, 7, 255, 64, 24, 2, 255, 71, 22, 4, 255, 63, 23, 5, 255, 57, 23, 3, 255, 60, 22, 2, 255, 65, 21, 3, 255, 60, 20, 1, 255, 74, 23, 4, 255, 87, 25, 3, 255, 98, 27, 7, 255, 87, 28, 7, 255, 62, 24, 2, 255, 71, 20, 5, 255, 78, 24, 4, 255, 90, 23, 1, 255, 87, 27, 2, 255, 75, 24, 4, 255, 68, 19, 5, 255, 66, 23, 7, 255, 76, 25, 5, 255, 84, 23, 2, 255, 90, 25, 4, 255, 79, 21, 3, 255, 76, 20, 4, 255, 72, 21, 5, 255, 61, 17, 0, 255, 57, 19, 3, 255, 55, 17, 5, 255, 64, 19, 5, 255, 78, 23, 2, 255, 80, 24, 0, 255, 79, 26, 4, 255, 90, 23, 7, 255, 89, 22, 8, 255, 71, 18, 0, 255, 85, 25, 8, 255, 61, 14, 4, 255, 43, 19, 5, 255, 50, 22, 4, 255, 61, 15, 0, 255, 66, 20, 6, 255, 63, 19, 6, 255, 68, 16, 2, 255, 64, 17, 4, 255, 51, 15, 2, 255, 46, 17, 5, 255, 40, 15, 1, 255, 47, 15, 1, 255, 61, 16, 5, 255, 51, 14, 2, 255, 53, 12, 3, 255, 56, 18, 4, 255, 57, 17, 3, 255, 58, 18, 3, 255, 60, 20, 3, 255, 64, 15, 1, 255, 68, 17, 3, 255, 69, 18, 3, 255, 72, 16, 0, 255, 73, 17, 4, 255, 69, 16, 2, 255, 67, 19, 4, 255, 68, 20, 4, 255, 68, 18, 2, 255, 73, 19, 5, 255, 67, 16, 2, 255, 62, 14, 0, 255, 62, 16, 2, 255, 64, 17, 3, 255, 65, 17, 3, 255, 61, 15, 1, 255, 63, 16, 0, 255, 67, 16, 0, 255, 68, 17, 2, 255, 66, 15, 4, 255, 59, 12, 2, 255, 57, 15, 1, 255, 61, 17, 2, 255, 63, 13, 3, 255, 51, 10, 1, 255, 48, 14, 0, 255, 51, 13, 1, 255, 54, 15, 5, 255, 46, 15, 7, 255, 43, 9, 0, 255, 44, 10, 2, 255, 39, 11, 4, 255, 40, 9, 1, 255, 43, 11, 1, 255, 40, 10, 2, 255, 41, 9, 1, 255, 43, 10, 3, 255, 37, 8, 3, 255, 32, 9, 5, 255, 33, 11, 5, 255, 36, 11, 5, 255, 39, 13, 7, 255, 33, 15, 4, 255, 26, 11, 1, 255, 35, 10, 2, 255, 39, 11, 3, 255, 32, 9, 2, 255, 37, 12, 1, 255, 52, 14, 1, 255, 60, 13, 2, 255, 61, 11, 2, 255, 61, 11, 4, 255, 58, 11, 2, 255, 51, 12, 2, 255, 38, 9, 1, 255, 33, 7, 0, 255, 35, 9, 2, 255, 8, 2, 2, 255, 7, 2, 2, 255, 7, 2, 1, 255, 7, 3, 0, 255, 9, 2, 0, 255, 10, 1, 0, 255, 11, 2, 1, 255, 11, 4, 2, 255, 12, 5, 3, 255, 14, 4, 3, 255, 14, 3, 1, 255, 15, 6, 3, 255, 15, 8, 2, 255, 14, 5, 3, 255, 13, 4, 1, 255, 12, 5, 2, 255, 13, 6, 3, 255, 14, 4, 2, 255, 15, 4, 2, 255, 12, 7, 3, 255, 11, 7, 2, 255, 12, 6, 3, 255, 16, 6, 4, 255, 21, 6, 3, 255, 19, 6, 3, 255, 19, 8, 3, 255, 18, 11, 5, 255, 15, 8, 2, 255, 16, 8, 3, 255, 18, 9, 4, 255, 14, 6, 0, 255, 19, 9, 3, 255, 17, 7, 1, 255, 19, 10, 1, 255, 21, 11, 3, 255, 19, 9, 4, 255, 22, 12, 5, 255, 19, 9, 1, 255, 20, 9, 2, 255, 19, 8, 2, 255, 20, 11, 3, 255, 24, 14, 5, 255, 26, 12, 4, 255, 24, 12, 2, 255, 24, 16, 4, 255, 20, 14, 3, 255, 26, 13, 3, 255, 24, 13, 1, 255, 24, 16, 3, 255, 23, 12, 2, 255, 22, 13, 5, 255, 31, 13, 2, 255, 39, 18, 2, 255, 38, 20, 2, 255, 31, 14, 0, 255, 31, 17, 3, 255, 32, 17, 1, 255, 31, 15, 2, 255, 35, 16, 4, 255, 40, 20, 2, 255, 35, 17, 2, 255, 29, 16, 5, 255, 30, 19, 4, 255, 36, 21, 0, 255, 45, 23, 2, 255, 39, 14, 4, 255, 39, 20, 2, 255, 42, 24, 7, 255, 43, 18, 4, 255, 41, 21, 4, 255, 38, 20, 1, 255, 47, 16, 0, 255, 50, 16, 2, 255, 43, 23, 6, 255, 36, 23, 4, 255, 42, 21, 2, 255, 48, 24, 3, 255, 46, 23, 4, 255, 45, 20, 5, 255, 47, 20, 4, 255, 50, 23, 4, 255, 48, 23, 3, 255, 45, 25, 3, 255, 47, 25, 4, 255, 45, 23, 2, 255, 47, 26, 5, 255, 42, 23, 5, 255, 42, 25, 6, 255, 41, 25, 4, 255, 45, 25, 1, 255, 46, 23, 5, 255, 39, 24, 3, 255, 51, 29, 3, 255, 50, 22, 4, 255, 50, 25, 5, 255, 48, 24, 1, 255, 51, 26, 6, 255, 49, 27, 4, 255, 45, 25, 1, 255, 47, 27, 5, 255, 48, 27, 6, 255, 48, 28, 5, 255, 51, 24, 0, 255, 57, 25, 4, 255, 52, 23, 2, 255, 49, 24, 4, 255, 48, 24, 3, 255, 56, 26, 6, 255, 55, 26, 3, 255, 50, 31, 0, 255, 54, 31, 0, 255, 62, 29, 5, 255, 60, 27, 5, 255, 55, 31, 1, 255, 55, 29, 3, 255, 52, 25, 6, 255, 49, 24, 2, 255, 58, 28, 4, 255, 54, 27, 4, 255, 52, 29, 6, 255, 51, 25, 6, 255, 44, 26, 5, 255, 43, 27, 4, 255, 50, 26, 4, 255, 59, 27, 4, 255, 59, 26, 3, 255, 59, 28, 4, 255, 55, 28, 4, 255, 52, 29, 6, 255, 57, 31, 2, 255, 58, 28, 3, 255, 54, 32, 9, 255, 49, 29, 3, 255, 53, 32, 6, 255, 60, 31, 17, 255, 57, 31, 12, 255, 60, 38, 8, 255, 65, 41, 8, 255, 65, 41, 11, 255, 61, 42, 17, 255, 58, 42, 23, 255, 60, 46, 20, 255, 61, 57, 11, 255, 62, 60, 11, 255, 64, 57, 23, 255, 67, 58, 24, 255, 64, 57, 35, 255, 61, 61, 32, 255, 64, 68, 27, 255, 65, 65, 46, 255, 64, 64, 52, 255, 68, 71, 52, 255, 73, 76, 55, 255, 71, 78, 47, 255, 70, 80, 57, 255, 72, 84, 66, 255, 77, 86, 59, 255, 77, 89, 66, 255, 74, 93, 67, 255, 80, 96, 71, 255, 82, 101, 80, 255, 84, 103, 82, 255, 89, 108, 87, 255, 88, 109, 86, 255, 94, 119, 92, 255, 96, 122, 93, 255, 93, 123, 93, 255, 96, 125, 96, 255, 99, 128, 99, 255, 98, 131, 102, 255, 96, 133, 103, 255, 100, 138, 107, 255, 101, 138, 106, 255, 101, 140, 107, 255, 104, 135, 106, 255, 106, 136, 106, 255, 101, 137, 100, 255, 101, 137, 99, 255, 101, 135, 101, 255, 105, 132, 97, 255, 103, 131, 95, 255, 101, 129, 94, 255, 101, 125, 90, 255, 101, 121, 85, 255, 100, 121, 82, 255, 98, 120, 80, 255, 92, 114, 82, 255, 90, 106, 79, 255, 93, 108, 72, 255, 89, 105, 60, 255, 87, 99, 59, 255, 89, 96, 62, 255, 89, 93, 51, 255, 89, 88, 54, 255, 87, 88, 49, 255, 85, 87, 39, 255, 85, 85, 36, 255, 85, 79, 37, 255, 90, 73, 42, 255, 89, 74, 29, 255, 85, 75, 24, 255, 83, 70, 22, 255, 83, 66, 14, 255, 84, 67, 18, 255, 80, 66, 16, 255, 82, 60, 19, 255, 84, 56, 14, 255, 82, 56, 25, 255, 78, 57, 17, 255, 83, 55, 19, 255, 82, 53, 10, 255, 72, 46, 9, 255, 78, 47, 14, 255, 84, 50, 9, 255, 76, 47, 5, 255, 69, 48, 8, 255, 71, 47, 8, 255, 74, 40, 8, 255, 77, 44, 7, 255, 80, 45, 8, 255, 77, 39, 5, 255, 80, 38, 9, 255, 82, 38, 9, 255, 80, 36, 4, 255, 74, 35, 11, 255, 74, 37, 10, 255, 69, 35, 2, 255, 74, 40, 4, 255, 77, 38, 3, 255, 78, 33, 4, 255, 82, 39, 6, 255, 75, 38, 2, 255, 76, 33, 0, 255, 80, 36, 5, 255, 76, 34, 4, 255, 76, 31, 2, 255, 80, 35, 5, 255, 78, 34, 3, 255, 74, 32, 3, 255, 74, 32, 3, 255, 75, 32, 2, 255, 77, 33, 3, 255, 76, 30, 3, 255, 68, 27, 3, 255, 74, 29, 6, 255, 79, 31, 0, 255, 80, 30, 6, 255, 78, 29, 7, 255, 80, 32, 3, 255, 79, 28, 5, 255, 80, 29, 3, 255, 81, 34, 4, 255, 77, 30, 3, 255, 76, 26, 5, 255, 78, 27, 6, 255, 78, 30, 5, 255, 76, 30, 5, 255, 75, 30, 3, 255, 74, 30, 0, 255, 79, 31, 2, 255, 77, 28, 2, 255, 75, 31, 7, 255, 77, 30, 3, 255, 80, 28, 0, 255, 80, 28, 5, 255, 73, 25, 2, 255, 73, 29, 4, 255, 72, 29, 5, 255, 69, 26, 4, 255, 70, 29, 6, 255, 77, 31, 5, 255, 74, 25, 4, 255, 64, 23, 0, 255, 71, 26, 1, 255, 76, 25, 2, 255, 73, 25, 2, 255, 70, 24, 2, 255, 73, 28, 7, 255, 72, 27, 5, 255, 70, 25, 3, 255, 71, 24, 2, 255, 71, 24, 1, 255, 65, 22, 2, 255, 63, 23, 3, 255, 63, 24, 2, 255, 64, 23, 2, 255, 62, 21, 2, 255, 64, 21, 4, 255, 72, 23, 4, 255, 58, 19, 2, 255, 57, 20, 3, 255, 61, 23, 4, 255, 60, 22, 3, 255, 62, 20, 4, 255, 63, 18, 3, 255, 63, 19, 3, 255, 68, 22, 2, 255, 63, 22, 2, 255, 62, 19, 1, 255, 70, 19, 4, 255, 64, 22, 3, 255, 73, 21, 7, 255, 85, 26, 3, 255, 84, 26, 1, 255, 76, 21, 2, 255, 72, 15, 1, 255, 77, 23, 5, 255, 87, 29, 7, 255, 88, 26, 2, 255, 83, 23, 1, 255, 62, 20, 2, 255, 54, 15, 5, 255, 44, 14, 3, 255, 53, 17, 1, 255, 59, 18, 1, 255, 46, 17, 6, 255, 46, 19, 8, 255, 53, 17, 2, 255, 60, 15, 0, 255, 67, 17, 2, 255, 70, 18, 6, 255, 73, 20, 5, 255, 73, 19, 2, 255, 78, 18, 3, 255, 67, 17, 2, 255, 51, 19, 4, 255, 48, 13, 3, 255, 58, 14, 3, 255, 76, 21, 1, 255, 88, 23, 2, 255, 87, 26, 6, 255, 67, 19, 4, 255, 52, 15, 3, 255, 47, 15, 2, 255, 46, 16, 2, 255, 52, 19, 6, 255, 62, 13, 4, 255, 56, 14, 3, 255, 60, 17, 7, 255, 61, 16, 4, 255, 58, 16, 3, 255, 56, 16, 3, 255, 58, 19, 3, 255, 60, 18, 1, 255, 61, 18, 1, 255, 66, 20, 3, 255, 66, 18, 2, 255, 66, 18, 3, 255, 65, 17, 2, 255, 65, 17, 1, 255, 70, 18, 1, 255, 77, 17, 2, 255, 75, 18, 2, 255, 71, 18, 3, 255, 65, 16, 2, 255, 61, 15, 1, 255, 61, 15, 1, 255, 65, 16, 3, 255, 61, 17, 2, 255, 64, 18, 1, 255, 70, 18, 3, 255, 68, 21, 2, 255, 65, 16, 1, 255, 62, 14, 1, 255, 57, 17, 1, 255, 55, 16, 1, 255, 62, 15, 6, 255, 56, 12, 4, 255, 54, 15, 5, 255, 51, 15, 4, 255, 45, 15, 4, 255, 47, 11, 5, 255, 52, 10, 2, 255, 51, 13, 6, 255, 40, 11, 4, 255, 42, 11, 2, 255, 43, 12, 1, 255, 40, 10, 1, 255, 40, 10, 3, 255, 36, 6, 2, 255, 38, 9, 5, 255, 35, 10, 3, 255, 32, 9, 2, 255, 30, 9, 3, 255, 32, 13, 6, 255, 26, 5, 0, 255, 33, 8, 1, 255, 47, 13, 6, 255, 41, 6, 2, 255, 34, 3, 1, 255, 28, 10, 1, 255, 44, 13, 3, 255, 59, 11, 0, 255, 58, 12, 1, 255, 60, 12, 5, 255, 51, 11, 4, 255, 35, 12, 1, 255, 34, 9, 3, 255, 33, 11, 2, 255, 37, 13, 2, 255, 8, 4, 3, 255, 6, 1, 1, 255, 4, 1, 0, 255, 6, 3, 0, 255, 9, 5, 2, 255, 11, 4, 2, 255, 12, 3, 1, 255, 14, 3, 2, 255, 12, 2, 1, 255, 14, 4, 3, 255, 14, 1, 2, 255, 16, 5, 2, 255, 15, 6, 2, 255, 13, 4, 2, 255, 10, 3, 1, 255, 10, 5, 2, 255, 10, 4, 1, 255, 13, 4, 2, 255, 14, 5, 3, 255, 11, 1, 0, 255, 12, 3, 1, 255, 14, 5, 3, 255, 15, 4, 3, 255, 16, 6, 1, 255, 13, 6, 1, 255, 9, 4, 1, 255, 13, 7, 1, 255, 18, 9, 3, 255, 16, 6, 2, 255, 19, 8, 3, 255, 17, 8, 1, 255, 15, 8, 1, 255, 19, 8, 2, 255, 17, 7, 0, 255, 18, 9, 2, 255, 17, 8, 3, 255, 17, 9, 1, 255, 24, 15, 3, 255, 24, 14, 5, 255, 19, 10, 3, 255, 18, 8, 1, 255, 20, 7, 0, 255, 26, 12, 3, 255, 27, 14, 3, 255, 24, 15, 2, 255, 22, 13, 3, 255, 29, 14, 4, 255, 25, 13, 1, 255, 25, 15, 3, 255, 24, 11, 2, 255, 20, 9, 2, 255, 29, 16, 5, 255, 30, 14, 4, 255, 33, 16, 4, 255, 33, 19, 4, 255, 28, 15, 1, 255, 30, 14, 3, 255, 30, 20, 5, 255, 27, 16, 0, 255, 36, 18, 6, 255, 33, 16, 5, 255, 31, 16, 3, 255, 35, 19, 4, 255, 42, 20, 4, 255, 43, 20, 3, 255, 38, 17, 6, 255, 38, 17, 0, 255, 33, 18, 1, 255, 42, 19, 5, 255, 41, 21, 2, 255, 35, 22, 1, 255, 46, 25, 6, 255, 39, 18, 1, 255, 41, 19, 4, 255, 45, 17, 4, 255, 52, 22, 8, 255, 46, 21, 1, 255, 45, 20, 2, 255, 47, 21, 9, 255, 47, 19, 4, 255, 45, 19, 0, 255, 43, 22, 2, 255, 41, 30, 3, 255, 41, 26, 1, 255, 49, 26, 6, 255, 45, 21, 4, 255, 37, 18, 2, 255, 37, 24, 6, 255, 40, 22, 2, 255, 46, 23, 3, 255, 41, 24, 4, 255, 43, 23, 5, 255, 46, 25, 2, 255, 54, 22, 3, 255, 41, 22, 8, 255, 49, 20, 1, 255, 56, 23, 1, 255, 42, 24, 3, 255, 47, 27, 3, 255, 50, 26, 3, 255, 39, 23, 4, 255, 49, 26, 5, 255, 54, 28, 3, 255, 55, 27, 4, 255, 57, 22, 3, 255, 46, 24, 3, 255, 42, 27, 3, 255, 53, 26, 3, 255, 55, 26, 2, 255, 60, 24, 5, 255, 65, 28, 5, 255, 54, 26, 4, 255, 50, 22, 2, 255, 48, 25, 1, 255, 45, 26, 4, 255, 50, 24, 3, 255, 48, 26, 2, 255, 55, 30, 6, 255, 48, 28, 3, 255, 49, 29, 5, 255, 55, 29, 3, 255, 50, 25, 4, 255, 50, 25, 7, 255, 48, 28, 2, 255, 44, 26, 4, 255, 51, 31, 6, 255, 54, 32, 3, 255, 56, 29, 6, 255, 56, 29, 6, 255, 45, 32, 4, 255, 52, 29, 1, 255, 56, 31, 2, 255, 54, 34, 7, 255, 54, 33, 2, 255, 64, 30, 6, 255, 58, 32, 7, 255, 58, 38, 6, 255, 68, 40, 9, 255, 66, 39, 8, 255, 59, 45, 9, 255, 57, 46, 13, 255, 65, 45, 23, 255, 66, 53, 15, 255, 54, 54, 19, 255, 59, 55, 33, 255, 69, 55, 24, 255, 69, 66, 25, 255, 61, 63, 40, 255, 61, 64, 34, 255, 64, 68, 41, 255, 67, 71, 53, 255, 67, 69, 54, 255, 70, 73, 48, 255, 72, 75, 56, 255, 68, 80, 57, 255, 76, 86, 67, 255, 80, 87, 64, 255, 77, 88, 66, 255, 77, 96, 76, 255, 80, 99, 78, 255, 82, 102, 83, 255, 85, 106, 86, 255, 91, 112, 91, 255, 91, 114, 92, 255, 93, 119, 93, 255, 97, 122, 95, 255, 91, 122, 95, 255, 96, 129, 103, 255, 98, 131, 102, 255, 95, 132, 102, 255, 97, 137, 105, 255, 99, 138, 107, 255, 101, 140, 108, 255, 100, 140, 107, 255, 108, 139, 111, 255, 107, 138, 109, 255, 100, 136, 102, 255, 99, 138, 103, 255, 98, 133, 102, 255, 104, 130, 100, 255, 102, 129, 101, 255, 100, 129, 100, 255, 99, 123, 96, 255, 101, 121, 93, 255, 96, 117, 85, 255, 93, 116, 78, 255, 91, 111, 71, 255, 92, 107, 70, 255, 91, 102, 70, 255, 89, 101, 60, 255, 88, 100, 47, 255, 89, 93, 59, 255, 94, 94, 49, 255, 90, 86, 49, 255, 87, 84, 48, 255, 82, 82, 41, 255, 81, 78, 41, 255, 83, 75, 45, 255, 87, 74, 28, 255, 85, 74, 22, 255, 82, 72, 26, 255, 87, 73, 14, 255, 89, 67, 18, 255, 87, 67, 14, 255, 76, 62, 15, 255, 79, 64, 11, 255, 80, 62, 11, 255, 71, 53, 22, 255, 77, 56, 16, 255, 82, 52, 15, 255, 76, 50, 10, 255, 81, 48, 15, 255, 79, 46, 11, 255, 82, 50, 0, 255, 78, 49, 6, 255, 69, 47, 12, 255, 72, 42, 5, 255, 81, 43, 8, 255, 76, 43, 3, 255, 75, 42, 5, 255, 71, 41, 8, 255, 70, 40, 10, 255, 73, 39, 5, 255, 79, 40, 1, 255, 77, 37, 5, 255, 74, 38, 7, 255, 66, 34, 5, 255, 68, 38, 11, 255, 68, 37, 7, 255, 72, 35, 7, 255, 73, 37, 3, 255, 72, 35, 4, 255, 79, 33, 8, 255, 76, 28, 4, 255, 79, 33, 4, 255, 79, 29, 0, 255, 80, 34, 2, 255, 77, 33, 1, 255, 76, 34, 6, 255, 72, 32, 5, 255, 69, 30, 0, 255, 73, 31, 3, 255, 79, 31, 8, 255, 77, 34, 10, 255, 72, 30, 2, 255, 74, 32, 4, 255, 70, 29, 4, 255, 72, 28, 6, 255, 74, 29, 4, 255, 84, 34, 6, 255, 83, 30, 5, 255, 78, 31, 2, 255, 76, 31, 2, 255, 78, 28, 7, 255, 77, 27, 5, 255, 80, 30, 3, 255, 75, 30, 1, 255, 76, 31, 5, 255, 77, 28, 4, 255, 80, 28, 5, 255, 80, 29, 5, 255, 73, 28, 1, 255, 72, 26, 7, 255, 73, 26, 6, 255, 75, 31, 3, 255, 70, 28, 0, 255, 74, 28, 4, 255, 76, 27, 4, 255, 79, 29, 6, 255, 74, 30, 5, 255, 72, 31, 0, 255, 71, 26, 3, 255, 68, 25, 5, 255, 73, 27, 3, 255, 70, 26, 4, 255, 73, 25, 1, 255, 73, 26, 3, 255, 66, 22, 1, 255, 63, 21, 2, 255, 64, 21, 4, 255, 71, 25, 8, 255, 68, 21, 3, 255, 67, 22, 4, 255, 68, 23, 7, 255, 66, 22, 5, 255, 65, 25, 3, 255, 67, 24, 1, 255, 71, 23, 4, 255, 67, 21, 3, 255, 66, 19, 5, 255, 55, 18, 0, 255, 70, 21, 4, 255, 68, 20, 1, 255, 62, 22, 3, 255, 66, 20, 5, 255, 66, 18, 1, 255, 59, 22, 1, 255, 57, 20, 3, 255, 59, 16, 3, 255, 60, 24, 6, 255, 63, 20, 2, 255, 56, 14, 2, 255, 67, 27, 3, 255, 80, 27, 0, 255, 86, 24, 4, 255, 85, 22, 3, 255, 92, 25, 0, 255, 85, 20, 1, 255, 87, 23, 4, 255, 83, 25, 6, 255, 54, 17, 1, 255, 51, 15, 6, 255, 50, 19, 5, 255, 49, 15, 3, 255, 50, 13, 2, 255, 54, 15, 1, 255, 52, 15, 1, 255, 51, 17, 2, 255, 53, 18, 5, 255, 56, 18, 6, 255, 53, 15, 1, 255, 53, 20, 0, 255, 54, 18, 7, 255, 57, 16, 8, 255, 66, 22, 1, 255, 73, 27, 2, 255, 65, 21, 3, 255, 46, 18, 3, 255, 60, 21, 4, 255, 76, 17, 5, 255, 62, 18, 4, 255, 48, 22, 1, 255, 43, 17, 3, 255, 48, 15, 5, 255, 49, 11, 2, 255, 43, 13, 2, 255, 59, 14, 5, 255, 56, 15, 3, 255, 50, 16, 3, 255, 57, 14, 2, 255, 56, 19, 4, 255, 57, 18, 3, 255, 60, 17, 3, 255, 60, 16, 1, 255, 65, 17, 2, 255, 72, 18, 4, 255, 71, 18, 3, 255, 67, 16, 2, 255, 65, 18, 2, 255, 66, 18, 2, 255, 74, 19, 2, 255, 80, 19, 1, 255, 76, 19, 0, 255, 74, 19, 3, 255, 67, 18, 2, 255, 63, 17, 2, 255, 62, 17, 2, 255, 65, 18, 3, 255, 58, 13, 1, 255, 64, 15, 4, 255, 67, 15, 3, 255, 61, 14, 0, 255, 65, 15, 2, 255, 65, 15, 3, 255, 59, 15, 3, 255, 56, 16, 2, 255, 47, 13, 1, 255, 53, 15, 6, 255, 54, 13, 5, 255, 46, 10, 1, 255, 48, 15, 5, 255, 49, 12, 4, 255, 51, 13, 1, 255, 46, 13, 0, 255, 38, 9, 1, 255, 44, 12, 1, 255, 45, 13, 3, 255, 42, 13, 3, 255, 40, 10, 3, 255, 38, 10, 6, 255, 41, 12, 7, 255, 40, 11, 0, 255, 35, 10, 1, 255, 28, 9, 3, 255, 30, 10, 4, 255, 31, 7, 3, 255, 33, 10, 4, 255, 29, 12, 2, 255, 23, 8, 1, 255, 26, 8, 5, 255, 29, 7, 5, 255, 36, 8, 5, 255, 45, 11, 2, 255, 49, 12, 1, 255, 47, 10, 1, 255, 41, 10, 2, 255, 38, 8, 3, 255, 38, 6, 4, 255, 42, 13, 6, 255, 44, 13, 3, 255, 6, 2, 2, 255, 5, 0, 0, 255, 9, 2, 2, 255, 7, 2, 2, 255, 6, 2, 1, 255, 10, 4, 1, 255, 9, 3, 0, 255, 9, 3, 0, 255, 9, 3, 1, 255, 8, 3, 0, 255, 10, 3, 0, 255, 12, 3, 1, 255, 12, 2, 1, 255, 12, 3, 2, 255, 11, 5, 3, 255, 10, 5, 2, 255, 12, 5, 2, 255, 11, 3, 0, 255, 13, 5, 2, 255, 11, 6, 1, 255, 11, 5, 1, 255, 18, 6, 6, 255, 16, 4, 4, 255, 14, 4, 1, 255, 15, 5, 3, 255, 12, 5, 3, 255, 9, 5, 3, 255, 11, 6, 2, 255, 17, 8, 3, 255, 20, 8, 4, 255, 19, 9, 2, 255, 14, 9, 0, 255, 20, 8, 0, 255, 21, 10, 4, 255, 18, 9, 2, 255, 17, 8, 1, 255, 17, 10, 2, 255, 18, 11, 3, 255, 23, 12, 4, 255, 22, 12, 3, 255, 18, 11, 1, 255, 18, 11, 1, 255, 19, 10, 2, 255, 20, 11, 4, 255, 19, 11, 2, 255, 23, 11, 0, 255, 30, 14, 5, 255, 30, 13, 3, 255, 29, 12, 4, 255, 25, 12, 3, 255, 23, 13, 4, 255, 27, 15, 4, 255, 24, 10, 0, 255, 26, 14, 3, 255, 27, 18, 3, 255, 30, 18, 3, 255, 39, 16, 4, 255, 24, 18, 2, 255, 25, 16, 4, 255, 32, 16, 5, 255, 34, 16, 4, 255, 33, 16, 1, 255, 30, 19, 4, 255, 25, 18, 6, 255, 27, 16, 1, 255, 41, 18, 6, 255, 34, 17, 5, 255, 34, 17, 2, 255, 47, 17, 2, 255, 46, 19, 3, 255, 35, 18, 1, 255, 37, 20, 6, 255, 38, 20, 5, 255, 44, 20, 0, 255, 48, 20, 3, 255, 46, 20, 2, 255, 45, 22, 2, 255, 38, 17, 3, 255, 37, 19, 4, 255, 43, 24, 5, 255, 46, 20, 0, 255, 47, 20, 1, 255, 45, 22, 6, 255, 41, 23, 3, 255, 44, 24, 1, 255, 38, 21, 6, 255, 38, 22, 6, 255, 38, 20, 5, 255, 43, 19, 9, 255, 49, 21, 5, 255, 46, 26, 3, 255, 50, 21, 4, 255, 38, 21, 5, 255, 43, 18, 6, 255, 47, 20, 7, 255, 47, 23, 6, 255, 48, 24, 1, 255, 52, 26, 5, 255, 48, 21, 1, 255, 51, 24, 3, 255, 45, 24, 1, 255, 42, 25, 1, 255, 51, 25, 2, 255, 51, 25, 0, 255, 55, 29, 0, 255, 51, 26, 0, 255, 53, 27, 5, 255, 63, 29, 6, 255, 60, 26, 2, 255, 58, 27, 6, 255, 52, 23, 2, 255, 49, 24, 2, 255, 51, 27, 4, 255, 49, 27, 3, 255, 46, 28, 4, 255, 49, 26, 2, 255, 48, 28, 4, 255, 49, 28, 4, 255, 47, 27, 4, 255, 48, 28, 3, 255, 55, 30, 6, 255, 49, 26, 1, 255, 51, 28, 2, 255, 51, 31, 4, 255, 55, 28, 6, 255, 53, 25, 4, 255, 52, 26, 4, 255, 55, 29, 8, 255, 53, 29, 3, 255, 53, 29, 6, 255, 49, 30, 5, 255, 49, 32, 2, 255, 57, 33, 3, 255, 54, 32, 1, 255, 55, 34, 4, 255, 61, 37, 6, 255, 60, 36, 4, 255, 62, 40, 6, 255, 57, 42, 12, 255, 52, 39, 17, 255, 59, 47, 15, 255, 63, 49, 22, 255, 58, 48, 25, 255, 57, 51, 24, 255, 60, 54, 26, 255, 64, 60, 25, 255, 60, 61, 37, 255, 63, 62, 44, 255, 67, 67, 47, 255, 65, 68, 44, 255, 68, 72, 43, 255, 71, 71, 60, 255, 72, 73, 53, 255, 75, 80, 49, 255, 73, 78, 60, 255, 76, 86, 70, 255, 77, 91, 66, 255, 79, 92, 65, 255, 83, 95, 73, 255, 82, 98, 69, 255, 82, 104, 79, 255, 91, 110, 85, 255, 92, 114, 87, 255, 95, 119, 92, 255, 92, 121, 95, 255, 90, 124, 97, 255, 95, 130, 100, 255, 96, 133, 101, 255, 98, 135, 107, 255, 100, 135, 110, 255, 100, 134, 109, 255, 103, 136, 110, 255, 105, 141, 112, 255, 97, 140, 109, 255, 99, 141, 107, 255, 104, 143, 107, 255, 103, 140, 105, 255, 102, 136, 104, 255, 100, 135, 105, 255, 99, 133, 102, 255, 102, 131, 97, 255, 96, 124, 94, 255, 97, 127, 91, 255, 96, 122, 85, 255, 93, 115, 82, 255, 90, 114, 76, 255, 92, 112, 70, 255, 90, 107, 72, 255, 89, 103, 67, 255, 88, 98, 60, 255, 91, 95, 57, 255, 93, 92, 53, 255, 92, 89, 49, 255, 88, 86, 40, 255, 87, 84, 36, 255, 88, 83, 33, 255, 85, 77, 36, 255, 87, 76, 43, 255, 82, 75, 33, 255, 79, 73, 24, 255, 87, 69, 26, 255, 86, 64, 22, 255, 76, 64, 22, 255, 75, 62, 13, 255, 84, 61, 22, 255, 79, 55, 20, 255, 75, 56, 8, 255, 73, 52, 16, 255, 80, 53, 20, 255, 83, 53, 12, 255, 80, 49, 14, 255, 78, 47, 18, 255, 73, 42, 13, 255, 78, 47, 15, 255, 78, 42, 10, 255, 78, 41, 12, 255, 78, 42, 13, 255, 77, 43, 8, 255, 74, 41, 2, 255, 73, 40, 7, 255, 75, 42, 11, 255, 70, 39, 7, 255, 70, 36, 7, 255, 74, 34, 11, 255, 79, 36, 11, 255, 74, 34, 6, 255, 75, 36, 6, 255, 74, 38, 6, 255, 70, 34, 4, 255, 72, 35, 8, 255, 80, 34, 6, 255, 76, 37, 5, 255, 74, 34, 5, 255, 86, 32, 6, 255, 79, 34, 4, 255, 74, 35, 5, 255, 76, 32, 6, 255, 71, 33, 3, 255, 76, 31, 4, 255, 69, 31, 2, 255, 70, 31, 2, 255, 77, 31, 4, 255, 76, 31, 1, 255, 75, 31, 2, 255, 70, 28, 6, 255, 71, 26, 4, 255, 76, 30, 2, 255, 72, 30, 2, 255, 76, 30, 5, 255, 81, 31, 4, 255, 77, 29, 3, 255, 77, 30, 4, 255, 76, 29, 3, 255, 78, 30, 3, 255, 77, 29, 2, 255, 79, 31, 2, 255, 82, 28, 6, 255, 73, 29, 5, 255, 73, 28, 4, 255, 77, 27, 3, 255, 75, 28, 2, 255, 74, 29, 2, 255, 75, 28, 6, 255, 72, 27, 6, 255, 70, 29, 2, 255, 77, 31, 1, 255, 78, 26, 0, 255, 73, 26, 2, 255, 69, 24, 3, 255, 82, 25, 2, 255, 73, 27, 3, 255, 70, 23, 5, 255, 71, 24, 5, 255, 67, 26, 4, 255, 69, 31, 5, 255, 77, 28, 4, 255, 78, 25, 1, 255, 70, 28, 3, 255, 63, 21, 1, 255, 66, 23, 1, 255, 67, 26, 7, 255, 64, 17, 6, 255, 65, 23, 2, 255, 70, 24, 5, 255, 70, 19, 6, 255, 71, 22, 1, 255, 69, 28, 2, 255, 57, 22, 4, 255, 64, 22, 5, 255, 69, 24, 8, 255, 60, 23, 2, 255, 59, 23, 1, 255, 65, 22, 5, 255, 64, 21, 4, 255, 54, 21, 2, 255, 58, 22, 1, 255, 66, 20, 2, 255, 64, 18, 3, 255, 53, 18, 7, 255, 53, 21, 5, 255, 59, 18, 2, 255, 55, 17, 8, 255, 50, 18, 4, 255, 75, 23, 9, 255, 85, 22, 2, 255, 89, 24, 0, 255, 98, 29, 2, 255, 95, 26, 3, 255, 78, 26, 2, 255, 67, 23, 5, 255, 54, 17, 3, 255, 49, 16, 1, 255, 50, 17, 2, 255, 44, 17, 2, 255, 52, 16, 3, 255, 61, 15, 3, 255, 51, 16, 3, 255, 41, 16, 4, 255, 50, 17, 6, 255, 58, 14, 3, 255, 57, 18, 3, 255, 50, 16, 1, 255, 51, 21, 8, 255, 48, 18, 5, 255, 55, 16, 1, 255, 73, 23, 4, 255, 78, 21, 6, 255, 55, 16, 3, 255, 44, 17, 4, 255, 55, 16, 8, 255, 52, 12, 4, 255, 45, 15, 3, 255, 48, 13, 3, 255, 52, 13, 2, 255, 44, 12, 7, 255, 47, 12, 8, 255, 54, 14, 3, 255, 53, 17, 2, 255, 49, 16, 4, 255, 58, 14, 3, 255, 54, 16, 3, 255, 59, 15, 5, 255, 53, 14, 2, 255, 57, 16, 1, 255, 64, 18, 3, 255, 64, 16, 2, 255, 67, 14, 2, 255, 64, 14, 1, 255, 63, 14, 1, 255, 64, 15, 1, 255, 70, 19, 5, 255, 72, 19, 5, 255, 73, 18, 4, 255, 73, 22, 4, 255, 70, 15, 1, 255, 63, 13, 2, 255, 63, 13, 5, 255, 64, 15, 1, 255, 66, 20, 2, 255, 69, 18, 2, 255, 73, 17, 3, 255, 68, 16, 1, 255, 65, 18, 3, 255, 58, 15, 1, 255, 62, 16, 2, 255, 67, 17, 4, 255, 52, 15, 1, 255, 43, 14, 1, 255, 44, 12, 2, 255, 50, 13, 5, 255, 52, 12, 3, 255, 50, 11, 1, 255, 42, 14, 3, 255, 44, 13, 4, 255, 47, 12, 4, 255, 53, 13, 4, 255, 49, 12, 3, 255, 44, 14, 3, 255, 47, 12, 2, 255, 46, 12, 2, 255, 45, 14, 3, 255, 44, 13, 3, 255, 37, 8, 3, 255, 33, 10, 5, 255, 31, 8, 1, 255, 29, 7, 1, 255, 27, 14, 4, 255, 29, 11, 2, 255, 32, 13, 5, 255, 31, 10, 5, 255, 34, 7, 3, 255, 38, 6, 3, 255, 33, 10, 4, 255, 43, 9, 6, 255, 35, 7, 2, 255, 45, 9, 6, 255, 42, 9, 2, 255, 42, 12, 1, 255, 43, 12, 1, 255, 40, 9, 1, 255, 5, 1, 0, 255, 8, 2, 2, 255, 9, 3, 3, 255, 6, 2, 1, 255, 6, 2, 1, 255, 10, 3, 1, 255, 9, 2, 0, 255, 9, 4, 1, 255, 9, 4, 1, 255, 8, 3, 0, 255, 10, 3, 1, 255, 12, 4, 2, 255, 12, 2, 1, 255, 12, 2, 2, 255, 14, 7, 4, 255, 10, 5, 1, 255, 12, 4, 1, 255, 11, 3, 0, 255, 12, 7, 2, 255, 12, 6, 2, 255, 12, 4, 0, 255, 14, 5, 4, 255, 14, 4, 3, 255, 15, 6, 3, 255, 15, 6, 3, 255, 15, 7, 4, 255, 10, 6, 3, 255, 10, 6, 2, 255, 16, 9, 3, 255, 18, 8, 3, 255, 18, 7, 2, 255, 17, 9, 3, 255, 18, 6, 0, 255, 20, 9, 3, 255, 17, 6, 2, 255, 17, 8, 2, 255, 18, 8, 2, 255, 15, 6, 0, 255, 21, 10, 2, 255, 21, 11, 2, 255, 18, 10, 1, 255, 19, 9, 1, 255, 21, 10, 2, 255, 23, 9, 2, 255, 24, 11, 3, 255, 21, 15, 3, 255, 21, 11, 1, 255, 26, 13, 3, 255, 28, 11, 4, 255, 24, 8, 1, 255, 26, 9, 2, 255, 22, 11, 3, 255, 27, 14, 2, 255, 32, 16, 2, 255, 24, 12, 1, 255, 22, 15, 5, 255, 33, 17, 5, 255, 32, 18, 1, 255, 32, 16, 2, 255, 30, 17, 3, 255, 26, 16, 0, 255, 33, 16, 1, 255, 37, 16, 4, 255, 26, 14, 3, 255, 32, 23, 4, 255, 35, 16, 5, 255, 39, 18, 5, 255, 43, 20, 4, 255, 43, 15, 4, 255, 40, 22, 5, 255, 38, 21, 3, 255, 35, 17, 2, 255, 36, 22, 2, 255, 36, 19, 3, 255, 39, 18, 2, 255, 46, 21, 5, 255, 43, 17, 4, 255, 41, 19, 6, 255, 38, 18, 4, 255, 44, 23, 7, 255, 46, 23, 3, 255, 47, 22, 4, 255, 46, 19, 7, 255, 43, 23, 5, 255, 46, 24, 2, 255, 38, 21, 2, 255, 41, 23, 3, 255, 42, 25, 3, 255, 40, 21, 1, 255, 49, 25, 4, 255, 43, 25, 3, 255, 48, 21, 2, 255, 40, 21, 4, 255, 46, 17, 4, 255, 46, 18, 4, 255, 41, 24, 6, 255, 48, 27, 3, 255, 49, 26, 3, 255, 47, 24, 2, 255, 51, 27, 5, 255, 48, 26, 3, 255, 46, 25, 2, 255, 54, 27, 6, 255, 49, 24, 1, 255, 52, 26, 2, 255, 53, 28, 4, 255, 51, 28, 2, 255, 56, 27, 3, 255, 54, 26, 2, 255, 55, 24, 5, 255, 60, 23, 4, 255, 61, 25, 5, 255, 53, 27, 5, 255, 49, 27, 4, 255, 49, 23, 3, 255, 58, 30, 5, 255, 55, 30, 7, 255, 51, 24, 4, 255, 51, 29, 5, 255, 49, 28, 1, 255, 54, 28, 4, 255, 52, 28, 4, 255, 57, 32, 8, 255, 49, 27, 4, 255, 48, 31, 5, 255, 48, 26, 2, 255, 56, 26, 5, 255, 55, 27, 6, 255, 57, 29, 1, 255, 53, 29, 4, 255, 49, 28, 8, 255, 54, 30, 8, 255, 56, 29, 5, 255, 63, 33, 5, 255, 59, 35, 2, 255, 56, 36, 6, 255, 51, 34, 12, 255, 53, 37, 15, 255, 55, 42, 10, 255, 56, 42, 17, 255, 56, 45, 14, 255, 60, 51, 21, 255, 58, 52, 24, 255, 60, 57, 21, 255, 61, 56, 26, 255, 59, 57, 35, 255, 63, 67, 32, 255, 70, 73, 24, 255, 68, 68, 35, 255, 65, 69, 36, 255, 70, 72, 51, 255, 72, 75, 53, 255, 72, 75, 59, 255, 76, 81, 62, 255, 73, 82, 59, 255, 76, 88, 71, 255, 76, 90, 68, 255, 81, 93, 71, 255, 84, 97, 77, 255, 85, 102, 79, 255, 88, 107, 81, 255, 94, 114, 93, 255, 93, 117, 94, 255, 93, 120, 91, 255, 92, 124, 92, 255, 92, 126, 102, 255, 96, 132, 106, 255, 96, 135, 107, 255, 97, 138, 111, 255, 101, 139, 112, 255, 102, 139, 113, 255, 103, 140, 113, 255, 101, 142, 114, 255, 103, 143, 116, 255, 102, 141, 110, 255, 103, 140, 107, 255, 104, 140, 107, 255, 102, 138, 105, 255, 102, 137, 106, 255, 99, 132, 101, 255, 104, 131, 99, 255, 100, 124, 90, 255, 97, 124, 85, 255, 98, 120, 83, 255, 97, 117, 83, 255, 94, 113, 77, 255, 95, 109, 72, 255, 89, 102, 73, 255, 88, 102, 60, 255, 88, 101, 59, 255, 85, 94, 61, 255, 84, 89, 48, 255, 88, 90, 41, 255, 85, 84, 47, 255, 86, 84, 41, 255, 85, 81, 27, 255, 81, 74, 30, 255, 81, 77, 26, 255, 84, 74, 16, 255, 78, 70, 16, 255, 84, 66, 35, 255, 82, 62, 19, 255, 69, 62, 21, 255, 82, 61, 8, 255, 84, 58, 8, 255, 85, 51, 17, 255, 86, 54, 9, 255, 84, 53, 13, 255, 76, 51, 14, 255, 77, 53, 11, 255, 78, 49, 3, 255, 80, 49, 5, 255, 74, 43, 7, 255, 74, 43, 8, 255, 78, 44, 2, 255, 83, 46, 3, 255, 78, 41, 4, 255, 77, 43, 9, 255, 74, 40, 6, 255, 77, 42, 6, 255, 73, 38, 5, 255, 71, 36, 7, 255, 73, 37, 7, 255, 72, 36, 4, 255, 71, 34, 6, 255, 72, 36, 5, 255, 73, 35, 4, 255, 75, 35, 4, 255, 77, 36, 7, 255, 75, 32, 6, 255, 75, 31, 1, 255, 76, 34, 1, 255, 77, 33, 4, 255, 81, 30, 3, 255, 76, 33, 2, 255, 72, 35, 6, 255, 73, 34, 8, 255, 72, 33, 5, 255, 73, 28, 0, 255, 71, 32, 3, 255, 69, 30, 3, 255, 76, 29, 3, 255, 77, 30, 1, 255, 76, 30, 1, 255, 70, 27, 2, 255, 69, 22, 2, 255, 75, 26, 5, 255, 76, 31, 3, 255, 82, 33, 3, 255, 83, 29, 2, 255, 79, 28, 3, 255, 80, 30, 5, 255, 78, 28, 3, 255, 79, 29, 4, 255, 84, 34, 5, 255, 83, 33, 3, 255, 82, 28, 3, 255, 78, 32, 4, 255, 75, 30, 3, 255, 77, 29, 3, 255, 79, 29, 4, 255, 76, 28, 2, 255, 72, 29, 2, 255, 73, 30, 5, 255, 73, 29, 5, 255, 73, 31, 5, 255, 70, 28, 1, 255, 73, 26, 4, 255, 76, 25, 5, 255, 74, 30, 4, 255, 71, 25, 3, 255, 76, 25, 3, 255, 72, 22, 3, 255, 71, 24, 0, 255, 85, 31, 4, 255, 80, 28, 6, 255, 86, 27, 3, 255, 86, 30, 9, 255, 66, 20, 3, 255, 71, 25, 4, 255, 68, 24, 4, 255, 74, 27, 10, 255, 74, 22, 5, 255, 63, 20, 2, 255, 64, 25, 7, 255, 65, 25, 4, 255, 63, 21, 0, 255, 64, 17, 7, 255, 60, 18, 2, 255, 65, 24, 6, 255, 62, 23, 3, 255, 60, 22, 1, 255, 67, 23, 6, 255, 66, 19, 4, 255, 58, 19, 0, 255, 55, 21, 2, 255, 54, 18, 7, 255, 60, 20, 5, 255, 64, 20, 1, 255, 62, 21, 7, 255, 51, 19, 6, 255, 58, 22, 1, 255, 69, 19, 4, 255, 65, 17, 2, 255, 66, 18, 1, 255, 63, 20, 2, 255, 70, 19, 3, 255, 77, 24, 5, 255, 54, 21, 0, 255, 53, 16, 1, 255, 60, 18, 5, 255, 53, 19, 3, 255, 54, 22, 6, 255, 54, 21, 8, 255, 46, 18, 6, 255, 48, 22, 5, 255, 46, 18, 3, 255, 51, 14, 4, 255, 54, 15, 6, 255, 45, 20, 2, 255, 41, 21, 3, 255, 43, 12, 0, 255, 50, 14, 5, 255, 46, 16, 5, 255, 42, 13, 1, 255, 53, 17, 1, 255, 60, 14, 2, 255, 47, 13, 1, 255, 44, 17, 5, 255, 52, 15, 7, 255, 51, 15, 3, 255, 47, 14, 2, 255, 54, 13, 3, 255, 61, 21, 4, 255, 41, 14, 0, 255, 43, 18, 4, 255, 50, 16, 4, 255, 49, 11, 1, 255, 48, 14, 4, 255, 55, 18, 1, 255, 53, 19, 0, 255, 57, 17, 2, 255, 55, 14, 2, 255, 57, 13, 3, 255, 64, 14, 6, 255, 62, 17, 6, 255, 59, 16, 2, 255, 62, 15, 3, 255, 66, 15, 3, 255, 64, 12, 0, 255, 68, 16, 2, 255, 65, 14, 1, 255, 63, 17, 2, 255, 64, 17, 1, 255, 70, 19, 4, 255, 63, 17, 3, 255, 64, 11, 2, 255, 65, 14, 2, 255, 66, 16, 5, 255, 67, 14, 4, 255, 66, 14, 0, 255, 74, 16, 4, 255, 77, 17, 6, 255, 68, 15, 2, 255, 62, 14, 0, 255, 61, 15, 1, 255, 57, 15, 4, 255, 55, 14, 6, 255, 52, 10, 4, 255, 48, 14, 5, 255, 39, 13, 1, 255, 45, 11, 5, 255, 40, 11, 5, 255, 37, 9, 4, 255, 36, 9, 2, 255, 43, 11, 3, 255, 53, 11, 4, 255, 49, 10, 2, 255, 44, 15, 2, 255, 34, 11, 1, 255, 48, 13, 6, 255, 48, 7, 2, 255, 42, 8, 3, 255, 41, 11, 7, 255, 34, 8, 5, 255, 38, 8, 8, 255, 36, 8, 6, 255, 29, 9, 1, 255, 26, 8, 0, 255, 29, 6, 3, 255, 21, 8, 1, 255, 39, 9, 5, 255, 40, 7, 5, 255, 35, 9, 3, 255, 38, 12, 5, 255, 51, 10, 5, 255, 38, 8, 1, 255, 46, 8, 2, 255, 45, 9, 3, 255, 40, 7, 2, 255, 4, 1, 1, 255, 8, 3, 3, 255, 7, 2, 1, 255, 6, 2, 1, 255, 6, 2, 1, 255, 9, 3, 0, 255, 11, 2, 0, 255, 9, 4, 1, 255, 9, 4, 1, 255, 9, 4, 1, 255, 8, 2, 0, 255, 11, 3, 1, 255, 12, 2, 0, 255, 15, 4, 2, 255, 12, 4, 2, 255, 11, 4, 1, 255, 12, 3, 1, 255, 8, 1, 0, 255, 10, 6, 3, 255, 14, 6, 3, 255, 12, 4, 1, 255, 13, 6, 3, 255, 14, 5, 3, 255, 14, 7, 4, 255, 14, 6, 3, 255, 15, 6, 4, 255, 13, 4, 2, 255, 10, 5, 1, 255, 13, 7, 3, 255, 16, 6, 1, 255, 17, 6, 2, 255, 20, 9, 5, 255, 17, 7, 2, 255, 20, 10, 5, 255, 19, 8, 4, 255, 19, 7, 3, 255, 19, 7, 2, 255, 21, 9, 2, 255, 21, 10, 2, 255, 19, 8, 2, 255, 19, 9, 2, 255, 21, 10, 1, 255, 26, 11, 4, 255, 24, 9, 2, 255, 27, 13, 5, 255, 26, 14, 5, 255, 24, 12, 3, 255, 23, 12, 3, 255, 21, 10, 2, 255, 24, 10, 2, 255, 29, 14, 6, 255, 25, 13, 3, 255, 28, 15, 4, 255, 35, 14, 4, 255, 31, 14, 3, 255, 21, 15, 2, 255, 26, 14, 2, 255, 33, 14, 3, 255, 36, 14, 2, 255, 31, 17, 3, 255, 25, 18, 2, 255, 31, 14, 1, 255, 43, 18, 7, 255, 35, 18, 7, 255, 36, 19, 3, 255, 30, 16, 1, 255, 36, 18, 4, 255, 38, 18, 3, 255, 36, 17, 1, 255, 36, 19, 3, 255, 33, 17, 2, 255, 33, 18, 0, 255, 37, 20, 3, 255, 40, 17, 6, 255, 43, 20, 7, 255, 41, 22, 5, 255, 36, 18, 4, 255, 43, 18, 4, 255, 42, 17, 3, 255, 42, 20, 4, 255, 39, 26, 4, 255, 33, 24, 2, 255, 35, 20, 3, 255, 39, 20, 5, 255, 50, 25, 8, 255, 40, 21, 4, 255, 45, 24, 7, 255, 42, 24, 3, 255, 39, 22, 1, 255, 44, 20, 1, 255, 43, 25, 3, 255, 43, 24, 2, 255, 44, 23, 1, 255, 52, 22, 6, 255, 46, 23, 7, 255, 33, 21, 1, 255, 44, 23, 0, 255, 45, 25, 3, 255, 42, 25, 3, 255, 41, 24, 2, 255, 47, 25, 3, 255, 50, 24, 2, 255, 54, 27, 6, 255, 52, 26, 3, 255, 52, 25, 5, 255, 51, 26, 4, 255, 49, 28, 0, 255, 53, 27, 2, 255, 49, 25, 4, 255, 52, 22, 3, 255, 54, 24, 2, 255, 53, 25, 3, 255, 48, 25, 2, 255, 47, 25, 4, 255, 39, 20, 2, 255, 52, 25, 3, 255, 55, 28, 2, 255, 54, 24, 0, 255, 52, 28, 6, 255, 49, 27, 5, 255, 53, 26, 4, 255, 50, 26, 2, 255, 54, 29, 6, 255, 48, 27, 4, 255, 44, 31, 5, 255, 48, 28, 4, 255, 56, 26, 5, 255, 56, 30, 5, 255, 53, 33, 4, 255, 50, 32, 6, 255, 54, 27, 5, 255, 59, 26, 4, 255, 51, 26, 2, 255, 53, 31, 5, 255, 49, 33, 7, 255, 45, 37, 8, 255, 50, 39, 10, 255, 57, 37, 17, 255, 61, 39, 8, 255, 58, 41, 20, 255, 55, 45, 25, 255, 57, 46, 30, 255, 56, 51, 22, 255, 59, 55, 25, 255, 60, 58, 25, 255, 61, 60, 34, 255, 62, 65, 38, 255, 65, 65, 34, 255, 68, 69, 40, 255, 69, 72, 47, 255, 69, 75, 43, 255, 74, 81, 44, 255, 73, 81, 57, 255, 71, 80, 62, 255, 74, 87, 61, 255, 78, 89, 69, 255, 81, 93, 72, 255, 85, 97, 79, 255, 85, 100, 81, 255, 87, 105, 84, 255, 92, 111, 91, 255, 90, 113, 89, 255, 90, 119, 92, 255, 93, 125, 99, 255, 90, 127, 99, 255, 95, 132, 104, 255, 98, 136, 111, 255, 97, 139, 112, 255, 96, 140, 112, 255, 100, 142, 114, 255, 104, 145, 116, 255, 101, 143, 115, 255, 99, 142, 114, 255, 105, 145, 119, 255, 104, 143, 114, 255, 102, 141, 108, 255, 102, 141, 107, 255, 100, 138, 105, 255, 100, 136, 103, 255, 98, 132, 101, 255, 102, 128, 100, 255, 102, 126, 90, 255, 98, 124, 87, 255, 97, 118, 82, 255, 97, 115, 79, 255, 93, 111, 79, 255, 91, 107, 70, 255, 88, 101, 62, 255, 88, 100, 59, 255, 88, 98, 61, 255, 87, 90, 62, 255, 88, 88, 50, 255, 88, 85, 40, 255, 83, 78, 45, 255, 85, 77, 34, 255, 88, 77, 25, 255, 86, 75, 19, 255, 83, 75, 23, 255, 77, 70, 28, 255, 78, 61, 24, 255, 81, 64, 16, 255, 86, 66, 17, 255, 79, 59, 22, 255, 79, 63, 13, 255, 83, 56, 16, 255, 74, 49, 20, 255, 79, 52, 6, 255, 83, 55, 9, 255, 74, 50, 8, 255, 72, 48, 4, 255, 79, 49, 6, 255, 76, 45, 8, 255, 74, 48, 6, 255, 74, 48, 8, 255, 75, 44, 10, 255, 79, 46, 7, 255, 75, 43, 3, 255, 75, 41, 9, 255, 74, 39, 6, 255, 76, 42, 4, 255, 76, 38, 4, 255, 74, 34, 7, 255, 73, 36, 7, 255, 73, 38, 4, 255, 69, 39, 5, 255, 70, 35, 2, 255, 74, 36, 4, 255, 75, 35, 4, 255, 75, 30, 1, 255, 78, 32, 7, 255, 77, 34, 4, 255, 77, 33, 2, 255, 79, 33, 4, 255, 77, 30, 2, 255, 81, 31, 4, 255, 82, 29, 5, 255, 80, 29, 8, 255, 76, 29, 5, 255, 76, 29, 3, 255, 72, 31, 4, 255, 67, 31, 4, 255, 70, 30, 4, 255, 72, 31, 3, 255, 73, 28, 4, 255, 74, 28, 3, 255, 74, 27, 6, 255, 77, 27, 8, 255, 78, 29, 2, 255, 83, 32, 1, 255, 85, 29, 3, 255, 83, 31, 3, 255, 79, 29, 2, 255, 77, 30, 4, 255, 76, 29, 2, 255, 78, 29, 0, 255, 81, 31, 0, 255, 79, 30, 2, 255, 78, 28, 0, 255, 74, 29, 1, 255, 75, 29, 1, 255, 78, 26, 2, 255, 78, 27, 3, 255, 78, 32, 2, 255, 77, 32, 1, 255, 72, 27, 2, 255, 69, 26, 2, 255, 68, 28, 4, 255, 75, 27, 5, 255, 74, 25, 4, 255, 66, 27, 6, 255, 66, 23, 6, 255, 70, 23, 3, 255, 66, 21, 4, 255, 69, 27, 3, 255, 75, 26, 2, 255, 98, 27, 2, 255, 93, 30, 1, 255, 84, 26, 4, 255, 69, 22, 7, 255, 64, 26, 6, 255, 88, 29, 3, 255, 94, 28, 2, 255, 79, 26, 4, 255, 69, 21, 0, 255, 68, 23, 1, 255, 69, 25, 1, 255, 71, 24, 0, 255, 72, 22, 5, 255, 68, 22, 6, 255, 65, 25, 7, 255, 64, 21, 3, 255, 63, 20, 2, 255, 61, 23, 4, 255, 60, 20, 1, 255, 63, 18, 3, 255, 59, 20, 5, 255, 56, 20, 6, 255, 64, 22, 7, 255, 57, 18, 1, 255, 56, 23, 6, 255, 57, 21, 7, 255, 61, 18, 0, 255, 68, 21, 6, 255, 70, 18, 4, 255, 62, 17, 2, 255, 60, 21, 5, 255, 58, 16, 2, 255, 65, 17, 4, 255, 51, 19, 4, 255, 50, 16, 2, 255, 55, 20, 4, 255, 49, 19, 2, 255, 55, 19, 3, 255, 52, 17, 5, 255, 52, 17, 5, 255, 52, 15, 4, 255, 49, 18, 6, 255, 43, 13, 2, 255, 52, 16, 5, 255, 54, 17, 5, 255, 49, 16, 7, 255, 52, 16, 6, 255, 51, 15, 5, 255, 45, 13, 4, 255, 43, 17, 5, 255, 40, 14, 2, 255, 45, 13, 1, 255, 44, 12, 1, 255, 44, 13, 3, 255, 49, 11, 1, 255, 52, 16, 2, 255, 54, 18, 2, 255, 70, 20, 7, 255, 77, 24, 5, 255, 63, 21, 1, 255, 61, 18, 3, 255, 49, 16, 4, 255, 44, 15, 3, 255, 53, 12, 5, 255, 52, 14, 2, 255, 51, 17, 3, 255, 56, 15, 3, 255, 58, 14, 4, 255, 61, 13, 2, 255, 63, 13, 2, 255, 62, 17, 5, 255, 59, 15, 3, 255, 56, 14, 0, 255, 60, 17, 4, 255, 63, 18, 5, 255, 68, 19, 6, 255, 67, 13, 2, 255, 61, 14, 3, 255, 54, 12, 2, 255, 64, 14, 4, 255, 64, 15, 2, 255, 58, 15, 1, 255, 58, 16, 4, 255, 55, 12, 4, 255, 57, 11, 2, 255, 63, 14, 1, 255, 71, 18, 4, 255, 72, 17, 2, 255, 72, 16, 3, 255, 70, 16, 4, 255, 63, 14, 2, 255, 57, 13, 1, 255, 55, 12, 4, 255, 50, 10, 3, 255, 48, 14, 5, 255, 43, 15, 3, 255, 40, 10, 2, 255, 41, 12, 6, 255, 40, 7, 4, 255, 38, 10, 4, 255, 41, 13, 4, 255, 51, 13, 4, 255, 52, 11, 2, 255, 47, 10, 2, 255, 33, 11, 3, 255, 31, 13, 5, 255, 34, 9, 2, 255, 39, 11, 5, 255, 37, 10, 5, 255, 37, 9, 2, 255, 35, 9, 3, 255, 42, 10, 3, 255, 44, 16, 5, 255, 38, 12, 2, 255, 30, 9, 0, 255, 22, 10, 0, 255, 34, 7, 3, 255, 34, 6, 1, 255, 35, 10, 2, 255, 38, 13, 3, 255, 47, 9, 1, 255, 44, 10, 1, 255, 51, 14, 4, 255, 46, 11, 3, 255, 38, 6, 2, 255, 4, 1, 0, 255, 6, 1, 1, 255, 5, 0, 0, 255, 7, 3, 2, 255, 6, 2, 1, 255, 8, 2, 0, 255, 10, 2, 0, 255, 8, 2, 0, 255, 8, 2, 2, 255, 8, 2, 2, 255, 6, 1, 0, 255, 9, 1, 0, 255, 11, 2, 0, 255, 15, 4, 2, 255, 12, 3, 2, 255, 13, 4, 2, 255, 14, 6, 4, 255, 8, 2, 0, 255, 8, 5, 2, 255, 13, 4, 2, 255, 13, 3, 1, 255, 14, 6, 3, 255, 14, 6, 3, 255, 12, 5, 1, 255, 12, 4, 1, 255, 14, 4, 3, 255, 15, 3, 2, 255, 11, 6, 2, 255, 11, 6, 2, 255, 13, 5, 1, 255, 17, 7, 2, 255, 18, 7, 3, 255, 15, 8, 2, 255, 15, 6, 1, 255, 17, 6, 2, 255, 20, 9, 5, 255, 19, 8, 2, 255, 19, 9, 2, 255, 21, 9, 3, 255, 20, 8, 3, 255, 20, 11, 4, 255, 24, 13, 5, 255, 20, 9, 2, 255, 20, 10, 2, 255, 21, 10, 1, 255, 26, 12, 0, 255, 28, 15, 5, 255, 24, 13, 4, 255, 22, 13, 3, 255, 22, 12, 2, 255, 26, 14, 4, 255, 30, 13, 3, 255, 26, 12, 3, 255, 28, 11, 3, 255, 36, 15, 6, 255, 32, 16, 3, 255, 27, 15, 4, 255, 33, 18, 8, 255, 29, 11, 0, 255, 35, 13, 4, 255, 30, 15, 4, 255, 29, 16, 3, 255, 35, 18, 7, 255, 29, 13, 4, 255, 39, 16, 4, 255, 28, 16, 0, 255, 31, 17, 4, 255, 34, 16, 2, 255, 33, 21, 2, 255, 34, 16, 2, 255, 37, 19, 4, 255, 37, 21, 5, 255, 39, 18, 7, 255, 43, 17, 4, 255, 44, 18, 6, 255, 37, 19, 2, 255, 36, 22, 1, 255, 41, 21, 4, 255, 40, 24, 3, 255, 39, 24, 1, 255, 42, 20, 1, 255, 43, 17, 1, 255, 42, 22, 5, 255, 37, 21, 2, 255, 42, 18, 3, 255, 43, 22, 6, 255, 43, 21, 5, 255, 43, 20, 4, 255, 43, 22, 4, 255, 47, 20, 5, 255, 45, 22, 3, 255, 44, 27, 1, 255, 41, 25, 1, 255, 47, 22, 2, 255, 47, 24, 3, 255, 41, 26, 5, 255, 45, 23, 6, 255, 40, 21, 3, 255, 40, 23, 2, 255, 42, 25, 1, 255, 50, 26, 2, 255, 54, 25, 1, 255, 56, 26, 2, 255, 47, 22, 2, 255, 51, 21, 3, 255, 55, 27, 5, 255, 50, 27, 2, 255, 47, 23, 1, 255, 46, 25, 7, 255, 47, 25, 4, 255, 50, 25, 3, 255, 52, 24, 2, 255, 56, 26, 6, 255, 55, 24, 8, 255, 45, 19, 6, 255, 57, 26, 5, 255, 48, 25, 1, 255, 49, 25, 3, 255, 53, 28, 5, 255, 51, 23, 2, 255, 49, 25, 5, 255, 45, 27, 3, 255, 49, 26, 1, 255, 49, 29, 4, 255, 51, 28, 4, 255, 54, 30, 6, 255, 51, 29, 3, 255, 50, 27, 0, 255, 56, 29, 4, 255, 52, 31, 4, 255, 55, 30, 3, 255, 55, 29, 1, 255, 55, 34, 5, 255, 51, 30, 5, 255, 60, 33, 15, 255, 53, 34, 8, 255, 51, 39, 6, 255, 55, 38, 13, 255, 63, 43, 10, 255, 59, 42, 15, 255, 56, 46, 19, 255, 59, 49, 18, 255, 59, 48, 21, 255, 57, 46, 40, 255, 60, 55, 32, 255, 65, 66, 28, 255, 60, 59, 37, 255, 64, 64, 41, 255, 68, 68, 42, 255, 71, 73, 54, 255, 72, 78, 47, 255, 72, 78, 50, 255, 72, 81, 53, 255, 72, 84, 57, 255, 76, 90, 64, 255, 77, 89, 64, 255, 81, 93, 73, 255, 85, 98, 78, 255, 85, 103, 79, 255, 88, 108, 82, 255, 92, 113, 96, 255, 93, 119, 94, 255, 91, 124, 95, 255, 90, 127, 101, 255, 90, 129, 107, 255, 94, 135, 106, 255, 96, 137, 111, 255, 97, 139, 114, 255, 100, 143, 116, 255, 101, 143, 114, 255, 103, 144, 113, 255, 102, 145, 115, 255, 99, 144, 114, 255, 103, 145, 117, 255, 102, 146, 114, 255, 100, 142, 107, 255, 100, 142, 107, 255, 98, 139, 103, 255, 97, 137, 100, 255, 97, 133, 98, 255, 98, 125, 99, 255, 99, 124, 93, 255, 96, 122, 91, 255, 95, 116, 82, 255, 94, 113, 69, 255, 91, 110, 72, 255, 90, 105, 68, 255, 88, 100, 63, 255, 88, 97, 64, 255, 86, 93, 58, 255, 85, 85, 55, 255, 89, 85, 50, 255, 84, 84, 41, 255, 80, 79, 40, 255, 81, 78, 26, 255, 84, 77, 21, 255, 84, 76, 19, 255, 73, 68, 28, 255, 73, 64, 36, 255, 80, 68, 20, 255, 82, 61, 13, 255, 82, 62, 16, 255, 83, 59, 15, 255, 81, 57, 14, 255, 79, 56, 18, 255, 73, 54, 10, 255, 73, 55, 6, 255, 75, 52, 15, 255, 76, 46, 12, 255, 83, 51, 9, 255, 78, 45, 12, 255, 75, 39, 12, 255, 74, 41, 7, 255, 72, 44, 7, 255, 72, 40, 10, 255, 74, 38, 11, 255, 75, 38, 7, 255, 76, 39, 6, 255, 76, 40, 7, 255, 74, 37, 7, 255, 79, 38, 9, 255, 75, 31, 4, 255, 70, 31, 4, 255, 69, 35, 9, 255, 71, 38, 4, 255, 74, 34, 3, 255, 73, 35, 4, 255, 74, 34, 4, 255, 78, 32, 5, 255, 74, 32, 5, 255, 75, 33, 7, 255, 78, 30, 5, 255, 76, 33, 5, 255, 66, 35, 4, 255, 68, 32, 3, 255, 74, 28, 1, 255, 74, 31, 4, 255, 65, 27, 1, 255, 69, 30, 3, 255, 70, 30, 4, 255, 70, 30, 5, 255, 69, 29, 4, 255, 73, 29, 2, 255, 65, 22, 4, 255, 71, 28, 4, 255, 74, 29, 1, 255, 74, 29, 4, 255, 77, 28, 1, 255, 81, 27, 1, 255, 85, 29, 5, 255, 83, 34, 3, 255, 79, 31, 3, 255, 75, 29, 3, 255, 76, 31, 4, 255, 77, 31, 1, 255, 78, 31, 1, 255, 76, 32, 2, 255, 79, 32, 4, 255, 74, 31, 2, 255, 73, 30, 2, 255, 81, 30, 5, 255, 78, 29, 5, 255, 73, 28, 0, 255, 77, 31, 0, 255, 81, 30, 2, 255, 78, 26, 3, 255, 73, 24, 2, 255, 74, 27, 4, 255, 73, 26, 4, 255, 69, 26, 5, 255, 64, 27, 5, 255, 63, 21, 3, 255, 68, 23, 5, 255, 64, 23, 4, 255, 67, 26, 5, 255, 76, 25, 4, 255, 87, 28, 2, 255, 94, 30, 1, 255, 74, 27, 1, 255, 69, 21, 4, 255, 88, 27, 8, 255, 76, 26, 3, 255, 64, 22, 1, 255, 68, 22, 5, 255, 70, 23, 4, 255, 68, 22, 3, 255, 65, 24, 5, 255, 62, 23, 4, 255, 64, 22, 5, 255, 59, 22, 3, 255, 63, 21, 4, 255, 65, 22, 5, 255, 60, 23, 4, 255, 60, 20, 1, 255, 50, 19, 2, 255, 56, 18, 1, 255, 60, 18, 0, 255, 52, 23, 2, 255, 55, 20, 4, 255, 63, 19, 5, 255, 60, 20, 3, 255, 56, 18, 2, 255, 51, 22, 1, 255, 62, 20, 3, 255, 59, 14, 0, 255, 63, 17, 2, 255, 60, 22, 2, 255, 62, 18, 1, 255, 65, 20, 5, 255, 63, 18, 4, 255, 57, 21, 2, 255, 55, 21, 2, 255, 54, 19, 3, 255, 44, 19, 1, 255, 50, 18, 0, 255, 54, 13, 1, 255, 54, 19, 7, 255, 48, 17, 6, 255, 48, 17, 6, 255, 42, 13, 3, 255, 51, 13, 5, 255, 53, 15, 5, 255, 51, 15, 4, 255, 50, 15, 4, 255, 43, 14, 3, 255, 40, 15, 3, 255, 42, 16, 4, 255, 46, 16, 5, 255, 51, 15, 3, 255, 53, 14, 2, 255, 52, 17, 0, 255, 63, 22, 4, 255, 73, 18, 3, 255, 79, 18, 2, 255, 84, 19, 2, 255, 79, 17, 3, 255, 51, 14, 1, 255, 43, 14, 2, 255, 50, 18, 3, 255, 47, 14, 1, 255, 52, 16, 4, 255, 51, 14, 3, 255, 54, 14, 1, 255, 55, 15, 0, 255, 54, 16, 0, 255, 54, 14, 1, 255, 56, 15, 3, 255, 59, 14, 1, 255, 63, 15, 0, 255, 65, 17, 4, 255, 61, 16, 3, 255, 56, 14, 2, 255, 50, 16, 4, 255, 52, 13, 5, 255, 55, 13, 3, 255, 61, 17, 4, 255, 62, 14, 0, 255, 59, 11, 2, 255, 56, 14, 5, 255, 58, 14, 3, 255, 64, 14, 1, 255, 67, 17, 1, 255, 68, 19, 1, 255, 68, 16, 0, 255, 70, 14, 2, 255, 66, 14, 3, 255, 60, 15, 3, 255, 53, 16, 4, 255, 46, 13, 1, 255, 52, 13, 3, 255, 56, 10, 2, 255, 55, 12, 2, 255, 52, 13, 2, 255, 55, 15, 6, 255, 34, 9, 1, 255, 31, 10, 2, 255, 52, 13, 6, 255, 55, 13, 3, 255, 56, 16, 7, 255, 49, 10, 6, 255, 34, 8, 3, 255, 31, 9, 2, 255, 34, 10, 1, 255, 32, 10, 0, 255, 34, 8, 1, 255, 30, 9, 0, 255, 42, 11, 4, 255, 43, 10, 4, 255, 40, 6, 3, 255, 30, 5, 3, 255, 29, 8, 4, 255, 32, 9, 3, 255, 31, 9, 1, 255, 43, 8, 2, 255, 45, 10, 1, 255, 51, 15, 6, 255, 49, 14, 4, 255, 46, 14, 2, 255, 42, 11, 3, 255, 37, 7, 2, 255, 5, 1, 1, 255, 5, 1, 0, 255, 6, 0, 1, 255, 7, 3, 2, 255, 6, 2, 1, 255, 9, 3, 0, 255, 11, 2, 2, 255, 7, 1, 1, 255, 7, 1, 1, 255, 8, 2, 2, 255, 6, 1, 0, 255, 8, 1, 0, 255, 11, 3, 0, 255, 12, 3, 1, 255, 12, 5, 2, 255, 10, 2, 1, 255, 14, 4, 3, 255, 13, 5, 2, 255, 10, 7, 4, 255, 11, 3, 1, 255, 14, 4, 2, 255, 16, 6, 3, 255, 15, 6, 3, 255, 13, 5, 2, 255, 11, 3, 1, 255, 14, 7, 4, 255, 15, 4, 2, 255, 13, 5, 2, 255, 12, 4, 1, 255, 13, 4, 2, 255, 17, 7, 3, 255, 15, 8, 1, 255, 14, 7, 1, 255, 15, 6, 1, 255, 19, 9, 4, 255, 20, 9, 5, 255, 18, 7, 3, 255, 18, 9, 2, 255, 17, 8, 1, 255, 18, 9, 3, 255, 17, 9, 2, 255, 20, 10, 3, 255, 18, 8, 2, 255, 15, 8, 1, 255, 17, 12, 3, 255, 24, 13, 2, 255, 22, 12, 2, 255, 23, 13, 3, 255, 27, 14, 5, 255, 26, 11, 2, 255, 31, 12, 3, 255, 31, 10, 5, 255, 31, 13, 3, 255, 28, 14, 0, 255, 30, 13, 5, 255, 32, 11, 9, 255, 24, 12, 2, 255, 28, 15, 1, 255, 27, 15, 4, 255, 34, 12, 5, 255, 36, 13, 6, 255, 26, 13, 1, 255, 26, 17, 3, 255, 29, 13, 2, 255, 31, 18, 2, 255, 24, 14, 3, 255, 37, 18, 5, 255, 42, 17, 2, 255, 33, 17, 2, 255, 28, 18, 3, 255, 35, 19, 2, 255, 33, 14, 3, 255, 34, 17, 6, 255, 35, 19, 2, 255, 36, 18, 3, 255, 40, 20, 3, 255, 43, 22, 1, 255, 44, 18, 3, 255, 39, 22, 0, 255, 43, 21, 1, 255, 55, 20, 7, 255, 50, 18, 6, 255, 44, 21, 3, 255, 38, 23, 0, 255, 43, 23, 3, 255, 45, 26, 3, 255, 43, 21, 1, 255, 45, 21, 3, 255, 48, 25, 3, 255, 49, 18, 3, 255, 48, 23, 6, 255, 43, 26, 3, 255, 48, 24, 1, 255, 44, 22, 0, 255, 41, 22, 2, 255, 48, 23, 2, 255, 47, 21, 5, 255, 46, 22, 4, 255, 47, 24, 5, 255, 47, 24, 1, 255, 51, 25, 2, 255, 57, 28, 2, 255, 56, 28, 4, 255, 49, 26, 4, 255, 54, 26, 5, 255, 56, 26, 5, 255, 51, 24, 3, 255, 47, 20, 3, 255, 45, 24, 6, 255, 47, 26, 4, 255, 49, 24, 3, 255, 46, 22, 1, 255, 42, 25, 1, 255, 42, 23, 3, 255, 49, 21, 7, 255, 48, 26, 5, 255, 47, 26, 3, 255, 55, 28, 6, 255, 48, 26, 3, 255, 43, 24, 1, 255, 49, 26, 6, 255, 51, 28, 6, 255, 52, 32, 4, 255, 47, 28, 2, 255, 53, 25, 3, 255, 56, 28, 6, 255, 53, 31, 7, 255, 51, 27, 3, 255, 59, 29, 0, 255, 59, 31, 4, 255, 59, 27, 5, 255, 59, 26, 4, 255, 61, 32, 6, 255, 55, 31, 3, 255, 59, 31, 9, 255, 58, 32, 6, 255, 61, 39, 13, 255, 58, 37, 7, 255, 63, 43, 11, 255, 55, 42, 19, 255, 54, 44, 24, 255, 64, 50, 18, 255, 66, 53, 20, 255, 65, 53, 27, 255, 66, 59, 30, 255, 64, 62, 29, 255, 63, 62, 29, 255, 69, 69, 45, 255, 68, 67, 52, 255, 68, 70, 43, 255, 73, 74, 55, 255, 74, 76, 59, 255, 73, 81, 62, 255, 77, 88, 65, 255, 79, 89, 65, 255, 83, 93, 68, 255, 83, 97, 77, 255, 86, 104, 83, 255, 85, 109, 80, 255, 89, 112, 83, 255, 91, 117, 95, 255, 90, 121, 98, 255, 92, 127, 103, 255, 91, 132, 106, 255, 91, 133, 108, 255, 93, 136, 112, 255, 98, 139, 115, 255, 101, 143, 119, 255, 100, 144, 118, 255, 102, 145, 118, 255, 107, 148, 121, 255, 105, 147, 118, 255, 103, 147, 116, 255, 101, 146, 116, 255, 99, 144, 113, 255, 97, 141, 107, 255, 98, 141, 106, 255, 97, 139, 103, 255, 98, 137, 101, 255, 95, 130, 97, 255, 99, 127, 100, 255, 99, 124, 97, 255, 92, 119, 89, 255, 96, 117, 83, 255, 96, 114, 71, 255, 94, 108, 67, 255, 94, 98, 72, 255, 91, 96, 67, 255, 88, 96, 50, 255, 85, 94, 39, 255, 80, 85, 54, 255, 81, 81, 56, 255, 86, 87, 26, 255, 83, 80, 40, 255, 83, 75, 40, 255, 80, 70, 31, 255, 80, 67, 35, 255, 73, 65, 23, 255, 74, 61, 20, 255, 81, 65, 13, 255, 79, 59, 23, 255, 70, 56, 20, 255, 79, 62, 14, 255, 82, 57, 7, 255, 81, 52, 12, 255, 84, 53, 8, 255, 78, 51, 15, 255, 77, 48, 9, 255, 80, 46, 5, 255, 82, 46, 11, 255, 73, 43, 8, 255, 76, 43, 3, 255, 71, 38, 9, 255, 69, 40, 8, 255, 72, 45, 4, 255, 74, 41, 10, 255, 75, 38, 10, 255, 77, 38, 2, 255, 74, 37, 3, 255, 73, 37, 9, 255, 77, 35, 10, 255, 77, 33, 5, 255, 71, 31, 4, 255, 67, 33, 9, 255, 73, 36, 4, 255, 78, 33, 4, 255, 72, 33, 3, 255, 69, 32, 3, 255, 75, 31, 5, 255, 75, 36, 5, 255, 72, 34, 7, 255, 75, 29, 6, 255, 72, 30, 2, 255, 67, 36, 4, 255, 68, 34, 5, 255, 72, 28, 1, 255, 75, 29, 4, 255, 70, 33, 6, 255, 68, 29, 3, 255, 73, 30, 6, 255, 71, 29, 5, 255, 67, 30, 4, 255, 73, 31, 6, 255, 68, 28, 9, 255, 73, 28, 5, 255, 74, 31, 2, 255, 74, 32, 3, 255, 79, 31, 2, 255, 86, 30, 6, 255, 83, 32, 5, 255, 78, 32, 1, 255, 76, 30, 0, 255, 76, 31, 2, 255, 78, 33, 4, 255, 74, 29, 1, 255, 76, 31, 5, 255, 76, 31, 3, 255, 76, 31, 2, 255, 72, 29, 1, 255, 72, 28, 2, 255, 74, 28, 2, 255, 74, 26, 4, 255, 73, 28, 1, 255, 85, 33, 4, 255, 91, 31, 3, 255, 86, 29, 4, 255, 73, 26, 1, 255, 70, 29, 3, 255, 73, 29, 5, 255, 70, 26, 2, 255, 67, 28, 1, 255, 67, 23, 3, 255, 76, 25, 2, 255, 75, 25, 5, 255, 70, 24, 3, 255, 67, 25, 2, 255, 67, 24, 6, 255, 78, 27, 7, 255, 72, 23, 3, 255, 64, 21, 8, 255, 65, 20, 7, 255, 64, 19, 1, 255, 65, 22, 1, 255, 66, 21, 3, 255, 65, 22, 2, 255, 65, 25, 5, 255, 65, 24, 5, 255, 66, 24, 3, 255, 56, 24, 3, 255, 57, 23, 3, 255, 61, 21, 3, 255, 64, 21, 4, 255, 65, 22, 5, 255, 64, 19, 2, 255, 57, 20, 1, 255, 58, 22, 3, 255, 62, 23, 4, 255, 56, 24, 3, 255, 60, 22, 4, 255, 60, 19, 5, 255, 51, 19, 3, 255, 64, 22, 3, 255, 64, 18, 1, 255, 56, 21, 1, 255, 60, 20, 4, 255, 61, 15, 3, 255, 63, 24, 7, 255, 61, 23, 2, 255, 61, 17, 1, 255, 58, 16, 1, 255, 51, 19, 0, 255, 61, 18, 1, 255, 60, 13, 1, 255, 56, 19, 2, 255, 62, 21, 3, 255, 58, 15, 4, 255, 51, 16, 4, 255, 50, 16, 4, 255, 52, 16, 5, 255, 47, 16, 6, 255, 35, 18, 2, 255, 49, 17, 4, 255, 56, 15, 3, 255, 50, 16, 4, 255, 46, 18, 6, 255, 44, 16, 4, 255, 44, 17, 4, 255, 49, 18, 7, 255, 52, 14, 3, 255, 53, 15, 2, 255, 53, 16, 3, 255, 60, 18, 3, 255, 63, 17, 2, 255, 55, 17, 1, 255, 70, 19, 4, 255, 64, 20, 4, 255, 49, 16, 2, 255, 61, 12, 6, 255, 48, 20, 5, 255, 52, 17, 1, 255, 63, 18, 4, 255, 56, 14, 1, 255, 58, 13, 3, 255, 58, 13, 4, 255, 56, 15, 5, 255, 58, 14, 4, 255, 59, 16, 3, 255, 62, 15, 2, 255, 61, 13, 0, 255, 62, 16, 0, 255, 58, 16, 1, 255, 54, 15, 2, 255, 51, 13, 4, 255, 55, 15, 6, 255, 52, 14, 2, 255, 56, 14, 2, 255, 56, 13, 2, 255, 57, 14, 2, 255, 68, 15, 5, 255, 69, 15, 3, 255, 65, 16, 1, 255, 67, 14, 0, 255, 72, 16, 2, 255, 68, 16, 2, 255, 63, 15, 0, 255, 57, 15, 3, 255, 53, 12, 2, 255, 50, 13, 0, 255, 51, 15, 1, 255, 57, 14, 3, 255, 60, 11, 1, 255, 65, 15, 2, 255, 60, 15, 1, 255, 58, 14, 3, 255, 41, 9, 0, 255, 37, 9, 2, 255, 42, 9, 3, 255, 41, 10, 2, 255, 42, 11, 4, 255, 41, 12, 8, 255, 33, 5, 2, 255, 31, 12, 5, 255, 29, 9, 3, 255, 35, 5, 1, 255, 38, 9, 2, 255, 41, 10, 4, 255, 45, 11, 4, 255, 40, 10, 1, 255, 41, 12, 3, 255, 35, 11, 3, 255, 34, 9, 4, 255, 35, 6, 2, 255, 38, 12, 4, 255, 44, 11, 3, 255, 49, 7, 0, 255, 49, 11, 3, 255, 41, 12, 0, 255, 48, 11, 1, 255, 49, 12, 2, 255, 49, 11, 3, 255, 5, 1, 0, 255, 6, 0, 0, 255, 7, 1, 1, 255, 4, 0, 0, 255, 4, 1, 0, 255, 8, 2, 0, 255, 11, 2, 3, 255, 10, 0, 2, 255, 7, 1, 1, 255, 9, 3, 3, 255, 9, 3, 2, 255, 9, 4, 1, 255, 13, 5, 2, 255, 8, 2, 0, 255, 9, 5, 2, 255, 14, 6, 4, 255, 14, 3, 2, 255, 15, 5, 3, 255, 9, 2, 1, 255, 10, 3, 1, 255, 11, 3, 1, 255, 13, 2, 1, 255, 15, 5, 3, 255, 15, 4, 3, 255, 10, 4, 1, 255, 15, 8, 5, 255, 16, 5, 3, 255, 12, 3, 2, 255, 13, 4, 2, 255, 14, 5, 3, 255, 14, 7, 4, 255, 11, 6, 1, 255, 15, 7, 0, 255, 19, 9, 4, 255, 20, 9, 6, 255, 16, 5, 2, 255, 17, 8, 3, 255, 18, 11, 4, 255, 16, 9, 1, 255, 15, 7, 0, 255, 16, 9, 2, 255, 19, 8, 3, 255, 20, 6, 4, 255, 20, 10, 6, 255, 19, 10, 4, 255, 28, 14, 5, 255, 22, 10, 2, 255, 24, 10, 4, 255, 21, 9, 3, 255, 24, 10, 3, 255, 29, 12, 4, 255, 25, 14, 6, 255, 32, 13, 4, 255, 29, 13, 3, 255, 20, 13, 2, 255, 26, 11, 3, 255, 23, 14, 3, 255, 29, 12, 1, 255, 25, 15, 1, 255, 27, 17, 5, 255, 36, 15, 5, 255, 33, 15, 2, 255, 30, 16, 1, 255, 39, 13, 4, 255, 32, 15, 5, 255, 27, 15, 5, 255, 27, 14, 2, 255, 33, 17, 1, 255, 35, 19, 2, 255, 36, 19, 4, 255, 34, 17, 3, 255, 30, 17, 2, 255, 27, 16, 3, 255, 27, 15, 4, 255, 34, 17, 4, 255, 35, 16, 0, 255, 37, 20, 3, 255, 34, 20, 4, 255, 45, 20, 4, 255, 47, 20, 3, 255, 41, 18, 4, 255, 37, 18, 4, 255, 36, 22, 2, 255, 39, 22, 3, 255, 44, 20, 7, 255, 40, 21, 1, 255, 44, 24, 6, 255, 44, 22, 3, 255, 49, 26, 3, 255, 45, 19, 4, 255, 42, 20, 1, 255, 49, 23, 1, 255, 52, 20, 4, 255, 48, 21, 3, 255, 48, 26, 2, 255, 51, 26, 3, 255, 50, 25, 1, 255, 52, 25, 4, 255, 51, 23, 2, 255, 53, 24, 4, 255, 54, 25, 5, 255, 51, 23, 1, 255, 45, 22, 2, 255, 44, 26, 3, 255, 53, 27, 3, 255, 52, 23, 2, 255, 50, 24, 4, 255, 48, 22, 1, 255, 42, 23, 1, 255, 44, 25, 1, 255, 45, 25, 1, 255, 45, 25, 4, 255, 45, 26, 5, 255, 44, 22, 4, 255, 49, 22, 6, 255, 43, 24, 3, 255, 44, 27, 3, 255, 53, 27, 4, 255, 48, 26, 1, 255, 46, 26, 2, 255, 49, 26, 3, 255, 51, 27, 2, 255, 55, 29, 1, 255, 53, 31, 3, 255, 50, 29, 5, 255, 53, 27, 6, 255, 56, 26, 7, 255, 54, 26, 4, 255, 54, 32, 3, 255, 57, 29, 4, 255, 56, 27, 3, 255, 60, 30, 5, 255, 65, 30, 7, 255, 58, 29, 6, 255, 52, 33, 12, 255, 59, 41, 7, 255, 59, 34, 9, 255, 61, 38, 4, 255, 57, 36, 16, 255, 55, 39, 17, 255, 62, 48, 12, 255, 67, 53, 9, 255, 69, 54, 26, 255, 65, 54, 24, 255, 62, 57, 30, 255, 61, 60, 35, 255, 67, 67, 37, 255, 70, 70, 42, 255, 70, 74, 42, 255, 70, 73, 43, 255, 72, 74, 55, 255, 76, 80, 57, 255, 76, 83, 61, 255, 79, 87, 69, 255, 82, 90, 65, 255, 84, 94, 68, 255, 87, 102, 84, 255, 82, 105, 86, 255, 86, 112, 85, 255, 91, 115, 89, 255, 87, 120, 98, 255, 88, 122, 97, 255, 93, 130, 104, 255, 94, 136, 113, 255, 96, 138, 117, 255, 97, 141, 116, 255, 99, 143, 117, 255, 99, 145, 122, 255, 103, 149, 126, 255, 103, 148, 126, 255, 104, 147, 123, 255, 105, 148, 121, 255, 103, 149, 120, 255, 103, 148, 120, 255, 100, 144, 115, 255, 103, 144, 116, 255, 103, 143, 112, 255, 102, 139, 107, 255, 100, 134, 102, 255, 97, 127, 100, 255, 102, 127, 97, 255, 96, 122, 93, 255, 88, 117, 82, 255, 93, 114, 77, 255, 94, 106, 78, 255, 94, 106, 67, 255, 93, 102, 59, 255, 91, 98, 61, 255, 87, 92, 59, 255, 81, 87, 49, 255, 81, 83, 48, 255, 85, 85, 36, 255, 84, 81, 27, 255, 78, 75, 32, 255, 80, 73, 40, 255, 80, 69, 30, 255, 76, 63, 31, 255, 74, 62, 24, 255, 75, 67, 18, 255, 81, 63, 12, 255, 78, 60, 28, 255, 68, 54, 27, 255, 80, 60, 6, 255, 77, 55, 10, 255, 76, 50, 20, 255, 77, 48, 5, 255, 79, 47, 10, 255, 76, 44, 10, 255, 77, 43, 13, 255, 70, 38, 11, 255, 69, 40, 12, 255, 76, 40, 9, 255, 73, 42, 5, 255, 70, 45, 7, 255, 67, 40, 7, 255, 68, 36, 5, 255, 75, 35, 5, 255, 76, 33, 3, 255, 76, 38, 7, 255, 76, 40, 8, 255, 75, 37, 6, 255, 80, 35, 8, 255, 73, 33, 5, 255, 69, 35, 5, 255, 74, 37, 6, 255, 79, 33, 5, 255, 73, 34, 6, 255, 66, 33, 4, 255, 75, 31, 3, 255, 76, 34, 3, 255, 68, 34, 4, 255, 73, 32, 6, 255, 78, 29, 3, 255, 76, 30, 5, 255, 71, 28, 6, 255, 71, 28, 7, 255, 73, 28, 5, 255, 70, 29, 3, 255, 72, 29, 4, 255, 80, 29, 6, 255, 75, 27, 6, 255, 64, 29, 4, 255, 65, 29, 2, 255, 67, 28, 2, 255, 74, 27, 4, 255, 70, 25, 0, 255, 70, 30, 3, 255, 78, 29, 9, 255, 85, 29, 3, 255, 82, 33, 1, 255, 77, 32, 2, 255, 77, 29, 0, 255, 81, 33, 2, 255, 79, 31, 3, 255, 74, 25, 2, 255, 72, 25, 4, 255, 77, 30, 4, 255, 75, 29, 4, 255, 77, 30, 5, 255, 76, 28, 5, 255, 72, 28, 3, 255, 76, 28, 4, 255, 78, 27, 6, 255, 75, 27, 3, 255, 76, 30, 0, 255, 79, 30, 1, 255, 79, 26, 3, 255, 76, 25, 5, 255, 72, 24, 4, 255, 70, 26, 7, 255, 70, 25, 4, 255, 72, 24, 2, 255, 72, 25, 4, 255, 67, 25, 2, 255, 67, 24, 1, 255, 73, 26, 5, 255, 74, 23, 7, 255, 65, 20, 3, 255, 66, 21, 1, 255, 64, 19, 2, 255, 59, 19, 3, 255, 66, 23, 5, 255, 65, 20, 2, 255, 69, 21, 6, 255, 67, 22, 3, 255, 61, 20, 4, 255, 62, 20, 4, 255, 66, 23, 1, 255, 64, 24, 6, 255, 66, 20, 4, 255, 66, 20, 4, 255, 64, 20, 4, 255, 64, 18, 1, 255, 61, 20, 2, 255, 61, 20, 3, 255, 53, 19, 0, 255, 52, 20, 1, 255, 64, 19, 4, 255, 63, 22, 5, 255, 49, 15, 3, 255, 53, 19, 9, 255, 52, 18, 3, 255, 59, 19, 1, 255, 55, 21, 1, 255, 58, 20, 5, 255, 67, 15, 5, 255, 69, 15, 2, 255, 64, 18, 3, 255, 59, 14, 2, 255, 57, 16, 5, 255, 47, 17, 2, 255, 55, 21, 1, 255, 59, 18, 1, 255, 56, 18, 1, 255, 59, 18, 2, 255, 53, 14, 3, 255, 44, 15, 3, 255, 50, 18, 4, 255, 55, 17, 1, 255, 54, 18, 4, 255, 44, 15, 4, 255, 49, 15, 2, 255, 51, 13, 1, 255, 49, 17, 6, 255, 45, 16, 5, 255, 46, 15, 3, 255, 44, 15, 4, 255, 43, 11, 1, 255, 49, 14, 3, 255, 48, 14, 3, 255, 47, 12, 5, 255, 52, 14, 6, 255, 54, 14, 5, 255, 42, 10, 3, 255, 44, 12, 3, 255, 50, 14, 4, 255, 39, 15, 2, 255, 52, 13, 2, 255, 45, 14, 3, 255, 48, 16, 3, 255, 59, 18, 6, 255, 50, 15, 1, 255, 57, 17, 5, 255, 56, 14, 3, 255, 56, 16, 3, 255, 59, 14, 4, 255, 58, 13, 3, 255, 65, 20, 5, 255, 67, 19, 3, 255, 62, 17, 2, 255, 65, 21, 7, 255, 56, 13, 4, 255, 56, 12, 6, 255, 57, 15, 2, 255, 52, 17, 2, 255, 53, 11, 2, 255, 55, 14, 4, 255, 61, 18, 2, 255, 71, 15, 1, 255, 74, 16, 3, 255, 68, 13, 1, 255, 64, 15, 2, 255, 60, 14, 1, 255, 60, 17, 3, 255, 52, 12, 0, 255, 49, 12, 3, 255, 50, 13, 3, 255, 47, 13, 1, 255, 49, 17, 5, 255, 53, 14, 2, 255, 61, 13, 4, 255, 61, 11, 2, 255, 64, 15, 1, 255, 64, 14, 0, 255, 50, 12, 3, 255, 37, 7, 4, 255, 35, 7, 2, 255, 38, 14, 2, 255, 39, 15, 4, 255, 32, 9, 2, 255, 32, 10, 3, 255, 31, 9, 1, 255, 32, 8, 2, 255, 33, 7, 4, 255, 29, 10, 5, 255, 30, 9, 2, 255, 32, 10, 0, 255, 54, 15, 4, 255, 56, 11, 0, 255, 56, 11, 2, 255, 45, 8, 4, 255, 42, 9, 7, 255, 44, 12, 6, 255, 36, 12, 1, 255, 47, 12, 4, 255, 51, 14, 5, 255, 41, 11, 2, 255, 39, 10, 5, 255, 45, 12, 5, 255, 48, 8, 1, 255, 7, 2, 1, 255, 7, 2, 1, 255, 8, 3, 3, 255, 6, 0, 0, 255, 11, 3, 2, 255, 12, 4, 2, 255, 8, 2, 1, 255, 8, 1, 2, 255, 10, 1, 2, 255, 8, 1, 2, 255, 7, 3, 1, 255, 9, 4, 1, 255, 11, 3, 1, 255, 9, 3, 0, 255, 11, 4, 1, 255, 12, 5, 2, 255, 8, 2, 0, 255, 9, 3, 1, 255, 10, 2, 0, 255, 13, 5, 3, 255, 13, 3, 1, 255, 12, 1, 0, 255, 13, 3, 1, 255, 12, 3, 1, 255, 12, 3, 2, 255, 14, 5, 4, 255, 15, 3, 3, 255, 13, 3, 2, 255, 15, 5, 4, 255, 16, 5, 1, 255, 14, 6, 2, 255, 13, 6, 2, 255, 17, 6, 2, 255, 15, 6, 1, 255, 16, 7, 1, 255, 16, 5, 0, 255, 18, 8, 4, 255, 15, 7, 2, 255, 15, 8, 3, 255, 16, 9, 3, 255, 18, 10, 4, 255, 20, 9, 4, 255, 21, 9, 4, 255, 18, 8, 3, 255, 19, 11, 4, 255, 22, 10, 1, 255, 23, 9, 3, 255, 25, 8, 3, 255, 23, 7, 1, 255, 23, 10, 2, 255, 17, 11, 1, 255, 20, 11, 0, 255, 24, 10, 2, 255, 29, 14, 6, 255, 25, 13, 2, 255, 24, 13, 1, 255, 26, 15, 3, 255, 32, 12, 5, 255, 27, 16, 5, 255, 23, 15, 1, 255, 30, 12, 0, 255, 32, 13, 1, 255, 31, 18, 4, 255, 35, 15, 3, 255, 27, 12, 2, 255, 29, 13, 3, 255, 29, 14, 4, 255, 28, 13, 3, 255, 30, 15, 3, 255, 29, 14, 4, 255, 30, 17, 6, 255, 29, 17, 2, 255, 32, 17, 3, 255, 32, 14, 4, 255, 35, 17, 5, 255, 35, 16, 2, 255, 37, 19, 4, 255, 33, 22, 3, 255, 36, 20, 4, 255, 38, 16, 1, 255, 39, 19, 4, 255, 37, 19, 4, 255, 36, 22, 4, 255, 43, 20, 3, 255, 44, 21, 6, 255, 42, 24, 8, 255, 37, 15, 2, 255, 43, 19, 5, 255, 45, 23, 4, 255, 40, 21, 3, 255, 38, 22, 2, 255, 51, 23, 5, 255, 58, 20, 5, 255, 45, 21, 3, 255, 37, 24, 3, 255, 48, 23, 2, 255, 51, 25, 4, 255, 51, 24, 6, 255, 55, 20, 4, 255, 55, 21, 5, 255, 51, 18, 1, 255, 47, 20, 3, 255, 45, 23, 7, 255, 47, 25, 7, 255, 48, 23, 3, 255, 50, 20, 1, 255, 49, 22, 4, 255, 46, 21, 4, 255, 49, 28, 7, 255, 54, 24, 3, 255, 49, 22, 1, 255, 44, 26, 2, 255, 41, 23, 2, 255, 51, 26, 6, 255, 48, 25, 4, 255, 44, 24, 5, 255, 45, 27, 5, 255, 45, 26, 1, 255, 49, 27, 2, 255, 53, 29, 5, 255, 49, 26, 5, 255, 48, 28, 3, 255, 54, 27, 3, 255, 54, 26, 6, 255, 51, 28, 4, 255, 52, 28, 3, 255, 56, 27, 7, 255, 54, 27, 6, 255, 56, 28, 8, 255, 56, 27, 6, 255, 52, 30, 8, 255, 49, 31, 1, 255, 60, 32, 8, 255, 60, 28, 9, 255, 66, 33, 7, 255, 66, 40, 3, 255, 54, 34, 5, 255, 62, 39, 11, 255, 57, 35, 18, 255, 59, 43, 18, 255, 59, 48, 14, 255, 66, 51, 16, 255, 71, 52, 23, 255, 70, 55, 27, 255, 69, 56, 36, 255, 64, 62, 33, 255, 66, 68, 38, 255, 68, 66, 42, 255, 72, 74, 43, 255, 71, 73, 54, 255, 75, 77, 62, 255, 79, 82, 62, 255, 79, 84, 64, 255, 83, 89, 72, 255, 87, 95, 69, 255, 90, 100, 76, 255, 88, 104, 84, 255, 84, 106, 87, 255, 87, 115, 92, 255, 90, 119, 96, 255, 89, 121, 100, 255, 89, 128, 101, 255, 93, 136, 107, 255, 94, 137, 116, 255, 95, 141, 123, 255, 99, 145, 123, 255, 102, 147, 123, 255, 100, 147, 125, 255, 100, 149, 127, 255, 104, 150, 129, 255, 104, 151, 126, 255, 103, 149, 121, 255, 103, 149, 121, 255, 105, 148, 120, 255, 99, 146, 115, 255, 99, 145, 113, 255, 102, 141, 108, 255, 102, 134, 103, 255, 99, 132, 100, 255, 101, 129, 96, 255, 99, 126, 86, 255, 94, 123, 83, 255, 92, 118, 76, 255, 95, 110, 78, 255, 93, 102, 77, 255, 94, 103, 74, 255, 90, 99, 57, 255, 87, 93, 49, 255, 87, 89, 59, 255, 85, 85, 52, 255, 83, 80, 49, 255, 83, 79, 41, 255, 82, 78, 43, 255, 81, 76, 24, 255, 75, 73, 23, 255, 71, 67, 29, 255, 75, 64, 24, 255, 78, 63, 21, 255, 77, 65, 18, 255, 75, 60, 16, 255, 77, 59, 23, 255, 78, 61, 8, 255, 79, 54, 14, 255, 76, 55, 7, 255, 70, 51, 7, 255, 70, 47, 12, 255, 71, 45, 12, 255, 73, 41, 14, 255, 68, 43, 20, 255, 69, 50, 11, 255, 74, 41, 4, 255, 74, 37, 10, 255, 73, 40, 7, 255, 72, 41, 6, 255, 69, 36, 5, 255, 78, 34, 6, 255, 75, 37, 5, 255, 77, 37, 8, 255, 72, 33, 5, 255, 71, 37, 3, 255, 68, 33, 4, 255, 73, 32, 8, 255, 72, 34, 4, 255, 70, 38, 2, 255, 79, 37, 8, 255, 76, 31, 5, 255, 71, 35, 3, 255, 73, 36, 6, 255, 75, 30, 5, 255, 75, 31, 4, 255, 70, 34, 7, 255, 71, 32, 3, 255, 78, 32, 4, 255, 78, 30, 5, 255, 71, 26, 3, 255, 70, 33, 9, 255, 68, 32, 1, 255, 71, 25, 1, 255, 70, 34, 6, 255, 71, 27, 2, 255, 70, 25, 3, 255, 70, 29, 5, 255, 71, 27, 3, 255, 68, 29, 2, 255, 68, 25, 3, 255, 73, 27, 6, 255, 75, 27, 3, 255, 82, 28, 2, 255, 88, 30, 3, 255, 83, 27, 0, 255, 81, 28, 2, 255, 79, 31, 2, 255, 78, 31, 2, 255, 78, 32, 2, 255, 73, 29, 2, 255, 78, 29, 6, 255, 77, 23, 2, 255, 81, 30, 7, 255, 78, 30, 4, 255, 76, 28, 2, 255, 74, 29, 4, 255, 73, 28, 5, 255, 78, 25, 4, 255, 74, 26, 4, 255, 70, 28, 3, 255, 78, 28, 3, 255, 78, 25, 2, 255, 74, 28, 4, 255, 72, 27, 2, 255, 65, 23, 5, 255, 65, 24, 5, 255, 68, 22, 2, 255, 67, 26, 5, 255, 65, 24, 1, 255, 68, 25, 2, 255, 66, 21, 5, 255, 75, 22, 7, 255, 68, 20, 3, 255, 65, 24, 5, 255, 64, 22, 6, 255, 65, 23, 5, 255, 67, 23, 5, 255, 63, 20, 4, 255, 67, 21, 9, 255, 62, 21, 3, 255, 64, 21, 6, 255, 62, 19, 7, 255, 69, 19, 4, 255, 63, 22, 3, 255, 59, 20, 2, 255, 65, 19, 2, 255, 68, 21, 6, 255, 57, 18, 4, 255, 55, 19, 1, 255, 60, 23, 4, 255, 54, 22, 3, 255, 51, 18, 3, 255, 55, 16, 3, 255, 60, 21, 8, 255, 57, 20, 6, 255, 55, 16, 4, 255, 54, 20, 4, 255, 55, 22, 3, 255, 55, 20, 2, 255, 52, 18, 5, 255, 60, 22, 7, 255, 66, 22, 2, 255, 59, 17, 3, 255, 52, 15, 6, 255, 57, 16, 6, 255, 54, 19, 2, 255, 50, 17, 3, 255, 51, 15, 2, 255, 52, 20, 3, 255, 52, 17, 6, 255, 48, 15, 9, 255, 55, 19, 5, 255, 59, 24, 2, 255, 54, 18, 3, 255, 42, 15, 3, 255, 51, 14, 6, 255, 56, 14, 5, 255, 47, 11, 0, 255, 41, 14, 3, 255, 40, 13, 2, 255, 45, 14, 3, 255, 43, 12, 2, 255, 43, 12, 2, 255, 44, 13, 1, 255, 41, 14, 1, 255, 45, 13, 3, 255, 58, 17, 6, 255, 53, 16, 3, 255, 46, 14, 5, 255, 41, 11, 4, 255, 47, 13, 6, 255, 49, 15, 5, 255, 37, 12, 1, 255, 47, 15, 7, 255, 45, 12, 2, 255, 45, 13, 4, 255, 45, 15, 4, 255, 50, 17, 0, 255, 53, 15, 4, 255, 49, 15, 3, 255, 52, 16, 0, 255, 55, 11, 0, 255, 74, 22, 6, 255, 73, 22, 3, 255, 65, 17, 1, 255, 61, 17, 2, 255, 58, 15, 2, 255, 59, 16, 5, 255, 56, 13, 0, 255, 52, 14, 1, 255, 55, 14, 5, 255, 59, 13, 4, 255, 56, 15, 1, 255, 64, 17, 1, 255, 70, 16, 4, 255, 64, 12, 2, 255, 59, 12, 1, 255, 53, 14, 0, 255, 51, 16, 2, 255, 50, 12, 2, 255, 53, 14, 3, 255, 52, 14, 4, 255, 44, 11, 1, 255, 37, 15, 3, 255, 46, 14, 4, 255, 55, 9, 2, 255, 58, 8, 2, 255, 56, 14, 4, 255, 59, 16, 4, 255, 55, 16, 6, 255, 39, 9, 1, 255, 36, 10, 2, 255, 34, 9, 1, 255, 40, 11, 3, 255, 44, 12, 3, 255, 39, 9, 2, 255, 31, 4, 1, 255, 32, 7, 6, 255, 25, 6, 5, 255, 26, 5, 4, 255, 25, 4, 2, 255, 29, 7, 3, 255, 46, 11, 8, 255, 49, 9, 4, 255, 51, 8, 3, 255, 36, 9, 3, 255, 27, 7, 2, 255, 39, 9, 4, 255, 44, 10, 3, 255, 46, 11, 2, 255, 42, 11, 1, 255, 44, 14, 4, 255, 42, 9, 2, 255, 47, 12, 2, 255, 48, 11, 2, 255, 7, 1, 1, 255, 5, 1, 0, 255, 7, 2, 2, 255, 9, 1, 0, 255, 13, 1, 0, 255, 13, 2, 1, 255, 6, 1, 0, 255, 6, 1, 1, 255, 8, 1, 1, 255, 8, 1, 1, 255, 10, 3, 2, 255, 11, 4, 1, 255, 9, 3, 1, 255, 12, 2, 1, 255, 12, 2, 1, 255, 10, 3, 1, 255, 9, 5, 2, 255, 10, 5, 2, 255, 13, 4, 2, 255, 15, 3, 2, 255, 15, 4, 2, 255, 14, 4, 3, 255, 13, 3, 2, 255, 15, 5, 3, 255, 16, 5, 2, 255, 15, 5, 3, 255, 13, 3, 2, 255, 13, 4, 2, 255, 17, 7, 5, 255, 15, 5, 2, 255, 14, 4, 1, 255, 15, 8, 4, 255, 16, 3, 2, 255, 18, 9, 3, 255, 17, 10, 1, 255, 16, 5, 0, 255, 17, 6, 2, 255, 16, 5, 0, 255, 17, 9, 4, 255, 15, 7, 1, 255, 17, 8, 2, 255, 19, 8, 2, 255, 19, 9, 0, 255, 19, 9, 2, 255, 20, 10, 3, 255, 22, 10, 1, 255, 21, 10, 2, 255, 24, 11, 3, 255, 25, 9, 2, 255, 23, 9, 2, 255, 23, 13, 3, 255, 26, 14, 5, 255, 21, 12, 3, 255, 27, 14, 4, 255, 32, 12, 1, 255, 28, 14, 1, 255, 29, 15, 4, 255, 33, 12, 3, 255, 33, 12, 5, 255, 30, 14, 3, 255, 30, 13, 4, 255, 30, 14, 3, 255, 28, 12, 0, 255, 32, 15, 3, 255, 33, 16, 7, 255, 35, 14, 5, 255, 37, 14, 5, 255, 31, 13, 1, 255, 34, 18, 6, 255, 32, 15, 4, 255, 33, 16, 6, 255, 28, 11, 1, 255, 34, 16, 2, 255, 33, 14, 0, 255, 34, 16, 2, 255, 37, 17, 3, 255, 38, 17, 2, 255, 32, 21, 3, 255, 30, 21, 3, 255, 31, 17, 2, 255, 40, 17, 4, 255, 42, 19, 4, 255, 38, 22, 4, 255, 47, 24, 3, 255, 39, 21, 1, 255, 37, 22, 3, 255, 45, 20, 6, 255, 46, 17, 2, 255, 44, 24, 3, 255, 38, 24, 2, 255, 40, 22, 4, 255, 37, 22, 1, 255, 38, 22, 1, 255, 47, 22, 5, 255, 52, 21, 7, 255, 53, 20, 4, 255, 61, 25, 1, 255, 56, 23, 1, 255, 53, 23, 4, 255, 50, 21, 7, 255, 43, 18, 6, 255, 38, 20, 11, 255, 44, 22, 5, 255, 56, 28, 6, 255, 50, 22, 2, 255, 52, 22, 2, 255, 53, 22, 2, 255, 52, 24, 4, 255, 45, 22, 2, 255, 47, 23, 3, 255, 59, 23, 6, 255, 52, 24, 2, 255, 55, 26, 7, 255, 59, 23, 7, 255, 51, 21, 2, 255, 45, 23, 4, 255, 50, 25, 5, 255, 51, 26, 6, 255, 51, 25, 8, 255, 49, 23, 7, 255, 50, 25, 1, 255, 51, 29, 4, 255, 50, 24, 4, 255, 56, 25, 6, 255, 55, 27, 7, 255, 53, 23, 2, 255, 55, 24, 3, 255, 53, 28, 3, 255, 55, 29, 6, 255, 54, 27, 5, 255, 52, 25, 4, 255, 59, 31, 4, 255, 57, 27, 6, 255, 59, 31, 8, 255, 54, 30, 4, 255, 60, 35, 9, 255, 63, 34, 8, 255, 63, 32, 20, 255, 57, 38, 11, 255, 54, 40, 5, 255, 63, 45, 18, 255, 64, 47, 25, 255, 65, 50, 24, 255, 63, 55, 35, 255, 66, 58, 27, 255, 65, 65, 32, 255, 67, 65, 52, 255, 71, 67, 44, 255, 76, 76, 50, 255, 71, 74, 52, 255, 74, 77, 58, 255, 81, 85, 60, 255, 81, 86, 60, 255, 85, 91, 70, 255, 87, 95, 75, 255, 88, 99, 81, 255, 86, 103, 84, 255, 86, 111, 90, 255, 88, 117, 95, 255, 90, 123, 98, 255, 92, 128, 105, 255, 89, 133, 105, 255, 93, 138, 110, 255, 95, 139, 116, 255, 94, 143, 122, 255, 99, 146, 126, 255, 104, 148, 126, 255, 103, 150, 128, 255, 101, 150, 128, 255, 103, 152, 129, 255, 103, 150, 122, 255, 105, 151, 123, 255, 103, 151, 123, 255, 104, 149, 119, 255, 99, 147, 117, 255, 96, 144, 112, 255, 100, 140, 109, 255, 101, 136, 102, 255, 100, 134, 97, 255, 102, 127, 93, 255, 98, 126, 83, 255, 91, 120, 79, 255, 93, 116, 73, 255, 93, 107, 73, 255, 91, 102, 74, 255, 90, 100, 66, 255, 88, 95, 58, 255, 84, 90, 54, 255, 86, 89, 56, 255, 88, 88, 42, 255, 84, 82, 35, 255, 77, 72, 47, 255, 76, 73, 38, 255, 81, 70, 36, 255, 76, 67, 26, 255, 70, 66, 22, 255, 80, 67, 28, 255, 76, 62, 15, 255, 81, 62, 15, 255, 81, 58, 14, 255, 75, 53, 17, 255, 78, 56, 13, 255, 71, 48, 13, 255, 70, 51, 8, 255, 67, 50, 7, 255, 72, 42, 12, 255, 72, 46, 10, 255, 67, 45, 7, 255, 69, 43, 5, 255, 79, 45, 6, 255, 74, 41, 5, 255, 69, 40, 8, 255, 72, 37, 7, 255, 77, 38, 10, 255, 72, 37, 4, 255, 75, 34, 5, 255, 71, 37, 8, 255, 72, 35, 7, 255, 74, 33, 6, 255, 75, 33, 10, 255, 74, 29, 12, 255, 74, 28, 8, 255, 71, 33, 5, 255, 65, 31, 6, 255, 73, 31, 6, 255, 75, 28, 7, 255, 70, 33, 4, 255, 70, 34, 2, 255, 76, 30, 6, 255, 74, 33, 4, 255, 71, 35, 3, 255, 72, 33, 5, 255, 72, 31, 3, 255, 75, 29, 4, 255, 75, 28, 4, 255, 72, 30, 3, 255, 72, 33, 5, 255, 74, 29, 6, 255, 68, 31, 5, 255, 67, 27, 3, 255, 69, 28, 3, 255, 75, 28, 5, 255, 71, 30, 3, 255, 72, 29, 5, 255, 70, 24, 2, 255, 76, 29, 6, 255, 78, 31, 2, 255, 78, 33, 0, 255, 77, 34, 2, 255, 76, 30, 2, 255, 79, 31, 5, 255, 73, 31, 1, 255, 72, 30, 1, 255, 76, 28, 4, 255, 78, 26, 3, 255, 86, 31, 4, 255, 77, 25, 4, 255, 81, 29, 7, 255, 74, 30, 1, 255, 75, 29, 1, 255, 73, 28, 2, 255, 71, 28, 5, 255, 74, 26, 1, 255, 71, 28, 3, 255, 66, 27, 2, 255, 78, 29, 2, 255, 85, 32, 6, 255, 87, 33, 5, 255, 84, 26, 1, 255, 66, 25, 1, 255, 67, 27, 2, 255, 67, 22, 2, 255, 67, 26, 4, 255, 72, 25, 5, 255, 69, 25, 4, 255, 61, 24, 3, 255, 68, 23, 1, 255, 67, 19, 2, 255, 65, 21, 4, 255, 72, 25, 2, 255, 71, 21, 2, 255, 69, 18, 4, 255, 70, 19, 0, 255, 67, 23, 4, 255, 64, 22, 6, 255, 66, 20, 3, 255, 62, 22, 2, 255, 58, 20, 2, 255, 56, 20, 5, 255, 58, 20, 8, 255, 56, 19, 6, 255, 57, 23, 5, 255, 58, 24, 1, 255, 53, 22, 1, 255, 54, 20, 1, 255, 69, 24, 5, 255, 75, 25, 4, 255, 63, 20, 0, 255, 53, 21, 5, 255, 51, 22, 8, 255, 51, 17, 1, 255, 57, 20, 2, 255, 59, 20, 1, 255, 61, 19, 3, 255, 59, 18, 2, 255, 56, 19, 1, 255, 57, 21, 4, 255, 55, 22, 4, 255, 48, 18, 5, 255, 53, 20, 5, 255, 54, 20, 1, 255, 51, 15, 4, 255, 55, 17, 5, 255, 44, 16, 0, 255, 41, 18, 5, 255, 54, 16, 4, 255, 72, 23, 3, 255, 79, 22, 3, 255, 63, 18, 5, 255, 45, 15, 4, 255, 48, 14, 2, 255, 50, 14, 2, 255, 49, 12, 1, 255, 45, 13, 1, 255, 40, 15, 1, 255, 45, 17, 5, 255, 48, 16, 4, 255, 47, 14, 4, 255, 40, 14, 4, 255, 45, 18, 4, 255, 61, 19, 5, 255, 73, 21, 7, 255, 67, 17, 3, 255, 67, 16, 2, 255, 62, 17, 4, 255, 53, 17, 3, 255, 58, 18, 5, 255, 41, 15, 0, 255, 45, 13, 2, 255, 52, 14, 1, 255, 44, 13, 7, 255, 49, 15, 3, 255, 52, 14, 0, 255, 50, 15, 4, 255, 48, 13, 2, 255, 58, 15, 5, 255, 56, 14, 3, 255, 62, 15, 0, 255, 62, 17, 0, 255, 67, 18, 4, 255, 61, 14, 2, 255, 61, 14, 0, 255, 59, 14, 1, 255, 55, 14, 1, 255, 54, 12, 2, 255, 58, 13, 5, 255, 55, 12, 3, 255, 52, 13, 3, 255, 52, 15, 4, 255, 55, 11, 1, 255, 60, 12, 1, 255, 59, 15, 4, 255, 53, 14, 6, 255, 55, 13, 3, 255, 58, 15, 3, 255, 46, 16, 2, 255, 51, 13, 1, 255, 50, 9, 3, 255, 39, 11, 3, 255, 42, 13, 4, 255, 45, 12, 2, 255, 39, 8, 0, 255, 41, 11, 1, 255, 48, 12, 2, 255, 50, 13, 4, 255, 41, 11, 2, 255, 40, 12, 5, 255, 39, 8, 3, 255, 42, 10, 2, 255, 44, 12, 0, 255, 45, 15, 4, 255, 34, 11, 5, 255, 25, 7, 3, 255, 26, 7, 4, 255, 26, 10, 3, 255, 24, 7, 3, 255, 25, 8, 4, 255, 25, 7, 4, 255, 29, 8, 4, 255, 32, 7, 1, 255, 29, 7, 2, 255, 29, 9, 3, 255, 34, 10, 3, 255, 40, 8, 0, 255, 48, 11, 3, 255, 50, 13, 4, 255, 46, 13, 3, 255, 43, 12, 2, 255, 44, 11, 3, 255, 45, 12, 3, 255, 7, 1, 1, 255, 5, 0, 0, 255, 7, 2, 1, 255, 10, 2, 1, 255, 10, 0, 0, 255, 10, 0, 0, 255, 10, 0, 1, 255, 8, 2, 2, 255, 7, 3, 2, 255, 10, 2, 2, 255, 14, 2, 2, 255, 11, 2, 1, 255, 7, 2, 0, 255, 12, 2, 1, 255, 13, 2, 2, 255, 13, 2, 1, 255, 11, 3, 1, 255, 10, 2, 0, 255, 12, 1, 1, 255, 13, 2, 0, 255, 14, 3, 1, 255, 14, 4, 3, 255, 14, 4, 3, 255, 14, 4, 2, 255, 14, 3, 1, 255, 13, 2, 1, 255, 11, 2, 1, 255, 12, 5, 2, 255, 17, 9, 6, 255, 13, 3, 2, 255, 10, 1, 0, 255, 14, 8, 4, 255, 18, 5, 3, 255, 15, 5, 0, 255, 18, 9, 2, 255, 19, 8, 4, 255, 17, 6, 4, 255, 16, 5, 4, 255, 21, 10, 5, 255, 18, 7, 0, 255, 20, 10, 1, 255, 20, 10, 0, 255, 20, 11, 1, 255, 23, 11, 3, 255, 25, 11, 3, 255, 28, 11, 4, 255, 23, 11, 3, 255, 20, 11, 2, 255, 23, 10, 2, 255, 21, 6, 0, 255, 26, 11, 2, 255, 22, 12, 3, 255, 18, 10, 2, 255, 25, 12, 3, 255, 31, 13, 1, 255, 29, 12, 1, 255, 30, 13, 1, 255, 34, 14, 3, 255, 31, 13, 3, 255, 28, 10, 1, 255, 25, 13, 2, 255, 27, 16, 3, 255, 29, 15, 4, 255, 28, 15, 3, 255, 32, 13, 5, 255, 33, 12, 4, 255, 36, 16, 5, 255, 35, 18, 3, 255, 34, 17, 1, 255, 34, 14, 0, 255, 35, 15, 6, 255, 31, 13, 4, 255, 33, 14, 3, 255, 33, 14, 2, 255, 37, 18, 7, 255, 38, 19, 5, 255, 39, 17, 3, 255, 35, 15, 1, 255, 34, 17, 3, 255, 37, 18, 5, 255, 43, 18, 7, 255, 44, 18, 6, 255, 39, 19, 4, 255, 40, 21, 1, 255, 39, 21, 0, 255, 43, 22, 4, 255, 47, 21, 4, 255, 48, 23, 3, 255, 46, 28, 3, 255, 42, 26, 3, 255, 43, 18, 1, 255, 49, 21, 1, 255, 51, 25, 4, 255, 53, 26, 7, 255, 49, 23, 4, 255, 39, 25, 0, 255, 49, 24, 0, 255, 46, 22, 0, 255, 41, 26, 2, 255, 44, 23, 4, 255, 44, 20, 6, 255, 47, 20, 10, 255, 50, 21, 3, 255, 47, 23, 0, 255, 50, 26, 3, 255, 49, 25, 2, 255, 50, 25, 2, 255, 53, 25, 1, 255, 50, 25, 3, 255, 48, 22, 7, 255, 55, 23, 6, 255, 49, 24, 4, 255, 43, 22, 3, 255, 51, 23, 6, 255, 47, 24, 2, 255, 42, 25, 4, 255, 44, 26, 4, 255, 43, 24, 1, 255, 44, 22, 1, 255, 50, 25, 5, 255, 54, 29, 6, 255, 50, 26, 3, 255, 51, 22, 2, 255, 59, 26, 10, 255, 42, 20, 3, 255, 54, 29, 4, 255, 62, 28, 1, 255, 57, 28, 7, 255, 54, 28, 2, 255, 50, 29, 7, 255, 54, 30, 5, 255, 64, 32, 4, 255, 64, 30, 7, 255, 54, 29, 7, 255, 54, 31, 7, 255, 56, 30, 13, 255, 65, 38, 8, 255, 70, 36, 7, 255, 65, 37, 20, 255, 56, 41, 24, 255, 62, 52, 17, 255, 68, 45, 26, 255, 68, 51, 24, 255, 66, 57, 29, 255, 68, 59, 30, 255, 72, 66, 29, 255, 75, 66, 39, 255, 72, 69, 39, 255, 76, 76, 47, 255, 78, 78, 57, 255, 76, 78, 61, 255, 79, 84, 63, 255, 82, 91, 65, 255, 85, 92, 72, 255, 85, 94, 80, 255, 85, 101, 84, 255, 86, 109, 90, 255, 85, 114, 92, 255, 87, 118, 95, 255, 94, 126, 102, 255, 92, 132, 108, 255, 91, 136, 108, 255, 96, 140, 112, 255, 99, 141, 118, 255, 97, 145, 123, 255, 102, 148, 127, 255, 105, 148, 128, 255, 107, 154, 132, 255, 102, 152, 130, 255, 104, 152, 130, 255, 105, 151, 126, 255, 107, 152, 126, 255, 104, 150, 125, 255, 103, 151, 123, 255, 104, 148, 121, 255, 103, 143, 117, 255, 100, 139, 112, 255, 100, 136, 105, 255, 99, 130, 96, 255, 102, 124, 91, 255, 97, 120, 92, 255, 90, 114, 72, 255, 93, 111, 75, 255, 94, 107, 72, 255, 89, 101, 64, 255, 85, 94, 61, 255, 85, 92, 52, 255, 82, 89, 46, 255, 80, 83, 54, 255, 81, 82, 46, 255, 82, 83, 37, 255, 79, 78, 37, 255, 87, 73, 26, 255, 84, 65, 33, 255, 75, 64, 31, 255, 73, 66, 20, 255, 79, 63, 22, 255, 81, 57, 22, 255, 79, 58, 16, 255, 82, 56, 11, 255, 77, 51, 14, 255, 74, 53, 15, 255, 75, 50, 10, 255, 76, 51, 10, 255, 66, 47, 8, 255, 79, 44, 6, 255, 74, 43, 9, 255, 70, 46, 9, 255, 75, 40, 6, 255, 85, 37, 6, 255, 78, 43, 4, 255, 72, 39, 1, 255, 72, 40, 0, 255, 78, 39, 1, 255, 78, 34, 7, 255, 70, 35, 2, 255, 76, 37, 4, 255, 72, 35, 8, 255, 76, 36, 2, 255, 72, 33, 3, 255, 65, 29, 3, 255, 68, 35, 5, 255, 73, 38, 4, 255, 73, 32, 4, 255, 72, 31, 3, 255, 75, 30, 8, 255, 70, 33, 7, 255, 69, 34, 4, 255, 73, 29, 5, 255, 74, 34, 4, 255, 71, 36, 0, 255, 74, 34, 5, 255, 72, 31, 6, 255, 73, 28, 4, 255, 76, 31, 5, 255, 71, 27, 2, 255, 72, 29, 10, 255, 70, 30, 8, 255, 63, 23, 1, 255, 67, 27, 4, 255, 68, 28, 4, 255, 74, 24, 3, 255, 70, 30, 2, 255, 68, 31, 5, 255, 70, 28, 2, 255, 75, 29, 0, 255, 79, 31, 2, 255, 81, 30, 6, 255, 78, 29, 3, 255, 75, 29, 3, 255, 73, 26, 3, 255, 78, 31, 0, 255, 73, 32, 2, 255, 74, 26, 5, 255, 82, 27, 8, 255, 76, 28, 1, 255, 72, 27, 0, 255, 74, 27, 1, 255, 71, 27, 0, 255, 75, 28, 3, 255, 72, 27, 2, 255, 72, 29, 4, 255, 74, 28, 4, 255, 71, 31, 3, 255, 72, 29, 1, 255, 83, 29, 5, 255, 91, 31, 4, 255, 91, 31, 3, 255, 84, 25, 0, 255, 69, 23, 1, 255, 70, 24, 0, 255, 72, 25, 2, 255, 64, 22, 0, 255, 69, 23, 1, 255, 69, 25, 2, 255, 67, 22, 4, 255, 68, 23, 3, 255, 63, 24, 3, 255, 62, 22, 3, 255, 66, 20, 2, 255, 68, 22, 4, 255, 58, 19, 1, 255, 64, 24, 3, 255, 59, 26, 3, 255, 58, 19, 2, 255, 72, 25, 7, 255, 73, 28, 6, 255, 64, 20, 2, 255, 62, 23, 0, 255, 67, 21, 3, 255, 57, 20, 5, 255, 49, 19, 3, 255, 58, 20, 4, 255, 51, 17, 9, 255, 51, 17, 7, 255, 68, 22, 3, 255, 83, 27, 3, 255, 81, 29, 3, 255, 73, 25, 4, 255, 71, 22, 7, 255, 70, 22, 6, 255, 57, 20, 2, 255, 55, 17, 0, 255, 64, 20, 4, 255, 68, 21, 2, 255, 63, 20, 1, 255, 56, 21, 6, 255, 56, 22, 3, 255, 55, 17, 2, 255, 52, 18, 3, 255, 54, 18, 2, 255, 56, 17, 3, 255, 53, 18, 3, 255, 48, 17, 1, 255, 51, 18, 2, 255, 66, 21, 3, 255, 66, 22, 3, 255, 75, 22, 1, 255, 67, 21, 2, 255, 48, 16, 2, 255, 51, 15, 5, 255, 47, 14, 2, 255, 48, 15, 2, 255, 51, 20, 7, 255, 43, 14, 2, 255, 48, 15, 6, 255, 49, 18, 4, 255, 43, 13, 1, 255, 36, 15, 6, 255, 43, 16, 4, 255, 67, 17, 2, 255, 79, 19, 3, 255, 78, 15, 1, 255, 80, 18, 3, 255, 74, 16, 3, 255, 71, 12, 1, 255, 74, 21, 6, 255, 68, 23, 7, 255, 61, 16, 3, 255, 52, 14, 6, 255, 42, 12, 5, 255, 46, 13, 2, 255, 53, 15, 5, 255, 49, 15, 2, 255, 55, 15, 1, 255, 60, 14, 7, 255, 53, 14, 3, 255, 59, 13, 3, 255, 53, 13, 1, 255, 52, 15, 3, 255, 50, 15, 1, 255, 54, 13, 0, 255, 56, 14, 1, 255, 55, 14, 2, 255, 53, 14, 3, 255, 52, 10, 3, 255, 53, 11, 2, 255, 52, 13, 4, 255, 44, 12, 3, 255, 45, 12, 3, 255, 52, 12, 1, 255, 50, 11, 2, 255, 47, 11, 4, 255, 51, 13, 4, 255, 56, 14, 3, 255, 43, 13, 2, 255, 42, 9, 0, 255, 47, 10, 2, 255, 41, 11, 3, 255, 40, 8, 3, 255, 41, 10, 2, 255, 31, 11, 1, 255, 35, 10, 1, 255, 40, 9, 1, 255, 37, 8, 0, 255, 40, 9, 5, 255, 37, 9, 5, 255, 36, 8, 4, 255, 43, 10, 5, 255, 39, 8, 1, 255, 36, 9, 1, 255, 35, 12, 5, 255, 27, 8, 1, 255, 29, 10, 2, 255, 29, 10, 3, 255, 25, 8, 2, 255, 20, 6, 1, 255, 22, 7, 2, 255, 26, 8, 3, 255, 30, 8, 4, 255, 32, 8, 3, 255, 33, 8, 3, 255, 38, 9, 3, 255, 46, 10, 3, 255, 49, 8, 2, 255, 51, 10, 2, 255, 49, 12, 3, 255, 41, 11, 3, 255, 40, 8, 1, 255, 40, 6, 1, 255, 8, 0, 1, 255, 6, 1, 0, 255, 7, 2, 2, 255, 10, 2, 1, 255, 12, 2, 0, 255, 12, 1, 0, 255, 11, 1, 1, 255, 11, 2, 2, 255, 10, 2, 0, 255, 11, 2, 0, 255, 12, 1, 1, 255, 10, 0, 0, 255, 10, 1, 0, 255, 13, 4, 2, 255, 13, 3, 2, 255, 13, 4, 2, 255, 12, 5, 3, 255, 10, 3, 0, 255, 12, 1, 1, 255, 13, 3, 1, 255, 12, 3, 1, 255, 12, 3, 1, 255, 13, 3, 2, 255, 12, 3, 1, 255, 11, 2, 0, 255, 13, 4, 1, 255, 13, 4, 2, 255, 12, 4, 1, 255, 15, 6, 3, 255, 14, 4, 2, 255, 13, 3, 2, 255, 12, 6, 3, 255, 15, 4, 2, 255, 16, 6, 1, 255, 14, 5, 0, 255, 15, 5, 3, 255, 17, 6, 5, 255, 14, 3, 1, 255, 16, 6, 1, 255, 18, 8, 1, 255, 20, 10, 4, 255, 19, 9, 2, 255, 18, 8, 0, 255, 20, 8, 1, 255, 22, 10, 3, 255, 23, 10, 2, 255, 21, 8, 0, 255, 20, 5, 0, 255, 26, 10, 4, 255, 26, 9, 1, 255, 24, 8, 2, 255, 21, 8, 2, 255, 23, 11, 3, 255, 26, 11, 2, 255, 30, 14, 4, 255, 33, 16, 5, 255, 31, 14, 2, 255, 28, 13, 3, 255, 30, 11, 2, 255, 38, 12, 5, 255, 31, 13, 3, 255, 32, 13, 3, 255, 33, 14, 5, 255, 26, 15, 4, 255, 30, 12, 2, 255, 30, 13, 2, 255, 29, 17, 4, 255, 30, 18, 3, 255, 34, 19, 4, 255, 36, 19, 3, 255, 34, 15, 4, 255, 32, 13, 4, 255, 37, 17, 5, 255, 33, 14, 2, 255, 32, 14, 2, 255, 33, 15, 2, 255, 37, 19, 4, 255, 34, 19, 2, 255, 37, 20, 5, 255, 34, 16, 2, 255, 36, 17, 3, 255, 40, 21, 5, 255, 37, 18, 1, 255, 37, 19, 2, 255, 42, 18, 3, 255, 45, 18, 5, 255, 40, 20, 3, 255, 37, 22, 1, 255, 40, 20, 0, 255, 46, 22, 1, 255, 47, 25, 5, 255, 50, 25, 5, 255, 45, 21, 0, 255, 45, 22, 1, 255, 47, 24, 3, 255, 47, 22, 3, 255, 49, 21, 7, 255, 47, 23, 4, 255, 39, 20, 0, 255, 42, 25, 5, 255, 42, 22, 2, 255, 46, 24, 2, 255, 45, 23, 2, 255, 42, 22, 2, 255, 41, 21, 3, 255, 39, 22, 4, 255, 40, 22, 3, 255, 49, 27, 4, 255, 49, 25, 4, 255, 41, 19, 2, 255, 46, 25, 4, 255, 40, 28, 4, 255, 40, 28, 5, 255, 47, 25, 4, 255, 52, 25, 2, 255, 55, 25, 5, 255, 51, 23, 3, 255, 49, 26, 5, 255, 47, 25, 4, 255, 45, 25, 2, 255, 43, 28, 2, 255, 47, 27, 4, 255, 58, 27, 8, 255, 55, 28, 5, 255, 48, 25, 3, 255, 54, 29, 9, 255, 52, 26, 6, 255, 53, 28, 3, 255, 55, 29, 3, 255, 47, 26, 5, 255, 52, 28, 8, 255, 61, 33, 4, 255, 57, 29, 3, 255, 56, 27, 11, 255, 60, 27, 8, 255, 60, 36, 3, 255, 56, 35, 3, 255, 63, 34, 4, 255, 69, 41, 14, 255, 62, 46, 13, 255, 58, 47, 17, 255, 63, 49, 16, 255, 65, 53, 19, 255, 67, 57, 26, 255, 65, 59, 32, 255, 67, 65, 39, 255, 66, 65, 48, 255, 69, 69, 46, 255, 76, 74, 52, 255, 82, 78, 61, 255, 80, 81, 63, 255, 77, 84, 64, 255, 80, 90, 73, 255, 83, 94, 77, 255, 85, 98, 77, 255, 86, 106, 83, 255, 87, 114, 91, 255, 86, 118, 95, 255, 89, 121, 99, 255, 96, 128, 106, 255, 95, 134, 111, 255, 95, 140, 115, 255, 103, 144, 121, 255, 106, 147, 125, 255, 101, 149, 127, 255, 104, 151, 130, 255, 106, 151, 130, 255, 108, 155, 135, 255, 104, 153, 133, 255, 106, 154, 134, 255, 109, 154, 132, 255, 106, 150, 128, 255, 104, 150, 129, 255, 101, 150, 123, 255, 105, 145, 119, 255, 104, 143, 113, 255, 99, 137, 105, 255, 96, 133, 99, 255, 98, 128, 97, 255, 99, 119, 89, 255, 99, 116, 90, 255, 98, 115, 80, 255, 91, 105, 73, 255, 91, 103, 66, 255, 86, 97, 63, 255, 89, 94, 65, 255, 91, 90, 56, 255, 87, 88, 43, 255, 81, 78, 52, 255, 76, 73, 54, 255, 75, 75, 40, 255, 72, 71, 36, 255, 78, 68, 29, 255, 78, 63, 23, 255, 76, 63, 20, 255, 74, 64, 19, 255, 75, 57, 16, 255, 77, 58, 17, 255, 72, 58, 17, 255, 79, 54, 18, 255, 77, 52, 9, 255, 70, 52, 11, 255, 75, 52, 2, 255, 77, 48, 10, 255, 67, 45, 12, 255, 70, 44, 4, 255, 64, 42, 8, 255, 74, 46, 4, 255, 71, 43, 11, 255, 63, 40, 2, 255, 76, 42, 4, 255, 79, 37, 5, 255, 75, 39, 2, 255, 67, 38, 3, 255, 80, 32, 3, 255, 76, 34, 2, 255, 73, 35, 6, 255, 71, 36, 8, 255, 71, 33, 6, 255, 80, 35, 4, 255, 77, 32, 6, 255, 74, 35, 9, 255, 73, 36, 2, 255, 76, 34, 0, 255, 78, 35, 1, 255, 71, 32, 2, 255, 72, 31, 3, 255, 76, 32, 7, 255, 68, 32, 6, 255, 73, 33, 5, 255, 72, 30, 3, 255, 69, 30, 1, 255, 69, 32, 6, 255, 67, 27, 2, 255, 73, 30, 4, 255, 71, 27, 6, 255, 71, 27, 5, 255, 66, 25, 2, 255, 65, 29, 5, 255, 67, 32, 6, 255, 65, 30, 4, 255, 74, 29, 6, 255, 72, 25, 4, 255, 71, 24, 7, 255, 74, 25, 3, 255, 77, 27, 1, 255, 82, 28, 4, 255, 81, 27, 6, 255, 77, 28, 5, 255, 77, 28, 3, 255, 78, 26, 1, 255, 80, 29, 4, 255, 75, 26, 3, 255, 75, 25, 4, 255, 77, 29, 5, 255, 70, 27, 2, 255, 75, 30, 3, 255, 77, 29, 3, 255, 73, 27, 3, 255, 78, 28, 5, 255, 75, 30, 5, 255, 74, 32, 4, 255, 77, 27, 5, 255, 77, 28, 4, 255, 74, 29, 3, 255, 72, 25, 2, 255, 77, 27, 0, 255, 76, 29, 0, 255, 69, 24, 3, 255, 70, 23, 1, 255, 73, 25, 4, 255, 72, 25, 3, 255, 66, 24, 2, 255, 62, 22, 1, 255, 65, 24, 2, 255, 66, 21, 4, 255, 67, 21, 1, 255, 67, 24, 2, 255, 66, 26, 4, 255, 67, 25, 5, 255, 71, 24, 4, 255, 68, 22, 1, 255, 52, 22, 2, 255, 57, 22, 9, 255, 65, 23, 6, 255, 59, 27, 6, 255, 81, 21, 11, 255, 82, 21, 7, 255, 65, 20, 5, 255, 61, 17, 4, 255, 63, 18, 0, 255, 62, 16, 0, 255, 58, 19, 9, 255, 57, 21, 6, 255, 59, 19, 6, 255, 56, 14, 5, 255, 57, 19, 4, 255, 75, 28, 7, 255, 92, 28, 4, 255, 95, 25, 3, 255, 83, 25, 6, 255, 62, 20, 1, 255, 52, 15, 3, 255, 56, 17, 7, 255, 67, 22, 6, 255, 66, 21, 2, 255, 55, 20, 3, 255, 56, 19, 2, 255, 61, 18, 5, 255, 50, 13, 1, 255, 57, 15, 5, 255, 59, 15, 4, 255, 51, 13, 1, 255, 69, 22, 5, 255, 76, 18, 3, 255, 81, 16, 8, 255, 79, 21, 12, 255, 75, 24, 1, 255, 83, 25, 2, 255, 59, 18, 5, 255, 41, 16, 4, 255, 50, 13, 4, 255, 51, 15, 6, 255, 39, 13, 2, 255, 44, 16, 6, 255, 41, 9, 2, 255, 47, 18, 5, 255, 39, 16, 3, 255, 40, 14, 4, 255, 37, 13, 1, 255, 50, 14, 0, 255, 77, 18, 3, 255, 80, 21, 2, 255, 73, 19, 1, 255, 76, 22, 4, 255, 77, 17, 2, 255, 74, 21, 2, 255, 75, 21, 6, 255, 72, 22, 6, 255, 54, 13, 3, 255, 46, 11, 3, 255, 45, 17, 0, 255, 47, 17, 3, 255, 52, 14, 5, 255, 54, 13, 2, 255, 55, 13, 4, 255, 52, 14, 3, 255, 56, 17, 6, 255, 49, 13, 1, 255, 57, 14, 4, 255, 59, 14, 4, 255, 57, 12, 1, 255, 51, 11, 0, 255, 51, 13, 1, 255, 54, 15, 3, 255, 54, 15, 5, 255, 53, 14, 5, 255, 49, 12, 4, 255, 48, 9, 1, 255, 50, 11, 4, 255, 50, 11, 6, 255, 50, 12, 5, 255, 51, 13, 4, 255, 49, 13, 4, 255, 48, 14, 6, 255, 45, 12, 3, 255, 43, 12, 2, 255, 47, 14, 3, 255, 42, 11, 3, 255, 41, 7, 3, 255, 40, 8, 4, 255, 39, 11, 6, 255, 45, 9, 4, 255, 45, 10, 4, 255, 38, 10, 2, 255, 40, 11, 6, 255, 34, 8, 3, 255, 31, 8, 2, 255, 35, 8, 5, 255, 34, 8, 5, 255, 31, 7, 3, 255, 31, 9, 4, 255, 30, 9, 3, 255, 30, 9, 1, 255, 34, 11, 4, 255, 29, 9, 3, 255, 23, 8, 3, 255, 22, 8, 3, 255, 22, 6, 2, 255, 23, 5, 1, 255, 28, 8, 2, 255, 31, 10, 3, 255, 36, 11, 3, 255, 47, 15, 7, 255, 47, 10, 2, 255, 47, 11, 2, 255, 49, 13, 4, 255, 47, 13, 4, 255, 45, 11, 3, 255, 45, 9, 2, 255, 6, 0, 0, 255, 7, 1, 1, 255, 5, 0, 0, 255, 8, 0, 2, 255, 12, 1, 0, 255, 12, 3, 0, 255, 8, 3, 0, 255, 10, 1, 0, 255, 14, 0, 1, 255, 12, 1, 1, 255, 10, 2, 0, 255, 12, 2, 1, 255, 14, 1, 1, 255, 11, 3, 1, 255, 11, 1, 0, 255, 11, 3, 1, 255, 11, 5, 2, 255, 9, 4, 1, 255, 10, 2, 0, 255, 12, 4, 1, 255, 11, 3, 1, 255, 12, 4, 2, 255, 13, 5, 3, 255, 10, 2, 0, 255, 10, 2, 0, 255, 14, 5, 2, 255, 15, 5, 3, 255, 13, 4, 2, 255, 13, 3, 2, 255, 15, 4, 3, 255, 16, 6, 4, 255, 13, 5, 2, 255, 14, 3, 2, 255, 19, 8, 5, 255, 16, 6, 1, 255, 13, 3, 0, 255, 15, 5, 3, 255, 18, 6, 4, 255, 17, 7, 3, 255, 17, 8, 3, 255, 17, 9, 5, 255, 17, 9, 4, 255, 18, 9, 3, 255, 19, 8, 3, 255, 18, 8, 1, 255, 20, 10, 3, 255, 22, 9, 2, 255, 25, 8, 3, 255, 30, 10, 6, 255, 25, 9, 2, 255, 19, 9, 2, 255, 24, 10, 3, 255, 29, 12, 5, 255, 25, 9, 3, 255, 23, 11, 2, 255, 29, 13, 4, 255, 26, 11, 1, 255, 21, 9, 1, 255, 27, 11, 3, 255, 30, 10, 2, 255, 27, 13, 2, 255, 29, 17, 5, 255, 24, 11, 1, 255, 24, 11, 1, 255, 33, 13, 1, 255, 31, 15, 3, 255, 29, 14, 4, 255, 29, 12, 4, 255, 33, 14, 5, 255, 37, 14, 5, 255, 30, 12, 2, 255, 32, 15, 3, 255, 37, 19, 7, 255, 34, 17, 5, 255, 30, 15, 3, 255, 32, 16, 3, 255, 35, 18, 3, 255, 35, 20, 3, 255, 40, 18, 4, 255, 42, 17, 4, 255, 39, 18, 3, 255, 41, 18, 1, 255, 47, 21, 5, 255, 43, 16, 6, 255, 39, 17, 4, 255, 34, 18, 2, 255, 36, 22, 5, 255, 38, 19, 3, 255, 41, 21, 4, 255, 42, 19, 4, 255, 41, 18, 2, 255, 43, 20, 2, 255, 48, 20, 2, 255, 46, 24, 2, 255, 43, 25, 3, 255, 46, 18, 1, 255, 46, 22, 5, 255, 44, 23, 2, 255, 47, 22, 3, 255, 41, 21, 6, 255, 42, 19, 6, 255, 46, 21, 4, 255, 47, 23, 3, 255, 48, 23, 4, 255, 48, 23, 5, 255, 40, 19, 1, 255, 45, 26, 5, 255, 47, 24, 3, 255, 51, 23, 3, 255, 54, 23, 6, 255, 55, 25, 5, 255, 50, 24, 4, 255, 48, 24, 4, 255, 48, 24, 2, 255, 53, 27, 2, 255, 50, 25, 1, 255, 47, 26, 2, 255, 47, 27, 7, 255, 47, 21, 3, 255, 51, 21, 2, 255, 53, 26, 5, 255, 52, 25, 1, 255, 54, 24, 2, 255, 47, 24, 6, 255, 55, 27, 5, 255, 49, 26, 4, 255, 44, 27, 6, 255, 51, 28, 5, 255, 48, 27, 9, 255, 47, 28, 3, 255, 56, 26, 6, 255, 58, 28, 2, 255, 49, 26, 10, 255, 52, 24, 8, 255, 60, 29, 2, 255, 56, 29, 4, 255, 62, 35, 15, 255, 63, 40, 9, 255, 61, 46, 9, 255, 65, 47, 18, 255, 65, 41, 17, 255, 61, 46, 23, 255, 60, 50, 26, 255, 61, 56, 27, 255, 58, 63, 23, 255, 64, 65, 38, 255, 66, 67, 48, 255, 71, 73, 49, 255, 76, 75, 52, 255, 81, 81, 57, 255, 79, 85, 57, 255, 74, 86, 62, 255, 80, 92, 75, 255, 85, 98, 78, 255, 86, 102, 74, 255, 86, 110, 83, 255, 85, 117, 91, 255, 88, 123, 99, 255, 94, 130, 110, 255, 99, 136, 117, 255, 100, 139, 120, 255, 101, 144, 125, 255, 106, 147, 129, 255, 107, 150, 130, 255, 103, 152, 130, 255, 103, 153, 134, 255, 108, 156, 137, 255, 109, 156, 139, 255, 106, 154, 138, 255, 108, 153, 135, 255, 112, 156, 133, 255, 108, 152, 129, 255, 107, 152, 129, 255, 102, 149, 122, 255, 101, 141, 112, 255, 104, 141, 107, 255, 102, 139, 103, 255, 99, 132, 99, 255, 100, 126, 98, 255, 100, 119, 89, 255, 99, 116, 82, 255, 94, 106, 81, 255, 92, 103, 72, 255, 91, 102, 64, 255, 89, 96, 69, 255, 84, 91, 57, 255, 81, 85, 56, 255, 83, 80, 49, 255, 84, 78, 43, 255, 80, 74, 45, 255, 81, 74, 31, 255, 82, 68, 41, 255, 75, 66, 36, 255, 80, 62, 30, 255, 82, 59, 26, 255, 82, 55, 27, 255, 83, 57, 19, 255, 73, 57, 12, 255, 68, 56, 9, 255, 76, 52, 13, 255, 77, 50, 7, 255, 72, 51, 14, 255, 71, 47, 6, 255, 68, 38, 10, 255, 65, 39, 11, 255, 76, 43, 7, 255, 69, 41, 6, 255, 79, 42, 6, 255, 72, 39, 7, 255, 66, 40, 8, 255, 77, 36, 7, 255, 77, 35, 10, 255, 71, 32, 9, 255, 72, 37, 12, 255, 74, 31, 1, 255, 69, 31, 5, 255, 69, 31, 6, 255, 73, 34, 6, 255, 70, 32, 9, 255, 71, 32, 5, 255, 70, 31, 7, 255, 70, 35, 6, 255, 69, 33, 1, 255, 74, 31, 4, 255, 75, 32, 5, 255, 73, 31, 6, 255, 72, 30, 3, 255, 72, 31, 3, 255, 71, 31, 6, 255, 77, 34, 3, 255, 74, 30, 6, 255, 68, 27, 6, 255, 71, 35, 6, 255, 66, 30, 3, 255, 67, 27, 6, 255, 71, 30, 6, 255, 68, 28, 2, 255, 65, 29, 2, 255, 64, 33, 4, 255, 72, 30, 5, 255, 66, 24, 1, 255, 66, 24, 3, 255, 69, 24, 4, 255, 67, 25, 6, 255, 70, 26, 5, 255, 74, 28, 3, 255, 77, 29, 5, 255, 75, 26, 5, 255, 77, 27, 4, 255, 81, 31, 4, 255, 79, 34, 6, 255, 71, 27, 6, 255, 77, 24, 4, 255, 82, 28, 3, 255, 78, 27, 3, 255, 80, 25, 6, 255, 78, 29, 5, 255, 80, 29, 6, 255, 74, 27, 4, 255, 74, 27, 3, 255, 72, 28, 4, 255, 70, 30, 1, 255, 75, 26, 3, 255, 77, 26, 3, 255, 71, 29, 3, 255, 65, 28, 3, 255, 69, 27, 2, 255, 70, 25, 3, 255, 65, 25, 7, 255, 68, 23, 2, 255, 72, 25, 5, 255, 65, 21, 2, 255, 65, 23, 4, 255, 58, 22, 1, 255, 62, 21, 3, 255, 66, 25, 1, 255, 70, 25, 2, 255, 71, 23, 2, 255, 76, 30, 4, 255, 75, 29, 3, 255, 79, 24, 3, 255, 88, 28, 8, 255, 68, 24, 3, 255, 66, 22, 4, 255, 61, 20, 3, 255, 65, 18, 1, 255, 74, 28, 7, 255, 69, 22, 4, 255, 57, 22, 5, 255, 54, 19, 3, 255, 64, 17, 3, 255, 63, 16, 1, 255, 58, 21, 0, 255, 55, 24, 3, 255, 51, 18, 10, 255, 51, 17, 10, 255, 51, 19, 3, 255, 57, 21, 0, 255, 73, 20, 2, 255, 72, 20, 1, 255, 58, 20, 1, 255, 57, 17, 5, 255, 54, 16, 5, 255, 59, 19, 5, 255, 66, 20, 3, 255, 61, 19, 2, 255, 49, 16, 4, 255, 50, 19, 4, 255, 51, 18, 3, 255, 45, 16, 4, 255, 48, 13, 5, 255, 52, 12, 2, 255, 53, 17, 4, 255, 68, 23, 6, 255, 83, 24, 3, 255, 82, 20, 3, 255, 74, 21, 4, 255, 78, 21, 3, 255, 86, 26, 4, 255, 74, 22, 2, 255, 43, 12, 2, 255, 42, 13, 3, 255, 42, 13, 3, 255, 43, 12, 3, 255, 43, 13, 4, 255, 45, 13, 4, 255, 41, 15, 4, 255, 46, 13, 4, 255, 50, 11, 0, 255, 45, 15, 4, 255, 42, 12, 3, 255, 56, 14, 1, 255, 77, 23, 5, 255, 81, 23, 3, 255, 79, 21, 4, 255, 78, 19, 2, 255, 72, 23, 1, 255, 76, 19, 2, 255, 70, 16, 1, 255, 51, 9, 2, 255, 46, 12, 2, 255, 49, 17, 0, 255, 45, 12, 4, 255, 43, 14, 5, 255, 46, 8, 3, 255, 54, 7, 6, 255, 51, 13, 0, 255, 56, 14, 4, 255, 52, 15, 3, 255, 52, 15, 2, 255, 53, 16, 3, 255, 58, 18, 5, 255, 56, 15, 5, 255, 56, 14, 4, 255, 54, 13, 4, 255, 50, 12, 2, 255, 49, 11, 3, 255, 51, 11, 5, 255, 44, 10, 2, 255, 45, 9, 1, 255, 51, 10, 1, 255, 53, 13, 4, 255, 46, 12, 4, 255, 45, 10, 2, 255, 49, 11, 2, 255, 45, 11, 3, 255, 49, 16, 4, 255, 50, 14, 4, 255, 42, 11, 2, 255, 43, 10, 4, 255, 41, 9, 3, 255, 40, 10, 3, 255, 44, 8, 1, 255, 48, 10, 2, 255, 44, 12, 4, 255, 43, 10, 4, 255, 38, 7, 0, 255, 36, 11, 4, 255, 30, 9, 3, 255, 25, 6, 3, 255, 30, 9, 7, 255, 31, 6, 3, 255, 35, 8, 4, 255, 35, 9, 4, 255, 33, 9, 2, 255, 31, 9, 3, 255, 26, 9, 4, 255, 22, 6, 1, 255, 20, 4, 1, 255, 23, 5, 2, 255, 25, 7, 1, 255, 26, 8, 1, 255, 31, 9, 1, 255, 40, 10, 2, 255, 44, 11, 2, 255, 46, 11, 2, 255, 42, 9, 0, 255, 41, 10, 0, 255, 42, 11, 1, 255, 42, 9, 0, 255, 5, 0, 0, 255, 4, 1, 0, 255, 2, 0, 0, 255, 8, 0, 1, 255, 9, 1, 0, 255, 10, 1, 0, 255, 10, 3, 0, 255, 12, 2, 1, 255, 13, 2, 1, 255, 13, 1, 1, 255, 11, 1, 0, 255, 12, 2, 1, 255, 13, 2, 1, 255, 13, 3, 2, 255, 13, 3, 1, 255, 13, 4, 3, 255, 9, 3, 1, 255, 7, 2, 0, 255, 10, 4, 1, 255, 10, 1, 1, 255, 10, 0, 0, 255, 10, 1, 0, 255, 12, 3, 2, 255, 13, 5, 3, 255, 13, 3, 1, 255, 12, 2, 0, 255, 11, 3, 1, 255, 13, 5, 3, 255, 13, 3, 2, 255, 12, 1, 0, 255, 13, 2, 1, 255, 14, 6, 1, 255, 14, 4, 3, 255, 14, 3, 2, 255, 15, 4, 1, 255, 16, 5, 3, 255, 12, 2, 1, 255, 20, 7, 2, 255, 20, 8, 3, 255, 15, 6, 1, 255, 15, 8, 2, 255, 15, 8, 1, 255, 17, 8, 3, 255, 18, 8, 2, 255, 20, 7, 1, 255, 20, 7, 2, 255, 19, 9, 3, 255, 23, 10, 4, 255, 24, 9, 3, 255, 22, 7, 2, 255, 19, 9, 3, 255, 19, 8, 0, 255, 27, 8, 1, 255, 24, 10, 2, 255, 20, 10, 1, 255, 27, 10, 2, 255, 31, 15, 7, 255, 25, 11, 3, 255, 27, 11, 4, 255, 28, 10, 3, 255, 30, 14, 5, 255, 23, 11, 0, 255, 26, 12, 3, 255, 35, 13, 7, 255, 37, 15, 4, 255, 31, 14, 4, 255, 28, 11, 3, 255, 30, 10, 4, 255, 31, 11, 2, 255, 35, 14, 4, 255, 34, 16, 3, 255, 33, 17, 2, 255, 34, 16, 2, 255, 34, 18, 4, 255, 33, 17, 6, 255, 34, 17, 5, 255, 30, 13, 0, 255, 34, 18, 3, 255, 41, 14, 3, 255, 45, 15, 5, 255, 36, 19, 4, 255, 28, 18, 1, 255, 33, 17, 1, 255, 39, 15, 4, 255, 36, 20, 5, 255, 34, 23, 6, 255, 37, 19, 5, 255, 42, 18, 6, 255, 34, 18, 4, 255, 33, 22, 5, 255, 41, 19, 4, 255, 46, 17, 5, 255, 47, 19, 4, 255, 41, 22, 1, 255, 42, 24, 3, 255, 46, 20, 6, 255, 39, 17, 4, 255, 41, 19, 3, 255, 45, 23, 5, 255, 35, 17, 3, 255, 39, 18, 5, 255, 47, 20, 4, 255, 46, 22, 2, 255, 48, 22, 1, 255, 53, 23, 3, 255, 51, 23, 5, 255, 45, 22, 1, 255, 46, 23, 2, 255, 49, 24, 6, 255, 50, 25, 2, 255, 51, 23, 1, 255, 53, 22, 2, 255, 50, 20, 2, 255, 50, 24, 4, 255, 54, 27, 4, 255, 45, 23, 3, 255, 40, 23, 1, 255, 43, 27, 2, 255, 50, 29, 3, 255, 53, 28, 4, 255, 46, 21, 5, 255, 48, 21, 7, 255, 51, 26, 4, 255, 47, 24, 2, 255, 52, 22, 2, 255, 52, 23, 7, 255, 48, 26, 6, 255, 53, 27, 2, 255, 49, 26, 5, 255, 47, 30, 5, 255, 56, 28, 8, 255, 57, 24, 1, 255, 53, 29, 10, 255, 51, 28, 6, 255, 62, 32, 1, 255, 59, 32, 9, 255, 55, 33, 11, 255, 55, 32, 7, 255, 59, 38, 11, 255, 60, 39, 18, 255, 68, 44, 19, 255, 65, 47, 24, 255, 64, 53, 27, 255, 67, 60, 23, 255, 65, 65, 34, 255, 72, 67, 42, 255, 77, 72, 39, 255, 74, 77, 43, 255, 76, 76, 53, 255, 77, 80, 57, 255, 75, 86, 58, 255, 73, 91, 65, 255, 80, 96, 74, 255, 85, 101, 76, 255, 85, 107, 82, 255, 87, 114, 91, 255, 87, 122, 100, 255, 87, 128, 109, 255, 91, 135, 119, 255, 96, 140, 126, 255, 96, 142, 126, 255, 97, 147, 132, 255, 102, 150, 134, 255, 105, 152, 134, 255, 103, 155, 134, 255, 106, 157, 140, 255, 111, 158, 143, 255, 111, 159, 145, 255, 109, 158, 142, 255, 110, 156, 137, 255, 113, 155, 134, 255, 111, 153, 129, 255, 108, 151, 126, 255, 107, 148, 121, 255, 100, 142, 113, 255, 100, 139, 108, 255, 103, 135, 104, 255, 100, 128, 98, 255, 98, 123, 94, 255, 97, 119, 83, 255, 98, 114, 84, 255, 93, 104, 77, 255, 93, 101, 70, 255, 90, 97, 63, 255, 89, 94, 59, 255, 83, 88, 56, 255, 79, 82, 51, 255, 81, 75, 49, 255, 81, 76, 35, 255, 79, 73, 33, 255, 80, 70, 28, 255, 81, 66, 30, 255, 76, 63, 25, 255, 76, 62, 19, 255, 71, 57, 24, 255, 74, 56, 31, 255, 82, 56, 22, 255, 79, 54, 18, 255, 72, 54, 12, 255, 73, 52, 13, 255, 72, 45, 10, 255, 66, 39, 13, 255, 68, 39, 15, 255, 73, 39, 11, 255, 78, 43, 5, 255, 78, 42, 4, 255, 68, 40, 4, 255, 70, 35, 9, 255, 71, 35, 11, 255, 69, 38, 6, 255, 71, 37, 2, 255, 71, 35, 2, 255, 67, 34, 10, 255, 77, 35, 5, 255, 67, 33, 2, 255, 69, 34, 5, 255, 75, 34, 3, 255, 71, 37, 5, 255, 72, 37, 3, 255, 71, 32, 2, 255, 75, 31, 4, 255, 78, 34, 3, 255, 73, 33, 1, 255, 69, 34, 9, 255, 69, 30, 9, 255, 71, 30, 12, 255, 71, 31, 6, 255, 66, 29, 1, 255, 66, 28, 3, 255, 72, 28, 1, 255, 75, 29, 4, 255, 72, 26, 7, 255, 71, 31, 5, 255, 68, 28, 4, 255, 66, 26, 5, 255, 67, 27, 2, 255, 63, 26, 3, 255, 64, 31, 4, 255, 65, 30, 3, 255, 74, 29, 4, 255, 70, 28, 4, 255, 68, 25, 2, 255, 68, 26, 4, 255, 70, 31, 4, 255, 70, 30, 5, 255, 71, 30, 6, 255, 73, 30, 5, 255, 74, 28, 3, 255, 76, 28, 3, 255, 78, 28, 3, 255, 75, 27, 2, 255, 69, 24, 1, 255, 73, 24, 3, 255, 77, 29, 4, 255, 74, 27, 2, 255, 73, 24, 3, 255, 73, 26, 4, 255, 75, 28, 5, 255, 70, 29, 3, 255, 70, 28, 2, 255, 71, 30, 4, 255, 71, 28, 2, 255, 71, 30, 3, 255, 66, 25, 1, 255, 67, 25, 3, 255, 69, 28, 3, 255, 75, 25, 3, 255, 70, 22, 2, 255, 64, 28, 2, 255, 70, 26, 3, 255, 74, 26, 6, 255, 68, 25, 4, 255, 66, 24, 4, 255, 62, 26, 4, 255, 66, 23, 5, 255, 70, 23, 6, 255, 68, 22, 4, 255, 71, 24, 2, 255, 72, 24, 2, 255, 65, 21, 4, 255, 73, 24, 5, 255, 86, 30, 4, 255, 84, 29, 3, 255, 74, 26, 2, 255, 66, 21, 3, 255, 71, 19, 4, 255, 66, 23, 1, 255, 60, 20, 1, 255, 58, 24, 3, 255, 58, 20, 2, 255, 59, 21, 6, 255, 56, 20, 1, 255, 55, 19, 0, 255, 52, 18, 3, 255, 43, 18, 5, 255, 50, 20, 5, 255, 56, 20, 2, 255, 51, 21, 2, 255, 55, 20, 3, 255, 57, 19, 5, 255, 49, 19, 5, 255, 53, 14, 5, 255, 59, 17, 3, 255, 66, 21, 2, 255, 65, 20, 1, 255, 58, 18, 3, 255, 52, 18, 6, 255, 52, 15, 4, 255, 48, 16, 0, 255, 50, 17, 5, 255, 44, 13, 4, 255, 46, 14, 0, 255, 49, 17, 3, 255, 51, 17, 2, 255, 79, 28, 7, 255, 87, 24, 5, 255, 90, 24, 4, 255, 91, 22, 8, 255, 78, 24, 8, 255, 66, 21, 2, 255, 51, 15, 5, 255, 42, 14, 3, 255, 41, 12, 0, 255, 50, 15, 5, 255, 49, 16, 5, 255, 49, 17, 4, 255, 44, 16, 5, 255, 48, 10, 2, 255, 54, 13, 3, 255, 48, 17, 7, 255, 40, 11, 3, 255, 40, 11, 0, 255, 51, 15, 3, 255, 58, 13, 1, 255, 69, 15, 6, 255, 71, 15, 7, 255, 68, 17, 5, 255, 68, 14, 4, 255, 58, 13, 4, 255, 43, 9, 1, 255, 44, 14, 5, 255, 49, 13, 8, 255, 46, 13, 0, 255, 37, 13, 11, 255, 44, 6, 16, 255, 58, 13, 3, 255, 46, 17, 3, 255, 43, 14, 1, 255, 47, 17, 2, 255, 55, 16, 2, 255, 52, 15, 0, 255, 48, 14, 3, 255, 53, 10, 2, 255, 55, 11, 3, 255, 53, 12, 2, 255, 50, 14, 1, 255, 48, 13, 4, 255, 50, 12, 4, 255, 48, 14, 5, 255, 52, 17, 1, 255, 58, 16, 0, 255, 52, 12, 0, 255, 43, 12, 2, 255, 44, 13, 2, 255, 49, 13, 1, 255, 51, 14, 3, 255, 57, 17, 7, 255, 53, 13, 3, 255, 41, 11, 1, 255, 44, 13, 4, 255, 48, 11, 2, 255, 40, 9, 1, 255, 41, 10, 0, 255, 46, 10, 2, 255, 45, 9, 2, 255, 39, 8, 2, 255, 41, 9, 1, 255, 39, 8, 0, 255, 31, 9, 2, 255, 27, 7, 2, 255, 31, 9, 4, 255, 35, 7, 1, 255, 40, 10, 4, 255, 33, 5, 2, 255, 33, 8, 4, 255, 32, 7, 3, 255, 29, 5, 3, 255, 25, 3, 1, 255, 25, 5, 2, 255, 24, 6, 1, 255, 26, 8, 2, 255, 29, 8, 2, 255, 34, 11, 4, 255, 39, 10, 3, 255, 43, 9, 1, 255, 45, 10, 1, 255, 45, 11, 2, 255, 41, 10, 1, 255, 43, 11, 2, 255, 43, 10, 2, 255, 6, 0, 0, 255, 5, 1, 0, 255, 4, 1, 1, 255, 8, 2, 3, 255, 9, 0, 1, 255, 9, 1, 1, 255, 12, 1, 1, 255, 10, 1, 0, 255, 9, 3, 1, 255, 12, 2, 1, 255, 14, 1, 1, 255, 12, 1, 1, 255, 10, 2, 1, 255, 11, 0, 1, 255, 12, 0, 1, 255, 12, 2, 1, 255, 10, 2, 1, 255, 8, 2, 0, 255, 11, 3, 1, 255, 14, 2, 2, 255, 14, 3, 2, 255, 11, 1, 0, 255, 13, 3, 2, 255, 16, 6, 5, 255, 15, 4, 3, 255, 13, 3, 1, 255, 11, 5, 2, 255, 7, 3, 0, 255, 11, 4, 2, 255, 13, 4, 2, 255, 13, 5, 2, 255, 11, 6, 0, 255, 13, 5, 3, 255, 15, 4, 2, 255, 15, 4, 0, 255, 16, 6, 3, 255, 12, 2, 1, 255, 18, 5, 2, 255, 18, 6, 2, 255, 15, 6, 1, 255, 17, 7, 3, 255, 15, 6, 2, 255, 17, 6, 1, 255, 22, 9, 3, 255, 24, 8, 3, 255, 22, 5, 1, 255, 18, 8, 2, 255, 13, 7, 0, 255, 16, 8, 1, 255, 22, 10, 4, 255, 23, 9, 2, 255, 20, 10, 2, 255, 25, 10, 2, 255, 24, 9, 2, 255, 21, 10, 2, 255, 27, 11, 3, 255, 29, 10, 4, 255, 21, 8, 1, 255, 22, 13, 6, 255, 25, 11, 3, 255, 29, 9, 2, 255, 26, 11, 2, 255, 23, 12, 2, 255, 28, 12, 4, 255, 27, 10, 1, 255, 26, 13, 3, 255, 25, 14, 5, 255, 27, 13, 5, 255, 30, 14, 3, 255, 30, 16, 1, 255, 34, 17, 2, 255, 36, 18, 3, 255, 35, 16, 1, 255, 32, 14, 1, 255, 30, 13, 3, 255, 35, 17, 6, 255, 37, 17, 4, 255, 36, 17, 4, 255, 36, 16, 5, 255, 34, 12, 1, 255, 42, 17, 5, 255, 44, 19, 7, 255, 33, 16, 1, 255, 30, 16, 0, 255, 30, 15, 1, 255, 33, 17, 2, 255, 43, 22, 7, 255, 40, 18, 4, 255, 29, 17, 1, 255, 34, 18, 3, 255, 42, 18, 4, 255, 37, 21, 6, 255, 38, 19, 3, 255, 46, 19, 2, 255, 45, 18, 4, 255, 38, 19, 4, 255, 40, 16, 4, 255, 45, 20, 5, 255, 39, 24, 4, 255, 37, 19, 5, 255, 36, 17, 6, 255, 46, 18, 4, 255, 49, 24, 4, 255, 46, 20, 0, 255, 53, 23, 6, 255, 45, 19, 2, 255, 42, 21, 3, 255, 40, 24, 7, 255, 41, 20, 4, 255, 57, 23, 6, 255, 53, 24, 4, 255, 52, 20, 1, 255, 53, 24, 7, 255, 43, 22, 2, 255, 49, 23, 3, 255, 50, 24, 2, 255, 46, 26, 5, 255, 45, 26, 6, 255, 50, 27, 5, 255, 56, 25, 5, 255, 53, 23, 6, 255, 50, 23, 9, 255, 48, 23, 5, 255, 53, 23, 4, 255, 54, 24, 10, 255, 52, 21, 4, 255, 55, 27, 1, 255, 62, 32, 4, 255, 57, 30, 5, 255, 38, 24, 4, 255, 43, 26, 7, 255, 53, 29, 3, 255, 52, 31, 0, 255, 53, 29, 3, 255, 59, 28, 8, 255, 58, 36, 7, 255, 52, 34, 7, 255, 55, 30, 15, 255, 59, 36, 12, 255, 64, 46, 6, 255, 61, 45, 15, 255, 54, 49, 30, 255, 61, 53, 31, 255, 69, 58, 29, 255, 70, 65, 31, 255, 73, 65, 41, 255, 70, 69, 45, 255, 71, 75, 42, 255, 75, 77, 55, 255, 75, 79, 63, 255, 73, 85, 66, 255, 74, 93, 74, 255, 79, 97, 75, 255, 83, 102, 78, 255, 84, 108, 88, 255, 85, 114, 95, 255, 87, 124, 105, 255, 88, 131, 115, 255, 90, 137, 124, 255, 89, 140, 128, 255, 94, 145, 131, 255, 96, 151, 138, 255, 101, 154, 141, 255, 105, 156, 141, 255, 105, 158, 140, 255, 110, 159, 144, 255, 110, 158, 144, 255, 110, 160, 145, 255, 112, 160, 144, 255, 112, 157, 138, 255, 111, 153, 131, 255, 111, 154, 129, 255, 105, 148, 121, 255, 105, 146, 115, 255, 101, 143, 115, 255, 99, 136, 111, 255, 101, 130, 106, 255, 100, 123, 96, 255, 98, 121, 87, 255, 93, 117, 80, 255, 94, 109, 80, 255, 91, 101, 76, 255, 91, 98, 65, 255, 90, 95, 63, 255, 84, 87, 51, 255, 85, 84, 48, 255, 86, 79, 51, 255, 83, 72, 48, 255, 81, 76, 26, 255, 75, 73, 31, 255, 73, 69, 27, 255, 71, 61, 35, 255, 78, 59, 31, 255, 74, 56, 22, 255, 75, 61, 10, 255, 78, 60, 4, 255, 81, 50, 19, 255, 78, 48, 14, 255, 77, 48, 21, 255, 74, 44, 21, 255, 76, 42, 11, 255, 76, 43, 9, 255, 70, 42, 11, 255, 70, 41, 7, 255, 78, 44, 2, 255, 73, 38, 4, 255, 69, 39, 5, 255, 74, 40, 6, 255, 71, 36, 9, 255, 65, 37, 2, 255, 71, 35, 6, 255, 70, 32, 9, 255, 73, 36, 5, 255, 62, 32, 7, 255, 61, 33, 7, 255, 76, 34, 7, 255, 71, 37, 9, 255, 68, 32, 5, 255, 71, 35, 4, 255, 68, 34, 1, 255, 70, 33, 5, 255, 73, 30, 7, 255, 69, 28, 6, 255, 63, 31, 8, 255, 71, 32, 9, 255, 63, 30, 8, 255, 71, 30, 7, 255, 72, 29, 5, 255, 65, 30, 7, 255, 69, 27, 6, 255, 77, 28, 5, 255, 73, 28, 5, 255, 70, 27, 6, 255, 69, 27, 4, 255, 69, 27, 1, 255, 66, 26, 5, 255, 63, 25, 4, 255, 65, 27, 3, 255, 67, 29, 8, 255, 67, 30, 4, 255, 65, 31, 1, 255, 71, 26, 1, 255, 73, 27, 4, 255, 81, 32, 2, 255, 78, 28, 3, 255, 73, 28, 5, 255, 75, 30, 5, 255, 76, 31, 3, 255, 79, 30, 5, 255, 78, 28, 4, 255, 76, 26, 2, 255, 78, 29, 5, 255, 70, 28, 3, 255, 74, 28, 4, 255, 75, 27, 4, 255, 71, 28, 1, 255, 70, 25, 4, 255, 71, 27, 3, 255, 66, 29, 2, 255, 68, 29, 4, 255, 69, 28, 4, 255, 70, 27, 3, 255, 71, 27, 2, 255, 72, 24, 4, 255, 70, 24, 7, 255, 64, 25, 0, 255, 75, 29, 4, 255, 79, 27, 6, 255, 70, 24, 1, 255, 65, 25, 1, 255, 71, 24, 3, 255, 70, 26, 5, 255, 66, 23, 2, 255, 63, 26, 4, 255, 64, 23, 4, 255, 68, 21, 1, 255, 64, 22, 4, 255, 70, 24, 6, 255, 81, 27, 4, 255, 81, 25, 2, 255, 83, 25, 4, 255, 89, 27, 2, 255, 90, 27, 6, 255, 75, 24, 6, 255, 64, 20, 0, 255, 61, 20, 2, 255, 59, 19, 3, 255, 65, 21, 5, 255, 61, 18, 3, 255, 59, 17, 2, 255, 60, 23, 2, 255, 58, 23, 3, 255, 59, 19, 6, 255, 60, 18, 6, 255, 56, 19, 1, 255, 60, 18, 4, 255, 58, 16, 8, 255, 49, 18, 4, 255, 54, 21, 3, 255, 54, 18, 1, 255, 49, 15, 2, 255, 58, 15, 4, 255, 59, 17, 2, 255, 62, 19, 5, 255, 59, 19, 3, 255, 56, 19, 2, 255, 57, 17, 2, 255, 56, 15, 3, 255, 53, 18, 2, 255, 53, 14, 1, 255, 51, 15, 5, 255, 52, 18, 2, 255, 58, 17, 4, 255, 53, 16, 3, 255, 55, 18, 2, 255, 67, 17, 4, 255, 76, 16, 0, 255, 73, 19, 2, 255, 64, 16, 8, 255, 56, 15, 10, 255, 46, 17, 3, 255, 53, 17, 4, 255, 49, 13, 2, 255, 46, 14, 3, 255, 46, 13, 1, 255, 53, 19, 4, 255, 45, 16, 2, 255, 45, 14, 2, 255, 52, 12, 4, 255, 43, 11, 3, 255, 37, 14, 5, 255, 32, 8, 2, 255, 28, 14, 5, 255, 30, 14, 5, 255, 32, 9, 3, 255, 30, 6, 1, 255, 35, 9, 2, 255, 42, 9, 5, 255, 40, 9, 8, 255, 37, 7, 4, 255, 43, 13, 4, 255, 43, 12, 5, 255, 43, 16, 4, 255, 47, 12, 7, 255, 48, 9, 13, 255, 54, 13, 6, 255, 52, 13, 4, 255, 55, 12, 5, 255, 57, 14, 5, 255, 57, 14, 3, 255, 54, 12, 2, 255, 52, 11, 3, 255, 57, 14, 5, 255, 56, 13, 4, 255, 52, 11, 3, 255, 48, 13, 3, 255, 47, 14, 3, 255, 44, 12, 1, 255, 62, 13, 3, 255, 72, 14, 3, 255, 71, 15, 5, 255, 66, 15, 3, 255, 58, 13, 1, 255, 51, 13, 2, 255, 46, 13, 3, 255, 47, 15, 1, 255, 61, 15, 5, 255, 63, 10, 4, 255, 46, 10, 2, 255, 43, 12, 3, 255, 42, 11, 2, 255, 37, 7, 1, 255, 41, 11, 4, 255, 43, 11, 2, 255, 42, 8, 1, 255, 36, 9, 2, 255, 41, 14, 5, 255, 43, 10, 2, 255, 41, 10, 3, 255, 35, 10, 3, 255, 32, 7, 0, 255, 35, 7, 0, 255, 41, 12, 5, 255, 36, 8, 4, 255, 28, 10, 3, 255, 24, 6, 0, 255, 23, 4, 0, 255, 24, 5, 1, 255, 26, 9, 4, 255, 20, 6, 1, 255, 26, 5, 2, 255, 29, 6, 2, 255, 32, 8, 2, 255, 39, 7, 1, 255, 47, 10, 3, 255, 47, 10, 2, 255, 47, 10, 3, 255, 44, 9, 2, 255, 48, 11, 4, 255, 47, 11, 4, 255, 7, 3, 1, 255, 6, 1, 0, 255, 6, 0, 1, 255, 9, 2, 2, 255, 11, 3, 2, 255, 9, 0, 0, 255, 11, 1, 1, 255, 10, 0, 1, 255, 11, 1, 0, 255, 12, 2, 0, 255, 11, 2, 0, 255, 10, 1, 0, 255, 10, 0, 1, 255, 12, 1, 1, 255, 13, 2, 2, 255, 12, 2, 1, 255, 12, 2, 0, 255, 14, 2, 1, 255, 15, 2, 0, 255, 14, 1, 1, 255, 12, 2, 1, 255, 12, 4, 2, 255, 16, 4, 4, 255, 16, 3, 2, 255, 13, 3, 2, 255, 11, 2, 1, 255, 15, 6, 4, 255, 10, 3, 2, 255, 10, 3, 0, 255, 11, 5, 1, 255, 13, 5, 2, 255, 14, 5, 2, 255, 12, 4, 2, 255, 12, 2, 2, 255, 11, 1, 1, 255, 14, 4, 2, 255, 14, 4, 2, 255, 15, 6, 4, 255, 15, 6, 2, 255, 15, 5, 1, 255, 16, 6, 4, 255, 15, 5, 3, 255, 16, 4, 1, 255, 20, 6, 1, 255, 23, 7, 1, 255, 24, 9, 4, 255, 18, 7, 1, 255, 14, 6, 1, 255, 16, 8, 1, 255, 21, 10, 2, 255, 25, 10, 3, 255, 19, 7, 1, 255, 24, 10, 2, 255, 28, 11, 2, 255, 24, 8, 1, 255, 26, 12, 4, 255, 23, 9, 1, 255, 25, 11, 4, 255, 21, 8, 0, 255, 24, 12, 4, 255, 24, 10, 2, 255, 30, 12, 3, 255, 30, 11, 1, 255, 28, 13, 3, 255, 25, 11, 4, 255, 25, 11, 1, 255, 30, 16, 6, 255, 28, 15, 6, 255, 28, 13, 4, 255, 31, 13, 3, 255, 36, 14, 2, 255, 35, 18, 3, 255, 28, 16, 1, 255, 32, 14, 1, 255, 31, 14, 5, 255, 27, 13, 4, 255, 31, 16, 5, 255, 37, 16, 5, 255, 37, 17, 3, 255, 32, 15, 0, 255, 34, 14, 1, 255, 40, 15, 2, 255, 35, 16, 1, 255, 31, 15, 1, 255, 39, 16, 5, 255, 34, 17, 3, 255, 39, 18, 3, 255, 42, 20, 4, 255, 34, 18, 2, 255, 49, 20, 7, 255, 39, 15, 1, 255, 31, 20, 4, 255, 45, 15, 3, 255, 54, 20, 5, 255, 40, 19, 4, 255, 38, 19, 5, 255, 30, 18, 8, 255, 40, 22, 5, 255, 42, 21, 1, 255, 41, 20, 2, 255, 45, 23, 7, 255, 51, 20, 4, 255, 49, 21, 1, 255, 53, 21, 2, 255, 48, 21, 3, 255, 39, 21, 1, 255, 45, 22, 4, 255, 42, 20, 1, 255, 45, 23, 5, 255, 52, 17, 11, 255, 44, 21, 3, 255, 48, 22, 2, 255, 50, 24, 4, 255, 35, 25, 1, 255, 46, 26, 2, 255, 55, 25, 3, 255, 48, 24, 3, 255, 41, 26, 3, 255, 48, 24, 4, 255, 56, 24, 5, 255, 56, 29, 6, 255, 50, 23, 1, 255, 52, 24, 6, 255, 56, 24, 6, 255, 50, 22, 5, 255, 47, 27, 4, 255, 50, 30, 5, 255, 51, 25, 1, 255, 46, 24, 11, 255, 51, 32, 2, 255, 46, 27, 1, 255, 50, 29, 6, 255, 50, 25, 5, 255, 57, 29, 9, 255, 54, 30, 4, 255, 54, 33, 3, 255, 53, 31, 6, 255, 55, 35, 16, 255, 55, 37, 13, 255, 58, 42, 15, 255, 55, 44, 22, 255, 54, 48, 27, 255, 67, 57, 27, 255, 66, 61, 21, 255, 70, 65, 26, 255, 73, 66, 35, 255, 68, 69, 42, 255, 71, 76, 50, 255, 74, 79, 54, 255, 73, 81, 58, 255, 77, 89, 69, 255, 78, 95, 75, 255, 79, 97, 79, 255, 84, 104, 85, 255, 86, 112, 91, 255, 91, 120, 101, 255, 89, 125, 104, 255, 93, 133, 112, 255, 97, 140, 121, 255, 98, 144, 129, 255, 99, 148, 136, 255, 104, 152, 140, 255, 107, 155, 143, 255, 108, 159, 145, 255, 109, 162, 146, 255, 110, 160, 145, 255, 111, 161, 146, 255, 111, 161, 143, 255, 117, 161, 142, 255, 114, 157, 137, 255, 110, 154, 134, 255, 109, 152, 131, 255, 107, 152, 126, 255, 101, 147, 113, 255, 101, 139, 110, 255, 103, 135, 105, 255, 103, 129, 101, 255, 101, 122, 95, 255, 97, 117, 80, 255, 94, 113, 81, 255, 91, 105, 77, 255, 88, 99, 69, 255, 86, 94, 60, 255, 87, 89, 58, 255, 89, 86, 55, 255, 85, 80, 45, 255, 85, 82, 43, 255, 77, 74, 32, 255, 76, 71, 37, 255, 75, 67, 36, 255, 77, 64, 18, 255, 83, 65, 19, 255, 81, 61, 16, 255, 76, 56, 24, 255, 77, 53, 24, 255, 83, 51, 17, 255, 80, 49, 18, 255, 75, 51, 10, 255, 70, 47, 9, 255, 70, 44, 6, 255, 75, 44, 8, 255, 73, 41, 12, 255, 71, 40, 7, 255, 76, 43, 4, 255, 74, 38, 3, 255, 70, 38, 6, 255, 72, 37, 5, 255, 71, 38, 1, 255, 72, 38, 3, 255, 70, 34, 7, 255, 72, 36, 7, 255, 69, 32, 4, 255, 72, 31, 5, 255, 70, 32, 10, 255, 65, 37, 5, 255, 70, 34, 5, 255, 75, 31, 1, 255, 72, 31, 6, 255, 72, 31, 6, 255, 69, 29, 3, 255, 71, 36, 6, 255, 73, 31, 3, 255, 76, 30, 4, 255, 75, 36, 7, 255, 77, 31, 7, 255, 66, 30, 3, 255, 71, 28, 2, 255, 77, 28, 2, 255, 79, 32, 4, 255, 74, 31, 2, 255, 73, 28, 3, 255, 70, 28, 7, 255, 70, 28, 4, 255, 70, 27, 5, 255, 69, 25, 4, 255, 70, 31, 4, 255, 67, 30, 2, 255, 66, 28, 0, 255, 59, 22, 8, 255, 65, 26, 8, 255, 71, 28, 2, 255, 69, 28, 2, 255, 72, 27, 5, 255, 75, 25, 4, 255, 77, 31, 6, 255, 70, 28, 3, 255, 71, 27, 3, 255, 75, 28, 2, 255, 76, 27, 0, 255, 79, 31, 3, 255, 78, 29, 2, 255, 78, 28, 3, 255, 76, 29, 4, 255, 71, 26, 2, 255, 72, 26, 3, 255, 77, 28, 5, 255, 78, 24, 4, 255, 76, 27, 2, 255, 71, 25, 0, 255, 76, 25, 9, 255, 67, 19, 4, 255, 70, 25, 1, 255, 68, 28, 2, 255, 71, 27, 3, 255, 73, 23, 2, 255, 70, 25, 3, 255, 68, 28, 5, 255, 66, 24, 3, 255, 70, 19, 2, 255, 64, 23, 1, 255, 60, 26, 4, 255, 66, 25, 5, 255, 62, 19, 2, 255, 58, 22, 1, 255, 58, 25, 3, 255, 61, 24, 1, 255, 61, 21, 1, 255, 65, 23, 7, 255, 65, 21, 6, 255, 66, 19, 4, 255, 70, 22, 5, 255, 75, 24, 5, 255, 71, 18, 2, 255, 66, 20, 4, 255, 63, 21, 6, 255, 63, 20, 5, 255, 62, 23, 5, 255, 58, 23, 3, 255, 54, 17, 0, 255, 63, 23, 4, 255, 59, 23, 2, 255, 56, 20, 1, 255, 63, 17, 3, 255, 61, 17, 1, 255, 56, 17, 2, 255, 48, 17, 4, 255, 51, 20, 4, 255, 61, 19, 1, 255, 61, 21, 0, 255, 52, 17, 1, 255, 53, 13, 6, 255, 58, 16, 7, 255, 48, 16, 6, 255, 52, 16, 7, 255, 61, 20, 0, 255, 57, 18, 2, 255, 49, 14, 6, 255, 55, 17, 2, 255, 56, 17, 2, 255, 50, 16, 1, 255, 58, 19, 6, 255, 47, 17, 3, 255, 56, 17, 3, 255, 52, 14, 1, 255, 45, 12, 1, 255, 54, 15, 2, 255, 58, 15, 6, 255, 48, 12, 4, 255, 48, 13, 4, 255, 47, 16, 5, 255, 42, 15, 6, 255, 39, 16, 1, 255, 40, 14, 3, 255, 47, 14, 8, 255, 42, 10, 1, 255, 44, 15, 1, 255, 43, 15, 2, 255, 45, 14, 2, 255, 49, 12, 4, 255, 46, 13, 6, 255, 41, 10, 6, 255, 42, 12, 5, 255, 36, 14, 4, 255, 34, 13, 5, 255, 38, 14, 4, 255, 33, 7, 1, 255, 37, 12, 5, 255, 36, 10, 4, 255, 36, 8, 0, 255, 44, 11, 2, 255, 52, 15, 5, 255, 56, 13, 7, 255, 54, 16, 7, 255, 60, 17, 2, 255, 47, 13, 0, 255, 43, 12, 5, 255, 45, 13, 4, 255, 55, 12, 5, 255, 58, 12, 4, 255, 49, 12, 4, 255, 49, 14, 5, 255, 54, 14, 4, 255, 54, 15, 4, 255, 52, 13, 6, 255, 46, 8, 5, 255, 45, 10, 6, 255, 48, 14, 5, 255, 55, 14, 4, 255, 57, 15, 3, 255, 66, 16, 4, 255, 72, 13, 4, 255, 66, 13, 1, 255, 65, 17, 3, 255, 58, 14, 4, 255, 46, 12, 2, 255, 46, 12, 4, 255, 50, 11, 2, 255, 50, 11, 3, 255, 40, 10, 1, 255, 37, 10, 1, 255, 38, 11, 4, 255, 37, 8, 2, 255, 39, 11, 4, 255, 38, 12, 4, 255, 40, 11, 2, 255, 42, 9, 0, 255, 48, 14, 2, 255, 52, 14, 7, 255, 44, 7, 3, 255, 39, 10, 3, 255, 39, 13, 2, 255, 34, 10, 0, 255, 37, 8, 2, 255, 32, 6, 5, 255, 24, 6, 0, 255, 26, 8, 1, 255, 24, 4, 1, 255, 26, 6, 3, 255, 24, 7, 2, 255, 23, 6, 2, 255, 27, 6, 4, 255, 26, 8, 2, 255, 27, 9, 1, 255, 39, 11, 3, 255, 47, 11, 2, 255, 46, 11, 2, 255, 40, 8, 1, 255, 39, 7, 0, 255, 45, 11, 3, 255, 45, 11, 3, 255, 5, 2, 5, 255, 3, 2, 1, 255, 3, 1, 0, 255, 5, 2, 0, 255, 8, 2, 2, 255, 9, 0, 0, 255, 12, 2, 0, 255, 12, 2, 1, 255, 12, 2, 1, 255, 11, 1, 0, 255, 11, 1, 0, 255, 11, 1, 0, 255, 13, 2, 2, 255, 18, 4, 4, 255, 14, 2, 2, 255, 12, 2, 1, 255, 13, 3, 2, 255, 14, 4, 2, 255, 13, 3, 1, 255, 12, 2, 1, 255, 13, 4, 3, 255, 11, 2, 1, 255, 13, 3, 2, 255, 17, 3, 1, 255, 16, 4, 3, 255, 13, 2, 1, 255, 15, 1, 2, 255, 17, 3, 3, 255, 16, 2, 2, 255, 17, 3, 2, 255, 16, 3, 3, 255, 16, 3, 3, 255, 13, 2, 1, 255, 15, 4, 2, 255, 16, 5, 3, 255, 13, 4, 2, 255, 13, 5, 3, 255, 12, 5, 1, 255, 13, 4, 1, 255, 15, 4, 2, 255, 17, 7, 5, 255, 16, 6, 5, 255, 15, 4, 1, 255, 18, 6, 0, 255, 20, 7, 0, 255, 15, 7, 2, 255, 18, 6, 2, 255, 22, 7, 5, 255, 22, 8, 4, 255, 21, 9, 5, 255, 15, 6, 1, 255, 18, 9, 4, 255, 20, 9, 1, 255, 24, 11, 2, 255, 23, 10, 2, 255, 22, 7, 1, 255, 22, 6, 1, 255, 27, 11, 4, 255, 24, 11, 4, 255, 22, 9, 2, 255, 26, 12, 3, 255, 29, 12, 4, 255, 29, 12, 2, 255, 28, 13, 2, 255, 27, 12, 3, 255, 27, 11, 2, 255, 26, 11, 1, 255, 26, 13, 4, 255, 28, 15, 6, 255, 27, 14, 2, 255, 32, 15, 1, 255, 35, 19, 4, 255, 31, 20, 3, 255, 30, 16, 2, 255, 32, 15, 3, 255, 31, 16, 4, 255, 29, 16, 1, 255, 34, 13, 3, 255, 30, 19, 4, 255, 34, 17, 3, 255, 36, 16, 3, 255, 36, 18, 4, 255, 36, 18, 4, 255, 37, 18, 4, 255, 37, 16, 4, 255, 33, 15, 3, 255, 35, 14, 2, 255, 41, 19, 3, 255, 41, 24, 6, 255, 38, 21, 5, 255, 34, 17, 3, 255, 37, 15, 3, 255, 44, 17, 5, 255, 43, 19, 5, 255, 38, 17, 3, 255, 42, 16, 6, 255, 30, 15, 4, 255, 41, 20, 4, 255, 46, 21, 4, 255, 40, 18, 2, 255, 42, 22, 6, 255, 42, 19, 3, 255, 42, 20, 2, 255, 43, 22, 5, 255, 44, 19, 3, 255, 42, 21, 2, 255, 48, 26, 5, 255, 52, 22, 3, 255, 53, 26, 6, 255, 51, 22, 5, 255, 47, 25, 4, 255, 42, 24, 4, 255, 47, 24, 9, 255, 46, 22, 3, 255, 58, 25, 4, 255, 56, 27, 2, 255, 59, 27, 5, 255, 50, 25, 2, 255, 54, 27, 4, 255, 51, 26, 1, 255, 44, 29, 0, 255, 47, 30, 1, 255, 51, 27, 5, 255, 50, 25, 3, 255, 49, 25, 3, 255, 48, 30, 6, 255, 47, 26, 4, 255, 50, 21, 2, 255, 59, 24, 6, 255, 55, 24, 6, 255, 54, 26, 5, 255, 58, 30, 3, 255, 57, 27, 11, 255, 53, 23, 12, 255, 48, 32, 2, 255, 52, 32, 5, 255, 56, 26, 10, 255, 57, 34, 13, 255, 59, 40, 13, 255, 62, 44, 19, 255, 60, 44, 20, 255, 67, 49, 20, 255, 73, 56, 32, 255, 70, 61, 34, 255, 67, 63, 28, 255, 71, 66, 36, 255, 68, 70, 48, 255, 68, 72, 55, 255, 73, 79, 61, 255, 75, 85, 66, 255, 76, 91, 72, 255, 77, 94, 75, 255, 82, 101, 81, 255, 87, 111, 89, 255, 82, 115, 94, 255, 85, 122, 104, 255, 88, 130, 113, 255, 92, 136, 117, 255, 93, 141, 123, 255, 96, 147, 132, 255, 99, 151, 138, 255, 106, 156, 144, 255, 109, 159, 147, 255, 107, 159, 147, 255, 108, 161, 147, 255, 113, 161, 148, 255, 112, 161, 150, 255, 113, 162, 149, 255, 115, 159, 144, 255, 116, 159, 139, 255, 110, 153, 131, 255, 107, 152, 125, 255, 103, 148, 120, 255, 100, 145, 114, 255, 104, 142, 105, 255, 103, 134, 101, 255, 100, 127, 95, 255, 98, 120, 89, 255, 95, 113, 87, 255, 91, 108, 76, 255, 89, 103, 70, 255, 90, 95, 62, 255, 86, 92, 59, 255, 85, 85, 57, 255, 88, 83, 41, 255, 86, 86, 30, 255, 83, 80, 29, 255, 81, 74, 33, 255, 78, 70, 29, 255, 78, 67, 27, 255, 78, 60, 32, 255, 84, 61, 20, 255, 87, 63, 10, 255, 76, 58, 9, 255, 67, 48, 27, 255, 69, 45, 29, 255, 74, 47, 11, 255, 74, 45, 9, 255, 69, 40, 15, 255, 69, 42, 9, 255, 69, 42, 9, 255, 72, 40, 10, 255, 74, 39, 6, 255, 75, 43, 7, 255, 69, 37, 7, 255, 70, 31, 5, 255, 71, 38, 0, 255, 72, 38, 2, 255, 76, 37, 10, 255, 75, 34, 6, 255, 73, 37, 4, 255, 70, 36, 3, 255, 73, 32, 2, 255, 78, 32, 2, 255, 76, 32, 1, 255, 79, 31, 1, 255, 78, 27, 4, 255, 76, 31, 7, 255, 70, 30, 2, 255, 75, 33, 7, 255, 76, 31, 6, 255, 74, 29, 3, 255, 74, 28, 3, 255, 77, 29, 3, 255, 72, 29, 5, 255, 69, 30, 5, 255, 73, 29, 6, 255, 71, 27, 2, 255, 72, 31, 5, 255, 76, 28, 8, 255, 74, 26, 4, 255, 78, 32, 3, 255, 72, 25, 3, 255, 71, 26, 6, 255, 71, 28, 5, 255, 67, 24, 5, 255, 71, 31, 6, 255, 72, 29, 7, 255, 73, 24, 1, 255, 67, 22, 7, 255, 64, 24, 10, 255, 69, 26, 2, 255, 75, 29, 3, 255, 72, 27, 1, 255, 73, 30, 3, 255, 73, 31, 2, 255, 73, 30, 3, 255, 75, 29, 3, 255, 72, 27, 2, 255, 72, 26, 2, 255, 74, 25, 3, 255, 75, 26, 1, 255, 76, 30, 1, 255, 72, 29, 0, 255, 76, 31, 6, 255, 73, 26, 5, 255, 72, 27, 3, 255, 73, 26, 2, 255, 75, 26, 2, 255, 78, 25, 4, 255, 75, 24, 4, 255, 75, 28, 4, 255, 66, 28, 2, 255, 66, 28, 3, 255, 64, 22, 1, 255, 67, 23, 2, 255, 67, 25, 4, 255, 59, 25, 3, 255, 62, 27, 6, 255, 72, 23, 3, 255, 60, 27, 3, 255, 59, 25, 3, 255, 63, 23, 4, 255, 66, 23, 4, 255, 74, 23, 6, 255, 71, 24, 3, 255, 68, 22, 3, 255, 58, 18, 0, 255, 56, 19, 3, 255, 61, 19, 4, 255, 63, 18, 3, 255, 65, 19, 3, 255, 63, 22, 5, 255, 55, 16, 1, 255, 58, 19, 5, 255, 67, 26, 9, 255, 56, 19, 4, 255, 54, 21, 4, 255, 60, 21, 4, 255, 60, 21, 5, 255, 57, 20, 4, 255, 55, 17, 2, 255, 54, 15, 1, 255, 53, 18, 1, 255, 56, 17, 3, 255, 56, 19, 4, 255, 53, 18, 1, 255, 57, 21, 3, 255, 49, 15, 0, 255, 57, 20, 5, 255, 60, 15, 5, 255, 57, 15, 5, 255, 54, 18, 3, 255, 54, 23, 4, 255, 57, 20, 7, 255, 56, 14, 4, 255, 48, 18, 4, 255, 48, 18, 1, 255, 57, 19, 2, 255, 53, 20, 4, 255, 49, 15, 1, 255, 55, 17, 4, 255, 61, 16, 4, 255, 54, 17, 5, 255, 44, 15, 5, 255, 47, 14, 3, 255, 51, 16, 6, 255, 44, 13, 3, 255, 54, 16, 7, 255, 52, 13, 2, 255, 43, 12, 6, 255, 31, 12, 7, 255, 39, 16, 3, 255, 60, 22, 4, 255, 59, 16, 2, 255, 56, 16, 4, 255, 53, 18, 4, 255, 52, 17, 5, 255, 46, 13, 2, 255, 35, 12, 1, 255, 39, 12, 3, 255, 45, 10, 2, 255, 45, 13, 3, 255, 37, 9, 3, 255, 44, 13, 6, 255, 44, 13, 8, 255, 40, 10, 4, 255, 42, 10, 5, 255, 43, 10, 3, 255, 53, 15, 2, 255, 70, 19, 4, 255, 63, 18, 3, 255, 61, 16, 5, 255, 47, 14, 0, 255, 60, 16, 3, 255, 52, 14, 3, 255, 49, 10, 3, 255, 51, 11, 1, 255, 53, 15, 2, 255, 53, 12, 3, 255, 52, 12, 2, 255, 50, 15, 3, 255, 45, 12, 1, 255, 47, 12, 3, 255, 47, 9, 2, 255, 54, 14, 4, 255, 63, 16, 5, 255, 72, 14, 4, 255, 61, 12, 1, 255, 55, 15, 2, 255, 58, 16, 4, 255, 61, 14, 4, 255, 58, 10, 2, 255, 54, 11, 3, 255, 48, 14, 3, 255, 43, 13, 5, 255, 36, 9, 0, 255, 38, 15, 3, 255, 43, 8, 4, 255, 41, 10, 3, 255, 36, 11, 0, 255, 43, 12, 2, 255, 41, 10, 2, 255, 41, 8, 3, 255, 49, 12, 6, 255, 46, 10, 3, 255, 42, 9, 4, 255, 43, 12, 6, 255, 34, 7, 1, 255, 38, 10, 2, 255, 48, 15, 6, 255, 43, 11, 1, 255, 35, 3, 0, 255, 33, 8, 6, 255, 27, 8, 2, 255, 26, 8, 3, 255, 23, 5, 1, 255, 23, 7, 3, 255, 21, 7, 2, 255, 18, 5, 0, 255, 25, 10, 5, 255, 25, 7, 3, 255, 27, 7, 2, 255, 34, 11, 3, 255, 45, 10, 1, 255, 51, 12, 5, 255, 41, 10, 2, 255, 42, 8, 3, 255, 45, 9, 5, 255, 42, 8, 3, 255, 1, 3, 4, 255, 1, 1, 6, 255, 3, 3, 5, 255, 5, 4, 1, 255, 8, 2, 0, 255, 9, 0, 2, 255, 10, 1, 2, 255, 10, 2, 0, 255, 10, 2, 0, 255, 10, 1, 2, 255, 11, 1, 2, 255, 11, 1, 0, 255, 12, 0, 0, 255, 14, 1, 1, 255, 13, 2, 2, 255, 13, 3, 2, 255, 12, 2, 1, 255, 12, 2, 1, 255, 14, 3, 1, 255, 11, 2, 0, 255, 12, 3, 1, 255, 12, 2, 1, 255, 13, 2, 1, 255, 17, 4, 2, 255, 18, 4, 3, 255, 13, 2, 1, 255, 10, 2, 0, 255, 13, 3, 2, 255, 14, 3, 2, 255, 14, 4, 2, 255, 12, 3, 1, 255, 8, 1, 0, 255, 15, 4, 2, 255, 15, 4, 2, 255, 16, 5, 3, 255, 17, 6, 4, 255, 13, 3, 1, 255, 15, 5, 3, 255, 16, 4, 2, 255, 14, 2, 1, 255, 15, 4, 2, 255, 16, 6, 4, 255, 16, 6, 2, 255, 16, 7, 0, 255, 16, 5, 0, 255, 20, 6, 2, 255, 20, 7, 4, 255, 16, 5, 1, 255, 19, 8, 4, 255, 20, 7, 4, 255, 20, 6, 2, 255, 20, 9, 5, 255, 20, 8, 2, 255, 23, 9, 1, 255, 20, 7, 0, 255, 21, 7, 2, 255, 23, 10, 4, 255, 25, 10, 4, 255, 26, 11, 5, 255, 24, 10, 2, 255, 28, 13, 4, 255, 30, 13, 5, 255, 29, 13, 5, 255, 26, 11, 3, 255, 28, 11, 3, 255, 30, 13, 3, 255, 30, 13, 3, 255, 30, 16, 5, 255, 27, 13, 3, 255, 27, 13, 1, 255, 31, 17, 3, 255, 36, 14, 1, 255, 39, 16, 2, 255, 35, 18, 4, 255, 33, 15, 3, 255, 36, 14, 2, 255, 35, 15, 2, 255, 35, 16, 5, 255, 24, 15, 1, 255, 31, 17, 5, 255, 36, 18, 6, 255, 31, 14, 1, 255, 35, 17, 3, 255, 32, 17, 2, 255, 32, 14, 1, 255, 34, 17, 6, 255, 35, 18, 6, 255, 36, 19, 3, 255, 41, 16, 3, 255, 40, 17, 1, 255, 37, 20, 7, 255, 44, 15, 7, 255, 34, 14, 2, 255, 33, 22, 5, 255, 29, 16, 0, 255, 36, 20, 8, 255, 39, 17, 6, 255, 41, 17, 3, 255, 46, 24, 5, 255, 42, 22, 4, 255, 42, 20, 6, 255, 47, 18, 3, 255, 48, 19, 5, 255, 45, 20, 5, 255, 44, 18, 3, 255, 41, 21, 2, 255, 42, 23, 2, 255, 44, 21, 0, 255, 45, 26, 3, 255, 50, 24, 6, 255, 48, 21, 2, 255, 40, 22, 1, 255, 48, 23, 2, 255, 49, 20, 3, 255, 52, 21, 6, 255, 42, 26, 1, 255, 44, 28, 5, 255, 49, 25, 6, 255, 50, 26, 4, 255, 51, 28, 4, 255, 51, 27, 3, 255, 51, 25, 2, 255, 53, 26, 3, 255, 57, 28, 4, 255, 53, 25, 3, 255, 53, 28, 5, 255, 54, 26, 9, 255, 52, 21, 7, 255, 44, 27, 6, 255, 49, 23, 10, 255, 52, 24, 11, 255, 45, 26, 1, 255, 46, 28, 2, 255, 52, 25, 8, 255, 57, 30, 8, 255, 56, 36, 11, 255, 50, 32, 8, 255, 55, 36, 9, 255, 60, 37, 15, 255, 66, 42, 19, 255, 71, 47, 15, 255, 75, 53, 15, 255, 68, 52, 31, 255, 64, 55, 45, 255, 61, 56, 45, 255, 68, 65, 50, 255, 67, 66, 50, 255, 67, 73, 58, 255, 70, 79, 63, 255, 73, 84, 67, 255, 78, 91, 74, 255, 81, 98, 80, 255, 80, 104, 82, 255, 84, 112, 90, 255, 83, 120, 100, 255, 85, 128, 111, 255, 87, 134, 120, 255, 94, 141, 126, 255, 97, 148, 133, 255, 98, 152, 136, 255, 103, 156, 146, 255, 106, 160, 147, 255, 108, 162, 149, 255, 109, 162, 149, 255, 112, 164, 151, 255, 116, 165, 153, 255, 115, 164, 153, 255, 112, 161, 150, 255, 116, 160, 145, 255, 113, 156, 137, 255, 110, 154, 133, 255, 108, 150, 126, 255, 105, 148, 120, 255, 102, 142, 116, 255, 103, 138, 106, 255, 102, 129, 101, 255, 98, 123, 92, 255, 96, 119, 81, 255, 96, 115, 78, 255, 88, 104, 75, 255, 90, 98, 76, 255, 85, 92, 59, 255, 88, 90, 60, 255, 88, 84, 58, 255, 83, 79, 40, 255, 85, 77, 40, 255, 81, 70, 36, 255, 81, 67, 32, 255, 80, 66, 30, 255, 81, 68, 27, 255, 77, 60, 27, 255, 79, 58, 22, 255, 82, 56, 18, 255, 77, 52, 12, 255, 71, 45, 17, 255, 74, 45, 14, 255, 75, 46, 3, 255, 71, 42, 9, 255, 67, 41, 18, 255, 69, 41, 10, 255, 70, 38, 7, 255, 70, 39, 10, 255, 66, 38, 4, 255, 66, 37, 3, 255, 68, 35, 9, 255, 73, 35, 11, 255, 77, 37, 4, 255, 75, 34, 5, 255, 72, 31, 7, 255, 75, 35, 8, 255, 75, 32, 4, 255, 73, 34, 2, 255, 77, 32, 7, 255, 78, 30, 6, 255, 75, 29, 10, 255, 74, 31, 6, 255, 74, 34, 11, 255, 68, 32, 3, 255, 70, 34, 4, 255, 68, 29, 2, 255, 73, 28, 4, 255, 68, 30, 3, 255, 67, 32, 4, 255, 74, 30, 3, 255, 69, 32, 5, 255, 74, 28, 5, 255, 79, 29, 8, 255, 72, 27, 4, 255, 65, 30, 4, 255, 67, 24, 8, 255, 72, 29, 7, 255, 71, 29, 0, 255, 67, 25, 4, 255, 65, 25, 5, 255, 66, 27, 4, 255, 69, 30, 8, 255, 71, 28, 3, 255, 72, 24, 5, 255, 69, 29, 3, 255, 63, 31, 3, 255, 62, 29, 4, 255, 69, 26, 3, 255, 69, 24, 4, 255, 78, 29, 6, 255, 77, 28, 2, 255, 79, 30, 2, 255, 83, 32, 5, 255, 81, 29, 5, 255, 78, 28, 6, 255, 77, 30, 7, 255, 72, 24, 2, 255, 73, 25, 3, 255, 77, 31, 7, 255, 71, 27, 3, 255, 71, 26, 1, 255, 74, 27, 1, 255, 72, 29, 4, 255, 67, 29, 3, 255, 73, 27, 3, 255, 75, 24, 1, 255, 70, 30, 1, 255, 69, 27, 4, 255, 68, 26, 2, 255, 68, 30, 4, 255, 68, 27, 5, 255, 68, 22, 2, 255, 72, 23, 3, 255, 69, 24, 3, 255, 64, 23, 3, 255, 65, 23, 2, 255, 64, 22, 3, 255, 67, 22, 6, 255, 65, 21, 4, 255, 66, 23, 3, 255, 69, 20, 2, 255, 66, 19, 3, 255, 65, 22, 6, 255, 60, 20, 4, 255, 58, 20, 3, 255, 60, 21, 4, 255, 63, 20, 4, 255, 64, 22, 4, 255, 59, 21, 3, 255, 58, 20, 3, 255, 63, 20, 4, 255, 65, 18, 1, 255, 62, 19, 2, 255, 59, 23, 4, 255, 56, 22, 4, 255, 48, 18, 2, 255, 56, 20, 6, 255, 59, 17, 5, 255, 56, 20, 3, 255, 56, 17, 1, 255, 55, 20, 5, 255, 55, 21, 3, 255, 64, 21, 4, 255, 60, 19, 4, 255, 50, 16, 3, 255, 55, 19, 4, 255, 60, 21, 2, 255, 59, 20, 4, 255, 62, 19, 4, 255, 56, 18, 1, 255, 51, 16, 7, 255, 49, 15, 3, 255, 48, 17, 4, 255, 55, 16, 3, 255, 68, 19, 6, 255, 61, 17, 5, 255, 48, 15, 1, 255, 40, 13, 1, 255, 47, 17, 4, 255, 46, 15, 5, 255, 47, 17, 8, 255, 48, 16, 4, 255, 44, 12, 1, 255, 48, 20, 6, 255, 50, 15, 3, 255, 52, 16, 2, 255, 45, 14, 1, 255, 46, 14, 6, 255, 48, 15, 2, 255, 62, 21, 1, 255, 68, 19, 1, 255, 76, 24, 3, 255, 71, 17, 1, 255, 72, 16, 4, 255, 61, 15, 4, 255, 40, 13, 3, 255, 38, 14, 7, 255, 35, 7, 3, 255, 38, 10, 4, 255, 39, 14, 4, 255, 40, 12, 3, 255, 39, 10, 3, 255, 39, 10, 5, 255, 39, 11, 3, 255, 40, 12, 1, 255, 59, 20, 3, 255, 71, 15, 2, 255, 69, 16, 2, 255, 58, 13, 0, 255, 61, 12, 3, 255, 69, 15, 9, 255, 55, 10, 1, 255, 52, 12, 3, 255, 52, 12, 0, 255, 51, 14, 2, 255, 51, 13, 4, 255, 52, 13, 4, 255, 51, 14, 3, 255, 49, 13, 4, 255, 48, 13, 4, 255, 50, 15, 6, 255, 51, 15, 1, 255, 61, 17, 1, 255, 67, 15, 0, 255, 67, 13, 3, 255, 56, 12, 3, 255, 49, 14, 4, 255, 52, 10, 4, 255, 47, 10, 2, 255, 43, 15, 3, 255, 39, 14, 2, 255, 36, 12, 3, 255, 34, 10, 0, 255, 39, 13, 5, 255, 34, 12, 5, 255, 37, 8, 1, 255, 44, 11, 0, 255, 47, 17, 3, 255, 46, 13, 1, 255, 44, 8, 0, 255, 43, 14, 5, 255, 35, 13, 5, 255, 32, 9, 2, 255, 35, 8, 2, 255, 36, 9, 0, 255, 41, 10, 4, 255, 45, 11, 7, 255, 38, 8, 1, 255, 39, 8, 5, 255, 29, 4, 2, 255, 27, 6, 3, 255, 27, 6, 3, 255, 25, 5, 1, 255, 25, 7, 3, 255, 25, 7, 3, 255, 24, 7, 2, 255, 21, 5, 1, 255, 17, 4, 0, 255, 25, 9, 4, 255, 34, 7, 3, 255, 37, 5, 0, 255, 40, 8, 1, 255, 41, 8, 2, 255, 40, 9, 4, 255, 41, 9, 4, 255, 39, 7, 2, 255, 5, 5, 9, 255, 0, 1, 1, 255, 2, 3, 0, 255, 4, 4, 4, 255, 6, 2, 4, 255, 8, 1, 3, 255, 8, 2, 2, 255, 6, 2, 0, 255, 7, 1, 1, 255, 9, 1, 2, 255, 10, 0, 1, 255, 11, 1, 0, 255, 11, 1, 0, 255, 9, 1, 0, 255, 11, 3, 1, 255, 13, 3, 2, 255, 12, 2, 1, 255, 13, 1, 1, 255, 16, 3, 3, 255, 12, 2, 1, 255, 13, 3, 2, 255, 12, 1, 1, 255, 12, 1, 1, 255, 14, 3, 1, 255, 17, 2, 1, 255, 13, 2, 1, 255, 9, 3, 0, 255, 12, 3, 2, 255, 11, 1, 0, 255, 12, 2, 1, 255, 11, 5, 2, 255, 8, 2, 1, 255, 11, 3, 0, 255, 14, 4, 2, 255, 14, 4, 2, 255, 13, 2, 0, 255, 19, 6, 4, 255, 16, 1, 1, 255, 19, 4, 4, 255, 16, 4, 2, 255, 13, 2, 0, 255, 13, 2, 1, 255, 15, 6, 2, 255, 17, 8, 3, 255, 16, 7, 1, 255, 19, 7, 1, 255, 18, 7, 0, 255, 18, 6, 3, 255, 14, 3, 0, 255, 18, 5, 0, 255, 19, 6, 0, 255, 20, 6, 2, 255, 24, 7, 2, 255, 24, 9, 2, 255, 19, 8, 1, 255, 19, 9, 3, 255, 21, 11, 4, 255, 20, 8, 1, 255, 25, 9, 4, 255, 23, 11, 3, 255, 22, 9, 1, 255, 26, 11, 2, 255, 27, 13, 5, 255, 26, 12, 3, 255, 26, 11, 2, 255, 33, 15, 5, 255, 32, 13, 3, 255, 31, 14, 4, 255, 28, 10, 3, 255, 32, 13, 3, 255, 35, 15, 4, 255, 36, 15, 2, 255, 35, 17, 3, 255, 31, 14, 1, 255, 37, 13, 3, 255, 38, 14, 3, 255, 31, 15, 1, 255, 33, 16, 3, 255, 29, 15, 3, 255, 23, 13, 1, 255, 30, 15, 3, 255, 36, 15, 4, 255, 30, 13, 0, 255, 33, 15, 0, 255, 34, 17, 3, 255, 34, 15, 6, 255, 38, 18, 7, 255, 37, 14, 2, 255, 37, 17, 3, 255, 38, 22, 6, 255, 40, 15, 3, 255, 43, 14, 4, 255, 38, 19, 4, 255, 36, 18, 3, 255, 38, 18, 4, 255, 35, 20, 7, 255, 38, 20, 7, 255, 32, 16, 1, 255, 34, 17, 1, 255, 36, 19, 1, 255, 40, 20, 5, 255, 43, 18, 5, 255, 48, 19, 3, 255, 51, 22, 5, 255, 46, 21, 4, 255, 43, 20, 2, 255, 40, 19, 0, 255, 35, 19, 0, 255, 43, 21, 2, 255, 49, 18, 0, 255, 53, 21, 4, 255, 45, 27, 5, 255, 48, 25, 3, 255, 49, 21, 3, 255, 46, 25, 6, 255, 46, 23, 2, 255, 54, 22, 4, 255, 46, 23, 5, 255, 47, 22, 1, 255, 52, 23, 2, 255, 53, 24, 3, 255, 59, 24, 5, 255, 53, 26, 5, 255, 53, 27, 3, 255, 50, 24, 2, 255, 51, 26, 3, 255, 47, 22, 2, 255, 51, 26, 7, 255, 47, 27, 7, 255, 54, 26, 6, 255, 56, 27, 7, 255, 49, 24, 11, 255, 49, 26, 10, 255, 55, 29, 4, 255, 57, 25, 2, 255, 53, 31, 8, 255, 51, 35, 7, 255, 64, 39, 10, 255, 62, 40, 13, 255, 63, 43, 13, 255, 74, 48, 13, 255, 66, 49, 21, 255, 65, 58, 21, 255, 65, 63, 25, 255, 63, 66, 30, 255, 65, 68, 40, 255, 69, 71, 47, 255, 71, 77, 58, 255, 72, 82, 63, 255, 73, 86, 68, 255, 76, 92, 75, 255, 81, 102, 83, 255, 84, 110, 89, 255, 86, 118, 97, 255, 84, 122, 104, 255, 84, 130, 114, 255, 89, 139, 127, 255, 95, 144, 133, 255, 99, 151, 136, 255, 99, 155, 140, 255, 102, 160, 148, 255, 105, 161, 150, 255, 106, 163, 150, 255, 108, 164, 151, 255, 112, 166, 153, 255, 115, 165, 153, 255, 114, 164, 150, 255, 113, 162, 145, 255, 115, 162, 142, 255, 113, 158, 138, 255, 112, 155, 136, 255, 109, 150, 128, 255, 106, 146, 121, 255, 105, 141, 117, 255, 103, 134, 109, 255, 101, 128, 96, 255, 98, 122, 89, 255, 95, 114, 81, 255, 91, 108, 69, 255, 88, 101, 73, 255, 85, 93, 61, 255, 86, 90, 68, 255, 85, 87, 48, 255, 83, 80, 43, 255, 81, 75, 51, 255, 79, 73, 37, 255, 78, 72, 41, 255, 77, 64, 29, 255, 81, 65, 27, 255, 82, 60, 31, 255, 83, 62, 15, 255, 82, 56, 14, 255, 76, 53, 15, 255, 74, 49, 12, 255, 73, 46, 14, 255, 75, 47, 9, 255, 72, 44, 5, 255, 70, 45, 5, 255, 67, 41, 11, 255, 69, 40, 9, 255, 71, 37, 7, 255, 69, 37, 6, 255, 66, 40, 4, 255, 68, 40, 3, 255, 69, 34, 5, 255, 75, 36, 3, 255, 78, 34, 9, 255, 75, 31, 3, 255, 75, 34, 2, 255, 75, 32, 2, 255, 78, 32, 3, 255, 73, 29, 2, 255, 76, 33, 9, 255, 75, 31, 6, 255, 73, 30, 10, 255, 68, 30, 3, 255, 70, 31, 4, 255, 73, 33, 3, 255, 72, 33, 5, 255, 71, 30, 5, 255, 73, 29, 6, 255, 67, 32, 4, 255, 65, 35, 6, 255, 72, 33, 5, 255, 78, 27, 2, 255, 70, 27, 3, 255, 63, 29, 2, 255, 71, 31, 4, 255, 71, 30, 4, 255, 68, 29, 12, 255, 64, 30, 5, 255, 66, 25, 2, 255, 67, 26, 4, 255, 66, 27, 5, 255, 65, 26, 5, 255, 72, 31, 3, 255, 72, 27, 3, 255, 69, 28, 6, 255, 64, 29, 2, 255, 67, 28, 1, 255, 72, 27, 4, 255, 71, 24, 6, 255, 73, 24, 3, 255, 77, 27, 6, 255, 79, 29, 6, 255, 79, 30, 3, 255, 79, 27, 1, 255, 79, 28, 2, 255, 78, 29, 4, 255, 75, 28, 3, 255, 74, 26, 4, 255, 76, 28, 7, 255, 73, 28, 4, 255, 72, 27, 2, 255, 75, 32, 5, 255, 74, 29, 1, 255, 74, 22, 2, 255, 74, 22, 4, 255, 74, 27, 6, 255, 72, 31, 5, 255, 70, 25, 0, 255, 70, 23, 4, 255, 74, 28, 4, 255, 73, 27, 1, 255, 71, 25, 2, 255, 68, 23, 2, 255, 68, 24, 0, 255, 74, 24, 2, 255, 76, 24, 5, 255, 62, 24, 1, 255, 65, 24, 3, 255, 67, 23, 6, 255, 70, 20, 5, 255, 66, 20, 1, 255, 56, 23, 0, 255, 66, 21, 0, 255, 69, 20, 0, 255, 69, 22, 4, 255, 63, 18, 4, 255, 57, 18, 4, 255, 54, 20, 4, 255, 55, 21, 5, 255, 57, 21, 4, 255, 59, 20, 5, 255, 61, 17, 3, 255, 63, 16, 1, 255, 62, 21, 6, 255, 55, 19, 5, 255, 55, 19, 0, 255, 49, 19, 1, 255, 56, 19, 7, 255, 58, 15, 3, 255, 54, 17, 0, 255, 56, 18, 3, 255, 61, 21, 6, 255, 53, 19, 2, 255, 53, 22, 1, 255, 54, 19, 3, 255, 63, 19, 9, 255, 53, 16, 2, 255, 53, 22, 0, 255, 66, 21, 2, 255, 53, 17, 2, 255, 51, 15, 1, 255, 52, 16, 6, 255, 48, 17, 1, 255, 48, 15, 5, 255, 55, 14, 3, 255, 53, 18, 1, 255, 54, 18, 2, 255, 53, 15, 1, 255, 49, 14, 1, 255, 50, 17, 5, 255, 51, 16, 5, 255, 48, 16, 2, 255, 53, 16, 2, 255, 52, 13, 2, 255, 49, 17, 4, 255, 53, 16, 6, 255, 51, 18, 6, 255, 43, 14, 7, 255, 51, 15, 2, 255, 50, 16, 2, 255, 52, 16, 4, 255, 71, 20, 5, 255, 75, 25, 5, 255, 68, 23, 3, 255, 72, 20, 4, 255, 64, 16, 4, 255, 44, 10, 1, 255, 41, 12, 7, 255, 35, 7, 4, 255, 34, 10, 4, 255, 36, 11, 2, 255, 41, 13, 4, 255, 41, 13, 4, 255, 40, 13, 5, 255, 36, 10, 1, 255, 41, 15, 4, 255, 68, 21, 3, 255, 66, 20, 3, 255, 66, 16, 3, 255, 68, 19, 1, 255, 72, 18, 3, 255, 54, 12, 2, 255, 52, 10, 2, 255, 49, 12, 4, 255, 53, 14, 4, 255, 54, 10, 3, 255, 47, 13, 5, 255, 45, 16, 5, 255, 55, 10, 3, 255, 56, 11, 5, 255, 54, 13, 6, 255, 45, 9, 2, 255, 49, 11, 1, 255, 54, 12, 0, 255, 63, 16, 3, 255, 58, 15, 5, 255, 40, 10, 1, 255, 35, 11, 1, 255, 42, 9, 2, 255, 44, 7, 2, 255, 41, 9, 0, 255, 41, 8, 1, 255, 39, 11, 2, 255, 39, 14, 5, 255, 34, 9, 4, 255, 31, 10, 4, 255, 36, 8, 2, 255, 47, 16, 5, 255, 62, 13, 4, 255, 63, 16, 6, 255, 49, 13, 2, 255, 38, 8, 0, 255, 39, 9, 3, 255, 42, 11, 6, 255, 42, 8, 3, 255, 40, 9, 1, 255, 38, 8, 3, 255, 34, 6, 1, 255, 33, 12, 3, 255, 35, 9, 4, 255, 30, 4, 1, 255, 24, 6, 1, 255, 26, 8, 4, 255, 22, 5, 1, 255, 22, 5, 1, 255, 23, 6, 2, 255, 27, 7, 3, 255, 22, 6, 2, 255, 19, 7, 1, 255, 22, 6, 1, 255, 30, 5, 1, 255, 38, 9, 3, 255, 38, 7, 2, 255, 41, 9, 4, 255, 34, 9, 1, 255, 36, 8, 2, 255, 36, 7, 1, 255, 55, 53, 43, 255, 26, 25, 24, 255, 3, 3, 11, 255, 0, 0, 9, 255, 3, 3, 6, 255, 4, 2, 1, 255, 4, 3, 2, 255, 5, 2, 3, 255, 5, 3, 1, 255, 6, 1, 1, 255, 7, 0, 0, 255, 9, 1, 2, 255, 10, 2, 3, 255, 11, 3, 0, 255, 10, 1, 0, 255, 11, 1, 0, 255, 12, 2, 1, 255, 13, 2, 2, 255, 15, 3, 3, 255, 12, 2, 2, 255, 13, 1, 2, 255, 13, 1, 1, 255, 13, 3, 1, 255, 14, 4, 2, 255, 21, 6, 5, 255, 18, 3, 2, 255, 12, 1, 0, 255, 15, 4, 2, 255, 15, 3, 2, 255, 15, 1, 0, 255, 18, 5, 4, 255, 16, 3, 1, 255, 12, 3, 0, 255, 14, 3, 1, 255, 15, 4, 2, 255, 16, 5, 3, 255, 16, 3, 2, 255, 18, 2, 2, 255, 15, 3, 1, 255, 15, 4, 2, 255, 15, 5, 3, 255, 15, 5, 3, 255, 16, 6, 3, 255, 17, 7, 3, 255, 15, 4, 0, 255, 14, 5, 1, 255, 19, 6, 1, 255, 22, 6, 3, 255, 22, 6, 3, 255, 16, 4, 0, 255, 16, 8, 1, 255, 22, 7, 2, 255, 24, 7, 0, 255, 25, 10, 1, 255, 23, 11, 4, 255, 18, 9, 3, 255, 18, 8, 1, 255, 21, 8, 2, 255, 22, 9, 4, 255, 21, 10, 3, 255, 20, 8, 1, 255, 24, 10, 2, 255, 25, 11, 4, 255, 27, 13, 4, 255, 25, 10, 3, 255, 31, 14, 5, 255, 29, 10, 1, 255, 28, 10, 1, 255, 30, 12, 4, 255, 32, 13, 4, 255, 33, 17, 5, 255, 33, 16, 4, 255, 34, 14, 0, 255, 32, 16, 2, 255, 28, 15, 3, 255, 28, 13, 1, 255, 32, 14, 2, 255, 35, 16, 4, 255, 32, 16, 5, 255, 25, 15, 3, 255, 32, 16, 5, 255, 39, 16, 5, 255, 35, 15, 1, 255, 43, 17, 5, 255, 37, 13, 3, 255, 36, 13, 5, 255, 29, 14, 2, 255, 29, 18, 1, 255, 38, 22, 6, 255, 33, 19, 4, 255, 33, 16, 2, 255, 36, 17, 3, 255, 35, 20, 3, 255, 38, 19, 3, 255, 44, 23, 7, 255, 32, 15, 1, 255, 36, 19, 4, 255, 40, 21, 6, 255, 41, 19, 5, 255, 40, 15, 3, 255, 43, 17, 4, 255, 43, 19, 3, 255, 44, 19, 1, 255, 44, 19, 1, 255, 41, 22, 3, 255, 43, 19, 4, 255, 44, 19, 4, 255, 42, 23, 6, 255, 51, 23, 7, 255, 55, 23, 2, 255, 48, 19, 5, 255, 37, 21, 7, 255, 43, 20, 5, 255, 49, 22, 1, 255, 50, 27, 3, 255, 54, 29, 5, 255, 48, 24, 2, 255, 47, 28, 3, 255, 48, 28, 3, 255, 51, 26, 3, 255, 50, 25, 1, 255, 55, 23, 3, 255, 54, 22, 4, 255, 55, 26, 3, 255, 49, 20, 2, 255, 52, 24, 3, 255, 51, 24, 6, 255, 52, 24, 6, 255, 59, 29, 4, 255, 53, 28, 3, 255, 52, 26, 7, 255, 56, 23, 13, 255, 55, 25, 5, 255, 49, 30, 4, 255, 49, 31, 6, 255, 55, 32, 6, 255, 62, 32, 9, 255, 69, 36, 11, 255, 61, 41, 7, 255, 58, 45, 9, 255, 66, 47, 17, 255, 56, 44, 26, 255, 55, 53, 29, 255, 64, 59, 37, 255, 64, 61, 40, 255, 64, 68, 43, 255, 67, 71, 42, 255, 69, 76, 56, 255, 71, 85, 65, 255, 76, 92, 74, 255, 77, 95, 79, 255, 80, 102, 86, 255, 80, 111, 92, 255, 85, 121, 101, 255, 87, 129, 109, 255, 86, 137, 120, 255, 90, 143, 130, 255, 98, 149, 137, 255, 104, 157, 143, 255, 100, 159, 145, 255, 101, 160, 148, 255, 107, 165, 153, 255, 110, 168, 155, 255, 109, 168, 153, 255, 111, 167, 154, 255, 114, 165, 153, 255, 114, 164, 150, 255, 116, 166, 146, 255, 112, 159, 139, 255, 112, 158, 137, 255, 107, 151, 131, 255, 109, 149, 127, 255, 107, 143, 120, 255, 103, 136, 114, 255, 101, 130, 105, 255, 99, 125, 90, 255, 99, 120, 86, 255, 93, 109, 84, 255, 87, 99, 73, 255, 88, 96, 66, 255, 84, 94, 56, 255, 89, 87, 55, 255, 84, 86, 34, 255, 79, 78, 33, 255, 80, 69, 43, 255, 79, 70, 39, 255, 82, 67, 35, 255, 81, 61, 25, 255, 83, 60, 28, 255, 81, 58, 23, 255, 79, 55, 23, 255, 77, 51, 25, 255, 71, 47, 11, 255, 73, 47, 5, 255, 79, 45, 13, 255, 79, 42, 15, 255, 71, 40, 9, 255, 68, 41, 6, 255, 68, 39, 10, 255, 65, 37, 4, 255, 67, 37, 7, 255, 70, 37, 8, 255, 73, 38, 3, 255, 69, 38, 2, 255, 70, 37, 9, 255, 76, 32, 4, 255, 68, 28, 7, 255, 73, 31, 9, 255, 78, 31, 5, 255, 76, 28, 3, 255, 75, 31, 6, 255, 75, 31, 5, 255, 72, 31, 3, 255, 76, 35, 2, 255, 75, 30, 0, 255, 75, 32, 3, 255, 78, 29, 3, 255, 81, 29, 3, 255, 77, 29, 5, 255, 78, 31, 9, 255, 75, 28, 6, 255, 76, 32, 9, 255, 74, 32, 6, 255, 70, 28, 0, 255, 74, 33, 3, 255, 75, 31, 9, 255, 69, 28, 6, 255, 71, 31, 3, 255, 74, 33, 5, 255, 62, 27, 4, 255, 63, 26, 2, 255, 74, 30, 8, 255, 73, 27, 3, 255, 71, 26, 4, 255, 68, 25, 6, 255, 71, 26, 2, 255, 75, 26, 5, 255, 70, 24, 1, 255, 70, 27, 5, 255, 70, 28, 2, 255, 63, 28, 7, 255, 62, 30, 12, 255, 71, 32, 1, 255, 75, 30, 3, 255, 75, 30, 4, 255, 77, 32, 5, 255, 75, 30, 2, 255, 72, 26, 0, 255, 71, 27, 0, 255, 73, 29, 5, 255, 74, 28, 7, 255, 70, 23, 1, 255, 76, 31, 2, 255, 72, 29, 1, 255, 70, 26, 3, 255, 71, 25, 6, 255, 70, 22, 4, 255, 79, 24, 5, 255, 70, 26, 3, 255, 60, 31, 3, 255, 68, 22, 1, 255, 71, 26, 4, 255, 69, 25, 1, 255, 72, 25, 2, 255, 68, 25, 4, 255, 63, 27, 3, 255, 62, 27, 2, 255, 66, 27, 3, 255, 67, 25, 3, 255, 65, 26, 2, 255, 67, 22, 2, 255, 63, 24, 5, 255, 59, 21, 3, 255, 63, 23, 3, 255, 60, 24, 3, 255, 64, 23, 4, 255, 63, 20, 3, 255, 65, 20, 4, 255, 63, 18, 3, 255, 61, 19, 3, 255, 60, 21, 2, 255, 56, 20, 1, 255, 56, 23, 5, 255, 58, 23, 3, 255, 60, 22, 2, 255, 65, 23, 4, 255, 58, 22, 3, 255, 51, 22, 5, 255, 58, 18, 1, 255, 56, 17, 3, 255, 56, 18, 4, 255, 61, 21, 3, 255, 57, 20, 1, 255, 53, 19, 4, 255, 54, 17, 2, 255, 57, 17, 1, 255, 52, 18, 2, 255, 47, 19, 1, 255, 54, 19, 3, 255, 55, 16, 3, 255, 55, 18, 1, 255, 56, 20, 0, 255, 59, 16, 3, 255, 63, 18, 7, 255, 53, 18, 4, 255, 44, 16, 2, 255, 51, 15, 8, 255, 52, 17, 5, 255, 50, 18, 4, 255, 52, 14, 2, 255, 55, 18, 5, 255, 50, 17, 4, 255, 50, 18, 6, 255, 51, 11, 1, 255, 51, 17, 3, 255, 53, 16, 2, 255, 54, 16, 3, 255, 46, 13, 2, 255, 51, 15, 6, 255, 46, 13, 2, 255, 44, 14, 7, 255, 59, 16, 1, 255, 67, 23, 3, 255, 64, 23, 3, 255, 67, 20, 0, 255, 76, 21, 4, 255, 65, 20, 5, 255, 68, 18, 5, 255, 66, 15, 2, 255, 51, 14, 1, 255, 41, 14, 5, 255, 36, 14, 3, 255, 35, 13, 2, 255, 39, 11, 6, 255, 44, 12, 3, 255, 43, 10, 1, 255, 44, 14, 5, 255, 37, 7, 0, 255, 40, 11, 3, 255, 61, 15, 1, 255, 72, 16, 7, 255, 72, 18, 5, 255, 75, 23, 0, 255, 73, 17, 0, 255, 59, 14, 2, 255, 39, 13, 0, 255, 45, 12, 4, 255, 56, 11, 6, 255, 48, 14, 4, 255, 44, 13, 4, 255, 51, 11, 3, 255, 54, 12, 2, 255, 51, 13, 1, 255, 46, 13, 3, 255, 41, 13, 4, 255, 40, 12, 1, 255, 46, 13, 2, 255, 51, 12, 2, 255, 46, 11, 3, 255, 40, 10, 1, 255, 38, 11, 2, 255, 42, 12, 6, 255, 43, 11, 6, 255, 43, 9, 4, 255, 41, 10, 4, 255, 39, 10, 3, 255, 45, 10, 5, 255, 35, 8, 2, 255, 35, 11, 5, 255, 32, 12, 3, 255, 45, 13, 4, 255, 56, 11, 3, 255, 59, 13, 4, 255, 52, 12, 3, 255, 41, 12, 4, 255, 34, 10, 1, 255, 43, 9, 2, 255, 50, 10, 3, 255, 41, 9, 1, 255, 38, 10, 5, 255, 28, 5, 0, 255, 27, 12, 2, 255, 30, 9, 3, 255, 31, 5, 2, 255, 29, 7, 1, 255, 27, 10, 3, 255, 22, 6, 1, 255, 21, 5, 0, 255, 20, 5, 0, 255, 22, 7, 1, 255, 19, 7, 1, 255, 23, 6, 2, 255, 26, 6, 3, 255, 25, 7, 2, 255, 37, 11, 4, 255, 38, 6, 1, 255, 38, 10, 6, 255, 31, 7, 1, 255, 34, 8, 2, 255, 37, 8, 2, 255, 71, 61, 57, 255, 77, 71, 68, 255, 57, 56, 55, 255, 23, 25, 25, 255, 5, 7, 8, 255, 0, 0, 6, 255, 2, 1, 8, 255, 4, 4, 6, 255, 5, 4, 4, 255, 6, 4, 0, 255, 5, 2, 0, 255, 7, 2, 3, 255, 8, 2, 4, 255, 12, 0, 0, 255, 11, 0, 0, 255, 11, 2, 1, 255, 12, 2, 1, 255, 11, 2, 0, 255, 10, 3, 1, 255, 16, 4, 3, 255, 18, 3, 3, 255, 16, 3, 2, 255, 15, 5, 3, 255, 11, 1, 1, 255, 14, 1, 0, 255, 16, 0, 0, 255, 13, 2, 0, 255, 13, 2, 1, 255, 13, 2, 0, 255, 14, 2, 2, 255, 21, 7, 5, 255, 17, 1, 1, 255, 17, 3, 2, 255, 18, 5, 4, 255, 16, 5, 4, 255, 14, 3, 2, 255, 12, 2, 1, 255, 16, 5, 3, 255, 14, 4, 2, 255, 14, 4, 2, 255, 14, 5, 3, 255, 13, 4, 1, 255, 15, 4, 3, 255, 17, 5, 4, 255, 16, 3, 2, 255, 19, 6, 4, 255, 18, 5, 3, 255, 17, 7, 4, 255, 16, 5, 3, 255, 15, 3, 1, 255, 20, 7, 3, 255, 21, 9, 2, 255, 23, 9, 1, 255, 21, 7, 0, 255, 21, 10, 3, 255, 18, 6, 3, 255, 20, 7, 3, 255, 23, 8, 4, 255, 17, 6, 2, 255, 20, 11, 2, 255, 25, 14, 4, 255, 26, 13, 3, 255, 23, 10, 0, 255, 27, 12, 5, 255, 26, 10, 3, 255, 31, 14, 5, 255, 31, 14, 3, 255, 28, 13, 4, 255, 26, 13, 4, 255, 25, 12, 2, 255, 30, 12, 3, 255, 34, 15, 3, 255, 33, 11, 0, 255, 35, 11, 2, 255, 29, 12, 4, 255, 25, 9, 0, 255, 33, 12, 2, 255, 36, 13, 3, 255, 28, 15, 2, 255, 28, 13, 2, 255, 33, 14, 3, 255, 35, 14, 2, 255, 40, 15, 2, 255, 37, 12, 3, 255, 30, 13, 1, 255, 33, 13, 2, 255, 37, 21, 7, 255, 32, 19, 2, 255, 36, 15, 3, 255, 32, 14, 1, 255, 40, 19, 5, 255, 39, 15, 3, 255, 38, 17, 4, 255, 37, 20, 4, 255, 35, 19, 3, 255, 33, 15, 1, 255, 38, 15, 2, 255, 37, 17, 3, 255, 36, 17, 3, 255, 37, 18, 3, 255, 41, 19, 3, 255, 40, 17, 1, 255, 46, 18, 3, 255, 40, 19, 2, 255, 43, 20, 4, 255, 43, 17, 2, 255, 41, 20, 3, 255, 46, 21, 5, 255, 49, 23, 4, 255, 46, 23, 6, 255, 41, 21, 6, 255, 38, 21, 5, 255, 51, 23, 4, 255, 49, 22, 1, 255, 48, 25, 3, 255, 48, 24, 4, 255, 47, 24, 5, 255, 39, 23, 4, 255, 48, 23, 5, 255, 53, 23, 6, 255, 42, 21, 4, 255, 46, 26, 5, 255, 49, 26, 2, 255, 48, 25, 1, 255, 50, 24, 5, 255, 54, 26, 7, 255, 50, 23, 7, 255, 51, 23, 7, 255, 54, 30, 3, 255, 50, 28, 11, 255, 55, 31, 4, 255, 59, 28, 0, 255, 58, 27, 2, 255, 52, 29, 6, 255, 56, 33, 12, 255, 65, 33, 6, 255, 66, 36, 6, 255, 57, 35, 9, 255, 58, 34, 8, 255, 59, 39, 9, 255, 57, 49, 18, 255, 59, 50, 24, 255, 59, 55, 34, 255, 64, 55, 40, 255, 67, 62, 43, 255, 61, 65, 45, 255, 65, 70, 56, 255, 71, 77, 65, 255, 71, 84, 69, 255, 74, 93, 78, 255, 78, 99, 84, 255, 83, 108, 93, 255, 79, 113, 95, 255, 84, 124, 103, 255, 89, 133, 112, 255, 85, 141, 121, 255, 93, 151, 134, 255, 101, 153, 139, 255, 105, 159, 146, 255, 103, 163, 151, 255, 105, 164, 154, 255, 110, 168, 156, 255, 110, 169, 155, 255, 107, 169, 154, 255, 110, 169, 154, 255, 115, 167, 154, 255, 114, 165, 150, 255, 114, 162, 145, 255, 113, 159, 140, 255, 110, 155, 135, 255, 106, 150, 129, 255, 105, 146, 120, 255, 105, 140, 116, 255, 102, 133, 113, 255, 100, 126, 101, 255, 99, 120, 97, 255, 97, 115, 91, 255, 91, 106, 75, 255, 91, 100, 68, 255, 88, 93, 62, 255, 90, 88, 56, 255, 86, 81, 50, 255, 85, 79, 39, 255, 83, 75, 37, 255, 79, 67, 33, 255, 80, 67, 33, 255, 78, 60, 31, 255, 87, 62, 30, 255, 88, 59, 22, 255, 83, 53, 18, 255, 79, 49, 22, 255, 74, 45, 15, 255, 73, 45, 12, 255, 73, 47, 7, 255, 69, 43, 8, 255, 65, 37, 13, 255, 65, 36, 14, 255, 72, 39, 4, 255, 70, 40, 6, 255, 64, 35, 3, 255, 70, 36, 11, 255, 68, 34, 11, 255, 70, 37, 4, 255, 70, 36, 2, 255, 71, 34, 8, 255, 73, 34, 4, 255, 71, 30, 2, 255, 72, 28, 6, 255, 74, 30, 10, 255, 76, 31, 4, 255, 77, 31, 4, 255, 76, 31, 3, 255, 72, 33, 1, 255, 77, 33, 5, 255, 79, 31, 7, 255, 69, 28, 8, 255, 71, 32, 5, 255, 78, 32, 6, 255, 78, 28, 5, 255, 76, 28, 7, 255, 71, 27, 6, 255, 74, 24, 5, 255, 77, 26, 2, 255, 75, 32, 2, 255, 67, 35, 3, 255, 70, 25, 6, 255, 68, 23, 8, 255, 67, 31, 5, 255, 70, 28, 0, 255, 67, 26, 3, 255, 68, 29, 5, 255, 71, 30, 2, 255, 71, 25, 2, 255, 70, 26, 3, 255, 65, 28, 3, 255, 63, 26, 6, 255, 65, 24, 5, 255, 69, 25, 5, 255, 70, 27, 4, 255, 63, 26, 4, 255, 69, 29, 4, 255, 78, 33, 3, 255, 73, 28, 5, 255, 77, 30, 1, 255, 77, 31, 0, 255, 74, 30, 1, 255, 75, 28, 4, 255, 75, 27, 5, 255, 72, 25, 3, 255, 71, 25, 3, 255, 73, 28, 3, 255, 73, 25, 2, 255, 73, 28, 2, 255, 71, 28, 3, 255, 67, 24, 3, 255, 70, 25, 5, 255, 72, 26, 6, 255, 68, 24, 0, 255, 76, 27, 3, 255, 71, 24, 6, 255, 66, 23, 5, 255, 74, 31, 4, 255, 72, 26, 1, 255, 64, 27, 3, 255, 61, 27, 7, 255, 62, 24, 5, 255, 67, 23, 3, 255, 67, 26, 4, 255, 58, 25, 1, 255, 66, 26, 2, 255, 67, 24, 3, 255, 61, 24, 4, 255, 62, 23, 4, 255, 64, 21, 3, 255, 59, 22, 3, 255, 59, 18, 5, 255, 60, 18, 5, 255, 56, 17, 3, 255, 57, 20, 5, 255, 57, 20, 5, 255, 58, 20, 3, 255, 62, 21, 6, 255, 59, 16, 5, 255, 58, 16, 3, 255, 63, 20, 4, 255, 64, 20, 3, 255, 54, 17, 3, 255, 48, 18, 6, 255, 52, 19, 2, 255, 56, 17, 5, 255, 52, 16, 2, 255, 57, 22, 2, 255, 60, 20, 2, 255, 54, 17, 7, 255, 52, 19, 3, 255, 58, 17, 1, 255, 62, 18, 8, 255, 52, 16, 2, 255, 53, 16, 0, 255, 58, 16, 4, 255, 53, 15, 6, 255, 56, 18, 5, 255, 65, 18, 2, 255, 57, 18, 3, 255, 48, 17, 2, 255, 53, 16, 11, 255, 53, 12, 5, 255, 47, 15, 4, 255, 48, 16, 4, 255, 53, 15, 4, 255, 48, 17, 3, 255, 54, 17, 3, 255, 47, 16, 1, 255, 50, 13, 3, 255, 47, 12, 5, 255, 50, 16, 5, 255, 48, 17, 5, 255, 41, 15, 3, 255, 49, 13, 4, 255, 53, 13, 2, 255, 47, 15, 2, 255, 43, 13, 3, 255, 59, 16, 4, 255, 69, 17, 2, 255, 70, 24, 6, 255, 70, 21, 3, 255, 74, 18, 1, 255, 86, 20, 5, 255, 83, 21, 4, 255, 67, 21, 4, 255, 49, 16, 3, 255, 44, 13, 4, 255, 41, 11, 4, 255, 38, 12, 8, 255, 40, 10, 2, 255, 45, 14, 3, 255, 43, 14, 4, 255, 39, 9, 2, 255, 40, 11, 6, 255, 33, 10, 3, 255, 49, 13, 8, 255, 63, 16, 4, 255, 70, 17, 0, 255, 63, 11, 3, 255, 52, 11, 4, 255, 40, 13, 2, 255, 42, 15, 4, 255, 44, 13, 2, 255, 48, 13, 4, 255, 49, 12, 4, 255, 51, 11, 1, 255, 58, 17, 2, 255, 63, 18, 2, 255, 51, 15, 3, 255, 41, 12, 4, 255, 39, 10, 4, 255, 39, 9, 1, 255, 39, 8, 0, 255, 41, 9, 3, 255, 45, 6, 3, 255, 42, 6, 0, 255, 39, 11, 3, 255, 39, 12, 5, 255, 38, 8, 3, 255, 37, 10, 4, 255, 38, 9, 2, 255, 35, 9, 1, 255, 35, 9, 2, 255, 34, 10, 5, 255, 35, 8, 3, 255, 36, 6, 0, 255, 39, 10, 2, 255, 44, 13, 4, 255, 42, 9, 2, 255, 36, 10, 3, 255, 33, 9, 3, 255, 39, 8, 2, 255, 43, 8, 1, 255, 37, 12, 1, 255, 35, 8, 2, 255, 33, 9, 5, 255, 25, 11, 3, 255, 26, 6, 0, 255, 32, 9, 5, 255, 42, 8, 5, 255, 40, 10, 7, 255, 33, 7, 4, 255, 29, 7, 4, 255, 23, 7, 2, 255, 22, 5, 1, 255, 22, 5, 1, 255, 22, 4, 0, 255, 27, 7, 4, 255, 28, 5, 1, 255, 34, 10, 3, 255, 35, 8, 1, 255, 37, 9, 4, 255, 31, 6, 2, 255, 35, 5, 3, 255, 36, 7, 4, 255, 40, 41, 48, 255, 51, 45, 41, 255, 68, 61, 51, 255, 71, 63, 53, 255, 61, 52, 52, 255, 33, 34, 33, 255, 7, 9, 18, 255, 0, 0, 5, 255, 6, 4, 8, 255, 5, 3, 3, 255, 8, 5, 0, 255, 8, 4, 3, 255, 10, 6, 0, 255, 12, 4, 0, 255, 11, 1, 1, 255, 13, 2, 2, 255, 14, 3, 1, 255, 9, 0, 1, 255, 9, 1, 2, 255, 12, 2, 1, 255, 13, 2, 1, 255, 12, 1, 0, 255, 14, 3, 1, 255, 13, 2, 1, 255, 12, 1, 0, 255, 15, 4, 2, 255, 16, 2, 1, 255, 12, 1, 0, 255, 14, 4, 2, 255, 15, 3, 2, 255, 16, 4, 2, 255, 16, 4, 2, 255, 17, 4, 4, 255, 20, 5, 3, 255, 19, 4, 1, 255, 17, 4, 3, 255, 20, 5, 4, 255, 21, 3, 1, 255, 20, 4, 2, 255, 15, 4, 3, 255, 12, 3, 0, 255, 11, 3, 0, 255, 13, 3, 1, 255, 15, 4, 1, 255, 16, 4, 1, 255, 15, 3, 1, 255, 13, 4, 4, 255, 14, 6, 4, 255, 14, 5, 2, 255, 18, 4, 0, 255, 24, 4, 2, 255, 25, 6, 3, 255, 23, 6, 1, 255, 24, 8, 1, 255, 23, 9, 3, 255, 21, 8, 3, 255, 23, 9, 4, 255, 21, 7, 2, 255, 22, 5, 0, 255, 24, 9, 1, 255, 21, 11, 2, 255, 27, 10, 4, 255, 28, 9, 3, 255, 20, 8, 1, 255, 32, 9, 3, 255, 30, 9, 1, 255, 32, 13, 5, 255, 26, 11, 3, 255, 23, 10, 1, 255, 24, 12, 3, 255, 29, 13, 5, 255, 27, 10, 2, 255, 31, 13, 1, 255, 33, 13, 2, 255, 31, 11, 2, 255, 30, 13, 3, 255, 32, 13, 5, 255, 38, 19, 6, 255, 28, 12, 1, 255, 31, 13, 1, 255, 38, 17, 3, 255, 34, 13, 1, 255, 38, 16, 4, 255, 34, 16, 4, 255, 31, 18, 3, 255, 31, 13, 2, 255, 32, 14, 5, 255, 36, 15, 7, 255, 34, 16, 1, 255, 37, 17, 2, 255, 35, 13, 2, 255, 36, 14, 4, 255, 37, 15, 3, 255, 37, 15, 2, 255, 36, 14, 1, 255, 38, 18, 4, 255, 37, 17, 3, 255, 36, 18, 5, 255, 36, 19, 5, 255, 38, 18, 1, 255, 44, 20, 4, 255, 44, 18, 6, 255, 48, 19, 9, 255, 40, 18, 5, 255, 36, 19, 4, 255, 35, 21, 2, 255, 37, 21, 0, 255, 43, 21, 3, 255, 42, 21, 6, 255, 35, 20, 9, 255, 37, 20, 5, 255, 43, 21, 9, 255, 49, 21, 8, 255, 49, 20, 2, 255, 47, 24, 5, 255, 44, 22, 5, 255, 43, 22, 3, 255, 45, 24, 7, 255, 48, 21, 7, 255, 47, 22, 5, 255, 48, 24, 2, 255, 56, 26, 6, 255, 50, 25, 4, 255, 42, 23, 6, 255, 43, 25, 10, 255, 45, 25, 6, 255, 50, 25, 2, 255, 50, 25, 9, 255, 43, 26, 11, 255, 44, 26, 4, 255, 52, 28, 5, 255, 52, 22, 4, 255, 51, 30, 3, 255, 54, 27, 9, 255, 58, 31, 11, 255, 61, 33, 8, 255, 63, 32, 2, 255, 53, 37, 4, 255, 54, 35, 14, 255, 59, 37, 16, 255, 54, 47, 11, 255, 56, 50, 22, 255, 58, 53, 32, 255, 61, 60, 25, 255, 65, 65, 37, 255, 63, 67, 52, 255, 64, 72, 59, 255, 68, 78, 58, 255, 75, 88, 69, 255, 77, 95, 74, 255, 77, 102, 79, 255, 83, 113, 94, 255, 83, 122, 100, 255, 87, 130, 108, 255, 91, 137, 119, 255, 96, 145, 129, 255, 100, 152, 137, 255, 104, 159, 144, 255, 104, 163, 148, 255, 104, 165, 152, 255, 114, 169, 158, 255, 118, 169, 158, 255, 114, 171, 157, 255, 116, 172, 157, 255, 112, 169, 154, 255, 110, 168, 153, 255, 113, 165, 151, 255, 113, 161, 146, 255, 111, 158, 137, 255, 108, 152, 131, 255, 109, 150, 127, 255, 105, 144, 117, 255, 101, 136, 108, 255, 99, 128, 106, 255, 95, 121, 91, 255, 92, 117, 82, 255, 89, 107, 82, 255, 90, 102, 73, 255, 87, 94, 60, 255, 87, 91, 60, 255, 83, 83, 48, 255, 81, 79, 41, 255, 87, 77, 38, 255, 86, 72, 39, 255, 79, 66, 27, 255, 82, 65, 21, 255, 80, 59, 29, 255, 76, 54, 22, 255, 85, 52, 16, 255, 81, 53, 18, 255, 74, 49, 17, 255, 82, 44, 9, 255, 72, 45, 16, 255, 72, 39, 19, 255, 73, 37, 13, 255, 68, 37, 10, 255, 68, 37, 17, 255, 69, 35, 4, 255, 70, 35, 7, 255, 67, 32, 10, 255, 71, 36, 6, 255, 70, 35, 5, 255, 70, 32, 4, 255, 72, 31, 6, 255, 72, 30, 3, 255, 75, 35, 1, 255, 76, 33, 1, 255, 74, 30, 2, 255, 74, 34, 5, 255, 74, 35, 1, 255, 76, 32, 4, 255, 75, 32, 6, 255, 73, 33, 3, 255, 74, 31, 5, 255, 77, 32, 6, 255, 76, 32, 6, 255, 75, 30, 2, 255, 77, 29, 4, 255, 66, 29, 3, 255, 65, 27, 2, 255, 76, 32, 8, 255, 70, 32, 5, 255, 73, 29, 4, 255, 80, 31, 10, 255, 67, 26, 6, 255, 70, 27, 9, 255, 71, 27, 6, 255, 71, 26, 3, 255, 73, 26, 9, 255, 71, 25, 7, 255, 74, 29, 4, 255, 70, 26, 0, 255, 72, 28, 0, 255, 68, 26, 4, 255, 65, 26, 3, 255, 70, 27, 3, 255, 66, 24, 3, 255, 64, 30, 5, 255, 73, 29, 6, 255, 74, 27, 4, 255, 79, 26, 3, 255, 72, 23, 1, 255, 69, 22, 4, 255, 76, 30, 6, 255, 78, 30, 5, 255, 79, 30, 6, 255, 74, 27, 4, 255, 75, 28, 5, 255, 74, 28, 5, 255, 75, 28, 4, 255, 76, 30, 3, 255, 73, 26, 5, 255, 70, 24, 2, 255, 72, 24, 1, 255, 71, 25, 1, 255, 73, 28, 5, 255, 73, 25, 4, 255, 75, 25, 0, 255, 74, 26, 3, 255, 71, 28, 6, 255, 70, 25, 2, 255, 72, 27, 4, 255, 69, 25, 6, 255, 64, 23, 3, 255, 65, 24, 1, 255, 73, 27, 5, 255, 66, 25, 3, 255, 62, 24, 1, 255, 68, 25, 4, 255, 64, 24, 4, 255, 60, 22, 3, 255, 57, 21, 4, 255, 55, 20, 3, 255, 60, 25, 5, 255, 58, 25, 3, 255, 61, 20, 0, 255, 65, 21, 7, 255, 60, 21, 3, 255, 61, 23, 2, 255, 59, 20, 6, 255, 56, 19, 3, 255, 58, 21, 3, 255, 56, 17, 3, 255, 56, 20, 5, 255, 59, 19, 5, 255, 61, 16, 1, 255, 61, 15, 1, 255, 59, 18, 5, 255, 50, 17, 2, 255, 58, 20, 5, 255, 58, 17, 2, 255, 57, 18, 0, 255, 58, 20, 2, 255, 56, 21, 3, 255, 53, 18, 2, 255, 56, 17, 4, 255, 53, 16, 7, 255, 53, 18, 4, 255, 56, 21, 0, 255, 57, 16, 3, 255, 55, 10, 5, 255, 63, 19, 3, 255, 56, 18, 3, 255, 55, 16, 4, 255, 57, 15, 5, 255, 54, 17, 9, 255, 42, 14, 6, 255, 52, 17, 6, 255, 52, 13, 1, 255, 52, 19, 3, 255, 46, 18, 2, 255, 50, 15, 4, 255, 52, 15, 5, 255, 50, 14, 4, 255, 50, 13, 3, 255, 49, 14, 2, 255, 44, 15, 2, 255, 44, 15, 2, 255, 48, 14, 4, 255, 45, 13, 6, 255, 44, 12, 4, 255, 40, 10, 4, 255, 46, 13, 4, 255, 53, 15, 2, 255, 63, 20, 7, 255, 70, 20, 3, 255, 65, 16, 5, 255, 64, 14, 3, 255, 75, 22, 7, 255, 67, 16, 5, 255, 54, 13, 2, 255, 41, 12, 5, 255, 30, 9, 7, 255, 37, 9, 2, 255, 44, 10, 3, 255, 43, 13, 2, 255, 37, 11, 2, 255, 34, 13, 4, 255, 41, 12, 4, 255, 38, 12, 6, 255, 33, 9, 1, 255, 38, 10, 3, 255, 42, 11, 1, 255, 45, 11, 2, 255, 47, 10, 5, 255, 44, 12, 2, 255, 42, 13, 3, 255, 40, 11, 1, 255, 49, 14, 3, 255, 54, 15, 4, 255, 52, 12, 0, 255, 64, 18, 5, 255, 69, 16, 7, 255, 61, 13, 1, 255, 48, 11, 3, 255, 39, 10, 6, 255, 41, 11, 3, 255, 42, 13, 3, 255, 45, 9, 1, 255, 46, 6, 2, 255, 45, 11, 6, 255, 44, 11, 3, 255, 42, 9, 2, 255, 41, 12, 6, 255, 40, 11, 5, 255, 36, 10, 3, 255, 33, 12, 3, 255, 33, 10, 2, 255, 35, 8, 2, 255, 41, 11, 5, 255, 37, 9, 3, 255, 42, 9, 1, 255, 41, 13, 3, 255, 33, 9, 2, 255, 38, 8, 3, 255, 41, 7, 5, 255, 40, 9, 4, 255, 33, 7, 0, 255, 29, 7, 2, 255, 31, 8, 7, 255, 35, 11, 4, 255, 35, 8, 2, 255, 31, 5, 1, 255, 35, 12, 5, 255, 43, 9, 3, 255, 41, 8, 4, 255, 37, 8, 5, 255, 29, 7, 3, 255, 29, 7, 2, 255, 31, 9, 3, 255, 29, 5, 1, 255, 21, 5, 1, 255, 22, 7, 2, 255, 26, 5, 2, 255, 26, 7, 1, 255, 30, 8, 2, 255, 33, 6, 3, 255, 26, 4, 2, 255, 34, 7, 5, 255, 34, 4, 2, 255, 22, 30, 52, 255, 33, 34, 56, 255, 34, 32, 54, 255, 40, 38, 50, 255, 65, 52, 62, 255, 79, 67, 62, 255, 64, 59, 53, 255, 33, 32, 23, 255, 12, 11, 12, 255, 0, 0, 4, 255, 3, 2, 3, 255, 6, 3, 5, 255, 6, 4, 0, 255, 6, 4, 3, 255, 7, 3, 2, 255, 9, 1, 0, 255, 11, 1, 1, 255, 12, 1, 5, 255, 12, 3, 2, 255, 10, 2, 0, 255, 11, 1, 0, 255, 13, 1, 1, 255, 15, 4, 2, 255, 15, 4, 2, 255, 12, 1, 0, 255, 15, 4, 2, 255, 18, 2, 2, 255, 10, 0, 0, 255, 14, 2, 0, 255, 16, 4, 2, 255, 15, 3, 1, 255, 12, 1, 0, 255, 13, 1, 1, 255, 18, 4, 1, 255, 20, 5, 2, 255, 17, 3, 2, 255, 19, 4, 3, 255, 25, 6, 3, 255, 22, 4, 3, 255, 17, 3, 2, 255, 14, 4, 2, 255, 14, 4, 2, 255, 17, 4, 3, 255, 20, 5, 3, 255, 20, 6, 3, 255, 16, 5, 2, 255, 15, 5, 4, 255, 15, 6, 5, 255, 19, 7, 3, 255, 20, 7, 1, 255, 22, 5, 2, 255, 21, 6, 4, 255, 18, 6, 0, 255, 20, 7, 0, 255, 20, 7, 1, 255, 20, 7, 1, 255, 21, 8, 2, 255, 21, 8, 0, 255, 23, 7, 0, 255, 26, 11, 3, 255, 20, 10, 1, 255, 24, 8, 2, 255, 26, 8, 1, 255, 18, 8, 0, 255, 27, 9, 3, 255, 28, 10, 4, 255, 26, 11, 3, 255, 22, 9, 1, 255, 26, 13, 4, 255, 27, 14, 5, 255, 24, 9, 1, 255, 35, 17, 8, 255, 32, 14, 5, 255, 31, 14, 4, 255, 29, 13, 3, 255, 29, 12, 3, 255, 29, 12, 2, 255, 27, 13, 2, 255, 33, 18, 4, 255, 32, 14, 2, 255, 36, 14, 2, 255, 39, 15, 4, 255, 38, 14, 1, 255, 33, 14, 5, 255, 27, 12, 1, 255, 32, 12, 2, 255, 33, 16, 7, 255, 33, 13, 5, 255, 33, 16, 2, 255, 39, 20, 6, 255, 36, 16, 3, 255, 35, 17, 3, 255, 36, 17, 3, 255, 39, 16, 3, 255, 37, 16, 2, 255, 38, 19, 3, 255, 36, 17, 2, 255, 32, 14, 1, 255, 35, 16, 3, 255, 38, 17, 3, 255, 42, 20, 4, 255, 41, 15, 4, 255, 39, 17, 3, 255, 34, 18, 2, 255, 37, 20, 5, 255, 37, 20, 3, 255, 41, 22, 3, 255, 41, 22, 4, 255, 35, 18, 4, 255, 36, 18, 6, 255, 38, 21, 3, 255, 40, 18, 5, 255, 44, 18, 5, 255, 48, 21, 2, 255, 44, 21, 3, 255, 49, 22, 1, 255, 48, 26, 1, 255, 47, 26, 2, 255, 46, 24, 6, 255, 37, 19, 4, 255, 48, 24, 6, 255, 56, 22, 1, 255, 56, 25, 2, 255, 49, 23, 4, 255, 49, 23, 3, 255, 53, 29, 3, 255, 59, 26, 0, 255, 59, 28, 5, 255, 48, 25, 10, 255, 49, 26, 3, 255, 57, 28, 6, 255, 64, 31, 13, 255, 55, 32, 4, 255, 59, 30, 11, 255, 55, 24, 6, 255, 50, 33, 7, 255, 59, 31, 3, 255, 64, 31, 8, 255, 58, 38, 16, 255, 55, 44, 19, 255, 59, 47, 14, 255, 51, 48, 26, 255, 54, 51, 39, 255, 59, 58, 37, 255, 64, 63, 47, 255, 67, 68, 52, 255, 71, 77, 45, 255, 70, 81, 56, 255, 76, 89, 72, 255, 78, 97, 79, 255, 79, 106, 83, 255, 81, 114, 97, 255, 82, 123, 106, 255, 89, 134, 115, 255, 95, 143, 126, 255, 101, 152, 137, 255, 103, 156, 143, 255, 106, 163, 148, 255, 107, 166, 154, 255, 108, 168, 158, 255, 113, 173, 158, 255, 119, 172, 160, 255, 116, 173, 159, 255, 116, 170, 157, 255, 114, 170, 156, 255, 114, 170, 156, 255, 114, 165, 152, 255, 113, 162, 144, 255, 112, 158, 137, 255, 108, 152, 131, 255, 105, 149, 123, 255, 105, 142, 114, 255, 102, 134, 105, 255, 101, 129, 101, 255, 93, 122, 85, 255, 88, 112, 73, 255, 84, 101, 75, 255, 87, 98, 70, 255, 80, 88, 54, 255, 80, 84, 61, 255, 77, 76, 60, 255, 78, 75, 40, 255, 85, 73, 26, 255, 86, 66, 27, 255, 81, 60, 26, 255, 82, 59, 21, 255, 86, 58, 18, 255, 84, 55, 13, 255, 77, 50, 14, 255, 73, 50, 12, 255, 74, 49, 10, 255, 76, 43, 12, 255, 69, 40, 11, 255, 75, 39, 15, 255, 74, 39, 8, 255, 70, 40, 4, 255, 65, 35, 10, 255, 72, 37, 12, 255, 73, 32, 9, 255, 70, 30, 6, 255, 72, 35, 4, 255, 75, 38, 6, 255, 70, 32, 5, 255, 70, 31, 4, 255, 73, 33, 5, 255, 75, 32, 4, 255, 80, 35, 8, 255, 77, 32, 8, 255, 75, 34, 5, 255, 72, 32, 0, 255, 76, 33, 6, 255, 74, 30, 6, 255, 72, 28, 4, 255, 76, 32, 7, 255, 75, 31, 5, 255, 77, 33, 6, 255, 80, 33, 7, 255, 80, 29, 5, 255, 74, 33, 6, 255, 74, 31, 4, 255, 77, 30, 3, 255, 69, 32, 1, 255, 72, 31, 3, 255, 73, 25, 3, 255, 71, 26, 6, 255, 72, 26, 6, 255, 75, 28, 3, 255, 74, 26, 3, 255, 72, 24, 7, 255, 71, 24, 4, 255, 75, 29, 3, 255, 70, 25, 5, 255, 69, 28, 3, 255, 66, 28, 2, 255, 64, 23, 6, 255, 70, 26, 5, 255, 71, 28, 4, 255, 70, 27, 4, 255, 70, 26, 2, 255, 71, 27, 4, 255, 72, 23, 1, 255, 73, 28, 5, 255, 75, 24, 4, 255, 74, 26, 3, 255, 75, 27, 4, 255, 78, 28, 5, 255, 75, 26, 3, 255, 72, 26, 2, 255, 71, 26, 3, 255, 71, 25, 1, 255, 73, 26, 2, 255, 71, 25, 2, 255, 71, 25, 2, 255, 75, 27, 4, 255, 73, 26, 2, 255, 71, 26, 3, 255, 69, 26, 2, 255, 73, 27, 2, 255, 65, 22, 7, 255, 65, 22, 9, 255, 74, 26, 3, 255, 73, 26, 0, 255, 70, 22, 3, 255, 69, 22, 5, 255, 69, 24, 1, 255, 76, 30, 7, 255, 62, 24, 3, 255, 59, 27, 3, 255, 63, 24, 2, 255, 70, 24, 4, 255, 69, 25, 7, 255, 63, 20, 4, 255, 57, 16, 2, 255, 61, 21, 6, 255, 60, 20, 3, 255, 62, 19, 6, 255, 65, 23, 2, 255, 61, 18, 2, 255, 62, 16, 6, 255, 66, 21, 3, 255, 66, 21, 4, 255, 62, 18, 5, 255, 60, 22, 2, 255, 58, 23, 4, 255, 58, 21, 3, 255, 60, 18, 1, 255, 63, 21, 6, 255, 58, 19, 7, 255, 56, 19, 4, 255, 57, 19, 3, 255, 58, 19, 3, 255, 57, 19, 3, 255, 54, 18, 0, 255, 55, 20, 1, 255, 58, 21, 4, 255, 57, 19, 4, 255, 52, 18, 1, 255, 54, 19, 1, 255, 53, 18, 1, 255, 56, 18, 3, 255, 62, 19, 5, 255, 61, 20, 2, 255, 56, 17, 3, 255, 58, 15, 6, 255, 52, 14, 3, 255, 43, 13, 0, 255, 46, 13, 6, 255, 48, 18, 6, 255, 51, 18, 3, 255, 49, 18, 3, 255, 40, 18, 1, 255, 41, 14, 1, 255, 45, 13, 3, 255, 50, 17, 4, 255, 56, 16, 4, 255, 55, 15, 4, 255, 49, 18, 3, 255, 47, 15, 0, 255, 49, 14, 3, 255, 42, 12, 4, 255, 39, 13, 3, 255, 43, 16, 6, 255, 37, 11, 4, 255, 36, 12, 1, 255, 43, 14, 3, 255, 52, 15, 0, 255, 53, 13, 5, 255, 46, 12, 2, 255, 39, 13, 0, 255, 32, 11, 1, 255, 35, 15, 2, 255, 32, 12, 0, 255, 35, 10, 4, 255, 42, 10, 5, 255, 44, 9, 1, 255, 44, 15, 4, 255, 39, 8, 1, 255, 37, 12, 4, 255, 42, 11, 3, 255, 36, 10, 5, 255, 32, 9, 1, 255, 36, 9, 5, 255, 43, 12, 5, 255, 44, 13, 1, 255, 44, 13, 4, 255, 42, 12, 2, 255, 48, 13, 7, 255, 46, 12, 3, 255, 45, 12, 3, 255, 49, 15, 5, 255, 49, 12, 2, 255, 51, 12, 3, 255, 52, 10, 2, 255, 55, 11, 0, 255, 52, 12, 4, 255, 40, 8, 4, 255, 42, 6, 0, 255, 41, 12, 1, 255, 47, 13, 4, 255, 41, 10, 2, 255, 43, 11, 4, 255, 43, 11, 4, 255, 39, 11, 1, 255, 38, 9, 1, 255, 34, 9, 1, 255, 39, 9, 1, 255, 38, 8, 1, 255, 42, 9, 3, 255, 47, 11, 5, 255, 44, 14, 6, 255, 31, 8, 1, 255, 40, 9, 2, 255, 43, 10, 3, 255, 40, 9, 3, 255, 39, 10, 5, 255, 32, 5, 1, 255, 35, 9, 2, 255, 36, 8, 3, 255, 35, 6, 5, 255, 30, 5, 6, 255, 29, 5, 1, 255, 34, 6, 1, 255, 33, 8, 7, 255, 27, 8, 2, 255, 31, 7, 0, 255, 29, 5, 1, 255, 28, 6, 3, 255, 25, 5, 2, 255, 27, 5, 3, 255, 33, 10, 4, 255, 29, 6, 4, 255, 20, 5, 2, 255, 21, 8, 2, 255, 25, 6, 2, 255, 24, 6, 1, 255, 27, 7, 1, 255, 32, 6, 2, 255, 26, 8, 2, 255, 30, 8, 3, 255, 28, 4, 2, 255, 31, 28, 40, 255, 32, 31, 44, 255, 20, 27, 42, 255, 20, 29, 48, 255, 30, 28, 54, 255, 46, 40, 49, 255, 62, 55, 58, 255, 68, 63, 52, 255, 62, 62, 46, 255, 38, 41, 29, 255, 11, 13, 14, 255, 2, 1, 14, 255, 2, 2, 11, 255, 3, 3, 13, 255, 5, 4, 10, 255, 8, 7, 3, 255, 11, 4, 0, 255, 13, 4, 2, 255, 12, 3, 3, 255, 10, 2, 1, 255, 11, 1, 0, 255, 13, 2, 1, 255, 15, 4, 2, 255, 14, 3, 1, 255, 12, 1, 0, 255, 14, 2, 1, 255, 16, 1, 1, 255, 14, 2, 1, 255, 16, 1, 0, 255, 16, 1, 1, 255, 17, 2, 2, 255, 15, 3, 1, 255, 16, 4, 1, 255, 19, 4, 1, 255, 20, 5, 2, 255, 16, 1, 0, 255, 17, 2, 1, 255, 19, 3, 0, 255, 21, 5, 2, 255, 19, 5, 2, 255, 17, 5, 2, 255, 18, 5, 1, 255, 20, 4, 2, 255, 21, 5, 3, 255, 21, 6, 3, 255, 21, 7, 3, 255, 18, 4, 1, 255, 16, 3, 1, 255, 19, 4, 1, 255, 20, 6, 0, 255, 21, 5, 1, 255, 17, 6, 3, 255, 15, 5, 1, 255, 19, 8, 2, 255, 20, 8, 2, 255, 21, 8, 2, 255, 21, 6, 1, 255, 22, 8, 0, 255, 21, 8, 0, 255, 22, 8, 3, 255, 19, 8, 2, 255, 23, 9, 4, 255, 25, 8, 4, 255, 22, 11, 2, 255, 22, 10, 3, 255, 18, 6, 0, 255, 21, 9, 1, 255, 25, 12, 3, 255, 24, 10, 1, 255, 24, 11, 2, 255, 26, 9, 1, 255, 31, 12, 4, 255, 30, 12, 5, 255, 24, 9, 2, 255, 28, 15, 5, 255, 25, 10, 1, 255, 31, 13, 4, 255, 32, 12, 5, 255, 31, 13, 4, 255, 30, 13, 2, 255, 28, 12, 0, 255, 32, 15, 2, 255, 34, 15, 1, 255, 30, 12, 3, 255, 30, 14, 5, 255, 32, 14, 4, 255, 29, 13, 2, 255, 32, 13, 4, 255, 31, 14, 2, 255, 33, 15, 1, 255, 34, 16, 2, 255, 34, 16, 2, 255, 36, 18, 3, 255, 38, 18, 4, 255, 36, 17, 1, 255, 33, 17, 3, 255, 38, 19, 5, 255, 35, 16, 3, 255, 34, 17, 3, 255, 35, 18, 3, 255, 38, 19, 4, 255, 39, 17, 3, 255, 36, 17, 0, 255, 37, 18, 2, 255, 43, 19, 6, 255, 46, 17, 4, 255, 49, 20, 6, 255, 43, 20, 5, 255, 37, 17, 2, 255, 39, 17, 3, 255, 43, 22, 4, 255, 44, 19, 5, 255, 46, 18, 4, 255, 49, 24, 4, 255, 48, 23, 5, 255, 50, 25, 5, 255, 48, 26, 2, 255, 47, 22, 0, 255, 49, 22, 4, 255, 43, 23, 7, 255, 45, 26, 6, 255, 48, 24, 2, 255, 48, 25, 9, 255, 43, 23, 7, 255, 46, 26, 6, 255, 48, 27, 5, 255, 52, 24, 6, 255, 51, 25, 3, 255, 53, 24, 2, 255, 59, 31, 7, 255, 61, 30, 4, 255, 63, 25, 4, 255, 58, 27, 2, 255, 58, 28, 6, 255, 57, 27, 11, 255, 55, 31, 8, 255, 58, 31, 2, 255, 50, 29, 8, 255, 57, 36, 9, 255, 56, 38, 17, 255, 56, 45, 19, 255, 55, 48, 27, 255, 57, 53, 40, 255, 59, 57, 41, 255, 62, 62, 49, 255, 67, 70, 54, 255, 71, 81, 48, 255, 74, 86, 63, 255, 74, 90, 77, 255, 79, 100, 87, 255, 79, 110, 94, 255, 79, 118, 106, 255, 82, 127, 115, 255, 89, 139, 121, 255, 95, 148, 132, 255, 101, 157, 143, 255, 104, 161, 148, 255, 106, 165, 152, 255, 109, 170, 156, 255, 112, 172, 162, 255, 112, 173, 159, 255, 119, 176, 163, 255, 117, 176, 161, 255, 117, 172, 159, 255, 117, 171, 158, 255, 117, 168, 155, 255, 114, 164, 148, 255, 113, 160, 141, 255, 114, 156, 135, 255, 107, 152, 127, 255, 101, 146, 119, 255, 101, 138, 109, 255, 102, 129, 99, 255, 96, 121, 93, 255, 92, 116, 86, 255, 88, 107, 76, 255, 83, 96, 75, 255, 82, 89, 66, 255, 81, 85, 58, 255, 76, 82, 50, 255, 72, 78, 35, 255, 73, 72, 30, 255, 78, 66, 28, 255, 81, 61, 30, 255, 81, 59, 26, 255, 75, 56, 19, 255, 79, 54, 14, 255, 85, 53, 15, 255, 72, 49, 11, 255, 72, 46, 10, 255, 81, 44, 11, 255, 77, 44, 12, 255, 76, 41, 3, 255, 77, 40, 9, 255, 75, 38, 12, 255, 70, 36, 10, 255, 68, 35, 8, 255, 73, 35, 7, 255, 75, 33, 8, 255, 74, 31, 8, 255, 74, 31, 3, 255, 73, 31, 3, 255, 72, 32, 3, 255, 70, 32, 2, 255, 70, 31, 4, 255, 74, 29, 7, 255, 75, 28, 5, 255, 74, 27, 7, 255, 78, 33, 8, 255, 75, 32, 0, 255, 75, 29, 3, 255, 79, 32, 10, 255, 78, 28, 7, 255, 76, 28, 5, 255, 74, 30, 5, 255, 75, 29, 6, 255, 77, 29, 6, 255, 75, 24, 3, 255, 81, 31, 10, 255, 78, 30, 8, 255, 78, 28, 6, 255, 74, 30, 3, 255, 75, 31, 6, 255, 73, 26, 4, 255, 76, 27, 5, 255, 76, 28, 6, 255, 74, 29, 2, 255, 72, 27, 0, 255, 75, 27, 7, 255, 78, 28, 7, 255, 70, 25, 3, 255, 65, 23, 6, 255, 64, 26, 4, 255, 63, 25, 4, 255, 64, 23, 6, 255, 69, 27, 4, 255, 72, 29, 6, 255, 78, 26, 5, 255, 71, 25, 3, 255, 70, 32, 7, 255, 71, 27, 4, 255, 73, 27, 4, 255, 81, 28, 7, 255, 76, 29, 3, 255, 74, 27, 1, 255, 77, 25, 2, 255, 75, 26, 3, 255, 71, 27, 2, 255, 70, 27, 3, 255, 69, 26, 0, 255, 73, 27, 2, 255, 71, 27, 3, 255, 70, 26, 3, 255, 73, 27, 4, 255, 72, 26, 2, 255, 70, 25, 2, 255, 68, 23, 9, 255, 69, 21, 5, 255, 67, 24, 2, 255, 68, 28, 3, 255, 69, 25, 2, 255, 66, 22, 2, 255, 66, 26, 4, 255, 58, 24, 1, 255, 61, 26, 2, 255, 65, 23, 3, 255, 63, 19, 2, 255, 65, 21, 3, 255, 69, 23, 4, 255, 67, 24, 3, 255, 61, 19, 0, 255, 63, 22, 4, 255, 61, 19, 2, 255, 55, 16, 1, 255, 59, 19, 6, 255, 60, 21, 4, 255, 58, 18, 4, 255, 61, 19, 4, 255, 63, 21, 4, 255, 61, 17, 3, 255, 61, 15, 3, 255, 63, 18, 2, 255, 61, 22, 2, 255, 57, 20, 2, 255, 58, 20, 2, 255, 56, 18, 1, 255, 55, 18, 4, 255, 51, 18, 6, 255, 56, 17, 5, 255, 56, 17, 4, 255, 55, 18, 2, 255, 50, 16, 0, 255, 53, 18, 3, 255, 57, 17, 5, 255, 54, 15, 4, 255, 54, 16, 1, 255, 55, 19, 0, 255, 55, 21, 3, 255, 52, 17, 7, 255, 56, 18, 4, 255, 60, 21, 0, 255, 54, 18, 2, 255, 59, 16, 6, 255, 57, 12, 4, 255, 46, 14, 1, 255, 43, 17, 4, 255, 51, 14, 6, 255, 45, 16, 4, 255, 49, 19, 6, 255, 47, 14, 3, 255, 40, 15, 2, 255, 44, 16, 4, 255, 49, 14, 2, 255, 53, 18, 4, 255, 53, 14, 2, 255, 53, 13, 3, 255, 50, 17, 3, 255, 47, 15, 0, 255, 47, 15, 3, 255, 40, 12, 1, 255, 40, 12, 1, 255, 40, 12, 5, 255, 40, 14, 9, 255, 33, 10, 4, 255, 34, 9, 3, 255, 43, 15, 4, 255, 45, 14, 5, 255, 45, 12, 4, 255, 38, 8, 3, 255, 38, 10, 8, 255, 43, 15, 8, 255, 41, 10, 0, 255, 43, 11, 2, 255, 38, 12, 5, 255, 39, 13, 3, 255, 34, 10, 1, 255, 41, 10, 4, 255, 39, 12, 4, 255, 38, 10, 1, 255, 34, 9, 5, 255, 34, 11, 4, 255, 31, 10, 5, 255, 41, 16, 5, 255, 44, 15, 1, 255, 43, 15, 3, 255, 43, 11, 1, 255, 46, 10, 4, 255, 46, 12, 4, 255, 43, 9, 1, 255, 45, 12, 3, 255, 47, 14, 4, 255, 47, 14, 4, 255, 44, 13, 3, 255, 51, 13, 0, 255, 52, 13, 2, 255, 46, 11, 5, 255, 47, 9, 2, 255, 40, 10, 1, 255, 41, 12, 4, 255, 41, 8, 1, 255, 42, 12, 2, 255, 44, 14, 4, 255, 46, 13, 2, 255, 40, 14, 3, 255, 39, 12, 5, 255, 42, 9, 2, 255, 37, 8, 0, 255, 40, 10, 2, 255, 45, 13, 6, 255, 47, 11, 6, 255, 40, 6, 2, 255, 38, 9, 3, 255, 43, 10, 4, 255, 43, 6, 3, 255, 34, 6, 1, 255, 27, 9, 1, 255, 37, 14, 6, 255, 41, 9, 5, 255, 38, 5, 2, 255, 32, 5, 3, 255, 34, 8, 4, 255, 33, 8, 4, 255, 27, 7, 5, 255, 19, 4, 1, 255, 25, 7, 2, 255, 22, 6, 2, 255, 20, 5, 4, 255, 21, 6, 5, 255, 23, 4, 3, 255, 25, 5, 2, 255, 25, 4, 3, 255, 19, 4, 1, 255, 21, 6, 3, 255, 26, 6, 2, 255, 26, 5, 1, 255, 27, 8, 2, 255, 30, 7, 2, 255, 27, 6, 0, 255, 28, 4, 1, 255, 27, 3, 0, 255, 19, 21, 30, 255, 27, 22, 34, 255, 26, 22, 35, 255, 26, 26, 39, 255, 24, 25, 50, 255, 29, 38, 50, 255, 33, 40, 46, 255, 43, 43, 42, 255, 62, 58, 63, 255, 72, 67, 61, 255, 50, 47, 41, 255, 21, 24, 29, 255, 7, 13, 23, 255, 6, 5, 14, 255, 4, 3, 14, 255, 5, 6, 11, 255, 5, 5, 2, 255, 8, 5, 1, 255, 10, 3, 5, 255, 11, 3, 3, 255, 11, 2, 0, 255, 14, 3, 2, 255, 14, 2, 0, 255, 12, 1, 0, 255, 13, 3, 1, 255, 12, 2, 0, 255, 14, 1, 0, 255, 14, 2, 1, 255, 18, 1, 1, 255, 20, 3, 2, 255, 22, 5, 5, 255, 18, 5, 4, 255, 20, 6, 3, 255, 19, 5, 2, 255, 19, 4, 1, 255, 20, 5, 2, 255, 21, 6, 3, 255, 18, 3, 0, 255, 19, 4, 1, 255, 19, 4, 1, 255, 19, 6, 1, 255, 20, 5, 0, 255, 22, 3, 1, 255, 23, 4, 3, 255, 21, 4, 1, 255, 23, 6, 2, 255, 22, 5, 3, 255, 22, 5, 2, 255, 22, 5, 1, 255, 22, 6, 1, 255, 18, 5, 0, 255, 19, 5, 1, 255, 21, 6, 1, 255, 24, 8, 3, 255, 21, 8, 3, 255, 21, 7, 4, 255, 18, 6, 0, 255, 21, 10, 0, 255, 19, 6, 0, 255, 17, 6, 0, 255, 18, 5, 1, 255, 21, 7, 3, 255, 22, 8, 3, 255, 23, 9, 2, 255, 25, 9, 4, 255, 20, 7, 1, 255, 23, 10, 2, 255, 29, 13, 6, 255, 26, 11, 2, 255, 24, 11, 2, 255, 29, 12, 4, 255, 27, 10, 2, 255, 26, 9, 2, 255, 24, 10, 3, 255, 23, 10, 2, 255, 27, 14, 4, 255, 28, 10, 2, 255, 33, 9, 5, 255, 31, 8, 3, 255, 29, 11, 3, 255, 28, 14, 3, 255, 29, 16, 3, 255, 27, 13, 1, 255, 32, 14, 7, 255, 26, 11, 2, 255, 31, 14, 5, 255, 30, 16, 4, 255, 32, 13, 1, 255, 30, 13, 2, 255, 34, 15, 4, 255, 30, 13, 1, 255, 34, 16, 3, 255, 35, 16, 4, 255, 38, 19, 5, 255, 35, 17, 2, 255, 31, 16, 2, 255, 36, 17, 3, 255, 35, 16, 2, 255, 34, 17, 4, 255, 31, 16, 3, 255, 34, 19, 3, 255, 43, 23, 7, 255, 39, 22, 4, 255, 36, 21, 2, 255, 39, 20, 3, 255, 39, 18, 1, 255, 41, 19, 5, 255, 40, 19, 3, 255, 40, 19, 3, 255, 40, 18, 4, 255, 37, 20, 3, 255, 45, 20, 5, 255, 43, 18, 3, 255, 38, 18, 2, 255, 45, 20, 4, 255, 36, 19, 7, 255, 36, 21, 4, 255, 47, 20, 3, 255, 48, 17, 2, 255, 46, 22, 4, 255, 41, 25, 0, 255, 44, 27, 3, 255, 40, 22, 10, 255, 42, 23, 5, 255, 48, 27, 6, 255, 45, 25, 3, 255, 52, 23, 9, 255, 53, 27, 3, 255, 62, 29, 3, 255, 59, 32, 7, 255, 61, 29, 5, 255, 62, 25, 4, 255, 57, 27, 6, 255, 54, 27, 5, 255, 55, 25, 12, 255, 53, 26, 5, 255, 52, 29, 6, 255, 43, 29, 9, 255, 59, 35, 8, 255, 57, 35, 15, 255, 57, 42, 20, 255, 59, 48, 23, 255, 61, 56, 30, 255, 58, 59, 33, 255, 60, 64, 43, 255, 64, 71, 58, 255, 67, 78, 63, 255, 74, 87, 67, 255, 75, 93, 78, 255, 77, 104, 91, 255, 77, 113, 99, 255, 80, 124, 114, 255, 84, 134, 121, 255, 91, 144, 128, 255, 97, 153, 140, 255, 99, 160, 148, 255, 103, 165, 155, 255, 109, 169, 158, 255, 114, 173, 162, 255, 114, 175, 164, 255, 117, 176, 165, 255, 121, 176, 166, 255, 118, 176, 163, 255, 117, 172, 159, 255, 115, 171, 157, 255, 113, 167, 153, 255, 113, 162, 146, 255, 112, 157, 137, 255, 111, 153, 133, 255, 104, 149, 125, 255, 96, 143, 115, 255, 97, 133, 103, 255, 98, 124, 92, 255, 93, 116, 86, 255, 88, 108, 80, 255, 85, 101, 69, 255, 83, 94, 66, 255, 80, 86, 53, 255, 79, 83, 46, 255, 76, 77, 39, 255, 73, 73, 35, 255, 73, 69, 32, 255, 76, 65, 29, 255, 78, 59, 26, 255, 73, 54, 26, 255, 74, 52, 18, 255, 81, 51, 11, 255, 80, 47, 12, 255, 71, 44, 11, 255, 71, 42, 14, 255, 72, 37, 14, 255, 70, 37, 15, 255, 78, 38, 9, 255, 73, 36, 8, 255, 70, 34, 9, 255, 70, 34, 8, 255, 74, 36, 7, 255, 75, 35, 8, 255, 72, 32, 5, 255, 75, 32, 7, 255, 74, 29, 4, 255, 75, 29, 3, 255, 78, 33, 5, 255, 75, 35, 6, 255, 71, 32, 4, 255, 76, 30, 6, 255, 76, 28, 2, 255, 76, 28, 6, 255, 77, 31, 8, 255, 76, 31, 4, 255, 75, 28, 4, 255, 77, 29, 4, 255, 84, 30, 7, 255, 79, 30, 6, 255, 73, 29, 3, 255, 73, 27, 2, 255, 79, 30, 6, 255, 78, 31, 6, 255, 78, 31, 5, 255, 76, 29, 4, 255, 77, 31, 2, 255, 79, 32, 2, 255, 79, 31, 3, 255, 78, 29, 4, 255, 77, 27, 5, 255, 73, 27, 4, 255, 71, 29, 2, 255, 70, 29, 2, 255, 69, 23, 5, 255, 75, 25, 5, 255, 69, 21, 3, 255, 68, 26, 8, 255, 65, 26, 2, 255, 65, 24, 6, 255, 67, 23, 4, 255, 70, 29, 0, 255, 71, 28, 3, 255, 76, 27, 4, 255, 71, 27, 4, 255, 64, 26, 2, 255, 75, 29, 7, 255, 70, 26, 2, 255, 72, 26, 3, 255, 75, 30, 4, 255, 76, 28, 3, 255, 78, 26, 2, 255, 78, 27, 3, 255, 73, 26, 2, 255, 69, 29, 5, 255, 70, 27, 2, 255, 73, 28, 3, 255, 71, 28, 3, 255, 68, 26, 2, 255, 69, 24, 3, 255, 71, 24, 3, 255, 72, 26, 4, 255, 75, 26, 5, 255, 73, 26, 4, 255, 67, 23, 5, 255, 65, 23, 7, 255, 65, 26, 4, 255, 64, 26, 2, 255, 70, 26, 6, 255, 69, 24, 4, 255, 65, 26, 3, 255, 65, 26, 5, 255, 61, 21, 3, 255, 62, 25, 5, 255, 59, 24, 3, 255, 61, 24, 5, 255, 60, 23, 4, 255, 59, 22, 3, 255, 59, 22, 2, 255, 61, 24, 6, 255, 58, 22, 4, 255, 58, 21, 2, 255, 57, 19, 6, 255, 59, 21, 6, 255, 57, 21, 0, 255, 53, 19, 2, 255, 58, 20, 6, 255, 60, 20, 4, 255, 58, 20, 3, 255, 58, 22, 3, 255, 58, 20, 2, 255, 57, 20, 4, 255, 58, 21, 6, 255, 55, 19, 4, 255, 56, 17, 6, 255, 54, 16, 3, 255, 55, 20, 5, 255, 50, 19, 1, 255, 51, 17, 2, 255, 56, 16, 5, 255, 54, 15, 4, 255, 57, 18, 4, 255, 53, 16, 1, 255, 50, 16, 2, 255, 49, 17, 5, 255, 56, 18, 3, 255, 59, 18, 1, 255, 54, 17, 5, 255, 51, 15, 4, 255, 53, 14, 4, 255, 49, 16, 5, 255, 46, 17, 5, 255, 51, 14, 5, 255, 45, 14, 4, 255, 50, 15, 5, 255, 54, 12, 5, 255, 46, 14, 3, 255, 49, 17, 6, 255, 56, 14, 4, 255, 51, 15, 3, 255, 52, 15, 6, 255, 51, 14, 5, 255, 46, 16, 5, 255, 44, 16, 3, 255, 45, 15, 5, 255, 38, 13, 4, 255, 44, 12, 4, 255, 39, 7, 1, 255, 39, 10, 6, 255, 43, 13, 9, 255, 40, 11, 6, 255, 44, 12, 2, 255, 40, 14, 5, 255, 38, 14, 4, 255, 42, 14, 5, 255, 43, 15, 7, 255, 38, 13, 4, 255, 37, 12, 3, 255, 41, 14, 6, 255, 39, 12, 4, 255, 37, 14, 3, 255, 37, 10, 2, 255, 42, 10, 5, 255, 43, 9, 4, 255, 39, 11, 3, 255, 40, 10, 5, 255, 40, 12, 4, 255, 29, 11, 3, 255, 38, 17, 3, 255, 41, 13, 1, 255, 44, 12, 4, 255, 45, 10, 0, 255, 44, 11, 2, 255, 48, 14, 5, 255, 48, 12, 4, 255, 48, 12, 3, 255, 46, 12, 3, 255, 46, 12, 4, 255, 47, 13, 4, 255, 53, 14, 3, 255, 47, 12, 2, 255, 42, 12, 4, 255, 45, 10, 2, 255, 42, 8, 2, 255, 42, 9, 4, 255, 46, 11, 1, 255, 50, 14, 3, 255, 48, 11, 3, 255, 51, 12, 1, 255, 48, 12, 0, 255, 34, 10, 3, 255, 23, 7, 1, 255, 31, 13, 3, 255, 33, 11, 1, 255, 32, 7, 0, 255, 33, 7, 1, 255, 34, 9, 5, 255, 34, 10, 4, 255, 35, 7, 4, 255, 37, 9, 4, 255, 37, 9, 3, 255, 33, 8, 0, 255, 35, 9, 2, 255, 41, 11, 4, 255, 46, 11, 5, 255, 35, 9, 4, 255, 35, 10, 6, 255, 31, 6, 2, 255, 24, 3, 0, 255, 23, 7, 3, 255, 25, 6, 2, 255, 21, 7, 2, 255, 19, 6, 3, 255, 20, 7, 5, 255, 21, 4, 2, 255, 18, 4, 1, 255, 23, 5, 4, 255, 19, 4, 2, 255, 21, 5, 2, 255, 27, 6, 3, 255, 26, 7, 2, 255, 28, 8, 3, 255, 30, 8, 3, 255, 27, 6, 2, 255, 29, 5, 1, 255, 33, 7, 3, 255, 15, 13, 28, 255, 19, 14, 24, 255, 17, 18, 23, 255, 14, 19, 35, 255, 23, 22, 58, 255, 28, 27, 43, 255, 32, 29, 38, 255, 35, 33, 44, 255, 33, 38, 65, 255, 35, 43, 50, 255, 39, 43, 36, 255, 38, 36, 30, 255, 34, 28, 30, 255, 26, 23, 23, 255, 19, 18, 23, 255, 7, 8, 25, 255, 3, 4, 22, 255, 7, 6, 12, 255, 6, 5, 2, 255, 8, 4, 1, 255, 9, 4, 1, 255, 14, 5, 3, 255, 14, 3, 1, 255, 12, 1, 0, 255, 13, 3, 1, 255, 11, 1, 0, 255, 13, 1, 0, 255, 15, 4, 2, 255, 18, 2, 1, 255, 21, 3, 1, 255, 22, 5, 2, 255, 20, 4, 3, 255, 21, 6, 2, 255, 19, 4, 1, 255, 20, 5, 2, 255, 23, 6, 2, 255, 24, 6, 3, 255, 18, 4, 2, 255, 19, 4, 2, 255, 18, 3, 0, 255, 20, 5, 0, 255, 23, 5, 0, 255, 24, 4, 2, 255, 23, 4, 3, 255, 20, 4, 3, 255, 23, 6, 1, 255, 26, 8, 2, 255, 28, 7, 2, 255, 26, 6, 2, 255, 24, 7, 5, 255, 18, 5, 0, 255, 26, 4, 1, 255, 28, 7, 2, 255, 25, 6, 1, 255, 22, 6, 3, 255, 19, 5, 2, 255, 17, 6, 0, 255, 20, 10, 2, 255, 20, 10, 1, 255, 20, 9, 3, 255, 20, 6, 3, 255, 19, 6, 2, 255, 19, 8, 0, 255, 27, 9, 3, 255, 26, 5, 1, 255, 26, 8, 2, 255, 23, 7, 0, 255, 26, 7, 2, 255, 28, 10, 3, 255, 25, 13, 3, 255, 23, 10, 2, 255, 26, 12, 3, 255, 27, 10, 3, 255, 23, 9, 2, 255, 23, 11, 3, 255, 26, 12, 5, 255, 22, 7, 0, 255, 25, 9, 2, 255, 30, 11, 4, 255, 29, 10, 3, 255, 29, 14, 3, 255, 30, 16, 3, 255, 30, 12, 1, 255, 31, 13, 3, 255, 25, 11, 2, 255, 30, 13, 5, 255, 26, 12, 2, 255, 33, 16, 4, 255, 31, 16, 3, 255, 34, 14, 4, 255, 30, 12, 3, 255, 34, 16, 5, 255, 31, 12, 1, 255, 36, 16, 5, 255, 34, 16, 3, 255, 29, 16, 0, 255, 34, 16, 2, 255, 35, 16, 2, 255, 33, 17, 4, 255, 27, 15, 2, 255, 29, 16, 2, 255, 37, 18, 1, 255, 39, 21, 4, 255, 36, 21, 2, 255, 35, 19, 0, 255, 33, 19, 1, 255, 34, 20, 3, 255, 37, 18, 1, 255, 42, 21, 3, 255, 38, 17, 4, 255, 34, 17, 4, 255, 44, 19, 5, 255, 40, 17, 3, 255, 35, 19, 5, 255, 43, 20, 5, 255, 36, 17, 7, 255, 37, 22, 7, 255, 44, 24, 5, 255, 48, 23, 6, 255, 41, 21, 5, 255, 43, 24, 6, 255, 42, 19, 2, 255, 40, 20, 10, 255, 51, 27, 3, 255, 52, 24, 1, 255, 55, 28, 3, 255, 60, 26, 6, 255, 63, 32, 2, 255, 65, 31, 4, 255, 51, 25, 5, 255, 52, 26, 1, 255, 60, 25, 5, 255, 55, 26, 12, 255, 49, 25, 5, 255, 46, 24, 10, 255, 48, 33, 5, 255, 47, 29, 15, 255, 52, 26, 12, 255, 64, 33, 9, 255, 52, 36, 13, 255, 55, 41, 19, 255, 54, 51, 23, 255, 56, 57, 24, 255, 58, 62, 35, 255, 63, 66, 46, 255, 68, 70, 59, 255, 75, 79, 64, 255, 75, 88, 66, 255, 77, 97, 78, 255, 78, 107, 90, 255, 78, 118, 98, 255, 82, 130, 117, 255, 88, 138, 126, 255, 96, 149, 134, 255, 100, 158, 145, 255, 100, 163, 153, 255, 104, 169, 160, 255, 113, 174, 164, 255, 117, 177, 167, 255, 117, 178, 169, 255, 122, 177, 166, 255, 123, 174, 165, 255, 118, 175, 162, 255, 118, 174, 159, 255, 115, 173, 157, 255, 112, 167, 151, 255, 112, 162, 145, 255, 109, 155, 135, 255, 105, 150, 129, 255, 102, 147, 123, 255, 98, 139, 113, 255, 95, 129, 100, 255, 93, 120, 88, 255, 92, 113, 84, 255, 89, 106, 79, 255, 80, 93, 60, 255, 81, 88, 54, 255, 80, 83, 44, 255, 79, 78, 38, 255, 78, 67, 42, 255, 77, 64, 38, 255, 78, 63, 28, 255, 81, 62, 19, 255, 81, 57, 16, 255, 74, 51, 19, 255, 74, 46, 21, 255, 75, 46, 10, 255, 73, 44, 6, 255, 71, 39, 11, 255, 74, 43, 12, 255, 70, 43, 4, 255, 70, 37, 9, 255, 72, 32, 9, 255, 67, 32, 11, 255, 68, 33, 10, 255, 74, 35, 7, 255, 74, 32, 5, 255, 74, 33, 8, 255, 72, 34, 6, 255, 73, 34, 7, 255, 75, 32, 8, 255, 78, 32, 8, 255, 76, 31, 3, 255, 78, 35, 4, 255, 76, 34, 4, 255, 78, 32, 2, 255, 81, 34, 0, 255, 82, 32, 4, 255, 77, 29, 6, 255, 77, 31, 5, 255, 77, 30, 7, 255, 78, 32, 3, 255, 84, 30, 3, 255, 78, 27, 1, 255, 73, 31, 3, 255, 81, 33, 6, 255, 78, 28, 2, 255, 72, 29, 1, 255, 75, 31, 5, 255, 75, 30, 4, 255, 72, 30, 0, 255, 82, 31, 1, 255, 81, 30, 2, 255, 77, 27, 1, 255, 76, 27, 6, 255, 71, 28, 5, 255, 68, 31, 3, 255, 70, 32, 6, 255, 67, 24, 5, 255, 74, 25, 6, 255, 72, 23, 1, 255, 70, 27, 9, 255, 67, 26, 3, 255, 72, 30, 4, 255, 71, 23, 3, 255, 73, 28, 0, 255, 74, 31, 1, 255, 73, 29, 5, 255, 71, 28, 4, 255, 68, 29, 3, 255, 75, 29, 6, 255, 69, 29, 4, 255, 63, 28, 3, 255, 73, 29, 3, 255, 76, 28, 2, 255, 78, 25, 2, 255, 78, 28, 3, 255, 73, 27, 2, 255, 74, 31, 6, 255, 72, 27, 3, 255, 71, 26, 1, 255, 69, 28, 3, 255, 68, 28, 4, 255, 71, 28, 6, 255, 72, 26, 6, 255, 71, 26, 3, 255, 71, 27, 1, 255, 65, 24, 2, 255, 69, 27, 3, 255, 66, 25, 2, 255, 62, 21, 6, 255, 68, 25, 8, 255, 66, 22, 3, 255, 65, 20, 1, 255, 66, 22, 2, 255, 64, 28, 4, 255, 63, 25, 3, 255, 65, 24, 4, 255, 62, 22, 3, 255, 63, 21, 6, 255, 61, 22, 5, 255, 60, 22, 3, 255, 57, 20, 1, 255, 59, 20, 2, 255, 61, 21, 3, 255, 61, 17, 3, 255, 64, 19, 2, 255, 65, 20, 5, 255, 61, 23, 6, 255, 58, 27, 2, 255, 59, 23, 5, 255, 52, 15, 6, 255, 53, 20, 6, 255, 52, 19, 3, 255, 57, 21, 5, 255, 55, 18, 2, 255, 59, 22, 5, 255, 56, 19, 2, 255, 53, 17, 4, 255, 50, 14, 0, 255, 55, 19, 3, 255, 54, 22, 4, 255, 53, 20, 4, 255, 58, 19, 7, 255, 52, 17, 3, 255, 54, 17, 5, 255, 54, 15, 7, 255, 54, 20, 8, 255, 53, 21, 5, 255, 56, 18, 2, 255, 59, 13, 3, 255, 54, 14, 3, 255, 47, 18, 2, 255, 50, 18, 3, 255, 52, 15, 6, 255, 45, 13, 4, 255, 45, 14, 4, 255, 43, 15, 4, 255, 47, 14, 4, 255, 61, 16, 7, 255, 48, 14, 3, 255, 47, 15, 4, 255, 55, 15, 6, 255, 45, 14, 2, 255, 47, 16, 6, 255, 48, 12, 5, 255, 41, 11, 3, 255, 40, 11, 2, 255, 41, 11, 4, 255, 34, 10, 4, 255, 41, 12, 4, 255, 39, 13, 4, 255, 38, 12, 6, 255, 42, 13, 5, 255, 42, 11, 3, 255, 44, 12, 0, 255, 43, 14, 4, 255, 40, 11, 3, 255, 42, 12, 1, 255, 41, 17, 0, 255, 32, 11, 0, 255, 34, 9, 5, 255, 40, 11, 8, 255, 35, 12, 3, 255, 34, 15, 3, 255, 36, 11, 2, 255, 37, 11, 4, 255, 38, 10, 4, 255, 36, 13, 4, 255, 37, 11, 2, 255, 43, 12, 2, 255, 35, 10, 2, 255, 46, 15, 3, 255, 47, 14, 2, 255, 40, 11, 4, 255, 44, 12, 3, 255, 45, 12, 0, 255, 50, 14, 3, 255, 52, 15, 4, 255, 51, 13, 3, 255, 46, 8, 0, 255, 49, 11, 3, 255, 47, 9, 2, 255, 53, 15, 3, 255, 43, 11, 2, 255, 35, 11, 4, 255, 42, 9, 0, 255, 44, 10, 2, 255, 44, 9, 4, 255, 51, 11, 0, 255, 59, 13, 4, 255, 54, 10, 3, 255, 62, 15, 3, 255, 60, 15, 3, 255, 41, 10, 5, 255, 34, 9, 6, 255, 38, 10, 4, 255, 36, 6, 1, 255, 37, 9, 3, 255, 36, 12, 6, 255, 31, 7, 4, 255, 31, 7, 4, 255, 26, 7, 1, 255, 31, 11, 4, 255, 39, 11, 4, 255, 43, 8, 4, 255, 36, 7, 2, 255, 36, 10, 2, 255, 42, 9, 1, 255, 30, 8, 1, 255, 34, 9, 5, 255, 34, 9, 5, 255, 33, 9, 1, 255, 28, 8, 2, 255, 25, 5, 2, 255, 23, 8, 3, 255, 18, 5, 1, 255, 20, 5, 2, 255, 22, 3, 2, 255, 18, 5, 2, 255, 24, 7, 5, 255, 21, 4, 2, 255, 21, 5, 2, 255, 25, 5, 2, 255, 24, 6, 0, 255, 25, 8, 1, 255, 27, 6, 2, 255, 24, 6, 4, 255, 24, 6, 0, 255, 29, 8, 2, 255];\n\
+\n\
+ var paramArray =[\n\
+ {\"blackPoint\":0,\"fill\":0,\"brightness\":1,\"contrast\":1,\"saturation\":1,\"temperature\":-2000,\"splitPoint\":0,\"shadowsHue\":0.5,\"shadowsSaturation\":0,\"highlightsHue\":0.5,\"highlightsSaturation\":0,\"angle\":0.5,\"fineangle\":0.5},\n\
+ {\"blackPoint\":0,\"fill\":0,\"brightness\":1.626,\"contrast\":1.777,\"saturation\":1,\"temperature\":2000,\"splitPoint\":0,\"shadowsHue\":0.5,\"shadowsSaturation\":0,\"highlightsHue\":0.5,\"highlightsSaturation\":0,\"angle\":0.5,\"fineangle\":0.5},\n\
+ {\"blackPoint\":0.2,\"fill\":0.606,\"brightness\":0.588,\"contrast\":1.916,\"saturation\":1.838,\"temperature\":-1332,\"splitPoint\":0,\"shadowsHue\":0.5,\"shadowsSaturation\":0,\"highlightsHue\":0.5,\"highlightsSaturation\":0,\"angle\":0.5,\"fineangle\":0.5},\n\
+ {\"blackPoint\":0,\"fill\":0,\"brightness\":1,\"contrast\":1,\"saturation\":0,\"temperature\":0,\"splitPoint\":0,\"shadowsHue\":0.5,\"shadowsSaturation\":0,\"highlightsHue\":0.5,\"highlightsSaturation\":0,\"angle\":0.5,\"fineangle\":0.5},\n\
+ {\"blackPoint\":0,\"fill\":0,\"brightness\":1.488,\"contrast\":1.026,\"saturation\":1.61,\"temperature\":0,\"splitPoint\":-0.6619999999999999,\"shadowsHue\":0.5,\"shadowsSaturation\":0.625,\"highlightsHue\":0.166,\"highlightsSaturation\":0,\"angle\":0.5,\"fineangle\":0.5},\n\
+ {\"blackPoint\":0.181,\"fill\":0.622,\"brightness\":0.384,\"contrast\":2,\"saturation\":1.638,\"temperature\":0,\"splitPoint\":-0.6759999999999999,\"shadowsHue\":0.209,\"shadowsSaturation\":0,\"highlightsHue\":0.191,\"highlightsSaturation\":0,\"angle\":0.5,\"fineangle\":0.5}, \n\
+ {\"blackPoint\":0,\"fill\":0,\"brightness\":1,\"contrast\":1,\"saturation\":1,\"temperature\":-2000,\"splitPoint\":0,\"shadowsHue\":0.5,\"shadowsSaturation\":0,\"highlightsHue\":0.5,\"highlightsSaturation\":0,\"angle\":0.5,\"fineangle\":0.5},\n\
+ {\"blackPoint\":0,\"fill\":0,\"brightness\":1.626,\"contrast\":1.777,\"saturation\":1,\"temperature\":2000,\"splitPoint\":0,\"shadowsHue\":0.5,\"shadowsSaturation\":0,\"highlightsHue\":0.5,\"highlightsSaturation\":0,\"angle\":0.5,\"fineangle\":0.5},\n\
+ {\"blackPoint\":0.2,\"fill\":0.606,\"brightness\":0.588,\"contrast\":1.916,\"saturation\":1.838,\"temperature\":-1332,\"splitPoint\":0,\"shadowsHue\":0.5,\"shadowsSaturation\":0,\"highlightsHue\":0.5,\"highlightsSaturation\":0,\"angle\":0.5,\"fineangle\":0.5},\n\
+ {\"blackPoint\":0,\"fill\":0,\"brightness\":1,\"contrast\":1,\"saturation\":0,\"temperature\":0,\"splitPoint\":0,\"shadowsHue\":0.5,\"shadowsSaturation\":0,\"highlightsHue\":0.5,\"highlightsSaturation\":0,\"angle\":0.5,\"fineangle\":0.5},\n\
+ {\"blackPoint\":0,\"fill\":0,\"brightness\":1.488,\"contrast\":1.026,\"saturation\":1.61,\"temperature\":0,\"splitPoint\":-0.6619999999999999,\"shadowsHue\":0.5,\"shadowsSaturation\":0.625,\"highlightsHue\":0.166,\"highlightsSaturation\":0,\"angle\":0.5,\"fineangle\":0.5},\n\
+ {\"blackPoint\":0.181,\"fill\":0.622,\"brightness\":0.384,\"contrast\":2,\"saturation\":1.638,\"temperature\":0,\"splitPoint\":-0.6759999999999999,\"shadowsHue\":0.209,\"shadowsSaturation\":0,\"highlightsHue\":0.191,\"highlightsSaturation\":0,\"angle\":0.5,\"fineangle\":0.5}, \n\
+ {\"blackPoint\":0,\"fill\":0,\"brightness\":1,\"contrast\":1,\"saturation\":1,\"temperature\":-2000,\"splitPoint\":0,\"shadowsHue\":0.5,\"shadowsSaturation\":0,\"highlightsHue\":0.5,\"highlightsSaturation\":0,\"angle\":0.5,\"fineangle\":0.5},\n\
+ {\"blackPoint\":0,\"fill\":0,\"brightness\":1.626,\"contrast\":1.777,\"saturation\":1,\"temperature\":2000,\"splitPoint\":0,\"shadowsHue\":0.5,\"shadowsSaturation\":0,\"highlightsHue\":0.5,\"highlightsSaturation\":0,\"angle\":0.5,\"fineangle\":0.5},\n\
+ {\"blackPoint\":0.2,\"fill\":0.606,\"brightness\":0.588,\"contrast\":1.916,\"saturation\":1.838,\"temperature\":-1332,\"splitPoint\":0,\"shadowsHue\":0.5,\"shadowsSaturation\":0,\"highlightsHue\":0.5,\"highlightsSaturation\":0,\"angle\":0.5,\"fineangle\":0.5},\n\
+ {\"blackPoint\":0,\"fill\":0,\"brightness\":1,\"contrast\":1,\"saturation\":0,\"temperature\":0,\"splitPoint\":0,\"shadowsHue\":0.5,\"shadowsSaturation\":0,\"highlightsHue\":0.5,\"highlightsSaturation\":0,\"angle\":0.5,\"fineangle\":0.5},\n\
+ {\"blackPoint\":0,\"fill\":0,\"brightness\":1.488,\"contrast\":1.026,\"saturation\":1.61,\"temperature\":0,\"splitPoint\":-0.6619999999999999,\"shadowsHue\":0.5,\"shadowsSaturation\":0.625,\"highlightsHue\":0.166,\"highlightsSaturation\":0,\"angle\":0.5,\"fineangle\":0.5},\n\
+ {\"blackPoint\":0.181,\"fill\":0.622,\"brightness\":0.384,\"contrast\":2,\"saturation\":1.638,\"temperature\":0,\"splitPoint\":-0.6759999999999999,\"shadowsHue\":0.209,\"shadowsSaturation\":0,\"highlightsHue\":0.191,\"highlightsSaturation\":0,\"angle\":0.5,\"fineangle\":0.5} \n\
+ ];\n\
+ function FastLog2(x) {\n\
+ return Math.log(x) / Math.LN2;\n\
+ }\n\
+\n\
+ var LOG2_HALF = FastLog2(0.5);\n\
+\n\
+ function FastBias(b, x) {\n\
+ return Math.pow(x, FastLog2(b) / LOG2_HALF);\n\
+ }\n\
+\n\
+ function FastGain(g, x) {\n\
+ return (x < 0.5) ?\n\
+ FastBias(1.0 - g, 2.0 * x) * 0.5 :\n\
+ 1.0 - FastBias(1.0 - g, 2.0 - 2.0 * x) * 0.5;\n\
+ }\n\
+\n\
+ function Clamp(x) {\n\
+ return (x < 0.0) ? 0.0 : ((x > 1.0) ? 1.0 : x);\n\
+ }\n\
+ \n\
+ function ProcessImageData(data, width, height, params) {\n\
+ var saturation = params.saturation;\n\
+ var contrast = params.contrast;\n\
+ var brightness = params.brightness;\n\
+ var blackPoint = params.blackPoint;\n\
+ var fill = params.fill;\n\
+ var temperature = params.temperature;\n\
+ var shadowsHue = params.shadowsHue;\n\
+ var shadowsSaturation = params.shadowsSaturation;\n\
+ var highlightsHue = params.highlightsHue;\n\
+ var highlightsSaturation = params.highlightsSaturation;\n\
+ var splitPoint = params.splitPoint;\n\
+\n\
+ var brightness_a, brightness_b;\n\
+ var oo255 = 1.0 / 255.0;\n\
+\n\
+ // do some adjustments\n\
+ fill *= 0.2;\n\
+ brightness = (brightness - 1.0) * 0.75 + 1.0;\n\
+ if (brightness < 1.0) {\n\
+ brightness_a = brightness;\n\
+ brightness_b = 0.0;\n\
+ } else {\n\
+ brightness_b = brightness - 1.0;\n\
+ brightness_a = 1.0 - brightness_b;\n\
+ }\n\
+ contrast = contrast * 0.5;\n\
+ contrast = (contrast - 0.5) * 0.75 + 0.5;\n\
+ temperature = (temperature / 2000.0) * 0.1;\n\
+ if (temperature > 0.0) temperature *= 2.0;\n\
+ splitPoint = ((splitPoint + 1.0) * 0.5);\n\
+\n\
+ // apply to pixels\n\
+ var sz = width * height;\n\
+ for (var j = 0; j < sz; j++) {\n\
+ var r = data[j*4+0] * oo255;\n\
+ var g = data[j*4+1] * oo255;\n\
+ var b = data[j*4+2] * oo255;\n\
+ // convert RGB to YIQ\n\
+ // this is a less than ideal colorspace;\n\
+ // HSL would probably be better, but more expensive\n\
+ var y = 0.299 * r + 0.587 * g + 0.114 * b;\n\
+ var i = 0.596 * r - 0.275 * g - 0.321 * b;\n\
+ var q = 0.212 * r - 0.523 * g + 0.311 * b;\n\
+ i = i + temperature;\n\
+ q = q - temperature;\n\
+ i = i * saturation;\n\
+ q = q * saturation;\n\
+ y = (1.0 + blackPoint) * y - blackPoint;\n\
+ y = y + fill;\n\
+ y = y * brightness_a + brightness_b;\n\
+ y = FastGain(contrast, Clamp(y));\n\
+\n\
+ if (y < splitPoint) {\n\
+ q = q + (shadowsHue * shadowsSaturation) * (splitPoint - y);\n\
+ } else {\n\
+ i = i + (highlightsHue * highlightsSaturation) * (y - splitPoint);\n\
+ }\n\
+\n\
+ // convert back to RGB for display\n\
+ r = y + 0.956 * i + 0.621 * q;\n\
+ g = y - 0.272 * i - 0.647 * q;\n\
+ b = y - 1.105 * i + 1.702 * q;\n\
+\n\
+ // clamping is \"free\" as part of the ImageData object\n\
+ data[j*4+0] = r * 255.0;\n\
+ data[j*4+1] = g * 255.0;\n\
+ data[j*4+2] = b * 255.0;\n\
+ }\n\
+ \n\
+ return data;\n\
+ }\n\
+\n\
+\n\
+TalosContentProfiler.subtestStart('imaging-darkroom', true).then(() => {\n\
+ var _sunSpiderStartDate = new Date();\n\
+\n\
+ var width = 400, height = 267;\n\
+ for (var index = 0; index < paramArray.length; index++) {\n\
+ var data = squidImageData;\n\
+ data = ProcessImageData(data, width, height, paramArray[index]);\n\
+ }\n\
+\n\
+ var _sunSpiderInterval = new Date() - _sunSpiderStartDate;\n\
+ TalosContentProfiler.subtestEnd('imagine-darkroom', true).then(() => {\n\
+ record(_sunSpiderInterval);\n\
+ });\n\
+\n\
+});\n\
+</script>\n\
+\n\
+\n\
+</body>\n\
+</html>\n\
+", "<!DOCTYPE html>\n\
+<head>\n\
+\n\
+<meta charset=utf8>\n\
+\n\
+<!--\n\
+ Copyright (C) 2007 Apple Inc. All rights reserved.\n\
+\n\
+ Redistribution and use in source and binary forms, with or without\n\
+ modification, are permitted provided that the following conditions\n\
+ are met:\n\
+ 1. Redistributions of source code must retain the above copyright\n\
+ notice, this list of conditions and the following disclaimer.\n\
+ 2. Redistributions in binary form must reproduce the above copyright\n\
+ notice, this list of conditions and the following disclaimer in the\n\
+ documentation and/or other materials provided with the distribution.\n\
+\n\
+ THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY\n\
+ EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n\
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n\
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR\n\
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n\
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n\
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n\
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n\
+ OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n\
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \n\
+-->\n\
+\n\
+<title>SunSpider imaging-desaturate</title>\n\
+<link rel=\"stylesheet\" href=\"../kraken.css\">\n\
+</head>\n\
+\n\
+<body>\n\
+<h3>imaging-desaturate</h3>\n\
+<div id=\"console\">\n\
+</div>\n\
+<script>\n\
+var TalosContentProfiler = parent.TalosContentProfiler;\n\
+function record(time) {\n\
+ document.getElementById(\"console\").innerHTML = time + \"ms\";\n\
+ if (window.parent) {\n\
+ parent.recordResult(time);\n\
+ }\n\
+}\n\
+\n\
+var squidImageData = [8, 7, 21, 255, 42, 39, 79, 255, 74, 64, 104, 255, 96, 83, 136, 255, 98, 82, 134, 255, 68, 63, 102, 255, 22, 29, 66, 255, 10, 22, 44, 255, 9, 27, 43, 255, 7, 23, 38, 255, 8, 18, 25, 255, 5, 12, 19, 255, 2, 7, 12, 255, 4, 1, 7, 255, 16, 10, 34, 255, 22, 22, 57, 255, 29, 26, 74, 255, 36, 33, 74, 255, 67, 17, 35, 255, 125, 25, 24, 255, 155, 37, 22, 255, 146, 30, 12, 255, 111, 14, 3, 255, 89, 10, 12, 255, 74, 9, 20, 255, 34, 5, 7, 255, 3, 2, 6, 255, 0, 2, 3, 255, 5, 1, 0, 255, 4, 3, 1, 255, 3, 2, 2, 255, 1, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 2, 255, 1, 1, 3, 255, 1, 1, 3, 255, 1, 1, 3, 255, 2, 1, 6, 255, 2, 1, 7, 255, 2, 1, 6, 255, 2, 1, 5, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 2, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 2, 2, 1, 255, 4, 4, 4, 255, 3, 4, 6, 255, 1, 3, 6, 255, 5, 4, 8, 255, 3, 1, 8, 255, 1, 0, 6, 255, 0, 0, 2, 255, 1, 2, 0, 255, 2, 0, 0, 255, 0, 1, 4, 255, 3, 2, 23, 255, 4, 3, 43, 255, 4, 4, 41, 255, 2, 4, 24, 255, 0, 2, 11, 255, 0, 0, 4, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 2, 255, 0, 0, 0, 255, 6, 5, 6, 255, 21, 27, 51, 255, 6, 28, 68, 255, 0, 9, 20, 255, 3, 0, 7, 255, 4, 2, 13, 255, 1, 1, 3, 255, 1, 0, 4, 255, 2, 2, 4, 255, 1, 1, 6, 255, 2, 1, 17, 255, 1, 3, 23, 255, 2, 4, 25, 255, 2, 2, 18, 255, 1, 1, 11, 255, 3, 2, 12, 255, 2, 3, 0, 255, 0, 0, 9, 255, 28, 27, 59, 255, 99, 98, 153, 255, 134, 145, 174, 255, 95, 93, 105, 255, 76, 70, 74, 255, 55, 51, 49, 255, 15, 15, 7, 255, 24, 17, 29, 255, 87, 71, 96, 255, 117, 102, 120, 255, 99, 88, 111, 255, 76, 82, 123, 255, 78, 84, 127, 255, 49, 40, 36, 255, 12, 7, 7, 255, 11, 8, 6, 255, 12, 7, 7, 255, 19, 8, 10, 255, 23, 10, 9, 255, 21, 11, 8, 255, 22, 10, 13, 255, 20, 11, 11, 255, 22, 14, 12, 255, 26, 14, 13, 255, 27, 13, 12, 255, 25, 11, 3, 255, 26, 17, 8, 255, 25, 19, 16, 255, 27, 15, 10, 255, 29, 18, 15, 255, 24, 14, 10, 255, 44, 19, 15, 255, 42, 24, 7, 255, 48, 26, 10, 255, 54, 31, 5, 255, 54, 30, 19, 255, 73, 45, 32, 255, 93, 57, 22, 255, 87, 47, 22, 255, 72, 41, 12, 255, 76, 47, 7, 255, 78, 49, 12, 255, 80, 51, 19, 255, 85, 51, 16, 255, 89, 51, 19, 255, 96, 61, 9, 255, 99, 62, 7, 255, 96, 56, 14, 255, 112, 64, 17, 255, 126, 83, 10, 255, 126, 76, 17, 255, 116, 72, 13, 255, 120, 73, 10, 255, 121, 71, 10, 255, 122, 74, 16, 255, 116, 69, 13, 255, 113, 68, 13, 255, 114, 68, 14, 255, 105, 61, 10, 255, 99, 55, 5, 255, 97, 56, 12, 255, 93, 56, 12, 255, 91, 52, 3, 255, 93, 57, 15, 255, 88, 51, 15, 255, 81, 49, 16, 255, 92, 49, 13, 255, 84, 49, 8, 255, 84, 43, 17, 255, 88, 40, 15, 255, 78, 41, 11, 255, 73, 39, 16, 255, 78, 44, 15, 255, 82, 40, 10, 255, 83, 39, 11, 255, 79, 42, 9, 255, 84, 45, 6, 255, 75, 41, 15, 255, 69, 41, 13, 255, 81, 36, 16, 255, 73, 38, 12, 255, 75, 40, 13, 255, 76, 37, 13, 255, 70, 34, 14, 255, 74, 39, 18, 255, 76, 38, 11, 255, 71, 37, 10, 255, 65, 37, 18, 255, 70, 38, 15, 255, 74, 39, 20, 255, 72, 36, 17, 255, 69, 36, 16, 255, 67, 39, 18, 255, 68, 40, 20, 255, 66, 39, 16, 255, 69, 43, 21, 255, 76, 44, 28, 255, 84, 50, 18, 255, 78, 46, 15, 255, 72, 46, 38, 255, 71, 49, 23, 255, 74, 53, 30, 255, 72, 48, 27, 255, 77, 53, 28, 255, 72, 52, 37, 255, 71, 53, 38, 255, 72, 57, 31, 255, 74, 61, 30, 255, 74, 65, 36, 255, 71, 61, 45, 255, 74, 63, 48, 255, 73, 65, 44, 255, 69, 69, 46, 255, 75, 70, 58, 255, 78, 77, 44, 255, 79, 75, 48, 255, 86, 75, 60, 255, 94, 80, 59, 255, 100, 81, 67, 255, 101, 78, 57, 255, 102, 84, 56, 255, 105, 87, 67, 255, 108, 88, 79, 255, 112, 87, 70, 255, 116, 90, 65, 255, 102, 85, 69, 255, 104, 89, 69, 255, 109, 92, 66, 255, 108, 95, 65, 255, 110, 95, 65, 255, 110, 96, 66, 255, 109, 97, 74, 255, 108, 97, 71, 255, 110, 100, 70, 255, 109, 96, 74, 255, 112, 97, 73, 255, 112, 99, 75, 255, 111, 102, 74, 255, 108, 101, 70, 255, 111, 104, 79, 255, 106, 101, 81, 255, 109, 106, 82, 255, 111, 107, 82, 255, 113, 107, 83, 255, 113, 107, 81, 255, 116, 111, 86, 255, 118, 113, 86, 255, 119, 117, 86, 255, 120, 118, 94, 255, 118, 124, 98, 255, 119, 135, 98, 255, 134, 151, 122, 255, 129, 142, 119, 255, 131, 142, 111, 255, 135, 145, 114, 255, 135, 148, 116, 255, 137, 152, 118, 255, 139, 155, 119, 255, 142, 156, 121, 255, 145, 157, 123, 255, 147, 156, 125, 255, 145, 157, 119, 255, 146, 156, 119, 255, 150, 157, 118, 255, 147, 153, 110, 255, 142, 149, 106, 255, 134, 145, 101, 255, 125, 140, 98, 255, 122, 138, 94, 255, 119, 126, 88, 255, 128, 124, 82, 255, 132, 122, 71, 255, 120, 111, 71, 255, 115, 111, 70, 255, 116, 108, 59, 255, 116, 102, 56, 255, 112, 93, 53, 255, 113, 92, 66, 255, 114, 93, 52, 255, 112, 89, 49, 255, 103, 91, 58, 255, 136, 120, 75, 255, 124, 91, 48, 255, 117, 78, 30, 255, 117, 82, 40, 255, 118, 81, 33, 255, 119, 79, 20, 255, 114, 73, 39, 255, 119, 75, 26, 255, 120, 73, 30, 255, 119, 78, 22, 255, 115, 76, 23, 255, 113, 77, 23, 255, 100, 66, 25, 255, 101, 68, 23, 255, 103, 71, 21, 255, 102, 69, 16, 255, 106, 70, 16, 255, 107, 69, 13, 255, 108, 69, 17, 255, 111, 67, 11, 255, 125, 69, 20, 255, 132, 73, 21, 255, 131, 77, 8, 255, 135, 75, 16, 255, 130, 67, 16, 255, 123, 66, 17, 255, 118, 64, 8, 255, 111, 59, 12, 255, 110, 60, 18, 255, 105, 59, 14, 255, 104, 58, 14, 255, 102, 55, 12, 255, 103, 56, 13, 255, 106, 58, 15, 255, 107, 58, 17, 255, 103, 54, 14, 255, 101, 51, 11, 255, 107, 54, 12, 255, 106, 55, 12, 255, 109, 60, 14, 255, 107, 59, 6, 255, 112, 59, 8, 255, 114, 59, 13, 255, 115, 65, 10, 255, 117, 66, 8, 255, 118, 67, 10, 255, 128, 73, 13, 255, 148, 81, 12, 255, 153, 82, 16, 255, 138, 73, 18, 255, 128, 68, 17, 255, 126, 64, 11, 255, 129, 62, 12, 255, 119, 60, 11, 255, 117, 60, 14, 255, 111, 58, 13, 255, 105, 60, 6, 255, 110, 60, 5, 255, 107, 52, 18, 255, 103, 51, 13, 255, 101, 54, 7, 255, 100, 52, 11, 255, 104, 52, 19, 255, 95, 52, 8, 255, 93, 54, 5, 255, 88, 46, 11, 255, 92, 49, 17, 255, 94, 48, 15, 255, 98, 49, 4, 255, 99, 47, 11, 255, 92, 45, 14, 255, 90, 42, 9, 255, 90, 41, 13, 255, 92, 43, 14, 255, 90, 44, 9, 255, 85, 37, 12, 255, 89, 41, 12, 255, 87, 38, 22, 255, 85, 38, 9, 255, 86, 38, 7, 255, 90, 40, 14, 255, 91, 42, 3, 255, 94, 42, 6, 255, 86, 41, 5, 255, 91, 43, 9, 255, 94, 42, 9, 255, 92, 33, 7, 255, 88, 36, 10, 255, 95, 39, 14, 255, 92, 36, 7, 255, 87, 37, 5, 255, 88, 41, 4, 255, 2, 2, 6, 255, 41, 36, 70, 255, 85, 77, 125, 255, 85, 89, 133, 255, 59, 76, 115, 255, 35, 43, 75, 255, 25, 27, 63, 255, 19, 33, 40, 255, 10, 33, 28, 255, 8, 24, 28, 255, 14, 21, 19, 255, 12, 16, 15, 255, 12, 14, 15, 255, 21, 14, 9, 255, 19, 20, 26, 255, 13, 24, 52, 255, 36, 28, 70, 255, 14, 27, 45, 255, 50, 13, 24, 255, 113, 17, 15, 255, 144, 32, 22, 255, 141, 32, 14, 255, 119, 12, 7, 255, 89, 10, 2, 255, 86, 11, 9, 255, 56, 9, 9, 255, 17, 3, 4, 255, 2, 3, 1, 255, 0, 3, 0, 255, 1, 3, 2, 255, 3, 0, 10, 255, 2, 4, 6, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 3, 255, 1, 0, 5, 255, 2, 1, 8, 255, 3, 2, 8, 255, 2, 1, 6, 255, 1, 0, 5, 255, 0, 0, 3, 255, 0, 0, 2, 255, 1, 1, 2, 255, 1, 1, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 4, 255, 0, 0, 6, 255, 2, 0, 6, 255, 1, 1, 3, 255, 2, 1, 4, 255, 0, 0, 8, 255, 1, 1, 3, 255, 2, 0, 0, 255, 1, 1, 6, 255, 0, 1, 20, 255, 3, 1, 42, 255, 4, 2, 46, 255, 3, 2, 31, 255, 0, 2, 7, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 3, 255, 1, 0, 1, 255, 6, 9, 14, 255, 20, 37, 80, 255, 9, 21, 65, 255, 0, 0, 18, 255, 1, 5, 13, 255, 5, 3, 14, 255, 0, 0, 4, 255, 1, 3, 5, 255, 2, 3, 12, 255, 3, 3, 14, 255, 3, 3, 13, 255, 0, 1, 11, 255, 3, 3, 14, 255, 2, 1, 2, 255, 0, 0, 2, 255, 15, 15, 61, 255, 86, 88, 145, 255, 143, 138, 181, 255, 113, 121, 131, 255, 71, 72, 78, 255, 55, 47, 41, 255, 20, 21, 8, 255, 22, 14, 27, 255, 85, 68, 82, 255, 118, 103, 116, 255, 103, 102, 135, 255, 95, 80, 118, 255, 81, 62, 83, 255, 55, 54, 41, 255, 17, 13, 4, 255, 5, 0, 3, 255, 14, 6, 7, 255, 14, 8, 8, 255, 12, 6, 5, 255, 20, 10, 11, 255, 23, 11, 11, 255, 20, 9, 10, 255, 24, 13, 12, 255, 23, 14, 12, 255, 21, 13, 11, 255, 22, 13, 12, 255, 26, 16, 20, 255, 24, 16, 15, 255, 24, 16, 9, 255, 24, 15, 13, 255, 27, 19, 12, 255, 33, 23, 10, 255, 42, 22, 14, 255, 53, 22, 16, 255, 51, 29, 12, 255, 58, 30, 21, 255, 73, 50, 18, 255, 87, 55, 23, 255, 89, 49, 18, 255, 78, 44, 2, 255, 69, 38, 7, 255, 75, 45, 7, 255, 83, 49, 9, 255, 83, 47, 16, 255, 88, 50, 18, 255, 92, 51, 12, 255, 98, 57, 2, 255, 105, 64, 11, 255, 101, 64, 12, 255, 96, 60, 11, 255, 108, 71, 3, 255, 116, 81, 8, 255, 111, 67, 10, 255, 105, 61, 14, 255, 111, 63, 14, 255, 111, 63, 7, 255, 113, 67, 6, 255, 110, 66, 3, 255, 105, 61, 5, 255, 99, 55, 10, 255, 93, 50, 9, 255, 93, 54, 14, 255, 95, 54, 15, 255, 97, 50, 21, 255, 99, 53, 13, 255, 103, 56, 4, 255, 101, 61, 7, 255, 103, 57, 10, 255, 106, 49, 14, 255, 103, 50, 16, 255, 95, 52, 16, 255, 91, 53, 9, 255, 88, 50, 10, 255, 88, 52, 12, 255, 92, 48, 16, 255, 95, 50, 7, 255, 95, 54, 7, 255, 93, 51, 12, 255, 81, 41, 9, 255, 83, 38, 15, 255, 76, 41, 5, 255, 79, 41, 11, 255, 78, 34, 22, 255, 74, 35, 15, 255, 79, 39, 6, 255, 79, 41, 4, 255, 78, 39, 9, 255, 78, 36, 17, 255, 75, 36, 10, 255, 73, 38, 11, 255, 75, 40, 18, 255, 72, 35, 17, 255, 75, 40, 14, 255, 73, 38, 19, 255, 69, 36, 15, 255, 67, 39, 22, 255, 66, 39, 15, 255, 70, 44, 16, 255, 70, 45, 21, 255, 80, 47, 26, 255, 78, 47, 26, 255, 79, 48, 16, 255, 71, 50, 26, 255, 68, 51, 27, 255, 64, 51, 39, 255, 67, 55, 26, 255, 69, 56, 28, 255, 70, 60, 36, 255, 69, 60, 34, 255, 70, 63, 32, 255, 68, 63, 33, 255, 66, 61, 44, 255, 73, 68, 47, 255, 74, 68, 42, 255, 70, 66, 45, 255, 79, 68, 50, 255, 81, 76, 40, 255, 82, 71, 58, 255, 77, 72, 55, 255, 85, 77, 52, 255, 97, 79, 63, 255, 104, 82, 67, 255, 106, 84, 64, 255, 108, 85, 63, 255, 108, 86, 65, 255, 103, 83, 62, 255, 107, 85, 64, 255, 102, 86, 60, 255, 104, 90, 58, 255, 105, 85, 62, 255, 109, 91, 65, 255, 106, 92, 60, 255, 110, 92, 63, 255, 116, 98, 57, 255, 113, 96, 61, 255, 110, 93, 66, 255, 105, 94, 66, 255, 113, 99, 67, 255, 115, 97, 63, 255, 111, 99, 66, 255, 111, 98, 68, 255, 112, 100, 71, 255, 110, 98, 71, 255, 112, 104, 72, 255, 112, 104, 78, 255, 115, 104, 88, 255, 116, 108, 74, 255, 121, 115, 74, 255, 121, 114, 84, 255, 121, 117, 78, 255, 124, 120, 80, 255, 122, 124, 88, 255, 114, 128, 93, 255, 128, 146, 115, 255, 133, 145, 117, 255, 132, 139, 105, 255, 137, 144, 107, 255, 137, 148, 110, 255, 136, 150, 111, 255, 139, 153, 115, 255, 139, 152, 115, 255, 143, 155, 118, 255, 148, 158, 121, 255, 147, 157, 117, 255, 141, 151, 109, 255, 149, 156, 111, 255, 152, 156, 107, 255, 141, 146, 96, 255, 134, 144, 95, 255, 131, 139, 96, 255, 125, 135, 92, 255, 114, 127, 82, 255, 122, 123, 74, 255, 136, 122, 68, 255, 126, 113, 65, 255, 116, 109, 62, 255, 122, 107, 62, 255, 120, 99, 59, 255, 120, 99, 45, 255, 115, 91, 52, 255, 116, 88, 60, 255, 119, 90, 50, 255, 100, 83, 41, 255, 132, 115, 65, 255, 131, 100, 53, 255, 115, 78, 24, 255, 115, 83, 30, 255, 115, 79, 41, 255, 117, 79, 22, 255, 116, 79, 26, 255, 117, 77, 26, 255, 117, 76, 32, 255, 116, 74, 25, 255, 117, 71, 24, 255, 119, 70, 23, 255, 104, 67, 24, 255, 100, 63, 27, 255, 103, 66, 31, 255, 106, 67, 25, 255, 109, 69, 20, 255, 108, 66, 17, 255, 113, 67, 12, 255, 110, 71, 14, 255, 118, 69, 20, 255, 125, 72, 22, 255, 133, 80, 14, 255, 136, 76, 9, 255, 120, 69, 9, 255, 119, 64, 11, 255, 120, 65, 22, 255, 114, 60, 22, 255, 107, 58, 13, 255, 103, 58, 9, 255, 106, 59, 13, 255, 104, 57, 11, 255, 103, 56, 9, 255, 104, 56, 12, 255, 106, 58, 15, 255, 104, 55, 13, 255, 108, 56, 14, 255, 112, 59, 14, 255, 108, 57, 10, 255, 109, 58, 16, 255, 112, 59, 15, 255, 114, 58, 12, 255, 116, 59, 12, 255, 117, 63, 5, 255, 122, 63, 9, 255, 123, 65, 15, 255, 135, 74, 13, 255, 150, 82, 10, 255, 151, 76, 12, 255, 143, 73, 10, 255, 133, 71, 8, 255, 125, 66, 8, 255, 126, 64, 13, 255, 121, 61, 11, 255, 121, 64, 7, 255, 116, 61, 3, 255, 114, 61, 8, 255, 110, 58, 9, 255, 109, 56, 14, 255, 107, 56, 11, 255, 102, 55, 5, 255, 104, 57, 7, 255, 106, 55, 10, 255, 92, 46, 20, 255, 94, 50, 11, 255, 98, 52, 2, 255, 98, 49, 9, 255, 96, 47, 13, 255, 90, 44, 9, 255, 91, 49, 9, 255, 92, 53, 6, 255, 87, 46, 7, 255, 85, 41, 12, 255, 91, 46, 9, 255, 91, 43, 7, 255, 92, 43, 7, 255, 86, 44, 5, 255, 86, 42, 6, 255, 88, 43, 8, 255, 91, 42, 9, 255, 89, 37, 18, 255, 92, 37, 19, 255, 94, 43, 8, 255, 87, 41, 10, 255, 89, 41, 10, 255, 95, 45, 3, 255, 93, 44, 7, 255, 91, 42, 10, 255, 94, 40, 5, 255, 89, 38, 8, 255, 86, 39, 7, 255, 88, 41, 8, 255, 0, 0, 1, 255, 20, 17, 25, 255, 51, 55, 97, 255, 49, 60, 102, 255, 26, 41, 68, 255, 5, 18, 44, 255, 14, 21, 53, 255, 19, 33, 37, 255, 18, 36, 34, 255, 19, 32, 45, 255, 23, 28, 40, 255, 18, 17, 24, 255, 15, 15, 22, 255, 21, 19, 19, 255, 27, 18, 13, 255, 25, 17, 32, 255, 20, 20, 25, 255, 22, 24, 27, 255, 15, 23, 31, 255, 69, 17, 23, 255, 133, 20, 16, 255, 144, 31, 9, 255, 111, 15, 7, 255, 87, 9, 6, 255, 102, 10, 4, 255, 80, 12, 1, 255, 68, 9, 12, 255, 56, 3, 20, 255, 18, 2, 5, 255, 0, 1, 5, 255, 3, 0, 5, 255, 1, 3, 3, 255, 2, 2, 2, 255, 2, 2, 1, 255, 0, 0, 0, 255, 0, 0, 2, 255, 0, 0, 5, 255, 3, 2, 9, 255, 2, 1, 8, 255, 1, 0, 6, 255, 2, 1, 6, 255, 2, 1, 6, 255, 1, 1, 4, 255, 0, 0, 3, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 2, 255, 1, 1, 3, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 3, 2, 8, 255, 4, 2, 12, 255, 1, 0, 5, 255, 0, 0, 0, 255, 0, 1, 1, 255, 1, 0, 0, 255, 0, 0, 0, 255, 0, 1, 5, 255, 1, 3, 24, 255, 3, 3, 44, 255, 1, 3, 35, 255, 1, 3, 11, 255, 0, 1, 1, 255, 1, 0, 1, 255, 1, 0, 1, 255, 2, 0, 1, 255, 1, 0, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 0, 3, 255, 3, 1, 5, 255, 0, 0, 0, 255, 12, 17, 31, 255, 28, 35, 75, 255, 5, 18, 42, 255, 0, 5, 11, 255, 4, 0, 16, 255, 3, 2, 11, 255, 0, 0, 10, 255, 1, 2, 12, 255, 0, 1, 7, 255, 2, 2, 13, 255, 2, 1, 7, 255, 0, 0, 0, 255, 6, 2, 42, 255, 74, 78, 148, 255, 113, 124, 184, 255, 120, 120, 133, 255, 86, 83, 73, 255, 51, 44, 43, 255, 18, 19, 20, 255, 21, 14, 27, 255, 73, 61, 81, 255, 114, 107, 122, 255, 105, 101, 147, 255, 73, 80, 175, 255, 77, 72, 110, 255, 58, 41, 59, 255, 18, 11, 12, 255, 4, 0, 3, 255, 10, 6, 5, 255, 20, 9, 15, 255, 18, 8, 10, 255, 14, 6, 5, 255, 18, 12, 8, 255, 20, 12, 9, 255, 24, 13, 13, 255, 26, 13, 14, 255, 25, 15, 10, 255, 25, 15, 13, 255, 24, 15, 11, 255, 25, 16, 8, 255, 25, 13, 13, 255, 26, 13, 9, 255, 30, 18, 8, 255, 33, 19, 18, 255, 42, 28, 11, 255, 41, 27, 3, 255, 47, 26, 13, 255, 67, 39, 11, 255, 78, 50, 24, 255, 83, 51, 20, 255, 76, 46, 16, 255, 64, 32, 11, 255, 66, 30, 9, 255, 69, 39, 9, 255, 73, 43, 11, 255, 75, 40, 10, 255, 72, 44, 19, 255, 78, 45, 13, 255, 88, 44, 2, 255, 92, 53, 15, 255, 99, 65, 10, 255, 110, 66, 16, 255, 106, 65, 11, 255, 102, 63, 4, 255, 103, 65, 3, 255, 106, 64, 17, 255, 102, 57, 5, 255, 98, 51, 11, 255, 101, 56, 16, 255, 99, 55, 10, 255, 101, 55, 9, 255, 100, 56, 11, 255, 98, 54, 14, 255, 96, 53, 19, 255, 100, 54, 20, 255, 97, 59, 9, 255, 100, 58, 8, 255, 100, 59, 10, 255, 106, 60, 14, 255, 117, 64, 14, 255, 121, 69, 8, 255, 126, 69, 10, 255, 127, 74, 9, 255, 131, 70, 12, 255, 125, 68, 12, 255, 132, 72, 5, 255, 139, 75, 3, 255, 126, 75, 5, 255, 108, 57, 15, 255, 101, 57, 11, 255, 94, 54, 9, 255, 87, 45, 16, 255, 73, 38, 8, 255, 79, 38, 13, 255, 75, 33, 18, 255, 69, 37, 10, 255, 73, 39, 7, 255, 71, 34, 18, 255, 77, 37, 16, 255, 75, 42, 11, 255, 73, 39, 8, 255, 72, 36, 19, 255, 75, 39, 11, 255, 77, 41, 7, 255, 70, 40, 14, 255, 70, 40, 16, 255, 70, 43, 6, 255, 67, 41, 16, 255, 69, 38, 17, 255, 67, 40, 20, 255, 73, 43, 22, 255, 75, 41, 18, 255, 72, 45, 19, 255, 70, 46, 22, 255, 76, 49, 30, 255, 79, 51, 28, 255, 80, 54, 28, 255, 70, 52, 30, 255, 63, 53, 38, 255, 71, 56, 26, 255, 76, 59, 25, 255, 74, 59, 39, 255, 71, 57, 42, 255, 71, 61, 42, 255, 66, 62, 36, 255, 71, 63, 40, 255, 84, 68, 31, 255, 80, 67, 40, 255, 71, 67, 42, 255, 75, 70, 42, 255, 78, 75, 43, 255, 82, 76, 48, 255, 84, 73, 47, 255, 86, 74, 47, 255, 92, 76, 60, 255, 103, 83, 70, 255, 102, 81, 62, 255, 101, 82, 66, 255, 103, 83, 70, 255, 106, 85, 62, 255, 106, 85, 62, 255, 97, 82, 57, 255, 101, 87, 55, 255, 106, 86, 59, 255, 110, 85, 65, 255, 114, 92, 62, 255, 117, 95, 64, 255, 114, 96, 61, 255, 111, 94, 61, 255, 111, 93, 70, 255, 107, 90, 63, 255, 114, 95, 62, 255, 113, 94, 59, 255, 111, 96, 63, 255, 110, 96, 70, 255, 112, 97, 69, 255, 113, 97, 68, 255, 114, 100, 73, 255, 113, 103, 72, 255, 114, 101, 75, 255, 117, 104, 82, 255, 121, 109, 81, 255, 120, 112, 73, 255, 122, 114, 78, 255, 125, 122, 76, 255, 125, 125, 82, 255, 120, 123, 94, 255, 127, 134, 104, 255, 137, 147, 112, 255, 128, 140, 103, 255, 134, 144, 99, 255, 137, 145, 101, 255, 137, 147, 104, 255, 141, 152, 110, 255, 141, 151, 110, 255, 141, 151, 109, 255, 144, 152, 110, 255, 147, 154, 110, 255, 146, 152, 104, 255, 148, 152, 100, 255, 150, 152, 96, 255, 145, 147, 92, 255, 136, 141, 90, 255, 126, 135, 83, 255, 124, 134, 81, 255, 123, 129, 79, 255, 127, 122, 73, 255, 131, 116, 73, 255, 122, 109, 75, 255, 116, 107, 68, 255, 117, 107, 45, 255, 120, 102, 64, 255, 118, 101, 41, 255, 117, 95, 45, 255, 115, 90, 55, 255, 119, 93, 37, 255, 107, 90, 23, 255, 122, 105, 49, 255, 136, 106, 66, 255, 115, 78, 34, 255, 112, 80, 31, 255, 112, 78, 35, 255, 118, 75, 35, 255, 121, 77, 29, 255, 117, 75, 20, 255, 119, 75, 27, 255, 118, 69, 33, 255, 127, 71, 29, 255, 131, 73, 12, 255, 113, 72, 24, 255, 105, 64, 22, 255, 107, 68, 24, 255, 110, 69, 19, 255, 111, 68, 14, 255, 115, 67, 19, 255, 117, 67, 20, 255, 117, 74, 17, 255, 123, 72, 11, 255, 125, 71, 17, 255, 131, 78, 26, 255, 136, 73, 18, 255, 127, 72, 17, 255, 122, 67, 20, 255, 117, 63, 19, 255, 111, 61, 10, 255, 108, 63, 8, 255, 106, 61, 14, 255, 106, 59, 13, 255, 107, 57, 11, 255, 103, 54, 9, 255, 102, 54, 10, 255, 106, 57, 11, 255, 106, 54, 9, 255, 108, 55, 11, 255, 109, 58, 13, 255, 106, 57, 13, 255, 106, 58, 14, 255, 110, 60, 8, 255, 110, 60, 6, 255, 112, 61, 9, 255, 113, 62, 8, 255, 122, 62, 6, 255, 123, 68, 4, 255, 131, 72, 7, 255, 145, 79, 13, 255, 149, 79, 12, 255, 146, 76, 8, 255, 135, 70, 7, 255, 127, 67, 17, 255, 125, 63, 22, 255, 123, 59, 16, 255, 119, 62, 14, 255, 111, 56, 8, 255, 115, 56, 12, 255, 112, 60, 12, 255, 112, 60, 5, 255, 109, 57, 6, 255, 105, 55, 8, 255, 103, 57, 5, 255, 106, 57, 10, 255, 100, 49, 11, 255, 97, 49, 12, 255, 96, 50, 10, 255, 94, 47, 10, 255, 95, 48, 6, 255, 92, 46, 9, 255, 95, 49, 13, 255, 95, 49, 11, 255, 92, 46, 9, 255, 89, 46, 9, 255, 86, 42, 7, 255, 88, 42, 7, 255, 89, 41, 11, 255, 89, 45, 11, 255, 83, 37, 15, 255, 90, 44, 13, 255, 90, 43, 2, 255, 90, 39, 8, 255, 97, 44, 16, 255, 92, 40, 9, 255, 91, 40, 16, 255, 95, 43, 13, 255, 96, 43, 6, 255, 86, 43, 2, 255, 92, 42, 6, 255, 97, 40, 7, 255, 88, 44, 4, 255, 89, 40, 4, 255, 95, 39, 6, 255, 2, 1, 1, 255, 1, 3, 0, 255, 9, 19, 32, 255, 29, 30, 57, 255, 26, 25, 46, 255, 14, 23, 44, 255, 26, 38, 55, 255, 30, 40, 45, 255, 39, 48, 46, 255, 34, 47, 47, 255, 19, 31, 38, 255, 17, 21, 34, 255, 23, 21, 27, 255, 25, 19, 17, 255, 22, 10, 8, 255, 15, 5, 11, 255, 17, 9, 7, 255, 30, 31, 34, 255, 21, 35, 47, 255, 22, 23, 14, 255, 84, 15, 10, 255, 92, 18, 10, 255, 83, 11, 6, 255, 105, 8, 4, 255, 112, 18, 10, 255, 111, 19, 7, 255, 116, 19, 8, 255, 116, 22, 19, 255, 72, 13, 13, 255, 31, 5, 1, 255, 11, 2, 0, 255, 0, 1, 0, 255, 3, 2, 7, 255, 3, 2, 5, 255, 1, 1, 2, 255, 0, 0, 0, 255, 0, 0, 2, 255, 1, 1, 5, 255, 2, 1, 9, 255, 2, 1, 9, 255, 2, 1, 7, 255, 2, 1, 5, 255, 1, 1, 2, 255, 1, 1, 1, 255, 1, 1, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 1, 1, 3, 255, 0, 0, 2, 255, 1, 1, 1, 255, 0, 1, 0, 255, 1, 0, 5, 255, 1, 0, 6, 255, 1, 1, 3, 255, 1, 1, 0, 255, 0, 0, 0, 255, 2, 1, 7, 255, 0, 3, 21, 255, 0, 5, 37, 255, 2, 4, 31, 255, 3, 1, 13, 255, 0, 3, 2, 255, 0, 1, 1, 255, 1, 0, 0, 255, 2, 1, 0, 255, 1, 1, 3, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 0, 1, 255, 2, 2, 3, 255, 0, 3, 4, 255, 2, 0, 1, 255, 16, 19, 45, 255, 15, 28, 54, 255, 2, 3, 12, 255, 1, 3, 14, 255, 1, 3, 7, 255, 0, 0, 7, 255, 2, 1, 6, 255, 4, 2, 11, 255, 0, 0, 0, 255, 1, 2, 23, 255, 60, 59, 124, 255, 133, 130, 182, 255, 126, 121, 146, 255, 91, 88, 83, 255, 53, 52, 47, 255, 23, 19, 10, 255, 19, 14, 9, 255, 53, 51, 63, 255, 111, 107, 123, 255, 102, 95, 116, 255, 71, 70, 125, 255, 75, 75, 116, 255, 48, 54, 73, 255, 20, 21, 16, 255, 6, 1, 1, 255, 6, 5, 6, 255, 14, 8, 8, 255, 19, 12, 5, 255, 16, 11, 4, 255, 19, 11, 9, 255, 26, 18, 14, 255, 25, 16, 10, 255, 24, 16, 9, 255, 27, 17, 13, 255, 26, 15, 13, 255, 24, 14, 6, 255, 23, 13, 9, 255, 23, 13, 10, 255, 26, 16, 8, 255, 28, 15, 9, 255, 34, 18, 10, 255, 40, 23, 15, 255, 33, 20, 17, 255, 39, 26, 11, 255, 69, 40, 22, 255, 93, 47, 27, 255, 92, 53, 16, 255, 67, 36, 8, 255, 56, 32, 12, 255, 52, 30, 15, 255, 57, 31, 14, 255, 68, 38, 11, 255, 72, 36, 9, 255, 71, 34, 14, 255, 72, 46, 16, 255, 72, 41, 14, 255, 77, 43, 14, 255, 83, 52, 11, 255, 96, 61, 6, 255, 102, 63, 14, 255, 93, 55, 18, 255, 98, 59, 4, 255, 98, 58, 6, 255, 98, 56, 9, 255, 98, 48, 18, 255, 93, 45, 14, 255, 93, 51, 11, 255, 97, 57, 6, 255, 97, 55, 8, 255, 95, 50, 10, 255, 96, 50, 12, 255, 96, 52, 12, 255, 100, 58, 13, 255, 104, 65, 15, 255, 109, 66, 4, 255, 106, 66, 16, 255, 116, 67, 20, 255, 125, 74, 8, 255, 137, 75, 16, 255, 163, 99, 5, 255, 186, 113, 6, 255, 183, 120, 9, 255, 190, 121, 14, 255, 188, 119, 11, 255, 183, 110, 6, 255, 172, 98, 6, 255, 139, 79, 9, 255, 98, 53, 11, 255, 83, 47, 12, 255, 80, 38, 12, 255, 79, 31, 17, 255, 81, 37, 6, 255, 75, 41, 9, 255, 77, 37, 19, 255, 73, 35, 14, 255, 64, 38, 6, 255, 71, 38, 14, 255, 77, 35, 18, 255, 71, 39, 17, 255, 78, 42, 12, 255, 76, 40, 15, 255, 78, 40, 11, 255, 81, 40, 13, 255, 73, 42, 17, 255, 74, 43, 22, 255, 71, 39, 9, 255, 71, 42, 15, 255, 69, 39, 25, 255, 68, 36, 12, 255, 72, 42, 24, 255, 69, 44, 24, 255, 71, 48, 18, 255, 79, 56, 25, 255, 78, 53, 22, 255, 73, 50, 34, 255, 80, 56, 31, 255, 74, 56, 22, 255, 69, 54, 27, 255, 73, 51, 32, 255, 78, 56, 33, 255, 76, 57, 33, 255, 73, 57, 39, 255, 77, 59, 39, 255, 77, 60, 35, 255, 76, 59, 47, 255, 80, 62, 39, 255, 83, 67, 31, 255, 82, 71, 39, 255, 81, 71, 39, 255, 74, 71, 40, 255, 75, 73, 55, 255, 87, 72, 55, 255, 83, 74, 55, 255, 83, 77, 59, 255, 100, 81, 64, 255, 108, 79, 57, 255, 104, 81, 67, 255, 103, 82, 72, 255, 109, 84, 56, 255, 103, 83, 53, 255, 104, 84, 62, 255, 101, 84, 59, 255, 104, 85, 59, 255, 113, 88, 60, 255, 116, 89, 59, 255, 115, 92, 60, 255, 109, 88, 64, 255, 107, 90, 62, 255, 108, 92, 61, 255, 108, 89, 61, 255, 111, 89, 64, 255, 109, 92, 61, 255, 106, 93, 59, 255, 106, 93, 63, 255, 110, 96, 65, 255, 113, 97, 70, 255, 112, 97, 75, 255, 113, 101, 68, 255, 115, 102, 72, 255, 116, 102, 76, 255, 117, 106, 77, 255, 121, 111, 79, 255, 122, 113, 83, 255, 124, 115, 80, 255, 124, 120, 82, 255, 120, 122, 92, 255, 118, 128, 90, 255, 135, 147, 107, 255, 133, 141, 106, 255, 133, 140, 99, 255, 137, 143, 96, 255, 137, 144, 100, 255, 141, 149, 105, 255, 143, 151, 107, 255, 143, 150, 106, 255, 146, 152, 108, 255, 150, 153, 104, 255, 148, 151, 100, 255, 149, 151, 95, 255, 152, 151, 93, 255, 148, 147, 91, 255, 140, 139, 89, 255, 129, 136, 85, 255, 123, 133, 78, 255, 125, 127, 73, 255, 126, 121, 71, 255, 125, 116, 68, 255, 122, 114, 66, 255, 119, 108, 65, 255, 114, 104, 49, 255, 116, 102, 54, 255, 115, 97, 51, 255, 116, 95, 47, 255, 115, 92, 40, 255, 114, 88, 42, 255, 112, 90, 43, 255, 109, 92, 41, 255, 133, 108, 74, 255, 116, 84, 36, 255, 114, 80, 26, 255, 118, 78, 41, 255, 118, 74, 42, 255, 114, 76, 28, 255, 117, 75, 27, 255, 121, 78, 23, 255, 120, 72, 24, 255, 125, 75, 22, 255, 123, 76, 18, 255, 115, 74, 18, 255, 111, 70, 17, 255, 109, 67, 18, 255, 110, 66, 18, 255, 111, 65, 13, 255, 116, 69, 11, 255, 120, 67, 11, 255, 120, 72, 12, 255, 115, 70, 15, 255, 124, 68, 24, 255, 136, 74, 20, 255, 133, 71, 15, 255, 129, 74, 12, 255, 125, 68, 15, 255, 119, 63, 11, 255, 116, 65, 8, 255, 110, 66, 12, 255, 105, 60, 19, 255, 108, 58, 16, 255, 110, 58, 11, 255, 109, 58, 11, 255, 105, 57, 11, 255, 106, 56, 10, 255, 108, 55, 11, 255, 107, 54, 15, 255, 108, 55, 13, 255, 107, 55, 9, 255, 109, 56, 11, 255, 112, 58, 7, 255, 114, 60, 6, 255, 116, 62, 9, 255, 119, 63, 9, 255, 124, 66, 7, 255, 124, 70, 4, 255, 130, 72, 8, 255, 143, 79, 18, 255, 152, 82, 15, 255, 151, 79, 10, 255, 142, 72, 8, 255, 132, 71, 11, 255, 127, 66, 12, 255, 126, 64, 19, 255, 117, 61, 15, 255, 109, 57, 7, 255, 119, 62, 14, 255, 113, 60, 13, 255, 113, 60, 2, 255, 110, 58, 7, 255, 109, 57, 15, 255, 106, 56, 11, 255, 106, 54, 11, 255, 99, 47, 8, 255, 97, 51, 6, 255, 94, 51, 11, 255, 93, 48, 12, 255, 94, 46, 7, 255, 97, 48, 4, 255, 96, 47, 9, 255, 96, 45, 7, 255, 97, 46, 4, 255, 98, 51, 5, 255, 90, 45, 4, 255, 92, 47, 8, 255, 91, 43, 10, 255, 93, 43, 12, 255, 92, 42, 10, 255, 89, 41, 3, 255, 98, 49, 8, 255, 95, 44, 14, 255, 91, 41, 8, 255, 96, 43, 7, 255, 99, 43, 6, 255, 102, 44, 5, 255, 102, 42, 4, 255, 92, 44, 3, 255, 98, 41, 8, 255, 102, 39, 10, 255, 98, 45, 4, 255, 92, 42, 3, 255, 92, 42, 7, 255, 3, 0, 3, 255, 0, 1, 3, 255, 0, 2, 3, 255, 5, 8, 13, 255, 9, 21, 40, 255, 19, 38, 49, 255, 23, 37, 30, 255, 43, 49, 50, 255, 50, 54, 55, 255, 25, 32, 31, 255, 17, 25, 28, 255, 27, 29, 40, 255, 40, 38, 38, 255, 33, 32, 37, 255, 21, 20, 30, 255, 21, 11, 13, 255, 16, 5, 8, 255, 19, 14, 11, 255, 24, 21, 21, 255, 22, 27, 24, 255, 19, 24, 21, 255, 12, 8, 14, 255, 18, 6, 1, 255, 67, 11, 11, 255, 110, 19, 24, 255, 121, 21, 10, 255, 124, 18, 2, 255, 120, 20, 13, 255, 124, 24, 10, 255, 91, 16, 4, 255, 26, 3, 3, 255, 0, 0, 7, 255, 2, 1, 6, 255, 2, 1, 5, 255, 1, 1, 3, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 5, 255, 2, 1, 8, 255, 2, 1, 7, 255, 3, 2, 6, 255, 2, 2, 3, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 2, 255, 0, 0, 3, 255, 2, 0, 4, 255, 3, 1, 13, 255, 0, 4, 31, 255, 1, 4, 36, 255, 3, 3, 21, 255, 2, 2, 5, 255, 0, 1, 0, 255, 0, 0, 6, 255, 2, 0, 0, 255, 1, 0, 0, 255, 1, 0, 4, 255, 0, 0, 4, 255, 0, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 3, 255, 1, 1, 3, 255, 2, 0, 3, 255, 0, 2, 14, 255, 2, 2, 11, 255, 1, 1, 7, 255, 2, 0, 9, 255, 5, 2, 6, 255, 3, 2, 4, 255, 0, 0, 0, 255, 8, 8, 27, 255, 50, 51, 110, 255, 127, 130, 183, 255, 131, 134, 159, 255, 85, 84, 74, 255, 58, 54, 36, 255, 31, 26, 20, 255, 19, 11, 19, 255, 64, 48, 76, 255, 115, 103, 113, 255, 88, 90, 113, 255, 71, 71, 152, 255, 87, 76, 114, 255, 57, 53, 61, 255, 26, 19, 8, 255, 7, 0, 1, 255, 13, 3, 3, 255, 13, 8, 7, 255, 13, 11, 10, 255, 19, 14, 2, 255, 26, 10, 9, 255, 25, 16, 15, 255, 23, 18, 13, 255, 24, 15, 10, 255, 25, 15, 9, 255, 24, 15, 8, 255, 23, 14, 9, 255, 25, 16, 10, 255, 26, 15, 7, 255, 30, 19, 11, 255, 29, 18, 15, 255, 29, 20, 16, 255, 28, 19, 10, 255, 32, 20, 12, 255, 38, 26, 15, 255, 67, 48, 11, 255, 84, 53, 12, 255, 81, 43, 20, 255, 65, 40, 6, 255, 50, 34, 8, 255, 59, 31, 12, 255, 60, 37, 3, 255, 68, 37, 11, 255, 55, 35, 10, 255, 55, 32, 17, 255, 66, 32, 18, 255, 74, 38, 8, 255, 73, 42, 6, 255, 77, 42, 8, 255, 82, 46, 10, 255, 88, 54, 13, 255, 94, 56, 4, 255, 93, 50, 6, 255, 91, 55, 6, 255, 88, 53, 8, 255, 83, 48, 1, 255, 85, 49, 9, 255, 90, 47, 13, 255, 87, 47, 16, 255, 89, 53, 12, 255, 98, 56, 12, 255, 100, 56, 14, 255, 97, 52, 10, 255, 100, 54, 11, 255, 105, 58, 10, 255, 110, 62, 12, 255, 118, 73, 10, 255, 127, 80, 8, 255, 140, 80, 13, 255, 152, 86, 9, 255, 177, 101, 1, 255, 201, 142, 8, 255, 236, 189, 2, 255, 252, 204, 3, 255, 253, 186, 6, 255, 229, 143, 6, 255, 196, 117, 5, 255, 168, 101, 10, 255, 135, 77, 15, 255, 97, 49, 16, 255, 70, 39, 9, 255, 68, 41, 17, 255, 73, 38, 16, 255, 76, 33, 10, 255, 86, 39, 3, 255, 73, 40, 5, 255, 76, 36, 13, 255, 83, 38, 13, 255, 70, 41, 11, 255, 73, 36, 16, 255, 81, 39, 10, 255, 76, 41, 14, 255, 74, 41, 5, 255, 79, 46, 8, 255, 77, 43, 7, 255, 70, 37, 10, 255, 67, 38, 15, 255, 64, 36, 19, 255, 71, 39, 23, 255, 71, 41, 26, 255, 64, 37, 26, 255, 73, 42, 18, 255, 73, 44, 20, 255, 68, 47, 16, 255, 77, 53, 11, 255, 85, 52, 25, 255, 79, 51, 28, 255, 79, 52, 23, 255, 74, 57, 24, 255, 74, 58, 31, 255, 72, 57, 25, 255, 75, 57, 31, 255, 73, 56, 32, 255, 70, 57, 30, 255, 70, 56, 37, 255, 74, 61, 43, 255, 75, 65, 40, 255, 74, 64, 46, 255, 75, 66, 34, 255, 79, 68, 38, 255, 80, 74, 37, 255, 82, 69, 47, 255, 78, 69, 41, 255, 81, 72, 45, 255, 92, 72, 54, 255, 85, 74, 49, 255, 80, 75, 43, 255, 93, 76, 55, 255, 105, 77, 59, 255, 102, 81, 67, 255, 103, 80, 67, 255, 111, 82, 58, 255, 107, 83, 57, 255, 107, 82, 54, 255, 102, 81, 58, 255, 107, 86, 69, 255, 112, 87, 54, 255, 113, 89, 56, 255, 115, 90, 56, 255, 115, 91, 53, 255, 113, 89, 54, 255, 106, 89, 46, 255, 104, 91, 57, 255, 104, 89, 64, 255, 107, 93, 59, 255, 107, 94, 54, 255, 109, 94, 55, 255, 112, 96, 60, 255, 111, 96, 64, 255, 110, 96, 70, 255, 115, 98, 71, 255, 116, 101, 67, 255, 117, 104, 67, 255, 119, 106, 68, 255, 121, 110, 69, 255, 121, 113, 63, 255, 123, 115, 78, 255, 123, 118, 81, 255, 124, 123, 84, 255, 121, 125, 84, 255, 135, 145, 104, 255, 137, 146, 109, 255, 131, 137, 98, 255, 136, 139, 96, 255, 139, 145, 99, 255, 140, 146, 100, 255, 142, 147, 101, 255, 143, 146, 101, 255, 146, 148, 102, 255, 150, 150, 101, 255, 148, 148, 97, 255, 148, 147, 91, 255, 153, 150, 92, 255, 151, 146, 89, 255, 141, 139, 87, 255, 135, 131, 83, 255, 126, 126, 80, 255, 119, 129, 73, 255, 116, 123, 68, 255, 123, 117, 72, 255, 127, 115, 63, 255, 121, 108, 55, 255, 122, 106, 61, 255, 118, 99, 50, 255, 124, 102, 46, 255, 118, 94, 43, 255, 120, 90, 52, 255, 121, 88, 45, 255, 116, 92, 30, 255, 106, 89, 33, 255, 130, 110, 59, 255, 121, 89, 44, 255, 116, 80, 22, 255, 123, 83, 27, 255, 121, 78, 33, 255, 118, 78, 27, 255, 120, 77, 25, 255, 124, 76, 22, 255, 123, 70, 27, 255, 122, 73, 23, 255, 118, 77, 15, 255, 115, 71, 25, 255, 110, 68, 18, 255, 108, 66, 16, 255, 111, 68, 22, 255, 110, 65, 18, 255, 113, 67, 15, 255, 110, 67, 15, 255, 111, 68, 17, 255, 112, 67, 26, 255, 120, 72, 23, 255, 128, 77, 4, 255, 131, 76, 10, 255, 138, 79, 17, 255, 134, 76, 14, 255, 129, 69, 10, 255, 121, 68, 9, 255, 109, 65, 10, 255, 106, 61, 11, 255, 111, 60, 10, 255, 116, 62, 13, 255, 112, 61, 14, 255, 105, 57, 12, 255, 107, 57, 10, 255, 111, 59, 12, 255, 108, 56, 13, 255, 107, 57, 10, 255, 111, 60, 8, 255, 113, 59, 15, 255, 114, 59, 10, 255, 116, 62, 8, 255, 117, 64, 9, 255, 119, 65, 7, 255, 123, 63, 9, 255, 124, 63, 14, 255, 135, 71, 14, 255, 149, 80, 14, 255, 156, 80, 12, 255, 160, 80, 9, 255, 149, 75, 5, 255, 140, 73, 6, 255, 137, 72, 8, 255, 130, 68, 14, 255, 121, 64, 12, 255, 116, 62, 7, 255, 117, 62, 10, 255, 111, 57, 18, 255, 113, 57, 8, 255, 114, 60, 11, 255, 111, 58, 14, 255, 110, 58, 11, 255, 105, 54, 1, 255, 102, 53, 9, 255, 99, 55, 8, 255, 99, 51, 7, 255, 102, 50, 7, 255, 102, 46, 12, 255, 99, 52, 9, 255, 91, 47, 8, 255, 94, 48, 7, 255, 98, 46, 11, 255, 101, 48, 13, 255, 95, 45, 9, 255, 94, 41, 12, 255, 98, 43, 7, 255, 98, 42, 12, 255, 98, 45, 1, 255, 98, 43, 11, 255, 103, 49, 11, 255, 102, 50, 7, 255, 94, 44, 5, 255, 96, 42, 8, 255, 99, 41, 11, 255, 102, 41, 10, 255, 106, 43, 1, 255, 100, 45, 6, 255, 98, 42, 8, 255, 98, 39, 1, 255, 100, 40, 5, 255, 96, 39, 5, 255, 99, 40, 9, 255, 1, 0, 3, 255, 1, 2, 2, 255, 3, 2, 3, 255, 2, 4, 8, 255, 6, 9, 9, 255, 7, 5, 9, 255, 15, 15, 13, 255, 26, 31, 24, 255, 20, 29, 32, 255, 14, 15, 21, 255, 23, 16, 17, 255, 31, 23, 25, 255, 36, 34, 34, 255, 30, 35, 34, 255, 27, 27, 25, 255, 29, 17, 20, 255, 17, 10, 5, 255, 13, 5, 6, 255, 8, 4, 4, 255, 16, 14, 9, 255, 17, 20, 23, 255, 18, 15, 13, 255, 12, 13, 19, 255, 16, 10, 36, 255, 44, 8, 38, 255, 75, 16, 30, 255, 105, 25, 30, 255, 126, 28, 34, 255, 119, 24, 21, 255, 74, 10, 15, 255, 18, 4, 10, 255, 1, 0, 3, 255, 0, 1, 0, 255, 0, 1, 1, 255, 1, 1, 3, 255, 2, 1, 5, 255, 2, 1, 3, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 2, 255, 2, 2, 5, 255, 2, 1, 4, 255, 1, 1, 4, 255, 1, 0, 4, 255, 0, 0, 3, 255, 0, 0, 2, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 2, 255, 0, 0, 2, 255, 1, 1, 0, 255, 0, 1, 0, 255, 0, 1, 10, 255, 2, 3, 26, 255, 2, 5, 32, 255, 2, 3, 22, 255, 2, 2, 6, 255, 1, 0, 0, 255, 0, 0, 2, 255, 0, 1, 2, 255, 1, 0, 2, 255, 1, 0, 2, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 2, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 0, 0, 255, 2, 1, 4, 255, 2, 3, 13, 255, 2, 1, 14, 255, 1, 2, 13, 255, 0, 0, 3, 255, 0, 2, 5, 255, 5, 2, 2, 255, 0, 0, 0, 255, 4, 4, 19, 255, 52, 54, 100, 255, 118, 119, 176, 255, 135, 137, 162, 255, 90, 90, 85, 255, 56, 52, 48, 255, 36, 34, 23, 255, 18, 9, 12, 255, 61, 45, 54, 255, 107, 93, 113, 255, 101, 95, 146, 255, 86, 90, 152, 255, 83, 63, 83, 255, 58, 51, 74, 255, 24, 28, 13, 255, 1, 3, 0, 255, 10, 5, 8, 255, 17, 11, 13, 255, 16, 7, 7, 255, 15, 10, 9, 255, 17, 17, 10, 255, 25, 18, 5, 255, 28, 19, 9, 255, 24, 20, 6, 255, 20, 20, 13, 255, 24, 16, 13, 255, 28, 15, 14, 255, 24, 13, 11, 255, 22, 13, 10, 255, 26, 17, 14, 255, 26, 18, 15, 255, 31, 20, 11, 255, 29, 16, 11, 255, 38, 23, 18, 255, 54, 36, 11, 255, 74, 48, 19, 255, 81, 47, 28, 255, 69, 41, 15, 255, 48, 32, 16, 255, 50, 30, 12, 255, 63, 33, 6, 255, 61, 35, 15, 255, 70, 37, 6, 255, 77, 42, 8, 255, 67, 41, 15, 255, 61, 31, 9, 255, 64, 30, 8, 255, 73, 39, 10, 255, 69, 38, 5, 255, 77, 40, 12, 255, 77, 42, 7, 255, 78, 43, 9, 255, 84, 47, 4, 255, 87, 54, 8, 255, 88, 53, 11, 255, 91, 51, 9, 255, 91, 48, 10, 255, 83, 46, 8, 255, 80, 54, 8, 255, 87, 52, 7, 255, 88, 50, 13, 255, 96, 54, 7, 255, 104, 59, 12, 255, 105, 62, 15, 255, 102, 58, 7, 255, 110, 64, 6, 255, 120, 73, 8, 255, 126, 77, 7, 255, 138, 86, 12, 255, 156, 101, 14, 255, 178, 113, 6, 255, 202, 146, 3, 255, 238, 204, 5, 255, 255, 242, 3, 255, 252, 225, 1, 255, 244, 186, 2, 255, 214, 140, 5, 255, 151, 87, 9, 255, 125, 69, 9, 255, 114, 59, 8, 255, 94, 47, 9, 255, 84, 42, 12, 255, 84, 43, 11, 255, 79, 42, 11, 255, 75, 39, 13, 255, 76, 41, 10, 255, 74, 38, 14, 255, 75, 38, 12, 255, 71, 37, 8, 255, 78, 38, 15, 255, 76, 38, 10, 255, 71, 40, 14, 255, 74, 41, 2, 255, 80, 47, 7, 255, 78, 46, 11, 255, 80, 43, 12, 255, 77, 42, 7, 255, 68, 41, 7, 255, 69, 43, 12, 255, 71, 43, 16, 255, 68, 44, 16, 255, 72, 42, 22, 255, 69, 41, 11, 255, 72, 45, 24, 255, 74, 49, 21, 255, 77, 51, 16, 255, 78, 54, 18, 255, 78, 55, 18, 255, 79, 55, 29, 255, 84, 61, 24, 255, 79, 56, 23, 255, 79, 60, 29, 255, 69, 54, 24, 255, 76, 61, 31, 255, 74, 62, 22, 255, 73, 61, 26, 255, 72, 59, 44, 255, 79, 61, 39, 255, 82, 65, 27, 255, 77, 63, 35, 255, 77, 67, 42, 255, 77, 66, 43, 255, 74, 68, 38, 255, 78, 69, 26, 255, 80, 72, 45, 255, 81, 70, 50, 255, 88, 77, 44, 255, 86, 76, 45, 255, 82, 72, 41, 255, 88, 71, 51, 255, 102, 81, 57, 255, 103, 80, 59, 255, 108, 79, 64, 255, 109, 81, 55, 255, 105, 80, 51, 255, 115, 85, 47, 255, 107, 84, 43, 255, 104, 82, 55, 255, 112, 81, 53, 255, 114, 85, 51, 255, 114, 87, 51, 255, 115, 90, 51, 255, 110, 87, 48, 255, 107, 87, 51, 255, 105, 87, 52, 255, 104, 89, 53, 255, 107, 92, 59, 255, 108, 89, 57, 255, 112, 91, 55, 255, 113, 90, 58, 255, 109, 91, 61, 255, 112, 96, 65, 255, 118, 98, 61, 255, 121, 104, 54, 255, 120, 103, 65, 255, 118, 101, 76, 255, 125, 110, 72, 255, 125, 114, 60, 255, 124, 115, 69, 255, 128, 119, 73, 255, 129, 122, 74, 255, 124, 124, 85, 255, 128, 135, 101, 255, 140, 147, 107, 255, 135, 138, 99, 255, 135, 137, 97, 255, 136, 138, 94, 255, 139, 142, 93, 255, 143, 146, 96, 255, 145, 147, 98, 255, 145, 145, 97, 255, 147, 145, 97, 255, 145, 144, 95, 255, 144, 144, 88, 255, 152, 147, 88, 255, 149, 145, 83, 255, 141, 137, 76, 255, 139, 133, 77, 255, 130, 127, 74, 255, 123, 128, 65, 255, 116, 121, 69, 255, 118, 113, 70, 255, 128, 114, 61, 255, 126, 107, 58, 255, 121, 104, 55, 255, 119, 98, 51, 255, 125, 100, 52, 255, 118, 94, 37, 255, 120, 90, 42, 255, 121, 86, 47, 255, 122, 87, 46, 255, 109, 86, 41, 255, 123, 102, 52, 255, 127, 94, 53, 255, 116, 81, 32, 255, 120, 83, 24, 255, 120, 79, 25, 255, 121, 77, 19, 255, 122, 77, 27, 255, 122, 74, 24, 255, 123, 71, 26, 255, 123, 73, 21, 255, 122, 77, 21, 255, 113, 69, 25, 255, 110, 66, 23, 255, 107, 67, 21, 255, 105, 66, 16, 255, 108, 69, 16, 255, 108, 69, 20, 255, 111, 69, 24, 255, 108, 70, 11, 255, 120, 72, 5, 255, 122, 75, 14, 255, 123, 77, 12, 255, 140, 78, 13, 255, 143, 79, 11, 255, 134, 73, 7, 255, 135, 71, 6, 255, 126, 68, 12, 255, 110, 65, 15, 255, 109, 66, 13, 255, 114, 63, 12, 255, 119, 62, 7, 255, 113, 63, 8, 255, 105, 61, 10, 255, 107, 59, 8, 255, 108, 57, 6, 255, 106, 55, 14, 255, 107, 59, 11, 255, 112, 63, 7, 255, 113, 58, 14, 255, 117, 60, 10, 255, 116, 64, 6, 255, 119, 65, 9, 255, 119, 64, 5, 255, 119, 67, 8, 255, 122, 67, 13, 255, 131, 69, 13, 255, 146, 77, 12, 255, 157, 82, 7, 255, 160, 80, 11, 255, 151, 77, 5, 255, 146, 74, 10, 255, 143, 70, 15, 255, 134, 70, 9, 255, 129, 66, 8, 255, 127, 63, 11, 255, 118, 62, 6, 255, 113, 63, 5, 255, 112, 58, 5, 255, 116, 60, 8, 255, 111, 57, 10, 255, 110, 56, 14, 255, 111, 57, 8, 255, 110, 56, 5, 255, 103, 54, 4, 255, 102, 51, 9, 255, 104, 47, 14, 255, 105, 49, 8, 255, 99, 49, 5, 255, 91, 47, 7, 255, 94, 48, 9, 255, 103, 48, 10, 255, 108, 51, 7, 255, 97, 46, 7, 255, 96, 47, 12, 255, 100, 50, 8, 255, 101, 46, 4, 255, 102, 45, 7, 255, 107, 47, 8, 255, 105, 46, 8, 255, 105, 48, 6, 255, 103, 46, 6, 255, 102, 46, 9, 255, 96, 44, 12, 255, 99, 44, 10, 255, 105, 46, 7, 255, 104, 45, 8, 255, 94, 46, 7, 255, 93, 43, 2, 255, 99, 41, 4, 255, 99, 44, 4, 255, 104, 49, 7, 255, 1, 1, 2, 255, 1, 0, 2, 255, 3, 1, 6, 255, 0, 0, 3, 255, 2, 0, 3, 255, 3, 0, 1, 255, 2, 1, 0, 255, 1, 2, 0, 255, 5, 10, 7, 255, 13, 16, 17, 255, 24, 16, 19, 255, 23, 26, 31, 255, 30, 30, 29, 255, 21, 26, 17, 255, 21, 24, 20, 255, 33, 25, 25, 255, 20, 20, 10, 255, 11, 8, 7, 255, 5, 0, 2, 255, 5, 0, 2, 255, 12, 2, 7, 255, 24, 15, 13, 255, 33, 25, 28, 255, 15, 19, 44, 255, 8, 13, 46, 255, 27, 24, 60, 255, 59, 36, 66, 255, 68, 36, 61, 255, 50, 23, 54, 255, 31, 16, 46, 255, 22, 15, 36, 255, 10, 4, 15, 255, 1, 0, 0, 255, 1, 0, 1, 255, 2, 1, 5, 255, 1, 1, 4, 255, 1, 2, 2, 255, 1, 1, 3, 255, 1, 0, 4, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 3, 255, 1, 0, 6, 255, 1, 0, 6, 255, 2, 1, 4, 255, 0, 0, 2, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 1, 255, 1, 0, 3, 255, 1, 0, 4, 255, 0, 0, 2, 255, 0, 1, 1, 255, 1, 3, 13, 255, 2, 4, 31, 255, 2, 3, 30, 255, 1, 4, 13, 255, 1, 1, 1, 255, 1, 0, 0, 255, 0, 0, 2, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 2, 255, 0, 0, 3, 255, 0, 1, 0, 255, 0, 2, 0, 255, 0, 0, 0, 255, 0, 0, 2, 255, 1, 1, 6, 255, 3, 2, 10, 255, 1, 3, 10, 255, 2, 1, 14, 255, 1, 1, 8, 255, 4, 4, 11, 255, 1, 0, 2, 255, 0, 0, 0, 255, 45, 39, 88, 255, 118, 118, 174, 255, 137, 137, 155, 255, 104, 103, 110, 255, 59, 60, 60, 255, 34, 26, 15, 255, 22, 12, 13, 255, 45, 36, 53, 255, 110, 93, 112, 255, 112, 107, 139, 255, 103, 93, 128, 255, 84, 81, 118, 255, 56, 69, 82, 255, 29, 24, 16, 255, 8, 4, 1, 255, 4, 2, 4, 255, 12, 6, 7, 255, 10, 7, 5, 255, 12, 12, 6, 255, 25, 17, 12, 255, 27, 22, 20, 255, 27, 24, 14, 255, 27, 24, 10, 255, 22, 19, 12, 255, 25, 17, 11, 255, 21, 17, 11, 255, 23, 13, 7, 255, 27, 14, 8, 255, 29, 17, 15, 255, 30, 18, 10, 255, 27, 19, 14, 255, 18, 15, 14, 255, 30, 20, 11, 255, 59, 32, 17, 255, 80, 47, 26, 255, 67, 48, 19, 255, 57, 34, 7, 255, 55, 26, 8, 255, 39, 22, 15, 255, 43, 27, 15, 255, 56, 34, 8, 255, 69, 40, 12, 255, 74, 40, 18, 255, 76, 38, 16, 255, 75, 39, 9, 255, 77, 38, 9, 255, 76, 38, 5, 255, 73, 37, 12, 255, 69, 39, 14, 255, 69, 40, 8, 255, 74, 35, 14, 255, 89, 45, 15, 255, 81, 47, 13, 255, 79, 47, 5, 255, 85, 52, 7, 255, 85, 53, 10, 255, 83, 46, 13, 255, 85, 47, 6, 255, 81, 48, 13, 255, 85, 53, 12, 255, 90, 52, 8, 255, 95, 55, 9, 255, 108, 62, 6, 255, 117, 69, 6, 255, 127, 76, 14, 255, 117, 66, 8, 255, 114, 67, 7, 255, 139, 88, 14, 255, 156, 97, 9, 255, 168, 111, 6, 255, 188, 131, 5, 255, 220, 165, 2, 255, 253, 216, 1, 255, 253, 233, 2, 255, 229, 173, 2, 255, 202, 123, 3, 255, 185, 111, 5, 255, 151, 89, 4, 255, 99, 60, 5, 255, 81, 49, 10, 255, 86, 45, 12, 255, 87, 46, 11, 255, 84, 47, 10, 255, 87, 46, 8, 255, 80, 40, 11, 255, 74, 42, 10, 255, 75, 43, 7, 255, 68, 38, 8, 255, 72, 43, 9, 255, 75, 48, 11, 255, 74, 42, 21, 255, 76, 39, 14, 255, 74, 42, 16, 255, 76, 44, 7, 255, 82, 42, 13, 255, 86, 45, 18, 255, 85, 45, 14, 255, 84, 44, 9, 255, 79, 43, 15, 255, 71, 43, 7, 255, 76, 46, 11, 255, 76, 43, 14, 255, 76, 43, 16, 255, 72, 46, 10, 255, 69, 45, 22, 255, 75, 46, 21, 255, 70, 45, 19, 255, 72, 54, 18, 255, 81, 59, 24, 255, 80, 54, 28, 255, 85, 56, 28, 255, 78, 55, 29, 255, 74, 62, 15, 255, 76, 54, 23, 255, 79, 55, 31, 255, 79, 60, 25, 255, 79, 64, 19, 255, 82, 59, 28, 255, 78, 61, 37, 255, 80, 65, 29, 255, 82, 64, 37, 255, 76, 67, 42, 255, 79, 66, 39, 255, 78, 67, 40, 255, 76, 65, 45, 255, 78, 73, 45, 255, 75, 71, 47, 255, 78, 73, 42, 255, 77, 72, 37, 255, 85, 76, 48, 255, 85, 75, 49, 255, 95, 78, 47, 255, 105, 77, 55, 255, 106, 81, 58, 255, 110, 80, 56, 255, 106, 79, 44, 255, 105, 81, 45, 255, 107, 82, 38, 255, 109, 83, 48, 255, 112, 82, 53, 255, 116, 85, 49, 255, 115, 85, 49, 255, 112, 89, 53, 255, 105, 87, 49, 255, 109, 89, 55, 255, 107, 89, 50, 255, 108, 89, 48, 255, 108, 87, 54, 255, 111, 89, 54, 255, 115, 90, 56, 255, 115, 89, 59, 255, 115, 92, 54, 255, 117, 100, 59, 255, 114, 95, 61, 255, 115, 99, 58, 255, 116, 101, 59, 255, 117, 101, 59, 255, 123, 105, 67, 255, 127, 110, 70, 255, 128, 114, 69, 255, 124, 115, 70, 255, 126, 123, 73, 255, 126, 125, 77, 255, 126, 125, 86, 255, 138, 144, 100, 255, 135, 142, 95, 255, 133, 136, 89, 255, 137, 137, 86, 255, 141, 140, 89, 255, 143, 142, 90, 255, 142, 144, 91, 255, 140, 141, 94, 255, 146, 143, 94, 255, 149, 143, 91, 255, 147, 142, 88, 255, 150, 146, 86, 255, 151, 144, 81, 255, 142, 138, 76, 255, 137, 134, 73, 255, 129, 126, 66, 255, 127, 125, 70, 255, 123, 120, 63, 255, 119, 116, 60, 255, 123, 114, 54, 255, 130, 112, 37, 255, 123, 106, 51, 255, 120, 101, 51, 255, 125, 98, 52, 255, 120, 90, 50, 255, 117, 89, 46, 255, 120, 90, 46, 255, 122, 87, 38, 255, 113, 88, 28, 255, 118, 94, 48, 255, 131, 99, 55, 255, 124, 81, 34, 255, 120, 81, 29, 255, 124, 80, 28, 255, 119, 75, 25, 255, 116, 74, 31, 255, 120, 75, 31, 255, 123, 75, 26, 255, 122, 75, 18, 255, 120, 76, 12, 255, 121, 73, 22, 255, 113, 69, 21, 255, 103, 67, 19, 255, 104, 70, 18, 255, 103, 67, 14, 255, 108, 69, 19, 255, 114, 68, 14, 255, 110, 71, 11, 255, 117, 70, 9, 255, 125, 72, 10, 255, 134, 78, 10, 255, 146, 76, 7, 255, 139, 74, 8, 255, 132, 71, 8, 255, 132, 72, 14, 255, 128, 74, 17, 255, 116, 70, 5, 255, 110, 64, 0, 255, 113, 62, 5, 255, 115, 62, 10, 255, 114, 62, 16, 255, 110, 61, 13, 255, 106, 57, 7, 255, 107, 57, 11, 255, 106, 57, 14, 255, 106, 57, 7, 255, 114, 63, 6, 255, 113, 60, 5, 255, 115, 60, 2, 255, 118, 59, 8, 255, 114, 61, 4, 255, 118, 62, 5, 255, 118, 66, 7, 255, 120, 66, 10, 255, 131, 73, 12, 255, 142, 77, 7, 255, 159, 85, 16, 255, 165, 85, 17, 255, 153, 78, 9, 255, 145, 74, 7, 255, 143, 71, 13, 255, 141, 73, 16, 255, 139, 72, 11, 255, 134, 66, 6, 255, 123, 61, 9, 255, 114, 61, 12, 255, 116, 59, 14, 255, 117, 62, 6, 255, 115, 61, 5, 255, 113, 58, 9, 255, 111, 58, 12, 255, 107, 51, 9, 255, 104, 49, 9, 255, 108, 54, 7, 255, 105, 53, 8, 255, 103, 55, 3, 255, 100, 50, 9, 255, 99, 48, 14, 255, 97, 42, 13, 255, 102, 48, 12, 255, 106, 54, 7, 255, 103, 51, 5, 255, 98, 50, 7, 255, 98, 50, 10, 255, 98, 46, 7, 255, 98, 45, 15, 255, 102, 49, 3, 255, 102, 46, 7, 255, 106, 50, 9, 255, 104, 47, 5, 255, 103, 48, 8, 255, 97, 49, 2, 255, 102, 50, 2, 255, 107, 50, 5, 255, 101, 48, 5, 255, 96, 45, 4, 255, 106, 45, 7, 255, 102, 41, 4, 255, 102, 42, 3, 255, 102, 47, 5, 255, 2, 1, 1, 255, 0, 1, 9, 255, 3, 8, 13, 255, 4, 6, 8, 255, 1, 0, 4, 255, 0, 0, 6, 255, 0, 1, 6, 255, 4, 0, 1, 255, 4, 2, 4, 255, 7, 6, 5, 255, 14, 6, 11, 255, 56, 28, 22, 255, 83, 33, 21, 255, 51, 31, 20, 255, 40, 30, 30, 255, 12, 16, 11, 255, 10, 6, 2, 255, 16, 2, 2, 255, 11, 2, 2, 255, 7, 0, 1, 255, 10, 1, 3, 255, 18, 10, 4, 255, 25, 20, 9, 255, 25, 24, 21, 255, 22, 25, 28, 255, 20, 25, 28, 255, 17, 22, 33, 255, 11, 16, 33, 255, 17, 16, 33, 255, 14, 13, 19, 255, 13, 9, 12, 255, 5, 4, 9, 255, 1, 1, 1, 255, 0, 0, 3, 255, 1, 1, 4, 255, 0, 1, 1, 255, 0, 2, 0, 255, 3, 2, 5, 255, 2, 1, 9, 255, 2, 1, 7, 255, 1, 1, 2, 255, 1, 1, 3, 255, 1, 0, 4, 255, 1, 1, 3, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 0, 255, 1, 1, 1, 255, 0, 1, 1, 255, 2, 3, 15, 255, 6, 6, 35, 255, 4, 4, 34, 255, 1, 3, 15, 255, 0, 2, 3, 255, 1, 1, 1, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 0, 3, 255, 2, 2, 2, 255, 2, 1, 0, 255, 1, 1, 5, 255, 3, 0, 7, 255, 4, 0, 7, 255, 3, 0, 9, 255, 1, 0, 8, 255, 1, 0, 6, 255, 2, 1, 6, 255, 0, 0, 0, 255, 0, 0, 7, 255, 21, 28, 76, 255, 101, 110, 171, 255, 140, 137, 171, 255, 105, 105, 108, 255, 63, 65, 64, 255, 29, 28, 25, 255, 11, 11, 12, 255, 47, 33, 45, 255, 92, 87, 112, 255, 109, 99, 137, 255, 100, 96, 167, 255, 40, 86, 202, 255, 61, 65, 92, 255, 37, 32, 20, 255, 5, 9, 0, 255, 2, 1, 3, 255, 12, 5, 11, 255, 17, 9, 6, 255, 16, 10, 4, 255, 25, 21, 16, 255, 30, 30, 13, 255, 31, 29, 12, 255, 33, 26, 10, 255, 25, 21, 8, 255, 27, 18, 7, 255, 30, 22, 8, 255, 19, 17, 10, 255, 19, 18, 7, 255, 27, 16, 12, 255, 33, 19, 12, 255, 31, 19, 8, 255, 19, 17, 4, 255, 31, 21, 9, 255, 53, 36, 16, 255, 71, 50, 22, 255, 71, 42, 15, 255, 54, 29, 5, 255, 36, 23, 10, 255, 40, 22, 11, 255, 51, 30, 4, 255, 44, 26, 15, 255, 47, 27, 13, 255, 58, 34, 15, 255, 69, 38, 12, 255, 68, 39, 9, 255, 65, 39, 6, 255, 67, 38, 9, 255, 71, 41, 7, 255, 78, 45, 9, 255, 80, 43, 9, 255, 75, 37, 9, 255, 76, 40, 13, 255, 77, 41, 12, 255, 87, 44, 13, 255, 79, 46, 8, 255, 80, 45, 8, 255, 81, 47, 6, 255, 80, 48, 8, 255, 84, 47, 15, 255, 79, 47, 7, 255, 80, 48, 8, 255, 92, 51, 12, 255, 95, 54, 9, 255, 95, 60, 6, 255, 105, 67, 7, 255, 115, 74, 12, 255, 141, 88, 11, 255, 138, 82, 9, 255, 133, 79, 4, 255, 161, 102, 7, 255, 184, 120, 9, 255, 201, 137, 7, 255, 221, 162, 4, 255, 236, 183, 3, 255, 248, 182, 4, 255, 207, 128, 8, 255, 134, 68, 18, 255, 115, 62, 7, 255, 109, 64, 8, 255, 95, 50, 13, 255, 92, 52, 12, 255, 88, 52, 8, 255, 87, 49, 13, 255, 84, 45, 10, 255, 82, 43, 9, 255, 80, 47, 5, 255, 78, 42, 9, 255, 82, 40, 8, 255, 83, 43, 15, 255, 84, 46, 14, 255, 85, 44, 10, 255, 84, 44, 9, 255, 84, 44, 11, 255, 74, 42, 10, 255, 74, 43, 22, 255, 83, 47, 4, 255, 90, 50, 13, 255, 85, 48, 14, 255, 86, 49, 18, 255, 86, 52, 15, 255, 79, 45, 27, 255, 79, 50, 14, 255, 77, 48, 17, 255, 77, 51, 13, 255, 77, 45, 18, 255, 73, 43, 29, 255, 73, 45, 28, 255, 77, 46, 26, 255, 70, 46, 25, 255, 76, 54, 20, 255, 84, 56, 19, 255, 85, 61, 27, 255, 78, 54, 28, 255, 81, 56, 30, 255, 75, 59, 25, 255, 77, 57, 21, 255, 79, 58, 25, 255, 76, 56, 35, 255, 80, 59, 32, 255, 86, 62, 27, 255, 78, 62, 34, 255, 76, 62, 29, 255, 85, 71, 29, 255, 80, 67, 38, 255, 79, 65, 40, 255, 80, 67, 33, 255, 80, 71, 44, 255, 75, 69, 39, 255, 80, 72, 45, 255, 81, 71, 41, 255, 81, 72, 46, 255, 88, 77, 49, 255, 80, 75, 40, 255, 85, 72, 43, 255, 102, 75, 61, 255, 101, 79, 59, 255, 110, 79, 49, 255, 105, 76, 48, 255, 100, 79, 52, 255, 105, 78, 44, 255, 109, 80, 45, 255, 107, 80, 49, 255, 112, 81, 61, 255, 117, 85, 52, 255, 114, 89, 47, 255, 108, 87, 44, 255, 109, 87, 45, 255, 104, 85, 48, 255, 106, 85, 52, 255, 111, 89, 45, 255, 111, 90, 44, 255, 111, 87, 53, 255, 114, 90, 58, 255, 112, 92, 56, 255, 114, 96, 51, 255, 117, 93, 54, 255, 114, 95, 60, 255, 114, 99, 60, 255, 120, 106, 57, 255, 117, 103, 63, 255, 122, 109, 68, 255, 126, 113, 67, 255, 126, 112, 76, 255, 130, 119, 79, 255, 130, 124, 75, 255, 129, 127, 82, 255, 136, 139, 99, 255, 137, 144, 101, 255, 131, 134, 87, 255, 139, 138, 87, 255, 141, 139, 88, 255, 141, 141, 86, 255, 143, 143, 88, 255, 142, 143, 92, 255, 144, 141, 87, 255, 149, 140, 84, 255, 147, 140, 82, 255, 148, 142, 81, 255, 152, 143, 77, 255, 145, 138, 76, 255, 135, 129, 69, 255, 131, 126, 65, 255, 129, 124, 71, 255, 121, 119, 65, 255, 120, 115, 63, 255, 124, 112, 64, 255, 128, 107, 57, 255, 124, 104, 53, 255, 117, 99, 53, 255, 123, 97, 50, 255, 122, 91, 39, 255, 116, 89, 39, 255, 121, 93, 35, 255, 124, 89, 38, 255, 116, 88, 31, 255, 112, 88, 41, 255, 129, 101, 53, 255, 128, 85, 37, 255, 121, 80, 23, 255, 125, 79, 24, 255, 121, 76, 26, 255, 117, 76, 19, 255, 119, 76, 27, 255, 120, 71, 32, 255, 119, 71, 20, 255, 120, 74, 25, 255, 123, 71, 22, 255, 117, 71, 18, 255, 109, 70, 15, 255, 110, 74, 20, 255, 112, 71, 20, 255, 115, 69, 17, 255, 118, 67, 14, 255, 113, 67, 16, 255, 118, 69, 10, 255, 125, 71, 11, 255, 133, 74, 15, 255, 142, 75, 11, 255, 141, 77, 13, 255, 140, 77, 9, 255, 132, 73, 10, 255, 124, 69, 12, 255, 117, 64, 12, 255, 116, 64, 13, 255, 114, 62, 13, 255, 114, 64, 8, 255, 113, 62, 8, 255, 112, 61, 3, 255, 110, 60, 2, 255, 106, 58, 11, 255, 106, 55, 19, 255, 110, 58, 11, 255, 115, 59, 2, 255, 112, 62, 8, 255, 109, 61, 6, 255, 118, 62, 16, 255, 120, 65, 10, 255, 124, 63, 12, 255, 124, 65, 8, 255, 128, 69, 11, 255, 133, 74, 8, 255, 143, 77, 8, 255, 154, 79, 8, 255, 162, 82, 10, 255, 155, 80, 5, 255, 149, 79, 10, 255, 143, 75, 10, 255, 142, 74, 11, 255, 138, 70, 9, 255, 128, 65, 7, 255, 124, 64, 7, 255, 119, 64, 5, 255, 121, 64, 9, 255, 121, 66, 2, 255, 117, 63, 2, 255, 113, 62, 4, 255, 111, 60, 10, 255, 109, 55, 14, 255, 107, 55, 7, 255, 107, 51, 12, 255, 110, 54, 11, 255, 109, 59, 3, 255, 102, 52, 6, 255, 101, 48, 5, 255, 103, 46, 5, 255, 104, 50, 7, 255, 103, 53, 6, 255, 105, 54, 5, 255, 102, 53, 6, 255, 103, 49, 8, 255, 102, 47, 9, 255, 101, 47, 10, 255, 101, 49, 3, 255, 102, 45, 10, 255, 106, 48, 9, 255, 106, 49, 2, 255, 103, 49, 4, 255, 101, 50, 3, 255, 102, 49, 7, 255, 104, 45, 5, 255, 101, 47, 3, 255, 100, 45, 0, 255, 109, 49, 7, 255, 97, 44, 11, 255, 94, 39, 11, 255, 99, 43, 9, 255, 4, 0, 6, 255, 2, 4, 15, 255, 9, 13, 30, 255, 6, 8, 17, 255, 2, 2, 4, 255, 1, 2, 2, 255, 0, 1, 2, 255, 0, 1, 1, 255, 0, 0, 4, 255, 0, 0, 4, 255, 47, 0, 5, 255, 162, 36, 11, 255, 163, 56, 25, 255, 129, 46, 27, 255, 55, 15, 13, 255, 0, 3, 0, 255, 8, 0, 1, 255, 19, 1, 3, 255, 13, 4, 2, 255, 10, 1, 1, 255, 11, 2, 3, 255, 10, 2, 0, 255, 21, 8, 2, 255, 28, 12, 10, 255, 31, 21, 20, 255, 29, 25, 24, 255, 24, 22, 24, 255, 19, 19, 19, 255, 17, 18, 17, 255, 12, 10, 10, 255, 8, 8, 7, 255, 1, 2, 1, 255, 1, 2, 3, 255, 0, 0, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 2, 255, 1, 1, 3, 255, 2, 1, 6, 255, 2, 1, 6, 255, 1, 1, 3, 255, 1, 1, 3, 255, 1, 1, 3, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 4, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 1, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 2, 1, 255, 2, 5, 15, 255, 6, 6, 35, 255, 5, 4, 32, 255, 1, 3, 9, 255, 0, 3, 0, 255, 0, 1, 1, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 0, 0, 255, 1, 1, 1, 255, 1, 1, 5, 255, 0, 0, 10, 255, 2, 1, 7, 255, 0, 2, 5, 255, 0, 2, 6, 255, 2, 2, 2, 255, 1, 0, 1, 255, 0, 0, 3, 255, 22, 22, 60, 255, 74, 80, 154, 255, 131, 140, 173, 255, 118, 116, 112, 255, 66, 66, 60, 255, 34, 41, 26, 255, 15, 12, 15, 255, 30, 28, 42, 255, 89, 79, 104, 255, 117, 101, 140, 255, 103, 92, 151, 255, 79, 84, 146, 255, 74, 63, 93, 255, 50, 35, 24, 255, 10, 6, 1, 255, 3, 0, 1, 255, 20, 7, 11, 255, 19, 10, 10, 255, 21, 17, 13, 255, 30, 33, 13, 255, 36, 38, 17, 255, 38, 35, 20, 255, 36, 35, 17, 255, 31, 33, 15, 255, 30, 22, 15, 255, 26, 21, 7, 255, 29, 24, 7, 255, 35, 20, 11, 255, 29, 23, 11, 255, 25, 19, 18, 255, 24, 19, 10, 255, 28, 19, 8, 255, 43, 26, 10, 255, 67, 37, 28, 255, 69, 45, 20, 255, 58, 34, 12, 255, 39, 22, 11, 255, 23, 18, 18, 255, 30, 24, 18, 255, 43, 23, 13, 255, 49, 24, 9, 255, 50, 29, 6, 255, 51, 26, 15, 255, 50, 27, 9, 255, 56, 36, 5, 255, 59, 34, 10, 255, 63, 34, 16, 255, 70, 36, 9, 255, 71, 37, 9, 255, 77, 44, 14, 255, 80, 43, 9, 255, 82, 41, 3, 255, 79, 40, 6, 255, 68, 40, 13, 255, 72, 43, 15, 255, 85, 49, 11, 255, 78, 50, 2, 255, 79, 46, 3, 255, 85, 52, 10, 255, 84, 49, 5, 255, 83, 48, 12, 255, 75, 47, 14, 255, 83, 49, 8, 255, 91, 48, 10, 255, 97, 56, 8, 255, 98, 59, 10, 255, 108, 64, 9, 255, 122, 79, 15, 255, 141, 88, 4, 255, 147, 89, 11, 255, 153, 100, 8, 255, 171, 108, 9, 255, 192, 127, 4, 255, 200, 143, 3, 255, 215, 150, 6, 255, 215, 141, 3, 255, 172, 101, 8, 255, 112, 52, 12, 255, 87, 43, 12, 255, 90, 47, 10, 255, 87, 56, 5, 255, 92, 54, 9, 255, 93, 49, 16, 255, 91, 50, 6, 255, 93, 49, 5, 255, 96, 46, 8, 255, 98, 49, 9, 255, 88, 52, 10, 255, 85, 50, 11, 255, 89, 44, 12, 255, 80, 45, 17, 255, 78, 50, 13, 255, 80, 43, 8, 255, 79, 49, 3, 255, 79, 46, 8, 255, 80, 42, 11, 255, 79, 40, 23, 255, 79, 44, 11, 255, 84, 49, 7, 255, 92, 51, 15, 255, 92, 49, 15, 255, 85, 53, 6, 255, 79, 47, 14, 255, 85, 47, 8, 255, 79, 45, 17, 255, 75, 53, 15, 255, 75, 46, 17, 255, 76, 43, 21, 255, 78, 47, 21, 255, 77, 48, 27, 255, 71, 49, 25, 255, 77, 54, 18, 255, 83, 56, 21, 255, 77, 55, 23, 255, 80, 58, 29, 255, 87, 58, 20, 255, 84, 59, 24, 255, 80, 60, 29, 255, 78, 61, 27, 255, 74, 59, 25, 255, 80, 59, 30, 255, 75, 61, 30, 255, 76, 61, 32, 255, 75, 62, 36, 255, 78, 66, 40, 255, 83, 67, 40, 255, 78, 63, 27, 255, 85, 70, 40, 255, 81, 69, 36, 255, 83, 71, 46, 255, 87, 74, 39, 255, 86, 75, 38, 255, 85, 75, 46, 255, 86, 72, 38, 255, 81, 72, 45, 255, 81, 75, 48, 255, 98, 79, 40, 255, 102, 74, 54, 255, 107, 76, 49, 255, 106, 75, 43, 255, 101, 77, 47, 255, 105, 75, 46, 255, 107, 77, 48, 255, 109, 80, 49, 255, 112, 80, 53, 255, 120, 87, 45, 255, 117, 87, 45, 255, 111, 83, 49, 255, 112, 83, 48, 255, 108, 84, 42, 255, 106, 86, 45, 255, 108, 90, 43, 255, 111, 90, 42, 255, 110, 88, 44, 255, 111, 89, 55, 255, 108, 87, 57, 255, 111, 92, 51, 255, 118, 93, 56, 255, 116, 95, 55, 255, 114, 96, 55, 255, 118, 100, 56, 255, 120, 103, 62, 255, 119, 108, 62, 255, 122, 109, 62, 255, 130, 113, 71, 255, 131, 115, 72, 255, 132, 123, 74, 255, 127, 126, 78, 255, 133, 132, 92, 255, 147, 146, 105, 255, 138, 137, 92, 255, 138, 135, 87, 255, 137, 136, 79, 255, 137, 139, 81, 255, 141, 140, 88, 255, 140, 138, 85, 255, 145, 140, 85, 255, 148, 139, 80, 255, 147, 138, 76, 255, 149, 141, 76, 255, 153, 142, 73, 255, 146, 136, 72, 255, 138, 135, 65, 255, 138, 128, 64, 255, 131, 120, 55, 255, 120, 121, 59, 255, 115, 113, 65, 255, 123, 109, 54, 255, 129, 109, 54, 255, 124, 104, 51, 255, 119, 100, 58, 255, 120, 99, 43, 255, 123, 96, 45, 255, 121, 93, 36, 255, 122, 91, 42, 255, 124, 87, 41, 255, 117, 93, 28, 255, 112, 89, 27, 255, 123, 100, 40, 255, 122, 88, 35, 255, 120, 79, 26, 255, 123, 79, 26, 255, 123, 76, 32, 255, 120, 77, 26, 255, 122, 79, 25, 255, 122, 75, 29, 255, 119, 71, 22, 255, 120, 74, 20, 255, 120, 73, 25, 255, 114, 72, 22, 255, 105, 68, 13, 255, 107, 73, 13, 255, 109, 71, 12, 255, 113, 68, 18, 255, 118, 68, 11, 255, 117, 67, 5, 255, 118, 70, 6, 255, 124, 73, 9, 255, 131, 73, 11, 255, 140, 76, 9, 255, 143, 77, 11, 255, 144, 75, 13, 255, 137, 75, 12, 255, 130, 71, 11, 255, 121, 66, 9, 255, 117, 65, 12, 255, 115, 62, 12, 255, 112, 61, 7, 255, 116, 64, 11, 255, 111, 59, 2, 255, 112, 63, 2, 255, 113, 63, 9, 255, 107, 56, 8, 255, 111, 60, 8, 255, 116, 62, 10, 255, 115, 61, 15, 255, 114, 60, 5, 255, 120, 62, 4, 255, 123, 69, 3, 255, 122, 64, 5, 255, 126, 64, 13, 255, 130, 71, 11, 255, 130, 69, 8, 255, 143, 75, 15, 255, 155, 80, 7, 255, 162, 83, 12, 255, 162, 83, 12, 255, 157, 81, 11, 255, 147, 75, 7, 255, 144, 74, 8, 255, 140, 72, 9, 255, 132, 66, 10, 255, 126, 62, 9, 255, 125, 67, 6, 255, 123, 63, 8, 255, 122, 65, 3, 255, 116, 60, 8, 255, 111, 58, 7, 255, 113, 62, 5, 255, 104, 56, 7, 255, 105, 61, 2, 255, 99, 54, 3, 255, 103, 57, 4, 255, 112, 60, 1, 255, 104, 51, 12, 255, 102, 54, 6, 255, 109, 52, 7, 255, 107, 49, 8, 255, 106, 53, 9, 255, 104, 52, 5, 255, 103, 54, 4, 255, 108, 52, 3, 255, 107, 51, 7, 255, 100, 44, 7, 255, 103, 51, 6, 255, 108, 51, 13, 255, 105, 47, 4, 255, 106, 47, 3, 255, 105, 48, 11, 255, 101, 49, 7, 255, 96, 45, 0, 255, 106, 47, 8, 255, 109, 50, 13, 255, 103, 49, 7, 255, 106, 53, 4, 255, 103, 51, 1, 255, 99, 42, 5, 255, 100, 43, 9, 255, 4, 8, 25, 255, 0, 1, 4, 255, 4, 7, 18, 255, 10, 17, 36, 255, 2, 8, 13, 255, 2, 1, 2, 255, 2, 1, 2, 255, 1, 2, 4, 255, 0, 1, 0, 255, 0, 0, 0, 255, 102, 11, 15, 255, 197, 51, 15, 255, 178, 58, 16, 255, 153, 33, 5, 255, 87, 5, 3, 255, 22, 4, 3, 255, 13, 1, 1, 255, 19, 2, 2, 255, 21, 3, 2, 255, 10, 0, 0, 255, 9, 0, 1, 255, 12, 0, 1, 255, 21, 0, 4, 255, 24, 1, 7, 255, 23, 9, 13, 255, 23, 20, 16, 255, 27, 25, 17, 255, 26, 27, 26, 255, 18, 22, 22, 255, 21, 18, 15, 255, 15, 12, 10, 255, 8, 4, 5, 255, 0, 1, 3, 255, 0, 0, 0, 255, 1, 1, 0, 255, 1, 0, 0, 255, 2, 0, 2, 255, 0, 2, 1, 255, 1, 1, 2, 255, 1, 1, 2, 255, 1, 1, 2, 255, 0, 0, 2, 255, 1, 1, 3, 255, 1, 1, 4, 255, 1, 1, 3, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 1, 1, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 4, 255, 1, 1, 9, 255, 1, 4, 19, 255, 3, 5, 22, 255, 2, 6, 10, 255, 0, 2, 0, 255, 0, 0, 5, 255, 1, 0, 4, 255, 0, 1, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 3, 255, 0, 1, 7, 255, 1, 2, 4, 255, 3, 1, 9, 255, 2, 0, 5, 255, 2, 0, 3, 255, 2, 2, 0, 255, 0, 0, 3, 255, 16, 21, 46, 255, 68, 73, 125, 255, 127, 124, 166, 255, 123, 119, 115, 255, 78, 75, 55, 255, 43, 34, 34, 255, 15, 13, 15, 255, 36, 25, 41, 255, 87, 74, 92, 255, 119, 106, 124, 255, 104, 90, 145, 255, 76, 67, 169, 255, 64, 69, 162, 255, 48, 44, 43, 255, 14, 6, 0, 255, 6, 2, 6, 255, 13, 6, 11, 255, 17, 15, 12, 255, 28, 27, 17, 255, 38, 40, 10, 255, 45, 49, 6, 255, 38, 42, 9, 255, 40, 41, 20, 255, 31, 34, 14, 255, 29, 33, 13, 255, 26, 25, 16, 255, 30, 21, 14, 255, 34, 25, 12, 255, 39, 26, 7, 255, 38, 22, 9, 255, 26, 12, 18, 255, 25, 16, 12, 255, 36, 28, 15, 255, 60, 38, 18, 255, 73, 43, 10, 255, 56, 36, 6, 255, 29, 19, 16, 255, 26, 15, 8, 255, 40, 25, 8, 255, 44, 25, 14, 255, 45, 22, 12, 255, 46, 23, 13, 255, 46, 29, 10, 255, 43, 28, 12, 255, 42, 30, 7, 255, 53, 34, 9, 255, 62, 36, 9, 255, 58, 32, 11, 255, 67, 32, 10, 255, 68, 34, 8, 255, 67, 35, 11, 255, 76, 41, 10, 255, 78, 40, 11, 255, 82, 44, 6, 255, 77, 39, 10, 255, 72, 38, 5, 255, 71, 40, 7, 255, 83, 49, 11, 255, 83, 52, 10, 255, 83, 47, 8, 255, 82, 49, 5, 255, 85, 50, 7, 255, 80, 48, 14, 255, 82, 47, 16, 255, 87, 47, 10, 255, 89, 49, 17, 255, 90, 53, 9, 255, 100, 58, 16, 255, 111, 63, 7, 255, 120, 74, 7, 255, 134, 77, 7, 255, 138, 81, 15, 255, 148, 98, 5, 255, 172, 107, 2, 255, 191, 117, 7, 255, 182, 118, 7, 255, 155, 97, 6, 255, 123, 70, 11, 255, 93, 54, 4, 255, 84, 51, 4, 255, 97, 49, 11, 255, 94, 51, 7, 255, 88, 53, 9, 255, 88, 46, 18, 255, 92, 51, 10, 255, 92, 56, 11, 255, 103, 66, 13, 255, 114, 67, 10, 255, 111, 63, 10, 255, 97, 56, 10, 255, 89, 48, 7, 255, 89, 46, 9, 255, 78, 42, 6, 255, 80, 48, 7, 255, 82, 46, 17, 255, 80, 44, 15, 255, 80, 46, 11, 255, 84, 47, 7, 255, 80, 44, 9, 255, 80, 45, 10, 255, 82, 50, 15, 255, 89, 51, 13, 255, 90, 52, 8, 255, 86, 52, 10, 255, 84, 51, 9, 255, 84, 50, 18, 255, 80, 50, 19, 255, 74, 46, 23, 255, 76, 48, 20, 255, 79, 49, 24, 255, 78, 46, 22, 255, 79, 50, 22, 255, 74, 49, 27, 255, 72, 51, 31, 255, 80, 54, 22, 255, 79, 55, 29, 255, 88, 58, 26, 255, 87, 62, 18, 255, 83, 59, 21, 255, 81, 61, 27, 255, 75, 63, 27, 255, 74, 58, 32, 255, 82, 60, 33, 255, 73, 63, 29, 255, 78, 59, 33, 255, 77, 64, 34, 255, 77, 66, 34, 255, 82, 68, 35, 255, 84, 69, 33, 255, 82, 67, 42, 255, 82, 68, 46, 255, 84, 70, 42, 255, 85, 71, 40, 255, 82, 72, 37, 255, 80, 72, 30, 255, 84, 69, 45, 255, 82, 74, 42, 255, 74, 72, 46, 255, 87, 73, 45, 255, 101, 74, 53, 255, 107, 75, 55, 255, 109, 79, 30, 255, 102, 78, 35, 255, 106, 76, 40, 255, 109, 81, 48, 255, 112, 83, 41, 255, 112, 83, 35, 255, 121, 87, 36, 255, 120, 87, 45, 255, 114, 79, 49, 255, 117, 82, 47, 255, 111, 83, 40, 255, 106, 86, 49, 255, 107, 83, 59, 255, 110, 84, 52, 255, 110, 87, 44, 255, 109, 89, 51, 255, 109, 90, 51, 255, 115, 94, 55, 255, 110, 93, 50, 255, 111, 95, 48, 255, 121, 101, 59, 255, 128, 104, 59, 255, 129, 104, 60, 255, 129, 108, 60, 255, 131, 111, 63, 255, 127, 110, 64, 255, 126, 112, 62, 255, 131, 122, 67, 255, 128, 124, 67, 255, 127, 124, 75, 255, 141, 141, 92, 255, 139, 138, 88, 255, 134, 132, 81, 255, 137, 136, 75, 255, 138, 137, 80, 255, 140, 136, 88, 255, 142, 135, 86, 255, 144, 138, 82, 255, 150, 140, 79, 255, 148, 139, 77, 255, 149, 140, 74, 255, 154, 141, 70, 255, 148, 136, 71, 255, 138, 131, 66, 255, 139, 126, 68, 255, 136, 121, 62, 255, 122, 118, 58, 255, 115, 117, 59, 255, 119, 110, 51, 255, 127, 105, 56, 255, 125, 103, 56, 255, 121, 100, 54, 255, 118, 97, 40, 255, 124, 98, 42, 255, 124, 93, 40, 255, 123, 90, 38, 255, 124, 87, 38, 255, 119, 91, 37, 255, 115, 86, 43, 255, 118, 95, 46, 255, 120, 91, 43, 255, 120, 78, 30, 255, 123, 78, 30, 255, 126, 79, 28, 255, 119, 75, 23, 255, 122, 76, 27, 255, 121, 75, 14, 255, 122, 75, 20, 255, 120, 73, 24, 255, 124, 77, 14, 255, 119, 74, 19, 255, 112, 71, 22, 255, 111, 72, 19, 255, 110, 72, 13, 255, 108, 67, 8, 255, 117, 70, 7, 255, 120, 70, 13, 255, 117, 68, 15, 255, 123, 71, 15, 255, 134, 77, 14, 255, 140, 78, 10, 255, 146, 78, 18, 255, 150, 80, 16, 255, 145, 79, 12, 255, 136, 76, 8, 255, 127, 72, 5, 255, 119, 68, 6, 255, 113, 64, 5, 255, 116, 67, 5, 255, 122, 69, 11, 255, 115, 61, 9, 255, 110, 56, 9, 255, 111, 57, 14, 255, 110, 57, 13, 255, 108, 57, 9, 255, 113, 61, 4, 255, 115, 59, 7, 255, 118, 62, 8, 255, 123, 64, 10, 255, 123, 66, 11, 255, 126, 64, 11, 255, 126, 64, 5, 255, 129, 69, 11, 255, 132, 69, 8, 255, 145, 77, 8, 255, 158, 84, 15, 255, 162, 87, 7, 255, 166, 86, 7, 255, 162, 82, 6, 255, 155, 79, 3, 255, 153, 79, 3, 255, 148, 77, 2, 255, 139, 71, 2, 255, 133, 69, 6, 255, 127, 69, 11, 255, 123, 64, 6, 255, 123, 65, 3, 255, 122, 62, 14, 255, 118, 59, 14, 255, 115, 60, 9, 255, 110, 56, 12, 255, 111, 57, 16, 255, 102, 57, 7, 255, 103, 55, 14, 255, 114, 55, 9, 255, 105, 50, 8, 255, 103, 56, 8, 255, 111, 57, 3, 255, 105, 53, 4, 255, 105, 53, 5, 255, 110, 53, 6, 255, 106, 55, 7, 255, 105, 51, 7, 255, 105, 50, 9, 255, 101, 50, 9, 255, 100, 53, 3, 255, 101, 52, 6, 255, 102, 51, 5, 255, 103, 49, 9, 255, 105, 49, 13, 255, 104, 52, 9, 255, 100, 48, 5, 255, 105, 46, 8, 255, 105, 42, 6, 255, 104, 48, 6, 255, 103, 53, 5, 255, 108, 53, 8, 255, 107, 49, 1, 255, 105, 48, 4, 255, 7, 9, 29, 255, 5, 8, 23, 255, 2, 6, 18, 255, 5, 8, 17, 255, 1, 2, 3, 255, 2, 1, 1, 255, 2, 1, 0, 255, 1, 0, 9, 255, 0, 0, 0, 255, 19, 0, 5, 255, 139, 31, 20, 255, 181, 56, 11, 255, 175, 44, 7, 255, 166, 37, 1, 255, 130, 18, 6, 255, 73, 4, 1, 255, 41, 4, 3, 255, 12, 3, 4, 255, 17, 2, 6, 255, 16, 0, 6, 255, 10, 2, 2, 255, 9, 2, 2, 255, 13, 0, 0, 255, 22, 2, 0, 255, 22, 4, 0, 255, 24, 9, 3, 255, 31, 15, 12, 255, 28, 21, 21, 255, 23, 23, 27, 255, 31, 24, 32, 255, 18, 19, 20, 255, 17, 16, 13, 255, 6, 5, 5, 255, 2, 3, 5, 255, 1, 2, 4, 255, 1, 0, 0, 255, 1, 0, 0, 255, 0, 0, 0, 255, 1, 1, 0, 255, 1, 1, 0, 255, 1, 1, 2, 255, 1, 1, 3, 255, 1, 1, 3, 255, 1, 0, 5, 255, 2, 1, 6, 255, 1, 1, 2, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 1, 2, 7, 255, 2, 2, 13, 255, 3, 2, 17, 255, 2, 4, 15, 255, 0, 1, 4, 255, 0, 1, 0, 255, 1, 2, 1, 255, 0, 0, 4, 255, 0, 0, 2, 255, 1, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 1, 255, 1, 1, 2, 255, 2, 1, 8, 255, 2, 0, 6, 255, 2, 0, 6, 255, 2, 0, 0, 255, 2, 0, 0, 255, 0, 0, 0, 255, 4, 6, 32, 255, 62, 66, 118, 255, 116, 113, 152, 255, 121, 111, 133, 255, 89, 81, 65, 255, 46, 39, 19, 255, 20, 14, 12, 255, 30, 22, 29, 255, 70, 64, 97, 255, 92, 101, 121, 255, 103, 88, 122, 255, 99, 79, 136, 255, 107, 85, 118, 255, 98, 74, 65, 255, 30, 24, 27, 255, 15, 0, 11, 255, 12, 12, 6, 255, 23, 17, 13, 255, 35, 31, 33, 255, 47, 46, 34, 255, 37, 54, 21, 255, 35, 54, 20, 255, 43, 47, 15, 255, 53, 48, 17, 255, 32, 40, 7, 255, 34, 42, 11, 255, 31, 32, 12, 255, 37, 28, 11, 255, 34, 32, 14, 255, 26, 27, 10, 255, 25, 18, 7, 255, 23, 21, 9, 255, 38, 35, 6, 255, 63, 43, 12, 255, 60, 34, 23, 255, 44, 27, 16, 255, 33, 21, 14, 255, 27, 21, 7, 255, 25, 22, 6, 255, 35, 23, 13, 255, 36, 25, 5, 255, 38, 25, 11, 255, 42, 26, 13, 255, 40, 27, 10, 255, 40, 30, 12, 255, 48, 29, 12, 255, 51, 29, 8, 255, 51, 35, 16, 255, 51, 34, 13, 255, 54, 28, 12, 255, 61, 28, 26, 255, 70, 38, 13, 255, 80, 41, 11, 255, 84, 43, 5, 255, 81, 40, 10, 255, 76, 43, 11, 255, 67, 38, 13, 255, 75, 43, 14, 255, 76, 43, 8, 255, 81, 45, 11, 255, 84, 48, 17, 255, 87, 48, 15, 255, 75, 44, 1, 255, 84, 49, 10, 255, 80, 48, 17, 255, 88, 46, 7, 255, 90, 48, 8, 255, 88, 52, 14, 255, 93, 59, 9, 255, 106, 63, 12, 255, 117, 69, 6, 255, 119, 72, 9, 255, 131, 77, 10, 255, 135, 78, 7, 255, 141, 86, 6, 255, 150, 93, 2, 255, 140, 81, 9, 255, 114, 62, 8, 255, 91, 51, 11, 255, 79, 47, 17, 255, 84, 50, 11, 255, 86, 49, 8, 255, 86, 51, 10, 255, 89, 51, 10, 255, 97, 57, 10, 255, 110, 64, 9, 255, 108, 58, 6, 255, 115, 69, 7, 255, 122, 77, 8, 255, 120, 68, 6, 255, 109, 58, 1, 255, 96, 54, 4, 255, 92, 53, 3, 255, 93, 46, 9, 255, 84, 44, 11, 255, 80, 47, 11, 255, 87, 43, 14, 255, 92, 45, 14, 255, 89, 49, 1, 255, 85, 50, 2, 255, 80, 42, 7, 255, 84, 43, 14, 255, 87, 51, 15, 255, 85, 52, 10, 255, 88, 56, 14, 255, 88, 49, 16, 255, 86, 50, 12, 255, 78, 51, 23, 255, 78, 52, 23, 255, 78, 43, 21, 255, 76, 50, 20, 255, 73, 48, 29, 255, 74, 45, 22, 255, 82, 51, 15, 255, 77, 48, 22, 255, 72, 54, 19, 255, 83, 55, 20, 255, 80, 54, 24, 255, 83, 60, 24, 255, 94, 68, 13, 255, 91, 63, 22, 255, 75, 57, 39, 255, 74, 62, 28, 255, 80, 63, 31, 255, 86, 66, 33, 255, 79, 65, 29, 255, 84, 60, 43, 255, 84, 65, 34, 255, 80, 65, 27, 255, 81, 67, 28, 255, 81, 66, 38, 255, 83, 69, 46, 255, 76, 65, 44, 255, 82, 69, 47, 255, 82, 67, 40, 255, 84, 71, 37, 255, 83, 70, 27, 255, 85, 72, 33, 255, 84, 75, 35, 255, 77, 74, 37, 255, 79, 70, 40, 255, 96, 72, 55, 255, 108, 77, 50, 255, 109, 75, 37, 255, 104, 76, 41, 255, 105, 76, 40, 255, 106, 78, 39, 255, 112, 81, 35, 255, 112, 80, 40, 255, 120, 84, 45, 255, 122, 86, 45, 255, 115, 83, 39, 255, 116, 83, 43, 255, 109, 80, 45, 255, 103, 80, 49, 255, 108, 85, 43, 255, 112, 86, 41, 255, 110, 84, 46, 255, 109, 88, 47, 255, 110, 89, 50, 255, 114, 91, 54, 255, 113, 93, 47, 255, 116, 96, 49, 255, 118, 97, 56, 255, 123, 101, 53, 255, 126, 103, 52, 255, 127, 105, 54, 255, 130, 109, 51, 255, 128, 113, 61, 255, 127, 116, 70, 255, 131, 119, 68, 255, 133, 124, 65, 255, 128, 124, 81, 255, 131, 133, 94, 255, 142, 142, 93, 255, 136, 133, 84, 255, 138, 134, 77, 255, 138, 135, 76, 255, 141, 135, 77, 255, 144, 135, 77, 255, 145, 136, 79, 255, 148, 136, 76, 255, 150, 139, 77, 255, 148, 139, 72, 255, 150, 135, 66, 255, 148, 134, 71, 255, 142, 130, 64, 255, 136, 123, 57, 255, 137, 122, 55, 255, 129, 119, 45, 255, 118, 118, 57, 255, 114, 107, 60, 255, 127, 108, 51, 255, 127, 105, 55, 255, 123, 100, 47, 255, 118, 97, 36, 255, 123, 96, 41, 255, 126, 91, 45, 255, 122, 88, 39, 255, 126, 91, 23, 255, 121, 90, 25, 255, 115, 85, 40, 255, 116, 92, 39, 255, 123, 97, 45, 255, 122, 81, 31, 255, 122, 79, 26, 255, 126, 78, 28, 255, 124, 79, 22, 255, 127, 81, 23, 255, 125, 76, 17, 255, 122, 73, 22, 255, 119, 74, 19, 255, 127, 73, 23, 255, 123, 73, 14, 255, 115, 69, 6, 255, 113, 69, 15, 255, 110, 66, 18, 255, 114, 70, 15, 255, 113, 71, 9, 255, 116, 70, 14, 255, 116, 68, 11, 255, 123, 72, 13, 255, 132, 75, 14, 255, 136, 75, 6, 255, 147, 80, 13, 255, 148, 80, 11, 255, 144, 79, 6, 255, 137, 76, 4, 255, 128, 71, 8, 255, 121, 67, 12, 255, 115, 63, 12, 255, 115, 64, 11, 255, 117, 63, 7, 255, 120, 64, 9, 255, 115, 61, 10, 255, 111, 58, 5, 255, 113, 59, 8, 255, 111, 58, 9, 255, 118, 63, 7, 255, 120, 65, 6, 255, 117, 64, 4, 255, 123, 66, 9, 255, 121, 65, 6, 255, 129, 65, 4, 255, 130, 67, 12, 255, 128, 68, 6, 255, 130, 68, 11, 255, 140, 72, 13, 255, 156, 84, 9, 255, 164, 88, 10, 255, 165, 86, 13, 255, 162, 83, 13, 255, 157, 83, 12, 255, 151, 79, 6, 255, 147, 79, 5, 255, 144, 76, 9, 255, 135, 72, 10, 255, 125, 64, 11, 255, 125, 65, 6, 255, 126, 69, 0, 255, 127, 68, 4, 255, 124, 63, 7, 255, 120, 61, 2, 255, 126, 61, 2, 255, 114, 58, 6, 255, 111, 59, 5, 255, 113, 52, 11, 255, 112, 55, 7, 255, 110, 57, 3, 255, 111, 54, 10, 255, 109, 53, 13, 255, 100, 53, 9, 255, 100, 51, 5, 255, 114, 53, 8, 255, 110, 55, 11, 255, 101, 51, 9, 255, 106, 51, 9, 255, 108, 56, 10, 255, 104, 53, 7, 255, 104, 50, 9, 255, 106, 49, 10, 255, 107, 50, 7, 255, 105, 52, 5, 255, 105, 50, 5, 255, 106, 49, 10, 255, 108, 48, 11, 255, 107, 45, 7, 255, 109, 51, 7, 255, 101, 48, 3, 255, 116, 52, 8, 255, 110, 51, 0, 255, 104, 41, 4, 255, 16, 21, 40, 255, 11, 15, 36, 255, 5, 8, 18, 255, 2, 4, 4, 255, 1, 0, 7, 255, 4, 1, 10, 255, 0, 3, 1, 255, 2, 1, 2, 255, 0, 1, 4, 255, 43, 0, 11, 255, 161, 32, 14, 255, 163, 43, 5, 255, 157, 31, 7, 255, 158, 32, 5, 255, 143, 24, 3, 255, 134, 17, 6, 255, 83, 9, 4, 255, 13, 1, 1, 255, 5, 1, 4, 255, 13, 0, 5, 255, 10, 1, 0, 255, 6, 1, 1, 255, 9, 1, 2, 255, 20, 3, 2, 255, 31, 1, 3, 255, 27, 1, 4, 255, 23, 5, 1, 255, 20, 11, 9, 255, 14, 15, 12, 255, 24, 19, 15, 255, 17, 21, 14, 255, 21, 19, 13, 255, 12, 7, 4, 255, 6, 7, 11, 255, 2, 5, 14, 255, 0, 0, 1, 255, 1, 0, 0, 255, 0, 0, 2, 255, 1, 1, 2, 255, 1, 1, 1, 255, 1, 1, 3, 255, 1, 1, 2, 255, 1, 1, 1, 255, 1, 1, 2, 255, 2, 2, 4, 255, 1, 1, 3, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 1, 3, 255, 1, 2, 7, 255, 2, 3, 9, 255, 3, 4, 10, 255, 1, 2, 9, 255, 0, 0, 5, 255, 0, 1, 0, 255, 1, 1, 0, 255, 0, 0, 1, 255, 0, 0, 0, 255, 1, 1, 2, 255, 1, 0, 3, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 2, 255, 0, 0, 2, 255, 1, 0, 4, 255, 1, 0, 5, 255, 2, 0, 2, 255, 3, 0, 5, 255, 2, 0, 3, 255, 0, 0, 0, 255, 1, 3, 23, 255, 43, 47, 113, 255, 101, 108, 154, 255, 111, 110, 120, 255, 84, 81, 72, 255, 53, 49, 34, 255, 13, 13, 6, 255, 17, 14, 31, 255, 67, 58, 86, 255, 112, 97, 125, 255, 115, 97, 121, 255, 97, 90, 136, 255, 86, 79, 112, 255, 83, 70, 59, 255, 155, 88, 15, 255, 111, 49, 0, 255, 45, 18, 4, 255, 25, 23, 13, 255, 38, 33, 20, 255, 43, 44, 21, 255, 41, 53, 26, 255, 45, 51, 20, 255, 48, 55, 29, 255, 42, 52, 31, 255, 42, 51, 22, 255, 42, 47, 18, 255, 36, 43, 12, 255, 35, 37, 16, 255, 33, 32, 14, 255, 29, 23, 8, 255, 23, 16, 7, 255, 28, 18, 11, 255, 52, 32, 18, 255, 67, 43, 17, 255, 61, 37, 10, 255, 42, 25, 8, 255, 30, 19, 12, 255, 33, 18, 6, 255, 36, 21, 5, 255, 38, 22, 11, 255, 29, 20, 9, 255, 24, 21, 15, 255, 36, 25, 7, 255, 44, 27, 9, 255, 43, 27, 7, 255, 47, 29, 8, 255, 52, 30, 19, 255, 51, 30, 12, 255, 55, 30, 13, 255, 56, 30, 7, 255, 60, 35, 10, 255, 60, 33, 4, 255, 63, 34, 8, 255, 72, 38, 2, 255, 73, 41, 9, 255, 78, 43, 10, 255, 82, 47, 5, 255, 83, 46, 13, 255, 76, 41, 8, 255, 77, 43, 7, 255, 77, 43, 7, 255, 80, 46, 7, 255, 86, 49, 12, 255, 88, 47, 10, 255, 81, 48, 3, 255, 88, 51, 6, 255, 80, 50, 10, 255, 86, 49, 7, 255, 88, 52, 11, 255, 90, 56, 11, 255, 107, 64, 11, 255, 117, 62, 7, 255, 118, 68, 11, 255, 118, 68, 11, 255, 123, 74, 9, 255, 124, 72, 2, 255, 118, 63, 8, 255, 104, 60, 10, 255, 88, 52, 16, 255, 83, 50, 13, 255, 88, 50, 15, 255, 85, 51, 7, 255, 82, 51, 11, 255, 89, 51, 5, 255, 99, 61, 13, 255, 118, 76, 10, 255, 138, 98, 10, 255, 129, 87, 3, 255, 123, 75, 6, 255, 126, 75, 12, 255, 119, 69, 8, 255, 115, 67, 10, 255, 111, 61, 7, 255, 101, 58, 6, 255, 92, 55, 4, 255, 86, 44, 8, 255, 81, 49, 13, 255, 72, 46, 15, 255, 76, 44, 8, 255, 82, 48, 10, 255, 77, 44, 20, 255, 82, 41, 18, 255, 86, 42, 9, 255, 86, 45, 22, 255, 85, 46, 17, 255, 85, 48, 10, 255, 86, 48, 18, 255, 90, 49, 13, 255, 95, 57, 14, 255, 86, 54, 13, 255, 83, 50, 17, 255, 79, 46, 12, 255, 73, 50, 22, 255, 70, 44, 31, 255, 74, 46, 26, 255, 76, 51, 19, 255, 76, 48, 25, 255, 76, 55, 19, 255, 80, 55, 22, 255, 83, 58, 18, 255, 83, 65, 23, 255, 87, 60, 23, 255, 91, 61, 30, 255, 82, 64, 35, 255, 76, 61, 32, 255, 76, 59, 33, 255, 77, 62, 28, 255, 86, 63, 32, 255, 85, 63, 32, 255, 81, 62, 22, 255, 84, 65, 32, 255, 80, 63, 41, 255, 81, 66, 31, 255, 79, 69, 31, 255, 79, 71, 33, 255, 80, 67, 50, 255, 82, 65, 42, 255, 86, 70, 39, 255, 91, 69, 34, 255, 87, 73, 29, 255, 85, 71, 35, 255, 82, 67, 42, 255, 80, 71, 41, 255, 90, 75, 42, 255, 106, 78, 42, 255, 107, 72, 40, 255, 104, 73, 46, 255, 105, 74, 43, 255, 104, 75, 39, 255, 108, 78, 35, 255, 115, 81, 40, 255, 121, 82, 46, 255, 120, 86, 40, 255, 114, 85, 37, 255, 112, 80, 43, 255, 111, 85, 45, 255, 105, 84, 41, 255, 111, 86, 35, 255, 119, 89, 37, 255, 115, 85, 40, 255, 113, 90, 40, 255, 112, 90, 42, 255, 117, 90, 43, 255, 119, 90, 47, 255, 116, 92, 50, 255, 120, 98, 63, 255, 118, 98, 48, 255, 121, 103, 43, 255, 122, 103, 53, 255, 125, 105, 59, 255, 127, 108, 63, 255, 128, 111, 69, 255, 130, 114, 67, 255, 134, 123, 64, 255, 127, 123, 68, 255, 122, 125, 78, 255, 141, 143, 96, 255, 140, 136, 86, 255, 137, 130, 78, 255, 142, 135, 77, 255, 144, 136, 69, 255, 147, 137, 69, 255, 147, 134, 75, 255, 151, 135, 72, 255, 150, 136, 72, 255, 147, 134, 67, 255, 150, 133, 62, 255, 149, 131, 67, 255, 144, 129, 62, 255, 141, 124, 55, 255, 138, 120, 59, 255, 127, 113, 51, 255, 121, 116, 51, 255, 120, 113, 52, 255, 123, 111, 46, 255, 129, 106, 49, 255, 126, 100, 44, 255, 123, 99, 41, 255, 125, 96, 34, 255, 128, 91, 42, 255, 121, 89, 37, 255, 124, 91, 29, 255, 125, 86, 30, 255, 118, 87, 38, 255, 116, 89, 29, 255, 118, 95, 37, 255, 123, 87, 30, 255, 125, 80, 22, 255, 124, 76, 21, 255, 125, 80, 16, 255, 127, 79, 22, 255, 124, 74, 21, 255, 121, 72, 24, 255, 122, 75, 27, 255, 122, 72, 25, 255, 121, 74, 16, 255, 117, 72, 11, 255, 115, 70, 19, 255, 112, 67, 21, 255, 112, 70, 12, 255, 111, 73, 8, 255, 115, 69, 10, 255, 120, 72, 8, 255, 127, 76, 12, 255, 132, 75, 13, 255, 134, 77, 7, 255, 144, 78, 10, 255, 148, 77, 13, 255, 145, 78, 7, 255, 144, 79, 10, 255, 134, 73, 11, 255, 124, 67, 10, 255, 124, 69, 13, 255, 119, 66, 10, 255, 118, 64, 2, 255, 121, 65, 6, 255, 116, 60, 7, 255, 113, 61, 4, 255, 115, 63, 10, 255, 109, 59, 11, 255, 115, 66, 7, 255, 122, 62, 11, 255, 120, 59, 9, 255, 124, 62, 9, 255, 121, 66, 12, 255, 127, 67, 9, 255, 125, 65, 6, 255, 124, 66, 6, 255, 129, 71, 6, 255, 140, 75, 9, 255, 153, 82, 8, 255, 158, 84, 5, 255, 164, 89, 5, 255, 163, 87, 11, 255, 155, 81, 6, 255, 150, 77, 1, 255, 152, 80, 5, 255, 148, 78, 8, 255, 138, 71, 4, 255, 132, 68, 8, 255, 131, 68, 13, 255, 129, 69, 6, 255, 127, 67, 7, 255, 124, 65, 7, 255, 124, 65, 8, 255, 123, 60, 11, 255, 114, 59, 7, 255, 113, 61, 4, 255, 109, 54, 7, 255, 107, 59, 3, 255, 113, 62, 7, 255, 116, 59, 8, 255, 113, 56, 11, 255, 104, 53, 8, 255, 108, 55, 9, 255, 118, 56, 12, 255, 109, 56, 7, 255, 107, 57, 9, 255, 110, 54, 6, 255, 109, 53, 9, 255, 110, 52, 12, 255, 116, 54, 12, 255, 116, 54, 8, 255, 110, 49, 4, 255, 107, 53, 10, 255, 110, 51, 7, 255, 113, 52, 2, 255, 109, 52, 4, 255, 104, 44, 3, 255, 108, 46, 5, 255, 106, 51, 3, 255, 105, 51, 2, 255, 92, 43, 10, 255, 76, 29, 15, 255, 20, 41, 82, 255, 25, 40, 68, 255, 18, 30, 42, 255, 5, 19, 29, 255, 6, 22, 33, 255, 6, 12, 27, 255, 0, 0, 4, 255, 0, 2, 1, 255, 0, 0, 3, 255, 64, 9, 1, 255, 157, 34, 4, 255, 139, 27, 7, 255, 107, 13, 9, 255, 121, 18, 2, 255, 151, 30, 9, 255, 154, 30, 7, 255, 114, 10, 1, 255, 67, 4, 4, 255, 14, 2, 0, 255, 6, 2, 1, 255, 6, 1, 0, 255, 8, 1, 1, 255, 15, 2, 2, 255, 18, 0, 0, 255, 33, 1, 2, 255, 38, 2, 7, 255, 37, 1, 5, 255, 23, 0, 3, 255, 13, 3, 1, 255, 15, 2, 0, 255, 8, 7, 4, 255, 14, 7, 6, 255, 10, 1, 2, 255, 4, 5, 15, 255, 3, 6, 15, 255, 0, 0, 3, 255, 1, 0, 0, 255, 1, 0, 3, 255, 1, 0, 2, 255, 1, 1, 1, 255, 1, 1, 5, 255, 1, 0, 4, 255, 1, 1, 1, 255, 1, 1, 0, 255, 2, 2, 1, 255, 1, 1, 3, 255, 2, 0, 5, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 2, 255, 1, 1, 9, 255, 2, 3, 10, 255, 3, 4, 10, 255, 2, 3, 6, 255, 1, 0, 2, 255, 0, 0, 0, 255, 1, 0, 0, 255, 1, 0, 3, 255, 1, 0, 3, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 1, 0, 2, 255, 1, 0, 0, 255, 1, 0, 1, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 2, 255, 1, 1, 2, 255, 0, 0, 4, 255, 1, 0, 7, 255, 2, 1, 6, 255, 0, 0, 1, 255, 0, 0, 0, 255, 2, 3, 16, 255, 39, 38, 80, 255, 100, 93, 154, 255, 116, 115, 134, 255, 77, 83, 69, 255, 50, 52, 41, 255, 16, 21, 13, 255, 18, 17, 25, 255, 60, 56, 61, 255, 91, 83, 140, 255, 85, 82, 159, 255, 77, 80, 137, 255, 82, 81, 94, 255, 68, 61, 47, 255, 42, 32, 7, 255, 94, 55, 5, 255, 150, 86, 14, 255, 98, 52, 10, 255, 63, 40, 15, 255, 47, 39, 22, 255, 40, 40, 15, 255, 34, 51, 16, 255, 39, 58, 18, 255, 41, 58, 22, 255, 44, 60, 28, 255, 54, 59, 24, 255, 50, 64, 16, 255, 37, 51, 8, 255, 40, 35, 10, 255, 29, 18, 9, 255, 13, 14, 5, 255, 24, 23, 10, 255, 44, 26, 17, 255, 59, 40, 17, 255, 53, 36, 8, 255, 36, 19, 6, 255, 21, 17, 13, 255, 24, 19, 12, 255, 37, 24, 4, 255, 36, 25, 8, 255, 30, 23, 9, 255, 25, 21, 8, 255, 31, 22, 12, 255, 37, 25, 10, 255, 41, 24, 7, 255, 36, 24, 14, 255, 35, 30, 15, 255, 48, 30, 7, 255, 53, 30, 7, 255, 47, 31, 7, 255, 48, 33, 13, 255, 48, 32, 12, 255, 53, 32, 9, 255, 62, 34, 16, 255, 76, 40, 8, 255, 79, 44, 6, 255, 73, 46, 8, 255, 73, 44, 7, 255, 79, 44, 3, 255, 84, 44, 1, 255, 84, 43, 6, 255, 75, 42, 4, 255, 72, 39, 11, 255, 76, 44, 6, 255, 85, 46, 6, 255, 89, 46, 9, 255, 86, 50, 9, 255, 87, 45, 8, 255, 87, 50, 11, 255, 91, 49, 13, 255, 91, 50, 13, 255, 103, 61, 19, 255, 108, 59, 6, 255, 115, 59, 7, 255, 103, 60, 14, 255, 96, 55, 15, 255, 93, 60, 7, 255, 94, 55, 9, 255, 92, 47, 12, 255, 90, 52, 5, 255, 80, 48, 14, 255, 81, 48, 13, 255, 85, 50, 8, 255, 92, 54, 2, 255, 95, 57, 3, 255, 113, 77, 10, 255, 130, 80, 16, 255, 140, 85, 12, 255, 153, 93, 13, 255, 137, 85, 6, 255, 122, 75, 3, 255, 121, 73, 13, 255, 116, 69, 6, 255, 112, 64, 4, 255, 105, 61, 5, 255, 100, 56, 6, 255, 94, 49, 8, 255, 82, 44, 11, 255, 83, 46, 9, 255, 80, 40, 16, 255, 82, 47, 17, 255, 82, 49, 7, 255, 78, 49, 8, 255, 72, 49, 11, 255, 73, 48, 6, 255, 80, 47, 18, 255, 79, 49, 15, 255, 80, 48, 11, 255, 87, 49, 22, 255, 86, 52, 19, 255, 84, 51, 11, 255, 87, 50, 13, 255, 80, 52, 17, 255, 74, 52, 22, 255, 72, 49, 23, 255, 76, 52, 12, 255, 77, 53, 19, 255, 71, 50, 31, 255, 77, 51, 29, 255, 79, 56, 23, 255, 77, 60, 28, 255, 86, 61, 24, 255, 89, 63, 22, 255, 89, 65, 34, 255, 90, 64, 28, 255, 87, 64, 21, 255, 82, 65, 26, 255, 80, 61, 33, 255, 74, 59, 36, 255, 84, 58, 31, 255, 84, 62, 29, 255, 82, 63, 28, 255, 83, 67, 22, 255, 84, 65, 34, 255, 81, 64, 33, 255, 82, 68, 39, 255, 79, 66, 43, 255, 85, 70, 32, 255, 83, 65, 29, 255, 87, 71, 33, 255, 91, 68, 32, 255, 85, 67, 34, 255, 86, 69, 44, 255, 87, 67, 36, 255, 84, 73, 36, 255, 86, 73, 36, 255, 103, 76, 40, 255, 107, 73, 30, 255, 105, 75, 37, 255, 106, 77, 38, 255, 106, 77, 43, 255, 108, 76, 38, 255, 117, 83, 34, 255, 120, 85, 35, 255, 119, 91, 28, 255, 111, 87, 29, 255, 111, 80, 45, 255, 108, 82, 41, 255, 107, 87, 32, 255, 108, 80, 40, 255, 114, 82, 41, 255, 114, 85, 38, 255, 112, 86, 45, 255, 111, 85, 46, 255, 116, 86, 47, 255, 119, 93, 45, 255, 116, 93, 52, 255, 115, 92, 62, 255, 118, 97, 51, 255, 122, 102, 46, 255, 125, 102, 55, 255, 125, 107, 61, 255, 130, 111, 53, 255, 134, 114, 52, 255, 134, 115, 65, 255, 130, 117, 69, 255, 127, 120, 68, 255, 125, 124, 72, 255, 137, 142, 89, 255, 144, 142, 88, 255, 136, 128, 80, 255, 143, 133, 75, 255, 141, 133, 67, 255, 143, 133, 68, 255, 148, 132, 71, 255, 156, 135, 73, 255, 151, 133, 68, 255, 146, 130, 64, 255, 153, 134, 65, 255, 152, 133, 66, 255, 144, 127, 67, 255, 143, 123, 60, 255, 138, 120, 54, 255, 129, 117, 54, 255, 123, 113, 52, 255, 122, 112, 53, 255, 116, 109, 46, 255, 126, 104, 42, 255, 128, 97, 46, 255, 125, 99, 44, 255, 125, 97, 29, 255, 129, 92, 37, 255, 123, 93, 35, 255, 124, 93, 33, 255, 129, 87, 29, 255, 120, 87, 30, 255, 117, 87, 26, 255, 117, 92, 36, 255, 125, 90, 32, 255, 125, 80, 24, 255, 125, 76, 28, 255, 126, 79, 27, 255, 129, 79, 25, 255, 129, 80, 15, 255, 124, 75, 23, 255, 120, 73, 20, 255, 125, 76, 21, 255, 125, 75, 25, 255, 120, 70, 23, 255, 120, 70, 18, 255, 117, 68, 9, 255, 118, 70, 11, 255, 116, 73, 7, 255, 117, 69, 11, 255, 121, 69, 14, 255, 124, 70, 13, 255, 129, 73, 11, 255, 136, 82, 11, 255, 142, 77, 16, 255, 149, 79, 10, 255, 150, 82, 8, 255, 149, 82, 6, 255, 138, 75, 8, 255, 128, 70, 9, 255, 120, 66, 2, 255, 117, 66, 4, 255, 118, 64, 6, 255, 121, 63, 11, 255, 120, 62, 14, 255, 117, 64, 9, 255, 114, 65, 8, 255, 109, 61, 7, 255, 114, 59, 4, 255, 117, 58, 10, 255, 123, 65, 14, 255, 122, 64, 7, 255, 122, 64, 5, 255, 128, 64, 4, 255, 129, 70, 6, 255, 129, 70, 12, 255, 129, 69, 10, 255, 138, 75, 8, 255, 147, 76, 10, 255, 159, 86, 7, 255, 168, 89, 3, 255, 168, 88, 6, 255, 161, 83, 5, 255, 159, 82, 3, 255, 158, 80, 5, 255, 154, 76, 7, 255, 145, 72, 4, 255, 138, 71, 8, 255, 134, 66, 14, 255, 128, 64, 7, 255, 126, 65, 7, 255, 123, 65, 6, 255, 123, 67, 6, 255, 121, 63, 4, 255, 122, 57, 4, 255, 115, 59, 4, 255, 107, 58, 13, 255, 117, 60, 12, 255, 120, 59, 6, 255, 112, 55, 4, 255, 114, 55, 6, 255, 109, 51, 9, 255, 108, 52, 14, 255, 112, 54, 11, 255, 111, 58, 3, 255, 111, 59, 3, 255, 108, 55, 9, 255, 113, 58, 7, 255, 111, 53, 4, 255, 113, 51, 6, 255, 118, 56, 12, 255, 110, 52, 7, 255, 109, 56, 4, 255, 114, 56, 3, 255, 113, 49, 4, 255, 111, 52, 8, 255, 111, 52, 6, 255, 109, 47, 5, 255, 102, 43, 0, 255, 93, 43, 13, 255, 80, 36, 22, 255, 68, 33, 9, 255, 38, 60, 81, 255, 28, 58, 86, 255, 24, 45, 64, 255, 14, 27, 44, 255, 7, 21, 22, 255, 1, 2, 6, 255, 1, 1, 0, 255, 3, 1, 5, 255, 3, 0, 7, 255, 67, 10, 1, 255, 134, 23, 4, 255, 100, 12, 5, 255, 73, 1, 4, 255, 103, 12, 6, 255, 138, 27, 2, 255, 158, 45, 2, 255, 168, 34, 5, 255, 118, 15, 4, 255, 35, 0, 5, 255, 15, 1, 3, 255, 7, 3, 1, 255, 7, 1, 0, 255, 15, 0, 1, 255, 15, 1, 2, 255, 29, 4, 5, 255, 41, 3, 5, 255, 39, 3, 1, 255, 24, 2, 1, 255, 14, 1, 3, 255, 13, 1, 0, 255, 6, 1, 0, 255, 7, 0, 4, 255, 7, 11, 24, 255, 5, 15, 31, 255, 4, 3, 2, 255, 7, 7, 5, 255, 3, 3, 6, 255, 0, 1, 1, 255, 1, 1, 0, 255, 2, 1, 1, 255, 1, 3, 2, 255, 0, 1, 3, 255, 0, 0, 2, 255, 0, 1, 1, 255, 1, 2, 2, 255, 0, 2, 5, 255, 5, 0, 6, 255, 2, 1, 4, 255, 1, 1, 5, 255, 3, 0, 5, 255, 2, 2, 5, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 2, 255, 1, 1, 7, 255, 3, 4, 16, 255, 2, 2, 12, 255, 0, 2, 5, 255, 0, 0, 2, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 1, 2, 255, 1, 1, 2, 255, 2, 0, 3, 255, 0, 0, 0, 255, 1, 2, 2, 255, 0, 0, 5, 255, 0, 1, 7, 255, 2, 1, 2, 255, 3, 1, 2, 255, 2, 0, 2, 255, 1, 0, 7, 255, 2, 1, 0, 255, 0, 0, 13, 255, 31, 28, 71, 255, 76, 88, 142, 255, 107, 114, 153, 255, 86, 86, 76, 255, 48, 50, 36, 255, 17, 21, 23, 255, 14, 9, 24, 255, 62, 56, 75, 255, 84, 87, 122, 255, 78, 88, 140, 255, 75, 72, 167, 255, 81, 79, 119, 255, 46, 42, 43, 255, 13, 16, 6, 255, 45, 25, 6, 255, 87, 50, 13, 255, 112, 73, 13, 255, 99, 59, 15, 255, 45, 31, 12, 255, 34, 27, 15, 255, 34, 35, 16, 255, 32, 43, 15, 255, 38, 53, 27, 255, 49, 64, 39, 255, 58, 76, 27, 255, 58, 76, 17, 255, 53, 63, 16, 255, 35, 38, 8, 255, 21, 17, 7, 255, 18, 9, 8, 255, 29, 18, 9, 255, 55, 36, 16, 255, 58, 40, 15, 255, 42, 26, 14, 255, 30, 20, 5, 255, 24, 15, 6, 255, 27, 20, 9, 255, 30, 23, 15, 255, 29, 21, 13, 255, 28, 22, 11, 255, 29, 22, 12, 255, 33, 23, 9, 255, 35, 27, 6, 255, 31, 24, 13, 255, 29, 24, 9, 255, 47, 28, 10, 255, 47, 29, 1, 255, 44, 32, 4, 255, 44, 26, 15, 255, 47, 28, 15, 255, 50, 32, 13, 255, 52, 31, 11, 255, 58, 36, 9, 255, 66, 38, 10, 255, 71, 36, 7, 255, 70, 35, 7, 255, 78, 47, 7, 255, 77, 48, 4, 255, 77, 45, 8, 255, 77, 43, 7, 255, 81, 46, 7, 255, 81, 44, 7, 255, 78, 39, 6, 255, 72, 39, 10, 255, 78, 43, 6, 255, 87, 45, 9, 255, 90, 52, 5, 255, 90, 54, 8, 255, 86, 44, 13, 255, 95, 49, 8, 255, 96, 52, 9, 255, 100, 57, 3, 255, 99, 53, 10, 255, 97, 53, 11, 255, 90, 51, 8, 255, 86, 51, 7, 255, 87, 52, 7, 255, 82, 44, 7, 255, 86, 48, 12, 255, 82, 46, 7, 255, 81, 50, 6, 255, 82, 53, 3, 255, 87, 58, 6, 255, 103, 62, 12, 255, 115, 65, 17, 255, 123, 76, 6, 255, 129, 79, 7, 255, 131, 76, 10, 255, 140, 85, 3, 255, 146, 91, 7, 255, 125, 80, 5, 255, 121, 76, 5, 255, 121, 71, 7, 255, 115, 67, 10, 255, 112, 62, 10, 255, 107, 61, 10, 255, 98, 54, 7, 255, 91, 49, 5, 255, 86, 48, 14, 255, 78, 45, 11, 255, 81, 44, 18, 255, 86, 46, 8, 255, 82, 48, 7, 255, 84, 52, 16, 255, 86, 51, 11, 255, 79, 50, 10, 255, 74, 50, 12, 255, 83, 50, 11, 255, 85, 51, 13, 255, 91, 58, 15, 255, 88, 56, 11, 255, 85, 50, 8, 255, 89, 50, 23, 255, 72, 48, 25, 255, 63, 47, 34, 255, 68, 47, 26, 255, 74, 53, 17, 255, 74, 51, 15, 255, 77, 49, 29, 255, 82, 59, 18, 255, 79, 56, 25, 255, 79, 58, 22, 255, 89, 65, 16, 255, 91, 60, 30, 255, 95, 63, 22, 255, 92, 65, 23, 255, 88, 65, 26, 255, 84, 67, 18, 255, 84, 62, 18, 255, 83, 64, 24, 255, 86, 62, 32, 255, 88, 63, 32, 255, 78, 68, 23, 255, 78, 67, 24, 255, 84, 66, 28, 255, 83, 64, 33, 255, 84, 69, 30, 255, 84, 71, 35, 255, 91, 66, 26, 255, 89, 68, 33, 255, 84, 67, 35, 255, 87, 74, 31, 255, 84, 72, 35, 255, 85, 70, 39, 255, 87, 71, 38, 255, 87, 70, 42, 255, 86, 72, 38, 255, 97, 77, 37, 255, 106, 75, 34, 255, 109, 74, 39, 255, 107, 79, 26, 255, 112, 81, 22, 255, 120, 80, 32, 255, 120, 79, 39, 255, 121, 86, 37, 255, 118, 86, 40, 255, 115, 86, 38, 255, 110, 81, 38, 255, 112, 82, 39, 255, 110, 83, 40, 255, 104, 80, 35, 255, 108, 87, 35, 255, 112, 89, 43, 255, 113, 86, 47, 255, 117, 87, 48, 255, 117, 88, 44, 255, 117, 92, 40, 255, 117, 93, 38, 255, 118, 95, 52, 255, 120, 99, 56, 255, 122, 101, 52, 255, 124, 104, 49, 255, 129, 109, 60, 255, 129, 112, 58, 255, 134, 117, 55, 255, 134, 117, 64, 255, 133, 117, 62, 255, 137, 122, 69, 255, 132, 121, 68, 255, 132, 128, 72, 255, 147, 143, 88, 255, 140, 132, 81, 255, 140, 129, 66, 255, 143, 130, 67, 255, 142, 129, 72, 255, 149, 131, 70, 255, 150, 131, 69, 255, 153, 133, 65, 255, 152, 133, 64, 255, 150, 130, 67, 255, 150, 132, 50, 255, 145, 126, 62, 255, 140, 120, 60, 255, 137, 123, 48, 255, 127, 116, 45, 255, 122, 113, 50, 255, 119, 111, 50, 255, 116, 108, 44, 255, 125, 101, 48, 255, 134, 97, 51, 255, 124, 97, 36, 255, 123, 96, 43, 255, 130, 94, 35, 255, 126, 92, 38, 255, 124, 89, 37, 255, 129, 88, 31, 255, 126, 85, 30, 255, 115, 85, 40, 255, 118, 91, 43, 255, 123, 86, 35, 255, 125, 81, 26, 255, 127, 80, 23, 255, 127, 82, 21, 255, 128, 80, 23, 255, 131, 77, 26, 255, 126, 73, 17, 255, 124, 74, 21, 255, 124, 74, 16, 255, 124, 73, 16, 255, 121, 71, 20, 255, 116, 71, 13, 255, 118, 74, 11, 255, 118, 71, 13, 255, 119, 72, 7, 255, 118, 71, 14, 255, 118, 69, 16, 255, 118, 67, 21, 255, 119, 71, 15, 255, 133, 79, 9, 255, 147, 80, 17, 255, 148, 82, 8, 255, 154, 84, 11, 255, 155, 86, 6, 255, 141, 78, 7, 255, 127, 73, 9, 255, 123, 70, 9, 255, 114, 68, 5, 255, 114, 65, 11, 255, 120, 64, 11, 255, 124, 62, 3, 255, 124, 63, 1, 255, 114, 64, 5, 255, 116, 66, 9, 255, 123, 65, 9, 255, 120, 63, 4, 255, 122, 65, 3, 255, 126, 67, 11, 255, 127, 69, 5, 255, 125, 67, 3, 255, 126, 68, 6, 255, 128, 69, 9, 255, 133, 72, 15, 255, 136, 72, 12, 255, 144, 77, 6, 255, 160, 87, 5, 255, 168, 89, 8, 255, 168, 88, 12, 255, 163, 85, 12, 255, 160, 83, 11, 255, 157, 81, 7, 255, 149, 78, 7, 255, 141, 74, 9, 255, 138, 72, 6, 255, 135, 69, 8, 255, 135, 71, 5, 255, 132, 69, 8, 255, 130, 66, 13, 255, 129, 65, 6, 255, 126, 62, 4, 255, 120, 62, 3, 255, 116, 62, 4, 255, 120, 61, 6, 255, 122, 61, 7, 255, 117, 57, 9, 255, 116, 57, 8, 255, 118, 57, 4, 255, 112, 53, 4, 255, 110, 53, 12, 255, 106, 54, 7, 255, 110, 57, 4, 255, 111, 55, 9, 255, 116, 57, 7, 255, 121, 55, 4, 255, 112, 54, 6, 255, 103, 51, 7, 255, 115, 52, 5, 255, 112, 53, 5, 255, 114, 58, 6, 255, 121, 61, 5, 255, 114, 51, 5, 255, 111, 48, 5, 255, 102, 46, 1, 255, 96, 44, 12, 255, 98, 49, 13, 255, 99, 48, 14, 255, 89, 42, 7, 255, 87, 39, 7, 255, 21, 38, 63, 255, 19, 59, 86, 255, 24, 58, 83, 255, 10, 40, 75, 255, 6, 22, 37, 255, 4, 4, 8, 255, 3, 1, 2, 255, 3, 0, 0, 255, 1, 0, 3, 255, 40, 6, 9, 255, 83, 7, 6, 255, 70, 5, 4, 255, 52, 3, 1, 255, 80, 5, 9, 255, 122, 16, 7, 255, 166, 40, 0, 255, 186, 45, 9, 255, 98, 15, 5, 255, 26, 2, 5, 255, 12, 2, 4, 255, 2, 1, 1, 255, 2, 1, 0, 255, 5, 0, 2, 255, 4, 2, 2, 255, 10, 3, 4, 255, 25, 4, 5, 255, 26, 1, 5, 255, 21, 2, 1, 255, 13, 2, 0, 255, 9, 2, 5, 255, 11, 3, 7, 255, 4, 12, 27, 255, 1, 28, 43, 255, 5, 11, 23, 255, 3, 0, 3, 255, 0, 3, 5, 255, 6, 14, 22, 255, 2, 2, 3, 255, 3, 3, 6, 255, 2, 3, 3, 255, 0, 1, 0, 255, 2, 1, 0, 255, 0, 1, 0, 255, 2, 0, 2, 255, 1, 1, 5, 255, 1, 1, 5, 255, 3, 1, 0, 255, 0, 2, 0, 255, 2, 2, 2, 255, 5, 0, 1, 255, 2, 1, 3, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 2, 255, 1, 1, 5, 255, 1, 0, 7, 255, 0, 1, 3, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 3, 255, 1, 1, 2, 255, 0, 1, 4, 255, 0, 1, 5, 255, 0, 2, 1, 255, 0, 1, 1, 255, 0, 1, 4, 255, 0, 1, 2, 255, 0, 2, 2, 255, 1, 0, 0, 255, 0, 0, 0, 255, 19, 20, 54, 255, 71, 75, 128, 255, 91, 95, 144, 255, 82, 95, 103, 255, 55, 49, 35, 255, 23, 19, 10, 255, 11, 11, 20, 255, 53, 44, 54, 255, 89, 79, 112, 255, 80, 81, 128, 255, 70, 75, 112, 255, 67, 65, 114, 255, 49, 48, 64, 255, 19, 19, 11, 255, 8, 5, 0, 255, 33, 23, 12, 255, 69, 40, 23, 255, 64, 35, 11, 255, 27, 21, 7, 255, 13, 11, 9, 255, 22, 26, 12, 255, 29, 33, 17, 255, 37, 46, 22, 255, 43, 57, 31, 255, 55, 71, 44, 255, 57, 75, 32, 255, 49, 61, 22, 255, 29, 33, 6, 255, 19, 17, 5, 255, 22, 11, 10, 255, 38, 22, 8, 255, 50, 36, 7, 255, 45, 35, 9, 255, 33, 26, 14, 255, 19, 15, 4, 255, 21, 17, 6, 255, 25, 22, 7, 255, 26, 21, 10, 255, 30, 24, 8, 255, 32, 25, 12, 255, 30, 23, 12, 255, 30, 24, 9, 255, 34, 27, 17, 255, 35, 28, 6, 255, 38, 27, 4, 255, 41, 29, 11, 255, 39, 28, 9, 255, 49, 22, 10, 255, 49, 27, 11, 255, 53, 32, 5, 255, 51, 29, 7, 255, 48, 31, 10, 255, 64, 33, 6, 255, 63, 30, 10, 255, 57, 35, 14, 255, 60, 35, 8, 255, 72, 38, 6, 255, 80, 46, 2, 255, 75, 49, 5, 255, 77, 44, 7, 255, 81, 45, 7, 255, 80, 42, 9, 255, 80, 47, 12, 255, 78, 45, 5, 255, 77, 42, 8, 255, 75, 40, 8, 255, 78, 45, 8, 255, 83, 48, 8, 255, 88, 53, 10, 255, 87, 52, 8, 255, 86, 51, 7, 255, 86, 51, 9, 255, 88, 51, 13, 255, 88, 48, 12, 255, 81, 44, 5, 255, 78, 45, 10, 255, 81, 48, 10, 255, 81, 46, 2, 255, 85, 50, 11, 255, 89, 45, 10, 255, 90, 46, 4, 255, 81, 48, 8, 255, 82, 52, 4, 255, 115, 71, 8, 255, 126, 74, 8, 255, 117, 74, 4, 255, 117, 70, 15, 255, 124, 73, 8, 255, 125, 77, 4, 255, 124, 80, 7, 255, 135, 85, 3, 255, 144, 90, 9, 255, 125, 78, 12, 255, 117, 70, 10, 255, 120, 71, 5, 255, 115, 65, 6, 255, 111, 61, 6, 255, 106, 58, 11, 255, 98, 56, 6, 255, 90, 52, 5, 255, 84, 46, 10, 255, 81, 44, 10, 255, 85, 46, 15, 255, 86, 47, 3, 255, 83, 48, 6, 255, 77, 50, 16, 255, 82, 45, 15, 255, 85, 50, 13, 255, 72, 50, 10, 255, 80, 51, 9, 255, 90, 54, 12, 255, 87, 54, 14, 255, 86, 53, 17, 255, 83, 54, 18, 255, 86, 49, 19, 255, 90, 52, 17, 255, 74, 52, 14, 255, 72, 53, 25, 255, 78, 52, 26, 255, 81, 54, 17, 255, 85, 53, 25, 255, 89, 56, 19, 255, 88, 53, 30, 255, 84, 56, 27, 255, 87, 63, 22, 255, 91, 59, 31, 255, 90, 63, 26, 255, 91, 61, 25, 255, 92, 61, 25, 255, 83, 61, 17, 255, 80, 60, 25, 255, 78, 65, 21, 255, 77, 62, 26, 255, 82, 64, 34, 255, 83, 67, 19, 255, 84, 66, 28, 255, 84, 70, 27, 255, 87, 67, 24, 255, 85, 68, 22, 255, 74, 70, 29, 255, 79, 68, 34, 255, 80, 69, 31, 255, 83, 69, 34, 255, 83, 69, 33, 255, 87, 73, 25, 255, 90, 72, 30, 255, 92, 70, 34, 255, 92, 71, 29, 255, 89, 74, 30, 255, 93, 75, 36, 255, 102, 74, 31, 255, 106, 71, 37, 255, 106, 72, 34, 255, 113, 76, 28, 255, 125, 80, 43, 255, 122, 79, 42, 255, 121, 81, 40, 255, 118, 83, 43, 255, 114, 81, 42, 255, 111, 79, 31, 255, 115, 83, 31, 255, 108, 78, 33, 255, 107, 81, 38, 255, 108, 83, 39, 255, 110, 86, 39, 255, 116, 88, 42, 255, 117, 87, 43, 255, 119, 88, 48, 255, 116, 88, 51, 255, 119, 93, 42, 255, 120, 94, 48, 255, 120, 96, 50, 255, 122, 99, 50, 255, 124, 103, 48, 255, 128, 107, 57, 255, 130, 108, 57, 255, 133, 112, 59, 255, 134, 111, 67, 255, 135, 115, 62, 255, 140, 122, 62, 255, 137, 125, 59, 255, 131, 126, 61, 255, 147, 141, 82, 255, 146, 137, 83, 255, 139, 126, 67, 255, 143, 129, 62, 255, 142, 127, 66, 255, 150, 126, 68, 255, 153, 131, 61, 255, 152, 130, 62, 255, 151, 130, 58, 255, 153, 131, 63, 255, 154, 131, 53, 255, 148, 126, 50, 255, 141, 120, 54, 255, 137, 121, 45, 255, 134, 119, 45, 255, 126, 113, 49, 255, 118, 109, 41, 255, 118, 106, 46, 255, 125, 99, 49, 255, 134, 101, 34, 255, 126, 100, 32, 255, 124, 98, 36, 255, 130, 95, 35, 255, 127, 93, 33, 255, 128, 89, 38, 255, 131, 88, 34, 255, 128, 88, 29, 255, 118, 87, 36, 255, 115, 89, 35, 255, 124, 90, 24, 255, 126, 84, 13, 255, 128, 82, 16, 255, 127, 82, 22, 255, 126, 80, 21, 255, 129, 77, 26, 255, 127, 77, 19, 255, 125, 77, 16, 255, 122, 71, 20, 255, 124, 72, 21, 255, 122, 72, 15, 255, 118, 73, 13, 255, 118, 73, 13, 255, 119, 69, 19, 255, 116, 70, 17, 255, 120, 74, 16, 255, 120, 72, 8, 255, 118, 70, 11, 255, 122, 71, 13, 255, 134, 77, 11, 255, 146, 80, 19, 255, 154, 85, 16, 255, 157, 86, 5, 255, 157, 81, 8, 255, 149, 79, 7, 255, 138, 77, 4, 255, 130, 71, 16, 255, 123, 65, 11, 255, 121, 66, 8, 255, 119, 65, 8, 255, 120, 63, 5, 255, 124, 66, 8, 255, 118, 62, 6, 255, 118, 64, 8, 255, 117, 65, 8, 255, 120, 64, 6, 255, 122, 66, 7, 255, 122, 68, 9, 255, 125, 72, 2, 255, 128, 72, 2, 255, 129, 67, 8, 255, 125, 63, 5, 255, 129, 68, 7, 255, 137, 75, 11, 255, 148, 80, 8, 255, 162, 85, 4, 255, 172, 91, 11, 255, 169, 91, 7, 255, 163, 85, 5, 255, 156, 75, 4, 255, 159, 79, 3, 255, 159, 81, 4, 255, 152, 76, 9, 255, 144, 76, 1, 255, 141, 73, 8, 255, 137, 72, 7, 255, 134, 68, 7, 255, 133, 66, 10, 255, 135, 70, 7, 255, 128, 67, 9, 255, 123, 64, 10, 255, 119, 60, 2, 255, 121, 62, 0, 255, 118, 60, 4, 255, 116, 60, 9, 255, 120, 62, 8, 255, 120, 58, 9, 255, 113, 56, 9, 255, 112, 57, 7, 255, 114, 58, 8, 255, 115, 58, 9, 255, 117, 57, 8, 255, 118, 59, 6, 255, 119, 56, 6, 255, 111, 57, 7, 255, 108, 60, 1, 255, 116, 55, 3, 255, 111, 48, 9, 255, 114, 47, 9, 255, 119, 48, 14, 255, 117, 50, 10, 255, 102, 41, 4, 255, 91, 35, 9, 255, 97, 49, 18, 255, 103, 57, 29, 255, 92, 47, 17, 255, 85, 41, 8, 255, 92, 44, 15, 255, 9, 57, 84, 255, 17, 59, 75, 255, 11, 60, 76, 255, 12, 58, 92, 255, 8, 46, 65, 255, 2, 16, 24, 255, 1, 0, 0, 255, 1, 2, 0, 255, 0, 2, 0, 255, 8, 2, 2, 255, 45, 3, 3, 255, 68, 5, 2, 255, 60, 4, 0, 255, 58, 2, 3, 255, 84, 7, 6, 255, 108, 20, 7, 255, 80, 13, 8, 255, 21, 1, 8, 255, 0, 1, 2, 255, 2, 0, 0, 255, 0, 0, 2, 255, 0, 1, 2, 255, 1, 1, 3, 255, 0, 1, 2, 255, 0, 1, 2, 255, 6, 1, 2, 255, 6, 4, 1, 255, 10, 3, 1, 255, 14, 2, 1, 255, 16, 0, 7, 255, 12, 22, 35, 255, 1, 35, 44, 255, 0, 12, 24, 255, 2, 0, 36, 255, 20, 88, 146, 255, 38, 102, 114, 255, 5, 3, 6, 255, 8, 1, 3, 255, 0, 2, 3, 255, 3, 3, 5, 255, 1, 1, 1, 255, 1, 0, 0, 255, 0, 0, 0, 255, 2, 1, 2, 255, 1, 0, 0, 255, 2, 1, 1, 255, 0, 0, 2, 255, 1, 5, 19, 255, 2, 5, 18, 255, 1, 0, 2, 255, 2, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 2, 255, 1, 1, 3, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 1, 255, 3, 3, 5, 255, 0, 2, 2, 255, 1, 0, 7, 255, 2, 0, 12, 255, 2, 2, 2, 255, 1, 0, 1, 255, 0, 0, 2, 255, 2, 1, 2, 255, 6, 8, 31, 255, 58, 66, 113, 255, 89, 96, 149, 255, 81, 86, 113, 255, 60, 54, 44, 255, 25, 20, 12, 255, 11, 8, 7, 255, 43, 39, 56, 255, 77, 73, 103, 255, 75, 81, 132, 255, 51, 67, 135, 255, 48, 65, 133, 255, 40, 43, 59, 255, 20, 12, 15, 255, 2, 2, 0, 255, 8, 7, 2, 255, 14, 12, 5, 255, 17, 12, 12, 255, 13, 12, 9, 255, 12, 11, 2, 255, 19, 17, 9, 255, 34, 30, 21, 255, 43, 38, 26, 255, 40, 39, 27, 255, 48, 56, 29, 255, 51, 62, 20, 255, 44, 51, 17, 255, 24, 27, 7, 255, 11, 12, 4, 255, 20, 8, 6, 255, 26, 17, 14, 255, 40, 32, 20, 255, 43, 31, 12, 255, 34, 25, 8, 255, 23, 24, 8, 255, 19, 20, 9, 255, 26, 24, 10, 255, 28, 24, 7, 255, 30, 23, 6, 255, 34, 24, 10, 255, 39, 24, 8, 255, 35, 22, 2, 255, 34, 26, 4, 255, 42, 27, 12, 255, 40, 24, 9, 255, 36, 27, 11, 255, 43, 29, 11, 255, 47, 24, 12, 255, 38, 24, 10, 255, 46, 29, 6, 255, 47, 30, 10, 255, 49, 32, 4, 255, 51, 34, 4, 255, 41, 25, 14, 255, 54, 31, 16, 255, 64, 34, 13, 255, 66, 34, 9, 255, 66, 32, 6, 255, 70, 37, 8, 255, 76, 46, 10, 255, 72, 43, 14, 255, 70, 41, 3, 255, 76, 41, 9, 255, 75, 40, 5, 255, 76, 47, 8, 255, 75, 45, 9, 255, 77, 43, 7, 255, 83, 43, 9, 255, 81, 45, 7, 255, 81, 47, 13, 255, 86, 47, 16, 255, 93, 49, 8, 255, 89, 51, 6, 255, 84, 51, 7, 255, 83, 51, 8, 255, 73, 44, 15, 255, 72, 43, 12, 255, 76, 42, 7, 255, 79, 40, 7, 255, 82, 42, 8, 255, 81, 44, 13, 255, 87, 50, 1, 255, 92, 53, 4, 255, 94, 55, 16, 255, 104, 65, 11, 255, 126, 76, 15, 255, 127, 75, 16, 255, 114, 72, 3, 255, 113, 68, 14, 255, 120, 69, 12, 255, 124, 74, 8, 255, 124, 74, 6, 255, 139, 83, 6, 255, 147, 86, 6, 255, 129, 78, 6, 255, 119, 70, 6, 255, 115, 66, 7, 255, 107, 60, 12, 255, 103, 61, 10, 255, 104, 60, 10, 255, 95, 57, 6, 255, 84, 52, 7, 255, 84, 48, 10, 255, 85, 46, 6, 255, 84, 46, 9, 255, 82, 49, 6, 255, 81, 50, 11, 255, 84, 46, 9, 255, 83, 50, 14, 255, 79, 47, 18, 255, 80, 47, 19, 255, 81, 52, 14, 255, 77, 53, 21, 255, 85, 51, 14, 255, 87, 56, 13, 255, 82, 59, 4, 255, 78, 53, 7, 255, 87, 53, 19, 255, 87, 50, 21, 255, 81, 53, 17, 255, 84, 54, 20, 255, 84, 54, 17, 255, 83, 54, 21, 255, 79, 50, 20, 255, 83, 55, 22, 255, 86, 58, 19, 255, 85, 57, 22, 255, 83, 57, 31, 255, 92, 64, 17, 255, 96, 66, 17, 255, 94, 62, 21, 255, 90, 61, 28, 255, 77, 58, 37, 255, 78, 61, 29, 255, 78, 63, 25, 255, 82, 67, 34, 255, 87, 65, 24, 255, 85, 67, 23, 255, 83, 64, 25, 255, 94, 69, 30, 255, 92, 66, 29, 255, 79, 66, 30, 255, 80, 66, 38, 255, 83, 67, 36, 255, 86, 69, 36, 255, 85, 69, 38, 255, 93, 76, 29, 255, 96, 75, 27, 255, 97, 73, 33, 255, 90, 73, 23, 255, 89, 71, 26, 255, 97, 72, 39, 255, 104, 73, 31, 255, 109, 77, 30, 255, 109, 78, 34, 255, 109, 76, 40, 255, 116, 80, 28, 255, 124, 83, 31, 255, 126, 84, 39, 255, 124, 86, 34, 255, 118, 83, 41, 255, 114, 80, 43, 255, 117, 86, 34, 255, 112, 82, 27, 255, 111, 83, 34, 255, 111, 83, 37, 255, 110, 84, 34, 255, 113, 87, 34, 255, 118, 88, 39, 255, 122, 91, 45, 255, 120, 93, 41, 255, 119, 91, 44, 255, 118, 88, 51, 255, 126, 97, 53, 255, 124, 97, 50, 255, 123, 99, 49, 255, 126, 104, 54, 255, 128, 107, 49, 255, 132, 112, 48, 255, 134, 113, 54, 255, 136, 115, 55, 255, 140, 118, 62, 255, 139, 122, 66, 255, 129, 122, 69, 255, 140, 134, 83, 255, 152, 144, 92, 255, 139, 127, 73, 255, 141, 127, 61, 255, 146, 130, 66, 255, 149, 125, 61, 255, 151, 126, 68, 255, 153, 127, 74, 255, 153, 129, 68, 255, 149, 128, 50, 255, 158, 132, 48, 255, 155, 130, 50, 255, 145, 124, 47, 255, 136, 116, 51, 255, 134, 116, 44, 255, 131, 115, 42, 255, 119, 105, 43, 255, 119, 107, 45, 255, 126, 100, 51, 255, 133, 99, 44, 255, 128, 101, 28, 255, 126, 96, 39, 255, 129, 94, 33, 255, 131, 94, 35, 255, 130, 90, 22, 255, 131, 91, 19, 255, 129, 88, 30, 255, 120, 86, 29, 255, 115, 89, 28, 255, 123, 88, 36, 255, 127, 82, 29, 255, 126, 79, 21, 255, 127, 81, 23, 255, 131, 82, 21, 255, 131, 82, 22, 255, 129, 79, 20, 255, 126, 75, 28, 255, 125, 74, 24, 255, 126, 74, 23, 255, 124, 75, 13, 255, 122, 75, 17, 255, 119, 73, 14, 255, 119, 68, 18, 255, 117, 71, 18, 255, 123, 74, 15, 255, 121, 70, 6, 255, 122, 73, 9, 255, 130, 76, 14, 255, 137, 77, 12, 255, 141, 82, 12, 255, 151, 83, 9, 255, 156, 84, 10, 255, 160, 82, 10, 255, 157, 82, 4, 255, 143, 75, 6, 255, 134, 71, 12, 255, 130, 64, 9, 255, 130, 69, 7, 255, 125, 71, 6, 255, 119, 66, 7, 255, 118, 65, 11, 255, 114, 61, 7, 255, 112, 62, 4, 255, 117, 66, 8, 255, 122, 63, 6, 255, 124, 64, 8, 255, 127, 70, 10, 255, 128, 69, 3, 255, 138, 71, 4, 255, 134, 71, 4, 255, 133, 72, 6, 255, 132, 74, 8, 255, 133, 74, 8, 255, 144, 76, 8, 255, 160, 81, 11, 255, 169, 87, 9, 255, 169, 89, 5, 255, 174, 93, 12, 255, 166, 82, 8, 255, 167, 84, 7, 255, 165, 86, 7, 255, 157, 78, 4, 255, 145, 77, 0, 255, 143, 75, 4, 255, 141, 75, 7, 255, 137, 71, 6, 255, 135, 69, 9, 255, 136, 70, 12, 255, 129, 67, 7, 255, 133, 68, 8, 255, 128, 63, 8, 255, 121, 62, 10, 255, 118, 64, 8, 255, 121, 62, 4, 255, 127, 59, 4, 255, 126, 62, 3, 255, 113, 63, 3, 255, 113, 61, 7, 255, 118, 58, 4, 255, 121, 59, 2, 255, 117, 59, 5, 255, 107, 54, 1, 255, 103, 54, 2, 255, 113, 53, 10, 255, 118, 54, 2, 255, 104, 44, 3, 255, 98, 35, 9, 255, 105, 41, 1, 255, 107, 46, 9, 255, 107, 52, 9, 255, 97, 47, 13, 255, 97, 48, 20, 255, 97, 54, 9, 255, 94, 49, 16, 255, 91, 46, 20, 255, 90, 44, 16, 255, 96, 52, 12, 255, 14, 34, 53, 255, 14, 19, 45, 255, 10, 51, 73, 255, 21, 55, 75, 255, 19, 47, 74, 255, 2, 18, 32, 255, 0, 2, 0, 255, 2, 0, 1, 255, 1, 0, 0, 255, 0, 0, 0, 255, 22, 5, 4, 255, 48, 5, 9, 255, 39, 2, 9, 255, 15, 4, 2, 255, 3, 2, 5, 255, 0, 1, 7, 255, 2, 1, 5, 255, 3, 1, 4, 255, 2, 0, 4, 255, 1, 1, 2, 255, 0, 1, 3, 255, 0, 0, 2, 255, 2, 0, 3, 255, 0, 0, 2, 255, 0, 0, 2, 255, 1, 0, 1, 255, 1, 1, 4, 255, 1, 0, 2, 255, 17, 9, 25, 255, 18, 33, 49, 255, 4, 26, 23, 255, 3, 2, 0, 255, 7, 24, 88, 255, 10, 133, 189, 255, 14, 157, 173, 255, 118, 228, 240, 255, 51, 119, 121, 255, 0, 0, 0, 255, 7, 8, 7, 255, 6, 1, 1, 255, 2, 2, 2, 255, 0, 2, 1, 255, 0, 1, 0, 255, 0, 2, 0, 255, 5, 1, 0, 255, 2, 3, 5, 255, 3, 5, 30, 255, 3, 10, 39, 255, 4, 14, 34, 255, 2, 8, 18, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 2, 255, 1, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 1, 1, 2, 255, 1, 1, 2, 255, 0, 0, 2, 255, 1, 1, 0, 255, 2, 0, 4, 255, 1, 0, 0, 255, 0, 0, 1, 255, 10, 7, 33, 255, 51, 48, 104, 255, 89, 97, 138, 255, 77, 86, 101, 255, 48, 55, 56, 255, 21, 22, 28, 255, 14, 13, 9, 255, 38, 29, 38, 255, 84, 65, 79, 255, 78, 82, 107, 255, 55, 65, 141, 255, 58, 73, 122, 255, 41, 47, 87, 255, 18, 13, 22, 255, 3, 1, 0, 255, 3, 4, 1, 255, 14, 7, 2, 255, 11, 6, 4, 255, 10, 7, 2, 255, 14, 14, 2, 255, 16, 12, 2, 255, 19, 18, 6, 255, 35, 36, 12, 255, 62, 43, 11, 255, 53, 41, 12, 255, 43, 40, 22, 255, 38, 37, 12, 255, 23, 25, 0, 255, 11, 11, 4, 255, 22, 11, 16, 255, 43, 26, 5, 255, 52, 37, 10, 255, 36, 31, 9, 255, 20, 19, 5, 255, 24, 17, 7, 255, 28, 21, 6, 255, 22, 21, 8, 255, 24, 22, 10, 255, 29, 24, 10, 255, 33, 27, 8, 255, 36, 27, 10, 255, 36, 25, 9, 255, 39, 25, 12, 255, 42, 26, 10, 255, 42, 31, 7, 255, 40, 30, 11, 255, 36, 27, 6, 255, 41, 31, 14, 255, 36, 24, 7, 255, 37, 24, 6, 255, 40, 28, 21, 255, 41, 22, 13, 255, 50, 26, 19, 255, 45, 33, 6, 255, 46, 29, 0, 255, 48, 25, 12, 255, 45, 32, 15, 255, 50, 29, 10, 255, 56, 30, 6, 255, 66, 34, 12, 255, 73, 42, 6, 255, 75, 44, 6, 255, 75, 42, 11, 255, 66, 41, 12, 255, 64, 35, 11, 255, 62, 33, 4, 255, 64, 37, 8, 255, 68, 39, 12, 255, 74, 38, 10, 255, 76, 36, 13, 255, 73, 40, 9, 255, 75, 47, 9, 255, 84, 49, 8, 255, 91, 49, 4, 255, 86, 46, 9, 255, 80, 45, 14, 255, 80, 41, 4, 255, 74, 37, 15, 255, 77, 44, 8, 255, 79, 44, 11, 255, 81, 44, 4, 255, 86, 49, 9, 255, 96, 56, 9, 255, 96, 59, 14, 255, 94, 61, 7, 255, 100, 62, 13, 255, 104, 59, 4, 255, 117, 68, 4, 255, 115, 69, 13, 255, 111, 69, 4, 255, 114, 68, 4, 255, 113, 70, 7, 255, 121, 70, 9, 255, 128, 69, 13, 255, 137, 80, 12, 255, 146, 88, 5, 255, 126, 76, 4, 255, 119, 70, 5, 255, 113, 62, 5, 255, 107, 61, 11, 255, 106, 64, 13, 255, 103, 62, 7, 255, 95, 58, 6, 255, 84, 50, 13, 255, 81, 49, 8, 255, 87, 51, 4, 255, 82, 49, 7, 255, 80, 48, 10, 255, 83, 50, 11, 255, 85, 49, 10, 255, 87, 52, 12, 255, 83, 52, 8, 255, 81, 51, 6, 255, 82, 51, 9, 255, 81, 52, 16, 255, 90, 53, 16, 255, 90, 56, 9, 255, 87, 55, 4, 255, 88, 54, 13, 255, 84, 52, 12, 255, 81, 51, 17, 255, 80, 50, 18, 255, 82, 56, 9, 255, 77, 51, 11, 255, 80, 55, 27, 255, 79, 59, 19, 255, 78, 58, 18, 255, 91, 63, 12, 255, 89, 62, 19, 255, 84, 60, 28, 255, 94, 65, 16, 255, 99, 66, 21, 255, 95, 60, 23, 255, 89, 58, 29, 255, 80, 61, 34, 255, 85, 63, 27, 255, 85, 62, 32, 255, 82, 62, 32, 255, 87, 63, 25, 255, 85, 65, 32, 255, 84, 63, 25, 255, 85, 67, 25, 255, 89, 65, 28, 255, 87, 65, 27, 255, 91, 67, 31, 255, 85, 62, 34, 255, 90, 73, 27, 255, 87, 70, 22, 255, 91, 72, 26, 255, 98, 78, 26, 255, 93, 73, 29, 255, 87, 72, 33, 255, 86, 70, 29, 255, 95, 71, 28, 255, 98, 72, 25, 255, 105, 72, 42, 255, 109, 76, 38, 255, 110, 76, 32, 255, 113, 78, 36, 255, 119, 81, 34, 255, 122, 84, 27, 255, 125, 87, 30, 255, 117, 81, 39, 255, 109, 77, 32, 255, 113, 82, 37, 255, 112, 79, 37, 255, 113, 80, 37, 255, 112, 81, 40, 255, 112, 84, 37, 255, 114, 85, 30, 255, 118, 86, 33, 255, 121, 88, 36, 255, 120, 91, 32, 255, 121, 93, 40, 255, 124, 94, 45, 255, 126, 94, 38, 255, 128, 98, 42, 255, 127, 103, 43, 255, 128, 108, 51, 255, 127, 107, 48, 255, 131, 111, 55, 255, 135, 113, 60, 255, 134, 114, 56, 255, 137, 117, 56, 255, 137, 118, 56, 255, 135, 120, 59, 255, 135, 123, 68, 255, 157, 146, 90, 255, 148, 132, 79, 255, 140, 121, 56, 255, 148, 129, 57, 255, 147, 127, 56, 255, 147, 124, 61, 255, 153, 128, 71, 255, 154, 130, 69, 255, 149, 126, 50, 255, 158, 131, 49, 255, 155, 128, 55, 255, 146, 125, 47, 255, 136, 116, 47, 255, 133, 113, 49, 255, 131, 112, 46, 255, 124, 108, 46, 255, 122, 109, 42, 255, 125, 102, 39, 255, 130, 97, 49, 255, 128, 95, 43, 255, 125, 94, 29, 255, 128, 93, 26, 255, 131, 92, 35, 255, 134, 90, 26, 255, 129, 88, 25, 255, 129, 87, 26, 255, 124, 83, 35, 255, 115, 84, 33, 255, 119, 88, 18, 255, 127, 87, 15, 255, 128, 83, 19, 255, 129, 79, 24, 255, 129, 80, 19, 255, 131, 82, 17, 255, 128, 79, 14, 255, 130, 79, 15, 255, 128, 77, 19, 255, 128, 76, 22, 255, 128, 79, 16, 255, 122, 75, 20, 255, 117, 71, 12, 255, 121, 71, 15, 255, 124, 77, 12, 255, 127, 73, 11, 255, 124, 67, 13, 255, 125, 73, 13, 255, 131, 76, 9, 255, 134, 75, 7, 255, 137, 82, 5, 255, 150, 85, 5, 255, 156, 84, 15, 255, 165, 87, 15, 255, 164, 87, 10, 255, 150, 78, 11, 255, 138, 73, 3, 255, 128, 70, 11, 255, 126, 71, 10, 255, 124, 70, 4, 255, 123, 68, 8, 255, 121, 64, 9, 255, 118, 65, 5, 255, 120, 69, 7, 255, 124, 66, 7, 255, 126, 64, 5, 255, 125, 65, 6, 255, 121, 64, 4, 255, 129, 71, 10, 255, 134, 71, 6, 255, 133, 69, 5, 255, 131, 71, 5, 255, 129, 71, 5, 255, 132, 75, 8, 255, 145, 80, 12, 255, 159, 84, 14, 255, 168, 88, 8, 255, 170, 89, 7, 255, 178, 96, 14, 255, 170, 89, 3, 255, 167, 87, 7, 255, 164, 87, 8, 255, 159, 83, 2, 255, 154, 82, 8, 255, 145, 79, 2, 255, 141, 75, 2, 255, 138, 71, 1, 255, 136, 69, 3, 255, 131, 66, 12, 255, 127, 67, 5, 255, 133, 67, 2, 255, 137, 63, 8, 255, 128, 60, 9, 255, 121, 62, 6, 255, 120, 61, 2, 255, 124, 62, 6, 255, 123, 61, 4, 255, 120, 62, 0, 255, 117, 60, 1, 255, 118, 62, 2, 255, 118, 57, 4, 255, 110, 43, 5, 255, 98, 33, 4, 255, 89, 34, 1, 255, 98, 36, 11, 255, 102, 37, 5, 255, 87, 33, 7, 255, 90, 38, 10, 255, 102, 47, 3, 255, 96, 41, 8, 255, 100, 50, 14, 255, 98, 56, 8, 255, 96, 54, 10, 255, 93, 51, 9, 255, 91, 45, 16, 255, 98, 46, 17, 255, 101, 49, 10, 255, 100, 49, 13, 255, 35, 39, 101, 255, 26, 69, 108, 255, 23, 56, 78, 255, 10, 47, 75, 255, 13, 42, 73, 255, 5, 30, 50, 255, 0, 11, 19, 255, 0, 0, 4, 255, 4, 0, 4, 255, 2, 0, 7, 255, 5, 2, 19, 255, 8, 2, 25, 255, 5, 0, 32, 255, 1, 1, 23, 255, 4, 1, 4, 255, 3, 2, 4, 255, 2, 1, 7, 255, 1, 3, 3, 255, 0, 1, 1, 255, 0, 1, 3, 255, 0, 0, 3, 255, 2, 1, 3, 255, 1, 0, 2, 255, 2, 0, 2, 255, 2, 0, 2, 255, 2, 0, 1, 255, 6, 1, 4, 255, 2, 1, 6, 255, 5, 17, 31, 255, 4, 20, 20, 255, 2, 0, 5, 255, 8, 39, 96, 255, 16, 197, 239, 255, 15, 202, 167, 255, 4, 46, 34, 255, 31, 73, 83, 255, 116, 241, 248, 255, 44, 99, 103, 255, 0, 0, 0, 255, 5, 10, 7, 255, 1, 0, 0, 255, 3, 1, 2, 255, 0, 2, 3, 255, 2, 0, 2, 255, 1, 2, 9, 255, 5, 5, 31, 255, 5, 7, 32, 255, 3, 9, 22, 255, 0, 19, 26, 255, 5, 25, 35, 255, 4, 9, 23, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 1, 1, 255, 0, 1, 3, 255, 1, 1, 1, 255, 0, 0, 4, 255, 1, 1, 2, 255, 0, 0, 0, 255, 9, 9, 29, 255, 39, 41, 87, 255, 72, 79, 126, 255, 79, 89, 116, 255, 49, 58, 54, 255, 20, 24, 11, 255, 8, 5, 9, 255, 38, 30, 46, 255, 73, 79, 92, 255, 72, 79, 123, 255, 73, 72, 121, 255, 59, 66, 134, 255, 49, 49, 76, 255, 25, 22, 15, 255, 0, 0, 0, 255, 6, 2, 1, 255, 12, 6, 11, 255, 5, 4, 2, 255, 7, 3, 2, 255, 14, 6, 9, 255, 9, 7, 6, 255, 14, 9, 4, 255, 22, 15, 10, 255, 40, 25, 20, 255, 71, 44, 14, 255, 64, 43, 7, 255, 26, 22, 8, 255, 15, 16, 6, 255, 8, 8, 4, 255, 21, 19, 7, 255, 35, 28, 7, 255, 40, 27, 12, 255, 40, 26, 10, 255, 28, 19, 7, 255, 24, 19, 6, 255, 19, 18, 1, 255, 28, 23, 7, 255, 30, 20, 9, 255, 31, 18, 12, 255, 29, 24, 12, 255, 25, 24, 12, 255, 30, 27, 12, 255, 32, 27, 12, 255, 38, 31, 11, 255, 33, 25, 10, 255, 44, 29, 20, 255, 48, 28, 13, 255, 42, 31, 13, 255, 42, 30, 12, 255, 53, 33, 12, 255, 46, 26, 12, 255, 41, 31, 10, 255, 42, 30, 6, 255, 50, 33, 4, 255, 54, 28, 13, 255, 46, 29, 10, 255, 52, 31, 4, 255, 54, 29, 8, 255, 45, 32, 10, 255, 53, 36, 6, 255, 51, 38, 8, 255, 53, 35, 13, 255, 67, 41, 5, 255, 73, 43, 4, 255, 66, 35, 6, 255, 64, 37, 14, 255, 62, 38, 7, 255, 62, 38, 8, 255, 62, 34, 9, 255, 66, 34, 3, 255, 72, 36, 8, 255, 70, 37, 10, 255, 66, 40, 9, 255, 71, 47, 8, 255, 76, 47, 5, 255, 82, 47, 9, 255, 77, 42, 6, 255, 75, 45, 12, 255, 76, 47, 7, 255, 85, 50, 7, 255, 85, 46, 8, 255, 87, 51, 11, 255, 89, 52, 13, 255, 96, 54, 12, 255, 95, 55, 5, 255, 95, 53, 13, 255, 94, 56, 8, 255, 90, 55, 15, 255, 99, 62, 8, 255, 115, 69, 2, 255, 121, 66, 14, 255, 117, 68, 10, 255, 115, 68, 3, 255, 111, 68, 4, 255, 119, 71, 3, 255, 127, 75, 10, 255, 130, 84, 5, 255, 137, 88, 3, 255, 118, 74, 8, 255, 115, 69, 10, 255, 115, 64, 5, 255, 111, 64, 3, 255, 107, 60, 5, 255, 100, 57, 5, 255, 97, 58, 9, 255, 88, 51, 13, 255, 82, 48, 4, 255, 84, 51, 6, 255, 80, 48, 9, 255, 78, 44, 12, 255, 84, 48, 10, 255, 86, 52, 5, 255, 85, 52, 10, 255, 79, 46, 10, 255, 82, 47, 12, 255, 89, 51, 16, 255, 78, 51, 11, 255, 88, 56, 11, 255, 95, 55, 14, 255, 85, 57, 7, 255, 83, 58, 15, 255, 81, 53, 16, 255, 78, 55, 20, 255, 77, 55, 11, 255, 77, 54, 17, 255, 79, 56, 18, 255, 80, 56, 16, 255, 82, 59, 18, 255, 84, 62, 18, 255, 87, 57, 15, 255, 86, 63, 18, 255, 90, 60, 24, 255, 94, 64, 21, 255, 98, 63, 31, 255, 95, 62, 25, 255, 87, 64, 15, 255, 86, 65, 22, 255, 88, 66, 17, 255, 89, 66, 20, 255, 91, 65, 32, 255, 91, 67, 30, 255, 87, 65, 26, 255, 85, 68, 21, 255, 78, 67, 18, 255, 88, 67, 25, 255, 87, 67, 29, 255, 91, 72, 25, 255, 92, 69, 27, 255, 89, 70, 26, 255, 89, 71, 25, 255, 90, 69, 33, 255, 92, 70, 29, 255, 89, 69, 25, 255, 90, 74, 33, 255, 88, 73, 29, 255, 91, 72, 33, 255, 96, 77, 28, 255, 103, 76, 34, 255, 112, 77, 31, 255, 114, 77, 23, 255, 116, 75, 44, 255, 116, 78, 37, 255, 124, 79, 39, 255, 125, 82, 34, 255, 121, 84, 31, 255, 113, 81, 34, 255, 112, 81, 38, 255, 116, 83, 34, 255, 114, 81, 31, 255, 110, 79, 30, 255, 113, 82, 33, 255, 116, 85, 33, 255, 120, 86, 36, 255, 122, 87, 37, 255, 123, 89, 40, 255, 124, 94, 46, 255, 122, 94, 45, 255, 130, 98, 45, 255, 130, 99, 46, 255, 132, 107, 37, 255, 129, 106, 55, 255, 127, 103, 55, 255, 130, 108, 59, 255, 132, 112, 59, 255, 134, 113, 57, 255, 137, 117, 56, 255, 136, 116, 55, 255, 136, 120, 56, 255, 129, 119, 62, 255, 149, 141, 85, 255, 154, 141, 90, 255, 139, 121, 70, 255, 142, 122, 64, 255, 145, 124, 60, 255, 146, 124, 51, 255, 151, 126, 57, 255, 154, 129, 57, 255, 153, 128, 57, 255, 155, 129, 47, 255, 153, 127, 38, 255, 145, 120, 55, 255, 138, 116, 55, 255, 136, 114, 39, 255, 135, 110, 46, 255, 128, 107, 44, 255, 123, 108, 37, 255, 123, 103, 39, 255, 127, 100, 31, 255, 132, 96, 38, 255, 132, 96, 33, 255, 130, 94, 24, 255, 133, 95, 28, 255, 135, 89, 36, 255, 128, 87, 33, 255, 132, 87, 28, 255, 132, 86, 20, 255, 116, 84, 21, 255, 115, 82, 34, 255, 125, 82, 29, 255, 132, 84, 21, 255, 129, 77, 24, 255, 132, 80, 25, 255, 131, 82, 14, 255, 131, 80, 14, 255, 134, 80, 18, 255, 131, 79, 14, 255, 130, 77, 14, 255, 128, 77, 14, 255, 123, 75, 17, 255, 120, 75, 13, 255, 121, 75, 14, 255, 126, 76, 7, 255, 127, 73, 8, 255, 125, 71, 16, 255, 128, 74, 13, 255, 130, 73, 7, 255, 132, 75, 9, 255, 140, 81, 7, 255, 152, 84, 8, 255, 156, 86, 8, 255, 165, 90, 11, 255, 166, 89, 12, 255, 157, 85, 9, 255, 144, 78, 4, 255, 134, 73, 8, 255, 129, 69, 4, 255, 125, 66, 2, 255, 128, 69, 9, 255, 123, 66, 11, 255, 118, 67, 10, 255, 117, 66, 8, 255, 121, 68, 6, 255, 118, 67, 4, 255, 121, 68, 5, 255, 127, 69, 5, 255, 130, 69, 9, 255, 133, 71, 8, 255, 133, 69, 8, 255, 133, 69, 9, 255, 132, 72, 9, 255, 132, 73, 7, 255, 140, 76, 3, 255, 157, 86, 6, 255, 167, 90, 6, 255, 170, 89, 10, 255, 178, 93, 10, 255, 174, 93, 1, 255, 168, 90, 6, 255, 164, 88, 7, 255, 162, 87, 1, 255, 157, 81, 6, 255, 148, 79, 2, 255, 143, 76, 4, 255, 144, 76, 4, 255, 142, 74, 3, 255, 133, 68, 11, 255, 129, 66, 6, 255, 136, 67, 8, 255, 137, 67, 4, 255, 127, 63, 0, 255, 125, 64, 7, 255, 126, 63, 8, 255, 126, 62, 6, 255, 124, 61, 5, 255, 125, 64, 5, 255, 120, 58, 12, 255, 123, 59, 11, 255, 122, 60, 5, 255, 114, 49, 11, 255, 94, 28, 11, 255, 85, 28, 5, 255, 84, 33, 11, 255, 88, 36, 8, 255, 94, 36, 6, 255, 102, 45, 6, 255, 103, 49, 6, 255, 94, 42, 10, 255, 95, 47, 17, 255, 94, 49, 17, 255, 93, 51, 9, 255, 94, 55, 9, 255, 90, 46, 14, 255, 94, 41, 18, 255, 103, 46, 17, 255, 106, 49, 10, 255, 42, 92, 130, 255, 28, 74, 103, 255, 27, 58, 79, 255, 10, 49, 74, 255, 4, 56, 83, 255, 13, 54, 75, 255, 9, 32, 49, 255, 5, 14, 16, 255, 0, 0, 3, 255, 3, 1, 12, 255, 1, 0, 35, 255, 0, 2, 42, 255, 1, 0, 43, 255, 3, 2, 31, 255, 3, 1, 10, 255, 6, 1, 4, 255, 2, 2, 4, 255, 0, 3, 0, 255, 4, 1, 6, 255, 1, 0, 6, 255, 1, 0, 6, 255, 2, 1, 5, 255, 0, 0, 4, 255, 1, 0, 3, 255, 2, 1, 3, 255, 0, 2, 2, 255, 3, 1, 1, 255, 3, 0, 5, 255, 3, 2, 0, 255, 2, 0, 18, 255, 11, 87, 153, 255, 14, 216, 248, 255, 3, 165, 128, 255, 3, 23, 12, 255, 12, 55, 80, 255, 0, 21, 31, 255, 44, 90, 106, 255, 118, 243, 254, 255, 28, 86, 84, 255, 0, 0, 0, 255, 10, 10, 10, 255, 4, 0, 0, 255, 3, 0, 3, 255, 1, 5, 15, 255, 2, 6, 24, 255, 2, 5, 18, 255, 2, 2, 6, 255, 4, 9, 23, 255, 0, 21, 42, 255, 4, 34, 45, 255, 4, 14, 19, 255, 1, 0, 1, 255, 1, 1, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 2, 255, 2, 1, 5, 255, 2, 1, 1, 255, 0, 0, 0, 255, 1, 2, 15, 255, 34, 38, 80, 255, 68, 77, 130, 255, 66, 79, 112, 255, 47, 56, 67, 255, 16, 21, 21, 255, 5, 7, 10, 255, 26, 25, 44, 255, 73, 64, 103, 255, 77, 82, 133, 255, 44, 64, 169, 255, 42, 61, 147, 255, 43, 52, 57, 255, 11, 18, 35, 255, 0, 1, 2, 255, 1, 0, 0, 255, 6, 4, 4, 255, 2, 6, 4, 255, 3, 3, 2, 255, 9, 5, 4, 255, 8, 5, 3, 255, 6, 4, 3, 255, 7, 4, 3, 255, 15, 8, 5, 255, 24, 17, 9, 255, 42, 22, 7, 255, 37, 24, 4, 255, 13, 13, 3, 255, 12, 11, 6, 255, 22, 15, 7, 255, 38, 27, 9, 255, 47, 31, 10, 255, 38, 21, 10, 255, 20, 15, 4, 255, 16, 19, 5, 255, 20, 21, 6, 255, 23, 21, 9, 255, 22, 16, 9, 255, 26, 21, 14, 255, 27, 24, 12, 255, 28, 23, 3, 255, 30, 26, 5, 255, 28, 24, 14, 255, 33, 28, 18, 255, 37, 30, 14, 255, 43, 34, 2, 255, 46, 33, 9, 255, 44, 30, 11, 255, 42, 32, 14, 255, 47, 30, 14, 255, 49, 32, 10, 255, 44, 29, 11, 255, 38, 25, 13, 255, 42, 25, 13, 255, 42, 28, 12, 255, 43, 33, 8, 255, 46, 31, 9, 255, 45, 29, 14, 255, 45, 28, 9, 255, 45, 30, 8, 255, 40, 29, 15, 255, 46, 30, 14, 255, 53, 34, 2, 255, 59, 37, 11, 255, 58, 39, 13, 255, 58, 41, 5, 255, 58, 36, 10, 255, 68, 33, 13, 255, 58, 33, 6, 255, 59, 39, 7, 255, 66, 36, 10, 255, 72, 37, 12, 255, 71, 39, 9, 255, 70, 39, 8, 255, 74, 43, 4, 255, 71, 40, 4, 255, 77, 45, 6, 255, 79, 46, 8, 255, 77, 44, 16, 255, 76, 49, 6, 255, 77, 48, 12, 255, 90, 58, 8, 255, 89, 52, 9, 255, 95, 55, 11, 255, 90, 54, 8, 255, 87, 56, 6, 255, 87, 55, 8, 255, 95, 56, 4, 255, 100, 56, 9, 255, 96, 54, 7, 255, 101, 60, 10, 255, 110, 62, 11, 255, 121, 70, 8, 255, 114, 68, 7, 255, 105, 65, 5, 255, 111, 65, 13, 255, 121, 74, 8, 255, 122, 75, 7, 255, 130, 81, 9, 255, 138, 88, 5, 255, 122, 79, 7, 255, 114, 68, 7, 255, 116, 64, 9, 255, 110, 63, 13, 255, 103, 60, 6, 255, 100, 56, 12, 255, 101, 55, 9, 255, 96, 50, 6, 255, 87, 50, 4, 255, 81, 49, 11, 255, 77, 43, 13, 255, 80, 45, 15, 255, 88, 54, 12, 255, 90, 52, 6, 255, 79, 48, 12, 255, 80, 49, 22, 255, 89, 49, 15, 255, 92, 51, 10, 255, 89, 54, 14, 255, 92, 54, 11, 255, 89, 55, 13, 255, 85, 56, 10, 255, 85, 54, 15, 255, 86, 56, 18, 255, 82, 56, 19, 255, 81, 55, 15, 255, 79, 50, 27, 255, 82, 57, 16, 255, 83, 58, 17, 255, 83, 58, 19, 255, 84, 60, 11, 255, 86, 58, 12, 255, 85, 59, 13, 255, 89, 60, 25, 255, 97, 62, 18, 255, 96, 61, 27, 255, 90, 65, 24, 255, 87, 66, 23, 255, 82, 60, 15, 255, 84, 68, 21, 255, 83, 66, 25, 255, 92, 65, 27, 255, 88, 61, 28, 255, 93, 63, 18, 255, 91, 66, 27, 255, 86, 64, 22, 255, 95, 69, 18, 255, 84, 67, 32, 255, 83, 69, 30, 255, 93, 70, 27, 255, 92, 70, 27, 255, 89, 72, 24, 255, 92, 73, 26, 255, 94, 71, 38, 255, 95, 71, 33, 255, 92, 71, 17, 255, 92, 72, 26, 255, 90, 72, 33, 255, 91, 75, 20, 255, 98, 73, 23, 255, 111, 76, 34, 255, 113, 75, 38, 255, 112, 77, 32, 255, 120, 83, 31, 255, 126, 83, 26, 255, 128, 81, 31, 255, 125, 86, 33, 255, 115, 83, 31, 255, 114, 83, 28, 255, 115, 80, 30, 255, 117, 83, 36, 255, 113, 81, 30, 255, 112, 81, 33, 255, 118, 85, 41, 255, 118, 85, 36, 255, 125, 88, 36, 255, 126, 87, 42, 255, 122, 92, 47, 255, 119, 93, 39, 255, 128, 100, 35, 255, 131, 99, 46, 255, 128, 100, 48, 255, 128, 101, 51, 255, 130, 105, 48, 255, 131, 108, 52, 255, 132, 111, 48, 255, 134, 115, 53, 255, 136, 116, 56, 255, 137, 114, 57, 255, 140, 122, 49, 255, 130, 118, 56, 255, 140, 131, 72, 255, 159, 149, 89, 255, 143, 126, 70, 255, 140, 121, 54, 255, 142, 124, 51, 255, 147, 123, 55, 255, 152, 123, 55, 255, 152, 122, 55, 255, 153, 123, 60, 255, 156, 128, 47, 255, 157, 127, 46, 255, 149, 120, 50, 255, 139, 115, 46, 255, 138, 113, 36, 255, 138, 107, 41, 255, 133, 105, 38, 255, 125, 107, 25, 255, 123, 107, 45, 255, 129, 101, 38, 255, 135, 97, 30, 255, 136, 96, 31, 255, 130, 93, 25, 255, 131, 92, 30, 255, 134, 92, 29, 255, 128, 90, 25, 255, 134, 89, 21, 255, 137, 86, 17, 255, 120, 87, 22, 255, 117, 87, 28, 255, 126, 86, 24, 255, 131, 84, 22, 255, 133, 80, 24, 255, 135, 81, 24, 255, 133, 83, 11, 255, 135, 80, 19, 255, 136, 77, 20, 255, 131, 75, 14, 255, 133, 78, 11, 255, 128, 77, 12, 255, 120, 74, 9, 255, 120, 76, 12, 255, 120, 75, 14, 255, 122, 72, 8, 255, 119, 74, 8, 255, 122, 78, 14, 255, 128, 76, 10, 255, 128, 75, 12, 255, 133, 76, 17, 255, 141, 77, 7, 255, 157, 84, 17, 255, 162, 91, 10, 255, 165, 93, 3, 255, 162, 85, 4, 255, 162, 87, 7, 255, 147, 79, 4, 255, 137, 70, 7, 255, 131, 68, 8, 255, 124, 66, 3, 255, 125, 67, 6, 255, 123, 64, 4, 255, 124, 67, 8, 255, 128, 66, 12, 255, 123, 61, 8, 255, 120, 68, 6, 255, 125, 70, 7, 255, 134, 69, 6, 255, 136, 68, 10, 255, 134, 72, 7, 255, 135, 70, 3, 255, 134, 68, 3, 255, 132, 68, 4, 255, 135, 73, 7, 255, 147, 80, 7, 255, 156, 84, 2, 255, 161, 85, 6, 255, 172, 91, 13, 255, 179, 95, 9, 255, 180, 98, 6, 255, 171, 92, 5, 255, 167, 88, 8, 255, 170, 90, 7, 255, 163, 85, 2, 255, 153, 80, 1, 255, 149, 77, 11, 255, 151, 77, 9, 255, 150, 79, 4, 255, 139, 74, 5, 255, 128, 65, 8, 255, 133, 67, 7, 255, 137, 68, 4, 255, 136, 69, 9, 255, 129, 66, 7, 255, 124, 66, 1, 255, 126, 68, 3, 255, 128, 66, 10, 255, 131, 61, 7, 255, 126, 59, 5, 255, 122, 63, 6, 255, 123, 65, 8, 255, 122, 58, 7, 255, 92, 30, 6, 255, 82, 31, 4, 255, 82, 34, 7, 255, 91, 37, 6, 255, 103, 47, 4, 255, 102, 46, 4, 255, 99, 49, 12, 255, 97, 48, 20, 255, 95, 45, 12, 255, 96, 45, 12, 255, 100, 45, 14, 255, 106, 50, 10, 255, 102, 45, 15, 255, 102, 51, 17, 255, 104, 49, 9, 255, 109, 51, 8, 255, 33, 82, 94, 255, 40, 76, 113, 255, 31, 76, 134, 255, 28, 81, 117, 255, 17, 73, 107, 255, 17, 63, 92, 255, 12, 58, 63, 255, 8, 36, 51, 255, 4, 15, 35, 255, 3, 3, 23, 255, 2, 1, 35, 255, 0, 1, 51, 255, 4, 0, 51, 255, 1, 1, 24, 255, 0, 2, 4, 255, 1, 0, 5, 255, 1, 0, 5, 255, 1, 1, 1, 255, 1, 1, 4, 255, 1, 0, 6, 255, 0, 0, 3, 255, 0, 0, 3, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 2, 255, 0, 1, 1, 255, 1, 1, 5, 255, 3, 1, 2, 255, 1, 0, 0, 255, 5, 28, 46, 255, 9, 167, 171, 255, 5, 108, 81, 255, 3, 7, 0, 255, 4, 0, 0, 255, 4, 19, 25, 255, 17, 82, 103, 255, 0, 17, 20, 255, 38, 97, 113, 255, 99, 235, 255, 255, 23, 65, 77, 255, 0, 0, 0, 255, 7, 11, 24, 255, 4, 0, 15, 255, 3, 5, 21, 255, 2, 1, 11, 255, 2, 3, 10, 255, 1, 6, 10, 255, 2, 17, 29, 255, 3, 28, 37, 255, 1, 9, 11, 255, 0, 2, 0, 255, 2, 0, 2, 255, 0, 2, 1, 255, 0, 0, 0, 255, 1, 1, 2, 255, 3, 0, 1, 255, 0, 2, 0, 255, 0, 0, 1, 255, 0, 0, 0, 255, 1, 1, 0, 255, 0, 0, 0, 255, 0, 0, 2, 255, 0, 0, 2, 255, 0, 0, 2, 255, 0, 1, 0, 255, 0, 1, 0, 255, 0, 1, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 1, 0, 4, 255, 0, 0, 3, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 2, 0, 0, 255, 1, 0, 2, 255, 0, 2, 0, 255, 0, 2, 0, 255, 0, 0, 2, 255, 0, 0, 3, 255, 2, 0, 0, 255, 0, 0, 2, 255, 0, 1, 7, 255, 18, 20, 68, 255, 65, 68, 130, 255, 70, 80, 121, 255, 44, 57, 56, 255, 18, 29, 19, 255, 5, 6, 4, 255, 23, 14, 30, 255, 54, 54, 82, 255, 68, 69, 117, 255, 63, 66, 107, 255, 39, 59, 154, 255, 31, 47, 105, 255, 18, 20, 22, 255, 6, 3, 2, 255, 0, 0, 0, 255, 3, 1, 5, 255, 9, 2, 2, 255, 8, 3, 5, 255, 4, 2, 2, 255, 2, 3, 0, 255, 3, 4, 1, 255, 5, 5, 0, 255, 6, 5, 0, 255, 11, 6, 1, 255, 18, 14, 3, 255, 13, 11, 4, 255, 15, 10, 7, 255, 11, 10, 5, 255, 25, 20, 18, 255, 30, 24, 16, 255, 35, 30, 14, 255, 31, 21, 5, 255, 28, 20, 4, 255, 22, 13, 7, 255, 21, 14, 7, 255, 19, 21, 5, 255, 22, 20, 8, 255, 24, 24, 5, 255, 28, 22, 13, 255, 35, 28, 16, 255, 29, 24, 5, 255, 30, 27, 9, 255, 29, 26, 8, 255, 36, 27, 8, 255, 39, 28, 11, 255, 42, 32, 18, 255, 39, 32, 13, 255, 48, 35, 11, 255, 53, 35, 9, 255, 47, 31, 9, 255, 50, 32, 19, 255, 50, 36, 4, 255, 50, 35, 7, 255, 41, 32, 15, 255, 48, 31, 12, 255, 47, 28, 11, 255, 41, 27, 16, 255, 42, 28, 12, 255, 43, 28, 12, 255, 37, 27, 11, 255, 44, 31, 9, 255, 47, 30, 12, 255, 50, 33, 12, 255, 56, 34, 6, 255, 61, 35, 12, 255, 58, 33, 13, 255, 60, 36, 6, 255, 64, 36, 9, 255, 65, 29, 13, 255, 58, 33, 17, 255, 64, 36, 9, 255, 62, 36, 12, 255, 69, 36, 12, 255, 66, 39, 2, 255, 67, 39, 8, 255, 71, 41, 10, 255, 75, 41, 17, 255, 78, 43, 3, 255, 84, 49, 5, 255, 80, 42, 10, 255, 80, 43, 9, 255, 79, 45, 6, 255, 79, 47, 9, 255, 85, 51, 13, 255, 90, 52, 6, 255, 93, 53, 3, 255, 91, 54, 6, 255, 90, 56, 7, 255, 93, 58, 10, 255, 95, 55, 10, 255, 95, 57, 4, 255, 99, 59, 4, 255, 109, 64, 9, 255, 115, 65, 6, 255, 113, 67, 4, 255, 110, 66, 4, 255, 115, 66, 8, 255, 118, 71, 5, 255, 116, 71, 7, 255, 129, 80, 15, 255, 134, 82, 9, 255, 122, 74, 5, 255, 114, 66, 11, 255, 113, 66, 9, 255, 108, 63, 11, 255, 102, 61, 10, 255, 96, 53, 14, 255, 97, 54, 11, 255, 95, 53, 13, 255, 91, 53, 13, 255, 91, 54, 10, 255, 86, 50, 13, 255, 84, 52, 8, 255, 86, 57, 8, 255, 89, 51, 11, 255, 90, 48, 9, 255, 87, 53, 9, 255, 87, 48, 9, 255, 84, 54, 13, 255, 93, 59, 18, 255, 87, 53, 14, 255, 86, 58, 9, 255, 91, 58, 7, 255, 94, 54, 13, 255, 90, 53, 15, 255, 90, 55, 19, 255, 87, 54, 18, 255, 82, 55, 19, 255, 82, 57, 17, 255, 82, 54, 15, 255, 85, 57, 19, 255, 84, 60, 19, 255, 90, 59, 18, 255, 88, 62, 18, 255, 83, 64, 20, 255, 91, 69, 20, 255, 96, 67, 27, 255, 99, 68, 22, 255, 91, 64, 22, 255, 88, 63, 23, 255, 89, 60, 27, 255, 89, 65, 16, 255, 90, 65, 11, 255, 94, 68, 17, 255, 93, 69, 13, 255, 91, 67, 23, 255, 89, 68, 12, 255, 91, 68, 24, 255, 90, 69, 25, 255, 90, 70, 27, 255, 92, 71, 26, 255, 90, 69, 26, 255, 94, 70, 29, 255, 93, 64, 35, 255, 94, 69, 31, 255, 92, 72, 27, 255, 92, 74, 23, 255, 91, 72, 31, 255, 95, 71, 31, 255, 92, 71, 19, 255, 94, 75, 28, 255, 102, 74, 30, 255, 114, 76, 29, 255, 117, 80, 35, 255, 119, 80, 27, 255, 127, 84, 20, 255, 132, 84, 27, 255, 125, 81, 31, 255, 119, 78, 36, 255, 117, 80, 19, 255, 118, 83, 27, 255, 120, 80, 31, 255, 110, 83, 29, 255, 110, 82, 35, 255, 119, 82, 38, 255, 115, 87, 34, 255, 122, 87, 30, 255, 122, 88, 39, 255, 124, 90, 48, 255, 123, 90, 47, 255, 122, 94, 40, 255, 126, 100, 43, 255, 130, 102, 45, 255, 128, 99, 50, 255, 130, 104, 47, 255, 133, 108, 48, 255, 135, 110, 51, 255, 137, 113, 49, 255, 136, 114, 49, 255, 137, 111, 63, 255, 141, 116, 57, 255, 131, 118, 54, 255, 128, 119, 60, 255, 160, 148, 85, 255, 155, 137, 87, 255, 139, 120, 55, 255, 145, 123, 50, 255, 152, 124, 57, 255, 151, 120, 55, 255, 155, 124, 53, 255, 155, 126, 49, 255, 154, 123, 54, 255, 161, 129, 53, 255, 151, 122, 52, 255, 141, 117, 48, 255, 140, 114, 40, 255, 139, 112, 33, 255, 133, 107, 42, 255, 126, 105, 37, 255, 124, 105, 39, 255, 121, 104, 36, 255, 132, 97, 35, 255, 141, 96, 29, 255, 135, 96, 38, 255, 134, 92, 29, 255, 137, 94, 23, 255, 129, 91, 27, 255, 133, 88, 23, 255, 138, 87, 20, 255, 126, 85, 24, 255, 114, 84, 22, 255, 122, 85, 16, 255, 133, 85, 16, 255, 139, 87, 19, 255, 135, 80, 21, 255, 136, 82, 18, 255, 134, 76, 22, 255, 137, 78, 19, 255, 128, 79, 9, 255, 132, 78, 9, 255, 133, 76, 14, 255, 125, 75, 10, 255, 120, 76, 8, 255, 120, 75, 9, 255, 124, 73, 8, 255, 124, 74, 13, 255, 121, 74, 12, 255, 129, 79, 2, 255, 134, 79, 3, 255, 140, 80, 8, 255, 144, 79, 8, 255, 156, 86, 9, 255, 165, 93, 5, 255, 169, 94, 6, 255, 165, 88, 5, 255, 161, 85, 5, 255, 155, 82, 7, 255, 142, 76, 6, 255, 134, 72, 7, 255, 125, 65, 12, 255, 125, 68, 8, 255, 126, 69, 9, 255, 131, 71, 11, 255, 127, 65, 10, 255, 128, 66, 8, 255, 122, 67, 4, 255, 125, 68, 5, 255, 133, 69, 8, 255, 131, 68, 5, 255, 134, 72, 5, 255, 154, 70, 6, 255, 144, 69, 12, 255, 132, 67, 9, 255, 145, 77, 8, 255, 146, 77, 13, 255, 150, 80, 5, 255, 164, 89, 1, 255, 174, 95, 8, 255, 183, 102, 7, 255, 179, 98, 4, 255, 170, 88, 5, 255, 178, 93, 4, 255, 180, 95, 2, 255, 166, 92, 2, 255, 158, 83, 4, 255, 152, 75, 6, 255, 154, 77, 6, 255, 150, 76, 4, 255, 142, 73, 2, 255, 133, 71, 9, 255, 137, 69, 6, 255, 137, 66, 3, 255, 138, 69, 9, 255, 139, 66, 10, 255, 134, 67, 5, 255, 130, 71, 4, 255, 134, 68, 7, 255, 133, 70, 8, 255, 121, 68, 7, 255, 126, 65, 0, 255, 130, 62, 6, 255, 103, 40, 4, 255, 92, 34, 4, 255, 88, 40, 1, 255, 105, 41, 5, 255, 105, 44, 9, 255, 99, 49, 7, 255, 92, 50, 13, 255, 96, 54, 14, 255, 104, 53, 11, 255, 101, 49, 8, 255, 99, 44, 4, 255, 99, 40, 5, 255, 101, 48, 11, 255, 107, 49, 17, 255, 104, 43, 18, 255, 106, 44, 16, 255, 111, 48, 15, 255, 43, 82, 119, 255, 48, 94, 139, 255, 37, 99, 148, 255, 32, 97, 144, 255, 25, 86, 124, 255, 20, 71, 108, 255, 12, 68, 96, 255, 12, 61, 80, 255, 10, 49, 75, 255, 0, 28, 51, 255, 3, 9, 48, 255, 3, 1, 55, 255, 1, 2, 50, 255, 2, 1, 24, 255, 0, 1, 4, 255, 1, 0, 6, 255, 1, 0, 4, 255, 0, 0, 1, 255, 1, 0, 3, 255, 1, 0, 5, 255, 0, 0, 2, 255, 0, 0, 2, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 2, 255, 0, 0, 1, 255, 1, 1, 5, 255, 3, 2, 6, 255, 0, 2, 5, 255, 3, 6, 11, 255, 3, 5, 9, 255, 2, 1, 1, 255, 2, 3, 9, 255, 2, 3, 7, 255, 3, 1, 3, 255, 2, 18, 30, 255, 14, 86, 111, 255, 0, 12, 28, 255, 59, 119, 147, 255, 114, 247, 255, 255, 21, 57, 56, 255, 0, 4, 22, 255, 2, 11, 27, 255, 7, 0, 0, 255, 2, 2, 7, 255, 5, 6, 17, 255, 2, 20, 19, 255, 4, 22, 22, 255, 4, 4, 8, 255, 0, 2, 0, 255, 2, 0, 3, 255, 2, 2, 3, 255, 1, 2, 1, 255, 2, 1, 2, 255, 0, 1, 1, 255, 2, 0, 0, 255, 2, 2, 1, 255, 2, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 0, 255, 1, 1, 0, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 1, 0, 255, 1, 2, 1, 255, 0, 0, 1, 255, 0, 0, 2, 255, 1, 1, 0, 255, 5, 2, 2, 255, 4, 0, 4, 255, 2, 0, 3, 255, 2, 0, 2, 255, 0, 0, 0, 255, 2, 2, 4, 255, 15, 18, 56, 255, 48, 60, 133, 255, 71, 82, 133, 255, 50, 55, 77, 255, 30, 32, 26, 255, 9, 6, 3, 255, 19, 14, 16, 255, 48, 47, 65, 255, 57, 63, 105, 255, 35, 45, 132, 255, 49, 57, 120, 255, 59, 55, 65, 255, 4, 17, 30, 255, 0, 7, 4, 255, 1, 0, 0, 255, 5, 2, 3, 255, 3, 3, 0, 255, 1, 2, 5, 255, 5, 6, 1, 255, 3, 4, 0, 255, 7, 4, 2, 255, 9, 3, 4, 255, 8, 1, 5, 255, 8, 4, 4, 255, 8, 9, 1, 255, 11, 11, 1, 255, 11, 8, 7, 255, 14, 11, 8, 255, 27, 25, 7, 255, 34, 30, 2, 255, 39, 32, 4, 255, 32, 23, 4, 255, 21, 14, 3, 255, 24, 18, 6, 255, 19, 20, 6, 255, 20, 19, 7, 255, 28, 22, 14, 255, 26, 24, 12, 255, 28, 23, 13, 255, 29, 32, 10, 255, 29, 31, 8, 255, 38, 33, 6, 255, 38, 29, 5, 255, 34, 29, 11, 255, 34, 34, 8, 255, 38, 33, 11, 255, 42, 34, 10, 255, 44, 39, 5, 255, 47, 40, 5, 255, 54, 40, 4, 255, 61, 38, 4, 255, 51, 30, 13, 255, 47, 29, 8, 255, 56, 37, 4, 255, 48, 34, 1, 255, 50, 33, 6, 255, 47, 29, 7, 255, 40, 27, 10, 255, 42, 26, 10, 255, 38, 23, 5, 255, 42, 29, 14, 255, 44, 29, 11, 255, 47, 28, 2, 255, 50, 30, 7, 255, 51, 34, 6, 255, 53, 32, 5, 255, 59, 35, 8, 255, 62, 36, 13, 255, 67, 39, 13, 255, 69, 37, 10, 255, 62, 35, 11, 255, 57, 34, 10, 255, 63, 39, 11, 255, 63, 40, 11, 255, 64, 39, 8, 255, 70, 41, 11, 255, 72, 43, 12, 255, 71, 39, 4, 255, 76, 42, 15, 255, 76, 42, 7, 255, 82, 48, 9, 255, 79, 44, 4, 255, 80, 44, 8, 255, 78, 44, 8, 255, 76, 43, 7, 255, 79, 44, 14, 255, 86, 49, 4, 255, 88, 52, 7, 255, 89, 53, 5, 255, 91, 53, 3, 255, 91, 52, 9, 255, 91, 50, 13, 255, 93, 54, 13, 255, 95, 58, 7, 255, 108, 65, 11, 255, 112, 64, 7, 255, 114, 68, 8, 255, 111, 67, 6, 255, 117, 65, 9, 255, 119, 68, 14, 255, 117, 70, 4, 255, 127, 77, 6, 255, 133, 81, 8, 255, 121, 72, 3, 255, 112, 66, 8, 255, 110, 65, 4, 255, 110, 66, 7, 255, 106, 60, 5, 255, 100, 57, 5, 255, 99, 60, 4, 255, 93, 57, 3, 255, 93, 58, 6, 255, 93, 58, 5, 255, 88, 55, 1, 255, 87, 54, 7, 255, 86, 51, 9, 255, 89, 55, 9, 255, 97, 52, 11, 255, 94, 54, 19, 255, 87, 53, 15, 255, 87, 54, 13, 255, 92, 56, 17, 255, 95, 59, 14, 255, 93, 58, 11, 255, 85, 54, 8, 255, 88, 60, 17, 255, 83, 54, 19, 255, 85, 52, 21, 255, 85, 55, 13, 255, 81, 59, 10, 255, 81, 58, 17, 255, 88, 59, 27, 255, 84, 56, 20, 255, 81, 58, 15, 255, 93, 60, 17, 255, 92, 61, 15, 255, 90, 61, 19, 255, 95, 66, 22, 255, 96, 65, 23, 255, 98, 70, 19, 255, 94, 69, 13, 255, 87, 65, 13, 255, 93, 65, 19, 255, 99, 70, 21, 255, 93, 65, 26, 255, 94, 67, 23, 255, 95, 69, 17, 255, 96, 71, 18, 255, 91, 67, 19, 255, 87, 64, 19, 255, 93, 69, 28, 255, 90, 67, 20, 255, 92, 68, 25, 255, 93, 71, 25, 255, 94, 71, 23, 255, 95, 70, 24, 255, 87, 62, 39, 255, 91, 69, 32, 255, 97, 72, 31, 255, 97, 74, 25, 255, 92, 71, 18, 255, 97, 71, 20, 255, 98, 75, 22, 255, 101, 72, 25, 255, 114, 80, 23, 255, 112, 80, 30, 255, 122, 80, 31, 255, 125, 82, 22, 255, 128, 81, 22, 255, 124, 83, 27, 255, 115, 80, 36, 255, 112, 80, 27, 255, 119, 80, 29, 255, 118, 83, 26, 255, 116, 87, 30, 255, 109, 84, 17, 255, 117, 87, 22, 255, 120, 85, 37, 255, 123, 88, 37, 255, 122, 88, 40, 255, 124, 91, 39, 255, 128, 97, 38, 255, 126, 99, 31, 255, 125, 96, 43, 255, 129, 100, 40, 255, 133, 102, 44, 255, 134, 103, 53, 255, 131, 104, 52, 255, 135, 107, 48, 255, 138, 112, 48, 255, 138, 113, 47, 255, 138, 115, 37, 255, 142, 116, 53, 255, 136, 117, 51, 255, 127, 119, 37, 255, 152, 143, 74, 255, 163, 147, 100, 255, 139, 119, 65, 255, 143, 118, 58, 255, 148, 120, 59, 255, 151, 119, 63, 255, 154, 124, 51, 255, 157, 124, 52, 255, 161, 128, 37, 255, 162, 126, 38, 255, 153, 121, 41, 255, 141, 116, 36, 255, 141, 111, 46, 255, 140, 109, 43, 255, 134, 107, 38, 255, 127, 103, 36, 255, 120, 99, 32, 255, 121, 106, 35, 255, 133, 100, 38, 255, 139, 95, 33, 255, 134, 95, 31, 255, 136, 92, 30, 255, 136, 94, 22, 255, 132, 94, 19, 255, 133, 89, 21, 255, 137, 86, 21, 255, 127, 82, 28, 255, 116, 81, 26, 255, 120, 84, 18, 255, 129, 86, 14, 255, 134, 85, 19, 255, 133, 81, 19, 255, 133, 82, 13, 255, 134, 80, 20, 255, 133, 77, 24, 255, 128, 77, 6, 255, 133, 76, 13, 255, 138, 80, 19, 255, 128, 77, 10, 255, 123, 75, 14, 255, 124, 76, 9, 255, 122, 77, 8, 255, 120, 76, 6, 255, 120, 74, 12, 255, 124, 78, 11, 255, 130, 78, 16, 255, 146, 88, 16, 255, 144, 84, 11, 255, 155, 85, 8, 255, 166, 94, 7, 255, 167, 91, 7, 255, 165, 88, 8, 255, 166, 89, 11, 255, 159, 83, 11, 255, 144, 77, 9, 255, 133, 71, 2, 255, 126, 68, 6, 255, 128, 72, 7, 255, 122, 67, 7, 255, 127, 69, 6, 255, 128, 69, 7, 255, 124, 67, 1, 255, 128, 68, 4, 255, 133, 71, 7, 255, 129, 72, 8, 255, 133, 70, 7, 255, 135, 71, 5, 255, 145, 71, 6, 255, 134, 69, 6, 255, 127, 69, 3, 255, 145, 77, 7, 255, 145, 73, 15, 255, 155, 83, 10, 255, 165, 90, 5, 255, 177, 98, 15, 255, 186, 102, 12, 255, 182, 96, 6, 255, 184, 98, 7, 255, 183, 99, 0, 255, 185, 98, 4, 255, 175, 91, 4, 255, 167, 85, 6, 255, 159, 79, 5, 255, 155, 80, 3, 255, 150, 79, 1, 255, 144, 76, 2, 255, 142, 72, 2, 255, 146, 71, 10, 255, 142, 74, 5, 255, 134, 72, 1, 255, 136, 74, 7, 255, 136, 71, 8, 255, 134, 68, 7, 255, 135, 72, 6, 255, 138, 68, 7, 255, 138, 61, 9, 255, 137, 60, 9, 255, 126, 46, 1, 255, 91, 35, 1, 255, 92, 33, 9, 255, 112, 42, 12, 255, 121, 49, 2, 255, 107, 51, 7, 255, 90, 52, 10, 255, 99, 49, 16, 255, 100, 48, 18, 255, 101, 48, 14, 255, 104, 47, 12, 255, 106, 49, 12, 255, 103, 49, 12, 255, 102, 46, 12, 255, 100, 44, 14, 255, 96, 39, 20, 255, 101, 44, 17, 255, 108, 51, 10, 255, 35, 86, 118, 255, 31, 93, 147, 255, 37, 97, 156, 255, 39, 102, 156, 255, 21, 98, 141, 255, 18, 81, 125, 255, 24, 75, 115, 255, 22, 75, 102, 255, 10, 71, 100, 255, 4, 48, 99, 255, 1, 12, 76, 255, 1, 0, 56, 255, 3, 1, 47, 255, 1, 1, 19, 255, 0, 2, 3, 255, 1, 0, 4, 255, 1, 1, 1, 255, 1, 1, 2, 255, 1, 0, 3, 255, 0, 0, 4, 255, 0, 0, 2, 255, 0, 0, 3, 255, 1, 1, 2, 255, 1, 1, 1, 255, 1, 1, 3, 255, 1, 1, 2, 255, 1, 1, 0, 255, 0, 4, 5, 255, 3, 0, 3, 255, 1, 2, 2, 255, 3, 2, 0, 255, 4, 1, 5, 255, 0, 2, 3, 255, 3, 0, 6, 255, 5, 1, 6, 255, 2, 0, 0, 255, 7, 21, 35, 255, 12, 91, 125, 255, 0, 22, 49, 255, 84, 149, 180, 255, 119, 234, 239, 255, 14, 43, 52, 255, 2, 3, 9, 255, 3, 8, 21, 255, 5, 4, 18, 255, 1, 22, 22, 255, 2, 15, 14, 255, 0, 1, 2, 255, 2, 0, 3, 255, 2, 0, 0, 255, 4, 0, 2, 255, 1, 1, 1, 255, 3, 0, 3, 255, 2, 0, 5, 255, 0, 2, 2, 255, 2, 1, 4, 255, 2, 2, 3, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 3, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 3, 255, 1, 0, 3, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 2, 255, 1, 0, 0, 255, 0, 3, 4, 255, 1, 1, 3, 255, 2, 1, 3, 255, 0, 0, 0, 255, 11, 15, 44, 255, 38, 50, 103, 255, 63, 78, 136, 255, 57, 66, 94, 255, 24, 28, 34, 255, 7, 8, 8, 255, 8, 10, 16, 255, 38, 35, 57, 255, 47, 54, 99, 255, 34, 48, 107, 255, 27, 42, 125, 255, 22, 41, 121, 255, 25, 36, 56, 255, 13, 6, 0, 255, 0, 0, 1, 255, 1, 1, 5, 255, 3, 5, 3, 255, 4, 0, 3, 255, 8, 0, 4, 255, 5, 2, 1, 255, 2, 4, 3, 255, 5, 4, 3, 255, 6, 5, 0, 255, 7, 4, 0, 255, 9, 4, 2, 255, 11, 6, 4, 255, 11, 7, 5, 255, 18, 11, 5, 255, 30, 19, 7, 255, 38, 28, 6, 255, 34, 24, 2, 255, 29, 19, 11, 255, 21, 17, 9, 255, 20, 19, 5, 255, 23, 19, 4, 255, 29, 21, 7, 255, 26, 20, 9, 255, 28, 24, 9, 255, 26, 22, 13, 255, 22, 25, 9, 255, 26, 27, 7, 255, 31, 29, 11, 255, 33, 30, 14, 255, 34, 32, 8, 255, 35, 32, 11, 255, 42, 34, 12, 255, 42, 34, 7, 255, 39, 32, 10, 255, 45, 35, 6, 255, 48, 44, 1, 255, 43, 35, 5, 255, 50, 38, 12, 255, 53, 40, 3, 255, 52, 39, 8, 255, 50, 37, 6, 255, 46, 35, 8, 255, 42, 31, 9, 255, 46, 31, 5, 255, 39, 26, 8, 255, 37, 27, 12, 255, 43, 27, 10, 255, 46, 30, 9, 255, 45, 32, 14, 255, 50, 30, 6, 255, 57, 32, 1, 255, 53, 29, 8, 255, 55, 29, 12, 255, 55, 29, 10, 255, 59, 34, 7, 255, 60, 35, 12, 255, 62, 35, 14, 255, 63, 33, 8, 255, 66, 40, 9, 255, 66, 35, 6, 255, 63, 39, 8, 255, 66, 41, 2, 255, 69, 46, 2, 255, 78, 40, 8, 255, 69, 38, 6, 255, 70, 38, 11, 255, 72, 37, 11, 255, 79, 44, 11, 255, 78, 42, 17, 255, 84, 48, 12, 255, 79, 45, 5, 255, 77, 44, 9, 255, 76, 44, 12, 255, 77, 43, 14, 255, 78, 43, 6, 255, 82, 47, 6, 255, 82, 50, 5, 255, 92, 53, 8, 255, 96, 53, 9, 255, 96, 55, 9, 255, 95, 56, 6, 255, 94, 54, 3, 255, 102, 60, 8, 255, 113, 66, 13, 255, 114, 69, 12, 255, 109, 65, 5, 255, 116, 66, 6, 255, 119, 69, 13, 255, 116, 68, 5, 255, 125, 73, 2, 255, 138, 86, 6, 255, 120, 74, 1, 255, 113, 70, 6, 255, 112, 69, 7, 255, 112, 67, 8, 255, 111, 63, 7, 255, 107, 60, 7, 255, 103, 61, 15, 255, 101, 63, 9, 255, 95, 57, 9, 255, 93, 56, 13, 255, 92, 58, 5, 255, 90, 55, 14, 255, 93, 54, 10, 255, 93, 55, 9, 255, 95, 51, 19, 255, 93, 55, 14, 255, 94, 57, 12, 255, 95, 58, 19, 255, 90, 59, 10, 255, 98, 62, 7, 255, 96, 60, 11, 255, 85, 54, 10, 255, 87, 62, 13, 255, 86, 59, 11, 255, 86, 54, 18, 255, 88, 55, 25, 255, 83, 56, 12, 255, 85, 58, 8, 255, 97, 64, 25, 255, 90, 57, 21, 255, 87, 60, 13, 255, 89, 64, 14, 255, 86, 57, 20, 255, 92, 57, 24, 255, 102, 64, 20, 255, 101, 65, 20, 255, 98, 67, 18, 255, 96, 66, 17, 255, 92, 64, 25, 255, 90, 64, 20, 255, 97, 63, 15, 255, 96, 67, 21, 255, 91, 67, 18, 255, 98, 65, 23, 255, 97, 67, 13, 255, 97, 71, 19, 255, 92, 69, 17, 255, 93, 70, 21, 255, 91, 67, 21, 255, 94, 68, 24, 255, 94, 72, 22, 255, 91, 69, 23, 255, 94, 71, 23, 255, 89, 70, 10, 255, 93, 68, 27, 255, 100, 70, 33, 255, 97, 69, 16, 255, 95, 70, 22, 255, 103, 75, 28, 255, 102, 77, 17, 255, 102, 72, 26, 255, 109, 74, 34, 255, 113, 82, 27, 255, 122, 79, 30, 255, 127, 80, 38, 255, 129, 80, 41, 255, 129, 82, 31, 255, 120, 80, 21, 255, 120, 84, 16, 255, 122, 79, 27, 255, 116, 83, 31, 255, 119, 88, 28, 255, 112, 84, 28, 255, 115, 89, 34, 255, 129, 89, 28, 255, 124, 90, 38, 255, 124, 92, 33, 255, 126, 92, 42, 255, 128, 96, 39, 255, 126, 97, 28, 255, 127, 96, 40, 255, 132, 101, 42, 255, 131, 100, 44, 255, 133, 104, 41, 255, 132, 104, 41, 255, 133, 103, 51, 255, 137, 107, 47, 255, 138, 109, 55, 255, 138, 110, 60, 255, 143, 115, 55, 255, 144, 120, 40, 255, 134, 117, 43, 255, 138, 128, 64, 255, 168, 154, 96, 255, 147, 127, 63, 255, 145, 118, 52, 255, 149, 121, 44, 255, 152, 121, 50, 255, 154, 121, 49, 255, 158, 124, 44, 255, 167, 129, 43, 255, 166, 124, 35, 255, 156, 119, 39, 255, 145, 117, 38, 255, 142, 111, 45, 255, 143, 108, 44, 255, 139, 106, 41, 255, 132, 105, 33, 255, 129, 105, 38, 255, 121, 104, 34, 255, 128, 97, 34, 255, 134, 92, 32, 255, 135, 97, 25, 255, 138, 96, 33, 255, 137, 90, 30, 255, 136, 91, 25, 255, 135, 87, 27, 255, 138, 88, 22, 255, 131, 86, 19, 255, 124, 87, 17, 255, 122, 86, 14, 255, 129, 87, 18, 255, 134, 83, 23, 255, 139, 83, 20, 255, 140, 83, 18, 255, 134, 77, 20, 255, 136, 82, 22, 255, 135, 80, 15, 255, 136, 77, 12, 255, 136, 77, 13, 255, 131, 75, 18, 255, 124, 75, 7, 255, 125, 76, 13, 255, 124, 77, 11, 255, 133, 77, 12, 255, 133, 73, 4, 255, 127, 76, 16, 255, 130, 78, 13, 255, 140, 82, 23, 255, 142, 85, 21, 255, 153, 84, 13, 255, 159, 88, 5, 255, 165, 90, 6, 255, 173, 96, 10, 255, 170, 93, 9, 255, 163, 86, 9, 255, 148, 81, 11, 255, 141, 78, 7, 255, 132, 73, 2, 255, 128, 72, 3, 255, 127, 71, 9, 255, 129, 71, 7, 255, 126, 70, 5, 255, 129, 70, 4, 255, 129, 67, 3, 255, 128, 68, 3, 255, 131, 71, 5, 255, 129, 73, 5, 255, 135, 70, 5, 255, 137, 71, 9, 255, 129, 67, 9, 255, 132, 72, 9, 255, 145, 77, 3, 255, 144, 77, 5, 255, 148, 83, 5, 255, 165, 92, 11, 255, 180, 100, 11, 255, 183, 98, 1, 255, 183, 95, 1, 255, 189, 101, 4, 255, 184, 97, 2, 255, 181, 95, 7, 255, 174, 91, 6, 255, 168, 85, 4, 255, 163, 86, 5, 255, 159, 85, 4, 255, 154, 81, 3, 255, 149, 77, 4, 255, 145, 74, 7, 255, 141, 72, 8, 255, 145, 74, 0, 255, 146, 72, 6, 255, 144, 74, 3, 255, 147, 75, 1, 255, 149, 70, 2, 255, 142, 64, 1, 255, 132, 52, 4, 255, 112, 40, 7, 255, 113, 48, 12, 255, 104, 37, 15, 255, 93, 33, 4, 255, 111, 47, 12, 255, 131, 53, 4, 255, 113, 52, 5, 255, 93, 50, 8, 255, 99, 49, 10, 255, 100, 48, 9, 255, 98, 42, 11, 255, 93, 41, 11, 255, 103, 46, 13, 255, 103, 48, 10, 255, 99, 47, 7, 255, 107, 48, 12, 255, 106, 50, 15, 255, 104, 47, 15, 255, 107, 49, 12, 255, 110, 51, 7, 255, 26, 81, 110, 255, 26, 91, 137, 255, 31, 96, 138, 255, 38, 101, 149, 255, 34, 101, 148, 255, 29, 97, 141, 255, 18, 87, 131, 255, 29, 82, 128, 255, 22, 85, 117, 255, 9, 51, 122, 255, 3, 4, 83, 255, 1, 1, 61, 255, 1, 0, 47, 255, 1, 0, 13, 255, 0, 0, 3, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 0, 2, 255, 2, 0, 5, 255, 0, 0, 5, 255, 0, 0, 2, 255, 1, 1, 3, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 2, 255, 3, 0, 3, 255, 3, 1, 4, 255, 0, 1, 3, 255, 5, 1, 1, 255, 1, 1, 2, 255, 2, 1, 3, 255, 1, 3, 2, 255, 1, 3, 2, 255, 2, 2, 5, 255, 0, 2, 0, 255, 1, 8, 10, 255, 1, 5, 6, 255, 6, 31, 52, 255, 9, 81, 116, 255, 3, 25, 41, 255, 86, 176, 190, 255, 100, 214, 220, 255, 10, 28, 38, 255, 4, 12, 23, 255, 3, 21, 28, 255, 3, 19, 18, 255, 5, 6, 10, 255, 3, 0, 4, 255, 0, 2, 2, 255, 0, 2, 1, 255, 1, 2, 0, 255, 2, 3, 5, 255, 1, 0, 3, 255, 5, 2, 2, 255, 2, 1, 0, 255, 2, 0, 0, 255, 3, 1, 3, 255, 0, 1, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 1, 1, 1, 255, 1, 1, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 1, 1, 6, 255, 1, 1, 8, 255, 1, 1, 7, 255, 2, 1, 5, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 0, 0, 2, 255, 1, 1, 2, 255, 0, 0, 1, 255, 0, 0, 2, 255, 1, 1, 6, 255, 1, 2, 7, 255, 3, 2, 5, 255, 0, 0, 0, 255, 3, 7, 24, 255, 29, 40, 94, 255, 51, 71, 123, 255, 46, 67, 105, 255, 22, 36, 45, 255, 8, 7, 9, 255, 3, 7, 8, 255, 32, 33, 69, 255, 58, 60, 104, 255, 45, 53, 98, 255, 22, 37, 108, 255, 24, 34, 95, 255, 21, 22, 48, 255, 5, 6, 4, 255, 0, 0, 0, 255, 2, 1, 5, 255, 4, 1, 3, 255, 6, 2, 0, 255, 4, 3, 2, 255, 4, 2, 4, 255, 5, 2, 2, 255, 4, 2, 1, 255, 2, 0, 5, 255, 6, 1, 1, 255, 6, 3, 2, 255, 5, 4, 1, 255, 7, 5, 2, 255, 14, 8, 4, 255, 23, 15, 8, 255, 33, 21, 10, 255, 29, 20, 4, 255, 23, 20, 2, 255, 22, 17, 7, 255, 26, 18, 13, 255, 27, 16, 6, 255, 26, 20, 5, 255, 26, 23, 12, 255, 26, 21, 7, 255, 30, 28, 14, 255, 33, 31, 8, 255, 35, 27, 10, 255, 30, 28, 6, 255, 34, 37, 8, 255, 42, 34, 10, 255, 42, 33, 8, 255, 36, 41, 5, 255, 32, 38, 9, 255, 45, 38, 11, 255, 45, 39, 8, 255, 40, 38, 11, 255, 42, 35, 10, 255, 48, 39, 10, 255, 46, 35, 7, 255, 54, 40, 13, 255, 54, 39, 6, 255, 51, 40, 6, 255, 52, 34, 12, 255, 46, 36, 17, 255, 50, 31, 20, 255, 48, 29, 9, 255, 39, 27, 4, 255, 44, 31, 9, 255, 43, 28, 9, 255, 48, 31, 7, 255, 45, 30, 6, 255, 47, 31, 8, 255, 59, 38, 7, 255, 58, 33, 5, 255, 62, 33, 14, 255, 57, 31, 8, 255, 63, 39, 5, 255, 60, 36, 3, 255, 63, 36, 9, 255, 64, 36, 7, 255, 67, 33, 11, 255, 74, 36, 17, 255, 71, 38, 12, 255, 67, 40, 7, 255, 75, 47, 5, 255, 87, 41, 11, 255, 66, 36, 13, 255, 68, 40, 7, 255, 74, 43, 2, 255, 77, 43, 9, 255, 80, 45, 11, 255, 85, 50, 4, 255, 80, 44, 3, 255, 74, 45, 9, 255, 73, 44, 13, 255, 73, 42, 9, 255, 79, 42, 16, 255, 81, 46, 8, 255, 80, 48, 5, 255, 89, 52, 7, 255, 93, 54, 9, 255, 95, 55, 10, 255, 99, 57, 12, 255, 101, 58, 10, 255, 104, 59, 10, 255, 110, 62, 8, 255, 111, 63, 2, 255, 112, 66, 12, 255, 118, 69, 9, 255, 115, 70, 0, 255, 111, 66, 4, 255, 122, 73, 11, 255, 131, 80, 12, 255, 118, 72, 9, 255, 107, 68, 7, 255, 108, 68, 7, 255, 116, 71, 8, 255, 118, 70, 6, 255, 117, 69, 6, 255, 111, 67, 6, 255, 107, 67, 5, 255, 105, 64, 11, 255, 102, 62, 14, 255, 99, 62, 11, 255, 95, 59, 15, 255, 97, 59, 6, 255, 98, 57, 7, 255, 97, 58, 12, 255, 91, 58, 7, 255, 97, 54, 11, 255, 94, 57, 7, 255, 93, 59, 8, 255, 93, 58, 7, 255, 93, 58, 15, 255, 91, 57, 13, 255, 91, 58, 14, 255, 91, 59, 11, 255, 89, 57, 12, 255, 87, 52, 22, 255, 88, 55, 14, 255, 89, 58, 4, 255, 96, 63, 14, 255, 91, 57, 17, 255, 88, 55, 18, 255, 81, 60, 16, 255, 82, 60, 19, 255, 90, 63, 18, 255, 97, 65, 15, 255, 101, 64, 20, 255, 102, 65, 22, 255, 101, 66, 23, 255, 91, 64, 20, 255, 86, 60, 31, 255, 101, 65, 22, 255, 94, 65, 23, 255, 92, 68, 20, 255, 101, 62, 31, 255, 100, 69, 16, 255, 98, 71, 13, 255, 94, 66, 30, 255, 90, 67, 19, 255, 96, 73, 19, 255, 95, 67, 27, 255, 91, 67, 28, 255, 95, 67, 30, 255, 101, 70, 27, 255, 102, 72, 24, 255, 96, 68, 22, 255, 98, 72, 21, 255, 96, 68, 25, 255, 100, 69, 32, 255, 98, 70, 30, 255, 98, 73, 28, 255, 100, 74, 28, 255, 106, 72, 27, 255, 120, 78, 31, 255, 119, 81, 30, 255, 123, 82, 35, 255, 125, 81, 30, 255, 127, 83, 20, 255, 123, 81, 18, 255, 117, 77, 21, 255, 122, 79, 31, 255, 121, 85, 30, 255, 113, 78, 26, 255, 112, 80, 38, 255, 112, 82, 40, 255, 124, 87, 32, 255, 125, 89, 29, 255, 123, 92, 29, 255, 124, 91, 36, 255, 126, 93, 45, 255, 128, 93, 44, 255, 131, 96, 45, 255, 131, 99, 44, 255, 130, 99, 42, 255, 133, 107, 36, 255, 136, 110, 44, 255, 138, 111, 43, 255, 138, 111, 32, 255, 140, 114, 43, 255, 139, 116, 51, 255, 141, 115, 46, 255, 147, 115, 53, 255, 140, 116, 53, 255, 130, 118, 45, 255, 164, 153, 86, 255, 159, 140, 85, 255, 148, 114, 48, 255, 154, 119, 50, 255, 154, 120, 46, 255, 154, 121, 40, 255, 159, 123, 41, 255, 165, 125, 49, 255, 169, 126, 42, 255, 159, 122, 34, 255, 148, 121, 35, 255, 142, 113, 34, 255, 144, 113, 22, 255, 141, 109, 32, 255, 134, 105, 37, 255, 130, 103, 36, 255, 126, 105, 31, 255, 129, 102, 30, 255, 133, 96, 31, 255, 135, 95, 30, 255, 135, 93, 23, 255, 138, 90, 27, 255, 137, 89, 24, 255, 138, 89, 20, 255, 140, 87, 28, 255, 136, 87, 21, 255, 128, 85, 23, 255, 124, 86, 12, 255, 127, 83, 15, 255, 138, 83, 22, 255, 143, 80, 21, 255, 140, 77, 22, 255, 141, 82, 21, 255, 139, 82, 15, 255, 133, 79, 13, 255, 135, 79, 14, 255, 133, 77, 11, 255, 131, 76, 14, 255, 123, 74, 11, 255, 127, 77, 14, 255, 123, 73, 8, 255, 144, 81, 9, 255, 151, 82, 4, 255, 134, 78, 10, 255, 138, 81, 13, 255, 142, 80, 16, 255, 148, 90, 15, 255, 153, 87, 9, 255, 160, 92, 4, 255, 166, 93, 2, 255, 177, 101, 8, 255, 174, 98, 6, 255, 166, 88, 5, 255, 157, 84, 9, 255, 149, 80, 8, 255, 140, 75, 5, 255, 134, 74, 3, 255, 132, 74, 6, 255, 131, 70, 8, 255, 127, 68, 8, 255, 129, 72, 13, 255, 134, 72, 14, 255, 130, 67, 6, 255, 132, 75, 8, 255, 132, 73, 4, 255, 135, 72, 8, 255, 131, 70, 8, 255, 129, 69, 7, 255, 134, 73, 5, 255, 145, 76, 5, 255, 143, 75, 8, 255, 148, 80, 8, 255, 165, 88, 6, 255, 174, 96, 5, 255, 177, 96, 6, 255, 183, 100, 3, 255, 187, 102, 0, 255, 191, 103, 5, 255, 185, 99, 3, 255, 179, 96, 5, 255, 173, 91, 0, 255, 171, 91, 3, 255, 167, 87, 1, 255, 164, 83, 3, 255, 161, 78, 4, 255, 152, 77, 6, 255, 150, 79, 6, 255, 153, 75, 2, 255, 156, 76, 7, 255, 152, 78, 7, 255, 146, 66, 3, 255, 147, 52, 5, 255, 145, 59, 3, 255, 107, 42, 4, 255, 103, 38, 6, 255, 108, 37, 5, 255, 84, 31, 9, 255, 113, 43, 8, 255, 122, 54, 3, 255, 105, 49, 5, 255, 84, 43, 21, 255, 92, 41, 11, 255, 100, 44, 8, 255, 93, 43, 8, 255, 100, 50, 8, 255, 102, 48, 9, 255, 106, 51, 15, 255, 104, 51, 13, 255, 104, 52, 9, 255, 110, 57, 12, 255, 115, 59, 12, 255, 114, 52, 9, 255, 112, 49, 8, 255, 110, 43, 7, 255, 27, 69, 100, 255, 26, 83, 105, 255, 25, 85, 127, 255, 27, 97, 139, 255, 37, 106, 142, 255, 44, 100, 152, 255, 24, 100, 158, 255, 22, 96, 150, 255, 24, 103, 134, 255, 5, 48, 123, 255, 0, 2, 80, 255, 0, 4, 59, 255, 1, 0, 31, 255, 2, 1, 8, 255, 1, 1, 4, 255, 1, 1, 4, 255, 0, 0, 1, 255, 0, 0, 3, 255, 0, 0, 2, 255, 1, 0, 4, 255, 1, 1, 3, 255, 1, 1, 3, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 2, 255, 1, 1, 3, 255, 2, 2, 4, 255, 2, 2, 7, 255, 0, 1, 2, 255, 1, 1, 2, 255, 2, 1, 4, 255, 4, 1, 5, 255, 3, 1, 4, 255, 3, 1, 0, 255, 0, 2, 2, 255, 4, 3, 12, 255, 6, 21, 22, 255, 1, 8, 4, 255, 7, 42, 66, 255, 8, 91, 117, 255, 2, 20, 37, 255, 79, 168, 182, 255, 85, 211, 210, 255, 4, 31, 31, 255, 0, 28, 24, 255, 3, 25, 28, 255, 3, 3, 10, 255, 5, 0, 1, 255, 1, 1, 1, 255, 1, 3, 3, 255, 1, 2, 3, 255, 0, 3, 3, 255, 5, 2, 9, 255, 3, 0, 0, 255, 3, 20, 52, 255, 4, 32, 68, 255, 0, 2, 4, 255, 1, 0, 2, 255, 0, 0, 0, 255, 0, 0, 2, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 1, 255, 2, 1, 7, 255, 0, 3, 19, 255, 2, 4, 19, 255, 1, 2, 13, 255, 1, 0, 6, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 1, 255, 1, 1, 0, 255, 0, 0, 0, 255, 0, 0, 3, 255, 1, 2, 3, 255, 0, 2, 0, 255, 0, 0, 0, 255, 6, 2, 13, 255, 26, 29, 76, 255, 44, 63, 115, 255, 45, 61, 92, 255, 33, 39, 47, 255, 9, 13, 9, 255, 8, 2, 7, 255, 42, 28, 60, 255, 57, 58, 107, 255, 48, 58, 113, 255, 33, 40, 119, 255, 25, 46, 93, 255, 30, 24, 36, 255, 8, 8, 10, 255, 0, 1, 0, 255, 2, 1, 0, 255, 1, 3, 2, 255, 0, 1, 2, 255, 3, 2, 5, 255, 5, 3, 2, 255, 5, 2, 0, 255, 3, 4, 1, 255, 2, 4, 0, 255, 6, 5, 4, 255, 8, 3, 3, 255, 11, 6, 6, 255, 11, 4, 2, 255, 16, 8, 5, 255, 26, 17, 13, 255, 25, 20, 12, 255, 20, 19, 5, 255, 13, 11, 2, 255, 16, 14, 4, 255, 19, 17, 9, 255, 24, 21, 12, 255, 27, 26, 3, 255, 28, 26, 3, 255, 26, 24, 9, 255, 28, 26, 14, 255, 29, 26, 7, 255, 30, 30, 6, 255, 41, 39, 7, 255, 42, 36, 5, 255, 46, 42, 11, 255, 47, 45, 10, 255, 45, 42, 7, 255, 49, 45, 13, 255, 43, 45, 6, 255, 37, 39, 7, 255, 42, 40, 10, 255, 39, 38, 6, 255, 43, 41, 9, 255, 44, 37, 9, 255, 44, 32, 12, 255, 52, 38, 13, 255, 51, 34, 5, 255, 56, 40, 11, 255, 48, 37, 7, 255, 48, 34, 14, 255, 46, 31, 4, 255, 48, 33, 7, 255, 47, 28, 9, 255, 41, 31, 10, 255, 45, 32, 4, 255, 43, 29, 10, 255, 44, 29, 5, 255, 46, 28, 5, 255, 45, 31, 11, 255, 50, 35, 5, 255, 58, 38, 7, 255, 53, 34, 11, 255, 53, 33, 6, 255, 62, 38, 7, 255, 71, 41, 7, 255, 71, 36, 8, 255, 69, 34, 7, 255, 70, 37, 9, 255, 68, 37, 11, 255, 70, 37, 5, 255, 64, 40, 12, 255, 79, 43, 9, 255, 79, 38, 11, 255, 62, 34, 17, 255, 70, 43, 7, 255, 75, 47, 4, 255, 76, 43, 5, 255, 81, 46, 6, 255, 86, 51, 1, 255, 83, 47, 8, 255, 76, 48, 10, 255, 74, 45, 8, 255, 73, 40, 8, 255, 79, 42, 13, 255, 81, 45, 12, 255, 81, 46, 6, 255, 80, 46, 1, 255, 87, 53, 6, 255, 94, 57, 7, 255, 96, 55, 8, 255, 99, 53, 7, 255, 100, 55, 7, 255, 108, 62, 7, 255, 114, 65, 5, 255, 113, 67, 7, 255, 117, 69, 5, 255, 112, 64, 13, 255, 107, 65, 9, 255, 118, 75, 3, 255, 129, 78, 14, 255, 120, 73, 14, 255, 111, 70, 8, 255, 114, 70, 8, 255, 124, 76, 8, 255, 125, 74, 5, 255, 123, 71, 10, 255, 120, 71, 5, 255, 114, 67, 4, 255, 113, 66, 10, 255, 112, 67, 8, 255, 107, 65, 8, 255, 104, 65, 5, 255, 104, 63, 4, 255, 100, 63, 9, 255, 105, 65, 2, 255, 99, 63, 11, 255, 96, 59, 8, 255, 98, 62, 6, 255, 102, 60, 8, 255, 100, 60, 10, 255, 94, 60, 18, 255, 94, 59, 13, 255, 92, 54, 15, 255, 88, 56, 17, 255, 84, 57, 13, 255, 83, 56, 18, 255, 83, 55, 14, 255, 88, 58, 21, 255, 88, 59, 10, 255, 88, 61, 5, 255, 87, 59, 14, 255, 90, 60, 16, 255, 90, 62, 22, 255, 92, 68, 15, 255, 93, 68, 7, 255, 97, 68, 12, 255, 102, 70, 24, 255, 97, 64, 16, 255, 94, 68, 7, 255, 91, 67, 12, 255, 99, 66, 15, 255, 95, 65, 15, 255, 100, 70, 20, 255, 102, 65, 19, 255, 101, 73, 11, 255, 99, 70, 16, 255, 99, 72, 19, 255, 94, 66, 28, 255, 96, 71, 26, 255, 93, 71, 13, 255, 94, 70, 17, 255, 98, 66, 35, 255, 104, 71, 26, 255, 104, 71, 27, 255, 100, 71, 23, 255, 96, 71, 19, 255, 100, 70, 30, 255, 100, 66, 32, 255, 97, 73, 25, 255, 100, 77, 25, 255, 95, 71, 29, 255, 107, 75, 22, 255, 128, 80, 26, 255, 127, 83, 24, 255, 127, 84, 20, 255, 128, 84, 22, 255, 127, 82, 28, 255, 124, 81, 33, 255, 116, 80, 25, 255, 119, 81, 31, 255, 124, 80, 31, 255, 118, 82, 29, 255, 117, 85, 31, 255, 115, 85, 23, 255, 115, 85, 20, 255, 123, 88, 24, 255, 125, 90, 31, 255, 123, 90, 36, 255, 130, 97, 30, 255, 131, 95, 42, 255, 130, 96, 40, 255, 130, 98, 42, 255, 131, 99, 49, 255, 131, 102, 47, 255, 133, 108, 33, 255, 136, 107, 43, 255, 137, 105, 57, 255, 139, 110, 45, 255, 139, 112, 53, 255, 139, 115, 32, 255, 143, 113, 35, 255, 144, 116, 50, 255, 132, 116, 33, 255, 153, 140, 68, 255, 165, 149, 98, 255, 149, 114, 50, 255, 156, 118, 50, 255, 156, 118, 55, 255, 157, 122, 41, 255, 161, 125, 37, 255, 162, 125, 34, 255, 169, 126, 41, 255, 162, 122, 37, 255, 149, 122, 28, 255, 142, 114, 27, 255, 143, 111, 25, 255, 139, 107, 32, 255, 134, 103, 38, 255, 129, 100, 22, 255, 128, 102, 37, 255, 130, 102, 35, 255, 132, 97, 19, 255, 135, 95, 21, 255, 137, 93, 25, 255, 139, 91, 29, 255, 138, 88, 24, 255, 139, 88, 29, 255, 140, 90, 18, 255, 140, 88, 19, 255, 131, 84, 10, 255, 125, 89, 7, 255, 124, 86, 18, 255, 133, 81, 28, 255, 140, 83, 12, 255, 143, 86, 13, 255, 139, 83, 17, 255, 138, 83, 19, 255, 134, 81, 13, 255, 135, 82, 13, 255, 133, 80, 10, 255, 133, 80, 13, 255, 128, 77, 15, 255, 127, 76, 12, 255, 126, 81, 13, 255, 132, 79, 8, 255, 143, 81, 18, 255, 136, 81, 13, 255, 138, 80, 3, 255, 144, 76, 13, 255, 148, 83, 19, 255, 153, 91, 12, 255, 162, 95, 8, 255, 170, 96, 5, 255, 179, 101, 2, 255, 180, 102, 0, 255, 177, 98, 1, 255, 167, 90, 5, 255, 156, 80, 6, 255, 146, 75, 7, 255, 139, 75, 5, 255, 134, 74, 1, 255, 131, 69, 7, 255, 132, 73, 13, 255, 129, 72, 14, 255, 136, 70, 16, 255, 135, 70, 9, 255, 133, 74, 5, 255, 135, 74, 4, 255, 136, 70, 5, 255, 137, 71, 12, 255, 135, 72, 11, 255, 136, 74, 7, 255, 141, 73, 5, 255, 146, 81, 10, 255, 151, 84, 7, 255, 166, 89, 4, 255, 173, 96, 9, 255, 175, 97, 13, 255, 186, 106, 3, 255, 195, 111, 0, 255, 190, 99, 7, 255, 180, 90, 3, 255, 178, 95, 3, 255, 176, 93, 2, 255, 175, 94, 4, 255, 170, 90, 4, 255, 165, 86, 5, 255, 164, 85, 9, 255, 153, 82, 7, 255, 154, 79, 8, 255, 160, 78, 3, 255, 156, 75, 0, 255, 135, 60, 2, 255, 128, 50, 3, 255, 137, 56, 4, 255, 130, 55, 2, 255, 96, 31, 2, 255, 92, 34, 5, 255, 90, 29, 3, 255, 92, 39, 7, 255, 114, 53, 13, 255, 101, 45, 7, 255, 95, 55, 15, 255, 88, 54, 19, 255, 92, 42, 17, 255, 96, 43, 10, 255, 102, 52, 11, 255, 103, 54, 11, 255, 105, 50, 11, 255, 105, 50, 15, 255, 106, 50, 18, 255, 111, 51, 18, 255, 108, 54, 12, 255, 112, 52, 9, 255, 115, 51, 14, 255, 112, 47, 9, 255, 108, 39, 7, 255, 18, 38, 54, 255, 17, 70, 111, 255, 29, 83, 128, 255, 31, 91, 134, 255, 28, 98, 151, 255, 38, 100, 154, 255, 37, 104, 168, 255, 31, 122, 167, 255, 12, 93, 142, 255, 0, 17, 101, 255, 4, 0, 60, 255, 3, 2, 56, 255, 0, 3, 26, 255, 2, 1, 3, 255, 1, 1, 4, 255, 1, 0, 6, 255, 1, 1, 2, 255, 1, 0, 6, 255, 0, 0, 2, 255, 1, 0, 5, 255, 1, 1, 3, 255, 1, 1, 3, 255, 1, 1, 2, 255, 1, 1, 1, 255, 0, 0, 2, 255, 0, 1, 1, 255, 1, 2, 1, 255, 2, 3, 5, 255, 4, 0, 5, 255, 0, 1, 2, 255, 0, 2, 3, 255, 2, 2, 8, 255, 2, 2, 3, 255, 4, 3, 0, 255, 1, 0, 5, 255, 1, 2, 4, 255, 2, 5, 4, 255, 6, 17, 18, 255, 2, 6, 8, 255, 4, 48, 75, 255, 10, 80, 110, 255, 3, 26, 50, 255, 93, 186, 206, 255, 91, 198, 192, 255, 3, 29, 24, 255, 3, 29, 30, 255, 4, 8, 16, 255, 0, 0, 0, 255, 6, 1, 1, 255, 1, 0, 4, 255, 0, 0, 2, 255, 2, 0, 0, 255, 1, 4, 22, 255, 0, 54, 98, 255, 1, 129, 166, 255, 3, 102, 112, 255, 5, 9, 9, 255, 3, 0, 1, 255, 1, 0, 1, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 1, 0, 255, 0, 1, 4, 255, 4, 3, 16, 255, 1, 6, 35, 255, 2, 6, 31, 255, 0, 1, 17, 255, 0, 0, 5, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 1, 1, 255, 0, 0, 5, 255, 1, 0, 4, 255, 1, 2, 1, 255, 0, 0, 0, 255, 5, 5, 15, 255, 18, 19, 61, 255, 37, 52, 116, 255, 40, 59, 95, 255, 32, 36, 35, 255, 16, 15, 6, 255, 0, 0, 7, 255, 33, 26, 48, 255, 61, 55, 90, 255, 48, 51, 115, 255, 27, 38, 94, 255, 22, 33, 93, 255, 13, 26, 61, 255, 4, 7, 7, 255, 3, 1, 1, 255, 0, 2, 1, 255, 2, 3, 5, 255, 4, 1, 2, 255, 2, 2, 2, 255, 5, 2, 5, 255, 5, 3, 3, 255, 3, 3, 0, 255, 4, 4, 2, 255, 0, 0, 2, 255, 5, 4, 2, 255, 9, 6, 2, 255, 12, 5, 2, 255, 16, 7, 4, 255, 26, 16, 10, 255, 29, 21, 11, 255, 21, 13, 4, 255, 13, 9, 2, 255, 9, 10, 2, 255, 23, 17, 0, 255, 26, 16, 8, 255, 31, 20, 13, 255, 35, 28, 7, 255, 38, 32, 4, 255, 40, 33, 7, 255, 34, 33, 3, 255, 33, 31, 16, 255, 43, 36, 10, 255, 43, 39, 8, 255, 47, 44, 7, 255, 53, 49, 6, 255, 43, 45, 6, 255, 47, 50, 6, 255, 50, 52, 7, 255, 49, 47, 18, 255, 51, 46, 20, 255, 47, 43, 15, 255, 44, 40, 12, 255, 43, 40, 13, 255, 44, 38, 6, 255, 50, 43, 3, 255, 50, 37, 10, 255, 47, 32, 6, 255, 54, 40, 8, 255, 50, 35, 7, 255, 43, 31, 8, 255, 44, 36, 17, 255, 44, 30, 3, 255, 49, 31, 9, 255, 40, 26, 12, 255, 31, 25, 11, 255, 43, 30, 7, 255, 48, 30, 10, 255, 48, 31, 11, 255, 49, 31, 16, 255, 51, 31, 13, 255, 51, 31, 1, 255, 57, 38, 7, 255, 57, 40, 14, 255, 56, 35, 6, 255, 63, 36, 11, 255, 68, 37, 4, 255, 71, 40, 7, 255, 66, 37, 10, 255, 70, 40, 6, 255, 68, 40, 0, 255, 75, 45, 7, 255, 70, 40, 11, 255, 93, 41, 10, 255, 80, 42, 8, 255, 70, 41, 9, 255, 74, 42, 9, 255, 72, 39, 12, 255, 78, 45, 5, 255, 79, 45, 10, 255, 79, 46, 12, 255, 79, 46, 4, 255, 79, 45, 6, 255, 80, 47, 8, 255, 79, 44, 8, 255, 76, 40, 9, 255, 77, 42, 6, 255, 78, 47, 6, 255, 83, 46, 9, 255, 85, 51, 7, 255, 90, 56, 2, 255, 98, 58, 4, 255, 101, 58, 8, 255, 96, 56, 5, 255, 106, 64, 7, 255, 112, 64, 10, 255, 108, 63, 14, 255, 112, 66, 6, 255, 109, 64, 11, 255, 110, 68, 13, 255, 120, 75, 9, 255, 132, 78, 11, 255, 124, 73, 10, 255, 123, 76, 5, 255, 128, 79, 7, 255, 138, 84, 6, 255, 138, 82, 4, 255, 135, 80, 8, 255, 134, 82, 6, 255, 127, 76, 6, 255, 122, 70, 6, 255, 120, 69, 6, 255, 115, 68, 6, 255, 113, 68, 7, 255, 107, 63, 5, 255, 106, 64, 7, 255, 109, 62, 8, 255, 104, 65, 9, 255, 102, 64, 9, 255, 100, 62, 16, 255, 96, 60, 12, 255, 97, 62, 6, 255, 93, 58, 14, 255, 90, 57, 8, 255, 90, 57, 11, 255, 92, 59, 19, 255, 89, 58, 13, 255, 84, 56, 13, 255, 87, 56, 17, 255, 87, 53, 17, 255, 88, 58, 16, 255, 88, 61, 12, 255, 93, 65, 16, 255, 93, 61, 17, 255, 91, 61, 15, 255, 98, 67, 11, 255, 99, 65, 17, 255, 100, 64, 20, 255, 101, 68, 16, 255, 100, 68, 18, 255, 95, 63, 28, 255, 91, 62, 17, 255, 94, 66, 16, 255, 100, 70, 13, 255, 103, 69, 10, 255, 102, 63, 31, 255, 99, 69, 23, 255, 101, 69, 19, 255, 100, 68, 16, 255, 97, 66, 25, 255, 94, 68, 16, 255, 95, 71, 21, 255, 100, 70, 27, 255, 101, 68, 26, 255, 100, 71, 17, 255, 99, 72, 15, 255, 101, 74, 18, 255, 101, 69, 15, 255, 101, 67, 24, 255, 101, 73, 24, 255, 102, 74, 19, 255, 105, 73, 22, 255, 102, 73, 28, 255, 106, 80, 20, 255, 119, 77, 30, 255, 127, 77, 29, 255, 126, 80, 22, 255, 132, 87, 24, 255, 131, 83, 25, 255, 128, 82, 28, 255, 122, 84, 28, 255, 120, 83, 27, 255, 127, 84, 22, 255, 124, 84, 25, 255, 117, 79, 37, 255, 114, 81, 30, 255, 116, 87, 30, 255, 123, 87, 40, 255, 127, 93, 30, 255, 126, 93, 37, 255, 129, 97, 26, 255, 130, 97, 22, 255, 131, 97, 32, 255, 129, 100, 37, 255, 134, 102, 43, 255, 133, 103, 41, 255, 132, 101, 48, 255, 135, 105, 40, 255, 140, 108, 30, 255, 141, 108, 43, 255, 141, 109, 52, 255, 143, 113, 44, 255, 145, 111, 47, 255, 147, 116, 47, 255, 141, 116, 34, 255, 142, 125, 50, 255, 167, 156, 87, 255, 152, 122, 57, 255, 150, 116, 48, 255, 156, 118, 43, 255, 159, 122, 35, 255, 162, 123, 37, 255, 166, 125, 39, 255, 171, 128, 29, 255, 161, 120, 39, 255, 148, 115, 40, 255, 146, 111, 34, 255, 148, 111, 34, 255, 140, 106, 35, 255, 136, 107, 32, 255, 133, 99, 28, 255, 131, 100, 34, 255, 128, 100, 30, 255, 134, 98, 30, 255, 139, 97, 21, 255, 137, 92, 23, 255, 138, 93, 26, 255, 142, 92, 24, 255, 140, 91, 19, 255, 140, 92, 15, 255, 144, 88, 24, 255, 139, 86, 20, 255, 129, 91, 6, 255, 123, 86, 18, 255, 134, 85, 20, 255, 142, 88, 5, 255, 144, 88, 5, 255, 144, 89, 13, 255, 139, 82, 16, 255, 136, 81, 16, 255, 133, 81, 6, 255, 134, 81, 8, 255, 137, 81, 17, 255, 132, 77, 11, 255, 129, 74, 9, 255, 131, 80, 8, 255, 130, 80, 4, 255, 134, 80, 16, 255, 137, 83, 10, 255, 142, 85, 2, 255, 148, 85, 17, 255, 144, 82, 9, 255, 149, 87, 4, 255, 166, 98, 10, 255, 172, 96, 9, 255, 175, 96, 1, 255, 184, 103, 1, 255, 188, 104, 8, 255, 175, 94, 4, 255, 162, 85, 5, 255, 150, 79, 3, 255, 139, 74, 7, 255, 135, 75, 5, 255, 132, 73, 8, 255, 136, 75, 6, 255, 137, 71, 7, 255, 128, 72, 6, 255, 136, 73, 6, 255, 156, 74, 7, 255, 149, 75, 6, 255, 137, 74, 5, 255, 146, 76, 3, 255, 142, 76, 10, 255, 134, 74, 6, 255, 139, 75, 8, 255, 139, 79, 5, 255, 151, 83, 7, 255, 162, 86, 10, 255, 169, 96, 4, 255, 179, 97, 6, 255, 191, 99, 5, 255, 199, 102, 5, 255, 179, 82, 4, 255, 179, 89, 10, 255, 188, 106, 8, 255, 187, 103, 6, 255, 186, 98, 3, 255, 184, 94, 4, 255, 175, 87, 2, 255, 170, 83, 2, 255, 168, 77, 0, 255, 170, 75, 2, 255, 160, 73, 0, 255, 130, 53, 3, 255, 122, 46, 11, 255, 145, 64, 6, 255, 144, 61, 4, 255, 102, 32, 5, 255, 88, 35, 7, 255, 84, 33, 4, 255, 103, 43, 6, 255, 117, 45, 9, 255, 99, 46, 5, 255, 90, 52, 10, 255, 105, 68, 12, 255, 105, 60, 8, 255, 83, 37, 13, 255, 87, 37, 11, 255, 103, 50, 15, 255, 99, 45, 12, 255, 102, 45, 12, 255, 109, 46, 14, 255, 109, 45, 9, 255, 113, 50, 11, 255, 112, 48, 10, 255, 112, 48, 11, 255, 118, 53, 12, 255, 118, 53, 9, 255, 115, 46, 7, 255, 16, 24, 66, 255, 22, 59, 103, 255, 25, 67, 108, 255, 23, 81, 126, 255, 21, 93, 147, 255, 32, 100, 158, 255, 26, 115, 173, 255, 27, 106, 132, 255, 5, 25, 90, 255, 0, 0, 66, 255, 3, 2, 65, 255, 3, 2, 65, 255, 2, 2, 21, 255, 1, 0, 1, 255, 1, 0, 3, 255, 1, 0, 4, 255, 1, 1, 4, 255, 1, 0, 7, 255, 1, 1, 3, 255, 2, 1, 3, 255, 1, 1, 3, 255, 0, 0, 3, 255, 1, 1, 2, 255, 1, 2, 1, 255, 0, 1, 1, 255, 0, 1, 1, 255, 2, 0, 4, 255, 2, 0, 3, 255, 3, 1, 3, 255, 0, 1, 2, 255, 2, 0, 2, 255, 3, 0, 0, 255, 0, 0, 2, 255, 0, 0, 0, 255, 1, 0, 1, 255, 2, 0, 3, 255, 1, 1, 2, 255, 2, 5, 5, 255, 3, 9, 13, 255, 6, 0, 2, 255, 7, 63, 91, 255, 8, 83, 99, 255, 8, 26, 46, 255, 108, 192, 217, 255, 82, 179, 177, 255, 4, 13, 16, 255, 6, 28, 34, 255, 2, 8, 9, 255, 2, 0, 4, 255, 2, 0, 2, 255, 2, 0, 0, 255, 3, 29, 62, 255, 2, 103, 157, 255, 3, 132, 157, 255, 4, 73, 68, 255, 3, 23, 14, 255, 3, 4, 4, 255, 2, 0, 1, 255, 1, 1, 4, 255, 2, 1, 3, 255, 1, 1, 1, 255, 1, 2, 5, 255, 0, 4, 11, 255, 3, 8, 28, 255, 2, 11, 43, 255, 5, 11, 40, 255, 1, 2, 19, 255, 0, 0, 3, 255, 1, 1, 1, 255, 0, 0, 1, 255, 1, 0, 1, 255, 1, 0, 0, 255, 0, 1, 0, 255, 0, 0, 1, 255, 0, 1, 0, 255, 0, 1, 2, 255, 0, 1, 0, 255, 0, 1, 2, 255, 2, 1, 4, 255, 0, 1, 0, 255, 1, 1, 5, 255, 13, 20, 56, 255, 36, 43, 90, 255, 44, 56, 85, 255, 24, 44, 42, 255, 9, 16, 9, 255, 7, 1, 4, 255, 25, 18, 41, 255, 35, 45, 84, 255, 38, 57, 150, 255, 23, 50, 143, 255, 8, 37, 93, 255, 17, 24, 57, 255, 9, 8, 7, 255, 0, 0, 0, 255, 3, 1, 0, 255, 5, 0, 6, 255, 1, 1, 1, 255, 1, 2, 0, 255, 5, 2, 2, 255, 3, 2, 3, 255, 2, 2, 1, 255, 8, 2, 5, 255, 6, 1, 1, 255, 10, 6, 2, 255, 8, 4, 1, 255, 10, 5, 3, 255, 17, 14, 5, 255, 18, 14, 4, 255, 18, 12, 8, 255, 15, 9, 1, 255, 13, 9, 0, 255, 10, 10, 4, 255, 10, 14, 6, 255, 16, 15, 5, 255, 14, 15, 13, 255, 24, 20, 11, 255, 61, 33, 8, 255, 83, 44, 8, 255, 81, 52, 4, 255, 58, 44, 6, 255, 41, 34, 5, 255, 42, 37, 12, 255, 42, 40, 10, 255, 44, 49, 10, 255, 51, 53, 14, 255, 57, 56, 15, 255, 54, 54, 16, 255, 49, 58, 11, 255, 51, 53, 6, 255, 56, 53, 9, 255, 43, 48, 5, 255, 46, 50, 10, 255, 41, 39, 10, 255, 45, 39, 11, 255, 46, 43, 12, 255, 42, 39, 7, 255, 49, 40, 8, 255, 53, 37, 3, 255, 54, 35, 4, 255, 49, 33, 6, 255, 44, 36, 8, 255, 39, 28, 3, 255, 48, 30, 6, 255, 58, 33, 6, 255, 48, 32, 9, 255, 41, 31, 3, 255, 46, 34, 6, 255, 48, 30, 7, 255, 53, 30, 11, 255, 48, 33, 12, 255, 54, 36, 9, 255, 58, 38, 1, 255, 60, 33, 10, 255, 62, 33, 17, 255, 62, 36, 5, 255, 69, 36, 16, 255, 71, 38, 10, 255, 69, 39, 2, 255, 65, 41, 7, 255, 73, 41, 14, 255, 71, 42, 4, 255, 70, 42, 6, 255, 73, 39, 8, 255, 102, 44, 12, 255, 85, 41, 2, 255, 74, 41, 0, 255, 71, 43, 2, 255, 69, 42, 6, 255, 73, 43, 4, 255, 80, 43, 13, 255, 82, 46, 11, 255, 79, 48, 2, 255, 78, 42, 5, 255, 75, 40, 12, 255, 74, 43, 3, 255, 81, 43, 10, 255, 80, 42, 12, 255, 79, 47, 7, 255, 86, 50, 10, 255, 86, 47, 6, 255, 87, 48, 7, 255, 94, 55, 13, 255, 95, 54, 11, 255, 93, 55, 9, 255, 101, 63, 10, 255, 107, 63, 9, 255, 110, 64, 19, 255, 112, 65, 8, 255, 108, 62, 3, 255, 110, 66, 15, 255, 121, 75, 8, 255, 139, 87, 6, 255, 133, 82, 10, 255, 130, 80, 9, 255, 137, 83, 5, 255, 146, 86, 8, 255, 152, 87, 9, 255, 150, 85, 18, 255, 144, 83, 9, 255, 135, 78, 5, 255, 130, 76, 11, 255, 127, 79, 8, 255, 122, 74, 5, 255, 120, 71, 10, 255, 116, 67, 10, 255, 116, 67, 2, 255, 115, 67, 12, 255, 108, 66, 13, 255, 108, 64, 17, 255, 103, 63, 13, 255, 96, 63, 15, 255, 95, 64, 12, 255, 92, 58, 21, 255, 90, 56, 18, 255, 91, 58, 13, 255, 91, 55, 14, 255, 89, 55, 13, 255, 86, 56, 19, 255, 89, 57, 12, 255, 92, 57, 11, 255, 94, 59, 15, 255, 90, 55, 17, 255, 92, 61, 10, 255, 86, 59, 15, 255, 90, 59, 24, 255, 100, 66, 22, 255, 102, 63, 23, 255, 103, 62, 26, 255, 106, 68, 22, 255, 102, 68, 19, 255, 96, 67, 17, 255, 97, 66, 21, 255, 92, 63, 16, 255, 100, 68, 26, 255, 110, 73, 11, 255, 103, 66, 18, 255, 100, 69, 14, 255, 104, 70, 18, 255, 101, 67, 18, 255, 105, 75, 11, 255, 102, 71, 12, 255, 99, 66, 27, 255, 101, 67, 20, 255, 100, 69, 24, 255, 100, 71, 21, 255, 97, 71, 23, 255, 96, 72, 24, 255, 104, 71, 17, 255, 103, 68, 24, 255, 103, 73, 19, 255, 104, 76, 13, 255, 103, 73, 10, 255, 103, 75, 26, 255, 98, 72, 26, 255, 109, 80, 13, 255, 120, 83, 23, 255, 125, 80, 25, 255, 128, 84, 29, 255, 131, 86, 23, 255, 128, 83, 21, 255, 122, 81, 26, 255, 120, 78, 30, 255, 126, 86, 21, 255, 126, 85, 18, 255, 123, 83, 28, 255, 120, 85, 26, 255, 119, 86, 35, 255, 119, 85, 35, 255, 130, 92, 37, 255, 128, 96, 25, 255, 126, 95, 30, 255, 131, 94, 28, 255, 135, 99, 30, 255, 131, 98, 38, 255, 131, 102, 39, 255, 132, 101, 41, 255, 134, 100, 45, 255, 139, 105, 42, 255, 140, 108, 33, 255, 142, 111, 30, 255, 142, 108, 44, 255, 144, 108, 50, 255, 146, 109, 51, 255, 149, 113, 45, 255, 144, 111, 52, 255, 136, 112, 45, 255, 163, 151, 82, 255, 155, 129, 74, 255, 146, 114, 43, 255, 153, 117, 43, 255, 156, 119, 37, 255, 162, 121, 36, 255, 166, 124, 37, 255, 173, 125, 42, 255, 163, 120, 31, 255, 152, 116, 30, 255, 147, 111, 30, 255, 147, 110, 30, 255, 142, 105, 38, 255, 138, 104, 29, 255, 138, 101, 31, 255, 132, 100, 31, 255, 128, 98, 26, 255, 133, 96, 31, 255, 142, 97, 21, 255, 141, 92, 22, 255, 141, 96, 15, 255, 145, 92, 27, 255, 141, 89, 23, 255, 140, 92, 14, 255, 144, 92, 14, 255, 138, 90, 19, 255, 127, 88, 13, 255, 130, 84, 22, 255, 138, 84, 23, 255, 141, 85, 12, 255, 143, 84, 19, 255, 142, 81, 20, 255, 139, 81, 13, 255, 134, 79, 14, 255, 133, 79, 11, 255, 139, 85, 14, 255, 141, 84, 13, 255, 133, 75, 15, 255, 131, 78, 9, 255, 141, 82, 12, 255, 138, 83, 3, 255, 133, 79, 10, 255, 137, 82, 10, 255, 139, 79, 11, 255, 146, 87, 12, 255, 155, 99, 12, 255, 146, 84, 11, 255, 159, 92, 12, 255, 171, 97, 13, 255, 175, 99, 4, 255, 180, 101, 3, 255, 184, 103, 4, 255, 178, 99, 3, 255, 164, 87, 3, 255, 150, 80, 6, 255, 139, 74, 12, 255, 136, 74, 7, 255, 136, 76, 5, 255, 137, 75, 1, 255, 138, 75, 3, 255, 143, 76, 6, 255, 142, 73, 4, 255, 143, 76, 4, 255, 144, 72, 3, 255, 140, 71, 3, 255, 141, 74, 3, 255, 137, 74, 3, 255, 131, 74, 3, 255, 136, 75, 9, 255, 146, 81, 8, 255, 160, 82, 3, 255, 165, 86, 16, 255, 165, 91, 7, 255, 182, 98, 8, 255, 178, 83, 6, 255, 172, 67, 6, 255, 182, 86, 6, 255, 200, 118, 8, 255, 202, 110, 5, 255, 190, 89, 1, 255, 171, 74, 1, 255, 161, 62, 7, 255, 156, 59, 5, 255, 150, 58, 5, 255, 148, 59, 8, 255, 160, 64, 3, 255, 155, 60, 3, 255, 120, 44, 5, 255, 132, 52, 5, 255, 163, 73, 9, 255, 159, 62, 8, 255, 130, 44, 7, 255, 101, 36, 2, 255, 103, 35, 7, 255, 112, 52, 5, 255, 105, 54, 6, 255, 103, 56, 11, 255, 107, 68, 16, 255, 111, 69, 10, 255, 105, 54, 10, 255, 77, 33, 6, 255, 67, 26, 4, 255, 91, 35, 16, 255, 102, 41, 18, 255, 102, 41, 7, 255, 109, 44, 8, 255, 109, 46, 7, 255, 112, 51, 10, 255, 113, 47, 6, 255, 117, 50, 10, 255, 120, 55, 8, 255, 120, 53, 10, 255, 115, 43, 14, 255, 46, 41, 121, 255, 43, 64, 112, 255, 30, 63, 106, 255, 26, 72, 125, 255, 23, 88, 132, 255, 30, 105, 148, 255, 20, 103, 124, 255, 4, 33, 87, 255, 3, 0, 87, 255, 3, 2, 76, 255, 0, 4, 79, 255, 2, 2, 62, 255, 2, 1, 10, 255, 1, 1, 2, 255, 0, 0, 1, 255, 0, 0, 1, 255, 1, 0, 5, 255, 1, 0, 6, 255, 1, 1, 4, 255, 1, 1, 1, 255, 1, 1, 3, 255, 1, 0, 6, 255, 0, 0, 5, 255, 0, 1, 2, 255, 1, 2, 2, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 2, 255, 1, 1, 3, 255, 0, 0, 3, 255, 0, 0, 2, 255, 0, 0, 1, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 1, 5, 255, 3, 10, 8, 255, 7, 0, 4, 255, 4, 57, 90, 255, 20, 111, 152, 255, 20, 103, 128, 255, 114, 209, 223, 255, 65, 154, 154, 255, 0, 18, 24, 255, 5, 30, 49, 255, 2, 0, 0, 255, 1, 9, 24, 255, 3, 70, 121, 255, 3, 131, 172, 255, 0, 109, 112, 255, 4, 43, 31, 255, 4, 0, 0, 255, 3, 0, 0, 255, 9, 0, 0, 255, 3, 1, 4, 255, 2, 2, 5, 255, 3, 0, 0, 255, 2, 2, 0, 255, 3, 2, 15, 255, 3, 9, 32, 255, 3, 9, 38, 255, 2, 11, 40, 255, 4, 10, 33, 255, 2, 3, 14, 255, 1, 0, 5, 255, 1, 0, 6, 255, 0, 0, 4, 255, 1, 2, 2, 255, 2, 1, 1, 255, 2, 1, 3, 255, 0, 1, 1, 255, 1, 1, 2, 255, 2, 1, 4, 255, 2, 1, 5, 255, 2, 1, 1, 255, 0, 1, 0, 255, 9, 6, 40, 255, 39, 39, 94, 255, 31, 54, 106, 255, 27, 43, 55, 255, 20, 19, 7, 255, 5, 4, 0, 255, 25, 16, 40, 255, 42, 48, 98, 255, 45, 54, 129, 255, 28, 55, 133, 255, 6, 32, 127, 255, 1, 19, 81, 255, 6, 13, 20, 255, 3, 1, 0, 255, 2, 0, 5, 255, 0, 1, 4, 255, 0, 0, 2, 255, 0, 1, 0, 255, 1, 1, 0, 255, 2, 1, 2, 255, 2, 0, 1, 255, 3, 2, 1, 255, 4, 1, 0, 255, 3, 0, 1, 255, 7, 3, 0, 255, 11, 6, 0, 255, 19, 11, 4, 255, 19, 12, 5, 255, 18, 11, 3, 255, 13, 9, 2, 255, 11, 6, 4, 255, 15, 8, 0, 255, 9, 6, 7, 255, 3, 2, 2, 255, 11, 12, 6, 255, 17, 9, 5, 255, 36, 16, 11, 255, 64, 46, 5, 255, 78, 50, 7, 255, 75, 39, 6, 255, 60, 34, 6, 255, 40, 28, 6, 255, 42, 33, 5, 255, 47, 49, 6, 255, 48, 53, 17, 255, 54, 62, 15, 255, 57, 64, 15, 255, 55, 60, 12, 255, 56, 60, 10, 255, 50, 57, 16, 255, 49, 51, 13, 255, 54, 55, 5, 255, 47, 52, 5, 255, 47, 48, 7, 255, 47, 43, 7, 255, 54, 43, 5, 255, 50, 37, 9, 255, 48, 39, 15, 255, 44, 38, 4, 255, 47, 37, 10, 255, 46, 32, 13, 255, 46, 32, 6, 255, 49, 36, 4, 255, 48, 33, 5, 255, 50, 30, 5, 255, 52, 30, 5, 255, 52, 28, 6, 255, 53, 29, 9, 255, 50, 33, 5, 255, 43, 32, 3, 255, 54, 32, 9, 255, 57, 34, 7, 255, 51, 40, 8, 255, 58, 36, 11, 255, 62, 38, 19, 255, 55, 33, 13, 255, 65, 38, 7, 255, 72, 39, 9, 255, 68, 40, 3, 255, 77, 44, 4, 255, 83, 49, 9, 255, 82, 44, 11, 255, 75, 45, 13, 255, 67, 42, 8, 255, 73, 39, 10, 255, 97, 43, 13, 255, 88, 36, 2, 255, 72, 39, 13, 255, 67, 43, 12, 255, 76, 48, 5, 255, 78, 47, 1, 255, 77, 40, 8, 255, 86, 42, 10, 255, 81, 40, 12, 255, 77, 42, 2, 255, 75, 44, 10, 255, 72, 43, 15, 255, 77, 40, 5, 255, 78, 42, 10, 255, 81, 47, 8, 255, 85, 53, 3, 255, 90, 51, 5, 255, 89, 46, 14, 255, 87, 50, 13, 255, 89, 50, 8, 255, 96, 58, 13, 255, 100, 64, 9, 255, 105, 66, 6, 255, 110, 67, 9, 255, 111, 66, 10, 255, 110, 64, 6, 255, 113, 68, 7, 255, 124, 79, 1, 255, 139, 87, 5, 255, 135, 81, 8, 255, 142, 83, 11, 255, 147, 86, 8, 255, 157, 93, 9, 255, 167, 104, 11, 255, 166, 101, 9, 255, 161, 95, 3, 255, 159, 92, 8, 255, 148, 86, 11, 255, 138, 84, 8, 255, 129, 77, 4, 255, 126, 73, 6, 255, 124, 72, 9, 255, 118, 69, 15, 255, 115, 72, 5, 255, 110, 68, 12, 255, 109, 68, 11, 255, 107, 66, 7, 255, 103, 60, 11, 255, 98, 61, 10, 255, 93, 59, 15, 255, 91, 57, 16, 255, 93, 56, 19, 255, 93, 58, 23, 255, 89, 59, 11, 255, 89, 61, 10, 255, 86, 58, 14, 255, 86, 55, 16, 255, 93, 62, 15, 255, 92, 59, 17, 255, 89, 59, 13, 255, 92, 60, 17, 255, 93, 59, 24, 255, 95, 63, 14, 255, 95, 64, 9, 255, 99, 64, 22, 255, 106, 70, 18, 255, 103, 69, 14, 255, 98, 70, 10, 255, 101, 66, 17, 255, 101, 65, 24, 255, 100, 66, 21, 255, 110, 69, 19, 255, 108, 72, 24, 255, 102, 70, 12, 255, 103, 70, 15, 255, 102, 69, 21, 255, 99, 65, 23, 255, 101, 65, 24, 255, 105, 69, 17, 255, 98, 70, 16, 255, 94, 65, 20, 255, 99, 66, 25, 255, 99, 69, 25, 255, 101, 71, 16, 255, 106, 70, 18, 255, 115, 77, 27, 255, 111, 77, 18, 255, 100, 67, 22, 255, 102, 74, 24, 255, 107, 79, 21, 255, 105, 75, 27, 255, 105, 79, 16, 255, 115, 85, 20, 255, 133, 83, 20, 255, 129, 79, 29, 255, 130, 82, 22, 255, 128, 79, 27, 255, 123, 78, 24, 255, 122, 83, 22, 255, 122, 85, 19, 255, 125, 84, 21, 255, 125, 82, 24, 255, 126, 85, 26, 255, 121, 86, 20, 255, 122, 86, 29, 255, 133, 91, 36, 255, 128, 91, 35, 255, 129, 93, 36, 255, 134, 95, 30, 255, 139, 100, 24, 255, 138, 101, 33, 255, 135, 95, 46, 255, 133, 99, 44, 255, 130, 102, 42, 255, 136, 108, 43, 255, 142, 106, 51, 255, 145, 113, 19, 255, 143, 106, 44, 255, 145, 110, 34, 255, 147, 111, 32, 255, 150, 110, 48, 255, 147, 112, 47, 255, 133, 109, 37, 255, 151, 136, 63, 255, 160, 142, 71, 255, 148, 117, 40, 255, 155, 118, 43, 255, 156, 121, 36, 255, 161, 121, 34, 255, 162, 124, 27, 255, 170, 123, 28, 255, 168, 122, 18, 255, 156, 115, 32, 255, 149, 113, 34, 255, 143, 109, 25, 255, 143, 107, 28, 255, 142, 104, 27, 255, 139, 103, 30, 255, 132, 99, 25, 255, 134, 102, 23, 255, 137, 98, 22, 255, 143, 97, 21, 255, 144, 95, 23, 255, 141, 96, 18, 255, 144, 92, 17, 255, 142, 91, 15, 255, 138, 89, 17, 255, 143, 90, 20, 255, 138, 89, 14, 255, 128, 85, 18, 255, 131, 88, 12, 255, 141, 89, 12, 255, 138, 85, 17, 255, 141, 84, 23, 255, 142, 83, 22, 255, 130, 79, 16, 255, 129, 78, 12, 255, 136, 82, 11, 255, 134, 81, 13, 255, 137, 78, 17, 255, 135, 79, 10, 255, 128, 82, 5, 255, 138, 82, 11, 255, 136, 79, 10, 255, 134, 82, 4, 255, 137, 82, 5, 255, 140, 81, 7, 255, 146, 86, 5, 255, 156, 98, 19, 255, 149, 89, 19, 255, 161, 95, 20, 255, 166, 96, 13, 255, 168, 98, 2, 255, 178, 103, 10, 255, 185, 103, 8, 255, 182, 100, 4, 255, 168, 90, 6, 255, 154, 82, 8, 255, 145, 78, 8, 255, 141, 76, 4, 255, 142, 75, 4, 255, 140, 73, 6, 255, 136, 73, 6, 255, 138, 73, 7, 255, 140, 75, 9, 255, 134, 75, 7, 255, 141, 74, 8, 255, 140, 71, 6, 255, 137, 73, 6, 255, 132, 72, 6, 255, 134, 76, 4, 255, 138, 78, 2, 255, 149, 80, 6, 255, 155, 81, 6, 255, 161, 85, 12, 255, 167, 90, 14, 255, 187, 106, 7, 255, 190, 104, 2, 255, 177, 92, 7, 255, 196, 110, 5, 255, 199, 98, 7, 255, 162, 58, 6, 255, 129, 44, 4, 255, 123, 47, 11, 255, 124, 40, 14, 255, 125, 46, 4, 255, 131, 55, 1, 255, 155, 64, 5, 255, 143, 52, 6, 255, 113, 39, 2, 255, 111, 41, 3, 255, 119, 44, 4, 255, 136, 54, 7, 255, 151, 62, 3, 255, 144, 53, 10, 255, 116, 40, 9, 255, 107, 42, 7, 255, 116, 50, 11, 255, 121, 64, 13, 255, 114, 73, 18, 255, 114, 67, 17, 255, 106, 59, 9, 255, 82, 39, 6, 255, 71, 31, 6, 255, 82, 40, 5, 255, 100, 47, 10, 255, 105, 43, 10, 255, 105, 40, 6, 255, 105, 40, 5, 255, 104, 41, 8, 255, 107, 47, 8, 255, 108, 48, 6, 255, 111, 49, 10, 255, 109, 43, 9, 255, 107, 39, 9, 255, 105, 35, 9, 255, 82, 72, 147, 255, 70, 78, 141, 255, 44, 70, 140, 255, 34, 77, 135, 255, 33, 82, 133, 255, 28, 72, 124, 255, 8, 28, 100, 255, 1, 0, 98, 255, 2, 0, 88, 255, 4, 2, 105, 255, 2, 2, 104, 255, 3, 6, 74, 255, 0, 4, 8, 255, 0, 1, 5, 255, 1, 1, 4, 255, 1, 0, 4, 255, 0, 0, 4, 255, 0, 0, 4, 255, 2, 1, 5, 255, 0, 1, 2, 255, 1, 0, 5, 255, 1, 0, 6, 255, 1, 0, 5, 255, 0, 0, 4, 255, 1, 0, 5, 255, 1, 0, 4, 255, 0, 0, 2, 255, 0, 0, 2, 255, 0, 0, 2, 255, 0, 0, 2, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 4, 0, 5, 255, 1, 0, 5, 255, 7, 7, 22, 255, 21, 119, 160, 255, 57, 215, 215, 255, 32, 174, 167, 255, 25, 84, 93, 255, 140, 227, 253, 255, 63, 143, 136, 255, 0, 11, 25, 255, 1, 50, 89, 255, 3, 105, 151, 255, 4, 126, 149, 255, 2, 70, 52, 255, 3, 12, 0, 255, 2, 0, 0, 255, 2, 0, 0, 255, 2, 0, 2, 255, 5, 15, 42, 255, 1, 68, 99, 255, 4, 50, 64, 255, 0, 4, 18, 255, 0, 1, 1, 255, 2, 0, 1, 255, 1, 6, 16, 255, 6, 11, 39, 255, 1, 10, 39, 255, 0, 7, 18, 255, 1, 2, 12, 255, 3, 1, 14, 255, 2, 1, 8, 255, 0, 0, 4, 255, 2, 1, 4, 255, 1, 2, 2, 255, 0, 3, 1, 255, 2, 0, 1, 255, 4, 0, 1, 255, 1, 0, 0, 255, 2, 0, 0, 255, 7, 2, 21, 255, 18, 29, 84, 255, 38, 56, 100, 255, 35, 46, 47, 255, 15, 22, 28, 255, 5, 4, 3, 255, 10, 4, 22, 255, 31, 37, 70, 255, 53, 54, 107, 255, 16, 46, 146, 255, 11, 38, 102, 255, 1, 16, 48, 255, 3, 6, 14, 255, 4, 0, 0, 255, 3, 0, 0, 255, 1, 0, 4, 255, 1, 2, 6, 255, 1, 1, 1, 255, 4, 0, 4, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 0, 0, 255, 3, 0, 0, 255, 6, 1, 0, 255, 7, 2, 0, 255, 14, 9, 4, 255, 20, 13, 7, 255, 17, 11, 5, 255, 14, 9, 3, 255, 10, 5, 3, 255, 6, 4, 0, 255, 10, 8, 3, 255, 15, 5, 4, 255, 10, 5, 5, 255, 16, 8, 8, 255, 55, 40, 16, 255, 60, 36, 21, 255, 120, 87, 40, 255, 202, 144, 32, 255, 108, 53, 1, 255, 57, 33, 5, 255, 48, 26, 5, 255, 31, 17, 9, 255, 30, 18, 10, 255, 47, 44, 7, 255, 62, 69, 11, 255, 64, 74, 22, 255, 65, 80, 16, 255, 62, 73, 17, 255, 58, 67, 16, 255, 55, 63, 18, 255, 51, 57, 18, 255, 54, 59, 11, 255, 54, 56, 13, 255, 53, 48, 12, 255, 45, 40, 8, 255, 50, 44, 1, 255, 50, 41, 6, 255, 58, 40, 7, 255, 60, 38, 7, 255, 47, 34, 8, 255, 37, 34, 6, 255, 41, 35, 9, 255, 49, 32, 13, 255, 56, 32, 14, 255, 51, 31, 14, 255, 50, 34, 6, 255, 49, 34, 12, 255, 50, 34, 5, 255, 54, 34, 12, 255, 52, 33, 13, 255, 49, 31, 14, 255, 55, 34, 10, 255, 55, 33, 5, 255, 62, 38, 4, 255, 59, 34, 8, 255, 58, 44, 5, 255, 66, 45, 6, 255, 68, 43, 13, 255, 71, 42, 5, 255, 79, 46, 8, 255, 85, 51, 10, 255, 90, 54, 4, 255, 91, 53, 6, 255, 81, 48, 9, 255, 78, 49, 13, 255, 84, 47, 12, 255, 106, 46, 9, 255, 97, 38, 7, 255, 79, 38, 17, 255, 70, 35, 6, 255, 80, 42, 7, 255, 81, 45, 9, 255, 78, 49, 2, 255, 80, 42, 4, 255, 78, 39, 7, 255, 75, 40, 4, 255, 79, 47, 5, 255, 74, 39, 23, 255, 67, 39, 11, 255, 75, 46, 7, 255, 80, 47, 13, 255, 82, 48, 8, 255, 90, 50, 8, 255, 89, 50, 10, 255, 88, 53, 11, 255, 89, 51, 8, 255, 96, 55, 11, 255, 101, 63, 10, 255, 104, 64, 12, 255, 108, 69, 4, 255, 109, 68, 7, 255, 108, 64, 9, 255, 111, 66, 2, 255, 125, 79, 2, 255, 139, 90, 7, 255, 141, 87, 12, 255, 148, 92, 6, 255, 164, 103, 4, 255, 178, 110, 5, 255, 188, 117, 4, 255, 197, 126, 3, 255, 191, 118, 1, 255, 182, 107, 2, 255, 165, 94, 6, 255, 147, 85, 12, 255, 131, 82, 4, 255, 123, 77, 4, 255, 122, 73, 11, 255, 119, 72, 8, 255, 113, 69, 8, 255, 109, 67, 8, 255, 107, 68, 8, 255, 104, 65, 6, 255, 103, 60, 12, 255, 101, 59, 10, 255, 98, 58, 9, 255, 101, 62, 10, 255, 98, 60, 10, 255, 96, 61, 16, 255, 96, 61, 11, 255, 94, 60, 9, 255, 90, 58, 16, 255, 86, 56, 14, 255, 90, 61, 20, 255, 91, 61, 18, 255, 94, 61, 22, 255, 100, 60, 15, 255, 97, 59, 16, 255, 100, 65, 13, 255, 102, 71, 11, 255, 102, 67, 17, 255, 105, 69, 13, 255, 107, 67, 15, 255, 104, 67, 12, 255, 104, 66, 11, 255, 106, 67, 16, 255, 103, 68, 12, 255, 108, 66, 20, 255, 106, 67, 19, 255, 101, 67, 20, 255, 102, 69, 16, 255, 99, 67, 18, 255, 98, 66, 24, 255, 97, 66, 24, 255, 100, 75, 10, 255, 97, 74, 18, 255, 99, 69, 16, 255, 98, 70, 18, 255, 102, 71, 22, 255, 101, 73, 8, 255, 101, 75, 20, 255, 108, 76, 11, 255, 106, 73, 12, 255, 107, 73, 35, 255, 108, 75, 21, 255, 105, 73, 15, 255, 106, 73, 32, 255, 110, 80, 22, 255, 111, 78, 25, 255, 126, 82, 18, 255, 131, 81, 30, 255, 134, 83, 27, 255, 130, 81, 32, 255, 127, 82, 25, 255, 122, 84, 20, 255, 122, 84, 25, 255, 124, 82, 33, 255, 127, 84, 26, 255, 125, 82, 30, 255, 127, 88, 29, 255, 125, 91, 21, 255, 125, 90, 31, 255, 130, 92, 36, 255, 133, 95, 32, 255, 134, 97, 27, 255, 133, 100, 18, 255, 137, 99, 30, 255, 133, 100, 39, 255, 135, 103, 29, 255, 137, 101, 27, 255, 139, 102, 40, 255, 140, 108, 30, 255, 142, 112, 33, 255, 145, 110, 38, 255, 146, 109, 40, 255, 148, 110, 41, 255, 151, 112, 45, 255, 149, 115, 36, 255, 138, 111, 32, 255, 140, 120, 40, 255, 164, 145, 76, 255, 145, 115, 47, 255, 152, 118, 34, 255, 155, 118, 32, 255, 159, 116, 39, 255, 160, 121, 33, 255, 168, 120, 34, 255, 170, 121, 35, 255, 159, 118, 35, 255, 150, 114, 34, 255, 144, 108, 31, 255, 142, 107, 26, 255, 143, 105, 33, 255, 138, 98, 30, 255, 132, 98, 23, 255, 130, 101, 22, 255, 135, 98, 34, 255, 140, 95, 29, 255, 142, 93, 21, 255, 141, 92, 26, 255, 145, 92, 25, 255, 144, 92, 25, 255, 142, 92, 16, 255, 147, 92, 18, 255, 147, 89, 23, 255, 137, 88, 15, 255, 129, 86, 15, 255, 135, 84, 22, 255, 141, 83, 21, 255, 142, 83, 20, 255, 134, 81, 17, 255, 131, 82, 15, 255, 134, 83, 12, 255, 135, 81, 12, 255, 135, 83, 11, 255, 141, 83, 15, 255, 131, 77, 10, 255, 128, 81, 7, 255, 135, 81, 12, 255, 138, 81, 10, 255, 136, 80, 6, 255, 140, 80, 9, 255, 144, 79, 10, 255, 146, 82, 10, 255, 151, 90, 10, 255, 155, 91, 15, 255, 162, 96, 11, 255, 164, 94, 11, 255, 166, 92, 6, 255, 181, 104, 3, 255, 191, 105, 8, 255, 184, 98, 7, 255, 176, 94, 6, 255, 163, 88, 1, 255, 153, 84, 0, 255, 147, 80, 2, 255, 144, 75, 7, 255, 141, 74, 10, 255, 135, 75, 6, 255, 140, 75, 6, 255, 144, 77, 7, 255, 141, 79, 6, 255, 142, 75, 5, 255, 144, 76, 6, 255, 142, 79, 8, 255, 140, 75, 5, 255, 139, 74, 8, 255, 139, 74, 8, 255, 147, 79, 5, 255, 155, 84, 5, 255, 161, 83, 2, 255, 171, 92, 3, 255, 167, 78, 15, 255, 178, 82, 5, 255, 210, 111, 0, 255, 187, 91, 11, 255, 130, 45, 4, 255, 101, 39, 5, 255, 109, 41, 10, 255, 129, 50, 5, 255, 129, 57, 4, 255, 138, 60, 4, 255, 161, 68, 5, 255, 145, 54, 3, 255, 123, 44, 3, 255, 111, 41, 2, 255, 120, 44, 5, 255, 126, 47, 4, 255, 130, 52, 2, 255, 141, 60, 4, 255, 140, 56, 4, 255, 118, 38, 7, 255, 111, 40, 8, 255, 126, 67, 6, 255, 122, 69, 21, 255, 112, 67, 12, 255, 109, 58, 4, 255, 91, 41, 5, 255, 79, 32, 3, 255, 100, 51, 12, 255, 116, 65, 5, 255, 115, 59, 8, 255, 106, 48, 8, 255, 107, 45, 12, 255, 102, 39, 6, 255, 100, 39, 3, 255, 103, 44, 7, 255, 105, 45, 8, 255, 102, 40, 2, 255, 104, 37, 8, 255, 107, 40, 14, 255, 100, 32, 10, 255, 62, 74, 159, 255, 74, 83, 162, 255, 71, 76, 150, 255, 50, 75, 150, 255, 27, 61, 143, 255, 6, 32, 130, 255, 0, 3, 107, 255, 0, 4, 103, 255, 2, 8, 106, 255, 3, 6, 115, 255, 4, 5, 126, 255, 1, 6, 69, 255, 1, 2, 15, 255, 1, 2, 7, 255, 0, 1, 5, 255, 0, 1, 5, 255, 1, 0, 7, 255, 1, 0, 6, 255, 1, 1, 4, 255, 0, 0, 2, 255, 1, 0, 5, 255, 1, 0, 6, 255, 1, 0, 5, 255, 1, 1, 3, 255, 1, 1, 4, 255, 1, 0, 4, 255, 0, 0, 2, 255, 0, 0, 2, 255, 0, 0, 2, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 3, 0, 1, 255, 2, 0, 0, 255, 4, 30, 46, 255, 27, 182, 184, 255, 66, 200, 190, 255, 76, 212, 211, 255, 20, 158, 157, 255, 50, 126, 154, 255, 135, 246, 255, 255, 53, 157, 172, 255, 0, 94, 117, 255, 8, 97, 102, 255, 5, 33, 20, 255, 4, 0, 0, 255, 0, 0, 0, 255, 2, 0, 0, 255, 6, 5, 14, 255, 6, 38, 73, 255, 3, 86, 131, 255, 2, 91, 104, 255, 0, 71, 67, 255, 6, 21, 30, 255, 3, 0, 0, 255, 1, 0, 1, 255, 1, 1, 0, 255, 4, 9, 29, 255, 3, 9, 41, 255, 0, 4, 25, 255, 0, 1, 15, 255, 3, 1, 11, 255, 2, 1, 4, 255, 0, 0, 0, 255, 1, 0, 2, 255, 1, 2, 4, 255, 1, 1, 8, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 3, 17, 255, 10, 21, 61, 255, 30, 48, 94, 255, 23, 52, 68, 255, 20, 30, 22, 255, 4, 3, 0, 255, 11, 11, 13, 255, 28, 28, 54, 255, 34, 48, 118, 255, 14, 47, 128, 255, 7, 30, 88, 255, 2, 12, 48, 255, 7, 7, 13, 255, 1, 4, 0, 255, 2, 1, 0, 255, 0, 1, 1, 255, 1, 2, 1, 255, 1, 0, 7, 255, 1, 1, 6, 255, 0, 1, 2, 255, 1, 1, 2, 255, 2, 0, 1, 255, 2, 1, 0, 255, 7, 3, 1, 255, 10, 5, 2, 255, 14, 8, 4, 255, 17, 9, 6, 255, 13, 6, 2, 255, 14, 9, 3, 255, 9, 4, 0, 255, 6, 2, 2, 255, 10, 7, 5, 255, 7, 5, 2, 255, 8, 8, 4, 255, 8, 9, 1, 255, 11, 10, 7, 255, 36, 25, 16, 255, 87, 61, 33, 255, 96, 57, 14, 255, 215, 163, 42, 255, 200, 131, 19, 255, 46, 14, 7, 255, 32, 21, 10, 255, 47, 25, 9, 255, 35, 19, 4, 255, 26, 21, 6, 255, 39, 46, 11, 255, 69, 79, 24, 255, 69, 83, 26, 255, 67, 83, 11, 255, 66, 78, 14, 255, 58, 66, 13, 255, 56, 65, 16, 255, 51, 63, 9, 255, 59, 63, 3, 255, 56, 53, 10, 255, 47, 48, 11, 255, 41, 45, 10, 255, 42, 43, 14, 255, 48, 45, 10, 255, 50, 43, 2, 255, 56, 38, 1, 255, 51, 37, 6, 255, 46, 37, 9, 255, 45, 34, 6, 255, 49, 32, 9, 255, 48, 31, 12, 255, 48, 31, 10, 255, 51, 34, 10, 255, 54, 38, 10, 255, 50, 34, 6, 255, 50, 33, 8, 255, 48, 31, 14, 255, 54, 30, 12, 255, 60, 33, 11, 255, 58, 38, 9, 255, 72, 42, 4, 255, 67, 42, 9, 255, 64, 42, 12, 255, 72, 38, 3, 255, 75, 45, 4, 255, 76, 48, 0, 255, 86, 48, 7, 255, 89, 56, 10, 255, 91, 58, 6, 255, 93, 56, 10, 255, 90, 56, 9, 255, 86, 57, 6, 255, 89, 53, 2, 255, 112, 53, 0, 255, 106, 44, 5, 255, 86, 41, 5, 255, 76, 44, 2, 255, 78, 45, 14, 255, 74, 40, 13, 255, 79, 49, 2, 255, 82, 46, 9, 255, 79, 46, 4, 255, 78, 44, 7, 255, 77, 43, 8, 255, 76, 41, 10, 255, 67, 45, 5, 255, 74, 46, 8, 255, 82, 48, 12, 255, 85, 47, 13, 255, 92, 50, 9, 255, 92, 53, 4, 255, 89, 54, 7, 255, 91, 50, 11, 255, 92, 47, 8, 255, 96, 54, 6, 255, 102, 59, 11, 255, 106, 65, 12, 255, 108, 68, 2, 255, 112, 67, 18, 255, 117, 70, 14, 255, 131, 80, 12, 255, 144, 92, 12, 255, 144, 90, 5, 255, 156, 96, 2, 255, 178, 112, 11, 255, 209, 137, 8, 255, 217, 141, 8, 255, 195, 108, 9, 255, 192, 110, 6, 255, 165, 93, 2, 255, 147, 86, 7, 255, 136, 84, 6, 255, 129, 78, 6, 255, 125, 73, 8, 255, 117, 72, 10, 255, 114, 70, 3, 255, 112, 68, 8, 255, 108, 65, 14, 255, 104, 65, 4, 255, 103, 64, 10, 255, 105, 65, 15, 255, 101, 59, 10, 255, 98, 56, 11, 255, 100, 59, 12, 255, 103, 63, 14, 255, 99, 60, 14, 255, 99, 62, 18, 255, 99, 60, 16, 255, 102, 63, 15, 255, 99, 61, 13, 255, 94, 59, 24, 255, 92, 61, 11, 255, 96, 66, 13, 255, 102, 61, 20, 255, 101, 62, 20, 255, 98, 65, 12, 255, 100, 67, 15, 255, 103, 67, 16, 255, 106, 67, 20, 255, 107, 67, 13, 255, 106, 66, 17, 255, 106, 69, 13, 255, 104, 68, 15, 255, 102, 66, 17, 255, 103, 64, 24, 255, 104, 67, 21, 255, 104, 69, 16, 255, 103, 70, 6, 255, 98, 63, 30, 255, 99, 68, 20, 255, 95, 67, 17, 255, 95, 68, 23, 255, 96, 72, 12, 255, 102, 72, 21, 255, 103, 71, 20, 255, 106, 72, 15, 255, 103, 66, 26, 255, 105, 72, 14, 255, 103, 70, 13, 255, 101, 70, 18, 255, 104, 73, 19, 255, 104, 71, 16, 255, 112, 74, 32, 255, 107, 75, 8, 255, 107, 77, 18, 255, 109, 78, 29, 255, 123, 81, 25, 255, 133, 83, 22, 255, 135, 83, 20, 255, 128, 79, 23, 255, 125, 79, 23, 255, 122, 81, 24, 255, 124, 83, 27, 255, 130, 88, 22, 255, 130, 89, 22, 255, 125, 84, 23, 255, 124, 84, 31, 255, 120, 85, 24, 255, 123, 92, 24, 255, 132, 96, 21, 255, 135, 93, 32, 255, 132, 94, 43, 255, 131, 97, 25, 255, 135, 96, 33, 255, 136, 97, 37, 255, 136, 100, 41, 255, 138, 104, 26, 255, 140, 102, 41, 255, 142, 105, 29, 255, 141, 107, 39, 255, 143, 110, 38, 255, 146, 108, 41, 255, 146, 110, 37, 255, 151, 113, 42, 255, 151, 114, 43, 255, 146, 115, 34, 255, 138, 112, 37, 255, 158, 138, 72, 255, 151, 125, 50, 255, 148, 114, 26, 255, 157, 114, 47, 255, 162, 120, 34, 255, 162, 122, 32, 255, 168, 122, 29, 255, 168, 120, 27, 255, 157, 114, 24, 255, 148, 112, 28, 255, 143, 111, 28, 255, 142, 108, 21, 255, 143, 105, 25, 255, 144, 104, 22, 255, 133, 100, 18, 255, 127, 100, 10, 255, 135, 100, 35, 255, 140, 99, 24, 255, 142, 94, 14, 255, 146, 92, 18, 255, 150, 91, 25, 255, 147, 90, 26, 255, 143, 91, 21, 255, 146, 92, 10, 255, 146, 90, 10, 255, 137, 87, 13, 255, 131, 87, 16, 255, 134, 87, 14, 255, 146, 87, 18, 255, 145, 87, 14, 255, 132, 85, 8, 255, 134, 87, 13, 255, 134, 82, 17, 255, 136, 81, 13, 255, 135, 82, 14, 255, 141, 83, 18, 255, 136, 82, 15, 255, 130, 81, 15, 255, 134, 82, 10, 255, 137, 83, 11, 255, 137, 79, 14, 255, 141, 80, 13, 255, 144, 81, 10, 255, 147, 85, 9, 255, 151, 88, 14, 255, 155, 88, 10, 255, 159, 92, 12, 255, 162, 95, 4, 255, 163, 93, 4, 255, 181, 102, 7, 255, 189, 103, 9, 255, 183, 98, 2, 255, 180, 97, 1, 255, 170, 91, 3, 255, 161, 86, 6, 255, 153, 82, 5, 255, 146, 79, 6, 255, 145, 79, 9, 255, 143, 78, 9, 255, 146, 77, 6, 255, 144, 77, 3, 255, 145, 78, 5, 255, 143, 76, 6, 255, 142, 75, 6, 255, 140, 79, 5, 255, 135, 73, 5, 255, 137, 74, 7, 255, 144, 77, 9, 255, 153, 81, 11, 255, 156, 83, 3, 255, 163, 87, 5, 255, 172, 89, 11, 255, 169, 73, 12, 255, 167, 66, 8, 255, 146, 52, 7, 255, 109, 32, 7, 255, 99, 37, 8, 255, 113, 49, 8, 255, 131, 51, 7, 255, 131, 50, 5, 255, 135, 62, 4, 255, 146, 65, 3, 255, 133, 47, 5, 255, 119, 40, 11, 255, 116, 46, 11, 255, 122, 45, 4, 255, 130, 53, 1, 255, 138, 58, 3, 255, 134, 55, 4, 255, 138, 57, 3, 255, 135, 55, 2, 255, 113, 38, 8, 255, 115, 52, 12, 255, 122, 77, 9, 255, 114, 69, 8, 255, 115, 58, 11, 255, 96, 54, 12, 255, 108, 65, 9, 255, 121, 69, 15, 255, 131, 74, 26, 255, 121, 67, 2, 255, 105, 54, 6, 255, 106, 48, 12, 255, 108, 44, 17, 255, 105, 42, 13, 255, 103, 43, 4, 255, 104, 45, 7, 255, 108, 46, 10, 255, 110, 46, 7, 255, 110, 44, 10, 255, 102, 36, 7, 255, 98, 31, 3, 255, 15, 35, 147, 255, 25, 54, 175, 255, 37, 54, 170, 255, 26, 49, 165, 255, 12, 20, 159, 255, 2, 3, 123, 255, 3, 6, 106, 255, 3, 7, 116, 255, 1, 8, 105, 255, 3, 2, 93, 255, 1, 6, 92, 255, 2, 6, 51, 255, 1, 1, 17, 255, 2, 2, 9, 255, 1, 2, 7, 255, 1, 2, 8, 255, 2, 2, 11, 255, 1, 1, 9, 255, 0, 0, 4, 255, 0, 0, 3, 255, 0, 0, 5, 255, 1, 0, 5, 255, 1, 1, 3, 255, 1, 1, 0, 255, 1, 1, 2, 255, 1, 1, 2, 255, 0, 0, 1, 255, 0, 0, 2, 255, 0, 0, 2, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 2, 0, 255, 2, 1, 3, 255, 0, 0, 0, 255, 6, 70, 76, 255, 46, 179, 169, 255, 79, 225, 227, 255, 41, 249, 247, 255, 24, 123, 122, 255, 59, 123, 156, 255, 136, 250, 255, 255, 38, 131, 128, 255, 0, 37, 54, 255, 3, 37, 41, 255, 3, 0, 0, 255, 1, 0, 5, 255, 1, 26, 49, 255, 0, 70, 97, 255, 3, 87, 109, 255, 2, 73, 81, 255, 6, 41, 42, 255, 1, 4, 4, 255, 6, 13, 53, 255, 2, 113, 154, 255, 3, 71, 82, 255, 1, 0, 0, 255, 4, 0, 14, 255, 3, 8, 25, 255, 3, 5, 29, 255, 1, 2, 15, 255, 1, 1, 2, 255, 1, 1, 0, 255, 0, 0, 2, 255, 1, 0, 3, 255, 0, 2, 1, 255, 0, 1, 0, 255, 0, 1, 8, 255, 7, 13, 50, 255, 17, 29, 94, 255, 15, 30, 78, 255, 14, 22, 22, 255, 3, 5, 0, 255, 11, 5, 22, 255, 24, 26, 75, 255, 31, 50, 123, 255, 18, 49, 131, 255, 8, 36, 105, 255, 11, 17, 61, 255, 5, 7, 22, 255, 2, 1, 0, 255, 0, 0, 1, 255, 0, 2, 2, 255, 2, 1, 5, 255, 1, 0, 3, 255, 2, 0, 3, 255, 3, 0, 1, 255, 2, 2, 3, 255, 1, 1, 1, 255, 0, 2, 1, 255, 5, 3, 0, 255, 7, 2, 1, 255, 10, 5, 3, 255, 13, 8, 5, 255, 16, 8, 5, 255, 15, 6, 4, 255, 10, 5, 2, 255, 8, 5, 1, 255, 10, 6, 2, 255, 10, 5, 2, 255, 9, 4, 2, 255, 11, 7, 3, 255, 9, 6, 0, 255, 11, 11, 5, 255, 14, 6, 8, 255, 40, 35, 22, 255, 56, 41, 19, 255, 147, 102, 25, 255, 226, 165, 41, 255, 114, 61, 5, 255, 36, 23, 7, 255, 22, 19, 4, 255, 28, 19, 4, 255, 41, 23, 2, 255, 33, 25, 3, 255, 45, 51, 18, 255, 75, 91, 40, 255, 74, 91, 30, 255, 70, 86, 13, 255, 68, 80, 8, 255, 68, 75, 15, 255, 60, 68, 8, 255, 56, 65, 7, 255, 57, 61, 5, 255, 54, 54, 5, 255, 56, 50, 9, 255, 47, 44, 6, 255, 51, 44, 13, 255, 44, 37, 17, 255, 48, 41, 8, 255, 50, 42, 8, 255, 49, 34, 12, 255, 47, 30, 8, 255, 48, 36, 10, 255, 48, 35, 9, 255, 55, 41, 3, 255, 57, 43, 6, 255, 54, 39, 7, 255, 54, 42, 2, 255, 58, 39, 7, 255, 62, 33, 7, 255, 57, 40, 5, 255, 61, 38, 8, 255, 64, 38, 8, 255, 72, 44, 2, 255, 67, 45, 6, 255, 69, 43, 7, 255, 65, 41, 8, 255, 66, 39, 6, 255, 77, 45, 11, 255, 80, 52, 4, 255, 86, 55, 5, 255, 88, 58, 7, 255, 96, 57, 6, 255, 94, 57, 13, 255, 90, 57, 6, 255, 85, 54, 4, 255, 85, 48, 7, 255, 112, 53, 7, 255, 110, 44, 8, 255, 93, 44, 10, 255, 80, 45, 4, 255, 74, 40, 10, 255, 72, 45, 7, 255, 76, 51, 4, 255, 75, 41, 19, 255, 73, 44, 12, 255, 77, 46, 3, 255, 79, 45, 9, 255, 82, 45, 10, 255, 72, 43, 10, 255, 75, 42, 1, 255, 83, 45, 9, 255, 87, 48, 9, 255, 93, 50, 8, 255, 94, 52, 6, 255, 91, 52, 10, 255, 93, 49, 14, 255, 92, 44, 8, 255, 98, 54, 6, 255, 104, 61, 9, 255, 109, 64, 12, 255, 108, 65, 2, 255, 114, 68, 10, 255, 120, 71, 10, 255, 131, 77, 13, 255, 144, 85, 17, 255, 156, 91, 14, 255, 172, 103, 4, 255, 191, 121, 4, 255, 204, 135, 9, 255, 189, 119, 3, 255, 161, 95, 2, 255, 164, 102, 10, 255, 152, 91, 7, 255, 148, 86, 9, 255, 137, 77, 13, 255, 122, 68, 12, 255, 116, 68, 9, 255, 114, 71, 4, 255, 112, 65, 8, 255, 110, 63, 12, 255, 111, 66, 6, 255, 106, 66, 11, 255, 100, 61, 16, 255, 95, 60, 13, 255, 94, 59, 10, 255, 97, 60, 4, 255, 96, 59, 5, 255, 100, 61, 13, 255, 101, 61, 11, 255, 99, 58, 6, 255, 107, 65, 14, 255, 102, 59, 21, 255, 95, 57, 9, 255, 92, 57, 11, 255, 98, 65, 9, 255, 101, 65, 6, 255, 98, 61, 19, 255, 97, 63, 19, 255, 99, 66, 14, 255, 99, 65, 15, 255, 104, 65, 17, 255, 109, 66, 21, 255, 110, 72, 17, 255, 104, 68, 16, 255, 98, 64, 11, 255, 99, 65, 24, 255, 100, 68, 16, 255, 99, 69, 11, 255, 107, 70, 25, 255, 108, 69, 18, 255, 104, 67, 19, 255, 102, 69, 15, 255, 100, 69, 14, 255, 99, 70, 9, 255, 97, 70, 16, 255, 97, 69, 20, 255, 96, 74, 11, 255, 101, 71, 7, 255, 106, 70, 22, 255, 105, 69, 21, 255, 109, 70, 23, 255, 101, 71, 15, 255, 101, 71, 23, 255, 106, 75, 29, 255, 104, 73, 14, 255, 108, 73, 17, 255, 105, 71, 20, 255, 109, 76, 28, 255, 111, 79, 23, 255, 118, 82, 23, 255, 131, 81, 23, 255, 134, 83, 15, 255, 129, 81, 15, 255, 129, 83, 21, 255, 127, 84, 20, 255, 127, 84, 12, 255, 133, 88, 17, 255, 131, 88, 20, 255, 127, 88, 20, 255, 123, 86, 20, 255, 121, 89, 16, 255, 123, 91, 29, 255, 133, 93, 33, 255, 133, 93, 23, 255, 133, 93, 40, 255, 136, 99, 34, 255, 135, 95, 31, 255, 137, 95, 39, 255, 140, 101, 35, 255, 140, 102, 29, 255, 138, 99, 39, 255, 141, 107, 34, 255, 145, 108, 33, 255, 147, 108, 44, 255, 145, 109, 35, 255, 144, 108, 38, 255, 148, 112, 39, 255, 148, 109, 48, 255, 147, 111, 40, 255, 140, 111, 26, 255, 147, 125, 42, 255, 159, 134, 60, 255, 147, 113, 33, 255, 159, 115, 36, 255, 162, 119, 25, 255, 164, 122, 21, 255, 172, 124, 26, 255, 172, 124, 24, 255, 160, 117, 19, 255, 150, 114, 26, 255, 145, 113, 26, 255, 144, 108, 29, 255, 146, 106, 27, 255, 148, 105, 27, 255, 136, 98, 26, 255, 132, 99, 18, 255, 134, 100, 22, 255, 136, 97, 16, 255, 142, 95, 26, 255, 146, 93, 27, 255, 151, 95, 13, 255, 151, 94, 23, 255, 148, 94, 15, 255, 151, 91, 19, 255, 151, 91, 20, 255, 141, 89, 13, 255, 131, 85, 15, 255, 133, 89, 9, 255, 146, 92, 9, 255, 144, 88, 12, 255, 133, 84, 12, 255, 132, 84, 13, 255, 133, 84, 9, 255, 138, 84, 16, 255, 133, 80, 12, 255, 144, 86, 18, 255, 137, 82, 12, 255, 129, 80, 6, 255, 134, 84, 15, 255, 135, 83, 12, 255, 137, 82, 6, 255, 142, 82, 9, 255, 143, 82, 11, 255, 147, 85, 15, 255, 153, 90, 12, 255, 157, 90, 6, 255, 157, 91, 15, 255, 160, 94, 11, 255, 163, 92, 10, 255, 174, 98, 8, 255, 177, 99, 0, 255, 182, 100, 1, 255, 183, 102, 3, 255, 176, 95, 4, 255, 166, 88, 7, 255, 157, 83, 7, 255, 149, 82, 6, 255, 148, 82, 5, 255, 150, 80, 3, 255, 148, 79, 2, 255, 148, 81, 1, 255, 148, 81, 3, 255, 144, 78, 2, 255, 143, 75, 3, 255, 145, 73, 6, 255, 145, 75, 6, 255, 141, 74, 5, 255, 143, 74, 6, 255, 152, 78, 10, 255, 155, 72, 6, 255, 150, 63, 4, 255, 137, 49, 3, 255, 135, 47, 7, 255, 123, 41, 10, 255, 100, 35, 8, 255, 101, 40, 5, 255, 112, 43, 0, 255, 114, 41, 10, 255, 114, 44, 9, 255, 128, 54, 4, 255, 143, 55, 3, 255, 125, 46, 3, 255, 112, 41, 11, 255, 111, 45, 6, 255, 112, 44, 1, 255, 129, 57, 1, 255, 141, 51, 6, 255, 130, 53, 6, 255, 136, 57, 2, 255, 138, 54, 9, 255, 118, 47, 9, 255, 119, 52, 16, 255, 122, 72, 14, 255, 120, 71, 10, 255, 120, 65, 24, 255, 118, 68, 15, 255, 133, 79, 16, 255, 148, 87, 20, 255, 152, 89, 20, 255, 141, 80, 15, 255, 133, 76, 5, 255, 112, 51, 11, 255, 98, 35, 8, 255, 101, 37, 14, 255, 112, 43, 16, 255, 110, 42, 5, 255, 108, 43, 7, 255, 109, 45, 9, 255, 110, 46, 7, 255, 110, 44, 7, 255, 103, 38, 5, 255, 99, 35, 3, 255, 0, 1, 53, 255, 0, 11, 84, 255, 0, 9, 84, 255, 0, 6, 76, 255, 1, 4, 62, 255, 2, 6, 60, 255, 3, 5, 64, 255, 3, 6, 45, 255, 1, 1, 30, 255, 3, 4, 31, 255, 1, 5, 30, 255, 1, 2, 17, 255, 5, 4, 14, 255, 2, 2, 10, 255, 1, 1, 8, 255, 2, 2, 11, 255, 2, 2, 13, 255, 1, 1, 12, 255, 1, 2, 10, 255, 1, 1, 8, 255, 1, 1, 8, 255, 1, 1, 7, 255, 0, 0, 4, 255, 0, 0, 1, 255, 1, 1, 3, 255, 1, 0, 2, 255, 0, 0, 0, 255, 0, 0, 1, 255, 1, 1, 3, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 0, 1, 2, 255, 5, 0, 0, 255, 1, 0, 0, 255, 16, 114, 131, 255, 28, 222, 214, 255, 1, 126, 101, 255, 24, 70, 95, 255, 44, 86, 120, 255, 78, 159, 193, 255, 128, 243, 243, 255, 34, 97, 87, 255, 0, 41, 40, 255, 4, 45, 57, 255, 3, 45, 75, 255, 4, 90, 118, 255, 2, 87, 96, 255, 1, 53, 54, 255, 2, 16, 5, 255, 2, 0, 14, 255, 6, 65, 133, 255, 2, 190, 236, 255, 11, 255, 255, 255, 18, 220, 223, 255, 3, 45, 50, 255, 3, 0, 0, 255, 1, 3, 6, 255, 1, 2, 12, 255, 0, 0, 7, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 5, 255, 0, 0, 2, 255, 0, 0, 4, 255, 4, 10, 30, 255, 10, 25, 69, 255, 11, 29, 70, 255, 9, 19, 31, 255, 2, 4, 0, 255, 1, 0, 8, 255, 17, 16, 50, 255, 31, 44, 97, 255, 21, 39, 112, 255, 6, 24, 97, 255, 2, 16, 59, 255, 3, 7, 16, 255, 6, 0, 0, 255, 0, 1, 2, 255, 5, 2, 8, 255, 1, 1, 6, 255, 0, 3, 5, 255, 2, 2, 3, 255, 1, 2, 0, 255, 1, 2, 3, 255, 0, 1, 1, 255, 3, 2, 3, 255, 6, 3, 1, 255, 9, 4, 0, 255, 12, 7, 2, 255, 10, 5, 1, 255, 11, 6, 2, 255, 9, 4, 0, 255, 9, 3, 0, 255, 7, 1, 0, 255, 8, 1, 1, 255, 9, 5, 2, 255, 12, 8, 4, 255, 13, 8, 4, 255, 11, 6, 2, 255, 12, 7, 3, 255, 13, 8, 2, 255, 4, 6, 3, 255, 15, 17, 14, 255, 37, 32, 12, 255, 60, 40, 21, 255, 182, 125, 30, 255, 171, 108, 14, 255, 57, 34, 7, 255, 32, 23, 3, 255, 21, 14, 3, 255, 19, 17, 2, 255, 42, 27, 6, 255, 36, 25, 7, 255, 59, 70, 18, 255, 81, 100, 42, 255, 71, 90, 24, 255, 73, 90, 16, 255, 66, 76, 11, 255, 66, 73, 19, 255, 58, 67, 13, 255, 61, 64, 10, 255, 55, 57, 12, 255, 50, 54, 6, 255, 62, 49, 9, 255, 53, 42, 8, 255, 61, 45, 4, 255, 51, 40, 10, 255, 50, 39, 8, 255, 45, 38, 7, 255, 49, 37, 7, 255, 52, 35, 9, 255, 51, 38, 13, 255, 49, 41, 12, 255, 56, 41, 11, 255, 53, 37, 10, 255, 53, 43, 10, 255, 47, 39, 1, 255, 61, 46, 2, 255, 74, 45, 6, 255, 62, 43, 7, 255, 67, 44, 6, 255, 67, 43, 8, 255, 68, 44, 7, 255, 74, 44, 1, 255, 70, 46, 2, 255, 69, 41, 6, 255, 70, 44, 11, 255, 67, 41, 11, 255, 77, 47, 5, 255, 91, 53, 3, 255, 98, 55, 7, 255, 99, 56, 10, 255, 92, 57, 3, 255, 87, 55, 0, 255, 87, 55, 11, 255, 89, 52, 16, 255, 113, 55, 6, 255, 107, 43, 4, 255, 97, 42, 10, 255, 87, 50, 5, 255, 72, 43, 6, 255, 73, 46, 4, 255, 78, 45, 3, 255, 79, 39, 11, 255, 79, 48, 10, 255, 76, 44, 0, 255, 78, 43, 7, 255, 79, 44, 9, 255, 81, 45, 7, 255, 81, 45, 9, 255, 83, 47, 7, 255, 84, 46, 9, 255, 93, 48, 12, 255, 96, 53, 6, 255, 92, 52, 6, 255, 96, 51, 12, 255, 96, 49, 12, 255, 96, 51, 12, 255, 100, 57, 5, 255, 109, 65, 5, 255, 111, 65, 6, 255, 117, 70, 4, 255, 122, 73, 3, 255, 133, 82, 6, 255, 154, 94, 7, 255, 157, 95, 10, 255, 164, 103, 3, 255, 169, 106, 6, 255, 168, 102, 10, 255, 158, 89, 2, 255, 160, 97, 10, 255, 144, 85, 13, 255, 134, 79, 8, 255, 125, 73, 1, 255, 122, 70, 13, 255, 116, 67, 13, 255, 111, 66, 9, 255, 110, 64, 4, 255, 116, 66, 7, 255, 113, 62, 9, 255, 112, 63, 9, 255, 107, 64, 10, 255, 102, 63, 13, 255, 95, 61, 9, 255, 98, 63, 15, 255, 95, 60, 8, 255, 96, 62, 8, 255, 94, 60, 7, 255, 97, 60, 12, 255, 100, 58, 19, 255, 96, 56, 12, 255, 96, 57, 10, 255, 95, 62, 13, 255, 92, 63, 6, 255, 97, 62, 5, 255, 104, 59, 10, 255, 96, 62, 17, 255, 97, 61, 17, 255, 101, 67, 10, 255, 103, 67, 17, 255, 104, 64, 17, 255, 110, 67, 13, 255, 106, 66, 29, 255, 106, 67, 21, 255, 96, 64, 12, 255, 95, 60, 20, 255, 101, 65, 16, 255, 100, 72, 3, 255, 107, 72, 15, 255, 109, 70, 19, 255, 103, 67, 18, 255, 99, 66, 12, 255, 102, 70, 16, 255, 99, 68, 19, 255, 100, 70, 13, 255, 106, 70, 20, 255, 103, 69, 17, 255, 104, 67, 20, 255, 106, 70, 18, 255, 109, 73, 17, 255, 109, 74, 20, 255, 104, 76, 15, 255, 101, 71, 16, 255, 104, 73, 27, 255, 106, 74, 20, 255, 109, 75, 21, 255, 110, 75, 21, 255, 108, 74, 26, 255, 113, 78, 17, 255, 114, 82, 16, 255, 132, 83, 25, 255, 134, 85, 18, 255, 129, 83, 18, 255, 129, 81, 18, 255, 129, 85, 12, 255, 130, 84, 15, 255, 132, 83, 23, 255, 132, 85, 20, 255, 130, 86, 32, 255, 126, 86, 27, 255, 127, 89, 22, 255, 130, 93, 22, 255, 132, 93, 28, 255, 135, 92, 29, 255, 138, 94, 30, 255, 139, 97, 34, 255, 135, 97, 29, 255, 138, 101, 25, 255, 138, 99, 32, 255, 141, 102, 30, 255, 143, 105, 33, 255, 145, 105, 36, 255, 145, 108, 28, 255, 149, 111, 31, 255, 147, 106, 42, 255, 147, 109, 35, 255, 148, 113, 28, 255, 149, 111, 35, 255, 150, 113, 27, 255, 149, 114, 22, 255, 141, 115, 32, 255, 154, 130, 50, 255, 153, 117, 55, 255, 163, 120, 28, 255, 159, 116, 24, 255, 167, 122, 27, 255, 174, 124, 26, 255, 171, 122, 17, 255, 161, 116, 19, 255, 152, 113, 30, 255, 143, 111, 23, 255, 145, 107, 34, 255, 148, 104, 25, 255, 145, 98, 24, 255, 144, 101, 23, 255, 139, 101, 26, 255, 134, 100, 23, 255, 138, 98, 23, 255, 141, 95, 16, 255, 143, 96, 22, 255, 148, 95, 21, 255, 153, 98, 9, 255, 152, 94, 17, 255, 153, 91, 19, 255, 154, 92, 15, 255, 144, 90, 19, 255, 135, 86, 24, 255, 135, 87, 16, 255, 139, 89, 14, 255, 141, 86, 9, 255, 138, 84, 9, 255, 135, 86, 10, 255, 133, 84, 11, 255, 133, 81, 7, 255, 136, 85, 9, 255, 144, 87, 9, 255, 137, 83, 2, 255, 136, 84, 10, 255, 137, 85, 7, 255, 135, 83, 9, 255, 139, 80, 15, 255, 141, 82, 14, 255, 144, 86, 8, 255, 148, 85, 6, 255, 155, 87, 13, 255, 157, 86, 11, 255, 159, 92, 16, 255, 163, 96, 9, 255, 167, 97, 5, 255, 172, 96, 8, 255, 171, 97, 4, 255, 179, 102, 4, 255, 184, 104, 4, 255, 183, 101, 3, 255, 172, 92, 2, 255, 162, 85, 4, 255, 153, 81, 3, 255, 149, 82, 3, 255, 151, 79, 3, 255, 146, 76, 0, 255, 147, 81, 3, 255, 147, 78, 3, 255, 146, 77, 2, 255, 152, 76, 5, 255, 140, 77, 2, 255, 139, 71, 0, 255, 148, 70, 3, 255, 149, 64, 5, 255, 141, 53, 6, 255, 136, 48, 8, 255, 125, 44, 6, 255, 121, 43, 8, 255, 115, 46, 5, 255, 100, 40, 7, 255, 102, 42, 7, 255, 106, 41, 6, 255, 100, 40, 1, 255, 103, 45, 3, 255, 125, 52, 2, 255, 132, 55, 2, 255, 121, 46, 9, 255, 106, 41, 5, 255, 107, 40, 0, 255, 114, 37, 3, 255, 114, 44, 4, 255, 127, 58, 4, 255, 122, 51, 2, 255, 142, 57, 5, 255, 144, 63, 2, 255, 123, 57, 8, 255, 123, 69, 12, 255, 132, 75, 21, 255, 125, 68, 6, 255, 112, 61, 1, 255, 119, 69, 19, 255, 140, 87, 8, 255, 160, 94, 8, 255, 155, 90, 16, 255, 142, 78, 11, 255, 138, 76, 7, 255, 144, 81, 11, 255, 122, 53, 8, 255, 104, 32, 6, 255, 101, 33, 8, 255, 106, 41, 10, 255, 107, 46, 10, 255, 104, 43, 5, 255, 107, 40, 5, 255, 112, 41, 8, 255, 105, 41, 6, 255, 101, 36, 5, 255, 101, 37, 6, 255, 1, 2, 14, 255, 1, 2, 4, 255, 3, 2, 10, 255, 4, 0, 8, 255, 1, 4, 12, 255, 2, 3, 15, 255, 2, 2, 9, 255, 1, 3, 8, 255, 2, 4, 7, 255, 2, 2, 14, 255, 2, 4, 16, 255, 6, 1, 14, 255, 2, 2, 11, 255, 2, 2, 10, 255, 1, 1, 9, 255, 2, 2, 12, 255, 2, 1, 15, 255, 0, 1, 14, 255, 1, 3, 16, 255, 3, 3, 14, 255, 2, 2, 13, 255, 2, 2, 10, 255, 0, 1, 7, 255, 0, 1, 4, 255, 1, 1, 6, 255, 1, 1, 4, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 3, 255, 1, 1, 3, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 2, 0, 3, 255, 1, 2, 3, 255, 2, 1, 2, 255, 2, 0, 0, 255, 5, 18, 23, 255, 3, 47, 38, 255, 0, 12, 18, 255, 2, 47, 97, 255, 18, 109, 156, 255, 15, 109, 134, 255, 61, 194, 218, 255, 111, 236, 236, 255, 13, 98, 102, 255, 0, 83, 110, 255, 4, 95, 116, 255, 1, 63, 53, 255, 6, 28, 12, 255, 3, 0, 5, 255, 5, 21, 75, 255, 0, 159, 207, 255, 5, 248, 255, 255, 13, 255, 255, 255, 48, 245, 249, 255, 92, 255, 255, 255, 23, 118, 107, 255, 0, 0, 0, 255, 2, 1, 4, 255, 1, 2, 1, 255, 0, 1, 2, 255, 2, 1, 2, 255, 1, 0, 0, 255, 0, 0, 0, 255, 0, 5, 20, 255, 7, 19, 64, 255, 12, 31, 68, 255, 9, 23, 36, 255, 3, 7, 7, 255, 2, 1, 0, 255, 10, 9, 30, 255, 25, 39, 79, 255, 15, 37, 115, 255, 3, 30, 107, 255, 9, 12, 45, 255, 5, 1, 5, 255, 1, 1, 3, 255, 0, 0, 0, 255, 2, 1, 3, 255, 1, 0, 1, 255, 2, 1, 1, 255, 3, 2, 1, 255, 2, 2, 1, 255, 4, 0, 0, 255, 1, 0, 2, 255, 3, 1, 5, 255, 4, 1, 3, 255, 9, 3, 1, 255, 11, 5, 2, 255, 12, 7, 3, 255, 14, 6, 3, 255, 12, 5, 1, 255, 11, 5, 1, 255, 9, 4, 0, 255, 8, 4, 2, 255, 11, 6, 6, 255, 13, 4, 4, 255, 15, 6, 3, 255, 15, 8, 2, 255, 11, 4, 0, 255, 12, 7, 3, 255, 13, 9, 6, 255, 11, 7, 6, 255, 4, 9, 8, 255, 13, 12, 6, 255, 24, 5, 5, 255, 88, 55, 25, 255, 189, 121, 12, 255, 98, 53, 10, 255, 34, 20, 6, 255, 28, 23, 9, 255, 24, 15, 6, 255, 23, 14, 10, 255, 35, 22, 10, 255, 64, 42, 8, 255, 80, 89, 36, 255, 82, 104, 29, 255, 66, 87, 15, 255, 69, 88, 7, 255, 65, 78, 11, 255, 62, 74, 15, 255, 56, 70, 12, 255, 61, 62, 10, 255, 59, 58, 8, 255, 52, 52, 12, 255, 48, 44, 4, 255, 50, 46, 16, 255, 56, 46, 4, 255, 57, 47, 1, 255, 54, 43, 9, 255, 50, 41, 9, 255, 54, 41, 5, 255, 56, 39, 5, 255, 55, 38, 12, 255, 49, 36, 9, 255, 53, 38, 6, 255, 61, 39, 10, 255, 65, 42, 9, 255, 73, 52, 12, 255, 76, 54, 8, 255, 77, 51, 3, 255, 73, 48, 2, 255, 68, 47, 7, 255, 63, 48, 6, 255, 75, 42, 7, 255, 76, 44, 8, 255, 69, 43, 11, 255, 71, 41, 6, 255, 67, 44, 4, 255, 71, 46, 5, 255, 75, 45, 16, 255, 78, 51, 9, 255, 88, 55, 2, 255, 92, 57, 4, 255, 94, 57, 10, 255, 89, 53, 6, 255, 85, 51, 10, 255, 89, 53, 10, 255, 115, 57, 2, 255, 112, 47, 3, 255, 88, 33, 10, 255, 91, 45, 11, 255, 84, 42, 12, 255, 75, 42, 9, 255, 76, 46, 7, 255, 85, 43, 5, 255, 83, 42, 8, 255, 78, 43, 7, 255, 78, 43, 3, 255, 80, 47, 12, 255, 88, 48, 1, 255, 79, 42, 9, 255, 74, 43, 12, 255, 82, 49, 7, 255, 89, 46, 13, 255, 94, 51, 12, 255, 96, 55, 14, 255, 95, 53, 10, 255, 93, 49, 5, 255, 94, 51, 13, 255, 98, 56, 10, 255, 106, 62, 9, 255, 111, 65, 4, 255, 115, 69, 8, 255, 121, 74, 10, 255, 137, 90, 3, 255, 160, 100, 2, 255, 157, 93, 5, 255, 158, 93, 9, 255, 157, 93, 2, 255, 148, 90, 8, 255, 137, 84, 9, 255, 135, 80, 10, 255, 131, 77, 7, 255, 122, 71, 11, 255, 120, 70, 12, 255, 121, 70, 13, 255, 115, 66, 8, 255, 112, 67, 1, 255, 112, 65, 7, 255, 115, 64, 14, 255, 114, 62, 10, 255, 114, 65, 2, 255, 106, 61, 6, 255, 99, 60, 4, 255, 100, 64, 3, 255, 100, 61, 8, 255, 99, 62, 9, 255, 95, 61, 14, 255, 95, 63, 15, 255, 100, 64, 8, 255, 99, 64, 15, 255, 93, 62, 17, 255, 97, 62, 14, 255, 95, 60, 15, 255, 94, 62, 10, 255, 99, 63, 19, 255, 101, 61, 12, 255, 99, 61, 19, 255, 99, 60, 23, 255, 104, 67, 13, 255, 103, 62, 21, 255, 108, 66, 21, 255, 107, 66, 17, 255, 104, 66, 21, 255, 108, 67, 12, 255, 102, 65, 18, 255, 101, 66, 10, 255, 104, 65, 14, 255, 102, 67, 17, 255, 108, 68, 17, 255, 105, 71, 8, 255, 103, 70, 16, 255, 103, 68, 26, 255, 100, 69, 18, 255, 100, 66, 23, 255, 104, 71, 18, 255, 105, 70, 14, 255, 106, 68, 17, 255, 104, 72, 17, 255, 107, 71, 16, 255, 110, 70, 20, 255, 105, 72, 16, 255, 108, 74, 19, 255, 106, 75, 17, 255, 104, 72, 28, 255, 106, 72, 28, 255, 112, 78, 22, 255, 111, 77, 9, 255, 113, 77, 20, 255, 115, 77, 23, 255, 112, 82, 15, 255, 130, 86, 13, 255, 134, 85, 20, 255, 131, 84, 23, 255, 131, 83, 18, 255, 128, 82, 25, 255, 130, 83, 23, 255, 129, 81, 17, 255, 135, 86, 33, 255, 135, 88, 24, 255, 130, 88, 17, 255, 130, 89, 22, 255, 131, 91, 24, 255, 131, 94, 18, 255, 138, 97, 21, 255, 142, 95, 30, 255, 141, 95, 32, 255, 136, 101, 21, 255, 139, 99, 29, 255, 139, 99, 29, 255, 138, 101, 31, 255, 138, 103, 28, 255, 142, 103, 35, 255, 147, 103, 35, 255, 150, 106, 27, 255, 148, 107, 25, 255, 149, 109, 35, 255, 148, 108, 36, 255, 151, 111, 26, 255, 151, 109, 37, 255, 153, 111, 29, 255, 142, 111, 35, 255, 148, 125, 39, 255, 157, 126, 37, 255, 160, 116, 33, 255, 164, 118, 29, 255, 167, 119, 23, 255, 173, 120, 29, 255, 171, 121, 25, 255, 164, 118, 25, 255, 153, 112, 36, 255, 144, 109, 27, 255, 147, 105, 34, 255, 149, 102, 28, 255, 149, 101, 29, 255, 146, 101, 19, 255, 144, 103, 18, 255, 135, 99, 14, 255, 137, 99, 20, 255, 141, 97, 15, 255, 146, 98, 16, 255, 148, 94, 13, 255, 150, 92, 11, 255, 152, 92, 20, 255, 154, 92, 25, 255, 149, 93, 18, 255, 140, 91, 13, 255, 137, 89, 12, 255, 136, 87, 19, 255, 136, 88, 18, 255, 140, 85, 8, 255, 143, 85, 6, 255, 135, 86, 8, 255, 131, 83, 9, 255, 137, 85, 15, 255, 136, 85, 12, 255, 142, 83, 9, 255, 140, 82, 6, 255, 138, 85, 9, 255, 140, 86, 10, 255, 140, 85, 10, 255, 142, 83, 12, 255, 141, 82, 7, 255, 148, 88, 9, 255, 154, 87, 10, 255, 159, 86, 14, 255, 160, 86, 9, 255, 163, 94, 12, 255, 164, 94, 15, 255, 169, 95, 5, 255, 174, 98, 6, 255, 175, 103, 5, 255, 179, 103, 3, 255, 185, 105, 4, 255, 188, 105, 6, 255, 180, 96, 4, 255, 170, 89, 6, 255, 161, 86, 4, 255, 151, 83, 3, 255, 149, 79, 6, 255, 149, 80, 5, 255, 151, 84, 7, 255, 152, 78, 3, 255, 154, 79, 4, 255, 162, 76, 2, 255, 168, 70, 9, 255, 155, 61, 7, 255, 138, 52, 5, 255, 127, 48, 3, 255, 128, 52, 3, 255, 129, 52, 1, 255, 126, 47, 6, 255, 115, 43, 8, 255, 103, 40, 2, 255, 98, 35, 7, 255, 99, 37, 10, 255, 97, 35, 8, 255, 102, 39, 4, 255, 117, 50, 2, 255, 123, 52, 6, 255, 119, 47, 3, 255, 104, 43, 7, 255, 107, 41, 4, 255, 112, 38, 4, 255, 112, 38, 8, 255, 118, 42, 4, 255, 120, 46, 6, 255, 142, 65, 5, 255, 150, 69, 9, 255, 128, 58, 3, 255, 127, 69, 5, 255, 127, 71, 10, 255, 119, 71, 10, 255, 115, 68, 12, 255, 130, 75, 21, 255, 151, 93, 17, 255, 157, 100, 22, 255, 158, 95, 15, 255, 135, 78, 4, 255, 131, 72, 13, 255, 145, 78, 17, 255, 155, 87, 17, 255, 126, 63, 12, 255, 102, 36, 10, 255, 102, 37, 4, 255, 100, 36, 1, 255, 103, 40, 5, 255, 102, 40, 4, 255, 106, 40, 7, 255, 106, 35, 9, 255, 101, 36, 7, 255, 101, 36, 8, 255, 101, 36, 8, 255, 3, 3, 13, 255, 1, 0, 12, 255, 2, 1, 14, 255, 3, 4, 15, 255, 1, 3, 14, 255, 0, 2, 14, 255, 0, 2, 14, 255, 2, 3, 16, 255, 2, 4, 17, 255, 0, 1, 18, 255, 1, 2, 18, 255, 3, 2, 13, 255, 1, 1, 5, 255, 1, 2, 7, 255, 1, 2, 8, 255, 1, 2, 8, 255, 2, 3, 8, 255, 2, 3, 9, 255, 1, 1, 12, 255, 3, 4, 15, 255, 1, 1, 11, 255, 1, 0, 9, 255, 2, 1, 7, 255, 0, 0, 5, 255, 0, 0, 6, 255, 2, 1, 4, 255, 0, 0, 1, 255, 0, 0, 2, 255, 0, 0, 2, 255, 1, 1, 3, 255, 0, 0, 2, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 2, 2, 2, 255, 1, 1, 0, 255, 0, 0, 3, 255, 8, 15, 29, 255, 3, 39, 71, 255, 6, 66, 105, 255, 18, 108, 141, 255, 0, 117, 155, 255, 64, 188, 227, 255, 111, 225, 244, 255, 26, 110, 124, 255, 2, 82, 94, 255, 2, 39, 25, 255, 6, 8, 40, 255, 4, 101, 173, 255, 1, 234, 255, 255, 17, 255, 255, 255, 36, 247, 250, 255, 61, 239, 250, 255, 179, 255, 255, 255, 186, 229, 197, 255, 19, 52, 30, 255, 0, 0, 0, 255, 1, 3, 2, 255, 0, 0, 0, 255, 4, 0, 0, 255, 4, 0, 1, 255, 2, 4, 17, 255, 3, 19, 51, 255, 8, 21, 72, 255, 8, 20, 42, 255, 2, 7, 9, 255, 4, 0, 5, 255, 8, 6, 30, 255, 20, 23, 90, 255, 10, 26, 89, 255, 6, 22, 97, 255, 9, 22, 82, 255, 1, 9, 35, 255, 1, 1, 0, 255, 5, 1, 0, 255, 2, 0, 1, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 1, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 2, 1, 0, 255, 3, 3, 1, 255, 6, 2, 0, 255, 10, 4, 1, 255, 11, 4, 1, 255, 7, 3, 0, 255, 8, 4, 1, 255, 9, 3, 0, 255, 8, 3, 1, 255, 8, 4, 1, 255, 7, 3, 0, 255, 7, 3, 0, 255, 8, 4, 1, 255, 9, 3, 2, 255, 13, 6, 1, 255, 14, 7, 2, 255, 13, 7, 3, 255, 13, 10, 10, 255, 7, 7, 2, 255, 8, 5, 6, 255, 17, 16, 17, 255, 30, 25, 22, 255, 148, 130, 70, 255, 155, 103, 22, 255, 74, 36, 10, 255, 37, 19, 0, 255, 24, 15, 6, 255, 28, 19, 3, 255, 25, 18, 7, 255, 22, 18, 10, 255, 40, 25, 1, 255, 77, 65, 16, 255, 84, 104, 38, 255, 77, 99, 28, 255, 72, 89, 27, 255, 68, 79, 16, 255, 69, 74, 15, 255, 64, 69, 16, 255, 59, 65, 22, 255, 61, 63, 14, 255, 60, 61, 3, 255, 58, 58, 6, 255, 52, 49, 6, 255, 53, 46, 7, 255, 56, 48, 6, 255, 58, 45, 6, 255, 58, 43, 10, 255, 54, 37, 14, 255, 53, 36, 7, 255, 54, 42, 0, 255, 51, 37, 8, 255, 55, 42, 8, 255, 54, 44, 5, 255, 71, 53, 8, 255, 92, 61, 12, 255, 93, 57, 7, 255, 85, 52, 6, 255, 76, 50, 7, 255, 81, 51, 5, 255, 80, 48, 9, 255, 72, 45, 8, 255, 69, 44, 9, 255, 67, 42, 12, 255, 72, 44, 9, 255, 69, 40, 3, 255, 65, 38, 10, 255, 67, 44, 5, 255, 72, 46, 7, 255, 85, 54, 10, 255, 90, 54, 7, 255, 94, 54, 5, 255, 96, 54, 10, 255, 90, 55, 6, 255, 87, 56, 5, 255, 87, 53, 6, 255, 118, 52, 10, 255, 123, 48, 6, 255, 79, 35, 7, 255, 85, 39, 5, 255, 79, 42, 11, 255, 73, 44, 15, 255, 82, 47, 5, 255, 85, 45, 5, 255, 85, 38, 6, 255, 80, 43, 9, 255, 80, 46, 3, 255, 75, 45, 9, 255, 82, 44, 9, 255, 84, 47, 3, 255, 85, 45, 10, 255, 85, 49, 9, 255, 85, 51, 5, 255, 94, 51, 6, 255, 99, 54, 9, 255, 91, 55, 9, 255, 92, 52, 8, 255, 100, 52, 10, 255, 99, 53, 9, 255, 104, 57, 8, 255, 109, 60, 3, 255, 114, 63, 5, 255, 127, 75, 13, 255, 135, 83, 9, 255, 159, 95, 8, 255, 149, 89, 2, 255, 147, 89, 9, 255, 140, 84, 6, 255, 135, 79, 0, 255, 134, 75, 12, 255, 126, 72, 11, 255, 122, 71, 5, 255, 119, 69, 6, 255, 118, 69, 7, 255, 115, 69, 7, 255, 106, 64, 7, 255, 103, 63, 11, 255, 100, 62, 9, 255, 100, 60, 9, 255, 104, 64, 15, 255, 104, 63, 8, 255, 106, 63, 7, 255, 111, 65, 7, 255, 104, 67, 9, 255, 99, 60, 13, 255, 95, 60, 16, 255, 96, 65, 3, 255, 100, 61, 9, 255, 101, 62, 13, 255, 97, 61, 9, 255, 102, 61, 14, 255, 101, 63, 16, 255, 93, 64, 11, 255, 97, 65, 8, 255, 100, 60, 14, 255, 96, 63, 9, 255, 96, 63, 13, 255, 93, 64, 19, 255, 96, 64, 18, 255, 101, 62, 16, 255, 105, 69, 10, 255, 109, 71, 8, 255, 113, 72, 10, 255, 107, 66, 15, 255, 106, 67, 18, 255, 106, 66, 19, 255, 105, 65, 16, 255, 109, 71, 5, 255, 110, 69, 14, 255, 110, 68, 25, 255, 111, 69, 22, 255, 104, 66, 16, 255, 101, 67, 22, 255, 102, 69, 20, 255, 107, 73, 14, 255, 106, 72, 12, 255, 105, 70, 16, 255, 106, 72, 10, 255, 110, 75, 12, 255, 108, 71, 16, 255, 108, 73, 22, 255, 111, 73, 24, 255, 113, 74, 15, 255, 110, 74, 12, 255, 111, 75, 14, 255, 111, 75, 14, 255, 118, 78, 17, 255, 116, 78, 12, 255, 111, 79, 23, 255, 111, 84, 23, 255, 120, 85, 13, 255, 134, 84, 21, 255, 134, 83, 20, 255, 133, 81, 18, 255, 133, 84, 17, 255, 129, 84, 18, 255, 129, 84, 17, 255, 137, 86, 19, 255, 138, 86, 19, 255, 132, 88, 19, 255, 128, 94, 15, 255, 130, 91, 22, 255, 133, 94, 31, 255, 136, 95, 29, 255, 136, 92, 30, 255, 139, 95, 32, 255, 141, 102, 24, 255, 136, 97, 26, 255, 140, 100, 37, 255, 138, 102, 24, 255, 141, 102, 35, 255, 143, 103, 29, 255, 149, 107, 22, 255, 144, 103, 23, 255, 142, 108, 29, 255, 146, 109, 36, 255, 152, 103, 47, 255, 151, 107, 32, 255, 151, 111, 35, 255, 151, 110, 31, 255, 147, 111, 31, 255, 147, 116, 35, 255, 155, 121, 39, 255, 160, 116, 33, 255, 170, 119, 22, 255, 170, 123, 23, 255, 173, 120, 33, 255, 176, 121, 23, 255, 172, 120, 23, 255, 158, 112, 32, 255, 150, 110, 19, 255, 151, 109, 19, 255, 155, 105, 31, 255, 149, 101, 26, 255, 147, 98, 27, 255, 148, 100, 14, 255, 141, 98, 25, 255, 136, 98, 25, 255, 144, 102, 20, 255, 151, 98, 16, 255, 148, 100, 25, 255, 148, 96, 18, 255, 155, 91, 15, 255, 157, 94, 12, 255, 149, 92, 15, 255, 144, 90, 15, 255, 137, 91, 4, 255, 136, 88, 13, 255, 134, 85, 16, 255, 141, 89, 10, 255, 141, 85, 21, 255, 140, 85, 17, 255, 140, 87, 10, 255, 142, 85, 11, 255, 141, 84, 7, 255, 142, 86, 7, 255, 142, 84, 11, 255, 144, 88, 11, 255, 142, 85, 6, 255, 142, 83, 4, 255, 144, 84, 5, 255, 143, 87, 7, 255, 152, 91, 14, 255, 162, 93, 14, 255, 161, 89, 7, 255, 163, 85, 7, 255, 166, 94, 9, 255, 168, 94, 7, 255, 169, 89, 1, 255, 174, 94, 4, 255, 172, 100, 7, 255, 179, 100, 2, 255, 189, 107, 8, 255, 185, 103, 3, 255, 180, 98, 0, 255, 177, 98, 5, 255, 167, 90, 4, 255, 161, 83, 2, 255, 155, 84, 2, 255, 156, 84, 7, 255, 191, 98, 10, 255, 194, 96, 3, 255, 189, 90, 3, 255, 187, 81, 2, 255, 172, 70, 5, 255, 149, 54, 4, 255, 123, 48, 8, 255, 117, 46, 6, 255, 129, 57, 0, 255, 130, 58, 8, 255, 112, 44, 10, 255, 96, 38, 6, 255, 93, 36, 6, 255, 94, 35, 4, 255, 91, 33, 7, 255, 98, 41, 8, 255, 110, 51, 3, 255, 119, 50, 6, 255, 116, 44, 1, 255, 108, 37, 6, 255, 102, 37, 5, 255, 109, 40, 5, 255, 123, 44, 7, 255, 124, 49, 9, 255, 120, 43, 4, 255, 135, 54, 1, 255, 162, 76, 8, 255, 140, 62, 4, 255, 128, 66, 9, 255, 119, 66, 2, 255, 118, 62, 5, 255, 129, 72, 18, 255, 143, 87, 15, 255, 150, 93, 23, 255, 154, 94, 26, 255, 158, 100, 24, 255, 154, 96, 25, 255, 142, 85, 15, 255, 157, 96, 24, 255, 163, 95, 20, 255, 154, 86, 14, 255, 137, 74, 13, 255, 112, 52, 6, 255, 100, 43, 6, 255, 103, 42, 7, 255, 108, 40, 6, 255, 91, 30, 7, 255, 87, 30, 9, 255, 99, 34, 5, 255, 93, 30, 7, 255, 99, 39, 11, 255, 104, 34, 6, 255, 3, 3, 16, 255, 1, 1, 15, 255, 0, 3, 16, 255, 0, 2, 15, 255, 0, 1, 13, 255, 0, 3, 16, 255, 1, 2, 14, 255, 0, 2, 12, 255, 0, 3, 14, 255, 2, 4, 17, 255, 0, 1, 15, 255, 2, 2, 14, 255, 4, 4, 13, 255, 2, 2, 9, 255, 3, 3, 12, 255, 2, 3, 13, 255, 2, 2, 12, 255, 2, 2, 12, 255, 1, 1, 13, 255, 1, 3, 15, 255, 1, 2, 15, 255, 1, 1, 12, 255, 0, 0, 8, 255, 1, 1, 7, 255, 2, 1, 8, 255, 0, 0, 5, 255, 1, 1, 3, 255, 1, 1, 4, 255, 1, 1, 4, 255, 1, 1, 3, 255, 0, 0, 2, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 2, 255, 0, 0, 1, 255, 0, 0, 0, 255, 1, 2, 0, 255, 0, 2, 2, 255, 0, 2, 4, 255, 1, 22, 33, 255, 0, 27, 74, 255, 48, 117, 189, 255, 50, 163, 212, 255, 48, 164, 231, 255, 210, 249, 255, 255, 157, 228, 217, 255, 18, 88, 101, 255, 4, 97, 154, 255, 3, 189, 232, 255, 5, 255, 255, 255, 45, 252, 247, 255, 52, 236, 253, 255, 59, 232, 250, 255, 211, 255, 255, 255, 210, 242, 200, 255, 41, 71, 41, 255, 0, 0, 0, 255, 6, 1, 7, 255, 1, 1, 4, 255, 5, 1, 0, 255, 2, 0, 9, 255, 0, 13, 43, 255, 1, 18, 70, 255, 4, 18, 56, 255, 5, 12, 18, 255, 3, 1, 0, 255, 6, 7, 32, 255, 12, 21, 69, 255, 9, 27, 101, 255, 7, 26, 122, 255, 2, 13, 80, 255, 2, 9, 34, 255, 1, 1, 3, 255, 2, 0, 1, 255, 1, 3, 6, 255, 0, 4, 0, 255, 2, 1, 3, 255, 2, 1, 2, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 3, 3, 1, 255, 5, 4, 2, 255, 6, 3, 0, 255, 6, 3, 0, 255, 7, 3, 1, 255, 8, 4, 1, 255, 7, 4, 0, 255, 10, 5, 2, 255, 8, 4, 1, 255, 6, 2, 0, 255, 8, 4, 1, 255, 9, 5, 2, 255, 7, 3, 0, 255, 10, 5, 2, 255, 10, 8, 2, 255, 8, 6, 7, 255, 12, 10, 2, 255, 14, 10, 6, 255, 1, 1, 4, 255, 31, 27, 26, 255, 113, 92, 64, 255, 47, 38, 14, 255, 163, 150, 65, 255, 140, 107, 24, 255, 57, 53, 32, 255, 53, 49, 44, 255, 36, 24, 6, 255, 26, 21, 3, 255, 21, 18, 8, 255, 34, 23, 8, 255, 64, 39, 11, 255, 79, 84, 20, 255, 92, 102, 21, 255, 83, 91, 11, 255, 77, 80, 12, 255, 71, 73, 9, 255, 70, 68, 11, 255, 68, 67, 10, 255, 65, 65, 11, 255, 64, 65, 16, 255, 63, 59, 1, 255, 62, 59, 4, 255, 56, 52, 4, 255, 54, 47, 7, 255, 52, 49, 10, 255, 53, 47, 12, 255, 54, 43, 10, 255, 50, 37, 16, 255, 57, 49, 8, 255, 48, 40, 2, 255, 56, 43, 10, 255, 57, 40, 3, 255, 69, 52, 5, 255, 84, 60, 5, 255, 92, 62, 0, 255, 91, 62, 7, 255, 80, 55, 9, 255, 72, 49, 11, 255, 73, 49, 6, 255, 73, 46, 7, 255, 70, 47, 9, 255, 67, 46, 4, 255, 70, 47, 4, 255, 71, 41, 5, 255, 71, 39, 7, 255, 72, 41, 7, 255, 69, 42, 4, 255, 76, 47, 4, 255, 84, 52, 5, 255, 89, 55, 4, 255, 93, 58, 6, 255, 94, 51, 5, 255, 99, 57, 11, 255, 93, 53, 10, 255, 86, 45, 4, 255, 120, 54, 4, 255, 135, 55, 9, 255, 90, 34, 6, 255, 83, 42, 5, 255, 81, 43, 10, 255, 80, 43, 6, 255, 83, 52, 2, 255, 83, 47, 5, 255, 87, 43, 2, 255, 82, 41, 12, 255, 78, 46, 9, 255, 72, 48, 8, 255, 81, 44, 13, 255, 88, 50, 6, 255, 87, 49, 7, 255, 87, 49, 11, 255, 84, 53, 3, 255, 93, 56, 1, 255, 99, 53, 7, 255, 93, 51, 12, 255, 91, 53, 10, 255, 95, 54, 9, 255, 101, 56, 10, 255, 106, 60, 8, 255, 109, 62, 13, 255, 114, 64, 10, 255, 120, 71, 3, 255, 127, 79, 4, 255, 145, 83, 7, 255, 137, 79, 3, 255, 137, 82, 10, 255, 135, 80, 8, 255, 128, 77, 3, 255, 125, 72, 7, 255, 117, 67, 6, 255, 116, 72, 3, 255, 112, 71, 0, 255, 108, 67, 2, 255, 109, 65, 10, 255, 108, 62, 12, 255, 106, 60, 9, 255, 101, 61, 6, 255, 103, 63, 6, 255, 103, 64, 10, 255, 102, 61, 15, 255, 102, 61, 16, 255, 104, 62, 10, 255, 99, 62, 9, 255, 97, 61, 10, 255, 98, 62, 14, 255, 98, 59, 14, 255, 98, 59, 12, 255, 97, 62, 16, 255, 99, 63, 11, 255, 100, 63, 19, 255, 101, 58, 14, 255, 92, 63, 6, 255, 95, 63, 12, 255, 94, 60, 15, 255, 95, 63, 9, 255, 102, 66, 17, 255, 100, 64, 11, 255, 101, 62, 16, 255, 107, 67, 15, 255, 110, 70, 6, 255, 109, 71, 11, 255, 108, 70, 10, 255, 108, 70, 16, 255, 104, 68, 14, 255, 100, 64, 13, 255, 105, 68, 18, 255, 106, 69, 10, 255, 112, 72, 16, 255, 112, 70, 16, 255, 111, 70, 9, 255, 110, 69, 15, 255, 108, 70, 19, 255, 103, 69, 14, 255, 104, 71, 9, 255, 109, 75, 15, 255, 105, 69, 13, 255, 106, 70, 15, 255, 111, 75, 12, 255, 110, 74, 13, 255, 107, 72, 18, 255, 112, 77, 15, 255, 110, 76, 18, 255, 104, 73, 16, 255, 104, 75, 5, 255, 107, 76, 14, 255, 112, 79, 18, 255, 111, 76, 18, 255, 114, 79, 18, 255, 116, 80, 20, 255, 121, 82, 21, 255, 134, 84, 29, 255, 135, 81, 27, 255, 134, 85, 19, 255, 132, 84, 18, 255, 131, 85, 15, 255, 129, 87, 20, 255, 131, 86, 26, 255, 139, 90, 23, 255, 138, 90, 20, 255, 134, 91, 17, 255, 133, 90, 26, 255, 133, 90, 30, 255, 134, 91, 31, 255, 138, 96, 21, 255, 142, 101, 20, 255, 139, 98, 33, 255, 139, 100, 29, 255, 140, 96, 33, 255, 143, 98, 24, 255, 148, 105, 23, 255, 144, 102, 28, 255, 144, 105, 33, 255, 145, 106, 37, 255, 145, 104, 36, 255, 145, 107, 36, 255, 147, 110, 29, 255, 153, 105, 25, 255, 156, 107, 34, 255, 150, 112, 37, 255, 151, 112, 27, 255, 147, 110, 25, 255, 151, 117, 30, 255, 155, 119, 32, 255, 164, 123, 20, 255, 172, 120, 19, 255, 178, 123, 28, 255, 177, 123, 22, 255, 171, 119, 16, 255, 162, 114, 24, 255, 154, 114, 13, 255, 153, 110, 17, 255, 153, 104, 26, 255, 152, 103, 23, 255, 150, 102, 19, 255, 150, 104, 10, 255, 144, 103, 19, 255, 138, 103, 13, 255, 145, 104, 10, 255, 151, 98, 19, 255, 150, 100, 17, 255, 151, 99, 14, 255, 155, 98, 8, 255, 157, 95, 13, 255, 153, 91, 17, 255, 145, 87, 22, 255, 142, 88, 17, 255, 141, 91, 9, 255, 141, 90, 5, 255, 143, 89, 5, 255, 141, 86, 14, 255, 141, 85, 14, 255, 140, 85, 11, 255, 146, 87, 10, 255, 145, 86, 5, 255, 142, 84, 4, 255, 146, 86, 11, 255, 143, 86, 12, 255, 145, 84, 10, 255, 145, 85, 6, 255, 146, 88, 5, 255, 151, 89, 8, 255, 149, 92, 12, 255, 151, 94, 16, 255, 157, 91, 13, 255, 160, 91, 7, 255, 165, 94, 11, 255, 167, 93, 8, 255, 165, 92, 3, 255, 171, 97, 2, 255, 179, 101, 6, 255, 184, 101, 6, 255, 186, 104, 5, 255, 185, 103, 3, 255, 185, 103, 3, 255, 183, 102, 5, 255, 177, 97, 3, 255, 170, 91, 3, 255, 164, 84, 5, 255, 157, 78, 5, 255, 167, 87, 8, 255, 204, 101, 5, 255, 209, 100, 8, 255, 175, 72, 11, 255, 147, 56, 9, 255, 123, 49, 12, 255, 119, 47, 7, 255, 117, 46, 7, 255, 119, 48, 7, 255, 110, 44, 8, 255, 96, 32, 0, 255, 105, 40, 12, 255, 89, 33, 8, 255, 83, 38, 6, 255, 95, 42, 5, 255, 102, 40, 3, 255, 107, 42, 8, 255, 110, 45, 11, 255, 114, 44, 3, 255, 109, 42, 8, 255, 105, 42, 5, 255, 112, 45, 8, 255, 123, 47, 11, 255, 131, 48, 3, 255, 133, 54, 7, 255, 139, 71, 12, 255, 136, 76, 5, 255, 132, 69, 4, 255, 131, 72, 13, 255, 130, 77, 11, 255, 139, 86, 5, 255, 152, 94, 26, 255, 151, 95, 16, 255, 155, 97, 17, 255, 157, 99, 28, 255, 157, 98, 14, 255, 161, 98, 13, 255, 163, 101, 14, 255, 167, 104, 18, 255, 165, 97, 19, 255, 155, 84, 17, 255, 140, 77, 17, 255, 116, 53, 6, 255, 107, 44, 9, 255, 105, 45, 7, 255, 106, 43, 5, 255, 102, 37, 8, 255, 103, 42, 10, 255, 94, 38, 3, 255, 93, 37, 7, 255, 98, 43, 10, 255, 98, 40, 7, 255, 0, 2, 14, 255, 0, 1, 16, 255, 1, 2, 20, 255, 1, 3, 18, 255, 0, 2, 14, 255, 0, 2, 14, 255, 2, 3, 14, 255, 2, 3, 14, 255, 1, 2, 12, 255, 1, 2, 11, 255, 1, 1, 12, 255, 1, 1, 13, 255, 1, 1, 12, 255, 1, 1, 10, 255, 3, 2, 15, 255, 3, 2, 16, 255, 2, 1, 15, 255, 2, 2, 13, 255, 2, 2, 14, 255, 2, 4, 14, 255, 0, 2, 12, 255, 2, 2, 10, 255, 2, 2, 7, 255, 0, 2, 5, 255, 1, 3, 5, 255, 1, 1, 5, 255, 0, 0, 4, 255, 0, 0, 4, 255, 1, 0, 5, 255, 1, 0, 4, 255, 1, 1, 3, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 2, 255, 2, 0, 1, 255, 2, 1, 0, 255, 2, 3, 0, 255, 2, 0, 0, 255, 2, 9, 17, 255, 0, 27, 65, 255, 64, 135, 188, 255, 48, 166, 218, 255, 77, 223, 253, 255, 198, 255, 249, 255, 199, 254, 254, 255, 101, 214, 238, 255, 2, 224, 251, 255, 14, 243, 250, 255, 69, 240, 246, 255, 46, 234, 249, 255, 41, 224, 249, 255, 211, 251, 255, 255, 204, 234, 192, 255, 35, 64, 33, 255, 0, 0, 1, 255, 2, 3, 4, 255, 1, 1, 3, 255, 3, 0, 5, 255, 3, 7, 42, 255, 3, 14, 61, 255, 7, 21, 56, 255, 5, 15, 22, 255, 2, 0, 2, 255, 1, 3, 15, 255, 6, 17, 67, 255, 13, 32, 103, 255, 8, 25, 93, 255, 6, 18, 69, 255, 7, 11, 48, 255, 2, 6, 15, 255, 3, 0, 0, 255, 0, 1, 1, 255, 1, 1, 4, 255, 3, 0, 4, 255, 4, 0, 4, 255, 1, 1, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 2, 2, 2, 255, 2, 2, 2, 255, 2, 2, 2, 255, 2, 0, 2, 255, 4, 2, 2, 255, 2, 2, 0, 255, 1, 1, 0, 255, 4, 2, 0, 255, 6, 3, 2, 255, 8, 2, 1, 255, 8, 4, 1, 255, 10, 6, 3, 255, 8, 4, 1, 255, 7, 3, 0, 255, 8, 4, 1, 255, 8, 5, 1, 255, 9, 5, 4, 255, 8, 5, 2, 255, 9, 7, 5, 255, 10, 10, 3, 255, 9, 9, 3, 255, 10, 8, 12, 255, 20, 20, 9, 255, 37, 29, 18, 255, 90, 79, 44, 255, 107, 73, 12, 255, 42, 31, 11, 255, 55, 60, 23, 255, 89, 109, 77, 255, 81, 91, 45, 255, 32, 26, 4, 255, 24, 23, 14, 255, 51, 33, 17, 255, 58, 55, 11, 255, 78, 87, 19, 255, 81, 86, 12, 255, 76, 78, 6, 255, 79, 75, 8, 255, 72, 70, 4, 255, 62, 67, 6, 255, 61, 65, 7, 255, 63, 60, 8, 255, 63, 61, 8, 255, 69, 60, 6, 255, 57, 53, 4, 255, 51, 48, 7, 255, 53, 43, 10, 255, 50, 47, 3, 255, 51, 45, 12, 255, 54, 45, 4, 255, 54, 43, 16, 255, 50, 39, 14, 255, 54, 40, 8, 255, 62, 39, 14, 255, 76, 48, 10, 255, 90, 61, 9, 255, 91, 65, 9, 255, 92, 63, 6, 255, 94, 65, 0, 255, 85, 58, 4, 255, 73, 54, 10, 255, 73, 51, 10, 255, 71, 47, 6, 255, 69, 44, 9, 255, 68, 45, 10, 255, 69, 45, 6, 255, 70, 41, 13, 255, 70, 36, 14, 255, 76, 43, 8, 255, 76, 43, 9, 255, 80, 49, 8, 255, 84, 51, 9, 255, 87, 53, 7, 255, 88, 54, 7, 255, 86, 53, 8, 255, 86, 52, 6, 255, 82, 45, 2, 255, 75, 39, 8, 255, 103, 54, 6, 255, 128, 58, 3, 255, 95, 37, 7, 255, 88, 41, 14, 255, 83, 43, 8, 255, 79, 42, 4, 255, 83, 45, 7, 255, 79, 45, 6, 255, 83, 48, 3, 255, 82, 47, 11, 255, 82, 42, 14, 255, 86, 50, 3, 255, 85, 50, 8, 255, 83, 50, 7, 255, 87, 53, 4, 255, 91, 45, 6, 255, 96, 53, 10, 255, 93, 54, 7, 255, 94, 51, 8, 255, 96, 51, 10, 255, 93, 48, 9, 255, 99, 54, 10, 255, 102, 60, 7, 255, 103, 59, 9, 255, 107, 60, 15, 255, 110, 62, 9, 255, 120, 70, 9, 255, 124, 73, 15, 255, 135, 77, 11, 255, 129, 72, 8, 255, 126, 73, 11, 255, 126, 74, 11, 255, 124, 74, 8, 255, 118, 71, 8, 255, 112, 65, 6, 255, 111, 66, 7, 255, 109, 66, 6, 255, 106, 66, 4, 255, 104, 64, 3, 255, 102, 61, 6, 255, 104, 61, 10, 255, 106, 62, 8, 255, 105, 63, 10, 255, 102, 59, 12, 255, 102, 62, 11, 255, 98, 59, 10, 255, 99, 61, 11, 255, 98, 65, 8, 255, 94, 65, 12, 255, 97, 64, 2, 255, 100, 57, 14, 255, 99, 61, 11, 255, 93, 62, 7, 255, 94, 63, 11, 255, 96, 63, 12, 255, 101, 62, 8, 255, 96, 63, 7, 255, 97, 62, 13, 255, 103, 64, 12, 255, 100, 63, 10, 255, 101, 60, 17, 255, 100, 65, 12, 255, 118, 71, 11, 255, 123, 69, 10, 255, 108, 66, 10, 255, 105, 70, 15, 255, 110, 69, 11, 255, 114, 70, 20, 255, 107, 65, 15, 255, 107, 68, 10, 255, 110, 70, 9, 255, 113, 68, 17, 255, 116, 70, 23, 255, 113, 71, 13, 255, 111, 68, 13, 255, 110, 68, 13, 255, 109, 71, 12, 255, 104, 69, 14, 255, 104, 71, 6, 255, 108, 75, 4, 255, 109, 73, 11, 255, 111, 72, 25, 255, 110, 72, 22, 255, 109, 71, 21, 255, 109, 71, 18, 255, 113, 74, 10, 255, 114, 73, 11, 255, 113, 74, 19, 255, 113, 76, 14, 255, 113, 76, 8, 255, 115, 77, 10, 255, 115, 76, 18, 255, 115, 79, 12, 255, 121, 81, 16, 255, 123, 82, 18, 255, 132, 87, 17, 255, 139, 82, 32, 255, 134, 84, 16, 255, 130, 81, 20, 255, 128, 84, 13, 255, 125, 86, 15, 255, 132, 89, 21, 255, 139, 91, 22, 255, 141, 89, 26, 255, 140, 91, 18, 255, 134, 92, 11, 255, 133, 88, 28, 255, 136, 93, 18, 255, 142, 99, 8, 255, 142, 97, 19, 255, 140, 97, 32, 255, 143, 100, 31, 255, 146, 99, 31, 255, 145, 98, 25, 255, 149, 100, 30, 255, 149, 104, 35, 255, 144, 105, 24, 255, 143, 106, 36, 255, 147, 106, 34, 255, 149, 104, 37, 255, 150, 110, 33, 255, 153, 108, 28, 255, 157, 109, 24, 255, 153, 110, 27, 255, 155, 110, 21, 255, 149, 108, 23, 255, 150, 114, 29, 255, 153, 118, 33, 255, 160, 120, 26, 255, 172, 119, 21, 255, 182, 128, 15, 255, 182, 124, 28, 255, 173, 118, 25, 255, 164, 113, 28, 255, 157, 112, 22, 255, 154, 105, 33, 255, 154, 103, 31, 255, 153, 102, 29, 255, 149, 101, 22, 255, 150, 102, 13, 255, 146, 102, 17, 255, 139, 101, 13, 255, 143, 100, 17, 255, 155, 97, 17, 255, 158, 97, 5, 255, 156, 96, 26, 255, 153, 96, 26, 255, 158, 96, 12, 255, 156, 93, 13, 255, 144, 88, 20, 255, 143, 90, 22, 255, 140, 88, 15, 255, 141, 90, 7, 255, 144, 90, 8, 255, 143, 89, 4, 255, 142, 87, 8, 255, 143, 85, 6, 255, 138, 86, 3, 255, 142, 84, 8, 255, 144, 83, 13, 255, 138, 86, 5, 255, 146, 88, 2, 255, 146, 87, 7, 255, 146, 88, 11, 255, 150, 87, 8, 255, 150, 87, 9, 255, 155, 91, 13, 255, 160, 96, 13, 255, 160, 94, 8, 255, 162, 92, 12, 255, 168, 94, 14, 255, 163, 92, 8, 255, 166, 98, 8, 255, 169, 98, 2, 255, 180, 98, 1, 255, 185, 102, 4, 255, 183, 101, 3, 255, 187, 104, 4, 255, 189, 106, 5, 255, 186, 103, 2, 255, 183, 99, 0, 255, 176, 94, 1, 255, 170, 85, 5, 255, 167, 89, 2, 255, 176, 96, 3, 255, 193, 95, 6, 255, 181, 72, 8, 255, 151, 55, 4, 255, 124, 55, 4, 255, 114, 49, 6, 255, 122, 49, 0, 255, 117, 50, 3, 255, 102, 42, 8, 255, 99, 39, 5, 255, 97, 39, 1, 255, 98, 35, 6, 255, 85, 28, 6, 255, 89, 40, 6, 255, 100, 46, 4, 255, 102, 38, 4, 255, 104, 40, 7, 255, 109, 49, 0, 255, 113, 49, 1, 255, 111, 47, 7, 255, 107, 45, 4, 255, 109, 44, 2, 255, 121, 49, 4, 255, 134, 59, 6, 255, 128, 66, 3, 255, 125, 69, 6, 255, 129, 69, 11, 255, 135, 77, 14, 255, 140, 83, 10, 255, 149, 91, 14, 255, 155, 99, 12, 255, 153, 94, 20, 255, 155, 96, 17, 255, 157, 97, 17, 255, 159, 98, 27, 255, 160, 98, 17, 255, 162, 96, 14, 255, 163, 97, 18, 255, 163, 97, 16, 255, 164, 96, 15, 255, 163, 94, 20, 255, 137, 71, 9, 255, 120, 52, 7, 255, 109, 43, 9, 255, 112, 56, 9, 255, 112, 54, 5, 255, 115, 50, 10, 255, 109, 49, 7, 255, 98, 42, 10, 255, 104, 44, 4, 255, 105, 48, 8, 255, 100, 44, 4, 255, 0, 1, 13, 255, 0, 1, 15, 255, 1, 3, 18, 255, 1, 3, 17, 255, 1, 3, 15, 255, 0, 2, 14, 255, 1, 2, 16, 255, 1, 2, 16, 255, 2, 2, 14, 255, 1, 1, 10, 255, 2, 2, 9, 255, 2, 2, 10, 255, 1, 1, 11, 255, 2, 2, 11, 255, 4, 3, 16, 255, 3, 2, 16, 255, 2, 2, 14, 255, 1, 1, 11, 255, 1, 1, 11, 255, 0, 3, 15, 255, 0, 0, 13, 255, 1, 1, 12, 255, 2, 2, 12, 255, 0, 0, 7, 255, 0, 1, 6, 255, 1, 2, 7, 255, 0, 1, 6, 255, 0, 1, 6, 255, 1, 0, 5, 255, 1, 0, 4, 255, 1, 1, 3, 255, 1, 1, 3, 255, 1, 1, 3, 255, 1, 1, 3, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 0, 255, 0, 0, 0, 255, 0, 0, 2, 255, 1, 1, 3, 255, 1, 0, 1, 255, 0, 0, 0, 255, 2, 2, 1, 255, 2, 0, 0, 255, 4, 16, 32, 255, 4, 62, 157, 255, 24, 195, 248, 255, 83, 254, 253, 255, 83, 255, 252, 255, 75, 201, 203, 255, 61, 201, 226, 255, 67, 250, 255, 255, 48, 233, 243, 255, 7, 208, 244, 255, 34, 224, 250, 255, 225, 255, 255, 255, 188, 228, 182, 255, 22, 56, 24, 255, 0, 0, 0, 255, 4, 3, 10, 255, 2, 2, 1, 255, 1, 8, 25, 255, 6, 12, 62, 255, 7, 15, 63, 255, 5, 12, 37, 255, 4, 3, 3, 255, 7, 1, 0, 255, 8, 9, 40, 255, 12, 17, 88, 255, 5, 19, 89, 255, 6, 17, 60, 255, 0, 6, 38, 255, 2, 6, 14, 255, 3, 0, 0, 255, 2, 0, 0, 255, 1, 1, 2, 255, 0, 0, 3, 255, 0, 0, 1, 255, 0, 2, 0, 255, 1, 2, 2, 255, 3, 0, 2, 255, 1, 0, 0, 255, 1, 1, 1, 255, 2, 2, 2, 255, 3, 1, 2, 255, 2, 0, 1, 255, 2, 0, 1, 255, 2, 0, 1, 255, 3, 0, 1, 255, 1, 1, 1, 255, 2, 2, 2, 255, 2, 2, 0, 255, 5, 2, 1, 255, 8, 2, 2, 255, 9, 4, 2, 255, 5, 1, 0, 255, 7, 3, 1, 255, 10, 6, 3, 255, 10, 6, 3, 255, 11, 7, 4, 255, 7, 10, 6, 255, 6, 8, 2, 255, 13, 8, 4, 255, 11, 8, 7, 255, 4, 8, 1, 255, 6, 11, 1, 255, 41, 37, 18, 255, 88, 58, 36, 255, 189, 143, 35, 255, 166, 115, 10, 255, 44, 34, 11, 255, 32, 17, 4, 255, 30, 27, 8, 255, 36, 46, 20, 255, 31, 20, 8, 255, 39, 21, 13, 255, 47, 38, 10, 255, 54, 58, 6, 255, 70, 70, 14, 255, 70, 67, 15, 255, 63, 68, 6, 255, 73, 69, 10, 255, 68, 67, 3, 255, 60, 67, 6, 255, 62, 66, 10, 255, 64, 58, 11, 255, 60, 54, 10, 255, 62, 56, 5, 255, 53, 52, 10, 255, 44, 44, 9, 255, 55, 45, 9, 255, 60, 47, 7, 255, 56, 45, 4, 255, 58, 47, 2, 255, 54, 41, 6, 255, 57, 41, 16, 255, 61, 42, 5, 255, 72, 42, 14, 255, 93, 61, 5, 255, 98, 69, 5, 255, 102, 67, 7, 255, 98, 64, 3, 255, 97, 66, 12, 255, 88, 61, 8, 255, 81, 53, 4, 255, 80, 51, 9, 255, 77, 50, 3, 255, 70, 42, 3, 255, 70, 45, 13, 255, 69, 45, 6, 255, 72, 46, 7, 255, 74, 43, 10, 255, 77, 47, 7, 255, 74, 45, 4, 255, 80, 47, 1, 255, 83, 48, 4, 255, 91, 55, 7, 255, 90, 54, 7, 255, 82, 50, 7, 255, 77, 44, 5, 255, 78, 42, 3, 255, 77, 38, 11, 255, 93, 46, 10, 255, 132, 57, 4, 255, 113, 48, 7, 255, 84, 32, 4, 255, 87, 46, 6, 255, 87, 46, 7, 255, 85, 43, 9, 255, 79, 46, 5, 255, 80, 44, 16, 255, 91, 50, 9, 255, 87, 48, 3, 255, 91, 47, 7, 255, 88, 44, 11, 255, 88, 48, 7, 255, 86, 53, 3, 255, 89, 52, 10, 255, 93, 48, 10, 255, 95, 46, 11, 255, 97, 49, 9, 255, 96, 52, 7, 255, 95, 52, 8, 255, 94, 53, 8, 255, 98, 57, 9, 255, 99, 58, 7, 255, 102, 59, 3, 255, 111, 63, 5, 255, 114, 63, 10, 255, 120, 66, 15, 255, 126, 73, 8, 255, 123, 71, 10, 255, 120, 69, 10, 255, 117, 66, 8, 255, 114, 65, 7, 255, 112, 68, 11, 255, 106, 65, 5, 255, 105, 62, 4, 255, 106, 61, 7, 255, 107, 63, 7, 255, 103, 62, 8, 255, 97, 60, 11, 255, 97, 60, 15, 255, 104, 57, 6, 255, 105, 59, 12, 255, 103, 59, 19, 255, 103, 64, 2, 255, 102, 64, 6, 255, 99, 61, 5, 255, 105, 59, 7, 255, 98, 59, 10, 255, 96, 59, 7, 255, 103, 61, 6, 255, 104, 66, 15, 255, 98, 59, 15, 255, 103, 58, 17, 255, 110, 61, 20, 255, 105, 57, 18, 255, 103, 63, 11, 255, 104, 64, 17, 255, 101, 61, 12, 255, 94, 64, 8, 255, 100, 63, 10, 255, 97, 63, 20, 255, 102, 69, 14, 255, 106, 68, 17, 255, 112, 68, 21, 255, 116, 69, 16, 255, 112, 69, 10, 255, 109, 70, 15, 255, 105, 67, 14, 255, 109, 70, 20, 255, 107, 67, 15, 255, 111, 70, 13, 255, 113, 72, 7, 255, 113, 73, 11, 255, 112, 72, 12, 255, 109, 67, 16, 255, 107, 67, 17, 255, 106, 70, 11, 255, 104, 71, 14, 255, 108, 72, 14, 255, 109, 70, 24, 255, 107, 69, 22, 255, 110, 70, 22, 255, 112, 73, 23, 255, 114, 75, 17, 255, 112, 73, 13, 255, 111, 74, 13, 255, 111, 73, 26, 255, 109, 72, 27, 255, 112, 78, 16, 255, 115, 80, 13, 255, 114, 80, 18, 255, 118, 83, 13, 255, 123, 82, 13, 255, 122, 81, 11, 255, 127, 84, 14, 255, 139, 85, 23, 255, 136, 82, 19, 255, 132, 87, 17, 255, 129, 86, 18, 255, 129, 84, 23, 255, 135, 86, 22, 255, 139, 87, 25, 255, 140, 89, 27, 255, 139, 92, 13, 255, 135, 93, 20, 255, 133, 92, 18, 255, 140, 97, 17, 255, 145, 96, 21, 255, 146, 95, 28, 255, 145, 95, 24, 255, 145, 97, 25, 255, 145, 99, 27, 255, 145, 101, 28, 255, 145, 100, 37, 255, 145, 101, 31, 255, 149, 103, 24, 255, 151, 104, 29, 255, 144, 100, 35, 255, 150, 107, 29, 255, 154, 106, 30, 255, 151, 105, 32, 255, 153, 109, 28, 255, 155, 105, 36, 255, 159, 109, 37, 255, 156, 114, 28, 255, 152, 115, 20, 255, 156, 114, 29, 255, 163, 114, 34, 255, 169, 119, 27, 255, 178, 125, 26, 255, 184, 128, 14, 255, 179, 123, 16, 255, 169, 117, 20, 255, 159, 111, 27, 255, 156, 108, 25, 255, 159, 105, 30, 255, 157, 105, 21, 255, 152, 103, 20, 255, 154, 104, 11, 255, 150, 101, 19, 255, 144, 98, 28, 255, 145, 98, 26, 255, 153, 98, 16, 255, 157, 99, 4, 255, 157, 100, 13, 255, 156, 96, 17, 255, 166, 96, 10, 255, 173, 96, 14, 255, 154, 95, 4, 255, 139, 95, 20, 255, 137, 89, 19, 255, 138, 87, 15, 255, 142, 88, 12, 255, 144, 89, 6, 255, 140, 87, 10, 255, 141, 82, 11, 255, 148, 86, 5, 255, 154, 85, 4, 255, 158, 87, 9, 255, 152, 89, 3, 255, 147, 86, 4, 255, 152, 84, 8, 255, 162, 83, 8, 255, 169, 86, 7, 255, 171, 90, 9, 255, 175, 89, 12, 255, 177, 87, 14, 255, 173, 88, 12, 255, 168, 87, 14, 255, 167, 90, 11, 255, 166, 91, 11, 255, 165, 91, 5, 255, 176, 101, 6, 255, 180, 102, 7, 255, 184, 103, 2, 255, 184, 102, 2, 255, 189, 107, 4, 255, 193, 108, 4, 255, 190, 104, 2, 255, 190, 103, 3, 255, 188, 100, 4, 255, 182, 98, 3, 255, 201, 109, 8, 255, 190, 95, 5, 255, 171, 84, 6, 255, 147, 59, 2, 255, 123, 52, 2, 255, 123, 50, 7, 255, 119, 50, 8, 255, 113, 54, 7, 255, 107, 43, 7, 255, 108, 41, 13, 255, 99, 39, 2, 255, 101, 42, 1, 255, 100, 45, 2, 255, 99, 45, 9, 255, 93, 38, 4, 255, 98, 42, 8, 255, 105, 46, 7, 255, 109, 47, 3, 255, 106, 43, 6, 255, 105, 41, 3, 255, 103, 38, 5, 255, 105, 41, 3, 255, 115, 49, 8, 255, 130, 59, 7, 255, 135, 62, 9, 255, 127, 59, 2, 255, 125, 70, 9, 255, 133, 83, 18, 255, 148, 92, 14, 255, 154, 95, 14, 255, 156, 98, 19, 255, 161, 100, 18, 255, 157, 97, 22, 255, 159, 98, 21, 255, 159, 96, 22, 255, 161, 98, 25, 255, 161, 98, 19, 255, 160, 97, 17, 255, 162, 99, 23, 255, 162, 98, 19, 255, 163, 97, 11, 255, 165, 98, 12, 255, 155, 88, 10, 255, 142, 74, 13, 255, 113, 53, 9, 255, 110, 54, 5, 255, 116, 53, 6, 255, 117, 57, 11, 255, 107, 50, 5, 255, 101, 38, 11, 255, 101, 45, 6, 255, 103, 45, 9, 255, 99, 43, 8, 255, 2, 5, 14, 255, 1, 3, 15, 255, 0, 2, 15, 255, 0, 2, 15, 255, 1, 3, 15, 255, 1, 3, 15, 255, 0, 2, 17, 255, 0, 1, 16, 255, 2, 2, 16, 255, 4, 4, 15, 255, 1, 2, 7, 255, 1, 1, 8, 255, 2, 4, 13, 255, 1, 2, 10, 255, 3, 3, 14, 255, 2, 2, 14, 255, 2, 2, 12, 255, 3, 3, 13, 255, 3, 3, 13, 255, 1, 3, 11, 255, 0, 3, 11, 255, 1, 2, 11, 255, 0, 0, 8, 255, 1, 2, 7, 255, 1, 2, 6, 255, 0, 1, 4, 255, 1, 2, 7, 255, 1, 2, 7, 255, 1, 2, 7, 255, 0, 0, 5, 255, 1, 1, 4, 255, 1, 1, 3, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 2, 255, 0, 0, 2, 255, 1, 1, 2, 255, 0, 0, 2, 255, 0, 1, 3, 255, 2, 1, 0, 255, 2, 7, 54, 255, 1, 154, 231, 255, 48, 255, 255, 255, 40, 242, 247, 255, 44, 197, 207, 255, 21, 149, 160, 255, 0, 168, 216, 255, 12, 234, 251, 255, 6, 223, 250, 255, 33, 221, 250, 255, 232, 255, 255, 255, 180, 221, 174, 255, 19, 48, 22, 255, 0, 0, 0, 255, 5, 2, 1, 255, 6, 2, 26, 255, 6, 14, 64, 255, 3, 25, 71, 255, 5, 19, 36, 255, 0, 5, 0, 255, 3, 1, 4, 255, 2, 6, 31, 255, 3, 16, 82, 255, 11, 19, 102, 255, 6, 14, 69, 255, 0, 3, 16, 255, 3, 2, 0, 255, 4, 2, 4, 255, 3, 0, 1, 255, 1, 2, 3, 255, 2, 0, 6, 255, 1, 0, 1, 255, 2, 0, 5, 255, 0, 1, 2, 255, 0, 2, 1, 255, 0, 2, 2, 255, 0, 1, 1, 255, 2, 3, 2, 255, 3, 3, 3, 255, 3, 1, 2, 255, 2, 0, 1, 255, 2, 0, 1, 255, 2, 0, 1, 255, 2, 2, 1, 255, 4, 1, 2, 255, 3, 1, 2, 255, 3, 3, 3, 255, 3, 2, 2, 255, 4, 1, 0, 255, 6, 2, 1, 255, 7, 4, 1, 255, 9, 5, 2, 255, 8, 4, 1, 255, 8, 4, 1, 255, 10, 6, 3, 255, 10, 7, 4, 255, 9, 6, 2, 255, 12, 8, 3, 255, 11, 8, 6, 255, 9, 7, 8, 255, 9, 10, 2, 255, 16, 14, 6, 255, 35, 24, 23, 255, 44, 45, 45, 255, 36, 60, 68, 255, 68, 106, 110, 255, 91, 126, 113, 255, 76, 90, 48, 255, 27, 20, 11, 255, 12, 17, 12, 255, 26, 20, 16, 255, 35, 22, 9, 255, 30, 35, 6, 255, 48, 47, 15, 255, 64, 60, 7, 255, 68, 67, 3, 255, 66, 64, 7, 255, 68, 60, 11, 255, 66, 56, 4, 255, 65, 58, 4, 255, 63, 57, 4, 255, 61, 50, 5, 255, 55, 46, 15, 255, 51, 50, 11, 255, 52, 51, 2, 255, 51, 46, 9, 255, 54, 47, 5, 255, 60, 42, 11, 255, 57, 45, 6, 255, 54, 44, 9, 255, 50, 40, 10, 255, 49, 38, 11, 255, 62, 46, 14, 255, 84, 62, 3, 255, 93, 63, 4, 255, 99, 68, 4, 255, 99, 66, 8, 255, 97, 62, 8, 255, 94, 62, 5, 255, 93, 61, 7, 255, 84, 52, 3, 255, 77, 47, 11, 255, 71, 42, 5, 255, 69, 42, 6, 255, 66, 42, 8, 255, 69, 45, 6, 255, 74, 47, 2, 255, 75, 47, 4, 255, 71, 44, 7, 255, 75, 46, 6, 255, 81, 46, 3, 255, 85, 46, 5, 255, 85, 47, 6, 255, 80, 44, 3, 255, 84, 44, 4, 255, 77, 43, 9, 255, 76, 40, 9, 255, 78, 39, 10, 255, 83, 42, 9, 255, 124, 55, 10, 255, 136, 57, 10, 255, 79, 26, 5, 255, 90, 44, 18, 255, 104, 51, 3, 255, 89, 47, 5, 255, 88, 47, 4, 255, 91, 50, 4, 255, 95, 47, 6, 255, 90, 47, 2, 255, 92, 51, 6, 255, 83, 49, 3, 255, 86, 48, 6, 255, 93, 50, 9, 255, 85, 47, 10, 255, 90, 47, 10, 255, 93, 50, 11, 255, 91, 54, 15, 255, 91, 52, 13, 255, 91, 52, 6, 255, 93, 54, 14, 255, 94, 51, 19, 255, 98, 58, 5, 255, 100, 61, 1, 255, 102, 58, 9, 255, 107, 57, 12, 255, 113, 64, 3, 255, 117, 70, 7, 255, 115, 67, 9, 255, 114, 65, 7, 255, 115, 66, 9, 255, 112, 66, 14, 255, 109, 66, 11, 255, 100, 63, 10, 255, 101, 63, 11, 255, 105, 62, 7, 255, 109, 60, 9, 255, 109, 60, 14, 255, 101, 58, 12, 255, 100, 59, 10, 255, 108, 64, 10, 255, 105, 63, 5, 255, 101, 59, 11, 255, 103, 62, 6, 255, 103, 61, 16, 255, 101, 59, 8, 255, 97, 60, 7, 255, 93, 54, 8, 255, 118, 66, 21, 255, 128, 68, 10, 255, 123, 62, 6, 255, 119, 64, 6, 255, 110, 59, 14, 255, 110, 64, 17, 255, 122, 63, 14, 255, 110, 65, 10, 255, 102, 58, 12, 255, 105, 63, 13, 255, 112, 68, 9, 255, 117, 63, 7, 255, 109, 64, 14, 255, 108, 66, 14, 255, 109, 67, 14, 255, 108, 70, 1, 255, 115, 71, 11, 255, 118, 71, 18, 255, 110, 68, 14, 255, 111, 69, 17, 255, 109, 68, 17, 255, 109, 66, 14, 255, 114, 69, 7, 255, 117, 72, 7, 255, 115, 70, 13, 255, 112, 71, 20, 255, 109, 69, 20, 255, 108, 68, 20, 255, 108, 71, 16, 255, 107, 71, 21, 255, 110, 72, 8, 255, 110, 71, 15, 255, 111, 74, 8, 255, 116, 77, 10, 255, 113, 74, 10, 255, 115, 74, 11, 255, 114, 75, 10, 255, 111, 77, 15, 255, 108, 73, 26, 255, 105, 72, 17, 255, 105, 72, 15, 255, 106, 75, 8, 255, 113, 81, 13, 255, 120, 83, 10, 255, 120, 80, 20, 255, 125, 83, 18, 255, 130, 84, 24, 255, 136, 85, 25, 255, 138, 83, 25, 255, 134, 89, 12, 255, 131, 87, 18, 255, 133, 84, 21, 255, 134, 84, 10, 255, 137, 87, 21, 255, 142, 90, 30, 255, 139, 92, 12, 255, 136, 92, 17, 255, 136, 94, 22, 255, 139, 93, 23, 255, 147, 98, 22, 255, 152, 101, 20, 255, 150, 100, 15, 255, 148, 100, 12, 255, 145, 99, 22, 255, 143, 101, 23, 255, 143, 103, 24, 255, 146, 102, 23, 255, 150, 99, 31, 255, 159, 106, 28, 255, 152, 106, 27, 255, 147, 108, 34, 255, 153, 107, 31, 255, 156, 104, 29, 255, 155, 108, 32, 255, 157, 112, 28, 255, 160, 110, 23, 255, 158, 112, 32, 255, 155, 112, 19, 255, 161, 117, 10, 255, 167, 119, 24, 255, 170, 122, 23, 255, 175, 121, 22, 255, 182, 125, 16, 255, 182, 126, 14, 255, 172, 120, 16, 255, 161, 112, 27, 255, 157, 112, 13, 255, 159, 108, 15, 255, 158, 104, 22, 255, 154, 104, 24, 255, 158, 105, 11, 255, 155, 104, 9, 255, 148, 99, 19, 255, 148, 98, 17, 255, 155, 96, 19, 255, 159, 98, 12, 255, 158, 98, 7, 255, 158, 94, 13, 255, 165, 97, 9, 255, 171, 97, 13, 255, 161, 93, 10, 255, 151, 93, 15, 255, 155, 93, 11, 255, 158, 90, 7, 255, 158, 87, 15, 255, 158, 91, 9, 255, 152, 91, 9, 255, 143, 85, 18, 255, 164, 82, 10, 255, 170, 83, 1, 255, 171, 84, 1, 255, 175, 90, 7, 255, 158, 91, 11, 255, 163, 88, 8, 255, 171, 83, 4, 255, 170, 82, 4, 255, 171, 77, 4, 255, 167, 79, 6, 255, 166, 82, 7, 255, 170, 81, 4, 255, 174, 84, 11, 255, 173, 88, 12, 255, 171, 92, 12, 255, 169, 91, 5, 255, 175, 99, 5, 255, 178, 103, 6, 255, 186, 106, 5, 255, 192, 109, 7, 255, 194, 111, 5, 255, 194, 110, 3, 255, 196, 109, 3, 255, 197, 107, 5, 255, 193, 105, 3, 255, 190, 102, 3, 255, 187, 102, 2, 255, 186, 100, 2, 255, 177, 79, 6, 255, 129, 50, 4, 255, 119, 48, 8, 255, 114, 47, 8, 255, 121, 43, 8, 255, 111, 42, 6, 255, 106, 36, 13, 255, 107, 42, 5, 255, 101, 48, 1, 255, 111, 52, 10, 255, 122, 67, 15, 255, 112, 63, 5, 255, 103, 49, 4, 255, 105, 52, 5, 255, 113, 56, 7, 255, 115, 48, 11, 255, 109, 47, 11, 255, 113, 51, 11, 255, 111, 48, 6, 255, 112, 50, 1, 255, 119, 53, 11, 255, 132, 61, 11, 255, 133, 67, 11, 255, 139, 80, 13, 255, 148, 90, 15, 255, 157, 96, 22, 255, 158, 95, 13, 255, 161, 98, 16, 255, 163, 101, 19, 255, 163, 101, 19, 255, 160, 98, 14, 255, 157, 94, 14, 255, 160, 95, 15, 255, 161, 96, 15, 255, 161, 97, 15, 255, 159, 98, 18, 255, 159, 96, 17, 255, 159, 96, 16, 255, 159, 93, 15, 255, 163, 97, 20, 255, 163, 95, 18, 255, 157, 89, 12, 255, 127, 69, 12, 255, 107, 50, 6, 255, 109, 46, 4, 255, 112, 54, 9, 255, 110, 56, 9, 255, 100, 39, 3, 255, 95, 43, 4, 255, 101, 42, 5, 255, 98, 43, 4, 255, 2, 2, 12, 255, 1, 2, 13, 255, 1, 1, 12, 255, 1, 2, 13, 255, 1, 3, 15, 255, 1, 3, 19, 255, 1, 3, 17, 255, 1, 3, 16, 255, 2, 3, 18, 255, 5, 4, 17, 255, 2, 2, 12, 255, 0, 1, 11, 255, 0, 2, 16, 255, 0, 2, 15, 255, 1, 1, 15, 255, 2, 2, 15, 255, 2, 2, 12, 255, 3, 3, 13, 255, 2, 2, 15, 255, 0, 3, 10, 255, 0, 3, 9, 255, 2, 3, 10, 255, 0, 1, 8, 255, 2, 2, 8, 255, 1, 2, 5, 255, 0, 0, 4, 255, 1, 2, 7, 255, 1, 2, 7, 255, 1, 2, 7, 255, 0, 1, 6, 255, 0, 1, 5, 255, 1, 2, 4, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 2, 2, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 2, 255, 2, 2, 3, 255, 3, 0, 0, 255, 4, 71, 152, 255, 3, 239, 255, 255, 0, 227, 230, 255, 26, 174, 190, 255, 47, 153, 169, 255, 3, 148, 179, 255, 7, 195, 245, 255, 0, 221, 250, 255, 42, 223, 249, 255, 227, 255, 255, 255, 184, 212, 165, 255, 24, 51, 17, 255, 2, 0, 0, 255, 7, 0, 31, 255, 2, 19, 77, 255, 5, 28, 94, 255, 9, 21, 60, 255, 6, 8, 8, 255, 1, 0, 1, 255, 5, 9, 39, 255, 4, 19, 84, 255, 6, 22, 97, 255, 3, 9, 56, 255, 1, 7, 40, 255, 2, 2, 12, 255, 1, 1, 0, 255, 1, 3, 2, 255, 2, 2, 3, 255, 3, 1, 3, 255, 1, 1, 4, 255, 0, 1, 0, 255, 1, 1, 1, 255, 2, 1, 0, 255, 1, 0, 4, 255, 2, 0, 5, 255, 2, 2, 3, 255, 3, 1, 2, 255, 1, 1, 0, 255, 1, 1, 1, 255, 3, 0, 2, 255, 3, 0, 1, 255, 3, 0, 2, 255, 2, 0, 1, 255, 1, 1, 1, 255, 3, 2, 0, 255, 3, 1, 2, 255, 3, 0, 1, 255, 4, 1, 2, 255, 6, 2, 2, 255, 6, 3, 1, 255, 8, 7, 3, 255, 9, 5, 3, 255, 9, 5, 2, 255, 9, 5, 2, 255, 10, 6, 3, 255, 8, 6, 2, 255, 9, 5, 4, 255, 10, 11, 4, 255, 6, 12, 4, 255, 10, 10, 5, 255, 12, 9, 1, 255, 15, 24, 40, 255, 53, 88, 94, 255, 73, 137, 155, 255, 132, 205, 224, 255, 173, 235, 245, 255, 144, 208, 177, 255, 71, 107, 48, 255, 31, 28, 8, 255, 24, 25, 12, 255, 27, 27, 11, 255, 27, 28, 14, 255, 27, 36, 14, 255, 43, 46, 7, 255, 62, 53, 6, 255, 62, 55, 7, 255, 61, 53, 3, 255, 61, 49, 11, 255, 66, 50, 4, 255, 69, 54, 3, 255, 60, 48, 4, 255, 56, 45, 20, 255, 47, 41, 10, 255, 49, 53, 6, 255, 55, 48, 6, 255, 59, 43, 10, 255, 48, 44, 3, 255, 54, 44, 7, 255, 61, 45, 6, 255, 62, 44, 4, 255, 63, 48, 4, 255, 67, 49, 10, 255, 76, 56, 6, 255, 90, 62, 1, 255, 94, 61, 7, 255, 92, 64, 2, 255, 95, 64, 7, 255, 95, 62, 6, 255, 97, 65, 2, 255, 91, 61, 8, 255, 82, 52, 14, 255, 71, 49, 8, 255, 69, 46, 9, 255, 68, 44, 7, 255, 70, 48, 3, 255, 70, 47, 4, 255, 74, 43, 6, 255, 77, 46, 10, 255, 73, 43, 10, 255, 75, 46, 4, 255, 82, 48, 8, 255, 83, 47, 6, 255, 81, 45, 7, 255, 77, 44, 7, 255, 82, 43, 10, 255, 70, 48, 2, 255, 67, 44, 8, 255, 74, 42, 11, 255, 79, 43, 11, 255, 114, 47, 7, 255, 140, 55, 11, 255, 104, 45, 12, 255, 85, 34, 6, 255, 110, 53, 4, 255, 108, 57, 4, 255, 98, 47, 8, 255, 97, 52, 5, 255, 89, 46, 9, 255, 89, 45, 9, 255, 96, 53, 7, 255, 82, 49, 14, 255, 84, 47, 15, 255, 92, 51, 7, 255, 93, 52, 3, 255, 96, 51, 6, 255, 92, 52, 9, 255, 93, 54, 10, 255, 94, 46, 4, 255, 91, 47, 1, 255, 93, 56, 7, 255, 94, 52, 5, 255, 93, 53, 5, 255, 97, 58, 11, 255, 94, 56, 3, 255, 99, 60, 3, 255, 100, 62, 7, 255, 105, 68, 6, 255, 105, 64, 7, 255, 107, 64, 5, 255, 109, 63, 6, 255, 106, 60, 12, 255, 100, 62, 9, 255, 97, 62, 8, 255, 98, 60, 9, 255, 100, 61, 7, 255, 104, 63, 8, 255, 101, 62, 6, 255, 94, 58, 4, 255, 95, 60, 6, 255, 100, 62, 9, 255, 97, 57, 12, 255, 101, 61, 14, 255, 101, 61, 7, 255, 102, 61, 4, 255, 101, 59, 9, 255, 94, 58, 6, 255, 111, 69, 9, 255, 117, 66, 11, 255, 117, 61, 12, 255, 125, 65, 6, 255, 120, 68, 4, 255, 103, 62, 6, 255, 108, 64, 14, 255, 125, 67, 10, 255, 112, 66, 6, 255, 108, 66, 9, 255, 115, 66, 13, 255, 131, 76, 7, 255, 117, 66, 19, 255, 103, 67, 6, 255, 105, 66, 7, 255, 109, 65, 12, 255, 106, 68, 9, 255, 112, 72, 13, 255, 116, 70, 12, 255, 112, 67, 15, 255, 113, 69, 12, 255, 110, 67, 9, 255, 113, 67, 15, 255, 118, 71, 8, 255, 123, 74, 13, 255, 122, 74, 16, 255, 111, 69, 18, 255, 108, 69, 18, 255, 111, 71, 10, 255, 111, 72, 8, 255, 108, 71, 7, 255, 111, 73, 8, 255, 113, 72, 16, 255, 115, 74, 18, 255, 115, 75, 12, 255, 116, 74, 15, 255, 116, 73, 17, 255, 115, 73, 11, 255, 113, 75, 10, 255, 117, 77, 18, 255, 115, 74, 12, 255, 116, 76, 13, 255, 116, 76, 15, 255, 120, 78, 20, 255, 122, 78, 14, 255, 122, 81, 16, 255, 128, 83, 18, 255, 130, 83, 14, 255, 128, 84, 18, 255, 135, 86, 20, 255, 139, 86, 22, 255, 135, 84, 19, 255, 133, 84, 22, 255, 134, 87, 17, 255, 136, 89, 20, 255, 143, 93, 27, 255, 145, 94, 14, 255, 139, 92, 16, 255, 139, 93, 21, 255, 140, 95, 16, 255, 141, 95, 11, 255, 146, 98, 21, 255, 146, 98, 21, 255, 148, 99, 25, 255, 148, 100, 22, 255, 147, 102, 21, 255, 146, 101, 17, 255, 151, 105, 24, 255, 148, 101, 25, 255, 149, 101, 36, 255, 152, 103, 32, 255, 150, 103, 30, 255, 150, 109, 24, 255, 156, 109, 26, 255, 158, 106, 27, 255, 157, 111, 21, 255, 161, 112, 24, 255, 162, 112, 28, 255, 157, 108, 28, 255, 156, 114, 16, 255, 164, 119, 21, 255, 176, 124, 19, 255, 180, 126, 15, 255, 182, 127, 19, 255, 184, 126, 21, 255, 172, 119, 15, 255, 162, 115, 20, 255, 157, 110, 23, 255, 158, 107, 17, 255, 159, 104, 22, 255, 155, 106, 20, 255, 159, 103, 16, 255, 158, 103, 14, 255, 151, 101, 18, 255, 153, 101, 15, 255, 161, 100, 14, 255, 161, 101, 20, 255, 159, 97, 21, 255, 163, 96, 18, 255, 162, 100, 12, 255, 160, 97, 10, 255, 166, 93, 13, 255, 168, 88, 6, 255, 171, 88, 7, 255, 172, 84, 6, 255, 171, 85, 3, 255, 168, 91, 9, 255, 158, 88, 10, 255, 153, 91, 7, 255, 161, 87, 6, 255, 172, 86, 4, 255, 174, 88, 7, 255, 166, 86, 10, 255, 158, 86, 7, 255, 161, 88, 6, 255, 165, 87, 9, 255, 167, 85, 10, 255, 163, 82, 10, 255, 161, 82, 9, 255, 167, 88, 9, 255, 172, 92, 8, 255, 175, 87, 9, 255, 176, 84, 5, 255, 177, 89, 6, 255, 174, 99, 8, 255, 171, 100, 2, 255, 178, 101, 2, 255, 184, 102, 3, 255, 194, 112, 8, 255, 195, 114, 3, 255, 199, 117, 1, 255, 205, 119, 5, 255, 201, 114, 4, 255, 198, 108, 2, 255, 200, 106, 2, 255, 200, 100, 4, 255, 183, 77, 4, 255, 142, 61, 9, 255, 117, 48, 2, 255, 124, 53, 9, 255, 123, 51, 5, 255, 118, 48, 5, 255, 117, 46, 7, 255, 102, 40, 6, 255, 99, 46, 5, 255, 105, 53, 7, 255, 110, 58, 15, 255, 121, 66, 12, 255, 125, 68, 8, 255, 114, 56, 7, 255, 115, 55, 8, 255, 112, 54, 2, 255, 116, 62, 9, 255, 119, 60, 9, 255, 119, 61, 8, 255, 124, 66, 9, 255, 128, 71, 9, 255, 129, 68, 11, 255, 139, 76, 5, 255, 150, 86, 9, 255, 158, 99, 17, 255, 159, 101, 16, 255, 161, 98, 16, 255, 162, 97, 18, 255, 159, 95, 17, 255, 165, 101, 20, 255, 161, 97, 14, 255, 162, 99, 7, 255, 163, 97, 19, 255, 162, 99, 11, 255, 160, 95, 18, 255, 161, 97, 16, 255, 164, 99, 14, 255, 160, 93, 16, 255, 158, 90, 15, 255, 161, 95, 19, 255, 165, 100, 21, 255, 163, 96, 17, 255, 160, 89, 12, 255, 129, 64, 7, 255, 105, 51, 9, 255, 118, 64, 7, 255, 118, 61, 4, 255, 104, 49, 4, 255, 93, 43, 3, 255, 94, 42, 4, 255, 103, 39, 3, 255, 102, 43, 5, 255, 5, 0, 14, 255, 1, 0, 9, 255, 1, 3, 10, 255, 2, 5, 15, 255, 0, 3, 15, 255, 1, 4, 14, 255, 0, 2, 12, 255, 0, 2, 15, 255, 0, 2, 17, 255, 1, 2, 17, 255, 1, 3, 15, 255, 0, 2, 14, 255, 0, 1, 14, 255, 2, 3, 15, 255, 1, 3, 15, 255, 1, 1, 14, 255, 1, 1, 13, 255, 0, 2, 10, 255, 0, 1, 10, 255, 2, 3, 14, 255, 1, 2, 12, 255, 1, 1, 10, 255, 1, 2, 8, 255, 0, 0, 6, 255, 0, 1, 7, 255, 1, 2, 8, 255, 0, 1, 6, 255, 0, 1, 6, 255, 0, 1, 6, 255, 0, 1, 5, 255, 0, 0, 4, 255, 0, 1, 5, 255, 0, 0, 1, 255, 1, 1, 2, 255, 2, 2, 3, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 0, 255, 4, 2, 0, 255, 3, 0, 8, 255, 8, 113, 167, 255, 3, 203, 216, 255, 30, 151, 185, 255, 53, 150, 172, 255, 11, 154, 175, 255, 2, 162, 210, 255, 0, 217, 251, 255, 53, 241, 249, 255, 233, 255, 255, 255, 187, 203, 149, 255, 61, 40, 8, 255, 9, 0, 5, 255, 3, 5, 83, 255, 3, 59, 205, 255, 34, 56, 109, 255, 24, 34, 46, 255, 4, 1, 2, 255, 2, 6, 19, 255, 6, 18, 71, 255, 11, 18, 98, 255, 8, 16, 75, 255, 2, 7, 26, 255, 0, 0, 2, 255, 2, 1, 0, 255, 2, 0, 0, 255, 0, 0, 1, 255, 0, 1, 1, 255, 0, 1, 3, 255, 0, 2, 1, 255, 0, 0, 0, 255, 1, 1, 0, 255, 0, 0, 0, 255, 0, 1, 0, 255, 1, 1, 1, 255, 2, 1, 2, 255, 3, 0, 2, 255, 5, 2, 2, 255, 1, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 2, 1, 1, 255, 2, 1, 1, 255, 1, 1, 1, 255, 1, 0, 0, 255, 1, 1, 0, 255, 5, 2, 2, 255, 4, 1, 2, 255, 4, 2, 1, 255, 8, 4, 2, 255, 7, 3, 0, 255, 9, 5, 2, 255, 8, 3, 0, 255, 7, 2, 0, 255, 12, 8, 4, 255, 8, 6, 2, 255, 8, 9, 5, 255, 11, 10, 11, 255, 10, 11, 5, 255, 10, 10, 5, 255, 17, 10, 0, 255, 9, 34, 49, 255, 89, 151, 159, 255, 114, 188, 175, 255, 110, 195, 190, 255, 222, 251, 250, 255, 255, 255, 255, 255, 189, 215, 136, 255, 33, 36, 2, 255, 30, 26, 19, 255, 27, 28, 15, 255, 30, 28, 9, 255, 33, 33, 8, 255, 32, 36, 5, 255, 46, 44, 8, 255, 62, 50, 11, 255, 58, 48, 10, 255, 51, 48, 7, 255, 62, 49, 6, 255, 65, 52, 4, 255, 63, 49, 4, 255, 57, 43, 7, 255, 48, 39, 9, 255, 46, 39, 3, 255, 51, 46, 3, 255, 53, 43, 9, 255, 53, 42, 7, 255, 52, 42, 9, 255, 58, 45, 10, 255, 59, 44, 7, 255, 58, 44, 3, 255, 69, 46, 10, 255, 75, 54, 10, 255, 77, 54, 4, 255, 79, 53, 4, 255, 91, 61, 9, 255, 94, 60, 7, 255, 99, 64, 3, 255, 99, 68, 1, 255, 94, 65, 6, 255, 91, 58, 9, 255, 81, 50, 8, 255, 74, 52, 8, 255, 65, 45, 4, 255, 70, 48, 9, 255, 71, 53, 4, 255, 75, 48, 1, 255, 76, 46, 5, 255, 79, 45, 7, 255, 76, 46, 6, 255, 76, 44, 6, 255, 81, 45, 7, 255, 80, 45, 2, 255, 74, 47, 2, 255, 73, 49, 5, 255, 80, 41, 8, 255, 74, 46, 2, 255, 76, 46, 5, 255, 76, 43, 10, 255, 75, 40, 12, 255, 112, 53, 5, 255, 144, 59, 2, 255, 144, 59, 22, 255, 106, 39, 14, 255, 87, 32, 3, 255, 106, 46, 8, 255, 114, 54, 6, 255, 112, 50, 8, 255, 94, 50, 8, 255, 92, 50, 8, 255, 91, 48, 9, 255, 83, 47, 3, 255, 88, 51, 7, 255, 93, 52, 10, 255, 100, 56, 10, 255, 94, 48, 7, 255, 95, 47, 12, 255, 96, 51, 13, 255, 95, 50, 6, 255, 93, 47, 11, 255, 89, 52, 4, 255, 97, 55, 6, 255, 95, 55, 9, 255, 90, 56, 9, 255, 92, 57, 10, 255, 96, 57, 8, 255, 97, 56, 13, 255, 99, 59, 13, 255, 99, 61, 14, 255, 100, 62, 9, 255, 99, 60, 8, 255, 98, 60, 12, 255, 101, 58, 7, 255, 102, 58, 6, 255, 98, 58, 7, 255, 95, 59, 10, 255, 95, 60, 8, 255, 95, 60, 5, 255, 98, 59, 6, 255, 104, 61, 10, 255, 102, 61, 8, 255, 100, 59, 11, 255, 97, 58, 7, 255, 99, 59, 9, 255, 100, 60, 8, 255, 103, 62, 15, 255, 125, 66, 7, 255, 125, 67, 2, 255, 113, 60, 14, 255, 107, 59, 14, 255, 106, 59, 4, 255, 107, 62, 15, 255, 110, 65, 13, 255, 111, 61, 11, 255, 104, 62, 13, 255, 98, 59, 10, 255, 106, 64, 10, 255, 109, 63, 12, 255, 106, 63, 14, 255, 99, 64, 21, 255, 105, 68, 8, 255, 102, 68, 17, 255, 103, 67, 16, 255, 110, 67, 21, 255, 114, 68, 17, 255, 115, 72, 11, 255, 111, 71, 12, 255, 109, 74, 9, 255, 111, 71, 14, 255, 112, 72, 17, 255, 114, 71, 12, 255, 122, 75, 9, 255, 123, 75, 13, 255, 121, 69, 10, 255, 112, 70, 14, 255, 109, 73, 14, 255, 112, 70, 12, 255, 108, 69, 17, 255, 109, 69, 16, 255, 114, 73, 13, 255, 111, 72, 16, 255, 112, 72, 18, 255, 118, 74, 16, 255, 120, 74, 15, 255, 119, 76, 8, 255, 117, 72, 14, 255, 113, 74, 13, 255, 110, 77, 16, 255, 114, 77, 21, 255, 115, 76, 13, 255, 119, 78, 16, 255, 120, 79, 13, 255, 123, 79, 17, 255, 124, 84, 18, 255, 118, 86, 9, 255, 120, 86, 15, 255, 134, 86, 24, 255, 143, 89, 16, 255, 138, 85, 6, 255, 140, 84, 22, 255, 137, 89, 26, 255, 137, 90, 21, 255, 141, 91, 18, 255, 151, 96, 13, 255, 144, 94, 22, 255, 144, 97, 17, 255, 143, 97, 10, 255, 144, 93, 22, 255, 145, 93, 36, 255, 144, 97, 21, 255, 146, 97, 24, 255, 144, 99, 22, 255, 147, 102, 19, 255, 151, 103, 19, 255, 151, 104, 24, 255, 150, 103, 18, 255, 148, 104, 20, 255, 146, 106, 19, 255, 149, 103, 26, 255, 152, 105, 24, 255, 153, 110, 16, 255, 157, 111, 18, 255, 160, 107, 30, 255, 163, 110, 28, 255, 164, 111, 26, 255, 160, 109, 27, 255, 154, 110, 19, 255, 161, 117, 14, 255, 173, 120, 18, 255, 186, 127, 16, 255, 187, 128, 14, 255, 183, 123, 9, 255, 174, 118, 11, 255, 164, 116, 16, 255, 159, 114, 16, 255, 159, 107, 24, 255, 160, 110, 16, 255, 158, 106, 12, 255, 161, 106, 8, 255, 161, 105, 12, 255, 156, 104, 13, 255, 153, 101, 19, 255, 158, 102, 12, 255, 161, 99, 23, 255, 164, 96, 22, 255, 166, 98, 8, 255, 163, 100, 7, 255, 161, 97, 9, 255, 167, 95, 17, 255, 172, 93, 11, 255, 171, 92, 11, 255, 165, 91, 3, 255, 162, 89, 8, 255, 157, 88, 9, 255, 148, 88, 10, 255, 146, 86, 5, 255, 147, 88, 11, 255, 160, 89, 9, 255, 165, 89, 7, 255, 152, 90, 8, 255, 159, 88, 5, 255, 161, 86, 13, 255, 159, 88, 11, 255, 165, 93, 14, 255, 170, 97, 15, 255, 173, 96, 7, 255, 171, 93, 10, 255, 167, 93, 8, 255, 169, 91, 5, 255, 171, 84, 6, 255, 173, 85, 2, 255, 181, 98, 5, 255, 179, 95, 3, 255, 181, 90, 1, 255, 182, 89, 0, 255, 192, 103, 1, 255, 200, 114, 2, 255, 199, 115, 2, 255, 200, 118, 5, 255, 207, 117, 1, 255, 204, 96, 0, 255, 188, 87, 2, 255, 159, 66, 7, 255, 139, 51, 7, 255, 135, 62, 7, 255, 121, 57, 4, 255, 119, 53, 0, 255, 120, 48, 2, 255, 113, 51, 7, 255, 105, 41, 6, 255, 96, 44, 5, 255, 98, 50, 5, 255, 103, 50, 8, 255, 101, 52, 9, 255, 108, 54, 5, 255, 116, 53, 14, 255, 117, 50, 11, 255, 116, 51, 3, 255, 120, 63, 8, 255, 122, 72, 7, 255, 127, 71, 4, 255, 133, 75, 8, 255, 141, 83, 15, 255, 151, 89, 15, 255, 153, 87, 13, 255, 155, 96, 9, 255, 163, 100, 5, 255, 163, 99, 14, 255, 161, 100, 18, 255, 156, 98, 13, 255, 160, 99, 15, 255, 164, 100, 15, 255, 161, 98, 15, 255, 157, 94, 13, 255, 158, 94, 14, 255, 164, 95, 22, 255, 165, 94, 4, 255, 163, 91, 12, 255, 158, 92, 13, 255, 155, 88, 5, 255, 157, 90, 13, 255, 154, 88, 18, 255, 157, 92, 10, 255, 159, 94, 8, 255, 163, 96, 17, 255, 151, 83, 12, 255, 135, 73, 7, 255, 135, 78, 11, 255, 144, 87, 17, 255, 133, 73, 4, 255, 112, 57, 0, 255, 93, 41, 2, 255, 88, 35, 6, 255, 86, 36, 7, 255, 97, 43, 4, 255, 1, 2, 14, 255, 1, 2, 11, 255, 0, 3, 12, 255, 3, 3, 17, 255, 2, 1, 15, 255, 3, 2, 14, 255, 2, 3, 15, 255, 1, 3, 16, 255, 1, 3, 16, 255, 2, 2, 16, 255, 2, 2, 13, 255, 2, 2, 12, 255, 0, 3, 11, 255, 3, 3, 11, 255, 3, 3, 12, 255, 2, 2, 12, 255, 4, 4, 14, 255, 1, 3, 12, 255, 0, 4, 11, 255, 2, 2, 13, 255, 1, 1, 11, 255, 1, 1, 8, 255, 1, 2, 7, 255, 0, 1, 6, 255, 1, 2, 7, 255, 2, 3, 8, 255, 1, 2, 7, 255, 1, 2, 7, 255, 1, 2, 7, 255, 2, 3, 7, 255, 1, 2, 6, 255, 1, 2, 6, 255, 0, 0, 4, 255, 0, 0, 2, 255, 1, 1, 3, 255, 1, 1, 3, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 2, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 2, 1, 3, 255, 2, 0, 0, 255, 2, 51, 86, 255, 23, 133, 181, 255, 48, 159, 186, 255, 16, 154, 182, 255, 0, 163, 210, 255, 0, 214, 247, 255, 100, 250, 252, 255, 255, 255, 255, 255, 145, 186, 144, 255, 19, 35, 13, 255, 15, 0, 30, 255, 3, 0, 27, 255, 4, 91, 191, 255, 7, 81, 157, 255, 25, 9, 4, 255, 9, 2, 0, 255, 0, 9, 47, 255, 7, 24, 109, 255, 4, 15, 80, 255, 1, 8, 32, 255, 1, 3, 2, 255, 2, 0, 0, 255, 3, 0, 4, 255, 1, 1, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 0, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 2, 0, 1, 255, 2, 0, 1, 255, 2, 1, 1, 255, 2, 1, 1, 255, 4, 0, 1, 255, 4, 2, 3, 255, 2, 2, 1, 255, 3, 2, 0, 255, 8, 4, 1, 255, 4, 2, 1, 255, 7, 4, 2, 255, 10, 6, 3, 255, 8, 5, 1, 255, 10, 8, 1, 255, 14, 13, 6, 255, 13, 10, 6, 255, 11, 13, 12, 255, 18, 25, 16, 255, 18, 41, 43, 255, 37, 111, 120, 255, 175, 229, 192, 255, 173, 206, 190, 255, 161, 225, 228, 255, 240, 255, 255, 255, 254, 255, 245, 255, 103, 138, 74, 255, 16, 26, 12, 255, 35, 34, 13, 255, 31, 29, 14, 255, 26, 30, 10, 255, 26, 27, 12, 255, 43, 38, 12, 255, 48, 42, 6, 255, 49, 42, 8, 255, 57, 48, 7, 255, 60, 42, 6, 255, 65, 47, 2, 255, 57, 45, 1, 255, 53, 37, 1, 255, 59, 40, 5, 255, 51, 38, 2, 255, 41, 39, 6, 255, 45, 40, 3, 255, 46, 40, 8, 255, 47, 45, 4, 255, 54, 43, 5, 255, 55, 42, 4, 255, 55, 46, 4, 255, 65, 49, 4, 255, 67, 48, 6, 255, 79, 53, 9, 255, 76, 54, 3, 255, 81, 56, 8, 255, 88, 63, 8, 255, 98, 63, 10, 255, 101, 62, 2, 255, 100, 67, 1, 255, 98, 64, 2, 255, 96, 60, 6, 255, 88, 59, 8, 255, 75, 52, 5, 255, 69, 47, 5, 255, 76, 49, 10, 255, 76, 47, 7, 255, 83, 48, 5, 255, 78, 48, 6, 255, 80, 47, 5, 255, 80, 46, 5, 255, 71, 44, 12, 255, 64, 46, 9, 255, 74, 50, 3, 255, 81, 47, 5, 255, 77, 41, 10, 255, 82, 40, 6, 255, 76, 42, 7, 255, 80, 46, 3, 255, 79, 46, 4, 255, 79, 43, 6, 255, 102, 51, 5, 255, 134, 56, 2, 255, 149, 63, 7, 255, 153, 67, 3, 255, 116, 49, 7, 255, 79, 26, 13, 255, 88, 39, 12, 255, 114, 46, 3, 255, 127, 52, 9, 255, 113, 56, 6, 255, 105, 58, 8, 255, 98, 48, 12, 255, 103, 50, 8, 255, 101, 55, 4, 255, 105, 57, 5, 255, 101, 57, 6, 255, 102, 55, 1, 255, 97, 52, 4, 255, 90, 49, 8, 255, 90, 50, 11, 255, 90, 51, 14, 255, 93, 49, 18, 255, 95, 52, 12, 255, 95, 51, 4, 255, 96, 55, 12, 255, 94, 57, 6, 255, 97, 59, 9, 255, 104, 55, 9, 255, 98, 57, 8, 255, 102, 57, 9, 255, 107, 54, 13, 255, 103, 55, 13, 255, 102, 59, 7, 255, 100, 60, 11, 255, 96, 58, 12, 255, 96, 58, 7, 255, 97, 58, 6, 255, 101, 58, 14, 255, 104, 59, 11, 255, 111, 63, 5, 255, 114, 62, 6, 255, 107, 66, 6, 255, 106, 65, 6, 255, 106, 65, 5, 255, 103, 61, 4, 255, 114, 61, 6, 255, 127, 68, 4, 255, 116, 64, 2, 255, 108, 61, 9, 255, 107, 64, 7, 255, 107, 65, 5, 255, 105, 66, 12, 255, 104, 61, 11, 255, 107, 59, 13, 255, 104, 61, 19, 255, 104, 63, 20, 255, 107, 67, 11, 255, 106, 66, 5, 255, 102, 61, 8, 255, 111, 67, 12, 255, 112, 67, 13, 255, 105, 67, 16, 255, 108, 66, 12, 255, 113, 67, 9, 255, 109, 71, 7, 255, 111, 72, 6, 255, 117, 72, 11, 255, 109, 70, 10, 255, 112, 73, 18, 255, 110, 70, 12, 255, 116, 71, 11, 255, 122, 76, 8, 255, 123, 73, 7, 255, 121, 71, 15, 255, 111, 69, 15, 255, 111, 72, 12, 255, 117, 71, 12, 255, 114, 71, 15, 255, 116, 71, 23, 255, 112, 72, 16, 255, 115, 73, 9, 255, 121, 77, 11, 255, 117, 76, 19, 255, 114, 77, 15, 255, 115, 75, 10, 255, 113, 74, 16, 255, 110, 76, 11, 255, 109, 78, 14, 255, 109, 75, 27, 255, 117, 77, 14, 255, 115, 82, 9, 255, 118, 84, 11, 255, 125, 82, 15, 255, 128, 81, 18, 255, 129, 84, 18, 255, 132, 88, 18, 255, 137, 83, 15, 255, 139, 86, 16, 255, 135, 87, 17, 255, 136, 85, 19, 255, 136, 88, 20, 255, 140, 93, 14, 255, 141, 92, 27, 255, 145, 92, 19, 255, 148, 92, 17, 255, 148, 100, 14, 255, 143, 99, 7, 255, 143, 97, 12, 255, 149, 101, 23, 255, 147, 97, 20, 255, 149, 96, 26, 255, 146, 99, 29, 255, 147, 100, 18, 255, 151, 99, 24, 255, 150, 103, 22, 255, 149, 102, 25, 255, 150, 102, 25, 255, 149, 107, 25, 255, 147, 104, 26, 255, 151, 103, 26, 255, 158, 108, 27, 255, 158, 108, 23, 255, 164, 105, 29, 255, 175, 113, 23, 255, 178, 116, 21, 255, 175, 115, 26, 255, 166, 111, 16, 255, 170, 116, 7, 255, 174, 112, 9, 255, 178, 113, 10, 255, 188, 125, 18, 255, 189, 125, 21, 255, 178, 117, 13, 255, 166, 115, 23, 255, 160, 114, 16, 255, 162, 110, 11, 255, 164, 108, 18, 255, 167, 107, 22, 255, 167, 106, 18, 255, 162, 105, 6, 255, 161, 107, 16, 255, 155, 103, 23, 255, 161, 102, 14, 255, 164, 103, 6, 255, 165, 102, 7, 255, 164, 100, 11, 255, 166, 101, 18, 255, 166, 98, 18, 255, 165, 95, 9, 255, 167, 98, 5, 255, 164, 96, 9, 255, 162, 93, 8, 255, 152, 89, 3, 255, 146, 88, 9, 255, 151, 89, 16, 255, 154, 91, 12, 255, 154, 89, 10, 255, 167, 89, 8, 255, 172, 90, 8, 255, 153, 92, 6, 255, 158, 93, 3, 255, 154, 89, 6, 255, 154, 89, 14, 255, 164, 94, 7, 255, 172, 96, 5, 255, 175, 95, 8, 255, 170, 96, 7, 255, 169, 96, 16, 255, 175, 91, 8, 255, 175, 89, 4, 255, 180, 91, 4, 255, 182, 88, 1, 255, 184, 86, 2, 255, 186, 81, 6, 255, 188, 84, 10, 255, 184, 86, 2, 255, 194, 100, 3, 255, 203, 113, 5, 255, 205, 114, 3, 255, 176, 84, 10, 255, 142, 54, 9, 255, 127, 51, 6, 255, 118, 50, 9, 255, 133, 52, 2, 255, 132, 56, 0, 255, 124, 53, 3, 255, 125, 51, 9, 255, 111, 46, 4, 255, 111, 47, 6, 255, 106, 44, 6, 255, 100, 48, 3, 255, 103, 54, 4, 255, 100, 48, 6, 255, 108, 51, 14, 255, 110, 52, 6, 255, 115, 57, 7, 255, 128, 69, 10, 255, 132, 73, 4, 255, 140, 79, 17, 255, 144, 83, 15, 255, 150, 88, 6, 255, 158, 94, 10, 255, 159, 97, 11, 255, 161, 94, 7, 255, 166, 92, 6, 255, 167, 98, 8, 255, 163, 98, 12, 255, 165, 101, 12, 255, 164, 99, 9, 255, 165, 100, 11, 255, 165, 99, 15, 255, 164, 98, 18, 255, 162, 96, 9, 255, 159, 94, 16, 255, 155, 93, 17, 255, 159, 93, 16, 255, 162, 91, 9, 255, 161, 89, 6, 255, 150, 80, 7, 255, 144, 77, 9, 255, 149, 86, 10, 255, 154, 92, 18, 255, 156, 91, 11, 255, 165, 97, 14, 255, 162, 92, 19, 255, 158, 89, 13, 255, 152, 85, 13, 255, 152, 86, 8, 255, 153, 86, 9, 255, 147, 78, 16, 255, 136, 73, 16, 255, 121, 62, 7, 255, 89, 37, 2, 255, 56, 26, 5, 255, 46, 24, 5, 255, 0, 3, 12, 255, 1, 3, 15, 255, 3, 1, 16, 255, 2, 2, 16, 255, 0, 1, 15, 255, 1, 6, 22, 255, 2, 5, 21, 255, 2, 3, 17, 255, 3, 3, 15, 255, 3, 3, 9, 255, 3, 2, 7, 255, 2, 1, 9, 255, 2, 1, 10, 255, 2, 3, 7, 255, 1, 2, 7, 255, 1, 1, 7, 255, 3, 3, 10, 255, 3, 3, 12, 255, 3, 3, 12, 255, 2, 2, 10, 255, 1, 1, 9, 255, 1, 1, 8, 255, 1, 2, 7, 255, 1, 2, 7, 255, 0, 1, 6, 255, 0, 1, 6, 255, 0, 1, 7, 255, 1, 2, 7, 255, 0, 0, 5, 255, 0, 2, 7, 255, 0, 2, 7, 255, 0, 0, 5, 255, 2, 0, 6, 255, 1, 0, 4, 255, 0, 0, 2, 255, 0, 0, 2, 255, 1, 1, 3, 255, 1, 1, 2, 255, 2, 2, 3, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 2, 1, 1, 255, 1, 0, 0, 255, 7, 46, 104, 255, 10, 142, 178, 255, 0, 155, 184, 255, 41, 164, 227, 255, 71, 219, 248, 255, 116, 255, 255, 255, 250, 255, 253, 255, 122, 176, 144, 255, 0, 25, 50, 255, 6, 12, 65, 255, 1, 5, 4, 255, 4, 32, 89, 255, 2, 115, 229, 255, 7, 22, 33, 255, 3, 0, 0, 255, 1, 12, 91, 255, 5, 21, 114, 255, 4, 10, 46, 255, 1, 4, 15, 255, 0, 2, 0, 255, 1, 0, 0, 255, 2, 0, 1, 255, 2, 3, 0, 255, 1, 1, 2, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 2, 0, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 2, 0, 1, 255, 3, 1, 2, 255, 3, 1, 2, 255, 3, 1, 2, 255, 3, 1, 2, 255, 2, 0, 1, 255, 2, 0, 1, 255, 3, 1, 2, 255, 5, 1, 2, 255, 3, 1, 2, 255, 2, 2, 2, 255, 4, 3, 1, 255, 3, 2, 0, 255, 8, 3, 4, 255, 12, 6, 7, 255, 9, 5, 2, 255, 12, 10, 3, 255, 12, 12, 2, 255, 15, 14, 5, 255, 18, 24, 20, 255, 22, 41, 30, 255, 38, 69, 54, 255, 41, 106, 98, 255, 57, 135, 126, 255, 107, 177, 169, 255, 151, 208, 198, 255, 187, 240, 238, 255, 205, 254, 251, 255, 160, 221, 188, 255, 66, 117, 69, 255, 30, 37, 13, 255, 30, 32, 16, 255, 32, 29, 11, 255, 35, 33, 11, 255, 31, 32, 5, 255, 37, 39, 9, 255, 39, 41, 7, 255, 52, 44, 6, 255, 59, 44, 3, 255, 62, 41, 5, 255, 70, 41, 4, 255, 61, 44, 5, 255, 44, 36, 4, 255, 47, 36, 6, 255, 47, 33, 5, 255, 36, 35, 5, 255, 39, 35, 3, 255, 50, 38, 8, 255, 49, 40, 6, 255, 59, 39, 8, 255, 60, 39, 7, 255, 62, 50, 5, 255, 69, 57, 4, 255, 70, 53, 6, 255, 67, 51, 6, 255, 77, 58, 4, 255, 80, 56, 13, 255, 85, 60, 6, 255, 91, 62, 6, 255, 100, 57, 6, 255, 102, 60, 4, 255, 102, 64, 3, 255, 99, 64, 9, 255, 89, 56, 12, 255, 76, 52, 2, 255, 74, 53, 3, 255, 76, 47, 6, 255, 81, 45, 7, 255, 85, 47, 8, 255, 71, 45, 7, 255, 71, 44, 6, 255, 75, 43, 3, 255, 69, 44, 6, 255, 68, 43, 4, 255, 73, 46, 8, 255, 73, 45, 12, 255, 69, 37, 10, 255, 83, 42, 11, 255, 75, 42, 17, 255, 74, 45, 18, 255, 71, 43, 8, 255, 76, 45, 6, 255, 80, 45, 6, 255, 109, 49, 5, 255, 136, 55, 5, 255, 153, 65, 5, 255, 167, 69, 2, 255, 156, 64, 3, 255, 128, 63, 8, 255, 116, 57, 7, 255, 116, 53, 8, 255, 114, 48, 9, 255, 114, 56, 4, 255, 124, 56, 9, 255, 124, 58, 10, 255, 121, 56, 4, 255, 127, 53, 6, 255, 125, 53, 7, 255, 119, 54, 6, 255, 124, 57, 10, 255, 125, 56, 8, 255, 118, 56, 5, 255, 108, 54, 11, 255, 96, 54, 15, 255, 96, 54, 11, 255, 97, 52, 4, 255, 100, 56, 7, 255, 95, 55, 6, 255, 96, 55, 14, 255, 99, 56, 6, 255, 98, 59, 5, 255, 101, 55, 10, 255, 107, 52, 10, 255, 105, 56, 13, 255, 99, 58, 7, 255, 100, 60, 5, 255, 104, 60, 12, 255, 109, 60, 12, 255, 108, 61, 3, 255, 103, 55, 5, 255, 100, 57, 12, 255, 103, 62, 9, 255, 102, 61, 1, 255, 103, 69, 8, 255, 110, 64, 10, 255, 109, 61, 9, 255, 108, 64, 12, 255, 115, 61, 12, 255, 116, 64, 8, 255, 111, 63, 9, 255, 108, 62, 10, 255, 109, 62, 13, 255, 108, 64, 12, 255, 104, 65, 7, 255, 105, 64, 9, 255, 105, 64, 14, 255, 104, 63, 16, 255, 106, 66, 14, 255, 102, 61, 7, 255, 107, 67, 10, 255, 108, 72, 9, 255, 108, 66, 17, 255, 107, 59, 26, 255, 107, 64, 11, 255, 110, 69, 17, 255, 111, 67, 10, 255, 112, 70, 18, 255, 117, 72, 9, 255, 121, 71, 8, 255, 116, 68, 17, 255, 109, 70, 16, 255, 111, 67, 10, 255, 118, 70, 6, 255, 119, 76, 8, 255, 117, 76, 9, 255, 115, 76, 15, 255, 117, 74, 15, 255, 116, 74, 13, 255, 111, 73, 11, 255, 112, 72, 10, 255, 115, 75, 12, 255, 119, 73, 14, 255, 123, 74, 12, 255, 121, 76, 11, 255, 121, 79, 10, 255, 118, 83, 9, 255, 112, 73, 13, 255, 117, 73, 17, 255, 114, 79, 14, 255, 117, 77, 9, 255, 118, 74, 15, 255, 117, 78, 14, 255, 123, 75, 21, 255, 122, 80, 18, 255, 120, 85, 19, 255, 127, 83, 16, 255, 131, 83, 16, 255, 133, 89, 14, 255, 130, 88, 12, 255, 154, 88, 22, 255, 164, 94, 20, 255, 143, 88, 16, 255, 138, 85, 24, 255, 140, 90, 20, 255, 149, 91, 28, 255, 151, 94, 19, 255, 148, 96, 18, 255, 147, 97, 15, 255, 145, 96, 12, 255, 148, 96, 17, 255, 151, 100, 23, 255, 144, 99, 16, 255, 148, 97, 17, 255, 148, 98, 23, 255, 150, 99, 22, 255, 155, 102, 24, 255, 151, 105, 31, 255, 148, 105, 22, 255, 149, 101, 18, 255, 151, 102, 27, 255, 151, 108, 23, 255, 146, 107, 13, 255, 156, 106, 36, 255, 158, 104, 31, 255, 159, 111, 19, 255, 174, 111, 16, 255, 180, 113, 23, 255, 180, 113, 26, 255, 174, 110, 20, 255, 176, 111, 11, 255, 174, 102, 12, 255, 175, 98, 28, 255, 185, 119, 21, 255, 188, 126, 11, 255, 182, 122, 5, 255, 169, 117, 19, 255, 161, 111, 30, 255, 164, 109, 19, 255, 162, 109, 16, 255, 162, 109, 6, 255, 167, 110, 11, 255, 165, 107, 11, 255, 167, 107, 19, 255, 164, 103, 21, 255, 162, 102, 4, 255, 167, 105, 9, 255, 168, 101, 26, 255, 166, 97, 23, 255, 165, 99, 9, 255, 166, 99, 11, 255, 165, 98, 13, 255, 163, 96, 10, 255, 158, 93, 7, 255, 152, 96, 5, 255, 152, 95, 11, 255, 163, 93, 5, 255, 173, 92, 3, 255, 173, 86, 1, 255, 172, 84, 5, 255, 176, 82, 4, 255, 177, 88, 4, 255, 163, 92, 9, 255, 159, 90, 10, 255, 158, 90, 9, 255, 167, 95, 13, 255, 174, 96, 14, 255, 174, 94, 8, 255, 172, 96, 10, 255, 172, 97, 15, 255, 173, 100, 5, 255, 180, 99, 8, 255, 180, 93, 4, 255, 182, 87, 1, 255, 180, 83, 3, 255, 181, 85, 5, 255, 187, 93, 5, 255, 181, 89, 5, 255, 183, 78, 9, 255, 188, 89, 3, 255, 204, 99, 4, 255, 181, 79, 2, 255, 128, 54, 6, 255, 124, 60, 3, 255, 124, 58, 4, 255, 127, 56, 6, 255, 130, 58, 1, 255, 122, 54, 3, 255, 125, 54, 6, 255, 123, 53, 10, 255, 119, 51, 5, 255, 111, 46, 6, 255, 99, 46, 1, 255, 100, 51, 2, 255, 103, 55, 8, 255, 102, 49, 6, 255, 110, 50, 6, 255, 111, 52, 4, 255, 114, 54, 10, 255, 118, 58, 8, 255, 138, 78, 14, 255, 148, 85, 13, 255, 151, 89, 9, 255, 155, 95, 13, 255, 149, 95, 8, 255, 152, 93, 4, 255, 157, 95, 7, 255, 161, 100, 10, 255, 166, 100, 13, 255, 163, 96, 10, 255, 166, 98, 5, 255, 167, 97, 9, 255, 169, 98, 7, 255, 165, 96, 8, 255, 160, 94, 15, 255, 162, 91, 14, 255, 163, 91, 19, 255, 155, 93, 14, 255, 151, 91, 13, 255, 156, 91, 13, 255, 163, 95, 16, 255, 162, 91, 13, 255, 147, 85, 10, 255, 141, 79, 18, 255, 139, 77, 13, 255, 146, 82, 0, 255, 160, 91, 13, 255, 159, 91, 14, 255, 159, 90, 5, 255, 154, 85, 7, 255, 150, 81, 14, 255, 147, 80, 3, 255, 146, 79, 10, 255, 141, 75, 18, 255, 140, 76, 12, 255, 118, 59, 5, 255, 67, 28, 3, 255, 24, 8, 7, 255, 2, 2, 9, 255, 2, 0, 14, 255, 3, 0, 17, 255, 3, 5, 17, 255, 1, 5, 15, 255, 2, 3, 21, 255, 1, 2, 22, 255, 1, 4, 17, 255, 1, 4, 12, 255, 1, 3, 5, 255, 0, 2, 2, 255, 2, 1, 6, 255, 2, 1, 9, 255, 1, 2, 9, 255, 1, 1, 8, 255, 1, 2, 7, 255, 1, 2, 7, 255, 1, 2, 6, 255, 2, 3, 6, 255, 2, 3, 8, 255, 1, 2, 7, 255, 1, 2, 7, 255, 2, 3, 8, 255, 1, 2, 7, 255, 0, 1, 5, 255, 0, 1, 5, 255, 2, 3, 8, 255, 4, 5, 10, 255, 1, 2, 7, 255, 1, 2, 7, 255, 1, 2, 7, 255, 0, 1, 6, 255, 2, 2, 7, 255, 2, 1, 6, 255, 1, 0, 4, 255, 0, 0, 3, 255, 1, 1, 4, 255, 0, 1, 2, 255, 2, 2, 4, 255, 1, 1, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 2, 255, 2, 0, 2, 255, 2, 1, 5, 255, 2, 76, 112, 255, 4, 148, 189, 255, 5, 172, 222, 255, 31, 220, 255, 255, 184, 255, 247, 255, 255, 255, 254, 255, 95, 178, 179, 255, 0, 30, 85, 255, 8, 16, 54, 255, 5, 8, 1, 255, 3, 0, 18, 255, 7, 105, 217, 255, 4, 79, 128, 255, 3, 0, 0, 255, 1, 5, 62, 255, 2, 27, 196, 255, 3, 12, 38, 255, 1, 0, 0, 255, 1, 0, 2, 255, 1, 0, 4, 255, 1, 0, 3, 255, 1, 0, 0, 255, 0, 0, 2, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 2, 0, 1, 255, 2, 0, 0, 255, 2, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 1, 1, 255, 2, 0, 1, 255, 3, 1, 2, 255, 3, 1, 2, 255, 4, 1, 2, 255, 3, 1, 1, 255, 3, 1, 1, 255, 2, 0, 0, 255, 3, 1, 1, 255, 4, 1, 2, 255, 4, 3, 2, 255, 4, 5, 4, 255, 4, 4, 2, 255, 5, 4, 1, 255, 13, 4, 0, 255, 15, 6, 1, 255, 15, 11, 4, 255, 14, 14, 5, 255, 17, 19, 10, 255, 29, 31, 24, 255, 38, 55, 57, 255, 60, 81, 69, 255, 83, 104, 92, 255, 94, 134, 127, 255, 92, 152, 139, 255, 85, 166, 166, 255, 124, 204, 208, 255, 160, 234, 228, 255, 174, 233, 222, 255, 126, 196, 154, 255, 62, 116, 75, 255, 30, 42, 33, 255, 28, 32, 12, 255, 29, 31, 8, 255, 40, 33, 10, 255, 40, 32, 10, 255, 36, 34, 7, 255, 42, 36, 6, 255, 50, 40, 6, 255, 49, 44, 4, 255, 56, 44, 5, 255, 61, 36, 5, 255, 53, 35, 9, 255, 41, 33, 5, 255, 37, 31, 9, 255, 39, 36, 10, 255, 44, 37, 10, 255, 45, 36, 7, 255, 48, 37, 3, 255, 45, 41, 4, 255, 57, 40, 4, 255, 63, 43, 4, 255, 64, 45, 7, 255, 71, 53, 2, 255, 72, 49, 14, 255, 72, 50, 8, 255, 80, 57, 4, 255, 84, 53, 11, 255, 89, 58, 1, 255, 90, 60, 1, 255, 103, 61, 10, 255, 105, 62, 6, 255, 99, 66, 0, 255, 98, 66, 3, 255, 91, 52, 6, 255, 83, 53, 3, 255, 75, 53, 3, 255, 74, 50, 7, 255, 79, 48, 9, 255, 79, 45, 7, 255, 70, 42, 3, 255, 67, 46, 5, 255, 67, 43, 4, 255, 72, 42, 4, 255, 79, 41, 5, 255, 80, 42, 6, 255, 73, 42, 8, 255, 69, 42, 12, 255, 78, 44, 11, 255, 80, 43, 12, 255, 77, 45, 13, 255, 73, 45, 8, 255, 78, 47, 6, 255, 77, 44, 6, 255, 89, 47, 12, 255, 115, 56, 8, 255, 129, 57, 8, 255, 135, 57, 8, 255, 145, 65, 8, 255, 153, 63, 5, 255, 160, 71, 6, 255, 159, 68, 4, 255, 148, 67, 9, 255, 147, 66, 8, 255, 152, 64, 1, 255, 156, 68, 6, 255, 148, 71, 14, 255, 155, 70, 16, 255, 151, 66, 3, 255, 136, 62, 9, 255, 137, 59, 9, 255, 127, 50, 3, 255, 116, 50, 10, 255, 115, 51, 14, 255, 120, 54, 8, 255, 126, 56, 8, 255, 121, 60, 9, 255, 116, 61, 15, 255, 116, 60, 11, 255, 110, 59, 9, 255, 102, 60, 10, 255, 102, 63, 6, 255, 101, 56, 6, 255, 103, 61, 4, 255, 96, 61, 4, 255, 99, 59, 6, 255, 100, 57, 4, 255, 101, 58, 8, 255, 103, 58, 7, 255, 107, 61, 10, 255, 106, 61, 10, 255, 105, 61, 8, 255, 102, 61, 5, 255, 106, 64, 13, 255, 105, 62, 8, 255, 106, 60, 6, 255, 110, 60, 7, 255, 117, 64, 9, 255, 120, 64, 4, 255, 110, 64, 8, 255, 109, 63, 12, 255, 112, 67, 5, 255, 110, 64, 9, 255, 107, 61, 11, 255, 106, 63, 8, 255, 106, 65, 11, 255, 105, 63, 11, 255, 106, 63, 16, 255, 110, 65, 13, 255, 111, 66, 12, 255, 112, 69, 14, 255, 110, 71, 9, 255, 104, 68, 12, 255, 103, 67, 17, 255, 106, 68, 7, 255, 110, 69, 16, 255, 112, 65, 5, 255, 111, 67, 12, 255, 119, 70, 13, 255, 118, 68, 9, 255, 117, 69, 16, 255, 112, 70, 11, 255, 113, 72, 14, 255, 113, 72, 8, 255, 118, 73, 13, 255, 123, 77, 16, 255, 122, 75, 16, 255, 116, 70, 5, 255, 113, 72, 8, 255, 111, 74, 14, 255, 111, 74, 17, 255, 112, 79, 3, 255, 118, 79, 11, 255, 117, 74, 15, 255, 117, 73, 18, 255, 119, 76, 11, 255, 118, 74, 18, 255, 118, 72, 15, 255, 119, 75, 11, 255, 116, 77, 7, 255, 116, 78, 10, 255, 118, 75, 17, 255, 118, 75, 12, 255, 123, 80, 15, 255, 122, 82, 13, 255, 118, 85, 18, 255, 123, 87, 17, 255, 131, 85, 9, 255, 154, 89, 8, 255, 161, 88, 17, 255, 173, 87, 18, 255, 174, 94, 7, 255, 147, 89, 6, 255, 143, 83, 22, 255, 142, 89, 21, 255, 145, 89, 24, 255, 151, 100, 17, 255, 155, 100, 17, 255, 149, 95, 22, 255, 149, 98, 18, 255, 150, 98, 12, 255, 151, 99, 21, 255, 150, 99, 26, 255, 152, 99, 27, 255, 150, 99, 21, 255, 153, 101, 16, 255, 157, 102, 22, 255, 152, 103, 20, 255, 152, 103, 18, 255, 157, 107, 21, 255, 157, 108, 19, 255, 155, 105, 19, 255, 162, 109, 21, 255, 177, 110, 27, 255, 178, 109, 12, 255, 164, 108, 19, 255, 162, 108, 22, 255, 169, 111, 16, 255, 175, 112, 24, 255, 176, 114, 18, 255, 175, 113, 6, 255, 177, 106, 9, 255, 180, 104, 16, 255, 187, 118, 19, 255, 191, 127, 9, 255, 187, 126, 12, 255, 172, 122, 3, 255, 167, 118, 7, 255, 167, 109, 14, 255, 171, 106, 24, 255, 171, 112, 14, 255, 171, 113, 14, 255, 169, 109, 13, 255, 174, 114, 17, 255, 166, 108, 13, 255, 162, 103, 8, 255, 173, 102, 7, 255, 183, 101, 5, 255, 179, 100, 15, 255, 167, 99, 18, 255, 166, 101, 10, 255, 169, 99, 14, 255, 161, 94, 7, 255, 157, 96, 12, 255, 162, 96, 13, 255, 173, 92, 8, 255, 175, 83, 4, 255, 170, 79, 1, 255, 171, 80, 6, 255, 170, 84, 5, 255, 169, 87, 2, 255, 166, 91, 7, 255, 156, 91, 11, 255, 158, 93, 13, 255, 164, 94, 9, 255, 172, 95, 11, 255, 175, 97, 5, 255, 173, 96, 8, 255, 176, 96, 18, 255, 181, 96, 12, 255, 182, 91, 6, 255, 183, 88, 13, 255, 178, 81, 6, 255, 171, 74, 3, 255, 168, 72, 5, 255, 165, 70, 6, 255, 172, 75, 10, 255, 167, 73, 2, 255, 183, 81, 1, 255, 185, 86, 4, 255, 182, 81, 9, 255, 147, 63, 6, 255, 133, 64, 4, 255, 144, 62, 2, 255, 126, 54, 2, 255, 121, 55, 2, 255, 128, 59, 9, 255, 118, 55, 4, 255, 118, 52, 0, 255, 128, 58, 0, 255, 123, 51, 2, 255, 110, 42, 5, 255, 94, 44, 4, 255, 98, 50, 6, 255, 100, 52, 10, 255, 104, 53, 5, 255, 108, 51, 6, 255, 108, 52, 9, 255, 116, 54, 7, 255, 127, 62, 6, 255, 145, 81, 13, 255, 148, 86, 11, 255, 150, 89, 13, 255, 156, 93, 19, 255, 153, 89, 11, 255, 163, 90, 5, 255, 167, 92, 9, 255, 164, 98, 9, 255, 166, 99, 14, 255, 166, 99, 11, 255, 166, 97, 6, 255, 167, 96, 7, 255, 165, 91, 12, 255, 163, 93, 12, 255, 158, 91, 9, 255, 162, 91, 19, 255, 161, 87, 15, 255, 158, 90, 11, 255, 155, 91, 15, 255, 155, 90, 9, 255, 160, 92, 15, 255, 161, 95, 10, 255, 152, 89, 7, 255, 137, 73, 14, 255, 133, 68, 17, 255, 143, 78, 9, 255, 153, 88, 4, 255, 154, 87, 8, 255, 148, 82, 5, 255, 146, 81, 7, 255, 143, 79, 11, 255, 140, 80, 2, 255, 136, 77, 4, 255, 131, 71, 12, 255, 131, 72, 5, 255, 129, 67, 9, 255, 101, 46, 2, 255, 65, 30, 7, 255, 2, 3, 9, 255, 4, 2, 13, 255, 3, 2, 13, 255, 1, 3, 10, 255, 1, 5, 12, 255, 4, 2, 16, 255, 3, 3, 20, 255, 2, 6, 19, 255, 2, 6, 15, 255, 0, 5, 8, 255, 0, 4, 6, 255, 0, 3, 7, 255, 0, 2, 10, 255, 2, 2, 13, 255, 3, 3, 11, 255, 3, 4, 9, 255, 1, 2, 6, 255, 1, 2, 4, 255, 1, 2, 4, 255, 1, 2, 6, 255, 2, 3, 7, 255, 2, 3, 7, 255, 1, 2, 7, 255, 2, 3, 7, 255, 2, 3, 7, 255, 0, 1, 6, 255, 0, 1, 7, 255, 3, 4, 9, 255, 0, 1, 6, 255, 0, 1, 6, 255, 1, 2, 7, 255, 1, 2, 7, 255, 0, 1, 5, 255, 0, 1, 5, 255, 0, 1, 5, 255, 1, 0, 5, 255, 1, 0, 5, 255, 1, 0, 4, 255, 0, 0, 2, 255, 0, 0, 3, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 1, 3, 255, 2, 0, 1, 255, 2, 5, 9, 255, 2, 92, 128, 255, 4, 173, 210, 255, 4, 215, 254, 255, 124, 251, 250, 255, 246, 255, 255, 255, 97, 177, 170, 255, 0, 28, 60, 255, 6, 6, 24, 255, 2, 3, 5, 255, 2, 0, 4, 255, 8, 40, 106, 255, 2, 133, 220, 255, 3, 8, 29, 255, 1, 0, 0, 255, 4, 15, 174, 255, 5, 18, 102, 255, 3, 0, 0, 255, 2, 2, 5, 255, 2, 1, 3, 255, 0, 0, 2, 255, 0, 2, 0, 255, 0, 1, 0, 255, 1, 1, 3, 255, 2, 1, 3, 255, 1, 0, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 2, 0, 1, 255, 1, 0, 0, 255, 3, 1, 2, 255, 2, 2, 2, 255, 1, 1, 1, 255, 0, 1, 1, 255, 1, 2, 2, 255, 1, 0, 0, 255, 2, 0, 1, 255, 3, 0, 1, 255, 5, 1, 1, 255, 3, 2, 0, 255, 3, 2, 0, 255, 2, 1, 0, 255, 3, 2, 0, 255, 4, 0, 0, 255, 4, 3, 1, 255, 4, 4, 2, 255, 1, 3, 0, 255, 7, 6, 2, 255, 9, 8, 1, 255, 13, 12, 5, 255, 19, 18, 9, 255, 24, 25, 12, 255, 39, 44, 30, 255, 60, 67, 54, 255, 70, 85, 73, 255, 69, 111, 85, 255, 91, 131, 111, 255, 90, 142, 119, 255, 91, 153, 138, 255, 112, 185, 180, 255, 142, 213, 210, 255, 169, 225, 217, 255, 160, 211, 189, 255, 108, 171, 143, 255, 57, 108, 74, 255, 31, 45, 25, 255, 36, 33, 16, 255, 35, 36, 6, 255, 36, 35, 2, 255, 45, 33, 12, 255, 48, 34, 6, 255, 47, 37, 1, 255, 45, 39, 4, 255, 53, 45, 5, 255, 61, 46, 5, 255, 54, 38, 3, 255, 42, 31, 3, 255, 50, 39, 8, 255, 47, 31, 12, 255, 39, 31, 3, 255, 47, 32, 6, 255, 49, 36, 6, 255, 44, 38, 3, 255, 42, 40, 5, 255, 53, 40, 10, 255, 61, 42, 13, 255, 63, 44, 10, 255, 72, 47, 8, 255, 68, 47, 9, 255, 77, 53, 10, 255, 78, 55, 4, 255, 84, 54, 2, 255, 93, 60, 3, 255, 95, 61, 7, 255, 96, 60, 10, 255, 102, 64, 10, 255, 101, 68, 5, 255, 94, 62, 2, 255, 94, 52, 8, 255, 89, 50, 9, 255, 82, 49, 7, 255, 79, 52, 12, 255, 79, 48, 9, 255, 78, 45, 7, 255, 79, 43, 4, 255, 72, 45, 4, 255, 69, 45, 7, 255, 79, 45, 8, 255, 82, 44, 6, 255, 84, 45, 5, 255, 82, 44, 6, 255, 80, 46, 12, 255, 78, 44, 11, 255, 81, 43, 5, 255, 83, 44, 1, 255, 80, 47, 2, 255, 80, 47, 4, 255, 81, 44, 2, 255, 85, 49, 6, 255, 94, 52, 6, 255, 104, 52, 8, 255, 118, 52, 7, 255, 131, 56, 6, 255, 127, 49, 5, 255, 142, 56, 5, 255, 143, 54, 2, 255, 146, 60, 1, 255, 135, 55, 3, 255, 145, 58, 9, 255, 144, 60, 2, 255, 145, 58, 4, 255, 154, 66, 1, 255, 155, 62, 13, 255, 156, 65, 15, 255, 162, 72, 0, 255, 159, 71, 1, 255, 151, 69, 6, 255, 143, 60, 10, 255, 127, 55, 13, 255, 108, 49, 10, 255, 106, 51, 10, 255, 112, 49, 11, 255, 122, 54, 9, 255, 125, 57, 10, 255, 127, 58, 7, 255, 126, 64, 6, 255, 129, 66, 8, 255, 128, 65, 5, 255, 118, 61, 2, 255, 116, 63, 9, 255, 115, 62, 10, 255, 114, 65, 5, 255, 113, 66, 4, 255, 105, 58, 11, 255, 99, 56, 7, 255, 104, 63, 5, 255, 105, 64, 12, 255, 99, 58, 9, 255, 108, 62, 10, 255, 103, 65, 10, 255, 105, 63, 11, 255, 115, 61, 12, 255, 115, 62, 8, 255, 107, 63, 3, 255, 110, 65, 8, 255, 113, 66, 6, 255, 108, 61, 9, 255, 106, 62, 11, 255, 106, 66, 8, 255, 107, 64, 8, 255, 112, 64, 16, 255, 110, 62, 17, 255, 111, 63, 12, 255, 116, 68, 13, 255, 113, 65, 11, 255, 109, 64, 9, 255, 109, 66, 11, 255, 105, 72, 7, 255, 105, 68, 9, 255, 109, 65, 18, 255, 110, 67, 10, 255, 107, 71, 12, 255, 115, 70, 12, 255, 116, 70, 16, 255, 113, 67, 13, 255, 117, 71, 9, 255, 111, 72, 8, 255, 112, 73, 12, 255, 125, 75, 19, 255, 132, 74, 6, 255, 121, 73, 16, 255, 109, 72, 7, 255, 113, 74, 6, 255, 115, 71, 13, 255, 109, 73, 13, 255, 111, 74, 16, 255, 113, 78, 12, 255, 111, 73, 9, 255, 115, 77, 9, 255, 113, 76, 15, 255, 115, 73, 15, 255, 124, 75, 8, 255, 119, 77, 12, 255, 117, 79, 13, 255, 119, 78, 9, 255, 121, 84, 13, 255, 122, 83, 12, 255, 121, 79, 12, 255, 129, 80, 5, 255, 131, 81, 17, 255, 128, 82, 16, 255, 137, 86, 10, 255, 158, 85, 5, 255, 164, 86, 11, 255, 159, 88, 17, 255, 151, 88, 16, 255, 142, 89, 15, 255, 140, 87, 17, 255, 145, 96, 13, 255, 143, 93, 20, 255, 148, 97, 20, 255, 158, 96, 19, 255, 153, 98, 11, 255, 152, 100, 13, 255, 151, 99, 14, 255, 155, 99, 20, 255, 154, 96, 28, 255, 152, 100, 23, 255, 152, 100, 25, 255, 153, 101, 16, 255, 155, 99, 18, 255, 154, 101, 18, 255, 160, 102, 19, 255, 171, 105, 16, 255, 179, 108, 18, 255, 180, 108, 18, 255, 181, 106, 19, 255, 180, 102, 22, 255, 181, 113, 19, 255, 163, 109, 17, 255, 162, 108, 18, 255, 171, 110, 26, 255, 178, 112, 19, 255, 180, 113, 18, 255, 177, 109, 19, 255, 176, 104, 12, 255, 176, 102, 11, 255, 188, 121, 5, 255, 190, 123, 12, 255, 188, 125, 13, 255, 177, 122, 16, 255, 170, 113, 21, 255, 176, 112, 2, 255, 181, 101, 8, 255, 180, 103, 20, 255, 183, 110, 11, 255, 182, 111, 1, 255, 181, 112, 9, 255, 177, 112, 18, 255, 171, 101, 19, 255, 177, 92, 12, 255, 185, 93, 5, 255, 180, 98, 8, 255, 167, 100, 15, 255, 171, 102, 10, 255, 173, 103, 6, 255, 166, 99, 8, 255, 171, 97, 4, 255, 176, 95, 3, 255, 170, 91, 5, 255, 168, 91, 5, 255, 172, 88, 8, 255, 176, 90, 13, 255, 171, 84, 9, 255, 174, 85, 3, 255, 177, 93, 3, 255, 172, 95, 6, 255, 166, 95, 7, 255, 162, 94, 7, 255, 171, 100, 6, 255, 177, 99, 2, 255, 178, 95, 9, 255, 181, 95, 13, 255, 183, 92, 9, 255, 178, 86, 9, 255, 171, 84, 8, 255, 168, 74, 3, 255, 167, 72, 4, 255, 167, 76, 3, 255, 176, 93, 11, 255, 168, 88, 8, 255, 163, 85, 4, 255, 182, 88, 14, 255, 176, 73, 3, 255, 180, 84, 2, 255, 148, 64, 3, 255, 131, 59, 4, 255, 136, 58, 5, 255, 124, 56, 3, 255, 118, 59, 2, 255, 127, 52, 9, 255, 127, 53, 5, 255, 122, 48, 5, 255, 118, 46, 2, 255, 118, 46, 4, 255, 109, 43, 5, 255, 99, 50, 5, 255, 102, 52, 6, 255, 103, 52, 9, 255, 106, 51, 7, 255, 114, 53, 7, 255, 116, 55, 10, 255, 116, 56, 4, 255, 127, 67, 6, 255, 141, 81, 11, 255, 150, 87, 9, 255, 151, 88, 12, 255, 152, 92, 15, 255, 160, 92, 13, 255, 174, 96, 10, 255, 172, 94, 11, 255, 161, 96, 2, 255, 163, 99, 7, 255, 165, 98, 8, 255, 165, 96, 10, 255, 165, 95, 4, 255, 163, 90, 22, 255, 158, 88, 19, 255, 158, 93, 6, 255, 159, 93, 15, 255, 158, 88, 12, 255, 159, 89, 6, 255, 157, 86, 8, 255, 155, 86, 11, 255, 156, 89, 15, 255, 151, 87, 12, 255, 145, 77, 13, 255, 138, 71, 6, 255, 140, 74, 12, 255, 146, 81, 19, 255, 147, 83, 4, 255, 144, 81, 9, 255, 139, 74, 11, 255, 140, 77, 10, 255, 138, 75, 7, 255, 137, 77, 2, 255, 132, 74, 4, 255, 131, 70, 11, 255, 128, 69, 5, 255, 125, 69, 9, 255, 114, 59, 2, 255, 96, 51, 4, 255, 1, 3, 12, 255, 1, 0, 9, 255, 5, 1, 8, 255, 1, 1, 8, 255, 0, 3, 9, 255, 0, 4, 11, 255, 0, 4, 15, 255, 2, 6, 18, 255, 3, 7, 19, 255, 1, 4, 14, 255, 0, 5, 11, 255, 0, 3, 10, 255, 0, 3, 11, 255, 0, 3, 12, 255, 0, 2, 10, 255, 1, 4, 9, 255, 1, 2, 7, 255, 3, 4, 8, 255, 2, 3, 7, 255, 1, 2, 7, 255, 2, 3, 8, 255, 2, 3, 6, 255, 0, 1, 3, 255, 1, 2, 5, 255, 2, 3, 7, 255, 2, 3, 7, 255, 1, 2, 7, 255, 2, 3, 8, 255, 0, 1, 5, 255, 2, 2, 7, 255, 3, 4, 8, 255, 2, 3, 7, 255, 0, 1, 5, 255, 0, 1, 5, 255, 1, 2, 6, 255, 1, 0, 5, 255, 1, 0, 5, 255, 1, 0, 5, 255, 0, 0, 3, 255, 0, 0, 2, 255, 0, 0, 0, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 2, 255, 2, 1, 2, 255, 3, 0, 0, 255, 10, 35, 70, 255, 0, 184, 233, 255, 93, 255, 255, 255, 229, 255, 255, 255, 74, 186, 162, 255, 0, 25, 14, 255, 2, 0, 0, 255, 3, 0, 2, 255, 2, 3, 5, 255, 5, 5, 37, 255, 4, 134, 239, 255, 4, 84, 136, 255, 6, 0, 0, 255, 5, 17, 126, 255, 0, 39, 195, 255, 4, 2, 0, 255, 3, 2, 3, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 2, 0, 255, 0, 2, 2, 255, 0, 0, 4, 255, 0, 1, 1, 255, 1, 0, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 2, 0, 1, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 2, 0, 1, 255, 3, 1, 2, 255, 1, 0, 0, 255, 1, 1, 1, 255, 2, 0, 1, 255, 3, 0, 0, 255, 3, 2, 0, 255, 3, 2, 0, 255, 0, 1, 0, 255, 4, 4, 2, 255, 6, 3, 2, 255, 4, 0, 0, 255, 4, 4, 0, 255, 4, 4, 0, 255, 9, 8, 3, 255, 9, 14, 5, 255, 21, 24, 15, 255, 30, 32, 22, 255, 47, 53, 38, 255, 58, 72, 55, 255, 66, 87, 72, 255, 72, 106, 88, 255, 75, 122, 101, 255, 69, 126, 104, 255, 69, 138, 113, 255, 85, 162, 149, 255, 117, 193, 186, 255, 142, 211, 201, 255, 154, 215, 194, 255, 133, 191, 170, 255, 96, 157, 122, 255, 61, 107, 63, 255, 35, 47, 29, 255, 36, 38, 12, 255, 37, 36, 10, 255, 39, 34, 9, 255, 43, 35, 8, 255, 38, 33, 9, 255, 35, 36, 11, 255, 54, 39, 11, 255, 61, 38, 5, 255, 57, 41, 6, 255, 55, 36, 5, 255, 41, 32, 0, 255, 44, 33, 4, 255, 47, 30, 4, 255, 46, 31, 6, 255, 45, 28, 5, 255, 56, 33, 5, 255, 49, 38, 5, 255, 59, 43, 3, 255, 60, 40, 5, 255, 64, 45, 10, 255, 68, 50, 4, 255, 65, 49, 12, 255, 72, 52, 4, 255, 71, 53, 7, 255, 79, 57, 6, 255, 81, 57, 1, 255, 89, 58, 4, 255, 92, 61, 5, 255, 89, 59, 3, 255, 99, 63, 5, 255, 108, 70, 8, 255, 97, 64, 2, 255, 92, 57, 2, 255, 83, 50, 6, 255, 80, 46, 7, 255, 76, 46, 8, 255, 75, 43, 8, 255, 73, 46, 9, 255, 81, 46, 7, 255, 74, 41, 5, 255, 73, 44, 8, 255, 84, 50, 7, 255, 87, 44, 5, 255, 81, 42, 8, 255, 74, 44, 7, 255, 80, 46, 3, 255, 79, 46, 7, 255, 74, 47, 10, 255, 78, 46, 7, 255, 81, 46, 7, 255, 75, 45, 8, 255, 80, 48, 5, 255, 89, 55, 5, 255, 86, 53, 4, 255, 87, 52, 6, 255, 101, 48, 4, 255, 104, 51, 10, 255, 119, 54, 14, 255, 105, 49, 1, 255, 111, 49, 4, 255, 123, 53, 3, 255, 112, 50, 6, 255, 135, 52, 16, 255, 118, 47, 6, 255, 132, 56, 8, 255, 135, 60, 2, 255, 133, 58, 5, 255, 150, 64, 6, 255, 152, 66, 4, 255, 157, 67, 6, 255, 167, 67, 2, 255, 171, 73, 5, 255, 165, 72, 10, 255, 161, 73, 6, 255, 152, 73, 9, 255, 126, 61, 7, 255, 113, 57, 5, 255, 115, 51, 9, 255, 107, 45, 9, 255, 98, 47, 8, 255, 105, 50, 8, 255, 116, 49, 8, 255, 126, 61, 9, 255, 121, 56, 6, 255, 125, 59, 6, 255, 130, 65, 3, 255, 136, 73, 10, 255, 126, 65, 7, 255, 119, 64, 4, 255, 109, 62, 6, 255, 105, 59, 16, 255, 109, 62, 13, 255, 108, 57, 3, 255, 103, 57, 3, 255, 110, 61, 11, 255, 117, 61, 11, 255, 113, 64, 5, 255, 112, 63, 10, 255, 113, 60, 10, 255, 113, 61, 12, 255, 110, 61, 9, 255, 108, 64, 8, 255, 110, 65, 13, 255, 110, 64, 15, 255, 106, 63, 10, 255, 108, 68, 5, 255, 110, 68, 10, 255, 110, 66, 13, 255, 106, 64, 12, 255, 106, 67, 15, 255, 112, 66, 11, 255, 111, 69, 8, 255, 108, 65, 8, 255, 109, 66, 8, 255, 106, 71, 9, 255, 109, 71, 12, 255, 111, 69, 15, 255, 116, 72, 16, 255, 117, 70, 4, 255, 116, 70, 8, 255, 110, 69, 12, 255, 117, 74, 17, 255, 127, 78, 9, 255, 135, 80, 6, 255, 128, 78, 12, 255, 129, 78, 7, 255, 126, 76, 8, 255, 118, 69, 11, 255, 128, 78, 8, 255, 137, 77, 14, 255, 147, 81, 8, 255, 143, 83, 7, 255, 127, 81, 10, 255, 120, 78, 16, 255, 117, 77, 13, 255, 119, 77, 16, 255, 120, 77, 19, 255, 114, 75, 8, 255, 147, 81, 19, 255, 141, 79, 14, 255, 115, 82, 9, 255, 122, 81, 10, 255, 124, 81, 19, 255, 129, 84, 19, 255, 127, 82, 13, 255, 131, 84, 12, 255, 133, 84, 12, 255, 134, 86, 11, 255, 141, 87, 15, 255, 143, 87, 23, 255, 141, 87, 21, 255, 138, 89, 19, 255, 146, 93, 23, 255, 150, 92, 17, 255, 156, 92, 17, 255, 158, 99, 18, 255, 159, 102, 14, 255, 159, 100, 18, 255, 159, 98, 17, 255, 159, 101, 15, 255, 154, 98, 25, 255, 152, 99, 12, 255, 154, 101, 12, 255, 156, 101, 20, 255, 157, 100, 25, 255, 156, 103, 23, 255, 166, 105, 11, 255, 176, 104, 20, 255, 175, 104, 23, 255, 175, 102, 21, 255, 180, 103, 21, 255, 178, 106, 14, 255, 179, 114, 9, 255, 177, 112, 15, 255, 177, 111, 12, 255, 182, 111, 11, 255, 186, 109, 22, 255, 184, 110, 20, 255, 177, 109, 14, 255, 173, 102, 20, 255, 179, 105, 13, 255, 195, 128, 10, 255, 188, 120, 16, 255, 190, 126, 11, 255, 180, 123, 12, 255, 175, 114, 17, 255, 183, 112, 10, 255, 180, 99, 12, 255, 180, 102, 17, 255, 177, 98, 3, 255, 183, 98, 10, 255, 185, 97, 16, 255, 170, 90, 14, 255, 168, 90, 9, 255, 179, 93, 8, 255, 186, 96, 11, 255, 185, 101, 5, 255, 177, 101, 2, 255, 172, 100, 6, 255, 174, 101, 12, 255, 176, 99, 12, 255, 173, 97, 11, 255, 168, 101, 7, 255, 166, 99, 2, 255, 171, 98, 6, 255, 165, 95, 8, 255, 168, 93, 6, 255, 173, 92, 3, 255, 181, 92, 1, 255, 178, 90, 0, 255, 178, 92, 8, 255, 170, 97, 10, 255, 167, 93, 0, 255, 174, 99, 4, 255, 179, 100, 12, 255, 182, 99, 13, 255, 184, 100, 13, 255, 181, 100, 11, 255, 176, 97, 9, 255, 172, 81, 14, 255, 177, 87, 10, 255, 183, 97, 4, 255, 182, 99, 1, 255, 187, 105, 7, 255, 190, 106, 3, 255, 188, 111, 1, 255, 192, 101, 3, 255, 193, 105, 6, 255, 177, 91, 5, 255, 141, 55, 6, 255, 125, 53, 14, 255, 127, 57, 6, 255, 129, 60, 0, 255, 128, 57, 2, 255, 127, 51, 7, 255, 120, 50, 0, 255, 120, 51, 2, 255, 116, 50, 8, 255, 112, 49, 7, 255, 105, 49, 3, 255, 106, 54, 6, 255, 106, 53, 7, 255, 110, 52, 5, 255, 113, 52, 6, 255, 116, 53, 3, 255, 119, 53, 3, 255, 125, 61, 3, 255, 141, 79, 10, 255, 148, 85, 12, 255, 154, 90, 11, 255, 157, 93, 15, 255, 153, 88, 12, 255, 164, 88, 15, 255, 169, 95, 9, 255, 168, 95, 15, 255, 164, 95, 5, 255, 164, 97, 11, 255, 162, 92, 7, 255, 162, 93, 8, 255, 161, 92, 6, 255, 160, 89, 21, 255, 156, 88, 11, 255, 159, 91, 6, 255, 159, 89, 17, 255, 155, 86, 14, 255, 155, 86, 10, 255, 154, 87, 9, 255, 153, 87, 12, 255, 151, 85, 11, 255, 142, 74, 9, 255, 129, 59, 6, 255, 132, 64, 9, 255, 143, 78, 7, 255, 148, 83, 12, 255, 143, 77, 12, 255, 141, 77, 7, 255, 136, 76, 5, 255, 136, 76, 6, 255, 137, 73, 9, 255, 133, 71, 10, 255, 129, 72, 4, 255, 128, 71, 4, 255, 126, 66, 12, 255, 108, 59, 5, 255, 98, 51, 4, 255, 101, 51, 5, 255, 15, 57, 69, 255, 0, 6, 9, 255, 5, 0, 5, 255, 4, 0, 8, 255, 2, 1, 10, 255, 1, 1, 6, 255, 1, 3, 11, 255, 3, 5, 18, 255, 3, 5, 20, 255, 1, 4, 20, 255, 1, 4, 16, 255, 1, 4, 10, 255, 1, 4, 11, 255, 1, 4, 12, 255, 0, 3, 10, 255, 2, 4, 9, 255, 1, 3, 8, 255, 3, 5, 10, 255, 2, 4, 9, 255, 1, 1, 9, 255, 2, 3, 9, 255, 1, 2, 7, 255, 0, 0, 5, 255, 0, 0, 4, 255, 1, 2, 6, 255, 2, 2, 7, 255, 1, 1, 7, 255, 0, 1, 6, 255, 1, 1, 5, 255, 2, 3, 7, 255, 1, 2, 5, 255, 0, 1, 4, 255, 1, 2, 6, 255, 1, 2, 6, 255, 1, 3, 6, 255, 2, 1, 6, 255, 1, 0, 6, 255, 1, 0, 6, 255, 1, 1, 4, 255, 0, 0, 2, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 2, 255, 1, 1, 3, 255, 0, 1, 3, 255, 5, 0, 0, 255, 5, 69, 104, 255, 85, 224, 215, 255, 53, 164, 131, 255, 0, 21, 16, 255, 2, 0, 3, 255, 3, 0, 9, 255, 5, 4, 11, 255, 2, 0, 0, 255, 4, 56, 141, 255, 3, 181, 222, 255, 4, 0, 14, 255, 4, 0, 29, 255, 7, 144, 225, 255, 3, 50, 96, 255, 5, 0, 0, 255, 2, 3, 5, 255, 1, 1, 2, 255, 2, 0, 2, 255, 1, 0, 4, 255, 2, 1, 4, 255, 3, 2, 1, 255, 2, 2, 1, 255, 1, 1, 5, 255, 0, 0, 3, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 0, 0, 255, 2, 2, 2, 255, 1, 1, 1, 255, 0, 0, 0, 255, 2, 0, 1, 255, 2, 0, 1, 255, 2, 0, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 0, 1, 255, 1, 1, 0, 255, 3, 3, 1, 255, 3, 2, 0, 255, 1, 2, 1, 255, 2, 1, 1, 255, 6, 3, 1, 255, 9, 5, 2, 255, 10, 9, 5, 255, 10, 10, 4, 255, 19, 18, 8, 255, 27, 28, 15, 255, 39, 40, 29, 255, 51, 58, 47, 255, 57, 75, 60, 255, 60, 89, 72, 255, 60, 100, 85, 255, 60, 110, 90, 255, 66, 115, 92, 255, 71, 116, 99, 255, 79, 143, 135, 255, 95, 173, 166, 255, 122, 195, 187, 255, 148, 207, 196, 255, 140, 198, 179, 255, 116, 178, 145, 255, 89, 147, 102, 255, 60, 101, 56, 255, 40, 55, 15, 255, 33, 34, 11, 255, 31, 35, 8, 255, 40, 38, 11, 255, 33, 29, 8, 255, 38, 36, 9, 255, 43, 36, 8, 255, 52, 35, 8, 255, 56, 39, 6, 255, 46, 34, 8, 255, 42, 34, 8, 255, 44, 33, 5, 255, 50, 30, 11, 255, 47, 32, 4, 255, 38, 34, 7, 255, 39, 33, 12, 255, 49, 32, 0, 255, 45, 36, 4, 255, 61, 43, 4, 255, 65, 41, 7, 255, 58, 40, 8, 255, 65, 43, 2, 255, 72, 45, 1, 255, 77, 49, 5, 255, 86, 54, 3, 255, 88, 55, 8, 255, 90, 56, 3, 255, 92, 57, 7, 255, 87, 59, 5, 255, 91, 63, 5, 255, 101, 61, 5, 255, 105, 64, 6, 255, 97, 65, 2, 255, 92, 58, 2, 255, 78, 54, 6, 255, 77, 49, 6, 255, 72, 44, 4, 255, 71, 44, 5, 255, 67, 46, 8, 255, 77, 47, 8, 255, 72, 45, 3, 255, 70, 45, 7, 255, 77, 46, 7, 255, 78, 45, 7, 255, 79, 43, 9, 255, 82, 44, 7, 255, 84, 44, 6, 255, 85, 44, 7, 255, 75, 45, 10, 255, 83, 49, 7, 255, 93, 52, 4, 255, 87, 52, 9, 255, 88, 53, 11, 255, 87, 53, 5, 255, 93, 54, 6, 255, 89, 51, 7, 255, 89, 50, 8, 255, 91, 50, 2, 255, 96, 52, 8, 255, 86, 46, 6, 255, 102, 54, 7, 255, 96, 46, 8, 255, 100, 50, 3, 255, 99, 48, 8, 255, 102, 46, 4, 255, 124, 55, 3, 255, 107, 45, 8, 255, 133, 60, 10, 255, 139, 56, 9, 255, 123, 46, 4, 255, 140, 64, 5, 255, 148, 65, 11, 255, 148, 63, 7, 255, 155, 64, 5, 255, 160, 69, 6, 255, 161, 76, 4, 255, 169, 79, 5, 255, 174, 79, 4, 255, 171, 79, 2, 255, 160, 76, 12, 255, 145, 68, 16, 255, 132, 65, 10, 255, 114, 57, 10, 255, 104, 56, 7, 255, 104, 53, 13, 255, 101, 48, 11, 255, 108, 54, 8, 255, 130, 67, 8, 255, 131, 61, 1, 255, 136, 64, 6, 255, 135, 67, 9, 255, 131, 66, 6, 255, 124, 67, 4, 255, 122, 68, 5, 255, 113, 66, 5, 255, 110, 65, 10, 255, 110, 62, 6, 255, 114, 64, 10, 255, 112, 63, 10, 255, 113, 63, 6, 255, 115, 65, 13, 255, 109, 66, 10, 255, 105, 66, 9, 255, 107, 67, 7, 255, 111, 67, 10, 255, 111, 63, 15, 255, 107, 64, 12, 255, 110, 68, 12, 255, 109, 66, 7, 255, 110, 69, 8, 255, 111, 68, 14, 255, 110, 65, 4, 255, 106, 67, 9, 255, 109, 67, 15, 255, 115, 66, 11, 255, 113, 71, 13, 255, 115, 72, 6, 255, 112, 71, 8, 255, 117, 71, 15, 255, 120, 72, 10, 255, 116, 70, 10, 255, 127, 76, 15, 255, 128, 75, 14, 255, 122, 74, 8, 255, 127, 76, 11, 255, 156, 83, 11, 255, 168, 79, 2, 255, 147, 76, 13, 255, 135, 77, 18, 255, 158, 83, 10, 255, 165, 79, 2, 255, 166, 77, 10, 255, 165, 80, 9, 255, 152, 80, 13, 255, 126, 75, 7, 255, 115, 76, 11, 255, 120, 75, 14, 255, 121, 77, 9, 255, 118, 78, 18, 255, 120, 76, 20, 255, 120, 78, 12, 255, 126, 77, 5, 255, 129, 83, 7, 255, 126, 82, 19, 255, 123, 82, 9, 255, 128, 84, 10, 255, 132, 83, 18, 255, 133, 88, 24, 255, 137, 87, 8, 255, 134, 86, 6, 255, 138, 87, 17, 255, 148, 90, 8, 255, 147, 91, 19, 255, 145, 87, 27, 255, 146, 93, 20, 255, 155, 98, 17, 255, 163, 98, 24, 255, 160, 103, 9, 255, 160, 105, 5, 255, 158, 103, 8, 255, 156, 101, 10, 255, 156, 99, 17, 255, 157, 101, 19, 255, 152, 101, 16, 255, 156, 102, 13, 255, 159, 101, 21, 255, 155, 103, 20, 255, 166, 102, 21, 255, 178, 102, 20, 255, 174, 104, 12, 255, 174, 102, 21, 255, 175, 101, 17, 255, 175, 106, 9, 255, 175, 107, 18, 255, 182, 107, 15, 255, 183, 110, 19, 255, 183, 108, 11, 255, 186, 108, 11, 255, 182, 108, 18, 255, 173, 108, 8, 255, 172, 110, 7, 255, 184, 115, 18, 255, 197, 131, 21, 255, 196, 134, 4, 255, 190, 127, 6, 255, 179, 119, 7, 255, 176, 112, 23, 255, 178, 101, 30, 255, 176, 98, 12, 255, 179, 104, 9, 255, 179, 99, 9, 255, 184, 99, 7, 255, 183, 104, 15, 255, 175, 102, 18, 255, 174, 98, 9, 255, 179, 99, 13, 255, 182, 96, 10, 255, 186, 93, 8, 255, 189, 99, 4, 255, 176, 102, 3, 255, 171, 102, 10, 255, 171, 99, 3, 255, 167, 100, 4, 255, 170, 98, 2, 255, 170, 97, 6, 255, 170, 99, 6, 255, 167, 95, 2, 255, 167, 91, 6, 255, 166, 90, 4, 255, 177, 96, 5, 255, 180, 97, 1, 255, 181, 93, 5, 255, 173, 92, 6, 255, 172, 92, 2, 255, 176, 100, 11, 255, 176, 104, 15, 255, 176, 104, 8, 255, 184, 105, 15, 255, 184, 106, 17, 255, 180, 102, 13, 255, 180, 101, 12, 255, 185, 106, 2, 255, 184, 102, 1, 255, 183, 100, 5, 255, 186, 102, 8, 255, 188, 103, 3, 255, 193, 104, 3, 255, 195, 108, 5, 255, 201, 107, 4, 255, 168, 77, 6, 255, 129, 56, 4, 255, 122, 56, 4, 255, 123, 61, 4, 255, 126, 55, 6, 255, 125, 49, 3, 255, 118, 54, 3, 255, 113, 55, 0, 255, 119, 52, 0, 255, 114, 46, 8, 255, 109, 51, 4, 255, 103, 52, 1, 255, 105, 51, 6, 255, 107, 52, 10, 255, 112, 52, 2, 255, 123, 57, 6, 255, 125, 62, 4, 255, 137, 69, 9, 255, 150, 78, 11, 255, 153, 80, 9, 255, 154, 85, 10, 255, 154, 93, 9, 255, 148, 88, 7, 255, 157, 86, 5, 255, 168, 91, 14, 255, 166, 94, 10, 255, 162, 90, 14, 255, 163, 87, 4, 255, 165, 90, 8, 255, 163, 88, 14, 255, 162, 91, 4, 255, 160, 92, 2, 255, 155, 86, 14, 255, 155, 87, 12, 255, 156, 87, 3, 255, 158, 88, 13, 255, 153, 85, 18, 255, 153, 85, 15, 255, 152, 87, 13, 255, 150, 87, 6, 255, 148, 84, 9, 255, 146, 82, 7, 255, 133, 70, 7, 255, 135, 71, 12, 255, 140, 78, 10, 255, 141, 75, 9, 255, 141, 75, 7, 255, 140, 73, 8, 255, 135, 77, 5, 255, 129, 75, 6, 255, 131, 73, 7, 255, 126, 69, 4, 255, 124, 67, 9, 255, 124, 68, 5, 255, 122, 67, 6, 255, 83, 39, 8, 255, 73, 35, 5, 255, 92, 44, 4, 255, 8, 84, 93, 255, 1, 2, 5, 255, 4, 2, 10, 255, 2, 1, 5, 255, 1, 2, 9, 255, 2, 3, 4, 255, 2, 2, 4, 255, 0, 4, 6, 255, 0, 2, 13, 255, 1, 3, 20, 255, 2, 4, 20, 255, 0, 4, 14, 255, 1, 6, 12, 255, 0, 6, 12, 255, 1, 5, 11, 255, 2, 3, 8, 255, 1, 3, 8, 255, 1, 3, 8, 255, 0, 3, 8, 255, 1, 1, 9, 255, 3, 3, 9, 255, 3, 3, 8, 255, 2, 2, 12, 255, 2, 2, 12, 255, 2, 2, 8, 255, 1, 2, 5, 255, 1, 2, 7, 255, 1, 2, 7, 255, 2, 3, 8, 255, 2, 3, 8, 255, 1, 2, 7, 255, 1, 2, 6, 255, 0, 1, 5, 255, 0, 1, 5, 255, 0, 1, 6, 255, 1, 2, 6, 255, 1, 2, 7, 255, 1, 2, 8, 255, 0, 0, 6, 255, 1, 1, 3, 255, 1, 1, 2, 255, 0, 0, 0, 255, 0, 0, 1, 255, 0, 0, 2, 255, 0, 0, 5, 255, 0, 0, 4, 255, 2, 1, 1, 255, 2, 2, 2, 255, 0, 23, 15, 255, 0, 4, 0, 255, 5, 2, 13, 255, 2, 2, 11, 255, 4, 1, 5, 255, 1, 4, 3, 255, 1, 0, 43, 255, 6, 174, 229, 255, 3, 66, 117, 255, 2, 0, 0, 255, 6, 23, 116, 255, 3, 96, 228, 255, 6, 7, 10, 255, 3, 2, 4, 255, 3, 0, 3, 255, 2, 4, 1, 255, 3, 3, 2, 255, 4, 2, 3, 255, 5, 1, 2, 255, 6, 2, 3, 255, 2, 0, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 2, 2, 255, 2, 1, 1, 255, 2, 0, 1, 255, 2, 0, 1, 255, 2, 0, 1, 255, 1, 1, 1, 255, 2, 1, 2, 255, 2, 0, 1, 255, 3, 2, 1, 255, 3, 2, 1, 255, 3, 2, 1, 255, 4, 3, 1, 255, 3, 3, 2, 255, 1, 2, 1, 255, 9, 6, 0, 255, 12, 8, 2, 255, 16, 13, 6, 255, 22, 23, 10, 255, 30, 34, 18, 255, 37, 46, 27, 255, 44, 62, 48, 255, 46, 73, 62, 255, 44, 90, 72, 255, 56, 97, 76, 255, 51, 100, 78, 255, 54, 109, 87, 255, 56, 106, 90, 255, 67, 122, 111, 255, 84, 158, 149, 255, 100, 181, 172, 255, 129, 197, 185, 255, 143, 197, 179, 255, 127, 182, 158, 255, 103, 162, 128, 255, 78, 132, 93, 255, 63, 95, 58, 255, 44, 56, 12, 255, 39, 38, 11, 255, 33, 34, 11, 255, 39, 36, 12, 255, 41, 33, 10, 255, 43, 34, 6, 255, 50, 38, 6, 255, 52, 39, 6, 255, 53, 40, 6, 255, 46, 34, 3, 255, 41, 30, 7, 255, 46, 33, 9, 255, 46, 32, 3, 255, 53, 37, 7, 255, 53, 35, 4, 255, 43, 32, 6, 255, 46, 35, 6, 255, 43, 36, 12, 255, 54, 40, 10, 255, 70, 41, 2, 255, 74, 46, 6, 255, 70, 44, 7, 255, 78, 48, 8, 255, 87, 54, 7, 255, 90, 53, 3, 255, 94, 57, 4, 255, 87, 57, 2, 255, 88, 60, 3, 255, 87, 54, 6, 255, 100, 60, 3, 255, 109, 62, 6, 255, 105, 64, 8, 255, 104, 64, 0, 255, 96, 54, 9, 255, 80, 47, 6, 255, 72, 46, 6, 255, 74, 48, 5, 255, 78, 49, 3, 255, 75, 43, 5, 255, 81, 47, 8, 255, 75, 46, 3, 255, 67, 44, 6, 255, 72, 45, 4, 255, 79, 48, 10, 255, 78, 43, 10, 255, 82, 46, 9, 255, 81, 45, 7, 255, 83, 44, 4, 255, 93, 51, 8, 255, 101, 59, 11, 255, 101, 60, 7, 255, 99, 57, 4, 255, 93, 52, 5, 255, 95, 50, 11, 255, 94, 47, 12, 255, 96, 52, 9, 255, 95, 54, 4, 255, 92, 51, 1, 255, 93, 50, 7, 255, 96, 51, 9, 255, 99, 53, 3, 255, 95, 52, 13, 255, 93, 55, 11, 255, 95, 57, 5, 255, 97, 52, 6, 255, 89, 41, 4, 255, 100, 51, 10, 255, 125, 54, 7, 255, 108, 47, 8, 255, 124, 59, 9, 255, 149, 63, 1, 255, 131, 52, 3, 255, 131, 59, 7, 255, 151, 70, 1, 255, 159, 63, 6, 255, 148, 65, 8, 255, 149, 66, 4, 255, 156, 67, 10, 255, 161, 72, 4, 255, 164, 73, 7, 255, 164, 68, 10, 255, 168, 70, 4, 255, 171, 77, 1, 255, 161, 79, 6, 255, 150, 70, 7, 255, 136, 66, 5, 255, 111, 59, 7, 255, 98, 52, 5, 255, 103, 52, 12, 255, 105, 56, 5, 255, 116, 62, 9, 255, 130, 65, 10, 255, 136, 67, 7, 255, 136, 69, 9, 255, 141, 69, 4, 255, 139, 72, 4, 255, 122, 68, 0, 255, 110, 63, 10, 255, 114, 67, 15, 255, 109, 64, 2, 255, 118, 68, 0, 255, 115, 64, 10, 255, 111, 59, 22, 255, 110, 67, 11, 255, 103, 68, 5, 255, 113, 65, 17, 255, 108, 65, 18, 255, 103, 68, 7, 255, 107, 67, 8, 255, 109, 68, 11, 255, 113, 66, 16, 255, 114, 65, 12, 255, 112, 63, 11, 255, 114, 71, 11, 255, 107, 69, 7, 255, 109, 69, 13, 255, 118, 71, 11, 255, 118, 72, 8, 255, 118, 71, 13, 255, 124, 74, 11, 255, 146, 75, 10, 255, 160, 78, 8, 255, 136, 76, 2, 255, 121, 74, 14, 255, 128, 80, 16, 255, 147, 77, 6, 255, 142, 76, 7, 255, 121, 75, 13, 255, 131, 82, 10, 255, 152, 76, 2, 255, 154, 78, 9, 255, 145, 82, 5, 255, 144, 80, 7, 255, 150, 82, 16, 255, 131, 77, 9, 255, 122, 77, 14, 255, 118, 73, 20, 255, 119, 80, 12, 255, 125, 81, 14, 255, 123, 79, 19, 255, 118, 77, 14, 255, 128, 81, 15, 255, 117, 82, 19, 255, 118, 83, 13, 255, 130, 87, 10, 255, 138, 90, 8, 255, 133, 91, 14, 255, 136, 87, 13, 255, 137, 87, 11, 255, 136, 92, 11, 255, 140, 88, 19, 255, 144, 91, 21, 255, 144, 90, 15, 255, 152, 89, 16, 255, 154, 93, 14, 255, 153, 97, 24, 255, 168, 99, 21, 255, 168, 104, 16, 255, 172, 105, 12, 255, 168, 103, 11, 255, 162, 103, 15, 255, 158, 100, 19, 255, 154, 99, 19, 255, 152, 102, 17, 255, 159, 104, 17, 255, 159, 100, 22, 255, 155, 104, 19, 255, 162, 105, 10, 255, 170, 104, 16, 255, 166, 106, 13, 255, 167, 106, 20, 255, 167, 104, 30, 255, 166, 105, 16, 255, 160, 106, 14, 255, 165, 105, 21, 255, 172, 110, 21, 255, 173, 110, 20, 255, 178, 113, 9, 255, 181, 114, 15, 255, 177, 113, 15, 255, 179, 119, 11, 255, 185, 125, 11, 255, 189, 128, 12, 255, 193, 131, 4, 255, 190, 126, 6, 255, 184, 123, 13, 255, 177, 118, 17, 255, 175, 116, 16, 255, 178, 113, 6, 255, 181, 110, 12, 255, 188, 101, 14, 255, 187, 103, 4, 255, 188, 116, 23, 255, 187, 114, 27, 255, 178, 101, 12, 255, 180, 105, 5, 255, 178, 100, 4, 255, 183, 97, 1, 255, 186, 100, 3, 255, 179, 101, 11, 255, 170, 101, 10, 255, 170, 102, 4, 255, 170, 98, 2, 255, 174, 99, 5, 255, 173, 97, 4, 255, 175, 98, 6, 255, 173, 96, 6, 255, 169, 91, 6, 255, 169, 95, 5, 255, 174, 101, 4, 255, 178, 98, 3, 255, 183, 95, 5, 255, 177, 89, 2, 255, 178, 96, 4, 255, 181, 103, 4, 255, 179, 101, 12, 255, 179, 102, 16, 255, 184, 108, 17, 255, 182, 107, 18, 255, 178, 104, 12, 255, 182, 104, 14, 255, 182, 102, 5, 255, 178, 96, 4, 255, 179, 98, 2, 255, 183, 100, 3, 255, 181, 93, 4, 255, 179, 74, 6, 255, 178, 85, 3, 255, 200, 110, 6, 255, 186, 88, 8, 255, 125, 55, 2, 255, 111, 52, 3, 255, 115, 57, 3, 255, 124, 57, 7, 255, 118, 51, 8, 255, 113, 48, 5, 255, 117, 54, 7, 255, 112, 51, 1, 255, 122, 59, 8, 255, 112, 53, 11, 255, 98, 46, 4, 255, 97, 46, 5, 255, 106, 54, 8, 255, 122, 63, 8, 255, 135, 70, 7, 255, 147, 78, 5, 255, 168, 93, 10, 255, 168, 88, 8, 255, 157, 82, 8, 255, 153, 89, 8, 255, 155, 93, 7, 255, 153, 86, 3, 255, 162, 96, 6, 255, 166, 98, 10, 255, 165, 93, 9, 255, 163, 89, 11, 255, 161, 87, 11, 255, 159, 87, 9, 255, 159, 84, 7, 255, 159, 87, 5, 255, 156, 87, 7, 255, 153, 85, 11, 255, 148, 80, 10, 255, 153, 85, 5, 255, 153, 88, 0, 255, 151, 86, 3, 255, 153, 84, 8, 255, 152, 81, 4, 255, 152, 79, 12, 255, 147, 80, 14, 255, 144, 85, 9, 255, 142, 83, 8, 255, 142, 80, 5, 255, 133, 77, 7, 255, 131, 76, 9, 255, 133, 72, 6, 255, 134, 71, 12, 255, 130, 67, 10, 255, 128, 68, 7, 255, 123, 67, 9, 255, 124, 64, 7, 255, 120, 58, 2, 255, 113, 57, 1, 255, 111, 57, 5, 255, 100, 43, 8, 255, 79, 39, 3, 255, 79, 38, 6, 255, 1, 5, 13, 255, 4, 3, 21, 255, 1, 6, 13, 255, 0, 4, 7, 255, 0, 3, 9, 255, 1, 2, 5, 255, 1, 1, 0, 255, 0, 0, 0, 255, 1, 1, 5, 255, 1, 2, 10, 255, 0, 2, 14, 255, 1, 5, 18, 255, 4, 7, 19, 255, 2, 5, 12, 255, 1, 5, 12, 255, 1, 5, 11, 255, 0, 4, 9, 255, 2, 5, 10, 255, 1, 4, 9, 255, 2, 2, 10, 255, 2, 3, 7, 255, 2, 4, 3, 255, 1, 3, 3, 255, 1, 2, 8, 255, 1, 1, 9, 255, 0, 1, 8, 255, 1, 2, 6, 255, 0, 1, 6, 255, 1, 2, 7, 255, 1, 2, 7, 255, 1, 2, 7, 255, 1, 2, 6, 255, 1, 2, 6, 255, 1, 2, 6, 255, 1, 2, 4, 255, 0, 1, 3, 255, 0, 1, 4, 255, 2, 3, 7, 255, 1, 1, 5, 255, 1, 1, 3, 255, 1, 1, 3, 255, 1, 1, 1, 255, 1, 1, 2, 255, 1, 1, 3, 255, 2, 0, 4, 255, 6, 2, 4, 255, 0, 2, 2, 255, 3, 2, 5, 255, 2, 0, 1, 255, 5, 2, 10, 255, 2, 4, 13, 255, 2, 0, 10, 255, 3, 3, 5, 255, 1, 0, 0, 255, 6, 93, 158, 255, 3, 166, 212, 255, 4, 8, 3, 255, 1, 0, 8, 255, 1, 47, 199, 255, 3, 28, 106, 255, 3, 0, 0, 255, 2, 2, 5, 255, 1, 2, 0, 255, 3, 2, 3, 255, 3, 3, 2, 255, 3, 1, 2, 255, 2, 0, 1, 255, 2, 0, 0, 255, 1, 0, 0, 255, 2, 2, 2, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 2, 0, 1, 255, 1, 0, 0, 255, 1, 1, 1, 255, 3, 3, 3, 255, 1, 1, 1, 255, 1, 0, 0, 255, 4, 3, 1, 255, 5, 4, 2, 255, 3, 2, 0, 255, 4, 3, 0, 255, 3, 3, 2, 255, 7, 9, 6, 255, 13, 12, 6, 255, 17, 15, 7, 255, 23, 24, 6, 255, 32, 38, 15, 255, 39, 47, 32, 255, 41, 66, 47, 255, 42, 74, 59, 255, 44, 83, 68, 255, 41, 91, 70, 255, 53, 96, 74, 255, 51, 97, 75, 255, 48, 100, 82, 255, 50, 112, 93, 255, 68, 140, 121, 255, 92, 167, 152, 255, 115, 182, 168, 255, 134, 192, 171, 255, 130, 185, 155, 255, 113, 172, 138, 255, 95, 148, 111, 255, 75, 121, 80, 255, 56, 92, 51, 255, 34, 53, 19, 255, 38, 43, 8, 255, 38, 36, 10, 255, 36, 36, 4, 255, 40, 37, 11, 255, 42, 35, 10, 255, 46, 39, 2, 255, 56, 39, 2, 255, 59, 36, 6, 255, 57, 32, 6, 255, 53, 31, 5, 255, 44, 31, 6, 255, 45, 34, 2, 255, 53, 35, 1, 255, 45, 32, 2, 255, 41, 36, 7, 255, 48, 36, 9, 255, 47, 32, 13, 255, 56, 41, 10, 255, 68, 45, 2, 255, 73, 46, 2, 255, 81, 49, 8, 255, 83, 49, 4, 255, 82, 53, 2, 255, 81, 54, 1, 255, 85, 55, 2, 255, 87, 55, 3, 255, 89, 57, 6, 255, 86, 50, 15, 255, 94, 57, 7, 255, 100, 62, 2, 255, 106, 63, 7, 255, 108, 54, 6, 255, 83, 48, 12, 255, 76, 43, 10, 255, 73, 47, 9, 255, 78, 45, 10, 255, 82, 40, 10, 255, 77, 47, 6, 255, 72, 45, 4, 255, 76, 47, 10, 255, 80, 53, 3, 255, 79, 46, 0, 255, 84, 47, 9, 255, 83, 46, 8, 255, 76, 41, 8, 255, 80, 47, 9, 255, 88, 47, 3, 255, 100, 59, 9, 255, 108, 67, 7, 255, 107, 64, 13, 255, 100, 58, 10, 255, 92, 52, 6, 255, 89, 52, 5, 255, 89, 54, 3, 255, 90, 54, 4, 255, 93, 56, 7, 255, 92, 55, 6, 255, 90, 54, 9, 255, 91, 51, 14, 255, 101, 49, 10, 255, 100, 53, 2, 255, 95, 52, 5, 255, 95, 49, 17, 255, 93, 49, 14, 255, 96, 54, 4, 255, 98, 52, 13, 255, 91, 44, 7, 255, 92, 48, 9, 255, 124, 59, 4, 255, 126, 53, 1, 255, 107, 50, 3, 255, 129, 64, 10, 255, 155, 65, 14, 255, 135, 56, 11, 255, 128, 61, 6, 255, 153, 69, 1, 255, 159, 70, 5, 255, 149, 66, 15, 255, 153, 71, 12, 255, 152, 75, 8, 255, 154, 66, 7, 255, 161, 66, 6, 255, 157, 71, 5, 255, 166, 75, 0, 255, 176, 78, 6, 255, 166, 75, 4, 255, 149, 72, 4, 255, 152, 75, 11, 255, 145, 72, 8, 255, 138, 65, 1, 255, 149, 70, 7, 255, 137, 64, 6, 255, 117, 63, 7, 255, 118, 62, 14, 255, 135, 65, 7, 255, 148, 69, 14, 255, 146, 71, 4, 255, 132, 74, 3, 255, 112, 67, 10, 255, 115, 64, 12, 255, 117, 62, 14, 255, 108, 62, 4, 255, 110, 65, 8, 255, 106, 65, 9, 255, 110, 65, 14, 255, 111, 69, 11, 255, 106, 68, 6, 255, 112, 70, 13, 255, 106, 68, 9, 255, 109, 68, 14, 255, 118, 66, 10, 255, 113, 65, 18, 255, 108, 68, 5, 255, 110, 70, 4, 255, 112, 68, 9, 255, 116, 70, 16, 255, 112, 72, 13, 255, 118, 76, 6, 255, 143, 75, 5, 255, 158, 74, 10, 255, 145, 75, 2, 255, 130, 78, 1, 255, 126, 76, 16, 255, 133, 81, 8, 255, 127, 76, 3, 255, 122, 77, 13, 255, 113, 76, 6, 255, 118, 77, 16, 255, 130, 77, 13, 255, 144, 79, 11, 255, 126, 79, 6, 255, 128, 81, 8, 255, 127, 76, 9, 255, 126, 77, 15, 255, 124, 74, 12, 255, 120, 77, 8, 255, 136, 80, 15, 255, 166, 84, 12, 255, 157, 87, 10, 255, 128, 78, 21, 255, 130, 81, 14, 255, 147, 85, 13, 255, 156, 91, 9, 255, 167, 92, 10, 255, 173, 89, 5, 255, 166, 91, 8, 255, 156, 90, 8, 255, 141, 89, 13, 255, 138, 92, 13, 255, 144, 93, 18, 255, 153, 95, 22, 255, 167, 96, 15, 255, 174, 97, 6, 255, 177, 98, 14, 255, 173, 96, 16, 255, 180, 102, 3, 255, 181, 99, 10, 255, 178, 99, 7, 255, 178, 98, 6, 255, 174, 100, 13, 255, 160, 104, 11, 255, 158, 101, 12, 255, 170, 101, 19, 255, 169, 103, 25, 255, 156, 102, 18, 255, 159, 105, 21, 255, 160, 104, 26, 255, 158, 104, 13, 255, 162, 106, 17, 255, 159, 109, 19, 255, 163, 105, 20, 255, 165, 103, 26, 255, 155, 104, 14, 255, 169, 107, 23, 255, 179, 118, 13, 255, 172, 112, 6, 255, 177, 116, 16, 255, 178, 116, 14, 255, 178, 117, 12, 255, 181, 120, 11, 255, 184, 121, 10, 255, 190, 124, 12, 255, 195, 129, 7, 255, 198, 133, 5, 255, 191, 127, 16, 255, 180, 120, 10, 255, 177, 120, 5, 255, 175, 115, 6, 255, 182, 115, 1, 255, 188, 104, 6, 255, 184, 98, 11, 255, 187, 117, 7, 255, 189, 120, 16, 255, 178, 112, 15, 255, 171, 107, 4, 255, 175, 104, 13, 255, 182, 106, 10, 255, 178, 102, 7, 255, 172, 101, 17, 255, 171, 105, 11, 255, 174, 104, 3, 255, 176, 104, 5, 255, 176, 102, 4, 255, 174, 98, 1, 255, 176, 98, 4, 255, 178, 100, 7, 255, 177, 97, 6, 255, 175, 95, 4, 255, 177, 98, 3, 255, 176, 99, 5, 255, 177, 100, 7, 255, 176, 97, 7, 255, 183, 101, 5, 255, 181, 98, 0, 255, 179, 96, 10, 255, 187, 105, 18, 255, 188, 108, 12, 255, 183, 104, 9, 255, 182, 104, 7, 255, 183, 103, 15, 255, 184, 103, 9, 255, 174, 93, 4, 255, 175, 95, 6, 255, 182, 101, 8, 255, 185, 99, 2, 255, 168, 74, 4, 255, 178, 90, 4, 255, 201, 116, 2, 255, 188, 92, 1, 255, 122, 54, 7, 255, 113, 55, 11, 255, 120, 52, 5, 255, 125, 55, 3, 255, 122, 50, 2, 255, 117, 49, 5, 255, 116, 54, 3, 255, 118, 61, 1, 255, 121, 61, 7, 255, 115, 62, 12, 255, 106, 55, 8, 255, 104, 51, 8, 255, 118, 57, 8, 255, 144, 76, 12, 255, 157, 86, 3, 255, 160, 86, 8, 255, 168, 90, 13, 255, 171, 92, 7, 255, 166, 94, 8, 255, 158, 95, 8, 255, 154, 90, 8, 255, 158, 89, 13, 255, 164, 94, 11, 255, 165, 93, 8, 255, 165, 94, 6, 255, 163, 90, 5, 255, 161, 88, 8, 255, 161, 87, 12, 255, 159, 88, 3, 255, 156, 85, 6, 255, 152, 84, 10, 255, 152, 85, 7, 255, 149, 83, 9, 255, 150, 83, 11, 255, 150, 83, 8, 255, 151, 79, 8, 255, 146, 79, 8, 255, 143, 80, 5, 255, 145, 80, 8, 255, 141, 77, 8, 255, 142, 79, 4, 255, 143, 73, 6, 255, 140, 73, 8, 255, 130, 72, 13, 255, 123, 71, 12, 255, 126, 68, 7, 255, 123, 64, 7, 255, 123, 62, 6, 255, 119, 62, 3, 255, 117, 64, 5, 255, 115, 60, 3, 255, 112, 56, 6, 255, 99, 45, 8, 255, 82, 32, 1, 255, 90, 38, 3, 255, 93, 37, 6, 255, 85, 28, 1, 255, 11, 6, 21, 255, 0, 5, 13, 255, 1, 4, 10, 255, 2, 7, 19, 255, 1, 3, 11, 255, 4, 2, 7, 255, 4, 2, 6, 255, 1, 1, 5, 255, 0, 0, 4, 255, 1, 0, 3, 255, 0, 1, 5, 255, 2, 4, 9, 255, 1, 3, 11, 255, 3, 4, 14, 255, 1, 6, 13, 255, 2, 7, 13, 255, 1, 6, 10, 255, 1, 5, 10, 255, 2, 3, 8, 255, 4, 4, 11, 255, 4, 5, 10, 255, 1, 5, 6, 255, 1, 5, 5, 255, 1, 4, 8, 255, 1, 3, 9, 255, 1, 2, 9, 255, 1, 2, 6, 255, 1, 2, 6, 255, 1, 2, 6, 255, 1, 2, 6, 255, 1, 2, 6, 255, 1, 2, 6, 255, 0, 1, 6, 255, 1, 2, 6, 255, 2, 3, 7, 255, 1, 2, 5, 255, 1, 2, 5, 255, 1, 2, 6, 255, 0, 1, 5, 255, 0, 1, 5, 255, 1, 1, 3, 255, 1, 1, 3, 255, 1, 1, 3, 255, 1, 1, 3, 255, 1, 0, 3, 255, 1, 1, 2, 255, 2, 1, 5, 255, 4, 0, 3, 255, 4, 6, 15, 255, 1, 10, 21, 255, 5, 4, 12, 255, 3, 2, 3, 255, 2, 1, 0, 255, 3, 5, 51, 255, 9, 174, 242, 255, 3, 62, 77, 255, 2, 0, 0, 255, 7, 15, 111, 255, 6, 42, 195, 255, 2, 7, 18, 255, 0, 1, 1, 255, 0, 1, 0, 255, 4, 0, 3, 255, 5, 0, 3, 255, 1, 0, 0, 255, 2, 0, 1, 255, 2, 0, 1, 255, 2, 0, 1, 255, 2, 0, 1, 255, 1, 1, 1, 255, 2, 1, 2, 255, 2, 0, 1, 255, 2, 0, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 2, 2, 2, 255, 2, 2, 1, 255, 3, 2, 0, 255, 3, 2, 0, 255, 5, 2, 0, 255, 8, 4, 1, 255, 8, 4, 1, 255, 7, 6, 1, 255, 8, 12, 4, 255, 17, 18, 13, 255, 27, 29, 20, 255, 31, 39, 21, 255, 35, 50, 27, 255, 42, 64, 38, 255, 42, 73, 48, 255, 45, 77, 56, 255, 47, 84, 63, 255, 44, 86, 60, 255, 54, 86, 63, 255, 54, 88, 66, 255, 54, 98, 79, 255, 60, 125, 104, 255, 75, 154, 133, 255, 98, 172, 155, 255, 118, 182, 167, 255, 121, 184, 158, 255, 111, 173, 138, 255, 101, 161, 121, 255, 85, 136, 97, 255, 73, 115, 73, 255, 60, 94, 37, 255, 39, 60, 14, 255, 33, 39, 13, 255, 35, 39, 9, 255, 32, 33, 9, 255, 35, 33, 2, 255, 44, 39, 4, 255, 48, 38, 3, 255, 59, 41, 5, 255, 55, 35, 6, 255, 43, 30, 7, 255, 46, 29, 9, 255, 51, 31, 6, 255, 45, 31, 5, 255, 38, 31, 5, 255, 42, 36, 7, 255, 34, 31, 8, 255, 48, 36, 4, 255, 58, 39, 8, 255, 62, 44, 5, 255, 70, 47, 6, 255, 76, 44, 7, 255, 81, 46, 5, 255, 76, 46, 2, 255, 79, 52, 4, 255, 82, 55, 1, 255, 86, 54, 6, 255, 88, 55, 8, 255, 89, 56, 4, 255, 86, 56, 11, 255, 86, 56, 4, 255, 98, 69, 0, 255, 103, 66, 4, 255, 101, 53, 8, 255, 78, 50, 8, 255, 74, 44, 7, 255, 82, 49, 0, 255, 81, 43, 2, 255, 77, 38, 7, 255, 75, 49, 10, 255, 68, 43, 5, 255, 73, 43, 7, 255, 80, 47, 6, 255, 79, 46, 4, 255, 82, 46, 7, 255, 85, 51, 6, 255, 81, 47, 4, 255, 86, 52, 6, 255, 93, 54, 8, 255, 102, 63, 3, 255, 107, 66, 4, 255, 104, 62, 4, 255, 97, 57, 8, 255, 91, 53, 8, 255, 88, 54, 5, 255, 90, 54, 8, 255, 93, 54, 10, 255, 93, 52, 7, 255, 91, 51, 2, 255, 92, 53, 3, 255, 95, 55, 6, 255, 99, 53, 4, 255, 97, 50, 6, 255, 98, 49, 8, 255, 92, 50, 8, 255, 92, 50, 5, 255, 95, 54, 7, 255, 86, 53, 13, 255, 90, 52, 4, 255, 100, 52, 7, 255, 106, 52, 7, 255, 92, 48, 2, 255, 101, 55, 12, 255, 126, 59, 10, 255, 126, 55, 4, 255, 125, 52, 7, 255, 131, 63, 3, 255, 142, 66, 9, 255, 137, 57, 11, 255, 131, 54, 13, 255, 144, 61, 7, 255, 148, 65, 7, 255, 158, 70, 4, 255, 159, 70, 7, 255, 153, 72, 12, 255, 155, 72, 3, 255, 151, 69, 12, 255, 146, 71, 11, 255, 161, 68, 8, 255, 164, 71, 3, 255, 164, 70, 6, 255, 165, 69, 2, 255, 168, 73, 5, 255, 169, 78, 9, 255, 170, 77, 5, 255, 150, 76, 8, 255, 139, 71, 13, 255, 140, 63, 9, 255, 136, 69, 8, 255, 144, 71, 7, 255, 147, 79, 6, 255, 136, 72, 6, 255, 126, 70, 15, 255, 120, 68, 20, 255, 115, 61, 14, 255, 113, 67, 18, 255, 112, 66, 14, 255, 109, 67, 6, 255, 108, 65, 14, 255, 113, 66, 26, 255, 111, 71, 13, 255, 110, 67, 12, 255, 110, 64, 12, 255, 109, 67, 13, 255, 110, 69, 15, 255, 111, 71, 10, 255, 111, 65, 7, 255, 119, 68, 20, 255, 125, 73, 17, 255, 117, 74, 10, 255, 129, 78, 11, 255, 129, 72, 6, 255, 120, 74, 7, 255, 125, 77, 10, 255, 128, 77, 19, 255, 126, 76, 13, 255, 124, 75, 14, 255, 124, 76, 21, 255, 123, 77, 11, 255, 118, 70, 18, 255, 123, 76, 15, 255, 125, 77, 4, 255, 122, 76, 6, 255, 136, 84, 14, 255, 137, 77, 13, 255, 121, 74, 15, 255, 121, 75, 10, 255, 150, 86, 8, 255, 156, 84, 5, 255, 157, 84, 7, 255, 138, 81, 6, 255, 128, 80, 6, 255, 153, 88, 9, 255, 171, 87, 10, 255, 171, 89, 13, 255, 162, 92, 9, 255, 167, 89, 6, 255, 168, 88, 10, 255, 148, 88, 9, 255, 141, 88, 14, 255, 137, 88, 20, 255, 140, 88, 18, 255, 158, 90, 12, 255, 181, 94, 16, 255, 180, 94, 12, 255, 179, 98, 10, 255, 177, 94, 4, 255, 176, 97, 5, 255, 177, 99, 7, 255, 174, 99, 5, 255, 179, 98, 5, 255, 177, 103, 13, 255, 157, 100, 19, 255, 153, 100, 20, 255, 163, 99, 11, 255, 163, 101, 17, 255, 157, 104, 12, 255, 162, 101, 18, 255, 161, 102, 14, 255, 158, 103, 12, 255, 167, 105, 21, 255, 163, 106, 18, 255, 163, 103, 18, 255, 166, 104, 17, 255, 162, 107, 23, 255, 173, 110, 14, 255, 178, 112, 12, 255, 178, 115, 5, 255, 177, 114, 10, 255, 179, 115, 10, 255, 181, 115, 1, 255, 183, 115, 12, 255, 186, 120, 14, 255, 193, 129, 13, 255, 197, 130, 9, 255, 199, 131, 7, 255, 198, 132, 10, 255, 189, 122, 14, 255, 183, 116, 19, 255, 179, 116, 9, 255, 188, 118, 10, 255, 196, 119, 19, 255, 183, 106, 13, 255, 190, 122, 14, 255, 189, 123, 16, 255, 182, 114, 20, 255, 172, 106, 17, 255, 170, 105, 16, 255, 175, 107, 10, 255, 177, 103, 10, 255, 178, 105, 10, 255, 177, 106, 5, 255, 174, 102, 7, 255, 175, 103, 6, 255, 174, 103, 6, 255, 171, 102, 5, 255, 170, 100, 4, 255, 170, 100, 6, 255, 173, 95, 2, 255, 175, 92, 1, 255, 177, 96, 5, 255, 176, 101, 7, 255, 174, 101, 6, 255, 175, 99, 6, 255, 181, 101, 4, 255, 176, 97, 3, 255, 176, 95, 13, 255, 185, 109, 18, 255, 184, 111, 9, 255, 179, 105, 7, 255, 183, 106, 13, 255, 184, 102, 13, 255, 184, 103, 11, 255, 177, 96, 7, 255, 177, 97, 5, 255, 181, 94, 3, 255, 190, 98, 4, 255, 190, 102, 4, 255, 201, 107, 5, 255, 199, 100, 2, 255, 166, 71, 11, 255, 113, 53, 5, 255, 114, 53, 7, 255, 119, 51, 3, 255, 119, 52, 7, 255, 119, 51, 1, 255, 120, 57, 2, 255, 124, 64, 8, 255, 121, 62, 9, 255, 120, 60, 5, 255, 131, 67, 4, 255, 137, 75, 9, 255, 138, 75, 7, 255, 145, 76, 8, 255, 151, 77, 6, 255, 159, 82, 8, 255, 166, 88, 13, 255, 168, 89, 11, 255, 168, 88, 6, 255, 161, 88, 5, 255, 160, 95, 10, 255, 155, 90, 8, 255, 156, 88, 9, 255, 159, 86, 10, 255, 160, 86, 10, 255, 163, 88, 11, 255, 161, 85, 6, 255, 159, 86, 7, 255, 155, 83, 6, 255, 157, 87, 2, 255, 159, 88, 8, 255, 154, 84, 14, 255, 152, 82, 11, 255, 152, 85, 6, 255, 147, 82, 9, 255, 143, 75, 9, 255, 146, 75, 7, 255, 143, 78, 10, 255, 140, 77, 6, 255, 140, 77, 7, 255, 138, 75, 9, 255, 135, 73, 8, 255, 132, 71, 11, 255, 133, 70, 10, 255, 128, 68, 11, 255, 123, 65, 8, 255, 124, 64, 3, 255, 121, 62, 5, 255, 115, 63, 11, 255, 110, 61, 10, 255, 109, 60, 9, 255, 106, 52, 1, 255, 106, 49, 5, 255, 102, 45, 12, 255, 84, 34, 6, 255, 68, 28, 0, 255, 81, 24, 4, 255, 82, 26, 3, 255, 7, 9, 8, 255, 6, 4, 3, 255, 2, 2, 9, 255, 0, 3, 9, 255, 1, 4, 11, 255, 2, 4, 11, 255, 3, 2, 11, 255, 0, 1, 8, 255, 0, 1, 5, 255, 0, 1, 2, 255, 1, 0, 0, 255, 3, 2, 4, 255, 0, 0, 4, 255, 3, 2, 10, 255, 2, 4, 11, 255, 2, 7, 11, 255, 2, 7, 11, 255, 1, 5, 10, 255, 1, 4, 9, 255, 3, 4, 11, 255, 1, 4, 12, 255, 2, 4, 14, 255, 2, 5, 13, 255, 1, 4, 10, 255, 0, 4, 7, 255, 1, 4, 7, 255, 3, 3, 8, 255, 1, 2, 6, 255, 1, 2, 6, 255, 1, 2, 6, 255, 0, 1, 5, 255, 0, 1, 5, 255, 1, 2, 8, 255, 1, 2, 7, 255, 1, 2, 6, 255, 1, 2, 6, 255, 1, 2, 6, 255, 1, 2, 6, 255, 0, 1, 5, 255, 0, 1, 5, 255, 1, 1, 3, 255, 1, 1, 3, 255, 1, 1, 3, 255, 1, 1, 3, 255, 1, 0, 2, 255, 4, 0, 2, 255, 4, 1, 1, 255, 0, 8, 9, 255, 7, 28, 55, 255, 3, 19, 49, 255, 3, 13, 23, 255, 4, 3, 4, 255, 0, 0, 0, 255, 7, 93, 160, 255, 7, 142, 202, 255, 0, 3, 9, 255, 6, 1, 25, 255, 2, 28, 198, 255, 0, 17, 71, 255, 4, 0, 0, 255, 5, 4, 3, 255, 3, 2, 0, 255, 2, 0, 5, 255, 2, 0, 5, 255, 2, 0, 1, 255, 2, 0, 1, 255, 3, 1, 2, 255, 3, 1, 2, 255, 2, 0, 1, 255, 0, 0, 0, 255, 1, 0, 1, 255, 2, 0, 1, 255, 2, 0, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 2, 2, 1, 255, 1, 1, 0, 255, 2, 2, 0, 255, 4, 3, 1, 255, 6, 4, 2, 255, 7, 3, 1, 255, 6, 4, 1, 255, 13, 12, 7, 255, 15, 16, 6, 255, 17, 20, 9, 255, 24, 31, 21, 255, 30, 43, 23, 255, 32, 50, 34, 255, 32, 57, 45, 255, 35, 69, 41, 255, 35, 72, 46, 255, 42, 76, 51, 255, 42, 82, 55, 255, 43, 83, 57, 255, 50, 84, 61, 255, 48, 87, 63, 255, 59, 106, 92, 255, 72, 137, 124, 255, 82, 155, 139, 255, 103, 171, 155, 255, 116, 183, 159, 255, 107, 174, 139, 255, 100, 160, 124, 255, 93, 150, 111, 255, 75, 130, 79, 255, 66, 109, 63, 255, 61, 88, 32, 255, 47, 62, 10, 255, 34, 42, 9, 255, 31, 34, 12, 255, 41, 33, 10, 255, 43, 33, 6, 255, 48, 43, 2, 255, 51, 43, 4, 255, 41, 33, 3, 255, 42, 38, 6, 255, 38, 31, 5, 255, 42, 32, 6, 255, 49, 33, 7, 255, 48, 33, 7, 255, 43, 33, 7, 255, 46, 35, 6, 255, 58, 33, 3, 255, 55, 39, 7, 255, 62, 45, 15, 255, 71, 42, 6, 255, 75, 45, 5, 255, 69, 47, 5, 255, 70, 49, 7, 255, 74, 51, 5, 255, 80, 53, 5, 255, 84, 51, 7, 255, 87, 51, 5, 255, 89, 55, 6, 255, 86, 53, 4, 255, 88, 56, 2, 255, 94, 59, 8, 255, 102, 63, 3, 255, 97, 61, 7, 255, 86, 49, 6, 255, 78, 45, 0, 255, 76, 47, 6, 255, 76, 43, 4, 255, 78, 51, 4, 255, 72, 45, 4, 255, 76, 40, 3, 255, 84, 45, 4, 255, 80, 45, 6, 255, 79, 44, 12, 255, 79, 47, 10, 255, 81, 50, 7, 255, 82, 49, 5, 255, 85, 48, 0, 255, 92, 51, 6, 255, 92, 55, 11, 255, 98, 60, 3, 255, 105, 66, 2, 255, 104, 64, 3, 255, 94, 58, 5, 255, 88, 57, 5, 255, 90, 56, 6, 255, 91, 53, 9, 255, 92, 50, 10, 255, 94, 50, 10, 255, 95, 52, 8, 255, 97, 54, 7, 255, 95, 53, 6, 255, 96, 52, 6, 255, 101, 53, 9, 255, 96, 51, 6, 255, 97, 50, 12, 255, 89, 48, 9, 255, 97, 56, 7, 255, 100, 55, 10, 255, 100, 53, 3, 255, 103, 55, 12, 255, 92, 48, 12, 255, 86, 49, 5, 255, 98, 52, 4, 255, 123, 58, 12, 255, 137, 57, 15, 255, 125, 57, 10, 255, 115, 55, 10, 255, 128, 58, 11, 255, 116, 52, 6, 255, 102, 42, 12, 255, 125, 54, 11, 255, 144, 62, 2, 255, 156, 71, 2, 255, 153, 68, 5, 255, 159, 69, 11, 255, 154, 70, 10, 255, 148, 70, 5, 255, 154, 64, 6, 255, 155, 67, 13, 255, 161, 69, 6, 255, 161, 68, 6, 255, 158, 71, 6, 255, 156, 68, 10, 255, 161, 70, 5, 255, 160, 75, 1, 255, 168, 75, 1, 255, 172, 76, 8, 255, 161, 78, 3, 255, 158, 80, 8, 255, 141, 73, 11, 255, 139, 67, 10, 255, 139, 62, 2, 255, 137, 66, 7, 255, 149, 78, 6, 255, 137, 75, 12, 255, 116, 68, 14, 255, 118, 67, 12, 255, 118, 72, 6, 255, 114, 70, 11, 255, 117, 67, 12, 255, 116, 70, 9, 255, 118, 69, 5, 255, 105, 71, 9, 255, 108, 66, 14, 255, 111, 69, 11, 255, 110, 73, 10, 255, 110, 67, 14, 255, 127, 71, 12, 255, 152, 81, 11, 255, 130, 72, 6, 255, 119, 74, 9, 255, 121, 71, 7, 255, 131, 76, 8, 255, 134, 75, 6, 255, 132, 78, 12, 255, 133, 78, 5, 255, 128, 75, 4, 255, 125, 77, 7, 255, 123, 78, 10, 255, 119, 74, 13, 255, 122, 77, 6, 255, 127, 80, 5, 255, 126, 80, 10, 255, 127, 76, 11, 255, 134, 76, 16, 255, 125, 74, 17, 255, 122, 74, 12, 255, 149, 86, 11, 255, 144, 79, 7, 255, 136, 78, 10, 255, 137, 83, 14, 255, 140, 84, 10, 255, 167, 87, 11, 255, 164, 83, 11, 255, 156, 79, 8, 255, 159, 87, 9, 255, 164, 89, 9, 255, 152, 85, 11, 255, 136, 88, 9, 255, 142, 93, 8, 255, 160, 95, 8, 255, 158, 94, 15, 255, 155, 92, 9, 255, 170, 92, 10, 255, 175, 95, 11, 255, 177, 104, 8, 255, 173, 98, 10, 255, 176, 96, 15, 255, 173, 106, 14, 255, 177, 107, 11, 255, 179, 105, 7, 255, 174, 106, 13, 255, 168, 99, 23, 255, 155, 101, 17, 255, 154, 97, 34, 255, 157, 101, 22, 255, 160, 102, 17, 255, 161, 101, 17, 255, 164, 102, 16, 255, 159, 102, 16, 255, 160, 104, 12, 255, 164, 105, 11, 255, 160, 106, 13, 255, 170, 106, 16, 255, 178, 110, 25, 255, 172, 108, 8, 255, 173, 108, 10, 255, 176, 112, 15, 255, 174, 112, 6, 255, 176, 114, 8, 255, 181, 118, 5, 255, 183, 116, 9, 255, 185, 120, 11, 255, 193, 128, 13, 255, 199, 133, 7, 255, 205, 134, 12, 255, 204, 132, 8, 255, 192, 119, 15, 255, 186, 112, 18, 255, 187, 117, 14, 255, 192, 122, 8, 255, 194, 127, 15, 255, 184, 117, 12, 255, 192, 122, 31, 255, 196, 128, 22, 255, 182, 119, 10, 255, 173, 106, 16, 255, 173, 105, 12, 255, 178, 106, 8, 255, 179, 107, 8, 255, 180, 110, 6, 255, 179, 108, 8, 255, 179, 105, 4, 255, 175, 104, 2, 255, 175, 102, 2, 255, 176, 103, 2, 255, 175, 101, 2, 255, 175, 99, 2, 255, 173, 99, 6, 255, 174, 95, 6, 255, 176, 95, 7, 255, 174, 99, 7, 255, 174, 100, 5, 255, 178, 100, 4, 255, 182, 102, 4, 255, 180, 103, 0, 255, 180, 101, 10, 255, 184, 107, 16, 255, 184, 109, 9, 255, 181, 104, 11, 255, 182, 105, 7, 255, 186, 106, 13, 255, 183, 105, 7, 255, 180, 99, 2, 255, 182, 96, 2, 255, 180, 84, 2, 255, 184, 83, 2, 255, 190, 86, 1, 255, 186, 92, 2, 255, 194, 90, 10, 255, 159, 65, 7, 255, 112, 48, 8, 255, 115, 52, 4, 255, 113, 53, 4, 255, 108, 54, 4, 255, 115, 56, 7, 255, 119, 59, 7, 255, 118, 57, 7, 255, 127, 65, 12, 255, 131, 67, 6, 255, 135, 66, 4, 255, 133, 67, 0, 255, 143, 78, 3, 255, 152, 82, 5, 255, 156, 79, 5, 255, 161, 82, 13, 255, 160, 81, 10, 255, 162, 83, 9, 255, 164, 85, 7, 255, 159, 84, 2, 255, 156, 88, 8, 255, 154, 87, 9, 255, 157, 89, 8, 255, 160, 89, 5, 255, 159, 87, 7, 255, 161, 86, 8, 255, 156, 82, 4, 255, 155, 82, 7, 255, 153, 81, 11, 255, 152, 81, 8, 255, 152, 80, 5, 255, 152, 79, 6, 255, 151, 81, 10, 255, 147, 79, 6, 255, 146, 78, 6, 255, 142, 75, 6, 255, 140, 75, 5, 255, 142, 77, 9, 255, 141, 75, 12, 255, 142, 78, 13, 255, 136, 74, 10, 255, 129, 71, 13, 255, 129, 67, 12, 255, 128, 63, 5, 255, 122, 62, 2, 255, 122, 68, 4, 255, 122, 66, 2, 255, 116, 62, 7, 255, 109, 59, 9, 255, 103, 54, 5, 255, 102, 50, 6, 255, 100, 47, 5, 255, 100, 44, 4, 255, 97, 41, 3, 255, 85, 34, 2, 255, 67, 20, 6, 255, 60, 14, 1, 255, 57, 21, 5, 255, 11, 16, 11, 255, 3, 1, 0, 255, 4, 4, 6, 255, 2, 2, 11, 255, 1, 2, 13, 255, 0, 7, 10, 255, 0, 2, 5, 255, 0, 3, 5, 255, 3, 4, 7, 255, 1, 2, 5, 255, 0, 0, 4, 255, 1, 0, 5, 255, 1, 0, 5, 255, 0, 1, 6, 255, 1, 2, 7, 255, 2, 4, 8, 255, 2, 5, 8, 255, 2, 5, 9, 255, 2, 6, 11, 255, 0, 4, 9, 255, 1, 4, 12, 255, 1, 5, 15, 255, 2, 6, 14, 255, 1, 5, 10, 255, 3, 6, 10, 255, 3, 6, 11, 255, 0, 3, 8, 255, 0, 2, 6, 255, 0, 3, 6, 255, 1, 2, 6, 255, 2, 3, 7, 255, 3, 4, 8, 255, 2, 3, 7, 255, 1, 2, 5, 255, 0, 0, 4, 255, 0, 1, 4, 255, 1, 1, 6, 255, 1, 2, 7, 255, 2, 1, 6, 255, 1, 0, 5, 255, 1, 0, 5, 255, 2, 1, 4, 255, 1, 1, 3, 255, 1, 1, 2, 255, 0, 1, 3, 255, 3, 1, 5, 255, 3, 0, 0, 255, 4, 27, 62, 255, 7, 45, 78, 255, 3, 30, 52, 255, 5, 28, 48, 255, 7, 13, 27, 255, 7, 25, 78, 255, 5, 164, 254, 255, 2, 60, 81, 255, 7, 0, 0, 255, 8, 17, 132, 255, 5, 22, 138, 255, 6, 2, 0, 255, 6, 5, 2, 255, 3, 2, 4, 255, 5, 0, 3, 255, 2, 1, 3, 255, 2, 2, 1, 255, 3, 1, 2, 255, 2, 0, 1, 255, 2, 0, 1, 255, 2, 0, 1, 255, 2, 1, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 2, 2, 2, 255, 0, 2, 1, 255, 1, 1, 1, 255, 1, 1, 0, 255, 3, 2, 0, 255, 3, 3, 1, 255, 2, 1, 0, 255, 4, 3, 1, 255, 3, 3, 0, 255, 7, 4, 0, 255, 10, 6, 3, 255, 11, 10, 5, 255, 16, 16, 8, 255, 19, 22, 12, 255, 24, 30, 19, 255, 28, 40, 22, 255, 29, 50, 23, 255, 32, 58, 36, 255, 33, 64, 48, 255, 35, 70, 49, 255, 39, 71, 50, 255, 44, 71, 51, 255, 43, 76, 53, 255, 41, 78, 55, 255, 46, 81, 63, 255, 46, 92, 73, 255, 62, 118, 100, 255, 75, 147, 126, 255, 90, 162, 138, 255, 110, 171, 146, 255, 111, 172, 140, 255, 98, 160, 124, 255, 96, 151, 114, 255, 85, 138, 90, 255, 74, 122, 70, 255, 64, 100, 53, 255, 58, 80, 30, 255, 50, 62, 10, 255, 41, 46, 6, 255, 36, 36, 14, 255, 31, 34, 5, 255, 49, 42, 8, 255, 56, 39, 8, 255, 44, 37, 1, 255, 47, 41, 6, 255, 46, 30, 8, 255, 48, 32, 2, 255, 50, 36, 2, 255, 47, 38, 9, 255, 46, 34, 6, 255, 52, 32, 1, 255, 55, 36, 6, 255, 57, 36, 4, 255, 55, 40, 2, 255, 62, 42, 4, 255, 68, 40, 1, 255, 70, 41, 7, 255, 77, 49, 7, 255, 74, 51, 2, 255, 72, 50, 4, 255, 79, 50, 4, 255, 85, 51, 3, 255, 88, 51, 6, 255, 88, 53, 7, 255, 87, 56, 4, 255, 88, 57, 2, 255, 92, 56, 9, 255, 95, 58, 8, 255, 76, 49, 8, 255, 71, 44, 7, 255, 76, 46, 5, 255, 72, 43, 7, 255, 81, 41, 12, 255, 80, 42, 12, 255, 70, 48, 3, 255, 73, 47, 1, 255, 82, 47, 5, 255, 81, 47, 3, 255, 79, 45, 7, 255, 77, 44, 5, 255, 83, 50, 5, 255, 89, 53, 10, 255, 95, 54, 7, 255, 95, 51, 9, 255, 91, 53, 10, 255, 95, 57, 8, 255, 103, 63, 3, 255, 106, 64, 8, 255, 96, 59, 3, 255, 90, 60, 4, 255, 92, 55, 5, 255, 94, 53, 5, 255, 96, 54, 12, 255, 96, 51, 12, 255, 97, 50, 9, 255, 98, 51, 9, 255, 98, 51, 9, 255, 96, 52, 6, 255, 101, 52, 16, 255, 104, 53, 14, 255, 97, 55, 10, 255, 97, 53, 12, 255, 101, 56, 14, 255, 103, 54, 2, 255, 104, 51, 10, 255, 98, 51, 12, 255, 93, 53, 7, 255, 91, 53, 2, 255, 104, 56, 8, 255, 116, 56, 4, 255, 126, 58, 3, 255, 124, 56, 1, 255, 116, 53, 1, 255, 115, 55, 5, 255, 115, 52, 11, 255, 133, 59, 11, 255, 129, 59, 7, 255, 148, 68, 6, 255, 144, 66, 3, 255, 141, 64, 16, 255, 148, 66, 9, 255, 138, 61, 4, 255, 135, 59, 6, 255, 145, 62, 5, 255, 165, 71, 6, 255, 157, 73, 1, 255, 155, 72, 1, 255, 161, 73, 6, 255, 159, 71, 5, 255, 155, 75, 5, 255, 155, 72, 6, 255, 158, 73, 7, 255, 145, 68, 3, 255, 136, 63, 6, 255, 159, 70, 12, 255, 172, 78, 10, 255, 169, 80, 7, 255, 150, 80, 11, 255, 113, 66, 5, 255, 128, 64, 15, 255, 151, 77, 10, 255, 133, 70, 13, 255, 134, 71, 4, 255, 134, 72, 5, 255, 129, 70, 9, 255, 129, 72, 6, 255, 114, 67, 14, 255, 114, 71, 6, 255, 111, 71, 6, 255, 115, 68, 8, 255, 116, 69, 3, 255, 108, 68, 6, 255, 112, 71, 6, 255, 130, 73, 4, 255, 144, 78, 10, 255, 137, 76, 6, 255, 133, 77, 9, 255, 131, 71, 11, 255, 144, 76, 9, 255, 139, 75, 1, 255, 131, 78, 13, 255, 134, 82, 11, 255, 134, 79, 6, 255, 131, 79, 4, 255, 124, 76, 9, 255, 120, 75, 16, 255, 123, 77, 21, 255, 124, 76, 6, 255, 127, 82, 10, 255, 125, 74, 6, 255, 124, 78, 8, 255, 126, 80, 10, 255, 131, 76, 12, 255, 129, 79, 13, 255, 124, 78, 16, 255, 133, 82, 12, 255, 133, 78, 5, 255, 136, 79, 14, 255, 155, 88, 15, 255, 134, 80, 11, 255, 130, 84, 9, 255, 158, 87, 12, 255, 157, 89, 11, 255, 143, 87, 12, 255, 139, 91, 12, 255, 145, 92, 5, 255, 152, 95, 6, 255, 153, 92, 18, 255, 161, 89, 12, 255, 172, 92, 15, 255, 177, 93, 14, 255, 180, 94, 4, 255, 183, 95, 12, 255, 176, 100, 11, 255, 178, 106, 13, 255, 183, 106, 10, 255, 178, 102, 8, 255, 173, 100, 12, 255, 180, 104, 13, 255, 166, 100, 10, 255, 161, 105, 13, 255, 160, 106, 16, 255, 159, 102, 16, 255, 158, 104, 14, 255, 162, 108, 14, 255, 162, 104, 17, 255, 177, 110, 12, 255, 178, 107, 7, 255, 165, 104, 14, 255, 179, 110, 20, 255, 174, 106, 15, 255, 168, 107, 12, 255, 168, 109, 10, 255, 171, 113, 14, 255, 173, 118, 13, 255, 171, 112, 13, 255, 177, 118, 8, 255, 181, 123, 9, 255, 185, 124, 7, 255, 194, 130, 2, 255, 205, 138, 6, 255, 207, 139, 3, 255, 196, 122, 12, 255, 187, 113, 9, 255, 187, 113, 8, 255, 189, 119, 9, 255, 195, 124, 7, 255, 197, 127, 13, 255, 199, 130, 20, 255, 196, 122, 17, 255, 191, 115, 17, 255, 192, 113, 11, 255, 184, 106, 11, 255, 182, 109, 5, 255, 181, 108, 10, 255, 181, 104, 8, 255, 187, 105, 2, 255, 187, 100, 5, 255, 183, 97, 4, 255, 182, 99, 5, 255, 179, 102, 5, 255, 178, 103, 6, 255, 176, 101, 6, 255, 177, 101, 6, 255, 173, 99, 4, 255, 173, 98, 5, 255, 174, 97, 7, 255, 175, 97, 6, 255, 179, 100, 7, 255, 180, 102, 6, 255, 182, 102, 5, 255, 184, 103, 4, 255, 184, 103, 12, 255, 186, 104, 15, 255, 187, 105, 16, 255, 185, 104, 15, 255, 185, 103, 10, 255, 182, 103, 6, 255, 181, 102, 5, 255, 185, 103, 5, 255, 184, 93, 2, 255, 176, 77, 2, 255, 177, 77, 1, 255, 185, 86, 3, 255, 191, 89, 2, 255, 194, 89, 7, 255, 143, 68, 9, 255, 113, 54, 8, 255, 118, 51, 7, 255, 105, 47, 7, 255, 118, 53, 8, 255, 123, 59, 3, 255, 123, 60, 6, 255, 123, 62, 5, 255, 128, 68, 4, 255, 132, 71, 6, 255, 136, 71, 8, 255, 130, 66, 4, 255, 135, 70, 7, 255, 146, 77, 10, 255, 150, 75, 3, 255, 159, 82, 3, 255, 161, 86, 8, 255, 159, 83, 10, 255, 158, 79, 3, 255, 156, 79, 0, 255, 147, 75, 2, 255, 139, 70, 3, 255, 143, 74, 3, 255, 151, 80, 3, 255, 156, 83, 8, 255, 159, 87, 6, 255, 158, 87, 2, 255, 154, 84, 3, 255, 150, 81, 8, 255, 147, 78, 10, 255, 148, 79, 11, 255, 147, 78, 4, 255, 146, 78, 3, 255, 147, 78, 10, 255, 149, 79, 10, 255, 143, 77, 3, 255, 136, 72, 3, 255, 133, 71, 5, 255, 135, 70, 11, 255, 136, 73, 10, 255, 130, 69, 6, 255, 126, 67, 12, 255, 124, 65, 9, 255, 124, 65, 6, 255, 116, 65, 4, 255, 114, 65, 4, 255, 116, 59, 2, 255, 116, 55, 7, 255, 106, 51, 3, 255, 105, 51, 2, 255, 103, 49, 7, 255, 95, 41, 3, 255, 92, 41, 4, 255, 89, 42, 4, 255, 80, 33, 4, 255, 65, 21, 5, 255, 45, 14, 1, 255, 34, 10, 0, 255, 13, 50, 46, 255, 12, 23, 64, 255, 8, 10, 18, 255, 3, 5, 3, 255, 2, 5, 19, 255, 4, 3, 19, 255, 0, 2, 4, 255, 2, 3, 7, 255, 2, 3, 9, 255, 2, 3, 10, 255, 3, 4, 10, 255, 1, 1, 4, 255, 1, 2, 3, 255, 1, 2, 4, 255, 0, 0, 3, 255, 0, 0, 3, 255, 1, 1, 4, 255, 1, 4, 7, 255, 1, 7, 10, 255, 2, 5, 10, 255, 2, 5, 12, 255, 2, 7, 12, 255, 1, 7, 8, 255, 0, 3, 7, 255, 1, 3, 14, 255, 3, 5, 17, 255, 1, 4, 11, 255, 1, 3, 9, 255, 1, 5, 8, 255, 2, 3, 7, 255, 1, 2, 6, 255, 2, 3, 7, 255, 1, 1, 2, 255, 1, 1, 2, 255, 2, 2, 2, 255, 2, 2, 2, 255, 1, 0, 4, 255, 3, 2, 5, 255, 2, 1, 6, 255, 1, 0, 5, 255, 1, 0, 5, 255, 1, 0, 4, 255, 0, 0, 2, 255, 0, 0, 0, 255, 1, 2, 1, 255, 2, 0, 0, 255, 7, 10, 31, 255, 4, 55, 105, 255, 9, 52, 82, 255, 4, 46, 81, 255, 5, 41, 70, 255, 3, 11, 59, 255, 6, 109, 202, 255, 5, 155, 183, 255, 3, 0, 0, 255, 10, 3, 42, 255, 1, 29, 187, 255, 10, 9, 22, 255, 9, 2, 0, 255, 2, 3, 3, 255, 5, 0, 1, 255, 0, 1, 3, 255, 2, 2, 1, 255, 4, 1, 3, 255, 2, 0, 1, 255, 2, 1, 1, 255, 2, 2, 1, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 0, 1, 255, 2, 1, 2, 255, 1, 1, 1, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 1, 1, 255, 2, 3, 2, 255, 1, 3, 2, 255, 2, 3, 2, 255, 3, 1, 2, 255, 3, 1, 0, 255, 5, 2, 1, 255, 6, 3, 2, 255, 6, 4, 1, 255, 6, 4, 1, 255, 9, 7, 3, 255, 14, 11, 7, 255, 17, 17, 11, 255, 22, 24, 16, 255, 25, 30, 17, 255, 27, 39, 18, 255, 25, 43, 20, 255, 30, 52, 36, 255, 33, 61, 36, 255, 34, 65, 35, 255, 38, 66, 48, 255, 43, 69, 46, 255, 47, 65, 42, 255, 44, 72, 45, 255, 41, 72, 47, 255, 46, 82, 61, 255, 52, 109, 86, 255, 75, 132, 114, 255, 82, 150, 129, 255, 96, 165, 136, 255, 116, 168, 136, 255, 108, 161, 119, 255, 90, 152, 102, 255, 84, 143, 91, 255, 79, 129, 78, 255, 77, 114, 68, 255, 66, 96, 42, 255, 56, 81, 23, 255, 46, 62, 6, 255, 43, 43, 14, 255, 39, 36, 6, 255, 41, 34, 6, 255, 47, 37, 7, 255, 48, 40, 5, 255, 50, 36, 4, 255, 54, 36, 5, 255, 53, 33, 5, 255, 50, 32, 4, 255, 51, 36, 7, 255, 46, 31, 3, 255, 48, 33, 10, 255, 45, 34, 7, 255, 51, 39, 6, 255, 58, 39, 6, 255, 57, 42, 6, 255, 61, 41, 1, 255, 72, 49, 3, 255, 67, 46, 5, 255, 74, 47, 2, 255, 83, 53, 3, 255, 80, 54, 4, 255, 81, 53, 2, 255, 89, 57, 9, 255, 88, 54, 7, 255, 86, 52, 4, 255, 89, 57, 6, 255, 92, 55, 2, 255, 94, 52, 6, 255, 81, 48, 3, 255, 68, 46, 9, 255, 78, 47, 15, 255, 74, 44, 11, 255, 67, 43, 3, 255, 80, 47, 4, 255, 83, 46, 3, 255, 79, 47, 5, 255, 78, 49, 8, 255, 79, 49, 5, 255, 77, 46, 2, 255, 80, 43, 3, 255, 87, 46, 9, 255, 91, 46, 6, 255, 97, 53, 4, 255, 97, 54, 8, 255, 91, 51, 4, 255, 94, 56, 10, 255, 98, 57, 9, 255, 105, 60, 10, 255, 106, 62, 6, 255, 100, 60, 6, 255, 89, 57, 7, 255, 91, 54, 8, 255, 93, 54, 11, 255, 94, 55, 13, 255, 92, 53, 8, 255, 94, 55, 5, 255, 98, 57, 7, 255, 101, 56, 7, 255, 108, 57, 8, 255, 110, 54, 8, 255, 106, 54, 9, 255, 101, 57, 6, 255, 98, 57, 5, 255, 104, 58, 9, 255, 103, 57, 3, 255, 95, 55, 7, 255, 94, 54, 5, 255, 99, 59, 5, 255, 97, 56, 11, 255, 99, 54, 12, 255, 111, 54, 13, 255, 122, 56, 12, 255, 108, 55, 7, 255, 89, 47, 8, 255, 101, 57, 7, 255, 116, 59, 12, 255, 139, 64, 7, 255, 135, 55, 8, 255, 136, 59, 5, 255, 127, 60, 6, 255, 108, 52, 7, 255, 102, 47, 6, 255, 106, 50, 8, 255, 117, 60, 5, 255, 138, 65, 5, 255, 151, 65, 5, 255, 147, 65, 5, 255, 148, 68, 6, 255, 146, 64, 10, 255, 139, 60, 5, 255, 152, 62, 2, 255, 163, 71, 9, 255, 157, 72, 7, 255, 157, 72, 4, 255, 159, 73, 7, 255, 145, 66, 3, 255, 134, 59, 7, 255, 154, 73, 4, 255, 173, 81, 8, 255, 167, 78, 6, 255, 154, 71, 13, 255, 137, 66, 7, 255, 114, 59, 24, 255, 118, 62, 17, 255, 136, 68, 10, 255, 150, 77, 4, 255, 152, 76, 4, 255, 133, 73, 10, 255, 119, 68, 8, 255, 127, 69, 12, 255, 127, 70, 16, 255, 123, 70, 12, 255, 119, 75, 7, 255, 120, 76, 10, 255, 126, 73, 13, 255, 129, 74, 10, 255, 149, 79, 17, 255, 141, 76, 3, 255, 127, 78, 3, 255, 134, 77, 6, 255, 140, 76, 4, 255, 152, 82, 15, 255, 152, 80, 8, 255, 137, 76, 10, 255, 127, 76, 22, 255, 123, 77, 14, 255, 123, 78, 6, 255, 126, 79, 8, 255, 127, 81, 11, 255, 126, 80, 12, 255, 125, 77, 12, 255, 139, 80, 16, 255, 153, 84, 14, 255, 135, 83, 12, 255, 124, 81, 15, 255, 131, 81, 10, 255, 131, 82, 19, 255, 125, 85, 2, 255, 131, 86, 9, 255, 133, 81, 17, 255, 125, 82, 7, 255, 132, 86, 11, 255, 144, 86, 12, 255, 140, 88, 6, 255, 144, 89, 9, 255, 145, 93, 13, 255, 143, 93, 14, 255, 142, 90, 14, 255, 147, 91, 14, 255, 151, 93, 9, 255, 157, 98, 12, 255, 171, 99, 17, 255, 176, 93, 13, 255, 177, 100, 18, 255, 174, 104, 11, 255, 185, 102, 9, 255, 182, 98, 6, 255, 173, 95, 10, 255, 176, 98, 13, 255, 179, 104, 7, 255, 172, 101, 10, 255, 166, 105, 9, 255, 161, 103, 16, 255, 161, 104, 19, 255, 162, 107, 14, 255, 164, 106, 16, 255, 160, 104, 8, 255, 169, 107, 13, 255, 174, 108, 22, 255, 174, 110, 12, 255, 176, 108, 14, 255, 170, 107, 20, 255, 166, 110, 7, 255, 167, 108, 14, 255, 172, 112, 13, 255, 176, 115, 8, 255, 177, 116, 8, 255, 178, 115, 15, 255, 179, 119, 14, 255, 188, 123, 15, 255, 194, 124, 13, 255, 204, 135, 5, 255, 205, 134, 6, 255, 198, 126, 7, 255, 196, 124, 16, 255, 188, 121, 15, 255, 186, 122, 12, 255, 194, 117, 8, 255, 196, 115, 14, 255, 195, 112, 11, 255, 196, 110, 5, 255, 195, 114, 12, 255, 188, 108, 11, 255, 185, 106, 7, 255, 185, 110, 10, 255, 180, 108, 9, 255, 181, 107, 3, 255, 189, 110, 4, 255, 186, 102, 6, 255, 179, 97, 5, 255, 179, 100, 6, 255, 178, 104, 7, 255, 174, 103, 6, 255, 174, 102, 6, 255, 174, 101, 6, 255, 178, 102, 3, 255, 176, 104, 2, 255, 174, 102, 2, 255, 178, 99, 5, 255, 183, 102, 9, 255, 181, 104, 9, 255, 178, 103, 7, 255, 179, 104, 2, 255, 181, 106, 5, 255, 184, 108, 12, 255, 185, 107, 17, 255, 184, 104, 14, 255, 184, 104, 4, 255, 183, 104, 7, 255, 183, 103, 12, 255, 180, 95, 6, 255, 175, 85, 2, 255, 175, 80, 5, 255, 176, 84, 3, 255, 180, 87, 3, 255, 190, 84, 9, 255, 164, 71, 4, 255, 127, 63, 8, 255, 112, 55, 2, 255, 110, 49, 4, 255, 103, 52, 12, 255, 120, 62, 8, 255, 127, 64, 3, 255, 133, 66, 6, 255, 138, 67, 12, 255, 145, 70, 9, 255, 157, 80, 4, 255, 163, 85, 6, 255, 150, 75, 2, 255, 146, 74, 7, 255, 154, 81, 16, 255, 155, 81, 13, 255, 160, 86, 11, 255, 161, 91, 6, 255, 163, 90, 10, 255, 156, 78, 8, 255, 150, 71, 4, 255, 137, 59, 1, 255, 132, 60, 3, 255, 139, 70, 1, 255, 151, 78, 5, 255, 152, 78, 12, 255, 149, 76, 9, 255, 150, 78, 5, 255, 149, 80, 5, 255, 148, 80, 8, 255, 144, 76, 9, 255, 143, 75, 5, 255, 140, 76, 3, 255, 142, 79, 5, 255, 142, 77, 4, 255, 144, 76, 6, 255, 143, 74, 5, 255, 139, 72, 3, 255, 132, 71, 7, 255, 127, 67, 10, 255, 128, 69, 6, 255, 129, 67, 2, 255, 129, 65, 11, 255, 124, 65, 8, 255, 125, 63, 7, 255, 117, 57, 10, 255, 107, 52, 6, 255, 105, 50, 1, 255, 102, 51, 1, 255, 96, 48, 3, 255, 93, 43, 3, 255, 92, 41, 5, 255, 90, 40, 3, 255, 88, 39, 2, 255, 85, 37, 2, 255, 82, 34, 5, 255, 64, 23, 3, 255, 51, 18, 1, 255, 52, 16, 4, 255, 55, 165, 219, 255, 13, 57, 84, 255, 3, 0, 0, 255, 7, 3, 8, 255, 3, 6, 7, 255, 2, 2, 11, 255, 2, 1, 6, 255, 2, 1, 12, 255, 3, 1, 7, 255, 1, 3, 4, 255, 2, 3, 8, 255, 2, 2, 10, 255, 0, 1, 6, 255, 0, 0, 5, 255, 0, 0, 3, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 3, 255, 1, 0, 6, 255, 1, 4, 6, 255, 1, 5, 8, 255, 1, 5, 8, 255, 0, 4, 8, 255, 1, 5, 9, 255, 2, 7, 12, 255, 2, 7, 13, 255, 1, 5, 12, 255, 0, 4, 12, 255, 2, 5, 12, 255, 2, 5, 12, 255, 0, 1, 7, 255, 1, 2, 6, 255, 1, 1, 3, 255, 0, 0, 3, 255, 1, 1, 5, 255, 2, 3, 6, 255, 0, 1, 3, 255, 0, 2, 3, 255, 1, 1, 2, 255, 0, 0, 5, 255, 0, 1, 3, 255, 0, 1, 2, 255, 1, 2, 6, 255, 0, 1, 3, 255, 2, 0, 3, 255, 0, 0, 10, 255, 13, 55, 99, 255, 12, 82, 118, 255, 12, 65, 94, 255, 7, 57, 91, 255, 9, 46, 74, 255, 4, 23, 135, 255, 0, 196, 242, 255, 2, 35, 76, 255, 13, 0, 0, 255, 8, 23, 155, 255, 5, 28, 112, 255, 12, 1, 0, 255, 6, 5, 5, 255, 5, 3, 2, 255, 8, 2, 0, 255, 6, 1, 2, 255, 3, 2, 2, 255, 0, 0, 2, 255, 4, 1, 2, 255, 3, 1, 2, 255, 2, 0, 1, 255, 1, 0, 0, 255, 2, 0, 1, 255, 2, 0, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 2, 2, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 0, 0, 255, 3, 1, 2, 255, 2, 2, 1, 255, 2, 2, 0, 255, 3, 0, 0, 255, 5, 2, 3, 255, 8, 3, 4, 255, 5, 1, 1, 255, 8, 7, 3, 255, 6, 6, 1, 255, 11, 10, 8, 255, 19, 18, 11, 255, 20, 24, 6, 255, 22, 29, 12, 255, 25, 35, 19, 255, 32, 44, 20, 255, 36, 45, 30, 255, 37, 54, 38, 255, 33, 57, 28, 255, 36, 60, 30, 255, 33, 64, 36, 255, 36, 66, 49, 255, 40, 60, 33, 255, 44, 65, 33, 255, 41, 78, 46, 255, 46, 95, 72, 255, 64, 112, 91, 255, 86, 137, 115, 255, 90, 151, 125, 255, 98, 161, 131, 255, 107, 164, 125, 255, 97, 150, 98, 255, 90, 142, 91, 255, 81, 131, 85, 255, 75, 122, 71, 255, 69, 105, 61, 255, 68, 100, 30, 255, 56, 80, 23, 255, 44, 57, 17, 255, 38, 40, 14, 255, 35, 36, 12, 255, 46, 35, 5, 255, 51, 36, 6, 255, 45, 35, 6, 255, 46, 36, 4, 255, 53, 36, 7, 255, 57, 33, 6, 255, 53, 35, 6, 255, 50, 33, 9, 255, 53, 35, 11, 255, 46, 33, 6, 255, 47, 37, 4, 255, 59, 44, 10, 255, 61, 38, 7, 255, 61, 40, 7, 255, 64, 43, 1, 255, 70, 48, 4, 255, 72, 44, 7, 255, 78, 49, 6, 255, 86, 57, 6, 255, 82, 54, 2, 255, 80, 53, 3, 255, 84, 56, 6, 255, 84, 54, 2, 255, 85, 53, 0, 255, 88, 57, 4, 255, 88, 54, 6, 255, 85, 46, 3, 255, 80, 46, 5, 255, 77, 44, 8, 255, 82, 45, 4, 255, 79, 45, 8, 255, 75, 45, 6, 255, 73, 42, 2, 255, 78, 48, 8, 255, 77, 45, 9, 255, 75, 42, 5, 255, 77, 44, 4, 255, 81, 47, 8, 255, 84, 45, 6, 255, 91, 52, 7, 255, 92, 52, 5, 255, 93, 54, 2, 255, 92, 54, 2, 255, 91, 56, 1, 255, 90, 58, 5, 255, 96, 58, 7, 255, 103, 60, 3, 255, 108, 62, 4, 255, 102, 62, 3, 255, 94, 60, 3, 255, 93, 55, 5, 255, 96, 55, 5, 255, 93, 54, 11, 255, 95, 54, 10, 255, 100, 55, 5, 255, 100, 56, 9, 255, 97, 56, 5, 255, 100, 56, 7, 255, 106, 57, 7, 255, 100, 55, 6, 255, 99, 56, 4, 255, 98, 56, 5, 255, 98, 60, 9, 255, 104, 57, 9, 255, 105, 60, 9, 255, 100, 54, 4, 255, 102, 55, 5, 255, 98, 53, 4, 255, 98, 55, 5, 255, 102, 52, 10, 255, 97, 52, 12, 255, 84, 49, 14, 255, 97, 48, 7, 255, 127, 70, 11, 255, 135, 71, 5, 255, 141, 67, 8, 255, 114, 47, 9, 255, 89, 50, 7, 255, 82, 57, 5, 255, 100, 52, 5, 255, 109, 52, 6, 255, 126, 64, 10, 255, 140, 65, 6, 255, 142, 65, 2, 255, 148, 69, 3, 255, 159, 68, 4, 255, 161, 73, 8, 255, 144, 65, 14, 255, 136, 61, 6, 255, 137, 60, 6, 255, 134, 58, 8, 255, 138, 61, 10, 255, 149, 60, 17, 255, 156, 68, 4, 255, 153, 69, 5, 255, 154, 69, 11, 255, 157, 73, 4, 255, 157, 71, 7, 255, 159, 73, 6, 255, 166, 78, 9, 255, 175, 81, 9, 255, 159, 77, 5, 255, 123, 68, 14, 255, 129, 67, 17, 255, 146, 70, 3, 255, 142, 72, 7, 255, 147, 74, 17, 255, 137, 72, 8, 255, 144, 74, 5, 255, 150, 74, 14, 255, 117, 72, 12, 255, 116, 75, 8, 255, 122, 68, 16, 255, 120, 70, 16, 255, 140, 72, 7, 255, 144, 75, 10, 255, 130, 75, 2, 255, 140, 82, 8, 255, 150, 81, 8, 255, 161, 82, 4, 255, 159, 85, 3, 255, 154, 82, 2, 255, 135, 76, 10, 255, 127, 77, 24, 255, 129, 78, 15, 255, 132, 79, 4, 255, 124, 79, 8, 255, 124, 81, 13, 255, 150, 82, 9, 255, 139, 80, 15, 255, 150, 76, 13, 255, 163, 80, 9, 255, 132, 78, 15, 255, 129, 82, 3, 255, 132, 80, 6, 255, 131, 82, 6, 255, 125, 81, 9, 255, 141, 88, 14, 255, 157, 89, 12, 255, 159, 91, 12, 255, 138, 86, 11, 255, 139, 83, 15, 255, 137, 86, 12, 255, 136, 90, 12, 255, 145, 93, 10, 255, 162, 91, 18, 255, 170, 92, 15, 255, 160, 93, 14, 255, 146, 95, 10, 255, 152, 101, 13, 255, 165, 103, 17, 255, 162, 98, 15, 255, 162, 103, 18, 255, 173, 106, 14, 255, 182, 103, 7, 255, 183, 105, 17, 255, 183, 108, 14, 255, 183, 106, 9, 255, 170, 101, 15, 255, 163, 101, 12, 255, 162, 104, 13, 255, 155, 100, 15, 255, 158, 102, 25, 255, 162, 107, 6, 255, 166, 104, 12, 255, 166, 107, 15, 255, 163, 107, 11, 255, 170, 106, 12, 255, 178, 110, 12, 255, 171, 108, 7, 255, 167, 108, 11, 255, 167, 110, 11, 255, 172, 110, 5, 255, 176, 112, 11, 255, 173, 109, 10, 255, 175, 112, 17, 255, 181, 117, 12, 255, 187, 123, 14, 255, 192, 120, 10, 255, 182, 102, 11, 255, 202, 130, 8, 255, 206, 137, 12, 255, 202, 134, 2, 255, 198, 129, 4, 255, 194, 124, 13, 255, 188, 119, 7, 255, 189, 117, 1, 255, 198, 124, 9, 255, 187, 109, 20, 255, 193, 115, 22, 255, 193, 116, 12, 255, 184, 108, 13, 255, 187, 107, 5, 255, 185, 100, 7, 255, 183, 108, 9, 255, 180, 113, 1, 255, 183, 109, 4, 255, 189, 112, 5, 255, 182, 110, 3, 255, 178, 106, 0, 255, 179, 107, 3, 255, 179, 106, 4, 255, 177, 104, 2, 255, 177, 103, 2, 255, 182, 104, 5, 255, 177, 100, 2, 255, 177, 99, 4, 255, 181, 102, 8, 255, 181, 103, 7, 255, 181, 104, 6, 255, 181, 105, 3, 255, 182, 103, 1, 255, 184, 105, 11, 255, 182, 110, 14, 255, 184, 108, 10, 255, 186, 101, 8, 255, 182, 100, 5, 255, 180, 103, 4, 255, 183, 101, 7, 255, 180, 89, 5, 255, 163, 77, 6, 255, 162, 77, 15, 255, 185, 94, 9, 255, 172, 81, 5, 255, 150, 74, 6, 255, 140, 72, 9, 255, 124, 65, 5, 255, 100, 44, 2, 255, 109, 50, 12, 255, 128, 73, 13, 255, 126, 67, 4, 255, 122, 64, 0, 255, 133, 69, 1, 255, 152, 79, 5, 255, 168, 89, 11, 255, 171, 92, 13, 255, 167, 88, 11, 255, 164, 86, 9, 255, 161, 83, 9, 255, 165, 84, 10, 255, 171, 91, 9, 255, 169, 94, 10, 255, 166, 92, 6, 255, 168, 93, 9, 255, 163, 91, 12, 255, 160, 83, 6, 255, 158, 75, 14, 255, 140, 67, 4, 255, 136, 65, 0, 255, 140, 68, 8, 255, 143, 71, 9, 255, 142, 76, 5, 255, 144, 77, 7, 255, 144, 75, 4, 255, 143, 76, 10, 255, 139, 74, 9, 255, 140, 75, 2, 255, 140, 75, 0, 255, 139, 76, 5, 255, 136, 72, 7, 255, 136, 72, 9, 255, 135, 69, 8, 255, 133, 74, 9, 255, 127, 74, 7, 255, 128, 69, 3, 255, 125, 65, 6, 255, 129, 65, 11, 255, 125, 64, 3, 255, 119, 60, 3, 255, 115, 57, 1, 255, 112, 53, 1, 255, 109, 51, 4, 255, 107, 51, 5, 255, 98, 49, 1, 255, 95, 47, 2, 255, 90, 44, 1, 255, 87, 34, 2, 255, 88, 37, 5, 255, 84, 35, 3, 255, 76, 29, 1, 255, 67, 26, 1, 255, 64, 22, 2, 255, 50, 16, 1, 255, 43, 12, 2, 255, 38, 86, 132, 255, 23, 138, 170, 255, 2, 27, 33, 255, 5, 0, 9, 255, 0, 1, 3, 255, 1, 3, 4, 255, 3, 4, 6, 255, 2, 3, 5, 255, 1, 2, 11, 255, 3, 4, 5, 255, 2, 3, 10, 255, 1, 1, 4, 255, 1, 3, 2, 255, 0, 0, 6, 255, 0, 0, 3, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 1, 0, 3, 255, 0, 1, 3, 255, 0, 4, 6, 255, 2, 6, 10, 255, 3, 6, 11, 255, 1, 6, 12, 255, 0, 5, 11, 255, 0, 5, 11, 255, 1, 5, 12, 255, 0, 4, 10, 255, 0, 3, 10, 255, 2, 5, 12, 255, 1, 3, 8, 255, 3, 4, 7, 255, 2, 3, 5, 255, 0, 1, 5, 255, 1, 2, 6, 255, 2, 3, 7, 255, 0, 1, 4, 255, 0, 2, 3, 255, 1, 1, 2, 255, 2, 1, 4, 255, 2, 2, 7, 255, 1, 1, 3, 255, 2, 0, 4, 255, 4, 2, 7, 255, 2, 0, 0, 255, 3, 24, 61, 255, 27, 86, 143, 255, 13, 89, 109, 255, 14, 71, 114, 255, 10, 75, 113, 255, 2, 21, 106, 255, 5, 119, 227, 255, 8, 130, 183, 255, 6, 0, 0, 255, 9, 3, 63, 255, 3, 32, 198, 255, 10, 16, 12, 255, 13, 12, 5, 255, 6, 6, 5, 255, 11, 7, 4, 255, 9, 5, 2, 255, 6, 1, 0, 255, 4, 2, 3, 255, 1, 1, 1, 255, 2, 0, 1, 255, 3, 1, 2, 255, 2, 0, 1, 255, 2, 0, 1, 255, 2, 0, 1, 255, 0, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 2, 2, 2, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 0, 0, 255, 3, 1, 2, 255, 3, 1, 1, 255, 2, 2, 0, 255, 6, 3, 2, 255, 6, 1, 2, 255, 6, 2, 1, 255, 8, 5, 0, 255, 8, 8, 6, 255, 11, 10, 9, 255, 17, 16, 10, 255, 19, 20, 8, 255, 21, 24, 11, 255, 26, 34, 19, 255, 31, 42, 22, 255, 33, 42, 25, 255, 35, 44, 29, 255, 38, 53, 33, 255, 31, 54, 31, 255, 34, 60, 35, 255, 31, 60, 39, 255, 35, 64, 39, 255, 36, 63, 35, 255, 38, 66, 45, 255, 45, 83, 57, 255, 55, 105, 78, 255, 68, 123, 95, 255, 82, 139, 107, 255, 93, 151, 122, 255, 100, 159, 130, 255, 96, 153, 109, 255, 86, 138, 86, 255, 86, 133, 85, 255, 80, 127, 67, 255, 72, 113, 61, 255, 61, 93, 51, 255, 67, 94, 26, 255, 61, 82, 17, 255, 50, 60, 13, 255, 39, 41, 14, 255, 42, 39, 13, 255, 46, 37, 4, 255, 46, 38, 4, 255, 48, 35, 7, 255, 50, 37, 6, 255, 50, 38, 6, 255, 48, 32, 4, 255, 51, 35, 5, 255, 52, 32, 6, 255, 52, 34, 5, 255, 60, 36, 3, 255, 72, 41, 6, 255, 72, 43, 5, 255, 62, 37, 4, 255, 68, 45, 9, 255, 66, 42, 5, 255, 68, 42, 8, 255, 75, 46, 8, 255, 81, 51, 3, 255, 87, 53, 1, 255, 85, 51, 2, 255, 86, 52, 4, 255, 86, 52, 3, 255, 86, 54, 2, 255, 92, 58, 7, 255, 89, 54, 5, 255, 79, 47, 4, 255, 75, 46, 4, 255, 79, 47, 6, 255, 76, 48, 3, 255, 73, 50, 7, 255, 72, 48, 6, 255, 72, 41, 5, 255, 73, 42, 1, 255, 76, 47, 10, 255, 74, 43, 13, 255, 77, 45, 5, 255, 80, 48, 5, 255, 82, 45, 8, 255, 86, 45, 3, 255, 89, 49, 3, 255, 92, 53, 3, 255, 87, 49, 4, 255, 90, 50, 9, 255, 86, 49, 5, 255, 93, 56, 9, 255, 100, 60, 7, 255, 106, 64, 4, 255, 101, 60, 1, 255, 99, 60, 6, 255, 94, 57, 7, 255, 97, 56, 7, 255, 96, 56, 4, 255, 95, 54, 10, 255, 96, 53, 8, 255, 98, 53, 3, 255, 98, 55, 4, 255, 99, 57, 3, 255, 102, 55, 9, 255, 106, 58, 5, 255, 111, 57, 4, 255, 107, 56, 14, 255, 98, 55, 7, 255, 102, 54, 5, 255, 102, 52, 11, 255, 105, 57, 7, 255, 104, 55, 3, 255, 103, 56, 10, 255, 101, 55, 9, 255, 101, 56, 7, 255, 97, 55, 8, 255, 88, 54, 8, 255, 91, 56, 13, 255, 90, 54, 10, 255, 105, 58, 4, 255, 123, 57, 6, 255, 106, 50, 12, 255, 91, 53, 4, 255, 88, 56, 6, 255, 97, 58, 3, 255, 146, 63, 2, 255, 140, 62, 7, 255, 139, 61, 9, 255, 138, 59, 9, 255, 143, 62, 9, 255, 145, 65, 4, 255, 137, 60, 8, 255, 145, 61, 4, 255, 141, 60, 6, 255, 127, 62, 2, 255, 127, 61, 5, 255, 129, 62, 5, 255, 132, 63, 15, 255, 137, 64, 2, 255, 140, 66, 4, 255, 149, 70, 8, 255, 156, 74, 7, 255, 158, 74, 6, 255, 155, 70, 4, 255, 156, 74, 10, 255, 153, 73, 7, 255, 153, 74, 10, 255, 174, 84, 11, 255, 170, 83, 2, 255, 154, 78, 3, 255, 157, 79, 9, 255, 134, 69, 11, 255, 130, 66, 9, 255, 128, 71, 9, 255, 143, 70, 11, 255, 148, 73, 10, 255, 145, 79, 8, 255, 126, 75, 3, 255, 121, 69, 16, 255, 125, 77, 9, 255, 127, 76, 8, 255, 130, 75, 19, 255, 139, 75, 13, 255, 145, 76, 11, 255, 142, 74, 7, 255, 147, 78, 7, 255, 145, 82, 10, 255, 137, 80, 6, 255, 134, 84, 11, 255, 130, 81, 7, 255, 130, 80, 6, 255, 130, 82, 9, 255, 129, 74, 16, 255, 124, 80, 10, 255, 142, 83, 9, 255, 142, 78, 9, 255, 132, 82, 5, 255, 134, 85, 9, 255, 131, 81, 13, 255, 132, 81, 9, 255, 136, 78, 13, 255, 133, 86, 14, 255, 138, 86, 18, 255, 146, 82, 8, 255, 163, 89, 4, 255, 165, 92, 3, 255, 143, 89, 12, 255, 138, 83, 8, 255, 142, 86, 14, 255, 151, 92, 20, 255, 156, 93, 8, 255, 166, 95, 12, 255, 165, 98, 11, 255, 160, 94, 19, 255, 156, 95, 19, 255, 151, 98, 2, 255, 157, 97, 11, 255, 166, 98, 18, 255, 168, 100, 10, 255, 169, 103, 14, 255, 179, 115, 17, 255, 191, 119, 6, 255, 188, 117, 9, 255, 172, 110, 11, 255, 167, 104, 12, 255, 165, 101, 16, 255, 164, 104, 11, 255, 161, 102, 8, 255, 167, 105, 23, 255, 165, 104, 22, 255, 168, 108, 10, 255, 164, 105, 16, 255, 166, 105, 19, 255, 171, 105, 21, 255, 171, 105, 14, 255, 168, 105, 9, 255, 168, 109, 7, 255, 171, 108, 20, 255, 174, 111, 13, 255, 175, 112, 9, 255, 173, 110, 11, 255, 171, 109, 15, 255, 180, 118, 7, 255, 189, 122, 8, 255, 187, 114, 4, 255, 180, 98, 16, 255, 192, 105, 9, 255, 198, 113, 9, 255, 205, 131, 4, 255, 201, 138, 1, 255, 196, 134, 6, 255, 192, 120, 8, 255, 192, 120, 7, 255, 200, 130, 12, 255, 202, 132, 13, 255, 200, 129, 11, 255, 203, 125, 14, 255, 196, 121, 16, 255, 192, 110, 12, 255, 185, 95, 3, 255, 188, 103, 2, 255, 186, 110, 4, 255, 185, 109, 7, 255, 187, 109, 4, 255, 185, 106, 1, 255, 187, 108, 3, 255, 188, 108, 7, 255, 180, 99, 2, 255, 179, 98, 3, 255, 184, 103, 4, 255, 180, 102, 2, 255, 179, 101, 1, 255, 180, 100, 4, 255, 182, 102, 8, 255, 181, 103, 5, 255, 182, 105, 3, 255, 184, 103, 4, 255, 187, 100, 6, 255, 188, 102, 9, 255, 184, 105, 12, 255, 186, 104, 10, 255, 187, 100, 9, 255, 188, 99, 10, 255, 188, 98, 12, 255, 185, 95, 6, 255, 186, 97, 1, 255, 189, 104, 7, 255, 180, 97, 4, 255, 194, 100, 10, 255, 174, 86, 6, 255, 138, 69, 8, 255, 158, 76, 6, 255, 135, 66, 2, 255, 118, 69, 9, 255, 147, 81, 11, 255, 142, 72, 6, 255, 132, 69, 3, 255, 132, 70, 6, 255, 150, 84, 10, 255, 172, 99, 11, 255, 177, 101, 8, 255, 171, 98, 7, 255, 171, 92, 8, 255, 182, 105, 13, 255, 186, 106, 13, 255, 182, 102, 6, 255, 179, 101, 2, 255, 172, 97, 5, 255, 172, 94, 6, 255, 174, 93, 7, 255, 168, 94, 10, 255, 167, 94, 2, 255, 172, 88, 9, 255, 165, 85, 11, 255, 153, 78, 3, 255, 149, 77, 7, 255, 146, 65, 9, 255, 133, 58, 4, 255, 131, 63, 10, 255, 135, 66, 4, 255, 141, 72, 2, 255, 143, 71, 7, 255, 139, 74, 5, 255, 132, 76, 1, 255, 132, 73, 4, 255, 133, 69, 7, 255, 133, 71, 7, 255, 134, 71, 2, 255, 133, 70, 7, 255, 130, 74, 11, 255, 126, 68, 3, 255, 119, 62, 2, 255, 114, 60, 6, 255, 113, 59, 1, 255, 107, 55, 3, 255, 104, 54, 2, 255, 99, 50, 1, 255, 97, 46, 5, 255, 93, 41, 6, 255, 86, 35, 5, 255, 80, 32, 11, 255, 73, 30, 10, 255, 72, 26, 5, 255, 70, 23, 4, 255, 64, 22, 4, 255, 62, 23, 5, 255, 55, 20, 5, 255, 39, 16, 9, 255, 27, 10, 4, 255, 20, 6, 4, 255, 3, 0, 0, 255, 9, 54, 83, 255, 9, 83, 134, 255, 3, 14, 15, 255, 3, 0, 0, 255, 2, 2, 10, 255, 1, 4, 6, 255, 4, 3, 3, 255, 3, 1, 11, 255, 2, 3, 10, 255, 4, 4, 6, 255, 1, 3, 7, 255, 0, 4, 8, 255, 1, 1, 6, 255, 1, 0, 4, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 5, 255, 1, 2, 7, 255, 2, 3, 8, 255, 1, 2, 9, 255, 1, 3, 11, 255, 1, 4, 11, 255, 0, 3, 10, 255, 0, 3, 8, 255, 0, 2, 9, 255, 0, 2, 10, 255, 1, 4, 10, 255, 0, 3, 8, 255, 2, 4, 8, 255, 2, 3, 7, 255, 2, 3, 7, 255, 2, 3, 7, 255, 1, 2, 6, 255, 0, 0, 4, 255, 0, 1, 2, 255, 0, 1, 2, 255, 1, 1, 2, 255, 0, 0, 5, 255, 5, 2, 4, 255, 4, 1, 2, 255, 2, 0, 3, 255, 1, 3, 12, 255, 11, 55, 110, 255, 20, 82, 134, 255, 22, 78, 116, 255, 17, 81, 125, 255, 12, 66, 112, 255, 7, 45, 173, 255, 3, 185, 244, 255, 3, 18, 44, 255, 4, 0, 0, 255, 1, 24, 174, 255, 5, 29, 109, 255, 19, 15, 4, 255, 17, 17, 13, 255, 16, 17, 11, 255, 13, 9, 5, 255, 9, 4, 1, 255, 11, 7, 4, 255, 6, 2, 2, 255, 2, 0, 0, 255, 1, 0, 0, 255, 3, 1, 1, 255, 2, 2, 0, 255, 0, 1, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 2, 2, 2, 255, 1, 0, 0, 255, 2, 0, 1, 255, 4, 2, 2, 255, 4, 3, 1, 255, 5, 3, 1, 255, 7, 3, 2, 255, 10, 7, 4, 255, 8, 7, 0, 255, 10, 10, 7, 255, 14, 15, 13, 255, 18, 21, 7, 255, 23, 28, 9, 255, 25, 32, 19, 255, 24, 34, 19, 255, 29, 40, 22, 255, 37, 47, 36, 255, 34, 48, 28, 255, 35, 50, 25, 255, 32, 53, 31, 255, 27, 55, 27, 255, 31, 54, 31, 255, 36, 59, 34, 255, 32, 64, 41, 255, 35, 77, 46, 255, 52, 94, 66, 255, 65, 113, 80, 255, 72, 133, 95, 255, 84, 144, 109, 255, 96, 154, 116, 255, 96, 154, 104, 255, 88, 143, 88, 255, 81, 129, 72, 255, 84, 127, 64, 255, 78, 121, 55, 255, 73, 108, 51, 255, 70, 96, 51, 255, 69, 90, 32, 255, 60, 76, 16, 255, 52, 59, 15, 255, 44, 41, 18, 255, 39, 39, 6, 255, 53, 44, 7, 255, 47, 36, 6, 255, 46, 36, 10, 255, 46, 38, 8, 255, 47, 38, 2, 255, 57, 39, 6, 255, 55, 40, 5, 255, 52, 40, 3, 255, 60, 40, 3, 255, 72, 43, 5, 255, 78, 45, 6, 255, 71, 44, 5, 255, 60, 38, 8, 255, 69, 48, 7, 255, 69, 46, 2, 255, 73, 45, 4, 255, 80, 50, 5, 255, 82, 48, 2, 255, 80, 47, 1, 255, 86, 54, 5, 255, 89, 55, 7, 255, 88, 54, 4, 255, 89, 57, 6, 255, 86, 55, 8, 255, 80, 50, 7, 255, 73, 46, 5, 255, 70, 48, 6, 255, 75, 44, 4, 255, 75, 45, 1, 255, 75, 49, 10, 255, 73, 46, 5, 255, 73, 44, 6, 255, 74, 46, 4, 255, 75, 45, 6, 255, 74, 44, 8, 255, 78, 46, 5, 255, 83, 50, 7, 255, 83, 52, 10, 255, 76, 49, 7, 255, 81, 51, 8, 255, 86, 54, 1, 255, 87, 52, 4, 255, 89, 51, 14, 255, 92, 54, 12, 255, 96, 52, 11, 255, 100, 56, 2, 255, 103, 62, 5, 255, 99, 60, 8, 255, 97, 58, 13, 255, 95, 54, 6, 255, 97, 53, 2, 255, 96, 53, 5, 255, 97, 53, 8, 255, 96, 53, 8, 255, 96, 54, 3, 255, 97, 56, 4, 255, 99, 58, 5, 255, 103, 58, 6, 255, 112, 58, 9, 255, 110, 53, 10, 255, 102, 55, 3, 255, 101, 56, 7, 255, 107, 56, 11, 255, 103, 56, 11, 255, 101, 57, 6, 255, 100, 55, 4, 255, 99, 54, 9, 255, 98, 55, 8, 255, 93, 53, 5, 255, 93, 51, 10, 255, 95, 51, 6, 255, 97, 56, 1, 255, 99, 56, 10, 255, 94, 57, 8, 255, 94, 56, 6, 255, 95, 51, 17, 255, 93, 50, 16, 255, 92, 53, 12, 255, 104, 53, 13, 255, 114, 56, 17, 255, 98, 56, 8, 255, 102, 56, 9, 255, 108, 50, 4, 255, 118, 56, 10, 255, 112, 49, 16, 255, 108, 56, 5, 255, 93, 54, 5, 255, 93, 53, 11, 255, 103, 51, 11, 255, 120, 56, 4, 255, 139, 73, 2, 255, 146, 71, 3, 255, 133, 61, 8, 255, 140, 61, 19, 255, 143, 61, 17, 255, 144, 66, 3, 255, 148, 68, 7, 255, 150, 69, 7, 255, 147, 69, 6, 255, 148, 70, 4, 255, 149, 72, 6, 255, 156, 71, 8, 255, 158, 73, 1, 255, 159, 75, 4, 255, 165, 79, 9, 255, 145, 74, 9, 255, 134, 68, 9, 255, 120, 64, 10, 255, 125, 73, 9, 255, 144, 73, 4, 255, 150, 76, 8, 255, 149, 80, 4, 255, 149, 81, 14, 255, 135, 77, 10, 255, 132, 76, 8, 255, 133, 76, 12, 255, 140, 77, 8, 255, 138, 77, 5, 255, 137, 80, 7, 255, 143, 82, 4, 255, 144, 82, 10, 255, 141, 77, 10, 255, 137, 82, 1, 255, 133, 81, 4, 255, 134, 80, 12, 255, 130, 77, 10, 255, 129, 78, 19, 255, 131, 80, 13, 255, 135, 83, 10, 255, 132, 82, 12, 255, 129, 81, 17, 255, 134, 79, 12, 255, 134, 84, 7, 255, 129, 83, 18, 255, 132, 81, 11, 255, 140, 87, 7, 255, 165, 95, 10, 255, 167, 86, 7, 255, 154, 85, 8, 255, 142, 84, 14, 255, 136, 83, 5, 255, 153, 88, 15, 255, 169, 93, 13, 255, 172, 95, 8, 255, 160, 92, 5, 255, 156, 97, 8, 255, 154, 100, 10, 255, 156, 93, 13, 255, 160, 94, 13, 255, 163, 101, 7, 255, 169, 99, 8, 255, 171, 99, 16, 255, 166, 102, 13, 255, 174, 104, 13, 255, 181, 114, 12, 255, 193, 119, 5, 255, 190, 118, 3, 255, 176, 112, 5, 255, 169, 103, 11, 255, 167, 104, 8, 255, 164, 102, 7, 255, 166, 102, 8, 255, 171, 109, 13, 255, 165, 102, 26, 255, 167, 108, 17, 255, 166, 104, 24, 255, 171, 109, 11, 255, 170, 105, 16, 255, 169, 103, 13, 255, 170, 106, 14, 255, 173, 106, 16, 255, 175, 110, 8, 255, 173, 110, 15, 255, 172, 109, 10, 255, 174, 112, 10, 255, 173, 110, 7, 255, 180, 116, 12, 255, 186, 114, 11, 255, 176, 101, 5, 255, 178, 105, 7, 255, 191, 119, 5, 255, 192, 115, 8, 255, 200, 116, 11, 255, 202, 115, 11, 255, 200, 120, 7, 255, 193, 124, 8, 255, 194, 123, 3, 255, 202, 130, 8, 255, 208, 136, 10, 255, 203, 129, 10, 255, 199, 118, 10, 255, 190, 112, 10, 255, 191, 114, 15, 255, 186, 110, 4, 255, 186, 108, 2, 255, 186, 107, 9, 255, 187, 109, 9, 255, 188, 111, 4, 255, 187, 107, 1, 255, 188, 108, 3, 255, 184, 103, 4, 255, 176, 95, 0, 255, 182, 101, 5, 255, 186, 106, 6, 255, 181, 103, 2, 255, 183, 104, 3, 255, 182, 102, 4, 255, 183, 103, 6, 255, 183, 103, 3, 255, 184, 105, 4, 255, 182, 104, 7, 255, 183, 102, 7, 255, 186, 105, 7, 255, 182, 108, 11, 255, 182, 104, 13, 255, 182, 101, 11, 255, 181, 101, 9, 255, 188, 103, 6, 255, 183, 103, 2, 255, 181, 100, 2, 255, 184, 92, 2, 255, 186, 100, 0, 255, 192, 100, 2, 255, 162, 74, 2, 255, 146, 74, 2, 255, 156, 83, 2, 255, 152, 87, 3, 255, 154, 93, 11, 255, 148, 84, 6, 255, 127, 66, 4, 255, 130, 64, 5, 255, 141, 77, 2, 255, 159, 90, 5, 255, 167, 91, 1, 255, 174, 99, 5, 255, 174, 101, 3, 255, 178, 100, 6, 255, 183, 104, 13, 255, 180, 101, 7, 255, 179, 99, 2, 255, 177, 98, 3, 255, 173, 96, 4, 255, 170, 94, 11, 255, 168, 85, 12, 255, 152, 77, 8, 255, 155, 89, 6, 255, 166, 87, 5, 255, 169, 87, 7, 255, 165, 89, 9, 255, 166, 90, 6, 255, 170, 83, 8, 255, 149, 70, 7, 255, 121, 52, 9, 255, 118, 53, 6, 255, 121, 59, 3, 255, 130, 66, 5, 255, 133, 65, 1, 255, 136, 65, 0, 255, 134, 66, 5, 255, 128, 64, 8, 255, 128, 64, 8, 255, 126, 62, 5, 255, 118, 60, 3, 255, 111, 59, 3, 255, 111, 59, 3, 255, 114, 61, 4, 255, 108, 61, 6, 255, 107, 53, 3, 255, 108, 50, 4, 255, 96, 47, 2, 255, 84, 43, 2, 255, 81, 41, 5, 255, 79, 37, 5, 255, 75, 30, 2, 255, 70, 30, 5, 255, 71, 28, 4, 255, 71, 27, 2, 255, 60, 19, 2, 255, 50, 14, 7, 255, 32, 10, 3, 255, 26, 9, 1, 255, 25, 7, 0, 255, 27, 10, 3, 255, 29, 13, 5, 255, 8, 10, 10, 255, 4, 0, 0, 255, 4, 20, 28, 255, 4, 29, 36, 255, 2, 11, 13, 255, 2, 0, 6, 255, 3, 3, 3, 255, 2, 1, 3, 255, 3, 0, 2, 255, 5, 1, 5, 255, 3, 3, 3, 255, 2, 2, 8, 255, 4, 0, 9, 255, 0, 1, 6, 255, 1, 0, 6, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 2, 1, 3, 255, 1, 1, 5, 255, 2, 1, 6, 255, 2, 2, 8, 255, 2, 2, 9, 255, 2, 3, 9, 255, 2, 3, 9, 255, 1, 3, 8, 255, 0, 3, 8, 255, 1, 4, 11, 255, 1, 4, 10, 255, 0, 5, 8, 255, 0, 4, 7, 255, 2, 3, 7, 255, 3, 4, 8, 255, 1, 2, 6, 255, 0, 1, 5, 255, 0, 1, 4, 255, 1, 1, 2, 255, 1, 1, 3, 255, 2, 1, 5, 255, 1, 0, 5, 255, 3, 0, 4, 255, 2, 1, 0, 255, 0, 1, 3, 255, 9, 22, 51, 255, 19, 67, 114, 255, 13, 63, 104, 255, 8, 71, 111, 255, 17, 84, 111, 255, 12, 41, 130, 255, 6, 148, 235, 255, 9, 98, 153, 255, 8, 0, 0, 255, 5, 10, 89, 255, 6, 39, 184, 255, 17, 18, 20, 255, 17, 18, 14, 255, 11, 17, 8, 255, 19, 19, 13, 255, 15, 12, 7, 255, 13, 9, 5, 255, 10, 8, 4, 255, 9, 6, 3, 255, 5, 1, 1, 255, 2, 1, 0, 255, 4, 4, 1, 255, 4, 4, 2, 255, 1, 1, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 0, 0, 255, 1, 0, 0, 255, 3, 1, 1, 255, 4, 3, 0, 255, 6, 5, 1, 255, 7, 5, 2, 255, 9, 9, 2, 255, 13, 13, 1, 255, 15, 16, 8, 255, 17, 19, 10, 255, 20, 25, 9, 255, 23, 31, 9, 255, 25, 36, 12, 255, 26, 39, 20, 255, 31, 43, 26, 255, 30, 47, 21, 255, 30, 49, 15, 255, 34, 49, 17, 255, 31, 52, 20, 255, 30, 54, 26, 255, 37, 53, 27, 255, 35, 54, 27, 255, 37, 66, 40, 255, 46, 86, 48, 255, 60, 101, 75, 255, 70, 118, 85, 255, 77, 133, 92, 255, 88, 145, 103, 255, 93, 148, 99, 255, 91, 144, 84, 255, 86, 132, 82, 255, 83, 122, 69, 255, 83, 121, 46, 255, 76, 109, 48, 255, 70, 100, 39, 255, 71, 96, 28, 255, 69, 91, 20, 255, 62, 76, 19, 255, 55, 59, 17, 255, 48, 46, 6, 255, 45, 42, 4, 255, 47, 42, 5, 255, 42, 39, 5, 255, 47, 34, 5, 255, 53, 36, 6, 255, 53, 40, 6, 255, 55, 41, 5, 255, 51, 42, 4, 255, 47, 42, 0, 255, 68, 48, 5, 255, 78, 47, 4, 255, 75, 45, 3, 255, 71, 44, 4, 255, 60, 48, 8, 255, 63, 50, 4, 255, 69, 48, 5, 255, 76, 47, 8, 255, 83, 49, 3, 255, 90, 47, 3, 255, 88, 53, 6, 255, 83, 53, 5, 255, 84, 51, 1, 255, 87, 52, 1, 255, 90, 54, 7, 255, 84, 49, 7, 255, 73, 41, 4, 255, 73, 47, 8, 255, 73, 45, 7, 255, 79, 49, 7, 255, 83, 48, 8, 255, 82, 46, 4, 255, 80, 46, 7, 255, 76, 46, 7, 255, 76, 47, 6, 255, 77, 48, 6, 255, 80, 50, 6, 255, 82, 49, 6, 255, 83, 51, 4, 255, 86, 53, 7, 255, 84, 48, 11, 255, 87, 50, 12, 255, 93, 55, 2, 255, 93, 54, 2, 255, 92, 52, 8, 255, 95, 57, 5, 255, 93, 50, 7, 255, 99, 53, 6, 255, 105, 59, 13, 255, 106, 65, 7, 255, 96, 57, 3, 255, 96, 59, 9, 255, 97, 54, 3, 255, 99, 54, 5, 255, 99, 55, 6, 255, 96, 54, 7, 255, 95, 53, 7, 255, 97, 54, 6, 255, 96, 56, 6, 255, 102, 61, 7, 255, 116, 60, 9, 255, 108, 56, 5, 255, 99, 54, 6, 255, 104, 55, 10, 255, 104, 56, 8, 255, 105, 57, 8, 255, 105, 57, 7, 255, 102, 53, 7, 255, 103, 56, 9, 255, 101, 57, 7, 255, 97, 55, 7, 255, 95, 54, 11, 255, 97, 54, 8, 255, 100, 57, 8, 255, 100, 58, 9, 255, 98, 55, 4, 255, 102, 58, 6, 255, 96, 57, 9, 255, 94, 52, 12, 255, 98, 53, 8, 255, 104, 57, 5, 255, 89, 57, 8, 255, 94, 55, 9, 255, 98, 57, 5, 255, 93, 56, 8, 255, 86, 59, 2, 255, 88, 62, 7, 255, 93, 56, 5, 255, 115, 62, 9, 255, 131, 66, 7, 255, 141, 68, 8, 255, 144, 62, 8, 255, 145, 63, 7, 255, 149, 66, 8, 255, 141, 69, 2, 255, 144, 69, 6, 255, 143, 65, 7, 255, 143, 66, 4, 255, 144, 65, 7, 255, 149, 70, 5, 255, 152, 71, 6, 255, 156, 70, 4, 255, 165, 75, 1, 255, 162, 74, 5, 255, 151, 74, 1, 255, 157, 76, 3, 255, 157, 72, 6, 255, 162, 80, 4, 255, 172, 87, 6, 255, 164, 80, 13, 255, 139, 74, 9, 255, 147, 78, 0, 255, 124, 64, 9, 255, 133, 72, 6, 255, 153, 76, 10, 255, 160, 83, 9, 255, 153, 81, 2, 255, 143, 77, 6, 255, 148, 82, 10, 255, 142, 80, 8, 255, 140, 83, 10, 255, 143, 82, 6, 255, 142, 81, 5, 255, 143, 81, 7, 255, 138, 78, 18, 255, 133, 81, 18, 255, 136, 82, 8, 255, 139, 79, 4, 255, 132, 83, 10, 255, 130, 82, 8, 255, 131, 83, 4, 255, 136, 80, 9, 255, 139, 78, 21, 255, 149, 82, 8, 255, 159, 89, 6, 255, 142, 87, 11, 255, 132, 83, 10, 255, 148, 90, 9, 255, 164, 90, 2, 255, 171, 92, 9, 255, 163, 91, 10, 255, 162, 89, 15, 255, 158, 90, 9, 255, 159, 95, 10, 255, 157, 90, 5, 255, 165, 89, 2, 255, 171, 93, 5, 255, 171, 99, 10, 255, 159, 95, 15, 255, 165, 96, 8, 255, 173, 96, 4, 255, 170, 100, 11, 255, 168, 102, 12, 255, 166, 100, 11, 255, 167, 103, 17, 255, 179, 107, 10, 255, 188, 109, 14, 255, 190, 116, 12, 255, 191, 120, 2, 255, 186, 110, 8, 255, 174, 104, 11, 255, 162, 102, 10, 255, 162, 103, 13, 255, 163, 102, 11, 255, 164, 105, 5, 255, 167, 104, 23, 255, 167, 105, 15, 255, 167, 106, 13, 255, 173, 110, 12, 255, 176, 108, 12, 255, 181, 109, 4, 255, 185, 111, 6, 255, 182, 110, 9, 255, 179, 110, 12, 255, 181, 112, 18, 255, 179, 112, 10, 255, 177, 110, 16, 255, 178, 111, 16, 255, 182, 115, 10, 255, 190, 118, 2, 255, 185, 112, 11, 255, 189, 118, 7, 255, 201, 127, 1, 255, 207, 135, 2, 255, 205, 129, 6, 255, 183, 97, 10, 255, 190, 104, 16, 255, 197, 126, 9, 255, 197, 124, 6, 255, 206, 132, 15, 255, 202, 126, 29, 255, 193, 113, 19, 255, 192, 110, 14, 255, 190, 107, 20, 255, 193, 120, 11, 255, 188, 119, 5, 255, 183, 113, 5, 255, 187, 110, 11, 255, 189, 110, 8, 255, 188, 114, 0, 255, 185, 111, 1, 255, 185, 111, 2, 255, 183, 107, 3, 255, 183, 106, 6, 255, 186, 108, 8, 255, 183, 105, 3, 255, 185, 103, 4, 255, 182, 102, 2, 255, 181, 101, 3, 255, 183, 103, 6, 255, 182, 102, 4, 255, 182, 102, 3, 255, 182, 102, 5, 255, 184, 101, 2, 255, 191, 106, 4, 255, 187, 109, 11, 255, 184, 104, 15, 255, 183, 100, 11, 255, 180, 101, 8, 255, 185, 104, 6, 255, 180, 105, 5, 255, 185, 100, 0, 255, 185, 96, 1, 255, 183, 103, 7, 255, 147, 71, 5, 255, 132, 61, 6, 255, 152, 80, 7, 255, 141, 74, 4, 255, 132, 68, 5, 255, 131, 63, 6, 255, 123, 58, 5, 255, 125, 63, 10, 255, 129, 64, 10, 255, 139, 71, 7, 255, 144, 70, 7, 255, 155, 76, 15, 255, 166, 88, 13, 255, 174, 101, 8, 255, 181, 106, 9, 255, 177, 100, 21, 255, 176, 99, 11, 255, 184, 105, 9, 255, 186, 102, 21, 255, 181, 99, 11, 255, 177, 96, 3, 255, 174, 84, 8, 255, 148, 65, 2, 255, 148, 78, 4, 255, 165, 83, 3, 255, 171, 85, 1, 255, 166, 86, 3, 255, 159, 82, 5, 255, 171, 84, 7, 255, 184, 98, 8, 255, 171, 86, 1, 255, 150, 72, 4, 255, 115, 54, 2, 255, 109, 49, 4, 255, 112, 51, 3, 255, 115, 56, 5, 255, 117, 60, 7, 255, 119, 62, 7, 255, 120, 61, 3, 255, 119, 59, 3, 255, 119, 58, 4, 255, 114, 61, 2, 255, 113, 58, 3, 255, 110, 51, 2, 255, 102, 50, 2, 255, 105, 43, 2, 255, 96, 41, 0, 255, 94, 41, 3, 255, 91, 39, 5, 255, 87, 37, 4, 255, 78, 35, 0, 255, 71, 36, 1, 255, 71, 29, 3, 255, 66, 17, 1, 255, 48, 18, 2, 255, 38, 16, 6, 255, 33, 8, 5, 255, 24, 10, 6, 255, 22, 11, 6, 255, 23, 12, 6, 255, 22, 11, 4, 255, 25, 10, 3, 255, 2, 20, 28, 255, 6, 40, 54, 255, 4, 18, 21, 255, 0, 0, 15, 255, 1, 11, 37, 255, 3, 0, 0, 255, 1, 0, 0, 255, 2, 15, 26, 255, 9, 61, 68, 255, 4, 6, 4, 255, 1, 0, 4, 255, 2, 2, 7, 255, 2, 2, 6, 255, 0, 1, 6, 255, 1, 0, 5, 255, 1, 0, 4, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 2, 255, 0, 0, 2, 255, 1, 1, 4, 255, 2, 2, 7, 255, 2, 3, 8, 255, 2, 3, 8, 255, 2, 3, 7, 255, 3, 4, 8, 255, 2, 3, 8, 255, 2, 2, 10, 255, 0, 2, 8, 255, 1, 4, 9, 255, 0, 4, 7, 255, 2, 3, 8, 255, 3, 4, 9, 255, 2, 3, 7, 255, 1, 2, 6, 255, 2, 1, 6, 255, 1, 1, 6, 255, 2, 1, 4, 255, 2, 0, 6, 255, 1, 0, 5, 255, 1, 1, 2, 255, 1, 2, 0, 255, 1, 2, 8, 255, 9, 21, 53, 255, 3, 43, 70, 255, 9, 53, 103, 255, 3, 67, 106, 255, 11, 54, 106, 255, 5, 73, 190, 255, 4, 161, 244, 255, 9, 20, 34, 255, 7, 0, 12, 255, 6, 30, 197, 255, 9, 35, 92, 255, 20, 14, 0, 255, 11, 14, 11, 255, 11, 17, 13, 255, 16, 16, 10, 255, 19, 14, 10, 255, 15, 10, 6, 255, 13, 11, 6, 255, 10, 8, 4, 255, 8, 3, 1, 255, 7, 3, 2, 255, 8, 4, 1, 255, 6, 3, 0, 255, 2, 1, 0, 255, 1, 1, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 1, 1, 255, 2, 0, 1, 255, 3, 1, 2, 255, 3, 3, 1, 255, 4, 3, 0, 255, 8, 7, 3, 255, 10, 9, 5, 255, 13, 12, 6, 255, 18, 19, 6, 255, 18, 21, 6, 255, 17, 22, 6, 255, 21, 28, 14, 255, 21, 31, 14, 255, 21, 35, 7, 255, 26, 39, 16, 255, 28, 41, 29, 255, 29, 44, 24, 255, 30, 46, 25, 255, 33, 46, 26, 255, 30, 48, 19, 255, 30, 47, 23, 255, 36, 50, 23, 255, 37, 58, 31, 255, 50, 76, 42, 255, 60, 94, 55, 255, 65, 108, 71, 255, 77, 124, 88, 255, 84, 135, 95, 255, 93, 143, 101, 255, 91, 139, 92, 255, 88, 131, 80, 255, 82, 120, 68, 255, 82, 117, 59, 255, 84, 114, 55, 255, 75, 102, 48, 255, 75, 99, 43, 255, 71, 91, 30, 255, 68, 84, 18, 255, 64, 75, 8, 255, 58, 62, 7, 255, 53, 49, 6, 255, 48, 40, 6, 255, 46, 38, 7, 255, 43, 42, 2, 255, 55, 41, 0, 255, 61, 37, 2, 255, 57, 39, 9, 255, 52, 34, 7, 255, 56, 36, 8, 255, 59, 37, 3, 255, 75, 49, 5, 255, 83, 51, 4, 255, 78, 47, 1, 255, 68, 43, 0, 255, 67, 44, 6, 255, 68, 45, 3, 255, 69, 44, 1, 255, 76, 48, 4, 255, 78, 50, 1, 255, 83, 55, 3, 255, 82, 54, 4, 255, 82, 52, 4, 255, 84, 52, 3, 255, 88, 54, 5, 255, 90, 53, 8, 255, 84, 48, 9, 255, 79, 45, 10, 255, 74, 45, 6, 255, 78, 45, 6, 255, 75, 46, 6, 255, 77, 47, 9, 255, 79, 47, 1, 255, 71, 47, 6, 255, 73, 47, 9, 255, 76, 48, 0, 255, 76, 47, 3, 255, 81, 49, 9, 255, 85, 53, 3, 255, 88, 54, 6, 255, 86, 53, 7, 255, 81, 50, 2, 255, 88, 52, 9, 255, 90, 53, 1, 255, 95, 54, 4, 255, 97, 54, 8, 255, 97, 56, 7, 255, 94, 52, 17, 255, 99, 54, 8, 255, 108, 62, 6, 255, 107, 65, 1, 255, 101, 63, 4, 255, 95, 59, 9, 255, 97, 56, 7, 255, 99, 55, 7, 255, 99, 56, 5, 255, 97, 53, 7, 255, 96, 54, 11, 255, 98, 54, 8, 255, 100, 53, 8, 255, 104, 58, 3, 255, 107, 57, 5, 255, 113, 57, 7, 255, 110, 55, 11, 255, 103, 55, 9, 255, 104, 52, 4, 255, 103, 56, 10, 255, 105, 60, 4, 255, 104, 58, 4, 255, 103, 57, 11, 255, 99, 55, 8, 255, 97, 57, 6, 255, 94, 55, 6, 255, 96, 55, 10, 255, 99, 59, 11, 255, 101, 54, 8, 255, 99, 54, 11, 255, 90, 58, 9, 255, 94, 57, 5, 255, 101, 54, 4, 255, 92, 58, 2, 255, 92, 62, 11, 255, 104, 60, 12, 255, 98, 55, 4, 255, 102, 58, 5, 255, 109, 59, 9, 255, 94, 60, 2, 255, 104, 61, 5, 255, 146, 67, 16, 255, 143, 62, 9, 255, 132, 61, 7, 255, 142, 68, 8, 255, 144, 69, 5, 255, 149, 67, 6, 255, 153, 73, 11, 255, 162, 76, 2, 255, 142, 66, 2, 255, 138, 69, 8, 255, 144, 68, 11, 255, 144, 63, 3, 255, 157, 72, 1, 255, 169, 78, 6, 255, 167, 74, 5, 255, 161, 73, 3, 255, 156, 72, 4, 255, 160, 76, 4, 255, 167, 77, 6, 255, 164, 78, 10, 255, 160, 75, 5, 255, 163, 74, 7, 255, 163, 78, 8, 255, 175, 82, 7, 255, 174, 89, 12, 255, 141, 78, 15, 255, 136, 73, 4, 255, 129, 67, 10, 255, 143, 75, 17, 255, 160, 82, 8, 255, 161, 84, 16, 255, 160, 83, 8, 255, 150, 82, 5, 255, 140, 83, 7, 255, 148, 81, 10, 255, 147, 79, 14, 255, 140, 85, 6, 255, 136, 83, 7, 255, 137, 82, 14, 255, 132, 80, 6, 255, 132, 85, 2, 255, 139, 84, 12, 255, 134, 83, 10, 255, 137, 83, 13, 255, 144, 83, 8, 255, 149, 87, 9, 255, 159, 89, 7, 255, 171, 86, 14, 255, 168, 86, 0, 255, 165, 92, 7, 255, 165, 88, 11, 255, 160, 86, 7, 255, 157, 89, 12, 255, 158, 85, 8, 255, 172, 89, 10, 255, 172, 90, 10, 255, 162, 90, 6, 255, 158, 93, 5, 255, 166, 97, 9, 255, 168, 93, 5, 255, 167, 93, 8, 255, 168, 92, 11, 255, 175, 99, 8, 255, 175, 102, 0, 255, 171, 104, 8, 255, 164, 103, 18, 255, 162, 97, 14, 255, 172, 103, 14, 255, 175, 108, 8, 255, 187, 114, 18, 255, 190, 119, 12, 255, 191, 119, 16, 255, 183, 108, 11, 255, 178, 108, 5, 255, 168, 103, 10, 255, 166, 103, 16, 255, 163, 102, 15, 255, 161, 104, 4, 255, 169, 107, 11, 255, 170, 103, 17, 255, 175, 107, 13, 255, 176, 107, 8, 255, 183, 108, 14, 255, 185, 101, 23, 255, 188, 105, 15, 255, 190, 113, 2, 255, 187, 114, 7, 255, 189, 115, 6, 255, 190, 113, 7, 255, 185, 109, 8, 255, 184, 112, 7, 255, 187, 116, 7, 255, 194, 123, 0, 255, 195, 122, 11, 255, 196, 124, 8, 255, 208, 133, 9, 255, 208, 129, 4, 255, 210, 129, 6, 255, 200, 126, 7, 255, 201, 134, 5, 255, 200, 128, 2, 255, 196, 121, 3, 255, 206, 132, 13, 255, 194, 120, 16, 255, 200, 126, 16, 255, 199, 122, 8, 255, 195, 116, 19, 255, 197, 123, 10, 255, 191, 114, 10, 255, 190, 109, 4, 255, 192, 111, 1, 255, 191, 111, 7, 255, 189, 111, 2, 255, 192, 113, 4, 255, 189, 109, 0, 255, 189, 108, 2, 255, 188, 107, 5, 255, 185, 104, 3, 255, 182, 103, 0, 255, 186, 104, 5, 255, 182, 100, 1, 255, 183, 101, 3, 255, 185, 102, 6, 255, 182, 102, 5, 255, 182, 103, 4, 255, 185, 104, 5, 255, 188, 102, 3, 255, 191, 106, 8, 255, 187, 110, 13, 255, 182, 105, 12, 255, 182, 101, 9, 255, 181, 103, 9, 255, 183, 102, 6, 255, 188, 102, 7, 255, 185, 98, 5, 255, 196, 100, 1, 255, 161, 85, 5, 255, 117, 51, 3, 255, 135, 66, 9, 255, 163, 84, 10, 255, 153, 74, 1, 255, 132, 74, 6, 255, 137, 72, 9, 255, 137, 67, 7, 255, 133, 77, 2, 255, 147, 81, 6, 255, 148, 79, 8, 255, 154, 79, 10, 255, 162, 86, 10, 255, 173, 98, 10, 255, 180, 106, 9, 255, 183, 107, 16, 255, 178, 103, 6, 255, 177, 101, 4, 255, 184, 103, 7, 255, 186, 102, 5, 255, 184, 100, 10, 255, 182, 98, 9, 255, 179, 89, 6, 255, 156, 73, 10, 255, 137, 65, 7, 255, 149, 70, 10, 255, 158, 78, 10, 255, 143, 61, 0, 255, 148, 69, 6, 255, 149, 74, 9, 255, 152, 81, 6, 255, 165, 85, 5, 255, 174, 88, 5, 255, 155, 73, 6, 255, 113, 55, 5, 255, 101, 45, 3, 255, 96, 39, 5, 255, 91, 37, 4, 255, 96, 44, 4, 255, 106, 55, 4, 255, 113, 57, 7, 255, 112, 53, 7, 255, 107, 55, 0, 255, 103, 48, 5, 255, 94, 42, 10, 255, 86, 40, 9, 255, 87, 36, 8, 255, 87, 35, 4, 255, 83, 34, 5, 255, 81, 33, 3, 255, 78, 31, 2, 255, 71, 26, 3, 255, 60, 21, 8, 255, 51, 15, 6, 255, 37, 11, 3, 255, 22, 11, 4, 255, 26, 11, 9, 255, 24, 7, 3, 255, 23, 10, 3, 255, 26, 10, 2, 255, 26, 11, 2, 255, 25, 9, 1, 255, 27, 9, 3, 255, 1, 1, 7, 255, 6, 34, 60, 255, 23, 65, 85, 255, 16, 40, 63, 255, 29, 85, 123, 255, 5, 42, 60, 255, 2, 0, 0, 255, 2, 4, 10, 255, 8, 35, 39, 255, 2, 3, 2, 255, 4, 7, 9, 255, 2, 3, 8, 255, 4, 3, 11, 255, 1, 2, 7, 255, 2, 1, 7, 255, 1, 0, 6, 255, 1, 0, 5, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 2, 255, 0, 2, 5, 255, 2, 3, 6, 255, 2, 3, 6, 255, 0, 1, 5, 255, 1, 2, 7, 255, 3, 4, 9, 255, 3, 3, 11, 255, 0, 1, 8, 255, 1, 3, 9, 255, 0, 4, 7, 255, 0, 3, 8, 255, 2, 4, 9, 255, 1, 2, 7, 255, 1, 2, 6, 255, 3, 2, 7, 255, 1, 0, 6, 255, 2, 1, 4, 255, 1, 0, 5, 255, 0, 0, 4, 255, 1, 1, 0, 255, 2, 2, 4, 255, 2, 4, 17, 255, 1, 7, 20, 255, 6, 14, 35, 255, 12, 27, 66, 255, 13, 51, 71, 255, 5, 32, 135, 255, 3, 141, 251, 255, 6, 83, 124, 255, 6, 0, 0, 255, 2, 8, 95, 255, 12, 40, 186, 255, 17, 27, 16, 255, 24, 19, 10, 255, 17, 13, 12, 255, 8, 13, 2, 255, 15, 16, 10, 255, 14, 10, 6, 255, 9, 4, 1, 255, 15, 14, 9, 255, 11, 11, 6, 255, 11, 7, 3, 255, 11, 4, 1, 255, 9, 4, 1, 255, 6, 2, 0, 255, 3, 1, 0, 255, 2, 1, 0, 255, 2, 0, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 2, 2, 2, 255, 0, 0, 0, 255, 1, 1, 1, 255, 3, 1, 2, 255, 5, 3, 4, 255, 5, 4, 0, 255, 7, 6, 2, 255, 10, 9, 5, 255, 11, 10, 5, 255, 16, 17, 6, 255, 17, 20, 4, 255, 21, 26, 5, 255, 18, 25, 7, 255, 19, 29, 15, 255, 17, 30, 15, 255, 22, 35, 18, 255, 29, 42, 23, 255, 24, 39, 16, 255, 26, 40, 17, 255, 32, 39, 25, 255, 27, 39, 22, 255, 31, 48, 21, 255, 32, 48, 16, 255, 38, 57, 25, 255, 42, 67, 39, 255, 56, 86, 51, 255, 65, 101, 65, 255, 69, 115, 68, 255, 78, 127, 81, 255, 82, 135, 93, 255, 92, 140, 96, 255, 89, 132, 79, 255, 85, 119, 76, 255, 81, 113, 66, 255, 80, 114, 47, 255, 81, 111, 41, 255, 76, 101, 40, 255, 74, 94, 32, 255, 73, 88, 28, 255, 68, 77, 23, 255, 65, 70, 21, 255, 63, 62, 11, 255, 59, 51, 5, 255, 56, 42, 6, 255, 54, 39, 12, 255, 41, 34, 2, 255, 60, 41, 4, 255, 66, 39, 6, 255, 58, 39, 6, 255, 58, 38, 6, 255, 62, 33, 6, 255, 74, 42, 6, 255, 84, 52, 7, 255, 83, 52, 4, 255, 76, 48, 4, 255, 66, 43, 6, 255, 68, 42, 5, 255, 70, 43, 6, 255, 71, 44, 2, 255, 80, 53, 2, 255, 84, 54, 5, 255, 84, 52, 4, 255, 86, 53, 5, 255, 90, 54, 7, 255, 85, 51, 4, 255, 87, 54, 6, 255, 89, 54, 9, 255, 75, 42, 4, 255, 75, 41, 5, 255, 76, 46, 4, 255, 73, 47, 7, 255, 74, 45, 5, 255, 78, 44, 4, 255, 77, 45, 5, 255, 72, 48, 4, 255, 73, 46, 9, 255, 72, 43, 2, 255, 78, 47, 6, 255, 84, 52, 12, 255, 84, 50, 4, 255, 87, 50, 5, 255, 85, 49, 2, 255, 89, 55, 4, 255, 87, 50, 6, 255, 90, 51, 8, 255, 89, 51, 4, 255, 91, 56, 7, 255, 90, 54, 6, 255, 95, 53, 9, 255, 97, 54, 9, 255, 101, 62, 7, 255, 101, 63, 8, 255, 100, 63, 8, 255, 98, 57, 6, 255, 97, 55, 6, 255, 99, 55, 8, 255, 101, 58, 5, 255, 98, 56, 6, 255, 99, 58, 11, 255, 103, 58, 7, 255, 104, 55, 7, 255, 103, 55, 1, 255, 101, 56, 6, 255, 108, 57, 12, 255, 111, 57, 10, 255, 108, 56, 11, 255, 103, 58, 9, 255, 106, 57, 13, 255, 106, 55, 4, 255, 109, 58, 5, 255, 106, 54, 10, 255, 104, 56, 10, 255, 103, 57, 9, 255, 95, 54, 7, 255, 96, 57, 10, 255, 93, 58, 10, 255, 94, 52, 5, 255, 121, 64, 14, 255, 106, 62, 7, 255, 89, 54, 12, 255, 92, 56, 11, 255, 97, 60, 3, 255, 91, 59, 6, 255, 105, 57, 13, 255, 104, 58, 5, 255, 99, 60, 7, 255, 106, 58, 10, 255, 101, 60, 8, 255, 106, 59, 12, 255, 120, 59, 11, 255, 116, 61, 4, 255, 111, 60, 7, 255, 131, 66, 9, 255, 148, 68, 3, 255, 138, 62, 7, 255, 145, 70, 4, 255, 154, 68, 2, 255, 150, 70, 4, 255, 139, 70, 7, 255, 136, 62, 11, 255, 138, 62, 6, 255, 149, 67, 7, 255, 163, 75, 3, 255, 165, 76, 3, 255, 153, 69, 5, 255, 147, 69, 7, 255, 158, 73, 7, 255, 163, 70, 4, 255, 162, 75, 10, 255, 165, 81, 5, 255, 161, 78, 4, 255, 156, 80, 5, 255, 158, 79, 9, 255, 176, 81, 9, 255, 176, 87, 2, 255, 169, 87, 6, 255, 133, 71, 8, 255, 127, 69, 15, 255, 146, 78, 4, 255, 157, 86, 12, 255, 163, 86, 8, 255, 165, 87, 8, 255, 153, 83, 5, 255, 153, 83, 5, 255, 148, 84, 10, 255, 148, 86, 8, 255, 145, 85, 3, 255, 144, 83, 1, 255, 141, 81, 4, 255, 148, 88, 10, 255, 153, 85, 8, 255, 142, 82, 9, 255, 140, 82, 17, 255, 149, 87, 9, 255, 163, 92, 5, 255, 170, 90, 14, 255, 170, 85, 16, 255, 171, 88, 4, 255, 169, 89, 11, 255, 165, 88, 13, 255, 153, 87, 7, 255, 153, 90, 7, 255, 156, 90, 9, 255, 152, 89, 2, 255, 153, 89, 10, 255, 164, 91, 16, 255, 171, 94, 9, 255, 171, 94, 4, 255, 171, 96, 7, 255, 170, 93, 16, 255, 176, 100, 5, 255, 168, 100, 10, 255, 168, 101, 15, 255, 182, 106, 7, 255, 174, 104, 5, 255, 164, 99, 14, 255, 171, 103, 19, 255, 179, 113, 9, 255, 183, 116, 14, 255, 191, 119, 9, 255, 192, 118, 10, 255, 183, 110, 8, 255, 182, 107, 5, 255, 184, 105, 9, 255, 178, 105, 15, 255, 172, 108, 15, 255, 165, 104, 9, 255, 171, 105, 12, 255, 182, 108, 9, 255, 187, 109, 10, 255, 182, 109, 4, 255, 182, 110, 14, 255, 184, 107, 20, 255, 187, 104, 15, 255, 193, 109, 15, 255, 190, 107, 3, 255, 191, 106, 5, 255, 194, 107, 4, 255, 192, 105, 12, 255, 186, 105, 12, 255, 189, 116, 6, 255, 193, 124, 1, 255, 198, 128, 5, 255, 203, 132, 2, 255, 209, 133, 6, 255, 210, 135, 1, 255, 211, 139, 3, 255, 210, 135, 5, 255, 207, 130, 1, 255, 202, 128, 5, 255, 203, 126, 6, 255, 206, 131, 10, 255, 206, 135, 13, 255, 207, 137, 8, 255, 203, 132, 4, 255, 201, 125, 11, 255, 201, 123, 10, 255, 197, 116, 10, 255, 192, 113, 4, 255, 190, 112, 1, 255, 194, 113, 8, 255, 192, 108, 5, 255, 188, 105, 4, 255, 191, 109, 3, 255, 192, 110, 3, 255, 186, 106, 3, 255, 185, 104, 5, 255, 185, 104, 6, 255, 186, 103, 3, 255, 185, 103, 2, 255, 185, 102, 3, 255, 186, 104, 5, 255, 186, 104, 4, 255, 185, 104, 4, 255, 182, 101, 5, 255, 183, 97, 6, 255, 187, 102, 14, 255, 184, 110, 19, 255, 180, 108, 11, 255, 180, 103, 7, 255, 180, 106, 6, 255, 186, 104, 10, 255, 190, 100, 17, 255, 185, 101, 5, 255, 182, 87, 3, 255, 128, 57, 4, 255, 122, 58, 7, 255, 138, 70, 7, 255, 144, 81, 4, 255, 146, 79, 4, 255, 145, 78, 2, 255, 148, 81, 3, 255, 149, 78, 6, 255, 150, 79, 3, 255, 147, 77, 3, 255, 158, 86, 9, 255, 169, 95, 9, 255, 176, 101, 10, 255, 183, 105, 12, 255, 181, 101, 9, 255, 182, 98, 8, 255, 177, 95, 5, 255, 171, 86, 4, 255, 172, 85, 6, 255, 177, 88, 7, 255, 173, 86, 7, 255, 171, 86, 7, 255, 169, 84, 2, 255, 155, 78, 11, 255, 132, 64, 5, 255, 133, 64, 8, 255, 139, 74, 9, 255, 132, 64, 4, 255, 122, 57, 5, 255, 127, 59, 5, 255, 134, 67, 1, 255, 142, 71, 5, 255, 147, 70, 7, 255, 138, 65, 5, 255, 120, 64, 8, 255, 111, 49, 3, 255, 102, 37, 2, 255, 88, 31, 2, 255, 80, 33, 4, 255, 78, 30, 4, 255, 83, 31, 4, 255, 92, 43, 4, 255, 96, 46, 2, 255, 96, 39, 5, 255, 85, 39, 3, 255, 87, 44, 6, 255, 87, 39, 7, 255, 81, 33, 4, 255, 73, 28, 8, 255, 63, 21, 10, 255, 51, 15, 4, 255, 39, 13, 2, 255, 27, 9, 4, 255, 21, 12, 6, 255, 29, 16, 5, 255, 41, 16, 3, 255, 31, 15, 2, 255, 27, 12, 3, 255, 35, 9, 2, 255, 36, 15, 5, 255, 32, 13, 5, 255, 30, 12, 3, 255, 30, 12, 5, 255, 1, 0, 0, 255, 0, 0, 0, 255, 15, 45, 66, 255, 57, 138, 153, 255, 95, 182, 208, 255, 58, 173, 180, 255, 0, 31, 34, 255, 4, 0, 5, 255, 4, 9, 19, 255, 6, 26, 74, 255, 2, 43, 85, 255, 5, 26, 51, 255, 3, 0, 0, 255, 2, 2, 7, 255, 1, 2, 8, 255, 5, 1, 6, 255, 4, 1, 7, 255, 2, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 1, 0, 255, 0, 1, 3, 255, 2, 3, 5, 255, 2, 3, 5, 255, 2, 3, 5, 255, 2, 2, 6, 255, 1, 1, 6, 255, 3, 4, 9, 255, 3, 3, 10, 255, 0, 3, 8, 255, 1, 4, 9, 255, 1, 2, 9, 255, 0, 2, 8, 255, 2, 4, 9, 255, 2, 3, 7, 255, 0, 1, 5, 255, 2, 1, 6, 255, 2, 1, 6, 255, 1, 0, 6, 255, 1, 1, 3, 255, 1, 1, 3, 255, 0, 2, 3, 255, 1, 1, 10, 255, 5, 4, 19, 255, 1, 3, 5, 255, 2, 2, 18, 255, 1, 14, 30, 255, 7, 20, 55, 255, 8, 68, 195, 255, 3, 157, 204, 255, 7, 1, 18, 255, 7, 0, 13, 255, 1, 32, 201, 255, 17, 44, 73, 255, 29, 26, 10, 255, 22, 25, 25, 255, 18, 15, 14, 255, 15, 14, 11, 255, 10, 12, 7, 255, 7, 5, 2, 255, 9, 4, 6, 255, 8, 11, 7, 255, 14, 17, 10, 255, 15, 10, 7, 255, 8, 3, 1, 255, 8, 3, 0, 255, 8, 3, 2, 255, 4, 1, 0, 255, 2, 1, 0, 255, 3, 0, 2, 255, 1, 1, 2, 255, 0, 1, 0, 255, 1, 2, 2, 255, 0, 0, 0, 255, 2, 1, 1, 255, 3, 1, 1, 255, 5, 3, 3, 255, 6, 5, 1, 255, 9, 8, 2, 255, 11, 11, 5, 255, 11, 12, 7, 255, 12, 13, 5, 255, 17, 19, 4, 255, 20, 25, 6, 255, 19, 24, 9, 255, 21, 28, 10, 255, 22, 30, 14, 255, 23, 31, 21, 255, 25, 36, 20, 255, 24, 37, 14, 255, 28, 35, 16, 255, 32, 36, 20, 255, 30, 40, 26, 255, 33, 41, 22, 255, 38, 52, 18, 255, 36, 64, 24, 255, 50, 76, 34, 255, 55, 89, 56, 255, 66, 106, 72, 255, 74, 117, 83, 255, 76, 126, 79, 255, 80, 135, 82, 255, 88, 134, 78, 255, 83, 123, 64, 255, 80, 116, 48, 255, 80, 109, 56, 255, 81, 109, 42, 255, 80, 107, 33, 255, 78, 97, 32, 255, 79, 92, 26, 255, 73, 85, 21, 255, 70, 82, 15, 255, 72, 75, 7, 255, 66, 56, 14, 255, 63, 50, 18, 255, 58, 40, 5, 255, 46, 37, 5, 255, 43, 38, 5, 255, 63, 40, 7, 255, 65, 40, 5, 255, 59, 42, 4, 255, 58, 41, 3, 255, 63, 43, 2, 255, 75, 49, 3, 255, 84, 52, 6, 255, 77, 50, 3, 255, 67, 42, 5, 255, 70, 43, 8, 255, 68, 41, 2, 255, 70, 43, 5, 255, 76, 44, 4, 255, 84, 51, 4, 255, 85, 54, 5, 255, 83, 52, 1, 255, 87, 51, 4, 255, 92, 53, 6, 255, 91, 54, 6, 255, 86, 49, 7, 255, 82, 47, 2, 255, 78, 44, 4, 255, 77, 42, 11, 255, 76, 47, 3, 255, 72, 44, 2, 255, 79, 45, 8, 255, 83, 46, 5, 255, 81, 47, 7, 255, 79, 47, 4, 255, 78, 48, 9, 255, 77, 46, 7, 255, 81, 49, 7, 255, 88, 53, 9, 255, 87, 51, 7, 255, 87, 51, 7, 255, 85, 51, 5, 255, 85, 52, 4, 255, 89, 49, 7, 255, 91, 49, 10, 255, 93, 50, 8, 255, 95, 54, 6, 255, 94, 53, 4, 255, 95, 51, 3, 255, 99, 58, 3, 255, 102, 64, 9, 255, 97, 61, 13, 255, 96, 58, 11, 255, 100, 58, 6, 255, 97, 54, 5, 255, 99, 55, 9, 255, 99, 55, 3, 255, 99, 57, 2, 255, 101, 57, 8, 255, 105, 60, 2, 255, 103, 56, 5, 255, 102, 57, 5, 255, 106, 60, 6, 255, 107, 63, 5, 255, 105, 56, 9, 255, 106, 55, 8, 255, 97, 57, 5, 255, 104, 58, 10, 255, 104, 57, 9, 255, 105, 53, 11, 255, 102, 54, 8, 255, 100, 58, 6, 255, 98, 56, 4, 255, 96, 52, 11, 255, 101, 54, 10, 255, 105, 57, 6, 255, 104, 61, 9, 255, 109, 59, 5, 255, 106, 56, 3, 255, 99, 61, 7, 255, 100, 58, 8, 255, 129, 61, 11, 255, 125, 65, 8, 255, 101, 58, 4, 255, 104, 54, 9, 255, 103, 59, 11, 255, 105, 59, 10, 255, 109, 65, 7, 255, 110, 65, 1, 255, 111, 59, 2, 255, 115, 63, 1, 255, 116, 62, 5, 255, 130, 65, 6, 255, 125, 62, 3, 255, 102, 56, 13, 255, 112, 61, 17, 255, 106, 58, 9, 255, 115, 56, 11, 255, 117, 58, 4, 255, 123, 59, 3, 255, 137, 66, 10, 255, 135, 65, 5, 255, 143, 66, 6, 255, 149, 70, 6, 255, 153, 71, 10, 255, 154, 71, 7, 255, 157, 73, 5, 255, 161, 70, 10, 255, 157, 66, 13, 255, 163, 75, 6, 255, 167, 79, 2, 255, 164, 76, 3, 255, 159, 76, 6, 255, 159, 75, 12, 255, 163, 76, 3, 255, 173, 84, 14, 255, 174, 88, 9, 255, 158, 86, 5, 255, 149, 81, 2, 255, 139, 73, 3, 255, 145, 78, 3, 255, 159, 85, 9, 255, 163, 87, 13, 255, 165, 88, 8, 255, 159, 86, 8, 255, 154, 84, 8, 255, 153, 86, 7, 255, 146, 83, 6, 255, 153, 85, 7, 255, 169, 90, 9, 255, 173, 87, 6, 255, 161, 87, 2, 255, 158, 88, 9, 255, 168, 84, 13, 255, 170, 86, 11, 255, 168, 88, 9, 255, 167, 90, 7, 255, 160, 91, 8, 255, 154, 87, 10, 255, 153, 89, 9, 255, 147, 88, 5, 255, 151, 88, 8, 255, 155, 88, 10, 255, 157, 95, 5, 255, 164, 94, 11, 255, 165, 94, 8, 255, 164, 92, 9, 255, 167, 90, 14, 255, 171, 97, 8, 255, 169, 97, 8, 255, 171, 103, 7, 255, 165, 102, 11, 255, 170, 103, 15, 255, 180, 103, 7, 255, 168, 102, 13, 255, 160, 103, 10, 255, 171, 103, 14, 255, 185, 112, 16, 255, 189, 113, 3, 255, 194, 115, 10, 255, 191, 109, 4, 255, 190, 103, 5, 255, 188, 100, 9, 255, 188, 100, 10, 255, 188, 107, 16, 255, 179, 110, 7, 255, 169, 102, 7, 255, 176, 105, 15, 255, 188, 112, 6, 255, 188, 107, 8, 255, 179, 103, 12, 255, 174, 104, 12, 255, 176, 109, 7, 255, 183, 109, 11, 255, 191, 108, 12, 255, 193, 103, 7, 255, 192, 102, 10, 255, 192, 103, 5, 255, 191, 104, 8, 255, 186, 105, 4, 255, 189, 115, 4, 255, 193, 123, 7, 255, 196, 125, 2, 255, 201, 129, 0, 255, 208, 136, 6, 255, 212, 135, 3, 255, 217, 135, 4, 255, 215, 134, 5, 255, 208, 130, 2, 255, 203, 128, 10, 255, 202, 124, 8, 255, 207, 131, 16, 255, 206, 133, 17, 255, 203, 129, 15, 255, 204, 129, 19, 255, 202, 127, 7, 255, 199, 124, 12, 255, 193, 120, 8, 255, 187, 117, 5, 255, 185, 114, 7, 255, 192, 116, 7, 255, 189, 108, 2, 255, 181, 97, 1, 255, 189, 108, 3, 255, 192, 112, 6, 255, 184, 105, 1, 255, 187, 108, 7, 255, 184, 103, 4, 255, 187, 103, 2, 255, 186, 102, 1, 255, 183, 101, 1, 255, 185, 103, 2, 255, 185, 102, 4, 255, 182, 101, 5, 255, 183, 98, 3, 255, 180, 90, 3, 255, 185, 100, 14, 255, 185, 108, 14, 255, 186, 108, 8, 255, 187, 104, 4, 255, 188, 103, 6, 255, 188, 104, 6, 255, 185, 99, 12, 255, 186, 99, 6, 255, 156, 75, 6, 255, 138, 74, 6, 255, 141, 81, 5, 255, 155, 90, 10, 255, 149, 84, 8, 255, 142, 80, 8, 255, 142, 77, 5, 255, 147, 79, 6, 255, 149, 82, 4, 255, 146, 74, 0, 255, 153, 79, 7, 255, 172, 94, 15, 255, 177, 97, 14, 255, 177, 96, 10, 255, 180, 99, 10, 255, 180, 95, 4, 255, 179, 87, 6, 255, 173, 80, 7, 255, 166, 73, 8, 255, 168, 75, 7, 255, 173, 84, 8, 255, 166, 77, 4, 255, 163, 76, 9, 255, 160, 78, 8, 255, 148, 76, 8, 255, 135, 67, 4, 255, 131, 64, 2, 255, 132, 69, 3, 255, 139, 74, 13, 255, 131, 65, 5, 255, 128, 59, 1, 255, 131, 66, 2, 255, 135, 73, 6, 255, 138, 74, 6, 255, 136, 73, 6, 255, 125, 65, 7, 255, 110, 51, 4, 255, 101, 46, 2, 255, 94, 47, 6, 255, 88, 45, 9, 255, 79, 34, 5, 255, 76, 31, 7, 255, 68, 32, 6, 255, 67, 30, 7, 255, 65, 23, 4, 255, 66, 29, 0, 255, 71, 31, 1, 255, 74, 30, 5, 255, 64, 30, 2, 255, 48, 20, 1, 255, 34, 15, 4, 255, 33, 16, 6, 255, 41, 19, 4, 255, 47, 22, 2, 255, 54, 24, 9, 255, 56, 25, 8, 255, 65, 30, 6, 255, 57, 26, 4, 255, 40, 20, 3, 255, 40, 17, 3, 255, 39, 13, 1, 255, 32, 13, 4, 255, 27, 11, 2, 255, 26, 10, 3, 255, 0, 2, 2, 255, 1, 1, 3, 255, 1, 3, 3, 255, 35, 63, 86, 255, 111, 181, 217, 255, 121, 194, 201, 255, 25, 65, 90, 255, 0, 31, 85, 255, 2, 71, 128, 255, 5, 77, 161, 255, 3, 108, 183, 255, 4, 100, 155, 255, 5, 35, 51, 255, 0, 0, 4, 255, 1, 4, 3, 255, 4, 1, 6, 255, 3, 0, 6, 255, 3, 2, 1, 255, 0, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 3, 255, 1, 2, 5, 255, 0, 1, 5, 255, 1, 2, 6, 255, 2, 3, 7, 255, 2, 3, 7, 255, 2, 3, 7, 255, 1, 2, 5, 255, 1, 2, 6, 255, 1, 2, 7, 255, 2, 2, 9, 255, 2, 3, 7, 255, 1, 2, 6, 255, 2, 3, 7, 255, 1, 2, 6, 255, 1, 2, 6, 255, 3, 2, 7, 255, 1, 1, 7, 255, 1, 1, 4, 255, 2, 1, 0, 255, 0, 2, 5, 255, 1, 4, 15, 255, 1, 2, 12, 255, 3, 1, 4, 255, 2, 0, 5, 255, 5, 2, 9, 255, 6, 11, 82, 255, 4, 170, 243, 255, 8, 58, 106, 255, 11, 0, 0, 255, 4, 10, 132, 255, 7, 55, 164, 255, 20, 31, 15, 255, 20, 37, 48, 255, 26, 32, 31, 255, 18, 21, 17, 255, 20, 24, 26, 255, 11, 12, 4, 255, 6, 5, 0, 255, 8, 5, 8, 255, 9, 15, 15, 255, 13, 23, 17, 255, 12, 12, 13, 255, 6, 5, 1, 255, 8, 2, 1, 255, 8, 3, 3, 255, 4, 3, 1, 255, 3, 2, 0, 255, 2, 0, 2, 255, 1, 1, 2, 255, 1, 2, 1, 255, 3, 3, 3, 255, 0, 0, 0, 255, 2, 1, 1, 255, 4, 3, 0, 255, 6, 5, 1, 255, 9, 9, 5, 255, 10, 11, 4, 255, 11, 12, 4, 255, 15, 17, 9, 255, 11, 13, 3, 255, 20, 21, 7, 255, 21, 27, 12, 255, 18, 27, 10, 255, 23, 32, 12, 255, 29, 37, 14, 255, 25, 33, 10, 255, 22, 35, 15, 255, 25, 34, 18, 255, 28, 32, 13, 255, 26, 38, 14, 255, 32, 40, 19, 255, 37, 43, 22, 255, 37, 55, 30, 255, 41, 75, 31, 255, 59, 84, 44, 255, 59, 94, 64, 255, 68, 109, 70, 255, 78, 120, 82, 255, 78, 127, 84, 255, 85, 130, 74, 255, 87, 124, 56, 255, 79, 116, 49, 255, 77, 113, 37, 255, 80, 108, 37, 255, 82, 103, 37, 255, 82, 101, 32, 255, 79, 96, 31, 255, 76, 87, 23, 255, 76, 83, 14, 255, 73, 77, 16, 255, 70, 69, 6, 255, 66, 54, 13, 255, 58, 49, 8, 255, 50, 41, 7, 255, 45, 40, 6, 255, 52, 39, 3, 255, 61, 39, 2, 255, 64, 45, 3, 255, 59, 41, 4, 255, 61, 38, 9, 255, 70, 47, 5, 255, 77, 52, 0, 255, 77, 52, 4, 255, 72, 48, 6, 255, 68, 43, 7, 255, 72, 46, 1, 255, 69, 43, 4, 255, 64, 47, 0, 255, 71, 44, 4, 255, 84, 47, 2, 255, 87, 53, 4, 255, 86, 55, 5, 255, 86, 54, 2, 255, 84, 54, 3, 255, 86, 54, 5, 255, 82, 48, 6, 255, 80, 45, 9, 255, 80, 46, 9, 255, 76, 44, 5, 255, 78, 46, 6, 255, 80, 46, 4, 255, 79, 44, 5, 255, 82, 49, 9, 255, 81, 50, 5, 255, 79, 45, 6, 255, 79, 49, 5, 255, 84, 50, 6, 255, 87, 48, 4, 255, 90, 55, 6, 255, 91, 59, 6, 255, 89, 53, 4, 255, 93, 53, 9, 255, 88, 53, 7, 255, 93, 52, 8, 255, 95, 54, 5, 255, 97, 54, 4, 255, 95, 52, 7, 255, 96, 54, 13, 255, 92, 51, 10, 255, 97, 58, 5, 255, 103, 63, 7, 255, 102, 59, 7, 255, 101, 59, 5, 255, 101, 56, 7, 255, 96, 51, 6, 255, 100, 56, 8, 255, 99, 56, 7, 255, 102, 57, 8, 255, 104, 56, 5, 255, 104, 57, 8, 255, 99, 54, 4, 255, 107, 58, 8, 255, 108, 56, 6, 255, 112, 61, 3, 255, 110, 60, 4, 255, 109, 61, 12, 255, 102, 55, 9, 255, 105, 57, 12, 255, 109, 58, 12, 255, 107, 59, 8, 255, 105, 60, 6, 255, 103, 60, 6, 255, 99, 59, 6, 255, 95, 52, 4, 255, 101, 56, 9, 255, 104, 58, 4, 255, 101, 61, 6, 255, 100, 58, 6, 255, 120, 61, 9, 255, 117, 58, 4, 255, 104, 60, 3, 255, 121, 65, 9, 255, 112, 59, 9, 255, 99, 58, 4, 255, 103, 57, 18, 255, 101, 56, 9, 255, 102, 58, 1, 255, 115, 64, 2, 255, 115, 60, 13, 255, 119, 66, 7, 255, 122, 66, 7, 255, 125, 69, 2, 255, 121, 63, 6, 255, 102, 59, 3, 255, 90, 61, 9, 255, 98, 57, 9, 255, 101, 58, 6, 255, 101, 57, 16, 255, 123, 60, 9, 255, 131, 67, 1, 255, 137, 66, 8, 255, 145, 71, 0, 255, 137, 68, 13, 255, 137, 68, 12, 255, 150, 73, 5, 255, 162, 74, 5, 255, 165, 73, 2, 255, 158, 70, 0, 255, 155, 67, 10, 255, 153, 71, 4, 255, 161, 80, 0, 255, 165, 79, 4, 255, 167, 79, 7, 255, 161, 77, 11, 255, 157, 78, 5, 255, 158, 76, 3, 255, 164, 77, 11, 255, 171, 77, 11, 255, 169, 87, 8, 255, 164, 89, 6, 255, 162, 86, 11, 255, 155, 79, 3, 255, 163, 85, 4, 255, 165, 90, 10, 255, 166, 88, 6, 255, 170, 90, 10, 255, 165, 89, 6, 255, 157, 88, 2, 255, 150, 84, 7, 255, 148, 82, 6, 255, 158, 87, 7, 255, 164, 91, 5, 255, 168, 90, 5, 255, 168, 86, 11, 255, 165, 85, 9, 255, 164, 91, 2, 255, 159, 94, 7, 255, 153, 89, 8, 255, 152, 91, 10, 255, 148, 88, 9, 255, 152, 91, 7, 255, 156, 88, 10, 255, 158, 87, 11, 255, 162, 91, 7, 255, 169, 94, 6, 255, 165, 96, 4, 255, 162, 94, 8, 255, 167, 95, 12, 255, 169, 98, 6, 255, 169, 102, 7, 255, 174, 100, 6, 255, 171, 102, 3, 255, 173, 107, 9, 255, 179, 107, 12, 255, 168, 105, 7, 255, 165, 102, 2, 255, 180, 101, 8, 255, 190, 101, 10, 255, 198, 109, 3, 255, 191, 109, 5, 255, 185, 102, 8, 255, 186, 99, 12, 255, 182, 101, 9, 255, 181, 105, 6, 255, 178, 106, 11, 255, 169, 102, 9, 255, 165, 101, 7, 255, 173, 104, 10, 255, 182, 109, 18, 255, 179, 107, 14, 255, 176, 106, 12, 255, 176, 109, 7, 255, 177, 109, 6, 255, 183, 112, 8, 255, 188, 111, 11, 255, 188, 105, 9, 255, 192, 108, 3, 255, 196, 115, 5, 255, 188, 112, 8, 255, 188, 115, 3, 255, 193, 123, 2, 255, 195, 124, 6, 255, 198, 123, 7, 255, 202, 128, 2, 255, 207, 133, 1, 255, 214, 135, 5, 255, 218, 135, 6, 255, 196, 112, 8, 255, 192, 112, 2, 255, 204, 126, 3, 255, 207, 126, 6, 255, 204, 125, 6, 255, 208, 134, 12, 255, 206, 134, 15, 255, 200, 128, 12, 255, 199, 123, 8, 255, 200, 123, 11, 255, 195, 120, 7, 255, 191, 117, 3, 255, 192, 115, 6, 255, 192, 114, 5, 255, 192, 112, 4, 255, 192, 109, 6, 255, 192, 110, 4, 255, 189, 109, 2, 255, 185, 106, 0, 255, 185, 106, 2, 255, 186, 104, 4, 255, 187, 102, 4, 255, 186, 104, 4, 255, 183, 102, 2, 255, 184, 101, 3, 255, 183, 99, 4, 255, 179, 96, 3, 255, 186, 103, 5, 255, 184, 101, 6, 255, 186, 108, 11, 255, 186, 111, 6, 255, 184, 105, 7, 255, 187, 104, 5, 255, 186, 100, 3, 255, 178, 98, 3, 255, 179, 99, 4, 255, 179, 93, 13, 255, 169, 94, 11, 255, 162, 97, 6, 255, 160, 88, 8, 255, 154, 86, 5, 255, 148, 86, 5, 255, 143, 78, 1, 255, 153, 84, 6, 255, 163, 90, 13, 255, 160, 87, 14, 255, 153, 82, 10, 255, 162, 88, 7, 255, 172, 92, 5, 255, 180, 97, 6, 255, 180, 96, 8, 255, 183, 97, 14, 255, 176, 90, 7, 255, 175, 83, 9, 255, 167, 74, 7, 255, 166, 73, 4, 255, 169, 80, 0, 255, 170, 86, 0, 255, 165, 82, 4, 255, 155, 73, 6, 255, 146, 71, 6, 255, 138, 69, 5, 255, 136, 68, 4, 255, 136, 67, 3, 255, 134, 67, 6, 255, 136, 72, 8, 255, 139, 71, 11, 255, 134, 67, 15, 255, 133, 68, 10, 255, 133, 72, 7, 255, 128, 68, 6, 255, 130, 69, 5, 255, 128, 73, 2, 255, 120, 64, 6, 255, 113, 59, 6, 255, 106, 59, 9, 255, 106, 62, 5, 255, 111, 64, 3, 255, 107, 57, 3, 255, 97, 51, 7, 255, 85, 44, 6, 255, 78, 36, 10, 255, 71, 28, 6, 255, 65, 25, 4, 255, 61, 26, 3, 255, 73, 28, 1, 255, 70, 35, 5, 255, 68, 39, 7, 255, 65, 36, 4, 255, 75, 41, 7, 255, 84, 43, 8, 255, 82, 40, 4, 255, 83, 38, 5, 255, 79, 40, 5, 255, 72, 39, 3, 255, 68, 31, 2, 255, 65, 29, 5, 255, 54, 28, 5, 255, 46, 19, 5, 255, 35, 15, 5, 255, 27, 12, 3, 255, 1, 2, 2, 255, 3, 0, 1, 255, 4, 0, 0, 255, 0, 0, 3, 255, 37, 70, 86, 255, 105, 147, 174, 255, 100, 129, 151, 255, 34, 70, 102, 255, 9, 87, 157, 255, 2, 113, 183, 255, 5, 132, 190, 255, 2, 125, 181, 255, 2, 51, 85, 255, 1, 1, 10, 255, 3, 3, 7, 255, 4, 4, 9, 255, 0, 2, 4, 255, 2, 2, 1, 255, 1, 2, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 1, 255, 1, 2, 5, 255, 1, 2, 7, 255, 1, 2, 7, 255, 1, 2, 8, 255, 1, 3, 6, 255, 1, 2, 6, 255, 1, 2, 6, 255, 1, 2, 7, 255, 2, 3, 8, 255, 2, 3, 8, 255, 0, 1, 4, 255, 0, 0, 4, 255, 1, 2, 6, 255, 2, 3, 7, 255, 2, 3, 7, 255, 1, 1, 7, 255, 0, 2, 3, 255, 0, 0, 5, 255, 0, 1, 1, 255, 1, 3, 5, 255, 0, 2, 17, 255, 2, 2, 12, 255, 3, 2, 7, 255, 2, 5, 4, 255, 4, 0, 1, 255, 3, 100, 189, 255, 4, 144, 204, 255, 13, 0, 0, 255, 8, 2, 42, 255, 2, 39, 219, 255, 18, 40, 51, 255, 29, 25, 25, 255, 26, 30, 33, 255, 23, 25, 19, 255, 25, 28, 27, 255, 22, 31, 28, 255, 9, 17, 17, 255, 6, 9, 3, 255, 7, 5, 2, 255, 14, 17, 14, 255, 18, 26, 19, 255, 15, 17, 13, 255, 10, 8, 4, 255, 8, 3, 1, 255, 7, 2, 2, 255, 6, 2, 1, 255, 4, 3, 1, 255, 4, 2, 1, 255, 5, 1, 1, 255, 2, 1, 0, 255, 3, 3, 3, 255, 2, 2, 1, 255, 2, 2, 0, 255, 6, 5, 1, 255, 11, 8, 4, 255, 9, 8, 3, 255, 9, 11, 2, 255, 12, 14, 3, 255, 13, 15, 3, 255, 17, 19, 5, 255, 22, 24, 8, 255, 15, 26, 7, 255, 15, 29, 12, 255, 16, 28, 14, 255, 23, 35, 13, 255, 24, 34, 7, 255, 20, 32, 10, 255, 25, 31, 19, 255, 28, 33, 17, 255, 28, 39, 23, 255, 34, 43, 22, 255, 34, 53, 18, 255, 37, 65, 32, 255, 47, 79, 36, 255, 59, 90, 50, 255, 65, 104, 60, 255, 70, 110, 65, 255, 83, 123, 66, 255, 85, 124, 72, 255, 88, 124, 57, 255, 84, 114, 55, 255, 78, 107, 48, 255, 78, 102, 51, 255, 82, 104, 33, 255, 82, 101, 23, 255, 83, 95, 22, 255, 77, 87, 27, 255, 73, 85, 25, 255, 76, 83, 16, 255, 77, 76, 15, 255, 71, 66, 13, 255, 63, 63, 4, 255, 53, 49, 4, 255, 51, 40, 9, 255, 56, 40, 7, 255, 59, 38, 5, 255, 67, 41, 5, 255, 70, 42, 4, 255, 58, 37, 2, 255, 62, 44, 5, 255, 80, 52, 6, 255, 84, 50, 5, 255, 85, 48, 4, 255, 82, 50, 2, 255, 74, 46, 4, 255, 69, 41, 2, 255, 70, 47, 6, 255, 65, 49, 3, 255, 73, 48, 7, 255, 86, 50, 6, 255, 87, 50, 5, 255, 87, 54, 7, 255, 91, 56, 4, 255, 88, 52, 9, 255, 83, 51, 7, 255, 82, 49, 3, 255, 80, 44, 12, 255, 77, 41, 11, 255, 77, 44, 0, 255, 79, 46, 5, 255, 84, 46, 8, 255, 82, 46, 5, 255, 79, 48, 5, 255, 77, 46, 7, 255, 81, 44, 6, 255, 83, 47, 10, 255, 87, 49, 11, 255, 88, 50, 10, 255, 88, 52, 8, 255, 89, 52, 6, 255, 93, 52, 6, 255, 90, 54, 4, 255, 82, 53, 6, 255, 90, 52, 12, 255, 90, 53, 8, 255, 95, 56, 4, 255, 96, 57, 4, 255, 95, 56, 8, 255, 97, 55, 12, 255, 99, 56, 7, 255, 103, 58, 5, 255, 103, 58, 10, 255, 101, 58, 4, 255, 99, 59, 2, 255, 98, 56, 4, 255, 102, 59, 6, 255, 100, 57, 6, 255, 100, 55, 9, 255, 103, 57, 6, 255, 103, 56, 13, 255, 105, 58, 10, 255, 109, 58, 10, 255, 106, 55, 1, 255, 109, 56, 7, 255, 111, 58, 5, 255, 110, 59, 9, 255, 106, 56, 9, 255, 107, 57, 2, 255, 107, 57, 6, 255, 107, 56, 7, 255, 103, 57, 5, 255, 104, 57, 3, 255, 105, 58, 5, 255, 93, 58, 4, 255, 95, 59, 9, 255, 102, 60, 11, 255, 96, 57, 3, 255, 106, 61, 7, 255, 109, 62, 12, 255, 104, 55, 8, 255, 106, 57, 8, 255, 102, 61, 8, 255, 98, 58, 8, 255, 98, 61, 9, 255, 100, 53, 15, 255, 117, 66, 7, 255, 123, 66, 3, 255, 118, 64, 10, 255, 113, 63, 13, 255, 114, 70, 2, 255, 119, 68, 6, 255, 120, 64, 11, 255, 107, 58, 11, 255, 107, 63, 12, 255, 106, 66, 8, 255, 110, 62, 2, 255, 134, 65, 8, 255, 140, 68, 10, 255, 152, 73, 6, 255, 166, 81, 5, 255, 151, 66, 15, 255, 149, 67, 6, 255, 143, 74, 2, 255, 137, 69, 5, 255, 153, 74, 14, 255, 167, 81, 10, 255, 162, 72, 4, 255, 158, 69, 5, 255, 159, 77, 6, 255, 156, 76, 2, 255, 163, 79, 4, 255, 172, 83, 4, 255, 171, 84, 5, 255, 167, 83, 4, 255, 164, 82, 4, 255, 164, 82, 4, 255, 159, 77, 4, 255, 154, 76, 6, 255, 164, 78, 10, 255, 176, 86, 14, 255, 172, 86, 3, 255, 158, 85, 8, 255, 146, 80, 12, 255, 150, 79, 6, 255, 158, 83, 3, 255, 163, 85, 7, 255, 170, 94, 13, 255, 166, 93, 6, 255, 158, 87, 13, 255, 157, 89, 7, 255, 160, 92, 9, 255, 154, 89, 12, 255, 157, 92, 8, 255, 162, 93, 6, 255, 161, 90, 4, 255, 161, 91, 4, 255, 165, 94, 11, 255, 157, 92, 13, 255, 147, 90, 8, 255, 147, 90, 6, 255, 151, 90, 5, 255, 155, 87, 7, 255, 162, 89, 11, 255, 164, 90, 6, 255, 168, 92, 5, 255, 167, 94, 8, 255, 167, 96, 12, 255, 168, 98, 11, 255, 168, 98, 1, 255, 169, 102, 6, 255, 168, 101, 11, 255, 165, 105, 2, 255, 172, 110, 0, 255, 179, 103, 8, 255, 178, 103, 12, 255, 177, 100, 8, 255, 185, 99, 2, 255, 189, 105, 12, 255, 195, 111, 10, 255, 195, 117, 7, 255, 194, 117, 12, 255, 188, 112, 12, 255, 178, 108, 9, 255, 173, 107, 12, 255, 167, 104, 16, 255, 163, 104, 11, 255, 165, 105, 11, 255, 169, 105, 9, 255, 172, 107, 13, 255, 173, 107, 13, 255, 172, 109, 1, 255, 175, 108, 9, 255, 181, 111, 8, 255, 185, 113, 7, 255, 185, 113, 6, 255, 187, 113, 10, 255, 191, 111, 10, 255, 194, 118, 10, 255, 190, 116, 12, 255, 189, 119, 7, 255, 194, 124, 4, 255, 195, 126, 4, 255, 199, 125, 10, 255, 203, 129, 5, 255, 205, 131, 4, 255, 213, 134, 6, 255, 217, 139, 3, 255, 209, 129, 15, 255, 204, 130, 7, 255, 201, 131, 3, 255, 203, 128, 1, 255, 206, 131, 3, 255, 211, 135, 14, 255, 208, 131, 16, 255, 206, 127, 12, 255, 203, 128, 9, 255, 199, 125, 4, 255, 196, 120, 5, 255, 192, 114, 5, 255, 194, 114, 4, 255, 193, 110, 3, 255, 194, 109, 3, 255, 191, 110, 3, 255, 191, 110, 2, 255, 192, 111, 3, 255, 190, 109, 3, 255, 188, 107, 5, 255, 186, 104, 4, 255, 184, 102, 1, 255, 185, 104, 5, 255, 182, 100, 5, 255, 183, 98, 5, 255, 186, 100, 4, 255, 183, 100, 1, 255, 184, 103, 5, 255, 186, 107, 12, 255, 186, 108, 11, 255, 184, 110, 10, 255, 179, 103, 14, 255, 180, 103, 14, 255, 175, 101, 8, 255, 169, 98, 14, 255, 176, 104, 19, 255, 177, 107, 9, 255, 166, 100, 16, 255, 148, 84, 19, 255, 155, 90, 12, 255, 153, 92, 5, 255, 153, 91, 6, 255, 164, 99, 13, 255, 168, 99, 11, 255, 166, 92, 9, 255, 159, 87, 12, 255, 155, 83, 7, 255, 162, 86, 3, 255, 173, 92, 6, 255, 175, 92, 5, 255, 176, 92, 8, 255, 178, 92, 11, 255, 181, 92, 11, 255, 176, 92, 8, 255, 168, 82, 4, 255, 166, 81, 7, 255, 163, 81, 7, 255, 159, 80, 7, 255, 154, 78, 6, 255, 148, 73, 6, 255, 147, 71, 9, 255, 143, 69, 11, 255, 139, 69, 9, 255, 136, 69, 6, 255, 137, 72, 6, 255, 141, 75, 8, 255, 136, 68, 6, 255, 126, 57, 17, 255, 119, 54, 7, 255, 125, 65, 0, 255, 124, 68, 3, 255, 117, 62, 11, 255, 115, 59, 7, 255, 115, 60, 10, 255, 112, 59, 9, 255, 107, 56, 7, 255, 112, 62, 2, 255, 117, 65, 1, 255, 112, 56, 4, 255, 108, 56, 5, 255, 106, 56, 3, 255, 103, 56, 8, 255, 90, 43, 4, 255, 84, 40, 4, 255, 87, 46, 4, 255, 95, 45, 6, 255, 98, 49, 7, 255, 97, 49, 5, 255, 93, 45, 3, 255, 91, 45, 8, 255, 85, 43, 10, 255, 77, 37, 5, 255, 79, 39, 4, 255, 80, 42, 2, 255, 82, 44, 3, 255, 87, 41, 3, 255, 85, 35, 2, 255, 79, 35, 5, 255, 66, 29, 7, 255, 55, 22, 4, 255, 47, 19, 4, 255, 0, 0, 5, 255, 0, 1, 0, 255, 3, 1, 1, 255, 2, 1, 3, 255, 0, 0, 0, 255, 0, 6, 14, 255, 83, 75, 111, 255, 153, 139, 152, 255, 91, 104, 136, 255, 22, 117, 183, 255, 2, 103, 147, 255, 5, 66, 95, 255, 9, 36, 88, 255, 12, 78, 95, 255, 3, 41, 35, 255, 2, 0, 4, 255, 6, 1, 5, 255, 4, 0, 5, 255, 0, 1, 5, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 1, 255, 2, 1, 5, 255, 2, 3, 8, 255, 3, 3, 11, 255, 1, 3, 9, 255, 1, 2, 6, 255, 2, 3, 7, 255, 2, 3, 7, 255, 2, 3, 7, 255, 2, 3, 8, 255, 2, 3, 8, 255, 1, 1, 2, 255, 4, 5, 8, 255, 2, 3, 7, 255, 0, 1, 5, 255, 2, 3, 8, 255, 2, 3, 8, 255, 1, 2, 8, 255, 0, 2, 4, 255, 1, 4, 4, 255, 0, 3, 12, 255, 0, 2, 13, 255, 1, 1, 6, 255, 1, 2, 14, 255, 1, 0, 0, 255, 6, 8, 90, 255, 3, 161, 245, 255, 10, 24, 68, 255, 8, 0, 0, 255, 1, 26, 169, 255, 7, 41, 140, 255, 31, 25, 8, 255, 28, 32, 26, 255, 26, 23, 18, 255, 22, 25, 25, 255, 28, 26, 31, 255, 27, 30, 32, 255, 21, 32, 32, 255, 7, 13, 6, 255, 8, 7, 2, 255, 8, 6, 5, 255, 18, 20, 20, 255, 24, 24, 25, 255, 11, 12, 6, 255, 7, 5, 2, 255, 8, 3, 3, 255, 7, 3, 2, 255, 3, 2, 0, 255, 5, 3, 1, 255, 8, 2, 2, 255, 5, 0, 0, 255, 3, 2, 0, 255, 3, 3, 1, 255, 3, 5, 0, 255, 6, 5, 0, 255, 13, 10, 4, 255, 9, 9, 4, 255, 10, 11, 3, 255, 15, 17, 7, 255, 16, 19, 8, 255, 18, 22, 7, 255, 20, 24, 8, 255, 22, 28, 12, 255, 19, 27, 10, 255, 19, 27, 13, 255, 25, 31, 14, 255, 29, 32, 8, 255, 31, 34, 12, 255, 28, 33, 15, 255, 29, 34, 13, 255, 35, 39, 22, 255, 31, 50, 16, 255, 34, 60, 20, 255, 46, 73, 37, 255, 53, 84, 45, 255, 65, 93, 48, 255, 73, 106, 48, 255, 78, 115, 59, 255, 83, 122, 60, 255, 83, 121, 62, 255, 82, 118, 60, 255, 82, 110, 51, 255, 80, 106, 27, 255, 83, 101, 40, 255, 83, 98, 37, 255, 83, 92, 43, 255, 80, 88, 28, 255, 76, 82, 14, 255, 72, 79, 25, 255, 64, 78, 17, 255, 75, 74, 2, 255, 75, 64, 3, 255, 56, 56, 2, 255, 46, 49, 7, 255, 49, 40, 6, 255, 52, 38, 4, 255, 62, 42, 8, 255, 68, 43, 8, 255, 64, 39, 2, 255, 60, 39, 2, 255, 71, 46, 6, 255, 82, 51, 4, 255, 87, 53, 4, 255, 85, 53, 4, 255, 73, 50, 2, 255, 65, 47, 1, 255, 65, 48, 5, 255, 65, 46, 2, 255, 72, 47, 1, 255, 80, 49, 7, 255, 84, 53, 6, 255, 83, 52, 5, 255, 86, 52, 5, 255, 90, 52, 8, 255, 85, 48, 5, 255, 81, 48, 5, 255, 81, 48, 4, 255, 81, 47, 2, 255, 82, 45, 6, 255, 79, 43, 7, 255, 80, 46, 3, 255, 83, 43, 7, 255, 84, 50, 6, 255, 70, 45, 1, 255, 75, 48, 9, 255, 85, 47, 9, 255, 86, 46, 10, 255, 83, 49, 6, 255, 87, 54, 8, 255, 85, 50, 9, 255, 89, 50, 12, 255, 94, 53, 7, 255, 93, 52, 3, 255, 90, 54, 6, 255, 91, 50, 1, 255, 94, 54, 4, 255, 97, 54, 7, 255, 93, 52, 7, 255, 94, 54, 8, 255, 100, 58, 5, 255, 103, 59, 1, 255, 106, 61, 8, 255, 105, 60, 5, 255, 100, 58, 6, 255, 97, 59, 6, 255, 101, 62, 0, 255, 105, 60, 2, 255, 105, 60, 7, 255, 101, 57, 3, 255, 104, 57, 9, 255, 103, 57, 2, 255, 106, 58, 7, 255, 106, 55, 7, 255, 108, 57, 6, 255, 109, 57, 10, 255, 110, 57, 7, 255, 109, 57, 4, 255, 113, 62, 9, 255, 110, 58, 11, 255, 110, 59, 11, 255, 107, 61, 6, 255, 111, 63, 6, 255, 102, 56, 1, 255, 106, 56, 4, 255, 117, 57, 13, 255, 111, 50, 11, 255, 107, 55, 12, 255, 107, 58, 11, 255, 124, 66, 9, 255, 114, 61, 4, 255, 108, 57, 9, 255, 105, 57, 9, 255, 114, 56, 9, 255, 121, 63, 19, 255, 95, 56, 5, 255, 102, 58, 8, 255, 129, 66, 10, 255, 139, 67, 4, 255, 116, 66, 6, 255, 114, 67, 2, 255, 118, 63, 9, 255, 121, 65, 6, 255, 123, 72, 11, 255, 120, 70, 2, 255, 122, 66, 5, 255, 113, 66, 2, 255, 118, 59, 4, 255, 136, 63, 8, 255, 123, 58, 1, 255, 125, 58, 15, 255, 137, 68, 9, 255, 143, 69, 3, 255, 149, 71, 14, 255, 173, 83, 12, 255, 170, 78, 2, 255, 151, 70, 11, 255, 154, 75, 8, 255, 160, 76, 5, 255, 160, 71, 6, 255, 164, 77, 3, 255, 165, 80, 6, 255, 165, 77, 9, 255, 168, 80, 4, 255, 158, 76, 3, 255, 160, 77, 6, 255, 159, 72, 6, 255, 159, 70, 13, 255, 162, 79, 12, 255, 150, 77, 6, 255, 155, 79, 7, 255, 159, 80, 7, 255, 164, 84, 10, 255, 178, 87, 10, 255, 173, 85, 12, 255, 152, 84, 12, 255, 145, 83, 5, 255, 156, 80, 6, 255, 167, 88, 7, 255, 172, 91, 5, 255, 172, 92, 11, 255, 167, 91, 2, 255, 166, 93, 4, 255, 166, 93, 11, 255, 164, 93, 5, 255, 164, 93, 7, 255, 166, 93, 16, 255, 163, 90, 11, 255, 160, 89, 3, 255, 159, 87, 5, 255, 158, 87, 9, 255, 156, 90, 6, 255, 153, 90, 4, 255, 155, 90, 8, 255, 158, 92, 10, 255, 160, 95, 7, 255, 164, 93, 7, 255, 165, 96, 4, 255, 167, 99, 5, 255, 167, 97, 8, 255, 169, 98, 9, 255, 172, 101, 4, 255, 174, 102, 13, 255, 171, 102, 12, 255, 177, 106, 4, 255, 181, 106, 7, 255, 177, 107, 14, 255, 171, 103, 13, 255, 177, 108, 2, 255, 183, 113, 12, 255, 189, 115, 12, 255, 195, 122, 5, 255, 195, 120, 9, 255, 186, 111, 6, 255, 181, 108, 12, 255, 174, 105, 18, 255, 170, 104, 9, 255, 168, 104, 4, 255, 173, 106, 6, 255, 174, 103, 7, 255, 176, 106, 8, 255, 177, 108, 7, 255, 179, 107, 10, 255, 180, 109, 9, 255, 183, 110, 15, 255, 182, 110, 16, 255, 184, 111, 15, 255, 186, 114, 13, 255, 189, 114, 18, 255, 186, 116, 4, 255, 186, 116, 6, 255, 189, 118, 9, 255, 189, 119, 5, 255, 195, 125, 3, 255, 201, 129, 1, 255, 206, 131, 0, 255, 210, 131, 6, 255, 215, 135, 7, 255, 215, 137, 1, 255, 212, 134, 3, 255, 208, 133, 1, 255, 204, 127, 4, 255, 205, 127, 4, 255, 206, 131, 4, 255, 212, 139, 11, 255, 210, 137, 7, 255, 205, 129, 6, 255, 201, 128, 7, 255, 198, 126, 4, 255, 197, 123, 14, 255, 192, 117, 16, 255, 192, 117, 9, 255, 191, 115, 0, 255, 193, 116, 1, 255, 192, 112, 2, 255, 189, 109, 0, 255, 192, 111, 3, 255, 191, 110, 4, 255, 188, 106, 4, 255, 184, 101, 3, 255, 184, 103, 4, 255, 182, 102, 4, 255, 179, 99, 3, 255, 182, 100, 5, 255, 185, 103, 6, 255, 184, 104, 5, 255, 180, 102, 1, 255, 184, 105, 8, 255, 184, 107, 8, 255, 184, 110, 10, 255, 183, 109, 17, 255, 179, 110, 18, 255, 175, 108, 14, 255, 173, 107, 24, 255, 177, 111, 20, 255, 177, 111, 18, 255, 171, 105, 23, 255, 167, 107, 14, 255, 168, 108, 0, 255, 169, 103, 9, 255, 161, 96, 7, 255, 158, 95, 8, 255, 154, 89, 7, 255, 154, 87, 8, 255, 158, 84, 10, 255, 156, 81, 4, 255, 160, 83, 1, 255, 163, 82, 3, 255, 167, 84, 7, 255, 164, 81, 7, 255, 166, 82, 9, 255, 167, 81, 10, 255, 157, 75, 7, 255, 157, 75, 4, 255, 158, 78, 5, 255, 153, 74, 7, 255, 149, 70, 9, 255, 149, 73, 14, 255, 144, 73, 8, 255, 145, 72, 6, 255, 145, 65, 9, 255, 137, 63, 7, 255, 132, 66, 5, 255, 133, 68, 3, 255, 138, 69, 5, 255, 137, 71, 6, 255, 134, 69, 6, 255, 127, 64, 2, 255, 125, 64, 3, 255, 122, 65, 5, 255, 118, 64, 2, 255, 112, 60, 0, 255, 107, 54, 5, 255, 104, 54, 1, 255, 105, 57, 2, 255, 107, 58, 8, 255, 110, 58, 7, 255, 103, 52, 8, 255, 99, 53, 8, 255, 99, 54, 6, 255, 105, 60, 6, 255, 104, 59, 7, 255, 102, 57, 6, 255, 101, 57, 6, 255, 102, 55, 9, 255, 102, 52, 7, 255, 95, 48, 2, 255, 95, 47, 4, 255, 90, 41, 4, 255, 80, 40, 6, 255, 83, 37, 4, 255, 92, 42, 6, 255, 92, 47, 5, 255, 91, 46, 4, 255, 87, 42, 1, 255, 84, 39, 2, 255, 80, 37, 4, 255, 75, 32, 8, 255, 68, 29, 3, 255, 68, 30, 3, 255, 1, 1, 4, 255, 2, 1, 0, 255, 1, 3, 2, 255, 4, 0, 2, 255, 4, 1, 2, 255, 2, 0, 0, 255, 11, 5, 12, 255, 57, 57, 69, 255, 46, 38, 51, 255, 24, 100, 144, 255, 0, 97, 130, 255, 8, 51, 89, 255, 29, 123, 155, 255, 11, 105, 113, 255, 1, 34, 28, 255, 4, 6, 3, 255, 1, 0, 1, 255, 2, 2, 1, 255, 3, 1, 4, 255, 1, 1, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 0, 3, 255, 0, 1, 6, 255, 2, 3, 10, 255, 2, 5, 10, 255, 1, 2, 6, 255, 3, 4, 8, 255, 2, 3, 8, 255, 2, 3, 6, 255, 2, 3, 7, 255, 2, 3, 7, 255, 1, 2, 3, 255, 3, 4, 7, 255, 1, 2, 6, 255, 1, 2, 6, 255, 0, 1, 6, 255, 2, 3, 8, 255, 3, 3, 9, 255, 1, 5, 6, 255, 1, 4, 12, 255, 1, 3, 14, 255, 0, 1, 7, 255, 0, 0, 10, 255, 1, 2, 2, 255, 5, 0, 7, 255, 3, 106, 193, 255, 1, 87, 161, 255, 13, 1, 0, 255, 8, 5, 74, 255, 8, 33, 201, 255, 15, 22, 31, 255, 27, 31, 25, 255, 30, 28, 26, 255, 22, 26, 22, 255, 23, 30, 20, 255, 23, 26, 26, 255, 19, 25, 24, 255, 21, 24, 33, 255, 17, 22, 24, 255, 13, 9, 7, 255, 12, 8, 3, 255, 14, 16, 11, 255, 19, 22, 18, 255, 16, 18, 14, 255, 10, 7, 5, 255, 7, 2, 1, 255, 7, 2, 3, 255, 6, 2, 1, 255, 5, 1, 0, 255, 8, 3, 1, 255, 7, 2, 0, 255, 4, 3, 1, 255, 5, 5, 2, 255, 7, 7, 2, 255, 7, 7, 0, 255, 10, 9, 0, 255, 9, 10, 4, 255, 13, 14, 6, 255, 12, 13, 5, 255, 16, 19, 7, 255, 14, 18, 4, 255, 19, 23, 9, 255, 20, 24, 13, 255, 22, 28, 9, 255, 19, 26, 7, 255, 23, 25, 13, 255, 27, 29, 10, 255, 29, 32, 8, 255, 31, 36, 12, 255, 29, 37, 8, 255, 35, 47, 14, 255, 38, 55, 18, 255, 48, 69, 33, 255, 52, 80, 27, 255, 59, 87, 47, 255, 66, 98, 54, 255, 73, 106, 55, 255, 80, 117, 57, 255, 83, 118, 57, 255, 86, 114, 58, 255, 82, 105, 61, 255, 78, 102, 41, 255, 78, 100, 34, 255, 82, 99, 26, 255, 85, 99, 29, 255, 80, 92, 20, 255, 79, 84, 22, 255, 76, 80, 18, 255, 71, 80, 21, 255, 64, 78, 11, 255, 74, 72, 4, 255, 74, 64, 8, 255, 53, 52, 8, 255, 48, 46, 3, 255, 55, 41, 6, 255, 48, 41, 4, 255, 58, 45, 6, 255, 64, 40, 4, 255, 59, 42, 2, 255, 69, 46, 6, 255, 76, 50, 4, 255, 75, 55, 3, 255, 84, 54, 5, 255, 84, 54, 3, 255, 75, 51, 2, 255, 68, 48, 0, 255, 66, 46, 4, 255, 74, 48, 4, 255, 80, 48, 1, 255, 81, 48, 3, 255, 83, 52, 1, 255, 85, 54, 5, 255, 83, 53, 3, 255, 84, 51, 3, 255, 84, 50, 4, 255, 80, 48, 2, 255, 79, 46, 6, 255, 83, 47, 3, 255, 85, 48, 2, 255, 84, 48, 7, 255, 77, 45, 1, 255, 80, 43, 4, 255, 82, 48, 4, 255, 76, 48, 2, 255, 77, 46, 6, 255, 87, 49, 10, 255, 87, 56, 4, 255, 87, 53, 4, 255, 85, 49, 4, 255, 86, 55, 4, 255, 91, 61, 8, 255, 92, 52, 5, 255, 98, 52, 8, 255, 95, 53, 4, 255, 96, 52, 3, 255, 95, 54, 3, 255, 99, 56, 7, 255, 96, 56, 9, 255, 93, 53, 11, 255, 96, 57, 5, 255, 97, 56, 6, 255, 105, 59, 9, 255, 105, 58, 7, 255, 103, 58, 10, 255, 99, 57, 6, 255, 104, 59, 4, 255, 105, 59, 5, 255, 106, 60, 10, 255, 103, 57, 8, 255, 106, 59, 9, 255, 106, 59, 5, 255, 109, 62, 5, 255, 110, 60, 9, 255, 109, 59, 14, 255, 109, 59, 4, 255, 112, 61, 10, 255, 110, 58, 7, 255, 113, 61, 2, 255, 107, 53, 14, 255, 110, 59, 12, 255, 110, 57, 1, 255, 105, 60, 7, 255, 108, 61, 14, 255, 123, 59, 7, 255, 133, 65, 6, 255, 118, 60, 6, 255, 104, 56, 3, 255, 115, 60, 3, 255, 134, 62, 9, 255, 126, 62, 6, 255, 111, 56, 8, 255, 103, 57, 6, 255, 116, 64, 4, 255, 126, 60, 11, 255, 121, 58, 6, 255, 138, 74, 10, 255, 130, 66, 6, 255, 128, 65, 9, 255, 115, 66, 6, 255, 115, 68, 3, 255, 121, 69, 11, 255, 125, 68, 3, 255, 127, 71, 5, 255, 124, 70, 8, 255, 116, 65, 7, 255, 120, 70, 7, 255, 120, 69, 8, 255, 107, 64, 2, 255, 114, 66, 2, 255, 113, 61, 14, 255, 129, 65, 7, 255, 136, 67, 3, 255, 141, 62, 10, 255, 151, 69, 7, 255, 155, 74, 10, 255, 138, 63, 10, 255, 143, 68, 8, 255, 157, 75, 2, 255, 160, 74, 2, 255, 162, 75, 3, 255, 165, 81, 8, 255, 160, 77, 5, 255, 156, 74, 1, 255, 151, 71, 7, 255, 152, 73, 12, 255, 155, 75, 7, 255, 158, 76, 5, 255, 164, 80, 8, 255, 161, 76, 10, 255, 159, 80, 10, 255, 157, 77, 8, 255, 162, 80, 12, 255, 162, 84, 15, 255, 173, 91, 9, 255, 180, 90, 3, 255, 167, 83, 5, 255, 161, 88, 7, 255, 162, 85, 0, 255, 159, 82, 2, 255, 163, 86, 5, 255, 172, 95, 6, 255, 175, 96, 9, 255, 175, 93, 9, 255, 172, 93, 3, 255, 166, 92, 5, 255, 161, 90, 13, 255, 157, 88, 10, 255, 159, 91, 5, 255, 161, 90, 4, 255, 163, 91, 8, 255, 156, 90, 7, 255, 155, 91, 8, 255, 159, 94, 7, 255, 158, 93, 4, 255, 158, 93, 7, 255, 161, 96, 3, 255, 164, 98, 7, 255, 166, 97, 6, 255, 166, 97, 4, 255, 171, 99, 10, 255, 176, 102, 10, 255, 175, 102, 8, 255, 172, 98, 17, 255, 178, 104, 7, 255, 185, 109, 11, 255, 181, 110, 6, 255, 174, 106, 3, 255, 181, 110, 12, 255, 185, 115, 0, 255, 191, 120, 10, 255, 197, 120, 10, 255, 195, 118, 14, 255, 183, 113, 9, 255, 177, 108, 13, 255, 176, 106, 19, 255, 175, 107, 2, 255, 174, 104, 11, 255, 178, 107, 5, 255, 179, 106, 5, 255, 180, 105, 15, 255, 181, 105, 4, 255, 188, 107, 5, 255, 187, 113, 9, 255, 180, 112, 7, 255, 182, 114, 6, 255, 187, 117, 5, 255, 187, 115, 1, 255, 192, 117, 10, 255, 190, 119, 4, 255, 188, 117, 7, 255, 189, 118, 6, 255, 191, 120, 3, 255, 197, 122, 6, 255, 204, 129, 5, 255, 210, 133, 4, 255, 211, 131, 0, 255, 216, 136, 0, 255, 218, 137, 4, 255, 215, 135, 5, 255, 211, 129, 11, 255, 208, 132, 6, 255, 204, 128, 5, 255, 207, 131, 13, 255, 211, 136, 11, 255, 203, 125, 10, 255, 200, 117, 10, 255, 198, 117, 6, 255, 198, 117, 4, 255, 198, 120, 12, 255, 192, 115, 12, 255, 189, 115, 5, 255, 191, 116, 0, 255, 193, 116, 2, 255, 196, 115, 2, 255, 191, 111, 1, 255, 189, 109, 0, 255, 190, 109, 3, 255, 186, 104, 3, 255, 186, 105, 6, 255, 184, 100, 7, 255, 181, 101, 4, 255, 182, 102, 2, 255, 183, 103, 3, 255, 181, 102, 2, 255, 180, 104, 6, 255, 179, 102, 3, 255, 184, 103, 7, 255, 185, 104, 13, 255, 185, 108, 11, 255, 184, 113, 13, 255, 179, 112, 18, 255, 178, 115, 19, 255, 175, 109, 13, 255, 180, 108, 17, 255, 175, 108, 6, 255, 169, 100, 6, 255, 172, 100, 13, 255, 169, 99, 8, 255, 165, 97, 10, 255, 163, 94, 10, 255, 155, 88, 5, 255, 150, 84, 7, 255, 143, 76, 6, 255, 148, 78, 11, 255, 151, 78, 13, 255, 153, 76, 8, 255, 158, 79, 8, 255, 162, 82, 6, 255, 162, 83, 7, 255, 158, 78, 9, 255, 148, 64, 6, 255, 146, 63, 6, 255, 153, 71, 8, 255, 157, 75, 10, 255, 153, 73, 8, 255, 154, 74, 8, 255, 151, 73, 3, 255, 145, 75, 4, 255, 144, 73, 6, 255, 143, 65, 7, 255, 142, 68, 10, 255, 138, 71, 10, 255, 134, 68, 8, 255, 135, 68, 6, 255, 139, 73, 3, 255, 139, 73, 4, 255, 137, 69, 6, 255, 134, 67, 9, 255, 128, 64, 4, 255, 123, 61, 2, 255, 112, 57, 6, 255, 102, 50, 4, 255, 99, 51, 0, 255, 99, 52, 4, 255, 99, 52, 8, 255, 98, 52, 10, 255, 87, 44, 6, 255, 84, 42, 0, 255, 97, 49, 11, 255, 104, 54, 6, 255, 107, 59, 4, 255, 104, 60, 4, 255, 102, 59, 6, 255, 104, 54, 2, 255, 95, 54, 2, 255, 101, 58, 7, 255, 100, 53, 6, 255, 93, 50, 2, 255, 95, 50, 3, 255, 101, 48, 8, 255, 99, 48, 8, 255, 93, 47, 4, 255, 90, 43, 3, 255, 83, 38, 1, 255, 83, 39, 6, 255, 81, 37, 6, 255, 86, 36, 7, 255, 83, 35, 7, 255, 85, 37, 6, 255, 1, 2, 2, 255, 7, 2, 1, 255, 2, 2, 0, 255, 0, 3, 3, 255, 3, 0, 3, 255, 3, 1, 3, 255, 2, 1, 2, 255, 0, 0, 0, 255, 1, 0, 0, 255, 1, 38, 69, 255, 3, 133, 183, 255, 20, 148, 170, 255, 12, 87, 96, 255, 3, 48, 95, 255, 3, 25, 59, 255, 4, 20, 56, 255, 5, 45, 75, 255, 4, 6, 7, 255, 3, 1, 2, 255, 0, 1, 2, 255, 0, 0, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 1, 3, 255, 3, 4, 8, 255, 4, 5, 9, 255, 2, 3, 7, 255, 3, 3, 7, 255, 1, 2, 7, 255, 1, 2, 7, 255, 0, 1, 5, 255, 0, 1, 5, 255, 0, 2, 4, 255, 0, 0, 4, 255, 0, 0, 5, 255, 2, 3, 9, 255, 0, 1, 5, 255, 2, 2, 5, 255, 3, 3, 6, 255, 0, 3, 10, 255, 0, 2, 16, 255, 0, 2, 9, 255, 2, 1, 6, 255, 2, 2, 10, 255, 4, 0, 0, 255, 5, 47, 114, 255, 4, 127, 228, 255, 6, 18, 28, 255, 5, 0, 4, 255, 10, 25, 173, 255, 4, 20, 103, 255, 13, 12, 0, 255, 18, 31, 22, 255, 27, 32, 31, 255, 26, 33, 28, 255, 29, 30, 24, 255, 24, 25, 22, 255, 21, 23, 23, 255, 19, 30, 32, 255, 17, 28, 37, 255, 11, 10, 14, 255, 9, 4, 1, 255, 15, 12, 8, 255, 23, 20, 19, 255, 19, 20, 21, 255, 11, 10, 6, 255, 7, 2, 0, 255, 8, 4, 2, 255, 8, 5, 3, 255, 8, 4, 2, 255, 8, 5, 1, 255, 6, 4, 1, 255, 6, 5, 3, 255, 7, 7, 2, 255, 9, 9, 4, 255, 9, 9, 2, 255, 11, 13, 1, 255, 13, 15, 3, 255, 10, 12, 3, 255, 16, 16, 7, 255, 17, 18, 5, 255, 18, 20, 6, 255, 21, 23, 12, 255, 18, 23, 9, 255, 17, 26, 3, 255, 19, 27, 9, 255, 24, 27, 18, 255, 25, 29, 9, 255, 27, 36, 9, 255, 30, 37, 14, 255, 28, 42, 13, 255, 32, 54, 23, 255, 46, 62, 25, 255, 54, 69, 37, 255, 61, 88, 29, 255, 66, 96, 32, 255, 76, 98, 56, 255, 84, 106, 50, 255, 84, 114, 53, 255, 82, 114, 55, 255, 84, 113, 41, 255, 77, 106, 41, 255, 72, 99, 39, 255, 76, 95, 36, 255, 81, 94, 24, 255, 79, 91, 21, 255, 76, 87, 21, 255, 78, 85, 23, 255, 76, 79, 15, 255, 69, 79, 13, 255, 67, 77, 14, 255, 71, 69, 15, 255, 65, 60, 8, 255, 56, 55, 4, 255, 61, 47, 10, 255, 59, 41, 7, 255, 55, 42, 5, 255, 61, 42, 5, 255, 64, 40, 4, 255, 65, 48, 7, 255, 71, 50, 4, 255, 80, 49, 2, 255, 88, 48, 5, 255, 92, 53, 3, 255, 88, 53, 2, 255, 77, 47, 7, 255, 72, 46, 4, 255, 72, 45, 3, 255, 76, 43, 2, 255, 82, 46, 2, 255, 82, 48, 4, 255, 83, 52, 2, 255, 88, 53, 3, 255, 85, 55, 5, 255, 80, 51, 1, 255, 78, 46, 2, 255, 78, 46, 5, 255, 80, 46, 7, 255, 82, 45, 7, 255, 84, 48, 4, 255, 84, 51, 1, 255, 82, 45, 6, 255, 83, 49, 6, 255, 83, 49, 6, 255, 86, 50, 6, 255, 88, 49, 6, 255, 88, 48, 6, 255, 88, 52, 3, 255, 88, 54, 9, 255, 83, 50, 8, 255, 86, 52, 4, 255, 93, 55, 5, 255, 89, 48, 7, 255, 98, 54, 14, 255, 96, 54, 7, 255, 95, 48, 12, 255, 98, 54, 12, 255, 99, 54, 2, 255, 100, 58, 1, 255, 101, 60, 4, 255, 104, 56, 11, 255, 104, 53, 13, 255, 108, 59, 8, 255, 105, 59, 9, 255, 100, 59, 10, 255, 96, 59, 5, 255, 101, 57, 7, 255, 108, 57, 9, 255, 109, 59, 11, 255, 107, 57, 12, 255, 109, 59, 6, 255, 106, 57, 10, 255, 108, 60, 4, 255, 111, 60, 7, 255, 110, 59, 4, 255, 108, 58, 4, 255, 114, 62, 12, 255, 115, 63, 5, 255, 115, 62, 4, 255, 107, 57, 11, 255, 113, 57, 13, 255, 111, 57, 7, 255, 113, 61, 4, 255, 124, 63, 8, 255, 124, 60, 7, 255, 113, 56, 8, 255, 106, 60, 12, 255, 101, 62, 12, 255, 110, 61, 10, 255, 122, 63, 5, 255, 126, 65, 8, 255, 128, 68, 11, 255, 107, 60, 8, 255, 112, 67, 4, 255, 104, 63, 4, 255, 124, 68, 9, 255, 147, 66, 5, 255, 129, 67, 7, 255, 114, 68, 4, 255, 121, 67, 5, 255, 124, 67, 7, 255, 123, 67, 6, 255, 131, 69, 7, 255, 134, 71, 10, 255, 128, 71, 16, 255, 123, 69, 8, 255, 133, 72, 10, 255, 135, 69, 7, 255, 124, 69, 10, 255, 118, 69, 5, 255, 110, 60, 2, 255, 112, 63, 4, 255, 112, 60, 5, 255, 118, 58, 11, 255, 105, 56, 4, 255, 98, 53, 6, 255, 116, 59, 8, 255, 120, 60, 3, 255, 134, 70, 4, 255, 151, 74, 9, 255, 160, 74, 9, 255, 159, 72, 8, 255, 157, 72, 9, 255, 157, 74, 6, 255, 158, 76, 3, 255, 157, 75, 0, 255, 160, 75, 6, 255, 162, 75, 2, 255, 164, 82, 2, 255, 153, 76, 6, 255, 141, 70, 4, 255, 140, 71, 4, 255, 155, 82, 6, 255, 165, 85, 5, 255, 159, 78, 3, 255, 161, 81, 6, 255, 174, 86, 5, 255, 187, 94, 12, 255, 174, 91, 11, 255, 157, 85, 16, 255, 147, 80, 13, 255, 163, 91, 11, 255, 169, 88, 10, 255, 175, 92, 13, 255, 176, 98, 9, 255, 168, 95, 5, 255, 162, 93, 6, 255, 160, 94, 5, 255, 161, 96, 8, 255, 161, 94, 8, 255, 162, 95, 6, 255, 159, 96, 4, 255, 155, 93, 9, 255, 159, 91, 10, 255, 159, 90, 2, 255, 164, 95, 4, 255, 161, 95, 2, 255, 165, 98, 12, 255, 168, 99, 10, 255, 168, 100, 5, 255, 166, 99, 4, 255, 174, 100, 9, 255, 171, 104, 9, 255, 176, 113, 7, 255, 183, 114, 7, 255, 181, 112, 3, 255, 183, 113, 5, 255, 179, 106, 1, 255, 179, 104, 10, 255, 183, 112, 12, 255, 190, 117, 16, 255, 195, 113, 5, 255, 198, 118, 5, 255, 188, 114, 13, 255, 179, 106, 10, 255, 177, 106, 13, 255, 177, 108, 18, 255, 176, 107, 12, 255, 176, 106, 4, 255, 178, 105, 0, 255, 184, 112, 8, 255, 188, 113, 10, 255, 187, 109, 5, 255, 184, 109, 10, 255, 182, 111, 11, 255, 184, 113, 8, 255, 186, 113, 9, 255, 190, 114, 14, 255, 192, 115, 10, 255, 189, 114, 12, 255, 188, 113, 17, 255, 190, 119, 6, 255, 194, 122, 0, 255, 197, 122, 6, 255, 203, 127, 10, 255, 205, 128, 8, 255, 209, 128, 7, 255, 216, 134, 2, 255, 217, 137, 3, 255, 212, 132, 1, 255, 206, 124, 5, 255, 212, 129, 4, 255, 210, 130, 0, 255, 209, 133, 2, 255, 208, 131, 21, 255, 199, 123, 20, 255, 199, 120, 14, 255, 203, 118, 10, 255, 202, 118, 9, 255, 201, 120, 9, 255, 199, 118, 6, 255, 192, 113, 1, 255, 195, 115, 5, 255, 195, 113, 3, 255, 193, 113, 1, 255, 194, 113, 4, 255, 193, 112, 5, 255, 186, 105, 1, 255, 185, 106, 5, 255, 183, 104, 3, 255, 182, 101, 3, 255, 182, 102, 3, 255, 183, 102, 4, 255, 181, 98, 0, 255, 182, 100, 3, 255, 183, 104, 7, 255, 183, 104, 9, 255, 183, 102, 12, 255, 185, 102, 18, 255, 183, 105, 17, 255, 175, 102, 12, 255, 173, 104, 22, 255, 177, 111, 27, 255, 175, 111, 23, 255, 177, 111, 11, 255, 175, 111, 18, 255, 169, 104, 10, 255, 167, 96, 3, 255, 160, 91, 11, 255, 160, 94, 9, 255, 162, 93, 4, 255, 163, 90, 1, 255, 162, 90, 4, 255, 159, 89, 10, 255, 157, 88, 11, 255, 150, 79, 3, 255, 159, 84, 10, 255, 165, 88, 10, 255, 163, 86, 4, 255, 160, 83, 4, 255, 144, 66, 0, 255, 148, 66, 11, 255, 157, 71, 4, 255, 160, 75, 5, 255, 159, 75, 2, 255, 155, 76, 3, 255, 154, 77, 6, 255, 147, 72, 5, 255, 150, 76, 10, 255, 143, 72, 6, 255, 139, 68, 6, 255, 140, 69, 9, 255, 135, 65, 4, 255, 131, 65, 3, 255, 134, 70, 8, 255, 129, 70, 2, 255, 133, 72, 7, 255, 132, 68, 13, 255, 128, 65, 11, 255, 120, 60, 3, 255, 112, 56, 6, 255, 112, 56, 10, 255, 108, 56, 7, 255, 106, 58, 3, 255, 104, 55, 6, 255, 102, 53, 2, 255, 99, 55, 1, 255, 96, 54, 6, 255, 96, 53, 5, 255, 94, 50, 5, 255, 94, 50, 6, 255, 99, 55, 10, 255, 102, 50, 10, 255, 100, 43, 5, 255, 105, 52, 5, 255, 105, 53, 7, 255, 97, 50, 4, 255, 96, 48, 4, 255, 105, 50, 6, 255, 106, 52, 6, 255, 103, 50, 8, 255, 89, 43, 2, 255, 85, 42, 1, 255, 95, 46, 6, 255, 91, 42, 4, 255, 90, 43, 7, 255, 94, 43, 8, 255, 94, 40, 5, 255, 93, 41, 6, 255, 90, 39, 5, 255, 0, 1, 0, 255, 2, 1, 2, 255, 2, 0, 5, 255, 0, 1, 2, 255, 2, 1, 1, 255, 2, 3, 3, 255, 0, 1, 0, 255, 3, 0, 3, 255, 2, 0, 0, 255, 0, 0, 0, 255, 8, 35, 71, 255, 20, 144, 190, 255, 13, 127, 139, 255, 1, 52, 95, 255, 10, 81, 159, 255, 16, 142, 213, 255, 3, 84, 101, 255, 5, 8, 3, 255, 3, 0, 2, 255, 0, 1, 5, 255, 0, 1, 3, 255, 1, 1, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 3, 255, 3, 3, 8, 255, 2, 3, 7, 255, 0, 2, 5, 255, 0, 1, 6, 255, 2, 3, 8, 255, 1, 2, 6, 255, 0, 0, 4, 255, 0, 1, 5, 255, 1, 2, 7, 255, 0, 1, 6, 255, 2, 3, 8, 255, 2, 1, 5, 255, 1, 1, 2, 255, 3, 4, 6, 255, 1, 4, 12, 255, 0, 2, 12, 255, 0, 0, 11, 255, 1, 0, 6, 255, 2, 0, 0, 255, 1, 14, 45, 255, 1, 154, 255, 255, 13, 76, 114, 255, 12, 0, 0, 255, 15, 12, 92, 255, 3, 33, 175, 255, 2, 4, 2, 255, 16, 6, 0, 255, 22, 23, 25, 255, 26, 26, 33, 255, 29, 29, 22, 255, 30, 32, 23, 255, 29, 34, 28, 255, 23, 27, 31, 255, 24, 33, 33, 255, 23, 33, 48, 255, 19, 20, 27, 255, 8, 6, 1, 255, 9, 10, 2, 255, 16, 19, 14, 255, 19, 21, 24, 255, 15, 14, 12, 255, 11, 6, 2, 255, 8, 3, 0, 255, 7, 3, 2, 255, 8, 3, 3, 255, 6, 5, 0, 255, 4, 5, 2, 255, 7, 6, 3, 255, 9, 5, 2, 255, 10, 8, 4, 255, 10, 11, 3, 255, 13, 15, 3, 255, 11, 13, 0, 255, 13, 15, 4, 255, 18, 18, 6, 255, 17, 18, 4, 255, 19, 20, 6, 255, 21, 22, 11, 255, 22, 23, 5, 255, 23, 27, 7, 255, 23, 25, 14, 255, 24, 24, 15, 255, 24, 26, 2, 255, 26, 33, 7, 255, 28, 39, 21, 255, 29, 47, 17, 255, 37, 63, 21, 255, 47, 73, 16, 255, 62, 77, 36, 255, 72, 87, 47, 255, 69, 98, 52, 255, 76, 104, 52, 255, 85, 108, 53, 255, 86, 113, 52, 255, 83, 111, 49, 255, 85, 102, 41, 255, 82, 97, 31, 255, 75, 96, 35, 255, 73, 90, 28, 255, 79, 90, 22, 255, 80, 90, 17, 255, 73, 85, 12, 255, 74, 82, 12, 255, 76, 77, 17, 255, 68, 74, 18, 255, 59, 71, 8, 255, 65, 69, 6, 255, 64, 58, 6, 255, 64, 55, 6, 255, 57, 44, 4, 255, 56, 38, 5, 255, 65, 41, 7, 255, 69, 39, 5, 255, 71, 44, 6, 255, 73, 49, 8, 255, 73, 51, 2, 255, 77, 53, 4, 255, 80, 50, 5, 255, 85, 54, 0, 255, 85, 55, 2, 255, 72, 47, 6, 255, 68, 45, 2, 255, 75, 48, 6, 255, 78, 49, 10, 255, 85, 45, 3, 255, 87, 47, 5, 255, 84, 53, 3, 255, 86, 51, 3, 255, 88, 51, 4, 255, 81, 49, 3, 255, 75, 46, 6, 255, 75, 44, 8, 255, 83, 50, 8, 255, 83, 48, 1, 255, 80, 46, 0, 255, 82, 46, 7, 255, 83, 44, 5, 255, 82, 49, 3, 255, 86, 50, 7, 255, 92, 47, 7, 255, 95, 49, 4, 255, 94, 52, 8, 255, 88, 53, 11, 255, 87, 52, 2, 255, 94, 56, 4, 255, 90, 52, 4, 255, 92, 52, 8, 255, 93, 51, 8, 255, 95, 52, 5, 255, 91, 54, 1, 255, 96, 54, 6, 255, 98, 56, 8, 255, 99, 54, 6, 255, 100, 56, 7, 255, 102, 56, 5, 255, 104, 57, 3, 255, 106, 58, 3, 255, 109, 62, 5, 255, 106, 60, 2, 255, 103, 55, 7, 255, 108, 59, 12, 255, 110, 59, 4, 255, 110, 61, 5, 255, 109, 61, 7, 255, 107, 58, 4, 255, 109, 57, 9, 255, 109, 59, 4, 255, 109, 59, 6, 255, 112, 61, 5, 255, 113, 62, 5, 255, 112, 59, 6, 255, 113, 60, 3, 255, 115, 59, 6, 255, 117, 60, 6, 255, 116, 61, 5, 255, 112, 62, 11, 255, 112, 58, 7, 255, 134, 63, 9, 255, 134, 64, 7, 255, 112, 60, 5, 255, 108, 61, 8, 255, 104, 56, 4, 255, 107, 60, 7, 255, 116, 62, 9, 255, 114, 65, 7, 255, 119, 64, 5, 255, 122, 61, 4, 255, 110, 60, 11, 255, 110, 62, 6, 255, 111, 60, 6, 255, 123, 62, 8, 255, 131, 67, 7, 255, 120, 66, 3, 255, 115, 68, 5, 255, 119, 67, 12, 255, 125, 67, 7, 255, 132, 68, 7, 255, 134, 75, 10, 255, 131, 74, 5, 255, 133, 74, 1, 255, 129, 67, 6, 255, 123, 64, 10, 255, 125, 71, 8, 255, 135, 67, 8, 255, 133, 68, 3, 255, 125, 66, 8, 255, 117, 70, 12, 255, 119, 70, 7, 255, 111, 66, 7, 255, 101, 61, 0, 255, 105, 58, 12, 255, 119, 63, 11, 255, 133, 69, 7, 255, 134, 68, 9, 255, 138, 68, 8, 255, 144, 74, 5, 255, 144, 71, 3, 255, 156, 75, 9, 255, 161, 77, 4, 255, 160, 74, 3, 255, 156, 73, 3, 255, 163, 79, 9, 255, 162, 76, 7, 255, 166, 83, 3, 255, 157, 74, 5, 255, 151, 72, 4, 255, 156, 80, 3, 255, 153, 77, 2, 255, 161, 82, 10, 255, 166, 82, 11, 255, 169, 86, 5, 255, 164, 83, 0, 255, 172, 83, 6, 255, 183, 94, 11, 255, 177, 91, 4, 255, 166, 83, 4, 255, 176, 95, 5, 255, 169, 88, 12, 255, 164, 82, 6, 255, 169, 92, 5, 255, 170, 94, 7, 255, 170, 94, 8, 255, 167, 94, 3, 255, 169, 93, 2, 255, 171, 96, 8, 255, 166, 96, 3, 255, 157, 91, 4, 255, 158, 92, 13, 255, 157, 92, 7, 255, 162, 96, 2, 255, 162, 95, 5, 255, 164, 96, 11, 255, 166, 96, 12, 255, 169, 99, 7, 255, 167, 102, 5, 255, 166, 101, 7, 255, 176, 108, 10, 255, 177, 108, 5, 255, 181, 109, 4, 255, 186, 111, 8, 255, 186, 112, 0, 255, 186, 110, 3, 255, 182, 99, 7, 255, 184, 101, 13, 255, 185, 111, 13, 255, 185, 111, 7, 255, 191, 105, 7, 255, 199, 112, 9, 255, 189, 113, 11, 255, 182, 109, 9, 255, 181, 108, 8, 255, 179, 108, 11, 255, 177, 109, 0, 255, 178, 107, 4, 255, 179, 104, 6, 255, 183, 109, 2, 255, 184, 112, 12, 255, 183, 112, 13, 255, 185, 111, 10, 255, 187, 112, 11, 255, 187, 112, 14, 255, 188, 113, 13, 255, 187, 114, 7, 255, 191, 117, 2, 255, 189, 116, 3, 255, 188, 115, 9, 255, 190, 119, 2, 255, 196, 124, 0, 255, 197, 123, 7, 255, 199, 127, 7, 255, 202, 128, 1, 255, 211, 131, 7, 255, 215, 136, 0, 255, 217, 140, 1, 255, 213, 135, 2, 255, 209, 127, 3, 255, 204, 119, 2, 255, 198, 116, 0, 255, 203, 123, 4, 255, 210, 136, 12, 255, 204, 130, 12, 255, 202, 124, 17, 255, 201, 124, 6, 255, 197, 122, 6, 255, 197, 121, 7, 255, 196, 120, 7, 255, 191, 113, 4, 255, 195, 115, 7, 255, 193, 112, 2, 255, 192, 111, 3, 255, 192, 110, 3, 255, 191, 109, 3, 255, 186, 105, 1, 255, 185, 106, 4, 255, 181, 103, 2, 255, 180, 102, 0, 255, 181, 102, 2, 255, 182, 99, 6, 255, 180, 92, 2, 255, 185, 97, 4, 255, 183, 97, 1, 255, 181, 100, 2, 255, 183, 104, 4, 255, 185, 107, 8, 255, 184, 109, 12, 255, 166, 96, 4, 255, 169, 101, 17, 255, 174, 109, 14, 255, 174, 107, 16, 255, 179, 109, 19, 255, 174, 109, 14, 255, 170, 103, 18, 255, 166, 92, 7, 255, 167, 97, 11, 255, 169, 99, 7, 255, 173, 101, 9, 255, 171, 100, 12, 255, 171, 102, 17, 255, 172, 100, 19, 255, 167, 88, 4, 255, 168, 89, 0, 255, 166, 93, 1, 255, 170, 91, 9, 255, 169, 89, 12, 255, 159, 80, 5, 255, 150, 71, 0, 255, 153, 72, 7, 255, 165, 75, 4, 255, 167, 77, 7, 255, 161, 75, 4, 255, 159, 79, 6, 255, 149, 76, 2, 255, 145, 75, 6, 255, 146, 73, 10, 255, 143, 71, 11, 255, 136, 69, 8, 255, 134, 66, 3, 255, 136, 68, 3, 255, 136, 69, 3, 255, 134, 70, 7, 255, 132, 68, 6, 255, 131, 67, 6, 255, 124, 58, 8, 255, 120, 56, 6, 255, 116, 56, 2, 255, 108, 54, 5, 255, 106, 49, 2, 255, 104, 48, 5, 255, 106, 54, 4, 255, 105, 51, 4, 255, 102, 47, 6, 255, 102, 53, 5, 255, 99, 53, 6, 255, 100, 52, 9, 255, 97, 50, 3, 255, 89, 44, 9, 255, 78, 39, 7, 255, 77, 38, 6, 255, 81, 42, 6, 255, 91, 45, 3, 255, 92, 50, 3, 255, 95, 54, 6, 255, 95, 52, 4, 255, 94, 51, 4, 255, 90, 47, 3, 255, 91, 41, 1, 255, 91, 44, 3, 255, 88, 44, 3, 255, 92, 42, 3, 255, 92, 45, 3, 255, 92, 45, 1, 255, 94, 43, 1, 255, 94, 44, 2, 255, 93, 46, 5, 255, 91, 46, 3, 255, 0, 0, 3, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 2, 255, 0, 1, 1, 255, 2, 0, 0, 255, 1, 0, 1, 255, 4, 9, 16, 255, 3, 36, 31, 255, 4, 25, 53, 255, 11, 104, 142, 255, 2, 76, 81, 255, 1, 11, 27, 255, 6, 24, 23, 255, 4, 16, 12, 255, 1, 1, 1, 255, 1, 0, 3, 255, 4, 0, 4, 255, 0, 1, 0, 255, 0, 2, 0, 255, 0, 0, 0, 255, 0, 1, 4, 255, 2, 3, 7, 255, 1, 5, 8, 255, 0, 4, 7, 255, 0, 2, 6, 255, 0, 0, 3, 255, 1, 1, 3, 255, 0, 2, 5, 255, 0, 1, 5, 255, 1, 2, 6, 255, 1, 1, 4, 255, 1, 1, 3, 255, 0, 2, 0, 255, 0, 3, 10, 255, 1, 6, 18, 255, 1, 1, 11, 255, 2, 1, 8, 255, 2, 3, 2, 255, 2, 0, 3, 255, 4, 94, 184, 255, 2, 164, 198, 255, 10, 0, 12, 255, 13, 0, 6, 255, 16, 22, 179, 255, 2, 16, 60, 255, 1, 0, 0, 255, 6, 5, 8, 255, 17, 18, 11, 255, 26, 27, 27, 255, 20, 27, 30, 255, 22, 36, 20, 255, 23, 34, 29, 255, 27, 32, 47, 255, 25, 33, 32, 255, 28, 37, 40, 255, 24, 25, 31, 255, 13, 11, 13, 255, 6, 7, 5, 255, 14, 14, 9, 255, 21, 28, 26, 255, 18, 21, 21, 255, 14, 8, 4, 255, 8, 4, 0, 255, 1, 4, 1, 255, 6, 4, 3, 255, 8, 4, 0, 255, 7, 7, 2, 255, 4, 5, 1, 255, 9, 7, 3, 255, 11, 8, 2, 255, 12, 12, 2, 255, 13, 16, 4, 255, 11, 15, 4, 255, 16, 21, 4, 255, 17, 19, 4, 255, 17, 19, 8, 255, 17, 18, 9, 255, 20, 21, 7, 255, 24, 24, 8, 255, 24, 26, 8, 255, 24, 28, 10, 255, 26, 30, 9, 255, 30, 32, 10, 255, 28, 32, 11, 255, 33, 40, 17, 255, 37, 49, 20, 255, 45, 63, 26, 255, 50, 72, 23, 255, 63, 83, 36, 255, 74, 95, 36, 255, 77, 101, 39, 255, 79, 104, 37, 255, 82, 108, 47, 255, 82, 106, 47, 255, 79, 103, 35, 255, 78, 99, 28, 255, 78, 92, 29, 255, 73, 89, 33, 255, 71, 87, 25, 255, 77, 85, 14, 255, 83, 85, 15, 255, 72, 84, 9, 255, 70, 82, 11, 255, 71, 74, 12, 255, 63, 74, 13, 255, 67, 69, 10, 255, 68, 67, 8, 255, 62, 64, 3, 255, 55, 54, 0, 255, 56, 49, 5, 255, 52, 40, 3, 255, 59, 42, 6, 255, 72, 42, 6, 255, 70, 45, 3, 255, 72, 52, 3, 255, 78, 51, 2, 255, 77, 50, 2, 255, 82, 52, 7, 255, 93, 54, 6, 255, 89, 51, 0, 255, 76, 47, 3, 255, 72, 49, 9, 255, 75, 51, 3, 255, 77, 49, 7, 255, 79, 47, 2, 255, 90, 54, 7, 255, 87, 51, 3, 255, 89, 52, 8, 255, 88, 48, 7, 255, 78, 46, 3, 255, 78, 47, 6, 255, 86, 48, 9, 255, 83, 51, 5, 255, 85, 50, 2, 255, 83, 47, 2, 255, 79, 47, 6, 255, 86, 48, 7, 255, 89, 47, 8, 255, 85, 50, 4, 255, 87, 53, 3, 255, 93, 55, 4, 255, 89, 54, 4, 255, 89, 54, 5, 255, 86, 52, 4, 255, 91, 53, 10, 255, 90, 55, 11, 255, 92, 55, 5, 255, 91, 55, 8, 255, 96, 51, 10, 255, 113, 57, 3, 255, 108, 55, 7, 255, 97, 57, 2, 255, 97, 59, 3, 255, 99, 56, 8, 255, 100, 53, 10, 255, 102, 55, 9, 255, 101, 59, 5, 255, 101, 62, 13, 255, 106, 54, 9, 255, 124, 59, 4, 255, 141, 61, 8, 255, 143, 64, 8, 255, 115, 60, 5, 255, 106, 60, 4, 255, 106, 60, 4, 255, 108, 61, 10, 255, 111, 60, 4, 255, 113, 61, 8, 255, 115, 64, 8, 255, 111, 62, 3, 255, 115, 61, 2, 255, 113, 65, 6, 255, 115, 62, 9, 255, 112, 58, 6, 255, 116, 67, 7, 255, 115, 61, 8, 255, 115, 61, 9, 255, 114, 59, 5, 255, 116, 62, 14, 255, 111, 63, 10, 255, 111, 65, 3, 255, 128, 61, 4, 255, 134, 62, 11, 255, 112, 63, 8, 255, 112, 65, 9, 255, 122, 59, 9, 255, 109, 57, 9, 255, 115, 57, 13, 255, 102, 61, 8, 255, 111, 64, 10, 255, 131, 67, 12, 255, 114, 66, 4, 255, 119, 66, 6, 255, 125, 70, 11, 255, 123, 70, 4, 255, 126, 70, 6, 255, 131, 72, 3, 255, 135, 74, 2, 255, 132, 70, 9, 255, 128, 70, 7, 255, 129, 68, 4, 255, 140, 70, 12, 255, 137, 69, 3, 255, 136, 69, 4, 255, 126, 69, 5, 255, 121, 67, 8, 255, 118, 73, 6, 255, 122, 68, 2, 255, 120, 70, 5, 255, 127, 65, 4, 255, 155, 67, 14, 255, 151, 69, 12, 255, 150, 71, 6, 255, 160, 78, 8, 255, 149, 74, 8, 255, 144, 70, 6, 255, 145, 76, 4, 255, 160, 75, 3, 255, 162, 76, 3, 255, 157, 75, 4, 255, 159, 71, 3, 255, 164, 75, 1, 255, 162, 77, 4, 255, 166, 84, 5, 255, 170, 85, 6, 255, 171, 82, 10, 255, 169, 83, 3, 255, 162, 82, 2, 255, 169, 88, 13, 255, 175, 88, 14, 255, 176, 89, 2, 255, 175, 87, 2, 255, 167, 87, 6, 255, 170, 89, 7, 255, 164, 85, 3, 255, 167, 85, 5, 255, 182, 96, 10, 255, 175, 94, 12, 255, 160, 86, 12, 255, 150, 84, 8, 255, 161, 88, 5, 255, 171, 93, 9, 255, 168, 93, 8, 255, 170, 92, 4, 255, 173, 92, 9, 255, 171, 96, 5, 255, 164, 91, 9, 255, 163, 94, 6, 255, 160, 93, 7, 255, 163, 97, 4, 255, 164, 97, 6, 255, 169, 99, 11, 255, 167, 98, 6, 255, 168, 101, 8, 255, 172, 104, 7, 255, 173, 104, 4, 255, 176, 105, 7, 255, 180, 108, 1, 255, 184, 109, 9, 255, 187, 114, 7, 255, 185, 113, 3, 255, 186, 112, 11, 255, 185, 113, 10, 255, 184, 112, 15, 255, 184, 115, 4, 255, 188, 115, 7, 255, 195, 116, 16, 255, 199, 120, 10, 255, 189, 115, 4, 255, 181, 110, 5, 255, 185, 109, 10, 255, 183, 109, 11, 255, 183, 112, 8, 255, 179, 109, 9, 255, 181, 110, 12, 255, 181, 111, 7, 255, 182, 112, 8, 255, 186, 113, 10, 255, 185, 112, 8, 255, 184, 110, 10, 255, 183, 110, 12, 255, 188, 115, 10, 255, 187, 117, 2, 255, 189, 116, 9, 255, 190, 118, 6, 255, 191, 115, 5, 255, 194, 116, 1, 255, 199, 120, 3, 255, 197, 120, 8, 255, 198, 126, 4, 255, 203, 130, 2, 255, 209, 133, 3, 255, 213, 135, 2, 255, 216, 136, 3, 255, 213, 131, 5, 255, 207, 124, 4, 255, 206, 126, 5, 255, 205, 125, 6, 255, 207, 126, 3, 255, 209, 134, 5, 255, 200, 131, 11, 255, 197, 124, 10, 255, 198, 123, 8, 255, 195, 118, 8, 255, 198, 119, 11, 255, 197, 117, 7, 255, 193, 113, 2, 255, 195, 112, 5, 255, 194, 111, 6, 255, 192, 109, 5, 255, 191, 109, 2, 255, 187, 104, 3, 255, 190, 108, 5, 255, 186, 105, 0, 255, 187, 105, 5, 255, 182, 100, 0, 255, 181, 100, 1, 255, 183, 101, 5, 255, 181, 94, 4, 255, 182, 93, 3, 255, 185, 97, 2, 255, 183, 100, 5, 255, 182, 102, 3, 255, 187, 107, 10, 255, 187, 106, 8, 255, 163, 95, 10, 255, 167, 100, 14, 255, 173, 103, 10, 255, 172, 99, 13, 255, 174, 106, 11, 255, 171, 105, 15, 255, 166, 100, 17, 255, 165, 95, 9, 255, 173, 101, 6, 255, 179, 106, 0, 255, 174, 102, 10, 255, 179, 103, 12, 255, 173, 98, 10, 255, 167, 89, 8, 255, 171, 85, 1, 255, 180, 98, 12, 255, 180, 97, 7, 255, 176, 93, 3, 255, 177, 91, 7, 255, 169, 86, 5, 255, 161, 79, 8, 255, 162, 80, 8, 255, 161, 78, 3, 255, 160, 77, 3, 255, 160, 78, 7, 255, 151, 75, 2, 255, 146, 75, 3, 255, 147, 78, 5, 255, 148, 77, 6, 255, 143, 76, 7, 255, 137, 73, 8, 255, 133, 69, 7, 255, 134, 70, 8, 255, 129, 66, 4, 255, 129, 66, 5, 255, 135, 66, 7, 255, 128, 62, 4, 255, 122, 59, 4, 255, 114, 55, 5, 255, 115, 56, 5, 255, 116, 57, 2, 255, 107, 55, 0, 255, 103, 52, 2, 255, 99, 46, 5, 255, 93, 39, 4, 255, 91, 38, 4, 255, 94, 47, 6, 255, 92, 45, 6, 255, 99, 50, 5, 255, 99, 51, 1, 255, 88, 39, 6, 255, 81, 34, 8, 255, 80, 40, 0, 255, 85, 48, 4, 255, 99, 48, 7, 255, 101, 56, 3, 255, 100, 58, 3, 255, 102, 54, 5, 255, 107, 58, 10, 255, 94, 47, 2, 255, 94, 46, 4, 255, 99, 49, 6, 255, 96, 44, 3, 255, 94, 44, 5, 255, 84, 42, 3, 255, 82, 39, 1, 255, 90, 40, 4, 255, 94, 44, 6, 255, 93, 45, 3, 255, 97, 49, 7, 255, 1, 0, 6, 255, 0, 0, 2, 255, 0, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 3, 255, 2, 0, 4, 255, 0, 0, 3, 255, 3, 1, 1, 255, 3, 2, 3, 255, 0, 3, 1, 255, 6, 0, 2, 255, 2, 0, 0, 255, 5, 28, 58, 255, 16, 78, 120, 255, 8, 79, 113, 255, 18, 74, 99, 255, 6, 31, 53, 255, 4, 18, 27, 255, 2, 8, 0, 255, 4, 0, 0, 255, 3, 2, 0, 255, 1, 2, 3, 255, 2, 1, 3, 255, 1, 2, 3, 255, 1, 2, 3, 255, 2, 2, 6, 255, 1, 4, 6, 255, 1, 4, 7, 255, 2, 3, 6, 255, 4, 3, 7, 255, 1, 2, 6, 255, 1, 2, 6, 255, 1, 2, 5, 255, 1, 1, 3, 255, 0, 1, 4, 255, 0, 1, 4, 255, 2, 3, 10, 255, 4, 3, 17, 255, 2, 1, 9, 255, 4, 1, 11, 255, 1, 0, 0, 255, 2, 24, 92, 255, 1, 197, 239, 255, 10, 36, 69, 255, 8, 0, 0, 255, 6, 21, 133, 255, 4, 29, 174, 255, 5, 0, 0, 255, 3, 2, 5, 255, 4, 2, 6, 255, 27, 26, 21, 255, 21, 31, 21, 255, 19, 28, 29, 255, 21, 27, 35, 255, 25, 34, 33, 255, 26, 33, 30, 255, 29, 37, 52, 255, 24, 35, 48, 255, 27, 34, 37, 255, 16, 17, 17, 255, 7, 5, 2, 255, 9, 9, 3, 255, 21, 21, 24, 255, 21, 23, 24, 255, 15, 13, 7, 255, 11, 8, 0, 255, 4, 6, 2, 255, 5, 6, 4, 255, 9, 8, 2, 255, 8, 7, 2, 255, 5, 5, 1, 255, 11, 9, 4, 255, 13, 11, 6, 255, 12, 13, 4, 255, 13, 16, 5, 255, 14, 17, 6, 255, 14, 16, 1, 255, 18, 21, 6, 255, 17, 20, 9, 255, 18, 19, 9, 255, 19, 20, 5, 255, 19, 23, 9, 255, 24, 23, 10, 255, 29, 27, 9, 255, 26, 31, 6, 255, 27, 37, 9, 255, 31, 37, 13, 255, 39, 48, 13, 255, 44, 63, 13, 255, 52, 67, 24, 255, 60, 78, 28, 255, 63, 86, 37, 255, 71, 98, 31, 255, 78, 102, 25, 255, 83, 102, 43, 255, 80, 106, 41, 255, 77, 103, 43, 255, 75, 100, 27, 255, 72, 94, 24, 255, 62, 90, 26, 255, 68, 88, 28, 255, 75, 88, 23, 255, 76, 86, 15, 255, 80, 85, 18, 255, 69, 79, 10, 255, 66, 78, 11, 255, 67, 73, 13, 255, 69, 73, 10, 255, 68, 68, 9, 255, 66, 66, 9, 255, 61, 62, 4, 255, 55, 50, 0, 255, 65, 50, 8, 255, 68, 46, 8, 255, 60, 46, 4, 255, 69, 44, 4, 255, 73, 42, 3, 255, 75, 49, 5, 255, 78, 50, 4, 255, 75, 48, 2, 255, 84, 52, 3, 255, 94, 60, 5, 255, 88, 53, 1, 255, 76, 47, 2, 255, 76, 49, 5, 255, 84, 47, 3, 255, 76, 46, 3, 255, 75, 49, 1, 255, 80, 53, 1, 255, 84, 50, 2, 255, 85, 49, 4, 255, 77, 47, 1, 255, 79, 45, 3, 255, 82, 43, 3, 255, 82, 46, 3, 255, 83, 47, 2, 255, 87, 49, 5, 255, 83, 49, 4, 255, 79, 49, 3, 255, 85, 53, 5, 255, 88, 49, 1, 255, 91, 55, 1, 255, 94, 59, 3, 255, 95, 56, 8, 255, 89, 50, 11, 255, 84, 51, 8, 255, 89, 56, 5, 255, 94, 54, 5, 255, 94, 55, 9, 255, 94, 53, 6, 255, 94, 55, 7, 255, 105, 55, 5, 255, 138, 70, 5, 255, 119, 59, 5, 255, 94, 52, 4, 255, 99, 59, 14, 255, 94, 56, 18, 255, 97, 55, 7, 255, 103, 57, 8, 255, 99, 63, 10, 255, 104, 59, 7, 255, 111, 58, 6, 255, 123, 63, 7, 255, 128, 61, 3, 255, 131, 65, 7, 255, 112, 60, 3, 255, 111, 55, 7, 255, 111, 60, 7, 255, 103, 58, 2, 255, 109, 63, 10, 255, 110, 60, 2, 255, 115, 62, 4, 255, 115, 64, 6, 255, 113, 59, 6, 255, 112, 64, 11, 255, 113, 60, 8, 255, 111, 60, 4, 255, 113, 64, 5, 255, 113, 62, 7, 255, 115, 57, 8, 255, 112, 60, 15, 255, 114, 61, 6, 255, 122, 62, 6, 255, 122, 65, 1, 255, 135, 70, 8, 255, 127, 61, 5, 255, 117, 63, 2, 255, 117, 65, 10, 255, 119, 60, 13, 255, 122, 62, 11, 255, 126, 67, 10, 255, 117, 63, 11, 255, 119, 65, 6, 255, 113, 63, 3, 255, 133, 67, 5, 255, 148, 68, 7, 255, 135, 67, 11, 255, 128, 67, 9, 255, 125, 70, 1, 255, 129, 71, 5, 255, 133, 67, 16, 255, 135, 73, 12, 255, 130, 72, 13, 255, 126, 69, 7, 255, 133, 72, 3, 255, 140, 71, 10, 255, 135, 72, 7, 255, 129, 66, 3, 255, 123, 66, 5, 255, 122, 72, 3, 255, 128, 67, 8, 255, 129, 69, 9, 255, 126, 72, 4, 255, 122, 69, 2, 255, 123, 62, 8, 255, 137, 62, 11, 255, 145, 70, 4, 255, 158, 78, 3, 255, 162, 79, 4, 255, 149, 77, 2, 255, 158, 83, 5, 255, 161, 81, 5, 255, 159, 69, 11, 255, 168, 77, 5, 255, 174, 85, 6, 255, 161, 73, 8, 255, 156, 71, 6, 255, 166, 82, 4, 255, 180, 87, 4, 255, 176, 88, 5, 255, 169, 83, 2, 255, 166, 80, 6, 255, 177, 96, 2, 255, 178, 89, 7, 255, 179, 93, 8, 255, 177, 88, 8, 255, 169, 87, 6, 255, 173, 89, 6, 255, 175, 91, 0, 255, 179, 95, 8, 255, 186, 99, 8, 255, 171, 98, 4, 255, 161, 84, 9, 255, 170, 92, 12, 255, 181, 98, 10, 255, 168, 89, 2, 255, 165, 92, 6, 255, 168, 92, 9, 255, 169, 96, 9, 255, 167, 94, 4, 255, 169, 94, 10, 255, 167, 95, 6, 255, 164, 94, 11, 255, 164, 98, 7, 255, 172, 97, 7, 255, 173, 100, 6, 255, 175, 103, 8, 255, 174, 104, 6, 255, 176, 106, 0, 255, 180, 108, 2, 255, 182, 110, 4, 255, 186, 114, 6, 255, 188, 116, 2, 255, 186, 114, 6, 255, 185, 113, 7, 255, 184, 112, 6, 255, 185, 112, 19, 255, 188, 117, 9, 255, 192, 118, 1, 255, 199, 120, 13, 255, 196, 118, 9, 255, 191, 115, 4, 255, 187, 112, 6, 255, 186, 109, 6, 255, 184, 111, 2, 255, 186, 113, 9, 255, 181, 109, 6, 255, 183, 109, 7, 255, 184, 110, 4, 255, 184, 112, 4, 255, 186, 113, 14, 255, 185, 111, 15, 255, 185, 111, 13, 255, 187, 114, 9, 255, 185, 113, 3, 255, 185, 113, 2, 255, 188, 115, 7, 255, 187, 118, 3, 255, 184, 116, 6, 255, 189, 117, 5, 255, 191, 117, 1, 255, 196, 124, 1, 255, 199, 125, 4, 255, 204, 125, 5, 255, 210, 130, 2, 255, 216, 133, 5, 255, 211, 126, 6, 255, 212, 128, 4, 255, 211, 128, 4, 255, 207, 126, 2, 255, 206, 128, 3, 255, 206, 128, 2, 255, 205, 132, 8, 255, 203, 134, 16, 255, 201, 129, 9, 255, 201, 124, 4, 255, 202, 122, 16, 255, 194, 118, 12, 255, 190, 119, 3, 255, 188, 114, 9, 255, 191, 113, 5, 255, 190, 110, 1, 255, 191, 108, 1, 255, 192, 108, 3, 255, 190, 103, 1, 255, 196, 108, 6, 255, 196, 108, 7, 255, 194, 107, 5, 255, 187, 102, 3, 255, 184, 100, 2, 255, 184, 100, 2, 255, 182, 98, 3, 255, 183, 99, 5, 255, 183, 103, 5, 255, 183, 105, 3, 255, 182, 102, 8, 255, 185, 105, 10, 255, 182, 99, 8, 255, 162, 90, 16, 255, 165, 98, 12, 255, 173, 104, 16, 255, 168, 99, 5, 255, 167, 98, 7, 255, 167, 99, 10, 255, 170, 101, 16, 255, 169, 95, 9, 255, 174, 98, 2, 255, 176, 97, 3, 255, 172, 96, 8, 255, 173, 95, 4, 255, 177, 102, 6, 255, 173, 97, 2, 255, 178, 97, 4, 255, 184, 105, 6, 255, 189, 103, 8, 255, 186, 101, 8, 255, 182, 99, 3, 255, 181, 98, 7, 255, 174, 92, 10, 255, 168, 85, 6, 255, 160, 76, 5, 255, 161, 75, 4, 255, 160, 77, 3, 255, 154, 77, 7, 255, 145, 73, 8, 255, 139, 68, 16, 255, 133, 66, 4, 255, 137, 74, 3, 255, 132, 73, 7, 255, 129, 68, 8, 255, 129, 65, 5, 255, 132, 68, 8, 255, 129, 70, 2, 255, 126, 63, 3, 255, 130, 63, 2, 255, 130, 67, 4, 255, 129, 66, 6, 255, 109, 58, 3, 255, 108, 63, 11, 255, 112, 56, 7, 255, 102, 50, 1, 255, 96, 51, 3, 255, 93, 49, 2, 255, 96, 50, 5, 255, 97, 49, 1, 255, 97, 48, 5, 255, 101, 51, 7, 255, 96, 48, 1, 255, 86, 38, 2, 255, 86, 39, 5, 255, 90, 46, 3, 255, 94, 49, 9, 255, 102, 52, 12, 255, 101, 54, 4, 255, 100, 53, 3, 255, 106, 52, 8, 255, 109, 52, 7, 255, 104, 49, 5, 255, 91, 44, 3, 255, 90, 38, 1, 255, 96, 40, 3, 255, 93, 47, 5, 255, 93, 46, 5, 255, 92, 42, 1, 255, 96, 47, 4, 255, 97, 44, 3, 255, 97, 43, 2, 255, 101, 46, 4, 255, 1, 0, 6, 255, 1, 0, 4, 255, 0, 0, 2, 255, 0, 0, 1, 255, 0, 0, 1, 255, 0, 0, 1, 255, 1, 1, 0, 255, 1, 1, 0, 255, 2, 1, 1, 255, 1, 1, 1, 255, 1, 1, 0, 255, 0, 3, 2, 255, 6, 0, 11, 255, 0, 0, 0, 255, 7, 21, 50, 255, 26, 92, 129, 255, 16, 88, 138, 255, 7, 94, 156, 255, 5, 95, 137, 255, 1, 60, 106, 255, 0, 36, 82, 255, 2, 22, 35, 255, 4, 0, 3, 255, 4, 1, 2, 255, 1, 2, 3, 255, 1, 2, 2, 255, 1, 0, 1, 255, 1, 3, 2, 255, 1, 2, 4, 255, 1, 3, 6, 255, 1, 2, 7, 255, 3, 3, 8, 255, 1, 1, 5, 255, 2, 2, 4, 255, 0, 0, 2, 255, 0, 0, 2, 255, 0, 1, 5, 255, 1, 1, 9, 255, 3, 1, 10, 255, 3, 0, 9, 255, 4, 1, 9, 255, 2, 3, 2, 255, 3, 0, 29, 255, 4, 145, 219, 255, 9, 111, 155, 255, 11, 0, 0, 255, 10, 4, 60, 255, 4, 43, 228, 255, 3, 11, 37, 255, 1, 2, 0, 255, 0, 1, 2, 255, 10, 7, 5, 255, 33, 25, 31, 255, 24, 27, 26, 255, 39, 33, 23, 255, 51, 43, 38, 255, 23, 30, 24, 255, 29, 34, 29, 255, 29, 34, 34, 255, 36, 40, 39, 255, 40, 33, 47, 255, 23, 24, 41, 255, 5, 11, 11, 255, 12, 6, 0, 255, 20, 21, 23, 255, 20, 30, 30, 255, 13, 18, 11, 255, 15, 12, 3, 255, 15, 9, 5, 255, 10, 6, 3, 255, 13, 9, 4, 255, 12, 11, 4, 255, 9, 10, 4, 255, 11, 10, 6, 255, 12, 12, 5, 255, 13, 14, 6, 255, 13, 17, 5, 255, 14, 15, 3, 255, 16, 17, 5, 255, 17, 17, 5, 255, 16, 16, 6, 255, 22, 22, 9, 255, 21, 23, 4, 255, 20, 21, 8, 255, 20, 22, 8, 255, 26, 29, 11, 255, 28, 32, 9, 255, 31, 36, 9, 255, 36, 43, 13, 255, 42, 55, 13, 255, 49, 68, 16, 255, 60, 78, 28, 255, 64, 85, 23, 255, 69, 89, 36, 255, 73, 97, 40, 255, 71, 99, 30, 255, 72, 99, 43, 255, 72, 102, 32, 255, 74, 99, 29, 255, 79, 94, 17, 255, 76, 86, 22, 255, 73, 86, 32, 255, 74, 84, 24, 255, 73, 83, 15, 255, 71, 83, 12, 255, 74, 79, 14, 255, 71, 75, 11, 255, 69, 77, 12, 255, 65, 73, 11, 255, 68, 72, 8, 255, 65, 62, 5, 255, 66, 58, 6, 255, 62, 54, 2, 255, 61, 51, 3, 255, 58, 43, 2, 255, 63, 44, 2, 255, 60, 50, 4, 255, 61, 44, 0, 255, 72, 45, 5, 255, 72, 50, 6, 255, 70, 50, 3, 255, 73, 51, 4, 255, 85, 57, 4, 255, 92, 56, 1, 255, 89, 51, 3, 255, 82, 50, 5, 255, 84, 52, 7, 255, 80, 46, 2, 255, 79, 48, 4, 255, 84, 51, 5, 255, 82, 47, 1, 255, 80, 46, 0, 255, 82, 50, 4, 255, 81, 48, 4, 255, 79, 44, 5, 255, 79, 46, 3, 255, 83, 51, 2, 255, 87, 47, 3, 255, 87, 48, 7, 255, 85, 48, 4, 255, 88, 49, 2, 255, 84, 51, 0, 255, 93, 53, 4, 255, 100, 60, 9, 255, 94, 58, 5, 255, 91, 55, 3, 255, 91, 54, 6, 255, 89, 51, 4, 255, 91, 54, 5, 255, 94, 56, 8, 255, 93, 55, 8, 255, 97, 55, 4, 255, 89, 52, 6, 255, 108, 62, 10, 255, 124, 62, 1, 255, 108, 54, 7, 255, 117, 57, 9, 255, 126, 62, 4, 255, 119, 58, 2, 255, 98, 58, 8, 255, 103, 57, 3, 255, 114, 61, 8, 255, 122, 61, 8, 255, 108, 60, 1, 255, 112, 60, 3, 255, 125, 59, 5, 255, 123, 60, 5, 255, 109, 60, 6, 255, 104, 58, 7, 255, 107, 58, 3, 255, 110, 61, 5, 255, 118, 59, 6, 255, 122, 61, 5, 255, 119, 63, 8, 255, 118, 63, 5, 255, 119, 63, 4, 255, 119, 66, 8, 255, 113, 61, 5, 255, 114, 64, 8, 255, 115, 65, 2, 255, 116, 63, 9, 255, 116, 60, 5, 255, 115, 60, 7, 255, 113, 66, 3, 255, 123, 66, 5, 255, 137, 68, 8, 255, 120, 59, 11, 255, 126, 64, 3, 255, 129, 67, 8, 255, 126, 66, 9, 255, 119, 64, 4, 255, 129, 67, 6, 255, 128, 64, 9, 255, 135, 67, 9, 255, 142, 66, 11, 255, 134, 70, 2, 255, 134, 73, 5, 255, 134, 68, 7, 255, 126, 70, 13, 255, 125, 66, 10, 255, 132, 69, 2, 255, 141, 76, 3, 255, 135, 71, 7, 255, 133, 73, 2, 255, 130, 67, 7, 255, 127, 68, 13, 255, 130, 72, 4, 255, 135, 71, 3, 255, 130, 70, 9, 255, 131, 69, 7, 255, 126, 71, 6, 255, 120, 70, 9, 255, 126, 71, 11, 255, 125, 69, 4, 255, 130, 72, 4, 255, 129, 75, 8, 255, 125, 72, 7, 255, 133, 70, 8, 255, 144, 70, 9, 255, 156, 67, 2, 255, 154, 74, 4, 255, 140, 67, 11, 255, 139, 67, 11, 255, 148, 78, 3, 255, 166, 83, 4, 255, 167, 78, 6, 255, 162, 72, 7, 255, 154, 72, 3, 255, 153, 72, 3, 255, 163, 79, 11, 255, 170, 84, 8, 255, 169, 85, 7, 255, 157, 73, 6, 255, 164, 76, 10, 255, 184, 93, 9, 255, 184, 94, 8, 255, 181, 90, 0, 255, 170, 89, 2, 255, 168, 89, 5, 255, 176, 88, 7, 255, 178, 89, 3, 255, 169, 88, 6, 255, 167, 87, 6, 255, 176, 91, 3, 255, 187, 93, 1, 255, 183, 98, 4, 255, 173, 89, 8, 255, 177, 89, 4, 255, 180, 99, 3, 255, 174, 93, 4, 255, 170, 88, 2, 255, 171, 91, 6, 255, 171, 93, 16, 255, 173, 99, 3, 255, 175, 98, 4, 255, 178, 100, 2, 255, 172, 96, 4, 255, 174, 97, 13, 255, 177, 102, 8, 255, 176, 103, 3, 255, 178, 104, 9, 255, 182, 107, 6, 255, 184, 109, 7, 255, 186, 111, 6, 255, 192, 117, 7, 255, 192, 118, 3, 255, 189, 116, 5, 255, 187, 114, 9, 255, 189, 116, 14, 255, 192, 117, 7, 255, 191, 117, 0, 255, 198, 121, 5, 255, 197, 120, 6, 255, 197, 119, 13, 255, 192, 114, 7, 255, 191, 113, 15, 255, 188, 114, 10, 255, 185, 113, 5, 255, 183, 110, 0, 255, 186, 112, 7, 255, 185, 110, 14, 255, 182, 109, 6, 255, 183, 112, 2, 255, 183, 113, 3, 255, 183, 112, 5, 255, 186, 112, 11, 255, 188, 114, 9, 255, 192, 116, 8, 255, 189, 116, 3, 255, 186, 116, 0, 255, 187, 119, 1, 255, 190, 121, 2, 255, 189, 117, 9, 255, 195, 123, 10, 255, 199, 127, 3, 255, 203, 129, 1, 255, 207, 130, 4, 255, 214, 133, 6, 255, 214, 134, 4, 255, 205, 126, 1, 255, 208, 129, 5, 255, 205, 118, 7, 255, 192, 109, 0, 255, 206, 125, 5, 255, 201, 124, 16, 255, 194, 122, 15, 255, 192, 114, 13, 255, 188, 105, 19, 255, 184, 104, 7, 255, 185, 109, 5, 255, 195, 120, 9, 255, 191, 113, 11, 255, 191, 110, 5, 255, 194, 113, 0, 255, 193, 110, 1, 255, 196, 109, 4, 255, 201, 113, 6, 255, 198, 110, 5, 255, 190, 101, 3, 255, 190, 104, 1, 255, 185, 100, 6, 255, 182, 99, 3, 255, 180, 97, 1, 255, 178, 95, 0, 255, 177, 96, 3, 255, 174, 101, 2, 255, 179, 101, 5, 255, 184, 101, 5, 255, 183, 96, 10, 255, 183, 95, 14, 255, 167, 89, 14, 255, 172, 101, 10, 255, 174, 100, 14, 255, 163, 92, 5, 255, 161, 89, 10, 255, 171, 97, 15, 255, 169, 94, 5, 255, 171, 93, 5, 255, 174, 92, 8, 255, 167, 89, 8, 255, 173, 98, 13, 255, 177, 102, 3, 255, 162, 85, 4, 255, 158, 73, 6, 255, 178, 90, 6, 255, 180, 97, 1, 255, 188, 111, 3, 255, 188, 107, 7, 255, 184, 100, 11, 255, 191, 106, 6, 255, 188, 101, 4, 255, 173, 86, 1, 255, 162, 78, 2, 255, 163, 76, 3, 255, 159, 73, 9, 255, 151, 70, 12, 255, 140, 65, 9, 255, 134, 64, 3, 255, 132, 66, 6, 255, 132, 70, 14, 255, 131, 70, 9, 255, 130, 68, 9, 255, 128, 65, 11, 255, 125, 62, 3, 255, 119, 58, 6, 255, 109, 53, 9, 255, 110, 53, 9, 255, 111, 53, 3, 255, 116, 61, 3, 255, 116, 62, 4, 255, 112, 62, 7, 255, 98, 41, 7, 255, 91, 39, 5, 255, 90, 46, 4, 255, 91, 50, 4, 255, 97, 53, 7, 255, 98, 51, 5, 255, 101, 50, 7, 255, 103, 50, 5, 255, 105, 55, 7, 255, 99, 50, 8, 255, 100, 52, 6, 255, 103, 55, 4, 255, 102, 52, 9, 255, 103, 50, 9, 255, 102, 53, 5, 255, 98, 50, 4, 255, 96, 46, 3, 255, 91, 41, 0, 255, 93, 50, 3, 255, 88, 43, 5, 255, 84, 37, 2, 255, 92, 42, 5, 255, 96, 45, 5, 255, 94, 47, 3, 255, 92, 45, 1, 255, 96, 48, 2, 255, 98, 44, 0, 255, 103, 45, 4, 255, 105, 43, 5, 255, 2, 1, 9, 255, 2, 1, 8, 255, 1, 0, 5, 255, 1, 0, 5, 255, 1, 0, 5, 255, 1, 1, 3, 255, 2, 2, 1, 255, 1, 1, 1, 255, 4, 0, 1, 255, 0, 1, 5, 255, 2, 1, 7, 255, 0, 1, 0, 255, 14, 5, 20, 255, 105, 82, 78, 255, 72, 89, 95, 255, 0, 22, 61, 255, 13, 40, 80, 255, 11, 109, 166, 255, 5, 111, 181, 255, 79, 149, 221, 255, 87, 178, 201, 255, 0, 49, 60, 255, 0, 0, 1, 255, 2, 1, 2, 255, 0, 1, 1, 255, 0, 1, 0, 255, 1, 0, 1, 255, 1, 1, 1, 255, 0, 1, 1, 255, 0, 1, 3, 255, 0, 1, 4, 255, 1, 2, 6, 255, 0, 0, 4, 255, 1, 1, 3, 255, 0, 0, 2, 255, 0, 0, 2, 255, 0, 1, 6, 255, 2, 1, 11, 255, 1, 4, 9, 255, 0, 1, 6, 255, 3, 3, 4, 255, 6, 0, 0, 255, 1, 75, 147, 255, 8, 168, 238, 255, 7, 9, 13, 255, 11, 3, 7, 255, 11, 25, 192, 255, 0, 24, 113, 255, 6, 0, 0, 255, 4, 2, 8, 255, 0, 0, 0, 255, 7, 6, 7, 255, 33, 25, 32, 255, 26, 25, 33, 255, 43, 31, 26, 255, 44, 33, 24, 255, 26, 35, 27, 255, 29, 34, 27, 255, 30, 34, 30, 255, 28, 35, 38, 255, 37, 36, 63, 255, 37, 30, 66, 255, 19, 15, 35, 255, 10, 8, 6, 255, 20, 21, 19, 255, 18, 29, 29, 255, 14, 22, 16, 255, 18, 15, 6, 255, 15, 6, 3, 255, 9, 4, 0, 255, 14, 10, 3, 255, 12, 11, 3, 255, 10, 10, 2, 255, 9, 9, 2, 255, 11, 11, 4, 255, 12, 14, 3, 255, 15, 17, 6, 255, 13, 15, 2, 255, 17, 18, 5, 255, 18, 18, 6, 255, 19, 18, 7, 255, 23, 23, 7, 255, 25, 24, 3, 255, 24, 23, 9, 255, 21, 24, 6, 255, 25, 31, 6, 255, 30, 35, 6, 255, 34, 39, 8, 255, 43, 52, 12, 255, 44, 59, 19, 255, 51, 68, 25, 255, 57, 76, 22, 255, 65, 86, 19, 255, 67, 87, 28, 255, 70, 91, 42, 255, 71, 97, 42, 255, 73, 102, 30, 255, 76, 97, 26, 255, 78, 92, 25, 255, 76, 88, 23, 255, 72, 85, 23, 255, 70, 82, 21, 255, 76, 84, 21, 255, 74, 81, 12, 255, 72, 80, 8, 255, 75, 78, 14, 255, 77, 74, 10, 255, 75, 71, 7, 255, 68, 69, 6, 255, 68, 72, 8, 255, 65, 62, 5, 255, 65, 57, 5, 255, 67, 57, 8, 255, 64, 52, 6, 255, 60, 47, 3, 255, 62, 43, 3, 255, 67, 46, 7, 255, 67, 44, 3, 255, 76, 47, 8, 255, 72, 49, 4, 255, 71, 49, 1, 255, 79, 53, 6, 255, 87, 56, 4, 255, 97, 55, 3, 255, 84, 48, 4, 255, 81, 47, 6, 255, 82, 47, 4, 255, 71, 45, 3, 255, 78, 46, 5, 255, 82, 46, 3, 255, 88, 51, 7, 255, 83, 49, 6, 255, 77, 45, 3, 255, 80, 46, 3, 255, 81, 45, 5, 255, 81, 50, 5, 255, 91, 54, 6, 255, 90, 49, 4, 255, 84, 49, 5, 255, 88, 52, 5, 255, 95, 53, 4, 255, 91, 54, 5, 255, 98, 55, 7, 255, 98, 57, 8, 255, 92, 55, 6, 255, 88, 55, 4, 255, 89, 55, 4, 255, 89, 54, 8, 255, 93, 53, 9, 255, 90, 53, 8, 255, 86, 56, 5, 255, 90, 58, 4, 255, 88, 52, 4, 255, 100, 62, 9, 255, 115, 58, 4, 255, 122, 57, 5, 255, 133, 61, 4, 255, 132, 57, 1, 255, 121, 60, 4, 255, 100, 54, 9, 255, 111, 59, 6, 255, 136, 59, 5, 255, 132, 57, 6, 255, 122, 62, 10, 255, 112, 59, 2, 255, 111, 61, 9, 255, 110, 61, 11, 255, 112, 62, 6, 255, 107, 58, 9, 255, 116, 61, 6, 255, 107, 66, 0, 255, 121, 60, 8, 255, 131, 63, 7, 255, 130, 61, 12, 255, 130, 60, 3, 255, 133, 65, 4, 255, 131, 64, 5, 255, 123, 61, 5, 255, 123, 63, 9, 255, 123, 66, 7, 255, 119, 56, 12, 255, 123, 69, 13, 255, 114, 64, 5, 255, 111, 64, 2, 255, 121, 64, 13, 255, 125, 63, 14, 255, 113, 64, 15, 255, 122, 64, 2, 255, 128, 69, 8, 255, 125, 65, 10, 255, 115, 61, 6, 255, 113, 61, 10, 255, 118, 61, 8, 255, 132, 68, 6, 255, 147, 69, 5, 255, 140, 68, 3, 255, 127, 67, 10, 255, 129, 71, 6, 255, 134, 69, 4, 255, 132, 68, 8, 255, 131, 71, 8, 255, 135, 74, 5, 255, 138, 73, 4, 255, 136, 77, 0, 255, 133, 77, 4, 255, 128, 72, 9, 255, 135, 70, 5, 255, 135, 74, 2, 255, 126, 71, 9, 255, 124, 73, 12, 255, 129, 71, 6, 255, 131, 71, 7, 255, 126, 71, 6, 255, 127, 71, 8, 255, 128, 72, 6, 255, 138, 78, 6, 255, 135, 75, 6, 255, 130, 69, 5, 255, 134, 69, 2, 255, 132, 70, 5, 255, 126, 67, 6, 255, 117, 59, 2, 255, 114, 61, 6, 255, 126, 68, 11, 255, 155, 78, 10, 255, 153, 74, 1, 255, 150, 69, 5, 255, 153, 76, 8, 255, 154, 76, 9, 255, 162, 77, 5, 255, 163, 82, 4, 255, 159, 77, 14, 255, 157, 78, 9, 255, 171, 90, 3, 255, 181, 88, 11, 255, 182, 93, 2, 255, 177, 86, 1, 255, 177, 92, 4, 255, 180, 94, 4, 255, 171, 91, 1, 255, 169, 89, 5, 255, 172, 90, 2, 255, 175, 93, 6, 255, 167, 91, 8, 255, 171, 89, 17, 255, 176, 90, 6, 255, 174, 91, 0, 255, 181, 95, 11, 255, 175, 90, 9, 255, 156, 87, 6, 255, 155, 93, 6, 255, 162, 93, 9, 255, 167, 94, 7, 255, 172, 96, 5, 255, 175, 96, 17, 255, 176, 100, 5, 255, 173, 101, 3, 255, 175, 101, 2, 255, 179, 106, 4, 255, 181, 107, 10, 255, 181, 105, 8, 255, 183, 106, 5, 255, 185, 105, 8, 255, 191, 111, 9, 255, 195, 117, 10, 255, 194, 116, 3, 255, 195, 118, 7, 255, 196, 116, 15, 255, 193, 116, 12, 255, 196, 119, 7, 255, 198, 124, 3, 255, 199, 123, 11, 255, 201, 123, 10, 255, 196, 118, 7, 255, 192, 112, 12, 255, 190, 112, 7, 255, 186, 110, 13, 255, 182, 108, 12, 255, 180, 109, 9, 255, 182, 111, 6, 255, 178, 110, 4, 255, 176, 108, 8, 255, 178, 109, 7, 255, 184, 112, 9, 255, 183, 109, 9, 255, 183, 108, 10, 255, 187, 111, 14, 255, 183, 108, 9, 255, 186, 113, 9, 255, 193, 118, 7, 255, 196, 119, 6, 255, 196, 120, 2, 255, 193, 118, 4, 255, 191, 121, 5, 255, 192, 122, 1, 255, 201, 126, 6, 255, 204, 128, 6, 255, 194, 112, 2, 255, 196, 113, 12, 255, 194, 114, 6, 255, 191, 113, 3, 255, 193, 115, 7, 255, 183, 109, 1, 255, 178, 104, 6, 255, 179, 109, 17, 255, 176, 107, 31, 255, 172, 98, 16, 255, 169, 93, 11, 255, 171, 92, 13, 255, 185, 104, 7, 255, 193, 107, 10, 255, 197, 111, 6, 255, 194, 108, 5, 255, 191, 106, 1, 255, 189, 104, 7, 255, 189, 101, 9, 255, 189, 100, 4, 255, 179, 93, 0, 255, 175, 89, 2, 255, 176, 95, 0, 255, 172, 91, 2, 255, 175, 93, 2, 255, 176, 95, 3, 255, 176, 92, 2, 255, 174, 94, 3, 255, 170, 95, 2, 255, 175, 98, 3, 255, 172, 93, 6, 255, 178, 93, 8, 255, 177, 94, 14, 255, 167, 90, 19, 255, 169, 98, 15, 255, 175, 98, 16, 255, 169, 91, 13, 255, 172, 97, 8, 255, 170, 94, 8, 255, 167, 89, 7, 255, 169, 92, 4, 255, 178, 102, 7, 255, 184, 112, 6, 255, 180, 105, 7, 255, 166, 87, 6, 255, 148, 65, 1, 255, 165, 81, 11, 255, 189, 108, 16, 255, 188, 105, 4, 255, 189, 103, 6, 255, 186, 98, 12, 255, 183, 97, 13, 255, 181, 100, 0, 255, 176, 94, 5, 255, 172, 92, 7, 255, 170, 89, 7, 255, 168, 84, 6, 255, 161, 78, 9, 255, 150, 71, 7, 255, 139, 66, 7, 255, 134, 65, 6, 255, 136, 69, 9, 255, 136, 72, 5, 255, 128, 66, 4, 255, 131, 69, 13, 255, 121, 58, 11, 255, 117, 55, 11, 255, 109, 52, 3, 255, 104, 54, 6, 255, 98, 47, 2, 255, 103, 49, 2, 255, 104, 56, 5, 255, 113, 62, 11, 255, 103, 49, 3, 255, 82, 30, 0, 255, 87, 36, 5, 255, 90, 43, 3, 255, 94, 47, 4, 255, 97, 50, 4, 255, 96, 52, 4, 255, 100, 52, 5, 255, 109, 56, 6, 255, 106, 56, 2, 255, 103, 54, 2, 255, 105, 56, 5, 255, 108, 58, 5, 255, 105, 52, 1, 255, 109, 52, 5, 255, 103, 51, 2, 255, 97, 45, 2, 255, 95, 41, 1, 255, 97, 42, 0, 255, 98, 46, 3, 255, 91, 43, 4, 255, 89, 43, 5, 255, 93, 42, 3, 255, 96, 42, 3, 255, 91, 44, 2, 255, 94, 47, 6, 255, 99, 48, 6, 255, 99, 46, 3, 255, 100, 42, 5, 255, 100, 34, 4, 255, 1, 1, 9, 255, 1, 0, 8, 255, 1, 0, 7, 255, 1, 0, 6, 255, 1, 0, 5, 255, 1, 0, 5, 255, 0, 1, 2, 255, 1, 0, 2, 255, 2, 1, 2, 255, 2, 0, 4, 255, 3, 5, 7, 255, 0, 0, 8, 255, 135, 109, 145, 255, 209, 208, 177, 255, 34, 58, 60, 255, 8, 69, 118, 255, 3, 50, 67, 255, 12, 45, 115, 255, 157, 215, 255, 255, 180, 245, 234, 255, 35, 103, 95, 255, 3, 5, 5, 255, 5, 3, 6, 255, 1, 2, 6, 255, 0, 1, 4, 255, 1, 1, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 2, 255, 0, 0, 3, 255, 1, 1, 3, 255, 0, 0, 2, 255, 1, 1, 3, 255, 0, 0, 3, 255, 0, 0, 4, 255, 2, 1, 7, 255, 2, 2, 11, 255, 2, 1, 9, 255, 6, 0, 5, 255, 1, 0, 0, 255, 6, 14, 70, 255, 6, 179, 252, 255, 7, 65, 86, 255, 6, 0, 0, 255, 14, 18, 119, 255, 4, 30, 184, 255, 4, 4, 14, 255, 1, 1, 0, 255, 4, 2, 2, 255, 4, 1, 1, 255, 0, 0, 5, 255, 18, 14, 21, 255, 26, 29, 43, 255, 27, 26, 31, 255, 25, 26, 22, 255, 25, 34, 31, 255, 26, 32, 28, 255, 19, 29, 39, 255, 14, 33, 45, 255, 25, 29, 60, 255, 38, 31, 54, 255, 28, 22, 49, 255, 14, 11, 21, 255, 21, 16, 11, 255, 26, 29, 32, 255, 21, 26, 25, 255, 15, 16, 9, 255, 11, 11, 5, 255, 8, 10, 1, 255, 12, 10, 0, 255, 12, 8, 1, 255, 10, 10, 1, 255, 11, 12, 4, 255, 17, 16, 7, 255, 15, 14, 3, 255, 14, 15, 2, 255, 16, 15, 3, 255, 17, 17, 5, 255, 17, 17, 5, 255, 22, 19, 6, 255, 28, 26, 10, 255, 28, 27, 8, 255, 26, 31, 5, 255, 28, 30, 7, 255, 32, 30, 15, 255, 33, 36, 21, 255, 37, 46, 17, 255, 52, 62, 12, 255, 51, 65, 17, 255, 52, 72, 27, 255, 67, 80, 25, 255, 67, 84, 24, 255, 66, 92, 27, 255, 70, 97, 26, 255, 77, 98, 21, 255, 71, 98, 24, 255, 72, 91, 24, 255, 71, 87, 21, 255, 67, 87, 19, 255, 66, 87, 17, 255, 68, 82, 17, 255, 72, 79, 16, 255, 77, 78, 10, 255, 78, 79, 9, 255, 74, 77, 11, 255, 75, 72, 7, 255, 77, 69, 4, 255, 71, 65, 3, 255, 69, 66, 6, 255, 63, 62, 5, 255, 57, 56, 1, 255, 60, 55, 3, 255, 63, 53, 5, 255, 64, 48, 4, 255, 63, 45, 4, 255, 69, 43, 6, 255, 71, 47, 6, 255, 71, 49, 5, 255, 68, 46, 1, 255, 72, 53, 3, 255, 76, 51, 2, 255, 91, 52, 5, 255, 91, 53, 4, 255, 77, 49, 3, 255, 76, 47, 4, 255, 77, 43, 5, 255, 72, 43, 4, 255, 80, 48, 6, 255, 77, 48, 2, 255, 78, 51, 4, 255, 78, 46, 4, 255, 79, 44, 3, 255, 80, 50, 5, 255, 82, 49, 5, 255, 87, 49, 5, 255, 90, 47, 3, 255, 89, 47, 2, 255, 89, 52, 4, 255, 87, 53, 2, 255, 91, 54, 3, 255, 94, 52, 7, 255, 99, 59, 6, 255, 101, 60, 3, 255, 92, 56, 3, 255, 87, 55, 8, 255, 91, 51, 11, 255, 94, 51, 6, 255, 122, 61, 6, 255, 121, 58, 3, 255, 109, 60, 8, 255, 100, 59, 5, 255, 112, 56, 5, 255, 103, 55, 5, 255, 104, 59, 7, 255, 124, 61, 9, 255, 120, 59, 7, 255, 105, 58, 2, 255, 111, 54, 6, 255, 115, 56, 7, 255, 108, 58, 4, 255, 129, 62, 3, 255, 122, 62, 6, 255, 118, 61, 8, 255, 118, 63, 4, 255, 114, 62, 10, 255, 122, 63, 10, 255, 123, 61, 5, 255, 126, 63, 10, 255, 143, 67, 12, 255, 128, 64, 5, 255, 126, 62, 9, 255, 120, 63, 4, 255, 120, 60, 3, 255, 126, 63, 6, 255, 126, 65, 6, 255, 124, 60, 2, 255, 117, 61, 2, 255, 118, 67, 2, 255, 122, 63, 5, 255, 126, 59, 8, 255, 125, 60, 4, 255, 115, 65, 5, 255, 118, 64, 1, 255, 122, 64, 13, 255, 112, 67, 6, 255, 117, 66, 1, 255, 125, 69, 2, 255, 121, 71, 1, 255, 124, 68, 6, 255, 122, 63, 13, 255, 121, 68, 13, 255, 124, 68, 7, 255, 128, 67, 10, 255, 126, 65, 10, 255, 117, 67, 9, 255, 126, 68, 11, 255, 135, 71, 12, 255, 135, 69, 14, 255, 138, 77, 8, 255, 136, 74, 11, 255, 133, 71, 5, 255, 134, 73, 7, 255, 132, 71, 5, 255, 130, 71, 4, 255, 133, 65, 14, 255, 132, 70, 7, 255, 129, 75, 3, 255, 133, 71, 0, 255, 132, 70, 10, 255, 132, 71, 12, 255, 127, 70, 5, 255, 131, 69, 6, 255, 140, 72, 10, 255, 137, 70, 12, 255, 137, 69, 14, 255, 143, 72, 10, 255, 137, 73, 6, 255, 129, 72, 6, 255, 126, 73, 9, 255, 112, 62, 12, 255, 120, 68, 11, 255, 127, 76, 3, 255, 130, 70, 2, 255, 143, 72, 7, 255, 157, 81, 5, 255, 159, 77, 7, 255, 152, 70, 10, 255, 154, 75, 4, 255, 158, 76, 7, 255, 164, 77, 0, 255, 164, 83, 8, 255, 170, 89, 9, 255, 158, 76, 7, 255, 162, 78, 11, 255, 176, 88, 3, 255, 171, 87, 13, 255, 180, 91, 8, 255, 182, 87, 6, 255, 176, 89, 7, 255, 174, 90, 13, 255, 178, 92, 6, 255, 174, 91, 11, 255, 175, 91, 11, 255, 173, 88, 5, 255, 181, 92, 7, 255, 181, 98, 11, 255, 185, 100, 7, 255, 185, 97, 10, 255, 171, 88, 11, 255, 180, 101, 4, 255, 172, 94, 8, 255, 166, 89, 5, 255, 170, 94, 6, 255, 174, 97, 7, 255, 175, 98, 9, 255, 177, 103, 3, 255, 178, 102, 6, 255, 182, 106, 8, 255, 185, 109, 9, 255, 185, 106, 8, 255, 180, 103, 7, 255, 188, 108, 15, 255, 194, 115, 10, 255, 197, 116, 10, 255, 197, 117, 11, 255, 195, 115, 3, 255, 194, 113, 5, 255, 195, 117, 11, 255, 194, 120, 9, 255, 197, 122, 7, 255, 196, 118, 11, 255, 199, 120, 11, 255, 193, 114, 10, 255, 187, 108, 10, 255, 184, 106, 9, 255, 183, 109, 11, 255, 179, 109, 2, 255, 179, 109, 5, 255, 177, 107, 6, 255, 173, 108, 0, 255, 172, 107, 3, 255, 176, 107, 9, 255, 185, 111, 16, 255, 187, 108, 10, 255, 189, 110, 9, 255, 186, 111, 6, 255, 178, 103, 5, 255, 183, 112, 6, 255, 191, 118, 2, 255, 191, 111, 4, 255, 191, 114, 2, 255, 195, 125, 0, 255, 197, 128, 4, 255, 197, 124, 4, 255, 203, 126, 5, 255, 202, 123, 7, 255, 194, 115, 2, 255, 196, 115, 2, 255, 193, 111, 2, 255, 195, 113, 7, 255, 187, 110, 4, 255, 179, 101, 7, 255, 184, 106, 10, 255, 191, 121, 7, 255, 185, 120, 14, 255, 184, 113, 18, 255, 171, 99, 7, 255, 174, 101, 4, 255, 186, 106, 7, 255, 181, 93, 14, 255, 193, 106, 4, 255, 190, 103, 6, 255, 182, 97, 1, 255, 180, 96, 4, 255, 174, 90, 1, 255, 174, 90, 1, 255, 170, 90, 2, 255, 171, 92, 5, 255, 169, 92, 3, 255, 170, 91, 6, 255, 173, 94, 6, 255, 171, 92, 3, 255, 171, 90, 3, 255, 174, 92, 6, 255, 174, 95, 7, 255, 174, 98, 7, 255, 156, 87, 6, 255, 161, 84, 14, 255, 172, 103, 11, 255, 164, 98, 11, 255, 162, 98, 17, 255, 167, 96, 3, 255, 176, 103, 6, 255, 184, 108, 15, 255, 178, 102, 10, 255, 170, 93, 4, 255, 181, 104, 11, 255, 191, 117, 13, 255, 186, 105, 7, 255, 171, 84, 7, 255, 163, 81, 9, 255, 163, 83, 4, 255, 191, 115, 14, 255, 196, 123, 12, 255, 185, 102, 4, 255, 184, 97, 5, 255, 185, 100, 6, 255, 180, 97, 6, 255, 174, 92, 5, 255, 165, 85, 5, 255, 159, 80, 9, 255, 157, 79, 9, 255, 157, 80, 4, 255, 154, 81, 0, 255, 147, 79, 3, 255, 140, 74, 9, 255, 132, 64, 20, 255, 137, 71, 15, 255, 136, 72, 13, 255, 130, 70, 16, 255, 131, 72, 12, 255, 128, 71, 4, 255, 119, 66, 3, 255, 108, 57, 4, 255, 107, 56, 3, 255, 107, 55, 2, 255, 112, 60, 11, 255, 104, 48, 8, 255, 89, 41, 7, 255, 74, 29, 4, 255, 78, 30, 2, 255, 87, 38, 6, 255, 92, 40, 5, 255, 95, 42, 3, 255, 95, 43, 1, 255, 97, 51, 5, 255, 101, 54, 7, 255, 109, 55, 6, 255, 107, 56, 1, 255, 107, 56, 3, 255, 109, 56, 9, 255, 109, 56, 8, 255, 105, 51, 1, 255, 105, 45, 4, 255, 95, 43, 1, 255, 85, 38, 2, 255, 85, 37, 4, 255, 94, 45, 6, 255, 87, 40, 5, 255, 85, 40, 2, 255, 94, 46, 3, 255, 95, 48, 4, 255, 95, 50, 5, 255, 98, 47, 3, 255, 102, 48, 8, 255, 96, 48, 5, 255, 96, 42, 0, 255, 94, 35, 4, 255, 94, 29, 6, 255, 0, 0, 8, 255, 0, 0, 8, 255, 0, 0, 8, 255, 0, 1, 8, 255, 0, 1, 7, 255, 0, 1, 6, 255, 0, 2, 4, 255, 1, 0, 3, 255, 0, 0, 0, 255, 2, 2, 7, 255, 1, 5, 15, 255, 3, 0, 9, 255, 46, 49, 62, 255, 57, 55, 34, 255, 25, 32, 38, 255, 33, 50, 40, 255, 17, 21, 19, 255, 11, 11, 21, 255, 80, 112, 107, 255, 35, 75, 59, 255, 0, 0, 4, 255, 6, 4, 15, 255, 1, 1, 2, 255, 1, 1, 0, 255, 5, 3, 2, 255, 0, 1, 1, 255, 0, 0, 2, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 0, 1, 255, 0, 0, 0, 255, 1, 0, 0, 255, 0, 0, 2, 255, 1, 2, 3, 255, 2, 1, 5, 255, 1, 0, 5, 255, 2, 1, 6, 255, 2, 1, 7, 255, 4, 0, 5, 255, 6, 2, 1, 255, 2, 0, 18, 255, 2, 123, 208, 255, 14, 128, 169, 255, 15, 0, 0, 255, 12, 6, 43, 255, 8, 33, 211, 255, 3, 17, 68, 255, 3, 0, 0, 255, 1, 2, 9, 255, 4, 2, 0, 255, 2, 0, 2, 255, 0, 2, 0, 255, 4, 2, 2, 255, 22, 15, 29, 255, 30, 26, 32, 255, 20, 23, 25, 255, 27, 32, 39, 255, 28, 31, 21, 255, 27, 28, 34, 255, 26, 30, 50, 255, 31, 25, 60, 255, 30, 22, 56, 255, 25, 25, 42, 255, 19, 17, 19, 255, 17, 14, 5, 255, 22, 26, 27, 255, 23, 27, 30, 255, 17, 19, 16, 255, 12, 16, 9, 255, 14, 13, 3, 255, 19, 14, 4, 255, 15, 12, 3, 255, 12, 12, 2, 255, 12, 11, 1, 255, 19, 16, 5, 255, 18, 16, 3, 255, 18, 17, 4, 255, 15, 15, 3, 255, 18, 18, 6, 255, 24, 22, 8, 255, 25, 23, 6, 255, 26, 25, 5, 255, 25, 22, 5, 255, 24, 27, 5, 255, 30, 32, 8, 255, 32, 34, 9, 255, 38, 40, 16, 255, 45, 48, 17, 255, 55, 63, 12, 255, 54, 67, 22, 255, 60, 79, 30, 255, 64, 82, 16, 255, 68, 85, 27, 255, 68, 91, 29, 255, 73, 95, 27, 255, 78, 94, 25, 255, 71, 92, 29, 255, 66, 86, 25, 255, 63, 82, 23, 255, 66, 84, 8, 255, 72, 85, 12, 255, 73, 77, 18, 255, 75, 78, 15, 255, 78, 75, 4, 255, 79, 75, 4, 255, 71, 76, 8, 255, 67, 71, 6, 255, 71, 68, 5, 255, 72, 66, 8, 255, 70, 64, 8, 255, 65, 61, 6, 255, 63, 57, 4, 255, 64, 56, 5, 255, 64, 51, 2, 255, 63, 50, 4, 255, 64, 47, 3, 255, 72, 44, 4, 255, 65, 47, 4, 255, 70, 51, 7, 255, 77, 44, 3, 255, 72, 52, 6, 255, 74, 52, 0, 255, 87, 55, 4, 255, 82, 54, 6, 255, 84, 47, 2, 255, 80, 47, 5, 255, 72, 46, 7, 255, 75, 43, 4, 255, 79, 45, 2, 255, 82, 48, 3, 255, 79, 46, 0, 255, 80, 48, 2, 255, 81, 46, 2, 255, 86, 49, 2, 255, 86, 51, 3, 255, 82, 48, 3, 255, 85, 50, 6, 255, 94, 52, 6, 255, 110, 54, 6, 255, 108, 54, 5, 255, 94, 55, 4, 255, 97, 59, 12, 255, 95, 58, 6, 255, 98, 58, 3, 255, 91, 57, 3, 255, 90, 58, 7, 255, 98, 53, 8, 255, 100, 58, 3, 255, 129, 65, 10, 255, 136, 62, 5, 255, 137, 63, 6, 255, 136, 62, 6, 255, 140, 65, 9, 255, 113, 60, 4, 255, 102, 59, 14, 255, 108, 61, 8, 255, 109, 61, 6, 255, 113, 61, 6, 255, 138, 57, 3, 255, 149, 63, 7, 255, 131, 64, 11, 255, 123, 63, 5, 255, 133, 65, 10, 255, 128, 62, 4, 255, 121, 65, 3, 255, 121, 65, 5, 255, 131, 66, 7, 255, 117, 62, 7, 255, 129, 64, 8, 255, 136, 63, 3, 255, 139, 62, 7, 255, 126, 64, 2, 255, 119, 63, 4, 255, 122, 61, 13, 255, 129, 64, 10, 255, 126, 64, 3, 255, 133, 65, 7, 255, 122, 62, 3, 255, 120, 66, 4, 255, 123, 63, 2, 255, 124, 68, 12, 255, 118, 61, 7, 255, 131, 68, 8, 255, 130, 65, 4, 255, 129, 66, 8, 255, 131, 68, 6, 255, 133, 63, 5, 255, 119, 62, 9, 255, 117, 66, 12, 255, 115, 62, 8, 255, 127, 63, 6, 255, 135, 67, 8, 255, 129, 71, 9, 255, 141, 67, 13, 255, 127, 68, 10, 255, 125, 64, 9, 255, 128, 60, 16, 255, 122, 67, 8, 255, 130, 72, 10, 255, 132, 71, 11, 255, 131, 60, 20, 255, 146, 73, 11, 255, 157, 85, 5, 255, 153, 80, 7, 255, 146, 75, 10, 255, 137, 70, 2, 255, 142, 75, 11, 255, 137, 70, 12, 255, 139, 71, 10, 255, 150, 77, 10, 255, 158, 79, 11, 255, 153, 80, 15, 255, 148, 81, 13, 255, 178, 92, 10, 255, 171, 89, 3, 255, 134, 68, 8, 255, 147, 80, 17, 255, 154, 93, 5, 255, 162, 88, 9, 255, 138, 69, 7, 255, 134, 73, 14, 255, 134, 74, 11, 255, 134, 71, 10, 255, 144, 70, 10, 255, 155, 74, 14, 255, 184, 105, 12, 255, 180, 96, 5, 255, 157, 71, 4, 255, 162, 82, 7, 255, 183, 102, 10, 255, 174, 88, 9, 255, 166, 82, 2, 255, 151, 71, 2, 255, 157, 77, 11, 255, 175, 94, 4, 255, 173, 85, 7, 255, 175, 84, 13, 255, 179, 94, 7, 255, 179, 94, 5, 255, 181, 93, 8, 255, 166, 85, 4, 255, 160, 83, 4, 255, 168, 90, 6, 255, 177, 92, 0, 255, 176, 93, 8, 255, 173, 93, 6, 255, 175, 88, 5, 255, 172, 90, 5, 255, 177, 94, 2, 255, 186, 97, 7, 255, 184, 97, 11, 255, 176, 94, 9, 255, 170, 90, 4, 255, 179, 100, 7, 255, 182, 100, 4, 255, 185, 101, 1, 255, 188, 105, 11, 255, 189, 107, 9, 255, 187, 106, 6, 255, 186, 108, 5, 255, 186, 109, 9, 255, 184, 109, 11, 255, 187, 114, 5, 255, 192, 118, 1, 255, 196, 119, 8, 255, 196, 119, 9, 255, 192, 115, 4, 255, 191, 111, 6, 255, 191, 114, 9, 255, 188, 116, 11, 255, 191, 117, 3, 255, 192, 114, 9, 255, 191, 111, 12, 255, 190, 109, 16, 255, 185, 106, 9, 255, 181, 108, 11, 255, 179, 108, 14, 255, 174, 104, 14, 255, 178, 106, 13, 255, 178, 105, 6, 255, 177, 106, 4, 255, 175, 108, 4, 255, 174, 108, 8, 255, 183, 107, 11, 255, 189, 106, 8, 255, 201, 119, 11, 255, 189, 112, 8, 255, 180, 106, 8, 255, 187, 116, 5, 255, 191, 118, 6, 255, 197, 128, 12, 255, 200, 140, 3, 255, 199, 138, 2, 255, 198, 130, 4, 255, 202, 130, 4, 255, 204, 133, 11, 255, 189, 119, 9, 255, 189, 118, 7, 255, 190, 116, 2, 255, 186, 108, 1, 255, 186, 106, 8, 255, 182, 101, 10, 255, 182, 101, 5, 255, 191, 108, 0, 255, 195, 116, 13, 255, 195, 122, 21, 255, 190, 116, 14, 255, 192, 107, 10, 255, 183, 102, 8, 255, 179, 102, 6, 255, 174, 101, 11, 255, 174, 103, 6, 255, 167, 93, 8, 255, 169, 91, 2, 255, 174, 90, 0, 255, 172, 91, 0, 255, 173, 94, 9, 255, 168, 88, 4, 255, 168, 89, 1, 255, 169, 89, 4, 255, 173, 88, 6, 255, 171, 92, 5, 255, 168, 90, 3, 255, 170, 91, 5, 255, 173, 94, 6, 255, 172, 94, 4, 255, 169, 94, 3, 255, 163, 95, 6, 255, 180, 108, 15, 255, 182, 119, 12, 255, 172, 110, 11, 255, 178, 119, 8, 255, 178, 105, 10, 255, 181, 112, 13, 255, 187, 115, 18, 255, 187, 112, 14, 255, 191, 112, 12, 255, 184, 105, 9, 255, 175, 93, 9, 255, 163, 87, 13, 255, 162, 79, 9, 255, 157, 77, 2, 255, 165, 78, 2, 255, 194, 110, 12, 255, 199, 123, 0, 255, 198, 113, 5, 255, 184, 99, 4, 255, 170, 83, 2, 255, 158, 72, 8, 255, 147, 63, 7, 255, 136, 57, 4, 255, 132, 57, 2, 255, 135, 63, 4, 255, 135, 66, 4, 255, 135, 69, 7, 255, 138, 76, 13, 255, 132, 73, 12, 255, 131, 68, 9, 255, 131, 70, 13, 255, 125, 69, 9, 255, 124, 72, 6, 255, 123, 69, 5, 255, 118, 62, 6, 255, 108, 54, 4, 255, 103, 51, 8, 255, 104, 53, 4, 255, 107, 56, 2, 255, 103, 54, 5, 255, 88, 39, 6, 255, 84, 35, 6, 255, 98, 48, 6, 255, 101, 54, 8, 255, 91, 44, 2, 255, 93, 44, 2, 255, 101, 50, 7, 255, 108, 55, 9, 255, 107, 57, 4, 255, 108, 59, 2, 255, 109, 58, 3, 255, 105, 52, 2, 255, 106, 53, 2, 255, 105, 52, 1, 255, 107, 55, 5, 255, 105, 53, 5, 255, 106, 47, 5, 255, 95, 47, 4, 255, 85, 42, 5, 255, 85, 40, 4, 255, 101, 51, 7, 255, 98, 46, 5, 255, 101, 47, 5, 255, 101, 47, 2, 255, 103, 51, 4, 255, 102, 52, 4, 255, 101, 51, 2, 255, 103, 49, 2, 255, 104, 46, 1, 255, 100, 42, 1, 255, 90, 29, 2, 255, 89, 24, 5, 255, 0, 0, 12, 255, 2, 2, 13, 255, 1, 2, 12, 255, 0, 0, 10, 255, 1, 1, 11, 255, 1, 1, 8, 255, 0, 1, 6, 255, 2, 0, 7, 255, 0, 1, 1, 255, 0, 2, 2, 255, 4, 2, 6, 255, 6, 20, 46, 255, 3, 49, 106, 255, 11, 42, 63, 255, 36, 52, 61, 255, 40, 51, 60, 255, 31, 32, 35, 255, 23, 18, 18, 255, 4, 1, 2, 255, 0, 0, 0, 255, 7, 8, 15, 255, 4, 5, 10, 255, 0, 5, 10, 255, 1, 1, 4, 255, 6, 0, 1, 255, 0, 0, 0, 255, 1, 2, 1, 255, 3, 0, 1, 255, 0, 1, 0, 255, 0, 1, 0, 255, 0, 0, 0, 255, 5, 0, 3, 255, 4, 0, 4, 255, 0, 0, 7, 255, 2, 0, 7, 255, 0, 2, 7, 255, 0, 0, 8, 255, 1, 1, 2, 255, 0, 1, 3, 255, 1, 0, 0, 255, 9, 51, 128, 255, 1, 174, 235, 255, 12, 20, 47, 255, 17, 2, 0, 255, 13, 23, 180, 255, 1, 28, 144, 255, 4, 1, 0, 255, 3, 1, 1, 255, 4, 1, 2, 255, 0, 3, 0, 255, 2, 1, 5, 255, 3, 0, 2, 255, 2, 1, 1, 255, 10, 7, 7, 255, 21, 18, 13, 255, 29, 27, 25, 255, 25, 27, 35, 255, 25, 28, 33, 255, 33, 27, 32, 255, 39, 32, 36, 255, 33, 30, 60, 255, 9, 16, 30, 255, 11, 16, 9, 255, 24, 14, 14, 255, 18, 15, 10, 255, 24, 30, 29, 255, 24, 33, 28, 255, 27, 29, 16, 255, 24, 23, 10, 255, 20, 19, 7, 255, 13, 11, 3, 255, 13, 14, 4, 255, 14, 14, 2, 255, 18, 17, 4, 255, 18, 15, 3, 255, 16, 15, 3, 255, 15, 14, 3, 255, 16, 16, 4, 255, 21, 17, 3, 255, 29, 24, 9, 255, 27, 24, 7, 255, 22, 20, 1, 255, 28, 24, 5, 255, 26, 29, 8, 255, 29, 35, 5, 255, 36, 42, 7, 255, 43, 49, 6, 255, 50, 58, 11, 255, 51, 61, 26, 255, 55, 71, 21, 255, 63, 80, 12, 255, 70, 83, 23, 255, 63, 85, 27, 255, 71, 95, 28, 255, 73, 93, 20, 255, 75, 91, 20, 255, 78, 88, 21, 255, 73, 82, 17, 255, 69, 79, 30, 255, 73, 79, 22, 255, 79, 77, 13, 255, 74, 73, 13, 255, 71, 72, 7, 255, 73, 73, 5, 255, 80, 75, 4, 255, 71, 71, 5, 255, 66, 69, 5, 255, 71, 69, 6, 255, 66, 63, 9, 255, 66, 61, 6, 255, 67, 60, 3, 255, 62, 56, 6, 255, 71, 53, 10, 255, 63, 51, 6, 255, 63, 49, 4, 255, 65, 44, 5, 255, 71, 44, 2, 255, 72, 48, 6, 255, 71, 47, 10, 255, 78, 43, 9, 255, 76, 46, 3, 255, 81, 52, 4, 255, 85, 57, 2, 255, 80, 55, 6, 255, 79, 44, 1, 255, 81, 46, 7, 255, 72, 41, 3, 255, 78, 43, 4, 255, 82, 49, 0, 255, 83, 48, 1, 255, 81, 44, 3, 255, 78, 45, 3, 255, 81, 49, 2, 255, 85, 50, 4, 255, 88, 52, 7, 255, 86, 52, 8, 255, 84, 50, 7, 255, 101, 51, 8, 255, 121, 52, 8, 255, 105, 55, 3, 255, 94, 54, 5, 255, 97, 53, 12, 255, 102, 60, 3, 255, 95, 57, 4, 255, 89, 55, 9, 255, 104, 59, 4, 255, 133, 63, 6, 255, 109, 57, 10, 255, 117, 66, 5, 255, 113, 56, 5, 255, 115, 54, 8, 255, 126, 61, 6, 255, 119, 58, 5, 255, 105, 60, 8, 255, 106, 59, 8, 255, 113, 63, 2, 255, 110, 62, 1, 255, 107, 63, 6, 255, 126, 66, 6, 255, 138, 66, 2, 255, 118, 62, 8, 255, 123, 63, 9, 255, 134, 62, 5, 255, 134, 67, 8, 255, 120, 65, 1, 255, 118, 62, 6, 255, 126, 61, 6, 255, 133, 65, 7, 255, 135, 66, 6, 255, 123, 66, 1, 255, 121, 64, 0, 255, 124, 64, 1, 255, 126, 66, 7, 255, 129, 67, 8, 255, 129, 65, 10, 255, 126, 67, 8, 255, 127, 67, 1, 255, 122, 67, 3, 255, 121, 65, 14, 255, 124, 62, 8, 255, 127, 65, 10, 255, 124, 67, 11, 255, 132, 68, 8, 255, 123, 66, 8, 255, 112, 66, 2, 255, 124, 62, 7, 255, 129, 63, 6, 255, 124, 66, 7, 255, 133, 71, 16, 255, 145, 82, 10, 255, 148, 76, 4, 255, 165, 83, 9, 255, 167, 83, 12, 255, 186, 98, 1, 255, 190, 102, 4, 255, 199, 105, 8, 255, 201, 106, 6, 255, 199, 112, 2, 255, 193, 98, 5, 255, 199, 107, 6, 255, 209, 124, 4, 255, 198, 107, 3, 255, 198, 98, 7, 255, 209, 106, 2, 255, 215, 112, 5, 255, 198, 102, 3, 255, 197, 99, 10, 255, 197, 101, 13, 255, 192, 101, 8, 255, 197, 102, 1, 255, 210, 107, 3, 255, 212, 105, 6, 255, 196, 96, 7, 255, 198, 93, 9, 255, 200, 97, 8, 255, 186, 100, 8, 255, 194, 104, 9, 255, 210, 114, 12, 255, 204, 111, 13, 255, 190, 100, 6, 255, 195, 109, 9, 255, 175, 97, 0, 255, 186, 108, 13, 255, 182, 99, 9, 255, 173, 92, 12, 255, 211, 116, 12, 255, 192, 105, 4, 255, 164, 81, 10, 255, 186, 93, 8, 255, 198, 112, 7, 255, 182, 97, 11, 255, 165, 79, 5, 255, 157, 79, 11, 255, 179, 92, 9, 255, 197, 100, 8, 255, 179, 87, 9, 255, 166, 83, 1, 255, 187, 100, 3, 255, 182, 98, 4, 255, 186, 100, 8, 255, 178, 96, 5, 255, 172, 92, 9, 255, 173, 91, 11, 255, 179, 97, 3, 255, 183, 98, 6, 255, 178, 95, 2, 255, 179, 92, 8, 255, 177, 93, 7, 255, 180, 100, 5, 255, 189, 105, 13, 255, 175, 90, 11, 255, 177, 97, 4, 255, 177, 96, 3, 255, 183, 101, 3, 255, 189, 100, 2, 255, 201, 108, 11, 255, 200, 112, 8, 255, 193, 107, 5, 255, 186, 103, 4, 255, 185, 104, 3, 255, 189, 109, 8, 255, 188, 110, 6, 255, 185, 108, 0, 255, 193, 114, 3, 255, 196, 116, 9, 255, 196, 116, 10, 255, 192, 112, 8, 255, 187, 110, 10, 255, 185, 111, 3, 255, 188, 115, 10, 255, 187, 111, 1, 255, 188, 109, 5, 255, 181, 102, 6, 255, 185, 109, 10, 255, 181, 109, 6, 255, 180, 108, 5, 255, 185, 114, 7, 255, 185, 113, 10, 255, 186, 111, 7, 255, 183, 108, 6, 255, 177, 105, 4, 255, 175, 109, 6, 255, 187, 120, 10, 255, 191, 115, 11, 255, 179, 104, 7, 255, 182, 107, 11, 255, 181, 109, 10, 255, 182, 116, 9, 255, 187, 122, 5, 255, 192, 131, 4, 255, 194, 135, 6, 255, 186, 125, 0, 255, 186, 120, 12, 255, 175, 106, 11, 255, 177, 111, 2, 255, 175, 111, 6, 255, 174, 112, 2, 255, 175, 111, 1, 255, 177, 109, 5, 255, 178, 107, 4, 255, 177, 104, 2, 255, 189, 115, 3, 255, 195, 114, 7, 255, 192, 104, 7, 255, 193, 112, 7, 255, 192, 121, 19, 255, 183, 113, 16, 255, 177, 104, 9, 255, 181, 106, 16, 255, 183, 115, 9, 255, 192, 129, 13, 255, 191, 128, 6, 255, 185, 118, 4, 255, 182, 108, 6, 255, 178, 101, 4, 255, 172, 92, 5, 255, 169, 92, 6, 255, 166, 89, 4, 255, 164, 87, 3, 255, 163, 83, 2, 255, 166, 86, 2, 255, 168, 85, 6, 255, 150, 77, 3, 255, 151, 83, 4, 255, 158, 86, 8, 255, 161, 88, 0, 255, 163, 88, 0, 255, 171, 105, 13, 255, 185, 120, 11, 255, 179, 121, 12, 255, 189, 130, 9, 255, 195, 131, 20, 255, 185, 115, 18, 255, 188, 118, 20, 255, 195, 116, 14, 255, 190, 115, 14, 255, 169, 92, 12, 255, 164, 78, 4, 255, 164, 81, 6, 255, 157, 82, 4, 255, 152, 74, 6, 255, 142, 63, 5, 255, 164, 79, 7, 255, 197, 112, 4, 255, 204, 124, 0, 255, 202, 115, 7, 255, 184, 90, 10, 255, 161, 73, 3, 255, 134, 58, 2, 255, 123, 49, 3, 255, 111, 40, 3, 255, 119, 54, 6, 255, 124, 61, 4, 255, 127, 60, 15, 255, 121, 60, 9, 255, 119, 65, 12, 255, 126, 70, 14, 255, 132, 75, 7, 255, 122, 68, 4, 255, 121, 64, 6, 255, 122, 64, 10, 255, 113, 58, 8, 255, 99, 48, 5, 255, 103, 48, 8, 255, 106, 52, 2, 255, 104, 54, 1, 255, 105, 56, 6, 255, 99, 48, 7, 255, 104, 57, 9, 255, 110, 60, 2, 255, 120, 63, 7, 255, 115, 64, 8, 255, 108, 59, 4, 255, 109, 60, 5, 255, 108, 59, 4, 255, 111, 60, 6, 255, 112, 59, 6, 255, 108, 55, 6, 255, 101, 49, 6, 255, 99, 45, 1, 255, 107, 54, 6, 255, 110, 56, 10, 255, 104, 50, 7, 255, 104, 51, 5, 255, 101, 49, 5, 255, 107, 53, 9, 255, 104, 53, 8, 255, 98, 50, 3, 255, 101, 47, 1, 255, 104, 50, 1, 255, 106, 51, 5, 255, 99, 49, 3, 255, 98, 48, 0, 255, 102, 48, 0, 255, 103, 51, 2, 255, 103, 47, 2, 255, 102, 44, 2, 255, 102, 36, 2, 255, 90, 24, 3, 255, 82, 20, 5, 255, 0, 0, 14, 255, 1, 0, 14, 255, 1, 1, 13, 255, 0, 0, 11, 255, 1, 1, 11, 255, 1, 1, 10, 255, 1, 0, 15, 255, 1, 1, 8, 255, 4, 1, 7, 255, 4, 1, 5, 255, 5, 2, 10, 255, 4, 48, 103, 255, 44, 128, 224, 255, 40, 183, 238, 255, 23, 124, 158, 255, 37, 60, 66, 255, 38, 41, 51, 255, 40, 40, 52, 255, 32, 33, 61, 255, 25, 31, 55, 255, 19, 40, 62, 255, 29, 40, 55, 255, 6, 24, 30, 255, 32, 41, 41, 255, 24, 45, 63, 255, 5, 18, 26, 255, 2, 0, 0, 255, 2, 1, 2, 255, 2, 1, 5, 255, 0, 2, 1, 255, 1, 2, 2, 255, 1, 3, 1, 255, 1, 2, 1, 255, 0, 2, 3, 255, 4, 1, 3, 255, 3, 1, 5, 255, 4, 2, 2, 255, 1, 1, 2, 255, 3, 2, 0, 255, 2, 8, 57, 255, 10, 168, 254, 255, 7, 78, 120, 255, 9, 0, 0, 255, 11, 19, 103, 255, 4, 35, 201, 255, 6, 8, 7, 255, 6, 0, 1, 255, 1, 3, 2, 255, 1, 1, 2, 255, 1, 0, 2, 255, 1, 0, 0, 255, 3, 1, 1, 255, 1, 0, 1, 255, 3, 2, 3, 255, 13, 14, 9, 255, 27, 29, 23, 255, 28, 30, 31, 255, 28, 26, 32, 255, 31, 26, 36, 255, 33, 33, 40, 255, 31, 30, 50, 255, 19, 19, 22, 255, 20, 20, 10, 255, 18, 16, 9, 255, 22, 20, 13, 255, 27, 31, 31, 255, 30, 38, 33, 255, 27, 29, 17, 255, 27, 26, 15, 255, 19, 21, 9, 255, 12, 15, 4, 255, 15, 15, 5, 255, 19, 18, 6, 255, 18, 16, 3, 255, 18, 16, 3, 255, 17, 17, 5, 255, 15, 16, 5, 255, 16, 18, 4, 255, 23, 20, 4, 255, 27, 23, 6, 255, 23, 22, 4, 255, 22, 21, 3, 255, 26, 25, 5, 255, 33, 31, 8, 255, 37, 40, 7, 255, 39, 47, 14, 255, 40, 55, 8, 255, 46, 65, 5, 255, 53, 71, 12, 255, 57, 74, 15, 255, 65, 75, 30, 255, 70, 83, 27, 255, 62, 89, 22, 255, 60, 93, 19, 255, 64, 89, 20, 255, 71, 91, 18, 255, 70, 85, 13, 255, 70, 80, 13, 255, 67, 81, 11, 255, 68, 79, 11, 255, 74, 74, 13, 255, 68, 72, 15, 255, 68, 71, 11, 255, 71, 69, 8, 255, 74, 68, 5, 255, 75, 68, 6, 255, 73, 69, 4, 255, 76, 67, 2, 255, 70, 63, 4, 255, 65, 61, 4, 255, 70, 56, 6, 255, 64, 56, 5, 255, 64, 52, 6, 255, 65, 52, 5, 255, 65, 46, 5, 255, 68, 48, 6, 255, 77, 48, 6, 255, 71, 47, 3, 255, 76, 47, 8, 255, 83, 48, 4, 255, 78, 44, 2, 255, 88, 53, 6, 255, 87, 54, 4, 255, 88, 53, 7, 255, 76, 45, 3, 255, 72, 48, 5, 255, 75, 48, 4, 255, 86, 49, 6, 255, 81, 47, 8, 255, 76, 48, 1, 255, 76, 48, 4, 255, 84, 43, 7, 255, 85, 47, 6, 255, 81, 47, 2, 255, 86, 46, 2, 255, 89, 54, 4, 255, 92, 50, 6, 255, 97, 51, 8, 255, 97, 51, 4, 255, 104, 57, 6, 255, 110, 56, 7, 255, 101, 55, 5, 255, 99, 59, 2, 255, 93, 58, 7, 255, 101, 52, 6, 255, 126, 59, 4, 255, 119, 58, 8, 255, 111, 62, 4, 255, 111, 60, 7, 255, 100, 53, 11, 255, 99, 61, 7, 255, 108, 61, 16, 255, 116, 57, 9, 255, 121, 64, 2, 255, 114, 63, 6, 255, 122, 64, 10, 255, 116, 59, 7, 255, 114, 55, 3, 255, 117, 65, 7, 255, 109, 57, 10, 255, 103, 58, 2, 255, 115, 64, 8, 255, 117, 63, 3, 255, 121, 66, 2, 255, 117, 62, 7, 255, 119, 66, 4, 255, 128, 69, 2, 255, 138, 65, 4, 255, 134, 62, 7, 255, 121, 64, 7, 255, 121, 69, 7, 255, 127, 66, 2, 255, 133, 67, 6, 255, 132, 67, 4, 255, 124, 67, 2, 255, 126, 64, 12, 255, 124, 63, 12, 255, 126, 61, 5, 255, 121, 62, 7, 255, 121, 63, 8, 255, 114, 67, 6, 255, 127, 64, 7, 255, 136, 67, 1, 255, 143, 76, 9, 255, 157, 81, 8, 255, 165, 88, 15, 255, 172, 96, 14, 255, 187, 106, 12, 255, 203, 106, 7, 255, 209, 109, 7, 255, 207, 110, 12, 255, 205, 106, 3, 255, 207, 105, 11, 255, 213, 113, 5, 255, 217, 113, 2, 255, 223, 117, 8, 255, 232, 125, 5, 255, 235, 127, 11, 255, 211, 96, 6, 255, 220, 106, 10, 255, 220, 111, 2, 255, 227, 119, 10, 255, 224, 117, 4, 255, 231, 124, 6, 255, 228, 121, 4, 255, 222, 119, 4, 255, 217, 116, 8, 255, 212, 114, 6, 255, 217, 121, 5, 255, 215, 117, 5, 255, 209, 109, 2, 255, 207, 105, 1, 255, 201, 97, 8, 255, 193, 88, 4, 255, 200, 97, 8, 255, 211, 116, 5, 255, 210, 113, 5, 255, 218, 120, 6, 255, 220, 121, 7, 255, 221, 128, 2, 255, 222, 131, 3, 255, 224, 126, 10, 255, 222, 130, 6, 255, 221, 129, 2, 255, 213, 124, 2, 255, 217, 123, 2, 255, 218, 127, 7, 255, 212, 124, 10, 255, 213, 121, 6, 255, 212, 115, 0, 255, 210, 117, 3, 255, 194, 109, 5, 255, 194, 110, 13, 255, 202, 111, 7, 255, 204, 108, 8, 255, 190, 98, 11, 255, 179, 96, 11, 255, 185, 97, 5, 255, 194, 105, 15, 255, 197, 108, 13, 255, 194, 105, 5, 255, 188, 97, 1, 255, 184, 91, 6, 255, 192, 99, 15, 255, 187, 98, 3, 255, 181, 92, 4, 255, 184, 94, 10, 255, 184, 98, 10, 255, 194, 109, 7, 255, 202, 120, 10, 255, 182, 99, 5, 255, 178, 102, 1, 255, 174, 97, 7, 255, 175, 97, 9, 255, 179, 99, 1, 255, 187, 102, 5, 255, 184, 103, 4, 255, 180, 99, 9, 255, 178, 100, 13, 255, 186, 107, 8, 255, 196, 117, 3, 255, 192, 110, 3, 255, 189, 110, 6, 255, 193, 116, 4, 255, 191, 112, 2, 255, 193, 114, 6, 255, 191, 112, 7, 255, 185, 109, 5, 255, 187, 116, 2, 255, 185, 113, 7, 255, 184, 110, 2, 255, 186, 109, 7, 255, 187, 109, 5, 255, 186, 111, 3, 255, 182, 110, 1, 255, 177, 105, 7, 255, 188, 110, 12, 255, 195, 111, 9, 255, 190, 108, 7, 255, 185, 112, 2, 255, 189, 122, 2, 255, 197, 127, 4, 255, 203, 124, 11, 255, 166, 99, 15, 255, 160, 104, 26, 255, 185, 121, 17, 255, 185, 126, 6, 255, 179, 115, 7, 255, 177, 110, 8, 255, 183, 116, 3, 255, 189, 121, 7, 255, 168, 100, 1, 255, 159, 93, 3, 255, 168, 99, 4, 255, 166, 100, 0, 255, 168, 102, 5, 255, 173, 104, 7, 255, 173, 101, 4, 255, 177, 101, 10, 255, 172, 95, 2, 255, 181, 102, 3, 255, 192, 109, 6, 255, 189, 108, 5, 255, 188, 112, 2, 255, 190, 116, 7, 255, 183, 112, 15, 255, 173, 107, 16, 255, 169, 111, 14, 255, 165, 102, 9, 255, 169, 96, 13, 255, 176, 100, 5, 255, 187, 114, 6, 255, 194, 125, 2, 255, 188, 119, 1, 255, 187, 114, 7, 255, 181, 106, 6, 255, 174, 99, 0, 255, 168, 94, 5, 255, 164, 88, 11, 255, 164, 86, 2, 255, 163, 85, 7, 255, 165, 90, 7, 255, 161, 86, 7, 255, 148, 81, 11, 255, 130, 64, 8, 255, 149, 83, 8, 255, 166, 96, 7, 255, 184, 113, 15, 255, 182, 109, 1, 255, 188, 133, 7, 255, 193, 142, 11, 255, 196, 133, 19, 255, 178, 113, 17, 255, 178, 107, 15, 255, 166, 89, 13, 255, 150, 72, 11, 255, 147, 75, 4, 255, 150, 77, 5, 255, 151, 78, 7, 255, 153, 78, 0, 255, 148, 70, 1, 255, 152, 68, 5, 255, 179, 96, 9, 255, 199, 120, 2, 255, 201, 120, 6, 255, 191, 107, 6, 255, 175, 85, 4, 255, 157, 72, 7, 255, 138, 67, 2, 255, 132, 62, 6, 255, 132, 60, 8, 255, 131, 66, 6, 255, 133, 67, 12, 255, 133, 68, 8, 255, 123, 60, 1, 255, 118, 57, 12, 255, 123, 64, 9, 255, 124, 64, 5, 255, 127, 66, 7, 255, 123, 65, 6, 255, 119, 66, 4, 255, 121, 65, 2, 255, 114, 60, 4, 255, 108, 58, 6, 255, 110, 59, 6, 255, 106, 54, 4, 255, 104, 50, 7, 255, 102, 49, 5, 255, 107, 58, 4, 255, 108, 59, 1, 255, 111, 57, 4, 255, 114, 61, 4, 255, 114, 63, 5, 255, 113, 62, 6, 255, 105, 55, 1, 255, 105, 54, 4, 255, 108, 55, 8, 255, 100, 46, 6, 255, 104, 52, 9, 255, 109, 54, 1, 255, 108, 50, 4, 255, 99, 43, 5, 255, 101, 49, 7, 255, 101, 54, 4, 255, 103, 55, 3, 255, 103, 48, 3, 255, 100, 47, 5, 255, 96, 46, 5, 255, 96, 42, 3, 255, 102, 49, 6, 255, 94, 48, 5, 255, 92, 48, 6, 255, 97, 46, 5, 255, 101, 46, 4, 255, 101, 45, 5, 255, 100, 37, 3, 255, 98, 36, 4, 255, 99, 33, 3, 255, 86, 20, 0, 255, 85, 23, 6, 255, 1, 0, 16, 255, 0, 0, 14, 255, 1, 1, 13, 255, 1, 1, 11, 255, 0, 0, 12, 255, 0, 0, 13, 255, 1, 0, 18, 255, 4, 1, 4, 255, 1, 1, 2, 255, 2, 2, 6, 255, 0, 0, 2, 255, 8, 11, 54, 255, 81, 184, 233, 255, 40, 151, 167, 255, 23, 93, 145, 255, 28, 101, 118, 255, 45, 66, 78, 255, 58, 67, 94, 255, 52, 59, 87, 255, 47, 72, 106, 255, 38, 59, 88, 255, 30, 50, 67, 255, 35, 44, 67, 255, 16, 33, 40, 255, 34, 58, 76, 255, 47, 77, 112, 255, 20, 43, 59, 255, 0, 1, 3, 255, 0, 1, 0, 255, 2, 0, 3, 255, 1, 1, 2, 255, 1, 1, 1, 255, 0, 2, 0, 255, 4, 1, 6, 255, 5, 0, 8, 255, 1, 2, 3, 255, 1, 1, 10, 255, 4, 3, 0, 255, 3, 0, 0, 255, 6, 110, 191, 255, 5, 141, 197, 255, 11, 0, 0, 255, 17, 7, 26, 255, 5, 28, 206, 255, 4, 13, 57, 255, 6, 2, 0, 255, 0, 5, 4, 255, 2, 0, 8, 255, 2, 0, 6, 255, 4, 0, 6, 255, 0, 0, 0, 255, 0, 1, 1, 255, 1, 0, 0, 255, 3, 0, 0, 255, 10, 12, 6, 255, 25, 30, 22, 255, 30, 31, 28, 255, 30, 27, 30, 255, 33, 30, 39, 255, 38, 32, 45, 255, 37, 30, 35, 255, 28, 23, 25, 255, 22, 21, 16, 255, 24, 27, 7, 255, 26, 29, 20, 255, 35, 39, 40, 255, 36, 42, 42, 255, 27, 33, 27, 255, 24, 28, 20, 255, 21, 23, 10, 255, 18, 18, 5, 255, 15, 13, 1, 255, 15, 13, 2, 255, 21, 18, 7, 255, 17, 15, 2, 255, 19, 17, 4, 255, 18, 20, 5, 255, 16, 20, 6, 255, 24, 23, 7, 255, 24, 21, 5, 255, 24, 22, 5, 255, 22, 24, 5, 255, 26, 28, 8, 255, 32, 36, 7, 255, 36, 42, 11, 255, 39, 48, 18, 255, 44, 57, 16, 255, 50, 65, 17, 255, 55, 71, 15, 255, 59, 75, 17, 255, 64, 84, 11, 255, 65, 82, 24, 255, 71, 84, 35, 255, 68, 90, 15, 255, 63, 82, 26, 255, 70, 83, 24, 255, 66, 79, 17, 255, 67, 78, 16, 255, 67, 81, 7, 255, 66, 76, 10, 255, 69, 73, 15, 255, 62, 69, 12, 255, 63, 68, 15, 255, 73, 72, 9, 255, 73, 72, 6, 255, 70, 66, 6, 255, 72, 67, 2, 255, 72, 65, 4, 255, 72, 60, 8, 255, 67, 60, 4, 255, 73, 55, 3, 255, 66, 54, 5, 255, 67, 56, 1, 255, 62, 53, 4, 255, 75, 49, 7, 255, 85, 53, 6, 255, 97, 53, 9, 255, 78, 45, 3, 255, 93, 56, 2, 255, 100, 53, 1, 255, 93, 50, 2, 255, 108, 57, 8, 255, 101, 53, 5, 255, 84, 50, 3, 255, 74, 46, 1, 255, 76, 45, 3, 255, 84, 49, 5, 255, 81, 50, 4, 255, 79, 48, 3, 255, 79, 46, 2, 255, 79, 46, 10, 255, 78, 47, 8, 255, 92, 50, 3, 255, 106, 50, 3, 255, 94, 49, 5, 255, 89, 52, 7, 255, 96, 50, 5, 255, 100, 51, 4, 255, 98, 57, 4, 255, 130, 64, 11, 255, 132, 60, 6, 255, 103, 59, 10, 255, 97, 55, 5, 255, 93, 57, 5, 255, 99, 60, 5, 255, 128, 64, 8, 255, 112, 57, 12, 255, 93, 59, 9, 255, 108, 58, 8, 255, 120, 64, 7, 255, 111, 66, 3, 255, 107, 61, 8, 255, 126, 65, 4, 255, 123, 62, 2, 255, 111, 56, 10, 255, 117, 62, 7, 255, 126, 69, 1, 255, 122, 63, 4, 255, 122, 61, 5, 255, 125, 66, 4, 255, 116, 66, 3, 255, 113, 61, 3, 255, 114, 63, 8, 255, 112, 62, 9, 255, 114, 62, 10, 255, 118, 64, 7, 255, 135, 69, 8, 255, 133, 62, 3, 255, 125, 59, 9, 255, 126, 66, 9, 255, 128, 65, 4, 255, 126, 64, 14, 255, 119, 65, 6, 255, 126, 64, 13, 255, 121, 64, 4, 255, 124, 65, 6, 255, 140, 70, 17, 255, 145, 75, 13, 255, 150, 84, 11, 255, 160, 89, 4, 255, 168, 87, 8, 255, 177, 96, 12, 255, 191, 104, 5, 255, 196, 101, 12, 255, 197, 106, 10, 255, 207, 108, 5, 255, 204, 104, 8, 255, 201, 106, 11, 255, 204, 110, 5, 255, 201, 105, 6, 255, 196, 99, 4, 255, 203, 99, 4, 255, 198, 101, 6, 255, 196, 103, 5, 255, 194, 101, 8, 255, 190, 96, 6, 255, 196, 103, 7, 255, 192, 96, 8, 255, 192, 91, 9, 255, 193, 89, 5, 255, 194, 91, 4, 255, 199, 97, 4, 255, 201, 101, 4, 255, 201, 103, 6, 255, 202, 104, 9, 255, 204, 104, 9, 255, 201, 102, 4, 255, 197, 100, 1, 255, 204, 106, 4, 255, 199, 102, 5, 255, 197, 99, 11, 255, 200, 103, 7, 255, 201, 102, 9, 255, 194, 98, 5, 255, 199, 105, 11, 255, 204, 110, 5, 255, 202, 108, 8, 255, 205, 113, 10, 255, 209, 112, 3, 255, 210, 114, 1, 255, 212, 114, 0, 255, 205, 107, 1, 255, 213, 115, 4, 255, 215, 120, 8, 255, 213, 115, 5, 255, 214, 124, 5, 255, 221, 127, 2, 255, 220, 122, 6, 255, 208, 117, 9, 255, 207, 108, 1, 255, 209, 112, 4, 255, 210, 118, 11, 255, 210, 117, 8, 255, 209, 121, 1, 255, 213, 130, 4, 255, 211, 128, 5, 255, 212, 127, 6, 255, 207, 122, 8, 255, 207, 124, 8, 255, 206, 123, 2, 255, 206, 125, 2, 255, 199, 119, 0, 255, 193, 114, 5, 255, 201, 119, 2, 255, 191, 104, 8, 255, 184, 96, 12, 255, 182, 95, 8, 255, 186, 98, 10, 255, 187, 99, 0, 255, 190, 105, 4, 255, 196, 117, 4, 255, 200, 122, 7, 255, 186, 106, 5, 255, 192, 112, 7, 255, 190, 110, 7, 255, 182, 99, 5, 255, 182, 97, 7, 255, 183, 100, 12, 255, 181, 101, 7, 255, 184, 102, 1, 255, 188, 104, 3, 255, 189, 105, 2, 255, 195, 110, 7, 255, 196, 112, 5, 255, 198, 114, 6, 255, 193, 111, 3, 255, 189, 110, 5, 255, 191, 114, 9, 255, 193, 120, 5, 255, 189, 113, 5, 255, 186, 112, 1, 255, 184, 111, 1, 255, 183, 110, 9, 255, 180, 105, 17, 255, 180, 106, 5, 255, 180, 110, 10, 255, 180, 112, 16, 255, 185, 120, 19, 255, 184, 119, 10, 255, 182, 112, 7, 255, 193, 125, 7, 255, 196, 125, 1, 255, 184, 109, 0, 255, 179, 112, 14, 255, 183, 123, 13, 255, 183, 124, 14, 255, 166, 102, 17, 255, 167, 93, 12, 255, 161, 92, 15, 255, 177, 115, 4, 255, 181, 120, 4, 255, 162, 96, 6, 255, 154, 87, 9, 255, 157, 94, 9, 255, 169, 106, 9, 255, 171, 107, 2, 255, 166, 100, 4, 255, 165, 97, 5, 255, 167, 96, 7, 255, 165, 90, 5, 255, 171, 91, 1, 255, 183, 97, 0, 255, 181, 101, 6, 255, 174, 99, 2, 255, 176, 102, 11, 255, 175, 107, 25, 255, 171, 117, 16, 255, 170, 108, 6, 255, 170, 102, 6, 255, 177, 108, 11, 255, 185, 113, 18, 255, 191, 122, 6, 255, 183, 110, 8, 255, 181, 109, 2, 255, 182, 109, 1, 255, 181, 106, 1, 255, 181, 106, 4, 255, 176, 103, 3, 255, 175, 102, 4, 255, 173, 96, 5, 255, 174, 92, 3, 255, 170, 100, 3, 255, 164, 90, 0, 255, 129, 68, 5, 255, 122, 66, 9, 255, 165, 95, 13, 255, 181, 121, 7, 255, 188, 125, 1, 255, 195, 128, 4, 255, 197, 140, 10, 255, 199, 141, 13, 255, 181, 106, 10, 255, 146, 75, 6, 255, 138, 70, 10, 255, 124, 63, 7, 255, 138, 67, 3, 255, 147, 71, 13, 255, 139, 72, 10, 255, 144, 72, 9, 255, 151, 76, 4, 255, 151, 68, 5, 255, 164, 77, 5, 255, 189, 111, 6, 255, 199, 126, 5, 255, 201, 121, 6, 255, 199, 117, 6, 255, 194, 113, 4, 255, 162, 77, 9, 255, 145, 66, 9, 255, 147, 73, 3, 255, 141, 65, 1, 255, 134, 63, 5, 255, 126, 57, 4, 255, 121, 56, 7, 255, 124, 57, 7, 255, 125, 61, 14, 255, 120, 65, 10, 255, 119, 60, 7, 255, 122, 59, 4, 255, 123, 66, 6, 255, 118, 61, 3, 255, 110, 49, 4, 255, 110, 52, 7, 255, 109, 59, 6, 255, 105, 55, 6, 255, 97, 41, 11, 255, 94, 43, 2, 255, 97, 46, 7, 255, 102, 50, 6, 255, 109, 58, 3, 255, 107, 58, 4, 255, 113, 58, 5, 255, 114, 59, 7, 255, 104, 51, 2, 255, 100, 48, 1, 255, 105, 53, 7, 255, 102, 50, 4, 255, 99, 47, 0, 255, 101, 49, 2, 255, 102, 48, 7, 255, 103, 47, 5, 255, 103, 50, 4, 255, 101, 51, 4, 255, 100, 52, 3, 255, 94, 47, 0, 255, 96, 45, 3, 255, 94, 43, 6, 255, 88, 40, 2, 255, 92, 41, 3, 255, 92, 39, 0, 255, 88, 41, 2, 255, 91, 43, 6, 255, 93, 40, 3, 255, 100, 43, 8, 255, 105, 42, 9, 255, 98, 37, 4, 255, 95, 31, 1, 255, 92, 27, 2, 255, 87, 26, 0, 255, 98, 32, 5, 255, 1, 0, 20, 255, 1, 0, 16, 255, 1, 1, 13, 255, 1, 1, 12, 255, 0, 0, 12, 255, 1, 0, 17, 255, 1, 0, 10, 255, 2, 2, 5, 255, 1, 1, 2, 255, 2, 0, 8, 255, 7, 1, 6, 255, 5, 5, 4, 255, 22, 59, 57, 255, 11, 29, 21, 255, 22, 29, 59, 255, 17, 72, 120, 255, 15, 41, 43, 255, 29, 46, 68, 255, 32, 49, 57, 255, 42, 65, 83, 255, 53, 63, 85, 255, 26, 46, 66, 255, 43, 58, 86, 255, 44, 64, 90, 255, 19, 29, 38, 255, 15, 23, 29, 255, 45, 76, 136, 255, 23, 57, 62, 255, 1, 1, 0, 255, 5, 1, 2, 255, 2, 2, 4, 255, 0, 2, 1, 255, 0, 1, 5, 255, 3, 1, 2, 255, 5, 0, 3, 255, 1, 2, 1, 255, 2, 2, 5, 255, 3, 0, 0, 255, 2, 41, 110, 255, 3, 173, 245, 255, 10, 19, 47, 255, 10, 3, 0, 255, 13, 26, 154, 255, 2, 20, 136, 255, 2, 0, 0, 255, 0, 5, 5, 255, 0, 4, 6, 255, 5, 0, 5, 255, 2, 2, 1, 255, 0, 0, 3, 255, 0, 0, 0, 255, 2, 2, 2, 255, 0, 1, 1, 255, 0, 0, 0, 255, 3, 4, 1, 255, 20, 19, 11, 255, 26, 25, 19, 255, 28, 24, 19, 255, 35, 29, 32, 255, 34, 31, 47, 255, 36, 34, 36, 255, 32, 27, 22, 255, 25, 23, 15, 255, 26, 30, 19, 255, 24, 33, 30, 255, 36, 44, 46, 255, 38, 45, 43, 255, 33, 41, 30, 255, 28, 33, 21, 255, 27, 27, 12, 255, 27, 23, 8, 255, 19, 16, 3, 255, 18, 14, 4, 255, 19, 15, 4, 255, 20, 16, 5, 255, 19, 17, 3, 255, 21, 21, 5, 255, 18, 18, 5, 255, 22, 22, 4, 255, 27, 23, 5, 255, 32, 28, 10, 255, 25, 25, 5, 255, 30, 31, 9, 255, 30, 44, 11, 255, 38, 51, 14, 255, 45, 54, 10, 255, 52, 59, 9, 255, 57, 65, 14, 255, 62, 73, 16, 255, 58, 74, 27, 255, 58, 83, 20, 255, 66, 82, 15, 255, 82, 84, 19, 255, 81, 86, 14, 255, 72, 82, 16, 255, 72, 79, 11, 255, 66, 74, 15, 255, 67, 73, 13, 255, 71, 77, 7, 255, 71, 75, 8, 255, 70, 69, 16, 255, 66, 66, 9, 255, 64, 66, 14, 255, 70, 68, 7, 255, 66, 69, 3, 255, 69, 68, 9, 255, 73, 69, 1, 255, 65, 65, 1, 255, 70, 62, 8, 255, 72, 58, 6, 255, 67, 55, 1, 255, 68, 57, 3, 255, 69, 52, 2, 255, 89, 56, 6, 255, 77, 51, 7, 255, 68, 46, 2, 255, 84, 47, 8, 255, 82, 48, 5, 255, 82, 54, 1, 255, 87, 52, 5, 255, 91, 50, 4, 255, 105, 58, 6, 255, 100, 57, 4, 255, 81, 52, 1, 255, 78, 52, 6, 255, 78, 49, 5, 255, 84, 49, 4, 255, 82, 51, 3, 255, 84, 45, 1, 255, 92, 51, 1, 255, 108, 55, 7, 255, 113, 51, 7, 255, 110, 53, 1, 255, 113, 53, 3, 255, 95, 49, 5, 255, 87, 53, 7, 255, 84, 56, 2, 255, 96, 57, 5, 255, 96, 58, 2, 255, 112, 63, 3, 255, 115, 62, 1, 255, 96, 56, 3, 255, 110, 59, 5, 255, 136, 61, 9, 255, 125, 61, 6, 255, 118, 62, 0, 255, 112, 58, 5, 255, 105, 54, 4, 255, 122, 65, 10, 255, 118, 64, 3, 255, 110, 62, 3, 255, 110, 59, 2, 255, 115, 67, 2, 255, 113, 63, 9, 255, 120, 63, 4, 255, 132, 65, 5, 255, 134, 66, 2, 255, 127, 64, 3, 255, 122, 56, 1, 255, 136, 66, 5, 255, 123, 63, 5, 255, 114, 57, 13, 255, 112, 61, 8, 255, 113, 64, 7, 255, 118, 65, 5, 255, 123, 63, 5, 255, 119, 61, 2, 255, 125, 70, 6, 255, 129, 68, 4, 255, 129, 65, 10, 255, 131, 66, 9, 255, 138, 73, 5, 255, 144, 77, 8, 255, 155, 85, 6, 255, 167, 92, 6, 255, 177, 94, 11, 255, 176, 92, 11, 255, 182, 89, 3, 255, 191, 92, 5, 255, 186, 87, 10, 255, 185, 91, 10, 255, 192, 92, 7, 255, 195, 97, 0, 255, 190, 99, 8, 255, 191, 101, 12, 255, 188, 100, 9, 255, 188, 102, 6, 255, 188, 101, 4, 255, 197, 105, 2, 255, 194, 100, 10, 255, 178, 86, 7, 255, 188, 93, 7, 255, 195, 101, 11, 255, 194, 103, 6, 255, 192, 101, 9, 255, 193, 103, 6, 255, 192, 103, 3, 255, 195, 101, 6, 255, 193, 104, 6, 255, 192, 102, 9, 255, 189, 95, 9, 255, 191, 96, 2, 255, 194, 99, 5, 255, 190, 95, 7, 255, 188, 95, 4, 255, 193, 95, 2, 255, 197, 100, 0, 255, 195, 95, 5, 255, 187, 89, 5, 255, 183, 87, 0, 255, 187, 95, 0, 255, 189, 96, 2, 255, 191, 94, 5, 255, 193, 103, 5, 255, 196, 108, 2, 255, 201, 105, 6, 255, 201, 109, 13, 255, 193, 109, 8, 255, 199, 111, 8, 255, 203, 116, 8, 255, 195, 105, 1, 255, 200, 106, 7, 255, 200, 110, 5, 255, 199, 114, 8, 255, 203, 112, 7, 255, 207, 118, 6, 255, 207, 119, 0, 255, 207, 117, 13, 255, 205, 113, 12, 255, 200, 108, 1, 255, 198, 106, 4, 255, 200, 108, 4, 255, 205, 115, 4, 255, 208, 121, 4, 255, 205, 120, 4, 255, 204, 119, 2, 255, 208, 121, 4, 255, 207, 122, 5, 255, 207, 123, 1, 255, 212, 129, 6, 255, 212, 129, 10, 255, 209, 127, 7, 255, 211, 133, 7, 255, 210, 132, 3, 255, 213, 136, 3, 255, 213, 137, 10, 255, 207, 132, 13, 255, 205, 132, 4, 255, 201, 130, 7, 255, 201, 124, 10, 255, 214, 130, 3, 255, 211, 126, 8, 255, 214, 131, 4, 255, 211, 127, 8, 255, 198, 113, 5, 255, 187, 101, 10, 255, 187, 102, 6, 255, 187, 107, 4, 255, 187, 110, 3, 255, 186, 109, 6, 255, 185, 107, 10, 255, 181, 107, 8, 255, 183, 106, 12, 255, 186, 104, 7, 255, 184, 102, 0, 255, 189, 104, 4, 255, 197, 112, 6, 255, 202, 116, 3, 255, 195, 110, 1, 255, 194, 111, 4, 255, 191, 114, 2, 255, 187, 116, 3, 255, 182, 113, 2, 255, 184, 116, 11, 255, 190, 123, 7, 255, 195, 122, 13, 255, 197, 124, 13, 255, 192, 121, 12, 255, 183, 107, 13, 255, 188, 107, 11, 255, 199, 113, 13, 255, 195, 112, 7, 255, 173, 102, 5, 255, 175, 116, 11, 255, 180, 123, 14, 255, 192, 139, 15, 255, 181, 133, 15, 255, 181, 122, 17, 255, 179, 119, 16, 255, 182, 120, 12, 255, 170, 107, 2, 255, 148, 81, 9, 255, 155, 90, 7, 255, 168, 105, 4, 255, 171, 105, 4, 255, 172, 105, 3, 255, 164, 95, 3, 255, 164, 97, 1, 255, 164, 96, 7, 255, 153, 81, 8, 255, 155, 81, 3, 255, 174, 92, 10, 255, 180, 100, 1, 255, 171, 88, 5, 255, 172, 98, 7, 255, 177, 117, 19, 255, 173, 121, 27, 255, 173, 119, 12, 255, 171, 110, 9, 255, 171, 99, 8, 255, 187, 109, 7, 255, 188, 110, 10, 255, 191, 119, 11, 255, 188, 118, 6, 255, 180, 104, 5, 255, 186, 108, 6, 255, 184, 109, 1, 255, 180, 106, 3, 255, 182, 107, 7, 255, 177, 102, 1, 255, 179, 104, 1, 255, 178, 105, 3, 255, 168, 92, 6, 255, 122, 66, 3, 255, 144, 85, 6, 255, 188, 119, 7, 255, 190, 130, 13, 255, 188, 127, 11, 255, 189, 131, 5, 255, 195, 132, 8, 255, 202, 138, 8, 255, 168, 90, 12, 255, 139, 71, 17, 255, 135, 68, 17, 255, 131, 71, 12, 255, 145, 74, 11, 255, 153, 74, 2, 255, 156, 78, 5, 255, 154, 72, 4, 255, 149, 67, 0, 255, 158, 75, 7, 255, 180, 100, 7, 255, 199, 122, 4, 255, 199, 120, 9, 255, 192, 112, 6, 255, 193, 116, 2, 255, 194, 109, 7, 255, 171, 81, 6, 255, 156, 75, 3, 255, 148, 70, 3, 255, 143, 69, 3, 255, 137, 67, 2, 255, 116, 49, 2, 255, 115, 50, 3, 255, 127, 65, 10, 255, 118, 59, 10, 255, 116, 62, 8, 255, 120, 65, 8, 255, 118, 62, 3, 255, 111, 50, 0, 255, 100, 36, 5, 255, 81, 27, 5, 255, 87, 36, 2, 255, 99, 47, 3, 255, 92, 41, 2, 255, 92, 42, 5, 255, 96, 53, 2, 255, 100, 55, 6, 255, 101, 48, 6, 255, 103, 49, 5, 255, 104, 54, 9, 255, 109, 55, 9, 255, 107, 52, 5, 255, 99, 46, 1, 255, 102, 49, 5, 255, 106, 53, 8, 255, 102, 51, 3, 255, 105, 49, 6, 255, 102, 44, 9, 255, 100, 47, 7, 255, 104, 55, 4, 255, 109, 60, 4, 255, 109, 53, 4, 255, 102, 41, 1, 255, 89, 38, 1, 255, 93, 41, 2, 255, 95, 45, 4, 255, 89, 42, 2, 255, 87, 41, 3, 255, 86, 35, 3, 255, 88, 36, 6, 255, 97, 36, 5, 255, 96, 38, 0, 255, 103, 42, 2, 255, 107, 41, 4, 255, 94, 36, 3, 255, 92, 27, 1, 255, 97, 24, 4, 255, 105, 34, 4, 255, 115, 33, 2, 255, 2, 1, 20, 255, 2, 1, 18, 255, 2, 1, 15, 255, 2, 2, 14, 255, 1, 0, 13, 255, 1, 0, 16, 255, 0, 2, 12, 255, 0, 1, 9, 255, 6, 0, 11, 255, 3, 1, 10, 255, 2, 1, 6, 255, 2, 2, 10, 255, 0, 1, 8, 255, 0, 3, 7, 255, 6, 1, 11, 255, 35, 54, 76, 255, 18, 50, 60, 255, 0, 0, 0, 255, 0, 2, 0, 255, 16, 20, 41, 255, 54, 67, 107, 255, 56, 73, 105, 255, 28, 50, 76, 255, 45, 61, 87, 255, 47, 74, 111, 255, 5, 21, 25, 255, 12, 15, 31, 255, 44, 78, 95, 255, 12, 28, 34, 255, 3, 0, 0, 255, 3, 1, 3, 255, 1, 1, 3, 255, 2, 0, 2, 255, 1, 1, 6, 255, 1, 3, 5, 255, 2, 2, 3, 255, 1, 0, 0, 255, 5, 0, 48, 255, 2, 153, 237, 255, 14, 74, 119, 255, 15, 0, 0, 255, 14, 12, 84, 255, 8, 29, 200, 255, 0, 6, 28, 255, 2, 0, 0, 255, 5, 1, 4, 255, 3, 0, 7, 255, 1, 1, 2, 255, 0, 2, 1, 255, 1, 2, 2, 255, 1, 0, 1, 255, 2, 0, 1, 255, 0, 1, 1, 255, 0, 2, 1, 255, 3, 2, 0, 255, 13, 9, 4, 255, 18, 16, 8, 255, 24, 20, 10, 255, 39, 31, 26, 255, 34, 35, 48, 255, 39, 43, 47, 255, 36, 36, 26, 255, 24, 25, 13, 255, 24, 25, 25, 255, 27, 37, 41, 255, 33, 45, 48, 255, 38, 49, 42, 255, 37, 46, 29, 255, 37, 39, 25, 255, 35, 32, 16, 255, 29, 26, 9, 255, 26, 22, 10, 255, 22, 18, 7, 255, 17, 13, 3, 255, 24, 20, 7, 255, 21, 19, 4, 255, 23, 20, 4, 255, 23, 20, 5, 255, 25, 22, 3, 255, 32, 26, 6, 255, 31, 24, 4, 255, 33, 28, 6, 255, 34, 36, 9, 255, 37, 41, 15, 255, 44, 50, 18, 255, 49, 57, 11, 255, 55, 64, 12, 255, 61, 70, 16, 255, 69, 79, 15, 255, 65, 76, 21, 255, 60, 77, 18, 255, 67, 84, 18, 255, 72, 84, 16, 255, 73, 83, 12, 255, 69, 81, 11, 255, 69, 78, 8, 255, 64, 74, 4, 255, 64, 74, 4, 255, 70, 74, 9, 255, 70, 71, 6, 255, 63, 65, 14, 255, 67, 68, 17, 255, 70, 66, 4, 255, 77, 68, 4, 255, 73, 69, 10, 255, 69, 63, 7, 255, 71, 61, 6, 255, 70, 63, 9, 255, 70, 64, 2, 255, 73, 62, 6, 255, 85, 56, 9, 255, 65, 54, 2, 255, 88, 61, 7, 255, 109, 66, 9, 255, 69, 42, 4, 255, 73, 50, 4, 255, 82, 47, 7, 255, 89, 52, 1, 255, 77, 52, 3, 255, 73, 46, 2, 255, 93, 51, 2, 255, 95, 55, 2, 255, 91, 51, 5, 255, 89, 48, 4, 255, 91, 49, 6, 255, 78, 50, 1, 255, 86, 52, 2, 255, 101, 53, 4, 255, 89, 46, 7, 255, 110, 48, 2, 255, 120, 50, 0, 255, 118, 51, 3, 255, 108, 53, 4, 255, 97, 55, 8, 255, 91, 51, 3, 255, 95, 53, 2, 255, 85, 53, 3, 255, 96, 53, 8, 255, 105, 56, 7, 255, 111, 61, 2, 255, 124, 63, 3, 255, 102, 62, 5, 255, 100, 62, 1, 255, 135, 60, 4, 255, 129, 60, 6, 255, 107, 63, 2, 255, 103, 57, 3, 255, 108, 57, 6, 255, 127, 63, 10, 255, 126, 60, 4, 255, 115, 64, 7, 255, 108, 61, 9, 255, 116, 58, 5, 255, 124, 59, 7, 255, 125, 64, 7, 255, 119, 57, 19, 255, 121, 63, 10, 255, 129, 65, 15, 255, 133, 66, 4, 255, 138, 64, 5, 255, 139, 63, 16, 255, 130, 61, 13, 255, 131, 70, 11, 255, 136, 75, 8, 255, 138, 72, 9, 255, 144, 71, 12, 255, 140, 74, 11, 255, 138, 72, 7, 255, 156, 77, 8, 255, 166, 82, 11, 255, 174, 93, 15, 255, 182, 96, 4, 255, 192, 94, 4, 255, 190, 92, 8, 255, 188, 96, 2, 255, 184, 96, 4, 255, 183, 89, 1, 255, 182, 93, 5, 255, 179, 90, 12, 255, 182, 91, 13, 255, 190, 95, 11, 255, 190, 96, 11, 255, 192, 103, 11, 255, 195, 100, 9, 255, 194, 101, 5, 255, 189, 97, 4, 255, 193, 98, 6, 255, 191, 101, 10, 255, 195, 100, 2, 255, 191, 100, 5, 255, 186, 95, 12, 255, 186, 91, 5, 255, 185, 92, 5, 255, 193, 102, 7, 255, 201, 109, 10, 255, 196, 103, 6, 255, 194, 99, 3, 255, 202, 103, 6, 255, 195, 104, 4, 255, 193, 103, 8, 255, 185, 89, 3, 255, 190, 92, 4, 255, 188, 87, 7, 255, 182, 81, 5, 255, 190, 91, 3, 255, 196, 100, 2, 255, 201, 105, 6, 255, 194, 98, 6, 255, 190, 95, 4, 255, 190, 97, 6, 255, 173, 80, 3, 255, 178, 84, 7, 255, 184, 89, 3, 255, 191, 100, 3, 255, 197, 106, 10, 255, 199, 105, 3, 255, 197, 108, 5, 255, 194, 111, 1, 255, 195, 109, 6, 255, 195, 108, 12, 255, 194, 106, 6, 255, 198, 107, 2, 255, 198, 113, 5, 255, 194, 107, 10, 255, 198, 108, 2, 255, 200, 113, 5, 255, 198, 110, 6, 255, 198, 106, 5, 255, 198, 110, 0, 255, 202, 112, 5, 255, 201, 111, 7, 255, 201, 116, 2, 255, 202, 122, 2, 255, 203, 120, 5, 255, 207, 119, 7, 255, 210, 122, 9, 255, 203, 119, 2, 255, 206, 124, 0, 255, 209, 124, 7, 255, 211, 125, 12, 255, 210, 124, 13, 255, 209, 123, 10, 255, 209, 126, 8, 255, 207, 129, 6, 255, 212, 136, 9, 255, 212, 139, 5, 255, 216, 143, 0, 255, 216, 143, 3, 255, 223, 147, 15, 255, 215, 140, 3, 255, 216, 137, 5, 255, 217, 137, 11, 255, 218, 138, 5, 255, 209, 129, 7, 255, 209, 133, 1, 255, 204, 128, 2, 255, 194, 115, 2, 255, 190, 113, 2, 255, 190, 113, 7, 255, 193, 115, 11, 255, 186, 105, 4, 255, 177, 95, 7, 255, 166, 89, 6, 255, 177, 103, 11, 255, 181, 107, 7, 255, 180, 104, 10, 255, 185, 110, 8, 255, 190, 115, 7, 255, 184, 106, 11, 255, 190, 114, 15, 255, 187, 118, 5, 255, 179, 113, 4, 255, 185, 118, 12, 255, 189, 121, 11, 255, 190, 120, 2, 255, 198, 123, 13, 255, 193, 113, 5, 255, 191, 104, 5, 255, 189, 106, 3, 255, 191, 116, 6, 255, 179, 108, 2, 255, 180, 110, 9, 255, 182, 114, 8, 255, 181, 125, 13, 255, 194, 139, 11, 255, 199, 137, 4, 255, 200, 149, 6, 255, 197, 139, 9, 255, 195, 149, 6, 255, 203, 153, 5, 255, 185, 128, 6, 255, 149, 89, 10, 255, 143, 82, 13, 255, 162, 100, 6, 255, 159, 93, 0, 255, 162, 92, 5, 255, 166, 90, 6, 255, 172, 96, 4, 255, 160, 87, 5, 255, 136, 70, 3, 255, 138, 74, 5, 255, 161, 81, 5, 255, 177, 94, 6, 255, 173, 96, 2, 255, 173, 112, 5, 255, 179, 125, 12, 255, 176, 115, 15, 255, 169, 100, 13, 255, 153, 84, 8, 255, 156, 86, 9, 255, 174, 100, 14, 255, 183, 110, 6, 255, 192, 126, 5, 255, 175, 102, 12, 255, 175, 95, 10, 255, 190, 111, 5, 255, 186, 108, 1, 255, 183, 107, 4, 255, 177, 102, 3, 255, 174, 97, 5, 255, 176, 102, 4, 255, 173, 103, 4, 255, 164, 86, 8, 255, 131, 64, 10, 255, 153, 91, 11, 255, 184, 117, 3, 255, 187, 124, 11, 255, 189, 128, 19, 255, 188, 124, 11, 255, 199, 130, 14, 255, 198, 135, 12, 255, 181, 113, 9, 255, 163, 94, 14, 255, 156, 83, 1, 255, 163, 90, 10, 255, 162, 88, 14, 255, 163, 82, 9, 255, 169, 83, 5, 255, 159, 75, 3, 255, 156, 69, 6, 255, 178, 98, 7, 255, 195, 122, 8, 255, 199, 120, 8, 255, 197, 111, 7, 255, 194, 114, 9, 255, 189, 111, 5, 255, 194, 105, 13, 255, 186, 93, 9, 255, 158, 73, 2, 255, 153, 77, 11, 255, 149, 81, 5, 255, 137, 71, 10, 255, 127, 59, 10, 255, 123, 48, 9, 255, 114, 47, 1, 255, 114, 55, 5, 255, 123, 61, 6, 255, 119, 59, 6, 255, 103, 43, 4, 255, 95, 32, 5, 255, 85, 29, 4, 255, 72, 27, 2, 255, 86, 32, 2, 255, 89, 32, 8, 255, 64, 15, 0, 255, 79, 33, 3, 255, 92, 48, 6, 255, 94, 47, 1, 255, 98, 46, 1, 255, 101, 47, 3, 255, 103, 50, 2, 255, 98, 45, 2, 255, 98, 44, 2, 255, 101, 48, 5, 255, 103, 50, 6, 255, 103, 51, 5, 255, 100, 49, 1, 255, 100, 49, 3, 255, 102, 50, 4, 255, 99, 44, 4, 255, 95, 39, 5, 255, 100, 40, 4, 255, 107, 47, 5, 255, 102, 41, 1, 255, 93, 37, 0, 255, 91, 39, 3, 255, 91, 39, 4, 255, 84, 33, 0, 255, 78, 32, 0, 255, 86, 37, 2, 255, 88, 33, 5, 255, 92, 30, 5, 255, 94, 32, 3, 255, 97, 31, 2, 255, 100, 30, 0, 255, 96, 30, 0, 255, 98, 27, 2, 255, 99, 30, 4, 255, 109, 37, 3, 255, 118, 37, 3, 255, 1, 0, 18, 255, 2, 1, 18, 255, 2, 1, 17, 255, 2, 1, 15, 255, 2, 1, 15, 255, 1, 0, 14, 255, 2, 1, 17, 255, 1, 1, 9, 255, 1, 0, 7, 255, 1, 2, 10, 255, 2, 5, 17, 255, 3, 8, 31, 255, 3, 11, 34, 255, 2, 8, 23, 255, 0, 0, 8, 255, 12, 30, 39, 255, 37, 86, 119, 255, 11, 29, 35, 255, 2, 0, 0, 255, 1, 0, 2, 255, 17, 23, 46, 255, 47, 65, 89, 255, 41, 74, 111, 255, 12, 34, 47, 255, 41, 64, 103, 255, 32, 86, 122, 255, 0, 10, 7, 255, 17, 19, 38, 255, 25, 57, 91, 255, 3, 10, 13, 255, 1, 1, 4, 255, 1, 1, 4, 255, 2, 0, 2, 255, 3, 2, 1, 255, 0, 2, 1, 255, 4, 1, 2, 255, 6, 0, 5, 255, 1, 78, 172, 255, 13, 114, 193, 255, 25, 2, 6, 255, 14, 5, 22, 255, 14, 23, 202, 255, 2, 16, 85, 255, 7, 1, 0, 255, 7, 1, 4, 255, 4, 3, 1, 255, 0, 0, 2, 255, 2, 0, 0, 255, 3, 0, 0, 255, 2, 1, 4, 255, 3, 1, 3, 255, 3, 1, 1, 255, 2, 2, 2, 255, 2, 2, 2, 255, 1, 0, 0, 255, 6, 2, 0, 255, 17, 14, 7, 255, 24, 23, 14, 255, 32, 28, 24, 255, 39, 31, 33, 255, 44, 41, 41, 255, 32, 37, 36, 255, 17, 21, 15, 255, 21, 21, 10, 255, 28, 33, 36, 255, 33, 46, 48, 255, 37, 51, 45, 255, 42, 49, 38, 255, 42, 42, 31, 255, 36, 38, 19, 255, 31, 31, 13, 255, 28, 25, 14, 255, 18, 16, 2, 255, 23, 20, 5, 255, 22, 19, 4, 255, 25, 22, 7, 255, 24, 20, 5, 255, 24, 21, 2, 255, 27, 24, 3, 255, 36, 31, 7, 255, 37, 29, 6, 255, 37, 33, 6, 255, 37, 40, 8, 255, 42, 48, 8, 255, 47, 52, 13, 255, 53, 61, 13, 255, 57, 67, 15, 255, 60, 73, 14, 255, 60, 74, 14, 255, 62, 77, 14, 255, 69, 80, 20, 255, 65, 79, 14, 255, 66, 86, 13, 255, 65, 79, 15, 255, 67, 77, 8, 255, 64, 74, 7, 255, 65, 77, 7, 255, 63, 75, 5, 255, 68, 70, 14, 255, 68, 65, 11, 255, 62, 67, 3, 255, 66, 67, 4, 255, 77, 66, 5, 255, 74, 64, 5, 255, 70, 62, 4, 255, 72, 62, 7, 255, 74, 61, 7, 255, 79, 63, 4, 255, 79, 63, 3, 255, 77, 55, 6, 255, 72, 54, 3, 255, 78, 59, 7, 255, 122, 70, 13, 255, 80, 44, 2, 255, 69, 50, 6, 255, 87, 54, 4, 255, 93, 54, 3, 255, 80, 48, 1, 255, 79, 51, 5, 255, 85, 50, 5, 255, 96, 57, 3, 255, 99, 57, 8, 255, 96, 53, 9, 255, 88, 51, 4, 255, 109, 51, 9, 255, 99, 47, 2, 255, 103, 56, 8, 255, 111, 51, 7, 255, 88, 47, 3, 255, 91, 54, 6, 255, 97, 48, 6, 255, 98, 50, 5, 255, 100, 55, 1, 255, 103, 53, 5, 255, 106, 54, 8, 255, 104, 53, 9, 255, 105, 50, 11, 255, 111, 54, 5, 255, 120, 63, 5, 255, 120, 66, 5, 255, 125, 61, 6, 255, 115, 55, 7, 255, 115, 60, 4, 255, 120, 61, 3, 255, 114, 56, 11, 255, 107, 59, 11, 255, 101, 57, 4, 255, 110, 60, 3, 255, 111, 56, 3, 255, 109, 59, 17, 255, 103, 62, 7, 255, 114, 65, 5, 255, 134, 68, 12, 255, 145, 71, 16, 255, 159, 84, 9, 255, 163, 92, 13, 255, 170, 91, 7, 255, 177, 88, 14, 255, 184, 96, 6, 255, 176, 90, 20, 255, 184, 95, 13, 255, 182, 101, 3, 255, 180, 103, 7, 255, 182, 101, 11, 255, 194, 109, 5, 255, 189, 100, 15, 255, 179, 89, 8, 255, 162, 77, 3, 255, 177, 95, 8, 255, 192, 102, 1, 255, 191, 99, 5, 255, 191, 100, 10, 255, 190, 96, 7, 255, 188, 93, 7, 255, 188, 99, 11, 255, 193, 101, 13, 255, 194, 101, 5, 255, 198, 100, 3, 255, 193, 100, 13, 255, 198, 103, 12, 255, 195, 95, 5, 255, 190, 93, 6, 255, 196, 102, 7, 255, 193, 95, 4, 255, 195, 98, 2, 255, 199, 103, 4, 255, 196, 102, 6, 255, 190, 101, 4, 255, 188, 95, 2, 255, 191, 97, 13, 255, 196, 102, 10, 255, 196, 99, 2, 255, 189, 94, 3, 255, 192, 96, 8, 255, 196, 100, 2, 255, 197, 99, 4, 255, 199, 101, 8, 255, 198, 97, 14, 255, 188, 92, 4, 255, 191, 97, 7, 255, 187, 91, 5, 255, 184, 89, 7, 255, 177, 81, 2, 255, 186, 91, 4, 255, 197, 103, 6, 255, 197, 100, 5, 255, 191, 93, 7, 255, 179, 82, 5, 255, 190, 95, 8, 255, 193, 100, 5, 255, 177, 82, 10, 255, 179, 87, 9, 255, 185, 90, 11, 255, 192, 96, 6, 255, 191, 95, 7, 255, 195, 102, 9, 255, 195, 105, 10, 255, 200, 104, 0, 255, 192, 100, 2, 255, 195, 104, 4, 255, 198, 104, 3, 255, 198, 107, 7, 255, 197, 105, 3, 255, 193, 104, 5, 255, 200, 105, 8, 255, 195, 110, 1, 255, 198, 108, 8, 255, 202, 105, 11, 255, 196, 108, 0, 255, 199, 111, 5, 255, 201, 110, 10, 255, 197, 113, 2, 255, 200, 117, 2, 255, 202, 117, 5, 255, 205, 115, 2, 255, 206, 120, 1, 255, 204, 120, 4, 255, 206, 120, 6, 255, 208, 124, 9, 255, 206, 125, 5, 255, 205, 125, 2, 255, 205, 132, 2, 255, 206, 136, 1, 255, 211, 131, 2, 255, 211, 128, 10, 255, 212, 131, 9, 255, 214, 138, 8, 255, 212, 139, 5, 255, 212, 139, 4, 255, 208, 133, 4, 255, 211, 139, 4, 255, 211, 139, 2, 255, 209, 134, 5, 255, 220, 149, 3, 255, 224, 157, 1, 255, 220, 155, 0, 255, 217, 151, 11, 255, 212, 147, 12, 255, 205, 142, 6, 255, 201, 134, 4, 255, 192, 121, 8, 255, 181, 111, 3, 255, 180, 116, 1, 255, 180, 120, 6, 255, 188, 128, 10, 255, 191, 130, 10, 255, 182, 118, 4, 255, 181, 115, 4, 255, 178, 111, 10, 255, 177, 115, 12, 255, 172, 111, 6, 255, 168, 105, 12, 255, 181, 117, 14, 255, 182, 115, 4, 255, 181, 108, 10, 255, 184, 110, 12, 255, 184, 111, 13, 255, 187, 116, 11, 255, 184, 111, 5, 255, 182, 115, 8, 255, 184, 132, 9, 255, 200, 158, 5, 255, 209, 160, 10, 255, 203, 145, 9, 255, 201, 142, 9, 255, 199, 137, 12, 255, 203, 140, 10, 255, 214, 154, 11, 255, 222, 165, 9, 255, 210, 152, 5, 255, 199, 142, 9, 255, 169, 109, 5, 255, 141, 73, 5, 255, 151, 80, 3, 255, 150, 82, 3, 255, 159, 91, 5, 255, 168, 98, 8, 255, 170, 98, 7, 255, 170, 105, 4, 255, 169, 110, 7, 255, 163, 102, 10, 255, 170, 94, 2, 255, 172, 94, 5, 255, 181, 111, 11, 255, 180, 122, 15, 255, 169, 111, 24, 255, 159, 94, 22, 255, 153, 90, 21, 255, 140, 79, 2, 255, 148, 82, 7, 255, 169, 96, 12, 255, 188, 109, 15, 255, 190, 114, 13, 255, 179, 106, 7, 255, 174, 96, 12, 255, 182, 103, 7, 255, 180, 102, 4, 255, 175, 101, 1, 255, 171, 97, 1, 255, 175, 99, 9, 255, 182, 102, 10, 255, 168, 88, 3, 255, 156, 91, 4, 255, 153, 97, 12, 255, 167, 99, 7, 255, 179, 111, 3, 255, 190, 135, 6, 255, 190, 133, 9, 255, 191, 122, 17, 255, 184, 113, 18, 255, 182, 108, 10, 255, 184, 105, 3, 255, 171, 95, 6, 255, 169, 94, 8, 255, 175, 94, 14, 255, 164, 85, 9, 255, 157, 78, 4, 255, 164, 80, 4, 255, 158, 74, 1, 255, 168, 84, 2, 255, 193, 112, 9, 255, 198, 120, 9, 255, 195, 114, 11, 255, 195, 113, 6, 255, 195, 115, 3, 255, 193, 112, 4, 255, 196, 109, 5, 255, 185, 94, 2, 255, 156, 72, 2, 255, 141, 64, 3, 255, 132, 59, 5, 255, 130, 61, 4, 255, 132, 64, 3, 255, 136, 65, 8, 255, 119, 50, 1, 255, 105, 39, 4, 255, 110, 47, 4, 255, 105, 40, 5, 255, 97, 34, 5, 255, 88, 32, 5, 255, 82, 32, 6, 255, 87, 31, 8, 255, 84, 23, 7, 255, 73, 21, 4, 255, 69, 27, 3, 255, 90, 46, 7, 255, 97, 50, 4, 255, 97, 45, 6, 255, 101, 49, 9, 255, 101, 52, 3, 255, 97, 45, 6, 255, 95, 44, 3, 255, 100, 49, 5, 255, 102, 51, 5, 255, 100, 48, 1, 255, 99, 46, 3, 255, 98, 46, 5, 255, 98, 47, 3, 255, 96, 48, 2, 255, 98, 42, 7, 255, 94, 36, 1, 255, 98, 39, 3, 255, 94, 35, 4, 255, 92, 36, 2, 255, 94, 36, 4, 255, 87, 33, 3, 255, 85, 30, 3, 255, 86, 33, 4, 255, 86, 37, 5, 255, 89, 34, 1, 255, 88, 27, 0, 255, 83, 26, 1, 255, 84, 21, 3, 255, 86, 20, 5, 255, 91, 24, 5, 255, 100, 27, 0, 255, 102, 31, 1, 255, 109, 34, 6, 255, 113, 32, 1, 255, 117, 38, 2, 255, 2, 1, 18, 255, 2, 1, 22, 255, 2, 1, 20, 255, 2, 1, 13, 255, 2, 2, 14, 255, 2, 2, 15, 255, 1, 1, 18, 255, 3, 0, 13, 255, 4, 0, 9, 255, 2, 2, 22, 255, 5, 15, 34, 255, 2, 13, 27, 255, 4, 12, 35, 255, 2, 8, 28, 255, 6, 7, 26, 255, 1, 8, 15, 255, 2, 38, 56, 255, 16, 52, 59, 255, 5, 8, 7, 255, 0, 1, 0, 255, 0, 0, 0, 255, 6, 2, 8, 255, 47, 65, 104, 255, 35, 73, 103, 255, 21, 30, 58, 255, 44, 89, 130, 255, 6, 26, 25, 255, 1, 0, 0, 255, 4, 8, 19, 255, 4, 6, 12, 255, 4, 1, 0, 255, 1, 2, 0, 255, 0, 2, 1, 255, 1, 0, 1, 255, 2, 2, 6, 255, 2, 0, 0, 255, 1, 34, 100, 255, 4, 134, 244, 255, 14, 27, 54, 255, 19, 2, 0, 255, 4, 21, 134, 255, 5, 20, 161, 255, 5, 0, 0, 255, 3, 2, 3, 255, 1, 0, 2, 255, 3, 3, 4, 255, 0, 2, 1, 255, 2, 1, 0, 255, 0, 2, 1, 255, 0, 2, 1, 255, 3, 1, 1, 255, 2, 2, 2, 255, 2, 1, 1, 255, 6, 1, 2, 255, 3, 0, 1, 255, 1, 0, 0, 255, 12, 8, 4, 255, 26, 19, 13, 255, 29, 23, 17, 255, 32, 26, 23, 255, 40, 37, 33, 255, 38, 38, 37, 255, 27, 28, 25, 255, 20, 22, 8, 255, 27, 32, 30, 255, 34, 49, 50, 255, 37, 52, 52, 255, 45, 51, 47, 255, 37, 38, 31, 255, 23, 32, 12, 255, 32, 35, 18, 255, 31, 28, 14, 255, 22, 21, 8, 255, 20, 19, 5, 255, 24, 22, 5, 255, 27, 26, 8, 255, 24, 23, 8, 255, 27, 24, 7, 255, 26, 26, 2, 255, 29, 28, 1, 255, 39, 35, 6, 255, 39, 35, 3, 255, 46, 48, 15, 255, 45, 56, 15, 255, 44, 58, 11, 255, 55, 66, 10, 255, 58, 67, 15, 255, 61, 70, 14, 255, 62, 74, 15, 255, 60, 79, 17, 255, 65, 80, 14, 255, 68, 82, 6, 255, 68, 83, 11, 255, 70, 77, 10, 255, 71, 73, 4, 255, 67, 75, 4, 255, 63, 71, 8, 255, 63, 69, 11, 255, 66, 64, 8, 255, 70, 65, 12, 255, 65, 66, 9, 255, 66, 59, 11, 255, 74, 62, 15, 255, 73, 66, 4, 255, 75, 67, 1, 255, 75, 63, 4, 255, 76, 63, 3, 255, 79, 64, 2, 255, 79, 61, 15, 255, 77, 49, 7, 255, 76, 61, 7, 255, 128, 69, 7, 255, 90, 53, 6, 255, 66, 50, 4, 255, 82, 54, 3, 255, 100, 59, 1, 255, 106, 58, 3, 255, 84, 55, 3, 255, 88, 48, 1, 255, 111, 61, 6, 255, 95, 54, 2, 255, 98, 56, 2, 255, 91, 54, 3, 255, 82, 56, 1, 255, 108, 56, 10, 255, 95, 46, 2, 255, 91, 50, 6, 255, 90, 45, 4, 255, 93, 46, 5, 255, 109, 52, 8, 255, 99, 50, 3, 255, 93, 53, 3, 255, 101, 57, 5, 255, 109, 54, 1, 255, 102, 54, 3, 255, 88, 51, 1, 255, 114, 59, 8, 255, 129, 64, 5, 255, 127, 60, 1, 255, 115, 59, 4, 255, 115, 63, 18, 255, 130, 62, 1, 255, 128, 64, 4, 255, 104, 59, 1, 255, 106, 59, 6, 255, 114, 58, 6, 255, 107, 60, 8, 255, 113, 66, 10, 255, 125, 68, 7, 255, 140, 78, 10, 255, 161, 95, 6, 255, 176, 97, 8, 255, 182, 96, 7, 255, 189, 99, 12, 255, 190, 100, 5, 255, 194, 98, 7, 255, 195, 97, 4, 255, 193, 98, 7, 255, 189, 101, 0, 255, 190, 102, 12, 255, 188, 98, 6, 255, 188, 99, 8, 255, 185, 99, 8, 255, 194, 103, 14, 255, 197, 105, 5, 255, 193, 97, 7, 255, 180, 80, 14, 255, 186, 93, 11, 255, 189, 99, 4, 255, 194, 98, 11, 255, 196, 100, 9, 255, 195, 101, 9, 255, 195, 98, 5, 255, 194, 96, 7, 255, 195, 98, 5, 255, 192, 96, 5, 255, 194, 95, 8, 255, 190, 91, 1, 255, 192, 89, 0, 255, 189, 88, 8, 255, 188, 87, 9, 255, 187, 88, 5, 255, 184, 95, 0, 255, 187, 90, 8, 255, 192, 92, 11, 255, 190, 89, 5, 255, 188, 86, 12, 255, 186, 89, 16, 255, 183, 82, 8, 255, 184, 85, 13, 255, 181, 91, 4, 255, 193, 97, 12, 255, 193, 96, 8, 255, 192, 99, 8, 255, 193, 98, 5, 255, 196, 101, 3, 255, 190, 96, 4, 255, 173, 77, 3, 255, 178, 77, 1, 255, 184, 86, 1, 255, 184, 87, 5, 255, 177, 80, 4, 255, 174, 77, 8, 255, 186, 90, 9, 255, 194, 99, 6, 255, 200, 102, 8, 255, 191, 96, 6, 255, 184, 90, 8, 255, 197, 104, 13, 255, 194, 102, 0, 255, 195, 102, 6, 255, 194, 102, 5, 255, 196, 103, 2, 255, 197, 100, 7, 255, 184, 84, 5, 255, 191, 98, 8, 255, 198, 108, 9, 255, 198, 101, 2, 255, 197, 101, 8, 255, 195, 101, 7, 255, 194, 103, 5, 255, 197, 102, 8, 255, 195, 104, 5, 255, 196, 106, 8, 255, 197, 106, 8, 255, 192, 103, 8, 255, 193, 107, 1, 255, 197, 107, 6, 255, 196, 108, 3, 255, 197, 111, 2, 255, 196, 107, 10, 255, 196, 107, 3, 255, 198, 110, 6, 255, 199, 109, 13, 255, 200, 111, 8, 255, 199, 113, 2, 255, 199, 113, 11, 255, 199, 112, 15, 255, 202, 116, 5, 255, 207, 121, 4, 255, 207, 122, 5, 255, 205, 122, 6, 255, 203, 122, 4, 255, 202, 121, 6, 255, 208, 129, 2, 255, 209, 134, 0, 255, 208, 134, 2, 255, 208, 132, 5, 255, 209, 134, 11, 255, 213, 140, 6, 255, 215, 143, 4, 255, 213, 140, 3, 255, 212, 141, 7, 255, 221, 152, 4, 255, 220, 151, 3, 255, 223, 154, 7, 255, 223, 154, 2, 255, 224, 159, 0, 255, 224, 161, 0, 255, 223, 162, 3, 255, 221, 161, 4, 255, 216, 161, 3, 255, 214, 156, 4, 255, 213, 151, 11, 255, 213, 155, 8, 255, 211, 156, 0, 255, 212, 157, 6, 255, 212, 156, 3, 255, 212, 157, 0, 255, 217, 163, 3, 255, 215, 159, 11, 255, 210, 155, 8, 255, 200, 147, 4, 255, 199, 141, 11, 255, 200, 142, 8, 255, 199, 141, 13, 255, 202, 142, 17, 255, 200, 140, 20, 255, 198, 146, 13, 255, 212, 162, 9, 255, 216, 164, 9, 255, 208, 145, 4, 255, 203, 126, 0, 255, 201, 136, 5, 255, 203, 152, 3, 255, 208, 146, 10, 255, 212, 154, 9, 255, 217, 166, 1, 255, 232, 177, 1, 255, 215, 152, 9, 255, 190, 127, 11, 255, 177, 121, 6, 255, 157, 101, 3, 255, 164, 100, 6, 255, 187, 112, 9, 255, 193, 120, 5, 255, 187, 122, 1, 255, 189, 125, 12, 255, 189, 124, 8, 255, 189, 119, 2, 255, 188, 114, 12, 255, 183, 113, 2, 255, 181, 110, 4, 255, 182, 112, 7, 255, 179, 113, 6, 255, 180, 120, 23, 255, 175, 121, 26, 255, 154, 94, 11, 255, 137, 77, 8, 255, 143, 84, 7, 255, 171, 102, 10, 255, 183, 107, 3, 255, 183, 105, 13, 255, 178, 105, 12, 255, 173, 102, 0, 255, 175, 101, 1, 255, 172, 94, 10, 255, 159, 82, 4, 255, 165, 89, 5, 255, 164, 89, 3, 255, 165, 86, 2, 255, 150, 83, 4, 255, 170, 105, 5, 255, 192, 123, 6, 255, 184, 127, 2, 255, 187, 131, 14, 255, 184, 116, 10, 255, 178, 108, 7, 255, 171, 97, 7, 255, 170, 98, 20, 255, 175, 93, 8, 255, 168, 82, 11, 255, 162, 91, 17, 255, 166, 94, 13, 255, 163, 86, 9, 255, 161, 81, 5, 255, 158, 78, 4, 255, 155, 73, 4, 255, 175, 88, 5, 255, 191, 110, 3, 255, 199, 118, 11, 255, 196, 113, 5, 255, 193, 115, 1, 255, 194, 115, 7, 255, 191, 108, 9, 255, 191, 106, 6, 255, 193, 108, 6, 255, 179, 87, 2, 255, 153, 70, 7, 255, 139, 64, 5, 255, 137, 65, 1, 255, 133, 63, 0, 255, 120, 52, 4, 255, 114, 47, 13, 255, 102, 35, 3, 255, 92, 25, 0, 255, 95, 34, 5, 255, 94, 32, 5, 255, 89, 29, 2, 255, 85, 34, 2, 255, 97, 42, 3, 255, 104, 39, 2, 255, 89, 32, 4, 255, 76, 30, 5, 255, 87, 42, 5, 255, 104, 60, 3, 255, 106, 56, 2, 255, 111, 58, 5, 255, 109, 61, 2, 255, 101, 57, 2, 255, 101, 52, 3, 255, 102, 53, 6, 255, 96, 48, 2, 255, 96, 49, 2, 255, 96, 47, 1, 255, 97, 43, 2, 255, 101, 43, 6, 255, 97, 40, 6, 255, 95, 40, 4, 255, 93, 41, 1, 255, 92, 39, 2, 255, 93, 38, 2, 255, 94, 39, 2, 255, 95, 38, 2, 255, 94, 35, 4, 255, 88, 34, 3, 255, 92, 35, 5, 255, 87, 29, 3, 255, 79, 23, 2, 255, 82, 19, 2, 255, 89, 19, 3, 255, 90, 26, 4, 255, 94, 29, 1, 255, 95, 31, 1, 255, 95, 33, 2, 255, 100, 32, 1, 255, 100, 35, 2, 255, 111, 34, 3, 255, 113, 31, 1, 255, 115, 38, 4, 255, 4, 1, 24, 255, 0, 1, 25, 255, 1, 2, 18, 255, 3, 0, 10, 255, 1, 1, 17, 255, 1, 2, 21, 255, 0, 0, 15, 255, 2, 0, 10, 255, 3, 0, 12, 255, 3, 6, 29, 255, 4, 11, 30, 255, 1, 7, 17, 255, 2, 11, 37, 255, 2, 10, 35, 255, 1, 10, 30, 255, 2, 11, 23, 255, 0, 6, 15, 255, 4, 10, 17, 255, 3, 8, 7, 255, 0, 0, 1, 255, 1, 0, 1, 255, 0, 0, 0, 255, 20, 20, 40, 255, 47, 82, 115, 255, 7, 22, 16, 255, 25, 53, 81, 255, 16, 34, 37, 255, 0, 0, 0, 255, 0, 2, 3, 255, 0, 0, 0, 255, 1, 0, 4, 255, 1, 2, 2, 255, 1, 1, 0, 255, 1, 0, 7, 255, 1, 1, 1, 255, 7, 3, 29, 255, 4, 110, 230, 255, 17, 73, 120, 255, 15, 0, 0, 255, 13, 11, 69, 255, 2, 28, 203, 255, 3, 6, 22, 255, 1, 1, 0, 255, 2, 1, 2, 255, 3, 1, 2, 255, 1, 1, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 0, 0, 0, 255, 1, 2, 0, 255, 1, 1, 1, 255, 5, 2, 3, 255, 6, 1, 2, 255, 6, 1, 1, 255, 8, 4, 1, 255, 17, 12, 7, 255, 18, 12, 3, 255, 20, 16, 4, 255, 30, 27, 18, 255, 38, 36, 33, 255, 33, 32, 29, 255, 27, 30, 23, 255, 30, 37, 33, 255, 32, 45, 40, 255, 35, 49, 50, 255, 43, 49, 45, 255, 40, 42, 31, 255, 31, 38, 31, 255, 38, 34, 21, 255, 39, 31, 9, 255, 25, 21, 12, 255, 22, 19, 6, 255, 27, 21, 0, 255, 27, 21, 7, 255, 26, 23, 11, 255, 27, 25, 6, 255, 31, 31, 3, 255, 28, 32, 6, 255, 36, 37, 6, 255, 45, 42, 10, 255, 43, 48, 13, 255, 56, 57, 12, 255, 52, 60, 13, 255, 55, 68, 12, 255, 56, 69, 12, 255, 61, 71, 10, 255, 63, 75, 7, 255, 65, 78, 16, 255, 70, 76, 11, 255, 77, 84, 3, 255, 71, 78, 7, 255, 67, 72, 6, 255, 68, 72, 4, 255, 65, 72, 7, 255, 67, 68, 8, 255, 70, 66, 5, 255, 78, 68, 5, 255, 78, 66, 4, 255, 68, 62, 3, 255, 69, 62, 7, 255, 72, 63, 7, 255, 79, 62, 7, 255, 79, 62, 6, 255, 77, 60, 4, 255, 74, 64, 5, 255, 75, 63, 2, 255, 93, 59, 5, 255, 88, 59, 11, 255, 136, 78, 8, 255, 113, 61, 2, 255, 62, 50, 9, 255, 76, 57, 3, 255, 85, 55, 3, 255, 90, 56, 5, 255, 90, 45, 4, 255, 81, 52, 4, 255, 96, 55, 2, 255, 104, 52, 2, 255, 91, 53, 8, 255, 94, 54, 2, 255, 108, 56, 4, 255, 100, 53, 3, 255, 92, 50, 2, 255, 85, 51, 2, 255, 86, 52, 4, 255, 84, 48, 3, 255, 96, 54, 2, 255, 101, 52, 5, 255, 103, 51, 6, 255, 103, 52, 1, 255, 110, 56, 5, 255, 111, 57, 1, 255, 103, 53, 5, 255, 106, 57, 8, 255, 113, 62, 4, 255, 119, 64, 9, 255, 118, 59, 6, 255, 113, 63, 5, 255, 101, 60, 6, 255, 108, 55, 5, 255, 116, 61, 1, 255, 118, 61, 7, 255, 132, 69, 11, 255, 146, 79, 6, 255, 163, 89, 13, 255, 179, 97, 16, 255, 190, 102, 18, 255, 195, 104, 10, 255, 195, 108, 9, 255, 192, 103, 7, 255, 191, 101, 3, 255, 189, 96, 4, 255, 183, 87, 6, 255, 181, 95, 8, 255, 193, 102, 1, 255, 194, 98, 10, 255, 191, 101, 7, 255, 193, 102, 6, 255, 189, 100, 9, 255, 186, 95, 1, 255, 192, 97, 11, 255, 193, 103, 7, 255, 193, 104, 9, 255, 196, 102, 9, 255, 192, 104, 6, 255, 197, 102, 8, 255, 190, 96, 1, 255, 190, 102, 6, 255, 197, 98, 10, 255, 188, 85, 2, 255, 185, 92, 12, 255, 186, 90, 11, 255, 185, 94, 7, 255, 189, 93, 3, 255, 192, 87, 7, 255, 190, 86, 5, 255, 184, 87, 4, 255, 178, 80, 8, 255, 183, 83, 7, 255, 187, 86, 4, 255, 183, 86, 5, 255, 183, 90, 5, 255, 188, 90, 10, 255, 182, 78, 6, 255, 177, 81, 10, 255, 169, 78, 13, 255, 171, 72, 8, 255, 172, 78, 6, 255, 176, 86, 8, 255, 185, 86, 5, 255, 186, 88, 10, 255, 189, 94, 12, 255, 190, 98, 3, 255, 194, 101, 11, 255, 189, 92, 1, 255, 181, 85, 2, 255, 187, 89, 6, 255, 180, 83, 3, 255, 179, 86, 3, 255, 180, 87, 4, 255, 177, 84, 5, 255, 185, 88, 6, 255, 200, 100, 2, 255, 196, 100, 1, 255, 194, 101, 6, 255, 189, 98, 1, 255, 188, 92, 2, 255, 199, 103, 7, 255, 198, 103, 4, 255, 200, 103, 6, 255, 196, 100, 2, 255, 184, 89, 9, 255, 183, 87, 19, 255, 192, 102, 4, 255, 194, 106, 4, 255, 194, 103, 1, 255, 196, 104, 6, 255, 192, 99, 6, 255, 193, 102, 4, 255, 193, 103, 6, 255, 193, 102, 4, 255, 196, 109, 4, 255, 193, 107, 3, 255, 190, 102, 4, 255, 193, 102, 5, 255, 196, 104, 8, 255, 196, 107, 8, 255, 198, 109, 5, 255, 197, 108, 11, 255, 195, 108, 3, 255, 200, 111, 7, 255, 200, 110, 11, 255, 200, 112, 6, 255, 200, 112, 4, 255, 202, 112, 6, 255, 200, 111, 6, 255, 200, 114, 8, 255, 202, 115, 9, 255, 202, 119, 3, 255, 201, 116, 4, 255, 201, 117, 8, 255, 205, 120, 7, 255, 208, 124, 7, 255, 208, 126, 6, 255, 206, 126, 7, 255, 208, 128, 8, 255, 208, 132, 7, 255, 209, 134, 2, 255, 209, 136, 5, 255, 211, 138, 5, 255, 214, 147, 3, 255, 213, 146, 2, 255, 215, 148, 1, 255, 218, 151, 2, 255, 220, 151, 2, 255, 216, 147, 2, 255, 217, 147, 3, 255, 221, 153, 1, 255, 227, 162, 1, 255, 228, 164, 2, 255, 224, 165, 3, 255, 222, 164, 2, 255, 222, 158, 1, 255, 214, 149, 1, 255, 215, 154, 4, 255, 221, 159, 1, 255, 225, 161, 1, 255, 230, 167, 4, 255, 225, 158, 0, 255, 212, 144, 1, 255, 204, 143, 4, 255, 208, 153, 4, 255, 214, 156, 4, 255, 215, 157, 6, 255, 215, 155, 6, 255, 212, 152, 7, 255, 214, 158, 6, 255, 215, 150, 4, 255, 209, 139, 7, 255, 207, 141, 5, 255, 204, 141, 4, 255, 210, 153, 4, 255, 218, 161, 6, 255, 223, 165, 6, 255, 222, 168, 3, 255, 224, 174, 2, 255, 219, 165, 8, 255, 203, 142, 10, 255, 195, 133, 1, 255, 186, 129, 1, 255, 200, 145, 10, 255, 197, 139, 7, 255, 190, 120, 9, 255, 173, 97, 6, 255, 176, 104, 2, 255, 189, 118, 1, 255, 185, 109, 4, 255, 177, 97, 3, 255, 181, 105, 4, 255, 173, 97, 7, 255, 170, 95, 2, 255, 179, 108, 0, 255, 190, 120, 3, 255, 193, 126, 9, 255, 178, 113, 15, 255, 160, 100, 22, 255, 142, 89, 12, 255, 150, 97, 11, 255, 165, 96, 10, 255, 176, 97, 7, 255, 170, 98, 12, 255, 161, 95, 9, 255, 158, 86, 1, 255, 157, 83, 2, 255, 163, 86, 7, 255, 161, 84, 2, 255, 163, 88, 2, 255, 166, 93, 5, 255, 159, 91, 3, 255, 142, 74, 4, 255, 143, 73, 1, 255, 173, 104, 9, 255, 196, 135, 1, 255, 195, 134, 6, 255, 176, 102, 5, 255, 168, 90, 7, 255, 168, 97, 12, 255, 174, 100, 15, 255, 170, 94, 6, 255, 161, 82, 10, 255, 165, 87, 10, 255, 163, 83, 10, 255, 159, 78, 8, 255, 161, 78, 10, 255, 167, 83, 3, 255, 174, 90, 8, 255, 193, 112, 6, 255, 202, 121, 2, 255, 197, 116, 7, 255, 193, 113, 8, 255, 191, 114, 3, 255, 192, 112, 3, 255, 192, 109, 7, 255, 189, 107, 7, 255, 188, 101, 5, 255, 170, 75, 3, 255, 147, 61, 7, 255, 139, 68, 5, 255, 137, 67, 4, 255, 135, 64, 4, 255, 128, 57, 5, 255, 122, 55, 3, 255, 111, 48, 5, 255, 104, 41, 7, 255, 95, 33, 6, 255, 92, 32, 5, 255, 90, 37, 4, 255, 89, 37, 1, 255, 102, 46, 8, 255, 101, 45, 3, 255, 96, 38, 4, 255, 88, 35, 3, 255, 91, 39, 1, 255, 109, 55, 3, 255, 117, 63, 8, 255, 118, 62, 5, 255, 120, 68, 3, 255, 111, 59, 6, 255, 115, 56, 5, 255, 111, 57, 3, 255, 107, 55, 3, 255, 106, 50, 4, 255, 108, 50, 3, 255, 110, 51, 4, 255, 106, 48, 5, 255, 105, 49, 8, 255, 99, 41, 4, 255, 93, 35, 7, 255, 96, 36, 5, 255, 100, 39, 1, 255, 100, 36, 1, 255, 100, 31, 7, 255, 96, 24, 2, 255, 88, 26, 5, 255, 88, 28, 4, 255, 85, 24, 2, 255, 85, 26, 7, 255, 93, 29, 3, 255, 102, 35, 1, 255, 109, 40, 2, 255, 112, 40, 4, 255, 111, 38, 4, 255, 107, 34, 0, 255, 111, 38, 2, 255, 110, 38, 3, 255, 110, 35, 3, 255, 109, 36, 2, 255, 109, 38, 3, 255, 1, 3, 19, 255, 1, 0, 17, 255, 1, 0, 21, 255, 1, 2, 23, 255, 0, 1, 20, 255, 1, 0, 16, 255, 3, 1, 13, 255, 3, 3, 18, 255, 1, 8, 30, 255, 1, 13, 36, 255, 2, 11, 31, 255, 4, 12, 26, 255, 2, 14, 36, 255, 0, 11, 40, 255, 0, 8, 28, 255, 2, 16, 35, 255, 0, 12, 18, 255, 1, 3, 0, 255, 1, 0, 1, 255, 1, 0, 1, 255, 1, 2, 1, 255, 0, 2, 1, 255, 0, 0, 0, 255, 28, 58, 93, 255, 11, 35, 36, 255, 17, 29, 51, 255, 16, 27, 37, 255, 0, 0, 0, 255, 0, 0, 7, 255, 1, 1, 0, 255, 0, 1, 4, 255, 3, 2, 5, 255, 6, 0, 2, 255, 2, 1, 4, 255, 1, 0, 0, 255, 3, 49, 181, 255, 6, 95, 182, 255, 15, 8, 0, 255, 20, 1, 18, 255, 8, 23, 194, 255, 0, 13, 66, 255, 1, 0, 0, 255, 2, 1, 5, 255, 0, 0, 0, 255, 2, 0, 1, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 1, 1, 255, 1, 1, 1, 255, 0, 0, 0, 255, 4, 1, 0, 255, 8, 2, 2, 255, 7, 2, 3, 255, 5, 1, 1, 255, 7, 4, 2, 255, 4, 3, 0, 255, 6, 3, 0, 255, 11, 7, 2, 255, 14, 11, 2, 255, 21, 19, 10, 255, 32, 31, 28, 255, 35, 37, 35, 255, 28, 32, 27, 255, 36, 42, 40, 255, 43, 50, 48, 255, 38, 48, 42, 255, 36, 45, 36, 255, 37, 41, 23, 255, 44, 38, 39, 255, 44, 34, 24, 255, 41, 33, 16, 255, 35, 27, 17, 255, 30, 21, 7, 255, 31, 20, 3, 255, 32, 22, 9, 255, 29, 25, 8, 255, 26, 26, 4, 255, 32, 29, 4, 255, 35, 33, 5, 255, 43, 39, 14, 255, 47, 45, 8, 255, 45, 56, 2, 255, 50, 56, 7, 255, 60, 61, 12, 255, 59, 68, 13, 255, 63, 70, 12, 255, 66, 74, 14, 255, 60, 74, 14, 255, 69, 78, 13, 255, 70, 73, 11, 255, 72, 73, 18, 255, 72, 73, 8, 255, 63, 71, 8, 255, 61, 65, 11, 255, 71, 66, 2, 255, 70, 71, 4, 255, 75, 71, 6, 255, 87, 69, 7, 255, 87, 65, 6, 255, 76, 61, 3, 255, 76, 64, 8, 255, 82, 63, 9, 255, 80, 62, 4, 255, 74, 62, 2, 255, 77, 60, 6, 255, 82, 59, 9, 255, 90, 62, 9, 255, 100, 59, 7, 255, 106, 69, 12, 255, 138, 66, 14, 255, 81, 48, 2, 255, 78, 53, 5, 255, 92, 55, 7, 255, 91, 53, 4, 255, 91, 55, 2, 255, 96, 57, 2, 255, 94, 47, 10, 255, 99, 57, 4, 255, 96, 53, 2, 255, 109, 56, 6, 255, 117, 63, 2, 255, 113, 60, 2, 255, 96, 52, 1, 255, 88, 50, 4, 255, 84, 54, 7, 255, 87, 52, 5, 255, 93, 51, 4, 255, 90, 49, 8, 255, 95, 53, 4, 255, 106, 55, 10, 255, 104, 54, 4, 255, 99, 57, 2, 255, 111, 57, 0, 255, 125, 57, 1, 255, 128, 65, 10, 255, 108, 58, 12, 255, 102, 61, 5, 255, 104, 62, 0, 255, 107, 57, 11, 255, 117, 62, 12, 255, 136, 81, 4, 255, 150, 84, 18, 255, 174, 90, 19, 255, 182, 96, 5, 255, 191, 100, 18, 255, 192, 100, 15, 255, 195, 102, 2, 255, 195, 101, 11, 255, 190, 98, 12, 255, 194, 101, 13, 255, 192, 97, 9, 255, 191, 101, 1, 255, 184, 89, 5, 255, 164, 70, 7, 255, 170, 82, 7, 255, 183, 92, 1, 255, 184, 85, 11, 255, 186, 88, 13, 255, 188, 92, 3, 255, 194, 103, 14, 255, 197, 111, 11, 255, 193, 103, 9, 255, 194, 100, 3, 255, 192, 99, 1, 255, 188, 101, 6, 255, 189, 104, 6, 255, 194, 101, 8, 255, 195, 97, 3, 255, 196, 101, 4, 255, 189, 99, 6, 255, 186, 96, 9, 255, 186, 97, 5, 255, 183, 94, 4, 255, 186, 91, 8, 255, 186, 94, 12, 255, 186, 93, 2, 255, 187, 89, 6, 255, 176, 84, 11, 255, 178, 88, 6, 255, 178, 87, 2, 255, 177, 84, 4, 255, 182, 83, 11, 255, 177, 77, 5, 255, 166, 74, 1, 255, 162, 75, 2, 255, 170, 82, 7, 255, 165, 86, 2, 255, 178, 90, 1, 255, 181, 96, 7, 255, 182, 98, 7, 255, 188, 96, 3, 255, 188, 93, 12, 255, 191, 97, 6, 255, 189, 97, 3, 255, 184, 87, 5, 255, 183, 84, 8, 255, 180, 83, 14, 255, 181, 92, 8, 255, 178, 82, 12, 255, 179, 78, 12, 255, 180, 86, 8, 255, 189, 94, 9, 255, 177, 79, 5, 255, 183, 87, 7, 255, 189, 94, 7, 255, 193, 99, 5, 255, 193, 100, 5, 255, 183, 85, 7, 255, 183, 86, 2, 255, 195, 99, 3, 255, 194, 102, 10, 255, 189, 98, 6, 255, 188, 97, 4, 255, 181, 91, 6, 255, 183, 92, 3, 255, 185, 91, 4, 255, 190, 94, 6, 255, 192, 97, 6, 255, 190, 96, 7, 255, 186, 96, 7, 255, 183, 95, 5, 255, 185, 99, 11, 255, 189, 105, 6, 255, 195, 106, 6, 255, 194, 106, 2, 255, 194, 107, 3, 255, 193, 105, 6, 255, 197, 106, 12, 255, 195, 104, 7, 255, 201, 109, 12, 255, 198, 107, 8, 255, 195, 107, 1, 255, 197, 109, 1, 255, 198, 112, 3, 255, 196, 109, 5, 255, 198, 111, 9, 255, 203, 111, 2, 255, 200, 110, 3, 255, 203, 113, 11, 255, 196, 110, 3, 255, 199, 113, 6, 255, 205, 118, 9, 255, 203, 116, 7, 255, 201, 114, 8, 255, 206, 121, 13, 255, 205, 123, 6, 255, 203, 125, 1, 255, 206, 128, 1, 255, 210, 130, 0, 255, 211, 132, 4, 255, 207, 132, 5, 255, 209, 136, 6, 255, 206, 137, 7, 255, 212, 145, 5, 255, 216, 149, 1, 255, 216, 149, 3, 255, 213, 145, 2, 255, 212, 143, 7, 255, 216, 152, 3, 255, 221, 158, 0, 255, 227, 164, 1, 255, 228, 169, 4, 255, 229, 170, 2, 255, 224, 163, 0, 255, 216, 154, 2, 255, 216, 157, 1, 255, 220, 160, 3, 255, 211, 147, 3, 255, 208, 146, 1, 255, 213, 145, 6, 255, 204, 134, 7, 255, 204, 138, 6, 255, 211, 149, 11, 255, 208, 145, 3, 255, 207, 148, 6, 255, 204, 140, 6, 255, 202, 138, 7, 255, 207, 148, 7, 255, 207, 145, 4, 255, 207, 150, 3, 255, 223, 170, 5, 255, 233, 178, 7, 255, 230, 177, 6, 255, 229, 178, 3, 255, 226, 175, 0, 255, 231, 179, 3, 255, 231, 182, 3, 255, 213, 163, 6, 255, 196, 133, 7, 255, 176, 100, 4, 255, 182, 111, 5, 255, 190, 122, 5, 255, 184, 110, 9, 255, 178, 102, 1, 255, 176, 97, 3, 255, 170, 94, 3, 255, 182, 107, 10, 255, 179, 101, 5, 255, 175, 97, 1, 255, 174, 97, 3, 255, 166, 92, 5, 255, 170, 97, 4, 255, 179, 107, 4, 255, 184, 113, 6, 255, 184, 117, 11, 255, 179, 115, 17, 255, 177, 115, 23, 255, 167, 108, 14, 255, 156, 97, 7, 255, 158, 94, 18, 255, 152, 85, 6, 255, 162, 96, 12, 255, 165, 96, 16, 255, 168, 91, 10, 255, 162, 88, 0, 255, 165, 88, 7, 255, 172, 97, 7, 255, 174, 101, 3, 255, 166, 91, 5, 255, 167, 89, 2, 255, 153, 75, 8, 255, 145, 81, 9, 255, 183, 131, 11, 255, 198, 139, 3, 255, 192, 130, 2, 255, 183, 114, 4, 255, 171, 95, 9, 255, 169, 95, 6, 255, 168, 92, 9, 255, 162, 82, 6, 255, 159, 78, 15, 255, 160, 83, 9, 255, 161, 82, 15, 255, 163, 82, 10, 255, 161, 77, 3, 255, 165, 80, 1, 255, 180, 95, 9, 255, 199, 117, 8, 255, 194, 113, 6, 255, 193, 113, 4, 255, 192, 112, 6, 255, 191, 110, 9, 255, 191, 109, 5, 255, 190, 105, 6, 255, 190, 106, 7, 255, 186, 101, 1, 255, 168, 73, 1, 255, 148, 63, 5, 255, 146, 73, 5, 255, 141, 67, 7, 255, 131, 57, 11, 255, 125, 56, 10, 255, 119, 52, 6, 255, 120, 56, 7, 255, 116, 56, 5, 255, 108, 49, 0, 255, 108, 47, 7, 255, 107, 49, 6, 255, 110, 54, 5, 255, 104, 46, 1, 255, 106, 46, 5, 255, 105, 43, 4, 255, 93, 31, 2, 255, 100, 40, 11, 255, 114, 62, 2, 255, 122, 63, 3, 255, 118, 61, 8, 255, 119, 62, 10, 255, 107, 45, 4, 255, 97, 34, 7, 255, 100, 47, 4, 255, 110, 56, 2, 255, 115, 54, 3, 255, 113, 46, 5, 255, 108, 41, 7, 255, 103, 45, 6, 255, 104, 45, 3, 255, 104, 38, 3, 255, 100, 32, 2, 255, 100, 30, 3, 255, 102, 30, 5, 255, 101, 30, 4, 255, 99, 28, 3, 255, 94, 31, 4, 255, 94, 31, 3, 255, 96, 27, 1, 255, 99, 31, 1, 255, 102, 40, 3, 255, 105, 37, 4, 255, 115, 42, 5, 255, 119, 46, 3, 255, 116, 42, 2, 255, 119, 41, 4, 255, 119, 38, 5, 255, 122, 40, 5, 255, 120, 40, 2, 255, 122, 42, 7, 255, 124, 45, 6, 255, 124, 47, 4, 255, 1, 2, 18, 255, 3, 1, 22, 255, 1, 0, 24, 255, 0, 2, 20, 255, 2, 1, 10, 255, 0, 0, 17, 255, 0, 4, 28, 255, 5, 18, 42, 255, 1, 22, 43, 255, 0, 21, 39, 255, 2, 17, 44, 255, 4, 20, 45, 255, 0, 17, 31, 255, 2, 12, 20, 255, 4, 10, 26, 255, 1, 10, 27, 255, 4, 13, 27, 255, 4, 9, 19, 255, 2, 6, 18, 255, 0, 3, 6, 255, 3, 1, 3, 255, 2, 1, 0, 255, 0, 0, 1, 255, 8, 22, 40, 255, 10, 22, 46, 255, 0, 3, 9, 255, 2, 5, 11, 255, 0, 0, 0, 255, 1, 0, 5, 255, 2, 0, 1, 255, 0, 0, 6, 255, 3, 0, 2, 255, 3, 1, 4, 255, 2, 0, 0, 255, 1, 7, 87, 255, 9, 74, 231, 255, 23, 23, 23, 255, 7, 1, 0, 255, 6, 16, 144, 255, 4, 25, 143, 255, 2, 1, 1, 255, 3, 1, 4, 255, 3, 1, 0, 255, 0, 1, 0, 255, 2, 0, 4, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 1, 0, 0, 255, 3, 1, 2, 255, 6, 0, 0, 255, 7, 1, 1, 255, 6, 2, 1, 255, 5, 1, 1, 255, 7, 4, 0, 255, 7, 6, 1, 255, 7, 5, 2, 255, 7, 5, 2, 255, 17, 11, 4, 255, 19, 11, 4, 255, 28, 22, 17, 255, 35, 35, 30, 255, 33, 41, 34, 255, 32, 50, 55, 255, 30, 46, 54, 255, 35, 47, 54, 255, 37, 46, 44, 255, 37, 44, 32, 255, 35, 42, 26, 255, 42, 37, 32, 255, 43, 33, 25, 255, 41, 33, 21, 255, 33, 20, 10, 255, 36, 22, 5, 255, 30, 21, 3, 255, 26, 25, 3, 255, 25, 31, 10, 255, 35, 35, 6, 255, 36, 37, 3, 255, 42, 42, 8, 255, 54, 53, 2, 255, 52, 54, 13, 255, 43, 55, 21, 255, 55, 62, 19, 255, 59, 65, 19, 255, 63, 68, 11, 255, 68, 73, 10, 255, 68, 73, 11, 255, 69, 74, 6, 255, 68, 75, 6, 255, 71, 70, 8, 255, 72, 71, 5, 255, 74, 73, 9, 255, 72, 66, 4, 255, 85, 71, 1, 255, 80, 72, 1, 255, 77, 69, 3, 255, 83, 67, 5, 255, 84, 62, 4, 255, 81, 61, 1, 255, 88, 66, 2, 255, 89, 66, 4, 255, 83, 64, 4, 255, 78, 62, 4, 255, 84, 66, 7, 255, 83, 59, 3, 255, 83, 61, 3, 255, 84, 60, 2, 255, 115, 71, 2, 255, 143, 70, 11, 255, 114, 62, 10, 255, 100, 57, 1, 255, 107, 55, 5, 255, 104, 55, 1, 255, 101, 52, 1, 255, 107, 56, 4, 255, 114, 52, 8, 255, 101, 52, 3, 255, 94, 56, 4, 255, 119, 61, 3, 255, 122, 59, 1, 255, 104, 53, 2, 255, 95, 51, 7, 255, 90, 50, 6, 255, 84, 49, 4, 255, 96, 55, 10, 255, 101, 55, 7, 255, 98, 52, 6, 255, 104, 56, 3, 255, 106, 57, 1, 255, 108, 61, 2, 255, 106, 56, 10, 255, 106, 57, 6, 255, 119, 63, 4, 255, 125, 62, 6, 255, 125, 60, 14, 255, 133, 69, 13, 255, 147, 84, 11, 255, 162, 90, 8, 255, 183, 98, 17, 255, 186, 100, 11, 255, 186, 98, 9, 255, 192, 101, 4, 255, 195, 103, 13, 255, 196, 99, 15, 255, 185, 93, 9, 255, 173, 75, 15, 255, 156, 64, 8, 255, 174, 81, 10, 255, 182, 83, 16, 255, 182, 89, 2, 255, 167, 77, 9, 255, 126, 48, 9, 255, 118, 49, 13, 255, 168, 84, 12, 255, 176, 84, 2, 255, 177, 89, 5, 255, 182, 95, 10, 255, 182, 91, 3, 255, 193, 97, 11, 255, 179, 82, 10, 255, 163, 72, 11, 255, 171, 78, 6, 255, 173, 79, 7, 255, 177, 83, 7, 255, 174, 80, 7, 255, 174, 81, 8, 255, 180, 86, 4, 255, 193, 99, 5, 255, 194, 99, 1, 255, 185, 87, 3, 255, 174, 79, 7, 255, 163, 73, 10, 255, 163, 74, 6, 255, 168, 77, 3, 255, 167, 78, 7, 255, 159, 72, 11, 255, 167, 75, 7, 255, 167, 78, 2, 255, 170, 84, 7, 255, 163, 74, 2, 255, 145, 63, 2, 255, 128, 61, 8, 255, 125, 59, 12, 255, 142, 66, 10, 255, 152, 74, 5, 255, 147, 67, 9, 255, 139, 62, 3, 255, 169, 85, 9, 255, 184, 95, 6, 255, 180, 95, 10, 255, 175, 86, 4, 255, 164, 79, 9, 255, 169, 80, 15, 255, 171, 79, 11, 255, 182, 92, 13, 255, 188, 97, 7, 255, 188, 94, 4, 255, 189, 94, 8, 255, 188, 93, 7, 255, 184, 91, 2, 255, 185, 85, 7, 255, 179, 79, 3, 255, 177, 83, 10, 255, 188, 100, 7, 255, 192, 104, 3, 255, 191, 100, 0, 255, 183, 87, 6, 255, 187, 93, 10, 255, 188, 99, 3, 255, 189, 100, 7, 255, 174, 81, 12, 255, 166, 72, 10, 255, 172, 81, 4, 255, 188, 96, 2, 255, 191, 95, 4, 255, 196, 98, 10, 255, 194, 97, 11, 255, 195, 102, 7, 255, 191, 101, 5, 255, 183, 96, 2, 255, 182, 94, 6, 255, 182, 95, 3, 255, 183, 91, 9, 255, 188, 98, 4, 255, 193, 106, 7, 255, 192, 103, 9, 255, 189, 99, 13, 255, 192, 100, 14, 255, 197, 108, 2, 255, 196, 107, 0, 255, 197, 107, 5, 255, 200, 109, 18, 255, 202, 112, 15, 255, 198, 111, 2, 255, 200, 112, 11, 255, 195, 105, 8, 255, 199, 108, 2, 255, 206, 114, 9, 255, 200, 110, 1, 255, 199, 112, 5, 255, 198, 114, 9, 255, 197, 111, 7, 255, 196, 111, 1, 255, 202, 118, 2, 255, 204, 120, 3, 255, 203, 120, 4, 255, 207, 124, 5, 255, 208, 124, 4, 255, 202, 117, 7, 255, 199, 117, 10, 255, 206, 130, 11, 255, 206, 131, 7, 255, 214, 139, 9, 255, 213, 137, 2, 255, 212, 136, 2, 255, 217, 147, 2, 255, 216, 148, 6, 255, 212, 148, 1, 255, 217, 153, 2, 255, 223, 158, 4, 255, 220, 157, 1, 255, 223, 161, 1, 255, 230, 169, 4, 255, 228, 170, 4, 255, 225, 169, 0, 255, 223, 165, 4, 255, 210, 147, 9, 255, 201, 135, 6, 255, 201, 130, 5, 255, 194, 122, 5, 255, 203, 135, 4, 255, 202, 139, 5, 255, 201, 138, 3, 255, 199, 142, 7, 255, 198, 135, 0, 255, 205, 139, 6, 255, 206, 140, 8, 255, 210, 142, 9, 255, 227, 168, 11, 255, 238, 188, 4, 255, 234, 182, 0, 255, 229, 177, 4, 255, 228, 175, 6, 255, 227, 175, 1, 255, 230, 177, 0, 255, 234, 183, 5, 255, 222, 172, 4, 255, 187, 121, 1, 255, 177, 105, 10, 255, 193, 119, 4, 255, 180, 105, 5, 255, 173, 94, 9, 255, 174, 91, 6, 255, 177, 99, 4, 255, 168, 93, 1, 255, 165, 88, 4, 255, 167, 89, 6, 255, 169, 92, 2, 255, 165, 89, 1, 255, 168, 96, 2, 255, 167, 94, 1, 255, 172, 99, 7, 255, 170, 95, 6, 255, 173, 101, 14, 255, 182, 114, 31, 255, 178, 118, 14, 255, 172, 110, 12, 255, 154, 93, 4, 255, 151, 92, 8, 255, 153, 92, 9, 255, 174, 107, 17, 255, 180, 107, 5, 255, 171, 93, 5, 255, 170, 94, 3, 255, 166, 91, 2, 255, 171, 95, 8, 255, 173, 97, 6, 255, 170, 94, 4, 255, 161, 89, 1, 255, 159, 88, 3, 255, 183, 125, 8, 255, 201, 148, 5, 255, 199, 135, 4, 255, 192, 123, 10, 255, 183, 116, 6, 255, 173, 101, 2, 255, 172, 94, 7, 255, 171, 88, 13, 255, 166, 83, 3, 255, 168, 90, 14, 255, 162, 87, 11, 255, 166, 87, 6, 255, 174, 93, 8, 255, 176, 93, 3, 255, 171, 84, 7, 255, 184, 98, 12, 255, 200, 117, 13, 255, 195, 113, 10, 255, 192, 111, 3, 255, 190, 109, 2, 255, 190, 108, 7, 255, 191, 108, 6, 255, 190, 104, 3, 255, 186, 102, 5, 255, 185, 98, 5, 255, 173, 80, 5, 255, 146, 62, 4, 255, 133, 57, 1, 255, 127, 51, 2, 255, 121, 46, 2, 255, 120, 47, 3, 255, 117, 45, 2, 255, 117, 47, 1, 255, 116, 49, 1, 255, 122, 56, 10, 255, 113, 44, 9, 255, 112, 44, 5, 255, 114, 49, 4, 255, 108, 44, 4, 255, 107, 43, 5, 255, 108, 46, 1, 255, 105, 41, 2, 255, 101, 36, 6, 255, 118, 60, 5, 255, 124, 61, 4, 255, 120, 59, 11, 255, 108, 51, 5, 255, 96, 43, 0, 255, 82, 34, 6, 255, 93, 40, 5, 255, 99, 50, 1, 255, 102, 53, 3, 255, 105, 46, 10, 255, 100, 29, 5, 255, 107, 31, 3, 255, 103, 33, 4, 255, 99, 35, 4, 255, 106, 38, 0, 255, 110, 38, 3, 255, 102, 26, 3, 255, 104, 30, 3, 255, 105, 35, 0, 255, 104, 32, 3, 255, 107, 35, 1, 255, 111, 32, 0, 255, 115, 35, 5, 255, 113, 40, 0, 255, 117, 38, 3, 255, 121, 39, 8, 255, 116, 37, 1, 255, 119, 40, 1, 255, 121, 39, 1, 255, 125, 43, 3, 255, 123, 39, 1, 255, 126, 44, 2, 255, 133, 51, 1, 255, 136, 52, 2, 255, 135, 52, 1, 255, 1, 0, 24, 255, 1, 0, 20, 255, 0, 2, 20, 255, 2, 2, 16, 255, 4, 0, 10, 255, 3, 2, 22, 255, 1, 20, 46, 255, 4, 28, 58, 255, 0, 17, 48, 255, 3, 18, 39, 255, 2, 20, 44, 255, 0, 17, 50, 255, 2, 15, 45, 255, 4, 15, 32, 255, 4, 15, 30, 255, 4, 7, 21, 255, 3, 6, 19, 255, 0, 8, 19, 255, 2, 14, 23, 255, 2, 8, 18, 255, 5, 4, 5, 255, 3, 0, 2, 255, 0, 3, 2, 255, 0, 1, 0, 255, 1, 0, 2, 255, 1, 1, 0, 255, 0, 0, 1, 255, 1, 1, 2, 255, 1, 1, 4, 255, 2, 2, 7, 255, 1, 3, 4, 255, 3, 2, 3, 255, 0, 2, 0, 255, 1, 1, 35, 255, 36, 51, 172, 255, 42, 40, 61, 255, 16, 3, 0, 255, 9, 8, 93, 255, 2, 26, 182, 255, 2, 5, 23, 255, 7, 3, 4, 255, 0, 1, 2, 255, 2, 0, 2, 255, 2, 2, 1, 255, 4, 0, 2, 255, 0, 0, 0, 255, 2, 1, 1, 255, 2, 0, 1, 255, 1, 0, 0, 255, 2, 0, 1, 255, 4, 2, 3, 255, 5, 2, 1, 255, 5, 2, 1, 255, 5, 1, 0, 255, 7, 3, 0, 255, 7, 3, 0, 255, 12, 7, 3, 255, 12, 7, 3, 255, 12, 8, 4, 255, 17, 11, 3, 255, 20, 12, 2, 255, 22, 16, 6, 255, 25, 24, 15, 255, 33, 36, 27, 255, 38, 45, 46, 255, 35, 50, 46, 255, 34, 49, 40, 255, 34, 39, 25, 255, 44, 41, 34, 255, 38, 40, 33, 255, 41, 41, 34, 255, 40, 37, 25, 255, 35, 32, 21, 255, 39, 32, 15, 255, 34, 24, 8, 255, 30, 22, 11, 255, 31, 29, 11, 255, 36, 31, 12, 255, 39, 37, 5, 255, 39, 46, 9, 255, 39, 48, 4, 255, 49, 53, 16, 255, 53, 59, 10, 255, 47, 61, 12, 255, 50, 63, 10, 255, 61, 65, 10, 255, 66, 70, 4, 255, 68, 75, 6, 255, 75, 76, 11, 255, 67, 75, 7, 255, 68, 72, 7, 255, 74, 71, 1, 255, 72, 69, 2, 255, 77, 63, 7, 255, 80, 63, 9, 255, 74, 68, 8, 255, 71, 62, 6, 255, 68, 61, 3, 255, 77, 64, 3, 255, 82, 63, 0, 255, 83, 64, 1, 255, 88, 68, 4, 255, 86, 64, 4, 255, 85, 64, 4, 255, 94, 63, 3, 255, 99, 63, 2, 255, 82, 65, 0, 255, 85, 69, 8, 255, 93, 63, 11, 255, 106, 66, 4, 255, 151, 83, 5, 255, 172, 93, 12, 255, 155, 96, 7, 255, 153, 94, 7, 255, 142, 84, 5, 255, 134, 70, 3, 255, 125, 64, 2, 255, 121, 68, 8, 255, 118, 64, 9, 255, 114, 64, 4, 255, 111, 60, 9, 255, 113, 60, 7, 255, 108, 60, 7, 255, 110, 60, 11, 255, 109, 59, 2, 255, 111, 63, 4, 255, 109, 59, 5, 255, 114, 64, 6, 255, 111, 66, 1, 255, 119, 63, 7, 255, 125, 64, 9, 255, 128, 72, 4, 255, 134, 78, 2, 255, 144, 81, 8, 255, 161, 87, 19, 255, 172, 96, 9, 255, 179, 103, 10, 255, 189, 103, 15, 255, 196, 104, 9, 255, 193, 101, 10, 255, 170, 81, 6, 255, 162, 72, 8, 255, 168, 77, 13, 255, 182, 87, 3, 255, 186, 85, 4, 255, 179, 89, 0, 255, 168, 81, 8, 255, 121, 48, 11, 255, 139, 63, 9, 255, 178, 93, 15, 255, 185, 96, 12, 255, 160, 74, 4, 255, 119, 47, 13, 255, 118, 52, 13, 255, 153, 74, 2, 255, 179, 86, 4, 255, 170, 72, 12, 255, 173, 87, 10, 255, 164, 81, 4, 255, 170, 84, 6, 255, 147, 76, 4, 255, 117, 51, 10, 255, 131, 62, 2, 255, 160, 79, 10, 255, 180, 88, 10, 255, 167, 76, 6, 255, 155, 70, 22, 255, 172, 84, 12, 255, 186, 97, 5, 255, 193, 99, 10, 255, 177, 79, 8, 255, 142, 52, 5, 255, 124, 54, 12, 255, 135, 65, 3, 255, 151, 75, 3, 255, 166, 79, 4, 255, 159, 68, 4, 255, 174, 86, 13, 255, 179, 88, 8, 255, 175, 73, 7, 255, 169, 71, 12, 255, 127, 48, 7, 255, 109, 46, 13, 255, 145, 76, 14, 255, 180, 94, 9, 255, 187, 91, 9, 255, 178, 85, 6, 255, 148, 68, 6, 255, 122, 63, 8, 255, 154, 82, 14, 255, 162, 74, 4, 255, 136, 59, 10, 255, 117, 53, 10, 255, 114, 49, 4, 255, 122, 60, 7, 255, 136, 65, 8, 255, 168, 85, 1, 255, 185, 95, 3, 255, 188, 94, 7, 255, 189, 97, 6, 255, 191, 102, 5, 255, 188, 94, 5, 255, 183, 93, 2, 255, 181, 91, 5, 255, 188, 94, 2, 255, 191, 101, 8, 255, 188, 93, 10, 255, 189, 92, 5, 255, 189, 94, 5, 255, 188, 95, 5, 255, 175, 81, 2, 255, 162, 69, 0, 255, 168, 77, 4, 255, 187, 96, 12, 255, 191, 99, 8, 255, 196, 103, 2, 255, 197, 100, 7, 255, 195, 98, 5, 255, 195, 100, 5, 255, 193, 99, 1, 255, 192, 99, 3, 255, 193, 98, 9, 255, 192, 98, 1, 255, 193, 100, 2, 255, 179, 89, 5, 255, 174, 83, 7, 255, 179, 90, 8, 255, 184, 96, 4, 255, 180, 91, 5, 255, 176, 82, 12, 255, 177, 87, 3, 255, 179, 89, 6, 255, 183, 93, 3, 255, 189, 100, 2, 255, 193, 102, 7, 255, 196, 105, 5, 255, 198, 106, 4, 255, 196, 106, 2, 255, 189, 102, 7, 255, 181, 95, 13, 255, 192, 110, 11, 255, 193, 109, 0, 255, 198, 109, 5, 255, 198, 110, 10, 255, 200, 113, 9, 255, 199, 113, 4, 255, 200, 114, 4, 255, 202, 115, 7, 255, 200, 115, 7, 255, 200, 114, 7, 255, 200, 119, 4, 255, 207, 127, 7, 255, 207, 125, 11, 255, 202, 119, 1, 255, 211, 128, 3, 255, 215, 131, 8, 255, 208, 125, 4, 255, 205, 127, 0, 255, 209, 135, 9, 255, 221, 152, 8, 255, 217, 150, 4, 255, 215, 148, 4, 255, 216, 149, 4, 255, 214, 147, 3, 255, 224, 163, 8, 255, 229, 171, 2, 255, 229, 174, 0, 255, 228, 171, 0, 255, 220, 161, 3, 255, 207, 138, 4, 255, 204, 132, 2, 255, 204, 132, 3, 255, 208, 140, 9, 255, 199, 136, 7, 255, 193, 133, 5, 255, 195, 135, 7, 255, 200, 133, 2, 255, 203, 134, 0, 255, 210, 144, 6, 255, 223, 157, 6, 255, 236, 178, 2, 255, 237, 186, 4, 255, 230, 175, 1, 255, 230, 173, 1, 255, 233, 176, 1, 255, 238, 183, 4, 255, 234, 179, 2, 255, 232, 175, 2, 255, 229, 171, 2, 255, 195, 134, 5, 255, 174, 105, 7, 255, 178, 114, 6, 255, 181, 110, 8, 255, 173, 95, 1, 255, 163, 84, 4, 255, 166, 89, 2, 255, 167, 93, 4, 255, 156, 81, 1, 255, 159, 83, 0, 255, 164, 88, 4, 255, 156, 81, 5, 255, 162, 83, 10, 255, 159, 81, 7, 255, 155, 78, 2, 255, 167, 91, 8, 255, 175, 100, 13, 255, 173, 104, 14, 255, 177, 113, 13, 255, 180, 115, 16, 255, 166, 102, 6, 255, 153, 96, 4, 255, 151, 92, 11, 255, 161, 92, 16, 255, 182, 108, 10, 255, 172, 95, 2, 255, 168, 90, 2, 255, 172, 97, 1, 255, 175, 101, 5, 255, 166, 89, 5, 255, 171, 95, 0, 255, 174, 100, 0, 255, 179, 117, 5, 255, 200, 143, 8, 255, 197, 138, 0, 255, 197, 136, 5, 255, 190, 120, 6, 255, 190, 117, 4, 255, 188, 113, 14, 255, 175, 96, 10, 255, 167, 89, 6, 255, 172, 93, 14, 255, 179, 98, 17, 255, 181, 101, 9, 255, 175, 93, 17, 255, 180, 98, 9, 255, 182, 96, 11, 255, 177, 90, 6, 255, 190, 106, 9, 255, 201, 120, 5, 255, 195, 114, 6, 255, 192, 110, 7, 255, 189, 108, 2, 255, 188, 106, 1, 255, 187, 103, 6, 255, 187, 101, 4, 255, 182, 100, 3, 255, 180, 95, 3, 255, 172, 81, 6, 255, 153, 69, 13, 255, 138, 59, 7, 255, 124, 45, 5, 255, 114, 37, 5, 255, 115, 32, 2, 255, 116, 34, 2, 255, 110, 33, 1, 255, 102, 35, 3, 255, 104, 44, 9, 255, 104, 48, 7, 255, 110, 54, 6, 255, 109, 55, 3, 255, 110, 54, 9, 255, 107, 50, 5, 255, 109, 50, 0, 255, 114, 52, 4, 255, 105, 38, 2, 255, 112, 41, 4, 255, 117, 56, 8, 255, 120, 60, 4, 255, 103, 43, 5, 255, 89, 32, 5, 255, 99, 41, 1, 255, 102, 43, 6, 255, 102, 35, 3, 255, 104, 32, 0, 255, 106, 36, 3, 255, 99, 32, 1, 255, 107, 38, 2, 255, 106, 37, 4, 255, 103, 31, 5, 255, 115, 40, 3, 255, 120, 43, 5, 255, 114, 35, 4, 255, 106, 29, 5, 255, 101, 25, 5, 255, 105, 31, 8, 255, 109, 40, 1, 255, 114, 40, 4, 255, 113, 32, 5, 255, 116, 37, 4, 255, 120, 42, 1, 255, 128, 45, 3, 255, 128, 45, 2, 255, 123, 41, 0, 255, 120, 36, 3, 255, 123, 40, 7, 255, 122, 41, 3, 255, 129, 49, 0, 255, 140, 58, 1, 255, 143, 60, 4, 255, 146, 61, 5, 255, 1, 0, 18, 255, 0, 1, 23, 255, 1, 4, 23, 255, 1, 1, 15, 255, 0, 3, 20, 255, 1, 14, 41, 255, 1, 20, 53, 255, 2, 21, 51, 255, 2, 14, 41, 255, 5, 12, 36, 255, 3, 17, 45, 255, 1, 15, 54, 255, 6, 18, 50, 255, 0, 18, 39, 255, 0, 17, 39, 255, 2, 11, 21, 255, 2, 5, 15, 255, 1, 8, 24, 255, 3, 11, 23, 255, 3, 10, 21, 255, 0, 4, 5, 255, 2, 2, 4, 255, 1, 0, 5, 255, 1, 2, 1, 255, 3, 0, 3, 255, 2, 0, 3, 255, 0, 2, 0, 255, 1, 1, 1, 255, 0, 1, 6, 255, 1, 0, 5, 255, 1, 1, 0, 255, 2, 2, 3, 255, 0, 0, 9, 255, 27, 43, 148, 255, 39, 61, 94, 255, 20, 11, 0, 255, 9, 10, 23, 255, 12, 25, 137, 255, 3, 8, 54, 255, 3, 0, 0, 255, 3, 2, 3, 255, 4, 2, 3, 255, 3, 1, 5, 255, 3, 1, 0, 255, 3, 0, 0, 255, 1, 0, 0, 255, 3, 0, 2, 255, 3, 1, 1, 255, 2, 1, 1, 255, 1, 0, 0, 255, 3, 2, 0, 255, 5, 3, 1, 255, 6, 4, 2, 255, 4, 2, 0, 255, 7, 3, 1, 255, 9, 4, 1, 255, 11, 4, 2, 255, 11, 5, 2, 255, 12, 6, 3, 255, 14, 9, 2, 255, 17, 10, 1, 255, 20, 13, 2, 255, 22, 18, 6, 255, 29, 23, 12, 255, 36, 32, 27, 255, 38, 45, 46, 255, 36, 49, 47, 255, 29, 34, 32, 255, 40, 36, 37, 255, 41, 36, 33, 255, 43, 41, 33, 255, 39, 39, 26, 255, 40, 38, 28, 255, 40, 32, 21, 255, 41, 31, 9, 255, 33, 27, 4, 255, 35, 31, 9, 255, 45, 30, 12, 255, 47, 37, 3, 255, 47, 51, 12, 255, 43, 56, 5, 255, 46, 57, 2, 255, 49, 58, 17, 255, 58, 60, 12, 255, 61, 67, 10, 255, 69, 70, 13, 255, 68, 71, 9, 255, 66, 69, 6, 255, 69, 72, 12, 255, 68, 74, 8, 255, 66, 71, 6, 255, 61, 62, 7, 255, 81, 65, 9, 255, 95, 79, 11, 255, 86, 79, 3, 255, 87, 76, 4, 255, 85, 80, 5, 255, 84, 80, 5, 255, 92, 78, 7, 255, 101, 78, 8, 255, 99, 81, 6, 255, 97, 85, 4, 255, 105, 81, 11, 255, 106, 81, 8, 255, 110, 84, 3, 255, 111, 85, 5, 255, 106, 80, 5, 255, 111, 78, 5, 255, 111, 83, 5, 255, 102, 71, 6, 255, 134, 72, 13, 255, 163, 87, 9, 255, 172, 100, 6, 255, 179, 97, 2, 255, 181, 95, 6, 255, 175, 90, 8, 255, 163, 85, 6, 255, 136, 74, 11, 255, 148, 74, 11, 255, 166, 89, 9, 255, 151, 90, 16, 255, 146, 88, 10, 255, 142, 80, 12, 255, 146, 79, 13, 255, 154, 83, 5, 255, 154, 86, 6, 255, 156, 86, 14, 255, 158, 90, 12, 255, 164, 95, 10, 255, 176, 96, 13, 255, 178, 99, 18, 255, 180, 104, 16, 255, 189, 104, 7, 255, 196, 107, 9, 255, 192, 106, 7, 255, 192, 99, 9, 255, 179, 88, 7, 255, 158, 70, 7, 255, 186, 89, 16, 255, 194, 96, 4, 255, 167, 78, 1, 255, 142, 62, 6, 255, 149, 64, 8, 255, 169, 79, 11, 255, 153, 76, 12, 255, 189, 95, 5, 255, 140, 61, 4, 255, 96, 43, 8, 255, 168, 92, 12, 255, 182, 88, 12, 255, 142, 58, 7, 255, 123, 48, 9, 255, 140, 66, 13, 255, 159, 77, 9, 255, 161, 68, 7, 255, 151, 61, 12, 255, 137, 55, 8, 255, 146, 71, 6, 255, 140, 62, 5, 255, 140, 68, 13, 255, 131, 61, 11, 255, 160, 85, 4, 255, 173, 93, 9, 255, 174, 85, 10, 255, 176, 91, 4, 255, 157, 74, 4, 255, 171, 83, 10, 255, 164, 82, 7, 255, 157, 73, 7, 255, 150, 63, 10, 255, 123, 55, 13, 255, 119, 60, 7, 255, 160, 84, 8, 255, 175, 88, 5, 255, 178, 90, 5, 255, 165, 80, 6, 255, 166, 78, 12, 255, 168, 73, 5, 255, 148, 55, 6, 255, 135, 57, 11, 255, 132, 62, 6, 255, 142, 69, 6, 255, 157, 73, 9, 255, 159, 69, 8, 255, 162, 68, 5, 255, 167, 75, 3, 255, 152, 72, 6, 255, 132, 65, 6, 255, 144, 72, 6, 255, 152, 78, 8, 255, 147, 71, 8, 255, 148, 71, 8, 255, 142, 73, 8, 255, 139, 73, 3, 255, 148, 78, 5, 255, 168, 93, 8, 255, 169, 87, 13, 255, 179, 91, 10, 255, 177, 88, 12, 255, 163, 82, 13, 255, 162, 83, 10, 255, 169, 88, 11, 255, 165, 86, 4, 255, 180, 96, 6, 255, 185, 91, 7, 255, 190, 100, 6, 255, 190, 95, 8, 255, 190, 94, 5, 255, 185, 91, 6, 255, 185, 91, 5, 255, 182, 87, 5, 255, 179, 87, 6, 255, 187, 97, 5, 255, 193, 102, 1, 255, 193, 99, 4, 255, 195, 102, 3, 255, 194, 102, 4, 255, 191, 99, 4, 255, 192, 98, 5, 255, 195, 102, 6, 255, 194, 101, 7, 255, 196, 102, 10, 255, 198, 103, 7, 255, 195, 98, 12, 255, 174, 85, 9, 255, 170, 81, 8, 255, 179, 91, 5, 255, 184, 95, 6, 255, 176, 87, 7, 255, 170, 81, 1, 255, 171, 83, 3, 255, 173, 85, 15, 255, 179, 91, 11, 255, 182, 95, 7, 255, 187, 97, 8, 255, 192, 105, 2, 255, 182, 95, 2, 255, 175, 91, 9, 255, 189, 108, 3, 255, 191, 107, 8, 255, 199, 115, 11, 255, 197, 113, 1, 255, 194, 111, 0, 255, 196, 111, 1, 255, 199, 111, 10, 255, 197, 108, 10, 255, 199, 112, 4, 255, 203, 118, 1, 255, 201, 117, 2, 255, 199, 118, 4, 255, 204, 126, 6, 255, 205, 123, 9, 255, 201, 115, 8, 255, 207, 122, 6, 255, 211, 128, 9, 255, 206, 124, 3, 255, 205, 122, 8, 255, 209, 130, 0, 255, 220, 144, 5, 255, 222, 149, 6, 255, 218, 146, 5, 255, 218, 145, 6, 255, 220, 152, 0, 255, 223, 159, 0, 255, 229, 170, 4, 255, 228, 170, 0, 255, 229, 170, 1, 255, 232, 174, 4, 255, 229, 170, 4, 255, 208, 138, 3, 255, 204, 135, 6, 255, 217, 153, 5, 255, 205, 142, 2, 255, 191, 128, 5, 255, 197, 139, 2, 255, 204, 140, 2, 255, 195, 121, 6, 255, 211, 144, 9, 255, 226, 170, 3, 255, 231, 173, 3, 255, 234, 178, 2, 255, 230, 178, 1, 255, 231, 175, 3, 255, 230, 172, 3, 255, 230, 171, 3, 255, 231, 175, 3, 255, 234, 177, 2, 255, 236, 176, 2, 255, 235, 172, 7, 255, 221, 159, 4, 255, 194, 135, 11, 255, 189, 126, 8, 255, 188, 122, 1, 255, 175, 102, 2, 255, 169, 92, 5, 255, 161, 84, 4, 255, 163, 88, 9, 255, 158, 83, 4, 255, 162, 87, 1, 255, 161, 86, 4, 255, 159, 84, 10, 255, 168, 92, 5, 255, 163, 87, 6, 255, 161, 85, 5, 255, 169, 93, 4, 255, 172, 99, 11, 255, 172, 104, 20, 255, 176, 107, 20, 255, 175, 105, 10, 255, 161, 93, 4, 255, 143, 81, 4, 255, 141, 82, 10, 255, 145, 83, 9, 255, 177, 112, 7, 255, 185, 113, 4, 255, 181, 107, 2, 255, 179, 104, 1, 255, 175, 97, 2, 255, 169, 91, 2, 255, 168, 89, 5, 255, 182, 105, 6, 255, 200, 138, 6, 255, 199, 142, 4, 255, 198, 138, 3, 255, 195, 133, 7, 255, 199, 128, 10, 255, 201, 131, 4, 255, 201, 131, 11, 255, 200, 121, 8, 255, 187, 104, 10, 255, 176, 95, 11, 255, 176, 97, 9, 255, 179, 99, 8, 255, 180, 97, 10, 255, 183, 98, 12, 255, 178, 90, 11, 255, 178, 90, 6, 255, 192, 107, 6, 255, 200, 118, 4, 255, 192, 112, 1, 255, 192, 110, 6, 255, 190, 108, 4, 255, 187, 105, 0, 255, 186, 101, 5, 255, 184, 99, 7, 255, 180, 96, 8, 255, 175, 92, 8, 255, 168, 82, 5, 255, 146, 61, 6, 255, 132, 49, 5, 255, 125, 42, 7, 255, 118, 41, 4, 255, 113, 42, 6, 255, 115, 38, 5, 255, 108, 34, 4, 255, 99, 33, 6, 255, 91, 34, 3, 255, 99, 43, 3, 255, 114, 50, 2, 255, 118, 50, 3, 255, 117, 51, 7, 255, 112, 50, 5, 255, 114, 52, 5, 255, 113, 51, 6, 255, 111, 48, 8, 255, 88, 27, 2, 255, 87, 32, 6, 255, 94, 32, 4, 255, 93, 27, 2, 255, 98, 36, 7, 255, 97, 35, 2, 255, 100, 34, 5, 255, 97, 30, 4, 255, 98, 28, 2, 255, 105, 33, 3, 255, 108, 37, 2, 255, 109, 43, 4, 255, 109, 40, 3, 255, 114, 34, 4, 255, 123, 43, 9, 255, 129, 47, 5, 255, 133, 52, 4, 255, 126, 47, 5, 255, 107, 29, 1, 255, 103, 38, 1, 255, 114, 42, 2, 255, 117, 38, 4, 255, 97, 29, 3, 255, 97, 35, 7, 255, 122, 44, 7, 255, 140, 50, 4, 255, 148, 60, 2, 255, 143, 59, 3, 255, 134, 51, 3, 255, 125, 42, 5, 255, 127, 45, 5, 255, 136, 53, 3, 255, 154, 65, 0, 255, 155, 66, 1, 255, 161, 69, 2, 255, 2, 1, 17, 255, 0, 2, 16, 255, 2, 1, 15, 255, 1, 3, 30, 255, 3, 21, 58, 255, 1, 32, 61, 255, 2, 19, 47, 255, 1, 15, 40, 255, 0, 19, 43, 255, 1, 12, 37, 255, 1, 18, 45, 255, 1, 23, 55, 255, 3, 24, 46, 255, 2, 20, 34, 255, 2, 18, 42, 255, 1, 17, 45, 255, 1, 13, 31, 255, 3, 8, 15, 255, 0, 6, 15, 255, 2, 9, 18, 255, 3, 6, 13, 255, 2, 3, 1, 255, 1, 1, 2, 255, 0, 0, 2, 255, 1, 1, 5, 255, 0, 1, 1, 255, 0, 0, 2, 255, 2, 0, 6, 255, 0, 2, 3, 255, 2, 2, 1, 255, 2, 0, 3, 255, 0, 0, 2, 255, 13, 21, 106, 255, 40, 66, 151, 255, 17, 18, 0, 255, 12, 5, 0, 255, 20, 23, 50, 255, 7, 13, 31, 255, 4, 0, 0, 255, 3, 2, 8, 255, 2, 2, 2, 255, 1, 1, 2, 255, 7, 2, 2, 255, 3, 1, 0, 255, 1, 1, 3, 255, 4, 1, 2, 255, 2, 1, 1, 255, 1, 0, 0, 255, 1, 0, 0, 255, 2, 1, 0, 255, 3, 3, 0, 255, 6, 2, 1, 255, 9, 3, 3, 255, 8, 4, 0, 255, 10, 6, 3, 255, 8, 5, 1, 255, 9, 6, 1, 255, 11, 5, 1, 255, 12, 7, 3, 255, 13, 9, 4, 255, 12, 9, 1, 255, 18, 14, 3, 255, 26, 20, 8, 255, 28, 21, 10, 255, 34, 32, 25, 255, 40, 40, 39, 255, 37, 40, 33, 255, 32, 32, 22, 255, 40, 39, 31, 255, 50, 47, 36, 255, 49, 45, 25, 255, 47, 43, 25, 255, 46, 41, 32, 255, 44, 36, 21, 255, 46, 33, 6, 255, 41, 29, 5, 255, 40, 34, 8, 255, 51, 47, 10, 255, 56, 47, 10, 255, 50, 47, 9, 255, 47, 49, 14, 255, 54, 55, 8, 255, 54, 60, 9, 255, 61, 62, 8, 255, 67, 68, 14, 255, 61, 70, 5, 255, 74, 72, 9, 255, 80, 71, 9, 255, 74, 73, 3, 255, 70, 68, 5, 255, 76, 69, 1, 255, 99, 89, 9, 255, 107, 101, 10, 255, 108, 108, 7, 255, 106, 105, 1, 255, 105, 99, 2, 255, 110, 98, 5, 255, 106, 100, 5, 255, 107, 97, 5, 255, 110, 91, 5, 255, 107, 88, 6, 255, 104, 87, 8, 255, 117, 87, 6, 255, 108, 88, 1, 255, 100, 83, 3, 255, 101, 77, 6, 255, 103, 79, 11, 255, 103, 73, 4, 255, 103, 71, 5, 255, 101, 68, 9, 255, 104, 66, 2, 255, 117, 69, 4, 255, 124, 65, 4, 255, 143, 69, 6, 255, 160, 77, 3, 255, 164, 86, 7, 255, 180, 91, 2, 255, 172, 87, 1, 255, 177, 95, 6, 255, 179, 97, 6, 255, 174, 96, 4, 255, 179, 99, 3, 255, 192, 106, 11, 255, 191, 103, 14, 255, 196, 109, 6, 255, 197, 112, 7, 255, 193, 103, 7, 255, 198, 110, 6, 255, 200, 113, 11, 255, 193, 103, 5, 255, 193, 103, 3, 255, 196, 110, 3, 255, 175, 88, 12, 255, 160, 66, 13, 255, 193, 97, 3, 255, 193, 92, 6, 255, 157, 71, 4, 255, 135, 61, 5, 255, 170, 77, 15, 255, 163, 64, 7, 255, 130, 55, 5, 255, 115, 51, 4, 255, 153, 75, 4, 255, 169, 89, 7, 255, 197, 123, 20, 255, 194, 105, 12, 255, 128, 63, 6, 255, 122, 64, 5, 255, 154, 72, 3, 255, 137, 61, 3, 255, 113, 59, 7, 255, 137, 71, 13, 255, 156, 78, 7, 255, 141, 72, 7, 255, 137, 65, 7, 255, 135, 58, 1, 255, 132, 66, 5, 255, 128, 62, 7, 255, 132, 63, 5, 255, 132, 67, 11, 255, 147, 74, 11, 255, 162, 84, 0, 255, 163, 78, 7, 255, 150, 65, 10, 255, 153, 72, 10, 255, 148, 70, 8, 255, 163, 75, 12, 255, 154, 72, 2, 255, 132, 63, 3, 255, 128, 59, 9, 255, 131, 62, 4, 255, 150, 78, 6, 255, 164, 83, 6, 255, 168, 77, 10, 255, 155, 72, 13, 255, 147, 66, 5, 255, 155, 73, 2, 255, 140, 61, 2, 255, 133, 62, 8, 255, 124, 63, 5, 255, 131, 61, 18, 255, 141, 64, 12, 255, 134, 61, 1, 255, 119, 52, 5, 255, 124, 61, 10, 255, 124, 65, 0, 255, 130, 66, 5, 255, 141, 66, 6, 255, 145, 72, 4, 255, 144, 74, 0, 255, 148, 73, 5, 255, 151, 72, 7, 255, 150, 74, 5, 255, 156, 74, 9, 255, 175, 84, 15, 255, 180, 85, 9, 255, 178, 84, 9, 255, 165, 76, 6, 255, 162, 79, 11, 255, 134, 67, 5, 255, 107, 60, 7, 255, 131, 76, 11, 255, 178, 97, 8, 255, 186, 97, 9, 255, 158, 78, 6, 255, 175, 92, 5, 255, 185, 101, 9, 255, 178, 92, 3, 255, 160, 75, 4, 255, 167, 82, 10, 255, 172, 87, 5, 255, 171, 84, 4, 255, 180, 90, 5, 255, 191, 100, 5, 255, 194, 99, 8, 255, 190, 98, 3, 255, 186, 98, 4, 255, 186, 98, 3, 255, 188, 94, 6, 255, 182, 90, 7, 255, 177, 85, 8, 255, 185, 96, 6, 255, 187, 95, 9, 255, 173, 81, 5, 255, 176, 91, 3, 255, 175, 90, 6, 255, 186, 100, 2, 255, 188, 101, 8, 255, 169, 80, 5, 255, 174, 88, 3, 255, 174, 91, 3, 255, 162, 78, 5, 255, 167, 84, 6, 255, 182, 100, 16, 255, 169, 85, 10, 255, 170, 89, 0, 255, 177, 95, 11, 255, 181, 97, 14, 255, 193, 114, 3, 255, 181, 99, 3, 255, 176, 89, 6, 255, 181, 91, 7, 255, 185, 94, 3, 255, 196, 108, 6, 255, 194, 106, 4, 255, 197, 108, 5, 255, 197, 110, 3, 255, 200, 113, 4, 255, 198, 112, 3, 255, 191, 110, 3, 255, 199, 125, 4, 255, 204, 125, 0, 255, 206, 122, 2, 255, 206, 124, 1, 255, 201, 122, 6, 255, 201, 122, 12, 255, 208, 136, 2, 255, 218, 145, 5, 255, 218, 143, 3, 255, 211, 134, 3, 255, 213, 136, 7, 255, 213, 134, 5, 255, 208, 131, 5, 255, 220, 153, 9, 255, 228, 169, 3, 255, 228, 169, 1, 255, 229, 168, 2, 255, 225, 164, 4, 255, 215, 153, 5, 255, 207, 138, 5, 255, 214, 151, 5, 255, 218, 159, 4, 255, 194, 131, 1, 255, 195, 131, 1, 255, 204, 141, 8, 255, 201, 139, 6, 255, 205, 140, 5, 255, 224, 169, 8, 255, 230, 180, 6, 255, 228, 172, 1, 255, 230, 168, 1, 255, 224, 165, 5, 255, 224, 169, 3, 255, 228, 170, 0, 255, 228, 172, 1, 255, 225, 171, 0, 255, 228, 173, 1, 255, 235, 178, 2, 255, 230, 168, 4, 255, 221, 160, 4, 255, 208, 145, 4, 255, 189, 118, 5, 255, 191, 117, 3, 255, 183, 111, 6, 255, 167, 89, 5, 255, 159, 80, 1, 255, 159, 84, 5, 255, 154, 77, 1, 255, 158, 81, 4, 255, 157, 81, 1, 255, 162, 85, 4, 255, 166, 94, 4, 255, 161, 90, 5, 255, 167, 93, 7, 255, 179, 107, 2, 255, 176, 108, 5, 255, 178, 114, 20, 255, 171, 113, 17, 255, 164, 104, 15, 255, 154, 90, 10, 255, 149, 86, 4, 255, 141, 78, 4, 255, 138, 75, 4, 255, 178, 117, 5, 255, 192, 122, 3, 255, 186, 115, 7, 255, 182, 107, 5, 255, 181, 101, 4, 255, 176, 97, 3, 255, 179, 104, 4, 255, 192, 135, 10, 255, 199, 141, 5, 255, 194, 133, 5, 255, 197, 129, 6, 255, 203, 126, 12, 255, 201, 128, 14, 255, 199, 128, 5, 255, 203, 126, 16, 255, 206, 128, 12, 255, 202, 126, 12, 255, 193, 119, 13, 255, 190, 111, 13, 255, 190, 105, 13, 255, 185, 101, 9, 255, 176, 89, 4, 255, 170, 77, 11, 255, 173, 83, 3, 255, 192, 106, 7, 255, 200, 118, 9, 255, 194, 114, 3, 255, 193, 112, 4, 255, 190, 108, 7, 255, 187, 105, 5, 255, 184, 102, 2, 255, 178, 93, 4, 255, 168, 85, 10, 255, 159, 74, 5, 255, 153, 63, 5, 255, 137, 53, 5, 255, 136, 55, 2, 255, 138, 56, 3, 255, 135, 59, 2, 255, 133, 61, 4, 255, 126, 47, 1, 255, 121, 42, 3, 255, 107, 37, 2, 255, 96, 33, 2, 255, 93, 29, 4, 255, 103, 32, 2, 255, 105, 31, 1, 255, 104, 34, 2, 255, 103, 34, 0, 255, 105, 36, 7, 255, 102, 34, 4, 255, 104, 38, 1, 255, 99, 30, 3, 255, 89, 23, 4, 255, 84, 23, 1, 255, 93, 30, 3, 255, 105, 37, 0, 255, 102, 34, 3, 255, 101, 36, 3, 255, 106, 37, 1, 255, 111, 36, 1, 255, 114, 40, 5, 255, 116, 42, 4, 255, 121, 43, 2, 255, 125, 47, 5, 255, 118, 44, 3, 255, 122, 45, 1, 255, 123, 44, 2, 255, 121, 42, 3, 255, 118, 41, 3, 255, 119, 44, 3, 255, 124, 46, 4, 255, 111, 36, 2, 255, 103, 29, 1, 255, 99, 28, 3, 255, 97, 28, 3, 255, 119, 39, 4, 255, 154, 62, 6, 255, 163, 71, 2, 255, 154, 66, 2, 255, 147, 62, 5, 255, 138, 52, 3, 255, 139, 53, 1, 255, 154, 67, 3, 255, 165, 73, 4, 255, 162, 68, 2, 255, 165, 71, 4, 255, 3, 2, 22, 255, 0, 3, 17, 255, 3, 1, 30, 255, 7, 24, 72, 255, 1, 34, 74, 255, 1, 27, 56, 255, 5, 25, 63, 255, 3, 21, 48, 255, 2, 18, 29, 255, 0, 11, 33, 255, 2, 14, 45, 255, 3, 19, 49, 255, 2, 24, 47, 255, 0, 21, 51, 255, 0, 19, 51, 255, 4, 21, 49, 255, 5, 18, 39, 255, 1, 9, 22, 255, 1, 7, 20, 255, 1, 8, 22, 255, 2, 4, 18, 255, 3, 3, 10, 255, 0, 0, 1, 255, 1, 1, 0, 255, 0, 0, 0, 255, 1, 2, 4, 255, 0, 1, 8, 255, 5, 0, 7, 255, 2, 0, 3, 255, 2, 2, 2, 255, 3, 1, 0, 255, 1, 3, 44, 255, 38, 67, 186, 255, 46, 41, 40, 255, 9, 0, 0, 255, 18, 17, 35, 255, 18, 19, 37, 255, 3, 0, 0, 255, 3, 0, 3, 255, 2, 2, 3, 255, 2, 1, 1, 255, 0, 1, 0, 255, 1, 0, 0, 255, 1, 0, 0, 255, 1, 0, 1, 255, 2, 1, 2, 255, 4, 0, 2, 255, 4, 2, 0, 255, 2, 2, 0, 255, 3, 3, 0, 255, 6, 2, 1, 255, 7, 3, 0, 255, 9, 4, 1, 255, 9, 4, 1, 255, 10, 5, 1, 255, 12, 7, 1, 255, 12, 8, 4, 255, 12, 4, 3, 255, 14, 7, 3, 255, 11, 11, 1, 255, 13, 8, 0, 255, 17, 11, 4, 255, 19, 19, 6, 255, 28, 24, 5, 255, 36, 30, 20, 255, 47, 31, 30, 255, 42, 36, 20, 255, 34, 35, 20, 255, 43, 38, 34, 255, 47, 49, 34, 255, 45, 48, 27, 255, 47, 45, 28, 255, 46, 41, 34, 255, 47, 41, 25, 255, 44, 39, 12, 255, 41, 37, 12, 255, 42, 39, 13, 255, 53, 46, 18, 255, 59, 50, 5, 255, 56, 50, 2, 255, 55, 55, 10, 255, 56, 56, 12, 255, 66, 61, 10, 255, 73, 68, 3, 255, 66, 70, 4, 255, 71, 76, 1, 255, 87, 74, 1, 255, 77, 76, 4, 255, 71, 69, 1, 255, 84, 74, 7, 255, 98, 90, 5, 255, 109, 102, 10, 255, 102, 98, 10, 255, 104, 108, 5, 255, 121, 116, 11, 255, 101, 95, 3, 255, 100, 89, 7, 255, 99, 90, 8, 255, 95, 86, 11, 255, 99, 88, 8, 255, 100, 84, 5, 255, 97, 79, 2, 255, 99, 80, 1, 255, 97, 78, 5, 255, 93, 69, 3, 255, 98, 69, 1, 255, 100, 72, 6, 255, 97, 68, 5, 255, 102, 68, 3, 255, 101, 63, 5, 255, 105, 65, 2, 255, 107, 64, 1, 255, 106, 64, 4, 255, 107, 61, 7, 255, 109, 57, 4, 255, 124, 66, 5, 255, 138, 73, 6, 255, 141, 74, 2, 255, 167, 90, 6, 255, 168, 88, 2, 255, 173, 90, 2, 255, 172, 90, 8, 255, 183, 97, 6, 255, 175, 84, 5, 255, 195, 101, 8, 255, 174, 87, 12, 255, 159, 74, 2, 255, 191, 97, 8, 255, 187, 90, 4, 255, 147, 64, 10, 255, 171, 83, 4, 255, 183, 87, 4, 255, 139, 57, 8, 255, 151, 66, 19, 255, 166, 76, 12, 255, 140, 60, 4, 255, 120, 55, 7, 255, 153, 82, 7, 255, 146, 63, 2, 255, 110, 45, 14, 255, 108, 58, 12, 255, 129, 67, 9, 255, 157, 74, 5, 255, 149, 64, 4, 255, 165, 80, 12, 255, 138, 65, 7, 255, 114, 54, 8, 255, 133, 58, 13, 255, 132, 55, 9, 255, 126, 62, 8, 255, 148, 87, 13, 255, 157, 79, 14, 255, 168, 88, 11, 255, 161, 87, 4, 255, 142, 62, 4, 255, 143, 63, 16, 255, 158, 83, 21, 255, 148, 74, 2, 255, 154, 77, 12, 255, 168, 94, 16, 255, 165, 88, 11, 255, 152, 74, 3, 255, 151, 78, 18, 255, 128, 67, 6, 255, 122, 57, 9, 255, 150, 70, 10, 255, 144, 68, 4, 255, 133, 62, 4, 255, 138, 67, 9, 255, 135, 64, 13, 255, 131, 64, 9, 255, 129, 65, 7, 255, 131, 65, 5, 255, 134, 65, 6, 255, 128, 60, 4, 255, 128, 59, 14, 255, 128, 64, 8, 255, 124, 65, 2, 255, 123, 64, 6, 255, 126, 68, 3, 255, 124, 66, 5, 255, 122, 63, 2, 255, 126, 65, 7, 255, 132, 69, 4, 255, 132, 66, 8, 255, 132, 67, 10, 255, 138, 71, 4, 255, 140, 69, 11, 255, 137, 69, 6, 255, 137, 69, 9, 255, 138, 70, 4, 255, 144, 77, 11, 255, 156, 86, 4, 255, 162, 84, 8, 255, 164, 90, 12, 255, 163, 91, 11, 255, 171, 94, 5, 255, 159, 78, 10, 255, 142, 73, 8, 255, 137, 67, 2, 255, 163, 88, 12, 255, 180, 103, 18, 255, 175, 86, 9, 255, 181, 88, 13, 255, 166, 82, 8, 255, 164, 83, 4, 255, 182, 102, 12, 255, 181, 99, 11, 255, 178, 95, 12, 255, 171, 89, 13, 255, 161, 83, 8, 255, 169, 83, 7, 255, 195, 107, 15, 255, 196, 109, 7, 255, 192, 103, 10, 255, 180, 93, 3, 255, 189, 103, 16, 255, 189, 106, 6, 255, 185, 98, 5, 255, 184, 94, 7, 255, 179, 94, 14, 255, 180, 96, 12, 255, 185, 101, 3, 255, 183, 101, 8, 255, 187, 106, 6, 255, 183, 101, 9, 255, 184, 104, 7, 255, 196, 120, 8, 255, 185, 106, 12, 255, 186, 107, 7, 255, 184, 106, 9, 255, 182, 108, 8, 255, 181, 103, 8, 255, 183, 98, 14, 255, 180, 101, 9, 255, 175, 102, 10, 255, 186, 112, 10, 255, 197, 122, 13, 255, 196, 121, 9, 255, 172, 94, 9, 255, 170, 91, 6, 255, 175, 97, 6, 255, 186, 108, 10, 255, 188, 110, 15, 255, 200, 125, 7, 255, 201, 123, 6, 255, 194, 115, 6, 255, 196, 115, 18, 255, 193, 114, 10, 255, 194, 116, 11, 255, 198, 123, 9, 255, 198, 122, 6, 255, 191, 114, 2, 255, 187, 108, 6, 255, 196, 120, 5, 255, 209, 139, 4, 255, 206, 128, 5, 255, 200, 120, 5, 255, 205, 126, 3, 255, 209, 134, 0, 255, 210, 140, 2, 255, 208, 140, 4, 255, 216, 150, 10, 255, 217, 156, 4, 255, 225, 168, 2, 255, 229, 169, 2, 255, 227, 163, 1, 255, 218, 152, 3, 255, 205, 138, 5, 255, 208, 139, 5, 255, 210, 147, 4, 255, 202, 142, 2, 255, 198, 138, 8, 255, 200, 138, 5, 255, 198, 133, 3, 255, 204, 145, 7, 255, 221, 165, 9, 255, 229, 173, 3, 255, 227, 168, 2, 255, 225, 164, 5, 255, 225, 166, 4, 255, 227, 169, 1, 255, 229, 172, 2, 255, 227, 171, 1, 255, 228, 172, 0, 255, 225, 168, 3, 255, 225, 166, 4, 255, 230, 171, 0, 255, 226, 168, 2, 255, 213, 152, 11, 255, 200, 135, 7, 255, 188, 116, 8, 255, 190, 115, 9, 255, 183, 112, 0, 255, 166, 91, 6, 255, 158, 83, 2, 255, 158, 82, 1, 255, 149, 74, 2, 255, 153, 80, 4, 255, 164, 91, 4, 255, 166, 93, 2, 255, 172, 97, 8, 255, 160, 90, 9, 255, 161, 94, 6, 255, 189, 124, 9, 255, 179, 118, 2, 255, 183, 127, 15, 255, 183, 133, 13, 255, 178, 124, 14, 255, 167, 112, 16, 255, 161, 103, 8, 255, 145, 87, 7, 255, 150, 91, 12, 255, 184, 118, 6, 255, 187, 117, 9, 255, 188, 112, 17, 255, 192, 115, 6, 255, 187, 111, 4, 255, 181, 107, 7, 255, 196, 131, 6, 255, 201, 144, 4, 255, 199, 138, 4, 255, 197, 129, 10, 255, 195, 125, 4, 255, 200, 124, 4, 255, 201, 126, 4, 255, 205, 128, 3, 255, 206, 126, 4, 255, 202, 127, 8, 255, 203, 130, 5, 255, 205, 132, 9, 255, 206, 131, 16, 255, 207, 129, 9, 255, 205, 124, 17, 255, 177, 94, 12, 255, 165, 79, 11, 255, 177, 94, 11, 255, 195, 114, 12, 255, 199, 118, 9, 255, 195, 113, 6, 255, 192, 110, 1, 255, 191, 105, 5, 255, 188, 101, 6, 255, 180, 91, 4, 255, 170, 80, 4, 255, 160, 78, 3, 255, 147, 70, 4, 255, 146, 64, 9, 255, 142, 59, 5, 255, 139, 56, 2, 255, 143, 62, 6, 255, 137, 61, 2, 255, 136, 55, 5, 255, 132, 49, 2, 255, 128, 47, 5, 255, 118, 43, 3, 255, 113, 44, 4, 255, 109, 44, 4, 255, 107, 38, 2, 255, 110, 36, 1, 255, 112, 38, 1, 255, 115, 40, 4, 255, 113, 37, 5, 255, 109, 39, 3, 255, 113, 46, 5, 255, 119, 42, 5, 255, 99, 29, 1, 255, 94, 35, 4, 255, 105, 34, 2, 255, 109, 36, 1, 255, 114, 39, 2, 255, 113, 36, 2, 255, 106, 40, 2, 255, 114, 44, 1, 255, 122, 42, 3, 255, 128, 50, 9, 255, 131, 49, 3, 255, 119, 46, 2, 255, 115, 44, 3, 255, 112, 42, 4, 255, 106, 35, 3, 255, 99, 28, 3, 255, 97, 31, 4, 255, 98, 37, 5, 255, 102, 34, 5, 255, 101, 35, 8, 255, 105, 34, 5, 255, 111, 37, 1, 255, 110, 33, 2, 255, 136, 45, 4, 255, 164, 66, 5, 255, 168, 73, 4, 255, 162, 71, 0, 255, 158, 66, 2, 255, 153, 60, 3, 255, 156, 68, 1, 255, 164, 77, 0, 255, 162, 73, 3, 255, 163, 73, 5, 255, 160, 69, 5, 255, 2, 0, 14, 255, 3, 2, 25, 255, 2, 21, 69, 255, 3, 38, 85, 255, 4, 34, 75, 255, 2, 23, 65, 255, 0, 27, 60, 255, 1, 27, 53, 255, 2, 23, 50, 255, 1, 20, 46, 255, 1, 21, 37, 255, 2, 21, 36, 255, 4, 21, 42, 255, 2, 22, 55, 255, 1, 22, 50, 255, 1, 21, 34, 255, 3, 19, 41, 255, 1, 13, 42, 255, 0, 10, 34, 255, 0, 7, 24, 255, 2, 7, 17, 255, 4, 5, 10, 255, 2, 3, 7, 255, 0, 0, 4, 255, 0, 0, 1, 255, 2, 2, 0, 255, 1, 1, 4, 255, 2, 2, 4, 255, 1, 0, 3, 255, 5, 2, 3, 255, 3, 0, 9, 255, 15, 48, 175, 255, 50, 60, 86, 255, 19, 9, 0, 255, 18, 14, 29, 255, 32, 23, 60, 255, 2, 3, 4, 255, 4, 2, 2, 255, 2, 2, 0, 255, 2, 1, 1, 255, 2, 2, 2, 255, 2, 2, 1, 255, 1, 1, 0, 255, 2, 1, 0, 255, 2, 1, 1, 255, 2, 1, 3, 255, 4, 0, 1, 255, 4, 0, 0, 255, 2, 1, 0, 255, 2, 2, 0, 255, 6, 2, 1, 255, 11, 2, 0, 255, 10, 2, 1, 255, 9, 4, 1, 255, 11, 6, 1, 255, 12, 7, 1, 255, 10, 7, 2, 255, 11, 7, 4, 255, 11, 6, 1, 255, 14, 11, 1, 255, 22, 13, 4, 255, 19, 11, 4, 255, 18, 16, 4, 255, 30, 23, 7, 255, 40, 27, 12, 255, 48, 35, 20, 255, 48, 38, 26, 255, 42, 35, 38, 255, 46, 44, 52, 255, 45, 48, 42, 255, 45, 45, 34, 255, 47, 45, 32, 255, 49, 46, 32, 255, 49, 46, 28, 255, 52, 48, 26, 255, 44, 40, 14, 255, 47, 43, 11, 255, 50, 43, 16, 255, 58, 54, 13, 255, 60, 57, 7, 255, 57, 55, 4, 255, 64, 61, 9, 255, 72, 67, 11, 255, 69, 70, 6, 255, 66, 70, 10, 255, 75, 74, 12, 255, 82, 67, 3, 255, 66, 55, 6, 255, 81, 77, 4, 255, 92, 97, 11, 255, 90, 100, 17, 255, 86, 101, 18, 255, 94, 98, 9, 255, 91, 95, 4, 255, 128, 116, 23, 255, 115, 96, 9, 255, 90, 78, 4, 255, 93, 81, 3, 255, 91, 79, 1, 255, 92, 76, 2, 255, 96, 75, 1, 255, 92, 65, 11, 255, 94, 66, 13, 255, 99, 69, 2, 255, 93, 69, 2, 255, 85, 71, 2, 255, 90, 69, 1, 255, 100, 66, 2, 255, 103, 67, 6, 255, 100, 65, 2, 255, 105, 63, 2, 255, 107, 61, 3, 255, 107, 62, 7, 255, 108, 63, 7, 255, 115, 64, 5, 255, 106, 62, 7, 255, 99, 53, 2, 255, 120, 67, 6, 255, 143, 74, 8, 255, 143, 71, 3, 255, 150, 79, 2, 255, 150, 72, 12, 255, 158, 75, 9, 255, 138, 68, 0, 255, 179, 85, 5, 255, 134, 61, 5, 255, 147, 77, 15, 255, 169, 76, 6, 255, 129, 56, 1, 255, 145, 65, 15, 255, 157, 74, 10, 255, 121, 57, 0, 255, 122, 59, 4, 255, 167, 83, 5, 255, 136, 58, 6, 255, 104, 58, 7, 255, 123, 66, 6, 255, 151, 75, 5, 255, 126, 61, 6, 255, 123, 62, 10, 255, 123, 58, 5, 255, 120, 55, 6, 255, 112, 48, 4, 255, 105, 35, 4, 255, 119, 45, 6, 255, 140, 68, 16, 255, 151, 74, 8, 255, 176, 101, 6, 255, 184, 101, 25, 255, 198, 105, 24, 255, 200, 108, 7, 255, 189, 99, 15, 255, 197, 107, 22, 255, 199, 109, 13, 255, 199, 114, 24, 255, 202, 122, 19, 255, 197, 117, 10, 255, 196, 114, 14, 255, 192, 108, 15, 255, 190, 107, 16, 255, 171, 91, 12, 255, 176, 95, 15, 255, 181, 100, 12, 255, 174, 93, 14, 255, 157, 81, 13, 255, 145, 72, 10, 255, 129, 61, 5, 255, 129, 58, 13, 255, 134, 66, 4, 255, 128, 66, 1, 255, 129, 65, 3, 255, 133, 65, 5, 255, 132, 67, 4, 255, 136, 64, 9, 255, 131, 65, 7, 255, 125, 61, 11, 255, 125, 59, 14, 255, 124, 61, 7, 255, 121, 63, 8, 255, 125, 61, 11, 255, 128, 60, 11, 255, 127, 60, 9, 255, 133, 69, 15, 255, 133, 73, 3, 255, 136, 71, 9, 255, 140, 69, 7, 255, 143, 71, 7, 255, 133, 61, 14, 255, 136, 68, 8, 255, 143, 76, 9, 255, 150, 76, 12, 255, 147, 68, 13, 255, 133, 62, 10, 255, 154, 82, 18, 255, 173, 96, 5, 255, 176, 95, 7, 255, 170, 91, 7, 255, 183, 101, 9, 255, 182, 100, 11, 255, 182, 109, 21, 255, 193, 119, 17, 255, 194, 112, 7, 255, 188, 111, 10, 255, 197, 120, 15, 255, 195, 105, 4, 255, 187, 102, 8, 255, 196, 117, 19, 255, 197, 116, 7, 255, 211, 121, 13, 255, 199, 112, 9, 255, 160, 80, 8, 255, 171, 88, 10, 255, 208, 130, 11, 255, 213, 135, 13, 255, 215, 134, 18, 255, 193, 111, 14, 255, 193, 112, 15, 255, 206, 129, 9, 255, 207, 123, 10, 255, 193, 105, 6, 255, 211, 135, 8, 255, 215, 142, 10, 255, 215, 137, 19, 255, 210, 137, 9, 255, 212, 140, 5, 255, 217, 145, 10, 255, 216, 145, 18, 255, 213, 144, 9, 255, 219, 150, 11, 255, 216, 146, 13, 255, 215, 148, 12, 255, 218, 147, 15, 255, 210, 138, 10, 255, 203, 137, 9, 255, 217, 150, 8, 255, 222, 151, 10, 255, 220, 157, 9, 255, 223, 156, 3, 255, 221, 149, 12, 255, 208, 134, 11, 255, 200, 124, 17, 255, 206, 136, 7, 255, 221, 154, 4, 255, 211, 141, 8, 255, 212, 145, 3, 255, 217, 153, 4, 255, 223, 159, 8, 255, 214, 148, 13, 255, 205, 134, 2, 255, 208, 137, 9, 255, 209, 141, 8, 255, 207, 140, 4, 255, 203, 135, 6, 255, 201, 130, 6, 255, 208, 138, 10, 255, 203, 135, 2, 255, 203, 129, 4, 255, 204, 128, 8, 255, 211, 137, 11, 255, 214, 146, 6, 255, 213, 148, 2, 255, 211, 150, 0, 255, 217, 158, 4, 255, 226, 165, 1, 255, 229, 164, 3, 255, 224, 159, 12, 255, 219, 155, 10, 255, 212, 146, 6, 255, 205, 136, 8, 255, 202, 135, 0, 255, 209, 145, 10, 255, 201, 138, 4, 255, 202, 140, 3, 255, 196, 133, 4, 255, 209, 147, 6, 255, 220, 164, 9, 255, 221, 165, 3, 255, 225, 167, 0, 255, 222, 163, 0, 255, 223, 164, 2, 255, 232, 173, 10, 255, 230, 173, 4, 255, 227, 168, 2, 255, 224, 166, 5, 255, 226, 169, 2, 255, 225, 167, 1, 255, 227, 168, 5, 255, 226, 166, 1, 255, 225, 166, 2, 255, 217, 158, 4, 255, 203, 143, 0, 255, 191, 123, 4, 255, 188, 116, 4, 255, 180, 105, 7, 255, 171, 94, 0, 255, 162, 85, 5, 255, 161, 85, 3, 255, 159, 84, 8, 255, 161, 86, 5, 255, 160, 82, 4, 255, 174, 97, 2, 255, 177, 101, 5, 255, 158, 81, 1, 255, 160, 90, 4, 255, 181, 119, 12, 255, 182, 122, 9, 255, 189, 126, 7, 255, 186, 130, 12, 255, 185, 125, 18, 255, 184, 123, 12, 255, 177, 115, 8, 255, 162, 110, 4, 255, 164, 106, 6, 255, 193, 124, 4, 255, 199, 132, 6, 255, 197, 128, 2, 255, 189, 117, 4, 255, 185, 115, 2, 255, 196, 132, 0, 255, 202, 141, 2, 255, 200, 138, 1, 255, 197, 130, 5, 255, 194, 123, 5, 255, 196, 123, 6, 255, 199, 124, 2, 255, 202, 125, 2, 255, 204, 124, 8, 255, 204, 125, 5, 255, 204, 127, 13, 255, 204, 128, 18, 255, 205, 130, 17, 255, 207, 131, 23, 255, 209, 131, 19, 255, 208, 130, 13, 255, 201, 123, 16, 255, 199, 121, 11, 255, 202, 124, 6, 255, 198, 118, 0, 255, 195, 115, 4, 255, 193, 106, 8, 255, 185, 96, 0, 255, 184, 94, 2, 255, 181, 92, 4, 255, 170, 83, 2, 255, 163, 82, 5, 255, 161, 80, 6, 255, 153, 72, 3, 255, 144, 65, 2, 255, 141, 57, 6, 255, 144, 55, 5, 255, 145, 59, 5, 255, 132, 53, 3, 255, 128, 47, 1, 255, 129, 46, 1, 255, 127, 45, 2, 255, 123, 45, 3, 255, 120, 48, 5, 255, 119, 49, 5, 255, 112, 40, 3, 255, 119, 46, 7, 255, 126, 51, 7, 255, 120, 45, 1, 255, 118, 44, 5, 255, 113, 43, 5, 255, 110, 43, 2, 255, 118, 41, 2, 255, 111, 36, 2, 255, 109, 39, 4, 255, 116, 45, 6, 255, 115, 44, 2, 255, 114, 41, 1, 255, 113, 39, 5, 255, 119, 42, 9, 255, 122, 43, 6, 255, 114, 42, 3, 255, 111, 36, 1, 255, 117, 40, 5, 255, 111, 37, 4, 255, 105, 38, 3, 255, 104, 39, 5, 255, 97, 32, 3, 255, 92, 27, 0, 255, 96, 32, 5, 255, 100, 38, 9, 255, 102, 34, 1, 255, 112, 34, 6, 255, 110, 38, 6, 255, 106, 40, 1, 255, 113, 32, 6, 255, 126, 44, 8, 255, 156, 67, 3, 255, 169, 73, 1, 255, 164, 71, 3, 255, 164, 72, 2, 255, 166, 75, 3, 255, 166, 77, 5, 255, 161, 73, 3, 255, 158, 70, 2, 255, 159, 70, 3, 255, 155, 66, 2, 255, 3, 1, 21, 255, 1, 22, 67, 255, 4, 37, 85, 255, 1, 34, 86, 255, 2, 36, 83, 255, 2, 25, 62, 255, 1, 30, 68, 255, 1, 33, 70, 255, 1, 26, 65, 255, 3, 22, 58, 255, 2, 21, 40, 255, 2, 22, 40, 255, 0, 21, 50, 255, 3, 22, 56, 255, 2, 20, 58, 255, 0, 17, 46, 255, 1, 18, 46, 255, 5, 22, 39, 255, 1, 17, 33, 255, 0, 11, 22, 255, 1, 9, 19, 255, 0, 3, 15, 255, 2, 6, 12, 255, 1, 2, 5, 255, 0, 1, 4, 255, 2, 1, 8, 255, 3, 0, 12, 255, 1, 2, 5, 255, 1, 2, 8, 255, 2, 0, 0, 255, 4, 24, 143, 255, 39, 74, 159, 255, 30, 22, 0, 255, 22, 11, 8, 255, 23, 29, 58, 255, 7, 6, 18, 255, 4, 1, 0, 255, 1, 3, 3, 255, 1, 0, 1, 255, 0, 0, 0, 255, 1, 0, 0, 255, 4, 0, 1, 255, 3, 1, 3, 255, 3, 1, 2, 255, 1, 0, 1, 255, 1, 0, 0, 255, 4, 1, 1, 255, 5, 1, 1, 255, 5, 3, 0, 255, 6, 3, 0, 255, 10, 4, 1, 255, 13, 4, 1, 255, 11, 2, 1, 255, 10, 1, 0, 255, 12, 5, 0, 255, 13, 8, 0, 255, 12, 9, 1, 255, 13, 8, 4, 255, 13, 9, 1, 255, 21, 11, 2, 255, 22, 6, 0, 255, 14, 10, 1, 255, 21, 13, 4, 255, 26, 16, 6, 255, 33, 23, 14, 255, 40, 28, 11, 255, 50, 39, 30, 255, 51, 44, 45, 255, 56, 53, 61, 255, 50, 50, 57, 255, 47, 47, 42, 255, 55, 51, 43, 255, 51, 49, 37, 255, 51, 48, 34, 255, 53, 52, 24, 255, 56, 55, 15, 255, 46, 42, 10, 255, 46, 44, 10, 255, 51, 49, 11, 255, 56, 53, 7, 255, 63, 59, 2, 255, 66, 62, 1, 255, 69, 66, 4, 255, 68, 67, 5, 255, 65, 69, 5, 255, 61, 65, 5, 255, 80, 75, 26, 255, 147, 156, 84, 255, 170, 186, 75, 255, 183, 194, 64, 255, 160, 162, 21, 255, 106, 111, 7, 255, 100, 92, 8, 255, 86, 86, 6, 255, 102, 94, 8, 255, 116, 91, 13, 255, 89, 73, 3, 255, 90, 73, 2, 255, 89, 66, 1, 255, 93, 67, 6, 255, 98, 71, 1, 255, 96, 65, 10, 255, 97, 66, 10, 255, 94, 68, 1, 255, 89, 64, 1, 255, 86, 64, 3, 255, 89, 64, 3, 255, 96, 64, 3, 255, 97, 60, 5, 255, 100, 65, 5, 255, 101, 62, 2, 255, 104, 61, 2, 255, 106, 62, 3, 255, 109, 64, 7, 255, 110, 60, 4, 255, 109, 58, 1, 255, 113, 64, 1, 255, 108, 61, 7, 255, 108, 54, 6, 255, 108, 54, 8, 255, 106, 56, 0, 255, 109, 60, 9, 255, 105, 51, 9, 255, 119, 64, 7, 255, 128, 58, 5, 255, 102, 56, 9, 255, 140, 69, 8, 255, 110, 49, 6, 255, 84, 56, 3, 255, 131, 71, 5, 255, 139, 62, 3, 255, 119, 64, 3, 255, 120, 65, 3, 255, 121, 63, 3, 255, 123, 69, 4, 255, 120, 62, 3, 255, 136, 68, 11, 255, 131, 62, 3, 255, 131, 56, 5, 255, 147, 66, 16, 255, 107, 38, 2, 255, 95, 34, 8, 255, 119, 61, 9, 255, 154, 78, 8, 255, 183, 102, 7, 255, 186, 100, 7, 255, 200, 115, 11, 255, 200, 112, 9, 255, 205, 122, 16, 255, 211, 126, 30, 255, 214, 127, 21, 255, 204, 129, 16, 255, 211, 132, 28, 255, 214, 128, 10, 255, 209, 123, 10, 255, 202, 116, 10, 255, 200, 115, 5, 255, 198, 110, 9, 255, 198, 112, 15, 255, 191, 107, 15, 255, 190, 104, 11, 255, 182, 101, 15, 255, 178, 98, 8, 255, 189, 99, 15, 255, 182, 90, 15, 255, 179, 98, 17, 255, 171, 92, 6, 255, 141, 69, 10, 255, 123, 65, 8, 255, 125, 66, 5, 255, 125, 61, 6, 255, 126, 65, 10, 255, 123, 63, 3, 255, 126, 65, 7, 255, 129, 63, 7, 255, 132, 67, 5, 255, 126, 64, 6, 255, 132, 70, 9, 255, 138, 72, 4, 255, 128, 61, 7, 255, 127, 65, 5, 255, 138, 73, 13, 255, 146, 75, 13, 255, 142, 67, 6, 255, 143, 72, 10, 255, 150, 76, 17, 255, 151, 74, 6, 255, 146, 72, 12, 255, 140, 67, 6, 255, 156, 83, 7, 255, 167, 88, 10, 255, 171, 88, 7, 255, 157, 93, 11, 255, 167, 103, 14, 255, 179, 105, 11, 255, 190, 110, 20, 255, 194, 124, 15, 255, 194, 125, 14, 255, 199, 122, 9, 255, 202, 122, 8, 255, 203, 127, 12, 255, 197, 127, 22, 255, 202, 128, 22, 255, 200, 119, 12, 255, 193, 110, 17, 255, 193, 121, 15, 255, 197, 127, 5, 255, 204, 130, 4, 255, 202, 123, 13, 255, 184, 103, 18, 255, 184, 112, 9, 255, 202, 134, 14, 255, 207, 140, 7, 255, 205, 134, 16, 255, 206, 136, 7, 255, 205, 133, 10, 255, 204, 134, 13, 255, 208, 138, 2, 255, 204, 120, 8, 255, 181, 93, 3, 255, 201, 126, 8, 255, 205, 133, 12, 255, 206, 131, 13, 255, 206, 135, 7, 255, 212, 136, 10, 255, 206, 131, 7, 255, 208, 134, 14, 255, 210, 139, 14, 255, 209, 137, 11, 255, 211, 138, 16, 255, 211, 140, 11, 255, 204, 134, 14, 255, 203, 137, 10, 255, 213, 147, 6, 255, 211, 147, 3, 255, 212, 145, 4, 255, 215, 145, 7, 255, 212, 141, 10, 255, 205, 132, 7, 255, 209, 135, 21, 255, 212, 141, 8, 255, 216, 146, 6, 255, 212, 143, 7, 255, 207, 134, 12, 255, 214, 148, 10, 255, 216, 156, 4, 255, 217, 159, 2, 255, 220, 161, 0, 255, 218, 153, 5, 255, 216, 150, 9, 255, 219, 158, 2, 255, 225, 164, 1, 255, 227, 164, 6, 255, 224, 163, 3, 255, 225, 162, 6, 255, 218, 153, 4, 255, 213, 147, 3, 255, 209, 141, 6, 255, 208, 142, 9, 255, 213, 149, 8, 255, 216, 154, 5, 255, 222, 161, 3, 255, 224, 165, 0, 255, 226, 163, 2, 255, 218, 148, 3, 255, 216, 149, 2, 255, 217, 154, 3, 255, 202, 136, 0, 255, 203, 132, 7, 255, 205, 138, 2, 255, 205, 140, 5, 255, 198, 131, 4, 255, 193, 127, 11, 255, 207, 145, 10, 255, 220, 163, 2, 255, 220, 164, 2, 255, 219, 163, 2, 255, 220, 163, 3, 255, 225, 167, 4, 255, 224, 167, 0, 255, 226, 168, 0, 255, 224, 165, 2, 255, 221, 160, 4, 255, 221, 160, 1, 255, 223, 164, 1, 255, 222, 163, 4, 255, 227, 167, 11, 255, 224, 164, 4, 255, 225, 165, 4, 255, 216, 160, 0, 255, 214, 158, 1, 255, 209, 149, 1, 255, 193, 122, 9, 255, 173, 95, 1, 255, 164, 91, 0, 255, 166, 92, 6, 255, 159, 87, 2, 255, 165, 94, 2, 255, 177, 106, 0, 255, 165, 93, 3, 255, 165, 90, 6, 255, 170, 94, 10, 255, 157, 76, 2, 255, 172, 93, 4, 255, 192, 128, 2, 255, 178, 116, 4, 255, 182, 116, 15, 255, 184, 124, 13, 255, 187, 128, 14, 255, 182, 118, 10, 255, 183, 116, 4, 255, 184, 121, 3, 255, 182, 121, 10, 255, 180, 113, 7, 255, 198, 128, 15, 255, 191, 125, 5, 255, 180, 115, 4, 255, 195, 134, 4, 255, 203, 146, 1, 255, 195, 135, 8, 255, 198, 129, 5, 255, 196, 128, 3, 255, 196, 126, 1, 255, 199, 123, 16, 255, 199, 120, 15, 255, 202, 123, 4, 255, 205, 126, 3, 255, 207, 129, 3, 255, 205, 128, 13, 255, 206, 129, 22, 255, 208, 132, 18, 255, 206, 132, 10, 255, 205, 131, 8, 255, 205, 127, 12, 255, 206, 126, 16, 255, 203, 123, 14, 255, 202, 121, 13, 255, 194, 110, 5, 255, 190, 105, 2, 255, 185, 97, 4, 255, 179, 89, 1, 255, 180, 91, 1, 255, 176, 88, 0, 255, 171, 85, 1, 255, 170, 87, 4, 255, 161, 81, 4, 255, 154, 72, 3, 255, 155, 67, 6, 255, 148, 61, 5, 255, 142, 57, 3, 255, 143, 57, 7, 255, 138, 52, 6, 255, 132, 51, 4, 255, 129, 47, 2, 255, 126, 43, 0, 255, 126, 46, 2, 255, 122, 47, 1, 255, 124, 47, 2, 255, 121, 47, 5, 255, 121, 47, 3, 255, 126, 50, 2, 255, 123, 46, 0, 255, 121, 47, 4, 255, 117, 46, 5, 255, 119, 47, 6, 255, 122, 44, 5, 255, 123, 46, 3, 255, 125, 44, 3, 255, 123, 47, 8, 255, 117, 41, 2, 255, 120, 47, 3, 255, 124, 50, 2, 255, 132, 45, 0, 255, 126, 43, 2, 255, 107, 45, 2, 255, 107, 39, 1, 255, 109, 37, 2, 255, 120, 39, 5, 255, 113, 37, 5, 255, 110, 40, 5, 255, 103, 35, 0, 255, 105, 36, 2, 255, 111, 38, 3, 255, 116, 41, 4, 255, 113, 39, 1, 255, 112, 37, 1, 255, 110, 44, 0, 255, 117, 50, 3, 255, 129, 48, 8, 255, 134, 54, 5, 255, 159, 73, 2, 255, 173, 78, 5, 255, 168, 74, 7, 255, 163, 72, 4, 255, 163, 73, 3, 255, 163, 74, 4, 255, 160, 71, 4, 255, 157, 68, 1, 255, 157, 69, 0, 255, 158, 69, 0, 255, 4, 17, 63, 255, 0, 38, 72, 255, 2, 31, 79, 255, 2, 30, 75, 255, 4, 33, 76, 255, 3, 24, 72, 255, 0, 32, 72, 255, 5, 30, 69, 255, 4, 14, 43, 255, 5, 18, 37, 255, 3, 23, 52, 255, 0, 21, 58, 255, 6, 26, 50, 255, 1, 22, 45, 255, 2, 22, 47, 255, 0, 18, 32, 255, 1, 17, 40, 255, 3, 16, 40, 255, 3, 16, 35, 255, 2, 11, 33, 255, 3, 11, 26, 255, 0, 7, 12, 255, 3, 8, 12, 255, 2, 4, 12, 255, 2, 1, 14, 255, 4, 0, 13, 255, 3, 1, 8, 255, 0, 0, 7, 255, 1, 0, 0, 255, 0, 9, 94, 255, 14, 78, 210, 255, 37, 39, 28, 255, 10, 7, 0, 255, 24, 25, 55, 255, 10, 18, 33, 255, 4, 0, 4, 255, 3, 0, 6, 255, 1, 0, 3, 255, 2, 1, 1, 255, 2, 1, 1, 255, 3, 0, 1, 255, 4, 0, 1, 255, 5, 2, 3, 255, 4, 2, 1, 255, 2, 1, 0, 255, 4, 1, 0, 255, 6, 3, 2, 255, 7, 3, 2, 255, 8, 3, 0, 255, 9, 2, 0, 255, 11, 3, 1, 255, 9, 3, 0, 255, 10, 4, 1, 255, 12, 4, 2, 255, 15, 6, 2, 255, 19, 10, 2, 255, 18, 10, 2, 255, 17, 7, 1, 255, 20, 10, 3, 255, 25, 9, 1, 255, 26, 11, 3, 255, 20, 15, 2, 255, 17, 9, 0, 255, 24, 16, 5, 255, 32, 24, 9, 255, 38, 27, 22, 255, 35, 31, 29, 255, 45, 49, 39, 255, 60, 55, 55, 255, 58, 49, 53, 255, 55, 50, 46, 255, 55, 51, 43, 255, 55, 54, 31, 255, 54, 53, 33, 255, 58, 55, 36, 255, 55, 52, 18, 255, 54, 50, 16, 255, 53, 53, 11, 255, 62, 56, 6, 255, 63, 56, 4, 255, 66, 64, 12, 255, 62, 62, 6, 255, 67, 65, 2, 255, 79, 68, 11, 255, 77, 69, 7, 255, 65, 55, 0, 255, 136, 127, 45, 255, 227, 240, 103, 255, 239, 242, 88, 255, 240, 230, 23, 255, 154, 133, 6, 255, 88, 75, 17, 255, 84, 77, 5, 255, 79, 71, 10, 255, 92, 79, 0, 255, 117, 81, 3, 255, 83, 68, 1, 255, 86, 66, 2, 255, 94, 66, 6, 255, 97, 68, 4, 255, 92, 63, 1, 255, 92, 63, 3, 255, 98, 66, 2, 255, 103, 71, 7, 255, 110, 71, 5, 255, 120, 69, 7, 255, 116, 71, 6, 255, 111, 71, 2, 255, 123, 73, 5, 255, 123, 67, 2, 255, 119, 62, 5, 255, 123, 66, 9, 255, 121, 65, 7, 255, 119, 63, 3, 255, 124, 65, 0, 255, 127, 70, 11, 255, 128, 71, 4, 255, 130, 69, 4, 255, 132, 64, 7, 255, 132, 61, 8, 255, 131, 60, 2, 255, 119, 57, 7, 255, 113, 58, 6, 255, 122, 58, 15, 255, 126, 57, 6, 255, 120, 63, 3, 255, 118, 53, 6, 255, 116, 57, 7, 255, 126, 60, 6, 255, 106, 54, 7, 255, 120, 59, 8, 255, 107, 52, 3, 255, 106, 41, 2, 255, 107, 40, 6, 255, 102, 41, 8, 255, 111, 37, 4, 255, 112, 44, 10, 255, 122, 47, 4, 255, 172, 76, 12, 255, 153, 61, 5, 255, 120, 43, 3, 255, 113, 42, 10, 255, 142, 59, 9, 255, 171, 76, 6, 255, 181, 87, 13, 255, 200, 99, 13, 255, 193, 94, 4, 255, 202, 108, 6, 255, 215, 127, 6, 255, 207, 121, 15, 255, 209, 123, 15, 255, 212, 129, 19, 255, 208, 119, 8, 255, 210, 116, 13, 255, 206, 117, 11, 255, 201, 111, 15, 255, 201, 110, 14, 255, 202, 113, 11, 255, 205, 119, 10, 255, 199, 115, 10, 255, 201, 112, 10, 255, 188, 100, 20, 255, 195, 113, 4, 255, 188, 103, 2, 255, 179, 90, 7, 255, 189, 104, 24, 255, 185, 106, 4, 255, 183, 101, 8, 255, 172, 95, 6, 255, 159, 83, 13, 255, 152, 75, 11, 255, 146, 78, 6, 255, 133, 72, 5, 255, 126, 66, 10, 255, 127, 67, 5, 255, 130, 67, 15, 255, 137, 69, 7, 255, 149, 76, 6, 255, 151, 78, 8, 255, 135, 68, 17, 255, 132, 66, 9, 255, 150, 83, 9, 255, 141, 66, 10, 255, 149, 71, 16, 255, 163, 81, 9, 255, 170, 90, 17, 255, 168, 95, 9, 255, 190, 116, 17, 255, 191, 112, 12, 255, 180, 100, 1, 255, 191, 109, 14, 255, 195, 114, 9, 255, 190, 109, 14, 255, 186, 102, 10, 255, 198, 119, 11, 255, 201, 124, 20, 255, 201, 124, 23, 255, 205, 128, 18, 255, 198, 123, 18, 255, 200, 125, 7, 255, 210, 134, 18, 255, 207, 135, 22, 255, 205, 132, 9, 255, 205, 129, 8, 255, 205, 129, 21, 255, 205, 133, 18, 255, 210, 131, 12, 255, 205, 123, 7, 255, 192, 110, 8, 255, 205, 126, 13, 255, 214, 136, 10, 255, 207, 136, 9, 255, 207, 135, 8, 255, 209, 137, 11, 255, 208, 135, 7, 255, 209, 135, 7, 255, 210, 133, 15, 255, 211, 135, 17, 255, 189, 103, 11, 255, 180, 91, 9, 255, 202, 125, 24, 255, 205, 133, 18, 255, 207, 133, 9, 255, 205, 133, 10, 255, 203, 128, 13, 255, 204, 130, 18, 255, 205, 136, 4, 255, 207, 136, 7, 255, 209, 138, 19, 255, 204, 133, 13, 255, 205, 134, 17, 255, 206, 135, 17, 255, 209, 138, 9, 255, 210, 137, 3, 255, 212, 141, 13, 255, 216, 147, 13, 255, 212, 144, 10, 255, 210, 142, 9, 255, 210, 142, 9, 255, 214, 148, 2, 255, 212, 144, 8, 255, 211, 143, 6, 255, 207, 138, 9, 255, 212, 144, 9, 255, 219, 151, 11, 255, 220, 153, 4, 255, 218, 155, 1, 255, 218, 155, 5, 255, 216, 153, 7, 255, 215, 154, 4, 255, 221, 160, 8, 255, 222, 157, 13, 255, 219, 155, 5, 255, 223, 163, 0, 255, 224, 160, 6, 255, 223, 155, 7, 255, 216, 149, 7, 255, 210, 146, 2, 255, 212, 151, 0, 255, 223, 164, 3, 255, 228, 168, 2, 255, 232, 169, 3, 255, 229, 170, 2, 255, 222, 163, 2, 255, 210, 146, 2, 255, 211, 141, 4, 255, 215, 144, 4, 255, 211, 138, 11, 255, 190, 117, 6, 255, 202, 136, 5, 255, 200, 133, 3, 255, 194, 125, 1, 255, 206, 143, 6, 255, 218, 159, 5, 255, 217, 159, 5, 255, 219, 163, 1, 255, 222, 164, 3, 255, 216, 161, 5, 255, 220, 164, 7, 255, 221, 163, 3, 255, 221, 159, 5, 255, 219, 154, 6, 255, 217, 153, 3, 255, 221, 159, 0, 255, 219, 157, 0, 255, 216, 154, 4, 255, 216, 156, 6, 255, 216, 158, 3, 255, 219, 160, 5, 255, 222, 163, 10, 255, 214, 158, 0, 255, 214, 157, 2, 255, 207, 142, 8, 255, 178, 102, 6, 255, 168, 95, 1, 255, 175, 102, 6, 255, 175, 114, 5, 255, 178, 121, 4, 255, 187, 123, 5, 255, 181, 114, 9, 255, 161, 84, 11, 255, 161, 87, 5, 255, 167, 90, 9, 255, 166, 85, 4, 255, 184, 107, 9, 255, 192, 127, 5, 255, 185, 129, 4, 255, 194, 135, 4, 255, 181, 130, 5, 255, 181, 126, 15, 255, 184, 117, 6, 255, 182, 117, 10, 255, 188, 121, 10, 255, 187, 117, 5, 255, 179, 111, 4, 255, 178, 112, 6, 255, 191, 132, 7, 255, 203, 148, 3, 255, 199, 142, 1, 255, 202, 139, 12, 255, 204, 135, 8, 255, 201, 132, 5, 255, 199, 128, 5, 255, 200, 126, 9, 255, 200, 124, 9, 255, 204, 126, 5, 255, 207, 129, 5, 255, 208, 130, 7, 255, 205, 128, 6, 255, 206, 131, 7, 255, 209, 133, 14, 255, 206, 129, 15, 255, 204, 127, 14, 255, 204, 126, 16, 255, 204, 123, 16, 255, 197, 114, 13, 255, 195, 109, 13, 255, 189, 103, 10, 255, 186, 97, 6, 255, 178, 93, 2, 255, 180, 93, 8, 255, 178, 91, 2, 255, 175, 86, 3, 255, 173, 86, 7, 255, 170, 83, 3, 255, 162, 76, 3, 255, 156, 72, 4, 255, 153, 70, 6, 255, 150, 67, 1, 255, 147, 61, 2, 255, 145, 58, 7, 255, 136, 53, 2, 255, 135, 51, 4, 255, 137, 52, 4, 255, 134, 49, 3, 255, 132, 51, 5, 255, 131, 54, 6, 255, 126, 49, 1, 255, 129, 53, 3, 255, 131, 53, 2, 255, 131, 49, 1, 255, 128, 49, 4, 255, 123, 45, 5, 255, 123, 46, 2, 255, 124, 50, 1, 255, 125, 53, 3, 255, 132, 53, 2, 255, 137, 50, 1, 255, 127, 50, 2, 255, 127, 48, 1, 255, 127, 49, 1, 255, 126, 47, 2, 255, 128, 44, 1, 255, 119, 45, 5, 255, 113, 42, 2, 255, 111, 44, 3, 255, 114, 40, 3, 255, 117, 38, 1, 255, 106, 34, 2, 255, 117, 39, 7, 255, 115, 36, 4, 255, 113, 38, 4, 255, 112, 40, 1, 255, 113, 44, 0, 255, 119, 48, 2, 255, 119, 55, 7, 255, 122, 51, 0, 255, 139, 58, 5, 255, 138, 58, 3, 255, 144, 63, 0, 255, 160, 72, 3, 255, 161, 73, 3, 255, 157, 69, 0, 255, 156, 68, 0, 255, 156, 69, 0, 255, 156, 68, 0, 255, 160, 73, 3, 255, 167, 79, 3, 255, 164, 76, 1, 255, 164, 77, 0, 255, 2, 32, 82, 255, 3, 34, 82, 255, 1, 28, 73, 255, 4, 24, 70, 255, 2, 25, 58, 255, 0, 20, 50, 255, 2, 20, 44, 255, 3, 15, 31, 255, 1, 8, 32, 255, 2, 19, 55, 255, 1, 25, 66, 255, 1, 22, 50, 255, 3, 19, 32, 255, 2, 22, 52, 255, 2, 21, 50, 255, 3, 20, 42, 255, 2, 17, 38, 255, 2, 14, 38, 255, 3, 16, 32, 255, 3, 13, 30, 255, 3, 15, 31, 255, 3, 13, 28, 255, 3, 7, 24, 255, 2, 1, 16, 255, 2, 1, 11, 255, 2, 0, 8, 255, 1, 3, 5, 255, 4, 1, 1, 255, 4, 5, 57, 255, 15, 71, 238, 255, 41, 66, 87, 255, 18, 11, 0, 255, 32, 13, 45, 255, 19, 26, 78, 255, 0, 3, 0, 255, 3, 4, 3, 255, 1, 2, 1, 255, 2, 4, 1, 255, 3, 1, 0, 255, 3, 2, 0, 255, 5, 1, 0, 255, 4, 0, 0, 255, 5, 1, 0, 255, 5, 1, 0, 255, 3, 1, 0, 255, 5, 1, 0, 255, 4, 2, 0, 255, 4, 1, 0, 255, 8, 2, 0, 255, 12, 1, 0, 255, 13, 3, 1, 255, 9, 3, 0, 255, 12, 7, 3, 255, 14, 6, 3, 255, 16, 7, 2, 255, 21, 11, 2, 255, 23, 9, 2, 255, 17, 7, 0, 255, 31, 12, 6, 255, 30, 14, 6, 255, 21, 14, 3, 255, 28, 14, 4, 255, 22, 16, 3, 255, 28, 18, 4, 255, 26, 22, 7, 255, 28, 26, 9, 255, 40, 28, 15, 255, 55, 41, 33, 255, 53, 49, 57, 255, 59, 54, 57, 255, 63, 59, 45, 255, 57, 54, 42, 255, 60, 58, 32, 255, 63, 61, 31, 255, 61, 55, 43, 255, 59, 52, 36, 255, 56, 53, 16, 255, 59, 56, 4, 255, 70, 59, 8, 255, 71, 60, 7, 255, 61, 61, 5, 255, 62, 64, 7, 255, 70, 64, 9, 255, 71, 68, 2, 255, 84, 68, 3, 255, 93, 74, 5, 255, 102, 90, 9, 255, 97, 95, 7, 255, 100, 83, 7, 255, 92, 67, 2, 255, 77, 55, 6, 255, 84, 63, 4, 255, 83, 70, 5, 255, 76, 63, 4, 255, 87, 75, 7, 255, 111, 75, 3, 255, 84, 61, 2, 255, 82, 57, 6, 255, 95, 68, 3, 255, 99, 71, 1, 255, 115, 78, 9, 255, 136, 87, 10, 255, 145, 84, 4, 255, 162, 92, 5, 255, 172, 100, 6, 255, 159, 88, 3, 255, 158, 82, 1, 255, 167, 85, 7, 255, 162, 81, 10, 255, 158, 75, 4, 255, 153, 69, 3, 255, 155, 68, 8, 255, 155, 71, 8, 255, 157, 76, 6, 255, 155, 75, 2, 255, 157, 67, 9, 255, 160, 73, 5, 255, 158, 71, 2, 255, 155, 70, 1, 255, 161, 69, 1, 255, 163, 72, 5, 255, 164, 67, 6, 255, 159, 67, 3, 255, 160, 67, 1, 255, 160, 72, 5, 255, 149, 64, 2, 255, 152, 67, 6, 255, 161, 76, 6, 255, 142, 70, 4, 255, 151, 74, 8, 255, 126, 49, 12, 255, 107, 41, 10, 255, 119, 48, 5, 255, 128, 50, 7, 255, 132, 52, 4, 255, 144, 61, 9, 255, 155, 75, 8, 255, 177, 92, 12, 255, 178, 83, 9, 255, 163, 70, 3, 255, 144, 58, 9, 255, 129, 47, 6, 255, 168, 72, 6, 255, 182, 85, 5, 255, 180, 91, 16, 255, 168, 71, 9, 255, 148, 50, 8, 255, 166, 59, 5, 255, 174, 70, 10, 255, 193, 100, 9, 255, 196, 106, 13, 255, 205, 118, 7, 255, 207, 117, 7, 255, 206, 115, 9, 255, 195, 110, 4, 255, 186, 99, 14, 255, 191, 105, 16, 255, 201, 116, 11, 255, 201, 117, 15, 255, 198, 116, 17, 255, 200, 117, 7, 255, 197, 112, 10, 255, 185, 98, 14, 255, 177, 92, 18, 255, 186, 105, 7, 255, 191, 108, 5, 255, 191, 104, 7, 255, 185, 102, 14, 255, 179, 99, 8, 255, 179, 95, 8, 255, 182, 92, 8, 255, 171, 87, 11, 255, 154, 81, 4, 255, 146, 75, 8, 255, 139, 67, 7, 255, 145, 72, 14, 255, 158, 87, 8, 255, 152, 80, 11, 255, 162, 89, 14, 255, 165, 89, 19, 255, 177, 102, 11, 255, 183, 103, 19, 255, 185, 107, 9, 255, 187, 114, 13, 255, 186, 115, 25, 255, 193, 123, 22, 255, 191, 118, 16, 255, 180, 95, 20, 255, 179, 90, 6, 255, 166, 75, 7, 255, 178, 92, 21, 255, 187, 109, 8, 255, 190, 106, 17, 255, 201, 114, 17, 255, 206, 131, 12, 255, 200, 129, 18, 255, 208, 128, 24, 255, 210, 128, 16, 255, 208, 136, 14, 255, 204, 137, 8, 255, 210, 137, 13, 255, 215, 135, 10, 255, 211, 135, 10, 255, 209, 136, 12, 255, 210, 135, 8, 255, 206, 135, 11, 255, 205, 132, 18, 255, 199, 123, 21, 255, 211, 133, 15, 255, 212, 135, 2, 255, 207, 133, 11, 255, 205, 128, 14, 255, 205, 127, 13, 255, 204, 129, 0, 255, 209, 132, 10, 255, 212, 136, 13, 255, 210, 134, 10, 255, 214, 137, 16, 255, 190, 102, 12, 255, 190, 101, 14, 255, 212, 138, 19, 255, 209, 137, 14, 255, 208, 135, 5, 255, 206, 132, 8, 255, 208, 131, 9, 255, 212, 137, 4, 255, 211, 134, 13, 255, 209, 131, 12, 255, 209, 132, 6, 255, 210, 133, 3, 255, 207, 135, 7, 255, 207, 135, 16, 255, 212, 135, 10, 255, 203, 124, 4, 255, 199, 120, 11, 255, 210, 140, 10, 255, 213, 148, 6, 255, 217, 151, 18, 255, 218, 151, 14, 255, 216, 149, 7, 255, 216, 149, 8, 255, 214, 146, 13, 255, 209, 140, 11, 255, 212, 144, 1, 255, 214, 144, 4, 255, 216, 143, 6, 255, 215, 142, 5, 255, 213, 143, 10, 255, 214, 150, 5, 255, 217, 154, 2, 255, 220, 152, 7, 255, 214, 144, 6, 255, 216, 149, 3, 255, 217, 154, 6, 255, 214, 147, 7, 255, 219, 147, 4, 255, 220, 153, 7, 255, 219, 155, 1, 255, 223, 160, 1, 255, 227, 166, 4, 255, 227, 165, 0, 255, 227, 163, 2, 255, 222, 157, 9, 255, 215, 155, 3, 255, 218, 158, 2, 255, 213, 143, 6, 255, 200, 121, 3, 255, 198, 122, 6, 255, 203, 132, 14, 255, 203, 134, 8, 255, 195, 126, 4, 255, 201, 137, 1, 255, 215, 154, 3, 255, 214, 155, 1, 255, 218, 159, 4, 255, 221, 163, 3, 255, 221, 163, 5, 255, 220, 163, 11, 255, 215, 157, 5, 255, 212, 152, 0, 255, 214, 152, 6, 255, 211, 148, 3, 255, 218, 153, 3, 255, 217, 153, 3, 255, 216, 151, 2, 255, 218, 155, 3, 255, 215, 154, 2, 255, 211, 151, 3, 255, 215, 153, 3, 255, 216, 155, 4, 255, 214, 155, 1, 255, 205, 148, 3, 255, 206, 146, 2, 255, 187, 118, 5, 255, 171, 98, 5, 255, 176, 97, 6, 255, 185, 117, 6, 255, 187, 120, 6, 255, 181, 109, 0, 255, 171, 101, 3, 255, 186, 109, 2, 255, 184, 108, 3, 255, 192, 124, 6, 255, 187, 119, 3, 255, 165, 86, 10, 255, 174, 97, 15, 255, 192, 128, 4, 255, 195, 128, 5, 255, 194, 143, 17, 255, 217, 178, 13, 255, 221, 170, 11, 255, 199, 128, 9, 255, 187, 110, 2, 255, 177, 107, 4, 255, 172, 105, 6, 255, 192, 129, 12, 255, 207, 150, 8, 255, 201, 143, 1, 255, 202, 138, 6, 255, 201, 134, 3, 255, 203, 133, 5, 255, 200, 128, 6, 255, 198, 124, 12, 255, 201, 127, 5, 255, 201, 128, 5, 255, 202, 128, 9, 255, 204, 128, 8, 255, 207, 129, 17, 255, 208, 131, 11, 255, 206, 132, 4, 255, 207, 130, 10, 255, 205, 128, 13, 255, 205, 127, 13, 255, 203, 123, 9, 255, 199, 117, 6, 255, 196, 113, 6, 255, 193, 107, 6, 255, 187, 99, 5, 255, 184, 95, 5, 255, 181, 90, 4, 255, 182, 90, 7, 255, 178, 89, 1, 255, 174, 87, 4, 255, 169, 84, 4, 255, 163, 79, 1, 255, 161, 76, 5, 255, 154, 69, 2, 255, 149, 69, 0, 255, 148, 67, 4, 255, 147, 64, 3, 255, 144, 61, 1, 255, 134, 54, 1, 255, 136, 53, 3, 255, 135, 49, 1, 255, 133, 49, 0, 255, 132, 52, 1, 255, 132, 55, 3, 255, 132, 54, 5, 255, 137, 59, 6, 255, 137, 57, 1, 255, 136, 52, 4, 255, 133, 50, 8, 255, 123, 43, 3, 255, 128, 47, 3, 255, 132, 50, 1, 255, 125, 50, 3, 255, 118, 44, 2, 255, 126, 47, 6, 255, 129, 46, 0, 255, 134, 48, 3, 255, 124, 45, 7, 255, 116, 37, 2, 255, 121, 43, 2, 255, 122, 45, 5, 255, 124, 37, 2, 255, 109, 34, 0, 255, 113, 38, 8, 255, 116, 41, 7, 255, 115, 39, 3, 255, 120, 39, 5, 255, 117, 37, 4, 255, 116, 40, 4, 255, 124, 51, 5, 255, 130, 54, 2, 255, 137, 58, 6, 255, 134, 58, 7, 255, 135, 59, 2, 255, 139, 59, 2, 255, 142, 62, 2, 255, 153, 67, 6, 255, 153, 67, 2, 255, 148, 64, 2, 255, 142, 56, 3, 255, 144, 57, 3, 255, 151, 64, 1, 255, 158, 71, 1, 255, 168, 80, 7, 255, 171, 83, 2, 255, 170, 81, 1, 255, 169, 80, 0, 255, 1, 21, 67, 255, 0, 26, 68, 255, 6, 28, 64, 255, 3, 27, 69, 255, 1, 32, 77, 255, 3, 15, 39, 255, 3, 2, 5, 255, 1, 7, 20, 255, 5, 22, 56, 255, 3, 25, 61, 255, 1, 21, 46, 255, 2, 23, 38, 255, 2, 23, 39, 255, 1, 19, 46, 255, 2, 17, 46, 255, 1, 14, 50, 255, 3, 18, 40, 255, 1, 15, 37, 255, 1, 19, 34, 255, 4, 15, 28, 255, 1, 12, 29, 255, 4, 16, 38, 255, 2, 7, 28, 255, 0, 0, 13, 255, 2, 1, 6, 255, 1, 2, 7, 255, 3, 1, 8, 255, 4, 0, 18, 255, 3, 46, 200, 255, 39, 91, 148, 255, 35, 15, 0, 255, 29, 6, 23, 255, 16, 24, 141, 255, 2, 4, 36, 255, 8, 1, 0, 255, 5, 2, 4, 255, 8, 4, 3, 255, 3, 2, 3, 255, 3, 1, 1, 255, 5, 1, 0, 255, 3, 2, 0, 255, 2, 1, 0, 255, 4, 1, 0, 255, 6, 2, 1, 255, 6, 1, 0, 255, 6, 1, 1, 255, 3, 2, 0, 255, 4, 1, 1, 255, 11, 3, 1, 255, 14, 3, 2, 255, 15, 5, 2, 255, 13, 5, 0, 255, 15, 7, 3, 255, 16, 6, 4, 255, 17, 7, 1, 255, 20, 10, 1, 255, 20, 10, 1, 255, 24, 11, 1, 255, 31, 16, 4, 255, 20, 13, 2, 255, 17, 14, 2, 255, 32, 19, 6, 255, 39, 20, 5, 255, 29, 18, 0, 255, 28, 23, 4, 255, 29, 22, 6, 255, 52, 33, 10, 255, 57, 36, 19, 255, 50, 45, 33, 255, 57, 55, 50, 255, 64, 60, 55, 255, 62, 58, 42, 255, 65, 59, 37, 255, 67, 60, 36, 255, 66, 59, 37, 255, 66, 60, 39, 255, 58, 54, 22, 255, 66, 55, 12, 255, 69, 60, 10, 255, 69, 60, 5, 255, 65, 62, 7, 255, 66, 62, 6, 255, 70, 63, 5, 255, 84, 68, 2, 255, 95, 70, 11, 255, 83, 70, 2, 255, 76, 65, 4, 255, 70, 57, 12, 255, 78, 62, 7, 255, 79, 64, 4, 255, 84, 63, 4, 255, 85, 63, 2, 255, 82, 65, 3, 255, 85, 61, 1, 255, 89, 67, 8, 255, 104, 73, 5, 255, 91, 70, 6, 255, 123, 85, 18, 255, 151, 93, 11, 255, 163, 95, 4, 255, 169, 93, 8, 255, 175, 91, 5, 255, 173, 92, 9, 255, 170, 91, 7, 255, 175, 99, 11, 255, 168, 93, 11, 255, 153, 77, 5, 255, 161, 76, 5, 255, 172, 81, 3, 255, 163, 75, 2, 255, 157, 70, 2, 255, 154, 71, 1, 255, 158, 74, 1, 255, 165, 76, 3, 255, 163, 72, 0, 255, 158, 69, 10, 255, 154, 70, 1, 255, 154, 63, 7, 255, 153, 66, 6, 255, 155, 68, 0, 255, 151, 67, 2, 255, 154, 71, 4, 255, 158, 79, 8, 255, 162, 86, 6, 255, 148, 72, 2, 255, 149, 65, 9, 255, 156, 81, 11, 255, 177, 95, 9, 255, 185, 101, 9, 255, 186, 103, 9, 255, 175, 85, 10, 255, 163, 68, 4, 255, 162, 62, 3, 255, 165, 68, 3, 255, 179, 91, 8, 255, 178, 87, 6, 255, 179, 83, 11, 255, 181, 90, 8, 255, 169, 76, 4, 255, 167, 74, 4, 255, 151, 66, 6, 255, 177, 95, 17, 255, 188, 98, 10, 255, 187, 93, 6, 255, 194, 98, 11, 255, 154, 65, 10, 255, 151, 69, 10, 255, 148, 60, 8, 255, 153, 68, 20, 255, 186, 96, 13, 255, 184, 85, 3, 255, 156, 66, 10, 255, 173, 87, 18, 255, 197, 104, 9, 255, 185, 93, 9, 255, 177, 86, 13, 255, 196, 114, 7, 255, 198, 114, 5, 255, 200, 114, 10, 255, 201, 114, 16, 255, 201, 117, 11, 255, 195, 104, 12, 255, 196, 98, 26, 255, 184, 91, 8, 255, 181, 94, 14, 255, 191, 111, 16, 255, 185, 104, 14, 255, 187, 109, 3, 255, 192, 111, 3, 255, 179, 95, 5, 255, 173, 95, 7, 255, 178, 96, 21, 255, 186, 103, 7, 255, 180, 101, 7, 255, 182, 100, 11, 255, 183, 104, 15, 255, 186, 111, 14, 255, 187, 109, 18, 255, 187, 112, 8, 255, 193, 110, 18, 255, 196, 115, 18, 255, 194, 119, 13, 255, 196, 119, 15, 255, 198, 118, 18, 255, 200, 123, 23, 255, 203, 126, 26, 255, 189, 107, 8, 255, 173, 86, 16, 255, 179, 94, 7, 255, 193, 110, 21, 255, 201, 123, 19, 255, 203, 129, 16, 255, 209, 132, 14, 255, 210, 129, 16, 255, 211, 128, 27, 255, 210, 130, 23, 255, 211, 135, 16, 255, 212, 134, 12, 255, 210, 133, 18, 255, 215, 139, 12, 255, 214, 134, 16, 255, 196, 114, 11, 255, 212, 131, 18, 255, 218, 139, 17, 255, 213, 134, 4, 255, 212, 133, 11, 255, 207, 129, 14, 255, 208, 131, 13, 255, 208, 130, 9, 255, 208, 126, 7, 255, 211, 126, 8, 255, 209, 123, 6, 255, 210, 124, 7, 255, 212, 127, 4, 255, 214, 131, 6, 255, 216, 133, 12, 255, 214, 131, 12, 255, 212, 130, 11, 255, 205, 120, 9, 255, 200, 113, 5, 255, 205, 131, 1, 255, 211, 138, 5, 255, 212, 134, 8, 255, 210, 133, 8, 255, 213, 139, 12, 255, 214, 141, 7, 255, 213, 140, 5, 255, 212, 136, 17, 255, 212, 135, 11, 255, 210, 130, 15, 255, 199, 123, 11, 255, 206, 128, 8, 255, 210, 135, 6, 255, 215, 144, 21, 255, 222, 150, 22, 255, 219, 148, 6, 255, 214, 149, 9, 255, 214, 144, 17, 255, 219, 151, 12, 255, 218, 149, 9, 255, 214, 144, 6, 255, 215, 143, 13, 255, 215, 146, 6, 255, 215, 142, 6, 255, 212, 137, 8, 255, 210, 136, 15, 255, 210, 140, 4, 255, 213, 144, 9, 255, 213, 146, 2, 255, 210, 142, 3, 255, 209, 138, 1, 255, 211, 137, 3, 255, 210, 141, 4, 255, 214, 148, 9, 255, 213, 147, 6, 255, 210, 133, 6, 255, 205, 135, 8, 255, 216, 148, 5, 255, 221, 155, 6, 255, 220, 153, 6, 255, 217, 150, 5, 255, 213, 146, 9, 255, 207, 141, 6, 255, 215, 149, 5, 255, 220, 154, 3, 255, 214, 145, 8, 255, 194, 123, 7, 255, 196, 127, 10, 255, 198, 129, 6, 255, 192, 121, 1, 255, 204, 136, 9, 255, 212, 150, 7, 255, 212, 151, 4, 255, 216, 156, 2, 255, 219, 159, 0, 255, 217, 157, 7, 255, 217, 158, 8, 255, 221, 162, 8, 255, 219, 160, 5, 255, 216, 158, 4, 255, 219, 161, 9, 255, 217, 157, 10, 255, 219, 156, 11, 255, 218, 153, 4, 255, 216, 149, 5, 255, 217, 152, 4, 255, 222, 162, 3, 255, 217, 160, 2, 255, 217, 158, 2, 255, 215, 151, 1, 255, 217, 155, 5, 255, 207, 150, 7, 255, 201, 143, 7, 255, 199, 138, 2, 255, 175, 101, 7, 255, 170, 85, 2, 255, 167, 100, 2, 255, 169, 105, 8, 255, 175, 102, 2, 255, 168, 96, 5, 255, 185, 101, 9, 255, 171, 93, 6, 255, 190, 114, 4, 255, 189, 115, 3, 255, 181, 107, 2, 255, 165, 85, 14, 255, 171, 92, 8, 255, 202, 149, 4, 255, 228, 185, 7, 255, 232, 163, 13, 255, 207, 128, 4, 255, 192, 123, 6, 255, 191, 121, 5, 255, 195, 129, 4, 255, 197, 135, 4, 255, 206, 147, 9, 255, 205, 146, 2, 255, 200, 137, 0, 255, 201, 130, 4, 255, 201, 125, 5, 255, 201, 123, 6, 255, 202, 125, 1, 255, 202, 126, 1, 255, 205, 129, 12, 255, 206, 131, 13, 255, 206, 132, 5, 255, 205, 134, 1, 255, 207, 133, 7, 255, 208, 134, 8, 255, 208, 131, 10, 255, 207, 126, 12, 255, 205, 126, 6, 255, 203, 123, 7, 255, 199, 120, 5, 255, 193, 112, 6, 255, 192, 106, 5, 255, 190, 104, 3, 255, 186, 100, 4, 255, 184, 97, 9, 255, 181, 92, 10, 255, 179, 90, 4, 255, 180, 90, 7, 255, 176, 86, 3, 255, 168, 80, 0, 255, 166, 77, 2, 255, 163, 75, 1, 255, 159, 73, 1, 255, 155, 70, 1, 255, 150, 66, 5, 255, 145, 63, 4, 255, 140, 60, 3, 255, 136, 54, 6, 255, 132, 53, 0, 255, 137, 54, 1, 255, 136, 56, 3, 255, 134, 55, 3, 255, 135, 55, 4, 255, 137, 55, 4, 255, 132, 55, 3, 255, 133, 57, 2, 255, 140, 58, 5, 255, 131, 49, 1, 255, 127, 48, 3, 255, 131, 50, 5, 255, 125, 42, 1, 255, 121, 43, 5, 255, 119, 42, 1, 255, 119, 45, 3, 255, 120, 39, 3, 255, 119, 38, 3, 255, 123, 41, 6, 255, 134, 47, 5, 255, 124, 42, 3, 255, 118, 38, 0, 255, 109, 34, 4, 255, 109, 33, 2, 255, 124, 44, 2, 255, 123, 51, 2, 255, 118, 49, 2, 255, 119, 42, 1, 255, 114, 37, 0, 255, 118, 45, 3, 255, 135, 57, 8, 255, 145, 62, 3, 255, 138, 62, 0, 255, 142, 56, 1, 255, 152, 63, 4, 255, 148, 62, 6, 255, 153, 68, 5, 255, 154, 68, 3, 255, 139, 55, 2, 255, 135, 53, 1, 255, 144, 61, 1, 255, 152, 67, 4, 255, 162, 74, 9, 255, 166, 77, 5, 255, 171, 79, 4, 255, 170, 81, 1, 255, 171, 81, 2, 255, 167, 77, 2, 255, 6, 19, 56, 255, 1, 22, 50, 255, 3, 22, 60, 255, 1, 26, 69, 255, 1, 26, 57, 255, 2, 6, 18, 255, 2, 0, 0, 255, 2, 4, 21, 255, 2, 14, 39, 255, 1, 22, 42, 255, 3, 22, 49, 255, 1, 16, 49, 255, 3, 22, 44, 255, 2, 18, 57, 255, 0, 18, 54, 255, 1, 20, 48, 255, 2, 21, 41, 255, 2, 18, 48, 255, 0, 18, 43, 255, 3, 13, 35, 255, 2, 13, 31, 255, 2, 17, 25, 255, 4, 5, 14, 255, 3, 0, 14, 255, 1, 0, 7, 255, 1, 1, 13, 255, 6, 0, 0, 255, 1, 14, 138, 255, 27, 82, 189, 255, 39, 30, 17, 255, 9, 8, 0, 255, 14, 21, 159, 255, 5, 17, 106, 255, 7, 1, 0, 255, 11, 5, 3, 255, 1, 4, 1, 255, 3, 1, 3, 255, 2, 3, 2, 255, 4, 0, 0, 255, 6, 0, 0, 255, 4, 1, 0, 255, 3, 2, 0, 255, 6, 3, 2, 255, 7, 5, 3, 255, 7, 2, 1, 255, 9, 2, 1, 255, 7, 2, 0, 255, 8, 3, 1, 255, 11, 3, 2, 255, 15, 4, 3, 255, 14, 5, 1, 255, 17, 8, 1, 255, 22, 9, 3, 255, 21, 7, 2, 255, 17, 8, 1, 255, 19, 9, 2, 255, 19, 9, 0, 255, 22, 10, 0, 255, 24, 13, 1, 255, 26, 16, 4, 255, 26, 18, 4, 255, 28, 16, 2, 255, 40, 16, 2, 255, 31, 17, 1, 255, 35, 17, 4, 255, 41, 23, 11, 255, 51, 32, 10, 255, 52, 37, 12, 255, 59, 47, 28, 255, 68, 56, 37, 255, 64, 58, 53, 255, 60, 59, 51, 255, 64, 60, 51, 255, 68, 61, 43, 255, 67, 63, 26, 255, 65, 60, 34, 255, 65, 60, 28, 255, 67, 54, 13, 255, 74, 57, 10, 255, 70, 63, 3, 255, 70, 62, 11, 255, 65, 63, 9, 255, 77, 69, 1, 255, 93, 70, 5, 255, 80, 66, 2, 255, 81, 73, 5, 255, 81, 70, 2, 255, 79, 65, 7, 255, 82, 64, 3, 255, 77, 67, 5, 255, 79, 61, 2, 255, 87, 62, 4, 255, 71, 59, 7, 255, 79, 63, 9, 255, 113, 79, 11, 255, 151, 98, 11, 255, 168, 104, 4, 255, 179, 105, 13, 255, 177, 92, 7, 255, 173, 85, 1, 255, 172, 83, 2, 255, 179, 89, 4, 255, 174, 85, 4, 255, 159, 82, 3, 255, 174, 103, 10, 255, 188, 111, 16, 255, 178, 100, 16, 255, 160, 82, 16, 255, 136, 58, 5, 255, 149, 70, 3, 255, 150, 73, 9, 255, 148, 64, 7, 255, 159, 65, 1, 255, 158, 72, 7, 255, 149, 67, 7, 255, 151, 72, 1, 255, 153, 76, 7, 255, 147, 64, 6, 255, 129, 53, 6, 255, 141, 64, 5, 255, 170, 88, 12, 255, 185, 104, 21, 255, 183, 103, 19, 255, 162, 72, 8, 255, 156, 65, 2, 255, 171, 76, 10, 255, 178, 87, 9, 255, 191, 98, 6, 255, 193, 96, 6, 255, 194, 101, 8, 255, 190, 103, 14, 255, 182, 86, 9, 255, 179, 81, 9, 255, 166, 77, 5, 255, 173, 88, 7, 255, 166, 86, 6, 255, 157, 79, 8, 255, 152, 74, 0, 255, 134, 57, 14, 255, 141, 69, 17, 255, 148, 74, 5, 255, 148, 71, 6, 255, 134, 62, 10, 255, 137, 68, 7, 255, 134, 61, 10, 255, 126, 56, 5, 255, 143, 76, 7, 255, 140, 70, 7, 255, 131, 61, 16, 255, 141, 65, 11, 255, 154, 77, 20, 255, 130, 59, 5, 255, 148, 70, 7, 255, 173, 82, 11, 255, 175, 87, 6, 255, 178, 94, 8, 255, 189, 104, 11, 255, 195, 109, 15, 255, 196, 108, 19, 255, 197, 113, 14, 255, 203, 116, 17, 255, 201, 115, 11, 255, 186, 98, 14, 255, 184, 96, 9, 255, 195, 109, 12, 255, 199, 117, 10, 255, 191, 110, 7, 255, 185, 102, 10, 255, 174, 92, 13, 255, 166, 87, 25, 255, 183, 105, 24, 255, 190, 112, 10, 255, 190, 112, 8, 255, 178, 94, 16, 255, 173, 92, 9, 255, 183, 102, 13, 255, 190, 108, 19, 255, 199, 115, 21, 255, 191, 104, 5, 255, 167, 86, 11, 255, 187, 106, 21, 255, 207, 125, 24, 255, 207, 126, 13, 255, 206, 127, 16, 255, 205, 130, 12, 255, 212, 135, 23, 255, 204, 124, 25, 255, 206, 126, 22, 255, 217, 141, 18, 255, 216, 135, 24, 255, 213, 135, 10, 255, 216, 134, 22, 255, 215, 133, 30, 255, 212, 130, 23, 255, 214, 131, 7, 255, 217, 134, 6, 255, 214, 137, 20, 255, 215, 140, 21, 255, 213, 137, 18, 255, 216, 139, 10, 255, 205, 122, 11, 255, 185, 101, 10, 255, 209, 130, 20, 255, 215, 138, 16, 255, 216, 136, 9, 255, 215, 135, 8, 255, 219, 137, 17, 255, 217, 136, 19, 255, 210, 132, 14, 255, 208, 128, 11, 255, 213, 128, 11, 255, 202, 111, 17, 255, 200, 110, 4, 255, 203, 114, 9, 255, 202, 117, 10, 255, 194, 111, 7, 255, 201, 121, 7, 255, 208, 128, 11, 255, 214, 130, 14, 255, 209, 123, 14, 255, 206, 124, 14, 255, 213, 136, 10, 255, 213, 132, 9, 255, 215, 132, 7, 255, 208, 126, 14, 255, 191, 106, 8, 255, 201, 117, 8, 255, 204, 120, 11, 255, 204, 119, 8, 255, 202, 120, 1, 255, 211, 130, 14, 255, 211, 134, 17, 255, 216, 142, 8, 255, 223, 145, 8, 255, 222, 150, 6, 255, 219, 151, 3, 255, 222, 149, 11, 255, 218, 146, 18, 255, 216, 145, 11, 255, 219, 147, 5, 255, 219, 148, 10, 255, 217, 145, 21, 255, 214, 143, 9, 255, 215, 140, 3, 255, 209, 135, 9, 255, 210, 136, 17, 255, 209, 138, 9, 255, 208, 137, 11, 255, 209, 138, 3, 255, 212, 140, 8, 255, 208, 135, 10, 255, 211, 139, 8, 255, 213, 143, 8, 255, 209, 142, 5, 255, 210, 142, 0, 255, 213, 140, 5, 255, 208, 140, 6, 255, 214, 149, 0, 255, 217, 147, 4, 255, 213, 143, 4, 255, 211, 146, 1, 255, 205, 137, 8, 255, 214, 146, 20, 255, 211, 140, 7, 255, 216, 137, 6, 255, 194, 113, 11, 255, 176, 102, 8, 255, 180, 113, 1, 255, 186, 119, 1, 255, 200, 130, 8, 255, 214, 148, 7, 255, 209, 146, 3, 255, 213, 153, 3, 255, 217, 159, 2, 255, 217, 157, 2, 255, 215, 155, 6, 255, 219, 160, 4, 255, 221, 163, 2, 255, 223, 162, 5, 255, 221, 160, 5, 255, 219, 158, 4, 255, 218, 154, 8, 255, 219, 150, 10, 255, 220, 151, 7, 255, 217, 150, 4, 255, 218, 151, 1, 255, 220, 155, 9, 255, 213, 150, 6, 255, 202, 128, 5, 255, 189, 111, 4, 255, 192, 117, 0, 255, 207, 139, 9, 255, 199, 134, 2, 255, 206, 143, 2, 255, 203, 138, 10, 255, 177, 104, 4, 255, 176, 110, 8, 255, 168, 103, 8, 255, 169, 101, 9, 255, 165, 99, 1, 255, 160, 81, 8, 255, 161, 80, 5, 255, 174, 90, 5, 255, 181, 98, 7, 255, 177, 95, 8, 255, 164, 91, 8, 255, 168, 93, 8, 255, 204, 135, 2, 255, 219, 154, 10, 255, 195, 120, 19, 255, 185, 109, 11, 255, 178, 107, 6, 255, 193, 119, 5, 255, 202, 131, 4, 255, 208, 146, 7, 255, 204, 145, 3, 255, 199, 139, 2, 255, 200, 135, 6, 255, 200, 129, 5, 255, 198, 121, 1, 255, 200, 122, 9, 255, 202, 126, 9, 255, 204, 128, 5, 255, 206, 129, 13, 255, 209, 133, 14, 255, 207, 135, 8, 255, 206, 131, 12, 255, 204, 128, 8, 255, 206, 131, 9, 255, 207, 129, 14, 255, 206, 126, 8, 255, 204, 126, 1, 255, 200, 120, 13, 255, 195, 112, 11, 255, 194, 110, 8, 255, 193, 106, 9, 255, 187, 100, 4, 255, 187, 100, 3, 255, 185, 98, 4, 255, 180, 92, 12, 255, 181, 95, 12, 255, 181, 92, 15, 255, 174, 80, 4, 255, 168, 78, 1, 255, 167, 74, 4, 255, 163, 69, 0, 255, 155, 67, 3, 255, 148, 67, 10, 255, 139, 61, 1, 255, 137, 56, 0, 255, 138, 54, 4, 255, 137, 57, 3, 255, 135, 58, 0, 255, 141, 60, 4, 255, 147, 63, 5, 255, 141, 58, 4, 255, 135, 53, 4, 255, 135, 53, 5, 255, 132, 52, 5, 255, 136, 56, 5, 255, 141, 58, 1, 255, 128, 49, 1, 255, 119, 43, 3, 255, 122, 40, 3, 255, 126, 44, 3, 255, 125, 50, 1, 255, 136, 52, 1, 255, 134, 51, 4, 255, 122, 47, 5, 255, 117, 46, 3, 255, 124, 45, 0, 255, 140, 54, 2, 255, 125, 41, 2, 255, 117, 36, 4, 255, 111, 42, 7, 255, 116, 40, 6, 255, 121, 39, 2, 255, 120, 42, 2, 255, 120, 47, 1, 255, 120, 48, 2, 255, 112, 44, 5, 255, 114, 48, 5, 255, 135, 61, 7, 255, 145, 61, 2, 255, 146, 66, 5, 255, 154, 69, 3, 255, 155, 67, 0, 255, 156, 69, 4, 255, 156, 69, 3, 255, 159, 63, 2, 255, 152, 63, 5, 255, 156, 73, 7, 255, 172, 86, 4, 255, 175, 86, 0, 255, 175, 84, 3, 255, 168, 78, 3, 255, 169, 79, 2, 255, 174, 81, 1, 255, 171, 78, 3, 255, 166, 72, 2, 255, 2, 14, 41, 255, 1, 24, 49, 255, 0, 29, 72, 255, 4, 21, 60, 255, 5, 16, 37, 255, 3, 13, 42, 255, 4, 6, 18, 255, 1, 0, 0, 255, 1, 6, 13, 255, 3, 15, 32, 255, 1, 17, 43, 255, 2, 19, 49, 255, 1, 16, 39, 255, 1, 19, 47, 255, 4, 26, 58, 255, 2, 26, 46, 255, 1, 20, 35, 255, 1, 16, 36, 255, 0, 14, 39, 255, 1, 13, 32, 255, 3, 14, 35, 255, 5, 9, 27, 255, 3, 0, 12, 255, 3, 1, 13, 255, 3, 1, 11, 255, 1, 0, 0, 255, 0, 8, 61, 255, 28, 62, 183, 255, 39, 45, 32, 255, 21, 3, 0, 255, 23, 22, 121, 255, 6, 21, 164, 255, 9, 0, 8, 255, 6, 1, 6, 255, 4, 3, 0, 255, 2, 1, 0, 255, 2, 0, 1, 255, 4, 2, 2, 255, 6, 1, 1, 255, 6, 1, 0, 255, 3, 0, 0, 255, 3, 2, 2, 255, 8, 6, 5, 255, 7, 4, 2, 255, 5, 1, 0, 255, 11, 2, 0, 255, 12, 3, 1, 255, 11, 2, 0, 255, 12, 3, 1, 255, 14, 4, 2, 255, 15, 4, 3, 255, 17, 8, 1, 255, 28, 10, 2, 255, 26, 8, 1, 255, 19, 9, 3, 255, 20, 10, 4, 255, 23, 12, 2, 255, 26, 16, 4, 255, 26, 15, 3, 255, 31, 16, 5, 255, 36, 17, 5, 255, 35, 15, 2, 255, 33, 17, 2, 255, 38, 20, 7, 255, 28, 17, 1, 255, 34, 23, 3, 255, 46, 32, 12, 255, 54, 33, 7, 255, 61, 42, 12, 255, 60, 50, 36, 255, 66, 59, 43, 255, 73, 65, 51, 255, 70, 66, 49, 255, 68, 65, 42, 255, 69, 63, 41, 255, 69, 60, 54, 255, 65, 62, 31, 255, 69, 60, 9, 255, 75, 61, 9, 255, 70, 62, 8, 255, 68, 65, 5, 255, 79, 70, 4, 255, 94, 69, 5, 255, 83, 66, 6, 255, 83, 66, 1, 255, 89, 65, 5, 255, 83, 65, 8, 255, 78, 65, 6, 255, 80, 60, 2, 255, 81, 60, 2, 255, 94, 71, 6, 255, 105, 77, 4, 255, 111, 78, 8, 255, 154, 98, 16, 255, 178, 99, 14, 255, 173, 95, 7, 255, 179, 93, 6, 255, 173, 85, 9, 255, 172, 82, 16, 255, 174, 84, 10, 255, 177, 87, 13, 255, 176, 89, 9, 255, 176, 89, 1, 255, 163, 80, 3, 255, 157, 84, 4, 255, 179, 104, 4, 255, 195, 115, 11, 255, 189, 114, 20, 255, 175, 107, 20, 255, 162, 102, 16, 255, 152, 94, 16, 255, 147, 80, 4, 255, 152, 68, 5, 255, 144, 71, 10, 255, 145, 76, 7, 255, 164, 88, 5, 255, 177, 102, 15, 255, 180, 100, 15, 255, 164, 80, 8, 255, 178, 95, 17, 255, 200, 113, 16, 255, 195, 103, 5, 255, 187, 89, 9, 255, 179, 79, 7, 255, 188, 99, 5, 255, 195, 102, 4, 255, 190, 105, 10, 255, 190, 101, 11, 255, 186, 99, 3, 255, 179, 95, 3, 255, 163, 82, 2, 255, 149, 72, 9, 255, 141, 71, 3, 255, 118, 45, 5, 255, 112, 36, 11, 255, 108, 40, 8, 255, 123, 62, 9, 255, 128, 62, 3, 255, 126, 58, 10, 255, 118, 53, 7, 255, 122, 52, 8, 255, 115, 47, 7, 255, 107, 44, 6, 255, 111, 48, 10, 255, 120, 51, 9, 255, 129, 59, 6, 255, 120, 52, 14, 255, 118, 54, 8, 255, 125, 63, 7, 255, 116, 54, 4, 255, 110, 44, 10, 255, 123, 53, 7, 255, 124, 56, 6, 255, 113, 47, 12, 255, 131, 65, 5, 255, 161, 87, 3, 255, 171, 89, 12, 255, 189, 108, 15, 255, 191, 112, 11, 255, 191, 110, 15, 255, 197, 112, 7, 255, 194, 113, 7, 255, 194, 114, 20, 255, 195, 117, 7, 255, 203, 123, 16, 255, 198, 115, 12, 255, 188, 108, 17, 255, 181, 104, 25, 255, 187, 111, 16, 255, 189, 113, 9, 255, 178, 98, 15, 255, 176, 96, 18, 255, 195, 119, 14, 255, 195, 119, 10, 255, 189, 110, 12, 255, 191, 115, 3, 255, 198, 124, 14, 255, 204, 128, 23, 255, 199, 119, 15, 255, 178, 99, 15, 255, 201, 122, 13, 255, 210, 127, 13, 255, 212, 129, 21, 255, 214, 134, 32, 255, 213, 134, 17, 255, 212, 130, 22, 255, 211, 130, 13, 255, 216, 137, 10, 255, 213, 130, 24, 255, 212, 130, 15, 255, 214, 134, 14, 255, 213, 134, 9, 255, 213, 131, 23, 255, 216, 135, 22, 255, 213, 131, 20, 255, 215, 135, 9, 255, 215, 137, 18, 255, 206, 129, 16, 255, 201, 128, 14, 255, 207, 133, 18, 255, 197, 115, 12, 255, 196, 111, 10, 255, 218, 138, 25, 255, 217, 136, 23, 255, 216, 135, 13, 255, 214, 139, 10, 255, 214, 139, 13, 255, 215, 139, 14, 255, 217, 139, 13, 255, 217, 139, 12, 255, 218, 139, 12, 255, 218, 141, 19, 255, 214, 131, 11, 255, 194, 100, 11, 255, 190, 96, 10, 255, 209, 125, 13, 255, 206, 126, 6, 255, 211, 133, 10, 255, 215, 140, 4, 255, 220, 141, 11, 255, 218, 139, 10, 255, 214, 140, 13, 255, 214, 139, 10, 255, 216, 136, 3, 255, 210, 133, 16, 255, 197, 117, 11, 255, 199, 119, 10, 255, 201, 121, 14, 255, 200, 124, 14, 255, 212, 140, 18, 255, 217, 145, 15, 255, 215, 141, 18, 255, 219, 142, 12, 255, 218, 135, 7, 255, 220, 140, 0, 255, 220, 143, 9, 255, 216, 143, 6, 255, 220, 148, 7, 255, 216, 144, 8, 255, 218, 146, 15, 255, 221, 149, 15, 255, 219, 146, 7, 255, 217, 144, 6, 255, 218, 140, 3, 255, 215, 136, 1, 255, 211, 132, 3, 255, 209, 131, 7, 255, 214, 136, 10, 255, 212, 134, 6, 255, 211, 135, 5, 255, 210, 138, 5, 255, 213, 141, 6, 255, 213, 142, 6, 255, 211, 141, 2, 255, 213, 141, 0, 255, 211, 138, 0, 255, 209, 138, 5, 255, 209, 140, 4, 255, 212, 138, 2, 255, 195, 115, 13, 255, 192, 122, 5, 255, 205, 137, 4, 255, 209, 140, 7, 255, 201, 127, 9, 255, 198, 120, 7, 255, 171, 93, 1, 255, 167, 89, 13, 255, 186, 111, 10, 255, 191, 116, 4, 255, 207, 140, 6, 255, 215, 150, 3, 255, 213, 149, 5, 255, 213, 152, 4, 255, 215, 157, 1, 255, 215, 158, 7, 255, 219, 159, 9, 255, 219, 156, 4, 255, 210, 145, 0, 255, 211, 146, 1, 255, 210, 147, 0, 255, 214, 148, 1, 255, 210, 143, 2, 255, 215, 151, 4, 255, 220, 154, 6, 255, 217, 148, 1, 255, 210, 135, 13, 255, 199, 122, 13, 255, 192, 111, 4, 255, 194, 106, 4, 255, 187, 99, 9, 255, 181, 95, 5, 255, 182, 100, 4, 255, 183, 105, 2, 255, 177, 100, 6, 255, 192, 121, 4, 255, 189, 120, 0, 255, 181, 112, 4, 255, 171, 107, 3, 255, 163, 102, 9, 255, 165, 98, 17, 255, 169, 101, 12, 255, 165, 96, 0, 255, 165, 87, 6, 255, 171, 94, 3, 255, 168, 82, 15, 255, 171, 93, 13, 255, 187, 112, 0, 255, 169, 97, 1, 255, 191, 123, 19, 255, 202, 133, 12, 255, 197, 127, 8, 255, 198, 128, 4, 255, 199, 131, 1, 255, 199, 131, 11, 255, 204, 137, 8, 255, 202, 140, 0, 255, 198, 135, 2, 255, 200, 132, 8, 255, 200, 128, 4, 255, 199, 125, 3, 255, 198, 127, 4, 255, 201, 127, 8, 255, 203, 127, 9, 255, 205, 129, 5, 255, 209, 135, 7, 255, 206, 133, 10, 255, 206, 129, 11, 255, 204, 128, 4, 255, 206, 128, 15, 255, 206, 127, 16, 255, 205, 124, 12, 255, 203, 123, 9, 255, 199, 119, 15, 255, 194, 110, 13, 255, 194, 110, 4, 255, 195, 110, 7, 255, 188, 102, 5, 255, 190, 104, 4, 255, 187, 100, 1, 255, 179, 94, 5, 255, 182, 95, 14, 255, 168, 79, 15, 255, 161, 73, 9, 255, 165, 78, 1, 255, 162, 76, 1, 255, 158, 70, 4, 255, 151, 63, 7, 255, 147, 68, 8, 255, 137, 61, 2, 255, 133, 52, 3, 255, 148, 62, 11, 255, 150, 67, 2, 255, 145, 62, 4, 255, 146, 63, 3, 255, 147, 64, 1, 255, 138, 55, 0, 255, 136, 55, 4, 255, 139, 57, 5, 255, 133, 59, 3, 255, 130, 55, 4, 255, 133, 47, 7, 255, 120, 42, 3, 255, 113, 42, 2, 255, 123, 44, 3, 255, 132, 47, 6, 255, 142, 60, 4, 255, 140, 58, 2, 255, 137, 47, 3, 255, 133, 51, 4, 255, 136, 58, 5, 255, 120, 48, 3, 255, 116, 40, 1, 255, 119, 40, 3, 255, 126, 49, 7, 255, 130, 52, 4, 255, 122, 43, 1, 255, 116, 40, 2, 255, 123, 47, 4, 255, 129, 48, 0, 255, 124, 45, 1, 255, 117, 43, 5, 255, 120, 49, 2, 255, 142, 66, 2, 255, 154, 67, 3, 255, 150, 66, 5, 255, 154, 69, 1, 255, 156, 66, 0, 255, 161, 71, 7, 255, 163, 73, 5, 255, 166, 73, 3, 255, 175, 85, 2, 255, 181, 92, 7, 255, 175, 81, 4, 255, 174, 79, 0, 255, 176, 81, 6, 255, 171, 78, 6, 255, 173, 82, 3, 255, 175, 83, 0, 255, 171, 78, 1, 255, 169, 76, 2, 255, 0, 22, 53, 255, 1, 24, 55, 255, 4, 29, 63, 255, 3, 29, 65, 255, 1, 21, 55, 255, 1, 22, 61, 255, 5, 21, 59, 255, 4, 12, 37, 255, 2, 2, 7, 255, 4, 6, 23, 255, 3, 15, 40, 255, 0, 20, 36, 255, 2, 23, 35, 255, 3, 21, 41, 255, 1, 21, 46, 255, 1, 21, 37, 255, 3, 21, 33, 255, 3, 18, 34, 255, 1, 15, 31, 255, 3, 13, 28, 255, 5, 3, 24, 255, 1, 0, 13, 255, 4, 4, 11, 255, 2, 1, 12, 255, 1, 3, 9, 255, 0, 0, 24, 255, 27, 40, 142, 255, 67, 63, 56, 255, 33, 11, 0, 255, 16, 18, 55, 255, 11, 21, 164, 255, 1, 7, 33, 255, 6, 1, 2, 255, 6, 2, 2, 255, 7, 4, 0, 255, 4, 2, 0, 255, 5, 2, 1, 255, 6, 2, 1, 255, 4, 1, 0, 255, 4, 3, 1, 255, 3, 2, 0, 255, 5, 3, 2, 255, 9, 5, 2, 255, 10, 2, 0, 255, 12, 2, 1, 255, 11, 3, 1, 255, 14, 6, 4, 255, 13, 5, 3, 255, 15, 5, 3, 255, 14, 4, 2, 255, 15, 5, 3, 255, 15, 4, 1, 255, 29, 11, 5, 255, 27, 11, 3, 255, 19, 9, 1, 255, 24, 12, 5, 255, 27, 13, 4, 255, 28, 15, 1, 255, 25, 13, 1, 255, 27, 13, 1, 255, 37, 14, 6, 255, 38, 17, 5, 255, 35, 19, 2, 255, 41, 24, 4, 255, 40, 20, 3, 255, 46, 21, 3, 255, 51, 31, 7, 255, 58, 33, 10, 255, 58, 39, 18, 255, 61, 44, 28, 255, 64, 55, 32, 255, 74, 65, 44, 255, 73, 64, 47, 255, 70, 67, 41, 255, 74, 65, 44, 255, 73, 63, 44, 255, 71, 61, 45, 255, 73, 58, 23, 255, 71, 60, 0, 255, 68, 62, 8, 255, 81, 72, 5, 255, 103, 79, 8, 255, 89, 70, 2, 255, 79, 71, 5, 255, 83, 66, 3, 255, 81, 65, 5, 255, 78, 63, 4, 255, 76, 58, 7, 255, 83, 61, 6, 255, 100, 68, 6, 255, 126, 83, 14, 255, 160, 92, 9, 255, 177, 88, 13, 255, 188, 91, 7, 255, 179, 84, 7, 255, 169, 84, 6, 255, 171, 81, 4, 255, 169, 82, 4, 255, 168, 83, 2, 255, 171, 87, 5, 255, 173, 91, 8, 255, 167, 83, 8, 255, 161, 84, 6, 255, 166, 84, 7, 255, 150, 73, 3, 255, 144, 76, 2, 255, 174, 102, 6, 255, 203, 125, 11, 255, 221, 137, 25, 255, 217, 135, 20, 255, 216, 137, 18, 255, 200, 118, 10, 255, 179, 90, 7, 255, 180, 101, 6, 255, 192, 112, 12, 255, 190, 109, 17, 255, 201, 118, 18, 255, 201, 119, 15, 255, 200, 112, 9, 255, 206, 113, 17, 255, 193, 105, 9, 255, 189, 100, 0, 255, 181, 96, 6, 255, 175, 91, 15, 255, 168, 90, 14, 255, 158, 79, 5, 255, 154, 74, 3, 255, 149, 70, 10, 255, 128, 58, 3, 255, 132, 58, 3, 255, 128, 59, 12, 255, 107, 43, 13, 255, 112, 52, 6, 255, 133, 65, 8, 255, 130, 64, 12, 255, 160, 93, 12, 255, 158, 75, 5, 255, 145, 60, 1, 255, 158, 65, 5, 255, 158, 60, 7, 255, 157, 68, 7, 255, 175, 96, 13, 255, 172, 82, 9, 255, 155, 59, 7, 255, 152, 58, 4, 255, 147, 63, 7, 255, 142, 63, 6, 255, 142, 68, 2, 255, 144, 70, 8, 255, 134, 59, 11, 255, 131, 57, 8, 255, 127, 57, 8, 255, 118, 52, 7, 255, 111, 46, 9, 255, 112, 44, 9, 255, 123, 55, 6, 255, 144, 71, 14, 255, 168, 90, 14, 255, 188, 108, 3, 255, 193, 110, 13, 255, 194, 112, 10, 255, 191, 110, 5, 255, 195, 113, 16, 255, 198, 118, 13, 255, 202, 121, 16, 255, 194, 109, 12, 255, 195, 110, 20, 255, 198, 115, 22, 255, 189, 106, 13, 255, 191, 110, 4, 255, 190, 109, 12, 255, 194, 111, 20, 255, 199, 117, 12, 255, 200, 116, 16, 255, 202, 118, 15, 255, 208, 121, 26, 255, 202, 119, 19, 255, 204, 124, 3, 255, 210, 129, 14, 255, 204, 121, 19, 255, 208, 121, 17, 255, 212, 124, 17, 255, 209, 125, 19, 255, 201, 121, 7, 255, 201, 117, 16, 255, 199, 111, 20, 255, 215, 133, 23, 255, 214, 133, 14, 255, 211, 128, 25, 255, 215, 135, 13, 255, 214, 133, 19, 255, 213, 132, 29, 255, 209, 129, 11, 255, 198, 115, 10, 255, 208, 131, 16, 255, 207, 130, 22, 255, 210, 137, 26, 255, 207, 135, 18, 255, 212, 135, 25, 255, 218, 137, 23, 255, 210, 126, 17, 255, 211, 128, 16, 255, 217, 138, 16, 255, 214, 136, 16, 255, 209, 133, 4, 255, 213, 138, 11, 255, 213, 138, 13, 255, 214, 139, 14, 255, 218, 141, 14, 255, 219, 141, 11, 255, 217, 139, 6, 255, 215, 143, 13, 255, 216, 140, 11, 255, 200, 113, 6, 255, 196, 106, 12, 255, 191, 104, 11, 255, 203, 122, 19, 255, 217, 139, 17, 255, 217, 136, 11, 255, 218, 133, 11, 255, 216, 135, 0, 255, 214, 139, 8, 255, 215, 141, 14, 255, 218, 144, 3, 255, 218, 145, 4, 255, 220, 147, 9, 255, 216, 144, 11, 255, 211, 138, 15, 255, 215, 142, 16, 255, 217, 143, 13, 255, 215, 144, 5, 255, 215, 142, 7, 255, 217, 142, 14, 255, 216, 135, 14, 255, 214, 135, 5, 255, 222, 141, 12, 255, 219, 138, 8, 255, 218, 139, 4, 255, 218, 142, 2, 255, 218, 143, 3, 255, 220, 145, 12, 255, 221, 149, 6, 255, 219, 149, 3, 255, 220, 144, 4, 255, 215, 138, 4, 255, 212, 133, 9, 255, 210, 132, 6, 255, 212, 134, 5, 255, 212, 133, 9, 255, 211, 131, 6, 255, 211, 132, 1, 255, 210, 132, 3, 255, 207, 129, 3, 255, 204, 125, 8, 255, 203, 125, 11, 255, 206, 130, 7, 255, 205, 129, 3, 255, 208, 130, 7, 255, 189, 112, 6, 255, 183, 106, 2, 255, 185, 107, 7, 255, 184, 108, 6, 255, 188, 113, 4, 255, 204, 130, 7, 255, 191, 121, 6, 255, 161, 93, 3, 255, 176, 110, 10, 255, 188, 115, 11, 255, 190, 113, 8, 255, 207, 139, 8, 255, 211, 148, 3, 255, 212, 152, 2, 255, 213, 154, 4, 255, 212, 156, 2, 255, 215, 158, 5, 255, 216, 153, 5, 255, 207, 140, 1, 255, 204, 133, 7, 255, 207, 137, 8, 255, 205, 137, 3, 255, 214, 145, 7, 255, 215, 143, 13, 255, 211, 139, 4, 255, 200, 124, 11, 255, 193, 116, 16, 255, 188, 113, 12, 255, 196, 123, 5, 255, 193, 120, 8, 255, 167, 86, 5, 255, 159, 76, 7, 255, 175, 94, 5, 255, 183, 101, 3, 255, 181, 97, 2, 255, 177, 92, 2, 255, 179, 98, 0, 255, 183, 106, 6, 255, 167, 93, 4, 255, 168, 99, 1, 255, 159, 92, 5, 255, 150, 82, 14, 255, 159, 99, 7, 255, 177, 115, 5, 255, 178, 104, 6, 255, 163, 90, 2, 255, 166, 89, 6, 255, 173, 94, 7, 255, 171, 93, 6, 255, 162, 90, 10, 255, 190, 117, 6, 255, 207, 136, 8, 255, 199, 129, 13, 255, 200, 132, 2, 255, 202, 143, 5, 255, 195, 137, 0, 255, 192, 121, 3, 255, 200, 130, 9, 255, 203, 132, 9, 255, 200, 129, 5, 255, 201, 130, 0, 255, 203, 128, 7, 255, 202, 125, 4, 255, 205, 127, 2, 255, 205, 126, 4, 255, 206, 126, 10, 255, 207, 127, 11, 255, 209, 132, 10, 255, 206, 131, 4, 255, 206, 130, 9, 255, 202, 124, 15, 255, 201, 123, 8, 255, 201, 118, 14, 255, 199, 116, 13, 255, 193, 111, 2, 255, 190, 108, 1, 255, 190, 106, 6, 255, 190, 104, 5, 255, 186, 100, 1, 255, 186, 100, 4, 255, 187, 98, 2, 255, 182, 99, 12, 255, 181, 93, 21, 255, 170, 83, 11, 255, 170, 88, 6, 255, 159, 71, 3, 255, 155, 67, 1, 255, 154, 67, 5, 255, 157, 68, 7, 255, 151, 70, 2, 255, 144, 62, 6, 255, 147, 61, 5, 255, 154, 66, 4, 255, 152, 61, 4, 255, 149, 61, 7, 255, 148, 60, 4, 255, 135, 59, 6, 255, 128, 57, 6, 255, 139, 59, 4, 255, 139, 56, 1, 255, 131, 54, 4, 255, 124, 55, 1, 255, 130, 59, 4, 255, 126, 50, 3, 255, 125, 45, 3, 255, 136, 52, 2, 255, 137, 58, 2, 255, 131, 54, 4, 255, 133, 56, 1, 255, 138, 59, 2, 255, 129, 57, 1, 255, 128, 57, 1, 255, 120, 52, 3, 255, 123, 54, 4, 255, 123, 50, 2, 255, 124, 49, 1, 255, 125, 48, 1, 255, 122, 42, 3, 255, 118, 40, 3, 255, 119, 43, 4, 255, 123, 48, 4, 255, 126, 49, 1, 255, 130, 51, 2, 255, 135, 56, 1, 255, 143, 60, 2, 255, 152, 60, 8, 255, 155, 66, 5, 255, 160, 72, 3, 255, 159, 66, 1, 255, 160, 66, 2, 255, 166, 74, 1, 255, 176, 83, 0, 255, 183, 87, 3, 255, 177, 81, 4, 255, 172, 81, 2, 255, 172, 83, 1, 255, 174, 83, 3, 255, 174, 78, 2, 255, 177, 81, 2, 255, 175, 84, 2, 255, 172, 81, 1, 255, 171, 80, 3, 255, 1, 28, 67, 255, 0, 20, 54, 255, 2, 23, 49, 255, 3, 31, 67, 255, 1, 30, 71, 255, 2, 30, 62, 255, 2, 31, 67, 255, 5, 29, 64, 255, 4, 13, 34, 255, 0, 2, 3, 255, 1, 6, 11, 255, 2, 9, 25, 255, 4, 12, 36, 255, 0, 16, 31, 255, 1, 16, 37, 255, 2, 17, 33, 255, 3, 15, 30, 255, 2, 13, 31, 255, 2, 15, 29, 255, 0, 8, 25, 255, 2, 2, 20, 255, 0, 3, 10, 255, 1, 1, 6, 255, 2, 0, 5, 255, 0, 0, 13, 255, 6, 27, 156, 255, 49, 69, 93, 255, 36, 28, 0, 255, 19, 16, 11, 255, 26, 31, 74, 255, 7, 6, 31, 255, 12, 0, 0, 255, 8, 4, 4, 255, 7, 3, 1, 255, 5, 1, 0, 255, 4, 0, 1, 255, 5, 1, 2, 255, 5, 1, 1, 255, 3, 0, 0, 255, 3, 1, 0, 255, 9, 7, 4, 255, 9, 5, 2, 255, 7, 0, 0, 255, 14, 4, 3, 255, 14, 4, 3, 255, 11, 0, 0, 255, 12, 3, 1, 255, 14, 5, 3, 255, 13, 3, 1, 255, 13, 3, 1, 255, 13, 3, 2, 255, 24, 10, 2, 255, 31, 11, 4, 255, 28, 11, 4, 255, 19, 9, 1, 255, 22, 10, 2, 255, 27, 14, 4, 255, 23, 13, 0, 255, 30, 17, 4, 255, 36, 16, 4, 255, 33, 15, 1, 255, 39, 19, 2, 255, 42, 22, 4, 255, 35, 19, 1, 255, 34, 19, 2, 255, 37, 22, 3, 255, 52, 27, 4, 255, 60, 38, 4, 255, 65, 45, 12, 255, 64, 51, 21, 255, 66, 56, 36, 255, 73, 66, 39, 255, 74, 67, 43, 255, 77, 67, 49, 255, 72, 67, 43, 255, 69, 66, 35, 255, 78, 65, 49, 255, 76, 64, 25, 255, 70, 65, 4, 255, 83, 64, 9, 255, 91, 72, 3, 255, 82, 64, 9, 255, 80, 63, 4, 255, 83, 65, 1, 255, 80, 59, 5, 255, 73, 57, 11, 255, 76, 62, 5, 255, 100, 72, 4, 255, 134, 82, 6, 255, 162, 87, 6, 255, 171, 85, 7, 255, 172, 79, 4, 255, 182, 88, 5, 255, 178, 92, 3, 255, 175, 91, 4, 255, 182, 94, 3, 255, 178, 90, 3, 255, 175, 90, 1, 255, 173, 89, 1, 255, 167, 82, 6, 255, 167, 83, 1, 255, 161, 73, 1, 255, 158, 77, 5, 255, 142, 68, 4, 255, 144, 69, 3, 255, 140, 71, 2, 255, 137, 70, 3, 255, 167, 89, 8, 255, 169, 90, 11, 255, 186, 108, 17, 255, 194, 109, 5, 255, 188, 98, 9, 255, 190, 104, 10, 255, 188, 109, 9, 255, 186, 106, 11, 255, 186, 95, 14, 255, 170, 86, 1, 255, 166, 81, 7, 255, 163, 82, 8, 255, 153, 67, 7, 255, 144, 57, 10, 255, 137, 60, 1, 255, 131, 53, 7, 255, 110, 44, 3, 255, 107, 45, 12, 255, 116, 59, 9, 255, 125, 55, 1, 255, 120, 49, 2, 255, 110, 49, 7, 255, 135, 64, 3, 255, 157, 73, 7, 255, 147, 55, 5, 255, 151, 61, 3, 255, 162, 73, 4, 255, 161, 75, 6, 255, 177, 88, 5, 255, 158, 64, 8, 255, 147, 57, 5, 255, 149, 54, 2, 255, 143, 52, 3, 255, 147, 69, 5, 255, 163, 71, 13, 255, 134, 50, 6, 255, 132, 53, 3, 255, 125, 53, 4, 255, 122, 51, 5, 255, 115, 51, 5, 255, 127, 62, 6, 255, 117, 52, 3, 255, 110, 48, 10, 255, 103, 43, 11, 255, 101, 42, 10, 255, 107, 44, 4, 255, 105, 42, 4, 255, 112, 54, 6, 255, 132, 68, 6, 255, 134, 65, 9, 255, 137, 65, 16, 255, 159, 85, 21, 255, 184, 109, 12, 255, 193, 110, 19, 255, 192, 110, 7, 255, 195, 112, 12, 255, 192, 110, 9, 255, 193, 110, 14, 255, 200, 117, 19, 255, 200, 116, 15, 255, 186, 103, 6, 255, 186, 100, 17, 255, 180, 94, 11, 255, 198, 114, 21, 255, 201, 122, 4, 255, 191, 109, 10, 255, 193, 108, 27, 255, 203, 118, 15, 255, 205, 120, 3, 255, 207, 121, 12, 255, 211, 125, 25, 255, 213, 127, 22, 255, 195, 103, 6, 255, 182, 92, 5, 255, 201, 118, 15, 255, 206, 120, 23, 255, 204, 119, 12, 255, 195, 109, 15, 255, 203, 124, 15, 255, 213, 133, 19, 255, 212, 132, 15, 255, 213, 130, 21, 255, 210, 128, 10, 255, 209, 128, 8, 255, 210, 131, 11, 255, 210, 131, 5, 255, 205, 126, 14, 255, 212, 137, 18, 255, 211, 139, 15, 255, 213, 140, 16, 255, 213, 138, 16, 255, 215, 141, 15, 255, 212, 137, 13, 255, 211, 132, 7, 255, 217, 135, 13, 255, 215, 129, 16, 255, 211, 128, 10, 255, 214, 135, 5, 255, 216, 138, 10, 255, 213, 137, 11, 255, 213, 138, 12, 255, 216, 142, 12, 255, 216, 143, 9, 255, 216, 142, 7, 255, 223, 143, 7, 255, 220, 138, 11, 255, 217, 136, 17, 255, 213, 140, 9, 255, 216, 144, 14, 255, 219, 145, 20, 255, 218, 142, 12, 255, 220, 141, 15, 255, 220, 137, 13, 255, 216, 133, 6, 255, 214, 137, 8, 255, 215, 139, 12, 255, 215, 139, 12, 255, 217, 138, 18, 255, 214, 137, 12, 255, 210, 136, 1, 255, 212, 138, 11, 255, 217, 139, 15, 255, 218, 139, 5, 255, 216, 133, 11, 255, 213, 129, 11, 255, 216, 134, 3, 255, 218, 138, 1, 255, 220, 140, 7, 255, 221, 138, 4, 255, 220, 136, 4, 255, 216, 136, 10, 255, 216, 137, 13, 255, 216, 140, 9, 255, 220, 143, 16, 255, 220, 143, 16, 255, 216, 142, 3, 255, 218, 140, 7, 255, 212, 133, 6, 255, 215, 136, 12, 255, 214, 135, 8, 255, 210, 131, 0, 255, 211, 131, 1, 255, 210, 129, 5, 255, 213, 130, 7, 255, 212, 130, 6, 255, 198, 116, 2, 255, 196, 116, 7, 255, 199, 120, 5, 255, 207, 128, 6, 255, 211, 132, 5, 255, 201, 117, 10, 255, 178, 99, 12, 255, 173, 99, 4, 255, 175, 96, 0, 255, 177, 102, 7, 255, 191, 124, 6, 255, 206, 139, 7, 255, 193, 118, 7, 255, 183, 107, 4, 255, 185, 116, 1, 255, 188, 120, 7, 255, 201, 135, 8, 255, 209, 146, 8, 255, 212, 152, 4, 255, 215, 156, 4, 255, 216, 157, 2, 255, 211, 151, 0, 255, 212, 149, 4, 255, 211, 141, 19, 255, 201, 129, 3, 255, 204, 134, 3, 255, 201, 131, 4, 255, 208, 139, 2, 255, 203, 127, 6, 255, 210, 134, 15, 255, 205, 138, 11, 255, 199, 125, 21, 255, 195, 118, 10, 255, 193, 115, 3, 255, 190, 107, 3, 255, 180, 94, 10, 255, 162, 82, 10, 255, 156, 73, 9, 255, 163, 80, 3, 255, 175, 90, 1, 255, 169, 79, 5, 255, 172, 82, 9, 255, 178, 95, 4, 255, 182, 105, 6, 255, 178, 107, 1, 255, 176, 101, 5, 255, 162, 83, 8, 255, 145, 73, 5, 255, 131, 66, 3, 255, 144, 74, 5, 255, 147, 71, 4, 255, 149, 73, 5, 255, 157, 81, 3, 255, 163, 87, 11, 255, 162, 85, 11, 255, 164, 87, 6, 255, 157, 84, 2, 255, 167, 93, 2, 255, 190, 113, 14, 255, 201, 140, 10, 255, 198, 148, 1, 255, 198, 136, 4, 255, 191, 114, 8, 255, 198, 120, 11, 255, 202, 124, 10, 255, 199, 122, 11, 255, 200, 126, 1, 255, 200, 125, 4, 255, 204, 126, 1, 255, 205, 125, 8, 255, 206, 125, 12, 255, 206, 126, 5, 255, 204, 125, 1, 255, 207, 127, 9, 255, 207, 128, 10, 255, 205, 128, 11, 255, 199, 122, 12, 255, 198, 120, 1, 255, 201, 116, 11, 255, 200, 113, 14, 255, 195, 111, 9, 255, 187, 104, 7, 255, 183, 96, 12, 255, 183, 97, 8, 255, 189, 102, 6, 255, 189, 101, 8, 255, 189, 100, 4, 255, 185, 94, 10, 255, 191, 103, 24, 255, 205, 119, 10, 255, 199, 107, 10, 255, 167, 76, 7, 255, 157, 67, 2, 255, 154, 64, 4, 255, 156, 72, 4, 255, 153, 73, 1, 255, 146, 64, 4, 255, 152, 68, 5, 255, 150, 65, 0, 255, 157, 66, 9, 255, 154, 60, 7, 255, 132, 52, 3, 255, 129, 49, 6, 255, 138, 57, 4, 255, 138, 65, 2, 255, 138, 57, 4, 255, 133, 49, 6, 255, 118, 47, 3, 255, 110, 44, 2, 255, 102, 37, 1, 255, 104, 38, 4, 255, 118, 41, 7, 255, 118, 42, 8, 255, 101, 34, 5, 255, 116, 52, 8, 255, 128, 63, 8, 255, 124, 65, 6, 255, 118, 56, 4, 255, 115, 54, 5, 255, 122, 62, 4, 255, 125, 60, 1, 255, 126, 53, 0, 255, 122, 45, 0, 255, 120, 42, 4, 255, 121, 43, 2, 255, 125, 51, 2, 255, 133, 59, 5, 255, 144, 62, 6, 255, 148, 63, 7, 255, 146, 61, 5, 255, 146, 61, 3, 255, 152, 63, 0, 255, 167, 75, 7, 255, 177, 85, 6, 255, 180, 88, 4, 255, 181, 88, 5, 255, 180, 88, 4, 255, 176, 80, 2, 255, 173, 76, 3, 255, 169, 73, 1, 255, 169, 75, 0, 255, 170, 79, 1, 255, 171, 80, 1, 255, 175, 81, 3, 255, 179, 84, 5, 255, 175, 82, 1, 255, 174, 81, 1, 255, 174, 83, 2, 255, 2, 25, 55, 255, 4, 30, 65, 255, 1, 28, 59, 255, 5, 24, 66, 255, 5, 24, 71, 255, 2, 33, 63, 255, 1, 34, 59, 255, 1, 28, 63, 255, 2, 25, 59, 255, 0, 14, 38, 255, 0, 4, 14, 255, 2, 3, 6, 255, 2, 6, 17, 255, 1, 10, 26, 255, 3, 14, 35, 255, 2, 13, 31, 255, 1, 10, 27, 255, 3, 10, 30, 255, 2, 8, 26, 255, 1, 1, 7, 255, 1, 1, 12, 255, 2, 3, 7, 255, 4, 2, 8, 255, 2, 0, 4, 255, 0, 29, 169, 255, 25, 65, 180, 255, 44, 37, 9, 255, 20, 7, 1, 255, 27, 27, 45, 255, 18, 12, 27, 255, 11, 1, 1, 255, 10, 4, 2, 255, 7, 3, 1, 255, 6, 2, 2, 255, 5, 1, 1, 255, 7, 3, 4, 255, 9, 4, 5, 255, 7, 2, 1, 255, 7, 0, 0, 255, 8, 2, 1, 255, 9, 4, 2, 255, 7, 2, 1, 255, 9, 2, 0, 255, 12, 3, 1, 255, 13, 3, 2, 255, 14, 4, 2, 255, 14, 4, 2, 255, 16, 6, 4, 255, 15, 6, 4, 255, 17, 7, 3, 255, 19, 8, 4, 255, 30, 12, 3, 255, 30, 8, 1, 255, 28, 10, 3, 255, 22, 12, 1, 255, 25, 12, 2, 255, 28, 16, 7, 255, 25, 13, 4, 255, 31, 14, 3, 255, 34, 16, 1, 255, 40, 21, 2, 255, 42, 23, 3, 255, 37, 19, 1, 255, 38, 20, 4, 255, 50, 27, 7, 255, 50, 23, 5, 255, 52, 24, 7, 255, 54, 30, 7, 255, 61, 39, 15, 255, 65, 45, 17, 255, 74, 54, 25, 255, 86, 67, 32, 255, 86, 68, 50, 255, 81, 68, 52, 255, 74, 67, 48, 255, 72, 67, 45, 255, 80, 70, 33, 255, 72, 61, 32, 255, 68, 65, 16, 255, 96, 68, 11, 255, 81, 63, 7, 255, 74, 63, 2, 255, 88, 61, 1, 255, 77, 59, 1, 255, 93, 81, 5, 255, 107, 73, 12, 255, 130, 73, 7, 255, 162, 83, 9, 255, 173, 81, 11, 255, 169, 81, 5, 255, 169, 81, 7, 255, 173, 88, 4, 255, 182, 95, 3, 255, 179, 88, 7, 255, 176, 89, 5, 255, 165, 82, 6, 255, 153, 74, 4, 255, 156, 80, 5, 255, 147, 72, 7, 255, 131, 63, 4, 255, 127, 65, 4, 255, 120, 64, 4, 255, 114, 62, 3, 255, 103, 57, 3, 255, 104, 60, 1, 255, 113, 61, 4, 255, 115, 62, 12, 255, 115, 65, 12, 255, 116, 59, 5, 255, 132, 64, 9, 255, 139, 64, 12, 255, 152, 82, 8, 255, 138, 73, 16, 255, 126, 56, 8, 255, 135, 65, 6, 255, 155, 74, 3, 255, 141, 63, 5, 255, 106, 47, 4, 255, 137, 69, 11, 255, 112, 55, 6, 255, 86, 47, 4, 255, 132, 67, 6, 255, 118, 56, 8, 255, 101, 43, 2, 255, 108, 46, 4, 255, 154, 84, 9, 255, 142, 70, 5, 255, 108, 46, 6, 255, 129, 57, 2, 255, 129, 59, 6, 255, 126, 54, 3, 255, 133, 54, 8, 255, 134, 50, 1, 255, 140, 55, 4, 255, 144, 58, 8, 255, 137, 52, 1, 255, 138, 58, 1, 255, 131, 55, 3, 255, 125, 56, 6, 255, 125, 57, 5, 255, 125, 56, 5, 255, 121, 55, 5, 255, 120, 56, 3, 255, 109, 48, 5, 255, 108, 52, 5, 255, 111, 52, 8, 255, 115, 49, 5, 255, 116, 55, 5, 255, 118, 54, 10, 255, 110, 49, 5, 255, 109, 51, 7, 255, 107, 50, 5, 255, 113, 50, 6, 255, 115, 45, 12, 255, 137, 60, 8, 255, 157, 76, 6, 255, 132, 60, 6, 255, 117, 62, 3, 255, 111, 50, 6, 255, 144, 71, 14, 255, 179, 96, 10, 255, 186, 104, 10, 255, 187, 106, 6, 255, 182, 103, 11, 255, 186, 107, 7, 255, 188, 102, 13, 255, 182, 97, 6, 255, 185, 103, 14, 255, 188, 105, 18, 255, 186, 105, 10, 255, 194, 113, 15, 255, 193, 112, 9, 255, 191, 110, 20, 255, 196, 122, 14, 255, 200, 122, 9, 255, 202, 120, 15, 255, 205, 123, 18, 255, 205, 123, 11, 255, 201, 117, 5, 255, 198, 111, 16, 255, 205, 120, 15, 255, 209, 130, 12, 255, 211, 133, 13, 255, 208, 126, 24, 255, 210, 130, 26, 255, 210, 131, 23, 255, 208, 127, 18, 255, 209, 128, 13, 255, 209, 124, 26, 255, 204, 121, 20, 255, 208, 128, 18, 255, 206, 126, 26, 255, 207, 126, 30, 255, 209, 133, 18, 255, 212, 138, 18, 255, 211, 136, 15, 255, 210, 133, 14, 255, 213, 132, 13, 255, 206, 126, 3, 255, 201, 121, 20, 255, 210, 130, 16, 255, 216, 137, 10, 255, 214, 132, 15, 255, 212, 134, 1, 255, 211, 134, 6, 255, 213, 133, 9, 255, 215, 136, 12, 255, 214, 139, 13, 255, 214, 140, 13, 255, 213, 140, 12, 255, 215, 142, 16, 255, 214, 142, 6, 255, 214, 139, 6, 255, 210, 133, 12, 255, 206, 130, 7, 255, 216, 142, 15, 255, 218, 143, 17, 255, 216, 145, 11, 255, 210, 139, 12, 255, 206, 130, 10, 255, 211, 134, 9, 255, 216, 140, 16, 255, 216, 140, 16, 255, 215, 139, 10, 255, 212, 134, 6, 255, 215, 137, 17, 255, 213, 140, 4, 255, 216, 141, 6, 255, 213, 134, 8, 255, 215, 134, 2, 255, 217, 136, 3, 255, 220, 138, 9, 255, 218, 139, 4, 255, 213, 136, 7, 255, 207, 132, 12, 255, 195, 115, 10, 255, 208, 126, 18, 255, 216, 147, 2, 255, 212, 138, 10, 255, 214, 137, 12, 255, 219, 142, 1, 255, 219, 138, 3, 255, 217, 131, 9, 255, 214, 130, 6, 255, 217, 132, 7, 255, 214, 129, 6, 255, 215, 130, 7, 255, 214, 129, 5, 255, 212, 127, 1, 255, 213, 128, 5, 255, 211, 127, 9, 255, 209, 127, 7, 255, 204, 124, 2, 255, 203, 123, 2, 255, 204, 126, 2, 255, 213, 136, 2, 255, 207, 123, 7, 255, 178, 91, 11, 255, 166, 88, 0, 255, 171, 96, 8, 255, 186, 110, 7, 255, 195, 128, 7, 255, 215, 157, 3, 255, 206, 140, 9, 255, 177, 100, 12, 255, 183, 105, 5, 255, 194, 122, 4, 255, 207, 138, 6, 255, 211, 148, 5, 255, 212, 154, 5, 255, 214, 155, 2, 255, 211, 149, 1, 255, 209, 144, 3, 255, 207, 138, 3, 255, 210, 139, 8, 255, 200, 128, 9, 255, 197, 122, 11, 255, 201, 129, 5, 255, 203, 131, 9, 255, 199, 127, 7, 255, 183, 101, 10, 255, 206, 127, 16, 255, 214, 140, 19, 255, 206, 128, 21, 255, 202, 124, 10, 255, 196, 118, 8, 255, 196, 117, 3, 255, 189, 109, 8, 255, 189, 105, 3, 255, 181, 95, 3, 255, 174, 86, 4, 255, 173, 86, 6, 255, 167, 84, 2, 255, 176, 97, 3, 255, 183, 103, 4, 255, 185, 110, 7, 255, 179, 105, 2, 255, 168, 87, 6, 255, 169, 86, 12, 255, 170, 95, 11, 255, 143, 72, 2, 255, 130, 58, 6, 255, 130, 60, 3, 255, 151, 74, 4, 255, 147, 72, 5, 255, 151, 78, 8, 255, 160, 82, 6, 255, 167, 95, 7, 255, 164, 101, 2, 255, 142, 74, 7, 255, 184, 125, 26, 255, 207, 152, 8, 255, 207, 144, 0, 255, 202, 137, 6, 255, 196, 119, 8, 255, 196, 115, 3, 255, 198, 118, 3, 255, 198, 120, 12, 255, 201, 126, 6, 255, 200, 124, 1, 255, 203, 125, 5, 255, 204, 126, 6, 255, 205, 125, 7, 255, 205, 125, 7, 255, 202, 124, 5, 255, 203, 125, 4, 255, 204, 124, 7, 255, 202, 123, 8, 255, 200, 123, 15, 255, 198, 118, 9, 255, 198, 112, 7, 255, 194, 108, 3, 255, 195, 111, 8, 255, 195, 109, 13, 255, 187, 102, 11, 255, 187, 103, 6, 255, 192, 107, 5, 255, 189, 103, 5, 255, 189, 101, 6, 255, 197, 112, 17, 255, 207, 121, 21, 255, 203, 116, 12, 255, 183, 92, 5, 255, 167, 78, 3, 255, 161, 75, 6, 255, 157, 74, 8, 255, 150, 72, 1, 255, 152, 72, 5, 255, 149, 70, 4, 255, 146, 69, 3, 255, 148, 66, 3, 255, 150, 65, 2, 255, 154, 65, 4, 255, 148, 58, 8, 255, 144, 61, 4, 255, 148, 65, 1, 255, 148, 63, 2, 255, 141, 62, 5, 255, 135, 58, 2, 255, 132, 52, 3, 255, 128, 41, 6, 255, 108, 33, 5, 255, 89, 29, 1, 255, 95, 27, 3, 255, 99, 27, 5, 255, 91, 31, 0, 255, 109, 50, 5, 255, 121, 57, 5, 255, 117, 56, 2, 255, 115, 50, 2, 255, 117, 53, 6, 255, 114, 54, 6, 255, 124, 58, 2, 255, 129, 56, 2, 255, 125, 48, 4, 255, 127, 49, 4, 255, 139, 61, 2, 255, 146, 68, 2, 255, 144, 62, 3, 255, 150, 65, 6, 255, 143, 60, 5, 255, 136, 53, 1, 255, 155, 70, 4, 255, 175, 85, 4, 255, 182, 89, 2, 255, 188, 98, 1, 255, 190, 98, 0, 255, 186, 91, 1, 255, 180, 85, 1, 255, 169, 73, 1, 255, 164, 72, 3, 255, 167, 77, 2, 255, 171, 79, 3, 255, 174, 80, 7, 255, 174, 81, 5, 255, 174, 85, 2, 255, 174, 84, 0, 255, 176, 80, 1, 255, 176, 81, 0, 255, 177, 85, 1, 255, 1, 26, 59, 255, 6, 30, 73, 255, 1, 23, 59, 255, 1, 23, 54, 255, 2, 24, 62, 255, 3, 25, 67, 255, 2, 24, 65, 255, 4, 29, 54, 255, 0, 25, 53, 255, 1, 20, 53, 255, 4, 15, 41, 255, 1, 7, 19, 255, 2, 4, 12, 255, 1, 5, 19, 255, 3, 11, 29, 255, 1, 10, 26, 255, 2, 9, 27, 255, 4, 10, 28, 255, 2, 6, 16, 255, 0, 1, 13, 255, 0, 1, 15, 255, 3, 0, 16, 255, 4, 0, 0, 255, 0, 15, 118, 255, 8, 90, 227, 255, 45, 45, 33, 255, 24, 7, 0, 255, 21, 20, 68, 255, 12, 16, 71, 255, 5, 0, 4, 255, 5, 2, 3, 255, 8, 2, 1, 255, 6, 1, 0, 255, 6, 2, 1, 255, 5, 1, 0, 255, 7, 3, 3, 255, 8, 3, 2, 255, 7, 2, 1, 255, 8, 2, 0, 255, 11, 5, 2, 255, 9, 4, 2, 255, 8, 3, 1, 255, 12, 3, 1, 255, 12, 2, 0, 255, 16, 5, 2, 255, 15, 4, 2, 255, 13, 3, 1, 255, 16, 6, 4, 255, 17, 6, 3, 255, 20, 7, 2, 255, 24, 10, 3, 255, 26, 8, 0, 255, 31, 11, 5, 255, 26, 10, 3, 255, 23, 12, 0, 255, 33, 17, 4, 255, 33, 16, 4, 255, 32, 16, 3, 255, 38, 21, 6, 255, 34, 19, 3, 255, 34, 14, 0, 255, 38, 20, 2, 255, 36, 21, 2, 255, 41, 21, 5, 255, 42, 24, 4, 255, 48, 26, 3, 255, 47, 31, 3, 255, 54, 36, 11, 255, 54, 40, 10, 255, 60, 44, 19, 255, 68, 49, 27, 255, 82, 65, 14, 255, 87, 66, 39, 255, 79, 68, 54, 255, 79, 71, 37, 255, 85, 71, 40, 255, 82, 70, 31, 255, 82, 63, 29, 255, 101, 71, 18, 255, 86, 66, 13, 255, 82, 65, 7, 255, 83, 64, 2, 255, 90, 69, 5, 255, 101, 71, 5, 255, 124, 87, 6, 255, 146, 84, 9, 255, 168, 90, 8, 255, 175, 90, 5, 255, 171, 88, 5, 255, 176, 97, 7, 255, 175, 89, 6, 255, 171, 86, 7, 255, 166, 89, 0, 255, 161, 79, 3, 255, 153, 75, 2, 255, 128, 64, 1, 255, 107, 56, 3, 255, 105, 58, 6, 255, 97, 57, 2, 255, 95, 61, 10, 255, 91, 58, 11, 255, 90, 59, 6, 255, 88, 55, 5, 255, 91, 56, 2, 255, 92, 60, 2, 255, 100, 57, 2, 255, 114, 62, 3, 255, 115, 65, 2, 255, 122, 66, 1, 255, 119, 62, 3, 255, 114, 52, 5, 255, 119, 59, 8, 255, 105, 43, 6, 255, 128, 52, 4, 255, 152, 76, 2, 255, 151, 71, 2, 255, 131, 64, 11, 255, 130, 64, 1, 255, 139, 67, 7, 255, 98, 49, 7, 255, 91, 49, 6, 255, 108, 51, 9, 255, 98, 53, 8, 255, 100, 55, 3, 255, 98, 51, 1, 255, 123, 54, 1, 255, 113, 52, 5, 255, 104, 54, 10, 255, 103, 52, 4, 255, 104, 47, 2, 255, 119, 55, 2, 255, 128, 58, 4, 255, 130, 57, 6, 255, 130, 57, 7, 255, 122, 49, 5, 255, 120, 56, 0, 255, 117, 55, 5, 255, 118, 53, 3, 255, 115, 51, 9, 255, 111, 48, 4, 255, 111, 45, 4, 255, 111, 53, 4, 255, 108, 49, 2, 255, 105, 47, 11, 255, 107, 46, 7, 255, 110, 49, 11, 255, 115, 47, 7, 255, 126, 57, 1, 255, 125, 52, 3, 255, 119, 48, 4, 255, 114, 52, 1, 255, 112, 54, 8, 255, 112, 50, 7, 255, 115, 49, 6, 255, 117, 51, 9, 255, 117, 54, 6, 255, 113, 53, 3, 255, 109, 49, 18, 255, 99, 44, 9, 255, 103, 50, 11, 255, 136, 69, 11, 255, 155, 77, 12, 255, 172, 88, 9, 255, 174, 87, 15, 255, 181, 102, 8, 255, 178, 98, 5, 255, 177, 96, 11, 255, 172, 90, 18, 255, 180, 100, 11, 255, 192, 113, 12, 255, 188, 109, 11, 255, 190, 110, 11, 255, 196, 116, 17, 255, 199, 115, 11, 255, 200, 115, 13, 255, 202, 115, 15, 255, 201, 117, 5, 255, 205, 121, 11, 255, 198, 109, 10, 255, 195, 114, 20, 255, 203, 123, 17, 255, 210, 128, 15, 255, 206, 129, 13, 255, 201, 125, 19, 255, 199, 122, 14, 255, 202, 125, 24, 255, 197, 123, 18, 255, 198, 122, 6, 255, 203, 121, 13, 255, 203, 118, 15, 255, 193, 105, 15, 255, 195, 111, 12, 255, 200, 123, 15, 255, 207, 130, 24, 255, 204, 129, 12, 255, 207, 132, 12, 255, 209, 130, 26, 255, 200, 119, 16, 255, 183, 104, 5, 255, 180, 102, 21, 255, 186, 109, 14, 255, 202, 123, 10, 255, 208, 126, 9, 255, 206, 125, 8, 255, 209, 129, 9, 255, 212, 135, 9, 255, 210, 135, 7, 255, 211, 138, 8, 255, 212, 140, 7, 255, 212, 137, 7, 255, 212, 137, 11, 255, 210, 143, 2, 255, 218, 146, 18, 255, 216, 138, 22, 255, 215, 136, 17, 255, 219, 143, 19, 255, 217, 140, 16, 255, 216, 142, 4, 255, 215, 140, 13, 255, 208, 130, 15, 255, 203, 123, 17, 255, 208, 127, 13, 255, 212, 133, 6, 255, 212, 132, 8, 255, 210, 130, 8, 255, 211, 129, 18, 255, 213, 133, 10, 255, 215, 136, 8, 255, 216, 134, 12, 255, 218, 133, 12, 255, 213, 130, 12, 255, 205, 126, 2, 255, 204, 122, 3, 255, 211, 135, 4, 255, 213, 142, 14, 255, 204, 130, 5, 255, 216, 133, 14, 255, 214, 132, 4, 255, 209, 127, 2, 255, 209, 126, 11, 255, 213, 130, 11, 255, 213, 131, 6, 255, 211, 130, 9, 255, 214, 134, 7, 255, 217, 136, 13, 255, 204, 122, 5, 255, 205, 123, 5, 255, 211, 128, 7, 255, 209, 126, 6, 255, 209, 125, 6, 255, 209, 125, 6, 255, 207, 124, 5, 255, 208, 126, 5, 255, 209, 128, 2, 255, 212, 131, 7, 255, 210, 129, 10, 255, 185, 98, 9, 255, 169, 88, 4, 255, 170, 93, 3, 255, 180, 98, 12, 255, 193, 116, 10, 255, 207, 139, 7, 255, 208, 133, 13, 255, 178, 98, 12, 255, 180, 108, 6, 255, 194, 127, 4, 255, 209, 147, 9, 255, 211, 151, 6, 255, 210, 149, 9, 255, 211, 150, 1, 255, 210, 144, 6, 255, 205, 135, 4, 255, 203, 131, 6, 255, 201, 129, 7, 255, 200, 126, 7, 255, 202, 131, 6, 255, 207, 138, 2, 255, 207, 137, 5, 255, 207, 137, 17, 255, 206, 134, 12, 255, 193, 114, 6, 255, 196, 117, 12, 255, 208, 136, 22, 255, 201, 124, 18, 255, 201, 121, 7, 255, 202, 121, 8, 255, 203, 123, 7, 255, 198, 117, 4, 255, 195, 112, 1, 255, 189, 103, 4, 255, 179, 91, 3, 255, 170, 81, 4, 255, 169, 80, 6, 255, 176, 91, 1, 255, 184, 107, 3, 255, 189, 114, 2, 255, 187, 107, 5, 255, 179, 97, 6, 255, 171, 92, 4, 255, 159, 83, 3, 255, 156, 79, 3, 255, 142, 66, 8, 255, 134, 61, 0, 255, 146, 67, 15, 255, 137, 65, 13, 255, 139, 69, 4, 255, 145, 73, 6, 255, 153, 76, 5, 255, 173, 91, 9, 255, 180, 116, 9, 255, 205, 151, 7, 255, 211, 147, 10, 255, 202, 135, 8, 255, 200, 132, 3, 255, 194, 119, 1, 255, 197, 114, 8, 255, 199, 119, 9, 255, 197, 122, 8, 255, 201, 127, 7, 255, 205, 127, 5, 255, 203, 127, 6, 255, 202, 127, 4, 255, 204, 125, 4, 255, 204, 124, 7, 255, 204, 123, 8, 255, 201, 121, 7, 255, 202, 118, 5, 255, 199, 117, 2, 255, 199, 118, 15, 255, 198, 114, 16, 255, 194, 109, 10, 255, 193, 109, 4, 255, 192, 108, 6, 255, 191, 105, 1, 255, 192, 107, 3, 255, 190, 106, 7, 255, 190, 107, 6, 255, 196, 110, 4, 255, 203, 117, 6, 255, 201, 121, 16, 255, 201, 113, 20, 255, 191, 101, 13, 255, 179, 94, 1, 255, 165, 78, 3, 255, 154, 70, 10, 255, 152, 75, 5, 255, 157, 75, 6, 255, 157, 75, 3, 255, 154, 74, 3, 255, 141, 62, 2, 255, 147, 67, 7, 255, 155, 73, 3, 255, 157, 68, 2, 255, 153, 66, 3, 255, 150, 67, 3, 255, 148, 65, 1, 255, 148, 59, 4, 255, 141, 62, 2, 255, 137, 58, 2, 255, 137, 57, 2, 255, 134, 50, 0, 255, 136, 52, 4, 255, 119, 43, 4, 255, 98, 29, 0, 255, 91, 33, 1, 255, 103, 39, 3, 255, 111, 45, 7, 255, 120, 51, 1, 255, 117, 50, 3, 255, 117, 46, 8, 255, 118, 52, 5, 255, 115, 48, 2, 255, 126, 54, 4, 255, 138, 58, 7, 255, 141, 61, 7, 255, 145, 67, 2, 255, 153, 70, 2, 255, 150, 66, 2, 255, 144, 61, 1, 255, 143, 53, 2, 255, 144, 56, 1, 255, 159, 74, 6, 255, 171, 87, 5, 255, 186, 99, 2, 255, 191, 99, 2, 255, 189, 99, 1, 255, 185, 95, 0, 255, 183, 88, 0, 255, 181, 85, 1, 255, 173, 78, 1, 255, 165, 75, 7, 255, 171, 83, 6, 255, 177, 87, 3, 255, 176, 81, 5, 255, 172, 78, 1, 255, 172, 82, 1, 255, 171, 82, 4, 255, 172, 78, 1, 255, 177, 83, 2, 255, 178, 86, 0, 255, 1, 29, 70, 255, 2, 23, 67, 255, 2, 23, 56, 255, 2, 29, 51, 255, 1, 27, 54, 255, 1, 16, 48, 255, 1, 21, 56, 255, 1, 25, 55, 255, 2, 23, 52, 255, 0, 21, 54, 255, 3, 19, 55, 255, 6, 14, 38, 255, 1, 2, 5, 255, 3, 3, 13, 255, 0, 6, 19, 255, 1, 9, 22, 255, 2, 9, 23, 255, 0, 4, 20, 255, 0, 2, 9, 255, 1, 0, 8, 255, 0, 2, 8, 255, 3, 3, 1, 255, 3, 1, 73, 255, 3, 66, 229, 255, 45, 54, 62, 255, 26, 12, 0, 255, 14, 16, 68, 255, 8, 23, 159, 255, 2, 3, 17, 255, 10, 2, 1, 255, 7, 3, 3, 255, 6, 3, 1, 255, 6, 2, 1, 255, 7, 3, 2, 255, 6, 2, 0, 255, 8, 3, 1, 255, 7, 2, 0, 255, 9, 4, 1, 255, 11, 7, 3, 255, 7, 3, 0, 255, 8, 3, 1, 255, 11, 4, 2, 255, 12, 2, 1, 255, 17, 3, 2, 255, 18, 4, 3, 255, 16, 6, 2, 255, 12, 2, 0, 255, 17, 8, 4, 255, 18, 7, 2, 255, 22, 9, 2, 255, 25, 10, 1, 255, 24, 7, 2, 255, 26, 9, 5, 255, 21, 7, 1, 255, 29, 16, 3, 255, 34, 16, 2, 255, 35, 15, 1, 255, 37, 20, 4, 255, 36, 19, 2, 255, 35, 16, 2, 255, 34, 19, 8, 255, 37, 21, 8, 255, 40, 20, 3, 255, 41, 24, 0, 255, 44, 29, 1, 255, 48, 32, 5, 255, 51, 34, 4, 255, 51, 42, 7, 255, 53, 42, 8, 255, 65, 50, 11, 255, 73, 56, 14, 255, 77, 61, 20, 255, 80, 64, 38, 255, 79, 69, 46, 255, 71, 74, 41, 255, 71, 69, 61, 255, 84, 70, 51, 255, 104, 76, 29, 255, 89, 66, 7, 255, 78, 67, 7, 255, 76, 66, 9, 255, 88, 64, 4, 255, 123, 79, 16, 255, 143, 85, 7, 255, 150, 79, 13, 255, 163, 90, 8, 255, 178, 100, 9, 255, 180, 99, 7, 255, 180, 99, 0, 255, 171, 88, 0, 255, 162, 78, 1, 255, 161, 73, 8, 255, 151, 80, 6, 255, 128, 62, 1, 255, 123, 62, 10, 255, 102, 61, 3, 255, 91, 60, 2, 255, 94, 60, 1, 255, 95, 60, 1, 255, 99, 62, 2, 255, 95, 55, 5, 255, 93, 56, 1, 255, 98, 57, 1, 255, 100, 55, 8, 255, 100, 56, 4, 255, 97, 57, 3, 255, 99, 57, 4, 255, 112, 61, 5, 255, 109, 62, 10, 255, 103, 59, 3, 255, 108, 59, 2, 255, 111, 60, 3, 255, 114, 60, 5, 255, 141, 74, 4, 255, 131, 67, 3, 255, 103, 45, 6, 255, 106, 52, 5, 255, 132, 63, 5, 255, 113, 49, 6, 255, 93, 42, 3, 255, 96, 49, 2, 255, 87, 51, 2, 255, 97, 54, 2, 255, 89, 49, 6, 255, 85, 47, 5, 255, 91, 48, 4, 255, 94, 47, 1, 255, 111, 52, 3, 255, 112, 49, 7, 255, 119, 46, 6, 255, 124, 49, 2, 255, 124, 53, 4, 255, 115, 47, 4, 255, 121, 53, 2, 255, 119, 49, 8, 255, 110, 44, 3, 255, 113, 46, 7, 255, 112, 48, 1, 255, 107, 45, 1, 255, 105, 46, 5, 255, 102, 47, 1, 255, 103, 41, 6, 255, 110, 47, 8, 255, 114, 52, 5, 255, 107, 49, 3, 255, 125, 58, 5, 255, 141, 64, 4, 255, 140, 65, 3, 255, 130, 59, 11, 255, 110, 45, 9, 255, 92, 40, 2, 255, 97, 48, 5, 255, 109, 52, 3, 255, 124, 57, 4, 255, 123, 57, 4, 255, 121, 62, 2, 255, 118, 55, 3, 255, 120, 53, 6, 255, 116, 52, 9, 255, 116, 60, 3, 255, 121, 63, 4, 255, 132, 62, 12, 255, 147, 69, 8, 255, 165, 86, 12, 255, 178, 100, 2, 255, 181, 98, 11, 255, 167, 82, 13, 255, 164, 82, 8, 255, 187, 108, 10, 255, 188, 108, 7, 255, 186, 106, 7, 255, 178, 98, 7, 255, 183, 101, 8, 255, 196, 109, 12, 255, 194, 105, 16, 255, 194, 107, 15, 255, 195, 112, 12, 255, 175, 91, 7, 255, 190, 102, 19, 255, 190, 108, 7, 255, 189, 111, 7, 255, 197, 121, 13, 255, 195, 112, 9, 255, 183, 95, 8, 255, 190, 112, 12, 255, 196, 124, 9, 255, 199, 120, 15, 255, 195, 115, 12, 255, 183, 99, 7, 255, 175, 90, 13, 255, 159, 75, 7, 255, 182, 103, 11, 255, 192, 114, 16, 255, 193, 113, 18, 255, 197, 120, 14, 255, 196, 121, 5, 255, 200, 125, 12, 255, 195, 122, 11, 255, 196, 120, 11, 255, 188, 112, 11, 255, 177, 102, 11, 255, 197, 120, 12, 255, 205, 122, 12, 255, 200, 116, 15, 255, 199, 120, 13, 255, 207, 135, 13, 255, 207, 136, 11, 255, 209, 136, 7, 255, 210, 135, 5, 255, 209, 133, 5, 255, 214, 135, 14, 255, 216, 137, 8, 255, 216, 137, 11, 255, 207, 128, 9, 255, 211, 137, 17, 255, 214, 145, 7, 255, 213, 140, 11, 255, 217, 141, 12, 255, 215, 140, 24, 255, 215, 143, 19, 255, 211, 141, 4, 255, 213, 142, 12, 255, 215, 141, 19, 255, 211, 139, 3, 255, 215, 143, 11, 255, 214, 142, 19, 255, 210, 138, 12, 255, 211, 137, 12, 255, 208, 132, 10, 255, 201, 123, 11, 255, 197, 117, 10, 255, 206, 123, 9, 255, 209, 123, 3, 255, 210, 125, 5, 255, 213, 129, 15, 255, 209, 123, 7, 255, 208, 117, 1, 255, 203, 114, 10, 255, 207, 119, 12, 255, 210, 126, 6, 255, 215, 130, 7, 255, 215, 131, 4, 255, 213, 128, 5, 255, 212, 127, 8, 255, 195, 108, 1, 255, 198, 111, 8, 255, 211, 125, 13, 255, 211, 127, 2, 255, 211, 126, 5, 255, 212, 127, 7, 255, 210, 126, 6, 255, 209, 124, 9, 255, 207, 123, 6, 255, 208, 124, 3, 255, 205, 119, 7, 255, 194, 107, 8, 255, 176, 90, 11, 255, 174, 98, 8, 255, 175, 95, 4, 255, 193, 106, 12, 255, 188, 106, 8, 255, 192, 112, 8, 255, 179, 100, 4, 255, 179, 105, 11, 255, 199, 132, 19, 255, 211, 148, 13, 255, 209, 148, 3, 255, 209, 148, 6, 255, 208, 146, 6, 255, 206, 137, 7, 255, 197, 122, 7, 255, 197, 117, 4, 255, 196, 117, 2, 255, 195, 123, 4, 255, 204, 136, 10, 255, 207, 138, 3, 255, 209, 139, 4, 255, 203, 134, 8, 255, 208, 141, 3, 255, 212, 144, 7, 255, 206, 132, 2, 255, 204, 124, 16, 255, 205, 128, 24, 255, 202, 123, 22, 255, 197, 117, 6, 255, 199, 117, 10, 255, 199, 120, 3, 255, 196, 114, 14, 255, 201, 112, 15, 255, 201, 114, 1, 255, 194, 107, 4, 255, 188, 102, 2, 255, 182, 99, 1, 255, 182, 101, 5, 255, 188, 109, 11, 255, 189, 108, 4, 255, 183, 98, 1, 255, 189, 108, 10, 255, 184, 110, 9, 255, 168, 92, 6, 255, 159, 81, 6, 255, 135, 66, 2, 255, 132, 57, 4, 255, 151, 78, 5, 255, 140, 71, 6, 255, 149, 71, 11, 255, 150, 75, 5, 255, 142, 69, 0, 255, 144, 75, 4, 255, 191, 128, 13, 255, 197, 136, 9, 255, 201, 136, 10, 255, 201, 130, 10, 255, 198, 123, 13, 255, 197, 121, 11, 255, 196, 116, 7, 255, 197, 117, 10, 255, 196, 119, 20, 255, 200, 124, 20, 255, 205, 128, 3, 255, 205, 127, 2, 255, 204, 126, 4, 255, 203, 123, 4, 255, 202, 121, 2, 255, 202, 118, 3, 255, 199, 114, 10, 255, 198, 112, 8, 255, 197, 113, 5, 255, 195, 112, 11, 255, 193, 111, 11, 255, 191, 107, 11, 255, 194, 110, 12, 255, 190, 106, 13, 255, 191, 101, 10, 255, 191, 105, 1, 255, 191, 108, 3, 255, 197, 114, 9, 255, 205, 123, 8, 255, 205, 122, 2, 255, 202, 114, 12, 255, 195, 105, 17, 255, 196, 103, 13, 255, 192, 97, 7, 255, 167, 77, 7, 255, 158, 74, 6, 255, 155, 73, 1, 255, 158, 73, 4, 255, 150, 63, 1, 255, 153, 68, 6, 255, 152, 70, 7, 255, 150, 67, 3, 255, 160, 74, 12, 255, 158, 67, 2, 255, 146, 64, 0, 255, 138, 57, 4, 255, 140, 55, 7, 255, 143, 58, 4, 255, 138, 57, 4, 255, 140, 53, 2, 255, 141, 56, 4, 255, 138, 51, 1, 255, 142, 55, 2, 255, 136, 53, 5, 255, 128, 49, 8, 255, 106, 38, 2, 255, 100, 35, 6, 255, 105, 36, 4, 255, 115, 41, 4, 255, 111, 44, 4, 255, 115, 46, 7, 255, 118, 56, 3, 255, 126, 55, 5, 255, 137, 57, 1, 255, 143, 62, 1, 255, 146, 65, 1, 255, 148, 68, 1, 255, 157, 68, 7, 255, 150, 56, 5, 255, 144, 55, 6, 255, 150, 61, 10, 255, 163, 83, 3, 255, 182, 105, 4, 255, 185, 99, 3, 255, 182, 87, 0, 255, 187, 93, 5, 255, 188, 97, 5, 255, 185, 94, 4, 255, 183, 90, 2, 255, 182, 89, 0, 255, 178, 87, 3, 255, 174, 83, 5, 255, 173, 83, 1, 255, 175, 85, 1, 255, 172, 81, 4, 255, 171, 78, 4, 255, 172, 78, 1, 255, 173, 79, 3, 255, 170, 79, 1, 255, 176, 86, 2, 255, 176, 86, 0, 255, 1, 22, 52, 255, 1, 25, 54, 255, 3, 26, 61, 255, 2, 23, 59, 255, 2, 21, 56, 255, 2, 17, 58, 255, 3, 19, 48, 255, 3, 19, 55, 255, 2, 22, 57, 255, 1, 20, 47, 255, 3, 18, 44, 255, 2, 17, 43, 255, 1, 16, 33, 255, 3, 3, 14, 255, 2, 2, 8, 255, 5, 5, 15, 255, 2, 2, 27, 255, 3, 1, 19, 255, 3, 1, 11, 255, 3, 2, 16, 255, 1, 2, 2, 255, 2, 0, 40, 255, 0, 60, 220, 255, 33, 66, 110, 255, 31, 19, 0, 255, 28, 5, 45, 255, 15, 27, 184, 255, 5, 14, 56, 255, 11, 0, 2, 255, 8, 2, 3, 255, 2, 6, 0, 255, 12, 1, 2, 255, 10, 3, 4, 255, 7, 4, 2, 255, 7, 5, 2, 255, 7, 3, 1, 255, 8, 2, 0, 255, 14, 3, 2, 255, 16, 9, 6, 255, 8, 4, 1, 255, 12, 3, 1, 255, 13, 4, 2, 255, 15, 5, 3, 255, 18, 7, 5, 255, 15, 5, 3, 255, 17, 7, 4, 255, 19, 6, 3, 255, 18, 5, 0, 255, 23, 9, 1, 255, 27, 12, 3, 255, 32, 14, 4, 255, 33, 13, 5, 255, 30, 12, 4, 255, 31, 10, 3, 255, 39, 14, 5, 255, 30, 16, 2, 255, 31, 15, 1, 255, 39, 15, 2, 255, 36, 21, 4, 255, 35, 21, 4, 255, 37, 19, 3, 255, 38, 21, 3, 255, 44, 27, 5, 255, 44, 23, 2, 255, 45, 29, 5, 255, 50, 30, 0, 255, 59, 38, 6, 255, 56, 40, 3, 255, 65, 43, 5, 255, 71, 50, 7, 255, 74, 55, 6, 255, 75, 56, 20, 255, 78, 58, 33, 255, 81, 71, 39, 255, 71, 71, 55, 255, 76, 73, 57, 255, 113, 78, 54, 255, 93, 68, 32, 255, 77, 63, 16, 255, 80, 64, 9, 255, 89, 65, 13, 255, 132, 85, 13, 255, 158, 91, 6, 255, 164, 92, 10, 255, 167, 94, 5, 255, 180, 104, 2, 255, 180, 100, 3, 255, 177, 95, 7, 255, 165, 90, 3, 255, 148, 78, 3, 255, 124, 64, 3, 255, 106, 56, 5, 255, 91, 56, 8, 255, 82, 54, 1, 255, 112, 68, 8, 255, 113, 64, 3, 255, 99, 58, 5, 255, 98, 60, 1, 255, 99, 59, 1, 255, 98, 57, 6, 255, 96, 53, 9, 255, 95, 54, 4, 255, 91, 54, 2, 255, 97, 54, 5, 255, 97, 57, 4, 255, 99, 56, 4, 255, 95, 55, 1, 255, 102, 55, 2, 255, 108, 60, 5, 255, 103, 55, 6, 255, 106, 56, 7, 255, 101, 57, 3, 255, 97, 54, 6, 255, 99, 54, 3, 255, 95, 52, 2, 255, 87, 52, 2, 255, 101, 57, 6, 255, 92, 48, 4, 255, 88, 45, 7, 255, 100, 47, 8, 255, 96, 47, 5, 255, 84, 48, 5, 255, 92, 44, 6, 255, 97, 53, 5, 255, 112, 56, 3, 255, 118, 49, 1, 255, 127, 53, 1, 255, 125, 49, 5, 255, 119, 47, 4, 255, 120, 47, 3, 255, 114, 49, 1, 255, 113, 48, 2, 255, 118, 50, 7, 255, 126, 52, 9, 255, 114, 48, 6, 255, 111, 50, 4, 255, 128, 62, 7, 255, 131, 60, 5, 255, 128, 56, 4, 255, 123, 53, 3, 255, 108, 49, 5, 255, 116, 54, 5, 255, 128, 57, 2, 255, 122, 51, 3, 255, 122, 52, 6, 255, 143, 60, 5, 255, 147, 57, 2, 255, 125, 51, 7, 255, 106, 46, 7, 255, 93, 45, 2, 255, 97, 50, 4, 255, 94, 49, 8, 255, 88, 42, 6, 255, 107, 45, 11, 255, 119, 51, 6, 255, 113, 58, 4, 255, 105, 48, 12, 255, 105, 46, 11, 255, 112, 52, 3, 255, 116, 61, 4, 255, 117, 59, 6, 255, 116, 54, 10, 255, 111, 51, 1, 255, 134, 72, 13, 255, 149, 78, 6, 255, 156, 81, 7, 255, 155, 78, 12, 255, 161, 86, 15, 255, 168, 91, 18, 255, 175, 90, 23, 255, 180, 96, 13, 255, 168, 89, 2, 255, 167, 84, 9, 255, 175, 92, 8, 255, 183, 97, 13, 255, 186, 105, 16, 255, 184, 104, 7, 255, 183, 98, 19, 255, 173, 95, 9, 255, 167, 89, 8, 255, 183, 104, 16, 255, 189, 111, 11, 255, 187, 100, 6, 255, 177, 96, 15, 255, 182, 113, 18, 255, 186, 109, 14, 255, 181, 108, 10, 255, 185, 109, 19, 255, 180, 108, 7, 255, 175, 101, 6, 255, 176, 102, 14, 255, 174, 100, 4, 255, 163, 88, 14, 255, 188, 109, 23, 255, 195, 113, 14, 255, 187, 116, 11, 255, 191, 116, 6, 255, 192, 114, 14, 255, 190, 107, 16, 255, 191, 105, 8, 255, 190, 118, 10, 255, 191, 120, 9, 255, 193, 118, 6, 255, 188, 111, 8, 255, 179, 103, 7, 255, 195, 122, 8, 255, 199, 127, 7, 255, 202, 126, 7, 255, 200, 125, 15, 255, 193, 123, 12, 255, 205, 133, 16, 255, 202, 131, 11, 255, 204, 135, 9, 255, 201, 128, 6, 255, 205, 130, 15, 255, 207, 137, 4, 255, 209, 141, 16, 255, 210, 143, 10, 255, 208, 144, 9, 255, 211, 144, 14, 255, 211, 146, 6, 255, 210, 151, 19, 255, 208, 141, 17, 255, 198, 133, 7, 255, 198, 122, 12, 255, 198, 127, 12, 255, 193, 124, 4, 255, 196, 121, 6, 255, 185, 103, 15, 255, 182, 103, 10, 255, 203, 130, 13, 255, 208, 130, 14, 255, 209, 126, 11, 255, 203, 118, 7, 255, 207, 121, 6, 255, 207, 120, 6, 255, 206, 120, 8, 255, 200, 116, 14, 255, 204, 120, 14, 255, 205, 122, 9, 255, 205, 123, 7, 255, 214, 130, 12, 255, 208, 121, 12, 255, 194, 107, 6, 255, 191, 106, 3, 255, 207, 125, 6, 255, 211, 130, 11, 255, 213, 136, 4, 255, 211, 135, 9, 255, 208, 128, 2, 255, 209, 125, 5, 255, 208, 128, 4, 255, 205, 124, 6, 255, 203, 121, 4, 255, 204, 123, 2, 255, 196, 114, 5, 255, 178, 88, 7, 255, 177, 94, 2, 255, 183, 101, 6, 255, 194, 114, 13, 255, 200, 124, 3, 255, 183, 107, 7, 255, 177, 105, 12, 255, 198, 134, 7, 255, 209, 146, 6, 255, 205, 141, 10, 255, 208, 142, 5, 255, 202, 132, 1, 255, 198, 128, 3, 255, 199, 130, 3, 255, 197, 125, 12, 255, 196, 124, 10, 255, 202, 132, 1, 255, 208, 140, 5, 255, 202, 133, 11, 255, 193, 122, 3, 255, 200, 129, 6, 255, 199, 129, 3, 255, 202, 131, 12, 255, 203, 132, 8, 255, 201, 128, 1, 255, 205, 129, 10, 255, 204, 128, 18, 255, 200, 122, 23, 255, 199, 121, 16, 255, 199, 122, 5, 255, 198, 118, 8, 255, 196, 115, 7, 255, 200, 114, 3, 255, 195, 111, 2, 255, 198, 116, 10, 255, 189, 111, 3, 255, 188, 109, 1, 255, 194, 113, 8, 255, 185, 98, 5, 255, 175, 90, 4, 255, 163, 82, 3, 255, 164, 85, 7, 255, 178, 97, 6, 255, 186, 102, 6, 255, 177, 92, 6, 255, 158, 85, 4, 255, 146, 73, 3, 255, 151, 76, 0, 255, 143, 67, 2, 255, 144, 70, 13, 255, 142, 77, 13, 255, 141, 69, 9, 255, 170, 98, 5, 255, 171, 92, 7, 255, 189, 111, 9, 255, 199, 126, 3, 255, 198, 125, 7, 255, 198, 120, 20, 255, 196, 118, 9, 255, 194, 116, 4, 255, 196, 117, 9, 255, 199, 120, 10, 255, 203, 121, 13, 255, 204, 122, 6, 255, 205, 123, 12, 255, 202, 121, 6, 255, 203, 122, 3, 255, 201, 121, 3, 255, 195, 114, 1, 255, 194, 111, 5, 255, 191, 108, 4, 255, 190, 107, 6, 255, 192, 111, 1, 255, 193, 109, 13, 255, 194, 109, 17, 255, 193, 107, 11, 255, 191, 105, 4, 255, 190, 102, 14, 255, 191, 109, 9, 255, 200, 121, 5, 255, 205, 124, 5, 255, 205, 121, 2, 255, 201, 116, 8, 255, 195, 107, 14, 255, 190, 104, 5, 255, 198, 111, 10, 255, 190, 98, 12, 255, 166, 69, 2, 255, 162, 70, 2, 255, 153, 65, 6, 255, 156, 72, 1, 255, 158, 74, 2, 255, 147, 63, 6, 255, 146, 61, 5, 255, 148, 66, 6, 255, 141, 57, 12, 255, 140, 56, 7, 255, 141, 57, 3, 255, 134, 52, 2, 255, 132, 51, 6, 255, 131, 49, 0, 255, 139, 52, 4, 255, 147, 57, 4, 255, 147, 57, 0, 255, 140, 53, 10, 255, 137, 54, 1, 255, 128, 45, 5, 255, 126, 44, 2, 255, 120, 40, 2, 255, 104, 36, 2, 255, 101, 33, 4, 255, 107, 45, 3, 255, 109, 48, 2, 255, 121, 51, 9, 255, 135, 57, 5, 255, 136, 59, 6, 255, 139, 59, 1, 255, 147, 66, 2, 255, 147, 66, 6, 255, 150, 70, 1, 255, 159, 72, 1, 255, 160, 66, 4, 255, 174, 85, 3, 255, 186, 98, 1, 255, 190, 101, 2, 255, 190, 100, 4, 255, 189, 98, 4, 255, 180, 89, 1, 255, 181, 90, 1, 255, 187, 96, 5, 255, 179, 90, 1, 255, 178, 87, 3, 255, 179, 88, 5, 255, 182, 92, 2, 255, 182, 88, 2, 255, 177, 85, 3, 255, 175, 84, 4, 255, 172, 82, 4, 255, 171, 80, 2, 255, 172, 79, 0, 255, 175, 81, 1, 255, 175, 83, 1, 255, 177, 85, 4, 255, 175, 82, 2, 255, 1, 26, 53, 255, 3, 29, 61, 255, 0, 27, 60, 255, 0, 26, 64, 255, 3, 28, 61, 255, 6, 31, 62, 255, 1, 21, 46, 255, 0, 21, 44, 255, 0, 21, 44, 255, 0, 21, 44, 255, 3, 20, 48, 255, 4, 20, 53, 255, 1, 20, 55, 255, 2, 14, 29, 255, 2, 2, 6, 255, 0, 2, 4, 255, 0, 5, 19, 255, 0, 1, 9, 255, 1, 3, 12, 255, 1, 2, 7, 255, 2, 0, 19, 255, 0, 46, 205, 255, 31, 82, 162, 255, 32, 23, 0, 255, 21, 5, 12, 255, 26, 19, 172, 255, 1, 22, 107, 255, 6, 5, 0, 255, 12, 1, 5, 255, 9, 4, 4, 255, 6, 3, 4, 255, 11, 5, 5, 255, 8, 4, 4, 255, 7, 3, 2, 255, 6, 1, 0, 255, 10, 3, 1, 255, 12, 2, 2, 255, 20, 6, 5, 255, 13, 3, 2, 255, 11, 4, 1, 255, 15, 5, 2, 255, 20, 8, 4, 255, 19, 8, 3, 255, 18, 6, 1, 255, 16, 5, 0, 255, 13, 7, 1, 255, 17, 8, 2, 255, 20, 7, 1, 255, 26, 8, 1, 255, 33, 9, 1, 255, 41, 11, 3, 255, 37, 13, 2, 255, 34, 14, 1, 255, 34, 16, 3, 255, 40, 17, 4, 255, 40, 15, 3, 255, 36, 16, 3, 255, 34, 19, 3, 255, 36, 23, 3, 255, 35, 22, 1, 255, 38, 24, 3, 255, 42, 26, 5, 255, 53, 31, 8, 255, 50, 26, 4, 255, 50, 29, 5, 255, 59, 33, 2, 255, 60, 36, 4, 255, 59, 41, 3, 255, 63, 41, 4, 255, 70, 48, 6, 255, 74, 55, 4, 255, 82, 56, 12, 255, 76, 61, 30, 255, 80, 71, 37, 255, 87, 70, 51, 255, 110, 80, 60, 255, 97, 70, 53, 255, 79, 66, 29, 255, 83, 62, 11, 255, 91, 68, 16, 255, 151, 88, 25, 255, 167, 90, 9, 255, 166, 91, 5, 255, 176, 102, 3, 255, 171, 100, 0, 255, 177, 108, 1, 255, 175, 99, 3, 255, 156, 82, 5, 255, 129, 68, 5, 255, 105, 58, 7, 255, 85, 55, 7, 255, 82, 53, 6, 255, 91, 58, 7, 255, 91, 56, 1, 255, 109, 67, 3, 255, 115, 60, 1, 255, 105, 59, 7, 255, 98, 57, 2, 255, 93, 59, 2, 255, 91, 58, 2, 255, 96, 58, 4, 255, 98, 59, 3, 255, 96, 59, 2, 255, 95, 58, 1, 255, 95, 58, 1, 255, 95, 58, 5, 255, 94, 57, 4, 255, 101, 58, 3, 255, 106, 59, 1, 255, 104, 58, 1, 255, 100, 53, 1, 255, 97, 54, 3, 255, 91, 50, 5, 255, 84, 48, 1, 255, 82, 52, 3, 255, 85, 45, 3, 255, 94, 48, 4, 255, 84, 47, 3, 255, 79, 47, 1, 255, 103, 51, 2, 255, 119, 56, 4, 255, 119, 57, 5, 255, 119, 57, 3, 255, 134, 56, 6, 255, 136, 51, 5, 255, 123, 49, 2, 255, 120, 50, 9, 255, 121, 52, 2, 255, 137, 63, 4, 255, 143, 68, 7, 255, 140, 64, 7, 255, 145, 68, 7, 255, 160, 77, 4, 255, 156, 73, 3, 255, 138, 62, 2, 255, 138, 66, 3, 255, 152, 70, 2, 255, 151, 64, 8, 255, 140, 64, 4, 255, 141, 65, 3, 255, 141, 60, 9, 255, 135, 55, 8, 255, 125, 54, 10, 255, 117, 51, 2, 255, 122, 48, 5, 255, 103, 41, 11, 255, 101, 44, 9, 255, 100, 45, 4, 255, 96, 43, 6, 255, 94, 42, 7, 255, 101, 45, 8, 255, 96, 41, 4, 255, 104, 53, 6, 255, 132, 69, 16, 255, 118, 54, 5, 255, 110, 49, 3, 255, 106, 50, 4, 255, 114, 51, 8, 255, 111, 48, 8, 255, 105, 43, 6, 255, 107, 50, 5, 255, 98, 51, 5, 255, 93, 48, 2, 255, 98, 50, 6, 255, 109, 59, 13, 255, 120, 64, 8, 255, 136, 72, 3, 255, 131, 71, 0, 255, 138, 77, 7, 255, 147, 77, 8, 255, 153, 84, 10, 255, 150, 83, 8, 255, 153, 82, 10, 255, 152, 76, 11, 255, 161, 89, 9, 255, 163, 88, 15, 255, 146, 80, 5, 255, 163, 94, 15, 255, 165, 90, 13, 255, 155, 88, 10, 255, 165, 91, 9, 255, 163, 90, 7, 255, 161, 83, 9, 255, 168, 89, 6, 255, 171, 93, 15, 255, 171, 92, 15, 255, 166, 94, 12, 255, 172, 97, 11, 255, 168, 95, 14, 255, 172, 97, 12, 255, 165, 92, 17, 255, 158, 87, 9, 255, 145, 78, 10, 255, 169, 104, 10, 255, 169, 102, 5, 255, 160, 98, 16, 255, 177, 103, 14, 255, 183, 109, 10, 255, 155, 86, 7, 255, 165, 96, 16, 255, 173, 99, 13, 255, 173, 102, 15, 255, 164, 98, 10, 255, 160, 96, 8, 255, 160, 97, 4, 255, 169, 101, 15, 255, 172, 103, 13, 255, 176, 112, 8, 255, 180, 114, 7, 255, 182, 113, 6, 255, 172, 110, 12, 255, 174, 110, 12, 255, 177, 112, 4, 255, 185, 120, 16, 255, 183, 122, 4, 255, 184, 119, 9, 255, 192, 119, 13, 255, 190, 114, 8, 255, 192, 119, 2, 255, 198, 125, 9, 255, 199, 129, 6, 255, 195, 127, 4, 255, 191, 121, 14, 255, 180, 109, 20, 255, 173, 100, 13, 255, 182, 105, 3, 255, 192, 110, 12, 255, 184, 106, 9, 255, 185, 108, 11, 255, 190, 110, 12, 255, 197, 114, 4, 255, 204, 121, 11, 255, 196, 119, 6, 255, 190, 112, 8, 255, 198, 115, 12, 255, 201, 117, 8, 255, 198, 115, 8, 255, 201, 120, 13, 255, 208, 123, 10, 255, 207, 117, 5, 255, 206, 117, 3, 255, 211, 126, 8, 255, 199, 115, 8, 255, 196, 113, 10, 255, 203, 123, 11, 255, 210, 131, 6, 255, 208, 131, 3, 255, 212, 136, 5, 255, 209, 134, 9, 255, 205, 130, 1, 255, 209, 131, 2, 255, 209, 130, 8, 255, 210, 132, 3, 255, 211, 130, 11, 255, 197, 115, 11, 255, 188, 104, 8, 255, 192, 106, 7, 255, 181, 98, 4, 255, 188, 111, 3, 255, 207, 133, 5, 255, 188, 113, 10, 255, 178, 106, 14, 255, 206, 138, 27, 255, 206, 142, 5, 255, 203, 140, 6, 255, 203, 140, 7, 255, 198, 132, 3, 255, 190, 119, 3, 255, 201, 131, 11, 255, 204, 136, 13, 255, 205, 138, 8, 255, 203, 134, 7, 255, 200, 130, 13, 255, 203, 133, 10, 255, 204, 134, 6, 255, 202, 133, 9, 255, 202, 131, 15, 255, 203, 134, 9, 255, 202, 134, 7, 255, 201, 129, 13, 255, 199, 127, 14, 255, 199, 125, 6, 255, 201, 126, 7, 255, 198, 121, 15, 255, 196, 121, 9, 255, 195, 119, 7, 255, 196, 117, 5, 255, 197, 116, 7, 255, 194, 112, 5, 255, 194, 112, 4, 255, 196, 114, 7, 255, 196, 113, 6, 255, 197, 112, 8, 255, 188, 104, 6, 255, 173, 87, 0, 255, 175, 93, 3, 255, 168, 88, 0, 255, 166, 81, 0, 255, 169, 79, 2, 255, 170, 84, 9, 255, 170, 88, 3, 255, 170, 88, 4, 255, 162, 82, 7, 255, 150, 71, 6, 255, 144, 66, 2, 255, 137, 65, 7, 255, 166, 108, 13, 255, 183, 125, 14, 255, 176, 109, 6, 255, 161, 80, 6, 255, 183, 101, 6, 255, 198, 117, 8, 255, 199, 118, 2, 255, 197, 116, 11, 255, 195, 117, 6, 255, 194, 117, 3, 255, 196, 120, 4, 255, 197, 119, 2, 255, 200, 120, 5, 255, 202, 121, 1, 255, 202, 122, 1, 255, 202, 122, 3, 255, 199, 117, 3, 255, 195, 114, 2, 255, 195, 112, 4, 255, 193, 110, 2, 255, 192, 107, 3, 255, 190, 103, 10, 255, 190, 105, 5, 255, 194, 110, 8, 255, 194, 111, 4, 255, 192, 109, 5, 255, 193, 110, 9, 255, 197, 115, 7, 255, 203, 124, 9, 255, 205, 125, 9, 255, 204, 119, 6, 255, 202, 114, 7, 255, 198, 111, 9, 255, 195, 108, 6, 255, 195, 107, 4, 255, 197, 106, 11, 255, 165, 76, 12, 255, 151, 64, 3, 255, 154, 67, 2, 255, 157, 65, 6, 255, 163, 73, 6, 255, 154, 72, 3, 255, 139, 61, 0, 255, 138, 60, 0, 255, 143, 63, 5, 255, 140, 57, 7, 255, 137, 58, 9, 255, 138, 58, 1, 255, 136, 55, 0, 255, 132, 48, 2, 255, 134, 49, 2, 255, 139, 50, 1, 255, 142, 59, 3, 255, 135, 53, 1, 255, 131, 48, 7, 255, 132, 51, 4, 255, 125, 44, 4, 255, 124, 41, 7, 255, 122, 41, 8, 255, 113, 46, 2, 255, 116, 44, 2, 255, 130, 55, 2, 255, 135, 61, 0, 255, 137, 60, 2, 255, 142, 62, 3, 255, 146, 65, 4, 255, 152, 68, 1, 255, 158, 69, 5, 255, 157, 68, 4, 255, 161, 73, 2, 255, 160, 69, 1, 255, 172, 78, 3, 255, 188, 98, 7, 255, 191, 102, 2, 255, 191, 102, 2, 255, 191, 101, 3, 255, 190, 100, 2, 255, 186, 97, 2, 255, 181, 88, 3, 255, 177, 84, 3, 255, 175, 84, 6, 255, 168, 76, 1, 255, 171, 80, 0, 255, 179, 89, 0, 255, 180, 89, 2, 255, 177, 87, 2, 255, 173, 82, 0, 255, 175, 84, 1, 255, 176, 84, 3, 255, 174, 82, 2, 255, 175, 82, 1, 255, 179, 88, 2, 255, 179, 88, 4, 255, 175, 84, 1, 255, 4, 25, 66, 255, 3, 23, 66, 255, 1, 26, 60, 255, 2, 27, 64, 255, 0, 25, 57, 255, 2, 27, 57, 255, 1, 23, 50, 255, 1, 22, 44, 255, 1, 22, 45, 255, 2, 21, 51, 255, 2, 20, 47, 255, 0, 17, 41, 255, 0, 16, 46, 255, 2, 18, 54, 255, 3, 6, 23, 255, 0, 2, 12, 255, 3, 0, 12, 255, 4, 0, 12, 255, 4, 2, 13, 255, 3, 0, 11, 255, 0, 34, 171, 255, 24, 84, 194, 255, 52, 32, 8, 255, 22, 11, 0, 255, 27, 22, 136, 255, 4, 24, 137, 255, 11, 1, 0, 255, 5, 5, 0, 255, 9, 2, 0, 255, 13, 7, 5, 255, 7, 4, 4, 255, 10, 5, 5, 255, 9, 5, 2, 255, 9, 5, 2, 255, 8, 3, 1, 255, 10, 2, 1, 255, 19, 8, 6, 255, 18, 4, 3, 255, 14, 2, 1, 255, 13, 3, 2, 255, 17, 6, 2, 255, 23, 10, 5, 255, 19, 6, 1, 255, 23, 9, 4, 255, 22, 9, 3, 255, 21, 7, 2, 255, 23, 10, 3, 255, 26, 10, 4, 255, 31, 12, 5, 255, 35, 13, 5, 255, 37, 12, 1, 255, 39, 16, 0, 255, 35, 15, 0, 255, 37, 17, 1, 255, 41, 18, 5, 255, 41, 16, 3, 255, 39, 19, 5, 255, 31, 17, 0, 255, 43, 25, 5, 255, 44, 24, 4, 255, 34, 24, 1, 255, 42, 27, 2, 255, 49, 25, 1, 255, 46, 29, 2, 255, 57, 32, 4, 255, 65, 35, 2, 255, 63, 38, 4, 255, 65, 44, 4, 255, 65, 43, 4, 255, 67, 48, 6, 255, 78, 57, 7, 255, 80, 56, 5, 255, 76, 61, 15, 255, 81, 60, 27, 255, 115, 75, 55, 255, 106, 78, 57, 255, 79, 75, 47, 255, 84, 71, 14, 255, 113, 77, 9, 255, 144, 79, 10, 255, 166, 83, 7, 255, 163, 96, 9, 255, 176, 98, 7, 255, 176, 99, 2, 255, 171, 95, 3, 255, 160, 87, 3, 255, 128, 68, 6, 255, 99, 57, 8, 255, 88, 59, 4, 255, 88, 58, 1, 255, 93, 59, 5, 255, 94, 60, 3, 255, 99, 57, 1, 255, 92, 57, 0, 255, 112, 65, 5, 255, 113, 61, 6, 255, 93, 55, 3, 255, 94, 58, 6, 255, 90, 60, 5, 255, 96, 59, 2, 255, 97, 60, 2, 255, 96, 56, 0, 255, 97, 57, 3, 255, 94, 60, 3, 255, 101, 59, 3, 255, 99, 59, 2, 255, 98, 55, 2, 255, 97, 54, 5, 255, 96, 46, 5, 255, 90, 49, 7, 255, 87, 49, 3, 255, 103, 55, 6, 255, 108, 59, 10, 255, 99, 57, 2, 255, 102, 54, 4, 255, 109, 55, 6, 255, 122, 58, 4, 255, 132, 61, 2, 255, 146, 68, 6, 255, 158, 68, 5, 255, 153, 59, 3, 255, 146, 59, 8, 255, 126, 55, 4, 255, 121, 42, 4, 255, 118, 53, 1, 255, 129, 62, 5, 255, 127, 51, 6, 255, 134, 60, 6, 255, 161, 75, 9, 255, 177, 77, 1, 255, 174, 80, 1, 255, 177, 83, 6, 255, 173, 80, 3, 255, 162, 66, 5, 255, 143, 57, 4, 255, 131, 59, 5, 255, 130, 56, 9, 255, 129, 50, 5, 255, 146, 65, 5, 255, 163, 74, 8, 255, 143, 55, 2, 255, 123, 48, 5, 255, 104, 52, 4, 255, 102, 51, 5, 255, 99, 44, 10, 255, 85, 35, 9, 255, 87, 44, 4, 255, 91, 46, 6, 255, 96, 44, 4, 255, 101, 49, 5, 255, 100, 44, 8, 255, 93, 41, 7, 255, 118, 59, 4, 255, 140, 69, 2, 255, 126, 64, 4, 255, 123, 58, 3, 255, 127, 62, 2, 255, 135, 62, 1, 255, 132, 58, 6, 255, 125, 51, 11, 255, 122, 48, 7, 255, 114, 55, 1, 255, 107, 54, 8, 255, 98, 46, 5, 255, 99, 49, 9, 255, 104, 54, 4, 255, 114, 56, 3, 255, 104, 48, 6, 255, 113, 60, 16, 255, 124, 67, 10, 255, 114, 54, 10, 255, 115, 56, 14, 255, 128, 68, 5, 255, 129, 69, 8, 255, 122, 61, 3, 255, 129, 58, 11, 255, 105, 49, 12, 255, 103, 53, 7, 255, 114, 62, 10, 255, 125, 67, 15, 255, 142, 77, 15, 255, 139, 79, 9, 255, 120, 64, 4, 255, 122, 63, 4, 255, 116, 51, 14, 255, 120, 57, 15, 255, 143, 82, 21, 255, 129, 71, 7, 255, 135, 72, 13, 255, 125, 64, 9, 255, 139, 81, 7, 255, 129, 70, 11, 255, 100, 56, 7, 255, 117, 60, 7, 255, 122, 69, 10, 255, 120, 72, 10, 255, 153, 83, 12, 255, 129, 66, 6, 255, 109, 62, 3, 255, 127, 77, 12, 255, 135, 80, 9, 255, 132, 77, 5, 255, 134, 79, 12, 255, 135, 77, 2, 255, 142, 81, 3, 255, 141, 79, 11, 255, 142, 79, 11, 255, 152, 92, 13, 255, 168, 101, 10, 255, 180, 104, 7, 255, 173, 103, 4, 255, 172, 99, 8, 255, 167, 93, 10, 255, 175, 104, 16, 255, 178, 105, 6, 255, 170, 92, 13, 255, 169, 93, 20, 255, 161, 90, 5, 255, 173, 96, 7, 255, 184, 109, 15, 255, 178, 103, 6, 255, 182, 98, 3, 255, 181, 99, 15, 255, 181, 95, 15, 255, 176, 96, 11, 255, 183, 97, 13, 255, 187, 107, 4, 255, 188, 113, 10, 255, 191, 115, 7, 255, 193, 105, 5, 255, 185, 94, 3, 255, 171, 83, 13, 255, 190, 108, 17, 255, 195, 111, 11, 255, 197, 108, 11, 255, 189, 107, 11, 255, 191, 115, 8, 255, 191, 105, 2, 255, 179, 88, 6, 255, 180, 89, 15, 255, 197, 112, 9, 255, 191, 103, 4, 255, 193, 106, 8, 255, 200, 119, 10, 255, 207, 131, 10, 255, 210, 137, 6, 255, 210, 137, 3, 255, 208, 135, 4, 255, 206, 132, 8, 255, 209, 134, 8, 255, 212, 135, 4, 255, 200, 120, 5, 255, 201, 121, 3, 255, 201, 119, 8, 255, 192, 109, 6, 255, 194, 110, 10, 255, 187, 103, 3, 255, 178, 94, 5, 255, 180, 102, 6, 255, 187, 115, 2, 255, 190, 121, 7, 255, 201, 138, 9, 255, 208, 144, 6, 255, 209, 142, 7, 255, 205, 141, 2, 255, 205, 139, 8, 255, 190, 121, 3, 255, 194, 123, 8, 255, 210, 140, 9, 255, 207, 138, 7, 255, 204, 135, 4, 255, 202, 135, 2, 255, 198, 129, 12, 255, 202, 129, 20, 255, 201, 129, 7, 255, 202, 130, 10, 255, 202, 131, 19, 255, 205, 136, 15, 255, 201, 133, 7, 255, 198, 126, 15, 255, 199, 125, 21, 255, 195, 122, 9, 255, 197, 121, 11, 255, 198, 120, 19, 255, 196, 120, 11, 255, 195, 118, 10, 255, 194, 119, 5, 255, 194, 118, 4, 255, 195, 120, 5, 255, 205, 127, 7, 255, 197, 117, 0, 255, 193, 109, 1, 255, 186, 100, 3, 255, 188, 101, 3, 255, 182, 95, 7, 255, 174, 86, 3, 255, 176, 88, 6, 255, 162, 74, 6, 255, 151, 68, 2, 255, 150, 70, 0, 255, 150, 72, 5, 255, 152, 77, 1, 255, 161, 82, 1, 255, 143, 67, 6, 255, 124, 59, 2, 255, 130, 66, 12, 255, 185, 121, 12, 255, 215, 151, 6, 255, 183, 111, 8, 255, 182, 110, 8, 255, 181, 113, 1, 255, 186, 113, 3, 255, 195, 116, 10, 255, 196, 114, 11, 255, 196, 113, 14, 255, 196, 117, 9, 255, 197, 119, 8, 255, 197, 118, 7, 255, 199, 118, 10, 255, 200, 119, 7, 255, 200, 119, 0, 255, 197, 117, 1, 255, 194, 111, 3, 255, 193, 108, 4, 255, 192, 106, 2, 255, 191, 105, 1, 255, 190, 103, 0, 255, 190, 102, 3, 255, 190, 103, 6, 255, 191, 105, 9, 255, 193, 110, 9, 255, 198, 117, 8, 255, 201, 121, 13, 255, 202, 122, 8, 255, 204, 123, 4, 255, 204, 119, 8, 255, 202, 115, 6, 255, 201, 113, 9, 255, 195, 109, 3, 255, 196, 108, 1, 255, 197, 105, 16, 255, 171, 78, 7, 255, 148, 60, 5, 255, 157, 75, 9, 255, 158, 74, 9, 255, 159, 70, 5, 255, 158, 72, 5, 255, 149, 64, 2, 255, 147, 64, 1, 255, 146, 65, 4, 255, 141, 60, 6, 255, 138, 61, 5, 255, 136, 58, 3, 255, 137, 55, 1, 255, 141, 55, 4, 255, 141, 54, 4, 255, 137, 52, 2, 255, 134, 48, 2, 255, 126, 46, 3, 255, 120, 42, 3, 255, 125, 46, 1, 255, 126, 47, 2, 255, 127, 47, 5, 255, 122, 42, 6, 255, 121, 46, 3, 255, 117, 51, 2, 255, 134, 61, 2, 255, 141, 61, 2, 255, 140, 59, 2, 255, 143, 63, 4, 255, 146, 66, 2, 255, 153, 69, 1, 255, 164, 74, 3, 255, 165, 70, 2, 255, 169, 73, 0, 255, 170, 77, 2, 255, 171, 77, 2, 255, 176, 84, 0, 255, 189, 99, 0, 255, 191, 102, 0, 255, 191, 102, 3, 255, 190, 100, 2, 255, 188, 98, 0, 255, 190, 100, 4, 255, 182, 91, 3, 255, 174, 83, 0, 255, 177, 86, 6, 255, 172, 79, 4, 255, 171, 79, 2, 255, 173, 82, 1, 255, 169, 80, 0, 255, 170, 81, 1, 255, 173, 82, 0, 255, 173, 82, 0, 255, 173, 80, 2, 255, 173, 81, 3, 255, 175, 82, 4, 255, 175, 83, 1, 255, 176, 85, 3, 255, 173, 82, 1, 255, 1, 21, 48, 255, 2, 23, 57, 255, 4, 27, 61, 255, 3, 26, 67, 255, 4, 28, 65, 255, 0, 23, 54, 255, 0, 21, 56, 255, 2, 21, 49, 255, 3, 21, 47, 255, 3, 19, 50, 255, 1, 18, 42, 255, 0, 17, 32, 255, 1, 17, 33, 255, 3, 15, 45, 255, 1, 7, 31, 255, 4, 1, 13, 255, 1, 0, 14, 255, 2, 2, 18, 255, 3, 1, 2, 255, 0, 11, 117, 255, 18, 88, 215, 255, 47, 45, 27, 255, 26, 8, 0, 255, 29, 22, 97, 255, 6, 25, 165, 255, 7, 2, 4, 255, 10, 1, 4, 255, 6, 4, 3, 255, 11, 3, 3, 255, 12, 3, 0, 255, 13, 4, 4, 255, 14, 3, 1, 255, 11, 3, 1, 255, 11, 3, 2, 255, 14, 6, 4, 255, 15, 7, 5, 255, 15, 7, 4, 255, 14, 5, 2, 255, 16, 5, 3, 255, 16, 5, 3, 255, 17, 4, 1, 255, 21, 7, 4, 255, 17, 3, 0, 255, 21, 9, 3, 255, 22, 9, 2, 255, 26, 8, 2, 255, 24, 8, 2, 255, 26, 10, 2, 255, 32, 11, 2, 255, 37, 16, 3, 255, 35, 17, 1, 255, 41, 19, 5, 255, 37, 18, 4, 255, 41, 16, 3, 255, 42, 15, 2, 255, 33, 19, 0, 255, 37, 22, 3, 255, 42, 18, 1, 255, 38, 18, 1, 255, 39, 24, 3, 255, 46, 26, 5, 255, 45, 28, 3, 255, 43, 28, 0, 255, 54, 32, 4, 255, 61, 38, 5, 255, 69, 37, 2, 255, 64, 41, 5, 255, 67, 47, 5, 255, 66, 45, 5, 255, 66, 49, 7, 255, 78, 58, 9, 255, 71, 60, 7, 255, 79, 61, 10, 255, 101, 70, 13, 255, 112, 74, 37, 255, 81, 65, 53, 255, 86, 74, 26, 255, 130, 73, 16, 255, 146, 75, 8, 255, 160, 91, 4, 255, 170, 96, 4, 255, 162, 97, 6, 255, 169, 93, 5, 255, 155, 84, 2, 255, 126, 70, 7, 255, 93, 60, 6, 255, 80, 53, 6, 255, 85, 54, 4, 255, 89, 59, 3, 255, 89, 57, 3, 255, 93, 59, 3, 255, 93, 60, 3, 255, 89, 60, 1, 255, 92, 57, 2, 255, 112, 66, 5, 255, 115, 63, 2, 255, 106, 56, 2, 255, 104, 55, 8, 255, 89, 54, 5, 255, 90, 53, 4, 255, 97, 58, 8, 255, 95, 57, 7, 255, 97, 57, 8, 255, 91, 56, 1, 255, 99, 57, 1, 255, 95, 56, 1, 255, 103, 57, 2, 255, 112, 70, 5, 255, 122, 73, 3, 255, 135, 80, 12, 255, 144, 83, 9, 255, 158, 84, 7, 255, 161, 79, 3, 255, 156, 70, 1, 255, 160, 69, 7, 255, 166, 73, 3, 255, 168, 73, 1, 255, 170, 77, 2, 255, 167, 72, 4, 255, 169, 72, 2, 255, 167, 73, 1, 255, 161, 72, 2, 255, 151, 66, 2, 255, 159, 73, 4, 255, 171, 84, 4, 255, 161, 71, 4, 255, 147, 65, 4, 255, 156, 69, 4, 255, 171, 80, 2, 255, 174, 84, 4, 255, 166, 74, 4, 255, 153, 58, 5, 255, 147, 54, 8, 255, 140, 51, 4, 255, 125, 52, 7, 255, 111, 49, 4, 255, 101, 42, 10, 255, 119, 56, 9, 255, 136, 62, 8, 255, 108, 40, 9, 255, 79, 41, 2, 255, 90, 44, 4, 255, 82, 37, 2, 255, 70, 37, 4, 255, 68, 41, 7, 255, 83, 39, 5, 255, 76, 39, 3, 255, 79, 41, 8, 255, 86, 45, 11, 255, 83, 45, 4, 255, 88, 46, 8, 255, 86, 45, 10, 255, 96, 47, 2, 255, 130, 67, 11, 255, 123, 59, 7, 255, 117, 56, 4, 255, 120, 55, 12, 255, 127, 59, 10, 255, 133, 62, 3, 255, 134, 58, 4, 255, 123, 54, 7, 255, 124, 51, 5, 255, 125, 56, 5, 255, 129, 62, 7, 255, 125, 53, 13, 255, 123, 54, 10, 255, 124, 58, 6, 255, 119, 57, 6, 255, 113, 55, 8, 255, 113, 52, 10, 255, 109, 51, 7, 255, 110, 54, 7, 255, 112, 54, 4, 255, 113, 57, 13, 255, 102, 52, 7, 255, 98, 47, 9, 255, 101, 50, 7, 255, 115, 62, 8, 255, 115, 59, 11, 255, 121, 64, 7, 255, 138, 76, 8, 255, 124, 63, 7, 255, 89, 37, 8, 255, 99, 48, 10, 255, 108, 57, 9, 255, 108, 59, 13, 255, 141, 82, 18, 255, 127, 70, 8, 255, 130, 71, 8, 255, 118, 64, 16, 255, 137, 77, 11, 255, 135, 67, 7, 255, 102, 58, 5, 255, 100, 48, 8, 255, 110, 59, 12, 255, 127, 69, 10, 255, 130, 69, 8, 255, 116, 64, 11, 255, 96, 51, 5, 255, 97, 51, 5, 255, 96, 49, 8, 255, 100, 51, 11, 255, 106, 53, 10, 255, 118, 61, 14, 255, 127, 69, 6, 255, 122, 65, 8, 255, 114, 60, 4, 255, 119, 57, 9, 255, 127, 60, 3, 255, 124, 61, 3, 255, 126, 66, 10, 255, 130, 66, 10, 255, 138, 72, 12, 255, 141, 71, 10, 255, 137, 68, 13, 255, 138, 72, 9, 255, 136, 73, 11, 255, 142, 79, 9, 255, 151, 79, 16, 255, 136, 69, 5, 255, 137, 70, 1, 255, 149, 74, 8, 255, 141, 72, 14, 255, 144, 74, 5, 255, 152, 76, 9, 255, 144, 72, 11, 255, 149, 75, 6, 255, 162, 76, 7, 255, 166, 75, 8, 255, 164, 83, 6, 255, 160, 83, 9, 255, 177, 100, 19, 255, 175, 98, 10, 255, 173, 86, 13, 255, 185, 95, 6, 255, 187, 101, 6, 255, 181, 98, 9, 255, 166, 77, 9, 255, 165, 76, 13, 255, 186, 103, 11, 255, 191, 108, 10, 255, 187, 105, 4, 255, 203, 119, 16, 255, 209, 135, 7, 255, 209, 136, 1, 255, 205, 132, 3, 255, 213, 138, 16, 255, 203, 127, 15, 255, 191, 112, 6, 255, 201, 120, 9, 255, 210, 131, 3, 255, 200, 119, 2, 255, 197, 112, 6, 255, 189, 104, 12, 255, 188, 103, 13, 255, 182, 98, 6, 255, 174, 89, 5, 255, 180, 98, 3, 255, 183, 106, 11, 255, 185, 110, 18, 255, 203, 135, 7, 255, 209, 144, 2, 255, 198, 131, 3, 255, 191, 120, 6, 255, 202, 134, 4, 255, 212, 142, 9, 255, 201, 127, 8, 255, 199, 124, 4, 255, 199, 122, 4, 255, 201, 123, 2, 255, 207, 135, 6, 255, 202, 130, 14, 255, 203, 133, 12, 255, 196, 125, 7, 255, 199, 127, 10, 255, 202, 128, 22, 255, 202, 129, 11, 255, 198, 126, 11, 255, 198, 125, 17, 255, 200, 128, 7, 255, 197, 123, 4, 255, 196, 119, 7, 255, 198, 122, 10, 255, 198, 120, 18, 255, 198, 119, 15, 255, 197, 121, 9, 255, 197, 121, 10, 255, 196, 124, 4, 255, 200, 131, 5, 255, 206, 132, 5, 255, 205, 127, 5, 255, 197, 115, 7, 255, 183, 98, 4, 255, 174, 90, 0, 255, 173, 84, 9, 255, 164, 78, 6, 255, 155, 78, 1, 255, 153, 72, 4, 255, 160, 78, 3, 255, 175, 97, 1, 255, 172, 98, 6, 255, 159, 78, 7, 255, 167, 85, 10, 255, 151, 81, 11, 255, 116, 61, 1, 255, 123, 61, 6, 255, 173, 95, 9, 255, 199, 135, 2, 255, 196, 131, 4, 255, 197, 125, 4, 255, 186, 109, 6, 255, 185, 106, 2, 255, 192, 110, 13, 255, 195, 112, 10, 255, 197, 115, 10, 255, 196, 116, 5, 255, 196, 119, 2, 255, 197, 119, 4, 255, 199, 117, 5, 255, 198, 115, 6, 255, 197, 111, 8, 255, 193, 107, 4, 255, 190, 104, 1, 255, 190, 104, 3, 255, 189, 103, 3, 255, 190, 102, 5, 255, 189, 101, 2, 255, 187, 98, 3, 255, 187, 98, 4, 255, 188, 102, 5, 255, 194, 110, 10, 255, 201, 120, 9, 255, 204, 123, 16, 255, 205, 122, 13, 255, 201, 116, 3, 255, 201, 115, 6, 255, 201, 115, 3, 255, 198, 114, 6, 255, 193, 112, 2, 255, 193, 106, 1, 255, 168, 77, 10, 255, 156, 69, 2, 255, 163, 75, 7, 255, 156, 66, 10, 255, 150, 59, 6, 255, 146, 62, 0, 255, 151, 69, 7, 255, 154, 68, 9, 255, 153, 67, 3, 255, 148, 63, 4, 255, 143, 59, 7, 255, 142, 61, 4, 255, 143, 61, 5, 255, 139, 50, 1, 255, 140, 48, 2, 255, 143, 56, 6, 255, 134, 52, 2, 255, 131, 48, 4, 255, 129, 50, 4, 255, 121, 44, 5, 255, 124, 47, 4, 255, 122, 45, 1, 255, 124, 50, 0, 255, 121, 48, 6, 255, 118, 47, 2, 255, 133, 59, 11, 255, 140, 63, 3, 255, 144, 63, 0, 255, 148, 66, 5, 255, 155, 69, 6, 255, 161, 73, 0, 255, 163, 73, 6, 255, 164, 70, 7, 255, 176, 82, 1, 255, 188, 94, 3, 255, 180, 87, 1, 255, 180, 89, 2, 255, 186, 97, 5, 255, 192, 105, 3, 255, 191, 103, 0, 255, 190, 100, 4, 255, 189, 97, 3, 255, 187, 92, 0, 255, 189, 94, 2, 255, 185, 94, 3, 255, 181, 91, 0, 255, 179, 90, 1, 255, 179, 89, 1, 255, 177, 87, 1, 255, 174, 83, 1, 255, 172, 83, 2, 255, 172, 83, 1, 255, 175, 84, 1, 255, 177, 86, 2, 255, 177, 84, 3, 255, 172, 81, 2, 255, 168, 76, 0, 255, 170, 77, 1, 255, 171, 78, 2, 255, 170, 78, 1, 255, 1, 23, 58, 255, 2, 25, 59, 255, 0, 24, 57, 255, 0, 26, 57, 255, 0, 26, 62, 255, 0, 26, 59, 255, 2, 24, 60, 255, 4, 24, 52, 255, 3, 20, 42, 255, 0, 16, 38, 255, 0, 16, 38, 255, 4, 15, 38, 255, 4, 14, 37, 255, 3, 6, 27, 255, 0, 1, 8, 255, 4, 2, 12, 255, 0, 3, 12, 255, 0, 1, 0, 255, 0, 4, 82, 255, 18, 71, 223, 255, 51, 55, 46, 255, 23, 10, 0, 255, 18, 21, 66, 255, 10, 32, 189, 255, 8, 3, 32, 255, 10, 4, 0, 255, 9, 7, 4, 255, 3, 6, 4, 255, 10, 4, 6, 255, 11, 3, 3, 255, 12, 6, 8, 255, 14, 4, 3, 255, 13, 3, 1, 255, 14, 4, 3, 255, 16, 6, 4, 255, 18, 7, 4, 255, 14, 5, 1, 255, 14, 6, 0, 255, 17, 5, 1, 255, 25, 10, 6, 255, 22, 7, 2, 255, 25, 9, 4, 255, 25, 10, 4, 255, 22, 6, 1, 255, 21, 8, 1, 255, 21, 9, 2, 255, 23, 10, 2, 255, 32, 12, 2, 255, 40, 12, 1, 255, 45, 16, 3, 255, 45, 21, 4, 255, 39, 13, 1, 255, 38, 17, 3, 255, 46, 17, 5, 255, 47, 17, 4, 255, 33, 21, 0, 255, 38, 23, 2, 255, 46, 22, 5, 255, 37, 23, 4, 255, 39, 25, 4, 255, 43, 23, 2, 255, 52, 29, 3, 255, 56, 30, 2, 255, 67, 35, 5, 255, 63, 41, 2, 255, 74, 41, 4, 255, 63, 42, 3, 255, 68, 45, 2, 255, 68, 46, 2, 255, 67, 48, 5, 255, 70, 56, 1, 255, 70, 59, 1, 255, 93, 69, 14, 255, 104, 65, 17, 255, 75, 62, 20, 255, 94, 71, 21, 255, 147, 80, 15, 255, 163, 80, 8, 255, 156, 84, 7, 255, 164, 90, 8, 255, 162, 82, 7, 255, 152, 75, 8, 255, 125, 60, 3, 255, 90, 55, 6, 255, 84, 54, 6, 255, 85, 56, 0, 255, 87, 62, 0, 255, 86, 61, 0, 255, 91, 61, 1, 255, 92, 60, 4, 255, 90, 57, 2, 255, 88, 56, 3, 255, 87, 59, 5, 255, 88, 59, 7, 255, 114, 65, 6, 255, 113, 63, 3, 255, 96, 59, 6, 255, 97, 59, 3, 255, 93, 60, 4, 255, 97, 54, 3, 255, 92, 58, 6, 255, 82, 55, 5, 255, 97, 58, 4, 255, 111, 67, 4, 255, 133, 82, 6, 255, 154, 95, 7, 255, 169, 98, 5, 255, 174, 94, 5, 255, 176, 84, 3, 255, 174, 78, 2, 255, 169, 77, 1, 255, 166, 72, 1, 255, 169, 77, 2, 255, 167, 77, 3, 255, 167, 75, 2, 255, 172, 76, 5, 255, 169, 75, 1, 255, 169, 75, 1, 255, 172, 78, 2, 255, 177, 83, 1, 255, 174, 83, 2, 255, 172, 84, 4, 255, 177, 82, 9, 255, 172, 83, 9, 255, 168, 77, 0, 255, 177, 77, 2, 255, 169, 78, 2, 255, 157, 72, 0, 255, 151, 69, 1, 255, 141, 52, 2, 255, 125, 51, 9, 255, 118, 57, 9, 255, 101, 48, 1, 255, 96, 52, 3, 255, 88, 47, 3, 255, 79, 45, 3, 255, 88, 51, 5, 255, 100, 53, 5, 255, 86, 44, 5, 255, 81, 40, 12, 255, 87, 52, 10, 255, 88, 48, 7, 255, 88, 42, 4, 255, 88, 45, 6, 255, 85, 43, 6, 255, 69, 36, 1, 255, 80, 41, 6, 255, 85, 46, 5, 255, 77, 43, 7, 255, 78, 46, 10, 255, 91, 48, 8, 255, 92, 47, 6, 255, 91, 48, 7, 255, 105, 56, 12, 255, 108, 55, 3, 255, 107, 61, 4, 255, 99, 48, 10, 255, 102, 49, 10, 255, 111, 55, 4, 255, 114, 55, 6, 255, 121, 54, 3, 255, 128, 52, 12, 255, 126, 53, 4, 255, 136, 60, 1, 255, 141, 57, 3, 255, 133, 57, 4, 255, 126, 58, 10, 255, 117, 55, 7, 255, 109, 50, 2, 255, 104, 44, 2, 255, 102, 46, 8, 255, 97, 43, 9, 255, 97, 42, 15, 255, 106, 50, 9, 255, 139, 71, 7, 255, 115, 54, 11, 255, 103, 53, 10, 255, 109, 57, 0, 255, 108, 46, 1, 255, 100, 48, 2, 255, 113, 59, 12, 255, 127, 66, 15, 255, 107, 50, 6, 255, 105, 54, 6, 255, 109, 50, 5, 255, 106, 48, 8, 255, 109, 57, 8, 255, 126, 71, 14, 255, 133, 65, 7, 255, 163, 87, 7, 255, 135, 67, 7, 255, 107, 58, 8, 255, 93, 45, 8, 255, 87, 42, 2, 255, 92, 52, 8, 255, 135, 76, 10, 255, 144, 74, 12, 255, 133, 72, 9, 255, 120, 71, 5, 255, 105, 52, 8, 255, 109, 57, 12, 255, 112, 60, 10, 255, 107, 55, 8, 255, 114, 63, 6, 255, 125, 74, 9, 255, 121, 71, 10, 255, 112, 69, 2, 255, 111, 64, 9, 255, 105, 60, 10, 255, 93, 55, 10, 255, 96, 56, 7, 255, 102, 57, 6, 255, 104, 59, 0, 255, 102, 53, 1, 255, 106, 56, 6, 255, 117, 64, 10, 255, 115, 58, 1, 255, 124, 67, 5, 255, 117, 62, 13, 255, 111, 55, 14, 255, 120, 64, 6, 255, 134, 70, 8, 255, 131, 66, 9, 255, 131, 70, 6, 255, 129, 70, 12, 255, 129, 69, 9, 255, 133, 74, 10, 255, 136, 74, 12, 255, 136, 74, 9, 255, 133, 69, 11, 255, 152, 78, 17, 255, 171, 93, 10, 255, 155, 81, 0, 255, 154, 80, 6, 255, 162, 87, 13, 255, 167, 89, 10, 255, 153, 69, 15, 255, 161, 83, 6, 255, 186, 106, 8, 255, 191, 109, 2, 255, 193, 111, 4, 255, 203, 127, 8, 255, 203, 131, 8, 255, 210, 137, 13, 255, 210, 138, 8, 255, 211, 140, 1, 255, 216, 143, 7, 255, 208, 130, 4, 255, 199, 116, 4, 255, 203, 120, 6, 255, 199, 116, 7, 255, 193, 105, 10, 255, 191, 106, 4, 255, 184, 100, 1, 255, 183, 99, 13, 255, 173, 91, 4, 255, 177, 100, 8, 255, 190, 113, 12, 255, 187, 112, 6, 255, 200, 131, 13, 255, 204, 137, 6, 255, 196, 125, 7, 255, 182, 108, 5, 255, 193, 119, 11, 255, 194, 119, 14, 255, 197, 120, 8, 255, 193, 112, 11, 255, 186, 104, 5, 255, 186, 104, 1, 255, 198, 120, 10, 255, 206, 132, 11, 255, 204, 132, 8, 255, 201, 131, 10, 255, 197, 125, 12, 255, 203, 132, 7, 255, 202, 130, 7, 255, 201, 130, 10, 255, 198, 126, 12, 255, 200, 127, 11, 255, 202, 126, 14, 255, 198, 119, 12, 255, 198, 122, 6, 255, 198, 123, 5, 255, 197, 118, 10, 255, 196, 117, 8, 255, 195, 120, 5, 255, 196, 121, 12, 255, 194, 122, 6, 255, 196, 122, 6, 255, 198, 122, 9, 255, 190, 109, 5, 255, 180, 96, 4, 255, 171, 85, 4, 255, 163, 79, 2, 255, 158, 76, 5, 255, 156, 77, 2, 255, 150, 72, 1, 255, 158, 79, 10, 255, 155, 72, 6, 255, 158, 72, 1, 255, 175, 88, 1, 255, 175, 83, 3, 255, 165, 78, 4, 255, 174, 102, 8, 255, 142, 74, 4, 255, 129, 58, 7, 255, 156, 86, 4, 255, 170, 93, 5, 255, 188, 111, 0, 255, 188, 103, 10, 255, 188, 103, 13, 255, 187, 104, 10, 255, 193, 108, 13, 255, 196, 113, 1, 255, 196, 116, 7, 255, 196, 116, 3, 255, 198, 119, 1, 255, 198, 117, 4, 255, 197, 115, 3, 255, 193, 110, 4, 255, 189, 101, 10, 255, 187, 100, 5, 255, 183, 97, 0, 255, 183, 96, 0, 255, 185, 96, 1, 255, 182, 94, 3, 255, 180, 92, 1, 255, 180, 91, 2, 255, 184, 96, 4, 255, 195, 109, 4, 255, 203, 118, 9, 255, 204, 123, 7, 255, 204, 123, 16, 255, 203, 122, 6, 255, 202, 116, 7, 255, 200, 114, 6, 255, 195, 111, 3, 255, 194, 112, 8, 255, 196, 111, 10, 255, 170, 80, 4, 255, 150, 61, 1, 255, 160, 74, 7, 255, 155, 67, 4, 255, 150, 58, 3, 255, 151, 61, 10, 255, 146, 62, 2, 255, 144, 59, 4, 255, 144, 62, 6, 255, 145, 65, 2, 255, 143, 61, 3, 255, 143, 57, 4, 255, 147, 57, 2, 255, 142, 54, 2, 255, 140, 54, 4, 255, 133, 51, 1, 255, 133, 52, 4, 255, 122, 41, 1, 255, 125, 46, 3, 255, 129, 52, 3, 255, 128, 50, 7, 255, 128, 52, 3, 255, 127, 52, 4, 255, 122, 49, 3, 255, 118, 47, 3, 255, 128, 56, 2, 255, 148, 64, 4, 255, 151, 64, 4, 255, 156, 69, 0, 255, 162, 74, 1, 255, 164, 72, 1, 255, 168, 71, 1, 255, 169, 77, 4, 255, 168, 77, 2, 255, 187, 96, 2, 255, 194, 101, 1, 255, 187, 96, 2, 255, 185, 98, 2, 255, 190, 102, 7, 255, 188, 100, 2, 255, 185, 97, 0, 255, 186, 95, 3, 255, 187, 95, 2, 255, 188, 94, 0, 255, 185, 89, 3, 255, 177, 87, 2, 255, 180, 90, 3, 255, 177, 88, 2, 255, 181, 92, 0, 255, 183, 94, 0, 255, 182, 93, 1, 255, 183, 93, 3, 255, 180, 90, 1, 255, 179, 90, 0, 255, 180, 91, 1, 255, 181, 92, 2, 255, 180, 90, 2, 255, 174, 84, 1, 255, 175, 81, 8, 255, 173, 82, 5, 255, 171, 79, 2, 255, 3, 21, 58, 255, 3, 22, 53, 255, 1, 21, 55, 255, 2, 24, 49, 255, 2, 24, 55, 255, 3, 25, 56, 255, 2, 28, 55, 255, 2, 25, 52, 255, 3, 21, 43, 255, 3, 20, 38, 255, 3, 18, 44, 255, 2, 14, 41, 255, 3, 8, 25, 255, 3, 0, 16, 255, 3, 1, 14, 255, 2, 3, 5, 255, 3, 1, 4, 255, 0, 3, 51, 255, 10, 60, 227, 255, 54, 72, 93, 255, 31, 15, 0, 255, 36, 17, 30, 255, 20, 32, 171, 255, 4, 13, 63, 255, 8, 3, 0, 255, 10, 7, 2, 255, 11, 4, 0, 255, 8, 4, 2, 255, 13, 4, 5, 255, 15, 6, 0, 255, 12, 5, 2, 255, 10, 3, 4, 255, 13, 4, 2, 255, 17, 6, 3, 255, 20, 7, 4, 255, 19, 5, 2, 255, 21, 4, 1, 255, 22, 5, 2, 255, 25, 8, 2, 255, 27, 9, 1, 255, 27, 8, 1, 255, 27, 7, 1, 255, 29, 10, 3, 255, 28, 9, 3, 255, 25, 8, 2, 255, 18, 8, 2, 255, 24, 10, 2, 255, 37, 13, 2, 255, 49, 15, 2, 255, 52, 19, 5, 255, 42, 16, 1, 255, 46, 18, 2, 255, 46, 19, 1, 255, 45, 17, 1, 255, 51, 20, 5, 255, 44, 18, 1, 255, 41, 20, 2, 255, 40, 22, 3, 255, 42, 21, 4, 255, 45, 22, 4, 255, 48, 30, 5, 255, 53, 30, 1, 255, 65, 32, 2, 255, 66, 38, 2, 255, 63, 43, 1, 255, 76, 41, 3, 255, 66, 44, 4, 255, 73, 48, 2, 255, 71, 48, 2, 255, 73, 50, 6, 255, 70, 53, 4, 255, 96, 59, 2, 255, 102, 63, 6, 255, 71, 61, 7, 255, 110, 79, 3, 255, 151, 86, 11, 255, 164, 85, 2, 255, 171, 96, 7, 255, 166, 95, 12, 255, 160, 91, 5, 255, 151, 76, 1, 255, 120, 58, 1, 255, 90, 56, 4, 255, 91, 62, 3, 255, 91, 60, 5, 255, 84, 57, 0, 255, 86, 59, 3, 255, 87, 57, 2, 255, 86, 59, 3, 255, 89, 56, 6, 255, 91, 57, 5, 255, 91, 58, 5, 255, 92, 55, 4, 255, 87, 52, 5, 255, 112, 66, 9, 255, 116, 63, 4, 255, 91, 59, 0, 255, 97, 57, 2, 255, 83, 53, 5, 255, 96, 50, 10, 255, 101, 56, 5, 255, 114, 78, 7, 255, 159, 95, 10, 255, 180, 93, 7, 255, 182, 92, 3, 255, 181, 82, 4, 255, 173, 76, 5, 255, 171, 72, 3, 255, 166, 72, 2, 255, 164, 72, 2, 255, 172, 76, 2, 255, 168, 78, 3, 255, 174, 83, 3, 255, 178, 78, 3, 255, 172, 74, 0, 255, 176, 75, 2, 255, 174, 77, 1, 255, 167, 74, 4, 255, 167, 73, 6, 255, 171, 76, 2, 255, 182, 83, 2, 255, 183, 83, 5, 255, 175, 78, 4, 255, 169, 73, 2, 255, 158, 64, 3, 255, 143, 61, 6, 255, 126, 50, 6, 255, 111, 48, 4, 255, 101, 49, 7, 255, 99, 48, 1, 255, 89, 48, 3, 255, 84, 47, 7, 255, 78, 47, 3, 255, 82, 49, 4, 255, 80, 47, 3, 255, 78, 45, 4, 255, 83, 49, 5, 255, 79, 48, 3, 255, 78, 45, 6, 255, 88, 47, 7, 255, 81, 44, 2, 255, 83, 43, 1, 255, 85, 42, 4, 255, 90, 40, 10, 255, 78, 34, 4, 255, 75, 40, 4, 255, 85, 42, 9, 255, 79, 43, 4, 255, 85, 44, 12, 255, 82, 44, 8, 255, 79, 44, 3, 255, 78, 47, 3, 255, 99, 56, 4, 255, 129, 68, 10, 255, 115, 61, 2, 255, 101, 53, 2, 255, 82, 43, 7, 255, 82, 46, 16, 255, 85, 47, 10, 255, 90, 45, 4, 255, 99, 50, 4, 255, 99, 48, 13, 255, 110, 54, 9, 255, 115, 55, 6, 255, 121, 56, 9, 255, 126, 59, 0, 255, 134, 63, 2, 255, 128, 59, 6, 255, 122, 55, 5, 255, 125, 56, 8, 255, 122, 57, 2, 255, 115, 55, 2, 255, 106, 49, 10, 255, 133, 74, 10, 255, 142, 63, 8, 255, 99, 47, 6, 255, 102, 50, 5, 255, 103, 50, 10, 255, 104, 51, 6, 255, 100, 48, 2, 255, 106, 55, 11, 255, 149, 86, 8, 255, 116, 50, 6, 255, 100, 46, 11, 255, 105, 48, 11, 255, 103, 44, 5, 255, 100, 45, 10, 255, 101, 47, 4, 255, 133, 67, 13, 255, 165, 87, 8, 255, 115, 51, 7, 255, 84, 46, 5, 255, 94, 49, 12, 255, 90, 48, 7, 255, 91, 46, 9, 255, 112, 56, 6, 255, 123, 65, 4, 255, 134, 74, 10, 255, 125, 66, 6, 255, 107, 52, 2, 255, 107, 54, 5, 255, 102, 55, 3, 255, 100, 50, 4, 255, 135, 69, 12, 255, 158, 86, 1, 255, 169, 98, 5, 255, 165, 88, 13, 255, 150, 81, 15, 255, 115, 60, 6, 255, 102, 57, 5, 255, 99, 56, 7, 255, 101, 60, 4, 255, 115, 77, 12, 255, 115, 70, 13, 255, 112, 59, 6, 255, 111, 56, 8, 255, 115, 64, 10, 255, 106, 61, 4, 255, 93, 54, 9, 255, 99, 60, 12, 255, 106, 60, 5, 255, 115, 63, 7, 255, 124, 66, 6, 255, 119, 66, 6, 255, 115, 64, 14, 255, 122, 69, 4, 255, 125, 67, 8, 255, 130, 72, 14, 255, 130, 73, 5, 255, 135, 74, 5, 255, 118, 65, 7, 255, 118, 62, 12, 255, 140, 75, 15, 255, 151, 86, 13, 255, 157, 95, 16, 255, 143, 72, 14, 255, 161, 85, 7, 255, 195, 120, 11, 255, 204, 130, 9, 255, 204, 127, 6, 255, 207, 129, 9, 255, 206, 130, 12, 255, 209, 136, 9, 255, 211, 138, 6, 255, 212, 139, 7, 255, 211, 139, 2, 255, 210, 133, 5, 255, 203, 120, 1, 255, 192, 101, 3, 255, 201, 113, 9, 255, 194, 112, 5, 255, 191, 107, 2, 255, 180, 95, 9, 255, 174, 93, 4, 255, 177, 100, 6, 255, 173, 97, 8, 255, 179, 113, 6, 255, 191, 123, 8, 255, 194, 126, 9, 255, 193, 128, 4, 255, 199, 133, 6, 255, 191, 115, 13, 255, 184, 104, 10, 255, 182, 104, 2, 255, 167, 85, 2, 255, 173, 91, 6, 255, 185, 106, 9, 255, 189, 109, 18, 255, 197, 122, 13, 255, 203, 135, 11, 255, 201, 132, 4, 255, 203, 134, 4, 255, 201, 130, 10, 255, 200, 128, 13, 255, 202, 128, 17, 255, 204, 134, 15, 255, 202, 134, 8, 255, 201, 131, 11, 255, 201, 132, 8, 255, 198, 123, 9, 255, 198, 119, 19, 255, 200, 122, 13, 255, 198, 121, 9, 255, 198, 117, 12, 255, 198, 117, 6, 255, 200, 121, 10, 255, 197, 123, 10, 255, 192, 121, 3, 255, 202, 121, 1, 255, 196, 113, 3, 255, 182, 99, 1, 255, 170, 86, 0, 255, 170, 86, 2, 255, 164, 81, 3, 255, 157, 74, 0, 255, 168, 84, 7, 255, 168, 82, 7, 255, 159, 72, 5, 255, 157, 71, 4, 255, 151, 66, 4, 255, 147, 64, 8, 255, 154, 69, 6, 255, 163, 77, 4, 255, 165, 84, 3, 255, 151, 76, 6, 255, 153, 83, 4, 255, 152, 82, 7, 255, 145, 71, 8, 255, 167, 94, 1, 255, 177, 98, 2, 255, 180, 97, 4, 255, 186, 105, 5, 255, 189, 106, 7, 255, 192, 111, 2, 255, 195, 115, 6, 255, 196, 115, 6, 255, 197, 117, 6, 255, 195, 114, 10, 255, 194, 110, 5, 255, 189, 102, 7, 255, 184, 94, 3, 255, 183, 93, 2, 255, 182, 93, 3, 255, 182, 92, 2, 255, 179, 90, 2, 255, 177, 89, 2, 255, 181, 94, 1, 255, 188, 104, 1, 255, 197, 113, 4, 255, 202, 118, 5, 255, 204, 119, 18, 255, 204, 121, 12, 255, 201, 117, 13, 255, 197, 117, 13, 255, 199, 115, 17, 255, 196, 114, 3, 255, 195, 115, 1, 255, 201, 118, 7, 255, 192, 100, 6, 255, 154, 67, 1, 255, 158, 70, 4, 255, 156, 67, 1, 255, 153, 66, 1, 255, 146, 63, 4, 255, 146, 64, 2, 255, 142, 59, 6, 255, 137, 57, 3, 255, 138, 56, 1, 255, 141, 58, 1, 255, 142, 60, 3, 255, 145, 63, 7, 255, 142, 62, 4, 255, 141, 61, 2, 255, 136, 53, 8, 255, 130, 50, 5, 255, 120, 47, 1, 255, 117, 44, 1, 255, 126, 45, 4, 255, 128, 46, 4, 255, 124, 46, 7, 255, 119, 42, 1, 255, 123, 49, 4, 255, 122, 49, 5, 255, 127, 55, 2, 255, 140, 68, 1, 255, 148, 67, 3, 255, 157, 70, 7, 255, 163, 72, 1, 255, 162, 69, 1, 255, 164, 72, 4, 255, 179, 89, 1, 255, 188, 100, 3, 255, 189, 101, 3, 255, 192, 104, 4, 255, 192, 102, 2, 255, 190, 99, 2, 255, 191, 101, 5, 255, 190, 100, 4, 255, 187, 95, 2, 255, 187, 96, 1, 255, 185, 95, 4, 255, 184, 94, 1, 255, 187, 98, 2, 255, 182, 91, 3, 255, 175, 86, 1, 255, 175, 85, 4, 255, 173, 83, 5, 255, 176, 86, 3, 255, 185, 95, 6, 255, 186, 96, 3, 255, 187, 93, 1, 255, 184, 91, 1, 255, 182, 91, 2, 255, 180, 91, 2, 255, 179, 91, 1, 255, 183, 91, 3, 255, 180, 87, 1, 255, 179, 84, 3, 255, 177, 85, 2, 255, 173, 81, 0, 255, 2, 17, 48, 255, 4, 20, 53, 255, 4, 23, 56, 255, 3, 22, 55, 255, 3, 21, 56, 255, 1, 18, 53, 255, 4, 22, 54, 255, 1, 24, 50, 255, 2, 22, 45, 255, 5, 22, 48, 255, 2, 21, 47, 255, 0, 8, 32, 255, 0, 4, 12, 255, 0, 3, 10, 255, 2, 0, 16, 255, 4, 0, 8, 255, 3, 0, 31, 255, 6, 52, 213, 255, 46, 81, 127, 255, 35, 28, 0, 255, 36, 10, 16, 255, 29, 29, 161, 255, 6, 18, 97, 255, 9, 0, 0, 255, 8, 6, 1, 255, 10, 4, 3, 255, 11, 4, 2, 255, 12, 3, 3, 255, 12, 3, 2, 255, 13, 3, 1, 255, 14, 3, 1, 255, 11, 5, 3, 255, 13, 6, 2, 255, 18, 11, 5, 255, 15, 6, 1, 255, 17, 6, 3, 255, 20, 4, 2, 255, 24, 9, 5, 255, 24, 6, 2, 255, 26, 9, 3, 255, 27, 11, 3, 255, 28, 9, 0, 255, 27, 10, 1, 255, 27, 10, 3, 255, 26, 8, 3, 255, 28, 10, 4, 255, 40, 15, 5, 255, 52, 16, 3, 255, 56, 19, 3, 255, 50, 20, 4, 255, 45, 13, 2, 255, 53, 21, 2, 255, 50, 19, 5, 255, 42, 22, 1, 255, 45, 24, 3, 255, 44, 22, 3, 255, 34, 23, 0, 255, 37, 20, 2, 255, 44, 22, 3, 255, 47, 30, 2, 255, 57, 31, 4, 255, 57, 32, 6, 255, 58, 35, 3, 255, 73, 41, 2, 255, 68, 40, 1, 255, 66, 40, 4, 255, 69, 48, 2, 255, 79, 49, 5, 255, 78, 47, 2, 255, 75, 53, 4, 255, 91, 53, 9, 255, 102, 64, 12, 255, 78, 58, 2, 255, 105, 73, 13, 255, 147, 85, 13, 255, 161, 91, 9, 255, 178, 105, 6, 255, 175, 110, 8, 255, 166, 97, 11, 255, 148, 67, 3, 255, 106, 53, 4, 255, 82, 53, 7, 255, 87, 55, 3, 255, 94, 57, 1, 255, 91, 59, 8, 255, 84, 56, 5, 255, 83, 58, 4, 255, 85, 57, 2, 255, 89, 60, 8, 255, 86, 57, 3, 255, 92, 61, 4, 255, 88, 58, 2, 255, 93, 57, 2, 255, 93, 56, 0, 255, 105, 58, 2, 255, 91, 53, 1, 255, 89, 47, 10, 255, 95, 57, 4, 255, 114, 77, 4, 255, 140, 86, 8, 255, 167, 96, 7, 255, 188, 96, 5, 255, 178, 80, 5, 255, 164, 67, 1, 255, 157, 68, 0, 255, 164, 71, 5, 255, 167, 78, 4, 255, 168, 77, 0, 255, 167, 77, 3, 255, 169, 74, 4, 255, 171, 75, 4, 255, 167, 72, 1, 255, 168, 73, 0, 255, 170, 74, 3, 255, 166, 72, 1, 255, 165, 72, 4, 255, 162, 75, 1, 255, 165, 81, 2, 255, 174, 82, 4, 255, 178, 81, 6, 255, 171, 79, 6, 255, 154, 67, 5, 255, 135, 61, 8, 255, 127, 54, 4, 255, 124, 49, 6, 255, 103, 50, 3, 255, 91, 54, 4, 255, 95, 51, 4, 255, 103, 49, 4, 255, 99, 51, 3, 255, 87, 49, 5, 255, 78, 46, 3, 255, 83, 48, 3, 255, 88, 44, 4, 255, 81, 46, 6, 255, 78, 46, 6, 255, 84, 46, 4, 255, 82, 46, 4, 255, 78, 48, 8, 255, 78, 47, 5, 255, 78, 40, 4, 255, 75, 45, 5, 255, 72, 44, 2, 255, 68, 35, 7, 255, 65, 37, 2, 255, 83, 47, 6, 255, 82, 45, 7, 255, 80, 44, 6, 255, 85, 49, 7, 255, 80, 47, 4, 255, 76, 44, 3, 255, 89, 53, 9, 255, 118, 65, 15, 255, 117, 57, 10, 255, 94, 50, 7, 255, 88, 49, 7, 255, 82, 47, 2, 255, 93, 53, 6, 255, 92, 52, 7, 255, 90, 47, 2, 255, 95, 56, 4, 255, 90, 46, 8, 255, 95, 52, 5, 255, 89, 47, 6, 255, 91, 44, 9, 255, 96, 51, 8, 255, 108, 51, 15, 255, 114, 53, 10, 255, 119, 59, 6, 255, 135, 62, 5, 255, 134, 63, 3, 255, 131, 59, 5, 255, 145, 65, 8, 255, 141, 75, 9, 255, 105, 49, 4, 255, 100, 52, 7, 255, 107, 56, 2, 255, 112, 45, 16, 255, 106, 52, 8, 255, 102, 56, 1, 255, 112, 57, 3, 255, 119, 61, 2, 255, 106, 49, 11, 255, 102, 49, 6, 255, 101, 48, 9, 255, 101, 46, 11, 255, 100, 41, 6, 255, 95, 38, 1, 255, 139, 79, 16, 255, 134, 69, 11, 255, 101, 39, 6, 255, 103, 49, 2, 255, 103, 52, 6, 255, 107, 50, 7, 255, 96, 50, 3, 255, 80, 43, 3, 255, 81, 49, 5, 255, 128, 72, 14, 255, 128, 63, 5, 255, 112, 56, 6, 255, 113, 58, 1, 255, 110, 59, 6, 255, 100, 58, 13, 255, 101, 56, 10, 255, 132, 67, 9, 255, 176, 97, 6, 255, 178, 92, 5, 255, 127, 66, 13, 255, 78, 42, 15, 255, 77, 49, 4, 255, 84, 54, 8, 255, 104, 61, 17, 255, 153, 85, 16, 255, 170, 101, 9, 255, 162, 93, 13, 255, 164, 91, 11, 255, 149, 90, 14, 255, 127, 68, 15, 255, 117, 70, 7, 255, 116, 70, 5, 255, 117, 69, 5, 255, 110, 61, 9, 255, 110, 62, 8, 255, 107, 66, 8, 255, 110, 58, 8, 255, 116, 63, 7, 255, 111, 62, 8, 255, 110, 60, 8, 255, 111, 62, 14, 255, 136, 82, 20, 255, 147, 90, 1, 255, 147, 90, 6, 255, 149, 84, 11, 255, 159, 94, 14, 255, 166, 103, 12, 255, 175, 102, 15, 255, 204, 133, 15, 255, 210, 138, 9, 255, 206, 138, 3, 255, 209, 141, 7, 255, 209, 140, 8, 255, 212, 141, 3, 255, 213, 140, 5, 255, 213, 140, 11, 255, 208, 139, 5, 255, 210, 136, 2, 255, 208, 125, 7, 255, 199, 110, 6, 255, 193, 103, 12, 255, 201, 118, 5, 255, 207, 126, 5, 255, 199, 113, 3, 255, 189, 103, 11, 255, 184, 104, 8, 255, 177, 105, 8, 255, 186, 118, 14, 255, 201, 138, 8, 255, 197, 135, 2, 255, 194, 127, 9, 255, 202, 134, 7, 255, 198, 125, 12, 255, 183, 105, 12, 255, 185, 105, 15, 255, 175, 92, 7, 255, 178, 97, 4, 255, 186, 109, 6, 255, 193, 122, 6, 255, 201, 131, 14, 255, 206, 139, 17, 255, 204, 137, 18, 255, 199, 134, 9, 255, 201, 136, 7, 255, 203, 133, 14, 255, 202, 131, 13, 255, 201, 130, 16, 255, 204, 134, 24, 255, 202, 133, 20, 255, 199, 130, 12, 255, 198, 129, 13, 255, 197, 127, 8, 255, 195, 123, 6, 255, 197, 120, 15, 255, 197, 117, 19, 255, 195, 120, 14, 255, 197, 122, 13, 255, 197, 122, 13, 255, 198, 125, 5, 255, 197, 122, 4, 255, 197, 112, 9, 255, 179, 94, 3, 255, 169, 83, 3, 255, 164, 79, 0, 255, 169, 84, 3, 255, 175, 89, 6, 255, 165, 74, 4, 255, 158, 65, 6, 255, 161, 72, 5, 255, 175, 83, 6, 255, 182, 90, 4, 255, 174, 88, 1, 255, 160, 81, 10, 255, 141, 70, 3, 255, 153, 74, 4, 255, 167, 83, 8, 255, 164, 87, 8, 255, 163, 94, 4, 255, 169, 99, 4, 255, 166, 99, 10, 255, 157, 85, 4, 255, 161, 78, 1, 255, 180, 89, 13, 255, 190, 104, 6, 255, 188, 107, 5, 255, 190, 110, 4, 255, 193, 111, 8, 255, 194, 113, 12, 255, 195, 114, 4, 255, 190, 105, 4, 255, 185, 96, 5, 255, 182, 93, 3, 255, 183, 90, 1, 255, 181, 88, 1, 255, 181, 90, 6, 255, 181, 92, 6, 255, 185, 97, 4, 255, 190, 105, 3, 255, 197, 112, 3, 255, 200, 116, 4, 255, 201, 117, 5, 255, 199, 115, 3, 255, 200, 113, 7, 255, 200, 115, 7, 255, 200, 117, 10, 255, 200, 122, 14, 255, 198, 115, 15, 255, 197, 111, 5, 255, 195, 119, 1, 255, 204, 119, 11, 255, 180, 83, 5, 255, 164, 72, 6, 255, 158, 73, 7, 255, 153, 69, 4, 255, 152, 63, 2, 255, 144, 57, 1, 255, 142, 56, 2, 255, 140, 57, 5, 255, 135, 57, 2, 255, 140, 60, 4, 255, 136, 55, 0, 255, 139, 58, 2, 255, 141, 59, 3, 255, 143, 59, 1, 255, 145, 58, 3, 255, 138, 53, 3, 255, 125, 51, 6, 255, 113, 45, 1, 255, 112, 42, 0, 255, 109, 36, 8, 255, 111, 38, 6, 255, 115, 44, 5, 255, 110, 43, 2, 255, 119, 49, 3, 255, 132, 55, 3, 255, 144, 63, 3, 255, 148, 67, 1, 255, 150, 70, 0, 255, 159, 72, 4, 255, 160, 68, 5, 255, 167, 74, 4, 255, 183, 90, 5, 255, 194, 101, 3, 255, 197, 102, 3, 255, 193, 100, 1, 255, 190, 99, 2, 255, 190, 103, 4, 255, 189, 99, 2, 255, 188, 98, 3, 255, 186, 94, 0, 255, 188, 94, 0, 255, 187, 94, 0, 255, 184, 93, 1, 255, 184, 95, 0, 255, 185, 94, 1, 255, 183, 92, 2, 255, 177, 87, 0, 255, 173, 86, 2, 255, 171, 84, 2, 255, 172, 84, 1, 255, 178, 88, 2, 255, 183, 92, 3, 255, 183, 89, 3, 255, 180, 86, 1, 255, 179, 87, 1, 255, 183, 90, 3, 255, 180, 89, 2, 255, 182, 88, 3, 255, 179, 83, 1, 255, 178, 82, 5, 255, 173, 79, 2, 255, 169, 78, 2, 255, 3, 19, 47, 255, 1, 20, 45, 255, 2, 22, 51, 255, 4, 23, 50, 255, 2, 19, 50, 255, 3, 22, 53, 255, 3, 22, 50, 255, 2, 26, 44, 255, 1, 22, 44, 255, 5, 23, 49, 255, 3, 17, 41, 255, 0, 3, 16, 255, 3, 0, 10, 255, 2, 0, 13, 255, 2, 4, 12, 255, 1, 0, 13, 255, 3, 41, 195, 255, 40, 80, 156, 255, 30, 17, 0, 255, 26, 12, 0, 255, 37, 29, 129, 255, 3, 16, 119, 255, 12, 0, 0, 255, 14, 3, 2, 255, 12, 7, 4, 255, 16, 0, 3, 255, 14, 5, 3, 255, 12, 7, 3, 255, 13, 6, 4, 255, 15, 4, 4, 255, 14, 3, 2, 255, 12, 4, 3, 255, 26, 7, 6, 255, 19, 4, 2, 255, 19, 5, 3, 255, 22, 6, 5, 255, 21, 5, 4, 255, 25, 10, 4, 255, 28, 7, 2, 255, 31, 13, 7, 255, 26, 9, 2, 255, 34, 13, 6, 255, 27, 12, 3, 255, 25, 13, 3, 255, 25, 7, 3, 255, 34, 12, 4, 255, 42, 15, 0, 255, 55, 17, 0, 255, 58, 21, 5, 255, 43, 20, 2, 255, 52, 18, 1, 255, 62, 22, 2, 255, 57, 21, 4, 255, 48, 22, 4, 255, 46, 22, 0, 255, 41, 20, 2, 255, 39, 24, 5, 255, 46, 24, 4, 255, 48, 27, 3, 255, 49, 33, 0, 255, 59, 32, 2, 255, 62, 34, 6, 255, 58, 34, 0, 255, 73, 42, 1, 255, 75, 42, 2, 255, 71, 49, 6, 255, 78, 46, 3, 255, 74, 49, 4, 255, 69, 51, 6, 255, 80, 50, 2, 255, 104, 61, 4, 255, 74, 53, 5, 255, 107, 80, 11, 255, 159, 96, 18, 255, 173, 106, 11, 255, 177, 112, 0, 255, 181, 112, 8, 255, 168, 92, 7, 255, 142, 67, 5, 255, 100, 53, 4, 255, 81, 55, 7, 255, 84, 58, 5, 255, 84, 60, 1, 255, 85, 56, 3, 255, 85, 60, 3, 255, 81, 60, 1, 255, 81, 59, 2, 255, 79, 58, 4, 255, 91, 60, 3, 255, 93, 56, 1, 255, 90, 57, 4, 255, 86, 59, 8, 255, 90, 55, 7, 255, 95, 51, 4, 255, 89, 55, 1, 255, 114, 74, 13, 255, 145, 89, 4, 255, 176, 107, 9, 255, 190, 103, 6, 255, 188, 95, 0, 255, 181, 86, 1, 255, 167, 71, 3, 255, 159, 64, 5, 255, 154, 62, 6, 255, 160, 69, 5, 255, 160, 72, 1, 255, 166, 69, 2, 255, 163, 67, 1, 255, 159, 67, 0, 255, 162, 71, 1, 255, 166, 70, 1, 255, 169, 73, 1, 255, 168, 78, 6, 255, 167, 75, 5, 255, 168, 69, 3, 255, 168, 71, 2, 255, 167, 75, 5, 255, 161, 75, 7, 255, 142, 67, 4, 255, 120, 56, 2, 255, 103, 52, 5, 255, 95, 49, 4, 255, 93, 51, 2, 255, 93, 50, 2, 255, 105, 52, 5, 255, 103, 53, 2, 255, 101, 57, 5, 255, 103, 50, 4, 255, 104, 51, 1, 255, 100, 50, 4, 255, 89, 44, 1, 255, 90, 52, 5, 255, 85, 48, 3, 255, 86, 45, 5, 255, 86, 48, 5, 255, 82, 50, 2, 255, 80, 46, 4, 255, 83, 44, 7, 255, 78, 44, 6, 255, 76, 44, 6, 255, 76, 40, 3, 255, 76, 41, 2, 255, 72, 46, 0, 255, 67, 42, 7, 255, 79, 44, 7, 255, 79, 41, 4, 255, 77, 47, 8, 255, 80, 46, 7, 255, 78, 43, 0, 255, 82, 48, 5, 255, 74, 43, 5, 255, 79, 49, 2, 255, 92, 51, 4, 255, 95, 47, 2, 255, 96, 54, 2, 255, 84, 51, 2, 255, 85, 50, 4, 255, 109, 62, 6, 255, 95, 52, 4, 255, 88, 51, 10, 255, 92, 52, 8, 255, 93, 45, 3, 255, 98, 54, 3, 255, 96, 55, 7, 255, 89, 45, 8, 255, 93, 48, 4, 255, 87, 45, 7, 255, 88, 43, 6, 255, 93, 50, 5, 255, 127, 61, 6, 255, 130, 55, 2, 255, 130, 59, 3, 255, 128, 59, 12, 255, 128, 58, 10, 255, 127, 63, 4, 255, 119, 54, 5, 255, 118, 49, 7, 255, 115, 54, 2, 255, 111, 55, 10, 255, 111, 51, 7, 255, 114, 52, 8, 255, 103, 48, 7, 255, 103, 55, 7, 255, 104, 50, 10, 255, 104, 47, 4, 255, 104, 44, 9, 255, 101, 44, 9, 255, 104, 53, 9, 255, 127, 65, 8, 255, 108, 48, 12, 255, 88, 46, 8, 255, 93, 55, 3, 255, 99, 50, 3, 255, 104, 46, 3, 255, 103, 53, 4, 255, 105, 57, 10, 255, 100, 53, 9, 255, 112, 57, 6, 255, 115, 57, 4, 255, 111, 62, 5, 255, 112, 60, 2, 255, 113, 54, 6, 255, 97, 57, 4, 255, 72, 49, 10, 255, 99, 65, 12, 255, 168, 93, 12, 255, 138, 69, 4, 255, 84, 54, 2, 255, 83, 52, 10, 255, 87, 52, 8, 255, 79, 49, 4, 255, 106, 67, 12, 255, 142, 80, 11, 255, 181, 105, 7, 255, 180, 101, 11, 255, 164, 84, 10, 255, 126, 67, 4, 255, 106, 55, 5, 255, 106, 54, 7, 255, 103, 60, 10, 255, 98, 66, 4, 255, 98, 67, 8, 255, 107, 66, 9, 255, 122, 70, 9, 255, 120, 69, 1, 255, 114, 69, 7, 255, 100, 63, 8, 255, 90, 59, 2, 255, 116, 74, 13, 255, 150, 86, 13, 255, 162, 90, 17, 255, 171, 98, 14, 255, 164, 92, 8, 255, 169, 97, 5, 255, 197, 126, 14, 255, 208, 145, 9, 255, 206, 140, 7, 255, 207, 135, 14, 255, 206, 137, 6, 255, 208, 139, 13, 255, 209, 139, 8, 255, 209, 139, 6, 255, 211, 136, 11, 255, 213, 133, 10, 255, 207, 128, 9, 255, 210, 130, 2, 255, 201, 115, 1, 255, 194, 105, 2, 255, 197, 112, 10, 255, 197, 118, 9, 255, 192, 112, 5, 255, 180, 96, 4, 255, 184, 101, 4, 255, 187, 109, 8, 255, 183, 112, 3, 255, 186, 117, 10, 255, 192, 125, 5, 255, 200, 134, 20, 255, 208, 143, 11, 255, 200, 131, 1, 255, 188, 112, 13, 255, 194, 120, 7, 255, 188, 115, 4, 255, 187, 113, 6, 255, 198, 124, 15, 255, 205, 132, 18, 255, 206, 136, 15, 255, 203, 133, 15, 255, 203, 134, 18, 255, 202, 134, 9, 255, 199, 133, 8, 255, 201, 134, 10, 255, 202, 132, 6, 255, 203, 133, 7, 255, 204, 135, 8, 255, 203, 135, 8, 255, 204, 136, 13, 255, 202, 133, 9, 255, 201, 129, 16, 255, 200, 128, 12, 255, 196, 126, 2, 255, 198, 122, 14, 255, 197, 119, 18, 255, 198, 126, 7, 255, 195, 123, 12, 255, 197, 120, 26, 255, 203, 125, 9, 255, 201, 120, 7, 255, 177, 92, 3, 255, 166, 80, 3, 255, 165, 79, 7, 255, 164, 78, 3, 255, 165, 79, 1, 255, 166, 78, 3, 255, 166, 78, 2, 255, 162, 77, 2, 255, 151, 70, 1, 255, 161, 74, 7, 255, 180, 86, 6, 255, 182, 85, 1, 255, 169, 73, 7, 255, 148, 63, 12, 255, 153, 69, 10, 255, 164, 79, 4, 255, 162, 83, 6, 255, 156, 85, 5, 255, 172, 101, 5, 255, 171, 97, 11, 255, 146, 70, 5, 255, 153, 76, 3, 255, 177, 99, 7, 255, 187, 105, 6, 255, 188, 101, 6, 255, 197, 113, 3, 255, 197, 115, 5, 255, 196, 114, 7, 255, 190, 106, 1, 255, 184, 94, 2, 255, 180, 87, 7, 255, 179, 87, 3, 255, 179, 87, 3, 255, 182, 92, 5, 255, 184, 97, 2, 255, 193, 108, 3, 255, 202, 117, 8, 255, 201, 116, 3, 255, 200, 115, 2, 255, 201, 115, 4, 255, 198, 114, 1, 255, 198, 114, 1, 255, 199, 112, 3, 255, 197, 112, 4, 255, 197, 115, 9, 255, 196, 117, 15, 255, 198, 116, 15, 255, 201, 117, 14, 255, 202, 123, 13, 255, 189, 103, 12, 255, 166, 72, 5, 255, 167, 73, 4, 255, 150, 66, 1, 255, 142, 61, 1, 255, 145, 55, 5, 255, 141, 53, 2, 255, 141, 56, 2, 255, 146, 61, 8, 255, 141, 58, 5, 255, 137, 55, 1, 255, 137, 57, 3, 255, 136, 56, 3, 255, 142, 59, 6, 255, 145, 58, 3, 255, 141, 55, 2, 255, 137, 53, 1, 255, 120, 47, 4, 255, 102, 38, 1, 255, 102, 36, 1, 255, 107, 44, 3, 255, 113, 45, 2, 255, 122, 47, 2, 255, 125, 50, 5, 255, 124, 51, 2, 255, 137, 62, 7, 255, 148, 66, 4, 255, 153, 66, 1, 255, 152, 69, 4, 255, 157, 70, 3, 255, 164, 73, 1, 255, 181, 91, 6, 255, 192, 101, 2, 255, 195, 100, 0, 255, 192, 96, 2, 255, 190, 96, 1, 255, 188, 99, 1, 255, 189, 102, 4, 255, 188, 99, 3, 255, 188, 96, 3, 255, 184, 90, 1, 255, 185, 92, 3, 255, 185, 94, 4, 255, 183, 93, 1, 255, 186, 95, 3, 255, 185, 94, 4, 255, 181, 90, 1, 255, 177, 85, 2, 255, 173, 84, 1, 255, 172, 86, 3, 255, 175, 87, 3, 255, 176, 86, 1, 255, 174, 83, 1, 255, 172, 79, 1, 255, 173, 80, 0, 255, 175, 82, 2, 255, 172, 80, 0, 255, 173, 81, 1, 255, 176, 82, 4, 255, 170, 76, 1, 255, 169, 76, 2, 255, 166, 74, 0, 255, 165, 73, 0, 255, 3, 20, 42, 255, 3, 22, 46, 255, 2, 20, 44, 255, 3, 18, 45, 255, 4, 20, 45, 255, 1, 19, 43, 255, 2, 21, 38, 255, 1, 18, 44, 255, 0, 19, 43, 255, 4, 16, 31, 255, 3, 4, 20, 255, 2, 2, 17, 255, 2, 0, 22, 255, 4, 2, 12, 255, 1, 0, 4, 255, 0, 26, 162, 255, 30, 88, 183, 255, 38, 21, 3, 255, 23, 3, 0, 255, 49, 22, 85, 255, 7, 21, 129, 255, 12, 1, 1, 255, 17, 0, 6, 255, 21, 3, 7, 255, 16, 3, 1, 255, 15, 4, 2, 255, 15, 4, 4, 255, 11, 2, 1, 255, 15, 5, 4, 255, 17, 6, 5, 255, 13, 1, 1, 255, 18, 7, 5, 255, 26, 7, 6, 255, 21, 4, 1, 255, 28, 11, 7, 255, 24, 7, 4, 255, 29, 9, 4, 255, 31, 9, 3, 255, 35, 9, 2, 255, 32, 10, 1, 255, 32, 10, 2, 255, 30, 7, 0, 255, 29, 11, 3, 255, 27, 12, 3, 255, 34, 14, 6, 255, 40, 13, 7, 255, 49, 21, 2, 255, 54, 21, 0, 255, 52, 19, 3, 255, 45, 19, 1, 255, 59, 26, 1, 255, 59, 22, 2, 255, 54, 21, 0, 255, 54, 21, 2, 255, 48, 23, 1, 255, 40, 19, 5, 255, 44, 18, 5, 255, 50, 29, 1, 255, 54, 32, 3, 255, 57, 36, 3, 255, 60, 35, 1, 255, 69, 38, 2, 255, 71, 41, 2, 255, 69, 45, 2, 255, 76, 43, 3, 255, 75, 49, 3, 255, 78, 52, 1, 255, 77, 49, 4, 255, 72, 53, 3, 255, 100, 59, 8, 255, 73, 51, 1, 255, 111, 79, 8, 255, 158, 97, 6, 255, 170, 106, 6, 255, 185, 117, 7, 255, 186, 123, 1, 255, 155, 91, 4, 255, 111, 57, 7, 255, 93, 56, 2, 255, 79, 57, 1, 255, 85, 59, 2, 255, 97, 61, 5, 255, 83, 61, 2, 255, 83, 61, 2, 255, 86, 62, 5, 255, 84, 59, 2, 255, 82, 57, 1, 255, 84, 61, 1, 255, 92, 60, 7, 255, 92, 54, 6, 255, 89, 57, 7, 255, 91, 51, 2, 255, 93, 57, 5, 255, 119, 79, 9, 255, 166, 105, 6, 255, 192, 110, 2, 255, 189, 102, 6, 255, 182, 88, 4, 255, 177, 78, 4, 255, 170, 74, 4, 255, 160, 67, 3, 255, 156, 66, 3, 255, 152, 62, 0, 255, 148, 64, 0, 255, 151, 68, 1, 255, 159, 72, 4, 255, 164, 69, 3, 255, 167, 67, 5, 255, 169, 66, 3, 255, 163, 72, 0, 255, 163, 74, 4, 255, 157, 70, 3, 255, 149, 67, 4, 255, 137, 65, 5, 255, 123, 61, 3, 255, 120, 59, 4, 255, 108, 55, 4, 255, 93, 50, 4, 255, 92, 48, 4, 255, 97, 52, 5, 255, 99, 57, 3, 255, 97, 54, 1, 255, 105, 54, 7, 255, 105, 51, 5, 255, 103, 50, 3, 255, 106, 56, 7, 255, 105, 54, 6, 255, 99, 49, 3, 255, 97, 54, 2, 255, 99, 53, 3, 255, 98, 51, 3, 255, 96, 52, 5, 255, 89, 48, 2, 255, 85, 48, 4, 255, 83, 49, 5, 255, 81, 48, 2, 255, 80, 49, 3, 255, 77, 45, 0, 255, 81, 43, 2, 255, 79, 42, 5, 255, 75, 46, 10, 255, 79, 40, 5, 255, 73, 40, 0, 255, 72, 43, 6, 255, 83, 45, 7, 255, 78, 45, 4, 255, 73, 47, 5, 255, 83, 47, 7, 255, 82, 46, 2, 255, 84, 48, 6, 255, 82, 45, 9, 255, 81, 46, 6, 255, 84, 49, 6, 255, 77, 45, 4, 255, 78, 49, 7, 255, 86, 49, 10, 255, 94, 52, 3, 255, 107, 57, 3, 255, 88, 45, 9, 255, 90, 51, 4, 255, 100, 51, 5, 255, 106, 56, 6, 255, 108, 57, 6, 255, 101, 53, 2, 255, 91, 47, 7, 255, 92, 48, 10, 255, 102, 55, 6, 255, 91, 50, 4, 255, 103, 53, 8, 255, 96, 52, 13, 255, 96, 52, 4, 255, 120, 55, 7, 255, 117, 53, 4, 255, 121, 56, 4, 255, 131, 63, 4, 255, 128, 62, 4, 255, 118, 58, 8, 255, 124, 67, 4, 255, 128, 64, 3, 255, 119, 53, 7, 255, 113, 52, 6, 255, 114, 53, 6, 255, 110, 48, 7, 255, 103, 48, 8, 255, 105, 50, 12, 255, 104, 47, 7, 255, 102, 48, 5, 255, 100, 48, 7, 255, 99, 46, 3, 255, 103, 43, 12, 255, 103, 51, 8, 255, 97, 52, 1, 255, 99, 50, 3, 255, 100, 47, 6, 255, 102, 50, 5, 255, 106, 50, 4, 255, 104, 50, 4, 255, 105, 54, 4, 255, 109, 58, 9, 255, 112, 62, 7, 255, 99, 56, 3, 255, 103, 54, 8, 255, 95, 51, 5, 255, 88, 54, 9, 255, 141, 90, 11, 255, 139, 73, 2, 255, 81, 49, 7, 255, 78, 47, 6, 255, 84, 50, 2, 255, 79, 54, 11, 255, 75, 54, 8, 255, 99, 68, 1, 255, 153, 90, 11, 255, 163, 88, 2, 255, 139, 73, 11, 255, 118, 67, 14, 255, 102, 61, 11, 255, 86, 60, 7, 255, 84, 62, 8, 255, 77, 51, 19, 255, 86, 58, 9, 255, 109, 69, 8, 255, 129, 78, 12, 255, 142, 86, 4, 255, 140, 75, 15, 255, 98, 64, 10, 255, 109, 69, 8, 255, 133, 82, 11, 255, 156, 98, 18, 255, 176, 108, 17, 255, 186, 112, 9, 255, 190, 115, 9, 255, 194, 125, 11, 255, 202, 135, 4, 255, 208, 139, 6, 255, 209, 138, 7, 255, 213, 139, 8, 255, 209, 136, 3, 255, 211, 138, 5, 255, 208, 137, 6, 255, 210, 137, 4, 255, 210, 136, 7, 255, 210, 133, 17, 255, 206, 123, 4, 255, 193, 104, 8, 255, 185, 95, 13, 255, 178, 87, 6, 255, 187, 99, 3, 255, 185, 102, 4, 255, 175, 93, 2, 255, 179, 104, 6, 255, 171, 94, 2, 255, 171, 93, 4, 255, 183, 108, 9, 255, 179, 107, 3, 255, 186, 111, 14, 255, 195, 126, 11, 255, 205, 141, 10, 255, 199, 133, 10, 255, 193, 122, 11, 255, 199, 129, 4, 255, 199, 129, 9, 255, 193, 125, 9, 255, 201, 134, 11, 255, 204, 136, 7, 255, 207, 137, 13, 255, 206, 135, 19, 255, 205, 134, 18, 255, 206, 137, 14, 255, 202, 135, 6, 255, 202, 136, 11, 255, 201, 134, 15, 255, 202, 131, 14, 255, 203, 131, 10, 255, 203, 134, 7, 255, 203, 135, 6, 255, 203, 134, 6, 255, 201, 131, 7, 255, 199, 126, 13, 255, 200, 124, 9, 255, 201, 126, 7, 255, 201, 124, 9, 255, 197, 121, 6, 255, 200, 123, 19, 255, 197, 118, 16, 255, 202, 125, 4, 255, 202, 119, 6, 255, 182, 92, 6, 255, 166, 79, 2, 255, 167, 81, 4, 255, 169, 83, 5, 255, 176, 89, 9, 255, 176, 88, 8, 255, 168, 77, 5, 255, 164, 76, 5, 255, 163, 80, 1, 255, 158, 75, 3, 255, 156, 68, 6, 255, 177, 84, 1, 255, 185, 91, 3, 255, 168, 73, 6, 255, 154, 68, 3, 255, 149, 66, 2, 255, 161, 78, 8, 255, 150, 74, 0, 255, 127, 59, 5, 255, 134, 67, 9, 255, 163, 95, 4, 255, 165, 90, 6, 255, 169, 91, 6, 255, 179, 107, 7, 255, 189, 117, 12, 255, 188, 107, 3, 255, 196, 111, 2, 255, 197, 116, 3, 255, 198, 114, 10, 255, 184, 96, 2, 255, 182, 91, 0, 255, 182, 93, 1, 255, 178, 91, 3, 255, 180, 93, 3, 255, 189, 101, 9, 255, 192, 105, 5, 255, 201, 116, 4, 255, 206, 120, 5, 255, 204, 118, 7, 255, 201, 116, 3, 255, 200, 114, 2, 255, 196, 112, 4, 255, 196, 112, 4, 255, 197, 112, 2, 255, 195, 111, 4, 255, 195, 113, 7, 255, 195, 116, 7, 255, 200, 120, 13, 255, 202, 123, 19, 255, 199, 113, 9, 255, 169, 83, 0, 255, 154, 68, 3, 255, 160, 68, 3, 255, 147, 63, 0, 255, 141, 59, 3, 255, 140, 52, 5, 255, 138, 54, 7, 255, 137, 57, 4, 255, 140, 58, 5, 255, 138, 55, 4, 255, 139, 56, 4, 255, 135, 56, 5, 255, 129, 53, 4, 255, 134, 56, 7, 255, 135, 57, 3, 255, 130, 57, 2, 255, 124, 46, 5, 255, 129, 55, 6, 255, 136, 68, 6, 255, 132, 56, 1, 255, 131, 56, 0, 255, 140, 61, 8, 255, 140, 58, 9, 255, 132, 50, 2, 255, 135, 56, 2, 255, 140, 61, 2, 255, 150, 69, 5, 255, 149, 63, 1, 255, 152, 68, 5, 255, 161, 74, 3, 255, 177, 88, 0, 255, 188, 100, 2, 255, 190, 98, 2, 255, 190, 95, 3, 255, 186, 97, 0, 255, 187, 98, 2, 255, 188, 97, 2, 255, 187, 96, 2, 255, 187, 94, 2, 255, 185, 91, 2, 255, 181, 88, 0, 255, 181, 91, 1, 255, 183, 94, 2, 255, 182, 93, 0, 255, 185, 96, 1, 255, 189, 102, 3, 255, 186, 96, 1, 255, 178, 85, 3, 255, 173, 83, 1, 255, 175, 87, 4, 255, 175, 87, 4, 255, 175, 84, 4, 255, 169, 76, 2, 255, 166, 76, 3, 255, 164, 75, 1, 255, 169, 77, 2, 255, 168, 76, 1, 255, 170, 78, 4, 255, 168, 78, 4, 255, 170, 80, 6, 255, 173, 82, 1, 255, 170, 80, 2, 255, 164, 73, 1, 255, 2, 15, 35, 255, 1, 20, 40, 255, 1, 17, 41, 255, 1, 16, 41, 255, 4, 17, 42, 255, 2, 19, 41, 255, 4, 18, 41, 255, 5, 16, 43, 255, 2, 19, 42, 255, 3, 7, 17, 255, 4, 0, 13, 255, 1, 1, 17, 255, 4, 2, 20, 255, 1, 0, 0, 255, 0, 14, 127, 255, 26, 84, 210, 255, 56, 44, 21, 255, 14, 8, 0, 255, 34, 20, 71, 255, 9, 26, 163, 255, 10, 3, 25, 255, 6, 5, 3, 255, 14, 5, 5, 255, 16, 7, 5, 255, 18, 5, 9, 255, 11, 5, 4, 255, 17, 5, 5, 255, 17, 6, 5, 255, 13, 1, 1, 255, 18, 6, 5, 255, 18, 5, 3, 255, 20, 5, 4, 255, 16, 8, 4, 255, 19, 9, 2, 255, 23, 11, 3, 255, 21, 7, 1, 255, 29, 10, 4, 255, 32, 6, 0, 255, 40, 12, 1, 255, 38, 14, 2, 255, 35, 11, 3, 255, 34, 9, 2, 255, 32, 11, 3, 255, 32, 12, 2, 255, 38, 12, 2, 255, 41, 13, 4, 255, 56, 18, 4, 255, 58, 19, 1, 255, 50, 21, 0, 255, 66, 25, 6, 255, 65, 26, 4, 255, 50, 21, 3, 255, 43, 16, 1, 255, 49, 19, 0, 255, 42, 23, 1, 255, 38, 22, 7, 255, 49, 25, 6, 255, 53, 32, 0, 255, 57, 31, 1, 255, 61, 34, 5, 255, 62, 37, 0, 255, 74, 42, 2, 255, 78, 43, 4, 255, 68, 45, 4, 255, 69, 44, 3, 255, 82, 50, 6, 255, 81, 55, 3, 255, 77, 51, 0, 255, 98, 60, 6, 255, 82, 60, 8, 255, 111, 86, 8, 255, 155, 94, 7, 255, 168, 100, 14, 255, 173, 108, 4, 255, 177, 108, 2, 255, 150, 79, 4, 255, 105, 57, 2, 255, 77, 52, 4, 255, 82, 60, 4, 255, 90, 58, 2, 255, 87, 61, 4, 255, 88, 62, 6, 255, 92, 62, 2, 255, 91, 57, 1, 255, 86, 57, 3, 255, 88, 60, 6, 255, 86, 55, 3, 255, 87, 61, 4, 255, 87, 58, 5, 255, 81, 50, 7, 255, 81, 60, 2, 255, 121, 76, 7, 255, 165, 102, 6, 255, 190, 109, 4, 255, 188, 91, 3, 255, 174, 79, 7, 255, 173, 75, 2, 255, 166, 72, 5, 255, 165, 76, 3, 255, 159, 68, 2, 255, 155, 64, 4, 255, 147, 64, 4, 255, 144, 70, 6, 255, 158, 76, 5, 255, 156, 73, 2, 255, 152, 68, 3, 255, 143, 66, 1, 255, 141, 66, 3, 255, 123, 58, 5, 255, 116, 56, 4, 255, 116, 56, 5, 255, 108, 55, 3, 255, 96, 54, 3, 255, 88, 52, 4, 255, 91, 51, 7, 255, 85, 48, 4, 255, 87, 50, 4, 255, 95, 53, 4, 255, 98, 51, 1, 255, 102, 52, 3, 255, 100, 54, 5, 255, 94, 54, 3, 255, 98, 57, 5, 255, 101, 53, 5, 255, 95, 52, 1, 255, 101, 57, 5, 255, 102, 52, 4, 255, 97, 51, 4, 255, 94, 56, 7, 255, 92, 53, 3, 255, 91, 54, 3, 255, 91, 51, 3, 255, 88, 48, 2, 255, 87, 49, 6, 255, 77, 44, 2, 255, 82, 47, 4, 255, 80, 45, 4, 255, 76, 44, 3, 255, 80, 43, 4, 255, 85, 46, 6, 255, 73, 45, 3, 255, 69, 40, 9, 255, 74, 40, 6, 255, 74, 40, 2, 255, 80, 49, 5, 255, 77, 48, 2, 255, 77, 48, 1, 255, 81, 54, 7, 255, 77, 46, 2, 255, 84, 47, 3, 255, 87, 46, 8, 255, 88, 48, 8, 255, 86, 47, 3, 255, 87, 52, 7, 255, 81, 48, 7, 255, 97, 56, 5, 255, 122, 68, 7, 255, 119, 48, 5, 255, 106, 43, 8, 255, 106, 56, 4, 255, 107, 56, 5, 255, 110, 61, 4, 255, 109, 55, 6, 255, 107, 55, 8, 255, 98, 54, 8, 255, 99, 49, 10, 255, 113, 56, 8, 255, 100, 56, 8, 255, 101, 55, 3, 255, 108, 58, 5, 255, 124, 60, 6, 255, 90, 48, 5, 255, 89, 48, 11, 255, 100, 51, 5, 255, 109, 51, 10, 255, 108, 53, 2, 255, 122, 57, 6, 255, 126, 58, 8, 255, 136, 59, 7, 255, 140, 56, 8, 255, 126, 58, 6, 255, 121, 62, 3, 255, 122, 57, 2, 255, 111, 50, 6, 255, 103, 52, 5, 255, 109, 56, 6, 255, 108, 48, 4, 255, 98, 43, 9, 255, 102, 51, 11, 255, 101, 47, 2, 255, 107, 47, 9, 255, 113, 51, 10, 255, 103, 50, 5, 255, 99, 48, 7, 255, 100, 49, 10, 255, 98, 50, 4, 255, 99, 51, 2, 255, 104, 52, 8, 255, 103, 54, 7, 255, 110, 55, 7, 255, 105, 57, 9, 255, 102, 56, 7, 255, 101, 57, 6, 255, 103, 61, 6, 255, 127, 63, 17, 255, 93, 49, 8, 255, 83, 51, 5, 255, 83, 53, 4, 255, 84, 51, 5, 255, 81, 51, 7, 255, 75, 52, 10, 255, 90, 62, 7, 255, 112, 66, 5, 255, 96, 51, 12, 255, 98, 56, 5, 255, 94, 59, 9, 255, 90, 56, 4, 255, 79, 56, 2, 255, 78, 58, 3, 255, 100, 66, 8, 255, 112, 71, 9, 255, 113, 69, 7, 255, 126, 73, 9, 255, 145, 83, 7, 255, 148, 87, 3, 255, 146, 86, 20, 255, 169, 107, 11, 255, 194, 124, 9, 255, 199, 125, 15, 255, 201, 128, 12, 255, 209, 134, 15, 255, 207, 136, 6, 255, 213, 138, 18, 255, 210, 136, 14, 255, 208, 138, 8, 255, 210, 135, 3, 255, 209, 137, 4, 255, 213, 136, 8, 255, 211, 135, 10, 255, 211, 135, 6, 255, 210, 133, 7, 255, 214, 136, 10, 255, 207, 127, 12, 255, 201, 119, 7, 255, 201, 120, 9, 255, 183, 97, 13, 255, 178, 93, 9, 255, 184, 104, 3, 255, 175, 93, 7, 255, 184, 104, 7, 255, 182, 104, 3, 255, 174, 99, 3, 255, 178, 103, 10, 255, 179, 104, 5, 255, 188, 111, 16, 255, 198, 126, 13, 255, 202, 136, 6, 255, 200, 135, 4, 255, 194, 128, 8, 255, 198, 130, 11, 255, 198, 130, 5, 255, 200, 133, 21, 255, 204, 139, 15, 255, 203, 138, 12, 255, 202, 137, 10, 255, 206, 140, 12, 255, 203, 137, 9, 255, 205, 140, 11, 255, 205, 140, 11, 255, 201, 136, 11, 255, 201, 136, 14, 255, 198, 132, 14, 255, 199, 129, 12, 255, 200, 130, 12, 255, 199, 130, 12, 255, 199, 128, 12, 255, 199, 128, 8, 255, 198, 126, 8, 255, 200, 125, 12, 255, 200, 123, 8, 255, 201, 122, 12, 255, 201, 121, 10, 255, 202, 124, 4, 255, 203, 127, 9, 255, 202, 126, 8, 255, 199, 121, 9, 255, 177, 94, 6, 255, 167, 78, 8, 255, 171, 86, 8, 255, 175, 90, 9, 255, 172, 88, 1, 255, 179, 93, 7, 255, 175, 85, 6, 255, 161, 69, 1, 255, 171, 78, 4, 255, 181, 90, 4, 255, 173, 80, 4, 255, 172, 77, 8, 255, 183, 90, 9, 255, 177, 90, 7, 255, 160, 73, 5, 255, 160, 70, 3, 255, 156, 72, 8, 255, 152, 70, 4, 255, 151, 73, 5, 255, 128, 59, 1, 255, 155, 94, 7, 255, 168, 93, 3, 255, 147, 69, 5, 255, 134, 59, 2, 255, 158, 86, 6, 255, 184, 106, 6, 255, 190, 103, 6, 255, 190, 101, 8, 255, 193, 108, 6, 255, 191, 104, 3, 255, 187, 97, 1, 255, 183, 91, 1, 255, 178, 90, 0, 255, 179, 95, 1, 255, 187, 102, 0, 255, 189, 100, 3, 255, 193, 104, 11, 255, 199, 111, 11, 255, 197, 112, 3, 255, 194, 110, 3, 255, 195, 110, 3, 255, 198, 113, 3, 255, 194, 112, 2, 255, 194, 112, 5, 255, 195, 110, 6, 255, 194, 111, 3, 255, 196, 117, 1, 255, 198, 120, 6, 255, 199, 122, 4, 255, 200, 122, 15, 255, 184, 92, 4, 255, 162, 71, 3, 255, 152, 66, 2, 255, 149, 59, 2, 255, 141, 59, 1, 255, 142, 62, 5, 255, 139, 57, 4, 255, 133, 55, 2, 255, 133, 57, 2, 255, 134, 54, 2, 255, 137, 57, 1, 255, 137, 56, 2, 255, 128, 50, 0, 255, 127, 51, 2, 255, 131, 53, 5, 255, 133, 54, 3, 255, 129, 49, 3, 255, 134, 50, 2, 255, 137, 56, 2, 255, 141, 61, 6, 255, 141, 58, 4, 255, 139, 56, 2, 255, 139, 56, 3, 255, 133, 52, 1, 255, 133, 57, 1, 255, 142, 62, 3, 255, 148, 64, 3, 255, 148, 67, 2, 255, 145, 66, 1, 255, 156, 68, 0, 255, 172, 81, 6, 255, 189, 98, 4, 255, 188, 96, 1, 255, 189, 95, 6, 255, 189, 93, 7, 255, 183, 94, 3, 255, 183, 94, 2, 255, 183, 92, 1, 255, 183, 89, 0, 255, 180, 88, 1, 255, 181, 91, 5, 255, 180, 88, 4, 255, 178, 86, 2, 255, 179, 88, 3, 255, 181, 91, 3, 255, 182, 92, 2, 255, 185, 96, 3, 255, 183, 92, 1, 255, 176, 83, 4, 255, 173, 84, 3, 255, 173, 86, 4, 255, 172, 82, 1, 255, 169, 79, 2, 255, 168, 78, 6, 255, 164, 77, 4, 255, 162, 75, 2, 255, 164, 74, 2, 255, 166, 74, 2, 255, 164, 75, 3, 255, 159, 73, 1, 255, 163, 77, 3, 255, 170, 82, 1, 255, 168, 78, 2, 255, 169, 77, 3, 255, 2, 12, 31, 255, 3, 17, 34, 255, 2, 16, 41, 255, 1, 15, 38, 255, 0, 12, 35, 255, 1, 16, 36, 255, 0, 18, 40, 255, 2, 17, 40, 255, 2, 9, 22, 255, 3, 0, 12, 255, 2, 1, 16, 255, 0, 2, 16, 255, 6, 0, 0, 255, 0, 11, 95, 255, 19, 80, 223, 255, 53, 62, 50, 255, 25, 11, 0, 255, 44, 21, 40, 255, 19, 26, 164, 255, 9, 10, 56, 255, 23, 2, 0, 255, 7, 7, 4, 255, 19, 6, 4, 255, 15, 7, 5, 255, 13, 3, 6, 255, 12, 8, 3, 255, 14, 3, 1, 255, 14, 3, 1, 255, 19, 8, 6, 255, 20, 8, 6, 255, 20, 5, 2, 255, 26, 9, 5, 255, 26, 9, 4, 255, 28, 9, 3, 255, 30, 9, 3, 255, 31, 12, 6, 255, 32, 12, 3, 255, 38, 12, 1, 255, 38, 12, 1, 255, 35, 13, 1, 255, 38, 16, 5, 255, 38, 13, 6, 255, 32, 11, 1, 255, 35, 12, 2, 255, 46, 15, 6, 255, 48, 18, 2, 255, 63, 16, 6, 255, 66, 18, 4, 255, 56, 21, 0, 255, 78, 26, 5, 255, 61, 21, 3, 255, 47, 19, 2, 255, 43, 15, 4, 255, 50, 22, 3, 255, 46, 24, 4, 255, 43, 22, 7, 255, 55, 29, 2, 255, 56, 31, 1, 255, 59, 32, 3, 255, 66, 35, 5, 255, 65, 39, 2, 255, 74, 44, 3, 255, 75, 42, 2, 255, 67, 42, 3, 255, 71, 48, 2, 255, 84, 48, 4, 255, 72, 50, 2, 255, 96, 62, 8, 255, 86, 57, 8, 255, 89, 75, 6, 255, 170, 101, 9, 255, 156, 89, 4, 255, 163, 99, 3, 255, 171, 102, 2, 255, 146, 75, 3, 255, 99, 48, 6, 255, 82, 52, 1, 255, 91, 57, 3, 255, 91, 60, 7, 255, 81, 57, 1, 255, 90, 57, 2, 255, 84, 58, 1, 255, 81, 56, 1, 255, 92, 57, 6, 255, 81, 61, 3, 255, 88, 62, 4, 255, 100, 57, 5, 255, 85, 57, 2, 255, 78, 57, 1, 255, 116, 83, 0, 255, 164, 110, 6, 255, 187, 110, 6, 255, 185, 99, 5, 255, 178, 84, 5, 255, 166, 77, 3, 255, 165, 71, 4, 255, 167, 69, 3, 255, 159, 70, 0, 255, 159, 74, 3, 255, 159, 73, 4, 255, 137, 57, 2, 255, 120, 56, 7, 255, 120, 61, 9, 255, 111, 56, 5, 255, 103, 50, 3, 255, 98, 51, 4, 255, 89, 49, 2, 255, 89, 53, 3, 255, 95, 54, 3, 255, 91, 56, 4, 255, 92, 54, 2, 255, 97, 53, 0, 255, 100, 54, 2, 255, 100, 54, 3, 255, 97, 54, 3, 255, 92, 53, 3, 255, 90, 51, 3, 255, 90, 53, 5, 255, 88, 55, 5, 255, 93, 56, 5, 255, 97, 54, 3, 255, 101, 54, 3, 255, 106, 55, 5, 255, 107, 51, 4, 255, 97, 50, 1, 255, 95, 53, 2, 255, 92, 48, 1, 255, 87, 50, 4, 255, 85, 48, 5, 255, 79, 45, 0, 255, 79, 49, 0, 255, 80, 47, 1, 255, 84, 47, 3, 255, 88, 48, 5, 255, 79, 43, 4, 255, 82, 45, 8, 255, 88, 48, 8, 255, 82, 46, 2, 255, 85, 47, 4, 255, 85, 43, 2, 255, 80, 40, 3, 255, 68, 42, 6, 255, 69, 42, 5, 255, 81, 46, 3, 255, 80, 47, 3, 255, 88, 49, 7, 255, 85, 52, 7, 255, 80, 49, 3, 255, 90, 52, 8, 255, 92, 46, 1, 255, 93, 49, 2, 255, 91, 52, 4, 255, 95, 54, 4, 255, 93, 54, 0, 255, 98, 52, 6, 255, 109, 56, 4, 255, 119, 61, 2, 255, 118, 53, 6, 255, 112, 57, 5, 255, 107, 55, 3, 255, 107, 56, 11, 255, 107, 58, 5, 255, 104, 51, 5, 255, 108, 56, 10, 255, 104, 56, 7, 255, 110, 57, 1, 255, 112, 54, 3, 255, 100, 56, 3, 255, 101, 58, 9, 255, 126, 63, 13, 255, 122, 59, 1, 255, 100, 57, 4, 255, 101, 58, 7, 255, 119, 66, 9, 255, 102, 56, 9, 255, 86, 48, 8, 255, 100, 51, 5, 255, 104, 52, 4, 255, 113, 55, 7, 255, 138, 62, 10, 255, 137, 64, 5, 255, 141, 70, 5, 255, 131, 61, 1, 255, 114, 51, 9, 255, 107, 50, 8, 255, 111, 54, 7, 255, 107, 48, 7, 255, 105, 47, 7, 255, 107, 53, 4, 255, 103, 52, 5, 255, 98, 49, 7, 255, 99, 50, 9, 255, 103, 49, 4, 255, 100, 49, 6, 255, 98, 49, 10, 255, 91, 52, 8, 255, 95, 54, 6, 255, 100, 49, 8, 255, 100, 52, 4, 255, 95, 54, 3, 255, 101, 56, 12, 255, 104, 57, 5, 255, 104, 55, 10, 255, 103, 53, 9, 255, 98, 50, 3, 255, 102, 53, 4, 255, 99, 60, 2, 255, 90, 56, 5, 255, 89, 55, 13, 255, 86, 55, 9, 255, 78, 53, 2, 255, 84, 51, 10, 255, 82, 54, 8, 255, 98, 70, 10, 255, 85, 50, 16, 255, 82, 55, 11, 255, 80, 53, 10, 255, 77, 61, 13, 255, 94, 65, 12, 255, 129, 79, 14, 255, 137, 79, 14, 255, 135, 83, 12, 255, 152, 96, 16, 255, 168, 100, 16, 255, 176, 114, 20, 255, 204, 127, 23, 255, 207, 136, 12, 255, 206, 136, 5, 255, 203, 130, 5, 255, 206, 132, 10, 255, 208, 135, 13, 255, 206, 134, 6, 255, 212, 137, 17, 255, 213, 140, 5, 255, 215, 140, 3, 255, 210, 138, 6, 255, 211, 136, 5, 255, 215, 136, 8, 255, 210, 132, 5, 255, 210, 133, 3, 255, 213, 135, 5, 255, 208, 130, 4, 255, 205, 124, 2, 255, 201, 127, 9, 255, 192, 115, 10, 255, 192, 114, 14, 255, 185, 108, 2, 255, 178, 103, 4, 255, 179, 98, 24, 255, 183, 100, 8, 255, 188, 106, 8, 255, 180, 105, 8, 255, 175, 102, 5, 255, 185, 110, 10, 255, 194, 123, 7, 255, 203, 135, 4, 255, 202, 135, 8, 255, 197, 134, 2, 255, 197, 133, 6, 255, 202, 137, 9, 255, 199, 132, 10, 255, 204, 139, 14, 255, 203, 139, 5, 255, 203, 136, 6, 255, 204, 136, 13, 255, 203, 138, 10, 255, 201, 137, 3, 255, 205, 143, 12, 255, 203, 140, 15, 255, 202, 140, 11, 255, 200, 139, 10, 255, 199, 137, 8, 255, 200, 134, 9, 255, 201, 132, 12, 255, 197, 129, 12, 255, 199, 125, 16, 255, 199, 127, 8, 255, 199, 127, 8, 255, 200, 127, 8, 255, 199, 123, 4, 255, 199, 119, 9, 255, 199, 118, 11, 255, 199, 118, 9, 255, 202, 123, 7, 255, 198, 121, 10, 255, 176, 94, 14, 255, 160, 77, 4, 255, 170, 87, 8, 255, 178, 92, 12, 255, 175, 88, 8, 255, 174, 86, 4, 255, 171, 80, 1, 255, 169, 75, 5, 255, 167, 73, 9, 255, 170, 73, 6, 255, 171, 73, 5, 255, 159, 66, 0, 255, 169, 78, 5, 255, 178, 87, 8, 255, 171, 77, 5, 255, 166, 70, 5, 255, 161, 72, 3, 255, 157, 76, 4, 255, 154, 72, 5, 255, 146, 67, 3, 255, 127, 55, 3, 255, 151, 85, 6, 255, 189, 112, 8, 255, 178, 94, 6, 255, 152, 72, 4, 255, 126, 47, 12, 255, 137, 64, 2, 255, 142, 61, 6, 255, 162, 73, 5, 255, 174, 82, 3, 255, 168, 77, 1, 255, 176, 83, 0, 255, 184, 89, 2, 255, 185, 90, 5, 255, 185, 94, 9, 255, 183, 92, 2, 255, 190, 100, 3, 255, 199, 110, 5, 255, 202, 116, 3, 255, 197, 114, 2, 255, 193, 112, 6, 255, 195, 110, 4, 255, 198, 114, 5, 255, 196, 114, 6, 255, 196, 114, 8, 255, 195, 115, 5, 255, 197, 116, 3, 255, 197, 121, 4, 255, 197, 120, 3, 255, 200, 122, 6, 255, 198, 118, 14, 255, 177, 84, 5, 255, 161, 70, 5, 255, 155, 67, 6, 255, 148, 60, 1, 255, 143, 63, 4, 255, 141, 62, 6, 255, 133, 51, 1, 255, 132, 55, 1, 255, 137, 61, 1, 255, 141, 61, 2, 255, 136, 57, 2, 255, 135, 55, 1, 255, 127, 49, 0, 255, 128, 51, 3, 255, 133, 54, 6, 255, 133, 52, 1, 255, 121, 38, 4, 255, 124, 37, 6, 255, 131, 50, 7, 255, 138, 62, 3, 255, 143, 63, 0, 255, 142, 64, 0, 255, 140, 65, 5, 255, 137, 59, 3, 255, 145, 66, 4, 255, 144, 65, 1, 255, 147, 68, 2, 255, 148, 67, 1, 255, 152, 69, 3, 255, 161, 70, 3, 255, 175, 81, 8, 255, 185, 89, 4, 255, 186, 91, 3, 255, 183, 90, 3, 255, 182, 89, 1, 255, 178, 89, 1, 255, 177, 88, 1, 255, 178, 87, 3, 255, 178, 86, 2, 255, 175, 85, 2, 255, 176, 88, 6, 255, 175, 87, 5, 255, 176, 84, 4, 255, 176, 85, 6, 255, 173, 83, 3, 255, 173, 83, 3, 255, 176, 85, 4, 255, 171, 82, 1, 255, 167, 80, 2, 255, 167, 81, 3, 255, 167, 81, 3, 255, 167, 79, 2, 255, 166, 76, 1, 255, 163, 75, 3, 255, 157, 71, 0, 255, 162, 77, 4, 255, 162, 75, 4, 255, 160, 72, 2, 255, 155, 70, 0, 255, 155, 71, 1, 255, 156, 72, 1, 255, 166, 77, 4, 255, 164, 73, 0, 255, 167, 74, 1, 255, 0, 1, 16, 255, 2, 9, 30, 255, 1, 16, 34, 255, 0, 15, 39, 255, 3, 15, 35, 255, 0, 13, 28, 255, 3, 16, 41, 255, 1, 11, 17, 255, 2, 2, 3, 255, 0, 0, 16, 255, 2, 0, 10, 255, 1, 0, 0, 255, 0, 4, 71, 255, 24, 73, 227, 255, 70, 82, 70, 255, 27, 15, 0, 255, 39, 13, 26, 255, 34, 24, 167, 255, 3, 16, 75, 255, 19, 3, 0, 255, 15, 7, 2, 255, 8, 5, 6, 255, 16, 7, 8, 255, 21, 5, 5, 255, 17, 5, 4, 255, 14, 5, 3, 255, 17, 7, 5, 255, 20, 6, 5, 255, 18, 7, 5, 255, 15, 5, 1, 255, 21, 8, 3, 255, 26, 8, 2, 255, 26, 7, 1, 255, 35, 10, 4, 255, 39, 10, 3, 255, 35, 10, 4, 255, 35, 11, 3, 255, 41, 13, 3, 255, 41, 13, 3, 255, 39, 14, 6, 255, 36, 10, 3, 255, 40, 14, 4, 255, 32, 13, 1, 255, 34, 14, 4, 255, 46, 16, 6, 255, 57, 23, 2, 255, 69, 20, 2, 255, 75, 24, 4, 255, 71, 23, 1, 255, 69, 26, 2, 255, 57, 24, 3, 255, 54, 23, 2, 255, 51, 20, 5, 255, 44, 21, 2, 255, 45, 23, 0, 255, 50, 24, 3, 255, 55, 31, 3, 255, 54, 30, 1, 255, 58, 32, 3, 255, 67, 35, 2, 255, 68, 41, 2, 255, 70, 46, 5, 255, 72, 45, 4, 255, 79, 47, 6, 255, 83, 51, 2, 255, 71, 48, 1, 255, 88, 55, 4, 255, 89, 53, 5, 255, 83, 62, 5, 255, 143, 91, 8, 255, 159, 90, 5, 255, 164, 96, 3, 255, 163, 96, 4, 255, 148, 74, 2, 255, 100, 55, 0, 255, 77, 57, 3, 255, 83, 54, 2, 255, 89, 56, 3, 255, 90, 56, 3, 255, 88, 56, 2, 255, 95, 57, 2, 255, 85, 58, 1, 255, 83, 56, 6, 255, 88, 59, 4, 255, 87, 57, 2, 255, 90, 59, 4, 255, 79, 51, 1, 255, 94, 64, 12, 255, 156, 105, 9, 255, 194, 114, 3, 255, 189, 94, 5, 255, 181, 91, 7, 255, 179, 79, 1, 255, 175, 80, 4, 255, 170, 83, 3, 255, 170, 80, 1, 255, 162, 73, 3, 255, 149, 69, 0, 255, 128, 65, 7, 255, 107, 62, 7, 255, 84, 48, 1, 255, 85, 51, 2, 255, 82, 51, 4, 255, 86, 51, 7, 255, 94, 53, 5, 255, 90, 56, 1, 255, 98, 56, 4, 255, 100, 56, 6, 255, 98, 54, 3, 255, 99, 54, 2, 255, 101, 54, 2, 255, 98, 53, 1, 255, 96, 55, 3, 255, 95, 56, 4, 255, 93, 50, 1, 255, 98, 52, 9, 255, 92, 49, 4, 255, 90, 50, 1, 255, 94, 51, 1, 255, 98, 51, 1, 255, 99, 52, 3, 255, 101, 54, 4, 255, 103, 52, 4, 255, 102, 51, 4, 255, 90, 48, 0, 255, 84, 50, 0, 255, 81, 50, 3, 255, 76, 48, 4, 255, 81, 47, 6, 255, 78, 46, 2, 255, 82, 51, 4, 255, 84, 47, 3, 255, 89, 47, 5, 255, 91, 52, 6, 255, 86, 45, 1, 255, 83, 47, 3, 255, 83, 50, 4, 255, 88, 47, 5, 255, 87, 42, 3, 255, 85, 42, 1, 255, 83, 40, 3, 255, 79, 43, 7, 255, 76, 40, 4, 255, 83, 46, 1, 255, 89, 48, 2, 255, 95, 49, 8, 255, 93, 49, 6, 255, 98, 49, 3, 255, 100, 53, 7, 255, 105, 57, 6, 255, 107, 57, 4, 255, 102, 51, 4, 255, 103, 56, 4, 255, 105, 55, 0, 255, 107, 45, 10, 255, 105, 47, 11, 255, 107, 52, 2, 255, 113, 52, 7, 255, 104, 53, 1, 255, 105, 56, 3, 255, 106, 54, 4, 255, 114, 59, 5, 255, 109, 56, 6, 255, 101, 54, 7, 255, 102, 54, 6, 255, 106, 55, 3, 255, 101, 54, 5, 255, 106, 57, 7, 255, 105, 59, 4, 255, 116, 53, 9, 255, 111, 56, 8, 255, 105, 56, 3, 255, 109, 58, 2, 255, 111, 56, 7, 255, 101, 55, 7, 255, 103, 55, 8, 255, 99, 55, 9, 255, 95, 50, 13, 255, 83, 50, 11, 255, 98, 55, 17, 255, 139, 69, 15, 255, 156, 70, 5, 255, 140, 60, 7, 255, 126, 58, 3, 255, 119, 52, 1, 255, 121, 58, 5, 255, 125, 59, 8, 255, 132, 56, 6, 255, 127, 61, 3, 255, 128, 60, 5, 255, 127, 58, 9, 255, 112, 53, 10, 255, 110, 51, 7, 255, 102, 53, 5, 255, 95, 48, 6, 255, 87, 47, 6, 255, 96, 51, 6, 255, 97, 52, 6, 255, 90, 49, 8, 255, 92, 54, 8, 255, 90, 55, 16, 255, 95, 57, 7, 255, 101, 55, 4, 255, 99, 49, 4, 255, 103, 55, 9, 255, 97, 57, 5, 255, 92, 54, 4, 255, 107, 60, 8, 255, 95, 58, 4, 255, 92, 53, 5, 255, 89, 53, 3, 255, 87, 58, 7, 255, 96, 60, 11, 255, 137, 82, 5, 255, 131, 81, 9, 255, 137, 85, 10, 255, 142, 84, 22, 255, 147, 84, 13, 255, 168, 94, 11, 255, 164, 96, 14, 255, 179, 112, 17, 255, 195, 124, 13, 255, 203, 127, 10, 255, 206, 131, 6, 255, 207, 136, 12, 255, 203, 139, 11, 255, 204, 136, 8, 255, 209, 134, 11, 255, 201, 134, 7, 255, 208, 136, 17, 255, 213, 136, 22, 255, 212, 136, 11, 255, 209, 136, 18, 255, 212, 140, 15, 255, 212, 137, 6, 255, 211, 135, 7, 255, 216, 135, 12, 255, 208, 135, 1, 255, 210, 135, 5, 255, 211, 133, 7, 255, 211, 132, 13, 255, 195, 112, 9, 255, 196, 114, 1, 255, 202, 125, 10, 255, 196, 114, 10, 255, 200, 120, 8, 255, 196, 118, 14, 255, 178, 99, 11, 255, 169, 88, 4, 255, 174, 88, 3, 255, 174, 94, 4, 255, 176, 103, 9, 255, 171, 101, 4, 255, 196, 123, 9, 255, 204, 137, 1, 255, 202, 137, 8, 255, 205, 137, 16, 255, 203, 140, 3, 255, 203, 141, 8, 255, 205, 141, 8, 255, 202, 137, 8, 255, 204, 142, 10, 255, 202, 137, 5, 255, 200, 133, 3, 255, 203, 136, 6, 255, 206, 138, 11, 255, 206, 139, 15, 255, 204, 139, 13, 255, 205, 141, 10, 255, 205, 143, 9, 255, 204, 142, 9, 255, 206, 142, 13, 255, 205, 137, 14, 255, 203, 132, 15, 255, 196, 126, 13, 255, 199, 127, 13, 255, 201, 130, 6, 255, 199, 127, 12, 255, 199, 125, 11, 255, 197, 122, 5, 255, 197, 119, 10, 255, 200, 121, 11, 255, 198, 119, 5, 255, 199, 119, 2, 255, 188, 105, 11, 255, 171, 85, 10, 255, 175, 90, 12, 255, 174, 89, 7, 255, 176, 86, 7, 255, 177, 86, 7, 255, 176, 84, 6, 255, 169, 77, 4, 255, 167, 74, 4, 255, 167, 74, 5, 255, 167, 72, 6, 255, 162, 66, 6, 255, 158, 64, 1, 255, 170, 80, 3, 255, 169, 79, 2, 255, 169, 71, 8, 255, 167, 66, 10, 255, 150, 62, 7, 255, 138, 59, 3, 255, 146, 67, 1, 255, 144, 70, 4, 255, 140, 73, 13, 255, 121, 56, 2, 255, 139, 66, 5, 255, 166, 79, 5, 255, 172, 81, 7, 255, 137, 60, 6, 255, 105, 43, 5, 255, 103, 45, 1, 255, 117, 46, 2, 255, 135, 55, 5, 255, 142, 64, 6, 255, 148, 63, 4, 255, 160, 68, 3, 255, 174, 80, 4, 255, 180, 87, 3, 255, 189, 100, 3, 255, 194, 104, 8, 255, 188, 96, 2, 255, 190, 98, 6, 255, 194, 106, 8, 255, 200, 117, 5, 255, 201, 117, 4, 255, 198, 116, 3, 255, 195, 119, 1, 255, 195, 118, 5, 255, 194, 116, 10, 255, 194, 116, 7, 255, 196, 119, 3, 255, 195, 116, 3, 255, 197, 117, 0, 255, 193, 111, 5, 255, 160, 77, 8, 255, 148, 63, 5, 255, 149, 65, 2, 255, 149, 68, 5, 255, 143, 65, 3, 255, 141, 62, 5, 255, 139, 58, 3, 255, 135, 57, 2, 255, 137, 59, 2, 255, 140, 59, 3, 255, 137, 60, 6, 255, 133, 53, 2, 255, 130, 51, 4, 255, 126, 50, 6, 255, 124, 49, 1, 255, 131, 56, 2, 255, 121, 47, 4, 255, 124, 47, 5, 255, 125, 52, 3, 255, 128, 57, 0, 255, 148, 67, 11, 255, 149, 67, 5, 255, 147, 70, 3, 255, 150, 70, 4, 255, 153, 67, 1, 255, 156, 70, 0, 255, 151, 69, 0, 255, 149, 68, 2, 255, 148, 63, 1, 255, 160, 68, 3, 255, 170, 76, 2, 255, 173, 78, 0, 255, 178, 85, 4, 255, 175, 85, 1, 255, 174, 85, 1, 255, 171, 83, 2, 255, 170, 83, 2, 255, 171, 84, 4, 255, 172, 83, 3, 255, 170, 81, 1, 255, 173, 84, 4, 255, 172, 84, 2, 255, 173, 84, 1, 255, 170, 81, 2, 255, 165, 78, 1, 255, 164, 78, 2, 255, 164, 78, 1, 255, 161, 75, 0, 255, 157, 74, 1, 255, 157, 74, 2, 255, 159, 74, 3, 255, 162, 75, 3, 255, 165, 77, 3, 255, 161, 75, 2, 255, 157, 71, 0, 255, 157, 71, 0, 255, 155, 70, 2, 255, 152, 67, 2, 255, 148, 65, 0, 255, 151, 67, 2, 255, 150, 67, 1, 255, 154, 69, 1, 255, 160, 72, 2, 255, 167, 75, 4, 255, 2, 9, 27, 255, 0, 1, 13, 255, 1, 9, 29, 255, 4, 17, 36, 255, 2, 15, 32, 255, 2, 16, 30, 255, 4, 6, 22, 255, 3, 0, 6, 255, 2, 0, 3, 255, 0, 2, 19, 255, 8, 0, 6, 255, 1, 0, 48, 255, 16, 45, 221, 255, 72, 77, 94, 255, 37, 22, 0, 255, 28, 9, 6, 255, 33, 29, 147, 255, 6, 17, 94, 255, 18, 0, 0, 255, 9, 5, 2, 255, 13, 6, 3, 255, 22, 5, 4, 255, 17, 5, 2, 255, 19, 8, 2, 255, 26, 7, 5, 255, 18, 5, 7, 255, 14, 5, 2, 255, 18, 7, 5, 255, 19, 7, 6, 255, 18, 6, 3, 255, 23, 10, 4, 255, 31, 11, 5, 255, 28, 13, 4, 255, 31, 9, 2, 255, 37, 10, 3, 255, 37, 10, 2, 255, 39, 13, 5, 255, 44, 12, 4, 255, 41, 12, 5, 255, 35, 9, 3, 255, 37, 12, 3, 255, 32, 11, 0, 255, 36, 17, 4, 255, 37, 11, 2, 255, 53, 17, 6, 255, 67, 23, 5, 255, 76, 26, 4, 255, 80, 25, 2, 255, 88, 25, 5, 255, 63, 28, 3, 255, 50, 26, 3, 255, 53, 22, 1, 255, 49, 21, 0, 255, 39, 22, 2, 255, 52, 29, 2, 255, 60, 31, 5, 255, 55, 30, 5, 255, 56, 32, 2, 255, 62, 39, 6, 255, 69, 38, 1, 255, 72, 42, 0, 255, 68, 46, 2, 255, 68, 43, 1, 255, 78, 46, 2, 255, 77, 53, 1, 255, 84, 54, 4, 255, 101, 54, 7, 255, 73, 53, 4, 255, 121, 81, 7, 255, 157, 90, 5, 255, 165, 96, 8, 255, 164, 101, 4, 255, 153, 81, 6, 255, 113, 51, 4, 255, 87, 55, 4, 255, 80, 57, 5, 255, 89, 59, 3, 255, 92, 57, 4, 255, 89, 53, 0, 255, 88, 59, 8, 255, 88, 54, 9, 255, 83, 50, 2, 255, 82, 58, 1, 255, 92, 59, 6, 255, 80, 51, 6, 255, 77, 55, 4, 255, 122, 86, 5, 255, 175, 111, 7, 255, 185, 103, 4, 255, 176, 90, 1, 255, 182, 89, 3, 255, 179, 90, 5, 255, 172, 82, 3, 255, 170, 80, 3, 255, 160, 72, 4, 255, 143, 72, 5, 255, 107, 61, 6, 255, 99, 52, 4, 255, 87, 46, 3, 255, 79, 48, 9, 255, 77, 54, 4, 255, 86, 52, 3, 255, 91, 51, 4, 255, 94, 56, 0, 255, 99, 58, 7, 255, 97, 50, 7, 255, 94, 55, 5, 255, 95, 57, 4, 255, 97, 55, 3, 255, 100, 55, 5, 255, 102, 52, 2, 255, 101, 52, 1, 255, 97, 54, 3, 255, 94, 52, 5, 255, 94, 53, 4, 255, 95, 53, 1, 255, 97, 52, 4, 255, 102, 52, 6, 255, 97, 52, 5, 255, 91, 49, 3, 255, 93, 50, 5, 255, 95, 53, 6, 255, 91, 48, 1, 255, 93, 50, 3, 255, 89, 48, 2, 255, 85, 49, 1, 255, 85, 52, 6, 255, 79, 45, 6, 255, 82, 49, 8, 255, 80, 48, 5, 255, 82, 46, 2, 255, 88, 47, 4, 255, 91, 49, 5, 255, 89, 49, 3, 255, 93, 49, 4, 255, 83, 48, 3, 255, 82, 51, 2, 255, 97, 49, 3, 255, 101, 46, 2, 255, 96, 46, 5, 255, 92, 48, 7, 255, 86, 42, 9, 255, 94, 44, 10, 255, 102, 56, 7, 255, 100, 52, 3, 255, 105, 56, 8, 255, 105, 52, 4, 255, 98, 55, 2, 255, 97, 54, 6, 255, 102, 54, 6, 255, 102, 56, 1, 255, 99, 51, 1, 255, 109, 58, 9, 255, 106, 53, 3, 255, 106, 53, 4, 255, 106, 56, 6, 255, 99, 54, 9, 255, 100, 54, 9, 255, 101, 55, 2, 255, 106, 55, 6, 255, 104, 57, 8, 255, 107, 55, 5, 255, 105, 56, 2, 255, 100, 51, 4, 255, 107, 54, 4, 255, 107, 52, 9, 255, 110, 55, 9, 255, 108, 57, 2, 255, 109, 52, 6, 255, 108, 59, 5, 255, 107, 60, 14, 255, 109, 57, 5, 255, 106, 54, 10, 255, 104, 53, 7, 255, 108, 57, 7, 255, 110, 54, 2, 255, 111, 52, 7, 255, 113, 54, 8, 255, 106, 53, 5, 255, 95, 51, 10, 255, 116, 57, 6, 255, 147, 70, 5, 255, 151, 73, 4, 255, 147, 66, 9, 255, 144, 64, 6, 255, 145, 67, 4, 255, 155, 68, 2, 255, 159, 69, 7, 255, 158, 70, 10, 255, 157, 70, 3, 255, 150, 66, 3, 255, 140, 58, 10, 255, 125, 59, 6, 255, 108, 56, 2, 255, 100, 52, 10, 255, 95, 51, 12, 255, 94, 49, 3, 255, 90, 52, 2, 255, 87, 51, 14, 255, 98, 47, 9, 255, 93, 51, 6, 255, 97, 58, 3, 255, 97, 52, 4, 255, 88, 48, 8, 255, 97, 52, 7, 255, 96, 59, 8, 255, 101, 52, 9, 255, 105, 50, 4, 255, 97, 55, 4, 255, 90, 58, 7, 255, 97, 60, 8, 255, 88, 56, 9, 255, 96, 60, 13, 255, 147, 94, 16, 255, 158, 97, 12, 255, 177, 109, 12, 255, 174, 101, 11, 255, 190, 113, 11, 255, 191, 121, 16, 255, 197, 130, 14, 255, 201, 132, 9, 255, 204, 131, 10, 255, 207, 131, 13, 255, 207, 134, 10, 255, 207, 135, 9, 255, 205, 137, 11, 255, 201, 122, 19, 255, 197, 123, 14, 255, 207, 140, 16, 255, 215, 143, 14, 255, 211, 139, 5, 255, 211, 140, 9, 255, 216, 136, 20, 255, 218, 137, 9, 255, 214, 135, 5, 255, 217, 136, 12, 255, 213, 138, 12, 255, 208, 134, 3, 255, 209, 135, 5, 255, 210, 133, 5, 255, 201, 120, 5, 255, 206, 123, 9, 255, 210, 129, 9, 255, 206, 126, 6, 255, 201, 119, 15, 255, 207, 127, 10, 255, 213, 135, 13, 255, 177, 95, 6, 255, 165, 79, 6, 255, 172, 91, 3, 255, 170, 96, 3, 255, 172, 103, 9, 255, 183, 116, 8, 255, 201, 134, 5, 255, 204, 137, 10, 255, 205, 139, 11, 255, 208, 142, 11, 255, 205, 142, 7, 255, 204, 143, 10, 255, 201, 138, 10, 255, 207, 144, 10, 255, 204, 141, 13, 255, 198, 133, 12, 255, 193, 126, 5, 255, 195, 126, 5, 255, 203, 135, 10, 255, 208, 140, 12, 255, 205, 137, 7, 255, 208, 140, 9, 255, 205, 138, 4, 255, 200, 135, 7, 255, 200, 134, 10, 255, 201, 130, 16, 255, 200, 128, 17, 255, 197, 124, 16, 255, 197, 124, 9, 255, 199, 125, 3, 255, 200, 125, 12, 255, 199, 123, 18, 255, 197, 121, 15, 255, 195, 119, 10, 255, 199, 121, 11, 255, 201, 122, 13, 255, 199, 118, 9, 255, 184, 101, 6, 255, 185, 99, 10, 255, 181, 99, 0, 255, 175, 88, 4, 255, 174, 84, 3, 255, 184, 92, 10, 255, 175, 82, 2, 255, 174, 81, 2, 255, 168, 77, 0, 255, 167, 75, 0, 255, 166, 75, 2, 255, 160, 67, 1, 255, 160, 65, 1, 255, 166, 72, 5, 255, 169, 77, 6, 255, 163, 72, 0, 255, 164, 73, 0, 255, 156, 64, 0, 255, 148, 63, 7, 255, 149, 68, 8, 255, 147, 67, 2, 255, 130, 61, 2, 255, 121, 56, 5, 255, 125, 54, 3, 255, 130, 58, 4, 255, 140, 68, 5, 255, 136, 65, 3, 255, 125, 57, 3, 255, 119, 49, 9, 255, 109, 45, 3, 255, 111, 48, 2, 255, 118, 54, 4, 255, 125, 54, 10, 255, 141, 59, 5, 255, 156, 69, 0, 255, 161, 71, 3, 255, 181, 94, 4, 255, 196, 109, 7, 255, 185, 94, 0, 255, 177, 84, 0, 255, 173, 82, 0, 255, 181, 91, 3, 255, 192, 104, 7, 255, 196, 115, 3, 255, 193, 119, 0, 255, 193, 117, 2, 255, 194, 114, 6, 255, 191, 113, 5, 255, 191, 111, 5, 255, 192, 109, 6, 255, 191, 109, 2, 255, 189, 103, 5, 255, 147, 64, 6, 255, 135, 57, 3, 255, 141, 62, 4, 255, 143, 63, 2, 255, 141, 63, 1, 255, 143, 64, 2, 255, 143, 65, 3, 255, 139, 62, 5, 255, 138, 55, 6, 255, 139, 54, 5, 255, 134, 51, 1, 255, 131, 50, 2, 255, 131, 50, 8, 255, 119, 41, 0, 255, 132, 55, 7, 255, 132, 55, 5, 255, 130, 53, 1, 255, 129, 50, 0, 255, 118, 41, 6, 255, 115, 39, 5, 255, 144, 65, 6, 255, 151, 68, 7, 255, 155, 68, 3, 255, 160, 73, 1, 255, 158, 76, 1, 255, 160, 76, 2, 255, 159, 72, 4, 255, 150, 68, 3, 255, 150, 67, 4, 255, 162, 73, 3, 255, 171, 81, 1, 255, 174, 81, 3, 255, 171, 79, 3, 255, 169, 79, 2, 255, 166, 78, 4, 255, 163, 78, 1, 255, 164, 80, 1, 255, 165, 78, 0, 255, 167, 77, 2, 255, 168, 78, 1, 255, 172, 80, 4, 255, 170, 80, 1, 255, 166, 80, 2, 255, 162, 76, 1, 255, 158, 74, 3, 255, 156, 73, 4, 255, 151, 68, 2, 255, 152, 68, 3, 255, 148, 69, 2, 255, 150, 69, 2, 255, 151, 68, 2, 255, 157, 72, 1, 255, 167, 78, 5, 255, 166, 77, 3, 255, 162, 73, 5, 255, 154, 66, 3, 255, 149, 65, 2, 255, 145, 61, 1, 255, 146, 61, 4, 255, 147, 62, 4, 255, 147, 62, 2, 255, 153, 69, 2, 255, 160, 72, 5, 255, 161, 70, 2, 255, 19, 65, 117, 255, 3, 21, 33, 255, 2, 6, 9, 255, 3, 9, 18, 255, 2, 12, 33, 255, 4, 12, 30, 255, 2, 1, 7, 255, 2, 0, 5, 255, 1, 2, 6, 255, 2, 3, 5, 255, 1, 0, 26, 255, 10, 37, 216, 255, 73, 85, 121, 255, 52, 32, 0, 255, 27, 10, 0, 255, 29, 28, 110, 255, 6, 22, 122, 255, 18, 2, 0, 255, 14, 5, 6, 255, 12, 5, 3, 255, 15, 5, 4, 255, 18, 5, 4, 255, 18, 6, 5, 255, 16, 5, 4, 255, 16, 5, 2, 255, 18, 8, 4, 255, 17, 9, 7, 255, 19, 6, 3, 255, 23, 8, 4, 255, 26, 9, 7, 255, 27, 9, 4, 255, 31, 9, 3, 255, 33, 8, 2, 255, 38, 9, 5, 255, 44, 14, 8, 255, 44, 13, 4, 255, 43, 13, 2, 255, 47, 13, 4, 255, 44, 15, 7, 255, 41, 16, 7, 255, 39, 13, 2, 255, 35, 14, 1, 255, 46, 17, 5, 255, 63, 19, 4, 255, 69, 26, 3, 255, 81, 24, 2, 255, 88, 24, 5, 255, 88, 23, 4, 255, 87, 23, 4, 255, 61, 22, 1, 255, 46, 24, 4, 255, 51, 24, 4, 255, 48, 23, 1, 255, 48, 25, 3, 255, 61, 30, 8, 255, 59, 25, 2, 255, 58, 30, 3, 255, 58, 34, 2, 255, 69, 40, 6, 255, 72, 38, 2, 255, 73, 41, 3, 255, 71, 45, 4, 255, 77, 47, 4, 255, 70, 47, 1, 255, 77, 53, 1, 255, 90, 62, 6, 255, 78, 54, 10, 255, 91, 68, 5, 255, 143, 88, 7, 255, 151, 94, 3, 255, 161, 97, 5, 255, 151, 79, 6, 255, 127, 59, 0, 255, 92, 49, 4, 255, 83, 55, 8, 255, 86, 57, 3, 255, 89, 58, 6, 255, 88, 60, 9, 255, 83, 60, 4, 255, 86, 58, 2, 255, 88, 53, 5, 255, 90, 59, 0, 255, 83, 59, 6, 255, 75, 51, 5, 255, 96, 70, 7, 255, 158, 101, 11, 255, 193, 113, 1, 255, 177, 93, 4, 255, 176, 85, 4, 255, 179, 92, 3, 255, 180, 97, 2, 255, 176, 85, 3, 255, 158, 78, 12, 255, 118, 65, 3, 255, 87, 54, 4, 255, 81, 51, 3, 255, 82, 46, 3, 255, 79, 49, 6, 255, 82, 50, 9, 255, 83, 48, 4, 255, 83, 52, 4, 255, 87, 53, 5, 255, 94, 53, 6, 255, 90, 59, 3, 255, 91, 55, 3, 255, 97, 54, 7, 255, 93, 57, 3, 255, 94, 55, 4, 255, 96, 58, 2, 255, 94, 57, 3, 255, 101, 53, 4, 255, 95, 51, 2, 255, 91, 56, 3, 255, 94, 54, 5, 255, 97, 52, 5, 255, 98, 52, 3, 255, 98, 53, 8, 255, 90, 49, 6, 255, 83, 48, 2, 255, 92, 48, 3, 255, 103, 52, 8, 255, 89, 49, 3, 255, 89, 50, 6, 255, 89, 49, 2, 255, 92, 51, 5, 255, 87, 48, 3, 255, 88, 49, 1, 255, 90, 49, 6, 255, 85, 50, 3, 255, 82, 46, 2, 255, 85, 48, 4, 255, 89, 52, 5, 255, 92, 55, 7, 255, 88, 50, 8, 255, 87, 50, 7, 255, 81, 50, 4, 255, 93, 52, 5, 255, 115, 55, 8, 255, 117, 55, 2, 255, 105, 48, 4, 255, 101, 54, 0, 255, 92, 47, 4, 255, 101, 53, 9, 255, 115, 54, 5, 255, 116, 57, 4, 255, 113, 56, 3, 255, 100, 50, 7, 255, 100, 53, 8, 255, 99, 53, 1, 255, 108, 55, 8, 255, 106, 56, 7, 255, 106, 57, 7, 255, 104, 52, 4, 255, 105, 56, 1, 255, 105, 56, 3, 255, 101, 52, 5, 255, 99, 53, 5, 255, 101, 56, 6, 255, 106, 57, 8, 255, 107, 57, 6, 255, 107, 56, 6, 255, 108, 57, 6, 255, 109, 56, 8, 255, 112, 59, 6, 255, 109, 59, 1, 255, 108, 58, 7, 255, 113, 55, 7, 255, 110, 59, 8, 255, 106, 51, 5, 255, 105, 56, 3, 255, 121, 66, 9, 255, 113, 57, 6, 255, 109, 56, 5, 255, 105, 57, 4, 255, 108, 57, 9, 255, 108, 60, 4, 255, 111, 63, 3, 255, 111, 61, 8, 255, 111, 60, 6, 255, 106, 61, 4, 255, 111, 52, 8, 255, 134, 55, 14, 255, 163, 74, 7, 255, 162, 71, 6, 255, 161, 74, 3, 255, 161, 69, 5, 255, 163, 70, 6, 255, 164, 71, 3, 255, 166, 73, 1, 255, 163, 69, 7, 255, 154, 66, 3, 255, 151, 68, 6, 255, 149, 72, 2, 255, 137, 64, 8, 255, 117, 55, 14, 255, 105, 56, 7, 255, 95, 53, 3, 255, 90, 48, 7, 255, 90, 55, 9, 255, 97, 58, 4, 255, 97, 52, 3, 255, 92, 54, 10, 255, 98, 59, 8, 255, 106, 60, 12, 255, 97, 55, 8, 255, 98, 55, 10, 255, 105, 67, 9, 255, 95, 54, 14, 255, 126, 81, 8, 255, 136, 84, 9, 255, 148, 90, 14, 255, 151, 92, 23, 255, 166, 106, 18, 255, 179, 113, 10, 255, 182, 107, 17, 255, 190, 116, 17, 255, 195, 123, 18, 255, 204, 136, 15, 255, 205, 132, 7, 255, 206, 131, 7, 255, 205, 130, 15, 255, 205, 135, 14, 255, 208, 136, 7, 255, 209, 134, 11, 255, 208, 135, 11, 255, 212, 139, 13, 255, 203, 131, 8, 255, 204, 132, 12, 255, 215, 144, 13, 255, 210, 139, 8, 255, 204, 133, 6, 255, 203, 130, 10, 255, 207, 132, 15, 255, 214, 140, 9, 255, 212, 138, 9, 255, 210, 140, 6, 255, 207, 138, 9, 255, 211, 137, 4, 255, 214, 138, 3, 255, 213, 134, 12, 255, 207, 125, 11, 255, 208, 129, 1, 255, 210, 132, 4, 255, 207, 128, 2, 255, 208, 135, 3, 255, 206, 134, 11, 255, 205, 126, 13, 255, 173, 87, 6, 255, 160, 84, 11, 255, 171, 104, 13, 255, 183, 116, 12, 255, 175, 105, 12, 255, 192, 124, 8, 255, 204, 138, 8, 255, 203, 138, 9, 255, 209, 142, 12, 255, 206, 141, 10, 255, 206, 144, 14, 255, 203, 144, 7, 255, 205, 144, 15, 255, 206, 144, 9, 255, 200, 134, 7, 255, 199, 130, 12, 255, 195, 125, 11, 255, 196, 127, 11, 255, 201, 132, 8, 255, 203, 135, 5, 255, 205, 135, 7, 255, 204, 133, 11, 255, 202, 129, 8, 255, 199, 127, 10, 255, 201, 128, 9, 255, 202, 129, 12, 255, 198, 126, 6, 255, 199, 123, 14, 255, 198, 124, 7, 255, 196, 121, 9, 255, 200, 121, 12, 255, 197, 119, 8, 255, 196, 118, 10, 255, 198, 123, 6, 255, 198, 119, 12, 255, 199, 117, 12, 255, 195, 111, 10, 255, 189, 108, 3, 255, 188, 106, 5, 255, 182, 99, 4, 255, 180, 92, 3, 255, 177, 89, 6, 255, 183, 93, 13, 255, 177, 86, 4, 255, 177, 85, 3, 255, 180, 89, 5, 255, 172, 80, 7, 255, 164, 73, 2, 255, 161, 71, 2, 255, 159, 68, 1, 255, 160, 67, 4, 255, 169, 76, 6, 255, 174, 82, 4, 255, 170, 81, 0, 255, 157, 65, 1, 255, 149, 60, 6, 255, 151, 66, 6, 255, 151, 69, 0, 255, 142, 69, 4, 255, 138, 71, 11, 255, 123, 55, 6, 255, 111, 49, 7, 255, 145, 71, 8, 255, 169, 90, 4, 255, 150, 75, 3, 255, 143, 63, 4, 255, 138, 60, 3, 255, 129, 57, 5, 255, 125, 56, 6, 255, 132, 59, 4, 255, 135, 56, 1, 255, 137, 61, 0, 255, 137, 62, 6, 255, 161, 76, 4, 255, 187, 100, 1, 255, 194, 104, 6, 255, 182, 93, 3, 255, 172, 83, 2, 255, 170, 75, 4, 255, 171, 75, 10, 255, 174, 84, 5, 255, 181, 99, 3, 255, 185, 103, 3, 255, 190, 103, 4, 255, 188, 100, 4, 255, 187, 99, 5, 255, 187, 100, 3, 255, 192, 105, 4, 255, 181, 93, 2, 255, 148, 61, 10, 255, 136, 60, 8, 255, 143, 67, 1, 255, 146, 68, 1, 255, 145, 65, 3, 255, 147, 66, 5, 255, 141, 65, 1, 255, 136, 61, 4, 255, 136, 56, 6, 255, 132, 49, 5, 255, 131, 51, 4, 255, 131, 59, 2, 255, 123, 50, 4, 255, 122, 47, 2, 255, 132, 56, 6, 255, 130, 54, 2, 255, 130, 53, 3, 255, 127, 49, 7, 255, 119, 43, 5, 255, 118, 43, 6, 255, 131, 53, 2, 255, 152, 67, 4, 255, 159, 72, 0, 255, 160, 71, 2, 255, 151, 73, 2, 255, 148, 72, 2, 255, 151, 71, 2, 255, 145, 66, 1, 255, 152, 65, 6, 255, 161, 74, 5, 255, 166, 76, 3, 255, 170, 77, 1, 255, 167, 74, 1, 255, 164, 72, 4, 255, 160, 72, 2, 255, 152, 70, 1, 255, 148, 64, 0, 255, 154, 69, 2, 255, 156, 71, 5, 255, 154, 69, 2, 255, 159, 73, 3, 255, 159, 72, 0, 255, 160, 73, 2, 255, 155, 69, 3, 255, 145, 62, 0, 255, 142, 62, 0, 255, 148, 67, 4, 255, 146, 65, 3, 255, 136, 63, 1, 255, 138, 62, 2, 255, 143, 60, 1, 255, 156, 68, 5, 255, 162, 72, 6, 255, 160, 67, 1, 255, 154, 64, 3, 255, 151, 61, 2, 255, 142, 62, 0, 255, 139, 60, 0, 255, 142, 60, 4, 255, 138, 62, 4, 255, 140, 60, 2, 255, 144, 62, 1, 255, 148, 66, 3, 255, 145, 62, 1, 255, 35, 76, 133, 255, 12, 50, 82, 255, 0, 7, 25, 255, 3, 15, 28, 255, 3, 7, 23, 255, 1, 1, 12, 255, 2, 0, 3, 255, 4, 2, 10, 255, 1, 2, 3, 255, 1, 0, 19, 255, 2, 25, 190, 255, 69, 90, 144, 255, 57, 45, 3, 255, 19, 6, 0, 255, 34, 23, 86, 255, 6, 23, 148, 255, 11, 3, 11, 255, 18, 3, 12, 255, 13, 5, 11, 255, 14, 4, 2, 255, 23, 9, 6, 255, 23, 9, 7, 255, 19, 8, 5, 255, 16, 8, 5, 255, 16, 7, 4, 255, 15, 9, 5, 255, 21, 8, 7, 255, 31, 7, 3, 255, 30, 8, 0, 255, 36, 14, 4, 255, 34, 12, 5, 255, 24, 8, 1, 255, 34, 11, 3, 255, 44, 15, 3, 255, 49, 12, 1, 255, 49, 11, 4, 255, 47, 11, 3, 255, 47, 17, 4, 255, 50, 17, 4, 255, 38, 12, 3, 255, 41, 14, 6, 255, 46, 13, 4, 255, 54, 19, 4, 255, 55, 22, 3, 255, 62, 30, 1, 255, 116, 40, 3, 255, 112, 33, 3, 255, 103, 37, 10, 255, 71, 28, 3, 255, 52, 21, 1, 255, 50, 24, 3, 255, 44, 24, 1, 255, 51, 30, 6, 255, 53, 27, 3, 255, 54, 27, 2, 255, 52, 30, 0, 255, 51, 34, 1, 255, 58, 43, 3, 255, 69, 38, 4, 255, 77, 41, 7, 255, 69, 43, 8, 255, 75, 45, 4, 255, 80, 48, 4, 255, 78, 44, 3, 255, 94, 55, 9, 255, 82, 52, 3, 255, 73, 57, 0, 255, 141, 88, 12, 255, 153, 89, 6, 255, 159, 101, 4, 255, 158, 91, 0, 255, 130, 60, 5, 255, 99, 51, 8, 255, 76, 52, 3, 255, 80, 55, 2, 255, 83, 58, 4, 255, 85, 58, 2, 255, 83, 56, 2, 255, 84, 58, 6, 255, 90, 56, 4, 255, 92, 59, 9, 255, 72, 52, 5, 255, 65, 52, 6, 255, 123, 91, 8, 255, 183, 114, 8, 255, 189, 99, 4, 255, 167, 83, 5, 255, 175, 83, 13, 255, 178, 88, 3, 255, 177, 93, 1, 255, 169, 87, 1, 255, 127, 71, 4, 255, 89, 53, 8, 255, 78, 49, 8, 255, 74, 48, 6, 255, 76, 53, 4, 255, 83, 52, 6, 255, 84, 51, 1, 255, 89, 54, 2, 255, 88, 50, 3, 255, 92, 53, 6, 255, 94, 55, 3, 255, 96, 57, 1, 255, 94, 60, 3, 255, 94, 56, 2, 255, 102, 54, 3, 255, 98, 54, 2, 255, 95, 52, 1, 255, 96, 59, 9, 255, 91, 56, 2, 255, 93, 53, 3, 255, 94, 49, 10, 255, 95, 51, 11, 255, 92, 52, 3, 255, 94, 53, 3, 255, 90, 52, 4, 255, 85, 50, 0, 255, 92, 52, 2, 255, 93, 57, 2, 255, 104, 60, 3, 255, 108, 58, 2, 255, 98, 54, 2, 255, 94, 53, 9, 255, 91, 52, 4, 255, 88, 51, 3, 255, 87, 50, 10, 255, 89, 49, 5, 255, 91, 48, 2, 255, 91, 54, 5, 255, 90, 52, 4, 255, 90, 49, 2, 255, 98, 56, 7, 255, 96, 53, 4, 255, 94, 50, 3, 255, 89, 51, 6, 255, 99, 53, 5, 255, 114, 58, 4, 255, 120, 57, 2, 255, 126, 58, 7, 255, 106, 45, 10, 255, 104, 48, 3, 255, 99, 50, 6, 255, 98, 46, 5, 255, 107, 50, 4, 255, 116, 57, 10, 255, 109, 56, 6, 255, 100, 54, 7, 255, 109, 58, 6, 255, 119, 61, 1, 255, 121, 56, 2, 255, 105, 55, 6, 255, 96, 56, 8, 255, 108, 57, 9, 255, 112, 61, 6, 255, 100, 57, 5, 255, 103, 58, 5, 255, 110, 58, 2, 255, 111, 60, 2, 255, 103, 60, 3, 255, 103, 58, 4, 255, 110, 61, 4, 255, 111, 61, 5, 255, 111, 60, 4, 255, 111, 59, 1, 255, 110, 58, 1, 255, 112, 60, 7, 255, 110, 59, 5, 255, 104, 59, 3, 255, 116, 56, 6, 255, 118, 55, 2, 255, 123, 61, 5, 255, 112, 57, 3, 255, 110, 59, 8, 255, 113, 56, 8, 255, 112, 56, 6, 255, 115, 62, 4, 255, 114, 60, 5, 255, 109, 55, 7, 255, 107, 54, 3, 255, 115, 61, 6, 255, 114, 56, 4, 255, 116, 53, 10, 255, 145, 68, 7, 255, 168, 78, 4, 255, 170, 74, 4, 255, 173, 76, 8, 255, 173, 74, 7, 255, 172, 68, 4, 255, 171, 69, 1, 255, 166, 70, 5, 255, 163, 68, 3, 255, 163, 65, 6, 255, 162, 70, 9, 255, 162, 72, 9, 255, 150, 65, 5, 255, 139, 65, 8, 255, 123, 63, 9, 255, 104, 54, 13, 255, 110, 69, 0, 255, 133, 77, 16, 255, 120, 65, 8, 255, 89, 53, 4, 255, 92, 54, 6, 255, 105, 64, 5, 255, 92, 59, 7, 255, 108, 67, 10, 255, 143, 94, 13, 255, 162, 97, 18, 255, 182, 112, 11, 255, 177, 99, 14, 255, 188, 108, 18, 255, 199, 124, 23, 255, 201, 127, 17, 255, 200, 123, 5, 255, 205, 126, 15, 255, 208, 131, 13, 255, 209, 135, 11, 255, 206, 135, 6, 255, 206, 136, 6, 255, 210, 137, 7, 255, 211, 139, 11, 255, 211, 142, 7, 255, 210, 137, 14, 255, 208, 132, 9, 255, 213, 135, 11, 255, 212, 137, 6, 255, 213, 139, 9, 255, 215, 139, 13, 255, 206, 132, 6, 255, 198, 124, 10, 255, 210, 134, 19, 255, 214, 142, 11, 255, 213, 146, 8, 255, 215, 153, 8, 255, 210, 145, 10, 255, 207, 137, 7, 255, 212, 141, 7, 255, 213, 140, 6, 255, 216, 142, 6, 255, 209, 131, 6, 255, 206, 125, 8, 255, 209, 133, 0, 255, 209, 131, 10, 255, 207, 130, 16, 255, 209, 135, 8, 255, 209, 135, 8, 255, 204, 131, 6, 255, 190, 114, 14, 255, 173, 101, 13, 255, 184, 116, 16, 255, 183, 117, 8, 255, 190, 121, 5, 255, 208, 139, 7, 255, 208, 141, 3, 255, 205, 142, 7, 255, 206, 146, 11, 255, 209, 147, 15, 255, 207, 146, 10, 255, 207, 147, 6, 255, 202, 141, 4, 255, 195, 129, 15, 255, 202, 135, 1, 255, 194, 124, 3, 255, 193, 124, 4, 255, 203, 133, 8, 255, 203, 133, 9, 255, 201, 131, 9, 255, 201, 131, 6, 255, 200, 131, 3, 255, 202, 131, 4, 255, 201, 129, 10, 255, 199, 126, 11, 255, 197, 122, 10, 255, 199, 123, 7, 255, 202, 125, 8, 255, 198, 126, 1, 255, 195, 123, 7, 255, 200, 126, 22, 255, 198, 124, 9, 255, 197, 123, 0, 255, 201, 123, 8, 255, 202, 124, 11, 255, 201, 119, 14, 255, 190, 106, 6, 255, 191, 108, 5, 255, 189, 106, 4, 255, 185, 100, 5, 255, 183, 93, 8, 255, 183, 89, 5, 255, 181, 88, 6, 255, 179, 86, 3, 255, 177, 82, 3, 255, 178, 83, 2, 255, 172, 75, 3, 255, 169, 74, 3, 255, 166, 74, 6, 255, 163, 71, 4, 255, 163, 72, 2, 255, 166, 76, 1, 255, 172, 81, 8, 255, 161, 67, 3, 255, 160, 64, 6, 255, 150, 64, 3, 255, 146, 62, 0, 255, 152, 69, 3, 255, 151, 76, 8, 255, 149, 72, 7, 255, 115, 56, 1, 255, 97, 47, 5, 255, 127, 56, 10, 255, 176, 90, 14, 255, 169, 92, 3, 255, 161, 77, 1, 255, 150, 64, 4, 255, 129, 59, 0, 255, 138, 62, 4, 255, 140, 58, 4, 255, 131, 58, 4, 255, 128, 56, 2, 255, 140, 71, 11, 255, 161, 81, 5, 255, 177, 93, 3, 255, 189, 97, 5, 255, 188, 97, 8, 255, 185, 95, 11, 255, 173, 86, 3, 255, 174, 85, 4, 255, 172, 80, 5, 255, 167, 72, 2, 255, 165, 75, 4, 255, 165, 83, 2, 255, 174, 88, 1, 255, 177, 89, 2, 255, 174, 84, 3, 255, 180, 79, 6, 255, 155, 73, 1, 255, 135, 64, 7, 255, 139, 62, 1, 255, 143, 65, 2, 255, 143, 66, 3, 255, 144, 64, 1, 255, 144, 62, 6, 255, 134, 55, 4, 255, 126, 51, 1, 255, 118, 45, 1, 255, 111, 39, 1, 255, 121, 51, 2, 255, 121, 50, 3, 255, 113, 40, 3, 255, 124, 55, 7, 255, 124, 52, 2, 255, 125, 48, 0, 255, 120, 41, 5, 255, 126, 49, 5, 255, 127, 53, 3, 255, 122, 49, 2, 255, 123, 49, 2, 255, 131, 53, 6, 255, 143, 63, 4, 255, 151, 66, 2, 255, 144, 64, 1, 255, 144, 63, 3, 255, 146, 63, 2, 255, 142, 63, 1, 255, 143, 60, 2, 255, 158, 74, 7, 255, 160, 73, 2, 255, 160, 70, 0, 255, 158, 69, 1, 255, 150, 64, 1, 255, 147, 64, 4, 255, 140, 61, 6, 255, 133, 54, 2, 255, 131, 54, 1, 255, 132, 59, 3, 255, 134, 63, 2, 255, 138, 67, 1, 255, 145, 68, 3, 255, 147, 65, 5, 255, 145, 63, 7, 255, 140, 62, 6, 255, 138, 62, 3, 255, 139, 63, 1, 255, 138, 63, 0, 255, 135, 61, 5, 255, 128, 52, 5, 255, 123, 44, 5, 255, 118, 36, 2, 255, 126, 46, 4, 255, 134, 51, 3, 255, 135, 53, 0, 255, 139, 55, 4, 255, 136, 57, 7, 255, 137, 57, 6, 255, 135, 53, 1, 255, 133, 57, 4, 255, 131, 53, 4, 255, 126, 47, 4, 255, 129, 49, 4, 255, 134, 52, 7, 255, 17, 49, 71, 255, 4, 14, 67, 255, 3, 14, 70, 255, 1, 17, 52, 255, 1, 4, 2, 255, 0, 2, 2, 255, 3, 0, 5, 255, 2, 1, 3, 255, 0, 0, 10, 255, 3, 22, 168, 255, 61, 89, 170, 255, 70, 55, 15, 255, 27, 9, 0, 255, 36, 19, 61, 255, 9, 23, 154, 255, 11, 7, 29, 255, 12, 4, 0, 255, 22, 8, 6, 255, 20, 6, 4, 255, 21, 6, 5, 255, 22, 6, 4, 255, 26, 8, 6, 255, 23, 6, 5, 255, 21, 5, 6, 255, 25, 8, 7, 255, 24, 7, 6, 255, 22, 8, 5, 255, 30, 10, 3, 255, 42, 13, 8, 255, 38, 11, 4, 255, 29, 8, 1, 255, 37, 14, 7, 255, 43, 16, 5, 255, 44, 12, 1, 255, 51, 12, 1, 255, 58, 19, 8, 255, 52, 16, 5, 255, 48, 14, 2, 255, 49, 20, 3, 255, 45, 16, 3, 255, 34, 16, 2, 255, 44, 16, 5, 255, 61, 21, 6, 255, 59, 24, 1, 255, 91, 32, 7, 255, 135, 44, 8, 255, 121, 29, 1, 255, 92, 32, 3, 255, 57, 22, 1, 255, 56, 22, 5, 255, 57, 26, 4, 255, 57, 23, 3, 255, 52, 25, 4, 255, 48, 26, 2, 255, 55, 29, 1, 255, 62, 34, 4, 255, 60, 34, 1, 255, 61, 41, 2, 255, 68, 45, 2, 255, 75, 42, 4, 255, 69, 44, 4, 255, 73, 49, 0, 255, 76, 47, 1, 255, 96, 52, 3, 255, 90, 56, 1, 255, 75, 47, 4, 255, 107, 74, 7, 255, 171, 107, 5, 255, 171, 111, 2, 255, 170, 103, 2, 255, 148, 71, 0, 255, 119, 54, 3, 255, 99, 56, 5, 255, 83, 54, 5, 255, 84, 60, 4, 255, 86, 56, 0, 255, 86, 58, 3, 255, 81, 58, 3, 255, 89, 58, 3, 255, 96, 59, 3, 255, 78, 57, 0, 255, 79, 61, 8, 255, 149, 105, 8, 255, 197, 117, 4, 255, 187, 98, 1, 255, 168, 83, 5, 255, 169, 80, 4, 255, 174, 87, 5, 255, 171, 92, 7, 255, 154, 80, 6, 255, 111, 63, 0, 255, 87, 53, 6, 255, 79, 49, 4, 255, 91, 54, 5, 255, 88, 52, 3, 255, 86, 57, 1, 255, 88, 53, 1, 255, 98, 59, 4, 255, 99, 64, 6, 255, 92, 57, 2, 255, 97, 52, 3, 255, 102, 58, 5, 255, 101, 55, 1, 255, 98, 57, 5, 255, 103, 58, 3, 255, 94, 55, 0, 255, 92, 53, 5, 255, 95, 53, 2, 255, 98, 56, 4, 255, 93, 59, 5, 255, 93, 62, 5, 255, 98, 58, 1, 255, 99, 51, 3, 255, 90, 51, 5, 255, 85, 53, 3, 255, 87, 55, 4, 255, 88, 56, 2, 255, 100, 59, 5, 255, 95, 57, 3, 255, 93, 57, 1, 255, 95, 57, 5, 255, 91, 54, 8, 255, 96, 54, 6, 255, 96, 54, 0, 255, 90, 48, 0, 255, 93, 54, 6, 255, 94, 56, 6, 255, 93, 53, 2, 255, 99, 51, 7, 255, 96, 47, 3, 255, 104, 54, 7, 255, 107, 57, 6, 255, 104, 56, 3, 255, 103, 58, 3, 255, 100, 58, 1, 255, 107, 54, 8, 255, 119, 61, 5, 255, 125, 59, 1, 255, 129, 54, 2, 255, 117, 52, 9, 255, 102, 47, 6, 255, 111, 50, 3, 255, 112, 47, 6, 255, 103, 48, 12, 255, 115, 55, 6, 255, 114, 56, 5, 255, 113, 58, 6, 255, 109, 56, 7, 255, 111, 58, 8, 255, 111, 52, 6, 255, 103, 53, 4, 255, 104, 58, 5, 255, 110, 57, 3, 255, 110, 56, 4, 255, 100, 54, 4, 255, 103, 58, 4, 255, 116, 55, 5, 255, 115, 58, 3, 255, 104, 59, 0, 255, 109, 57, 6, 255, 110, 59, 5, 255, 110, 58, 8, 255, 111, 59, 5, 255, 110, 57, 2, 255, 108, 57, 8, 255, 107, 57, 8, 255, 113, 60, 13, 255, 110, 58, 2, 255, 115, 57, 2, 255, 115, 53, 11, 255, 121, 60, 6, 255, 123, 61, 5, 255, 111, 53, 11, 255, 114, 58, 10, 255, 117, 59, 5, 255, 118, 58, 3, 255, 114, 54, 8, 255, 113, 56, 12, 255, 106, 54, 3, 255, 105, 54, 6, 255, 112, 56, 11, 255, 113, 57, 6, 255, 116, 65, 2, 255, 146, 74, 4, 255, 169, 74, 2, 255, 170, 76, 6, 255, 167, 74, 4, 255, 166, 70, 4, 255, 165, 70, 1, 255, 162, 68, 2, 255, 162, 67, 3, 255, 168, 70, 14, 255, 164, 72, 7, 255, 163, 71, 3, 255, 160, 71, 3, 255, 155, 74, 5, 255, 142, 75, 2, 255, 133, 76, 9, 255, 135, 76, 13, 255, 144, 73, 9, 255, 140, 76, 5, 255, 136, 87, 11, 255, 146, 89, 15, 255, 163, 95, 17, 255, 171, 105, 24, 255, 184, 116, 18, 255, 197, 122, 12, 255, 203, 123, 20, 255, 200, 121, 25, 255, 198, 124, 21, 255, 201, 129, 9, 255, 201, 128, 9, 255, 203, 130, 16, 255, 203, 129, 17, 255, 207, 134, 19, 255, 205, 134, 10, 255, 208, 133, 11, 255, 208, 136, 12, 255, 211, 141, 12, 255, 212, 139, 10, 255, 217, 144, 12, 255, 214, 142, 14, 255, 208, 132, 17, 255, 209, 134, 13, 255, 213, 136, 5, 255, 213, 137, 8, 255, 210, 134, 10, 255, 212, 137, 12, 255, 211, 139, 4, 255, 216, 144, 7, 255, 220, 153, 4, 255, 219, 154, 6, 255, 217, 152, 7, 255, 216, 152, 4, 255, 216, 145, 11, 255, 218, 137, 10, 255, 220, 137, 5, 255, 214, 142, 8, 255, 210, 136, 3, 255, 209, 133, 8, 255, 206, 130, 7, 255, 208, 133, 4, 255, 209, 135, 7, 255, 207, 137, 10, 255, 207, 137, 2, 255, 213, 138, 2, 255, 207, 135, 5, 255, 199, 129, 16, 255, 193, 121, 6, 255, 200, 126, 10, 255, 196, 126, 4, 255, 201, 136, 5, 255, 206, 144, 5, 255, 206, 144, 3, 255, 208, 146, 8, 255, 212, 148, 17, 255, 207, 145, 10, 255, 206, 144, 5, 255, 207, 145, 4, 255, 196, 131, 4, 255, 183, 109, 21, 255, 192, 120, 5, 255, 196, 126, 4, 255, 205, 135, 9, 255, 207, 138, 11, 255, 204, 134, 11, 255, 204, 134, 14, 255, 204, 133, 11, 255, 200, 130, 3, 255, 201, 131, 3, 255, 200, 128, 13, 255, 196, 124, 14, 255, 194, 124, 8, 255, 197, 128, 12, 255, 194, 128, 10, 255, 200, 124, 13, 255, 203, 126, 14, 255, 199, 124, 10, 255, 204, 129, 14, 255, 203, 130, 3, 255, 195, 120, 2, 255, 199, 121, 7, 255, 194, 113, 7, 255, 187, 102, 2, 255, 186, 100, 4, 255, 183, 97, 4, 255, 186, 99, 2, 255, 188, 100, 3, 255, 184, 91, 3, 255, 174, 82, 0, 255, 178, 86, 5, 255, 179, 85, 4, 255, 171, 75, 0, 255, 173, 73, 2, 255, 172, 75, 3, 255, 168, 74, 2, 255, 165, 71, 4, 255, 161, 68, 2, 255, 158, 66, 2, 255, 158, 67, 13, 255, 148, 54, 9, 255, 152, 56, 6, 255, 145, 60, 3, 255, 141, 59, 1, 255, 148, 69, 1, 255, 153, 75, 5, 255, 147, 63, 8, 255, 124, 60, 8, 255, 106, 57, 2, 255, 95, 39, 5, 255, 140, 70, 9, 255, 177, 87, 7, 255, 157, 73, 6, 255, 111, 50, 4, 255, 125, 55, 8, 255, 147, 65, 3, 255, 141, 66, 8, 255, 126, 55, 4, 255, 128, 56, 2, 255, 163, 84, 7, 255, 164, 79, 3, 255, 182, 99, 3, 255, 190, 104, 5, 255, 188, 100, 6, 255, 187, 100, 1, 255, 185, 97, 0, 255, 173, 84, 2, 255, 177, 89, 2, 255, 184, 96, 3, 255, 169, 82, 7, 255, 162, 79, 6, 255, 167, 85, 3, 255, 166, 81, 1, 255, 157, 71, 2, 255, 147, 64, 3, 255, 141, 62, 4, 255, 137, 60, 7, 255, 137, 61, 2, 255, 136, 59, 4, 255, 139, 60, 4, 255, 138, 61, 1, 255, 133, 56, 5, 255, 126, 51, 4, 255, 124, 52, 3, 255, 121, 49, 6, 255, 122, 48, 5, 255, 122, 48, 3, 255, 123, 46, 2, 255, 123, 46, 3, 255, 125, 46, 7, 255, 125, 49, 1, 255, 125, 50, 1, 255, 123, 48, 8, 255, 126, 52, 3, 255, 127, 54, 3, 255, 120, 49, 0, 255, 113, 41, 2, 255, 112, 39, 6, 255, 124, 49, 3, 255, 136, 57, 3, 255, 145, 65, 4, 255, 147, 65, 4, 255, 143, 62, 7, 255, 139, 59, 6, 255, 135, 56, 0, 255, 143, 60, 1, 255, 151, 67, 1, 255, 155, 72, 3, 255, 150, 68, 1, 255, 141, 61, 1, 255, 137, 59, 3, 255, 129, 53, 7, 255, 123, 47, 2, 255, 122, 49, 4, 255, 116, 48, 1, 255, 123, 55, 6, 255, 131, 59, 6, 255, 130, 59, 4, 255, 125, 59, 3, 255, 127, 61, 2, 255, 132, 62, 1, 255, 137, 63, 2, 255, 136, 59, 6, 255, 129, 51, 5, 255, 118, 43, 5, 255, 105, 33, 2, 255, 97, 30, 3, 255, 92, 29, 2, 255, 106, 35, 5, 255, 113, 38, 4, 255, 115, 42, 5, 255, 113, 38, 4, 255, 106, 33, 2, 255, 110, 37, 3, 255, 118, 39, 1, 255, 120, 41, 5, 255, 112, 32, 3, 255, 100, 33, 6, 255, 99, 30, 2, 255, 103, 31, 3, 255, 12, 45, 69, 255, 0, 0, 34, 255, 2, 6, 45, 255, 0, 7, 25, 255, 2, 0, 10, 255, 2, 1, 4, 255, 2, 2, 4, 255, 0, 0, 2, 255, 1, 20, 160, 255, 59, 86, 183, 255, 73, 64, 12, 255, 25, 10, 0, 255, 44, 12, 51, 255, 22, 25, 153, 255, 7, 7, 38, 255, 16, 1, 0, 255, 16, 7, 2, 255, 19, 3, 7, 255, 17, 7, 4, 255, 22, 8, 6, 255, 25, 9, 8, 255, 21, 5, 4, 255, 22, 6, 7, 255, 25, 10, 11, 255, 27, 8, 9, 255, 30, 11, 6, 255, 28, 12, 4, 255, 29, 11, 5, 255, 36, 13, 9, 255, 34, 10, 6, 255, 34, 7, 1, 255, 46, 13, 4, 255, 49, 15, 2, 255, 50, 14, 3, 255, 51, 15, 4, 255, 52, 18, 2, 255, 52, 19, 2, 255, 50, 14, 5, 255, 52, 17, 8, 255, 49, 14, 2, 255, 48, 18, 2, 255, 51, 15, 4, 255, 59, 16, 5, 255, 73, 21, 3, 255, 109, 31, 9, 255, 100, 29, 3, 255, 92, 26, 4, 255, 59, 25, 2, 255, 45, 25, 5, 255, 49, 24, 6, 255, 47, 28, 2, 255, 55, 28, 7, 255, 48, 22, 1, 255, 53, 28, 1, 255, 59, 31, 3, 255, 65, 34, 2, 255, 67, 35, 1, 255, 69, 37, 4, 255, 73, 39, 3, 255, 71, 43, 2, 255, 73, 47, 3, 255, 70, 48, 6, 255, 88, 60, 0, 255, 84, 59, 8, 255, 73, 51, 8, 255, 68, 52, 7, 255, 139, 95, 6, 255, 174, 122, 2, 255, 172, 118, 6, 255, 157, 87, 3, 255, 115, 52, 6, 255, 117, 60, 4, 255, 125, 77, 5, 255, 87, 56, 8, 255, 81, 55, 6, 255, 93, 59, 3, 255, 89, 57, 7, 255, 97, 59, 7, 255, 91, 60, 3, 255, 83, 61, 2, 255, 115, 84, 5, 255, 174, 111, 10, 255, 191, 107, 8, 255, 179, 90, 4, 255, 170, 91, 16, 255, 162, 85, 19, 255, 167, 88, 7, 255, 168, 84, 8, 255, 130, 68, 7, 255, 83, 53, 5, 255, 77, 54, 6, 255, 86, 56, 5, 255, 85, 54, 6, 255, 84, 53, 4, 255, 84, 55, 0, 255, 89, 56, 5, 255, 97, 56, 2, 255, 103, 56, 6, 255, 96, 54, 3, 255, 102, 63, 4, 255, 105, 60, 1, 255, 100, 58, 4, 255, 97, 58, 6, 255, 100, 56, 10, 255, 108, 61, 5, 255, 104, 63, 1, 255, 91, 57, 8, 255, 104, 59, 9, 255, 103, 60, 1, 255, 99, 56, 1, 255, 97, 60, 5, 255, 101, 57, 4, 255, 105, 56, 3, 255, 92, 52, 2, 255, 81, 48, 1, 255, 94, 49, 7, 255, 102, 58, 7, 255, 101, 55, 2, 255, 98, 57, 4, 255, 95, 60, 1, 255, 100, 59, 2, 255, 94, 56, 11, 255, 91, 59, 8, 255, 96, 55, 0, 255, 105, 57, 9, 255, 106, 58, 2, 255, 106, 58, 7, 255, 105, 57, 9, 255, 102, 57, 2, 255, 106, 58, 4, 255, 112, 63, 8, 255, 107, 56, 2, 255, 106, 56, 5, 255, 105, 57, 6, 255, 106, 59, 2, 255, 110, 56, 6, 255, 129, 62, 8, 255, 129, 61, 4, 255, 126, 58, 1, 255, 126, 57, 4, 255, 113, 57, 5, 255, 110, 50, 5, 255, 116, 59, 3, 255, 122, 59, 10, 255, 125, 56, 4, 255, 118, 61, 6, 255, 115, 58, 6, 255, 111, 51, 4, 255, 103, 57, 6, 255, 102, 56, 7, 255, 104, 54, 6, 255, 113, 56, 9, 255, 108, 54, 3, 255, 107, 57, 4, 255, 106, 56, 4, 255, 101, 54, 6, 255, 116, 59, 8, 255, 112, 58, 5, 255, 104, 55, 2, 255, 117, 60, 5, 255, 118, 59, 5, 255, 116, 56, 8, 255, 113, 56, 2, 255, 115, 59, 4, 255, 108, 55, 6, 255, 110, 60, 8, 255, 109, 56, 7, 255, 110, 58, 4, 255, 112, 60, 6, 255, 111, 56, 13, 255, 113, 61, 9, 255, 119, 59, 5, 255, 115, 57, 16, 255, 109, 57, 6, 255, 109, 61, 2, 255, 109, 64, 6, 255, 105, 58, 9, 255, 106, 55, 8, 255, 112, 58, 10, 255, 108, 60, 3, 255, 111, 57, 8, 255, 115, 58, 10, 255, 124, 59, 12, 255, 128, 57, 4, 255, 140, 66, 5, 255, 162, 75, 3, 255, 166, 76, 1, 255, 162, 75, 4, 255, 160, 71, 3, 255, 163, 68, 3, 255, 166, 71, 5, 255, 163, 70, 8, 255, 158, 72, 5, 255, 154, 69, 3, 255, 151, 72, 3, 255, 150, 78, 4, 255, 146, 81, 8, 255, 142, 79, 9, 255, 146, 85, 11, 255, 165, 97, 21, 255, 184, 109, 14, 255, 196, 116, 13, 255, 194, 118, 16, 255, 194, 125, 14, 255, 198, 126, 11, 255, 203, 125, 15, 255, 203, 129, 18, 255, 202, 127, 13, 255, 206, 133, 5, 255, 207, 133, 11, 255, 207, 134, 13, 255, 211, 134, 9, 255, 212, 133, 11, 255, 211, 134, 13, 255, 209, 133, 14, 255, 209, 135, 21, 255, 209, 136, 20, 255, 213, 142, 15, 255, 215, 145, 9, 255, 215, 144, 8, 255, 215, 144, 2, 255, 213, 136, 12, 255, 206, 129, 9, 255, 208, 133, 12, 255, 213, 139, 6, 255, 215, 141, 13, 255, 214, 140, 11, 255, 215, 143, 12, 255, 211, 141, 5, 255, 217, 148, 6, 255, 219, 156, 4, 255, 218, 154, 10, 255, 223, 154, 7, 255, 219, 148, 10, 255, 211, 140, 8, 255, 213, 138, 2, 255, 216, 138, 5, 255, 207, 133, 5, 255, 204, 127, 9, 255, 209, 136, 2, 255, 213, 141, 9, 255, 211, 140, 3, 255, 209, 137, 5, 255, 211, 138, 10, 255, 210, 134, 2, 255, 211, 134, 4, 255, 203, 131, 4, 255, 203, 137, 10, 255, 208, 143, 5, 255, 204, 135, 5, 255, 200, 130, 5, 255, 203, 138, 7, 255, 209, 148, 8, 255, 205, 144, 3, 255, 208, 147, 8, 255, 207, 147, 4, 255, 207, 146, 7, 255, 207, 144, 13, 255, 208, 143, 7, 255, 204, 138, 3, 255, 195, 124, 6, 255, 201, 130, 11, 255, 209, 140, 12, 255, 208, 138, 15, 255, 203, 135, 13, 255, 203, 135, 13, 255, 204, 134, 11, 255, 204, 133, 9, 255, 201, 130, 5, 255, 199, 130, 5, 255, 200, 128, 18, 255, 199, 127, 13, 255, 199, 128, 4, 255, 202, 128, 17, 255, 204, 132, 8, 255, 204, 132, 10, 255, 204, 128, 22, 255, 202, 126, 8, 255, 206, 128, 10, 255, 201, 118, 8, 255, 189, 99, 5, 255, 183, 97, 6, 255, 176, 93, 0, 255, 179, 91, 3, 255, 178, 90, 4, 255, 183, 96, 4, 255, 190, 103, 8, 255, 190, 103, 3, 255, 188, 97, 7, 255, 180, 91, 6, 255, 173, 86, 2, 255, 178, 88, 7, 255, 176, 84, 3, 255, 172, 76, 2, 255, 172, 74, 3, 255, 168, 71, 3, 255, 166, 71, 4, 255, 157, 64, 0, 255, 152, 59, 0, 255, 151, 60, 2, 255, 154, 63, 3, 255, 154, 65, 1, 255, 155, 64, 6, 255, 139, 58, 6, 255, 128, 61, 2, 255, 159, 66, 5, 255, 150, 72, 7, 255, 131, 65, 8, 255, 125, 66, 3, 255, 102, 47, 8, 255, 104, 42, 1, 255, 157, 69, 8, 255, 155, 70, 9, 255, 133, 62, 9, 255, 148, 64, 4, 255, 138, 61, 2, 255, 137, 62, 6, 255, 124, 57, 0, 255, 132, 65, 7, 255, 149, 70, 7, 255, 168, 77, 3, 255, 184, 100, 5, 255, 191, 112, 5, 255, 190, 108, 5, 255, 190, 103, 3, 255, 190, 98, 3, 255, 179, 82, 6, 255, 172, 78, 2, 255, 178, 89, 3, 255, 182, 93, 2, 255, 175, 83, 1, 255, 165, 76, 3, 255, 152, 67, 6, 255, 128, 54, 2, 255, 128, 57, 5, 255, 140, 60, 7, 255, 139, 58, 4, 255, 136, 63, 4, 255, 136, 59, 3, 255, 136, 55, 3, 255, 131, 57, 5, 255, 116, 48, 2, 255, 120, 54, 1, 255, 126, 57, 6, 255, 125, 49, 8, 255, 132, 54, 2, 255, 128, 50, 0, 255, 120, 46, 3, 255, 121, 45, 3, 255, 125, 44, 4, 255, 119, 44, 1, 255, 119, 50, 3, 255, 122, 51, 0, 255, 122, 49, 2, 255, 123, 48, 8, 255, 122, 52, 4, 255, 112, 43, 2, 255, 102, 33, 2, 255, 113, 43, 1, 255, 118, 45, 3, 255, 138, 58, 7, 255, 144, 67, 1, 255, 137, 63, 4, 255, 127, 49, 3, 255, 129, 51, 4, 255, 133, 54, 5, 255, 134, 54, 2, 255, 140, 61, 3, 255, 139, 61, 3, 255, 135, 61, 5, 255, 128, 55, 5, 255, 116, 49, 1, 255, 115, 49, 1, 255, 116, 49, 2, 255, 110, 44, 1, 255, 112, 45, 3, 255, 119, 49, 4, 255, 120, 52, 3, 255, 114, 51, 0, 255, 116, 53, 2, 255, 122, 54, 3, 255, 122, 50, 5, 255, 113, 40, 4, 255, 100, 30, 1, 255, 81, 28, 1, 255, 76, 27, 1, 255, 86, 29, 3, 255, 96, 33, 6, 255, 97, 34, 4, 255, 99, 31, 1, 255, 102, 30, 4, 255, 93, 22, 2, 255, 82, 23, 2, 255, 81, 26, 0, 255, 90, 30, 1, 255, 94, 30, 3, 255, 89, 22, 1, 255, 80, 21, 3, 255, 79, 17, 0, 255, 83, 19, 1, 255, 1, 28, 93, 255, 6, 19, 69, 255, 5, 2, 20, 255, 1, 1, 4, 255, 8, 1, 9, 255, 1, 2, 3, 255, 6, 0, 0, 255, 1, 11, 132, 255, 49, 86, 201, 255, 79, 63, 27, 255, 33, 14, 0, 255, 40, 16, 28, 255, 15, 25, 153, 255, 10, 8, 57, 255, 13, 2, 0, 255, 8, 4, 9, 255, 15, 8, 8, 255, 12, 3, 5, 255, 18, 6, 6, 255, 24, 8, 8, 255, 20, 4, 5, 255, 20, 6, 4, 255, 20, 7, 6, 255, 22, 10, 9, 255, 25, 11, 8, 255, 28, 12, 4, 255, 34, 12, 4, 255, 35, 13, 5, 255, 28, 11, 3, 255, 39, 15, 10, 255, 47, 12, 7, 255, 47, 10, 1, 255, 46, 14, 1, 255, 50, 16, 5, 255, 53, 18, 7, 255, 48, 16, 3, 255, 50, 20, 5, 255, 45, 14, 5, 255, 43, 14, 5, 255, 44, 16, 3, 255, 56, 17, 2, 255, 54, 17, 3, 255, 53, 19, 2, 255, 77, 26, 6, 255, 82, 23, 0, 255, 76, 25, 6, 255, 64, 24, 8, 255, 48, 25, 7, 255, 40, 22, 2, 255, 46, 22, 1, 255, 45, 24, 1, 255, 43, 29, 3, 255, 51, 30, 4, 255, 60, 30, 5, 255, 59, 30, 0, 255, 60, 36, 1, 255, 65, 39, 2, 255, 71, 40, 4, 255, 68, 40, 3, 255, 71, 42, 1, 255, 69, 49, 0, 255, 83, 50, 3, 255, 104, 65, 2, 255, 75, 50, 35, 255, 79, 52, 17, 255, 97, 69, 2, 255, 160, 109, 3, 255, 169, 116, 0, 255, 169, 103, 5, 255, 152, 81, 7, 255, 103, 54, 7, 255, 103, 55, 6, 255, 112, 68, 0, 255, 93, 59, 3, 255, 84, 56, 7, 255, 87, 60, 3, 255, 102, 65, 7, 255, 98, 68, 4, 255, 93, 73, 0, 255, 138, 100, 12, 255, 186, 117, 11, 255, 180, 100, 1, 255, 166, 92, 4, 255, 175, 98, 13, 255, 171, 96, 36, 255, 172, 106, 47, 255, 155, 95, 19, 255, 108, 64, 7, 255, 74, 59, 8, 255, 74, 58, 3, 255, 88, 56, 8, 255, 90, 58, 7, 255, 93, 60, 0, 255, 95, 59, 2, 255, 98, 61, 3, 255, 97, 58, 2, 255, 108, 62, 4, 255, 106, 59, 6, 255, 103, 58, 4, 255, 110, 66, 7, 255, 109, 66, 4, 255, 104, 60, 1, 255, 102, 62, 0, 255, 101, 61, 1, 255, 110, 52, 1, 255, 113, 58, 2, 255, 104, 53, 3, 255, 103, 64, 10, 255, 92, 66, 3, 255, 97, 56, 8, 255, 99, 63, 2, 255, 95, 60, 2, 255, 96, 59, 5, 255, 99, 61, 7, 255, 93, 56, 7, 255, 91, 58, 4, 255, 101, 69, 2, 255, 111, 63, 5, 255, 105, 53, 6, 255, 102, 56, 1, 255, 110, 57, 2, 255, 110, 58, 7, 255, 110, 65, 5, 255, 110, 60, 3, 255, 110, 60, 5, 255, 109, 62, 0, 255, 107, 61, 5, 255, 105, 59, 5, 255, 107, 62, 4, 255, 111, 64, 4, 255, 115, 65, 4, 255, 120, 68, 8, 255, 114, 64, 5, 255, 113, 65, 3, 255, 112, 65, 4, 255, 117, 63, 8, 255, 128, 57, 1, 255, 133, 62, 5, 255, 125, 63, 3, 255, 133, 64, 7, 255, 133, 66, 3, 255, 125, 60, 6, 255, 126, 61, 5, 255, 123, 59, 11, 255, 121, 57, 11, 255, 125, 59, 4, 255, 124, 61, 11, 255, 117, 60, 3, 255, 111, 55, 3, 255, 115, 55, 6, 255, 112, 58, 4, 255, 118, 65, 4, 255, 125, 63, 9, 255, 120, 58, 9, 255, 116, 60, 2, 255, 115, 61, 3, 255, 119, 61, 9, 255, 119, 62, 6, 255, 117, 61, 3, 255, 122, 59, 7, 255, 127, 63, 7, 255, 127, 63, 5, 255, 125, 60, 1, 255, 123, 60, 4, 255, 122, 60, 5, 255, 119, 61, 3, 255, 116, 64, 5, 255, 113, 61, 4, 255, 121, 65, 13, 255, 121, 61, 10, 255, 110, 59, 4, 255, 118, 60, 6, 255, 118, 62, 5, 255, 122, 65, 7, 255, 122, 63, 3, 255, 119, 59, 6, 255, 115, 56, 7, 255, 114, 56, 3, 255, 113, 57, 3, 255, 112, 56, 7, 255, 110, 62, 2, 255, 116, 59, 1, 255, 119, 61, 10, 255, 112, 61, 7, 255, 126, 61, 12, 255, 154, 67, 7, 255, 160, 64, 6, 255, 158, 70, 4, 255, 164, 76, 14, 255, 158, 70, 13, 255, 153, 71, 6, 255, 153, 79, 9, 255, 152, 87, 11, 255, 159, 93, 13, 255, 167, 101, 7, 255, 175, 103, 16, 255, 186, 113, 8, 255, 194, 115, 10, 255, 194, 115, 10, 255, 194, 118, 16, 255, 195, 117, 8, 255, 200, 122, 7, 255, 198, 126, 15, 255, 202, 133, 18, 255, 207, 131, 15, 255, 204, 132, 9, 255, 209, 134, 15, 255, 209, 135, 14, 255, 207, 139, 9, 255, 207, 137, 8, 255, 216, 138, 14, 255, 215, 143, 12, 255, 210, 139, 11, 255, 212, 140, 12, 255, 211, 139, 3, 255, 216, 141, 13, 255, 216, 140, 11, 255, 217, 141, 8, 255, 214, 142, 3, 255, 216, 143, 7, 255, 214, 140, 7, 255, 210, 130, 14, 255, 207, 129, 12, 255, 213, 139, 19, 255, 214, 143, 5, 255, 218, 145, 14, 255, 214, 141, 10, 255, 209, 138, 5, 255, 211, 142, 6, 255, 220, 153, 7, 255, 224, 153, 5, 255, 222, 144, 6, 255, 219, 136, 8, 255, 214, 132, 9, 255, 209, 133, 10, 255, 211, 136, 17, 255, 213, 139, 4, 255, 208, 132, 10, 255, 211, 137, 6, 255, 209, 137, 8, 255, 211, 144, 8, 255, 213, 147, 2, 255, 210, 141, 5, 255, 208, 139, 8, 255, 209, 139, 8, 255, 208, 137, 10, 255, 204, 135, 8, 255, 211, 142, 13, 255, 210, 141, 7, 255, 198, 130, 7, 255, 203, 141, 7, 255, 211, 148, 3, 255, 211, 145, 7, 255, 210, 146, 13, 255, 207, 148, 8, 255, 207, 150, 12, 255, 206, 145, 6, 255, 205, 144, 0, 255, 208, 141, 10, 255, 206, 134, 18, 255, 203, 133, 4, 255, 204, 134, 8, 255, 209, 141, 8, 255, 204, 138, 9, 255, 204, 138, 10, 255, 207, 141, 15, 255, 204, 137, 12, 255, 203, 134, 8, 255, 204, 135, 9, 255, 201, 132, 7, 255, 200, 130, 5, 255, 198, 124, 10, 255, 205, 130, 5, 255, 202, 124, 13, 255, 189, 109, 5, 255, 191, 109, 8, 255, 199, 118, 11, 255, 201, 117, 7, 255, 188, 102, 8, 255, 182, 95, 8, 255, 179, 93, 8, 255, 176, 90, 9, 255, 181, 96, 6, 255, 189, 102, 3, 255, 188, 102, 2, 255, 185, 101, 3, 255, 187, 104, 8, 255, 189, 105, 8, 255, 191, 105, 6, 255, 192, 107, 10, 255, 181, 97, 6, 255, 182, 94, 3, 255, 184, 94, 9, 255, 184, 92, 3, 255, 177, 81, 2, 255, 178, 82, 2, 255, 175, 82, 4, 255, 166, 74, 1, 255, 163, 71, 4, 255, 163, 71, 5, 255, 162, 70, 3, 255, 147, 58, 4, 255, 150, 64, 2, 255, 150, 71, 5, 255, 145, 65, 8, 255, 139, 57, 2, 255, 144, 68, 5, 255, 151, 73, 3, 255, 133, 68, 2, 255, 109, 53, 4, 255, 95, 42, 5, 255, 124, 55, 6, 255, 166, 75, 3, 255, 152, 64, 3, 255, 138, 60, 4, 255, 142, 58, 7, 255, 133, 57, 9, 255, 123, 58, 9, 255, 135, 58, 9, 255, 145, 62, 7, 255, 170, 87, 5, 255, 178, 101, 10, 255, 189, 116, 5, 255, 191, 115, 3, 255, 190, 109, 8, 255, 183, 103, 2, 255, 185, 99, 7, 255, 176, 90, 2, 255, 173, 88, 2, 255, 177, 86, 10, 255, 170, 79, 3, 255, 163, 75, 1, 255, 151, 70, 6, 255, 135, 61, 4, 255, 133, 51, 0, 255, 133, 51, 0, 255, 131, 54, 2, 255, 130, 55, 3, 255, 131, 54, 1, 255, 128, 52, 3, 255, 124, 54, 3, 255, 114, 48, 2, 255, 121, 56, 2, 255, 129, 57, 6, 255, 124, 47, 6, 255, 125, 53, 2, 255, 120, 51, 3, 255, 119, 41, 7, 255, 114, 41, 6, 255, 108, 46, 4, 255, 106, 41, 8, 255, 114, 42, 5, 255, 121, 50, 1, 255, 119, 46, 3, 255, 114, 39, 9, 255, 117, 46, 2, 255, 115, 46, 1, 255, 116, 46, 3, 255, 114, 42, 3, 255, 108, 38, 0, 255, 127, 54, 2, 255, 129, 58, 0, 255, 122, 54, 4, 255, 122, 47, 4, 255, 130, 55, 5, 255, 128, 55, 3, 255, 129, 54, 1, 255, 131, 56, 1, 255, 131, 58, 0, 255, 130, 60, 2, 255, 123, 55, 2, 255, 124, 55, 4, 255, 125, 56, 3, 255, 124, 56, 4, 255, 117, 55, 4, 255, 107, 48, 1, 255, 103, 48, 0, 255, 113, 52, 2, 255, 118, 49, 2, 255, 109, 43, 4, 255, 105, 36, 5, 255, 98, 28, 1, 255, 92, 27, 1, 255, 85, 29, 1, 255, 86, 28, 4, 255, 84, 25, 4, 255, 80, 27, 1, 255, 80, 31, 1, 255, 85, 27, 0, 255, 87, 26, 0, 255, 90, 29, 4, 255, 85, 24, 3, 255, 80, 26, 3, 255, 80, 26, 2, 255, 88, 28, 3, 255, 90, 27, 4, 255, 88, 22, 3, 255, 76, 22, 3, 255, 75, 19, 2, 255, 79, 21, 6, 255, 5, 8, 23, 255, 5, 13, 40, 255, 1, 3, 10, 255, 2, 0, 9, 255, 4, 1, 7, 255, 2, 0, 0, 255, 0, 9, 111, 255, 41, 73, 216, 255, 85, 75, 41, 255, 31, 22, 0, 255, 43, 16, 27, 255, 23, 24, 154, 255, 4, 13, 68, 255, 17, 2, 0, 255, 13, 4, 9, 255, 12, 6, 2, 255, 26, 8, 3, 255, 25, 7, 5, 255, 26, 9, 8, 255, 22, 7, 7, 255, 23, 7, 5, 255, 24, 7, 5, 255, 25, 7, 6, 255, 31, 11, 8, 255, 38, 11, 7, 255, 40, 11, 5, 255, 37, 13, 5, 255, 41, 17, 5, 255, 42, 14, 3, 255, 44, 15, 6, 255, 43, 13, 4, 255, 46, 11, 2, 255, 46, 17, 8, 255, 46, 13, 1, 255, 56, 18, 5, 255, 52, 14, 5, 255, 41, 12, 4, 255, 36, 14, 3, 255, 33, 16, 1, 255, 41, 17, 5, 255, 46, 14, 3, 255, 53, 20, 3, 255, 61, 21, 1, 255, 76, 22, 2, 255, 71, 22, 1, 255, 64, 23, 1, 255, 50, 23, 4, 255, 49, 19, 5, 255, 44, 23, 0, 255, 53, 26, 2, 255, 51, 22, 5, 255, 49, 23, 2, 255, 54, 29, 3, 255, 55, 29, 0, 255, 61, 34, 2, 255, 65, 37, 3, 255, 67, 36, 1, 255, 68, 40, 2, 255, 71, 42, 3, 255, 76, 39, 3, 255, 84, 50, 6, 255, 109, 76, 23, 255, 91, 65, 2, 255, 87, 60, 12, 255, 84, 58, 6, 255, 132, 84, 8, 255, 147, 94, 6, 255, 154, 95, 3, 255, 155, 90, 3, 255, 135, 71, 1, 255, 106, 58, 4, 255, 102, 55, 2, 255, 111, 67, 4, 255, 94, 59, 5, 255, 97, 66, 1, 255, 115, 78, 4, 255, 110, 73, 4, 255, 116, 81, 5, 255, 162, 110, 11, 255, 192, 111, 5, 255, 179, 95, 1, 255, 175, 102, 3, 255, 183, 107, 4, 255, 175, 94, 2, 255, 164, 91, 6, 255, 138, 77, 8, 255, 109, 66, 2, 255, 89, 61, 2, 255, 93, 61, 3, 255, 97, 58, 6, 255, 103, 59, 6, 255, 112, 68, 2, 255, 115, 72, 4, 255, 105, 64, 9, 255, 107, 68, 6, 255, 106, 66, 5, 255, 113, 65, 6, 255, 107, 66, 4, 255, 105, 61, 0, 255, 111, 63, 5, 255, 111, 67, 6, 255, 119, 72, 5, 255, 116, 68, 4, 255, 111, 73, 12, 255, 120, 92, 22, 255, 137, 108, 8, 255, 158, 107, 7, 255, 152, 84, 12, 255, 129, 78, 4, 255, 118, 76, 4, 255, 120, 75, 6, 255, 118, 80, 8, 255, 118, 80, 7, 255, 129, 80, 6, 255, 149, 98, 19, 255, 158, 104, 20, 255, 151, 104, 6, 255, 158, 102, 11, 255, 155, 102, 20, 255, 170, 128, 31, 255, 179, 134, 31, 255, 163, 113, 13, 255, 138, 84, 9, 255, 127, 74, 15, 255, 125, 80, 4, 255, 125, 84, 14, 255, 123, 79, 13, 255, 119, 71, 4, 255, 119, 65, 1, 255, 122, 66, 0, 255, 127, 65, 1, 255, 124, 59, 1, 255, 121, 58, 3, 255, 121, 61, 4, 255, 113, 61, 1, 255, 112, 56, 9, 255, 128, 66, 6, 255, 136, 65, 4, 255, 131, 62, 1, 255, 132, 66, 2, 255, 138, 59, 2, 255, 139, 63, 4, 255, 143, 70, 2, 255, 145, 66, 6, 255, 138, 62, 7, 255, 133, 61, 0, 255, 124, 58, 4, 255, 121, 60, 5, 255, 120, 62, 7, 255, 129, 67, 3, 255, 132, 68, 5, 255, 137, 66, 3, 255, 157, 75, 10, 255, 142, 65, 6, 255, 131, 61, 3, 255, 137, 65, 6, 255, 134, 61, 2, 255, 135, 62, 2, 255, 136, 61, 8, 255, 133, 58, 11, 255, 134, 64, 11, 255, 136, 67, 4, 255, 136, 64, 6, 255, 137, 62, 12, 255, 137, 65, 9, 255, 135, 64, 7, 255, 133, 64, 5, 255, 134, 67, 3, 255, 133, 65, 5, 255, 134, 64, 9, 255, 126, 66, 6, 255, 135, 65, 3, 255, 136, 67, 2, 255, 136, 65, 2, 255, 136, 68, 7, 255, 126, 60, 9, 255, 123, 59, 6, 255, 123, 62, 0, 255, 122, 61, 4, 255, 119, 58, 15, 255, 116, 54, 5, 255, 116, 60, 3, 255, 115, 60, 9, 255, 134, 68, 5, 255, 146, 74, 11, 255, 145, 77, 14, 255, 148, 79, 14, 255, 163, 90, 12, 255, 165, 91, 15, 255, 158, 85, 15, 255, 166, 96, 16, 255, 183, 112, 21, 255, 189, 115, 10, 255, 193, 116, 22, 255, 196, 120, 18, 255, 197, 122, 14, 255, 199, 124, 8, 255, 202, 123, 18, 255, 194, 114, 15, 255, 191, 110, 7, 255, 195, 110, 21, 255, 200, 126, 12, 255, 205, 135, 9, 255, 212, 137, 26, 255, 212, 136, 17, 255, 212, 135, 13, 255, 213, 136, 18, 255, 214, 140, 8, 255, 214, 142, 7, 255, 215, 144, 13, 255, 216, 143, 17, 255, 215, 140, 18, 255, 215, 141, 14, 255, 219, 144, 12, 255, 213, 139, 0, 255, 211, 137, 11, 255, 209, 137, 7, 255, 212, 137, 9, 255, 217, 142, 7, 255, 215, 141, 8, 255, 213, 136, 12, 255, 216, 136, 14, 255, 219, 142, 12, 255, 213, 144, 7, 255, 212, 138, 8, 255, 208, 135, 10, 255, 206, 133, 5, 255, 207, 135, 2, 255, 217, 146, 10, 255, 221, 151, 10, 255, 214, 143, 0, 255, 211, 131, 10, 255, 207, 127, 4, 255, 207, 131, 4, 255, 218, 148, 8, 255, 217, 143, 8, 255, 216, 136, 1, 255, 212, 134, 11, 255, 205, 130, 10, 255, 209, 139, 5, 255, 214, 147, 7, 255, 213, 147, 3, 255, 212, 143, 4, 255, 213, 143, 11, 255, 210, 143, 13, 255, 203, 138, 7, 255, 207, 143, 6, 255, 214, 150, 8, 255, 203, 140, 2, 255, 199, 133, 17, 255, 208, 143, 18, 255, 209, 150, 5, 255, 207, 150, 3, 255, 208, 150, 8, 255, 209, 148, 9, 255, 209, 144, 11, 255, 206, 146, 4, 255, 211, 146, 9, 255, 205, 135, 6, 255, 201, 129, 6, 255, 199, 127, 9, 255, 203, 133, 14, 255, 210, 143, 10, 255, 207, 144, 6, 255, 208, 147, 4, 255, 206, 143, 8, 255, 204, 139, 16, 255, 206, 139, 16, 255, 205, 137, 7, 255, 205, 134, 5, 255, 203, 132, 11, 255, 204, 134, 17, 255, 196, 130, 7, 255, 165, 94, 14, 255, 147, 78, 6, 255, 166, 89, 0, 255, 175, 92, 5, 255, 174, 84, 12, 255, 176, 87, 3, 255, 181, 93, 1, 255, 173, 87, 0, 255, 175, 92, 2, 255, 192, 110, 10, 255, 191, 106, 5, 255, 194, 108, 7, 255, 187, 104, 3, 255, 185, 103, 5, 255, 191, 109, 10, 255, 192, 110, 6, 255, 189, 107, 6, 255, 193, 107, 13, 255, 194, 107, 9, 255, 191, 104, 8, 255, 191, 103, 1, 255, 187, 94, 1, 255, 184, 90, 2, 255, 178, 86, 4, 255, 178, 87, 7, 255, 175, 84, 4, 255, 174, 80, 9, 255, 165, 69, 8, 255, 155, 65, 6, 255, 160, 76, 10, 255, 164, 82, 6, 255, 171, 82, 10, 255, 139, 68, 0, 255, 145, 70, 2, 255, 138, 63, 4, 255, 123, 60, 12, 255, 110, 50, 8, 255, 102, 46, 1, 255, 101, 37, 2, 255, 130, 56, 7, 255, 130, 54, 0, 255, 135, 57, 7, 255, 139, 60, 5, 255, 130, 54, 2, 255, 136, 58, 11, 255, 152, 76, 8, 255, 162, 82, 2, 255, 168, 80, 4, 255, 176, 89, 8, 255, 186, 99, 4, 255, 189, 97, 4, 255, 187, 96, 1, 255, 184, 101, 1, 255, 185, 104, 3, 255, 189, 106, 3, 255, 192, 101, 5, 255, 180, 89, 3, 255, 177, 89, 1, 255, 184, 99, 3, 255, 180, 93, 1, 255, 173, 83, 3, 255, 151, 68, 5, 255, 128, 51, 2, 255, 125, 49, 3, 255, 125, 46, 5, 255, 115, 40, 2, 255, 119, 47, 6, 255, 124, 55, 1, 255, 122, 51, 7, 255, 123, 49, 5, 255, 124, 48, 1, 255, 120, 46, 6, 255, 121, 51, 3, 255, 121, 51, 5, 255, 111, 44, 5, 255, 116, 52, 6, 255, 112, 45, 3, 255, 108, 39, 1, 255, 116, 46, 4, 255, 118, 48, 1, 255, 120, 48, 2, 255, 111, 36, 7, 255, 111, 40, 2, 255, 110, 38, 3, 255, 119, 44, 4, 255, 116, 42, 4, 255, 114, 46, 2, 255, 122, 51, 5, 255, 108, 42, 5, 255, 107, 47, 4, 255, 123, 52, 3, 255, 123, 49, 2, 255, 123, 53, 1, 255, 127, 55, 5, 255, 126, 54, 2, 255, 128, 57, 2, 255, 124, 54, 1, 255, 117, 50, 2, 255, 120, 52, 2, 255, 123, 54, 2, 255, 127, 55, 2, 255, 128, 59, 6, 255, 121, 53, 3, 255, 120, 52, 3, 255, 116, 48, 2, 255, 109, 43, 2, 255, 103, 39, 3, 255, 102, 34, 2, 255, 99, 30, 0, 255, 95, 33, 1, 255, 89, 36, 3, 255, 91, 29, 1, 255, 90, 28, 3, 255, 85, 25, 4, 255, 80, 24, 3, 255, 82, 28, 4, 255, 82, 28, 4, 255, 77, 23, 2, 255, 78, 22, 1, 255, 78, 24, 1, 255, 79, 23, 3, 255, 80, 20, 3, 255, 78, 25, 3, 255, 76, 23, 1, 255, 77, 22, 2, 255, 79, 24, 4, 255, 75, 20, 2, 255, 4, 0, 7, 255, 3, 0, 3, 255, 0, 0, 10, 255, 4, 0, 11, 255, 3, 0, 0, 255, 0, 6, 100, 255, 34, 66, 233, 255, 74, 80, 51, 255, 38, 25, 0, 255, 33, 16, 19, 255, 29, 26, 139, 255, 4, 14, 85, 255, 12, 1, 0, 255, 14, 4, 5, 255, 15, 3, 3, 255, 21, 4, 4, 255, 26, 6, 6, 255, 29, 8, 9, 255, 24, 6, 6, 255, 21, 5, 5, 255, 26, 7, 5, 255, 30, 6, 2, 255, 42, 14, 8, 255, 39, 12, 5, 255, 35, 10, 5, 255, 32, 9, 7, 255, 34, 9, 7, 255, 44, 14, 7, 255, 42, 13, 6, 255, 33, 12, 5, 255, 40, 12, 5, 255, 49, 13, 4, 255, 42, 14, 5, 255, 44, 12, 3, 255, 38, 15, 2, 255, 41, 17, 6, 255, 42, 13, 5, 255, 41, 14, 3, 255, 37, 14, 3, 255, 41, 15, 4, 255, 47, 18, 3, 255, 52, 20, 2, 255, 62, 19, 3, 255, 70, 20, 4, 255, 69, 21, 5, 255, 50, 24, 2, 255, 45, 22, 1, 255, 54, 22, 4, 255, 43, 27, 0, 255, 50, 27, 1, 255, 57, 30, 5, 255, 60, 31, 5, 255, 58, 26, 1, 255, 60, 29, 2, 255, 63, 34, 1, 255, 71, 32, 4, 255, 75, 38, 4, 255, 66, 38, 4, 255, 73, 42, 4, 255, 73, 39, 2, 255, 104, 73, 11, 255, 109, 72, 13, 255, 87, 60, 3, 255, 85, 58, 1, 255, 90, 57, 11, 255, 141, 91, 4, 255, 144, 86, 2, 255, 138, 78, 4, 255, 143, 82, 3, 255, 141, 76, 3, 255, 137, 65, 5, 255, 120, 61, 2, 255, 113, 63, 3, 255, 102, 64, 6, 255, 123, 79, 3, 255, 108, 77, 5, 255, 134, 91, 7, 255, 179, 114, 10, 255, 188, 111, 7, 255, 174, 101, 9, 255, 179, 92, 2, 255, 179, 99, 3, 255, 170, 92, 5, 255, 138, 74, 4, 255, 106, 63, 5, 255, 107, 61, 12, 255, 90, 52, 16, 255, 107, 72, 5, 255, 104, 59, 8, 255, 92, 54, 8, 255, 111, 66, 3, 255, 111, 66, 2, 255, 95, 60, 8, 255, 104, 65, 7, 255, 105, 61, 2, 255, 96, 60, 7, 255, 95, 59, 8, 255, 104, 66, 5, 255, 105, 69, 3, 255, 103, 66, 3, 255, 99, 61, 6, 255, 107, 65, 6, 255, 121, 71, 6, 255, 116, 69, 6, 255, 119, 84, 12, 255, 148, 100, 12, 255, 164, 95, 6, 255, 149, 78, 10, 255, 123, 76, 2, 255, 118, 72, 2, 255, 114, 67, 3, 255, 121, 77, 11, 255, 135, 81, 8, 255, 150, 83, 15, 255, 157, 90, 12, 255, 151, 83, 9, 255, 143, 83, 3, 255, 161, 93, 4, 255, 170, 100, 9, 255, 195, 126, 26, 255, 224, 172, 23, 255, 237, 212, 15, 255, 236, 204, 11, 255, 232, 180, 22, 255, 227, 170, 27, 255, 216, 161, 23, 255, 213, 166, 55, 255, 222, 191, 104, 255, 226, 216, 164, 255, 227, 222, 188, 255, 228, 221, 183, 255, 228, 214, 164, 255, 225, 198, 86, 255, 217, 176, 17, 255, 196, 161, 16, 255, 181, 142, 20, 255, 190, 119, 17, 255, 182, 110, 18, 255, 179, 110, 14, 255, 165, 109, 11, 255, 165, 96, 15, 255, 170, 95, 22, 255, 165, 93, 17, 255, 158, 82, 22, 255, 153, 82, 27, 255, 152, 82, 26, 255, 157, 80, 23, 255, 159, 79, 12, 255, 157, 77, 15, 255, 153, 74, 9, 255, 147, 75, 9, 255, 141, 70, 8, 255, 140, 65, 5, 255, 147, 71, 5, 255, 140, 69, 3, 255, 135, 65, 10, 255, 135, 64, 2, 255, 134, 64, 3, 255, 135, 62, 13, 255, 134, 62, 8, 255, 129, 61, 3, 255, 132, 57, 2, 255, 139, 63, 9, 255, 137, 65, 7, 255, 132, 67, 3, 255, 142, 65, 8, 255, 140, 64, 7, 255, 137, 66, 9, 255, 139, 68, 4, 255, 141, 66, 2, 255, 137, 66, 3, 255, 133, 62, 12, 255, 142, 67, 12, 255, 147, 66, 5, 255, 139, 66, 9, 255, 125, 57, 7, 255, 131, 62, 14, 255, 138, 69, 9, 255, 134, 66, 3, 255, 128, 66, 4, 255, 128, 61, 10, 255, 131, 66, 14, 255, 140, 81, 10, 255, 160, 92, 9, 255, 170, 99, 15, 255, 175, 102, 24, 255, 181, 103, 11, 255, 188, 113, 2, 255, 191, 113, 13, 255, 193, 115, 17, 255, 200, 123, 16, 255, 202, 123, 17, 255, 201, 123, 19, 255, 203, 123, 18, 255, 203, 122, 18, 255, 203, 124, 9, 255, 204, 124, 9, 255, 200, 122, 10, 255, 186, 106, 12, 255, 178, 99, 8, 255, 185, 106, 21, 255, 205, 132, 15, 255, 212, 143, 6, 255, 215, 146, 9, 255, 215, 145, 19, 255, 212, 144, 10, 255, 213, 143, 17, 255, 217, 145, 20, 255, 220, 145, 11, 255, 221, 147, 10, 255, 213, 145, 12, 255, 216, 143, 16, 255, 219, 147, 14, 255, 219, 144, 1, 255, 214, 138, 4, 255, 204, 134, 15, 255, 208, 140, 14, 255, 213, 146, 10, 255, 212, 147, 8, 255, 218, 143, 9, 255, 211, 131, 3, 255, 204, 125, 11, 255, 203, 132, 6, 255, 200, 134, 4, 255, 210, 139, 13, 255, 218, 146, 2, 255, 211, 142, 2, 255, 209, 140, 9, 255, 217, 146, 6, 255, 221, 152, 5, 255, 215, 148, 2, 255, 210, 141, 4, 255, 206, 138, 5, 255, 216, 147, 10, 255, 225, 154, 11, 255, 216, 144, 3, 255, 213, 139, 1, 255, 214, 139, 3, 255, 211, 142, 3, 255, 216, 151, 5, 255, 215, 149, 5, 255, 215, 148, 7, 255, 211, 144, 3, 255, 212, 146, 6, 255, 209, 147, 4, 255, 210, 149, 7, 255, 212, 154, 12, 255, 213, 153, 8, 255, 206, 141, 1, 255, 204, 137, 4, 255, 208, 144, 3, 255, 211, 152, 8, 255, 209, 153, 8, 255, 207, 153, 0, 255, 205, 147, 3, 255, 204, 141, 7, 255, 211, 148, 3, 255, 204, 142, 9, 255, 194, 130, 6, 255, 194, 126, 0, 255, 196, 123, 8, 255, 206, 139, 10, 255, 209, 147, 9, 255, 210, 149, 6, 255, 209, 147, 7, 255, 205, 144, 6, 255, 206, 144, 8, 255, 207, 142, 15, 255, 203, 140, 6, 255, 204, 137, 8, 255, 205, 134, 19, 255, 207, 139, 14, 255, 199, 130, 8, 255, 181, 106, 8, 255, 177, 101, 7, 255, 178, 99, 5, 255, 183, 103, 5, 255, 188, 109, 5, 255, 183, 103, 7, 255, 172, 88, 2, 255, 171, 83, 6, 255, 175, 84, 15, 255, 186, 95, 6, 255, 184, 99, 1, 255, 192, 110, 6, 255, 192, 111, 6, 255, 194, 112, 10, 255, 196, 112, 5, 255, 193, 112, 4, 255, 188, 106, 4, 255, 194, 108, 9, 255, 195, 108, 9, 255, 186, 96, 10, 255, 178, 84, 7, 255, 177, 85, 3, 255, 184, 93, 3, 255, 182, 90, 2, 255, 175, 84, 4, 255, 163, 70, 3, 255, 158, 62, 3, 255, 168, 70, 8, 255, 176, 82, 6, 255, 164, 76, 11, 255, 150, 62, 4, 255, 162, 71, 5, 255, 152, 68, 2, 255, 152, 77, 6, 255, 129, 61, 9, 255, 131, 62, 11, 255, 123, 54, 2, 255, 109, 50, 0, 255, 104, 48, 8, 255, 109, 47, 4, 255, 139, 65, 6, 255, 148, 66, 0, 255, 139, 64, 4, 255, 130, 53, 5, 255, 138, 60, 4, 255, 152, 73, 9, 255, 149, 67, 5, 255, 138, 57, 8, 255, 151, 68, 0, 255, 165, 79, 4, 255, 164, 74, 4, 255, 173, 85, 1, 255, 175, 82, 5, 255, 172, 81, 3, 255, 175, 86, 1, 255, 181, 91, 2, 255, 179, 89, 0, 255, 183, 91, 0, 255, 188, 94, 4, 255, 185, 90, 2, 255, 174, 85, 2, 255, 155, 77, 4, 255, 132, 59, 2, 255, 123, 48, 1, 255, 123, 47, 5, 255, 115, 42, 3, 255, 121, 48, 2, 255, 125, 49, 1, 255, 130, 52, 6, 255, 126, 50, 3, 255, 121, 48, 0, 255, 122, 49, 3, 255, 120, 46, 1, 255, 118, 45, 1, 255, 116, 45, 4, 255, 116, 45, 5, 255, 121, 47, 6, 255, 123, 47, 5, 255, 121, 45, 2, 255, 116, 43, 4, 255, 120, 46, 3, 255, 116, 42, 1, 255, 113, 41, 4, 255, 109, 38, 3, 255, 117, 42, 8, 255, 118, 44, 7, 255, 107, 33, 3, 255, 108, 35, 3, 255, 119, 49, 4, 255, 121, 53, 0, 255, 124, 52, 1, 255, 128, 54, 2, 255, 130, 56, 6, 255, 130, 57, 4, 255, 124, 53, 0, 255, 117, 51, 1, 255, 121, 53, 2, 255, 127, 56, 4, 255, 128, 57, 1, 255, 137, 66, 2, 255, 140, 63, 1, 255, 132, 54, 2, 255, 130, 56, 10, 255, 124, 57, 3, 255, 119, 54, 5, 255, 104, 38, 4, 255, 99, 33, 3, 255, 100, 35, 6, 255, 94, 35, 3, 255, 94, 33, 2, 255, 98, 35, 4, 255, 92, 30, 3, 255, 86, 27, 2, 255, 84, 27, 4, 255, 81, 23, 3, 255, 79, 23, 4, 255, 81, 22, 3, 255, 78, 25, 4, 255, 66, 21, 1, 255, 69, 21, 1, 255, 78, 21, 4, 255, 77, 18, 3, 255, 73, 23, 3, 255, 69, 20, 0, 255, 70, 19, 2, 255, 79, 25, 6, 255, 76, 23, 2, 255, 2, 0, 9, 255, 4, 1, 18, 255, 0, 4, 13, 255, 2, 2, 0, 255, 0, 4, 90, 255, 27, 65, 231, 255, 82, 82, 66, 255, 39, 25, 0, 255, 36, 13, 7, 255, 29, 22, 126, 255, 0, 15, 93, 255, 15, 2, 0, 255, 17, 3, 7, 255, 12, 2, 1, 255, 16, 4, 3, 255, 25, 8, 8, 255, 26, 8, 7, 255, 29, 11, 10, 255, 25, 7, 7, 255, 21, 7, 6, 255, 26, 11, 9, 255, 31, 11, 7, 255, 35, 11, 5, 255, 33, 10, 5, 255, 30, 11, 5, 255, 32, 11, 8, 255, 34, 12, 8, 255, 38, 13, 3, 255, 37, 12, 3, 255, 30, 10, 5, 255, 36, 8, 1, 255, 44, 14, 3, 255, 41, 15, 5, 255, 46, 18, 7, 255, 36, 15, 3, 255, 38, 14, 3, 255, 42, 14, 6, 255, 45, 17, 6, 255, 43, 11, 4, 255, 42, 15, 5, 255, 46, 18, 3, 255, 53, 19, 1, 255, 56, 25, 5, 255, 54, 22, 1, 255, 56, 18, 0, 255, 52, 22, 1, 255, 53, 24, 3, 255, 45, 25, 2, 255, 39, 26, 0, 255, 47, 26, 3, 255, 54, 29, 4, 255, 57, 25, 1, 255, 68, 32, 2, 255, 64, 30, 6, 255, 67, 36, 3, 255, 64, 36, 2, 255, 58, 37, 5, 255, 62, 40, 4, 255, 70, 38, 3, 255, 91, 54, 1, 255, 92, 64, 3, 255, 81, 58, 3, 255, 84, 56, 2, 255, 78, 46, 3, 255, 112, 75, 4, 255, 167, 106, 5, 255, 164, 103, 2, 255, 158, 94, 6, 255, 166, 92, 3, 255, 160, 90, 6, 255, 144, 75, 5, 255, 123, 64, 2, 255, 122, 73, 7, 255, 123, 77, 2, 255, 101, 77, 3, 255, 148, 104, 11, 255, 178, 119, 1, 255, 172, 100, 2, 255, 170, 98, 4, 255, 157, 94, 8, 255, 154, 88, 7, 255, 164, 99, 9, 255, 139, 76, 5, 255, 110, 68, 3, 255, 119, 76, 8, 255, 99, 67, 7, 255, 119, 75, 11, 255, 113, 61, 8, 255, 92, 54, 4, 255, 126, 81, 7, 255, 108, 65, 7, 255, 90, 56, 9, 255, 122, 74, 12, 255, 123, 72, 6, 255, 96, 58, 0, 255, 99, 59, 10, 255, 137, 81, 10, 255, 143, 81, 8, 255, 102, 63, 7, 255, 124, 64, 10, 255, 128, 72, 8, 255, 141, 86, 13, 255, 155, 82, 10, 255, 127, 59, 19, 255, 144, 72, 12, 255, 141, 74, 2, 255, 134, 71, 12, 255, 126, 72, 12, 255, 119, 70, 7, 255, 116, 74, 16, 255, 125, 82, 9, 255, 151, 93, 13, 255, 160, 92, 6, 255, 156, 91, 4, 255, 154, 89, 11, 255, 160, 92, 4, 255, 158, 87, 0, 255, 145, 81, 7, 255, 135, 69, 10, 255, 127, 65, 2, 255, 126, 60, 2, 255, 152, 62, 9, 255, 161, 73, 3, 255, 155, 81, 2, 255, 151, 73, 4, 255, 137, 60, 3, 255, 144, 69, 1, 255, 186, 103, 7, 255, 203, 129, 24, 255, 208, 143, 51, 255, 224, 166, 61, 255, 229, 175, 68, 255, 228, 172, 34, 255, 230, 174, 3, 255, 231, 168, 12, 255, 230, 164, 16, 255, 192, 112, 9, 255, 187, 109, 15, 255, 228, 143, 7, 255, 240, 164, 22, 255, 233, 174, 23, 255, 235, 179, 36, 255, 238, 195, 60, 255, 232, 208, 125, 255, 233, 222, 151, 255, 244, 228, 146, 255, 251, 231, 126, 255, 250, 225, 41, 255, 246, 208, 0, 255, 237, 174, 21, 255, 216, 140, 18, 255, 195, 120, 4, 255, 172, 93, 10, 255, 181, 102, 14, 255, 180, 94, 0, 255, 168, 80, 2, 255, 147, 69, 3, 255, 145, 67, 10, 255, 146, 74, 6, 255, 146, 72, 3, 255, 144, 71, 12, 255, 143, 68, 9, 255, 137, 64, 1, 255, 137, 67, 3, 255, 141, 70, 4, 255, 146, 65, 6, 255, 138, 63, 8, 255, 128, 64, 10, 255, 135, 67, 9, 255, 143, 67, 2, 255, 145, 72, 9, 255, 136, 73, 8, 255, 137, 73, 6, 255, 144, 64, 12, 255, 134, 63, 9, 255, 131, 63, 6, 255, 148, 79, 12, 255, 155, 86, 13, 255, 149, 78, 12, 255, 146, 82, 12, 255, 156, 93, 11, 255, 170, 99, 18, 255, 183, 103, 19, 255, 185, 104, 11, 255, 192, 109, 15, 255, 190, 107, 16, 255, 193, 113, 11, 255, 196, 116, 10, 255, 203, 123, 22, 255, 202, 124, 14, 255, 202, 125, 7, 255, 203, 125, 14, 255, 205, 124, 19, 255, 208, 127, 15, 255, 209, 131, 17, 255, 206, 134, 12, 255, 205, 133, 11, 255, 211, 127, 15, 255, 213, 133, 15, 255, 214, 142, 12, 255, 215, 145, 13, 255, 207, 134, 11, 255, 208, 132, 13, 255, 218, 147, 17, 255, 219, 148, 16, 255, 219, 143, 16, 255, 217, 150, 5, 255, 218, 149, 20, 255, 219, 147, 16, 255, 220, 147, 6, 255, 219, 145, 7, 255, 222, 145, 11, 255, 219, 146, 15, 255, 214, 141, 6, 255, 208, 134, 2, 255, 205, 137, 10, 255, 219, 149, 12, 255, 224, 147, 14, 255, 215, 141, 6, 255, 207, 130, 4, 255, 196, 118, 5, 255, 202, 129, 8, 255, 208, 139, 10, 255, 208, 140, 5, 255, 211, 147, 7, 255, 210, 143, 9, 255, 216, 144, 8, 255, 212, 143, 5, 255, 217, 156, 11, 255, 228, 164, 11, 255, 224, 155, 13, 255, 215, 147, 6, 255, 211, 144, 5, 255, 221, 151, 8, 255, 225, 155, 8, 255, 219, 148, 12, 255, 218, 150, 5, 255, 220, 154, 10, 255, 214, 152, 5, 255, 216, 156, 5, 255, 215, 154, 4, 255, 217, 153, 4, 255, 214, 149, 1, 255, 214, 149, 7, 255, 211, 148, 5, 255, 205, 144, 7, 255, 211, 153, 9, 255, 211, 152, 4, 255, 207, 145, 2, 255, 208, 142, 10, 255, 210, 148, 5, 255, 211, 153, 3, 255, 210, 154, 10, 255, 208, 150, 11, 255, 203, 146, 2, 255, 206, 146, 6, 255, 206, 145, 9, 255, 194, 134, 4, 255, 196, 130, 14, 255, 197, 125, 7, 255, 206, 131, 10, 255, 208, 140, 14, 255, 211, 151, 9, 255, 210, 152, 3, 255, 211, 150, 5, 255, 210, 149, 5, 255, 205, 143, 5, 255, 202, 137, 13, 255, 203, 138, 14, 255, 204, 140, 11, 255, 204, 137, 11, 255, 209, 143, 10, 255, 195, 124, 7, 255, 190, 114, 16, 255, 194, 119, 11, 255, 188, 111, 6, 255, 193, 117, 7, 255, 195, 120, 1, 255, 192, 114, 10, 255, 189, 108, 11, 255, 185, 103, 5, 255, 188, 101, 7, 255, 192, 103, 7, 255, 192, 104, 15, 255, 196, 113, 10, 255, 196, 116, 4, 255, 191, 111, 6, 255, 192, 110, 11, 255, 191, 109, 9, 255, 191, 107, 12, 255, 188, 101, 9, 255, 176, 86, 3, 255, 175, 81, 0, 255, 178, 81, 2, 255, 171, 75, 2, 255, 170, 74, 4, 255, 169, 71, 7, 255, 164, 70, 7, 255, 161, 70, 7, 255, 162, 72, 6, 255, 168, 77, 11, 255, 164, 71, 2, 255, 150, 66, 1, 255, 136, 58, 0, 255, 135, 58, 2, 255, 135, 55, 7, 255, 136, 60, 7, 255, 134, 64, 9, 255, 133, 64, 4, 255, 132, 61, 6, 255, 130, 62, 6, 255, 122, 57, 8, 255, 105, 46, 2, 255, 143, 71, 10, 255, 155, 68, 5, 255, 134, 58, 2, 255, 124, 46, 6, 255, 148, 67, 9, 255, 152, 75, 12, 255, 139, 69, 10, 255, 134, 65, 1, 255, 153, 76, 2, 255, 155, 69, 4, 255, 144, 54, 6, 255, 150, 65, 8, 255, 154, 74, 3, 255, 167, 82, 4, 255, 168, 81, 5, 255, 173, 86, 11, 255, 175, 89, 5, 255, 180, 93, 0, 255, 183, 95, 1, 255, 178, 86, 0, 255, 172, 78, 2, 255, 157, 70, 3, 255, 149, 68, 3, 255, 148, 67, 0, 255, 144, 63, 1, 255, 140, 61, 9, 255, 131, 51, 10, 255, 130, 52, 5, 255, 131, 54, 2, 255, 129, 52, 2, 255, 125, 48, 6, 255, 125, 47, 6, 255, 121, 45, 4, 255, 117, 45, 2, 255, 119, 43, 0, 255, 117, 40, 2, 255, 121, 43, 9, 255, 116, 40, 4, 255, 118, 46, 2, 255, 113, 41, 2, 255, 111, 36, 2, 255, 118, 46, 6, 255, 112, 43, 1, 255, 109, 41, 1, 255, 120, 50, 1, 255, 113, 46, 0, 255, 109, 40, 6, 255, 124, 51, 9, 255, 123, 49, 3, 255, 124, 51, 3, 255, 126, 54, 7, 255, 136, 64, 4, 255, 147, 66, 0, 255, 150, 67, 4, 255, 147, 63, 5, 255, 147, 64, 5, 255, 158, 74, 5, 255, 163, 80, 1, 255, 171, 82, 5, 255, 168, 80, 1, 255, 159, 71, 2, 255, 141, 57, 2, 255, 133, 57, 0, 255, 129, 54, 0, 255, 125, 51, 4, 255, 117, 45, 2, 255, 106, 35, 1, 255, 94, 30, 1, 255, 90, 33, 3, 255, 87, 31, 1, 255, 90, 32, 2, 255, 86, 32, 4, 255, 78, 26, 0, 255, 75, 25, 1, 255, 72, 24, 1, 255, 71, 24, 2, 255, 70, 23, 1, 255, 74, 26, 3, 255, 70, 23, 2, 255, 61, 20, 2, 255, 69, 22, 4, 255, 63, 21, 3, 255, 55, 24, 2, 255, 70, 20, 3, 255, 70, 20, 3, 255, 75, 21, 5, 255, 75, 22, 1, 255, 1, 2, 13, 255, 1, 1, 25, 255, 5, 5, 5, 255, 0, 2, 66, 255, 17, 66, 228, 255, 82, 87, 72, 255, 54, 36, 0, 255, 46, 16, 3, 255, 34, 29, 123, 255, 6, 19, 117, 255, 8, 4, 1, 255, 11, 3, 3, 255, 14, 0, 3, 255, 17, 3, 2, 255, 22, 6, 6, 255, 23, 5, 3, 255, 26, 8, 6, 255, 22, 5, 3, 255, 21, 7, 4, 255, 23, 11, 9, 255, 22, 8, 8, 255, 32, 14, 12, 255, 32, 12, 8, 255, 30, 11, 6, 255, 28, 10, 3, 255, 31, 9, 3, 255, 35, 12, 4, 255, 35, 14, 4, 255, 34, 11, 2, 255, 34, 10, 3, 255, 44, 14, 6, 255, 42, 13, 2, 255, 47, 12, 5, 255, 45, 17, 5, 255, 39, 15, 4, 255, 41, 13, 6, 255, 34, 13, 4, 255, 35, 15, 4, 255, 42, 16, 3, 255, 46, 19, 3, 255, 48, 19, 0, 255, 54, 20, 3, 255, 62, 23, 7, 255, 60, 18, 5, 255, 56, 17, 3, 255, 52, 21, 2, 255, 52, 21, 2, 255, 43, 23, 2, 255, 45, 24, 1, 255, 52, 26, 3, 255, 57, 26, 5, 255, 51, 32, 2, 255, 58, 34, 4, 255, 57, 31, 2, 255, 66, 36, 4, 255, 59, 37, 3, 255, 57, 37, 8, 255, 68, 37, 0, 255, 86, 51, 5, 255, 92, 59, 4, 255, 72, 48, 5, 255, 75, 53, 1, 255, 75, 53, 3, 255, 76, 44, 5, 255, 95, 59, 6, 255, 135, 87, 8, 255, 157, 99, 4, 255, 160, 95, 5, 255, 165, 99, 7, 255, 174, 97, 9, 255, 151, 84, 5, 255, 129, 68, 5, 255, 121, 79, 10, 255, 121, 83, 6, 255, 150, 110, 2, 255, 184, 113, 6, 255, 178, 102, 17, 255, 179, 106, 17, 255, 182, 109, 26, 255, 192, 122, 29, 255, 192, 123, 18, 255, 185, 105, 19, 255, 180, 101, 23, 255, 185, 104, 30, 255, 182, 105, 20, 255, 173, 103, 12, 255, 173, 105, 8, 255, 165, 91, 20, 255, 167, 93, 15, 255, 174, 97, 18, 255, 162, 85, 11, 255, 165, 98, 6, 255, 171, 104, 5, 255, 171, 98, 15, 255, 171, 96, 17, 255, 174, 98, 12, 255, 174, 101, 11, 255, 178, 98, 14, 255, 174, 89, 10, 255, 167, 81, 12, 255, 170, 88, 14, 255, 177, 98, 17, 255, 177, 100, 15, 255, 178, 104, 11, 255, 184, 111, 16, 255, 188, 107, 5, 255, 192, 111, 8, 255, 189, 114, 21, 255, 199, 116, 16, 255, 202, 123, 16, 255, 197, 120, 21, 255, 194, 122, 9, 255, 196, 121, 13, 255, 189, 111, 12, 255, 195, 117, 19, 255, 202, 123, 15, 255, 200, 115, 11, 255, 185, 106, 10, 255, 186, 107, 11, 255, 195, 116, 6, 255, 186, 115, 8, 255, 185, 112, 15, 255, 178, 105, 11, 255, 169, 99, 4, 255, 164, 84, 6, 255, 164, 85, 11, 255, 158, 85, 6, 255, 151, 70, 12, 255, 137, 65, 4, 255, 135, 62, 2, 255, 146, 64, 1, 255, 145, 61, 3, 255, 142, 57, 0, 255, 136, 53, 9, 255, 132, 49, 12, 255, 124, 47, 9, 255, 125, 60, 8, 255, 133, 58, 1, 255, 124, 49, 4, 255, 144, 63, 6, 255, 178, 88, 2, 255, 184, 92, 3, 255, 187, 99, 1, 255, 195, 105, 0, 255, 198, 108, 2, 255, 203, 115, 2, 255, 210, 114, 4, 255, 210, 114, 9, 255, 205, 114, 1, 255, 201, 111, 6, 255, 198, 105, 4, 255, 209, 114, 1, 255, 206, 107, 3, 255, 203, 108, 12, 255, 193, 106, 6, 255, 202, 109, 9, 255, 189, 90, 11, 255, 178, 88, 8, 255, 172, 85, 5, 255, 177, 78, 6, 255, 174, 83, 4, 255, 162, 80, 6, 255, 147, 73, 2, 255, 146, 77, 4, 255, 155, 80, 3, 255, 150, 76, 3, 255, 169, 82, 8, 255, 176, 86, 8, 255, 174, 83, 5, 255, 161, 77, 5, 255, 141, 71, 16, 255, 134, 71, 7, 255, 146, 74, 3, 255, 138, 68, 6, 255, 135, 66, 13, 255, 148, 80, 11, 255, 172, 102, 9, 255, 177, 99, 12, 255, 181, 102, 10, 255, 193, 112, 7, 255, 186, 110, 10, 255, 184, 105, 8, 255, 168, 83, 5, 255, 168, 89, 6, 255, 187, 112, 10, 255, 192, 111, 12, 255, 204, 123, 15, 255, 202, 121, 14, 255, 201, 121, 22, 255, 206, 129, 20, 255, 209, 133, 13, 255, 210, 131, 19, 255, 213, 130, 17, 255, 213, 139, 7, 255, 215, 143, 5, 255, 218, 141, 17, 255, 220, 144, 7, 255, 219, 145, 16, 255, 218, 144, 14, 255, 220, 147, 11, 255, 219, 147, 12, 255, 216, 142, 12, 255, 220, 145, 18, 255, 218, 145, 15, 255, 216, 146, 8, 255, 220, 143, 13, 255, 218, 146, 15, 255, 218, 149, 11, 255, 221, 150, 15, 255, 221, 148, 7, 255, 219, 141, 10, 255, 220, 141, 7, 255, 215, 142, 1, 255, 215, 143, 6, 255, 219, 147, 6, 255, 223, 154, 9, 255, 216, 139, 7, 255, 211, 130, 9, 255, 197, 118, 7, 255, 191, 113, 15, 255, 197, 127, 12, 255, 207, 144, 8, 255, 208, 144, 7, 255, 215, 148, 6, 255, 214, 153, 7, 255, 218, 152, 14, 255, 217, 149, 3, 255, 224, 157, 5, 255, 229, 164, 5, 255, 224, 158, 5, 255, 214, 141, 13, 255, 217, 147, 4, 255, 225, 160, 2, 255, 227, 160, 9, 255, 222, 155, 4, 255, 220, 155, 5, 255, 221, 157, 11, 255, 217, 158, 5, 255, 213, 157, 3, 255, 213, 158, 2, 255, 216, 158, 1, 255, 220, 159, 4, 255, 216, 155, 0, 255, 218, 155, 5, 255, 207, 146, 6, 255, 212, 151, 15, 255, 217, 162, 3, 255, 211, 156, 7, 255, 209, 151, 6, 255, 209, 149, 5, 255, 211, 151, 5, 255, 211, 154, 4, 255, 209, 152, 2, 255, 207, 146, 18, 255, 205, 145, 15, 255, 208, 151, 3, 255, 193, 133, 9, 255, 195, 134, 1, 255, 199, 133, 5, 255, 202, 129, 5, 255, 207, 137, 1, 255, 208, 144, 3, 255, 210, 153, 13, 255, 213, 156, 14, 255, 214, 153, 10, 255, 210, 148, 3, 255, 208, 145, 1, 255, 207, 143, 8, 255, 206, 143, 10, 255, 208, 144, 5, 255, 205, 140, 7, 255, 208, 142, 8, 255, 202, 133, 6, 255, 197, 124, 14, 255, 196, 125, 7, 255, 195, 124, 5, 255, 200, 127, 8, 255, 200, 126, 5, 255, 198, 121, 10, 255, 197, 118, 11, 255, 202, 123, 6, 255, 197, 117, 0, 255, 201, 118, 13, 255, 202, 118, 11, 255, 201, 119, 5, 255, 197, 115, 1, 255, 192, 113, 3, 255, 190, 110, 14, 255, 191, 107, 6, 255, 190, 104, 7, 255, 181, 91, 8, 255, 173, 78, 6, 255, 171, 74, 0, 255, 173, 73, 3, 255, 172, 80, 12, 255, 163, 73, 6, 255, 168, 74, 0, 255, 171, 76, 6, 255, 164, 70, 5, 255, 163, 71, 2, 255, 156, 66, 2, 255, 152, 63, 6, 255, 152, 61, 8, 255, 136, 50, 6, 255, 135, 57, 8, 255, 124, 50, 0, 255, 127, 50, 5, 255, 147, 74, 6, 255, 131, 59, 5, 255, 132, 62, 8, 255, 133, 65, 4, 255, 131, 61, 6, 255, 112, 46, 2, 255, 129, 58, 4, 255, 150, 71, 3, 255, 123, 45, 9, 255, 131, 51, 13, 255, 163, 83, 6, 255, 173, 94, 2, 255, 176, 98, 3, 255, 180, 89, 2, 255, 160, 72, 2, 255, 134, 53, 2, 255, 131, 55, 2, 255, 149, 73, 3, 255, 178, 99, 2, 255, 191, 107, 3, 255, 191, 103, 4, 255, 180, 93, 5, 255, 176, 89, 2, 255, 179, 91, 2, 255, 179, 88, 0, 255, 179, 88, 0, 255, 182, 92, 3, 255, 173, 87, 3, 255, 163, 78, 6, 255, 154, 67, 4, 255, 146, 59, 2, 255, 147, 67, 2, 255, 148, 66, 3, 255, 140, 62, 3, 255, 130, 56, 0, 255, 131, 53, 2, 255, 128, 48, 0, 255, 126, 48, 0, 255, 125, 50, 3, 255, 117, 45, 3, 255, 110, 43, 4, 255, 105, 42, 3, 255, 102, 38, 0, 255, 105, 40, 0, 255, 109, 41, 3, 255, 106, 40, 6, 255, 106, 41, 3, 255, 110, 43, 3, 255, 111, 43, 3, 255, 112, 43, 3, 255, 116, 43, 5, 255, 115, 44, 2, 255, 119, 48, 8, 255, 117, 45, 6, 255, 110, 39, 0, 255, 122, 52, 2, 255, 136, 62, 5, 255, 142, 66, 1, 255, 151, 69, 1, 255, 164, 75, 2, 255, 175, 83, 5, 255, 178, 86, 5, 255, 176, 83, 2, 255, 174, 80, 1, 255, 178, 79, 2, 255, 175, 77, 1, 255, 157, 63, 1, 255, 134, 46, 2, 255, 128, 49, 3, 255, 129, 54, 3, 255, 128, 53, 3, 255, 120, 48, 1, 255, 109, 39, 3, 255, 93, 30, 1, 255, 85, 29, 1, 255, 86, 31, 2, 255, 85, 31, 2, 255, 82, 29, 2, 255, 78, 25, 0, 255, 79, 26, 3, 255, 75, 25, 3, 255, 69, 23, 2, 255, 63, 19, 0, 255, 63, 20, 0, 255, 80, 23, 7, 255, 76, 23, 8, 255, 65, 17, 3, 255, 63, 18, 3, 255, 55, 16, 1, 255, 63, 18, 4, 255, 62, 20, 1, 255, 65, 18, 0, 255, 69, 20, 2, 255, 1, 5, 19, 255, 1, 1, 0, 255, 3, 0, 59, 255, 14, 52, 229, 255, 73, 84, 93, 255, 58, 34, 0, 255, 36, 13, 0, 255, 47, 27, 106, 255, 4, 25, 141, 255, 14, 4, 10, 255, 14, 6, 3, 255, 15, 5, 6, 255, 17, 4, 1, 255, 18, 2, 2, 255, 21, 5, 5, 255, 22, 6, 5, 255, 23, 7, 4, 255, 20, 5, 2, 255, 20, 6, 2, 255, 18, 4, 3, 255, 23, 9, 8, 255, 27, 11, 9, 255, 28, 10, 7, 255, 27, 7, 4, 255, 35, 15, 11, 255, 32, 8, 3, 255, 34, 11, 5, 255, 31, 14, 6, 255, 29, 9, 2, 255, 36, 12, 5, 255, 46, 14, 9, 255, 38, 13, 3, 255, 41, 13, 4, 255, 40, 15, 4, 255, 36, 14, 3, 255, 38, 10, 5, 255, 33, 14, 5, 255, 37, 15, 4, 255, 47, 19, 5, 255, 49, 17, 1, 255, 51, 18, 0, 255, 49, 22, 2, 255, 49, 20, 4, 255, 48, 21, 6, 255, 41, 23, 6, 255, 38, 23, 5, 255, 40, 25, 4, 255, 49, 27, 6, 255, 48, 27, 2, 255, 46, 28, 2, 255, 46, 29, 2, 255, 50, 34, 3, 255, 60, 36, 4, 255, 66, 37, 5, 255, 66, 33, 11, 255, 61, 42, 1, 255, 61, 40, 2, 255, 80, 46, 4, 255, 93, 60, 4, 255, 76, 49, 2, 255, 72, 49, 7, 255, 74, 54, 0, 255, 60, 48, 5, 255, 80, 47, 5, 255, 77, 41, 6, 255, 94, 62, 3, 255, 143, 90, 2, 255, 155, 91, 1, 255, 164, 96, 5, 255, 165, 90, 1, 255, 147, 85, 2, 255, 115, 69, 2, 255, 123, 79, 5, 255, 164, 105, 15, 255, 188, 110, 19, 255, 194, 113, 22, 255, 200, 123, 32, 255, 202, 134, 29, 255, 208, 142, 24, 255, 213, 145, 17, 255, 201, 125, 20, 255, 194, 116, 27, 255, 198, 122, 22, 255, 200, 119, 25, 255, 198, 122, 26, 255, 201, 124, 19, 255, 199, 121, 13, 255, 201, 120, 22, 255, 199, 120, 11, 255, 190, 118, 19, 255, 196, 119, 21, 255, 200, 118, 14, 255, 196, 118, 15, 255, 195, 117, 17, 255, 199, 115, 20, 255, 197, 116, 14, 255, 192, 114, 19, 255, 198, 115, 19, 255, 193, 115, 17, 255, 189, 115, 9, 255, 186, 114, 14, 255, 199, 120, 18, 255, 200, 120, 10, 255, 201, 119, 15, 255, 197, 116, 8, 255, 199, 117, 12, 255, 200, 126, 13, 255, 202, 121, 19, 255, 198, 122, 16, 255, 201, 121, 13, 255, 198, 116, 7, 255, 194, 115, 15, 255, 191, 109, 15, 255, 202, 116, 8, 255, 204, 117, 21, 255, 201, 117, 10, 255, 197, 120, 11, 255, 198, 111, 4, 255, 203, 120, 4, 255, 201, 120, 10, 255, 206, 119, 10, 255, 201, 122, 11, 255, 198, 116, 14, 255, 205, 118, 7, 255, 198, 115, 7, 255, 190, 103, 12, 255, 194, 105, 9, 255, 187, 108, 13, 255, 188, 106, 8, 255, 182, 104, 8, 255, 183, 101, 15, 255, 176, 99, 12, 255, 176, 103, 1, 255, 171, 101, 9, 255, 159, 91, 10, 255, 150, 74, 9, 255, 138, 69, 6, 255, 128, 64, 4, 255, 112, 61, 14, 255, 111, 53, 4, 255, 120, 52, 9, 255, 137, 64, 7, 255, 145, 68, 4, 255, 146, 64, 7, 255, 154, 69, 7, 255, 153, 65, 0, 255, 152, 68, 3, 255, 152, 71, 7, 255, 145, 67, 16, 255, 140, 64, 14, 255, 137, 59, 4, 255, 151, 68, 8, 255, 150, 73, 6, 255, 153, 67, 6, 255, 166, 72, 10, 255, 167, 82, 8, 255, 157, 78, 7, 255, 153, 74, 8, 255, 166, 74, 4, 255, 170, 77, 2, 255, 163, 77, 3, 255, 154, 80, 5, 255, 148, 78, 6, 255, 145, 73, 11, 255, 155, 72, 5, 255, 154, 76, 2, 255, 179, 93, 5, 255, 172, 84, 11, 255, 153, 68, 8, 255, 146, 69, 14, 255, 142, 76, 11, 255, 148, 85, 9, 255, 161, 94, 9, 255, 167, 101, 8, 255, 175, 107, 10, 255, 183, 111, 20, 255, 193, 116, 12, 255, 193, 110, 9, 255, 191, 103, 6, 255, 193, 108, 16, 255, 204, 118, 11, 255, 200, 111, 1, 255, 192, 101, 14, 255, 202, 116, 21, 255, 208, 131, 15, 255, 210, 136, 12, 255, 214, 136, 8, 255, 212, 132, 15, 255, 205, 125, 14, 255, 202, 124, 9, 255, 215, 136, 15, 255, 217, 138, 14, 255, 214, 137, 16, 255, 210, 132, 16, 255, 207, 127, 16, 255, 212, 133, 18, 255, 218, 143, 18, 255, 212, 139, 13, 255, 215, 140, 10, 255, 219, 144, 8, 255, 218, 145, 14, 255, 220, 145, 10, 255, 219, 144, 12, 255, 220, 148, 11, 255, 212, 144, 3, 255, 217, 149, 13, 255, 220, 148, 15, 255, 220, 147, 12, 255, 222, 149, 8, 255, 210, 138, 4, 255, 204, 131, 12, 255, 215, 144, 9, 255, 219, 148, 4, 255, 218, 144, 12, 255, 223, 148, 11, 255, 220, 145, 4, 255, 202, 121, 19, 255, 196, 123, 6, 255, 208, 138, 12, 255, 214, 144, 10, 255, 213, 146, 7, 255, 214, 150, 10, 255, 215, 151, 10, 255, 222, 157, 4, 255, 226, 153, 3, 255, 220, 148, 5, 255, 221, 158, 10, 255, 220, 154, 1, 255, 220, 137, 5, 255, 220, 135, 17, 255, 217, 144, 4, 255, 221, 152, 7, 255, 224, 158, 7, 255, 223, 158, 2, 255, 224, 160, 4, 255, 223, 163, 4, 255, 220, 162, 4, 255, 221, 162, 3, 255, 213, 158, 0, 255, 216, 160, 2, 255, 218, 158, 2, 255, 215, 155, 0, 255, 216, 158, 2, 255, 215, 158, 3, 255, 213, 156, 3, 255, 217, 160, 7, 255, 214, 160, 3, 255, 210, 155, 8, 255, 204, 150, 3, 255, 207, 151, 5, 255, 212, 155, 6, 255, 211, 154, 4, 255, 207, 149, 3, 255, 208, 150, 11, 255, 209, 153, 13, 255, 211, 156, 2, 255, 185, 123, 9, 255, 195, 132, 8, 255, 177, 105, 8, 255, 189, 116, 15, 255, 199, 134, 5, 255, 204, 149, 2, 255, 214, 161, 11, 255, 214, 159, 12, 255, 212, 152, 9, 255, 208, 144, 4, 255, 208, 141, 7, 255, 209, 145, 12, 255, 208, 144, 10, 255, 203, 140, 6, 255, 207, 140, 11, 255, 205, 139, 5, 255, 209, 138, 20, 255, 201, 129, 12, 255, 199, 127, 9, 255, 207, 135, 14, 255, 203, 133, 2, 255, 201, 130, 6, 255, 203, 127, 15, 255, 200, 124, 6, 255, 199, 117, 9, 255, 197, 116, 14, 255, 197, 119, 12, 255, 201, 119, 13, 255, 190, 103, 8, 255, 187, 99, 7, 255, 196, 110, 7, 255, 188, 104, 9, 255, 187, 97, 2, 255, 179, 89, 2, 255, 167, 75, 4, 255, 166, 73, 3, 255, 163, 68, 4, 255, 167, 69, 6, 255, 176, 83, 10, 255, 174, 85, 5, 255, 166, 76, 3, 255, 160, 73, 2, 255, 162, 72, 1, 255, 163, 63, 8, 255, 158, 57, 5, 255, 146, 60, 5, 255, 143, 57, 5, 255, 126, 50, 2, 255, 121, 57, 4, 255, 116, 49, 3, 255, 137, 59, 7, 255, 158, 78, 10, 255, 132, 50, 8, 255, 127, 53, 4, 255, 124, 59, 3, 255, 117, 56, 1, 255, 113, 52, 2, 255, 106, 38, 5, 255, 126, 56, 0, 255, 124, 50, 8, 255, 149, 78, 2, 255, 172, 94, 3, 255, 183, 93, 5, 255, 181, 79, 9, 255, 157, 67, 9, 255, 139, 53, 8, 255, 131, 51, 3, 255, 147, 69, 2, 255, 171, 86, 7, 255, 198, 105, 3, 255, 197, 105, 1, 255, 187, 96, 1, 255, 176, 87, 0, 255, 177, 86, 4, 255, 177, 86, 6, 255, 179, 88, 4, 255, 184, 93, 1, 255, 189, 100, 1, 255, 187, 99, 2, 255, 187, 99, 4, 255, 184, 93, 5, 255, 169, 77, 3, 255, 159, 68, 5, 255, 148, 59, 1, 255, 136, 53, 3, 255, 121, 43, 1, 255, 127, 48, 4, 255, 134, 50, 4, 255, 127, 50, 3, 255, 121, 47, 7, 255, 117, 42, 9, 255, 116, 45, 7, 255, 110, 42, 4, 255, 109, 43, 6, 255, 107, 41, 2, 255, 107, 42, 2, 255, 104, 37, 4, 255, 105, 38, 1, 255, 106, 38, 5, 255, 105, 35, 4, 255, 113, 40, 1, 255, 116, 40, 3, 255, 118, 47, 2, 255, 126, 57, 7, 255, 120, 49, 2, 255, 115, 47, 3, 255, 124, 57, 1, 255, 138, 62, 3, 255, 144, 60, 0, 255, 150, 69, 2, 255, 161, 73, 1, 255, 171, 78, 0, 255, 176, 83, 2, 255, 174, 82, 1, 255, 171, 80, 2, 255, 170, 78, 3, 255, 170, 75, 5, 255, 160, 64, 2, 255, 146, 56, 7, 255, 130, 48, 10, 255, 122, 46, 2, 255, 121, 50, 1, 255, 106, 40, 1, 255, 93, 31, 0, 255, 87, 28, 5, 255, 84, 27, 3, 255, 86, 30, 3, 255, 88, 29, 1, 255, 85, 27, 2, 255, 82, 24, 1, 255, 79, 22, 1, 255, 77, 21, 4, 255, 74, 23, 7, 255, 66, 19, 3, 255, 57, 15, 0, 255, 59, 21, 3, 255, 61, 20, 2, 255, 64, 18, 3, 255, 60, 17, 1, 255, 58, 18, 1, 255, 55, 20, 1, 255, 58, 23, 1, 255, 59, 20, 0, 255, 62, 18, 2, 255, 3, 1, 0, 255, 0, 0, 48, 255, 10, 43, 217, 255, 65, 81, 106, 255, 54, 40, 4, 255, 37, 16, 0, 255, 42, 21, 90, 255, 8, 17, 151, 255, 10, 3, 16, 255, 10, 6, 0, 255, 15, 5, 5, 255, 16, 5, 5, 255, 15, 6, 2, 255, 19, 4, 4, 255, 18, 4, 3, 255, 18, 4, 3, 255, 18, 5, 3, 255, 20, 6, 5, 255, 20, 8, 6, 255, 21, 7, 6, 255, 24, 7, 7, 255, 27, 9, 6, 255, 31, 11, 8, 255, 32, 11, 7, 255, 32, 11, 8, 255, 30, 8, 4, 255, 28, 14, 6, 255, 23, 13, 4, 255, 26, 14, 6, 255, 28, 13, 5, 255, 33, 11, 5, 255, 31, 12, 3, 255, 32, 12, 2, 255, 34, 14, 3, 255, 34, 17, 4, 255, 34, 12, 1, 255, 32, 14, 1, 255, 36, 17, 3, 255, 45, 18, 9, 255, 41, 15, 4, 255, 47, 20, 3, 255, 54, 22, 3, 255, 45, 20, 0, 255, 43, 23, 1, 255, 44, 23, 2, 255, 35, 19, 3, 255, 30, 24, 2, 255, 38, 26, 1, 255, 47, 31, 4, 255, 51, 34, 4, 255, 57, 29, 1, 255, 63, 35, 3, 255, 63, 34, 4, 255, 62, 30, 2, 255, 63, 33, 2, 255, 62, 40, 0, 255, 70, 45, 4, 255, 87, 54, 3, 255, 80, 48, 3, 255, 66, 51, 1, 255, 73, 54, 0, 255, 72, 48, 4, 255, 62, 42, 4, 255, 73, 51, 1, 255, 70, 47, 1, 255, 79, 55, 7, 255, 136, 79, 7, 255, 158, 96, 4, 255, 142, 85, 1, 255, 134, 75, 2, 255, 145, 81, 10, 255, 158, 93, 10, 255, 178, 107, 13, 255, 192, 106, 10, 255, 192, 122, 25, 255, 192, 149, 29, 255, 202, 151, 11, 255, 194, 133, 8, 255, 197, 134, 26, 255, 194, 128, 11, 255, 191, 114, 14, 255, 194, 123, 11, 255, 195, 121, 15, 255, 197, 121, 26, 255, 198, 121, 11, 255, 200, 120, 12, 255, 199, 116, 24, 255, 199, 121, 11, 255, 200, 121, 6, 255, 201, 120, 14, 255, 198, 120, 15, 255, 197, 121, 13, 255, 196, 117, 16, 255, 201, 118, 10, 255, 204, 118, 15, 255, 197, 116, 4, 255, 201, 120, 5, 255, 202, 117, 10, 255, 201, 119, 9, 255, 205, 119, 12, 255, 208, 125, 7, 255, 201, 121, 5, 255, 200, 119, 15, 255, 202, 122, 18, 255, 203, 123, 6, 255, 196, 121, 8, 255, 195, 110, 5, 255, 204, 123, 15, 255, 208, 136, 15, 255, 205, 128, 13, 255, 215, 135, 21, 255, 209, 122, 16, 255, 210, 126, 20, 255, 204, 128, 13, 255, 201, 123, 15, 255, 207, 123, 10, 255, 203, 124, 7, 255, 203, 123, 4, 255, 206, 122, 6, 255, 201, 118, 5, 255, 197, 118, 5, 255, 202, 121, 10, 255, 204, 115, 12, 255, 203, 117, 9, 255, 201, 120, 2, 255, 201, 119, 3, 255, 204, 120, 8, 255, 205, 120, 14, 255, 201, 115, 15, 255, 198, 117, 7, 255, 199, 114, 5, 255, 197, 112, 5, 255, 195, 108, 7, 255, 192, 108, 5, 255, 186, 114, 4, 255, 185, 101, 6, 255, 179, 100, 6, 255, 166, 96, 12, 255, 162, 89, 14, 255, 161, 81, 4, 255, 136, 68, 5, 255, 128, 64, 11, 255, 133, 68, 6, 255, 134, 66, 3, 255, 138, 67, 10, 255, 142, 73, 7, 255, 138, 72, 7, 255, 136, 70, 3, 255, 153, 82, 6, 255, 158, 83, 3, 255, 141, 67, 9, 255, 132, 60, 6, 255, 147, 67, 8, 255, 154, 69, 6, 255, 151, 71, 4, 255, 146, 71, 2, 255, 154, 81, 10, 255, 153, 72, 10, 255, 145, 64, 5, 255, 147, 67, 2, 255, 158, 69, 6, 255, 146, 69, 5, 255, 145, 75, 9, 255, 137, 74, 12, 255, 137, 70, 8, 255, 120, 61, 7, 255, 126, 60, 4, 255, 132, 68, 13, 255, 150, 82, 5, 255, 181, 101, 9, 255, 186, 110, 4, 255, 184, 108, 10, 255, 190, 112, 10, 255, 193, 116, 9, 255, 197, 118, 11, 255, 199, 118, 8, 255, 197, 117, 21, 255, 202, 124, 9, 255, 202, 121, 11, 255, 191, 113, 14, 255, 204, 120, 16, 255, 202, 115, 14, 255, 175, 85, 5, 255, 182, 88, 7, 255, 205, 121, 19, 255, 207, 129, 18, 255, 212, 133, 11, 255, 214, 135, 27, 255, 204, 126, 25, 255, 204, 125, 14, 255, 210, 131, 12, 255, 208, 127, 11, 255, 208, 127, 6, 255, 200, 123, 16, 255, 208, 137, 20, 255, 219, 149, 15, 255, 217, 141, 17, 255, 210, 130, 10, 255, 211, 132, 19, 255, 217, 143, 12, 255, 216, 143, 14, 255, 221, 147, 9, 255, 217, 144, 6, 255, 217, 145, 8, 255, 210, 142, 7, 255, 209, 145, 10, 255, 219, 148, 10, 255, 225, 150, 9, 255, 210, 136, 1, 255, 206, 134, 14, 255, 218, 152, 19, 255, 218, 153, 6, 255, 222, 150, 7, 255, 206, 132, 4, 255, 204, 130, 5, 255, 210, 135, 8, 255, 188, 116, 13, 255, 206, 143, 9, 255, 218, 151, 6, 255, 210, 137, 10, 255, 211, 136, 6, 255, 216, 145, 10, 255, 217, 146, 13, 255, 216, 147, 2, 255, 213, 147, 7, 255, 210, 153, 13, 255, 220, 157, 9, 255, 207, 129, 8, 255, 195, 114, 18, 255, 209, 143, 11, 255, 221, 158, 0, 255, 226, 161, 7, 255, 227, 164, 7, 255, 225, 164, 0, 255, 230, 168, 8, 255, 227, 167, 11, 255, 220, 164, 1, 255, 218, 159, 1, 255, 217, 159, 0, 255, 219, 161, 2, 255, 218, 159, 3, 255, 216, 159, 3, 255, 217, 161, 7, 255, 215, 161, 2, 255, 215, 162, 2, 255, 216, 162, 3, 255, 216, 161, 7, 255, 209, 152, 8, 255, 208, 154, 5, 255, 209, 154, 3, 255, 211, 155, 4, 255, 209, 153, 5, 255, 208, 151, 6, 255, 210, 154, 6, 255, 209, 156, 12, 255, 212, 160, 11, 255, 205, 147, 8, 255, 177, 114, 5, 255, 166, 98, 9, 255, 184, 120, 12, 255, 201, 143, 9, 255, 206, 153, 5, 255, 212, 161, 4, 255, 213, 159, 4, 255, 210, 152, 3, 255, 207, 144, 5, 255, 208, 143, 14, 255, 209, 144, 19, 255, 207, 141, 19, 255, 206, 140, 12, 255, 207, 140, 4, 255, 208, 140, 8, 255, 206, 137, 15, 255, 204, 133, 17, 255, 208, 136, 13, 255, 206, 135, 7, 255, 202, 132, 10, 255, 204, 128, 20, 255, 205, 129, 16, 255, 202, 124, 5, 255, 204, 121, 14, 255, 200, 118, 14, 255, 193, 114, 7, 255, 193, 109, 3, 255, 182, 92, 2, 255, 187, 97, 4, 255, 193, 106, 3, 255, 189, 102, 2, 255, 172, 80, 3, 255, 161, 67, 5, 255, 161, 68, 2, 255, 165, 73, 5, 255, 168, 75, 6, 255, 174, 80, 4, 255, 166, 75, 1, 255, 169, 77, 7, 255, 174, 80, 9, 255, 163, 70, 2, 255, 153, 62, 3, 255, 145, 58, 3, 255, 142, 55, 9, 255, 138, 51, 2, 255, 141, 56, 6, 255, 126, 47, 8, 255, 117, 49, 0, 255, 127, 58, 3, 255, 145, 65, 5, 255, 139, 69, 12, 255, 126, 54, 5, 255, 119, 44, 0, 255, 121, 49, 2, 255, 115, 46, 4, 255, 118, 51, 10, 255, 112, 41, 7, 255, 110, 38, 10, 255, 122, 52, 6, 255, 157, 81, 0, 255, 180, 93, 3, 255, 172, 84, 4, 255, 138, 54, 2, 255, 121, 48, 5, 255, 122, 48, 10, 255, 132, 55, 4, 255, 158, 76, 1, 255, 170, 83, 1, 255, 188, 98, 4, 255, 188, 101, 4, 255, 185, 98, 9, 255, 172, 85, 6, 255, 172, 85, 6, 255, 174, 88, 2, 255, 175, 90, 1, 255, 176, 89, 1, 255, 185, 96, 4, 255, 191, 103, 6, 255, 188, 100, 1, 255, 187, 99, 1, 255, 189, 99, 5, 255, 183, 93, 3, 255, 174, 82, 7, 255, 158, 72, 7, 255, 138, 53, 2, 255, 132, 43, 5, 255, 123, 37, 3, 255, 117, 38, 1, 255, 118, 43, 5, 255, 116, 41, 4, 255, 113, 42, 2, 255, 109, 42, 2, 255, 109, 44, 5, 255, 107, 42, 4, 255, 108, 43, 5, 255, 106, 39, 3, 255, 97, 33, 4, 255, 93, 33, 3, 255, 93, 35, 1, 255, 91, 32, 2, 255, 91, 32, 1, 255, 99, 41, 8, 255, 114, 48, 6, 255, 129, 57, 0, 255, 126, 53, 2, 255, 128, 57, 4, 255, 128, 54, 2, 255, 133, 56, 0, 255, 142, 60, 3, 255, 153, 62, 4, 255, 164, 69, 3, 255, 172, 78, 3, 255, 174, 82, 1, 255, 175, 84, 0, 255, 170, 83, 0, 255, 168, 76, 3, 255, 169, 73, 1, 255, 173, 80, 3, 255, 151, 64, 5, 255, 129, 45, 3, 255, 120, 43, 3, 255, 103, 40, 3, 255, 89, 29, 0, 255, 83, 25, 3, 255, 84, 26, 6, 255, 82, 23, 0, 255, 88, 28, 3, 255, 81, 29, 4, 255, 78, 26, 3, 255, 74, 23, 1, 255, 68, 18, 0, 255, 66, 19, 3, 255, 64, 18, 3, 255, 61, 20, 5, 255, 48, 21, 2, 255, 49, 21, 2, 255, 45, 17, 1, 255, 49, 18, 0, 255, 57, 15, 1, 255, 51, 19, 1, 255, 59, 21, 3, 255, 59, 18, 2, 255, 57, 17, 2, 255, 0, 0, 44, 255, 11, 39, 205, 255, 66, 84, 111, 255, 46, 48, 0, 255, 31, 10, 0, 255, 47, 24, 83, 255, 13, 21, 149, 255, 14, 6, 18, 255, 16, 2, 0, 255, 11, 3, 2, 255, 13, 6, 9, 255, 17, 9, 5, 255, 15, 5, 2, 255, 14, 4, 2, 255, 15, 4, 3, 255, 16, 4, 4, 255, 18, 6, 6, 255, 17, 6, 6, 255, 17, 6, 5, 255, 19, 8, 7, 255, 24, 9, 8, 255, 27, 7, 4, 255, 34, 14, 7, 255, 31, 10, 4, 255, 29, 10, 4, 255, 28, 9, 4, 255, 28, 13, 6, 255, 27, 14, 8, 255, 29, 15, 9, 255, 26, 14, 5, 255, 36, 13, 5, 255, 37, 13, 5, 255, 34, 13, 7, 255, 37, 10, 2, 255, 33, 14, 2, 255, 35, 13, 2, 255, 38, 14, 2, 255, 42, 20, 4, 255, 42, 15, 3, 255, 45, 17, 4, 255, 51, 20, 2, 255, 54, 20, 3, 255, 49, 21, 6, 255, 38, 19, 2, 255, 38, 23, 5, 255, 45, 22, 4, 255, 50, 27, 7, 255, 48, 29, 4, 255, 57, 28, 4, 255, 53, 28, 1, 255, 53, 31, 4, 255, 60, 33, 2, 255, 58, 37, 7, 255, 64, 34, 3, 255, 65, 39, 2, 255, 70, 37, 3, 255, 95, 55, 5, 255, 73, 50, 0, 255, 72, 49, 5, 255, 78, 46, 4, 255, 66, 48, 3, 255, 62, 48, 6, 255, 66, 49, 2, 255, 73, 48, 5, 255, 72, 54, 5, 255, 77, 55, 1, 255, 100, 68, 1, 255, 136, 79, 4, 255, 143, 78, 7, 255, 160, 97, 11, 255, 176, 101, 17, 255, 176, 104, 8, 255, 173, 103, 13, 255, 170, 96, 6, 255, 166, 100, 7, 255, 174, 124, 12, 255, 172, 120, 8, 255, 121, 88, 5, 255, 92, 63, 12, 255, 103, 65, 13, 255, 102, 63, 5, 255, 121, 76, 0, 255, 144, 88, 16, 255, 166, 96, 20, 255, 175, 103, 20, 255, 181, 112, 8, 255, 188, 116, 6, 255, 187, 110, 15, 255, 192, 113, 11, 255, 193, 114, 16, 255, 189, 111, 12, 255, 188, 113, 7, 255, 186, 111, 15, 255, 186, 108, 4, 255, 194, 111, 5, 255, 196, 109, 7, 255, 194, 107, 10, 255, 187, 98, 9, 255, 191, 105, 6, 255, 198, 116, 7, 255, 199, 118, 3, 255, 193, 108, 3, 255, 192, 99, 8, 255, 199, 106, 10, 255, 197, 111, 7, 255, 195, 107, 6, 255, 188, 95, 7, 255, 194, 118, 17, 255, 199, 127, 12, 255, 204, 126, 13, 255, 196, 114, 7, 255, 199, 112, 6, 255, 203, 120, 6, 255, 201, 117, 10, 255, 203, 115, 4, 255, 197, 104, 9, 255, 203, 108, 4, 255, 203, 119, 2, 255, 202, 124, 10, 255, 206, 123, 13, 255, 209, 122, 10, 255, 208, 122, 5, 255, 204, 123, 5, 255, 204, 122, 11, 255, 207, 122, 7, 255, 207, 122, 6, 255, 205, 122, 10, 255, 205, 118, 5, 255, 202, 111, 17, 255, 203, 123, 7, 255, 201, 119, 6, 255, 201, 119, 9, 255, 197, 111, 6, 255, 199, 111, 0, 255, 200, 117, 10, 255, 198, 112, 12, 255, 192, 103, 6, 255, 192, 101, 3, 255, 190, 110, 5, 255, 186, 112, 9, 255, 182, 103, 15, 255, 174, 96, 11, 255, 168, 99, 6, 255, 166, 98, 6, 255, 160, 87, 10, 255, 152, 83, 6, 255, 151, 83, 7, 255, 148, 80, 11, 255, 136, 72, 5, 255, 131, 67, 7, 255, 133, 63, 8, 255, 135, 59, 8, 255, 137, 62, 1, 255, 142, 69, 4, 255, 142, 67, 1, 255, 147, 72, 6, 255, 145, 69, 5, 255, 143, 71, 7, 255, 135, 66, 8, 255, 141, 65, 8, 255, 150, 71, 14, 255, 145, 71, 4, 255, 147, 76, 2, 255, 144, 77, 15, 255, 140, 73, 10, 255, 133, 70, 17, 255, 145, 76, 6, 255, 166, 96, 13, 255, 184, 114, 17, 255, 193, 113, 3, 255, 193, 109, 4, 255, 193, 115, 13, 255, 197, 120, 16, 255, 204, 125, 17, 255, 205, 120, 22, 255, 204, 119, 19, 255, 206, 126, 13, 255, 209, 130, 21, 255, 213, 132, 18, 255, 203, 122, 6, 255, 200, 120, 7, 255, 196, 111, 11, 255, 200, 113, 11, 255, 196, 111, 10, 255, 193, 107, 11, 255, 203, 118, 19, 255, 211, 130, 30, 255, 217, 140, 23, 255, 218, 145, 7, 255, 216, 141, 7, 255, 215, 133, 20, 255, 197, 113, 10, 255, 201, 120, 5, 255, 205, 134, 16, 255, 215, 151, 19, 255, 220, 147, 18, 255, 217, 136, 15, 255, 219, 143, 6, 255, 222, 149, 13, 255, 220, 148, 15, 255, 222, 149, 27, 255, 221, 148, 15, 255, 213, 139, 3, 255, 212, 140, 10, 255, 218, 153, 3, 255, 226, 162, 3, 255, 222, 151, 3, 255, 211, 134, 16, 255, 213, 143, 5, 255, 224, 159, 6, 255, 226, 158, 9, 255, 214, 144, 4, 255, 210, 137, 5, 255, 202, 134, 9, 255, 203, 141, 4, 255, 203, 133, 17, 255, 198, 136, 7, 255, 223, 168, 5, 255, 222, 154, 9, 255, 198, 126, 4, 255, 209, 142, 6, 255, 211, 149, 5, 255, 212, 147, 11, 255, 218, 155, 8, 255, 221, 162, 9, 255, 224, 156, 6, 255, 213, 133, 4, 255, 201, 124, 10, 255, 216, 155, 13, 255, 221, 167, 4, 255, 223, 165, 3, 255, 229, 170, 5, 255, 228, 169, 3, 255, 228, 166, 9, 255, 228, 167, 9, 255, 222, 165, 1, 255, 220, 165, 5, 255, 219, 164, 4, 255, 218, 163, 3, 255, 221, 165, 6, 255, 221, 162, 3, 255, 219, 159, 3, 255, 220, 163, 4, 255, 219, 164, 4, 255, 216, 161, 1, 255, 212, 154, 5, 255, 213, 153, 3, 255, 216, 155, 11, 255, 214, 157, 6, 255, 209, 152, 3, 255, 210, 151, 7, 255, 212, 155, 6, 255, 211, 157, 3, 255, 212, 159, 6, 255, 211, 160, 5, 255, 211, 160, 5, 255, 211, 162, 6, 255, 204, 154, 3, 255, 185, 131, 13, 255, 190, 138, 11, 255, 201, 150, 8, 255, 215, 160, 5, 255, 213, 155, 10, 255, 209, 152, 13, 255, 209, 151, 3, 255, 209, 151, 2, 255, 212, 149, 8, 255, 210, 147, 8, 255, 208, 142, 13, 255, 208, 141, 8, 255, 206, 138, 5, 255, 209, 139, 12, 255, 205, 136, 2, 255, 206, 135, 5, 255, 207, 136, 10, 255, 205, 131, 14, 255, 204, 131, 13, 255, 206, 130, 19, 255, 201, 125, 6, 255, 203, 124, 5, 255, 206, 122, 15, 255, 189, 101, 3, 255, 185, 93, 6, 255, 190, 98, 4, 255, 186, 94, 5, 255, 189, 98, 7, 255, 183, 90, 10, 255, 176, 84, 3, 255, 161, 74, 7, 255, 159, 70, 7, 255, 160, 72, 3, 255, 164, 74, 1, 255, 176, 85, 2, 255, 189, 95, 5, 255, 167, 78, 3, 255, 157, 69, 6, 255, 160, 69, 3, 255, 149, 56, 5, 255, 136, 44, 10, 255, 132, 49, 6, 255, 137, 57, 8, 255, 141, 54, 8, 255, 134, 44, 17, 255, 130, 42, 16, 255, 132, 53, 4, 255, 139, 59, 5, 255, 147, 66, 4, 255, 142, 69, 13, 255, 127, 58, 11, 255, 114, 45, 8, 255, 121, 49, 6, 255, 123, 46, 3, 255, 122, 45, 6, 255, 116, 48, 4, 255, 101, 35, 13, 255, 125, 55, 4, 255, 157, 78, 8, 255, 147, 61, 9, 255, 129, 52, 10, 255, 116, 55, 2, 255, 119, 50, 4, 255, 120, 49, 3, 255, 135, 60, 5, 255, 152, 70, 7, 255, 168, 83, 7, 255, 173, 88, 7, 255, 181, 96, 1, 255, 188, 102, 10, 255, 176, 89, 5, 255, 174, 89, 3, 255, 175, 91, 1, 255, 176, 90, 1, 255, 180, 93, 6, 255, 188, 102, 10, 255, 190, 105, 3, 255, 190, 106, 1, 255, 187, 102, 3, 255, 190, 100, 5, 255, 190, 97, 1, 255, 185, 96, 3, 255, 184, 93, 5, 255, 177, 84, 2, 255, 166, 78, 3, 255, 147, 65, 2, 255, 126, 46, 4, 255, 120, 43, 3, 255, 126, 51, 2, 255, 115, 48, 2, 255, 108, 47, 1, 255, 106, 45, 1, 255, 107, 42, 2, 255, 103, 33, 2, 255, 95, 33, 0, 255, 90, 33, 3, 255, 84, 33, 2, 255, 88, 34, 2, 255, 92, 36, 9, 255, 79, 25, 3, 255, 80, 26, 6, 255, 98, 37, 6, 255, 121, 51, 3, 255, 117, 46, 3, 255, 113, 46, 0, 255, 120, 50, 2, 255, 128, 53, 4, 255, 127, 49, 3, 255, 137, 54, 4, 255, 152, 61, 1, 255, 165, 72, 2, 255, 165, 73, 1, 255, 168, 73, 4, 255, 169, 75, 2, 255, 170, 75, 2, 255, 171, 77, 1, 255, 169, 79, 0, 255, 158, 69, 2, 255, 146, 56, 5, 255, 130, 45, 1, 255, 118, 45, 5, 255, 99, 35, 2, 255, 87, 26, 1, 255, 86, 27, 5, 255, 81, 24, 2, 255, 79, 24, 1, 255, 71, 25, 2, 255, 70, 25, 1, 255, 73, 28, 5, 255, 69, 23, 4, 255, 60, 16, 0, 255, 59, 15, 2, 255, 59, 18, 3, 255, 60, 20, 4, 255, 59, 18, 4, 255, 49, 20, 4, 255, 47, 16, 3, 255, 55, 13, 6, 255, 45, 15, 4, 255, 44, 14, 4, 255, 48, 14, 3, 255, 52, 17, 3, 255, 14, 37, 213, 255, 60, 74, 122, 255, 55, 43, 0, 255, 34, 17, 0, 255, 44, 22, 71, 255, 8, 25, 151, 255, 13, 7, 27, 255, 16, 0, 0, 255, 13, 5, 2, 255, 12, 5, 3, 255, 14, 4, 2, 255, 15, 5, 3, 255, 13, 2, 4, 255, 13, 4, 3, 255, 14, 4, 3, 255, 17, 6, 5, 255, 12, 1, 0, 255, 17, 6, 5, 255, 22, 8, 9, 255, 25, 9, 6, 255, 24, 9, 4, 255, 22, 7, 1, 255, 25, 9, 3, 255, 29, 12, 6, 255, 23, 9, 4, 255, 28, 11, 7, 255, 32, 11, 6, 255, 32, 11, 8, 255, 29, 12, 5, 255, 25, 12, 5, 255, 31, 13, 4, 255, 36, 14, 4, 255, 32, 13, 2, 255, 32, 14, 4, 255, 29, 15, 4, 255, 41, 18, 7, 255, 47, 18, 6, 255, 41, 16, 2, 255, 39, 15, 3, 255, 47, 22, 5, 255, 42, 19, 1, 255, 45, 25, 6, 255, 41, 22, 4, 255, 39, 21, 6, 255, 39, 22, 4, 255, 47, 25, 1, 255, 51, 23, 1, 255, 50, 29, 2, 255, 55, 29, 5, 255, 55, 30, 5, 255, 57, 33, 5, 255, 63, 32, 2, 255, 62, 36, 9, 255, 59, 38, 2, 255, 56, 39, 4, 255, 82, 56, 7, 255, 84, 53, 1, 255, 65, 48, 5, 255, 65, 47, 3, 255, 71, 47, 7, 255, 65, 44, 7, 255, 72, 46, 0, 255, 73, 50, 3, 255, 73, 53, 3, 255, 70, 49, 2, 255, 68, 44, 0, 255, 91, 60, 7, 255, 157, 90, 10, 255, 181, 99, 5, 255, 170, 95, 12, 255, 170, 104, 4, 255, 187, 127, 5, 255, 191, 127, 4, 255, 176, 116, 7, 255, 183, 118, 5, 255, 152, 89, 5, 255, 102, 63, 4, 255, 89, 57, 3, 255, 79, 53, 1, 255, 81, 47, 7, 255, 61, 40, 5, 255, 63, 44, 4, 255, 70, 44, 0, 255, 76, 47, 5, 255, 82, 46, 6, 255, 100, 58, 10, 255, 112, 61, 4, 255, 135, 79, 13, 255, 139, 84, 10, 255, 135, 77, 8, 255, 140, 81, 16, 255, 149, 84, 8, 255, 154, 85, 7, 255, 152, 86, 12, 255, 156, 86, 4, 255, 163, 88, 9, 255, 172, 91, 7, 255, 172, 87, 9, 255, 181, 95, 11, 255, 172, 98, 6, 255, 183, 103, 9, 255, 187, 102, 13, 255, 178, 93, 5, 255, 179, 99, 4, 255, 192, 107, 3, 255, 195, 102, 11, 255, 193, 111, 5, 255, 198, 113, 12, 255, 197, 118, 11, 255, 188, 106, 6, 255, 185, 97, 8, 255, 189, 103, 8, 255, 186, 99, 3, 255, 183, 89, 11, 255, 186, 91, 8, 255, 182, 90, 7, 255, 186, 100, 9, 255, 192, 99, 4, 255, 196, 104, 7, 255, 194, 118, 9, 255, 199, 122, 9, 255, 205, 119, 7, 255, 203, 119, 6, 255, 207, 119, 12, 255, 211, 121, 10, 255, 201, 111, 3, 255, 192, 104, 11, 255, 203, 122, 13, 255, 208, 123, 5, 255, 208, 124, 1, 255, 208, 121, 4, 255, 210, 123, 6, 255, 208, 121, 8, 255, 202, 119, 6, 255, 206, 121, 10, 255, 203, 118, 4, 255, 189, 103, 8, 255, 167, 78, 4, 255, 168, 77, 11, 255, 175, 84, 12, 255, 182, 93, 7, 255, 195, 103, 17, 255, 197, 111, 13, 255, 190, 108, 15, 255, 190, 106, 17, 255, 187, 103, 0, 255, 183, 101, 6, 255, 178, 99, 11, 255, 167, 95, 10, 255, 157, 92, 5, 255, 152, 84, 14, 255, 156, 87, 7, 255, 144, 74, 3, 255, 134, 67, 10, 255, 129, 70, 7, 255, 117, 51, 15, 255, 114, 56, 12, 255, 128, 72, 14, 255, 146, 75, 9, 255, 158, 81, 4, 255, 163, 93, 7, 255, 164, 91, 10, 255, 172, 96, 10, 255, 169, 90, 12, 255, 159, 80, 3, 255, 175, 98, 17, 255, 198, 113, 18, 255, 205, 121, 8, 255, 197, 117, 11, 255, 198, 112, 13, 255, 182, 97, 6, 255, 187, 109, 15, 255, 205, 131, 21, 255, 209, 132, 12, 255, 213, 131, 20, 255, 213, 131, 8, 255, 215, 137, 4, 255, 218, 135, 15, 255, 201, 112, 15, 255, 190, 100, 14, 255, 197, 104, 28, 255, 179, 83, 7, 255, 194, 97, 17, 255, 197, 105, 9, 255, 184, 95, 2, 255, 186, 102, 8, 255, 213, 139, 18, 255, 215, 145, 12, 255, 218, 143, 9, 255, 215, 142, 7, 255, 208, 135, 6, 255, 218, 136, 20, 255, 220, 146, 6, 255, 215, 144, 10, 255, 216, 142, 18, 255, 221, 141, 12, 255, 219, 140, 4, 255, 218, 145, 5, 255, 221, 148, 17, 255, 221, 150, 4, 255, 222, 150, 5, 255, 218, 147, 11, 255, 211, 137, 1, 255, 215, 140, 4, 255, 224, 156, 18, 255, 224, 158, 11, 255, 207, 134, 9, 255, 198, 122, 17, 255, 215, 150, 4, 255, 217, 153, 0, 255, 212, 140, 6, 255, 205, 124, 15, 255, 201, 128, 15, 255, 217, 157, 22, 255, 214, 157, 7, 255, 200, 138, 10, 255, 223, 166, 14, 255, 223, 163, 9, 255, 212, 149, 10, 255, 207, 150, 12, 255, 206, 151, 2, 255, 210, 152, 7, 255, 219, 163, 2, 255, 220, 159, 2, 255, 221, 155, 8, 255, 211, 138, 7, 255, 199, 129, 12, 255, 215, 158, 12, 255, 228, 176, 5, 255, 228, 173, 10, 255, 226, 166, 10, 255, 234, 176, 12, 255, 233, 176, 0, 255, 229, 169, 3, 255, 221, 158, 10, 255, 218, 159, 6, 255, 221, 167, 4, 255, 219, 167, 6, 255, 221, 168, 8, 255, 221, 165, 6, 255, 219, 163, 3, 255, 223, 165, 5, 255, 220, 164, 5, 255, 215, 162, 10, 255, 218, 160, 4, 255, 211, 147, 3, 255, 208, 147, 9, 255, 219, 163, 9, 255, 213, 155, 0, 255, 206, 139, 3, 255, 212, 150, 7, 255, 213, 161, 2, 255, 209, 160, 5, 255, 213, 163, 13, 255, 215, 165, 7, 255, 212, 163, 7, 255, 209, 165, 9, 255, 213, 170, 3, 255, 213, 169, 9, 255, 202, 154, 8, 255, 201, 145, 5, 255, 211, 157, 6, 255, 215, 158, 15, 255, 213, 154, 15, 255, 208, 152, 3, 255, 211, 155, 4, 255, 210, 151, 4, 255, 209, 147, 3, 255, 209, 142, 8, 255, 205, 139, 4, 255, 208, 140, 13, 255, 208, 139, 7, 255, 205, 136, 5, 255, 208, 138, 7, 255, 211, 139, 13, 255, 207, 132, 20, 255, 203, 131, 3, 255, 202, 127, 5, 255, 207, 125, 7, 255, 210, 128, 3, 255, 190, 103, 10, 255, 172, 82, 5, 255, 176, 81, 6, 255, 178, 85, 6, 255, 161, 63, 7, 255, 181, 89, 6, 255, 174, 85, 0, 255, 166, 75, 6, 255, 155, 68, 4, 255, 154, 70, 0, 255, 153, 66, 4, 255, 165, 74, 8, 255, 174, 81, 4, 255, 175, 79, 6, 255, 159, 67, 6, 255, 152, 63, 4, 255, 145, 56, 9, 255, 133, 52, 6, 255, 133, 57, 2, 255, 139, 59, 2, 255, 155, 67, 7, 255, 160, 71, 5, 255, 149, 68, 5, 255, 134, 57, 7, 255, 128, 53, 4, 255, 140, 64, 4, 255, 153, 73, 4, 255, 148, 69, 3, 255, 121, 48, 4, 255, 115, 46, 11, 255, 118, 50, 5, 255, 121, 50, 0, 255, 125, 52, 4, 255, 111, 44, 1, 255, 109, 41, 4, 255, 113, 51, 5, 255, 115, 56, 4, 255, 116, 49, 2, 255, 120, 53, 0, 255, 117, 48, 0, 255, 115, 41, 7, 255, 124, 54, 6, 255, 143, 69, 1, 255, 175, 86, 12, 255, 184, 89, 12, 255, 169, 83, 1, 255, 177, 90, 0, 255, 180, 90, 1, 255, 180, 90, 2, 255, 183, 95, 5, 255, 176, 88, 2, 255, 178, 89, 2, 255, 186, 99, 4, 255, 189, 103, 0, 255, 190, 103, 1, 255, 191, 104, 1, 255, 192, 103, 2, 255, 192, 100, 4, 255, 190, 95, 2, 255, 184, 95, 1, 255, 187, 96, 5, 255, 184, 90, 2, 255, 178, 87, 0, 255, 170, 84, 2, 255, 155, 70, 3, 255, 141, 60, 4, 255, 135, 61, 4, 255, 132, 59, 5, 255, 121, 51, 2, 255, 117, 46, 5, 255, 112, 39, 6, 255, 104, 32, 3, 255, 97, 34, 0, 255, 91, 35, 2, 255, 92, 33, 6, 255, 83, 27, 1, 255, 97, 33, 5, 255, 106, 33, 10, 255, 94, 34, 2, 255, 95, 35, 2, 255, 98, 31, 3, 255, 102, 38, 7, 255, 102, 39, 1, 255, 115, 47, 6, 255, 114, 46, 3, 255, 115, 46, 2, 255, 131, 46, 3, 255, 137, 52, 1, 255, 144, 63, 2, 255, 149, 64, 2, 255, 147, 65, 4, 255, 156, 68, 5, 255, 159, 65, 2, 255, 157, 66, 1, 255, 150, 65, 2, 255, 144, 61, 1, 255, 148, 62, 3, 255, 140, 54, 0, 255, 126, 45, 2, 255, 109, 38, 5, 255, 88, 28, 1, 255, 82, 24, 1, 255, 83, 28, 5, 255, 71, 22, 1, 255, 68, 21, 0, 255, 69, 21, 2, 255, 64, 21, 3, 255, 59, 23, 5, 255, 62, 19, 4, 255, 65, 16, 2, 255, 59, 18, 3, 255, 52, 12, 1, 255, 52, 14, 2, 255, 45, 16, 4, 255, 43, 14, 4, 255, 44, 9, 2, 255, 41, 9, 2, 255, 33, 11, 3, 255, 38, 11, 2, 255, 45, 15, 3, 255, 59, 73, 119, 255, 55, 40, 6, 255, 25, 18, 1, 255, 51, 25, 50, 255, 16, 24, 140, 255, 6, 6, 37, 255, 15, 3, 0, 255, 14, 7, 4, 255, 13, 4, 2, 255, 12, 3, 2, 255, 14, 4, 3, 255, 16, 5, 3, 255, 13, 4, 1, 255, 14, 4, 3, 255, 13, 3, 2, 255, 16, 5, 4, 255, 13, 3, 1, 255, 16, 4, 2, 255, 23, 6, 6, 255, 24, 7, 4, 255, 22, 8, 3, 255, 18, 8, 1, 255, 22, 11, 4, 255, 26, 9, 5, 255, 26, 9, 5, 255, 26, 10, 5, 255, 27, 9, 2, 255, 35, 15, 7, 255, 28, 11, 3, 255, 26, 11, 4, 255, 30, 15, 6, 255, 33, 14, 2, 255, 35, 13, 3, 255, 30, 14, 4, 255, 30, 15, 5, 255, 40, 17, 6, 255, 39, 14, 3, 255, 41, 18, 5, 255, 41, 18, 7, 255, 40, 19, 4, 255, 36, 21, 4, 255, 38, 20, 4, 255, 37, 21, 0, 255, 40, 22, 4, 255, 47, 22, 1, 255, 51, 28, 3, 255, 52, 29, 1, 255, 48, 30, 4, 255, 45, 29, 5, 255, 56, 33, 4, 255, 63, 36, 3, 255, 61, 32, 2, 255, 56, 34, 4, 255, 55, 41, 5, 255, 81, 50, 3, 255, 87, 57, 3, 255, 63, 40, 5, 255, 74, 49, 2, 255, 60, 46, 2, 255, 67, 46, 2, 255, 77, 46, 1, 255, 70, 47, 1, 255, 79, 49, 5, 255, 71, 45, 3, 255, 68, 46, 13, 255, 119, 79, 8, 255, 172, 96, 16, 255, 165, 82, 9, 255, 147, 81, 8, 255, 167, 115, 0, 255, 185, 130, 7, 255, 198, 141, 6, 255, 193, 128, 2, 255, 187, 126, 2, 255, 165, 108, 11, 255, 107, 57, 4, 255, 82, 57, 1, 255, 79, 56, 5, 255, 80, 54, 5, 255, 73, 52, 1, 255, 71, 47, 2, 255, 74, 52, 11, 255, 74, 53, 5, 255, 69, 44, 6, 255, 72, 49, 1, 255, 75, 48, 1, 255, 78, 44, 5, 255, 103, 65, 8, 255, 89, 52, 2, 255, 75, 39, 2, 255, 82, 46, 4, 255, 79, 44, 4, 255, 76, 38, 4, 255, 82, 37, 6, 255, 81, 41, 1, 255, 109, 61, 7, 255, 95, 51, 5, 255, 115, 67, 7, 255, 112, 60, 5, 255, 121, 65, 2, 255, 123, 61, 5, 255, 124, 56, 6, 255, 128, 66, 4, 255, 132, 73, 10, 255, 145, 79, 5, 255, 141, 71, 6, 255, 138, 68, 1, 255, 142, 71, 8, 255, 151, 82, 11, 255, 155, 81, 12, 255, 167, 87, 13, 255, 174, 95, 4, 255, 174, 91, 2, 255, 177, 89, 10, 255, 178, 94, 7, 255, 187, 99, 4, 255, 185, 98, 12, 255, 165, 86, 8, 255, 180, 92, 4, 255, 194, 108, 4, 255, 196, 114, 3, 255, 203, 113, 5, 255, 198, 111, 16, 255, 198, 111, 9, 255, 203, 118, 2, 255, 201, 115, 6, 255, 201, 116, 8, 255, 203, 117, 4, 255, 206, 120, 3, 255, 207, 121, 13, 255, 210, 126, 5, 255, 210, 126, 4, 255, 207, 125, 6, 255, 211, 129, 8, 255, 210, 127, 16, 255, 210, 126, 4, 255, 202, 117, 13, 255, 184, 106, 9, 255, 187, 106, 15, 255, 193, 104, 14, 255, 203, 116, 11, 255, 198, 118, 17, 255, 200, 118, 9, 255, 202, 118, 4, 255, 199, 111, 17, 255, 194, 108, 15, 255, 192, 109, 8, 255, 186, 104, 5, 255, 178, 97, 12, 255, 178, 102, 8, 255, 181, 103, 8, 255, 175, 97, 12, 255, 161, 84, 9, 255, 165, 90, 16, 255, 165, 94, 8, 255, 157, 81, 18, 255, 169, 89, 20, 255, 174, 95, 7, 255, 179, 100, 12, 255, 184, 106, 11, 255, 183, 109, 8, 255, 187, 110, 13, 255, 190, 110, 13, 255, 192, 109, 20, 255, 184, 102, 14, 255, 200, 125, 14, 255, 199, 120, 12, 255, 199, 115, 4, 255, 195, 104, 7, 255, 188, 100, 11, 255, 192, 111, 9, 255, 209, 129, 20, 255, 213, 136, 5, 255, 213, 133, 11, 255, 215, 132, 20, 255, 217, 136, 13, 255, 215, 137, 7, 255, 210, 128, 11, 255, 199, 111, 8, 255, 207, 124, 10, 255, 200, 109, 16, 255, 179, 84, 5, 255, 187, 93, 10, 255, 169, 78, 4, 255, 169, 84, 23, 255, 200, 125, 18, 255, 217, 143, 17, 255, 213, 139, 14, 255, 221, 139, 11, 255, 222, 143, 19, 255, 218, 145, 16, 255, 220, 146, 14, 255, 221, 149, 13, 255, 221, 146, 17, 255, 220, 145, 13, 255, 216, 139, 8, 255, 199, 117, 17, 255, 206, 131, 10, 255, 218, 149, 14, 255, 217, 150, 7, 255, 218, 144, 8, 255, 215, 145, 8, 255, 206, 133, 8, 255, 207, 128, 4, 255, 219, 154, 22, 255, 223, 161, 14, 255, 214, 150, 9, 255, 208, 141, 3, 255, 222, 157, 14, 255, 210, 144, 8, 255, 211, 144, 6, 255, 204, 131, 12, 255, 203, 138, 11, 255, 218, 162, 7, 255, 209, 151, 2, 255, 217, 162, 8, 255, 222, 164, 4, 255, 218, 153, 0, 255, 225, 166, 3, 255, 222, 169, 12, 255, 203, 140, 5, 255, 219, 157, 7, 255, 223, 168, 7, 255, 213, 158, 1, 255, 221, 159, 9, 255, 215, 158, 0, 255, 218, 164, 7, 255, 228, 172, 16, 255, 232, 177, 8, 255, 228, 175, 5, 255, 226, 172, 2, 255, 233, 177, 4, 255, 229, 169, 8, 255, 220, 157, 10, 255, 217, 156, 9, 255, 224, 166, 11, 255, 222, 167, 8, 255, 220, 168, 6, 255, 223, 169, 9, 255, 221, 166, 7, 255, 220, 166, 5, 255, 221, 167, 6, 255, 219, 163, 6, 255, 220, 163, 12, 255, 221, 163, 9, 255, 217, 158, 6, 255, 218, 163, 5, 255, 215, 163, 2, 255, 205, 143, 2, 255, 203, 132, 3, 255, 210, 144, 7, 255, 210, 157, 6, 255, 210, 165, 6, 255, 215, 169, 7, 255, 216, 168, 6, 255, 215, 168, 2, 255, 213, 166, 10, 255, 216, 166, 4, 255, 213, 163, 2, 255, 213, 154, 5, 255, 205, 135, 7, 255, 207, 147, 9, 255, 211, 155, 5, 255, 213, 154, 7, 255, 209, 152, 5, 255, 211, 153, 9, 255, 208, 149, 7, 255, 211, 148, 6, 255, 210, 144, 10, 255, 210, 143, 5, 255, 209, 141, 12, 255, 205, 137, 3, 255, 206, 138, 2, 255, 207, 137, 12, 255, 205, 132, 12, 255, 205, 132, 12, 255, 202, 130, 8, 255, 206, 129, 10, 255, 198, 113, 12, 255, 174, 82, 4, 255, 166, 79, 2, 255, 185, 101, 8, 255, 186, 97, 11, 255, 182, 94, 4, 255, 183, 94, 7, 255, 179, 91, 4, 255, 175, 88, 7, 255, 163, 76, 6, 255, 169, 81, 4, 255, 169, 85, 3, 255, 155, 71, 0, 255, 158, 71, 1, 255, 173, 84, 0, 255, 173, 82, 6, 255, 158, 70, 4, 255, 149, 60, 1, 255, 160, 67, 4, 255, 159, 72, 3, 255, 144, 62, 3, 255, 138, 52, 6, 255, 137, 44, 9, 255, 149, 54, 7, 255, 155, 70, 8, 255, 145, 71, 4, 255, 145, 72, 6, 255, 148, 70, 4, 255, 148, 67, 4, 255, 132, 59, 2, 255, 120, 57, 4, 255, 123, 51, 4, 255, 120, 52, 1, 255, 121, 51, 5, 255, 124, 45, 8, 255, 114, 47, 2, 255, 112, 47, 8, 255, 102, 42, 9, 255, 93, 36, 0, 255, 114, 47, 5, 255, 121, 54, 3, 255, 117, 47, 5, 255, 109, 37, 5, 255, 140, 63, 16, 255, 164, 79, 12, 255, 175, 85, 4, 255, 174, 85, 0, 255, 172, 90, 2, 255, 177, 91, 3, 255, 180, 90, 1, 255, 182, 92, 3, 255, 184, 95, 7, 255, 181, 93, 5, 255, 180, 93, 2, 255, 184, 97, 2, 255, 184, 98, 0, 255, 189, 101, 3, 255, 188, 101, 4, 255, 189, 101, 4, 255, 189, 102, 4, 255, 187, 100, 2, 255, 186, 96, 2, 255, 184, 94, 1, 255, 184, 94, 3, 255, 182, 91, 4, 255, 177, 84, 1, 255, 177, 82, 3, 255, 171, 81, 6, 255, 139, 60, 1, 255, 126, 51, 2, 255, 126, 52, 1, 255, 123, 54, 1, 255, 119, 55, 3, 255, 109, 46, 3, 255, 104, 36, 5, 255, 97, 34, 0, 255, 107, 36, 4, 255, 98, 37, 8, 255, 90, 27, 3, 255, 91, 29, 3, 255, 101, 40, 2, 255, 97, 34, 3, 255, 83, 23, 2, 255, 93, 30, 4, 255, 95, 32, 0, 255, 104, 43, 2, 255, 112, 49, 3, 255, 119, 50, 3, 255, 118, 43, 2, 255, 120, 47, 4, 255, 120, 52, 3, 255, 125, 54, 4, 255, 135, 55, 6, 255, 140, 61, 2, 255, 139, 57, 0, 255, 140, 56, 1, 255, 136, 56, 4, 255, 131, 53, 4, 255, 130, 52, 4, 255, 129, 50, 4, 255, 120, 42, 4, 255, 99, 29, 2, 255, 82, 25, 0, 255, 83, 28, 4, 255, 80, 27, 7, 255, 64, 20, 3, 255, 66, 23, 1, 255, 72, 25, 4, 255, 65, 26, 5, 255, 53, 20, 0, 255, 55, 17, 1, 255, 62, 17, 2, 255, 59, 19, 3, 255, 55, 14, 1, 255, 61, 17, 5, 255, 54, 12, 2, 255, 51, 13, 2, 255, 44, 16, 2, 255, 31, 15, 1, 255, 32, 11, 5, 255, 31, 11, 3, 255, 33, 12, 1, 255, 40, 40, 7, 255, 27, 20, 0, 255, 47, 26, 48, 255, 14, 25, 158, 255, 6, 6, 40, 255, 14, 2, 0, 255, 11, 6, 4, 255, 13, 5, 3, 255, 15, 5, 4, 255, 14, 3, 1, 255, 16, 5, 2, 255, 12, 1, 1, 255, 11, 3, 1, 255, 13, 5, 3, 255, 13, 4, 3, 255, 15, 5, 3, 255, 15, 6, 3, 255, 16, 5, 3, 255, 21, 7, 5, 255, 15, 3, 3, 255, 16, 6, 4, 255, 19, 9, 6, 255, 23, 9, 4, 255, 25, 8, 2, 255, 27, 10, 2, 255, 26, 12, 7, 255, 21, 9, 7, 255, 26, 11, 6, 255, 25, 10, 5, 255, 28, 11, 7, 255, 30, 12, 9, 255, 30, 11, 7, 255, 32, 15, 9, 255, 33, 14, 4, 255, 34, 16, 3, 255, 35, 16, 9, 255, 32, 16, 7, 255, 40, 19, 6, 255, 35, 19, 4, 255, 37, 20, 2, 255, 37, 23, 4, 255, 36, 24, 5, 255, 37, 22, 2, 255, 42, 23, 5, 255, 43, 26, 4, 255, 47, 27, 5, 255, 44, 29, 1, 255, 45, 27, 8, 255, 54, 32, 4, 255, 55, 35, 3, 255, 57, 36, 5, 255, 59, 37, 6, 255, 54, 36, 2, 255, 73, 49, 2, 255, 86, 58, 2, 255, 68, 46, 8, 255, 72, 47, 7, 255, 73, 46, 1, 255, 66, 47, 4, 255, 69, 44, 3, 255, 72, 45, 3, 255, 68, 49, 6, 255, 62, 44, 1, 255, 90, 61, 9, 255, 155, 88, 17, 255, 180, 88, 13, 255, 136, 69, 3, 255, 95, 68, 6, 255, 157, 123, 8, 255, 193, 137, 0, 255, 191, 121, 10, 255, 191, 131, 11, 255, 192, 125, 1, 255, 148, 87, 3, 255, 89, 54, 2, 255, 87, 53, 4, 255, 85, 52, 9, 255, 81, 52, 3, 255, 77, 50, 5, 255, 63, 46, 3, 255, 71, 49, 1, 255, 72, 45, 1, 255, 76, 48, 2, 255, 79, 50, 2, 255, 81, 49, 1, 255, 84, 50, 6, 255, 81, 48, 9, 255, 76, 46, 3, 255, 78, 49, 4, 255, 85, 49, 7, 255, 94, 47, 2, 255, 77, 47, 3, 255, 71, 42, 8, 255, 79, 45, 6, 255, 68, 46, 5, 255, 103, 58, 8, 255, 70, 34, 3, 255, 67, 40, 6, 255, 85, 48, 3, 255, 94, 51, 6, 255, 61, 38, 2, 255, 67, 38, 7, 255, 69, 40, 4, 255, 76, 39, 6, 255, 81, 41, 3, 255, 81, 39, 6, 255, 81, 40, 3, 255, 77, 37, 3, 255, 94, 46, 8, 255, 90, 51, 6, 255, 95, 46, 4, 255, 114, 53, 8, 255, 123, 57, 6, 255, 135, 68, 8, 255, 147, 77, 8, 255, 152, 81, 8, 255, 163, 77, 10, 255, 166, 83, 7, 255, 176, 92, 5, 255, 182, 99, 8, 255, 181, 102, 3, 255, 193, 107, 4, 255, 188, 104, 6, 255, 184, 96, 13, 255, 187, 97, 12, 255, 198, 110, 12, 255, 196, 109, 4, 255, 196, 109, 2, 255, 201, 114, 4, 255, 206, 119, 13, 255, 205, 119, 8, 255, 209, 124, 7, 255, 210, 125, 9, 255, 212, 127, 3, 255, 213, 127, 5, 255, 213, 129, 10, 255, 212, 128, 16, 255, 220, 139, 11, 255, 217, 140, 18, 255, 216, 136, 31, 255, 207, 123, 10, 255, 206, 124, 9, 255, 210, 124, 12, 255, 206, 119, 6, 255, 203, 115, 10, 255, 198, 110, 18, 255, 191, 107, 6, 255, 188, 103, 5, 255, 185, 104, 14, 255, 188, 112, 13, 255, 194, 115, 9, 255, 193, 110, 10, 255, 181, 101, 6, 255, 184, 106, 9, 255, 194, 113, 12, 255, 194, 112, 7, 255, 185, 101, 6, 255, 190, 106, 13, 255, 193, 113, 11, 255, 194, 117, 4, 255, 196, 115, 14, 255, 196, 113, 17, 255, 201, 119, 8, 255, 202, 118, 4, 255, 196, 106, 16, 255, 196, 105, 6, 255, 201, 116, 10, 255, 198, 114, 11, 255, 193, 106, 14, 255, 206, 120, 19, 255, 213, 133, 12, 255, 215, 134, 15, 255, 212, 130, 8, 255, 210, 129, 10, 255, 218, 139, 7, 255, 214, 136, 13, 255, 214, 139, 9, 255, 212, 136, 9, 255, 216, 136, 12, 255, 220, 137, 14, 255, 192, 109, 11, 255, 193, 107, 10, 255, 176, 85, 6, 255, 178, 98, 11, 255, 208, 139, 25, 255, 214, 146, 10, 255, 216, 138, 13, 255, 221, 139, 6, 255, 217, 145, 8, 255, 221, 146, 14, 255, 211, 134, 5, 255, 207, 136, 20, 255, 215, 149, 29, 255, 217, 151, 6, 255, 212, 140, 9, 255, 199, 125, 12, 255, 207, 137, 12, 255, 210, 144, 7, 255, 209, 132, 13, 255, 207, 127, 5, 255, 204, 128, 9, 255, 215, 147, 17, 255, 202, 133, 7, 255, 205, 134, 4, 255, 217, 157, 2, 255, 225, 166, 10, 255, 216, 160, 16, 255, 217, 159, 12, 255, 221, 159, 11, 255, 216, 156, 4, 255, 218, 161, 5, 255, 209, 148, 10, 255, 209, 147, 10, 255, 206, 147, 11, 255, 214, 157, 9, 255, 224, 166, 7, 255, 217, 158, 5, 255, 212, 155, 11, 255, 225, 167, 3, 255, 223, 160, 7, 255, 214, 154, 16, 255, 218, 166, 3, 255, 221, 164, 2, 255, 225, 165, 6, 255, 221, 164, 13, 255, 218, 163, 13, 255, 211, 157, 5, 255, 223, 168, 11, 255, 231, 177, 9, 255, 228, 174, 4, 255, 230, 178, 4, 255, 228, 174, 7, 255, 223, 167, 9, 255, 220, 164, 5, 255, 222, 167, 5, 255, 225, 171, 10, 255, 221, 169, 9, 255, 221, 167, 6, 255, 224, 170, 9, 255, 220, 166, 6, 255, 222, 168, 6, 255, 222, 169, 4, 255, 220, 167, 4, 255, 220, 161, 6, 255, 207, 151, 9, 255, 205, 156, 4, 255, 220, 163, 8, 255, 216, 152, 2, 255, 203, 137, 6, 255, 206, 140, 12, 255, 207, 142, 6, 255, 207, 153, 7, 255, 214, 166, 8, 255, 218, 171, 4, 255, 217, 169, 4, 255, 216, 168, 10, 255, 219, 167, 13, 255, 216, 162, 1, 255, 214, 159, 4, 255, 208, 147, 2, 255, 203, 130, 2, 255, 209, 144, 9, 255, 215, 154, 13, 255, 208, 147, 9, 255, 209, 149, 7, 255, 212, 152, 12, 255, 210, 148, 8, 255, 209, 145, 2, 255, 210, 142, 7, 255, 211, 142, 6, 255, 208, 137, 11, 255, 206, 133, 4, 255, 207, 134, 4, 255, 206, 133, 11, 255, 200, 128, 8, 255, 200, 128, 4, 255, 199, 128, 1, 255, 209, 135, 4, 255, 182, 97, 3, 255, 172, 82, 9, 255, 192, 109, 7, 255, 193, 113, 7, 255, 197, 116, 6, 255, 197, 115, 9, 255, 197, 115, 5, 255, 181, 98, 2, 255, 179, 96, 12, 255, 168, 84, 7, 255, 163, 73, 6, 255, 165, 81, 12, 255, 150, 68, 9, 255, 149, 65, 4, 255, 166, 80, 3, 255, 166, 79, 1, 255, 171, 78, 8, 255, 168, 73, 9, 255, 156, 61, 0, 255, 155, 62, 0, 255, 142, 51, 7, 255, 131, 44, 8, 255, 130, 47, 9, 255, 122, 43, 5, 255, 126, 48, 1, 255, 146, 60, 5, 255, 149, 67, 6, 255, 144, 67, 4, 255, 127, 54, 3, 255, 123, 44, 11, 255, 119, 55, 14, 255, 127, 50, 6, 255, 124, 53, 1, 255, 121, 51, 5, 255, 121, 41, 7, 255, 114, 49, 4, 255, 117, 55, 6, 255, 113, 52, 8, 255, 102, 38, 0, 255, 108, 43, 2, 255, 117, 51, 3, 255, 107, 44, 4, 255, 114, 48, 2, 255, 157, 78, 5, 255, 168, 81, 2, 255, 165, 86, 10, 255, 167, 92, 4, 255, 175, 91, 1, 255, 176, 88, 3, 255, 177, 90, 1, 255, 177, 89, 0, 255, 178, 89, 3, 255, 181, 94, 5, 255, 183, 94, 1, 255, 183, 93, 2, 255, 185, 93, 1, 255, 183, 92, 1, 255, 185, 94, 3, 255, 186, 97, 3, 255, 186, 97, 3, 255, 185, 97, 1, 255, 186, 95, 1, 255, 185, 94, 1, 255, 186, 94, 2, 255, 186, 92, 4, 255, 184, 90, 2, 255, 182, 88, 1, 255, 178, 89, 2, 255, 156, 72, 2, 255, 134, 51, 5, 255, 129, 54, 6, 255, 129, 53, 6, 255, 125, 45, 3, 255, 125, 49, 3, 255, 108, 40, 8, 255, 101, 31, 0, 255, 106, 36, 4, 255, 97, 32, 2, 255, 88, 31, 4, 255, 78, 30, 2, 255, 84, 29, 4, 255, 106, 42, 8, 255, 95, 36, 1, 255, 67, 19, 2, 255, 64, 19, 9, 255, 76, 27, 6, 255, 86, 32, 1, 255, 87, 30, 0, 255, 98, 29, 5, 255, 118, 43, 7, 255, 121, 47, 3, 255, 122, 49, 4, 255, 123, 50, 1, 255, 130, 48, 5, 255, 127, 46, 4, 255, 125, 45, 4, 255, 121, 42, 5, 255, 110, 36, 3, 255, 96, 31, 4, 255, 92, 30, 2, 255, 100, 34, 1, 255, 99, 33, 6, 255, 90, 30, 4, 255, 80, 24, 1, 255, 67, 16, 1, 255, 58, 18, 7, 255, 67, 23, 2, 255, 69, 25, 1, 255, 76, 27, 4, 255, 73, 19, 1, 255, 72, 22, 4, 255, 66, 21, 7, 255, 68, 20, 7, 255, 65, 18, 3, 255, 66, 23, 6, 255, 63, 19, 3, 255, 60, 20, 3, 255, 54, 20, 4, 255, 45, 16, 1, 255, 41, 15, 2, 255, 38, 13, 1, 255, 32, 12, 0, 255, 31, 17, 0, 255, 38, 29, 43, 255, 15, 24, 152, 255, 10, 10, 56, 255, 13, 2, 0, 255, 11, 4, 2, 255, 13, 3, 5, 255, 16, 5, 6, 255, 14, 6, 4, 255, 10, 4, 1, 255, 12, 5, 2, 255, 13, 2, 2, 255, 14, 3, 3, 255, 9, 3, 1, 255, 14, 4, 3, 255, 14, 4, 3, 255, 13, 5, 2, 255, 14, 4, 2, 255, 19, 5, 4, 255, 16, 5, 4, 255, 16, 6, 5, 255, 21, 9, 6, 255, 24, 9, 4, 255, 25, 7, 3, 255, 24, 10, 5, 255, 23, 12, 9, 255, 19, 9, 6, 255, 24, 13, 7, 255, 25, 12, 7, 255, 21, 11, 6, 255, 19, 11, 5, 255, 22, 17, 9, 255, 27, 12, 5, 255, 30, 14, 5, 255, 30, 15, 4, 255, 33, 14, 7, 255, 33, 18, 9, 255, 33, 16, 5, 255, 32, 20, 6, 255, 36, 20, 3, 255, 42, 24, 7, 255, 37, 25, 6, 255, 38, 23, 3, 255, 42, 25, 8, 255, 39, 24, 0, 255, 50, 26, 0, 255, 45, 28, 4, 255, 53, 29, 3, 255, 63, 35, 1, 255, 59, 36, 1, 255, 63, 39, 1, 255, 60, 39, 5, 255, 66, 36, 6, 255, 84, 61, 0, 255, 78, 49, 6, 255, 72, 46, 2, 255, 71, 52, 1, 255, 69, 46, 7, 255, 63, 46, 5, 255, 63, 41, 0, 255, 60, 43, 2, 255, 74, 47, 7, 255, 130, 75, 4, 255, 171, 100, 13, 255, 140, 76, 9, 255, 96, 54, 2, 255, 85, 51, 4, 255, 152, 99, 6, 255, 201, 140, 1, 255, 188, 125, 5, 255, 179, 120, 3, 255, 196, 132, 4, 255, 151, 87, 4, 255, 91, 49, 4, 255, 77, 55, 1, 255, 77, 52, 5, 255, 74, 49, 2, 255, 68, 44, 0, 255, 68, 44, 3, 255, 83, 51, 7, 255, 69, 47, 6, 255, 71, 47, 1, 255, 82, 49, 0, 255, 73, 46, 5, 255, 81, 50, 8, 255, 80, 45, 3, 255, 78, 45, 4, 255, 78, 47, 8, 255, 75, 42, 1, 255, 80, 43, 3, 255, 83, 45, 7, 255, 84, 46, 2, 255, 90, 41, 2, 255, 80, 42, 3, 255, 75, 45, 3, 255, 71, 40, 3, 255, 70, 37, 10, 255, 70, 41, 1, 255, 75, 48, 2, 255, 67, 36, 12, 255, 75, 44, 7, 255, 81, 44, 2, 255, 86, 49, 5, 255, 81, 43, 2, 255, 84, 46, 2, 255, 82, 45, 6, 255, 82, 47, 4, 255, 82, 44, 3, 255, 86, 43, 1, 255, 86, 43, 5, 255, 81, 43, 3, 255, 83, 40, 2, 255, 90, 48, 7, 255, 88, 50, 6, 255, 88, 40, 4, 255, 92, 41, 7, 255, 88, 45, 4, 255, 101, 53, 1, 255, 127, 60, 13, 255, 149, 71, 8, 255, 169, 88, 1, 255, 183, 101, 5, 255, 190, 108, 5, 255, 186, 102, 8, 255, 180, 96, 6, 255, 187, 105, 6, 255, 190, 105, 3, 255, 191, 105, 5, 255, 196, 107, 12, 255, 187, 100, 5, 255, 183, 96, 11, 255, 202, 116, 12, 255, 206, 118, 19, 255, 208, 118, 13, 255, 209, 120, 10, 255, 207, 123, 13, 255, 210, 124, 21, 255, 213, 126, 5, 255, 212, 129, 25, 255, 209, 125, 38, 255, 207, 120, 15, 255, 209, 123, 22, 255, 205, 112, 38, 255, 200, 109, 10, 255, 201, 112, 8, 255, 198, 111, 9, 255, 190, 105, 5, 255, 189, 109, 16, 255, 197, 112, 27, 255, 195, 111, 7, 255, 193, 110, 8, 255, 192, 111, 6, 255, 191, 109, 4, 255, 202, 116, 19, 255, 197, 113, 14, 255, 186, 104, 5, 255, 189, 110, 5, 255, 181, 98, 18, 255, 195, 114, 13, 255, 198, 114, 6, 255, 193, 108, 15, 255, 199, 119, 8, 255, 189, 109, 11, 255, 196, 116, 14, 255, 198, 117, 10, 255, 201, 119, 9, 255, 213, 129, 14, 255, 208, 126, 7, 255, 209, 128, 14, 255, 218, 138, 15, 255, 208, 128, 1, 255, 201, 116, 10, 255, 197, 108, 10, 255, 205, 117, 18, 255, 218, 135, 16, 255, 214, 136, 8, 255, 213, 139, 8, 255, 216, 140, 12, 255, 211, 131, 17, 255, 209, 119, 13, 255, 209, 125, 14, 255, 205, 130, 10, 255, 183, 111, 7, 255, 201, 132, 20, 255, 218, 147, 20, 255, 218, 143, 10, 255, 210, 122, 15, 255, 201, 118, 13, 255, 212, 147, 13, 255, 215, 148, 15, 255, 213, 134, 14, 255, 217, 141, 22, 255, 218, 151, 19, 255, 212, 148, 18, 255, 202, 135, 10, 255, 195, 121, 14, 255, 209, 136, 14, 255, 210, 145, 10, 255, 196, 125, 12, 255, 180, 99, 8, 255, 181, 105, 11, 255, 198, 132, 10, 255, 197, 129, 8, 255, 201, 133, 17, 255, 217, 160, 13, 255, 219, 159, 8, 255, 216, 165, 10, 255, 228, 177, 12, 255, 213, 154, 1, 255, 223, 165, 4, 255, 216, 161, 12, 255, 205, 148, 9, 255, 220, 159, 9, 255, 215, 156, 7, 255, 212, 159, 0, 255, 209, 147, 7, 255, 220, 165, 5, 255, 213, 163, 10, 255, 211, 151, 6, 255, 213, 141, 13, 255, 214, 154, 5, 255, 213, 159, 3, 255, 223, 169, 7, 255, 217, 168, 2, 255, 217, 162, 3, 255, 224, 171, 9, 255, 217, 164, 3, 255, 214, 158, 3, 255, 227, 174, 3, 255, 227, 173, 5, 255, 228, 178, 1, 255, 228, 177, 2, 255, 221, 168, 0, 255, 225, 171, 2, 255, 227, 173, 7, 255, 222, 168, 9, 255, 222, 169, 9, 255, 223, 170, 3, 255, 222, 169, 6, 255, 221, 167, 5, 255, 223, 170, 4, 255, 223, 171, 2, 255, 222, 171, 2, 255, 224, 168, 5, 255, 215, 163, 6, 255, 214, 169, 3, 255, 211, 157, 4, 255, 204, 136, 10, 255, 196, 129, 8, 255, 199, 135, 5, 255, 201, 138, 7, 255, 210, 152, 8, 255, 214, 165, 5, 255, 218, 172, 4, 255, 216, 170, 4, 255, 217, 170, 8, 255, 214, 164, 13, 255, 212, 157, 10, 255, 212, 158, 10, 255, 196, 137, 7, 255, 201, 135, 5, 255, 211, 151, 5, 255, 213, 153, 13, 255, 207, 141, 13, 255, 205, 143, 9, 255, 211, 148, 6, 255, 209, 145, 7, 255, 206, 141, 3, 255, 209, 141, 4, 255, 210, 143, 5, 255, 206, 133, 10, 255, 203, 129, 8, 255, 205, 132, 10, 255, 208, 136, 13, 255, 206, 137, 5, 255, 201, 129, 15, 255, 197, 123, 16, 255, 200, 123, 6, 255, 196, 114, 6, 255, 197, 117, 3, 255, 198, 119, 8, 255, 202, 125, 5, 255, 199, 119, 8, 255, 198, 116, 12, 255, 188, 104, 4, 255, 179, 96, 4, 255, 174, 92, 4, 255, 180, 100, 5, 255, 181, 97, 5, 255, 166, 86, 2, 255, 150, 71, 4, 255, 151, 70, 10, 255, 160, 75, 8, 255, 159, 74, 4, 255, 173, 82, 6, 255, 163, 71, 1, 255, 147, 63, 6, 255, 148, 67, 7, 255, 137, 50, 8, 255, 137, 49, 13, 255, 130, 48, 1, 255, 120, 48, 2, 255, 125, 46, 4, 255, 120, 43, 3, 255, 117, 44, 5, 255, 116, 39, 1, 255, 115, 42, 4, 255, 118, 46, 2, 255, 114, 50, 8, 255, 118, 47, 2, 255, 116, 46, 2, 255, 115, 44, 6, 255, 118, 48, 2, 255, 116, 54, 4, 255, 110, 49, 3, 255, 104, 41, 4, 255, 102, 38, 1, 255, 109, 49, 3, 255, 128, 59, 4, 255, 136, 66, 2, 255, 154, 81, 11, 255, 172, 96, 5, 255, 173, 93, 1, 255, 173, 93, 10, 255, 169, 92, 1, 255, 172, 92, 0, 255, 175, 92, 3, 255, 174, 90, 2, 255, 174, 88, 0, 255, 179, 92, 3, 255, 180, 93, 4, 255, 180, 92, 0, 255, 182, 92, 1, 255, 183, 93, 2, 255, 185, 95, 4, 255, 183, 93, 2, 255, 181, 92, 0, 255, 185, 94, 1, 255, 188, 96, 3, 255, 184, 95, 1, 255, 186, 96, 0, 255, 184, 94, 2, 255, 181, 90, 1, 255, 181, 91, 2, 255, 182, 92, 0, 255, 185, 92, 3, 255, 175, 83, 3, 255, 145, 67, 3, 255, 126, 53, 7, 255, 108, 41, 6, 255, 94, 31, 1, 255, 101, 36, 4, 255, 110, 51, 4, 255, 104, 41, 0, 255, 97, 37, 1, 255, 97, 34, 1, 255, 87, 29, 0, 255, 84, 33, 4, 255, 83, 25, 3, 255, 83, 27, 1, 255, 77, 26, 2, 255, 67, 21, 3, 255, 60, 22, 3, 255, 53, 19, 1, 255, 60, 21, 5, 255, 54, 16, 4, 255, 55, 11, 6, 255, 67, 19, 1, 255, 72, 20, 0, 255, 72, 21, 3, 255, 78, 28, 3, 255, 85, 21, 3, 255, 81, 18, 0, 255, 86, 25, 0, 255, 95, 27, 1, 255, 90, 25, 1, 255, 79, 24, 1, 255, 75, 26, 2, 255, 82, 27, 2, 255, 94, 31, 4, 255, 96, 35, 6, 255, 84, 25, 1, 255, 74, 22, 4, 255, 56, 17, 1, 255, 68, 24, 4, 255, 61, 23, 0, 255, 70, 24, 4, 255, 75, 19, 4, 255, 69, 19, 4, 255, 63, 19, 5, 255, 63, 18, 5, 255, 56, 19, 2, 255, 61, 24, 5, 255, 65, 20, 2, 255, 62, 18, 1, 255, 59, 15, 2, 255, 60, 13, 2, 255, 57, 18, 2, 255, 52, 17, 3, 255, 44, 13, 3, 255, 45, 23, 29, 255, 14, 22, 144, 255, 4, 8, 46, 255, 14, 3, 0, 255, 15, 5, 9, 255, 15, 5, 5, 255, 14, 3, 4, 255, 15, 6, 8, 255, 11, 2, 1, 255, 11, 4, 2, 255, 11, 3, 1, 255, 13, 3, 2, 255, 12, 4, 2, 255, 12, 5, 2, 255, 15, 5, 4, 255, 16, 6, 5, 255, 16, 6, 5, 255, 16, 6, 4, 255, 18, 6, 5, 255, 21, 8, 7, 255, 17, 6, 2, 255, 18, 6, 2, 255, 24, 10, 4, 255, 25, 11, 7, 255, 23, 13, 9, 255, 21, 11, 7, 255, 22, 11, 4, 255, 27, 17, 6, 255, 27, 13, 5, 255, 29, 13, 6, 255, 29, 15, 7, 255, 27, 15, 5, 255, 31, 16, 7, 255, 28, 16, 10, 255, 28, 17, 10, 255, 34, 16, 5, 255, 33, 16, 2, 255, 31, 17, 7, 255, 29, 17, 6, 255, 41, 23, 6, 255, 38, 19, 3, 255, 37, 23, 4, 255, 40, 24, 4, 255, 44, 28, 9, 255, 37, 26, 2, 255, 43, 27, 4, 255, 48, 27, 6, 255, 50, 33, 2, 255, 54, 34, 2, 255, 63, 38, 0, 255, 57, 37, 3, 255, 58, 37, 3, 255, 90, 56, 11, 255, 83, 46, 4, 255, 70, 42, 1, 255, 64, 44, 5, 255, 59, 44, 1, 255, 54, 39, 6, 255, 63, 44, 2, 255, 84, 56, 4, 255, 121, 78, 12, 255, 159, 89, 9, 255, 151, 84, 7, 255, 105, 57, 4, 255, 83, 54, 1, 255, 84, 64, 3, 255, 120, 85, 6, 255, 187, 132, 11, 255, 198, 141, 2, 255, 189, 131, 3, 255, 184, 130, 3, 255, 152, 98, 1, 255, 98, 56, 10, 255, 77, 46, 4, 255, 77, 42, 0, 255, 70, 49, 4, 255, 68, 48, 1, 255, 74, 49, 4, 255, 66, 46, 6, 255, 64, 45, 4, 255, 70, 50, 3, 255, 76, 49, 1, 255, 82, 50, 5, 255, 75, 48, 2, 255, 78, 47, 4, 255, 79, 43, 1, 255, 77, 45, 4, 255, 75, 46, 6, 255, 79, 49, 5, 255, 78, 45, 2, 255, 73, 43, 8, 255, 78, 41, 6, 255, 80, 42, 4, 255, 69, 41, 4, 255, 79, 45, 6, 255, 72, 43, 6, 255, 72, 44, 6, 255, 66, 45, 1, 255, 81, 46, 3, 255, 86, 47, 4, 255, 74, 44, 4, 255, 77, 44, 0, 255, 93, 45, 2, 255, 86, 46, 5, 255, 80, 43, 2, 255, 82, 43, 5, 255, 82, 42, 3, 255, 87, 46, 5, 255, 77, 46, 2, 255, 83, 44, 6, 255, 87, 42, 6, 255, 82, 42, 6, 255, 80, 41, 7, 255, 86, 43, 7, 255, 83, 44, 1, 255, 82, 41, 1, 255, 85, 43, 2, 255, 84, 39, 6, 255, 90, 38, 6, 255, 90, 50, 5, 255, 109, 64, 6, 255, 150, 80, 5, 255, 171, 87, 10, 255, 174, 91, 11, 255, 180, 97, 7, 255, 170, 88, 0, 255, 176, 95, 4, 255, 178, 99, 9, 255, 184, 101, 7, 255, 176, 93, 1, 255, 178, 95, 2, 255, 197, 113, 7, 255, 198, 111, 6, 255, 204, 116, 5, 255, 202, 118, 1, 255, 202, 122, 8, 255, 208, 123, 18, 255, 209, 122, 10, 255, 208, 126, 4, 255, 204, 123, 0, 255, 207, 119, 9, 255, 205, 119, 22, 255, 198, 109, 27, 255, 200, 114, 14, 255, 198, 113, 7, 255, 193, 109, 11, 255, 198, 117, 7, 255, 198, 118, 5, 255, 198, 118, 14, 255, 200, 118, 15, 255, 200, 115, 18, 255, 198, 113, 6, 255, 202, 120, 12, 255, 182, 101, 8, 255, 165, 78, 14, 255, 197, 114, 8, 255, 199, 116, 14, 255, 179, 89, 10, 255, 194, 108, 13, 255, 189, 104, 17, 255, 196, 115, 22, 255, 207, 132, 8, 255, 206, 128, 17, 255, 210, 131, 13, 255, 213, 132, 13, 255, 206, 120, 9, 255, 205, 119, 14, 255, 204, 125, 5, 255, 208, 128, 8, 255, 209, 129, 13, 255, 204, 122, 5, 255, 199, 112, 9, 255, 210, 125, 15, 255, 216, 131, 15, 255, 212, 130, 9, 255, 211, 131, 15, 255, 209, 133, 14, 255, 212, 137, 3, 255, 204, 123, 14, 255, 203, 120, 11, 255, 215, 132, 15, 255, 213, 137, 18, 255, 212, 143, 30, 255, 212, 141, 12, 255, 212, 143, 5, 255, 213, 142, 10, 255, 196, 118, 8, 255, 180, 103, 16, 255, 207, 138, 13, 255, 216, 149, 17, 255, 213, 147, 15, 255, 221, 152, 25, 255, 218, 151, 16, 255, 223, 155, 14, 255, 220, 149, 11, 255, 205, 135, 8, 255, 210, 143, 15, 255, 215, 151, 11, 255, 197, 127, 12, 255, 181, 104, 21, 255, 183, 118, 11, 255, 205, 152, 13, 255, 206, 151, 9, 255, 205, 150, 12, 255, 215, 164, 8, 255, 215, 157, 4, 255, 216, 163, 11, 255, 228, 179, 7, 255, 217, 159, 4, 255, 218, 160, 3, 255, 217, 163, 17, 255, 203, 146, 7, 255, 204, 141, 6, 255, 210, 151, 1, 255, 202, 141, 8, 255, 204, 143, 8, 255, 217, 167, 3, 255, 219, 175, 8, 255, 204, 148, 12, 255, 179, 111, 13, 255, 210, 155, 14, 255, 212, 161, 9, 255, 208, 148, 8, 255, 210, 150, 1, 255, 215, 155, 6, 255, 220, 164, 1, 255, 220, 164, 5, 255, 207, 148, 7, 255, 223, 168, 6, 255, 220, 169, 4, 255, 225, 173, 6, 255, 225, 171, 5, 255, 218, 164, 1, 255, 219, 163, 2, 255, 216, 161, 1, 255, 217, 162, 2, 255, 218, 165, 5, 255, 224, 171, 1, 255, 223, 170, 2, 255, 223, 170, 3, 255, 225, 173, 3, 255, 224, 173, 2, 255, 223, 172, 2, 255, 221, 170, 6, 255, 222, 169, 10, 255, 220, 169, 7, 255, 208, 154, 4, 255, 192, 133, 10, 255, 187, 122, 13, 255, 194, 132, 1, 255, 201, 142, 4, 255, 216, 161, 8, 255, 216, 167, 4, 255, 220, 175, 10, 255, 215, 171, 6, 255, 217, 170, 7, 255, 210, 158, 4, 255, 207, 151, 4, 255, 209, 156, 4, 255, 201, 145, 8, 255, 207, 145, 7, 255, 210, 150, 4, 255, 210, 150, 5, 255, 208, 144, 12, 255, 208, 146, 10, 255, 208, 147, 1, 255, 206, 139, 6, 255, 207, 138, 9, 255, 210, 142, 10, 255, 209, 142, 11, 255, 203, 135, 9, 255, 202, 132, 4, 255, 206, 137, 8, 255, 209, 140, 14, 255, 208, 142, 10, 255, 209, 138, 20, 255, 201, 125, 19, 255, 199, 121, 2, 255, 203, 124, 9, 255, 201, 124, 7, 255, 197, 118, 12, 255, 200, 121, 10, 255, 202, 120, 9, 255, 190, 107, 3, 255, 183, 98, 3, 255, 185, 101, 2, 255, 179, 95, 6, 255, 177, 95, 4, 255, 185, 102, 5, 255, 182, 104, 7, 255, 179, 102, 9, 255, 167, 89, 1, 255, 172, 90, 2, 255, 176, 93, 7, 255, 179, 88, 5, 255, 175, 82, 1, 255, 164, 76, 10, 255, 153, 68, 5, 255, 144, 62, 1, 255, 136, 58, 6, 255, 125, 49, 6, 255, 115, 43, 7, 255, 121, 45, 4, 255, 115, 44, 2, 255, 106, 36, 0, 255, 102, 39, 3, 255, 111, 46, 2, 255, 115, 44, 4, 255, 116, 41, 3, 255, 117, 47, 3, 255, 117, 42, 2, 255, 117, 40, 6, 255, 121, 52, 5, 255, 127, 55, 0, 255, 119, 48, 2, 255, 112, 42, 10, 255, 102, 40, 5, 255, 101, 46, 6, 255, 121, 56, 6, 255, 154, 85, 2, 255, 168, 94, 8, 255, 171, 93, 9, 255, 173, 89, 1, 255, 176, 91, 2, 255, 174, 93, 6, 255, 169, 90, 3, 255, 171, 92, 1, 255, 173, 89, 5, 255, 176, 90, 2, 255, 179, 94, 2, 255, 178, 93, 3, 255, 179, 91, 2, 255, 182, 94, 1, 255, 181, 95, 2, 255, 179, 93, 1, 255, 181, 94, 2, 255, 184, 96, 2, 255, 184, 92, 0, 255, 183, 89, 0, 255, 182, 95, 0, 255, 181, 95, 1, 255, 181, 95, 4, 255, 180, 92, 3, 255, 177, 88, 1, 255, 181, 92, 4, 255, 184, 94, 6, 255, 180, 89, 1, 255, 177, 88, 2, 255, 169, 83, 8, 255, 154, 74, 4, 255, 134, 61, 0, 255, 116, 51, 6, 255, 110, 51, 4, 255, 107, 41, 2, 255, 101, 40, 4, 255, 95, 30, 3, 255, 88, 29, 2, 255, 83, 30, 0, 255, 79, 26, 6, 255, 69, 22, 6, 255, 68, 26, 1, 255, 78, 29, 0, 255, 86, 25, 1, 255, 76, 25, 3, 255, 72, 32, 2, 255, 74, 25, 1, 255, 66, 23, 7, 255, 69, 22, 4, 255, 64, 18, 5, 255, 47, 12, 6, 255, 45, 15, 3, 255, 51, 18, 2, 255, 52, 20, 3, 255, 60, 24, 3, 255, 70, 23, 2, 255, 77, 24, 3, 255, 75, 24, 4, 255, 73, 24, 4, 255, 80, 24, 5, 255, 84, 27, 1, 255, 86, 35, 2, 255, 85, 32, 2, 255, 84, 29, 4, 255, 82, 30, 3, 255, 85, 33, 4, 255, 74, 30, 2, 255, 70, 23, 2, 255, 75, 22, 4, 255, 73, 23, 5, 255, 69, 20, 0, 255, 69, 20, 1, 255, 64, 21, 1, 255, 72, 25, 4, 255, 82, 25, 5, 255, 75, 22, 0, 255, 68, 21, 0, 255, 68, 21, 2, 255, 60, 17, 1, 255, 59, 17, 3, 255, 55, 16, 5, 255, 11, 26, 141, 255, 2, 4, 60, 255, 5, 2, 0, 255, 6, 4, 3, 255, 17, 3, 17, 255, 18, 3, 11, 255, 11, 5, 2, 255, 14, 6, 6, 255, 16, 6, 7, 255, 17, 5, 6, 255, 12, 2, 2, 255, 11, 6, 3, 255, 10, 6, 3, 255, 13, 4, 3, 255, 14, 3, 3, 255, 16, 5, 4, 255, 15, 5, 4, 255, 16, 6, 4, 255, 17, 6, 4, 255, 18, 6, 5, 255, 16, 5, 2, 255, 18, 8, 3, 255, 22, 10, 3, 255, 23, 9, 4, 255, 23, 11, 7, 255, 24, 13, 9, 255, 25, 12, 8, 255, 22, 12, 8, 255, 21, 8, 7, 255, 28, 11, 12, 255, 33, 14, 15, 255, 28, 12, 9, 255, 29, 16, 9, 255, 27, 15, 9, 255, 31, 17, 10, 255, 37, 20, 9, 255, 32, 17, 3, 255, 32, 16, 5, 255, 31, 18, 7, 255, 36, 23, 6, 255, 34, 20, 3, 255, 37, 21, 3, 255, 42, 26, 4, 255, 37, 21, 3, 255, 42, 29, 3, 255, 43, 30, 4, 255, 61, 30, 1, 255, 65, 37, 0, 255, 62, 39, 0, 255, 66, 40, 0, 255, 57, 35, 3, 255, 69, 44, 3, 255, 85, 49, 3, 255, 63, 45, 6, 255, 61, 50, 4, 255, 84, 52, 8, 255, 95, 55, 2, 255, 115, 72, 9, 255, 150, 88, 14, 255, 174, 92, 12, 255, 161, 87, 8, 255, 124, 67, 3, 255, 98, 58, 0, 255, 95, 57, 7, 255, 100, 58, 8, 255, 119, 78, 4, 255, 179, 124, 15, 255, 197, 134, 3, 255, 195, 137, 2, 255, 192, 136, 3, 255, 161, 103, 5, 255, 106, 56, 1, 255, 77, 49, 4, 255, 74, 50, 5, 255, 70, 50, 4, 255, 61, 48, 7, 255, 70, 42, 2, 255, 81, 48, 4, 255, 74, 48, 6, 255, 62, 47, 5, 255, 78, 50, 5, 255, 83, 46, 6, 255, 83, 49, 6, 255, 78, 45, 1, 255, 76, 44, 3, 255, 78, 45, 5, 255, 76, 43, 3, 255, 76, 44, 4, 255, 73, 44, 9, 255, 70, 42, 7, 255, 72, 46, 4, 255, 71, 43, 2, 255, 71, 41, 1, 255, 67, 44, 1, 255, 70, 44, 3, 255, 72, 42, 2, 255, 76, 43, 2, 255, 79, 48, 6, 255, 87, 44, 1, 255, 87, 45, 2, 255, 81, 45, 5, 255, 78, 46, 4, 255, 89, 43, 4, 255, 88, 45, 5, 255, 81, 41, 4, 255, 84, 43, 5, 255, 85, 42, 3, 255, 83, 41, 2, 255, 76, 44, 4, 255, 72, 44, 1, 255, 82, 41, 7, 255, 78, 44, 2, 255, 74, 42, 1, 255, 79, 42, 4, 255, 74, 44, 2, 255, 93, 48, 9, 255, 89, 46, 4, 255, 76, 45, 3, 255, 90, 48, 2, 255, 85, 46, 5, 255, 69, 41, 4, 255, 86, 45, 5, 255, 99, 49, 6, 255, 119, 61, 10, 255, 135, 64, 6, 255, 164, 88, 3, 255, 173, 97, 2, 255, 163, 85, 2, 255, 164, 87, 1, 255, 174, 95, 7, 255, 185, 103, 2, 255, 186, 104, 4, 255, 193, 108, 7, 255, 192, 107, 10, 255, 200, 118, 16, 255, 199, 116, 10, 255, 199, 115, 4, 255, 202, 119, 5, 255, 201, 115, 16, 255, 200, 113, 11, 255, 208, 120, 12, 255, 206, 118, 16, 255, 203, 119, 4, 255, 199, 116, 6, 255, 182, 99, 9, 255, 184, 100, 7, 255, 201, 119, 7, 255, 203, 119, 13, 255, 200, 121, 10, 255, 203, 125, 13, 255, 205, 121, 9, 255, 208, 123, 2, 255, 183, 99, 15, 255, 153, 70, 4, 255, 173, 93, 10, 255, 200, 116, 14, 255, 195, 100, 15, 255, 202, 111, 14, 255, 212, 130, 13, 255, 200, 119, 10, 255, 208, 119, 9, 255, 202, 113, 12, 255, 203, 112, 13, 255, 191, 99, 7, 255, 201, 108, 16, 255, 213, 121, 9, 255, 197, 109, 9, 255, 207, 129, 6, 255, 203, 126, 9, 255, 200, 120, 13, 255, 206, 125, 7, 255, 210, 131, 10, 255, 214, 137, 7, 255, 212, 132, 7, 255, 204, 124, 7, 255, 195, 117, 14, 255, 194, 118, 8, 255, 208, 133, 9, 255, 207, 126, 12, 255, 192, 113, 16, 255, 191, 111, 15, 255, 209, 131, 19, 255, 212, 138, 15, 255, 208, 135, 14, 255, 206, 139, 6, 255, 203, 142, 5, 255, 204, 145, 8, 255, 202, 138, 21, 255, 206, 135, 22, 255, 208, 144, 9, 255, 206, 149, 9, 255, 208, 150, 14, 255, 214, 150, 7, 255, 217, 146, 0, 255, 202, 124, 7, 255, 196, 125, 15, 255, 204, 145, 4, 255, 217, 157, 7, 255, 204, 135, 13, 255, 187, 110, 7, 255, 204, 143, 9, 255, 209, 157, 9, 255, 214, 157, 3, 255, 216, 160, 5, 255, 217, 161, 10, 255, 218, 164, 4, 255, 220, 165, 8, 255, 229, 177, 7, 255, 217, 160, 17, 255, 210, 154, 13, 255, 217, 163, 14, 255, 210, 156, 8, 255, 201, 147, 2, 255, 207, 153, 9, 255, 208, 149, 14, 255, 209, 155, 2, 255, 215, 166, 7, 255, 216, 167, 1, 255, 208, 154, 5, 255, 196, 144, 3, 255, 210, 159, 2, 255, 203, 150, 10, 255, 198, 146, 14, 255, 201, 149, 13, 255, 206, 149, 8, 255, 207, 153, 0, 255, 208, 151, 7, 255, 203, 144, 7, 255, 215, 160, 1, 255, 218, 168, 4, 255, 218, 165, 6, 255, 219, 162, 6, 255, 217, 161, 4, 255, 216, 159, 7, 255, 210, 152, 10, 255, 216, 159, 6, 255, 222, 170, 0, 255, 224, 171, 1, 255, 224, 171, 3, 255, 224, 172, 3, 255, 225, 174, 3, 255, 222, 171, 3, 255, 218, 167, 3, 255, 219, 170, 9, 255, 220, 168, 7, 255, 223, 169, 8, 255, 207, 151, 6, 255, 205, 153, 4, 255, 197, 143, 3, 255, 192, 137, 2, 255, 207, 152, 5, 255, 214, 160, 4, 255, 216, 167, 2, 255, 219, 175, 7, 255, 216, 172, 7, 255, 215, 168, 8, 255, 212, 156, 3, 255, 210, 149, 2, 255, 205, 148, 0, 255, 206, 149, 9, 255, 216, 154, 9, 255, 213, 150, 6, 255, 206, 146, 4, 255, 209, 149, 14, 255, 211, 151, 11, 255, 210, 149, 5, 255, 207, 142, 3, 255, 209, 142, 4, 255, 212, 144, 10, 255, 205, 137, 8, 255, 206, 138, 7, 255, 209, 141, 2, 255, 209, 141, 4, 255, 208, 138, 11, 255, 208, 139, 15, 255, 205, 137, 5, 255, 208, 133, 9, 255, 205, 127, 10, 255, 206, 128, 14, 255, 201, 126, 6, 255, 194, 114, 6, 255, 179, 94, 7, 255, 177, 93, 4, 255, 185, 101, 2, 255, 187, 102, 5, 255, 186, 102, 1, 255, 184, 101, 2, 255, 188, 106, 9, 255, 190, 106, 8, 255, 186, 107, 6, 255, 182, 104, 1, 255, 184, 104, 2, 255, 179, 96, 2, 255, 176, 92, 4, 255, 172, 86, 8, 255, 179, 92, 3, 255, 165, 74, 8, 255, 139, 48, 7, 255, 135, 55, 2, 255, 126, 50, 0, 255, 118, 41, 5, 255, 122, 49, 6, 255, 122, 45, 5, 255, 111, 40, 0, 255, 110, 44, 4, 255, 104, 40, 4, 255, 112, 46, 1, 255, 106, 46, 2, 255, 107, 45, 5, 255, 101, 42, 5, 255, 105, 45, 1, 255, 106, 43, 1, 255, 102, 41, 3, 255, 108, 47, 2, 255, 112, 51, 2, 255, 110, 47, 2, 255, 108, 50, 3, 255, 106, 47, 3, 255, 119, 48, 5, 255, 156, 76, 1, 255, 166, 86, 3, 255, 170, 88, 13, 255, 172, 92, 7, 255, 171, 96, 1, 255, 172, 94, 11, 255, 172, 87, 6, 255, 172, 88, 2, 255, 174, 90, 4, 255, 176, 90, 1, 255, 175, 91, 0, 255, 176, 91, 2, 255, 178, 92, 2, 255, 181, 94, 1, 255, 179, 94, 2, 255, 179, 95, 4, 255, 177, 94, 2, 255, 179, 93, 1, 255, 182, 94, 1, 255, 181, 92, 0, 255, 179, 92, 1, 255, 177, 92, 1, 255, 177, 93, 3, 255, 178, 93, 2, 255, 176, 88, 0, 255, 178, 88, 1, 255, 179, 89, 3, 255, 177, 87, 2, 255, 179, 86, 0, 255, 184, 83, 3, 255, 180, 81, 3, 255, 158, 71, 0, 255, 145, 64, 10, 255, 126, 51, 3, 255, 115, 42, 2, 255, 106, 42, 4, 255, 103, 40, 1, 255, 97, 38, 1, 255, 92, 31, 5, 255, 76, 24, 6, 255, 61, 19, 2, 255, 71, 26, 4, 255, 83, 29, 6, 255, 85, 27, 5, 255, 82, 24, 5, 255, 79, 23, 4, 255, 79, 29, 8, 255, 80, 25, 5, 255, 79, 29, 2, 255, 83, 28, 2, 255, 78, 24, 2, 255, 66, 27, 3, 255, 59, 23, 3, 255, 61, 22, 5, 255, 61, 21, 4, 255, 56, 16, 2, 255, 60, 16, 2, 255, 62, 18, 2, 255, 66, 18, 4, 255, 74, 21, 5, 255, 75, 23, 0, 255, 75, 30, 2, 255, 77, 29, 2, 255, 84, 26, 1, 255, 95, 34, 1, 255, 92, 38, 1, 255, 87, 35, 1, 255, 81, 32, 2, 255, 73, 27, 1, 255, 70, 22, 1, 255, 74, 24, 1, 255, 75, 27, 5, 255, 71, 21, 1, 255, 76, 21, 1, 255, 88, 29, 4, 255, 89, 28, 2, 255, 84, 27, 0, 255, 83, 31, 2, 255, 79, 24, 1, 255, 78, 23, 1, 255, 77, 23, 3, 255, 3, 9, 60, 255, 1, 1, 0, 255, 6, 2, 3, 255, 7, 1, 0, 255, 12, 2, 6, 255, 18, 6, 10, 255, 16, 6, 6, 255, 12, 3, 5, 255, 11, 4, 4, 255, 7, 2, 2, 255, 8, 3, 1, 255, 11, 3, 1, 255, 11, 4, 2, 255, 13, 2, 2, 255, 17, 4, 5, 255, 18, 6, 6, 255, 14, 4, 3, 255, 16, 6, 4, 255, 18, 7, 5, 255, 18, 5, 7, 255, 13, 3, 1, 255, 15, 8, 2, 255, 22, 10, 4, 255, 24, 9, 2, 255, 25, 11, 5, 255, 27, 12, 7, 255, 24, 12, 4, 255, 22, 15, 7, 255, 20, 13, 11, 255, 20, 11, 10, 255, 20, 12, 9, 255, 22, 18, 9, 255, 22, 15, 11, 255, 33, 18, 11, 255, 35, 19, 8, 255, 33, 19, 9, 255, 25, 16, 4, 255, 35, 16, 3, 255, 34, 19, 7, 255, 30, 22, 4, 255, 32, 24, 5, 255, 35, 19, 4, 255, 38, 24, 6, 255, 37, 23, 4, 255, 44, 23, 1, 255, 46, 28, 2, 255, 44, 30, 4, 255, 42, 28, 5, 255, 38, 31, 3, 255, 49, 35, 4, 255, 84, 45, 3, 255, 109, 65, 17, 255, 122, 76, 12, 255, 136, 82, 13, 255, 157, 89, 17, 255, 163, 92, 18, 255, 162, 95, 17, 255, 154, 87, 10, 255, 128, 69, 4, 255, 101, 61, 2, 255, 90, 55, 3, 255, 87, 50, 6, 255, 87, 53, 13, 255, 98, 50, 4, 255, 86, 61, 6, 255, 171, 124, 4, 255, 197, 141, 2, 255, 187, 133, 3, 255, 194, 140, 1, 255, 178, 118, 3, 255, 120, 71, 5, 255, 81, 51, 3, 255, 69, 50, 1, 255, 71, 46, 2, 255, 69, 43, 4, 255, 68, 47, 4, 255, 72, 46, 1, 255, 74, 50, 1, 255, 68, 46, 5, 255, 74, 47, 5, 255, 72, 48, 4, 255, 70, 44, 1, 255, 75, 45, 4, 255, 74, 45, 1, 255, 74, 47, 3, 255, 70, 44, 4, 255, 72, 41, 2, 255, 80, 47, 0, 255, 76, 45, 4, 255, 80, 47, 9, 255, 72, 42, 1, 255, 68, 42, 3, 255, 74, 39, 5, 255, 68, 40, 3, 255, 69, 41, 3, 255, 79, 43, 6, 255, 83, 46, 3, 255, 85, 43, 2, 255, 80, 42, 8, 255, 82, 44, 2, 255, 86, 46, 2, 255, 88, 44, 3, 255, 77, 42, 1, 255, 78, 42, 1, 255, 73, 38, 2, 255, 78, 43, 2, 255, 82, 46, 2, 255, 73, 40, 1, 255, 82, 45, 6, 255, 80, 45, 2, 255, 78, 46, 4, 255, 78, 43, 1, 255, 79, 44, 3, 255, 70, 39, 4, 255, 82, 44, 2, 255, 80, 44, 2, 255, 78, 42, 4, 255, 78, 46, 4, 255, 76, 46, 7, 255, 74, 44, 2, 255, 83, 48, 2, 255, 81, 38, 3, 255, 83, 44, 4, 255, 80, 46, 1, 255, 81, 46, 3, 255, 94, 51, 8, 255, 119, 64, 3, 255, 141, 76, 4, 255, 153, 78, 9, 255, 156, 77, 8, 255, 167, 85, 1, 255, 175, 92, 2, 255, 184, 101, 5, 255, 179, 98, 13, 255, 190, 108, 10, 255, 195, 107, 4, 255, 194, 107, 7, 255, 186, 106, 3, 255, 194, 109, 13, 255, 200, 113, 5, 255, 203, 116, 3, 255, 200, 109, 7, 255, 200, 111, 17, 255, 196, 111, 20, 255, 193, 111, 13, 255, 202, 121, 10, 255, 199, 114, 14, 255, 189, 104, 15, 255, 203, 118, 25, 255, 210, 126, 6, 255, 208, 121, 11, 255, 190, 102, 9, 255, 167, 78, 9, 255, 193, 110, 19, 255, 211, 133, 21, 255, 210, 131, 18, 255, 196, 117, 11, 255, 199, 119, 15, 255, 211, 133, 11, 255, 205, 127, 18, 255, 197, 115, 5, 255, 198, 114, 6, 255, 208, 122, 27, 255, 198, 111, 11, 255, 184, 95, 4, 255, 199, 112, 10, 255, 207, 121, 20, 255, 215, 137, 11, 255, 208, 131, 13, 255, 209, 129, 23, 255, 213, 133, 12, 255, 201, 124, 2, 255, 210, 134, 20, 255, 203, 127, 7, 255, 201, 125, 10, 255, 201, 125, 18, 255, 202, 129, 13, 255, 204, 128, 11, 255, 197, 116, 14, 255, 203, 125, 20, 255, 199, 128, 8, 255, 202, 133, 9, 255, 209, 139, 8, 255, 208, 141, 19, 255, 206, 138, 23, 255, 210, 138, 20, 255, 210, 139, 17, 255, 211, 142, 9, 255, 204, 132, 13, 255, 212, 140, 12, 255, 208, 135, 9, 255, 192, 116, 10, 255, 192, 117, 11, 255, 188, 115, 6, 255, 183, 107, 16, 255, 196, 126, 10, 255, 201, 138, 9, 255, 207, 151, 8, 255, 211, 150, 12, 255, 185, 111, 9, 255, 199, 139, 16, 255, 209, 159, 7, 255, 205, 146, 4, 255, 207, 150, 10, 255, 212, 157, 8, 255, 209, 156, 5, 255, 214, 161, 9, 255, 214, 162, 4, 255, 211, 161, 11, 255, 210, 163, 1, 255, 214, 162, 9, 255, 205, 150, 10, 255, 203, 156, 13, 255, 209, 161, 4, 255, 210, 152, 4, 255, 209, 157, 5, 255, 211, 162, 13, 255, 211, 157, 0, 255, 211, 157, 6, 255, 205, 162, 8, 255, 205, 158, 2, 255, 206, 156, 7, 255, 211, 164, 6, 255, 205, 157, 3, 255, 209, 160, 1, 255, 211, 161, 5, 255, 217, 164, 10, 255, 205, 147, 2, 255, 197, 136, 10, 255, 216, 162, 12, 255, 215, 160, 10, 255, 211, 152, 6, 255, 210, 153, 2, 255, 212, 155, 3, 255, 223, 168, 8, 255, 222, 170, 2, 255, 223, 173, 3, 255, 223, 172, 2, 255, 223, 172, 4, 255, 225, 175, 5, 255, 223, 172, 2, 255, 222, 171, 5, 255, 214, 161, 3, 255, 224, 174, 12, 255, 220, 170, 1, 255, 224, 171, 3, 255, 215, 162, 4, 255, 209, 159, 2, 255, 190, 140, 9, 255, 192, 142, 8, 255, 211, 161, 5, 255, 207, 155, 0, 255, 216, 167, 4, 255, 218, 175, 2, 255, 215, 171, 4, 255, 211, 163, 8, 255, 211, 155, 7, 255, 200, 139, 6, 255, 197, 140, 1, 255, 198, 142, 17, 255, 210, 152, 8, 255, 208, 152, 0, 255, 203, 146, 2, 255, 213, 156, 9, 255, 211, 153, 5, 255, 212, 150, 12, 255, 210, 145, 5, 255, 208, 141, 0, 255, 209, 139, 10, 255, 208, 141, 2, 255, 209, 141, 5, 255, 211, 144, 4, 255, 211, 143, 6, 255, 206, 136, 13, 255, 203, 131, 9, 255, 205, 136, 6, 255, 206, 132, 11, 255, 211, 132, 14, 255, 205, 129, 7, 255, 201, 127, 0, 255, 199, 119, 6, 255, 190, 108, 8, 255, 175, 92, 9, 255, 181, 96, 9, 255, 176, 90, 7, 255, 182, 97, 10, 255, 190, 108, 6, 255, 190, 109, 1, 255, 188, 105, 3, 255, 183, 101, 3, 255, 181, 98, 3, 255, 181, 97, 5, 255, 174, 89, 2, 255, 174, 95, 4, 255, 173, 90, 10, 255, 168, 81, 5, 255, 148, 60, 6, 255, 128, 50, 5, 255, 118, 50, 8, 255, 115, 47, 9, 255, 115, 43, 1, 255, 113, 43, 4, 255, 113, 38, 8, 255, 113, 35, 1, 255, 115, 46, 5, 255, 105, 40, 3, 255, 104, 39, 0, 255, 100, 38, 0, 255, 94, 36, 5, 255, 97, 37, 4, 255, 98, 38, 4, 255, 104, 40, 6, 255, 107, 43, 2, 255, 107, 47, 3, 255, 110, 45, 3, 255, 112, 43, 3, 255, 104, 41, 2, 255, 102, 41, 6, 255, 104, 44, 6, 255, 142, 69, 8, 255, 165, 88, 4, 255, 166, 88, 7, 255, 172, 95, 5, 255, 174, 96, 3, 255, 173, 92, 6, 255, 171, 92, 6, 255, 169, 87, 4, 255, 173, 88, 2, 255, 176, 91, 0, 255, 178, 94, 3, 255, 177, 94, 2, 255, 176, 92, 0, 255, 177, 93, 2, 255, 177, 93, 1, 255, 180, 96, 3, 255, 178, 95, 2, 255, 175, 93, 0, 255, 176, 92, 1, 255, 180, 95, 4, 255, 177, 90, 2, 255, 178, 91, 2, 255, 177, 90, 2, 255, 177, 88, 0, 255, 180, 90, 2, 255, 179, 89, 0, 255, 176, 82, 3, 255, 171, 76, 7, 255, 156, 65, 1, 255, 140, 52, 1, 255, 130, 45, 5, 255, 126, 46, 8, 255, 114, 38, 2, 255, 106, 33, 1, 255, 113, 38, 4, 255, 116, 41, 3, 255, 112, 37, 1, 255, 106, 37, 2, 255, 99, 34, 4, 255, 79, 25, 3, 255, 70, 25, 2, 255, 67, 22, 2, 255, 73, 26, 6, 255, 78, 29, 3, 255, 79, 32, 1, 255, 82, 33, 6, 255, 82, 29, 2, 255, 74, 25, 0, 255, 73, 25, 2, 255, 74, 24, 3, 255, 73, 24, 4, 255, 60, 23, 4, 255, 60, 21, 1, 255, 61, 18, 0, 255, 58, 16, 2, 255, 53, 17, 5, 255, 49, 16, 1, 255, 60, 18, 2, 255, 66, 23, 5, 255, 64, 20, 1, 255, 75, 22, 2, 255, 76, 24, 3, 255, 75, 20, 1, 255, 89, 30, 4, 255, 98, 39, 4, 255, 91, 36, 3, 255, 96, 32, 4, 255, 93, 35, 5, 255, 79, 31, 0, 255, 75, 25, 2, 255, 73, 21, 3, 255, 67, 17, 2, 255, 73, 21, 4, 255, 79, 25, 6, 255, 77, 26, 2, 255, 85, 27, 3, 255, 87, 30, 4, 255, 83, 31, 2, 255, 91, 28, 5, 255, 92, 27, 3, 255, 93, 27, 3, 255, 3, 0, 0, 255, 7, 0, 0, 255, 7, 0, 0, 255, 2, 1, 0, 255, 3, 2, 0, 255, 16, 5, 6, 255, 24, 7, 13, 255, 16, 2, 9, 255, 10, 2, 4, 255, 10, 3, 2, 255, 16, 5, 6, 255, 13, 2, 4, 255, 10, 1, 3, 255, 9, 1, 2, 255, 15, 5, 5, 255, 15, 5, 3, 255, 17, 6, 4, 255, 15, 4, 2, 255, 19, 8, 7, 255, 19, 3, 3, 255, 15, 7, 4, 255, 12, 7, 3, 255, 18, 6, 3, 255, 16, 8, 0, 255, 19, 10, 2, 255, 22, 12, 3, 255, 23, 14, 7, 255, 24, 15, 7, 255, 21, 10, 7, 255, 25, 15, 15, 255, 23, 13, 10, 255, 23, 14, 6, 255, 26, 16, 11, 255, 29, 15, 6, 255, 34, 17, 5, 255, 36, 21, 10, 255, 37, 22, 9, 255, 40, 22, 4, 255, 35, 21, 5, 255, 26, 21, 6, 255, 40, 27, 5, 255, 55, 32, 5, 255, 54, 33, 4, 255, 61, 38, 10, 255, 63, 38, 8, 255, 72, 44, 10, 255, 79, 53, 9, 255, 93, 66, 9, 255, 118, 76, 17, 255, 143, 82, 22, 255, 154, 94, 13, 255, 152, 90, 16, 255, 135, 82, 8, 255, 124, 78, 4, 255, 114, 72, 12, 255, 94, 60, 6, 255, 74, 56, 5, 255, 56, 44, 4, 255, 53, 39, 5, 255, 61, 49, 2, 255, 61, 51, 0, 255, 64, 51, 2, 255, 67, 52, 8, 255, 69, 51, 2, 255, 132, 99, 4, 255, 197, 147, 7, 255, 205, 155, 0, 255, 203, 156, 7, 255, 183, 129, 2, 255, 153, 86, 4, 255, 101, 54, 8, 255, 71, 47, 1, 255, 67, 48, 4, 255, 71, 46, 4, 255, 71, 44, 1, 255, 73, 46, 2, 255, 79, 48, 6, 255, 71, 47, 5, 255, 72, 48, 2, 255, 75, 45, 1, 255, 60, 47, 1, 255, 66, 43, 3, 255, 72, 43, 5, 255, 69, 46, 0, 255, 66, 45, 3, 255, 71, 46, 5, 255, 70, 43, 3, 255, 77, 43, 1, 255, 75, 42, 3, 255, 78, 44, 3, 255, 71, 43, 0, 255, 69, 43, 2, 255, 75, 42, 5, 255, 78, 37, 5, 255, 78, 40, 4, 255, 72, 43, 3, 255, 79, 45, 1, 255, 83, 45, 2, 255, 79, 46, 2, 255, 83, 42, 0, 255, 87, 44, 3, 255, 79, 45, 1, 255, 77, 42, 2, 255, 75, 38, 3, 255, 77, 45, 4, 255, 78, 44, 2, 255, 81, 44, 3, 255, 80, 45, 1, 255, 83, 49, 2, 255, 84, 47, 4, 255, 82, 41, 3, 255, 88, 45, 3, 255, 85, 45, 3, 255, 84, 44, 4, 255, 82, 45, 2, 255, 79, 46, 1, 255, 81, 46, 4, 255, 80, 45, 3, 255, 78, 46, 3, 255, 76, 44, 3, 255, 83, 46, 5, 255, 84, 42, 0, 255, 86, 46, 5, 255, 84, 46, 4, 255, 83, 50, 0, 255, 81, 49, 4, 255, 78, 41, 5, 255, 83, 40, 3, 255, 97, 52, 6, 255, 106, 58, 3, 255, 121, 63, 4, 255, 142, 75, 6, 255, 156, 83, 3, 255, 155, 79, 3, 255, 170, 92, 8, 255, 182, 98, 6, 255, 182, 98, 8, 255, 178, 99, 0, 255, 196, 109, 11, 255, 201, 110, 13, 255, 202, 117, 2, 255, 199, 111, 8, 255, 195, 109, 10, 255, 198, 114, 13, 255, 201, 121, 5, 255, 203, 124, 10, 255, 197, 116, 11, 255, 198, 121, 15, 255, 205, 124, 17, 255, 204, 120, 9, 255, 183, 90, 9, 255, 179, 84, 7, 255, 150, 54, 5, 255, 191, 105, 6, 255, 214, 131, 13, 255, 209, 128, 12, 255, 209, 131, 9, 255, 211, 135, 4, 255, 212, 133, 17, 255, 213, 133, 15, 255, 217, 135, 13, 255, 216, 134, 9, 255, 212, 130, 20, 255, 195, 114, 7, 255, 188, 105, 8, 255, 196, 111, 16, 255, 210, 127, 15, 255, 214, 131, 17, 255, 207, 129, 8, 255, 206, 125, 14, 255, 209, 127, 15, 255, 199, 119, 6, 255, 207, 131, 20, 255, 207, 133, 19, 255, 199, 124, 11, 255, 205, 127, 14, 255, 210, 130, 5, 255, 206, 125, 2, 255, 204, 125, 21, 255, 203, 128, 16, 255, 201, 125, 8, 255, 196, 123, 17, 255, 201, 133, 5, 255, 205, 138, 2, 255, 207, 138, 13, 255, 203, 136, 10, 255, 205, 136, 13, 255, 204, 132, 12, 255, 191, 124, 12, 255, 198, 120, 11, 255, 191, 115, 11, 255, 184, 108, 17, 255, 187, 109, 10, 255, 185, 121, 19, 255, 190, 125, 15, 255, 186, 109, 10, 255, 194, 126, 9, 255, 204, 146, 11, 255, 208, 151, 15, 255, 203, 143, 9, 255, 193, 125, 4, 255, 201, 147, 5, 255, 207, 152, 6, 255, 204, 142, 1, 255, 205, 144, 3, 255, 204, 150, 5, 255, 201, 150, 1, 255, 208, 159, 6, 255, 212, 166, 7, 255, 217, 173, 1, 255, 213, 158, 11, 255, 204, 147, 10, 255, 206, 158, 2, 255, 202, 150, 2, 255, 203, 141, 14, 255, 211, 152, 8, 255, 208, 151, 4, 255, 200, 140, 4, 255, 200, 143, 8, 255, 197, 138, 11, 255, 192, 133, 13, 255, 186, 129, 7, 255, 182, 122, 10, 255, 179, 116, 7, 255, 174, 113, 8, 255, 167, 107, 7, 255, 162, 101, 13, 255, 169, 112, 5, 255, 185, 124, 10, 255, 202, 135, 18, 255, 205, 143, 16, 255, 204, 144, 9, 255, 206, 145, 2, 255, 206, 146, 6, 255, 215, 160, 3, 255, 220, 167, 2, 255, 221, 165, 0, 255, 220, 166, 6, 255, 222, 169, 5, 255, 222, 171, 0, 255, 226, 175, 3, 255, 218, 166, 3, 255, 221, 168, 6, 255, 222, 175, 6, 255, 221, 174, 0, 255, 225, 173, 1, 255, 215, 163, 7, 255, 206, 157, 4, 255, 213, 163, 12, 255, 209, 160, 5, 255, 210, 161, 5, 255, 206, 157, 1, 255, 210, 162, 10, 255, 221, 174, 12, 255, 219, 174, 3, 255, 209, 162, 6, 255, 207, 156, 6, 255, 204, 149, 3, 255, 189, 126, 1, 255, 199, 134, 14, 255, 212, 154, 12, 255, 211, 154, 5, 255, 207, 149, 5, 255, 211, 156, 1, 255, 210, 152, 9, 255, 207, 144, 10, 255, 212, 148, 4, 255, 199, 129, 5, 255, 190, 117, 4, 255, 204, 136, 1, 255, 211, 143, 9, 255, 210, 143, 7, 255, 210, 145, 4, 255, 209, 140, 17, 255, 207, 138, 9, 255, 208, 139, 10, 255, 207, 135, 16, 255, 206, 135, 8, 255, 204, 132, 5, 255, 204, 129, 9, 255, 198, 123, 4, 255, 193, 115, 0, 255, 185, 101, 7, 255, 184, 100, 9, 255, 186, 105, 9, 255, 184, 103, 5, 255, 189, 107, 6, 255, 188, 107, 3, 255, 188, 104, 4, 255, 176, 99, 4, 255, 177, 98, 3, 255, 180, 93, 3, 255, 179, 92, 3, 255, 174, 101, 1, 255, 177, 93, 5, 255, 157, 75, 8, 255, 128, 57, 4, 255, 132, 53, 5, 255, 125, 50, 4, 255, 116, 48, 1, 255, 123, 52, 7, 255, 106, 40, 2, 255, 101, 38, 5, 255, 98, 38, 5, 255, 102, 43, 2, 255, 102, 44, 0, 255, 99, 43, 2, 255, 109, 46, 3, 255, 106, 45, 8, 255, 103, 44, 5, 255, 97, 40, 3, 255, 113, 44, 4, 255, 128, 58, 4, 255, 137, 60, 5, 255, 131, 54, 4, 255, 127, 53, 5, 255, 120, 50, 0, 255, 110, 43, 6, 255, 97, 33, 5, 255, 114, 55, 7, 255, 164, 86, 3, 255, 166, 86, 2, 255, 165, 92, 8, 255, 169, 91, 3, 255, 175, 95, 6, 255, 172, 93, 5, 255, 172, 88, 4, 255, 174, 89, 4, 255, 178, 90, 3, 255, 178, 90, 3, 255, 179, 93, 4, 255, 178, 93, 2, 255, 176, 94, 1, 255, 174, 93, 0, 255, 179, 94, 1, 255, 177, 93, 1, 255, 178, 95, 1, 255, 175, 91, 1, 255, 177, 89, 4, 255, 175, 90, 2, 255, 175, 92, 3, 255, 173, 90, 1, 255, 175, 88, 2, 255, 180, 86, 5, 255, 178, 80, 8, 255, 167, 70, 8, 255, 145, 53, 4, 255, 126, 40, 2, 255, 117, 41, 2, 255, 113, 42, 3, 255, 115, 43, 4, 255, 116, 41, 4, 255, 108, 37, 1, 255, 106, 40, 3, 255, 109, 43, 2, 255, 105, 32, 2, 255, 107, 34, 6, 255, 97, 34, 3, 255, 90, 31, 3, 255, 88, 29, 1, 255, 87, 31, 1, 255, 87, 26, 1, 255, 79, 26, 2, 255, 82, 28, 3, 255, 84, 28, 2, 255, 83, 29, 2, 255, 79, 28, 2, 255, 74, 25, 1, 255, 73, 24, 4, 255, 74, 27, 5, 255, 71, 27, 3, 255, 68, 24, 3, 255, 70, 24, 3, 255, 63, 21, 1, 255, 54, 19, 3, 255, 53, 18, 4, 255, 66, 20, 3, 255, 69, 20, 1, 255, 69, 22, 2, 255, 71, 20, 0, 255, 74, 21, 4, 255, 78, 26, 3, 255, 87, 33, 0, 255, 92, 35, 4, 255, 92, 39, 3, 255, 96, 41, 6, 255, 91, 33, 1, 255, 87, 35, 3, 255, 81, 34, 2, 255, 76, 26, 1, 255, 75, 22, 4, 255, 66, 15, 4, 255, 65, 15, 4, 255, 74, 21, 2, 255, 84, 25, 0, 255, 85, 26, 2, 255, 83, 28, 7, 255, 90, 26, 4, 255, 94, 27, 1, 255, 97, 26, 1, 255, 0, 1, 1, 255, 4, 1, 0, 255, 5, 0, 0, 255, 2, 2, 0, 255, 0, 0, 0, 255, 6, 2, 1, 255, 14, 4, 2, 255, 15, 8, 5, 255, 12, 6, 7, 255, 11, 4, 8, 255, 13, 3, 5, 255, 14, 5, 3, 255, 13, 4, 1, 255, 14, 5, 5, 255, 16, 6, 6, 255, 18, 7, 5, 255, 20, 9, 7, 255, 17, 6, 5, 255, 18, 9, 6, 255, 14, 7, 4, 255, 18, 8, 6, 255, 20, 8, 7, 255, 17, 8, 4, 255, 15, 9, 2, 255, 18, 9, 2, 255, 18, 8, 2, 255, 18, 10, 4, 255, 21, 12, 6, 255, 20, 11, 8, 255, 23, 15, 13, 255, 27, 18, 14, 255, 23, 12, 5, 255, 26, 19, 12, 255, 23, 16, 5, 255, 27, 15, 4, 255, 37, 19, 10, 255, 41, 20, 13, 255, 37, 19, 5, 255, 32, 20, 6, 255, 20, 17, 9, 255, 42, 29, 7, 255, 83, 58, 7, 255, 91, 66, 13, 255, 100, 67, 22, 255, 108, 72, 16, 255, 115, 78, 9, 255, 122, 78, 15, 255, 111, 72, 10, 255, 107, 64, 9, 255, 100, 67, 9, 255, 73, 54, 7, 255, 53, 40, 1, 255, 57, 41, 4, 255, 56, 39, 3, 255, 52, 41, 6, 255, 46, 43, 2, 255, 51, 49, 0, 255, 59, 50, 1, 255, 64, 44, 6, 255, 65, 49, 3, 255, 70, 49, 0, 255, 72, 55, 3, 255, 60, 54, 4, 255, 100, 80, 5, 255, 190, 135, 3, 255, 201, 148, 6, 255, 199, 153, 4, 255, 191, 139, 4, 255, 161, 101, 7, 255, 121, 62, 6, 255, 81, 48, 2, 255, 66, 50, 0, 255, 63, 50, 3, 255, 65, 49, 3, 255, 71, 48, 3, 255, 71, 44, 1, 255, 71, 43, 1, 255, 75, 45, 4, 255, 73, 42, 2, 255, 77, 42, 3, 255, 68, 47, 4, 255, 71, 45, 3, 255, 74, 46, 4, 255, 70, 45, 2, 255, 66, 42, 3, 255, 69, 42, 4, 255, 67, 41, 4, 255, 73, 42, 1, 255, 65, 39, 0, 255, 68, 41, 2, 255, 70, 41, 3, 255, 71, 39, 2, 255, 75, 40, 3, 255, 77, 42, 5, 255, 79, 45, 6, 255, 76, 41, 1, 255, 76, 43, 2, 255, 86, 42, 4, 255, 79, 41, 1, 255, 77, 42, 1, 255, 79, 43, 2, 255, 80, 44, 3, 255, 82, 41, 4, 255, 81, 42, 2, 255, 85, 50, 1, 255, 83, 47, 4, 255, 83, 41, 7, 255, 83, 41, 3, 255, 86, 49, 1, 255, 86, 49, 2, 255, 93, 45, 6, 255, 93, 47, 4, 255, 84, 47, 2, 255, 82, 46, 4, 255, 90, 48, 6, 255, 85, 49, 1, 255, 85, 50, 4, 255, 81, 44, 0, 255, 84, 51, 4, 255, 80, 48, 2, 255, 83, 50, 1, 255, 86, 47, 2, 255, 81, 42, 2, 255, 86, 47, 6, 255, 86, 49, 1, 255, 87, 52, 5, 255, 87, 49, 8, 255, 88, 47, 4, 255, 87, 44, 6, 255, 83, 47, 1, 255, 81, 48, 0, 255, 91, 48, 8, 255, 106, 52, 9, 255, 126, 66, 5, 255, 146, 80, 6, 255, 167, 90, 9, 255, 166, 83, 11, 255, 173, 96, 9, 255, 188, 104, 5, 255, 193, 105, 17, 255, 194, 116, 7, 255, 196, 112, 9, 255, 190, 108, 1, 255, 195, 114, 8, 255, 194, 114, 7, 255, 197, 115, 8, 255, 203, 120, 8, 255, 202, 126, 5, 255, 206, 127, 15, 255, 197, 115, 7, 255, 168, 79, 8, 255, 175, 89, 6, 255, 172, 89, 11, 255, 194, 114, 6, 255, 208, 125, 20, 255, 210, 130, 6, 255, 214, 132, 11, 255, 217, 133, 22, 255, 211, 127, 15, 255, 206, 121, 5, 255, 196, 108, 10, 255, 205, 119, 12, 255, 203, 120, 8, 255, 188, 101, 13, 255, 194, 109, 11, 255, 205, 118, 14, 255, 207, 124, 13, 255, 205, 126, 8, 255, 198, 120, 4, 255, 189, 106, 5, 255, 191, 106, 13, 255, 197, 115, 15, 255, 195, 118, 2, 255, 199, 124, 15, 255, 197, 122, 18, 255, 192, 117, 12, 255, 185, 108, 12, 255, 182, 107, 7, 255, 187, 115, 11, 255, 190, 122, 3, 255, 195, 122, 6, 255, 182, 111, 18, 255, 187, 118, 1, 255, 198, 127, 21, 255, 199, 132, 21, 255, 202, 130, 8, 255, 202, 127, 16, 255, 188, 124, 6, 255, 187, 121, 14, 255, 198, 135, 11, 255, 190, 128, 0, 255, 192, 122, 12, 255, 189, 123, 16, 255, 186, 123, 5, 255, 195, 132, 9, 255, 189, 123, 16, 255, 187, 127, 9, 255, 195, 136, 4, 255, 196, 142, 10, 255, 201, 144, 11, 255, 194, 129, 2, 255, 191, 129, 16, 255, 198, 137, 13, 255, 205, 141, 3, 255, 196, 133, 3, 255, 196, 137, 1, 255, 201, 137, 13, 255, 191, 129, 19, 255, 193, 132, 13, 255, 203, 137, 3, 255, 206, 136, 12, 255, 200, 136, 7, 255, 190, 130, 9, 255, 188, 133, 7, 255, 185, 123, 12, 255, 183, 112, 9, 255, 162, 97, 11, 255, 143, 88, 9, 255, 153, 92, 16, 255, 150, 88, 7, 255, 155, 92, 12, 255, 157, 96, 5, 255, 162, 100, 10, 255, 157, 92, 7, 255, 155, 94, 11, 255, 153, 87, 19, 255, 149, 86, 11, 255, 152, 98, 10, 255, 184, 130, 8, 255, 188, 114, 17, 255, 198, 134, 6, 255, 192, 134, 3, 255, 195, 129, 12, 255, 209, 149, 11, 255, 219, 165, 10, 255, 213, 157, 4, 255, 213, 153, 4, 255, 217, 162, 7, 255, 224, 171, 5, 255, 225, 171, 2, 255, 222, 168, 6, 255, 212, 156, 2, 255, 216, 162, 4, 255, 221, 170, 5, 255, 220, 167, 1, 255, 224, 173, 1, 255, 207, 156, 8, 255, 208, 163, 7, 255, 220, 176, 6, 255, 214, 165, 1, 255, 206, 153, 0, 255, 210, 160, 4, 255, 215, 168, 4, 255, 222, 175, 10, 255, 219, 169, 5, 255, 206, 151, 10, 255, 203, 150, 7, 255, 210, 153, 10, 255, 198, 140, 4, 255, 208, 149, 17, 255, 211, 157, 12, 255, 211, 157, 8, 255, 209, 149, 14, 255, 208, 150, 3, 255, 208, 150, 7, 255, 204, 143, 6, 255, 206, 144, 3, 255, 185, 116, 7, 255, 171, 97, 13, 255, 188, 117, 9, 255, 204, 137, 7, 255, 210, 142, 11, 255, 211, 145, 5, 255, 211, 144, 10, 255, 211, 143, 5, 255, 209, 141, 8, 255, 208, 139, 12, 255, 205, 133, 4, 255, 207, 133, 7, 255, 206, 132, 8, 255, 200, 126, 8, 255, 196, 119, 6, 255, 196, 117, 5, 255, 192, 114, 4, 255, 192, 115, 4, 255, 191, 113, 5, 255, 187, 109, 0, 255, 188, 108, 6, 255, 183, 102, 3, 255, 179, 101, 4, 255, 173, 95, 7, 255, 170, 85, 3, 255, 177, 86, 7, 255, 180, 84, 5, 255, 161, 77, 8, 255, 129, 59, 2, 255, 124, 54, 9, 255, 137, 62, 10, 255, 128, 50, 0, 255, 128, 52, 3, 255, 134, 59, 3, 255, 114, 39, 8, 255, 112, 44, 2, 255, 108, 42, 5, 255, 102, 35, 5, 255, 103, 39, 4, 255, 101, 38, 4, 255, 110, 42, 1, 255, 121, 45, 7, 255, 117, 39, 10, 255, 102, 40, 5, 255, 94, 38, 0, 255, 111, 47, 5, 255, 124, 47, 5, 255, 125, 51, 2, 255, 125, 53, 6, 255, 119, 48, 1, 255, 118, 50, 7, 255, 112, 47, 6, 255, 107, 46, 0, 255, 141, 70, 5, 255, 165, 84, 4, 255, 166, 89, 4, 255, 170, 90, 3, 255, 171, 88, 0, 255, 174, 92, 1, 255, 176, 95, 0, 255, 174, 93, 1, 255, 173, 87, 8, 255, 177, 90, 9, 255, 178, 93, 3, 255, 175, 90, 0, 255, 177, 90, 3, 255, 176, 93, 2, 255, 171, 92, 0, 255, 173, 92, 2, 255, 178, 92, 3, 255, 176, 89, 1, 255, 170, 85, 2, 255, 171, 89, 2, 255, 172, 90, 4, 255, 174, 88, 2, 255, 167, 78, 3, 255, 172, 80, 2, 255, 167, 75, 3, 255, 138, 50, 4, 255, 118, 46, 1, 255, 110, 41, 2, 255, 106, 37, 2, 255, 118, 41, 0, 255, 127, 47, 5, 255, 123, 45, 11, 255, 117, 48, 6, 255, 115, 45, 1, 255, 112, 41, 2, 255, 105, 37, 2, 255, 99, 35, 2, 255, 97, 35, 3, 255, 97, 34, 3, 255, 96, 30, 1, 255, 88, 29, 2, 255, 85, 30, 3, 255, 79, 27, 0, 255, 84, 27, 2, 255, 79, 28, 1, 255, 81, 29, 4, 255, 81, 29, 2, 255, 79, 27, 0, 255, 81, 28, 1, 255, 80, 27, 1, 255, 81, 28, 0, 255, 80, 26, 2, 255, 77, 25, 4, 255, 69, 21, 4, 255, 55, 18, 2, 255, 49, 18, 0, 255, 59, 22, 4, 255, 63, 19, 4, 255, 66, 21, 2, 255, 65, 23, 2, 255, 71, 22, 8, 255, 74, 24, 6, 255, 76, 26, 1, 255, 75, 26, 1, 255, 80, 26, 1, 255, 86, 34, 5, 255, 91, 37, 6, 255, 94, 31, 2, 255, 87, 37, 3, 255, 85, 35, 3, 255, 84, 30, 2, 255, 70, 27, 3, 255, 68, 24, 5, 255, 71, 21, 4, 255, 70, 22, 2, 255, 73, 25, 2, 255, 76, 22, 1, 255, 81, 27, 3, 255, 87, 28, 0, 255, 96, 32, 3, 255, 0, 2, 0, 255, 3, 1, 0, 255, 4, 0, 0, 255, 3, 2, 0, 255, 1, 1, 0, 255, 3, 1, 0, 255, 9, 3, 3, 255, 13, 8, 7, 255, 11, 6, 3, 255, 11, 3, 1, 255, 11, 3, 3, 255, 14, 6, 6, 255, 13, 4, 4, 255, 17, 7, 6, 255, 15, 5, 4, 255, 16, 4, 3, 255, 17, 6, 5, 255, 15, 6, 3, 255, 15, 8, 5, 255, 13, 9, 5, 255, 14, 4, 2, 255, 16, 6, 4, 255, 18, 8, 4, 255, 20, 7, 3, 255, 19, 10, 3, 255, 20, 14, 7, 255, 16, 9, 4, 255, 17, 13, 9, 255, 21, 13, 11, 255, 20, 11, 9, 255, 27, 16, 13, 255, 25, 16, 10, 255, 24, 16, 9, 255, 30, 18, 8, 255, 34, 18, 9, 255, 31, 17, 9, 255, 28, 17, 10, 255, 28, 19, 6, 255, 26, 17, 10, 255, 26, 21, 6, 255, 34, 24, 3, 255, 35, 28, 4, 255, 33, 27, 2, 255, 40, 32, 3, 255, 35, 34, 5, 255, 36, 34, 3, 255, 42, 35, 3, 255, 41, 31, 1, 255, 49, 43, 0, 255, 64, 51, 3, 255, 46, 37, 5, 255, 62, 46, 8, 255, 58, 42, 6, 255, 60, 50, 3, 255, 62, 52, 2, 255, 59, 45, 3, 255, 63, 46, 6, 255, 65, 47, 4, 255, 67, 48, 1, 255, 61, 47, 3, 255, 81, 50, 6, 255, 70, 51, 3, 255, 75, 59, 5, 255, 156, 115, 10, 255, 201, 145, 0, 255, 198, 145, 4, 255, 193, 136, 4, 255, 174, 110, 1, 255, 135, 79, 2, 255, 97, 56, 1, 255, 70, 46, 0, 255, 72, 52, 5, 255, 67, 49, 3, 255, 66, 50, 2, 255, 76, 48, 4, 255, 78, 44, 5, 255, 73, 42, 3, 255, 71, 45, 2, 255, 69, 40, 1, 255, 73, 42, 6, 255, 67, 42, 2, 255, 76, 43, 4, 255, 79, 42, 2, 255, 68, 45, 2, 255, 64, 46, 6, 255, 65, 42, 2, 255, 61, 38, 2, 255, 66, 42, 4, 255, 61, 45, 5, 255, 67, 42, 3, 255, 73, 40, 4, 255, 74, 45, 5, 255, 79, 45, 5, 255, 81, 43, 2, 255, 79, 42, 2, 255, 72, 41, 0, 255, 77, 44, 4, 255, 86, 43, 5, 255, 78, 42, 2, 255, 79, 45, 4, 255, 81, 44, 4, 255, 80, 40, 2, 255, 85, 43, 6, 255, 88, 47, 5, 255, 83, 44, 0, 255, 86, 45, 4, 255, 81, 36, 2, 255, 86, 40, 4, 255, 89, 44, 1, 255, 92, 45, 0, 255, 95, 42, 3, 255, 92, 45, 1, 255, 87, 49, 2, 255, 84, 48, 5, 255, 88, 46, 2, 255, 88, 51, 5, 255, 82, 46, 1, 255, 86, 47, 3, 255, 88, 47, 5, 255, 88, 50, 7, 255, 86, 48, 3, 255, 86, 50, 4, 255, 83, 47, 3, 255, 89, 48, 5, 255, 90, 49, 3, 255, 88, 48, 3, 255, 89, 49, 5, 255, 86, 46, 2, 255, 81, 49, 3, 255, 77, 47, 2, 255, 82, 51, 4, 255, 85, 50, 5, 255, 91, 47, 8, 255, 97, 52, 4, 255, 105, 53, 3, 255, 128, 69, 12, 255, 154, 83, 8, 255, 182, 96, 5, 255, 188, 102, 2, 255, 184, 101, 3, 255, 185, 105, 6, 255, 188, 107, 10, 255, 190, 110, 9, 255, 193, 111, 11, 255, 192, 108, 9, 255, 191, 107, 8, 255, 197, 112, 11, 255, 192, 112, 8, 255, 203, 123, 14, 255, 184, 99, 8, 255, 196, 111, 10, 255, 185, 97, 7, 255, 185, 97, 16, 255, 181, 94, 8, 255, 191, 105, 13, 255, 211, 125, 21, 255, 204, 115, 4, 255, 194, 103, 9, 255, 184, 93, 10, 255, 193, 104, 13, 255, 184, 99, 4, 255, 200, 117, 7, 255, 203, 120, 13, 255, 204, 121, 10, 255, 185, 99, 1, 255, 187, 98, 3, 255, 194, 111, 16, 255, 195, 116, 12, 255, 194, 115, 14, 255, 191, 111, 7, 255, 205, 125, 10, 255, 194, 115, 7, 255, 196, 118, 15, 255, 197, 124, 5, 255, 186, 112, 15, 255, 179, 103, 18, 255, 190, 115, 16, 255, 189, 119, 8, 255, 190, 125, 9, 255, 193, 120, 16, 255, 188, 121, 14, 255, 186, 116, 8, 255, 193, 121, 0, 255, 186, 119, 8, 255, 189, 122, 13, 255, 200, 128, 13, 255, 191, 124, 19, 255, 187, 123, 12, 255, 196, 123, 18, 255, 188, 129, 6, 255, 191, 126, 7, 255, 189, 121, 7, 255, 178, 114, 12, 255, 172, 110, 10, 255, 185, 121, 11, 255, 191, 127, 7, 255, 179, 118, 11, 255, 172, 108, 15, 255, 160, 101, 15, 255, 151, 90, 14, 255, 174, 110, 15, 255, 170, 107, 17, 255, 150, 86, 7, 255, 156, 96, 14, 255, 161, 106, 18, 255, 170, 102, 11, 255, 163, 94, 8, 255, 137, 76, 4, 255, 128, 71, 13, 255, 133, 77, 8, 255, 136, 86, 6, 255, 142, 83, 20, 255, 146, 81, 7, 255, 148, 83, 8, 255, 154, 94, 3, 255, 145, 81, 16, 255, 134, 79, 12, 255, 143, 91, 11, 255, 164, 99, 6, 255, 176, 108, 8, 255, 182, 109, 11, 255, 186, 114, 8, 255, 183, 107, 4, 255, 174, 94, 2, 255, 175, 99, 6, 255, 191, 113, 8, 255, 190, 108, 0, 255, 195, 111, 17, 255, 191, 115, 12, 255, 169, 101, 10, 255, 195, 134, 5, 255, 199, 136, 9, 255, 182, 118, 15, 255, 200, 142, 13, 255, 218, 164, 11, 255, 213, 163, 2, 255, 215, 168, 0, 255, 221, 169, 3, 255, 223, 168, 9, 255, 222, 168, 7, 255, 221, 166, 4, 255, 213, 158, 2, 255, 213, 160, 0, 255, 220, 169, 0, 255, 215, 159, 7, 255, 219, 170, 6, 255, 217, 171, 8, 255, 216, 171, 6, 255, 221, 178, 4, 255, 221, 177, 3, 255, 212, 166, 4, 255, 206, 161, 5, 255, 212, 171, 5, 255, 213, 171, 1, 255, 206, 159, 5, 255, 202, 148, 11, 255, 203, 151, 2, 255, 208, 156, 4, 255, 204, 149, 10, 255, 209, 155, 19, 255, 211, 161, 7, 255, 210, 158, 7, 255, 204, 146, 10, 255, 211, 154, 7, 255, 208, 150, 6, 255, 205, 146, 9, 255, 205, 145, 5, 255, 203, 143, 11, 255, 198, 136, 5, 255, 199, 134, 5, 255, 207, 142, 11, 255, 211, 145, 6, 255, 213, 147, 6, 255, 210, 140, 18, 255, 200, 128, 14, 255, 200, 128, 11, 255, 201, 130, 6, 255, 203, 130, 6, 255, 207, 132, 11, 255, 203, 129, 1, 255, 200, 125, 3, 255, 200, 123, 10, 255, 198, 122, 2, 255, 195, 119, 5, 255, 193, 118, 9, 255, 189, 111, 10, 255, 188, 111, 2, 255, 186, 108, 8, 255, 185, 102, 5, 255, 181, 96, 3, 255, 172, 90, 7, 255, 162, 85, 5, 255, 142, 65, 5, 255, 143, 64, 10, 255, 130, 54, 6, 255, 128, 52, 5, 255, 128, 50, 1, 255, 122, 51, 8, 255, 119, 52, 5, 255, 128, 55, 3, 255, 124, 42, 4, 255, 111, 37, 6, 255, 108, 40, 4, 255, 105, 42, 0, 255, 101, 38, 1, 255, 101, 40, 5, 255, 96, 38, 1, 255, 106, 43, 4, 255, 112, 45, 3, 255, 108, 40, 6, 255, 100, 41, 4, 255, 100, 44, 7, 255, 99, 40, 4, 255, 110, 43, 3, 255, 118, 48, 7, 255, 114, 45, 5, 255, 112, 43, 5, 255, 113, 47, 2, 255, 112, 47, 3, 255, 105, 42, 5, 255, 100, 43, 4, 255, 146, 73, 4, 255, 163, 87, 0, 255, 165, 89, 5, 255, 168, 87, 2, 255, 170, 90, 6, 255, 175, 96, 3, 255, 175, 94, 2, 255, 176, 92, 2, 255, 177, 92, 5, 255, 174, 89, 4, 255, 170, 85, 2, 255, 173, 89, 5, 255, 172, 89, 2, 255, 168, 86, 1, 255, 174, 91, 4, 255, 174, 87, 0, 255, 172, 85, 1, 255, 170, 88, 7, 255, 176, 87, 7, 255, 168, 81, 5, 255, 143, 58, 2, 255, 129, 39, 5, 255, 152, 64, 6, 255, 154, 61, 2, 255, 127, 39, 3, 255, 118, 46, 3, 255, 118, 43, 3, 255, 119, 39, 4, 255, 128, 46, 4, 255, 119, 43, 1, 255, 104, 34, 1, 255, 115, 40, 4, 255, 116, 40, 1, 255, 116, 39, 8, 255, 109, 39, 5, 255, 99, 31, 1, 255, 100, 30, 2, 255, 99, 34, 0, 255, 96, 29, 2, 255, 90, 29, 5, 255, 91, 34, 3, 255, 89, 33, 0, 255, 94, 33, 1, 255, 89, 31, 2, 255, 88, 30, 0, 255, 87, 29, 0, 255, 90, 33, 4, 255, 88, 35, 3, 255, 80, 29, 0, 255, 82, 30, 3, 255, 83, 29, 3, 255, 80, 28, 3, 255, 72, 25, 1, 255, 63, 24, 3, 255, 52, 16, 2, 255, 53, 15, 3, 255, 63, 19, 7, 255, 63, 19, 1, 255, 54, 20, 1, 255, 55, 19, 3, 255, 63, 19, 3, 255, 70, 20, 0, 255, 72, 21, 3, 255, 72, 18, 3, 255, 69, 26, 0, 255, 92, 34, 4, 255, 99, 33, 1, 255, 96, 38, 2, 255, 95, 40, 2, 255, 91, 36, 0, 255, 93, 39, 5, 255, 83, 31, 3, 255, 63, 22, 1, 255, 62, 20, 4, 255, 71, 19, 2, 255, 79, 22, 2, 255, 81, 24, 3, 255, 90, 26, 2, 255, 98, 29, 3, 255, 3, 3, 1, 255, 4, 2, 1, 255, 5, 1, 0, 255, 6, 2, 1, 255, 6, 2, 1, 255, 6, 3, 1, 255, 6, 1, 2, 255, 9, 3, 6, 255, 17, 8, 8, 255, 14, 4, 3, 255, 14, 4, 5, 255, 15, 4, 10, 255, 15, 4, 11, 255, 16, 6, 4, 255, 16, 6, 4, 255, 15, 5, 3, 255, 16, 6, 4, 255, 17, 6, 4, 255, 17, 8, 5, 255, 13, 9, 5, 255, 15, 6, 4, 255, 16, 7, 3, 255, 19, 10, 5, 255, 29, 15, 12, 255, 19, 10, 5, 255, 12, 14, 4, 255, 16, 10, 4, 255, 16, 12, 8, 255, 17, 11, 8, 255, 28, 12, 11, 255, 19, 14, 7, 255, 25, 17, 11, 255, 23, 18, 9, 255, 31, 20, 10, 255, 35, 22, 12, 255, 30, 22, 13, 255, 26, 23, 14, 255, 27, 25, 11, 255, 30, 24, 11, 255, 26, 25, 6, 255, 30, 23, 8, 255, 38, 29, 5, 255, 40, 31, 6, 255, 45, 32, 5, 255, 39, 28, 9, 255, 43, 34, 4, 255, 52, 35, 3, 255, 53, 40, 7, 255, 73, 60, 9, 255, 61, 45, 8, 255, 63, 47, 5, 255, 68, 49, 6, 255, 59, 44, 3, 255, 60, 51, 6, 255, 63, 53, 4, 255, 62, 47, 4, 255, 67, 48, 6, 255, 69, 50, 1, 255, 65, 51, 1, 255, 60, 55, 7, 255, 73, 51, 5, 255, 60, 51, 7, 255, 108, 85, 9, 255, 185, 138, 3, 255, 199, 153, 2, 255, 196, 150, 1, 255, 181, 128, 2, 255, 154, 95, 8, 255, 111, 61, 2, 255, 84, 53, 6, 255, 71, 49, 3, 255, 72, 47, 3, 255, 71, 48, 4, 255, 69, 48, 2, 255, 74, 43, 0, 255, 83, 45, 8, 255, 72, 39, 1, 255, 70, 44, 3, 255, 68, 44, 5, 255, 64, 40, 4, 255, 65, 43, 4, 255, 73, 42, 3, 255, 79, 41, 3, 255, 69, 40, 1, 255, 64, 40, 4, 255, 68, 39, 1, 255, 70, 38, 3, 255, 77, 40, 4, 255, 69, 39, 2, 255, 75, 41, 2, 255, 82, 43, 4, 255, 78, 44, 2, 255, 79, 45, 1, 255, 79, 42, 1, 255, 77, 42, 1, 255, 74, 47, 4, 255, 76, 43, 2, 255, 80, 43, 4, 255, 73, 43, 1, 255, 82, 45, 4, 255, 87, 42, 3, 255, 85, 41, 1, 255, 82, 42, 1, 255, 84, 43, 5, 255, 87, 44, 7, 255, 86, 41, 4, 255, 87, 44, 3, 255, 89, 46, 4, 255, 89, 44, 3, 255, 88, 45, 1, 255, 87, 46, 4, 255, 87, 46, 1, 255, 91, 47, 3, 255, 94, 45, 3, 255, 96, 46, 1, 255, 96, 45, 2, 255, 94, 45, 3, 255, 93, 47, 5, 255, 91, 46, 5, 255, 85, 45, 2, 255, 85, 50, 4, 255, 84, 51, 4, 255, 86, 50, 1, 255, 89, 47, 0, 255, 92, 48, 3, 255, 90, 48, 3, 255, 90, 49, 4, 255, 89, 47, 4, 255, 84, 53, 4, 255, 80, 49, 5, 255, 85, 52, 4, 255, 86, 52, 0, 255, 87, 53, 6, 255, 80, 50, 7, 255, 78, 53, 2, 255, 88, 50, 1, 255, 121, 63, 7, 255, 147, 76, 13, 255, 167, 86, 8, 255, 184, 95, 1, 255, 181, 91, 13, 255, 182, 103, 13, 255, 189, 109, 15, 255, 189, 108, 8, 255, 191, 108, 9, 255, 194, 110, 16, 255, 182, 99, 11, 255, 176, 86, 12, 255, 196, 106, 20, 255, 172, 82, 5, 255, 201, 116, 15, 255, 202, 122, 10, 255, 180, 101, 8, 255, 188, 107, 13, 255, 190, 107, 3, 255, 174, 87, 6, 255, 169, 78, 12, 255, 177, 89, 13, 255, 198, 118, 15, 255, 198, 122, 10, 255, 195, 118, 2, 255, 191, 110, 13, 255, 189, 109, 12, 255, 189, 108, 18, 255, 180, 97, 5, 255, 188, 104, 8, 255, 194, 116, 5, 255, 190, 115, 17, 255, 188, 111, 13, 255, 187, 108, 11, 255, 177, 97, 8, 255, 172, 95, 10, 255, 179, 105, 11, 255, 185, 113, 6, 255, 181, 109, 13, 255, 179, 110, 5, 255, 186, 116, 5, 255, 188, 114, 17, 255, 185, 113, 12, 255, 185, 112, 9, 255, 178, 113, 9, 255, 184, 108, 14, 255, 181, 107, 18, 255, 182, 111, 4, 255, 184, 106, 13, 255, 179, 104, 17, 255, 175, 104, 9, 255, 182, 105, 11, 255, 164, 93, 17, 255, 158, 91, 18, 255, 162, 91, 7, 255, 153, 89, 9, 255, 144, 92, 20, 255, 166, 103, 16, 255, 160, 95, 7, 255, 126, 71, 6, 255, 114, 69, 8, 255, 104, 67, 8, 255, 110, 74, 9, 255, 148, 98, 7, 255, 170, 111, 9, 255, 125, 75, 19, 255, 93, 58, 3, 255, 101, 62, 4, 255, 112, 67, 12, 255, 101, 66, 16, 255, 105, 70, 3, 255, 119, 78, 10, 255, 133, 85, 11, 255, 136, 87, 10, 255, 149, 93, 11, 255, 167, 103, 5, 255, 180, 114, 14, 255, 183, 110, 7, 255, 190, 115, 9, 255, 190, 117, 14, 255, 193, 119, 8, 255, 199, 122, 13, 255, 203, 125, 5, 255, 202, 122, 2, 255, 200, 118, 3, 255, 199, 119, 8, 255, 194, 116, 13, 255, 186, 107, 19, 255, 194, 110, 16, 255, 195, 116, 11, 255, 196, 117, 5, 255, 193, 112, 3, 255, 182, 103, 5, 255, 186, 118, 8, 255, 196, 132, 6, 255, 191, 131, 14, 255, 194, 147, 10, 255, 209, 160, 3, 255, 214, 154, 6, 255, 220, 167, 2, 255, 218, 174, 9, 255, 222, 170, 5, 255, 223, 171, 0, 255, 221, 169, 1, 255, 224, 170, 3, 255, 218, 166, 0, 255, 218, 166, 3, 255, 223, 170, 4, 255, 217, 164, 8, 255, 217, 168, 3, 255, 223, 179, 4, 255, 222, 179, 6, 255, 220, 176, 9, 255, 220, 178, 1, 255, 218, 176, 2, 255, 215, 173, 7, 255, 212, 169, 11, 255, 203, 159, 9, 255, 201, 154, 11, 255, 207, 162, 3, 255, 207, 163, 2, 255, 204, 157, 3, 255, 209, 158, 8, 255, 213, 164, 8, 255, 210, 159, 7, 255, 212, 156, 12, 255, 209, 152, 9, 255, 207, 150, 7, 255, 199, 141, 2, 255, 209, 152, 7, 255, 209, 152, 14, 255, 208, 152, 16, 255, 207, 150, 1, 255, 209, 148, 3, 255, 207, 146, 4, 255, 208, 146, 4, 255, 208, 143, 2, 255, 201, 130, 15, 255, 193, 120, 16, 255, 182, 105, 4, 255, 186, 108, 10, 255, 195, 117, 13, 255, 199, 122, 4, 255, 201, 124, 10, 255, 202, 124, 12, 255, 200, 123, 9, 255, 195, 120, 6, 255, 195, 120, 4, 255, 193, 118, 2, 255, 188, 111, 6, 255, 188, 111, 4, 255, 183, 103, 10, 255, 182, 101, 6, 255, 185, 99, 2, 255, 172, 84, 7, 255, 150, 72, 2, 255, 137, 65, 1, 255, 144, 71, 2, 255, 136, 63, 6, 255, 123, 49, 8, 255, 131, 56, 5, 255, 135, 63, 0, 255, 127, 54, 7, 255, 117, 45, 6, 255, 116, 47, 7, 255, 116, 42, 1, 255, 114, 46, 3, 255, 112, 48, 4, 255, 108, 45, 5, 255, 95, 32, 1, 255, 92, 34, 5, 255, 107, 48, 11, 255, 106, 50, 5, 255, 100, 43, 4, 255, 100, 41, 3, 255, 101, 41, 3, 255, 96, 38, 1, 255, 100, 42, 1, 255, 105, 41, 1, 255, 107, 42, 1, 255, 108, 44, 4, 255, 112, 50, 3, 255, 113, 52, 2, 255, 105, 43, 8, 255, 98, 43, 6, 255, 132, 66, 3, 255, 161, 87, 6, 255, 163, 86, 11, 255, 169, 87, 5, 255, 169, 90, 2, 255, 175, 94, 2, 255, 176, 91, 1, 255, 175, 90, 1, 255, 171, 88, 1, 255, 168, 86, 4, 255, 166, 85, 4, 255, 168, 88, 6, 255, 170, 88, 1, 255, 175, 88, 1, 255, 175, 86, 1, 255, 173, 88, 0, 255, 174, 90, 3, 255, 173, 88, 3, 255, 152, 67, 4, 255, 129, 49, 1, 255, 119, 44, 6, 255, 119, 47, 8, 255, 123, 47, 2, 255, 125, 44, 0, 255, 122, 40, 2, 255, 124, 44, 4, 255, 128, 46, 4, 255, 124, 46, 3, 255, 113, 41, 5, 255, 101, 32, 2, 255, 106, 38, 5, 255, 116, 42, 5, 255, 110, 41, 1, 255, 108, 39, 5, 255, 107, 39, 2, 255, 107, 37, 3, 255, 108, 41, 4, 255, 119, 49, 2, 255, 111, 40, 0, 255, 100, 37, 3, 255, 100, 34, 2, 255, 96, 37, 0, 255, 95, 34, 3, 255, 92, 31, 4, 255, 94, 34, 2, 255, 93, 31, 3, 255, 88, 30, 2, 255, 82, 29, 0, 255, 82, 31, 3, 255, 82, 29, 4, 255, 84, 27, 6, 255, 77, 24, 0, 255, 71, 25, 0, 255, 64, 21, 1, 255, 57, 16, 4, 255, 52, 16, 5, 255, 47, 13, 3, 255, 45, 16, 1, 255, 42, 17, 0, 255, 46, 14, 4, 255, 56, 15, 3, 255, 58, 16, 0, 255, 57, 18, 2, 255, 64, 19, 1, 255, 70, 25, 0, 255, 90, 32, 2, 255, 99, 36, 4, 255, 102, 36, 4, 255, 101, 39, 1, 255, 97, 39, 4, 255, 94, 31, 2, 255, 92, 30, 0, 255, 77, 28, 2, 255, 62, 19, 2, 255, 67, 19, 5, 255, 76, 25, 8, 255, 76, 22, 6, 255, 80, 23, 5, 255, 86, 25, 1, 255, 5, 1, 0, 255, 6, 2, 1, 255, 4, 1, 0, 255, 5, 2, 1, 255, 5, 1, 0, 255, 4, 0, 0, 255, 5, 2, 0, 255, 8, 1, 1, 255, 16, 5, 9, 255, 18, 5, 14, 255, 18, 7, 15, 255, 15, 4, 8, 255, 14, 4, 6, 255, 13, 5, 6, 255, 14, 7, 6, 255, 12, 4, 2, 255, 14, 5, 3, 255, 14, 4, 2, 255, 16, 6, 4, 255, 9, 6, 3, 255, 13, 5, 2, 255, 18, 6, 4, 255, 19, 10, 4, 255, 17, 11, 5, 255, 16, 10, 4, 255, 18, 11, 4, 255, 19, 11, 5, 255, 17, 12, 8, 255, 18, 13, 8, 255, 30, 20, 13, 255, 25, 18, 9, 255, 26, 18, 12, 255, 26, 18, 11, 255, 26, 23, 10, 255, 28, 24, 10, 255, 29, 21, 11, 255, 28, 19, 10, 255, 30, 25, 11, 255, 29, 26, 3, 255, 33, 29, 0, 255, 37, 29, 9, 255, 34, 32, 9, 255, 34, 28, 12, 255, 41, 32, 8, 255, 37, 38, 10, 255, 44, 41, 2, 255, 54, 36, 1, 255, 74, 59, 4, 255, 60, 47, 4, 255, 67, 46, 5, 255, 71, 52, 1, 255, 60, 48, 0, 255, 59, 54, 0, 255, 54, 52, 3, 255, 64, 53, 4, 255, 70, 48, 4, 255, 64, 46, 2, 255, 69, 49, 0, 255, 77, 53, 3, 255, 70, 52, 3, 255, 75, 52, 4, 255, 73, 56, 9, 255, 153, 116, 8, 255, 200, 151, 1, 255, 190, 146, 5, 255, 190, 140, 8, 255, 167, 110, 3, 255, 127, 69, 2, 255, 96, 46, 2, 255, 68, 46, 1, 255, 69, 51, 0, 255, 70, 45, 1, 255, 72, 47, 6, 255, 71, 47, 4, 255, 71, 45, 1, 255, 74, 43, 4, 255, 71, 39, 0, 255, 73, 40, 2, 255, 70, 41, 4, 255, 67, 42, 2, 255, 68, 45, 2, 255, 69, 44, 4, 255, 68, 39, 4, 255, 63, 37, 4, 255, 61, 39, 4, 255, 66, 39, 1, 255, 69, 38, 2, 255, 74, 36, 0, 255, 74, 41, 4, 255, 79, 44, 3, 255, 79, 42, 1, 255, 83, 40, 1, 255, 83, 44, 4, 255, 78, 46, 4, 255, 73, 42, 1, 255, 75, 40, 3, 255, 77, 42, 3, 255, 80, 42, 4, 255, 74, 43, 1, 255, 84, 42, 2, 255, 88, 40, 1, 255, 87, 43, 2, 255, 85, 45, 3, 255, 83, 42, 2, 255, 83, 39, 5, 255, 89, 46, 6, 255, 88, 48, 4, 255, 87, 46, 2, 255, 87, 44, 3, 255, 92, 46, 5, 255, 85, 44, 4, 255, 84, 45, 0, 255, 94, 47, 3, 255, 95, 46, 5, 255, 93, 48, 1, 255, 95, 48, 0, 255, 96, 51, 2, 255, 90, 47, 0, 255, 91, 48, 2, 255, 93, 49, 2, 255, 91, 48, 0, 255, 93, 53, 3, 255, 91, 52, 2, 255, 92, 49, 0, 255, 92, 47, 3, 255, 92, 48, 4, 255, 90, 47, 1, 255, 90, 47, 4, 255, 95, 50, 2, 255, 98, 55, 4, 255, 93, 52, 2, 255, 91, 48, 2, 255, 92, 49, 5, 255, 93, 50, 6, 255, 85, 47, 2, 255, 82, 52, 6, 255, 82, 51, 9, 255, 89, 51, 4, 255, 95, 51, 2, 255, 120, 63, 10, 255, 157, 87, 15, 255, 165, 96, 11, 255, 173, 99, 9, 255, 181, 104, 7, 255, 181, 102, 9, 255, 175, 94, 6, 255, 175, 93, 10, 255, 171, 92, 9, 255, 184, 106, 12, 255, 190, 112, 13, 255, 186, 108, 10, 255, 198, 123, 5, 255, 202, 130, 0, 255, 197, 120, 7, 255, 202, 121, 15, 255, 188, 105, 13, 255, 174, 90, 1, 255, 191, 109, 2, 255, 193, 113, 11, 255, 190, 112, 11, 255, 185, 104, 8, 255, 181, 100, 10, 255, 189, 111, 10, 255, 182, 105, 9, 255, 174, 98, 15, 255, 172, 99, 6, 255, 181, 109, 1, 255, 179, 105, 6, 255, 179, 103, 9, 255, 168, 91, 4, 255, 164, 87, 12, 255, 159, 88, 9, 255, 150, 82, 7, 255, 160, 93, 10, 255, 165, 97, 10, 255, 170, 99, 10, 255, 167, 93, 13, 255, 169, 99, 9, 255, 166, 100, 7, 255, 167, 97, 10, 255, 163, 87, 6, 255, 155, 78, 12, 255, 141, 78, 14, 255, 141, 74, 13, 255, 128, 60, 5, 255, 110, 60, 9, 255, 128, 68, 7, 255, 115, 55, 4, 255, 99, 47, 14, 255, 98, 63, 15, 255, 126, 79, 12, 255, 141, 85, 12, 255, 131, 73, 8, 255, 141, 83, 9, 255, 135, 81, 17, 255, 121, 73, 15, 255, 108, 59, 20, 255, 118, 71, 9, 255, 133, 80, 6, 255, 151, 86, 13, 255, 130, 70, 11, 255, 115, 71, 11, 255, 120, 79, 9, 255, 143, 87, 12, 255, 160, 93, 11, 255, 163, 97, 15, 255, 174, 109, 10, 255, 190, 114, 11, 255, 196, 117, 8, 255, 201, 122, 10, 255, 210, 120, 15, 255, 211, 127, 12, 255, 199, 128, 9, 255, 197, 126, 10, 255, 202, 118, 3, 255, 208, 123, 4, 255, 205, 123, 8, 255, 200, 122, 4, 255, 197, 120, 13, 255, 201, 119, 11, 255, 205, 124, 8, 255, 204, 123, 8, 255, 200, 121, 5, 255, 202, 122, 9, 255, 206, 119, 3, 255, 206, 118, 5, 255, 199, 116, 7, 255, 198, 123, 7, 255, 185, 113, 17, 255, 198, 130, 7, 255, 199, 140, 0, 255, 199, 149, 9, 255, 206, 165, 5, 255, 218, 171, 5, 255, 213, 149, 6, 255, 213, 150, 6, 255, 224, 171, 5, 255, 226, 176, 5, 255, 223, 173, 2, 255, 220, 170, 2, 255, 221, 171, 2, 255, 221, 171, 2, 255, 217, 166, 1, 255, 220, 168, 6, 255, 221, 175, 1, 255, 222, 179, 0, 255, 219, 173, 7, 255, 226, 178, 10, 255, 222, 179, 11, 255, 222, 180, 4, 255, 220, 173, 6, 255, 220, 173, 2, 255, 217, 169, 0, 255, 210, 160, 7, 255, 210, 159, 10, 255, 208, 160, 4, 255, 207, 166, 0, 255, 204, 158, 3, 255, 202, 152, 4, 255, 208, 158, 10, 255, 211, 160, 5, 255, 209, 155, 4, 255, 210, 157, 4, 255, 207, 153, 7, 255, 206, 148, 12, 255, 208, 152, 6, 255, 208, 152, 4, 255, 206, 149, 7, 255, 206, 150, 6, 255, 207, 144, 7, 255, 206, 141, 10, 255, 206, 143, 7, 255, 205, 139, 3, 255, 202, 134, 3, 255, 202, 131, 9, 255, 201, 127, 7, 255, 193, 118, 2, 255, 193, 118, 2, 255, 198, 123, 1, 255, 203, 127, 5, 255, 200, 124, 7, 255, 197, 120, 6, 255, 197, 120, 9, 255, 195, 120, 5, 255, 189, 114, 3, 255, 189, 112, 9, 255, 184, 107, 2, 255, 184, 105, 4, 255, 178, 97, 4, 255, 181, 100, 10, 255, 165, 89, 7, 255, 137, 67, 0, 255, 131, 63, 3, 255, 134, 61, 6, 255, 123, 59, 0, 255, 117, 56, 4, 255, 127, 54, 5, 255, 145, 64, 2, 255, 139, 63, 5, 255, 123, 53, 7, 255, 122, 54, 3, 255, 121, 46, 7, 255, 121, 51, 2, 255, 111, 44, 2, 255, 107, 41, 5, 255, 99, 35, 2, 255, 94, 35, 1, 255, 106, 44, 1, 255, 112, 45, 0, 255, 109, 44, 3, 255, 106, 41, 6, 255, 91, 33, 3, 255, 95, 32, 3, 255, 101, 39, 6, 255, 104, 40, 2, 255, 106, 43, 3, 255, 106, 42, 4, 255, 105, 43, 1, 255, 105, 44, 1, 255, 105, 41, 6, 255, 105, 41, 3, 255, 113, 50, 1, 255, 151, 75, 4, 255, 165, 82, 4, 255, 168, 84, 2, 255, 170, 86, 1, 255, 175, 93, 1, 255, 174, 89, 0, 255, 169, 84, 6, 255, 165, 81, 4, 255, 166, 85, 2, 255, 165, 85, 0, 255, 164, 84, 3, 255, 171, 85, 10, 255, 175, 83, 4, 255, 175, 84, 0, 255, 172, 88, 3, 255, 159, 76, 5, 255, 146, 57, 4, 255, 129, 49, 1, 255, 125, 47, 2, 255, 122, 43, 1, 255, 127, 47, 2, 255, 121, 45, 1, 255, 112, 41, 1, 255, 116, 44, 5, 255, 119, 42, 5, 255, 120, 45, 3, 255, 112, 46, 1, 255, 94, 34, 2, 255, 94, 27, 6, 255, 116, 39, 8, 255, 121, 43, 3, 255, 112, 39, 0, 255, 108, 39, 1, 255, 111, 41, 3, 255, 117, 42, 3, 255, 121, 49, 3, 255, 133, 53, 6, 255, 123, 45, 2, 255, 112, 44, 5, 255, 112, 38, 2, 255, 106, 44, 3, 255, 99, 42, 2, 255, 94, 38, 1, 255, 91, 34, 3, 255, 87, 26, 2, 255, 87, 28, 5, 255, 82, 27, 1, 255, 84, 30, 0, 255, 87, 28, 1, 255, 86, 25, 4, 255, 75, 19, 1, 255, 68, 18, 0, 255, 70, 24, 2, 255, 61, 22, 1, 255, 42, 12, 0, 255, 38, 12, 5, 255, 44, 17, 7, 255, 41, 18, 5, 255, 39, 13, 4, 255, 46, 16, 6, 255, 48, 14, 1, 255, 47, 13, 5, 255, 56, 23, 5, 255, 69, 23, 2, 255, 74, 24, 0, 255, 85, 25, 2, 255, 92, 33, 6, 255, 95, 36, 1, 255, 93, 36, 4, 255, 89, 35, 4, 255, 88, 29, 0, 255, 88, 27, 3, 255, 71, 25, 3, 255, 57, 20, 0, 255, 65, 21, 2, 255, 68, 20, 2, 255, 68, 19, 1, 255, 78, 27, 5, 255, 6, 0, 0, 255, 5, 2, 1, 255, 1, 1, 0, 255, 2, 2, 0, 255, 3, 1, 0, 255, 5, 1, 2, 255, 4, 2, 1, 255, 6, 3, 0, 255, 12, 2, 2, 255, 17, 6, 8, 255, 12, 5, 7, 255, 12, 4, 7, 255, 12, 5, 7, 255, 11, 7, 8, 255, 13, 7, 8, 255, 13, 6, 4, 255, 16, 8, 6, 255, 15, 5, 3, 255, 17, 6, 5, 255, 17, 9, 6, 255, 15, 11, 6, 255, 14, 7, 3, 255, 20, 10, 5, 255, 18, 12, 6, 255, 19, 14, 8, 255, 19, 12, 4, 255, 25, 13, 6, 255, 14, 13, 5, 255, 21, 19, 11, 255, 42, 18, 13, 255, 20, 16, 4, 255, 18, 18, 8, 255, 32, 19, 13, 255, 33, 20, 10, 255, 29, 19, 6, 255, 29, 24, 11, 255, 29, 24, 10, 255, 33, 26, 8, 255, 35, 25, 11, 255, 39, 29, 4, 255, 43, 26, 7, 255, 39, 31, 6, 255, 42, 32, 8, 255, 51, 34, 1, 255, 42, 38, 9, 255, 40, 33, 10, 255, 66, 48, 7, 255, 71, 54, 3, 255, 56, 48, 1, 255, 63, 55, 7, 255, 61, 48, 4, 255, 57, 43, 4, 255, 63, 50, 1, 255, 66, 50, 3, 255, 73, 54, 4, 255, 73, 53, 0, 255, 71, 50, 1, 255, 69, 53, 3, 255, 69, 55, 4, 255, 80, 54, 3, 255, 73, 49, 5, 255, 107, 76, 5, 255, 191, 142, 8, 255, 199, 150, 1, 255, 188, 134, 4, 255, 187, 113, 6, 255, 150, 79, 4, 255, 98, 53, 6, 255, 79, 42, 4, 255, 68, 43, 4, 255, 73, 43, 0, 255, 73, 45, 1, 255, 73, 46, 5, 255, 72, 41, 1, 255, 70, 45, 1, 255, 70, 44, 2, 255, 72, 42, 3, 255, 69, 40, 3, 255, 71, 37, 2, 255, 79, 40, 4, 255, 87, 45, 6, 255, 73, 41, 3, 255, 59, 33, 5, 255, 59, 35, 5, 255, 60, 40, 7, 255, 63, 39, 1, 255, 64, 37, 2, 255, 74, 39, 3, 255, 77, 45, 6, 255, 78, 44, 3, 255, 79, 44, 6, 255, 79, 40, 6, 255, 75, 38, 4, 255, 76, 38, 2, 255, 76, 38, 2, 255, 78, 40, 3, 255, 79, 42, 6, 255, 84, 36, 3, 255, 79, 40, 3, 255, 85, 44, 4, 255, 86, 43, 2, 255, 85, 44, 2, 255, 83, 43, 0, 255, 86, 44, 0, 255, 90, 46, 2, 255, 88, 45, 2, 255, 86, 45, 4, 255, 87, 45, 3, 255, 89, 46, 2, 255, 87, 44, 2, 255, 86, 44, 3, 255, 90, 45, 3, 255, 89, 47, 4, 255, 89, 44, 3, 255, 90, 46, 1, 255, 91, 51, 2, 255, 88, 51, 2, 255, 84, 48, 1, 255, 89, 49, 3, 255, 92, 47, 2, 255, 97, 49, 6, 255, 95, 49, 3, 255, 97, 52, 4, 255, 98, 51, 3, 255, 95, 47, 7, 255, 95, 51, 6, 255, 94, 54, 1, 255, 95, 51, 5, 255, 98, 44, 4, 255, 100, 53, 2, 255, 97, 55, 2, 255, 95, 53, 6, 255, 95, 54, 2, 255, 93, 54, 1, 255, 94, 56, 7, 255, 91, 55, 3, 255, 90, 51, 3, 255, 95, 54, 3, 255, 87, 52, 5, 255, 94, 52, 9, 255, 137, 81, 8, 255, 144, 84, 6, 255, 146, 77, 6, 255, 161, 88, 12, 255, 177, 98, 17, 255, 174, 94, 7, 255, 175, 93, 17, 255, 183, 103, 10, 255, 174, 93, 8, 255, 183, 103, 15, 255, 192, 113, 13, 255, 186, 105, 11, 255, 187, 107, 7, 255, 189, 107, 12, 255, 187, 110, 6, 255, 184, 106, 9, 255, 169, 88, 2, 255, 168, 85, 14, 255, 182, 103, 11, 255, 182, 104, 6, 255, 183, 103, 13, 255, 180, 99, 8, 255, 177, 99, 9, 255, 174, 101, 5, 255, 170, 96, 13, 255, 159, 87, 11, 255, 170, 98, 4, 255, 169, 93, 4, 255, 170, 92, 7, 255, 170, 91, 4, 255, 161, 85, 4, 255, 147, 77, 11, 255, 136, 73, 1, 255, 138, 73, 5, 255, 153, 87, 19, 255, 144, 77, 11, 255, 148, 78, 10, 255, 141, 74, 1, 255, 127, 67, 0, 255, 128, 67, 14, 255, 123, 57, 8, 255, 121, 61, 13, 255, 133, 72, 11, 255, 117, 66, 6, 255, 100, 58, 19, 255, 135, 86, 5, 255, 142, 84, 12, 255, 114, 68, 8, 255, 119, 75, 11, 255, 132, 75, 11, 255, 129, 76, 20, 255, 123, 67, 16, 255, 104, 60, 15, 255, 121, 75, 10, 255, 124, 77, 9, 255, 131, 75, 5, 255, 153, 78, 19, 255, 153, 84, 16, 255, 156, 88, 7, 255, 173, 94, 10, 255, 170, 97, 10, 255, 176, 104, 7, 255, 189, 108, 12, 255, 197, 111, 8, 255, 196, 114, 12, 255, 199, 117, 15, 255, 203, 118, 13, 255, 205, 124, 11, 255, 206, 131, 9, 255, 203, 125, 10, 255, 198, 124, 4, 255, 205, 126, 5, 255, 207, 121, 5, 255, 206, 123, 5, 255, 203, 124, 11, 255, 199, 122, 7, 255, 200, 121, 5, 255, 201, 125, 0, 255, 203, 123, 12, 255, 203, 121, 12, 255, 205, 125, 1, 255, 206, 126, 6, 255, 203, 125, 3, 255, 202, 124, 0, 255, 199, 115, 6, 255, 197, 119, 5, 255, 194, 117, 17, 255, 207, 133, 11, 255, 192, 116, 12, 255, 198, 128, 17, 255, 211, 151, 8, 255, 216, 159, 6, 255, 216, 161, 3, 255, 223, 169, 3, 255, 221, 166, 8, 255, 204, 142, 8, 255, 211, 149, 5, 255, 218, 164, 8, 255, 222, 176, 2, 255, 220, 176, 4, 255, 217, 171, 11, 255, 220, 172, 12, 255, 219, 171, 7, 255, 217, 170, 2, 255, 220, 177, 3, 255, 225, 183, 0, 255, 219, 170, 8, 255, 216, 168, 4, 255, 225, 182, 4, 255, 220, 180, 0, 255, 223, 179, 7, 255, 220, 174, 2, 255, 217, 167, 4, 255, 212, 165, 2, 255, 210, 163, 6, 255, 208, 164, 5, 255, 207, 163, 2, 255, 205, 154, 5, 255, 202, 147, 10, 255, 200, 147, 2, 255, 209, 161, 6, 255, 207, 161, 4, 255, 208, 159, 4, 255, 207, 156, 7, 255, 209, 154, 12, 255, 210, 154, 12, 255, 206, 150, 1, 255, 205, 149, 0, 255, 208, 149, 10, 255, 207, 145, 4, 255, 208, 146, 4, 255, 208, 144, 6, 255, 204, 135, 10, 255, 202, 132, 12, 255, 201, 133, 3, 255, 200, 130, 10, 255, 201, 131, 4, 255, 197, 124, 7, 255, 197, 124, 6, 255, 200, 128, 2, 255, 199, 127, 4, 255, 196, 122, 1, 255, 196, 116, 12, 255, 193, 115, 7, 255, 192, 115, 8, 255, 188, 109, 15, 255, 183, 102, 11, 255, 185, 104, 8, 255, 180, 102, 2, 255, 172, 92, 3, 255, 162, 84, 3, 255, 145, 67, 7, 255, 136, 63, 7, 255, 128, 64, 5, 255, 130, 61, 1, 255, 119, 55, 3, 255, 110, 48, 5, 255, 128, 50, 8, 255, 129, 53, 2, 255, 132, 62, 4, 255, 135, 59, 5, 255, 117, 49, 4, 255, 114, 47, 5, 255, 109, 44, 7, 255, 102, 40, 1, 255, 99, 41, 2, 255, 89, 35, 3, 255, 98, 38, 3, 255, 110, 40, 6, 255, 106, 40, 3, 255, 98, 32, 1, 255, 89, 33, 2, 255, 104, 38, 3, 255, 108, 41, 6, 255, 110, 43, 2, 255, 111, 46, 1, 255, 109, 43, 2, 255, 108, 45, 4, 255, 103, 43, 1, 255, 105, 42, 4, 255, 103, 37, 1, 255, 89, 36, 6, 255, 130, 57, 6, 255, 160, 78, 5, 255, 159, 80, 4, 255, 167, 87, 4, 255, 169, 88, 3, 255, 167, 85, 0, 255, 165, 81, 2, 255, 165, 82, 3, 255, 168, 86, 4, 255, 167, 85, 1, 255, 168, 84, 1, 255, 171, 85, 3, 255, 169, 82, 4, 255, 164, 75, 2, 255, 158, 68, 4, 255, 141, 54, 2, 255, 125, 44, 2, 255, 120, 38, 2, 255, 121, 40, 6, 255, 123, 47, 1, 255, 124, 47, 6, 255, 121, 39, 6, 255, 116, 35, 2, 255, 114, 36, 5, 255, 115, 42, 2, 255, 118, 43, 1, 255, 114, 41, 4, 255, 108, 37, 4, 255, 111, 44, 3, 255, 115, 47, 2, 255, 120, 43, 3, 255, 122, 40, 7, 255, 112, 36, 3, 255, 102, 33, 3, 255, 102, 35, 3, 255, 116, 41, 2, 255, 124, 47, 2, 255, 126, 50, 3, 255, 122, 51, 4, 255, 121, 44, 4, 255, 120, 43, 4, 255, 121, 48, 4, 255, 110, 49, 1, 255, 98, 40, 3, 255, 90, 27, 1, 255, 87, 28, 6, 255, 81, 30, 3, 255, 78, 28, 0, 255, 84, 28, 4, 255, 76, 22, 4, 255, 67, 18, 1, 255, 68, 21, 1, 255, 72, 26, 4, 255, 69, 23, 6, 255, 47, 15, 5, 255, 46, 16, 6, 255, 63, 23, 5, 255, 62, 22, 4, 255, 51, 12, 1, 255, 53, 18, 3, 255, 53, 18, 2, 255, 53, 15, 6, 255, 44, 16, 8, 255, 54, 19, 5, 255, 69, 18, 5, 255, 68, 15, 2, 255, 70, 27, 5, 255, 86, 32, 2, 255, 94, 30, 1, 255, 92, 28, 2, 255, 87, 24, 3, 255, 83, 24, 3, 255, 81, 26, 4, 255, 81, 25, 2, 255, 77, 23, 1, 255, 71, 20, 2, 255, 68, 18, 2, 255, 72, 22, 6, 255, 2, 0, 0, 255, 4, 2, 1, 255, 3, 1, 2, 255, 3, 1, 0, 255, 5, 2, 1, 255, 4, 0, 1, 255, 4, 0, 0, 255, 7, 3, 1, 255, 7, 0, 0, 255, 15, 6, 3, 255, 18, 12, 9, 255, 12, 8, 6, 255, 9, 7, 5, 255, 11, 6, 6, 255, 13, 7, 6, 255, 13, 6, 3, 255, 18, 9, 7, 255, 16, 6, 5, 255, 19, 9, 7, 255, 17, 7, 4, 255, 15, 10, 6, 255, 14, 7, 5, 255, 17, 6, 2, 255, 18, 8, 2, 255, 18, 11, 9, 255, 17, 12, 10, 255, 18, 11, 7, 255, 20, 13, 9, 255, 20, 14, 8, 255, 18, 14, 10, 255, 23, 17, 9, 255, 30, 19, 14, 255, 35, 18, 8, 255, 34, 22, 9, 255, 27, 22, 7, 255, 26, 24, 9, 255, 32, 27, 13, 255, 37, 29, 8, 255, 36, 26, 8, 255, 35, 29, 6, 255, 33, 30, 6, 255, 41, 34, 2, 255, 46, 38, 1, 255, 57, 38, 4, 255, 46, 32, 6, 255, 51, 38, 14, 255, 76, 61, 9, 255, 60, 46, 0, 255, 63, 52, 10, 255, 65, 47, 4, 255, 62, 46, 4, 255, 63, 45, 4, 255, 70, 53, 1, 255, 79, 56, 8, 255, 72, 55, 5, 255, 66, 54, 1, 255, 67, 51, 1, 255, 67, 52, 0, 255, 71, 54, 1, 255, 71, 55, 1, 255, 68, 57, 3, 255, 153, 106, 6, 255, 195, 140, 4, 255, 191, 140, 1, 255, 192, 131, 5, 255, 163, 96, 4, 255, 117, 58, 3, 255, 77, 42, 1, 255, 72, 44, 6, 255, 70, 43, 5, 255, 72, 45, 0, 255, 73, 42, 5, 255, 73, 40, 5, 255, 75, 40, 3, 255, 69, 41, 3, 255, 68, 42, 2, 255, 77, 42, 2, 255, 70, 45, 2, 255, 68, 39, 3, 255, 70, 45, 3, 255, 74, 46, 4, 255, 68, 34, 5, 255, 68, 36, 3, 255, 61, 34, 8, 255, 67, 39, 3, 255, 65, 43, 1, 255, 69, 43, 6, 255, 68, 39, 6, 255, 69, 39, 2, 255, 76, 40, 3, 255, 77, 38, 2, 255, 81, 45, 3, 255, 78, 39, 4, 255, 81, 39, 8, 255, 81, 43, 1, 255, 89, 42, 2, 255, 88, 45, 7, 255, 87, 41, 1, 255, 88, 42, 1, 255, 86, 43, 2, 255, 86, 49, 3, 255, 87, 45, 4, 255, 86, 42, 0, 255, 88, 45, 0, 255, 90, 49, 5, 255, 88, 43, 4, 255, 94, 46, 2, 255, 88, 52, 2, 255, 83, 48, 2, 255, 89, 46, 3, 255, 92, 43, 6, 255, 89, 44, 5, 255, 87, 45, 1, 255, 82, 46, 3, 255, 91, 48, 3, 255, 91, 46, 0, 255, 88, 46, 2, 255, 87, 45, 4, 255, 92, 48, 7, 255, 92, 45, 3, 255, 99, 52, 6, 255, 92, 46, 3, 255, 91, 48, 6, 255, 94, 53, 6, 255, 96, 52, 4, 255, 94, 53, 2, 255, 100, 53, 3, 255, 98, 53, 3, 255, 97, 45, 5, 255, 98, 49, 4, 255, 94, 51, 3, 255, 96, 53, 7, 255, 99, 53, 4, 255, 103, 53, 7, 255, 97, 51, 7, 255, 95, 54, 4, 255, 97, 57, 4, 255, 96, 51, 3, 255, 105, 55, 5, 255, 113, 56, 5, 255, 118, 59, 0, 255, 111, 60, 2, 255, 111, 58, 14, 255, 144, 73, 13, 255, 152, 84, 4, 255, 162, 82, 8, 255, 173, 92, 9, 255, 178, 101, 7, 255, 181, 97, 14, 255, 181, 104, 11, 255, 180, 106, 6, 255, 176, 94, 6, 255, 169, 90, 5, 255, 179, 103, 16, 255, 177, 100, 6, 255, 178, 96, 3, 255, 164, 84, 5, 255, 167, 83, 15, 255, 180, 97, 8, 255, 175, 91, 7, 255, 171, 88, 4, 255, 166, 89, 6, 255, 167, 88, 11, 255, 165, 88, 5, 255, 156, 84, 11, 255, 148, 80, 16, 255, 153, 78, 8, 255, 140, 70, 2, 255, 123, 63, 15, 255, 110, 53, 15, 255, 116, 66, 12, 255, 112, 61, 8, 255, 103, 54, 6, 255, 120, 70, 10, 255, 132, 72, 16, 255, 128, 69, 7, 255, 115, 74, 3, 255, 103, 54, 7, 255, 99, 48, 7, 255, 96, 51, 6, 255, 96, 51, 3, 255, 94, 56, 9, 255, 95, 56, 8, 255, 116, 66, 12, 255, 129, 78, 11, 255, 128, 78, 5, 255, 133, 73, 11, 255, 131, 68, 7, 255, 133, 74, 11, 255, 134, 75, 6, 255, 124, 67, 7, 255, 126, 71, 11, 255, 149, 85, 10, 255, 162, 87, 13, 255, 161, 87, 5, 255, 171, 94, 8, 255, 174, 98, 11, 255, 179, 103, 7, 255, 189, 106, 10, 255, 192, 110, 5, 255, 191, 111, 7, 255, 189, 110, 8, 255, 188, 107, 7, 255, 191, 113, 11, 255, 194, 119, 6, 255, 194, 120, 10, 255, 199, 128, 4, 255, 198, 126, 9, 255, 195, 122, 4, 255, 195, 117, 5, 255, 200, 122, 6, 255, 207, 124, 7, 255, 209, 123, 13, 255, 206, 125, 0, 255, 207, 130, 6, 255, 205, 129, 6, 255, 200, 120, 14, 255, 205, 128, 4, 255, 206, 132, 3, 255, 206, 128, 5, 255, 212, 134, 5, 255, 210, 135, 8, 255, 207, 126, 5, 255, 204, 120, 9, 255, 190, 116, 11, 255, 193, 124, 9, 255, 191, 121, 9, 255, 204, 132, 14, 255, 195, 123, 2, 255, 211, 138, 12, 255, 222, 161, 12, 255, 219, 162, 6, 255, 212, 149, 4, 255, 185, 115, 5, 255, 201, 135, 6, 255, 205, 138, 11, 255, 202, 138, 3, 255, 205, 146, 5, 255, 221, 170, 3, 255, 223, 178, 1, 255, 218, 172, 4, 255, 215, 168, 5, 255, 227, 180, 7, 255, 226, 179, 8, 255, 224, 177, 5, 255, 231, 183, 3, 255, 222, 171, 11, 255, 210, 157, 2, 255, 221, 171, 1, 255, 224, 176, 3, 255, 221, 177, 2, 255, 215, 173, 1, 255, 212, 166, 3, 255, 211, 164, 3, 255, 211, 165, 5, 255, 207, 165, 2, 255, 204, 155, 3, 255, 200, 145, 13, 255, 207, 154, 8, 255, 201, 152, 1, 255, 206, 159, 5, 255, 207, 160, 6, 255, 206, 156, 6, 255, 206, 154, 2, 255, 212, 155, 7, 255, 209, 151, 11, 255, 202, 142, 6, 255, 210, 152, 9, 255, 206, 148, 11, 255, 204, 146, 2, 255, 208, 147, 8, 255, 207, 147, 1, 255, 204, 140, 9, 255, 205, 136, 18, 255, 209, 139, 5, 255, 205, 137, 10, 255, 202, 133, 9, 255, 203, 133, 8, 255, 202, 131, 5, 255, 198, 127, 2, 255, 197, 124, 1, 255, 197, 122, 5, 255, 192, 116, 12, 255, 191, 116, 11, 255, 190, 113, 10, 255, 185, 107, 5, 255, 185, 107, 6, 255, 184, 107, 6, 255, 177, 100, 3, 255, 165, 87, 0, 255, 161, 78, 3, 255, 155, 68, 9, 255, 154, 69, 9, 255, 147, 68, 4, 255, 149, 72, 6, 255, 136, 61, 1, 255, 127, 58, 2, 255, 128, 59, 8, 255, 130, 55, 6, 255, 132, 56, 0, 255, 126, 50, 5, 255, 115, 45, 1, 255, 103, 44, 2, 255, 108, 47, 4, 255, 106, 42, 5, 255, 100, 41, 8, 255, 91, 34, 2, 255, 98, 39, 1, 255, 108, 42, 7, 255, 108, 41, 3, 255, 98, 33, 0, 255, 97, 39, 6, 255, 107, 42, 5, 255, 112, 47, 4, 255, 110, 44, 0, 255, 114, 46, 2, 255, 111, 46, 2, 255, 108, 42, 2, 255, 107, 38, 3, 255, 105, 42, 1, 255, 111, 47, 5, 255, 101, 44, 3, 255, 99, 40, 6, 255, 122, 52, 7, 255, 151, 76, 7, 255, 162, 83, 2, 255, 165, 81, 0, 255, 169, 84, 3, 255, 168, 85, 3, 255, 167, 84, 1, 255, 172, 81, 2, 255, 171, 76, 4, 255, 163, 72, 4, 255, 147, 64, 0, 255, 132, 57, 3, 255, 126, 49, 4, 255, 121, 42, 3, 255, 118, 41, 5, 255, 117, 43, 0, 255, 123, 41, 3, 255, 122, 43, 6, 255, 120, 46, 3, 255, 116, 42, 2, 255, 113, 37, 2, 255, 109, 37, 1, 255, 111, 41, 3, 255, 116, 42, 2, 255, 118, 41, 0, 255, 120, 45, 4, 255, 123, 45, 4, 255, 123, 46, 7, 255, 117, 49, 2, 255, 122, 42, 6, 255, 117, 41, 5, 255, 113, 40, 3, 255, 104, 35, 2, 255, 102, 36, 1, 255, 119, 42, 3, 255, 120, 46, 5, 255, 121, 47, 2, 255, 124, 48, 0, 255, 123, 48, 2, 255, 116, 44, 2, 255, 117, 46, 5, 255, 119, 52, 7, 255, 114, 43, 5, 255, 101, 31, 2, 255, 87, 27, 2, 255, 79, 24, 0, 255, 76, 27, 2, 255, 79, 24, 5, 255, 78, 19, 7, 255, 73, 21, 0, 255, 71, 26, 2, 255, 72, 22, 6, 255, 65, 19, 4, 255, 60, 21, 4, 255, 64, 21, 3, 255, 70, 22, 0, 255, 76, 23, 2, 255, 71, 24, 2, 255, 69, 24, 2, 255, 62, 19, 0, 255, 56, 19, 4, 255, 42, 14, 2, 255, 48, 16, 1, 255, 61, 21, 6, 255, 66, 24, 7, 255, 67, 24, 2, 255, 85, 30, 4, 255, 88, 28, 4, 255, 86, 26, 5, 255, 81, 23, 3, 255, 84, 29, 3, 255, 84, 30, 1, 255, 85, 30, 3, 255, 79, 24, 3, 255, 78, 24, 7, 255, 70, 20, 3, 255, 65, 21, 1, 255, 3, 2, 0, 255, 2, 0, 1, 255, 2, 0, 1, 255, 3, 0, 0, 255, 6, 2, 1, 255, 6, 1, 1, 255, 7, 1, 2, 255, 5, 1, 0, 255, 6, 0, 0, 255, 9, 1, 1, 255, 16, 9, 7, 255, 13, 8, 5, 255, 12, 8, 6, 255, 13, 9, 8, 255, 12, 6, 6, 255, 15, 8, 7, 255, 14, 6, 3, 255, 17, 9, 6, 255, 16, 8, 5, 255, 14, 7, 1, 255, 16, 7, 5, 255, 16, 7, 6, 255, 19, 8, 2, 255, 19, 9, 0, 255, 19, 12, 7, 255, 19, 15, 12, 255, 18, 16, 10, 255, 19, 17, 6, 255, 20, 19, 8, 255, 19, 17, 13, 255, 24, 19, 8, 255, 29, 21, 9, 255, 25, 18, 10, 255, 29, 23, 9, 255, 31, 26, 9, 255, 31, 25, 7, 255, 33, 25, 13, 255, 31, 26, 8, 255, 32, 28, 18, 255, 37, 31, 15, 255, 39, 39, 1, 255, 43, 32, 4, 255, 47, 34, 7, 255, 47, 40, 1, 255, 48, 37, 3, 255, 75, 51, 12, 255, 63, 53, 11, 255, 55, 50, 5, 255, 65, 53, 6, 255, 63, 54, 1, 255, 67, 51, 9, 255, 70, 45, 5, 255, 71, 54, 16, 255, 73, 57, 9, 255, 67, 54, 0, 255, 58, 52, 7, 255, 61, 50, 4, 255, 67, 52, 7, 255, 70, 54, 3, 255, 65, 50, 0, 255, 84, 69, 6, 255, 174, 125, 2, 255, 190, 132, 4, 255, 185, 124, 11, 255, 165, 107, 2, 255, 126, 76, 1, 255, 94, 58, 2, 255, 69, 47, 2, 255, 67, 43, 7, 255, 70, 42, 2, 255, 73, 45, 4, 255, 72, 43, 2, 255, 66, 40, 2, 255, 64, 45, 2, 255, 70, 44, 1, 255, 72, 37, 3, 255, 72, 37, 2, 255, 66, 38, 1, 255, 68, 40, 2, 255, 71, 39, 4, 255, 68, 37, 1, 255, 64, 38, 2, 255, 64, 38, 3, 255, 61, 36, 6, 255, 74, 42, 2, 255, 69, 45, 6, 255, 76, 43, 2, 255, 76, 43, 1, 255, 81, 41, 4, 255, 91, 44, 5, 255, 86, 41, 2, 255, 84, 41, 0, 255, 82, 42, 5, 255, 81, 42, 10, 255, 83, 44, 0, 255, 84, 44, 6, 255, 86, 46, 4, 255, 92, 42, 0, 255, 94, 43, 7, 255, 85, 42, 7, 255, 91, 44, 4, 255, 93, 50, 5, 255, 83, 45, 1, 255, 87, 47, 5, 255, 86, 48, 4, 255, 87, 44, 1, 255, 93, 46, 3, 255, 92, 47, 1, 255, 93, 47, 1, 255, 96, 47, 0, 255, 94, 44, 2, 255, 91, 46, 4, 255, 92, 47, 1, 255, 86, 46, 5, 255, 90, 49, 3, 255, 100, 51, 5, 255, 95, 49, 3, 255, 91, 47, 2, 255, 96, 50, 4, 255, 95, 45, 1, 255, 99, 51, 5, 255, 97, 50, 4, 255, 94, 52, 3, 255, 94, 52, 3, 255, 97, 52, 3, 255, 94, 54, 3, 255, 102, 52, 4, 255, 102, 52, 3, 255, 94, 51, 3, 255, 95, 50, 2, 255, 98, 51, 2, 255, 102, 55, 4, 255, 99, 54, 1, 255, 99, 56, 2, 255, 97, 54, 1, 255, 97, 57, 3, 255, 96, 58, 1, 255, 98, 58, 3, 255, 99, 53, 2, 255, 103, 55, 3, 255, 105, 55, 1, 255, 100, 54, 11, 255, 108, 59, 9, 255, 125, 71, 3, 255, 108, 60, 6, 255, 138, 69, 16, 255, 141, 69, 10, 255, 151, 82, 23, 255, 160, 83, 5, 255, 156, 84, 8, 255, 168, 92, 13, 255, 164, 81, 7, 255, 153, 77, 13, 255, 159, 87, 7, 255, 161, 90, 9, 255, 158, 85, 3, 255, 154, 82, 3, 255, 144, 77, 0, 255, 139, 77, 4, 255, 143, 69, 10, 255, 134, 65, 7, 255, 131, 66, 7, 255, 118, 56, 6, 255, 130, 66, 10, 255, 131, 71, 6, 255, 102, 58, 10, 255, 95, 51, 4, 255, 119, 66, 11, 255, 111, 62, 12, 255, 82, 39, 12, 255, 101, 63, 8, 255, 99, 49, 14, 255, 100, 60, 6, 255, 92, 50, 4, 255, 93, 51, 10, 255, 107, 64, 18, 255, 84, 47, 11, 255, 81, 50, 3, 255, 87, 50, 9, 255, 90, 48, 10, 255, 91, 49, 9, 255, 113, 61, 13, 255, 122, 74, 8, 255, 131, 68, 19, 255, 132, 64, 12, 255, 120, 65, 8, 255, 128, 62, 6, 255, 140, 70, 10, 255, 135, 75, 14, 255, 141, 86, 9, 255, 161, 91, 10, 255, 172, 94, 18, 255, 180, 102, 10, 255, 182, 106, 10, 255, 174, 105, 3, 255, 188, 112, 3, 255, 193, 113, 14, 255, 187, 111, 15, 255, 196, 115, 14, 255, 198, 116, 12, 255, 199, 118, 11, 255, 198, 121, 7, 255, 198, 121, 8, 255, 198, 119, 13, 255, 199, 121, 1, 255, 199, 123, 2, 255, 204, 130, 3, 255, 202, 128, 6, 255, 201, 127, 5, 255, 205, 126, 9, 255, 210, 129, 5, 255, 210, 130, 8, 255, 208, 128, 13, 255, 208, 127, 6, 255, 207, 127, 10, 255, 211, 137, 1, 255, 209, 135, 9, 255, 212, 140, 7, 255, 208, 136, 5, 255, 209, 127, 15, 255, 215, 132, 7, 255, 206, 129, 7, 255, 200, 118, 10, 255, 197, 119, 15, 255, 204, 137, 7, 255, 199, 130, 12, 255, 207, 139, 7, 255, 195, 125, 16, 255, 197, 130, 9, 255, 208, 141, 3, 255, 219, 159, 1, 255, 218, 159, 5, 255, 206, 146, 10, 255, 176, 115, 9, 255, 158, 97, 12, 255, 186, 124, 14, 255, 209, 145, 12, 255, 208, 149, 10, 255, 213, 158, 7, 255, 219, 170, 3, 255, 218, 172, 1, 255, 215, 167, 8, 255, 221, 175, 5, 255, 229, 184, 8, 255, 220, 176, 2, 255, 227, 183, 2, 255, 223, 174, 1, 255, 212, 158, 0, 255, 210, 157, 4, 255, 218, 172, 2, 255, 222, 176, 0, 255, 217, 173, 0, 255, 213, 169, 3, 255, 216, 168, 10, 255, 212, 165, 10, 255, 201, 157, 4, 255, 198, 152, 1, 255, 196, 147, 5, 255, 202, 155, 5, 255, 197, 150, 4, 255, 198, 151, 3, 255, 205, 158, 7, 255, 205, 155, 1, 255, 207, 155, 1, 255, 208, 153, 1, 255, 204, 146, 7, 255, 198, 139, 6, 255, 206, 147, 11, 255, 206, 146, 15, 255, 204, 148, 5, 255, 207, 147, 4, 255, 207, 146, 6, 255, 207, 145, 4, 255, 206, 142, 8, 255, 207, 137, 5, 255, 206, 137, 5, 255, 204, 135, 6, 255, 203, 134, 7, 255, 199, 129, 5, 255, 198, 127, 6, 255, 197, 122, 7, 255, 197, 120, 9, 255, 190, 117, 4, 255, 188, 115, 7, 255, 189, 115, 11, 255, 187, 109, 6, 255, 185, 110, 6, 255, 183, 110, 8, 255, 176, 100, 4, 255, 175, 97, 9, 255, 164, 83, 2, 255, 161, 79, 4, 255, 162, 83, 3, 255, 158, 80, 2, 255, 163, 86, 6, 255, 156, 81, 7, 255, 154, 75, 7, 255, 149, 72, 6, 255, 131, 57, 1, 255, 119, 49, 0, 255, 122, 52, 4, 255, 123, 47, 8, 255, 113, 47, 1, 255, 115, 46, 4, 255, 103, 39, 2, 255, 91, 37, 1, 255, 96, 40, 4, 255, 99, 39, 5, 255, 99, 37, 0, 255, 106, 42, 3, 255, 104, 40, 7, 255, 99, 34, 1, 255, 105, 42, 4, 255, 109, 44, 5, 255, 117, 47, 3, 255, 117, 44, 1, 255, 115, 41, 4, 255, 117, 43, 8, 255, 114, 39, 2, 255, 115, 45, 6, 255, 111, 44, 5, 255, 110, 47, 4, 255, 95, 33, 1, 255, 104, 40, 4, 255, 141, 68, 6, 255, 163, 82, 6, 255, 162, 81, 7, 255, 156, 73, 2, 255, 152, 68, 2, 255, 151, 67, 6, 255, 147, 56, 6, 255, 137, 49, 5, 255, 127, 48, 4, 255, 121, 42, 2, 255, 112, 41, 1, 255, 115, 45, 0, 255, 121, 48, 3, 255, 113, 42, 2, 255, 119, 46, 2, 255, 120, 51, 2, 255, 115, 48, 2, 255, 113, 44, 4, 255, 111, 42, 5, 255, 110, 40, 3, 255, 116, 42, 4, 255, 121, 46, 4, 255, 117, 44, 3, 255, 114, 46, 1, 255, 121, 51, 1, 255, 121, 48, 5, 255, 120, 46, 5, 255, 126, 50, 4, 255, 119, 48, 2, 255, 105, 44, 0, 255, 113, 47, 2, 255, 125, 48, 7, 255, 126, 45, 3, 255, 131, 46, 1, 255, 127, 43, 0, 255, 123, 41, 4, 255, 120, 38, 2, 255, 121, 38, 0, 255, 125, 46, 1, 255, 121, 47, 1, 255, 112, 42, 1, 255, 112, 41, 2, 255, 105, 36, 1, 255, 94, 34, 3, 255, 88, 29, 5, 255, 80, 26, 3, 255, 82, 25, 2, 255, 82, 20, 1, 255, 79, 21, 1, 255, 69, 21, 0, 255, 66, 17, 1, 255, 64, 18, 2, 255, 63, 23, 2, 255, 74, 27, 5, 255, 74, 23, 2, 255, 72, 21, 0, 255, 74, 24, 2, 255, 72, 25, 2, 255, 64, 20, 2, 255, 63, 21, 8, 255, 64, 17, 3, 255, 60, 17, 1, 255, 65, 23, 1, 255, 76, 28, 2, 255, 83, 28, 0, 255, 86, 31, 0, 255, 89, 29, 3, 255, 83, 24, 2, 255, 83, 23, 0, 255, 92, 26, 4, 255, 89, 27, 3, 255, 88, 31, 2, 255, 93, 31, 3, 255, 88, 28, 1, 255, 89, 28, 1, 255, 89, 26, 0, 255, 8, 4, 1, 255, 4, 0, 1, 255, 3, 0, 1, 255, 6, 3, 2, 255, 5, 1, 0, 255, 6, 1, 0, 255, 7, 0, 0, 255, 5, 0, 0, 255, 7, 2, 1, 255, 8, 3, 0, 255, 8, 3, 2, 255, 17, 8, 9, 255, 16, 7, 9, 255, 14, 9, 9, 255, 11, 5, 5, 255, 14, 7, 7, 255, 14, 9, 7, 255, 13, 8, 4, 255, 12, 9, 4, 255, 16, 10, 6, 255, 18, 9, 7, 255, 18, 10, 7, 255, 18, 10, 2, 255, 18, 11, 0, 255, 17, 11, 1, 255, 16, 14, 5, 255, 14, 14, 9, 255, 17, 16, 9, 255, 18, 19, 8, 255, 22, 21, 11, 255, 24, 19, 9, 255, 25, 16, 10, 255, 24, 18, 10, 255, 28, 24, 11, 255, 32, 29, 14, 255, 31, 28, 14, 255, 32, 25, 13, 255, 35, 28, 10, 255, 38, 31, 11, 255, 38, 36, 7, 255, 43, 35, 4, 255, 45, 36, 1, 255, 54, 42, 4, 255, 47, 39, 6, 255, 57, 49, 7, 255, 78, 58, 4, 255, 65, 49, 7, 255, 67, 59, 3, 255, 66, 57, 3, 255, 61, 42, 0, 255, 54, 34, 0, 255, 48, 35, 1, 255, 63, 42, 7, 255, 72, 58, 8, 255, 67, 51, 3, 255, 70, 51, 7, 255, 65, 52, 3, 255, 70, 53, 6, 255, 72, 56, 2, 255, 67, 51, 1, 255, 116, 85, 4, 255, 187, 127, 1, 255, 169, 115, 4, 255, 165, 100, 2, 255, 149, 85, 3, 255, 122, 66, 7, 255, 95, 50, 7, 255, 72, 47, 3, 255, 67, 39, 5, 255, 65, 45, 1, 255, 73, 39, 4, 255, 68, 42, 5, 255, 67, 45, 5, 255, 66, 40, 3, 255, 73, 41, 5, 255, 71, 42, 3, 255, 62, 39, 4, 255, 75, 42, 5, 255, 70, 37, 10, 255, 65, 33, 2, 255, 71, 37, 2, 255, 75, 38, 7, 255, 69, 37, 5, 255, 49, 31, 1, 255, 71, 43, 5, 255, 79, 39, 7, 255, 83, 40, 4, 255, 77, 46, 0, 255, 79, 45, 3, 255, 76, 41, 2, 255, 85, 44, 4, 255, 86, 42, 1, 255, 80, 41, 4, 255, 74, 39, 2, 255, 82, 41, 2, 255, 80, 46, 4, 255, 80, 39, 2, 255, 91, 52, 5, 255, 95, 54, 7, 255, 89, 44, 5, 255, 85, 50, 6, 255, 91, 48, 3, 255, 96, 47, 3, 255, 89, 43, 3, 255, 85, 43, 0, 255, 87, 51, 1, 255, 86, 48, 7, 255, 88, 43, 7, 255, 91, 49, 4, 255, 94, 52, 0, 255, 100, 46, 7, 255, 92, 43, 6, 255, 87, 46, 1, 255, 84, 46, 3, 255, 98, 49, 7, 255, 92, 47, 3, 255, 92, 44, 0, 255, 100, 48, 1, 255, 100, 52, 2, 255, 94, 49, 0, 255, 97, 50, 6, 255, 94, 50, 5, 255, 93, 51, 0, 255, 100, 51, 2, 255, 103, 51, 4, 255, 95, 51, 3, 255, 100, 50, 4, 255, 104, 53, 5, 255, 99, 56, 8, 255, 97, 52, 5, 255, 100, 51, 4, 255, 105, 54, 6, 255, 99, 50, 2, 255, 99, 55, 4, 255, 101, 54, 3, 255, 102, 55, 2, 255, 100, 58, 2, 255, 100, 57, 3, 255, 101, 55, 4, 255, 101, 55, 4, 255, 102, 55, 4, 255, 107, 53, 4, 255, 104, 57, 4, 255, 100, 54, 8, 255, 108, 65, 4, 255, 121, 67, 5, 255, 112, 53, 6, 255, 106, 47, 14, 255, 107, 57, 15, 255, 105, 57, 11, 255, 119, 58, 7, 255, 100, 53, 4, 255, 97, 55, 7, 255, 114, 58, 7, 255, 95, 47, 8, 255, 98, 52, 4, 255, 98, 54, 5, 255, 131, 72, 5, 255, 107, 58, 3, 255, 84, 44, 7, 255, 90, 51, 4, 255, 83, 50, 4, 255, 91, 54, 11, 255, 136, 83, 12, 255, 128, 68, 9, 255, 99, 50, 4, 255, 84, 52, 5, 255, 96, 50, 3, 255, 106, 63, 6, 255, 93, 53, 4, 255, 92, 44, 4, 255, 85, 45, 10, 255, 90, 54, 11, 255, 107, 60, 8, 255, 146, 81, 6, 255, 154, 78, 7, 255, 112, 61, 6, 255, 95, 56, 7, 255, 105, 63, 9, 255, 118, 67, 14, 255, 149, 79, 16, 255, 154, 76, 15, 255, 153, 79, 5, 255, 164, 81, 9, 255, 158, 76, 12, 255, 147, 74, 10, 255, 159, 84, 14, 255, 171, 94, 12, 255, 174, 95, 12, 255, 188, 103, 15, 255, 193, 105, 11, 255, 188, 104, 8, 255, 187, 110, 6, 255, 190, 109, 12, 255, 190, 108, 15, 255, 201, 123, 9, 255, 201, 125, 12, 255, 201, 122, 16, 255, 206, 122, 8, 255, 207, 123, 4, 255, 205, 124, 6, 255, 208, 126, 7, 255, 207, 126, 7, 255, 205, 124, 8, 255, 207, 125, 16, 255, 209, 130, 7, 255, 210, 134, 6, 255, 207, 132, 8, 255, 209, 133, 9, 255, 212, 134, 9, 255, 212, 134, 2, 255, 212, 136, 5, 255, 210, 135, 8, 255, 211, 138, 6, 255, 209, 135, 13, 255, 213, 140, 9, 255, 210, 137, 3, 255, 212, 140, 8, 255, 211, 144, 11, 255, 213, 138, 11, 255, 212, 135, 11, 255, 197, 125, 16, 255, 198, 128, 12, 255, 207, 143, 8, 255, 200, 133, 8, 255, 201, 135, 10, 255, 219, 159, 9, 255, 200, 141, 7, 255, 189, 127, 17, 255, 201, 142, 17, 255, 221, 169, 11, 255, 215, 159, 5, 255, 206, 145, 6, 255, 202, 143, 15, 255, 165, 106, 10, 255, 189, 129, 21, 255, 209, 149, 7, 255, 208, 157, 0, 255, 217, 165, 2, 255, 221, 172, 6, 255, 221, 172, 5, 255, 217, 167, 8, 255, 222, 175, 14, 255, 230, 182, 2, 255, 223, 178, 6, 255, 211, 165, 8, 255, 221, 168, 5, 255, 211, 152, 7, 255, 214, 162, 4, 255, 224, 177, 6, 255, 213, 165, 2, 255, 216, 172, 2, 255, 218, 172, 2, 255, 219, 173, 2, 255, 206, 158, 5, 255, 195, 143, 18, 255, 199, 155, 6, 255, 200, 156, 4, 255, 201, 155, 5, 255, 197, 146, 3, 255, 205, 154, 8, 255, 205, 156, 15, 255, 202, 151, 10, 255, 207, 155, 6, 255, 204, 148, 6, 255, 202, 145, 8, 255, 202, 148, 0, 255, 205, 149, 8, 255, 209, 153, 6, 255, 206, 149, 9, 255, 208, 147, 10, 255, 207, 146, 1, 255, 206, 144, 4, 255, 206, 140, 10, 255, 205, 138, 6, 255, 204, 138, 9, 255, 204, 135, 9, 255, 202, 128, 6, 255, 199, 121, 6, 255, 196, 120, 7, 255, 190, 118, 2, 255, 189, 118, 3, 255, 190, 116, 8, 255, 189, 116, 10, 255, 188, 115, 9, 255, 188, 113, 7, 255, 184, 111, 7, 255, 180, 108, 6, 255, 183, 109, 8, 255, 183, 108, 7, 255, 175, 99, 2, 255, 165, 90, 2, 255, 156, 81, 2, 255, 149, 74, 9, 255, 157, 79, 6, 255, 165, 90, 3, 255, 163, 85, 6, 255, 157, 75, 2, 255, 135, 62, 0, 255, 117, 55, 6, 255, 116, 51, 5, 255, 117, 46, 4, 255, 114, 46, 0, 255, 121, 52, 8, 255, 106, 39, 2, 255, 97, 37, 3, 255, 99, 39, 4, 255, 99, 38, 5, 255, 97, 39, 1, 255, 104, 43, 7, 255, 102, 35, 5, 255, 103, 34, 2, 255, 104, 42, 5, 255, 104, 40, 0, 255, 115, 46, 2, 255, 112, 41, 0, 255, 117, 39, 3, 255, 116, 40, 3, 255, 114, 44, 3, 255, 117, 47, 3, 255, 112, 46, 3, 255, 106, 40, 4, 255, 110, 40, 3, 255, 101, 39, 3, 255, 121, 54, 7, 255, 138, 57, 3, 255, 129, 53, 4, 255, 127, 49, 3, 255, 124, 45, 2, 255, 120, 40, 2, 255, 117, 34, 6, 255, 117, 37, 6, 255, 113, 42, 3, 255, 113, 40, 4, 255, 113, 45, 5, 255, 120, 46, 2, 255, 122, 45, 1, 255, 116, 43, 1, 255, 121, 45, 2, 255, 122, 42, 5, 255, 125, 43, 7, 255, 120, 40, 1, 255, 116, 44, 0, 255, 116, 50, 3, 255, 118, 48, 2, 255, 119, 46, 2, 255, 119, 47, 6, 255, 116, 46, 2, 255, 123, 50, 2, 255, 122, 47, 8, 255, 118, 46, 3, 255, 114, 44, 0, 255, 112, 41, 1, 255, 112, 48, 3, 255, 118, 45, 4, 255, 129, 40, 7, 255, 130, 41, 7, 255, 130, 44, 4, 255, 137, 54, 2, 255, 139, 58, 4, 255, 132, 49, 3, 255, 128, 45, 3, 255, 131, 49, 4, 255, 126, 49, 1, 255, 117, 47, 0, 255, 114, 49, 3, 255, 109, 44, 2, 255, 95, 37, 1, 255, 87, 31, 7, 255, 82, 28, 5, 255, 83, 29, 1, 255, 83, 29, 0, 255, 81, 24, 5, 255, 70, 23, 4, 255, 68, 21, 0, 255, 74, 21, 5, 255, 69, 20, 5, 255, 77, 24, 2, 255, 76, 26, 1, 255, 69, 22, 2, 255, 74, 21, 6, 255, 70, 21, 2, 255, 64, 20, 0, 255, 71, 21, 3, 255, 75, 24, 6, 255, 66, 24, 3, 255, 67, 24, 1, 255, 78, 26, 1, 255, 89, 29, 2, 255, 87, 30, 3, 255, 81, 27, 1, 255, 86, 28, 2, 255, 87, 26, 1, 255, 84, 23, 2, 255, 85, 22, 3, 255, 90, 27, 0, 255, 96, 34, 0, 255, 96, 30, 3, 255, 96, 31, 6, 255, 93, 27, 4, 255, 13, 7, 4, 255, 7, 2, 2, 255, 3, 1, 1, 255, 3, 3, 2, 255, 4, 0, 0, 255, 4, 0, 0, 255, 6, 1, 1, 255, 8, 2, 2, 255, 6, 2, 1, 255, 7, 4, 3, 255, 5, 1, 0, 255, 14, 6, 6, 255, 19, 9, 10, 255, 16, 8, 9, 255, 15, 7, 7, 255, 15, 6, 7, 255, 15, 8, 7, 255, 14, 10, 6, 255, 13, 9, 5, 255, 15, 9, 5, 255, 16, 10, 6, 255, 20, 12, 8, 255, 19, 12, 4, 255, 17, 12, 2, 255, 15, 12, 3, 255, 20, 15, 6, 255, 21, 15, 7, 255, 21, 13, 6, 255, 23, 18, 6, 255, 24, 19, 6, 255, 26, 19, 4, 255, 34, 22, 14, 255, 35, 23, 15, 255, 37, 25, 11, 255, 36, 27, 10, 255, 36, 28, 13, 255, 37, 30, 15, 255, 41, 32, 13, 255, 46, 37, 7, 255, 47, 34, 0, 255, 58, 32, 9, 255, 49, 37, 12, 255, 42, 36, 3, 255, 54, 41, 3, 255, 89, 64, 7, 255, 81, 70, 0, 255, 77, 74, 7, 255, 75, 74, 2, 255, 58, 50, 0, 255, 73, 65, 17, 255, 85, 85, 54, 255, 87, 85, 42, 255, 90, 82, 4, 255, 80, 70, 9, 255, 72, 64, 8, 255, 76, 55, 3, 255, 74, 58, 4, 255, 75, 59, 4, 255, 71, 49, 4, 255, 80, 59, 5, 255, 155, 100, 3, 255, 174, 117, 7, 255, 171, 114, 2, 255, 162, 97, 2, 255, 145, 82, 4, 255, 110, 57, 5, 255, 79, 37, 9, 255, 71, 46, 3, 255, 70, 39, 2, 255, 68, 41, 2, 255, 82, 39, 6, 255, 66, 44, 1, 255, 63, 44, 1, 255, 77, 39, 3, 255, 74, 38, 2, 255, 69, 37, 2, 255, 64, 39, 2, 255, 62, 38, 7, 255, 65, 35, 5, 255, 61, 37, 2, 255, 60, 36, 2, 255, 66, 39, 6, 255, 56, 34, 0, 255, 80, 43, 5, 255, 84, 44, 2, 255, 83, 46, 8, 255, 87, 42, 7, 255, 88, 43, 3, 255, 82, 43, 4, 255, 67, 40, 8, 255, 77, 37, 2, 255, 79, 43, 5, 255, 79, 43, 4, 255, 86, 41, 2, 255, 82, 49, 4, 255, 79, 44, 1, 255, 82, 41, 3, 255, 86, 46, 2, 255, 86, 45, 0, 255, 90, 45, 3, 255, 88, 50, 0, 255, 92, 46, 3, 255, 91, 47, 3, 255, 84, 44, 0, 255, 96, 45, 3, 255, 99, 46, 5, 255, 87, 42, 2, 255, 87, 41, 3, 255, 84, 45, 5, 255, 89, 49, 6, 255, 85, 46, 1, 255, 84, 43, 2, 255, 88, 45, 5, 255, 90, 45, 2, 255, 96, 49, 0, 255, 89, 50, 3, 255, 93, 45, 3, 255, 99, 45, 2, 255, 97, 47, 3, 255, 93, 51, 5, 255, 92, 50, 3, 255, 92, 51, 3, 255, 96, 53, 7, 255, 96, 49, 1, 255, 99, 51, 3, 255, 97, 53, 3, 255, 99, 52, 4, 255, 103, 51, 4, 255, 99, 51, 3, 255, 98, 50, 4, 255, 101, 53, 5, 255, 102, 53, 3, 255, 105, 55, 5, 255, 103, 51, 2, 255, 105, 51, 4, 255, 101, 50, 2, 255, 105, 55, 6, 255, 102, 51, 2, 255, 107, 55, 7, 255, 105, 55, 6, 255, 105, 56, 5, 255, 108, 55, 4, 255, 104, 53, 3, 255, 111, 56, 6, 255, 107, 53, 8, 255, 104, 57, 3, 255, 119, 63, 5, 255, 104, 56, 7, 255, 107, 63, 10, 255, 131, 72, 7, 255, 106, 58, 9, 255, 88, 55, 5, 255, 132, 78, 14, 255, 106, 53, 3, 255, 75, 46, 6, 255, 86, 50, 8, 255, 105, 60, 9, 255, 135, 74, 7, 255, 111, 59, 10, 255, 92, 44, 13, 255, 89, 51, 5, 255, 89, 52, 7, 255, 104, 56, 7, 255, 113, 64, 9, 255, 92, 48, 13, 255, 89, 44, 11, 255, 93, 55, 10, 255, 92, 56, 10, 255, 84, 47, 6, 255, 84, 47, 5, 255, 93, 57, 10, 255, 122, 76, 16, 255, 152, 89, 7, 255, 157, 83, 3, 255, 154, 73, 14, 255, 136, 67, 12, 255, 144, 77, 5, 255, 154, 79, 16, 255, 166, 90, 9, 255, 166, 92, 8, 255, 168, 91, 17, 255, 161, 79, 13, 255, 154, 82, 9, 255, 159, 92, 17, 255, 163, 92, 14, 255, 168, 94, 13, 255, 178, 99, 9, 255, 188, 103, 2, 255, 192, 103, 8, 255, 184, 97, 10, 255, 185, 102, 6, 255, 194, 113, 9, 255, 199, 117, 12, 255, 203, 121, 11, 255, 206, 124, 8, 255, 206, 125, 8, 255, 205, 125, 9, 255, 207, 128, 12, 255, 209, 127, 9, 255, 210, 128, 6, 255, 209, 127, 7, 255, 210, 127, 17, 255, 211, 132, 8, 255, 211, 133, 1, 255, 214, 133, 15, 255, 213, 134, 13, 255, 213, 137, 9, 255, 212, 139, 8, 255, 213, 140, 9, 255, 213, 139, 8, 255, 216, 141, 7, 255, 216, 141, 16, 255, 215, 141, 11, 255, 215, 144, 5, 255, 216, 144, 7, 255, 217, 142, 23, 255, 212, 139, 2, 255, 219, 147, 6, 255, 216, 149, 9, 255, 213, 143, 16, 255, 210, 145, 6, 255, 205, 146, 5, 255, 213, 152, 5, 255, 215, 154, 1, 255, 211, 142, 9, 255, 209, 143, 8, 255, 218, 157, 4, 255, 207, 145, 2, 255, 197, 130, 16, 255, 205, 142, 12, 255, 223, 165, 9, 255, 210, 153, 5, 255, 195, 139, 18, 255, 208, 160, 9, 255, 192, 139, 19, 255, 191, 138, 10, 255, 195, 142, 6, 255, 208, 158, 6, 255, 211, 161, 2, 255, 212, 161, 4, 255, 218, 167, 7, 255, 216, 167, 0, 255, 220, 172, 5, 255, 221, 171, 2, 255, 224, 175, 3, 255, 226, 175, 11, 255, 200, 145, 12, 255, 197, 140, 7, 255, 214, 162, 7, 255, 219, 169, 1, 255, 213, 165, 9, 255, 214, 167, 4, 255, 216, 171, 2, 255, 218, 172, 9, 255, 198, 147, 5, 255, 193, 141, 7, 255, 203, 158, 1, 255, 200, 152, 4, 255, 200, 149, 5, 255, 201, 149, 2, 255, 204, 153, 2, 255, 201, 157, 5, 255, 205, 157, 11, 255, 206, 152, 15, 255, 202, 147, 14, 255, 202, 146, 9, 255, 204, 151, 7, 255, 204, 151, 5, 255, 206, 152, 10, 255, 206, 150, 11, 255, 208, 147, 6, 255, 206, 146, 5, 255, 205, 144, 4, 255, 203, 139, 5, 255, 203, 136, 8, 255, 201, 135, 11, 255, 199, 130, 3, 255, 199, 124, 0, 255, 199, 119, 9, 255, 195, 117, 15, 255, 190, 121, 10, 255, 189, 122, 4, 255, 191, 118, 4, 255, 186, 114, 3, 255, 183, 111, 3, 255, 186, 111, 5, 255, 183, 110, 6, 255, 182, 110, 8, 255, 181, 108, 6, 255, 174, 98, 11, 255, 167, 88, 8, 255, 162, 85, 2, 255, 160, 82, 1, 255, 157, 76, 9, 255, 162, 80, 8, 255, 167, 85, 2, 255, 165, 85, 1, 255, 156, 78, 3, 255, 141, 67, 1, 255, 127, 58, 5, 255, 114, 45, 6, 255, 118, 45, 1, 255, 115, 48, 1, 255, 118, 51, 4, 255, 118, 49, 10, 255, 104, 39, 2, 255, 98, 41, 4, 255, 97, 42, 4, 255, 97, 34, 2, 255, 104, 36, 4, 255, 108, 40, 3, 255, 104, 39, 5, 255, 106, 43, 6, 255, 110, 46, 1, 255, 108, 44, 1, 255, 109, 44, 5, 255, 117, 44, 3, 255, 112, 41, 1, 255, 108, 45, 4, 255, 116, 51, 1, 255, 115, 50, 0, 255, 114, 42, 3, 255, 114, 44, 4, 255, 103, 41, 2, 255, 98, 34, 1, 255, 108, 35, 3, 255, 118, 45, 4, 255, 121, 49, 3, 255, 122, 50, 3, 255, 120, 50, 4, 255, 119, 43, 3, 255, 120, 39, 3, 255, 116, 40, 0, 255, 117, 49, 0, 255, 114, 47, 2, 255, 125, 49, 6, 255, 123, 43, 2, 255, 124, 48, 4, 255, 124, 48, 4, 255, 125, 43, 1, 255, 125, 43, 2, 255, 118, 39, 2, 255, 119, 44, 4, 255, 118, 46, 1, 255, 121, 49, 2, 255, 117, 47, 0, 255, 118, 45, 2, 255, 123, 44, 5, 255, 124, 47, 2, 255, 123, 44, 5, 255, 115, 39, 5, 255, 102, 42, 1, 255, 115, 44, 3, 255, 119, 46, 5, 255, 120, 42, 0, 255, 122, 39, 0, 255, 115, 43, 0, 255, 124, 53, 4, 255, 141, 67, 4, 255, 154, 74, 2, 255, 156, 73, 2, 255, 147, 66, 4, 255, 133, 56, 4, 255, 125, 51, 2, 255, 127, 50, 1, 255, 126, 47, 3, 255, 115, 38, 4, 255, 96, 25, 0, 255, 91, 26, 2, 255, 90, 27, 4, 255, 85, 24, 1, 255, 86, 26, 1, 255, 86, 21, 3, 255, 72, 19, 3, 255, 67, 21, 2, 255, 75, 25, 4, 255, 68, 21, 2, 255, 70, 23, 2, 255, 70, 22, 0, 255, 68, 19, 1, 255, 71, 23, 5, 255, 78, 28, 5, 255, 82, 30, 2, 255, 87, 32, 1, 255, 89, 34, 3, 255, 86, 32, 4, 255, 81, 28, 0, 255, 84, 30, 0, 255, 88, 32, 2, 255, 84, 28, 6, 255, 73, 23, 0, 255, 85, 26, 4, 255, 86, 23, 3, 255, 82, 29, 5, 255, 87, 22, 2, 255, 90, 20, 2, 255, 88, 27, 3, 255, 96, 24, 3, 255, 89, 23, 3, 255, 80, 18, 1, 255, 16, 6, 4, 255, 9, 3, 2, 255, 3, 0, 0, 255, 0, 0, 0, 255, 2, 2, 0, 255, 4, 2, 0, 255, 7, 1, 2, 255, 5, 1, 2, 255, 5, 1, 1, 255, 5, 1, 0, 255, 9, 3, 2, 255, 7, 1, 1, 255, 18, 8, 9, 255, 19, 8, 9, 255, 19, 9, 10, 255, 18, 8, 9, 255, 14, 5, 4, 255, 18, 12, 9, 255, 14, 9, 4, 255, 13, 10, 5, 255, 15, 9, 4, 255, 20, 13, 7, 255, 19, 12, 6, 255, 16, 12, 3, 255, 21, 14, 6, 255, 21, 14, 7, 255, 26, 16, 8, 255, 28, 19, 3, 255, 26, 18, 3, 255, 27, 17, 14, 255, 32, 22, 11, 255, 38, 25, 9, 255, 50, 27, 14, 255, 43, 24, 7, 255, 38, 27, 12, 255, 35, 30, 19, 255, 38, 31, 15, 255, 50, 35, 7, 255, 57, 42, 6, 255, 55, 42, 7, 255, 58, 38, 7, 255, 62, 41, 6, 255, 58, 40, 7, 255, 84, 85, 20, 255, 117, 128, 15, 255, 124, 133, 18, 255, 114, 121, 7, 255, 86, 90, 14, 255, 114, 138, 46, 255, 202, 227, 138, 255, 239, 246, 167, 255, 244, 244, 89, 255, 176, 164, 5, 255, 99, 98, 11, 255, 82, 77, 5, 255, 78, 63, 6, 255, 78, 57, 2, 255, 76, 58, 3, 255, 71, 62, 7, 255, 139, 94, 9, 255, 159, 96, 7, 255, 152, 102, 8, 255, 210, 160, 20, 255, 202, 138, 17, 255, 138, 83, 6, 255, 90, 45, 1, 255, 70, 35, 5, 255, 64, 39, 1, 255, 71, 40, 2, 255, 74, 38, 4, 255, 78, 40, 5, 255, 61, 40, 3, 255, 58, 40, 2, 255, 65, 43, 0, 255, 63, 41, 1, 255, 60, 39, 7, 255, 58, 33, 5, 255, 73, 41, 1, 255, 68, 40, 2, 255, 66, 38, 0, 255, 65, 35, 10, 255, 70, 35, 8, 255, 108, 62, 6, 255, 152, 82, 5, 255, 144, 74, 3, 255, 88, 46, 3, 255, 79, 37, 5, 255, 73, 38, 7, 255, 89, 49, 2, 255, 118, 58, 3, 255, 107, 52, 3, 255, 123, 64, 8, 255, 120, 62, 9, 255, 75, 35, 8, 255, 76, 40, 7, 255, 83, 40, 7, 255, 100, 51, 5, 255, 129, 60, 4, 255, 127, 60, 4, 255, 125, 69, 7, 255, 149, 76, 7, 255, 115, 57, 3, 255, 83, 38, 8, 255, 83, 45, 8, 255, 91, 46, 3, 255, 91, 41, 6, 255, 89, 40, 3, 255, 90, 43, 0, 255, 90, 45, 0, 255, 90, 38, 3, 255, 87, 43, 5, 255, 85, 40, 3, 255, 88, 43, 8, 255, 95, 47, 4, 255, 93, 47, 4, 255, 95, 45, 4, 255, 94, 47, 2, 255, 92, 49, 4, 255, 94, 49, 6, 255, 95, 47, 4, 255, 95, 49, 1, 255, 91, 51, 2, 255, 92, 48, 7, 255, 93, 46, 2, 255, 100, 51, 2, 255, 103, 53, 2, 255, 98, 54, 3, 255, 99, 55, 4, 255, 96, 56, 4, 255, 98, 55, 4, 255, 101, 54, 3, 255, 102, 54, 2, 255, 103, 55, 3, 255, 102, 56, 3, 255, 100, 55, 6, 255, 98, 52, 6, 255, 100, 51, 6, 255, 102, 52, 5, 255, 104, 53, 3, 255, 103, 54, 2, 255, 103, 56, 7, 255, 103, 57, 5, 255, 104, 55, 3, 255, 104, 55, 4, 255, 110, 57, 6, 255, 106, 53, 6, 255, 101, 55, 7, 255, 101, 61, 7, 255, 102, 56, 0, 255, 100, 54, 2, 255, 94, 50, 4, 255, 107, 61, 5, 255, 109, 58, 7, 255, 96, 48, 7, 255, 95, 58, 8, 255, 94, 51, 6, 255, 93, 51, 1, 255, 90, 55, 5, 255, 86, 53, 11, 255, 87, 48, 10, 255, 94, 51, 11, 255, 90, 47, 6, 255, 85, 47, 0, 255, 87, 52, 6, 255, 117, 66, 13, 255, 139, 73, 11, 255, 142, 68, 14, 255, 121, 57, 14, 255, 107, 67, 5, 255, 120, 76, 6, 255, 144, 74, 13, 255, 157, 78, 4, 255, 166, 75, 1, 255, 152, 68, 6, 255, 142, 69, 16, 255, 152, 79, 14, 255, 172, 90, 4, 255, 176, 93, 9, 255, 172, 96, 11, 255, 178, 102, 10, 255, 187, 94, 15, 255, 183, 97, 10, 255, 185, 101, 8, 255, 191, 101, 10, 255, 190, 102, 8, 255, 193, 101, 9, 255, 195, 101, 16, 255, 190, 98, 5, 255, 190, 101, 10, 255, 184, 108, 6, 255, 200, 123, 13, 255, 211, 122, 10, 255, 204, 118, 9, 255, 198, 115, 12, 255, 204, 119, 11, 255, 208, 122, 16, 255, 212, 128, 8, 255, 207, 127, 8, 255, 200, 123, 10, 255, 202, 125, 5, 255, 204, 124, 11, 255, 210, 131, 13, 255, 213, 136, 4, 255, 212, 134, 7, 255, 213, 138, 5, 255, 213, 141, 2, 255, 215, 143, 5, 255, 216, 146, 6, 255, 216, 146, 9, 255, 213, 145, 4, 255, 216, 148, 4, 255, 218, 146, 5, 255, 218, 148, 0, 255, 218, 147, 7, 255, 220, 148, 11, 255, 215, 143, 8, 255, 212, 139, 7, 255, 224, 152, 9, 255, 219, 150, 5, 255, 211, 137, 9, 255, 219, 146, 5, 255, 220, 158, 6, 255, 222, 157, 3, 255, 220, 156, 5, 255, 218, 149, 4, 255, 214, 150, 6, 255, 212, 147, 5, 255, 197, 125, 10, 255, 197, 124, 18, 255, 206, 139, 13, 255, 212, 151, 1, 255, 220, 167, 1, 255, 218, 177, 7, 255, 217, 177, 1, 255, 220, 172, 5, 255, 205, 155, 4, 255, 201, 157, 3, 255, 210, 160, 10, 255, 208, 159, 3, 255, 214, 166, 2, 255, 211, 160, 4, 255, 210, 159, 4, 255, 216, 166, 5, 255, 214, 172, 7, 255, 219, 174, 3, 255, 221, 173, 2, 255, 200, 154, 4, 255, 202, 162, 3, 255, 210, 163, 8, 255, 213, 164, 1, 255, 209, 159, 7, 255, 216, 169, 2, 255, 205, 158, 0, 255, 205, 159, 7, 255, 203, 155, 4, 255, 197, 144, 3, 255, 204, 152, 7, 255, 199, 148, 10, 255, 199, 147, 12, 255, 199, 147, 2, 255, 206, 155, 6, 255, 202, 158, 2, 255, 202, 158, 0, 255, 200, 152, 5, 255, 200, 149, 6, 255, 203, 153, 5, 255, 206, 152, 17, 255, 206, 154, 10, 255, 205, 151, 19, 255, 206, 150, 9, 255, 206, 148, 3, 255, 207, 145, 8, 255, 205, 146, 6, 255, 203, 143, 4, 255, 202, 139, 11, 255, 203, 131, 7, 255, 198, 127, 4, 255, 195, 126, 8, 255, 197, 128, 13, 255, 196, 125, 13, 255, 195, 124, 12, 255, 193, 121, 10, 255, 188, 115, 7, 255, 187, 114, 9, 255, 184, 110, 6, 255, 184, 110, 4, 255, 182, 108, 1, 255, 179, 108, 2, 255, 177, 103, 3, 255, 170, 94, 5, 255, 166, 85, 7, 255, 162, 79, 6, 255, 169, 86, 7, 255, 167, 85, 4, 255, 166, 85, 1, 255, 163, 77, 2, 255, 161, 78, 4, 255, 150, 76, 6, 255, 136, 59, 5, 255, 134, 56, 5, 255, 121, 54, 4, 255, 113, 52, 1, 255, 122, 54, 6, 255, 114, 46, 3, 255, 106, 40, 2, 255, 105, 38, 3, 255, 105, 38, 2, 255, 95, 38, 0, 255, 108, 43, 7, 255, 113, 40, 7, 255, 107, 39, 4, 255, 104, 43, 3, 255, 106, 43, 2, 255, 108, 41, 2, 255, 109, 42, 2, 255, 113, 45, 4, 255, 115, 43, 5, 255, 114, 43, 5, 255, 113, 46, 4, 255, 115, 46, 3, 255, 113, 46, 2, 255, 116, 40, 5, 255, 108, 40, 3, 255, 110, 45, 2, 255, 95, 35, 3, 255, 92, 32, 2, 255, 109, 41, 1, 255, 120, 44, 3, 255, 128, 48, 4, 255, 129, 52, 1, 255, 131, 55, 1, 255, 128, 51, 3, 255, 120, 48, 1, 255, 126, 55, 0, 255, 127, 54, 0, 255, 134, 53, 4, 255, 132, 50, 2, 255, 126, 51, 1, 255, 126, 49, 3, 255, 122, 45, 5, 255, 116, 43, 5, 255, 115, 46, 4, 255, 125, 50, 4, 255, 128, 46, 0, 255, 127, 45, 1, 255, 124, 46, 4, 255, 126, 50, 3, 255, 121, 47, 5, 255, 119, 45, 1, 255, 129, 55, 7, 255, 113, 43, 6, 255, 111, 45, 4, 255, 125, 53, 3, 255, 124, 45, 3, 255, 121, 37, 2, 255, 123, 41, 5, 255, 123, 55, 3, 255, 144, 66, 4, 255, 156, 72, 2, 255, 162, 75, 3, 255, 163, 80, 4, 255, 164, 77, 0, 255, 157, 68, 0, 255, 141, 57, 0, 255, 130, 51, 2, 255, 124, 46, 4, 255, 102, 30, 3, 255, 87, 23, 2, 255, 84, 28, 0, 255, 85, 30, 1, 255, 79, 27, 3, 255, 84, 26, 5, 255, 85, 23, 3, 255, 70, 19, 2, 255, 66, 17, 4, 255, 76, 25, 3, 255, 76, 26, 0, 255, 74, 24, 4, 255, 74, 24, 4, 255, 79, 24, 1, 255, 79, 32, 0, 255, 87, 37, 2, 255, 91, 32, 2, 255, 83, 27, 0, 255, 71, 22, 1, 255, 76, 23, 5, 255, 82, 26, 6, 255, 84, 29, 1, 255, 89, 35, 4, 255, 85, 25, 2, 255, 76, 19, 0, 255, 76, 22, 4, 255, 77, 19, 2, 255, 83, 26, 3, 255, 80, 23, 1, 255, 79, 20, 4, 255, 78, 21, 6, 255, 86, 27, 3, 255, 84, 23, 3, 255, 82, 18, 1, 255, 14, 5, 1, 255, 11, 4, 2, 255, 3, 2, 2, 255, 0, 2, 1, 255, 2, 2, 0, 255, 3, 3, 1, 255, 4, 2, 1, 255, 5, 1, 1, 255, 6, 2, 0, 255, 7, 3, 0, 255, 9, 4, 2, 255, 6, 2, 1, 255, 12, 7, 6, 255, 18, 10, 9, 255, 18, 9, 8, 255, 18, 9, 9, 255, 17, 10, 7, 255, 15, 10, 6, 255, 15, 12, 5, 255, 16, 14, 8, 255, 14, 8, 4, 255, 20, 12, 6, 255, 18, 13, 4, 255, 17, 14, 3, 255, 23, 17, 5, 255, 26, 18, 7, 255, 28, 19, 13, 255, 25, 16, 6, 255, 22, 16, 7, 255, 22, 16, 16, 255, 29, 21, 14, 255, 38, 25, 16, 255, 34, 22, 14, 255, 43, 26, 10, 255, 51, 32, 9, 255, 46, 33, 16, 255, 40, 33, 12, 255, 43, 35, 9, 255, 53, 39, 9, 255, 55, 37, 15, 255, 51, 44, 5, 255, 48, 47, 0, 255, 73, 75, 5, 255, 118, 124, 15, 255, 110, 121, 15, 255, 112, 108, 16, 255, 98, 88, 2, 255, 101, 105, 12, 255, 176, 175, 65, 255, 205, 197, 99, 255, 205, 197, 50, 255, 164, 141, 5, 255, 96, 91, 11, 255, 97, 85, 7, 255, 85, 71, 4, 255, 73, 59, 8, 255, 76, 59, 3, 255, 79, 56, 2, 255, 113, 79, 6, 255, 161, 101, 3, 255, 158, 101, 1, 255, 134, 83, 7, 255, 124, 76, 11, 255, 118, 61, 4, 255, 102, 51, 2, 255, 81, 37, 2, 255, 74, 39, 3, 255, 70, 39, 2, 255, 67, 37, 3, 255, 66, 36, 2, 255, 63, 36, 2, 255, 62, 35, 6, 255, 56, 35, 6, 255, 58, 42, 3, 255, 56, 39, 3, 255, 56, 34, 4, 255, 111, 64, 10, 255, 155, 81, 8, 255, 127, 56, 6, 255, 74, 32, 3, 255, 63, 37, 5, 255, 118, 66, 3, 255, 167, 82, 4, 255, 165, 80, 5, 255, 148, 70, 6, 255, 76, 37, 8, 255, 68, 35, 7, 255, 109, 56, 2, 255, 152, 75, 7, 255, 151, 68, 3, 255, 150, 69, 10, 255, 159, 70, 4, 255, 153, 74, 3, 255, 121, 58, 11, 255, 112, 53, 5, 255, 134, 65, 4, 255, 153, 78, 5, 255, 163, 76, 4, 255, 156, 70, 0, 255, 155, 76, 1, 255, 166, 77, 1, 255, 164, 82, 4, 255, 128, 62, 4, 255, 101, 47, 3, 255, 92, 48, 8, 255, 109, 57, 7, 255, 138, 69, 4, 255, 142, 66, 7, 255, 136, 61, 10, 255, 134, 65, 4, 255, 148, 74, 9, 255, 132, 64, 5, 255, 85, 46, 2, 255, 82, 47, 0, 255, 92, 46, 1, 255, 86, 44, 9, 255, 91, 48, 8, 255, 95, 47, 3, 255, 97, 47, 4, 255, 93, 45, 2, 255, 91, 48, 2, 255, 99, 53, 0, 255, 118, 59, 6, 255, 109, 57, 5, 255, 106, 55, 4, 255, 106, 50, 3, 255, 98, 53, 1, 255, 97, 58, 2, 255, 98, 57, 4, 255, 97, 54, 3, 255, 101, 54, 4, 255, 103, 53, 2, 255, 101, 49, 0, 255, 102, 52, 1, 255, 104, 58, 6, 255, 100, 55, 6, 255, 101, 54, 6, 255, 105, 53, 5, 255, 105, 53, 3, 255, 103, 52, 3, 255, 101, 56, 10, 255, 100, 55, 8, 255, 105, 57, 3, 255, 99, 53, 3, 255, 102, 61, 1, 255, 104, 59, 2, 255, 100, 55, 3, 255, 105, 54, 6, 255, 108, 54, 1, 255, 124, 62, 3, 255, 125, 68, 4, 255, 106, 57, 6, 255, 99, 54, 5, 255, 100, 57, 6, 255, 100, 54, 6, 255, 88, 57, 9, 255, 110, 60, 11, 255, 137, 72, 13, 255, 149, 77, 8, 255, 99, 56, 9, 255, 89, 49, 11, 255, 98, 57, 2, 255, 114, 63, 9, 255, 139, 73, 4, 255, 154, 72, 8, 255, 148, 70, 3, 255, 149, 72, 4, 255, 143, 83, 2, 255, 159, 84, 12, 255, 163, 73, 5, 255, 147, 74, 2, 255, 134, 65, 10, 255, 135, 68, 3, 255, 151, 80, 9, 255, 168, 91, 5, 255, 178, 102, 1, 255, 189, 103, 10, 255, 182, 105, 13, 255, 194, 110, 6, 255, 192, 102, 8, 255, 187, 103, 6, 255, 187, 103, 11, 255, 192, 102, 10, 255, 191, 106, 7, 255, 188, 106, 19, 255, 190, 105, 6, 255, 190, 105, 3, 255, 189, 111, 2, 255, 198, 115, 11, 255, 206, 128, 15, 255, 203, 128, 13, 255, 202, 117, 12, 255, 199, 116, 15, 255, 203, 119, 9, 255, 211, 122, 3, 255, 209, 127, 14, 255, 211, 130, 8, 255, 214, 132, 6, 255, 203, 127, 8, 255, 196, 121, 4, 255, 204, 127, 8, 255, 211, 137, 6, 255, 214, 139, 6, 255, 216, 140, 15, 255, 218, 145, 7, 255, 217, 146, 1, 255, 218, 148, 6, 255, 217, 149, 3, 255, 220, 151, 10, 255, 219, 152, 7, 255, 217, 150, 5, 255, 217, 145, 11, 255, 217, 144, 10, 255, 217, 145, 12, 255, 215, 144, 10, 255, 211, 144, 1, 255, 214, 146, 14, 255, 214, 145, 8, 255, 212, 145, 5, 255, 198, 127, 11, 255, 191, 118, 12, 255, 213, 149, 18, 255, 228, 162, 7, 255, 216, 149, 5, 255, 206, 138, 12, 255, 216, 156, 18, 255, 214, 158, 4, 255, 193, 128, 10, 255, 184, 117, 10, 255, 201, 145, 7, 255, 216, 167, 6, 255, 221, 173, 10, 255, 221, 173, 9, 255, 219, 165, 3, 255, 216, 156, 4, 255, 207, 149, 1, 255, 205, 152, 3, 255, 211, 162, 7, 255, 210, 163, 7, 255, 215, 172, 0, 255, 211, 163, 10, 255, 203, 152, 8, 255, 212, 160, 0, 255, 212, 168, 2, 255, 211, 168, 2, 255, 213, 167, 10, 255, 216, 177, 6, 255, 211, 175, 0, 255, 211, 169, 2, 255, 206, 160, 6, 255, 209, 160, 9, 255, 214, 167, 2, 255, 205, 160, 6, 255, 208, 166, 4, 255, 219, 174, 5, 255, 187, 132, 7, 255, 178, 123, 11, 255, 201, 155, 15, 255, 197, 152, 7, 255, 203, 153, 5, 255, 204, 153, 8, 255, 200, 154, 6, 255, 204, 159, 6, 255, 200, 155, 1, 255, 200, 153, 4, 255, 201, 153, 2, 255, 202, 151, 8, 255, 201, 148, 8, 255, 204, 152, 3, 255, 205, 153, 6, 255, 203, 146, 6, 255, 203, 145, 3, 255, 205, 146, 10, 255, 202, 144, 7, 255, 199, 140, 10, 255, 199, 130, 8, 255, 197, 125, 13, 255, 193, 124, 15, 255, 195, 129, 10, 255, 193, 128, 2, 255, 191, 123, 2, 255, 191, 119, 4, 255, 191, 119, 6, 255, 189, 118, 13, 255, 178, 103, 5, 255, 178, 100, 3, 255, 182, 105, 7, 255, 178, 103, 4, 255, 176, 96, 8, 255, 176, 97, 1, 255, 176, 97, 3, 255, 153, 72, 2, 255, 150, 67, 1, 255, 163, 79, 2, 255, 162, 81, 0, 255, 161, 79, 2, 255, 159, 76, 5, 255, 148, 69, 1, 255, 133, 56, 2, 255, 124, 54, 7, 255, 119, 54, 4, 255, 124, 56, 3, 255, 132, 55, 8, 255, 112, 44, 2, 255, 101, 43, 6, 255, 101, 41, 5, 255, 102, 41, 3, 255, 100, 40, 3, 255, 107, 44, 6, 255, 106, 41, 5, 255, 104, 41, 4, 255, 104, 44, 1, 255, 104, 44, 1, 255, 104, 39, 4, 255, 113, 41, 4, 255, 115, 44, 1, 255, 113, 44, 4, 255, 113, 43, 3, 255, 116, 42, 4, 255, 114, 40, 5, 255, 115, 41, 6, 255, 113, 38, 6, 255, 108, 38, 4, 255, 102, 36, 3, 255, 95, 33, 3, 255, 85, 32, 1, 255, 95, 36, 1, 255, 120, 46, 4, 255, 132, 51, 5, 255, 127, 49, 1, 255, 130, 51, 5, 255, 130, 52, 4, 255, 131, 59, 3, 255, 148, 72, 3, 255, 150, 71, 5, 255, 141, 55, 2, 255, 131, 49, 2, 255, 123, 51, 0, 255, 123, 46, 3, 255, 128, 48, 3, 255, 124, 47, 3, 255, 122, 45, 6, 255, 123, 47, 5, 255, 124, 48, 5, 255, 118, 39, 2, 255, 115, 38, 2, 255, 102, 35, 1, 255, 105, 41, 5, 255, 115, 46, 3, 255, 113, 43, 1, 255, 114, 45, 4, 255, 117, 45, 5, 255, 129, 53, 4, 255, 126, 51, 2, 255, 128, 52, 4, 255, 136, 54, 3, 255, 138, 62, 1, 255, 163, 70, 5, 255, 168, 73, 4, 255, 162, 72, 2, 255, 162, 76, 1, 255, 168, 77, 0, 255, 164, 69, 1, 255, 146, 58, 0, 255, 131, 53, 2, 255, 116, 37, 3, 255, 94, 30, 1, 255, 88, 29, 4, 255, 82, 31, 2, 255, 83, 27, 0, 255, 80, 25, 2, 255, 83, 21, 3, 255, 80, 20, 1, 255, 71, 22, 1, 255, 73, 22, 3, 255, 78, 28, 6, 255, 83, 36, 4, 255, 90, 36, 5, 255, 91, 32, 4, 255, 94, 34, 4, 255, 91, 33, 3, 255, 88, 32, 2, 255, 83, 26, 2, 255, 78, 22, 4, 255, 64, 17, 1, 255, 66, 17, 4, 255, 75, 25, 5, 255, 83, 33, 0, 255, 88, 39, 2, 255, 81, 32, 1, 255, 77, 23, 1, 255, 75, 25, 4, 255, 72, 22, 1, 255, 75, 20, 0, 255, 69, 21, 0, 255, 65, 22, 3, 255, 65, 19, 2, 255, 72, 22, 4, 255, 74, 21, 3, 255, 81, 25, 6, 255, 15, 7, 3, 255, 9, 3, 2, 255, 3, 1, 2, 255, 0, 2, 1, 255, 1, 2, 0, 255, 4, 3, 1, 255, 6, 4, 2, 255, 9, 6, 4, 255, 6, 2, 1, 255, 8, 4, 0, 255, 6, 2, 0, 255, 7, 4, 1, 255, 5, 3, 1, 255, 16, 10, 7, 255, 20, 11, 12, 255, 18, 11, 13, 255, 17, 10, 8, 255, 17, 11, 5, 255, 17, 11, 7, 255, 16, 11, 8, 255, 13, 9, 3, 255, 17, 11, 4, 255, 20, 15, 5, 255, 20, 15, 4, 255, 27, 18, 3, 255, 26, 18, 0, 255, 24, 20, 5, 255, 25, 21, 14, 255, 22, 20, 12, 255, 26, 24, 12, 255, 29, 27, 9, 255, 28, 23, 9, 255, 32, 25, 13, 255, 42, 32, 14, 255, 46, 33, 12, 255, 40, 29, 14, 255, 42, 35, 13, 255, 43, 38, 10, 255, 47, 40, 9, 255, 50, 43, 7, 255, 48, 42, 8, 255, 62, 50, 3, 255, 84, 75, 8, 255, 79, 73, 2, 255, 73, 64, 6, 255, 71, 66, 7, 255, 73, 74, 7, 255, 80, 74, 2, 255, 66, 59, 0, 255, 70, 58, 0, 255, 70, 55, 2, 255, 67, 64, 11, 255, 79, 79, 11, 255, 75, 74, 1, 255, 71, 61, 1, 255, 73, 61, 1, 255, 73, 57, 4, 255, 69, 58, 8, 255, 129, 68, 7, 255, 143, 76, 6, 255, 142, 83, 0, 255, 126, 81, 5, 255, 105, 62, 3, 255, 86, 46, 8, 255, 83, 41, 6, 255, 68, 40, 5, 255, 61, 43, 2, 255, 63, 41, 6, 255, 63, 37, 7, 255, 69, 39, 4, 255, 59, 34, 1, 255, 52, 31, 6, 255, 69, 41, 5, 255, 88, 54, 10, 255, 55, 28, 2, 255, 124, 67, 10, 255, 174, 85, 0, 255, 165, 81, 5, 255, 124, 53, 7, 255, 67, 31, 5, 255, 95, 55, 4, 255, 162, 80, 5, 255, 165, 78, 9, 255, 162, 81, 3, 255, 149, 76, 0, 255, 144, 70, 4, 255, 155, 75, 7, 255, 161, 82, 10, 255, 162, 77, 4, 255, 164, 81, 5, 255, 167, 85, 1, 255, 166, 80, 2, 255, 173, 88, 5, 255, 171, 83, 0, 255, 182, 85, 7, 255, 180, 92, 6, 255, 177, 86, 4, 255, 171, 80, 5, 255, 167, 92, 4, 255, 170, 89, 3, 255, 173, 79, 7, 255, 176, 76, 3, 255, 170, 81, 2, 255, 163, 77, 4, 255, 156, 77, 5, 255, 164, 78, 5, 255, 168, 71, 3, 255, 166, 74, 3, 255, 169, 81, 1, 255, 167, 81, 1, 255, 164, 77, 3, 255, 152, 73, 4, 255, 119, 68, 5, 255, 106, 61, 2, 255, 104, 52, 6, 255, 94, 49, 2, 255, 128, 62, 9, 255, 147, 66, 7, 255, 139, 64, 2, 255, 131, 64, 3, 255, 134, 70, 7, 255, 144, 71, 7, 255, 146, 70, 5, 255, 111, 60, 5, 255, 95, 52, 7, 255, 99, 51, 3, 255, 103, 55, 2, 255, 103, 53, 3, 255, 114, 56, 3, 255, 118, 60, 2, 255, 123, 66, 5, 255, 129, 71, 12, 255, 119, 62, 3, 255, 134, 67, 9, 255, 116, 60, 4, 255, 101, 55, 1, 255, 107, 56, 7, 255, 108, 51, 4, 255, 110, 55, 4, 255, 104, 53, 3, 255, 106, 53, 5, 255, 99, 50, 1, 255, 100, 55, 6, 255, 104, 52, 11, 255, 103, 55, 5, 255, 105, 59, 5, 255, 105, 54, 3, 255, 102, 54, 5, 255, 108, 71, 8, 255, 160, 91, 7, 255, 152, 68, 10, 255, 98, 54, 6, 255, 90, 59, 4, 255, 94, 50, 8, 255, 113, 64, 6, 255, 147, 88, 9, 255, 175, 89, 5, 255, 169, 86, 0, 255, 170, 79, 8, 255, 142, 64, 11, 255, 113, 62, 4, 255, 136, 73, 11, 255, 156, 78, 17, 255, 160, 74, 11, 255, 154, 80, 7, 255, 153, 82, 12, 255, 139, 69, 7, 255, 150, 76, 4, 255, 150, 69, 6, 255, 139, 64, 5, 255, 140, 68, 8, 255, 150, 75, 9, 255, 160, 86, 6, 255, 172, 91, 19, 255, 179, 99, 14, 255, 187, 113, 6, 255, 194, 111, 7, 255, 196, 112, 3, 255, 190, 110, 3, 255, 192, 106, 10, 255, 192, 105, 2, 255, 187, 104, 9, 255, 198, 107, 17, 255, 205, 109, 6, 255, 201, 110, 11, 255, 198, 109, 3, 255, 192, 107, 10, 255, 198, 117, 12, 255, 201, 115, 20, 255, 205, 119, 13, 255, 210, 125, 10, 255, 210, 121, 8, 255, 205, 122, 12, 255, 208, 130, 8, 255, 206, 121, 6, 255, 211, 126, 16, 255, 213, 128, 17, 255, 211, 132, 10, 255, 211, 138, 10, 255, 212, 141, 2, 255, 217, 144, 10, 255, 218, 144, 9, 255, 212, 138, 6, 255, 213, 137, 17, 255, 219, 146, 13, 255, 224, 155, 10, 255, 223, 151, 5, 255, 219, 150, 0, 255, 220, 154, 7, 255, 220, 154, 6, 255, 215, 145, 7, 255, 215, 146, 9, 255, 217, 146, 10, 255, 220, 152, 1, 255, 215, 148, 0, 255, 215, 147, 6, 255, 218, 157, 3, 255, 205, 141, 6, 255, 209, 149, 10, 255, 210, 153, 12, 255, 207, 153, 3, 255, 221, 172, 5, 255, 226, 168, 1, 255, 212, 146, 4, 255, 211, 144, 10, 255, 217, 162, 8, 255, 214, 158, 6, 255, 191, 123, 10, 255, 183, 117, 13, 255, 202, 153, 14, 255, 215, 169, 5, 255, 225, 176, 1, 255, 223, 174, 8, 255, 212, 163, 2, 255, 200, 149, 8, 255, 202, 152, 6, 255, 199, 145, 11, 255, 213, 167, 7, 255, 213, 169, 4, 255, 219, 175, 2, 255, 206, 158, 13, 255, 189, 137, 11, 255, 198, 144, 9, 255, 210, 160, 7, 255, 212, 166, 2, 255, 210, 164, 1, 255, 215, 169, 2, 255, 220, 174, 3, 255, 217, 170, 6, 255, 208, 161, 4, 255, 208, 160, 3, 255, 208, 160, 1, 255, 200, 154, 5, 255, 210, 166, 7, 255, 217, 170, 6, 255, 193, 140, 6, 255, 188, 136, 19, 255, 198, 156, 2, 255, 195, 155, 1, 255, 200, 154, 1, 255, 201, 150, 3, 255, 202, 158, 2, 255, 202, 158, 5, 255, 201, 155, 9, 255, 199, 153, 5, 255, 200, 152, 10, 255, 201, 150, 9, 255, 201, 148, 15, 255, 207, 154, 9, 255, 204, 149, 3, 255, 201, 145, 0, 255, 203, 145, 9, 255, 205, 147, 8, 255, 201, 143, 3, 255, 192, 133, 8, 255, 191, 127, 8, 255, 192, 126, 7, 255, 191, 119, 3, 255, 197, 122, 5, 255, 197, 126, 8, 255, 191, 126, 7, 255, 188, 122, 7, 255, 189, 119, 10, 255, 185, 113, 12, 255, 178, 102, 7, 255, 177, 99, 6, 255, 181, 105, 7, 255, 178, 104, 4, 255, 178, 103, 0, 255, 172, 94, 0, 255, 169, 87, 5, 255, 163, 81, 6, 255, 150, 71, 5, 255, 147, 68, 7, 255, 151, 72, 5, 255, 156, 80, 4, 255, 153, 74, 0, 255, 153, 71, 3, 255, 143, 68, 4, 255, 127, 60, 8, 255, 123, 55, 15, 255, 126, 58, 2, 255, 116, 46, 0, 255, 111, 48, 6, 255, 103, 42, 6, 255, 103, 40, 4, 255, 100, 44, 2, 255, 104, 41, 4, 255, 100, 37, 4, 255, 97, 37, 3, 255, 95, 36, 1, 255, 97, 39, 3, 255, 98, 41, 3, 255, 100, 38, 0, 255, 112, 42, 5, 255, 111, 42, 3, 255, 105, 44, 1, 255, 108, 43, 3, 255, 107, 33, 2, 255, 112, 38, 4, 255, 111, 37, 3, 255, 108, 37, 5, 255, 105, 31, 0, 255, 102, 33, 6, 255, 94, 30, 3, 255, 82, 28, 2, 255, 88, 31, 4, 255, 106, 41, 5, 255, 118, 48, 1, 255, 117, 45, 1, 255, 126, 49, 3, 255, 147, 64, 3, 255, 162, 80, 5, 255, 164, 83, 3, 255, 154, 73, 1, 255, 137, 51, 2, 255, 126, 45, 4, 255, 120, 47, 2, 255, 121, 44, 3, 255, 121, 47, 3, 255, 120, 46, 2, 255, 121, 47, 5, 255, 120, 49, 3, 255, 113, 46, 1, 255, 105, 38, 1, 255, 100, 36, 3, 255, 95, 34, 6, 255, 102, 36, 7, 255, 111, 41, 3, 255, 117, 43, 3, 255, 115, 40, 2, 255, 112, 45, 4, 255, 122, 50, 3, 255, 118, 49, 4, 255, 108, 43, 6, 255, 105, 34, 2, 255, 126, 53, 5, 255, 157, 70, 2, 255, 160, 73, 0, 255, 163, 75, 2, 255, 166, 78, 1, 255, 167, 77, 2, 255, 160, 68, 5, 255, 141, 55, 4, 255, 126, 44, 3, 255, 109, 34, 5, 255, 92, 30, 0, 255, 84, 29, 1, 255, 76, 26, 0, 255, 80, 23, 1, 255, 86, 25, 3, 255, 80, 24, 4, 255, 70, 21, 2, 255, 67, 22, 0, 255, 75, 23, 1, 255, 76, 24, 1, 255, 88, 32, 1, 255, 107, 43, 2, 255, 102, 40, 1, 255, 90, 29, 3, 255, 87, 24, 2, 255, 80, 20, 1, 255, 71, 18, 2, 255, 73, 20, 5, 255, 69, 18, 3, 255, 65, 19, 4, 255, 69, 21, 3, 255, 86, 29, 3, 255, 95, 30, 5, 255, 89, 27, 7, 255, 82, 24, 4, 255, 81, 25, 1, 255, 77, 21, 1, 255, 77, 22, 5, 255, 71, 20, 7, 255, 70, 23, 5, 255, 72, 25, 3, 255, 73, 19, 3, 255, 72, 19, 0, 255, 74, 25, 2, 255, 15, 7, 5, 255, 9, 4, 1, 255, 5, 2, 0, 255, 1, 0, 0, 255, 4, 1, 1, 255, 8, 2, 2, 255, 6, 0, 0, 255, 7, 2, 0, 255, 11, 6, 2, 255, 9, 4, 1, 255, 9, 4, 1, 255, 10, 5, 3, 255, 9, 4, 1, 255, 10, 8, 3, 255, 15, 10, 12, 255, 16, 7, 12, 255, 17, 10, 8, 255, 16, 10, 5, 255, 16, 12, 11, 255, 17, 11, 6, 255, 18, 11, 3, 255, 21, 15, 6, 255, 20, 13, 6, 255, 23, 13, 6, 255, 23, 12, 3, 255, 28, 19, 4, 255, 24, 20, 2, 255, 22, 23, 7, 255, 22, 20, 7, 255, 32, 23, 8, 255, 32, 22, 4, 255, 35, 31, 9, 255, 39, 32, 6, 255, 35, 28, 7, 255, 42, 33, 20, 255, 45, 33, 18, 255, 48, 39, 13, 255, 48, 44, 12, 255, 46, 45, 7, 255, 45, 44, 4, 255, 53, 43, 9, 255, 74, 57, 3, 255, 77, 67, 3, 255, 70, 66, 4, 255, 68, 60, 8, 255, 68, 67, 11, 255, 70, 66, 3, 255, 73, 65, 7, 255, 75, 69, 4, 255, 76, 70, 8, 255, 75, 69, 1, 255, 70, 70, 6, 255, 73, 74, 6, 255, 70, 66, 3, 255, 69, 57, 0, 255, 76, 54, 0, 255, 73, 53, 3, 255, 66, 47, 0, 255, 102, 60, 6, 255, 123, 65, 4, 255, 121, 68, 8, 255, 104, 55, 3, 255, 87, 47, 3, 255, 99, 46, 5, 255, 71, 40, 6, 255, 70, 43, 5, 255, 60, 32, 1, 255, 54, 32, 5, 255, 89, 54, 6, 255, 61, 39, 2, 255, 40, 36, 5, 255, 72, 49, 6, 255, 134, 69, 8, 255, 140, 68, 7, 255, 102, 59, 8, 255, 157, 81, 5, 255, 159, 79, 1, 255, 160, 84, 3, 255, 154, 81, 7, 255, 156, 72, 11, 255, 164, 85, 3, 255, 169, 87, 1, 255, 169, 84, 5, 255, 170, 82, 8, 255, 176, 88, 6, 255, 180, 91, 0, 255, 179, 91, 1, 255, 181, 90, 5, 255, 181, 90, 4, 255, 183, 90, 2, 255, 182, 91, 6, 255, 182, 89, 8, 255, 176, 86, 5, 255, 181, 97, 3, 255, 184, 89, 0, 255, 182, 82, 0, 255, 184, 89, 1, 255, 182, 87, 3, 255, 188, 93, 5, 255, 186, 98, 4, 255, 186, 94, 6, 255, 177, 90, 0, 255, 176, 87, 3, 255, 177, 86, 3, 255, 176, 86, 1, 255, 171, 81, 2, 255, 168, 80, 7, 255, 166, 79, 6, 255, 165, 81, 3, 255, 165, 77, 1, 255, 163, 76, 4, 255, 155, 68, 4, 255, 151, 64, 1, 255, 153, 70, 5, 255, 148, 67, 3, 255, 136, 61, 5, 255, 143, 69, 3, 255, 141, 66, 0, 255, 146, 66, 3, 255, 163, 77, 7, 255, 165, 76, 4, 255, 158, 72, 3, 255, 147, 75, 2, 255, 132, 63, 5, 255, 123, 58, 9, 255, 109, 60, 7, 255, 110, 57, 3, 255, 111, 50, 3, 255, 127, 58, 3, 255, 138, 62, 4, 255, 135, 63, 3, 255, 138, 62, 5, 255, 136, 65, 7, 255, 147, 69, 6, 255, 111, 54, 2, 255, 94, 50, 7, 255, 96, 52, 4, 255, 101, 55, 1, 255, 98, 52, 5, 255, 103, 55, 2, 255, 120, 66, 4, 255, 119, 68, 7, 255, 108, 56, 6, 255, 102, 48, 7, 255, 105, 57, 5, 255, 101, 51, 3, 255, 110, 54, 6, 255, 129, 77, 9, 255, 164, 98, 7, 255, 175, 93, 4, 255, 131, 62, 3, 255, 98, 55, 6, 255, 106, 67, 8, 255, 131, 73, 10, 255, 168, 85, 6, 255, 175, 80, 7, 255, 167, 75, 5, 255, 166, 82, 7, 255, 159, 78, 14, 255, 160, 79, 11, 255, 164, 91, 12, 255, 170, 86, 10, 255, 175, 93, 9, 255, 171, 94, 3, 255, 178, 97, 7, 255, 172, 90, 13, 255, 142, 67, 4, 255, 133, 62, 10, 255, 144, 73, 11, 255, 155, 85, 9, 255, 163, 89, 5, 255, 178, 100, 7, 255, 184, 104, 9, 255, 190, 106, 14, 255, 197, 112, 8, 255, 198, 111, 6, 255, 197, 107, 8, 255, 198, 108, 10, 255, 196, 107, 6, 255, 195, 108, 4, 255, 195, 107, 8, 255, 203, 112, 10, 255, 199, 107, 11, 255, 194, 101, 10, 255, 200, 111, 6, 255, 199, 112, 11, 255, 205, 120, 15, 255, 201, 114, 9, 255, 198, 115, 5, 255, 208, 127, 9, 255, 210, 129, 9, 255, 212, 133, 8, 255, 212, 132, 10, 255, 218, 136, 12, 255, 201, 117, 10, 255, 205, 120, 7, 255, 214, 135, 8, 255, 214, 139, 9, 255, 216, 142, 10, 255, 220, 148, 4, 255, 220, 148, 5, 255, 221, 149, 6, 255, 216, 144, 3, 255, 218, 141, 13, 255, 222, 150, 6, 255, 218, 153, 6, 255, 221, 149, 10, 255, 218, 144, 7, 255, 222, 155, 5, 255, 223, 161, 5, 255, 219, 151, 8, 255, 216, 150, 9, 255, 212, 147, 4, 255, 212, 145, 8, 255, 206, 138, 6, 255, 213, 148, 14, 255, 224, 166, 2, 255, 219, 163, 10, 255, 217, 164, 7, 255, 223, 168, 7, 255, 226, 169, 10, 255, 227, 168, 10, 255, 218, 159, 4, 255, 209, 150, 4, 255, 216, 163, 5, 255, 223, 169, 9, 255, 216, 160, 5, 255, 169, 104, 10, 255, 182, 127, 7, 255, 219, 181, 18, 255, 218, 179, 4, 255, 217, 173, 4, 255, 224, 177, 7, 255, 216, 169, 4, 255, 213, 168, 4, 255, 218, 174, 10, 255, 207, 162, 2, 255, 210, 169, 7, 255, 218, 175, 4, 255, 217, 173, 0, 255, 221, 177, 4, 255, 188, 140, 5, 255, 182, 132, 9, 255, 209, 168, 3, 255, 214, 173, 1, 255, 204, 160, 2, 255, 207, 161, 0, 255, 218, 172, 0, 255, 213, 166, 3, 255, 212, 165, 1, 255, 212, 162, 5, 255, 203, 155, 5, 255, 206, 159, 14, 255, 211, 167, 9, 255, 210, 165, 3, 255, 191, 139, 4, 255, 200, 152, 11, 255, 201, 159, 4, 255, 197, 154, 9, 255, 201, 154, 3, 255, 202, 151, 3, 255, 204, 158, 8, 255, 202, 158, 8, 255, 201, 156, 1, 255, 201, 155, 2, 255, 200, 152, 8, 255, 199, 150, 6, 255, 203, 151, 14, 255, 205, 153, 7, 255, 203, 147, 2, 255, 199, 142, 4, 255, 203, 144, 3, 255, 203, 146, 1, 255, 200, 142, 2, 255, 195, 136, 5, 255, 198, 135, 10, 255, 197, 132, 10, 255, 193, 125, 5, 255, 196, 127, 6, 255, 194, 126, 5, 255, 191, 126, 4, 255, 192, 129, 8, 255, 186, 119, 13, 255, 180, 107, 2, 255, 182, 108, 4, 255, 185, 113, 9, 255, 184, 114, 7, 255, 179, 108, 6, 255, 177, 100, 2, 255, 164, 85, 4, 255, 160, 79, 3, 255, 167, 87, 0, 255, 161, 81, 8, 255, 146, 72, 7, 255, 152, 76, 4, 255, 150, 71, 2, 255, 150, 72, 4, 255, 150, 73, 8, 255, 142, 65, 3, 255, 142, 67, 2, 255, 134, 60, 8, 255, 122, 57, 4, 255, 114, 50, 6, 255, 110, 47, 5, 255, 106, 42, 6, 255, 105, 43, 6, 255, 101, 42, 3, 255, 99, 36, 2, 255, 100, 38, 1, 255, 96, 37, 4, 255, 90, 31, 4, 255, 96, 33, 1, 255, 100, 37, 1, 255, 100, 37, 2, 255, 104, 40, 3, 255, 105, 42, 2, 255, 104, 41, 2, 255, 105, 39, 4, 255, 107, 39, 3, 255, 110, 40, 2, 255, 99, 33, 1, 255, 102, 35, 3, 255, 101, 31, 2, 255, 103, 32, 2, 255, 102, 35, 5, 255, 102, 35, 9, 255, 94, 31, 6, 255, 88, 32, 0, 255, 109, 46, 3, 255, 115, 45, 2, 255, 131, 56, 1, 255, 161, 78, 2, 255, 162, 79, 2, 255, 164, 76, 2, 255, 152, 69, 3, 255, 129, 50, 2, 255, 120, 45, 5, 255, 116, 44, 1, 255, 117, 45, 2, 255, 120, 47, 1, 255, 120, 44, 2, 255, 113, 35, 4, 255, 106, 32, 5, 255, 101, 32, 4, 255, 105, 37, 5, 255, 104, 36, 1, 255, 106, 39, 3, 255, 111, 45, 3, 255, 118, 45, 6, 255, 118, 42, 5, 255, 110, 38, 2, 255, 106, 41, 2, 255, 117, 46, 7, 255, 117, 37, 0, 255, 100, 32, 5, 255, 80, 20, 3, 255, 111, 35, 4, 255, 141, 57, 3, 255, 157, 73, 1, 255, 166, 71, 3, 255, 164, 70, 5, 255, 164, 71, 3, 255, 155, 65, 0, 255, 133, 52, 7, 255, 117, 33, 6, 255, 101, 29, 1, 255, 93, 27, 1, 255, 87, 29, 3, 255, 78, 22, 0, 255, 78, 23, 3, 255, 81, 22, 4, 255, 76, 22, 2, 255, 74, 25, 2, 255, 77, 25, 2, 255, 80, 26, 5, 255, 76, 25, 1, 255, 91, 32, 1, 255, 108, 44, 6, 255, 88, 30, 2, 255, 67, 14, 7, 255, 75, 22, 6, 255, 79, 20, 2, 255, 71, 16, 6, 255, 62, 15, 3, 255, 75, 20, 1, 255, 72, 21, 2, 255, 77, 27, 5, 255, 82, 26, 2, 255, 84, 25, 3, 255, 82, 24, 2, 255, 73, 24, 3, 255, 70, 20, 2, 255, 77, 21, 2, 255, 81, 23, 5, 255, 81, 21, 3, 255, 85, 21, 3, 255, 84, 21, 2, 255, 77, 26, 4, 255, 79, 24, 2, 255, 77, 21, 0, 255, 17, 6, 4, 255, 14, 7, 3, 255, 7, 3, 1, 255, 5, 2, 1, 255, 5, 1, 0, 255, 7, 1, 1, 255, 6, 1, 1, 255, 7, 2, 2, 255, 8, 4, 1, 255, 9, 4, 1, 255, 8, 3, 0, 255, 10, 5, 2, 255, 11, 7, 3, 255, 10, 6, 3, 255, 13, 8, 4, 255, 15, 12, 6, 255, 15, 12, 7, 255, 15, 12, 8, 255, 15, 12, 9, 255, 18, 13, 7, 255, 20, 14, 8, 255, 22, 15, 7, 255, 22, 13, 6, 255, 26, 16, 10, 255, 26, 16, 7, 255, 26, 18, 3, 255, 29, 19, 3, 255, 29, 21, 9, 255, 32, 22, 8, 255, 38, 22, 8, 255, 44, 30, 13, 255, 37, 29, 10, 255, 35, 31, 11, 255, 40, 36, 2, 255, 46, 40, 8, 255, 47, 44, 10, 255, 44, 40, 9, 255, 50, 39, 11, 255, 54, 46, 12, 255, 48, 45, 6, 255, 58, 51, 6, 255, 78, 64, 11, 255, 70, 57, 7, 255, 67, 60, 6, 255, 72, 64, 2, 255, 74, 63, 5, 255, 66, 61, 2, 255, 67, 62, 10, 255, 75, 67, 11, 255, 70, 61, 2, 255, 71, 63, 4, 255, 70, 67, 10, 255, 80, 69, 9, 255, 77, 61, 7, 255, 67, 56, 2, 255, 75, 52, 5, 255, 69, 50, 1, 255, 69, 47, 2, 255, 70, 49, 7, 255, 87, 56, 7, 255, 103, 54, 6, 255, 101, 48, 2, 255, 90, 44, 6, 255, 79, 37, 2, 255, 77, 44, 9, 255, 82, 46, 8, 255, 60, 36, 3, 255, 105, 68, 4, 255, 130, 77, 1, 255, 112, 62, 5, 255, 127, 71, 12, 255, 162, 80, 5, 255, 167, 86, 5, 255, 162, 82, 7, 255, 172, 85, 3, 255, 171, 84, 1, 255, 165, 90, 8, 255, 167, 88, 5, 255, 175, 88, 0, 255, 185, 89, 0, 255, 181, 87, 5, 255, 178, 90, 3, 255, 179, 89, 1, 255, 179, 88, 5, 255, 181, 90, 5, 255, 180, 91, 5, 255, 182, 93, 4, 255, 184, 94, 1, 255, 186, 93, 1, 255, 186, 95, 8, 255, 189, 93, 7, 255, 189, 101, 6, 255, 217, 134, 18, 255, 213, 127, 20, 255, 206, 150, 89, 255, 218, 165, 54, 255, 207, 132, 13, 255, 209, 143, 17, 255, 201, 118, 25, 255, 197, 96, 7, 255, 189, 93, 0, 255, 185, 93, 1, 255, 181, 93, 2, 255, 181, 90, 0, 255, 183, 91, 4, 255, 179, 87, 2, 255, 177, 87, 3, 255, 174, 86, 2, 255, 175, 87, 1, 255, 179, 84, 2, 255, 174, 79, 2, 255, 164, 73, 0, 255, 160, 72, 1, 255, 158, 72, 3, 255, 152, 69, 4, 255, 142, 56, 4, 255, 133, 60, 3, 255, 143, 65, 6, 255, 162, 69, 6, 255, 163, 77, 4, 255, 160, 79, 3, 255, 160, 71, 0, 255, 153, 65, 5, 255, 148, 65, 4, 255, 147, 68, 2, 255, 134, 66, 7, 255, 126, 56, 3, 255, 137, 62, 7, 255, 136, 61, 2, 255, 133, 59, 4, 255, 136, 61, 2, 255, 147, 65, 0, 255, 147, 71, 3, 255, 144, 63, 7, 255, 117, 53, 3, 255, 105, 48, 7, 255, 105, 52, 17, 255, 100, 52, 3, 255, 114, 60, 7, 255, 137, 75, 12, 255, 151, 76, 11, 255, 166, 79, 4, 255, 157, 82, 2, 255, 141, 71, 0, 255, 106, 52, 5, 255, 102, 56, 7, 255, 142, 74, 2, 255, 169, 82, 9, 255, 170, 69, 2, 255, 166, 80, 4, 255, 144, 75, 9, 255, 133, 63, 7, 255, 148, 72, 2, 255, 168, 82, 6, 255, 149, 67, 5, 255, 133, 58, 5, 255, 145, 66, 5, 255, 161, 76, 9, 255, 170, 88, 6, 255, 176, 91, 3, 255, 178, 93, 5, 255, 181, 91, 10, 255, 178, 89, 7, 255, 183, 101, 9, 255, 184, 96, 4, 255, 180, 94, 10, 255, 169, 86, 11, 255, 174, 94, 10, 255, 187, 106, 7, 255, 194, 111, 9, 255, 197, 109, 14, 255, 197, 106, 7, 255, 201, 111, 9, 255, 197, 111, 1, 255, 198, 109, 6, 255, 201, 110, 10, 255, 200, 106, 5, 255, 202, 110, 7, 255, 201, 109, 7, 255, 196, 104, 4, 255, 199, 109, 14, 255, 200, 110, 12, 255, 190, 100, 10, 255, 192, 104, 8, 255, 199, 113, 14, 255, 205, 120, 15, 255, 199, 112, 9, 255, 202, 119, 6, 255, 209, 132, 7, 255, 211, 137, 13, 255, 210, 135, 8, 255, 212, 138, 11, 255, 214, 136, 12, 255, 214, 139, 2, 255, 199, 120, 6, 255, 192, 114, 13, 255, 206, 133, 5, 255, 218, 149, 5, 255, 215, 147, 4, 255, 217, 148, 8, 255, 219, 150, 6, 255, 222, 153, 0, 255, 218, 146, 9, 255, 214, 138, 9, 255, 217, 141, 6, 255, 218, 144, 6, 255, 215, 142, 10, 255, 215, 146, 3, 255, 226, 158, 2, 255, 223, 162, 2, 255, 218, 164, 8, 255, 219, 158, 6, 255, 215, 150, 7, 255, 215, 150, 10, 255, 214, 151, 6, 255, 217, 158, 9, 255, 225, 171, 6, 255, 227, 171, 6, 255, 220, 153, 14, 255, 216, 152, 6, 255, 223, 164, 2, 255, 223, 167, 9, 255, 214, 159, 13, 255, 210, 157, 10, 255, 217, 172, 1, 255, 227, 169, 2, 255, 223, 170, 7, 255, 188, 143, 22, 255, 186, 138, 23, 255, 227, 180, 19, 255, 224, 179, 8, 255, 221, 176, 4, 255, 223, 178, 1, 255, 221, 175, 1, 255, 213, 168, 3, 255, 220, 177, 5, 255, 221, 178, 4, 255, 216, 173, 10, 255, 218, 173, 2, 255, 215, 170, 4, 255, 211, 167, 4, 255, 206, 164, 1, 255, 210, 168, 1, 255, 209, 167, 4, 255, 215, 173, 2, 255, 207, 159, 9, 255, 195, 143, 8, 255, 212, 164, 1, 255, 215, 168, 0, 255, 206, 158, 4, 255, 201, 150, 5, 255, 204, 156, 5, 255, 211, 167, 3, 255, 217, 175, 6, 255, 210, 167, 2, 255, 191, 141, 9, 255, 198, 147, 5, 255, 203, 160, 5, 255, 197, 157, 5, 255, 200, 154, 10, 255, 199, 150, 0, 255, 202, 153, 5, 255, 203, 156, 12, 255, 200, 155, 6, 255, 199, 154, 5, 255, 200, 152, 7, 255, 202, 152, 13, 255, 203, 155, 11, 255, 203, 153, 6, 255, 200, 147, 3, 255, 202, 146, 10, 255, 203, 147, 9, 255, 204, 149, 5, 255, 200, 144, 0, 255, 198, 141, 1, 255, 200, 140, 5, 255, 197, 134, 4, 255, 197, 132, 9, 255, 197, 130, 8, 255, 191, 125, 2, 255, 190, 125, 1, 255, 189, 125, 3, 255, 183, 116, 9, 255, 178, 105, 6, 255, 182, 108, 9, 255, 184, 109, 5, 255, 179, 104, 0, 255, 176, 96, 4, 255, 173, 90, 3, 255, 165, 84, 5, 255, 166, 88, 6, 255, 166, 90, 1, 255, 168, 89, 3, 255, 158, 76, 2, 255, 161, 80, 3, 255, 157, 75, 0, 255, 158, 76, 7, 255, 148, 69, 3, 255, 141, 67, 4, 255, 141, 70, 11, 255, 128, 55, 2, 255, 135, 60, 7, 255, 131, 65, 5, 255, 116, 54, 5, 255, 109, 48, 7, 255, 102, 39, 1, 255, 98, 37, 1, 255, 96, 40, 3, 255, 95, 39, 0, 255, 95, 33, 1, 255, 99, 34, 3, 255, 105, 37, 2, 255, 105, 39, 3, 255, 100, 38, 4, 255, 102, 40, 8, 255, 103, 40, 3, 255, 106, 39, 2, 255, 109, 38, 3, 255, 105, 40, 2, 255, 101, 44, 3, 255, 101, 39, 3, 255, 103, 39, 4, 255, 97, 35, 2, 255, 100, 35, 3, 255, 104, 34, 2, 255, 111, 35, 8, 255, 102, 36, 3, 255, 90, 31, 0, 255, 94, 32, 2, 255, 124, 55, 7, 255, 152, 76, 4, 255, 154, 75, 1, 255, 156, 78, 4, 255, 151, 69, 2, 255, 132, 52, 5, 255, 117, 40, 5, 255, 117, 41, 5, 255, 115, 39, 4, 255, 116, 40, 3, 255, 120, 43, 3, 255, 118, 40, 3, 255, 109, 33, 3, 255, 99, 34, 4, 255, 100, 39, 4, 255, 110, 39, 3, 255, 108, 35, 1, 255, 111, 38, 7, 255, 119, 45, 6, 255, 116, 41, 5, 255, 107, 36, 1, 255, 105, 36, 2, 255, 105, 37, 1, 255, 115, 41, 1, 255, 109, 36, 1, 255, 89, 30, 3, 255, 82, 26, 6, 255, 103, 30, 3, 255, 117, 39, 2, 255, 141, 62, 2, 255, 162, 73, 2, 255, 158, 71, 3, 255, 150, 63, 4, 255, 139, 58, 1, 255, 125, 55, 5, 255, 107, 35, 3, 255, 100, 27, 3, 255, 93, 25, 2, 255, 83, 21, 0, 255, 78, 22, 1, 255, 81, 29, 5, 255, 78, 27, 1, 255, 84, 29, 1, 255, 84, 25, 0, 255, 85, 24, 0, 255, 89, 31, 6, 255, 91, 34, 4, 255, 97, 41, 3, 255, 99, 40, 2, 255, 80, 24, 1, 255, 62, 17, 4, 255, 72, 22, 3, 255, 73, 22, 2, 255, 63, 17, 2, 255, 65, 21, 0, 255, 73, 25, 2, 255, 71, 21, 1, 255, 81, 31, 6, 255, 76, 28, 2, 255, 68, 20, 0, 255, 72, 24, 0, 255, 65, 19, 4, 255, 66, 16, 3, 255, 77, 21, 1, 255, 80, 25, 1, 255, 79, 24, 1, 255, 77, 22, 0, 255, 76, 22, 1, 255, 77, 24, 3, 255, 82, 25, 2, 255, 82, 23, 1, 255, 18, 8, 6, 255, 14, 7, 4, 255, 5, 0, 0, 255, 6, 2, 2, 255, 6, 2, 1, 255, 6, 1, 1, 255, 8, 3, 3, 255, 8, 4, 3, 255, 6, 2, 0, 255, 8, 3, 0, 255, 11, 5, 1, 255, 9, 4, 0, 255, 10, 4, 1, 255, 12, 3, 2, 255, 10, 4, 2, 255, 15, 12, 8, 255, 19, 15, 14, 255, 15, 11, 8, 255, 19, 13, 9, 255, 14, 13, 6, 255, 18, 17, 8, 255, 20, 16, 7, 255, 21, 16, 7, 255, 22, 18, 9, 255, 23, 21, 9, 255, 21, 20, 7, 255, 25, 21, 9, 255, 28, 23, 11, 255, 33, 25, 13, 255, 35, 26, 10, 255, 35, 28, 10, 255, 31, 29, 11, 255, 31, 30, 22, 255, 38, 34, 12, 255, 44, 36, 16, 255, 47, 41, 11, 255, 47, 38, 16, 255, 51, 40, 12, 255, 57, 49, 7, 255, 53, 46, 9, 255, 68, 59, 7, 255, 73, 62, 11, 255, 65, 56, 9, 255, 62, 55, 13, 255, 67, 61, 2, 255, 65, 57, 6, 255, 64, 64, 20, 255, 70, 72, 17, 255, 72, 64, 11, 255, 72, 58, 3, 255, 70, 57, 9, 255, 70, 65, 15, 255, 82, 69, 12, 255, 69, 63, 2, 255, 66, 55, 1, 255, 66, 52, 1, 255, 67, 46, 1, 255, 62, 45, 0, 255, 79, 51, 4, 255, 76, 47, 4, 255, 81, 54, 4, 255, 113, 59, 11, 255, 86, 42, 9, 255, 93, 53, 7, 255, 140, 79, 6, 255, 138, 62, 9, 255, 139, 72, 10, 255, 166, 80, 3, 255, 169, 78, 6, 255, 172, 84, 3, 255, 174, 89, 2, 255, 172, 93, 0, 255, 173, 87, 3, 255, 180, 92, 5, 255, 177, 90, 8, 255, 176, 91, 5, 255, 176, 91, 3, 255, 179, 92, 4, 255, 178, 90, 3, 255, 175, 88, 8, 255, 177, 84, 4, 255, 177, 81, 2, 255, 174, 84, 0, 255, 180, 85, 1, 255, 182, 86, 3, 255, 180, 88, 7, 255, 181, 92, 4, 255, 187, 98, 3, 255, 187, 99, 2, 255, 184, 98, 4, 255, 188, 91, 3, 255, 197, 103, 3, 255, 207, 122, 3, 255, 207, 111, 6, 255, 209, 122, 32, 255, 209, 137, 25, 255, 208, 131, 12, 255, 224, 158, 12, 255, 208, 136, 16, 255, 185, 88, 1, 255, 190, 96, 6, 255, 188, 93, 4, 255, 188, 96, 5, 255, 190, 96, 3, 255, 186, 90, 5, 255, 186, 90, 5, 255, 184, 90, 1, 255, 185, 94, 1, 255, 183, 94, 3, 255, 179, 89, 5, 255, 171, 80, 1, 255, 172, 81, 4, 255, 173, 86, 8, 255, 159, 71, 2, 255, 145, 55, 4, 255, 150, 64, 4, 255, 162, 73, 6, 255, 165, 72, 5, 255, 163, 74, 3, 255, 164, 78, 1, 255, 162, 73, 3, 255, 163, 69, 9, 255, 156, 72, 3, 255, 155, 76, 7, 255, 159, 72, 10, 255, 158, 76, 5, 255, 156, 75, 4, 255, 156, 78, 5, 255, 155, 73, 7, 255, 152, 66, 1, 255, 157, 73, 5, 255, 157, 69, 3, 255, 153, 68, 7, 255, 148, 64, 5, 255, 139, 64, 9, 255, 145, 73, 4, 255, 142, 71, 7, 255, 134, 65, 8, 255, 153, 71, 7, 255, 166, 75, 2, 255, 162, 73, 2, 255, 162, 76, 4, 255, 159, 74, 10, 255, 146, 62, 10, 255, 135, 58, 6, 255, 142, 71, 1, 255, 154, 71, 7, 255, 151, 69, 5, 255, 152, 66, 6, 255, 141, 60, 4, 255, 137, 60, 4, 255, 142, 69, 11, 255, 134, 65, 9, 255, 130, 60, 6, 255, 122, 61, 3, 255, 129, 70, 14, 255, 153, 82, 10, 255, 171, 90, 6, 255, 174, 91, 8, 255, 174, 90, 17, 255, 186, 96, 13, 255, 187, 100, 6, 255, 183, 98, 10, 255, 179, 98, 9, 255, 177, 91, 12, 255, 186, 101, 13, 255, 196, 111, 7, 255, 199, 110, 8, 255, 195, 108, 3, 255, 194, 105, 6, 255, 198, 108, 5, 255, 190, 107, 2, 255, 198, 111, 19, 255, 199, 113, 5, 255, 198, 111, 2, 255, 198, 108, 11, 255, 203, 114, 10, 255, 204, 117, 1, 255, 198, 111, 5, 255, 199, 109, 12, 255, 198, 107, 18, 255, 194, 107, 10, 255, 191, 105, 15, 255, 194, 113, 4, 255, 206, 124, 14, 255, 204, 119, 7, 255, 195, 106, 7, 255, 200, 119, 14, 255, 211, 134, 18, 255, 211, 137, 11, 255, 213, 140, 4, 255, 214, 140, 9, 255, 215, 141, 13, 255, 210, 139, 10, 255, 206, 134, 26, 255, 202, 135, 12, 255, 204, 139, 9, 255, 214, 149, 15, 255, 218, 150, 12, 255, 220, 153, 12, 255, 220, 154, 10, 255, 219, 154, 3, 255, 213, 144, 13, 255, 203, 136, 6, 255, 207, 136, 8, 255, 218, 138, 8, 255, 211, 142, 4, 255, 211, 152, 0, 255, 220, 166, 4, 255, 225, 169, 11, 255, 225, 171, 5, 255, 227, 166, 5, 255, 213, 149, 1, 255, 207, 145, 0, 255, 217, 159, 1, 255, 227, 172, 6, 255, 230, 178, 13, 255, 226, 171, 0, 255, 212, 147, 5, 255, 214, 154, 6, 255, 222, 167, 3, 255, 217, 164, 3, 255, 217, 167, 5, 255, 213, 164, 9, 255, 218, 166, 7, 255, 224, 178, 16, 255, 220, 174, 8, 255, 225, 180, 10, 255, 221, 179, 9, 255, 220, 176, 2, 255, 219, 173, 8, 255, 221, 178, 6, 255, 221, 175, 1, 255, 220, 172, 10, 255, 214, 166, 13, 255, 216, 171, 4, 255, 216, 172, 5, 255, 215, 172, 2, 255, 213, 167, 3, 255, 207, 158, 13, 255, 199, 154, 6, 255, 212, 170, 10, 255, 217, 177, 8, 255, 212, 170, 5, 255, 207, 163, 7, 255, 203, 155, 6, 255, 206, 155, 8, 255, 211, 161, 7, 255, 210, 164, 8, 255, 201, 151, 18, 255, 196, 145, 13, 255, 199, 151, 3, 255, 206, 160, 3, 255, 214, 169, 2, 255, 214, 167, 3, 255, 191, 138, 9, 255, 188, 134, 14, 255, 202, 160, 3, 255, 202, 162, 5, 255, 199, 154, 12, 255, 199, 152, 2, 255, 200, 151, 1, 255, 201, 155, 7, 255, 201, 154, 11, 255, 199, 152, 10, 255, 201, 155, 4, 255, 200, 153, 10, 255, 201, 155, 3, 255, 204, 156, 9, 255, 202, 150, 5, 255, 202, 149, 7, 255, 200, 147, 10, 255, 203, 150, 10, 255, 202, 146, 8, 255, 202, 144, 17, 255, 201, 140, 18, 255, 196, 135, 9, 255, 195, 132, 4, 255, 192, 127, 5, 255, 188, 122, 5, 255, 187, 120, 5, 255, 186, 118, 3, 255, 184, 112, 7, 255, 180, 107, 5, 255, 179, 105, 5, 255, 177, 102, 3, 255, 175, 97, 0, 255, 176, 93, 3, 255, 172, 96, 4, 255, 170, 89, 2, 255, 172, 88, 4, 255, 169, 88, 7, 255, 162, 86, 3, 255, 151, 74, 5, 255, 145, 67, 9, 255, 153, 76, 3, 255, 151, 75, 1, 255, 152, 74, 3, 255, 152, 74, 0, 255, 136, 60, 2, 255, 128, 51, 6, 255, 145, 66, 5, 255, 135, 65, 0, 255, 120, 53, 0, 255, 112, 47, 1, 255, 97, 34, 1, 255, 94, 35, 3, 255, 102, 42, 6, 255, 99, 38, 1, 255, 105, 39, 4, 255, 107, 41, 6, 255, 101, 43, 3, 255, 101, 42, 3, 255, 100, 38, 4, 255, 102, 39, 6, 255, 107, 38, 3, 255, 109, 39, 1, 255, 103, 39, 1, 255, 98, 38, 0, 255, 98, 39, 2, 255, 104, 36, 2, 255, 102, 36, 2, 255, 97, 32, 1, 255, 99, 35, 3, 255, 99, 36, 3, 255, 100, 36, 2, 255, 97, 36, 0, 255, 94, 31, 4, 255, 89, 31, 10, 255, 122, 54, 1, 255, 158, 77, 1, 255, 156, 79, 3, 255, 151, 73, 2, 255, 132, 49, 2, 255, 122, 42, 5, 255, 115, 42, 2, 255, 111, 42, 1, 255, 104, 34, 3, 255, 100, 30, 2, 255, 112, 33, 6, 255, 107, 33, 1, 255, 102, 37, 1, 255, 105, 41, 2, 255, 107, 39, 2, 255, 105, 34, 5, 255, 102, 33, 4, 255, 104, 34, 1, 255, 113, 38, 2, 255, 110, 38, 4, 255, 103, 36, 1, 255, 105, 38, 7, 255, 109, 36, 5, 255, 108, 35, 0, 255, 95, 31, 3, 255, 76, 24, 2, 255, 83, 29, 4, 255, 106, 34, 6, 255, 108, 35, 3, 255, 126, 43, 4, 255, 149, 59, 3, 255, 151, 63, 2, 255, 143, 49, 3, 255, 130, 39, 0, 255, 118, 36, 1, 255, 104, 26, 4, 255, 97, 25, 4, 255, 87, 24, 3, 255, 77, 24, 2, 255, 77, 28, 3, 255, 83, 31, 2, 255, 92, 34, 4, 255, 88, 32, 2, 255, 95, 34, 4, 255, 97, 40, 5, 255, 96, 42, 1, 255, 104, 41, 2, 255, 113, 43, 3, 255, 95, 30, 1, 255, 66, 16, 1, 255, 65, 20, 2, 255, 68, 19, 2, 255, 56, 17, 2, 255, 54, 19, 4, 255, 75, 26, 2, 255, 78, 29, 4, 255, 84, 27, 7, 255, 79, 20, 1, 255, 82, 30, 6, 255, 76, 29, 4, 255, 76, 23, 5, 255, 76, 23, 2, 255, 80, 26, 3, 255, 82, 24, 2, 255, 84, 23, 5, 255, 81, 22, 8, 255, 73, 18, 3, 255, 72, 21, 3, 255, 71, 22, 1, 255, 80, 24, 2, 255, 84, 25, 1, 255, 15, 7, 4, 255, 14, 8, 5, 255, 2, 1, 0, 255, 3, 2, 1, 255, 2, 1, 0, 255, 4, 4, 1, 255, 6, 3, 2, 255, 6, 2, 1, 255, 7, 3, 1, 255, 7, 3, 0, 255, 10, 5, 1, 255, 11, 6, 2, 255, 9, 4, 1, 255, 11, 6, 4, 255, 7, 6, 0, 255, 6, 8, 4, 255, 14, 15, 20, 255, 13, 12, 14, 255, 18, 16, 4, 255, 21, 16, 7, 255, 20, 14, 5, 255, 24, 18, 8, 255, 23, 16, 8, 255, 25, 19, 10, 255, 22, 19, 7, 255, 25, 24, 7, 255, 27, 25, 6, 255, 29, 25, 9, 255, 31, 27, 9, 255, 37, 32, 11, 255, 33, 31, 9, 255, 34, 34, 13, 255, 41, 39, 6, 255, 39, 37, 11, 255, 44, 39, 14, 255, 57, 50, 6, 255, 58, 44, 12, 255, 53, 40, 14, 255, 56, 47, 7, 255, 63, 51, 9, 255, 75, 63, 11, 255, 66, 59, 2, 255, 64, 59, 3, 255, 63, 60, 8, 255, 60, 62, 8, 255, 63, 70, 29, 255, 67, 72, 49, 255, 73, 77, 24, 255, 74, 64, 11, 255, 72, 55, 5, 255, 69, 54, 8, 255, 69, 62, 14, 255, 72, 71, 14, 255, 63, 66, 4, 255, 56, 49, 8, 255, 64, 48, 4, 255, 54, 37, 3, 255, 69, 53, 4, 255, 103, 59, 7, 255, 90, 43, 4, 255, 117, 67, 9, 255, 140, 68, 5, 255, 146, 70, 5, 255, 167, 85, 9, 255, 175, 81, 3, 255, 172, 86, 6, 255, 173, 86, 2, 255, 176, 93, 2, 255, 180, 89, 5, 255, 177, 89, 7, 255, 180, 89, 0, 255, 175, 89, 3, 255, 179, 91, 1, 255, 182, 87, 1, 255, 173, 85, 4, 255, 165, 84, 1, 255, 166, 85, 2, 255, 165, 79, 3, 255, 163, 75, 2, 255, 165, 75, 4, 255, 166, 77, 3, 255, 171, 77, 5, 255, 166, 78, 3, 255, 167, 78, 11, 255, 172, 84, 6, 255, 177, 89, 0, 255, 181, 88, 1, 255, 179, 86, 4, 255, 178, 89, 4, 255, 179, 91, 5, 255, 183, 91, 6, 255, 190, 108, 3, 255, 199, 115, 3, 255, 201, 106, 3, 255, 187, 91, 0, 255, 185, 86, 11, 255, 197, 100, 4, 255, 190, 86, 1, 255, 184, 75, 7, 255, 179, 88, 2, 255, 189, 96, 1, 255, 189, 94, 2, 255, 189, 98, 1, 255, 187, 91, 3, 255, 182, 85, 1, 255, 187, 90, 0, 255, 191, 97, 1, 255, 187, 93, 1, 255, 184, 89, 5, 255, 183, 87, 3, 255, 178, 82, 0, 255, 182, 87, 3, 255, 180, 85, 4, 255, 174, 81, 4, 255, 171, 79, 5, 255, 180, 92, 5, 255, 184, 87, 1, 255, 181, 84, 3, 255, 178, 87, 2, 255, 182, 88, 1, 255, 180, 85, 2, 255, 169, 78, 3, 255, 150, 67, 1, 255, 147, 64, 8, 255, 170, 78, 6, 255, 175, 85, 0, 255, 178, 87, 6, 255, 175, 86, 6, 255, 176, 84, 1, 255, 162, 79, 1, 255, 163, 82, 7, 255, 167, 78, 5, 255, 156, 71, 1, 255, 148, 70, 4, 255, 133, 64, 3, 255, 143, 70, 6, 255, 142, 64, 0, 255, 144, 66, 6, 255, 147, 64, 10, 255, 138, 63, 2, 255, 131, 64, 7, 255, 132, 61, 3, 255, 137, 60, 3, 255, 129, 57, 1, 255, 135, 61, 10, 255, 142, 65, 5, 255, 136, 65, 7, 255, 131, 59, 6, 255, 136, 64, 6, 255, 153, 74, 7, 255, 163, 84, 9, 255, 172, 89, 1, 255, 168, 84, 5, 255, 155, 76, 10, 255, 176, 94, 11, 255, 180, 92, 9, 255, 178, 91, 6, 255, 180, 92, 7, 255, 187, 99, 4, 255, 186, 103, 11, 255, 195, 106, 5, 255, 186, 99, 13, 255, 177, 92, 10, 255, 179, 93, 3, 255, 183, 99, 7, 255, 189, 100, 6, 255, 195, 107, 4, 255, 195, 109, 10, 255, 200, 110, 11, 255, 197, 105, 8, 255, 197, 109, 12, 255, 201, 114, 7, 255, 200, 116, 7, 255, 198, 108, 10, 255, 195, 107, 3, 255, 197, 110, 7, 255, 203, 117, 7, 255, 201, 115, 2, 255, 192, 103, 7, 255, 192, 105, 9, 255, 195, 108, 20, 255, 194, 111, 8, 255, 197, 113, 12, 255, 202, 119, 9, 255, 201, 117, 4, 255, 196, 110, 7, 255, 194, 108, 17, 255, 194, 111, 20, 255, 207, 129, 9, 255, 216, 138, 0, 255, 215, 132, 7, 255, 218, 137, 10, 255, 218, 142, 12, 255, 217, 144, 11, 255, 215, 144, 11, 255, 217, 150, 5, 255, 217, 149, 10, 255, 221, 152, 15, 255, 219, 153, 11, 255, 218, 155, 5, 255, 215, 155, 3, 255, 215, 156, 4, 255, 213, 153, 9, 255, 206, 148, 5, 255, 205, 149, 7, 255, 206, 152, 5, 255, 210, 152, 8, 255, 218, 163, 6, 255, 221, 171, 7, 255, 226, 169, 13, 255, 232, 166, 9, 255, 211, 144, 16, 255, 207, 145, 9, 255, 206, 146, 5, 255, 218, 160, 11, 255, 226, 176, 2, 255, 228, 174, 12, 255, 228, 174, 13, 255, 215, 161, 8, 255, 213, 161, 9, 255, 216, 166, 6, 255, 216, 168, 2, 255, 229, 179, 3, 255, 215, 159, 15, 255, 211, 158, 14, 255, 218, 175, 1, 255, 218, 174, 2, 255, 223, 172, 2, 255, 224, 176, 4, 255, 217, 173, 14, 255, 218, 176, 2, 255, 221, 177, 10, 255, 216, 172, 7, 255, 216, 172, 9, 255, 213, 170, 3, 255, 214, 171, 1, 255, 212, 169, 4, 255, 209, 165, 1, 255, 205, 159, 7, 255, 194, 146, 3, 255, 200, 155, 10, 255, 212, 171, 7, 255, 208, 169, 0, 255, 212, 169, 5, 255, 207, 160, 13, 255, 189, 136, 19, 255, 200, 150, 7, 255, 210, 164, 4, 255, 196, 148, 9, 255, 200, 152, 10, 255, 201, 156, 5, 255, 201, 155, 3, 255, 206, 156, 8, 255, 206, 155, 9, 255, 208, 155, 9, 255, 179, 121, 5, 255, 167, 111, 15, 255, 201, 155, 10, 255, 203, 158, 10, 255, 199, 155, 5, 255, 196, 151, 1, 255, 199, 151, 4, 255, 198, 153, 1, 255, 202, 157, 3, 255, 200, 155, 1, 255, 198, 152, 1, 255, 198, 149, 14, 255, 195, 148, 6, 255, 196, 150, 1, 255, 204, 153, 6, 255, 202, 151, 7, 255, 199, 150, 1, 255, 202, 151, 4, 255, 201, 146, 12, 255, 199, 141, 15, 255, 197, 139, 10, 255, 195, 135, 9, 255, 193, 132, 10, 255, 193, 129, 8, 255, 188, 122, 2, 255, 185, 117, 6, 255, 191, 118, 14, 255, 182, 105, 10, 255, 181, 105, 3, 255, 179, 104, 8, 255, 172, 96, 8, 255, 169, 92, 2, 255, 178, 97, 5, 255, 176, 93, 4, 255, 170, 91, 2, 255, 165, 88, 3, 255, 163, 84, 7, 255, 155, 78, 2, 255, 140, 70, 6, 255, 133, 61, 3, 255, 151, 75, 3, 255, 148, 69, 3, 255, 152, 71, 9, 255, 150, 75, 3, 255, 138, 66, 2, 255, 131, 57, 2, 255, 135, 59, 5, 255, 129, 55, 3, 255, 121, 47, 2, 255, 112, 44, 2, 255, 98, 35, 6, 255, 92, 38, 2, 255, 103, 37, 3, 255, 104, 33, 4, 255, 102, 39, 6, 255, 103, 43, 2, 255, 108, 40, 1, 255, 103, 35, 1, 255, 106, 41, 5, 255, 108, 38, 3, 255, 107, 39, 2, 255, 106, 43, 3, 255, 106, 44, 3, 255, 102, 40, 3, 255, 101, 36, 4, 255, 99, 36, 4, 255, 101, 36, 4, 255, 101, 33, 5, 255, 99, 32, 5, 255, 95, 35, 4, 255, 90, 36, 1, 255, 93, 36, 1, 255, 93, 32, 2, 255, 82, 26, 1, 255, 109, 43, 3, 255, 137, 56, 5, 255, 140, 59, 11, 255, 133, 53, 3, 255, 124, 47, 3, 255, 121, 47, 5, 255, 115, 44, 1, 255, 104, 35, 0, 255, 96, 29, 1, 255, 94, 31, 0, 255, 102, 33, 2, 255, 101, 32, 2, 255, 103, 35, 5, 255, 107, 37, 8, 255, 105, 35, 7, 255, 99, 31, 3, 255, 97, 33, 2, 255, 98, 35, 1, 255, 104, 36, 2, 255, 100, 33, 1, 255, 98, 34, 0, 255, 100, 34, 4, 255, 100, 27, 1, 255, 97, 30, 4, 255, 81, 24, 4, 255, 72, 22, 2, 255, 84, 28, 0, 255, 104, 32, 2, 255, 109, 35, 1, 255, 111, 34, 7, 255, 117, 36, 3, 255, 119, 35, 0, 255, 108, 27, 3, 255, 101, 30, 5, 255, 94, 26, 2, 255, 85, 20, 5, 255, 81, 25, 0, 255, 83, 28, 2, 255, 83, 32, 4, 255, 86, 34, 6, 255, 91, 32, 1, 255, 104, 40, 6, 255, 100, 42, 4, 255, 106, 45, 5, 255, 108, 49, 4, 255, 105, 48, 2, 255, 107, 41, 1, 255, 100, 30, 4, 255, 85, 21, 2, 255, 70, 23, 3, 255, 61, 20, 5, 255, 64, 18, 3, 255, 56, 17, 0, 255, 58, 22, 3, 255, 79, 26, 8, 255, 79, 23, 1, 255, 86, 21, 3, 255, 83, 18, 1, 255, 76, 23, 1, 255, 75, 30, 4, 255, 73, 23, 3, 255, 77, 19, 4, 255, 81, 20, 4, 255, 84, 20, 2, 255, 89, 23, 4, 255, 89, 24, 5, 255, 84, 24, 4, 255, 76, 22, 1, 255, 79, 22, 3, 255, 88, 25, 3, 255, 93, 27, 2, 255, 10, 6, 2, 255, 12, 7, 4, 255, 5, 2, 0, 255, 4, 3, 1, 255, 4, 1, 0, 255, 5, 2, 0, 255, 7, 3, 0, 255, 9, 4, 1, 255, 10, 5, 2, 255, 10, 5, 1, 255, 9, 4, 0, 255, 9, 4, 0, 255, 10, 5, 1, 255, 13, 6, 1, 255, 12, 5, 2, 255, 10, 5, 4, 255, 16, 11, 9, 255, 21, 14, 10, 255, 25, 17, 11, 255, 27, 17, 10, 255, 27, 16, 7, 255, 28, 17, 8, 255, 28, 19, 11, 255, 25, 17, 8, 255, 27, 21, 8, 255, 27, 21, 6, 255, 29, 21, 7, 255, 31, 21, 9, 255, 34, 25, 12, 255, 39, 31, 14, 255, 38, 31, 11, 255, 42, 35, 16, 255, 44, 40, 14, 255, 45, 39, 13, 255, 52, 44, 15, 255, 61, 47, 11, 255, 60, 45, 12, 255, 58, 50, 9, 255, 51, 46, 5, 255, 62, 52, 14, 255, 75, 62, 10, 255, 67, 57, 3, 255, 68, 60, 7, 255, 62, 58, 14, 255, 62, 64, 32, 255, 73, 78, 53, 255, 73, 74, 56, 255, 76, 73, 37, 255, 75, 68, 17, 255, 63, 56, 0, 255, 59, 54, 1, 255, 60, 58, 13, 255, 86, 69, 24, 255, 74, 67, 4, 255, 85, 58, 11, 255, 116, 62, 8, 255, 101, 62, 5, 255, 142, 73, 9, 255, 146, 69, 3, 255, 155, 82, 5, 255, 166, 82, 1, 255, 165, 81, 3, 255, 174, 84, 3, 255, 183, 90, 3, 255, 175, 89, 2, 255, 178, 86, 6, 255, 176, 87, 6, 255, 168, 88, 5, 255, 171, 84, 6, 255, 164, 82, 4, 255, 169, 81, 5, 255, 171, 76, 6, 255, 159, 82, 1, 255, 155, 78, 7, 255, 152, 75, 5, 255, 156, 74, 11, 255, 155, 79, 3, 255, 147, 73, 5, 255, 145, 68, 2, 255, 156, 75, 0, 255, 152, 74, 8, 255, 152, 81, 7, 255, 159, 79, 3, 255, 149, 71, 2, 255, 142, 70, 2, 255, 132, 64, 3, 255, 129, 58, 2, 255, 130, 57, 3, 255, 129, 61, 8, 255, 134, 64, 8, 255, 147, 67, 4, 255, 154, 80, 4, 255, 162, 82, 5, 255, 162, 75, 5, 255, 157, 78, 0, 255, 177, 90, 4, 255, 184, 93, 9, 255, 185, 89, 5, 255, 171, 81, 10, 255, 174, 90, 4, 255, 182, 92, 1, 255, 184, 93, 1, 255, 185, 92, 3, 255, 177, 83, 1, 255, 184, 88, 1, 255, 192, 98, 4, 255, 191, 96, 2, 255, 180, 84, 1, 255, 184, 87, 9, 255, 185, 89, 1, 255, 183, 88, 2, 255, 190, 96, 5, 255, 192, 98, 2, 255, 188, 93, 5, 255, 177, 81, 8, 255, 187, 86, 9, 255, 187, 93, 3, 255, 192, 100, 5, 255, 196, 98, 4, 255, 191, 92, 0, 255, 188, 94, 4, 255, 187, 95, 9, 255, 178, 89, 5, 255, 179, 86, 5, 255, 187, 87, 1, 255, 185, 91, 5, 255, 188, 94, 2, 255, 190, 94, 2, 255, 186, 91, 3, 255, 184, 88, 6, 255, 174, 79, 6, 255, 157, 68, 2, 255, 158, 73, 8, 255, 158, 73, 4, 255, 169, 77, 7, 255, 162, 70, 11, 255, 133, 50, 10, 255, 138, 60, 7, 255, 142, 63, 4, 255, 137, 60, 4, 255, 135, 62, 4, 255, 133, 60, 5, 255, 142, 65, 7, 255, 133, 63, 7, 255, 144, 69, 7, 255, 147, 64, 0, 255, 141, 66, 10, 255, 159, 81, 15, 255, 177, 95, 9, 255, 183, 97, 0, 255, 184, 98, 4, 255, 186, 95, 2, 255, 185, 94, 5, 255, 181, 98, 9, 255, 192, 100, 4, 255, 189, 94, 1, 255, 185, 97, 3, 255, 185, 99, 12, 255, 196, 110, 6, 255, 194, 106, 7, 255, 196, 102, 6, 255, 189, 102, 8, 255, 191, 107, 4, 255, 201, 112, 6, 255, 190, 103, 7, 255, 197, 105, 12, 255, 196, 110, 3, 255, 192, 102, 7, 255, 194, 105, 9, 255, 204, 114, 4, 255, 206, 111, 7, 255, 206, 114, 8, 255, 208, 114, 6, 255, 199, 107, 10, 255, 198, 108, 9, 255, 206, 119, 6, 255, 206, 120, 5, 255, 201, 113, 14, 255, 206, 118, 20, 255, 202, 120, 9, 255, 201, 118, 16, 255, 199, 116, 10, 255, 190, 107, 3, 255, 200, 119, 5, 255, 202, 120, 11, 255, 203, 123, 9, 255, 195, 116, 6, 255, 186, 110, 7, 255, 203, 128, 15, 255, 215, 134, 10, 255, 213, 132, 8, 255, 214, 138, 6, 255, 211, 142, 3, 255, 211, 144, 3, 255, 211, 146, 9, 255, 215, 150, 13, 255, 216, 152, 14, 255, 217, 156, 1, 255, 215, 155, 3, 255, 215, 157, 4, 255, 217, 160, 1, 255, 217, 163, 4, 255, 216, 162, 7, 255, 216, 163, 6, 255, 219, 169, 7, 255, 218, 171, 5, 255, 219, 160, 12, 255, 218, 158, 5, 255, 221, 169, 1, 255, 222, 172, 5, 255, 218, 162, 9, 255, 200, 140, 17, 255, 203, 146, 15, 255, 212, 158, 11, 255, 217, 167, 6, 255, 223, 174, 3, 255, 226, 173, 8, 255, 225, 176, 8, 255, 222, 176, 6, 255, 222, 176, 7, 255, 223, 176, 8, 255, 223, 176, 7, 255, 224, 174, 4, 255, 208, 153, 5, 255, 207, 166, 6, 255, 223, 175, 0, 255, 222, 174, 7, 255, 217, 171, 9, 255, 219, 171, 4, 255, 218, 173, 18, 255, 215, 175, 4, 255, 216, 173, 4, 255, 213, 168, 3, 255, 212, 168, 3, 255, 209, 163, 10, 255, 208, 162, 6, 255, 209, 166, 10, 255, 208, 164, 12, 255, 194, 148, 3, 255, 187, 140, 4, 255, 198, 155, 7, 255, 214, 172, 5, 255, 210, 165, 5, 255, 210, 167, 2, 255, 206, 162, 4, 255, 200, 153, 8, 255, 198, 153, 2, 255, 206, 163, 0, 255, 201, 156, 6, 255, 207, 163, 11, 255, 202, 159, 6, 255, 196, 150, 2, 255, 199, 150, 5, 255, 202, 151, 14, 255, 211, 161, 13, 255, 197, 146, 11, 255, 153, 97, 6, 255, 195, 147, 12, 255, 204, 157, 10, 255, 199, 154, 6, 255, 196, 151, 5, 255, 196, 151, 6, 255, 198, 154, 0, 255, 201, 155, 7, 255, 199, 151, 8, 255, 198, 152, 1, 255, 197, 149, 4, 255, 194, 147, 5, 255, 199, 153, 4, 255, 203, 152, 7, 255, 202, 153, 3, 255, 201, 151, 3, 255, 201, 151, 3, 255, 202, 149, 3, 255, 201, 143, 5, 255, 197, 139, 4, 255, 197, 139, 5, 255, 194, 135, 6, 255, 191, 127, 9, 255, 190, 123, 10, 255, 189, 118, 4, 255, 184, 112, 2, 255, 176, 98, 8, 255, 179, 100, 3, 255, 174, 97, 3, 255, 171, 94, 6, 255, 172, 96, 4, 255, 172, 95, 2, 255, 166, 93, 2, 255, 167, 94, 1, 255, 165, 93, 2, 255, 165, 95, 1, 255, 169, 96, 0, 255, 173, 90, 4, 255, 164, 84, 4, 255, 153, 76, 0, 255, 149, 68, 1, 255, 152, 73, 7, 255, 138, 64, 2, 255, 127, 59, 5, 255, 121, 56, 4, 255, 124, 51, 4, 255, 115, 42, 8, 255, 105, 35, 4, 255, 99, 32, 1, 255, 101, 39, 6, 255, 100, 43, 4, 255, 104, 43, 3, 255, 96, 35, 2, 255, 101, 39, 7, 255, 102, 41, 2, 255, 99, 40, 3, 255, 100, 37, 6, 255, 109, 37, 6, 255, 107, 39, 2, 255, 101, 41, 2, 255, 101, 42, 3, 255, 106, 42, 4, 255, 106, 39, 4, 255, 100, 34, 3, 255, 99, 38, 7, 255, 98, 36, 2, 255, 100, 34, 3, 255, 100, 34, 5, 255, 98, 34, 6, 255, 93, 31, 2, 255, 89, 28, 0, 255, 93, 33, 6, 255, 85, 30, 2, 255, 91, 31, 4, 255, 106, 37, 9, 255, 107, 30, 3, 255, 110, 33, 5, 255, 110, 38, 2, 255, 109, 34, 1, 255, 108, 30, 4, 255, 108, 32, 6, 255, 105, 35, 9, 255, 100, 34, 3, 255, 95, 33, 0, 255, 97, 33, 0, 255, 102, 33, 0, 255, 100, 32, 0, 255, 99, 34, 2, 255, 97, 33, 1, 255, 98, 34, 2, 255, 99, 35, 4, 255, 101, 37, 5, 255, 100, 35, 6, 255, 103, 38, 4, 255, 102, 36, 5, 255, 98, 32, 3, 255, 85, 27, 1, 255, 74, 21, 3, 255, 75, 25, 5, 255, 86, 30, 4, 255, 95, 29, 2, 255, 102, 32, 2, 255, 102, 30, 4, 255, 95, 29, 1, 255, 93, 30, 1, 255, 85, 24, 4, 255, 85, 30, 6, 255, 80, 29, 1, 255, 77, 31, 2, 255, 86, 34, 2, 255, 90, 35, 3, 255, 95, 34, 3, 255, 98, 35, 4, 255, 98, 36, 1, 255, 107, 44, 5, 255, 107, 43, 1, 255, 110, 45, 1, 255, 110, 44, 3, 255, 104, 38, 2, 255, 90, 28, 0, 255, 74, 22, 5, 255, 71, 17, 5, 255, 71, 20, 4, 255, 53, 19, 1, 255, 57, 17, 2, 255, 67, 17, 4, 255, 75, 23, 4, 255, 76, 26, 3, 255, 75, 26, 3, 255, 75, 21, 0, 255, 77, 21, 0, 255, 76, 23, 0, 255, 81, 29, 3, 255, 83, 25, 4, 255, 82, 18, 4, 255, 84, 23, 4, 255, 86, 28, 2, 255, 88, 29, 0, 255, 84, 25, 1, 255, 75, 23, 1, 255, 77, 27, 4, 255, 89, 27, 4, 255, 97, 33, 3, 255, 101, 35, 1, 255, 13, 6, 3, 255, 9, 4, 2, 255, 4, 0, 0, 255, 7, 4, 3, 255, 10, 6, 3, 255, 8, 3, 0, 255, 10, 5, 2, 255, 10, 5, 1, 255, 10, 5, 1, 255, 14, 9, 5, 255, 10, 5, 1, 255, 8, 3, 0, 255, 13, 8, 5, 255, 11, 7, 4, 255, 9, 6, 1, 255, 17, 13, 2, 255, 17, 12, 0, 255, 19, 13, 5, 255, 24, 17, 15, 255, 26, 19, 11, 255, 25, 19, 8, 255, 24, 21, 8, 255, 21, 19, 7, 255, 23, 21, 10, 255, 22, 23, 9, 255, 29, 26, 8, 255, 38, 28, 8, 255, 36, 27, 9, 255, 38, 31, 13, 255, 38, 31, 8, 255, 41, 33, 9, 255, 42, 34, 11, 255, 41, 37, 18, 255, 54, 43, 10, 255, 61, 44, 10, 255, 57, 40, 10, 255, 59, 49, 11, 255, 59, 51, 14, 255, 47, 45, 16, 255, 67, 62, 16, 255, 72, 60, 2, 255, 73, 63, 6, 255, 70, 57, 8, 255, 67, 57, 18, 255, 74, 72, 60, 255, 77, 85, 59, 255, 72, 80, 50, 255, 69, 74, 56, 255, 66, 70, 19, 255, 72, 62, 2, 255, 81, 54, 1, 255, 100, 63, 16, 255, 134, 82, 22, 255, 137, 89, 1, 255, 161, 96, 9, 255, 171, 90, 2, 255, 175, 89, 8, 255, 177, 85, 7, 255, 178, 91, 5, 255, 176, 91, 0, 255, 173, 88, 3, 255, 169, 86, 4, 255, 163, 81, 8, 255, 155, 89, 5, 255, 153, 84, 3, 255, 142, 73, 3, 255, 142, 72, 5, 255, 135, 66, 6, 255, 128, 66, 5, 255, 134, 65, 7, 255, 124, 65, 1, 255, 128, 69, 8, 255, 109, 56, 1, 255, 99, 44, 3, 255, 99, 52, 7, 255, 115, 51, 7, 255, 109, 49, 3, 255, 95, 47, 4, 255, 99, 43, 5, 255, 105, 53, 2, 255, 116, 54, 6, 255, 106, 51, 2, 255, 106, 52, 1, 255, 99, 47, 5, 255, 77, 33, 2, 255, 62, 27, 4, 255, 69, 33, 8, 255, 78, 36, 5, 255, 81, 34, 2, 255, 81, 39, 5, 255, 77, 40, 2, 255, 83, 36, 1, 255, 87, 38, 5, 255, 95, 46, 3, 255, 105, 51, 8, 255, 111, 50, 5, 255, 111, 54, 7, 255, 125, 67, 5, 255, 153, 81, 3, 255, 168, 85, 2, 255, 174, 89, 3, 255, 176, 89, 4, 255, 176, 89, 1, 255, 180, 91, 1, 255, 178, 85, 2, 255, 183, 87, 4, 255, 180, 83, 2, 255, 183, 87, 2, 255, 185, 90, 3, 255, 187, 92, 6, 255, 185, 90, 4, 255, 188, 92, 2, 255, 195, 100, 4, 255, 188, 93, 1, 255, 183, 88, 3, 255, 189, 95, 6, 255, 193, 100, 0, 255, 200, 105, 3, 255, 196, 100, 5, 255, 191, 100, 4, 255, 193, 103, 6, 255, 196, 95, 7, 255, 193, 96, 5, 255, 193, 104, 1, 255, 198, 99, 6, 255, 200, 103, 6, 255, 185, 89, 2, 255, 173, 80, 5, 255, 183, 91, 4, 255, 175, 78, 5, 255, 152, 58, 0, 255, 151, 66, 4, 255, 162, 77, 6, 255, 165, 76, 4, 255, 159, 65, 9, 255, 137, 55, 4, 255, 137, 61, 8, 255, 151, 71, 4, 255, 154, 72, 6, 255, 157, 76, 8, 255, 148, 68, 1, 255, 145, 67, 3, 255, 158, 72, 6, 255, 168, 81, 8, 255, 165, 80, 3, 255, 168, 78, 12, 255, 180, 94, 10, 255, 192, 99, 4, 255, 188, 98, 5, 255, 188, 101, 1, 255, 192, 97, 6, 255, 187, 100, 10, 255, 185, 101, 8, 255, 193, 98, 9, 255, 188, 96, 2, 255, 191, 100, 10, 255, 193, 101, 4, 255, 194, 106, 7, 255, 193, 106, 5, 255, 196, 107, 1, 255, 184, 94, 2, 255, 161, 76, 10, 255, 174, 85, 14, 255, 179, 89, 6, 255, 192, 104, 11, 255, 199, 114, 7, 255, 202, 112, 5, 255, 195, 106, 6, 255, 193, 104, 5, 255, 201, 112, 11, 255, 202, 113, 7, 255, 203, 117, 2, 255, 206, 116, 14, 255, 191, 106, 9, 255, 192, 107, 7, 255, 206, 125, 7, 255, 201, 123, 6, 255, 204, 124, 17, 255, 208, 130, 10, 255, 209, 127, 7, 255, 202, 117, 11, 255, 193, 107, 7, 255, 195, 111, 8, 255, 206, 126, 13, 255, 207, 134, 6, 255, 203, 131, 5, 255, 196, 122, 6, 255, 200, 130, 15, 255, 206, 135, 15, 255, 202, 123, 19, 255, 195, 120, 11, 255, 205, 138, 10, 255, 211, 144, 7, 255, 212, 145, 8, 255, 213, 147, 17, 255, 211, 147, 6, 255, 215, 152, 8, 255, 214, 152, 6, 255, 215, 157, 3, 255, 216, 158, 18, 255, 217, 161, 7, 255, 218, 162, 7, 255, 218, 163, 11, 255, 219, 164, 5, 255, 223, 169, 2, 255, 226, 168, 6, 255, 212, 156, 5, 255, 208, 152, 5, 255, 222, 168, 8, 255, 220, 165, 3, 255, 220, 163, 17, 255, 209, 158, 15, 255, 211, 164, 11, 255, 213, 167, 4, 255, 216, 172, 3, 255, 220, 174, 8, 255, 222, 173, 6, 255, 223, 174, 1, 255, 223, 171, 3, 255, 223, 175, 3, 255, 222, 175, 3, 255, 222, 174, 14, 255, 209, 156, 14, 255, 205, 151, 2, 255, 216, 171, 6, 255, 216, 173, 6, 255, 216, 172, 5, 255, 215, 172, 9, 255, 212, 172, 6, 255, 211, 168, 3, 255, 213, 169, 5, 255, 212, 169, 6, 255, 208, 164, 0, 255, 205, 160, 3, 255, 206, 161, 10, 255, 205, 162, 5, 255, 204, 162, 6, 255, 203, 162, 7, 255, 205, 161, 4, 255, 183, 132, 18, 255, 195, 149, 10, 255, 210, 168, 0, 255, 208, 163, 2, 255, 210, 166, 1, 255, 202, 157, 3, 255, 195, 146, 5, 255, 196, 148, 6, 255, 201, 156, 5, 255, 203, 160, 5, 255, 205, 161, 8, 255, 200, 154, 8, 255, 195, 149, 1, 255, 190, 142, 6, 255, 201, 155, 6, 255, 209, 170, 1, 255, 212, 173, 9, 255, 179, 127, 16, 255, 179, 126, 2, 255, 196, 145, 4, 255, 194, 146, 4, 255, 197, 154, 3, 255, 194, 149, 11, 255, 194, 150, 2, 255, 198, 151, 7, 255, 199, 151, 6, 255, 199, 149, 1, 255, 198, 149, 5, 255, 195, 147, 14, 255, 199, 153, 2, 255, 202, 151, 3, 255, 203, 152, 9, 255, 202, 151, 14, 255, 200, 146, 10, 255, 203, 146, 10, 255, 201, 143, 3, 255, 198, 139, 6, 255, 193, 135, 5, 255, 192, 133, 5, 255, 189, 126, 3, 255, 189, 122, 7, 255, 184, 111, 3, 255, 180, 107, 3, 255, 175, 102, 8, 255, 175, 97, 4, 255, 174, 95, 3, 255, 176, 100, 6, 255, 178, 102, 5, 255, 174, 96, 2, 255, 174, 98, 1, 255, 176, 100, 2, 255, 173, 94, 5, 255, 171, 94, 4, 255, 166, 90, 3, 255, 156, 81, 0, 255, 153, 80, 4, 255, 152, 78, 7, 255, 154, 76, 6, 255, 144, 65, 1, 255, 138, 63, 1, 255, 137, 69, 2, 255, 135, 67, 10, 255, 137, 64, 3, 255, 110, 45, 3, 255, 94, 34, 4, 255, 89, 31, 2, 255, 104, 44, 1, 255, 106, 44, 4, 255, 108, 46, 1, 255, 103, 38, 2, 255, 100, 33, 3, 255, 102, 37, 3, 255, 97, 34, 4, 255, 88, 31, 6, 255, 89, 33, 2, 255, 98, 36, 3, 255, 99, 36, 4, 255, 97, 35, 2, 255, 96, 36, 1, 255, 100, 37, 3, 255, 103, 34, 3, 255, 103, 34, 3, 255, 102, 35, 1, 255, 101, 37, 1, 255, 98, 35, 3, 255, 96, 31, 4, 255, 96, 31, 4, 255, 95, 29, 4, 255, 88, 29, 4, 255, 86, 28, 1, 255, 78, 24, 1, 255, 90, 37, 7, 255, 105, 39, 2, 255, 102, 34, 1, 255, 106, 37, 4, 255, 113, 39, 3, 255, 119, 39, 4, 255, 122, 44, 3, 255, 120, 46, 3, 255, 107, 35, 2, 255, 97, 30, 4, 255, 90, 30, 1, 255, 94, 35, 3, 255, 99, 35, 2, 255, 102, 34, 2, 255, 97, 33, 2, 255, 101, 36, 4, 255, 99, 31, 4, 255, 95, 31, 1, 255, 94, 29, 2, 255, 104, 36, 2, 255, 100, 34, 3, 255, 94, 34, 3, 255, 81, 27, 1, 255, 74, 23, 3, 255, 72, 21, 2, 255, 82, 26, 3, 255, 83, 24, 5, 255, 89, 26, 4, 255, 90, 25, 0, 255, 86, 29, 6, 255, 89, 28, 5, 255, 88, 28, 1, 255, 88, 30, 2, 255, 93, 26, 1, 255, 95, 31, 6, 255, 98, 36, 4, 255, 95, 32, 0, 255, 100, 37, 2, 255, 104, 41, 4, 255, 103, 39, 1, 255, 108, 44, 3, 255, 115, 41, 2, 255, 109, 41, 7, 255, 95, 32, 4, 255, 90, 25, 2, 255, 77, 22, 1, 255, 68, 21, 3, 255, 66, 17, 4, 255, 64, 15, 2, 255, 57, 16, 5, 255, 58, 15, 5, 255, 75, 22, 4, 255, 84, 26, 2, 255, 79, 22, 0, 255, 76, 20, 2, 255, 74, 19, 2, 255, 79, 24, 4, 255, 80, 23, 1, 255, 85, 25, 1, 255, 86, 22, 2, 255, 91, 26, 4, 255, 89, 26, 1, 255, 89, 27, 2, 255, 92, 26, 6, 255, 90, 20, 3, 255, 90, 22, 4, 255, 92, 27, 2, 255, 104, 31, 3, 255, 109, 36, 1, 255, 113, 41, 2, 255, 16, 8, 5, 255, 8, 5, 2, 255, 1, 1, 0, 255, 5, 2, 0, 255, 12, 7, 2, 255, 8, 2, 0, 255, 11, 3, 1, 255, 10, 4, 1, 255, 10, 6, 2, 255, 10, 7, 2, 255, 13, 8, 3, 255, 10, 4, 1, 255, 16, 9, 4, 255, 8, 6, 1, 255, 11, 9, 1, 255, 15, 12, 4, 255, 14, 9, 4, 255, 13, 8, 6, 255, 25, 19, 20, 255, 26, 18, 18, 255, 24, 18, 10, 255, 21, 22, 6, 255, 25, 21, 9, 255, 29, 21, 12, 255, 29, 26, 10, 255, 35, 27, 8, 255, 41, 27, 11, 255, 40, 29, 10, 255, 37, 34, 6, 255, 41, 37, 11, 255, 39, 34, 11, 255, 45, 44, 12, 255, 47, 41, 15, 255, 53, 44, 10, 255, 51, 44, 15, 255, 56, 43, 24, 255, 56, 51, 11, 255, 52, 51, 13, 255, 55, 50, 7, 255, 77, 65, 10, 255, 67, 59, 5, 255, 63, 52, 7, 255, 66, 57, 8, 255, 70, 72, 34, 255, 78, 83, 70, 255, 70, 84, 60, 255, 74, 78, 54, 255, 97, 85, 56, 255, 109, 83, 33, 255, 133, 83, 21, 255, 144, 78, 12, 255, 164, 91, 16, 255, 175, 97, 6, 255, 183, 103, 14, 255, 174, 98, 12, 255, 166, 90, 6, 255, 162, 87, 5, 255, 152, 81, 13, 255, 140, 72, 4, 255, 130, 64, 3, 255, 122, 63, 6, 255, 108, 60, 5, 255, 99, 54, 6, 255, 83, 47, 2, 255, 90, 46, 8, 255, 83, 39, 4, 255, 75, 36, 3, 255, 64, 34, 2, 255, 67, 37, 4, 255, 75, 37, 5, 255, 67, 36, 4, 255, 74, 39, 10, 255, 71, 30, 6, 255, 62, 29, 0, 255, 58, 36, 0, 255, 60, 30, 0, 255, 56, 28, 2, 255, 55, 34, 2, 255, 61, 27, 3, 255, 64, 27, 2, 255, 65, 29, 2, 255, 66, 30, 1, 255, 69, 33, 1, 255, 61, 29, 6, 255, 59, 29, 1, 255, 68, 34, 4, 255, 70, 36, 6, 255, 67, 31, 3, 255, 74, 37, 4, 255, 74, 41, 5, 255, 73, 41, 4, 255, 81, 39, 0, 255, 74, 35, 1, 255, 81, 37, 2, 255, 90, 40, 2, 255, 85, 38, 1, 255, 74, 35, 5, 255, 78, 45, 2, 255, 116, 61, 2, 255, 144, 65, 1, 255, 147, 73, 5, 255, 162, 80, 4, 255, 173, 83, 1, 255, 178, 89, 5, 255, 177, 88, 8, 255, 177, 87, 2, 255, 184, 90, 1, 255, 180, 90, 1, 255, 175, 84, 11, 255, 176, 85, 11, 255, 183, 91, 0, 255, 185, 89, 0, 255, 190, 93, 3, 255, 189, 95, 5, 255, 184, 93, 0, 255, 190, 99, 0, 255, 195, 102, 1, 255, 200, 104, 3, 255, 197, 106, 1, 255, 195, 109, 2, 255, 195, 101, 2, 255, 195, 97, 2, 255, 197, 102, 3, 255, 194, 97, 1, 255, 182, 80, 3, 255, 178, 77, 6, 255, 166, 67, 6, 255, 179, 89, 7, 255, 177, 79, 3, 255, 157, 64, 4, 255, 160, 69, 6, 255, 165, 73, 2, 255, 172, 82, 3, 255, 176, 89, 3, 255, 172, 86, 1, 255, 162, 78, 1, 255, 167, 84, 1, 255, 182, 94, 4, 255, 191, 99, 6, 255, 185, 98, 5, 255, 161, 77, 2, 255, 169, 86, 5, 255, 186, 102, 10, 255, 191, 103, 6, 255, 186, 98, 2, 255, 190, 102, 8, 255, 191, 102, 2, 255, 189, 96, 6, 255, 185, 93, 9, 255, 178, 89, 4, 255, 189, 101, 9, 255, 193, 105, 10, 255, 191, 103, 5, 255, 190, 100, 2, 255, 193, 105, 7, 255, 191, 102, 8, 255, 189, 101, 4, 255, 196, 108, 4, 255, 192, 104, 1, 255, 195, 108, 3, 255, 192, 105, 3, 255, 183, 100, 8, 255, 188, 100, 12, 255, 198, 108, 14, 255, 201, 116, 11, 255, 199, 112, 4, 255, 198, 107, 6, 255, 196, 106, 9, 255, 200, 111, 10, 255, 203, 114, 10, 255, 202, 115, 5, 255, 206, 119, 4, 255, 205, 118, 9, 255, 207, 120, 2, 255, 205, 121, 10, 255, 204, 126, 6, 255, 205, 130, 6, 255, 205, 128, 18, 255, 204, 128, 9, 255, 196, 119, 7, 255, 188, 109, 10, 255, 187, 108, 7, 255, 203, 128, 14, 255, 202, 129, 12, 255, 203, 130, 16, 255, 203, 129, 15, 255, 199, 127, 4, 255, 205, 135, 9, 255, 206, 138, 10, 255, 204, 138, 8, 255, 195, 128, 18, 255, 198, 136, 8, 255, 207, 147, 5, 255, 208, 146, 4, 255, 210, 154, 2, 255, 212, 152, 8, 255, 210, 151, 12, 255, 209, 151, 7, 255, 212, 153, 3, 255, 217, 157, 15, 255, 216, 157, 8, 255, 214, 160, 4, 255, 215, 160, 6, 255, 215, 161, 3, 255, 218, 161, 3, 255, 218, 164, 3, 255, 212, 157, 7, 255, 209, 152, 14, 255, 216, 162, 7, 255, 217, 165, 5, 255, 205, 150, 7, 255, 208, 155, 16, 255, 217, 168, 11, 255, 219, 170, 1, 255, 218, 171, 1, 255, 220, 170, 5, 255, 218, 170, 7, 255, 218, 170, 9, 255, 220, 173, 6, 255, 218, 171, 0, 255, 219, 170, 3, 255, 218, 170, 13, 255, 199, 150, 16, 255, 195, 148, 16, 255, 211, 167, 5, 255, 211, 170, 3, 255, 211, 168, 6, 255, 208, 163, 3, 255, 208, 163, 7, 255, 208, 164, 9, 255, 204, 164, 6, 255, 204, 165, 5, 255, 200, 159, 2, 255, 200, 157, 5, 255, 201, 158, 0, 255, 199, 156, 2, 255, 190, 145, 2, 255, 200, 154, 6, 255, 206, 164, 1, 255, 191, 143, 10, 255, 194, 148, 10, 255, 202, 158, 6, 255, 201, 156, 6, 255, 204, 158, 9, 255, 201, 156, 1, 255, 192, 144, 13, 255, 195, 148, 13, 255, 200, 155, 4, 255, 207, 162, 4, 255, 209, 164, 0, 255, 202, 159, 3, 255, 196, 152, 5, 255, 199, 155, 3, 255, 201, 157, 0, 255, 207, 164, 6, 255, 209, 167, 5, 255, 203, 161, 6, 255, 176, 128, 3, 255, 187, 138, 6, 255, 186, 137, 6, 255, 191, 142, 9, 255, 193, 145, 12, 255, 194, 146, 5, 255, 200, 149, 9, 255, 198, 147, 5, 255, 195, 146, 6, 255, 201, 154, 17, 255, 199, 152, 12, 255, 199, 153, 2, 255, 202, 156, 6, 255, 202, 151, 8, 255, 204, 152, 4, 255, 203, 148, 5, 255, 202, 144, 15, 255, 200, 138, 9, 255, 198, 134, 12, 255, 197, 132, 8, 255, 189, 128, 3, 255, 188, 126, 3, 255, 188, 113, 6, 255, 168, 89, 2, 255, 169, 94, 9, 255, 176, 101, 19, 255, 178, 99, 7, 255, 179, 97, 9, 255, 179, 99, 1, 255, 174, 96, 1, 255, 171, 91, 9, 255, 169, 91, 7, 255, 165, 86, 6, 255, 161, 82, 5, 255, 159, 81, 2, 255, 160, 84, 2, 255, 153, 80, 2, 255, 153, 82, 2, 255, 160, 86, 5, 255, 156, 80, 3, 255, 153, 73, 1, 255, 149, 70, 2, 255, 143, 67, 1, 255, 138, 63, 3, 255, 138, 62, 2, 255, 126, 57, 2, 255, 115, 45, 2, 255, 107, 42, 7, 255, 107, 40, 7, 255, 98, 39, 1, 255, 102, 41, 2, 255, 106, 33, 3, 255, 103, 38, 4, 255, 99, 35, 0, 255, 100, 32, 7, 255, 88, 29, 2, 255, 95, 37, 2, 255, 101, 36, 1, 255, 103, 36, 2, 255, 98, 36, 3, 255, 94, 36, 2, 255, 97, 35, 2, 255, 100, 32, 1, 255, 99, 30, 2, 255, 98, 32, 4, 255, 95, 33, 5, 255, 93, 33, 3, 255, 93, 32, 3, 255, 95, 32, 1, 255, 98, 36, 6, 255, 95, 31, 4, 255, 92, 31, 2, 255, 84, 30, 4, 255, 75, 25, 2, 255, 92, 30, 4, 255, 108, 33, 5, 255, 111, 36, 5, 255, 105, 44, 5, 255, 114, 44, 2, 255, 125, 40, 1, 255, 113, 39, 8, 255, 109, 37, 5, 255, 103, 32, 4, 255, 96, 31, 3, 255, 89, 28, 2, 255, 91, 30, 4, 255, 95, 33, 3, 255, 93, 33, 1, 255, 89, 34, 1, 255, 93, 32, 2, 255, 93, 25, 2, 255, 92, 28, 1, 255, 100, 32, 3, 255, 92, 31, 2, 255, 84, 29, 4, 255, 77, 24, 3, 255, 74, 20, 5, 255, 73, 26, 5, 255, 80, 26, 1, 255, 83, 22, 2, 255, 83, 28, 8, 255, 82, 26, 3, 255, 92, 31, 5, 255, 95, 32, 3, 255, 89, 30, 0, 255, 88, 33, 3, 255, 98, 35, 3, 255, 103, 39, 4, 255, 97, 41, 3, 255, 100, 38, 2, 255, 103, 44, 3, 255, 109, 44, 2, 255, 111, 46, 0, 255, 121, 50, 1, 255, 131, 50, 5, 255, 113, 34, 3, 255, 90, 26, 2, 255, 76, 24, 6, 255, 75, 21, 1, 255, 75, 21, 3, 255, 69, 20, 6, 255, 64, 18, 1, 255, 58, 16, 5, 255, 62, 20, 2, 255, 74, 25, 5, 255, 73, 20, 4, 255, 69, 20, 2, 255, 75, 24, 2, 255, 84, 28, 5, 255, 88, 27, 3, 255, 87, 26, 1, 255, 87, 28, 4, 255, 80, 24, 0, 255, 91, 25, 0, 255, 95, 26, 1, 255, 91, 27, 0, 255, 89, 27, 3, 255, 87, 24, 8, 255, 90, 23, 6, 255, 98, 29, 1, 255, 102, 28, 2, 255, 100, 25, 1, 255, 107, 29, 2, 255, 11, 6, 0, 255, 7, 4, 2, 255, 3, 3, 1, 255, 4, 0, 0, 255, 6, 2, 0, 255, 8, 4, 0, 255, 10, 5, 1, 255, 11, 6, 2, 255, 10, 6, 1, 255, 9, 7, 1, 255, 12, 8, 3, 255, 14, 8, 2, 255, 16, 8, 2, 255, 19, 8, 2, 255, 19, 11, 1, 255, 16, 9, 0, 255, 13, 9, 3, 255, 14, 12, 6, 255, 14, 12, 6, 255, 22, 19, 13, 255, 24, 21, 9, 255, 26, 19, 2, 255, 30, 28, 9, 255, 22, 21, 7, 255, 29, 22, 10, 255, 34, 27, 14, 255, 38, 31, 13, 255, 38, 28, 10, 255, 35, 35, 3, 255, 42, 40, 11, 255, 42, 38, 7, 255, 46, 43, 17, 255, 47, 43, 21, 255, 45, 42, 17, 255, 50, 47, 15, 255, 51, 46, 16, 255, 54, 47, 9, 255, 55, 51, 6, 255, 61, 54, 14, 255, 82, 69, 4, 255, 65, 56, 4, 255, 58, 55, 1, 255, 60, 56, 32, 255, 75, 75, 71, 255, 84, 84, 74, 255, 109, 96, 63, 255, 129, 99, 67, 255, 155, 108, 69, 255, 169, 105, 54, 255, 172, 105, 41, 255, 175, 104, 32, 255, 171, 96, 19, 255, 156, 88, 11, 255, 138, 83, 13, 255, 116, 71, 10, 255, 109, 69, 2, 255, 106, 68, 6, 255, 84, 51, 7, 255, 68, 38, 2, 255, 66, 35, 2, 255, 63, 36, 2, 255, 59, 31, 0, 255, 60, 28, 1, 255, 69, 27, 6, 255, 55, 25, 1, 255, 54, 27, 3, 255, 55, 29, 6, 255, 54, 29, 4, 255, 58, 32, 5, 255, 60, 28, 0, 255, 60, 28, 0, 255, 57, 33, 2, 255, 59, 33, 4, 255, 65, 34, 5, 255, 58, 33, 1, 255, 55, 33, 2, 255, 62, 34, 6, 255, 66, 38, 4, 255, 64, 35, 4, 255, 67, 33, 5, 255, 68, 32, 4, 255, 71, 33, 5, 255, 71, 35, 6, 255, 63, 33, 2, 255, 66, 34, 4, 255, 72, 38, 7, 255, 72, 39, 3, 255, 73, 39, 1, 255, 74, 38, 2, 255, 75, 34, 3, 255, 78, 35, 1, 255, 82, 38, 2, 255, 84, 41, 4, 255, 82, 41, 5, 255, 80, 40, 2, 255, 79, 43, 1, 255, 88, 39, 2, 255, 77, 39, 2, 255, 75, 41, 2, 255, 81, 44, 4, 255, 97, 47, 5, 255, 122, 66, 5, 255, 149, 75, 10, 255, 159, 74, 8, 255, 161, 81, 6, 255, 175, 88, 6, 255, 178, 92, 4, 255, 184, 90, 0, 255, 183, 90, 2, 255, 176, 86, 5, 255, 178, 87, 4, 255, 178, 83, 5, 255, 176, 81, 1, 255, 183, 89, 6, 255, 181, 90, 3, 255, 188, 98, 2, 255, 197, 101, 2, 255, 198, 102, 4, 255, 196, 106, 2, 255, 199, 104, 4, 255, 192, 100, 3, 255, 193, 106, 0, 255, 200, 105, 5, 255, 194, 92, 8, 255, 165, 64, 10, 255, 158, 68, 11, 255, 184, 99, 1, 255, 195, 101, 1, 255, 182, 87, 7, 255, 166, 76, 2, 255, 179, 91, 9, 255, 186, 94, 6, 255, 189, 95, 1, 255, 187, 92, 8, 255, 177, 85, 4, 255, 187, 97, 11, 255, 187, 101, 6, 255, 191, 102, 1, 255, 194, 99, 4, 255, 186, 94, 4, 255, 184, 95, 10, 255, 188, 103, 4, 255, 184, 95, 12, 255, 185, 97, 2, 255, 191, 104, 0, 255, 190, 101, 6, 255, 189, 101, 5, 255, 187, 98, 0, 255, 186, 96, 2, 255, 186, 97, 6, 255, 196, 107, 11, 255, 195, 109, 2, 255, 194, 106, 1, 255, 194, 103, 15, 255, 186, 96, 14, 255, 189, 101, 8, 255, 195, 107, 12, 255, 193, 105, 4, 255, 197, 109, 5, 255, 200, 110, 9, 255, 200, 112, 10, 255, 198, 116, 3, 255, 200, 114, 7, 255, 202, 114, 7, 255, 199, 114, 9, 255, 198, 111, 5, 255, 202, 114, 3, 255, 206, 118, 11, 255, 204, 116, 4, 255, 203, 117, 5, 255, 205, 119, 12, 255, 204, 118, 4, 255, 201, 116, 6, 255, 205, 120, 11, 255, 206, 125, 7, 255, 204, 124, 18, 255, 191, 113, 15, 255, 191, 115, 3, 255, 201, 126, 13, 255, 202, 128, 10, 255, 195, 120, 6, 255, 202, 128, 13, 255, 200, 129, 5, 255, 202, 130, 8, 255, 202, 130, 12, 255, 205, 135, 17, 255, 204, 135, 18, 255, 204, 136, 13, 255, 207, 139, 14, 255, 207, 142, 9, 255, 207, 141, 16, 255, 205, 140, 7, 255, 205, 146, 4, 255, 204, 143, 1, 255, 206, 143, 14, 255, 202, 138, 12, 255, 206, 145, 9, 255, 210, 153, 8, 255, 206, 146, 3, 255, 209, 152, 7, 255, 209, 155, 10, 255, 211, 156, 11, 255, 213, 158, 6, 255, 211, 159, 3, 255, 208, 158, 13, 255, 211, 160, 8, 255, 214, 163, 3, 255, 212, 158, 14, 255, 209, 159, 4, 255, 212, 167, 5, 255, 203, 150, 11, 255, 204, 159, 2, 255, 212, 166, 15, 255, 211, 166, 7, 255, 212, 167, 9, 255, 212, 167, 8, 255, 212, 167, 4, 255, 212, 167, 7, 255, 211, 166, 4, 255, 210, 166, 6, 255, 210, 166, 9, 255, 207, 166, 7, 255, 201, 162, 12, 255, 200, 163, 13, 255, 194, 152, 13, 255, 204, 162, 8, 255, 212, 165, 6, 255, 206, 153, 6, 255, 190, 137, 5, 255, 206, 162, 14, 255, 202, 159, 6, 255, 202, 158, 2, 255, 197, 155, 4, 255, 194, 153, 9, 255, 194, 151, 7, 255, 194, 146, 8, 255, 186, 135, 8, 255, 187, 137, 6, 255, 195, 150, 1, 255, 194, 148, 3, 255, 197, 151, 0, 255, 198, 153, 1, 255, 197, 149, 3, 255, 196, 150, 7, 255, 202, 159, 3, 255, 198, 156, 5, 255, 193, 151, 4, 255, 195, 153, 7, 255, 202, 159, 3, 255, 208, 165, 0, 255, 205, 162, 3, 255, 200, 159, 3, 255, 203, 160, 7, 255, 198, 152, 6, 255, 204, 160, 8, 255, 208, 168, 3, 255, 208, 169, 8, 255, 177, 130, 5, 255, 172, 122, 8, 255, 185, 138, 7, 255, 184, 136, 7, 255, 192, 147, 3, 255, 190, 143, 4, 255, 193, 145, 6, 255, 196, 148, 3, 255, 199, 153, 0, 255, 200, 154, 0, 255, 199, 151, 3, 255, 201, 151, 6, 255, 200, 153, 7, 255, 207, 156, 10, 255, 206, 154, 6, 255, 199, 148, 3, 255, 197, 143, 6, 255, 197, 140, 7, 255, 190, 130, 2, 255, 187, 123, 8, 255, 188, 121, 8, 255, 187, 113, 10, 255, 171, 93, 9, 255, 162, 87, 7, 255, 162, 93, 6, 255, 155, 85, 0, 255, 165, 92, 3, 255, 169, 89, 7, 255, 172, 90, 2, 255, 172, 91, 5, 255, 169, 89, 7, 255, 167, 90, 7, 255, 166, 89, 6, 255, 166, 89, 6, 255, 164, 89, 4, 255, 163, 90, 4, 255, 159, 84, 0, 255, 158, 83, 3, 255, 159, 82, 6, 255, 158, 80, 4, 255, 158, 79, 5, 255, 152, 73, 3, 255, 143, 64, 3, 255, 135, 59, 3, 255, 135, 59, 2, 255, 135, 57, 0, 255, 130, 58, 4, 255, 118, 48, 2, 255, 101, 38, 0, 255, 110, 47, 6, 255, 110, 47, 6, 255, 92, 40, 1, 255, 106, 44, 5, 255, 111, 41, 2, 255, 105, 40, 4, 255, 109, 42, 6, 255, 110, 37, 2, 255, 109, 36, 4, 255, 104, 38, 2, 255, 100, 36, 1, 255, 106, 41, 4, 255, 101, 38, 3, 255, 99, 37, 1, 255, 95, 29, 3, 255, 94, 32, 3, 255, 93, 33, 1, 255, 94, 36, 2, 255, 95, 32, 0, 255, 94, 30, 0, 255, 91, 28, 0, 255, 92, 36, 4, 255, 87, 30, 0, 255, 90, 29, 4, 255, 80, 27, 5, 255, 75, 24, 1, 255, 97, 32, 5, 255, 113, 37, 3, 255, 110, 35, 3, 255, 113, 34, 3, 255, 118, 39, 0, 255, 99, 36, 0, 255, 108, 39, 4, 255, 110, 40, 6, 255, 99, 33, 5, 255, 99, 33, 3, 255, 99, 32, 0, 255, 98, 34, 4, 255, 89, 29, 2, 255, 88, 30, 2, 255, 89, 31, 1, 255, 86, 33, 5, 255, 87, 34, 3, 255, 90, 30, 0, 255, 86, 28, 1, 255, 78, 26, 1, 255, 70, 22, 2, 255, 61, 18, 3, 255, 71, 23, 4, 255, 80, 24, 1, 255, 85, 27, 1, 255, 88, 28, 2, 255, 91, 30, 1, 255, 95, 31, 2, 255, 99, 33, 7, 255, 88, 28, 2, 255, 86, 29, 3, 255, 95, 35, 1, 255, 104, 40, 0, 255, 108, 46, 1, 255, 118, 52, 2, 255, 123, 55, 3, 255, 124, 55, 5, 255, 127, 54, 4, 255, 135, 57, 3, 255, 127, 53, 7, 255, 101, 25, 1, 255, 93, 27, 4, 255, 85, 29, 6, 255, 75, 20, 1, 255, 71, 20, 4, 255, 58, 17, 2, 255, 54, 15, 1, 255, 64, 17, 1, 255, 68, 19, 0, 255, 67, 19, 2, 255, 69, 17, 3, 255, 79, 21, 2, 255, 82, 26, 5, 255, 84, 25, 3, 255, 87, 24, 2, 255, 90, 27, 2, 255, 90, 29, 4, 255, 88, 28, 3, 255, 93, 26, 3, 255, 92, 24, 3, 255, 86, 20, 0, 255, 90, 25, 1, 255, 94, 31, 5, 255, 86, 25, 3, 255, 82, 23, 5, 255, 84, 24, 6, 255, 85, 23, 6, 255, 89, 24, 6, 255, 14, 9, 3, 255, 4, 3, 0, 255, 1, 1, 0, 255, 5, 1, 0, 255, 8, 4, 1, 255, 7, 3, 0, 255, 9, 5, 1, 255, 11, 7, 3, 255, 11, 8, 3, 255, 10, 7, 2, 255, 10, 5, 1, 255, 16, 9, 3, 255, 17, 9, 2, 255, 23, 12, 5, 255, 18, 11, 0, 255, 20, 15, 2, 255, 17, 12, 3, 255, 17, 10, 1, 255, 23, 16, 6, 255, 31, 26, 16, 255, 24, 24, 13, 255, 28, 21, 14, 255, 23, 22, 9, 255, 31, 29, 11, 255, 34, 30, 7, 255, 29, 29, 11, 255, 33, 33, 13, 255, 38, 35, 11, 255, 39, 38, 11, 255, 48, 44, 10, 255, 51, 42, 12, 255, 43, 40, 15, 255, 45, 46, 22, 255, 43, 48, 11, 255, 56, 50, 14, 255, 54, 54, 4, 255, 55, 49, 15, 255, 62, 45, 7, 255, 58, 51, 12, 255, 78, 65, 7, 255, 70, 52, 3, 255, 73, 60, 12, 255, 105, 83, 58, 255, 130, 99, 73, 255, 145, 111, 78, 255, 176, 120, 78, 255, 174, 120, 74, 255, 165, 115, 62, 255, 149, 107, 51, 255, 131, 101, 45, 255, 106, 85, 38, 255, 86, 63, 21, 255, 68, 55, 11, 255, 55, 39, 3, 255, 64, 36, 7, 255, 81, 51, 4, 255, 72, 43, 2, 255, 64, 37, 3, 255, 62, 31, 6, 255, 62, 28, 4, 255, 59, 33, 4, 255, 58, 31, 3, 255, 59, 31, 1, 255, 71, 27, 3, 255, 66, 31, 2, 255, 59, 32, 2, 255, 59, 28, 2, 255, 64, 31, 4, 255, 62, 32, 4, 255, 70, 33, 5, 255, 67, 31, 1, 255, 70, 36, 4, 255, 69, 30, 4, 255, 71, 33, 5, 255, 66, 32, 3, 255, 66, 30, 3, 255, 70, 29, 3, 255, 68, 33, 1, 255, 62, 33, 1, 255, 60, 32, 0, 255, 66, 32, 2, 255, 69, 31, 4, 255, 66, 30, 4, 255, 64, 32, 6, 255, 64, 33, 5, 255, 64, 33, 3, 255, 65, 35, 5, 255, 68, 35, 6, 255, 72, 35, 5, 255, 79, 39, 7, 255, 75, 38, 5, 255, 70, 35, 1, 255, 79, 40, 1, 255, 78, 39, 4, 255, 71, 37, 3, 255, 76, 40, 2, 255, 79, 36, 3, 255, 79, 41, 8, 255, 74, 38, 4, 255, 76, 38, 5, 255, 77, 36, 1, 255, 91, 47, 5, 255, 99, 54, 5, 255, 96, 49, 1, 255, 117, 59, 1, 255, 124, 61, 5, 255, 140, 72, 6, 255, 155, 71, 9, 255, 169, 79, 6, 255, 174, 87, 3, 255, 177, 83, 7, 255, 177, 84, 9, 255, 163, 76, 1, 255, 169, 81, 7, 255, 184, 92, 6, 255, 186, 98, 1, 255, 192, 101, 3, 255, 194, 99, 4, 255, 193, 97, 5, 255, 175, 81, 1, 255, 176, 85, 3, 255, 191, 92, 7, 255, 188, 82, 3, 255, 164, 69, 6, 255, 168, 78, 5, 255, 194, 99, 7, 255, 191, 93, 6, 255, 182, 86, 3, 255, 177, 78, 3, 255, 185, 93, 2, 255, 188, 99, 0, 255, 189, 96, 4, 255, 193, 96, 1, 255, 188, 96, 1, 255, 186, 94, 3, 255, 190, 99, 5, 255, 192, 103, 2, 255, 191, 98, 1, 255, 194, 96, 5, 255, 190, 96, 1, 255, 196, 105, 5, 255, 192, 99, 6, 255, 190, 101, 7, 255, 193, 105, 3, 255, 192, 105, 2, 255, 191, 99, 10, 255, 191, 99, 11, 255, 194, 102, 3, 255, 193, 103, 6, 255, 194, 105, 4, 255, 193, 106, 1, 255, 194, 106, 7, 255, 195, 106, 10, 255, 197, 108, 10, 255, 188, 99, 7, 255, 187, 98, 6, 255, 196, 109, 6, 255, 198, 111, 3, 255, 200, 112, 9, 255, 198, 108, 11, 255, 200, 111, 8, 255, 200, 114, 5, 255, 194, 106, 9, 255, 190, 102, 1, 255, 195, 109, 10, 255, 200, 113, 14, 255, 200, 112, 5, 255, 200, 110, 13, 255, 200, 112, 10, 255, 202, 116, 10, 255, 204, 119, 14, 255, 204, 121, 11, 255, 194, 113, 9, 255, 192, 112, 9, 255, 193, 113, 4, 255, 191, 111, 9, 255, 189, 110, 12, 255, 198, 124, 8, 255, 199, 125, 23, 255, 201, 125, 16, 255, 192, 117, 5, 255, 201, 129, 15, 255, 198, 128, 5, 255, 200, 132, 8, 255, 202, 133, 8, 255, 198, 131, 0, 255, 199, 134, 9, 255, 202, 135, 13, 255, 203, 135, 11, 255, 202, 134, 10, 255, 197, 128, 7, 255, 202, 133, 10, 255, 206, 145, 6, 255, 206, 147, 9, 255, 202, 133, 11, 255, 196, 129, 13, 255, 202, 140, 4, 255, 203, 142, 6, 255, 194, 137, 11, 255, 199, 149, 1, 255, 206, 152, 5, 255, 205, 153, 6, 255, 204, 152, 10, 255, 203, 154, 8, 255, 205, 156, 10, 255, 207, 156, 5, 255, 209, 156, 5, 255, 199, 142, 9, 255, 198, 143, 10, 255, 205, 155, 9, 255, 210, 160, 5, 255, 206, 159, 2, 255, 205, 161, 1, 255, 202, 157, 5, 255, 204, 162, 4, 255, 206, 163, 4, 255, 209, 161, 8, 255, 210, 163, 8, 255, 204, 160, 4, 255, 207, 161, 12, 255, 204, 159, 9, 255, 204, 159, 1, 255, 207, 159, 8, 255, 200, 149, 5, 255, 183, 137, 11, 255, 201, 159, 8, 255, 205, 162, 5, 255, 191, 140, 9, 255, 182, 127, 16, 255, 190, 141, 12, 255, 191, 142, 9, 255, 195, 147, 12, 255, 190, 142, 12, 255, 185, 137, 18, 255, 183, 134, 14, 255, 182, 132, 2, 255, 182, 130, 6, 255, 181, 130, 4, 255, 187, 139, 3, 255, 190, 142, 11, 255, 193, 145, 6, 255, 194, 145, 7, 255, 197, 149, 4, 255, 199, 151, 2, 255, 203, 154, 5, 255, 195, 146, 6, 255, 188, 139, 10, 255, 199, 154, 1, 255, 202, 157, 3, 255, 204, 158, 2, 255, 205, 162, 3, 255, 201, 161, 2, 255, 202, 160, 7, 255, 196, 150, 4, 255, 203, 159, 7, 255, 210, 171, 5, 255, 209, 170, 0, 255, 202, 160, 5, 255, 172, 121, 13, 255, 180, 131, 7, 255, 186, 139, 5, 255, 190, 145, 5, 255, 189, 141, 7, 255, 190, 142, 6, 255, 197, 148, 6, 255, 199, 154, 1, 255, 198, 152, 4, 255, 200, 151, 5, 255, 203, 152, 9, 255, 201, 152, 13, 255, 204, 152, 8, 255, 200, 149, 6, 255, 202, 151, 7, 255, 204, 152, 7, 255, 200, 145, 8, 255, 192, 131, 2, 255, 189, 127, 9, 255, 191, 119, 7, 255, 189, 108, 7, 255, 170, 94, 8, 255, 158, 89, 7, 255, 157, 90, 8, 255, 148, 81, 3, 255, 151, 79, 4, 255, 158, 83, 5, 255, 161, 84, 3, 255, 166, 86, 6, 255, 168, 90, 4, 255, 168, 93, 8, 255, 167, 92, 3, 255, 164, 90, 1, 255, 163, 88, 3, 255, 164, 90, 6, 255, 163, 89, 3, 255, 166, 90, 1, 255, 161, 85, 1, 255, 156, 78, 3, 255, 156, 78, 6, 255, 153, 75, 2, 255, 150, 72, 1, 255, 146, 70, 1, 255, 144, 68, 3, 255, 140, 63, 3, 255, 133, 58, 5, 255, 131, 52, 5, 255, 118, 50, 2, 255, 116, 52, 2, 255, 112, 43, 7, 255, 96, 39, 3, 255, 104, 39, 4, 255, 109, 38, 2, 255, 105, 41, 3, 255, 107, 41, 2, 255, 108, 40, 2, 255, 109, 42, 6, 255, 100, 39, 2, 255, 102, 39, 2, 255, 109, 40, 5, 255, 104, 36, 5, 255, 97, 33, 2, 255, 101, 35, 1, 255, 97, 33, 4, 255, 88, 30, 4, 255, 86, 33, 8, 255, 81, 28, 4, 255, 81, 29, 3, 255, 79, 28, 2, 255, 72, 29, 1, 255, 78, 32, 3, 255, 87, 29, 5, 255, 78, 23, 3, 255, 76, 27, 6, 255, 83, 28, 4, 255, 110, 37, 5, 255, 108, 32, 2, 255, 108, 33, 5, 255, 116, 39, 3, 255, 118, 44, 2, 255, 114, 32, 2, 255, 111, 38, 6, 255, 107, 38, 3, 255, 108, 39, 4, 255, 106, 36, 0, 255, 110, 42, 7, 255, 95, 30, 1, 255, 91, 25, 0, 255, 90, 33, 2, 255, 85, 34, 3, 255, 88, 30, 1, 255, 87, 29, 1, 255, 77, 23, 0, 255, 72, 24, 3, 255, 68, 21, 5, 255, 58, 22, 3, 255, 69, 21, 1, 255, 77, 23, 2, 255, 84, 27, 4, 255, 96, 31, 0, 255, 102, 39, 0, 255, 105, 40, 4, 255, 102, 36, 5, 255, 91, 27, 2, 255, 89, 27, 3, 255, 98, 34, 2, 255, 112, 42, 3, 255, 127, 52, 3, 255, 122, 54, 1, 255, 126, 53, 0, 255, 133, 57, 3, 255, 141, 56, 10, 255, 130, 49, 4, 255, 105, 36, 0, 255, 95, 26, 4, 255, 87, 25, 5, 255, 77, 21, 0, 255, 69, 17, 2, 255, 62, 18, 4, 255, 54, 17, 2, 255, 55, 16, 3, 255, 66, 16, 1, 255, 74, 20, 0, 255, 79, 25, 3, 255, 79, 24, 5, 255, 85, 26, 7, 255, 83, 27, 4, 255, 85, 26, 5, 255, 85, 24, 3, 255, 82, 24, 1, 255, 82, 24, 1, 255, 86, 26, 1, 255, 89, 28, 5, 255, 85, 24, 3, 255, 88, 20, 2, 255, 96, 28, 4, 255, 105, 39, 2, 255, 103, 38, 2, 255, 90, 27, 3, 255, 91, 26, 3, 255, 88, 22, 2, 255, 92, 26, 4, 255, 14, 9, 3, 255, 6, 2, 0, 255, 5, 1, 1, 255, 9, 5, 1, 255, 11, 5, 2, 255, 8, 3, 0, 255, 9, 5, 2, 255, 9, 6, 1, 255, 10, 7, 3, 255, 11, 7, 3, 255, 11, 6, 3, 255, 14, 9, 3, 255, 15, 9, 3, 255, 15, 10, 2, 255, 16, 11, 1, 255, 19, 15, 3, 255, 23, 18, 7, 255, 23, 14, 4, 255, 28, 18, 7, 255, 29, 23, 10, 255, 30, 24, 13, 255, 29, 27, 15, 255, 31, 26, 12, 255, 36, 30, 13, 255, 35, 31, 16, 255, 30, 29, 16, 255, 32, 38, 12, 255, 44, 40, 10, 255, 45, 42, 17, 255, 40, 39, 22, 255, 50, 42, 12, 255, 51, 48, 10, 255, 49, 48, 10, 255, 58, 47, 3, 255, 57, 44, 16, 255, 53, 53, 12, 255, 52, 54, 9, 255, 52, 47, 3, 255, 65, 50, 4, 255, 102, 64, 3, 255, 118, 70, 10, 255, 156, 96, 40, 255, 166, 119, 71, 255, 173, 121, 67, 255, 164, 121, 72, 255, 141, 112, 79, 255, 115, 96, 60, 255, 97, 84, 59, 255, 79, 77, 54, 255, 72, 68, 49, 255, 53, 55, 34, 255, 56, 57, 17, 255, 56, 60, 11, 255, 57, 49, 2, 255, 75, 41, 8, 255, 71, 36, 2, 255, 63, 37, 5, 255, 62, 41, 6, 255, 57, 35, 4, 255, 62, 33, 4, 255, 58, 34, 5, 255, 45, 32, 2, 255, 51, 37, 3, 255, 53, 34, 3, 255, 59, 28, 2, 255, 58, 26, 2, 255, 59, 29, 3, 255, 58, 28, 2, 255, 65, 32, 7, 255, 65, 30, 6, 255, 64, 34, 2, 255, 72, 34, 3, 255, 67, 26, 0, 255, 62, 29, 2, 255, 62, 30, 2, 255, 67, 30, 3, 255, 64, 27, 0, 255, 64, 30, 3, 255, 64, 34, 5, 255, 60, 34, 3, 255, 62, 34, 4, 255, 61, 31, 1, 255, 67, 33, 5, 255, 62, 30, 3, 255, 65, 34, 1, 255, 66, 37, 0, 255, 66, 37, 4, 255, 66, 34, 7, 255, 68, 33, 2, 255, 73, 35, 1, 255, 73, 38, 5, 255, 72, 41, 6, 255, 78, 38, 0, 255, 78, 35, 3, 255, 77, 37, 8, 255, 78, 35, 2, 255, 69, 39, 4, 255, 75, 37, 3, 255, 74, 40, 3, 255, 75, 42, 4, 255, 79, 39, 2, 255, 80, 40, 1, 255, 73, 41, 4, 255, 72, 42, 3, 255, 84, 40, 5, 255, 77, 42, 2, 255, 81, 42, 6, 255, 93, 48, 9, 255, 107, 50, 8, 255, 129, 65, 1, 255, 139, 69, 4, 255, 151, 79, 3, 255, 153, 77, 2, 255, 159, 77, 2, 255, 178, 90, 1, 255, 188, 100, 1, 255, 191, 99, 5, 255, 186, 88, 0, 255, 179, 80, 11, 255, 173, 84, 14, 255, 179, 88, 2, 255, 182, 81, 3, 255, 175, 80, 0, 255, 159, 68, 10, 255, 177, 88, 9, 255, 189, 97, 1, 255, 169, 73, 5, 255, 159, 70, 3, 255, 168, 70, 3, 255, 186, 91, 11, 255, 190, 97, 2, 255, 190, 96, 3, 255, 190, 94, 4, 255, 187, 96, 0, 255, 191, 100, 10, 255, 191, 99, 7, 255, 192, 102, 1, 255, 192, 99, 1, 255, 192, 96, 5, 255, 193, 100, 7, 255, 193, 100, 1, 255, 196, 100, 7, 255, 195, 102, 3, 255, 196, 106, 9, 255, 187, 97, 4, 255, 185, 94, 1, 255, 190, 99, 6, 255, 194, 104, 5, 255, 197, 107, 6, 255, 192, 104, 4, 255, 190, 102, 3, 255, 190, 103, 3, 255, 188, 99, 6, 255, 192, 102, 7, 255, 198, 112, 2, 255, 198, 113, 4, 255, 199, 113, 7, 255, 199, 113, 7, 255, 197, 111, 3, 255, 201, 114, 7, 255, 203, 115, 4, 255, 204, 117, 1, 255, 194, 108, 1, 255, 186, 99, 4, 255, 194, 106, 16, 255, 197, 112, 12, 255, 197, 113, 4, 255, 192, 105, 5, 255, 193, 106, 8, 255, 198, 113, 12, 255, 197, 114, 12, 255, 196, 116, 14, 255, 187, 106, 15, 255, 185, 106, 10, 255, 191, 114, 3, 255, 192, 114, 4, 255, 194, 116, 11, 255, 198, 122, 19, 255, 196, 122, 18, 255, 194, 121, 10, 255, 189, 116, 7, 255, 198, 127, 14, 255, 197, 129, 13, 255, 194, 125, 14, 255, 198, 128, 16, 255, 196, 128, 4, 255, 196, 129, 0, 255, 199, 131, 3, 255, 194, 124, 6, 255, 192, 122, 13, 255, 187, 121, 5, 255, 190, 121, 13, 255, 193, 129, 16, 255, 194, 133, 17, 255, 197, 128, 4, 255, 189, 123, 14, 255, 194, 130, 15, 255, 189, 126, 7, 255, 182, 129, 21, 255, 193, 144, 11, 255, 200, 145, 8, 255, 200, 147, 0, 255, 196, 147, 11, 255, 198, 147, 16, 255, 200, 149, 4, 255, 202, 153, 8, 255, 191, 137, 11, 255, 186, 130, 8, 255, 195, 144, 11, 255, 193, 145, 5, 255, 197, 147, 4, 255, 197, 148, 12, 255, 200, 154, 11, 255, 198, 154, 4, 255, 198, 156, 3, 255, 196, 150, 7, 255, 196, 146, 15, 255, 203, 153, 11, 255, 203, 153, 8, 255, 197, 149, 10, 255, 194, 150, 5, 255, 196, 153, 3, 255, 199, 153, 6, 255, 194, 145, 8, 255, 192, 145, 2, 255, 189, 144, 4, 255, 180, 139, 6, 255, 176, 134, 9, 255, 179, 132, 17, 255, 165, 115, 3, 255, 174, 124, 10, 255, 176, 126, 15, 255, 177, 124, 4, 255, 183, 128, 9, 255, 186, 134, 9, 255, 183, 134, 2, 255, 182, 134, 9, 255, 180, 132, 7, 255, 184, 136, 6, 255, 187, 140, 8, 255, 191, 145, 3, 255, 190, 141, 5, 255, 194, 146, 3, 255, 199, 151, 4, 255, 195, 149, 4, 255, 193, 147, 6, 255, 195, 150, 3, 255, 201, 159, 5, 255, 200, 159, 3, 255, 196, 153, 5, 255, 199, 155, 3, 255, 199, 158, 2, 255, 202, 161, 4, 255, 204, 160, 5, 255, 202, 159, 1, 255, 209, 169, 7, 255, 207, 164, 1, 255, 209, 167, 1, 255, 197, 151, 3, 255, 186, 135, 10, 255, 179, 127, 11, 255, 187, 138, 8, 255, 188, 139, 6, 255, 189, 137, 4, 255, 195, 142, 9, 255, 198, 149, 6, 255, 198, 150, 12, 255, 200, 154, 9, 255, 200, 152, 2, 255, 204, 154, 6, 255, 205, 152, 2, 255, 202, 148, 2, 255, 202, 148, 3, 255, 205, 149, 5, 255, 198, 137, 5, 255, 199, 131, 11, 255, 193, 129, 9, 255, 185, 114, 13, 255, 170, 92, 9, 255, 156, 86, 6, 255, 155, 86, 4, 255, 163, 92, 6, 255, 159, 93, 5, 255, 160, 91, 7, 255, 167, 98, 2, 255, 173, 103, 5, 255, 171, 100, 5, 255, 169, 99, 2, 255, 173, 97, 12, 255, 169, 95, 4, 255, 165, 92, 0, 255, 163, 89, 3, 255, 164, 90, 7, 255, 164, 89, 2, 255, 164, 87, 0, 255, 160, 83, 0, 255, 157, 81, 1, 255, 158, 82, 2, 255, 157, 80, 2, 255, 155, 77, 2, 255, 152, 72, 2, 255, 148, 69, 3, 255, 142, 68, 2, 255, 144, 66, 4, 255, 140, 58, 5, 255, 127, 48, 2, 255, 113, 48, 4, 255, 114, 44, 5, 255, 104, 37, 1, 255, 107, 42, 5, 255, 110, 39, 2, 255, 108, 43, 2, 255, 100, 40, 0, 255, 101, 37, 1, 255, 105, 39, 5, 255, 102, 38, 3, 255, 96, 36, 2, 255, 89, 32, 2, 255, 85, 31, 2, 255, 82, 27, 3, 255, 79, 22, 6, 255, 78, 26, 7, 255, 72, 26, 4, 255, 72, 28, 4, 255, 72, 26, 3, 255, 75, 29, 7, 255, 76, 27, 4, 255, 75, 26, 1, 255, 81, 35, 3, 255, 82, 34, 2, 255, 84, 27, 0, 255, 85, 29, 3, 255, 79, 27, 2, 255, 96, 27, 7, 255, 105, 35, 4, 255, 109, 40, 7, 255, 114, 38, 4, 255, 117, 42, 3, 255, 108, 33, 4, 255, 109, 33, 2, 255, 109, 38, 1, 255, 103, 36, 3, 255, 99, 31, 1, 255, 109, 38, 2, 255, 112, 38, 2, 255, 108, 36, 6, 255, 94, 34, 3, 255, 90, 31, 1, 255, 92, 27, 5, 255, 77, 27, 2, 255, 68, 22, 1, 255, 67, 20, 3, 255, 65, 21, 2, 255, 71, 25, 5, 255, 72, 26, 1, 255, 85, 31, 6, 255, 94, 31, 7, 255, 102, 38, 5, 255, 101, 34, 2, 255, 101, 34, 3, 255, 106, 38, 4, 255, 107, 40, 4, 255, 113, 47, 5, 255, 123, 54, 7, 255, 130, 56, 4, 255, 131, 53, 2, 255, 124, 53, 2, 255, 136, 60, 6, 255, 133, 59, 2, 255, 132, 52, 6, 255, 113, 37, 4, 255, 94, 29, 1, 255, 86, 28, 3, 255, 72, 19, 2, 255, 65, 16, 3, 255, 65, 20, 4, 255, 59, 17, 0, 255, 60, 18, 3, 255, 65, 18, 5, 255, 75, 21, 5, 255, 82, 24, 4, 255, 82, 25, 1, 255, 80, 27, 2, 255, 79, 26, 6, 255, 85, 25, 3, 255, 87, 24, 3, 255, 86, 22, 2, 255, 86, 23, 3, 255, 86, 23, 1, 255, 89, 23, 0, 255, 90, 28, 2, 255, 88, 29, 1, 255, 87, 25, 2, 255, 89, 25, 3, 255, 99, 31, 0, 255, 109, 37, 0, 255, 108, 35, 4, 255, 99, 33, 3, 255, 86, 24, 0, 255, 84, 24, 1, 255, 12, 7, 3, 255, 7, 2, 0, 255, 6, 2, 2, 255, 9, 4, 1, 255, 10, 3, 0, 255, 10, 5, 1, 255, 13, 9, 5, 255, 9, 6, 1, 255, 9, 6, 1, 255, 12, 8, 4, 255, 14, 9, 4, 255, 12, 7, 1, 255, 14, 8, 3, 255, 19, 10, 6, 255, 18, 12, 4, 255, 18, 13, 2, 255, 19, 17, 5, 255, 18, 17, 4, 255, 16, 17, 2, 255, 19, 20, 3, 255, 37, 26, 14, 255, 34, 25, 16, 255, 34, 28, 16, 255, 31, 32, 14, 255, 34, 33, 14, 255, 47, 38, 14, 255, 38, 43, 6, 255, 41, 40, 21, 255, 40, 39, 20, 255, 41, 42, 14, 255, 56, 48, 11, 255, 48, 51, 12, 255, 47, 52, 8, 255, 51, 52, 9, 255, 45, 47, 9, 255, 53, 44, 11, 255, 67, 46, 6, 255, 107, 65, 7, 255, 145, 76, 14, 255, 159, 95, 11, 255, 167, 107, 18, 255, 162, 123, 57, 255, 137, 115, 63, 255, 107, 95, 68, 255, 86, 84, 61, 255, 74, 82, 72, 255, 67, 73, 65, 255, 61, 67, 59, 255, 69, 65, 57, 255, 65, 64, 45, 255, 62, 65, 42, 255, 66, 61, 26, 255, 66, 60, 21, 255, 68, 58, 3, 255, 65, 39, 2, 255, 63, 35, 7, 255, 55, 35, 4, 255, 56, 39, 9, 255, 49, 36, 1, 255, 59, 37, 5, 255, 62, 34, 5, 255, 52, 28, 4, 255, 55, 26, 5, 255, 51, 24, 3, 255, 51, 30, 3, 255, 56, 30, 4, 255, 58, 34, 3, 255, 58, 31, 0, 255, 65, 28, 0, 255, 68, 34, 0, 255, 67, 31, 2, 255, 66, 32, 3, 255, 62, 33, 1, 255, 64, 31, 3, 255, 60, 29, 2, 255, 58, 32, 2, 255, 59, 33, 3, 255, 61, 30, 5, 255, 60, 30, 4, 255, 59, 31, 3, 255, 60, 35, 5, 255, 60, 32, 2, 255, 62, 32, 3, 255, 62, 33, 2, 255, 61, 32, 2, 255, 61, 30, 1, 255, 62, 33, 2, 255, 66, 36, 2, 255, 71, 37, 5, 255, 72, 37, 5, 255, 67, 35, 2, 255, 66, 38, 1, 255, 73, 41, 1, 255, 75, 39, 4, 255, 71, 38, 3, 255, 70, 38, 0, 255, 75, 41, 2, 255, 77, 36, 0, 255, 75, 38, 2, 255, 71, 42, 4, 255, 77, 40, 2, 255, 76, 43, 6, 255, 71, 41, 7, 255, 77, 45, 1, 255, 79, 45, 0, 255, 75, 42, 0, 255, 68, 39, 5, 255, 74, 44, 2, 255, 77, 44, 0, 255, 79, 38, 2, 255, 79, 44, 6, 255, 90, 48, 1, 255, 111, 52, 6, 255, 120, 52, 6, 255, 119, 52, 10, 255, 139, 66, 5, 255, 165, 77, 8, 255, 177, 86, 6, 255, 165, 80, 1, 255, 178, 91, 8, 255, 184, 92, 0, 255, 181, 91, 5, 255, 182, 96, 5, 255, 183, 92, 6, 255, 183, 91, 4, 255, 179, 90, 1, 255, 170, 80, 4, 255, 173, 85, 6, 255, 158, 68, 4, 255, 170, 78, 8, 255, 187, 96, 3, 255, 188, 93, 0, 255, 190, 95, 6, 255, 192, 96, 7, 255, 191, 99, 6, 255, 189, 100, 2, 255, 191, 100, 6, 255, 188, 97, 5, 255, 189, 98, 7, 255, 185, 94, 6, 255, 191, 100, 6, 255, 193, 100, 8, 255, 194, 102, 3, 255, 194, 101, 1, 255, 189, 95, 6, 255, 187, 95, 7, 255, 194, 105, 7, 255, 197, 109, 2, 255, 194, 106, 0, 255, 193, 106, 2, 255, 194, 107, 5, 255, 193, 108, 7, 255, 193, 107, 10, 255, 191, 106, 6, 255, 195, 110, 3, 255, 196, 113, 10, 255, 195, 112, 10, 255, 195, 111, 7, 255, 200, 116, 5, 255, 202, 116, 5, 255, 203, 117, 10, 255, 205, 118, 9, 255, 200, 117, 4, 255, 195, 114, 9, 255, 195, 109, 11, 255, 192, 109, 12, 255, 195, 112, 8, 255, 196, 113, 8, 255, 195, 113, 5, 255, 194, 111, 5, 255, 189, 109, 6, 255, 187, 109, 3, 255, 187, 110, 8, 255, 190, 114, 8, 255, 196, 122, 2, 255, 194, 118, 9, 255, 193, 119, 9, 255, 192, 118, 7, 255, 194, 121, 5, 255, 189, 118, 3, 255, 182, 111, 6, 255, 190, 120, 15, 255, 190, 123, 8, 255, 188, 121, 6, 255, 192, 121, 13, 255, 189, 119, 13, 255, 189, 119, 10, 255, 194, 126, 10, 255, 184, 117, 1, 255, 175, 107, 8, 255, 187, 124, 17, 255, 180, 119, 12, 255, 181, 118, 21, 255, 181, 122, 4, 255, 182, 120, 12, 255, 178, 118, 20, 255, 178, 123, 4, 255, 178, 122, 7, 255, 183, 129, 16, 255, 188, 140, 9, 255, 186, 139, 7, 255, 193, 142, 3, 255, 197, 143, 11, 255, 194, 140, 15, 255, 189, 140, 7, 255, 193, 143, 10, 255, 183, 126, 16, 255, 173, 115, 12, 255, 191, 139, 11, 255, 194, 143, 12, 255, 183, 128, 12, 255, 181, 126, 12, 255, 189, 138, 3, 255, 194, 144, 10, 255, 194, 143, 11, 255, 187, 135, 11, 255, 186, 132, 11, 255, 187, 136, 5, 255, 187, 140, 6, 255, 185, 139, 10, 255, 178, 135, 4, 255, 184, 141, 8, 255, 190, 145, 7, 255, 187, 139, 6, 255, 178, 133, 11, 255, 181, 137, 7, 255, 178, 132, 8, 255, 176, 134, 7, 255, 174, 133, 12, 255, 164, 122, 6, 255, 166, 119, 7, 255, 168, 118, 6, 255, 175, 124, 6, 255, 177, 124, 9, 255, 182, 131, 11, 255, 180, 132, 5, 255, 178, 132, 5, 255, 181, 134, 8, 255, 178, 129, 9, 255, 180, 130, 15, 255, 185, 138, 6, 255, 185, 138, 2, 255, 189, 142, 0, 255, 191, 143, 9, 255, 194, 146, 5, 255, 194, 147, 7, 255, 196, 150, 2, 255, 200, 153, 10, 255, 192, 147, 3, 255, 194, 146, 11, 255, 200, 154, 9, 255, 198, 159, 0, 255, 199, 159, 0, 255, 201, 156, 1, 255, 203, 159, 3, 255, 203, 160, 4, 255, 203, 156, 8, 255, 205, 158, 8, 255, 193, 145, 0, 255, 191, 140, 11, 255, 169, 115, 8, 255, 184, 133, 10, 255, 192, 144, 7, 255, 185, 133, 1, 255, 189, 134, 6, 255, 197, 147, 0, 255, 198, 152, 4, 255, 199, 155, 3, 255, 201, 152, 7, 255, 203, 147, 13, 255, 195, 139, 3, 255, 199, 141, 4, 255, 202, 145, 4, 255, 199, 139, 5, 255, 191, 124, 5, 255, 190, 119, 8, 255, 183, 117, 2, 255, 164, 96, 2, 255, 156, 87, 3, 255, 163, 97, 4, 255, 162, 91, 9, 255, 170, 95, 9, 255, 172, 104, 0, 255, 181, 113, 11, 255, 173, 106, 1, 255, 172, 105, 3, 255, 170, 101, 4, 255, 170, 99, 7, 255, 169, 93, 6, 255, 166, 93, 3, 255, 165, 91, 3, 255, 164, 91, 6, 255, 166, 91, 8, 255, 164, 88, 5, 255, 162, 85, 3, 255, 158, 81, 3, 255, 155, 79, 3, 255, 152, 75, 0, 255, 155, 76, 4, 255, 154, 76, 6, 255, 152, 72, 5, 255, 146, 70, 1, 255, 146, 68, 1, 255, 147, 63, 1, 255, 134, 59, 2, 255, 127, 51, 4, 255, 113, 41, 2, 255, 110, 41, 1, 255, 105, 43, 2, 255, 99, 37, 1, 255, 112, 37, 5, 255, 107, 41, 3, 255, 103, 41, 3, 255, 103, 33, 3, 255, 97, 36, 3, 255, 101, 37, 5, 255, 91, 32, 1, 255, 79, 29, 0, 255, 83, 30, 5, 255, 86, 28, 7, 255, 84, 25, 4, 255, 84, 28, 6, 255, 82, 29, 3, 255, 79, 30, 0, 255, 81, 31, 1, 255, 84, 31, 1, 255, 84, 29, 0, 255, 89, 30, 1, 255, 82, 30, 0, 255, 74, 31, 0, 255, 82, 29, 4, 255, 84, 25, 9, 255, 76, 30, 11, 255, 76, 25, 1, 255, 94, 33, 1, 255, 106, 37, 2, 255, 103, 28, 1, 255, 102, 38, 2, 255, 104, 39, 7, 255, 115, 41, 3, 255, 109, 36, 3, 255, 101, 33, 4, 255, 100, 34, 2, 255, 102, 31, 1, 255, 110, 35, 2, 255, 110, 37, 0, 255, 98, 33, 1, 255, 87, 28, 1, 255, 74, 25, 2, 255, 56, 24, 0, 255, 57, 19, 0, 255, 72, 23, 5, 255, 76, 29, 2, 255, 82, 24, 5, 255, 81, 30, 2, 255, 96, 39, 1, 255, 105, 39, 4, 255, 98, 33, 1, 255, 101, 32, 0, 255, 109, 39, 3, 255, 117, 48, 5, 255, 121, 52, 2, 255, 126, 54, 1, 255, 133, 58, 2, 255, 134, 58, 2, 255, 131, 56, 1, 255, 137, 58, 2, 255, 138, 59, 2, 255, 121, 52, 1, 255, 117, 50, 6, 255, 102, 35, 2, 255, 89, 27, 4, 255, 76, 25, 0, 255, 66, 19, 3, 255, 63, 15, 5, 255, 60, 19, 1, 255, 61, 19, 1, 255, 56, 16, 2, 255, 63, 21, 4, 255, 79, 24, 1, 255, 82, 24, 3, 255, 79, 22, 4, 255, 81, 20, 1, 255, 89, 22, 3, 255, 85, 23, 3, 255, 85, 23, 2, 255, 89, 25, 4, 255, 89, 26, 5, 255, 85, 24, 2, 255, 87, 23, 4, 255, 93, 24, 2, 255, 93, 26, 1, 255, 84, 22, 0, 255, 79, 18, 2, 255, 85, 21, 5, 255, 90, 21, 1, 255, 101, 27, 2, 255, 105, 30, 2, 255, 92, 23, 0, 255, 84, 20, 3, 255, 9, 6, 1, 255, 5, 3, 1, 255, 5, 3, 2, 255, 8, 3, 0, 255, 8, 4, 0, 255, 10, 7, 2, 255, 11, 8, 4, 255, 12, 7, 3, 255, 9, 5, 1, 255, 13, 8, 4, 255, 14, 9, 3, 255, 14, 10, 2, 255, 15, 11, 3, 255, 17, 11, 4, 255, 19, 13, 4, 255, 21, 14, 3, 255, 21, 15, 4, 255, 19, 17, 4, 255, 21, 23, 4, 255, 21, 20, 1, 255, 31, 25, 8, 255, 42, 32, 18, 255, 34, 32, 17, 255, 35, 37, 20, 255, 41, 39, 12, 255, 49, 44, 10, 255, 42, 45, 7, 255, 48, 44, 12, 255, 43, 44, 13, 255, 39, 50, 17, 255, 53, 47, 18, 255, 50, 54, 7, 255, 44, 48, 6, 255, 52, 49, 13, 255, 78, 54, 8, 255, 126, 71, 19, 255, 165, 91, 16, 255, 167, 100, 7, 255, 143, 89, 9, 255, 101, 87, 3, 255, 94, 76, 23, 255, 81, 74, 51, 255, 63, 65, 50, 255, 59, 70, 61, 255, 72, 70, 66, 255, 75, 79, 65, 255, 70, 78, 59, 255, 62, 68, 54, 255, 69, 67, 56, 255, 63, 62, 50, 255, 60, 67, 41, 255, 62, 64, 31, 255, 63, 55, 23, 255, 68, 56, 19, 255, 62, 46, 3, 255, 57, 33, 2, 255, 59, 35, 3, 255, 56, 33, 3, 255, 59, 38, 7, 255, 57, 40, 6, 255, 57, 36, 6, 255, 55, 24, 5, 255, 54, 24, 5, 255, 57, 29, 6, 255, 57, 27, 1, 255, 61, 34, 4, 255, 62, 32, 1, 255, 68, 33, 2, 255, 67, 30, 1, 255, 67, 33, 1, 255, 68, 33, 4, 255, 63, 30, 1, 255, 67, 34, 0, 255, 68, 31, 1, 255, 71, 33, 7, 255, 68, 33, 5, 255, 65, 34, 2, 255, 64, 34, 2, 255, 56, 30, 1, 255, 60, 30, 2, 255, 63, 29, 3, 255, 63, 31, 3, 255, 56, 31, 1, 255, 58, 33, 5, 255, 61, 31, 4, 255, 64, 32, 4, 255, 63, 32, 5, 255, 66, 35, 5, 255, 69, 37, 5, 255, 67, 33, 3, 255, 72, 36, 2, 255, 75, 45, 4, 255, 70, 41, 2, 255, 74, 37, 1, 255, 77, 39, 3, 255, 71, 41, 6, 255, 76, 36, 2, 255, 86, 42, 2, 255, 86, 39, 2, 255, 82, 39, 3, 255, 77, 41, 1, 255, 79, 43, 5, 255, 76, 43, 6, 255, 74, 40, 4, 255, 78, 44, 2, 255, 82, 41, 3, 255, 83, 42, 3, 255, 76, 38, 0, 255, 82, 47, 3, 255, 81, 44, 8, 255, 81, 41, 6, 255, 79, 40, 1, 255, 78, 43, 6, 255, 78, 45, 4, 255, 76, 40, 7, 255, 76, 39, 9, 255, 82, 39, 12, 255, 107, 52, 10, 255, 139, 69, 2, 255, 158, 72, 8, 255, 168, 79, 11, 255, 175, 92, 3, 255, 177, 89, 3, 255, 177, 86, 3, 255, 176, 86, 7, 255, 178, 90, 8, 255, 180, 92, 12, 255, 176, 86, 5, 255, 166, 84, 1, 255, 172, 86, 6, 255, 183, 92, 5, 255, 182, 90, 2, 255, 187, 95, 2, 255, 184, 90, 4, 255, 183, 89, 3, 255, 184, 92, 2, 255, 172, 77, 3, 255, 180, 87, 9, 255, 188, 98, 5, 255, 189, 99, 6, 255, 192, 100, 5, 255, 191, 101, 6, 255, 193, 101, 4, 255, 197, 104, 2, 255, 196, 103, 6, 255, 186, 93, 5, 255, 189, 102, 2, 255, 195, 108, 3, 255, 194, 108, 2, 255, 194, 109, 3, 255, 190, 105, 2, 255, 191, 107, 11, 255, 191, 109, 10, 255, 194, 110, 4, 255, 194, 109, 4, 255, 192, 109, 10, 255, 191, 110, 4, 255, 195, 114, 4, 255, 199, 115, 12, 255, 198, 112, 12, 255, 197, 114, 6, 255, 197, 109, 5, 255, 188, 106, 9, 255, 189, 112, 11, 255, 187, 101, 10, 255, 180, 95, 16, 255, 189, 109, 17, 255, 190, 111, 15, 255, 192, 109, 12, 255, 195, 111, 13, 255, 191, 109, 12, 255, 190, 111, 8, 255, 187, 108, 11, 255, 177, 98, 6, 255, 181, 107, 1, 255, 185, 114, 7, 255, 183, 112, 9, 255, 183, 111, 4, 255, 186, 113, 9, 255, 185, 115, 9, 255, 172, 102, 7, 255, 178, 109, 14, 255, 182, 116, 6, 255, 183, 115, 3, 255, 183, 110, 8, 255, 172, 99, 19, 255, 170, 105, 23, 255, 179, 116, 9, 255, 177, 114, 10, 255, 170, 105, 14, 255, 177, 117, 13, 255, 176, 120, 12, 255, 179, 120, 11, 255, 180, 121, 11, 255, 174, 123, 9, 255, 176, 125, 12, 255, 174, 124, 16, 255, 174, 125, 8, 255, 181, 126, 14, 255, 183, 131, 14, 255, 181, 130, 17, 255, 181, 132, 22, 255, 179, 131, 17, 255, 177, 131, 13, 255, 177, 132, 8, 255, 176, 132, 10, 255, 184, 137, 14, 255, 173, 124, 9, 255, 169, 123, 7, 255, 176, 129, 18, 255, 178, 130, 10, 255, 174, 128, 7, 255, 171, 124, 6, 255, 178, 131, 2, 255, 182, 134, 6, 255, 179, 132, 10, 255, 174, 129, 13, 255, 175, 131, 6, 255, 179, 135, 8, 255, 181, 138, 8, 255, 176, 134, 7, 255, 174, 131, 13, 255, 172, 127, 10, 255, 167, 119, 8, 255, 165, 119, 7, 255, 168, 120, 15, 255, 161, 112, 9, 255, 161, 117, 11, 255, 163, 119, 11, 255, 171, 125, 5, 255, 173, 120, 10, 255, 167, 115, 6, 255, 163, 112, 11, 255, 160, 109, 21, 255, 166, 117, 18, 255, 173, 122, 13, 255, 175, 123, 8, 255, 176, 123, 3, 255, 181, 130, 2, 255, 181, 132, 11, 255, 180, 132, 5, 255, 181, 131, 6, 255, 184, 135, 7, 255, 186, 138, 7, 255, 186, 139, 2, 255, 181, 132, 7, 255, 190, 140, 11, 255, 198, 147, 9, 255, 184, 129, 14, 255, 183, 133, 8, 255, 199, 155, 4, 255, 197, 156, 2, 255, 196, 154, 3, 255, 201, 156, 4, 255, 202, 156, 2, 255, 191, 145, 1, 255, 196, 148, 11, 255, 198, 152, 7, 255, 197, 149, 7, 255, 196, 150, 2, 255, 183, 132, 19, 255, 181, 130, 17, 255, 192, 146, 9, 255, 186, 138, 2, 255, 189, 136, 7, 255, 198, 147, 0, 255, 203, 153, 7, 255, 204, 155, 4, 255, 203, 150, 6, 255, 195, 135, 4, 255, 196, 136, 5, 255, 200, 142, 3, 255, 199, 144, 1, 255, 192, 134, 4, 255, 186, 122, 10, 255, 180, 115, 9, 255, 182, 113, 3, 255, 185, 118, 5, 255, 176, 113, 4, 255, 174, 110, 2, 255, 179, 109, 5, 255, 177, 107, 7, 255, 176, 108, 1, 255, 178, 112, 6, 255, 173, 106, 2, 255, 172, 103, 7, 255, 173, 100, 5, 255, 168, 93, 4, 255, 171, 96, 2, 255, 170, 95, 6, 255, 165, 93, 7, 255, 164, 93, 4, 255, 163, 92, 3, 255, 162, 88, 6, 255, 159, 85, 4, 255, 159, 84, 3, 255, 157, 80, 4, 255, 156, 78, 4, 255, 158, 79, 8, 255, 151, 72, 6, 255, 150, 71, 5, 255, 151, 72, 1, 255, 146, 67, 2, 255, 140, 63, 2, 255, 139, 60, 3, 255, 133, 60, 7, 255, 117, 47, 3, 255, 109, 41, 2, 255, 107, 44, 4, 255, 101, 36, 3, 255, 106, 35, 6, 255, 110, 42, 4, 255, 110, 40, 3, 255, 100, 34, 3, 255, 97, 39, 5, 255, 89, 35, 2, 255, 87, 35, 1, 255, 92, 35, 4, 255, 97, 36, 7, 255, 95, 29, 3, 255, 86, 29, 1, 255, 81, 30, 1, 255, 76, 27, 2, 255, 76, 28, 3, 255, 81, 29, 4, 255, 79, 30, 2, 255, 82, 28, 1, 255, 90, 29, 3, 255, 97, 34, 6, 255, 97, 37, 2, 255, 106, 41, 5, 255, 107, 38, 5, 255, 100, 36, 3, 255, 95, 30, 2, 255, 88, 28, 4, 255, 99, 32, 1, 255, 110, 30, 4, 255, 105, 36, 3, 255, 109, 35, 1, 255, 114, 39, 2, 255, 109, 36, 2, 255, 103, 30, 2, 255, 105, 33, 4, 255, 106, 34, 5, 255, 99, 33, 2, 255, 95, 31, 1, 255, 101, 32, 3, 255, 83, 25, 2, 255, 61, 21, 1, 255, 62, 24, 4, 255, 69, 24, 4, 255, 81, 25, 4, 255, 81, 27, 6, 255, 84, 29, 2, 255, 98, 37, 0, 255, 107, 43, 0, 255, 108, 39, 3, 255, 105, 34, 2, 255, 119, 44, 2, 255, 128, 54, 5, 255, 124, 52, 1, 255, 127, 55, 3, 255, 131, 57, 3, 255, 135, 58, 4, 255, 134, 57, 3, 255, 141, 59, 3, 255, 141, 59, 5, 255, 134, 55, 1, 255, 131, 50, 2, 255, 113, 46, 6, 255, 89, 31, 2, 255, 77, 20, 6, 255, 70, 22, 2, 255, 69, 19, 3, 255, 75, 21, 2, 255, 69, 23, 4, 255, 58, 16, 6, 255, 64, 16, 4, 255, 78, 22, 4, 255, 77, 24, 0, 255, 78, 23, 2, 255, 79, 22, 5, 255, 81, 23, 3, 255, 81, 21, 2, 255, 79, 23, 3, 255, 82, 23, 2, 255, 86, 24, 3, 255, 85, 23, 3, 255, 82, 21, 2, 255, 82, 20, 2, 255, 85, 21, 4, 255, 82, 17, 4, 255, 79, 18, 4, 255, 77, 21, 0, 255, 78, 21, 0, 255, 89, 27, 4, 255, 100, 33, 5, 255, 104, 31, 5, 255, 86, 22, 1, 255, 77, 20, 5, 255, 5, 2, 0, 255, 5, 3, 2, 255, 7, 5, 4, 255, 9, 5, 2, 255, 7, 4, 0, 255, 8, 6, 1, 255, 8, 6, 2, 255, 10, 8, 1, 255, 10, 6, 0, 255, 14, 10, 2, 255, 16, 11, 3, 255, 17, 12, 3, 255, 17, 14, 4, 255, 13, 14, 4, 255, 18, 15, 3, 255, 21, 18, 4, 255, 23, 20, 5, 255, 25, 23, 5, 255, 28, 23, 3, 255, 28, 26, 6, 255, 28, 29, 3, 255, 41, 35, 8, 255, 42, 36, 22, 255, 35, 40, 18, 255, 39, 40, 19, 255, 41, 39, 11, 255, 44, 43, 10, 255, 48, 46, 17, 255, 54, 50, 10, 255, 47, 50, 11, 255, 50, 43, 6, 255, 66, 49, 5, 255, 111, 68, 20, 255, 157, 94, 22, 255, 177, 107, 22, 255, 154, 107, 12, 255, 129, 103, 18, 255, 101, 73, 15, 255, 60, 42, 5, 255, 35, 35, 13, 255, 48, 54, 35, 255, 79, 77, 49, 255, 71, 73, 37, 255, 68, 74, 66, 255, 73, 73, 67, 255, 72, 77, 65, 255, 66, 74, 63, 255, 64, 68, 54, 255, 66, 65, 56, 255, 65, 61, 43, 255, 65, 63, 41, 255, 67, 66, 40, 255, 65, 58, 16, 255, 64, 54, 27, 255, 59, 51, 15, 255, 55, 40, 5, 255, 51, 30, 7, 255, 54, 31, 2, 255, 66, 36, 5, 255, 55, 38, 3, 255, 57, 44, 11, 255, 56, 32, 4, 255, 54, 26, 0, 255, 55, 25, 1, 255, 63, 25, 4, 255, 64, 31, 5, 255, 61, 28, 2, 255, 66, 31, 4, 255, 62, 30, 3, 255, 58, 30, 4, 255, 62, 33, 4, 255, 67, 31, 1, 255, 72, 34, 3, 255, 66, 34, 4, 255, 66, 32, 4, 255, 66, 31, 3, 255, 63, 32, 2, 255, 63, 36, 3, 255, 56, 33, 0, 255, 59, 30, 1, 255, 67, 30, 3, 255, 69, 32, 5, 255, 61, 32, 1, 255, 61, 32, 2, 255, 64, 33, 2, 255, 70, 38, 2, 255, 70, 35, 1, 255, 72, 37, 4, 255, 72, 41, 4, 255, 72, 40, 6, 255, 77, 36, 3, 255, 85, 39, 3, 255, 80, 39, 3, 255, 84, 40, 3, 255, 88, 40, 1, 255, 84, 39, 4, 255, 84, 42, 4, 255, 83, 37, 0, 255, 82, 38, 2, 255, 81, 42, 3, 255, 80, 43, 2, 255, 82, 43, 3, 255, 81, 44, 4, 255, 81, 43, 4, 255, 83, 40, 3, 255, 84, 40, 1, 255, 87, 42, 0, 255, 83, 44, 1, 255, 81, 45, 3, 255, 80, 45, 2, 255, 83, 46, 1, 255, 87, 50, 3, 255, 79, 47, 3, 255, 80, 48, 1, 255, 89, 49, 3, 255, 90, 48, 1, 255, 84, 51, 5, 255, 80, 48, 4, 255, 97, 54, 1, 255, 100, 46, 0, 255, 104, 47, 7, 255, 124, 61, 1, 255, 144, 69, 4, 255, 159, 77, 3, 255, 173, 86, 9, 255, 177, 90, 4, 255, 176, 90, 0, 255, 175, 84, 2, 255, 178, 91, 5, 255, 182, 94, 5, 255, 180, 89, 1, 255, 177, 84, 6, 255, 180, 90, 7, 255, 176, 92, 0, 255, 174, 88, 1, 255, 176, 87, 5, 255, 173, 82, 5, 255, 179, 89, 3, 255, 186, 96, 0, 255, 187, 98, 2, 255, 190, 101, 5, 255, 191, 104, 0, 255, 194, 102, 7, 255, 196, 103, 4, 255, 195, 102, 2, 255, 194, 102, 4, 255, 190, 102, 3, 255, 193, 104, 3, 255, 192, 104, 9, 255, 192, 105, 11, 255, 189, 103, 6, 255, 190, 104, 3, 255, 190, 106, 5, 255, 190, 106, 8, 255, 189, 108, 2, 255, 192, 111, 3, 255, 191, 110, 7, 255, 189, 107, 10, 255, 190, 106, 2, 255, 190, 105, 10, 255, 192, 107, 13, 255, 188, 101, 6, 255, 186, 100, 13, 255, 183, 101, 6, 255, 186, 102, 10, 255, 182, 101, 11, 255, 182, 105, 1, 255, 187, 106, 9, 255, 185, 106, 9, 255, 184, 107, 10, 255, 182, 107, 6, 255, 184, 108, 8, 255, 173, 100, 6, 255, 163, 89, 10, 255, 173, 100, 6, 255, 178, 110, 8, 255, 172, 104, 14, 255, 163, 93, 4, 255, 168, 96, 11, 255, 181, 110, 9, 255, 172, 101, 9, 255, 175, 105, 17, 255, 179, 110, 12, 255, 179, 108, 13, 255, 175, 103, 22, 255, 154, 93, 20, 255, 154, 99, 16, 255, 167, 110, 9, 255, 172, 112, 7, 255, 171, 114, 20, 255, 164, 107, 12, 255, 163, 110, 8, 255, 167, 109, 15, 255, 170, 108, 25, 255, 175, 116, 12, 255, 169, 114, 14, 255, 169, 116, 15, 255, 166, 114, 10, 255, 172, 113, 12, 255, 169, 117, 7, 255, 162, 114, 14, 255, 168, 114, 19, 255, 166, 115, 13, 255, 162, 116, 5, 255, 169, 120, 9, 255, 175, 118, 12, 255, 169, 113, 9, 255, 167, 113, 5, 255, 165, 114, 6, 255, 163, 111, 13, 255, 162, 110, 11, 255, 160, 110, 6, 255, 161, 108, 19, 255, 152, 106, 12, 255, 142, 100, 6, 255, 152, 105, 3, 255, 158, 113, 6, 255, 157, 106, 25, 255, 155, 100, 10, 255, 147, 97, 5, 255, 166, 113, 14, 255, 154, 103, 21, 255, 143, 97, 14, 255, 154, 104, 13, 255, 145, 97, 6, 255, 138, 88, 5, 255, 129, 85, 11, 255, 135, 91, 15, 255, 145, 100, 11, 255, 143, 98, 7, 255, 134, 88, 8, 255, 141, 95, 12, 255, 133, 90, 16, 255, 125, 84, 12, 255, 132, 87, 9, 255, 140, 92, 13, 255, 145, 93, 11, 255, 136, 89, 9, 255, 144, 96, 8, 255, 165, 107, 14, 255, 172, 117, 5, 255, 175, 127, 8, 255, 178, 125, 7, 255, 182, 131, 8, 255, 179, 132, 2, 255, 179, 129, 12, 255, 181, 132, 14, 255, 186, 140, 7, 255, 191, 146, 4, 255, 193, 146, 2, 255, 191, 147, 2, 255, 193, 151, 2, 255, 193, 150, 5, 255, 194, 148, 2, 255, 189, 143, 2, 255, 192, 148, 8, 255, 197, 155, 5, 255, 203, 158, 5, 255, 199, 151, 9, 255, 190, 141, 5, 255, 198, 149, 5, 255, 180, 129, 12, 255, 175, 126, 8, 255, 187, 140, 4, 255, 187, 137, 8, 255, 195, 143, 0, 255, 200, 148, 8, 255, 202, 149, 5, 255, 195, 139, 0, 255, 190, 136, 2, 255, 204, 150, 7, 255, 206, 152, 1, 255, 202, 151, 0, 255, 201, 147, 7, 255, 196, 139, 10, 255, 190, 133, 10, 255, 189, 125, 8, 255, 187, 123, 4, 255, 185, 124, 6, 255, 185, 120, 5, 255, 183, 117, 3, 255, 182, 115, 8, 255, 179, 110, 5, 255, 174, 105, 5, 255, 177, 107, 7, 255, 172, 100, 1, 255, 173, 100, 2, 255, 172, 95, 4, 255, 168, 94, 2, 255, 169, 93, 4, 255, 165, 91, 4, 255, 165, 91, 3, 255, 165, 90, 4, 255, 161, 87, 4, 255, 161, 88, 5, 255, 162, 87, 4, 255, 160, 83, 1, 255, 156, 81, 1, 255, 154, 79, 2, 255, 155, 77, 6, 255, 154, 74, 7, 255, 151, 70, 2, 255, 147, 71, 0, 255, 145, 72, 3, 255, 142, 64, 3, 255, 124, 50, 1, 255, 113, 45, 5, 255, 109, 47, 6, 255, 104, 41, 1, 255, 105, 39, 3, 255, 97, 35, 3, 255, 101, 39, 1, 255, 105, 42, 3, 255, 95, 32, 0, 255, 100, 36, 3, 255, 95, 36, 1, 255, 93, 34, 2, 255, 97, 38, 3, 255, 103, 38, 2, 255, 98, 33, 0, 255, 93, 32, 2, 255, 93, 32, 4, 255, 92, 31, 3, 255, 97, 36, 1, 255, 104, 40, 2, 255, 109, 43, 5, 255, 111, 42, 4, 255, 115, 44, 4, 255, 120, 45, 3, 255, 120, 42, 0, 255, 126, 46, 4, 255, 128, 45, 2, 255, 128, 40, 1, 255, 124, 41, 9, 255, 100, 32, 7, 255, 90, 26, 1, 255, 111, 34, 7, 255, 107, 33, 0, 255, 110, 35, 4, 255, 113, 37, 5, 255, 111, 37, 1, 255, 104, 33, 0, 255, 104, 30, 3, 255, 106, 36, 3, 255, 98, 39, 5, 255, 88, 31, 4, 255, 87, 27, 4, 255, 77, 22, 2, 255, 68, 25, 3, 255, 76, 23, 8, 255, 83, 26, 4, 255, 76, 29, 0, 255, 80, 22, 3, 255, 91, 37, 0, 255, 112, 47, 1, 255, 111, 43, 1, 255, 109, 41, 4, 255, 124, 47, 6, 255, 135, 53, 5, 255, 131, 54, 4, 255, 129, 53, 4, 255, 130, 56, 3, 255, 132, 58, 3, 255, 136, 57, 6, 255, 134, 55, 1, 255, 137, 56, 2, 255, 126, 55, 3, 255, 125, 52, 1, 255, 130, 46, 4, 255, 101, 29, 1, 255, 68, 22, 2, 255, 67, 17, 3, 255, 68, 20, 1, 255, 71, 18, 1, 255, 79, 24, 6, 255, 59, 16, 3, 255, 51, 15, 1, 255, 73, 19, 6, 255, 82, 23, 4, 255, 75, 26, 0, 255, 76, 24, 2, 255, 81, 22, 2, 255, 84, 24, 1, 255, 79, 24, 3, 255, 80, 21, 4, 255, 88, 23, 5, 255, 89, 22, 2, 255, 84, 22, 1, 255, 85, 24, 5, 255, 88, 22, 4, 255, 85, 22, 9, 255, 67, 16, 2, 255, 77, 25, 2, 255, 101, 34, 4, 255, 106, 33, 2, 255, 106, 36, 3, 255, 100, 29, 4, 255, 80, 19, 3, 255, 68, 17, 0, 255, 78, 19, 4, 255, 4, 2, 0, 255, 4, 2, 1, 255, 6, 4, 3, 255, 8, 7, 2, 255, 7, 6, 1, 255, 8, 5, 1, 255, 10, 7, 3, 255, 11, 9, 2, 255, 12, 9, 1, 255, 14, 10, 1, 255, 16, 12, 1, 255, 16, 12, 1, 255, 16, 15, 3, 255, 11, 13, 4, 255, 15, 13, 4, 255, 18, 15, 3, 255, 20, 20, 5, 255, 24, 22, 5, 255, 32, 28, 8, 255, 29, 26, 5, 255, 36, 32, 9, 255, 42, 36, 9, 255, 44, 38, 14, 255, 41, 45, 16, 255, 34, 39, 19, 255, 47, 44, 15, 255, 50, 49, 18, 255, 37, 48, 20, 255, 37, 41, 19, 255, 60, 49, 21, 255, 126, 89, 23, 255, 160, 121, 20, 255, 161, 125, 11, 255, 122, 93, 10, 255, 79, 69, 12, 255, 49, 52, 5, 255, 37, 42, 7, 255, 50, 41, 17, 255, 49, 42, 6, 255, 47, 42, 4, 255, 60, 58, 37, 255, 75, 70, 48, 255, 73, 73, 40, 255, 65, 69, 61, 255, 71, 72, 55, 255, 70, 73, 57, 255, 66, 71, 57, 255, 62, 63, 58, 255, 66, 64, 51, 255, 70, 66, 42, 255, 71, 63, 44, 255, 72, 64, 49, 255, 68, 58, 26, 255, 59, 52, 20, 255, 59, 55, 29, 255, 53, 40, 5, 255, 57, 33, 1, 255, 55, 32, 2, 255, 49, 33, 4, 255, 54, 39, 6, 255, 68, 46, 6, 255, 73, 43, 3, 255, 70, 35, 1, 255, 69, 33, 1, 255, 63, 30, 3, 255, 72, 34, 5, 255, 73, 34, 2, 255, 70, 34, 0, 255, 68, 35, 1, 255, 66, 32, 2, 255, 70, 30, 1, 255, 67, 34, 2, 255, 62, 36, 3, 255, 64, 32, 3, 255, 67, 31, 1, 255, 66, 34, 3, 255, 63, 32, 4, 255, 56, 30, 7, 255, 55, 36, 6, 255, 63, 33, 3, 255, 68, 33, 5, 255, 63, 33, 0, 255, 72, 38, 3, 255, 75, 41, 5, 255, 72, 37, 2, 255, 77, 38, 2, 255, 79, 40, 2, 255, 77, 39, 1, 255, 76, 38, 2, 255, 77, 40, 3, 255, 74, 38, 2, 255, 77, 42, 5, 255, 85, 42, 4, 255, 86, 39, 0, 255, 86, 40, 1, 255, 90, 42, 3, 255, 85, 41, 1, 255, 84, 40, 1, 255, 86, 42, 3, 255, 83, 43, 2, 255, 84, 45, 5, 255, 83, 44, 6, 255, 85, 43, 4, 255, 88, 46, 4, 255, 86, 42, 1, 255, 85, 41, 0, 255, 86, 43, 1, 255, 87, 47, 4, 255, 85, 46, 2, 255, 88, 47, 5, 255, 87, 48, 2, 255, 84, 46, 1, 255, 89, 47, 4, 255, 90, 47, 5, 255, 87, 48, 2, 255, 90, 50, 2, 255, 92, 51, 2, 255, 91, 49, 2, 255, 89, 48, 3, 255, 88, 48, 3, 255, 83, 45, 1, 255, 86, 47, 4, 255, 97, 51, 4, 255, 120, 60, 7, 255, 138, 70, 4, 255, 163, 83, 7, 255, 178, 87, 4, 255, 179, 92, 2, 255, 180, 90, 6, 255, 173, 87, 1, 255, 173, 89, 0, 255, 177, 92, 1, 255, 180, 89, 7, 255, 172, 78, 5, 255, 170, 77, 0, 255, 181, 92, 9, 255, 185, 97, 9, 255, 186, 97, 2, 255, 184, 95, 0, 255, 183, 94, 6, 255, 176, 89, 5, 255, 189, 105, 5, 255, 189, 102, 1, 255, 189, 99, 3, 255, 192, 103, 10, 255, 187, 99, 2, 255, 189, 102, 5, 255, 193, 102, 6, 255, 186, 96, 4, 255, 186, 99, 8, 255, 190, 102, 5, 255, 187, 98, 0, 255, 190, 104, 4, 255, 189, 105, 4, 255, 184, 104, 6, 255, 185, 105, 10, 255, 184, 102, 5, 255, 179, 102, 7, 255, 182, 101, 7, 255, 175, 96, 10, 255, 183, 98, 15, 255, 182, 99, 5, 255, 181, 97, 6, 255, 180, 96, 3, 255, 178, 97, 1, 255, 178, 99, 3, 255, 180, 106, 5, 255, 183, 101, 6, 255, 181, 97, 6, 255, 178, 100, 10, 255, 176, 100, 3, 255, 177, 100, 6, 255, 177, 102, 11, 255, 177, 99, 8, 255, 176, 99, 12, 255, 170, 95, 4, 255, 164, 94, 9, 255, 159, 94, 15, 255, 157, 95, 15, 255, 162, 98, 14, 255, 160, 97, 4, 255, 159, 93, 12, 255, 165, 98, 17, 255, 161, 105, 14, 255, 159, 102, 15, 255, 156, 100, 11, 255, 159, 99, 10, 255, 162, 104, 9, 255, 167, 103, 5, 255, 160, 104, 11, 255, 153, 104, 6, 255, 150, 96, 22, 255, 146, 93, 14, 255, 156, 99, 7, 255, 143, 91, 9, 255, 153, 102, 10, 255, 149, 95, 15, 255, 140, 91, 15, 255, 134, 87, 24, 255, 152, 101, 19, 255, 146, 96, 10, 255, 138, 95, 10, 255, 129, 81, 9, 255, 138, 87, 6, 255, 140, 89, 19, 255, 141, 92, 19, 255, 130, 86, 6, 255, 134, 91, 16, 255, 130, 91, 12, 255, 115, 76, 9, 255, 122, 85, 14, 255, 124, 89, 20, 255, 132, 89, 19, 255, 118, 82, 18, 255, 102, 81, 7, 255, 116, 85, 8, 255, 126, 86, 25, 255, 116, 80, 18, 255, 110, 82, 8, 255, 104, 76, 17, 255, 128, 85, 12, 255, 130, 85, 9, 255, 124, 89, 9, 255, 132, 93, 15, 255, 124, 87, 12, 255, 120, 81, 9, 255, 120, 86, 14, 255, 122, 85, 12, 255, 140, 99, 12, 255, 125, 93, 14, 255, 113, 77, 5, 255, 132, 87, 9, 255, 125, 86, 9, 255, 120, 83, 10, 255, 117, 81, 15, 255, 112, 82, 6, 255, 114, 78, 12, 255, 110, 79, 11, 255, 128, 88, 10, 255, 139, 94, 9, 255, 152, 100, 13, 255, 165, 108, 15, 255, 164, 114, 0, 255, 170, 116, 12, 255, 172, 118, 17, 255, 178, 128, 8, 255, 175, 126, 5, 255, 181, 131, 12, 255, 184, 136, 0, 255, 187, 139, 4, 255, 192, 144, 8, 255, 191, 147, 4, 255, 188, 144, 3, 255, 182, 136, 3, 255, 179, 134, 3, 255, 192, 152, 7, 255, 200, 156, 3, 255, 199, 158, 0, 255, 198, 153, 11, 255, 182, 130, 18, 255, 172, 119, 11, 255, 183, 131, 6, 255, 177, 121, 4, 255, 184, 140, 2, 255, 187, 140, 1, 255, 193, 140, 1, 255, 193, 146, 0, 255, 201, 149, 8, 255, 191, 140, 3, 255, 192, 145, 11, 255, 202, 154, 7, 255, 203, 153, 7, 255, 204, 151, 7, 255, 202, 147, 4, 255, 200, 145, 6, 255, 198, 145, 9, 255, 194, 138, 5, 255, 190, 131, 3, 255, 188, 127, 6, 255, 188, 123, 8, 255, 185, 118, 8, 255, 182, 115, 7, 255, 180, 113, 7, 255, 177, 108, 6, 255, 178, 106, 6, 255, 172, 99, 0, 255, 172, 99, 3, 255, 169, 94, 6, 255, 169, 94, 8, 255, 168, 95, 7, 255, 164, 90, 4, 255, 165, 90, 4, 255, 165, 90, 4, 255, 158, 87, 0, 255, 160, 88, 1, 255, 163, 87, 3, 255, 161, 84, 6, 255, 155, 80, 6, 255, 150, 77, 4, 255, 152, 77, 5, 255, 151, 72, 1, 255, 152, 74, 4, 255, 147, 70, 5, 255, 143, 66, 6, 255, 140, 65, 2, 255, 132, 60, 3, 255, 124, 57, 2, 255, 117, 48, 4, 255, 108, 39, 5, 255, 109, 43, 3, 255, 110, 44, 2, 255, 105, 40, 2, 255, 96, 34, 2, 255, 91, 29, 0, 255, 99, 38, 3, 255, 102, 39, 2, 255, 93, 30, 0, 255, 94, 39, 4, 255, 107, 43, 7, 255, 104, 39, 3, 255, 106, 36, 3, 255, 113, 38, 4, 255, 117, 43, 3, 255, 121, 43, 3, 255, 124, 42, 3, 255, 123, 44, 4, 255, 120, 42, 3, 255, 119, 36, 2, 255, 117, 34, 2, 255, 104, 30, 1, 255, 98, 31, 3, 255, 99, 30, 2, 255, 101, 28, 2, 255, 106, 31, 3, 255, 103, 27, 3, 255, 76, 22, 1, 255, 95, 30, 2, 255, 120, 44, 5, 255, 106, 40, 2, 255, 103, 36, 6, 255, 105, 35, 2, 255, 98, 36, 1, 255, 98, 34, 2, 255, 102, 31, 0, 255, 98, 31, 2, 255, 88, 26, 3, 255, 74, 22, 2, 255, 78, 26, 6, 255, 85, 30, 4, 255, 85, 27, 3, 255, 96, 28, 3, 255, 88, 34, 3, 255, 99, 40, 6, 255, 102, 41, 4, 255, 116, 43, 5, 255, 122, 46, 4, 255, 123, 53, 0, 255, 129, 57, 1, 255, 131, 49, 1, 255, 129, 52, 1, 255, 134, 58, 3, 255, 133, 57, 2, 255, 133, 58, 2, 255, 133, 56, 1, 255, 126, 57, 1, 255, 126, 59, 4, 255, 120, 57, 5, 255, 116, 47, 3, 255, 100, 33, 3, 255, 72, 18, 0, 255, 66, 18, 4, 255, 77, 23, 8, 255, 79, 20, 2, 255, 75, 19, 6, 255, 60, 17, 4, 255, 51, 14, 4, 255, 59, 20, 2, 255, 67, 22, 2, 255, 72, 20, 2, 255, 74, 22, 3, 255, 78, 22, 4, 255, 78, 20, 1, 255, 80, 21, 2, 255, 81, 21, 2, 255, 83, 22, 1, 255, 90, 26, 3, 255, 89, 27, 3, 255, 82, 23, 3, 255, 77, 19, 3, 255, 79, 17, 5, 255, 78, 15, 3, 255, 89, 28, 2, 255, 119, 49, 6, 255, 135, 50, 5, 255, 127, 44, 1, 255, 114, 39, 1, 255, 98, 25, 4, 255, 66, 15, 5, 255, 60, 19, 0, 255, 84, 21, 2, 255, 4, 4, 2, 255, 5, 3, 2, 255, 4, 3, 2, 255, 7, 6, 2, 255, 10, 7, 2, 255, 10, 6, 2, 255, 12, 8, 3, 255, 14, 8, 2, 255, 15, 10, 3, 255, 16, 12, 3, 255, 15, 11, 1, 255, 15, 13, 1, 255, 16, 15, 3, 255, 16, 17, 7, 255, 20, 17, 7, 255, 24, 18, 6, 255, 24, 20, 5, 255, 25, 23, 5, 255, 30, 29, 9, 255, 36, 26, 12, 255, 32, 33, 7, 255, 38, 40, 3, 255, 32, 45, 7, 255, 40, 49, 25, 255, 47, 48, 27, 255, 42, 43, 20, 255, 38, 47, 17, 255, 75, 57, 15, 255, 130, 100, 16, 255, 153, 121, 25, 255, 127, 98, 19, 255, 77, 64, 13, 255, 56, 56, 7, 255, 48, 51, 9, 255, 52, 49, 4, 255, 53, 42, 15, 255, 47, 43, 14, 255, 48, 42, 4, 255, 45, 43, 3, 255, 48, 40, 2, 255, 66, 51, 24, 255, 64, 61, 48, 255, 64, 64, 46, 255, 74, 67, 50, 255, 74, 72, 57, 255, 69, 71, 56, 255, 64, 67, 50, 255, 64, 65, 50, 255, 68, 66, 51, 255, 67, 64, 46, 255, 63, 63, 41, 255, 65, 66, 45, 255, 68, 61, 35, 255, 55, 49, 13, 255, 56, 56, 23, 255, 52, 47, 27, 255, 49, 33, 8, 255, 52, 29, 3, 255, 52, 24, 7, 255, 62, 38, 2, 255, 66, 45, 4, 255, 67, 45, 6, 255, 60, 33, 3, 255, 57, 29, 5, 255, 60, 29, 1, 255, 69, 30, 2, 255, 75, 32, 4, 255, 70, 33, 2, 255, 63, 32, 2, 255, 65, 32, 3, 255, 64, 32, 3, 255, 67, 32, 5, 255, 69, 32, 5, 255, 62, 29, 1, 255, 61, 32, 2, 255, 63, 30, 2, 255, 63, 28, 2, 255, 63, 34, 5, 255, 61, 34, 2, 255, 67, 34, 2, 255, 71, 39, 7, 255, 63, 37, 2, 255, 70, 36, 3, 255, 73, 38, 3, 255, 78, 36, 4, 255, 78, 34, 3, 255, 76, 39, 4, 255, 76, 43, 5, 255, 78, 42, 5, 255, 79, 39, 2, 255, 81, 38, 3, 255, 86, 37, 2, 255, 85, 43, 5, 255, 79, 43, 3, 255, 80, 39, 1, 255, 87, 38, 5, 255, 81, 43, 4, 255, 83, 44, 4, 255, 85, 42, 2, 255, 84, 42, 2, 255, 85, 43, 3, 255, 86, 42, 2, 255, 87, 42, 1, 255, 90, 47, 4, 255, 89, 46, 3, 255, 87, 45, 3, 255, 87, 45, 3, 255, 87, 45, 3, 255, 82, 43, 1, 255, 85, 48, 2, 255, 89, 45, 0, 255, 93, 43, 1, 255, 92, 43, 2, 255, 89, 45, 3, 255, 87, 48, 2, 255, 89, 49, 3, 255, 87, 47, 1, 255, 90, 49, 3, 255, 93, 52, 6, 255, 92, 51, 5, 255, 91, 50, 3, 255, 91, 50, 4, 255, 89, 46, 4, 255, 95, 48, 4, 255, 104, 52, 3, 255, 132, 67, 7, 255, 158, 79, 7, 255, 176, 89, 6, 255, 183, 96, 0, 255, 176, 91, 2, 255, 175, 86, 5, 255, 180, 91, 3, 255, 176, 88, 1, 255, 172, 87, 4, 255, 179, 91, 9, 255, 181, 93, 8, 255, 182, 96, 3, 255, 188, 101, 2, 255, 188, 98, 1, 255, 188, 95, 8, 255, 172, 80, 3, 255, 181, 92, 13, 255, 185, 95, 12, 255, 183, 94, 3, 255, 190, 101, 7, 255, 189, 101, 8, 255, 183, 94, 3, 255, 189, 99, 6, 255, 189, 103, 1, 255, 185, 101, 2, 255, 186, 101, 8, 255, 184, 100, 6, 255, 184, 101, 5, 255, 186, 102, 11, 255, 181, 102, 9, 255, 177, 98, 3, 255, 176, 96, 8, 255, 171, 95, 10, 255, 173, 93, 3, 255, 172, 92, 11, 255, 172, 91, 14, 255, 176, 97, 3, 255, 170, 90, 2, 255, 168, 88, 5, 255, 171, 91, 15, 255, 169, 91, 17, 255, 164, 88, 9, 255, 169, 88, 8, 255, 165, 87, 9, 255, 155, 88, 1, 255, 167, 95, 11, 255, 169, 93, 13, 255, 162, 89, 9, 255, 157, 93, 5, 255, 159, 92, 10, 255, 152, 90, 7, 255, 151, 87, 6, 255, 156, 91, 8, 255, 146, 93, 9, 255, 152, 93, 9, 255, 148, 91, 19, 255, 141, 84, 18, 255, 143, 93, 8, 255, 148, 85, 14, 255, 134, 78, 20, 255, 142, 84, 8, 255, 143, 85, 4, 255, 129, 76, 7, 255, 116, 74, 15, 255, 112, 70, 15, 255, 128, 81, 12, 255, 136, 87, 6, 255, 143, 87, 3, 255, 107, 63, 12, 255, 91, 63, 17, 255, 112, 78, 19, 255, 118, 74, 17, 255, 122, 85, 18, 255, 117, 84, 11, 255, 114, 75, 15, 255, 109, 76, 7, 255, 107, 74, 13, 255, 108, 72, 13, 255, 111, 73, 16, 255, 108, 71, 11, 255, 108, 76, 7, 255, 107, 78, 5, 255, 103, 75, 9, 255, 103, 77, 11, 255, 103, 78, 10, 255, 104, 76, 14, 255, 107, 83, 12, 255, 113, 80, 13, 255, 111, 84, 2, 255, 105, 84, 12, 255, 108, 80, 12, 255, 115, 81, 17, 255, 116, 81, 11, 255, 114, 81, 14, 255, 109, 85, 19, 255, 116, 84, 13, 255, 116, 80, 7, 255, 119, 85, 11, 255, 120, 83, 9, 255, 122, 82, 10, 255, 121, 83, 18, 255, 125, 85, 11, 255, 124, 84, 13, 255, 136, 88, 10, 255, 134, 88, 9, 255, 127, 87, 12, 255, 138, 92, 11, 255, 133, 88, 11, 255, 127, 84, 7, 255, 119, 77, 14, 255, 114, 80, 13, 255, 118, 81, 14, 255, 113, 78, 14, 255, 110, 76, 10, 255, 115, 84, 15, 255, 143, 98, 9, 255, 156, 98, 2, 255, 152, 107, 19, 255, 168, 118, 9, 255, 170, 118, 7, 255, 169, 121, 8, 255, 174, 123, 5, 255, 179, 126, 6, 255, 178, 127, 2, 255, 183, 134, 3, 255, 184, 135, 1, 255, 190, 142, 13, 255, 188, 142, 7, 255, 187, 141, 2, 255, 190, 147, 2, 255, 189, 148, 6, 255, 196, 147, 9, 255, 199, 160, 2, 255, 200, 160, 6, 255, 192, 149, 11, 255, 153, 103, 17, 255, 169, 113, 14, 255, 153, 93, 17, 255, 177, 131, 17, 255, 187, 143, 10, 255, 192, 141, 9, 255, 191, 143, 3, 255, 196, 148, 9, 255, 203, 152, 10, 255, 200, 156, 10, 255, 202, 158, 4, 255, 205, 154, 10, 255, 203, 151, 9, 255, 200, 148, 0, 255, 201, 146, 0, 255, 198, 144, 3, 255, 194, 138, 1, 255, 193, 134, 3, 255, 191, 130, 6, 255, 187, 122, 8, 255, 185, 119, 8, 255, 183, 115, 7, 255, 183, 116, 3, 255, 182, 115, 2, 255, 177, 109, 1, 255, 172, 102, 3, 255, 173, 103, 8, 255, 170, 100, 5, 255, 172, 99, 4, 255, 168, 96, 3, 255, 163, 93, 2, 255, 165, 91, 4, 255, 162, 89, 4, 255, 158, 87, 3, 255, 160, 90, 2, 255, 162, 89, 1, 255, 160, 85, 2, 255, 156, 81, 1, 255, 155, 82, 5, 255, 152, 77, 3, 255, 149, 74, 1, 255, 144, 72, 4, 255, 142, 70, 2, 255, 143, 69, 1, 255, 142, 63, 4, 255, 142, 65, 7, 255, 133, 60, 3, 255, 113, 46, 0, 255, 104, 41, 7, 255, 101, 40, 4, 255, 106, 38, 2, 255, 113, 39, 8, 255, 103, 34, 4, 255, 95, 32, 2, 255, 99, 39, 3, 255, 102, 39, 2, 255, 95, 31, 2, 255, 93, 37, 5, 255, 100, 38, 4, 255, 96, 33, 0, 255, 99, 39, 2, 255, 108, 46, 1, 255, 125, 47, 1, 255, 129, 42, 6, 255, 118, 40, 9, 255, 109, 35, 3, 255, 98, 33, 0, 255, 85, 28, 0, 255, 76, 24, 6, 255, 64, 21, 5, 255, 58, 21, 3, 255, 57, 20, 2, 255, 57, 22, 4, 255, 51, 20, 1, 255, 51, 17, 1, 255, 43, 18, 5, 255, 55, 19, 3, 255, 102, 30, 6, 255, 104, 38, 3, 255, 87, 31, 2, 255, 96, 30, 2, 255, 98, 32, 2, 255, 92, 32, 3, 255, 92, 28, 0, 255, 85, 26, 0, 255, 76, 27, 2, 255, 89, 33, 2, 255, 95, 40, 10, 255, 87, 33, 3, 255, 96, 38, 0, 255, 108, 47, 2, 255, 117, 46, 8, 255, 114, 40, 1, 255, 115, 41, 1, 255, 121, 45, 2, 255, 124, 51, 1, 255, 125, 56, 1, 255, 126, 56, 2, 255, 130, 54, 5, 255, 132, 57, 3, 255, 135, 57, 0, 255, 125, 47, 5, 255, 119, 47, 10, 255, 123, 53, 3, 255, 124, 51, 5, 255, 122, 46, 3, 255, 104, 40, 4, 255, 93, 30, 4, 255, 77, 22, 2, 255, 70, 23, 4, 255, 76, 21, 5, 255, 68, 18, 3, 255, 74, 15, 1, 255, 74, 22, 1, 255, 57, 19, 0, 255, 62, 16, 3, 255, 67, 14, 4, 255, 64, 19, 3, 255, 64, 19, 2, 255, 77, 22, 3, 255, 82, 24, 6, 255, 79, 21, 4, 255, 81, 20, 3, 255, 89, 22, 5, 255, 82, 22, 8, 255, 80, 20, 1, 255, 84, 21, 1, 255, 89, 23, 4, 255, 83, 21, 5, 255, 67, 17, 2, 255, 67, 17, 1, 255, 104, 33, 3, 255, 142, 53, 2, 255, 148, 61, 3, 255, 134, 49, 2, 255, 119, 39, 5, 255, 93, 23, 1, 255, 74, 15, 2, 255, 68, 21, 1, 255, 81, 21, 3, 255, 7, 6, 1, 255, 7, 6, 2, 255, 7, 4, 1, 255, 11, 7, 2, 255, 12, 9, 1, 255, 11, 6, 1, 255, 15, 9, 3, 255, 14, 8, 2, 255, 15, 10, 5, 255, 16, 11, 4, 255, 15, 12, 1, 255, 17, 15, 3, 255, 17, 16, 2, 255, 18, 19, 2, 255, 22, 20, 4, 255, 29, 25, 6, 255, 33, 29, 6, 255, 31, 30, 5, 255, 30, 31, 5, 255, 33, 30, 12, 255, 39, 40, 7, 255, 34, 44, 1, 255, 40, 39, 5, 255, 56, 44, 22, 255, 40, 43, 16, 255, 60, 51, 25, 255, 122, 99, 29, 255, 137, 110, 22, 255, 103, 90, 20, 255, 56, 54, 7, 255, 38, 39, 17, 255, 45, 49, 20, 255, 53, 52, 10, 255, 57, 55, 8, 255, 57, 51, 3, 255, 53, 49, 3, 255, 47, 43, 13, 255, 52, 41, 9, 255, 46, 39, 4, 255, 41, 36, 6, 255, 61, 49, 16, 255, 65, 62, 39, 255, 66, 64, 30, 255, 78, 68, 37, 255, 74, 75, 48, 255, 69, 67, 55, 255, 69, 69, 60, 255, 66, 67, 47, 255, 65, 66, 33, 255, 67, 65, 55, 255, 60, 62, 50, 255, 61, 65, 48, 255, 67, 61, 39, 255, 61, 52, 24, 255, 53, 53, 18, 255, 52, 53, 27, 255, 49, 37, 10, 255, 53, 29, 1, 255, 55, 30, 8, 255, 56, 39, 3, 255, 62, 48, 7, 255, 65, 45, 8, 255, 60, 31, 3, 255, 56, 25, 3, 255, 47, 26, 3, 255, 48, 26, 1, 255, 55, 26, 3, 255, 62, 27, 3, 255, 63, 27, 3, 255, 62, 29, 5, 255, 61, 30, 2, 255, 64, 29, 1, 255, 66, 31, 3, 255, 62, 31, 2, 255, 67, 35, 4, 255, 69, 36, 5, 255, 74, 37, 6, 255, 81, 37, 3, 255, 91, 38, 5, 255, 84, 37, 3, 255, 81, 39, 4, 255, 82, 35, 1, 255, 84, 36, 0, 255, 76, 39, 1, 255, 77, 40, 4, 255, 74, 37, 2, 255, 75, 41, 5, 255, 73, 39, 1, 255, 80, 41, 3, 255, 82, 41, 2, 255, 79, 40, 2, 255, 78, 42, 0, 255, 78, 43, 3, 255, 84, 43, 4, 255, 85, 38, 3, 255, 85, 40, 6, 255, 81, 44, 6, 255, 83, 42, 3, 255, 85, 43, 3, 255, 86, 44, 3, 255, 85, 44, 1, 255, 88, 45, 2, 255, 87, 43, 1, 255, 87, 44, 1, 255, 86, 44, 1, 255, 87, 46, 2, 255, 89, 45, 3, 255, 90, 45, 4, 255, 88, 43, 1, 255, 88, 47, 2, 255, 95, 50, 3, 255, 95, 48, 4, 255, 93, 45, 3, 255, 92, 48, 5, 255, 92, 51, 4, 255, 86, 49, 2, 255, 90, 52, 5, 255, 89, 48, 3, 255, 91, 49, 2, 255, 92, 48, 1, 255, 90, 46, 1, 255, 100, 51, 5, 255, 94, 51, 6, 255, 86, 52, 7, 255, 94, 48, 7, 255, 98, 50, 5, 255, 103, 56, 0, 255, 125, 62, 5, 255, 138, 69, 6, 255, 148, 73, 11, 255, 154, 73, 3, 255, 165, 79, 5, 255, 172, 87, 5, 255, 163, 87, 2, 255, 174, 91, 6, 255, 176, 88, 1, 255, 172, 88, 3, 255, 181, 97, 8, 255, 182, 97, 2, 255, 187, 101, 4, 255, 181, 97, 2, 255, 179, 92, 6, 255, 177, 89, 9, 255, 178, 91, 4, 255, 187, 103, 4, 255, 183, 97, 4, 255, 175, 86, 9, 255, 184, 95, 3, 255, 188, 99, 10, 255, 188, 103, 6, 255, 187, 104, 3, 255, 176, 92, 3, 255, 174, 92, 5, 255, 178, 96, 4, 255, 171, 92, 7, 255, 172, 91, 9, 255, 174, 90, 13, 255, 172, 93, 7, 255, 172, 89, 0, 255, 167, 83, 7, 255, 156, 79, 11, 255, 165, 89, 13, 255, 159, 83, 14, 255, 158, 84, 8, 255, 160, 91, 7, 255, 150, 78, 5, 255, 145, 82, 11, 255, 146, 89, 11, 255, 144, 87, 7, 255, 149, 87, 3, 255, 156, 84, 10, 255, 152, 88, 4, 255, 138, 86, 8, 255, 136, 83, 3, 255, 133, 84, 4, 255, 142, 87, 7, 255, 150, 88, 12, 255, 140, 83, 6, 255, 129, 75, 6, 255, 121, 71, 11, 255, 115, 73, 18, 255, 111, 69, 18, 255, 111, 72, 12, 255, 119, 65, 13, 255, 120, 75, 19, 255, 127, 77, 8, 255, 96, 62, 8, 255, 103, 63, 16, 255, 93, 62, 20, 255, 88, 66, 20, 255, 114, 86, 12, 255, 146, 88, 16, 255, 136, 79, 12, 255, 87, 64, 15, 255, 86, 66, 15, 255, 88, 64, 21, 255, 94, 68, 11, 255, 118, 81, 17, 255, 110, 66, 23, 255, 87, 61, 12, 255, 96, 77, 11, 255, 103, 73, 5, 255, 109, 76, 10, 255, 104, 74, 16, 255, 107, 77, 15, 255, 112, 78, 15, 255, 111, 74, 17, 255, 106, 73, 8, 255, 106, 75, 11, 255, 111, 78, 14, 255, 115, 82, 4, 255, 110, 78, 10, 255, 108, 77, 14, 255, 110, 86, 9, 255, 111, 86, 8, 255, 112, 77, 14, 255, 110, 79, 12, 255, 109, 80, 20, 255, 114, 81, 16, 255, 116, 79, 18, 255, 122, 81, 10, 255, 118, 81, 12, 255, 117, 79, 29, 255, 124, 81, 14, 255, 129, 89, 8, 255, 125, 88, 9, 255, 123, 87, 8, 255, 125, 84, 18, 255, 125, 78, 20, 255, 129, 85, 9, 255, 130, 90, 10, 255, 137, 89, 15, 255, 136, 85, 16, 255, 131, 83, 11, 255, 124, 80, 10, 255, 119, 80, 17, 255, 116, 75, 15, 255, 100, 73, 17, 255, 98, 76, 7, 255, 128, 89, 15, 255, 152, 95, 12, 255, 156, 97, 6, 255, 157, 100, 8, 255, 160, 96, 11, 255, 165, 109, 4, 255, 164, 111, 16, 255, 165, 110, 6, 255, 173, 116, 2, 255, 171, 118, 9, 255, 173, 122, 9, 255, 173, 121, 2, 255, 166, 115, 4, 255, 166, 115, 7, 255, 161, 110, 0, 255, 180, 133, 10, 255, 191, 147, 9, 255, 189, 144, 6, 255, 195, 146, 10, 255, 190, 147, 8, 255, 203, 162, 13, 255, 178, 126, 5, 255, 152, 95, 10, 255, 149, 96, 10, 255, 184, 133, 6, 255, 185, 142, 6, 255, 192, 144, 4, 255, 198, 143, 14, 255, 194, 152, 11, 255, 205, 152, 9, 255, 205, 159, 3, 255, 204, 156, 1, 255, 202, 152, 3, 255, 202, 149, 7, 255, 202, 148, 7, 255, 201, 145, 6, 255, 195, 140, 6, 255, 194, 137, 5, 255, 194, 135, 6, 255, 192, 132, 5, 255, 188, 126, 2, 255, 186, 123, 1, 255, 185, 120, 2, 255, 185, 117, 3, 255, 181, 114, 2, 255, 180, 112, 3, 255, 178, 109, 5, 255, 173, 105, 5, 255, 173, 105, 8, 255, 172, 98, 2, 255, 169, 96, 2, 255, 166, 92, 2, 255, 166, 91, 4, 255, 163, 89, 2, 255, 164, 92, 4, 255, 163, 91, 3, 255, 163, 89, 2, 255, 163, 86, 4, 255, 161, 83, 5, 255, 158, 81, 8, 255, 149, 71, 2, 255, 148, 71, 1, 255, 145, 75, 3, 255, 146, 74, 3, 255, 147, 73, 0, 255, 144, 66, 1, 255, 141, 63, 4, 255, 132, 54, 9, 255, 109, 39, 7, 255, 113, 49, 4, 255, 109, 47, 2, 255, 105, 39, 0, 255, 109, 41, 4, 255, 103, 35, 5, 255, 98, 33, 2, 255, 103, 43, 4, 255, 103, 38, 2, 255, 95, 31, 2, 255, 87, 31, 2, 255, 92, 34, 3, 255, 93, 32, 2, 255, 107, 44, 1, 255, 117, 50, 4, 255, 119, 43, 2, 255, 112, 34, 0, 255, 102, 33, 2, 255, 100, 33, 2, 255, 93, 31, 1, 255, 72, 23, 1, 255, 55, 22, 4, 255, 54, 22, 6, 255, 59, 21, 0, 255, 57, 21, 0, 255, 48, 23, 4, 255, 42, 21, 10, 255, 44, 18, 5, 255, 57, 20, 11, 255, 39, 18, 5, 255, 65, 19, 3, 255, 95, 27, 5, 255, 94, 30, 2, 255, 94, 30, 4, 255, 95, 25, 1, 255, 95, 34, 8, 255, 86, 28, 4, 255, 78, 21, 0, 255, 80, 32, 5, 255, 95, 36, 4, 255, 92, 32, 3, 255, 75, 25, 3, 255, 96, 37, 2, 255, 111, 45, 4, 255, 116, 38, 1, 255, 116, 47, 3, 255, 121, 56, 4, 255, 125, 58, 4, 255, 124, 55, 5, 255, 125, 54, 7, 255, 127, 55, 4, 255, 127, 58, 1, 255, 132, 64, 1, 255, 139, 62, 2, 255, 109, 34, 7, 255, 83, 16, 8, 255, 86, 21, 2, 255, 91, 25, 11, 255, 89, 28, 2, 255, 79, 23, 1, 255, 70, 22, 3, 255, 68, 20, 3, 255, 71, 20, 2, 255, 74, 21, 0, 255, 68, 22, 3, 255, 63, 18, 3, 255, 67, 18, 3, 255, 63, 13, 3, 255, 54, 14, 0, 255, 61, 18, 7, 255, 64, 18, 1, 255, 68, 21, 2, 255, 77, 24, 1, 255, 81, 25, 3, 255, 81, 23, 2, 255, 84, 24, 1, 255, 86, 23, 0, 255, 77, 14, 4, 255, 79, 20, 3, 255, 82, 26, 5, 255, 80, 24, 4, 255, 72, 18, 1, 255, 68, 17, 1, 255, 84, 28, 9, 255, 109, 42, 8, 255, 125, 51, 1, 255, 137, 58, 3, 255, 130, 44, 0, 255, 113, 34, 4, 255, 81, 21, 2, 255, 70, 17, 1, 255, 74, 28, 9, 255, 78, 21, 6, 255, 8, 5, 0, 255, 9, 6, 1, 255, 10, 6, 2, 255, 14, 10, 2, 255, 15, 11, 0, 255, 14, 8, 0, 255, 16, 9, 2, 255, 14, 9, 2, 255, 14, 10, 2, 255, 15, 11, 4, 255, 16, 14, 3, 255, 20, 18, 4, 255, 19, 18, 3, 255, 19, 20, 4, 255, 22, 20, 6, 255, 29, 25, 8, 255, 32, 29, 4, 255, 31, 30, 3, 255, 31, 32, 7, 255, 34, 36, 12, 255, 38, 39, 5, 255, 37, 47, 5, 255, 54, 45, 12, 255, 33, 36, 12, 255, 67, 63, 27, 255, 129, 99, 28, 255, 109, 86, 15, 255, 47, 54, 6, 255, 41, 42, 12, 255, 45, 57, 12, 255, 48, 55, 18, 255, 49, 51, 17, 255, 59, 53, 13, 255, 57, 48, 23, 255, 50, 44, 20, 255, 53, 45, 7, 255, 57, 39, 5, 255, 46, 38, 11, 255, 41, 37, 10, 255, 37, 31, 5, 255, 52, 41, 16, 255, 66, 56, 37, 255, 61, 58, 38, 255, 66, 60, 40, 255, 74, 70, 43, 255, 71, 65, 58, 255, 65, 64, 54, 255, 65, 66, 49, 255, 63, 62, 45, 255, 62, 60, 50, 255, 63, 63, 49, 255, 64, 63, 55, 255, 69, 65, 37, 255, 66, 56, 17, 255, 55, 44, 20, 255, 55, 51, 31, 255, 61, 52, 19, 255, 54, 30, 3, 255, 55, 27, 3, 255, 51, 29, 9, 255, 62, 43, 11, 255, 62, 46, 15, 255, 52, 36, 6, 255, 52, 25, 1, 255, 49, 26, 3, 255, 55, 28, 5, 255, 60, 28, 3, 255, 61, 28, 2, 255, 64, 32, 2, 255, 67, 35, 3, 255, 65, 33, 1, 255, 66, 32, 3, 255, 70, 32, 5, 255, 65, 29, 2, 255, 61, 32, 2, 255, 64, 33, 2, 255, 71, 31, 3, 255, 72, 31, 2, 255, 76, 33, 1, 255, 74, 35, 0, 255, 73, 38, 2, 255, 75, 38, 0, 255, 79, 40, 1, 255, 83, 40, 2, 255, 82, 43, 5, 255, 79, 43, 3, 255, 83, 45, 5, 255, 85, 42, 3, 255, 87, 44, 3, 255, 87, 45, 3, 255, 84, 42, 3, 255, 85, 42, 2, 255, 83, 38, 0, 255, 81, 42, 3, 255, 80, 42, 4, 255, 85, 37, 3, 255, 82, 40, 2, 255, 86, 42, 3, 255, 87, 43, 2, 255, 86, 45, 2, 255, 88, 49, 4, 255, 89, 48, 3, 255, 90, 47, 5, 255, 89, 46, 4, 255, 86, 42, 1, 255, 88, 43, 1, 255, 88, 42, 0, 255, 89, 43, 1, 255, 90, 43, 1, 255, 91, 47, 4, 255, 94, 51, 4, 255, 85, 43, 0, 255, 86, 47, 2, 255, 91, 50, 5, 255, 92, 46, 1, 255, 90, 49, 2, 255, 93, 51, 6, 255, 92, 50, 3, 255, 92, 47, 1, 255, 98, 50, 4, 255, 98, 49, 3, 255, 97, 50, 3, 255, 92, 51, 1, 255, 90, 50, 0, 255, 94, 51, 3, 255, 96, 54, 4, 255, 92, 51, 0, 255, 95, 50, 1, 255, 89, 46, 6, 255, 97, 51, 6, 255, 111, 57, 6, 255, 123, 59, 4, 255, 128, 61, 1, 255, 135, 70, 5, 255, 150, 76, 6, 255, 154, 74, 3, 255, 151, 74, 5, 255, 157, 79, 6, 255, 165, 85, 5, 255, 171, 89, 4, 255, 172, 92, 3, 255, 174, 95, 7, 255, 172, 93, 3, 255, 172, 92, 6, 255, 175, 94, 6, 255, 177, 95, 6, 255, 174, 90, 10, 255, 178, 90, 6, 255, 184, 96, 5, 255, 178, 90, 8, 255, 176, 93, 8, 255, 173, 94, 5, 255, 168, 87, 8, 255, 159, 79, 10, 255, 149, 75, 8, 255, 154, 83, 2, 255, 149, 77, 6, 255, 147, 80, 9, 255, 148, 77, 19, 255, 142, 75, 7, 255, 139, 75, 10, 255, 142, 78, 6, 255, 141, 77, 3, 255, 140, 79, 3, 255, 135, 72, 4, 255, 130, 68, 11, 255, 135, 78, 10, 255, 135, 75, 4, 255, 131, 68, 16, 255, 127, 70, 7, 255, 129, 74, 2, 255, 126, 68, 8, 255, 119, 63, 11, 255, 116, 64, 11, 255, 109, 70, 16, 255, 121, 68, 15, 255, 106, 55, 8, 255, 87, 56, 12, 255, 87, 51, 15, 255, 80, 51, 11, 255, 97, 64, 12, 255, 135, 84, 6, 255, 114, 70, 9, 255, 107, 67, 17, 255, 120, 79, 16, 255, 109, 71, 12, 255, 92, 65, 12, 255, 101, 68, 12, 255, 93, 64, 7, 255, 94, 63, 2, 255, 102, 68, 4, 255, 114, 75, 18, 255, 90, 62, 14, 255, 82, 61, 10, 255, 85, 65, 16, 255, 89, 66, 17, 255, 88, 69, 11, 255, 108, 79, 13, 255, 97, 68, 11, 255, 99, 68, 11, 255, 106, 74, 23, 255, 102, 78, 11, 255, 105, 77, 7, 255, 110, 77, 7, 255, 105, 73, 16, 255, 104, 72, 18, 255, 105, 72, 15, 255, 106, 73, 19, 255, 107, 77, 17, 255, 110, 80, 14, 255, 114, 79, 9, 255, 114, 77, 15, 255, 115, 78, 12, 255, 116, 81, 12, 255, 113, 82, 11, 255, 114, 82, 12, 255, 114, 80, 16, 255, 113, 78, 25, 255, 113, 79, 19, 255, 114, 80, 16, 255, 117, 79, 14, 255, 123, 85, 8, 255, 128, 85, 12, 255, 130, 78, 17, 255, 130, 86, 9, 255, 129, 85, 7, 255, 127, 86, 13, 255, 129, 82, 9, 255, 128, 84, 22, 255, 126, 85, 16, 255, 132, 83, 11, 255, 144, 88, 16, 255, 143, 89, 13, 255, 129, 82, 15, 255, 117, 78, 13, 255, 107, 76, 14, 255, 109, 75, 11, 255, 117, 85, 6, 255, 127, 89, 11, 255, 156, 97, 15, 255, 166, 97, 8, 255, 165, 99, 12, 255, 159, 93, 2, 255, 158, 88, 8, 255, 158, 92, 11, 255, 154, 94, 11, 255, 156, 99, 4, 255, 158, 102, 5, 255, 159, 103, 13, 255, 161, 106, 11, 255, 163, 110, 4, 255, 157, 107, 7, 255, 153, 101, 6, 255, 160, 108, 3, 255, 167, 116, 7, 255, 183, 135, 6, 255, 188, 147, 4, 255, 184, 137, 8, 255, 187, 134, 14, 255, 201, 152, 4, 255, 187, 137, 4, 255, 174, 123, 6, 255, 175, 123, 9, 255, 185, 133, 10, 255, 187, 139, 5, 255, 194, 141, 4, 255, 196, 143, 8, 255, 198, 152, 7, 255, 204, 151, 5, 255, 207, 153, 9, 255, 200, 146, 4, 255, 200, 149, 0, 255, 202, 150, 5, 255, 201, 146, 17, 255, 197, 143, 14, 255, 197, 140, 8, 255, 196, 139, 7, 255, 194, 135, 6, 255, 190, 130, 3, 255, 188, 127, 2, 255, 186, 126, 2, 255, 186, 123, 2, 255, 186, 119, 7, 255, 181, 112, 7, 255, 179, 112, 6, 255, 178, 112, 1, 255, 173, 106, 2, 255, 172, 102, 7, 255, 173, 97, 8, 255, 170, 96, 6, 255, 168, 94, 5, 255, 166, 91, 2, 255, 166, 90, 1, 255, 168, 94, 1, 255, 167, 93, 3, 255, 163, 88, 2, 255, 160, 84, 0, 255, 160, 84, 1, 255, 157, 83, 3, 255, 151, 76, 2, 255, 154, 75, 4, 255, 151, 76, 9, 255, 148, 74, 4, 255, 146, 71, 1, 255, 145, 67, 6, 255, 138, 62, 2, 255, 132, 59, 1, 255, 122, 51, 6, 255, 121, 45, 9, 255, 114, 41, 5, 255, 107, 41, 3, 255, 103, 41, 4, 255, 100, 37, 3, 255, 97, 33, 3, 255, 102, 39, 3, 255, 107, 41, 5, 255, 93, 31, 4, 255, 77, 26, 0, 255, 90, 33, 5, 255, 99, 38, 8, 255, 109, 42, 4, 255, 117, 34, 3, 255, 111, 35, 2, 255, 104, 39, 3, 255, 100, 34, 3, 255, 88, 30, 5, 255, 67, 27, 5, 255, 52, 19, 1, 255, 57, 22, 3, 255, 70, 23, 3, 255, 79, 25, 1, 255, 79, 28, 4, 255, 68, 26, 3, 255, 69, 24, 3, 255, 79, 23, 3, 255, 75, 27, 2, 255, 56, 25, 2, 255, 55, 28, 5, 255, 71, 22, 2, 255, 88, 34, 4, 255, 88, 42, 8, 255, 86, 27, 1, 255, 83, 23, 3, 255, 72, 25, 3, 255, 75, 28, 2, 255, 91, 36, 5, 255, 92, 34, 2, 255, 85, 27, 1, 255, 84, 26, 2, 255, 81, 24, 0, 255, 97, 32, 7, 255, 124, 48, 5, 255, 127, 55, 5, 255, 129, 54, 4, 255, 129, 54, 1, 255, 132, 55, 1, 255, 136, 56, 2, 255, 135, 54, 5, 255, 130, 60, 4, 255, 137, 69, 4, 255, 141, 62, 4, 255, 96, 31, 3, 255, 58, 14, 4, 255, 62, 18, 1, 255, 65, 17, 6, 255, 64, 20, 0, 255, 65, 25, 2, 255, 63, 18, 0, 255, 65, 21, 2, 255, 59, 19, 1, 255, 59, 18, 2, 255, 70, 20, 1, 255, 58, 15, 0, 255, 58, 16, 8, 255, 48, 9, 7, 255, 48, 17, 3, 255, 59, 24, 5, 255, 69, 22, 0, 255, 78, 23, 1, 255, 74, 24, 2, 255, 78, 25, 4, 255, 82, 22, 3, 255, 79, 19, 2, 255, 73, 17, 3, 255, 75, 22, 0, 255, 76, 20, 1, 255, 75, 19, 3, 255, 73, 19, 4, 255, 74, 20, 1, 255, 86, 30, 2, 255, 107, 36, 5, 255, 118, 45, 4, 255, 119, 49, 1, 255, 128, 50, 3, 255, 128, 46, 2, 255, 117, 42, 6, 255, 97, 27, 7, 255, 81, 21, 3, 255, 79, 25, 3, 255, 79, 21, 3, 255, 9, 6, 1, 255, 9, 6, 2, 255, 10, 6, 2, 255, 12, 9, 2, 255, 13, 10, 0, 255, 15, 10, 2, 255, 16, 12, 3, 255, 16, 12, 2, 255, 14, 12, 2, 255, 16, 14, 4, 255, 19, 16, 4, 255, 20, 17, 3, 255, 23, 21, 6, 255, 23, 24, 10, 255, 22, 23, 10, 255, 26, 27, 8, 255, 31, 31, 5, 255, 35, 34, 6, 255, 36, 37, 13, 255, 33, 42, 8, 255, 50, 47, 6, 255, 44, 45, 6, 255, 33, 35, 8, 255, 84, 82, 11, 255, 100, 87, 19, 255, 63, 60, 20, 255, 35, 46, 28, 255, 49, 50, 16, 255, 61, 56, 14, 255, 51, 52, 20, 255, 56, 50, 16, 255, 55, 55, 4, 255, 50, 51, 20, 255, 50, 44, 23, 255, 54, 42, 25, 255, 52, 40, 19, 255, 49, 32, 14, 255, 41, 32, 13, 255, 41, 34, 3, 255, 37, 28, 1, 255, 47, 37, 10, 255, 65, 51, 30, 255, 64, 56, 46, 255, 61, 56, 40, 255, 73, 63, 46, 255, 75, 69, 58, 255, 64, 63, 51, 255, 63, 63, 60, 255, 63, 60, 50, 255, 63, 61, 40, 255, 65, 61, 45, 255, 65, 62, 49, 255, 65, 56, 51, 255, 61, 45, 21, 255, 59, 40, 10, 255, 60, 51, 20, 255, 64, 58, 21, 255, 52, 35, 6, 255, 55, 26, 2, 255, 53, 27, 7, 255, 51, 37, 10, 255, 62, 50, 6, 255, 65, 42, 2, 255, 58, 27, 1, 255, 53, 30, 5, 255, 58, 27, 5, 255, 64, 26, 3, 255, 65, 32, 6, 255, 66, 32, 2, 255, 72, 30, 1, 255, 75, 34, 6, 255, 70, 33, 5, 255, 64, 32, 3, 255, 61, 31, 2, 255, 67, 31, 3, 255, 69, 33, 4, 255, 65, 34, 2, 255, 71, 34, 2, 255, 68, 36, 1, 255, 70, 39, 5, 255, 68, 35, 4, 255, 69, 35, 4, 255, 72, 39, 6, 255, 73, 33, 2, 255, 77, 36, 4, 255, 80, 39, 5, 255, 80, 37, 2, 255, 86, 40, 5, 255, 88, 41, 6, 255, 85, 41, 4, 255, 88, 45, 6, 255, 90, 42, 5, 255, 90, 42, 4, 255, 95, 43, 7, 255, 100, 44, 8, 255, 93, 41, 2, 255, 89, 44, 4, 255, 93, 47, 6, 255, 89, 43, 1, 255, 84, 42, 0, 255, 87, 45, 2, 255, 87, 46, 2, 255, 89, 45, 2, 255, 89, 44, 2, 255, 87, 42, 0, 255, 89, 45, 3, 255, 88, 44, 3, 255, 86, 46, 3, 255, 86, 46, 4, 255, 89, 46, 6, 255, 90, 45, 3, 255, 90, 47, 4, 255, 85, 46, 2, 255, 86, 46, 1, 255, 96, 47, 1, 255, 92, 48, 1, 255, 92, 48, 1, 255, 97, 53, 5, 255, 93, 49, 2, 255, 96, 51, 4, 255, 96, 51, 4, 255, 90, 47, 1, 255, 92, 47, 3, 255, 97, 49, 3, 255, 93, 53, 2, 255, 98, 55, 4, 255, 102, 51, 3, 255, 100, 54, 4, 255, 97, 56, 0, 255, 97, 58, 1, 255, 90, 50, 1, 255, 94, 52, 2, 255, 99, 52, 4, 255, 103, 55, 8, 255, 103, 55, 7, 255, 98, 51, 2, 255, 103, 56, 3, 255, 106, 55, 1, 255, 120, 59, 7, 255, 127, 60, 8, 255, 133, 65, 13, 255, 137, 66, 13, 255, 144, 72, 7, 255, 150, 78, 2, 255, 152, 76, 4, 255, 150, 76, 9, 255, 153, 82, 4, 255, 152, 80, 5, 255, 146, 72, 3, 255, 148, 76, 6, 255, 134, 66, 6, 255, 130, 66, 7, 255, 133, 69, 11, 255, 115, 50, 5, 255, 113, 58, 1, 255, 119, 64, 1, 255, 111, 56, 9, 255, 108, 57, 10, 255, 117, 64, 10, 255, 113, 65, 7, 255, 110, 60, 5, 255, 114, 63, 10, 255, 106, 52, 4, 255, 105, 54, 6, 255, 100, 49, 7, 255, 110, 63, 8, 255, 138, 74, 9, 255, 118, 55, 9, 255, 85, 53, 12, 255, 74, 50, 6, 255, 96, 59, 10, 255, 95, 53, 7, 255, 82, 49, 14, 255, 96, 58, 9, 255, 109, 64, 11, 255, 104, 59, 11, 255, 86, 47, 7, 255, 84, 53, 5, 255, 85, 57, 8, 255, 82, 57, 12, 255, 112, 84, 7, 255, 138, 84, 9, 255, 90, 55, 1, 255, 85, 66, 8, 255, 78, 61, 7, 255, 90, 62, 13, 255, 91, 60, 17, 255, 80, 62, 6, 255, 79, 60, 13, 255, 86, 61, 20, 255, 86, 61, 7, 255, 85, 61, 3, 255, 78, 65, 11, 255, 92, 64, 14, 255, 94, 71, 7, 255, 94, 70, 11, 255, 97, 69, 13, 255, 96, 75, 12, 255, 101, 75, 5, 255, 101, 69, 19, 255, 100, 72, 19, 255, 102, 74, 6, 255, 105, 77, 3, 255, 105, 74, 19, 255, 105, 74, 18, 255, 103, 76, 8, 255, 108, 76, 10, 255, 109, 79, 8, 255, 107, 78, 18, 255, 110, 80, 11, 255, 117, 80, 13, 255, 116, 82, 16, 255, 115, 79, 14, 255, 114, 80, 9, 255, 110, 80, 10, 255, 112, 82, 17, 255, 114, 80, 13, 255, 118, 81, 11, 255, 117, 82, 11, 255, 123, 84, 17, 255, 125, 83, 16, 255, 129, 84, 16, 255, 129, 85, 16, 255, 128, 87, 16, 255, 136, 86, 12, 255, 140, 89, 14, 255, 139, 86, 14, 255, 145, 90, 7, 255, 133, 87, 8, 255, 133, 84, 15, 255, 140, 89, 10, 255, 154, 96, 18, 255, 153, 96, 5, 255, 141, 88, 4, 255, 133, 84, 12, 255, 132, 88, 14, 255, 147, 97, 13, 255, 165, 99, 15, 255, 171, 103, 7, 255, 176, 105, 4, 255, 171, 99, 2, 255, 162, 94, 9, 255, 158, 95, 12, 255, 152, 93, 10, 255, 149, 87, 8, 255, 147, 85, 3, 255, 145, 86, 10, 255, 140, 86, 10, 255, 146, 90, 5, 255, 148, 91, 11, 255, 148, 98, 5, 255, 150, 103, 4, 255, 157, 109, 2, 255, 173, 121, 8, 255, 174, 120, 15, 255, 175, 122, 9, 255, 187, 142, 6, 255, 192, 152, 10, 255, 191, 143, 12, 255, 189, 138, 4, 255, 190, 143, 8, 255, 191, 143, 6, 255, 179, 122, 3, 255, 178, 128, 16, 255, 184, 133, 2, 255, 186, 130, 4, 255, 194, 147, 3, 255, 197, 144, 7, 255, 202, 151, 6, 255, 200, 150, 6, 255, 197, 149, 6, 255, 203, 153, 2, 255, 200, 149, 2, 255, 196, 143, 8, 255, 196, 143, 6, 255, 197, 142, 6, 255, 194, 136, 4, 255, 192, 133, 4, 255, 192, 131, 5, 255, 189, 127, 5, 255, 188, 126, 6, 255, 186, 123, 6, 255, 183, 120, 7, 255, 180, 116, 7, 255, 177, 112, 4, 255, 177, 110, 3, 255, 176, 108, 5, 255, 172, 102, 5, 255, 171, 99, 3, 255, 168, 98, 1, 255, 166, 97, 2, 255, 164, 92, 1, 255, 164, 89, 3, 255, 163, 88, 7, 255, 159, 86, 6, 255, 156, 83, 3, 255, 155, 81, 2, 255, 155, 84, 4, 255, 152, 81, 4, 255, 150, 76, 3, 255, 150, 72, 2, 255, 154, 79, 3, 255, 150, 76, 4, 255, 148, 70, 5, 255, 144, 66, 3, 255, 139, 62, 2, 255, 136, 65, 3, 255, 125, 62, 3, 255, 115, 51, 8, 255, 109, 46, 2, 255, 109, 46, 1, 255, 105, 40, 1, 255, 102, 35, 1, 255, 101, 33, 6, 255, 99, 34, 2, 255, 102, 36, 1, 255, 92, 33, 6, 255, 74, 25, 0, 255, 84, 28, 1, 255, 97, 34, 6, 255, 97, 31, 2, 255, 109, 35, 4, 255, 118, 37, 8, 255, 103, 32, 4, 255, 77, 26, 2, 255, 60, 21, 2, 255, 55, 22, 4, 255, 57, 21, 4, 255, 73, 25, 7, 255, 80, 25, 4, 255, 80, 25, 1, 255, 81, 28, 3, 255, 81, 30, 3, 255, 84, 26, 0, 255, 87, 28, 4, 255, 82, 31, 1, 255, 92, 27, 8, 255, 77, 18, 9, 255, 61, 15, 3, 255, 72, 22, 1, 255, 76, 25, 4, 255, 83, 24, 3, 255, 80, 20, 1, 255, 69, 20, 1, 255, 83, 33, 7, 255, 96, 34, 4, 255, 86, 28, 3, 255, 77, 25, 2, 255, 85, 28, 1, 255, 80, 26, 4, 255, 73, 25, 3, 255, 96, 34, 5, 255, 131, 48, 1, 255, 119, 37, 5, 255, 98, 27, 6, 255, 90, 26, 1, 255, 99, 29, 0, 255, 103, 32, 2, 255, 109, 41, 4, 255, 119, 45, 4, 255, 124, 39, 4, 255, 87, 24, 0, 255, 52, 19, 1, 255, 60, 23, 3, 255, 67, 16, 0, 255, 70, 19, 3, 255, 64, 25, 4, 255, 71, 21, 4, 255, 68, 16, 2, 255, 53, 17, 2, 255, 46, 16, 2, 255, 61, 19, 4, 255, 58, 17, 4, 255, 47, 16, 4, 255, 42, 18, 1, 255, 56, 19, 3, 255, 70, 18, 2, 255, 80, 22, 7, 255, 80, 24, 2, 255, 79, 26, 0, 255, 79, 26, 4, 255, 77, 19, 7, 255, 72, 12, 5, 255, 74, 16, 6, 255, 70, 18, 5, 255, 66, 16, 0, 255, 76, 23, 0, 255, 92, 34, 4, 255, 104, 40, 4, 255, 112, 43, 1, 255, 119, 43, 2, 255, 122, 47, 0, 255, 122, 46, 0, 255, 128, 45, 2, 255, 128, 46, 2, 255, 125, 43, 2, 255, 121, 35, 4, 255, 102, 31, 4, 255, 89, 23, 1, 255, 83, 21, 0, 255, 10, 8, 3, 255, 9, 7, 3, 255, 9, 7, 3, 255, 11, 9, 3, 255, 10, 9, 2, 255, 11, 10, 3, 255, 14, 13, 3, 255, 16, 16, 4, 255, 14, 15, 5, 255, 17, 16, 5, 255, 19, 17, 5, 255, 19, 17, 3, 255, 25, 24, 6, 255, 25, 28, 7, 255, 22, 26, 6, 255, 27, 30, 8, 255, 35, 37, 5, 255, 39, 40, 6, 255, 38, 40, 8, 255, 35, 44, 9, 255, 49, 47, 1, 255, 44, 51, 8, 255, 109, 114, 18, 255, 124, 111, 9, 255, 49, 48, 8, 255, 51, 50, 26, 255, 53, 54, 26, 255, 56, 53, 23, 255, 51, 49, 24, 255, 54, 49, 22, 255, 58, 48, 17, 255, 56, 50, 26, 255, 51, 47, 25, 255, 53, 47, 14, 255, 57, 47, 5, 255, 52, 44, 12, 255, 49, 41, 20, 255, 45, 34, 2, 255, 48, 29, 4, 255, 43, 28, 3, 255, 41, 34, 5, 255, 58, 44, 15, 255, 73, 54, 24, 255, 64, 53, 41, 255, 66, 59, 45, 255, 74, 67, 57, 255, 63, 62, 52, 255, 63, 66, 52, 255, 63, 63, 51, 255, 64, 61, 41, 255, 66, 58, 42, 255, 66, 61, 53, 255, 59, 52, 44, 255, 66, 48, 27, 255, 67, 45, 14, 255, 59, 46, 21, 255, 64, 59, 27, 255, 62, 48, 6, 255, 55, 30, 0, 255, 56, 28, 7, 255, 66, 38, 9, 255, 76, 53, 8, 255, 66, 45, 8, 255, 56, 29, 9, 255, 57, 28, 1, 255, 59, 31, 3, 255, 60, 28, 1, 255, 63, 28, 1, 255, 66, 29, 1, 255, 67, 30, 1, 255, 70, 32, 4, 255, 64, 29, 2, 255, 61, 30, 1, 255, 68, 34, 6, 255, 67, 31, 4, 255, 66, 32, 3, 255, 68, 35, 5, 255, 74, 34, 4, 255, 72, 33, 1, 255, 68, 39, 3, 255, 71, 36, 2, 255, 81, 37, 4, 255, 74, 38, 3, 255, 67, 40, 4, 255, 71, 37, 2, 255, 81, 41, 4, 255, 76, 40, 2, 255, 72, 38, 0, 255, 78, 37, 1, 255, 80, 40, 2, 255, 74, 41, 1, 255, 82, 44, 3, 255, 86, 43, 2, 255, 85, 42, 2, 255, 85, 44, 1, 255, 86, 43, 0, 255, 91, 47, 5, 255, 95, 50, 7, 255, 93, 47, 3, 255, 92, 49, 4, 255, 88, 45, 1, 255, 92, 47, 4, 255, 95, 48, 3, 255, 96, 48, 3, 255, 92, 47, 3, 255, 89, 45, 3, 255, 83, 46, 2, 255, 81, 48, 5, 255, 78, 46, 3, 255, 85, 44, 2, 255, 91, 45, 4, 255, 93, 46, 4, 255, 91, 47, 4, 255, 88, 44, 0, 255, 93, 48, 2, 255, 96, 48, 2, 255, 94, 47, 2, 255, 91, 46, 2, 255, 92, 48, 3, 255, 95, 53, 4, 255, 92, 53, 4, 255, 91, 50, 4, 255, 93, 45, 1, 255, 93, 48, 2, 255, 93, 52, 2, 255, 95, 54, 3, 255, 97, 50, 1, 255, 101, 53, 2, 255, 100, 52, 4, 255, 95, 47, 5, 255, 99, 49, 5, 255, 103, 51, 4, 255, 100, 52, 0, 255, 96, 54, 4, 255, 98, 52, 6, 255, 95, 49, 1, 255, 96, 55, 5, 255, 93, 51, 3, 255, 96, 52, 8, 255, 94, 50, 6, 255, 95, 49, 4, 255, 92, 45, 4, 255, 102, 52, 5, 255, 111, 59, 10, 255, 100, 46, 3, 255, 107, 54, 7, 255, 103, 55, 3, 255, 95, 44, 8, 255, 102, 50, 10, 255, 103, 50, 9, 255, 95, 47, 4, 255, 87, 46, 6, 255, 88, 50, 5, 255, 98, 57, 4, 255, 88, 46, 8, 255, 91, 49, 6, 255, 105, 58, 4, 255, 96, 49, 7, 255, 120, 67, 6, 255, 108, 57, 8, 255, 91, 48, 5, 255, 89, 45, 7, 255, 91, 47, 7, 255, 109, 64, 12, 255, 97, 52, 11, 255, 104, 62, 14, 255, 99, 59, 2, 255, 92, 54, 5, 255, 81, 54, 9, 255, 75, 52, 13, 255, 86, 53, 9, 255, 87, 51, 9, 255, 81, 56, 4, 255, 86, 62, 8, 255, 103, 60, 12, 255, 94, 56, 11, 255, 81, 50, 16, 255, 87, 54, 18, 255, 82, 57, 5, 255, 79, 57, 5, 255, 94, 59, 19, 255, 88, 58, 16, 255, 87, 54, 12, 255, 86, 62, 7, 255, 83, 62, 13, 255, 83, 60, 10, 255, 83, 62, 8, 255, 80, 67, 8, 255, 81, 63, 12, 255, 83, 63, 10, 255, 89, 67, 8, 255, 83, 64, 6, 255, 93, 64, 17, 255, 98, 66, 26, 255, 98, 68, 6, 255, 100, 73, 10, 255, 102, 72, 15, 255, 109, 77, 16, 255, 106, 75, 17, 255, 97, 71, 17, 255, 99, 74, 13, 255, 101, 74, 12, 255, 103, 76, 8, 255, 102, 74, 14, 255, 103, 77, 12, 255, 105, 74, 19, 255, 111, 77, 20, 255, 112, 79, 9, 255, 109, 80, 9, 255, 113, 82, 12, 255, 119, 82, 12, 255, 120, 81, 6, 255, 116, 79, 16, 255, 115, 82, 11, 255, 116, 81, 6, 255, 120, 79, 11, 255, 121, 77, 14, 255, 124, 82, 12, 255, 134, 84, 20, 255, 144, 87, 12, 255, 147, 89, 11, 255, 149, 92, 11, 255, 154, 93, 11, 255, 157, 90, 12, 255, 158, 91, 12, 255, 155, 93, 10, 255, 162, 89, 10, 255, 164, 92, 11, 255, 158, 92, 13, 255, 152, 87, 7, 255, 151, 90, 14, 255, 161, 97, 19, 255, 159, 92, 5, 255, 162, 95, 11, 255, 167, 104, 8, 255, 165, 101, 6, 255, 174, 103, 5, 255, 176, 105, 10, 255, 178, 108, 6, 255, 176, 105, 6, 255, 175, 101, 6, 255, 167, 93, 4, 255, 161, 90, 9, 255, 144, 88, 14, 255, 144, 84, 10, 255, 147, 85, 7, 255, 141, 86, 11, 255, 133, 82, 9, 255, 138, 82, 7, 255, 138, 82, 5, 255, 138, 86, 4, 255, 140, 90, 11, 255, 148, 97, 6, 255, 164, 110, 8, 255, 172, 116, 4, 255, 175, 118, 7, 255, 177, 132, 8, 255, 194, 152, 4, 255, 193, 154, 8, 255, 193, 153, 15, 255, 197, 151, 5, 255, 188, 136, 8, 255, 176, 121, 2, 255, 186, 138, 4, 255, 185, 133, 5, 255, 170, 111, 7, 255, 184, 132, 8, 255, 193, 143, 9, 255, 201, 151, 4, 255, 198, 152, 5, 255, 200, 154, 8, 255, 201, 154, 11, 255, 198, 149, 9, 255, 197, 144, 9, 255, 195, 140, 3, 255, 194, 137, 4, 255, 188, 130, 2, 255, 190, 132, 5, 255, 192, 133, 9, 255, 189, 128, 6, 255, 187, 126, 5, 255, 187, 126, 6, 255, 184, 122, 7, 255, 181, 119, 3, 255, 178, 115, 4, 255, 176, 110, 6, 255, 175, 106, 6, 255, 173, 103, 4, 255, 167, 98, 3, 255, 164, 98, 3, 255, 163, 98, 3, 255, 162, 93, 2, 255, 163, 91, 5, 255, 158, 85, 5, 255, 155, 83, 5, 255, 157, 84, 7, 255, 154, 82, 4, 255, 149, 81, 2, 255, 146, 79, 1, 255, 152, 80, 6, 255, 154, 76, 7, 255, 151, 78, 2, 255, 149, 76, 0, 255, 148, 72, 1, 255, 146, 70, 0, 255, 143, 67, 4, 255, 137, 65, 3, 255, 127, 54, 1, 255, 122, 55, 1, 255, 117, 51, 5, 255, 113, 42, 6, 255, 111, 37, 4, 255, 108, 37, 4, 255, 100, 33, 3, 255, 98, 34, 2, 255, 99, 35, 0, 255, 89, 30, 3, 255, 72, 26, 3, 255, 86, 31, 3, 255, 99, 33, 3, 255, 103, 34, 2, 255, 103, 40, 5, 255, 90, 33, 3, 255, 67, 22, 2, 255, 58, 22, 5, 255, 60, 25, 5, 255, 65, 22, 3, 255, 69, 24, 3, 255, 69, 27, 2, 255, 75, 27, 4, 255, 82, 26, 5, 255, 84, 25, 2, 255, 93, 31, 3, 255, 88, 28, 1, 255, 84, 27, 5, 255, 86, 24, 2, 255, 81, 21, 3, 255, 66, 16, 4, 255, 50, 17, 0, 255, 45, 18, 3, 255, 55, 16, 4, 255, 67, 24, 2, 255, 81, 33, 5, 255, 75, 26, 2, 255, 79, 25, 1, 255, 98, 30, 5, 255, 89, 27, 1, 255, 92, 33, 2, 255, 95, 31, 5, 255, 86, 33, 4, 255, 83, 28, 0, 255, 69, 16, 3, 255, 68, 18, 4, 255, 62, 15, 3, 255, 48, 15, 2, 255, 47, 13, 4, 255, 56, 11, 5, 255, 55, 14, 5, 255, 64, 18, 5, 255, 65, 18, 0, 255, 66, 20, 4, 255, 61, 18, 3, 255, 48, 11, 2, 255, 51, 14, 6, 255, 48, 18, 1, 255, 50, 19, 2, 255, 54, 14, 2, 255, 61, 15, 3, 255, 55, 16, 2, 255, 58, 19, 3, 255, 60, 16, 1, 255, 55, 14, 0, 255, 55, 16, 2, 255, 50, 15, 4, 255, 52, 19, 1, 255, 63, 18, 2, 255, 76, 21, 1, 255, 77, 18, 2, 255, 81, 24, 5, 255, 82, 25, 3, 255, 79, 26, 2, 255, 75, 25, 1, 255, 75, 20, 1, 255, 76, 17, 2, 255, 61, 12, 5, 255, 75, 28, 1, 255, 103, 47, 0, 255, 125, 54, 4, 255, 126, 47, 3, 255, 114, 38, 2, 255, 118, 39, 4, 255, 129, 48, 3, 255, 129, 50, 0, 255, 126, 45, 1, 255, 123, 43, 2, 255, 120, 42, 0, 255, 117, 40, 1, 255, 112, 36, 3, 255, 103, 32, 2, 255, 97, 30, 4, 255, 11, 8, 4, 255, 13, 10, 4, 255, 12, 8, 2, 255, 12, 8, 4, 255, 14, 10, 3, 255, 15, 11, 1, 255, 14, 15, 2, 255, 20, 18, 8, 255, 21, 17, 7, 255, 20, 23, 2, 255, 24, 23, 6, 255, 22, 20, 4, 255, 25, 28, 8, 255, 35, 32, 6, 255, 33, 32, 2, 255, 34, 32, 12, 255, 37, 37, 10, 255, 39, 44, 5, 255, 41, 48, 4, 255, 44, 45, 10, 255, 43, 45, 7, 255, 67, 68, 10, 255, 105, 99, 17, 255, 48, 42, 5, 255, 42, 48, 8, 255, 53, 57, 4, 255, 55, 52, 13, 255, 49, 49, 33, 255, 53, 51, 20, 255, 49, 50, 12, 255, 59, 51, 38, 255, 56, 50, 25, 255, 49, 49, 14, 255, 53, 46, 3, 255, 50, 42, 12, 255, 41, 41, 9, 255, 47, 44, 5, 255, 57, 41, 5, 255, 49, 27, 5, 255, 42, 30, 2, 255, 44, 33, 6, 255, 53, 38, 6, 255, 69, 53, 22, 255, 67, 57, 37, 255, 53, 52, 41, 255, 66, 66, 52, 255, 61, 62, 42, 255, 61, 60, 48, 255, 66, 61, 58, 255, 63, 60, 40, 255, 67, 61, 45, 255, 69, 61, 50, 255, 70, 52, 37, 255, 76, 49, 33, 255, 64, 48, 8, 255, 51, 48, 24, 255, 62, 55, 29, 255, 72, 50, 10, 255, 61, 32, 1, 255, 59, 29, 1, 255, 63, 44, 4, 255, 63, 51, 9, 255, 69, 46, 9, 255, 72, 32, 6, 255, 61, 26, 1, 255, 64, 25, 3, 255, 65, 31, 4, 255, 62, 30, 2, 255, 65, 29, 2, 255, 64, 31, 3, 255, 63, 35, 4, 255, 66, 33, 4, 255, 71, 31, 3, 255, 72, 32, 3, 255, 67, 33, 2, 255, 70, 33, 2, 255, 71, 34, 2, 255, 74, 37, 3, 255, 73, 33, 1, 255, 67, 33, 1, 255, 70, 38, 2, 255, 74, 39, 2, 255, 75, 40, 0, 255, 68, 41, 3, 255, 68, 37, 2, 255, 76, 39, 2, 255, 81, 42, 5, 255, 78, 42, 3, 255, 79, 41, 1, 255, 83, 41, 3, 255, 79, 37, 2, 255, 79, 43, 2, 255, 79, 44, 1, 255, 84, 46, 2, 255, 86, 47, 4, 255, 81, 43, 1, 255, 80, 41, 1, 255, 78, 44, 1, 255, 79, 46, 1, 255, 86, 48, 5, 255, 89, 45, 1, 255, 89, 45, 0, 255, 90, 48, 1, 255, 96, 51, 6, 255, 97, 47, 4, 255, 90, 47, 2, 255, 85, 46, 1, 255, 94, 52, 2, 255, 98, 51, 2, 255, 95, 46, 2, 255, 90, 47, 3, 255, 90, 49, 3, 255, 91, 49, 2, 255, 88, 47, 0, 255, 86, 48, 3, 255, 92, 49, 6, 255, 91, 49, 6, 255, 84, 49, 6, 255, 93, 46, 4, 255, 99, 48, 4, 255, 90, 49, 3, 255, 88, 49, 4, 255, 92, 49, 4, 255, 95, 48, 2, 255, 96, 48, 2, 255, 101, 53, 3, 255, 101, 53, 5, 255, 98, 49, 1, 255, 97, 50, 4, 255, 98, 46, 4, 255, 101, 48, 5, 255, 105, 52, 6, 255, 100, 53, 2, 255, 97, 55, 2, 255, 98, 57, 2, 255, 97, 54, 1, 255, 97, 52, 3, 255, 102, 55, 3, 255, 100, 52, 4, 255, 99, 53, 6, 255, 98, 55, 2, 255, 94, 53, 5, 255, 94, 51, 3, 255, 90, 56, 1, 255, 86, 50, 5, 255, 92, 49, 4, 255, 90, 48, 3, 255, 87, 46, 7, 255, 96, 56, 2, 255, 88, 47, 6, 255, 84, 49, 2, 255, 85, 52, 8, 255, 84, 49, 5, 255, 105, 63, 7, 255, 93, 49, 2, 255, 87, 52, 0, 255, 99, 54, 4, 255, 91, 52, 11, 255, 106, 58, 10, 255, 101, 54, 10, 255, 91, 50, 5, 255, 87, 49, 4, 255, 77, 49, 2, 255, 106, 59, 17, 255, 96, 52, 12, 255, 86, 52, 11, 255, 79, 53, 10, 255, 79, 53, 4, 255, 87, 55, 7, 255, 87, 50, 10, 255, 87, 54, 10, 255, 80, 55, 5, 255, 76, 55, 5, 255, 81, 57, 7, 255, 85, 54, 9, 255, 82, 53, 12, 255, 79, 53, 11, 255, 82, 57, 9, 255, 79, 62, 5, 255, 78, 58, 12, 255, 84, 55, 15, 255, 89, 57, 8, 255, 87, 58, 19, 255, 81, 59, 13, 255, 82, 62, 11, 255, 79, 61, 5, 255, 83, 61, 11, 255, 90, 59, 16, 255, 88, 59, 12, 255, 87, 63, 15, 255, 91, 64, 9, 255, 100, 64, 16, 255, 97, 68, 12, 255, 99, 69, 15, 255, 100, 67, 26, 255, 102, 71, 11, 255, 105, 74, 8, 255, 101, 69, 15, 255, 103, 70, 21, 255, 102, 72, 13, 255, 102, 73, 7, 255, 101, 72, 14, 255, 105, 74, 10, 255, 111, 76, 11, 255, 114, 76, 11, 255, 122, 80, 11, 255, 122, 81, 9, 255, 128, 82, 10, 255, 128, 84, 8, 255, 122, 81, 13, 255, 129, 83, 12, 255, 131, 86, 13, 255, 129, 83, 19, 255, 132, 82, 14, 255, 137, 85, 16, 255, 141, 89, 9, 255, 139, 88, 22, 255, 146, 86, 22, 255, 161, 90, 15, 255, 166, 94, 13, 255, 171, 98, 7, 255, 176, 98, 13, 255, 174, 94, 16, 255, 173, 92, 9, 255, 168, 91, 19, 255, 167, 90, 18, 255, 168, 91, 8, 255, 168, 91, 3, 255, 165, 92, 7, 255, 154, 89, 10, 255, 168, 97, 16, 255, 181, 109, 11, 255, 176, 106, 8, 255, 172, 98, 13, 255, 174, 98, 11, 255, 177, 102, 7, 255, 174, 102, 3, 255, 174, 102, 7, 255, 179, 100, 13, 255, 176, 99, 6, 255, 170, 96, 2, 255, 160, 90, 7, 255, 160, 88, 10, 255, 163, 92, 3, 255, 149, 84, 10, 255, 143, 78, 19, 255, 155, 86, 7, 255, 153, 85, 1, 255, 137, 80, 7, 255, 134, 78, 10, 255, 139, 79, 10, 255, 136, 87, 6, 255, 143, 91, 7, 255, 148, 93, 13, 255, 158, 105, 6, 255, 176, 119, 12, 255, 172, 127, 12, 255, 189, 148, 13, 255, 195, 151, 2, 255, 200, 151, 13, 255, 199, 149, 15, 255, 187, 140, 2, 255, 183, 130, 8, 255, 190, 134, 5, 255, 184, 122, 7, 255, 151, 86, 6, 255, 165, 105, 6, 255, 194, 146, 11, 255, 193, 147, 8, 255, 199, 144, 7, 255, 200, 148, 6, 255, 199, 148, 2, 255, 196, 145, 0, 255, 193, 139, 2, 255, 192, 136, 5, 255, 192, 133, 3, 255, 193, 135, 10, 255, 190, 137, 6, 255, 188, 132, 4, 255, 187, 127, 7, 255, 187, 127, 5, 255, 188, 129, 7, 255, 183, 124, 5, 255, 181, 118, 5, 255, 181, 117, 7, 255, 179, 113, 3, 255, 173, 106, 0, 255, 171, 104, 2, 255, 169, 99, 4, 255, 166, 96, 10, 255, 162, 94, 13, 255, 161, 93, 7, 255, 161, 90, 2, 255, 162, 88, 2, 255, 158, 86, 3, 255, 156, 81, 3, 255, 157, 80, 3, 255, 153, 79, 1, 255, 150, 81, 2, 255, 150, 78, 3, 255, 153, 76, 5, 255, 152, 74, 4, 255, 143, 71, 2, 255, 135, 67, 0, 255, 136, 65, 2, 255, 136, 62, 4, 255, 137, 61, 5, 255, 135, 63, 4, 255, 129, 56, 2, 255, 123, 49, 1, 255, 115, 46, 1, 255, 105, 42, 0, 255, 105, 42, 4, 255, 101, 37, 2, 255, 93, 37, 1, 255, 93, 38, 3, 255, 91, 33, 3, 255, 75, 30, 1, 255, 85, 31, 2, 255, 103, 33, 4, 255, 104, 34, 1, 255, 85, 29, 4, 255, 62, 25, 4, 255, 52, 24, 2, 255, 64, 22, 2, 255, 73, 25, 4, 255, 59, 24, 3, 255, 62, 26, 6, 255, 67, 29, 3, 255, 77, 28, 0, 255, 87, 27, 2, 255, 82, 25, 4, 255, 89, 24, 3, 255, 87, 25, 4, 255, 70, 24, 2, 255, 66, 21, 4, 255, 59, 15, 2, 255, 55, 17, 3, 255, 60, 21, 4, 255, 58, 19, 1, 255, 43, 16, 2, 255, 47, 17, 5, 255, 76, 19, 5, 255, 83, 26, 3, 255, 66, 23, 1, 255, 77, 21, 6, 255, 81, 21, 2, 255, 76, 26, 1, 255, 83, 27, 4, 255, 79, 25, 4, 255, 62, 20, 3, 255, 52, 18, 4, 255, 63, 18, 5, 255, 58, 17, 4, 255, 47, 18, 0, 255, 40, 12, 4, 255, 40, 9, 5, 255, 35, 11, 4, 255, 23, 11, 1, 255, 22, 9, 2, 255, 38, 14, 5, 255, 49, 18, 2, 255, 46, 13, 1, 255, 42, 11, 4, 255, 41, 16, 1, 255, 40, 16, 3, 255, 43, 14, 5, 255, 53, 14, 6, 255, 50, 17, 0, 255, 65, 19, 3, 255, 65, 17, 3, 255, 46, 15, 0, 255, 42, 11, 3, 255, 45, 17, 4, 255, 60, 20, 1, 255, 78, 20, 4, 255, 79, 21, 5, 255, 77, 18, 3, 255, 78, 18, 4, 255, 83, 24, 2, 255, 77, 21, 0, 255, 74, 21, 2, 255, 68, 16, 1, 255, 68, 20, 3, 255, 82, 33, 4, 255, 118, 56, 3, 255, 141, 63, 3, 255, 130, 50, 5, 255, 116, 39, 5, 255, 115, 35, 5, 255, 124, 41, 3, 255, 129, 50, 4, 255, 126, 51, 3, 255, 124, 46, 1, 255, 124, 44, 0, 255, 123, 43, 1, 255, 122, 42, 3, 255, 123, 40, 3, 255, 110, 31, 2, 255, 97, 23, 3, 255, 8, 9, 3, 255, 10, 9, 3, 255, 14, 12, 4, 255, 11, 10, 3, 255, 15, 13, 4, 255, 18, 16, 4, 255, 16, 18, 1, 255, 24, 22, 7, 255, 24, 21, 6, 255, 18, 19, 0, 255, 29, 26, 6, 255, 32, 28, 9, 255, 30, 31, 6, 255, 38, 36, 8, 255, 36, 38, 7, 255, 35, 41, 10, 255, 34, 42, 12, 255, 35, 47, 5, 255, 37, 51, 9, 255, 42, 48, 12, 255, 45, 47, 14, 255, 44, 47, 16, 255, 41, 50, 9, 255, 59, 58, 8, 255, 52, 54, 6, 255, 42, 51, 6, 255, 53, 49, 5, 255, 51, 47, 17, 255, 50, 47, 9, 255, 52, 53, 6, 255, 54, 55, 18, 255, 53, 53, 21, 255, 46, 45, 10, 255, 45, 49, 9, 255, 51, 42, 12, 255, 45, 39, 10, 255, 43, 36, 10, 255, 55, 34, 5, 255, 47, 28, 6, 255, 41, 28, 6, 255, 42, 32, 6, 255, 43, 35, 7, 255, 50, 44, 18, 255, 53, 50, 32, 255, 51, 50, 43, 255, 57, 57, 54, 255, 59, 57, 48, 255, 66, 62, 48, 255, 65, 60, 48, 255, 59, 57, 43, 255, 56, 60, 38, 255, 59, 59, 43, 255, 70, 51, 23, 255, 61, 53, 18, 255, 49, 51, 12, 255, 52, 47, 20, 255, 61, 52, 38, 255, 61, 49, 22, 255, 60, 38, 9, 255, 61, 34, 2, 255, 56, 35, 3, 255, 57, 48, 14, 255, 64, 46, 9, 255, 74, 36, 7, 255, 55, 29, 4, 255, 61, 28, 6, 255, 62, 31, 3, 255, 62, 29, 3, 255, 68, 28, 3, 255, 69, 30, 5, 255, 67, 30, 2, 255, 71, 32, 1, 255, 80, 36, 7, 255, 73, 34, 2, 255, 66, 35, 3, 255, 68, 38, 4, 255, 72, 41, 6, 255, 68, 38, 2, 255, 71, 36, 2, 255, 72, 39, 6, 255, 73, 40, 4, 255, 75, 36, 0, 255, 78, 41, 4, 255, 71, 39, 3, 255, 73, 38, 3, 255, 77, 38, 2, 255, 77, 40, 2, 255, 78, 42, 3, 255, 79, 39, 0, 255, 85, 41, 3, 255, 83, 37, 4, 255, 83, 42, 5, 255, 83, 41, 4, 255, 85, 40, 3, 255, 86, 41, 4, 255, 84, 39, 4, 255, 86, 41, 7, 255, 80, 41, 3, 255, 81, 43, 4, 255, 88, 45, 6, 255, 92, 44, 5, 255, 88, 40, 2, 255, 85, 45, 1, 255, 85, 46, 1, 255, 86, 43, 1, 255, 85, 45, 2, 255, 90, 51, 7, 255, 94, 49, 5, 255, 96, 48, 1, 255, 96, 49, 3, 255, 90, 45, 2, 255, 90, 47, 5, 255, 94, 49, 5, 255, 91, 48, 2, 255, 88, 48, 2, 255, 91, 53, 2, 255, 93, 50, 4, 255, 86, 48, 3, 255, 91, 49, 3, 255, 91, 48, 1, 255, 90, 50, 0, 255, 90, 49, 2, 255, 91, 50, 5, 255, 93, 48, 2, 255, 96, 50, 4, 255, 94, 51, 2, 255, 95, 51, 2, 255, 96, 50, 2, 255, 100, 52, 3, 255, 95, 48, 2, 255, 90, 52, 4, 255, 88, 54, 2, 255, 96, 56, 4, 255, 98, 52, 3, 255, 95, 51, 1, 255, 98, 54, 5, 255, 98, 51, 4, 255, 100, 54, 1, 255, 100, 55, 4, 255, 96, 53, 3, 255, 97, 57, 3, 255, 100, 54, 7, 255, 97, 54, 6, 255, 97, 56, 5, 255, 94, 52, 8, 255, 93, 51, 5, 255, 91, 50, 0, 255, 93, 47, 4, 255, 95, 47, 3, 255, 94, 52, 2, 255, 85, 50, 4, 255, 84, 47, 4, 255, 91, 54, 3, 255, 94, 53, 8, 255, 92, 48, 12, 255, 92, 52, 10, 255, 96, 52, 7, 255, 82, 51, 5, 255, 89, 57, 0, 255, 91, 54, 1, 255, 83, 51, 6, 255, 81, 53, 8, 255, 71, 55, 5, 255, 81, 51, 10, 255, 83, 51, 2, 255, 87, 51, 7, 255, 85, 50, 4, 255, 85, 51, 2, 255, 84, 50, 2, 255, 84, 50, 6, 255, 86, 53, 7, 255, 87, 54, 6, 255, 86, 55, 7, 255, 86, 61, 11, 255, 82, 51, 10, 255, 79, 53, 11, 255, 82, 58, 8, 255, 86, 57, 8, 255, 84, 56, 10, 255, 87, 55, 20, 255, 90, 57, 14, 255, 86, 59, 7, 255, 77, 54, 17, 255, 78, 58, 9, 255, 86, 64, 6, 255, 87, 63, 6, 255, 83, 61, 10, 255, 83, 61, 12, 255, 85, 63, 13, 255, 90, 66, 14, 255, 96, 67, 17, 255, 101, 65, 26, 255, 105, 70, 11, 255, 99, 71, 7, 255, 99, 73, 11, 255, 102, 67, 22, 255, 106, 66, 15, 255, 108, 70, 11, 255, 109, 73, 13, 255, 113, 76, 12, 255, 114, 76, 7, 255, 118, 74, 18, 255, 124, 78, 17, 255, 127, 78, 17, 255, 131, 79, 23, 255, 146, 83, 14, 255, 152, 89, 9, 255, 155, 90, 21, 255, 151, 89, 14, 255, 151, 86, 12, 255, 158, 93, 12, 255, 153, 90, 13, 255, 147, 82, 13, 255, 155, 89, 8, 255, 160, 92, 9, 255, 160, 90, 11, 255, 162, 90, 13, 255, 171, 99, 12, 255, 170, 96, 5, 255, 172, 96, 10, 255, 174, 97, 9, 255, 174, 98, 11, 255, 175, 97, 16, 255, 172, 96, 9, 255, 170, 97, 8, 255, 171, 91, 11, 255, 179, 98, 11, 255, 179, 100, 20, 255, 172, 99, 6, 255, 179, 103, 21, 255, 199, 112, 12, 255, 202, 113, 8, 255, 190, 110, 6, 255, 180, 104, 4, 255, 179, 100, 13, 255, 179, 99, 16, 255, 178, 100, 6, 255, 180, 98, 4, 255, 177, 94, 7, 255, 170, 89, 6, 255, 165, 89, 5, 255, 161, 93, 10, 255, 151, 90, 7, 255, 160, 86, 7, 255, 149, 86, 7, 255, 136, 80, 12, 255, 142, 80, 10, 255, 141, 82, 7, 255, 124, 73, 9, 255, 108, 69, 8, 255, 95, 65, 8, 255, 116, 83, 5, 255, 135, 86, 7, 255, 137, 84, 6, 255, 137, 91, 5, 255, 157, 110, 17, 255, 168, 122, 8, 255, 187, 144, 11, 255, 192, 148, 8, 255, 195, 149, 7, 255, 195, 148, 12, 255, 180, 133, 5, 255, 186, 136, 13, 255, 186, 129, 10, 255, 170, 115, 6, 255, 150, 102, 5, 255, 158, 99, 8, 255, 191, 131, 8, 255, 195, 146, 7, 255, 192, 143, 7, 255, 194, 144, 6, 255, 196, 145, 5, 255, 196, 143, 5, 255, 189, 132, 5, 255, 187, 126, 7, 255, 186, 127, 2, 255, 191, 137, 3, 255, 185, 130, 3, 255, 192, 134, 6, 255, 192, 132, 1, 255, 184, 121, 2, 255, 184, 123, 6, 255, 182, 123, 2, 255, 182, 119, 4, 255, 179, 116, 5, 255, 179, 112, 4, 255, 175, 108, 2, 255, 173, 105, 4, 255, 169, 100, 5, 255, 163, 97, 1, 255, 163, 98, 3, 255, 162, 96, 5, 255, 158, 90, 4, 255, 159, 88, 4, 255, 158, 86, 4, 255, 155, 85, 4, 255, 153, 82, 5, 255, 150, 79, 2, 255, 155, 83, 6, 255, 152, 80, 6, 255, 141, 70, 1, 255, 140, 67, 7, 255, 135, 62, 4, 255, 132, 61, 1, 255, 138, 68, 1, 255, 144, 69, 4, 255, 141, 64, 5, 255, 139, 62, 4, 255, 136, 61, 3, 255, 128, 55, 3, 255, 121, 50, 1, 255, 113, 45, 2, 255, 107, 44, 2, 255, 103, 41, 4, 255, 100, 37, 7, 255, 96, 33, 1, 255, 95, 35, 5, 255, 80, 33, 3, 255, 81, 31, 1, 255, 92, 34, 3, 255, 86, 31, 5, 255, 71, 23, 1, 255, 74, 25, 6, 255, 74, 29, 2, 255, 71, 23, 5, 255, 68, 21, 5, 255, 62, 24, 3, 255, 69, 22, 4, 255, 71, 26, 3, 255, 70, 26, 5, 255, 80, 28, 6, 255, 74, 24, 1, 255, 66, 20, 1, 255, 64, 20, 0, 255, 64, 22, 2, 255, 65, 23, 4, 255, 56, 18, 2, 255, 55, 19, 0, 255, 68, 23, 3, 255, 78, 21, 4, 255, 68, 24, 9, 255, 46, 18, 2, 255, 55, 20, 3, 255, 59, 19, 1, 255, 56, 19, 3, 255, 57, 14, 4, 255, 52, 17, 5, 255, 48, 21, 3, 255, 56, 17, 3, 255, 54, 13, 3, 255, 46, 16, 6, 255, 38, 16, 7, 255, 40, 15, 7, 255, 45, 16, 5, 255, 46, 14, 3, 255, 34, 13, 2, 255, 18, 12, 1, 255, 21, 13, 5, 255, 20, 9, 4, 255, 22, 9, 2, 255, 36, 17, 3, 255, 42, 21, 0, 255, 46, 16, 0, 255, 51, 14, 4, 255, 50, 17, 5, 255, 48, 17, 4, 255, 53, 16, 0, 255, 56, 20, 0, 255, 56, 20, 4, 255, 53, 20, 6, 255, 48, 20, 2, 255, 41, 14, 7, 255, 39, 13, 4, 255, 46, 16, 5, 255, 51, 15, 4, 255, 53, 15, 1, 255, 61, 18, 1, 255, 73, 22, 2, 255, 75, 21, 2, 255, 75, 20, 3, 255, 72, 17, 3, 255, 61, 13, 4, 255, 67, 20, 3, 255, 100, 40, 5, 255, 122, 59, 6, 255, 137, 61, 3, 255, 146, 64, 2, 255, 137, 58, 3, 255, 123, 46, 0, 255, 129, 51, 0, 255, 136, 58, 1, 255, 140, 61, 3, 255, 139, 61, 5, 255, 135, 54, 3, 255, 132, 48, 4, 255, 128, 44, 5, 255, 120, 40, 4, 255, 105, 38, 2, 255, 94, 28, 0, 255, 89, 27, 0, 255, 6, 7, 2, 255, 6, 7, 0, 255, 12, 12, 2, 255, 15, 13, 4, 255, 18, 14, 5, 255, 20, 16, 3, 255, 20, 19, 3, 255, 24, 22, 8, 255, 27, 24, 10, 255, 23, 22, 2, 255, 29, 27, 7, 255, 33, 31, 10, 255, 34, 37, 6, 255, 35, 39, 6, 255, 36, 40, 15, 255, 33, 44, 9, 255, 41, 54, 11, 255, 36, 52, 2, 255, 38, 51, 14, 255, 43, 56, 13, 255, 43, 54, 4, 255, 58, 56, 8, 255, 55, 59, 4, 255, 48, 55, 11, 255, 50, 49, 4, 255, 55, 55, 9, 255, 47, 52, 5, 255, 49, 47, 3, 255, 47, 45, 5, 255, 50, 45, 1, 255, 58, 54, 12, 255, 55, 52, 20, 255, 53, 47, 11, 255, 46, 37, 13, 255, 42, 38, 14, 255, 47, 38, 9, 255, 43, 32, 11, 255, 45, 35, 7, 255, 43, 28, 8, 255, 49, 28, 8, 255, 50, 30, 3, 255, 46, 30, 2, 255, 49, 37, 16, 255, 56, 45, 30, 255, 57, 48, 35, 255, 61, 60, 43, 255, 58, 56, 49, 255, 63, 64, 44, 255, 61, 65, 36, 255, 60, 58, 50, 255, 56, 55, 38, 255, 55, 57, 33, 255, 67, 51, 24, 255, 58, 54, 33, 255, 48, 53, 41, 255, 56, 48, 25, 255, 62, 53, 35, 255, 59, 54, 20, 255, 58, 48, 8, 255, 58, 34, 1, 255, 55, 31, 4, 255, 66, 49, 15, 255, 63, 54, 5, 255, 52, 38, 3, 255, 55, 30, 4, 255, 63, 26, 3, 255, 62, 23, 0, 255, 71, 32, 5, 255, 67, 29, 2, 255, 57, 26, 2, 255, 57, 29, 2, 255, 62, 30, 1, 255, 68, 32, 4, 255, 66, 30, 1, 255, 67, 34, 3, 255, 66, 33, 4, 255, 66, 32, 3, 255, 71, 37, 1, 255, 75, 35, 2, 255, 75, 37, 3, 255, 78, 37, 4, 255, 81, 35, 2, 255, 78, 37, 2, 255, 73, 38, 3, 255, 73, 35, 1, 255, 78, 39, 4, 255, 75, 39, 1, 255, 75, 42, 1, 255, 83, 43, 4, 255, 84, 41, 3, 255, 84, 39, 1, 255, 85, 42, 3, 255, 84, 40, 1, 255, 83, 39, 1, 255, 84, 39, 1, 255, 86, 40, 1, 255, 89, 43, 4, 255, 84, 42, 1, 255, 85, 42, 1, 255, 90, 43, 3, 255, 92, 42, 2, 255, 91, 45, 3, 255, 90, 44, 1, 255, 95, 43, 3, 255, 91, 44, 3, 255, 85, 45, 2, 255, 83, 49, 4, 255, 82, 48, 2, 255, 85, 49, 3, 255, 86, 48, 0, 255, 86, 48, 2, 255, 87, 46, 3, 255, 89, 45, 2, 255, 90, 46, 1, 255, 91, 44, 0, 255, 92, 51, 1, 255, 93, 50, 2, 255, 89, 51, 3, 255, 94, 54, 7, 255, 89, 50, 2, 255, 92, 53, 3, 255, 91, 49, 1, 255, 91, 52, 5, 255, 93, 51, 3, 255, 94, 52, 4, 255, 91, 51, 2, 255, 93, 52, 2, 255, 96, 52, 2, 255, 96, 53, 3, 255, 92, 55, 3, 255, 91, 51, 1, 255, 96, 53, 3, 255, 93, 54, 4, 255, 93, 52, 5, 255, 92, 53, 4, 255, 94, 56, 5, 255, 97, 56, 5, 255, 98, 54, 2, 255, 101, 54, 4, 255, 98, 53, 4, 255, 98, 53, 4, 255, 98, 54, 5, 255, 96, 55, 5, 255, 99, 53, 5, 255, 98, 52, 6, 255, 92, 51, 1, 255, 98, 55, 4, 255, 100, 54, 8, 255, 93, 48, 9, 255, 96, 51, 2, 255, 95, 49, 8, 255, 85, 47, 3, 255, 88, 54, 11, 255, 96, 52, 1, 255, 96, 51, 6, 255, 90, 53, 7, 255, 96, 48, 8, 255, 84, 47, 6, 255, 88, 50, 3, 255, 81, 52, 8, 255, 83, 55, 7, 255, 81, 51, 5, 255, 88, 51, 6, 255, 87, 54, 3, 255, 87, 51, 12, 255, 87, 47, 10, 255, 80, 48, 7, 255, 82, 52, 16, 255, 81, 51, 15, 255, 81, 54, 5, 255, 79, 51, 6, 255, 85, 55, 11, 255, 88, 58, 7, 255, 83, 52, 14, 255, 87, 54, 16, 255, 81, 55, 11, 255, 82, 58, 5, 255, 89, 55, 9, 255, 92, 56, 21, 255, 101, 57, 19, 255, 99, 56, 13, 255, 91, 59, 9, 255, 80, 58, 10, 255, 81, 63, 10, 255, 83, 64, 4, 255, 91, 62, 8, 255, 97, 63, 17, 255, 86, 64, 12, 255, 90, 67, 15, 255, 97, 65, 12, 255, 101, 67, 12, 255, 99, 69, 15, 255, 106, 68, 13, 255, 106, 65, 19, 255, 109, 74, 9, 255, 109, 74, 12, 255, 113, 73, 13, 255, 125, 78, 5, 255, 124, 77, 8, 255, 130, 82, 19, 255, 137, 84, 15, 255, 142, 82, 13, 255, 144, 82, 10, 255, 143, 80, 10, 255, 150, 86, 9, 255, 164, 86, 11, 255, 173, 92, 15, 255, 171, 97, 14, 255, 161, 90, 5, 255, 167, 95, 8, 255, 164, 93, 18, 255, 159, 86, 17, 255, 164, 93, 11, 255, 164, 94, 10, 255, 164, 92, 9, 255, 167, 94, 9, 255, 170, 95, 12, 255, 173, 95, 5, 255, 179, 96, 13, 255, 178, 97, 22, 255, 176, 96, 14, 255, 178, 97, 12, 255, 186, 105, 22, 255, 181, 101, 13, 255, 182, 99, 8, 255, 182, 99, 10, 255, 184, 100, 12, 255, 188, 102, 12, 255, 192, 104, 9, 255, 196, 110, 5, 255, 192, 110, 5, 255, 188, 108, 7, 255, 190, 110, 12, 255, 189, 108, 12, 255, 182, 100, 10, 255, 174, 98, 8, 255, 173, 100, 1, 255, 175, 94, 9, 255, 164, 93, 9, 255, 160, 86, 13, 255, 156, 86, 15, 255, 159, 85, 7, 255, 157, 86, 10, 255, 148, 82, 3, 255, 139, 84, 3, 255, 140, 87, 7, 255, 131, 79, 7, 255, 98, 65, 5, 255, 83, 67, 6, 255, 84, 72, 2, 255, 93, 71, 4, 255, 103, 71, 5, 255, 100, 71, 7, 255, 113, 75, 11, 255, 125, 78, 1, 255, 130, 88, 6, 255, 167, 124, 10, 255, 181, 135, 6, 255, 187, 143, 14, 255, 194, 150, 3, 255, 195, 147, 3, 255, 195, 147, 4, 255, 198, 154, 1, 255, 178, 123, 7, 255, 181, 131, 13, 255, 184, 145, 11, 255, 175, 122, 7, 255, 167, 103, 2, 255, 188, 136, 5, 255, 191, 146, 4, 255, 190, 143, 7, 255, 194, 142, 12, 255, 196, 140, 15, 255, 188, 128, 5, 255, 184, 123, 0, 255, 189, 132, 3, 255, 189, 136, 3, 255, 188, 129, 11, 255, 186, 124, 8, 255, 188, 125, 0, 255, 183, 117, 1, 255, 184, 121, 3, 255, 185, 124, 2, 255, 183, 120, 4, 255, 180, 115, 4, 255, 176, 111, 4, 255, 173, 107, 3, 255, 170, 103, 4, 255, 167, 102, 3, 255, 165, 101, 0, 255, 163, 99, 0, 255, 161, 96, 1, 255, 159, 93, 4, 255, 157, 89, 3, 255, 156, 84, 1, 255, 152, 83, 1, 255, 150, 83, 4, 255, 151, 82, 3, 255, 155, 81, 5, 255, 151, 77, 4, 255, 141, 72, 0, 255, 140, 71, 2, 255, 141, 71, 4, 255, 141, 71, 4, 255, 141, 70, 0, 255, 140, 67, 1, 255, 137, 61, 3, 255, 137, 62, 1, 255, 135, 65, 3, 255, 129, 59, 3, 255, 129, 55, 4, 255, 124, 47, 3, 255, 113, 42, 1, 255, 101, 37, 1, 255, 100, 34, 4, 255, 95, 29, 1, 255, 97, 35, 6, 255, 85, 35, 5, 255, 76, 29, 1, 255, 78, 31, 2, 255, 81, 29, 3, 255, 70, 23, 4, 255, 83, 27, 3, 255, 82, 25, 1, 255, 72, 27, 8, 255, 60, 25, 7, 255, 64, 22, 2, 255, 77, 29, 1, 255, 74, 26, 1, 255, 76, 24, 6, 255, 72, 22, 3, 255, 70, 24, 1, 255, 69, 20, 2, 255, 63, 20, 3, 255, 67, 21, 2, 255, 69, 21, 3, 255, 68, 23, 5, 255, 69, 23, 5, 255, 76, 18, 1, 255, 80, 21, 1, 255, 84, 24, 3, 255, 73, 23, 3, 255, 54, 19, 1, 255, 49, 18, 2, 255, 53, 18, 3, 255, 51, 17, 1, 255, 47, 19, 2, 255, 53, 18, 3, 255, 52, 13, 2, 255, 46, 16, 1, 255, 45, 20, 4, 255, 49, 17, 4, 255, 46, 17, 6, 255, 41, 14, 0, 255, 43, 12, 5, 255, 41, 14, 4, 255, 27, 12, 1, 255, 24, 13, 1, 255, 29, 14, 3, 255, 29, 13, 6, 255, 36, 15, 6, 255, 44, 14, 1, 255, 44, 16, 3, 255, 43, 19, 6, 255, 47, 18, 6, 255, 50, 12, 5, 255, 54, 20, 3, 255, 58, 19, 3, 255, 48, 11, 2, 255, 42, 18, 8, 255, 42, 17, 5, 255, 47, 14, 3, 255, 48, 20, 2, 255, 55, 16, 1, 255, 54, 15, 6, 255, 54, 19, 6, 255, 58, 18, 1, 255, 65, 19, 3, 255, 79, 23, 3, 255, 76, 18, 2, 255, 71, 20, 7, 255, 71, 20, 4, 255, 101, 38, 4, 255, 135, 60, 8, 255, 141, 62, 2, 255, 139, 59, 3, 255, 145, 60, 3, 255, 145, 63, 5, 255, 137, 62, 5, 255, 137, 60, 1, 255, 143, 63, 0, 255, 147, 67, 3, 255, 146, 64, 4, 255, 135, 51, 1, 255, 129, 44, 3, 255, 122, 38, 4, 255, 110, 32, 1, 255, 100, 32, 4, 255, 99, 31, 4, 255, 101, 34, 6, 255, 10, 9, 1, 255, 14, 13, 3, 255, 15, 13, 3, 255, 18, 15, 6, 255, 16, 12, 1, 255, 19, 15, 3, 255, 27, 24, 4, 255, 24, 24, 1, 255, 24, 26, 1, 255, 29, 32, 3, 255, 29, 34, 6, 255, 26, 34, 5, 255, 32, 39, 5, 255, 33, 40, 9, 255, 38, 48, 12, 255, 38, 49, 10, 255, 41, 54, 7, 255, 44, 54, 10, 255, 46, 54, 10, 255, 49, 59, 7, 255, 55, 54, 2, 255, 49, 54, 2, 255, 42, 59, 6, 255, 38, 53, 5, 255, 46, 53, 8, 255, 46, 48, 2, 255, 45, 48, 6, 255, 44, 42, 3, 255, 44, 40, 4, 255, 44, 37, 4, 255, 53, 47, 19, 255, 51, 44, 22, 255, 50, 41, 15, 255, 48, 38, 10, 255, 42, 37, 10, 255, 46, 33, 13, 255, 45, 31, 12, 255, 45, 37, 10, 255, 35, 33, 8, 255, 42, 33, 7, 255, 48, 33, 2, 255, 43, 28, 0, 255, 39, 28, 8, 255, 48, 40, 24, 255, 53, 47, 30, 255, 60, 58, 38, 255, 61, 60, 35, 255, 56, 57, 42, 255, 61, 59, 47, 255, 67, 62, 52, 255, 64, 57, 43, 255, 62, 57, 35, 255, 60, 53, 34, 255, 65, 53, 41, 255, 63, 56, 43, 255, 66, 56, 30, 255, 63, 50, 33, 255, 59, 56, 19, 255, 67, 50, 9, 255, 60, 38, 6, 255, 65, 40, 0, 255, 65, 42, 3, 255, 75, 50, 12, 255, 67, 39, 3, 255, 64, 26, 0, 255, 73, 31, 7, 255, 70, 32, 7, 255, 63, 30, 0, 255, 67, 31, 1, 255, 66, 31, 6, 255, 68, 34, 6, 255, 73, 37, 6, 255, 73, 34, 1, 255, 73, 33, 0, 255, 75, 32, 1, 255, 78, 32, 2, 255, 77, 31, 1, 255, 72, 35, 0, 255, 74, 35, 1, 255, 70, 33, 0, 255, 73, 34, 0, 255, 76, 35, 0, 255, 69, 35, 0, 255, 69, 35, 1, 255, 77, 38, 5, 255, 75, 36, 3, 255, 72, 37, 1, 255, 75, 42, 4, 255, 78, 39, 2, 255, 82, 39, 1, 255, 81, 39, 0, 255, 82, 40, 2, 255, 84, 42, 2, 255, 84, 42, 2, 255, 86, 43, 3, 255, 89, 44, 4, 255, 86, 42, 0, 255, 87, 45, 1, 255, 88, 46, 2, 255, 90, 44, 2, 255, 94, 47, 5, 255, 90, 47, 4, 255, 89, 44, 0, 255, 96, 50, 7, 255, 91, 46, 4, 255, 90, 47, 4, 255, 87, 46, 2, 255, 87, 47, 2, 255, 89, 47, 3, 255, 90, 45, 1, 255, 89, 46, 2, 255, 87, 44, 2, 255, 86, 45, 1, 255, 87, 50, 2, 255, 86, 51, 3, 255, 91, 49, 0, 255, 92, 49, 0, 255, 85, 52, 2, 255, 88, 50, 4, 255, 93, 51, 5, 255, 90, 53, 3, 255, 92, 51, 1, 255, 91, 49, 1, 255, 94, 50, 3, 255, 94, 52, 4, 255, 96, 55, 5, 255, 96, 55, 4, 255, 93, 49, 1, 255, 92, 56, 2, 255, 95, 52, 1, 255, 101, 55, 6, 255, 98, 50, 2, 255, 98, 49, 2, 255, 90, 51, 4, 255, 91, 53, 3, 255, 95, 54, 1, 255, 98, 55, 3, 255, 96, 54, 2, 255, 94, 52, 1, 255, 93, 53, 4, 255, 90, 51, 4, 255, 94, 54, 3, 255, 92, 53, 3, 255, 101, 51, 6, 255, 105, 54, 7, 255, 99, 53, 4, 255, 102, 52, 4, 255, 100, 50, 12, 255, 98, 52, 5, 255, 93, 54, 8, 255, 86, 51, 7, 255, 91, 53, 4, 255, 91, 50, 7, 255, 93, 51, 3, 255, 96, 51, 6, 255, 87, 52, 8, 255, 91, 49, 5, 255, 91, 47, 5, 255, 87, 51, 5, 255, 81, 52, 5, 255, 87, 53, 4, 255, 89, 52, 6, 255, 88, 49, 9, 255, 84, 52, 10, 255, 83, 55, 6, 255, 84, 54, 5, 255, 83, 53, 5, 255, 85, 54, 9, 255, 83, 51, 9, 255, 85, 52, 8, 255, 80, 51, 4, 255, 81, 56, 9, 255, 81, 57, 11, 255, 80, 50, 13, 255, 84, 53, 15, 255, 78, 54, 14, 255, 81, 59, 14, 255, 85, 55, 7, 255, 94, 62, 5, 255, 103, 63, 6, 255, 99, 56, 9, 255, 98, 58, 13, 255, 96, 61, 15, 255, 95, 64, 17, 255, 90, 60, 13, 255, 87, 62, 17, 255, 92, 72, 8, 255, 101, 65, 12, 255, 106, 67, 16, 255, 100, 63, 16, 255, 106, 67, 10, 255, 117, 74, 6, 255, 113, 76, 9, 255, 125, 78, 19, 255, 130, 78, 8, 255, 128, 77, 15, 255, 127, 73, 25, 255, 134, 79, 15, 255, 138, 79, 7, 255, 146, 83, 16, 255, 151, 86, 13, 255, 156, 85, 13, 255, 160, 85, 4, 255, 161, 84, 3, 255, 166, 91, 7, 255, 172, 94, 10, 255, 177, 94, 16, 255, 174, 95, 17, 255, 174, 99, 15, 255, 174, 96, 15, 255, 168, 92, 16, 255, 173, 97, 20, 255, 177, 99, 20, 255, 175, 97, 15, 255, 175, 97, 16, 255, 176, 95, 13, 255, 180, 101, 14, 255, 178, 97, 13, 255, 177, 95, 7, 255, 179, 98, 15, 255, 179, 98, 5, 255, 182, 101, 3, 255, 194, 110, 15, 255, 192, 107, 12, 255, 191, 109, 12, 255, 182, 105, 12, 255, 182, 103, 13, 255, 191, 109, 5, 255, 194, 111, 4, 255, 194, 111, 8, 255, 194, 110, 7, 255, 193, 107, 11, 255, 196, 111, 6, 255, 192, 107, 15, 255, 180, 99, 16, 255, 167, 98, 3, 255, 163, 96, 15, 255, 161, 90, 8, 255, 153, 87, 3, 255, 152, 87, 9, 255, 144, 81, 14, 255, 134, 79, 6, 255, 124, 76, 7, 255, 130, 81, 12, 255, 108, 73, 10, 255, 103, 67, 3, 255, 122, 75, 7, 255, 107, 73, 9, 255, 84, 66, 2, 255, 86, 67, 2, 255, 106, 70, 10, 255, 115, 75, 7, 255, 84, 65, 4, 255, 91, 71, 5, 255, 118, 78, 5, 255, 116, 76, 11, 255, 155, 116, 10, 255, 178, 132, 9, 255, 189, 142, 15, 255, 196, 151, 5, 255, 195, 142, 3, 255, 201, 148, 0, 255, 193, 144, 7, 255, 184, 135, 12, 255, 189, 139, 9, 255, 191, 143, 7, 255, 190, 140, 5, 255, 170, 117, 5, 255, 176, 124, 11, 255, 189, 139, 5, 255, 188, 137, 3, 255, 189, 137, 3, 255, 190, 136, 5, 255, 182, 127, 1, 255, 180, 124, 1, 255, 187, 133, 6, 255, 187, 132, 6, 255, 188, 131, 1, 255, 184, 125, 0, 255, 182, 119, 1, 255, 191, 125, 8, 255, 187, 124, 4, 255, 184, 123, 2, 255, 182, 119, 4, 255, 180, 117, 5, 255, 176, 112, 5, 255, 172, 108, 4, 255, 170, 104, 6, 255, 167, 101, 0, 255, 164, 99, 4, 255, 162, 97, 9, 255, 159, 95, 6, 255, 160, 95, 3, 255, 158, 91, 3, 255, 157, 86, 1, 255, 150, 81, 0, 255, 147, 81, 1, 255, 154, 84, 6, 255, 158, 82, 6, 255, 152, 77, 2, 255, 144, 75, 2, 255, 148, 78, 7, 255, 145, 71, 1, 255, 143, 69, 1, 255, 138, 67, 3, 255, 135, 65, 5, 255, 135, 64, 5, 255, 142, 63, 3, 255, 138, 62, 2, 255, 129, 57, 1, 255, 130, 55, 5, 255, 124, 50, 3, 255, 110, 45, 2, 255, 101, 41, 0, 255, 103, 40, 2, 255, 101, 38, 3, 255, 95, 36, 4, 255, 87, 31, 3, 255, 78, 27, 3, 255, 78, 28, 7, 255, 79, 30, 7, 255, 72, 27, 8, 255, 82, 28, 3, 255, 80, 27, 3, 255, 73, 27, 4, 255, 71, 30, 4, 255, 72, 29, 1, 255, 74, 26, 1, 255, 75, 24, 2, 255, 74, 23, 1, 255, 66, 24, 3, 255, 66, 24, 4, 255, 68, 25, 4, 255, 62, 24, 4, 255, 58, 21, 0, 255, 58, 21, 0, 255, 63, 21, 1, 255, 68, 20, 2, 255, 72, 22, 4, 255, 78, 23, 2, 255, 85, 23, 3, 255, 75, 18, 1, 255, 61, 16, 3, 255, 62, 18, 9, 255, 55, 12, 2, 255, 51, 20, 3, 255, 49, 18, 2, 255, 55, 17, 5, 255, 52, 13, 3, 255, 45, 17, 2, 255, 44, 20, 4, 255, 47, 14, 3, 255, 52, 15, 6, 255, 48, 18, 3, 255, 37, 16, 3, 255, 37, 16, 0, 255, 44, 16, 8, 255, 29, 7, 8, 255, 36, 16, 3, 255, 48, 18, 1, 255, 49, 16, 4, 255, 47, 13, 5, 255, 52, 13, 2, 255, 58, 17, 1, 255, 53, 18, 0, 255, 44, 14, 2, 255, 47, 16, 6, 255, 48, 16, 4, 255, 47, 19, 2, 255, 47, 18, 0, 255, 52, 17, 0, 255, 59, 16, 2, 255, 58, 19, 1, 255, 59, 14, 1, 255, 59, 16, 2, 255, 67, 21, 1, 255, 64, 19, 0, 255, 62, 20, 3, 255, 77, 22, 6, 255, 74, 21, 1, 255, 73, 22, 0, 255, 98, 38, 3, 255, 129, 55, 4, 255, 138, 58, 1, 255, 138, 59, 1, 255, 143, 59, 7, 255, 140, 61, 3, 255, 138, 62, 0, 255, 142, 62, 5, 255, 138, 59, 3, 255, 143, 63, 4, 255, 145, 63, 4, 255, 142, 59, 4, 255, 132, 49, 2, 255, 117, 37, 1, 255, 109, 32, 0, 255, 111, 36, 3, 255, 114, 41, 3, 255, 114, 41, 5, 255, 112, 38, 3, 255, 17, 13, 5, 255, 19, 15, 5, 255, 15, 14, 1, 255, 19, 17, 5, 255, 18, 16, 4, 255, 22, 20, 6, 255, 27, 24, 7, 255, 21, 22, 3, 255, 26, 30, 6, 255, 30, 34, 7, 255, 28, 37, 9, 255, 29, 41, 9, 255, 37, 47, 8, 255, 35, 47, 9, 255, 36, 47, 7, 255, 43, 51, 8, 255, 49, 57, 5, 255, 45, 52, 9, 255, 50, 57, 11, 255, 47, 56, 6, 255, 51, 54, 3, 255, 48, 57, 7, 255, 54, 60, 2, 255, 56, 52, 6, 255, 49, 52, 2, 255, 46, 46, 2, 255, 53, 46, 9, 255, 45, 39, 9, 255, 40, 35, 3, 255, 39, 33, 13, 255, 40, 37, 16, 255, 48, 44, 21, 255, 44, 42, 9, 255, 35, 35, 14, 255, 48, 34, 10, 255, 51, 35, 6, 255, 45, 30, 12, 255, 44, 28, 7, 255, 40, 32, 9, 255, 40, 33, 11, 255, 40, 28, 3, 255, 44, 29, 6, 255, 42, 28, 11, 255, 48, 39, 21, 255, 52, 47, 29, 255, 58, 58, 46, 255, 55, 52, 40, 255, 63, 54, 50, 255, 68, 59, 53, 255, 67, 62, 49, 255, 61, 58, 44, 255, 64, 60, 30, 255, 61, 59, 31, 255, 72, 56, 36, 255, 69, 60, 38, 255, 67, 60, 35, 255, 63, 49, 26, 255, 57, 50, 20, 255, 68, 54, 22, 255, 74, 42, 13, 255, 64, 31, 1, 255, 64, 40, 16, 255, 66, 47, 16, 255, 66, 43, 7, 255, 59, 32, 2, 255, 66, 29, 3, 255, 67, 30, 4, 255, 70, 33, 5, 255, 72, 30, 3, 255, 65, 27, 1, 255, 68, 28, 4, 255, 72, 30, 5, 255, 71, 32, 2, 255, 74, 36, 2, 255, 76, 37, 2, 255, 78, 39, 5, 255, 78, 36, 4, 255, 83, 36, 3, 255, 83, 37, 4, 255, 79, 40, 4, 255, 81, 38, 4, 255, 81, 35, 2, 255, 75, 38, 2, 255, 76, 42, 6, 255, 75, 35, 2, 255, 79, 38, 3, 255, 80, 42, 5, 255, 77, 42, 3, 255, 82, 41, 2, 255, 86, 42, 5, 255, 83, 41, 6, 255, 84, 39, 4, 255, 85, 40, 3, 255, 82, 41, 1, 255, 84, 41, 3, 255, 87, 40, 4, 255, 90, 45, 4, 255, 83, 41, 0, 255, 87, 47, 5, 255, 89, 45, 4, 255, 91, 44, 4, 255, 89, 45, 4, 255, 91, 47, 4, 255, 93, 49, 5, 255, 87, 45, 1, 255, 92, 51, 5, 255, 91, 48, 3, 255, 91, 44, 0, 255, 91, 44, 1, 255, 93, 50, 4, 255, 91, 47, 4, 255, 89, 46, 2, 255, 90, 50, 3, 255, 90, 52, 5, 255, 88, 48, 4, 255, 90, 46, 2, 255, 90, 47, 1, 255, 86, 53, 1, 255, 89, 50, 3, 255, 93, 50, 5, 255, 88, 53, 2, 255, 89, 49, 0, 255, 93, 50, 2, 255, 96, 53, 3, 255, 91, 50, 0, 255, 90, 52, 1, 255, 94, 53, 3, 255, 96, 53, 4, 255, 96, 53, 4, 255, 93, 54, 3, 255, 97, 55, 4, 255, 101, 53, 4, 255, 96, 50, 0, 255, 95, 52, 6, 255, 93, 57, 6, 255, 91, 56, 0, 255, 94, 56, 2, 255, 97, 54, 7, 255, 95, 51, 3, 255, 96, 52, 4, 255, 93, 51, 5, 255, 94, 54, 2, 255, 96, 53, 3, 255, 98, 52, 5, 255, 101, 55, 2, 255, 100, 51, 5, 255, 102, 52, 10, 255, 100, 51, 8, 255, 92, 49, 8, 255, 95, 54, 5, 255, 93, 51, 3, 255, 94, 54, 5, 255, 94, 55, 6, 255, 92, 54, 7, 255, 91, 53, 5, 255, 85, 51, 7, 255, 89, 47, 7, 255, 86, 50, 3, 255, 85, 54, 4, 255, 84, 55, 8, 255, 80, 55, 7, 255, 83, 50, 10, 255, 79, 47, 6, 255, 87, 52, 12, 255, 82, 49, 8, 255, 78, 49, 8, 255, 81, 52, 6, 255, 82, 55, 10, 255, 82, 52, 14, 255, 83, 53, 11, 255, 82, 55, 9, 255, 81, 54, 10, 255, 78, 54, 9, 255, 75, 57, 11, 255, 79, 56, 10, 255, 76, 56, 10, 255, 74, 53, 9, 255, 84, 55, 12, 255, 84, 55, 7, 255, 96, 64, 9, 255, 103, 67, 6, 255, 108, 64, 10, 255, 111, 62, 16, 255, 110, 62, 14, 255, 105, 62, 12, 255, 108, 63, 25, 255, 112, 72, 8, 255, 102, 66, 13, 255, 99, 65, 12, 255, 106, 65, 19, 255, 119, 70, 21, 255, 129, 74, 18, 255, 135, 72, 15, 255, 135, 75, 14, 255, 130, 71, 23, 255, 137, 77, 23, 255, 146, 81, 18, 255, 153, 82, 17, 255, 156, 85, 11, 255, 160, 85, 15, 255, 163, 86, 12, 255, 167, 88, 10, 255, 173, 90, 12, 255, 176, 93, 19, 255, 178, 98, 13, 255, 177, 100, 11, 255, 185, 104, 12, 255, 184, 102, 12, 255, 182, 101, 11, 255, 181, 100, 1, 255, 180, 93, 17, 255, 173, 94, 17, 255, 172, 94, 10, 255, 179, 99, 12, 255, 182, 103, 5, 255, 183, 101, 14, 255, 181, 102, 13, 255, 186, 107, 13, 255, 185, 105, 12, 255, 185, 106, 11, 255, 186, 108, 7, 255, 183, 103, 4, 255, 187, 103, 11, 255, 193, 107, 16, 255, 189, 106, 14, 255, 191, 106, 5, 255, 194, 109, 8, 255, 192, 114, 12, 255, 189, 111, 18, 255, 188, 106, 15, 255, 190, 104, 9, 255, 188, 104, 10, 255, 181, 99, 6, 255, 173, 93, 11, 255, 168, 90, 15, 255, 160, 89, 10, 255, 152, 87, 14, 255, 151, 89, 9, 255, 144, 82, 11, 255, 124, 79, 11, 255, 107, 64, 15, 255, 87, 68, 7, 255, 88, 72, 9, 255, 92, 65, 4, 255, 92, 68, 11, 255, 90, 70, 10, 255, 88, 65, 8, 255, 88, 69, 8, 255, 88, 68, 7, 255, 88, 66, 4, 255, 104, 75, 9, 255, 108, 71, 5, 255, 94, 64, 6, 255, 93, 71, 7, 255, 101, 72, 4, 255, 96, 60, 10, 255, 124, 88, 11, 255, 175, 129, 7, 255, 187, 137, 15, 255, 191, 149, 2, 255, 196, 142, 7, 255, 196, 140, 8, 255, 194, 148, 2, 255, 196, 148, 6, 255, 188, 136, 1, 255, 181, 126, 5, 255, 186, 133, 8, 255, 182, 134, 9, 255, 181, 134, 3, 255, 186, 135, 1, 255, 187, 134, 2, 255, 187, 132, 2, 255, 189, 134, 5, 255, 183, 127, 2, 255, 181, 128, 1, 255, 187, 133, 7, 255, 190, 133, 13, 255, 189, 131, 6, 255, 182, 125, 5, 255, 179, 118, 10, 255, 179, 116, 0, 255, 181, 118, 0, 255, 181, 118, 3, 255, 179, 115, 4, 255, 180, 116, 7, 255, 176, 112, 4, 255, 174, 109, 5, 255, 173, 106, 5, 255, 167, 103, 1, 255, 161, 97, 4, 255, 160, 95, 11, 255, 159, 95, 8, 255, 158, 94, 3, 255, 157, 92, 3, 255, 158, 89, 4, 255, 155, 87, 4, 255, 153, 85, 5, 255, 150, 80, 2, 255, 148, 76, 1, 255, 149, 77, 3, 255, 144, 75, 4, 255, 144, 72, 4, 255, 147, 70, 1, 255, 147, 71, 2, 255, 142, 72, 4, 255, 140, 73, 4, 255, 139, 71, 1, 255, 137, 65, 2, 255, 135, 62, 4, 255, 127, 55, 1, 255, 126, 52, 1, 255, 126, 54, 4, 255, 121, 53, 7, 255, 113, 50, 5, 255, 108, 44, 2, 255, 99, 38, 1, 255, 89, 35, 1, 255, 90, 32, 3, 255, 86, 29, 5, 255, 82, 29, 7, 255, 84, 30, 5, 255, 86, 33, 3, 255, 84, 25, 3, 255, 80, 28, 3, 255, 72, 26, 1, 255, 68, 26, 3, 255, 70, 29, 3, 255, 72, 22, 4, 255, 79, 27, 11, 255, 65, 25, 3, 255, 58, 23, 4, 255, 57, 17, 4, 255, 55, 23, 2, 255, 62, 25, 4, 255, 61, 23, 3, 255, 54, 21, 1, 255, 60, 22, 3, 255, 71, 23, 5, 255, 75, 24, 3, 255, 80, 25, 1, 255, 86, 26, 3, 255, 83, 24, 1, 255, 71, 25, 2, 255, 66, 22, 2, 255, 67, 19, 1, 255, 61, 18, 1, 255, 56, 18, 2, 255, 56, 18, 2, 255, 62, 19, 6, 255, 57, 18, 6, 255, 52, 21, 7, 255, 49, 18, 4, 255, 43, 16, 3, 255, 44, 16, 5, 255, 41, 17, 6, 255, 43, 19, 2, 255, 61, 22, 3, 255, 65, 18, 0, 255, 67, 21, 4, 255, 60, 20, 2, 255, 48, 14, 1, 255, 44, 11, 5, 255, 48, 14, 4, 255, 56, 19, 0, 255, 56, 16, 0, 255, 54, 17, 4, 255, 60, 15, 6, 255, 55, 20, 6, 255, 56, 20, 4, 255, 66, 16, 3, 255, 62, 19, 4, 255, 56, 19, 4, 255, 63, 18, 3, 255, 67, 19, 3, 255, 69, 21, 2, 255, 74, 21, 1, 255, 72, 20, 2, 255, 72, 23, 2, 255, 77, 23, 1, 255, 80, 30, 4, 255, 101, 40, 3, 255, 121, 56, 7, 255, 128, 57, 5, 255, 138, 57, 2, 255, 139, 60, 4, 255, 135, 61, 3, 255, 134, 60, 1, 255, 139, 62, 1, 255, 142, 63, 2, 255, 141, 62, 4, 255, 141, 59, 4, 255, 141, 59, 3, 255, 141, 56, 4, 255, 128, 48, 4, 255, 115, 38, 3, 255, 111, 37, 3, 255, 114, 41, 5, 255, 116, 40, 2, 255, 114, 38, 0, 255, 115, 38, 0, 255, 18, 14, 3, 255, 19, 16, 4, 255, 17, 17, 3, 255, 18, 17, 5, 255, 15, 16, 4, 255, 19, 21, 7, 255, 25, 25, 7, 255, 26, 29, 7, 255, 30, 37, 12, 255, 34, 36, 11, 255, 30, 38, 13, 255, 34, 44, 13, 255, 43, 50, 9, 255, 40, 52, 10, 255, 44, 54, 9, 255, 48, 56, 2, 255, 50, 56, 12, 255, 49, 56, 16, 255, 50, 59, 10, 255, 46, 57, 7, 255, 39, 58, 9, 255, 47, 56, 7, 255, 54, 50, 5, 255, 54, 53, 3, 255, 47, 47, 6, 255, 45, 44, 2, 255, 47, 39, 3, 255, 41, 37, 4, 255, 35, 29, 4, 255, 30, 26, 9, 255, 38, 31, 6, 255, 46, 39, 11, 255, 39, 40, 13, 255, 40, 31, 7, 255, 53, 36, 9, 255, 54, 39, 8, 255, 52, 38, 9, 255, 43, 35, 7, 255, 52, 30, 5, 255, 51, 31, 4, 255, 41, 31, 4, 255, 42, 29, 5, 255, 43, 26, 5, 255, 50, 33, 12, 255, 50, 37, 19, 255, 56, 51, 43, 255, 54, 50, 42, 255, 56, 55, 40, 255, 63, 62, 50, 255, 61, 61, 46, 255, 65, 66, 49, 255, 62, 59, 44, 255, 65, 59, 35, 255, 65, 56, 36, 255, 61, 59, 46, 255, 62, 58, 49, 255, 62, 48, 23, 255, 62, 47, 24, 255, 62, 46, 28, 255, 67, 42, 14, 255, 57, 31, 1, 255, 61, 38, 6, 255, 69, 47, 7, 255, 65, 43, 8, 255, 63, 33, 3, 255, 61, 26, 1, 255, 60, 29, 4, 255, 64, 33, 7, 255, 70, 30, 5, 255, 70, 29, 3, 255, 71, 29, 5, 255, 70, 31, 5, 255, 73, 35, 4, 255, 74, 37, 2, 255, 76, 39, 1, 255, 75, 36, 1, 255, 76, 34, 1, 255, 87, 37, 3, 255, 82, 38, 2, 255, 78, 41, 4, 255, 83, 40, 5, 255, 83, 35, 2, 255, 81, 40, 4, 255, 80, 43, 5, 255, 79, 38, 3, 255, 82, 37, 2, 255, 82, 39, 1, 255, 84, 43, 3, 255, 86, 40, 0, 255, 87, 40, 1, 255, 88, 43, 3, 255, 93, 44, 3, 255, 96, 47, 3, 255, 92, 47, 1, 255, 94, 47, 3, 255, 96, 44, 2, 255, 95, 47, 3, 255, 89, 48, 3, 255, 91, 52, 6, 255, 88, 46, 1, 255, 91, 45, 1, 255, 92, 46, 2, 255, 91, 47, 4, 255, 87, 46, 3, 255, 86, 45, 3, 255, 89, 47, 3, 255, 89, 45, 1, 255, 89, 44, 1, 255, 92, 48, 4, 255, 91, 46, 4, 255, 91, 43, 2, 255, 95, 47, 4, 255, 93, 51, 2, 255, 90, 47, 3, 255, 93, 45, 6, 255, 89, 47, 5, 255, 93, 47, 2, 255, 94, 53, 1, 255, 95, 57, 4, 255, 87, 53, 1, 255, 88, 55, 1, 255, 92, 52, 0, 255, 94, 53, 2, 255, 94, 52, 1, 255, 92, 52, 0, 255, 89, 54, 1, 255, 93, 56, 3, 255, 96, 55, 4, 255, 94, 51, 3, 255, 90, 52, 3, 255, 92, 54, 1, 255, 100, 57, 4, 255, 97, 55, 1, 255, 93, 55, 4, 255, 91, 57, 7, 255, 91, 57, 3, 255, 93, 55, 4, 255, 98, 55, 11, 255, 100, 56, 6, 255, 98, 54, 1, 255, 98, 56, 6, 255, 94, 53, 2, 255, 98, 54, 3, 255, 96, 55, 4, 255, 99, 56, 1, 255, 102, 52, 7, 255, 96, 47, 12, 255, 95, 50, 3, 255, 96, 54, 11, 255, 98, 58, 6, 255, 101, 57, 3, 255, 101, 56, 6, 255, 99, 56, 3, 255, 100, 52, 6, 255, 98, 50, 8, 255, 84, 51, 11, 255, 91, 49, 11, 255, 93, 51, 8, 255, 88, 52, 9, 255, 81, 50, 7, 255, 90, 51, 8, 255, 82, 52, 10, 255, 88, 48, 10, 255, 88, 55, 10, 255, 102, 54, 13, 255, 107, 56, 13, 255, 104, 57, 14, 255, 98, 54, 13, 255, 90, 54, 13, 255, 81, 53, 10, 255, 82, 58, 6, 255, 82, 57, 6, 255, 81, 55, 9, 255, 88, 60, 11, 255, 102, 65, 16, 255, 102, 64, 8, 255, 105, 64, 1, 255, 116, 68, 7, 255, 115, 65, 11, 255, 125, 67, 16, 255, 139, 78, 10, 255, 138, 76, 2, 255, 139, 72, 7, 255, 140, 71, 15, 255, 140, 77, 9, 255, 141, 76, 16, 255, 141, 75, 12, 255, 130, 71, 22, 255, 128, 70, 15, 255, 135, 76, 8, 255, 139, 76, 12, 255, 138, 77, 17, 255, 142, 81, 20, 255, 148, 80, 12, 255, 157, 84, 14, 255, 156, 84, 18, 255, 157, 87, 12, 255, 162, 87, 9, 255, 169, 88, 7, 255, 169, 83, 20, 255, 169, 87, 16, 255, 174, 95, 11, 255, 179, 100, 9, 255, 186, 102, 15, 255, 189, 103, 9, 255, 187, 104, 7, 255, 189, 106, 12, 255, 192, 107, 4, 255, 178, 92, 12, 255, 164, 85, 16, 255, 163, 82, 17, 255, 167, 86, 21, 255, 174, 96, 8, 255, 183, 102, 6, 255, 186, 103, 6, 255, 185, 103, 12, 255, 183, 107, 5, 255, 184, 107, 7, 255, 186, 104, 13, 255, 180, 101, 9, 255, 180, 103, 9, 255, 179, 100, 13, 255, 181, 99, 13, 255, 191, 109, 12, 255, 196, 106, 10, 255, 193, 105, 6, 255, 190, 103, 9, 255, 184, 103, 6, 255, 179, 101, 10, 255, 175, 97, 12, 255, 172, 95, 12, 255, 167, 95, 4, 255, 162, 88, 11, 255, 158, 87, 7, 255, 143, 82, 8, 255, 127, 77, 20, 255, 115, 79, 11, 255, 103, 71, 8, 255, 117, 77, 16, 255, 112, 78, 5, 255, 90, 72, 11, 255, 87, 74, 9, 255, 90, 73, 7, 255, 93, 71, 4, 255, 92, 70, 16, 255, 88, 68, 8, 255, 88, 66, 5, 255, 88, 65, 9, 255, 88, 68, 5, 255, 88, 70, 3, 255, 94, 69, 7, 255, 96, 60, 13, 255, 85, 65, 4, 255, 84, 71, 8, 255, 90, 67, 3, 255, 89, 58, 3, 255, 106, 75, 6, 255, 172, 126, 4, 255, 181, 134, 2, 255, 192, 151, 7, 255, 200, 150, 10, 255, 186, 140, 5, 255, 198, 156, 10, 255, 195, 142, 9, 255, 174, 118, 10, 255, 186, 140, 6, 255, 185, 131, 6, 255, 185, 128, 13, 255, 179, 131, 4, 255, 181, 133, 0, 255, 182, 131, 1, 255, 182, 128, 1, 255, 187, 132, 6, 255, 184, 127, 3, 255, 186, 129, 8, 255, 184, 128, 8, 255, 183, 126, 3, 255, 184, 126, 8, 255, 180, 125, 10, 255, 178, 123, 7, 255, 176, 114, 2, 255, 174, 110, 0, 255, 178, 114, 5, 255, 178, 114, 4, 255, 177, 113, 3, 255, 172, 109, 0, 255, 174, 108, 3, 255, 171, 103, 3, 255, 168, 102, 5, 255, 163, 98, 2, 255, 160, 96, 3, 255, 158, 94, 4, 255, 157, 92, 6, 255, 155, 88, 3, 255, 149, 84, 1, 255, 149, 84, 3, 255, 150, 81, 5, 255, 146, 79, 3, 255, 139, 75, 1, 255, 142, 76, 3, 255, 139, 71, 1, 255, 136, 69, 0, 255, 146, 70, 6, 255, 147, 68, 4, 255, 141, 72, 1, 255, 142, 74, 3, 255, 140, 69, 3, 255, 132, 61, 3, 255, 132, 60, 3, 255, 134, 58, 5, 255, 129, 56, 3, 255, 122, 55, 0, 255, 120, 54, 3, 255, 115, 51, 4, 255, 112, 43, 2, 255, 99, 39, 3, 255, 88, 42, 4, 255, 92, 34, 2, 255, 89, 30, 1, 255, 84, 29, 3, 255, 82, 29, 2, 255, 93, 37, 0, 255, 99, 38, 4, 255, 87, 33, 5, 255, 92, 37, 4, 255, 78, 29, 5, 255, 65, 22, 4, 255, 69, 26, 2, 255, 78, 24, 2, 255, 73, 23, 3, 255, 64, 23, 1, 255, 72, 26, 6, 255, 64, 21, 4, 255, 61, 23, 5, 255, 69, 21, 6, 255, 61, 21, 4, 255, 60, 23, 4, 255, 72, 20, 2, 255, 87, 24, 2, 255, 93, 25, 1, 255, 94, 30, 4, 255, 95, 26, 5, 255, 86, 27, 1, 255, 79, 26, 2, 255, 75, 22, 3, 255, 67, 20, 4, 255, 63, 21, 3, 255, 57, 21, 1, 255, 63, 21, 3, 255, 60, 18, 3, 255, 56, 18, 3, 255, 56, 15, 3, 255, 49, 17, 2, 255, 49, 18, 8, 255, 51, 18, 5, 255, 51, 15, 2, 255, 61, 21, 1, 255, 77, 26, 5, 255, 68, 18, 6, 255, 57, 18, 1, 255, 54, 19, 1, 255, 50, 17, 5, 255, 51, 19, 1, 255, 57, 23, 1, 255, 61, 22, 7, 255, 73, 27, 6, 255, 79, 28, 1, 255, 81, 31, 1, 255, 79, 23, 2, 255, 56, 18, 1, 255, 54, 16, 3, 255, 59, 13, 3, 255, 66, 15, 1, 255, 80, 27, 1, 255, 89, 30, 1, 255, 85, 29, 5, 255, 88, 35, 6, 255, 100, 42, 5, 255, 108, 49, 5, 255, 123, 49, 5, 255, 132, 54, 2, 255, 133, 57, 4, 255, 132, 55, 3, 255, 138, 56, 2, 255, 137, 58, 6, 255, 133, 61, 0, 255, 134, 61, 3, 255, 138, 59, 6, 255, 141, 59, 4, 255, 135, 57, 0, 255, 138, 58, 2, 255, 141, 59, 2, 255, 137, 55, 1, 255, 125, 46, 1, 255, 114, 38, 2, 255, 113, 37, 3, 255, 118, 40, 2, 255, 119, 41, 5, 255, 117, 37, 2, 255, 119, 39, 2, 255, 18, 15, 6, 255, 21, 16, 6, 255, 23, 18, 5, 255, 23, 22, 5, 255, 20, 22, 4, 255, 21, 25, 8, 255, 27, 31, 7, 255, 30, 32, 8, 255, 33, 38, 8, 255, 41, 43, 6, 255, 41, 46, 12, 255, 40, 50, 15, 255, 41, 52, 9, 255, 43, 54, 9, 255, 45, 59, 6, 255, 45, 62, 1, 255, 47, 60, 12, 255, 47, 55, 18, 255, 47, 54, 8, 255, 44, 53, 7, 255, 40, 55, 8, 255, 43, 54, 3, 255, 46, 49, 1, 255, 48, 46, 1, 255, 45, 39, 8, 255, 39, 34, 4, 255, 37, 30, 1, 255, 34, 28, 0, 255, 34, 28, 6, 255, 29, 24, 3, 255, 33, 27, 2, 255, 42, 35, 9, 255, 43, 36, 15, 255, 46, 33, 8, 255, 44, 32, 6, 255, 47, 35, 18, 255, 49, 37, 16, 255, 42, 33, 4, 255, 48, 32, 8, 255, 49, 32, 11, 255, 39, 27, 6, 255, 43, 26, 5, 255, 47, 28, 4, 255, 47, 33, 5, 255, 54, 46, 20, 255, 59, 48, 43, 255, 59, 56, 36, 255, 60, 53, 35, 255, 66, 63, 49, 255, 63, 61, 49, 255, 66, 63, 52, 255, 65, 61, 56, 255, 68, 54, 36, 255, 68, 55, 32, 255, 64, 60, 42, 255, 63, 56, 48, 255, 69, 51, 19, 255, 71, 45, 18, 255, 62, 48, 13, 255, 57, 45, 5, 255, 59, 33, 4, 255, 63, 38, 5, 255, 63, 49, 3, 255, 62, 44, 7, 255, 59, 33, 3, 255, 57, 30, 2, 255, 58, 31, 4, 255, 56, 28, 1, 255, 65, 33, 5, 255, 65, 32, 5, 255, 67, 32, 3, 255, 69, 34, 2, 255, 72, 37, 2, 255, 73, 33, 0, 255, 80, 36, 1, 255, 78, 36, 2, 255, 73, 37, 1, 255, 77, 39, 3, 255, 81, 36, 2, 255, 78, 39, 3, 255, 77, 41, 4, 255, 78, 39, 1, 255, 75, 43, 2, 255, 78, 43, 2, 255, 83, 45, 3, 255, 82, 41, 1, 255, 82, 39, 1, 255, 86, 43, 3, 255, 85, 43, 0, 255, 88, 43, 0, 255, 90, 44, 2, 255, 93, 47, 3, 255, 96, 48, 2, 255, 96, 47, 2, 255, 98, 49, 0, 255, 97, 47, 7, 255, 98, 47, 3, 255, 97, 50, 4, 255, 96, 52, 3, 255, 96, 54, 2, 255, 104, 49, 2, 255, 101, 46, 2, 255, 95, 50, 4, 255, 92, 52, 1, 255, 94, 54, 1, 255, 98, 54, 4, 255, 97, 50, 3, 255, 94, 47, 0, 255, 91, 51, 1, 255, 93, 48, 3, 255, 97, 44, 5, 255, 87, 45, 2, 255, 94, 45, 5, 255, 85, 43, 0, 255, 90, 47, 5, 255, 93, 44, 3, 255, 89, 47, 5, 255, 89, 45, 3, 255, 95, 48, 2, 255, 92, 49, 0, 255, 94, 53, 4, 255, 88, 49, 2, 255, 90, 50, 3, 255, 86, 51, 6, 255, 97, 51, 10, 255, 93, 50, 0, 255, 93, 52, 3, 255, 92, 53, 2, 255, 89, 53, 5, 255, 95, 52, 2, 255, 95, 54, 1, 255, 95, 56, 3, 255, 97, 54, 5, 255, 94, 53, 3, 255, 93, 57, 5, 255, 94, 55, 7, 255, 91, 48, 6, 255, 96, 48, 8, 255, 98, 56, 6, 255, 93, 59, 1, 255, 94, 56, 2, 255, 101, 54, 2, 255, 112, 53, 2, 255, 103, 55, 2, 255, 99, 56, 1, 255, 95, 57, 8, 255, 96, 50, 5, 255, 100, 49, 3, 255, 103, 56, 2, 255, 94, 55, 3, 255, 98, 57, 5, 255, 113, 58, 8, 255, 96, 50, 3, 255, 92, 52, 9, 255, 93, 53, 6, 255, 89, 49, 10, 255, 93, 54, 13, 255, 119, 59, 6, 255, 113, 61, 8, 255, 107, 58, 8, 255, 101, 52, 11, 255, 89, 51, 5, 255, 98, 56, 7, 255, 108, 65, 9, 255, 148, 70, 8, 255, 158, 72, 6, 255, 145, 69, 8, 255, 117, 58, 11, 255, 88, 53, 8, 255, 79, 53, 5, 255, 89, 59, 8, 255, 91, 60, 11, 255, 97, 63, 13, 255, 126, 64, 9, 255, 124, 62, 11, 255, 127, 66, 14, 255, 135, 72, 14, 255, 139, 70, 6, 255, 136, 71, 5, 255, 144, 71, 13, 255, 152, 76, 11, 255, 153, 74, 6, 255, 158, 74, 15, 255, 160, 76, 19, 255, 155, 77, 7, 255, 147, 72, 9, 255, 140, 70, 20, 255, 143, 76, 19, 255, 147, 77, 14, 255, 150, 79, 12, 255, 153, 80, 9, 255, 155, 80, 23, 255, 156, 85, 8, 255, 162, 85, 11, 255, 166, 86, 11, 255, 160, 82, 10, 255, 154, 80, 14, 255, 158, 86, 18, 255, 172, 93, 10, 255, 174, 90, 12, 255, 176, 95, 13, 255, 180, 98, 13, 255, 183, 97, 11, 255, 190, 102, 11, 255, 194, 107, 6, 255, 193, 103, 5, 255, 196, 105, 8, 255, 185, 98, 23, 255, 160, 86, 11, 255, 157, 88, 14, 255, 168, 95, 14, 255, 180, 100, 16, 255, 185, 100, 15, 255, 188, 101, 10, 255, 191, 102, 7, 255, 184, 97, 15, 255, 180, 101, 12, 255, 181, 103, 7, 255, 183, 100, 12, 255, 184, 100, 10, 255, 183, 104, 10, 255, 183, 103, 11, 255, 185, 103, 19, 255, 177, 99, 11, 255, 180, 98, 5, 255, 177, 99, 12, 255, 172, 96, 12, 255, 174, 95, 8, 255, 169, 93, 10, 255, 156, 90, 12, 255, 145, 87, 17, 255, 139, 83, 10, 255, 120, 76, 16, 255, 106, 70, 16, 255, 103, 73, 8, 255, 96, 74, 9, 255, 94, 70, 10, 255, 83, 73, 16, 255, 84, 68, 11, 255, 94, 74, 6, 255, 91, 74, 6, 255, 89, 71, 11, 255, 87, 71, 12, 255, 89, 71, 4, 255, 94, 69, 5, 255, 95, 66, 8, 255, 87, 67, 8, 255, 78, 67, 5, 255, 87, 71, 4, 255, 89, 71, 0, 255, 88, 68, 4, 255, 89, 65, 6, 255, 89, 67, 4, 255, 92, 66, 2, 255, 93, 68, 4, 255, 96, 63, 12, 255, 98, 59, 15, 255, 135, 94, 7, 255, 179, 139, 4, 255, 193, 150, 5, 255, 198, 152, 3, 255, 199, 157, 0, 255, 198, 155, 5, 255, 195, 145, 8, 255, 180, 125, 11, 255, 190, 144, 1, 255, 186, 132, 5, 255, 178, 121, 6, 255, 179, 125, 9, 255, 176, 125, 5, 255, 179, 125, 6, 255, 181, 125, 3, 255, 186, 128, 7, 255, 185, 127, 6, 255, 180, 123, 3, 255, 181, 123, 4, 255, 182, 126, 0, 255, 178, 123, 1, 255, 181, 124, 5, 255, 178, 118, 1, 255, 172, 110, 2, 255, 167, 105, 1, 255, 174, 115, 5, 255, 176, 115, 8, 255, 174, 112, 4, 255, 171, 108, 1, 255, 169, 105, 2, 255, 169, 102, 5, 255, 164, 99, 4, 255, 161, 96, 6, 255, 159, 97, 7, 255, 156, 92, 2, 255, 157, 91, 2, 255, 152, 86, 3, 255, 146, 79, 2, 255, 146, 76, 1, 255, 148, 76, 7, 255, 145, 76, 5, 255, 142, 76, 3, 255, 143, 76, 8, 255, 138, 71, 1, 255, 138, 70, 2, 255, 141, 69, 2, 255, 138, 66, 1, 255, 139, 66, 1, 255, 135, 64, 1, 255, 127, 61, 2, 255, 126, 55, 0, 255, 133, 61, 2, 255, 136, 64, 3, 255, 131, 60, 1, 255, 127, 57, 0, 255, 123, 56, 2, 255, 117, 49, 0, 255, 116, 47, 2, 255, 109, 47, 4, 255, 101, 42, 5, 255, 93, 34, 3, 255, 89, 34, 6, 255, 78, 29, 2, 255, 73, 26, 4, 255, 93, 35, 5, 255, 101, 37, 4, 255, 97, 33, 2, 255, 99, 33, 3, 255, 94, 32, 5, 255, 78, 25, 2, 255, 71, 26, 3, 255, 69, 22, 3, 255, 70, 16, 3, 255, 68, 21, 4, 255, 68, 24, 4, 255, 65, 20, 3, 255, 64, 25, 5, 255, 60, 23, 1, 255, 55, 18, 3, 255, 64, 20, 2, 255, 81, 29, 1, 255, 91, 31, 4, 255, 95, 26, 2, 255, 100, 29, 5, 255, 94, 23, 1, 255, 88, 24, 0, 255, 83, 25, 1, 255, 79, 24, 2, 255, 73, 23, 4, 255, 62, 21, 2, 255, 64, 21, 3, 255, 66, 20, 5, 255, 59, 19, 5, 255, 51, 17, 4, 255, 55, 18, 6, 255, 57, 21, 4, 255, 53, 16, 3, 255, 56, 15, 3, 255, 54, 11, 1, 255, 56, 14, 2, 255, 65, 18, 6, 255, 57, 17, 8, 255, 48, 18, 2, 255, 65, 23, 3, 255, 89, 31, 5, 255, 84, 27, 0, 255, 84, 31, 3, 255, 91, 36, 6, 255, 94, 33, 1, 255, 107, 45, 0, 255, 112, 46, 3, 255, 92, 30, 3, 255, 67, 21, 3, 255, 68, 20, 2, 255, 61, 16, 4, 255, 69, 18, 3, 255, 91, 30, 5, 255, 103, 36, 4, 255, 105, 39, 2, 255, 118, 50, 2, 255, 132, 55, 4, 255, 135, 57, 3, 255, 137, 57, 1, 255, 131, 53, 0, 255, 130, 54, 2, 255, 136, 58, 6, 255, 135, 56, 3, 255, 133, 55, 2, 255, 136, 58, 1, 255, 132, 57, 1, 255, 135, 59, 4, 255, 136, 59, 1, 255, 136, 62, 1, 255, 140, 61, 2, 255, 140, 57, 0, 255, 141, 60, 1, 255, 139, 60, 4, 255, 130, 52, 2, 255, 124, 48, 1, 255, 123, 50, 2, 255, 124, 51, 2, 255, 125, 42, 1, 255, 123, 41, 3, 255, 21, 19, 7, 255, 19, 16, 2, 255, 25, 22, 5, 255, 24, 25, 4, 255, 25, 28, 6, 255, 25, 31, 7, 255, 28, 35, 3, 255, 34, 41, 8, 255, 35, 41, 8, 255, 42, 50, 7, 255, 45, 56, 8, 255, 38, 53, 9, 255, 40, 55, 13, 255, 48, 58, 18, 255, 47, 58, 14, 255, 49, 59, 10, 255, 49, 60, 10, 255, 46, 55, 11, 255, 42, 51, 5, 255, 41, 53, 12, 255, 41, 48, 8, 255, 45, 45, 4, 255, 47, 46, 3, 255, 41, 42, 3, 255, 29, 36, 2, 255, 28, 31, 4, 255, 30, 26, 3, 255, 29, 26, 5, 255, 34, 27, 8, 255, 33, 21, 4, 255, 34, 22, 6, 255, 40, 28, 12, 255, 38, 26, 8, 255, 40, 27, 8, 255, 43, 31, 0, 255, 47, 33, 22, 255, 53, 36, 23, 255, 54, 38, 3, 255, 51, 33, 9, 255, 47, 31, 12, 255, 40, 28, 4, 255, 39, 27, 3, 255, 44, 28, 5, 255, 41, 26, 6, 255, 46, 34, 16, 255, 56, 51, 32, 255, 53, 56, 41, 255, 57, 51, 44, 255, 68, 63, 49, 255, 67, 63, 47, 255, 66, 65, 53, 255, 67, 62, 53, 255, 60, 51, 41, 255, 59, 54, 29, 255, 65, 59, 39, 255, 71, 55, 41, 255, 68, 48, 15, 255, 58, 39, 25, 255, 59, 47, 21, 255, 69, 46, 9, 255, 64, 35, 8, 255, 64, 41, 8, 255, 68, 50, 2, 255, 68, 45, 1, 255, 62, 38, 5, 255, 59, 30, 1, 255, 65, 30, 3, 255, 69, 32, 5, 255, 67, 31, 4, 255, 64, 31, 3, 255, 69, 35, 5, 255, 73, 37, 5, 255, 70, 36, 1, 255, 76, 36, 2, 255, 82, 38, 5, 255, 73, 36, 2, 255, 71, 37, 3, 255, 76, 35, 1, 255, 76, 38, 1, 255, 81, 39, 4, 255, 82, 38, 3, 255, 82, 42, 4, 255, 78, 43, 3, 255, 76, 41, 2, 255, 74, 39, 1, 255, 75, 40, 3, 255, 78, 41, 3, 255, 84, 44, 3, 255, 86, 44, 1, 255, 89, 44, 1, 255, 86, 42, 2, 255, 92, 46, 1, 255, 98, 49, 1, 255, 96, 47, 4, 255, 96, 47, 3, 255, 95, 46, 4, 255, 102, 52, 7, 255, 95, 49, 1, 255, 105, 51, 3, 255, 99, 52, 2, 255, 96, 52, 1, 255, 99, 49, 2, 255, 99, 50, 0, 255, 102, 54, 2, 255, 103, 54, 3, 255, 102, 49, 3, 255, 103, 49, 5, 255, 99, 52, 4, 255, 95, 56, 1, 255, 100, 54, 4, 255, 101, 53, 3, 255, 105, 64, 4, 255, 102, 51, 9, 255, 92, 53, 2, 255, 92, 54, 3, 255, 99, 49, 8, 255, 101, 53, 7, 255, 97, 51, 0, 255, 116, 52, 4, 255, 114, 47, 6, 255, 94, 43, 4, 255, 90, 46, 4, 255, 99, 44, 4, 255, 95, 45, 4, 255, 97, 47, 3, 255, 106, 48, 3, 255, 120, 52, 9, 255, 103, 50, 5, 255, 101, 53, 5, 255, 99, 53, 4, 255, 103, 55, 6, 255, 101, 53, 5, 255, 101, 52, 3, 255, 118, 55, 0, 255, 117, 53, 0, 255, 102, 49, 3, 255, 94, 50, 8, 255, 105, 54, 5, 255, 101, 56, 3, 255, 89, 55, 4, 255, 107, 57, 9, 255, 133, 60, 6, 255, 137, 59, 2, 255, 130, 58, 7, 255, 117, 54, 5, 255, 104, 50, 5, 255, 99, 51, 9, 255, 99, 54, 8, 255, 96, 52, 6, 255, 108, 54, 11, 255, 130, 65, 6, 255, 135, 65, 6, 255, 109, 52, 7, 255, 108, 54, 7, 255, 100, 54, 7, 255, 97, 55, 8, 255, 121, 62, 4, 255, 132, 66, 6, 255, 144, 68, 3, 255, 144, 64, 4, 255, 108, 51, 7, 255, 84, 47, 7, 255, 105, 55, 10, 255, 140, 65, 6, 255, 161, 71, 2, 255, 154, 69, 4, 255, 143, 64, 4, 255, 132, 66, 7, 255, 107, 65, 9, 255, 101, 60, 7, 255, 116, 63, 11, 255, 126, 62, 19, 255, 132, 67, 8, 255, 129, 62, 12, 255, 131, 71, 9, 255, 137, 70, 6, 255, 144, 68, 11, 255, 147, 71, 15, 255, 152, 74, 13, 255, 153, 75, 7, 255, 155, 76, 10, 255, 158, 78, 5, 255, 158, 78, 6, 255, 156, 75, 8, 255, 152, 73, 7, 255, 150, 73, 6, 255, 152, 75, 14, 255, 154, 79, 19, 255, 156, 80, 13, 255, 159, 80, 18, 255, 158, 81, 17, 255, 155, 84, 12, 255, 160, 80, 17, 255, 156, 78, 11, 255, 152, 80, 12, 255, 155, 86, 16, 255, 160, 87, 15, 255, 175, 89, 15, 255, 184, 97, 16, 255, 179, 96, 16, 255, 181, 98, 15, 255, 183, 99, 12, 255, 186, 98, 13, 255, 189, 100, 12, 255, 191, 106, 9, 255, 186, 101, 7, 255, 186, 99, 12, 255, 178, 94, 25, 255, 178, 102, 15, 255, 181, 105, 9, 255, 185, 102, 11, 255, 181, 101, 9, 255, 180, 101, 11, 255, 179, 99, 9, 255, 177, 98, 6, 255, 175, 99, 6, 255, 179, 101, 12, 255, 183, 105, 16, 255, 181, 102, 22, 255, 184, 107, 16, 255, 177, 107, 11, 255, 176, 101, 12, 255, 174, 96, 5, 255, 166, 94, 15, 255, 156, 90, 19, 255, 157, 87, 11, 255, 152, 87, 19, 255, 127, 78, 18, 255, 109, 76, 26, 255, 107, 79, 14, 255, 96, 73, 12, 255, 93, 71, 9, 255, 89, 73, 9, 255, 86, 73, 8, 255, 90, 74, 12, 255, 89, 74, 15, 255, 94, 72, 12, 255, 94, 74, 9, 255, 88, 70, 8, 255, 90, 72, 10, 255, 90, 68, 6, 255, 92, 70, 8, 255, 88, 71, 3, 255, 88, 67, 8, 255, 90, 70, 13, 255, 90, 68, 4, 255, 94, 68, 6, 255, 92, 69, 7, 255, 93, 67, 7, 255, 96, 65, 10, 255, 94, 67, 8, 255, 94, 69, 7, 255, 109, 73, 9, 255, 103, 65, 7, 255, 95, 69, 8, 255, 101, 70, 6, 255, 101, 70, 9, 255, 132, 92, 7, 255, 172, 126, 13, 255, 194, 149, 2, 255, 193, 148, 10, 255, 194, 148, 14, 255, 204, 158, 3, 255, 184, 135, 1, 255, 185, 134, 5, 255, 196, 145, 8, 255, 185, 132, 0, 255, 176, 119, 2, 255, 175, 119, 5, 255, 173, 122, 1, 255, 179, 124, 2, 255, 180, 123, 1, 255, 182, 124, 5, 255, 184, 125, 9, 255, 183, 122, 9, 255, 179, 121, 6, 255, 178, 126, 4, 255, 176, 124, 4, 255, 177, 119, 5, 255, 174, 113, 1, 255, 170, 109, 4, 255, 169, 109, 8, 255, 172, 114, 7, 255, 174, 114, 7, 255, 174, 113, 6, 255, 174, 110, 5, 255, 170, 104, 5, 255, 167, 99, 5, 255, 160, 101, 3, 255, 156, 97, 6, 255, 158, 95, 9, 255, 157, 92, 2, 255, 159, 89, 3, 255, 155, 84, 8, 255, 153, 78, 6, 255, 152, 80, 3, 255, 139, 73, 3, 255, 130, 69, 0, 255, 139, 77, 0, 255, 142, 74, 4, 255, 141, 67, 5, 255, 141, 69, 3, 255, 136, 69, 1, 255, 134, 68, 0, 255, 140, 70, 4, 255, 139, 68, 6, 255, 133, 64, 5, 255, 130, 62, 3, 255, 131, 64, 4, 255, 131, 64, 4, 255, 131, 61, 2, 255, 130, 59, 5, 255, 129, 57, 5, 255, 121, 53, 1, 255, 120, 54, 3, 255, 116, 50, 7, 255, 106, 42, 1, 255, 102, 42, 2, 255, 90, 34, 2, 255, 78, 27, 4, 255, 72, 24, 3, 255, 94, 34, 8, 255, 101, 38, 4, 255, 101, 38, 3, 255, 100, 35, 5, 255, 93, 34, 5, 255, 82, 30, 0, 255, 77, 28, 2, 255, 69, 21, 2, 255, 66, 20, 2, 255, 72, 25, 6, 255, 71, 21, 1, 255, 72, 23, 3, 255, 71, 23, 5, 255, 62, 23, 3, 255, 61, 16, 4, 255, 73, 20, 5, 255, 82, 26, 0, 255, 88, 24, 4, 255, 94, 27, 2, 255, 100, 28, 2, 255, 97, 26, 1, 255, 94, 28, 3, 255, 87, 27, 1, 255, 87, 25, 2, 255, 85, 24, 3, 255, 76, 23, 1, 255, 77, 23, 3, 255, 69, 21, 1, 255, 67, 21, 2, 255, 64, 17, 2, 255, 55, 15, 2, 255, 58, 21, 5, 255, 57, 17, 2, 255, 60, 18, 4, 255, 60, 18, 3, 255, 60, 17, 2, 255, 61, 19, 6, 255, 60, 15, 2, 255, 63, 21, 2, 255, 69, 18, 6, 255, 91, 27, 1, 255, 102, 37, 7, 255, 101, 34, 6, 255, 104, 30, 0, 255, 107, 36, 4, 255, 124, 45, 7, 255, 115, 32, 1, 255, 93, 26, 1, 255, 81, 27, 6, 255, 86, 21, 5, 255, 75, 19, 5, 255, 66, 17, 0, 255, 75, 21, 0, 255, 88, 24, 2, 255, 103, 28, 0, 255, 120, 42, 5, 255, 131, 52, 5, 255, 138, 56, 2, 255, 134, 54, 2, 255, 134, 55, 6, 255, 129, 52, 2, 255, 130, 55, 2, 255, 133, 58, 1, 255, 134, 55, 2, 255, 134, 57, 3, 255, 134, 57, 4, 255, 135, 58, 3, 255, 138, 58, 1, 255, 140, 61, 1, 255, 139, 57, 1, 255, 140, 59, 1, 255, 142, 63, 1, 255, 143, 63, 1, 255, 142, 61, 3, 255, 141, 62, 5, 255, 139, 64, 5, 255, 138, 61, 3, 255, 136, 49, 3, 255, 124, 44, 4, 255, 17, 17, 3, 255, 22, 22, 11, 255, 24, 26, 15, 255, 24, 27, 9, 255, 28, 32, 10, 255, 30, 34, 13, 255, 30, 38, 11, 255, 34, 45, 17, 255, 36, 49, 17, 255, 36, 54, 10, 255, 39, 59, 9, 255, 43, 61, 11, 255, 39, 56, 10, 255, 51, 61, 13, 255, 55, 66, 6, 255, 53, 60, 4, 255, 49, 57, 7, 255, 48, 58, 10, 255, 42, 55, 9, 255, 36, 48, 4, 255, 42, 44, 5, 255, 47, 41, 6, 255, 43, 38, 5, 255, 37, 34, 5, 255, 32, 28, 8, 255, 34, 27, 10, 255, 31, 24, 4, 255, 34, 21, 4, 255, 35, 21, 4, 255, 33, 23, 6, 255, 32, 22, 7, 255, 30, 19, 4, 255, 36, 26, 11, 255, 35, 25, 13, 255, 37, 29, 1, 255, 41, 31, 24, 255, 49, 36, 24, 255, 49, 35, 11, 255, 54, 33, 14, 255, 52, 32, 9, 255, 46, 35, 5, 255, 39, 31, 0, 255, 40, 28, 0, 255, 45, 27, 6, 255, 50, 30, 11, 255, 57, 49, 30, 255, 58, 52, 42, 255, 56, 48, 43, 255, 63, 63, 50, 255, 61, 62, 46, 255, 63, 61, 49, 255, 63, 62, 48, 255, 60, 57, 48, 255, 54, 53, 36, 255, 57, 53, 40, 255, 73, 57, 36, 255, 68, 51, 13, 255, 52, 40, 12, 255, 62, 47, 17, 255, 73, 47, 11, 255, 58, 39, 4, 255, 59, 38, 4, 255, 71, 42, 5, 255, 64, 41, 8, 255, 69, 38, 6, 255, 63, 31, 1, 255, 63, 30, 3, 255, 65, 32, 3, 255, 68, 32, 2, 255, 72, 30, 3, 255, 72, 31, 3, 255, 74, 37, 3, 255, 72, 36, 1, 255, 75, 36, 1, 255, 80, 40, 5, 255, 71, 36, 1, 255, 72, 38, 3, 255, 84, 36, 3, 255, 72, 38, 0, 255, 80, 38, 3, 255, 87, 39, 5, 255, 83, 40, 5, 255, 80, 39, 4, 255, 78, 44, 5, 255, 78, 42, 3, 255, 81, 40, 3, 255, 86, 40, 4, 255, 89, 43, 3, 255, 93, 46, 2, 255, 93, 48, 3, 255, 89, 46, 6, 255, 92, 47, 2, 255, 94, 48, 0, 255, 95, 47, 6, 255, 99, 50, 9, 255, 99, 49, 1, 255, 103, 48, 1, 255, 94, 51, 4, 255, 97, 50, 5, 255, 101, 50, 1, 255, 105, 54, 1, 255, 100, 57, 4, 255, 94, 54, 3, 255, 96, 52, 2, 255, 99, 52, 3, 255, 102, 52, 5, 255, 105, 53, 3, 255, 103, 51, 3, 255, 101, 48, 3, 255, 109, 49, 0, 255, 104, 51, 7, 255, 125, 55, 10, 255, 143, 58, 3, 255, 136, 61, 2, 255, 105, 51, 1, 255, 103, 42, 5, 255, 102, 51, 4, 255, 107, 52, 1, 255, 130, 51, 2, 255, 135, 53, 4, 255, 121, 50, 1, 255, 121, 55, 4, 255, 114, 51, 6, 255, 104, 49, 5, 255, 85, 47, 0, 255, 100, 49, 6, 255, 131, 58, 12, 255, 123, 50, 5, 255, 122, 52, 3, 255, 118, 52, 4, 255, 101, 50, 4, 255, 86, 41, 0, 255, 104, 45, 3, 255, 128, 53, 4, 255, 129, 54, 0, 255, 116, 54, 6, 255, 105, 51, 4, 255, 109, 52, 1, 255, 99, 51, 3, 255, 93, 52, 4, 255, 127, 60, 7, 255, 130, 54, 0, 255, 121, 58, 3, 255, 137, 61, 9, 255, 136, 60, 5, 255, 103, 48, 0, 255, 85, 49, 0, 255, 89, 52, 3, 255, 102, 59, 8, 255, 140, 67, 4, 255, 159, 72, 4, 255, 154, 71, 6, 255, 135, 61, 4, 255, 117, 52, 6, 255, 100, 53, 6, 255, 99, 51, 2, 255, 144, 63, 11, 255, 161, 73, 3, 255, 163, 67, 9, 255, 135, 53, 11, 255, 115, 58, 9, 255, 80, 51, 7, 255, 85, 48, 10, 255, 117, 60, 8, 255, 137, 68, 7, 255, 138, 70, 10, 255, 142, 69, 12, 255, 147, 73, 12, 255, 143, 67, 10, 255, 146, 69, 11, 255, 143, 67, 6, 255, 134, 62, 8, 255, 138, 69, 8, 255, 142, 68, 12, 255, 152, 80, 8, 255, 155, 78, 4, 255, 154, 71, 5, 255, 156, 73, 11, 255, 154, 73, 6, 255, 158, 77, 8, 255, 156, 75, 11, 255, 152, 76, 5, 255, 153, 77, 10, 255, 151, 75, 18, 255, 154, 78, 14, 255, 156, 82, 16, 255, 156, 79, 13, 255, 159, 76, 11, 255, 161, 80, 9, 255, 157, 81, 7, 255, 151, 73, 29, 255, 153, 76, 24, 255, 156, 81, 18, 255, 160, 87, 12, 255, 166, 88, 14, 255, 174, 91, 25, 255, 180, 97, 12, 255, 179, 98, 6, 255, 180, 94, 17, 255, 184, 97, 19, 255, 184, 100, 14, 255, 184, 98, 14, 255, 190, 104, 17, 255, 183, 100, 14, 255, 176, 94, 12, 255, 181, 96, 13, 255, 189, 107, 10, 255, 187, 106, 10, 255, 185, 103, 23, 255, 178, 94, 22, 255, 176, 96, 17, 255, 176, 100, 15, 255, 181, 102, 15, 255, 180, 101, 13, 255, 176, 104, 10, 255, 180, 110, 10, 255, 183, 104, 21, 255, 184, 101, 12, 255, 183, 100, 15, 255, 170, 97, 13, 255, 164, 100, 11, 255, 164, 95, 18, 255, 158, 91, 8, 255, 148, 92, 8, 255, 145, 88, 16, 255, 137, 83, 14, 255, 111, 73, 15, 255, 92, 80, 17, 255, 77, 75, 17, 255, 83, 75, 14, 255, 89, 76, 15, 255, 92, 77, 6, 255, 93, 74, 16, 255, 94, 74, 8, 255, 93, 73, 3, 255, 89, 72, 17, 255, 91, 73, 8, 255, 94, 73, 6, 255, 92, 74, 10, 255, 91, 71, 16, 255, 90, 71, 15, 255, 87, 71, 6, 255, 87, 73, 2, 255, 88, 71, 4, 255, 87, 70, 8, 255, 89, 67, 5, 255, 102, 68, 6, 255, 113, 73, 11, 255, 114, 72, 9, 255, 108, 67, 9, 255, 99, 65, 8, 255, 99, 65, 7, 255, 97, 65, 4, 255, 103, 70, 11, 255, 111, 67, 9, 255, 108, 66, 4, 255, 95, 66, 13, 255, 138, 102, 9, 255, 166, 113, 10, 255, 186, 140, 6, 255, 192, 147, 10, 255, 194, 147, 11, 255, 196, 150, 0, 255, 179, 126, 9, 255, 179, 125, 5, 255, 191, 138, 6, 255, 186, 131, 4, 255, 183, 125, 6, 255, 167, 106, 8, 255, 164, 115, 5, 255, 167, 118, 5, 255, 169, 120, 2, 255, 173, 121, 5, 255, 177, 121, 9, 255, 178, 118, 10, 255, 179, 120, 9, 255, 175, 120, 2, 255, 174, 119, 5, 255, 172, 114, 6, 255, 174, 115, 6, 255, 173, 114, 6, 255, 170, 112, 6, 255, 171, 111, 5, 255, 171, 108, 5, 255, 170, 106, 4, 255, 170, 106, 4, 255, 168, 100, 5, 255, 167, 98, 7, 255, 160, 96, 0, 255, 156, 92, 2, 255, 155, 89, 3, 255, 154, 86, 0, 255, 155, 85, 4, 255, 147, 76, 5, 255, 135, 62, 0, 255, 141, 72, 2, 255, 143, 77, 5, 255, 137, 73, 1, 255, 139, 75, 3, 255, 135, 69, 2, 255, 136, 66, 1, 255, 141, 66, 4, 255, 138, 69, 2, 255, 135, 70, 2, 255, 137, 70, 2, 255, 139, 68, 4, 255, 138, 67, 4, 255, 135, 61, 4, 255, 132, 60, 5, 255, 129, 61, 3, 255, 129, 61, 5, 255, 126, 57, 4, 255, 122, 55, 4, 255, 119, 53, 1, 255, 123, 54, 2, 255, 117, 50, 6, 255, 112, 48, 3, 255, 110, 47, 4, 255, 94, 34, 0, 255, 84, 27, 7, 255, 76, 29, 6, 255, 91, 32, 4, 255, 94, 34, 0, 255, 97, 38, 3, 255, 94, 33, 4, 255, 89, 32, 3, 255, 86, 33, 1, 255, 83, 26, 0, 255, 74, 25, 5, 255, 64, 24, 1, 255, 75, 26, 3, 255, 85, 25, 7, 255, 76, 17, 3, 255, 71, 22, 2, 255, 67, 25, 1, 255, 64, 17, 5, 255, 78, 22, 5, 255, 89, 30, 0, 255, 90, 26, 4, 255, 97, 27, 3, 255, 102, 27, 2, 255, 102, 27, 2, 255, 99, 28, 3, 255, 95, 27, 2, 255, 97, 27, 4, 255, 97, 27, 5, 255, 89, 27, 6, 255, 81, 20, 1, 255, 75, 18, 2, 255, 72, 18, 2, 255, 71, 19, 3, 255, 72, 23, 7, 255, 64, 20, 5, 255, 63, 18, 2, 255, 66, 18, 2, 255, 65, 17, 0, 255, 62, 18, 1, 255, 55, 16, 2, 255, 61, 16, 2, 255, 70, 20, 3, 255, 78, 23, 9, 255, 75, 21, 1, 255, 72, 20, 2, 255, 78, 20, 5, 255, 81, 18, 0, 255, 86, 25, 3, 255, 100, 29, 6, 255, 92, 28, 1, 255, 86, 29, 0, 255, 92, 30, 3, 255, 88, 28, 2, 255, 77, 22, 5, 255, 64, 18, 1, 255, 62, 20, 1, 255, 69, 19, 3, 255, 83, 20, 1, 255, 88, 24, 0, 255, 102, 33, 0, 255, 129, 48, 6, 255, 133, 53, 7, 255, 135, 54, 4, 255, 132, 52, 0, 255, 133, 57, 1, 255, 134, 59, 2, 255, 132, 56, 2, 255, 131, 54, 1, 255, 138, 57, 4, 255, 136, 55, 1, 255, 139, 56, 2, 255, 142, 58, 2, 255, 140, 58, 3, 255, 140, 60, 4, 255, 141, 62, 1, 255, 144, 62, 1, 255, 145, 60, 0, 255, 147, 62, 2, 255, 147, 67, 3, 255, 143, 65, 2, 255, 135, 52, 1, 255, 119, 41, 0, 255, 22, 20, 9, 255, 20, 22, 2, 255, 24, 28, 5, 255, 25, 28, 13, 255, 30, 31, 16, 255, 38, 42, 12, 255, 37, 46, 10, 255, 39, 51, 14, 255, 40, 54, 12, 255, 44, 62, 13, 255, 42, 60, 13, 255, 45, 62, 13, 255, 49, 63, 10, 255, 49, 62, 8, 255, 46, 59, 6, 255, 43, 53, 11, 255, 44, 53, 12, 255, 44, 52, 3, 255, 42, 49, 5, 255, 41, 42, 4, 255, 44, 44, 11, 255, 37, 37, 7, 255, 33, 32, 3, 255, 30, 27, 1, 255, 35, 28, 7, 255, 26, 24, 2, 255, 27, 24, 3, 255, 39, 21, 5, 255, 40, 24, 7, 255, 27, 21, 1, 255, 26, 17, 0, 255, 39, 22, 8, 255, 39, 24, 9, 255, 40, 24, 13, 255, 36, 24, 8, 255, 40, 26, 18, 255, 45, 35, 22, 255, 53, 35, 26, 255, 53, 33, 20, 255, 50, 28, 8, 255, 54, 34, 10, 255, 46, 28, 3, 255, 41, 23, 1, 255, 49, 27, 5, 255, 57, 31, 7, 255, 59, 40, 31, 255, 58, 51, 40, 255, 56, 49, 34, 255, 64, 60, 50, 255, 63, 59, 51, 255, 62, 62, 50, 255, 65, 66, 46, 255, 70, 57, 36, 255, 72, 52, 32, 255, 71, 55, 41, 255, 76, 57, 33, 255, 79, 47, 24, 255, 71, 40, 10, 255, 71, 45, 13, 255, 70, 48, 11, 255, 54, 46, 4, 255, 56, 46, 0, 255, 70, 44, 4, 255, 71, 37, 14, 255, 69, 38, 4, 255, 65, 32, 2, 255, 67, 33, 4, 255, 68, 32, 2, 255, 71, 33, 2, 255, 74, 33, 3, 255, 75, 35, 2, 255, 74, 36, 0, 255, 76, 38, 2, 255, 77, 37, 2, 255, 79, 38, 3, 255, 76, 36, 1, 255, 77, 38, 2, 255, 88, 40, 4, 255, 81, 38, 1, 255, 81, 41, 3, 255, 81, 40, 3, 255, 79, 35, 1, 255, 82, 41, 4, 255, 87, 43, 2, 255, 86, 43, 1, 255, 85, 42, 1, 255, 86, 43, 1, 255, 92, 45, 3, 255, 97, 46, 2, 255, 98, 45, 1, 255, 94, 43, 2, 255, 93, 50, 3, 255, 97, 54, 4, 255, 101, 49, 6, 255, 103, 50, 3, 255, 100, 49, 3, 255, 102, 48, 1, 255, 105, 49, 6, 255, 96, 43, 2, 255, 105, 46, 0, 255, 122, 50, 3, 255, 121, 46, 3, 255, 105, 51, 4, 255, 99, 48, 3, 255, 106, 43, 1, 255, 118, 47, 2, 255, 124, 50, 1, 255, 122, 50, 4, 255, 113, 45, 6, 255, 102, 43, 5, 255, 100, 44, 0, 255, 111, 42, 0, 255, 126, 51, 4, 255, 132, 50, 4, 255, 129, 57, 3, 255, 115, 49, 2, 255, 104, 46, 5, 255, 105, 44, 6, 255, 111, 47, 3, 255, 128, 54, 1, 255, 142, 56, 1, 255, 135, 54, 0, 255, 123, 54, 2, 255, 114, 51, 4, 255, 102, 46, 3, 255, 108, 46, 3, 255, 121, 55, 4, 255, 128, 54, 1, 255, 138, 55, 2, 255, 128, 53, 3, 255, 113, 52, 4, 255, 97, 46, 5, 255, 96, 40, 3, 255, 113, 46, 9, 255, 127, 55, 4, 255, 135, 59, 1, 255, 130, 56, 2, 255, 112, 49, 4, 255, 92, 42, 5, 255, 90, 46, 2, 255, 115, 56, 1, 255, 141, 65, 2, 255, 153, 69, 3, 255, 143, 59, 3, 255, 128, 48, 4, 255, 101, 42, 5, 255, 87, 45, 4, 255, 78, 46, 5, 255, 97, 52, 5, 255, 145, 60, 6, 255, 155, 63, 6, 255, 147, 60, 1, 255, 128, 52, 5, 255, 106, 49, 10, 255, 99, 52, 6, 255, 90, 51, 7, 255, 132, 56, 10, 255, 145, 67, 5, 255, 129, 60, 4, 255, 134, 59, 9, 255, 129, 61, 6, 255, 131, 65, 13, 255, 124, 65, 13, 255, 121, 66, 10, 255, 137, 61, 12, 255, 143, 67, 8, 255, 148, 69, 8, 255, 144, 68, 7, 255, 139, 60, 10, 255, 143, 68, 8, 255, 142, 67, 6, 255, 148, 69, 5, 255, 155, 70, 16, 255, 152, 69, 11, 255, 160, 71, 8, 255, 159, 75, 11, 255, 152, 71, 11, 255, 155, 73, 15, 255, 148, 74, 15, 255, 154, 75, 12, 255, 151, 70, 12, 255, 147, 72, 7, 255, 150, 78, 11, 255, 152, 76, 9, 255, 156, 76, 10, 255, 157, 78, 18, 255, 153, 78, 14, 255, 159, 79, 11, 255, 155, 78, 14, 255, 148, 77, 15, 255, 154, 80, 16, 255, 168, 88, 12, 255, 169, 95, 12, 255, 176, 93, 11, 255, 181, 94, 11, 255, 180, 92, 24, 255, 176, 91, 14, 255, 181, 94, 18, 255, 184, 95, 17, 255, 184, 100, 8, 255, 186, 103, 11, 255, 188, 101, 18, 255, 185, 102, 12, 255, 177, 98, 3, 255, 174, 100, 8, 255, 179, 101, 13, 255, 181, 100, 9, 255, 181, 99, 9, 255, 180, 102, 12, 255, 180, 104, 16, 255, 182, 107, 11, 255, 180, 107, 15, 255, 185, 103, 13, 255, 185, 100, 8, 255, 179, 99, 12, 255, 177, 97, 24, 255, 172, 94, 16, 255, 166, 90, 25, 255, 162, 94, 6, 255, 151, 92, 12, 255, 142, 89, 19, 255, 146, 90, 21, 255, 140, 86, 14, 255, 125, 81, 16, 255, 119, 80, 12, 255, 108, 79, 12, 255, 98, 76, 14, 255, 97, 76, 9, 255, 95, 75, 12, 255, 94, 78, 16, 255, 87, 75, 15, 255, 89, 74, 17, 255, 92, 75, 17, 255, 92, 75, 13, 255, 94, 76, 13, 255, 94, 76, 12, 255, 89, 72, 9, 255, 89, 71, 11, 255, 90, 72, 10, 255, 89, 70, 15, 255, 87, 70, 13, 255, 88, 72, 5, 255, 88, 73, 8, 255, 93, 71, 7, 255, 102, 74, 4, 255, 114, 72, 11, 255, 118, 71, 9, 255, 115, 70, 6, 255, 125, 69, 8, 255, 129, 71, 6, 255, 123, 71, 6, 255, 130, 73, 8, 255, 103, 68, 7, 255, 100, 66, 8, 255, 120, 69, 9, 255, 102, 66, 4, 255, 106, 69, 6, 255, 128, 94, 2, 255, 151, 106, 9, 255, 172, 130, 11, 255, 190, 146, 0, 255, 192, 145, 4, 255, 192, 145, 10, 255, 183, 132, 15, 255, 182, 133, 6, 255, 186, 136, 5, 255, 184, 130, 9, 255, 167, 110, 1, 255, 168, 108, 8, 255, 173, 117, 7, 255, 170, 115, 6, 255, 167, 114, 5, 255, 171, 116, 9, 255, 175, 114, 9, 255, 175, 111, 6, 255, 174, 116, 8, 255, 173, 115, 1, 255, 175, 116, 4, 255, 170, 111, 6, 255, 172, 113, 6, 255, 171, 111, 2, 255, 170, 110, 2, 255, 170, 110, 3, 255, 171, 108, 4, 255, 167, 101, 3, 255, 164, 96, 0, 255, 159, 89, 2, 255, 158, 88, 7, 255, 161, 90, 5, 255, 156, 85, 2, 255, 155, 85, 2, 255, 157, 87, 2, 255, 150, 81, 1, 255, 141, 74, 3, 255, 135, 67, 3, 255, 138, 70, 6, 255, 142, 73, 7, 255, 142, 73, 1, 255, 144, 75, 4, 255, 140, 71, 9, 255, 139, 72, 2, 255, 142, 72, 4, 255, 143, 73, 4, 255, 146, 74, 5, 255, 143, 72, 3, 255, 139, 69, 2, 255, 136, 66, 0, 255, 131, 60, 0, 255, 131, 61, 3, 255, 128, 62, 2, 255, 131, 62, 6, 255, 132, 60, 8, 255, 128, 54, 4, 255, 125, 51, 3, 255, 119, 48, 1, 255, 115, 48, 1, 255, 112, 48, 2, 255, 105, 43, 1, 255, 89, 30, 0, 255, 81, 26, 3, 255, 79, 32, 4, 255, 91, 35, 2, 255, 100, 40, 3, 255, 96, 36, 1, 255, 96, 34, 5, 255, 88, 31, 2, 255, 90, 30, 2, 255, 83, 26, 3, 255, 69, 24, 4, 255, 69, 22, 2, 255, 77, 22, 1, 255, 79, 23, 3, 255, 73, 23, 5, 255, 74, 24, 2, 255, 74, 21, 3, 255, 76, 25, 4, 255, 89, 28, 2, 255, 103, 27, 1, 255, 102, 29, 0, 255, 108, 30, 2, 255, 110, 30, 4, 255, 108, 30, 4, 255, 101, 27, 1, 255, 99, 27, 1, 255, 103, 29, 3, 255, 100, 25, 0, 255, 95, 28, 0, 255, 93, 31, 2, 255, 93, 28, 4, 255, 86, 26, 3, 255, 80, 25, 2, 255, 82, 22, 2, 255, 81, 23, 5, 255, 80, 22, 3, 255, 82, 22, 2, 255, 82, 23, 2, 255, 76, 21, 1, 255, 68, 19, 4, 255, 62, 21, 3, 255, 69, 20, 0, 255, 85, 26, 2, 255, 84, 26, 1, 255, 75, 22, 4, 255, 66, 17, 5, 255, 66, 22, 2, 255, 73, 27, 4, 255, 79, 23, 1, 255, 76, 21, 1, 255, 73, 23, 3, 255, 74, 18, 1, 255, 85, 22, 3, 255, 71, 18, 4, 255, 63, 14, 1, 255, 68, 20, 4, 255, 72, 24, 5, 255, 78, 24, 5, 255, 75, 21, 2, 255, 85, 23, 3, 255, 102, 28, 4, 255, 119, 43, 5, 255, 130, 51, 1, 255, 135, 54, 1, 255, 136, 57, 2, 255, 134, 56, 2, 255, 132, 55, 1, 255, 135, 56, 1, 255, 138, 58, 2, 255, 137, 57, 1, 255, 139, 58, 3, 255, 139, 59, 4, 255, 139, 59, 3, 255, 138, 57, 1, 255, 140, 59, 0, 255, 146, 63, 4, 255, 145, 60, 3, 255, 143, 58, 0, 255, 145, 62, 1, 255, 145, 59, 6, 255, 135, 48, 3, 255, 120, 40, 2, 255, 26, 24, 11, 255, 26, 28, 6, 255, 31, 37, 11, 255, 35, 39, 17, 255, 39, 42, 19, 255, 41, 50, 13, 255, 40, 52, 9, 255, 44, 57, 7, 255, 45, 57, 10, 255, 45, 59, 17, 255, 45, 64, 10, 255, 48, 63, 9, 255, 48, 58, 16, 255, 47, 61, 11, 255, 45, 61, 7, 255, 44, 61, 15, 255, 42, 53, 16, 255, 40, 44, 12, 255, 47, 42, 16, 255, 43, 42, 5, 255, 36, 40, 4, 255, 30, 30, 2, 255, 34, 26, 3, 255, 37, 24, 5, 255, 32, 25, 7, 255, 26, 22, 5, 255, 24, 19, 2, 255, 27, 18, 2, 255, 27, 15, 3, 255, 30, 16, 4, 255, 30, 15, 4, 255, 31, 16, 5, 255, 38, 19, 3, 255, 40, 24, 1, 255, 39, 22, 2, 255, 43, 30, 10, 255, 51, 36, 26, 255, 53, 37, 21, 255, 48, 33, 11, 255, 50, 34, 3, 255, 60, 35, 5, 255, 53, 28, 3, 255, 46, 23, 3, 255, 51, 25, 3, 255, 51, 28, 0, 255, 51, 45, 22, 255, 55, 51, 38, 255, 56, 48, 31, 255, 62, 59, 50, 255, 64, 61, 52, 255, 66, 58, 45, 255, 69, 66, 39, 255, 73, 59, 37, 255, 74, 53, 26, 255, 76, 56, 30, 255, 83, 60, 19, 255, 82, 48, 8, 255, 73, 36, 8, 255, 68, 41, 16, 255, 66, 51, 11, 255, 73, 48, 7, 255, 81, 44, 3, 255, 82, 44, 5, 255, 76, 42, 6, 255, 76, 39, 6, 255, 72, 31, 3, 255, 74, 30, 2, 255, 79, 33, 3, 255, 79, 34, 1, 255, 81, 36, 4, 255, 78, 38, 3, 255, 74, 37, 1, 255, 75, 35, 0, 255, 78, 35, 1, 255, 81, 37, 2, 255, 84, 39, 5, 255, 79, 35, 0, 255, 84, 40, 2, 255, 89, 37, 3, 255, 84, 42, 4, 255, 78, 40, 1, 255, 82, 38, 0, 255, 84, 43, 3, 255, 82, 43, 2, 255, 86, 44, 3, 255, 91, 45, 4, 255, 92, 44, 3, 255, 95, 47, 6, 255, 93, 46, 5, 255, 100, 49, 4, 255, 110, 54, 6, 255, 102, 49, 2, 255, 104, 46, 3, 255, 113, 48, 3, 255, 112, 51, 0, 255, 99, 45, 2, 255, 103, 42, 3, 255, 114, 48, 1, 255, 120, 56, 5, 255, 105, 49, 3, 255, 98, 43, 0, 255, 120, 50, 3, 255, 134, 54, 6, 255, 126, 50, 9, 255, 112, 40, 9, 255, 103, 36, 5, 255, 111, 42, 3, 255, 129, 51, 4, 255, 134, 52, 2, 255, 131, 54, 3, 255, 133, 52, 3, 255, 128, 50, 3, 255, 120, 51, 3, 255, 132, 49, 4, 255, 138, 51, 2, 255, 133, 55, 2, 255, 134, 59, 5, 255, 129, 55, 3, 255, 130, 53, 7, 255, 122, 53, 6, 255, 127, 55, 3, 255, 136, 50, 2, 255, 133, 54, 2, 255, 134, 52, 2, 255, 131, 54, 6, 255, 131, 54, 1, 255, 128, 51, 2, 255, 130, 55, 1, 255, 139, 57, 2, 255, 136, 57, 0, 255, 135, 59, 2, 255, 129, 58, 6, 255, 114, 48, 0, 255, 117, 46, 2, 255, 136, 60, 6, 255, 140, 57, 1, 255, 136, 60, 7, 255, 124, 58, 8, 255, 117, 51, 5, 255, 105, 50, 5, 255, 101, 50, 5, 255, 138, 60, 5, 255, 152, 57, 4, 255, 134, 55, 4, 255, 135, 56, 5, 255, 123, 58, 5, 255, 110, 55, 3, 255, 104, 55, 11, 255, 106, 50, 9, 255, 121, 54, 4, 255, 128, 67, 1, 255, 137, 67, 4, 255, 132, 59, 7, 255, 129, 61, 10, 255, 128, 59, 5, 255, 109, 60, 3, 255, 125, 63, 9, 255, 128, 60, 4, 255, 139, 69, 1, 255, 144, 66, 4, 255, 145, 68, 6, 255, 148, 66, 5, 255, 141, 66, 6, 255, 140, 68, 9, 255, 142, 66, 10, 255, 139, 65, 0, 255, 143, 63, 14, 255, 147, 67, 5, 255, 149, 69, 3, 255, 147, 71, 2, 255, 146, 68, 8, 255, 155, 73, 11, 255, 158, 72, 8, 255, 152, 74, 4, 255, 157, 75, 13, 255, 159, 73, 13, 255, 150, 70, 9, 255, 147, 71, 13, 255, 146, 70, 12, 255, 148, 70, 18, 255, 150, 74, 15, 255, 150, 76, 8, 255, 154, 79, 14, 255, 161, 83, 14, 255, 165, 83, 10, 255, 165, 77, 13, 255, 154, 73, 12, 255, 142, 77, 22, 255, 148, 81, 17, 255, 167, 88, 12, 255, 176, 93, 12, 255, 172, 94, 12, 255, 180, 89, 13, 255, 180, 92, 16, 255, 174, 93, 9, 255, 174, 93, 16, 255, 179, 94, 20, 255, 181, 94, 16, 255, 183, 97, 15, 255, 183, 100, 17, 255, 181, 98, 19, 255, 178, 93, 18, 255, 179, 96, 15, 255, 178, 99, 11, 255, 178, 102, 17, 255, 183, 100, 19, 255, 190, 104, 11, 255, 194, 108, 17, 255, 187, 109, 14, 255, 183, 107, 16, 255, 180, 103, 6, 255, 172, 100, 7, 255, 171, 93, 19, 255, 166, 96, 11, 255, 157, 95, 15, 255, 156, 90, 15, 255, 151, 91, 12, 255, 140, 92, 8, 255, 136, 88, 22, 255, 121, 80, 23, 255, 104, 74, 12, 255, 106, 80, 11, 255, 109, 86, 8, 255, 94, 80, 16, 255, 82, 74, 25, 255, 90, 80, 11, 255, 90, 74, 12, 255, 93, 79, 14, 255, 88, 77, 14, 255, 88, 75, 15, 255, 94, 76, 10, 255, 92, 72, 15, 255, 91, 74, 10, 255, 91, 75, 9, 255, 90, 72, 21, 255, 94, 73, 10, 255, 92, 71, 6, 255, 95, 74, 7, 255, 97, 74, 6, 255, 97, 72, 8, 255, 96, 73, 9, 255, 97, 73, 9, 255, 99, 71, 14, 255, 99, 69, 15, 255, 100, 70, 8, 255, 110, 73, 3, 255, 115, 72, 7, 255, 110, 68, 10, 255, 116, 66, 8, 255, 123, 72, 10, 255, 110, 66, 6, 255, 110, 63, 14, 255, 101, 65, 8, 255, 101, 63, 0, 255, 119, 69, 5, 255, 110, 68, 4, 255, 112, 63, 7, 255, 115, 71, 5, 255, 126, 92, 16, 255, 157, 111, 12, 255, 184, 138, 3, 255, 186, 143, 2, 255, 184, 134, 5, 255, 183, 137, 1, 255, 191, 145, 8, 255, 186, 141, 0, 255, 178, 129, 4, 255, 177, 125, 2, 255, 174, 121, 2, 255, 172, 119, 2, 255, 170, 118, 4, 255, 167, 116, 5, 255, 167, 114, 5, 255, 166, 111, 4, 255, 166, 109, 2, 255, 165, 111, 3, 255, 168, 115, 2, 255, 171, 115, 5, 255, 165, 107, 5, 255, 163, 107, 3, 255, 165, 108, 2, 255, 169, 109, 4, 255, 170, 107, 4, 255, 169, 104, 5, 255, 166, 98, 4, 255, 161, 91, 3, 255, 152, 82, 1, 255, 146, 78, 2, 255, 147, 79, 2, 255, 152, 85, 4, 255, 155, 85, 3, 255, 155, 84, 1, 255, 152, 79, 0, 255, 146, 75, 3, 255, 144, 76, 5, 255, 145, 79, 2, 255, 146, 77, 4, 255, 145, 75, 5, 255, 144, 75, 3, 255, 140, 72, 6, 255, 136, 70, 3, 255, 137, 69, 1, 255, 142, 69, 2, 255, 147, 70, 4, 255, 145, 71, 5, 255, 140, 71, 3, 255, 135, 69, 2, 255, 139, 66, 4, 255, 141, 68, 8, 255, 134, 63, 4, 255, 132, 61, 3, 255, 130, 58, 1, 255, 126, 57, 0, 255, 126, 54, 4, 255, 118, 43, 2, 255, 117, 49, 0, 255, 110, 46, 0, 255, 101, 37, 3, 255, 91, 34, 5, 255, 88, 35, 5, 255, 84, 35, 3, 255, 95, 36, 1, 255, 99, 39, 2, 255, 93, 33, 0, 255, 93, 29, 3, 255, 86, 27, 2, 255, 93, 30, 5, 255, 79, 27, 4, 255, 65, 23, 0, 255, 77, 23, 5, 255, 79, 23, 4, 255, 71, 24, 1, 255, 67, 25, 3, 255, 69, 20, 3, 255, 77, 20, 3, 255, 74, 17, 1, 255, 95, 27, 3, 255, 117, 31, 3, 255, 111, 31, 3, 255, 114, 31, 3, 255, 114, 30, 3, 255, 110, 31, 4, 255, 106, 31, 5, 255, 101, 26, 1, 255, 102, 27, 0, 255, 103, 27, 1, 255, 106, 28, 0, 255, 103, 28, 0, 255, 98, 28, 1, 255, 98, 28, 2, 255, 99, 27, 3, 255, 95, 24, 2, 255, 93, 24, 2, 255, 91, 21, 0, 255, 92, 21, 1, 255, 97, 25, 3, 255, 91, 23, 1, 255, 84, 22, 3, 255, 68, 21, 3, 255, 65, 18, 6, 255, 80, 24, 3, 255, 89, 26, 0, 255, 87, 26, 1, 255, 79, 20, 1, 255, 78, 21, 4, 255, 75, 19, 2, 255, 79, 23, 3, 255, 70, 21, 0, 255, 73, 21, 8, 255, 78, 17, 8, 255, 70, 16, 1, 255, 56, 15, 3, 255, 59, 15, 2, 255, 69, 17, 1, 255, 75, 22, 0, 255, 77, 24, 1, 255, 77, 20, 2, 255, 82, 22, 6, 255, 84, 21, 1, 255, 98, 30, 2, 255, 113, 38, 3, 255, 119, 41, 1, 255, 129, 51, 2, 255, 133, 55, 1, 255, 133, 56, 2, 255, 138, 58, 3, 255, 137, 58, 1, 255, 137, 58, 1, 255, 135, 59, 1, 255, 132, 59, 2, 255, 136, 58, 1, 255, 138, 57, 1, 255, 139, 59, 1, 255, 143, 61, 4, 255, 143, 61, 5, 255, 141, 60, 3, 255, 141, 61, 1, 255, 145, 61, 2, 255, 139, 53, 1, 255, 131, 51, 1, 255, 28, 26, 15, 255, 32, 37, 17, 255, 32, 38, 16, 255, 38, 42, 18, 255, 43, 50, 20, 255, 38, 56, 17, 255, 40, 61, 15, 255, 39, 55, 14, 255, 46, 57, 20, 255, 44, 62, 15, 255, 40, 62, 9, 255, 48, 63, 17, 255, 46, 56, 12, 255, 45, 59, 12, 255, 43, 55, 9, 255, 43, 53, 2, 255, 44, 51, 2, 255, 44, 45, 6, 255, 41, 37, 8, 255, 33, 34, 4, 255, 27, 27, 1, 255, 35, 28, 5, 255, 36, 24, 5, 255, 37, 22, 3, 255, 37, 21, 2, 255, 38, 22, 5, 255, 30, 17, 3, 255, 26, 20, 5, 255, 25, 17, 4, 255, 29, 14, 4, 255, 28, 14, 3, 255, 23, 18, 2, 255, 33, 20, 4, 255, 39, 24, 1, 255, 40, 24, 0, 255, 40, 27, 4, 255, 45, 31, 13, 255, 50, 36, 11, 255, 48, 36, 15, 255, 52, 38, 13, 255, 59, 36, 4, 255, 55, 32, 6, 255, 42, 22, 5, 255, 49, 22, 6, 255, 57, 26, 3, 255, 53, 39, 15, 255, 56, 52, 29, 255, 62, 53, 21, 255, 69, 56, 47, 255, 71, 60, 54, 255, 66, 60, 40, 255, 70, 68, 52, 255, 72, 60, 46, 255, 72, 53, 37, 255, 76, 55, 39, 255, 80, 50, 21, 255, 79, 45, 6, 255, 70, 40, 6, 255, 67, 40, 13, 255, 72, 48, 13, 255, 75, 47, 7, 255, 76, 45, 4, 255, 78, 42, 4, 255, 77, 35, 2, 255, 82, 38, 4, 255, 77, 32, 2, 255, 77, 30, 2, 255, 79, 31, 1, 255, 81, 36, 1, 255, 85, 39, 2, 255, 80, 37, 1, 255, 80, 38, 4, 255, 79, 36, 1, 255, 80, 36, 1, 255, 83, 37, 3, 255, 89, 40, 5, 255, 84, 36, 0, 255, 84, 38, 3, 255, 84, 38, 2, 255, 86, 41, 2, 255, 86, 40, 2, 255, 88, 42, 3, 255, 84, 41, 1, 255, 89, 41, 5, 255, 93, 44, 6, 255, 94, 47, 2, 255, 99, 48, 1, 255, 105, 49, 2, 255, 108, 48, 3, 255, 115, 48, 1, 255, 126, 51, 3, 255, 122, 52, 5, 255, 112, 48, 1, 255, 109, 46, 2, 255, 121, 52, 2, 255, 130, 49, 4, 255, 120, 47, 4, 255, 128, 53, 3, 255, 131, 58, 4, 255, 125, 47, 1, 255, 120, 48, 3, 255, 121, 48, 2, 255, 128, 44, 1, 255, 136, 51, 3, 255, 136, 54, 4, 255, 130, 53, 4, 255, 128, 51, 4, 255, 127, 49, 1, 255, 132, 50, 2, 255, 139, 54, 1, 255, 138, 54, 1, 255, 141, 54, 9, 255, 132, 51, 0, 255, 131, 48, 4, 255, 131, 50, 5, 255, 130, 50, 5, 255, 139, 55, 3, 255, 146, 61, 3, 255, 144, 57, 3, 255, 135, 53, 3, 255, 132, 55, 2, 255, 137, 54, 4, 255, 141, 52, 5, 255, 146, 55, 2, 255, 140, 63, 3, 255, 141, 62, 3, 255, 141, 56, 4, 255, 139, 58, 3, 255, 138, 59, 3, 255, 149, 61, 3, 255, 150, 62, 2, 255, 142, 60, 1, 255, 140, 58, 4, 255, 138, 57, 1, 255, 135, 57, 3, 255, 129, 49, 6, 255, 127, 55, 9, 255, 131, 57, 2, 255, 140, 58, 3, 255, 133, 59, 6, 255, 131, 60, 9, 255, 133, 55, 3, 255, 131, 55, 9, 255, 135, 57, 8, 255, 145, 61, 1, 255, 142, 65, 5, 255, 148, 66, 4, 255, 135, 58, 3, 255, 132, 57, 6, 255, 136, 64, 4, 255, 139, 66, 4, 255, 146, 63, 5, 255, 148, 68, 3, 255, 151, 65, 0, 255, 147, 67, 7, 255, 147, 63, 7, 255, 141, 60, 3, 255, 132, 62, 2, 255, 133, 58, 5, 255, 147, 58, 5, 255, 146, 61, 2, 255, 138, 57, 2, 255, 134, 60, 5, 255, 138, 61, 8, 255, 144, 68, 9, 255, 148, 69, 5, 255, 158, 69, 11, 255, 157, 68, 5, 255, 160, 71, 10, 255, 156, 70, 13, 255, 151, 71, 0, 255, 151, 73, 5, 255, 152, 74, 6, 255, 150, 73, 4, 255, 154, 76, 3, 255, 152, 70, 2, 255, 150, 70, 4, 255, 152, 76, 8, 255, 159, 79, 11, 255, 154, 77, 7, 255, 156, 79, 17, 255, 160, 81, 17, 255, 163, 83, 14, 255, 168, 87, 9, 255, 170, 89, 5, 255, 168, 85, 12, 255, 164, 81, 18, 255, 168, 85, 16, 255, 168, 90, 19, 255, 170, 93, 23, 255, 173, 92, 12, 255, 178, 89, 20, 255, 178, 91, 19, 255, 177, 89, 14, 255, 178, 93, 13, 255, 175, 98, 15, 255, 171, 95, 15, 255, 177, 96, 13, 255, 181, 96, 13, 255, 172, 90, 13, 255, 170, 92, 14, 255, 175, 96, 12, 255, 181, 101, 13, 255, 184, 103, 16, 255, 184, 105, 15, 255, 186, 102, 14, 255, 185, 105, 11, 255, 181, 102, 14, 255, 174, 97, 20, 255, 168, 95, 15, 255, 165, 92, 22, 255, 163, 96, 19, 255, 160, 92, 16, 255, 151, 92, 21, 255, 145, 90, 21, 255, 146, 89, 14, 255, 121, 83, 18, 255, 93, 77, 24, 255, 97, 81, 20, 255, 104, 87, 11, 255, 92, 78, 19, 255, 87, 74, 23, 255, 92, 81, 4, 255, 89, 81, 4, 255, 90, 74, 21, 255, 87, 77, 18, 255, 83, 76, 17, 255, 89, 81, 10, 255, 91, 74, 20, 255, 93, 73, 24, 255, 95, 76, 6, 255, 94, 79, 2, 255, 100, 79, 11, 255, 99, 77, 14, 255, 93, 74, 11, 255, 98, 74, 8, 255, 93, 74, 6, 255, 99, 71, 14, 255, 102, 71, 16, 255, 101, 71, 9, 255, 102, 75, 9, 255, 99, 72, 5, 255, 103, 72, 2, 255, 105, 74, 10, 255, 93, 72, 8, 255, 92, 71, 4, 255, 99, 69, 8, 255, 101, 68, 9, 255, 101, 67, 3, 255, 112, 71, 8, 255, 118, 68, 8, 255, 109, 63, 6, 255, 102, 67, 6, 255, 104, 65, 12, 255, 107, 59, 9, 255, 117, 66, 9, 255, 119, 69, 7, 255, 114, 65, 9, 255, 119, 73, 16, 255, 142, 89, 13, 255, 163, 114, 6, 255, 173, 131, 9, 255, 177, 128, 7, 255, 178, 127, 4, 255, 183, 135, 7, 255, 180, 132, 5, 255, 182, 133, 6, 255, 178, 129, 1, 255, 180, 128, 3, 255, 170, 113, 8, 255, 169, 112, 5, 255, 167, 110, 3, 255, 165, 110, 4, 255, 162, 106, 5, 255, 162, 105, 9, 255, 167, 106, 9, 255, 173, 109, 6, 255, 169, 102, 1, 255, 163, 95, 4, 255, 160, 93, 2, 255, 161, 93, 2, 255, 162, 95, 3, 255, 162, 98, 5, 255, 161, 94, 5, 255, 159, 89, 2, 255, 156, 85, 2, 255, 150, 81, 3, 255, 145, 78, 4, 255, 147, 83, 6, 255, 156, 89, 10, 255, 157, 89, 6, 255, 157, 86, 2, 255, 154, 82, 3, 255, 144, 73, 1, 255, 138, 70, 2, 255, 139, 73, 1, 255, 142, 75, 2, 255, 140, 69, 8, 255, 135, 65, 5, 255, 134, 68, 4, 255, 136, 73, 1, 255, 138, 71, 1, 255, 141, 71, 4, 255, 138, 67, 3, 255, 134, 66, 3, 255, 129, 65, 1, 255, 131, 67, 3, 255, 136, 70, 6, 255, 134, 68, 4, 255, 127, 59, 1, 255, 131, 60, 4, 255, 135, 61, 3, 255, 132, 60, 1, 255, 128, 56, 2, 255, 126, 50, 2, 255, 120, 52, 0, 255, 115, 49, 3, 255, 104, 39, 1, 255, 98, 37, 3, 255, 89, 32, 2, 255, 89, 34, 2, 255, 100, 37, 3, 255, 99, 37, 1, 255, 95, 36, 5, 255, 84, 25, 2, 255, 81, 27, 4, 255, 81, 26, 5, 255, 74, 23, 1, 255, 72, 25, 2, 255, 74, 25, 4, 255, 72, 22, 3, 255, 73, 24, 2, 255, 72, 25, 0, 255, 73, 26, 2, 255, 72, 24, 6, 255, 85, 28, 4, 255, 105, 36, 7, 255, 107, 30, 4, 255, 110, 31, 3, 255, 117, 32, 1, 255, 113, 30, 1, 255, 106, 29, 1, 255, 106, 30, 6, 255, 102, 26, 2, 255, 103, 25, 2, 255, 106, 28, 5, 255, 109, 30, 5, 255, 104, 27, 3, 255, 101, 26, 3, 255, 99, 24, 0, 255, 102, 22, 1, 255, 103, 23, 2, 255, 102, 28, 3, 255, 98, 27, 2, 255, 98, 24, 3, 255, 101, 23, 2, 255, 102, 25, 3, 255, 97, 24, 5, 255, 78, 24, 6, 255, 52, 11, 4, 255, 65, 21, 4, 255, 85, 24, 5, 255, 83, 21, 1, 255, 79, 22, 1, 255, 81, 21, 2, 255, 79, 20, 4, 255, 73, 18, 2, 255, 79, 22, 5, 255, 78, 23, 3, 255, 68, 25, 2, 255, 69, 21, 2, 255, 61, 15, 2, 255, 64, 21, 5, 255, 65, 18, 1, 255, 73, 23, 2, 255, 75, 22, 0, 255, 77, 22, 2, 255, 76, 21, 4, 255, 80, 22, 2, 255, 88, 27, 4, 255, 95, 28, 2, 255, 101, 30, 1, 255, 114, 41, 3, 255, 124, 50, 3, 255, 130, 54, 1, 255, 135, 57, 4, 255, 136, 57, 0, 255, 134, 55, 0, 255, 132, 56, 0, 255, 129, 56, 1, 255, 134, 57, 3, 255, 139, 60, 3, 255, 138, 62, 2, 255, 137, 61, 0, 255, 140, 60, 2, 255, 140, 60, 3, 255, 138, 60, 0, 255, 138, 62, 2, 255, 140, 59, 3, 255, 137, 58, 3, 255, 32, 35, 7, 255, 28, 37, 16, 255, 34, 46, 18, 255, 41, 53, 13, 255, 44, 57, 9, 255, 44, 62, 18, 255, 39, 61, 19, 255, 42, 64, 9, 255, 50, 68, 12, 255, 44, 63, 14, 255, 43, 64, 11, 255, 47, 64, 11, 255, 48, 59, 14, 255, 44, 56, 12, 255, 40, 47, 9, 255, 40, 43, 6, 255, 44, 43, 12, 255, 42, 36, 8, 255, 39, 36, 4, 255, 32, 28, 1, 255, 30, 20, 2, 255, 34, 25, 6, 255, 25, 22, 2, 255, 25, 23, 3, 255, 24, 17, 1, 255, 27, 18, 2, 255, 27, 20, 1, 255, 27, 22, 4, 255, 29, 19, 5, 255, 32, 14, 2, 255, 33, 18, 2, 255, 31, 20, 3, 255, 28, 20, 6, 255, 30, 16, 5, 255, 36, 18, 3, 255, 43, 24, 8, 255, 51, 32, 9, 255, 56, 35, 15, 255, 48, 38, 19, 255, 47, 35, 17, 255, 50, 35, 3, 255, 53, 36, 5, 255, 45, 25, 3, 255, 47, 22, 1, 255, 60, 28, 3, 255, 63, 33, 18, 255, 77, 55, 26, 255, 76, 55, 19, 255, 65, 54, 41, 255, 67, 59, 51, 255, 70, 63, 44, 255, 70, 65, 45, 255, 77, 63, 38, 255, 82, 61, 26, 255, 79, 53, 28, 255, 73, 45, 17, 255, 80, 44, 11, 255, 77, 45, 10, 255, 68, 43, 15, 255, 72, 45, 19, 255, 72, 49, 10, 255, 72, 46, 1, 255, 72, 42, 2, 255, 67, 36, 5, 255, 71, 40, 4, 255, 73, 35, 1, 255, 80, 34, 4, 255, 81, 35, 2, 255, 79, 38, 1, 255, 81, 40, 2, 255, 80, 36, 1, 255, 79, 35, 2, 255, 82, 36, 3, 255, 83, 38, 4, 255, 80, 37, 3, 255, 83, 38, 2, 255, 87, 39, 4, 255, 88, 39, 6, 255, 81, 40, 2, 255, 87, 42, 2, 255, 92, 40, 2, 255, 91, 41, 0, 255, 94, 45, 3, 255, 100, 48, 7, 255, 104, 44, 4, 255, 111, 46, 2, 255, 118, 48, 1, 255, 123, 50, 0, 255, 127, 49, 3, 255, 120, 48, 3, 255, 118, 43, 1, 255, 130, 42, 1, 255, 134, 50, 4, 255, 124, 48, 7, 255, 123, 46, 4, 255, 129, 51, 2, 255, 130, 53, 2, 255, 131, 48, 3, 255, 126, 45, 1, 255, 135, 50, 4, 255, 133, 49, 1, 255, 123, 49, 3, 255, 124, 49, 3, 255, 130, 50, 1, 255, 133, 46, 1, 255, 127, 42, 3, 255, 116, 40, 3, 255, 117, 43, 4, 255, 120, 46, 3, 255, 115, 43, 3, 255, 117, 43, 6, 255, 120, 42, 5, 255, 120, 45, 1, 255, 119, 46, 4, 255, 121, 42, 5, 255, 121, 41, 9, 255, 117, 43, 4, 255, 132, 51, 5, 255, 135, 48, 2, 255, 136, 54, 1, 255, 138, 56, 3, 255, 136, 54, 2, 255, 138, 52, 0, 255, 143, 53, 1, 255, 140, 53, 2, 255, 142, 55, 4, 255, 143, 57, 1, 255, 137, 56, 2, 255, 141, 56, 2, 255, 140, 58, 0, 255, 147, 60, 4, 255, 142, 54, 2, 255, 135, 55, 3, 255, 135, 54, 2, 255, 141, 56, 0, 255, 139, 55, 7, 255, 134, 55, 7, 255, 142, 58, 0, 255, 149, 61, 5, 255, 141, 58, 6, 255, 135, 55, 4, 255, 125, 50, 7, 255, 136, 57, 4, 255, 131, 55, 3, 255, 126, 58, 4, 255, 139, 62, 4, 255, 154, 62, 0, 255, 154, 63, 6, 255, 139, 60, 3, 255, 127, 54, 9, 255, 133, 55, 12, 255, 141, 59, 8, 255, 141, 61, 8, 255, 141, 56, 5, 255, 139, 59, 6, 255, 145, 60, 9, 255, 138, 59, 9, 255, 133, 58, 10, 255, 143, 66, 12, 255, 146, 67, 5, 255, 151, 66, 11, 255, 152, 65, 6, 255, 149, 67, 4, 255, 145, 66, 3, 255, 155, 72, 8, 255, 156, 70, 3, 255, 160, 69, 10, 255, 156, 70, 14, 255, 153, 69, 3, 255, 152, 67, 7, 255, 156, 71, 6, 255, 151, 68, 7, 255, 151, 72, 8, 255, 153, 72, 12, 255, 161, 74, 10, 255, 158, 76, 8, 255, 153, 75, 12, 255, 150, 71, 15, 255, 149, 74, 11, 255, 145, 73, 11, 255, 147, 72, 18, 255, 159, 80, 14, 255, 171, 85, 12, 255, 170, 84, 13, 255, 170, 86, 14, 255, 170, 85, 20, 255, 170, 87, 12, 255, 175, 90, 5, 255, 174, 86, 15, 255, 175, 92, 9, 255, 176, 97, 9, 255, 177, 93, 16, 255, 178, 93, 15, 255, 177, 95, 15, 255, 173, 96, 18, 255, 170, 92, 18, 255, 166, 88, 18, 255, 167, 88, 24, 255, 176, 94, 20, 255, 178, 98, 22, 255, 181, 102, 20, 255, 176, 102, 13, 255, 181, 102, 15, 255, 183, 103, 14, 255, 178, 98, 18, 255, 174, 99, 16, 255, 170, 103, 13, 255, 169, 101, 13, 255, 169, 97, 12, 255, 163, 95, 3, 255, 153, 88, 23, 255, 142, 88, 14, 255, 124, 84, 7, 255, 103, 78, 29, 255, 96, 79, 19, 255, 106, 82, 12, 255, 99, 81, 25, 255, 79, 77, 22, 255, 84, 78, 18, 255, 93, 80, 10, 255, 91, 82, 20, 255, 86, 79, 23, 255, 88, 79, 19, 255, 88, 77, 12, 255, 88, 78, 18, 255, 89, 76, 10, 255, 92, 74, 15, 255, 88, 78, 14, 255, 82, 75, 14, 255, 91, 70, 20, 255, 92, 75, 19, 255, 89, 78, 18, 255, 102, 80, 10, 255, 102, 73, 15, 255, 98, 71, 8, 255, 106, 77, 1, 255, 102, 74, 4, 255, 103, 75, 12, 255, 104, 73, 13, 255, 102, 73, 10, 255, 96, 70, 8, 255, 97, 70, 12, 255, 102, 71, 11, 255, 103, 71, 8, 255, 96, 72, 6, 255, 101, 74, 12, 255, 101, 70, 6, 255, 102, 70, 4, 255, 105, 66, 7, 255, 115, 72, 7, 255, 129, 71, 6, 255, 127, 70, 9, 255, 116, 71, 13, 255, 126, 71, 12, 255, 126, 68, 6, 255, 115, 64, 4, 255, 112, 66, 0, 255, 124, 78, 6, 255, 114, 63, 4, 255, 102, 63, 6, 255, 121, 79, 3, 255, 158, 110, 6, 255, 179, 129, 11, 255, 168, 113, 7, 255, 171, 120, 8, 255, 175, 127, 12, 255, 174, 123, 7, 255, 179, 124, 7, 255, 157, 100, 8, 255, 146, 87, 8, 255, 154, 98, 10, 255, 156, 103, 7, 255, 156, 104, 6, 255, 152, 99, 3, 255, 149, 100, 2, 255, 153, 100, 6, 255, 159, 101, 3, 255, 158, 96, 3, 255, 152, 90, 4, 255, 147, 87, 3, 255, 152, 90, 6, 255, 151, 88, 2, 255, 154, 89, 4, 255, 154, 87, 7, 255, 152, 84, 4, 255, 146, 79, 0, 255, 145, 80, 1, 255, 144, 80, 4, 255, 147, 80, 4, 255, 145, 78, 0, 255, 146, 79, 0, 255, 152, 79, 2, 255, 147, 76, 1, 255, 139, 72, 1, 255, 138, 68, 4, 255, 130, 61, 3, 255, 125, 61, 7, 255, 125, 66, 5, 255, 130, 69, 3, 255, 135, 68, 3, 255, 140, 70, 2, 255, 137, 68, 4, 255, 135, 65, 1, 255, 132, 66, 2, 255, 130, 67, 6, 255, 126, 63, 3, 255, 130, 65, 4, 255, 130, 63, 1, 255, 134, 66, 3, 255, 134, 64, 2, 255, 136, 65, 3, 255, 131, 61, 2, 255, 128, 60, 1, 255, 131, 60, 2, 255, 130, 58, 2, 255, 126, 57, 5, 255, 119, 51, 4, 255, 111, 46, 1, 255, 103, 42, 0, 255, 93, 33, 0, 255, 88, 32, 1, 255, 97, 37, 3, 255, 96, 37, 2, 255, 90, 31, 2, 255, 86, 25, 4, 255, 80, 26, 7, 255, 69, 25, 2, 255, 86, 30, 4, 255, 83, 26, 0, 255, 72, 27, 5, 255, 65, 20, 3, 255, 73, 18, 2, 255, 80, 25, 1, 255, 83, 29, 3, 255, 79, 27, 0, 255, 95, 27, 3, 255, 106, 30, 3, 255, 105, 32, 0, 255, 116, 34, 6, 255, 120, 36, 3, 255, 116, 36, 2, 255, 107, 28, 0, 255, 103, 27, 2, 255, 105, 28, 4, 255, 106, 25, 2, 255, 105, 25, 1, 255, 103, 28, 2, 255, 103, 31, 2, 255, 105, 31, 2, 255, 101, 28, 0, 255, 102, 29, 1, 255, 103, 26, 1, 255, 95, 21, 0, 255, 97, 24, 3, 255, 100, 26, 5, 255, 99, 22, 2, 255, 97, 20, 0, 255, 95, 21, 2, 255, 85, 20, 1, 255, 68, 20, 4, 255, 66, 22, 0, 255, 79, 18, 2, 255, 79, 18, 4, 255, 73, 20, 1, 255, 82, 25, 0, 255, 82, 24, 1, 255, 78, 24, 4, 255, 77, 22, 2, 255, 82, 24, 1, 255, 80, 25, 3, 255, 69, 20, 6, 255, 70, 18, 3, 255, 74, 21, 7, 255, 68, 17, 2, 255, 78, 22, 6, 255, 79, 21, 3, 255, 75, 22, 1, 255, 74, 22, 1, 255, 81, 23, 2, 255, 85, 25, 0, 255, 93, 29, 1, 255, 101, 33, 5, 255, 101, 31, 1, 255, 106, 34, 3, 255, 122, 49, 1, 255, 131, 53, 3, 255, 137, 56, 2, 255, 135, 55, 2, 255, 134, 54, 2, 255, 133, 55, 1, 255, 134, 56, 2, 255, 134, 57, 2, 255, 136, 61, 2, 255, 137, 61, 0, 255, 140, 59, 1, 255, 141, 60, 2, 255, 140, 60, 0, 255, 140, 60, 1, 255, 141, 59, 2, 255, 140, 58, 2, 255, 34, 47, 7, 255, 37, 47, 13, 255, 40, 52, 16, 255, 36, 54, 13, 255, 44, 65, 12, 255, 50, 64, 19, 255, 48, 62, 21, 255, 50, 70, 11, 255, 49, 69, 4, 255, 47, 64, 11, 255, 49, 61, 14, 255, 49, 59, 8, 255, 43, 54, 6, 255, 38, 49, 13, 255, 41, 44, 8, 255, 38, 38, 6, 255, 40, 34, 9, 255, 39, 25, 5, 255, 38, 27, 5, 255, 33, 26, 6, 255, 32, 23, 8, 255, 31, 20, 7, 255, 29, 16, 2, 255, 28, 17, 1, 255, 23, 16, 4, 255, 26, 18, 5, 255, 29, 15, 1, 255, 34, 17, 4, 255, 35, 18, 5, 255, 36, 16, 5, 255, 32, 14, 3, 255, 26, 20, 5, 255, 25, 20, 3, 255, 31, 17, 0, 255, 27, 15, 3, 255, 32, 23, 3, 255, 44, 31, 12, 255, 49, 34, 15, 255, 49, 42, 8, 255, 52, 38, 12, 255, 53, 33, 14, 255, 61, 32, 7, 255, 61, 30, 4, 255, 47, 27, 3, 255, 45, 23, 0, 255, 57, 36, 12, 255, 73, 52, 30, 255, 74, 46, 29, 255, 67, 56, 38, 255, 66, 61, 45, 255, 71, 66, 43, 255, 74, 62, 49, 255, 75, 60, 47, 255, 78, 65, 32, 255, 77, 54, 23, 255, 67, 50, 8, 255, 71, 51, 5, 255, 72, 46, 12, 255, 73, 40, 13, 255, 75, 47, 10, 255, 75, 52, 13, 255, 77, 44, 1, 255, 73, 36, 3, 255, 71, 37, 6, 255, 71, 37, 6, 255, 76, 38, 6, 255, 74, 39, 2, 255, 78, 39, 0, 255, 80, 38, 0, 255, 83, 38, 1, 255, 86, 35, 0, 255, 89, 38, 1, 255, 88, 41, 3, 255, 84, 39, 1, 255, 83, 39, 2, 255, 80, 37, 2, 255, 82, 41, 3, 255, 85, 42, 4, 255, 88, 44, 1, 255, 95, 44, 1, 255, 107, 47, 2, 255, 111, 45, 2, 255, 115, 47, 4, 255, 114, 48, 4, 255, 119, 39, 3, 255, 122, 41, 6, 255, 123, 43, 2, 255, 122, 45, 1, 255, 120, 38, 3, 255, 112, 35, 2, 255, 119, 41, 3, 255, 121, 42, 3, 255, 125, 42, 1, 255, 126, 41, 1, 255, 124, 45, 2, 255, 122, 46, 3, 255, 131, 48, 1, 255, 127, 47, 1, 255, 125, 45, 0, 255, 129, 46, 5, 255, 127, 44, 3, 255, 129, 49, 3, 255, 128, 52, 2, 255, 126, 49, 0, 255, 127, 41, 0, 255, 127, 42, 4, 255, 122, 42, 2, 255, 121, 43, 2, 255, 118, 44, 1, 255, 117, 43, 2, 255, 118, 40, 2, 255, 120, 40, 2, 255, 123, 46, 4, 255, 126, 48, 3, 255, 128, 45, 1, 255, 132, 44, 2, 255, 132, 46, 2, 255, 132, 49, 3, 255, 133, 52, 5, 255, 130, 49, 2, 255, 132, 51, 2, 255, 135, 51, 3, 255, 139, 55, 4, 255, 141, 55, 4, 255, 139, 51, 3, 255, 138, 50, 3, 255, 138, 54, 3, 255, 136, 56, 3, 255, 132, 50, 5, 255, 132, 53, 4, 255, 133, 54, 3, 255, 133, 49, 2, 255, 131, 51, 3, 255, 133, 52, 4, 255, 136, 54, 2, 255, 143, 60, 5, 255, 143, 55, 4, 255, 152, 61, 4, 255, 151, 58, 2, 255, 140, 55, 4, 255, 128, 51, 4, 255, 132, 53, 8, 255, 137, 58, 11, 255, 128, 59, 4, 255, 131, 59, 5, 255, 145, 58, 5, 255, 149, 59, 3, 255, 152, 61, 3, 255, 144, 60, 4, 255, 137, 60, 6, 255, 137, 59, 7, 255, 145, 62, 9, 255, 147, 61, 4, 255, 146, 61, 3, 255, 144, 61, 2, 255, 147, 61, 9, 255, 149, 65, 8, 255, 147, 64, 5, 255, 151, 67, 4, 255, 153, 66, 5, 255, 149, 66, 3, 255, 150, 66, 6, 255, 150, 67, 3, 255, 148, 66, 6, 255, 151, 69, 7, 255, 151, 65, 8, 255, 150, 64, 12, 255, 153, 69, 7, 255, 155, 71, 5, 255, 154, 71, 4, 255, 158, 72, 9, 255, 162, 74, 13, 255, 162, 76, 11, 255, 162, 80, 5, 255, 161, 77, 4, 255, 158, 75, 12, 255, 151, 72, 9, 255, 144, 69, 13, 255, 144, 69, 21, 255, 146, 74, 12, 255, 150, 81, 13, 255, 161, 83, 13, 255, 172, 84, 11, 255, 167, 84, 10, 255, 167, 84, 13, 255, 173, 89, 18, 255, 171, 89, 14, 255, 172, 86, 15, 255, 173, 88, 12, 255, 177, 92, 15, 255, 177, 94, 18, 255, 172, 94, 15, 255, 173, 92, 19, 255, 171, 92, 15, 255, 173, 89, 21, 255, 174, 91, 23, 255, 175, 96, 16, 255, 174, 98, 15, 255, 173, 103, 11, 255, 180, 99, 22, 255, 175, 93, 17, 255, 165, 97, 19, 255, 174, 97, 22, 255, 173, 95, 16, 255, 174, 98, 14, 255, 168, 94, 15, 255, 159, 89, 23, 255, 151, 90, 23, 255, 136, 89, 12, 255, 126, 89, 17, 255, 115, 83, 16, 255, 101, 77, 19, 255, 89, 81, 23, 255, 90, 81, 15, 255, 93, 80, 13, 255, 92, 77, 24, 255, 95, 83, 16, 255, 88, 84, 13, 255, 86, 80, 14, 255, 87, 79, 7, 255, 85, 78, 8, 255, 88, 81, 19, 255, 86, 75, 23, 255, 88, 75, 11, 255, 90, 78, 13, 255, 87, 77, 11, 255, 92, 79, 5, 255, 91, 81, 6, 255, 84, 76, 16, 255, 87, 74, 13, 255, 93, 83, 14, 255, 92, 77, 13, 255, 97, 75, 7, 255, 99, 74, 10, 255, 96, 72, 17, 255, 96, 74, 11, 255, 99, 72, 12, 255, 98, 69, 11, 255, 98, 73, 8, 255, 99, 74, 8, 255, 98, 71, 10, 255, 102, 70, 11, 255, 104, 69, 8, 255, 98, 68, 12, 255, 92, 68, 5, 255, 99, 72, 5, 255, 95, 68, 2, 255, 100, 67, 6, 255, 103, 64, 3, 255, 100, 63, 3, 255, 106, 67, 7, 255, 107, 68, 4, 255, 116, 66, 5, 255, 128, 69, 4, 255, 115, 68, 0, 255, 107, 62, 7, 255, 107, 68, 4, 255, 105, 67, 1, 255, 89, 61, 6, 255, 90, 65, 6, 255, 98, 60, 4, 255, 106, 64, 2, 255, 144, 93, 3, 255, 160, 106, 5, 255, 166, 118, 6, 255, 168, 120, 8, 255, 171, 117, 7, 255, 172, 113, 6, 255, 140, 85, 10, 255, 143, 90, 7, 255, 150, 96, 13, 255, 150, 96, 8, 255, 148, 92, 6, 255, 150, 93, 10, 255, 148, 93, 5, 255, 146, 96, 3, 255, 145, 93, 1, 255, 151, 94, 9, 255, 146, 88, 5, 255, 140, 82, 1, 255, 147, 87, 8, 255, 149, 88, 1, 255, 150, 88, 2, 255, 144, 84, 1, 255, 141, 82, 4, 255, 133, 75, 3, 255, 136, 78, 4, 255, 137, 80, 2, 255, 140, 82, 5, 255, 138, 79, 3, 255, 130, 70, 0, 255, 140, 72, 7, 255, 139, 72, 2, 255, 137, 71, 2, 255, 134, 67, 5, 255, 127, 62, 1, 255, 128, 65, 3, 255, 129, 67, 2, 255, 133, 70, 3, 255, 138, 69, 6, 255, 137, 66, 8, 255, 138, 70, 5, 255, 134, 67, 1, 255, 133, 65, 1, 255, 132, 63, 4, 255, 130, 63, 4, 255, 130, 65, 1, 255, 128, 62, 2, 255, 126, 59, 1, 255, 127, 58, 2, 255, 127, 60, 2, 255, 124, 57, 1, 255, 122, 53, 2, 255, 125, 52, 2, 255, 125, 55, 1, 255, 124, 59, 5, 255, 123, 54, 3, 255, 115, 50, 2, 255, 102, 43, 2, 255, 100, 38, 2, 255, 88, 31, 1, 255, 87, 34, 2, 255, 93, 36, 4, 255, 97, 33, 5, 255, 87, 26, 3, 255, 76, 22, 3, 255, 75, 28, 3, 255, 87, 27, 2, 255, 86, 27, 1, 255, 88, 28, 1, 255, 89, 33, 3, 255, 95, 36, 6, 255, 86, 28, 2, 255, 77, 25, 3, 255, 92, 30, 2, 255, 104, 28, 7, 255, 105, 26, 1, 255, 109, 34, 0, 255, 110, 32, 3, 255, 117, 34, 1, 255, 121, 37, 4, 255, 116, 34, 3, 255, 110, 32, 2, 255, 109, 31, 3, 255, 110, 29, 2, 255, 107, 26, 3, 255, 104, 26, 4, 255, 102, 26, 0, 255, 105, 31, 1, 255, 105, 31, 1, 255, 105, 30, 2, 255, 103, 29, 4, 255, 94, 22, 3, 255, 93, 21, 3, 255, 101, 28, 6, 255, 99, 24, 1, 255, 98, 24, 1, 255, 95, 26, 5, 255, 90, 21, 4, 255, 83, 25, 4, 255, 69, 20, 0, 255, 76, 21, 4, 255, 75, 23, 3, 255, 74, 20, 0, 255, 89, 24, 5, 255, 85, 25, 1, 255, 79, 22, 1, 255, 79, 28, 5, 255, 80, 27, 4, 255, 79, 25, 5, 255, 69, 20, 4, 255, 64, 20, 3, 255, 70, 21, 4, 255, 72, 16, 0, 255, 81, 22, 3, 255, 82, 24, 6, 255, 76, 23, 2, 255, 76, 24, 1, 255, 84, 28, 3, 255, 90, 31, 2, 255, 94, 30, 0, 255, 102, 33, 3, 255, 101, 31, 5, 255, 96, 26, 4, 255, 110, 39, 1, 255, 128, 51, 2, 255, 136, 54, 1, 255, 136, 54, 3, 255, 134, 54, 6, 255, 135, 57, 3, 255, 135, 54, 1, 255, 132, 51, 0, 255, 135, 59, 3, 255, 136, 58, 2, 255, 139, 57, 2, 255, 139, 57, 2, 255, 139, 58, 4, 255, 140, 59, 3, 255, 139, 57, 1, 255, 141, 57, 2, 255, 32, 47, 23, 255, 39, 53, 28, 255, 48, 63, 23, 255, 45, 62, 28, 255, 43, 66, 16, 255, 39, 64, 15, 255, 48, 64, 25, 255, 52, 66, 14, 255, 49, 66, 7, 255, 47, 63, 8, 255, 45, 59, 6, 255, 48, 55, 8, 255, 37, 46, 6, 255, 31, 42, 5, 255, 38, 37, 3, 255, 37, 33, 2, 255, 36, 28, 2, 255, 39, 28, 8, 255, 34, 30, 8, 255, 31, 21, 3, 255, 26, 21, 3, 255, 28, 19, 4, 255, 33, 14, 1, 255, 33, 16, 0, 255, 30, 17, 3, 255, 30, 17, 4, 255, 35, 19, 4, 255, 37, 17, 4, 255, 25, 18, 1, 255, 25, 21, 3, 255, 34, 17, 3, 255, 26, 19, 2, 255, 31, 18, 1, 255, 44, 19, 4, 255, 35, 18, 6, 255, 29, 21, 2, 255, 36, 29, 12, 255, 47, 32, 20, 255, 54, 40, 15, 255, 63, 42, 16, 255, 66, 35, 13, 255, 64, 34, 6, 255, 56, 32, 5, 255, 48, 27, 6, 255, 49, 21, 2, 255, 52, 33, 16, 255, 63, 49, 34, 255, 75, 49, 21, 255, 82, 60, 31, 255, 79, 62, 44, 255, 80, 61, 42, 255, 77, 64, 50, 255, 78, 65, 44, 255, 78, 68, 29, 255, 74, 62, 8, 255, 82, 49, 18, 255, 82, 50, 9, 255, 75, 44, 8, 255, 64, 34, 11, 255, 67, 49, 13, 255, 76, 53, 17, 255, 77, 43, 8, 255, 78, 40, 2, 255, 75, 42, 0, 255, 73, 42, 7, 255, 79, 34, 2, 255, 82, 38, 5, 255, 93, 38, 8, 255, 84, 35, 3, 255, 81, 39, 5, 255, 87, 39, 3, 255, 88, 41, 1, 255, 88, 40, 1, 255, 94, 41, 3, 255, 98, 43, 7, 255, 93, 38, 4, 255, 98, 40, 4, 255, 111, 43, 1, 255, 118, 47, 3, 255, 122, 45, 2, 255, 128, 47, 5, 255, 127, 45, 5, 255, 119, 41, 3, 255, 106, 37, 1, 255, 110, 40, 4, 255, 111, 42, 5, 255, 109, 41, 0, 255, 106, 49, 1, 255, 107, 48, 3, 255, 109, 46, 5, 255, 113, 49, 5, 255, 110, 50, 4, 255, 111, 46, 2, 255, 114, 47, 4, 255, 117, 48, 3, 255, 121, 45, 2, 255, 122, 46, 1, 255, 126, 49, 3, 255, 132, 50, 1, 255, 137, 50, 2, 255, 130, 46, 1, 255, 126, 50, 4, 255, 130, 48, 2, 255, 132, 47, 7, 255, 117, 45, 6, 255, 118, 40, 1, 255, 135, 45, 2, 255, 131, 46, 1, 255, 131, 45, 3, 255, 134, 44, 4, 255, 129, 44, 4, 255, 127, 47, 3, 255, 128, 48, 2, 255, 127, 46, 2, 255, 125, 44, 3, 255, 110, 41, 1, 255, 103, 39, 5, 255, 109, 41, 6, 255, 124, 45, 2, 255, 133, 46, 2, 255, 131, 50, 1, 255, 131, 51, 0, 255, 134, 48, 2, 255, 134, 48, 1, 255, 135, 51, 3, 255, 129, 44, 2, 255, 128, 45, 7, 255, 129, 49, 5, 255, 130, 47, 7, 255, 139, 45, 5, 255, 137, 49, 4, 255, 129, 52, 3, 255, 131, 52, 1, 255, 138, 54, 0, 255, 136, 53, 6, 255, 137, 55, 3, 255, 143, 55, 0, 255, 147, 55, 5, 255, 146, 58, 6, 255, 138, 56, 1, 255, 139, 59, 4, 255, 146, 61, 3, 255, 146, 62, 1, 255, 144, 61, 1, 255, 148, 59, 2, 255, 150, 59, 6, 255, 140, 57, 3, 255, 141, 58, 2, 255, 140, 58, 2, 255, 144, 62, 6, 255, 149, 63, 8, 255, 148, 62, 4, 255, 151, 66, 5, 255, 146, 61, 4, 255, 149, 63, 6, 255, 148, 64, 0, 255, 148, 66, 2, 255, 148, 67, 2, 255, 149, 67, 2, 255, 152, 66, 6, 255, 148, 63, 2, 255, 150, 63, 8, 255, 153, 68, 12, 255, 149, 68, 5, 255, 150, 69, 2, 255, 151, 66, 5, 255, 153, 68, 11, 255, 152, 67, 11, 255, 158, 74, 6, 255, 160, 74, 11, 255, 163, 76, 12, 255, 166, 81, 3, 255, 164, 75, 10, 255, 167, 78, 12, 255, 160, 74, 14, 255, 151, 71, 12, 255, 147, 71, 7, 255, 154, 75, 14, 255, 162, 81, 9, 255, 166, 80, 7, 255, 166, 83, 10, 255, 167, 85, 11, 255, 169, 84, 11, 255, 166, 86, 11, 255, 165, 86, 12, 255, 170, 87, 10, 255, 173, 85, 18, 255, 173, 88, 18, 255, 173, 92, 10, 255, 173, 91, 24, 255, 170, 88, 21, 255, 171, 89, 13, 255, 171, 93, 13, 255, 174, 91, 16, 255, 176, 93, 20, 255, 181, 96, 24, 255, 181, 99, 17, 255, 174, 97, 11, 255, 172, 95, 13, 255, 171, 94, 19, 255, 166, 96, 14, 255, 171, 94, 14, 255, 167, 95, 16, 255, 158, 89, 14, 255, 144, 90, 14, 255, 128, 80, 31, 255, 112, 76, 22, 255, 103, 78, 21, 255, 103, 82, 28, 255, 96, 80, 28, 255, 92, 81, 22, 255, 93, 79, 30, 255, 96, 80, 17, 255, 90, 81, 15, 255, 92, 83, 20, 255, 99, 82, 18, 255, 99, 80, 9, 255, 93, 81, 11, 255, 90, 83, 21, 255, 92, 83, 17, 255, 89, 81, 8, 255, 90, 83, 11, 255, 91, 81, 16, 255, 92, 81, 17, 255, 98, 78, 18, 255, 91, 78, 13, 255, 90, 79, 12, 255, 98, 82, 15, 255, 98, 76, 16, 255, 91, 78, 19, 255, 92, 78, 11, 255, 96, 76, 14, 255, 93, 76, 9, 255, 97, 76, 8, 255, 97, 72, 15, 255, 96, 76, 11, 255, 96, 76, 9, 255, 102, 72, 17, 255, 100, 72, 11, 255, 101, 74, 9, 255, 101, 74, 9, 255, 100, 72, 9, 255, 98, 69, 6, 255, 99, 68, 2, 255, 100, 73, 1, 255, 102, 72, 3, 255, 97, 67, 6, 255, 97, 67, 7, 255, 97, 64, 6, 255, 94, 62, 9, 255, 105, 69, 14, 255, 103, 67, 6, 255, 111, 67, 7, 255, 113, 67, 7, 255, 95, 65, 2, 255, 97, 63, 9, 255, 95, 61, 10, 255, 100, 61, 5, 255, 100, 60, 8, 255, 98, 59, 5, 255, 104, 63, 6, 255, 99, 64, 10, 255, 99, 51, 8, 255, 125, 76, 11, 255, 146, 102, 11, 255, 162, 108, 6, 255, 162, 111, 0, 255, 154, 110, 7, 255, 156, 111, 7, 255, 146, 100, 1, 255, 134, 86, 8, 255, 142, 94, 6, 255, 143, 92, 0, 255, 141, 90, 8, 255, 140, 90, 8, 255, 137, 89, 7, 255, 136, 85, 6, 255, 139, 86, 7, 255, 140, 84, 9, 255, 134, 76, 3, 255, 143, 82, 5, 255, 147, 84, 6, 255, 139, 81, 0, 255, 138, 78, 6, 255, 135, 76, 8, 255, 133, 75, 4, 255, 131, 75, 1, 255, 136, 79, 4, 255, 138, 82, 4, 255, 136, 82, 4, 255, 136, 73, 7, 255, 131, 69, 5, 255, 133, 68, 2, 255, 131, 68, 3, 255, 127, 62, 5, 255, 130, 63, 3, 255, 131, 66, 0, 255, 133, 68, 3, 255, 135, 70, 9, 255, 132, 66, 4, 255, 133, 67, 1, 255, 135, 68, 2, 255, 133, 65, 2, 255, 129, 62, 2, 255, 129, 63, 4, 255, 129, 64, 5, 255, 124, 60, 4, 255, 122, 60, 1, 255, 124, 59, 5, 255, 118, 52, 6, 255, 117, 51, 7, 255, 117, 54, 5, 255, 115, 52, 1, 255, 120, 53, 2, 255, 124, 52, 1, 255, 122, 57, 4, 255, 120, 55, 2, 255, 118, 50, 2, 255, 107, 39, 2, 255, 97, 35, 5, 255, 91, 34, 3, 255, 97, 33, 6, 255, 95, 31, 6, 255, 86, 29, 2, 255, 81, 27, 0, 255, 82, 34, 2, 255, 80, 29, 1, 255, 71, 24, 3, 255, 80, 31, 5, 255, 106, 38, 3, 255, 118, 52, 3, 255, 126, 54, 2, 255, 116, 37, 4, 255, 90, 24, 2, 255, 99, 29, 7, 255, 110, 31, 7, 255, 108, 29, 1, 255, 109, 34, 5, 255, 111, 30, 2, 255, 114, 30, 0, 255, 116, 33, 3, 255, 115, 30, 3, 255, 114, 32, 3, 255, 110, 30, 2, 255, 114, 30, 3, 255, 112, 28, 2, 255, 106, 27, 1, 255, 106, 28, 0, 255, 104, 28, 1, 255, 106, 30, 3, 255, 103, 27, 1, 255, 105, 28, 3, 255, 97, 27, 2, 255, 97, 27, 3, 255, 96, 25, 1, 255, 100, 26, 2, 255, 101, 26, 2, 255, 99, 25, 5, 255, 93, 24, 3, 255, 85, 25, 2, 255, 71, 20, 0, 255, 71, 20, 1, 255, 74, 23, 2, 255, 79, 24, 1, 255, 89, 27, 2, 255, 92, 27, 2, 255, 83, 27, 3, 255, 76, 24, 2, 255, 69, 22, 0, 255, 68, 24, 1, 255, 75, 19, 4, 255, 74, 19, 2, 255, 74, 20, 1, 255, 74, 19, 0, 255, 78, 21, 1, 255, 78, 21, 2, 255, 75, 20, 1, 255, 76, 18, 0, 255, 77, 18, 1, 255, 84, 24, 3, 255, 87, 26, 3, 255, 92, 28, 4, 255, 95, 28, 3, 255, 91, 23, 1, 255, 116, 38, 5, 255, 133, 53, 5, 255, 137, 56, 0, 255, 133, 53, 0, 255, 129, 52, 3, 255, 128, 53, 2, 255, 130, 51, 1, 255, 130, 52, 1, 255, 132, 58, 3, 255, 133, 57, 1, 255, 136, 56, 1, 255, 135, 55, 1, 255, 137, 58, 4, 255, 137, 58, 1, 255, 139, 58, 2, 255, 140, 58, 2, 255, 43, 56, 25, 255, 39, 60, 21, 255, 39, 67, 11, 255, 48, 70, 26, 255, 48, 66, 17, 255, 52, 71, 16, 255, 50, 65, 20, 255, 49, 63, 12, 255, 48, 65, 6, 255, 45, 61, 5, 255, 39, 50, 3, 255, 37, 42, 5, 255, 39, 40, 5, 255, 35, 36, 1, 255, 31, 29, 2, 255, 27, 28, 7, 255, 22, 20, 3, 255, 30, 20, 4, 255, 30, 22, 2, 255, 24, 16, 0, 255, 38, 19, 5, 255, 37, 18, 4, 255, 25, 15, 0, 255, 28, 19, 5, 255, 25, 17, 6, 255, 27, 10, 0, 255, 46, 16, 5, 255, 39, 16, 3, 255, 38, 13, 2, 255, 41, 14, 3, 255, 33, 17, 2, 255, 30, 17, 2, 255, 24, 17, 3, 255, 34, 17, 5, 255, 39, 14, 3, 255, 36, 20, 3, 255, 47, 30, 10, 255, 52, 32, 12, 255, 45, 38, 15, 255, 56, 41, 24, 255, 60, 41, 16, 255, 53, 40, 3, 255, 54, 36, 4, 255, 53, 28, 3, 255, 51, 25, 0, 255, 57, 32, 7, 255, 70, 49, 27, 255, 77, 54, 34, 255, 84, 58, 32, 255, 83, 59, 41, 255, 72, 57, 47, 255, 73, 64, 56, 255, 71, 66, 47, 255, 71, 65, 37, 255, 69, 57, 22, 255, 79, 41, 11, 255, 87, 48, 14, 255, 83, 51, 10, 255, 61, 44, 9, 255, 58, 48, 18, 255, 71, 52, 22, 255, 70, 44, 8, 255, 72, 40, 3, 255, 77, 39, 4, 255, 78, 45, 5, 255, 80, 38, 0, 255, 79, 39, 0, 255, 79, 39, 2, 255, 79, 39, 2, 255, 90, 41, 3, 255, 99, 43, 2, 255, 103, 45, 1, 255, 109, 44, 2, 255, 109, 42, 1, 255, 111, 42, 2, 255, 113, 40, 1, 255, 115, 39, 2, 255, 115, 41, 4, 255, 111, 43, 3, 255, 108, 45, 3, 255, 105, 42, 1, 255, 102, 41, 1, 255, 101, 41, 2, 255, 94, 43, 1, 255, 92, 46, 4, 255, 93, 44, 4, 255, 95, 45, 3, 255, 94, 53, 4, 255, 97, 52, 4, 255, 105, 52, 4, 255, 109, 52, 0, 255, 110, 55, 5, 255, 102, 55, 3, 255, 104, 55, 3, 255, 109, 53, 4, 255, 111, 53, 3, 255, 110, 50, 5, 255, 105, 49, 1, 255, 110, 56, 5, 255, 110, 55, 1, 255, 112, 51, 0, 255, 116, 51, 3, 255, 112, 47, 0, 255, 115, 49, 5, 255, 110, 47, 6, 255, 107, 45, 1, 255, 116, 49, 1, 255, 120, 51, 1, 255, 127, 49, 3, 255, 128, 49, 1, 255, 134, 53, 5, 255, 134, 51, 3, 255, 130, 47, 0, 255, 127, 48, 2, 255, 121, 45, 2, 255, 103, 35, 1, 255, 105, 41, 2, 255, 115, 47, 2, 255, 123, 46, 0, 255, 136, 54, 2, 255, 134, 53, 5, 255, 136, 54, 6, 255, 137, 53, 0, 255, 136, 54, 5, 255, 136, 55, 4, 255, 133, 55, 1, 255, 133, 55, 3, 255, 132, 51, 2, 255, 132, 52, 2, 255, 130, 47, 0, 255, 125, 49, 1, 255, 118, 51, 0, 255, 120, 49, 1, 255, 130, 50, 4, 255, 132, 51, 3, 255, 138, 54, 2, 255, 148, 57, 4, 255, 147, 57, 5, 255, 144, 61, 3, 255, 140, 59, 1, 255, 143, 58, 5, 255, 144, 60, 7, 255, 143, 60, 1, 255, 147, 62, 0, 255, 150, 60, 1, 255, 149, 63, 7, 255, 141, 63, 6, 255, 143, 63, 4, 255, 144, 62, 2, 255, 143, 63, 2, 255, 144, 62, 4, 255, 145, 62, 3, 255, 147, 68, 3, 255, 148, 64, 1, 255, 154, 62, 7, 255, 153, 64, 5, 255, 153, 68, 5, 255, 151, 67, 3, 255, 148, 61, 6, 255, 153, 64, 10, 255, 151, 66, 12, 255, 153, 66, 14, 255, 154, 69, 9, 255, 150, 67, 13, 255, 148, 66, 7, 255, 150, 67, 3, 255, 151, 69, 5, 255, 154, 69, 18, 255, 154, 69, 9, 255, 157, 72, 6, 255, 164, 76, 15, 255, 163, 77, 4, 255, 162, 76, 6, 255, 160, 75, 10, 255, 158, 75, 14, 255, 151, 72, 17, 255, 148, 72, 12, 255, 162, 82, 18, 255, 170, 85, 14, 255, 164, 82, 17, 255, 162, 81, 14, 255, 165, 82, 12, 255, 170, 85, 18, 255, 170, 87, 16, 255, 168, 86, 12, 255, 168, 86, 15, 255, 166, 88, 17, 255, 163, 87, 9, 255, 163, 85, 6, 255, 167, 88, 17, 255, 166, 90, 17, 255, 173, 95, 14, 255, 181, 93, 12, 255, 181, 95, 22, 255, 177, 96, 14, 255, 171, 94, 25, 255, 168, 94, 23, 255, 166, 95, 20, 255, 167, 96, 22, 255, 158, 89, 13, 255, 147, 88, 24, 255, 145, 85, 21, 255, 130, 83, 11, 255, 109, 79, 18, 255, 95, 77, 25, 255, 90, 80, 24, 255, 91, 83, 10, 255, 93, 82, 16, 255, 97, 85, 14, 255, 92, 78, 16, 255, 95, 80, 30, 255, 88, 80, 26, 255, 105, 81, 7, 255, 97, 80, 17, 255, 90, 84, 10, 255, 98, 80, 17, 255, 98, 79, 25, 255, 91, 81, 14, 255, 91, 82, 19, 255, 93, 83, 19, 255, 92, 82, 15, 255, 92, 82, 19, 255, 92, 81, 23, 255, 93, 82, 17, 255, 104, 81, 14, 255, 99, 81, 11, 255, 95, 82, 16, 255, 99, 79, 10, 255, 104, 76, 4, 255, 92, 74, 10, 255, 94, 77, 9, 255, 102, 75, 16, 255, 100, 75, 17, 255, 98, 72, 21, 255, 101, 73, 17, 255, 101, 72, 11, 255, 103, 74, 17, 255, 102, 73, 19, 255, 102, 72, 11, 255, 103, 72, 6, 255, 101, 72, 2, 255, 101, 70, 4, 255, 103, 72, 9, 255, 107, 73, 11, 255, 104, 73, 8, 255, 103, 65, 10, 255, 95, 59, 14, 255, 93, 61, 6, 255, 95, 62, 8, 255, 98, 67, 8, 255, 109, 66, 4, 255, 103, 62, 4, 255, 91, 64, 8, 255, 96, 63, 8, 255, 107, 64, 7, 255, 107, 60, 1, 255, 112, 66, 8, 255, 103, 59, 6, 255, 96, 56, 2, 255, 98, 57, 2, 255, 100, 57, 4, 255, 99, 60, 4, 255, 98, 59, 5, 255, 104, 59, 8, 255, 108, 67, 1, 255, 140, 92, 7, 255, 145, 93, 5, 255, 144, 100, 6, 255, 151, 103, 6, 255, 150, 95, 11, 255, 147, 95, 1, 255, 143, 89, 2, 255, 140, 82, 3, 255, 142, 85, 4, 255, 140, 83, 3, 255, 139, 82, 6, 255, 137, 82, 8, 255, 132, 81, 3, 255, 131, 82, 7, 255, 129, 79, 7, 255, 134, 81, 2, 255, 139, 82, 11, 255, 136, 78, 11, 255, 133, 76, 4, 255, 129, 75, 2, 255, 131, 76, 6, 255, 126, 72, 2, 255, 129, 74, 4, 255, 141, 80, 9, 255, 137, 78, 1, 255, 140, 76, 2, 255, 133, 71, 0, 255, 134, 71, 3, 255, 125, 61, 3, 255, 126, 63, 1, 255, 134, 70, 5, 255, 133, 68, 4, 255, 133, 68, 4, 255, 133, 71, 4, 255, 130, 71, 1, 255, 129, 70, 0, 255, 134, 67, 2, 255, 130, 62, 2, 255, 131, 62, 4, 255, 131, 65, 4, 255, 126, 61, 1, 255, 122, 58, 3, 255, 124, 62, 1, 255, 123, 58, 1, 255, 121, 53, 3, 255, 119, 52, 3, 255, 116, 53, 1, 255, 116, 53, 0, 255, 120, 55, 3, 255, 119, 50, 4, 255, 118, 52, 5, 255, 111, 52, 1, 255, 117, 48, 3, 255, 116, 41, 4, 255, 100, 42, 5, 255, 91, 36, 1, 255, 88, 31, 1, 255, 93, 31, 4, 255, 93, 31, 3, 255, 87, 29, 0, 255, 92, 31, 2, 255, 97, 32, 4, 255, 87, 26, 6, 255, 84, 22, 2, 255, 93, 28, 3, 255, 99, 32, 7, 255, 108, 32, 3, 255, 95, 26, 6, 255, 86, 28, 0, 255, 87, 27, 1, 255, 93, 28, 0, 255, 99, 29, 0, 255, 104, 30, 4, 255, 113, 29, 3, 255, 113, 32, 3, 255, 114, 33, 4, 255, 109, 26, 0, 255, 110, 28, 0, 255, 110, 29, 0, 255, 113, 29, 0, 255, 113, 28, 0, 255, 112, 28, 1, 255, 114, 30, 4, 255, 111, 29, 5, 255, 111, 29, 5, 255, 105, 24, 0, 255, 107, 28, 2, 255, 107, 31, 2, 255, 101, 27, 1, 255, 101, 27, 3, 255, 101, 26, 3, 255, 97, 21, 1, 255, 97, 23, 2, 255, 95, 23, 0, 255, 91, 22, 1, 255, 77, 17, 0, 255, 69, 15, 0, 255, 75, 21, 5, 255, 85, 27, 5, 255, 87, 27, 1, 255, 85, 25, 2, 255, 79, 23, 2, 255, 77, 25, 4, 255, 67, 21, 1, 255, 68, 24, 2, 255, 81, 24, 6, 255, 73, 19, 2, 255, 71, 18, 0, 255, 74, 22, 1, 255, 77, 24, 3, 255, 78, 21, 2, 255, 80, 21, 3, 255, 79, 20, 3, 255, 76, 17, 1, 255, 77, 18, 0, 255, 82, 24, 5, 255, 81, 23, 2, 255, 83, 21, 0, 255, 92, 26, 1, 255, 120, 41, 3, 255, 131, 50, 4, 255, 132, 51, 0, 255, 133, 53, 0, 255, 130, 52, 3, 255, 128, 51, 2, 255, 127, 48, 0, 255, 131, 51, 1, 255, 132, 55, 1, 255, 132, 56, 0, 255, 136, 58, 1, 255, 135, 57, 1, 255, 137, 57, 3, 255, 137, 56, 0, 255, 139, 58, 2, 255, 138, 57, 1, 255, 45, 66, 23, 255, 46, 68, 22, 255, 54, 73, 29, 255, 47, 63, 33, 255, 52, 67, 19, 255, 59, 70, 8, 255, 47, 64, 7, 255, 47, 68, 6, 255, 38, 55, 5, 255, 40, 50, 16, 255, 35, 42, 6, 255, 36, 38, 0, 255, 35, 32, 4, 255, 28, 27, 3, 255, 31, 26, 7, 255, 19, 18, 5, 255, 25, 21, 8, 255, 26, 17, 5, 255, 26, 19, 3, 255, 22, 15, 3, 255, 28, 14, 5, 255, 28, 14, 2, 255, 25, 16, 2, 255, 27, 20, 6, 255, 28, 20, 5, 255, 25, 15, 1, 255, 35, 17, 4, 255, 39, 16, 4, 255, 39, 16, 3, 255, 43, 17, 6, 255, 43, 17, 4, 255, 35, 15, 0, 255, 28, 16, 3, 255, 32, 18, 4, 255, 34, 18, 1, 255, 34, 18, 0, 255, 48, 25, 5, 255, 52, 33, 8, 255, 50, 38, 17, 255, 49, 39, 22, 255, 51, 39, 19, 255, 54, 35, 4, 255, 58, 38, 7, 255, 47, 29, 8, 255, 44, 25, 3, 255, 55, 30, 0, 255, 53, 41, 16, 255, 59, 50, 35, 255, 69, 54, 26, 255, 70, 57, 41, 255, 71, 64, 48, 255, 83, 67, 52, 255, 70, 65, 49, 255, 66, 65, 52, 255, 73, 63, 32, 255, 82, 50, 2, 255, 76, 47, 16, 255, 79, 55, 15, 255, 70, 48, 2, 255, 77, 57, 18, 255, 75, 52, 18, 255, 66, 43, 5, 255, 69, 42, 5, 255, 79, 36, 4, 255, 73, 40, 6, 255, 71, 39, 3, 255, 85, 37, 4, 255, 93, 39, 5, 255, 104, 39, 6, 255, 105, 36, 3, 255, 101, 37, 4, 255, 95, 35, 2, 255, 92, 38, 3, 255, 92, 39, 4, 255, 91, 37, 2, 255, 90, 41, 5, 255, 86, 39, 3, 255, 92, 41, 4, 255, 88, 41, 2, 255, 88, 41, 2, 255, 91, 44, 4, 255, 92, 43, 3, 255, 92, 46, 5, 255, 99, 46, 4, 255, 95, 45, 2, 255, 99, 46, 6, 255, 100, 46, 5, 255, 96, 46, 1, 255, 96, 44, 0, 255, 106, 49, 3, 255, 110, 53, 3, 255, 111, 51, 4, 255, 99, 46, 0, 255, 100, 51, 3, 255, 104, 55, 5, 255, 103, 55, 2, 255, 105, 55, 3, 255, 106, 53, 4, 255, 107, 53, 6, 255, 103, 49, 2, 255, 109, 54, 3, 255, 113, 55, 2, 255, 114, 54, 2, 255, 113, 52, 1, 255, 120, 52, 3, 255, 111, 46, 0, 255, 113, 53, 7, 255, 117, 52, 4, 255, 116, 49, 1, 255, 118, 54, 5, 255, 116, 53, 3, 255, 117, 50, 1, 255, 125, 50, 2, 255, 124, 49, 5, 255, 114, 43, 3, 255, 109, 39, 7, 255, 123, 49, 9, 255, 133, 53, 5, 255, 135, 53, 5, 255, 136, 55, 7, 255, 139, 57, 5, 255, 138, 55, 5, 255, 142, 58, 8, 255, 141, 58, 1, 255, 136, 54, 3, 255, 133, 52, 1, 255, 143, 59, 2, 255, 146, 58, 3, 255, 140, 57, 5, 255, 137, 57, 3, 255, 137, 53, 4, 255, 136, 49, 2, 255, 135, 56, 6, 255, 131, 52, 1, 255, 136, 55, 1, 255, 143, 58, 5, 255, 143, 55, 4, 255, 142, 59, 2, 255, 139, 58, 3, 255, 140, 58, 4, 255, 149, 61, 4, 255, 150, 58, 7, 255, 143, 64, 3, 255, 149, 67, 3, 255, 154, 60, 1, 255, 152, 60, 4, 255, 144, 62, 4, 255, 144, 62, 8, 255, 148, 67, 9, 255, 145, 66, 2, 255, 142, 62, 2, 255, 144, 60, 5, 255, 150, 57, 9, 255, 155, 63, 11, 255, 151, 63, 10, 255, 151, 61, 12, 255, 149, 63, 12, 255, 146, 65, 4, 255, 143, 62, 2, 255, 149, 66, 8, 255, 149, 68, 4, 255, 150, 67, 5, 255, 151, 67, 5, 255, 147, 63, 12, 255, 148, 66, 12, 255, 147, 68, 10, 255, 148, 68, 10, 255, 150, 70, 12, 255, 153, 70, 13, 255, 155, 71, 9, 255, 157, 73, 8, 255, 159, 75, 10, 255, 158, 76, 10, 255, 147, 68, 18, 255, 153, 72, 14, 255, 157, 76, 10, 255, 161, 81, 13, 255, 160, 82, 14, 255, 158, 78, 13, 255, 158, 82, 20, 255, 156, 80, 10, 255, 167, 86, 14, 255, 167, 85, 18, 255, 163, 82, 13, 255, 161, 83, 13, 255, 156, 82, 14, 255, 163, 88, 19, 255, 168, 86, 22, 255, 168, 88, 17, 255, 173, 91, 16, 255, 171, 91, 15, 255, 172, 97, 20, 255, 174, 93, 20, 255, 176, 93, 16, 255, 171, 91, 15, 255, 164, 92, 18, 255, 156, 93, 15, 255, 151, 88, 27, 255, 139, 86, 18, 255, 141, 90, 20, 255, 135, 89, 25, 255, 91, 81, 20, 255, 86, 80, 17, 255, 88, 81, 24, 255, 86, 82, 21, 255, 98, 79, 24, 255, 93, 81, 17, 255, 92, 80, 21, 255, 94, 84, 15, 255, 94, 83, 24, 255, 92, 87, 16, 255, 92, 84, 18, 255, 104, 83, 15, 255, 100, 82, 23, 255, 97, 86, 16, 255, 96, 81, 18, 255, 99, 81, 19, 255, 102, 82, 11, 255, 100, 80, 18, 255, 101, 80, 28, 255, 101, 80, 22, 255, 104, 82, 20, 255, 103, 81, 17, 255, 101, 83, 16, 255, 94, 80, 22, 255, 97, 80, 12, 255, 95, 81, 19, 255, 93, 77, 22, 255, 96, 74, 16, 255, 93, 75, 17, 255, 95, 76, 15, 255, 103, 78, 13, 255, 104, 77, 9, 255, 99, 76, 9, 255, 96, 72, 20, 255, 100, 70, 12, 255, 106, 70, 17, 255, 98, 74, 16, 255, 99, 71, 17, 255, 98, 71, 15, 255, 97, 70, 10, 255, 95, 69, 6, 255, 97, 72, 7, 255, 97, 67, 14, 255, 95, 66, 10, 255, 101, 66, 14, 255, 95, 64, 6, 255, 93, 64, 4, 255, 101, 68, 6, 255, 96, 63, 8, 255, 96, 63, 6, 255, 99, 63, 2, 255, 102, 62, 1, 255, 102, 58, 7, 255, 99, 59, 9, 255, 108, 61, 6, 255, 108, 62, 2, 255, 99, 62, 9, 255, 99, 63, 11, 255, 108, 62, 4, 255, 110, 61, 1, 255, 103, 57, 1, 255, 102, 61, 1, 255, 108, 59, 6, 255, 102, 60, 2, 255, 105, 66, 6, 255, 117, 66, 7, 255, 133, 82, 3, 255, 145, 93, 4, 255, 140, 89, 2, 255, 127, 75, 6, 255, 135, 82, 9, 255, 142, 90, 2, 255, 138, 86, 2, 255, 134, 79, 8, 255, 130, 79, 3, 255, 131, 81, 6, 255, 127, 79, 3, 255, 125, 78, 8, 255, 125, 76, 7, 255, 130, 77, 5, 255, 133, 78, 7, 255, 130, 76, 3, 255, 124, 72, 3, 255, 123, 71, 3, 255, 123, 71, 4, 255, 121, 68, 4, 255, 124, 70, 10, 255, 134, 77, 3, 255, 140, 79, 3, 255, 131, 73, 1, 255, 134, 72, 6, 255, 128, 69, 2, 255, 128, 69, 3, 255, 128, 64, 4, 255, 130, 64, 3, 255, 135, 68, 3, 255, 134, 65, 1, 255, 131, 63, 3, 255, 129, 63, 9, 255, 123, 57, 5, 255, 127, 59, 2, 255, 129, 60, 7, 255, 129, 58, 4, 255, 129, 61, 2, 255, 128, 62, 3, 255, 124, 58, 2, 255, 124, 59, 2, 255, 125, 58, 1, 255, 125, 55, 1, 255, 125, 56, 2, 255, 122, 56, 2, 255, 120, 54, 2, 255, 118, 51, 4, 255, 110, 47, 2, 255, 108, 47, 2, 255, 115, 51, 8, 255, 117, 48, 4, 255, 111, 46, 1, 255, 105, 45, 1, 255, 98, 37, 2, 255, 92, 33, 0, 255, 92, 34, 1, 255, 96, 33, 3, 255, 97, 28, 3, 255, 94, 26, 4, 255, 96, 33, 1, 255, 94, 30, 4, 255, 96, 27, 6, 255, 83, 25, 3, 255, 87, 28, 4, 255, 96, 27, 2, 255, 90, 24, 4, 255, 93, 27, 1, 255, 98, 31, 2, 255, 99, 25, 1, 255, 101, 26, 3, 255, 98, 27, 0, 255, 103, 26, 3, 255, 104, 27, 2, 255, 109, 29, 3, 255, 108, 27, 0, 255, 110, 28, 0, 255, 112, 31, 2, 255, 117, 34, 4, 255, 117, 32, 3, 255, 119, 31, 4, 255, 115, 27, 2, 255, 114, 27, 3, 255, 114, 28, 4, 255, 110, 25, 2, 255, 110, 27, 4, 255, 113, 30, 2, 255, 110, 29, 2, 255, 103, 25, 1, 255, 103, 24, 3, 255, 98, 21, 2, 255, 95, 23, 1, 255, 94, 25, 2, 255, 90, 23, 2, 255, 81, 21, 3, 255, 70, 18, 3, 255, 66, 17, 4, 255, 74, 23, 5, 255, 75, 25, 2, 255, 71, 23, 3, 255, 78, 21, 3, 255, 75, 22, 4, 255, 71, 22, 4, 255, 71, 20, 0, 255, 73, 22, 1, 255, 65, 18, 2, 255, 63, 18, 0, 255, 69, 22, 2, 255, 72, 23, 1, 255, 76, 21, 1, 255, 78, 20, 0, 255, 78, 19, 2, 255, 77, 21, 3, 255, 78, 20, 2, 255, 77, 21, 3, 255, 76, 20, 3, 255, 78, 21, 0, 255, 97, 35, 6, 255, 120, 44, 2, 255, 125, 49, 4, 255, 125, 49, 1, 255, 130, 51, 3, 255, 131, 50, 3, 255, 132, 52, 2, 255, 131, 53, 0, 255, 134, 54, 3, 255, 134, 54, 0, 255, 138, 59, 3, 255, 136, 57, 1, 255, 135, 54, 0, 255, 137, 56, 1, 255, 140, 56, 2, 255, 140, 57, 3, 255, 138, 57, 2, 255, 43, 73, 22, 255, 40, 73, 26, 255, 45, 75, 25, 255, 50, 68, 19, 255, 54, 65, 26, 255, 44, 65, 17, 255, 41, 63, 9, 255, 38, 53, 6, 255, 39, 51, 8, 255, 34, 40, 5, 255, 37, 36, 9, 255, 29, 26, 4, 255, 28, 24, 6, 255, 24, 22, 9, 255, 29, 22, 10, 255, 23, 19, 4, 255, 25, 19, 3, 255, 27, 16, 4, 255, 22, 15, 5, 255, 21, 12, 5, 255, 17, 11, 2, 255, 22, 13, 2, 255, 34, 18, 5, 255, 29, 16, 2, 255, 32, 19, 2, 255, 26, 17, 2, 255, 17, 14, 2, 255, 40, 16, 7, 255, 34, 13, 0, 255, 29, 17, 2, 255, 43, 18, 6, 255, 40, 22, 7, 255, 38, 19, 1, 255, 40, 18, 3, 255, 33, 26, 2, 255, 35, 20, 2, 255, 43, 25, 7, 255, 45, 36, 16, 255, 62, 38, 23, 255, 53, 36, 15, 255, 55, 43, 16, 255, 59, 42, 10, 255, 48, 36, 8, 255, 40, 25, 5, 255, 48, 25, 3, 255, 48, 24, 3, 255, 58, 44, 25, 255, 70, 56, 20, 255, 76, 55, 19, 255, 67, 58, 37, 255, 74, 61, 47, 255, 77, 67, 54, 255, 72, 63, 51, 255, 68, 62, 47, 255, 72, 61, 31, 255, 76, 52, 13, 255, 77, 45, 14, 255, 71, 49, 25, 255, 64, 42, 8, 255, 69, 47, 15, 255, 71, 52, 14, 255, 75, 45, 12, 255, 79, 47, 7, 255, 90, 44, 2, 255, 95, 47, 2, 255, 96, 43, 3, 255, 101, 35, 5, 255, 86, 35, 3, 255, 80, 36, 1, 255, 82, 40, 5, 255, 86, 41, 3, 255, 89, 37, 0, 255, 86, 36, 1, 255, 85, 40, 3, 255, 80, 38, 1, 255, 85, 38, 1, 255, 88, 40, 3, 255, 84, 40, 5, 255, 87, 39, 3, 255, 92, 38, 3, 255, 93, 38, 2, 255, 95, 41, 2, 255, 89, 41, 1, 255, 82, 36, 4, 255, 77, 35, 1, 255, 81, 36, 4, 255, 76, 38, 3, 255, 80, 38, 5, 255, 76, 38, 3, 255, 80, 38, 2, 255, 79, 38, 2, 255, 83, 38, 3, 255, 87, 34, 2, 255, 87, 37, 2, 255, 88, 39, 3, 255, 97, 38, 5, 255, 94, 39, 1, 255, 99, 38, 2, 255, 106, 42, 8, 255, 101, 39, 5, 255, 101, 41, 3, 255, 102, 41, 1, 255, 108, 42, 2, 255, 107, 43, 2, 255, 103, 41, 1, 255, 101, 42, 3, 255, 94, 40, 4, 255, 93, 40, 3, 255, 88, 37, 1, 255, 100, 35, 4, 255, 93, 36, 2, 255, 89, 39, 1, 255, 94, 44, 5, 255, 90, 41, 4, 255, 84, 39, 4, 255, 80, 36, 3, 255, 82, 36, 3, 255, 89, 38, 1, 255, 101, 45, 6, 255, 97, 37, 5, 255, 108, 47, 4, 255, 118, 51, 1, 255, 125, 49, 4, 255, 132, 52, 6, 255, 132, 52, 6, 255, 137, 59, 4, 255, 140, 59, 0, 255, 146, 57, 2, 255, 141, 62, 0, 255, 146, 63, 2, 255, 154, 60, 6, 255, 149, 52, 4, 255, 142, 54, 4, 255, 144, 57, 4, 255, 140, 56, 2, 255, 132, 52, 1, 255, 124, 47, 0, 255, 127, 50, 2, 255, 131, 52, 7, 255, 135, 53, 5, 255, 144, 58, 2, 255, 144, 55, 0, 255, 149, 63, 1, 255, 155, 62, 2, 255, 151, 61, 3, 255, 143, 60, 3, 255, 144, 57, 4, 255, 146, 57, 5, 255, 151, 62, 7, 255, 147, 60, 4, 255, 142, 59, 6, 255, 140, 60, 9, 255, 141, 57, 7, 255, 146, 61, 11, 255, 144, 61, 5, 255, 149, 65, 0, 255, 148, 64, 9, 255, 143, 62, 10, 255, 140, 62, 2, 255, 144, 66, 1, 255, 145, 66, 5, 255, 145, 63, 12, 255, 146, 64, 13, 255, 145, 64, 13, 255, 143, 65, 9, 255, 142, 64, 6, 255, 144, 66, 12, 255, 144, 67, 2, 255, 150, 70, 10, 255, 154, 71, 12, 255, 156, 74, 2, 255, 159, 75, 12, 255, 156, 75, 10, 255, 154, 76, 12, 255, 158, 76, 12, 255, 167, 83, 17, 255, 161, 79, 18, 255, 159, 81, 15, 255, 158, 80, 19, 255, 160, 82, 17, 255, 165, 85, 9, 255, 162, 85, 12, 255, 154, 80, 16, 255, 153, 80, 12, 255, 157, 87, 14, 255, 160, 87, 20, 255, 167, 88, 14, 255, 169, 94, 15, 255, 171, 92, 20, 255, 169, 92, 18, 255, 162, 90, 20, 255, 162, 88, 10, 255, 155, 91, 19, 255, 155, 91, 25, 255, 150, 89, 21, 255, 136, 85, 17, 255, 125, 81, 19, 255, 125, 83, 15, 255, 120, 82, 25, 255, 109, 78, 25, 255, 107, 81, 26, 255, 91, 82, 12, 255, 89, 77, 16, 255, 89, 80, 21, 255, 85, 78, 19, 255, 92, 83, 20, 255, 89, 83, 24, 255, 90, 82, 25, 255, 92, 80, 31, 255, 97, 82, 27, 255, 98, 83, 8, 255, 93, 86, 10, 255, 101, 83, 23, 255, 102, 84, 16, 255, 100, 87, 16, 255, 104, 83, 22, 255, 105, 83, 12, 255, 99, 80, 25, 255, 98, 79, 24, 255, 99, 82, 16, 255, 101, 84, 9, 255, 105, 83, 22, 255, 102, 80, 26, 255, 101, 84, 23, 255, 99, 85, 17, 255, 97, 80, 4, 255, 97, 75, 9, 255, 101, 79, 17, 255, 98, 78, 12, 255, 100, 78, 14, 255, 97, 76, 12, 255, 100, 75, 22, 255, 103, 78, 9, 255, 98, 75, 10, 255, 95, 73, 22, 255, 99, 71, 15, 255, 104, 73, 5, 255, 102, 71, 16, 255, 101, 69, 16, 255, 101, 69, 15, 255, 102, 71, 13, 255, 100, 69, 12, 255, 101, 68, 14, 255, 100, 67, 6, 255, 99, 66, 8, 255, 104, 66, 4, 255, 98, 66, 0, 255, 97, 65, 3, 255, 109, 64, 17, 255, 102, 60, 6, 255, 106, 64, 10, 255, 103, 61, 13, 255, 104, 62, 5, 255, 108, 64, 5, 255, 97, 62, 7, 255, 98, 62, 11, 255, 99, 62, 10, 255, 100, 61, 2, 255, 113, 61, 10, 255, 118, 61, 9, 255, 114, 62, 5, 255, 115, 56, 7, 255, 113, 59, 4, 255, 107, 57, 8, 255, 100, 54, 5, 255, 94, 55, 3, 255, 100, 53, 11, 255, 107, 53, 2, 255, 125, 73, 2, 255, 128, 82, 4, 255, 125, 79, 5, 255, 128, 82, 12, 255, 127, 79, 7, 255, 127, 78, 6, 255, 121, 71, 11, 255, 118, 74, 4, 255, 121, 76, 2, 255, 120, 76, 5, 255, 121, 75, 8, 255, 119, 70, 5, 255, 128, 72, 5, 255, 131, 75, 5, 255, 123, 72, 2, 255, 119, 68, 2, 255, 119, 67, 5, 255, 118, 67, 7, 255, 119, 66, 5, 255, 122, 68, 4, 255, 128, 68, 4, 255, 134, 71, 2, 255, 134, 73, 3, 255, 128, 65, 4, 255, 122, 60, 4, 255, 116, 50, 7, 255, 114, 48, 8, 255, 116, 52, 2, 255, 125, 59, 0, 255, 131, 65, 1, 255, 132, 65, 2, 255, 132, 62, 6, 255, 130, 59, 6, 255, 129, 60, 7, 255, 130, 62, 7, 255, 128, 60, 4, 255, 126, 59, 2, 255, 123, 59, 3, 255, 121, 58, 2, 255, 120, 55, 4, 255, 118, 52, 3, 255, 118, 50, 1, 255, 120, 51, 2, 255, 118, 52, 2, 255, 115, 49, 4, 255, 108, 45, 2, 255, 107, 47, 2, 255, 115, 49, 5, 255, 121, 56, 8, 255, 118, 52, 3, 255, 116, 49, 5, 255, 106, 43, 2, 255, 107, 38, 4, 255, 100, 35, 2, 255, 96, 34, 3, 255, 92, 32, 2, 255, 93, 29, 2, 255, 93, 27, 3, 255, 103, 36, 2, 255, 101, 34, 2, 255, 98, 25, 1, 255, 108, 37, 4, 255, 118, 44, 3, 255, 122, 48, 1, 255, 120, 36, 3, 255, 115, 29, 5, 255, 110, 30, 5, 255, 105, 27, 2, 255, 102, 29, 3, 255, 101, 31, 4, 255, 104, 27, 2, 255, 102, 25, 0, 255, 108, 28, 1, 255, 115, 31, 4, 255, 115, 31, 3, 255, 114, 30, 2, 255, 118, 34, 5, 255, 116, 31, 1, 255, 115, 29, 1, 255, 116, 30, 2, 255, 114, 27, 1, 255, 112, 28, 3, 255, 108, 25, 1, 255, 109, 27, 2, 255, 109, 26, 1, 255, 110, 27, 1, 255, 107, 25, 1, 255, 104, 22, 3, 255, 99, 22, 3, 255, 92, 23, 0, 255, 91, 24, 5, 255, 86, 24, 4, 255, 79, 23, 2, 255, 75, 22, 6, 255, 60, 17, 3, 255, 56, 17, 1, 255, 66, 21, 3, 255, 68, 22, 5, 255, 72, 20, 2, 255, 68, 18, 1, 255, 66, 16, 1, 255, 68, 17, 1, 255, 63, 19, 0, 255, 58, 17, 1, 255, 60, 18, 2, 255, 67, 19, 2, 255, 72, 20, 1, 255, 74, 21, 1, 255, 73, 19, 1, 255, 72, 20, 1, 255, 71, 19, 0, 255, 79, 23, 2, 255, 76, 19, 1, 255, 77, 22, 4, 255, 79, 22, 0, 255, 93, 31, 2, 255, 116, 40, 2, 255, 121, 48, 5, 255, 122, 49, 3, 255, 126, 50, 2, 255, 126, 46, 0, 255, 130, 50, 1, 255, 128, 51, 1, 255, 131, 54, 4, 255, 135, 54, 1, 255, 135, 55, 0, 255, 136, 57, 1, 255, 139, 57, 2, 255, 137, 53, 0, 255, 137, 52, 2, 255, 135, 52, 1, 255, 133, 52, 0, 255, 56, 73, 24, 255, 46, 69, 23, 255, 44, 67, 18, 255, 52, 71, 12, 255, 51, 61, 20, 255, 42, 53, 12, 255, 40, 52, 12, 255, 34, 41, 8, 255, 35, 38, 7, 255, 30, 28, 4, 255, 29, 25, 4, 255, 25, 23, 4, 255, 25, 21, 8, 255, 25, 19, 5, 255, 24, 18, 7, 255, 16, 16, 4, 255, 20, 19, 4, 255, 38, 28, 12, 255, 26, 15, 2, 255, 24, 13, 0, 255, 34, 17, 1, 255, 39, 17, 3, 255, 32, 17, 3, 255, 26, 13, 2, 255, 35, 17, 6, 255, 28, 15, 4, 255, 18, 10, 0, 255, 30, 16, 7, 255, 29, 18, 6, 255, 32, 14, 1, 255, 38, 15, 2, 255, 42, 18, 5, 255, 32, 21, 1, 255, 35, 18, 2, 255, 41, 23, 2, 255, 33, 19, 4, 255, 35, 21, 5, 255, 41, 30, 14, 255, 47, 42, 20, 255, 50, 40, 16, 255, 60, 44, 19, 255, 51, 45, 6, 255, 46, 40, 1, 255, 55, 34, 5, 255, 50, 32, 4, 255, 48, 28, 4, 255, 66, 42, 12, 255, 81, 57, 30, 255, 79, 57, 19, 255, 65, 57, 35, 255, 61, 59, 43, 255, 79, 73, 38, 255, 82, 62, 42, 255, 70, 60, 45, 255, 72, 64, 34, 255, 76, 53, 19, 255, 74, 46, 17, 255, 70, 56, 20, 255, 78, 39, 5, 255, 81, 45, 16, 255, 79, 54, 13, 255, 95, 48, 11, 255, 92, 48, 8, 255, 88, 38, 3, 255, 75, 42, 5, 255, 73, 38, 3, 255, 73, 30, 0, 255, 77, 34, 2, 255, 82, 36, 2, 255, 86, 39, 4, 255, 83, 32, 0, 255, 87, 35, 5, 255, 76, 32, 1, 255, 75, 36, 2, 255, 79, 38, 6, 255, 80, 35, 3, 255, 81, 35, 3, 255, 76, 35, 1, 255, 78, 39, 3, 255, 78, 36, 2, 255, 83, 36, 3, 255, 84, 35, 1, 255, 90, 41, 5, 255, 80, 39, 2, 255, 83, 40, 2, 255, 87, 42, 5, 255, 74, 38, 1, 255, 83, 38, 4, 255, 81, 39, 4, 255, 76, 34, 0, 255, 80, 34, 2, 255, 88, 38, 5, 255, 85, 40, 2, 255, 83, 40, 1, 255, 89, 38, 1, 255, 96, 38, 4, 255, 92, 35, 3, 255, 93, 35, 2, 255, 94, 39, 2, 255, 88, 39, 1, 255, 94, 41, 3, 255, 94, 36, 2, 255, 102, 38, 1, 255, 105, 40, 5, 255, 91, 36, 4, 255, 90, 40, 4, 255, 89, 39, 1, 255, 82, 38, 0, 255, 87, 38, 6, 255, 91, 34, 1, 255, 91, 37, 3, 255, 89, 33, 1, 255, 98, 39, 3, 255, 94, 38, 3, 255, 85, 38, 1, 255, 85, 35, 3, 255, 84, 39, 2, 255, 83, 43, 4, 255, 81, 37, 3, 255, 85, 37, 6, 255, 80, 35, 2, 255, 78, 38, 4, 255, 80, 38, 6, 255, 84, 34, 3, 255, 90, 39, 2, 255, 100, 47, 8, 255, 99, 41, 4, 255, 111, 47, 5, 255, 114, 50, 4, 255, 127, 49, 7, 255, 124, 48, 5, 255, 116, 50, 3, 255, 125, 54, 4, 255, 141, 58, 5, 255, 135, 50, 0, 255, 123, 46, 3, 255, 111, 42, 8, 255, 107, 39, 5, 255, 126, 50, 5, 255, 133, 52, 2, 255, 136, 53, 8, 255, 137, 55, 5, 255, 146, 60, 7, 255, 149, 56, 4, 255, 146, 58, 7, 255, 134, 59, 4, 255, 132, 58, 1, 255, 130, 55, 4, 255, 139, 60, 6, 255, 145, 61, 5, 255, 141, 61, 6, 255, 134, 58, 7, 255, 133, 60, 6, 255, 134, 59, 4, 255, 134, 55, 3, 255, 139, 55, 7, 255, 144, 61, 4, 255, 141, 62, 6, 255, 137, 62, 6, 255, 133, 59, 8, 255, 136, 59, 8, 255, 138, 58, 7, 255, 144, 63, 11, 255, 142, 62, 19, 255, 141, 62, 17, 255, 143, 67, 11, 255, 144, 68, 9, 255, 148, 70, 5, 255, 154, 74, 11, 255, 157, 76, 4, 255, 159, 78, 0, 255, 159, 76, 8, 255, 160, 78, 6, 255, 164, 81, 9, 255, 164, 79, 11, 255, 163, 82, 11, 255, 158, 79, 16, 255, 160, 82, 17, 255, 159, 80, 19, 255, 162, 80, 19, 255, 168, 88, 17, 255, 153, 82, 17, 255, 143, 78, 23, 255, 154, 82, 18, 255, 163, 88, 13, 255, 168, 92, 15, 255, 167, 89, 10, 255, 158, 89, 13, 255, 149, 87, 22, 255, 149, 91, 20, 255, 151, 91, 14, 255, 147, 80, 31, 255, 143, 87, 21, 255, 128, 83, 17, 255, 103, 75, 28, 255, 81, 75, 15, 255, 78, 72, 26, 255, 91, 78, 17, 255, 99, 76, 33, 255, 93, 73, 27, 255, 87, 82, 15, 255, 87, 81, 18, 255, 86, 78, 24, 255, 88, 78, 25, 255, 86, 81, 28, 255, 88, 81, 28, 255, 92, 82, 31, 255, 98, 87, 13, 255, 98, 80, 21, 255, 99, 86, 11, 255, 98, 86, 24, 255, 102, 80, 24, 255, 101, 84, 21, 255, 106, 87, 5, 255, 102, 83, 13, 255, 100, 83, 23, 255, 101, 86, 15, 255, 97, 81, 23, 255, 101, 83, 14, 255, 102, 85, 13, 255, 104, 85, 10, 255, 107, 82, 22, 255, 103, 79, 19, 255, 103, 85, 10, 255, 96, 81, 14, 255, 92, 82, 2, 255, 99, 80, 7, 255, 104, 78, 19, 255, 97, 76, 19, 255, 96, 76, 10, 255, 104, 75, 11, 255, 104, 72, 16, 255, 102, 74, 10, 255, 102, 75, 11, 255, 103, 74, 11, 255, 102, 73, 9, 255, 102, 73, 15, 255, 103, 76, 3, 255, 103, 73, 9, 255, 99, 72, 11, 255, 99, 72, 9, 255, 100, 70, 5, 255, 101, 69, 6, 255, 103, 69, 4, 255, 100, 65, 16, 255, 99, 59, 14, 255, 94, 64, 6, 255, 95, 64, 9, 255, 107, 64, 8, 255, 106, 67, 0, 255, 103, 64, 3, 255, 102, 63, 9, 255, 109, 67, 6, 255, 119, 64, 4, 255, 116, 65, 10, 255, 102, 59, 4, 255, 100, 61, 2, 255, 104, 63, 1, 255, 113, 60, 8, 255, 117, 64, 4, 255, 102, 56, 4, 255, 113, 62, 13, 255, 120, 63, 2, 255, 111, 62, 6, 255, 110, 61, 3, 255, 106, 60, 2, 255, 98, 60, 5, 255, 96, 55, 1, 255, 99, 52, 9, 255, 108, 58, 6, 255, 112, 68, 0, 255, 113, 68, 5, 255, 114, 64, 8, 255, 116, 67, 3, 255, 118, 69, 3, 255, 117, 69, 7, 255, 114, 67, 1, 255, 114, 66, 5, 255, 114, 68, 6, 255, 115, 67, 3, 255, 120, 69, 6, 255, 123, 72, 2, 255, 121, 71, 2, 255, 121, 70, 3, 255, 119, 68, 4, 255, 115, 64, 2, 255, 114, 59, 5, 255, 112, 55, 7, 255, 109, 50, 11, 255, 110, 54, 6, 255, 115, 54, 3, 255, 108, 53, 1, 255, 112, 58, 4, 255, 110, 50, 6, 255, 103, 51, 2, 255, 99, 50, 2, 255, 97, 43, 8, 255, 110, 53, 8, 255, 120, 60, 2, 255, 120, 58, 0, 255, 125, 60, 6, 255, 128, 62, 7, 255, 126, 62, 1, 255, 125, 60, 0, 255, 121, 55, 2, 255, 116, 53, 1, 255, 115, 54, 0, 255, 112, 55, 0, 255, 112, 51, 1, 255, 115, 51, 4, 255, 117, 53, 6, 255, 111, 49, 2, 255, 107, 46, 1, 255, 110, 48, 4, 255, 108, 47, 2, 255, 120, 53, 3, 255, 129, 55, 2, 255, 117, 52, 0, 255, 108, 45, 3, 255, 107, 36, 6, 255, 104, 40, 3, 255, 100, 33, 2, 255, 93, 28, 4, 255, 86, 29, 4, 255, 90, 33, 4, 255, 97, 31, 1, 255, 110, 33, 4, 255, 111, 35, 3, 255, 114, 40, 0, 255, 128, 45, 4, 255, 145, 44, 7, 255, 142, 48, 7, 255, 138, 43, 2, 255, 116, 37, 4, 255, 108, 29, 4, 255, 113, 33, 2, 255, 106, 29, 0, 255, 101, 27, 5, 255, 107, 32, 3, 255, 111, 33, 1, 255, 113, 29, 1, 255, 116, 30, 3, 255, 116, 29, 3, 255, 115, 28, 1, 255, 119, 32, 4, 255, 117, 31, 3, 255, 115, 30, 2, 255, 114, 29, 2, 255, 116, 32, 4, 255, 110, 30, 2, 255, 106, 28, 2, 255, 103, 25, 1, 255, 106, 27, 4, 255, 108, 30, 3, 255, 109, 29, 2, 255, 104, 23, 3, 255, 93, 17, 1, 255, 92, 24, 1, 255, 92, 23, 4, 255, 88, 22, 2, 255, 86, 24, 1, 255, 85, 23, 5, 255, 63, 17, 3, 255, 54, 15, 2, 255, 70, 19, 8, 255, 71, 18, 3, 255, 65, 22, 1, 255, 67, 21, 1, 255, 67, 19, 5, 255, 62, 17, 5, 255, 58, 17, 3, 255, 60, 19, 3, 255, 66, 19, 4, 255, 70, 17, 2, 255, 74, 18, 2, 255, 73, 20, 4, 255, 65, 17, 1, 255, 69, 23, 5, 255, 69, 20, 1, 255, 74, 19, 1, 255, 76, 19, 2, 255, 74, 19, 4, 255, 79, 23, 2, 255, 89, 28, 1, 255, 113, 33, 2, 255, 117, 43, 4, 255, 121, 50, 2, 255, 127, 53, 2, 255, 125, 48, 0, 255, 128, 52, 4, 255, 125, 54, 4, 255, 127, 53, 4, 255, 131, 52, 2, 255, 131, 53, 1, 255, 132, 52, 0, 255, 138, 56, 2, 255, 137, 51, 1, 255, 134, 50, 3, 255, 132, 50, 2, 255, 131, 53, 3, 255, 45, 70, 26, 255, 49, 70, 24, 255, 44, 64, 26, 255, 36, 61, 10, 255, 37, 56, 14, 255, 40, 43, 17, 255, 39, 36, 8, 255, 38, 35, 10, 255, 30, 28, 8, 255, 25, 22, 7, 255, 24, 22, 7, 255, 23, 22, 5, 255, 21, 17, 3, 255, 24, 15, 6, 255, 15, 15, 2, 255, 17, 14, 2, 255, 20, 16, 5, 255, 16, 14, 3, 255, 25, 17, 3, 255, 31, 18, 6, 255, 28, 14, 4, 255, 28, 15, 1, 255, 29, 16, 3, 255, 22, 9, 5, 255, 23, 10, 4, 255, 28, 16, 2, 255, 30, 16, 4, 255, 25, 16, 2, 255, 24, 15, 3, 255, 27, 18, 4, 255, 29, 16, 2, 255, 33, 15, 3, 255, 34, 17, 6, 255, 38, 22, 2, 255, 35, 22, 3, 255, 29, 23, 7, 255, 36, 23, 4, 255, 52, 29, 5, 255, 53, 47, 15, 255, 46, 46, 30, 255, 53, 46, 28, 255, 56, 44, 8, 255, 63, 39, 10, 255, 56, 33, 7, 255, 42, 28, 2, 255, 50, 29, 7, 255, 50, 31, 7, 255, 66, 54, 21, 255, 79, 61, 25, 255, 72, 56, 33, 255, 68, 60, 44, 255, 83, 66, 54, 255, 85, 65, 36, 255, 76, 61, 37, 255, 85, 65, 38, 255, 82, 61, 6, 255, 76, 50, 17, 255, 62, 47, 25, 255, 64, 41, 7, 255, 68, 48, 6, 255, 76, 55, 15, 255, 84, 54, 17, 255, 74, 52, 9, 255, 78, 38, 4, 255, 80, 49, 7, 255, 81, 44, 4, 255, 84, 37, 3, 255, 86, 36, 2, 255, 85, 37, 1, 255, 87, 40, 3, 255, 86, 37, 4, 255, 87, 39, 4, 255, 87, 39, 1, 255, 88, 41, 3, 255, 91, 45, 4, 255, 86, 42, 1, 255, 85, 42, 2, 255, 86, 40, 5, 255, 86, 36, 1, 255, 94, 38, 3, 255, 94, 37, 3, 255, 91, 40, 3, 255, 86, 40, 2, 255, 84, 46, 2, 255, 89, 40, 0, 255, 89, 38, 0, 255, 85, 41, 2, 255, 85, 39, 2, 255, 85, 39, 2, 255, 85, 42, 3, 255, 89, 43, 1, 255, 92, 41, 2, 255, 94, 42, 2, 255, 90, 39, 0, 255, 88, 39, 1, 255, 87, 38, 0, 255, 90, 37, 3, 255, 93, 40, 7, 255, 88, 34, 2, 255, 90, 37, 4, 255, 92, 40, 2, 255, 93, 40, 2, 255, 95, 42, 3, 255, 92, 37, 1, 255, 92, 38, 3, 255, 88, 35, 4, 255, 88, 37, 4, 255, 93, 40, 3, 255, 101, 43, 4, 255, 101, 40, 3, 255, 90, 37, 4, 255, 91, 38, 1, 255, 102, 41, 2, 255, 103, 40, 4, 255, 91, 38, 3, 255, 93, 40, 5, 255, 86, 37, 1, 255, 91, 40, 2, 255, 97, 38, 1, 255, 96, 39, 2, 255, 95, 42, 5, 255, 92, 37, 2, 255, 97, 41, 6, 255, 96, 44, 7, 255, 86, 40, 1, 255, 83, 42, 1, 255, 84, 41, 1, 255, 86, 40, 2, 255, 77, 38, 2, 255, 74, 39, 4, 255, 79, 40, 5, 255, 90, 46, 4, 255, 122, 59, 10, 255, 140, 58, 4, 255, 143, 60, 0, 255, 139, 60, 2, 255, 131, 58, 5, 255, 127, 56, 4, 255, 131, 54, 3, 255, 134, 53, 3, 255, 138, 56, 6, 255, 144, 62, 7, 255, 148, 61, 3, 255, 150, 57, 1, 255, 145, 61, 4, 255, 139, 59, 6, 255, 134, 54, 4, 255, 130, 51, 8, 255, 125, 57, 1, 255, 136, 64, 6, 255, 152, 67, 5, 255, 141, 66, 0, 255, 141, 66, 6, 255, 143, 63, 5, 255, 135, 62, 8, 255, 130, 57, 16, 255, 141, 61, 5, 255, 138, 61, 4, 255, 126, 59, 4, 255, 123, 57, 13, 255, 133, 60, 6, 255, 147, 71, 5, 255, 155, 70, 14, 255, 157, 71, 6, 255, 158, 71, 13, 255, 158, 76, 10, 255, 154, 75, 6, 255, 160, 78, 10, 255, 160, 75, 14, 255, 162, 79, 13, 255, 161, 77, 5, 255, 156, 74, 6, 255, 158, 82, 20, 255, 165, 80, 19, 255, 159, 78, 11, 255, 153, 82, 12, 255, 156, 83, 21, 255, 154, 79, 17, 255, 158, 79, 15, 255, 157, 76, 12, 255, 160, 81, 15, 255, 151, 80, 17, 255, 144, 75, 27, 255, 155, 84, 18, 255, 161, 88, 19, 255, 151, 85, 17, 255, 143, 87, 14, 255, 141, 86, 21, 255, 141, 82, 23, 255, 129, 77, 18, 255, 108, 80, 17, 255, 108, 82, 20, 255, 97, 73, 25, 255, 91, 78, 15, 255, 78, 77, 17, 255, 74, 77, 18, 255, 76, 78, 19, 255, 78, 74, 38, 255, 79, 75, 27, 255, 83, 81, 14, 255, 89, 84, 17, 255, 89, 82, 15, 255, 88, 80, 19, 255, 89, 81, 29, 255, 90, 83, 23, 255, 97, 85, 13, 255, 96, 84, 7, 255, 96, 82, 16, 255, 97, 85, 24, 255, 100, 88, 19, 255, 100, 84, 20, 255, 101, 82, 27, 255, 96, 82, 26, 255, 101, 87, 16, 255, 101, 80, 28, 255, 93, 78, 26, 255, 96, 83, 17, 255, 104, 85, 19, 255, 104, 83, 22, 255, 104, 86, 14, 255, 105, 85, 14, 255, 103, 82, 13, 255, 101, 80, 18, 255, 99, 81, 16, 255, 101, 79, 22, 255, 96, 77, 17, 255, 97, 78, 19, 255, 98, 80, 16, 255, 95, 75, 16, 255, 101, 77, 12, 255, 108, 78, 9, 255, 104, 73, 17, 255, 101, 74, 14, 255, 105, 75, 8, 255, 102, 71, 8, 255, 105, 74, 10, 255, 109, 71, 12, 255, 109, 71, 10, 255, 107, 69, 11, 255, 108, 71, 13, 255, 107, 73, 10, 255, 103, 70, 10, 255, 101, 75, 3, 255, 100, 67, 6, 255, 98, 66, 9, 255, 99, 66, 11, 255, 100, 64, 4, 255, 104, 64, 10, 255, 105, 65, 8, 255, 99, 62, 9, 255, 100, 64, 9, 255, 107, 64, 5, 255, 116, 66, 7, 255, 116, 61, 5, 255, 119, 65, 7, 255, 112, 61, 1, 255, 106, 60, 6, 255, 109, 62, 4, 255, 111, 61, 5, 255, 110, 59, 5, 255, 108, 57, 2, 255, 111, 61, 6, 255, 114, 62, 5, 255, 112, 60, 1, 255, 114, 59, 2, 255, 109, 56, 5, 255, 99, 51, 3, 255, 100, 56, 5, 255, 99, 54, 1, 255, 103, 53, 5, 255, 100, 51, 12, 255, 90, 51, 2, 255, 91, 50, 1, 255, 102, 49, 8, 255, 104, 55, 7, 255, 107, 62, 4, 255, 112, 64, 6, 255, 115, 64, 7, 255, 112, 59, 4, 255, 110, 59, 7, 255, 107, 58, 5, 255, 107, 58, 6, 255, 113, 63, 4, 255, 115, 66, 0, 255, 124, 74, 6, 255, 120, 67, 9, 255, 111, 54, 9, 255, 110, 54, 3, 255, 103, 50, 5, 255, 103, 53, 1, 255, 95, 47, 2, 255, 104, 53, 6, 255, 110, 56, 0, 255, 119, 62, 4, 255, 109, 53, 3, 255, 113, 60, 3, 255, 112, 57, 6, 255, 109, 53, 7, 255, 114, 57, 1, 255, 115, 59, 4, 255, 111, 53, 3, 255, 119, 53, 3, 255, 120, 59, 4, 255, 121, 62, 2, 255, 127, 61, 1, 255, 122, 60, 1, 255, 124, 58, 3, 255, 125, 52, 1, 255, 124, 56, 3, 255, 120, 55, 3, 255, 115, 49, 4, 255, 109, 43, 3, 255, 108, 46, 3, 255, 105, 45, 3, 255, 101, 39, 1, 255, 109, 41, 1, 255, 118, 48, 5, 255, 113, 49, 7, 255, 102, 40, 2, 255, 104, 37, 3, 255, 108, 41, 6, 255, 96, 34, 2, 255, 89, 31, 1, 255, 98, 34, 4, 255, 102, 36, 5, 255, 96, 34, 2, 255, 95, 29, 3, 255, 95, 28, 4, 255, 93, 29, 1, 255, 100, 27, 2, 255, 106, 27, 3, 255, 119, 33, 7, 255, 124, 32, 4, 255, 110, 34, 2, 255, 110, 32, 2, 255, 117, 28, 3, 255, 115, 28, 4, 255, 106, 25, 2, 255, 110, 28, 2, 255, 118, 30, 5, 255, 115, 26, 2, 255, 114, 27, 2, 255, 113, 29, 1, 255, 115, 31, 2, 255, 117, 32, 3, 255, 115, 28, 0, 255, 117, 32, 2, 255, 115, 32, 4, 255, 114, 29, 1, 255, 112, 29, 1, 255, 107, 28, 2, 255, 104, 28, 5, 255, 102, 25, 1, 255, 110, 26, 2, 255, 108, 26, 3, 255, 101, 23, 3, 255, 91, 19, 0, 255, 90, 23, 1, 255, 95, 20, 1, 255, 92, 19, 0, 255, 88, 24, 2, 255, 86, 25, 4, 255, 71, 13, 0, 255, 58, 14, 5, 255, 53, 16, 8, 255, 70, 15, 3, 255, 73, 24, 0, 255, 63, 21, 1, 255, 57, 18, 2, 255, 62, 18, 3, 255, 61, 15, 2, 255, 54, 16, 1, 255, 63, 19, 2, 255, 70, 20, 2, 255, 68, 18, 4, 255, 65, 17, 4, 255, 69, 21, 3, 255, 69, 21, 1, 255, 71, 19, 2, 255, 70, 19, 6, 255, 69, 16, 2, 255, 71, 20, 1, 255, 73, 20, 3, 255, 87, 24, 1, 255, 109, 36, 1, 255, 121, 45, 4, 255, 120, 43, 2, 255, 122, 45, 3, 255, 126, 49, 1, 255, 124, 45, 1, 255, 126, 51, 3, 255, 125, 52, 3, 255, 124, 50, 1, 255, 130, 50, 2, 255, 131, 49, 0, 255, 133, 51, 2, 255, 132, 51, 1, 255, 128, 51, 3, 255, 129, 48, 1, 255, 129, 49, 2, 255, 37, 69, 16, 255, 48, 69, 8, 255, 49, 61, 14, 255, 39, 50, 16, 255, 31, 41, 12, 255, 32, 39, 7, 255, 31, 33, 5, 255, 26, 26, 5, 255, 24, 22, 4, 255, 24, 20, 8, 255, 21, 15, 4, 255, 22, 14, 3, 255, 21, 15, 4, 255, 17, 14, 3, 255, 20, 14, 2, 255, 23, 11, 2, 255, 24, 14, 5, 255, 18, 13, 3, 255, 24, 13, 2, 255, 26, 17, 6, 255, 29, 15, 6, 255, 27, 13, 2, 255, 25, 16, 0, 255, 25, 15, 0, 255, 28, 18, 3, 255, 32, 19, 2, 255, 36, 19, 3, 255, 32, 19, 3, 255, 31, 15, 2, 255, 36, 16, 4, 255, 41, 18, 3, 255, 37, 21, 1, 255, 38, 22, 1, 255, 33, 17, 3, 255, 30, 17, 2, 255, 37, 21, 5, 255, 29, 20, 4, 255, 36, 24, 5, 255, 68, 43, 9, 255, 60, 43, 18, 255, 58, 48, 24, 255, 57, 44, 10, 255, 50, 38, 6, 255, 57, 38, 8, 255, 53, 33, 4, 255, 47, 27, 1, 255, 63, 37, 10, 255, 73, 53, 26, 255, 79, 56, 35, 255, 77, 59, 32, 255, 83, 65, 36, 255, 92, 62, 43, 255, 80, 65, 38, 255, 79, 64, 33, 255, 91, 64, 28, 255, 90, 63, 9, 255, 67, 47, 10, 255, 58, 47, 22, 255, 65, 46, 9, 255, 63, 47, 7, 255, 72, 57, 26, 255, 76, 65, 19, 255, 65, 58, 18, 255, 73, 48, 4, 255, 84, 49, 4, 255, 82, 44, 1, 255, 81, 41, 2, 255, 82, 41, 3, 255, 82, 39, 2, 255, 86, 41, 5, 255, 90, 41, 4, 255, 92, 41, 2, 255, 100, 45, 5, 255, 99, 43, 4, 255, 96, 42, 0, 255, 99, 50, 5, 255, 92, 48, 2, 255, 94, 49, 5, 255, 97, 47, 4, 255, 100, 45, 2, 255, 102, 47, 3, 255, 102, 50, 6, 255, 99, 51, 5, 255, 95, 51, 1, 255, 101, 46, 2, 255, 101, 45, 3, 255, 97, 51, 4, 255, 97, 52, 5, 255, 93, 48, 1, 255, 92, 45, 1, 255, 97, 43, 3, 255, 93, 39, 2, 255, 95, 40, 3, 255, 91, 40, 1, 255, 95, 42, 5, 255, 96, 40, 3, 255, 90, 46, 1, 255, 90, 40, 1, 255, 93, 39, 1, 255, 95, 41, 2, 255, 95, 42, 2, 255, 97, 45, 3, 255, 96, 43, 7, 255, 93, 43, 2, 255, 96, 44, 0, 255, 95, 42, 3, 255, 97, 43, 4, 255, 99, 41, 1, 255, 103, 40, 3, 255, 104, 40, 3, 255, 97, 41, 2, 255, 96, 42, 6, 255, 96, 39, 7, 255, 95, 40, 2, 255, 90, 43, 3, 255, 92, 39, 3, 255, 88, 40, 2, 255, 92, 40, 2, 255, 103, 42, 6, 255, 98, 43, 4, 255, 92, 42, 3, 255, 95, 41, 4, 255, 92, 37, 1, 255, 91, 37, 1, 255, 89, 39, 2, 255, 87, 40, 1, 255, 92, 44, 5, 255, 95, 42, 4, 255, 93, 43, 3, 255, 87, 43, 0, 255, 98, 49, 7, 255, 103, 49, 7, 255, 105, 45, 2, 255, 103, 44, 1, 255, 106, 51, 3, 255, 120, 58, 8, 255, 129, 56, 2, 255, 142, 59, 3, 255, 143, 61, 7, 255, 142, 63, 9, 255, 141, 57, 3, 255, 148, 63, 4, 255, 143, 64, 0, 255, 142, 62, 4, 255, 142, 64, 4, 255, 138, 57, 11, 255, 129, 53, 9, 255, 137, 54, 1, 255, 135, 58, 10, 255, 139, 65, 8, 255, 152, 67, 7, 255, 150, 65, 3, 255, 153, 70, 1, 255, 146, 60, 12, 255, 132, 57, 12, 255, 135, 67, 8, 255, 136, 64, 3, 255, 136, 61, 7, 255, 132, 62, 8, 255, 131, 61, 11, 255, 140, 59, 10, 255, 151, 70, 15, 255, 156, 67, 11, 255, 157, 71, 10, 255, 153, 76, 15, 255, 158, 72, 8, 255, 162, 74, 19, 255, 163, 78, 7, 255, 163, 81, 1, 255, 157, 79, 15, 255, 158, 78, 15, 255, 155, 74, 7, 255, 160, 77, 15, 255, 158, 76, 17, 255, 149, 77, 8, 255, 146, 80, 12, 255, 141, 75, 15, 255, 146, 74, 13, 255, 152, 76, 25, 255, 147, 80, 19, 255, 153, 84, 11, 255, 149, 79, 16, 255, 148, 80, 24, 255, 149, 80, 17, 255, 139, 75, 20, 255, 129, 80, 21, 255, 117, 75, 35, 255, 117, 78, 27, 255, 116, 79, 20, 255, 87, 71, 20, 255, 69, 75, 27, 255, 86, 78, 20, 255, 83, 76, 14, 255, 79, 74, 28, 255, 76, 74, 31, 255, 81, 78, 18, 255, 85, 75, 24, 255, 90, 79, 25, 255, 90, 79, 25, 255, 93, 80, 34, 255, 97, 84, 22, 255, 99, 86, 15, 255, 96, 82, 24, 255, 95, 82, 33, 255, 92, 83, 20, 255, 94, 89, 19, 255, 98, 88, 19, 255, 95, 81, 29, 255, 94, 85, 14, 255, 94, 84, 27, 255, 93, 82, 30, 255, 96, 81, 15, 255, 99, 87, 14, 255, 99, 80, 28, 255, 103, 81, 24, 255, 104, 86, 29, 255, 99, 82, 17, 255, 106, 83, 23, 255, 105, 84, 18, 255, 105, 83, 22, 255, 104, 82, 31, 255, 103, 82, 21, 255, 102, 80, 18, 255, 104, 81, 19, 255, 102, 74, 24, 255, 103, 80, 16, 255, 100, 78, 23, 255, 96, 77, 12, 255, 100, 77, 12, 255, 108, 78, 13, 255, 108, 78, 7, 255, 101, 74, 17, 255, 99, 72, 15, 255, 107, 75, 10, 255, 107, 77, 12, 255, 102, 73, 8, 255, 107, 71, 14, 255, 107, 70, 6, 255, 105, 73, 9, 255, 103, 71, 12, 255, 105, 72, 5, 255, 107, 69, 13, 255, 108, 68, 5, 255, 106, 65, 10, 255, 102, 65, 7, 255, 100, 66, 3, 255, 100, 65, 3, 255, 100, 61, 7, 255, 100, 61, 8, 255, 100, 62, 9, 255, 105, 64, 12, 255, 103, 64, 4, 255, 102, 61, 1, 255, 109, 64, 8, 255, 113, 64, 8, 255, 113, 61, 4, 255, 108, 58, 6, 255, 117, 65, 5, 255, 118, 62, 5, 255, 118, 62, 7, 255, 115, 62, 3, 255, 112, 58, 0, 255, 108, 59, 1, 255, 108, 57, 3, 255, 102, 51, 2, 255, 99, 52, 4, 255, 100, 57, 5, 255, 104, 55, 3, 255, 115, 56, 5, 255, 109, 52, 0, 255, 95, 51, 3, 255, 99, 52, 7, 255, 102, 50, 7, 255, 91, 43, 3, 255, 81, 42, 3, 255, 88, 50, 4, 255, 86, 45, 0, 255, 89, 47, 2, 255, 92, 49, 5, 255, 99, 51, 8, 255, 101, 50, 9, 255, 96, 52, 4, 255, 102, 61, 3, 255, 112, 60, 6, 255, 123, 63, 3, 255, 121, 63, 0, 255, 114, 61, 4, 255, 102, 53, 2, 255, 100, 52, 6, 255, 108, 59, 3, 255, 108, 56, 6, 255, 102, 52, 5, 255, 101, 50, 2, 255, 110, 52, 1, 255, 103, 50, 3, 255, 105, 56, 2, 255, 109, 53, 4, 255, 116, 54, 6, 255, 122, 59, 4, 255, 120, 59, 4, 255, 114, 54, 3, 255, 117, 51, 8, 255, 117, 54, 4, 255, 116, 56, 0, 255, 113, 55, 0, 255, 121, 55, 4, 255, 112, 49, 7, 255, 104, 45, 6, 255, 105, 44, 3, 255, 105, 45, 2, 255, 104, 46, 3, 255, 105, 45, 4, 255, 103, 43, 0, 255, 108, 48, 1, 255, 113, 50, 2, 255, 120, 50, 5, 255, 117, 47, 4, 255, 113, 46, 5, 255, 107, 41, 3, 255, 103, 36, 3, 255, 105, 41, 0, 255, 103, 39, 1, 255, 101, 35, 3, 255, 96, 29, 4, 255, 92, 28, 8, 255, 82, 25, 5, 255, 70, 22, 2, 255, 71, 24, 1, 255, 83, 28, 4, 255, 79, 23, 2, 255, 68, 22, 0, 255, 77, 22, 3, 255, 96, 27, 4, 255, 98, 27, 3, 255, 101, 26, 7, 255, 108, 25, 1, 255, 116, 32, 1, 255, 113, 31, 5, 255, 115, 29, 6, 255, 118, 31, 2, 255, 114, 29, 0, 255, 113, 31, 2, 255, 113, 32, 3, 255, 108, 29, 1, 255, 110, 33, 3, 255, 106, 26, 0, 255, 113, 28, 4, 255, 109, 26, 2, 255, 108, 25, 0, 255, 110, 27, 1, 255, 108, 30, 3, 255, 102, 26, 1, 255, 99, 27, 1, 255, 105, 27, 4, 255, 102, 24, 3, 255, 96, 22, 2, 255, 92, 21, 4, 255, 90, 23, 4, 255, 92, 21, 2, 255, 89, 22, 1, 255, 83, 25, 3, 255, 78, 21, 1, 255, 73, 20, 5, 255, 58, 16, 4, 255, 42, 10, 0, 255, 60, 17, 3, 255, 62, 13, 4, 255, 57, 17, 3, 255, 60, 16, 4, 255, 62, 14, 4, 255, 62, 18, 3, 255, 60, 19, 2, 255, 64, 20, 2, 255, 67, 18, 1, 255, 66, 17, 2, 255, 64, 15, 2, 255, 69, 18, 3, 255, 70, 19, 3, 255, 65, 18, 4, 255, 64, 20, 5, 255, 66, 18, 4, 255, 64, 18, 3, 255, 68, 17, 4, 255, 91, 31, 3, 255, 112, 43, 5, 255, 121, 46, 3, 255, 125, 47, 5, 255, 126, 48, 7, 255, 124, 48, 1, 255, 123, 46, 2, 255, 126, 48, 1, 255, 128, 52, 2, 255, 126, 49, 1, 255, 129, 50, 2, 255, 131, 51, 3, 255, 130, 53, 4, 255, 126, 52, 2, 255, 128, 51, 3, 255, 127, 50, 2, 255, 127, 52, 3, 255, 41, 66, 18, 255, 42, 55, 17, 255, 45, 52, 7, 255, 36, 41, 4, 255, 29, 32, 13, 255, 28, 28, 8, 255, 22, 24, 1, 255, 23, 25, 5, 255, 22, 19, 4, 255, 25, 17, 7, 255, 22, 12, 4, 255, 21, 11, 4, 255, 22, 12, 4, 255, 23, 13, 3, 255, 19, 16, 3, 255, 17, 15, 2, 255, 19, 13, 3, 255, 16, 10, 2, 255, 22, 17, 5, 255, 20, 14, 4, 255, 28, 15, 6, 255, 23, 13, 3, 255, 28, 15, 4, 255, 47, 19, 4, 255, 44, 18, 4, 255, 30, 14, 4, 255, 26, 13, 3, 255, 26, 15, 2, 255, 31, 17, 2, 255, 41, 17, 4, 255, 39, 19, 5, 255, 35, 19, 5, 255, 34, 19, 8, 255, 31, 18, 3, 255, 31, 20, 2, 255, 31, 19, 5, 255, 35, 14, 3, 255, 59, 28, 8, 255, 61, 37, 13, 255, 58, 44, 25, 255, 53, 50, 19, 255, 59, 48, 11, 255, 67, 40, 12, 255, 69, 43, 8, 255, 59, 40, 1, 255, 45, 28, 0, 255, 61, 34, 10, 255, 68, 48, 23, 255, 69, 52, 24, 255, 71, 57, 23, 255, 80, 63, 34, 255, 84, 66, 46, 255, 82, 63, 42, 255, 96, 66, 33, 255, 85, 62, 25, 255, 73, 56, 19, 255, 66, 49, 18, 255, 77, 48, 19, 255, 73, 46, 9, 255, 65, 48, 13, 255, 78, 60, 37, 255, 87, 65, 25, 255, 76, 58, 20, 255, 76, 52, 5, 255, 78, 52, 3, 255, 77, 46, 1, 255, 79, 41, 0, 255, 79, 40, 1, 255, 77, 39, 0, 255, 76, 40, 0, 255, 84, 39, 0, 255, 97, 47, 6, 255, 89, 42, 1, 255, 89, 42, 0, 255, 96, 48, 2, 255, 98, 50, 4, 255, 99, 50, 2, 255, 96, 51, 1, 255, 100, 52, 1, 255, 103, 53, 1, 255, 107, 55, 3, 255, 105, 52, 1, 255, 106, 55, 2, 255, 101, 58, 2, 255, 106, 55, 2, 255, 109, 55, 3, 255, 108, 59, 5, 255, 110, 59, 5, 255, 110, 57, 1, 255, 108, 55, 1, 255, 108, 56, 6, 255, 107, 53, 6, 255, 103, 49, 4, 255, 94, 45, 1, 255, 98, 49, 4, 255, 101, 52, 5, 255, 86, 47, 1, 255, 94, 47, 2, 255, 101, 45, 5, 255, 100, 41, 1, 255, 101, 44, 5, 255, 99, 45, 3, 255, 97, 46, 3, 255, 97, 46, 4, 255, 98, 43, 3, 255, 97, 43, 4, 255, 99, 45, 4, 255, 101, 42, 3, 255, 104, 43, 5, 255, 96, 41, 2, 255, 99, 44, 0, 255, 100, 44, 2, 255, 98, 41, 1, 255, 101, 41, 1, 255, 101, 40, 2, 255, 98, 39, 3, 255, 100, 42, 4, 255, 101, 40, 4, 255, 97, 36, 0, 255, 98, 39, 2, 255, 93, 40, 2, 255, 90, 39, 1, 255, 95, 42, 4, 255, 94, 40, 3, 255, 95, 43, 5, 255, 92, 41, 3, 255, 94, 42, 4, 255, 94, 39, 3, 255, 91, 42, 4, 255, 92, 43, 2, 255, 98, 46, 2, 255, 92, 47, 2, 255, 89, 46, 4, 255, 86, 42, 4, 255, 84, 39, 6, 255, 94, 46, 5, 255, 116, 56, 4, 255, 127, 50, 1, 255, 128, 54, 6, 255, 130, 58, 7, 255, 141, 57, 4, 255, 143, 63, 3, 255, 143, 66, 3, 255, 146, 63, 7, 255, 145, 63, 3, 255, 142, 60, 7, 255, 128, 60, 1, 255, 126, 60, 7, 255, 142, 66, 10, 255, 149, 67, 2, 255, 146, 63, 4, 255, 149, 67, 7, 255, 151, 72, 8, 255, 145, 65, 10, 255, 139, 63, 10, 255, 137, 66, 3, 255, 140, 63, 7, 255, 149, 65, 10, 255, 150, 67, 8, 255, 153, 70, 15, 255, 133, 61, 17, 255, 118, 56, 15, 255, 144, 74, 11, 255, 155, 73, 9, 255, 153, 74, 12, 255, 153, 77, 0, 255, 153, 76, 8, 255, 155, 75, 9, 255, 157, 74, 8, 255, 153, 71, 15, 255, 155, 71, 24, 255, 156, 76, 18, 255, 155, 81, 10, 255, 162, 78, 15, 255, 152, 74, 13, 255, 139, 74, 9, 255, 141, 75, 21, 255, 147, 76, 18, 255, 153, 80, 18, 255, 155, 80, 21, 255, 136, 73, 27, 255, 132, 74, 22, 255, 127, 75, 13, 255, 99, 66, 24, 255, 85, 68, 21, 255, 89, 71, 20, 255, 97, 71, 26, 255, 91, 70, 27, 255, 86, 78, 20, 255, 81, 74, 21, 255, 74, 72, 24, 255, 79, 74, 31, 255, 88, 78, 27, 255, 85, 80, 18, 255, 83, 75, 32, 255, 87, 77, 33, 255, 92, 81, 28, 255, 94, 83, 27, 255, 93, 82, 29, 255, 91, 78, 31, 255, 96, 83, 32, 255, 96, 82, 29, 255, 97, 83, 31, 255, 96, 84, 22, 255, 94, 86, 19, 255, 95, 86, 17, 255, 102, 86, 29, 255, 102, 83, 26, 255, 101, 83, 24, 255, 99, 84, 30, 255, 97, 87, 21, 255, 98, 84, 13, 255, 99, 88, 12, 255, 103, 88, 14, 255, 105, 84, 18, 255, 104, 84, 21, 255, 107, 84, 31, 255, 111, 85, 22, 255, 110, 86, 20, 255, 109, 84, 17, 255, 107, 86, 12, 255, 107, 84, 23, 255, 105, 81, 19, 255, 107, 80, 15, 255, 105, 82, 23, 255, 108, 82, 11, 255, 108, 75, 19, 255, 109, 78, 16, 255, 108, 80, 18, 255, 105, 77, 20, 255, 100, 72, 10, 255, 101, 74, 17, 255, 104, 76, 11, 255, 106, 72, 5, 255, 108, 76, 17, 255, 102, 73, 10, 255, 106, 74, 10, 255, 107, 72, 11, 255, 106, 69, 12, 255, 107, 69, 8, 255, 107, 68, 13, 255, 105, 66, 14, 255, 106, 69, 9, 255, 110, 69, 7, 255, 106, 65, 10, 255, 100, 62, 6, 255, 101, 62, 7, 255, 102, 64, 4, 255, 99, 62, 7, 255, 101, 60, 8, 255, 107, 61, 9, 255, 109, 64, 5, 255, 106, 62, 2, 255, 106, 58, 3, 255, 112, 62, 9, 255, 113, 62, 9, 255, 112, 58, 0, 255, 116, 63, 0, 255, 119, 63, 4, 255, 120, 59, 7, 255, 116, 56, 4, 255, 112, 58, 6, 255, 107, 59, 6, 255, 99, 55, 3, 255, 97, 54, 6, 255, 103, 56, 7, 255, 108, 55, 3, 255, 109, 56, 4, 255, 105, 56, 6, 255, 100, 52, 2, 255, 97, 49, 2, 255, 98, 49, 7, 255, 95, 45, 5, 255, 92, 47, 4, 255, 83, 43, 3, 255, 83, 43, 7, 255, 77, 39, 5, 255, 77, 37, 5, 255, 73, 34, 2, 255, 74, 38, 3, 255, 75, 39, 3, 255, 78, 37, 0, 255, 86, 43, 4, 255, 87, 40, 6, 255, 97, 44, 7, 255, 104, 48, 5, 255, 98, 44, 4, 255, 95, 48, 1, 255, 98, 46, 3, 255, 109, 56, 6, 255, 104, 51, 1, 255, 97, 47, 1, 255, 96, 47, 5, 255, 99, 50, 2, 255, 101, 48, 4, 255, 100, 49, 1, 255, 100, 48, 1, 255, 108, 51, 2, 255, 118, 55, 1, 255, 120, 55, 3, 255, 118, 52, 2, 255, 109, 46, 4, 255, 107, 48, 5, 255, 109, 45, 4, 255, 103, 43, 1, 255, 111, 47, 7, 255, 103, 41, 4, 255, 93, 40, 1, 255, 98, 39, 0, 255, 103, 41, 2, 255, 103, 44, 2, 255, 105, 45, 4, 255, 107, 40, 3, 255, 124, 50, 7, 255, 131, 55, 3, 255, 128, 54, 6, 255, 116, 45, 2, 255, 106, 41, 0, 255, 106, 39, 2, 255, 107, 35, 3, 255, 100, 37, 3, 255, 96, 33, 1, 255, 91, 29, 2, 255, 88, 31, 8, 255, 74, 23, 2, 255, 72, 21, 1, 255, 71, 25, 8, 255, 76, 30, 2, 255, 87, 27, 3, 255, 92, 28, 4, 255, 88, 31, 1, 255, 87, 24, 4, 255, 100, 26, 1, 255, 107, 27, 3, 255, 106, 30, 4, 255, 108, 30, 4, 255, 118, 33, 3, 255, 117, 32, 0, 255, 119, 33, 5, 255, 123, 34, 4, 255, 123, 35, 2, 255, 119, 30, 1, 255, 118, 30, 2, 255, 116, 30, 3, 255, 115, 32, 5, 255, 110, 28, 2, 255, 110, 24, 4, 255, 108, 25, 4, 255, 107, 24, 0, 255, 109, 27, 0, 255, 105, 26, 0, 255, 105, 29, 4, 255, 95, 25, 2, 255, 96, 25, 3, 255, 98, 24, 3, 255, 96, 25, 8, 255, 87, 21, 5, 255, 83, 18, 1, 255, 90, 20, 2, 255, 91, 22, 4, 255, 87, 24, 6, 255, 79, 17, 1, 255, 80, 19, 5, 255, 70, 18, 5, 255, 61, 19, 2, 255, 64, 23, 7, 255, 63, 19, 5, 255, 59, 19, 2, 255, 69, 20, 2, 255, 54, 18, 2, 255, 47, 18, 1, 255, 70, 18, 4, 255, 73, 18, 3, 255, 70, 18, 1, 255, 67, 19, 3, 255, 63, 16, 2, 255, 64, 18, 1, 255, 67, 18, 2, 255, 66, 18, 2, 255, 62, 17, 1, 255, 64, 16, 2, 255, 67, 18, 2, 255, 74, 19, 4, 255, 97, 33, 1, 255, 113, 43, 3, 255, 123, 49, 2, 255, 129, 50, 5, 255, 124, 43, 3, 255, 124, 46, 1, 255, 126, 48, 5, 255, 129, 49, 6, 255, 127, 48, 1, 255, 126, 47, 0, 255, 127, 49, 0, 255, 126, 48, 0, 255, 125, 49, 2, 255, 123, 51, 3, 255, 122, 50, 1, 255, 126, 50, 2, 255, 125, 48, 0, 255, 39, 57, 9, 255, 36, 43, 27, 255, 31, 35, 10, 255, 28, 31, 5, 255, 23, 23, 8, 255, 27, 22, 5, 255, 25, 22, 2, 255, 24, 20, 3, 255, 22, 15, 2, 255, 23, 14, 3, 255, 23, 14, 5, 255, 23, 13, 5, 255, 19, 11, 1, 255, 25, 15, 5, 255, 31, 16, 7, 255, 27, 12, 4, 255, 24, 11, 4, 255, 21, 11, 4, 255, 18, 11, 2, 255, 18, 10, 0, 255, 25, 13, 1, 255, 22, 17, 6, 255, 26, 20, 6, 255, 39, 18, 2, 255, 32, 18, 2, 255, 19, 14, 3, 255, 26, 15, 3, 255, 26, 14, 3, 255, 29, 18, 4, 255, 26, 17, 2, 255, 34, 17, 3, 255, 41, 21, 8, 255, 43, 17, 8, 255, 38, 15, 3, 255, 39, 21, 9, 255, 34, 22, 7, 255, 50, 23, 3, 255, 58, 22, 3, 255, 48, 37, 5, 255, 54, 53, 19, 255, 59, 53, 25, 255, 55, 49, 18, 255, 57, 39, 10, 255, 72, 41, 10, 255, 62, 36, 1, 255, 59, 31, 0, 255, 63, 30, 7, 255, 71, 50, 16, 255, 76, 58, 18, 255, 73, 56, 25, 255, 76, 60, 36, 255, 68, 60, 52, 255, 80, 62, 43, 255, 82, 64, 28, 255, 71, 60, 28, 255, 72, 55, 28, 255, 68, 52, 21, 255, 88, 51, 10, 255, 86, 49, 9, 255, 79, 58, 15, 255, 90, 69, 20, 255, 93, 65, 15, 255, 85, 60, 14, 255, 79, 55, 3, 255, 79, 51, 8, 255, 82, 46, 5, 255, 86, 41, 3, 255, 85, 39, 1, 255, 84, 42, 1, 255, 83, 43, 1, 255, 81, 44, 0, 255, 86, 48, 4, 255, 85, 42, 1, 255, 92, 46, 5, 255, 93, 48, 4, 255, 89, 47, 0, 255, 92, 50, 0, 255, 98, 50, 1, 255, 100, 53, 2, 255, 106, 57, 5, 255, 108, 56, 3, 255, 107, 55, 2, 255, 107, 55, 2, 255, 106, 57, 3, 255, 108, 56, 3, 255, 106, 53, 0, 255, 105, 55, 0, 255, 107, 60, 2, 255, 109, 62, 1, 255, 111, 60, 1, 255, 116, 61, 1, 255, 119, 57, 1, 255, 115, 51, 0, 255, 111, 53, 0, 255, 110, 59, 1, 255, 108, 61, 1, 255, 108, 59, 3, 255, 110, 55, 3, 255, 109, 47, 1, 255, 106, 45, 1, 255, 104, 50, 6, 255, 98, 48, 3, 255, 103, 50, 1, 255, 107, 48, 5, 255, 100, 43, 4, 255, 100, 47, 3, 255, 95, 42, 4, 255, 93, 41, 3, 255, 100, 49, 1, 255, 98, 45, 3, 255, 97, 40, 5, 255, 98, 42, 4, 255, 100, 46, 2, 255, 101, 47, 1, 255, 105, 48, 3, 255, 102, 43, 3, 255, 96, 37, 0, 255, 103, 41, 4, 255, 104, 41, 6, 255, 97, 40, 3, 255, 96, 43, 5, 255, 95, 42, 3, 255, 99, 43, 4, 255, 99, 41, 3, 255, 97, 42, 3, 255, 96, 43, 4, 255, 95, 43, 3, 255, 97, 42, 3, 255, 97, 41, 5, 255, 93, 43, 3, 255, 97, 42, 1, 255, 98, 44, 0, 255, 101, 45, 3, 255, 99, 47, 5, 255, 94, 49, 8, 255, 93, 48, 2, 255, 107, 55, 2, 255, 112, 52, 8, 255, 97, 47, 4, 255, 105, 49, 4, 255, 124, 50, 3, 255, 118, 56, 7, 255, 132, 57, 7, 255, 145, 58, 6, 255, 146, 62, 9, 255, 150, 65, 6, 255, 152, 69, 1, 255, 147, 68, 6, 255, 149, 65, 7, 255, 149, 64, 10, 255, 146, 65, 2, 255, 153, 65, 7, 255, 153, 66, 10, 255, 147, 69, 0, 255, 146, 68, 10, 255, 147, 66, 12, 255, 149, 65, 12, 255, 155, 66, 8, 255, 152, 67, 3, 255, 149, 70, 9, 255, 146, 72, 10, 255, 142, 69, 4, 255, 147, 72, 7, 255, 151, 72, 13, 255, 149, 73, 8, 255, 151, 73, 9, 255, 152, 77, 15, 255, 153, 76, 12, 255, 156, 76, 12, 255, 151, 76, 10, 255, 155, 76, 9, 255, 161, 77, 11, 255, 153, 75, 7, 255, 136, 71, 22, 255, 135, 69, 20, 255, 137, 77, 16, 255, 147, 72, 22, 255, 113, 71, 21, 255, 91, 64, 23, 255, 99, 70, 16, 255, 87, 62, 15, 255, 91, 63, 22, 255, 99, 72, 15, 255, 90, 67, 39, 255, 81, 70, 23, 255, 71, 73, 29, 255, 74, 74, 19, 255, 86, 71, 15, 255, 77, 75, 33, 255, 79, 77, 26, 255, 88, 78, 28, 255, 91, 79, 25, 255, 92, 78, 19, 255, 94, 81, 23, 255, 94, 82, 23, 255, 91, 80, 20, 255, 92, 82, 32, 255, 92, 83, 31, 255, 96, 84, 22, 255, 96, 84, 11, 255, 101, 86, 25, 255, 103, 85, 24, 255, 104, 83, 32, 255, 103, 82, 28, 255, 104, 83, 22, 255, 104, 86, 15, 255, 105, 85, 25, 255, 101, 85, 22, 255, 104, 85, 26, 255, 106, 84, 33, 255, 107, 87, 17, 255, 106, 91, 21, 255, 97, 87, 18, 255, 102, 88, 19, 255, 105, 84, 21, 255, 102, 81, 20, 255, 106, 85, 21, 255, 109, 85, 16, 255, 111, 85, 20, 255, 109, 82, 17, 255, 107, 83, 9, 255, 108, 84, 17, 255, 109, 86, 7, 255, 109, 80, 17, 255, 107, 79, 23, 255, 107, 77, 18, 255, 110, 80, 17, 255, 110, 82, 17, 255, 103, 76, 15, 255, 104, 74, 15, 255, 106, 77, 14, 255, 100, 73, 16, 255, 105, 75, 14, 255, 108, 73, 8, 255, 107, 74, 12, 255, 101, 71, 9, 255, 104, 70, 10, 255, 104, 71, 9, 255, 110, 71, 13, 255, 110, 68, 8, 255, 107, 69, 7, 255, 104, 70, 11, 255, 100, 70, 6, 255, 107, 68, 10, 255, 105, 65, 10, 255, 104, 65, 2, 255, 107, 67, 10, 255, 106, 65, 8, 255, 102, 60, 9, 255, 109, 63, 8, 255, 112, 62, 5, 255, 110, 59, 2, 255, 112, 61, 5, 255, 110, 61, 6, 255, 112, 62, 9, 255, 106, 58, 5, 255, 104, 57, 4, 255, 108, 57, 0, 255, 114, 59, 7, 255, 110, 56, 7, 255, 108, 57, 5, 255, 109, 59, 6, 255, 111, 58, 6, 255, 107, 59, 3, 255, 102, 56, 3, 255, 112, 56, 9, 255, 111, 46, 3, 255, 108, 50, 3, 255, 102, 54, 2, 255, 102, 54, 7, 255, 94, 51, 3, 255, 95, 47, 4, 255, 86, 43, 2, 255, 83, 47, 4, 255, 93, 45, 6, 255, 87, 39, 2, 255, 83, 39, 3, 255, 77, 42, 6, 255, 65, 38, 3, 255, 69, 37, 4, 255, 70, 35, 3, 255, 67, 35, 1, 255, 68, 34, 1, 255, 72, 29, 1, 255, 67, 30, 2, 255, 59, 30, 2, 255, 72, 36, 7, 255, 98, 47, 5, 255, 98, 44, 5, 255, 90, 40, 3, 255, 96, 49, 6, 255, 103, 51, 4, 255, 98, 46, 0, 255, 97, 50, 2, 255, 100, 46, 4, 255, 100, 44, 1, 255, 96, 46, 2, 255, 104, 50, 3, 255, 113, 53, 2, 255, 113, 47, 4, 255, 112, 48, 3, 255, 100, 47, 2, 255, 95, 46, 5, 255, 96, 41, 5, 255, 100, 38, 4, 255, 100, 44, 4, 255, 100, 40, 0, 255, 98, 38, 6, 255, 102, 36, 5, 255, 104, 34, 1, 255, 106, 40, 4, 255, 107, 43, 3, 255, 114, 42, 4, 255, 119, 46, 5, 255, 114, 48, 1, 255, 119, 46, 5, 255, 115, 41, 6, 255, 109, 40, 5, 255, 101, 39, 5, 255, 92, 33, 1, 255, 80, 26, 4, 255, 81, 27, 5, 255, 79, 27, 4, 255, 74, 28, 2, 255, 73, 28, 0, 255, 79, 30, 4, 255, 86, 29, 7, 255, 82, 30, 1, 255, 85, 27, 1, 255, 106, 35, 8, 255, 110, 37, 2, 255, 99, 30, 8, 255, 91, 26, 1, 255, 98, 31, 2, 255, 104, 38, 0, 255, 102, 28, 4, 255, 111, 25, 7, 255, 120, 30, 1, 255, 118, 33, 2, 255, 117, 29, 1, 255, 128, 38, 6, 255, 125, 33, 2, 255, 124, 30, 3, 255, 126, 32, 4, 255, 121, 29, 2, 255, 118, 29, 3, 255, 113, 27, 3, 255, 112, 26, 2, 255, 111, 27, 1, 255, 112, 29, 3, 255, 110, 29, 5, 255, 101, 25, 3, 255, 96, 22, 1, 255, 95, 22, 2, 255, 93, 21, 3, 255, 88, 19, 3, 255, 85, 19, 3, 255, 87, 22, 6, 255, 89, 24, 3, 255, 89, 24, 1, 255, 84, 21, 1, 255, 84, 21, 4, 255, 83, 22, 5, 255, 76, 22, 2, 255, 71, 23, 2, 255, 85, 30, 6, 255, 91, 33, 4, 255, 80, 30, 3, 255, 84, 24, 6, 255, 64, 18, 1, 255, 53, 20, 0, 255, 67, 15, 1, 255, 70, 18, 2, 255, 68, 20, 2, 255, 67, 20, 3, 255, 66, 18, 3, 255, 69, 18, 4, 255, 69, 17, 1, 255, 70, 20, 2, 255, 61, 16, 5, 255, 64, 15, 3, 255, 69, 18, 0, 255, 75, 19, 1, 255, 93, 27, 1, 255, 111, 38, 2, 255, 121, 44, 0, 255, 125, 43, 1, 255, 123, 41, 3, 255, 124, 45, 5, 255, 118, 38, 1, 255, 122, 41, 3, 255, 122, 44, 1, 255, 124, 47, 3, 255, 128, 48, 3, 255, 127, 46, 1, 255, 125, 46, 1, 255, 123, 48, 2, 255, 121, 50, 2, 255, 126, 49, 3, 255, 127, 47, 1, 255, 26, 42, 3, 255, 29, 37, 10, 255, 26, 26, 2, 255, 24, 20, 2, 255, 22, 19, 4, 255, 21, 18, 5, 255, 22, 14, 5, 255, 23, 13, 0, 255, 24, 14, 2, 255, 21, 13, 2, 255, 19, 10, 2, 255, 21, 13, 3, 255, 22, 13, 3, 255, 28, 11, 4, 255, 30, 13, 6, 255, 22, 10, 2, 255, 17, 8, 1, 255, 18, 9, 1, 255, 18, 14, 3, 255, 15, 13, 3, 255, 27, 14, 5, 255, 27, 11, 5, 255, 21, 11, 2, 255, 24, 12, 0, 255, 25, 13, 4, 255, 26, 15, 2, 255, 40, 20, 1, 255, 40, 19, 5, 255, 32, 16, 6, 255, 31, 19, 4, 255, 38, 22, 2, 255, 50, 23, 1, 255, 39, 19, 0, 255, 34, 18, 3, 255, 30, 17, 3, 255, 38, 21, 4, 255, 34, 25, 7, 255, 34, 29, 7, 255, 45, 35, 18, 255, 52, 46, 27, 255, 54, 52, 29, 255, 67, 51, 26, 255, 67, 44, 14, 255, 60, 44, 9, 255, 58, 40, 3, 255, 62, 31, 4, 255, 60, 29, 6, 255, 61, 44, 13, 255, 70, 50, 24, 255, 70, 52, 35, 255, 74, 62, 35, 255, 72, 63, 44, 255, 82, 65, 42, 255, 69, 62, 34, 255, 61, 56, 34, 255, 71, 56, 30, 255, 69, 50, 29, 255, 83, 48, 14, 255, 103, 62, 1, 255, 104, 67, 20, 255, 104, 68, 35, 255, 90, 65, 12, 255, 82, 61, 11, 255, 83, 53, 11, 255, 76, 44, 4, 255, 81, 46, 6, 255, 82, 43, 3, 255, 84, 46, 4, 255, 85, 44, 1, 255, 87, 44, 1, 255, 85, 42, 0, 255, 85, 43, 2, 255, 87, 44, 2, 255, 91, 45, 4, 255, 94, 47, 4, 255, 98, 51, 5, 255, 96, 50, 2, 255, 102, 53, 4, 255, 103, 52, 3, 255, 107, 56, 6, 255, 106, 54, 4, 255, 104, 53, 3, 255, 103, 54, 2, 255, 101, 51, 0, 255, 105, 58, 4, 255, 109, 59, 6, 255, 105, 56, 2, 255, 104, 61, 2, 255, 108, 61, 2, 255, 111, 59, 1, 255, 114, 58, 1, 255, 117, 53, 2, 255, 115, 48, 1, 255, 119, 55, 6, 255, 114, 59, 5, 255, 110, 60, 2, 255, 111, 61, 2, 255, 113, 59, 2, 255, 112, 53, 0, 255, 114, 54, 0, 255, 118, 61, 5, 255, 118, 61, 3, 255, 118, 62, 1, 255, 111, 53, 2, 255, 110, 52, 2, 255, 119, 67, 4, 255, 106, 57, 0, 255, 98, 48, 1, 255, 104, 55, 4, 255, 98, 51, 6, 255, 91, 42, 7, 255, 96, 48, 3, 255, 100, 50, 1, 255, 99, 47, 0, 255, 100, 48, 4, 255, 94, 45, 2, 255, 103, 45, 5, 255, 101, 46, 6, 255, 93, 45, 4, 255, 93, 40, 0, 255, 94, 41, 0, 255, 98, 45, 3, 255, 107, 47, 7, 255, 101, 41, 2, 255, 95, 39, 1, 255, 98, 45, 3, 255, 98, 45, 3, 255, 101, 46, 5, 255, 96, 43, 3, 255, 98, 45, 5, 255, 104, 42, 6, 255, 102, 42, 4, 255, 99, 42, 4, 255, 94, 46, 4, 255, 99, 51, 7, 255, 95, 47, 1, 255, 96, 49, 2, 255, 101, 47, 10, 255, 89, 40, 6, 255, 89, 41, 3, 255, 98, 48, 5, 255, 74, 44, 7, 255, 80, 42, 9, 255, 94, 48, 5, 255, 96, 49, 11, 255, 105, 49, 2, 255, 118, 54, 9, 255, 124, 58, 12, 255, 134, 62, 5, 255, 137, 63, 5, 255, 137, 64, 9, 255, 143, 65, 5, 255, 143, 64, 4, 255, 149, 69, 8, 255, 154, 66, 10, 255, 153, 66, 13, 255, 153, 69, 14, 255, 154, 69, 4, 255, 149, 65, 16, 255, 141, 70, 10, 255, 156, 72, 7, 255, 159, 75, 6, 255, 153, 68, 10, 255, 160, 73, 13, 255, 163, 76, 7, 255, 160, 78, 8, 255, 159, 77, 9, 255, 156, 75, 10, 255, 151, 77, 12, 255, 157, 83, 8, 255, 159, 77, 10, 255, 146, 75, 15, 255, 115, 67, 12, 255, 88, 59, 17, 255, 73, 56, 13, 255, 105, 73, 17, 255, 143, 76, 25, 255, 102, 68, 17, 255, 73, 67, 5, 255, 77, 64, 21, 255, 81, 70, 15, 255, 84, 64, 21, 255, 94, 67, 26, 255, 96, 72, 26, 255, 85, 67, 26, 255, 81, 71, 23, 255, 89, 77, 15, 255, 91, 72, 23, 255, 96, 79, 22, 255, 96, 74, 31, 255, 95, 78, 23, 255, 100, 82, 26, 255, 95, 81, 24, 255, 94, 78, 27, 255, 97, 83, 20, 255, 96, 83, 31, 255, 97, 85, 25, 255, 99, 82, 27, 255, 99, 83, 18, 255, 100, 85, 26, 255, 99, 87, 14, 255, 103, 91, 12, 255, 102, 85, 16, 255, 108, 87, 26, 255, 108, 83, 29, 255, 104, 84, 29, 255, 99, 86, 28, 255, 98, 89, 17, 255, 102, 88, 29, 255, 105, 88, 18, 255, 106, 83, 32, 255, 105, 84, 33, 255, 102, 90, 12, 255, 100, 84, 17, 255, 105, 84, 24, 255, 106, 87, 28, 255, 105, 86, 20, 255, 111, 88, 15, 255, 112, 88, 8, 255, 112, 82, 16, 255, 110, 81, 21, 255, 107, 83, 21, 255, 109, 84, 23, 255, 109, 81, 21, 255, 109, 79, 17, 255, 110, 78, 21, 255, 110, 80, 12, 255, 107, 79, 14, 255, 100, 73, 16, 255, 101, 75, 13, 255, 106, 75, 17, 255, 100, 72, 17, 255, 105, 75, 14, 255, 111, 74, 9, 255, 108, 72, 12, 255, 106, 74, 11, 255, 106, 72, 9, 255, 102, 69, 11, 255, 105, 69, 12, 255, 103, 68, 4, 255, 103, 69, 7, 255, 105, 70, 9, 255, 111, 71, 7, 255, 107, 69, 6, 255, 106, 67, 8, 255, 106, 67, 9, 255, 102, 62, 7, 255, 104, 62, 6, 255, 110, 63, 8, 255, 112, 63, 5, 255, 115, 65, 6, 255, 108, 61, 5, 255, 105, 63, 7, 255, 102, 60, 5, 255, 101, 56, 1, 255, 105, 58, 4, 255, 109, 61, 6, 255, 103, 59, 0, 255, 104, 59, 1, 255, 102, 54, 1, 255, 108, 60, 2, 255, 106, 58, 2, 255, 106, 55, 4, 255, 110, 56, 1, 255, 107, 56, 1, 255, 107, 58, 4, 255, 98, 49, 3, 255, 106, 53, 9, 255, 109, 52, 5, 255, 110, 50, 1, 255, 98, 53, 2, 255, 92, 51, 1, 255, 89, 47, 5, 255, 86, 44, 7, 255, 86, 43, 7, 255, 86, 44, 3, 255, 79, 42, 1, 255, 77, 40, 2, 255, 75, 39, 2, 255, 71, 38, 3, 255, 71, 35, 4, 255, 68, 35, 6, 255, 67, 36, 5, 255, 74, 34, 6, 255, 68, 35, 2, 255, 59, 34, 1, 255, 62, 32, 5, 255, 78, 36, 5, 255, 79, 37, 4, 255, 69, 36, 3, 255, 73, 38, 3, 255, 90, 40, 1, 255, 107, 48, 1, 255, 104, 48, 5, 255, 95, 43, 3, 255, 94, 44, 2, 255, 97, 44, 5, 255, 107, 47, 4, 255, 114, 50, 6, 255, 101, 41, 4, 255, 92, 41, 3, 255, 100, 42, 6, 255, 97, 36, 3, 255, 91, 38, 1, 255, 102, 38, 2, 255, 107, 41, 5, 255, 105, 39, 5, 255, 100, 39, 1, 255, 103, 39, 1, 255, 106, 40, 3, 255, 108, 45, 6, 255, 106, 44, 1, 255, 110, 43, 2, 255, 110, 41, 1, 255, 108, 41, 1, 255, 109, 43, 8, 255, 95, 30, 5, 255, 81, 21, 1, 255, 78, 26, 4, 255, 74, 28, 6, 255, 68, 26, 3, 255, 75, 31, 7, 255, 76, 28, 3, 255, 81, 30, 3, 255, 82, 31, 4, 255, 79, 30, 3, 255, 83, 24, 2, 255, 90, 34, 3, 255, 91, 35, 5, 255, 103, 31, 0, 255, 115, 37, 1, 255, 102, 31, 1, 255, 103, 36, 1, 255, 118, 31, 5, 255, 137, 41, 6, 255, 129, 44, 0, 255, 111, 38, 1, 255, 110, 35, 4, 255, 116, 31, 2, 255, 117, 32, 0, 255, 119, 35, 1, 255, 120, 33, 0, 255, 123, 34, 3, 255, 124, 35, 5, 255, 117, 30, 1, 255, 119, 31, 1, 255, 116, 28, 0, 255, 113, 27, 0, 255, 112, 28, 2, 255, 110, 27, 2, 255, 106, 26, 3, 255, 97, 22, 1, 255, 97, 20, 1, 255, 94, 20, 0, 255, 92, 22, 4, 255, 92, 21, 5, 255, 85, 16, 1, 255, 84, 21, 3, 255, 89, 25, 3, 255, 91, 24, 1, 255, 88, 22, 1, 255, 90, 22, 3, 255, 89, 23, 5, 255, 83, 23, 4, 255, 70, 20, 0, 255, 74, 27, 3, 255, 100, 26, 4, 255, 71, 16, 1, 255, 55, 10, 4, 255, 64, 16, 8, 255, 66, 16, 6, 255, 66, 16, 3, 255, 67, 20, 5, 255, 65, 19, 3, 255, 63, 17, 1, 255, 64, 17, 1, 255, 64, 15, 1, 255, 64, 16, 1, 255, 62, 18, 4, 255, 50, 9, 6, 255, 58, 13, 6, 255, 68, 21, 1, 255, 70, 19, 3, 255, 80, 22, 4, 255, 103, 31, 4, 255, 118, 42, 3, 255, 122, 42, 2, 255, 121, 39, 4, 255, 115, 35, 2, 255, 113, 35, 3, 255, 111, 35, 2, 255, 113, 38, 2, 255, 119, 44, 4, 255, 122, 43, 1, 255, 127, 46, 3, 255, 128, 47, 3, 255, 125, 49, 2, 255, 122, 50, 3, 255, 125, 48, 2, 255, 126, 48, 2, 255, 26, 30, 9, 255, 21, 24, 3, 255, 22, 24, 3, 255, 21, 20, 1, 255, 22, 19, 3, 255, 23, 15, 5, 255, 24, 12, 4, 255, 24, 13, 4, 255, 21, 11, 3, 255, 18, 9, 1, 255, 17, 9, 1, 255, 24, 13, 4, 255, 22, 12, 2, 255, 17, 10, 1, 255, 16, 10, 2, 255, 12, 13, 0, 255, 16, 13, 4, 255, 22, 10, 5, 255, 22, 10, 3, 255, 14, 13, 2, 255, 20, 10, 3, 255, 36, 18, 6, 255, 32, 18, 3, 255, 23, 12, 2, 255, 35, 19, 7, 255, 37, 17, 2, 255, 38, 18, 4, 255, 41, 19, 3, 255, 44, 22, 4, 255, 42, 25, 4, 255, 41, 19, 2, 255, 39, 17, 3, 255, 35, 18, 3, 255, 34, 20, 4, 255, 30, 15, 2, 255, 37, 18, 6, 255, 36, 20, 8, 255, 42, 31, 13, 255, 43, 36, 18, 255, 49, 49, 27, 255, 58, 54, 32, 255, 72, 58, 22, 255, 78, 56, 4, 255, 74, 46, 7, 255, 65, 40, 9, 255, 56, 31, 2, 255, 61, 28, 5, 255, 64, 44, 20, 255, 67, 52, 23, 255, 69, 55, 23, 255, 79, 64, 31, 255, 92, 63, 37, 255, 88, 64, 38, 255, 69, 57, 18, 255, 65, 63, 35, 255, 64, 68, 36, 255, 72, 53, 15, 255, 80, 55, 13, 255, 88, 59, 35, 255, 104, 69, 43, 255, 99, 63, 35, 255, 90, 65, 23, 255, 80, 56, 9, 255, 86, 50, 9, 255, 79, 49, 4, 255, 83, 49, 5, 255, 79, 40, 0, 255, 83, 41, 1, 255, 85, 42, 2, 255, 88, 44, 2, 255, 85, 42, 2, 255, 85, 43, 3, 255, 89, 48, 5, 255, 87, 45, 1, 255, 90, 46, 1, 255, 94, 48, 2, 255, 98, 50, 4, 255, 104, 53, 5, 255, 108, 55, 5, 255, 107, 55, 3, 255, 106, 56, 4, 255, 102, 54, 2, 255, 98, 54, 2, 255, 105, 59, 2, 255, 102, 58, 0, 255, 105, 57, 0, 255, 109, 57, 2, 255, 104, 59, 1, 255, 109, 59, 2, 255, 115, 56, 1, 255, 115, 57, 0, 255, 116, 53, 1, 255, 112, 48, 0, 255, 114, 54, 1, 255, 115, 57, 2, 255, 119, 61, 2, 255, 113, 59, 2, 255, 114, 58, 1, 255, 117, 60, 4, 255, 115, 60, 3, 255, 117, 62, 4, 255, 119, 61, 3, 255, 112, 57, 1, 255, 115, 62, 2, 255, 122, 65, 2, 255, 121, 64, 3, 255, 118, 65, 1, 255, 124, 70, 3, 255, 121, 61, 4, 255, 115, 56, 3, 255, 118, 69, 7, 255, 118, 68, 4, 255, 121, 65, 4, 255, 115, 58, 4, 255, 105, 54, 6, 255, 101, 50, 4, 255, 100, 45, 2, 255, 97, 41, 2, 255, 95, 44, 4, 255, 99, 45, 4, 255, 102, 45, 2, 255, 104, 44, 3, 255, 103, 40, 2, 255, 101, 42, 2, 255, 99, 44, 3, 255, 96, 44, 2, 255, 100, 45, 4, 255, 103, 43, 3, 255, 102, 46, 2, 255, 102, 49, 4, 255, 101, 45, 2, 255, 99, 47, 3, 255, 100, 46, 3, 255, 102, 44, 3, 255, 101, 48, 5, 255, 100, 47, 4, 255, 102, 48, 5, 255, 97, 46, 2, 255, 96, 45, 1, 255, 97, 48, 2, 255, 101, 51, 4, 255, 97, 50, 5, 255, 95, 50, 3, 255, 96, 51, 2, 255, 88, 50, 8, 255, 91, 47, 6, 255, 89, 43, 2, 255, 79, 41, 9, 255, 89, 46, 14, 255, 99, 52, 4, 255, 97, 51, 3, 255, 99, 52, 12, 255, 105, 54, 7, 255, 114, 58, 8, 255, 117, 53, 17, 255, 113, 54, 6, 255, 108, 58, 1, 255, 121, 59, 16, 255, 136, 69, 8, 255, 130, 65, 12, 255, 138, 62, 14, 255, 109, 58, 13, 255, 95, 57, 11, 255, 102, 58, 8, 255, 110, 60, 11, 255, 125, 65, 16, 255, 143, 73, 16, 255, 148, 73, 11, 255, 149, 77, 10, 255, 143, 74, 21, 255, 127, 67, 18, 255, 94, 60, 15, 255, 70, 59, 21, 255, 75, 61, 17, 255, 74, 66, 17, 255, 72, 59, 23, 255, 95, 71, 15, 255, 118, 68, 17, 255, 82, 68, 23, 255, 80, 67, 19, 255, 86, 70, 23, 255, 90, 71, 30, 255, 93, 69, 27, 255, 91, 69, 27, 255, 88, 75, 16, 255, 94, 77, 27, 255, 98, 74, 23, 255, 92, 74, 38, 255, 91, 78, 21, 255, 101, 75, 33, 255, 97, 76, 33, 255, 96, 81, 26, 255, 100, 83, 26, 255, 100, 82, 17, 255, 98, 78, 31, 255, 97, 83, 24, 255, 98, 85, 25, 255, 102, 85, 24, 255, 104, 87, 21, 255, 103, 88, 23, 255, 101, 86, 35, 255, 98, 85, 30, 255, 99, 85, 31, 255, 103, 86, 33, 255, 105, 88, 18, 255, 102, 87, 30, 255, 99, 88, 18, 255, 102, 90, 17, 255, 107, 88, 27, 255, 106, 87, 20, 255, 105, 82, 40, 255, 108, 84, 29, 255, 106, 86, 30, 255, 106, 86, 22, 255, 107, 85, 22, 255, 104, 84, 27, 255, 108, 87, 21, 255, 109, 87, 13, 255, 108, 82, 18, 255, 114, 82, 18, 255, 114, 84, 21, 255, 108, 85, 18, 255, 103, 80, 28, 255, 105, 78, 29, 255, 116, 83, 17, 255, 116, 80, 11, 255, 111, 75, 7, 255, 107, 76, 11, 255, 104, 79, 15, 255, 103, 79, 15, 255, 103, 73, 16, 255, 102, 72, 22, 255, 104, 74, 9, 255, 112, 76, 8, 255, 111, 73, 15, 255, 109, 72, 10, 255, 111, 73, 8, 255, 109, 71, 17, 255, 113, 69, 17, 255, 111, 69, 5, 255, 105, 69, 12, 255, 102, 67, 8, 255, 108, 68, 8, 255, 108, 68, 9, 255, 102, 62, 4, 255, 108, 67, 11, 255, 107, 68, 5, 255, 103, 62, 3, 255, 109, 62, 4, 255, 114, 62, 8, 255, 113, 63, 6, 255, 109, 60, 11, 255, 105, 57, 10, 255, 104, 58, 8, 255, 104, 59, 6, 255, 103, 59, 4, 255, 102, 56, 6, 255, 104, 57, 2, 255, 102, 55, 5, 255, 97, 52, 4, 255, 102, 57, 6, 255, 106, 55, 6, 255, 105, 54, 0, 255, 107, 55, 1, 255, 108, 52, 4, 255, 103, 49, 5, 255, 104, 54, 8, 255, 108, 54, 9, 255, 104, 48, 4, 255, 105, 52, 5, 255, 109, 54, 2, 255, 97, 49, 3, 255, 91, 44, 4, 255, 95, 43, 2, 255, 89, 42, 2, 255, 84, 39, 6, 255, 86, 39, 7, 255, 78, 41, 4, 255, 69, 40, 1, 255, 68, 36, 2, 255, 68, 31, 2, 255, 71, 35, 7, 255, 69, 34, 6, 255, 62, 34, 7, 255, 63, 36, 5, 255, 66, 34, 2, 255, 61, 29, 5, 255, 62, 34, 4, 255, 62, 29, 7, 255, 58, 31, 1, 255, 62, 33, 4, 255, 75, 34, 6, 255, 95, 46, 1, 255, 95, 42, 2, 255, 94, 42, 5, 255, 86, 41, 2, 255, 88, 41, 4, 255, 100, 43, 2, 255, 106, 41, 3, 255, 95, 34, 4, 255, 92, 38, 1, 255, 97, 36, 4, 255, 94, 35, 5, 255, 91, 35, 3, 255, 94, 37, 4, 255, 98, 33, 3, 255, 98, 32, 4, 255, 97, 38, 3, 255, 92, 33, 0, 255, 96, 36, 8, 255, 97, 34, 7, 255, 96, 31, 1, 255, 99, 33, 1, 255, 96, 34, 5, 255, 78, 26, 3, 255, 65, 25, 2, 255, 58, 25, 3, 255, 60, 24, 1, 255, 71, 28, 2, 255, 79, 29, 1, 255, 75, 26, 4, 255, 74, 29, 4, 255, 75, 29, 2, 255, 88, 33, 6, 255, 89, 28, 3, 255, 84, 24, 0, 255, 89, 29, 4, 255, 101, 35, 5, 255, 117, 42, 5, 255, 110, 33, 3, 255, 97, 26, 3, 255, 103, 31, 6, 255, 122, 39, 6, 255, 137, 46, 4, 255, 138, 42, 2, 255, 138, 47, 0, 255, 136, 41, 1, 255, 137, 39, 6, 255, 129, 43, 2, 255, 123, 39, 1, 255, 117, 32, 0, 255, 120, 35, 3, 255, 121, 36, 5, 255, 116, 32, 1, 255, 117, 35, 3, 255, 115, 31, 2, 255, 112, 27, 1, 255, 111, 28, 4, 255, 112, 29, 4, 255, 105, 26, 1, 255, 100, 24, 1, 255, 94, 22, 2, 255, 96, 23, 3, 255, 93, 24, 1, 255, 90, 22, 2, 255, 90, 19, 2, 255, 93, 22, 5, 255, 90, 23, 1, 255, 88, 22, 1, 255, 89, 19, 1, 255, 91, 22, 1, 255, 89, 19, 0, 255, 86, 19, 2, 255, 84, 21, 4, 255, 77, 19, 0, 255, 74, 22, 3, 255, 71, 20, 3, 255, 58, 20, 1, 255, 48, 17, 2, 255, 51, 14, 4, 255, 54, 14, 4, 255, 60, 14, 3, 255, 61, 17, 3, 255, 61, 18, 2, 255, 65, 19, 2, 255, 68, 19, 2, 255, 67, 20, 4, 255, 62, 16, 1, 255, 61, 15, 2, 255, 54, 13, 4, 255, 59, 14, 1, 255, 67, 19, 0, 255, 68, 20, 4, 255, 75, 23, 2, 255, 91, 23, 2, 255, 110, 38, 3, 255, 119, 42, 4, 255, 111, 32, 2, 255, 105, 29, 0, 255, 102, 29, 0, 255, 103, 30, 3, 255, 106, 32, 3, 255, 109, 35, 1, 255, 116, 40, 1, 255, 122, 46, 2, 255, 122, 48, 1, 255, 123, 52, 3, 255, 122, 48, 0, 255, 125, 46, 0, 255, 126, 46, 0, 255, 22, 17, 4, 255, 21, 15, 9, 255, 19, 16, 7, 255, 17, 17, 3, 255, 21, 18, 3, 255, 30, 17, 5, 255, 27, 12, 3, 255, 25, 13, 6, 255, 23, 13, 5, 255, 21, 12, 3, 255, 20, 11, 2, 255, 24, 10, 2, 255, 24, 11, 3, 255, 20, 14, 4, 255, 24, 12, 3, 255, 20, 11, 3, 255, 16, 12, 3, 255, 18, 13, 4, 255, 19, 12, 2, 255, 19, 9, 2, 255, 20, 10, 3, 255, 24, 11, 2, 255, 27, 14, 6, 255, 22, 14, 4, 255, 25, 18, 4, 255, 26, 14, 3, 255, 24, 11, 5, 255, 34, 20, 3, 255, 40, 22, 2, 255, 38, 18, 2, 255, 33, 14, 4, 255, 28, 12, 5, 255, 32, 16, 5, 255, 34, 13, 2, 255, 28, 18, 4, 255, 27, 19, 3, 255, 39, 22, 4, 255, 39, 30, 12, 255, 53, 34, 19, 255, 62, 42, 19, 255, 62, 55, 30, 255, 64, 54, 25, 255, 73, 53, 16, 255, 72, 48, 8, 255, 66, 48, 3, 255, 61, 36, 1, 255, 75, 35, 2, 255, 78, 48, 8, 255, 71, 54, 21, 255, 76, 58, 19, 255, 88, 61, 26, 255, 91, 59, 44, 255, 79, 62, 45, 255, 71, 58, 23, 255, 74, 69, 41, 255, 78, 66, 39, 255, 79, 56, 14, 255, 72, 59, 14, 255, 79, 66, 51, 255, 87, 72, 53, 255, 86, 69, 17, 255, 90, 68, 12, 255, 81, 55, 10, 255, 74, 49, 3, 255, 71, 55, 2, 255, 77, 47, 2, 255, 83, 42, 2, 255, 82, 42, 1, 255, 77, 42, 1, 255, 78, 43, 2, 255, 84, 45, 3, 255, 86, 45, 3, 255, 88, 45, 1, 255, 92, 44, 1, 255, 91, 49, 3, 255, 95, 53, 4, 255, 97, 50, 1, 255, 101, 49, 2, 255, 101, 53, 2, 255, 101, 51, 1, 255, 104, 55, 2, 255, 100, 57, 2, 255, 97, 58, 1, 255, 106, 58, 1, 255, 111, 58, 1, 255, 113, 58, 1, 255, 106, 58, 1, 255, 98, 58, 3, 255, 106, 59, 2, 255, 115, 55, 2, 255, 121, 53, 6, 255, 116, 49, 2, 255, 115, 51, 2, 255, 113, 50, 1, 255, 115, 52, 1, 255, 116, 54, 2, 255, 117, 55, 5, 255, 116, 50, 2, 255, 117, 59, 7, 255, 112, 63, 4, 255, 112, 63, 3, 255, 112, 65, 4, 255, 113, 63, 3, 255, 116, 68, 2, 255, 111, 64, 4, 255, 116, 61, 6, 255, 125, 67, 5, 255, 125, 65, 1, 255, 119, 56, 2, 255, 128, 65, 2, 255, 130, 70, 1, 255, 123, 68, 0, 255, 131, 66, 2, 255, 131, 68, 6, 255, 113, 61, 3, 255, 106, 55, 4, 255, 104, 50, 4, 255, 102, 51, 2, 255, 98, 50, 4, 255, 105, 50, 4, 255, 114, 54, 6, 255, 104, 45, 2, 255, 107, 45, 3, 255, 105, 45, 3, 255, 102, 45, 3, 255, 101, 45, 2, 255, 100, 46, 2, 255, 102, 43, 3, 255, 102, 43, 6, 255, 101, 46, 2, 255, 102, 43, 3, 255, 104, 44, 5, 255, 106, 44, 4, 255, 106, 48, 6, 255, 105, 47, 6, 255, 106, 46, 5, 255, 99, 47, 4, 255, 99, 50, 3, 255, 101, 51, 4, 255, 105, 50, 4, 255, 102, 47, 4, 255, 102, 49, 7, 255, 97, 51, 9, 255, 101, 50, 7, 255, 107, 50, 7, 255, 108, 51, 11, 255, 96, 52, 8, 255, 98, 50, 5, 255, 100, 52, 1, 255, 96, 52, 3, 255, 91, 52, 5, 255, 90, 52, 6, 255, 83, 49, 5, 255, 87, 54, 6, 255, 79, 53, 7, 255, 75, 55, 10, 255, 74, 52, 7, 255, 83, 50, 14, 255, 100, 63, 12, 255, 99, 58, 15, 255, 93, 54, 15, 255, 78, 51, 14, 255, 72, 50, 15, 255, 71, 51, 13, 255, 72, 55, 13, 255, 79, 57, 9, 255, 96, 59, 24, 255, 109, 67, 11, 255, 107, 67, 12, 255, 92, 59, 20, 255, 80, 56, 21, 255, 80, 59, 17, 255, 79, 63, 10, 255, 77, 65, 13, 255, 76, 66, 18, 255, 82, 62, 27, 255, 80, 67, 18, 255, 95, 68, 21, 255, 95, 70, 32, 255, 94, 72, 24, 255, 94, 72, 14, 255, 96, 70, 21, 255, 92, 74, 29, 255, 99, 71, 24, 255, 110, 75, 28, 255, 98, 77, 27, 255, 102, 79, 13, 255, 100, 80, 26, 255, 98, 83, 16, 255, 102, 77, 23, 255, 101, 80, 23, 255, 104, 84, 18, 255, 105, 79, 32, 255, 106, 85, 22, 255, 105, 83, 23, 255, 104, 84, 22, 255, 100, 82, 39, 255, 106, 88, 38, 255, 105, 86, 32, 255, 105, 84, 25, 255, 107, 86, 28, 255, 103, 87, 32, 255, 111, 92, 31, 255, 110, 87, 28, 255, 103, 86, 27, 255, 104, 89, 23, 255, 103, 89, 24, 255, 100, 91, 24, 255, 109, 87, 26, 255, 110, 86, 19, 255, 107, 91, 19, 255, 108, 89, 21, 255, 106, 85, 26, 255, 109, 85, 24, 255, 109, 85, 24, 255, 107, 88, 16, 255, 110, 88, 13, 255, 114, 86, 33, 255, 111, 83, 26, 255, 113, 80, 24, 255, 115, 83, 27, 255, 107, 81, 17, 255, 105, 83, 17, 255, 114, 89, 21, 255, 114, 80, 11, 255, 111, 80, 14, 255, 103, 78, 15, 255, 105, 76, 20, 255, 109, 82, 13, 255, 105, 79, 9, 255, 107, 75, 20, 255, 103, 73, 20, 255, 105, 72, 16, 255, 109, 73, 10, 255, 110, 74, 12, 255, 110, 70, 14, 255, 112, 72, 10, 255, 109, 71, 7, 255, 114, 70, 8, 255, 116, 71, 8, 255, 111, 70, 8, 255, 107, 71, 10, 255, 103, 66, 8, 255, 107, 68, 7, 255, 106, 65, 3, 255, 106, 64, 7, 255, 106, 63, 8, 255, 106, 60, 8, 255, 113, 63, 7, 255, 112, 61, 2, 255, 110, 59, 3, 255, 116, 61, 9, 255, 116, 59, 11, 255, 106, 55, 3, 255, 106, 58, 5, 255, 102, 55, 3, 255, 104, 53, 7, 255, 102, 54, 2, 255, 101, 55, 5, 255, 103, 54, 8, 255, 108, 58, 6, 255, 112, 58, 8, 255, 108, 56, 4, 255, 106, 58, 4, 255, 103, 52, 6, 255, 104, 52, 0, 255, 104, 53, 4, 255, 101, 53, 2, 255, 93, 49, 5, 255, 99, 51, 11, 255, 102, 50, 3, 255, 98, 46, 4, 255, 94, 40, 3, 255, 91, 43, 1, 255, 93, 44, 3, 255, 93, 41, 4, 255, 88, 42, 4, 255, 83, 40, 3, 255, 84, 38, 4, 255, 75, 40, 6, 255, 61, 38, 5, 255, 70, 31, 5, 255, 71, 34, 2, 255, 68, 35, 2, 255, 69, 34, 6, 255, 67, 32, 5, 255, 72, 34, 6, 255, 66, 36, 2, 255, 56, 25, 4, 255, 63, 28, 0, 255, 66, 35, 4, 255, 64, 31, 4, 255, 78, 36, 3, 255, 79, 35, 0, 255, 78, 33, 0, 255, 85, 35, 3, 255, 87, 40, 5, 255, 94, 44, 2, 255, 100, 40, 0, 255, 96, 38, 4, 255, 92, 38, 2, 255, 84, 35, 1, 255, 69, 32, 2, 255, 68, 23, 1, 255, 64, 19, 0, 255, 67, 27, 1, 255, 78, 29, 4, 255, 72, 26, 5, 255, 59, 22, 1, 255, 55, 24, 3, 255, 54, 22, 2, 255, 58, 22, 2, 255, 61, 24, 6, 255, 55, 26, 6, 255, 50, 24, 4, 255, 55, 22, 4, 255, 59, 28, 3, 255, 65, 29, 4, 255, 74, 26, 5, 255, 82, 28, 5, 255, 73, 24, 2, 255, 77, 30, 5, 255, 85, 35, 3, 255, 93, 33, 2, 255, 98, 32, 5, 255, 95, 29, 2, 255, 101, 34, 5, 255, 111, 37, 2, 255, 126, 46, 1, 255, 131, 45, 7, 255, 103, 32, 3, 255, 115, 42, 5, 255, 130, 46, 2, 255, 132, 43, 0, 255, 135, 45, 1, 255, 137, 46, 2, 255, 140, 45, 2, 255, 143, 43, 3, 255, 139, 44, 1, 255, 134, 40, 2, 255, 132, 39, 1, 255, 131, 39, 2, 255, 124, 37, 3, 255, 120, 34, 3, 255, 122, 37, 7, 255, 122, 34, 6, 255, 124, 34, 4, 255, 120, 33, 4, 255, 116, 31, 5, 255, 111, 29, 3, 255, 105, 30, 3, 255, 93, 26, 2, 255, 93, 26, 6, 255, 87, 22, 0, 255, 90, 26, 3, 255, 92, 25, 5, 255, 94, 24, 6, 255, 93, 24, 2, 255, 87, 22, 3, 255, 84, 22, 1, 255, 85, 21, 2, 255, 86, 21, 2, 255, 86, 22, 3, 255, 80, 19, 4, 255, 77, 19, 2, 255, 76, 17, 4, 255, 55, 14, 5, 255, 53, 19, 5, 255, 55, 22, 7, 255, 47, 11, 2, 255, 54, 11, 5, 255, 51, 14, 4, 255, 52, 12, 3, 255, 60, 15, 3, 255, 67, 19, 2, 255, 70, 20, 1, 255, 71, 18, 3, 255, 69, 16, 2, 255, 73, 19, 3, 255, 68, 18, 1, 255, 67, 20, 1, 255, 75, 23, 3, 255, 78, 24, 4, 255, 77, 21, 0, 255, 85, 20, 2, 255, 106, 33, 6, 255, 109, 32, 4, 255, 97, 22, 0, 255, 101, 32, 1, 255, 104, 36, 2, 255, 106, 32, 5, 255, 103, 29, 3, 255, 106, 34, 2, 255, 114, 41, 3, 255, 122, 43, 3, 255, 123, 43, 1, 255, 123, 47, 3, 255, 120, 48, 3, 255, 121, 44, 0, 255, 126, 44, 1, 255, 14, 15, 2, 255, 22, 14, 5, 255, 25, 14, 6, 255, 18, 12, 2, 255, 21, 16, 3, 255, 22, 14, 3, 255, 23, 10, 2, 255, 21, 10, 1, 255, 21, 11, 1, 255, 20, 12, 1, 255, 21, 12, 3, 255, 20, 9, 1, 255, 20, 10, 2, 255, 21, 12, 2, 255, 21, 11, 2, 255, 18, 9, 2, 255, 16, 9, 1, 255, 18, 12, 2, 255, 19, 11, 1, 255, 21, 10, 2, 255, 18, 13, 2, 255, 20, 14, 3, 255, 21, 15, 5, 255, 17, 12, 2, 255, 26, 17, 3, 255, 35, 20, 8, 255, 28, 18, 5, 255, 33, 17, 4, 255, 36, 17, 8, 255, 28, 14, 4, 255, 30, 15, 2, 255, 31, 20, 4, 255, 35, 17, 4, 255, 37, 19, 4, 255, 35, 14, 0, 255, 32, 18, 2, 255, 37, 19, 5, 255, 40, 22, 7, 255, 43, 30, 7, 255, 48, 40, 14, 255, 66, 53, 24, 255, 71, 55, 20, 255, 68, 49, 8, 255, 71, 42, 2, 255, 76, 48, 6, 255, 68, 41, 5, 255, 76, 37, 1, 255, 79, 44, 4, 255, 69, 56, 23, 255, 71, 57, 23, 255, 77, 59, 23, 255, 73, 59, 24, 255, 74, 59, 31, 255, 77, 60, 25, 255, 75, 74, 49, 255, 78, 62, 39, 255, 74, 55, 21, 255, 70, 56, 31, 255, 79, 68, 55, 255, 81, 69, 51, 255, 81, 65, 26, 255, 89, 64, 11, 255, 88, 58, 2, 255, 80, 50, 6, 255, 96, 54, 11, 255, 98, 48, 8, 255, 94, 40, 3, 255, 92, 44, 4, 255, 83, 43, 2, 255, 77, 44, 2, 255, 82, 47, 4, 255, 89, 45, 3, 255, 96, 45, 3, 255, 105, 45, 4, 255, 98, 50, 5, 255, 99, 51, 2, 255, 106, 52, 4, 255, 98, 52, 3, 255, 95, 58, 6, 255, 95, 53, 2, 255, 95, 50, 0, 255, 98, 55, 2, 255, 103, 58, 2, 255, 105, 53, 3, 255, 103, 57, 1, 255, 101, 58, 0, 255, 104, 53, 1, 255, 109, 51, 4, 255, 115, 60, 4, 255, 108, 59, 3, 255, 102, 52, 3, 255, 112, 59, 5, 255, 118, 60, 5, 255, 117, 55, 4, 255, 115, 54, 4, 255, 117, 58, 7, 255, 112, 58, 1, 255, 117, 58, 3, 255, 116, 62, 4, 255, 110, 67, 1, 255, 111, 66, 0, 255, 114, 63, 3, 255, 117, 61, 1, 255, 116, 65, 5, 255, 111, 65, 4, 255, 120, 68, 2, 255, 122, 64, 2, 255, 123, 59, 1, 255, 130, 65, 3, 255, 131, 69, 4, 255, 126, 68, 5, 255, 122, 76, 4, 255, 120, 60, 0, 255, 118, 51, 5, 255, 120, 65, 4, 255, 122, 68, 2, 255, 126, 70, 5, 255, 123, 67, 0, 255, 126, 69, 4, 255, 118, 64, 2, 255, 114, 63, 2, 255, 110, 56, 3, 255, 110, 51, 6, 255, 111, 50, 4, 255, 106, 47, 3, 255, 101, 47, 4, 255, 103, 48, 6, 255, 100, 46, 1, 255, 104, 43, 3, 255, 104, 42, 5, 255, 104, 44, 2, 255, 103, 46, 5, 255, 103, 49, 5, 255, 105, 51, 2, 255, 102, 53, 1, 255, 104, 51, 4, 255, 101, 47, 5, 255, 103, 51, 2, 255, 99, 51, 4, 255, 102, 48, 7, 255, 105, 47, 8, 255, 104, 55, 6, 255, 97, 50, 5, 255, 102, 53, 4, 255, 107, 52, 3, 255, 101, 46, 2, 255, 105, 53, 4, 255, 104, 52, 7, 255, 105, 53, 11, 255, 106, 54, 6, 255, 104, 51, 7, 255, 104, 54, 11, 255, 97, 51, 4, 255, 98, 55, 8, 255, 99, 58, 7, 255, 95, 53, 7, 255, 96, 56, 10, 255, 93, 56, 7, 255, 94, 56, 12, 255, 96, 55, 13, 255, 101, 61, 13, 255, 97, 58, 10, 255, 94, 57, 10, 255, 96, 60, 10, 255, 94, 61, 14, 255, 95, 63, 14, 255, 94, 59, 18, 255, 95, 62, 23, 255, 90, 64, 23, 255, 89, 68, 20, 255, 87, 63, 25, 255, 87, 60, 23, 255, 93, 65, 15, 255, 92, 67, 21, 255, 93, 65, 17, 255, 98, 70, 13, 255, 102, 69, 18, 255, 105, 71, 26, 255, 106, 75, 19, 255, 97, 69, 20, 255, 97, 71, 21, 255, 98, 70, 23, 255, 93, 74, 23, 255, 101, 77, 18, 255, 109, 79, 24, 255, 102, 77, 36, 255, 105, 77, 24, 255, 103, 77, 24, 255, 103, 79, 33, 255, 111, 85, 22, 255, 104, 85, 22, 255, 103, 85, 23, 255, 104, 81, 37, 255, 103, 81, 41, 255, 108, 85, 28, 255, 111, 88, 26, 255, 106, 87, 26, 255, 108, 88, 22, 255, 105, 88, 24, 255, 105, 88, 20, 255, 109, 91, 12, 255, 108, 89, 28, 255, 108, 86, 29, 255, 109, 85, 28, 255, 110, 91, 19, 255, 117, 90, 11, 255, 116, 89, 22, 255, 105, 90, 20, 255, 110, 88, 29, 255, 112, 87, 22, 255, 107, 88, 22, 255, 108, 87, 25, 255, 114, 91, 25, 255, 114, 89, 22, 255, 118, 91, 11, 255, 115, 87, 16, 255, 111, 84, 21, 255, 111, 82, 29, 255, 113, 83, 22, 255, 113, 84, 18, 255, 115, 87, 16, 255, 109, 81, 25, 255, 109, 82, 24, 255, 111, 83, 13, 255, 108, 79, 10, 255, 109, 84, 6, 255, 105, 82, 17, 255, 108, 74, 13, 255, 114, 78, 8, 255, 107, 74, 16, 255, 109, 71, 27, 255, 110, 71, 19, 255, 112, 72, 21, 255, 110, 72, 19, 255, 106, 73, 10, 255, 104, 72, 11, 255, 105, 71, 9, 255, 108, 69, 10, 255, 108, 68, 8, 255, 110, 69, 12, 255, 107, 66, 11, 255, 109, 68, 10, 255, 109, 69, 4, 255, 112, 67, 7, 255, 109, 64, 7, 255, 108, 65, 8, 255, 106, 63, 7, 255, 109, 62, 11, 255, 110, 61, 10, 255, 113, 63, 7, 255, 110, 60, 3, 255, 115, 60, 1, 255, 117, 62, 6, 255, 107, 58, 7, 255, 106, 58, 7, 255, 108, 56, 3, 255, 109, 58, 4, 255, 110, 60, 2, 255, 107, 56, 5, 255, 107, 56, 10, 255, 108, 58, 6, 255, 108, 53, 6, 255, 111, 51, 4, 255, 109, 53, 3, 255, 103, 52, 7, 255, 103, 56, 3, 255, 102, 52, 1, 255, 107, 55, 6, 255, 104, 52, 6, 255, 99, 43, 8, 255, 95, 46, 8, 255, 90, 47, 5, 255, 92, 45, 4, 255, 90, 45, 7, 255, 89, 40, 4, 255, 95, 42, 3, 255, 92, 43, 4, 255, 90, 40, 4, 255, 88, 39, 4, 255, 86, 39, 4, 255, 77, 40, 4, 255, 74, 36, 7, 255, 70, 37, 8, 255, 70, 37, 3, 255, 73, 37, 2, 255, 67, 32, 3, 255, 66, 29, 5, 255, 61, 32, 5, 255, 58, 27, 8, 255, 67, 31, 2, 255, 71, 36, 2, 255, 71, 38, 8, 255, 73, 34, 4, 255, 81, 33, 1, 255, 80, 33, 5, 255, 74, 33, 3, 255, 81, 33, 1, 255, 93, 37, 5, 255, 92, 35, 3, 255, 90, 34, 2, 255, 85, 32, 3, 255, 66, 28, 3, 255, 54, 27, 4, 255, 58, 23, 4, 255, 51, 23, 3, 255, 59, 29, 2, 255, 62, 28, 1, 255, 65, 25, 2, 255, 59, 26, 0, 255, 57, 31, 3, 255, 51, 26, 2, 255, 48, 24, 3, 255, 44, 21, 5, 255, 33, 16, 1, 255, 42, 21, 3, 255, 60, 22, 5, 255, 67, 30, 3, 255, 71, 32, 2, 255, 76, 27, 3, 255, 75, 26, 2, 255, 75, 25, 3, 255, 80, 30, 5, 255, 90, 37, 3, 255, 96, 36, 3, 255, 98, 33, 5, 255, 100, 31, 2, 255, 110, 39, 1, 255, 131, 46, 3, 255, 133, 45, 1, 255, 131, 42, 1, 255, 131, 38, 4, 255, 134, 38, 3, 255, 129, 43, 1, 255, 138, 47, 4, 255, 140, 46, 2, 255, 141, 46, 0, 255, 142, 47, 2, 255, 142, 46, 3, 255, 143, 44, 1, 255, 142, 43, 1, 255, 142, 45, 2, 255, 135, 41, 0, 255, 131, 40, 2, 255, 130, 41, 8, 255, 117, 30, 1, 255, 114, 28, 1, 255, 119, 31, 1, 255, 122, 32, 1, 255, 111, 28, 0, 255, 115, 29, 1, 255, 117, 31, 1, 255, 104, 33, 3, 255, 94, 24, 3, 255, 91, 27, 1, 255, 91, 28, 2, 255, 90, 23, 1, 255, 90, 22, 3, 255, 82, 21, 2, 255, 81, 20, 0, 255, 89, 25, 2, 255, 88, 23, 4, 255, 85, 20, 2, 255, 84, 21, 1, 255, 83, 21, 5, 255, 80, 19, 2, 255, 79, 19, 4, 255, 59, 21, 3, 255, 47, 14, 2, 255, 61, 19, 8, 255, 60, 13, 3, 255, 59, 17, 2, 255, 55, 15, 3, 255, 53, 15, 3, 255, 57, 18, 3, 255, 63, 18, 1, 255, 69, 17, 1, 255, 71, 19, 2, 255, 67, 16, 0, 255, 70, 17, 4, 255, 73, 16, 2, 255, 72, 21, 2, 255, 69, 16, 3, 255, 76, 14, 6, 255, 74, 19, 4, 255, 80, 22, 1, 255, 96, 27, 3, 255, 98, 23, 4, 255, 91, 23, 2, 255, 97, 34, 3, 255, 107, 38, 3, 255, 114, 36, 5, 255, 113, 37, 6, 255, 110, 37, 2, 255, 110, 35, 0, 255, 115, 35, 0, 255, 122, 39, 4, 255, 119, 39, 4, 255, 116, 41, 6, 255, 115, 37, 2, 255, 118, 35, 2, 255, 18, 14, 0, 255, 22, 14, 3, 255, 24, 14, 5, 255, 18, 10, 1, 255, 19, 15, 4, 255, 17, 10, 3, 255, 19, 10, 2, 255, 20, 11, 2, 255, 20, 11, 2, 255, 18, 9, 0, 255, 21, 13, 4, 255, 20, 14, 4, 255, 15, 10, 1, 255, 20, 10, 2, 255, 24, 12, 4, 255, 21, 10, 1, 255, 19, 9, 0, 255, 24, 12, 4, 255, 28, 13, 6, 255, 19, 11, 4, 255, 16, 14, 1, 255, 23, 17, 4, 255, 25, 16, 3, 255, 22, 13, 0, 255, 31, 17, 3, 255, 33, 17, 0, 255, 28, 19, 0, 255, 29, 16, 4, 255, 29, 12, 2, 255, 31, 17, 3, 255, 37, 20, 5, 255, 36, 20, 5, 255, 36, 21, 5, 255, 40, 23, 7, 255, 36, 18, 4, 255, 32, 15, 1, 255, 38, 21, 5, 255, 41, 26, 5, 255, 41, 28, 8, 255, 46, 36, 18, 255, 67, 49, 26, 255, 78, 57, 23, 255, 73, 51, 12, 255, 72, 44, 4, 255, 70, 47, 9, 255, 64, 46, 3, 255, 67, 36, 0, 255, 66, 36, 6, 255, 68, 56, 18, 255, 72, 59, 23, 255, 71, 57, 22, 255, 77, 62, 21, 255, 82, 59, 19, 255, 78, 59, 19, 255, 70, 71, 49, 255, 66, 63, 34, 255, 67, 54, 22, 255, 72, 60, 37, 255, 77, 68, 56, 255, 76, 66, 48, 255, 79, 62, 30, 255, 91, 64, 16, 255, 90, 55, 7, 255, 82, 44, 6, 255, 87, 51, 6, 255, 89, 49, 5, 255, 86, 41, 0, 255, 86, 41, 0, 255, 90, 47, 5, 255, 84, 44, 2, 255, 87, 41, 0, 255, 98, 47, 5, 255, 95, 49, 3, 255, 99, 47, 2, 255, 95, 49, 2, 255, 100, 50, 3, 255, 99, 50, 2, 255, 100, 55, 5, 255, 96, 54, 4, 255, 103, 54, 5, 255, 106, 53, 3, 255, 103, 51, 0, 255, 105, 51, 0, 255, 100, 50, 3, 255, 100, 59, 6, 255, 95, 56, 2, 255, 102, 49, 2, 255, 108, 49, 6, 255, 106, 55, 4, 255, 96, 58, 2, 255, 93, 55, 2, 255, 103, 59, 3, 255, 100, 56, 0, 255, 101, 56, 0, 255, 104, 56, 0, 255, 113, 61, 5, 255, 106, 63, 3, 255, 107, 65, 7, 255, 110, 61, 3, 255, 115, 65, 5, 255, 113, 65, 3, 255, 113, 64, 5, 255, 115, 61, 4, 255, 114, 64, 2, 255, 117, 68, 3, 255, 123, 64, 5, 255, 122, 64, 4, 255, 121, 65, 2, 255, 123, 65, 3, 255, 126, 62, 5, 255, 126, 58, 2, 255, 125, 68, 5, 255, 120, 61, 2, 255, 120, 64, 5, 255, 122, 67, 5, 255, 117, 55, 5, 255, 121, 57, 6, 255, 130, 67, 8, 255, 132, 72, 1, 255, 132, 73, 4, 255, 131, 71, 7, 255, 135, 78, 3, 255, 129, 75, 3, 255, 126, 68, 6, 255, 123, 66, 8, 255, 111, 59, 2, 255, 109, 53, 2, 255, 111, 53, 6, 255, 111, 56, 0, 255, 106, 54, 3, 255, 100, 50, 5, 255, 99, 52, 3, 255, 99, 49, 5, 255, 100, 47, 3, 255, 104, 52, 1, 255, 99, 53, 4, 255, 99, 48, 10, 255, 99, 46, 12, 255, 101, 46, 2, 255, 102, 53, 5, 255, 99, 51, 6, 255, 103, 50, 7, 255, 105, 52, 11, 255, 102, 51, 3, 255, 102, 54, 5, 255, 106, 54, 10, 255, 109, 52, 7, 255, 102, 51, 7, 255, 102, 55, 8, 255, 102, 52, 5, 255, 104, 52, 6, 255, 102, 54, 6, 255, 102, 54, 6, 255, 102, 56, 7, 255, 101, 54, 11, 255, 104, 55, 11, 255, 102, 58, 11, 255, 106, 55, 8, 255, 111, 56, 11, 255, 104, 59, 12, 255, 103, 60, 17, 255, 102, 57, 17, 255, 101, 58, 21, 255, 96, 57, 18, 255, 97, 59, 20, 255, 98, 62, 13, 255, 97, 62, 13, 255, 100, 64, 19, 255, 99, 66, 13, 255, 100, 66, 18, 255, 99, 65, 20, 255, 101, 68, 16, 255, 102, 69, 17, 255, 96, 64, 23, 255, 97, 66, 27, 255, 101, 70, 13, 255, 105, 70, 18, 255, 108, 71, 27, 255, 106, 73, 19, 255, 102, 68, 29, 255, 103, 69, 22, 255, 100, 76, 28, 255, 96, 76, 24, 255, 105, 81, 23, 255, 107, 80, 20, 255, 105, 80, 13, 255, 105, 75, 24, 255, 110, 80, 31, 255, 102, 82, 28, 255, 107, 82, 31, 255, 104, 83, 22, 255, 97, 84, 32, 255, 97, 81, 35, 255, 102, 80, 40, 255, 104, 85, 23, 255, 108, 89, 25, 255, 108, 85, 28, 255, 107, 86, 20, 255, 109, 89, 26, 255, 104, 90, 27, 255, 104, 91, 18, 255, 115, 89, 30, 255, 110, 86, 37, 255, 106, 86, 32, 255, 119, 92, 21, 255, 125, 91, 23, 255, 117, 89, 12, 255, 114, 91, 19, 255, 109, 87, 23, 255, 116, 87, 27, 255, 112, 88, 26, 255, 109, 89, 23, 255, 110, 90, 23, 255, 110, 88, 23, 255, 114, 85, 23, 255, 111, 81, 28, 255, 108, 87, 24, 255, 108, 87, 20, 255, 113, 86, 19, 255, 112, 81, 32, 255, 109, 84, 14, 255, 109, 82, 25, 255, 113, 84, 24, 255, 113, 82, 6, 255, 113, 79, 21, 255, 112, 82, 17, 255, 115, 78, 20, 255, 115, 74, 16, 255, 122, 78, 9, 255, 117, 72, 26, 255, 111, 73, 19, 255, 112, 75, 11, 255, 110, 70, 11, 255, 111, 72, 10, 255, 107, 70, 8, 255, 105, 70, 10, 255, 107, 73, 7, 255, 109, 73, 12, 255, 109, 69, 16, 255, 106, 67, 12, 255, 106, 69, 5, 255, 110, 69, 5, 255, 112, 65, 11, 255, 106, 63, 4, 255, 104, 62, 11, 255, 103, 62, 8, 255, 108, 66, 3, 255, 109, 61, 7, 255, 115, 62, 9, 255, 117, 63, 6, 255, 112, 61, 8, 255, 120, 64, 9, 255, 114, 59, 3, 255, 105, 57, 3, 255, 109, 60, 10, 255, 109, 57, 9, 255, 105, 55, 4, 255, 109, 58, 7, 255, 103, 51, 2, 255, 103, 52, 2, 255, 106, 56, 7, 255, 108, 55, 7, 255, 112, 55, 2, 255, 111, 56, 2, 255, 104, 55, 1, 255, 100, 52, 2, 255, 107, 55, 2, 255, 111, 57, 3, 255, 109, 51, 3, 255, 105, 46, 7, 255, 90, 40, 3, 255, 88, 47, 7, 255, 90, 46, 4, 255, 88, 45, 2, 255, 92, 43, 5, 255, 89, 43, 4, 255, 92, 45, 7, 255, 91, 42, 4, 255, 85, 44, 4, 255, 86, 43, 5, 255, 84, 37, 3, 255, 72, 38, 3, 255, 69, 34, 6, 255, 67, 32, 4, 255, 70, 35, 2, 255, 66, 33, 2, 255, 67, 32, 8, 255, 57, 28, 6, 255, 52, 31, 4, 255, 70, 37, 4, 255, 74, 33, 2, 255, 76, 36, 5, 255, 78, 35, 3, 255, 84, 28, 3, 255, 87, 32, 5, 255, 77, 34, 0, 255, 81, 32, 1, 255, 80, 26, 2, 255, 75, 27, 7, 255, 67, 26, 6, 255, 64, 25, 3, 255, 67, 24, 7, 255, 63, 24, 6, 255, 70, 29, 7, 255, 63, 29, 4, 255, 71, 31, 3, 255, 66, 30, 1, 255, 69, 28, 3, 255, 71, 27, 2, 255, 69, 26, 2, 255, 69, 28, 3, 255, 66, 29, 6, 255, 58, 27, 5, 255, 52, 23, 5, 255, 57, 22, 6, 255, 62, 24, 3, 255, 68, 30, 4, 255, 74, 30, 2, 255, 75, 28, 2, 255, 73, 30, 6, 255, 74, 29, 0, 255, 77, 29, 1, 255, 93, 39, 2, 255, 105, 43, 5, 255, 112, 37, 4, 255, 125, 43, 5, 255, 136, 52, 3, 255, 132, 52, 2, 255, 133, 46, 4, 255, 131, 41, 0, 255, 134, 46, 1, 255, 133, 48, 2, 255, 138, 45, 4, 255, 143, 50, 4, 255, 145, 49, 2, 255, 145, 49, 1, 255, 144, 48, 1, 255, 143, 46, 1, 255, 144, 47, 2, 255, 144, 47, 2, 255, 146, 49, 4, 255, 142, 45, 4, 255, 133, 40, 1, 255, 126, 36, 1, 255, 116, 28, 1, 255, 107, 24, 0, 255, 105, 26, 0, 255, 111, 31, 4, 255, 108, 26, 2, 255, 116, 27, 1, 255, 122, 30, 1, 255, 121, 34, 4, 255, 114, 33, 3, 255, 118, 34, 4, 255, 114, 30, 3, 255, 98, 24, 1, 255, 86, 19, 0, 255, 85, 19, 3, 255, 88, 21, 3, 255, 88, 23, 4, 255, 87, 22, 1, 255, 86, 21, 1, 255, 82, 18, 1, 255, 82, 19, 0, 255, 84, 21, 4, 255, 82, 23, 4, 255, 72, 21, 2, 255, 61, 15, 0, 255, 54, 12, 3, 255, 52, 13, 2, 255, 59, 20, 2, 255, 64, 17, 1, 255, 63, 21, 0, 255, 58, 22, 0, 255, 56, 14, 1, 255, 60, 12, 5, 255, 65, 17, 5, 255, 56, 15, 1, 255, 63, 17, 5, 255, 77, 17, 4, 255, 70, 17, 3, 255, 67, 19, 3, 255, 72, 21, 4, 255, 76, 18, 5, 255, 82, 24, 3, 255, 88, 26, 0, 255, 92, 24, 4, 255, 88, 25, 5, 255, 93, 29, 2, 255, 99, 29, 3, 255, 104, 28, 1, 255, 108, 33, 2, 255, 107, 33, 1, 255, 112, 37, 2, 255, 111, 35, 1, 255, 113, 38, 3, 255, 110, 37, 0, 255, 113, 38, 1, 255, 115, 38, 2, 255, 115, 36, 1, 255, 20, 11, 0, 255, 18, 9, 0, 255, 16, 10, 3, 255, 15, 13, 2, 255, 13, 10, 1, 255, 19, 10, 3, 255, 17, 9, 1, 255, 19, 11, 2, 255, 24, 13, 4, 255, 20, 9, 0, 255, 19, 8, 0, 255, 16, 11, 2, 255, 14, 10, 2, 255, 17, 8, 1, 255, 21, 12, 3, 255, 22, 12, 3, 255, 22, 11, 2, 255, 26, 12, 4, 255, 26, 11, 3, 255, 21, 12, 5, 255, 21, 13, 3, 255, 33, 16, 1, 255, 42, 18, 5, 255, 36, 17, 3, 255, 36, 20, 6, 255, 38, 19, 5, 255, 31, 17, 4, 255, 29, 14, 3, 255, 30, 15, 2, 255, 33, 23, 4, 255, 29, 15, 1, 255, 21, 10, 1, 255, 28, 19, 2, 255, 40, 19, 5, 255, 35, 20, 4, 255, 32, 17, 5, 255, 38, 17, 4, 255, 38, 25, 3, 255, 43, 29, 12, 255, 52, 35, 19, 255, 70, 50, 21, 255, 72, 54, 24, 255, 70, 55, 22, 255, 69, 48, 7, 255, 72, 50, 6, 255, 74, 49, 5, 255, 72, 38, 0, 255, 67, 34, 6, 255, 70, 52, 22, 255, 72, 55, 20, 255, 68, 56, 19, 255, 82, 60, 27, 255, 88, 57, 15, 255, 75, 57, 18, 255, 66, 62, 47, 255, 65, 61, 26, 255, 69, 58, 22, 255, 71, 63, 41, 255, 71, 65, 55, 255, 73, 66, 41, 255, 80, 65, 30, 255, 88, 62, 13, 255, 85, 52, 0, 255, 77, 44, 0, 255, 78, 48, 4, 255, 85, 44, 4, 255, 86, 40, 3, 255, 83, 42, 3, 255, 82, 44, 1, 255, 84, 41, 0, 255, 98, 41, 2, 255, 107, 48, 6, 255, 95, 50, 1, 255, 96, 48, 1, 255, 98, 52, 3, 255, 99, 55, 5, 255, 94, 55, 3, 255, 98, 53, 3, 255, 97, 49, 0, 255, 107, 51, 4, 255, 108, 54, 5, 255, 97, 54, 1, 255, 91, 55, 1, 255, 98, 50, 0, 255, 112, 56, 4, 255, 109, 52, 2, 255, 103, 49, 3, 255, 98, 53, 7, 255, 94, 53, 5, 255, 92, 53, 2, 255, 96, 57, 3, 255, 99, 57, 1, 255, 101, 61, 2, 255, 99, 62, 1, 255, 106, 63, 3, 255, 111, 60, 2, 255, 107, 64, 2, 255, 103, 67, 2, 255, 107, 62, 0, 255, 116, 62, 1, 255, 115, 65, 1, 255, 115, 69, 3, 255, 118, 65, 3, 255, 113, 67, 2, 255, 107, 68, 0, 255, 116, 61, 1, 255, 119, 52, 3, 255, 124, 51, 6, 255, 122, 52, 1, 255, 117, 60, 2, 255, 122, 59, 2, 255, 119, 63, 4, 255, 115, 64, 1, 255, 114, 68, 2, 255, 119, 68, 3, 255, 128, 68, 3, 255, 130, 69, 1, 255, 135, 74, 4, 255, 132, 72, 3, 255, 129, 72, 0, 255, 135, 79, 4, 255, 130, 78, 2, 255, 133, 76, 0, 255, 136, 81, 0, 255, 133, 78, 2, 255, 133, 72, 7, 255, 126, 70, 2, 255, 137, 78, 2, 255, 133, 74, 1, 255, 130, 77, 9, 255, 112, 61, 8, 255, 109, 58, 7, 255, 123, 68, 2, 255, 141, 78, 5, 255, 130, 69, 13, 255, 98, 54, 8, 255, 98, 56, 6, 255, 97, 54, 7, 255, 106, 49, 5, 255, 99, 50, 6, 255, 100, 56, 4, 255, 103, 49, 6, 255, 102, 49, 6, 255, 103, 51, 4, 255, 101, 52, 7, 255, 99, 50, 13, 255, 101, 51, 11, 255, 102, 51, 11, 255, 102, 53, 9, 255, 102, 53, 9, 255, 104, 55, 13, 255, 101, 52, 9, 255, 104, 55, 14, 255, 100, 56, 8, 255, 98, 55, 8, 255, 102, 58, 17, 255, 106, 59, 20, 255, 104, 53, 14, 255, 105, 57, 12, 255, 104, 63, 12, 255, 102, 61, 6, 255, 101, 59, 16, 255, 104, 63, 26, 255, 98, 61, 15, 255, 98, 64, 13, 255, 100, 66, 13, 255, 98, 64, 13, 255, 100, 65, 17, 255, 103, 64, 22, 255, 102, 65, 17, 255, 104, 70, 13, 255, 101, 68, 25, 255, 97, 68, 11, 255, 98, 70, 23, 255, 103, 67, 31, 255, 104, 69, 26, 255, 101, 74, 17, 255, 101, 74, 23, 255, 105, 73, 22, 255, 105, 75, 22, 255, 98, 73, 15, 255, 103, 74, 29, 255, 102, 76, 24, 255, 105, 78, 23, 255, 108, 75, 26, 255, 106, 80, 25, 255, 106, 78, 23, 255, 111, 80, 22, 255, 104, 85, 21, 255, 110, 86, 21, 255, 113, 82, 26, 255, 100, 86, 24, 255, 102, 89, 23, 255, 111, 90, 31, 255, 105, 87, 30, 255, 107, 88, 40, 255, 109, 86, 35, 255, 108, 88, 33, 255, 104, 87, 36, 255, 101, 88, 38, 255, 104, 91, 30, 255, 114, 93, 27, 255, 111, 91, 30, 255, 107, 90, 29, 255, 122, 93, 27, 255, 134, 90, 30, 255, 121, 90, 22, 255, 123, 93, 28, 255, 115, 90, 25, 255, 115, 89, 20, 255, 109, 91, 28, 255, 111, 87, 35, 255, 114, 87, 21, 255, 118, 90, 26, 255, 113, 90, 26, 255, 113, 92, 25, 255, 111, 87, 24, 255, 115, 87, 21, 255, 113, 85, 16, 255, 112, 83, 27, 255, 108, 86, 9, 255, 110, 84, 30, 255, 108, 77, 34, 255, 112, 79, 15, 255, 109, 80, 14, 255, 106, 78, 22, 255, 112, 75, 19, 255, 113, 79, 10, 255, 118, 80, 16, 255, 109, 73, 13, 255, 104, 73, 18, 255, 108, 74, 9, 255, 113, 73, 14, 255, 115, 75, 19, 255, 114, 77, 14, 255, 107, 72, 7, 255, 107, 72, 10, 255, 108, 70, 15, 255, 109, 69, 17, 255, 106, 66, 10, 255, 107, 68, 6, 255, 113, 70, 6, 255, 117, 67, 9, 255, 112, 64, 5, 255, 109, 62, 12, 255, 104, 61, 7, 255, 106, 66, 0, 255, 109, 66, 1, 255, 110, 62, 1, 255, 111, 61, 4, 255, 109, 59, 7, 255, 110, 58, 4, 255, 110, 60, 4, 255, 105, 58, 4, 255, 103, 56, 5, 255, 103, 53, 6, 255, 103, 53, 4, 255, 110, 60, 2, 255, 105, 53, 5, 255, 103, 51, 10, 255, 100, 50, 0, 255, 103, 50, 4, 255, 101, 51, 6, 255, 102, 54, 5, 255, 101, 51, 3, 255, 94, 41, 5, 255, 100, 48, 4, 255, 103, 50, 5, 255, 101, 49, 4, 255, 104, 49, 2, 255, 99, 49, 3, 255, 94, 50, 6, 255, 93, 43, 1, 255, 91, 45, 2, 255, 86, 44, 0, 255, 87, 39, 2, 255, 93, 40, 3, 255, 89, 42, 3, 255, 88, 41, 5, 255, 79, 40, 4, 255, 76, 32, 1, 255, 73, 33, 0, 255, 77, 38, 2, 255, 70, 32, 4, 255, 70, 31, 9, 255, 69, 32, 4, 255, 68, 33, 0, 255, 58, 27, 2, 255, 63, 37, 3, 255, 91, 38, 3, 255, 95, 36, 1, 255, 92, 42, 1, 255, 92, 40, 2, 255, 84, 31, 5, 255, 75, 31, 6, 255, 82, 35, 3, 255, 77, 35, 1, 255, 71, 32, 2, 255, 73, 25, 5, 255, 74, 28, 4, 255, 76, 32, 0, 255, 77, 26, 1, 255, 77, 28, 4, 255, 79, 35, 3, 255, 76, 28, 2, 255, 73, 27, 0, 255, 71, 28, 4, 255, 75, 26, 6, 255, 72, 23, 1, 255, 75, 27, 4, 255, 71, 26, 2, 255, 64, 23, 1, 255, 63, 25, 4, 255, 58, 22, 3, 255, 59, 25, 3, 255, 67, 28, 2, 255, 74, 30, 7, 255, 75, 30, 6, 255, 75, 28, 3, 255, 73, 23, 8, 255, 71, 29, 2, 255, 86, 34, 3, 255, 110, 44, 4, 255, 122, 46, 1, 255, 129, 46, 1, 255, 138, 51, 2, 255, 145, 53, 1, 255, 139, 49, 1, 255, 141, 47, 6, 255, 134, 46, 3, 255, 140, 45, 1, 255, 138, 46, 1, 255, 141, 46, 2, 255, 142, 47, 1, 255, 145, 49, 2, 255, 146, 50, 2, 255, 147, 50, 5, 255, 143, 45, 2, 255, 145, 48, 3, 255, 145, 48, 3, 255, 147, 49, 4, 255, 145, 47, 4, 255, 136, 40, 0, 255, 125, 34, 1, 255, 117, 31, 3, 255, 111, 30, 5, 255, 105, 27, 1, 255, 108, 29, 2, 255, 103, 26, 2, 255, 114, 30, 5, 255, 120, 31, 4, 255, 121, 33, 3, 255, 122, 36, 3, 255, 121, 31, 0, 255, 125, 35, 4, 255, 112, 29, 4, 255, 95, 21, 2, 255, 93, 24, 8, 255, 90, 23, 3, 255, 89, 23, 6, 255, 88, 23, 1, 255, 86, 21, 0, 255, 87, 21, 5, 255, 89, 23, 2, 255, 85, 20, 5, 255, 80, 21, 4, 255, 80, 20, 2, 255, 71, 17, 4, 255, 54, 10, 5, 255, 48, 12, 5, 255, 52, 16, 1, 255, 69, 20, 2, 255, 80, 25, 5, 255, 79, 25, 4, 255, 71, 21, 2, 255, 64, 19, 3, 255, 61, 16, 5, 255, 57, 13, 3, 255, 60, 15, 5, 255, 61, 15, 6, 255, 60, 16, 1, 255, 70, 17, 2, 255, 77, 18, 1, 255, 81, 23, 1, 255, 84, 25, 4, 255, 84, 24, 0, 255, 83, 23, 4, 255, 79, 19, 2, 255, 85, 24, 1, 255, 90, 23, 3, 255, 92, 25, 4, 255, 93, 27, 2, 255, 94, 26, 1, 255, 108, 34, 4, 255, 109, 34, 2, 255, 111, 36, 1, 255, 112, 38, 0, 255, 110, 37, 1, 255, 113, 40, 4, 255, 111, 37, 2, 255, 21, 13, 5, 255, 20, 11, 6, 255, 16, 7, 3, 255, 17, 10, 2, 255, 17, 11, 1, 255, 19, 12, 1, 255, 18, 11, 1, 255, 19, 10, 2, 255, 23, 13, 4, 255, 24, 10, 3, 255, 20, 8, 1, 255, 15, 7, 0, 255, 17, 10, 2, 255, 20, 11, 4, 255, 17, 10, 2, 255, 20, 12, 3, 255, 24, 14, 4, 255, 23, 10, 2, 255, 25, 12, 2, 255, 25, 11, 5, 255, 27, 16, 4, 255, 32, 16, 1, 255, 37, 19, 3, 255, 29, 17, 1, 255, 30, 18, 3, 255, 37, 20, 7, 255, 26, 18, 4, 255, 25, 13, 4, 255, 27, 12, 3, 255, 27, 16, 3, 255, 30, 14, 2, 255, 28, 15, 5, 255, 28, 16, 1, 255, 40, 20, 6, 255, 33, 17, 3, 255, 32, 14, 3, 255, 37, 17, 3, 255, 45, 27, 6, 255, 53, 33, 10, 255, 54, 43, 25, 255, 55, 51, 23, 255, 64, 57, 21, 255, 73, 56, 23, 255, 76, 48, 9, 255, 66, 42, 3, 255, 72, 46, 10, 255, 68, 37, 0, 255, 70, 40, 13, 255, 77, 54, 32, 255, 80, 54, 16, 255, 81, 55, 11, 255, 78, 59, 16, 255, 81, 48, 21, 255, 78, 54, 31, 255, 70, 61, 41, 255, 67, 60, 28, 255, 76, 60, 23, 255, 75, 60, 36, 255, 75, 66, 53, 255, 75, 66, 48, 255, 82, 66, 33, 255, 84, 61, 9, 255, 82, 52, 6, 255, 79, 49, 8, 255, 79, 44, 4, 255, 83, 45, 7, 255, 78, 40, 2, 255, 82, 44, 5, 255, 80, 43, 2, 255, 81, 46, 2, 255, 85, 49, 2, 255, 93, 48, 0, 255, 97, 48, 1, 255, 95, 47, 1, 255, 92, 50, 3, 255, 93, 50, 1, 255, 93, 52, 2, 255, 97, 48, 2, 255, 100, 52, 4, 255, 105, 52, 4, 255, 102, 52, 3, 255, 96, 53, 3, 255, 97, 52, 4, 255, 102, 52, 2, 255, 105, 53, 4, 255, 104, 53, 3, 255, 99, 50, 1, 255, 96, 51, 1, 255, 94, 55, 1, 255, 96, 59, 4, 255, 101, 58, 5, 255, 106, 54, 1, 255, 110, 53, 3, 255, 111, 56, 3, 255, 110, 60, 3, 255, 107, 62, 1, 255, 110, 61, 5, 255, 110, 60, 2, 255, 114, 62, 2, 255, 110, 64, 3, 255, 109, 67, 4, 255, 117, 63, 4, 255, 116, 56, 0, 255, 115, 67, 1, 255, 119, 70, 1, 255, 126, 57, 2, 255, 128, 54, 2, 255, 124, 64, 5, 255, 115, 64, 1, 255, 122, 66, 2, 255, 116, 67, 3, 255, 109, 63, 2, 255, 114, 61, 5, 255, 113, 65, 3, 255, 122, 71, 3, 255, 125, 70, 8, 255, 126, 69, 5, 255, 123, 59, 3, 255, 119, 48, 7, 255, 125, 60, 2, 255, 136, 76, 2, 255, 128, 70, 6, 255, 129, 73, 4, 255, 134, 74, 2, 255, 138, 77, 6, 255, 131, 69, 6, 255, 130, 66, 4, 255, 134, 70, 2, 255, 137, 75, 6, 255, 138, 75, 3, 255, 139, 77, 2, 255, 141, 81, 0, 255, 135, 76, 4, 255, 130, 73, 3, 255, 116, 62, 4, 255, 120, 66, 5, 255, 135, 77, 4, 255, 113, 62, 2, 255, 97, 51, 1, 255, 93, 52, 7, 255, 96, 51, 5, 255, 99, 54, 8, 255, 94, 50, 4, 255, 102, 54, 5, 255, 104, 50, 6, 255, 103, 50, 10, 255, 98, 53, 5, 255, 100, 53, 4, 255, 101, 51, 7, 255, 102, 55, 6, 255, 104, 55, 14, 255, 99, 53, 12, 255, 99, 55, 11, 255, 102, 55, 14, 255, 102, 55, 14, 255, 105, 57, 17, 255, 108, 54, 14, 255, 104, 59, 13, 255, 98, 61, 10, 255, 106, 63, 15, 255, 107, 59, 16, 255, 103, 60, 6, 255, 106, 64, 12, 255, 102, 60, 19, 255, 102, 60, 28, 255, 105, 65, 22, 255, 107, 65, 19, 255, 107, 64, 16, 255, 105, 61, 20, 255, 107, 64, 21, 255, 107, 69, 14, 255, 101, 64, 22, 255, 105, 71, 19, 255, 106, 73, 15, 255, 110, 72, 19, 255, 110, 70, 24, 255, 109, 69, 29, 255, 106, 71, 25, 255, 105, 75, 15, 255, 103, 75, 23, 255, 98, 80, 25, 255, 109, 76, 25, 255, 106, 75, 23, 255, 103, 80, 31, 255, 107, 81, 32, 255, 101, 82, 31, 255, 107, 79, 37, 255, 111, 80, 24, 255, 108, 84, 28, 255, 108, 81, 32, 255, 115, 82, 22, 255, 110, 91, 21, 255, 104, 86, 30, 255, 107, 82, 36, 255, 107, 84, 36, 255, 108, 88, 32, 255, 109, 88, 26, 255, 107, 90, 30, 255, 102, 89, 35, 255, 104, 90, 36, 255, 106, 89, 39, 255, 109, 92, 30, 255, 111, 92, 27, 255, 110, 90, 25, 255, 111, 92, 25, 255, 114, 88, 30, 255, 114, 88, 29, 255, 126, 97, 21, 255, 119, 92, 28, 255, 118, 88, 27, 255, 124, 85, 38, 255, 126, 88, 27, 255, 120, 89, 17, 255, 114, 88, 22, 255, 112, 90, 20, 255, 115, 88, 20, 255, 119, 84, 28, 255, 119, 85, 17, 255, 118, 89, 17, 255, 112, 83, 17, 255, 112, 85, 22, 255, 106, 82, 19, 255, 108, 81, 18, 255, 111, 80, 17, 255, 111, 78, 19, 255, 110, 80, 11, 255, 116, 78, 16, 255, 113, 77, 14, 255, 113, 76, 17, 255, 108, 75, 14, 255, 106, 76, 17, 255, 106, 71, 25, 255, 111, 72, 24, 255, 112, 73, 18, 255, 115, 77, 17, 255, 108, 72, 9, 255, 110, 73, 7, 255, 110, 72, 5, 255, 111, 70, 16, 255, 108, 66, 15, 255, 107, 65, 7, 255, 109, 65, 5, 255, 114, 63, 10, 255, 106, 60, 13, 255, 107, 63, 9, 255, 108, 66, 7, 255, 104, 60, 6, 255, 108, 59, 9, 255, 110, 57, 4, 255, 110, 59, 8, 255, 105, 57, 6, 255, 106, 60, 2, 255, 106, 61, 4, 255, 104, 57, 8, 255, 103, 55, 8, 255, 103, 55, 5, 255, 101, 51, 4, 255, 106, 54, 6, 255, 106, 54, 8, 255, 101, 52, 5, 255, 101, 52, 7, 255, 101, 47, 3, 255, 99, 51, 5, 255, 96, 50, 4, 255, 97, 52, 3, 255, 92, 47, 7, 255, 91, 47, 3, 255, 92, 43, 2, 255, 99, 45, 5, 255, 107, 50, 8, 255, 97, 49, 2, 255, 91, 51, 5, 255, 94, 43, 8, 255, 93, 42, 8, 255, 92, 43, 4, 255, 86, 43, 4, 255, 87, 42, 4, 255, 87, 43, 4, 255, 81, 42, 6, 255, 77, 38, 4, 255, 84, 34, 2, 255, 80, 38, 2, 255, 83, 39, 6, 255, 80, 36, 7, 255, 78, 35, 5, 255, 81, 35, 4, 255, 70, 29, 0, 255, 75, 35, 6, 255, 98, 44, 4, 255, 99, 45, 3, 255, 97, 39, 4, 255, 99, 36, 5, 255, 107, 43, 2, 255, 104, 52, 3, 255, 108, 47, 4, 255, 114, 47, 3, 255, 105, 44, 1, 255, 97, 42, 5, 255, 82, 30, 4, 255, 84, 29, 6, 255, 87, 31, 5, 255, 77, 27, 1, 255, 72, 28, 3, 255, 78, 31, 5, 255, 74, 30, 4, 255, 74, 28, 2, 255, 74, 28, 3, 255, 77, 25, 4, 255, 77, 26, 5, 255, 73, 25, 2, 255, 70, 27, 3, 255, 65, 24, 2, 255, 67, 21, 2, 255, 61, 21, 3, 255, 54, 23, 2, 255, 69, 28, 4, 255, 77, 29, 6, 255, 80, 30, 3, 255, 82, 28, 0, 255, 89, 25, 4, 255, 84, 24, 6, 255, 98, 32, 7, 255, 119, 44, 3, 255, 130, 52, 1, 255, 133, 49, 3, 255, 140, 49, 3, 255, 143, 47, 1, 255, 145, 51, 3, 255, 140, 48, 2, 255, 134, 46, 1, 255, 139, 44, 2, 255, 141, 46, 4, 255, 139, 44, 1, 255, 144, 48, 4, 255, 146, 47, 2, 255, 145, 47, 2, 255, 144, 47, 4, 255, 142, 45, 3, 255, 142, 45, 2, 255, 145, 48, 3, 255, 144, 45, 2, 255, 141, 42, 1, 255, 137, 41, 2, 255, 129, 39, 5, 255, 119, 33, 3, 255, 115, 33, 7, 255, 113, 30, 3, 255, 111, 26, 0, 255, 99, 25, 1, 255, 106, 30, 4, 255, 115, 31, 3, 255, 110, 31, 4, 255, 112, 34, 1, 255, 127, 39, 5, 255, 129, 37, 4, 255, 117, 34, 3, 255, 97, 24, 1, 255, 92, 23, 1, 255, 90, 21, 2, 255, 89, 20, 4, 255, 89, 22, 2, 255, 89, 24, 4, 255, 87, 21, 3, 255, 87, 21, 1, 255, 87, 20, 3, 255, 84, 21, 0, 255, 83, 24, 1, 255, 77, 22, 3, 255, 66, 16, 6, 255, 55, 13, 2, 255, 53, 20, 1, 255, 63, 20, 2, 255, 69, 21, 3, 255, 80, 26, 3, 255, 94, 33, 2, 255, 98, 36, 1, 255, 88, 31, 2, 255, 78, 23, 2, 255, 72, 20, 1, 255, 67, 18, 2, 255, 64, 15, 3, 255, 69, 15, 0, 255, 87, 21, 3, 255, 90, 26, 7, 255, 86, 24, 6, 255, 80, 20, 1, 255, 77, 20, 3, 255, 74, 16, 1, 255, 84, 24, 4, 255, 81, 21, 4, 255, 84, 23, 5, 255, 88, 25, 1, 255, 93, 27, 2, 255, 95, 27, 1, 255, 96, 27, 2, 255, 100, 29, 2, 255, 107, 34, 2, 255, 114, 37, 5, 255, 114, 36, 4, 255, 112, 34, 2, 255, 16, 12, 3, 255, 17, 10, 6, 255, 15, 6, 4, 255, 18, 9, 3, 255, 21, 12, 3, 255, 17, 13, 1, 255, 18, 12, 3, 255, 18, 8, 2, 255, 20, 9, 2, 255, 20, 9, 2, 255, 19, 8, 3, 255, 17, 8, 1, 255, 18, 10, 4, 255, 18, 10, 3, 255, 17, 10, 1, 255, 18, 11, 1, 255, 25, 14, 5, 255, 24, 10, 2, 255, 26, 14, 5, 255, 27, 12, 4, 255, 28, 15, 2, 255, 28, 18, 1, 255, 33, 22, 5, 255, 28, 21, 4, 255, 28, 16, 2, 255, 30, 13, 3, 255, 21, 12, 2, 255, 25, 11, 1, 255, 34, 18, 9, 255, 28, 17, 8, 255, 26, 14, 4, 255, 26, 19, 3, 255, 32, 17, 2, 255, 26, 17, 1, 255, 33, 17, 2, 255, 31, 19, 2, 255, 40, 23, 5, 255, 45, 25, 2, 255, 49, 33, 5, 255, 60, 45, 25, 255, 61, 46, 27, 255, 69, 57, 39, 255, 68, 59, 31, 255, 74, 56, 12, 255, 65, 41, 9, 255, 71, 46, 11, 255, 63, 40, 3, 255, 64, 44, 24, 255, 70, 55, 31, 255, 80, 53, 17, 255, 81, 51, 10, 255, 78, 59, 30, 255, 89, 57, 15, 255, 76, 55, 23, 255, 66, 54, 28, 255, 68, 60, 29, 255, 73, 60, 32, 255, 74, 60, 39, 255, 81, 68, 36, 255, 79, 66, 27, 255, 84, 65, 25, 255, 86, 59, 8, 255, 84, 51, 7, 255, 80, 46, 5, 255, 82, 43, 3, 255, 80, 44, 4, 255, 82, 43, 4, 255, 83, 40, 2, 255, 85, 43, 1, 255, 84, 50, 3, 255, 79, 50, 1, 255, 88, 49, 1, 255, 86, 47, 0, 255, 89, 50, 3, 255, 89, 48, 2, 255, 100, 48, 3, 255, 100, 50, 4, 255, 90, 47, 2, 255, 88, 50, 2, 255, 93, 53, 4, 255, 91, 53, 3, 255, 87, 49, 1, 255, 94, 44, 2, 255, 88, 49, 2, 255, 86, 52, 2, 255, 91, 55, 3, 255, 91, 54, 0, 255, 100, 58, 2, 255, 103, 58, 1, 255, 108, 56, 2, 255, 112, 51, 2, 255, 111, 49, 0, 255, 112, 47, 1, 255, 117, 52, 5, 255, 110, 58, 3, 255, 102, 61, 0, 255, 108, 62, 4, 255, 115, 59, 1, 255, 118, 61, 2, 255, 112, 63, 2, 255, 109, 63, 2, 255, 114, 62, 1, 255, 116, 65, 0, 255, 114, 68, 4, 255, 112, 68, 4, 255, 116, 64, 2, 255, 115, 62, 0, 255, 113, 65, 0, 255, 115, 62, 2, 255, 119, 57, 8, 255, 118, 57, 4, 255, 117, 50, 5, 255, 126, 56, 3, 255, 123, 67, 0, 255, 119, 60, 5, 255, 121, 53, 4, 255, 123, 59, 2, 255, 117, 54, 4, 255, 107, 43, 5, 255, 121, 59, 7, 255, 126, 64, 3, 255, 123, 60, 4, 255, 128, 75, 5, 255, 132, 75, 1, 255, 141, 80, 4, 255, 129, 71, 1, 255, 134, 69, 3, 255, 142, 75, 7, 255, 137, 74, 3, 255, 136, 74, 3, 255, 141, 82, 5, 255, 138, 79, 5, 255, 126, 67, 4, 255, 133, 80, 1, 255, 132, 78, 3, 255, 144, 76, 3, 255, 147, 73, 1, 255, 130, 67, 2, 255, 102, 58, 3, 255, 103, 61, 5, 255, 109, 64, 2, 255, 100, 57, 3, 255, 98, 52, 1, 255, 103, 54, 4, 255, 100, 51, 8, 255, 102, 51, 13, 255, 101, 50, 5, 255, 101, 56, 3, 255, 102, 56, 1, 255, 104, 59, 6, 255, 104, 59, 6, 255, 106, 60, 10, 255, 107, 62, 12, 255, 105, 57, 8, 255, 104, 56, 13, 255, 98, 56, 8, 255, 107, 59, 7, 255, 110, 56, 3, 255, 112, 62, 9, 255, 110, 63, 14, 255, 107, 60, 18, 255, 108, 63, 13, 255, 106, 62, 13, 255, 106, 62, 17, 255, 108, 64, 22, 255, 109, 66, 8, 255, 110, 66, 12, 255, 109, 63, 17, 255, 109, 66, 20, 255, 108, 68, 16, 255, 108, 70, 23, 255, 109, 70, 28, 255, 112, 72, 18, 255, 112, 71, 18, 255, 107, 72, 29, 255, 102, 74, 19, 255, 106, 71, 38, 255, 107, 72, 23, 255, 106, 73, 22, 255, 112, 75, 25, 255, 103, 73, 27, 255, 111, 75, 20, 255, 117, 83, 22, 255, 106, 82, 21, 255, 108, 82, 21, 255, 107, 85, 26, 255, 105, 84, 33, 255, 108, 83, 30, 255, 110, 86, 19, 255, 107, 81, 38, 255, 112, 81, 33, 255, 107, 86, 27, 255, 110, 89, 39, 255, 104, 84, 29, 255, 110, 87, 35, 255, 111, 87, 40, 255, 108, 90, 21, 255, 107, 88, 27, 255, 105, 89, 26, 255, 109, 91, 22, 255, 112, 91, 35, 255, 109, 91, 33, 255, 111, 90, 33, 255, 110, 89, 29, 255, 109, 88, 34, 255, 109, 88, 39, 255, 106, 92, 32, 255, 112, 94, 24, 255, 114, 88, 29, 255, 110, 87, 31, 255, 115, 92, 17, 255, 121, 93, 13, 255, 116, 91, 25, 255, 106, 89, 18, 255, 112, 88, 33, 255, 113, 84, 33, 255, 116, 86, 26, 255, 114, 85, 22, 255, 113, 82, 28, 255, 113, 83, 13, 255, 112, 82, 20, 255, 110, 82, 14, 255, 113, 86, 11, 255, 110, 80, 11, 255, 110, 78, 23, 255, 109, 76, 12, 255, 110, 75, 12, 255, 112, 74, 18, 255, 112, 76, 12, 255, 111, 76, 5, 255, 110, 77, 10, 255, 104, 72, 16, 255, 107, 70, 14, 255, 109, 69, 12, 255, 114, 72, 10, 255, 117, 70, 7, 255, 117, 68, 16, 255, 110, 69, 11, 255, 112, 68, 7, 255, 114, 68, 8, 255, 111, 68, 7, 255, 111, 66, 7, 255, 110, 62, 3, 255, 111, 61, 14, 255, 110, 60, 10, 255, 107, 58, 0, 255, 111, 62, 8, 255, 107, 58, 13, 255, 106, 57, 12, 255, 103, 57, 4, 255, 105, 59, 5, 255, 102, 57, 5, 255, 104, 58, 7, 255, 105, 57, 6, 255, 104, 53, 5, 255, 106, 55, 7, 255, 105, 53, 9, 255, 101, 50, 3, 255, 102, 52, 5, 255, 100, 54, 5, 255, 105, 57, 7, 255, 109, 55, 6, 255, 104, 50, 7, 255, 96, 46, 3, 255, 96, 49, 5, 255, 95, 52, 5, 255, 91, 47, 7, 255, 94, 44, 7, 255, 101, 45, 7, 255, 99, 44, 6, 255, 91, 46, 4, 255, 87, 47, 3, 255, 97, 45, 7, 255, 100, 46, 8, 255, 97, 45, 5, 255, 108, 47, 5, 255, 107, 44, 2, 255, 100, 42, 4, 255, 82, 39, 5, 255, 76, 34, 3, 255, 85, 41, 6, 255, 80, 40, 3, 255, 78, 33, 5, 255, 80, 35, 4, 255, 77, 33, 0, 255, 88, 35, 4, 255, 79, 33, 5, 255, 83, 36, 4, 255, 97, 42, 1, 255, 110, 48, 4, 255, 108, 44, 6, 255, 94, 34, 2, 255, 105, 42, 1, 255, 125, 48, 3, 255, 133, 46, 3, 255, 127, 48, 1, 255, 129, 48, 2, 255, 125, 49, 5, 255, 99, 39, 1, 255, 92, 34, 3, 255, 94, 34, 7, 255, 85, 26, 4, 255, 75, 23, 5, 255, 75, 25, 5, 255, 67, 25, 3, 255, 81, 26, 3, 255, 87, 33, 6, 255, 81, 31, 5, 255, 80, 28, 1, 255, 81, 28, 2, 255, 78, 28, 3, 255, 74, 28, 3, 255, 72, 24, 2, 255, 71, 21, 2, 255, 66, 20, 3, 255, 69, 22, 1, 255, 83, 27, 3, 255, 87, 32, 2, 255, 89, 34, 1, 255, 101, 38, 0, 255, 102, 33, 5, 255, 113, 39, 7, 255, 127, 48, 4, 255, 135, 55, 4, 255, 136, 48, 4, 255, 143, 44, 5, 255, 144, 46, 2, 255, 142, 50, 3, 255, 137, 49, 0, 255, 143, 51, 5, 255, 140, 46, 4, 255, 141, 45, 3, 255, 140, 45, 1, 255, 143, 47, 3, 255, 147, 49, 4, 255, 145, 47, 2, 255, 139, 42, 0, 255, 140, 43, 1, 255, 142, 45, 1, 255, 142, 44, 2, 255, 141, 43, 2, 255, 139, 41, 3, 255, 132, 36, 2, 255, 126, 35, 3, 255, 120, 33, 2, 255, 116, 29, 2, 255, 114, 30, 2, 255, 112, 30, 1, 255, 107, 27, 2, 255, 100, 25, 0, 255, 105, 29, 0, 255, 105, 24, 1, 255, 119, 33, 3, 255, 125, 38, 5, 255, 126, 33, 0, 255, 130, 35, 6, 255, 113, 26, 3, 255, 96, 21, 0, 255, 86, 19, 1, 255, 91, 24, 4, 255, 91, 23, 5, 255, 92, 24, 5, 255, 90, 22, 2, 255, 88, 21, 3, 255, 88, 22, 3, 255, 90, 27, 1, 255, 91, 25, 2, 255, 81, 21, 1, 255, 69, 19, 2, 255, 67, 22, 3, 255, 58, 16, 2, 255, 53, 14, 2, 255, 57, 18, 0, 255, 70, 22, 0, 255, 92, 28, 1, 255, 108, 33, 2, 255, 107, 38, 2, 255, 104, 38, 4, 255, 104, 34, 4, 255, 95, 31, 4, 255, 93, 35, 3, 255, 96, 26, 0, 255, 95, 26, 6, 255, 83, 22, 4, 255, 72, 16, 1, 255, 69, 17, 0, 255, 68, 16, 2, 255, 73, 17, 3, 255, 80, 23, 2, 255, 73, 19, 1, 255, 74, 18, 1, 255, 85, 24, 1, 255, 92, 30, 3, 255, 90, 25, 1, 255, 88, 23, 1, 255, 99, 30, 4, 255, 108, 34, 2, 255, 114, 36, 1, 255, 111, 34, 0, 255, 112, 36, 2, 255, 17, 9, 1, 255, 14, 8, 2, 255, 10, 7, 2, 255, 16, 12, 5, 255, 17, 9, 1, 255, 19, 8, 2, 255, 16, 10, 2, 255, 15, 9, 1, 255, 18, 9, 3, 255, 18, 8, 2, 255, 20, 9, 3, 255, 19, 10, 3, 255, 19, 11, 5, 255, 18, 8, 1, 255, 19, 11, 1, 255, 21, 12, 3, 255, 24, 14, 4, 255, 22, 9, 0, 255, 23, 12, 2, 255, 31, 17, 8, 255, 31, 18, 5, 255, 33, 17, 2, 255, 31, 13, 0, 255, 29, 15, 2, 255, 30, 16, 3, 255, 26, 12, 4, 255, 22, 17, 7, 255, 25, 15, 0, 255, 29, 15, 1, 255, 25, 15, 2, 255, 29, 16, 6, 255, 23, 15, 4, 255, 32, 16, 1, 255, 41, 16, 2, 255, 36, 21, 3, 255, 39, 23, 6, 255, 41, 17, 1, 255, 51, 25, 2, 255, 50, 33, 5, 255, 50, 36, 18, 255, 64, 44, 15, 255, 70, 55, 22, 255, 69, 59, 31, 255, 73, 58, 20, 255, 69, 51, 13, 255, 68, 52, 4, 255, 56, 42, 1, 255, 60, 49, 33, 255, 65, 57, 28, 255, 74, 48, 18, 255, 82, 49, 26, 255, 76, 57, 29, 255, 76, 50, 23, 255, 68, 55, 28, 255, 69, 54, 16, 255, 73, 54, 25, 255, 75, 63, 22, 255, 73, 61, 37, 255, 83, 62, 48, 255, 84, 67, 37, 255, 90, 64, 36, 255, 92, 58, 14, 255, 89, 49, 2, 255, 85, 43, 2, 255, 80, 40, 2, 255, 87, 42, 4, 255, 89, 41, 4, 255, 91, 43, 4, 255, 88, 41, 0, 255, 93, 47, 2, 255, 96, 48, 3, 255, 98, 47, 3, 255, 96, 48, 2, 255, 103, 45, 3, 255, 109, 42, 6, 255, 105, 42, 4, 255, 95, 48, 3, 255, 94, 50, 5, 255, 92, 50, 2, 255, 89, 47, 1, 255, 87, 49, 2, 255, 85, 50, 4, 255, 90, 49, 5, 255, 96, 51, 3, 255, 92, 51, 1, 255, 94, 55, 3, 255, 102, 55, 3, 255, 114, 56, 5, 255, 111, 52, 3, 255, 115, 50, 3, 255, 119, 51, 2, 255, 110, 54, 1, 255, 110, 54, 4, 255, 116, 50, 5, 255, 115, 51, 3, 255, 113, 54, 1, 255, 113, 55, 3, 255, 111, 59, 1, 255, 106, 65, 2, 255, 110, 64, 4, 255, 115, 56, 1, 255, 117, 60, 2, 255, 115, 66, 2, 255, 113, 66, 2, 255, 111, 63, 5, 255, 109, 66, 7, 255, 102, 65, 1, 255, 110, 58, 2, 255, 122, 48, 5, 255, 120, 44, 1, 255, 114, 51, 4, 255, 112, 45, 3, 255, 119, 42, 3, 255, 119, 53, 5, 255, 116, 59, 6, 255, 120, 64, 5, 255, 124, 67, 1, 255, 119, 57, 2, 255, 121, 58, 3, 255, 128, 70, 5, 255, 122, 67, 1, 255, 124, 74, 2, 255, 127, 75, 3, 255, 131, 73, 6, 255, 131, 71, 2, 255, 137, 74, 3, 255, 130, 68, 4, 255, 122, 55, 4, 255, 129, 67, 0, 255, 141, 77, 1, 255, 130, 62, 2, 255, 124, 53, 2, 255, 122, 48, 7, 255, 133, 59, 8, 255, 130, 65, 4, 255, 143, 81, 4, 255, 139, 78, 5, 255, 139, 76, 5, 255, 133, 73, 10, 255, 139, 73, 4, 255, 139, 76, 5, 255, 128, 74, 3, 255, 129, 72, 8, 255, 123, 73, 8, 255, 107, 63, 9, 255, 98, 55, 14, 255, 105, 57, 13, 255, 100, 56, 9, 255, 99, 55, 11, 255, 101, 57, 10, 255, 98, 54, 10, 255, 106, 59, 16, 255, 106, 60, 11, 255, 101, 55, 8, 255, 105, 54, 12, 255, 110, 57, 17, 255, 106, 62, 19, 255, 107, 63, 17, 255, 105, 55, 12, 255, 106, 60, 13, 255, 105, 62, 16, 255, 104, 62, 16, 255, 105, 62, 16, 255, 110, 69, 16, 255, 107, 67, 15, 255, 106, 67, 14, 255, 107, 67, 18, 255, 106, 69, 12, 255, 104, 69, 15, 255, 104, 71, 14, 255, 106, 72, 24, 255, 104, 67, 20, 255, 108, 70, 18, 255, 115, 78, 24, 255, 114, 72, 38, 255, 110, 74, 23, 255, 106, 75, 28, 255, 104, 72, 30, 255, 106, 72, 24, 255, 108, 74, 25, 255, 105, 76, 36, 255, 106, 81, 21, 255, 110, 80, 20, 255, 108, 81, 28, 255, 111, 85, 23, 255, 114, 83, 32, 255, 104, 85, 25, 255, 107, 84, 38, 255, 107, 83, 29, 255, 104, 83, 34, 255, 108, 85, 37, 255, 106, 88, 32, 255, 111, 93, 29, 255, 104, 86, 33, 255, 111, 88, 32, 255, 115, 90, 25, 255, 112, 93, 26, 255, 114, 91, 36, 255, 110, 85, 38, 255, 110, 89, 29, 255, 112, 90, 30, 255, 112, 91, 28, 255, 112, 91, 29, 255, 112, 92, 28, 255, 113, 91, 31, 255, 116, 91, 27, 255, 118, 96, 31, 255, 113, 91, 23, 255, 112, 89, 27, 255, 105, 92, 30, 255, 111, 90, 28, 255, 114, 89, 36, 255, 116, 91, 27, 255, 117, 92, 10, 255, 116, 87, 25, 255, 117, 88, 27, 255, 115, 83, 20, 255, 115, 86, 24, 255, 111, 84, 29, 255, 111, 82, 23, 255, 109, 79, 19, 255, 110, 81, 22, 255, 116, 84, 27, 255, 113, 79, 22, 255, 107, 80, 23, 255, 107, 74, 29, 255, 103, 77, 22, 255, 106, 74, 14, 255, 106, 74, 15, 255, 108, 73, 24, 255, 114, 72, 18, 255, 113, 70, 20, 255, 113, 71, 18, 255, 111, 72, 10, 255, 110, 70, 8, 255, 115, 70, 8, 255, 113, 67, 11, 255, 113, 68, 6, 255, 115, 67, 7, 255, 118, 69, 11, 255, 111, 65, 7, 255, 110, 66, 6, 255, 110, 65, 5, 255, 110, 66, 4, 255, 110, 61, 10, 255, 115, 64, 12, 255, 113, 64, 3, 255, 109, 59, 3, 255, 107, 58, 12, 255, 105, 57, 7, 255, 106, 57, 4, 255, 107, 60, 6, 255, 105, 58, 7, 255, 106, 54, 8, 255, 107, 54, 8, 255, 108, 55, 5, 255, 104, 52, 6, 255, 100, 53, 1, 255, 103, 57, 7, 255, 96, 51, 2, 255, 102, 56, 2, 255, 109, 52, 4, 255, 100, 48, 4, 255, 97, 48, 1, 255, 107, 54, 8, 255, 102, 52, 0, 255, 92, 44, 2, 255, 94, 46, 2, 255, 99, 48, 3, 255, 94, 47, 4, 255, 89, 45, 3, 255, 95, 49, 4, 255, 107, 49, 4, 255, 101, 45, 0, 255, 99, 50, 3, 255, 108, 46, 6, 255, 103, 41, 3, 255, 98, 43, 4, 255, 87, 35, 2, 255, 82, 35, 2, 255, 93, 49, 5, 255, 93, 38, 2, 255, 77, 35, 2, 255, 80, 37, 3, 255, 80, 34, 8, 255, 87, 31, 8, 255, 83, 33, 1, 255, 90, 39, 2, 255, 108, 42, 3, 255, 119, 44, 1, 255, 117, 48, 3, 255, 101, 40, 3, 255, 103, 34, 3, 255, 107, 34, 1, 255, 115, 49, 3, 255, 125, 48, 2, 255, 129, 47, 3, 255, 129, 51, 2, 255, 119, 48, 0, 255, 100, 40, 0, 255, 94, 34, 3, 255, 97, 33, 3, 255, 84, 25, 0, 255, 70, 28, 2, 255, 69, 25, 4, 255, 87, 27, 3, 255, 90, 31, 3, 255, 87, 32, 3, 255, 90, 33, 1, 255, 91, 29, 0, 255, 90, 30, 1, 255, 86, 30, 1, 255, 82, 31, 3, 255, 84, 31, 4, 255, 79, 29, 3, 255, 71, 25, 1, 255, 94, 36, 8, 255, 106, 38, 8, 255, 103, 36, 3, 255, 109, 41, 1, 255, 118, 43, 1, 255, 133, 48, 4, 255, 142, 53, 3, 255, 140, 54, 0, 255, 137, 53, 3, 255, 136, 51, 2, 255, 141, 50, 2, 255, 143, 47, 2, 255, 138, 49, 2, 255, 146, 50, 2, 255, 143, 45, 1, 255, 146, 44, 4, 255, 144, 48, 5, 255, 143, 47, 1, 255, 148, 51, 3, 255, 145, 47, 1, 255, 143, 47, 2, 255, 143, 46, 3, 255, 144, 47, 2, 255, 140, 44, 2, 255, 140, 43, 4, 255, 138, 41, 4, 255, 127, 33, 0, 255, 123, 32, 2, 255, 122, 33, 2, 255, 113, 29, 1, 255, 112, 28, 1, 255, 118, 31, 3, 255, 113, 35, 6, 255, 109, 32, 3, 255, 116, 33, 5, 255, 107, 25, 1, 255, 114, 31, 2, 255, 123, 38, 2, 255, 130, 39, 4, 255, 127, 35, 4, 255, 116, 29, 5, 255, 96, 23, 3, 255, 85, 19, 1, 255, 89, 22, 2, 255, 90, 21, 3, 255, 93, 22, 5, 255, 93, 25, 4, 255, 87, 22, 3, 255, 90, 22, 2, 255, 93, 22, 3, 255, 88, 25, 5, 255, 81, 22, 1, 255, 82, 21, 3, 255, 74, 18, 3, 255, 64, 16, 6, 255, 54, 15, 2, 255, 61, 19, 3, 255, 71, 19, 5, 255, 77, 18, 4, 255, 83, 19, 3, 255, 92, 24, 1, 255, 99, 28, 2, 255, 106, 26, 4, 255, 116, 31, 6, 255, 115, 37, 4, 255, 109, 38, 1, 255, 102, 33, 5, 255, 79, 18, 1, 255, 69, 18, 3, 255, 69, 22, 6, 255, 66, 19, 4, 255, 71, 18, 3, 255, 73, 18, 0, 255, 72, 21, 1, 255, 67, 17, 2, 255, 76, 23, 4, 255, 84, 27, 2, 255, 90, 28, 5, 255, 89, 24, 0, 255, 103, 30, 0, 255, 112, 33, 2, 255, 108, 33, 4, 255, 104, 30, 0, 255, 103, 31, 1, 255, 15, 10, 5, 255, 15, 9, 4, 255, 17, 8, 3, 255, 17, 8, 0, 255, 15, 5, 2, 255, 19, 10, 8, 255, 16, 10, 2, 255, 13, 9, 2, 255, 14, 9, 6, 255, 18, 7, 3, 255, 26, 9, 3, 255, 23, 8, 1, 255, 18, 9, 2, 255, 21, 12, 2, 255, 23, 14, 3, 255, 24, 15, 4, 255, 23, 15, 3, 255, 25, 16, 3, 255, 25, 16, 3, 255, 30, 18, 8, 255, 26, 13, 3, 255, 31, 16, 3, 255, 31, 17, 2, 255, 25, 15, 1, 255, 18, 13, 1, 255, 21, 15, 2, 255, 26, 16, 1, 255, 23, 13, 1, 255, 26, 16, 3, 255, 23, 13, 2, 255, 24, 13, 2, 255, 26, 15, 5, 255, 34, 16, 2, 255, 39, 20, 7, 255, 33, 17, 5, 255, 30, 17, 6, 255, 38, 23, 6, 255, 49, 25, 1, 255, 52, 30, 0, 255, 50, 28, 7, 255, 63, 41, 9, 255, 60, 47, 12, 255, 72, 55, 31, 255, 81, 57, 26, 255, 71, 54, 3, 255, 68, 46, 2, 255, 60, 33, 6, 255, 63, 44, 21, 255, 64, 51, 17, 255, 68, 48, 19, 255, 72, 49, 23, 255, 66, 49, 27, 255, 62, 50, 41, 255, 72, 56, 20, 255, 76, 54, 12, 255, 68, 56, 29, 255, 74, 61, 27, 255, 84, 63, 34, 255, 80, 66, 44, 255, 79, 66, 23, 255, 80, 65, 20, 255, 82, 51, 19, 255, 85, 42, 8, 255, 84, 46, 1, 255, 78, 42, 2, 255, 79, 45, 5, 255, 80, 45, 3, 255, 87, 46, 2, 255, 91, 46, 1, 255, 95, 44, 2, 255, 93, 48, 2, 255, 92, 52, 3, 255, 96, 45, 0, 255, 101, 45, 1, 255, 90, 43, 4, 255, 87, 46, 5, 255, 96, 47, 2, 255, 104, 49, 5, 255, 99, 51, 2, 255, 84, 42, 2, 255, 87, 46, 11, 255, 89, 48, 5, 255, 89, 50, 0, 255, 98, 50, 0, 255, 102, 55, 6, 255, 103, 54, 2, 255, 113, 52, 4, 255, 115, 54, 5, 255, 113, 52, 1, 255, 118, 50, 4, 255, 115, 54, 1, 255, 114, 55, 0, 255, 118, 52, 1, 255, 120, 49, 3, 255, 114, 52, 3, 255, 109, 59, 4, 255, 106, 60, 2, 255, 110, 61, 3, 255, 110, 64, 3, 255, 110, 62, 2, 255, 116, 57, 2, 255, 120, 58, 3, 255, 111, 54, 1, 255, 113, 57, 2, 255, 115, 61, 2, 255, 111, 62, 6, 255, 100, 57, 1, 255, 107, 60, 2, 255, 116, 54, 0, 255, 124, 61, 3, 255, 126, 57, 3, 255, 124, 52, 1, 255, 116, 46, 4, 255, 115, 53, 8, 255, 124, 74, 5, 255, 120, 75, 3, 255, 120, 70, 1, 255, 116, 55, 4, 255, 126, 62, 4, 255, 126, 68, 4, 255, 122, 66, 4, 255, 122, 72, 1, 255, 123, 68, 6, 255, 137, 70, 8, 255, 125, 61, 6, 255, 118, 61, 4, 255, 123, 63, 4, 255, 124, 66, 2, 255, 135, 81, 5, 255, 128, 68, 5, 255, 121, 52, 10, 255, 113, 48, 1, 255, 106, 47, 9, 255, 104, 52, 8, 255, 129, 72, 9, 255, 146, 85, 4, 255, 144, 81, 4, 255, 146, 82, 1, 255, 148, 79, 10, 255, 143, 77, 3, 255, 139, 74, 7, 255, 138, 66, 6, 255, 128, 70, 5, 255, 127, 75, 8, 255, 129, 70, 7, 255, 120, 68, 8, 255, 102, 65, 9, 255, 101, 57, 9, 255, 100, 56, 10, 255, 100, 57, 9, 255, 103, 60, 10, 255, 98, 55, 8, 255, 97, 56, 8, 255, 103, 61, 10, 255, 106, 58, 7, 255, 105, 60, 6, 255, 101, 61, 12, 255, 106, 64, 16, 255, 108, 61, 15, 255, 107, 61, 20, 255, 108, 63, 11, 255, 108, 61, 12, 255, 107, 59, 17, 255, 110, 63, 18, 255, 109, 62, 18, 255, 109, 70, 19, 255, 103, 65, 15, 255, 107, 67, 17, 255, 110, 68, 16, 255, 112, 72, 13, 255, 108, 66, 25, 255, 111, 69, 21, 255, 113, 70, 37, 255, 111, 77, 27, 255, 111, 71, 30, 255, 110, 72, 24, 255, 107, 74, 26, 255, 109, 76, 34, 255, 108, 74, 30, 255, 111, 80, 20, 255, 111, 79, 35, 255, 108, 77, 26, 255, 111, 78, 28, 255, 115, 82, 32, 255, 118, 87, 28, 255, 112, 81, 33, 255, 107, 82, 38, 255, 105, 82, 34, 255, 106, 86, 32, 255, 107, 87, 28, 255, 106, 85, 28, 255, 107, 86, 35, 255, 103, 89, 29, 255, 113, 90, 35, 255, 114, 88, 36, 255, 110, 90, 36, 255, 109, 92, 36, 255, 109, 90, 32, 255, 108, 87, 34, 255, 111, 92, 36, 255, 111, 90, 32, 255, 116, 95, 38, 255, 117, 97, 29, 255, 115, 94, 31, 255, 109, 89, 24, 255, 113, 93, 28, 255, 117, 97, 25, 255, 112, 91, 24, 255, 110, 89, 31, 255, 112, 91, 23, 255, 112, 89, 18, 255, 115, 89, 28, 255, 116, 92, 30, 255, 117, 94, 16, 255, 115, 85, 20, 255, 120, 86, 26, 255, 120, 86, 23, 255, 110, 80, 29, 255, 109, 85, 23, 255, 113, 86, 16, 255, 112, 83, 20, 255, 108, 83, 21, 255, 111, 85, 16, 255, 110, 79, 13, 255, 115, 79, 14, 255, 113, 77, 19, 255, 104, 76, 20, 255, 105, 75, 25, 255, 101, 71, 19, 255, 109, 75, 22, 255, 110, 71, 9, 255, 112, 73, 18, 255, 108, 74, 13, 255, 111, 75, 13, 255, 110, 69, 13, 255, 109, 68, 5, 255, 110, 69, 6, 255, 109, 67, 3, 255, 113, 66, 11, 255, 111, 66, 12, 255, 106, 67, 5, 255, 106, 68, 5, 255, 106, 65, 10, 255, 108, 61, 11, 255, 115, 63, 5, 255, 117, 64, 10, 255, 112, 63, 7, 255, 110, 58, 8, 255, 106, 56, 10, 255, 103, 56, 3, 255, 110, 59, 5, 255, 109, 55, 6, 255, 106, 54, 7, 255, 105, 54, 7, 255, 106, 54, 7, 255, 108, 54, 7, 255, 106, 53, 6, 255, 96, 54, 3, 255, 92, 51, 0, 255, 99, 54, 4, 255, 99, 51, 3, 255, 101, 48, 4, 255, 100, 48, 5, 255, 94, 45, 2, 255, 94, 44, 2, 255, 93, 47, 5, 255, 92, 45, 4, 255, 100, 44, 4, 255, 97, 47, 1, 255, 93, 48, 2, 255, 90, 43, 1, 255, 94, 43, 6, 255, 94, 42, 7, 255, 95, 40, 3, 255, 99, 47, 2, 255, 103, 47, 8, 255, 91, 37, 5, 255, 85, 37, 3, 255, 75, 37, 2, 255, 80, 40, 2, 255, 95, 41, 1, 255, 94, 37, 2, 255, 81, 38, 2, 255, 79, 33, 1, 255, 79, 31, 6, 255, 87, 33, 3, 255, 93, 35, 1, 255, 101, 40, 3, 255, 114, 48, 2, 255, 119, 44, 4, 255, 124, 48, 2, 255, 121, 49, 4, 255, 105, 36, 4, 255, 112, 42, 4, 255, 125, 52, 2, 255, 133, 52, 4, 255, 129, 49, 4, 255, 132, 51, 3, 255, 127, 49, 1, 255, 113, 46, 2, 255, 108, 38, 6, 255, 113, 37, 4, 255, 106, 42, 2, 255, 99, 37, 0, 255, 102, 33, 8, 255, 116, 42, 7, 255, 117, 39, 4, 255, 122, 42, 8, 255, 111, 38, 1, 255, 105, 36, 4, 255, 110, 37, 7, 255, 110, 37, 1, 255, 109, 38, 0, 255, 109, 38, 5, 255, 102, 33, 5, 255, 93, 27, 2, 255, 96, 30, 7, 255, 111, 42, 2, 255, 114, 36, 1, 255, 121, 37, 5, 255, 120, 39, 2, 255, 131, 42, 2, 255, 140, 50, 3, 255, 140, 52, 1, 255, 139, 49, 1, 255, 134, 44, 3, 255, 138, 48, 4, 255, 140, 47, 2, 255, 139, 45, 1, 255, 145, 51, 0, 255, 147, 47, 7, 255, 145, 45, 5, 255, 141, 46, 0, 255, 144, 47, 2, 255, 146, 47, 3, 255, 145, 46, 2, 255, 141, 44, 2, 255, 138, 41, 0, 255, 140, 43, 2, 255, 141, 45, 4, 255, 138, 44, 0, 255, 137, 44, 0, 255, 132, 40, 2, 255, 120, 33, 2, 255, 116, 33, 4, 255, 111, 32, 1, 255, 115, 35, 3, 255, 121, 35, 6, 255, 118, 31, 0, 255, 119, 32, 0, 255, 120, 35, 4, 255, 114, 28, 1, 255, 111, 32, 3, 255, 124, 39, 4, 255, 127, 40, 2, 255, 130, 39, 3, 255, 130, 37, 4, 255, 111, 31, 5, 255, 85, 21, 2, 255, 88, 21, 3, 255, 89, 20, 2, 255, 84, 20, 4, 255, 92, 24, 5, 255, 95, 26, 2, 255, 90, 27, 1, 255, 87, 22, 3, 255, 85, 23, 4, 255, 87, 25, 2, 255, 88, 21, 2, 255, 76, 19, 5, 255, 74, 18, 0, 255, 75, 23, 1, 255, 62, 17, 2, 255, 64, 14, 5, 255, 65, 19, 3, 255, 68, 20, 5, 255, 76, 21, 4, 255, 79, 22, 0, 255, 92, 26, 2, 255, 102, 31, 4, 255, 111, 36, 4, 255, 114, 43, 0, 255, 105, 38, 0, 255, 87, 19, 4, 255, 73, 18, 4, 255, 72, 22, 8, 255, 67, 19, 4, 255, 70, 17, 2, 255, 73, 18, 2, 255, 67, 17, 2, 255, 68, 21, 3, 255, 71, 17, 0, 255, 79, 18, 3, 255, 88, 24, 3, 255, 95, 28, 1, 255, 102, 30, 1, 255, 105, 31, 2, 255, 108, 33, 1, 255, 108, 32, 0, 255, 107, 28, 0, 255, 12, 8, 1, 255, 16, 11, 4, 255, 17, 11, 4, 255, 16, 8, 2, 255, 16, 7, 1, 255, 18, 9, 3, 255, 16, 4, 0, 255, 17, 8, 3, 255, 15, 11, 6, 255, 17, 11, 1, 255, 22, 12, 2, 255, 24, 10, 2, 255, 22, 10, 3, 255, 22, 16, 5, 255, 21, 9, 1, 255, 25, 10, 1, 255, 29, 14, 5, 255, 30, 17, 5, 255, 25, 17, 4, 255, 23, 13, 2, 255, 24, 12, 3, 255, 24, 12, 1, 255, 25, 16, 3, 255, 23, 16, 4, 255, 21, 14, 4, 255, 23, 16, 6, 255, 26, 14, 6, 255, 28, 15, 7, 255, 28, 14, 6, 255, 30, 14, 5, 255, 27, 10, 1, 255, 32, 14, 4, 255, 38, 17, 3, 255, 27, 19, 1, 255, 34, 18, 4, 255, 32, 17, 3, 255, 39, 23, 6, 255, 41, 25, 3, 255, 52, 27, 5, 255, 60, 29, 10, 255, 53, 33, 5, 255, 59, 44, 10, 255, 71, 54, 31, 255, 65, 57, 30, 255, 65, 53, 15, 255, 66, 43, 5, 255, 59, 30, 4, 255, 56, 33, 16, 255, 57, 42, 6, 255, 65, 48, 13, 255, 69, 51, 12, 255, 63, 48, 24, 255, 63, 46, 34, 255, 70, 53, 12, 255, 65, 50, 14, 255, 69, 58, 29, 255, 75, 59, 42, 255, 77, 59, 28, 255, 77, 61, 19, 255, 81, 57, 15, 255, 83, 55, 11, 255, 89, 57, 4, 255, 88, 51, 1, 255, 83, 47, 2, 255, 80, 42, 1, 255, 78, 44, 3, 255, 78, 43, 2, 255, 86, 49, 5, 255, 89, 50, 5, 255, 90, 47, 4, 255, 83, 48, 5, 255, 81, 48, 4, 255, 86, 45, 2, 255, 88, 48, 6, 255, 87, 47, 7, 255, 90, 46, 4, 255, 94, 45, 1, 255, 96, 46, 4, 255, 88, 48, 3, 255, 94, 44, 4, 255, 105, 45, 3, 255, 99, 47, 0, 255, 94, 51, 2, 255, 103, 49, 5, 255, 93, 51, 6, 255, 93, 50, 3, 255, 97, 50, 4, 255, 90, 47, 1, 255, 102, 49, 2, 255, 107, 49, 5, 255, 106, 56, 3, 255, 108, 56, 1, 255, 118, 54, 2, 255, 118, 54, 3, 255, 112, 58, 2, 255, 96, 65, 1, 255, 101, 63, 2, 255, 108, 61, 3, 255, 109, 60, 3, 255, 104, 61, 2, 255, 105, 64, 3, 255, 112, 60, 4, 255, 116, 53, 5, 255, 126, 52, 3, 255, 120, 59, 1, 255, 102, 54, 1, 255, 93, 50, 5, 255, 90, 58, 7, 255, 103, 61, 5, 255, 108, 68, 3, 255, 119, 60, 0, 255, 126, 55, 2, 255, 119, 52, 2, 255, 121, 60, 5, 255, 121, 60, 2, 255, 125, 61, 3, 255, 125, 69, 1, 255, 115, 68, 3, 255, 116, 68, 1, 255, 125, 73, 4, 255, 126, 72, 5, 255, 127, 74, 3, 255, 123, 64, 4, 255, 124, 65, 0, 255, 122, 70, 2, 255, 122, 78, 3, 255, 126, 77, 5, 255, 136, 74, 5, 255, 135, 82, 6, 255, 128, 71, 13, 255, 125, 69, 7, 255, 114, 59, 6, 255, 129, 76, 6, 255, 140, 85, 5, 255, 137, 77, 7, 255, 145, 80, 3, 255, 148, 87, 4, 255, 137, 83, 0, 255, 147, 83, 3, 255, 145, 74, 2, 255, 135, 71, 9, 255, 124, 64, 4, 255, 119, 71, 2, 255, 119, 72, 6, 255, 117, 72, 4, 255, 123, 70, 5, 255, 125, 73, 11, 255, 118, 68, 6, 255, 113, 65, 1, 255, 109, 63, 7, 255, 108, 64, 8, 255, 108, 64, 5, 255, 101, 56, 8, 255, 101, 59, 13, 255, 95, 60, 8, 255, 98, 59, 12, 255, 106, 55, 16, 255, 106, 56, 15, 255, 98, 63, 6, 255, 98, 66, 14, 255, 104, 65, 18, 255, 108, 69, 19, 255, 116, 76, 26, 255, 105, 62, 17, 255, 107, 62, 21, 255, 107, 66, 17, 255, 105, 66, 20, 255, 107, 66, 18, 255, 109, 67, 20, 255, 112, 71, 25, 255, 111, 71, 28, 255, 114, 75, 16, 255, 110, 68, 32, 255, 106, 74, 32, 255, 109, 76, 13, 255, 111, 75, 25, 255, 109, 74, 30, 255, 109, 75, 31, 255, 112, 77, 27, 255, 114, 82, 29, 255, 111, 83, 23, 255, 112, 81, 30, 255, 117, 82, 40, 255, 116, 82, 29, 255, 114, 82, 30, 255, 112, 80, 38, 255, 116, 84, 43, 255, 112, 83, 40, 255, 112, 87, 39, 255, 109, 85, 33, 255, 109, 85, 34, 255, 112, 88, 41, 255, 110, 86, 46, 255, 112, 87, 35, 255, 112, 88, 30, 255, 108, 91, 36, 255, 107, 93, 31, 255, 113, 93, 36, 255, 115, 94, 37, 255, 113, 94, 33, 255, 113, 94, 24, 255, 114, 93, 36, 255, 113, 92, 31, 255, 112, 93, 27, 255, 111, 91, 34, 255, 108, 91, 30, 255, 115, 94, 35, 255, 115, 96, 26, 255, 113, 92, 28, 255, 115, 91, 27, 255, 118, 89, 24, 255, 118, 93, 23, 255, 117, 92, 18, 255, 116, 90, 23, 255, 115, 87, 22, 255, 116, 84, 30, 255, 114, 86, 23, 255, 113, 85, 16, 255, 116, 88, 12, 255, 116, 86, 16, 255, 121, 84, 22, 255, 120, 81, 20, 255, 113, 76, 17, 255, 108, 78, 18, 255, 109, 79, 20, 255, 108, 74, 23, 255, 107, 72, 18, 255, 108, 77, 10, 255, 107, 75, 17, 255, 105, 75, 15, 255, 106, 70, 15, 255, 111, 70, 17, 255, 106, 72, 6, 255, 108, 69, 7, 255, 113, 69, 13, 255, 109, 67, 9, 255, 106, 64, 13, 255, 107, 67, 10, 255, 113, 67, 11, 255, 109, 63, 7, 255, 109, 67, 12, 255, 104, 64, 7, 255, 106, 65, 5, 255, 111, 63, 6, 255, 109, 63, 1, 255, 111, 62, 5, 255, 112, 60, 6, 255, 105, 60, 9, 255, 101, 57, 8, 255, 106, 56, 6, 255, 104, 56, 10, 255, 98, 54, 5, 255, 102, 55, 7, 255, 108, 55, 8, 255, 107, 55, 8, 255, 102, 53, 5, 255, 102, 52, 6, 255, 102, 52, 6, 255, 95, 51, 3, 255, 95, 50, 3, 255, 102, 50, 5, 255, 100, 48, 3, 255, 98, 48, 3, 255, 96, 44, 1, 255, 96, 44, 2, 255, 91, 47, 6, 255, 89, 42, 2, 255, 98, 43, 2, 255, 96, 50, 3, 255, 97, 51, 4, 255, 97, 44, 5, 255, 96, 42, 3, 255, 94, 44, 3, 255, 91, 44, 2, 255, 94, 44, 4, 255, 101, 42, 4, 255, 103, 41, 3, 255, 85, 35, 3, 255, 81, 39, 4, 255, 79, 41, 3, 255, 80, 40, 1, 255, 97, 44, 4, 255, 90, 39, 4, 255, 81, 35, 2, 255, 79, 36, 7, 255, 87, 34, 4, 255, 109, 46, 4, 255, 111, 40, 3, 255, 118, 48, 5, 255, 125, 45, 2, 255, 133, 51, 5, 255, 117, 46, 4, 255, 104, 38, 4, 255, 109, 38, 3, 255, 129, 50, 6, 255, 134, 54, 2, 255, 131, 57, 0, 255, 134, 54, 2, 255, 138, 48, 5, 255, 135, 49, 6, 255, 130, 48, 4, 255, 116, 38, 2, 255, 119, 36, 2, 255, 118, 31, 0, 255, 117, 30, 1, 255, 127, 43, 2, 255, 125, 41, 0, 255, 120, 47, 1, 255, 119, 48, 1, 255, 119, 44, 5, 255, 118, 39, 6, 255, 125, 42, 4, 255, 127, 41, 2, 255, 123, 37, 1, 255, 107, 28, 0, 255, 99, 30, 2, 255, 96, 28, 0, 255, 116, 40, 2, 255, 117, 39, 3, 255, 114, 36, 3, 255, 123, 41, 2, 255, 121, 42, 2, 255, 133, 46, 6, 255, 145, 48, 7, 255, 141, 46, 3, 255, 138, 46, 2, 255, 138, 47, 2, 255, 140, 45, 3, 255, 142, 45, 2, 255, 139, 41, 1, 255, 144, 49, 2, 255, 146, 47, 4, 255, 147, 43, 4, 255, 145, 44, 3, 255, 146, 43, 2, 255, 146, 45, 3, 255, 144, 47, 4, 255, 138, 42, 1, 255, 139, 42, 2, 255, 139, 43, 1, 255, 142, 47, 2, 255, 138, 44, 2, 255, 133, 42, 1, 255, 127, 42, 2, 255, 118, 37, 1, 255, 116, 35, 1, 255, 120, 34, 2, 255, 122, 32, 2, 255, 128, 36, 3, 255, 126, 38, 5, 255, 117, 33, 2, 255, 111, 28, 0, 255, 118, 35, 4, 255, 124, 37, 1, 255, 129, 40, 2, 255, 135, 41, 4, 255, 137, 42, 5, 255, 123, 37, 5, 255, 101, 30, 8, 255, 85, 20, 1, 255, 88, 22, 3, 255, 87, 23, 4, 255, 92, 22, 5, 255, 103, 26, 8, 255, 89, 22, 0, 255, 86, 23, 1, 255, 87, 23, 8, 255, 86, 22, 5, 255, 82, 18, 1, 255, 79, 22, 3, 255, 93, 27, 4, 255, 96, 23, 4, 255, 75, 18, 2, 255, 54, 15, 0, 255, 58, 18, 1, 255, 71, 16, 3, 255, 82, 20, 5, 255, 83, 22, 3, 255, 86, 24, 4, 255, 93, 25, 4, 255, 94, 27, 0, 255, 112, 40, 2, 255, 110, 37, 3, 255, 85, 22, 2, 255, 75, 18, 4, 255, 64, 17, 2, 255, 64, 17, 2, 255, 68, 16, 1, 255, 71, 22, 5, 255, 67, 18, 2, 255, 72, 20, 4, 255, 77, 21, 7, 255, 77, 15, 4, 255, 83, 19, 2, 255, 95, 27, 2, 255, 102, 29, 1, 255, 104, 30, 0, 255, 108, 37, 3, 255, 107, 34, 2, 255, 106, 32, 1, 255, 14, 10, 1, 255, 15, 11, 4, 255, 15, 9, 4, 255, 16, 10, 4, 255, 17, 9, 1, 255, 20, 10, 2, 255, 22, 9, 4, 255, 19, 7, 2, 255, 18, 11, 2, 255, 16, 10, 0, 255, 19, 10, 1, 255, 19, 8, 1, 255, 19, 8, 1, 255, 21, 10, 1, 255, 22, 11, 2, 255, 25, 15, 5, 255, 29, 16, 7, 255, 32, 17, 7, 255, 32, 17, 5, 255, 26, 13, 1, 255, 26, 15, 3, 255, 20, 12, 2, 255, 20, 13, 4, 255, 22, 14, 5, 255, 20, 11, 1, 255, 23, 12, 2, 255, 25, 11, 1, 255, 27, 13, 2, 255, 32, 16, 4, 255, 36, 19, 6, 255, 31, 14, 1, 255, 36, 19, 4, 255, 42, 22, 6, 255, 35, 20, 1, 255, 35, 18, 0, 255, 47, 21, 2, 255, 44, 26, 3, 255, 48, 28, 2, 255, 50, 26, 3, 255, 52, 28, 2, 255, 63, 29, 7, 255, 62, 35, 2, 255, 47, 41, 17, 255, 60, 58, 40, 255, 62, 53, 29, 255, 63, 43, 8, 255, 59, 32, 2, 255, 60, 38, 5, 255, 60, 44, 8, 255, 62, 43, 5, 255, 65, 45, 13, 255, 67, 48, 18, 255, 69, 48, 14, 255, 67, 49, 20, 255, 60, 45, 25, 255, 71, 52, 37, 255, 81, 61, 38, 255, 79, 63, 21, 255, 83, 57, 19, 255, 88, 57, 15, 255, 78, 51, 1, 255, 84, 53, 7, 255, 90, 49, 6, 255, 87, 42, 0, 255, 84, 43, 3, 255, 82, 45, 4, 255, 81, 46, 5, 255, 85, 46, 3, 255, 86, 44, 2, 255, 84, 43, 1, 255, 84, 40, 0, 255, 92, 43, 1, 255, 88, 46, 1, 255, 75, 44, 4, 255, 76, 45, 5, 255, 81, 44, 2, 255, 77, 42, 3, 255, 87, 43, 4, 255, 87, 42, 0, 255, 99, 47, 1, 255, 111, 53, 5, 255, 107, 50, 2, 255, 102, 51, 5, 255, 90, 49, 5, 255, 90, 46, 4, 255, 86, 47, 0, 255, 90, 50, 3, 255, 100, 50, 5, 255, 103, 54, 6, 255, 96, 52, 5, 255, 96, 53, 3, 255, 102, 52, 2, 255, 110, 55, 5, 255, 112, 53, 4, 255, 106, 57, 1, 255, 105, 59, 0, 255, 103, 58, 1, 255, 97, 63, 2, 255, 99, 61, 3, 255, 103, 56, 2, 255, 99, 55, 1, 255, 99, 58, 2, 255, 96, 60, 5, 255, 96, 55, 3, 255, 95, 56, 1, 255, 90, 55, 0, 255, 98, 56, 4, 255, 99, 58, 2, 255, 102, 64, 6, 255, 102, 60, 3, 255, 110, 61, 5, 255, 120, 61, 5, 255, 128, 66, 5, 255, 120, 64, 1, 255, 110, 66, 1, 255, 114, 64, 2, 255, 120, 69, 1, 255, 124, 70, 5, 255, 126, 68, 2, 255, 124, 68, 1, 255, 119, 70, 3, 255, 122, 74, 4, 255, 122, 74, 2, 255, 116, 75, 3, 255, 120, 68, 3, 255, 134, 77, 1, 255, 136, 83, 6, 255, 135, 87, 2, 255, 135, 91, 4, 255, 141, 91, 7, 255, 145, 88, 3, 255, 133, 70, 3, 255, 145, 83, 4, 255, 147, 82, 4, 255, 128, 63, 6, 255, 132, 66, 6, 255, 141, 76, 5, 255, 141, 80, 10, 255, 141, 79, 0, 255, 140, 79, 7, 255, 130, 78, 8, 255, 127, 76, 8, 255, 121, 69, 12, 255, 114, 61, 2, 255, 117, 69, 9, 255, 115, 63, 7, 255, 114, 60, 4, 255, 122, 68, 10, 255, 117, 65, 7, 255, 108, 63, 5, 255, 103, 60, 14, 255, 100, 60, 10, 255, 104, 62, 8, 255, 101, 61, 8, 255, 95, 64, 7, 255, 93, 59, 12, 255, 98, 61, 17, 255, 94, 58, 20, 255, 97, 58, 19, 255, 118, 70, 18, 255, 101, 64, 15, 255, 96, 67, 18, 255, 106, 71, 22, 255, 106, 64, 18, 255, 103, 68, 18, 255, 107, 68, 26, 255, 108, 69, 24, 255, 110, 75, 12, 255, 109, 70, 24, 255, 107, 69, 28, 255, 108, 72, 21, 255, 109, 72, 16, 255, 110, 73, 18, 255, 109, 74, 23, 255, 110, 74, 21, 255, 112, 78, 24, 255, 110, 78, 23, 255, 108, 79, 26, 255, 108, 78, 30, 255, 112, 78, 38, 255, 111, 79, 30, 255, 111, 81, 30, 255, 116, 83, 34, 255, 114, 82, 26, 255, 110, 84, 27, 255, 110, 84, 29, 255, 112, 85, 31, 255, 111, 87, 33, 255, 111, 89, 34, 255, 108, 88, 33, 255, 110, 90, 35, 255, 113, 92, 41, 255, 113, 90, 39, 255, 112, 91, 28, 255, 113, 92, 32, 255, 111, 93, 43, 255, 109, 93, 32, 255, 113, 90, 38, 255, 115, 93, 38, 255, 112, 93, 26, 255, 113, 96, 23, 255, 112, 93, 30, 255, 111, 92, 31, 255, 110, 92, 30, 255, 113, 97, 22, 255, 123, 95, 28, 255, 119, 91, 32, 255, 117, 93, 26, 255, 110, 90, 33, 255, 111, 92, 34, 255, 116, 97, 31, 255, 119, 91, 24, 255, 117, 87, 22, 255, 117, 88, 24, 255, 117, 88, 25, 255, 116, 86, 24, 255, 114, 89, 24, 255, 110, 87, 13, 255, 110, 85, 23, 255, 107, 82, 30, 255, 109, 82, 8, 255, 113, 81, 19, 255, 109, 80, 17, 255, 105, 82, 14, 255, 107, 78, 16, 255, 105, 78, 19, 255, 112, 76, 23, 255, 110, 76, 10, 255, 108, 71, 16, 255, 107, 73, 27, 255, 107, 74, 22, 255, 110, 70, 18, 255, 111, 71, 14, 255, 109, 67, 7, 255, 114, 71, 6, 255, 113, 70, 9, 255, 111, 68, 17, 255, 108, 68, 5, 255, 114, 67, 6, 255, 112, 64, 5, 255, 111, 66, 13, 255, 103, 63, 10, 255, 104, 62, 8, 255, 110, 61, 7, 255, 110, 63, 5, 255, 111, 62, 5, 255, 109, 57, 6, 255, 106, 60, 8, 255, 106, 61, 4, 255, 104, 56, 3, 255, 99, 53, 8, 255, 104, 58, 9, 255, 104, 53, 5, 255, 106, 50, 3, 255, 106, 54, 7, 255, 98, 53, 5, 255, 103, 53, 7, 255, 102, 48, 5, 255, 103, 53, 9, 255, 96, 49, 5, 255, 102, 49, 5, 255, 102, 53, 7, 255, 105, 49, 5, 255, 96, 47, 2, 255, 91, 46, 2, 255, 96, 44, 7, 255, 89, 45, 4, 255, 93, 46, 3, 255, 105, 48, 4, 255, 106, 46, 6, 255, 92, 45, 4, 255, 96, 45, 5, 255, 110, 44, 3, 255, 109, 44, 6, 255, 88, 41, 6, 255, 89, 40, 1, 255, 91, 40, 0, 255, 85, 35, 3, 255, 81, 38, 4, 255, 79, 38, 2, 255, 85, 38, 5, 255, 87, 37, 1, 255, 82, 35, 2, 255, 80, 36, 1, 255, 78, 36, 3, 255, 93, 36, 3, 255, 115, 47, 3, 255, 121, 43, 4, 255, 119, 45, 3, 255, 128, 48, 0, 255, 130, 49, 1, 255, 114, 41, 1, 255, 111, 43, 5, 255, 108, 36, 4, 255, 120, 41, 1, 255, 135, 53, 4, 255, 132, 51, 2, 255, 136, 47, 1, 255, 143, 47, 4, 255, 142, 55, 5, 255, 135, 53, 2, 255, 120, 43, 3, 255, 109, 32, 2, 255, 107, 33, 8, 255, 101, 27, 1, 255, 106, 31, 0, 255, 110, 33, 6, 255, 116, 41, 3, 255, 130, 45, 2, 255, 132, 42, 0, 255, 132, 45, 0, 255, 130, 46, 1, 255, 130, 46, 5, 255, 119, 35, 2, 255, 107, 31, 6, 255, 95, 27, 1, 255, 110, 34, 4, 255, 129, 39, 6, 255, 126, 40, 1, 255, 112, 39, 4, 255, 129, 44, 5, 255, 125, 44, 2, 255, 133, 44, 2, 255, 144, 46, 4, 255, 140, 44, 1, 255, 138, 47, 0, 255, 139, 47, 2, 255, 135, 41, 2, 255, 134, 40, 6, 255, 138, 43, 1, 255, 143, 49, 2, 255, 144, 46, 2, 255, 149, 43, 3, 255, 147, 46, 4, 255, 147, 44, 3, 255, 146, 44, 2, 255, 142, 44, 2, 255, 143, 48, 4, 255, 139, 43, 1, 255, 139, 43, 1, 255, 137, 40, 3, 255, 135, 37, 4, 255, 136, 38, 3, 255, 134, 38, 0, 255, 127, 33, 1, 255, 127, 35, 4, 255, 131, 37, 4, 255, 130, 34, 2, 255, 130, 37, 3, 255, 126, 41, 5, 255, 114, 34, 0, 255, 109, 32, 2, 255, 125, 39, 6, 255, 124, 38, 0, 255, 128, 37, 1, 255, 133, 39, 1, 255, 137, 41, 1, 255, 128, 37, 1, 255, 112, 27, 3, 255, 91, 22, 3, 255, 91, 21, 6, 255, 83, 19, 1, 255, 84, 22, 2, 255, 100, 24, 6, 255, 90, 23, 1, 255, 90, 17, 3, 255, 87, 21, 5, 255, 83, 24, 3, 255, 84, 25, 3, 255, 82, 22, 2, 255, 94, 20, 2, 255, 86, 18, 1, 255, 83, 19, 4, 255, 62, 16, 0, 255, 61, 16, 2, 255, 69, 15, 2, 255, 73, 17, 2, 255, 78, 19, 2, 255, 82, 21, 4, 255, 82, 20, 3, 255, 81, 22, 0, 255, 103, 32, 4, 255, 102, 27, 3, 255, 73, 17, 0, 255, 74, 19, 5, 255, 61, 17, 0, 255, 70, 20, 5, 255, 74, 19, 5, 255, 64, 19, 1, 255, 67, 20, 2, 255, 72, 20, 3, 255, 73, 20, 6, 255, 70, 16, 2, 255, 76, 18, 3, 255, 81, 21, 0, 255, 98, 33, 3, 255, 103, 32, 0, 255, 111, 35, 3, 255, 110, 33, 2, 255, 105, 29, 0, 255, 17, 10, 2, 255, 12, 8, 0, 255, 12, 7, 2, 255, 15, 9, 3, 255, 16, 8, 1, 255, 23, 13, 3, 255, 19, 10, 2, 255, 17, 8, 1, 255, 21, 12, 2, 255, 26, 13, 4, 255, 25, 14, 5, 255, 19, 12, 2, 255, 21, 12, 4, 255, 23, 10, 3, 255, 23, 14, 5, 255, 23, 14, 4, 255, 25, 11, 2, 255, 27, 11, 1, 255, 30, 13, 2, 255, 30, 16, 2, 255, 28, 16, 4, 255, 22, 13, 2, 255, 20, 11, 1, 255, 26, 14, 5, 255, 26, 12, 2, 255, 30, 15, 3, 255, 31, 19, 3, 255, 32, 19, 4, 255, 27, 15, 0, 255, 31, 18, 2, 255, 33, 19, 4, 255, 30, 17, 2, 255, 22, 14, 4, 255, 30, 17, 3, 255, 39, 19, 2, 255, 48, 26, 7, 255, 43, 27, 4, 255, 46, 26, 1, 255, 56, 27, 5, 255, 50, 26, 5, 255, 56, 26, 3, 255, 54, 30, 5, 255, 42, 38, 3, 255, 55, 47, 29, 255, 69, 53, 29, 255, 70, 52, 15, 255, 61, 39, 2, 255, 52, 35, 10, 255, 60, 50, 11, 255, 59, 38, 5, 255, 70, 37, 7, 255, 74, 48, 3, 255, 71, 46, 6, 255, 65, 49, 7, 255, 72, 57, 15, 255, 86, 58, 21, 255, 80, 58, 13, 255, 81, 62, 37, 255, 87, 59, 21, 255, 86, 52, 4, 255, 80, 47, 5, 255, 80, 45, 5, 255, 83, 40, 4, 255, 87, 39, 1, 255, 82, 39, 2, 255, 77, 38, 1, 255, 84, 43, 4, 255, 91, 44, 4, 255, 98, 45, 7, 255, 97, 42, 6, 255, 93, 44, 4, 255, 95, 47, 1, 255, 87, 47, 0, 255, 75, 43, 3, 255, 78, 42, 2, 255, 86, 40, 1, 255, 84, 40, 4, 255, 83, 41, 6, 255, 85, 44, 1, 255, 92, 51, 1, 255, 94, 51, 3, 255, 90, 43, 1, 255, 95, 46, 2, 255, 94, 52, 7, 255, 85, 44, 4, 255, 83, 48, 3, 255, 88, 45, 1, 255, 97, 48, 3, 255, 101, 54, 5, 255, 99, 50, 4, 255, 99, 53, 2, 255, 100, 53, 1, 255, 106, 50, 1, 255, 111, 46, 1, 255, 110, 52, 2, 255, 106, 58, 2, 255, 97, 56, 0, 255, 100, 61, 4, 255, 99, 56, 3, 255, 100, 54, 3, 255, 93, 57, 4, 255, 94, 56, 3, 255, 90, 54, 1, 255, 96, 53, 3, 255, 102, 54, 4, 255, 95, 57, 0, 255, 99, 65, 3, 255, 98, 64, 1, 255, 97, 65, 0, 255, 101, 63, 6, 255, 106, 52, 4, 255, 120, 62, 4, 255, 114, 68, 1, 255, 102, 65, 2, 255, 102, 67, 3, 255, 109, 58, 1, 255, 111, 50, 0, 255, 123, 56, 4, 255, 124, 66, 4, 255, 121, 71, 0, 255, 123, 72, 5, 255, 120, 70, 2, 255, 121, 73, 3, 255, 122, 68, 1, 255, 134, 74, 6, 255, 131, 80, 3, 255, 130, 91, 4, 255, 135, 88, 7, 255, 144, 80, 2, 255, 145, 87, 4, 255, 134, 78, 1, 255, 117, 60, 8, 255, 139, 84, 5, 255, 145, 81, 6, 255, 134, 74, 8, 255, 111, 58, 1, 255, 125, 69, 4, 255, 130, 63, 6, 255, 129, 63, 5, 255, 130, 70, 7, 255, 134, 75, 7, 255, 131, 71, 13, 255, 123, 62, 5, 255, 112, 59, 10, 255, 113, 63, 12, 255, 110, 66, 8, 255, 112, 63, 6, 255, 107, 57, 6, 255, 111, 61, 8, 255, 103, 59, 4, 255, 99, 62, 8, 255, 96, 61, 15, 255, 97, 59, 20, 255, 102, 61, 13, 255, 103, 60, 11, 255, 97, 59, 16, 255, 92, 62, 9, 255, 99, 64, 11, 255, 104, 62, 28, 255, 104, 67, 24, 255, 102, 64, 17, 255, 98, 63, 16, 255, 98, 66, 18, 255, 102, 66, 18, 255, 102, 66, 16, 255, 102, 67, 27, 255, 100, 66, 25, 255, 103, 67, 19, 255, 108, 72, 22, 255, 105, 70, 18, 255, 102, 69, 22, 255, 106, 71, 28, 255, 105, 68, 31, 255, 103, 69, 36, 255, 104, 72, 27, 255, 107, 73, 37, 255, 107, 75, 28, 255, 107, 79, 23, 255, 109, 79, 38, 255, 111, 78, 29, 255, 111, 80, 28, 255, 111, 81, 36, 255, 114, 84, 27, 255, 111, 84, 30, 255, 107, 85, 35, 255, 111, 88, 26, 255, 110, 83, 28, 255, 112, 89, 31, 255, 111, 90, 32, 255, 111, 93, 33, 255, 111, 92, 31, 255, 112, 93, 33, 255, 115, 92, 44, 255, 114, 93, 38, 255, 111, 91, 38, 255, 110, 92, 44, 255, 113, 94, 27, 255, 117, 92, 33, 255, 116, 94, 30, 255, 113, 95, 27, 255, 115, 95, 36, 255, 113, 91, 39, 255, 114, 94, 33, 255, 113, 95, 33, 255, 112, 97, 23, 255, 116, 96, 34, 255, 115, 90, 40, 255, 117, 91, 34, 255, 116, 91, 32, 255, 118, 95, 24, 255, 121, 96, 24, 255, 123, 90, 26, 255, 122, 90, 29, 255, 119, 88, 26, 255, 116, 84, 28, 255, 116, 86, 25, 255, 113, 88, 19, 255, 111, 86, 16, 255, 115, 85, 14, 255, 114, 83, 23, 255, 111, 85, 15, 255, 108, 83, 23, 255, 109, 80, 18, 255, 115, 82, 14, 255, 114, 75, 11, 255, 105, 81, 7, 255, 106, 78, 18, 255, 107, 75, 12, 255, 114, 75, 7, 255, 108, 72, 17, 255, 106, 74, 12, 255, 110, 70, 13, 255, 112, 71, 13, 255, 110, 68, 8, 255, 110, 67, 12, 255, 109, 66, 12, 255, 113, 71, 7, 255, 119, 71, 7, 255, 114, 63, 5, 255, 115, 62, 6, 255, 110, 64, 5, 255, 107, 65, 8, 255, 104, 61, 7, 255, 108, 62, 5, 255, 111, 60, 2, 255, 112, 62, 4, 255, 107, 60, 8, 255, 107, 56, 9, 255, 109, 56, 8, 255, 110, 58, 7, 255, 107, 54, 4, 255, 113, 60, 8, 255, 109, 59, 6, 255, 103, 55, 4, 255, 102, 52, 5, 255, 103, 50, 5, 255, 99, 47, 1, 255, 99, 49, 2, 255, 102, 49, 5, 255, 104, 51, 7, 255, 95, 47, 1, 255, 98, 49, 1, 255, 102, 46, 4, 255, 95, 49, 5, 255, 91, 48, 3, 255, 98, 45, 6, 255, 93, 44, 5, 255, 97, 44, 4, 255, 101, 44, 4, 255, 95, 42, 1, 255, 91, 42, 4, 255, 96, 45, 5, 255, 106, 46, 4, 255, 101, 40, 1, 255, 85, 35, 4, 255, 82, 38, 3, 255, 81, 35, 4, 255, 85, 35, 3, 255, 82, 35, 5, 255, 79, 35, 4, 255, 89, 39, 6, 255, 79, 33, 4, 255, 69, 32, 2, 255, 77, 35, 1, 255, 80, 34, 0, 255, 105, 45, 3, 255, 118, 48, 5, 255, 121, 41, 3, 255, 122, 45, 4, 255, 127, 54, 1, 255, 123, 51, 1, 255, 119, 42, 2, 255, 120, 43, 5, 255, 115, 42, 7, 255, 108, 36, 0, 255, 125, 43, 5, 255, 131, 46, 5, 255, 127, 41, 1, 255, 131, 45, 4, 255, 134, 53, 3, 255, 141, 53, 1, 255, 140, 47, 3, 255, 108, 32, 1, 255, 98, 32, 6, 255, 99, 28, 1, 255, 106, 32, 5, 255, 100, 27, 5, 255, 97, 33, 2, 255, 120, 41, 5, 255, 135, 44, 5, 255, 138, 46, 4, 255, 133, 42, 0, 255, 132, 44, 5, 255, 120, 34, 3, 255, 113, 32, 6, 255, 97, 31, 2, 255, 111, 40, 3, 255, 131, 42, 8, 255, 130, 42, 4, 255, 110, 31, 2, 255, 112, 39, 4, 255, 127, 40, 4, 255, 133, 42, 0, 255, 139, 46, 2, 255, 140, 43, 1, 255, 139, 41, 0, 255, 139, 41, 6, 255, 123, 35, 3, 255, 114, 30, 2, 255, 135, 44, 1, 255, 145, 49, 4, 255, 143, 47, 3, 255, 145, 47, 2, 255, 142, 45, 0, 255, 143, 43, 0, 255, 147, 46, 2, 255, 143, 45, 1, 255, 142, 45, 2, 255, 144, 45, 3, 255, 138, 44, 3, 255, 130, 38, 2, 255, 130, 39, 6, 255, 127, 39, 3, 255, 125, 40, 1, 255, 119, 39, 2, 255, 121, 38, 3, 255, 129, 42, 4, 255, 131, 38, 4, 255, 127, 34, 0, 255, 128, 38, 2, 255, 123, 34, 1, 255, 119, 30, 2, 255, 121, 35, 2, 255, 127, 41, 3, 255, 131, 39, 4, 255, 132, 38, 2, 255, 131, 39, 0, 255, 132, 39, 4, 255, 119, 29, 4, 255, 91, 21, 2, 255, 87, 20, 4, 255, 84, 20, 0, 255, 83, 21, 0, 255, 99, 25, 4, 255, 94, 27, 2, 255, 96, 24, 2, 255, 88, 19, 0, 255, 88, 22, 3, 255, 96, 21, 3, 255, 91, 22, 3, 255, 79, 21, 3, 255, 72, 20, 3, 255, 80, 18, 3, 255, 69, 17, 2, 255, 66, 17, 5, 255, 68, 15, 3, 255, 65, 16, 1, 255, 73, 20, 3, 255, 80, 20, 1, 255, 77, 20, 1, 255, 72, 19, 1, 255, 86, 24, 5, 255, 85, 20, 2, 255, 65, 18, 2, 255, 70, 16, 2, 255, 65, 20, 5, 255, 73, 19, 7, 255, 72, 14, 2, 255, 66, 19, 1, 255, 67, 19, 2, 255, 71, 17, 1, 255, 72, 18, 2, 255, 72, 19, 5, 255, 72, 19, 4, 255, 72, 18, 0, 255, 90, 30, 3, 255, 98, 32, 0, 255, 102, 30, 0, 255, 105, 34, 5, 255, 101, 28, 1, 255, 16, 9, 2, 255, 19, 12, 4, 255, 14, 7, 0, 255, 18, 11, 3, 255, 17, 9, 2, 255, 19, 9, 2, 255, 18, 12, 3, 255, 18, 10, 1, 255, 21, 11, 1, 255, 23, 10, 1, 255, 20, 9, 0, 255, 17, 8, 0, 255, 19, 12, 1, 255, 23, 14, 5, 255, 24, 14, 5, 255, 26, 13, 4, 255, 31, 11, 4, 255, 29, 14, 3, 255, 24, 16, 3, 255, 27, 16, 2, 255, 28, 16, 5, 255, 27, 17, 6, 255, 23, 13, 3, 255, 31, 17, 6, 255, 33, 14, 4, 255, 34, 16, 3, 255, 25, 12, 1, 255, 28, 14, 4, 255, 27, 13, 3, 255, 28, 14, 3, 255, 29, 14, 6, 255, 27, 13, 5, 255, 23, 13, 1, 255, 32, 14, 1, 255, 50, 22, 6, 255, 45, 27, 3, 255, 43, 23, 1, 255, 56, 28, 4, 255, 49, 29, 1, 255, 48, 27, 5, 255, 42, 26, 2, 255, 45, 23, 4, 255, 53, 28, 6, 255, 51, 38, 20, 255, 59, 47, 33, 255, 64, 48, 35, 255, 65, 42, 15, 255, 57, 37, 12, 255, 64, 47, 19, 255, 64, 41, 5, 255, 65, 31, 4, 255, 65, 34, 10, 255, 72, 44, 12, 255, 70, 49, 6, 255, 75, 54, 20, 255, 88, 58, 31, 255, 80, 54, 15, 255, 79, 59, 14, 255, 89, 60, 16, 255, 89, 50, 8, 255, 90, 49, 3, 255, 92, 46, 7, 255, 89, 41, 4, 255, 83, 42, 2, 255, 80, 45, 5, 255, 73, 43, 4, 255, 74, 41, 3, 255, 81, 39, 0, 255, 90, 41, 1, 255, 90, 43, 2, 255, 91, 43, 5, 255, 90, 43, 6, 255, 80, 41, 2, 255, 71, 37, 0, 255, 80, 43, 1, 255, 90, 46, 4, 255, 89, 45, 7, 255, 79, 37, 3, 255, 86, 42, 3, 255, 96, 47, 5, 255, 88, 43, 4, 255, 82, 41, 5, 255, 100, 46, 5, 255, 92, 50, 2, 255, 83, 49, 4, 255, 82, 51, 2, 255, 79, 48, 0, 255, 98, 51, 4, 255, 107, 54, 4, 255, 101, 54, 3, 255, 107, 55, 1, 255, 115, 55, 3, 255, 119, 50, 1, 255, 114, 51, 2, 255, 114, 58, 6, 255, 103, 57, 1, 255, 98, 56, 4, 255, 98, 55, 4, 255, 98, 56, 5, 255, 94, 55, 2, 255, 88, 52, 0, 255, 90, 53, 4, 255, 108, 58, 7, 255, 130, 53, 5, 255, 124, 51, 1, 255, 114, 56, 3, 255, 108, 59, 7, 255, 104, 59, 2, 255, 121, 55, 0, 255, 128, 56, 5, 255, 128, 51, 6, 255, 119, 55, 0, 255, 109, 60, 2, 255, 103, 55, 3, 255, 115, 56, 4, 255, 116, 57, 7, 255, 114, 47, 3, 255, 118, 46, 3, 255, 122, 62, 4, 255, 120, 73, 1, 255, 116, 66, 0, 255, 117, 66, 0, 255, 120, 70, 3, 255, 123, 68, 3, 255, 132, 80, 1, 255, 133, 88, 3, 255, 145, 97, 0, 255, 147, 89, 1, 255, 118, 62, 3, 255, 128, 71, 4, 255, 140, 84, 5, 255, 140, 84, 7, 255, 138, 81, 2, 255, 143, 85, 4, 255, 144, 82, 7, 255, 117, 59, 7, 255, 123, 71, 9, 255, 114, 52, 4, 255, 105, 48, 5, 255, 117, 63, 3, 255, 134, 78, 1, 255, 125, 73, 7, 255, 115, 59, 5, 255, 108, 59, 4, 255, 113, 63, 9, 255, 101, 60, 7, 255, 103, 64, 14, 255, 102, 61, 7, 255, 101, 57, 13, 255, 101, 58, 15, 255, 95, 58, 7, 255, 95, 61, 9, 255, 95, 59, 7, 255, 97, 59, 8, 255, 100, 60, 15, 255, 101, 61, 16, 255, 93, 61, 20, 255, 95, 62, 25, 255, 104, 66, 14, 255, 106, 68, 17, 255, 99, 63, 18, 255, 104, 63, 14, 255, 99, 70, 16, 255, 90, 64, 15, 255, 103, 63, 23, 255, 101, 68, 25, 255, 97, 67, 26, 255, 103, 69, 22, 255, 105, 69, 22, 255, 100, 68, 19, 255, 101, 72, 22, 255, 101, 71, 27, 255, 101, 72, 27, 255, 98, 72, 40, 255, 99, 78, 22, 255, 102, 76, 32, 255, 104, 70, 43, 255, 106, 72, 35, 255, 108, 78, 42, 255, 110, 79, 35, 255, 111, 82, 32, 255, 110, 85, 31, 255, 112, 86, 30, 255, 111, 85, 36, 255, 107, 85, 36, 255, 113, 88, 36, 255, 115, 87, 31, 255, 117, 91, 36, 255, 114, 89, 37, 255, 114, 91, 41, 255, 114, 90, 37, 255, 116, 89, 35, 255, 115, 88, 50, 255, 114, 95, 35, 255, 111, 94, 31, 255, 113, 92, 41, 255, 117, 93, 39, 255, 118, 95, 34, 255, 115, 94, 35, 255, 115, 94, 39, 255, 114, 95, 30, 255, 113, 93, 33, 255, 115, 96, 25, 255, 114, 97, 25, 255, 112, 91, 41, 255, 114, 94, 38, 255, 116, 92, 37, 255, 116, 93, 27, 255, 119, 98, 9, 255, 121, 94, 27, 255, 120, 86, 43, 255, 120, 91, 26, 255, 119, 92, 18, 255, 115, 85, 28, 255, 114, 80, 32, 255, 116, 83, 30, 255, 113, 86, 18, 255, 111, 83, 26, 255, 116, 85, 10, 255, 118, 85, 23, 255, 111, 80, 32, 255, 108, 80, 27, 255, 112, 81, 22, 255, 118, 80, 20, 255, 117, 77, 19, 255, 108, 80, 9, 255, 106, 79, 20, 255, 110, 74, 20, 255, 112, 71, 9, 255, 107, 71, 10, 255, 106, 74, 14, 255, 108, 68, 19, 255, 110, 66, 22, 255, 111, 70, 18, 255, 108, 68, 14, 255, 106, 66, 17, 255, 109, 67, 9, 255, 116, 64, 8, 255, 116, 62, 9, 255, 117, 64, 10, 255, 109, 62, 2, 255, 110, 66, 2, 255, 112, 66, 2, 255, 105, 58, 8, 255, 108, 57, 9, 255, 109, 59, 4, 255, 104, 58, 5, 255, 110, 57, 9, 255, 115, 59, 6, 255, 116, 58, 5, 255, 117, 55, 3, 255, 111, 56, 2, 255, 102, 54, 2, 255, 99, 55, 3, 255, 107, 55, 8, 255, 111, 49, 6, 255, 102, 50, 3, 255, 102, 52, 4, 255, 104, 51, 3, 255, 103, 51, 4, 255, 96, 49, 3, 255, 101, 51, 6, 255, 95, 42, 1, 255, 95, 46, 4, 255, 95, 47, 2, 255, 94, 48, 3, 255, 95, 43, 4, 255, 99, 40, 3, 255, 92, 45, 3, 255, 91, 43, 1, 255, 87, 43, 3, 255, 90, 43, 4, 255, 91, 42, 4, 255, 88, 40, 4, 255, 83, 37, 2, 255, 81, 36, 3, 255, 87, 34, 9, 255, 83, 34, 3, 255, 81, 35, 4, 255, 81, 38, 5, 255, 80, 39, 2, 255, 82, 35, 7, 255, 69, 35, 4, 255, 77, 34, 2, 255, 86, 36, 5, 255, 106, 42, 1, 255, 121, 49, 5, 255, 121, 45, 3, 255, 129, 50, 6, 255, 123, 51, 0, 255, 121, 49, 1, 255, 127, 46, 4, 255, 126, 43, 2, 255, 121, 44, 5, 255, 110, 36, 2, 255, 120, 38, 2, 255, 125, 45, 1, 255, 122, 44, 4, 255, 118, 39, 3, 255, 129, 46, 5, 255, 142, 46, 3, 255, 130, 39, 4, 255, 109, 33, 4, 255, 98, 28, 3, 255, 102, 27, 1, 255, 99, 24, 4, 255, 92, 28, 4, 255, 90, 33, 2, 255, 105, 33, 2, 255, 116, 34, 7, 255, 114, 32, 3, 255, 126, 37, 2, 255, 123, 37, 2, 255, 115, 32, 0, 255, 113, 29, 0, 255, 108, 32, 3, 255, 122, 37, 1, 255, 139, 42, 6, 255, 127, 37, 2, 255, 103, 29, 2, 255, 101, 26, 3, 255, 121, 32, 6, 255, 127, 37, 4, 255, 128, 42, 3, 255, 129, 39, 4, 255, 120, 31, 2, 255, 125, 33, 1, 255, 121, 36, 7, 255, 118, 39, 3, 255, 138, 45, 4, 255, 143, 45, 1, 255, 141, 47, 6, 255, 144, 49, 0, 255, 140, 44, 0, 255, 145, 47, 3, 255, 145, 46, 2, 255, 142, 45, 2, 255, 140, 44, 1, 255, 141, 41, 2, 255, 136, 43, 2, 255, 132, 41, 1, 255, 134, 41, 2, 255, 125, 33, 0, 255, 125, 35, 1, 255, 125, 38, 1, 255, 125, 36, 0, 255, 130, 37, 3, 255, 130, 36, 2, 255, 126, 35, 0, 255, 128, 39, 4, 255, 126, 37, 4, 255, 121, 30, 1, 255, 122, 34, 1, 255, 128, 43, 4, 255, 133, 41, 5, 255, 134, 40, 5, 255, 131, 42, 3, 255, 130, 38, 6, 255, 118, 30, 2, 255, 94, 25, 2, 255, 84, 20, 5, 255, 93, 26, 4, 255, 95, 25, 3, 255, 97, 20, 1, 255, 111, 35, 4, 255, 117, 37, 3, 255, 105, 29, 4, 255, 88, 21, 3, 255, 96, 20, 6, 255, 96, 22, 1, 255, 85, 25, 1, 255, 80, 21, 6, 255, 88, 24, 4, 255, 75, 22, 2, 255, 59, 15, 1, 255, 66, 16, 2, 255, 66, 19, 4, 255, 64, 18, 2, 255, 75, 20, 1, 255, 75, 23, 2, 255, 67, 18, 2, 255, 70, 17, 3, 255, 70, 15, 0, 255, 64, 19, 5, 255, 69, 19, 5, 255, 58, 13, 0, 255, 67, 15, 4, 255, 70, 16, 3, 255, 63, 16, 0, 255, 67, 17, 3, 255, 74, 16, 3, 255, 74, 16, 2, 255, 71, 17, 2, 255, 69, 18, 4, 255, 71, 18, 4, 255, 77, 21, 0, 255, 86, 27, 2, 255, 90, 25, 4, 255, 89, 25, 5, 255, 81, 19, 1, 255, 16, 8, 2, 255, 18, 10, 2, 255, 19, 9, 1, 255, 21, 10, 4, 255, 19, 10, 3, 255, 16, 8, 3, 255, 19, 11, 3, 255, 19, 11, 0, 255, 21, 13, 2, 255, 16, 9, 1, 255, 18, 10, 5, 255, 24, 13, 4, 255, 27, 13, 3, 255, 25, 14, 6, 255, 20, 12, 2, 255, 20, 11, 1, 255, 26, 13, 3, 255, 27, 11, 3, 255, 23, 14, 2, 255, 20, 13, 1, 255, 20, 12, 2, 255, 24, 14, 4, 255, 27, 13, 4, 255, 27, 10, 1, 255, 30, 12, 2, 255, 31, 16, 5, 255, 26, 14, 2, 255, 31, 17, 5, 255, 32, 18, 5, 255, 30, 14, 2, 255, 33, 16, 2, 255, 33, 17, 3, 255, 31, 16, 3, 255, 45, 20, 6, 255, 42, 23, 2, 255, 40, 20, 1, 255, 55, 26, 8, 255, 49, 26, 4, 255, 41, 26, 1, 255, 43, 23, 4, 255, 45, 25, 7, 255, 43, 24, 4, 255, 47, 22, 5, 255, 57, 33, 9, 255, 54, 41, 26, 255, 59, 51, 22, 255, 75, 51, 12, 255, 69, 44, 11, 255, 67, 49, 11, 255, 67, 43, 7, 255, 63, 32, 2, 255, 53, 33, 4, 255, 66, 38, 11, 255, 76, 44, 12, 255, 74, 53, 5, 255, 77, 59, 13, 255, 79, 56, 9, 255, 85, 51, 7, 255, 91, 48, 11, 255, 88, 44, 7, 255, 89, 46, 3, 255, 93, 43, 3, 255, 92, 39, 2, 255, 84, 41, 2, 255, 72, 38, 1, 255, 72, 42, 4, 255, 71, 38, 0, 255, 87, 42, 5, 255, 96, 44, 4, 255, 91, 42, 1, 255, 86, 39, 1, 255, 78, 39, 3, 255, 75, 43, 6, 255, 74, 41, 2, 255, 73, 41, 3, 255, 69, 38, 2, 255, 75, 39, 1, 255, 75, 43, 0, 255, 75, 41, 7, 255, 77, 40, 2, 255, 83, 42, 2, 255, 86, 44, 5, 255, 85, 50, 0, 255, 84, 52, 0, 255, 83, 49, 5, 255, 79, 50, 3, 255, 81, 47, 3, 255, 94, 46, 3, 255, 99, 55, 5, 255, 91, 56, 5, 255, 90, 55, 2, 255, 94, 54, 2, 255, 101, 57, 6, 255, 96, 52, 1, 255, 94, 54, 1, 255, 93, 57, 0, 255, 97, 56, 5, 255, 93, 50, 1, 255, 91, 53, 4, 255, 88, 51, 2, 255, 94, 52, 4, 255, 86, 51, 2, 255, 104, 53, 2, 255, 116, 55, 4, 255, 107, 54, 3, 255, 107, 57, 5, 255, 98, 56, 1, 255, 96, 57, 1, 255, 110, 58, 6, 255, 111, 62, 5, 255, 102, 62, 1, 255, 106, 62, 3, 255, 117, 59, 4, 255, 119, 57, 2, 255, 112, 64, 0, 255, 115, 69, 3, 255, 118, 65, 4, 255, 114, 56, 0, 255, 118, 59, 6, 255, 119, 60, 9, 255, 113, 51, 3, 255, 113, 48, 2, 255, 127, 67, 4, 255, 129, 80, 9, 255, 128, 86, 3, 255, 143, 91, 4, 255, 141, 77, 2, 255, 125, 62, 2, 255, 126, 63, 6, 255, 137, 78, 4, 255, 142, 82, 3, 255, 136, 75, 5, 255, 148, 89, 8, 255, 154, 94, 4, 255, 119, 53, 9, 255, 116, 58, 11, 255, 143, 92, 5, 255, 141, 87, 3, 255, 127, 73, 9, 255, 120, 70, 15, 255, 115, 67, 4, 255, 113, 63, 3, 255, 108, 66, 6, 255, 100, 61, 7, 255, 93, 56, 5, 255, 97, 58, 12, 255, 95, 57, 15, 255, 91, 59, 9, 255, 94, 59, 9, 255, 97, 57, 10, 255, 93, 56, 12, 255, 88, 57, 9, 255, 93, 58, 7, 255, 100, 59, 15, 255, 103, 63, 18, 255, 98, 64, 11, 255, 98, 63, 15, 255, 93, 62, 13, 255, 93, 63, 18, 255, 99, 60, 23, 255, 101, 66, 16, 255, 95, 67, 14, 255, 93, 65, 14, 255, 99, 67, 18, 255, 97, 67, 25, 255, 98, 66, 23, 255, 101, 67, 32, 255, 105, 72, 25, 255, 106, 74, 25, 255, 97, 66, 29, 255, 96, 71, 28, 255, 98, 73, 28, 255, 102, 76, 29, 255, 108, 79, 17, 255, 103, 77, 21, 255, 102, 80, 20, 255, 100, 75, 31, 255, 98, 76, 24, 255, 97, 81, 36, 255, 103, 81, 38, 255, 104, 84, 29, 255, 104, 84, 30, 255, 109, 83, 43, 255, 113, 83, 43, 255, 110, 83, 39, 255, 114, 88, 42, 255, 113, 89, 34, 255, 114, 92, 36, 255, 112, 91, 36, 255, 113, 92, 39, 255, 114, 92, 36, 255, 115, 93, 33, 255, 117, 92, 35, 255, 119, 96, 37, 255, 117, 94, 39, 255, 114, 91, 44, 255, 113, 90, 45, 255, 114, 94, 43, 255, 116, 95, 43, 255, 116, 97, 41, 255, 113, 94, 32, 255, 116, 94, 40, 255, 113, 92, 33, 255, 115, 93, 40, 255, 115, 93, 34, 255, 121, 93, 37, 255, 122, 92, 43, 255, 118, 94, 23, 255, 117, 94, 29, 255, 116, 92, 30, 255, 119, 97, 16, 255, 115, 92, 30, 255, 113, 92, 19, 255, 114, 87, 30, 255, 117, 84, 37, 255, 117, 86, 19, 255, 114, 85, 23, 255, 112, 86, 24, 255, 111, 83, 21, 255, 111, 81, 15, 255, 117, 83, 14, 255, 119, 82, 13, 255, 115, 80, 20, 255, 105, 75, 27, 255, 105, 77, 19, 255, 118, 79, 13, 255, 116, 76, 17, 255, 112, 71, 16, 255, 105, 70, 21, 255, 105, 71, 12, 255, 108, 70, 17, 255, 109, 71, 9, 255, 109, 68, 14, 255, 107, 69, 19, 255, 101, 67, 9, 255, 107, 68, 15, 255, 108, 66, 14, 255, 111, 63, 8, 255, 115, 66, 6, 255, 110, 62, 3, 255, 107, 62, 7, 255, 110, 61, 8, 255, 116, 63, 1, 255, 106, 59, 13, 255, 102, 60, 16, 255, 105, 61, 3, 255, 106, 57, 5, 255, 107, 57, 9, 255, 112, 57, 2, 255, 114, 53, 2, 255, 112, 58, 5, 255, 108, 56, 4, 255, 105, 51, 4, 255, 108, 49, 3, 255, 111, 53, 6, 255, 109, 55, 7, 255, 99, 49, 3, 255, 102, 49, 3, 255, 100, 49, 1, 255, 97, 49, 0, 255, 95, 45, 1, 255, 97, 43, 5, 255, 98, 41, 5, 255, 100, 47, 6, 255, 97, 46, 0, 255, 96, 47, 1, 255, 97, 45, 4, 255, 97, 43, 6, 255, 89, 44, 4, 255, 96, 40, 2, 255, 94, 41, 4, 255, 86, 37, 3, 255, 85, 36, 4, 255, 87, 39, 6, 255, 85, 41, 3, 255, 82, 37, 3, 255, 85, 37, 3, 255, 86, 36, 5, 255, 81, 35, 1, 255, 82, 39, 3, 255, 82, 35, 4, 255, 84, 36, 2, 255, 80, 38, 2, 255, 80, 33, 1, 255, 87, 36, 5, 255, 102, 39, 4, 255, 117, 49, 2, 255, 124, 50, 4, 255, 124, 48, 1, 255, 126, 51, 2, 255, 127, 48, 2, 255, 132, 47, 4, 255, 137, 47, 6, 255, 133, 43, 3, 255, 129, 43, 1, 255, 133, 45, 3, 255, 125, 43, 1, 255, 123, 42, 3, 255, 123, 42, 4, 255, 119, 42, 3, 255, 122, 40, 2, 255, 116, 40, 2, 255, 102, 34, 5, 255, 91, 26, 2, 255, 92, 28, 2, 255, 86, 21, 6, 255, 83, 22, 2, 255, 94, 29, 5, 255, 99, 28, 1, 255, 94, 30, 1, 255, 92, 30, 0, 255, 116, 35, 4, 255, 117, 33, 4, 255, 99, 25, 3, 255, 98, 27, 5, 255, 98, 27, 7, 255, 116, 39, 9, 255, 125, 40, 1, 255, 118, 34, 1, 255, 110, 33, 5, 255, 103, 27, 2, 255, 108, 34, 4, 255, 115, 33, 2, 255, 121, 33, 0, 255, 119, 36, 4, 255, 108, 31, 1, 255, 124, 39, 4, 255, 125, 43, 3, 255, 126, 43, 0, 255, 136, 38, 0, 255, 138, 42, 2, 255, 138, 46, 3, 255, 147, 47, 2, 255, 142, 43, 2, 255, 145, 43, 3, 255, 142, 42, 2, 255, 139, 43, 3, 255, 136, 41, 2, 255, 133, 37, 0, 255, 134, 40, 3, 255, 133, 40, 1, 255, 133, 39, 2, 255, 127, 35, 3, 255, 124, 35, 5, 255, 121, 36, 1, 255, 127, 38, 2, 255, 130, 33, 0, 255, 127, 33, 2, 255, 125, 36, 2, 255, 124, 38, 1, 255, 125, 36, 1, 255, 127, 32, 3, 255, 126, 37, 2, 255, 128, 40, 0, 255, 134, 37, 0, 255, 136, 37, 2, 255, 129, 41, 1, 255, 123, 32, 3, 255, 124, 30, 2, 255, 104, 25, 6, 255, 84, 15, 2, 255, 97, 23, 1, 255, 103, 27, 4, 255, 99, 26, 2, 255, 111, 35, 1, 255, 125, 37, 1, 255, 122, 37, 6, 255, 93, 25, 2, 255, 103, 30, 4, 255, 106, 30, 1, 255, 97, 22, 2, 255, 87, 24, 2, 255, 102, 26, 1, 255, 102, 28, 6, 255, 65, 21, 3, 255, 55, 17, 0, 255, 64, 18, 2, 255, 62, 17, 4, 255, 66, 19, 2, 255, 70, 23, 0, 255, 65, 18, 3, 255, 64, 16, 2, 255, 67, 18, 3, 255, 64, 15, 3, 255, 59, 16, 2, 255, 60, 13, 3, 255, 62, 12, 2, 255, 66, 17, 4, 255, 67, 18, 3, 255, 63, 16, 1, 255, 65, 15, 2, 255, 68, 16, 1, 255, 66, 17, 2, 255, 58, 12, 1, 255, 57, 14, 3, 255, 64, 20, 4, 255, 67, 20, 1, 255, 68, 19, 3, 255, 63, 17, 2, 255, 59, 16, 1, 255, 16, 8, 2, 255, 17, 8, 1, 255, 18, 10, 2, 255, 17, 9, 1, 255, 15, 8, 1, 255, 18, 8, 4, 255, 15, 8, 2, 255, 17, 10, 1, 255, 20, 10, 3, 255, 18, 8, 1, 255, 23, 12, 5, 255, 23, 10, 2, 255, 28, 12, 4, 255, 33, 15, 4, 255, 29, 17, 2, 255, 26, 14, 2, 255, 24, 12, 1, 255, 29, 17, 3, 255, 21, 12, 4, 255, 20, 11, 3, 255, 26, 16, 6, 255, 21, 12, 2, 255, 24, 13, 2, 255, 28, 14, 3, 255, 32, 16, 6, 255, 34, 16, 3, 255, 30, 15, 0, 255, 24, 13, 2, 255, 19, 13, 2, 255, 26, 16, 3, 255, 35, 19, 2, 255, 40, 19, 1, 255, 27, 12, 2, 255, 41, 20, 4, 255, 37, 20, 0, 255, 40, 23, 4, 255, 47, 18, 7, 255, 34, 17, 1, 255, 36, 21, 4, 255, 42, 20, 7, 255, 41, 23, 8, 255, 39, 21, 2, 255, 52, 26, 6, 255, 52, 26, 2, 255, 59, 33, 14, 255, 63, 43, 18, 255, 75, 50, 13, 255, 78, 45, 16, 255, 69, 44, 13, 255, 60, 41, 8, 255, 62, 39, 3, 255, 58, 39, 4, 255, 62, 42, 6, 255, 72, 46, 8, 255, 72, 47, 8, 255, 71, 53, 5, 255, 80, 55, 2, 255, 88, 44, 1, 255, 87, 40, 5, 255, 75, 45, 4, 255, 75, 43, 1, 255, 85, 39, 3, 255, 77, 37, 2, 255, 78, 39, 5, 255, 80, 36, 1, 255, 83, 37, 4, 255, 83, 39, 1, 255, 83, 44, 2, 255, 77, 42, 7, 255, 73, 37, 5, 255, 74, 38, 2, 255, 70, 39, 1, 255, 71, 39, 2, 255, 73, 38, 2, 255, 67, 39, 3, 255, 69, 38, 3, 255, 77, 38, 3, 255, 74, 40, 1, 255, 75, 38, 3, 255, 74, 39, 2, 255, 80, 46, 4, 255, 84, 45, 3, 255, 85, 46, 1, 255, 82, 51, 3, 255, 80, 49, 1, 255, 81, 49, 1, 255, 85, 51, 3, 255, 92, 51, 3, 255, 89, 53, 1, 255, 87, 56, 5, 255, 88, 55, 4, 255, 87, 55, 2, 255, 94, 60, 6, 255, 97, 57, 4, 255, 94, 56, 4, 255, 95, 55, 5, 255, 90, 48, 3, 255, 84, 49, 2, 255, 84, 49, 2, 255, 83, 51, 3, 255, 87, 49, 1, 255, 87, 53, 3, 255, 99, 54, 5, 255, 100, 53, 2, 255, 96, 58, 1, 255, 95, 58, 2, 255, 95, 57, 3, 255, 96, 56, 3, 255, 95, 60, 3, 255, 99, 62, 2, 255, 103, 58, 3, 255, 113, 53, 3, 255, 116, 49, 0, 255, 112, 59, 1, 255, 112, 65, 1, 255, 113, 64, 4, 255, 116, 69, 1, 255, 118, 73, 0, 255, 117, 62, 3, 255, 112, 44, 4, 255, 110, 43, 2, 255, 119, 55, 4, 255, 131, 76, 3, 255, 135, 85, 3, 255, 138, 92, 2, 255, 135, 82, 1, 255, 112, 47, 6, 255, 110, 50, 10, 255, 108, 48, 4, 255, 117, 50, 4, 255, 132, 71, 2, 255, 138, 82, 4, 255, 136, 79, 8, 255, 137, 73, 2, 255, 122, 65, 4, 255, 112, 60, 3, 255, 116, 60, 1, 255, 113, 59, 8, 255, 105, 55, 8, 255, 98, 52, 10, 255, 95, 53, 6, 255, 94, 55, 11, 255, 86, 54, 10, 255, 89, 51, 12, 255, 85, 54, 2, 255, 94, 56, 13, 255, 92, 54, 12, 255, 85, 55, 13, 255, 93, 57, 13, 255, 92, 53, 5, 255, 91, 60, 21, 255, 99, 59, 13, 255, 113, 63, 9, 255, 106, 59, 13, 255, 103, 64, 16, 255, 94, 60, 20, 255, 94, 62, 17, 255, 98, 63, 14, 255, 95, 63, 16, 255, 94, 64, 20, 255, 97, 65, 10, 255, 97, 71, 13, 255, 93, 62, 25, 255, 101, 66, 21, 255, 102, 67, 18, 255, 101, 67, 21, 255, 108, 70, 21, 255, 112, 71, 34, 255, 99, 72, 24, 255, 97, 71, 30, 255, 98, 72, 30, 255, 96, 75, 21, 255, 101, 73, 26, 255, 96, 77, 19, 255, 95, 78, 25, 255, 97, 76, 42, 255, 97, 75, 37, 255, 96, 81, 30, 255, 97, 81, 30, 255, 105, 81, 34, 255, 103, 80, 38, 255, 103, 81, 39, 255, 105, 89, 27, 255, 109, 85, 35, 255, 114, 86, 38, 255, 107, 90, 29, 255, 107, 88, 34, 255, 111, 89, 35, 255, 110, 94, 36, 255, 109, 91, 39, 255, 114, 92, 44, 255, 113, 92, 35, 255, 115, 92, 38, 255, 115, 93, 41, 255, 115, 95, 36, 255, 115, 96, 41, 255, 116, 96, 44, 255, 117, 99, 37, 255, 113, 95, 41, 255, 113, 96, 36, 255, 118, 98, 38, 255, 117, 96, 27, 255, 117, 96, 44, 255, 115, 94, 34, 255, 120, 95, 27, 255, 120, 94, 39, 255, 119, 92, 38, 255, 121, 92, 32, 255, 121, 90, 35, 255, 117, 90, 31, 255, 113, 94, 21, 255, 114, 90, 26, 255, 116, 89, 20, 255, 116, 87, 25, 255, 116, 86, 26, 255, 114, 86, 24, 255, 109, 81, 30, 255, 111, 80, 24, 255, 116, 82, 23, 255, 111, 81, 20, 255, 114, 82, 20, 255, 118, 79, 23, 255, 114, 76, 21, 255, 108, 76, 32, 255, 107, 76, 22, 255, 111, 75, 14, 255, 111, 75, 8, 255, 110, 74, 12, 255, 108, 71, 23, 255, 109, 73, 14, 255, 106, 68, 15, 255, 107, 70, 16, 255, 108, 70, 6, 255, 108, 67, 8, 255, 107, 63, 16, 255, 108, 66, 18, 255, 103, 66, 8, 255, 108, 66, 16, 255, 111, 63, 11, 255, 107, 62, 9, 255, 107, 61, 8, 255, 106, 64, 7, 255, 110, 60, 6, 255, 104, 60, 4, 255, 103, 63, 5, 255, 107, 61, 7, 255, 108, 56, 5, 255, 105, 54, 4, 255, 105, 54, 6, 255, 103, 53, 3, 255, 102, 55, 1, 255, 106, 56, 9, 255, 107, 52, 10, 255, 107, 47, 4, 255, 108, 52, 4, 255, 106, 55, 3, 255, 96, 50, 1, 255, 101, 49, 3, 255, 96, 49, 2, 255, 94, 49, 3, 255, 96, 46, 5, 255, 91, 44, 4, 255, 96, 47, 6, 255, 99, 42, 4, 255, 99, 43, 5, 255, 94, 43, 2, 255, 99, 47, 5, 255, 92, 41, 2, 255, 88, 41, 3, 255, 96, 40, 2, 255, 99, 41, 7, 255, 94, 38, 8, 255, 82, 35, 5, 255, 85, 42, 8, 255, 86, 37, 3, 255, 75, 36, 0, 255, 80, 40, 3, 255, 88, 40, 5, 255, 85, 36, 2, 255, 83, 38, 6, 255, 80, 35, 5, 255, 83, 38, 2, 255, 88, 39, 3, 255, 80, 31, 0, 255, 85, 31, 4, 255, 96, 35, 5, 255, 110, 41, 3, 255, 123, 48, 6, 255, 124, 46, 1, 255, 126, 49, 1, 255, 132, 53, 2, 255, 127, 45, 1, 255, 129, 51, 2, 255, 133, 50, 3, 255, 123, 41, 1, 255, 118, 35, 1, 255, 119, 29, 3, 255, 126, 40, 3, 255, 119, 39, 4, 255, 112, 36, 4, 255, 105, 27, 0, 255, 109, 33, 2, 255, 104, 34, 7, 255, 95, 28, 2, 255, 92, 29, 4, 255, 80, 24, 5, 255, 84, 27, 4, 255, 92, 27, 4, 255, 92, 26, 2, 255, 88, 29, 1, 255, 90, 31, 2, 255, 101, 30, 3, 255, 106, 35, 5, 255, 94, 29, 1, 255, 95, 27, 5, 255, 102, 29, 4, 255, 118, 38, 8, 255, 112, 28, 2, 255, 107, 28, 0, 255, 103, 32, 0, 255, 109, 34, 4, 255, 108, 36, 2, 255, 108, 32, 0, 255, 124, 34, 3, 255, 125, 39, 1, 255, 123, 36, 1, 255, 130, 34, 3, 255, 132, 37, 3, 255, 132, 38, 2, 255, 137, 41, 2, 255, 136, 41, 0, 255, 137, 41, 1, 255, 141, 42, 4, 255, 142, 46, 3, 255, 138, 44, 3, 255, 140, 42, 3, 255, 137, 38, 1, 255, 135, 40, 3, 255, 132, 36, 4, 255, 129, 37, 4, 255, 132, 37, 3, 255, 132, 36, 1, 255, 122, 33, 2, 255, 113, 29, 1, 255, 114, 29, 1, 255, 125, 36, 4, 255, 123, 36, 2, 255, 118, 34, 1, 255, 122, 36, 4, 255, 123, 33, 1, 255, 128, 34, 2, 255, 129, 34, 2, 255, 123, 34, 1, 255, 127, 37, 2, 255, 129, 38, 2, 255, 129, 38, 1, 255, 128, 39, 1, 255, 125, 35, 2, 255, 123, 36, 2, 255, 120, 29, 4, 255, 98, 21, 3, 255, 79, 20, 0, 255, 92, 23, 4, 255, 98, 23, 2, 255, 108, 33, 4, 255, 116, 35, 2, 255, 122, 32, 3, 255, 107, 22, 3, 255, 98, 25, 2, 255, 116, 37, 6, 255, 112, 30, 2, 255, 101, 27, 3, 255, 105, 28, 2, 255, 119, 31, 4, 255, 90, 24, 2, 255, 63, 17, 2, 255, 69, 18, 8, 255, 68, 16, 1, 255, 69, 16, 1, 255, 68, 21, 2, 255, 66, 17, 4, 255, 59, 17, 7, 255, 53, 10, 3, 255, 53, 17, 4, 255, 54, 14, 5, 255, 56, 14, 3, 255, 58, 14, 2, 255, 56, 12, 0, 255, 61, 13, 1, 255, 62, 14, 1, 255, 63, 16, 1, 255, 67, 17, 3, 255, 63, 15, 1, 255, 56, 14, 1, 255, 56, 12, 2, 255, 60, 12, 4, 255, 54, 12, 3, 255, 49, 11, 2, 255, 52, 14, 2, 255, 55, 14, 2, 255, 17, 10, 3, 255, 17, 8, 2, 255, 17, 9, 3, 255, 16, 10, 4, 255, 15, 7, 2, 255, 18, 8, 3, 255, 16, 7, 1, 255, 17, 9, 0, 255, 19, 8, 1, 255, 26, 13, 4, 255, 25, 12, 2, 255, 28, 14, 5, 255, 30, 16, 6, 255, 33, 15, 3, 255, 32, 16, 3, 255, 34, 20, 8, 255, 29, 14, 2, 255, 29, 16, 4, 255, 21, 12, 4, 255, 19, 11, 5, 255, 20, 11, 2, 255, 28, 15, 3, 255, 32, 16, 2, 255, 29, 15, 1, 255, 22, 12, 3, 255, 27, 15, 4, 255, 32, 15, 1, 255, 27, 14, 3, 255, 25, 15, 3, 255, 28, 18, 3, 255, 30, 16, 3, 255, 30, 15, 3, 255, 26, 14, 4, 255, 39, 21, 5, 255, 42, 20, 0, 255, 38, 19, 1, 255, 36, 18, 4, 255, 37, 19, 6, 255, 39, 20, 5, 255, 38, 19, 2, 255, 39, 22, 0, 255, 45, 27, 2, 255, 58, 34, 7, 255, 51, 26, 2, 255, 49, 24, 2, 255, 53, 37, 8, 255, 65, 42, 10, 255, 65, 43, 8, 255, 60, 41, 8, 255, 62, 41, 2, 255, 65, 39, 5, 255, 63, 34, 5, 255, 70, 43, 5, 255, 79, 45, 13, 255, 78, 42, 9, 255, 78, 45, 2, 255, 81, 49, 6, 255, 81, 43, 2, 255, 76, 35, 3, 255, 69, 45, 5, 255, 78, 45, 3, 255, 86, 38, 8, 255, 74, 36, 3, 255, 72, 39, 4, 255, 69, 42, 4, 255, 71, 38, 5, 255, 76, 40, 3, 255, 74, 41, 2, 255, 71, 37, 6, 255, 73, 34, 4, 255, 73, 35, 3, 255, 68, 33, 3, 255, 71, 36, 4, 255, 72, 37, 2, 255, 66, 38, 0, 255, 69, 40, 1, 255, 80, 41, 3, 255, 81, 40, 4, 255, 78, 38, 2, 255, 76, 40, 0, 255, 79, 46, 3, 255, 80, 47, 1, 255, 84, 46, 2, 255, 84, 50, 4, 255, 81, 48, 2, 255, 82, 48, 1, 255, 86, 51, 3, 255, 90, 52, 3, 255, 87, 50, 1, 255, 86, 51, 0, 255, 89, 53, 1, 255, 92, 56, 3, 255, 92, 57, 3, 255, 90, 54, 1, 255, 89, 52, 2, 255, 88, 51, 4, 255, 83, 48, 4, 255, 76, 48, 2, 255, 82, 47, 3, 255, 84, 52, 4, 255, 92, 53, 4, 255, 93, 53, 2, 255, 90, 52, 2, 255, 94, 53, 2, 255, 98, 58, 3, 255, 97, 56, 1, 255, 99, 58, 5, 255, 101, 59, 3, 255, 98, 58, 0, 255, 101, 60, 3, 255, 111, 49, 3, 255, 120, 41, 2, 255, 119, 56, 8, 255, 110, 62, 2, 255, 111, 67, 1, 255, 112, 65, 4, 255, 117, 65, 5, 255, 103, 63, 3, 255, 104, 55, 7, 255, 120, 57, 9, 255, 129, 75, 2, 255, 135, 86, 3, 255, 137, 82, 3, 255, 140, 79, 0, 255, 145, 85, 5, 255, 128, 75, 2, 255, 108, 48, 3, 255, 120, 51, 7, 255, 108, 46, 5, 255, 108, 50, 3, 255, 101, 48, 4, 255, 98, 51, 8, 255, 94, 55, 5, 255, 87, 53, 6, 255, 88, 51, 4, 255, 88, 49, 9, 255, 92, 52, 16, 255, 100, 53, 4, 255, 109, 56, 6, 255, 97, 52, 7, 255, 88, 55, 9, 255, 85, 49, 7, 255, 93, 51, 8, 255, 94, 56, 4, 255, 99, 54, 12, 255, 95, 52, 12, 255, 89, 54, 3, 255, 94, 60, 13, 255, 92, 54, 13, 255, 97, 62, 8, 255, 85, 62, 8, 255, 94, 61, 7, 255, 100, 62, 14, 255, 90, 59, 27, 255, 88, 59, 13, 255, 92, 60, 12, 255, 97, 62, 19, 255, 93, 58, 23, 255, 90, 63, 22, 255, 86, 64, 18, 255, 84, 68, 21, 255, 88, 65, 27, 255, 92, 61, 28, 255, 93, 60, 23, 255, 99, 65, 19, 255, 107, 69, 26, 255, 100, 70, 11, 255, 104, 73, 18, 255, 100, 70, 23, 255, 94, 70, 25, 255, 96, 72, 22, 255, 96, 74, 27, 255, 91, 75, 27, 255, 95, 74, 31, 255, 99, 73, 33, 255, 96, 80, 29, 255, 96, 79, 30, 255, 103, 76, 34, 255, 103, 81, 32, 255, 107, 87, 28, 255, 100, 80, 36, 255, 98, 81, 35, 255, 107, 89, 30, 255, 110, 90, 39, 255, 110, 92, 32, 255, 111, 92, 41, 255, 108, 88, 45, 255, 111, 92, 35, 255, 107, 94, 37, 255, 106, 91, 45, 255, 114, 93, 43, 255, 113, 96, 36, 255, 115, 97, 44, 255, 113, 94, 42, 255, 114, 95, 37, 255, 118, 98, 42, 255, 114, 98, 26, 255, 116, 98, 30, 255, 113, 96, 40, 255, 116, 96, 38, 255, 120, 97, 41, 255, 116, 102, 21, 255, 116, 102, 30, 255, 114, 96, 33, 255, 118, 95, 39, 255, 123, 93, 35, 255, 121, 93, 35, 255, 121, 91, 39, 255, 121, 90, 29, 255, 117, 92, 17, 255, 113, 90, 35, 255, 112, 93, 21, 255, 114, 91, 27, 255, 115, 89, 26, 255, 114, 85, 23, 255, 111, 85, 26, 255, 113, 87, 25, 255, 113, 83, 26, 255, 114, 81, 24, 255, 109, 80, 11, 255, 111, 78, 31, 255, 109, 76, 22, 255, 110, 79, 18, 255, 109, 79, 27, 255, 106, 73, 25, 255, 107, 73, 17, 255, 108, 74, 14, 255, 108, 72, 21, 255, 107, 70, 17, 255, 115, 76, 12, 255, 117, 74, 13, 255, 113, 71, 19, 255, 110, 69, 13, 255, 111, 68, 7, 255, 111, 64, 11, 255, 107, 65, 14, 255, 102, 64, 8, 255, 108, 61, 14, 255, 112, 61, 13, 255, 112, 62, 11, 255, 109, 63, 8, 255, 106, 64, 7, 255, 106, 58, 7, 255, 109, 62, 8, 255, 105, 59, 4, 255, 105, 55, 7, 255, 111, 58, 7, 255, 108, 54, 2, 255, 109, 57, 7, 255, 104, 55, 4, 255, 99, 51, 5, 255, 99, 52, 9, 255, 98, 47, 9, 255, 102, 47, 7, 255, 105, 53, 6, 255, 101, 51, 2, 255, 100, 49, 3, 255, 103, 49, 3, 255, 96, 48, 2, 255, 93, 48, 3, 255, 97, 45, 3, 255, 95, 45, 2, 255, 94, 44, 2, 255, 96, 41, 2, 255, 96, 42, 0, 255, 94, 43, 4, 255, 95, 44, 6, 255, 92, 42, 2, 255, 89, 43, 1, 255, 93, 43, 3, 255, 95, 42, 3, 255, 90, 39, 2, 255, 81, 36, 1, 255, 85, 40, 8, 255, 84, 35, 4, 255, 80, 37, 4, 255, 81, 37, 2, 255, 84, 35, 1, 255, 83, 34, 3, 255, 82, 35, 6, 255, 78, 34, 3, 255, 83, 35, 5, 255, 85, 34, 4, 255, 79, 34, 1, 255, 84, 33, 1, 255, 99, 36, 4, 255, 107, 36, 4, 255, 117, 44, 10, 255, 127, 47, 6, 255, 128, 47, 0, 255, 131, 51, 6, 255, 132, 47, 6, 255, 137, 48, 3, 255, 136, 50, 3, 255, 120, 40, 5, 255, 108, 31, 6, 255, 104, 32, 5, 255, 102, 33, 0, 255, 104, 32, 4, 255, 109, 35, 9, 255, 104, 29, 3, 255, 112, 34, 3, 255, 112, 33, 3, 255, 100, 34, 3, 255, 102, 33, 5, 255, 95, 31, 0, 255, 101, 32, 2, 255, 98, 33, 4, 255, 90, 31, 1, 255, 92, 24, 1, 255, 107, 27, 9, 255, 102, 25, 4, 255, 92, 27, 0, 255, 95, 27, 2, 255, 103, 26, 4, 255, 105, 26, 2, 255, 111, 33, 6, 255, 100, 24, 1, 255, 92, 23, 3, 255, 94, 31, 4, 255, 109, 35, 4, 255, 112, 34, 3, 255, 112, 34, 2, 255, 128, 39, 6, 255, 135, 42, 5, 255, 134, 41, 6, 255, 128, 37, 2, 255, 126, 38, 3, 255, 130, 39, 3, 255, 132, 43, 2, 255, 133, 44, 2, 255, 131, 40, 2, 255, 132, 39, 5, 255, 136, 41, 7, 255, 130, 38, 5, 255, 133, 39, 3, 255, 135, 39, 0, 255, 135, 40, 0, 255, 132, 38, 1, 255, 127, 36, 4, 255, 125, 37, 3, 255, 124, 39, 2, 255, 124, 38, 5, 255, 118, 32, 4, 255, 111, 29, 0, 255, 113, 32, 1, 255, 115, 36, 3, 255, 117, 35, 2, 255, 122, 32, 3, 255, 125, 31, 3, 255, 126, 34, 4, 255, 120, 35, 1, 255, 123, 34, 0, 255, 127, 35, 1, 255, 129, 36, 2, 255, 128, 38, 1, 255, 126, 37, 2, 255, 125, 35, 1, 255, 123, 39, 3, 255, 121, 38, 3, 255, 106, 32, 5, 255, 78, 19, 3, 255, 81, 20, 2, 255, 91, 23, 1, 255, 96, 23, 5, 255, 112, 28, 1, 255, 121, 33, 0, 255, 106, 24, 2, 255, 87, 23, 2, 255, 110, 35, 5, 255, 120, 35, 2, 255, 111, 30, 1, 255, 102, 27, 1, 255, 108, 32, 3, 255, 118, 32, 6, 255, 79, 22, 1, 255, 53, 15, 1, 255, 70, 13, 7, 255, 71, 16, 4, 255, 65, 15, 0, 255, 61, 20, 0, 255, 59, 15, 1, 255, 52, 15, 6, 255, 50, 14, 5, 255, 56, 13, 3, 255, 55, 13, 4, 255, 52, 12, 1, 255, 58, 14, 4, 255, 62, 16, 6, 255, 58, 15, 4, 255, 52, 11, 0, 255, 58, 17, 4, 255, 59, 16, 5, 255, 63, 16, 6, 255, 59, 14, 5, 255, 53, 12, 3, 255, 48, 11, 1, 255, 39, 12, 2, 255, 44, 16, 1, 255, 51, 15, 1, 255, 17, 7, 3, 255, 14, 4, 0, 255, 14, 6, 2, 255, 15, 9, 4, 255, 15, 9, 3, 255, 18, 8, 4, 255, 19, 9, 2, 255, 20, 9, 0, 255, 25, 12, 3, 255, 28, 14, 4, 255, 27, 13, 2, 255, 32, 15, 4, 255, 32, 15, 1, 255, 34, 16, 4, 255, 29, 13, 4, 255, 33, 19, 6, 255, 33, 17, 3, 255, 29, 12, 3, 255, 25, 11, 2, 255, 26, 14, 4, 255, 24, 12, 3, 255, 23, 14, 5, 255, 21, 12, 3, 255, 22, 14, 2, 255, 23, 14, 2, 255, 27, 15, 4, 255, 33, 16, 4, 255, 31, 14, 2, 255, 34, 18, 2, 255, 30, 17, 2, 255, 22, 12, 3, 255, 19, 11, 7, 255, 26, 14, 5, 255, 30, 15, 2, 255, 36, 20, 3, 255, 37, 21, 6, 255, 33, 15, 1, 255, 34, 20, 3, 255, 36, 20, 5, 255, 35, 18, 2, 255, 43, 25, 4, 255, 42, 25, 2, 255, 39, 21, 1, 255, 48, 26, 5, 255, 43, 26, 3, 255, 46, 31, 5, 255, 59, 30, 6, 255, 66, 38, 12, 255, 65, 40, 9, 255, 72, 44, 11, 255, 70, 45, 17, 255, 68, 38, 11, 255, 70, 38, 2, 255, 73, 44, 1, 255, 76, 44, 7, 255, 80, 38, 3, 255, 86, 41, 1, 255, 78, 42, 1, 255, 72, 35, 1, 255, 79, 32, 5, 255, 78, 38, 2, 255, 72, 43, 9, 255, 59, 39, 6, 255, 76, 44, 12, 255, 70, 34, 6, 255, 67, 33, 5, 255, 68, 38, 4, 255, 69, 40, 3, 255, 69, 38, 4, 255, 66, 39, 2, 255, 71, 38, 1, 255, 73, 37, 1, 255, 75, 38, 4, 255, 73, 38, 3, 255, 66, 36, 1, 255, 68, 38, 3, 255, 75, 40, 6, 255, 72, 41, 3, 255, 76, 41, 2, 255, 78, 43, 2, 255, 81, 45, 3, 255, 82, 47, 2, 255, 85, 47, 0, 255, 87, 47, 2, 255, 83, 50, 3, 255, 83, 50, 3, 255, 88, 49, 5, 255, 87, 51, 4, 255, 92, 55, 6, 255, 94, 54, 3, 255, 93, 53, 2, 255, 92, 54, 3, 255, 91, 55, 3, 255, 86, 52, 3, 255, 83, 49, 3, 255, 80, 46, 2, 255, 77, 47, 1, 255, 75, 44, 0, 255, 83, 48, 3, 255, 79, 47, 1, 255, 88, 53, 2, 255, 94, 54, 2, 255, 91, 51, 2, 255, 94, 52, 2, 255, 99, 52, 3, 255, 97, 54, 3, 255, 97, 54, 1, 255, 107, 57, 2, 255, 110, 57, 1, 255, 104, 59, 3, 255, 109, 55, 2, 255, 119, 55, 2, 255, 116, 59, 2, 255, 111, 63, 4, 255, 111, 65, 6, 255, 113, 65, 2, 255, 119, 65, 8, 255, 107, 70, 6, 255, 120, 79, 3, 255, 136, 81, 3, 255, 129, 77, 6, 255, 117, 67, 4, 255, 110, 60, 2, 255, 105, 59, 3, 255, 99, 55, 2, 255, 96, 51, 7, 255, 94, 47, 7, 255, 102, 44, 4, 255, 107, 43, 8, 255, 97, 49, 6, 255, 86, 51, 4, 255, 84, 49, 2, 255, 87, 49, 2, 255, 90, 52, 6, 255, 85, 49, 3, 255, 82, 48, 10, 255, 85, 48, 13, 255, 102, 56, 0, 255, 107, 56, 4, 255, 89, 51, 2, 255, 80, 53, 3, 255, 99, 52, 6, 255, 114, 56, 5, 255, 96, 55, 5, 255, 109, 54, 15, 255, 102, 56, 7, 255, 88, 55, 4, 255, 98, 56, 19, 255, 95, 56, 9, 255, 91, 59, 5, 255, 80, 55, 16, 255, 94, 58, 19, 255, 91, 57, 7, 255, 88, 61, 21, 255, 89, 58, 17, 255, 96, 61, 12, 255, 98, 63, 8, 255, 94, 63, 18, 255, 91, 59, 25, 255, 93, 61, 25, 255, 86, 64, 15, 255, 85, 62, 19, 255, 89, 64, 26, 255, 93, 70, 25, 255, 93, 66, 19, 255, 100, 68, 24, 255, 108, 69, 31, 255, 98, 67, 32, 255, 95, 72, 18, 255, 96, 73, 18, 255, 98, 75, 24, 255, 106, 79, 28, 255, 105, 76, 32, 255, 96, 73, 28, 255, 92, 76, 38, 255, 95, 76, 33, 255, 96, 81, 20, 255, 93, 82, 33, 255, 100, 79, 44, 255, 106, 84, 39, 255, 104, 85, 41, 255, 95, 82, 38, 255, 103, 83, 39, 255, 102, 90, 31, 255, 97, 90, 37, 255, 107, 89, 42, 255, 111, 90, 37, 255, 115, 94, 32, 255, 111, 97, 27, 255, 110, 96, 38, 255, 118, 99, 32, 255, 116, 97, 31, 255, 114, 98, 31, 255, 117, 100, 39, 255, 118, 99, 38, 255, 116, 95, 41, 255, 113, 92, 46, 255, 118, 99, 45, 255, 116, 96, 41, 255, 124, 97, 44, 255, 124, 95, 40, 255, 119, 96, 34, 255, 116, 95, 35, 255, 119, 96, 42, 255, 120, 94, 38, 255, 121, 93, 34, 255, 121, 94, 36, 255, 121, 94, 32, 255, 122, 92, 28, 255, 121, 90, 26, 255, 122, 88, 36, 255, 119, 89, 28, 255, 119, 85, 39, 255, 120, 87, 35, 255, 118, 88, 23, 255, 111, 86, 26, 255, 109, 85, 29, 255, 112, 83, 29, 255, 110, 79, 23, 255, 105, 82, 16, 255, 108, 82, 10, 255, 112, 81, 14, 255, 108, 76, 18, 255, 103, 75, 22, 255, 104, 75, 10, 255, 108, 77, 5, 255, 108, 76, 15, 255, 102, 67, 18, 255, 107, 69, 16, 255, 113, 70, 10, 255, 118, 71, 7, 255, 118, 71, 14, 255, 113, 66, 16, 255, 113, 68, 8, 255, 110, 66, 3, 255, 109, 66, 10, 255, 109, 66, 13, 255, 112, 62, 8, 255, 113, 62, 6, 255, 112, 60, 2, 255, 108, 62, 2, 255, 108, 62, 4, 255, 108, 61, 6, 255, 110, 62, 3, 255, 108, 59, 1, 255, 105, 54, 5, 255, 110, 55, 7, 255, 109, 53, 6, 255, 105, 52, 10, 255, 100, 49, 3, 255, 105, 53, 8, 255, 103, 50, 9, 255, 101, 47, 5, 255, 109, 53, 8, 255, 103, 50, 2, 255, 101, 50, 3, 255, 102, 47, 7, 255, 104, 48, 6, 255, 96, 48, 3, 255, 93, 46, 2, 255, 97, 43, 3, 255, 100, 43, 2, 255, 99, 44, 5, 255, 95, 44, 5, 255, 96, 45, 1, 255, 95, 41, 1, 255, 92, 42, 6, 255, 88, 41, 3, 255, 90, 42, 2, 255, 88, 40, 5, 255, 85, 41, 1, 255, 84, 40, 0, 255, 85, 38, 2, 255, 86, 39, 5, 255, 86, 37, 5, 255, 80, 35, 3, 255, 83, 37, 4, 255, 84, 36, 3, 255, 81, 35, 3, 255, 81, 36, 5, 255, 78, 35, 2, 255, 83, 34, 7, 255, 88, 33, 10, 255, 83, 35, 3, 255, 86, 38, 1, 255, 100, 45, 4, 255, 104, 39, 3, 255, 108, 37, 4, 255, 122, 47, 3, 255, 135, 49, 1, 255, 134, 46, 5, 255, 132, 51, 4, 255, 135, 52, 1, 255, 131, 52, 2, 255, 123, 43, 5, 255, 109, 29, 3, 255, 113, 39, 6, 255, 113, 37, 3, 255, 117, 36, 4, 255, 125, 39, 11, 255, 127, 41, 6, 255, 128, 44, 6, 255, 132, 40, 8, 255, 125, 47, 2, 255, 130, 45, 0, 255, 122, 39, 3, 255, 116, 39, 4, 255, 110, 33, 2, 255, 107, 31, 2, 255, 104, 32, 2, 255, 108, 36, 1, 255, 113, 33, 2, 255, 106, 29, 6, 255, 99, 24, 7, 255, 98, 21, 1, 255, 96, 24, 3, 255, 97, 28, 2, 255, 93, 27, 2, 255, 88, 21, 6, 255, 93, 28, 5, 255, 102, 32, 0, 255, 114, 30, 4, 255, 120, 38, 6, 255, 131, 41, 5, 255, 133, 36, 4, 255, 128, 38, 3, 255, 127, 44, 4, 255, 125, 40, 2, 255, 127, 39, 1, 255, 130, 41, 2, 255, 134, 44, 4, 255, 132, 43, 5, 255, 128, 38, 4, 255, 128, 35, 2, 255, 129, 35, 2, 255, 127, 37, 2, 255, 131, 39, 3, 255, 134, 37, 1, 255, 132, 39, 4, 255, 125, 35, 4, 255, 122, 33, 2, 255, 120, 33, 0, 255, 123, 35, 2, 255, 118, 34, 4, 255, 116, 31, 2, 255, 114, 31, 1, 255, 114, 33, 3, 255, 116, 34, 4, 255, 119, 34, 6, 255, 122, 35, 5, 255, 120, 33, 3, 255, 117, 32, 2, 255, 125, 36, 2, 255, 131, 37, 4, 255, 133, 39, 5, 255, 129, 35, 2, 255, 123, 34, 0, 255, 124, 35, 1, 255, 122, 36, 2, 255, 125, 33, 1, 255, 126, 31, 4, 255, 90, 23, 7, 255, 78, 25, 1, 255, 88, 25, 3, 255, 79, 15, 2, 255, 98, 26, 3, 255, 113, 34, 0, 255, 111, 37, 7, 255, 82, 22, 1, 255, 96, 31, 4, 255, 112, 38, 2, 255, 117, 34, 0, 255, 110, 28, 3, 255, 110, 29, 4, 255, 116, 34, 2, 255, 105, 29, 1, 255, 74, 19, 4, 255, 58, 16, 5, 255, 64, 16, 2, 255, 64, 19, 3, 255, 62, 17, 3, 255, 61, 15, 3, 255, 55, 15, 4, 255, 49, 12, 0, 255, 46, 13, 1, 255, 52, 15, 7, 255, 52, 12, 6, 255, 49, 10, 0, 255, 54, 14, 3, 255, 58, 12, 7, 255, 50, 10, 3, 255, 48, 15, 3, 255, 49, 13, 4, 255, 52, 10, 4, 255, 46, 12, 1, 255, 49, 15, 2, 255, 57, 15, 3, 255, 50, 13, 5, 255, 49, 12, 2, 255, 51, 13, 2, 255, 17, 8, 6, 255, 16, 6, 4, 255, 14, 6, 3, 255, 12, 6, 3, 255, 13, 9, 4, 255, 17, 8, 3, 255, 21, 11, 4, 255, 20, 11, 1, 255, 22, 11, 2, 255, 23, 10, 1, 255, 28, 14, 3, 255, 29, 14, 1, 255, 36, 20, 6, 255, 31, 16, 1, 255, 26, 13, 3, 255, 29, 18, 2, 255, 32, 17, 2, 255, 32, 14, 6, 255, 32, 15, 5, 255, 25, 13, 4, 255, 24, 12, 3, 255, 22, 12, 2, 255, 25, 16, 3, 255, 19, 12, 1, 255, 19, 14, 2, 255, 23, 13, 3, 255, 30, 13, 4, 255, 30, 15, 6, 255, 26, 13, 3, 255, 21, 10, 0, 255, 21, 10, 2, 255, 21, 11, 4, 255, 22, 17, 4, 255, 35, 13, 3, 255, 34, 16, 3, 255, 26, 19, 3, 255, 34, 19, 5, 255, 34, 20, 1, 255, 32, 16, 2, 255, 34, 18, 5, 255, 43, 22, 5, 255, 42, 23, 4, 255, 38, 24, 6, 255, 42, 22, 6, 255, 44, 24, 8, 255, 51, 25, 5, 255, 51, 26, 7, 255, 58, 34, 10, 255, 66, 47, 15, 255, 65, 46, 24, 255, 77, 57, 28, 255, 69, 53, 25, 255, 77, 52, 19, 255, 77, 47, 13, 255, 74, 44, 8, 255, 79, 39, 3, 255, 79, 34, 3, 255, 75, 36, 7, 255, 71, 33, 6, 255, 67, 32, 5, 255, 65, 34, 7, 255, 75, 43, 4, 255, 72, 46, 1, 255, 70, 38, 7, 255, 76, 34, 5, 255, 72, 37, 4, 255, 66, 35, 3, 255, 66, 34, 2, 255, 66, 35, 1, 255, 64, 39, 1, 255, 66, 38, 2, 255, 72, 38, 3, 255, 72, 37, 3, 255, 68, 36, 1, 255, 68, 37, 0, 255, 71, 39, 2, 255, 71, 40, 2, 255, 64, 42, 1, 255, 73, 44, 4, 255, 77, 42, 2, 255, 80, 43, 1, 255, 86, 48, 4, 255, 91, 49, 5, 255, 86, 46, 2, 255, 82, 50, 3, 255, 83, 50, 3, 255, 89, 49, 3, 255, 86, 48, 1, 255, 94, 53, 3, 255, 95, 53, 3, 255, 88, 51, 0, 255, 86, 50, 2, 255, 86, 51, 4, 255, 79, 45, 0, 255, 76, 41, 0, 255, 78, 44, 2, 255, 80, 49, 2, 255, 82, 46, 1, 255, 85, 49, 3, 255, 81, 50, 3, 255, 83, 51, 0, 255, 91, 52, 2, 255, 92, 51, 1, 255, 94, 52, 1, 255, 100, 51, 3, 255, 98, 54, 4, 255, 94, 57, 4, 255, 101, 58, 3, 255, 102, 52, 1, 255, 106, 55, 7, 255, 102, 57, 6, 255, 101, 60, 2, 255, 110, 60, 1, 255, 113, 67, 2, 255, 116, 68, 0, 255, 115, 68, 0, 255, 109, 64, 0, 255, 103, 61, 2, 255, 97, 59, 2, 255, 94, 52, 0, 255, 88, 50, 3, 255, 84, 49, 1, 255, 85, 46, 3, 255, 85, 51, 7, 255, 77, 47, 1, 255, 79, 47, 5, 255, 87, 49, 2, 255, 89, 48, 2, 255, 80, 47, 7, 255, 78, 47, 6, 255, 81, 50, 5, 255, 82, 49, 2, 255, 84, 50, 4, 255, 84, 51, 4, 255, 78, 49, 0, 255, 78, 51, 5, 255, 77, 49, 6, 255, 92, 49, 5, 255, 93, 50, 6, 255, 85, 53, 8, 255, 78, 50, 7, 255, 84, 52, 13, 255, 94, 55, 1, 255, 77, 53, 10, 255, 86, 49, 10, 255, 89, 46, 15, 255, 83, 53, 14, 255, 90, 57, 6, 255, 83, 53, 15, 255, 78, 52, 16, 255, 80, 56, 16, 255, 101, 60, 15, 255, 112, 63, 15, 255, 102, 64, 21, 255, 83, 63, 16, 255, 89, 59, 19, 255, 100, 61, 21, 255, 110, 67, 22, 255, 105, 65, 18, 255, 92, 59, 22, 255, 88, 64, 19, 255, 89, 63, 21, 255, 98, 68, 22, 255, 101, 69, 9, 255, 103, 70, 29, 255, 95, 68, 25, 255, 95, 66, 26, 255, 92, 69, 30, 255, 95, 76, 25, 255, 93, 74, 25, 255, 96, 74, 28, 255, 108, 77, 20, 255, 100, 73, 29, 255, 91, 76, 28, 255, 93, 77, 27, 255, 86, 73, 45, 255, 87, 81, 36, 255, 93, 82, 43, 255, 91, 80, 43, 255, 94, 83, 40, 255, 96, 86, 41, 255, 97, 86, 33, 255, 101, 87, 44, 255, 101, 86, 37, 255, 106, 88, 46, 255, 103, 88, 43, 255, 110, 93, 41, 255, 114, 92, 35, 255, 113, 95, 38, 255, 114, 97, 34, 255, 122, 99, 30, 255, 122, 100, 40, 255, 122, 100, 35, 255, 124, 102, 37, 255, 121, 100, 37, 255, 118, 98, 37, 255, 120, 100, 42, 255, 115, 98, 44, 255, 117, 98, 39, 255, 121, 100, 44, 255, 119, 94, 42, 255, 122, 92, 51, 255, 118, 96, 44, 255, 118, 98, 39, 255, 124, 96, 33, 255, 120, 95, 36, 255, 117, 96, 30, 255, 117, 95, 33, 255, 120, 93, 35, 255, 123, 90, 31, 255, 123, 87, 27, 255, 117, 87, 31, 255, 116, 84, 33, 255, 116, 84, 26, 255, 117, 89, 19, 255, 115, 88, 21, 255, 112, 83, 30, 255, 111, 84, 29, 255, 113, 85, 21, 255, 111, 81, 22, 255, 111, 83, 6, 255, 108, 79, 11, 255, 107, 75, 24, 255, 108, 74, 20, 255, 109, 75, 13, 255, 110, 76, 15, 255, 105, 71, 14, 255, 103, 70, 18, 255, 106, 69, 19, 255, 108, 67, 12, 255, 111, 68, 9, 255, 109, 64, 15, 255, 108, 63, 18, 255, 112, 68, 15, 255, 110, 65, 11, 255, 109, 62, 15, 255, 108, 61, 15, 255, 108, 63, 10, 255, 110, 63, 6, 255, 111, 60, 3, 255, 106, 61, 5, 255, 109, 57, 6, 255, 111, 59, 11, 255, 109, 58, 6, 255, 107, 57, 3, 255, 107, 55, 9, 255, 107, 55, 6, 255, 105, 53, 5, 255, 102, 50, 7, 255, 101, 53, 3, 255, 102, 54, 1, 255, 104, 53, 4, 255, 104, 52, 3, 255, 100, 49, 1, 255, 98, 47, 1, 255, 99, 51, 5, 255, 95, 49, 5, 255, 102, 49, 4, 255, 102, 47, 5, 255, 99, 43, 3, 255, 99, 42, 4, 255, 95, 46, 4, 255, 99, 48, 5, 255, 95, 44, 4, 255, 94, 45, 6, 255, 94, 40, 2, 255, 95, 46, 5, 255, 89, 43, 4, 255, 93, 42, 7, 255, 87, 40, 5, 255, 81, 38, 3, 255, 82, 37, 4, 255, 87, 37, 6, 255, 88, 36, 5, 255, 88, 37, 3, 255, 80, 36, 0, 255, 84, 40, 5, 255, 83, 38, 4, 255, 80, 36, 2, 255, 83, 38, 4, 255, 84, 36, 3, 255, 83, 37, 3, 255, 80, 35, 1, 255, 91, 34, 1, 255, 99, 38, 6, 255, 99, 41, 6, 255, 102, 40, 5, 255, 103, 34, 0, 255, 114, 41, 6, 255, 134, 49, 2, 255, 141, 49, 0, 255, 132, 48, 4, 255, 127, 50, 5, 255, 131, 48, 2, 255, 121, 42, 3, 255, 103, 31, 1, 255, 104, 34, 1, 255, 107, 37, 4, 255, 105, 31, 1, 255, 105, 30, 4, 255, 112, 38, 5, 255, 114, 32, 1, 255, 117, 33, 5, 255, 116, 31, 3, 255, 125, 34, 4, 255, 121, 38, 4, 255, 116, 40, 3, 255, 117, 35, 4, 255, 113, 32, 6, 255, 109, 27, 3, 255, 119, 35, 4, 255, 123, 40, 4, 255, 117, 36, 5, 255, 115, 34, 6, 255, 105, 27, 1, 255, 103, 30, 6, 255, 97, 26, 2, 255, 101, 29, 3, 255, 109, 29, 4, 255, 116, 33, 2, 255, 110, 36, 3, 255, 111, 28, 3, 255, 122, 34, 3, 255, 133, 37, 3, 255, 128, 35, 3, 255, 122, 39, 2, 255, 125, 40, 3, 255, 125, 36, 2, 255, 130, 37, 3, 255, 129, 35, 2, 255, 129, 35, 2, 255, 129, 37, 3, 255, 127, 37, 2, 255, 129, 34, 1, 255, 130, 34, 2, 255, 124, 35, 0, 255, 125, 35, 1, 255, 128, 32, 0, 255, 125, 34, 3, 255, 118, 35, 5, 255, 122, 34, 4, 255, 119, 34, 1, 255, 119, 35, 0, 255, 112, 37, 1, 255, 116, 34, 3, 255, 117, 32, 3, 255, 117, 33, 4, 255, 113, 31, 2, 255, 116, 35, 3, 255, 117, 33, 2, 255, 116, 31, 0, 255, 120, 32, 1, 255, 123, 34, 0, 255, 128, 36, 2, 255, 132, 38, 4, 255, 125, 33, 1, 255, 121, 31, 1, 255, 124, 35, 2, 255, 124, 36, 1, 255, 120, 37, 1, 255, 121, 37, 5, 255, 106, 27, 3, 255, 98, 21, 0, 255, 104, 21, 3, 255, 91, 17, 3, 255, 89, 23, 4, 255, 106, 30, 5, 255, 111, 33, 3, 255, 90, 20, 1, 255, 89, 19, 6, 255, 105, 31, 2, 255, 117, 33, 1, 255, 119, 30, 6, 255, 110, 24, 2, 255, 103, 26, 0, 255, 113, 28, 3, 255, 100, 25, 5, 255, 71, 19, 1, 255, 64, 15, 1, 255, 55, 14, 2, 255, 54, 12, 3, 255, 52, 16, 5, 255, 61, 13, 3, 255, 61, 15, 0, 255, 48, 15, 4, 255, 38, 10, 3, 255, 38, 11, 5, 255, 48, 10, 2, 255, 57, 12, 1, 255, 55, 12, 7, 255, 55, 11, 7, 255, 53, 10, 3, 255, 49, 10, 3, 255, 52, 9, 3, 255, 60, 10, 4, 255, 63, 13, 3, 255, 59, 14, 1, 255, 55, 13, 5, 255, 51, 11, 1, 255, 52, 11, 1, 255, 14, 8, 4, 255, 15, 8, 5, 255, 13, 6, 3, 255, 9, 5, 1, 255, 12, 7, 2, 255, 17, 9, 4, 255, 18, 9, 2, 255, 21, 12, 2, 255, 19, 9, 0, 255, 25, 13, 4, 255, 27, 14, 4, 255, 26, 12, 1, 255, 30, 16, 2, 255, 32, 19, 4, 255, 29, 18, 6, 255, 29, 20, 4, 255, 27, 15, 1, 255, 28, 13, 2, 255, 29, 14, 3, 255, 21, 9, 1, 255, 21, 11, 1, 255, 24, 13, 3, 255, 26, 17, 6, 255, 23, 15, 4, 255, 17, 13, 2, 255, 26, 19, 7, 255, 29, 14, 4, 255, 20, 10, 2, 255, 18, 11, 5, 255, 21, 14, 5, 255, 26, 15, 4, 255, 29, 13, 3, 255, 27, 17, 3, 255, 31, 14, 4, 255, 32, 15, 3, 255, 29, 16, 2, 255, 33, 18, 3, 255, 38, 22, 6, 255, 37, 21, 6, 255, 35, 19, 3, 255, 45, 24, 2, 255, 42, 22, 1, 255, 37, 22, 3, 255, 43, 23, 3, 255, 47, 27, 4, 255, 44, 24, 1, 255, 43, 26, 3, 255, 60, 37, 3, 255, 66, 41, 11, 255, 64, 47, 21, 255, 70, 50, 15, 255, 71, 51, 18, 255, 79, 45, 16, 255, 88, 48, 15, 255, 84, 48, 14, 255, 75, 43, 5, 255, 74, 37, 3, 255, 73, 38, 10, 255, 72, 38, 8, 255, 64, 32, 6, 255, 64, 38, 9, 255, 73, 41, 1, 255, 74, 40, 5, 255, 70, 34, 10, 255, 68, 35, 0, 255, 71, 38, 3, 255, 69, 36, 4, 255, 65, 32, 1, 255, 70, 36, 4, 255, 67, 34, 1, 255, 67, 36, 3, 255, 68, 36, 1, 255, 69, 35, 3, 255, 66, 37, 2, 255, 71, 39, 3, 255, 73, 40, 2, 255, 69, 40, 1, 255, 73, 45, 4, 255, 76, 42, 4, 255, 79, 42, 3, 255, 80, 44, 3, 255, 82, 46, 4, 255, 83, 48, 3, 255, 86, 50, 4, 255, 83, 51, 4, 255, 84, 50, 2, 255, 91, 51, 3, 255, 92, 52, 3, 255, 92, 51, 2, 255, 89, 51, 2, 255, 83, 50, 3, 255, 80, 46, 1, 255, 78, 44, 1, 255, 77, 43, 1, 255, 81, 45, 3, 255, 81, 45, 1, 255, 81, 50, 1, 255, 85, 51, 4, 255, 84, 51, 4, 255, 88, 53, 7, 255, 83, 47, 1, 255, 90, 47, 3, 255, 105, 50, 4, 255, 106, 50, 3, 255, 101, 52, 4, 255, 94, 55, 4, 255, 93, 57, 5, 255, 100, 54, 5, 255, 103, 48, 3, 255, 106, 59, 3, 255, 110, 57, 2, 255, 109, 59, 1, 255, 107, 65, 6, 255, 101, 54, 4, 255, 94, 50, 4, 255, 89, 53, 7, 255, 82, 48, 3, 255, 89, 46, 6, 255, 83, 45, 5, 255, 85, 45, 4, 255, 82, 45, 1, 255, 79, 50, 2, 255, 79, 48, 5, 255, 82, 48, 4, 255, 82, 44, 1, 255, 86, 46, 5, 255, 84, 45, 0, 255, 78, 48, 7, 255, 77, 51, 4, 255, 80, 44, 0, 255, 95, 49, 3, 255, 98, 51, 3, 255, 93, 47, 4, 255, 85, 46, 3, 255, 90, 48, 3, 255, 82, 48, 4, 255, 81, 54, 5, 255, 95, 49, 7, 255, 101, 54, 3, 255, 90, 53, 8, 255, 79, 48, 11, 255, 69, 50, 12, 255, 75, 53, 2, 255, 73, 60, 10, 255, 75, 54, 12, 255, 84, 49, 17, 255, 83, 55, 15, 255, 83, 56, 15, 255, 76, 54, 12, 255, 76, 55, 16, 255, 78, 59, 22, 255, 90, 60, 14, 255, 106, 63, 8, 255, 109, 64, 9, 255, 104, 63, 10, 255, 101, 65, 15, 255, 110, 69, 10, 255, 111, 62, 10, 255, 100, 60, 21, 255, 84, 59, 28, 255, 88, 63, 15, 255, 101, 67, 22, 255, 108, 69, 22, 255, 98, 63, 21, 255, 94, 69, 20, 255, 92, 68, 21, 255, 94, 67, 20, 255, 94, 70, 22, 255, 95, 73, 27, 255, 94, 75, 24, 255, 101, 79, 21, 255, 111, 81, 17, 255, 103, 74, 34, 255, 95, 76, 35, 255, 92, 76, 28, 255, 92, 77, 36, 255, 94, 83, 41, 255, 94, 82, 41, 255, 93, 83, 33, 255, 96, 86, 30, 255, 97, 86, 37, 255, 102, 89, 27, 255, 97, 89, 32, 255, 103, 92, 34, 255, 106, 91, 36, 255, 92, 87, 45, 255, 102, 91, 39, 255, 108, 94, 38, 255, 104, 93, 44, 255, 109, 94, 50, 255, 115, 96, 50, 255, 113, 93, 48, 255, 119, 91, 48, 255, 121, 96, 45, 255, 120, 98, 45, 255, 120, 101, 41, 255, 115, 100, 34, 255, 118, 101, 42, 255, 114, 100, 42, 255, 114, 98, 36, 255, 120, 101, 30, 255, 118, 97, 45, 255, 120, 98, 45, 255, 120, 97, 33, 255, 124, 99, 25, 255, 123, 94, 26, 255, 119, 92, 36, 255, 114, 91, 40, 255, 116, 92, 43, 255, 118, 96, 28, 255, 115, 92, 23, 255, 115, 91, 36, 255, 114, 92, 20, 255, 113, 86, 32, 255, 112, 84, 35, 255, 109, 85, 15, 255, 108, 82, 27, 255, 111, 81, 24, 255, 113, 83, 14, 255, 111, 83, 18, 255, 110, 78, 22, 255, 110, 74, 19, 255, 109, 73, 18, 255, 110, 77, 14, 255, 110, 71, 15, 255, 109, 69, 20, 255, 109, 73, 18, 255, 104, 72, 14, 255, 104, 71, 19, 255, 109, 72, 17, 255, 107, 69, 12, 255, 106, 66, 14, 255, 107, 65, 13, 255, 110, 67, 13, 255, 110, 63, 16, 255, 111, 63, 16, 255, 110, 62, 9, 255, 104, 64, 9, 255, 107, 65, 6, 255, 112, 63, 5, 255, 110, 61, 7, 255, 111, 58, 8, 255, 114, 61, 8, 255, 109, 57, 7, 255, 106, 55, 4, 255, 105, 54, 9, 255, 105, 54, 6, 255, 105, 55, 6, 255, 98, 50, 6, 255, 103, 56, 5, 255, 104, 52, 2, 255, 106, 51, 6, 255, 109, 52, 8, 255, 99, 44, 2, 255, 100, 45, 5, 255, 101, 46, 8, 255, 99, 48, 4, 255, 99, 47, 2, 255, 93, 47, 2, 255, 92, 47, 6, 255, 96, 43, 5, 255, 97, 42, 4, 255, 97, 45, 2, 255, 94, 45, 3, 255, 92, 39, 5, 255, 96, 41, 4, 255, 94, 45, 2, 255, 92, 43, 3, 255, 92, 39, 6, 255, 91, 44, 0, 255, 90, 43, 5, 255, 82, 35, 6, 255, 82, 31, 9, 255, 86, 35, 10, 255, 86, 34, 5, 255, 88, 39, 3, 255, 88, 39, 3, 255, 88, 36, 4, 255, 90, 38, 5, 255, 92, 37, 4, 255, 93, 35, 3, 255, 95, 37, 7, 255, 85, 34, 2, 255, 85, 32, 2, 255, 86, 32, 3, 255, 91, 35, 3, 255, 103, 40, 4, 255, 105, 37, 0, 255, 110, 39, 3, 255, 118, 49, 2, 255, 137, 56, 4, 255, 143, 51, 8, 255, 136, 50, 4, 255, 134, 46, 8, 255, 129, 40, 7, 255, 115, 37, 8, 255, 92, 27, 1, 255, 83, 28, 1, 255, 82, 30, 4, 255, 76, 26, 7, 255, 71, 24, 1, 255, 67, 22, 4, 255, 50, 17, 6, 255, 54, 21, 6, 255, 65, 23, 6, 255, 69, 20, 6, 255, 84, 26, 4, 255, 90, 29, 2, 255, 93, 29, 2, 255, 107, 31, 3, 255, 126, 40, 6, 255, 129, 45, 4, 255, 120, 37, 0, 255, 123, 40, 2, 255, 112, 33, 1, 255, 102, 28, 2, 255, 99, 29, 2, 255, 102, 29, 2, 255, 112, 34, 0, 255, 121, 38, 0, 255, 118, 37, 7, 255, 113, 32, 4, 255, 119, 32, 1, 255, 130, 33, 1, 255, 125, 40, 4, 255, 121, 41, 3, 255, 124, 36, 1, 255, 125, 35, 1, 255, 128, 37, 3, 255, 125, 34, 3, 255, 124, 36, 4, 255, 122, 37, 1, 255, 121, 35, 0, 255, 124, 31, 3, 255, 125, 30, 3, 255, 123, 30, 1, 255, 126, 34, 2, 255, 128, 37, 3, 255, 121, 37, 1, 255, 116, 31, 1, 255, 119, 32, 3, 255, 115, 35, 4, 255, 123, 34, 2, 255, 121, 36, 2, 255, 120, 32, 0, 255, 111, 32, 1, 255, 114, 34, 5, 255, 114, 30, 1, 255, 117, 30, 0, 255, 117, 31, 0, 255, 119, 35, 2, 255, 120, 36, 4, 255, 122, 33, 2, 255, 125, 35, 1, 255, 125, 35, 2, 255, 121, 32, 3, 255, 118, 31, 2, 255, 122, 33, 2, 255, 127, 36, 2, 255, 124, 36, 2, 255, 120, 32, 2, 255, 113, 30, 0, 255, 101, 29, 1, 255, 98, 27, 2, 255, 96, 27, 2, 255, 89, 20, 2, 255, 91, 22, 5, 255, 98, 30, 2, 255, 98, 28, 5, 255, 86, 17, 4, 255, 98, 24, 1, 255, 109, 30, 1, 255, 111, 29, 1, 255, 104, 30, 2, 255, 103, 27, 5, 255, 99, 24, 1, 255, 93, 24, 0, 255, 79, 20, 2, 255, 60, 17, 5, 255, 56, 14, 2, 255, 55, 16, 3, 255, 57, 11, 0, 255, 59, 15, 3, 255, 60, 14, 2, 255, 59, 14, 7, 255, 42, 11, 5, 255, 37, 11, 4, 255, 49, 12, 4, 255, 55, 13, 3, 255, 42, 10, 1, 255, 49, 12, 4, 255, 58, 13, 5, 255, 48, 12, 2, 255, 40, 15, 2, 255, 51, 16, 3, 255, 63, 15, 2, 255, 64, 16, 2, 255, 54, 15, 3, 255, 50, 14, 4, 255, 51, 15, 5, 255, 10, 8, 2, 255, 10, 6, 2, 255, 11, 7, 4, 255, 11, 8, 4, 255, 13, 8, 3, 255, 17, 10, 3, 255, 20, 9, 1, 255, 24, 14, 5, 255, 22, 12, 3, 255, 22, 11, 3, 255, 26, 12, 2, 255, 30, 14, 1, 255, 29, 13, 1, 255, 26, 15, 4, 255, 25, 16, 4, 255, 22, 14, 5, 255, 23, 12, 3, 255, 25, 13, 0, 255, 26, 14, 5, 255, 27, 13, 2, 255, 25, 14, 2, 255, 22, 13, 4, 255, 19, 13, 3, 255, 22, 14, 4, 255, 23, 14, 1, 255, 26, 15, 3, 255, 19, 10, 1, 255, 18, 11, 3, 255, 21, 15, 6, 255, 20, 14, 4, 255, 21, 13, 2, 255, 22, 13, 3, 255, 26, 16, 1, 255, 37, 16, 5, 255, 36, 13, 3, 255, 30, 17, 2, 255, 33, 21, 5, 255, 40, 19, 5, 255, 38, 19, 5, 255, 44, 23, 5, 255, 47, 24, 1, 255, 47, 25, 4, 255, 45, 23, 6, 255, 44, 23, 2, 255, 51, 24, 1, 255, 50, 24, 2, 255, 50, 29, 1, 255, 48, 29, 1, 255, 61, 35, 4, 255, 72, 40, 4, 255, 77, 36, 10, 255, 76, 41, 17, 255, 81, 51, 11, 255, 73, 40, 0, 255, 74, 39, 8, 255, 73, 41, 13, 255, 73, 39, 15, 255, 79, 46, 22, 255, 78, 43, 16, 255, 71, 33, 6, 255, 66, 34, 2, 255, 69, 33, 1, 255, 60, 26, 5, 255, 60, 36, 11, 255, 59, 36, 4, 255, 67, 37, 1, 255, 69, 34, 4, 255, 67, 35, 6, 255, 61, 33, 1, 255, 64, 34, 4, 255, 68, 36, 2, 255, 74, 35, 0, 255, 71, 35, 0, 255, 71, 39, 4, 255, 72, 38, 6, 255, 69, 36, 3, 255, 66, 42, 3, 255, 79, 44, 1, 255, 80, 44, 2, 255, 80, 44, 1, 255, 81, 47, 4, 255, 81, 48, 3, 255, 80, 46, 0, 255, 83, 47, 4, 255, 84, 44, 2, 255, 86, 47, 1, 255, 89, 50, 1, 255, 92, 51, 3, 255, 84, 47, 2, 255, 81, 48, 2, 255, 82, 46, 1, 255, 76, 42, 0, 255, 74, 41, 0, 255, 79, 45, 4, 255, 83, 48, 4, 255, 82, 46, 1, 255, 89, 50, 5, 255, 86, 49, 4, 255, 79, 49, 2, 255, 87, 47, 4, 255, 87, 46, 2, 255, 93, 51, 5, 255, 103, 53, 6, 255, 94, 48, 1, 255, 90, 53, 2, 255, 88, 56, 1, 255, 90, 56, 1, 255, 97, 52, 4, 255, 102, 54, 7, 255, 97, 55, 1, 255, 102, 53, 3, 255, 97, 54, 6, 255, 88, 51, 5, 255, 86, 44, 2, 255, 81, 46, 2, 255, 81, 46, 2, 255, 81, 47, 1, 255, 82, 46, 4, 255, 76, 43, 3, 255, 83, 41, 5, 255, 92, 41, 2, 255, 85, 45, 2, 255, 80, 47, 3, 255, 74, 45, 0, 255, 76, 42, 2, 255, 82, 44, 2, 255, 82, 47, 1, 255, 73, 45, 7, 255, 80, 39, 4, 255, 87, 44, 6, 255, 97, 50, 4, 255, 105, 50, 3, 255, 108, 47, 8, 255, 103, 47, 8, 255, 92, 46, 11, 255, 73, 42, 7, 255, 85, 49, 9, 255, 104, 53, 9, 255, 94, 49, 6, 255, 79, 51, 13, 255, 75, 49, 10, 255, 75, 49, 5, 255, 80, 51, 8, 255, 85, 57, 2, 255, 86, 53, 8, 255, 88, 58, 4, 255, 80, 54, 6, 255, 72, 51, 16, 255, 75, 55, 16, 255, 82, 55, 10, 255, 84, 61, 10, 255, 81, 58, 14, 255, 89, 54, 14, 255, 107, 63, 15, 255, 110, 65, 16, 255, 89, 59, 13, 255, 94, 65, 22, 255, 97, 63, 23, 255, 96, 64, 25, 255, 94, 67, 31, 255, 99, 65, 18, 255, 99, 63, 28, 255, 91, 64, 25, 255, 80, 63, 34, 255, 77, 64, 27, 255, 92, 70, 28, 255, 96, 70, 30, 255, 92, 73, 20, 255, 89, 73, 29, 255, 95, 73, 33, 255, 91, 73, 29, 255, 86, 76, 29, 255, 90, 75, 40, 255, 97, 81, 24, 255, 96, 77, 32, 255, 98, 79, 33, 255, 101, 85, 35, 255, 95, 83, 34, 255, 95, 83, 40, 255, 102, 89, 34, 255, 103, 89, 37, 255, 102, 86, 51, 255, 101, 85, 50, 255, 104, 88, 42, 255, 103, 90, 41, 255, 102, 93, 51, 255, 109, 97, 43, 255, 110, 92, 47, 255, 108, 97, 44, 255, 107, 96, 42, 255, 108, 93, 48, 255, 112, 102, 40, 255, 116, 97, 46, 255, 113, 95, 43, 255, 113, 96, 49, 255, 116, 101, 47, 255, 113, 96, 51, 255, 115, 95, 42, 255, 114, 97, 38, 255, 120, 101, 40, 255, 127, 107, 34, 255, 120, 100, 38, 255, 120, 100, 35, 255, 121, 95, 31, 255, 122, 95, 38, 255, 123, 94, 42, 255, 120, 95, 46, 255, 114, 93, 28, 255, 113, 91, 29, 255, 114, 92, 27, 255, 111, 89, 32, 255, 116, 90, 27, 255, 117, 89, 27, 255, 117, 88, 25, 255, 114, 87, 28, 255, 109, 85, 29, 255, 109, 87, 20, 255, 112, 86, 17, 255, 113, 82, 20, 255, 115, 81, 20, 255, 114, 80, 18, 255, 112, 81, 16, 255, 111, 78, 13, 255, 112, 76, 11, 255, 105, 72, 3, 255, 110, 75, 14, 255, 108, 72, 18, 255, 106, 70, 16, 255, 106, 71, 12, 255, 108, 71, 8, 255, 107, 72, 8, 255, 106, 69, 10, 255, 108, 64, 6, 255, 109, 62, 6, 255, 108, 62, 11, 255, 111, 63, 15, 255, 109, 62, 8, 255, 107, 60, 10, 255, 107, 60, 6, 255, 108, 60, 6, 255, 109, 57, 10, 255, 109, 56, 10, 255, 111, 59, 4, 255, 111, 57, 4, 255, 110, 60, 5, 255, 103, 53, 5, 255, 107, 55, 8, 255, 107, 55, 8, 255, 99, 50, 8, 255, 98, 51, 3, 255, 103, 53, 4, 255, 104, 49, 6, 255, 105, 49, 8, 255, 101, 49, 6, 255, 99, 48, 5, 255, 98, 45, 4, 255, 96, 47, 5, 255, 97, 45, 5, 255, 94, 44, 3, 255, 94, 45, 7, 255, 96, 41, 5, 255, 95, 43, 3, 255, 93, 47, 1, 255, 96, 45, 4, 255, 93, 40, 4, 255, 96, 44, 5, 255, 97, 43, 2, 255, 94, 41, 2, 255, 90, 39, 5, 255, 91, 41, 2, 255, 94, 41, 4, 255, 87, 37, 4, 255, 78, 34, 4, 255, 81, 36, 6, 255, 84, 34, 4, 255, 86, 37, 2, 255, 85, 34, 1, 255, 88, 34, 3, 255, 90, 35, 5, 255, 90, 37, 2, 255, 87, 30, 0, 255, 93, 35, 5, 255, 91, 36, 6, 255, 80, 32, 4, 255, 72, 30, 0, 255, 79, 32, 2, 255, 94, 34, 3, 255, 103, 32, 2, 255, 109, 39, 3, 255, 100, 36, 3, 255, 102, 34, 5, 255, 115, 38, 4, 255, 118, 40, 2, 255, 98, 29, 5, 255, 74, 18, 2, 255, 54, 20, 6, 255, 37, 22, 10, 255, 47, 23, 2, 255, 65, 24, 4, 255, 60, 26, 3, 255, 41, 21, 1, 255, 40, 19, 2, 255, 42, 21, 3, 255, 47, 22, 1, 255, 61, 23, 1, 255, 60, 23, 3, 255, 54, 23, 2, 255, 77, 28, 1, 255, 82, 24, 1, 255, 82, 26, 3, 255, 82, 25, 1, 255, 102, 29, 4, 255, 119, 34, 4, 255, 121, 39, 3, 255, 109, 33, 3, 255, 99, 23, 1, 255, 101, 30, 2, 255, 105, 31, 3, 255, 109, 30, 4, 255, 115, 33, 5, 255, 112, 33, 3, 255, 117, 36, 4, 255, 114, 32, 2, 255, 124, 34, 3, 255, 125, 35, 2, 255, 119, 33, 2, 255, 128, 36, 4, 255, 132, 40, 5, 255, 127, 38, 2, 255, 122, 36, 3, 255, 122, 37, 7, 255, 121, 37, 7, 255, 117, 33, 1, 255, 123, 33, 6, 255, 118, 28, 3, 255, 123, 28, 4, 255, 122, 28, 2, 255, 116, 34, 3, 255, 109, 33, 1, 255, 107, 28, 0, 255, 109, 29, 3, 255, 104, 33, 5, 255, 116, 30, 3, 255, 115, 34, 1, 255, 118, 32, 2, 255, 110, 35, 5, 255, 109, 31, 4, 255, 114, 31, 4, 255, 115, 29, 2, 255, 114, 31, 2, 255, 114, 33, 2, 255, 112, 30, 1, 255, 121, 34, 3, 255, 123, 37, 2, 255, 120, 35, 2, 255, 114, 30, 3, 255, 115, 30, 3, 255, 121, 32, 2, 255, 123, 34, 1, 255, 125, 33, 0, 255, 117, 31, 0, 255, 108, 31, 2, 255, 104, 31, 1, 255, 95, 30, 0, 255, 96, 28, 1, 255, 105, 25, 3, 255, 88, 19, 3, 255, 92, 25, 4, 255, 106, 27, 4, 255, 93, 23, 0, 255, 88, 22, 3, 255, 102, 26, 3, 255, 109, 32, 1, 255, 109, 35, 3, 255, 102, 31, 7, 255, 92, 21, 1, 255, 85, 17, 1, 255, 66, 16, 2, 255, 51, 15, 1, 255, 59, 14, 4, 255, 59, 11, 2, 255, 62, 10, 1, 255, 57, 15, 0, 255, 53, 15, 2, 255, 53, 12, 2, 255, 54, 14, 4, 255, 49, 14, 5, 255, 39, 10, 1, 255, 39, 12, 3, 255, 43, 12, 3, 255, 47, 13, 3, 255, 51, 12, 4, 255, 56, 13, 3, 255, 50, 12, 1, 255, 50, 15, 2, 255, 54, 12, 2, 255, 60, 13, 3, 255, 57, 10, 2, 255, 51, 10, 4, 255, 48, 12, 5, 255, 10, 7, 2, 255, 11, 6, 2, 255, 12, 8, 4, 255, 14, 10, 5, 255, 12, 8, 1, 255, 18, 9, 3, 255, 20, 11, 2, 255, 20, 10, 0, 255, 26, 14, 5, 255, 27, 13, 4, 255, 27, 14, 3, 255, 34, 18, 5, 255, 33, 17, 5, 255, 23, 13, 4, 255, 22, 13, 3, 255, 22, 13, 5, 255, 23, 13, 4, 255, 24, 12, 3, 255, 21, 11, 5, 255, 23, 14, 5, 255, 25, 12, 3, 255, 26, 13, 5, 255, 24, 14, 3, 255, 21, 11, 1, 255, 24, 14, 3, 255, 23, 14, 3, 255, 26, 16, 6, 255, 27, 16, 5, 255, 21, 11, 0, 255, 21, 14, 2, 255, 24, 17, 5, 255, 19, 13, 3, 255, 30, 18, 2, 255, 38, 15, 3, 255, 35, 16, 2, 255, 29, 17, 0, 255, 35, 17, 3, 255, 36, 16, 2, 255, 31, 20, 4, 255, 33, 17, 3, 255, 42, 20, 3, 255, 44, 22, 5, 255, 40, 19, 4, 255, 46, 25, 5, 255, 53, 23, 2, 255, 50, 22, 3, 255, 49, 22, 2, 255, 46, 24, 4, 255, 58, 36, 3, 255, 69, 39, 3, 255, 71, 36, 12, 255, 72, 39, 8, 255, 68, 38, 7, 255, 71, 38, 15, 255, 72, 33, 14, 255, 68, 31, 12, 255, 67, 36, 21, 255, 71, 41, 38, 255, 81, 47, 25, 255, 77, 40, 8, 255, 71, 34, 11, 255, 70, 33, 3, 255, 64, 33, 4, 255, 57, 33, 2, 255, 55, 37, 4, 255, 59, 32, 1, 255, 64, 31, 4, 255, 63, 34, 6, 255, 62, 38, 3, 255, 61, 32, 5, 255, 71, 36, 9, 255, 73, 33, 3, 255, 70, 33, 2, 255, 69, 38, 3, 255, 70, 37, 1, 255, 71, 37, 0, 255, 71, 45, 1, 255, 77, 46, 0, 255, 80, 46, 1, 255, 80, 42, 0, 255, 85, 47, 3, 255, 85, 50, 4, 255, 88, 47, 2, 255, 83, 46, 3, 255, 84, 44, 2, 255, 90, 49, 5, 255, 87, 48, 4, 255, 87, 48, 5, 255, 76, 44, 2, 255, 72, 45, 2, 255, 76, 44, 2, 255, 77, 45, 4, 255, 78, 45, 4, 255, 75, 43, 1, 255, 79, 46, 2, 255, 83, 47, 1, 255, 85, 42, 0, 255, 83, 44, 0, 255, 78, 49, 2, 255, 87, 51, 4, 255, 88, 51, 3, 255, 83, 49, 0, 255, 89, 51, 3, 255, 88, 50, 4, 255, 94, 50, 5, 255, 100, 48, 3, 255, 98, 48, 1, 255, 90, 48, 2, 255, 86, 46, 1, 255, 88, 44, 3, 255, 81, 47, 3, 255, 74, 50, 0, 255, 78, 47, 0, 255, 83, 44, 2, 255, 81, 46, 5, 255, 84, 42, 2, 255, 82, 43, 4, 255, 78, 45, 7, 255, 76, 45, 6, 255, 77, 43, 1, 255, 81, 46, 3, 255, 75, 40, 2, 255, 82, 39, 6, 255, 77, 39, 4, 255, 73, 43, 6, 255, 73, 44, 2, 255, 85, 48, 0, 255, 96, 42, 1, 255, 99, 48, 6, 255, 90, 47, 2, 255, 94, 45, 7, 255, 108, 45, 12, 255, 103, 44, 1, 255, 99, 50, 3, 255, 80, 47, 6, 255, 66, 42, 6, 255, 92, 51, 9, 255, 100, 51, 4, 255, 80, 42, 9, 255, 79, 46, 13, 255, 83, 49, 4, 255, 78, 50, 8, 255, 79, 50, 13, 255, 83, 55, 6, 255, 86, 50, 12, 255, 82, 52, 8, 255, 75, 52, 6, 255, 88, 57, 7, 255, 105, 59, 12, 255, 107, 56, 13, 255, 90, 58, 14, 255, 76, 60, 10, 255, 80, 62, 15, 255, 74, 59, 16, 255, 74, 59, 16, 255, 95, 59, 23, 255, 108, 68, 23, 255, 113, 64, 20, 255, 117, 69, 11, 255, 113, 70, 8, 255, 94, 61, 26, 255, 79, 63, 16, 255, 84, 68, 25, 255, 80, 68, 24, 255, 84, 71, 23, 255, 93, 69, 20, 255, 101, 69, 30, 255, 107, 77, 18, 255, 89, 72, 26, 255, 77, 70, 39, 255, 85, 74, 28, 255, 91, 80, 26, 255, 94, 82, 20, 255, 95, 81, 29, 255, 96, 83, 28, 255, 97, 82, 34, 255, 105, 88, 42, 255, 101, 82, 42, 255, 98, 83, 42, 255, 103, 84, 49, 255, 110, 91, 42, 255, 109, 88, 42, 255, 117, 95, 32, 255, 104, 92, 41, 255, 92, 89, 50, 255, 104, 93, 46, 255, 116, 100, 35, 255, 114, 96, 42, 255, 109, 92, 53, 255, 111, 98, 43, 255, 113, 98, 46, 255, 110, 98, 44, 255, 111, 98, 38, 255, 111, 100, 39, 255, 109, 100, 46, 255, 111, 100, 50, 255, 115, 100, 36, 255, 117, 99, 39, 255, 113, 99, 44, 255, 112, 98, 41, 255, 116, 99, 38, 255, 118, 100, 44, 255, 118, 100, 44, 255, 115, 98, 33, 255, 117, 96, 41, 255, 116, 95, 39, 255, 115, 96, 30, 255, 114, 91, 35, 255, 116, 89, 37, 255, 118, 91, 27, 255, 118, 91, 26, 255, 118, 90, 31, 255, 119, 90, 26, 255, 118, 87, 24, 255, 116, 84, 32, 255, 116, 84, 28, 255, 118, 84, 21, 255, 116, 82, 25, 255, 112, 82, 20, 255, 111, 81, 18, 255, 110, 80, 15, 255, 111, 77, 16, 255, 110, 77, 13, 255, 109, 76, 12, 255, 108, 74, 14, 255, 107, 69, 15, 255, 112, 71, 22, 255, 108, 68, 20, 255, 108, 70, 13, 255, 111, 70, 4, 255, 108, 68, 13, 255, 109, 67, 17, 255, 113, 64, 20, 255, 111, 62, 14, 255, 108, 61, 15, 255, 109, 62, 14, 255, 108, 61, 7, 255, 113, 63, 10, 255, 110, 59, 10, 255, 111, 63, 8, 255, 115, 58, 8, 255, 109, 57, 5, 255, 108, 59, 2, 255, 110, 57, 7, 255, 107, 55, 5, 255, 103, 50, 4, 255, 105, 55, 6, 255, 101, 49, 0, 255, 101, 51, 3, 255, 100, 53, 2, 255, 103, 52, 3, 255, 102, 49, 3, 255, 108, 50, 7, 255, 107, 47, 2, 255, 109, 51, 6, 255, 105, 50, 3, 255, 97, 47, 3, 255, 99, 44, 4, 255, 97, 44, 3, 255, 94, 44, 3, 255, 96, 43, 2, 255, 96, 44, 2, 255, 95, 46, 2, 255, 97, 42, 1, 255, 97, 43, 3, 255, 90, 44, 3, 255, 94, 43, 4, 255, 93, 41, 3, 255, 88, 42, 3, 255, 85, 38, 5, 255, 86, 35, 2, 255, 85, 38, 1, 255, 80, 38, 0, 255, 81, 38, 2, 255, 86, 36, 1, 255, 84, 37, 2, 255, 82, 35, 5, 255, 84, 34, 5, 255, 85, 35, 3, 255, 83, 31, 4, 255, 86, 34, 6, 255, 93, 37, 2, 255, 107, 39, 2, 255, 108, 38, 4, 255, 96, 34, 4, 255, 71, 30, 3, 255, 62, 27, 3, 255, 70, 24, 3, 255, 72, 30, 3, 255, 71, 28, 5, 255, 61, 21, 7, 255, 56, 20, 3, 255, 54, 23, 4, 255, 52, 24, 5, 255, 63, 31, 1, 255, 67, 28, 2, 255, 62, 23, 13, 255, 57, 25, 6, 255, 53, 22, 0, 255, 61, 25, 2, 255, 65, 26, 7, 255, 59, 21, 5, 255, 60, 20, 10, 255, 51, 19, 1, 255, 63, 21, 4, 255, 59, 22, 4, 255, 53, 25, 1, 255, 61, 24, 7, 255, 50, 18, 4, 255, 50, 19, 3, 255, 59, 18, 7, 255, 54, 20, 6, 255, 65, 16, 2, 255, 84, 23, 6, 255, 92, 28, 2, 255, 90, 29, 2, 255, 87, 29, 2, 255, 90, 23, 1, 255, 88, 18, 3, 255, 90, 24, 4, 255, 99, 32, 2, 255, 103, 27, 0, 255, 107, 29, 2, 255, 121, 34, 7, 255, 125, 31, 0, 255, 121, 33, 1, 255, 125, 33, 4, 255, 133, 41, 7, 255, 126, 38, 1, 255, 121, 34, 4, 255, 110, 28, 4, 255, 107, 28, 2, 255, 114, 31, 2, 255, 113, 28, 1, 255, 107, 26, 2, 255, 112, 24, 4, 255, 112, 22, 1, 255, 106, 26, 3, 255, 98, 25, 1, 255, 101, 25, 2, 255, 105, 27, 2, 255, 104, 28, 3, 255, 108, 27, 1, 255, 113, 31, 1, 255, 117, 30, 1, 255, 112, 32, 3, 255, 100, 21, 1, 255, 105, 24, 5, 255, 109, 29, 5, 255, 112, 34, 4, 255, 114, 30, 3, 255, 113, 27, 1, 255, 114, 28, 2, 255, 117, 35, 1, 255, 113, 36, 1, 255, 110, 32, 3, 255, 112, 28, 1, 255, 125, 33, 3, 255, 124, 35, 5, 255, 123, 36, 3, 255, 123, 34, 2, 255, 114, 30, 5, 255, 102, 31, 2, 255, 97, 32, 2, 255, 105, 25, 4, 255, 112, 34, 4, 255, 97, 29, 4, 255, 80, 15, 0, 255, 96, 22, 0, 255, 95, 29, 1, 255, 85, 25, 5, 255, 98, 28, 4, 255, 109, 32, 3, 255, 108, 29, 0, 255, 108, 31, 4, 255, 96, 25, 2, 255, 76, 13, 4, 255, 71, 14, 6, 255, 76, 23, 6, 255, 58, 16, 4, 255, 52, 12, 3, 255, 52, 15, 5, 255, 65, 15, 3, 255, 67, 15, 2, 255, 56, 16, 2, 255, 53, 16, 3, 255, 50, 15, 4, 255, 46, 13, 4, 255, 40, 10, 2, 255, 47, 10, 4, 255, 50, 9, 3, 255, 49, 17, 5, 255, 45, 14, 2, 255, 50, 10, 1, 255, 54, 14, 4, 255, 48, 13, 3, 255, 48, 12, 4, 255, 51, 9, 2, 255, 46, 10, 2, 255, 46, 9, 2, 255, 14, 9, 4, 255, 14, 7, 3, 255, 9, 4, 0, 255, 13, 8, 2, 255, 15, 11, 2, 255, 18, 9, 2, 255, 20, 10, 2, 255, 23, 12, 4, 255, 27, 14, 6, 255, 26, 13, 2, 255, 26, 14, 0, 255, 28, 17, 3, 255, 26, 15, 3, 255, 25, 15, 4, 255, 27, 17, 7, 255, 24, 12, 3, 255, 26, 12, 5, 255, 23, 10, 4, 255, 19, 12, 3, 255, 20, 11, 2, 255, 25, 10, 3, 255, 24, 10, 5, 255, 19, 10, 1, 255, 23, 13, 3, 255, 28, 16, 4, 255, 26, 17, 4, 255, 23, 13, 3, 255, 26, 15, 2, 255, 27, 15, 2, 255, 29, 16, 4, 255, 24, 14, 2, 255, 25, 13, 3, 255, 37, 19, 6, 255, 34, 17, 3, 255, 34, 18, 4, 255, 32, 16, 3, 255, 33, 17, 3, 255, 34, 17, 2, 255, 32, 20, 5, 255, 30, 19, 3, 255, 35, 20, 4, 255, 40, 24, 8, 255, 42, 21, 5, 255, 53, 29, 7, 255, 55, 28, 3, 255, 47, 20, 2, 255, 51, 22, 6, 255, 54, 26, 7, 255, 54, 26, 1, 255, 64, 33, 5, 255, 71, 37, 11, 255, 82, 40, 5, 255, 77, 34, 5, 255, 75, 38, 10, 255, 71, 39, 8, 255, 72, 40, 11, 255, 68, 39, 22, 255, 77, 44, 29, 255, 83, 47, 14, 255, 65, 39, 3, 255, 59, 32, 4, 255, 58, 32, 2, 255, 57, 30, 11, 255, 64, 34, 3, 255, 69, 36, 4, 255, 58, 28, 5, 255, 56, 28, 5, 255, 62, 32, 3, 255, 66, 35, 3, 255, 64, 34, 3, 255, 63, 31, 2, 255, 69, 35, 4, 255, 69, 36, 4, 255, 65, 36, 1, 255, 73, 38, 2, 255, 78, 40, 3, 255, 76, 44, 3, 255, 75, 45, 3, 255, 78, 41, 0, 255, 84, 42, 1, 255, 82, 40, 2, 255, 86, 46, 4, 255, 82, 46, 3, 255, 75, 46, 3, 255, 75, 48, 5, 255, 76, 44, 4, 255, 74, 40, 2, 255, 71, 39, 2, 255, 70, 45, 6, 255, 70, 42, 4, 255, 74, 41, 2, 255, 75, 43, 2, 255, 77, 43, 2, 255, 78, 44, 4, 255, 77, 45, 3, 255, 77, 47, 2, 255, 80, 48, 2, 255, 84, 48, 3, 255, 85, 47, 2, 255, 79, 48, 1, 255, 81, 52, 3, 255, 81, 49, 0, 255, 89, 47, 3, 255, 87, 47, 4, 255, 80, 42, 2, 255, 89, 43, 6, 255, 87, 43, 4, 255, 81, 45, 3, 255, 81, 45, 2, 255, 82, 45, 5, 255, 77, 44, 6, 255, 82, 45, 1, 255, 89, 43, 1, 255, 88, 39, 5, 255, 82, 39, 6, 255, 84, 41, 2, 255, 75, 43, 2, 255, 71, 40, 2, 255, 79, 41, 3, 255, 79, 43, 2, 255, 76, 43, 5, 255, 74, 39, 5, 255, 78, 40, 6, 255, 73, 42, 2, 255, 75, 43, 3, 255, 88, 40, 4, 255, 104, 43, 5, 255, 105, 47, 3, 255, 90, 43, 4, 255, 70, 38, 7, 255, 74, 37, 4, 255, 87, 44, 4, 255, 78, 45, 5, 255, 71, 44, 4, 255, 70, 40, 6, 255, 71, 44, 8, 255, 69, 44, 8, 255, 82, 46, 6, 255, 90, 50, 4, 255, 93, 53, 6, 255, 100, 53, 12, 255, 95, 54, 8, 255, 83, 51, 6, 255, 74, 49, 14, 255, 77, 52, 17, 255, 75, 50, 11, 255, 74, 53, 8, 255, 82, 57, 19, 255, 98, 58, 14, 255, 105, 62, 7, 255, 102, 64, 16, 255, 97, 63, 18, 255, 82, 56, 7, 255, 70, 55, 13, 255, 68, 57, 18, 255, 100, 63, 16, 255, 117, 72, 9, 255, 117, 64, 18, 255, 101, 62, 22, 255, 95, 64, 20, 255, 86, 59, 18, 255, 82, 66, 25, 255, 87, 67, 34, 255, 86, 69, 19, 255, 95, 74, 25, 255, 96, 73, 26, 255, 87, 74, 26, 255, 82, 71, 33, 255, 88, 74, 20, 255, 81, 75, 32, 255, 85, 78, 27, 255, 90, 77, 30, 255, 95, 73, 39, 255, 91, 76, 30, 255, 93, 84, 31, 255, 96, 81, 38, 255, 107, 87, 41, 255, 112, 87, 43, 255, 109, 88, 38, 255, 91, 82, 45, 255, 99, 85, 48, 255, 112, 89, 44, 255, 119, 99, 36, 255, 112, 99, 38, 255, 96, 91, 40, 255, 101, 95, 46, 255, 114, 101, 46, 255, 106, 95, 47, 255, 102, 95, 44, 255, 104, 98, 49, 255, 102, 98, 44, 255, 105, 102, 50, 255, 109, 99, 50, 255, 110, 98, 46, 255, 107, 103, 36, 255, 107, 101, 49, 255, 113, 101, 40, 255, 114, 100, 45, 255, 114, 99, 47, 255, 115, 99, 44, 255, 120, 103, 36, 255, 121, 98, 43, 255, 119, 98, 40, 255, 117, 97, 34, 255, 115, 95, 41, 255, 116, 97, 32, 255, 114, 95, 25, 255, 118, 92, 44, 255, 120, 93, 42, 255, 119, 90, 42, 255, 117, 89, 34, 255, 117, 88, 27, 255, 120, 87, 37, 255, 118, 86, 29, 255, 115, 85, 18, 255, 115, 84, 26, 255, 116, 82, 31, 255, 115, 83, 23, 255, 110, 82, 17, 255, 110, 79, 21, 255, 111, 80, 24, 255, 108, 76, 20, 255, 107, 75, 14, 255, 110, 76, 24, 255, 106, 71, 23, 255, 103, 67, 19, 255, 108, 71, 8, 255, 113, 68, 20, 255, 119, 70, 19, 255, 117, 69, 9, 255, 111, 66, 12, 255, 115, 70, 10, 255, 110, 64, 10, 255, 111, 65, 9, 255, 108, 62, 12, 255, 109, 62, 9, 255, 109, 60, 7, 255, 111, 62, 9, 255, 110, 58, 9, 255, 113, 60, 10, 255, 113, 60, 8, 255, 110, 58, 1, 255, 112, 60, 9, 255, 106, 54, 3, 255, 107, 55, 3, 255, 110, 54, 10, 255, 102, 54, 4, 255, 108, 53, 3, 255, 106, 50, 4, 255, 100, 52, 4, 255, 98, 48, 3, 255, 96, 52, 3, 255, 105, 50, 6, 255, 113, 46, 6, 255, 110, 45, 5, 255, 103, 49, 6, 255, 95, 45, 2, 255, 102, 45, 3, 255, 98, 46, 2, 255, 93, 47, 3, 255, 93, 43, 2, 255, 93, 44, 4, 255, 93, 45, 3, 255, 94, 43, 1, 255, 93, 44, 4, 255, 88, 44, 3, 255, 87, 39, 0, 255, 87, 40, 1, 255, 85, 43, 1, 255, 88, 41, 3, 255, 83, 36, 5, 255, 83, 37, 2, 255, 87, 38, 3, 255, 86, 38, 6, 255, 84, 38, 2, 255, 84, 38, 2, 255, 81, 35, 7, 255, 81, 37, 4, 255, 82, 36, 2, 255, 79, 26, 6, 255, 87, 34, 10, 255, 95, 41, 3, 255, 103, 35, 2, 255, 103, 34, 1, 255, 98, 34, 4, 255, 74, 33, 1, 255, 80, 38, 7, 255, 96, 31, 5, 255, 83, 37, 1, 255, 69, 30, 5, 255, 67, 25, 6, 255, 72, 27, 5, 255, 68, 26, 5, 255, 66, 26, 3, 255, 80, 32, 4, 255, 84, 31, 4, 255, 70, 22, 2, 255, 60, 25, 3, 255, 65, 27, 2, 255, 86, 30, 2, 255, 92, 33, 3, 255, 69, 25, 4, 255, 58, 24, 1, 255, 52, 23, 1, 255, 60, 21, 4, 255, 58, 23, 4, 255, 53, 22, 1, 255, 53, 26, 4, 255, 43, 19, 8, 255, 49, 19, 4, 255, 60, 20, 6, 255, 45, 21, 5, 255, 49, 24, 4, 255, 58, 21, 4, 255, 66, 21, 3, 255, 75, 26, 0, 255, 71, 23, 5, 255, 63, 15, 6, 255, 56, 17, 3, 255, 58, 22, 5, 255, 68, 25, 2, 255, 73, 16, 3, 255, 79, 21, 6, 255, 86, 27, 1, 255, 99, 29, 1, 255, 103, 31, 3, 255, 99, 27, 6, 255, 104, 25, 3, 255, 95, 26, 1, 255, 95, 31, 3, 255, 97, 28, 3, 255, 88, 22, 1, 255, 93, 26, 4, 255, 88, 21, 3, 255, 87, 21, 2, 255, 93, 22, 1, 255, 101, 22, 1, 255, 101, 24, 2, 255, 91, 24, 3, 255, 85, 22, 3, 255, 85, 24, 3, 255, 87, 23, 3, 255, 85, 21, 2, 255, 104, 23, 6, 255, 101, 28, 2, 255, 100, 30, 1, 255, 94, 27, 1, 255, 99, 22, 3, 255, 98, 28, 6, 255, 100, 29, 2, 255, 107, 28, 0, 255, 104, 30, 3, 255, 110, 29, 7, 255, 106, 28, 0, 255, 108, 33, 1, 255, 110, 33, 4, 255, 111, 27, 2, 255, 125, 33, 4, 255, 122, 32, 1, 255, 118, 36, 4, 255, 122, 32, 3, 255, 118, 34, 2, 255, 114, 34, 2, 255, 108, 34, 3, 255, 104, 31, 0, 255, 112, 33, 3, 255, 114, 36, 5, 255, 92, 25, 1, 255, 79, 19, 2, 255, 87, 19, 4, 255, 97, 26, 1, 255, 96, 26, 1, 255, 93, 22, 1, 255, 97, 30, 2, 255, 102, 29, 0, 255, 101, 28, 2, 255, 78, 22, 1, 255, 76, 17, 2, 255, 85, 19, 5, 255, 81, 25, 6, 255, 66, 16, 0, 255, 56, 14, 1, 255, 63, 15, 4, 255, 67, 14, 3, 255, 69, 16, 3, 255, 64, 12, 3, 255, 58, 12, 2, 255, 49, 14, 1, 255, 46, 18, 5, 255, 41, 11, 5, 255, 40, 10, 4, 255, 41, 12, 1, 255, 42, 9, 1, 255, 48, 12, 4, 255, 47, 14, 5, 255, 44, 12, 3, 255, 43, 11, 2, 255, 49, 12, 2, 255, 46, 14, 4, 255, 51, 14, 3, 255, 12, 9, 2, 255, 12, 8, 1, 255, 13, 7, 1, 255, 15, 9, 3, 255, 17, 10, 2, 255, 17, 11, 3, 255, 21, 10, 2, 255, 25, 10, 2, 255, 28, 14, 6, 255, 30, 14, 4, 255, 34, 19, 5, 255, 29, 15, 2, 255, 29, 13, 3, 255, 24, 13, 3, 255, 22, 12, 4, 255, 18, 8, 0, 255, 20, 9, 1, 255, 23, 12, 3, 255, 23, 15, 4, 255, 19, 11, 1, 255, 19, 9, 0, 255, 18, 10, 1, 255, 20, 12, 2, 255, 27, 12, 4, 255, 25, 12, 1, 255, 20, 11, 1, 255, 21, 11, 1, 255, 25, 15, 5, 255, 26, 16, 4, 255, 28, 16, 5, 255, 27, 13, 4, 255, 29, 13, 5, 255, 33, 13, 4, 255, 31, 13, 3, 255, 34, 16, 5, 255, 35, 18, 6, 255, 33, 15, 1, 255, 36, 19, 2, 255, 36, 17, 3, 255, 34, 15, 1, 255, 38, 20, 5, 255, 37, 18, 4, 255, 40, 21, 6, 255, 45, 23, 4, 255, 46, 25, 2, 255, 41, 22, 4, 255, 44, 25, 3, 255, 44, 27, 3, 255, 52, 26, 3, 255, 61, 28, 5, 255, 59, 33, 6, 255, 67, 36, 6, 255, 73, 41, 5, 255, 75, 38, 2, 255, 72, 34, 5, 255, 73, 42, 18, 255, 80, 48, 22, 255, 85, 48, 18, 255, 77, 44, 9, 255, 66, 37, 5, 255, 51, 33, 2, 255, 58, 31, 9, 255, 64, 27, 4, 255, 61, 25, 1, 255, 66, 27, 2, 255, 64, 32, 3, 255, 60, 31, 1, 255, 67, 32, 4, 255, 68, 31, 1, 255, 66, 34, 0, 255, 66, 35, 1, 255, 72, 36, 2, 255, 74, 38, 4, 255, 72, 38, 4, 255, 76, 42, 5, 255, 73, 40, 2, 255, 68, 40, 3, 255, 72, 43, 7, 255, 74, 41, 1, 255, 81, 45, 1, 255, 81, 43, 4, 255, 78, 40, 3, 255, 78, 46, 1, 255, 72, 43, 6, 255, 68, 40, 6, 255, 63, 38, 1, 255, 64, 39, 1, 255, 69, 39, 3, 255, 70, 38, 3, 255, 76, 43, 6, 255, 80, 44, 3, 255, 77, 43, 0, 255, 77, 40, 0, 255, 83, 44, 5, 255, 78, 44, 4, 255, 74, 49, 2, 255, 81, 45, 2, 255, 84, 44, 5, 255, 83, 42, 3, 255, 82, 42, 3, 255, 81, 45, 6, 255, 76, 42, 3, 255, 79, 41, 1, 255, 82, 46, 3, 255, 78, 40, 2, 255, 83, 43, 5, 255, 84, 42, 5, 255, 85, 39, 0, 255, 76, 45, 1, 255, 71, 43, 3, 255, 82, 39, 6, 255, 92, 41, 3, 255, 100, 40, 1, 255, 92, 43, 4, 255, 80, 42, 0, 255, 81, 43, 2, 255, 76, 42, 3, 255, 75, 39, 4, 255, 79, 39, 3, 255, 78, 42, 4, 255, 73, 40, 2, 255, 75, 39, 5, 255, 73, 39, 4, 255, 69, 37, 0, 255, 75, 41, 3, 255, 85, 40, 6, 255, 85, 37, 6, 255, 76, 40, 4, 255, 72, 39, 4, 255, 67, 37, 7, 255, 71, 40, 5, 255, 76, 43, 1, 255, 72, 44, 7, 255, 63, 40, 12, 255, 73, 41, 11, 255, 69, 45, 7, 255, 71, 48, 6, 255, 101, 50, 7, 255, 112, 49, 9, 255, 105, 52, 6, 255, 103, 52, 5, 255, 98, 52, 19, 255, 84, 49, 11, 255, 73, 50, 3, 255, 73, 52, 11, 255, 74, 52, 18, 255, 75, 55, 14, 255, 68, 49, 9, 255, 72, 50, 16, 255, 89, 59, 25, 255, 99, 64, 6, 255, 92, 56, 10, 255, 79, 51, 26, 255, 77, 57, 18, 255, 72, 58, 12, 255, 73, 58, 17, 255, 87, 59, 23, 255, 85, 62, 15, 255, 79, 60, 27, 255, 79, 60, 30, 255, 90, 69, 28, 255, 103, 69, 9, 255, 96, 66, 28, 255, 109, 76, 14, 255, 112, 74, 18, 255, 97, 70, 26, 255, 74, 69, 21, 255, 82, 71, 37, 255, 105, 79, 33, 255, 97, 79, 26, 255, 107, 82, 31, 255, 106, 80, 35, 255, 98, 82, 29, 255, 99, 86, 31, 255, 96, 82, 38, 255, 94, 80, 40, 255, 110, 90, 36, 255, 108, 93, 45, 255, 96, 85, 43, 255, 94, 85, 42, 255, 95, 87, 45, 255, 91, 89, 46, 255, 93, 92, 53, 255, 99, 93, 48, 255, 93, 88, 53, 255, 93, 89, 52, 255, 115, 100, 48, 255, 116, 99, 50, 255, 104, 96, 40, 255, 106, 100, 48, 255, 108, 101, 44, 255, 106, 102, 42, 255, 107, 99, 49, 255, 110, 101, 43, 255, 112, 102, 40, 255, 104, 97, 43, 255, 106, 100, 48, 255, 109, 100, 46, 255, 120, 101, 35, 255, 123, 102, 34, 255, 122, 102, 34, 255, 124, 98, 31, 255, 121, 100, 38, 255, 118, 97, 49, 255, 117, 93, 49, 255, 115, 94, 40, 255, 115, 93, 43, 255, 117, 93, 38, 255, 116, 91, 23, 255, 121, 91, 36, 255, 119, 90, 34, 255, 117, 87, 30, 255, 117, 85, 31, 255, 118, 88, 26, 255, 115, 86, 19, 255, 113, 84, 23, 255, 113, 81, 28, 255, 113, 80, 20, 255, 111, 77, 29, 255, 110, 78, 26, 255, 108, 78, 12, 255, 108, 76, 18, 255, 109, 76, 15, 255, 110, 73, 21, 255, 105, 71, 18, 255, 108, 74, 10, 255, 110, 72, 16, 255, 106, 66, 11, 255, 108, 68, 13, 255, 108, 70, 14, 255, 108, 68, 11, 255, 109, 65, 16, 255, 113, 69, 6, 255, 111, 65, 8, 255, 109, 61, 8, 255, 110, 60, 11, 255, 110, 60, 13, 255, 109, 62, 7, 255, 114, 60, 0, 255, 114, 58, 7, 255, 109, 58, 11, 255, 108, 59, 6, 255, 111, 57, 7, 255, 110, 54, 8, 255, 109, 54, 5, 255, 108, 49, 9, 255, 105, 53, 7, 255, 106, 50, 2, 255, 111, 50, 6, 255, 103, 50, 3, 255, 100, 47, 4, 255, 101, 49, 5, 255, 100, 47, 3, 255, 103, 48, 4, 255, 100, 46, 3, 255, 96, 46, 1, 255, 90, 46, 4, 255, 96, 46, 7, 255, 95, 46, 5, 255, 91, 44, 3, 255, 94, 44, 4, 255, 86, 42, 1, 255, 93, 43, 3, 255, 96, 43, 3, 255, 90, 46, 5, 255, 86, 41, 2, 255, 86, 38, 2, 255, 90, 41, 5, 255, 91, 39, 3, 255, 93, 39, 2, 255, 86, 37, 7, 255, 81, 37, 3, 255, 82, 38, 4, 255, 81, 34, 4, 255, 86, 38, 4, 255, 86, 39, 6, 255, 80, 35, 3, 255, 77, 33, 2, 255, 80, 34, 4, 255, 78, 31, 6, 255, 80, 33, 2, 255, 83, 34, 1, 255, 84, 30, 3, 255, 78, 30, 1, 255, 79, 33, 5, 255, 73, 31, 2, 255, 92, 37, 4, 255, 113, 37, 4, 255, 113, 35, 2, 255, 105, 37, 3, 255, 103, 34, 2, 255, 111, 36, 4, 255, 109, 32, 3, 255, 80, 26, 1, 255, 68, 22, 0, 255, 71, 25, 4, 255, 64, 25, 4, 255, 59, 26, 2, 255, 66, 24, 0, 255, 74, 24, 0, 255, 74, 28, 2, 255, 75, 27, 4, 255, 70, 21, 1, 255, 69, 25, 6, 255, 69, 23, 5, 255, 65, 24, 4, 255, 66, 25, 4, 255, 61, 27, 2, 255, 64, 28, 7, 255, 62, 20, 1, 255, 47, 20, 1, 255, 58, 18, 1, 255, 55, 24, 4, 255, 53, 20, 5, 255, 57, 19, 2, 255, 64, 16, 3, 255, 52, 18, 8, 255, 41, 20, 5, 255, 52, 21, 2, 255, 62, 22, 5, 255, 51, 23, 1, 255, 52, 19, 5, 255, 42, 19, 4, 255, 52, 23, 4, 255, 77, 22, 5, 255, 70, 20, 3, 255, 63, 21, 1, 255, 81, 25, 4, 255, 69, 20, 9, 255, 70, 21, 3, 255, 90, 25, 0, 255, 76, 17, 2, 255, 69, 18, 1, 255, 67, 20, 0, 255, 70, 18, 4, 255, 73, 17, 5, 255, 73, 16, 3, 255, 75, 19, 2, 255, 78, 23, 4, 255, 73, 21, 2, 255, 74, 19, 3, 255, 74, 19, 5, 255, 66, 17, 4, 255, 75, 16, 4, 255, 83, 22, 3, 255, 85, 26, 3, 255, 79, 26, 0, 255, 91, 21, 0, 255, 88, 27, 4, 255, 82, 20, 1, 255, 91, 21, 3, 255, 93, 21, 1, 255, 95, 27, 4, 255, 94, 25, 0, 255, 97, 25, 1, 255, 102, 26, 3, 255, 106, 26, 3, 255, 113, 29, 4, 255, 117, 31, 2, 255, 118, 33, 3, 255, 121, 30, 1, 255, 120, 35, 1, 255, 116, 35, 1, 255, 110, 31, 0, 255, 109, 33, 2, 255, 105, 33, 3, 255, 111, 34, 2, 255, 105, 29, 1, 255, 91, 24, 6, 255, 78, 19, 3, 255, 81, 23, 0, 255, 93, 22, 0, 255, 97, 27, 5, 255, 90, 27, 2, 255, 98, 25, 2, 255, 97, 21, 1, 255, 92, 28, 7, 255, 81, 21, 3, 255, 75, 17, 1, 255, 87, 20, 7, 255, 82, 18, 3, 255, 76, 20, 4, 255, 59, 15, 0, 255, 52, 13, 0, 255, 61, 16, 1, 255, 70, 16, 3, 255, 67, 17, 4, 255, 54, 14, 2, 255, 50, 13, 3, 255, 43, 11, 4, 255, 38, 10, 2, 255, 43, 14, 4, 255, 41, 12, 1, 255, 40, 11, 1, 255, 43, 12, 3, 255, 44, 12, 2, 255, 47, 12, 3, 255, 48, 10, 1, 255, 47, 15, 4, 255, 48, 13, 2, 255, 9, 6, 1, 255, 11, 7, 1, 255, 15, 9, 3, 255, 18, 9, 4, 255, 16, 7, 1, 255, 14, 9, 1, 255, 24, 16, 5, 255, 22, 11, 1, 255, 27, 15, 6, 255, 28, 13, 4, 255, 32, 16, 4, 255, 32, 16, 5, 255, 29, 11, 3, 255, 23, 11, 3, 255, 21, 12, 3, 255, 19, 10, 1, 255, 21, 11, 2, 255, 24, 14, 4, 255, 22, 14, 3, 255, 23, 14, 5, 255, 20, 11, 2, 255, 17, 10, 0, 255, 22, 12, 3, 255, 32, 12, 6, 255, 30, 13, 5, 255, 23, 13, 2, 255, 29, 15, 6, 255, 30, 19, 9, 255, 23, 15, 3, 255, 25, 14, 4, 255, 29, 15, 6, 255, 28, 12, 3, 255, 31, 14, 3, 255, 30, 13, 3, 255, 30, 13, 4, 255, 32, 15, 3, 255, 34, 18, 4, 255, 35, 18, 4, 255, 31, 18, 2, 255, 36, 21, 5, 255, 32, 16, 1, 255, 32, 18, 3, 255, 35, 22, 6, 255, 34, 20, 1, 255, 37, 20, 1, 255, 44, 22, 6, 255, 49, 23, 2, 255, 49, 28, 0, 255, 56, 28, 3, 255, 65, 25, 7, 255, 65, 29, 1, 255, 54, 31, 3, 255, 59, 37, 6, 255, 64, 35, 3, 255, 68, 36, 14, 255, 70, 44, 23, 255, 74, 49, 23, 255, 79, 48, 13, 255, 74, 38, 6, 255, 66, 35, 9, 255, 58, 34, 4, 255, 59, 32, 4, 255, 62, 30, 1, 255, 60, 28, 7, 255, 56, 28, 1, 255, 64, 32, 0, 255, 67, 34, 2, 255, 62, 30, 5, 255, 63, 32, 11, 255, 62, 32, 4, 255, 69, 39, 1, 255, 72, 40, 1, 255, 70, 38, 1, 255, 71, 40, 2, 255, 69, 39, 2, 255, 69, 39, 2, 255, 72, 40, 3, 255, 74, 41, 3, 255, 71, 40, 1, 255, 81, 43, 3, 255, 81, 40, 2, 255, 74, 38, 2, 255, 78, 43, 5, 255, 72, 37, 2, 255, 69, 36, 1, 255, 68, 38, 1, 255, 73, 42, 3, 255, 72, 39, 1, 255, 74, 38, 0, 255, 72, 42, 1, 255, 76, 47, 5, 255, 83, 46, 4, 255, 79, 40, 2, 255, 76, 40, 3, 255, 73, 40, 3, 255, 72, 39, 1, 255, 72, 43, 3, 255, 74, 38, 1, 255, 74, 36, 0, 255, 77, 39, 3, 255, 76, 38, 2, 255, 82, 37, 4, 255, 89, 40, 3, 255, 91, 40, 4, 255, 102, 37, 6, 255, 86, 39, 3, 255, 74, 43, 3, 255, 79, 40, 3, 255, 75, 45, 5, 255, 73, 39, 2, 255, 83, 37, 3, 255, 98, 41, 5, 255, 93, 40, 1, 255, 98, 42, 4, 255, 95, 38, 0, 255, 77, 42, 3, 255, 72, 41, 3, 255, 79, 40, 7, 255, 78, 37, 5, 255, 71, 39, 4, 255, 69, 38, 3, 255, 72, 40, 2, 255, 73, 39, 0, 255, 77, 37, 4, 255, 66, 34, 4, 255, 63, 38, 8, 255, 71, 41, 10, 255, 69, 39, 2, 255, 72, 40, 1, 255, 74, 39, 5, 255, 76, 42, 2, 255, 73, 45, 1, 255, 71, 46, 2, 255, 65, 41, 3, 255, 68, 46, 3, 255, 62, 44, 8, 255, 82, 47, 11, 255, 106, 48, 5, 255, 107, 51, 5, 255, 108, 57, 10, 255, 110, 57, 9, 255, 97, 53, 6, 255, 82, 52, 7, 255, 81, 55, 13, 255, 95, 61, 6, 255, 101, 59, 6, 255, 84, 49, 18, 255, 75, 52, 17, 255, 80, 56, 10, 255, 82, 61, 13, 255, 73, 59, 13, 255, 74, 59, 15, 255, 72, 58, 20, 255, 71, 61, 17, 255, 72, 65, 15, 255, 72, 60, 23, 255, 71, 55, 15, 255, 76, 65, 16, 255, 87, 67, 27, 255, 80, 66, 27, 255, 106, 74, 17, 255, 116, 72, 21, 255, 113, 75, 21, 255, 109, 75, 13, 255, 86, 68, 28, 255, 80, 72, 30, 255, 83, 69, 40, 255, 86, 68, 36, 255, 98, 78, 25, 255, 92, 75, 29, 255, 107, 80, 34, 255, 102, 81, 33, 255, 98, 85, 36, 255, 105, 81, 38, 255, 97, 80, 40, 255, 92, 84, 42, 255, 88, 81, 38, 255, 90, 84, 43, 255, 92, 89, 38, 255, 99, 88, 49, 255, 93, 91, 47, 255, 90, 91, 43, 255, 102, 93, 52, 255, 104, 97, 49, 255, 94, 92, 52, 255, 92, 93, 55, 255, 105, 97, 45, 255, 119, 101, 47, 255, 116, 104, 45, 255, 114, 101, 48, 255, 118, 97, 53, 255, 122, 101, 44, 255, 116, 101, 47, 255, 109, 104, 46, 255, 116, 108, 47, 255, 112, 98, 46, 255, 109, 99, 48, 255, 106, 103, 43, 255, 116, 104, 39, 255, 125, 104, 37, 255, 126, 102, 38, 255, 121, 102, 39, 255, 122, 98, 46, 255, 122, 100, 26, 255, 115, 95, 40, 255, 116, 96, 37, 255, 115, 93, 41, 255, 115, 94, 28, 255, 117, 93, 27, 255, 119, 93, 24, 255, 117, 88, 27, 255, 117, 88, 34, 255, 115, 85, 26, 255, 117, 88, 23, 255, 114, 86, 22, 255, 110, 82, 21, 255, 114, 84, 26, 255, 114, 79, 26, 255, 112, 77, 26, 255, 108, 78, 17, 255, 109, 79, 18, 255, 109, 78, 15, 255, 108, 73, 20, 255, 108, 72, 15, 255, 106, 75, 13, 255, 108, 71, 12, 255, 110, 71, 8, 255, 110, 70, 10, 255, 104, 66, 12, 255, 107, 66, 12, 255, 106, 64, 10, 255, 108, 64, 19, 255, 109, 62, 4, 255, 109, 62, 9, 255, 109, 63, 7, 255, 110, 61, 8, 255, 110, 60, 5, 255, 108, 60, 7, 255, 114, 61, 1, 255, 114, 58, 10, 255, 110, 58, 10, 255, 107, 57, 7, 255, 108, 53, 5, 255, 107, 54, 8, 255, 103, 54, 6, 255, 104, 51, 10, 255, 102, 54, 8, 255, 99, 51, 1, 255, 107, 51, 4, 255, 99, 48, 0, 255, 100, 50, 5, 255, 102, 49, 5, 255, 100, 48, 5, 255, 96, 47, 3, 255, 94, 42, 2, 255, 101, 45, 7, 255, 89, 43, 4, 255, 91, 47, 5, 255, 93, 47, 6, 255, 93, 44, 3, 255, 96, 43, 3, 255, 99, 48, 6, 255, 107, 42, 5, 255, 107, 43, 7, 255, 96, 48, 6, 255, 92, 44, 3, 255, 90, 43, 3, 255, 98, 44, 5, 255, 103, 39, 3, 255, 98, 39, 1, 255, 89, 37, 4, 255, 82, 36, 2, 255, 81, 35, 1, 255, 84, 33, 3, 255, 92, 39, 5, 255, 85, 31, 3, 255, 84, 34, 1, 255, 83, 34, 3, 255, 84, 33, 9, 255, 84, 35, 5, 255, 82, 35, 1, 255, 78, 31, 4, 255, 74, 26, 6, 255, 74, 29, 1, 255, 80, 34, 2, 255, 79, 32, 2, 255, 82, 32, 1, 255, 92, 37, 2, 255, 102, 35, 7, 255, 106, 34, 2, 255, 103, 35, 3, 255, 100, 35, 4, 255, 91, 31, 0, 255, 76, 27, 5, 255, 70, 30, 4, 255, 77, 31, 2, 255, 75, 30, 4, 255, 67, 29, 2, 255, 68, 27, 3, 255, 69, 23, 7, 255, 63, 20, 6, 255, 69, 26, 1, 255, 68, 26, 1, 255, 60, 25, 1, 255, 60, 26, 3, 255, 58, 25, 1, 255, 61, 23, 2, 255, 65, 24, 2, 255, 67, 26, 2, 255, 62, 25, 0, 255, 61, 23, 5, 255, 56, 22, 2, 255, 55, 20, 2, 255, 56, 20, 8, 255, 58, 22, 2, 255, 59, 21, 3, 255, 53, 23, 4, 255, 55, 25, 2, 255, 75, 23, 0, 255, 77, 25, 3, 255, 80, 29, 8, 255, 66, 21, 5, 255, 49, 19, 3, 255, 51, 24, 4, 255, 63, 21, 3, 255, 55, 16, 0, 255, 53, 21, 1, 255, 69, 23, 2, 255, 62, 21, 2, 255, 65, 23, 4, 255, 77, 22, 6, 255, 69, 19, 1, 255, 69, 22, 0, 255, 72, 20, 3, 255, 68, 20, 4, 255, 65, 21, 3, 255, 62, 17, 0, 255, 65, 19, 0, 255, 66, 19, 1, 255, 68, 22, 3, 255, 71, 21, 0, 255, 69, 22, 0, 255, 66, 24, 1, 255, 67, 20, 1, 255, 70, 18, 1, 255, 76, 22, 4, 255, 82, 22, 7, 255, 70, 14, 4, 255, 55, 17, 6, 255, 53, 11, 4, 255, 53, 15, 3, 255, 61, 17, 5, 255, 72, 14, 4, 255, 79, 17, 1, 255, 94, 25, 2, 255, 98, 22, 1, 255, 99, 22, 3, 255, 93, 21, 3, 255, 94, 25, 2, 255, 106, 24, 4, 255, 101, 25, 1, 255, 111, 34, 4, 255, 114, 30, 4, 255, 102, 28, 3, 255, 109, 25, 3, 255, 109, 31, 3, 255, 104, 32, 2, 255, 108, 29, 4, 255, 104, 28, 5, 255, 82, 22, 1, 255, 71, 16, 2, 255, 83, 23, 4, 255, 97, 25, 5, 255, 98, 24, 1, 255, 100, 25, 1, 255, 95, 26, 1, 255, 95, 28, 2, 255, 94, 26, 1, 255, 84, 23, 1, 255, 65, 15, 1, 255, 63, 17, 0, 255, 80, 16, 1, 255, 73, 18, 3, 255, 69, 16, 7, 255, 54, 11, 1, 255, 47, 15, 2, 255, 56, 19, 5, 255, 67, 14, 4, 255, 67, 14, 3, 255, 63, 13, 1, 255, 54, 12, 2, 255, 48, 13, 3, 255, 46, 15, 4, 255, 43, 15, 4, 255, 44, 15, 4, 255, 43, 11, 1, 255, 45, 10, 1, 255, 45, 10, 2, 255, 43, 14, 5, 255, 45, 12, 4, 255, 16, 10, 3, 255, 13, 9, 2, 255, 14, 8, 2, 255, 21, 10, 6, 255, 19, 8, 2, 255, 15, 10, 2, 255, 24, 16, 5, 255, 26, 13, 3, 255, 26, 13, 4, 255, 24, 12, 2, 255, 25, 15, 3, 255, 23, 13, 3, 255, 21, 12, 2, 255, 22, 9, 4, 255, 18, 10, 2, 255, 22, 14, 4, 255, 22, 13, 4, 255, 20, 10, 1, 255, 18, 10, 0, 255, 22, 12, 3, 255, 21, 11, 2, 255, 21, 13, 3, 255, 24, 13, 4, 255, 33, 11, 5, 255, 30, 12, 4, 255, 28, 14, 3, 255, 31, 14, 4, 255, 28, 15, 3, 255, 24, 13, 1, 255, 25, 16, 4, 255, 27, 16, 4, 255, 31, 17, 5, 255, 31, 17, 3, 255, 29, 15, 1, 255, 29, 15, 2, 255, 29, 15, 4, 255, 30, 17, 5, 255, 28, 16, 3, 255, 34, 19, 4, 255, 32, 19, 2, 255, 27, 19, 4, 255, 28, 15, 2, 255, 36, 16, 2, 255, 39, 19, 4, 255, 36, 20, 7, 255, 32, 22, 8, 255, 47, 22, 3, 255, 54, 23, 5, 255, 54, 24, 4, 255, 57, 24, 1, 255, 61, 27, 2, 255, 55, 25, 4, 255, 60, 30, 8, 255, 58, 32, 4, 255, 63, 36, 6, 255, 72, 38, 15, 255, 70, 40, 18, 255, 65, 41, 20, 255, 63, 39, 12, 255, 59, 37, 5, 255, 65, 35, 5, 255, 60, 31, 0, 255, 53, 28, 2, 255, 54, 29, 4, 255, 65, 30, 3, 255, 59, 27, 1, 255, 60, 32, 3, 255, 59, 33, 1, 255, 64, 35, 4, 255, 68, 35, 3, 255, 70, 36, 1, 255, 76, 42, 5, 255, 73, 39, 2, 255, 70, 36, 0, 255, 65, 33, 0, 255, 72, 34, 2, 255, 77, 35, 2, 255, 76, 41, 0, 255, 78, 40, 5, 255, 77, 43, 7, 255, 74, 38, 2, 255, 78, 37, 2, 255, 68, 32, 3, 255, 67, 34, 4, 255, 67, 35, 1, 255, 75, 42, 5, 255, 75, 40, 4, 255, 70, 36, 1, 255, 68, 39, 1, 255, 67, 40, 2, 255, 69, 37, 2, 255, 71, 36, 1, 255, 74, 38, 3, 255, 67, 34, 1, 255, 66, 35, 3, 255, 65, 37, 4, 255, 73, 37, 3, 255, 70, 37, 3, 255, 69, 39, 1, 255, 70, 41, 2, 255, 73, 38, 1, 255, 81, 38, 3, 255, 97, 49, 6, 255, 105, 58, 12, 255, 85, 33, 1, 255, 73, 37, 4, 255, 67, 42, 6, 255, 76, 38, 2, 255, 71, 41, 2, 255, 71, 37, 4, 255, 79, 39, 4, 255, 79, 36, 3, 255, 74, 36, 2, 255, 76, 39, 3, 255, 78, 35, 2, 255, 70, 37, 1, 255, 68, 39, 1, 255, 71, 36, 2, 255, 74, 37, 4, 255, 67, 37, 3, 255, 63, 34, 1, 255, 74, 42, 6, 255, 75, 41, 5, 255, 72, 39, 2, 255, 67, 36, 3, 255, 71, 35, 5, 255, 77, 37, 5, 255, 71, 38, 1, 255, 70, 37, 1, 255, 70, 36, 6, 255, 71, 41, 9, 255, 69, 42, 5, 255, 69, 43, 5, 255, 67, 43, 3, 255, 64, 45, 6, 255, 66, 44, 7, 255, 73, 41, 12, 255, 101, 53, 11, 255, 106, 54, 9, 255, 104, 55, 10, 255, 110, 51, 8, 255, 89, 49, 11, 255, 89, 52, 6, 255, 110, 61, 11, 255, 106, 54, 10, 255, 83, 51, 8, 255, 75, 52, 15, 255, 76, 53, 13, 255, 80, 59, 14, 255, 77, 58, 5, 255, 72, 50, 18, 255, 80, 58, 28, 255, 79, 62, 13, 255, 74, 61, 13, 255, 73, 63, 8, 255, 75, 64, 17, 255, 79, 66, 13, 255, 88, 63, 22, 255, 74, 60, 31, 255, 71, 68, 30, 255, 107, 72, 24, 255, 120, 71, 38, 255, 125, 67, 29, 255, 116, 76, 23, 255, 89, 73, 24, 255, 95, 75, 23, 255, 96, 71, 37, 255, 76, 70, 33, 255, 82, 79, 25, 255, 80, 72, 38, 255, 78, 76, 39, 255, 77, 80, 25, 255, 100, 80, 40, 255, 113, 86, 43, 255, 112, 90, 50, 255, 110, 90, 43, 255, 95, 85, 48, 255, 92, 84, 50, 255, 91, 90, 44, 255, 90, 90, 51, 255, 89, 90, 43, 255, 100, 92, 45, 255, 114, 94, 44, 255, 117, 96, 46, 255, 108, 101, 45, 255, 96, 96, 51, 255, 98, 97, 49, 255, 111, 98, 57, 255, 113, 100, 50, 255, 119, 103, 61, 255, 122, 102, 63, 255, 121, 104, 39, 255, 123, 108, 37, 255, 116, 103, 52, 255, 120, 106, 45, 255, 117, 102, 46, 255, 107, 99, 48, 255, 106, 102, 45, 255, 111, 101, 46, 255, 114, 97, 60, 255, 115, 99, 47, 255, 117, 100, 34, 255, 117, 99, 29, 255, 120, 98, 37, 255, 118, 99, 31, 255, 117, 99, 36, 255, 115, 96, 29, 255, 112, 94, 19, 255, 115, 92, 33, 255, 115, 88, 29, 255, 116, 88, 24, 255, 117, 88, 32, 255, 114, 86, 26, 255, 117, 86, 29, 255, 115, 84, 31, 255, 111, 82, 22, 255, 113, 84, 18, 255, 112, 81, 13, 255, 111, 79, 19, 255, 110, 79, 21, 255, 107, 76, 23, 255, 107, 75, 16, 255, 109, 76, 9, 255, 111, 73, 17, 255, 115, 70, 20, 255, 110, 70, 16, 255, 109, 71, 12, 255, 113, 70, 10, 255, 112, 66, 9, 255, 109, 68, 5, 255, 107, 63, 12, 255, 106, 60, 11, 255, 111, 61, 15, 255, 110, 58, 14, 255, 109, 60, 12, 255, 110, 61, 13, 255, 114, 62, 9, 255, 112, 57, 10, 255, 110, 58, 2, 255, 111, 56, 16, 255, 113, 56, 10, 255, 111, 57, 0, 255, 109, 55, 11, 255, 106, 52, 9, 255, 104, 53, 5, 255, 104, 48, 7, 255, 98, 47, 0, 255, 103, 56, 6, 255, 100, 47, 2, 255, 106, 50, 3, 255, 107, 46, 3, 255, 104, 44, 2, 255, 101, 46, 5, 255, 95, 47, 6, 255, 95, 48, 9, 255, 93, 42, 5, 255, 94, 42, 3, 255, 88, 44, 3, 255, 89, 46, 3, 255, 97, 46, 3, 255, 106, 46, 5, 255, 111, 44, 3, 255, 108, 41, 4, 255, 99, 42, 2, 255, 100, 43, 1, 255, 106, 43, 2, 255, 107, 43, 2, 255, 107, 44, 2, 255, 112, 42, 3, 255, 109, 42, 3, 255, 92, 36, 3, 255, 87, 39, 3, 255, 89, 39, 3, 255, 89, 37, 6, 255, 84, 35, 0, 255, 87, 33, 5, 255, 88, 37, 1, 255, 85, 36, 3, 255, 79, 29, 3, 255, 87, 37, 5, 255, 81, 34, 1, 255, 79, 34, 2, 255, 77, 33, 2, 255, 78, 29, 4, 255, 75, 28, 2, 255, 80, 31, 2, 255, 76, 30, 1, 255, 72, 29, 2, 255, 81, 34, 4, 255, 87, 33, 1, 255, 84, 32, 3, 255, 84, 34, 5, 255, 79, 28, 1, 255, 80, 28, 5, 255, 75, 31, 7, 255, 75, 31, 4, 255, 74, 28, 2, 255, 73, 28, 0, 255, 77, 29, 1, 255, 75, 24, 1, 255, 70, 22, 2, 255, 78, 26, 5, 255, 68, 29, 4, 255, 62, 26, 2, 255, 71, 20, 3, 255, 71, 24, 5, 255, 60, 27, 1, 255, 64, 21, 5, 255, 64, 24, 6, 255, 58, 25, 1, 255, 65, 23, 6, 255, 59, 27, 2, 255, 64, 26, 1, 255, 62, 25, 5, 255, 58, 30, 2, 255, 66, 31, 1, 255, 71, 27, 1, 255, 71, 26, 0, 255, 75, 27, 3, 255, 70, 25, 5, 255, 81, 30, 3, 255, 73, 30, 6, 255, 67, 23, 3, 255, 71, 22, 2, 255, 67, 24, 1, 255, 62, 25, 2, 255, 60, 21, 1, 255, 72, 20, 8, 255, 70, 23, 3, 255, 50, 22, 0, 255, 52, 19, 6, 255, 72, 20, 2, 255, 68, 24, 2, 255, 59, 20, 1, 255, 51, 18, 2, 255, 57, 19, 6, 255, 66, 18, 5, 255, 65, 18, 4, 255, 55, 19, 2, 255, 55, 18, 0, 255, 64, 21, 2, 255, 65, 19, 1, 255, 67, 16, 3, 255, 71, 19, 7, 255, 62, 19, 4, 255, 58, 23, 0, 255, 79, 22, 6, 255, 43, 13, 3, 255, 23, 10, 4, 255, 41, 14, 7, 255, 39, 19, 4, 255, 40, 14, 3, 255, 40, 13, 5, 255, 58, 16, 3, 255, 83, 20, 2, 255, 94, 25, 0, 255, 85, 25, 3, 255, 65, 21, 0, 255, 54, 19, 1, 255, 58, 14, 3, 255, 55, 12, 2, 255, 62, 12, 1, 255, 77, 17, 3, 255, 94, 27, 5, 255, 100, 22, 1, 255, 102, 25, 5, 255, 95, 27, 2, 255, 97, 25, 1, 255, 96, 28, 2, 255, 81, 24, 4, 255, 69, 15, 3, 255, 76, 19, 6, 255, 84, 22, 4, 255, 90, 26, 2, 255, 100, 28, 3, 255, 101, 25, 5, 255, 91, 26, 4, 255, 84, 23, 2, 255, 83, 22, 2, 255, 74, 20, 2, 255, 58, 12, 0, 255, 50, 16, 4, 255, 69, 18, 6, 255, 79, 12, 4, 255, 69, 13, 9, 255, 56, 12, 2, 255, 50, 11, 0, 255, 56, 13, 3, 255, 63, 16, 5, 255, 61, 15, 2, 255, 61, 15, 2, 255, 61, 15, 3, 255, 54, 14, 2, 255, 46, 10, 0, 255, 49, 14, 4, 255, 48, 13, 4, 255, 44, 8, 1, 255, 45, 9, 3, 255, 39, 10, 3, 255, 46, 11, 6, 255, 15, 6, 0, 255, 14, 10, 1, 255, 15, 9, 3, 255, 20, 10, 5, 255, 20, 8, 2, 255, 20, 11, 4, 255, 18, 13, 2, 255, 20, 13, 2, 255, 19, 11, 3, 255, 22, 13, 5, 255, 26, 16, 5, 255, 24, 11, 2, 255, 27, 13, 6, 255, 18, 10, 3, 255, 15, 9, 1, 255, 20, 12, 4, 255, 17, 8, 0, 255, 19, 10, 2, 255, 18, 12, 5, 255, 18, 10, 2, 255, 19, 9, 1, 255, 21, 11, 3, 255, 22, 13, 3, 255, 26, 11, 2, 255, 26, 11, 2, 255, 27, 13, 4, 255, 31, 14, 5, 255, 26, 11, 2, 255, 27, 14, 4, 255, 27, 15, 4, 255, 28, 16, 3, 255, 29, 16, 3, 255, 27, 14, 0, 255, 26, 12, 0, 255, 30, 17, 3, 255, 31, 17, 5, 255, 29, 16, 4, 255, 30, 18, 5, 255, 32, 20, 3, 255, 33, 18, 4, 255, 31, 16, 6, 255, 31, 16, 4, 255, 34, 16, 3, 255, 37, 16, 2, 255, 41, 18, 5, 255, 37, 19, 5, 255, 41, 22, 9, 255, 49, 24, 6, 255, 50, 25, 3, 255, 52, 26, 7, 255, 61, 25, 8, 255, 61, 28, 2, 255, 58, 26, 3, 255, 54, 26, 5, 255, 57, 30, 5, 255, 61, 29, 3, 255, 59, 29, 4, 255, 50, 26, 6, 255, 49, 28, 3, 255, 51, 29, 2, 255, 62, 29, 6, 255, 63, 29, 0, 255, 56, 26, 4, 255, 57, 26, 4, 255, 67, 27, 2, 255, 59, 28, 9, 255, 53, 29, 7, 255, 66, 37, 4, 255, 70, 36, 0, 255, 72, 38, 3, 255, 69, 35, 5, 255, 68, 35, 5, 255, 69, 31, 2, 255, 74, 33, 4, 255, 67, 34, 4, 255, 67, 33, 4, 255, 74, 32, 5, 255, 72, 36, 2, 255, 62, 32, 3, 255, 62, 30, 3, 255, 66, 31, 1, 255, 61, 32, 1, 255, 60, 32, 5, 255, 63, 35, 8, 255, 60, 34, 4, 255, 62, 33, 3, 255, 65, 34, 4, 255, 64, 35, 3, 255, 61, 35, 4, 255, 60, 33, 4, 255, 64, 36, 5, 255, 63, 38, 2, 255, 68, 38, 3, 255, 72, 34, 5, 255, 72, 36, 6, 255, 67, 35, 3, 255, 72, 33, 1, 255, 74, 36, 3, 255, 71, 38, 1, 255, 68, 38, 0, 255, 69, 40, 1, 255, 71, 38, 0, 255, 78, 42, 1, 255, 71, 40, 1, 255, 73, 43, 3, 255, 72, 39, 0, 255, 70, 37, 2, 255, 73, 39, 6, 255, 62, 37, 2, 255, 69, 42, 5, 255, 76, 43, 3, 255, 67, 35, 0, 255, 73, 36, 3, 255, 70, 41, 1, 255, 70, 41, 2, 255, 70, 37, 5, 255, 66, 38, 3, 255, 68, 38, 2, 255, 73, 36, 4, 255, 70, 37, 5, 255, 67, 38, 2, 255, 68, 38, 4, 255, 70, 35, 6, 255, 70, 36, 0, 255, 68, 41, 1, 255, 68, 39, 0, 255, 72, 38, 0, 255, 77, 43, 5, 255, 85, 42, 5, 255, 70, 40, 6, 255, 66, 39, 7, 255, 68, 39, 3, 255, 66, 40, 4, 255, 70, 44, 3, 255, 69, 45, 3, 255, 67, 47, 6, 255, 74, 48, 8, 255, 78, 42, 14, 255, 84, 49, 8, 255, 78, 50, 4, 255, 67, 45, 9, 255, 96, 59, 15, 255, 104, 59, 14, 255, 114, 57, 9, 255, 96, 53, 5, 255, 73, 54, 11, 255, 69, 53, 8, 255, 73, 54, 10, 255, 66, 58, 10, 255, 71, 56, 17, 255, 81, 57, 18, 255, 73, 60, 17, 255, 68, 59, 23, 255, 68, 61, 20, 255, 80, 64, 15, 255, 89, 60, 18, 255, 87, 63, 21, 255, 91, 63, 27, 255, 79, 62, 31, 255, 72, 64, 27, 255, 84, 65, 33, 255, 104, 72, 25, 255, 115, 75, 22, 255, 99, 73, 25, 255, 91, 71, 27, 255, 96, 74, 26, 255, 102, 77, 29, 255, 90, 73, 34, 255, 83, 74, 44, 255, 87, 79, 45, 255, 88, 80, 35, 255, 80, 81, 31, 255, 93, 85, 40, 255, 117, 88, 29, 255, 118, 85, 39, 255, 127, 89, 39, 255, 120, 91, 41, 255, 114, 90, 50, 255, 105, 91, 44, 255, 90, 91, 44, 255, 90, 89, 49, 255, 94, 94, 51, 255, 89, 91, 44, 255, 103, 94, 55, 255, 109, 101, 57, 255, 97, 93, 53, 255, 97, 97, 40, 255, 109, 103, 54, 255, 123, 105, 55, 255, 122, 101, 56, 255, 123, 105, 58, 255, 120, 104, 48, 255, 123, 106, 48, 255, 124, 102, 51, 255, 121, 102, 48, 255, 114, 104, 53, 255, 107, 103, 40, 255, 109, 102, 47, 255, 112, 102, 46, 255, 109, 104, 41, 255, 108, 103, 37, 255, 113, 99, 38, 255, 110, 98, 27, 255, 113, 99, 32, 255, 117, 97, 36, 255, 115, 93, 45, 255, 115, 93, 41, 255, 111, 93, 28, 255, 113, 94, 23, 255, 114, 89, 32, 255, 119, 90, 42, 255, 113, 87, 29, 255, 113, 86, 23, 255, 115, 85, 24, 255, 113, 84, 28, 255, 111, 81, 28, 255, 111, 79, 26, 255, 111, 79, 18, 255, 111, 77, 21, 255, 111, 77, 16, 255, 110, 74, 15, 255, 111, 72, 21, 255, 112, 75, 9, 255, 113, 74, 15, 255, 111, 70, 13, 255, 113, 71, 11, 255, 109, 68, 13, 255, 105, 66, 14, 255, 106, 67, 10, 255, 111, 65, 13, 255, 111, 63, 19, 255, 112, 62, 15, 255, 110, 58, 16, 255, 111, 60, 12, 255, 110, 59, 8, 255, 110, 62, 5, 255, 112, 60, 3, 255, 114, 56, 6, 255, 111, 54, 8, 255, 110, 54, 7, 255, 110, 54, 5, 255, 108, 54, 2, 255, 107, 55, 7, 255, 110, 51, 6, 255, 107, 49, 2, 255, 116, 50, 9, 255, 114, 54, 8, 255, 104, 54, 3, 255, 103, 49, 6, 255, 101, 47, 2, 255, 102, 50, 4, 255, 101, 49, 5, 255, 100, 47, 5, 255, 97, 43, 4, 255, 97, 43, 6, 255, 94, 39, 3, 255, 98, 45, 6, 255, 90, 47, 4, 255, 90, 45, 2, 255, 100, 44, 3, 255, 108, 47, 5, 255, 111, 44, 2, 255, 102, 45, 2, 255, 97, 46, 2, 255, 105, 44, 2, 255, 112, 42, 1, 255, 117, 42, 4, 255, 113, 43, 6, 255, 104, 40, 2, 255, 98, 41, 3, 255, 87, 38, 3, 255, 86, 38, 1, 255, 91, 36, 1, 255, 91, 34, 4, 255, 88, 36, 4, 255, 86, 37, 2, 255, 82, 34, 0, 255, 82, 36, 4, 255, 85, 35, 5, 255, 82, 33, 0, 255, 84, 36, 4, 255, 86, 40, 6, 255, 82, 38, 0, 255, 84, 34, 2, 255, 76, 34, 6, 255, 75, 30, 9, 255, 75, 26, 4, 255, 75, 28, 0, 255, 81, 26, 1, 255, 82, 32, 3, 255, 85, 33, 2, 255, 87, 31, 2, 255, 90, 30, 3, 255, 83, 34, 1, 255, 85, 34, 3, 255, 82, 29, 2, 255, 80, 27, 1, 255, 78, 29, 1, 255, 82, 29, 1, 255, 75, 27, 2, 255, 69, 27, 3, 255, 76, 23, 1, 255, 73, 26, 3, 255, 71, 29, 6, 255, 69, 21, 1, 255, 70, 23, 3, 255, 68, 24, 2, 255, 68, 20, 1, 255, 65, 26, 6, 255, 63, 25, 2, 255, 64, 23, 3, 255, 68, 22, 5, 255, 71, 24, 3, 255, 68, 20, 5, 255, 76, 24, 7, 255, 86, 25, 1, 255, 75, 25, 2, 255, 70, 23, 2, 255, 76, 27, 4, 255, 72, 28, 4, 255, 72, 29, 4, 255, 67, 25, 1, 255, 69, 22, 1, 255, 71, 23, 3, 255, 63, 24, 2, 255, 65, 26, 4, 255, 64, 20, 0, 255, 62, 17, 5, 255, 72, 20, 6, 255, 64, 17, 0, 255, 57, 21, 6, 255, 65, 22, 3, 255, 60, 18, 4, 255, 57, 18, 2, 255, 55, 23, 7, 255, 54, 21, 4, 255, 58, 15, 5, 255, 67, 19, 7, 255, 60, 16, 7, 255, 64, 19, 3, 255, 69, 18, 3, 255, 61, 15, 1, 255, 60, 13, 3, 255, 63, 13, 4, 255, 68, 18, 3, 255, 63, 22, 0, 255, 78, 23, 6, 255, 55, 24, 9, 255, 36, 17, 4, 255, 45, 16, 2, 255, 45, 18, 2, 255, 45, 16, 2, 255, 36, 14, 4, 255, 47, 14, 1, 255, 67, 19, 1, 255, 81, 23, 3, 255, 80, 23, 4, 255, 77, 20, 6, 255, 49, 14, 3, 255, 24, 11, 1, 255, 23, 10, 4, 255, 25, 11, 6, 255, 36, 13, 1, 255, 76, 19, 2, 255, 85, 20, 1, 255, 88, 23, 2, 255, 95, 26, 1, 255, 92, 23, 0, 255, 88, 23, 2, 255, 79, 21, 4, 255, 73, 20, 3, 255, 68, 16, 0, 255, 72, 19, 1, 255, 72, 22, 2, 255, 72, 17, 0, 255, 81, 21, 4, 255, 82, 24, 3, 255, 82, 19, 2, 255, 80, 21, 5, 255, 71, 19, 1, 255, 64, 15, 3, 255, 43, 12, 5, 255, 55, 11, 6, 255, 58, 15, 2, 255, 56, 14, 4, 255, 62, 13, 5, 255, 52, 11, 2, 255, 43, 10, 1, 255, 49, 11, 4, 255, 50, 9, 2, 255, 60, 14, 1, 255, 64, 15, 1, 255, 64, 16, 4, 255, 57, 12, 2, 255, 52, 9, 1, 255, 52, 12, 5, 255, 50, 13, 4, 255, 36, 9, 0, 255, 30, 9, 0, 255, 35, 10, 2, 255, 18, 9, 2, 255, 15, 10, 2, 255, 13, 7, 0, 255, 17, 7, 1, 255, 21, 8, 2, 255, 19, 8, 2, 255, 20, 11, 2, 255, 19, 10, 0, 255, 19, 9, 3, 255, 22, 12, 5, 255, 19, 9, 0, 255, 21, 10, 1, 255, 21, 10, 2, 255, 19, 12, 4, 255, 18, 11, 3, 255, 22, 12, 6, 255, 18, 7, 1, 255, 18, 10, 3, 255, 15, 10, 5, 255, 18, 15, 5, 255, 22, 12, 4, 255, 23, 13, 3, 255, 19, 14, 2, 255, 21, 13, 2, 255, 25, 14, 4, 255, 25, 14, 4, 255, 24, 11, 3, 255, 24, 11, 2, 255, 29, 15, 7, 255, 31, 15, 8, 255, 30, 13, 4, 255, 29, 14, 1, 255, 27, 14, 3, 255, 29, 14, 3, 255, 31, 14, 4, 255, 31, 15, 3, 255, 30, 16, 1, 255, 29, 17, 1, 255, 34, 20, 3, 255, 29, 18, 4, 255, 25, 16, 4, 255, 29, 17, 5, 255, 34, 19, 4, 255, 36, 21, 5, 255, 40, 21, 5, 255, 50, 25, 2, 255, 41, 26, 3, 255, 55, 23, 2, 255, 58, 21, 0, 255, 55, 27, 2, 255, 59, 23, 7, 255, 53, 25, 3, 255, 50, 27, 3, 255, 53, 28, 4, 255, 50, 26, 2, 255, 45, 26, 0, 255, 51, 28, 6, 255, 50, 20, 4, 255, 52, 26, 2, 255, 55, 30, 1, 255, 50, 27, 2, 255, 52, 27, 5, 255, 53, 25, 7, 255, 51, 30, 2, 255, 46, 28, 0, 255, 55, 29, 6, 255, 61, 29, 9, 255, 62, 27, 8, 255, 58, 28, 7, 255, 53, 28, 4, 255, 53, 29, 5, 255, 54, 29, 3, 255, 64, 29, 7, 255, 64, 23, 2, 255, 56, 29, 3, 255, 47, 30, 1, 255, 55, 31, 4, 255, 61, 28, 4, 255, 52, 26, 2, 255, 53, 30, 6, 255, 56, 29, 7, 255, 56, 32, 6, 255, 52, 34, 3, 255, 57, 30, 1, 255, 60, 34, 4, 255, 58, 35, 2, 255, 63, 36, 4, 255, 66, 35, 7, 255, 66, 33, 7, 255, 67, 34, 8, 255, 67, 33, 4, 255, 68, 34, 2, 255, 68, 34, 2, 255, 68, 39, 6, 255, 63, 34, 3, 255, 68, 37, 5, 255, 69, 37, 1, 255, 70, 35, 0, 255, 75, 36, 2, 255, 74, 37, 3, 255, 69, 36, 1, 255, 68, 37, 2, 255, 72, 36, 3, 255, 68, 37, 2, 255, 67, 40, 4, 255, 72, 38, 3, 255, 70, 35, 2, 255, 72, 40, 5, 255, 72, 34, 4, 255, 73, 36, 8, 255, 69, 35, 0, 255, 74, 37, 7, 255, 69, 32, 4, 255, 75, 36, 3, 255, 76, 38, 4, 255, 70, 33, 3, 255, 70, 42, 8, 255, 66, 38, 1, 255, 72, 33, 2, 255, 74, 34, 5, 255, 72, 39, 3, 255, 69, 36, 0, 255, 70, 32, 2, 255, 71, 37, 5, 255, 60, 38, 2, 255, 65, 38, 3, 255, 88, 42, 7, 255, 101, 43, 7, 255, 91, 39, 3, 255, 68, 41, 3, 255, 67, 44, 4, 255, 71, 41, 2, 255, 65, 41, 6, 255, 69, 42, 7, 255, 69, 41, 4, 255, 72, 44, 4, 255, 66, 42, 7, 255, 66, 44, 11, 255, 74, 48, 6, 255, 69, 47, 3, 255, 59, 45, 12, 255, 88, 47, 15, 255, 100, 53, 12, 255, 81, 53, 5, 255, 68, 52, 9, 255, 75, 51, 16, 255, 75, 51, 18, 255, 67, 56, 12, 255, 72, 58, 14, 255, 73, 56, 14, 255, 69, 57, 11, 255, 65, 58, 9, 255, 81, 64, 16, 255, 94, 63, 16, 255, 103, 64, 26, 255, 103, 66, 18, 255, 117, 71, 15, 255, 95, 71, 18, 255, 82, 66, 16, 255, 77, 67, 21, 255, 70, 61, 30, 255, 76, 69, 23, 255, 75, 69, 27, 255, 74, 68, 45, 255, 80, 69, 38, 255, 92, 75, 30, 255, 92, 73, 27, 255, 91, 74, 34, 255, 104, 81, 29, 255, 112, 85, 23, 255, 116, 89, 28, 255, 103, 89, 34, 255, 96, 82, 46, 255, 112, 88, 42, 255, 113, 83, 43, 255, 119, 91, 47, 255, 120, 91, 32, 255, 116, 92, 51, 255, 117, 96, 48, 255, 108, 92, 40, 255, 111, 95, 62, 255, 110, 96, 51, 255, 106, 96, 52, 255, 95, 98, 54, 255, 88, 96, 52, 255, 95, 99, 59, 255, 91, 102, 54, 255, 87, 101, 49, 255, 116, 105, 54, 255, 129, 107, 52, 255, 121, 106, 54, 255, 123, 106, 53, 255, 128, 104, 54, 255, 128, 107, 50, 255, 118, 104, 50, 255, 114, 105, 57, 255, 112, 102, 49, 255, 106, 101, 53, 255, 105, 102, 43, 255, 107, 99, 44, 255, 105, 97, 48, 255, 109, 101, 42, 255, 110, 97, 44, 255, 113, 99, 37, 255, 114, 96, 39, 255, 116, 94, 39, 255, 114, 95, 42, 255, 110, 89, 43, 255, 109, 90, 35, 255, 114, 93, 28, 255, 117, 91, 38, 255, 110, 85, 37, 255, 112, 86, 24, 255, 112, 83, 20, 255, 111, 80, 27, 255, 109, 80, 26, 255, 110, 79, 23, 255, 114, 80, 28, 255, 115, 78, 27, 255, 113, 72, 25, 255, 115, 74, 14, 255, 120, 76, 17, 255, 120, 75, 17, 255, 113, 70, 14, 255, 111, 68, 11, 255, 106, 67, 9, 255, 101, 65, 16, 255, 102, 68, 10, 255, 105, 65, 14, 255, 106, 62, 13, 255, 110, 65, 9, 255, 113, 64, 13, 255, 114, 62, 5, 255, 115, 64, 6, 255, 110, 59, 6, 255, 110, 62, 5, 255, 110, 58, 8, 255, 113, 56, 3, 255, 116, 54, 3, 255, 114, 55, 1, 255, 108, 54, 8, 255, 106, 54, 6, 255, 107, 51, 3, 255, 114, 52, 6, 255, 111, 52, 3, 255, 117, 49, 4, 255, 115, 54, 4, 255, 98, 51, 0, 255, 98, 48, 5, 255, 101, 48, 6, 255, 96, 45, 4, 255, 94, 43, 3, 255, 97, 45, 5, 255, 100, 45, 6, 255, 95, 43, 1, 255, 93, 45, 3, 255, 91, 42, 3, 255, 85, 43, 0, 255, 96, 45, 5, 255, 106, 45, 8, 255, 102, 45, 4, 255, 100, 48, 2, 255, 103, 46, 3, 255, 103, 39, 1, 255, 106, 44, 3, 255, 103, 45, 2, 255, 101, 37, 2, 255, 101, 34, 4, 255, 94, 35, 3, 255, 90, 37, 2, 255, 84, 37, 5, 255, 85, 38, 2, 255, 90, 35, 2, 255, 86, 31, 1, 255, 83, 36, 5, 255, 88, 38, 2, 255, 88, 37, 1, 255, 88, 39, 5, 255, 88, 33, 4, 255, 88, 31, 2, 255, 88, 32, 1, 255, 85, 33, 1, 255, 83, 34, 2, 255, 86, 30, 2, 255, 74, 31, 1, 255, 72, 29, 2, 255, 75, 30, 4, 255, 74, 29, 5, 255, 75, 23, 3, 255, 76, 29, 5, 255, 87, 32, 2, 255, 98, 33, 1, 255, 95, 34, 4, 255, 90, 35, 2, 255, 83, 37, 1, 255, 85, 31, 0, 255, 91, 27, 4, 255, 81, 28, 3, 255, 77, 31, 4, 255, 76, 28, 3, 255, 75, 26, 3, 255, 74, 24, 0, 255, 75, 26, 3, 255, 69, 25, 2, 255, 72, 25, 3, 255, 69, 26, 2, 255, 70, 26, 3, 255, 72, 26, 2, 255, 60, 25, 5, 255, 60, 26, 2, 255, 68, 24, 3, 255, 67, 21, 3, 255, 75, 26, 4, 255, 77, 22, 2, 255, 86, 25, 1, 255, 96, 30, 0, 255, 87, 26, 7, 255, 78, 21, 6, 255, 75, 26, 5, 255, 72, 26, 1, 255, 72, 24, 4, 255, 76, 22, 2, 255, 78, 25, 6, 255, 69, 25, 2, 255, 68, 27, 3, 255, 68, 24, 4, 255, 69, 24, 2, 255, 69, 21, 0, 255, 73, 21, 2, 255, 79, 22, 3, 255, 79, 25, 7, 255, 74, 22, 3, 255, 69, 20, 4, 255, 65, 18, 1, 255, 69, 20, 5, 255, 69, 20, 2, 255, 65, 20, 1, 255, 65, 22, 4, 255, 54, 14, 1, 255, 59, 18, 9, 255, 68, 17, 7, 255, 57, 15, 1, 255, 52, 16, 0, 255, 52, 18, 1, 255, 64, 18, 4, 255, 65, 18, 2, 255, 73, 20, 6, 255, 66, 20, 4, 255, 58, 22, 2, 255, 50, 17, 1, 255, 53, 19, 6, 255, 50, 21, 6, 255, 50, 18, 2, 255, 55, 17, 3, 255, 59, 16, 2, 255, 60, 17, 1, 255, 57, 15, 1, 255, 62, 20, 2, 255, 45, 17, 2, 255, 34, 15, 1, 255, 33, 13, 2, 255, 37, 14, 4, 255, 35, 15, 3, 255, 50, 13, 5, 255, 51, 15, 5, 255, 61, 19, 1, 255, 69, 18, 7, 255, 68, 15, 5, 255, 72, 16, 5, 255, 64, 12, 2, 255, 45, 14, 4, 255, 43, 12, 2, 255, 45, 11, 4, 255, 37, 14, 7, 255, 32, 9, 8, 255, 37, 9, 6, 255, 52, 15, 5, 255, 70, 19, 6, 255, 71, 15, 1, 255, 63, 16, 4, 255, 57, 18, 4, 255, 56, 10, 1, 255, 44, 9, 1, 255, 43, 10, 9, 255, 36, 9, 4, 255, 39, 12, 4, 255, 44, 9, 2, 255, 51, 13, 8, 255, 46, 10, 2, 255, 52, 12, 1, 255, 62, 16, 2, 255, 62, 15, 2, 255, 64, 13, 2, 255, 67, 15, 4, 255, 58, 10, 0, 255, 57, 15, 2, 255, 56, 17, 3, 255, 49, 12, 2, 255, 41, 11, 3, 255, 40, 9, 1, 255, 16, 6, 2, 255, 13, 6, 1, 255, 13, 6, 3, 255, 14, 6, 3, 255, 17, 8, 5, 255, 18, 9, 3, 255, 19, 8, 1, 255, 21, 10, 4, 255, 17, 7, 1, 255, 22, 12, 3, 255, 19, 9, 1, 255, 15, 6, 0, 255, 15, 9, 2, 255, 15, 12, 1, 255, 15, 11, 1, 255, 19, 13, 3, 255, 21, 11, 2, 255, 21, 8, 2, 255, 20, 10, 3, 255, 19, 10, 3, 255, 18, 8, 1, 255, 23, 13, 4, 255, 28, 19, 7, 255, 20, 10, 1, 255, 24, 12, 2, 255, 30, 16, 2, 255, 29, 16, 1, 255, 23, 14, 3, 255, 22, 11, 2, 255, 32, 14, 7, 255, 26, 10, 2, 255, 24, 15, 3, 255, 31, 17, 7, 255, 33, 16, 5, 255, 31, 14, 2, 255, 31, 14, 4, 255, 25, 13, 3, 255, 25, 16, 3, 255, 27, 15, 4, 255, 30, 17, 5, 255, 34, 17, 5, 255, 28, 18, 2, 255, 39, 20, 6, 255, 40, 21, 4, 255, 42, 22, 4, 255, 50, 24, 4, 255, 56, 24, 6, 255, 56, 22, 5, 255, 47, 19, 0, 255, 52, 24, 1, 255, 60, 24, 5, 255, 50, 20, 2, 255, 45, 27, 5, 255, 52, 25, 6, 255, 42, 29, 6, 255, 45, 23, 4, 255, 52, 24, 4, 255, 46, 28, 4, 255, 49, 24, 3, 255, 49, 26, 3, 255, 39, 25, 0, 255, 43, 23, 2, 255, 52, 25, 3, 255, 52, 28, 1, 255, 50, 28, 3, 255, 42, 26, 2, 255, 50, 23, 7, 255, 45, 26, 2, 255, 53, 27, 6, 255, 53, 26, 2, 255, 48, 29, 2, 255, 47, 26, 3, 255, 57, 31, 6, 255, 57, 29, 2, 255, 52, 28, 1, 255, 50, 27, 2, 255, 60, 31, 3, 255, 54, 29, 1, 255, 53, 27, 4, 255, 55, 29, 3, 255, 56, 32, 3, 255, 62, 31, 7, 255, 64, 31, 2, 255, 59, 33, 3, 255, 57, 32, 2, 255, 60, 37, 4, 255, 63, 35, 3, 255, 64, 29, 1, 255, 66, 35, 4, 255, 60, 38, 6, 255, 58, 35, 2, 255, 61, 33, 2, 255, 68, 33, 5, 255, 60, 33, 1, 255, 64, 38, 3, 255, 69, 35, 2, 255, 68, 36, 6, 255, 64, 37, 3, 255, 71, 39, 3, 255, 73, 41, 4, 255, 72, 36, 1, 255, 72, 35, 2, 255, 63, 37, 2, 255, 63, 39, 1, 255, 71, 35, 4, 255, 73, 35, 5, 255, 65, 35, 3, 255, 66, 34, 1, 255, 70, 39, 3, 255, 74, 38, 3, 255, 89, 35, 1, 255, 96, 35, 2, 255, 95, 39, 5, 255, 94, 36, 3, 255, 75, 37, 3, 255, 66, 36, 6, 255, 66, 37, 0, 255, 68, 36, 4, 255, 71, 35, 6, 255, 70, 36, 3, 255, 64, 33, 2, 255, 66, 36, 2, 255, 65, 37, 7, 255, 63, 37, 7, 255, 65, 36, 2, 255, 76, 39, 2, 255, 95, 48, 6, 255, 92, 39, 2, 255, 76, 36, 6, 255, 68, 36, 0, 255, 72, 42, 3, 255, 69, 39, 6, 255, 67, 43, 11, 255, 71, 43, 7, 255, 73, 41, 5, 255, 66, 42, 10, 255, 71, 43, 5, 255, 65, 51, 4, 255, 71, 49, 2, 255, 76, 48, 5, 255, 67, 49, 11, 255, 73, 47, 13, 255, 83, 54, 13, 255, 85, 57, 15, 255, 87, 58, 11, 255, 72, 52, 11, 255, 73, 50, 18, 255, 70, 53, 11, 255, 74, 55, 12, 255, 77, 53, 20, 255, 77, 56, 24, 255, 93, 64, 23, 255, 112, 67, 18, 255, 111, 68, 16, 255, 114, 67, 14, 255, 102, 62, 24, 255, 95, 62, 19, 255, 87, 68, 18, 255, 78, 68, 22, 255, 77, 67, 20, 255, 75, 66, 23, 255, 73, 69, 27, 255, 72, 65, 38, 255, 76, 70, 30, 255, 82, 71, 32, 255, 79, 76, 29, 255, 82, 75, 33, 255, 93, 79, 39, 255, 115, 85, 28, 255, 116, 84, 38, 255, 117, 85, 38, 255, 115, 90, 35, 255, 121, 89, 53, 255, 117, 87, 42, 255, 115, 90, 43, 255, 117, 91, 47, 255, 124, 92, 41, 255, 120, 97, 51, 255, 117, 97, 50, 255, 122, 97, 44, 255, 121, 99, 55, 255, 125, 97, 52, 255, 128, 102, 47, 255, 103, 102, 56, 255, 91, 98, 49, 255, 109, 103, 58, 255, 109, 104, 50, 255, 100, 102, 46, 255, 101, 100, 53, 255, 112, 104, 59, 255, 116, 104, 56, 255, 116, 102, 56, 255, 118, 107, 54, 255, 115, 103, 52, 255, 114, 103, 52, 255, 109, 100, 54, 255, 107, 101, 55, 255, 102, 101, 45, 255, 102, 95, 52, 255, 105, 101, 48, 255, 104, 101, 41, 255, 104, 99, 42, 255, 108, 100, 43, 255, 117, 100, 38, 255, 118, 99, 37, 255, 120, 97, 36, 255, 120, 94, 33, 255, 120, 91, 40, 255, 118, 91, 41, 255, 114, 91, 23, 255, 112, 89, 26, 255, 108, 85, 30, 255, 113, 81, 34, 255, 118, 83, 31, 255, 114, 81, 24, 255, 109, 77, 28, 255, 112, 80, 24, 255, 110, 74, 21, 255, 114, 75, 18, 255, 116, 74, 19, 255, 118, 74, 22, 255, 113, 68, 18, 255, 111, 67, 16, 255, 112, 70, 14, 255, 110, 68, 24, 255, 106, 65, 19, 255, 106, 63, 22, 255, 109, 68, 8, 255, 107, 66, 11, 255, 106, 67, 12, 255, 113, 69, 5, 255, 112, 62, 7, 255, 114, 62, 12, 255, 114, 60, 17, 255, 108, 58, 10, 255, 105, 58, 7, 255, 107, 58, 4, 255, 117, 57, 5, 255, 105, 58, 4, 255, 99, 57, 3, 255, 108, 58, 9, 255, 113, 54, 8, 255, 113, 54, 5, 255, 115, 51, 6, 255, 113, 50, 3, 255, 115, 51, 1, 255, 108, 53, 2, 255, 103, 52, 5, 255, 106, 46, 3, 255, 106, 49, 6, 255, 98, 46, 4, 255, 96, 46, 4, 255, 98, 43, 5, 255, 99, 44, 9, 255, 96, 46, 8, 255, 91, 47, 4, 255, 92, 45, 3, 255, 90, 38, 3, 255, 97, 38, 4, 255, 104, 43, 4, 255, 104, 44, 4, 255, 96, 40, 2, 255, 94, 36, 5, 255, 86, 33, 2, 255, 85, 38, 2, 255, 87, 35, 3, 255, 82, 32, 4, 255, 80, 35, 3, 255, 80, 39, 5, 255, 76, 36, 3, 255, 81, 31, 2, 255, 89, 34, 3, 255, 87, 37, 1, 255, 78, 33, 0, 255, 80, 29, 8, 255, 86, 32, 5, 255, 89, 32, 2, 255, 87, 38, 5, 255, 88, 34, 4, 255, 87, 29, 4, 255, 86, 27, 5, 255, 78, 30, 3, 255, 79, 31, 3, 255, 73, 30, 5, 255, 69, 27, 2, 255, 77, 32, 5, 255, 75, 29, 2, 255, 77, 30, 4, 255, 79, 24, 6, 255, 77, 26, 2, 255, 88, 32, 3, 255, 92, 34, 3, 255, 93, 33, 2, 255, 93, 35, 2, 255, 86, 36, 4, 255, 83, 31, 2, 255, 94, 31, 4, 255, 88, 30, 2, 255, 79, 31, 2, 255, 73, 27, 2, 255, 75, 26, 5, 255, 71, 27, 5, 255, 75, 25, 1, 255, 73, 27, 2, 255, 67, 29, 4, 255, 64, 25, 2, 255, 73, 25, 2, 255, 70, 25, 1, 255, 67, 24, 2, 255, 68, 24, 3, 255, 70, 24, 7, 255, 70, 23, 4, 255, 78, 28, 3, 255, 76, 24, 0, 255, 79, 24, 4, 255, 88, 27, 4, 255, 87, 25, 1, 255, 82, 26, 2, 255, 76, 25, 2, 255, 74, 23, 4, 255, 72, 22, 2, 255, 78, 24, 4, 255, 75, 22, 2, 255, 72, 21, 0, 255, 76, 27, 7, 255, 71, 21, 3, 255, 68, 26, 4, 255, 75, 24, 1, 255, 79, 22, 1, 255, 89, 25, 4, 255, 92, 26, 5, 255, 93, 26, 5, 255, 81, 24, 3, 255, 70, 21, 6, 255, 70, 20, 2, 255, 66, 17, 1, 255, 68, 20, 4, 255, 64, 19, 3, 255, 58, 21, 2, 255, 52, 15, 2, 255, 60, 16, 9, 255, 60, 16, 4, 255, 49, 16, 3, 255, 58, 17, 5, 255, 59, 15, 1, 255, 55, 17, 1, 255, 59, 17, 3, 255, 63, 21, 4, 255, 62, 21, 3, 255, 48, 19, 1, 255, 55, 19, 6, 255, 57, 21, 3, 255, 58, 20, 2, 255, 64, 19, 3, 255, 58, 16, 3, 255, 52, 13, 6, 255, 28, 10, 0, 255, 34, 16, 1, 255, 38, 16, 2, 255, 32, 15, 1, 255, 39, 16, 2, 255, 45, 16, 3, 255, 45, 13, 2, 255, 44, 15, 5, 255, 34, 11, 4, 255, 27, 9, 4, 255, 30, 11, 2, 255, 29, 11, 4, 255, 35, 13, 0, 255, 30, 12, 4, 255, 27, 6, 4, 255, 27, 8, 2, 255, 27, 8, 6, 255, 23, 8, 5, 255, 21, 9, 3, 255, 20, 7, 0, 255, 20, 10, 1, 255, 25, 9, 4, 255, 29, 5, 0, 255, 42, 12, 6, 255, 54, 14, 5, 255, 59, 14, 2, 255, 59, 15, 1, 255, 61, 11, 3, 255, 53, 14, 3, 255, 40, 14, 4, 255, 31, 10, 1, 255, 36, 12, 3, 255, 48, 14, 4, 255, 56, 14, 1, 255, 57, 14, 1, 255, 54, 14, 2, 255, 63, 19, 4, 255, 70, 17, 2, 255, 70, 15, 1, 255, 64, 16, 2, 255, 55, 15, 3, 255, 50, 16, 5, 255, 50, 13, 2, 255, 54, 13, 2, 255, 13, 6, 2, 255, 14, 6, 3, 255, 13, 8, 4, 255, 13, 6, 3, 255, 14, 6, 2, 255, 19, 9, 2, 255, 19, 8, 2, 255, 19, 10, 3, 255, 17, 9, 1, 255, 18, 9, 0, 255, 21, 11, 2, 255, 19, 10, 2, 255, 18, 11, 3, 255, 17, 8, 2, 255, 16, 9, 2, 255, 20, 10, 2, 255, 23, 12, 4, 255, 23, 12, 3, 255, 21, 12, 2, 255, 20, 11, 2, 255, 22, 12, 3, 255, 22, 12, 3, 255, 25, 14, 4, 255, 23, 13, 2, 255, 26, 17, 5, 255, 26, 17, 5, 255, 21, 13, 2, 255, 22, 12, 5, 255, 23, 14, 5, 255, 20, 12, 0, 255, 24, 16, 3, 255, 26, 17, 3, 255, 26, 14, 2, 255, 26, 12, 2, 255, 25, 13, 4, 255, 24, 13, 6, 255, 24, 14, 5, 255, 34, 18, 5, 255, 26, 17, 3, 255, 30, 14, 2, 255, 42, 14, 4, 255, 30, 19, 3, 255, 39, 21, 5, 255, 43, 21, 4, 255, 44, 20, 4, 255, 50, 23, 5, 255, 48, 20, 1, 255, 49, 19, 1, 255, 54, 22, 2, 255, 55, 23, 3, 255, 51, 20, 1, 255, 51, 21, 3, 255, 49, 19, 1, 255, 52, 20, 3, 255, 37, 21, 1, 255, 41, 20, 2, 255, 47, 22, 3, 255, 44, 24, 1, 255, 45, 21, 2, 255, 45, 25, 5, 255, 39, 24, 3, 255, 46, 25, 4, 255, 54, 26, 5, 255, 51, 25, 3, 255, 51, 26, 3, 255, 38, 26, 0, 255, 46, 28, 4, 255, 47, 31, 2, 255, 56, 27, 6, 255, 47, 22, 5, 255, 43, 25, 5, 255, 54, 31, 8, 255, 53, 26, 2, 255, 52, 29, 7, 255, 52, 25, 3, 255, 58, 28, 3, 255, 53, 28, 3, 255, 51, 29, 2, 255, 61, 25, 4, 255, 66, 30, 1, 255, 57, 32, 0, 255, 62, 30, 3, 255, 64, 28, 5, 255, 61, 30, 2, 255, 63, 31, 3, 255, 66, 34, 5, 255, 61, 33, 2, 255, 59, 34, 2, 255, 60, 37, 4, 255, 57, 36, 3, 255, 58, 33, 2, 255, 61, 36, 4, 255, 66, 34, 4, 255, 68, 33, 3, 255, 64, 36, 2, 255, 71, 33, 2, 255, 65, 33, 3, 255, 67, 37, 3, 255, 70, 35, 3, 255, 68, 36, 3, 255, 64, 34, 2, 255, 62, 33, 3, 255, 69, 37, 7, 255, 66, 33, 4, 255, 62, 36, 7, 255, 61, 35, 7, 255, 66, 34, 6, 255, 68, 37, 7, 255, 62, 33, 1, 255, 73, 38, 5, 255, 97, 41, 6, 255, 93, 43, 4, 255, 92, 39, 3, 255, 94, 34, 4, 255, 71, 31, 5, 255, 70, 36, 1, 255, 68, 35, 7, 255, 67, 38, 6, 255, 62, 34, 0, 255, 63, 38, 3, 255, 65, 37, 5, 255, 66, 34, 1, 255, 67, 37, 3, 255, 67, 34, 4, 255, 62, 33, 3, 255, 64, 32, 6, 255, 67, 33, 5, 255, 62, 32, 7, 255, 64, 32, 9, 255, 67, 36, 6, 255, 71, 35, 1, 255, 71, 37, 4, 255, 67, 42, 7, 255, 63, 39, 6, 255, 74, 41, 7, 255, 74, 40, 6, 255, 67, 44, 10, 255, 61, 47, 11, 255, 70, 44, 6, 255, 76, 46, 9, 255, 96, 50, 17, 255, 109, 59, 15, 255, 104, 59, 7, 255, 110, 59, 12, 255, 98, 56, 9, 255, 76, 50, 13, 255, 64, 54, 15, 255, 68, 57, 19, 255, 71, 54, 18, 255, 70, 57, 16, 255, 91, 63, 14, 255, 114, 66, 14, 255, 115, 63, 17, 255, 106, 60, 23, 255, 109, 68, 13, 255, 100, 70, 16, 255, 78, 61, 35, 255, 74, 62, 24, 255, 81, 65, 17, 255, 71, 67, 22, 255, 69, 64, 31, 255, 72, 67, 34, 255, 75, 67, 34, 255, 85, 70, 30, 255, 93, 78, 30, 255, 81, 75, 47, 255, 88, 74, 45, 255, 102, 79, 32, 255, 101, 82, 30, 255, 102, 86, 38, 255, 95, 84, 33, 255, 94, 82, 37, 255, 95, 86, 45, 255, 112, 94, 40, 255, 118, 93, 29, 255, 114, 94, 44, 255, 119, 92, 54, 255, 115, 93, 51, 255, 123, 96, 52, 255, 127, 96, 52, 255, 121, 98, 51, 255, 114, 94, 60, 255, 107, 98, 48, 255, 97, 94, 66, 255, 110, 103, 53, 255, 126, 106, 45, 255, 127, 101, 58, 255, 125, 106, 58, 255, 109, 106, 55, 255, 87, 98, 54, 255, 90, 102, 58, 255, 98, 101, 52, 255, 105, 106, 53, 255, 101, 101, 54, 255, 102, 103, 51, 255, 101, 106, 42, 255, 98, 101, 50, 255, 101, 101, 51, 255, 103, 102, 46, 255, 107, 100, 49, 255, 104, 98, 46, 255, 110, 100, 48, 255, 115, 98, 46, 255, 116, 96, 44, 255, 124, 97, 39, 255, 127, 92, 40, 255, 127, 90, 43, 255, 124, 94, 19, 255, 120, 93, 37, 255, 112, 91, 35, 255, 106, 89, 27, 255, 112, 90, 34, 255, 115, 85, 22, 255, 123, 85, 35, 255, 117, 83, 19, 255, 113, 82, 15, 255, 111, 79, 22, 255, 114, 75, 27, 255, 119, 76, 25, 255, 118, 78, 16, 255, 111, 71, 18, 255, 107, 71, 14, 255, 104, 68, 15, 255, 107, 70, 19, 255, 107, 64, 9, 255, 108, 67, 9, 255, 107, 67, 19, 255, 104, 64, 15, 255, 106, 65, 12, 255, 106, 62, 10, 255, 107, 60, 10, 255, 109, 60, 8, 255, 110, 59, 14, 255, 110, 61, 5, 255, 111, 61, 1, 255, 107, 57, 2, 255, 109, 59, 11, 255, 104, 55, 5, 255, 106, 50, 9, 255, 109, 51, 8, 255, 106, 54, 1, 255, 109, 57, 1, 255, 108, 53, 2, 255, 116, 54, 9, 255, 115, 52, 5, 255, 106, 52, 1, 255, 107, 48, 3, 255, 110, 49, 6, 255, 107, 49, 6, 255, 102, 45, 3, 255, 103, 46, 5, 255, 103, 43, 2, 255, 102, 44, 2, 255, 100, 46, 6, 255, 95, 41, 2, 255, 101, 43, 4, 255, 101, 44, 5, 255, 88, 39, 2, 255, 85, 39, 0, 255, 93, 41, 1, 255, 98, 40, 1, 255, 89, 37, 1, 255, 87, 36, 4, 255, 90, 41, 5, 255, 82, 35, 0, 255, 81, 32, 1, 255, 81, 34, 3, 255, 79, 35, 2, 255, 81, 38, 3, 255, 81, 35, 5, 255, 80, 32, 1, 255, 93, 34, 1, 255, 97, 40, 3, 255, 86, 37, 3, 255, 83, 26, 4, 255, 84, 27, 3, 255, 88, 33, 5, 255, 83, 33, 2, 255, 80, 29, 0, 255, 77, 29, 2, 255, 78, 29, 5, 255, 79, 32, 8, 255, 76, 28, 4, 255, 75, 33, 9, 255, 74, 31, 7, 255, 72, 24, 0, 255, 75, 29, 3, 255, 73, 29, 4, 255, 66, 26, 8, 255, 77, 31, 5, 255, 84, 27, 0, 255, 78, 30, 4, 255, 79, 29, 6, 255, 94, 30, 4, 255, 91, 33, 2, 255, 86, 35, 3, 255, 83, 32, 1, 255, 83, 28, 1, 255, 84, 28, 5, 255, 77, 27, 4, 255, 70, 24, 2, 255, 74, 26, 5, 255, 77, 27, 2, 255, 74, 26, 0, 255, 72, 29, 5, 255, 72, 28, 4, 255, 74, 25, 2, 255, 72, 25, 2, 255, 71, 25, 3, 255, 67, 21, 1, 255, 69, 23, 4, 255, 71, 27, 5, 255, 68, 24, 1, 255, 75, 28, 3, 255, 73, 24, 1, 255, 73, 25, 3, 255, 72, 25, 4, 255, 66, 22, 0, 255, 73, 26, 3, 255, 75, 24, 1, 255, 78, 26, 5, 255, 80, 23, 5, 255, 79, 24, 5, 255, 69, 22, 1, 255, 66, 24, 2, 255, 71, 25, 3, 255, 70, 22, 4, 255, 77, 20, 5, 255, 77, 23, 1, 255, 82, 28, 1, 255, 80, 24, 2, 255, 78, 19, 2, 255, 73, 22, 7, 255, 67, 21, 3, 255, 66, 21, 0, 255, 70, 23, 4, 255, 68, 20, 5, 255, 64, 19, 4, 255, 62, 23, 4, 255, 61, 22, 3, 255, 62, 16, 4, 255, 63, 20, 4, 255, 49, 17, 2, 255, 55, 14, 3, 255, 60, 16, 2, 255, 50, 16, 2, 255, 52, 18, 1, 255, 55, 21, 2, 255, 65, 22, 4, 255, 64, 18, 4, 255, 66, 16, 4, 255, 62, 18, 1, 255, 72, 23, 2, 255, 69, 16, 2, 255, 56, 11, 0, 255, 45, 13, 3, 255, 31, 10, 2, 255, 34, 12, 5, 255, 38, 11, 6, 255, 35, 10, 3, 255, 37, 13, 4, 255, 44, 17, 6, 255, 45, 14, 4, 255, 48, 14, 5, 255, 41, 10, 3, 255, 31, 12, 4, 255, 30, 18, 6, 255, 34, 15, 4, 255, 36, 12, 2, 255, 23, 12, 0, 255, 27, 9, 3, 255, 32, 10, 3, 255, 29, 10, 4, 255, 29, 10, 3, 255, 26, 10, 0, 255, 32, 14, 4, 255, 28, 9, 1, 255, 25, 7, 3, 255, 18, 8, 3, 255, 21, 8, 1, 255, 41, 12, 2, 255, 55, 14, 4, 255, 58, 16, 5, 255, 55, 14, 5, 255, 57, 14, 4, 255, 56, 14, 7, 255, 47, 11, 6, 255, 41, 10, 2, 255, 60, 15, 2, 255, 70, 18, 3, 255, 76, 19, 3, 255, 76, 21, 3, 255, 68, 21, 0, 255, 67, 19, 0, 255, 75, 17, 2, 255, 75, 17, 6, 255, 64, 18, 5, 255, 59, 13, 3, 255, 55, 12, 0, 255, 61, 16, 6, 255, 12, 8, 4, 255, 11, 7, 4, 255, 11, 7, 3, 255, 12, 8, 3, 255, 14, 7, 1, 255, 18, 9, 1, 255, 18, 8, 3, 255, 16, 8, 1, 255, 18, 11, 3, 255, 17, 9, 0, 255, 21, 11, 2, 255, 22, 13, 4, 255, 21, 11, 3, 255, 24, 12, 7, 255, 17, 7, 2, 255, 18, 8, 0, 255, 22, 12, 3, 255, 22, 12, 3, 255, 21, 11, 1, 255, 21, 13, 3, 255, 21, 12, 3, 255, 22, 11, 2, 255, 28, 14, 5, 255, 24, 11, 2, 255, 23, 14, 3, 255, 21, 16, 4, 255, 18, 13, 4, 255, 20, 11, 4, 255, 21, 14, 6, 255, 21, 16, 3, 255, 23, 17, 1, 255, 25, 16, 2, 255, 24, 12, 2, 255, 24, 12, 3, 255, 25, 15, 5, 255, 22, 13, 5, 255, 27, 15, 4, 255, 36, 16, 4, 255, 32, 16, 1, 255, 31, 18, 3, 255, 41, 16, 4, 255, 38, 16, 3, 255, 36, 17, 1, 255, 36, 19, 2, 255, 48, 18, 3, 255, 48, 22, 4, 255, 46, 20, 1, 255, 48, 19, 1, 255, 54, 22, 2, 255, 52, 21, 1, 255, 48, 22, 2, 255, 45, 20, 2, 255, 47, 23, 3, 255, 46, 22, 3, 255, 47, 20, 4, 255, 54, 22, 9, 255, 44, 21, 2, 255, 46, 24, 2, 255, 46, 23, 4, 255, 41, 23, 4, 255, 42, 26, 5, 255, 45, 25, 6, 255, 49, 24, 5, 255, 50, 24, 4, 255, 50, 27, 4, 255, 48, 26, 0, 255, 42, 23, 9, 255, 40, 23, 8, 255, 51, 30, 2, 255, 52, 31, 3, 255, 50, 25, 2, 255, 44, 24, 1, 255, 51, 27, 5, 255, 47, 23, 2, 255, 50, 26, 5, 255, 47, 25, 3, 255, 54, 29, 5, 255, 52, 26, 3, 255, 58, 24, 1, 255, 58, 28, 0, 255, 55, 34, 1, 255, 61, 32, 5, 255, 53, 31, 3, 255, 61, 31, 2, 255, 60, 29, 1, 255, 63, 31, 4, 255, 62, 31, 3, 255, 58, 34, 3, 255, 58, 32, 2, 255, 66, 32, 3, 255, 64, 30, 4, 255, 61, 32, 3, 255, 63, 32, 3, 255, 67, 33, 4, 255, 63, 32, 2, 255, 61, 34, 4, 255, 63, 35, 0, 255, 63, 38, 2, 255, 70, 34, 5, 255, 63, 37, 3, 255, 75, 35, 1, 255, 90, 38, 2, 255, 92, 38, 1, 255, 89, 36, 2, 255, 75, 35, 1, 255, 64, 33, 0, 255, 66, 35, 3, 255, 68, 37, 5, 255, 72, 32, 4, 255, 75, 35, 1, 255, 76, 37, 1, 255, 75, 35, 4, 255, 73, 31, 2, 255, 63, 35, 1, 255, 60, 34, 2, 255, 68, 33, 1, 255, 56, 29, 10, 255, 61, 36, 8, 255, 71, 36, 0, 255, 71, 33, 1, 255, 70, 37, 1, 255, 71, 35, 1, 255, 68, 34, 7, 255, 62, 31, 3, 255, 71, 35, 7, 255, 67, 33, 6, 255, 66, 38, 4, 255, 63, 35, 3, 255, 68, 35, 4, 255, 61, 35, 10, 255, 58, 30, 9, 255, 69, 37, 7, 255, 67, 38, 0, 255, 65, 38, 5, 255, 70, 42, 13, 255, 66, 40, 5, 255, 70, 42, 3, 255, 69, 46, 8, 255, 65, 45, 6, 255, 67, 47, 7, 255, 97, 53, 8, 255, 97, 52, 6, 255, 85, 53, 8, 255, 82, 52, 13, 255, 71, 50, 7, 255, 70, 50, 16, 255, 73, 50, 25, 255, 73, 53, 23, 255, 67, 55, 16, 255, 70, 61, 20, 255, 85, 59, 20, 255, 117, 66, 17, 255, 121, 64, 13, 255, 116, 66, 23, 255, 110, 67, 26, 255, 117, 72, 22, 255, 90, 65, 22, 255, 68, 64, 19, 255, 71, 67, 31, 255, 83, 75, 25, 255, 93, 75, 25, 255, 78, 67, 30, 255, 82, 71, 36, 255, 103, 75, 33, 255, 117, 79, 32, 255, 117, 79, 32, 255, 114, 80, 37, 255, 108, 81, 31, 255, 86, 76, 38, 255, 82, 73, 52, 255, 80, 80, 44, 255, 82, 83, 46, 255, 78, 80, 51, 255, 98, 81, 49, 255, 117, 88, 41, 255, 114, 96, 54, 255, 117, 96, 49, 255, 116, 97, 54, 255, 122, 98, 55, 255, 127, 99, 60, 255, 119, 102, 51, 255, 98, 98, 60, 255, 84, 92, 61, 255, 102, 102, 58, 255, 124, 109, 54, 255, 128, 103, 54, 255, 126, 106, 56, 255, 110, 106, 68, 255, 95, 103, 52, 255, 95, 105, 52, 255, 99, 105, 69, 255, 93, 101, 54, 255, 99, 102, 58, 255, 109, 108, 53, 255, 111, 106, 51, 255, 108, 102, 52, 255, 106, 102, 53, 255, 106, 103, 51, 255, 110, 108, 43, 255, 116, 105, 39, 255, 114, 103, 41, 255, 120, 102, 48, 255, 126, 103, 40, 255, 121, 100, 35, 255, 122, 93, 38, 255, 122, 94, 39, 255, 121, 91, 45, 255, 113, 89, 22, 255, 110, 90, 30, 255, 109, 89, 34, 255, 110, 91, 21, 255, 117, 88, 27, 255, 121, 86, 22, 255, 124, 83, 24, 255, 121, 80, 15, 255, 119, 80, 17, 255, 121, 85, 14, 255, 114, 81, 9, 255, 109, 77, 22, 255, 109, 76, 21, 255, 102, 70, 15, 255, 104, 71, 13, 255, 104, 68, 11, 255, 108, 69, 18, 255, 104, 68, 14, 255, 105, 66, 14, 255, 107, 65, 11, 255, 108, 64, 8, 255, 107, 64, 12, 255, 100, 62, 7, 255, 104, 57, 16, 255, 108, 56, 13, 255, 109, 59, 14, 255, 108, 60, 7, 255, 107, 57, 6, 255, 107, 57, 5, 255, 107, 55, 7, 255, 109, 54, 7, 255, 114, 54, 8, 255, 113, 51, 5, 255, 112, 53, 5, 255, 110, 53, 5, 255, 109, 51, 5, 255, 112, 51, 4, 255, 112, 49, 1, 255, 107, 51, 3, 255, 111, 47, 5, 255, 115, 46, 7, 255, 108, 47, 5, 255, 106, 45, 2, 255, 109, 46, 3, 255, 110, 45, 6, 255, 101, 42, 6, 255, 99, 44, 7, 255, 107, 47, 7, 255, 112, 45, 1, 255, 115, 44, 0, 255, 101, 43, 3, 255, 86, 41, 5, 255, 83, 40, 4, 255, 88, 42, 3, 255, 90, 40, 2, 255, 81, 36, 0, 255, 84, 36, 2, 255, 87, 36, 3, 255, 82, 37, 4, 255, 79, 34, 1, 255, 83, 36, 2, 255, 82, 36, 0, 255, 77, 28, 0, 255, 77, 34, 3, 255, 85, 35, 4, 255, 89, 35, 4, 255, 86, 38, 4, 255, 86, 32, 5, 255, 81, 31, 2, 255, 80, 31, 2, 255, 76, 27, 2, 255, 75, 27, 4, 255, 69, 32, 5, 255, 73, 32, 2, 255, 81, 33, 6, 255, 75, 27, 5, 255, 71, 25, 2, 255, 78, 31, 5, 255, 79, 28, 2, 255, 76, 26, 2, 255, 72, 26, 3, 255, 80, 29, 5, 255, 79, 28, 3, 255, 77, 33, 2, 255, 91, 31, 5, 255, 85, 27, 2, 255, 87, 31, 4, 255, 94, 34, 4, 255, 95, 35, 5, 255, 86, 28, 0, 255, 83, 26, 0, 255, 84, 25, 3, 255, 84, 26, 5, 255, 78, 25, 3, 255, 81, 26, 4, 255, 78, 26, 2, 255, 76, 28, 2, 255, 76, 26, 2, 255, 75, 26, 2, 255, 76, 29, 4, 255, 70, 25, 1, 255, 68, 21, 1, 255, 71, 24, 4, 255, 70, 24, 3, 255, 67, 25, 4, 255, 65, 25, 2, 255, 69, 26, 5, 255, 71, 25, 4, 255, 71, 24, 1, 255, 72, 24, 2, 255, 72, 26, 3, 255, 74, 25, 3, 255, 75, 25, 2, 255, 78, 30, 5, 255, 73, 28, 5, 255, 68, 24, 3, 255, 71, 22, 3, 255, 78, 24, 4, 255, 74, 23, 2, 255, 70, 24, 7, 255, 64, 18, 2, 255, 79, 24, 3, 255, 94, 23, 5, 255, 76, 20, 1, 255, 63, 21, 4, 255, 61, 18, 3, 255, 68, 22, 1, 255, 70, 23, 1, 255, 68, 19, 0, 255, 68, 18, 1, 255, 65, 17, 3, 255, 64, 23, 5, 255, 65, 22, 1, 255, 64, 17, 1, 255, 66, 21, 3, 255, 51, 18, 0, 255, 60, 21, 6, 255, 63, 17, 3, 255, 56, 19, 3, 255, 58, 18, 2, 255, 51, 19, 1, 255, 56, 19, 1, 255, 70, 17, 5, 255, 70, 15, 6, 255, 72, 17, 3, 255, 65, 20, 4, 255, 63, 15, 2, 255, 55, 15, 3, 255, 45, 14, 2, 255, 48, 14, 5, 255, 47, 11, 3, 255, 47, 13, 7, 255, 44, 11, 3, 255, 47, 13, 3, 255, 55, 16, 6, 255, 53, 15, 3, 255, 49, 14, 1, 255, 43, 13, 0, 255, 40, 13, 4, 255, 37, 18, 6, 255, 45, 14, 2, 255, 47, 11, 5, 255, 39, 13, 2, 255, 31, 13, 2, 255, 36, 14, 3, 255, 32, 10, 0, 255, 35, 13, 2, 255, 32, 10, 2, 255, 33, 12, 4, 255, 31, 11, 2, 255, 27, 12, 5, 255, 18, 8, 3, 255, 23, 8, 3, 255, 30, 8, 2, 255, 32, 13, 2, 255, 30, 12, 0, 255, 39, 12, 4, 255, 45, 10, 1, 255, 45, 10, 4, 255, 46, 14, 8, 255, 50, 12, 4, 255, 81, 19, 5, 255, 83, 24, 4, 255, 94, 27, 3, 255, 96, 27, 2, 255, 90, 28, 3, 255, 89, 27, 5, 255, 80, 22, 1, 255, 79, 20, 2, 255, 85, 19, 4, 255, 73, 18, 0, 255, 65, 16, 0, 255, 61, 14, 2, 255, 12, 8, 5, 255, 10, 6, 3, 255, 10, 7, 2, 255, 12, 7, 2, 255, 16, 9, 2, 255, 16, 8, 0, 255, 18, 9, 3, 255, 17, 11, 4, 255, 17, 11, 2, 255, 18, 10, 2, 255, 18, 8, 0, 255, 23, 13, 4, 255, 21, 12, 2, 255, 19, 10, 2, 255, 19, 11, 3, 255, 20, 12, 3, 255, 21, 10, 4, 255, 23, 11, 4, 255, 20, 10, 3, 255, 20, 15, 5, 255, 20, 13, 3, 255, 22, 12, 3, 255, 29, 16, 8, 255, 24, 10, 3, 255, 23, 12, 4, 255, 21, 13, 2, 255, 22, 15, 3, 255, 18, 14, 3, 255, 16, 9, 1, 255, 25, 14, 5, 255, 24, 13, 3, 255, 23, 15, 5, 255, 25, 13, 6, 255, 27, 13, 2, 255, 32, 16, 1, 255, 28, 15, 0, 255, 32, 19, 3, 255, 34, 17, 4, 255, 31, 14, 1, 255, 36, 20, 4, 255, 41, 18, 5, 255, 36, 18, 3, 255, 44, 20, 6, 255, 45, 20, 3, 255, 45, 21, 3, 255, 44, 20, 3, 255, 46, 18, 1, 255, 49, 20, 2, 255, 49, 21, 2, 255, 47, 21, 1, 255, 50, 24, 3, 255, 46, 20, 3, 255, 53, 22, 4, 255, 50, 24, 5, 255, 42, 20, 3, 255, 44, 20, 4, 255, 39, 24, 3, 255, 43, 20, 2, 255, 45, 25, 4, 255, 38, 22, 1, 255, 42, 24, 4, 255, 44, 23, 2, 255, 46, 22, 2, 255, 50, 25, 5, 255, 48, 22, 6, 255, 48, 26, 10, 255, 37, 26, 5, 255, 52, 30, 3, 255, 50, 24, 1, 255, 52, 27, 5, 255, 60, 30, 4, 255, 53, 26, 4, 255, 55, 29, 7, 255, 55, 26, 2, 255, 48, 24, 3, 255, 45, 24, 1, 255, 55, 32, 0, 255, 53, 28, 2, 255, 54, 27, 6, 255, 54, 32, 6, 255, 50, 33, 1, 255, 57, 27, 1, 255, 62, 38, 4, 255, 71, 37, 8, 255, 56, 29, 0, 255, 56, 31, 1, 255, 63, 30, 5, 255, 61, 31, 3, 255, 61, 32, 2, 255, 68, 35, 7, 255, 63, 36, 6, 255, 63, 35, 5, 255, 65, 34, 3, 255, 67, 35, 4, 255, 67, 31, 2, 255, 62, 36, 6, 255, 61, 34, 3, 255, 62, 33, 6, 255, 60, 36, 7, 255, 59, 34, 2, 255, 69, 36, 1, 255, 94, 37, 4, 255, 85, 35, 5, 255, 71, 36, 5, 255, 63, 33, 1, 255, 65, 35, 2, 255, 69, 36, 3, 255, 66, 32, 0, 255, 62, 36, 2, 255, 61, 36, 5, 255, 63, 35, 1, 255, 58, 34, 0, 255, 65, 34, 2, 255, 69, 39, 6, 255, 63, 31, 5, 255, 65, 31, 1, 255, 60, 35, 3, 255, 63, 36, 7, 255, 66, 31, 2, 255, 68, 33, 6, 255, 65, 33, 4, 255, 66, 32, 1, 255, 64, 30, 3, 255, 66, 37, 4, 255, 61, 37, 2, 255, 64, 36, 5, 255, 65, 34, 1, 255, 68, 39, 5, 255, 67, 37, 1, 255, 62, 38, 8, 255, 58, 32, 8, 255, 66, 37, 8, 255, 66, 40, 3, 255, 67, 39, 5, 255, 71, 38, 11, 255, 65, 44, 4, 255, 68, 44, 5, 255, 71, 43, 6, 255, 68, 51, 4, 255, 68, 51, 11, 255, 96, 55, 10, 255, 106, 57, 17, 255, 95, 51, 18, 255, 81, 46, 15, 255, 71, 51, 9, 255, 66, 54, 17, 255, 71, 47, 25, 255, 78, 53, 15, 255, 75, 59, 11, 255, 68, 59, 9, 255, 70, 60, 16, 255, 91, 62, 22, 255, 112, 69, 20, 255, 112, 72, 14, 255, 106, 65, 23, 255, 85, 63, 22, 255, 72, 62, 17, 255, 75, 67, 32, 255, 98, 69, 25, 255, 110, 73, 30, 255, 108, 75, 25, 255, 94, 71, 22, 255, 97, 78, 35, 255, 114, 79, 31, 255, 119, 77, 35, 255, 123, 79, 27, 255, 116, 83, 34, 255, 98, 78, 38, 255, 82, 78, 40, 255, 77, 81, 41, 255, 87, 83, 43, 255, 89, 84, 43, 255, 87, 85, 47, 255, 89, 88, 38, 255, 86, 89, 42, 255, 92, 91, 56, 255, 128, 103, 48, 255, 124, 101, 50, 255, 118, 99, 57, 255, 126, 100, 50, 255, 123, 105, 53, 255, 99, 103, 49, 255, 90, 98, 51, 255, 118, 108, 58, 255, 128, 112, 52, 255, 121, 109, 51, 255, 112, 106, 60, 255, 98, 103, 71, 255, 90, 104, 58, 255, 92, 106, 56, 255, 97, 103, 55, 255, 105, 104, 60, 255, 121, 105, 61, 255, 122, 110, 52, 255, 118, 105, 58, 255, 116, 105, 59, 255, 119, 110, 44, 255, 121, 109, 42, 255, 121, 103, 44, 255, 123, 106, 44, 255, 125, 104, 45, 255, 124, 99, 45, 255, 124, 99, 41, 255, 123, 99, 34, 255, 116, 97, 28, 255, 115, 96, 41, 255, 112, 89, 42, 255, 114, 89, 34, 255, 115, 91, 33, 255, 111, 89, 27, 255, 111, 87, 31, 255, 113, 82, 24, 255, 120, 84, 28, 255, 121, 82, 23, 255, 119, 79, 28, 255, 115, 80, 17, 255, 115, 79, 19, 255, 108, 70, 26, 255, 105, 71, 19, 255, 106, 71, 24, 255, 104, 71, 23, 255, 101, 67, 19, 255, 102, 66, 26, 255, 100, 66, 17, 255, 101, 68, 17, 255, 103, 66, 13, 255, 108, 62, 11, 255, 109, 64, 3, 255, 106, 62, 16, 255, 101, 62, 15, 255, 110, 62, 19, 255, 110, 56, 14, 255, 108, 60, 5, 255, 106, 59, 8, 255, 104, 56, 10, 255, 106, 56, 11, 255, 107, 55, 6, 255, 119, 56, 7, 255, 119, 54, 3, 255, 118, 52, 5, 255, 118, 54, 9, 255, 111, 47, 4, 255, 114, 50, 7, 255, 115, 52, 7, 255, 112, 49, 5, 255, 116, 46, 7, 255, 116, 46, 7, 255, 115, 47, 6, 255, 116, 45, 3, 255, 116, 47, 8, 255, 103, 40, 4, 255, 102, 46, 4, 255, 100, 46, 4, 255, 103, 45, 5, 255, 103, 40, 2, 255, 110, 44, 4, 255, 114, 48, 2, 255, 113, 44, 4, 255, 111, 38, 6, 255, 107, 38, 6, 255, 101, 39, 3, 255, 97, 40, 2, 255, 84, 39, 3, 255, 82, 33, 2, 255, 85, 33, 4, 255, 78, 34, 2, 255, 80, 35, 2, 255, 85, 35, 3, 255, 79, 33, 1, 255, 75, 29, 3, 255, 73, 29, 2, 255, 76, 34, 3, 255, 77, 32, 0, 255, 76, 30, 1, 255, 70, 32, 2, 255, 76, 33, 2, 255, 77, 33, 4, 255, 74, 27, 3, 255, 76, 29, 6, 255, 69, 33, 5, 255, 71, 31, 0, 255, 78, 30, 1, 255, 77, 33, 5, 255, 75, 29, 1, 255, 79, 29, 1, 255, 93, 37, 7, 255, 89, 33, 6, 255, 77, 28, 2, 255, 81, 32, 0, 255, 80, 26, 0, 255, 74, 31, 2, 255, 85, 29, 1, 255, 85, 31, 0, 255, 81, 34, 4, 255, 89, 32, 4, 255, 89, 33, 2, 255, 85, 30, 0, 255, 84, 30, 1, 255, 84, 28, 0, 255, 86, 32, 2, 255, 85, 30, 2, 255, 82, 24, 3, 255, 77, 29, 3, 255, 80, 31, 6, 255, 80, 28, 4, 255, 78, 25, 1, 255, 76, 29, 4, 255, 73, 30, 6, 255, 69, 23, 1, 255, 72, 25, 5, 255, 72, 26, 4, 255, 69, 25, 2, 255, 68, 26, 5, 255, 64, 19, 2, 255, 69, 23, 3, 255, 71, 23, 1, 255, 73, 22, 1, 255, 81, 29, 6, 255, 75, 23, 2, 255, 74, 22, 2, 255, 78, 28, 3, 255, 69, 27, 3, 255, 65, 24, 1, 255, 78, 25, 7, 255, 79, 22, 3, 255, 75, 26, 3, 255, 71, 25, 3, 255, 69, 23, 3, 255, 71, 19, 0, 255, 78, 21, 2, 255, 77, 23, 2, 255, 72, 22, 0, 255, 77, 23, 3, 255, 76, 21, 0, 255, 80, 25, 4, 255, 80, 23, 3, 255, 77, 20, 1, 255, 72, 20, 2, 255, 65, 20, 2, 255, 67, 20, 1, 255, 67, 21, 4, 255, 66, 19, 0, 255, 57, 18, 0, 255, 66, 25, 7, 255, 66, 19, 1, 255, 59, 19, 1, 255, 68, 19, 5, 255, 64, 18, 3, 255, 63, 19, 2, 255, 59, 18, 4, 255, 49, 15, 5, 255, 51, 19, 5, 255, 50, 19, 3, 255, 58, 16, 4, 255, 54, 19, 5, 255, 56, 16, 4, 255, 57, 14, 2, 255, 55, 17, 2, 255, 55, 15, 2, 255, 57, 15, 4, 255, 59, 16, 4, 255, 61, 16, 4, 255, 57, 14, 3, 255, 51, 16, 3, 255, 42, 13, 0, 255, 48, 12, 2, 255, 49, 17, 4, 255, 41, 18, 3, 255, 41, 14, 3, 255, 42, 17, 8, 255, 43, 12, 2, 255, 37, 11, 3, 255, 35, 12, 4, 255, 35, 15, 5, 255, 30, 11, 2, 255, 31, 13, 1, 255, 34, 15, 2, 255, 36, 12, 2, 255, 31, 12, 5, 255, 21, 11, 3, 255, 23, 8, 3, 255, 26, 9, 2, 255, 18, 7, 0, 255, 15, 7, 1, 255, 17, 11, 0, 255, 27, 9, 2, 255, 31, 10, 4, 255, 39, 11, 1, 255, 79, 21, 1, 255, 96, 29, 4, 255, 104, 31, 4, 255, 105, 29, 1, 255, 100, 31, 3, 255, 98, 30, 3, 255, 102, 28, 4, 255, 101, 28, 4, 255, 95, 26, 1, 255, 99, 27, 4, 255, 87, 25, 5, 255, 71, 17, 1, 255, 11, 5, 3, 255, 11, 5, 2, 255, 11, 6, 1, 255, 14, 7, 1, 255, 16, 9, 3, 255, 17, 10, 3, 255, 16, 9, 3, 255, 18, 11, 5, 255, 15, 10, 2, 255, 19, 11, 3, 255, 18, 8, 1, 255, 21, 11, 2, 255, 21, 11, 2, 255, 21, 13, 2, 255, 19, 12, 1, 255, 17, 10, 1, 255, 22, 12, 5, 255, 23, 12, 6, 255, 21, 10, 3, 255, 14, 9, 1, 255, 18, 11, 2, 255, 19, 9, 1, 255, 20, 10, 2, 255, 23, 11, 2, 255, 26, 13, 5, 255, 25, 12, 2, 255, 21, 13, 1, 255, 17, 14, 2, 255, 18, 10, 1, 255, 29, 13, 4, 255, 29, 13, 5, 255, 20, 10, 2, 255, 28, 13, 7, 255, 34, 16, 4, 255, 36, 18, 1, 255, 30, 15, 0, 255, 33, 18, 2, 255, 34, 19, 5, 255, 40, 17, 5, 255, 40, 21, 6, 255, 37, 20, 4, 255, 35, 15, 0, 255, 47, 20, 7, 255, 44, 20, 3, 255, 44, 18, 2, 255, 50, 24, 7, 255, 49, 21, 3, 255, 50, 21, 3, 255, 46, 22, 2, 255, 43, 19, 0, 255, 45, 18, 2, 255, 45, 21, 3, 255, 41, 22, 1, 255, 42, 18, 0, 255, 47, 18, 2, 255, 43, 19, 3, 255, 37, 26, 4, 255, 44, 21, 1, 255, 43, 25, 3, 255, 39, 24, 1, 255, 44, 24, 3, 255, 45, 23, 2, 255, 45, 24, 3, 255, 48, 22, 1, 255, 50, 24, 1, 255, 48, 23, 4, 255, 38, 22, 4, 255, 51, 24, 3, 255, 44, 23, 6, 255, 45, 22, 5, 255, 50, 27, 3, 255, 56, 29, 3, 255, 52, 28, 1, 255, 49, 29, 5, 255, 49, 26, 1, 255, 52, 29, 1, 255, 48, 30, 1, 255, 50, 31, 2, 255, 50, 24, 7, 255, 57, 26, 5, 255, 52, 28, 3, 255, 58, 29, 1, 255, 70, 28, 1, 255, 70, 30, 4, 255, 58, 29, 1, 255, 55, 31, 1, 255, 60, 31, 3, 255, 61, 30, 2, 255, 57, 31, 1, 255, 58, 34, 3, 255, 64, 31, 5, 255, 63, 32, 5, 255, 59, 32, 3, 255, 69, 35, 7, 255, 62, 33, 5, 255, 58, 32, 3, 255, 64, 30, 3, 255, 69, 31, 2, 255, 57, 36, 0, 255, 65, 35, 0, 255, 64, 36, 4, 255, 54, 29, 2, 255, 60, 28, 4, 255, 54, 32, 3, 255, 66, 33, 6, 255, 63, 33, 3, 255, 59, 35, 4, 255, 65, 37, 8, 255, 58, 34, 4, 255, 67, 35, 7, 255, 73, 33, 5, 255, 62, 35, 6, 255, 62, 33, 3, 255, 70, 33, 1, 255, 65, 35, 4, 255, 60, 34, 7, 255, 70, 41, 3, 255, 63, 33, 4, 255, 55, 30, 3, 255, 65, 37, 4, 255, 80, 35, 5, 255, 83, 33, 3, 255, 72, 30, 4, 255, 69, 35, 4, 255, 63, 36, 2, 255, 63, 34, 8, 255, 64, 33, 4, 255, 62, 32, 5, 255, 57, 39, 10, 255, 64, 38, 3, 255, 72, 37, 1, 255, 66, 36, 3, 255, 61, 40, 10, 255, 65, 38, 7, 255, 67, 37, 8, 255, 64, 41, 12, 255, 60, 42, 9, 255, 63, 45, 15, 255, 64, 42, 8, 255, 76, 49, 11, 255, 111, 55, 12, 255, 114, 57, 4, 255, 85, 51, 6, 255, 66, 50, 8, 255, 72, 56, 4, 255, 64, 55, 7, 255, 66, 54, 19, 255, 68, 56, 13, 255, 82, 62, 7, 255, 76, 62, 11, 255, 71, 58, 24, 255, 69, 54, 22, 255, 73, 59, 27, 255, 78, 57, 30, 255, 77, 57, 27, 255, 68, 61, 28, 255, 72, 65, 29, 255, 100, 71, 26, 255, 123, 75, 14, 255, 119, 72, 37, 255, 115, 74, 18, 255, 111, 76, 29, 255, 108, 77, 38, 255, 111, 77, 36, 255, 115, 83, 40, 255, 109, 79, 35, 255, 91, 75, 38, 255, 74, 76, 41, 255, 77, 83, 45, 255, 75, 83, 44, 255, 84, 83, 48, 255, 84, 86, 42, 255, 88, 87, 48, 255, 86, 90, 45, 255, 83, 92, 51, 255, 92, 92, 47, 255, 110, 96, 51, 255, 113, 102, 59, 255, 114, 100, 61, 255, 115, 98, 58, 255, 111, 102, 61, 255, 92, 97, 64, 255, 97, 103, 57, 255, 110, 103, 60, 255, 106, 101, 58, 255, 98, 104, 58, 255, 94, 102, 59, 255, 93, 102, 58, 255, 91, 106, 61, 255, 91, 106, 57, 255, 108, 110, 56, 255, 118, 109, 52, 255, 129, 112, 49, 255, 130, 111, 51, 255, 126, 108, 63, 255, 120, 107, 54, 255, 122, 108, 53, 255, 122, 105, 52, 255, 128, 102, 57, 255, 126, 104, 47, 255, 127, 102, 30, 255, 126, 100, 38, 255, 122, 98, 44, 255, 123, 97, 44, 255, 116, 95, 35, 255, 123, 93, 29, 255, 124, 92, 42, 255, 120, 91, 36, 255, 118, 93, 22, 255, 118, 89, 32, 255, 119, 82, 40, 255, 113, 82, 29, 255, 110, 82, 25, 255, 111, 82, 23, 255, 107, 78, 23, 255, 105, 77, 23, 255, 99, 71, 23, 255, 100, 71, 25, 255, 102, 73, 19, 255, 107, 75, 5, 255, 114, 75, 14, 255, 110, 68, 17, 255, 111, 70, 13, 255, 106, 66, 10, 255, 108, 66, 20, 255, 104, 65, 9, 255, 103, 60, 20, 255, 106, 63, 15, 255, 105, 61, 11, 255, 108, 62, 8, 255, 112, 62, 3, 255, 113, 60, 6, 255, 108, 57, 0, 255, 109, 56, 8, 255, 110, 58, 9, 255, 107, 55, 6, 255, 113, 61, 6, 255, 114, 57, 6, 255, 120, 49, 10, 255, 122, 48, 9, 255, 118, 51, 3, 255, 116, 55, 4, 255, 115, 52, 5, 255, 111, 50, 6, 255, 110, 47, 7, 255, 116, 44, 6, 255, 112, 45, 4, 255, 113, 49, 5, 255, 119, 46, 4, 255, 115, 46, 6, 255, 104, 44, 6, 255, 102, 50, 4, 255, 101, 47, 4, 255, 106, 44, 6, 255, 107, 42, 6, 255, 106, 42, 5, 255, 104, 42, 6, 255, 101, 41, 1, 255, 110, 43, 0, 255, 122, 42, 2, 255, 116, 36, 2, 255, 106, 37, 6, 255, 91, 36, 4, 255, 85, 35, 4, 255, 81, 32, 5, 255, 74, 29, 1, 255, 84, 37, 5, 255, 85, 34, 3, 255, 85, 34, 2, 255, 89, 32, 5, 255, 88, 29, 6, 255, 79, 34, 8, 255, 75, 32, 5, 255, 85, 31, 4, 255, 82, 31, 2, 255, 75, 28, 3, 255, 77, 31, 4, 255, 76, 30, 1, 255, 75, 31, 1, 255, 77, 34, 4, 255, 77, 34, 7, 255, 78, 29, 4, 255, 75, 31, 2, 255, 78, 34, 5, 255, 81, 31, 2, 255, 87, 31, 1, 255, 87, 32, 5, 255, 80, 29, 5, 255, 72, 31, 4, 255, 71, 31, 2, 255, 77, 29, 5, 255, 73, 28, 5, 255, 78, 25, 5, 255, 79, 27, 4, 255, 84, 28, 2, 255, 85, 31, 3, 255, 82, 31, 1, 255, 85, 30, 1, 255, 88, 28, 0, 255, 87, 29, 0, 255, 82, 29, 0, 255, 79, 24, 1, 255, 77, 26, 2, 255, 76, 27, 2, 255, 79, 28, 1, 255, 81, 28, 3, 255, 75, 26, 3, 255, 72, 27, 2, 255, 71, 25, 2, 255, 71, 23, 4, 255, 74, 27, 6, 255, 71, 25, 1, 255, 69, 21, 2, 255, 70, 20, 2, 255, 71, 23, 0, 255, 69, 24, 3, 255, 69, 24, 3, 255, 73, 26, 5, 255, 76, 27, 3, 255, 74, 24, 0, 255, 76, 27, 2, 255, 80, 31, 6, 255, 74, 21, 2, 255, 77, 25, 6, 255, 72, 25, 4, 255, 72, 25, 2, 255, 75, 27, 4, 255, 65, 25, 1, 255, 64, 24, 1, 255, 61, 23, 1, 255, 67, 22, 0, 255, 76, 29, 3, 255, 81, 25, 1, 255, 74, 20, 3, 255, 80, 24, 4, 255, 83, 25, 3, 255, 84, 24, 5, 255, 77, 19, 0, 255, 70, 22, 1, 255, 71, 21, 2, 255, 73, 24, 8, 255, 77, 25, 5, 255, 71, 24, 5, 255, 67, 22, 2, 255, 68, 20, 1, 255, 66, 24, 4, 255, 63, 17, 2, 255, 63, 15, 1, 255, 65, 18, 1, 255, 59, 18, 5, 255, 55, 16, 8, 255, 60, 19, 6, 255, 58, 22, 2, 255, 62, 17, 3, 255, 52, 16, 1, 255, 61, 14, 1, 255, 55, 13, 0, 255, 50, 16, 2, 255, 53, 14, 3, 255, 54, 16, 5, 255, 48, 15, 2, 255, 46, 16, 3, 255, 45, 14, 3, 255, 45, 15, 5, 255, 39, 15, 4, 255, 48, 19, 5, 255, 65, 17, 4, 255, 46, 15, 0, 255, 51, 13, 2, 255, 43, 11, 4, 255, 31, 13, 1, 255, 25, 12, 1, 255, 28, 12, 0, 255, 33, 13, 2, 255, 37, 13, 4, 255, 38, 12, 4, 255, 39, 12, 3, 255, 35, 11, 0, 255, 31, 13, 2, 255, 27, 11, 3, 255, 26, 9, 2, 255, 21, 7, 2, 255, 21, 8, 2, 255, 30, 11, 8, 255, 17, 10, 5, 255, 19, 9, 1, 255, 19, 4, 2, 255, 44, 13, 6, 255, 89, 26, 6, 255, 109, 28, 4, 255, 105, 26, 2, 255, 104, 31, 1, 255, 110, 33, 5, 255, 108, 31, 3, 255, 106, 28, 1, 255, 107, 29, 1, 255, 105, 29, 1, 255, 105, 27, 1, 255, 94, 25, 1, 255, 84, 21, 1, 255, 19, 7, 6, 255, 16, 5, 2, 255, 13, 5, 0, 255, 16, 9, 2, 255, 15, 8, 3, 255, 12, 7, 1, 255, 13, 6, 0, 255, 18, 11, 5, 255, 14, 9, 3, 255, 16, 8, 1, 255, 22, 10, 5, 255, 23, 10, 4, 255, 22, 10, 3, 255, 25, 9, 3, 255, 20, 9, 2, 255, 19, 10, 1, 255, 19, 10, 1, 255, 24, 15, 4, 255, 23, 16, 2, 255, 20, 10, 1, 255, 22, 12, 3, 255, 21, 11, 4, 255, 20, 12, 5, 255, 18, 9, 1, 255, 23, 12, 4, 255, 23, 12, 3, 255, 20, 11, 1, 255, 23, 15, 6, 255, 21, 12, 3, 255, 24, 11, 1, 255, 28, 15, 3, 255, 28, 14, 4, 255, 28, 11, 1, 255, 31, 16, 1, 255, 29, 17, 3, 255, 23, 14, 1, 255, 30, 18, 4, 255, 35, 17, 1, 255, 46, 19, 5, 255, 32, 15, 1, 255, 35, 17, 2, 255, 39, 19, 5, 255, 38, 19, 3, 255, 40, 23, 4, 255, 52, 17, 3, 255, 54, 19, 4, 255, 45, 19, 2, 255, 46, 21, 2, 255, 50, 23, 6, 255, 47, 18, 4, 255, 39, 16, 2, 255, 44, 19, 3, 255, 42, 24, 3, 255, 42, 22, 1, 255, 45, 22, 3, 255, 47, 22, 4, 255, 42, 22, 1, 255, 47, 21, 3, 255, 43, 23, 6, 255, 38, 23, 3, 255, 43, 22, 3, 255, 43, 21, 2, 255, 45, 24, 3, 255, 50, 23, 4, 255, 40, 22, 3, 255, 42, 25, 2, 255, 39, 22, 6, 255, 47, 24, 6, 255, 49, 28, 3, 255, 45, 24, 3, 255, 47, 23, 4, 255, 52, 28, 5, 255, 51, 30, 3, 255, 50, 27, 2, 255, 56, 26, 3, 255, 58, 29, 7, 255, 52, 26, 2, 255, 53, 31, 5, 255, 49, 25, 5, 255, 64, 21, 3, 255, 56, 26, 1, 255, 47, 29, 3, 255, 54, 26, 5, 255, 52, 27, 1, 255, 57, 31, 4, 255, 58, 32, 3, 255, 60, 35, 4, 255, 61, 30, 2, 255, 62, 29, 2, 255, 58, 32, 1, 255, 64, 31, 1, 255, 72, 32, 5, 255, 64, 31, 3, 255, 62, 33, 2, 255, 64, 35, 3, 255, 63, 35, 3, 255, 68, 33, 2, 255, 67, 36, 3, 255, 59, 36, 4, 255, 62, 32, 3, 255, 67, 34, 5, 255, 58, 36, 7, 255, 58, 35, 4, 255, 63, 31, 1, 255, 74, 33, 4, 255, 68, 34, 5, 255, 54, 32, 1, 255, 54, 30, 2, 255, 66, 30, 8, 255, 67, 33, 6, 255, 62, 33, 1, 255, 67, 29, 5, 255, 64, 32, 4, 255, 63, 35, 0, 255, 68, 39, 2, 255, 68, 38, 8, 255, 70, 33, 4, 255, 64, 32, 6, 255, 64, 31, 6, 255, 96, 43, 7, 255, 106, 40, 2, 255, 90, 35, 6, 255, 65, 27, 3, 255, 67, 32, 1, 255, 74, 36, 6, 255, 67, 31, 7, 255, 66, 35, 6, 255, 64, 34, 4, 255, 58, 34, 10, 255, 58, 37, 6, 255, 64, 35, 0, 255, 70, 38, 6, 255, 63, 38, 5, 255, 65, 41, 11, 255, 72, 38, 4, 255, 60, 41, 3, 255, 64, 45, 11, 255, 68, 43, 14, 255, 68, 45, 7, 255, 62, 45, 8, 255, 69, 45, 18, 255, 71, 49, 18, 255, 66, 50, 9, 255, 73, 50, 14, 255, 71, 52, 19, 255, 65, 50, 22, 255, 68, 49, 22, 255, 74, 55, 21, 255, 77, 56, 10, 255, 74, 59, 9, 255, 65, 61, 21, 255, 66, 57, 31, 255, 69, 60, 22, 255, 70, 65, 15, 255, 70, 62, 27, 255, 89, 69, 12, 255, 83, 68, 25, 255, 111, 76, 29, 255, 117, 77, 32, 255, 117, 77, 31, 255, 111, 77, 33, 255, 109, 79, 21, 255, 105, 75, 30, 255, 93, 75, 36, 255, 86, 76, 38, 255, 79, 77, 41, 255, 80, 78, 39, 255, 82, 79, 36, 255, 82, 83, 37, 255, 82, 83, 40, 255, 85, 83, 50, 255, 87, 85, 59, 255, 79, 86, 57, 255, 80, 89, 56, 255, 87, 92, 60, 255, 91, 93, 57, 255, 87, 96, 51, 255, 96, 101, 45, 255, 91, 96, 57, 255, 86, 93, 64, 255, 94, 99, 68, 255, 91, 100, 65, 255, 89, 103, 61, 255, 89, 105, 58, 255, 87, 101, 66, 255, 91, 101, 69, 255, 94, 106, 63, 255, 93, 109, 64, 255, 92, 105, 62, 255, 101, 104, 58, 255, 121, 112, 62, 255, 131, 116, 51, 255, 128, 114, 45, 255, 128, 108, 60, 255, 129, 111, 54, 255, 125, 110, 45, 255, 124, 109, 45, 255, 126, 105, 56, 255, 128, 103, 57, 255, 131, 106, 38, 255, 127, 105, 21, 255, 127, 103, 44, 255, 125, 96, 52, 255, 122, 98, 42, 255, 119, 96, 30, 255, 124, 94, 38, 255, 123, 90, 38, 255, 123, 88, 32, 255, 122, 91, 22, 255, 123, 91, 30, 255, 120, 83, 36, 255, 120, 83, 27, 255, 116, 81, 30, 255, 107, 77, 24, 255, 104, 75, 19, 255, 106, 78, 20, 255, 105, 76, 26, 255, 99, 77, 14, 255, 97, 76, 15, 255, 110, 75, 14, 255, 117, 67, 13, 255, 120, 66, 11, 255, 120, 68, 21, 255, 112, 67, 15, 255, 107, 61, 16, 255, 107, 63, 15, 255, 108, 61, 18, 255, 110, 60, 14, 255, 112, 60, 14, 255, 115, 63, 4, 255, 111, 59, 7, 255, 112, 59, 6, 255, 116, 61, 1, 255, 117, 59, 4, 255, 118, 56, 14, 255, 113, 49, 8, 255, 114, 51, 6, 255, 114, 54, 2, 255, 113, 53, 9, 255, 111, 53, 10, 255, 113, 51, 9, 255, 114, 51, 6, 255, 111, 51, 7, 255, 106, 48, 1, 255, 107, 48, 3, 255, 109, 51, 7, 255, 110, 51, 5, 255, 111, 47, 3, 255, 109, 46, 4, 255, 105, 44, 7, 255, 100, 40, 5, 255, 106, 43, 3, 255, 109, 45, 3, 255, 110, 45, 6, 255, 110, 43, 5, 255, 111, 41, 3, 255, 111, 37, 6, 255, 104, 40, 4, 255, 102, 43, 3, 255, 108, 43, 3, 255, 109, 38, 2, 255, 111, 39, 4, 255, 104, 37, 4, 255, 87, 37, 3, 255, 76, 34, 2, 255, 81, 33, 3, 255, 86, 36, 4, 255, 85, 35, 1, 255, 87, 36, 3, 255, 85, 35, 3, 255, 89, 32, 2, 255, 87, 35, 2, 255, 80, 33, 1, 255, 88, 36, 3, 255, 91, 34, 3, 255, 89, 34, 2, 255, 84, 33, 2, 255, 80, 30, 5, 255, 74, 30, 5, 255, 82, 30, 6, 255, 77, 33, 2, 255, 75, 32, 3, 255, 74, 26, 4, 255, 75, 29, 8, 255, 73, 25, 3, 255, 76, 24, 1, 255, 75, 25, 2, 255, 73, 28, 4, 255, 75, 30, 3, 255, 63, 26, 2, 255, 69, 28, 8, 255, 71, 25, 5, 255, 74, 23, 2, 255, 75, 29, 5, 255, 71, 29, 3, 255, 81, 28, 2, 255, 87, 29, 5, 255, 83, 26, 0, 255, 84, 26, 1, 255, 84, 26, 3, 255, 83, 25, 2, 255, 81, 28, 2, 255, 79, 25, 4, 255, 79, 26, 3, 255, 80, 28, 1, 255, 81, 30, 4, 255, 79, 27, 5, 255, 81, 29, 5, 255, 74, 22, 2, 255, 73, 22, 7, 255, 71, 24, 4, 255, 71, 25, 0, 255, 73, 25, 3, 255, 76, 25, 5, 255, 74, 24, 2, 255, 74, 26, 2, 255, 79, 29, 4, 255, 78, 26, 2, 255, 78, 27, 3, 255, 72, 26, 1, 255, 75, 27, 1, 255, 85, 29, 6, 255, 84, 24, 4, 255, 76, 22, 2, 255, 68, 24, 3, 255, 66, 23, 3, 255, 70, 21, 1, 255, 74, 23, 2, 255, 81, 24, 4, 255, 77, 25, 2, 255, 79, 21, 2, 255, 73, 23, 3, 255, 68, 19, 1, 255, 62, 21, 4, 255, 70, 24, 3, 255, 73, 21, 1, 255, 80, 22, 4, 255, 77, 21, 2, 255, 74, 23, 3, 255, 79, 21, 2, 255, 76, 20, 3, 255, 82, 21, 2, 255, 78, 25, 5, 255, 67, 22, 2, 255, 65, 21, 1, 255, 60, 19, 3, 255, 58, 17, 1, 255, 60, 22, 3, 255, 68, 23, 3, 255, 63, 20, 3, 255, 70, 18, 6, 255, 70, 21, 4, 255, 71, 22, 3, 255, 64, 21, 3, 255, 55, 16, 0, 255, 62, 17, 2, 255, 57, 16, 1, 255, 55, 15, 4, 255, 55, 16, 7, 255, 49, 16, 6, 255, 46, 13, 0, 255, 51, 15, 3, 255, 53, 14, 2, 255, 51, 13, 4, 255, 50, 14, 3, 255, 53, 17, 6, 255, 65, 15, 5, 255, 71, 14, 1, 255, 41, 16, 5, 255, 41, 14, 3, 255, 45, 14, 3, 255, 39, 11, 4, 255, 40, 10, 1, 255, 39, 13, 1, 255, 40, 12, 5, 255, 41, 11, 6, 255, 40, 11, 0, 255, 45, 16, 4, 255, 36, 14, 2, 255, 26, 12, 2, 255, 30, 12, 6, 255, 27, 9, 3, 255, 26, 10, 2, 255, 37, 13, 5, 255, 26, 10, 6, 255, 17, 10, 0, 255, 21, 11, 5, 255, 38, 11, 3, 255, 80, 26, 3, 255, 103, 28, 3, 255, 110, 28, 4, 255, 106, 30, 0, 255, 107, 30, 0, 255, 110, 33, 2, 255, 106, 32, 1, 255, 108, 30, 0, 255, 112, 29, 4, 255, 103, 27, 3, 255, 98, 25, 0, 255, 99, 27, 2, 255, 13, 5, 3, 255, 13, 5, 1, 255, 16, 8, 2, 255, 19, 10, 3, 255, 16, 8, 1, 255, 15, 8, 3, 255, 16, 7, 3, 255, 18, 11, 5, 255, 17, 10, 4, 255, 17, 7, 1, 255, 21, 9, 3, 255, 23, 10, 3, 255, 24, 10, 4, 255, 22, 8, 4, 255, 19, 10, 5, 255, 20, 11, 3, 255, 22, 11, 2, 255, 20, 10, 0, 255, 21, 14, 3, 255, 26, 16, 6, 255, 23, 11, 3, 255, 24, 13, 5, 255, 25, 15, 7, 255, 20, 10, 3, 255, 20, 11, 2, 255, 20, 13, 2, 255, 19, 13, 3, 255, 23, 10, 5, 255, 26, 14, 6, 255, 21, 14, 3, 255, 25, 13, 2, 255, 35, 12, 5, 255, 31, 12, 5, 255, 30, 15, 5, 255, 30, 17, 7, 255, 28, 15, 3, 255, 29, 13, 3, 255, 33, 14, 3, 255, 40, 19, 5, 255, 38, 17, 2, 255, 45, 20, 8, 255, 39, 19, 4, 255, 39, 17, 1, 255, 49, 21, 7, 255, 44, 18, 6, 255, 44, 17, 4, 255, 44, 21, 3, 255, 39, 25, 3, 255, 42, 20, 3, 255, 46, 22, 4, 255, 39, 20, 4, 255, 38, 17, 2, 255, 40, 18, 1, 255, 46, 23, 4, 255, 40, 21, 0, 255, 40, 24, 2, 255, 42, 26, 5, 255, 39, 20, 4, 255, 35, 18, 3, 255, 40, 22, 2, 255, 45, 22, 4, 255, 44, 21, 2, 255, 44, 24, 2, 255, 49, 26, 7, 255, 44, 22, 5, 255, 38, 19, 4, 255, 43, 20, 5, 255, 48, 22, 2, 255, 46, 22, 2, 255, 43, 26, 2, 255, 43, 27, 2, 255, 43, 28, 5, 255, 44, 29, 4, 255, 46, 27, 0, 255, 45, 29, 3, 255, 52, 28, 5, 255, 58, 28, 4, 255, 61, 29, 7, 255, 53, 27, 2, 255, 59, 27, 4, 255, 55, 29, 4, 255, 49, 24, 4, 255, 48, 30, 4, 255, 50, 31, 2, 255, 55, 27, 1, 255, 55, 30, 1, 255, 57, 33, 5, 255, 60, 29, 5, 255, 63, 27, 3, 255, 66, 29, 6, 255, 63, 31, 5, 255, 62, 31, 5, 255, 63, 31, 5, 255, 60, 31, 3, 255, 59, 30, 2, 255, 55, 33, 3, 255, 61, 34, 2, 255, 57, 35, 3, 255, 60, 34, 6, 255, 62, 29, 4, 255, 65, 29, 5, 255, 69, 29, 5, 255, 59, 31, 1, 255, 69, 34, 6, 255, 59, 36, 4, 255, 60, 32, 3, 255, 66, 34, 5, 255, 64, 34, 3, 255, 67, 29, 3, 255, 58, 29, 4, 255, 58, 34, 4, 255, 68, 34, 4, 255, 66, 34, 3, 255, 61, 33, 5, 255, 62, 32, 7, 255, 68, 36, 4, 255, 58, 32, 1, 255, 59, 35, 2, 255, 62, 33, 3, 255, 75, 32, 0, 255, 78, 34, 2, 255, 65, 32, 1, 255, 65, 33, 2, 255, 65, 31, 4, 255, 65, 33, 2, 255, 65, 33, 2, 255, 66, 33, 2, 255, 62, 34, 6, 255, 66, 34, 4, 255, 60, 39, 7, 255, 60, 35, 7, 255, 65, 34, 4, 255, 68, 37, 10, 255, 60, 39, 5, 255, 68, 38, 3, 255, 69, 41, 10, 255, 69, 41, 8, 255, 70, 48, 9, 255, 65, 48, 8, 255, 69, 44, 4, 255, 66, 49, 6, 255, 62, 51, 9, 255, 71, 51, 10, 255, 77, 48, 20, 255, 73, 55, 14, 255, 73, 50, 21, 255, 74, 55, 11, 255, 72, 56, 14, 255, 71, 54, 23, 255, 69, 54, 25, 255, 69, 62, 24, 255, 68, 64, 15, 255, 70, 56, 25, 255, 68, 59, 24, 255, 72, 66, 18, 255, 78, 70, 16, 255, 80, 66, 24, 255, 94, 72, 19, 255, 94, 71, 30, 255, 94, 73, 27, 255, 90, 73, 36, 255, 79, 72, 30, 255, 74, 77, 25, 255, 78, 79, 27, 255, 76, 75, 40, 255, 75, 77, 41, 255, 80, 81, 44, 255, 83, 81, 48, 255, 82, 81, 41, 255, 83, 82, 43, 255, 79, 87, 44, 255, 80, 84, 51, 255, 90, 87, 56, 255, 88, 90, 55, 255, 78, 94, 47, 255, 88, 95, 54, 255, 110, 107, 66, 255, 112, 105, 58, 255, 96, 99, 61, 255, 88, 96, 74, 255, 89, 98, 66, 255, 91, 100, 62, 255, 92, 102, 71, 255, 101, 111, 71, 255, 100, 105, 62, 255, 97, 104, 60, 255, 92, 104, 63, 255, 94, 104, 67, 255, 95, 106, 55, 255, 105, 111, 67, 255, 111, 110, 62, 255, 116, 109, 58, 255, 123, 108, 63, 255, 122, 106, 70, 255, 124, 108, 60, 255, 127, 109, 53, 255, 128, 110, 47, 255, 125, 106, 48, 255, 124, 103, 45, 255, 127, 102, 43, 255, 128, 104, 46, 255, 129, 103, 40, 255, 124, 98, 43, 255, 120, 99, 43, 255, 121, 92, 30, 255, 121, 92, 34, 255, 119, 89, 35, 255, 116, 90, 27, 255, 117, 91, 23, 255, 121, 91, 21, 255, 123, 87, 20, 255, 128, 85, 29, 255, 124, 83, 31, 255, 108, 79, 21, 255, 102, 77, 20, 255, 103, 73, 19, 255, 99, 70, 24, 255, 96, 69, 24, 255, 109, 74, 21, 255, 115, 74, 19, 255, 115, 67, 16, 255, 117, 66, 15, 255, 119, 67, 11, 255, 115, 64, 7, 255, 105, 60, 8, 255, 109, 63, 12, 255, 115, 66, 13, 255, 113, 61, 12, 255, 114, 62, 9, 255, 115, 63, 5, 255, 113, 59, 15, 255, 110, 56, 9, 255, 112, 57, 5, 255, 113, 55, 8, 255, 115, 53, 12, 255, 118, 52, 7, 255, 123, 51, 7, 255, 117, 55, 3, 255, 101, 57, 2, 255, 101, 52, 7, 255, 100, 45, 9, 255, 96, 40, 4, 255, 102, 47, 7, 255, 98, 46, 9, 255, 96, 45, 1, 255, 96, 49, 3, 255, 101, 48, 6, 255, 105, 46, 2, 255, 103, 45, 3, 255, 104, 44, 7, 255, 108, 48, 6, 255, 109, 46, 2, 255, 115, 47, 1, 255, 112, 47, 4, 255, 107, 44, 6, 255, 105, 39, 6, 255, 100, 42, 4, 255, 106, 43, 8, 255, 105, 42, 7, 255, 101, 41, 5, 255, 104, 43, 4, 255, 107, 40, 0, 255, 105, 44, 4, 255, 94, 39, 4, 255, 80, 35, 0, 255, 86, 41, 2, 255, 86, 36, 1, 255, 87, 36, 4, 255, 95, 36, 3, 255, 98, 37, 1, 255, 94, 39, 1, 255, 85, 34, 4, 255, 79, 32, 5, 255, 93, 40, 6, 255, 97, 35, 4, 255, 88, 33, 0, 255, 87, 33, 4, 255, 84, 29, 5, 255, 78, 28, 5, 255, 82, 30, 6, 255, 79, 31, 1, 255, 79, 28, 2, 255, 81, 30, 7, 255, 76, 30, 5, 255, 72, 27, 2, 255, 74, 27, 4, 255, 74, 28, 6, 255, 71, 26, 3, 255, 81, 25, 6, 255, 75, 26, 4, 255, 73, 26, 3, 255, 76, 24, 3, 255, 74, 26, 3, 255, 76, 30, 5, 255, 72, 26, 2, 255, 73, 27, 2, 255, 78, 29, 3, 255, 78, 25, 0, 255, 76, 29, 2, 255, 80, 27, 3, 255, 88, 24, 4, 255, 84, 28, 4, 255, 84, 24, 2, 255, 85, 27, 4, 255, 81, 29, 2, 255, 76, 26, 0, 255, 80, 24, 2, 255, 84, 29, 4, 255, 84, 25, 4, 255, 80, 25, 3, 255, 72, 25, 2, 255, 71, 26, 1, 255, 73, 24, 2, 255, 74, 23, 5, 255, 75, 24, 7, 255, 77, 24, 2, 255, 81, 26, 1, 255, 84, 26, 1, 255, 80, 24, 3, 255, 76, 23, 4, 255, 73, 25, 2, 255, 73, 25, 4, 255, 76, 25, 3, 255, 81, 25, 2, 255, 83, 25, 7, 255, 77, 23, 5, 255, 75, 24, 3, 255, 77, 24, 3, 255, 82, 23, 3, 255, 77, 23, 1, 255, 84, 24, 6, 255, 79, 21, 6, 255, 67, 17, 2, 255, 63, 23, 2, 255, 64, 20, 1, 255, 71, 24, 5, 255, 70, 17, 1, 255, 74, 19, 3, 255, 75, 21, 3, 255, 79, 22, 2, 255, 76, 23, 4, 255, 79, 25, 2, 255, 75, 21, 3, 255, 67, 22, 3, 255, 68, 25, 1, 255, 65, 18, 1, 255, 67, 20, 5, 255, 69, 20, 5, 255, 73, 18, 1, 255, 71, 17, 1, 255, 72, 20, 7, 255, 65, 19, 2, 255, 65, 21, 1, 255, 56, 20, 2, 255, 57, 14, 1, 255, 63, 18, 4, 255, 61, 18, 2, 255, 55, 18, 3, 255, 53, 17, 3, 255, 52, 15, 1, 255, 54, 17, 2, 255, 59, 15, 1, 255, 59, 17, 2, 255, 56, 19, 4, 255, 50, 15, 1, 255, 44, 14, 2, 255, 59, 15, 3, 255, 71, 18, 3, 255, 44, 15, 0, 255, 49, 14, 2, 255, 44, 13, 3, 255, 43, 14, 4, 255, 43, 14, 4, 255, 43, 15, 4, 255, 36, 10, 0, 255, 48, 13, 7, 255, 42, 11, 3, 255, 37, 11, 3, 255, 33, 11, 4, 255, 23, 10, 1, 255, 28, 10, 3, 255, 36, 8, 2, 255, 33, 10, 2, 255, 34, 13, 5, 255, 31, 9, 4, 255, 24, 10, 0, 255, 23, 11, 3, 255, 29, 9, 2, 255, 75, 20, 0, 255, 104, 28, 4, 255, 108, 29, 6, 255, 105, 28, 0, 255, 105, 30, 1, 255, 107, 34, 3, 255, 108, 32, 2, 255, 106, 30, 2, 255, 104, 30, 3, 255, 105, 28, 5, 255, 101, 26, 2, 255, 100, 27, 2, 255, 9, 6, 1, 255, 12, 7, 3, 255, 17, 8, 1, 255, 16, 8, 1, 255, 15, 8, 1, 255, 19, 8, 5, 255, 16, 8, 4, 255, 16, 10, 3, 255, 18, 10, 4, 255, 18, 8, 1, 255, 18, 8, 2, 255, 21, 10, 1, 255, 22, 10, 1, 255, 19, 9, 3, 255, 18, 9, 4, 255, 21, 11, 3, 255, 25, 13, 3, 255, 22, 10, 0, 255, 18, 9, 2, 255, 21, 13, 4, 255, 20, 10, 1, 255, 22, 11, 2, 255, 23, 12, 3, 255, 20, 10, 1, 255, 27, 14, 5, 255, 25, 14, 5, 255, 21, 10, 1, 255, 29, 11, 5, 255, 25, 9, 2, 255, 19, 13, 3, 255, 23, 15, 4, 255, 29, 12, 2, 255, 30, 13, 4, 255, 27, 12, 1, 255, 32, 17, 3, 255, 34, 17, 2, 255, 33, 15, 0, 255, 35, 19, 5, 255, 36, 19, 4, 255, 33, 18, 3, 255, 34, 19, 4, 255, 36, 21, 3, 255, 41, 21, 3, 255, 51, 17, 4, 255, 42, 17, 6, 255, 36, 19, 5, 255, 43, 22, 3, 255, 37, 19, 2, 255, 40, 18, 2, 255, 46, 25, 4, 255, 34, 17, 1, 255, 35, 17, 1, 255, 39, 22, 2, 255, 44, 24, 4, 255, 46, 24, 4, 255, 37, 20, 1, 255, 40, 24, 8, 255, 36, 20, 4, 255, 38, 21, 1, 255, 42, 24, 3, 255, 41, 22, 7, 255, 41, 22, 4, 255, 43, 24, 0, 255, 47, 24, 1, 255, 45, 23, 4, 255, 42, 23, 7, 255, 40, 22, 5, 255, 43, 28, 7, 255, 40, 23, 6, 255, 44, 23, 3, 255, 45, 26, 4, 255, 42, 27, 0, 255, 54, 25, 4, 255, 50, 27, 2, 255, 45, 28, 5, 255, 46, 26, 1, 255, 54, 29, 8, 255, 54, 24, 6, 255, 55, 29, 6, 255, 49, 31, 4, 255, 54, 31, 7, 255, 52, 25, 1, 255, 56, 34, 4, 255, 61, 29, 3, 255, 62, 26, 2, 255, 58, 31, 2, 255, 56, 29, 4, 255, 54, 29, 5, 255, 54, 32, 3, 255, 61, 31, 6, 255, 62, 30, 3, 255, 61, 33, 5, 255, 56, 29, 2, 255, 56, 30, 3, 255, 53, 31, 4, 255, 50, 29, 4, 255, 62, 31, 4, 255, 62, 31, 3, 255, 62, 32, 2, 255, 59, 29, 3, 255, 57, 29, 4, 255, 57, 32, 5, 255, 58, 32, 3, 255, 65, 30, 2, 255, 55, 30, 1, 255, 57, 32, 2, 255, 65, 33, 4, 255, 62, 35, 1, 255, 67, 32, 2, 255, 62, 31, 2, 255, 67, 33, 4, 255, 63, 33, 5, 255, 57, 29, 3, 255, 60, 30, 3, 255, 59, 29, 6, 255, 52, 29, 3, 255, 56, 31, 3, 255, 64, 34, 5, 255, 61, 35, 5, 255, 52, 28, 0, 255, 58, 30, 5, 255, 61, 30, 4, 255, 65, 31, 3, 255, 64, 33, 6, 255, 65, 34, 5, 255, 65, 33, 0, 255, 64, 32, 2, 255, 63, 32, 5, 255, 68, 37, 4, 255, 66, 35, 7, 255, 69, 38, 8, 255, 67, 34, 1, 255, 72, 38, 9, 255, 65, 38, 12, 255, 63, 39, 6, 255, 62, 37, 6, 255, 69, 44, 9, 255, 69, 47, 6, 255, 67, 50, 12, 255, 67, 42, 14, 255, 67, 44, 14, 255, 71, 47, 12, 255, 76, 47, 13, 255, 68, 46, 13, 255, 70, 55, 12, 255, 72, 55, 17, 255, 65, 52, 27, 255, 66, 61, 21, 255, 67, 59, 15, 255, 74, 61, 22, 255, 73, 60, 18, 255, 69, 56, 24, 255, 76, 62, 29, 255, 75, 63, 29, 255, 67, 63, 30, 255, 64, 61, 41, 255, 71, 68, 17, 255, 70, 64, 25, 255, 72, 68, 31, 255, 70, 64, 38, 255, 75, 66, 27, 255, 74, 70, 35, 255, 67, 75, 28, 255, 78, 74, 39, 255, 79, 75, 45, 255, 72, 76, 48, 255, 73, 79, 47, 255, 77, 82, 51, 255, 86, 84, 51, 255, 93, 88, 46, 255, 101, 92, 49, 255, 105, 96, 45, 255, 110, 99, 51, 255, 94, 90, 56, 255, 88, 95, 53, 255, 88, 93, 53, 255, 98, 97, 58, 255, 97, 100, 60, 255, 93, 100, 67, 255, 83, 99, 71, 255, 90, 103, 69, 255, 107, 106, 75, 255, 117, 108, 67, 255, 121, 112, 60, 255, 119, 111, 64, 255, 112, 106, 65, 255, 97, 105, 65, 255, 96, 110, 68, 255, 98, 108, 59, 255, 97, 107, 64, 255, 95, 106, 67, 255, 99, 106, 64, 255, 106, 108, 57, 255, 110, 109, 54, 255, 114, 109, 48, 255, 115, 107, 59, 255, 114, 108, 60, 255, 110, 106, 48, 255, 108, 102, 52, 255, 104, 98, 39, 255, 108, 102, 38, 255, 112, 97, 39, 255, 118, 95, 43, 255, 127, 99, 43, 255, 127, 95, 36, 255, 126, 93, 33, 255, 121, 93, 34, 255, 108, 87, 33, 255, 104, 87, 27, 255, 107, 86, 31, 255, 109, 80, 40, 255, 112, 76, 34, 255, 108, 80, 24, 255, 101, 81, 18, 255, 100, 75, 24, 255, 110, 75, 19, 255, 111, 77, 16, 255, 103, 71, 17, 255, 111, 73, 10, 255, 117, 69, 18, 255, 117, 66, 17, 255, 116, 66, 9, 255, 117, 65, 11, 255, 116, 64, 6, 255, 113, 66, 13, 255, 110, 63, 10, 255, 114, 62, 17, 255, 115, 63, 7, 255, 115, 60, 13, 255, 112, 53, 12, 255, 117, 58, 4, 255, 114, 59, 9, 255, 110, 60, 11, 255, 111, 58, 9, 255, 112, 56, 1, 255, 112, 54, 0, 255, 114, 53, 6, 255, 105, 52, 4, 255, 90, 52, 6, 255, 98, 47, 8, 255, 95, 44, 4, 255, 94, 46, 4, 255, 96, 42, 2, 255, 94, 43, 10, 255, 93, 45, 5, 255, 95, 46, 5, 255, 97, 45, 6, 255, 100, 46, 2, 255, 100, 46, 2, 255, 100, 41, 3, 255, 104, 45, 1, 255, 102, 45, 4, 255, 109, 45, 6, 255, 105, 42, 4, 255, 96, 41, 3, 255, 91, 38, 4, 255, 88, 41, 2, 255, 88, 39, 1, 255, 94, 37, 3, 255, 104, 37, 5, 255, 108, 38, 5, 255, 108, 40, 4, 255, 104, 39, 2, 255, 105, 41, 2, 255, 104, 40, 5, 255, 99, 40, 8, 255, 92, 34, 3, 255, 99, 35, 2, 255, 105, 37, 4, 255, 105, 36, 3, 255, 102, 40, 1, 255, 91, 34, 5, 255, 83, 30, 4, 255, 86, 34, 1, 255, 88, 35, 4, 255, 85, 31, 3, 255, 86, 30, 3, 255, 83, 28, 1, 255, 80, 29, 1, 255, 80, 32, 4, 255, 81, 31, 4, 255, 84, 29, 4, 255, 83, 31, 3, 255, 74, 29, 0, 255, 79, 34, 4, 255, 80, 32, 5, 255, 76, 27, 3, 255, 76, 26, 3, 255, 81, 28, 5, 255, 73, 27, 2, 255, 73, 24, 1, 255, 71, 22, 3, 255, 75, 30, 7, 255, 76, 30, 5, 255, 76, 28, 4, 255, 75, 27, 4, 255, 77, 29, 4, 255, 78, 31, 4, 255, 78, 27, 1, 255, 82, 27, 3, 255, 80, 28, 3, 255, 83, 27, 4, 255, 85, 25, 2, 255, 87, 28, 4, 255, 80, 27, 1, 255, 81, 29, 3, 255, 84, 26, 4, 255, 78, 25, 1, 255, 84, 28, 5, 255, 86, 28, 2, 255, 78, 26, 3, 255, 74, 26, 5, 255, 75, 26, 4, 255, 76, 22, 3, 255, 81, 23, 3, 255, 85, 27, 4, 255, 84, 25, 0, 255, 89, 27, 3, 255, 91, 27, 5, 255, 93, 26, 6, 255, 74, 21, 1, 255, 70, 23, 2, 255, 70, 25, 0, 255, 78, 29, 3, 255, 77, 23, 3, 255, 73, 25, 4, 255, 80, 25, 3, 255, 82, 25, 3, 255, 82, 28, 4, 255, 82, 25, 3, 255, 85, 26, 6, 255, 79, 24, 4, 255, 76, 24, 3, 255, 72, 26, 2, 255, 63, 17, 0, 255, 73, 26, 8, 255, 71, 22, 5, 255, 71, 16, 0, 255, 76, 19, 1, 255, 77, 24, 0, 255, 73, 24, 5, 255, 71, 23, 3, 255, 72, 21, 1, 255, 71, 24, 2, 255, 73, 27, 2, 255, 69, 18, 6, 255, 65, 16, 8, 255, 68, 20, 6, 255, 62, 18, 1, 255, 63, 20, 3, 255, 66, 22, 4, 255, 66, 19, 3, 255, 66, 22, 4, 255, 60, 18, 2, 255, 61, 18, 3, 255, 64, 14, 2, 255, 55, 17, 1, 255, 56, 19, 3, 255, 58, 18, 2, 255, 62, 16, 2, 255, 67, 17, 4, 255, 57, 13, 0, 255, 54, 15, 2, 255, 58, 20, 5, 255, 51, 15, 1, 255, 50, 15, 3, 255, 64, 18, 5, 255, 66, 18, 4, 255, 68, 16, 2, 255, 64, 15, 6, 255, 50, 13, 6, 255, 40, 13, 5, 255, 31, 12, 3, 255, 29, 12, 1, 255, 31, 14, 0, 255, 43, 15, 3, 255, 41, 15, 4, 255, 36, 8, 2, 255, 36, 12, 6, 255, 29, 11, 6, 255, 25, 7, 2, 255, 35, 9, 4, 255, 35, 12, 4, 255, 32, 11, 3, 255, 23, 8, 2, 255, 26, 9, 1, 255, 25, 10, 3, 255, 28, 11, 5, 255, 70, 19, 0, 255, 98, 28, 2, 255, 102, 29, 3, 255, 105, 29, 3, 255, 105, 28, 0, 255, 108, 30, 2, 255, 107, 31, 4, 255, 100, 27, 1, 255, 101, 29, 2, 255, 99, 27, 3, 255, 98, 26, 2, 255, 95, 24, 0, 255, 14, 8, 4, 255, 15, 7, 5, 255, 13, 4, 2, 255, 12, 4, 0, 255, 15, 8, 2, 255, 16, 8, 3, 255, 15, 7, 2, 255, 18, 11, 5, 255, 18, 10, 4, 255, 18, 9, 2, 255, 19, 10, 3, 255, 21, 10, 4, 255, 21, 10, 2, 255, 21, 8, 3, 255, 21, 9, 4, 255, 25, 13, 5, 255, 26, 12, 3, 255, 24, 10, 1, 255, 26, 15, 6, 255, 21, 12, 3, 255, 19, 10, 1, 255, 19, 11, 2, 255, 23, 16, 5, 255, 19, 11, 1, 255, 29, 15, 5, 255, 28, 13, 4, 255, 20, 12, 0, 255, 23, 14, 3, 255, 23, 14, 4, 255, 22, 14, 2, 255, 24, 14, 2, 255, 27, 16, 3, 255, 31, 19, 3, 255, 29, 17, 3, 255, 23, 10, 0, 255, 34, 18, 5, 255, 35, 16, 2, 255, 38, 21, 5, 255, 40, 22, 7, 255, 33, 18, 3, 255, 38, 21, 7, 255, 38, 18, 4, 255, 37, 19, 1, 255, 40, 18, 1, 255, 39, 17, 2, 255, 41, 15, 5, 255, 39, 21, 5, 255, 38, 18, 5, 255, 36, 21, 6, 255, 37, 21, 2, 255, 38, 16, 2, 255, 44, 22, 5, 255, 41, 23, 3, 255, 41, 22, 2, 255, 42, 20, 3, 255, 38, 20, 4, 255, 38, 19, 4, 255, 36, 18, 3, 255, 38, 23, 3, 255, 42, 24, 0, 255, 42, 24, 4, 255, 43, 25, 4, 255, 43, 26, 2, 255, 42, 22, 1, 255, 38, 23, 5, 255, 40, 23, 5, 255, 36, 19, 2, 255, 42, 24, 6, 255, 43, 26, 6, 255, 39, 24, 4, 255, 42, 23, 7, 255, 39, 24, 2, 255, 39, 25, 3, 255, 49, 27, 2, 255, 62, 26, 6, 255, 50, 26, 1, 255, 46, 27, 2, 255, 53, 27, 2, 255, 49, 27, 3, 255, 50, 27, 5, 255, 54, 28, 5, 255, 47, 26, 2, 255, 50, 28, 6, 255, 56, 31, 4, 255, 61, 31, 4, 255, 56, 31, 1, 255, 57, 28, 2, 255, 57, 29, 3, 255, 57, 33, 4, 255, 55, 31, 1, 255, 54, 30, 0, 255, 59, 30, 2, 255, 61, 31, 5, 255, 59, 31, 5, 255, 55, 29, 6, 255, 55, 29, 6, 255, 67, 26, 6, 255, 67, 27, 3, 255, 62, 25, 0, 255, 61, 28, 4, 255, 57, 28, 3, 255, 56, 29, 1, 255, 59, 31, 1, 255, 66, 32, 4, 255, 66, 34, 5, 255, 58, 34, 3, 255, 62, 30, 2, 255, 56, 32, 2, 255, 67, 31, 4, 255, 68, 30, 3, 255, 63, 32, 3, 255, 57, 31, 3, 255, 54, 29, 4, 255, 59, 29, 6, 255, 69, 32, 2, 255, 63, 35, 7, 255, 56, 28, 2, 255, 55, 30, 2, 255, 53, 28, 1, 255, 57, 36, 7, 255, 56, 32, 3, 255, 62, 30, 4, 255, 62, 33, 5, 255, 63, 33, 1, 255, 66, 33, 2, 255, 68, 32, 5, 255, 68, 33, 6, 255, 62, 32, 1, 255, 63, 35, 6, 255, 62, 32, 5, 255, 62, 38, 4, 255, 70, 36, 8, 255, 69, 34, 7, 255, 67, 37, 5, 255, 66, 38, 1, 255, 68, 39, 8, 255, 70, 41, 11, 255, 68, 43, 11, 255, 61, 45, 9, 255, 66, 47, 8, 255, 69, 48, 6, 255, 73, 43, 15, 255, 72, 46, 15, 255, 71, 58, 11, 255, 77, 53, 15, 255, 76, 56, 21, 255, 69, 56, 17, 255, 71, 55, 23, 255, 72, 57, 29, 255, 74, 57, 28, 255, 67, 61, 20, 255, 66, 57, 25, 255, 70, 65, 13, 255, 74, 64, 25, 255, 69, 62, 32, 255, 72, 65, 25, 255, 74, 71, 24, 255, 72, 69, 29, 255, 72, 71, 33, 255, 68, 73, 32, 255, 72, 70, 40, 255, 82, 72, 39, 255, 75, 75, 33, 255, 77, 78, 41, 255, 79, 77, 45, 255, 76, 78, 48, 255, 75, 83, 43, 255, 75, 80, 53, 255, 92, 87, 45, 255, 120, 98, 40, 255, 126, 92, 55, 255, 111, 91, 45, 255, 96, 92, 54, 255, 88, 90, 49, 255, 92, 92, 65, 255, 88, 95, 62, 255, 86, 97, 63, 255, 87, 98, 70, 255, 87, 103, 67, 255, 80, 105, 61, 255, 91, 106, 62, 255, 117, 110, 75, 255, 130, 113, 71, 255, 127, 111, 59, 255, 122, 113, 62, 255, 119, 115, 66, 255, 102, 112, 63, 255, 89, 112, 60, 255, 98, 111, 66, 255, 99, 109, 62, 255, 98, 107, 68, 255, 107, 110, 62, 255, 123, 112, 67, 255, 126, 108, 69, 255, 124, 109, 59, 255, 110, 108, 59, 255, 97, 105, 49, 255, 97, 103, 51, 255, 101, 100, 54, 255, 100, 99, 41, 255, 96, 100, 40, 255, 94, 98, 43, 255, 107, 93, 43, 255, 119, 94, 41, 255, 118, 97, 39, 255, 115, 90, 38, 255, 115, 92, 36, 255, 109, 94, 21, 255, 105, 88, 35, 255, 104, 82, 27, 255, 109, 78, 31, 255, 106, 79, 34, 255, 93, 78, 13, 255, 99, 80, 7, 255, 110, 75, 19, 255, 116, 70, 21, 255, 125, 74, 15, 255, 123, 77, 10, 255, 117, 77, 9, 255, 119, 69, 17, 255, 122, 68, 20, 255, 120, 67, 11, 255, 118, 63, 12, 255, 118, 63, 9, 255, 115, 64, 13, 255, 113, 60, 16, 255, 113, 59, 7, 255, 117, 65, 3, 255, 118, 61, 13, 255, 119, 58, 9, 255, 119, 59, 4, 255, 118, 60, 13, 255, 112, 58, 10, 255, 109, 54, 6, 255, 112, 54, 11, 255, 108, 55, 12, 255, 97, 49, 2, 255, 96, 51, 6, 255, 87, 51, 6, 255, 94, 48, 7, 255, 92, 47, 2, 255, 92, 48, 3, 255, 90, 42, 1, 255, 94, 44, 7, 255, 96, 46, 5, 255, 96, 44, 1, 255, 96, 43, 2, 255, 98, 45, 4, 255, 97, 46, 0, 255, 100, 45, 1, 255, 105, 42, 3, 255, 102, 42, 5, 255, 97, 43, 3, 255, 96, 42, 4, 255, 87, 35, 1, 255, 82, 37, 5, 255, 84, 34, 1, 255, 85, 36, 4, 255, 81, 34, 3, 255, 81, 33, 3, 255, 91, 34, 4, 255, 101, 36, 4, 255, 110, 37, 4, 255, 111, 38, 1, 255, 110, 36, 1, 255, 105, 33, 7, 255, 101, 36, 3, 255, 105, 39, 2, 255, 104, 38, 7, 255, 104, 39, 5, 255, 103, 39, 3, 255, 99, 34, 0, 255, 97, 34, 0, 255, 92, 34, 1, 255, 89, 33, 1, 255, 93, 33, 4, 255, 87, 30, 2, 255, 83, 31, 2, 255, 80, 33, 4, 255, 80, 34, 6, 255, 78, 32, 3, 255, 76, 30, 1, 255, 79, 33, 2, 255, 76, 33, 1, 255, 80, 32, 3, 255, 80, 29, 2, 255, 78, 26, 1, 255, 78, 30, 4, 255, 78, 30, 2, 255, 70, 27, 2, 255, 71, 26, 5, 255, 74, 26, 8, 255, 71, 24, 3, 255, 79, 26, 3, 255, 78, 28, 4, 255, 79, 28, 6, 255, 80, 29, 5, 255, 73, 27, 1, 255, 79, 28, 4, 255, 77, 27, 4, 255, 72, 26, 2, 255, 79, 26, 3, 255, 85, 31, 6, 255, 78, 21, 1, 255, 84, 26, 4, 255, 85, 29, 6, 255, 80, 23, 3, 255, 74, 22, 2, 255, 77, 25, 6, 255, 81, 22, 2, 255, 83, 22, 4, 255, 77, 26, 8, 255, 73, 26, 2, 255, 79, 22, 2, 255, 83, 24, 1, 255, 87, 29, 4, 255, 83, 28, 0, 255, 81, 27, 0, 255, 78, 26, 0, 255, 78, 27, 2, 255, 76, 22, 2, 255, 75, 25, 0, 255, 78, 28, 4, 255, 80, 24, 3, 255, 84, 25, 2, 255, 84, 29, 6, 255, 80, 22, 3, 255, 82, 23, 2, 255, 85, 27, 3, 255, 85, 27, 3, 255, 82, 25, 1, 255, 80, 26, 2, 255, 79, 28, 3, 255, 72, 23, 3, 255, 72, 25, 6, 255, 68, 21, 3, 255, 68, 19, 2, 255, 76, 24, 7, 255, 77, 23, 6, 255, 71, 23, 4, 255, 77, 24, 2, 255, 75, 20, 0, 255, 71, 24, 1, 255, 70, 23, 2, 255, 71, 22, 4, 255, 69, 20, 5, 255, 68, 19, 6, 255, 67, 21, 4, 255, 61, 18, 5, 255, 64, 22, 5, 255, 65, 23, 1, 255, 63, 18, 2, 255, 63, 20, 1, 255, 69, 19, 3, 255, 66, 18, 2, 255, 58, 19, 0, 255, 62, 20, 1, 255, 67, 18, 3, 255, 56, 18, 2, 255, 54, 15, 2, 255, 59, 14, 3, 255, 56, 18, 5, 255, 51, 16, 2, 255, 51, 14, 1, 255, 52, 15, 2, 255, 54, 13, 2, 255, 67, 19, 5, 255, 68, 18, 2, 255, 61, 16, 1, 255, 51, 15, 1, 255, 36, 13, 2, 255, 38, 15, 5, 255, 43, 11, 5, 255, 46, 12, 8, 255, 43, 10, 3, 255, 45, 11, 2, 255, 40, 16, 2, 255, 51, 18, 6, 255, 39, 11, 3, 255, 32, 11, 7, 255, 28, 8, 7, 255, 29, 10, 5, 255, 33, 8, 0, 255, 39, 15, 3, 255, 29, 13, 5, 255, 30, 13, 4, 255, 23, 10, 1, 255, 20, 9, 1, 255, 64, 22, 2, 255, 93, 28, 1, 255, 101, 26, 2, 255, 103, 26, 0, 255, 105, 30, 1, 255, 106, 29, 1, 255, 104, 27, 0, 255, 104, 27, 2, 255, 102, 27, 3, 255, 99, 28, 3, 255, 101, 27, 3, 255, 101, 26, 3, 255, 13, 7, 1, 255, 15, 6, 3, 255, 13, 5, 2, 255, 10, 5, 2, 255, 13, 8, 4, 255, 15, 8, 1, 255, 17, 10, 3, 255, 18, 11, 5, 255, 17, 10, 2, 255, 18, 11, 3, 255, 19, 10, 3, 255, 17, 9, 1, 255, 18, 9, 2, 255, 18, 9, 2, 255, 20, 10, 2, 255, 24, 14, 4, 255, 25, 13, 4, 255, 22, 10, 1, 255, 22, 11, 2, 255, 20, 13, 5, 255, 21, 11, 3, 255, 23, 11, 2, 255, 25, 14, 4, 255, 22, 13, 2, 255, 22, 13, 0, 255, 25, 11, 2, 255, 28, 11, 4, 255, 20, 14, 2, 255, 20, 17, 5, 255, 19, 13, 2, 255, 23, 12, 2, 255, 31, 18, 6, 255, 31, 17, 2, 255, 31, 17, 4, 255, 31, 17, 6, 255, 34, 15, 5, 255, 36, 15, 4, 255, 36, 16, 4, 255, 42, 17, 4, 255, 35, 17, 3, 255, 38, 19, 5, 255, 45, 18, 5, 255, 44, 22, 5, 255, 40, 18, 2, 255, 45, 19, 6, 255, 40, 18, 6, 255, 30, 16, 0, 255, 41, 17, 6, 255, 35, 21, 7, 255, 33, 22, 3, 255, 36, 18, 3, 255, 36, 16, 1, 255, 44, 20, 5, 255, 38, 24, 6, 255, 28, 20, 1, 255, 35, 18, 1, 255, 44, 20, 3, 255, 41, 22, 6, 255, 38, 22, 5, 255, 39, 21, 0, 255, 36, 19, 1, 255, 36, 21, 2, 255, 41, 24, 4, 255, 42, 23, 6, 255, 42, 24, 3, 255, 46, 27, 0, 255, 46, 23, 1, 255, 48, 25, 4, 255, 48, 27, 0, 255, 49, 28, 4, 255, 38, 22, 2, 255, 40, 25, 2, 255, 37, 33, 5, 255, 45, 28, 1, 255, 53, 24, 6, 255, 50, 23, 3, 255, 51, 24, 6, 255, 52, 25, 4, 255, 47, 24, 6, 255, 55, 20, 5, 255, 55, 28, 4, 255, 52, 26, 1, 255, 56, 28, 5, 255, 51, 29, 3, 255, 57, 31, 4, 255, 57, 31, 1, 255, 63, 31, 4, 255, 62, 29, 4, 255, 58, 33, 3, 255, 55, 30, 1, 255, 56, 31, 5, 255, 54, 28, 3, 255, 60, 30, 6, 255, 62, 28, 3, 255, 59, 30, 3, 255, 51, 32, 0, 255, 54, 30, 4, 255, 57, 32, 3, 255, 54, 30, 1, 255, 57, 31, 3, 255, 58, 32, 3, 255, 56, 32, 1, 255, 65, 34, 6, 255, 68, 32, 4, 255, 64, 34, 4, 255, 63, 33, 4, 255, 67, 31, 5, 255, 60, 31, 5, 255, 60, 29, 5, 255, 65, 31, 7, 255, 63, 32, 2, 255, 64, 30, 1, 255, 65, 29, 6, 255, 62, 31, 7, 255, 59, 35, 2, 255, 61, 32, 4, 255, 63, 30, 6, 255, 53, 32, 5, 255, 55, 30, 4, 255, 61, 30, 4, 255, 56, 33, 2, 255, 55, 31, 0, 255, 60, 32, 4, 255, 64, 35, 4, 255, 64, 31, 2, 255, 65, 29, 0, 255, 68, 33, 5, 255, 64, 33, 3, 255, 59, 34, 5, 255, 58, 33, 6, 255, 60, 38, 2, 255, 65, 38, 8, 255, 65, 38, 5, 255, 62, 40, 3, 255, 62, 39, 7, 255, 65, 41, 14, 255, 61, 44, 13, 255, 65, 45, 10, 255, 66, 43, 9, 255, 66, 46, 9, 255, 66, 48, 9, 255, 71, 50, 11, 255, 75, 60, 5, 255, 72, 58, 9, 255, 68, 50, 7, 255, 74, 51, 24, 255, 76, 56, 19, 255, 65, 55, 13, 255, 68, 57, 13, 255, 72, 56, 24, 255, 71, 59, 25, 255, 68, 55, 34, 255, 68, 59, 35, 255, 68, 66, 11, 255, 71, 67, 22, 255, 77, 66, 26, 255, 76, 68, 34, 255, 73, 72, 31, 255, 67, 65, 40, 255, 70, 72, 34, 255, 69, 69, 35, 255, 79, 73, 41, 255, 83, 78, 37, 255, 75, 75, 40, 255, 70, 74, 45, 255, 77, 80, 52, 255, 81, 80, 47, 255, 82, 85, 50, 255, 80, 87, 54, 255, 88, 88, 47, 255, 97, 93, 44, 255, 88, 89, 58, 255, 80, 92, 50, 255, 83, 97, 53, 255, 83, 93, 62, 255, 80, 97, 62, 255, 84, 100, 65, 255, 91, 98, 72, 255, 89, 102, 69, 255, 89, 105, 64, 255, 90, 107, 62, 255, 98, 107, 68, 255, 114, 110, 66, 255, 126, 116, 61, 255, 123, 116, 64, 255, 116, 116, 63, 255, 111, 115, 63, 255, 100, 111, 57, 255, 99, 112, 64, 255, 99, 111, 64, 255, 109, 112, 67, 255, 120, 113, 63, 255, 133, 113, 59, 255, 133, 108, 51, 255, 132, 108, 53, 255, 123, 107, 57, 255, 106, 102, 53, 255, 95, 99, 56, 255, 98, 101, 50, 255, 103, 100, 50, 255, 97, 98, 42, 255, 95, 96, 41, 255, 95, 91, 40, 255, 100, 90, 40, 255, 102, 90, 35, 255, 107, 92, 21, 255, 110, 88, 22, 255, 115, 88, 24, 255, 118, 88, 29, 255, 118, 84, 26, 255, 119, 84, 22, 255, 116, 80, 22, 255, 105, 73, 28, 255, 111, 77, 29, 255, 119, 74, 18, 255, 117, 72, 18, 255, 116, 69, 22, 255, 116, 67, 19, 255, 121, 73, 13, 255, 125, 74, 8, 255, 122, 67, 15, 255, 119, 65, 17, 255, 117, 66, 19, 255, 112, 64, 12, 255, 116, 62, 8, 255, 118, 60, 13, 255, 115, 61, 9, 255, 107, 57, 11, 255, 108, 60, 8, 255, 110, 59, 6, 255, 112, 61, 4, 255, 112, 56, 9, 255, 111, 47, 10, 255, 114, 52, 8, 255, 107, 50, 5, 255, 105, 51, 9, 255, 103, 47, 5, 255, 92, 46, 5, 255, 90, 52, 3, 255, 97, 50, 6, 255, 88, 45, 5, 255, 85, 43, 7, 255, 86, 46, 7, 255, 87, 46, 4, 255, 91, 43, 4, 255, 92, 40, 3, 255, 96, 43, 5, 255, 96, 43, 6, 255, 98, 45, 2, 255, 106, 49, 4, 255, 108, 42, 4, 255, 105, 42, 3, 255, 94, 39, 0, 255, 98, 42, 3, 255, 94, 38, 3, 255, 84, 35, 3, 255, 89, 36, 4, 255, 85, 32, 3, 255, 80, 32, 4, 255, 78, 33, 5, 255, 78, 30, 1, 255, 87, 36, 1, 255, 90, 35, 3, 255, 94, 31, 2, 255, 101, 40, 5, 255, 106, 42, 6, 255, 103, 38, 1, 255, 94, 36, 1, 255, 100, 37, 5, 255, 95, 36, 1, 255, 92, 34, 2, 255, 97, 35, 1, 255, 98, 35, 3, 255, 97, 33, 6, 255, 108, 38, 5, 255, 106, 36, 5, 255, 89, 28, 0, 255, 83, 32, 2, 255, 84, 34, 4, 255, 80, 30, 3, 255, 76, 31, 3, 255, 76, 31, 3, 255, 76, 29, 2, 255, 73, 28, 1, 255, 83, 32, 6, 255, 85, 30, 4, 255, 77, 26, 0, 255, 77, 30, 3, 255, 76, 24, 4, 255, 70, 25, 0, 255, 70, 26, 0, 255, 69, 24, 2, 255, 65, 22, 2, 255, 76, 30, 6, 255, 78, 27, 4, 255, 75, 24, 0, 255, 74, 28, 2, 255, 71, 26, 0, 255, 74, 28, 4, 255, 74, 25, 2, 255, 79, 25, 3, 255, 81, 27, 4, 255, 80, 27, 3, 255, 79, 24, 2, 255, 80, 23, 3, 255, 85, 28, 7, 255, 76, 26, 3, 255, 77, 26, 5, 255, 77, 23, 6, 255, 80, 24, 3, 255, 78, 22, 4, 255, 76, 23, 5, 255, 79, 26, 1, 255, 78, 25, 2, 255, 75, 25, 3, 255, 76, 25, 3, 255, 80, 28, 5, 255, 79, 27, 5, 255, 72, 21, 1, 255, 71, 22, 1, 255, 70, 22, 2, 255, 73, 27, 1, 255, 74, 25, 3, 255, 79, 23, 5, 255, 82, 25, 0, 255, 82, 24, 3, 255, 80, 26, 5, 255, 82, 30, 5, 255, 84, 27, 3, 255, 85, 26, 2, 255, 87, 26, 2, 255, 88, 26, 3, 255, 85, 23, 2, 255, 74, 23, 3, 255, 70, 23, 3, 255, 68, 22, 2, 255, 71, 22, 5, 255, 74, 22, 5, 255, 71, 20, 3, 255, 72, 20, 4, 255, 77, 26, 2, 255, 72, 24, 3, 255, 75, 28, 5, 255, 78, 23, 5, 255, 69, 19, 5, 255, 62, 23, 0, 255, 69, 25, 1, 255, 67, 21, 0, 255, 67, 17, 2, 255, 70, 18, 4, 255, 68, 20, 4, 255, 58, 16, 1, 255, 60, 17, 1, 255, 70, 17, 2, 255, 68, 18, 1, 255, 65, 22, 3, 255, 73, 23, 7, 255, 66, 17, 3, 255, 58, 16, 3, 255, 53, 17, 3, 255, 50, 15, 2, 255, 56, 12, 4, 255, 56, 14, 4, 255, 51, 15, 1, 255, 49, 15, 2, 255, 46, 12, 2, 255, 58, 15, 3, 255, 70, 16, 2, 255, 74, 17, 3, 255, 63, 17, 5, 255, 42, 11, 1, 255, 33, 13, 0, 255, 42, 9, 1, 255, 44, 10, 2, 255, 35, 12, 1, 255, 51, 14, 5, 255, 60, 15, 1, 255, 67, 18, 4, 255, 47, 13, 2, 255, 34, 9, 1, 255, 37, 11, 4, 255, 37, 10, 3, 255, 38, 8, 2, 255, 28, 11, 0, 255, 31, 11, 2, 255, 30, 14, 0, 255, 29, 13, 0, 255, 31, 11, 4, 255, 67, 20, 5, 255, 88, 24, 3, 255, 98, 28, 4, 255, 101, 27, 1, 255, 104, 29, 0, 255, 103, 28, 0, 255, 103, 26, 0, 255, 107, 29, 5, 255, 105, 27, 4, 255, 104, 28, 2, 255, 106, 27, 3, 255, 105, 26, 2, 255, 11, 6, 2, 255, 11, 4, 2, 255, 11, 4, 2, 255, 11, 6, 3, 255, 11, 7, 2, 255, 15, 9, 2, 255, 16, 9, 3, 255, 13, 6, 0, 255, 16, 9, 1, 255, 18, 11, 3, 255, 17, 11, 3, 255, 15, 8, 0, 255, 17, 9, 3, 255, 20, 12, 4, 255, 20, 12, 3, 255, 19, 10, 1, 255, 18, 10, 2, 255, 20, 12, 3, 255, 20, 10, 2, 255, 16, 11, 2, 255, 20, 10, 2, 255, 25, 10, 2, 255, 24, 10, 1, 255, 25, 14, 3, 255, 21, 15, 1, 255, 20, 14, 2, 255, 20, 13, 3, 255, 19, 15, 4, 255, 21, 13, 3, 255, 27, 12, 4, 255, 31, 13, 5, 255, 30, 13, 3, 255, 37, 18, 0, 255, 38, 22, 4, 255, 40, 22, 6, 255, 40, 17, 4, 255, 44, 18, 6, 255, 44, 19, 3, 255, 42, 18, 4, 255, 29, 16, 1, 255, 32, 19, 4, 255, 36, 17, 3, 255, 37, 20, 3, 255, 39, 16, 2, 255, 42, 16, 4, 255, 35, 14, 2, 255, 32, 18, 1, 255, 37, 22, 7, 255, 26, 20, 2, 255, 33, 24, 2, 255, 38, 19, 4, 255, 35, 16, 4, 255, 36, 19, 5, 255, 32, 17, 2, 255, 35, 20, 4, 255, 38, 22, 3, 255, 43, 25, 5, 255, 39, 20, 3, 255, 37, 19, 2, 255, 39, 22, 2, 255, 36, 21, 6, 255, 36, 21, 7, 255, 41, 26, 5, 255, 45, 24, 7, 255, 46, 21, 5, 255, 44, 24, 2, 255, 41, 25, 4, 255, 41, 25, 6, 255, 43, 23, 1, 255, 49, 23, 3, 255, 43, 24, 7, 255, 45, 24, 4, 255, 48, 22, 5, 255, 46, 23, 0, 255, 45, 25, 3, 255, 45, 29, 3, 255, 50, 28, 4, 255, 47, 26, 1, 255, 47, 24, 2, 255, 56, 27, 7, 255, 52, 25, 2, 255, 53, 30, 5, 255, 55, 29, 8, 255, 54, 28, 3, 255, 56, 30, 2, 255, 55, 31, 3, 255, 63, 31, 6, 255, 63, 28, 3, 255, 58, 31, 1, 255, 60, 31, 3, 255, 61, 28, 4, 255, 56, 28, 2, 255, 53, 31, 5, 255, 48, 28, 2, 255, 53, 29, 3, 255, 59, 30, 6, 255, 56, 29, 3, 255, 58, 31, 3, 255, 57, 30, 0, 255, 58, 30, 0, 255, 60, 30, 2, 255, 61, 30, 2, 255, 62, 32, 3, 255, 65, 26, 1, 255, 66, 32, 4, 255, 64, 29, 2, 255, 60, 32, 4, 255, 62, 30, 4, 255, 59, 29, 6, 255, 50, 31, 7, 255, 63, 29, 2, 255, 64, 28, 2, 255, 64, 29, 4, 255, 65, 32, 3, 255, 60, 31, 4, 255, 57, 29, 1, 255, 63, 30, 2, 255, 61, 29, 2, 255, 62, 29, 3, 255, 65, 34, 6, 255, 57, 32, 1, 255, 64, 36, 4, 255, 61, 33, 4, 255, 58, 29, 2, 255, 66, 34, 6, 255, 70, 35, 5, 255, 68, 34, 5, 255, 63, 30, 4, 255, 61, 31, 6, 255, 60, 33, 8, 255, 65, 35, 3, 255, 62, 36, 3, 255, 65, 42, 2, 255, 61, 36, 7, 255, 63, 38, 9, 255, 65, 41, 9, 255, 54, 41, 7, 255, 62, 45, 4, 255, 67, 44, 6, 255, 63, 49, 7, 255, 64, 53, 8, 255, 68, 48, 15, 255, 70, 54, 11, 255, 73, 54, 8, 255, 64, 51, 17, 255, 64, 50, 17, 255, 71, 54, 21, 255, 65, 60, 22, 255, 63, 56, 15, 255, 62, 55, 26, 255, 69, 58, 25, 255, 65, 57, 24, 255, 77, 60, 33, 255, 75, 63, 33, 255, 70, 67, 22, 255, 73, 66, 37, 255, 76, 67, 33, 255, 72, 66, 35, 255, 69, 66, 45, 255, 74, 69, 45, 255, 72, 73, 34, 255, 72, 74, 42, 255, 79, 74, 37, 255, 77, 75, 47, 255, 76, 80, 61, 255, 79, 79, 58, 255, 82, 84, 48, 255, 81, 87, 48, 255, 82, 85, 50, 255, 84, 87, 48, 255, 84, 89, 59, 255, 81, 92, 67, 255, 79, 95, 54, 255, 83, 96, 57, 255, 84, 99, 60, 255, 81, 100, 63, 255, 86, 100, 64, 255, 95, 104, 67, 255, 91, 106, 70, 255, 94, 106, 67, 255, 96, 113, 66, 255, 99, 111, 72, 255, 115, 109, 67, 255, 131, 113, 64, 255, 131, 115, 72, 255, 117, 115, 68, 255, 122, 115, 66, 255, 123, 112, 60, 255, 102, 112, 63, 255, 96, 112, 65, 255, 115, 117, 62, 255, 124, 116, 59, 255, 126, 116, 53, 255, 127, 114, 56, 255, 129, 112, 59, 255, 127, 111, 59, 255, 114, 106, 54, 255, 95, 98, 56, 255, 91, 99, 50, 255, 97, 100, 52, 255, 103, 97, 42, 255, 105, 93, 40, 255, 97, 93, 36, 255, 104, 96, 38, 255, 116, 92, 38, 255, 119, 92, 34, 255, 118, 89, 24, 255, 120, 85, 29, 255, 122, 85, 32, 255, 122, 82, 23, 255, 124, 81, 16, 255, 122, 82, 23, 255, 122, 83, 21, 255, 129, 80, 16, 255, 125, 71, 7, 255, 117, 76, 16, 255, 96, 71, 28, 255, 87, 64, 27, 255, 96, 65, 21, 255, 106, 63, 18, 255, 117, 66, 13, 255, 118, 67, 3, 255, 116, 65, 12, 255, 116, 65, 19, 255, 118, 66, 8, 255, 114, 61, 7, 255, 110, 60, 16, 255, 97, 54, 16, 255, 90, 52, 10, 255, 93, 54, 8, 255, 105, 56, 3, 255, 111, 57, 10, 255, 108, 52, 5, 255, 113, 49, 2, 255, 114, 47, 5, 255, 113, 50, 7, 255, 105, 49, 4, 255, 88, 47, 9, 255, 85, 45, 6, 255, 88, 41, 3, 255, 88, 44, 3, 255, 90, 46, 4, 255, 88, 43, 3, 255, 83, 45, 3, 255, 86, 42, 3, 255, 90, 40, 7, 255, 95, 43, 9, 255, 92, 41, 4, 255, 95, 41, 3, 255, 103, 42, 5, 255, 106, 42, 2, 255, 106, 43, 4, 255, 103, 42, 2, 255, 105, 42, 4, 255, 107, 43, 8, 255, 92, 36, 3, 255, 84, 38, 4, 255, 82, 37, 3, 255, 80, 31, 2, 255, 84, 30, 4, 255, 86, 34, 5, 255, 85, 38, 4, 255, 77, 34, 0, 255, 78, 30, 3, 255, 85, 32, 5, 255, 92, 38, 3, 255, 93, 37, 4, 255, 93, 34, 4, 255, 101, 39, 3, 255, 99, 40, 5, 255, 81, 30, 0, 255, 86, 33, 2, 255, 87, 33, 5, 255, 86, 31, 4, 255, 100, 34, 2, 255, 109, 39, 5, 255, 98, 34, 1, 255, 91, 35, 2, 255, 88, 33, 3, 255, 82, 28, 1, 255, 80, 28, 1, 255, 80, 28, 3, 255, 81, 26, 3, 255, 75, 25, 3, 255, 77, 27, 3, 255, 84, 31, 3, 255, 82, 31, 2, 255, 75, 27, 0, 255, 78, 30, 4, 255, 72, 29, 6, 255, 67, 21, 3, 255, 74, 28, 9, 255, 69, 27, 3, 255, 69, 25, 1, 255, 74, 28, 4, 255, 71, 27, 2, 255, 78, 32, 6, 255, 79, 30, 4, 255, 78, 28, 3, 255, 80, 29, 5, 255, 79, 25, 2, 255, 81, 26, 3, 255, 79, 25, 3, 255, 80, 26, 4, 255, 79, 25, 3, 255, 73, 23, 2, 255, 72, 27, 3, 255, 78, 27, 4, 255, 80, 24, 4, 255, 76, 25, 1, 255, 71, 27, 5, 255, 77, 25, 4, 255, 82, 24, 1, 255, 80, 26, 3, 255, 79, 24, 2, 255, 81, 24, 3, 255, 82, 23, 2, 255, 81, 25, 4, 255, 76, 23, 3, 255, 74, 24, 4, 255, 70, 23, 5, 255, 68, 21, 0, 255, 72, 23, 5, 255, 72, 23, 5, 255, 71, 25, 1, 255, 72, 27, 3, 255, 75, 25, 3, 255, 80, 25, 3, 255, 81, 24, 2, 255, 84, 25, 2, 255, 85, 25, 4, 255, 85, 24, 4, 255, 83, 23, 3, 255, 80, 26, 6, 255, 73, 25, 2, 255, 72, 24, 1, 255, 75, 21, 1, 255, 77, 20, 2, 255, 72, 22, 3, 255, 71, 20, 1, 255, 73, 24, 2, 255, 67, 22, 4, 255, 70, 24, 3, 255, 74, 21, 0, 255, 68, 18, 4, 255, 66, 23, 3, 255, 66, 21, 4, 255, 59, 15, 4, 255, 62, 18, 0, 255, 68, 20, 3, 255, 66, 16, 4, 255, 65, 18, 3, 255, 65, 15, 3, 255, 64, 16, 1, 255, 60, 19, 0, 255, 63, 16, 1, 255, 63, 16, 2, 255, 63, 16, 1, 255, 60, 15, 3, 255, 57, 16, 3, 255, 58, 18, 5, 255, 56, 16, 5, 255, 54, 15, 4, 255, 50, 14, 2, 255, 48, 14, 4, 255, 47, 15, 8, 255, 46, 14, 3, 255, 51, 12, 0, 255, 58, 13, 1, 255, 56, 17, 4, 255, 50, 17, 5, 255, 43, 11, 2, 255, 54, 11, 3, 255, 54, 10, 3, 255, 35, 11, 0, 255, 55, 11, 3, 255, 73, 16, 3, 255, 66, 17, 0, 255, 53, 17, 2, 255, 49, 13, 1, 255, 48, 12, 1, 255, 42, 11, 1, 255, 43, 13, 7, 255, 32, 8, 4, 255, 25, 9, 3, 255, 37, 11, 3, 255, 54, 15, 6, 255, 49, 13, 6, 255, 64, 17, 2, 255, 82, 25, 1, 255, 92, 27, 2, 255, 98, 28, 4, 255, 103, 30, 4, 255, 106, 32, 2, 255, 106, 31, 3, 255, 102, 27, 3, 255, 99, 24, 1, 255, 105, 27, 1, 255, 106, 28, 2, 255, 106, 26, 0, 255, 11, 7, 4, 255, 11, 5, 2, 255, 10, 5, 3, 255, 10, 7, 2, 255, 10, 7, 2, 255, 14, 8, 2, 255, 15, 8, 2, 255, 15, 8, 2, 255, 17, 10, 2, 255, 17, 10, 2, 255, 18, 11, 3, 255, 18, 9, 3, 255, 18, 9, 4, 255, 16, 8, 2, 255, 19, 9, 1, 255, 21, 11, 2, 255, 15, 8, 1, 255, 14, 8, 1, 255, 20, 11, 3, 255, 17, 10, 0, 255, 20, 11, 2, 255, 24, 13, 4, 255, 24, 13, 3, 255, 24, 13, 2, 255, 27, 15, 3, 255, 24, 14, 3, 255, 21, 15, 4, 255, 23, 12, 2, 255, 29, 13, 4, 255, 29, 12, 3, 255, 30, 18, 5, 255, 29, 18, 4, 255, 41, 18, 1, 255, 38, 19, 1, 255, 40, 23, 2, 255, 42, 20, 2, 255, 47, 21, 3, 255, 44, 18, 1, 255, 41, 20, 4, 255, 35, 21, 5, 255, 37, 17, 6, 255, 40, 19, 7, 255, 41, 22, 7, 255, 35, 17, 3, 255, 23, 14, 2, 255, 34, 20, 5, 255, 41, 21, 3, 255, 35, 18, 3, 255, 30, 18, 1, 255, 33, 22, 2, 255, 33, 15, 1, 255, 37, 19, 5, 255, 35, 20, 4, 255, 35, 15, 1, 255, 39, 14, 2, 255, 39, 22, 5, 255, 35, 19, 2, 255, 34, 18, 5, 255, 34, 20, 5, 255, 43, 24, 1, 255, 46, 22, 4, 255, 43, 22, 4, 255, 39, 22, 1, 255, 36, 19, 3, 255, 41, 23, 4, 255, 36, 19, 3, 255, 36, 20, 3, 255, 41, 24, 7, 255, 44, 25, 9, 255, 44, 26, 6, 255, 47, 27, 3, 255, 45, 28, 2, 255, 48, 25, 5, 255, 45, 26, 4, 255, 43, 23, 6, 255, 42, 27, 4, 255, 37, 25, 3, 255, 45, 24, 4, 255, 49, 23, 1, 255, 48, 28, 3, 255, 52, 27, 2, 255, 55, 30, 3, 255, 55, 29, 2, 255, 60, 27, 5, 255, 57, 28, 3, 255, 51, 29, 0, 255, 55, 29, 3, 255, 60, 29, 5, 255, 52, 30, 1, 255, 55, 29, 0, 255, 57, 24, 0, 255, 60, 28, 4, 255, 51, 28, 3, 255, 45, 30, 4, 255, 53, 32, 7, 255, 60, 27, 6, 255, 56, 27, 1, 255, 58, 30, 3, 255, 59, 30, 2, 255, 58, 29, 2, 255, 59, 30, 3, 255, 59, 28, 1, 255, 58, 30, 0, 255, 64, 31, 3, 255, 70, 33, 7, 255, 59, 27, 1, 255, 53, 32, 2, 255, 61, 31, 3, 255, 65, 28, 1, 255, 63, 27, 5, 255, 52, 27, 9, 255, 54, 32, 7, 255, 56, 32, 2, 255, 55, 30, 3, 255, 59, 30, 3, 255, 65, 32, 4, 255, 62, 30, 3, 255, 60, 28, 1, 255, 57, 31, 1, 255, 56, 32, 2, 255, 65, 34, 6, 255, 66, 32, 6, 255, 62, 32, 4, 255, 56, 29, 0, 255, 62, 34, 5, 255, 61, 30, 3, 255, 61, 29, 3, 255, 61, 30, 3, 255, 59, 28, 2, 255, 64, 34, 2, 255, 64, 32, 7, 255, 61, 34, 10, 255, 60, 34, 6, 255, 64, 40, 3, 255, 60, 39, 3, 255, 64, 38, 8, 255, 61, 39, 8, 255, 67, 44, 10, 255, 70, 44, 16, 255, 66, 45, 17, 255, 73, 47, 19, 255, 71, 47, 16, 255, 67, 51, 13, 255, 72, 54, 11, 255, 72, 57, 13, 255, 63, 53, 20, 255, 61, 52, 26, 255, 61, 55, 24, 255, 73, 63, 22, 255, 71, 57, 34, 255, 70, 59, 24, 255, 67, 62, 25, 255, 66, 64, 25, 255, 71, 68, 27, 255, 68, 61, 29, 255, 68, 61, 47, 255, 68, 67, 38, 255, 69, 63, 36, 255, 76, 72, 29, 255, 71, 73, 36, 255, 69, 69, 44, 255, 71, 75, 45, 255, 79, 79, 37, 255, 74, 79, 38, 255, 77, 78, 53, 255, 81, 78, 45, 255, 77, 84, 48, 255, 79, 89, 51, 255, 81, 87, 61, 255, 81, 88, 56, 255, 83, 89, 64, 255, 87, 94, 64, 255, 87, 98, 51, 255, 88, 98, 61, 255, 89, 100, 63, 255, 87, 98, 65, 255, 87, 100, 63, 255, 90, 106, 62, 255, 96, 108, 66, 255, 108, 112, 76, 255, 115, 117, 67, 255, 121, 117, 67, 255, 129, 115, 72, 255, 128, 111, 68, 255, 129, 113, 71, 255, 124, 117, 70, 255, 124, 117, 66, 255, 130, 119, 68, 255, 107, 115, 67, 255, 92, 109, 65, 255, 109, 113, 61, 255, 125, 118, 65, 255, 128, 114, 58, 255, 126, 111, 57, 255, 122, 112, 58, 255, 114, 109, 54, 255, 101, 102, 50, 255, 93, 100, 47, 255, 95, 100, 45, 255, 99, 97, 46, 255, 103, 97, 39, 255, 104, 98, 31, 255, 100, 94, 31, 255, 114, 99, 42, 255, 120, 95, 36, 255, 115, 88, 29, 255, 118, 89, 32, 255, 119, 89, 32, 255, 121, 91, 22, 255, 120, 85, 33, 255, 119, 81, 30, 255, 119, 79, 29, 255, 112, 75, 12, 255, 106, 71, 20, 255, 102, 72, 24, 255, 101, 73, 15, 255, 91, 66, 16, 255, 93, 69, 15, 255, 94, 66, 4, 255, 92, 57, 20, 255, 95, 60, 21, 255, 99, 64, 11, 255, 100, 61, 14, 255, 98, 55, 11, 255, 99, 61, 4, 255, 99, 55, 9, 255, 97, 57, 4, 255, 92, 59, 13, 255, 84, 52, 7, 255, 93, 57, 2, 255, 111, 58, 6, 255, 113, 53, 9, 255, 107, 52, 7, 255, 115, 51, 9, 255, 119, 52, 8, 255, 110, 49, 6, 255, 96, 44, 7, 255, 82, 42, 7, 255, 85, 42, 10, 255, 86, 40, 7, 255, 85, 43, 1, 255, 92, 44, 2, 255, 90, 39, 1, 255, 85, 41, 8, 255, 88, 43, 2, 255, 89, 40, 3, 255, 86, 37, 8, 255, 89, 40, 8, 255, 95, 42, 3, 255, 98, 39, 2, 255, 98, 40, 4, 255, 96, 39, 3, 255, 100, 39, 3, 255, 100, 38, 1, 255, 97, 40, 5, 255, 91, 36, 4, 255, 80, 36, 1, 255, 80, 35, 1, 255, 81, 36, 3, 255, 80, 37, 3, 255, 80, 35, 1, 255, 86, 31, 2, 255, 85, 32, 1, 255, 80, 36, 5, 255, 79, 29, 3, 255, 80, 31, 3, 255, 79, 31, 3, 255, 88, 32, 3, 255, 91, 34, 1, 255, 89, 31, 1, 255, 79, 36, 4, 255, 81, 34, 3, 255, 80, 31, 2, 255, 79, 33, 3, 255, 92, 32, 1, 255, 98, 32, 1, 255, 102, 36, 4, 255, 101, 33, 4, 255, 94, 31, 2, 255, 96, 36, 7, 255, 96, 35, 7, 255, 96, 31, 3, 255, 94, 31, 4, 255, 81, 29, 5, 255, 76, 29, 2, 255, 76, 28, 0, 255, 78, 28, 1, 255, 78, 30, 6, 255, 68, 31, 1, 255, 63, 26, 3, 255, 67, 22, 7, 255, 70, 21, 4, 255, 75, 29, 3, 255, 77, 27, 4, 255, 73, 25, 1, 255, 68, 28, 3, 255, 72, 26, 2, 255, 83, 28, 4, 255, 79, 26, 3, 255, 77, 27, 1, 255, 83, 29, 4, 255, 78, 27, 2, 255, 81, 26, 3, 255, 80, 27, 6, 255, 72, 24, 1, 255, 70, 25, 1, 255, 74, 25, 4, 255, 75, 25, 1, 255, 70, 20, 1, 255, 72, 24, 0, 255, 70, 23, 3, 255, 72, 20, 2, 255, 78, 25, 2, 255, 74, 24, 0, 255, 75, 28, 1, 255, 78, 28, 4, 255, 76, 24, 1, 255, 76, 24, 2, 255, 74, 24, 3, 255, 72, 25, 3, 255, 71, 20, 3, 255, 74, 21, 5, 255, 77, 21, 4, 255, 78, 26, 5, 255, 76, 27, 6, 255, 72, 24, 1, 255, 77, 25, 2, 255, 83, 25, 5, 255, 87, 26, 4, 255, 83, 24, 2, 255, 80, 26, 2, 255, 78, 23, 2, 255, 78, 21, 1, 255, 84, 24, 4, 255, 81, 26, 3, 255, 85, 26, 3, 255, 87, 23, 3, 255, 82, 19, 1, 255, 73, 19, 1, 255, 70, 23, 5, 255, 72, 26, 5, 255, 71, 23, 2, 255, 66, 19, 2, 255, 64, 20, 4, 255, 70, 22, 3, 255, 76, 20, 2, 255, 70, 17, 4, 255, 64, 16, 5, 255, 64, 19, 2, 255, 70, 23, 3, 255, 66, 17, 0, 255, 66, 18, 4, 255, 67, 18, 5, 255, 68, 19, 4, 255, 67, 18, 3, 255, 57, 18, 1, 255, 63, 17, 3, 255, 69, 18, 2, 255, 64, 19, 3, 255, 62, 15, 1, 255, 63, 15, 2, 255, 55, 16, 4, 255, 51, 12, 3, 255, 52, 13, 5, 255, 45, 15, 5, 255, 42, 14, 3, 255, 48, 14, 3, 255, 52, 16, 4, 255, 44, 15, 1, 255, 43, 14, 0, 255, 61, 12, 5, 255, 52, 12, 6, 255, 44, 11, 2, 255, 48, 16, 4, 255, 34, 11, 0, 255, 52, 17, 8, 255, 63, 16, 2, 255, 70, 17, 2, 255, 70, 16, 5, 255, 62, 14, 7, 255, 46, 12, 3, 255, 34, 9, 0, 255, 33, 13, 1, 255, 37, 14, 4, 255, 34, 9, 6, 255, 54, 14, 9, 255, 71, 17, 6, 255, 55, 13, 1, 255, 60, 19, 3, 255, 77, 22, 1, 255, 86, 23, 3, 255, 90, 26, 4, 255, 102, 30, 5, 255, 106, 31, 4, 255, 103, 31, 2, 255, 99, 29, 4, 255, 91, 23, 0, 255, 99, 26, 1, 255, 99, 27, 2, 255, 95, 26, 0, 255, 11, 7, 5, 255, 11, 6, 5, 255, 11, 7, 3, 255, 11, 7, 2, 255, 11, 8, 3, 255, 12, 6, 3, 255, 14, 6, 2, 255, 18, 10, 4, 255, 17, 10, 2, 255, 15, 7, 0, 255, 17, 8, 1, 255, 17, 8, 2, 255, 17, 7, 3, 255, 17, 8, 3, 255, 20, 9, 1, 255, 18, 8, 1, 255, 17, 9, 4, 255, 19, 13, 6, 255, 22, 13, 4, 255, 21, 12, 2, 255, 20, 13, 3, 255, 20, 14, 3, 255, 23, 16, 5, 255, 21, 11, 1, 255, 32, 12, 3, 255, 28, 13, 2, 255, 22, 15, 2, 255, 32, 17, 7, 255, 30, 14, 2, 255, 25, 14, 0, 255, 27, 16, 0, 255, 34, 18, 3, 255, 40, 17, 5, 255, 41, 21, 6, 255, 37, 18, 2, 255, 39, 17, 1, 255, 39, 15, 1, 255, 43, 18, 5, 255, 41, 20, 6, 255, 38, 18, 5, 255, 37, 15, 4, 255, 32, 14, 2, 255, 37, 15, 2, 255, 42, 13, 2, 255, 33, 15, 2, 255, 34, 18, 3, 255, 43, 18, 5, 255, 31, 17, 1, 255, 33, 20, 4, 255, 32, 17, 2, 255, 40, 19, 10, 255, 39, 16, 4, 255, 44, 22, 8, 255, 39, 21, 3, 255, 37, 20, 3, 255, 41, 19, 4, 255, 40, 18, 5, 255, 37, 18, 6, 255, 37, 20, 3, 255, 39, 21, 0, 255, 41, 22, 4, 255, 43, 24, 5, 255, 42, 24, 1, 255, 42, 24, 2, 255, 49, 25, 1, 255, 45, 25, 5, 255, 39, 25, 3, 255, 37, 24, 2, 255, 41, 23, 3, 255, 50, 23, 1, 255, 51, 25, 2, 255, 46, 27, 2, 255, 47, 26, 6, 255, 45, 22, 5, 255, 39, 21, 5, 255, 55, 26, 7, 255, 53, 24, 6, 255, 50, 25, 3, 255, 57, 26, 3, 255, 53, 24, 1, 255, 50, 27, 4, 255, 55, 25, 4, 255, 58, 28, 3, 255, 49, 26, 2, 255, 49, 29, 1, 255, 46, 33, 1, 255, 46, 26, 2, 255, 55, 27, 3, 255, 54, 25, 0, 255, 58, 29, 3, 255, 53, 27, 5, 255, 55, 27, 5, 255, 59, 29, 8, 255, 54, 25, 2, 255, 56, 29, 1, 255, 56, 35, 4, 255, 56, 32, 5, 255, 56, 31, 3, 255, 56, 29, 3, 255, 57, 29, 4, 255, 59, 28, 5, 255, 62, 27, 4, 255, 62, 30, 2, 255, 56, 30, 1, 255, 61, 29, 4, 255, 56, 30, 3, 255, 61, 31, 4, 255, 61, 31, 2, 255, 64, 33, 3, 255, 60, 32, 5, 255, 57, 26, 6, 255, 56, 28, 12, 255, 55, 31, 7, 255, 58, 33, 2, 255, 54, 28, 2, 255, 59, 28, 2, 255, 58, 30, 2, 255, 60, 30, 2, 255, 60, 33, 4, 255, 59, 32, 3, 255, 59, 29, 1, 255, 58, 29, 6, 255, 63, 31, 7, 255, 64, 34, 2, 255, 61, 34, 4, 255, 57, 28, 5, 255, 61, 28, 5, 255, 63, 32, 3, 255, 58, 36, 6, 255, 61, 35, 1, 255, 60, 36, 8, 255, 62, 37, 7, 255, 60, 39, 3, 255, 61, 38, 8, 255, 59, 36, 9, 255, 68, 35, 16, 255, 72, 40, 12, 255, 72, 45, 8, 255, 69, 47, 11, 255, 67, 47, 12, 255, 77, 48, 7, 255, 72, 52, 10, 255, 58, 43, 34, 255, 64, 50, 23, 255, 85, 60, 4, 255, 66, 49, 21, 255, 65, 57, 22, 255, 65, 57, 12, 255, 66, 56, 18, 255, 69, 57, 24, 255, 68, 64, 17, 255, 68, 62, 25, 255, 65, 63, 37, 255, 69, 61, 29, 255, 70, 63, 36, 255, 65, 68, 37, 255, 70, 70, 29, 255, 73, 71, 32, 255, 71, 70, 42, 255, 69, 70, 43, 255, 72, 73, 49, 255, 71, 73, 42, 255, 76, 78, 43, 255, 76, 81, 56, 255, 83, 80, 57, 255, 84, 82, 53, 255, 78, 85, 46, 255, 84, 90, 52, 255, 78, 85, 60, 255, 82, 86, 66, 255, 90, 97, 61, 255, 87, 92, 63, 255, 88, 96, 68, 255, 82, 99, 58, 255, 89, 99, 66, 255, 94, 99, 72, 255, 91, 103, 69, 255, 91, 107, 64, 255, 112, 115, 71, 255, 126, 116, 73, 255, 134, 118, 66, 255, 133, 116, 65, 255, 127, 117, 65, 255, 122, 118, 64, 255, 125, 119, 69, 255, 130, 115, 70, 255, 132, 116, 65, 255, 123, 117, 67, 255, 105, 113, 70, 255, 92, 111, 66, 255, 98, 114, 63, 255, 102, 112, 57, 255, 121, 115, 60, 255, 116, 111, 53, 255, 102, 102, 58, 255, 94, 105, 50, 255, 96, 105, 52, 255, 99, 98, 51, 255, 101, 97, 55, 255, 100, 96, 49, 255, 94, 92, 45, 255, 93, 93, 49, 255, 101, 90, 39, 255, 118, 95, 40, 255, 119, 91, 37, 255, 120, 87, 50, 255, 119, 86, 39, 255, 115, 84, 29, 255, 108, 84, 23, 255, 100, 84, 22, 255, 91, 77, 24, 255, 91, 74, 28, 255, 94, 73, 18, 255, 90, 68, 19, 255, 89, 67, 18, 255, 98, 71, 18, 255, 91, 65, 15, 255, 89, 65, 19, 255, 94, 63, 14, 255, 93, 61, 10, 255, 92, 58, 13, 255, 88, 58, 10, 255, 88, 61, 13, 255, 86, 60, 11, 255, 83, 55, 8, 255, 90, 54, 15, 255, 90, 56, 3, 255, 86, 54, 8, 255, 85, 51, 10, 255, 95, 50, 11, 255, 112, 56, 13, 255, 118, 56, 4, 255, 119, 52, 3, 255, 118, 52, 9, 255, 111, 54, 9, 255, 99, 48, 3, 255, 91, 41, 4, 255, 91, 44, 9, 255, 88, 43, 6, 255, 87, 44, 8, 255, 79, 41, 7, 255, 87, 42, 7, 255, 89, 43, 5, 255, 86, 41, 5, 255, 89, 42, 1, 255, 86, 40, 4, 255, 82, 37, 5, 255, 87, 43, 2, 255, 94, 43, 4, 255, 93, 37, 7, 255, 94, 41, 9, 255, 88, 38, 4, 255, 97, 38, 5, 255, 96, 37, 4, 255, 86, 35, 2, 255, 83, 34, 2, 255, 84, 34, 2, 255, 81, 34, 2, 255, 78, 34, 1, 255, 77, 33, 0, 255, 82, 33, 4, 255, 78, 30, 1, 255, 80, 31, 2, 255, 85, 34, 3, 255, 78, 34, 2, 255, 80, 38, 7, 255, 76, 32, 2, 255, 75, 32, 3, 255, 79, 29, 6, 255, 77, 32, 2, 255, 75, 37, 2, 255, 79, 32, 0, 255, 81, 29, 0, 255, 82, 32, 2, 255, 95, 34, 5, 255, 100, 35, 5, 255, 104, 33, 4, 255, 102, 29, 1, 255, 98, 30, 1, 255, 100, 34, 3, 255, 102, 37, 2, 255, 106, 35, 2, 255, 103, 33, 2, 255, 92, 33, 5, 255, 78, 33, 2, 255, 77, 32, 0, 255, 78, 27, 1, 255, 76, 28, 6, 255, 75, 28, 9, 255, 68, 23, 2, 255, 75, 29, 7, 255, 74, 27, 5, 255, 68, 29, 3, 255, 65, 28, 2, 255, 71, 28, 4, 255, 78, 28, 5, 255, 77, 27, 2, 255, 71, 27, 0, 255, 76, 25, 0, 255, 88, 32, 6, 255, 79, 28, 1, 255, 73, 26, 1, 255, 77, 25, 2, 255, 75, 25, 2, 255, 70, 28, 3, 255, 68, 25, 2, 255, 75, 22, 2, 255, 73, 24, 0, 255, 70, 25, 1, 255, 74, 25, 2, 255, 76, 21, 5, 255, 72, 21, 4, 255, 74, 26, 3, 255, 72, 25, 3, 255, 69, 22, 1, 255, 74, 23, 4, 255, 72, 22, 2, 255, 67, 22, 3, 255, 61, 21, 2, 255, 62, 23, 3, 255, 73, 30, 6, 255, 69, 22, 4, 255, 70, 20, 1, 255, 70, 22, 0, 255, 74, 22, 2, 255, 80, 27, 5, 255, 78, 27, 3, 255, 79, 24, 3, 255, 84, 25, 5, 255, 78, 22, 1, 255, 80, 26, 2, 255, 82, 25, 4, 255, 83, 23, 3, 255, 88, 25, 4, 255, 87, 27, 3, 255, 90, 25, 2, 255, 93, 22, 2, 255, 88, 19, 1, 255, 77, 20, 2, 255, 77, 22, 2, 255, 67, 22, 4, 255, 62, 22, 2, 255, 67, 19, 2, 255, 72, 23, 6, 255, 71, 24, 3, 255, 72, 18, 1, 255, 84, 25, 2, 255, 79, 22, 2, 255, 84, 24, 7, 255, 85, 24, 3, 255, 76, 22, 1, 255, 63, 16, 4, 255, 59, 17, 0, 255, 66, 20, 1, 255, 73, 20, 6, 255, 68, 17, 4, 255, 54, 16, 0, 255, 64, 19, 1, 255, 79, 21, 5, 255, 69, 20, 2, 255, 61, 19, 1, 255, 58, 15, 2, 255, 54, 12, 3, 255, 49, 14, 5, 255, 44, 13, 1, 255, 52, 18, 2, 255, 52, 16, 1, 255, 55, 16, 3, 255, 45, 15, 2, 255, 36, 13, 0, 255, 46, 11, 2, 255, 40, 12, 3, 255, 33, 12, 1, 255, 41, 17, 4, 255, 46, 12, 4, 255, 47, 9, 3, 255, 55, 14, 3, 255, 63, 14, 1, 255, 54, 11, 1, 255, 41, 10, 3, 255, 32, 10, 3, 255, 45, 13, 7, 255, 51, 16, 7, 255, 54, 13, 3, 255, 53, 11, 3, 255, 57, 15, 3, 255, 65, 19, 2, 255, 49, 12, 0, 255, 56, 13, 5, 255, 70, 14, 3, 255, 77, 17, 2, 255, 86, 25, 5, 255, 93, 26, 1, 255, 100, 26, 1, 255, 103, 30, 3, 255, 97, 30, 3, 255, 93, 29, 4, 255, 93, 25, 0, 255, 94, 27, 1, 255, 90, 26, 1, 255, 8, 5, 1, 255, 8, 6, 1, 255, 13, 7, 3, 255, 14, 5, 2, 255, 15, 7, 4, 255, 11, 6, 3, 255, 16, 8, 2, 255, 18, 9, 1, 255, 17, 10, 2, 255, 16, 9, 3, 255, 16, 10, 4, 255, 18, 9, 2, 255, 18, 8, 2, 255, 13, 9, 2, 255, 16, 10, 5, 255, 16, 9, 1, 255, 21, 12, 5, 255, 20, 11, 3, 255, 21, 9, 2, 255, 20, 11, 2, 255, 20, 12, 4, 255, 21, 12, 4, 255, 22, 9, 3, 255, 30, 13, 5, 255, 30, 14, 5, 255, 28, 17, 6, 255, 23, 12, 2, 255, 28, 14, 5, 255, 28, 15, 4, 255, 31, 16, 5, 255, 33, 16, 4, 255, 33, 15, 3, 255, 27, 14, 5, 255, 33, 18, 4, 255, 40, 18, 4, 255, 38, 13, 2, 255, 39, 17, 6, 255, 38, 18, 4, 255, 37, 19, 4, 255, 35, 14, 1, 255, 37, 17, 3, 255, 35, 16, 2, 255, 34, 18, 4, 255, 33, 17, 2, 255, 37, 19, 5, 255, 35, 19, 7, 255, 30, 15, 0, 255, 32, 19, 2, 255, 30, 18, 5, 255, 31, 18, 6, 255, 32, 16, 5, 255, 38, 18, 5, 255, 36, 20, 7, 255, 31, 18, 3, 255, 35, 17, 0, 255, 41, 21, 0, 255, 37, 21, 0, 255, 36, 20, 3, 255, 41, 20, 7, 255, 32, 19, 4, 255, 40, 22, 6, 255, 36, 18, 1, 255, 37, 21, 2, 255, 38, 23, 3, 255, 40, 24, 5, 255, 45, 24, 3, 255, 46, 23, 2, 255, 45, 26, 5, 255, 45, 24, 4, 255, 50, 23, 2, 255, 44, 24, 3, 255, 36, 23, 3, 255, 43, 26, 2, 255, 52, 27, 6, 255, 48, 26, 5, 255, 40, 23, 4, 255, 47, 23, 8, 255, 58, 28, 4, 255, 58, 31, 0, 255, 58, 28, 3, 255, 59, 27, 9, 255, 53, 29, 4, 255, 48, 29, 4, 255, 47, 22, 5, 255, 50, 27, 2, 255, 49, 30, 2, 255, 49, 29, 6, 255, 52, 27, 5, 255, 52, 29, 3, 255, 58, 25, 1, 255, 50, 24, 0, 255, 49, 31, 3, 255, 58, 30, 4, 255, 58, 27, 5, 255, 56, 25, 3, 255, 51, 28, 3, 255, 58, 32, 1, 255, 56, 28, 3, 255, 53, 26, 5, 255, 54, 28, 4, 255, 56, 28, 5, 255, 59, 26, 3, 255, 59, 32, 4, 255, 57, 29, 0, 255, 59, 29, 1, 255, 63, 30, 4, 255, 68, 29, 6, 255, 59, 24, 2, 255, 54, 31, 5, 255, 55, 30, 3, 255, 60, 30, 2, 255, 64, 30, 2, 255, 60, 30, 7, 255, 58, 28, 5, 255, 60, 29, 3, 255, 59, 28, 4, 255, 60, 28, 8, 255, 57, 29, 5, 255, 54, 30, 0, 255, 57, 34, 3, 255, 63, 28, 2, 255, 67, 28, 10, 255, 58, 29, 3, 255, 69, 32, 4, 255, 66, 34, 3, 255, 62, 32, 7, 255, 62, 29, 0, 255, 59, 30, 5, 255, 58, 34, 8, 255, 59, 34, 2, 255, 68, 41, 5, 255, 62, 37, 3, 255, 60, 36, 5, 255, 61, 38, 5, 255, 60, 36, 11, 255, 63, 43, 15, 255, 60, 45, 6, 255, 64, 49, 8, 255, 68, 49, 9, 255, 73, 54, 8, 255, 74, 55, 5, 255, 72, 52, 11, 255, 64, 47, 17, 255, 65, 49, 9, 255, 75, 57, 15, 255, 68, 54, 20, 255, 66, 57, 18, 255, 74, 60, 22, 255, 70, 56, 17, 255, 71, 59, 29, 255, 68, 56, 33, 255, 66, 60, 27, 255, 68, 65, 35, 255, 64, 62, 35, 255, 67, 66, 33, 255, 72, 70, 38, 255, 75, 71, 40, 255, 73, 68, 36, 255, 71, 66, 43, 255, 73, 73, 40, 255, 76, 77, 44, 255, 76, 77, 42, 255, 75, 77, 46, 255, 75, 76, 54, 255, 79, 82, 59, 255, 78, 82, 52, 255, 80, 86, 51, 255, 83, 89, 50, 255, 84, 90, 64, 255, 82, 91, 70, 255, 82, 93, 63, 255, 84, 94, 62, 255, 86, 99, 66, 255, 82, 101, 62, 255, 87, 102, 69, 255, 88, 101, 70, 255, 92, 106, 73, 255, 98, 108, 72, 255, 108, 113, 73, 255, 118, 120, 71, 255, 121, 118, 68, 255, 128, 120, 74, 255, 130, 123, 70, 255, 128, 120, 65, 255, 133, 121, 73, 255, 134, 118, 68, 255, 123, 117, 64, 255, 105, 112, 63, 255, 98, 114, 67, 255, 96, 113, 64, 255, 99, 112, 58, 255, 105, 116, 58, 255, 125, 114, 60, 255, 118, 113, 55, 255, 96, 104, 52, 255, 93, 105, 59, 255, 98, 100, 53, 255, 102, 100, 48, 255, 101, 98, 45, 255, 100, 96, 49, 255, 97, 96, 45, 255, 94, 92, 39, 255, 108, 95, 42, 255, 121, 95, 46, 255, 122, 91, 24, 255, 123, 88, 30, 255, 116, 84, 31, 255, 108, 84, 25, 255, 94, 75, 26, 255, 95, 79, 32, 255, 94, 78, 23, 255, 94, 78, 21, 255, 89, 72, 18, 255, 92, 72, 17, 255, 95, 69, 24, 255, 96, 67, 18, 255, 95, 68, 12, 255, 88, 63, 20, 255, 84, 59, 23, 255, 88, 62, 21, 255, 86, 60, 15, 255, 85, 58, 11, 255, 89, 59, 13, 255, 87, 56, 9, 255, 90, 55, 15, 255, 87, 49, 23, 255, 89, 53, 17, 255, 84, 54, 3, 255, 86, 55, 5, 255, 86, 51, 12, 255, 91, 48, 9, 255, 109, 50, 8, 255, 111, 47, 9, 255, 100, 46, 6, 255, 92, 44, 7, 255, 87, 44, 6, 255, 85, 46, 5, 255, 86, 45, 9, 255, 85, 40, 6, 255, 84, 40, 8, 255, 80, 38, 13, 255, 80, 41, 3, 255, 82, 40, 1, 255, 87, 42, 1, 255, 83, 40, 3, 255, 79, 39, 3, 255, 84, 40, 4, 255, 89, 39, 2, 255, 91, 39, 3, 255, 97, 41, 7, 255, 96, 36, 2, 255, 92, 36, 1, 255, 93, 37, 2, 255, 94, 37, 5, 255, 88, 35, 3, 255, 83, 39, 4, 255, 85, 32, 5, 255, 82, 32, 1, 255, 83, 38, 3, 255, 85, 34, 3, 255, 87, 30, 4, 255, 82, 31, 4, 255, 79, 32, 2, 255, 76, 30, 1, 255, 76, 35, 3, 255, 76, 34, 2, 255, 75, 29, 0, 255, 78, 32, 2, 255, 78, 33, 4, 255, 85, 38, 4, 255, 94, 38, 6, 255, 83, 34, 3, 255, 77, 29, 4, 255, 81, 30, 3, 255, 88, 34, 3, 255, 100, 35, 2, 255, 109, 35, 2, 255, 95, 31, 0, 255, 96, 33, 4, 255, 106, 34, 3, 255, 100, 36, 4, 255, 89, 30, 2, 255, 94, 29, 3, 255, 94, 28, 3, 255, 77, 29, 0, 255, 79, 32, 2, 255, 79, 27, 3, 255, 71, 26, 3, 255, 76, 29, 6, 255, 71, 23, 1, 255, 63, 25, 3, 255, 67, 25, 3, 255, 72, 29, 5, 255, 74, 29, 2, 255, 87, 29, 2, 255, 87, 27, 0, 255, 83, 31, 3, 255, 71, 27, 0, 255, 70, 28, 2, 255, 76, 28, 4, 255, 76, 25, 2, 255, 72, 28, 5, 255, 70, 25, 2, 255, 72, 26, 2, 255, 69, 28, 2, 255, 74, 26, 2, 255, 76, 25, 3, 255, 73, 23, 2, 255, 81, 29, 8, 255, 74, 22, 3, 255, 71, 24, 3, 255, 70, 25, 2, 255, 74, 23, 2, 255, 80, 28, 5, 255, 70, 22, 0, 255, 72, 22, 2, 255, 73, 25, 2, 255, 73, 27, 6, 255, 72, 23, 5, 255, 72, 22, 3, 255, 80, 25, 4, 255, 78, 23, 5, 255, 67, 21, 3, 255, 68, 23, 3, 255, 73, 22, 2, 255, 75, 21, 0, 255, 77, 24, 4, 255, 76, 20, 3, 255, 77, 19, 4, 255, 78, 22, 3, 255, 80, 22, 0, 255, 84, 23, 3, 255, 81, 24, 3, 255, 84, 24, 2, 255, 88, 26, 2, 255, 91, 26, 3, 255, 89, 23, 3, 255, 88, 25, 6, 255, 77, 25, 1, 255, 72, 21, 1, 255, 79, 20, 2, 255, 86, 24, 5, 255, 76, 26, 4, 255, 67, 24, 2, 255, 73, 21, 1, 255, 76, 20, 3, 255, 70, 20, 3, 255, 73, 19, 2, 255, 77, 20, 1, 255, 76, 21, 1, 255, 70, 21, 4, 255, 60, 16, 2, 255, 58, 18, 1, 255, 61, 21, 1, 255, 58, 18, 1, 255, 55, 18, 1, 255, 57, 16, 1, 255, 66, 16, 3, 255, 75, 17, 5, 255, 79, 19, 3, 255, 71, 20, 1, 255, 54, 18, 2, 255, 45, 15, 4, 255, 54, 14, 5, 255, 62, 16, 4, 255, 67, 19, 1, 255, 78, 17, 4, 255, 74, 19, 3, 255, 62, 13, 2, 255, 44, 13, 2, 255, 39, 13, 6, 255, 48, 14, 3, 255, 47, 16, 6, 255, 36, 8, 1, 255, 40, 13, 3, 255, 40, 11, 1, 255, 41, 13, 3, 255, 45, 14, 4, 255, 45, 12, 4, 255, 34, 5, 3, 255, 38, 14, 3, 255, 41, 15, 2, 255, 49, 13, 4, 255, 62, 18, 7, 255, 60, 16, 2, 255, 58, 14, 5, 255, 53, 14, 6, 255, 46, 9, 3, 255, 49, 11, 2, 255, 60, 16, 3, 255, 73, 18, 4, 255, 80, 22, 3, 255, 82, 23, 1, 255, 89, 24, 1, 255, 99, 26, 3, 255, 100, 26, 2, 255, 100, 27, 2, 255, 100, 26, 2, 255, 101, 27, 4, 255, 99, 28, 2, 255, 5, 4, 1, 255, 9, 7, 3, 255, 12, 9, 4, 255, 11, 5, 2, 255, 13, 5, 2, 255, 17, 7, 5, 255, 19, 9, 3, 255, 18, 9, 1, 255, 16, 9, 3, 255, 15, 8, 2, 255, 16, 9, 3, 255, 17, 8, 1, 255, 17, 7, 0, 255, 18, 9, 4, 255, 17, 6, 2, 255, 19, 8, 3, 255, 19, 9, 2, 255, 18, 9, 2, 255, 20, 10, 2, 255, 19, 12, 2, 255, 15, 10, 1, 255, 17, 10, 0, 255, 23, 12, 3, 255, 25, 12, 3, 255, 22, 11, 2, 255, 26, 13, 4, 255, 29, 14, 5, 255, 22, 10, 1, 255, 21, 10, 1, 255, 33, 14, 6, 255, 38, 14, 5, 255, 30, 13, 0, 255, 26, 11, 1, 255, 38, 21, 7, 255, 38, 19, 5, 255, 34, 14, 0, 255, 34, 17, 4, 255, 31, 18, 3, 255, 30, 18, 3, 255, 30, 16, 3, 255, 33, 16, 4, 255, 34, 17, 5, 255, 35, 19, 5, 255, 34, 17, 3, 255, 32, 12, 2, 255, 26, 12, 6, 255, 32, 17, 2, 255, 36, 21, 4, 255, 32, 15, 3, 255, 34, 17, 3, 255, 36, 20, 0, 255, 39, 20, 2, 255, 37, 20, 3, 255, 34, 18, 2, 255, 40, 21, 2, 255, 43, 21, 2, 255, 44, 23, 4, 255, 35, 20, 2, 255, 35, 19, 3, 255, 40, 21, 5, 255, 46, 24, 7, 255, 36, 19, 2, 255, 38, 22, 5, 255, 39, 22, 5, 255, 38, 23, 6, 255, 35, 20, 5, 255, 40, 21, 6, 255, 43, 19, 1, 255, 49, 25, 5, 255, 44, 26, 4, 255, 39, 24, 0, 255, 46, 28, 4, 255, 45, 25, 1, 255, 49, 25, 3, 255, 51, 26, 3, 255, 50, 28, 1, 255, 49, 28, 2, 255, 47, 23, 6, 255, 52, 29, 2, 255, 53, 32, 5, 255, 58, 27, 4, 255, 59, 24, 2, 255, 52, 29, 2, 255, 49, 25, 4, 255, 51, 25, 3, 255, 52, 30, 2, 255, 51, 31, 0, 255, 52, 24, 8, 255, 47, 25, 7, 255, 56, 25, 4, 255, 49, 28, 3, 255, 45, 29, 2, 255, 56, 28, 1, 255, 50, 28, 3, 255, 45, 28, 3, 255, 49, 27, 1, 255, 56, 28, 1, 255, 57, 29, 6, 255, 57, 29, 6, 255, 53, 27, 1, 255, 57, 31, 1, 255, 61, 31, 3, 255, 63, 31, 7, 255, 60, 31, 6, 255, 58, 29, 4, 255, 61, 29, 5, 255, 59, 26, 2, 255, 57, 28, 2, 255, 56, 30, 3, 255, 56, 30, 3, 255, 59, 29, 4, 255, 59, 28, 4, 255, 53, 26, 1, 255, 53, 27, 6, 255, 59, 33, 8, 255, 59, 27, 3, 255, 57, 32, 3, 255, 50, 28, 2, 255, 63, 31, 2, 255, 66, 27, 1, 255, 64, 28, 5, 255, 59, 29, 2, 255, 59, 30, 4, 255, 62, 35, 2, 255, 64, 34, 4, 255, 62, 30, 5, 255, 66, 33, 4, 255, 54, 31, 5, 255, 56, 30, 8, 255, 63, 36, 8, 255, 60, 31, 0, 255, 66, 39, 9, 255, 61, 36, 7, 255, 57, 34, 3, 255, 66, 33, 9, 255, 74, 39, 14, 255, 70, 42, 10, 255, 68, 43, 9, 255, 67, 44, 7, 255, 68, 48, 14, 255, 64, 49, 22, 255, 56, 49, 16, 255, 72, 49, 16, 255, 72, 48, 19, 255, 56, 49, 22, 255, 67, 53, 28, 255, 72, 56, 19, 255, 70, 53, 20, 255, 69, 55, 20, 255, 66, 60, 35, 255, 61, 60, 26, 255, 66, 63, 27, 255, 65, 58, 36, 255, 71, 62, 35, 255, 72, 65, 29, 255, 72, 68, 34, 255, 70, 67, 41, 255, 69, 67, 39, 255, 70, 68, 44, 255, 71, 73, 46, 255, 80, 79, 49, 255, 75, 74, 51, 255, 75, 75, 57, 255, 76, 79, 57, 255, 76, 82, 53, 255, 80, 88, 54, 255, 84, 92, 58, 255, 85, 94, 48, 255, 85, 94, 55, 255, 84, 92, 66, 255, 84, 95, 64, 255, 87, 98, 64, 255, 90, 103, 66, 255, 86, 106, 60, 255, 88, 107, 66, 255, 89, 108, 70, 255, 89, 111, 74, 255, 86, 109, 71, 255, 91, 111, 73, 255, 95, 113, 77, 255, 99, 113, 74, 255, 106, 115, 79, 255, 112, 120, 74, 255, 110, 119, 68, 255, 112, 119, 72, 255, 110, 115, 73, 255, 104, 113, 77, 255, 96, 113, 68, 255, 97, 118, 63, 255, 99, 114, 67, 255, 101, 108, 71, 255, 109, 114, 71, 255, 118, 113, 65, 255, 114, 107, 61, 255, 102, 103, 52, 255, 100, 104, 58, 255, 96, 96, 59, 255, 94, 97, 56, 255, 97, 98, 49, 255, 98, 97, 42, 255, 96, 96, 39, 255, 95, 93, 36, 255, 103, 91, 41, 255, 112, 91, 37, 255, 113, 86, 36, 255, 110, 84, 34, 255, 105, 82, 22, 255, 99, 78, 22, 255, 95, 78, 23, 255, 92, 74, 24, 255, 94, 74, 17, 255, 93, 71, 22, 255, 92, 67, 22, 255, 96, 71, 21, 255, 90, 70, 22, 255, 85, 67, 15, 255, 92, 66, 15, 255, 92, 63, 17, 255, 87, 64, 15, 255, 81, 61, 19, 255, 79, 57, 16, 255, 84, 58, 13, 255, 87, 56, 9, 255, 89, 54, 8, 255, 96, 57, 14, 255, 89, 53, 10, 255, 86, 55, 6, 255, 80, 50, 7, 255, 85, 55, 9, 255, 85, 55, 3, 255, 83, 51, 4, 255, 86, 46, 4, 255, 92, 49, 7, 255, 84, 47, 3, 255, 84, 46, 3, 255, 86, 42, 1, 255, 87, 45, 0, 255, 81, 47, 1, 255, 84, 41, 2, 255, 87, 40, 4, 255, 84, 38, 8, 255, 82, 39, 6, 255, 79, 40, 4, 255, 91, 38, 4, 255, 91, 38, 5, 255, 85, 37, 3, 255, 88, 40, 4, 255, 91, 38, 2, 255, 91, 38, 2, 255, 94, 40, 4, 255, 94, 37, 0, 255, 95, 38, 4, 255, 90, 35, 2, 255, 88, 39, 5, 255, 82, 37, 3, 255, 83, 38, 2, 255, 81, 33, 3, 255, 78, 34, 3, 255, 81, 35, 4, 255, 81, 32, 1, 255, 79, 32, 0, 255, 86, 35, 6, 255, 83, 34, 3, 255, 79, 32, 1, 255, 81, 33, 4, 255, 77, 32, 5, 255, 74, 31, 1, 255, 81, 35, 1, 255, 93, 34, 3, 255, 103, 32, 4, 255, 104, 38, 4, 255, 98, 35, 2, 255, 82, 34, 3, 255, 77, 28, 4, 255, 85, 28, 8, 255, 92, 34, 2, 255, 96, 28, 3, 255, 94, 28, 6, 255, 89, 30, 2, 255, 93, 29, 1, 255, 90, 27, 7, 255, 80, 27, 7, 255, 73, 24, 2, 255, 73, 26, 4, 255, 80, 26, 5, 255, 77, 28, 3, 255, 76, 30, 4, 255, 74, 25, 4, 255, 72, 25, 2, 255, 70, 23, 1, 255, 70, 26, 3, 255, 75, 26, 6, 255, 77, 24, 3, 255, 83, 28, 4, 255, 94, 30, 5, 255, 88, 23, 1, 255, 80, 23, 4, 255, 70, 23, 3, 255, 72, 29, 5, 255, 73, 27, 2, 255, 76, 27, 1, 255, 71, 27, 3, 255, 69, 25, 3, 255, 73, 25, 3, 255, 87, 24, 1, 255, 87, 28, 2, 255, 76, 27, 1, 255, 74, 25, 2, 255, 74, 22, 3, 255, 73, 24, 3, 255, 71, 26, 4, 255, 70, 24, 0, 255, 77, 23, 2, 255, 94, 26, 7, 255, 99, 30, 6, 255, 78, 28, 1, 255, 71, 22, 1, 255, 85, 27, 5, 255, 86, 26, 3, 255, 77, 21, 2, 255, 70, 20, 4, 255, 67, 24, 7, 255, 71, 23, 6, 255, 78, 27, 6, 255, 79, 27, 3, 255, 86, 26, 3, 255, 88, 24, 1, 255, 80, 25, 0, 255, 78, 24, 3, 255, 77, 21, 1, 255, 74, 22, 0, 255, 77, 22, 2, 255, 81, 19, 4, 255, 83, 22, 5, 255, 78, 23, 2, 255, 82, 22, 4, 255, 81, 20, 4, 255, 75, 23, 4, 255, 70, 21, 1, 255, 71, 20, 2, 255, 75, 22, 2, 255, 77, 24, 4, 255, 77, 22, 2, 255, 80, 23, 5, 255, 84, 22, 4, 255, 82, 21, 4, 255, 73, 19, 4, 255, 69, 20, 2, 255, 65, 21, 1, 255, 63, 20, 0, 255, 64, 19, 2, 255, 64, 19, 4, 255, 65, 16, 2, 255, 71, 19, 6, 255, 66, 17, 2, 255, 59, 15, 2, 255, 63, 18, 7, 255, 66, 16, 5, 255, 66, 15, 3, 255, 66, 13, 2, 255, 69, 11, 4, 255, 66, 15, 5, 255, 55, 15, 2, 255, 52, 15, 4, 255, 59, 18, 9, 255, 70, 16, 5, 255, 75, 16, 5, 255, 67, 16, 3, 255, 53, 12, 0, 255, 41, 16, 2, 255, 39, 15, 3, 255, 46, 12, 2, 255, 46, 12, 3, 255, 41, 11, 4, 255, 35, 7, 0, 255, 40, 13, 1, 255, 39, 11, 2, 255, 38, 12, 2, 255, 36, 12, 5, 255, 38, 8, 6, 255, 39, 14, 4, 255, 36, 14, 1, 255, 41, 11, 0, 255, 57, 16, 5, 255, 63, 17, 3, 255, 54, 14, 5, 255, 34, 5, 0, 255, 36, 16, 5, 255, 36, 13, 1, 255, 39, 9, 3, 255, 59, 15, 3, 255, 72, 21, 2, 255, 74, 20, 1, 255, 83, 21, 3, 255, 94, 24, 6, 255, 98, 23, 1, 255, 100, 25, 0, 255, 99, 28, 3, 255, 99, 26, 2, 255, 100, 23, 0, 255, 9, 4, 2, 255, 9, 5, 2, 255, 10, 7, 3, 255, 11, 8, 3, 255, 10, 4, 1, 255, 16, 6, 4, 255, 15, 5, 2, 255, 14, 6, 1, 255, 15, 8, 2, 255, 13, 6, 1, 255, 12, 5, 0, 255, 16, 7, 2, 255, 17, 7, 2, 255, 15, 5, 1, 255, 16, 6, 1, 255, 17, 7, 3, 255, 17, 8, 1, 255, 19, 10, 3, 255, 18, 9, 2, 255, 17, 10, 1, 255, 17, 11, 2, 255, 19, 12, 4, 255, 19, 9, 2, 255, 21, 9, 3, 255, 18, 9, 1, 255, 20, 9, 1, 255, 21, 14, 2, 255, 22, 13, 3, 255, 37, 12, 8, 255, 34, 14, 8, 255, 23, 14, 0, 255, 36, 14, 2, 255, 32, 14, 3, 255, 34, 16, 3, 255, 34, 16, 1, 255, 34, 18, 4, 255, 31, 17, 4, 255, 26, 16, 1, 255, 22, 15, 3, 255, 27, 17, 7, 255, 29, 15, 6, 255, 30, 15, 5, 255, 31, 17, 4, 255, 31, 16, 1, 255, 35, 19, 3, 255, 32, 18, 2, 255, 34, 18, 3, 255, 37, 19, 4, 255, 36, 16, 1, 255, 35, 16, 1, 255, 36, 20, 5, 255, 38, 18, 1, 255, 36, 17, 0, 255, 35, 20, 3, 255, 36, 20, 1, 255, 41, 22, 4, 255, 37, 18, 1, 255, 39, 21, 5, 255, 37, 20, 5, 255, 33, 22, 2, 255, 33, 21, 1, 255, 36, 26, 5, 255, 36, 22, 3, 255, 39, 22, 4, 255, 40, 24, 2, 255, 43, 23, 7, 255, 46, 21, 7, 255, 48, 23, 1, 255, 51, 27, 0, 255, 48, 25, 2, 255, 44, 25, 5, 255, 47, 23, 5, 255, 48, 22, 5, 255, 47, 24, 6, 255, 49, 22, 3, 255, 55, 27, 4, 255, 51, 28, 2, 255, 57, 29, 2, 255, 50, 22, 4, 255, 49, 19, 5, 255, 48, 25, 0, 255, 46, 29, 0, 255, 46, 28, 3, 255, 47, 27, 2, 255, 51, 27, 3, 255, 52, 28, 5, 255, 50, 27, 4, 255, 48, 20, 5, 255, 43, 24, 5, 255, 52, 26, 3, 255, 56, 29, 5, 255, 57, 28, 2, 255, 55, 26, 4, 255, 46, 26, 1, 255, 54, 31, 3, 255, 56, 29, 5, 255, 58, 30, 4, 255, 54, 26, 3, 255, 55, 27, 4, 255, 55, 29, 2, 255, 58, 32, 2, 255, 59, 30, 2, 255, 58, 27, 3, 255, 52, 26, 3, 255, 53, 28, 4, 255, 59, 30, 5, 255, 55, 26, 1, 255, 58, 31, 4, 255, 60, 28, 2, 255, 58, 28, 6, 255, 59, 30, 4, 255, 55, 30, 2, 255, 57, 31, 8, 255, 59, 33, 4, 255, 57, 29, 5, 255, 59, 27, 3, 255, 58, 28, 3, 255, 63, 33, 5, 255, 61, 31, 4, 255, 59, 29, 3, 255, 56, 29, 2, 255, 54, 28, 2, 255, 63, 30, 5, 255, 70, 32, 3, 255, 65, 30, 4, 255, 58, 30, 5, 255, 68, 29, 4, 255, 57, 27, 5, 255, 54, 33, 6, 255, 65, 41, 8, 255, 65, 36, 3, 255, 66, 36, 5, 255, 63, 34, 4, 255, 65, 38, 5, 255, 72, 40, 3, 255, 73, 40, 7, 255, 68, 43, 10, 255, 64, 44, 4, 255, 64, 47, 8, 255, 61, 46, 15, 255, 65, 50, 14, 255, 70, 45, 15, 255, 65, 47, 21, 255, 64, 51, 13, 255, 68, 51, 18, 255, 68, 54, 29, 255, 69, 57, 20, 255, 74, 58, 18, 255, 70, 57, 28, 255, 67, 62, 24, 255, 63, 62, 32, 255, 66, 63, 41, 255, 75, 68, 24, 255, 77, 66, 23, 255, 75, 69, 27, 255, 74, 72, 35, 255, 71, 72, 26, 255, 71, 72, 36, 255, 73, 75, 36, 255, 73, 78, 39, 255, 74, 74, 49, 255, 75, 74, 52, 255, 76, 78, 57, 255, 77, 81, 57, 255, 78, 85, 54, 255, 79, 88, 54, 255, 83, 92, 58, 255, 86, 98, 49, 255, 87, 99, 54, 255, 84, 94, 63, 255, 86, 98, 60, 255, 91, 103, 62, 255, 92, 104, 67, 255, 90, 103, 71, 255, 92, 106, 72, 255, 93, 108, 74, 255, 91, 110, 74, 255, 88, 110, 72, 255, 92, 115, 76, 255, 101, 116, 73, 255, 103, 117, 73, 255, 100, 116, 82, 255, 97, 116, 79, 255, 95, 114, 72, 255, 102, 118, 76, 255, 101, 117, 67, 255, 99, 115, 71, 255, 99, 116, 80, 255, 98, 116, 66, 255, 99, 116, 64, 255, 96, 109, 68, 255, 97, 108, 66, 255, 93, 107, 62, 255, 96, 103, 65, 255, 95, 104, 59, 255, 96, 105, 53, 255, 98, 101, 50, 255, 93, 97, 56, 255, 91, 94, 49, 255, 94, 94, 39, 255, 92, 93, 50, 255, 90, 92, 35, 255, 90, 90, 26, 255, 94, 90, 26, 255, 94, 85, 43, 255, 90, 81, 36, 255, 90, 79, 29, 255, 90, 76, 35, 255, 90, 77, 29, 255, 91, 75, 26, 255, 95, 72, 32, 255, 92, 69, 27, 255, 93, 70, 21, 255, 93, 70, 15, 255, 92, 65, 14, 255, 92, 66, 12, 255, 88, 67, 11, 255, 83, 60, 12, 255, 86, 58, 13, 255, 88, 57, 15, 255, 88, 54, 16, 255, 88, 53, 16, 255, 88, 55, 11, 255, 89, 57, 6, 255, 88, 53, 16, 255, 90, 54, 6, 255, 84, 51, 0, 255, 82, 51, 11, 255, 80, 48, 8, 255, 87, 49, 8, 255, 83, 53, 9, 255, 89, 49, 3, 255, 109, 48, 9, 255, 97, 43, 6, 255, 86, 43, 5, 255, 84, 43, 6, 255, 84, 42, 6, 255, 83, 40, 6, 255, 83, 40, 8, 255, 85, 44, 7, 255, 81, 39, 5, 255, 81, 37, 5, 255, 82, 38, 3, 255, 85, 38, 3, 255, 84, 39, 3, 255, 78, 34, 0, 255, 84, 40, 6, 255, 92, 44, 7, 255, 92, 39, 2, 255, 91, 35, 0, 255, 91, 36, 1, 255, 90, 38, 1, 255, 86, 41, 1, 255, 85, 40, 2, 255, 86, 36, 3, 255, 87, 32, 4, 255, 86, 31, 3, 255, 81, 32, 2, 255, 80, 36, 4, 255, 76, 35, 3, 255, 76, 36, 4, 255, 81, 31, 1, 255, 82, 31, 3, 255, 78, 30, 3, 255, 74, 27, 2, 255, 77, 31, 6, 255, 76, 31, 3, 255, 78, 29, 0, 255, 98, 36, 6, 255, 112, 36, 5, 255, 102, 39, 2, 255, 106, 32, 0, 255, 102, 35, 4, 255, 95, 35, 2, 255, 99, 36, 2, 255, 92, 33, 4, 255, 74, 26, 3, 255, 75, 26, 7, 255, 72, 27, 4, 255, 77, 26, 7, 255, 84, 25, 4, 255, 82, 31, 1, 255, 81, 31, 4, 255, 85, 31, 5, 255, 88, 33, 5, 255, 86, 30, 1, 255, 85, 31, 1, 255, 79, 32, 3, 255, 72, 24, 1, 255, 74, 26, 3, 255, 72, 26, 2, 255, 72, 27, 3, 255, 71, 27, 2, 255, 72, 26, 0, 255, 67, 24, 2, 255, 66, 26, 3, 255, 72, 24, 1, 255, 76, 25, 3, 255, 72, 24, 1, 255, 72, 24, 2, 255, 71, 25, 3, 255, 71, 24, 1, 255, 67, 22, 2, 255, 75, 24, 3, 255, 95, 24, 1, 255, 96, 28, 1, 255, 86, 30, 4, 255, 71, 26, 3, 255, 68, 20, 0, 255, 75, 22, 3, 255, 74, 23, 4, 255, 68, 21, 1, 255, 71, 23, 3, 255, 80, 23, 2, 255, 91, 27, 3, 255, 81, 29, 3, 255, 66, 19, 0, 255, 72, 24, 1, 255, 78, 29, 2, 255, 73, 22, 1, 255, 62, 21, 5, 255, 58, 21, 3, 255, 65, 20, 4, 255, 75, 24, 4, 255, 75, 23, 0, 255, 86, 25, 2, 255, 89, 24, 4, 255, 79, 21, 0, 255, 75, 23, 2, 255, 78, 25, 4, 255, 73, 24, 2, 255, 74, 24, 2, 255, 82, 25, 5, 255, 82, 25, 5, 255, 79, 23, 2, 255, 77, 23, 2, 255, 73, 21, 1, 255, 74, 21, 1, 255, 69, 22, 0, 255, 72, 22, 4, 255, 74, 21, 3, 255, 76, 22, 1, 255, 77, 21, 2, 255, 82, 22, 6, 255, 84, 21, 4, 255, 86, 20, 3, 255, 83, 20, 4, 255, 69, 16, 2, 255, 66, 20, 4, 255, 66, 21, 3, 255, 68, 21, 3, 255, 69, 18, 3, 255, 68, 19, 3, 255, 70, 20, 4, 255, 68, 19, 3, 255, 60, 19, 4, 255, 56, 17, 5, 255, 58, 17, 4, 255, 55, 14, 2, 255, 55, 15, 3, 255, 57, 14, 3, 255, 59, 14, 1, 255, 59, 17, 3, 255, 49, 17, 2, 255, 44, 13, 2, 255, 63, 15, 5, 255, 60, 13, 1, 255, 54, 14, 0, 255, 49, 16, 3, 255, 39, 12, 0, 255, 42, 11, 2, 255, 43, 12, 2, 255, 39, 8, 0, 255, 40, 10, 2, 255, 40, 13, 4, 255, 36, 12, 2, 255, 37, 12, 2, 255, 35, 12, 2, 255, 31, 13, 5, 255, 36, 10, 5, 255, 45, 14, 4, 255, 45, 12, 2, 255, 33, 4, 0, 255, 34, 10, 1, 255, 38, 9, 3, 255, 32, 9, 1, 255, 24, 9, 1, 255, 20, 10, 4, 255, 23, 10, 7, 255, 25, 5, 3, 255, 32, 6, 2, 255, 43, 12, 3, 255, 57, 18, 3, 255, 72, 18, 2, 255, 83, 20, 3, 255, 90, 22, 3, 255, 95, 25, 3, 255, 97, 22, 3, 255, 96, 25, 4, 255, 97, 24, 4, 255, 14, 4, 3, 255, 12, 4, 2, 255, 10, 5, 2, 255, 11, 7, 4, 255, 9, 6, 1, 255, 13, 7, 3, 255, 12, 3, 1, 255, 13, 4, 2, 255, 15, 7, 4, 255, 14, 5, 3, 255, 13, 5, 1, 255, 16, 9, 3, 255, 16, 10, 4, 255, 10, 6, 2, 255, 13, 8, 2, 255, 15, 8, 2, 255, 17, 8, 3, 255, 18, 9, 2, 255, 17, 8, 1, 255, 18, 9, 2, 255, 17, 9, 2, 255, 18, 11, 3, 255, 20, 10, 4, 255, 19, 7, 1, 255, 20, 9, 4, 255, 17, 10, 1, 255, 24, 14, 4, 255, 26, 11, 4, 255, 20, 11, 2, 255, 24, 14, 4, 255, 32, 13, 3, 255, 37, 18, 4, 255, 33, 15, 1, 255, 32, 14, 1, 255, 33, 15, 3, 255, 33, 16, 3, 255, 31, 15, 2, 255, 31, 16, 6, 255, 30, 19, 4, 255, 28, 17, 0, 255, 29, 15, 3, 255, 28, 14, 4, 255, 24, 13, 4, 255, 28, 16, 9, 255, 32, 18, 7, 255, 40, 23, 2, 255, 35, 18, 2, 255, 37, 18, 4, 255, 38, 17, 2, 255, 38, 20, 6, 255, 27, 13, 3, 255, 35, 16, 3, 255, 40, 21, 6, 255, 32, 19, 2, 255, 31, 19, 2, 255, 32, 19, 4, 255, 26, 14, 1, 255, 32, 22, 4, 255, 39, 20, 7, 255, 38, 17, 3, 255, 38, 21, 5, 255, 31, 25, 2, 255, 36, 23, 0, 255, 44, 22, 3, 255, 48, 24, 2, 255, 38, 23, 5, 255, 35, 24, 7, 255, 44, 25, 4, 255, 49, 23, 2, 255, 46, 23, 7, 255, 41, 21, 5, 255, 51, 24, 5, 255, 50, 24, 3, 255, 47, 26, 0, 255, 55, 30, 5, 255, 54, 26, 4, 255, 47, 23, 2, 255, 46, 24, 1, 255, 52, 30, 8, 255, 56, 31, 8, 255, 53, 31, 4, 255, 50, 31, 8, 255, 50, 24, 5, 255, 45, 25, 5, 255, 46, 25, 2, 255, 47, 23, 2, 255, 47, 23, 6, 255, 50, 25, 3, 255, 43, 28, 2, 255, 49, 26, 2, 255, 54, 26, 3, 255, 59, 27, 6, 255, 58, 28, 3, 255, 49, 28, 3, 255, 54, 26, 5, 255, 59, 29, 2, 255, 57, 31, 4, 255, 54, 27, 3, 255, 52, 25, 2, 255, 54, 28, 3, 255, 56, 30, 5, 255, 55, 26, 4, 255, 56, 26, 4, 255, 50, 28, 1, 255, 52, 30, 2, 255, 58, 32, 5, 255, 56, 31, 3, 255, 59, 32, 2, 255, 64, 28, 3, 255, 62, 30, 6, 255, 58, 27, 4, 255, 60, 32, 5, 255, 59, 29, 1, 255, 61, 28, 4, 255, 68, 34, 4, 255, 55, 27, 1, 255, 53, 24, 2, 255, 59, 31, 4, 255, 52, 31, 4, 255, 51, 30, 4, 255, 57, 28, 4, 255, 63, 30, 7, 255, 63, 31, 7, 255, 64, 31, 1, 255, 65, 27, 5, 255, 60, 32, 8, 255, 63, 31, 5, 255, 57, 25, 3, 255, 55, 36, 5, 255, 60, 39, 4, 255, 64, 39, 4, 255, 64, 35, 6, 255, 65, 35, 6, 255, 71, 38, 6, 255, 70, 40, 6, 255, 65, 43, 3, 255, 64, 46, 7, 255, 60, 42, 12, 255, 64, 45, 14, 255, 63, 45, 7, 255, 64, 47, 6, 255, 67, 49, 18, 255, 58, 45, 17, 255, 61, 48, 17, 255, 72, 56, 22, 255, 65, 57, 17, 255, 62, 57, 22, 255, 71, 63, 20, 255, 71, 62, 22, 255, 72, 64, 16, 255, 70, 63, 24, 255, 68, 63, 33, 255, 76, 70, 21, 255, 74, 64, 32, 255, 69, 62, 42, 255, 71, 69, 43, 255, 72, 73, 39, 255, 74, 76, 39, 255, 75, 77, 40, 255, 75, 76, 47, 255, 70, 74, 54, 255, 74, 79, 51, 255, 77, 83, 48, 255, 77, 84, 53, 255, 80, 86, 59, 255, 81, 88, 58, 255, 82, 90, 62, 255, 82, 91, 59, 255, 86, 95, 69, 255, 87, 96, 76, 255, 87, 99, 64, 255, 92, 104, 66, 255, 95, 107, 76, 255, 90, 105, 81, 255, 90, 107, 81, 255, 92, 108, 81, 255, 95, 112, 82, 255, 96, 114, 81, 255, 95, 115, 81, 255, 97, 120, 74, 255, 98, 120, 71, 255, 98, 115, 79, 255, 103, 116, 82, 255, 102, 115, 80, 255, 100, 115, 78, 255, 98, 117, 68, 255, 100, 118, 68, 255, 99, 115, 70, 255, 97, 113, 64, 255, 97, 112, 74, 255, 95, 108, 75, 255, 95, 111, 60, 255, 93, 109, 60, 255, 94, 106, 64, 255, 91, 106, 58, 255, 90, 105, 45, 255, 95, 101, 49, 255, 97, 97, 54, 255, 94, 94, 57, 255, 92, 95, 46, 255, 92, 94, 41, 255, 93, 92, 40, 255, 91, 88, 34, 255, 90, 86, 32, 255, 92, 83, 37, 255, 93, 79, 32, 255, 92, 80, 25, 255, 90, 77, 24, 255, 85, 72, 29, 255, 87, 75, 26, 255, 87, 72, 26, 255, 91, 71, 29, 255, 89, 71, 18, 255, 89, 68, 16, 255, 94, 68, 18, 255, 95, 67, 12, 255, 90, 65, 12, 255, 84, 61, 16, 255, 81, 57, 18, 255, 85, 56, 15, 255, 87, 56, 15, 255, 89, 53, 12, 255, 98, 58, 13, 255, 99, 59, 8, 255, 93, 49, 13, 255, 85, 48, 5, 255, 84, 51, 7, 255, 86, 49, 15, 255, 86, 49, 10, 255, 80, 47, 9, 255, 78, 48, 7, 255, 91, 46, 4, 255, 102, 46, 7, 255, 90, 45, 6, 255, 80, 44, 5, 255, 83, 44, 8, 255, 85, 41, 6, 255, 87, 42, 5, 255, 80, 38, 5, 255, 80, 41, 1, 255, 81, 41, 1, 255, 82, 38, 4, 255, 82, 38, 1, 255, 80, 36, 1, 255, 81, 39, 4, 255, 77, 37, 1, 255, 80, 38, 4, 255, 86, 40, 6, 255, 89, 38, 3, 255, 97, 39, 7, 255, 102, 39, 10, 255, 92, 37, 1, 255, 95, 43, 1, 255, 98, 44, 5, 255, 89, 38, 5, 255, 77, 31, 5, 255, 80, 34, 5, 255, 84, 32, 5, 255, 82, 33, 5, 255, 79, 35, 6, 255, 80, 32, 3, 255, 83, 32, 1, 255, 81, 28, 4, 255, 81, 29, 10, 255, 74, 29, 2, 255, 79, 34, 5, 255, 83, 34, 6, 255, 78, 27, 4, 255, 81, 32, 8, 255, 98, 36, 5, 255, 110, 31, 3, 255, 105, 30, 2, 255, 106, 33, 4, 255, 106, 32, 3, 255, 99, 32, 1, 255, 91, 30, 1, 255, 67, 29, 1, 255, 65, 27, 2, 255, 66, 26, 4, 255, 58, 26, 5, 255, 66, 25, 2, 255, 85, 37, 2, 255, 96, 33, 1, 255, 98, 29, 1, 255, 92, 31, 0, 255, 100, 33, 2, 255, 101, 32, 4, 255, 82, 28, 1, 255, 74, 27, 4, 255, 71, 25, 1, 255, 72, 26, 1, 255, 72, 29, 4, 255, 69, 29, 3, 255, 69, 30, 3, 255, 61, 24, 2, 255, 64, 23, 5, 255, 73, 25, 5, 255, 76, 25, 4, 255, 71, 25, 3, 255, 68, 27, 5, 255, 67, 26, 3, 255, 73, 25, 2, 255, 72, 24, 6, 255, 77, 23, 4, 255, 83, 27, 1, 255, 92, 28, 1, 255, 87, 23, 1, 255, 69, 24, 3, 255, 70, 23, 5, 255, 73, 22, 5, 255, 70, 21, 4, 255, 63, 20, 2, 255, 65, 22, 4, 255, 70, 25, 4, 255, 73, 23, 2, 255, 71, 19, 3, 255, 69, 23, 4, 255, 64, 25, 2, 255, 61, 24, 3, 255, 62, 23, 1, 255, 59, 22, 3, 255, 61, 21, 3, 255, 63, 22, 4, 255, 68, 24, 4, 255, 75, 24, 3, 255, 73, 23, 3, 255, 78, 24, 5, 255, 80, 22, 4, 255, 75, 21, 4, 255, 71, 25, 7, 255, 71, 23, 6, 255, 73, 21, 3, 255, 73, 24, 3, 255, 72, 21, 1, 255, 78, 24, 3, 255, 79, 27, 5, 255, 74, 22, 2, 255, 75, 20, 1, 255, 79, 25, 4, 255, 74, 21, 4, 255, 76, 18, 1, 255, 77, 19, 1, 255, 72, 20, 1, 255, 69, 21, 2, 255, 71, 19, 1, 255, 79, 20, 1, 255, 80, 19, 0, 255, 74, 19, 3, 255, 68, 16, 2, 255, 71, 19, 4, 255, 70, 21, 2, 255, 67, 19, 0, 255, 66, 17, 2, 255, 66, 16, 1, 255, 66, 18, 2, 255, 59, 18, 3, 255, 56, 18, 3, 255, 55, 18, 2, 255, 58, 16, 5, 255, 63, 18, 6, 255, 66, 19, 4, 255, 65, 18, 3, 255, 60, 16, 2, 255, 58, 16, 2, 255, 59, 16, 3, 255, 56, 15, 2, 255, 55, 16, 2, 255, 54, 18, 4, 255, 43, 13, 2, 255, 40, 13, 3, 255, 44, 13, 5, 255, 41, 14, 4, 255, 42, 14, 4, 255, 40, 12, 1, 255, 38, 13, 3, 255, 36, 12, 2, 255, 40, 15, 6, 255, 37, 9, 0, 255, 39, 12, 3, 255, 38, 10, 2, 255, 37, 10, 0, 255, 42, 14, 5, 255, 35, 9, 8, 255, 31, 8, 4, 255, 35, 7, 4, 255, 33, 8, 3, 255, 31, 11, 3, 255, 23, 5, 0, 255, 27, 9, 5, 255, 25, 11, 2, 255, 20, 5, 2, 255, 21, 4, 3, 255, 29, 10, 1, 255, 40, 12, 1, 255, 57, 16, 3, 255, 76, 20, 6, 255, 88, 22, 5, 255, 93, 20, 2, 255, 90, 24, 1, 255, 87, 27, 1, 255, 14, 4, 3, 255, 14, 5, 3, 255, 10, 5, 2, 255, 9, 4, 1, 255, 9, 5, 1, 255, 12, 7, 3, 255, 12, 6, 3, 255, 12, 5, 2, 255, 12, 5, 2, 255, 10, 6, 2, 255, 12, 7, 3, 255, 12, 8, 3, 255, 12, 8, 3, 255, 13, 9, 4, 255, 11, 5, 2, 255, 14, 6, 2, 255, 18, 9, 4, 255, 15, 6, 1, 255, 18, 9, 2, 255, 17, 8, 3, 255, 16, 9, 3, 255, 18, 10, 3, 255, 18, 8, 2, 255, 21, 9, 2, 255, 22, 10, 4, 255, 17, 8, 0, 255, 22, 12, 4, 255, 25, 12, 3, 255, 22, 13, 2, 255, 29, 10, 1, 255, 35, 12, 2, 255, 29, 18, 3, 255, 32, 15, 2, 255, 32, 14, 3, 255, 30, 14, 3, 255, 29, 13, 1, 255, 30, 14, 2, 255, 32, 14, 5, 255, 31, 16, 5, 255, 30, 15, 4, 255, 25, 11, 1, 255, 24, 14, 4, 255, 24, 16, 5, 255, 26, 16, 4, 255, 31, 16, 3, 255, 37, 19, 5, 255, 36, 21, 6, 255, 36, 20, 4, 255, 35, 16, 2, 255, 40, 21, 7, 255, 30, 18, 2, 255, 41, 17, 7, 255, 41, 15, 4, 255, 39, 16, 3, 255, 35, 17, 3, 255, 32, 15, 1, 255, 39, 20, 6, 255, 39, 21, 4, 255, 38, 17, 3, 255, 39, 17, 3, 255, 46, 17, 5, 255, 43, 15, 1, 255, 45, 21, 3, 255, 41, 23, 3, 255, 43, 21, 0, 255, 45, 24, 3, 255, 42, 23, 2, 255, 44, 27, 3, 255, 44, 24, 1, 255, 51, 22, 3, 255, 50, 24, 4, 255, 48, 25, 1, 255, 52, 29, 4, 255, 49, 28, 1, 255, 48, 26, 1, 255, 50, 25, 5, 255, 51, 26, 7, 255, 48, 26, 3, 255, 50, 26, 11, 255, 50, 32, 11, 255, 53, 33, 8, 255, 59, 33, 11, 255, 50, 28, 2, 255, 44, 27, 10, 255, 48, 27, 6, 255, 50, 26, 3, 255, 48, 24, 2, 255, 51, 24, 1, 255, 43, 26, 2, 255, 50, 25, 6, 255, 46, 28, 2, 255, 48, 32, 3, 255, 54, 25, 3, 255, 53, 32, 7, 255, 53, 33, 5, 255, 58, 28, 3, 255, 52, 28, 4, 255, 55, 28, 6, 255, 52, 26, 3, 255, 52, 26, 3, 255, 54, 28, 6, 255, 53, 22, 4, 255, 55, 25, 4, 255, 54, 28, 2, 255, 53, 27, 0, 255, 54, 30, 3, 255, 55, 32, 3, 255, 56, 28, 1, 255, 62, 27, 2, 255, 61, 26, 4, 255, 59, 29, 5, 255, 58, 29, 4, 255, 57, 27, 3, 255, 58, 28, 2, 255, 55, 26, 3, 255, 60, 25, 7, 255, 62, 32, 5, 255, 52, 28, 4, 255, 52, 30, 5, 255, 51, 27, 4, 255, 56, 29, 6, 255, 58, 29, 3, 255, 56, 28, 5, 255, 56, 31, 2, 255, 57, 34, 6, 255, 57, 31, 9, 255, 66, 31, 4, 255, 58, 34, 7, 255, 57, 34, 6, 255, 60, 35, 5, 255, 59, 34, 3, 255, 60, 34, 9, 255, 59, 32, 9, 255, 66, 34, 7, 255, 65, 35, 5, 255, 62, 38, 7, 255, 64, 43, 11, 255, 58, 37, 7, 255, 65, 39, 14, 255, 71, 46, 16, 255, 70, 46, 9, 255, 72, 53, 10, 255, 72, 53, 10, 255, 68, 52, 13, 255, 64, 56, 17, 255, 69, 53, 17, 255, 63, 57, 22, 255, 61, 60, 21, 255, 69, 62, 15, 255, 72, 60, 34, 255, 70, 64, 20, 255, 70, 69, 17, 255, 70, 65, 26, 255, 75, 69, 34, 255, 68, 66, 35, 255, 68, 70, 30, 255, 72, 72, 46, 255, 75, 77, 36, 255, 74, 75, 49, 255, 72, 73, 57, 255, 71, 78, 57, 255, 74, 83, 50, 255, 79, 87, 49, 255, 81, 89, 55, 255, 81, 87, 61, 255, 82, 88, 59, 255, 87, 98, 59, 255, 87, 97, 56, 255, 86, 95, 67, 255, 88, 98, 74, 255, 90, 104, 73, 255, 91, 104, 79, 255, 90, 103, 77, 255, 88, 110, 78, 255, 88, 111, 81, 255, 88, 112, 83, 255, 91, 112, 85, 255, 96, 115, 88, 255, 97, 117, 90, 255, 101, 116, 89, 255, 101, 119, 83, 255, 95, 118, 80, 255, 97, 119, 79, 255, 98, 119, 80, 255, 95, 117, 81, 255, 96, 120, 75, 255, 96, 116, 73, 255, 96, 113, 75, 255, 100, 116, 72, 255, 98, 114, 70, 255, 96, 108, 72, 255, 96, 105, 71, 255, 100, 106, 57, 255, 101, 105, 56, 255, 96, 108, 52, 255, 93, 106, 52, 255, 94, 97, 61, 255, 95, 94, 56, 255, 94, 96, 53, 255, 90, 91, 54, 255, 90, 88, 42, 255, 95, 89, 44, 255, 99, 88, 33, 255, 99, 84, 34, 255, 97, 81, 38, 255, 90, 76, 38, 255, 93, 76, 35, 255, 94, 75, 26, 255, 92, 73, 23, 255, 97, 76, 17, 255, 99, 72, 16, 255, 88, 68, 23, 255, 88, 67, 19, 255, 88, 65, 21, 255, 85, 65, 19, 255, 85, 64, 16, 255, 89, 59, 17, 255, 90, 58, 16, 255, 84, 57, 18, 255, 81, 54, 17, 255, 82, 53, 13, 255, 92, 54, 7, 255, 113, 58, 11, 255, 118, 54, 9, 255, 92, 53, 6, 255, 85, 49, 8, 255, 84, 49, 10, 255, 79, 45, 9, 255, 83, 48, 8, 255, 84, 47, 2, 255, 84, 44, 7, 255, 85, 43, 7, 255, 84, 41, 4, 255, 83, 44, 5, 255, 86, 43, 5, 255, 88, 40, 3, 255, 83, 41, 0, 255, 82, 40, 1, 255, 83, 39, 7, 255, 83, 38, 3, 255, 85, 39, 2, 255, 81, 35, 9, 255, 77, 36, 8, 255, 84, 36, 4, 255, 86, 35, 4, 255, 83, 35, 2, 255, 80, 35, 2, 255, 82, 36, 3, 255, 87, 36, 1, 255, 93, 37, 3, 255, 92, 36, 4, 255, 93, 38, 2, 255, 99, 38, 1, 255, 104, 38, 5, 255, 90, 33, 4, 255, 79, 32, 4, 255, 71, 33, 0, 255, 77, 31, 3, 255, 82, 31, 8, 255, 81, 26, 5, 255, 87, 26, 3, 255, 83, 30, 0, 255, 82, 27, 2, 255, 84, 28, 5, 255, 81, 31, 2, 255, 82, 32, 1, 255, 85, 34, 6, 255, 78, 29, 5, 255, 71, 26, 7, 255, 78, 29, 5, 255, 90, 32, 4, 255, 97, 35, 4, 255, 105, 32, 1, 255, 106, 34, 2, 255, 99, 33, 0, 255, 87, 28, 4, 255, 72, 27, 5, 255, 74, 22, 4, 255, 87, 28, 4, 255, 82, 32, 1, 255, 82, 29, 2, 255, 95, 34, 7, 255, 97, 33, 1, 255, 97, 29, 2, 255, 99, 31, 3, 255, 102, 28, 2, 255, 104, 31, 9, 255, 87, 24, 4, 255, 66, 23, 0, 255, 68, 25, 3, 255, 75, 26, 3, 255, 74, 26, 3, 255, 73, 24, 2, 255, 72, 23, 3, 255, 70, 22, 1, 255, 70, 21, 3, 255, 73, 24, 7, 255, 67, 21, 3, 255, 69, 26, 5, 255, 70, 25, 2, 255, 71, 24, 1, 255, 72, 26, 3, 255, 72, 23, 2, 255, 73, 22, 4, 255, 70, 26, 3, 255, 75, 23, 3, 255, 80, 22, 4, 255, 72, 23, 5, 255, 71, 22, 5, 255, 68, 21, 4, 255, 63, 22, 3, 255, 61, 21, 3, 255, 69, 21, 6, 255, 72, 24, 7, 255, 67, 24, 5, 255, 62, 19, 6, 255, 70, 24, 8, 255, 65, 19, 2, 255, 59, 17, 3, 255, 57, 21, 2, 255, 61, 23, 2, 255, 67, 23, 5, 255, 63, 19, 2, 255, 60, 19, 1, 255, 68, 23, 6, 255, 61, 20, 4, 255, 65, 22, 1, 255, 77, 25, 2, 255, 70, 22, 1, 255, 62, 19, 1, 255, 65, 17, 5, 255, 70, 18, 7, 255, 71, 21, 6, 255, 70, 21, 2, 255, 71, 22, 3, 255, 76, 20, 3, 255, 74, 20, 5, 255, 72, 23, 5, 255, 78, 22, 6, 255, 76, 23, 2, 255, 77, 21, 2, 255, 80, 23, 3, 255, 72, 22, 1, 255, 65, 22, 2, 255, 69, 22, 2, 255, 77, 24, 3, 255, 74, 23, 1, 255, 67, 18, 1, 255, 65, 14, 1, 255, 69, 19, 4, 255, 69, 23, 4, 255, 63, 21, 1, 255, 70, 17, 4, 255, 72, 17, 3, 255, 71, 18, 3, 255, 64, 17, 3, 255, 65, 19, 6, 255, 66, 16, 2, 255, 69, 17, 5, 255, 65, 16, 3, 255, 61, 18, 1, 255, 64, 16, 1, 255, 67, 14, 1, 255, 64, 15, 1, 255, 61, 18, 2, 255, 58, 16, 2, 255, 56, 14, 0, 255, 55, 15, 2, 255, 48, 17, 5, 255, 43, 13, 2, 255, 43, 15, 4, 255, 40, 11, 2, 255, 45, 11, 2, 255, 48, 14, 4, 255, 40, 11, 2, 255, 37, 12, 5, 255, 38, 10, 5, 255, 39, 12, 3, 255, 41, 13, 2, 255, 47, 12, 5, 255, 41, 11, 1, 255, 32, 10, 4, 255, 27, 8, 6, 255, 36, 13, 7, 255, 27, 10, 3, 255, 26, 8, 6, 255, 25, 7, 5, 255, 31, 11, 5, 255, 34, 12, 4, 255, 31, 12, 6, 255, 26, 8, 3, 255, 23, 7, 3, 255, 18, 9, 3, 255, 16, 7, 2, 255, 27, 7, 2, 255, 50, 13, 2, 255, 69, 17, 3, 255, 87, 21, 5, 255, 91, 24, 2, 255, 90, 23, 0, 255, 10, 3, 1, 255, 11, 5, 3, 255, 10, 5, 2, 255, 9, 4, 1, 255, 12, 5, 3, 255, 9, 3, 0, 255, 9, 4, 1, 255, 9, 6, 2, 255, 10, 6, 3, 255, 10, 5, 1, 255, 9, 6, 1, 255, 9, 7, 2, 255, 11, 8, 3, 255, 15, 7, 4, 255, 14, 4, 2, 255, 15, 4, 2, 255, 17, 8, 3, 255, 17, 9, 3, 255, 15, 10, 4, 255, 12, 7, 1, 255, 12, 6, 1, 255, 17, 11, 3, 255, 19, 11, 3, 255, 16, 6, 0, 255, 22, 14, 4, 255, 21, 12, 3, 255, 23, 11, 4, 255, 25, 12, 2, 255, 34, 14, 3, 255, 31, 13, 1, 255, 29, 14, 1, 255, 34, 13, 2, 255, 33, 14, 1, 255, 32, 14, 3, 255, 30, 14, 4, 255, 27, 14, 1, 255, 26, 13, 0, 255, 28, 14, 4, 255, 29, 13, 6, 255, 29, 14, 7, 255, 24, 11, 3, 255, 23, 14, 5, 255, 23, 15, 3, 255, 32, 17, 2, 255, 37, 19, 3, 255, 35, 21, 6, 255, 27, 16, 3, 255, 29, 18, 3, 255, 35, 16, 1, 255, 39, 18, 3, 255, 32, 14, 5, 255, 33, 15, 4, 255, 34, 17, 2, 255, 34, 17, 1, 255, 33, 19, 3, 255, 34, 19, 4, 255, 38, 19, 3, 255, 41, 21, 3, 255, 38, 20, 2, 255, 38, 22, 2, 255, 42, 19, 4, 255, 42, 16, 5, 255, 41, 17, 3, 255, 37, 21, 5, 255, 34, 21, 7, 255, 41, 21, 4, 255, 46, 21, 2, 255, 41, 21, 1, 255, 43, 26, 4, 255, 48, 26, 3, 255, 53, 27, 2, 255, 50, 29, 2, 255, 45, 24, 2, 255, 48, 24, 4, 255, 42, 22, 4, 255, 41, 21, 3, 255, 48, 23, 4, 255, 53, 28, 0, 255, 52, 27, 3, 255, 51, 30, 3, 255, 42, 27, 6, 255, 44, 28, 16, 255, 47, 26, 7, 255, 47, 26, 3, 255, 46, 23, 4, 255, 46, 22, 3, 255, 48, 24, 1, 255, 50, 21, 2, 255, 50, 27, 6, 255, 53, 26, 5, 255, 44, 28, 1, 255, 46, 31, 3, 255, 54, 28, 5, 255, 53, 29, 5, 255, 58, 28, 4, 255, 58, 27, 3, 255, 50, 29, 5, 255, 50, 25, 3, 255, 53, 27, 5, 255, 54, 28, 3, 255, 54, 26, 2, 255, 57, 24, 4, 255, 56, 27, 5, 255, 58, 25, 4, 255, 55, 25, 3, 255, 51, 30, 4, 255, 51, 30, 5, 255, 53, 27, 4, 255, 54, 27, 4, 255, 60, 26, 3, 255, 56, 28, 7, 255, 51, 25, 5, 255, 50, 23, 3, 255, 55, 31, 11, 255, 46, 28, 16, 255, 53, 28, 8, 255, 54, 28, 1, 255, 56, 29, 1, 255, 57, 27, 3, 255, 62, 29, 9, 255, 63, 32, 6, 255, 61, 28, 4, 255, 57, 28, 6, 255, 59, 27, 3, 255, 51, 29, 1, 255, 51, 28, 5, 255, 65, 31, 1, 255, 64, 31, 6, 255, 68, 34, 4, 255, 66, 35, 3, 255, 59, 33, 1, 255, 55, 35, 6, 255, 55, 34, 7, 255, 64, 38, 7, 255, 68, 36, 6, 255, 64, 35, 10, 255, 62, 41, 13, 255, 63, 46, 7, 255, 66, 49, 4, 255, 71, 49, 10, 255, 65, 44, 15, 255, 61, 50, 19, 255, 70, 53, 17, 255, 70, 53, 11, 255, 71, 54, 13, 255, 71, 58, 21, 255, 66, 57, 21, 255, 64, 60, 29, 255, 67, 63, 17, 255, 69, 61, 35, 255, 66, 65, 30, 255, 64, 68, 24, 255, 73, 67, 43, 255, 75, 71, 31, 255, 71, 70, 31, 255, 68, 68, 40, 255, 72, 74, 39, 255, 73, 73, 40, 255, 71, 75, 49, 255, 70, 80, 45, 255, 76, 81, 53, 255, 77, 81, 55, 255, 78, 83, 57, 255, 78, 86, 58, 255, 79, 89, 58, 255, 82, 94, 60, 255, 91, 101, 61, 255, 88, 97, 59, 255, 87, 98, 70, 255, 90, 101, 74, 255, 89, 102, 77, 255, 91, 104, 80, 255, 92, 107, 69, 255, 92, 111, 76, 255, 87, 112, 77, 255, 90, 117, 84, 255, 95, 117, 86, 255, 99, 116, 85, 255, 100, 117, 84, 255, 101, 114, 92, 255, 101, 118, 87, 255, 96, 118, 79, 255, 101, 121, 79, 255, 102, 123, 81, 255, 96, 118, 79, 255, 96, 119, 77, 255, 99, 116, 75, 255, 98, 114, 70, 255, 101, 117, 73, 255, 95, 113, 68, 255, 95, 113, 68, 255, 93, 108, 65, 255, 93, 105, 64, 255, 98, 105, 60, 255, 94, 103, 55, 255, 92, 100, 58, 255, 97, 98, 54, 255, 91, 93, 52, 255, 93, 96, 45, 255, 93, 93, 46, 255, 90, 90, 37, 255, 89, 88, 37, 255, 91, 86, 40, 255, 90, 83, 37, 255, 87, 82, 24, 255, 88, 79, 25, 255, 88, 75, 31, 255, 89, 74, 27, 255, 91, 75, 18, 255, 94, 74, 20, 255, 94, 71, 12, 255, 91, 71, 19, 255, 87, 70, 12, 255, 86, 64, 19, 255, 87, 62, 24, 255, 87, 61, 14, 255, 84, 60, 15, 255, 85, 59, 12, 255, 84, 56, 7, 255, 83, 56, 12, 255, 82, 53, 12, 255, 96, 59, 15, 255, 112, 61, 12, 255, 115, 58, 0, 255, 89, 52, 7, 255, 84, 51, 15, 255, 81, 50, 7, 255, 80, 46, 8, 255, 78, 42, 7, 255, 80, 47, 3, 255, 83, 46, 6, 255, 86, 41, 5, 255, 85, 43, 4, 255, 80, 41, 2, 255, 87, 42, 6, 255, 83, 39, 3, 255, 84, 41, 2, 255, 85, 35, 4, 255, 82, 39, 10, 255, 79, 39, 4, 255, 84, 43, 1, 255, 81, 35, 8, 255, 80, 37, 7, 255, 80, 39, 4, 255, 78, 35, 1, 255, 82, 37, 3, 255, 80, 36, 4, 255, 81, 36, 4, 255, 91, 39, 4, 255, 97, 37, 0, 255, 101, 40, 4, 255, 96, 37, 5, 255, 90, 35, 3, 255, 86, 31, 2, 255, 88, 32, 2, 255, 93, 33, 2, 255, 92, 32, 8, 255, 78, 32, 4, 255, 73, 30, 3, 255, 75, 27, 3, 255, 83, 32, 7, 255, 80, 32, 1, 255, 87, 33, 0, 255, 96, 35, 1, 255, 96, 34, 2, 255, 91, 34, 2, 255, 81, 31, 1, 255, 75, 29, 2, 255, 77, 30, 4, 255, 77, 31, 2, 255, 73, 30, 2, 255, 84, 30, 5, 255, 80, 26, 1, 255, 84, 29, 2, 255, 85, 29, 3, 255, 79, 26, 4, 255, 78, 24, 1, 255, 73, 25, 2, 255, 84, 27, 6, 255, 97, 30, 3, 255, 102, 35, 3, 255, 99, 29, 1, 255, 101, 33, 4, 255, 100, 35, 6, 255, 100, 33, 5, 255, 97, 30, 4, 255, 88, 28, 4, 255, 76, 28, 2, 255, 67, 26, 5, 255, 69, 28, 5, 255, 75, 25, 4, 255, 74, 26, 4, 255, 73, 24, 3, 255, 72, 23, 5, 255, 65, 23, 4, 255, 70, 27, 6, 255, 68, 25, 2, 255, 67, 25, 1, 255, 67, 25, 1, 255, 68, 24, 2, 255, 67, 22, 4, 255, 68, 25, 2, 255, 69, 23, 0, 255, 67, 22, 2, 255, 66, 21, 6, 255, 60, 19, 5, 255, 64, 20, 2, 255, 67, 22, 2, 255, 68, 21, 3, 255, 70, 22, 3, 255, 70, 25, 5, 255, 69, 23, 5, 255, 70, 20, 3, 255, 66, 18, 3, 255, 57, 19, 2, 255, 58, 21, 3, 255, 61, 21, 4, 255, 64, 20, 2, 255, 68, 25, 5, 255, 58, 20, 3, 255, 64, 20, 2, 255, 65, 21, 5, 255, 63, 18, 3, 255, 66, 18, 3, 255, 63, 24, 6, 255, 58, 22, 5, 255, 62, 20, 4, 255, 67, 28, 5, 255, 67, 25, 4, 255, 67, 17, 2, 255, 65, 17, 4, 255, 69, 21, 4, 255, 75, 25, 5, 255, 70, 24, 2, 255, 77, 25, 3, 255, 75, 23, 2, 255, 72, 21, 2, 255, 73, 23, 4, 255, 75, 27, 3, 255, 75, 24, 0, 255, 77, 28, 3, 255, 75, 28, 4, 255, 70, 21, 1, 255, 70, 18, 2, 255, 72, 21, 3, 255, 74, 23, 3, 255, 71, 20, 1, 255, 65, 18, 3, 255, 65, 17, 4, 255, 67, 17, 3, 255, 66, 17, 3, 255, 65, 18, 4, 255, 69, 18, 5, 255, 66, 13, 0, 255, 70, 18, 4, 255, 65, 19, 3, 255, 67, 19, 4, 255, 73, 17, 2, 255, 72, 20, 1, 255, 63, 19, 3, 255, 58, 16, 3, 255, 64, 18, 3, 255, 70, 18, 1, 255, 63, 15, 0, 255, 55, 13, 1, 255, 54, 16, 4, 255, 56, 16, 2, 255, 58, 12, 2, 255, 53, 15, 5, 255, 55, 15, 6, 255, 51, 15, 1, 255, 50, 13, 2, 255, 58, 14, 5, 255, 59, 15, 6, 255, 47, 10, 4, 255, 39, 10, 5, 255, 38, 9, 5, 255, 44, 13, 6, 255, 38, 9, 1, 255, 36, 11, 3, 255, 32, 12, 1, 255, 30, 9, 3, 255, 31, 7, 5, 255, 39, 12, 4, 255, 37, 11, 4, 255, 28, 8, 1, 255, 24, 8, 1, 255, 29, 10, 4, 255, 32, 8, 4, 255, 33, 10, 3, 255, 30, 10, 2, 255, 27, 8, 0, 255, 26, 9, 2, 255, 23, 9, 5, 255, 22, 8, 5, 255, 27, 7, 4, 255, 33, 6, 0, 255, 50, 13, 2, 255, 74, 16, 1, 255, 89, 15, 1, 255, 7, 3, 2, 255, 6, 2, 1, 255, 8, 4, 1, 255, 9, 5, 2, 255, 11, 4, 1, 255, 11, 2, 0, 255, 13, 4, 2, 255, 13, 4, 2, 255, 14, 7, 4, 255, 15, 7, 4, 255, 13, 6, 3, 255, 13, 6, 4, 255, 15, 6, 3, 255, 16, 7, 3, 255, 16, 8, 2, 255, 13, 6, 1, 255, 16, 9, 3, 255, 16, 9, 3, 255, 15, 8, 2, 255, 14, 7, 2, 255, 16, 11, 4, 255, 20, 13, 4, 255, 18, 9, 1, 255, 17, 8, 1, 255, 19, 10, 2, 255, 24, 13, 6, 255, 22, 11, 2, 255, 24, 11, 3, 255, 27, 13, 3, 255, 25, 12, 1, 255, 26, 15, 3, 255, 30, 18, 6, 255, 25, 12, 1, 255, 28, 14, 4, 255, 26, 13, 3, 255, 23, 13, 2, 255, 25, 15, 3, 255, 30, 15, 4, 255, 31, 13, 2, 255, 32, 14, 5, 255, 30, 14, 7, 255, 25, 13, 3, 255, 26, 15, 2, 255, 35, 18, 7, 255, 34, 15, 6, 255, 30, 20, 3, 255, 23, 19, 4, 255, 28, 17, 3, 255, 36, 18, 4, 255, 31, 15, 1, 255, 30, 15, 1, 255, 31, 16, 6, 255, 27, 21, 4, 255, 30, 20, 1, 255, 44, 21, 5, 255, 45, 21, 6, 255, 33, 18, 1, 255, 33, 20, 3, 255, 36, 19, 4, 255, 32, 18, 1, 255, 40, 23, 4, 255, 47, 21, 3, 255, 38, 19, 1, 255, 36, 18, 4, 255, 42, 23, 6, 255, 41, 20, 5, 255, 36, 24, 8, 255, 33, 20, 2, 255, 51, 27, 5, 255, 47, 26, 5, 255, 41, 22, 4, 255, 45, 27, 3, 255, 39, 24, 6, 255, 45, 24, 6, 255, 47, 24, 3, 255, 43, 24, 5, 255, 49, 23, 2, 255, 46, 24, 2, 255, 49, 23, 3, 255, 55, 29, 4, 255, 51, 32, 14, 255, 46, 29, 10, 255, 46, 26, 5, 255, 46, 28, 3, 255, 50, 26, 4, 255, 48, 21, 1, 255, 49, 24, 2, 255, 50, 28, 5, 255, 48, 27, 1, 255, 54, 27, 3, 255, 50, 29, 4, 255, 48, 31, 1, 255, 50, 38, 7, 255, 50, 40, 12, 255, 53, 29, 7, 255, 57, 31, 5, 255, 50, 29, 1, 255, 52, 28, 0, 255, 53, 28, 4, 255, 52, 27, 4, 255, 47, 24, 2, 255, 53, 26, 4, 255, 51, 23, 4, 255, 61, 29, 7, 255, 57, 24, 2, 255, 53, 29, 4, 255, 54, 32, 3, 255, 53, 25, 2, 255, 57, 27, 5, 255, 59, 29, 4, 255, 58, 31, 1, 255, 45, 24, 8, 255, 44, 28, 15, 255, 45, 29, 46, 255, 43, 30, 46, 255, 42, 26, 5, 255, 50, 28, 4, 255, 55, 26, 2, 255, 56, 27, 2, 255, 56, 30, 3, 255, 57, 31, 0, 255, 56, 32, 3, 255, 53, 30, 3, 255, 59, 29, 2, 255, 59, 27, 3, 255, 58, 28, 3, 255, 58, 29, 3, 255, 60, 30, 1, 255, 64, 29, 1, 255, 66, 35, 5, 255, 57, 31, 6, 255, 60, 33, 7, 255, 60, 31, 10, 255, 51, 35, 7, 255, 56, 37, 12, 255, 65, 36, 4, 255, 63, 38, 5, 255, 67, 45, 6, 255, 67, 47, 4, 255, 57, 45, 8, 255, 65, 51, 13, 255, 65, 48, 14, 255, 63, 50, 24, 255, 69, 49, 27, 255, 65, 53, 18, 255, 56, 57, 20, 255, 71, 57, 22, 255, 69, 62, 21, 255, 68, 59, 36, 255, 64, 64, 24, 255, 66, 65, 39, 255, 66, 65, 34, 255, 71, 69, 33, 255, 72, 68, 34, 255, 74, 70, 37, 255, 72, 67, 41, 255, 71, 74, 31, 255, 71, 80, 43, 255, 69, 77, 45, 255, 76, 82, 46, 255, 75, 79, 54, 255, 74, 79, 56, 255, 76, 84, 63, 255, 79, 88, 67, 255, 79, 90, 59, 255, 84, 95, 62, 255, 83, 96, 71, 255, 83, 95, 70, 255, 85, 99, 67, 255, 87, 104, 73, 255, 89, 104, 82, 255, 90, 106, 78, 255, 96, 113, 72, 255, 97, 112, 79, 255, 93, 112, 82, 255, 97, 117, 88, 255, 100, 116, 86, 255, 104, 119, 87, 255, 104, 118, 86, 255, 100, 121, 81, 255, 99, 121, 80, 255, 97, 118, 81, 255, 100, 120, 85, 255, 102, 120, 84, 255, 99, 118, 82, 255, 98, 118, 81, 255, 99, 117, 75, 255, 97, 114, 71, 255, 97, 114, 73, 255, 95, 114, 69, 255, 93, 109, 70, 255, 89, 105, 66, 255, 88, 107, 66, 255, 92, 106, 58, 255, 93, 99, 64, 255, 94, 95, 58, 255, 97, 98, 51, 255, 93, 95, 47, 255, 92, 95, 39, 255, 93, 88, 45, 255, 95, 86, 37, 255, 96, 90, 41, 255, 86, 82, 46, 255, 86, 81, 34, 255, 89, 82, 27, 255, 93, 78, 35, 255, 93, 77, 22, 255, 90, 77, 19, 255, 93, 71, 24, 255, 90, 65, 32, 255, 93, 66, 22, 255, 90, 69, 13, 255, 89, 71, 17, 255, 89, 66, 16, 255, 89, 60, 14, 255, 88, 57, 24, 255, 80, 57, 17, 255, 83, 61, 4, 255, 89, 58, 12, 255, 86, 54, 6, 255, 83, 53, 5, 255, 81, 55, 12, 255, 84, 54, 10, 255, 86, 49, 9, 255, 81, 44, 8, 255, 82, 49, 7, 255, 78, 47, 3, 255, 82, 50, 3, 255, 80, 44, 6, 255, 77, 45, 5, 255, 81, 47, 8, 255, 82, 41, 2, 255, 86, 41, 1, 255, 81, 39, 1, 255, 82, 36, 7, 255, 83, 38, 11, 255, 80, 41, 8, 255, 83, 42, 3, 255, 82, 41, 5, 255, 79, 37, 0, 255, 80, 38, 1, 255, 79, 37, 2, 255, 80, 40, 1, 255, 79, 33, 7, 255, 90, 37, 3, 255, 96, 43, 1, 255, 96, 41, 4, 255, 102, 38, 5, 255, 103, 35, 2, 255, 107, 36, 5, 255, 110, 37, 7, 255, 102, 37, 4, 255, 96, 40, 5, 255, 86, 34, 1, 255, 93, 37, 4, 255, 104, 41, 7, 255, 102, 36, 7, 255, 76, 29, 2, 255, 75, 26, 1, 255, 80, 29, 3, 255, 72, 32, 4, 255, 84, 35, 4, 255, 96, 33, 1, 255, 103, 39, 3, 255, 105, 35, 3, 255, 96, 32, 5, 255, 76, 30, 3, 255, 71, 29, 0, 255, 83, 33, 3, 255, 83, 32, 2, 255, 76, 27, 4, 255, 72, 27, 6, 255, 72, 28, 5, 255, 71, 28, 4, 255, 75, 30, 3, 255, 74, 28, 2, 255, 74, 25, 1, 255, 73, 27, 3, 255, 73, 26, 5, 255, 74, 24, 2, 255, 82, 27, 3, 255, 91, 29, 4, 255, 94, 27, 3, 255, 94, 28, 6, 255, 85, 30, 5, 255, 76, 26, 2, 255, 72, 25, 1, 255, 65, 27, 2, 255, 66, 25, 2, 255, 67, 25, 3, 255, 71, 28, 5, 255, 66, 24, 2, 255, 66, 25, 3, 255, 70, 25, 3, 255, 64, 24, 5, 255, 64, 22, 5, 255, 73, 25, 4, 255, 74, 30, 4, 255, 71, 26, 3, 255, 62, 27, 7, 255, 58, 19, 3, 255, 63, 19, 2, 255, 69, 26, 8, 255, 65, 22, 5, 255, 61, 19, 4, 255, 61, 22, 6, 255, 61, 20, 1, 255, 63, 25, 2, 255, 65, 21, 1, 255, 70, 23, 4, 255, 70, 24, 5, 255, 70, 24, 6, 255, 69, 20, 3, 255, 73, 22, 4, 255, 66, 22, 7, 255, 57, 20, 2, 255, 61, 21, 1, 255, 63, 21, 1, 255, 64, 23, 3, 255, 67, 23, 2, 255, 63, 19, 3, 255, 59, 20, 3, 255, 66, 20, 4, 255, 58, 20, 4, 255, 51, 22, 2, 255, 60, 23, 1, 255, 64, 21, 4, 255, 67, 19, 4, 255, 65, 19, 3, 255, 60, 18, 2, 255, 62, 17, 0, 255, 69, 22, 2, 255, 65, 23, 1, 255, 70, 20, 5, 255, 80, 24, 9, 255, 80, 25, 4, 255, 68, 23, 0, 255, 72, 25, 3, 255, 80, 24, 4, 255, 71, 21, 0, 255, 70, 23, 0, 255, 71, 24, 1, 255, 71, 22, 2, 255, 74, 20, 4, 255, 73, 19, 4, 255, 70, 18, 2, 255, 71, 22, 1, 255, 81, 21, 5, 255, 64, 19, 1, 255, 61, 20, 1, 255, 66, 20, 5, 255, 68, 18, 4, 255, 69, 18, 5, 255, 67, 19, 5, 255, 67, 20, 3, 255, 70, 21, 2, 255, 64, 14, 1, 255, 66, 18, 3, 255, 61, 18, 2, 255, 62, 18, 3, 255, 68, 17, 5, 255, 68, 17, 3, 255, 70, 21, 5, 255, 70, 22, 6, 255, 62, 13, 2, 255, 59, 14, 6, 255, 60, 13, 3, 255, 58, 14, 0, 255, 51, 17, 1, 255, 52, 18, 4, 255, 54, 13, 3, 255, 48, 13, 2, 255, 53, 16, 5, 255, 55, 14, 4, 255, 51, 14, 5, 255, 40, 11, 2, 255, 40, 10, 3, 255, 42, 9, 4, 255, 35, 8, 3, 255, 32, 9, 0, 255, 37, 13, 1, 255, 34, 11, 3, 255, 31, 8, 1, 255, 43, 10, 2, 255, 39, 7, 3, 255, 34, 6, 0, 255, 37, 11, 1, 255, 34, 8, 3, 255, 28, 10, 4, 255, 28, 9, 2, 255, 26, 6, 1, 255, 28, 9, 4, 255, 28, 6, 2, 255, 31, 11, 4, 255, 28, 13, 3, 255, 20, 6, 1, 255, 20, 6, 5, 255, 28, 7, 2, 255, 48, 9, 0, 255, 63, 14, 2, 255, 8, 4, 3, 255, 7, 3, 1, 255, 9, 5, 2, 255, 10, 5, 2, 255, 9, 4, 1, 255, 10, 4, 0, 255, 14, 4, 2, 255, 14, 4, 2, 255, 15, 7, 4, 255, 15, 7, 4, 255, 15, 7, 4, 255, 15, 7, 4, 255, 15, 6, 3, 255, 11, 7, 3, 255, 11, 7, 1, 255, 16, 11, 4, 255, 15, 8, 2, 255, 15, 7, 3, 255, 16, 9, 3, 255, 15, 8, 2, 255, 17, 10, 4, 255, 14, 8, 0, 255, 19, 10, 2, 255, 22, 14, 4, 255, 20, 10, 2, 255, 20, 8, 2, 255, 26, 13, 3, 255, 24, 12, 3, 255, 25, 12, 3, 255, 26, 12, 4, 255, 26, 12, 4, 255, 22, 11, 2, 255, 22, 14, 3, 255, 24, 14, 4, 255, 23, 13, 3, 255, 20, 11, 1, 255, 22, 12, 2, 255, 31, 14, 6, 255, 31, 14, 4, 255, 31, 14, 5, 255, 29, 12, 5, 255, 27, 14, 3, 255, 29, 17, 3, 255, 30, 17, 5, 255, 33, 15, 5, 255, 39, 20, 5, 255, 28, 16, 2, 255, 33, 17, 5, 255, 35, 14, 1, 255, 36, 20, 4, 255, 38, 23, 9, 255, 32, 15, 3, 255, 31, 20, 3, 255, 35, 24, 3, 255, 36, 19, 1, 255, 39, 20, 2, 255, 39, 21, 4, 255, 31, 17, 1, 255, 34, 19, 5, 255, 40, 22, 4, 255, 38, 19, 0, 255, 39, 15, 2, 255, 39, 21, 6, 255, 42, 21, 3, 255, 46, 21, 0, 255, 51, 20, 3, 255, 41, 20, 5, 255, 42, 26, 6, 255, 52, 27, 3, 255, 44, 22, 3, 255, 40, 24, 6, 255, 46, 24, 2, 255, 39, 22, 2, 255, 44, 27, 6, 255, 47, 23, 2, 255, 43, 21, 4, 255, 46, 22, 3, 255, 41, 21, 1, 255, 46, 23, 6, 255, 44, 16, 3, 255, 43, 23, 6, 255, 46, 22, 5, 255, 47, 24, 3, 255, 43, 22, 2, 255, 49, 27, 6, 255, 44, 28, 5, 255, 44, 20, 0, 255, 51, 25, 7, 255, 43, 27, 3, 255, 53, 31, 7, 255, 58, 30, 7, 255, 60, 32, 6, 255, 63, 37, 13, 255, 55, 39, 13, 255, 53, 28, 5, 255, 56, 28, 4, 255, 44, 28, 1, 255, 47, 28, 3, 255, 55, 29, 6, 255, 51, 24, 1, 255, 44, 24, 2, 255, 52, 31, 3, 255, 52, 29, 0, 255, 54, 30, 4, 255, 49, 24, 2, 255, 53, 27, 6, 255, 55, 28, 5, 255, 59, 32, 5, 255, 59, 33, 11, 255, 63, 32, 9, 255, 57, 32, 3, 255, 41, 29, 26, 255, 51, 33, 48, 255, 49, 34, 59, 255, 44, 27, 18, 255, 55, 29, 0, 255, 57, 29, 2, 255, 55, 29, 2, 255, 53, 33, 5, 255, 48, 29, 2, 255, 50, 28, 4, 255, 57, 31, 8, 255, 59, 30, 3, 255, 60, 31, 5, 255, 56, 30, 4, 255, 59, 36, 4, 255, 63, 36, 9, 255, 64, 33, 3, 255, 65, 32, 10, 255, 54, 32, 3, 255, 54, 31, 13, 255, 59, 33, 3, 255, 59, 33, 8, 255, 61, 36, 13, 255, 59, 38, 7, 255, 57, 34, 9, 255, 62, 41, 12, 255, 57, 35, 13, 255, 65, 44, 11, 255, 65, 46, 15, 255, 71, 53, 11, 255, 61, 46, 10, 255, 64, 49, 14, 255, 70, 58, 7, 255, 64, 54, 22, 255, 64, 56, 26, 255, 72, 57, 13, 255, 72, 63, 20, 255, 67, 65, 30, 255, 65, 62, 24, 255, 66, 64, 35, 255, 68, 69, 41, 255, 72, 71, 32, 255, 71, 69, 40, 255, 75, 69, 42, 255, 73, 68, 42, 255, 73, 76, 38, 255, 72, 80, 35, 255, 73, 80, 43, 255, 77, 80, 55, 255, 79, 84, 57, 255, 76, 83, 58, 255, 78, 88, 63, 255, 79, 90, 60, 255, 80, 92, 60, 255, 83, 96, 64, 255, 82, 96, 68, 255, 86, 101, 70, 255, 89, 105, 70, 255, 90, 106, 81, 255, 90, 106, 82, 255, 93, 110, 79, 255, 100, 115, 82, 255, 96, 114, 84, 255, 98, 119, 84, 255, 100, 119, 85, 255, 101, 118, 86, 255, 105, 122, 89, 255, 101, 121, 83, 255, 101, 124, 86, 255, 99, 123, 88, 255, 94, 119, 83, 255, 96, 120, 82, 255, 99, 122, 83, 255, 98, 121, 81, 255, 98, 118, 82, 255, 102, 117, 80, 255, 96, 115, 74, 255, 93, 113, 73, 255, 97, 115, 70, 255, 91, 107, 69, 255, 92, 107, 68, 255, 90, 106, 70, 255, 88, 102, 63, 255, 93, 100, 58, 255, 95, 97, 56, 255, 93, 95, 53, 255, 90, 93, 46, 255, 85, 92, 47, 255, 86, 93, 43, 255, 89, 92, 34, 255, 90, 87, 33, 255, 92, 81, 38, 255, 95, 82, 32, 255, 91, 78, 20, 255, 89, 75, 33, 255, 89, 74, 22, 255, 88, 75, 17, 255, 93, 70, 26, 255, 89, 71, 14, 255, 90, 70, 14, 255, 90, 69, 12, 255, 86, 65, 13, 255, 88, 62, 19, 255, 88, 57, 13, 255, 90, 58, 13, 255, 84, 54, 12, 255, 86, 54, 9, 255, 90, 55, 11, 255, 82, 54, 5, 255, 85, 57, 12, 255, 79, 49, 14, 255, 81, 49, 12, 255, 83, 50, 7, 255, 74, 45, 13, 255, 79, 46, 12, 255, 81, 46, 13, 255, 80, 50, 5, 255, 78, 45, 8, 255, 86, 43, 6, 255, 85, 44, 5, 255, 78, 41, 5, 255, 81, 40, 5, 255, 86, 39, 6, 255, 82, 37, 4, 255, 77, 36, 4, 255, 77, 36, 7, 255, 80, 40, 8, 255, 82, 40, 5, 255, 82, 39, 4, 255, 81, 38, 4, 255, 78, 33, 5, 255, 76, 34, 9, 255, 78, 34, 2, 255, 87, 36, 4, 255, 102, 40, 7, 255, 113, 42, 3, 255, 112, 39, 2, 255, 108, 36, 3, 255, 107, 36, 3, 255, 105, 35, 1, 255, 110, 39, 0, 255, 109, 42, 2, 255, 102, 41, 4, 255, 95, 39, 3, 255, 88, 33, 0, 255, 83, 31, 0, 255, 78, 35, 1, 255, 88, 35, 7, 255, 87, 29, 7, 255, 73, 27, 1, 255, 80, 32, 1, 255, 98, 36, 2, 255, 95, 33, 2, 255, 86, 29, 3, 255, 82, 28, 2, 255, 77, 30, 1, 255, 77, 31, 3, 255, 81, 31, 8, 255, 79, 30, 3, 255, 71, 26, 1, 255, 73, 28, 5, 255, 73, 28, 5, 255, 74, 26, 1, 255, 76, 28, 2, 255, 73, 29, 4, 255, 72, 27, 2, 255, 72, 26, 3, 255, 68, 23, 1, 255, 72, 27, 4, 255, 71, 24, 1, 255, 76, 25, 1, 255, 63, 22, 1, 255, 61, 21, 4, 255, 76, 21, 3, 255, 67, 24, 3, 255, 66, 23, 7, 255, 74, 23, 4, 255, 76, 24, 4, 255, 74, 21, 3, 255, 78, 24, 3, 255, 79, 27, 3, 255, 78, 25, 1, 255, 80, 27, 2, 255, 89, 33, 5, 255, 88, 26, 1, 255, 95, 27, 2, 255, 94, 31, 5, 255, 82, 22, 1, 255, 61, 23, 3, 255, 60, 20, 4, 255, 69, 24, 3, 255, 67, 24, 3, 255, 64, 23, 3, 255, 59, 21, 2, 255, 59, 22, 1, 255, 65, 26, 0, 255, 62, 19, 1, 255, 64, 18, 2, 255, 71, 22, 5, 255, 71, 23, 5, 255, 64, 25, 4, 255, 57, 21, 1, 255, 67, 23, 2, 255, 74, 25, 4, 255, 66, 20, 2, 255, 69, 21, 2, 255, 68, 25, 7, 255, 56, 22, 9, 255, 54, 21, 3, 255, 55, 21, 1, 255, 56, 20, 0, 255, 75, 23, 4, 255, 68, 23, 3, 255, 55, 18, 0, 255, 59, 22, 4, 255, 60, 23, 3, 255, 61, 23, 3, 255, 60, 22, 3, 255, 60, 21, 4, 255, 56, 19, 1, 255, 60, 24, 7, 255, 57, 18, 0, 255, 72, 19, 3, 255, 71, 20, 5, 255, 78, 26, 6, 255, 74, 24, 0, 255, 71, 23, 2, 255, 75, 24, 3, 255, 76, 23, 2, 255, 77, 24, 3, 255, 75, 23, 1, 255, 69, 20, 1, 255, 66, 18, 0, 255, 69, 20, 3, 255, 69, 19, 3, 255, 72, 18, 2, 255, 71, 18, 3, 255, 66, 18, 3, 255, 66, 19, 3, 255, 70, 21, 5, 255, 69, 21, 4, 255, 68, 18, 1, 255, 69, 17, 3, 255, 67, 18, 4, 255, 66, 20, 5, 255, 66, 19, 3, 255, 75, 18, 3, 255, 71, 17, 3, 255, 65, 13, 2, 255, 75, 19, 6, 255, 72, 16, 3, 255, 65, 13, 0, 255, 71, 18, 4, 255, 63, 13, 0, 255, 56, 16, 4, 255, 64, 16, 3, 255, 67, 18, 5, 255, 56, 14, 0, 255, 53, 18, 3, 255, 50, 16, 4, 255, 52, 15, 3, 255, 47, 16, 3, 255, 47, 14, 2, 255, 50, 12, 4, 255, 39, 10, 1, 255, 40, 11, 2, 255, 45, 11, 5, 255, 39, 10, 3, 255, 43, 12, 3, 255, 36, 11, 2, 255, 31, 12, 5, 255, 33, 10, 4, 255, 36, 9, 3, 255, 33, 8, 4, 255, 33, 9, 3, 255, 40, 12, 5, 255, 34, 7, 2, 255, 26, 7, 2, 255, 32, 13, 5, 255, 30, 9, 3, 255, 30, 10, 4, 255, 29, 9, 1, 255, 28, 11, 2, 255, 26, 9, 3, 255, 24, 6, 2, 255, 22, 6, 2, 255, 27, 9, 5, 255, 43, 11, 2, 255, 49, 10, 0, 255, 6, 1, 0, 255, 8, 3, 0, 255, 9, 4, 1, 255, 10, 5, 2, 255, 10, 5, 2, 255, 12, 6, 3, 255, 14, 5, 2, 255, 13, 5, 1, 255, 13, 5, 2, 255, 13, 6, 2, 255, 14, 7, 3, 255, 14, 6, 3, 255, 13, 5, 2, 255, 13, 7, 4, 255, 14, 9, 3, 255, 16, 9, 3, 255, 16, 7, 4, 255, 14, 6, 4, 255, 15, 7, 4, 255, 16, 10, 4, 255, 16, 10, 3, 255, 17, 10, 2, 255, 20, 11, 3, 255, 22, 13, 4, 255, 20, 9, 2, 255, 21, 10, 2, 255, 21, 11, 1, 255, 21, 11, 1, 255, 24, 13, 4, 255, 25, 13, 5, 255, 26, 10, 5, 255, 26, 9, 5, 255, 22, 12, 2, 255, 23, 13, 3, 255, 25, 17, 6, 255, 20, 12, 1, 255, 25, 12, 3, 255, 29, 11, 4, 255, 27, 12, 3, 255, 26, 14, 5, 255, 31, 15, 7, 255, 27, 14, 1, 255, 29, 18, 3, 255, 27, 16, 2, 255, 25, 12, 0, 255, 37, 18, 2, 255, 30, 18, 2, 255, 33, 18, 5, 255, 35, 18, 4, 255, 29, 17, 1, 255, 31, 19, 4, 255, 31, 21, 4, 255, 30, 13, 0, 255, 38, 18, 4, 255, 39, 21, 6, 255, 35, 16, 3, 255, 34, 18, 3, 255, 36, 19, 3, 255, 40, 20, 5, 255, 36, 20, 3, 255, 37, 20, 3, 255, 43, 18, 4, 255, 41, 19, 4, 255, 39, 20, 3, 255, 44, 23, 3, 255, 46, 23, 3, 255, 43, 25, 6, 255, 43, 23, 3, 255, 49, 24, 2, 255, 42, 26, 6, 255, 34, 21, 2, 255, 45, 22, 1, 255, 41, 21, 1, 255, 41, 24, 3, 255, 49, 23, 5, 255, 45, 20, 4, 255, 43, 22, 2, 255, 44, 25, 4, 255, 46, 25, 6, 255, 51, 26, 6, 255, 43, 23, 4, 255, 45, 19, 0, 255, 50, 23, 3, 255, 52, 22, 2, 255, 54, 26, 5, 255, 53, 24, 2, 255, 56, 24, 2, 255, 56, 24, 3, 255, 58, 27, 5, 255, 55, 25, 1, 255, 51, 24, 2, 255, 53, 25, 5, 255, 57, 27, 6, 255, 54, 30, 3, 255, 54, 26, 3, 255, 48, 25, 3, 255, 50, 28, 2, 255, 54, 28, 4, 255, 57, 25, 3, 255, 55, 22, 2, 255, 52, 23, 4, 255, 54, 26, 4, 255, 54, 26, 4, 255, 45, 23, 8, 255, 45, 26, 6, 255, 50, 24, 0, 255, 54, 25, 2, 255, 51, 30, 1, 255, 51, 30, 2, 255, 55, 27, 7, 255, 47, 26, 10, 255, 43, 30, 26, 255, 44, 31, 59, 255, 45, 28, 43, 255, 59, 33, 8, 255, 55, 31, 3, 255, 54, 30, 6, 255, 55, 31, 7, 255, 51, 28, 3, 255, 48, 26, 2, 255, 52, 27, 4, 255, 52, 27, 5, 255, 57, 30, 5, 255, 64, 32, 6, 255, 60, 31, 3, 255, 56, 33, 1, 255, 60, 32, 3, 255, 67, 31, 2, 255, 60, 30, 0, 255, 54, 30, 6, 255, 54, 30, 7, 255, 61, 33, 2, 255, 62, 35, 4, 255, 54, 35, 13, 255, 55, 37, 8, 255, 63, 45, 1, 255, 59, 36, 7, 255, 62, 42, 11, 255, 60, 44, 13, 255, 63, 46, 17, 255, 58, 48, 15, 255, 67, 48, 19, 255, 70, 49, 16, 255, 72, 57, 10, 255, 68, 59, 19, 255, 64, 57, 17, 255, 68, 62, 20, 255, 71, 64, 20, 255, 72, 65, 24, 255, 68, 63, 35, 255, 64, 65, 35, 255, 67, 65, 45, 255, 71, 70, 41, 255, 69, 69, 32, 255, 76, 74, 33, 255, 74, 75, 48, 255, 72, 71, 57, 255, 79, 79, 46, 255, 79, 83, 48, 255, 73, 81, 56, 255, 75, 84, 53, 255, 77, 85, 57, 255, 81, 88, 64, 255, 81, 93, 55, 255, 80, 94, 63, 255, 82, 97, 68, 255, 85, 100, 62, 255, 92, 106, 76, 255, 93, 107, 81, 255, 92, 108, 80, 255, 95, 111, 85, 255, 95, 114, 85, 255, 94, 115, 82, 255, 96, 117, 89, 255, 100, 122, 84, 255, 101, 123, 84, 255, 101, 120, 87, 255, 100, 122, 88, 255, 96, 125, 82, 255, 96, 123, 89, 255, 98, 125, 92, 255, 98, 124, 86, 255, 97, 125, 83, 255, 97, 123, 80, 255, 98, 121, 77, 255, 101, 120, 82, 255, 100, 117, 84, 255, 98, 116, 79, 255, 97, 115, 75, 255, 96, 112, 68, 255, 95, 110, 69, 255, 93, 108, 66, 255, 91, 106, 65, 255, 90, 101, 62, 255, 91, 99, 54, 255, 91, 97, 53, 255, 90, 94, 52, 255, 88, 95, 44, 255, 90, 91, 42, 255, 94, 93, 31, 255, 90, 87, 38, 255, 89, 81, 32, 255, 90, 79, 26, 255, 90, 80, 35, 255, 86, 79, 33, 255, 88, 76, 34, 255, 88, 74, 26, 255, 87, 73, 21, 255, 90, 72, 14, 255, 86, 72, 8, 255, 86, 67, 19, 255, 88, 68, 20, 255, 85, 65, 11, 255, 81, 62, 15, 255, 83, 62, 15, 255, 84, 62, 7, 255, 80, 58, 11, 255, 81, 57, 14, 255, 85, 55, 11, 255, 83, 52, 12, 255, 81, 48, 10, 255, 83, 50, 9, 255, 81, 48, 10, 255, 81, 48, 9, 255, 85, 49, 10, 255, 79, 43, 6, 255, 79, 44, 6, 255, 80, 47, 5, 255, 78, 42, 11, 255, 84, 42, 6, 255, 82, 39, 7, 255, 73, 38, 5, 255, 79, 43, 6, 255, 82, 38, 7, 255, 77, 34, 6, 255, 79, 38, 5, 255, 79, 35, 1, 255, 79, 36, 1, 255, 81, 38, 3, 255, 79, 36, 5, 255, 80, 36, 7, 255, 79, 35, 6, 255, 80, 36, 6, 255, 77, 38, 2, 255, 70, 32, 7, 255, 81, 29, 8, 255, 100, 36, 4, 255, 103, 40, 4, 255, 104, 36, 9, 255, 106, 35, 9, 255, 105, 38, 4, 255, 109, 38, 2, 255, 105, 37, 2, 255, 98, 36, 3, 255, 86, 30, 0, 255, 80, 27, 2, 255, 79, 32, 1, 255, 79, 35, 1, 255, 81, 33, 5, 255, 81, 29, 7, 255, 81, 31, 4, 255, 82, 28, 1, 255, 86, 30, 3, 255, 82, 30, 3, 255, 77, 32, 4, 255, 76, 28, 2, 255, 84, 26, 4, 255, 80, 28, 5, 255, 67, 27, 2, 255, 78, 33, 6, 255, 69, 25, 0, 255, 74, 24, 1, 255, 69, 25, 1, 255, 74, 23, 1, 255, 79, 27, 6, 255, 75, 30, 5, 255, 70, 25, 2, 255, 71, 26, 4, 255, 71, 26, 6, 255, 70, 25, 3, 255, 66, 24, 0, 255, 75, 31, 5, 255, 61, 29, 7, 255, 56, 22, 7, 255, 75, 25, 6, 255, 62, 22, 2, 255, 68, 20, 4, 255, 85, 27, 3, 255, 84, 29, 3, 255, 87, 27, 1, 255, 93, 29, 2, 255, 95, 33, 5, 255, 86, 27, 1, 255, 77, 21, 1, 255, 93, 29, 3, 255, 101, 27, 2, 255, 100, 28, 3, 255, 91, 28, 4, 255, 78, 22, 1, 255, 64, 23, 2, 255, 62, 21, 3, 255, 61, 24, 3, 255, 59, 23, 4, 255, 58, 21, 4, 255, 61, 22, 4, 255, 66, 21, 4, 255, 70, 20, 3, 255, 56, 22, 3, 255, 62, 23, 4, 255, 71, 22, 4, 255, 72, 21, 0, 255, 74, 22, 4, 255, 70, 22, 6, 255, 66, 22, 4, 255, 66, 20, 2, 255, 63, 15, 1, 255, 65, 20, 6, 255, 60, 21, 3, 255, 48, 13, 3, 255, 58, 21, 6, 255, 64, 22, 4, 255, 67, 23, 3, 255, 81, 23, 3, 255, 78, 19, 1, 255, 69, 20, 4, 255, 62, 21, 6, 255, 52, 20, 3, 255, 54, 20, 2, 255, 61, 24, 6, 255, 56, 21, 3, 255, 59, 20, 4, 255, 61, 22, 5, 255, 56, 22, 3, 255, 57, 23, 2, 255, 54, 14, 0, 255, 67, 22, 5, 255, 68, 23, 3, 255, 65, 18, 3, 255, 69, 22, 2, 255, 74, 21, 0, 255, 76, 22, 2, 255, 76, 25, 4, 255, 74, 24, 3, 255, 70, 21, 1, 255, 69, 21, 2, 255, 72, 18, 3, 255, 73, 17, 6, 255, 60, 18, 2, 255, 66, 17, 4, 255, 71, 17, 5, 255, 71, 18, 3, 255, 67, 18, 1, 255, 68, 20, 2, 255, 67, 20, 4, 255, 69, 20, 3, 255, 74, 22, 5, 255, 73, 18, 4, 255, 78, 18, 4, 255, 75, 17, 3, 255, 73, 16, 4, 255, 74, 16, 4, 255, 73, 16, 3, 255, 71, 17, 3, 255, 70, 17, 3, 255, 66, 14, 1, 255, 59, 15, 0, 255, 64, 20, 4, 255, 62, 17, 2, 255, 59, 14, 1, 255, 57, 15, 3, 255, 52, 14, 3, 255, 52, 12, 1, 255, 45, 12, 0, 255, 41, 11, 1, 255, 42, 9, 3, 255, 40, 10, 3, 255, 38, 10, 2, 255, 42, 12, 3, 255, 47, 11, 1, 255, 43, 9, 1, 255, 33, 9, 1, 255, 29, 8, 3, 255, 35, 9, 5, 255, 32, 11, 4, 255, 32, 8, 4, 255, 30, 11, 4, 255, 30, 11, 4, 255, 27, 9, 3, 255, 30, 12, 4, 255, 36, 10, 2, 255, 40, 13, 3, 255, 30, 7, 0, 255, 29, 7, 4, 255, 30, 10, 4, 255, 28, 9, 0, 255, 29, 10, 4, 255, 26, 6, 4, 255, 35, 10, 6, 255, 53, 14, 7, 255, 57, 10, 1, 255, 7, 2, 0, 255, 10, 5, 2, 255, 8, 3, 1, 255, 8, 3, 0, 255, 11, 6, 3, 255, 11, 4, 2, 255, 14, 5, 3, 255, 13, 5, 2, 255, 13, 4, 1, 255, 15, 6, 3, 255, 13, 4, 2, 255, 11, 3, 0, 255, 13, 5, 1, 255, 16, 7, 3, 255, 17, 8, 2, 255, 18, 7, 2, 255, 18, 7, 4, 255, 19, 9, 6, 255, 18, 9, 3, 255, 16, 8, 3, 255, 14, 6, 1, 255, 20, 9, 4, 255, 21, 9, 3, 255, 23, 11, 4, 255, 23, 10, 5, 255, 28, 14, 8, 255, 25, 9, 3, 255, 24, 11, 4, 255, 23, 13, 5, 255, 16, 10, 1, 255, 14, 8, 0, 255, 21, 12, 3, 255, 30, 13, 5, 255, 26, 12, 3, 255, 23, 12, 2, 255, 22, 11, 1, 255, 25, 12, 4, 255, 23, 9, 1, 255, 22, 11, 2, 255, 25, 14, 5, 255, 26, 12, 2, 255, 28, 15, 3, 255, 31, 19, 6, 255, 26, 17, 2, 255, 29, 19, 3, 255, 33, 18, 4, 255, 26, 15, 3, 255, 30, 14, 2, 255, 37, 18, 3, 255, 33, 16, 1, 255, 38, 17, 3, 255, 38, 19, 2, 255, 40, 20, 2, 255, 34, 19, 3, 255, 34, 22, 5, 255, 42, 20, 6, 255, 42, 20, 4, 255, 39, 22, 3, 255, 38, 19, 2, 255, 35, 14, 2, 255, 36, 16, 3, 255, 38, 21, 1, 255, 43, 22, 3, 255, 43, 21, 7, 255, 32, 21, 4, 255, 37, 21, 2, 255, 36, 21, 3, 255, 36, 24, 3, 255, 40, 25, 0, 255, 43, 21, 3, 255, 42, 21, 6, 255, 46, 26, 7, 255, 41, 22, 3, 255, 43, 21, 3, 255, 41, 20, 2, 255, 42, 21, 2, 255, 49, 27, 4, 255, 41, 19, 4, 255, 40, 19, 5, 255, 49, 25, 2, 255, 42, 20, 5, 255, 45, 21, 1, 255, 50, 24, 8, 255, 41, 21, 3, 255, 46, 23, 2, 255, 64, 23, 5, 255, 51, 26, 5, 255, 40, 24, 2, 255, 55, 23, 4, 255, 55, 28, 6, 255, 48, 26, 4, 255, 44, 19, 2, 255, 49, 27, 5, 255, 44, 32, 2, 255, 49, 30, 3, 255, 50, 25, 5, 255, 52, 22, 6, 255, 58, 26, 3, 255, 47, 21, 0, 255, 48, 27, 8, 255, 57, 29, 4, 255, 52, 26, 1, 255, 52, 25, 5, 255, 46, 21, 5, 255, 52, 29, 7, 255, 55, 26, 0, 255, 54, 29, 4, 255, 45, 26, 7, 255, 47, 23, 7, 255, 49, 24, 2, 255, 55, 31, 10, 255, 42, 29, 3, 255, 39, 27, 14, 255, 39, 28, 23, 255, 51, 26, 13, 255, 46, 27, 10, 255, 46, 30, 9, 255, 51, 27, 5, 255, 56, 27, 4, 255, 57, 29, 3, 255, 56, 30, 0, 255, 55, 30, 5, 255, 61, 31, 5, 255, 65, 29, 1, 255, 66, 33, 5, 255, 58, 33, 2, 255, 52, 28, 2, 255, 58, 29, 3, 255, 57, 26, 5, 255, 63, 30, 6, 255, 58, 34, 3, 255, 53, 33, 4, 255, 61, 37, 11, 255, 55, 38, 6, 255, 50, 35, 8, 255, 53, 38, 9, 255, 60, 37, 7, 255, 71, 44, 15, 255, 61, 44, 2, 255, 61, 41, 24, 255, 55, 45, 19, 255, 66, 48, 28, 255, 66, 48, 18, 255, 71, 56, 13, 255, 66, 57, 19, 255, 60, 56, 19, 255, 63, 62, 25, 255, 68, 63, 21, 255, 74, 63, 23, 255, 71, 66, 42, 255, 70, 64, 52, 255, 65, 61, 39, 255, 70, 71, 39, 255, 77, 75, 34, 255, 72, 76, 35, 255, 67, 74, 40, 255, 69, 72, 46, 255, 76, 79, 43, 255, 73, 78, 46, 255, 74, 84, 71, 255, 71, 83, 58, 255, 81, 88, 58, 255, 82, 88, 69, 255, 85, 95, 63, 255, 82, 96, 67, 255, 85, 99, 76, 255, 89, 103, 72, 255, 90, 105, 75, 255, 88, 106, 81, 255, 91, 107, 85, 255, 93, 111, 80, 255, 96, 117, 81, 255, 98, 120, 89, 255, 98, 120, 89, 255, 98, 120, 85, 255, 103, 125, 87, 255, 103, 123, 88, 255, 104, 126, 94, 255, 101, 130, 97, 255, 97, 125, 92, 255, 99, 125, 87, 255, 97, 123, 83, 255, 98, 124, 82, 255, 98, 124, 82, 255, 100, 123, 80, 255, 99, 119, 79, 255, 96, 118, 80, 255, 96, 116, 76, 255, 95, 114, 71, 255, 95, 111, 67, 255, 94, 109, 65, 255, 93, 107, 64, 255, 94, 107, 58, 255, 90, 100, 56, 255, 92, 100, 54, 255, 92, 98, 53, 255, 90, 93, 51, 255, 91, 95, 44, 255, 91, 90, 31, 255, 94, 84, 37, 255, 98, 83, 41, 255, 94, 80, 34, 255, 93, 80, 35, 255, 91, 80, 30, 255, 88, 74, 28, 255, 91, 75, 35, 255, 92, 74, 30, 255, 91, 71, 20, 255, 87, 67, 22, 255, 87, 66, 22, 255, 84, 64, 19, 255, 83, 64, 17, 255, 76, 59, 16, 255, 79, 63, 13, 255, 81, 61, 4, 255, 80, 53, 17, 255, 85, 54, 23, 255, 80, 56, 12, 255, 77, 52, 9, 255, 85, 49, 9, 255, 86, 48, 8, 255, 79, 50, 4, 255, 75, 47, 10, 255, 78, 46, 9, 255, 78, 46, 3, 255, 76, 46, 10, 255, 78, 47, 9, 255, 78, 44, 0, 255, 83, 45, 6, 255, 75, 42, 4, 255, 75, 37, 10, 255, 81, 40, 12, 255, 81, 42, 5, 255, 80, 42, 0, 255, 82, 41, 4, 255, 80, 33, 6, 255, 81, 33, 8, 255, 83, 39, 5, 255, 82, 38, 3, 255, 77, 34, 0, 255, 80, 37, 0, 255, 82, 39, 2, 255, 82, 38, 3, 255, 82, 37, 3, 255, 77, 33, 3, 255, 76, 32, 6, 255, 77, 33, 2, 255, 77, 33, 0, 255, 81, 35, 3, 255, 82, 31, 5, 255, 88, 29, 3, 255, 94, 34, 4, 255, 88, 29, 0, 255, 85, 30, 2, 255, 81, 28, 4, 255, 82, 29, 6, 255, 82, 28, 4, 255, 83, 31, 0, 255, 75, 29, 2, 255, 74, 28, 7, 255, 81, 29, 4, 255, 82, 24, 1, 255, 84, 28, 7, 255, 82, 29, 4, 255, 74, 30, 0, 255, 72, 30, 2, 255, 78, 26, 5, 255, 80, 28, 4, 255, 76, 34, 4, 255, 75, 28, 4, 255, 75, 28, 2, 255, 76, 28, 3, 255, 78, 29, 6, 255, 73, 25, 3, 255, 71, 22, 1, 255, 73, 25, 2, 255, 71, 25, 3, 255, 70, 23, 5, 255, 72, 26, 5, 255, 69, 24, 2, 255, 68, 28, 2, 255, 67, 27, 2, 255, 68, 22, 2, 255, 71, 23, 6, 255, 68, 28, 6, 255, 63, 22, 1, 255, 71, 25, 1, 255, 80, 29, 0, 255, 86, 29, 1, 255, 93, 31, 2, 255, 94, 31, 3, 255, 87, 30, 3, 255, 74, 26, 3, 255, 62, 20, 5, 255, 71, 23, 5, 255, 81, 23, 4, 255, 75, 25, 3, 255, 68, 24, 3, 255, 63, 21, 1, 255, 62, 24, 4, 255, 67, 23, 5, 255, 66, 25, 3, 255, 60, 22, 5, 255, 55, 18, 1, 255, 59, 20, 3, 255, 66, 26, 7, 255, 66, 22, 4, 255, 56, 20, 2, 255, 59, 21, 1, 255, 78, 25, 2, 255, 89, 27, 5, 255, 79, 23, 1, 255, 71, 20, 1, 255, 67, 20, 3, 255, 63, 20, 5, 255, 60, 18, 6, 255, 55, 19, 6, 255, 54, 22, 5, 255, 59, 19, 2, 255, 65, 19, 3, 255, 60, 20, 3, 255, 64, 21, 4, 255, 67, 18, 4, 255, 56, 20, 2, 255, 53, 22, 3, 255, 57, 19, 2, 255, 55, 19, 5, 255, 62, 19, 9, 255, 61, 16, 4, 255, 54, 19, 1, 255, 59, 16, 0, 255, 67, 19, 1, 255, 62, 26, 2, 255, 61, 25, 6, 255, 61, 14, 4, 255, 69, 18, 6, 255, 65, 17, 4, 255, 63, 16, 5, 255, 70, 21, 4, 255, 72, 21, 1, 255, 71, 22, 1, 255, 73, 24, 2, 255, 75, 24, 3, 255, 74, 23, 3, 255, 73, 21, 2, 255, 70, 16, 0, 255, 70, 19, 4, 255, 63, 25, 5, 255, 70, 19, 4, 255, 67, 15, 1, 255, 66, 16, 2, 255, 72, 20, 5, 255, 74, 17, 4, 255, 70, 18, 2, 255, 73, 20, 2, 255, 76, 19, 0, 255, 70, 17, 0, 255, 60, 17, 1, 255, 65, 17, 2, 255, 69, 16, 2, 255, 69, 17, 3, 255, 67, 16, 2, 255, 66, 15, 1, 255, 70, 17, 3, 255, 67, 16, 2, 255, 66, 17, 3, 255, 62, 18, 3, 255, 55, 14, 0, 255, 61, 17, 4, 255, 56, 11, 3, 255, 49, 12, 2, 255, 54, 15, 3, 255, 54, 15, 4, 255, 41, 13, 3, 255, 38, 12, 5, 255, 45, 10, 6, 255, 42, 12, 4, 255, 43, 14, 3, 255, 49, 12, 2, 255, 40, 9, 1, 255, 42, 11, 2, 255, 43, 11, 4, 255, 38, 8, 2, 255, 37, 10, 1, 255, 34, 12, 3, 255, 29, 10, 1, 255, 30, 10, 4, 255, 28, 7, 4, 255, 28, 12, 6, 255, 32, 10, 2, 255, 34, 9, 0, 255, 36, 14, 3, 255, 38, 14, 7, 255, 37, 9, 5, 255, 33, 6, 2, 255, 33, 10, 3, 255, 25, 7, 0, 255, 26, 8, 1, 255, 42, 13, 3, 255, 51, 13, 3, 255, 9, 4, 0, 255, 11, 6, 2, 255, 8, 3, 1, 255, 8, 2, 1, 255, 10, 5, 2, 255, 9, 3, 1, 255, 14, 6, 4, 255, 15, 7, 5, 255, 13, 4, 2, 255, 15, 4, 2, 255, 12, 3, 0, 255, 12, 4, 0, 255, 14, 8, 2, 255, 15, 4, 0, 255, 16, 5, 0, 255, 20, 8, 2, 255, 19, 7, 4, 255, 16, 6, 2, 255, 18, 10, 2, 255, 20, 9, 4, 255, 19, 7, 4, 255, 21, 7, 4, 255, 21, 7, 2, 255, 21, 6, 2, 255, 25, 11, 5, 255, 17, 8, 2, 255, 14, 7, 2, 255, 20, 10, 4, 255, 19, 10, 3, 255, 16, 10, 1, 255, 20, 11, 2, 255, 26, 12, 3, 255, 31, 13, 6, 255, 30, 14, 5, 255, 28, 14, 5, 255, 23, 9, 1, 255, 26, 14, 6, 255, 19, 11, 1, 255, 21, 13, 5, 255, 23, 13, 4, 255, 30, 15, 5, 255, 32, 18, 7, 255, 27, 14, 3, 255, 23, 12, 0, 255, 27, 15, 3, 255, 23, 12, 2, 255, 26, 18, 6, 255, 34, 18, 8, 255, 35, 16, 2, 255, 34, 16, 0, 255, 44, 19, 4, 255, 45, 20, 8, 255, 36, 16, 4, 255, 31, 17, 3, 255, 32, 18, 3, 255, 40, 16, 3, 255, 42, 19, 5, 255, 40, 21, 6, 255, 39, 20, 4, 255, 43, 22, 4, 255, 41, 21, 4, 255, 34, 19, 3, 255, 40, 20, 5, 255, 43, 19, 2, 255, 44, 16, 9, 255, 41, 20, 5, 255, 36, 19, 2, 255, 37, 23, 6, 255, 41, 24, 1, 255, 44, 23, 3, 255, 42, 18, 5, 255, 39, 21, 6, 255, 40, 22, 2, 255, 47, 22, 5, 255, 41, 23, 6, 255, 45, 25, 3, 255, 50, 25, 3, 255, 41, 19, 6, 255, 44, 24, 7, 255, 45, 20, 2, 255, 41, 20, 1, 255, 48, 24, 5, 255, 43, 23, 5, 255, 42, 24, 7, 255, 48, 23, 5, 255, 53, 23, 3, 255, 48, 22, 2, 255, 48, 26, 6, 255, 51, 24, 5, 255, 52, 21, 4, 255, 47, 24, 5, 255, 40, 21, 2, 255, 45, 26, 5, 255, 47, 31, 4, 255, 56, 30, 7, 255, 50, 23, 3, 255, 57, 23, 10, 255, 59, 25, 2, 255, 45, 24, 3, 255, 40, 24, 4, 255, 52, 24, 1, 255, 51, 27, 3, 255, 51, 25, 2, 255, 54, 25, 0, 255, 53, 24, 6, 255, 55, 27, 6, 255, 49, 27, 3, 255, 48, 26, 10, 255, 50, 26, 7, 255, 51, 26, 5, 255, 51, 22, 5, 255, 44, 24, 14, 255, 47, 29, 22, 255, 41, 29, 25, 255, 45, 27, 7, 255, 52, 24, 2, 255, 54, 30, 8, 255, 50, 29, 5, 255, 51, 29, 3, 255, 55, 30, 4, 255, 57, 31, 7, 255, 57, 30, 7, 255, 58, 31, 3, 255, 56, 28, 0, 255, 58, 31, 2, 255, 58, 32, 3, 255, 58, 27, 7, 255, 62, 27, 5, 255, 60, 30, 6, 255, 53, 33, 4, 255, 52, 34, 2, 255, 58, 32, 10, 255, 55, 28, 7, 255, 59, 33, 7, 255, 57, 38, 14, 255, 49, 32, 10, 255, 65, 39, 15, 255, 69, 40, 11, 255, 68, 45, 9, 255, 59, 42, 17, 255, 56, 47, 23, 255, 55, 47, 24, 255, 59, 55, 11, 255, 65, 56, 17, 255, 64, 54, 18, 255, 67, 62, 17, 255, 68, 61, 27, 255, 73, 57, 36, 255, 61, 62, 32, 255, 71, 67, 19, 255, 78, 68, 36, 255, 63, 70, 38, 255, 78, 78, 46, 255, 86, 80, 39, 255, 68, 75, 37, 255, 71, 77, 54, 255, 72, 78, 46, 255, 74, 79, 46, 255, 75, 85, 48, 255, 72, 85, 58, 255, 75, 87, 66, 255, 83, 90, 62, 255, 81, 86, 70, 255, 85, 96, 72, 255, 82, 98, 69, 255, 86, 99, 78, 255, 88, 102, 75, 255, 85, 103, 77, 255, 88, 108, 85, 255, 95, 115, 87, 255, 97, 116, 86, 255, 97, 120, 86, 255, 97, 122, 85, 255, 100, 124, 90, 255, 100, 124, 92, 255, 102, 126, 92, 255, 101, 122, 86, 255, 104, 126, 95, 255, 99, 124, 99, 255, 100, 127, 92, 255, 103, 128, 86, 255, 101, 124, 82, 255, 99, 123, 82, 255, 98, 124, 87, 255, 100, 121, 84, 255, 100, 120, 79, 255, 97, 119, 78, 255, 97, 117, 73, 255, 95, 114, 67, 255, 95, 111, 67, 255, 97, 110, 65, 255, 96, 109, 65, 255, 92, 103, 62, 255, 93, 100, 65, 255, 92, 101, 48, 255, 92, 96, 50, 255, 92, 93, 53, 255, 91, 88, 49, 255, 87, 92, 44, 255, 84, 86, 36, 255, 93, 82, 37, 255, 94, 85, 26, 255, 89, 83, 22, 255, 88, 74, 31, 255, 95, 74, 20, 255, 91, 70, 31, 255, 91, 68, 37, 255, 90, 67, 23, 255, 87, 67, 12, 255, 91, 68, 16, 255, 86, 63, 11, 255, 85, 62, 15, 255, 83, 62, 15, 255, 78, 58, 16, 255, 81, 59, 17, 255, 79, 52, 17, 255, 77, 50, 16, 255, 80, 52, 9, 255, 80, 50, 4, 255, 77, 50, 9, 255, 77, 49, 13, 255, 80, 49, 11, 255, 85, 50, 11, 255, 92, 52, 9, 255, 91, 50, 9, 255, 94, 51, 9, 255, 93, 49, 5, 255, 80, 40, 3, 255, 80, 43, 8, 255, 82, 43, 4, 255, 81, 41, 4, 255, 82, 38, 2, 255, 84, 39, 8, 255, 76, 37, 7, 255, 77, 32, 4, 255, 86, 37, 8, 255, 85, 40, 10, 255, 83, 38, 8, 255, 81, 36, 5, 255, 80, 35, 4, 255, 83, 38, 6, 255, 80, 37, 4, 255, 80, 36, 4, 255, 78, 39, 7, 255, 79, 33, 0, 255, 81, 32, 4, 255, 77, 31, 7, 255, 80, 32, 3, 255, 79, 36, 2, 255, 72, 33, 3, 255, 78, 34, 4, 255, 88, 37, 5, 255, 86, 32, 1, 255, 85, 33, 3, 255, 80, 32, 3, 255, 78, 31, 2, 255, 81, 28, 6, 255, 86, 31, 4, 255, 82, 28, 5, 255, 80, 27, 7, 255, 80, 27, 5, 255, 80, 29, 5, 255, 81, 31, 3, 255, 83, 31, 4, 255, 78, 29, 5, 255, 74, 30, 3, 255, 77, 31, 2, 255, 76, 27, 1, 255, 75, 30, 5, 255, 77, 28, 4, 255, 79, 30, 3, 255, 72, 28, 0, 255, 76, 27, 5, 255, 71, 27, 5, 255, 72, 27, 2, 255, 75, 26, 1, 255, 70, 24, 1, 255, 68, 22, 4, 255, 68, 21, 1, 255, 74, 25, 4, 255, 72, 28, 5, 255, 66, 27, 5, 255, 69, 24, 4, 255, 69, 24, 2, 255, 59, 21, 3, 255, 65, 24, 9, 255, 60, 26, 2, 255, 77, 28, 4, 255, 96, 26, 4, 255, 101, 27, 3, 255, 102, 27, 2, 255, 94, 27, 1, 255, 81, 25, 1, 255, 71, 24, 5, 255, 61, 26, 1, 255, 62, 24, 0, 255, 63, 25, 1, 255, 68, 25, 3, 255, 67, 25, 6, 255, 62, 21, 4, 255, 61, 17, 0, 255, 68, 21, 3, 255, 61, 20, 5, 255, 58, 20, 3, 255, 64, 23, 3, 255, 65, 24, 3, 255, 57, 19, 1, 255, 60, 16, 0, 255, 75, 23, 6, 255, 86, 28, 5, 255, 88, 26, 1, 255, 88, 26, 1, 255, 81, 27, 4, 255, 72, 27, 2, 255, 68, 21, 1, 255, 62, 16, 2, 255, 60, 22, 8, 255, 53, 15, 4, 255, 57, 16, 0, 255, 62, 22, 9, 255, 57, 19, 1, 255, 51, 16, 1, 255, 49, 19, 5, 255, 46, 20, 3, 255, 54, 19, 2, 255, 59, 19, 1, 255, 57, 20, 2, 255, 58, 19, 3, 255, 54, 17, 0, 255, 57, 21, 3, 255, 58, 20, 5, 255, 58, 17, 4, 255, 55, 16, 1, 255, 57, 24, 2, 255, 58, 22, 4, 255, 63, 22, 4, 255, 64, 16, 1, 255, 67, 17, 3, 255, 70, 22, 1, 255, 72, 20, 1, 255, 73, 20, 2, 255, 71, 21, 1, 255, 69, 20, 0, 255, 67, 19, 0, 255, 69, 21, 1, 255, 68, 21, 0, 255, 71, 21, 1, 255, 67, 20, 1, 255, 71, 21, 2, 255, 67, 21, 3, 255, 66, 20, 2, 255, 72, 21, 4, 255, 71, 21, 2, 255, 73, 21, 4, 255, 70, 17, 4, 255, 66, 16, 2, 255, 71, 22, 6, 255, 72, 19, 3, 255, 68, 17, 1, 255, 63, 16, 0, 255, 65, 19, 3, 255, 66, 19, 4, 255, 64, 16, 2, 255, 66, 16, 2, 255, 66, 17, 2, 255, 66, 15, 2, 255, 61, 16, 2, 255, 56, 15, 3, 255, 54, 15, 2, 255, 53, 14, 3, 255, 55, 13, 6, 255, 53, 12, 2, 255, 51, 16, 4, 255, 44, 12, 4, 255, 44, 12, 5, 255, 41, 7, 2, 255, 43, 10, 1, 255, 45, 11, 1, 255, 46, 13, 3, 255, 43, 14, 4, 255, 53, 13, 5, 255, 56, 12, 1, 255, 49, 13, 1, 255, 47, 13, 1, 255, 40, 12, 1, 255, 34, 14, 3, 255, 27, 9, 1, 255, 26, 10, 5, 255, 25, 11, 5, 255, 32, 8, 2, 255, 36, 11, 2, 255, 35, 13, 2, 255, 36, 11, 4, 255, 40, 10, 5, 255, 39, 8, 3, 255, 36, 11, 4, 255, 31, 13, 5, 255, 24, 6, 3, 255, 31, 6, 2, 255, 40, 8, 6, 255, 8, 4, 1, 255, 6, 3, 1, 255, 6, 3, 2, 255, 9, 3, 3, 255, 9, 3, 3, 255, 12, 6, 3, 255, 11, 5, 2, 255, 11, 4, 2, 255, 15, 5, 4, 255, 17, 6, 4, 255, 16, 5, 4, 255, 12, 5, 1, 255, 11, 5, 1, 255, 17, 7, 4, 255, 16, 6, 2, 255, 17, 6, 3, 255, 19, 8, 5, 255, 15, 6, 1, 255, 17, 10, 1, 255, 18, 10, 4, 255, 17, 5, 2, 255, 19, 6, 2, 255, 21, 8, 2, 255, 22, 9, 3, 255, 23, 11, 5, 255, 16, 11, 2, 255, 10, 10, 0, 255, 22, 12, 5, 255, 20, 9, 2, 255, 21, 11, 1, 255, 25, 11, 3, 255, 28, 7, 2, 255, 18, 8, 0, 255, 21, 12, 1, 255, 24, 12, 3, 255, 25, 9, 3, 255, 20, 7, 1, 255, 18, 13, 2, 255, 18, 13, 4, 255, 21, 11, 1, 255, 29, 15, 4, 255, 28, 14, 3, 255, 25, 11, 4, 255, 29, 14, 6, 255, 30, 15, 5, 255, 25, 15, 6, 255, 22, 14, 5, 255, 24, 13, 4, 255, 30, 19, 4, 255, 27, 18, 2, 255, 33, 17, 3, 255, 32, 17, 2, 255, 28, 15, 0, 255, 39, 22, 4, 255, 42, 22, 4, 255, 37, 22, 0, 255, 34, 20, 0, 255, 37, 17, 3, 255, 36, 17, 3, 255, 37, 18, 0, 255, 45, 24, 6, 255, 38, 20, 3, 255, 40, 17, 3, 255, 38, 20, 3, 255, 41, 23, 7, 255, 41, 20, 1, 255, 43, 19, 4, 255, 37, 19, 5, 255, 36, 22, 1, 255, 42, 21, 2, 255, 45, 22, 6, 255, 36, 20, 4, 255, 40, 22, 0, 255, 42, 24, 5, 255, 35, 19, 6, 255, 45, 20, 2, 255, 47, 23, 3, 255, 37, 22, 3, 255, 41, 24, 1, 255, 49, 26, 2, 255, 48, 26, 2, 255, 50, 26, 3, 255, 41, 24, 2, 255, 39, 22, 4, 255, 44, 24, 4, 255, 42, 27, 2, 255, 48, 25, 2, 255, 49, 23, 2, 255, 43, 25, 3, 255, 39, 20, 4, 255, 43, 24, 5, 255, 47, 22, 1, 255, 48, 21, 1, 255, 46, 26, 4, 255, 58, 31, 9, 255, 59, 28, 4, 255, 54, 24, 1, 255, 47, 23, 1, 255, 52, 25, 3, 255, 59, 26, 7, 255, 54, 24, 10, 255, 47, 21, 4, 255, 50, 23, 3, 255, 49, 22, 1, 255, 45, 23, 4, 255, 45, 26, 7, 255, 54, 27, 4, 255, 56, 28, 2, 255, 52, 28, 3, 255, 51, 25, 5, 255, 55, 26, 5, 255, 52, 29, 9, 255, 38, 24, 19, 255, 39, 27, 20, 255, 52, 31, 5, 255, 57, 28, 0, 255, 53, 28, 0, 255, 52, 32, 3, 255, 53, 30, 4, 255, 52, 25, 1, 255, 56, 28, 6, 255, 54, 26, 5, 255, 58, 29, 4, 255, 56, 30, 3, 255, 56, 30, 4, 255, 58, 29, 2, 255, 56, 27, 6, 255, 58, 34, 6, 255, 50, 27, 5, 255, 50, 27, 7, 255, 59, 32, 4, 255, 54, 23, 10, 255, 58, 33, 10, 255, 62, 36, 5, 255, 60, 36, 3, 255, 64, 39, 10, 255, 59, 38, 10, 255, 58, 41, 10, 255, 60, 47, 10, 255, 52, 45, 15, 255, 56, 50, 18, 255, 56, 53, 15, 255, 59, 47, 23, 255, 57, 52, 13, 255, 65, 58, 19, 255, 72, 57, 30, 255, 68, 60, 19, 255, 70, 64, 24, 255, 63, 67, 35, 255, 69, 66, 32, 255, 73, 66, 31, 255, 63, 70, 39, 255, 75, 72, 44, 255, 81, 73, 43, 255, 67, 72, 43, 255, 73, 74, 52, 255, 75, 81, 49, 255, 72, 83, 48, 255, 73, 84, 50, 255, 74, 85, 54, 255, 78, 91, 63, 255, 81, 89, 63, 255, 83, 91, 69, 255, 82, 97, 71, 255, 82, 101, 72, 255, 88, 102, 75, 255, 90, 104, 79, 255, 90, 109, 81, 255, 91, 114, 84, 255, 94, 113, 88, 255, 100, 117, 91, 255, 102, 125, 94, 255, 96, 123, 91, 255, 98, 123, 94, 255, 100, 127, 93, 255, 102, 129, 93, 255, 100, 126, 91, 255, 105, 129, 99, 255, 104, 129, 99, 255, 102, 128, 94, 255, 107, 129, 91, 255, 106, 127, 88, 255, 101, 125, 90, 255, 96, 123, 91, 255, 97, 120, 86, 255, 101, 120, 81, 255, 100, 116, 80, 255, 99, 115, 75, 255, 96, 114, 67, 255, 90, 107, 64, 255, 93, 113, 63, 255, 87, 105, 60, 255, 89, 99, 63, 255, 90, 100, 65, 255, 88, 98, 50, 255, 86, 94, 43, 255, 91, 90, 56, 255, 92, 85, 52, 255, 85, 83, 43, 255, 85, 81, 48, 255, 91, 83, 45, 255, 89, 82, 27, 255, 90, 80, 26, 255, 88, 76, 24, 255, 89, 72, 24, 255, 90, 71, 18, 255, 87, 69, 18, 255, 87, 66, 18, 255, 82, 66, 14, 255, 88, 63, 21, 255, 84, 60, 15, 255, 79, 60, 14, 255, 76, 57, 13, 255, 76, 56, 13, 255, 83, 60, 6, 255, 85, 57, 8, 255, 85, 52, 19, 255, 79, 50, 7, 255, 80, 51, 7, 255, 75, 50, 15, 255, 72, 45, 11, 255, 87, 50, 12, 255, 104, 53, 7, 255, 114, 51, 8, 255, 116, 48, 9, 255, 113, 54, 0, 255, 96, 48, 5, 255, 76, 36, 21, 255, 73, 37, 20, 255, 82, 40, 1, 255, 83, 38, 4, 255, 84, 42, 7, 255, 80, 39, 1, 255, 78, 34, 5, 255, 83, 39, 14, 255, 76, 34, 5, 255, 77, 34, 1, 255, 81, 37, 1, 255, 80, 35, 4, 255, 81, 34, 8, 255, 81, 34, 10, 255, 77, 31, 6, 255, 76, 31, 4, 255, 72, 36, 8, 255, 71, 32, 6, 255, 78, 32, 8, 255, 79, 28, 6, 255, 80, 26, 2, 255, 84, 32, 4, 255, 82, 35, 3, 255, 81, 37, 4, 255, 83, 34, 1, 255, 83, 32, 0, 255, 82, 34, 3, 255, 79, 32, 2, 255, 79, 31, 0, 255, 82, 32, 4, 255, 79, 29, 2, 255, 80, 28, 1, 255, 81, 27, 2, 255, 79, 29, 7, 255, 78, 30, 5, 255, 77, 31, 1, 255, 72, 30, 1, 255, 72, 28, 2, 255, 84, 31, 6, 255, 80, 30, 4, 255, 70, 28, 1, 255, 72, 30, 6, 255, 77, 31, 5, 255, 74, 30, 0, 255, 73, 30, 2, 255, 68, 23, 2, 255, 74, 27, 6, 255, 79, 29, 4, 255, 77, 26, 1, 255, 70, 24, 4, 255, 66, 24, 7, 255, 66, 21, 2, 255, 75, 26, 3, 255, 72, 24, 3, 255, 71, 28, 6, 255, 69, 24, 3, 255, 67, 24, 4, 255, 66, 23, 4, 255, 62, 24, 10, 255, 49, 21, 4, 255, 68, 22, 2, 255, 76, 26, 0, 255, 87, 30, 3, 255, 91, 28, 2, 255, 93, 33, 4, 255, 81, 28, 1, 255, 73, 24, 1, 255, 62, 26, 1, 255, 67, 26, 2, 255, 67, 25, 1, 255, 68, 21, 1, 255, 68, 24, 5, 255, 64, 22, 6, 255, 60, 17, 2, 255, 61, 20, 3, 255, 56, 20, 5, 255, 60, 19, 3, 255, 71, 24, 3, 255, 74, 26, 5, 255, 68, 21, 6, 255, 63, 19, 3, 255, 67, 25, 3, 255, 81, 26, 2, 255, 93, 25, 3, 255, 92, 23, 0, 255, 90, 26, 5, 255, 92, 29, 6, 255, 89, 30, 4, 255, 67, 20, 0, 255, 53, 16, 3, 255, 62, 18, 5, 255, 66, 17, 2, 255, 56, 16, 4, 255, 70, 19, 3, 255, 63, 17, 3, 255, 62, 21, 5, 255, 60, 20, 2, 255, 70, 22, 6, 255, 58, 18, 2, 255, 52, 19, 2, 255, 55, 18, 3, 255, 50, 18, 3, 255, 45, 17, 1, 255, 52, 21, 6, 255, 52, 18, 8, 255, 57, 17, 6, 255, 62, 18, 3, 255, 60, 15, 3, 255, 65, 19, 4, 255, 69, 19, 4, 255, 73, 20, 7, 255, 71, 24, 4, 255, 68, 18, 0, 255, 71, 20, 3, 255, 71, 23, 3, 255, 70, 22, 2, 255, 67, 19, 0, 255, 70, 22, 3, 255, 72, 22, 2, 255, 74, 22, 1, 255, 77, 19, 2, 255, 70, 20, 1, 255, 67, 19, 2, 255, 66, 19, 1, 255, 69, 20, 3, 255, 66, 22, 1, 255, 66, 17, 2, 255, 68, 15, 3, 255, 73, 19, 7, 255, 70, 15, 3, 255, 80, 19, 5, 255, 74, 15, 2, 255, 67, 17, 2, 255, 63, 15, 1, 255, 63, 16, 2, 255, 66, 17, 4, 255, 62, 14, 1, 255, 60, 15, 0, 255, 58, 13, 1, 255, 61, 15, 5, 255, 57, 17, 3, 255, 50, 15, 1, 255, 53, 15, 3, 255, 61, 14, 3, 255, 51, 12, 2, 255, 50, 13, 3, 255, 48, 10, 2, 255, 46, 12, 3, 255, 47, 12, 2, 255, 50, 12, 3, 255, 47, 12, 2, 255, 43, 13, 3, 255, 45, 13, 2, 255, 54, 13, 2, 255, 61, 11, 1, 255, 59, 14, 4, 255, 49, 17, 6, 255, 34, 12, 4, 255, 28, 10, 1, 255, 32, 10, 1, 255, 31, 8, 2, 255, 30, 12, 5, 255, 31, 10, 2, 255, 39, 11, 2, 255, 33, 7, 0, 255, 30, 10, 5, 255, 38, 14, 6, 255, 41, 11, 1, 255, 40, 9, 2, 255, 33, 7, 3, 255, 23, 10, 4, 255, 21, 6, 1, 255, 22, 8, 2, 255, 8, 4, 1, 255, 6, 1, 0, 255, 8, 3, 1, 255, 10, 5, 3, 255, 9, 3, 2, 255, 12, 5, 3, 255, 11, 5, 2, 255, 12, 5, 2, 255, 11, 4, 1, 255, 12, 3, 0, 255, 14, 4, 2, 255, 15, 7, 3, 255, 13, 7, 2, 255, 13, 6, 4, 255, 11, 3, 1, 255, 13, 4, 2, 255, 13, 3, 1, 255, 17, 7, 3, 255, 15, 7, 0, 255, 19, 9, 5, 255, 16, 5, 1, 255, 18, 8, 3, 255, 19, 8, 3, 255, 19, 10, 3, 255, 14, 8, 0, 255, 15, 9, 1, 255, 21, 10, 2, 255, 25, 10, 4, 255, 22, 8, 1, 255, 19, 8, 2, 255, 19, 10, 2, 255, 21, 10, 2, 255, 20, 12, 2, 255, 19, 11, 1, 255, 20, 12, 2, 255, 22, 10, 3, 255, 24, 11, 3, 255, 20, 13, 1, 255, 21, 12, 3, 255, 22, 11, 4, 255, 24, 12, 2, 255, 27, 15, 4, 255, 28, 15, 6, 255, 27, 13, 4, 255, 26, 12, 2, 255, 32, 16, 6, 255, 30, 13, 6, 255, 29, 12, 5, 255, 27, 15, 3, 255, 30, 20, 5, 255, 31, 18, 4, 255, 28, 15, 5, 255, 30, 17, 5, 255, 33, 17, 1, 255, 35, 20, 4, 255, 31, 23, 6, 255, 37, 22, 5, 255, 42, 23, 4, 255, 37, 23, 4, 255, 39, 18, 5, 255, 45, 19, 6, 255, 35, 20, 0, 255, 42, 20, 4, 255, 40, 19, 8, 255, 32, 22, 1, 255, 39, 24, 1, 255, 33, 17, 3, 255, 42, 21, 9, 255, 41, 20, 3, 255, 42, 21, 4, 255, 39, 20, 2, 255, 41, 22, 1, 255, 48, 25, 2, 255, 41, 25, 3, 255, 37, 20, 7, 255, 47, 19, 5, 255, 48, 22, 5, 255, 40, 22, 4, 255, 42, 23, 7, 255, 46, 23, 2, 255, 48, 21, 4, 255, 49, 24, 4, 255, 43, 23, 3, 255, 40, 23, 6, 255, 39, 23, 2, 255, 42, 24, 2, 255, 43, 25, 3, 255, 46, 26, 6, 255, 46, 24, 4, 255, 46, 26, 6, 255, 43, 25, 4, 255, 47, 27, 1, 255, 52, 27, 4, 255, 51, 22, 4, 255, 52, 25, 2, 255, 46, 27, 2, 255, 47, 28, 3, 255, 47, 26, 7, 255, 46, 23, 0, 255, 53, 28, 3, 255, 49, 24, 7, 255, 48, 25, 3, 255, 56, 27, 5, 255, 52, 24, 5, 255, 48, 29, 4, 255, 43, 27, 1, 255, 56, 26, 4, 255, 59, 25, 2, 255, 45, 24, 4, 255, 57, 28, 3, 255, 56, 25, 2, 255, 44, 25, 6, 255, 40, 23, 11, 255, 42, 29, 17, 255, 48, 30, 15, 255, 49, 30, 10, 255, 52, 31, 9, 255, 53, 30, 2, 255, 55, 26, 0, 255, 59, 28, 6, 255, 57, 30, 7, 255, 50, 26, 3, 255, 54, 33, 4, 255, 53, 31, 3, 255, 57, 27, 6, 255, 61, 25, 3, 255, 61, 29, 4, 255, 54, 30, 1, 255, 59, 31, 2, 255, 64, 27, 5, 255, 58, 33, 10, 255, 53, 31, 9, 255, 59, 31, 4, 255, 58, 32, 7, 255, 62, 37, 10, 255, 60, 37, 8, 255, 56, 40, 15, 255, 55, 39, 12, 255, 58, 42, 9, 255, 55, 40, 16, 255, 63, 46, 13, 255, 64, 51, 16, 255, 63, 44, 28, 255, 63, 58, 24, 255, 59, 56, 24, 255, 67, 57, 23, 255, 66, 63, 22, 255, 60, 57, 45, 255, 65, 63, 36, 255, 63, 64, 37, 255, 65, 65, 47, 255, 67, 68, 47, 255, 70, 70, 36, 255, 73, 72, 39, 255, 73, 78, 40, 255, 76, 79, 43, 255, 73, 77, 47, 255, 74, 86, 46, 255, 74, 87, 62, 255, 78, 86, 62, 255, 80, 91, 61, 255, 80, 89, 66, 255, 86, 98, 73, 255, 82, 99, 71, 255, 86, 105, 78, 255, 94, 107, 78, 255, 91, 105, 78, 255, 90, 111, 85, 255, 93, 118, 86, 255, 96, 119, 88, 255, 99, 118, 93, 255, 98, 122, 95, 255, 97, 126, 97, 255, 100, 124, 99, 255, 99, 129, 92, 255, 99, 130, 90, 255, 101, 129, 95, 255, 102, 129, 96, 255, 104, 130, 92, 255, 103, 130, 97, 255, 104, 127, 96, 255, 103, 125, 92, 255, 98, 124, 91, 255, 98, 126, 93, 255, 97, 123, 88, 255, 100, 119, 82, 255, 101, 116, 83, 255, 97, 114, 76, 255, 96, 114, 69, 255, 94, 110, 67, 255, 91, 110, 59, 255, 85, 105, 58, 255, 89, 102, 61, 255, 87, 98, 58, 255, 86, 97, 55, 255, 87, 94, 44, 255, 87, 86, 51, 255, 88, 87, 41, 255, 87, 88, 32, 255, 88, 86, 30, 255, 89, 83, 19, 255, 89, 78, 24, 255, 90, 74, 31, 255, 89, 74, 18, 255, 89, 72, 21, 255, 89, 69, 22, 255, 88, 70, 21, 255, 89, 69, 20, 255, 76, 60, 25, 255, 79, 62, 14, 255, 83, 60, 14, 255, 86, 57, 12, 255, 87, 59, 13, 255, 81, 52, 13, 255, 88, 55, 14, 255, 89, 54, 11, 255, 88, 55, 9, 255, 85, 57, 7, 255, 78, 51, 12, 255, 79, 49, 11, 255, 79, 47, 7, 255, 86, 48, 8, 255, 97, 49, 4, 255, 109, 49, 7, 255, 108, 48, 9, 255, 99, 51, 9, 255, 78, 39, 7, 255, 70, 33, 16, 255, 77, 39, 12, 255, 80, 39, 4, 255, 83, 37, 3, 255, 83, 42, 6, 255, 80, 37, 5, 255, 82, 36, 3, 255, 80, 38, 4, 255, 79, 39, 4, 255, 78, 36, 2, 255, 83, 39, 7, 255, 82, 35, 3, 255, 80, 34, 1, 255, 81, 35, 4, 255, 75, 31, 3, 255, 72, 30, 3, 255, 76, 35, 4, 255, 68, 32, 3, 255, 71, 33, 7, 255, 79, 36, 3, 255, 80, 36, 2, 255, 81, 36, 1, 255, 84, 32, 2, 255, 86, 31, 4, 255, 83, 31, 1, 255, 79, 31, 1, 255, 80, 31, 3, 255, 81, 30, 3, 255, 80, 27, 2, 255, 83, 31, 4, 255, 79, 32, 4, 255, 77, 33, 1, 255, 77, 30, 0, 255, 77, 29, 5, 255, 83, 31, 4, 255, 80, 30, 2, 255, 74, 31, 2, 255, 77, 36, 6, 255, 77, 30, 6, 255, 72, 27, 2, 255, 74, 27, 3, 255, 78, 28, 3, 255, 69, 30, 3, 255, 69, 30, 2, 255, 76, 32, 3, 255, 69, 26, 2, 255, 75, 26, 5, 255, 75, 28, 2, 255, 73, 25, 1, 255, 70, 25, 4, 255, 64, 22, 4, 255, 71, 26, 4, 255, 75, 26, 3, 255, 72, 25, 4, 255, 67, 22, 0, 255, 68, 24, 0, 255, 71, 24, 4, 255, 69, 23, 2, 255, 60, 22, 4, 255, 61, 24, 9, 255, 65, 22, 1, 255, 63, 23, 2, 255, 67, 25, 4, 255, 64, 16, 0, 255, 74, 25, 6, 255, 68, 22, 3, 255, 67, 21, 2, 255, 68, 23, 2, 255, 71, 21, 2, 255, 67, 26, 5, 255, 64, 24, 3, 255, 62, 24, 2, 255, 59, 20, 3, 255, 63, 17, 3, 255, 66, 22, 4, 255, 64, 21, 5, 255, 65, 23, 3, 255, 68, 22, 0, 255, 69, 21, 1, 255, 59, 19, 2, 255, 67, 22, 6, 255, 75, 23, 5, 255, 77, 22, 2, 255, 87, 24, 1, 255, 96, 26, 4, 255, 93, 21, 1, 255, 91, 21, 2, 255, 91, 23, 6, 255, 67, 21, 6, 255, 52, 17, 2, 255, 71, 26, 4, 255, 85, 27, 7, 255, 76, 22, 3, 255, 75, 26, 7, 255, 83, 21, 6, 255, 83, 21, 5, 255, 65, 23, 3, 255, 56, 23, 1, 255, 47, 17, 3, 255, 47, 15, 4, 255, 57, 17, 10, 255, 54, 19, 8, 255, 41, 19, 3, 255, 43, 16, 4, 255, 58, 19, 8, 255, 48, 14, 3, 255, 53, 21, 5, 255, 49, 15, 3, 255, 58, 18, 4, 255, 59, 16, 3, 255, 61, 17, 4, 255, 67, 21, 7, 255, 63, 20, 1, 255, 64, 23, 2, 255, 71, 26, 6, 255, 73, 24, 4, 255, 73, 22, 4, 255, 74, 21, 5, 255, 75, 19, 4, 255, 76, 20, 4, 255, 77, 18, 4, 255, 69, 19, 1, 255, 70, 20, 3, 255, 71, 20, 3, 255, 68, 19, 0, 255, 65, 15, 2, 255, 68, 18, 4, 255, 70, 19, 3, 255, 71, 16, 1, 255, 74, 20, 5, 255, 67, 19, 3, 255, 67, 13, 1, 255, 69, 17, 4, 255, 65, 18, 4, 255, 62, 13, 1, 255, 64, 15, 2, 255, 66, 17, 2, 255, 59, 14, 0, 255, 51, 18, 2, 255, 65, 18, 6, 255, 61, 14, 3, 255, 55, 15, 2, 255, 55, 16, 2, 255, 55, 14, 2, 255, 48, 15, 4, 255, 58, 13, 5, 255, 55, 10, 3, 255, 40, 12, 1, 255, 46, 14, 4, 255, 55, 13, 3, 255, 50, 14, 4, 255, 42, 11, 2, 255, 43, 11, 2, 255, 53, 16, 3, 255, 64, 15, 2, 255, 56, 12, 3, 255, 38, 9, 3, 255, 37, 9, 3, 255, 35, 10, 2, 255, 32, 11, 2, 255, 31, 13, 4, 255, 29, 11, 2, 255, 35, 8, 0, 255, 41, 8, 4, 255, 37, 11, 4, 255, 35, 13, 3, 255, 33, 10, 0, 255, 35, 8, 2, 255, 40, 11, 3, 255, 38, 8, 1, 255, 34, 10, 4, 255, 31, 8, 3, 255, 31, 8, 2, 255, 8, 3, 0, 255, 9, 3, 0, 255, 11, 2, 1, 255, 12, 4, 2, 255, 12, 5, 3, 255, 9, 5, 2, 255, 10, 2, 1, 255, 14, 6, 3, 255, 9, 5, 1, 255, 11, 6, 2, 255, 12, 3, 1, 255, 14, 4, 3, 255, 11, 3, 1, 255, 8, 5, 0, 255, 10, 5, 2, 255, 15, 7, 4, 255, 16, 6, 2, 255, 18, 7, 2, 255, 21, 8, 3, 255, 13, 4, 0, 255, 15, 8, 2, 255, 17, 8, 4, 255, 17, 6, 3, 255, 18, 7, 3, 255, 17, 12, 2, 255, 17, 12, 3, 255, 21, 10, 5, 255, 18, 7, 1, 255, 18, 7, 1, 255, 21, 9, 3, 255, 20, 10, 3, 255, 19, 11, 1, 255, 28, 13, 4, 255, 27, 13, 3, 255, 24, 12, 4, 255, 21, 10, 1, 255, 26, 13, 5, 255, 30, 16, 4, 255, 27, 12, 4, 255, 22, 9, 3, 255, 22, 12, 4, 255, 21, 12, 1, 255, 23, 13, 0, 255, 24, 14, 1, 255, 25, 17, 5, 255, 24, 14, 4, 255, 31, 14, 7, 255, 24, 13, 3, 255, 23, 14, 2, 255, 34, 20, 6, 255, 32, 20, 2, 255, 28, 14, 2, 255, 34, 18, 3, 255, 39, 22, 5, 255, 38, 21, 6, 255, 38, 21, 6, 255, 38, 20, 3, 255, 41, 19, 0, 255, 40, 21, 2, 255, 39, 19, 4, 255, 41, 16, 5, 255, 36, 19, 3, 255, 45, 19, 6, 255, 34, 18, 4, 255, 30, 17, 1, 255, 44, 25, 5, 255, 28, 17, 6, 255, 33, 17, 3, 255, 44, 19, 1, 255, 44, 18, 3, 255, 45, 19, 2, 255, 49, 22, 2, 255, 47, 23, 2, 255, 47, 24, 4, 255, 50, 22, 7, 255, 41, 16, 2, 255, 44, 25, 4, 255, 50, 22, 0, 255, 43, 18, 4, 255, 45, 23, 6, 255, 47, 23, 3, 255, 46, 21, 4, 255, 47, 24, 3, 255, 43, 26, 2, 255, 47, 26, 3, 255, 45, 23, 1, 255, 43, 25, 2, 255, 42, 26, 3, 255, 51, 24, 2, 255, 46, 21, 2, 255, 46, 26, 6, 255, 53, 24, 2, 255, 46, 22, 3, 255, 45, 19, 2, 255, 48, 25, 2, 255, 38, 22, 5, 255, 48, 27, 4, 255, 59, 26, 6, 255, 49, 26, 2, 255, 40, 28, 1, 255, 53, 29, 7, 255, 57, 28, 5, 255, 51, 24, 2, 255, 51, 25, 3, 255, 55, 24, 2, 255, 52, 25, 0, 255, 55, 27, 4, 255, 54, 24, 4, 255, 45, 26, 1, 255, 58, 26, 3, 255, 53, 28, 4, 255, 45, 24, 3, 255, 58, 28, 6, 255, 52, 25, 2, 255, 53, 26, 17, 255, 51, 32, 23, 255, 55, 31, 15, 255, 55, 32, 5, 255, 57, 31, 4, 255, 55, 29, 3, 255, 49, 28, 4, 255, 56, 27, 8, 255, 56, 26, 6, 255, 60, 31, 4, 255, 61, 31, 6, 255, 55, 29, 2, 255, 54, 30, 3, 255, 50, 26, 6, 255, 53, 28, 5, 255, 66, 29, 4, 255, 63, 31, 5, 255, 58, 35, 7, 255, 64, 34, 6, 255, 59, 35, 4, 255, 60, 36, 8, 255, 57, 37, 8, 255, 58, 39, 10, 255, 63, 39, 15, 255, 60, 41, 15, 255, 62, 46, 15, 255, 63, 42, 16, 255, 65, 47, 24, 255, 67, 52, 26, 255, 64, 59, 19, 255, 54, 54, 19, 255, 60, 59, 27, 255, 61, 58, 24, 255, 63, 57, 32, 255, 64, 61, 40, 255, 60, 60, 44, 255, 64, 69, 42, 255, 65, 70, 41, 255, 65, 68, 34, 255, 71, 73, 44, 255, 72, 79, 39, 255, 74, 80, 49, 255, 81, 82, 52, 255, 78, 84, 49, 255, 74, 87, 66, 255, 75, 89, 61, 255, 81, 91, 67, 255, 79, 92, 67, 255, 83, 99, 73, 255, 86, 103, 78, 255, 88, 105, 79, 255, 90, 107, 81, 255, 93, 112, 86, 255, 93, 116, 89, 255, 94, 119, 91, 255, 97, 121, 92, 255, 99, 123, 93, 255, 96, 125, 94, 255, 95, 127, 96, 255, 101, 126, 100, 255, 100, 131, 95, 255, 98, 131, 90, 255, 102, 132, 95, 255, 102, 131, 97, 255, 103, 129, 97, 255, 102, 132, 99, 255, 101, 129, 95, 255, 100, 126, 90, 255, 97, 124, 85, 255, 100, 127, 88, 255, 98, 122, 86, 255, 97, 115, 79, 255, 95, 115, 77, 255, 93, 115, 74, 255, 95, 111, 71, 255, 95, 106, 70, 255, 96, 107, 63, 255, 93, 105, 61, 255, 90, 97, 58, 255, 90, 98, 59, 255, 89, 97, 51, 255, 90, 91, 46, 255, 91, 88, 47, 255, 87, 88, 40, 255, 81, 83, 38, 255, 87, 83, 38, 255, 93, 79, 24, 255, 91, 77, 30, 255, 84, 74, 24, 255, 85, 71, 24, 255, 91, 70, 22, 255, 89, 67, 26, 255, 85, 69, 18, 255, 82, 64, 13, 255, 79, 63, 21, 255, 74, 64, 13, 255, 81, 61, 13, 255, 85, 57, 16, 255, 83, 58, 11, 255, 80, 51, 11, 255, 81, 54, 12, 255, 75, 52, 6, 255, 89, 57, 13, 255, 100, 57, 11, 255, 91, 49, 5, 255, 76, 43, 4, 255, 76, 44, 7, 255, 81, 43, 5, 255, 80, 42, 2, 255, 82, 46, 6, 255, 83, 44, 10, 255, 78, 36, 6, 255, 81, 38, 6, 255, 80, 37, 4, 255, 80, 39, 2, 255, 75, 38, 3, 255, 81, 39, 7, 255, 79, 35, 5, 255, 85, 35, 6, 255, 84, 36, 6, 255, 80, 36, 3, 255, 83, 33, 2, 255, 80, 33, 8, 255, 76, 29, 8, 255, 80, 33, 5, 255, 79, 32, 3, 255, 82, 35, 8, 255, 78, 33, 7, 255, 77, 35, 4, 255, 71, 34, 4, 255, 77, 34, 4, 255, 81, 31, 2, 255, 80, 31, 3, 255, 76, 29, 2, 255, 86, 34, 3, 255, 88, 31, 2, 255, 84, 27, 2, 255, 83, 31, 4, 255, 86, 34, 5, 255, 87, 33, 3, 255, 81, 29, 1, 255, 81, 31, 5, 255, 81, 27, 4, 255, 80, 31, 1, 255, 77, 32, 3, 255, 78, 33, 7, 255, 78, 28, 4, 255, 82, 30, 1, 255, 85, 34, 2, 255, 87, 32, 2, 255, 89, 33, 6, 255, 78, 31, 3, 255, 72, 33, 4, 255, 75, 29, 4, 255, 79, 25, 2, 255, 72, 30, 1, 255, 75, 32, 5, 255, 76, 30, 1, 255, 73, 29, 1, 255, 71, 27, 8, 255, 64, 29, 3, 255, 67, 24, 2, 255, 71, 25, 4, 255, 71, 26, 4, 255, 71, 26, 3, 255, 70, 24, 3, 255, 71, 24, 5, 255, 69, 24, 5, 255, 67, 24, 2, 255, 69, 22, 3, 255, 68, 21, 3, 255, 70, 25, 3, 255, 70, 25, 3, 255, 69, 23, 3, 255, 67, 26, 3, 255, 64, 26, 3, 255, 61, 19, 0, 255, 58, 22, 5, 255, 69, 23, 7, 255, 80, 26, 4, 255, 79, 32, 2, 255, 83, 28, 3, 255, 79, 25, 6, 255, 73, 24, 4, 255, 71, 24, 4, 255, 55, 18, 0, 255, 59, 17, 1, 255, 63, 22, 4, 255, 65, 20, 3, 255, 66, 20, 2, 255, 66, 20, 5, 255, 63, 17, 4, 255, 58, 17, 4, 255, 82, 23, 5, 255, 90, 19, 3, 255, 89, 24, 7, 255, 91, 23, 5, 255, 92, 23, 4, 255, 94, 20, 3, 255, 90, 23, 4, 255, 85, 20, 4, 255, 76, 19, 5, 255, 75, 20, 4, 255, 81, 24, 2, 255, 90, 30, 2, 255, 88, 27, 1, 255, 86, 22, 7, 255, 88, 26, 4, 255, 85, 23, 2, 255, 80, 22, 4, 255, 64, 19, 1, 255, 49, 16, 3, 255, 49, 17, 2, 255, 55, 19, 6, 255, 60, 17, 5, 255, 52, 17, 5, 255, 44, 14, 3, 255, 50, 16, 4, 255, 47, 16, 5, 255, 50, 20, 2, 255, 48, 21, 2, 255, 55, 20, 3, 255, 61, 19, 3, 255, 61, 19, 2, 255, 60, 21, 2, 255, 62, 23, 3, 255, 60, 22, 2, 255, 66, 21, 4, 255, 67, 17, 2, 255, 65, 19, 1, 255, 63, 19, 3, 255, 72, 19, 4, 255, 82, 21, 5, 255, 74, 16, 1, 255, 73, 18, 1, 255, 68, 20, 1, 255, 67, 19, 2, 255, 67, 18, 2, 255, 63, 17, 2, 255, 63, 17, 2, 255, 62, 17, 2, 255, 60, 16, 0, 255, 63, 17, 1, 255, 68, 19, 3, 255, 68, 17, 3, 255, 64, 17, 2, 255, 63, 18, 2, 255, 65, 16, 1, 255, 66, 19, 2, 255, 68, 20, 3, 255, 68, 14, 1, 255, 60, 15, 2, 255, 58, 15, 1, 255, 54, 15, 1, 255, 53, 17, 1, 255, 56, 15, 2, 255, 56, 13, 4, 255, 59, 13, 4, 255, 69, 14, 4, 255, 62, 11, 4, 255, 46, 13, 6, 255, 37, 9, 1, 255, 49, 11, 1, 255, 52, 12, 4, 255, 40, 11, 1, 255, 38, 11, 3, 255, 46, 13, 3, 255, 55, 14, 2, 255, 47, 11, 2, 255, 32, 5, 1, 255, 40, 9, 1, 255, 34, 10, 3, 255, 29, 11, 3, 255, 28, 8, 2, 255, 33, 8, 3, 255, 34, 10, 2, 255, 32, 11, 3, 255, 39, 10, 4, 255, 42, 9, 2, 255, 39, 10, 2, 255, 41, 13, 5, 255, 42, 13, 3, 255, 38, 13, 2, 255, 29, 9, 4, 255, 27, 9, 2, 255, 28, 10, 3, 255, 11, 6, 3, 255, 11, 4, 2, 255, 11, 3, 1, 255, 12, 4, 2, 255, 12, 4, 2, 255, 9, 3, 0, 255, 11, 3, 1, 255, 14, 5, 3, 255, 12, 5, 2, 255, 13, 5, 3, 255, 16, 5, 3, 255, 16, 5, 3, 255, 13, 4, 2, 255, 13, 5, 2, 255, 15, 7, 4, 255, 16, 7, 5, 255, 18, 7, 5, 255, 18, 7, 4, 255, 23, 10, 5, 255, 12, 5, 1, 255, 12, 7, 1, 255, 16, 9, 3, 255, 17, 6, 3, 255, 19, 6, 3, 255, 20, 10, 5, 255, 19, 9, 2, 255, 19, 7, 1, 255, 21, 10, 6, 255, 19, 10, 5, 255, 19, 9, 4, 255, 17, 7, 1, 255, 19, 8, 1, 255, 21, 11, 3, 255, 20, 8, 0, 255, 24, 10, 1, 255, 24, 10, 2, 255, 21, 9, 2, 255, 20, 10, 2, 255, 23, 13, 4, 255, 18, 11, 1, 255, 20, 13, 2, 255, 24, 15, 4, 255, 27, 13, 4, 255, 27, 12, 3, 255, 27, 16, 6, 255, 23, 15, 3, 255, 27, 13, 4, 255, 24, 14, 3, 255, 22, 14, 1, 255, 27, 15, 0, 255, 29, 18, 2, 255, 34, 21, 3, 255, 33, 16, 1, 255, 31, 15, 2, 255, 35, 19, 4, 255, 38, 22, 3, 255, 38, 18, 2, 255, 42, 16, 4, 255, 38, 17, 3, 255, 39, 17, 0, 255, 41, 17, 2, 255, 35, 21, 4, 255, 37, 18, 3, 255, 32, 20, 2, 255, 37, 20, 4, 255, 41, 18, 1, 255, 27, 19, 3, 255, 39, 22, 5, 255, 43, 23, 3, 255, 34, 18, 1, 255, 46, 20, 4, 255, 52, 25, 7, 255, 40, 22, 0, 255, 40, 22, 2, 255, 48, 19, 4, 255, 47, 21, 2, 255, 44, 27, 4, 255, 50, 23, 3, 255, 44, 23, 3, 255, 44, 25, 7, 255, 43, 23, 4, 255, 40, 20, 0, 255, 42, 23, 4, 255, 46, 23, 7, 255, 44, 23, 4, 255, 45, 24, 3, 255, 43, 24, 3, 255, 42, 22, 5, 255, 48, 24, 7, 255, 43, 21, 4, 255, 41, 22, 1, 255, 47, 24, 0, 255, 46, 24, 7, 255, 54, 25, 5, 255, 51, 25, 6, 255, 47, 24, 4, 255, 51, 25, 6, 255, 52, 26, 3, 255, 51, 24, 2, 255, 48, 24, 2, 255, 49, 27, 4, 255, 53, 26, 2, 255, 52, 28, 5, 255, 50, 26, 3, 255, 59, 29, 5, 255, 57, 27, 3, 255, 53, 28, 4, 255, 47, 25, 2, 255, 57, 26, 7, 255, 56, 27, 5, 255, 42, 25, 1, 255, 46, 25, 4, 255, 53, 29, 4, 255, 55, 29, 1, 255, 55, 23, 3, 255, 56, 28, 5, 255, 55, 27, 3, 255, 57, 35, 6, 255, 53, 31, 3, 255, 55, 31, 5, 255, 52, 28, 0, 255, 58, 28, 4, 255, 54, 25, 8, 255, 53, 25, 4, 255, 53, 29, 1, 255, 53, 32, 5, 255, 52, 31, 8, 255, 50, 28, 7, 255, 55, 30, 6, 255, 45, 28, 3, 255, 63, 32, 6, 255, 58, 36, 6, 255, 59, 30, 10, 255, 57, 35, 7, 255, 48, 34, 6, 255, 54, 36, 14, 255, 59, 38, 11, 255, 58, 42, 9, 255, 59, 46, 11, 255, 61, 46, 16, 255, 62, 46, 17, 255, 64, 47, 15, 255, 68, 48, 16, 255, 60, 56, 20, 255, 56, 57, 23, 255, 62, 56, 27, 255, 57, 58, 36, 255, 63, 60, 42, 255, 68, 68, 26, 255, 65, 67, 28, 255, 65, 67, 37, 255, 67, 70, 43, 255, 71, 76, 42, 255, 71, 75, 49, 255, 70, 73, 52, 255, 70, 77, 58, 255, 77, 81, 62, 255, 75, 82, 58, 255, 72, 84, 61, 255, 80, 91, 66, 255, 81, 94, 68, 255, 82, 96, 70, 255, 85, 100, 74, 255, 87, 103, 77, 255, 89, 107, 80, 255, 92, 112, 84, 255, 95, 115, 87, 255, 95, 118, 89, 255, 99, 122, 94, 255, 99, 122, 94, 255, 99, 124, 95, 255, 101, 130, 99, 255, 97, 130, 98, 255, 102, 132, 101, 255, 102, 134, 98, 255, 100, 132, 95, 255, 102, 133, 99, 255, 104, 132, 103, 255, 102, 128, 102, 255, 105, 132, 98, 255, 104, 131, 95, 255, 100, 126, 89, 255, 98, 124, 86, 255, 99, 124, 85, 255, 99, 121, 83, 255, 98, 117, 81, 255, 97, 115, 73, 255, 97, 117, 71, 255, 93, 107, 76, 255, 93, 102, 79, 255, 93, 103, 72, 255, 91, 103, 58, 255, 90, 98, 57, 255, 86, 92, 56, 255, 87, 90, 57, 255, 91, 90, 42, 255, 92, 88, 35, 255, 92, 85, 45, 255, 83, 81, 36, 255, 84, 80, 38, 255, 90, 80, 35, 255, 88, 75, 29, 255, 87, 76, 22, 255, 88, 69, 30, 255, 91, 66, 19, 255, 85, 65, 22, 255, 78, 66, 15, 255, 79, 62, 19, 255, 82, 62, 7, 255, 83, 63, 8, 255, 85, 61, 8, 255, 79, 55, 12, 255, 84, 56, 12, 255, 87, 52, 15, 255, 80, 54, 9, 255, 73, 54, 3, 255, 97, 56, 15, 255, 113, 52, 9, 255, 107, 54, 5, 255, 85, 46, 6, 255, 76, 43, 8, 255, 79, 44, 10, 255, 82, 44, 8, 255, 81, 43, 3, 255, 79, 41, 7, 255, 75, 39, 7, 255, 77, 40, 10, 255, 74, 39, 9, 255, 75, 40, 4, 255, 76, 44, 4, 255, 79, 41, 7, 255, 77, 36, 8, 255, 79, 35, 4, 255, 76, 33, 1, 255, 77, 34, 5, 255, 85, 35, 7, 255, 81, 33, 3, 255, 78, 35, 2, 255, 83, 38, 5, 255, 81, 35, 2, 255, 78, 31, 2, 255, 76, 30, 3, 255, 74, 32, 5, 255, 73, 32, 5, 255, 94, 37, 6, 255, 105, 36, 0, 255, 96, 34, 8, 255, 79, 27, 8, 255, 86, 32, 6, 255, 89, 31, 3, 255, 81, 30, 1, 255, 82, 32, 1, 255, 84, 33, 1, 255, 83, 32, 2, 255, 80, 29, 1, 255, 80, 32, 4, 255, 79, 30, 5, 255, 79, 29, 0, 255, 81, 30, 1, 255, 82, 29, 4, 255, 80, 27, 3, 255, 76, 28, 0, 255, 83, 32, 3, 255, 91, 33, 3, 255, 94, 36, 0, 255, 82, 31, 0, 255, 72, 29, 3, 255, 71, 29, 7, 255, 74, 26, 4, 255, 76, 27, 3, 255, 73, 31, 6, 255, 75, 30, 3, 255, 74, 27, 2, 255, 76, 25, 7, 255, 69, 28, 2, 255, 71, 25, 2, 255, 76, 25, 4, 255, 76, 25, 3, 255, 71, 22, 2, 255, 70, 24, 5, 255, 64, 21, 4, 255, 64, 21, 4, 255, 66, 22, 5, 255, 64, 21, 4, 255, 65, 20, 1, 255, 71, 24, 2, 255, 68, 24, 2, 255, 65, 26, 3, 255, 67, 21, 2, 255, 65, 24, 2, 255, 67, 23, 3, 255, 57, 23, 2, 255, 69, 24, 2, 255, 91, 29, 6, 255, 95, 28, 2, 255, 97, 30, 4, 255, 87, 21, 1, 255, 94, 24, 3, 255, 84, 21, 3, 255, 67, 21, 4, 255, 57, 19, 3, 255, 61, 23, 0, 255, 70, 25, 2, 255, 79, 26, 5, 255, 70, 20, 2, 255, 58, 19, 1, 255, 62, 20, 2, 255, 84, 25, 3, 255, 94, 25, 4, 255, 89, 22, 1, 255, 92, 23, 1, 255, 92, 24, 3, 255, 92, 24, 6, 255, 84, 24, 2, 255, 92, 27, 0, 255, 94, 29, 1, 255, 88, 26, 1, 255, 85, 25, 4, 255, 86, 21, 2, 255, 93, 22, 2, 255, 91, 21, 2, 255, 88, 19, 2, 255, 83, 24, 3, 255, 85, 22, 3, 255, 73, 19, 3, 255, 59, 20, 4, 255, 61, 21, 8, 255, 60, 18, 2, 255, 58, 14, 0, 255, 60, 20, 1, 255, 50, 17, 1, 255, 41, 14, 4, 255, 44, 14, 5, 255, 50, 13, 5, 255, 57, 15, 6, 255, 56, 17, 4, 255, 61, 16, 2, 255, 65, 16, 2, 255, 57, 19, 1, 255, 63, 20, 4, 255, 67, 19, 4, 255, 67, 18, 4, 255, 67, 17, 3, 255, 71, 20, 5, 255, 70, 20, 6, 255, 68, 19, 2, 255, 72, 22, 3, 255, 73, 21, 3, 255, 69, 18, 2, 255, 65, 18, 2, 255, 64, 18, 2, 255, 63, 18, 2, 255, 63, 14, 1, 255, 64, 16, 2, 255, 64, 17, 3, 255, 62, 16, 1, 255, 64, 16, 2, 255, 67, 19, 4, 255, 66, 15, 2, 255, 68, 19, 3, 255, 67, 18, 1, 255, 69, 17, 0, 255, 69, 18, 1, 255, 66, 17, 2, 255, 70, 18, 4, 255, 60, 15, 1, 255, 52, 19, 2, 255, 55, 17, 2, 255, 61, 15, 3, 255, 54, 11, 0, 255, 57, 13, 4, 255, 66, 12, 2, 255, 70, 18, 3, 255, 56, 13, 0, 255, 49, 12, 5, 255, 48, 10, 3, 255, 42, 8, 0, 255, 41, 11, 2, 255, 43, 11, 1, 255, 42, 13, 3, 255, 42, 12, 3, 255, 43, 11, 3, 255, 40, 9, 2, 255, 36, 9, 2, 255, 32, 12, 3, 255, 30, 10, 3, 255, 27, 8, 2, 255, 30, 11, 5, 255, 29, 10, 3, 255, 28, 11, 2, 255, 31, 12, 3, 255, 42, 11, 5, 255, 43, 8, 1, 255, 38, 11, 0, 255, 50, 14, 6, 255, 57, 14, 5, 255, 49, 13, 1, 255, 38, 10, 5, 255, 33, 9, 2, 255, 30, 7, 1, 255, 12, 3, 2, 255, 11, 3, 1, 255, 11, 3, 1, 255, 11, 3, 1, 255, 11, 3, 1, 255, 10, 3, 0, 255, 12, 3, 1, 255, 12, 3, 1, 255, 11, 3, 0, 255, 10, 1, 0, 255, 14, 3, 2, 255, 16, 5, 3, 255, 16, 6, 4, 255, 17, 7, 3, 255, 17, 7, 4, 255, 16, 6, 4, 255, 16, 6, 4, 255, 15, 4, 2, 255, 16, 5, 3, 255, 15, 4, 2, 255, 16, 6, 4, 255, 17, 8, 3, 255, 18, 7, 3, 255, 17, 8, 3, 255, 11, 7, 1, 255, 13, 7, 0, 255, 19, 8, 3, 255, 17, 8, 3, 255, 16, 8, 2, 255, 18, 10, 4, 255, 19, 9, 3, 255, 19, 8, 2, 255, 20, 11, 4, 255, 18, 9, 0, 255, 22, 10, 1, 255, 23, 10, 2, 255, 21, 10, 4, 255, 18, 9, 3, 255, 23, 16, 6, 255, 21, 16, 3, 255, 19, 13, 1, 255, 22, 12, 2, 255, 28, 14, 6, 255, 29, 13, 5, 255, 26, 14, 4, 255, 24, 12, 3, 255, 32, 13, 6, 255, 28, 13, 3, 255, 28, 12, 1, 255, 31, 12, 1, 255, 30, 12, 0, 255, 30, 16, 3, 255, 30, 17, 3, 255, 27, 16, 5, 255, 25, 16, 5, 255, 28, 19, 5, 255, 29, 15, 3, 255, 33, 16, 2, 255, 35, 20, 4, 255, 36, 17, 6, 255, 37, 17, 3, 255, 34, 21, 1, 255, 37, 17, 1, 255, 37, 20, 7, 255, 39, 18, 5, 255, 45, 17, 5, 255, 33, 22, 5, 255, 40, 21, 4, 255, 40, 20, 2, 255, 33, 19, 2, 255, 38, 18, 2, 255, 45, 24, 5, 255, 42, 23, 2, 255, 38, 23, 1, 255, 45, 22, 4, 255, 50, 21, 3, 255, 48, 21, 1, 255, 46, 22, 5, 255, 43, 23, 2, 255, 38, 20, 2, 255, 41, 20, 3, 255, 45, 24, 0, 255, 43, 21, 6, 255, 46, 18, 5, 255, 45, 22, 4, 255, 39, 22, 0, 255, 45, 25, 5, 255, 44, 22, 6, 255, 41, 20, 4, 255, 47, 26, 9, 255, 47, 24, 3, 255, 40, 23, 0, 255, 43, 22, 2, 255, 47, 20, 1, 255, 52, 23, 3, 255, 47, 24, 0, 255, 46, 20, 3, 255, 53, 29, 4, 255, 52, 25, 3, 255, 52, 26, 5, 255, 48, 27, 0, 255, 55, 28, 4, 255, 52, 28, 7, 255, 50, 26, 3, 255, 51, 26, 1, 255, 54, 24, 0, 255, 52, 25, 2, 255, 46, 26, 2, 255, 57, 23, 7, 255, 54, 27, 6, 255, 52, 25, 4, 255, 52, 25, 8, 255, 48, 25, 3, 255, 64, 29, 4, 255, 58, 27, 4, 255, 55, 29, 2, 255, 58, 27, 0, 255, 56, 27, 2, 255, 53, 26, 3, 255, 52, 28, 4, 255, 53, 29, 3, 255, 58, 31, 4, 255, 54, 26, 3, 255, 45, 21, 4, 255, 48, 26, 6, 255, 48, 25, 6, 255, 56, 28, 9, 255, 61, 31, 3, 255, 55, 31, 6, 255, 46, 30, 4, 255, 62, 27, 5, 255, 52, 29, 5, 255, 51, 25, 8, 255, 53, 30, 10, 255, 46, 35, 7, 255, 56, 38, 8, 255, 62, 39, 9, 255, 57, 42, 9, 255, 55, 42, 6, 255, 63, 47, 11, 255, 60, 46, 10, 255, 65, 52, 13, 255, 67, 51, 24, 255, 58, 52, 22, 255, 59, 54, 29, 255, 67, 61, 28, 255, 63, 65, 32, 255, 60, 59, 39, 255, 67, 68, 28, 255, 69, 69, 25, 255, 70, 70, 35, 255, 71, 74, 39, 255, 70, 77, 43, 255, 71, 75, 53, 255, 72, 79, 42, 255, 73, 84, 49, 255, 76, 80, 65, 255, 76, 86, 58, 255, 74, 88, 60, 255, 82, 93, 69, 255, 80, 96, 70, 255, 84, 98, 74, 255, 88, 102, 77, 255, 89, 104, 78, 255, 92, 111, 82, 255, 91, 114, 82, 255, 94, 117, 85, 255, 100, 123, 92, 255, 98, 121, 94, 255, 99, 124, 97, 255, 103, 131, 102, 255, 99, 130, 99, 255, 99, 133, 100, 255, 98, 133, 100, 255, 100, 134, 99, 255, 103, 135, 98, 255, 104, 136, 101, 255, 104, 135, 103, 255, 104, 130, 102, 255, 104, 130, 100, 255, 104, 130, 99, 255, 102, 126, 94, 255, 102, 125, 92, 255, 100, 121, 88, 255, 100, 118, 84, 255, 101, 119, 83, 255, 97, 120, 73, 255, 94, 113, 68, 255, 92, 108, 70, 255, 93, 105, 72, 255, 92, 101, 70, 255, 88, 100, 51, 255, 92, 101, 55, 255, 86, 94, 49, 255, 86, 87, 54, 255, 89, 85, 50, 255, 90, 86, 37, 255, 91, 82, 36, 255, 88, 83, 24, 255, 86, 80, 23, 255, 87, 79, 33, 255, 85, 72, 31, 255, 84, 69, 33, 255, 85, 67, 18, 255, 90, 69, 15, 255, 86, 66, 17, 255, 85, 66, 18, 255, 83, 64, 10, 255, 82, 58, 17, 255, 84, 58, 8, 255, 83, 52, 17, 255, 82, 53, 20, 255, 76, 54, 9, 255, 80, 58, 9, 255, 80, 55, 11, 255, 74, 48, 7, 255, 90, 54, 13, 255, 102, 54, 8, 255, 95, 50, 3, 255, 80, 44, 4, 255, 71, 38, 4, 255, 75, 43, 10, 255, 76, 42, 7, 255, 78, 44, 7, 255, 78, 43, 6, 255, 75, 42, 6, 255, 76, 42, 6, 255, 73, 37, 5, 255, 75, 37, 5, 255, 75, 34, 7, 255, 79, 38, 5, 255, 75, 38, 1, 255, 77, 35, 2, 255, 73, 32, 6, 255, 69, 30, 7, 255, 83, 36, 5, 255, 79, 36, 0, 255, 74, 34, 0, 255, 79, 37, 2, 255, 79, 34, 1, 255, 79, 33, 2, 255, 79, 34, 5, 255, 73, 31, 4, 255, 86, 41, 8, 255, 98, 43, 3, 255, 107, 41, 5, 255, 109, 41, 4, 255, 99, 37, 3, 255, 86, 30, 2, 255, 84, 34, 4, 255, 80, 33, 4, 255, 82, 35, 3, 255, 81, 30, 2, 255, 82, 31, 4, 255, 80, 31, 5, 255, 74, 29, 2, 255, 76, 29, 4, 255, 79, 32, 2, 255, 82, 32, 0, 255, 82, 30, 2, 255, 82, 32, 5, 255, 75, 31, 4, 255, 73, 29, 1, 255, 81, 31, 2, 255, 92, 37, 7, 255, 89, 35, 6, 255, 76, 26, 3, 255, 73, 28, 3, 255, 76, 28, 3, 255, 74, 25, 6, 255, 68, 26, 3, 255, 73, 27, 3, 255, 72, 27, 3, 255, 75, 23, 3, 255, 76, 26, 1, 255, 71, 24, 0, 255, 72, 21, 1, 255, 71, 20, 1, 255, 73, 24, 3, 255, 70, 23, 3, 255, 69, 24, 3, 255, 66, 22, 4, 255, 63, 23, 5, 255, 61, 24, 4, 255, 67, 25, 3, 255, 75, 27, 4, 255, 67, 23, 2, 255, 58, 24, 4, 255, 62, 26, 2, 255, 68, 23, 3, 255, 68, 20, 3, 255, 69, 23, 5, 255, 64, 24, 1, 255, 73, 26, 2, 255, 86, 25, 4, 255, 100, 27, 6, 255, 96, 27, 3, 255, 96, 27, 3, 255, 96, 24, 4, 255, 77, 24, 7, 255, 60, 20, 2, 255, 72, 27, 3, 255, 82, 27, 3, 255, 86, 28, 4, 255, 77, 27, 7, 255, 61, 21, 1, 255, 64, 20, 2, 255, 70, 21, 2, 255, 83, 25, 5, 255, 86, 23, 1, 255, 91, 27, 2, 255, 92, 27, 4, 255, 90, 28, 5, 255, 76, 24, 2, 255, 74, 24, 6, 255, 84, 26, 4, 255, 86, 24, 0, 255, 93, 28, 2, 255, 91, 27, 3, 255, 88, 25, 4, 255, 96, 27, 2, 255, 94, 17, 2, 255, 81, 21, 4, 255, 79, 23, 7, 255, 57, 16, 2, 255, 55, 17, 2, 255, 56, 16, 4, 255, 58, 16, 2, 255, 55, 18, 5, 255, 46, 19, 1, 255, 50, 18, 1, 255, 46, 17, 9, 255, 43, 13, 4, 255, 47, 16, 6, 255, 49, 17, 3, 255, 52, 21, 3, 255, 58, 18, 2, 255, 60, 18, 3, 255, 54, 19, 1, 255, 51, 18, 1, 255, 57, 17, 2, 255, 61, 19, 3, 255, 62, 18, 2, 255, 69, 17, 3, 255, 72, 16, 3, 255, 66, 18, 2, 255, 65, 21, 2, 255, 69, 23, 5, 255, 65, 18, 2, 255, 62, 16, 2, 255, 63, 18, 2, 255, 65, 20, 5, 255, 71, 19, 6, 255, 66, 17, 3, 255, 63, 15, 1, 255, 63, 17, 2, 255, 64, 17, 2, 255, 64, 15, 2, 255, 64, 14, 1, 255, 66, 17, 3, 255, 66, 14, 1, 255, 68, 14, 2, 255, 69, 17, 6, 255, 66, 17, 6, 255, 60, 14, 3, 255, 59, 17, 1, 255, 57, 17, 3, 255, 58, 14, 3, 255, 61, 15, 3, 255, 57, 14, 2, 255, 52, 13, 2, 255, 50, 13, 0, 255, 53, 18, 1, 255, 44, 14, 0, 255, 43, 11, 5, 255, 49, 12, 5, 255, 44, 12, 3, 255, 38, 12, 4, 255, 43, 11, 2, 255, 45, 12, 2, 255, 39, 10, 3, 255, 31, 6, 2, 255, 31, 6, 1, 255, 39, 12, 5, 255, 39, 10, 5, 255, 44, 11, 7, 255, 37, 8, 4, 255, 29, 12, 5, 255, 27, 13, 2, 255, 36, 11, 5, 255, 46, 12, 4, 255, 49, 12, 3, 255, 49, 12, 2, 255, 49, 11, 2, 255, 53, 12, 3, 255, 61, 13, 2, 255, 62, 13, 1, 255, 45, 10, 5, 255, 38, 8, 2, 255, 37, 8, 4, 255, 7, 0, 0, 255, 8, 1, 1, 255, 10, 3, 1, 255, 10, 3, 1, 255, 11, 3, 1, 255, 11, 3, 1, 255, 12, 2, 1, 255, 9, 4, 1, 255, 11, 7, 4, 255, 12, 5, 3, 255, 13, 3, 1, 255, 13, 3, 1, 255, 14, 5, 1, 255, 15, 4, 2, 255, 14, 3, 2, 255, 13, 3, 1, 255, 16, 6, 4, 255, 15, 5, 3, 255, 17, 6, 4, 255, 16, 7, 5, 255, 14, 5, 3, 255, 13, 4, 1, 255, 15, 6, 1, 255, 19, 8, 4, 255, 16, 8, 2, 255, 15, 7, 1, 255, 18, 8, 4, 255, 17, 9, 3, 255, 17, 10, 4, 255, 19, 11, 5, 255, 17, 7, 1, 255, 18, 7, 1, 255, 16, 7, 0, 255, 21, 11, 1, 255, 22, 12, 3, 255, 19, 8, 1, 255, 21, 9, 6, 255, 18, 9, 3, 255, 20, 11, 1, 255, 20, 11, 0, 255, 19, 11, 1, 255, 23, 12, 4, 255, 25, 11, 4, 255, 22, 9, 1, 255, 20, 9, 0, 255, 21, 11, 2, 255, 34, 16, 7, 255, 28, 16, 4, 255, 29, 18, 6, 255, 34, 18, 7, 255, 28, 13, 3, 255, 32, 15, 5, 255, 34, 18, 3, 255, 33, 20, 2, 255, 28, 17, 5, 255, 24, 14, 5, 255, 26, 16, 2, 255, 33, 19, 4, 255, 36, 18, 4, 255, 36, 16, 2, 255, 33, 15, 1, 255, 33, 20, 3, 255, 37, 21, 5, 255, 36, 20, 3, 255, 37, 21, 2, 255, 41, 18, 5, 255, 36, 22, 3, 255, 44, 23, 6, 255, 50, 22, 8, 255, 46, 21, 6, 255, 47, 21, 7, 255, 48, 22, 5, 255, 43, 19, 2, 255, 40, 24, 4, 255, 46, 26, 7, 255, 45, 21, 2, 255, 43, 20, 1, 255, 46, 24, 5, 255, 42, 21, 1, 255, 41, 18, 2, 255, 46, 22, 5, 255, 50, 24, 3, 255, 47, 21, 6, 255, 46, 20, 3, 255, 46, 25, 3, 255, 40, 23, 0, 255, 40, 20, 0, 255, 43, 23, 5, 255, 39, 22, 4, 255, 47, 24, 5, 255, 51, 21, 9, 255, 45, 22, 6, 255, 56, 23, 7, 255, 32, 21, 4, 255, 47, 21, 3, 255, 42, 22, 1, 255, 44, 22, 4, 255, 54, 29, 4, 255, 48, 27, 3, 255, 46, 27, 4, 255, 52, 30, 4, 255, 49, 27, 3, 255, 50, 28, 5, 255, 53, 28, 4, 255, 49, 23, 0, 255, 59, 24, 2, 255, 60, 26, 6, 255, 52, 29, 7, 255, 50, 23, 2, 255, 54, 29, 1, 255, 59, 30, 3, 255, 62, 25, 6, 255, 58, 26, 4, 255, 61, 28, 1, 255, 57, 30, 3, 255, 51, 27, 6, 255, 56, 28, 6, 255, 57, 25, 2, 255, 54, 23, 2, 255, 54, 28, 6, 255, 53, 29, 9, 255, 45, 22, 2, 255, 51, 25, 5, 255, 56, 26, 7, 255, 58, 27, 2, 255, 57, 28, 3, 255, 52, 24, 3, 255, 56, 29, 5, 255, 48, 25, 8, 255, 57, 28, 5, 255, 61, 26, 7, 255, 51, 30, 8, 255, 49, 29, 2, 255, 52, 33, 6, 255, 52, 35, 10, 255, 55, 33, 9, 255, 63, 38, 10, 255, 58, 40, 5, 255, 62, 43, 11, 255, 62, 42, 16, 255, 61, 45, 18, 255, 60, 49, 12, 255, 58, 52, 18, 255, 62, 55, 31, 255, 63, 54, 30, 255, 67, 61, 21, 255, 66, 64, 20, 255, 60, 61, 24, 255, 63, 63, 37, 255, 68, 67, 42, 255, 71, 73, 37, 255, 69, 72, 45, 255, 68, 75, 40, 255, 71, 77, 49, 255, 73, 82, 45, 255, 73, 86, 52, 255, 75, 83, 61, 255, 77, 90, 60, 255, 75, 91, 60, 255, 81, 94, 68, 255, 79, 97, 73, 255, 84, 100, 77, 255, 88, 104, 81, 255, 94, 112, 86, 255, 93, 114, 86, 255, 89, 114, 84, 255, 95, 122, 90, 255, 100, 125, 95, 255, 102, 127, 98, 255, 100, 128, 101, 255, 100, 131, 103, 255, 99, 132, 102, 255, 100, 135, 103, 255, 98, 136, 102, 255, 101, 135, 102, 255, 105, 136, 103, 255, 101, 136, 98, 255, 100, 134, 97, 255, 106, 135, 102, 255, 106, 133, 99, 255, 103, 130, 95, 255, 100, 125, 92, 255, 104, 126, 92, 255, 103, 123, 87, 255, 102, 120, 83, 255, 97, 117, 78, 255, 93, 117, 79, 255, 91, 109, 79, 255, 91, 108, 65, 255, 88, 106, 59, 255, 89, 101, 68, 255, 88, 98, 56, 255, 85, 93, 56, 255, 86, 92, 48, 255, 85, 89, 44, 255, 84, 83, 46, 255, 86, 83, 39, 255, 89, 83, 25, 255, 90, 78, 26, 255, 87, 76, 19, 255, 84, 76, 22, 255, 79, 68, 24, 255, 84, 68, 27, 255, 86, 70, 15, 255, 83, 68, 15, 255, 81, 60, 24, 255, 84, 60, 12, 255, 84, 63, 12, 255, 71, 52, 21, 255, 77, 58, 18, 255, 82, 56, 12, 255, 79, 49, 17, 255, 75, 51, 11, 255, 80, 52, 6, 255, 80, 47, 7, 255, 76, 48, 10, 255, 78, 51, 11, 255, 81, 48, 8, 255, 81, 45, 7, 255, 80, 44, 7, 255, 82, 44, 9, 255, 80, 40, 8, 255, 79, 40, 9, 255, 78, 39, 7, 255, 73, 37, 7, 255, 72, 36, 3, 255, 77, 43, 3, 255, 76, 40, 2, 255, 80, 38, 4, 255, 82, 33, 10, 255, 79, 33, 4, 255, 78, 38, 3, 255, 79, 35, 3, 255, 76, 33, 9, 255, 67, 27, 8, 255, 78, 33, 10, 255, 78, 35, 3, 255, 74, 32, 5, 255, 76, 32, 7, 255, 77, 32, 7, 255, 76, 30, 5, 255, 77, 30, 6, 255, 74, 28, 5, 255, 76, 28, 1, 255, 89, 36, 5, 255, 98, 38, 5, 255, 100, 34, 2, 255, 100, 33, 1, 255, 87, 29, 0, 255, 80, 29, 4, 255, 77, 31, 3, 255, 78, 32, 2, 255, 82, 32, 5, 255, 81, 29, 7, 255, 76, 27, 4, 255, 77, 30, 5, 255, 83, 30, 2, 255, 79, 31, 2, 255, 72, 31, 3, 255, 73, 31, 6, 255, 76, 30, 4, 255, 80, 31, 3, 255, 80, 33, 1, 255, 81, 32, 1, 255, 83, 29, 4, 255, 79, 27, 4, 255, 75, 28, 3, 255, 74, 31, 4, 255, 74, 28, 3, 255, 78, 29, 5, 255, 80, 29, 4, 255, 79, 27, 5, 255, 66, 25, 4, 255, 68, 24, 2, 255, 73, 25, 6, 255, 71, 25, 2, 255, 73, 26, 3, 255, 71, 24, 3, 255, 70, 23, 0, 255, 70, 22, 0, 255, 72, 25, 1, 255, 69, 23, 1, 255, 65, 21, 2, 255, 62, 21, 0, 255, 68, 23, 2, 255, 74, 24, 5, 255, 70, 22, 6, 255, 65, 24, 7, 255, 64, 24, 2, 255, 71, 22, 4, 255, 63, 23, 5, 255, 57, 23, 3, 255, 60, 22, 2, 255, 65, 21, 3, 255, 60, 20, 1, 255, 74, 23, 4, 255, 87, 25, 3, 255, 98, 27, 7, 255, 87, 28, 7, 255, 62, 24, 2, 255, 71, 20, 5, 255, 78, 24, 4, 255, 90, 23, 1, 255, 87, 27, 2, 255, 75, 24, 4, 255, 68, 19, 5, 255, 66, 23, 7, 255, 76, 25, 5, 255, 84, 23, 2, 255, 90, 25, 4, 255, 79, 21, 3, 255, 76, 20, 4, 255, 72, 21, 5, 255, 61, 17, 0, 255, 57, 19, 3, 255, 55, 17, 5, 255, 64, 19, 5, 255, 78, 23, 2, 255, 80, 24, 0, 255, 79, 26, 4, 255, 90, 23, 7, 255, 89, 22, 8, 255, 71, 18, 0, 255, 85, 25, 8, 255, 61, 14, 4, 255, 43, 19, 5, 255, 50, 22, 4, 255, 61, 15, 0, 255, 66, 20, 6, 255, 63, 19, 6, 255, 68, 16, 2, 255, 64, 17, 4, 255, 51, 15, 2, 255, 46, 17, 5, 255, 40, 15, 1, 255, 47, 15, 1, 255, 61, 16, 5, 255, 51, 14, 2, 255, 53, 12, 3, 255, 56, 18, 4, 255, 57, 17, 3, 255, 58, 18, 3, 255, 60, 20, 3, 255, 64, 15, 1, 255, 68, 17, 3, 255, 69, 18, 3, 255, 72, 16, 0, 255, 73, 17, 4, 255, 69, 16, 2, 255, 67, 19, 4, 255, 68, 20, 4, 255, 68, 18, 2, 255, 73, 19, 5, 255, 67, 16, 2, 255, 62, 14, 0, 255, 62, 16, 2, 255, 64, 17, 3, 255, 65, 17, 3, 255, 61, 15, 1, 255, 63, 16, 0, 255, 67, 16, 0, 255, 68, 17, 2, 255, 66, 15, 4, 255, 59, 12, 2, 255, 57, 15, 1, 255, 61, 17, 2, 255, 63, 13, 3, 255, 51, 10, 1, 255, 48, 14, 0, 255, 51, 13, 1, 255, 54, 15, 5, 255, 46, 15, 7, 255, 43, 9, 0, 255, 44, 10, 2, 255, 39, 11, 4, 255, 40, 9, 1, 255, 43, 11, 1, 255, 40, 10, 2, 255, 41, 9, 1, 255, 43, 10, 3, 255, 37, 8, 3, 255, 32, 9, 5, 255, 33, 11, 5, 255, 36, 11, 5, 255, 39, 13, 7, 255, 33, 15, 4, 255, 26, 11, 1, 255, 35, 10, 2, 255, 39, 11, 3, 255, 32, 9, 2, 255, 37, 12, 1, 255, 52, 14, 1, 255, 60, 13, 2, 255, 61, 11, 2, 255, 61, 11, 4, 255, 58, 11, 2, 255, 51, 12, 2, 255, 38, 9, 1, 255, 33, 7, 0, 255, 35, 9, 2, 255, 8, 2, 2, 255, 7, 2, 2, 255, 7, 2, 1, 255, 7, 3, 0, 255, 9, 2, 0, 255, 10, 1, 0, 255, 11, 2, 1, 255, 11, 4, 2, 255, 12, 5, 3, 255, 14, 4, 3, 255, 14, 3, 1, 255, 15, 6, 3, 255, 15, 8, 2, 255, 14, 5, 3, 255, 13, 4, 1, 255, 12, 5, 2, 255, 13, 6, 3, 255, 14, 4, 2, 255, 15, 4, 2, 255, 12, 7, 3, 255, 11, 7, 2, 255, 12, 6, 3, 255, 16, 6, 4, 255, 21, 6, 3, 255, 19, 6, 3, 255, 19, 8, 3, 255, 18, 11, 5, 255, 15, 8, 2, 255, 16, 8, 3, 255, 18, 9, 4, 255, 14, 6, 0, 255, 19, 9, 3, 255, 17, 7, 1, 255, 19, 10, 1, 255, 21, 11, 3, 255, 19, 9, 4, 255, 22, 12, 5, 255, 19, 9, 1, 255, 20, 9, 2, 255, 19, 8, 2, 255, 20, 11, 3, 255, 24, 14, 5, 255, 26, 12, 4, 255, 24, 12, 2, 255, 24, 16, 4, 255, 20, 14, 3, 255, 26, 13, 3, 255, 24, 13, 1, 255, 24, 16, 3, 255, 23, 12, 2, 255, 22, 13, 5, 255, 31, 13, 2, 255, 39, 18, 2, 255, 38, 20, 2, 255, 31, 14, 0, 255, 31, 17, 3, 255, 32, 17, 1, 255, 31, 15, 2, 255, 35, 16, 4, 255, 40, 20, 2, 255, 35, 17, 2, 255, 29, 16, 5, 255, 30, 19, 4, 255, 36, 21, 0, 255, 45, 23, 2, 255, 39, 14, 4, 255, 39, 20, 2, 255, 42, 24, 7, 255, 43, 18, 4, 255, 41, 21, 4, 255, 38, 20, 1, 255, 47, 16, 0, 255, 50, 16, 2, 255, 43, 23, 6, 255, 36, 23, 4, 255, 42, 21, 2, 255, 48, 24, 3, 255, 46, 23, 4, 255, 45, 20, 5, 255, 47, 20, 4, 255, 50, 23, 4, 255, 48, 23, 3, 255, 45, 25, 3, 255, 47, 25, 4, 255, 45, 23, 2, 255, 47, 26, 5, 255, 42, 23, 5, 255, 42, 25, 6, 255, 41, 25, 4, 255, 45, 25, 1, 255, 46, 23, 5, 255, 39, 24, 3, 255, 51, 29, 3, 255, 50, 22, 4, 255, 50, 25, 5, 255, 48, 24, 1, 255, 51, 26, 6, 255, 49, 27, 4, 255, 45, 25, 1, 255, 47, 27, 5, 255, 48, 27, 6, 255, 48, 28, 5, 255, 51, 24, 0, 255, 57, 25, 4, 255, 52, 23, 2, 255, 49, 24, 4, 255, 48, 24, 3, 255, 56, 26, 6, 255, 55, 26, 3, 255, 50, 31, 0, 255, 54, 31, 0, 255, 62, 29, 5, 255, 60, 27, 5, 255, 55, 31, 1, 255, 55, 29, 3, 255, 52, 25, 6, 255, 49, 24, 2, 255, 58, 28, 4, 255, 54, 27, 4, 255, 52, 29, 6, 255, 51, 25, 6, 255, 44, 26, 5, 255, 43, 27, 4, 255, 50, 26, 4, 255, 59, 27, 4, 255, 59, 26, 3, 255, 59, 28, 4, 255, 55, 28, 4, 255, 52, 29, 6, 255, 57, 31, 2, 255, 58, 28, 3, 255, 54, 32, 9, 255, 49, 29, 3, 255, 53, 32, 6, 255, 60, 31, 17, 255, 57, 31, 12, 255, 60, 38, 8, 255, 65, 41, 8, 255, 65, 41, 11, 255, 61, 42, 17, 255, 58, 42, 23, 255, 60, 46, 20, 255, 61, 57, 11, 255, 62, 60, 11, 255, 64, 57, 23, 255, 67, 58, 24, 255, 64, 57, 35, 255, 61, 61, 32, 255, 64, 68, 27, 255, 65, 65, 46, 255, 64, 64, 52, 255, 68, 71, 52, 255, 73, 76, 55, 255, 71, 78, 47, 255, 70, 80, 57, 255, 72, 84, 66, 255, 77, 86, 59, 255, 77, 89, 66, 255, 74, 93, 67, 255, 80, 96, 71, 255, 82, 101, 80, 255, 84, 103, 82, 255, 89, 108, 87, 255, 88, 109, 86, 255, 94, 119, 92, 255, 96, 122, 93, 255, 93, 123, 93, 255, 96, 125, 96, 255, 99, 128, 99, 255, 98, 131, 102, 255, 96, 133, 103, 255, 100, 138, 107, 255, 101, 138, 106, 255, 101, 140, 107, 255, 104, 135, 106, 255, 106, 136, 106, 255, 101, 137, 100, 255, 101, 137, 99, 255, 101, 135, 101, 255, 105, 132, 97, 255, 103, 131, 95, 255, 101, 129, 94, 255, 101, 125, 90, 255, 101, 121, 85, 255, 100, 121, 82, 255, 98, 120, 80, 255, 92, 114, 82, 255, 90, 106, 79, 255, 93, 108, 72, 255, 89, 105, 60, 255, 87, 99, 59, 255, 89, 96, 62, 255, 89, 93, 51, 255, 89, 88, 54, 255, 87, 88, 49, 255, 85, 87, 39, 255, 85, 85, 36, 255, 85, 79, 37, 255, 90, 73, 42, 255, 89, 74, 29, 255, 85, 75, 24, 255, 83, 70, 22, 255, 83, 66, 14, 255, 84, 67, 18, 255, 80, 66, 16, 255, 82, 60, 19, 255, 84, 56, 14, 255, 82, 56, 25, 255, 78, 57, 17, 255, 83, 55, 19, 255, 82, 53, 10, 255, 72, 46, 9, 255, 78, 47, 14, 255, 84, 50, 9, 255, 76, 47, 5, 255, 69, 48, 8, 255, 71, 47, 8, 255, 74, 40, 8, 255, 77, 44, 7, 255, 80, 45, 8, 255, 77, 39, 5, 255, 80, 38, 9, 255, 82, 38, 9, 255, 80, 36, 4, 255, 74, 35, 11, 255, 74, 37, 10, 255, 69, 35, 2, 255, 74, 40, 4, 255, 77, 38, 3, 255, 78, 33, 4, 255, 82, 39, 6, 255, 75, 38, 2, 255, 76, 33, 0, 255, 80, 36, 5, 255, 76, 34, 4, 255, 76, 31, 2, 255, 80, 35, 5, 255, 78, 34, 3, 255, 74, 32, 3, 255, 74, 32, 3, 255, 75, 32, 2, 255, 77, 33, 3, 255, 76, 30, 3, 255, 68, 27, 3, 255, 74, 29, 6, 255, 79, 31, 0, 255, 80, 30, 6, 255, 78, 29, 7, 255, 80, 32, 3, 255, 79, 28, 5, 255, 80, 29, 3, 255, 81, 34, 4, 255, 77, 30, 3, 255, 76, 26, 5, 255, 78, 27, 6, 255, 78, 30, 5, 255, 76, 30, 5, 255, 75, 30, 3, 255, 74, 30, 0, 255, 79, 31, 2, 255, 77, 28, 2, 255, 75, 31, 7, 255, 77, 30, 3, 255, 80, 28, 0, 255, 80, 28, 5, 255, 73, 25, 2, 255, 73, 29, 4, 255, 72, 29, 5, 255, 69, 26, 4, 255, 70, 29, 6, 255, 77, 31, 5, 255, 74, 25, 4, 255, 64, 23, 0, 255, 71, 26, 1, 255, 76, 25, 2, 255, 73, 25, 2, 255, 70, 24, 2, 255, 73, 28, 7, 255, 72, 27, 5, 255, 70, 25, 3, 255, 71, 24, 2, 255, 71, 24, 1, 255, 65, 22, 2, 255, 63, 23, 3, 255, 63, 24, 2, 255, 64, 23, 2, 255, 62, 21, 2, 255, 64, 21, 4, 255, 72, 23, 4, 255, 58, 19, 2, 255, 57, 20, 3, 255, 61, 23, 4, 255, 60, 22, 3, 255, 62, 20, 4, 255, 63, 18, 3, 255, 63, 19, 3, 255, 68, 22, 2, 255, 63, 22, 2, 255, 62, 19, 1, 255, 70, 19, 4, 255, 64, 22, 3, 255, 73, 21, 7, 255, 85, 26, 3, 255, 84, 26, 1, 255, 76, 21, 2, 255, 72, 15, 1, 255, 77, 23, 5, 255, 87, 29, 7, 255, 88, 26, 2, 255, 83, 23, 1, 255, 62, 20, 2, 255, 54, 15, 5, 255, 44, 14, 3, 255, 53, 17, 1, 255, 59, 18, 1, 255, 46, 17, 6, 255, 46, 19, 8, 255, 53, 17, 2, 255, 60, 15, 0, 255, 67, 17, 2, 255, 70, 18, 6, 255, 73, 20, 5, 255, 73, 19, 2, 255, 78, 18, 3, 255, 67, 17, 2, 255, 51, 19, 4, 255, 48, 13, 3, 255, 58, 14, 3, 255, 76, 21, 1, 255, 88, 23, 2, 255, 87, 26, 6, 255, 67, 19, 4, 255, 52, 15, 3, 255, 47, 15, 2, 255, 46, 16, 2, 255, 52, 19, 6, 255, 62, 13, 4, 255, 56, 14, 3, 255, 60, 17, 7, 255, 61, 16, 4, 255, 58, 16, 3, 255, 56, 16, 3, 255, 58, 19, 3, 255, 60, 18, 1, 255, 61, 18, 1, 255, 66, 20, 3, 255, 66, 18, 2, 255, 66, 18, 3, 255, 65, 17, 2, 255, 65, 17, 1, 255, 70, 18, 1, 255, 77, 17, 2, 255, 75, 18, 2, 255, 71, 18, 3, 255, 65, 16, 2, 255, 61, 15, 1, 255, 61, 15, 1, 255, 65, 16, 3, 255, 61, 17, 2, 255, 64, 18, 1, 255, 70, 18, 3, 255, 68, 21, 2, 255, 65, 16, 1, 255, 62, 14, 1, 255, 57, 17, 1, 255, 55, 16, 1, 255, 62, 15, 6, 255, 56, 12, 4, 255, 54, 15, 5, 255, 51, 15, 4, 255, 45, 15, 4, 255, 47, 11, 5, 255, 52, 10, 2, 255, 51, 13, 6, 255, 40, 11, 4, 255, 42, 11, 2, 255, 43, 12, 1, 255, 40, 10, 1, 255, 40, 10, 3, 255, 36, 6, 2, 255, 38, 9, 5, 255, 35, 10, 3, 255, 32, 9, 2, 255, 30, 9, 3, 255, 32, 13, 6, 255, 26, 5, 0, 255, 33, 8, 1, 255, 47, 13, 6, 255, 41, 6, 2, 255, 34, 3, 1, 255, 28, 10, 1, 255, 44, 13, 3, 255, 59, 11, 0, 255, 58, 12, 1, 255, 60, 12, 5, 255, 51, 11, 4, 255, 35, 12, 1, 255, 34, 9, 3, 255, 33, 11, 2, 255, 37, 13, 2, 255, 8, 4, 3, 255, 6, 1, 1, 255, 4, 1, 0, 255, 6, 3, 0, 255, 9, 5, 2, 255, 11, 4, 2, 255, 12, 3, 1, 255, 14, 3, 2, 255, 12, 2, 1, 255, 14, 4, 3, 255, 14, 1, 2, 255, 16, 5, 2, 255, 15, 6, 2, 255, 13, 4, 2, 255, 10, 3, 1, 255, 10, 5, 2, 255, 10, 4, 1, 255, 13, 4, 2, 255, 14, 5, 3, 255, 11, 1, 0, 255, 12, 3, 1, 255, 14, 5, 3, 255, 15, 4, 3, 255, 16, 6, 1, 255, 13, 6, 1, 255, 9, 4, 1, 255, 13, 7, 1, 255, 18, 9, 3, 255, 16, 6, 2, 255, 19, 8, 3, 255, 17, 8, 1, 255, 15, 8, 1, 255, 19, 8, 2, 255, 17, 7, 0, 255, 18, 9, 2, 255, 17, 8, 3, 255, 17, 9, 1, 255, 24, 15, 3, 255, 24, 14, 5, 255, 19, 10, 3, 255, 18, 8, 1, 255, 20, 7, 0, 255, 26, 12, 3, 255, 27, 14, 3, 255, 24, 15, 2, 255, 22, 13, 3, 255, 29, 14, 4, 255, 25, 13, 1, 255, 25, 15, 3, 255, 24, 11, 2, 255, 20, 9, 2, 255, 29, 16, 5, 255, 30, 14, 4, 255, 33, 16, 4, 255, 33, 19, 4, 255, 28, 15, 1, 255, 30, 14, 3, 255, 30, 20, 5, 255, 27, 16, 0, 255, 36, 18, 6, 255, 33, 16, 5, 255, 31, 16, 3, 255, 35, 19, 4, 255, 42, 20, 4, 255, 43, 20, 3, 255, 38, 17, 6, 255, 38, 17, 0, 255, 33, 18, 1, 255, 42, 19, 5, 255, 41, 21, 2, 255, 35, 22, 1, 255, 46, 25, 6, 255, 39, 18, 1, 255, 41, 19, 4, 255, 45, 17, 4, 255, 52, 22, 8, 255, 46, 21, 1, 255, 45, 20, 2, 255, 47, 21, 9, 255, 47, 19, 4, 255, 45, 19, 0, 255, 43, 22, 2, 255, 41, 30, 3, 255, 41, 26, 1, 255, 49, 26, 6, 255, 45, 21, 4, 255, 37, 18, 2, 255, 37, 24, 6, 255, 40, 22, 2, 255, 46, 23, 3, 255, 41, 24, 4, 255, 43, 23, 5, 255, 46, 25, 2, 255, 54, 22, 3, 255, 41, 22, 8, 255, 49, 20, 1, 255, 56, 23, 1, 255, 42, 24, 3, 255, 47, 27, 3, 255, 50, 26, 3, 255, 39, 23, 4, 255, 49, 26, 5, 255, 54, 28, 3, 255, 55, 27, 4, 255, 57, 22, 3, 255, 46, 24, 3, 255, 42, 27, 3, 255, 53, 26, 3, 255, 55, 26, 2, 255, 60, 24, 5, 255, 65, 28, 5, 255, 54, 26, 4, 255, 50, 22, 2, 255, 48, 25, 1, 255, 45, 26, 4, 255, 50, 24, 3, 255, 48, 26, 2, 255, 55, 30, 6, 255, 48, 28, 3, 255, 49, 29, 5, 255, 55, 29, 3, 255, 50, 25, 4, 255, 50, 25, 7, 255, 48, 28, 2, 255, 44, 26, 4, 255, 51, 31, 6, 255, 54, 32, 3, 255, 56, 29, 6, 255, 56, 29, 6, 255, 45, 32, 4, 255, 52, 29, 1, 255, 56, 31, 2, 255, 54, 34, 7, 255, 54, 33, 2, 255, 64, 30, 6, 255, 58, 32, 7, 255, 58, 38, 6, 255, 68, 40, 9, 255, 66, 39, 8, 255, 59, 45, 9, 255, 57, 46, 13, 255, 65, 45, 23, 255, 66, 53, 15, 255, 54, 54, 19, 255, 59, 55, 33, 255, 69, 55, 24, 255, 69, 66, 25, 255, 61, 63, 40, 255, 61, 64, 34, 255, 64, 68, 41, 255, 67, 71, 53, 255, 67, 69, 54, 255, 70, 73, 48, 255, 72, 75, 56, 255, 68, 80, 57, 255, 76, 86, 67, 255, 80, 87, 64, 255, 77, 88, 66, 255, 77, 96, 76, 255, 80, 99, 78, 255, 82, 102, 83, 255, 85, 106, 86, 255, 91, 112, 91, 255, 91, 114, 92, 255, 93, 119, 93, 255, 97, 122, 95, 255, 91, 122, 95, 255, 96, 129, 103, 255, 98, 131, 102, 255, 95, 132, 102, 255, 97, 137, 105, 255, 99, 138, 107, 255, 101, 140, 108, 255, 100, 140, 107, 255, 108, 139, 111, 255, 107, 138, 109, 255, 100, 136, 102, 255, 99, 138, 103, 255, 98, 133, 102, 255, 104, 130, 100, 255, 102, 129, 101, 255, 100, 129, 100, 255, 99, 123, 96, 255, 101, 121, 93, 255, 96, 117, 85, 255, 93, 116, 78, 255, 91, 111, 71, 255, 92, 107, 70, 255, 91, 102, 70, 255, 89, 101, 60, 255, 88, 100, 47, 255, 89, 93, 59, 255, 94, 94, 49, 255, 90, 86, 49, 255, 87, 84, 48, 255, 82, 82, 41, 255, 81, 78, 41, 255, 83, 75, 45, 255, 87, 74, 28, 255, 85, 74, 22, 255, 82, 72, 26, 255, 87, 73, 14, 255, 89, 67, 18, 255, 87, 67, 14, 255, 76, 62, 15, 255, 79, 64, 11, 255, 80, 62, 11, 255, 71, 53, 22, 255, 77, 56, 16, 255, 82, 52, 15, 255, 76, 50, 10, 255, 81, 48, 15, 255, 79, 46, 11, 255, 82, 50, 0, 255, 78, 49, 6, 255, 69, 47, 12, 255, 72, 42, 5, 255, 81, 43, 8, 255, 76, 43, 3, 255, 75, 42, 5, 255, 71, 41, 8, 255, 70, 40, 10, 255, 73, 39, 5, 255, 79, 40, 1, 255, 77, 37, 5, 255, 74, 38, 7, 255, 66, 34, 5, 255, 68, 38, 11, 255, 68, 37, 7, 255, 72, 35, 7, 255, 73, 37, 3, 255, 72, 35, 4, 255, 79, 33, 8, 255, 76, 28, 4, 255, 79, 33, 4, 255, 79, 29, 0, 255, 80, 34, 2, 255, 77, 33, 1, 255, 76, 34, 6, 255, 72, 32, 5, 255, 69, 30, 0, 255, 73, 31, 3, 255, 79, 31, 8, 255, 77, 34, 10, 255, 72, 30, 2, 255, 74, 32, 4, 255, 70, 29, 4, 255, 72, 28, 6, 255, 74, 29, 4, 255, 84, 34, 6, 255, 83, 30, 5, 255, 78, 31, 2, 255, 76, 31, 2, 255, 78, 28, 7, 255, 77, 27, 5, 255, 80, 30, 3, 255, 75, 30, 1, 255, 76, 31, 5, 255, 77, 28, 4, 255, 80, 28, 5, 255, 80, 29, 5, 255, 73, 28, 1, 255, 72, 26, 7, 255, 73, 26, 6, 255, 75, 31, 3, 255, 70, 28, 0, 255, 74, 28, 4, 255, 76, 27, 4, 255, 79, 29, 6, 255, 74, 30, 5, 255, 72, 31, 0, 255, 71, 26, 3, 255, 68, 25, 5, 255, 73, 27, 3, 255, 70, 26, 4, 255, 73, 25, 1, 255, 73, 26, 3, 255, 66, 22, 1, 255, 63, 21, 2, 255, 64, 21, 4, 255, 71, 25, 8, 255, 68, 21, 3, 255, 67, 22, 4, 255, 68, 23, 7, 255, 66, 22, 5, 255, 65, 25, 3, 255, 67, 24, 1, 255, 71, 23, 4, 255, 67, 21, 3, 255, 66, 19, 5, 255, 55, 18, 0, 255, 70, 21, 4, 255, 68, 20, 1, 255, 62, 22, 3, 255, 66, 20, 5, 255, 66, 18, 1, 255, 59, 22, 1, 255, 57, 20, 3, 255, 59, 16, 3, 255, 60, 24, 6, 255, 63, 20, 2, 255, 56, 14, 2, 255, 67, 27, 3, 255, 80, 27, 0, 255, 86, 24, 4, 255, 85, 22, 3, 255, 92, 25, 0, 255, 85, 20, 1, 255, 87, 23, 4, 255, 83, 25, 6, 255, 54, 17, 1, 255, 51, 15, 6, 255, 50, 19, 5, 255, 49, 15, 3, 255, 50, 13, 2, 255, 54, 15, 1, 255, 52, 15, 1, 255, 51, 17, 2, 255, 53, 18, 5, 255, 56, 18, 6, 255, 53, 15, 1, 255, 53, 20, 0, 255, 54, 18, 7, 255, 57, 16, 8, 255, 66, 22, 1, 255, 73, 27, 2, 255, 65, 21, 3, 255, 46, 18, 3, 255, 60, 21, 4, 255, 76, 17, 5, 255, 62, 18, 4, 255, 48, 22, 1, 255, 43, 17, 3, 255, 48, 15, 5, 255, 49, 11, 2, 255, 43, 13, 2, 255, 59, 14, 5, 255, 56, 15, 3, 255, 50, 16, 3, 255, 57, 14, 2, 255, 56, 19, 4, 255, 57, 18, 3, 255, 60, 17, 3, 255, 60, 16, 1, 255, 65, 17, 2, 255, 72, 18, 4, 255, 71, 18, 3, 255, 67, 16, 2, 255, 65, 18, 2, 255, 66, 18, 2, 255, 74, 19, 2, 255, 80, 19, 1, 255, 76, 19, 0, 255, 74, 19, 3, 255, 67, 18, 2, 255, 63, 17, 2, 255, 62, 17, 2, 255, 65, 18, 3, 255, 58, 13, 1, 255, 64, 15, 4, 255, 67, 15, 3, 255, 61, 14, 0, 255, 65, 15, 2, 255, 65, 15, 3, 255, 59, 15, 3, 255, 56, 16, 2, 255, 47, 13, 1, 255, 53, 15, 6, 255, 54, 13, 5, 255, 46, 10, 1, 255, 48, 15, 5, 255, 49, 12, 4, 255, 51, 13, 1, 255, 46, 13, 0, 255, 38, 9, 1, 255, 44, 12, 1, 255, 45, 13, 3, 255, 42, 13, 3, 255, 40, 10, 3, 255, 38, 10, 6, 255, 41, 12, 7, 255, 40, 11, 0, 255, 35, 10, 1, 255, 28, 9, 3, 255, 30, 10, 4, 255, 31, 7, 3, 255, 33, 10, 4, 255, 29, 12, 2, 255, 23, 8, 1, 255, 26, 8, 5, 255, 29, 7, 5, 255, 36, 8, 5, 255, 45, 11, 2, 255, 49, 12, 1, 255, 47, 10, 1, 255, 41, 10, 2, 255, 38, 8, 3, 255, 38, 6, 4, 255, 42, 13, 6, 255, 44, 13, 3, 255, 6, 2, 2, 255, 5, 0, 0, 255, 9, 2, 2, 255, 7, 2, 2, 255, 6, 2, 1, 255, 10, 4, 1, 255, 9, 3, 0, 255, 9, 3, 0, 255, 9, 3, 1, 255, 8, 3, 0, 255, 10, 3, 0, 255, 12, 3, 1, 255, 12, 2, 1, 255, 12, 3, 2, 255, 11, 5, 3, 255, 10, 5, 2, 255, 12, 5, 2, 255, 11, 3, 0, 255, 13, 5, 2, 255, 11, 6, 1, 255, 11, 5, 1, 255, 18, 6, 6, 255, 16, 4, 4, 255, 14, 4, 1, 255, 15, 5, 3, 255, 12, 5, 3, 255, 9, 5, 3, 255, 11, 6, 2, 255, 17, 8, 3, 255, 20, 8, 4, 255, 19, 9, 2, 255, 14, 9, 0, 255, 20, 8, 0, 255, 21, 10, 4, 255, 18, 9, 2, 255, 17, 8, 1, 255, 17, 10, 2, 255, 18, 11, 3, 255, 23, 12, 4, 255, 22, 12, 3, 255, 18, 11, 1, 255, 18, 11, 1, 255, 19, 10, 2, 255, 20, 11, 4, 255, 19, 11, 2, 255, 23, 11, 0, 255, 30, 14, 5, 255, 30, 13, 3, 255, 29, 12, 4, 255, 25, 12, 3, 255, 23, 13, 4, 255, 27, 15, 4, 255, 24, 10, 0, 255, 26, 14, 3, 255, 27, 18, 3, 255, 30, 18, 3, 255, 39, 16, 4, 255, 24, 18, 2, 255, 25, 16, 4, 255, 32, 16, 5, 255, 34, 16, 4, 255, 33, 16, 1, 255, 30, 19, 4, 255, 25, 18, 6, 255, 27, 16, 1, 255, 41, 18, 6, 255, 34, 17, 5, 255, 34, 17, 2, 255, 47, 17, 2, 255, 46, 19, 3, 255, 35, 18, 1, 255, 37, 20, 6, 255, 38, 20, 5, 255, 44, 20, 0, 255, 48, 20, 3, 255, 46, 20, 2, 255, 45, 22, 2, 255, 38, 17, 3, 255, 37, 19, 4, 255, 43, 24, 5, 255, 46, 20, 0, 255, 47, 20, 1, 255, 45, 22, 6, 255, 41, 23, 3, 255, 44, 24, 1, 255, 38, 21, 6, 255, 38, 22, 6, 255, 38, 20, 5, 255, 43, 19, 9, 255, 49, 21, 5, 255, 46, 26, 3, 255, 50, 21, 4, 255, 38, 21, 5, 255, 43, 18, 6, 255, 47, 20, 7, 255, 47, 23, 6, 255, 48, 24, 1, 255, 52, 26, 5, 255, 48, 21, 1, 255, 51, 24, 3, 255, 45, 24, 1, 255, 42, 25, 1, 255, 51, 25, 2, 255, 51, 25, 0, 255, 55, 29, 0, 255, 51, 26, 0, 255, 53, 27, 5, 255, 63, 29, 6, 255, 60, 26, 2, 255, 58, 27, 6, 255, 52, 23, 2, 255, 49, 24, 2, 255, 51, 27, 4, 255, 49, 27, 3, 255, 46, 28, 4, 255, 49, 26, 2, 255, 48, 28, 4, 255, 49, 28, 4, 255, 47, 27, 4, 255, 48, 28, 3, 255, 55, 30, 6, 255, 49, 26, 1, 255, 51, 28, 2, 255, 51, 31, 4, 255, 55, 28, 6, 255, 53, 25, 4, 255, 52, 26, 4, 255, 55, 29, 8, 255, 53, 29, 3, 255, 53, 29, 6, 255, 49, 30, 5, 255, 49, 32, 2, 255, 57, 33, 3, 255, 54, 32, 1, 255, 55, 34, 4, 255, 61, 37, 6, 255, 60, 36, 4, 255, 62, 40, 6, 255, 57, 42, 12, 255, 52, 39, 17, 255, 59, 47, 15, 255, 63, 49, 22, 255, 58, 48, 25, 255, 57, 51, 24, 255, 60, 54, 26, 255, 64, 60, 25, 255, 60, 61, 37, 255, 63, 62, 44, 255, 67, 67, 47, 255, 65, 68, 44, 255, 68, 72, 43, 255, 71, 71, 60, 255, 72, 73, 53, 255, 75, 80, 49, 255, 73, 78, 60, 255, 76, 86, 70, 255, 77, 91, 66, 255, 79, 92, 65, 255, 83, 95, 73, 255, 82, 98, 69, 255, 82, 104, 79, 255, 91, 110, 85, 255, 92, 114, 87, 255, 95, 119, 92, 255, 92, 121, 95, 255, 90, 124, 97, 255, 95, 130, 100, 255, 96, 133, 101, 255, 98, 135, 107, 255, 100, 135, 110, 255, 100, 134, 109, 255, 103, 136, 110, 255, 105, 141, 112, 255, 97, 140, 109, 255, 99, 141, 107, 255, 104, 143, 107, 255, 103, 140, 105, 255, 102, 136, 104, 255, 100, 135, 105, 255, 99, 133, 102, 255, 102, 131, 97, 255, 96, 124, 94, 255, 97, 127, 91, 255, 96, 122, 85, 255, 93, 115, 82, 255, 90, 114, 76, 255, 92, 112, 70, 255, 90, 107, 72, 255, 89, 103, 67, 255, 88, 98, 60, 255, 91, 95, 57, 255, 93, 92, 53, 255, 92, 89, 49, 255, 88, 86, 40, 255, 87, 84, 36, 255, 88, 83, 33, 255, 85, 77, 36, 255, 87, 76, 43, 255, 82, 75, 33, 255, 79, 73, 24, 255, 87, 69, 26, 255, 86, 64, 22, 255, 76, 64, 22, 255, 75, 62, 13, 255, 84, 61, 22, 255, 79, 55, 20, 255, 75, 56, 8, 255, 73, 52, 16, 255, 80, 53, 20, 255, 83, 53, 12, 255, 80, 49, 14, 255, 78, 47, 18, 255, 73, 42, 13, 255, 78, 47, 15, 255, 78, 42, 10, 255, 78, 41, 12, 255, 78, 42, 13, 255, 77, 43, 8, 255, 74, 41, 2, 255, 73, 40, 7, 255, 75, 42, 11, 255, 70, 39, 7, 255, 70, 36, 7, 255, 74, 34, 11, 255, 79, 36, 11, 255, 74, 34, 6, 255, 75, 36, 6, 255, 74, 38, 6, 255, 70, 34, 4, 255, 72, 35, 8, 255, 80, 34, 6, 255, 76, 37, 5, 255, 74, 34, 5, 255, 86, 32, 6, 255, 79, 34, 4, 255, 74, 35, 5, 255, 76, 32, 6, 255, 71, 33, 3, 255, 76, 31, 4, 255, 69, 31, 2, 255, 70, 31, 2, 255, 77, 31, 4, 255, 76, 31, 1, 255, 75, 31, 2, 255, 70, 28, 6, 255, 71, 26, 4, 255, 76, 30, 2, 255, 72, 30, 2, 255, 76, 30, 5, 255, 81, 31, 4, 255, 77, 29, 3, 255, 77, 30, 4, 255, 76, 29, 3, 255, 78, 30, 3, 255, 77, 29, 2, 255, 79, 31, 2, 255, 82, 28, 6, 255, 73, 29, 5, 255, 73, 28, 4, 255, 77, 27, 3, 255, 75, 28, 2, 255, 74, 29, 2, 255, 75, 28, 6, 255, 72, 27, 6, 255, 70, 29, 2, 255, 77, 31, 1, 255, 78, 26, 0, 255, 73, 26, 2, 255, 69, 24, 3, 255, 82, 25, 2, 255, 73, 27, 3, 255, 70, 23, 5, 255, 71, 24, 5, 255, 67, 26, 4, 255, 69, 31, 5, 255, 77, 28, 4, 255, 78, 25, 1, 255, 70, 28, 3, 255, 63, 21, 1, 255, 66, 23, 1, 255, 67, 26, 7, 255, 64, 17, 6, 255, 65, 23, 2, 255, 70, 24, 5, 255, 70, 19, 6, 255, 71, 22, 1, 255, 69, 28, 2, 255, 57, 22, 4, 255, 64, 22, 5, 255, 69, 24, 8, 255, 60, 23, 2, 255, 59, 23, 1, 255, 65, 22, 5, 255, 64, 21, 4, 255, 54, 21, 2, 255, 58, 22, 1, 255, 66, 20, 2, 255, 64, 18, 3, 255, 53, 18, 7, 255, 53, 21, 5, 255, 59, 18, 2, 255, 55, 17, 8, 255, 50, 18, 4, 255, 75, 23, 9, 255, 85, 22, 2, 255, 89, 24, 0, 255, 98, 29, 2, 255, 95, 26, 3, 255, 78, 26, 2, 255, 67, 23, 5, 255, 54, 17, 3, 255, 49, 16, 1, 255, 50, 17, 2, 255, 44, 17, 2, 255, 52, 16, 3, 255, 61, 15, 3, 255, 51, 16, 3, 255, 41, 16, 4, 255, 50, 17, 6, 255, 58, 14, 3, 255, 57, 18, 3, 255, 50, 16, 1, 255, 51, 21, 8, 255, 48, 18, 5, 255, 55, 16, 1, 255, 73, 23, 4, 255, 78, 21, 6, 255, 55, 16, 3, 255, 44, 17, 4, 255, 55, 16, 8, 255, 52, 12, 4, 255, 45, 15, 3, 255, 48, 13, 3, 255, 52, 13, 2, 255, 44, 12, 7, 255, 47, 12, 8, 255, 54, 14, 3, 255, 53, 17, 2, 255, 49, 16, 4, 255, 58, 14, 3, 255, 54, 16, 3, 255, 59, 15, 5, 255, 53, 14, 2, 255, 57, 16, 1, 255, 64, 18, 3, 255, 64, 16, 2, 255, 67, 14, 2, 255, 64, 14, 1, 255, 63, 14, 1, 255, 64, 15, 1, 255, 70, 19, 5, 255, 72, 19, 5, 255, 73, 18, 4, 255, 73, 22, 4, 255, 70, 15, 1, 255, 63, 13, 2, 255, 63, 13, 5, 255, 64, 15, 1, 255, 66, 20, 2, 255, 69, 18, 2, 255, 73, 17, 3, 255, 68, 16, 1, 255, 65, 18, 3, 255, 58, 15, 1, 255, 62, 16, 2, 255, 67, 17, 4, 255, 52, 15, 1, 255, 43, 14, 1, 255, 44, 12, 2, 255, 50, 13, 5, 255, 52, 12, 3, 255, 50, 11, 1, 255, 42, 14, 3, 255, 44, 13, 4, 255, 47, 12, 4, 255, 53, 13, 4, 255, 49, 12, 3, 255, 44, 14, 3, 255, 47, 12, 2, 255, 46, 12, 2, 255, 45, 14, 3, 255, 44, 13, 3, 255, 37, 8, 3, 255, 33, 10, 5, 255, 31, 8, 1, 255, 29, 7, 1, 255, 27, 14, 4, 255, 29, 11, 2, 255, 32, 13, 5, 255, 31, 10, 5, 255, 34, 7, 3, 255, 38, 6, 3, 255, 33, 10, 4, 255, 43, 9, 6, 255, 35, 7, 2, 255, 45, 9, 6, 255, 42, 9, 2, 255, 42, 12, 1, 255, 43, 12, 1, 255, 40, 9, 1, 255, 5, 1, 0, 255, 8, 2, 2, 255, 9, 3, 3, 255, 6, 2, 1, 255, 6, 2, 1, 255, 10, 3, 1, 255, 9, 2, 0, 255, 9, 4, 1, 255, 9, 4, 1, 255, 8, 3, 0, 255, 10, 3, 1, 255, 12, 4, 2, 255, 12, 2, 1, 255, 12, 2, 2, 255, 14, 7, 4, 255, 10, 5, 1, 255, 12, 4, 1, 255, 11, 3, 0, 255, 12, 7, 2, 255, 12, 6, 2, 255, 12, 4, 0, 255, 14, 5, 4, 255, 14, 4, 3, 255, 15, 6, 3, 255, 15, 6, 3, 255, 15, 7, 4, 255, 10, 6, 3, 255, 10, 6, 2, 255, 16, 9, 3, 255, 18, 8, 3, 255, 18, 7, 2, 255, 17, 9, 3, 255, 18, 6, 0, 255, 20, 9, 3, 255, 17, 6, 2, 255, 17, 8, 2, 255, 18, 8, 2, 255, 15, 6, 0, 255, 21, 10, 2, 255, 21, 11, 2, 255, 18, 10, 1, 255, 19, 9, 1, 255, 21, 10, 2, 255, 23, 9, 2, 255, 24, 11, 3, 255, 21, 15, 3, 255, 21, 11, 1, 255, 26, 13, 3, 255, 28, 11, 4, 255, 24, 8, 1, 255, 26, 9, 2, 255, 22, 11, 3, 255, 27, 14, 2, 255, 32, 16, 2, 255, 24, 12, 1, 255, 22, 15, 5, 255, 33, 17, 5, 255, 32, 18, 1, 255, 32, 16, 2, 255, 30, 17, 3, 255, 26, 16, 0, 255, 33, 16, 1, 255, 37, 16, 4, 255, 26, 14, 3, 255, 32, 23, 4, 255, 35, 16, 5, 255, 39, 18, 5, 255, 43, 20, 4, 255, 43, 15, 4, 255, 40, 22, 5, 255, 38, 21, 3, 255, 35, 17, 2, 255, 36, 22, 2, 255, 36, 19, 3, 255, 39, 18, 2, 255, 46, 21, 5, 255, 43, 17, 4, 255, 41, 19, 6, 255, 38, 18, 4, 255, 44, 23, 7, 255, 46, 23, 3, 255, 47, 22, 4, 255, 46, 19, 7, 255, 43, 23, 5, 255, 46, 24, 2, 255, 38, 21, 2, 255, 41, 23, 3, 255, 42, 25, 3, 255, 40, 21, 1, 255, 49, 25, 4, 255, 43, 25, 3, 255, 48, 21, 2, 255, 40, 21, 4, 255, 46, 17, 4, 255, 46, 18, 4, 255, 41, 24, 6, 255, 48, 27, 3, 255, 49, 26, 3, 255, 47, 24, 2, 255, 51, 27, 5, 255, 48, 26, 3, 255, 46, 25, 2, 255, 54, 27, 6, 255, 49, 24, 1, 255, 52, 26, 2, 255, 53, 28, 4, 255, 51, 28, 2, 255, 56, 27, 3, 255, 54, 26, 2, 255, 55, 24, 5, 255, 60, 23, 4, 255, 61, 25, 5, 255, 53, 27, 5, 255, 49, 27, 4, 255, 49, 23, 3, 255, 58, 30, 5, 255, 55, 30, 7, 255, 51, 24, 4, 255, 51, 29, 5, 255, 49, 28, 1, 255, 54, 28, 4, 255, 52, 28, 4, 255, 57, 32, 8, 255, 49, 27, 4, 255, 48, 31, 5, 255, 48, 26, 2, 255, 56, 26, 5, 255, 55, 27, 6, 255, 57, 29, 1, 255, 53, 29, 4, 255, 49, 28, 8, 255, 54, 30, 8, 255, 56, 29, 5, 255, 63, 33, 5, 255, 59, 35, 2, 255, 56, 36, 6, 255, 51, 34, 12, 255, 53, 37, 15, 255, 55, 42, 10, 255, 56, 42, 17, 255, 56, 45, 14, 255, 60, 51, 21, 255, 58, 52, 24, 255, 60, 57, 21, 255, 61, 56, 26, 255, 59, 57, 35, 255, 63, 67, 32, 255, 70, 73, 24, 255, 68, 68, 35, 255, 65, 69, 36, 255, 70, 72, 51, 255, 72, 75, 53, 255, 72, 75, 59, 255, 76, 81, 62, 255, 73, 82, 59, 255, 76, 88, 71, 255, 76, 90, 68, 255, 81, 93, 71, 255, 84, 97, 77, 255, 85, 102, 79, 255, 88, 107, 81, 255, 94, 114, 93, 255, 93, 117, 94, 255, 93, 120, 91, 255, 92, 124, 92, 255, 92, 126, 102, 255, 96, 132, 106, 255, 96, 135, 107, 255, 97, 138, 111, 255, 101, 139, 112, 255, 102, 139, 113, 255, 103, 140, 113, 255, 101, 142, 114, 255, 103, 143, 116, 255, 102, 141, 110, 255, 103, 140, 107, 255, 104, 140, 107, 255, 102, 138, 105, 255, 102, 137, 106, 255, 99, 132, 101, 255, 104, 131, 99, 255, 100, 124, 90, 255, 97, 124, 85, 255, 98, 120, 83, 255, 97, 117, 83, 255, 94, 113, 77, 255, 95, 109, 72, 255, 89, 102, 73, 255, 88, 102, 60, 255, 88, 101, 59, 255, 85, 94, 61, 255, 84, 89, 48, 255, 88, 90, 41, 255, 85, 84, 47, 255, 86, 84, 41, 255, 85, 81, 27, 255, 81, 74, 30, 255, 81, 77, 26, 255, 84, 74, 16, 255, 78, 70, 16, 255, 84, 66, 35, 255, 82, 62, 19, 255, 69, 62, 21, 255, 82, 61, 8, 255, 84, 58, 8, 255, 85, 51, 17, 255, 86, 54, 9, 255, 84, 53, 13, 255, 76, 51, 14, 255, 77, 53, 11, 255, 78, 49, 3, 255, 80, 49, 5, 255, 74, 43, 7, 255, 74, 43, 8, 255, 78, 44, 2, 255, 83, 46, 3, 255, 78, 41, 4, 255, 77, 43, 9, 255, 74, 40, 6, 255, 77, 42, 6, 255, 73, 38, 5, 255, 71, 36, 7, 255, 73, 37, 7, 255, 72, 36, 4, 255, 71, 34, 6, 255, 72, 36, 5, 255, 73, 35, 4, 255, 75, 35, 4, 255, 77, 36, 7, 255, 75, 32, 6, 255, 75, 31, 1, 255, 76, 34, 1, 255, 77, 33, 4, 255, 81, 30, 3, 255, 76, 33, 2, 255, 72, 35, 6, 255, 73, 34, 8, 255, 72, 33, 5, 255, 73, 28, 0, 255, 71, 32, 3, 255, 69, 30, 3, 255, 76, 29, 3, 255, 77, 30, 1, 255, 76, 30, 1, 255, 70, 27, 2, 255, 69, 22, 2, 255, 75, 26, 5, 255, 76, 31, 3, 255, 82, 33, 3, 255, 83, 29, 2, 255, 79, 28, 3, 255, 80, 30, 5, 255, 78, 28, 3, 255, 79, 29, 4, 255, 84, 34, 5, 255, 83, 33, 3, 255, 82, 28, 3, 255, 78, 32, 4, 255, 75, 30, 3, 255, 77, 29, 3, 255, 79, 29, 4, 255, 76, 28, 2, 255, 72, 29, 2, 255, 73, 30, 5, 255, 73, 29, 5, 255, 73, 31, 5, 255, 70, 28, 1, 255, 73, 26, 4, 255, 76, 25, 5, 255, 74, 30, 4, 255, 71, 25, 3, 255, 76, 25, 3, 255, 72, 22, 3, 255, 71, 24, 0, 255, 85, 31, 4, 255, 80, 28, 6, 255, 86, 27, 3, 255, 86, 30, 9, 255, 66, 20, 3, 255, 71, 25, 4, 255, 68, 24, 4, 255, 74, 27, 10, 255, 74, 22, 5, 255, 63, 20, 2, 255, 64, 25, 7, 255, 65, 25, 4, 255, 63, 21, 0, 255, 64, 17, 7, 255, 60, 18, 2, 255, 65, 24, 6, 255, 62, 23, 3, 255, 60, 22, 1, 255, 67, 23, 6, 255, 66, 19, 4, 255, 58, 19, 0, 255, 55, 21, 2, 255, 54, 18, 7, 255, 60, 20, 5, 255, 64, 20, 1, 255, 62, 21, 7, 255, 51, 19, 6, 255, 58, 22, 1, 255, 69, 19, 4, 255, 65, 17, 2, 255, 66, 18, 1, 255, 63, 20, 2, 255, 70, 19, 3, 255, 77, 24, 5, 255, 54, 21, 0, 255, 53, 16, 1, 255, 60, 18, 5, 255, 53, 19, 3, 255, 54, 22, 6, 255, 54, 21, 8, 255, 46, 18, 6, 255, 48, 22, 5, 255, 46, 18, 3, 255, 51, 14, 4, 255, 54, 15, 6, 255, 45, 20, 2, 255, 41, 21, 3, 255, 43, 12, 0, 255, 50, 14, 5, 255, 46, 16, 5, 255, 42, 13, 1, 255, 53, 17, 1, 255, 60, 14, 2, 255, 47, 13, 1, 255, 44, 17, 5, 255, 52, 15, 7, 255, 51, 15, 3, 255, 47, 14, 2, 255, 54, 13, 3, 255, 61, 21, 4, 255, 41, 14, 0, 255, 43, 18, 4, 255, 50, 16, 4, 255, 49, 11, 1, 255, 48, 14, 4, 255, 55, 18, 1, 255, 53, 19, 0, 255, 57, 17, 2, 255, 55, 14, 2, 255, 57, 13, 3, 255, 64, 14, 6, 255, 62, 17, 6, 255, 59, 16, 2, 255, 62, 15, 3, 255, 66, 15, 3, 255, 64, 12, 0, 255, 68, 16, 2, 255, 65, 14, 1, 255, 63, 17, 2, 255, 64, 17, 1, 255, 70, 19, 4, 255, 63, 17, 3, 255, 64, 11, 2, 255, 65, 14, 2, 255, 66, 16, 5, 255, 67, 14, 4, 255, 66, 14, 0, 255, 74, 16, 4, 255, 77, 17, 6, 255, 68, 15, 2, 255, 62, 14, 0, 255, 61, 15, 1, 255, 57, 15, 4, 255, 55, 14, 6, 255, 52, 10, 4, 255, 48, 14, 5, 255, 39, 13, 1, 255, 45, 11, 5, 255, 40, 11, 5, 255, 37, 9, 4, 255, 36, 9, 2, 255, 43, 11, 3, 255, 53, 11, 4, 255, 49, 10, 2, 255, 44, 15, 2, 255, 34, 11, 1, 255, 48, 13, 6, 255, 48, 7, 2, 255, 42, 8, 3, 255, 41, 11, 7, 255, 34, 8, 5, 255, 38, 8, 8, 255, 36, 8, 6, 255, 29, 9, 1, 255, 26, 8, 0, 255, 29, 6, 3, 255, 21, 8, 1, 255, 39, 9, 5, 255, 40, 7, 5, 255, 35, 9, 3, 255, 38, 12, 5, 255, 51, 10, 5, 255, 38, 8, 1, 255, 46, 8, 2, 255, 45, 9, 3, 255, 40, 7, 2, 255, 4, 1, 1, 255, 8, 3, 3, 255, 7, 2, 1, 255, 6, 2, 1, 255, 6, 2, 1, 255, 9, 3, 0, 255, 11, 2, 0, 255, 9, 4, 1, 255, 9, 4, 1, 255, 9, 4, 1, 255, 8, 2, 0, 255, 11, 3, 1, 255, 12, 2, 0, 255, 15, 4, 2, 255, 12, 4, 2, 255, 11, 4, 1, 255, 12, 3, 1, 255, 8, 1, 0, 255, 10, 6, 3, 255, 14, 6, 3, 255, 12, 4, 1, 255, 13, 6, 3, 255, 14, 5, 3, 255, 14, 7, 4, 255, 14, 6, 3, 255, 15, 6, 4, 255, 13, 4, 2, 255, 10, 5, 1, 255, 13, 7, 3, 255, 16, 6, 1, 255, 17, 6, 2, 255, 20, 9, 5, 255, 17, 7, 2, 255, 20, 10, 5, 255, 19, 8, 4, 255, 19, 7, 3, 255, 19, 7, 2, 255, 21, 9, 2, 255, 21, 10, 2, 255, 19, 8, 2, 255, 19, 9, 2, 255, 21, 10, 1, 255, 26, 11, 4, 255, 24, 9, 2, 255, 27, 13, 5, 255, 26, 14, 5, 255, 24, 12, 3, 255, 23, 12, 3, 255, 21, 10, 2, 255, 24, 10, 2, 255, 29, 14, 6, 255, 25, 13, 3, 255, 28, 15, 4, 255, 35, 14, 4, 255, 31, 14, 3, 255, 21, 15, 2, 255, 26, 14, 2, 255, 33, 14, 3, 255, 36, 14, 2, 255, 31, 17, 3, 255, 25, 18, 2, 255, 31, 14, 1, 255, 43, 18, 7, 255, 35, 18, 7, 255, 36, 19, 3, 255, 30, 16, 1, 255, 36, 18, 4, 255, 38, 18, 3, 255, 36, 17, 1, 255, 36, 19, 3, 255, 33, 17, 2, 255, 33, 18, 0, 255, 37, 20, 3, 255, 40, 17, 6, 255, 43, 20, 7, 255, 41, 22, 5, 255, 36, 18, 4, 255, 43, 18, 4, 255, 42, 17, 3, 255, 42, 20, 4, 255, 39, 26, 4, 255, 33, 24, 2, 255, 35, 20, 3, 255, 39, 20, 5, 255, 50, 25, 8, 255, 40, 21, 4, 255, 45, 24, 7, 255, 42, 24, 3, 255, 39, 22, 1, 255, 44, 20, 1, 255, 43, 25, 3, 255, 43, 24, 2, 255, 44, 23, 1, 255, 52, 22, 6, 255, 46, 23, 7, 255, 33, 21, 1, 255, 44, 23, 0, 255, 45, 25, 3, 255, 42, 25, 3, 255, 41, 24, 2, 255, 47, 25, 3, 255, 50, 24, 2, 255, 54, 27, 6, 255, 52, 26, 3, 255, 52, 25, 5, 255, 51, 26, 4, 255, 49, 28, 0, 255, 53, 27, 2, 255, 49, 25, 4, 255, 52, 22, 3, 255, 54, 24, 2, 255, 53, 25, 3, 255, 48, 25, 2, 255, 47, 25, 4, 255, 39, 20, 2, 255, 52, 25, 3, 255, 55, 28, 2, 255, 54, 24, 0, 255, 52, 28, 6, 255, 49, 27, 5, 255, 53, 26, 4, 255, 50, 26, 2, 255, 54, 29, 6, 255, 48, 27, 4, 255, 44, 31, 5, 255, 48, 28, 4, 255, 56, 26, 5, 255, 56, 30, 5, 255, 53, 33, 4, 255, 50, 32, 6, 255, 54, 27, 5, 255, 59, 26, 4, 255, 51, 26, 2, 255, 53, 31, 5, 255, 49, 33, 7, 255, 45, 37, 8, 255, 50, 39, 10, 255, 57, 37, 17, 255, 61, 39, 8, 255, 58, 41, 20, 255, 55, 45, 25, 255, 57, 46, 30, 255, 56, 51, 22, 255, 59, 55, 25, 255, 60, 58, 25, 255, 61, 60, 34, 255, 62, 65, 38, 255, 65, 65, 34, 255, 68, 69, 40, 255, 69, 72, 47, 255, 69, 75, 43, 255, 74, 81, 44, 255, 73, 81, 57, 255, 71, 80, 62, 255, 74, 87, 61, 255, 78, 89, 69, 255, 81, 93, 72, 255, 85, 97, 79, 255, 85, 100, 81, 255, 87, 105, 84, 255, 92, 111, 91, 255, 90, 113, 89, 255, 90, 119, 92, 255, 93, 125, 99, 255, 90, 127, 99, 255, 95, 132, 104, 255, 98, 136, 111, 255, 97, 139, 112, 255, 96, 140, 112, 255, 100, 142, 114, 255, 104, 145, 116, 255, 101, 143, 115, 255, 99, 142, 114, 255, 105, 145, 119, 255, 104, 143, 114, 255, 102, 141, 108, 255, 102, 141, 107, 255, 100, 138, 105, 255, 100, 136, 103, 255, 98, 132, 101, 255, 102, 128, 100, 255, 102, 126, 90, 255, 98, 124, 87, 255, 97, 118, 82, 255, 97, 115, 79, 255, 93, 111, 79, 255, 91, 107, 70, 255, 88, 101, 62, 255, 88, 100, 59, 255, 88, 98, 61, 255, 87, 90, 62, 255, 88, 88, 50, 255, 88, 85, 40, 255, 83, 78, 45, 255, 85, 77, 34, 255, 88, 77, 25, 255, 86, 75, 19, 255, 83, 75, 23, 255, 77, 70, 28, 255, 78, 61, 24, 255, 81, 64, 16, 255, 86, 66, 17, 255, 79, 59, 22, 255, 79, 63, 13, 255, 83, 56, 16, 255, 74, 49, 20, 255, 79, 52, 6, 255, 83, 55, 9, 255, 74, 50, 8, 255, 72, 48, 4, 255, 79, 49, 6, 255, 76, 45, 8, 255, 74, 48, 6, 255, 74, 48, 8, 255, 75, 44, 10, 255, 79, 46, 7, 255, 75, 43, 3, 255, 75, 41, 9, 255, 74, 39, 6, 255, 76, 42, 4, 255, 76, 38, 4, 255, 74, 34, 7, 255, 73, 36, 7, 255, 73, 38, 4, 255, 69, 39, 5, 255, 70, 35, 2, 255, 74, 36, 4, 255, 75, 35, 4, 255, 75, 30, 1, 255, 78, 32, 7, 255, 77, 34, 4, 255, 77, 33, 2, 255, 79, 33, 4, 255, 77, 30, 2, 255, 81, 31, 4, 255, 82, 29, 5, 255, 80, 29, 8, 255, 76, 29, 5, 255, 76, 29, 3, 255, 72, 31, 4, 255, 67, 31, 4, 255, 70, 30, 4, 255, 72, 31, 3, 255, 73, 28, 4, 255, 74, 28, 3, 255, 74, 27, 6, 255, 77, 27, 8, 255, 78, 29, 2, 255, 83, 32, 1, 255, 85, 29, 3, 255, 83, 31, 3, 255, 79, 29, 2, 255, 77, 30, 4, 255, 76, 29, 2, 255, 78, 29, 0, 255, 81, 31, 0, 255, 79, 30, 2, 255, 78, 28, 0, 255, 74, 29, 1, 255, 75, 29, 1, 255, 78, 26, 2, 255, 78, 27, 3, 255, 78, 32, 2, 255, 77, 32, 1, 255, 72, 27, 2, 255, 69, 26, 2, 255, 68, 28, 4, 255, 75, 27, 5, 255, 74, 25, 4, 255, 66, 27, 6, 255, 66, 23, 6, 255, 70, 23, 3, 255, 66, 21, 4, 255, 69, 27, 3, 255, 75, 26, 2, 255, 98, 27, 2, 255, 93, 30, 1, 255, 84, 26, 4, 255, 69, 22, 7, 255, 64, 26, 6, 255, 88, 29, 3, 255, 94, 28, 2, 255, 79, 26, 4, 255, 69, 21, 0, 255, 68, 23, 1, 255, 69, 25, 1, 255, 71, 24, 0, 255, 72, 22, 5, 255, 68, 22, 6, 255, 65, 25, 7, 255, 64, 21, 3, 255, 63, 20, 2, 255, 61, 23, 4, 255, 60, 20, 1, 255, 63, 18, 3, 255, 59, 20, 5, 255, 56, 20, 6, 255, 64, 22, 7, 255, 57, 18, 1, 255, 56, 23, 6, 255, 57, 21, 7, 255, 61, 18, 0, 255, 68, 21, 6, 255, 70, 18, 4, 255, 62, 17, 2, 255, 60, 21, 5, 255, 58, 16, 2, 255, 65, 17, 4, 255, 51, 19, 4, 255, 50, 16, 2, 255, 55, 20, 4, 255, 49, 19, 2, 255, 55, 19, 3, 255, 52, 17, 5, 255, 52, 17, 5, 255, 52, 15, 4, 255, 49, 18, 6, 255, 43, 13, 2, 255, 52, 16, 5, 255, 54, 17, 5, 255, 49, 16, 7, 255, 52, 16, 6, 255, 51, 15, 5, 255, 45, 13, 4, 255, 43, 17, 5, 255, 40, 14, 2, 255, 45, 13, 1, 255, 44, 12, 1, 255, 44, 13, 3, 255, 49, 11, 1, 255, 52, 16, 2, 255, 54, 18, 2, 255, 70, 20, 7, 255, 77, 24, 5, 255, 63, 21, 1, 255, 61, 18, 3, 255, 49, 16, 4, 255, 44, 15, 3, 255, 53, 12, 5, 255, 52, 14, 2, 255, 51, 17, 3, 255, 56, 15, 3, 255, 58, 14, 4, 255, 61, 13, 2, 255, 63, 13, 2, 255, 62, 17, 5, 255, 59, 15, 3, 255, 56, 14, 0, 255, 60, 17, 4, 255, 63, 18, 5, 255, 68, 19, 6, 255, 67, 13, 2, 255, 61, 14, 3, 255, 54, 12, 2, 255, 64, 14, 4, 255, 64, 15, 2, 255, 58, 15, 1, 255, 58, 16, 4, 255, 55, 12, 4, 255, 57, 11, 2, 255, 63, 14, 1, 255, 71, 18, 4, 255, 72, 17, 2, 255, 72, 16, 3, 255, 70, 16, 4, 255, 63, 14, 2, 255, 57, 13, 1, 255, 55, 12, 4, 255, 50, 10, 3, 255, 48, 14, 5, 255, 43, 15, 3, 255, 40, 10, 2, 255, 41, 12, 6, 255, 40, 7, 4, 255, 38, 10, 4, 255, 41, 13, 4, 255, 51, 13, 4, 255, 52, 11, 2, 255, 47, 10, 2, 255, 33, 11, 3, 255, 31, 13, 5, 255, 34, 9, 2, 255, 39, 11, 5, 255, 37, 10, 5, 255, 37, 9, 2, 255, 35, 9, 3, 255, 42, 10, 3, 255, 44, 16, 5, 255, 38, 12, 2, 255, 30, 9, 0, 255, 22, 10, 0, 255, 34, 7, 3, 255, 34, 6, 1, 255, 35, 10, 2, 255, 38, 13, 3, 255, 47, 9, 1, 255, 44, 10, 1, 255, 51, 14, 4, 255, 46, 11, 3, 255, 38, 6, 2, 255, 4, 1, 0, 255, 6, 1, 1, 255, 5, 0, 0, 255, 7, 3, 2, 255, 6, 2, 1, 255, 8, 2, 0, 255, 10, 2, 0, 255, 8, 2, 0, 255, 8, 2, 2, 255, 8, 2, 2, 255, 6, 1, 0, 255, 9, 1, 0, 255, 11, 2, 0, 255, 15, 4, 2, 255, 12, 3, 2, 255, 13, 4, 2, 255, 14, 6, 4, 255, 8, 2, 0, 255, 8, 5, 2, 255, 13, 4, 2, 255, 13, 3, 1, 255, 14, 6, 3, 255, 14, 6, 3, 255, 12, 5, 1, 255, 12, 4, 1, 255, 14, 4, 3, 255, 15, 3, 2, 255, 11, 6, 2, 255, 11, 6, 2, 255, 13, 5, 1, 255, 17, 7, 2, 255, 18, 7, 3, 255, 15, 8, 2, 255, 15, 6, 1, 255, 17, 6, 2, 255, 20, 9, 5, 255, 19, 8, 2, 255, 19, 9, 2, 255, 21, 9, 3, 255, 20, 8, 3, 255, 20, 11, 4, 255, 24, 13, 5, 255, 20, 9, 2, 255, 20, 10, 2, 255, 21, 10, 1, 255, 26, 12, 0, 255, 28, 15, 5, 255, 24, 13, 4, 255, 22, 13, 3, 255, 22, 12, 2, 255, 26, 14, 4, 255, 30, 13, 3, 255, 26, 12, 3, 255, 28, 11, 3, 255, 36, 15, 6, 255, 32, 16, 3, 255, 27, 15, 4, 255, 33, 18, 8, 255, 29, 11, 0, 255, 35, 13, 4, 255, 30, 15, 4, 255, 29, 16, 3, 255, 35, 18, 7, 255, 29, 13, 4, 255, 39, 16, 4, 255, 28, 16, 0, 255, 31, 17, 4, 255, 34, 16, 2, 255, 33, 21, 2, 255, 34, 16, 2, 255, 37, 19, 4, 255, 37, 21, 5, 255, 39, 18, 7, 255, 43, 17, 4, 255, 44, 18, 6, 255, 37, 19, 2, 255, 36, 22, 1, 255, 41, 21, 4, 255, 40, 24, 3, 255, 39, 24, 1, 255, 42, 20, 1, 255, 43, 17, 1, 255, 42, 22, 5, 255, 37, 21, 2, 255, 42, 18, 3, 255, 43, 22, 6, 255, 43, 21, 5, 255, 43, 20, 4, 255, 43, 22, 4, 255, 47, 20, 5, 255, 45, 22, 3, 255, 44, 27, 1, 255, 41, 25, 1, 255, 47, 22, 2, 255, 47, 24, 3, 255, 41, 26, 5, 255, 45, 23, 6, 255, 40, 21, 3, 255, 40, 23, 2, 255, 42, 25, 1, 255, 50, 26, 2, 255, 54, 25, 1, 255, 56, 26, 2, 255, 47, 22, 2, 255, 51, 21, 3, 255, 55, 27, 5, 255, 50, 27, 2, 255, 47, 23, 1, 255, 46, 25, 7, 255, 47, 25, 4, 255, 50, 25, 3, 255, 52, 24, 2, 255, 56, 26, 6, 255, 55, 24, 8, 255, 45, 19, 6, 255, 57, 26, 5, 255, 48, 25, 1, 255, 49, 25, 3, 255, 53, 28, 5, 255, 51, 23, 2, 255, 49, 25, 5, 255, 45, 27, 3, 255, 49, 26, 1, 255, 49, 29, 4, 255, 51, 28, 4, 255, 54, 30, 6, 255, 51, 29, 3, 255, 50, 27, 0, 255, 56, 29, 4, 255, 52, 31, 4, 255, 55, 30, 3, 255, 55, 29, 1, 255, 55, 34, 5, 255, 51, 30, 5, 255, 60, 33, 15, 255, 53, 34, 8, 255, 51, 39, 6, 255, 55, 38, 13, 255, 63, 43, 10, 255, 59, 42, 15, 255, 56, 46, 19, 255, 59, 49, 18, 255, 59, 48, 21, 255, 57, 46, 40, 255, 60, 55, 32, 255, 65, 66, 28, 255, 60, 59, 37, 255, 64, 64, 41, 255, 68, 68, 42, 255, 71, 73, 54, 255, 72, 78, 47, 255, 72, 78, 50, 255, 72, 81, 53, 255, 72, 84, 57, 255, 76, 90, 64, 255, 77, 89, 64, 255, 81, 93, 73, 255, 85, 98, 78, 255, 85, 103, 79, 255, 88, 108, 82, 255, 92, 113, 96, 255, 93, 119, 94, 255, 91, 124, 95, 255, 90, 127, 101, 255, 90, 129, 107, 255, 94, 135, 106, 255, 96, 137, 111, 255, 97, 139, 114, 255, 100, 143, 116, 255, 101, 143, 114, 255, 103, 144, 113, 255, 102, 145, 115, 255, 99, 144, 114, 255, 103, 145, 117, 255, 102, 146, 114, 255, 100, 142, 107, 255, 100, 142, 107, 255, 98, 139, 103, 255, 97, 137, 100, 255, 97, 133, 98, 255, 98, 125, 99, 255, 99, 124, 93, 255, 96, 122, 91, 255, 95, 116, 82, 255, 94, 113, 69, 255, 91, 110, 72, 255, 90, 105, 68, 255, 88, 100, 63, 255, 88, 97, 64, 255, 86, 93, 58, 255, 85, 85, 55, 255, 89, 85, 50, 255, 84, 84, 41, 255, 80, 79, 40, 255, 81, 78, 26, 255, 84, 77, 21, 255, 84, 76, 19, 255, 73, 68, 28, 255, 73, 64, 36, 255, 80, 68, 20, 255, 82, 61, 13, 255, 82, 62, 16, 255, 83, 59, 15, 255, 81, 57, 14, 255, 79, 56, 18, 255, 73, 54, 10, 255, 73, 55, 6, 255, 75, 52, 15, 255, 76, 46, 12, 255, 83, 51, 9, 255, 78, 45, 12, 255, 75, 39, 12, 255, 74, 41, 7, 255, 72, 44, 7, 255, 72, 40, 10, 255, 74, 38, 11, 255, 75, 38, 7, 255, 76, 39, 6, 255, 76, 40, 7, 255, 74, 37, 7, 255, 79, 38, 9, 255, 75, 31, 4, 255, 70, 31, 4, 255, 69, 35, 9, 255, 71, 38, 4, 255, 74, 34, 3, 255, 73, 35, 4, 255, 74, 34, 4, 255, 78, 32, 5, 255, 74, 32, 5, 255, 75, 33, 7, 255, 78, 30, 5, 255, 76, 33, 5, 255, 66, 35, 4, 255, 68, 32, 3, 255, 74, 28, 1, 255, 74, 31, 4, 255, 65, 27, 1, 255, 69, 30, 3, 255, 70, 30, 4, 255, 70, 30, 5, 255, 69, 29, 4, 255, 73, 29, 2, 255, 65, 22, 4, 255, 71, 28, 4, 255, 74, 29, 1, 255, 74, 29, 4, 255, 77, 28, 1, 255, 81, 27, 1, 255, 85, 29, 5, 255, 83, 34, 3, 255, 79, 31, 3, 255, 75, 29, 3, 255, 76, 31, 4, 255, 77, 31, 1, 255, 78, 31, 1, 255, 76, 32, 2, 255, 79, 32, 4, 255, 74, 31, 2, 255, 73, 30, 2, 255, 81, 30, 5, 255, 78, 29, 5, 255, 73, 28, 0, 255, 77, 31, 0, 255, 81, 30, 2, 255, 78, 26, 3, 255, 73, 24, 2, 255, 74, 27, 4, 255, 73, 26, 4, 255, 69, 26, 5, 255, 64, 27, 5, 255, 63, 21, 3, 255, 68, 23, 5, 255, 64, 23, 4, 255, 67, 26, 5, 255, 76, 25, 4, 255, 87, 28, 2, 255, 94, 30, 1, 255, 74, 27, 1, 255, 69, 21, 4, 255, 88, 27, 8, 255, 76, 26, 3, 255, 64, 22, 1, 255, 68, 22, 5, 255, 70, 23, 4, 255, 68, 22, 3, 255, 65, 24, 5, 255, 62, 23, 4, 255, 64, 22, 5, 255, 59, 22, 3, 255, 63, 21, 4, 255, 65, 22, 5, 255, 60, 23, 4, 255, 60, 20, 1, 255, 50, 19, 2, 255, 56, 18, 1, 255, 60, 18, 0, 255, 52, 23, 2, 255, 55, 20, 4, 255, 63, 19, 5, 255, 60, 20, 3, 255, 56, 18, 2, 255, 51, 22, 1, 255, 62, 20, 3, 255, 59, 14, 0, 255, 63, 17, 2, 255, 60, 22, 2, 255, 62, 18, 1, 255, 65, 20, 5, 255, 63, 18, 4, 255, 57, 21, 2, 255, 55, 21, 2, 255, 54, 19, 3, 255, 44, 19, 1, 255, 50, 18, 0, 255, 54, 13, 1, 255, 54, 19, 7, 255, 48, 17, 6, 255, 48, 17, 6, 255, 42, 13, 3, 255, 51, 13, 5, 255, 53, 15, 5, 255, 51, 15, 4, 255, 50, 15, 4, 255, 43, 14, 3, 255, 40, 15, 3, 255, 42, 16, 4, 255, 46, 16, 5, 255, 51, 15, 3, 255, 53, 14, 2, 255, 52, 17, 0, 255, 63, 22, 4, 255, 73, 18, 3, 255, 79, 18, 2, 255, 84, 19, 2, 255, 79, 17, 3, 255, 51, 14, 1, 255, 43, 14, 2, 255, 50, 18, 3, 255, 47, 14, 1, 255, 52, 16, 4, 255, 51, 14, 3, 255, 54, 14, 1, 255, 55, 15, 0, 255, 54, 16, 0, 255, 54, 14, 1, 255, 56, 15, 3, 255, 59, 14, 1, 255, 63, 15, 0, 255, 65, 17, 4, 255, 61, 16, 3, 255, 56, 14, 2, 255, 50, 16, 4, 255, 52, 13, 5, 255, 55, 13, 3, 255, 61, 17, 4, 255, 62, 14, 0, 255, 59, 11, 2, 255, 56, 14, 5, 255, 58, 14, 3, 255, 64, 14, 1, 255, 67, 17, 1, 255, 68, 19, 1, 255, 68, 16, 0, 255, 70, 14, 2, 255, 66, 14, 3, 255, 60, 15, 3, 255, 53, 16, 4, 255, 46, 13, 1, 255, 52, 13, 3, 255, 56, 10, 2, 255, 55, 12, 2, 255, 52, 13, 2, 255, 55, 15, 6, 255, 34, 9, 1, 255, 31, 10, 2, 255, 52, 13, 6, 255, 55, 13, 3, 255, 56, 16, 7, 255, 49, 10, 6, 255, 34, 8, 3, 255, 31, 9, 2, 255, 34, 10, 1, 255, 32, 10, 0, 255, 34, 8, 1, 255, 30, 9, 0, 255, 42, 11, 4, 255, 43, 10, 4, 255, 40, 6, 3, 255, 30, 5, 3, 255, 29, 8, 4, 255, 32, 9, 3, 255, 31, 9, 1, 255, 43, 8, 2, 255, 45, 10, 1, 255, 51, 15, 6, 255, 49, 14, 4, 255, 46, 14, 2, 255, 42, 11, 3, 255, 37, 7, 2, 255, 5, 1, 1, 255, 5, 1, 0, 255, 6, 0, 1, 255, 7, 3, 2, 255, 6, 2, 1, 255, 9, 3, 0, 255, 11, 2, 2, 255, 7, 1, 1, 255, 7, 1, 1, 255, 8, 2, 2, 255, 6, 1, 0, 255, 8, 1, 0, 255, 11, 3, 0, 255, 12, 3, 1, 255, 12, 5, 2, 255, 10, 2, 1, 255, 14, 4, 3, 255, 13, 5, 2, 255, 10, 7, 4, 255, 11, 3, 1, 255, 14, 4, 2, 255, 16, 6, 3, 255, 15, 6, 3, 255, 13, 5, 2, 255, 11, 3, 1, 255, 14, 7, 4, 255, 15, 4, 2, 255, 13, 5, 2, 255, 12, 4, 1, 255, 13, 4, 2, 255, 17, 7, 3, 255, 15, 8, 1, 255, 14, 7, 1, 255, 15, 6, 1, 255, 19, 9, 4, 255, 20, 9, 5, 255, 18, 7, 3, 255, 18, 9, 2, 255, 17, 8, 1, 255, 18, 9, 3, 255, 17, 9, 2, 255, 20, 10, 3, 255, 18, 8, 2, 255, 15, 8, 1, 255, 17, 12, 3, 255, 24, 13, 2, 255, 22, 12, 2, 255, 23, 13, 3, 255, 27, 14, 5, 255, 26, 11, 2, 255, 31, 12, 3, 255, 31, 10, 5, 255, 31, 13, 3, 255, 28, 14, 0, 255, 30, 13, 5, 255, 32, 11, 9, 255, 24, 12, 2, 255, 28, 15, 1, 255, 27, 15, 4, 255, 34, 12, 5, 255, 36, 13, 6, 255, 26, 13, 1, 255, 26, 17, 3, 255, 29, 13, 2, 255, 31, 18, 2, 255, 24, 14, 3, 255, 37, 18, 5, 255, 42, 17, 2, 255, 33, 17, 2, 255, 28, 18, 3, 255, 35, 19, 2, 255, 33, 14, 3, 255, 34, 17, 6, 255, 35, 19, 2, 255, 36, 18, 3, 255, 40, 20, 3, 255, 43, 22, 1, 255, 44, 18, 3, 255, 39, 22, 0, 255, 43, 21, 1, 255, 55, 20, 7, 255, 50, 18, 6, 255, 44, 21, 3, 255, 38, 23, 0, 255, 43, 23, 3, 255, 45, 26, 3, 255, 43, 21, 1, 255, 45, 21, 3, 255, 48, 25, 3, 255, 49, 18, 3, 255, 48, 23, 6, 255, 43, 26, 3, 255, 48, 24, 1, 255, 44, 22, 0, 255, 41, 22, 2, 255, 48, 23, 2, 255, 47, 21, 5, 255, 46, 22, 4, 255, 47, 24, 5, 255, 47, 24, 1, 255, 51, 25, 2, 255, 57, 28, 2, 255, 56, 28, 4, 255, 49, 26, 4, 255, 54, 26, 5, 255, 56, 26, 5, 255, 51, 24, 3, 255, 47, 20, 3, 255, 45, 24, 6, 255, 47, 26, 4, 255, 49, 24, 3, 255, 46, 22, 1, 255, 42, 25, 1, 255, 42, 23, 3, 255, 49, 21, 7, 255, 48, 26, 5, 255, 47, 26, 3, 255, 55, 28, 6, 255, 48, 26, 3, 255, 43, 24, 1, 255, 49, 26, 6, 255, 51, 28, 6, 255, 52, 32, 4, 255, 47, 28, 2, 255, 53, 25, 3, 255, 56, 28, 6, 255, 53, 31, 7, 255, 51, 27, 3, 255, 59, 29, 0, 255, 59, 31, 4, 255, 59, 27, 5, 255, 59, 26, 4, 255, 61, 32, 6, 255, 55, 31, 3, 255, 59, 31, 9, 255, 58, 32, 6, 255, 61, 39, 13, 255, 58, 37, 7, 255, 63, 43, 11, 255, 55, 42, 19, 255, 54, 44, 24, 255, 64, 50, 18, 255, 66, 53, 20, 255, 65, 53, 27, 255, 66, 59, 30, 255, 64, 62, 29, 255, 63, 62, 29, 255, 69, 69, 45, 255, 68, 67, 52, 255, 68, 70, 43, 255, 73, 74, 55, 255, 74, 76, 59, 255, 73, 81, 62, 255, 77, 88, 65, 255, 79, 89, 65, 255, 83, 93, 68, 255, 83, 97, 77, 255, 86, 104, 83, 255, 85, 109, 80, 255, 89, 112, 83, 255, 91, 117, 95, 255, 90, 121, 98, 255, 92, 127, 103, 255, 91, 132, 106, 255, 91, 133, 108, 255, 93, 136, 112, 255, 98, 139, 115, 255, 101, 143, 119, 255, 100, 144, 118, 255, 102, 145, 118, 255, 107, 148, 121, 255, 105, 147, 118, 255, 103, 147, 116, 255, 101, 146, 116, 255, 99, 144, 113, 255, 97, 141, 107, 255, 98, 141, 106, 255, 97, 139, 103, 255, 98, 137, 101, 255, 95, 130, 97, 255, 99, 127, 100, 255, 99, 124, 97, 255, 92, 119, 89, 255, 96, 117, 83, 255, 96, 114, 71, 255, 94, 108, 67, 255, 94, 98, 72, 255, 91, 96, 67, 255, 88, 96, 50, 255, 85, 94, 39, 255, 80, 85, 54, 255, 81, 81, 56, 255, 86, 87, 26, 255, 83, 80, 40, 255, 83, 75, 40, 255, 80, 70, 31, 255, 80, 67, 35, 255, 73, 65, 23, 255, 74, 61, 20, 255, 81, 65, 13, 255, 79, 59, 23, 255, 70, 56, 20, 255, 79, 62, 14, 255, 82, 57, 7, 255, 81, 52, 12, 255, 84, 53, 8, 255, 78, 51, 15, 255, 77, 48, 9, 255, 80, 46, 5, 255, 82, 46, 11, 255, 73, 43, 8, 255, 76, 43, 3, 255, 71, 38, 9, 255, 69, 40, 8, 255, 72, 45, 4, 255, 74, 41, 10, 255, 75, 38, 10, 255, 77, 38, 2, 255, 74, 37, 3, 255, 73, 37, 9, 255, 77, 35, 10, 255, 77, 33, 5, 255, 71, 31, 4, 255, 67, 33, 9, 255, 73, 36, 4, 255, 78, 33, 4, 255, 72, 33, 3, 255, 69, 32, 3, 255, 75, 31, 5, 255, 75, 36, 5, 255, 72, 34, 7, 255, 75, 29, 6, 255, 72, 30, 2, 255, 67, 36, 4, 255, 68, 34, 5, 255, 72, 28, 1, 255, 75, 29, 4, 255, 70, 33, 6, 255, 68, 29, 3, 255, 73, 30, 6, 255, 71, 29, 5, 255, 67, 30, 4, 255, 73, 31, 6, 255, 68, 28, 9, 255, 73, 28, 5, 255, 74, 31, 2, 255, 74, 32, 3, 255, 79, 31, 2, 255, 86, 30, 6, 255, 83, 32, 5, 255, 78, 32, 1, 255, 76, 30, 0, 255, 76, 31, 2, 255, 78, 33, 4, 255, 74, 29, 1, 255, 76, 31, 5, 255, 76, 31, 3, 255, 76, 31, 2, 255, 72, 29, 1, 255, 72, 28, 2, 255, 74, 28, 2, 255, 74, 26, 4, 255, 73, 28, 1, 255, 85, 33, 4, 255, 91, 31, 3, 255, 86, 29, 4, 255, 73, 26, 1, 255, 70, 29, 3, 255, 73, 29, 5, 255, 70, 26, 2, 255, 67, 28, 1, 255, 67, 23, 3, 255, 76, 25, 2, 255, 75, 25, 5, 255, 70, 24, 3, 255, 67, 25, 2, 255, 67, 24, 6, 255, 78, 27, 7, 255, 72, 23, 3, 255, 64, 21, 8, 255, 65, 20, 7, 255, 64, 19, 1, 255, 65, 22, 1, 255, 66, 21, 3, 255, 65, 22, 2, 255, 65, 25, 5, 255, 65, 24, 5, 255, 66, 24, 3, 255, 56, 24, 3, 255, 57, 23, 3, 255, 61, 21, 3, 255, 64, 21, 4, 255, 65, 22, 5, 255, 64, 19, 2, 255, 57, 20, 1, 255, 58, 22, 3, 255, 62, 23, 4, 255, 56, 24, 3, 255, 60, 22, 4, 255, 60, 19, 5, 255, 51, 19, 3, 255, 64, 22, 3, 255, 64, 18, 1, 255, 56, 21, 1, 255, 60, 20, 4, 255, 61, 15, 3, 255, 63, 24, 7, 255, 61, 23, 2, 255, 61, 17, 1, 255, 58, 16, 1, 255, 51, 19, 0, 255, 61, 18, 1, 255, 60, 13, 1, 255, 56, 19, 2, 255, 62, 21, 3, 255, 58, 15, 4, 255, 51, 16, 4, 255, 50, 16, 4, 255, 52, 16, 5, 255, 47, 16, 6, 255, 35, 18, 2, 255, 49, 17, 4, 255, 56, 15, 3, 255, 50, 16, 4, 255, 46, 18, 6, 255, 44, 16, 4, 255, 44, 17, 4, 255, 49, 18, 7, 255, 52, 14, 3, 255, 53, 15, 2, 255, 53, 16, 3, 255, 60, 18, 3, 255, 63, 17, 2, 255, 55, 17, 1, 255, 70, 19, 4, 255, 64, 20, 4, 255, 49, 16, 2, 255, 61, 12, 6, 255, 48, 20, 5, 255, 52, 17, 1, 255, 63, 18, 4, 255, 56, 14, 1, 255, 58, 13, 3, 255, 58, 13, 4, 255, 56, 15, 5, 255, 58, 14, 4, 255, 59, 16, 3, 255, 62, 15, 2, 255, 61, 13, 0, 255, 62, 16, 0, 255, 58, 16, 1, 255, 54, 15, 2, 255, 51, 13, 4, 255, 55, 15, 6, 255, 52, 14, 2, 255, 56, 14, 2, 255, 56, 13, 2, 255, 57, 14, 2, 255, 68, 15, 5, 255, 69, 15, 3, 255, 65, 16, 1, 255, 67, 14, 0, 255, 72, 16, 2, 255, 68, 16, 2, 255, 63, 15, 0, 255, 57, 15, 3, 255, 53, 12, 2, 255, 50, 13, 0, 255, 51, 15, 1, 255, 57, 14, 3, 255, 60, 11, 1, 255, 65, 15, 2, 255, 60, 15, 1, 255, 58, 14, 3, 255, 41, 9, 0, 255, 37, 9, 2, 255, 42, 9, 3, 255, 41, 10, 2, 255, 42, 11, 4, 255, 41, 12, 8, 255, 33, 5, 2, 255, 31, 12, 5, 255, 29, 9, 3, 255, 35, 5, 1, 255, 38, 9, 2, 255, 41, 10, 4, 255, 45, 11, 4, 255, 40, 10, 1, 255, 41, 12, 3, 255, 35, 11, 3, 255, 34, 9, 4, 255, 35, 6, 2, 255, 38, 12, 4, 255, 44, 11, 3, 255, 49, 7, 0, 255, 49, 11, 3, 255, 41, 12, 0, 255, 48, 11, 1, 255, 49, 12, 2, 255, 49, 11, 3, 255, 5, 1, 0, 255, 6, 0, 0, 255, 7, 1, 1, 255, 4, 0, 0, 255, 4, 1, 0, 255, 8, 2, 0, 255, 11, 2, 3, 255, 10, 0, 2, 255, 7, 1, 1, 255, 9, 3, 3, 255, 9, 3, 2, 255, 9, 4, 1, 255, 13, 5, 2, 255, 8, 2, 0, 255, 9, 5, 2, 255, 14, 6, 4, 255, 14, 3, 2, 255, 15, 5, 3, 255, 9, 2, 1, 255, 10, 3, 1, 255, 11, 3, 1, 255, 13, 2, 1, 255, 15, 5, 3, 255, 15, 4, 3, 255, 10, 4, 1, 255, 15, 8, 5, 255, 16, 5, 3, 255, 12, 3, 2, 255, 13, 4, 2, 255, 14, 5, 3, 255, 14, 7, 4, 255, 11, 6, 1, 255, 15, 7, 0, 255, 19, 9, 4, 255, 20, 9, 6, 255, 16, 5, 2, 255, 17, 8, 3, 255, 18, 11, 4, 255, 16, 9, 1, 255, 15, 7, 0, 255, 16, 9, 2, 255, 19, 8, 3, 255, 20, 6, 4, 255, 20, 10, 6, 255, 19, 10, 4, 255, 28, 14, 5, 255, 22, 10, 2, 255, 24, 10, 4, 255, 21, 9, 3, 255, 24, 10, 3, 255, 29, 12, 4, 255, 25, 14, 6, 255, 32, 13, 4, 255, 29, 13, 3, 255, 20, 13, 2, 255, 26, 11, 3, 255, 23, 14, 3, 255, 29, 12, 1, 255, 25, 15, 1, 255, 27, 17, 5, 255, 36, 15, 5, 255, 33, 15, 2, 255, 30, 16, 1, 255, 39, 13, 4, 255, 32, 15, 5, 255, 27, 15, 5, 255, 27, 14, 2, 255, 33, 17, 1, 255, 35, 19, 2, 255, 36, 19, 4, 255, 34, 17, 3, 255, 30, 17, 2, 255, 27, 16, 3, 255, 27, 15, 4, 255, 34, 17, 4, 255, 35, 16, 0, 255, 37, 20, 3, 255, 34, 20, 4, 255, 45, 20, 4, 255, 47, 20, 3, 255, 41, 18, 4, 255, 37, 18, 4, 255, 36, 22, 2, 255, 39, 22, 3, 255, 44, 20, 7, 255, 40, 21, 1, 255, 44, 24, 6, 255, 44, 22, 3, 255, 49, 26, 3, 255, 45, 19, 4, 255, 42, 20, 1, 255, 49, 23, 1, 255, 52, 20, 4, 255, 48, 21, 3, 255, 48, 26, 2, 255, 51, 26, 3, 255, 50, 25, 1, 255, 52, 25, 4, 255, 51, 23, 2, 255, 53, 24, 4, 255, 54, 25, 5, 255, 51, 23, 1, 255, 45, 22, 2, 255, 44, 26, 3, 255, 53, 27, 3, 255, 52, 23, 2, 255, 50, 24, 4, 255, 48, 22, 1, 255, 42, 23, 1, 255, 44, 25, 1, 255, 45, 25, 1, 255, 45, 25, 4, 255, 45, 26, 5, 255, 44, 22, 4, 255, 49, 22, 6, 255, 43, 24, 3, 255, 44, 27, 3, 255, 53, 27, 4, 255, 48, 26, 1, 255, 46, 26, 2, 255, 49, 26, 3, 255, 51, 27, 2, 255, 55, 29, 1, 255, 53, 31, 3, 255, 50, 29, 5, 255, 53, 27, 6, 255, 56, 26, 7, 255, 54, 26, 4, 255, 54, 32, 3, 255, 57, 29, 4, 255, 56, 27, 3, 255, 60, 30, 5, 255, 65, 30, 7, 255, 58, 29, 6, 255, 52, 33, 12, 255, 59, 41, 7, 255, 59, 34, 9, 255, 61, 38, 4, 255, 57, 36, 16, 255, 55, 39, 17, 255, 62, 48, 12, 255, 67, 53, 9, 255, 69, 54, 26, 255, 65, 54, 24, 255, 62, 57, 30, 255, 61, 60, 35, 255, 67, 67, 37, 255, 70, 70, 42, 255, 70, 74, 42, 255, 70, 73, 43, 255, 72, 74, 55, 255, 76, 80, 57, 255, 76, 83, 61, 255, 79, 87, 69, 255, 82, 90, 65, 255, 84, 94, 68, 255, 87, 102, 84, 255, 82, 105, 86, 255, 86, 112, 85, 255, 91, 115, 89, 255, 87, 120, 98, 255, 88, 122, 97, 255, 93, 130, 104, 255, 94, 136, 113, 255, 96, 138, 117, 255, 97, 141, 116, 255, 99, 143, 117, 255, 99, 145, 122, 255, 103, 149, 126, 255, 103, 148, 126, 255, 104, 147, 123, 255, 105, 148, 121, 255, 103, 149, 120, 255, 103, 148, 120, 255, 100, 144, 115, 255, 103, 144, 116, 255, 103, 143, 112, 255, 102, 139, 107, 255, 100, 134, 102, 255, 97, 127, 100, 255, 102, 127, 97, 255, 96, 122, 93, 255, 88, 117, 82, 255, 93, 114, 77, 255, 94, 106, 78, 255, 94, 106, 67, 255, 93, 102, 59, 255, 91, 98, 61, 255, 87, 92, 59, 255, 81, 87, 49, 255, 81, 83, 48, 255, 85, 85, 36, 255, 84, 81, 27, 255, 78, 75, 32, 255, 80, 73, 40, 255, 80, 69, 30, 255, 76, 63, 31, 255, 74, 62, 24, 255, 75, 67, 18, 255, 81, 63, 12, 255, 78, 60, 28, 255, 68, 54, 27, 255, 80, 60, 6, 255, 77, 55, 10, 255, 76, 50, 20, 255, 77, 48, 5, 255, 79, 47, 10, 255, 76, 44, 10, 255, 77, 43, 13, 255, 70, 38, 11, 255, 69, 40, 12, 255, 76, 40, 9, 255, 73, 42, 5, 255, 70, 45, 7, 255, 67, 40, 7, 255, 68, 36, 5, 255, 75, 35, 5, 255, 76, 33, 3, 255, 76, 38, 7, 255, 76, 40, 8, 255, 75, 37, 6, 255, 80, 35, 8, 255, 73, 33, 5, 255, 69, 35, 5, 255, 74, 37, 6, 255, 79, 33, 5, 255, 73, 34, 6, 255, 66, 33, 4, 255, 75, 31, 3, 255, 76, 34, 3, 255, 68, 34, 4, 255, 73, 32, 6, 255, 78, 29, 3, 255, 76, 30, 5, 255, 71, 28, 6, 255, 71, 28, 7, 255, 73, 28, 5, 255, 70, 29, 3, 255, 72, 29, 4, 255, 80, 29, 6, 255, 75, 27, 6, 255, 64, 29, 4, 255, 65, 29, 2, 255, 67, 28, 2, 255, 74, 27, 4, 255, 70, 25, 0, 255, 70, 30, 3, 255, 78, 29, 9, 255, 85, 29, 3, 255, 82, 33, 1, 255, 77, 32, 2, 255, 77, 29, 0, 255, 81, 33, 2, 255, 79, 31, 3, 255, 74, 25, 2, 255, 72, 25, 4, 255, 77, 30, 4, 255, 75, 29, 4, 255, 77, 30, 5, 255, 76, 28, 5, 255, 72, 28, 3, 255, 76, 28, 4, 255, 78, 27, 6, 255, 75, 27, 3, 255, 76, 30, 0, 255, 79, 30, 1, 255, 79, 26, 3, 255, 76, 25, 5, 255, 72, 24, 4, 255, 70, 26, 7, 255, 70, 25, 4, 255, 72, 24, 2, 255, 72, 25, 4, 255, 67, 25, 2, 255, 67, 24, 1, 255, 73, 26, 5, 255, 74, 23, 7, 255, 65, 20, 3, 255, 66, 21, 1, 255, 64, 19, 2, 255, 59, 19, 3, 255, 66, 23, 5, 255, 65, 20, 2, 255, 69, 21, 6, 255, 67, 22, 3, 255, 61, 20, 4, 255, 62, 20, 4, 255, 66, 23, 1, 255, 64, 24, 6, 255, 66, 20, 4, 255, 66, 20, 4, 255, 64, 20, 4, 255, 64, 18, 1, 255, 61, 20, 2, 255, 61, 20, 3, 255, 53, 19, 0, 255, 52, 20, 1, 255, 64, 19, 4, 255, 63, 22, 5, 255, 49, 15, 3, 255, 53, 19, 9, 255, 52, 18, 3, 255, 59, 19, 1, 255, 55, 21, 1, 255, 58, 20, 5, 255, 67, 15, 5, 255, 69, 15, 2, 255, 64, 18, 3, 255, 59, 14, 2, 255, 57, 16, 5, 255, 47, 17, 2, 255, 55, 21, 1, 255, 59, 18, 1, 255, 56, 18, 1, 255, 59, 18, 2, 255, 53, 14, 3, 255, 44, 15, 3, 255, 50, 18, 4, 255, 55, 17, 1, 255, 54, 18, 4, 255, 44, 15, 4, 255, 49, 15, 2, 255, 51, 13, 1, 255, 49, 17, 6, 255, 45, 16, 5, 255, 46, 15, 3, 255, 44, 15, 4, 255, 43, 11, 1, 255, 49, 14, 3, 255, 48, 14, 3, 255, 47, 12, 5, 255, 52, 14, 6, 255, 54, 14, 5, 255, 42, 10, 3, 255, 44, 12, 3, 255, 50, 14, 4, 255, 39, 15, 2, 255, 52, 13, 2, 255, 45, 14, 3, 255, 48, 16, 3, 255, 59, 18, 6, 255, 50, 15, 1, 255, 57, 17, 5, 255, 56, 14, 3, 255, 56, 16, 3, 255, 59, 14, 4, 255, 58, 13, 3, 255, 65, 20, 5, 255, 67, 19, 3, 255, 62, 17, 2, 255, 65, 21, 7, 255, 56, 13, 4, 255, 56, 12, 6, 255, 57, 15, 2, 255, 52, 17, 2, 255, 53, 11, 2, 255, 55, 14, 4, 255, 61, 18, 2, 255, 71, 15, 1, 255, 74, 16, 3, 255, 68, 13, 1, 255, 64, 15, 2, 255, 60, 14, 1, 255, 60, 17, 3, 255, 52, 12, 0, 255, 49, 12, 3, 255, 50, 13, 3, 255, 47, 13, 1, 255, 49, 17, 5, 255, 53, 14, 2, 255, 61, 13, 4, 255, 61, 11, 2, 255, 64, 15, 1, 255, 64, 14, 0, 255, 50, 12, 3, 255, 37, 7, 4, 255, 35, 7, 2, 255, 38, 14, 2, 255, 39, 15, 4, 255, 32, 9, 2, 255, 32, 10, 3, 255, 31, 9, 1, 255, 32, 8, 2, 255, 33, 7, 4, 255, 29, 10, 5, 255, 30, 9, 2, 255, 32, 10, 0, 255, 54, 15, 4, 255, 56, 11, 0, 255, 56, 11, 2, 255, 45, 8, 4, 255, 42, 9, 7, 255, 44, 12, 6, 255, 36, 12, 1, 255, 47, 12, 4, 255, 51, 14, 5, 255, 41, 11, 2, 255, 39, 10, 5, 255, 45, 12, 5, 255, 48, 8, 1, 255, 7, 2, 1, 255, 7, 2, 1, 255, 8, 3, 3, 255, 6, 0, 0, 255, 11, 3, 2, 255, 12, 4, 2, 255, 8, 2, 1, 255, 8, 1, 2, 255, 10, 1, 2, 255, 8, 1, 2, 255, 7, 3, 1, 255, 9, 4, 1, 255, 11, 3, 1, 255, 9, 3, 0, 255, 11, 4, 1, 255, 12, 5, 2, 255, 8, 2, 0, 255, 9, 3, 1, 255, 10, 2, 0, 255, 13, 5, 3, 255, 13, 3, 1, 255, 12, 1, 0, 255, 13, 3, 1, 255, 12, 3, 1, 255, 12, 3, 2, 255, 14, 5, 4, 255, 15, 3, 3, 255, 13, 3, 2, 255, 15, 5, 4, 255, 16, 5, 1, 255, 14, 6, 2, 255, 13, 6, 2, 255, 17, 6, 2, 255, 15, 6, 1, 255, 16, 7, 1, 255, 16, 5, 0, 255, 18, 8, 4, 255, 15, 7, 2, 255, 15, 8, 3, 255, 16, 9, 3, 255, 18, 10, 4, 255, 20, 9, 4, 255, 21, 9, 4, 255, 18, 8, 3, 255, 19, 11, 4, 255, 22, 10, 1, 255, 23, 9, 3, 255, 25, 8, 3, 255, 23, 7, 1, 255, 23, 10, 2, 255, 17, 11, 1, 255, 20, 11, 0, 255, 24, 10, 2, 255, 29, 14, 6, 255, 25, 13, 2, 255, 24, 13, 1, 255, 26, 15, 3, 255, 32, 12, 5, 255, 27, 16, 5, 255, 23, 15, 1, 255, 30, 12, 0, 255, 32, 13, 1, 255, 31, 18, 4, 255, 35, 15, 3, 255, 27, 12, 2, 255, 29, 13, 3, 255, 29, 14, 4, 255, 28, 13, 3, 255, 30, 15, 3, 255, 29, 14, 4, 255, 30, 17, 6, 255, 29, 17, 2, 255, 32, 17, 3, 255, 32, 14, 4, 255, 35, 17, 5, 255, 35, 16, 2, 255, 37, 19, 4, 255, 33, 22, 3, 255, 36, 20, 4, 255, 38, 16, 1, 255, 39, 19, 4, 255, 37, 19, 4, 255, 36, 22, 4, 255, 43, 20, 3, 255, 44, 21, 6, 255, 42, 24, 8, 255, 37, 15, 2, 255, 43, 19, 5, 255, 45, 23, 4, 255, 40, 21, 3, 255, 38, 22, 2, 255, 51, 23, 5, 255, 58, 20, 5, 255, 45, 21, 3, 255, 37, 24, 3, 255, 48, 23, 2, 255, 51, 25, 4, 255, 51, 24, 6, 255, 55, 20, 4, 255, 55, 21, 5, 255, 51, 18, 1, 255, 47, 20, 3, 255, 45, 23, 7, 255, 47, 25, 7, 255, 48, 23, 3, 255, 50, 20, 1, 255, 49, 22, 4, 255, 46, 21, 4, 255, 49, 28, 7, 255, 54, 24, 3, 255, 49, 22, 1, 255, 44, 26, 2, 255, 41, 23, 2, 255, 51, 26, 6, 255, 48, 25, 4, 255, 44, 24, 5, 255, 45, 27, 5, 255, 45, 26, 1, 255, 49, 27, 2, 255, 53, 29, 5, 255, 49, 26, 5, 255, 48, 28, 3, 255, 54, 27, 3, 255, 54, 26, 6, 255, 51, 28, 4, 255, 52, 28, 3, 255, 56, 27, 7, 255, 54, 27, 6, 255, 56, 28, 8, 255, 56, 27, 6, 255, 52, 30, 8, 255, 49, 31, 1, 255, 60, 32, 8, 255, 60, 28, 9, 255, 66, 33, 7, 255, 66, 40, 3, 255, 54, 34, 5, 255, 62, 39, 11, 255, 57, 35, 18, 255, 59, 43, 18, 255, 59, 48, 14, 255, 66, 51, 16, 255, 71, 52, 23, 255, 70, 55, 27, 255, 69, 56, 36, 255, 64, 62, 33, 255, 66, 68, 38, 255, 68, 66, 42, 255, 72, 74, 43, 255, 71, 73, 54, 255, 75, 77, 62, 255, 79, 82, 62, 255, 79, 84, 64, 255, 83, 89, 72, 255, 87, 95, 69, 255, 90, 100, 76, 255, 88, 104, 84, 255, 84, 106, 87, 255, 87, 115, 92, 255, 90, 119, 96, 255, 89, 121, 100, 255, 89, 128, 101, 255, 93, 136, 107, 255, 94, 137, 116, 255, 95, 141, 123, 255, 99, 145, 123, 255, 102, 147, 123, 255, 100, 147, 125, 255, 100, 149, 127, 255, 104, 150, 129, 255, 104, 151, 126, 255, 103, 149, 121, 255, 103, 149, 121, 255, 105, 148, 120, 255, 99, 146, 115, 255, 99, 145, 113, 255, 102, 141, 108, 255, 102, 134, 103, 255, 99, 132, 100, 255, 101, 129, 96, 255, 99, 126, 86, 255, 94, 123, 83, 255, 92, 118, 76, 255, 95, 110, 78, 255, 93, 102, 77, 255, 94, 103, 74, 255, 90, 99, 57, 255, 87, 93, 49, 255, 87, 89, 59, 255, 85, 85, 52, 255, 83, 80, 49, 255, 83, 79, 41, 255, 82, 78, 43, 255, 81, 76, 24, 255, 75, 73, 23, 255, 71, 67, 29, 255, 75, 64, 24, 255, 78, 63, 21, 255, 77, 65, 18, 255, 75, 60, 16, 255, 77, 59, 23, 255, 78, 61, 8, 255, 79, 54, 14, 255, 76, 55, 7, 255, 70, 51, 7, 255, 70, 47, 12, 255, 71, 45, 12, 255, 73, 41, 14, 255, 68, 43, 20, 255, 69, 50, 11, 255, 74, 41, 4, 255, 74, 37, 10, 255, 73, 40, 7, 255, 72, 41, 6, 255, 69, 36, 5, 255, 78, 34, 6, 255, 75, 37, 5, 255, 77, 37, 8, 255, 72, 33, 5, 255, 71, 37, 3, 255, 68, 33, 4, 255, 73, 32, 8, 255, 72, 34, 4, 255, 70, 38, 2, 255, 79, 37, 8, 255, 76, 31, 5, 255, 71, 35, 3, 255, 73, 36, 6, 255, 75, 30, 5, 255, 75, 31, 4, 255, 70, 34, 7, 255, 71, 32, 3, 255, 78, 32, 4, 255, 78, 30, 5, 255, 71, 26, 3, 255, 70, 33, 9, 255, 68, 32, 1, 255, 71, 25, 1, 255, 70, 34, 6, 255, 71, 27, 2, 255, 70, 25, 3, 255, 70, 29, 5, 255, 71, 27, 3, 255, 68, 29, 2, 255, 68, 25, 3, 255, 73, 27, 6, 255, 75, 27, 3, 255, 82, 28, 2, 255, 88, 30, 3, 255, 83, 27, 0, 255, 81, 28, 2, 255, 79, 31, 2, 255, 78, 31, 2, 255, 78, 32, 2, 255, 73, 29, 2, 255, 78, 29, 6, 255, 77, 23, 2, 255, 81, 30, 7, 255, 78, 30, 4, 255, 76, 28, 2, 255, 74, 29, 4, 255, 73, 28, 5, 255, 78, 25, 4, 255, 74, 26, 4, 255, 70, 28, 3, 255, 78, 28, 3, 255, 78, 25, 2, 255, 74, 28, 4, 255, 72, 27, 2, 255, 65, 23, 5, 255, 65, 24, 5, 255, 68, 22, 2, 255, 67, 26, 5, 255, 65, 24, 1, 255, 68, 25, 2, 255, 66, 21, 5, 255, 75, 22, 7, 255, 68, 20, 3, 255, 65, 24, 5, 255, 64, 22, 6, 255, 65, 23, 5, 255, 67, 23, 5, 255, 63, 20, 4, 255, 67, 21, 9, 255, 62, 21, 3, 255, 64, 21, 6, 255, 62, 19, 7, 255, 69, 19, 4, 255, 63, 22, 3, 255, 59, 20, 2, 255, 65, 19, 2, 255, 68, 21, 6, 255, 57, 18, 4, 255, 55, 19, 1, 255, 60, 23, 4, 255, 54, 22, 3, 255, 51, 18, 3, 255, 55, 16, 3, 255, 60, 21, 8, 255, 57, 20, 6, 255, 55, 16, 4, 255, 54, 20, 4, 255, 55, 22, 3, 255, 55, 20, 2, 255, 52, 18, 5, 255, 60, 22, 7, 255, 66, 22, 2, 255, 59, 17, 3, 255, 52, 15, 6, 255, 57, 16, 6, 255, 54, 19, 2, 255, 50, 17, 3, 255, 51, 15, 2, 255, 52, 20, 3, 255, 52, 17, 6, 255, 48, 15, 9, 255, 55, 19, 5, 255, 59, 24, 2, 255, 54, 18, 3, 255, 42, 15, 3, 255, 51, 14, 6, 255, 56, 14, 5, 255, 47, 11, 0, 255, 41, 14, 3, 255, 40, 13, 2, 255, 45, 14, 3, 255, 43, 12, 2, 255, 43, 12, 2, 255, 44, 13, 1, 255, 41, 14, 1, 255, 45, 13, 3, 255, 58, 17, 6, 255, 53, 16, 3, 255, 46, 14, 5, 255, 41, 11, 4, 255, 47, 13, 6, 255, 49, 15, 5, 255, 37, 12, 1, 255, 47, 15, 7, 255, 45, 12, 2, 255, 45, 13, 4, 255, 45, 15, 4, 255, 50, 17, 0, 255, 53, 15, 4, 255, 49, 15, 3, 255, 52, 16, 0, 255, 55, 11, 0, 255, 74, 22, 6, 255, 73, 22, 3, 255, 65, 17, 1, 255, 61, 17, 2, 255, 58, 15, 2, 255, 59, 16, 5, 255, 56, 13, 0, 255, 52, 14, 1, 255, 55, 14, 5, 255, 59, 13, 4, 255, 56, 15, 1, 255, 64, 17, 1, 255, 70, 16, 4, 255, 64, 12, 2, 255, 59, 12, 1, 255, 53, 14, 0, 255, 51, 16, 2, 255, 50, 12, 2, 255, 53, 14, 3, 255, 52, 14, 4, 255, 44, 11, 1, 255, 37, 15, 3, 255, 46, 14, 4, 255, 55, 9, 2, 255, 58, 8, 2, 255, 56, 14, 4, 255, 59, 16, 4, 255, 55, 16, 6, 255, 39, 9, 1, 255, 36, 10, 2, 255, 34, 9, 1, 255, 40, 11, 3, 255, 44, 12, 3, 255, 39, 9, 2, 255, 31, 4, 1, 255, 32, 7, 6, 255, 25, 6, 5, 255, 26, 5, 4, 255, 25, 4, 2, 255, 29, 7, 3, 255, 46, 11, 8, 255, 49, 9, 4, 255, 51, 8, 3, 255, 36, 9, 3, 255, 27, 7, 2, 255, 39, 9, 4, 255, 44, 10, 3, 255, 46, 11, 2, 255, 42, 11, 1, 255, 44, 14, 4, 255, 42, 9, 2, 255, 47, 12, 2, 255, 48, 11, 2, 255, 7, 1, 1, 255, 5, 1, 0, 255, 7, 2, 2, 255, 9, 1, 0, 255, 13, 1, 0, 255, 13, 2, 1, 255, 6, 1, 0, 255, 6, 1, 1, 255, 8, 1, 1, 255, 8, 1, 1, 255, 10, 3, 2, 255, 11, 4, 1, 255, 9, 3, 1, 255, 12, 2, 1, 255, 12, 2, 1, 255, 10, 3, 1, 255, 9, 5, 2, 255, 10, 5, 2, 255, 13, 4, 2, 255, 15, 3, 2, 255, 15, 4, 2, 255, 14, 4, 3, 255, 13, 3, 2, 255, 15, 5, 3, 255, 16, 5, 2, 255, 15, 5, 3, 255, 13, 3, 2, 255, 13, 4, 2, 255, 17, 7, 5, 255, 15, 5, 2, 255, 14, 4, 1, 255, 15, 8, 4, 255, 16, 3, 2, 255, 18, 9, 3, 255, 17, 10, 1, 255, 16, 5, 0, 255, 17, 6, 2, 255, 16, 5, 0, 255, 17, 9, 4, 255, 15, 7, 1, 255, 17, 8, 2, 255, 19, 8, 2, 255, 19, 9, 0, 255, 19, 9, 2, 255, 20, 10, 3, 255, 22, 10, 1, 255, 21, 10, 2, 255, 24, 11, 3, 255, 25, 9, 2, 255, 23, 9, 2, 255, 23, 13, 3, 255, 26, 14, 5, 255, 21, 12, 3, 255, 27, 14, 4, 255, 32, 12, 1, 255, 28, 14, 1, 255, 29, 15, 4, 255, 33, 12, 3, 255, 33, 12, 5, 255, 30, 14, 3, 255, 30, 13, 4, 255, 30, 14, 3, 255, 28, 12, 0, 255, 32, 15, 3, 255, 33, 16, 7, 255, 35, 14, 5, 255, 37, 14, 5, 255, 31, 13, 1, 255, 34, 18, 6, 255, 32, 15, 4, 255, 33, 16, 6, 255, 28, 11, 1, 255, 34, 16, 2, 255, 33, 14, 0, 255, 34, 16, 2, 255, 37, 17, 3, 255, 38, 17, 2, 255, 32, 21, 3, 255, 30, 21, 3, 255, 31, 17, 2, 255, 40, 17, 4, 255, 42, 19, 4, 255, 38, 22, 4, 255, 47, 24, 3, 255, 39, 21, 1, 255, 37, 22, 3, 255, 45, 20, 6, 255, 46, 17, 2, 255, 44, 24, 3, 255, 38, 24, 2, 255, 40, 22, 4, 255, 37, 22, 1, 255, 38, 22, 1, 255, 47, 22, 5, 255, 52, 21, 7, 255, 53, 20, 4, 255, 61, 25, 1, 255, 56, 23, 1, 255, 53, 23, 4, 255, 50, 21, 7, 255, 43, 18, 6, 255, 38, 20, 11, 255, 44, 22, 5, 255, 56, 28, 6, 255, 50, 22, 2, 255, 52, 22, 2, 255, 53, 22, 2, 255, 52, 24, 4, 255, 45, 22, 2, 255, 47, 23, 3, 255, 59, 23, 6, 255, 52, 24, 2, 255, 55, 26, 7, 255, 59, 23, 7, 255, 51, 21, 2, 255, 45, 23, 4, 255, 50, 25, 5, 255, 51, 26, 6, 255, 51, 25, 8, 255, 49, 23, 7, 255, 50, 25, 1, 255, 51, 29, 4, 255, 50, 24, 4, 255, 56, 25, 6, 255, 55, 27, 7, 255, 53, 23, 2, 255, 55, 24, 3, 255, 53, 28, 3, 255, 55, 29, 6, 255, 54, 27, 5, 255, 52, 25, 4, 255, 59, 31, 4, 255, 57, 27, 6, 255, 59, 31, 8, 255, 54, 30, 4, 255, 60, 35, 9, 255, 63, 34, 8, 255, 63, 32, 20, 255, 57, 38, 11, 255, 54, 40, 5, 255, 63, 45, 18, 255, 64, 47, 25, 255, 65, 50, 24, 255, 63, 55, 35, 255, 66, 58, 27, 255, 65, 65, 32, 255, 67, 65, 52, 255, 71, 67, 44, 255, 76, 76, 50, 255, 71, 74, 52, 255, 74, 77, 58, 255, 81, 85, 60, 255, 81, 86, 60, 255, 85, 91, 70, 255, 87, 95, 75, 255, 88, 99, 81, 255, 86, 103, 84, 255, 86, 111, 90, 255, 88, 117, 95, 255, 90, 123, 98, 255, 92, 128, 105, 255, 89, 133, 105, 255, 93, 138, 110, 255, 95, 139, 116, 255, 94, 143, 122, 255, 99, 146, 126, 255, 104, 148, 126, 255, 103, 150, 128, 255, 101, 150, 128, 255, 103, 152, 129, 255, 103, 150, 122, 255, 105, 151, 123, 255, 103, 151, 123, 255, 104, 149, 119, 255, 99, 147, 117, 255, 96, 144, 112, 255, 100, 140, 109, 255, 101, 136, 102, 255, 100, 134, 97, 255, 102, 127, 93, 255, 98, 126, 83, 255, 91, 120, 79, 255, 93, 116, 73, 255, 93, 107, 73, 255, 91, 102, 74, 255, 90, 100, 66, 255, 88, 95, 58, 255, 84, 90, 54, 255, 86, 89, 56, 255, 88, 88, 42, 255, 84, 82, 35, 255, 77, 72, 47, 255, 76, 73, 38, 255, 81, 70, 36, 255, 76, 67, 26, 255, 70, 66, 22, 255, 80, 67, 28, 255, 76, 62, 15, 255, 81, 62, 15, 255, 81, 58, 14, 255, 75, 53, 17, 255, 78, 56, 13, 255, 71, 48, 13, 255, 70, 51, 8, 255, 67, 50, 7, 255, 72, 42, 12, 255, 72, 46, 10, 255, 67, 45, 7, 255, 69, 43, 5, 255, 79, 45, 6, 255, 74, 41, 5, 255, 69, 40, 8, 255, 72, 37, 7, 255, 77, 38, 10, 255, 72, 37, 4, 255, 75, 34, 5, 255, 71, 37, 8, 255, 72, 35, 7, 255, 74, 33, 6, 255, 75, 33, 10, 255, 74, 29, 12, 255, 74, 28, 8, 255, 71, 33, 5, 255, 65, 31, 6, 255, 73, 31, 6, 255, 75, 28, 7, 255, 70, 33, 4, 255, 70, 34, 2, 255, 76, 30, 6, 255, 74, 33, 4, 255, 71, 35, 3, 255, 72, 33, 5, 255, 72, 31, 3, 255, 75, 29, 4, 255, 75, 28, 4, 255, 72, 30, 3, 255, 72, 33, 5, 255, 74, 29, 6, 255, 68, 31, 5, 255, 67, 27, 3, 255, 69, 28, 3, 255, 75, 28, 5, 255, 71, 30, 3, 255, 72, 29, 5, 255, 70, 24, 2, 255, 76, 29, 6, 255, 78, 31, 2, 255, 78, 33, 0, 255, 77, 34, 2, 255, 76, 30, 2, 255, 79, 31, 5, 255, 73, 31, 1, 255, 72, 30, 1, 255, 76, 28, 4, 255, 78, 26, 3, 255, 86, 31, 4, 255, 77, 25, 4, 255, 81, 29, 7, 255, 74, 30, 1, 255, 75, 29, 1, 255, 73, 28, 2, 255, 71, 28, 5, 255, 74, 26, 1, 255, 71, 28, 3, 255, 66, 27, 2, 255, 78, 29, 2, 255, 85, 32, 6, 255, 87, 33, 5, 255, 84, 26, 1, 255, 66, 25, 1, 255, 67, 27, 2, 255, 67, 22, 2, 255, 67, 26, 4, 255, 72, 25, 5, 255, 69, 25, 4, 255, 61, 24, 3, 255, 68, 23, 1, 255, 67, 19, 2, 255, 65, 21, 4, 255, 72, 25, 2, 255, 71, 21, 2, 255, 69, 18, 4, 255, 70, 19, 0, 255, 67, 23, 4, 255, 64, 22, 6, 255, 66, 20, 3, 255, 62, 22, 2, 255, 58, 20, 2, 255, 56, 20, 5, 255, 58, 20, 8, 255, 56, 19, 6, 255, 57, 23, 5, 255, 58, 24, 1, 255, 53, 22, 1, 255, 54, 20, 1, 255, 69, 24, 5, 255, 75, 25, 4, 255, 63, 20, 0, 255, 53, 21, 5, 255, 51, 22, 8, 255, 51, 17, 1, 255, 57, 20, 2, 255, 59, 20, 1, 255, 61, 19, 3, 255, 59, 18, 2, 255, 56, 19, 1, 255, 57, 21, 4, 255, 55, 22, 4, 255, 48, 18, 5, 255, 53, 20, 5, 255, 54, 20, 1, 255, 51, 15, 4, 255, 55, 17, 5, 255, 44, 16, 0, 255, 41, 18, 5, 255, 54, 16, 4, 255, 72, 23, 3, 255, 79, 22, 3, 255, 63, 18, 5, 255, 45, 15, 4, 255, 48, 14, 2, 255, 50, 14, 2, 255, 49, 12, 1, 255, 45, 13, 1, 255, 40, 15, 1, 255, 45, 17, 5, 255, 48, 16, 4, 255, 47, 14, 4, 255, 40, 14, 4, 255, 45, 18, 4, 255, 61, 19, 5, 255, 73, 21, 7, 255, 67, 17, 3, 255, 67, 16, 2, 255, 62, 17, 4, 255, 53, 17, 3, 255, 58, 18, 5, 255, 41, 15, 0, 255, 45, 13, 2, 255, 52, 14, 1, 255, 44, 13, 7, 255, 49, 15, 3, 255, 52, 14, 0, 255, 50, 15, 4, 255, 48, 13, 2, 255, 58, 15, 5, 255, 56, 14, 3, 255, 62, 15, 0, 255, 62, 17, 0, 255, 67, 18, 4, 255, 61, 14, 2, 255, 61, 14, 0, 255, 59, 14, 1, 255, 55, 14, 1, 255, 54, 12, 2, 255, 58, 13, 5, 255, 55, 12, 3, 255, 52, 13, 3, 255, 52, 15, 4, 255, 55, 11, 1, 255, 60, 12, 1, 255, 59, 15, 4, 255, 53, 14, 6, 255, 55, 13, 3, 255, 58, 15, 3, 255, 46, 16, 2, 255, 51, 13, 1, 255, 50, 9, 3, 255, 39, 11, 3, 255, 42, 13, 4, 255, 45, 12, 2, 255, 39, 8, 0, 255, 41, 11, 1, 255, 48, 12, 2, 255, 50, 13, 4, 255, 41, 11, 2, 255, 40, 12, 5, 255, 39, 8, 3, 255, 42, 10, 2, 255, 44, 12, 0, 255, 45, 15, 4, 255, 34, 11, 5, 255, 25, 7, 3, 255, 26, 7, 4, 255, 26, 10, 3, 255, 24, 7, 3, 255, 25, 8, 4, 255, 25, 7, 4, 255, 29, 8, 4, 255, 32, 7, 1, 255, 29, 7, 2, 255, 29, 9, 3, 255, 34, 10, 3, 255, 40, 8, 0, 255, 48, 11, 3, 255, 50, 13, 4, 255, 46, 13, 3, 255, 43, 12, 2, 255, 44, 11, 3, 255, 45, 12, 3, 255, 7, 1, 1, 255, 5, 0, 0, 255, 7, 2, 1, 255, 10, 2, 1, 255, 10, 0, 0, 255, 10, 0, 0, 255, 10, 0, 1, 255, 8, 2, 2, 255, 7, 3, 2, 255, 10, 2, 2, 255, 14, 2, 2, 255, 11, 2, 1, 255, 7, 2, 0, 255, 12, 2, 1, 255, 13, 2, 2, 255, 13, 2, 1, 255, 11, 3, 1, 255, 10, 2, 0, 255, 12, 1, 1, 255, 13, 2, 0, 255, 14, 3, 1, 255, 14, 4, 3, 255, 14, 4, 3, 255, 14, 4, 2, 255, 14, 3, 1, 255, 13, 2, 1, 255, 11, 2, 1, 255, 12, 5, 2, 255, 17, 9, 6, 255, 13, 3, 2, 255, 10, 1, 0, 255, 14, 8, 4, 255, 18, 5, 3, 255, 15, 5, 0, 255, 18, 9, 2, 255, 19, 8, 4, 255, 17, 6, 4, 255, 16, 5, 4, 255, 21, 10, 5, 255, 18, 7, 0, 255, 20, 10, 1, 255, 20, 10, 0, 255, 20, 11, 1, 255, 23, 11, 3, 255, 25, 11, 3, 255, 28, 11, 4, 255, 23, 11, 3, 255, 20, 11, 2, 255, 23, 10, 2, 255, 21, 6, 0, 255, 26, 11, 2, 255, 22, 12, 3, 255, 18, 10, 2, 255, 25, 12, 3, 255, 31, 13, 1, 255, 29, 12, 1, 255, 30, 13, 1, 255, 34, 14, 3, 255, 31, 13, 3, 255, 28, 10, 1, 255, 25, 13, 2, 255, 27, 16, 3, 255, 29, 15, 4, 255, 28, 15, 3, 255, 32, 13, 5, 255, 33, 12, 4, 255, 36, 16, 5, 255, 35, 18, 3, 255, 34, 17, 1, 255, 34, 14, 0, 255, 35, 15, 6, 255, 31, 13, 4, 255, 33, 14, 3, 255, 33, 14, 2, 255, 37, 18, 7, 255, 38, 19, 5, 255, 39, 17, 3, 255, 35, 15, 1, 255, 34, 17, 3, 255, 37, 18, 5, 255, 43, 18, 7, 255, 44, 18, 6, 255, 39, 19, 4, 255, 40, 21, 1, 255, 39, 21, 0, 255, 43, 22, 4, 255, 47, 21, 4, 255, 48, 23, 3, 255, 46, 28, 3, 255, 42, 26, 3, 255, 43, 18, 1, 255, 49, 21, 1, 255, 51, 25, 4, 255, 53, 26, 7, 255, 49, 23, 4, 255, 39, 25, 0, 255, 49, 24, 0, 255, 46, 22, 0, 255, 41, 26, 2, 255, 44, 23, 4, 255, 44, 20, 6, 255, 47, 20, 10, 255, 50, 21, 3, 255, 47, 23, 0, 255, 50, 26, 3, 255, 49, 25, 2, 255, 50, 25, 2, 255, 53, 25, 1, 255, 50, 25, 3, 255, 48, 22, 7, 255, 55, 23, 6, 255, 49, 24, 4, 255, 43, 22, 3, 255, 51, 23, 6, 255, 47, 24, 2, 255, 42, 25, 4, 255, 44, 26, 4, 255, 43, 24, 1, 255, 44, 22, 1, 255, 50, 25, 5, 255, 54, 29, 6, 255, 50, 26, 3, 255, 51, 22, 2, 255, 59, 26, 10, 255, 42, 20, 3, 255, 54, 29, 4, 255, 62, 28, 1, 255, 57, 28, 7, 255, 54, 28, 2, 255, 50, 29, 7, 255, 54, 30, 5, 255, 64, 32, 4, 255, 64, 30, 7, 255, 54, 29, 7, 255, 54, 31, 7, 255, 56, 30, 13, 255, 65, 38, 8, 255, 70, 36, 7, 255, 65, 37, 20, 255, 56, 41, 24, 255, 62, 52, 17, 255, 68, 45, 26, 255, 68, 51, 24, 255, 66, 57, 29, 255, 68, 59, 30, 255, 72, 66, 29, 255, 75, 66, 39, 255, 72, 69, 39, 255, 76, 76, 47, 255, 78, 78, 57, 255, 76, 78, 61, 255, 79, 84, 63, 255, 82, 91, 65, 255, 85, 92, 72, 255, 85, 94, 80, 255, 85, 101, 84, 255, 86, 109, 90, 255, 85, 114, 92, 255, 87, 118, 95, 255, 94, 126, 102, 255, 92, 132, 108, 255, 91, 136, 108, 255, 96, 140, 112, 255, 99, 141, 118, 255, 97, 145, 123, 255, 102, 148, 127, 255, 105, 148, 128, 255, 107, 154, 132, 255, 102, 152, 130, 255, 104, 152, 130, 255, 105, 151, 126, 255, 107, 152, 126, 255, 104, 150, 125, 255, 103, 151, 123, 255, 104, 148, 121, 255, 103, 143, 117, 255, 100, 139, 112, 255, 100, 136, 105, 255, 99, 130, 96, 255, 102, 124, 91, 255, 97, 120, 92, 255, 90, 114, 72, 255, 93, 111, 75, 255, 94, 107, 72, 255, 89, 101, 64, 255, 85, 94, 61, 255, 85, 92, 52, 255, 82, 89, 46, 255, 80, 83, 54, 255, 81, 82, 46, 255, 82, 83, 37, 255, 79, 78, 37, 255, 87, 73, 26, 255, 84, 65, 33, 255, 75, 64, 31, 255, 73, 66, 20, 255, 79, 63, 22, 255, 81, 57, 22, 255, 79, 58, 16, 255, 82, 56, 11, 255, 77, 51, 14, 255, 74, 53, 15, 255, 75, 50, 10, 255, 76, 51, 10, 255, 66, 47, 8, 255, 79, 44, 6, 255, 74, 43, 9, 255, 70, 46, 9, 255, 75, 40, 6, 255, 85, 37, 6, 255, 78, 43, 4, 255, 72, 39, 1, 255, 72, 40, 0, 255, 78, 39, 1, 255, 78, 34, 7, 255, 70, 35, 2, 255, 76, 37, 4, 255, 72, 35, 8, 255, 76, 36, 2, 255, 72, 33, 3, 255, 65, 29, 3, 255, 68, 35, 5, 255, 73, 38, 4, 255, 73, 32, 4, 255, 72, 31, 3, 255, 75, 30, 8, 255, 70, 33, 7, 255, 69, 34, 4, 255, 73, 29, 5, 255, 74, 34, 4, 255, 71, 36, 0, 255, 74, 34, 5, 255, 72, 31, 6, 255, 73, 28, 4, 255, 76, 31, 5, 255, 71, 27, 2, 255, 72, 29, 10, 255, 70, 30, 8, 255, 63, 23, 1, 255, 67, 27, 4, 255, 68, 28, 4, 255, 74, 24, 3, 255, 70, 30, 2, 255, 68, 31, 5, 255, 70, 28, 2, 255, 75, 29, 0, 255, 79, 31, 2, 255, 81, 30, 6, 255, 78, 29, 3, 255, 75, 29, 3, 255, 73, 26, 3, 255, 78, 31, 0, 255, 73, 32, 2, 255, 74, 26, 5, 255, 82, 27, 8, 255, 76, 28, 1, 255, 72, 27, 0, 255, 74, 27, 1, 255, 71, 27, 0, 255, 75, 28, 3, 255, 72, 27, 2, 255, 72, 29, 4, 255, 74, 28, 4, 255, 71, 31, 3, 255, 72, 29, 1, 255, 83, 29, 5, 255, 91, 31, 4, 255, 91, 31, 3, 255, 84, 25, 0, 255, 69, 23, 1, 255, 70, 24, 0, 255, 72, 25, 2, 255, 64, 22, 0, 255, 69, 23, 1, 255, 69, 25, 2, 255, 67, 22, 4, 255, 68, 23, 3, 255, 63, 24, 3, 255, 62, 22, 3, 255, 66, 20, 2, 255, 68, 22, 4, 255, 58, 19, 1, 255, 64, 24, 3, 255, 59, 26, 3, 255, 58, 19, 2, 255, 72, 25, 7, 255, 73, 28, 6, 255, 64, 20, 2, 255, 62, 23, 0, 255, 67, 21, 3, 255, 57, 20, 5, 255, 49, 19, 3, 255, 58, 20, 4, 255, 51, 17, 9, 255, 51, 17, 7, 255, 68, 22, 3, 255, 83, 27, 3, 255, 81, 29, 3, 255, 73, 25, 4, 255, 71, 22, 7, 255, 70, 22, 6, 255, 57, 20, 2, 255, 55, 17, 0, 255, 64, 20, 4, 255, 68, 21, 2, 255, 63, 20, 1, 255, 56, 21, 6, 255, 56, 22, 3, 255, 55, 17, 2, 255, 52, 18, 3, 255, 54, 18, 2, 255, 56, 17, 3, 255, 53, 18, 3, 255, 48, 17, 1, 255, 51, 18, 2, 255, 66, 21, 3, 255, 66, 22, 3, 255, 75, 22, 1, 255, 67, 21, 2, 255, 48, 16, 2, 255, 51, 15, 5, 255, 47, 14, 2, 255, 48, 15, 2, 255, 51, 20, 7, 255, 43, 14, 2, 255, 48, 15, 6, 255, 49, 18, 4, 255, 43, 13, 1, 255, 36, 15, 6, 255, 43, 16, 4, 255, 67, 17, 2, 255, 79, 19, 3, 255, 78, 15, 1, 255, 80, 18, 3, 255, 74, 16, 3, 255, 71, 12, 1, 255, 74, 21, 6, 255, 68, 23, 7, 255, 61, 16, 3, 255, 52, 14, 6, 255, 42, 12, 5, 255, 46, 13, 2, 255, 53, 15, 5, 255, 49, 15, 2, 255, 55, 15, 1, 255, 60, 14, 7, 255, 53, 14, 3, 255, 59, 13, 3, 255, 53, 13, 1, 255, 52, 15, 3, 255, 50, 15, 1, 255, 54, 13, 0, 255, 56, 14, 1, 255, 55, 14, 2, 255, 53, 14, 3, 255, 52, 10, 3, 255, 53, 11, 2, 255, 52, 13, 4, 255, 44, 12, 3, 255, 45, 12, 3, 255, 52, 12, 1, 255, 50, 11, 2, 255, 47, 11, 4, 255, 51, 13, 4, 255, 56, 14, 3, 255, 43, 13, 2, 255, 42, 9, 0, 255, 47, 10, 2, 255, 41, 11, 3, 255, 40, 8, 3, 255, 41, 10, 2, 255, 31, 11, 1, 255, 35, 10, 1, 255, 40, 9, 1, 255, 37, 8, 0, 255, 40, 9, 5, 255, 37, 9, 5, 255, 36, 8, 4, 255, 43, 10, 5, 255, 39, 8, 1, 255, 36, 9, 1, 255, 35, 12, 5, 255, 27, 8, 1, 255, 29, 10, 2, 255, 29, 10, 3, 255, 25, 8, 2, 255, 20, 6, 1, 255, 22, 7, 2, 255, 26, 8, 3, 255, 30, 8, 4, 255, 32, 8, 3, 255, 33, 8, 3, 255, 38, 9, 3, 255, 46, 10, 3, 255, 49, 8, 2, 255, 51, 10, 2, 255, 49, 12, 3, 255, 41, 11, 3, 255, 40, 8, 1, 255, 40, 6, 1, 255, 8, 0, 1, 255, 6, 1, 0, 255, 7, 2, 2, 255, 10, 2, 1, 255, 12, 2, 0, 255, 12, 1, 0, 255, 11, 1, 1, 255, 11, 2, 2, 255, 10, 2, 0, 255, 11, 2, 0, 255, 12, 1, 1, 255, 10, 0, 0, 255, 10, 1, 0, 255, 13, 4, 2, 255, 13, 3, 2, 255, 13, 4, 2, 255, 12, 5, 3, 255, 10, 3, 0, 255, 12, 1, 1, 255, 13, 3, 1, 255, 12, 3, 1, 255, 12, 3, 1, 255, 13, 3, 2, 255, 12, 3, 1, 255, 11, 2, 0, 255, 13, 4, 1, 255, 13, 4, 2, 255, 12, 4, 1, 255, 15, 6, 3, 255, 14, 4, 2, 255, 13, 3, 2, 255, 12, 6, 3, 255, 15, 4, 2, 255, 16, 6, 1, 255, 14, 5, 0, 255, 15, 5, 3, 255, 17, 6, 5, 255, 14, 3, 1, 255, 16, 6, 1, 255, 18, 8, 1, 255, 20, 10, 4, 255, 19, 9, 2, 255, 18, 8, 0, 255, 20, 8, 1, 255, 22, 10, 3, 255, 23, 10, 2, 255, 21, 8, 0, 255, 20, 5, 0, 255, 26, 10, 4, 255, 26, 9, 1, 255, 24, 8, 2, 255, 21, 8, 2, 255, 23, 11, 3, 255, 26, 11, 2, 255, 30, 14, 4, 255, 33, 16, 5, 255, 31, 14, 2, 255, 28, 13, 3, 255, 30, 11, 2, 255, 38, 12, 5, 255, 31, 13, 3, 255, 32, 13, 3, 255, 33, 14, 5, 255, 26, 15, 4, 255, 30, 12, 2, 255, 30, 13, 2, 255, 29, 17, 4, 255, 30, 18, 3, 255, 34, 19, 4, 255, 36, 19, 3, 255, 34, 15, 4, 255, 32, 13, 4, 255, 37, 17, 5, 255, 33, 14, 2, 255, 32, 14, 2, 255, 33, 15, 2, 255, 37, 19, 4, 255, 34, 19, 2, 255, 37, 20, 5, 255, 34, 16, 2, 255, 36, 17, 3, 255, 40, 21, 5, 255, 37, 18, 1, 255, 37, 19, 2, 255, 42, 18, 3, 255, 45, 18, 5, 255, 40, 20, 3, 255, 37, 22, 1, 255, 40, 20, 0, 255, 46, 22, 1, 255, 47, 25, 5, 255, 50, 25, 5, 255, 45, 21, 0, 255, 45, 22, 1, 255, 47, 24, 3, 255, 47, 22, 3, 255, 49, 21, 7, 255, 47, 23, 4, 255, 39, 20, 0, 255, 42, 25, 5, 255, 42, 22, 2, 255, 46, 24, 2, 255, 45, 23, 2, 255, 42, 22, 2, 255, 41, 21, 3, 255, 39, 22, 4, 255, 40, 22, 3, 255, 49, 27, 4, 255, 49, 25, 4, 255, 41, 19, 2, 255, 46, 25, 4, 255, 40, 28, 4, 255, 40, 28, 5, 255, 47, 25, 4, 255, 52, 25, 2, 255, 55, 25, 5, 255, 51, 23, 3, 255, 49, 26, 5, 255, 47, 25, 4, 255, 45, 25, 2, 255, 43, 28, 2, 255, 47, 27, 4, 255, 58, 27, 8, 255, 55, 28, 5, 255, 48, 25, 3, 255, 54, 29, 9, 255, 52, 26, 6, 255, 53, 28, 3, 255, 55, 29, 3, 255, 47, 26, 5, 255, 52, 28, 8, 255, 61, 33, 4, 255, 57, 29, 3, 255, 56, 27, 11, 255, 60, 27, 8, 255, 60, 36, 3, 255, 56, 35, 3, 255, 63, 34, 4, 255, 69, 41, 14, 255, 62, 46, 13, 255, 58, 47, 17, 255, 63, 49, 16, 255, 65, 53, 19, 255, 67, 57, 26, 255, 65, 59, 32, 255, 67, 65, 39, 255, 66, 65, 48, 255, 69, 69, 46, 255, 76, 74, 52, 255, 82, 78, 61, 255, 80, 81, 63, 255, 77, 84, 64, 255, 80, 90, 73, 255, 83, 94, 77, 255, 85, 98, 77, 255, 86, 106, 83, 255, 87, 114, 91, 255, 86, 118, 95, 255, 89, 121, 99, 255, 96, 128, 106, 255, 95, 134, 111, 255, 95, 140, 115, 255, 103, 144, 121, 255, 106, 147, 125, 255, 101, 149, 127, 255, 104, 151, 130, 255, 106, 151, 130, 255, 108, 155, 135, 255, 104, 153, 133, 255, 106, 154, 134, 255, 109, 154, 132, 255, 106, 150, 128, 255, 104, 150, 129, 255, 101, 150, 123, 255, 105, 145, 119, 255, 104, 143, 113, 255, 99, 137, 105, 255, 96, 133, 99, 255, 98, 128, 97, 255, 99, 119, 89, 255, 99, 116, 90, 255, 98, 115, 80, 255, 91, 105, 73, 255, 91, 103, 66, 255, 86, 97, 63, 255, 89, 94, 65, 255, 91, 90, 56, 255, 87, 88, 43, 255, 81, 78, 52, 255, 76, 73, 54, 255, 75, 75, 40, 255, 72, 71, 36, 255, 78, 68, 29, 255, 78, 63, 23, 255, 76, 63, 20, 255, 74, 64, 19, 255, 75, 57, 16, 255, 77, 58, 17, 255, 72, 58, 17, 255, 79, 54, 18, 255, 77, 52, 9, 255, 70, 52, 11, 255, 75, 52, 2, 255, 77, 48, 10, 255, 67, 45, 12, 255, 70, 44, 4, 255, 64, 42, 8, 255, 74, 46, 4, 255, 71, 43, 11, 255, 63, 40, 2, 255, 76, 42, 4, 255, 79, 37, 5, 255, 75, 39, 2, 255, 67, 38, 3, 255, 80, 32, 3, 255, 76, 34, 2, 255, 73, 35, 6, 255, 71, 36, 8, 255, 71, 33, 6, 255, 80, 35, 4, 255, 77, 32, 6, 255, 74, 35, 9, 255, 73, 36, 2, 255, 76, 34, 0, 255, 78, 35, 1, 255, 71, 32, 2, 255, 72, 31, 3, 255, 76, 32, 7, 255, 68, 32, 6, 255, 73, 33, 5, 255, 72, 30, 3, 255, 69, 30, 1, 255, 69, 32, 6, 255, 67, 27, 2, 255, 73, 30, 4, 255, 71, 27, 6, 255, 71, 27, 5, 255, 66, 25, 2, 255, 65, 29, 5, 255, 67, 32, 6, 255, 65, 30, 4, 255, 74, 29, 6, 255, 72, 25, 4, 255, 71, 24, 7, 255, 74, 25, 3, 255, 77, 27, 1, 255, 82, 28, 4, 255, 81, 27, 6, 255, 77, 28, 5, 255, 77, 28, 3, 255, 78, 26, 1, 255, 80, 29, 4, 255, 75, 26, 3, 255, 75, 25, 4, 255, 77, 29, 5, 255, 70, 27, 2, 255, 75, 30, 3, 255, 77, 29, 3, 255, 73, 27, 3, 255, 78, 28, 5, 255, 75, 30, 5, 255, 74, 32, 4, 255, 77, 27, 5, 255, 77, 28, 4, 255, 74, 29, 3, 255, 72, 25, 2, 255, 77, 27, 0, 255, 76, 29, 0, 255, 69, 24, 3, 255, 70, 23, 1, 255, 73, 25, 4, 255, 72, 25, 3, 255, 66, 24, 2, 255, 62, 22, 1, 255, 65, 24, 2, 255, 66, 21, 4, 255, 67, 21, 1, 255, 67, 24, 2, 255, 66, 26, 4, 255, 67, 25, 5, 255, 71, 24, 4, 255, 68, 22, 1, 255, 52, 22, 2, 255, 57, 22, 9, 255, 65, 23, 6, 255, 59, 27, 6, 255, 81, 21, 11, 255, 82, 21, 7, 255, 65, 20, 5, 255, 61, 17, 4, 255, 63, 18, 0, 255, 62, 16, 0, 255, 58, 19, 9, 255, 57, 21, 6, 255, 59, 19, 6, 255, 56, 14, 5, 255, 57, 19, 4, 255, 75, 28, 7, 255, 92, 28, 4, 255, 95, 25, 3, 255, 83, 25, 6, 255, 62, 20, 1, 255, 52, 15, 3, 255, 56, 17, 7, 255, 67, 22, 6, 255, 66, 21, 2, 255, 55, 20, 3, 255, 56, 19, 2, 255, 61, 18, 5, 255, 50, 13, 1, 255, 57, 15, 5, 255, 59, 15, 4, 255, 51, 13, 1, 255, 69, 22, 5, 255, 76, 18, 3, 255, 81, 16, 8, 255, 79, 21, 12, 255, 75, 24, 1, 255, 83, 25, 2, 255, 59, 18, 5, 255, 41, 16, 4, 255, 50, 13, 4, 255, 51, 15, 6, 255, 39, 13, 2, 255, 44, 16, 6, 255, 41, 9, 2, 255, 47, 18, 5, 255, 39, 16, 3, 255, 40, 14, 4, 255, 37, 13, 1, 255, 50, 14, 0, 255, 77, 18, 3, 255, 80, 21, 2, 255, 73, 19, 1, 255, 76, 22, 4, 255, 77, 17, 2, 255, 74, 21, 2, 255, 75, 21, 6, 255, 72, 22, 6, 255, 54, 13, 3, 255, 46, 11, 3, 255, 45, 17, 0, 255, 47, 17, 3, 255, 52, 14, 5, 255, 54, 13, 2, 255, 55, 13, 4, 255, 52, 14, 3, 255, 56, 17, 6, 255, 49, 13, 1, 255, 57, 14, 4, 255, 59, 14, 4, 255, 57, 12, 1, 255, 51, 11, 0, 255, 51, 13, 1, 255, 54, 15, 3, 255, 54, 15, 5, 255, 53, 14, 5, 255, 49, 12, 4, 255, 48, 9, 1, 255, 50, 11, 4, 255, 50, 11, 6, 255, 50, 12, 5, 255, 51, 13, 4, 255, 49, 13, 4, 255, 48, 14, 6, 255, 45, 12, 3, 255, 43, 12, 2, 255, 47, 14, 3, 255, 42, 11, 3, 255, 41, 7, 3, 255, 40, 8, 4, 255, 39, 11, 6, 255, 45, 9, 4, 255, 45, 10, 4, 255, 38, 10, 2, 255, 40, 11, 6, 255, 34, 8, 3, 255, 31, 8, 2, 255, 35, 8, 5, 255, 34, 8, 5, 255, 31, 7, 3, 255, 31, 9, 4, 255, 30, 9, 3, 255, 30, 9, 1, 255, 34, 11, 4, 255, 29, 9, 3, 255, 23, 8, 3, 255, 22, 8, 3, 255, 22, 6, 2, 255, 23, 5, 1, 255, 28, 8, 2, 255, 31, 10, 3, 255, 36, 11, 3, 255, 47, 15, 7, 255, 47, 10, 2, 255, 47, 11, 2, 255, 49, 13, 4, 255, 47, 13, 4, 255, 45, 11, 3, 255, 45, 9, 2, 255, 6, 0, 0, 255, 7, 1, 1, 255, 5, 0, 0, 255, 8, 0, 2, 255, 12, 1, 0, 255, 12, 3, 0, 255, 8, 3, 0, 255, 10, 1, 0, 255, 14, 0, 1, 255, 12, 1, 1, 255, 10, 2, 0, 255, 12, 2, 1, 255, 14, 1, 1, 255, 11, 3, 1, 255, 11, 1, 0, 255, 11, 3, 1, 255, 11, 5, 2, 255, 9, 4, 1, 255, 10, 2, 0, 255, 12, 4, 1, 255, 11, 3, 1, 255, 12, 4, 2, 255, 13, 5, 3, 255, 10, 2, 0, 255, 10, 2, 0, 255, 14, 5, 2, 255, 15, 5, 3, 255, 13, 4, 2, 255, 13, 3, 2, 255, 15, 4, 3, 255, 16, 6, 4, 255, 13, 5, 2, 255, 14, 3, 2, 255, 19, 8, 5, 255, 16, 6, 1, 255, 13, 3, 0, 255, 15, 5, 3, 255, 18, 6, 4, 255, 17, 7, 3, 255, 17, 8, 3, 255, 17, 9, 5, 255, 17, 9, 4, 255, 18, 9, 3, 255, 19, 8, 3, 255, 18, 8, 1, 255, 20, 10, 3, 255, 22, 9, 2, 255, 25, 8, 3, 255, 30, 10, 6, 255, 25, 9, 2, 255, 19, 9, 2, 255, 24, 10, 3, 255, 29, 12, 5, 255, 25, 9, 3, 255, 23, 11, 2, 255, 29, 13, 4, 255, 26, 11, 1, 255, 21, 9, 1, 255, 27, 11, 3, 255, 30, 10, 2, 255, 27, 13, 2, 255, 29, 17, 5, 255, 24, 11, 1, 255, 24, 11, 1, 255, 33, 13, 1, 255, 31, 15, 3, 255, 29, 14, 4, 255, 29, 12, 4, 255, 33, 14, 5, 255, 37, 14, 5, 255, 30, 12, 2, 255, 32, 15, 3, 255, 37, 19, 7, 255, 34, 17, 5, 255, 30, 15, 3, 255, 32, 16, 3, 255, 35, 18, 3, 255, 35, 20, 3, 255, 40, 18, 4, 255, 42, 17, 4, 255, 39, 18, 3, 255, 41, 18, 1, 255, 47, 21, 5, 255, 43, 16, 6, 255, 39, 17, 4, 255, 34, 18, 2, 255, 36, 22, 5, 255, 38, 19, 3, 255, 41, 21, 4, 255, 42, 19, 4, 255, 41, 18, 2, 255, 43, 20, 2, 255, 48, 20, 2, 255, 46, 24, 2, 255, 43, 25, 3, 255, 46, 18, 1, 255, 46, 22, 5, 255, 44, 23, 2, 255, 47, 22, 3, 255, 41, 21, 6, 255, 42, 19, 6, 255, 46, 21, 4, 255, 47, 23, 3, 255, 48, 23, 4, 255, 48, 23, 5, 255, 40, 19, 1, 255, 45, 26, 5, 255, 47, 24, 3, 255, 51, 23, 3, 255, 54, 23, 6, 255, 55, 25, 5, 255, 50, 24, 4, 255, 48, 24, 4, 255, 48, 24, 2, 255, 53, 27, 2, 255, 50, 25, 1, 255, 47, 26, 2, 255, 47, 27, 7, 255, 47, 21, 3, 255, 51, 21, 2, 255, 53, 26, 5, 255, 52, 25, 1, 255, 54, 24, 2, 255, 47, 24, 6, 255, 55, 27, 5, 255, 49, 26, 4, 255, 44, 27, 6, 255, 51, 28, 5, 255, 48, 27, 9, 255, 47, 28, 3, 255, 56, 26, 6, 255, 58, 28, 2, 255, 49, 26, 10, 255, 52, 24, 8, 255, 60, 29, 2, 255, 56, 29, 4, 255, 62, 35, 15, 255, 63, 40, 9, 255, 61, 46, 9, 255, 65, 47, 18, 255, 65, 41, 17, 255, 61, 46, 23, 255, 60, 50, 26, 255, 61, 56, 27, 255, 58, 63, 23, 255, 64, 65, 38, 255, 66, 67, 48, 255, 71, 73, 49, 255, 76, 75, 52, 255, 81, 81, 57, 255, 79, 85, 57, 255, 74, 86, 62, 255, 80, 92, 75, 255, 85, 98, 78, 255, 86, 102, 74, 255, 86, 110, 83, 255, 85, 117, 91, 255, 88, 123, 99, 255, 94, 130, 110, 255, 99, 136, 117, 255, 100, 139, 120, 255, 101, 144, 125, 255, 106, 147, 129, 255, 107, 150, 130, 255, 103, 152, 130, 255, 103, 153, 134, 255, 108, 156, 137, 255, 109, 156, 139, 255, 106, 154, 138, 255, 108, 153, 135, 255, 112, 156, 133, 255, 108, 152, 129, 255, 107, 152, 129, 255, 102, 149, 122, 255, 101, 141, 112, 255, 104, 141, 107, 255, 102, 139, 103, 255, 99, 132, 99, 255, 100, 126, 98, 255, 100, 119, 89, 255, 99, 116, 82, 255, 94, 106, 81, 255, 92, 103, 72, 255, 91, 102, 64, 255, 89, 96, 69, 255, 84, 91, 57, 255, 81, 85, 56, 255, 83, 80, 49, 255, 84, 78, 43, 255, 80, 74, 45, 255, 81, 74, 31, 255, 82, 68, 41, 255, 75, 66, 36, 255, 80, 62, 30, 255, 82, 59, 26, 255, 82, 55, 27, 255, 83, 57, 19, 255, 73, 57, 12, 255, 68, 56, 9, 255, 76, 52, 13, 255, 77, 50, 7, 255, 72, 51, 14, 255, 71, 47, 6, 255, 68, 38, 10, 255, 65, 39, 11, 255, 76, 43, 7, 255, 69, 41, 6, 255, 79, 42, 6, 255, 72, 39, 7, 255, 66, 40, 8, 255, 77, 36, 7, 255, 77, 35, 10, 255, 71, 32, 9, 255, 72, 37, 12, 255, 74, 31, 1, 255, 69, 31, 5, 255, 69, 31, 6, 255, 73, 34, 6, 255, 70, 32, 9, 255, 71, 32, 5, 255, 70, 31, 7, 255, 70, 35, 6, 255, 69, 33, 1, 255, 74, 31, 4, 255, 75, 32, 5, 255, 73, 31, 6, 255, 72, 30, 3, 255, 72, 31, 3, 255, 71, 31, 6, 255, 77, 34, 3, 255, 74, 30, 6, 255, 68, 27, 6, 255, 71, 35, 6, 255, 66, 30, 3, 255, 67, 27, 6, 255, 71, 30, 6, 255, 68, 28, 2, 255, 65, 29, 2, 255, 64, 33, 4, 255, 72, 30, 5, 255, 66, 24, 1, 255, 66, 24, 3, 255, 69, 24, 4, 255, 67, 25, 6, 255, 70, 26, 5, 255, 74, 28, 3, 255, 77, 29, 5, 255, 75, 26, 5, 255, 77, 27, 4, 255, 81, 31, 4, 255, 79, 34, 6, 255, 71, 27, 6, 255, 77, 24, 4, 255, 82, 28, 3, 255, 78, 27, 3, 255, 80, 25, 6, 255, 78, 29, 5, 255, 80, 29, 6, 255, 74, 27, 4, 255, 74, 27, 3, 255, 72, 28, 4, 255, 70, 30, 1, 255, 75, 26, 3, 255, 77, 26, 3, 255, 71, 29, 3, 255, 65, 28, 3, 255, 69, 27, 2, 255, 70, 25, 3, 255, 65, 25, 7, 255, 68, 23, 2, 255, 72, 25, 5, 255, 65, 21, 2, 255, 65, 23, 4, 255, 58, 22, 1, 255, 62, 21, 3, 255, 66, 25, 1, 255, 70, 25, 2, 255, 71, 23, 2, 255, 76, 30, 4, 255, 75, 29, 3, 255, 79, 24, 3, 255, 88, 28, 8, 255, 68, 24, 3, 255, 66, 22, 4, 255, 61, 20, 3, 255, 65, 18, 1, 255, 74, 28, 7, 255, 69, 22, 4, 255, 57, 22, 5, 255, 54, 19, 3, 255, 64, 17, 3, 255, 63, 16, 1, 255, 58, 21, 0, 255, 55, 24, 3, 255, 51, 18, 10, 255, 51, 17, 10, 255, 51, 19, 3, 255, 57, 21, 0, 255, 73, 20, 2, 255, 72, 20, 1, 255, 58, 20, 1, 255, 57, 17, 5, 255, 54, 16, 5, 255, 59, 19, 5, 255, 66, 20, 3, 255, 61, 19, 2, 255, 49, 16, 4, 255, 50, 19, 4, 255, 51, 18, 3, 255, 45, 16, 4, 255, 48, 13, 5, 255, 52, 12, 2, 255, 53, 17, 4, 255, 68, 23, 6, 255, 83, 24, 3, 255, 82, 20, 3, 255, 74, 21, 4, 255, 78, 21, 3, 255, 86, 26, 4, 255, 74, 22, 2, 255, 43, 12, 2, 255, 42, 13, 3, 255, 42, 13, 3, 255, 43, 12, 3, 255, 43, 13, 4, 255, 45, 13, 4, 255, 41, 15, 4, 255, 46, 13, 4, 255, 50, 11, 0, 255, 45, 15, 4, 255, 42, 12, 3, 255, 56, 14, 1, 255, 77, 23, 5, 255, 81, 23, 3, 255, 79, 21, 4, 255, 78, 19, 2, 255, 72, 23, 1, 255, 76, 19, 2, 255, 70, 16, 1, 255, 51, 9, 2, 255, 46, 12, 2, 255, 49, 17, 0, 255, 45, 12, 4, 255, 43, 14, 5, 255, 46, 8, 3, 255, 54, 7, 6, 255, 51, 13, 0, 255, 56, 14, 4, 255, 52, 15, 3, 255, 52, 15, 2, 255, 53, 16, 3, 255, 58, 18, 5, 255, 56, 15, 5, 255, 56, 14, 4, 255, 54, 13, 4, 255, 50, 12, 2, 255, 49, 11, 3, 255, 51, 11, 5, 255, 44, 10, 2, 255, 45, 9, 1, 255, 51, 10, 1, 255, 53, 13, 4, 255, 46, 12, 4, 255, 45, 10, 2, 255, 49, 11, 2, 255, 45, 11, 3, 255, 49, 16, 4, 255, 50, 14, 4, 255, 42, 11, 2, 255, 43, 10, 4, 255, 41, 9, 3, 255, 40, 10, 3, 255, 44, 8, 1, 255, 48, 10, 2, 255, 44, 12, 4, 255, 43, 10, 4, 255, 38, 7, 0, 255, 36, 11, 4, 255, 30, 9, 3, 255, 25, 6, 3, 255, 30, 9, 7, 255, 31, 6, 3, 255, 35, 8, 4, 255, 35, 9, 4, 255, 33, 9, 2, 255, 31, 9, 3, 255, 26, 9, 4, 255, 22, 6, 1, 255, 20, 4, 1, 255, 23, 5, 2, 255, 25, 7, 1, 255, 26, 8, 1, 255, 31, 9, 1, 255, 40, 10, 2, 255, 44, 11, 2, 255, 46, 11, 2, 255, 42, 9, 0, 255, 41, 10, 0, 255, 42, 11, 1, 255, 42, 9, 0, 255, 5, 0, 0, 255, 4, 1, 0, 255, 2, 0, 0, 255, 8, 0, 1, 255, 9, 1, 0, 255, 10, 1, 0, 255, 10, 3, 0, 255, 12, 2, 1, 255, 13, 2, 1, 255, 13, 1, 1, 255, 11, 1, 0, 255, 12, 2, 1, 255, 13, 2, 1, 255, 13, 3, 2, 255, 13, 3, 1, 255, 13, 4, 3, 255, 9, 3, 1, 255, 7, 2, 0, 255, 10, 4, 1, 255, 10, 1, 1, 255, 10, 0, 0, 255, 10, 1, 0, 255, 12, 3, 2, 255, 13, 5, 3, 255, 13, 3, 1, 255, 12, 2, 0, 255, 11, 3, 1, 255, 13, 5, 3, 255, 13, 3, 2, 255, 12, 1, 0, 255, 13, 2, 1, 255, 14, 6, 1, 255, 14, 4, 3, 255, 14, 3, 2, 255, 15, 4, 1, 255, 16, 5, 3, 255, 12, 2, 1, 255, 20, 7, 2, 255, 20, 8, 3, 255, 15, 6, 1, 255, 15, 8, 2, 255, 15, 8, 1, 255, 17, 8, 3, 255, 18, 8, 2, 255, 20, 7, 1, 255, 20, 7, 2, 255, 19, 9, 3, 255, 23, 10, 4, 255, 24, 9, 3, 255, 22, 7, 2, 255, 19, 9, 3, 255, 19, 8, 0, 255, 27, 8, 1, 255, 24, 10, 2, 255, 20, 10, 1, 255, 27, 10, 2, 255, 31, 15, 7, 255, 25, 11, 3, 255, 27, 11, 4, 255, 28, 10, 3, 255, 30, 14, 5, 255, 23, 11, 0, 255, 26, 12, 3, 255, 35, 13, 7, 255, 37, 15, 4, 255, 31, 14, 4, 255, 28, 11, 3, 255, 30, 10, 4, 255, 31, 11, 2, 255, 35, 14, 4, 255, 34, 16, 3, 255, 33, 17, 2, 255, 34, 16, 2, 255, 34, 18, 4, 255, 33, 17, 6, 255, 34, 17, 5, 255, 30, 13, 0, 255, 34, 18, 3, 255, 41, 14, 3, 255, 45, 15, 5, 255, 36, 19, 4, 255, 28, 18, 1, 255, 33, 17, 1, 255, 39, 15, 4, 255, 36, 20, 5, 255, 34, 23, 6, 255, 37, 19, 5, 255, 42, 18, 6, 255, 34, 18, 4, 255, 33, 22, 5, 255, 41, 19, 4, 255, 46, 17, 5, 255, 47, 19, 4, 255, 41, 22, 1, 255, 42, 24, 3, 255, 46, 20, 6, 255, 39, 17, 4, 255, 41, 19, 3, 255, 45, 23, 5, 255, 35, 17, 3, 255, 39, 18, 5, 255, 47, 20, 4, 255, 46, 22, 2, 255, 48, 22, 1, 255, 53, 23, 3, 255, 51, 23, 5, 255, 45, 22, 1, 255, 46, 23, 2, 255, 49, 24, 6, 255, 50, 25, 2, 255, 51, 23, 1, 255, 53, 22, 2, 255, 50, 20, 2, 255, 50, 24, 4, 255, 54, 27, 4, 255, 45, 23, 3, 255, 40, 23, 1, 255, 43, 27, 2, 255, 50, 29, 3, 255, 53, 28, 4, 255, 46, 21, 5, 255, 48, 21, 7, 255, 51, 26, 4, 255, 47, 24, 2, 255, 52, 22, 2, 255, 52, 23, 7, 255, 48, 26, 6, 255, 53, 27, 2, 255, 49, 26, 5, 255, 47, 30, 5, 255, 56, 28, 8, 255, 57, 24, 1, 255, 53, 29, 10, 255, 51, 28, 6, 255, 62, 32, 1, 255, 59, 32, 9, 255, 55, 33, 11, 255, 55, 32, 7, 255, 59, 38, 11, 255, 60, 39, 18, 255, 68, 44, 19, 255, 65, 47, 24, 255, 64, 53, 27, 255, 67, 60, 23, 255, 65, 65, 34, 255, 72, 67, 42, 255, 77, 72, 39, 255, 74, 77, 43, 255, 76, 76, 53, 255, 77, 80, 57, 255, 75, 86, 58, 255, 73, 91, 65, 255, 80, 96, 74, 255, 85, 101, 76, 255, 85, 107, 82, 255, 87, 114, 91, 255, 87, 122, 100, 255, 87, 128, 109, 255, 91, 135, 119, 255, 96, 140, 126, 255, 96, 142, 126, 255, 97, 147, 132, 255, 102, 150, 134, 255, 105, 152, 134, 255, 103, 155, 134, 255, 106, 157, 140, 255, 111, 158, 143, 255, 111, 159, 145, 255, 109, 158, 142, 255, 110, 156, 137, 255, 113, 155, 134, 255, 111, 153, 129, 255, 108, 151, 126, 255, 107, 148, 121, 255, 100, 142, 113, 255, 100, 139, 108, 255, 103, 135, 104, 255, 100, 128, 98, 255, 98, 123, 94, 255, 97, 119, 83, 255, 98, 114, 84, 255, 93, 104, 77, 255, 93, 101, 70, 255, 90, 97, 63, 255, 89, 94, 59, 255, 83, 88, 56, 255, 79, 82, 51, 255, 81, 75, 49, 255, 81, 76, 35, 255, 79, 73, 33, 255, 80, 70, 28, 255, 81, 66, 30, 255, 76, 63, 25, 255, 76, 62, 19, 255, 71, 57, 24, 255, 74, 56, 31, 255, 82, 56, 22, 255, 79, 54, 18, 255, 72, 54, 12, 255, 73, 52, 13, 255, 72, 45, 10, 255, 66, 39, 13, 255, 68, 39, 15, 255, 73, 39, 11, 255, 78, 43, 5, 255, 78, 42, 4, 255, 68, 40, 4, 255, 70, 35, 9, 255, 71, 35, 11, 255, 69, 38, 6, 255, 71, 37, 2, 255, 71, 35, 2, 255, 67, 34, 10, 255, 77, 35, 5, 255, 67, 33, 2, 255, 69, 34, 5, 255, 75, 34, 3, 255, 71, 37, 5, 255, 72, 37, 3, 255, 71, 32, 2, 255, 75, 31, 4, 255, 78, 34, 3, 255, 73, 33, 1, 255, 69, 34, 9, 255, 69, 30, 9, 255, 71, 30, 12, 255, 71, 31, 6, 255, 66, 29, 1, 255, 66, 28, 3, 255, 72, 28, 1, 255, 75, 29, 4, 255, 72, 26, 7, 255, 71, 31, 5, 255, 68, 28, 4, 255, 66, 26, 5, 255, 67, 27, 2, 255, 63, 26, 3, 255, 64, 31, 4, 255, 65, 30, 3, 255, 74, 29, 4, 255, 70, 28, 4, 255, 68, 25, 2, 255, 68, 26, 4, 255, 70, 31, 4, 255, 70, 30, 5, 255, 71, 30, 6, 255, 73, 30, 5, 255, 74, 28, 3, 255, 76, 28, 3, 255, 78, 28, 3, 255, 75, 27, 2, 255, 69, 24, 1, 255, 73, 24, 3, 255, 77, 29, 4, 255, 74, 27, 2, 255, 73, 24, 3, 255, 73, 26, 4, 255, 75, 28, 5, 255, 70, 29, 3, 255, 70, 28, 2, 255, 71, 30, 4, 255, 71, 28, 2, 255, 71, 30, 3, 255, 66, 25, 1, 255, 67, 25, 3, 255, 69, 28, 3, 255, 75, 25, 3, 255, 70, 22, 2, 255, 64, 28, 2, 255, 70, 26, 3, 255, 74, 26, 6, 255, 68, 25, 4, 255, 66, 24, 4, 255, 62, 26, 4, 255, 66, 23, 5, 255, 70, 23, 6, 255, 68, 22, 4, 255, 71, 24, 2, 255, 72, 24, 2, 255, 65, 21, 4, 255, 73, 24, 5, 255, 86, 30, 4, 255, 84, 29, 3, 255, 74, 26, 2, 255, 66, 21, 3, 255, 71, 19, 4, 255, 66, 23, 1, 255, 60, 20, 1, 255, 58, 24, 3, 255, 58, 20, 2, 255, 59, 21, 6, 255, 56, 20, 1, 255, 55, 19, 0, 255, 52, 18, 3, 255, 43, 18, 5, 255, 50, 20, 5, 255, 56, 20, 2, 255, 51, 21, 2, 255, 55, 20, 3, 255, 57, 19, 5, 255, 49, 19, 5, 255, 53, 14, 5, 255, 59, 17, 3, 255, 66, 21, 2, 255, 65, 20, 1, 255, 58, 18, 3, 255, 52, 18, 6, 255, 52, 15, 4, 255, 48, 16, 0, 255, 50, 17, 5, 255, 44, 13, 4, 255, 46, 14, 0, 255, 49, 17, 3, 255, 51, 17, 2, 255, 79, 28, 7, 255, 87, 24, 5, 255, 90, 24, 4, 255, 91, 22, 8, 255, 78, 24, 8, 255, 66, 21, 2, 255, 51, 15, 5, 255, 42, 14, 3, 255, 41, 12, 0, 255, 50, 15, 5, 255, 49, 16, 5, 255, 49, 17, 4, 255, 44, 16, 5, 255, 48, 10, 2, 255, 54, 13, 3, 255, 48, 17, 7, 255, 40, 11, 3, 255, 40, 11, 0, 255, 51, 15, 3, 255, 58, 13, 1, 255, 69, 15, 6, 255, 71, 15, 7, 255, 68, 17, 5, 255, 68, 14, 4, 255, 58, 13, 4, 255, 43, 9, 1, 255, 44, 14, 5, 255, 49, 13, 8, 255, 46, 13, 0, 255, 37, 13, 11, 255, 44, 6, 16, 255, 58, 13, 3, 255, 46, 17, 3, 255, 43, 14, 1, 255, 47, 17, 2, 255, 55, 16, 2, 255, 52, 15, 0, 255, 48, 14, 3, 255, 53, 10, 2, 255, 55, 11, 3, 255, 53, 12, 2, 255, 50, 14, 1, 255, 48, 13, 4, 255, 50, 12, 4, 255, 48, 14, 5, 255, 52, 17, 1, 255, 58, 16, 0, 255, 52, 12, 0, 255, 43, 12, 2, 255, 44, 13, 2, 255, 49, 13, 1, 255, 51, 14, 3, 255, 57, 17, 7, 255, 53, 13, 3, 255, 41, 11, 1, 255, 44, 13, 4, 255, 48, 11, 2, 255, 40, 9, 1, 255, 41, 10, 0, 255, 46, 10, 2, 255, 45, 9, 2, 255, 39, 8, 2, 255, 41, 9, 1, 255, 39, 8, 0, 255, 31, 9, 2, 255, 27, 7, 2, 255, 31, 9, 4, 255, 35, 7, 1, 255, 40, 10, 4, 255, 33, 5, 2, 255, 33, 8, 4, 255, 32, 7, 3, 255, 29, 5, 3, 255, 25, 3, 1, 255, 25, 5, 2, 255, 24, 6, 1, 255, 26, 8, 2, 255, 29, 8, 2, 255, 34, 11, 4, 255, 39, 10, 3, 255, 43, 9, 1, 255, 45, 10, 1, 255, 45, 11, 2, 255, 41, 10, 1, 255, 43, 11, 2, 255, 43, 10, 2, 255, 6, 0, 0, 255, 5, 1, 0, 255, 4, 1, 1, 255, 8, 2, 3, 255, 9, 0, 1, 255, 9, 1, 1, 255, 12, 1, 1, 255, 10, 1, 0, 255, 9, 3, 1, 255, 12, 2, 1, 255, 14, 1, 1, 255, 12, 1, 1, 255, 10, 2, 1, 255, 11, 0, 1, 255, 12, 0, 1, 255, 12, 2, 1, 255, 10, 2, 1, 255, 8, 2, 0, 255, 11, 3, 1, 255, 14, 2, 2, 255, 14, 3, 2, 255, 11, 1, 0, 255, 13, 3, 2, 255, 16, 6, 5, 255, 15, 4, 3, 255, 13, 3, 1, 255, 11, 5, 2, 255, 7, 3, 0, 255, 11, 4, 2, 255, 13, 4, 2, 255, 13, 5, 2, 255, 11, 6, 0, 255, 13, 5, 3, 255, 15, 4, 2, 255, 15, 4, 0, 255, 16, 6, 3, 255, 12, 2, 1, 255, 18, 5, 2, 255, 18, 6, 2, 255, 15, 6, 1, 255, 17, 7, 3, 255, 15, 6, 2, 255, 17, 6, 1, 255, 22, 9, 3, 255, 24, 8, 3, 255, 22, 5, 1, 255, 18, 8, 2, 255, 13, 7, 0, 255, 16, 8, 1, 255, 22, 10, 4, 255, 23, 9, 2, 255, 20, 10, 2, 255, 25, 10, 2, 255, 24, 9, 2, 255, 21, 10, 2, 255, 27, 11, 3, 255, 29, 10, 4, 255, 21, 8, 1, 255, 22, 13, 6, 255, 25, 11, 3, 255, 29, 9, 2, 255, 26, 11, 2, 255, 23, 12, 2, 255, 28, 12, 4, 255, 27, 10, 1, 255, 26, 13, 3, 255, 25, 14, 5, 255, 27, 13, 5, 255, 30, 14, 3, 255, 30, 16, 1, 255, 34, 17, 2, 255, 36, 18, 3, 255, 35, 16, 1, 255, 32, 14, 1, 255, 30, 13, 3, 255, 35, 17, 6, 255, 37, 17, 4, 255, 36, 17, 4, 255, 36, 16, 5, 255, 34, 12, 1, 255, 42, 17, 5, 255, 44, 19, 7, 255, 33, 16, 1, 255, 30, 16, 0, 255, 30, 15, 1, 255, 33, 17, 2, 255, 43, 22, 7, 255, 40, 18, 4, 255, 29, 17, 1, 255, 34, 18, 3, 255, 42, 18, 4, 255, 37, 21, 6, 255, 38, 19, 3, 255, 46, 19, 2, 255, 45, 18, 4, 255, 38, 19, 4, 255, 40, 16, 4, 255, 45, 20, 5, 255, 39, 24, 4, 255, 37, 19, 5, 255, 36, 17, 6, 255, 46, 18, 4, 255, 49, 24, 4, 255, 46, 20, 0, 255, 53, 23, 6, 255, 45, 19, 2, 255, 42, 21, 3, 255, 40, 24, 7, 255, 41, 20, 4, 255, 57, 23, 6, 255, 53, 24, 4, 255, 52, 20, 1, 255, 53, 24, 7, 255, 43, 22, 2, 255, 49, 23, 3, 255, 50, 24, 2, 255, 46, 26, 5, 255, 45, 26, 6, 255, 50, 27, 5, 255, 56, 25, 5, 255, 53, 23, 6, 255, 50, 23, 9, 255, 48, 23, 5, 255, 53, 23, 4, 255, 54, 24, 10, 255, 52, 21, 4, 255, 55, 27, 1, 255, 62, 32, 4, 255, 57, 30, 5, 255, 38, 24, 4, 255, 43, 26, 7, 255, 53, 29, 3, 255, 52, 31, 0, 255, 53, 29, 3, 255, 59, 28, 8, 255, 58, 36, 7, 255, 52, 34, 7, 255, 55, 30, 15, 255, 59, 36, 12, 255, 64, 46, 6, 255, 61, 45, 15, 255, 54, 49, 30, 255, 61, 53, 31, 255, 69, 58, 29, 255, 70, 65, 31, 255, 73, 65, 41, 255, 70, 69, 45, 255, 71, 75, 42, 255, 75, 77, 55, 255, 75, 79, 63, 255, 73, 85, 66, 255, 74, 93, 74, 255, 79, 97, 75, 255, 83, 102, 78, 255, 84, 108, 88, 255, 85, 114, 95, 255, 87, 124, 105, 255, 88, 131, 115, 255, 90, 137, 124, 255, 89, 140, 128, 255, 94, 145, 131, 255, 96, 151, 138, 255, 101, 154, 141, 255, 105, 156, 141, 255, 105, 158, 140, 255, 110, 159, 144, 255, 110, 158, 144, 255, 110, 160, 145, 255, 112, 160, 144, 255, 112, 157, 138, 255, 111, 153, 131, 255, 111, 154, 129, 255, 105, 148, 121, 255, 105, 146, 115, 255, 101, 143, 115, 255, 99, 136, 111, 255, 101, 130, 106, 255, 100, 123, 96, 255, 98, 121, 87, 255, 93, 117, 80, 255, 94, 109, 80, 255, 91, 101, 76, 255, 91, 98, 65, 255, 90, 95, 63, 255, 84, 87, 51, 255, 85, 84, 48, 255, 86, 79, 51, 255, 83, 72, 48, 255, 81, 76, 26, 255, 75, 73, 31, 255, 73, 69, 27, 255, 71, 61, 35, 255, 78, 59, 31, 255, 74, 56, 22, 255, 75, 61, 10, 255, 78, 60, 4, 255, 81, 50, 19, 255, 78, 48, 14, 255, 77, 48, 21, 255, 74, 44, 21, 255, 76, 42, 11, 255, 76, 43, 9, 255, 70, 42, 11, 255, 70, 41, 7, 255, 78, 44, 2, 255, 73, 38, 4, 255, 69, 39, 5, 255, 74, 40, 6, 255, 71, 36, 9, 255, 65, 37, 2, 255, 71, 35, 6, 255, 70, 32, 9, 255, 73, 36, 5, 255, 62, 32, 7, 255, 61, 33, 7, 255, 76, 34, 7, 255, 71, 37, 9, 255, 68, 32, 5, 255, 71, 35, 4, 255, 68, 34, 1, 255, 70, 33, 5, 255, 73, 30, 7, 255, 69, 28, 6, 255, 63, 31, 8, 255, 71, 32, 9, 255, 63, 30, 8, 255, 71, 30, 7, 255, 72, 29, 5, 255, 65, 30, 7, 255, 69, 27, 6, 255, 77, 28, 5, 255, 73, 28, 5, 255, 70, 27, 6, 255, 69, 27, 4, 255, 69, 27, 1, 255, 66, 26, 5, 255, 63, 25, 4, 255, 65, 27, 3, 255, 67, 29, 8, 255, 67, 30, 4, 255, 65, 31, 1, 255, 71, 26, 1, 255, 73, 27, 4, 255, 81, 32, 2, 255, 78, 28, 3, 255, 73, 28, 5, 255, 75, 30, 5, 255, 76, 31, 3, 255, 79, 30, 5, 255, 78, 28, 4, 255, 76, 26, 2, 255, 78, 29, 5, 255, 70, 28, 3, 255, 74, 28, 4, 255, 75, 27, 4, 255, 71, 28, 1, 255, 70, 25, 4, 255, 71, 27, 3, 255, 66, 29, 2, 255, 68, 29, 4, 255, 69, 28, 4, 255, 70, 27, 3, 255, 71, 27, 2, 255, 72, 24, 4, 255, 70, 24, 7, 255, 64, 25, 0, 255, 75, 29, 4, 255, 79, 27, 6, 255, 70, 24, 1, 255, 65, 25, 1, 255, 71, 24, 3, 255, 70, 26, 5, 255, 66, 23, 2, 255, 63, 26, 4, 255, 64, 23, 4, 255, 68, 21, 1, 255, 64, 22, 4, 255, 70, 24, 6, 255, 81, 27, 4, 255, 81, 25, 2, 255, 83, 25, 4, 255, 89, 27, 2, 255, 90, 27, 6, 255, 75, 24, 6, 255, 64, 20, 0, 255, 61, 20, 2, 255, 59, 19, 3, 255, 65, 21, 5, 255, 61, 18, 3, 255, 59, 17, 2, 255, 60, 23, 2, 255, 58, 23, 3, 255, 59, 19, 6, 255, 60, 18, 6, 255, 56, 19, 1, 255, 60, 18, 4, 255, 58, 16, 8, 255, 49, 18, 4, 255, 54, 21, 3, 255, 54, 18, 1, 255, 49, 15, 2, 255, 58, 15, 4, 255, 59, 17, 2, 255, 62, 19, 5, 255, 59, 19, 3, 255, 56, 19, 2, 255, 57, 17, 2, 255, 56, 15, 3, 255, 53, 18, 2, 255, 53, 14, 1, 255, 51, 15, 5, 255, 52, 18, 2, 255, 58, 17, 4, 255, 53, 16, 3, 255, 55, 18, 2, 255, 67, 17, 4, 255, 76, 16, 0, 255, 73, 19, 2, 255, 64, 16, 8, 255, 56, 15, 10, 255, 46, 17, 3, 255, 53, 17, 4, 255, 49, 13, 2, 255, 46, 14, 3, 255, 46, 13, 1, 255, 53, 19, 4, 255, 45, 16, 2, 255, 45, 14, 2, 255, 52, 12, 4, 255, 43, 11, 3, 255, 37, 14, 5, 255, 32, 8, 2, 255, 28, 14, 5, 255, 30, 14, 5, 255, 32, 9, 3, 255, 30, 6, 1, 255, 35, 9, 2, 255, 42, 9, 5, 255, 40, 9, 8, 255, 37, 7, 4, 255, 43, 13, 4, 255, 43, 12, 5, 255, 43, 16, 4, 255, 47, 12, 7, 255, 48, 9, 13, 255, 54, 13, 6, 255, 52, 13, 4, 255, 55, 12, 5, 255, 57, 14, 5, 255, 57, 14, 3, 255, 54, 12, 2, 255, 52, 11, 3, 255, 57, 14, 5, 255, 56, 13, 4, 255, 52, 11, 3, 255, 48, 13, 3, 255, 47, 14, 3, 255, 44, 12, 1, 255, 62, 13, 3, 255, 72, 14, 3, 255, 71, 15, 5, 255, 66, 15, 3, 255, 58, 13, 1, 255, 51, 13, 2, 255, 46, 13, 3, 255, 47, 15, 1, 255, 61, 15, 5, 255, 63, 10, 4, 255, 46, 10, 2, 255, 43, 12, 3, 255, 42, 11, 2, 255, 37, 7, 1, 255, 41, 11, 4, 255, 43, 11, 2, 255, 42, 8, 1, 255, 36, 9, 2, 255, 41, 14, 5, 255, 43, 10, 2, 255, 41, 10, 3, 255, 35, 10, 3, 255, 32, 7, 0, 255, 35, 7, 0, 255, 41, 12, 5, 255, 36, 8, 4, 255, 28, 10, 3, 255, 24, 6, 0, 255, 23, 4, 0, 255, 24, 5, 1, 255, 26, 9, 4, 255, 20, 6, 1, 255, 26, 5, 2, 255, 29, 6, 2, 255, 32, 8, 2, 255, 39, 7, 1, 255, 47, 10, 3, 255, 47, 10, 2, 255, 47, 10, 3, 255, 44, 9, 2, 255, 48, 11, 4, 255, 47, 11, 4, 255, 7, 3, 1, 255, 6, 1, 0, 255, 6, 0, 1, 255, 9, 2, 2, 255, 11, 3, 2, 255, 9, 0, 0, 255, 11, 1, 1, 255, 10, 0, 1, 255, 11, 1, 0, 255, 12, 2, 0, 255, 11, 2, 0, 255, 10, 1, 0, 255, 10, 0, 1, 255, 12, 1, 1, 255, 13, 2, 2, 255, 12, 2, 1, 255, 12, 2, 0, 255, 14, 2, 1, 255, 15, 2, 0, 255, 14, 1, 1, 255, 12, 2, 1, 255, 12, 4, 2, 255, 16, 4, 4, 255, 16, 3, 2, 255, 13, 3, 2, 255, 11, 2, 1, 255, 15, 6, 4, 255, 10, 3, 2, 255, 10, 3, 0, 255, 11, 5, 1, 255, 13, 5, 2, 255, 14, 5, 2, 255, 12, 4, 2, 255, 12, 2, 2, 255, 11, 1, 1, 255, 14, 4, 2, 255, 14, 4, 2, 255, 15, 6, 4, 255, 15, 6, 2, 255, 15, 5, 1, 255, 16, 6, 4, 255, 15, 5, 3, 255, 16, 4, 1, 255, 20, 6, 1, 255, 23, 7, 1, 255, 24, 9, 4, 255, 18, 7, 1, 255, 14, 6, 1, 255, 16, 8, 1, 255, 21, 10, 2, 255, 25, 10, 3, 255, 19, 7, 1, 255, 24, 10, 2, 255, 28, 11, 2, 255, 24, 8, 1, 255, 26, 12, 4, 255, 23, 9, 1, 255, 25, 11, 4, 255, 21, 8, 0, 255, 24, 12, 4, 255, 24, 10, 2, 255, 30, 12, 3, 255, 30, 11, 1, 255, 28, 13, 3, 255, 25, 11, 4, 255, 25, 11, 1, 255, 30, 16, 6, 255, 28, 15, 6, 255, 28, 13, 4, 255, 31, 13, 3, 255, 36, 14, 2, 255, 35, 18, 3, 255, 28, 16, 1, 255, 32, 14, 1, 255, 31, 14, 5, 255, 27, 13, 4, 255, 31, 16, 5, 255, 37, 16, 5, 255, 37, 17, 3, 255, 32, 15, 0, 255, 34, 14, 1, 255, 40, 15, 2, 255, 35, 16, 1, 255, 31, 15, 1, 255, 39, 16, 5, 255, 34, 17, 3, 255, 39, 18, 3, 255, 42, 20, 4, 255, 34, 18, 2, 255, 49, 20, 7, 255, 39, 15, 1, 255, 31, 20, 4, 255, 45, 15, 3, 255, 54, 20, 5, 255, 40, 19, 4, 255, 38, 19, 5, 255, 30, 18, 8, 255, 40, 22, 5, 255, 42, 21, 1, 255, 41, 20, 2, 255, 45, 23, 7, 255, 51, 20, 4, 255, 49, 21, 1, 255, 53, 21, 2, 255, 48, 21, 3, 255, 39, 21, 1, 255, 45, 22, 4, 255, 42, 20, 1, 255, 45, 23, 5, 255, 52, 17, 11, 255, 44, 21, 3, 255, 48, 22, 2, 255, 50, 24, 4, 255, 35, 25, 1, 255, 46, 26, 2, 255, 55, 25, 3, 255, 48, 24, 3, 255, 41, 26, 3, 255, 48, 24, 4, 255, 56, 24, 5, 255, 56, 29, 6, 255, 50, 23, 1, 255, 52, 24, 6, 255, 56, 24, 6, 255, 50, 22, 5, 255, 47, 27, 4, 255, 50, 30, 5, 255, 51, 25, 1, 255, 46, 24, 11, 255, 51, 32, 2, 255, 46, 27, 1, 255, 50, 29, 6, 255, 50, 25, 5, 255, 57, 29, 9, 255, 54, 30, 4, 255, 54, 33, 3, 255, 53, 31, 6, 255, 55, 35, 16, 255, 55, 37, 13, 255, 58, 42, 15, 255, 55, 44, 22, 255, 54, 48, 27, 255, 67, 57, 27, 255, 66, 61, 21, 255, 70, 65, 26, 255, 73, 66, 35, 255, 68, 69, 42, 255, 71, 76, 50, 255, 74, 79, 54, 255, 73, 81, 58, 255, 77, 89, 69, 255, 78, 95, 75, 255, 79, 97, 79, 255, 84, 104, 85, 255, 86, 112, 91, 255, 91, 120, 101, 255, 89, 125, 104, 255, 93, 133, 112, 255, 97, 140, 121, 255, 98, 144, 129, 255, 99, 148, 136, 255, 104, 152, 140, 255, 107, 155, 143, 255, 108, 159, 145, 255, 109, 162, 146, 255, 110, 160, 145, 255, 111, 161, 146, 255, 111, 161, 143, 255, 117, 161, 142, 255, 114, 157, 137, 255, 110, 154, 134, 255, 109, 152, 131, 255, 107, 152, 126, 255, 101, 147, 113, 255, 101, 139, 110, 255, 103, 135, 105, 255, 103, 129, 101, 255, 101, 122, 95, 255, 97, 117, 80, 255, 94, 113, 81, 255, 91, 105, 77, 255, 88, 99, 69, 255, 86, 94, 60, 255, 87, 89, 58, 255, 89, 86, 55, 255, 85, 80, 45, 255, 85, 82, 43, 255, 77, 74, 32, 255, 76, 71, 37, 255, 75, 67, 36, 255, 77, 64, 18, 255, 83, 65, 19, 255, 81, 61, 16, 255, 76, 56, 24, 255, 77, 53, 24, 255, 83, 51, 17, 255, 80, 49, 18, 255, 75, 51, 10, 255, 70, 47, 9, 255, 70, 44, 6, 255, 75, 44, 8, 255, 73, 41, 12, 255, 71, 40, 7, 255, 76, 43, 4, 255, 74, 38, 3, 255, 70, 38, 6, 255, 72, 37, 5, 255, 71, 38, 1, 255, 72, 38, 3, 255, 70, 34, 7, 255, 72, 36, 7, 255, 69, 32, 4, 255, 72, 31, 5, 255, 70, 32, 10, 255, 65, 37, 5, 255, 70, 34, 5, 255, 75, 31, 1, 255, 72, 31, 6, 255, 72, 31, 6, 255, 69, 29, 3, 255, 71, 36, 6, 255, 73, 31, 3, 255, 76, 30, 4, 255, 75, 36, 7, 255, 77, 31, 7, 255, 66, 30, 3, 255, 71, 28, 2, 255, 77, 28, 2, 255, 79, 32, 4, 255, 74, 31, 2, 255, 73, 28, 3, 255, 70, 28, 7, 255, 70, 28, 4, 255, 70, 27, 5, 255, 69, 25, 4, 255, 70, 31, 4, 255, 67, 30, 2, 255, 66, 28, 0, 255, 59, 22, 8, 255, 65, 26, 8, 255, 71, 28, 2, 255, 69, 28, 2, 255, 72, 27, 5, 255, 75, 25, 4, 255, 77, 31, 6, 255, 70, 28, 3, 255, 71, 27, 3, 255, 75, 28, 2, 255, 76, 27, 0, 255, 79, 31, 3, 255, 78, 29, 2, 255, 78, 28, 3, 255, 76, 29, 4, 255, 71, 26, 2, 255, 72, 26, 3, 255, 77, 28, 5, 255, 78, 24, 4, 255, 76, 27, 2, 255, 71, 25, 0, 255, 76, 25, 9, 255, 67, 19, 4, 255, 70, 25, 1, 255, 68, 28, 2, 255, 71, 27, 3, 255, 73, 23, 2, 255, 70, 25, 3, 255, 68, 28, 5, 255, 66, 24, 3, 255, 70, 19, 2, 255, 64, 23, 1, 255, 60, 26, 4, 255, 66, 25, 5, 255, 62, 19, 2, 255, 58, 22, 1, 255, 58, 25, 3, 255, 61, 24, 1, 255, 61, 21, 1, 255, 65, 23, 7, 255, 65, 21, 6, 255, 66, 19, 4, 255, 70, 22, 5, 255, 75, 24, 5, 255, 71, 18, 2, 255, 66, 20, 4, 255, 63, 21, 6, 255, 63, 20, 5, 255, 62, 23, 5, 255, 58, 23, 3, 255, 54, 17, 0, 255, 63, 23, 4, 255, 59, 23, 2, 255, 56, 20, 1, 255, 63, 17, 3, 255, 61, 17, 1, 255, 56, 17, 2, 255, 48, 17, 4, 255, 51, 20, 4, 255, 61, 19, 1, 255, 61, 21, 0, 255, 52, 17, 1, 255, 53, 13, 6, 255, 58, 16, 7, 255, 48, 16, 6, 255, 52, 16, 7, 255, 61, 20, 0, 255, 57, 18, 2, 255, 49, 14, 6, 255, 55, 17, 2, 255, 56, 17, 2, 255, 50, 16, 1, 255, 58, 19, 6, 255, 47, 17, 3, 255, 56, 17, 3, 255, 52, 14, 1, 255, 45, 12, 1, 255, 54, 15, 2, 255, 58, 15, 6, 255, 48, 12, 4, 255, 48, 13, 4, 255, 47, 16, 5, 255, 42, 15, 6, 255, 39, 16, 1, 255, 40, 14, 3, 255, 47, 14, 8, 255, 42, 10, 1, 255, 44, 15, 1, 255, 43, 15, 2, 255, 45, 14, 2, 255, 49, 12, 4, 255, 46, 13, 6, 255, 41, 10, 6, 255, 42, 12, 5, 255, 36, 14, 4, 255, 34, 13, 5, 255, 38, 14, 4, 255, 33, 7, 1, 255, 37, 12, 5, 255, 36, 10, 4, 255, 36, 8, 0, 255, 44, 11, 2, 255, 52, 15, 5, 255, 56, 13, 7, 255, 54, 16, 7, 255, 60, 17, 2, 255, 47, 13, 0, 255, 43, 12, 5, 255, 45, 13, 4, 255, 55, 12, 5, 255, 58, 12, 4, 255, 49, 12, 4, 255, 49, 14, 5, 255, 54, 14, 4, 255, 54, 15, 4, 255, 52, 13, 6, 255, 46, 8, 5, 255, 45, 10, 6, 255, 48, 14, 5, 255, 55, 14, 4, 255, 57, 15, 3, 255, 66, 16, 4, 255, 72, 13, 4, 255, 66, 13, 1, 255, 65, 17, 3, 255, 58, 14, 4, 255, 46, 12, 2, 255, 46, 12, 4, 255, 50, 11, 2, 255, 50, 11, 3, 255, 40, 10, 1, 255, 37, 10, 1, 255, 38, 11, 4, 255, 37, 8, 2, 255, 39, 11, 4, 255, 38, 12, 4, 255, 40, 11, 2, 255, 42, 9, 0, 255, 48, 14, 2, 255, 52, 14, 7, 255, 44, 7, 3, 255, 39, 10, 3, 255, 39, 13, 2, 255, 34, 10, 0, 255, 37, 8, 2, 255, 32, 6, 5, 255, 24, 6, 0, 255, 26, 8, 1, 255, 24, 4, 1, 255, 26, 6, 3, 255, 24, 7, 2, 255, 23, 6, 2, 255, 27, 6, 4, 255, 26, 8, 2, 255, 27, 9, 1, 255, 39, 11, 3, 255, 47, 11, 2, 255, 46, 11, 2, 255, 40, 8, 1, 255, 39, 7, 0, 255, 45, 11, 3, 255, 45, 11, 3, 255, 5, 2, 5, 255, 3, 2, 1, 255, 3, 1, 0, 255, 5, 2, 0, 255, 8, 2, 2, 255, 9, 0, 0, 255, 12, 2, 0, 255, 12, 2, 1, 255, 12, 2, 1, 255, 11, 1, 0, 255, 11, 1, 0, 255, 11, 1, 0, 255, 13, 2, 2, 255, 18, 4, 4, 255, 14, 2, 2, 255, 12, 2, 1, 255, 13, 3, 2, 255, 14, 4, 2, 255, 13, 3, 1, 255, 12, 2, 1, 255, 13, 4, 3, 255, 11, 2, 1, 255, 13, 3, 2, 255, 17, 3, 1, 255, 16, 4, 3, 255, 13, 2, 1, 255, 15, 1, 2, 255, 17, 3, 3, 255, 16, 2, 2, 255, 17, 3, 2, 255, 16, 3, 3, 255, 16, 3, 3, 255, 13, 2, 1, 255, 15, 4, 2, 255, 16, 5, 3, 255, 13, 4, 2, 255, 13, 5, 3, 255, 12, 5, 1, 255, 13, 4, 1, 255, 15, 4, 2, 255, 17, 7, 5, 255, 16, 6, 5, 255, 15, 4, 1, 255, 18, 6, 0, 255, 20, 7, 0, 255, 15, 7, 2, 255, 18, 6, 2, 255, 22, 7, 5, 255, 22, 8, 4, 255, 21, 9, 5, 255, 15, 6, 1, 255, 18, 9, 4, 255, 20, 9, 1, 255, 24, 11, 2, 255, 23, 10, 2, 255, 22, 7, 1, 255, 22, 6, 1, 255, 27, 11, 4, 255, 24, 11, 4, 255, 22, 9, 2, 255, 26, 12, 3, 255, 29, 12, 4, 255, 29, 12, 2, 255, 28, 13, 2, 255, 27, 12, 3, 255, 27, 11, 2, 255, 26, 11, 1, 255, 26, 13, 4, 255, 28, 15, 6, 255, 27, 14, 2, 255, 32, 15, 1, 255, 35, 19, 4, 255, 31, 20, 3, 255, 30, 16, 2, 255, 32, 15, 3, 255, 31, 16, 4, 255, 29, 16, 1, 255, 34, 13, 3, 255, 30, 19, 4, 255, 34, 17, 3, 255, 36, 16, 3, 255, 36, 18, 4, 255, 36, 18, 4, 255, 37, 18, 4, 255, 37, 16, 4, 255, 33, 15, 3, 255, 35, 14, 2, 255, 41, 19, 3, 255, 41, 24, 6, 255, 38, 21, 5, 255, 34, 17, 3, 255, 37, 15, 3, 255, 44, 17, 5, 255, 43, 19, 5, 255, 38, 17, 3, 255, 42, 16, 6, 255, 30, 15, 4, 255, 41, 20, 4, 255, 46, 21, 4, 255, 40, 18, 2, 255, 42, 22, 6, 255, 42, 19, 3, 255, 42, 20, 2, 255, 43, 22, 5, 255, 44, 19, 3, 255, 42, 21, 2, 255, 48, 26, 5, 255, 52, 22, 3, 255, 53, 26, 6, 255, 51, 22, 5, 255, 47, 25, 4, 255, 42, 24, 4, 255, 47, 24, 9, 255, 46, 22, 3, 255, 58, 25, 4, 255, 56, 27, 2, 255, 59, 27, 5, 255, 50, 25, 2, 255, 54, 27, 4, 255, 51, 26, 1, 255, 44, 29, 0, 255, 47, 30, 1, 255, 51, 27, 5, 255, 50, 25, 3, 255, 49, 25, 3, 255, 48, 30, 6, 255, 47, 26, 4, 255, 50, 21, 2, 255, 59, 24, 6, 255, 55, 24, 6, 255, 54, 26, 5, 255, 58, 30, 3, 255, 57, 27, 11, 255, 53, 23, 12, 255, 48, 32, 2, 255, 52, 32, 5, 255, 56, 26, 10, 255, 57, 34, 13, 255, 59, 40, 13, 255, 62, 44, 19, 255, 60, 44, 20, 255, 67, 49, 20, 255, 73, 56, 32, 255, 70, 61, 34, 255, 67, 63, 28, 255, 71, 66, 36, 255, 68, 70, 48, 255, 68, 72, 55, 255, 73, 79, 61, 255, 75, 85, 66, 255, 76, 91, 72, 255, 77, 94, 75, 255, 82, 101, 81, 255, 87, 111, 89, 255, 82, 115, 94, 255, 85, 122, 104, 255, 88, 130, 113, 255, 92, 136, 117, 255, 93, 141, 123, 255, 96, 147, 132, 255, 99, 151, 138, 255, 106, 156, 144, 255, 109, 159, 147, 255, 107, 159, 147, 255, 108, 161, 147, 255, 113, 161, 148, 255, 112, 161, 150, 255, 113, 162, 149, 255, 115, 159, 144, 255, 116, 159, 139, 255, 110, 153, 131, 255, 107, 152, 125, 255, 103, 148, 120, 255, 100, 145, 114, 255, 104, 142, 105, 255, 103, 134, 101, 255, 100, 127, 95, 255, 98, 120, 89, 255, 95, 113, 87, 255, 91, 108, 76, 255, 89, 103, 70, 255, 90, 95, 62, 255, 86, 92, 59, 255, 85, 85, 57, 255, 88, 83, 41, 255, 86, 86, 30, 255, 83, 80, 29, 255, 81, 74, 33, 255, 78, 70, 29, 255, 78, 67, 27, 255, 78, 60, 32, 255, 84, 61, 20, 255, 87, 63, 10, 255, 76, 58, 9, 255, 67, 48, 27, 255, 69, 45, 29, 255, 74, 47, 11, 255, 74, 45, 9, 255, 69, 40, 15, 255, 69, 42, 9, 255, 69, 42, 9, 255, 72, 40, 10, 255, 74, 39, 6, 255, 75, 43, 7, 255, 69, 37, 7, 255, 70, 31, 5, 255, 71, 38, 0, 255, 72, 38, 2, 255, 76, 37, 10, 255, 75, 34, 6, 255, 73, 37, 4, 255, 70, 36, 3, 255, 73, 32, 2, 255, 78, 32, 2, 255, 76, 32, 1, 255, 79, 31, 1, 255, 78, 27, 4, 255, 76, 31, 7, 255, 70, 30, 2, 255, 75, 33, 7, 255, 76, 31, 6, 255, 74, 29, 3, 255, 74, 28, 3, 255, 77, 29, 3, 255, 72, 29, 5, 255, 69, 30, 5, 255, 73, 29, 6, 255, 71, 27, 2, 255, 72, 31, 5, 255, 76, 28, 8, 255, 74, 26, 4, 255, 78, 32, 3, 255, 72, 25, 3, 255, 71, 26, 6, 255, 71, 28, 5, 255, 67, 24, 5, 255, 71, 31, 6, 255, 72, 29, 7, 255, 73, 24, 1, 255, 67, 22, 7, 255, 64, 24, 10, 255, 69, 26, 2, 255, 75, 29, 3, 255, 72, 27, 1, 255, 73, 30, 3, 255, 73, 31, 2, 255, 73, 30, 3, 255, 75, 29, 3, 255, 72, 27, 2, 255, 72, 26, 2, 255, 74, 25, 3, 255, 75, 26, 1, 255, 76, 30, 1, 255, 72, 29, 0, 255, 76, 31, 6, 255, 73, 26, 5, 255, 72, 27, 3, 255, 73, 26, 2, 255, 75, 26, 2, 255, 78, 25, 4, 255, 75, 24, 4, 255, 75, 28, 4, 255, 66, 28, 2, 255, 66, 28, 3, 255, 64, 22, 1, 255, 67, 23, 2, 255, 67, 25, 4, 255, 59, 25, 3, 255, 62, 27, 6, 255, 72, 23, 3, 255, 60, 27, 3, 255, 59, 25, 3, 255, 63, 23, 4, 255, 66, 23, 4, 255, 74, 23, 6, 255, 71, 24, 3, 255, 68, 22, 3, 255, 58, 18, 0, 255, 56, 19, 3, 255, 61, 19, 4, 255, 63, 18, 3, 255, 65, 19, 3, 255, 63, 22, 5, 255, 55, 16, 1, 255, 58, 19, 5, 255, 67, 26, 9, 255, 56, 19, 4, 255, 54, 21, 4, 255, 60, 21, 4, 255, 60, 21, 5, 255, 57, 20, 4, 255, 55, 17, 2, 255, 54, 15, 1, 255, 53, 18, 1, 255, 56, 17, 3, 255, 56, 19, 4, 255, 53, 18, 1, 255, 57, 21, 3, 255, 49, 15, 0, 255, 57, 20, 5, 255, 60, 15, 5, 255, 57, 15, 5, 255, 54, 18, 3, 255, 54, 23, 4, 255, 57, 20, 7, 255, 56, 14, 4, 255, 48, 18, 4, 255, 48, 18, 1, 255, 57, 19, 2, 255, 53, 20, 4, 255, 49, 15, 1, 255, 55, 17, 4, 255, 61, 16, 4, 255, 54, 17, 5, 255, 44, 15, 5, 255, 47, 14, 3, 255, 51, 16, 6, 255, 44, 13, 3, 255, 54, 16, 7, 255, 52, 13, 2, 255, 43, 12, 6, 255, 31, 12, 7, 255, 39, 16, 3, 255, 60, 22, 4, 255, 59, 16, 2, 255, 56, 16, 4, 255, 53, 18, 4, 255, 52, 17, 5, 255, 46, 13, 2, 255, 35, 12, 1, 255, 39, 12, 3, 255, 45, 10, 2, 255, 45, 13, 3, 255, 37, 9, 3, 255, 44, 13, 6, 255, 44, 13, 8, 255, 40, 10, 4, 255, 42, 10, 5, 255, 43, 10, 3, 255, 53, 15, 2, 255, 70, 19, 4, 255, 63, 18, 3, 255, 61, 16, 5, 255, 47, 14, 0, 255, 60, 16, 3, 255, 52, 14, 3, 255, 49, 10, 3, 255, 51, 11, 1, 255, 53, 15, 2, 255, 53, 12, 3, 255, 52, 12, 2, 255, 50, 15, 3, 255, 45, 12, 1, 255, 47, 12, 3, 255, 47, 9, 2, 255, 54, 14, 4, 255, 63, 16, 5, 255, 72, 14, 4, 255, 61, 12, 1, 255, 55, 15, 2, 255, 58, 16, 4, 255, 61, 14, 4, 255, 58, 10, 2, 255, 54, 11, 3, 255, 48, 14, 3, 255, 43, 13, 5, 255, 36, 9, 0, 255, 38, 15, 3, 255, 43, 8, 4, 255, 41, 10, 3, 255, 36, 11, 0, 255, 43, 12, 2, 255, 41, 10, 2, 255, 41, 8, 3, 255, 49, 12, 6, 255, 46, 10, 3, 255, 42, 9, 4, 255, 43, 12, 6, 255, 34, 7, 1, 255, 38, 10, 2, 255, 48, 15, 6, 255, 43, 11, 1, 255, 35, 3, 0, 255, 33, 8, 6, 255, 27, 8, 2, 255, 26, 8, 3, 255, 23, 5, 1, 255, 23, 7, 3, 255, 21, 7, 2, 255, 18, 5, 0, 255, 25, 10, 5, 255, 25, 7, 3, 255, 27, 7, 2, 255, 34, 11, 3, 255, 45, 10, 1, 255, 51, 12, 5, 255, 41, 10, 2, 255, 42, 8, 3, 255, 45, 9, 5, 255, 42, 8, 3, 255, 1, 3, 4, 255, 1, 1, 6, 255, 3, 3, 5, 255, 5, 4, 1, 255, 8, 2, 0, 255, 9, 0, 2, 255, 10, 1, 2, 255, 10, 2, 0, 255, 10, 2, 0, 255, 10, 1, 2, 255, 11, 1, 2, 255, 11, 1, 0, 255, 12, 0, 0, 255, 14, 1, 1, 255, 13, 2, 2, 255, 13, 3, 2, 255, 12, 2, 1, 255, 12, 2, 1, 255, 14, 3, 1, 255, 11, 2, 0, 255, 12, 3, 1, 255, 12, 2, 1, 255, 13, 2, 1, 255, 17, 4, 2, 255, 18, 4, 3, 255, 13, 2, 1, 255, 10, 2, 0, 255, 13, 3, 2, 255, 14, 3, 2, 255, 14, 4, 2, 255, 12, 3, 1, 255, 8, 1, 0, 255, 15, 4, 2, 255, 15, 4, 2, 255, 16, 5, 3, 255, 17, 6, 4, 255, 13, 3, 1, 255, 15, 5, 3, 255, 16, 4, 2, 255, 14, 2, 1, 255, 15, 4, 2, 255, 16, 6, 4, 255, 16, 6, 2, 255, 16, 7, 0, 255, 16, 5, 0, 255, 20, 6, 2, 255, 20, 7, 4, 255, 16, 5, 1, 255, 19, 8, 4, 255, 20, 7, 4, 255, 20, 6, 2, 255, 20, 9, 5, 255, 20, 8, 2, 255, 23, 9, 1, 255, 20, 7, 0, 255, 21, 7, 2, 255, 23, 10, 4, 255, 25, 10, 4, 255, 26, 11, 5, 255, 24, 10, 2, 255, 28, 13, 4, 255, 30, 13, 5, 255, 29, 13, 5, 255, 26, 11, 3, 255, 28, 11, 3, 255, 30, 13, 3, 255, 30, 13, 3, 255, 30, 16, 5, 255, 27, 13, 3, 255, 27, 13, 1, 255, 31, 17, 3, 255, 36, 14, 1, 255, 39, 16, 2, 255, 35, 18, 4, 255, 33, 15, 3, 255, 36, 14, 2, 255, 35, 15, 2, 255, 35, 16, 5, 255, 24, 15, 1, 255, 31, 17, 5, 255, 36, 18, 6, 255, 31, 14, 1, 255, 35, 17, 3, 255, 32, 17, 2, 255, 32, 14, 1, 255, 34, 17, 6, 255, 35, 18, 6, 255, 36, 19, 3, 255, 41, 16, 3, 255, 40, 17, 1, 255, 37, 20, 7, 255, 44, 15, 7, 255, 34, 14, 2, 255, 33, 22, 5, 255, 29, 16, 0, 255, 36, 20, 8, 255, 39, 17, 6, 255, 41, 17, 3, 255, 46, 24, 5, 255, 42, 22, 4, 255, 42, 20, 6, 255, 47, 18, 3, 255, 48, 19, 5, 255, 45, 20, 5, 255, 44, 18, 3, 255, 41, 21, 2, 255, 42, 23, 2, 255, 44, 21, 0, 255, 45, 26, 3, 255, 50, 24, 6, 255, 48, 21, 2, 255, 40, 22, 1, 255, 48, 23, 2, 255, 49, 20, 3, 255, 52, 21, 6, 255, 42, 26, 1, 255, 44, 28, 5, 255, 49, 25, 6, 255, 50, 26, 4, 255, 51, 28, 4, 255, 51, 27, 3, 255, 51, 25, 2, 255, 53, 26, 3, 255, 57, 28, 4, 255, 53, 25, 3, 255, 53, 28, 5, 255, 54, 26, 9, 255, 52, 21, 7, 255, 44, 27, 6, 255, 49, 23, 10, 255, 52, 24, 11, 255, 45, 26, 1, 255, 46, 28, 2, 255, 52, 25, 8, 255, 57, 30, 8, 255, 56, 36, 11, 255, 50, 32, 8, 255, 55, 36, 9, 255, 60, 37, 15, 255, 66, 42, 19, 255, 71, 47, 15, 255, 75, 53, 15, 255, 68, 52, 31, 255, 64, 55, 45, 255, 61, 56, 45, 255, 68, 65, 50, 255, 67, 66, 50, 255, 67, 73, 58, 255, 70, 79, 63, 255, 73, 84, 67, 255, 78, 91, 74, 255, 81, 98, 80, 255, 80, 104, 82, 255, 84, 112, 90, 255, 83, 120, 100, 255, 85, 128, 111, 255, 87, 134, 120, 255, 94, 141, 126, 255, 97, 148, 133, 255, 98, 152, 136, 255, 103, 156, 146, 255, 106, 160, 147, 255, 108, 162, 149, 255, 109, 162, 149, 255, 112, 164, 151, 255, 116, 165, 153, 255, 115, 164, 153, 255, 112, 161, 150, 255, 116, 160, 145, 255, 113, 156, 137, 255, 110, 154, 133, 255, 108, 150, 126, 255, 105, 148, 120, 255, 102, 142, 116, 255, 103, 138, 106, 255, 102, 129, 101, 255, 98, 123, 92, 255, 96, 119, 81, 255, 96, 115, 78, 255, 88, 104, 75, 255, 90, 98, 76, 255, 85, 92, 59, 255, 88, 90, 60, 255, 88, 84, 58, 255, 83, 79, 40, 255, 85, 77, 40, 255, 81, 70, 36, 255, 81, 67, 32, 255, 80, 66, 30, 255, 81, 68, 27, 255, 77, 60, 27, 255, 79, 58, 22, 255, 82, 56, 18, 255, 77, 52, 12, 255, 71, 45, 17, 255, 74, 45, 14, 255, 75, 46, 3, 255, 71, 42, 9, 255, 67, 41, 18, 255, 69, 41, 10, 255, 70, 38, 7, 255, 70, 39, 10, 255, 66, 38, 4, 255, 66, 37, 3, 255, 68, 35, 9, 255, 73, 35, 11, 255, 77, 37, 4, 255, 75, 34, 5, 255, 72, 31, 7, 255, 75, 35, 8, 255, 75, 32, 4, 255, 73, 34, 2, 255, 77, 32, 7, 255, 78, 30, 6, 255, 75, 29, 10, 255, 74, 31, 6, 255, 74, 34, 11, 255, 68, 32, 3, 255, 70, 34, 4, 255, 68, 29, 2, 255, 73, 28, 4, 255, 68, 30, 3, 255, 67, 32, 4, 255, 74, 30, 3, 255, 69, 32, 5, 255, 74, 28, 5, 255, 79, 29, 8, 255, 72, 27, 4, 255, 65, 30, 4, 255, 67, 24, 8, 255, 72, 29, 7, 255, 71, 29, 0, 255, 67, 25, 4, 255, 65, 25, 5, 255, 66, 27, 4, 255, 69, 30, 8, 255, 71, 28, 3, 255, 72, 24, 5, 255, 69, 29, 3, 255, 63, 31, 3, 255, 62, 29, 4, 255, 69, 26, 3, 255, 69, 24, 4, 255, 78, 29, 6, 255, 77, 28, 2, 255, 79, 30, 2, 255, 83, 32, 5, 255, 81, 29, 5, 255, 78, 28, 6, 255, 77, 30, 7, 255, 72, 24, 2, 255, 73, 25, 3, 255, 77, 31, 7, 255, 71, 27, 3, 255, 71, 26, 1, 255, 74, 27, 1, 255, 72, 29, 4, 255, 67, 29, 3, 255, 73, 27, 3, 255, 75, 24, 1, 255, 70, 30, 1, 255, 69, 27, 4, 255, 68, 26, 2, 255, 68, 30, 4, 255, 68, 27, 5, 255, 68, 22, 2, 255, 72, 23, 3, 255, 69, 24, 3, 255, 64, 23, 3, 255, 65, 23, 2, 255, 64, 22, 3, 255, 67, 22, 6, 255, 65, 21, 4, 255, 66, 23, 3, 255, 69, 20, 2, 255, 66, 19, 3, 255, 65, 22, 6, 255, 60, 20, 4, 255, 58, 20, 3, 255, 60, 21, 4, 255, 63, 20, 4, 255, 64, 22, 4, 255, 59, 21, 3, 255, 58, 20, 3, 255, 63, 20, 4, 255, 65, 18, 1, 255, 62, 19, 2, 255, 59, 23, 4, 255, 56, 22, 4, 255, 48, 18, 2, 255, 56, 20, 6, 255, 59, 17, 5, 255, 56, 20, 3, 255, 56, 17, 1, 255, 55, 20, 5, 255, 55, 21, 3, 255, 64, 21, 4, 255, 60, 19, 4, 255, 50, 16, 3, 255, 55, 19, 4, 255, 60, 21, 2, 255, 59, 20, 4, 255, 62, 19, 4, 255, 56, 18, 1, 255, 51, 16, 7, 255, 49, 15, 3, 255, 48, 17, 4, 255, 55, 16, 3, 255, 68, 19, 6, 255, 61, 17, 5, 255, 48, 15, 1, 255, 40, 13, 1, 255, 47, 17, 4, 255, 46, 15, 5, 255, 47, 17, 8, 255, 48, 16, 4, 255, 44, 12, 1, 255, 48, 20, 6, 255, 50, 15, 3, 255, 52, 16, 2, 255, 45, 14, 1, 255, 46, 14, 6, 255, 48, 15, 2, 255, 62, 21, 1, 255, 68, 19, 1, 255, 76, 24, 3, 255, 71, 17, 1, 255, 72, 16, 4, 255, 61, 15, 4, 255, 40, 13, 3, 255, 38, 14, 7, 255, 35, 7, 3, 255, 38, 10, 4, 255, 39, 14, 4, 255, 40, 12, 3, 255, 39, 10, 3, 255, 39, 10, 5, 255, 39, 11, 3, 255, 40, 12, 1, 255, 59, 20, 3, 255, 71, 15, 2, 255, 69, 16, 2, 255, 58, 13, 0, 255, 61, 12, 3, 255, 69, 15, 9, 255, 55, 10, 1, 255, 52, 12, 3, 255, 52, 12, 0, 255, 51, 14, 2, 255, 51, 13, 4, 255, 52, 13, 4, 255, 51, 14, 3, 255, 49, 13, 4, 255, 48, 13, 4, 255, 50, 15, 6, 255, 51, 15, 1, 255, 61, 17, 1, 255, 67, 15, 0, 255, 67, 13, 3, 255, 56, 12, 3, 255, 49, 14, 4, 255, 52, 10, 4, 255, 47, 10, 2, 255, 43, 15, 3, 255, 39, 14, 2, 255, 36, 12, 3, 255, 34, 10, 0, 255, 39, 13, 5, 255, 34, 12, 5, 255, 37, 8, 1, 255, 44, 11, 0, 255, 47, 17, 3, 255, 46, 13, 1, 255, 44, 8, 0, 255, 43, 14, 5, 255, 35, 13, 5, 255, 32, 9, 2, 255, 35, 8, 2, 255, 36, 9, 0, 255, 41, 10, 4, 255, 45, 11, 7, 255, 38, 8, 1, 255, 39, 8, 5, 255, 29, 4, 2, 255, 27, 6, 3, 255, 27, 6, 3, 255, 25, 5, 1, 255, 25, 7, 3, 255, 25, 7, 3, 255, 24, 7, 2, 255, 21, 5, 1, 255, 17, 4, 0, 255, 25, 9, 4, 255, 34, 7, 3, 255, 37, 5, 0, 255, 40, 8, 1, 255, 41, 8, 2, 255, 40, 9, 4, 255, 41, 9, 4, 255, 39, 7, 2, 255, 5, 5, 9, 255, 0, 1, 1, 255, 2, 3, 0, 255, 4, 4, 4, 255, 6, 2, 4, 255, 8, 1, 3, 255, 8, 2, 2, 255, 6, 2, 0, 255, 7, 1, 1, 255, 9, 1, 2, 255, 10, 0, 1, 255, 11, 1, 0, 255, 11, 1, 0, 255, 9, 1, 0, 255, 11, 3, 1, 255, 13, 3, 2, 255, 12, 2, 1, 255, 13, 1, 1, 255, 16, 3, 3, 255, 12, 2, 1, 255, 13, 3, 2, 255, 12, 1, 1, 255, 12, 1, 1, 255, 14, 3, 1, 255, 17, 2, 1, 255, 13, 2, 1, 255, 9, 3, 0, 255, 12, 3, 2, 255, 11, 1, 0, 255, 12, 2, 1, 255, 11, 5, 2, 255, 8, 2, 1, 255, 11, 3, 0, 255, 14, 4, 2, 255, 14, 4, 2, 255, 13, 2, 0, 255, 19, 6, 4, 255, 16, 1, 1, 255, 19, 4, 4, 255, 16, 4, 2, 255, 13, 2, 0, 255, 13, 2, 1, 255, 15, 6, 2, 255, 17, 8, 3, 255, 16, 7, 1, 255, 19, 7, 1, 255, 18, 7, 0, 255, 18, 6, 3, 255, 14, 3, 0, 255, 18, 5, 0, 255, 19, 6, 0, 255, 20, 6, 2, 255, 24, 7, 2, 255, 24, 9, 2, 255, 19, 8, 1, 255, 19, 9, 3, 255, 21, 11, 4, 255, 20, 8, 1, 255, 25, 9, 4, 255, 23, 11, 3, 255, 22, 9, 1, 255, 26, 11, 2, 255, 27, 13, 5, 255, 26, 12, 3, 255, 26, 11, 2, 255, 33, 15, 5, 255, 32, 13, 3, 255, 31, 14, 4, 255, 28, 10, 3, 255, 32, 13, 3, 255, 35, 15, 4, 255, 36, 15, 2, 255, 35, 17, 3, 255, 31, 14, 1, 255, 37, 13, 3, 255, 38, 14, 3, 255, 31, 15, 1, 255, 33, 16, 3, 255, 29, 15, 3, 255, 23, 13, 1, 255, 30, 15, 3, 255, 36, 15, 4, 255, 30, 13, 0, 255, 33, 15, 0, 255, 34, 17, 3, 255, 34, 15, 6, 255, 38, 18, 7, 255, 37, 14, 2, 255, 37, 17, 3, 255, 38, 22, 6, 255, 40, 15, 3, 255, 43, 14, 4, 255, 38, 19, 4, 255, 36, 18, 3, 255, 38, 18, 4, 255, 35, 20, 7, 255, 38, 20, 7, 255, 32, 16, 1, 255, 34, 17, 1, 255, 36, 19, 1, 255, 40, 20, 5, 255, 43, 18, 5, 255, 48, 19, 3, 255, 51, 22, 5, 255, 46, 21, 4, 255, 43, 20, 2, 255, 40, 19, 0, 255, 35, 19, 0, 255, 43, 21, 2, 255, 49, 18, 0, 255, 53, 21, 4, 255, 45, 27, 5, 255, 48, 25, 3, 255, 49, 21, 3, 255, 46, 25, 6, 255, 46, 23, 2, 255, 54, 22, 4, 255, 46, 23, 5, 255, 47, 22, 1, 255, 52, 23, 2, 255, 53, 24, 3, 255, 59, 24, 5, 255, 53, 26, 5, 255, 53, 27, 3, 255, 50, 24, 2, 255, 51, 26, 3, 255, 47, 22, 2, 255, 51, 26, 7, 255, 47, 27, 7, 255, 54, 26, 6, 255, 56, 27, 7, 255, 49, 24, 11, 255, 49, 26, 10, 255, 55, 29, 4, 255, 57, 25, 2, 255, 53, 31, 8, 255, 51, 35, 7, 255, 64, 39, 10, 255, 62, 40, 13, 255, 63, 43, 13, 255, 74, 48, 13, 255, 66, 49, 21, 255, 65, 58, 21, 255, 65, 63, 25, 255, 63, 66, 30, 255, 65, 68, 40, 255, 69, 71, 47, 255, 71, 77, 58, 255, 72, 82, 63, 255, 73, 86, 68, 255, 76, 92, 75, 255, 81, 102, 83, 255, 84, 110, 89, 255, 86, 118, 97, 255, 84, 122, 104, 255, 84, 130, 114, 255, 89, 139, 127, 255, 95, 144, 133, 255, 99, 151, 136, 255, 99, 155, 140, 255, 102, 160, 148, 255, 105, 161, 150, 255, 106, 163, 150, 255, 108, 164, 151, 255, 112, 166, 153, 255, 115, 165, 153, 255, 114, 164, 150, 255, 113, 162, 145, 255, 115, 162, 142, 255, 113, 158, 138, 255, 112, 155, 136, 255, 109, 150, 128, 255, 106, 146, 121, 255, 105, 141, 117, 255, 103, 134, 109, 255, 101, 128, 96, 255, 98, 122, 89, 255, 95, 114, 81, 255, 91, 108, 69, 255, 88, 101, 73, 255, 85, 93, 61, 255, 86, 90, 68, 255, 85, 87, 48, 255, 83, 80, 43, 255, 81, 75, 51, 255, 79, 73, 37, 255, 78, 72, 41, 255, 77, 64, 29, 255, 81, 65, 27, 255, 82, 60, 31, 255, 83, 62, 15, 255, 82, 56, 14, 255, 76, 53, 15, 255, 74, 49, 12, 255, 73, 46, 14, 255, 75, 47, 9, 255, 72, 44, 5, 255, 70, 45, 5, 255, 67, 41, 11, 255, 69, 40, 9, 255, 71, 37, 7, 255, 69, 37, 6, 255, 66, 40, 4, 255, 68, 40, 3, 255, 69, 34, 5, 255, 75, 36, 3, 255, 78, 34, 9, 255, 75, 31, 3, 255, 75, 34, 2, 255, 75, 32, 2, 255, 78, 32, 3, 255, 73, 29, 2, 255, 76, 33, 9, 255, 75, 31, 6, 255, 73, 30, 10, 255, 68, 30, 3, 255, 70, 31, 4, 255, 73, 33, 3, 255, 72, 33, 5, 255, 71, 30, 5, 255, 73, 29, 6, 255, 67, 32, 4, 255, 65, 35, 6, 255, 72, 33, 5, 255, 78, 27, 2, 255, 70, 27, 3, 255, 63, 29, 2, 255, 71, 31, 4, 255, 71, 30, 4, 255, 68, 29, 12, 255, 64, 30, 5, 255, 66, 25, 2, 255, 67, 26, 4, 255, 66, 27, 5, 255, 65, 26, 5, 255, 72, 31, 3, 255, 72, 27, 3, 255, 69, 28, 6, 255, 64, 29, 2, 255, 67, 28, 1, 255, 72, 27, 4, 255, 71, 24, 6, 255, 73, 24, 3, 255, 77, 27, 6, 255, 79, 29, 6, 255, 79, 30, 3, 255, 79, 27, 1, 255, 79, 28, 2, 255, 78, 29, 4, 255, 75, 28, 3, 255, 74, 26, 4, 255, 76, 28, 7, 255, 73, 28, 4, 255, 72, 27, 2, 255, 75, 32, 5, 255, 74, 29, 1, 255, 74, 22, 2, 255, 74, 22, 4, 255, 74, 27, 6, 255, 72, 31, 5, 255, 70, 25, 0, 255, 70, 23, 4, 255, 74, 28, 4, 255, 73, 27, 1, 255, 71, 25, 2, 255, 68, 23, 2, 255, 68, 24, 0, 255, 74, 24, 2, 255, 76, 24, 5, 255, 62, 24, 1, 255, 65, 24, 3, 255, 67, 23, 6, 255, 70, 20, 5, 255, 66, 20, 1, 255, 56, 23, 0, 255, 66, 21, 0, 255, 69, 20, 0, 255, 69, 22, 4, 255, 63, 18, 4, 255, 57, 18, 4, 255, 54, 20, 4, 255, 55, 21, 5, 255, 57, 21, 4, 255, 59, 20, 5, 255, 61, 17, 3, 255, 63, 16, 1, 255, 62, 21, 6, 255, 55, 19, 5, 255, 55, 19, 0, 255, 49, 19, 1, 255, 56, 19, 7, 255, 58, 15, 3, 255, 54, 17, 0, 255, 56, 18, 3, 255, 61, 21, 6, 255, 53, 19, 2, 255, 53, 22, 1, 255, 54, 19, 3, 255, 63, 19, 9, 255, 53, 16, 2, 255, 53, 22, 0, 255, 66, 21, 2, 255, 53, 17, 2, 255, 51, 15, 1, 255, 52, 16, 6, 255, 48, 17, 1, 255, 48, 15, 5, 255, 55, 14, 3, 255, 53, 18, 1, 255, 54, 18, 2, 255, 53, 15, 1, 255, 49, 14, 1, 255, 50, 17, 5, 255, 51, 16, 5, 255, 48, 16, 2, 255, 53, 16, 2, 255, 52, 13, 2, 255, 49, 17, 4, 255, 53, 16, 6, 255, 51, 18, 6, 255, 43, 14, 7, 255, 51, 15, 2, 255, 50, 16, 2, 255, 52, 16, 4, 255, 71, 20, 5, 255, 75, 25, 5, 255, 68, 23, 3, 255, 72, 20, 4, 255, 64, 16, 4, 255, 44, 10, 1, 255, 41, 12, 7, 255, 35, 7, 4, 255, 34, 10, 4, 255, 36, 11, 2, 255, 41, 13, 4, 255, 41, 13, 4, 255, 40, 13, 5, 255, 36, 10, 1, 255, 41, 15, 4, 255, 68, 21, 3, 255, 66, 20, 3, 255, 66, 16, 3, 255, 68, 19, 1, 255, 72, 18, 3, 255, 54, 12, 2, 255, 52, 10, 2, 255, 49, 12, 4, 255, 53, 14, 4, 255, 54, 10, 3, 255, 47, 13, 5, 255, 45, 16, 5, 255, 55, 10, 3, 255, 56, 11, 5, 255, 54, 13, 6, 255, 45, 9, 2, 255, 49, 11, 1, 255, 54, 12, 0, 255, 63, 16, 3, 255, 58, 15, 5, 255, 40, 10, 1, 255, 35, 11, 1, 255, 42, 9, 2, 255, 44, 7, 2, 255, 41, 9, 0, 255, 41, 8, 1, 255, 39, 11, 2, 255, 39, 14, 5, 255, 34, 9, 4, 255, 31, 10, 4, 255, 36, 8, 2, 255, 47, 16, 5, 255, 62, 13, 4, 255, 63, 16, 6, 255, 49, 13, 2, 255, 38, 8, 0, 255, 39, 9, 3, 255, 42, 11, 6, 255, 42, 8, 3, 255, 40, 9, 1, 255, 38, 8, 3, 255, 34, 6, 1, 255, 33, 12, 3, 255, 35, 9, 4, 255, 30, 4, 1, 255, 24, 6, 1, 255, 26, 8, 4, 255, 22, 5, 1, 255, 22, 5, 1, 255, 23, 6, 2, 255, 27, 7, 3, 255, 22, 6, 2, 255, 19, 7, 1, 255, 22, 6, 1, 255, 30, 5, 1, 255, 38, 9, 3, 255, 38, 7, 2, 255, 41, 9, 4, 255, 34, 9, 1, 255, 36, 8, 2, 255, 36, 7, 1, 255, 55, 53, 43, 255, 26, 25, 24, 255, 3, 3, 11, 255, 0, 0, 9, 255, 3, 3, 6, 255, 4, 2, 1, 255, 4, 3, 2, 255, 5, 2, 3, 255, 5, 3, 1, 255, 6, 1, 1, 255, 7, 0, 0, 255, 9, 1, 2, 255, 10, 2, 3, 255, 11, 3, 0, 255, 10, 1, 0, 255, 11, 1, 0, 255, 12, 2, 1, 255, 13, 2, 2, 255, 15, 3, 3, 255, 12, 2, 2, 255, 13, 1, 2, 255, 13, 1, 1, 255, 13, 3, 1, 255, 14, 4, 2, 255, 21, 6, 5, 255, 18, 3, 2, 255, 12, 1, 0, 255, 15, 4, 2, 255, 15, 3, 2, 255, 15, 1, 0, 255, 18, 5, 4, 255, 16, 3, 1, 255, 12, 3, 0, 255, 14, 3, 1, 255, 15, 4, 2, 255, 16, 5, 3, 255, 16, 3, 2, 255, 18, 2, 2, 255, 15, 3, 1, 255, 15, 4, 2, 255, 15, 5, 3, 255, 15, 5, 3, 255, 16, 6, 3, 255, 17, 7, 3, 255, 15, 4, 0, 255, 14, 5, 1, 255, 19, 6, 1, 255, 22, 6, 3, 255, 22, 6, 3, 255, 16, 4, 0, 255, 16, 8, 1, 255, 22, 7, 2, 255, 24, 7, 0, 255, 25, 10, 1, 255, 23, 11, 4, 255, 18, 9, 3, 255, 18, 8, 1, 255, 21, 8, 2, 255, 22, 9, 4, 255, 21, 10, 3, 255, 20, 8, 1, 255, 24, 10, 2, 255, 25, 11, 4, 255, 27, 13, 4, 255, 25, 10, 3, 255, 31, 14, 5, 255, 29, 10, 1, 255, 28, 10, 1, 255, 30, 12, 4, 255, 32, 13, 4, 255, 33, 17, 5, 255, 33, 16, 4, 255, 34, 14, 0, 255, 32, 16, 2, 255, 28, 15, 3, 255, 28, 13, 1, 255, 32, 14, 2, 255, 35, 16, 4, 255, 32, 16, 5, 255, 25, 15, 3, 255, 32, 16, 5, 255, 39, 16, 5, 255, 35, 15, 1, 255, 43, 17, 5, 255, 37, 13, 3, 255, 36, 13, 5, 255, 29, 14, 2, 255, 29, 18, 1, 255, 38, 22, 6, 255, 33, 19, 4, 255, 33, 16, 2, 255, 36, 17, 3, 255, 35, 20, 3, 255, 38, 19, 3, 255, 44, 23, 7, 255, 32, 15, 1, 255, 36, 19, 4, 255, 40, 21, 6, 255, 41, 19, 5, 255, 40, 15, 3, 255, 43, 17, 4, 255, 43, 19, 3, 255, 44, 19, 1, 255, 44, 19, 1, 255, 41, 22, 3, 255, 43, 19, 4, 255, 44, 19, 4, 255, 42, 23, 6, 255, 51, 23, 7, 255, 55, 23, 2, 255, 48, 19, 5, 255, 37, 21, 7, 255, 43, 20, 5, 255, 49, 22, 1, 255, 50, 27, 3, 255, 54, 29, 5, 255, 48, 24, 2, 255, 47, 28, 3, 255, 48, 28, 3, 255, 51, 26, 3, 255, 50, 25, 1, 255, 55, 23, 3, 255, 54, 22, 4, 255, 55, 26, 3, 255, 49, 20, 2, 255, 52, 24, 3, 255, 51, 24, 6, 255, 52, 24, 6, 255, 59, 29, 4, 255, 53, 28, 3, 255, 52, 26, 7, 255, 56, 23, 13, 255, 55, 25, 5, 255, 49, 30, 4, 255, 49, 31, 6, 255, 55, 32, 6, 255, 62, 32, 9, 255, 69, 36, 11, 255, 61, 41, 7, 255, 58, 45, 9, 255, 66, 47, 17, 255, 56, 44, 26, 255, 55, 53, 29, 255, 64, 59, 37, 255, 64, 61, 40, 255, 64, 68, 43, 255, 67, 71, 42, 255, 69, 76, 56, 255, 71, 85, 65, 255, 76, 92, 74, 255, 77, 95, 79, 255, 80, 102, 86, 255, 80, 111, 92, 255, 85, 121, 101, 255, 87, 129, 109, 255, 86, 137, 120, 255, 90, 143, 130, 255, 98, 149, 137, 255, 104, 157, 143, 255, 100, 159, 145, 255, 101, 160, 148, 255, 107, 165, 153, 255, 110, 168, 155, 255, 109, 168, 153, 255, 111, 167, 154, 255, 114, 165, 153, 255, 114, 164, 150, 255, 116, 166, 146, 255, 112, 159, 139, 255, 112, 158, 137, 255, 107, 151, 131, 255, 109, 149, 127, 255, 107, 143, 120, 255, 103, 136, 114, 255, 101, 130, 105, 255, 99, 125, 90, 255, 99, 120, 86, 255, 93, 109, 84, 255, 87, 99, 73, 255, 88, 96, 66, 255, 84, 94, 56, 255, 89, 87, 55, 255, 84, 86, 34, 255, 79, 78, 33, 255, 80, 69, 43, 255, 79, 70, 39, 255, 82, 67, 35, 255, 81, 61, 25, 255, 83, 60, 28, 255, 81, 58, 23, 255, 79, 55, 23, 255, 77, 51, 25, 255, 71, 47, 11, 255, 73, 47, 5, 255, 79, 45, 13, 255, 79, 42, 15, 255, 71, 40, 9, 255, 68, 41, 6, 255, 68, 39, 10, 255, 65, 37, 4, 255, 67, 37, 7, 255, 70, 37, 8, 255, 73, 38, 3, 255, 69, 38, 2, 255, 70, 37, 9, 255, 76, 32, 4, 255, 68, 28, 7, 255, 73, 31, 9, 255, 78, 31, 5, 255, 76, 28, 3, 255, 75, 31, 6, 255, 75, 31, 5, 255, 72, 31, 3, 255, 76, 35, 2, 255, 75, 30, 0, 255, 75, 32, 3, 255, 78, 29, 3, 255, 81, 29, 3, 255, 77, 29, 5, 255, 78, 31, 9, 255, 75, 28, 6, 255, 76, 32, 9, 255, 74, 32, 6, 255, 70, 28, 0, 255, 74, 33, 3, 255, 75, 31, 9, 255, 69, 28, 6, 255, 71, 31, 3, 255, 74, 33, 5, 255, 62, 27, 4, 255, 63, 26, 2, 255, 74, 30, 8, 255, 73, 27, 3, 255, 71, 26, 4, 255, 68, 25, 6, 255, 71, 26, 2, 255, 75, 26, 5, 255, 70, 24, 1, 255, 70, 27, 5, 255, 70, 28, 2, 255, 63, 28, 7, 255, 62, 30, 12, 255, 71, 32, 1, 255, 75, 30, 3, 255, 75, 30, 4, 255, 77, 32, 5, 255, 75, 30, 2, 255, 72, 26, 0, 255, 71, 27, 0, 255, 73, 29, 5, 255, 74, 28, 7, 255, 70, 23, 1, 255, 76, 31, 2, 255, 72, 29, 1, 255, 70, 26, 3, 255, 71, 25, 6, 255, 70, 22, 4, 255, 79, 24, 5, 255, 70, 26, 3, 255, 60, 31, 3, 255, 68, 22, 1, 255, 71, 26, 4, 255, 69, 25, 1, 255, 72, 25, 2, 255, 68, 25, 4, 255, 63, 27, 3, 255, 62, 27, 2, 255, 66, 27, 3, 255, 67, 25, 3, 255, 65, 26, 2, 255, 67, 22, 2, 255, 63, 24, 5, 255, 59, 21, 3, 255, 63, 23, 3, 255, 60, 24, 3, 255, 64, 23, 4, 255, 63, 20, 3, 255, 65, 20, 4, 255, 63, 18, 3, 255, 61, 19, 3, 255, 60, 21, 2, 255, 56, 20, 1, 255, 56, 23, 5, 255, 58, 23, 3, 255, 60, 22, 2, 255, 65, 23, 4, 255, 58, 22, 3, 255, 51, 22, 5, 255, 58, 18, 1, 255, 56, 17, 3, 255, 56, 18, 4, 255, 61, 21, 3, 255, 57, 20, 1, 255, 53, 19, 4, 255, 54, 17, 2, 255, 57, 17, 1, 255, 52, 18, 2, 255, 47, 19, 1, 255, 54, 19, 3, 255, 55, 16, 3, 255, 55, 18, 1, 255, 56, 20, 0, 255, 59, 16, 3, 255, 63, 18, 7, 255, 53, 18, 4, 255, 44, 16, 2, 255, 51, 15, 8, 255, 52, 17, 5, 255, 50, 18, 4, 255, 52, 14, 2, 255, 55, 18, 5, 255, 50, 17, 4, 255, 50, 18, 6, 255, 51, 11, 1, 255, 51, 17, 3, 255, 53, 16, 2, 255, 54, 16, 3, 255, 46, 13, 2, 255, 51, 15, 6, 255, 46, 13, 2, 255, 44, 14, 7, 255, 59, 16, 1, 255, 67, 23, 3, 255, 64, 23, 3, 255, 67, 20, 0, 255, 76, 21, 4, 255, 65, 20, 5, 255, 68, 18, 5, 255, 66, 15, 2, 255, 51, 14, 1, 255, 41, 14, 5, 255, 36, 14, 3, 255, 35, 13, 2, 255, 39, 11, 6, 255, 44, 12, 3, 255, 43, 10, 1, 255, 44, 14, 5, 255, 37, 7, 0, 255, 40, 11, 3, 255, 61, 15, 1, 255, 72, 16, 7, 255, 72, 18, 5, 255, 75, 23, 0, 255, 73, 17, 0, 255, 59, 14, 2, 255, 39, 13, 0, 255, 45, 12, 4, 255, 56, 11, 6, 255, 48, 14, 4, 255, 44, 13, 4, 255, 51, 11, 3, 255, 54, 12, 2, 255, 51, 13, 1, 255, 46, 13, 3, 255, 41, 13, 4, 255, 40, 12, 1, 255, 46, 13, 2, 255, 51, 12, 2, 255, 46, 11, 3, 255, 40, 10, 1, 255, 38, 11, 2, 255, 42, 12, 6, 255, 43, 11, 6, 255, 43, 9, 4, 255, 41, 10, 4, 255, 39, 10, 3, 255, 45, 10, 5, 255, 35, 8, 2, 255, 35, 11, 5, 255, 32, 12, 3, 255, 45, 13, 4, 255, 56, 11, 3, 255, 59, 13, 4, 255, 52, 12, 3, 255, 41, 12, 4, 255, 34, 10, 1, 255, 43, 9, 2, 255, 50, 10, 3, 255, 41, 9, 1, 255, 38, 10, 5, 255, 28, 5, 0, 255, 27, 12, 2, 255, 30, 9, 3, 255, 31, 5, 2, 255, 29, 7, 1, 255, 27, 10, 3, 255, 22, 6, 1, 255, 21, 5, 0, 255, 20, 5, 0, 255, 22, 7, 1, 255, 19, 7, 1, 255, 23, 6, 2, 255, 26, 6, 3, 255, 25, 7, 2, 255, 37, 11, 4, 255, 38, 6, 1, 255, 38, 10, 6, 255, 31, 7, 1, 255, 34, 8, 2, 255, 37, 8, 2, 255, 71, 61, 57, 255, 77, 71, 68, 255, 57, 56, 55, 255, 23, 25, 25, 255, 5, 7, 8, 255, 0, 0, 6, 255, 2, 1, 8, 255, 4, 4, 6, 255, 5, 4, 4, 255, 6, 4, 0, 255, 5, 2, 0, 255, 7, 2, 3, 255, 8, 2, 4, 255, 12, 0, 0, 255, 11, 0, 0, 255, 11, 2, 1, 255, 12, 2, 1, 255, 11, 2, 0, 255, 10, 3, 1, 255, 16, 4, 3, 255, 18, 3, 3, 255, 16, 3, 2, 255, 15, 5, 3, 255, 11, 1, 1, 255, 14, 1, 0, 255, 16, 0, 0, 255, 13, 2, 0, 255, 13, 2, 1, 255, 13, 2, 0, 255, 14, 2, 2, 255, 21, 7, 5, 255, 17, 1, 1, 255, 17, 3, 2, 255, 18, 5, 4, 255, 16, 5, 4, 255, 14, 3, 2, 255, 12, 2, 1, 255, 16, 5, 3, 255, 14, 4, 2, 255, 14, 4, 2, 255, 14, 5, 3, 255, 13, 4, 1, 255, 15, 4, 3, 255, 17, 5, 4, 255, 16, 3, 2, 255, 19, 6, 4, 255, 18, 5, 3, 255, 17, 7, 4, 255, 16, 5, 3, 255, 15, 3, 1, 255, 20, 7, 3, 255, 21, 9, 2, 255, 23, 9, 1, 255, 21, 7, 0, 255, 21, 10, 3, 255, 18, 6, 3, 255, 20, 7, 3, 255, 23, 8, 4, 255, 17, 6, 2, 255, 20, 11, 2, 255, 25, 14, 4, 255, 26, 13, 3, 255, 23, 10, 0, 255, 27, 12, 5, 255, 26, 10, 3, 255, 31, 14, 5, 255, 31, 14, 3, 255, 28, 13, 4, 255, 26, 13, 4, 255, 25, 12, 2, 255, 30, 12, 3, 255, 34, 15, 3, 255, 33, 11, 0, 255, 35, 11, 2, 255, 29, 12, 4, 255, 25, 9, 0, 255, 33, 12, 2, 255, 36, 13, 3, 255, 28, 15, 2, 255, 28, 13, 2, 255, 33, 14, 3, 255, 35, 14, 2, 255, 40, 15, 2, 255, 37, 12, 3, 255, 30, 13, 1, 255, 33, 13, 2, 255, 37, 21, 7, 255, 32, 19, 2, 255, 36, 15, 3, 255, 32, 14, 1, 255, 40, 19, 5, 255, 39, 15, 3, 255, 38, 17, 4, 255, 37, 20, 4, 255, 35, 19, 3, 255, 33, 15, 1, 255, 38, 15, 2, 255, 37, 17, 3, 255, 36, 17, 3, 255, 37, 18, 3, 255, 41, 19, 3, 255, 40, 17, 1, 255, 46, 18, 3, 255, 40, 19, 2, 255, 43, 20, 4, 255, 43, 17, 2, 255, 41, 20, 3, 255, 46, 21, 5, 255, 49, 23, 4, 255, 46, 23, 6, 255, 41, 21, 6, 255, 38, 21, 5, 255, 51, 23, 4, 255, 49, 22, 1, 255, 48, 25, 3, 255, 48, 24, 4, 255, 47, 24, 5, 255, 39, 23, 4, 255, 48, 23, 5, 255, 53, 23, 6, 255, 42, 21, 4, 255, 46, 26, 5, 255, 49, 26, 2, 255, 48, 25, 1, 255, 50, 24, 5, 255, 54, 26, 7, 255, 50, 23, 7, 255, 51, 23, 7, 255, 54, 30, 3, 255, 50, 28, 11, 255, 55, 31, 4, 255, 59, 28, 0, 255, 58, 27, 2, 255, 52, 29, 6, 255, 56, 33, 12, 255, 65, 33, 6, 255, 66, 36, 6, 255, 57, 35, 9, 255, 58, 34, 8, 255, 59, 39, 9, 255, 57, 49, 18, 255, 59, 50, 24, 255, 59, 55, 34, 255, 64, 55, 40, 255, 67, 62, 43, 255, 61, 65, 45, 255, 65, 70, 56, 255, 71, 77, 65, 255, 71, 84, 69, 255, 74, 93, 78, 255, 78, 99, 84, 255, 83, 108, 93, 255, 79, 113, 95, 255, 84, 124, 103, 255, 89, 133, 112, 255, 85, 141, 121, 255, 93, 151, 134, 255, 101, 153, 139, 255, 105, 159, 146, 255, 103, 163, 151, 255, 105, 164, 154, 255, 110, 168, 156, 255, 110, 169, 155, 255, 107, 169, 154, 255, 110, 169, 154, 255, 115, 167, 154, 255, 114, 165, 150, 255, 114, 162, 145, 255, 113, 159, 140, 255, 110, 155, 135, 255, 106, 150, 129, 255, 105, 146, 120, 255, 105, 140, 116, 255, 102, 133, 113, 255, 100, 126, 101, 255, 99, 120, 97, 255, 97, 115, 91, 255, 91, 106, 75, 255, 91, 100, 68, 255, 88, 93, 62, 255, 90, 88, 56, 255, 86, 81, 50, 255, 85, 79, 39, 255, 83, 75, 37, 255, 79, 67, 33, 255, 80, 67, 33, 255, 78, 60, 31, 255, 87, 62, 30, 255, 88, 59, 22, 255, 83, 53, 18, 255, 79, 49, 22, 255, 74, 45, 15, 255, 73, 45, 12, 255, 73, 47, 7, 255, 69, 43, 8, 255, 65, 37, 13, 255, 65, 36, 14, 255, 72, 39, 4, 255, 70, 40, 6, 255, 64, 35, 3, 255, 70, 36, 11, 255, 68, 34, 11, 255, 70, 37, 4, 255, 70, 36, 2, 255, 71, 34, 8, 255, 73, 34, 4, 255, 71, 30, 2, 255, 72, 28, 6, 255, 74, 30, 10, 255, 76, 31, 4, 255, 77, 31, 4, 255, 76, 31, 3, 255, 72, 33, 1, 255, 77, 33, 5, 255, 79, 31, 7, 255, 69, 28, 8, 255, 71, 32, 5, 255, 78, 32, 6, 255, 78, 28, 5, 255, 76, 28, 7, 255, 71, 27, 6, 255, 74, 24, 5, 255, 77, 26, 2, 255, 75, 32, 2, 255, 67, 35, 3, 255, 70, 25, 6, 255, 68, 23, 8, 255, 67, 31, 5, 255, 70, 28, 0, 255, 67, 26, 3, 255, 68, 29, 5, 255, 71, 30, 2, 255, 71, 25, 2, 255, 70, 26, 3, 255, 65, 28, 3, 255, 63, 26, 6, 255, 65, 24, 5, 255, 69, 25, 5, 255, 70, 27, 4, 255, 63, 26, 4, 255, 69, 29, 4, 255, 78, 33, 3, 255, 73, 28, 5, 255, 77, 30, 1, 255, 77, 31, 0, 255, 74, 30, 1, 255, 75, 28, 4, 255, 75, 27, 5, 255, 72, 25, 3, 255, 71, 25, 3, 255, 73, 28, 3, 255, 73, 25, 2, 255, 73, 28, 2, 255, 71, 28, 3, 255, 67, 24, 3, 255, 70, 25, 5, 255, 72, 26, 6, 255, 68, 24, 0, 255, 76, 27, 3, 255, 71, 24, 6, 255, 66, 23, 5, 255, 74, 31, 4, 255, 72, 26, 1, 255, 64, 27, 3, 255, 61, 27, 7, 255, 62, 24, 5, 255, 67, 23, 3, 255, 67, 26, 4, 255, 58, 25, 1, 255, 66, 26, 2, 255, 67, 24, 3, 255, 61, 24, 4, 255, 62, 23, 4, 255, 64, 21, 3, 255, 59, 22, 3, 255, 59, 18, 5, 255, 60, 18, 5, 255, 56, 17, 3, 255, 57, 20, 5, 255, 57, 20, 5, 255, 58, 20, 3, 255, 62, 21, 6, 255, 59, 16, 5, 255, 58, 16, 3, 255, 63, 20, 4, 255, 64, 20, 3, 255, 54, 17, 3, 255, 48, 18, 6, 255, 52, 19, 2, 255, 56, 17, 5, 255, 52, 16, 2, 255, 57, 22, 2, 255, 60, 20, 2, 255, 54, 17, 7, 255, 52, 19, 3, 255, 58, 17, 1, 255, 62, 18, 8, 255, 52, 16, 2, 255, 53, 16, 0, 255, 58, 16, 4, 255, 53, 15, 6, 255, 56, 18, 5, 255, 65, 18, 2, 255, 57, 18, 3, 255, 48, 17, 2, 255, 53, 16, 11, 255, 53, 12, 5, 255, 47, 15, 4, 255, 48, 16, 4, 255, 53, 15, 4, 255, 48, 17, 3, 255, 54, 17, 3, 255, 47, 16, 1, 255, 50, 13, 3, 255, 47, 12, 5, 255, 50, 16, 5, 255, 48, 17, 5, 255, 41, 15, 3, 255, 49, 13, 4, 255, 53, 13, 2, 255, 47, 15, 2, 255, 43, 13, 3, 255, 59, 16, 4, 255, 69, 17, 2, 255, 70, 24, 6, 255, 70, 21, 3, 255, 74, 18, 1, 255, 86, 20, 5, 255, 83, 21, 4, 255, 67, 21, 4, 255, 49, 16, 3, 255, 44, 13, 4, 255, 41, 11, 4, 255, 38, 12, 8, 255, 40, 10, 2, 255, 45, 14, 3, 255, 43, 14, 4, 255, 39, 9, 2, 255, 40, 11, 6, 255, 33, 10, 3, 255, 49, 13, 8, 255, 63, 16, 4, 255, 70, 17, 0, 255, 63, 11, 3, 255, 52, 11, 4, 255, 40, 13, 2, 255, 42, 15, 4, 255, 44, 13, 2, 255, 48, 13, 4, 255, 49, 12, 4, 255, 51, 11, 1, 255, 58, 17, 2, 255, 63, 18, 2, 255, 51, 15, 3, 255, 41, 12, 4, 255, 39, 10, 4, 255, 39, 9, 1, 255, 39, 8, 0, 255, 41, 9, 3, 255, 45, 6, 3, 255, 42, 6, 0, 255, 39, 11, 3, 255, 39, 12, 5, 255, 38, 8, 3, 255, 37, 10, 4, 255, 38, 9, 2, 255, 35, 9, 1, 255, 35, 9, 2, 255, 34, 10, 5, 255, 35, 8, 3, 255, 36, 6, 0, 255, 39, 10, 2, 255, 44, 13, 4, 255, 42, 9, 2, 255, 36, 10, 3, 255, 33, 9, 3, 255, 39, 8, 2, 255, 43, 8, 1, 255, 37, 12, 1, 255, 35, 8, 2, 255, 33, 9, 5, 255, 25, 11, 3, 255, 26, 6, 0, 255, 32, 9, 5, 255, 42, 8, 5, 255, 40, 10, 7, 255, 33, 7, 4, 255, 29, 7, 4, 255, 23, 7, 2, 255, 22, 5, 1, 255, 22, 5, 1, 255, 22, 4, 0, 255, 27, 7, 4, 255, 28, 5, 1, 255, 34, 10, 3, 255, 35, 8, 1, 255, 37, 9, 4, 255, 31, 6, 2, 255, 35, 5, 3, 255, 36, 7, 4, 255, 40, 41, 48, 255, 51, 45, 41, 255, 68, 61, 51, 255, 71, 63, 53, 255, 61, 52, 52, 255, 33, 34, 33, 255, 7, 9, 18, 255, 0, 0, 5, 255, 6, 4, 8, 255, 5, 3, 3, 255, 8, 5, 0, 255, 8, 4, 3, 255, 10, 6, 0, 255, 12, 4, 0, 255, 11, 1, 1, 255, 13, 2, 2, 255, 14, 3, 1, 255, 9, 0, 1, 255, 9, 1, 2, 255, 12, 2, 1, 255, 13, 2, 1, 255, 12, 1, 0, 255, 14, 3, 1, 255, 13, 2, 1, 255, 12, 1, 0, 255, 15, 4, 2, 255, 16, 2, 1, 255, 12, 1, 0, 255, 14, 4, 2, 255, 15, 3, 2, 255, 16, 4, 2, 255, 16, 4, 2, 255, 17, 4, 4, 255, 20, 5, 3, 255, 19, 4, 1, 255, 17, 4, 3, 255, 20, 5, 4, 255, 21, 3, 1, 255, 20, 4, 2, 255, 15, 4, 3, 255, 12, 3, 0, 255, 11, 3, 0, 255, 13, 3, 1, 255, 15, 4, 1, 255, 16, 4, 1, 255, 15, 3, 1, 255, 13, 4, 4, 255, 14, 6, 4, 255, 14, 5, 2, 255, 18, 4, 0, 255, 24, 4, 2, 255, 25, 6, 3, 255, 23, 6, 1, 255, 24, 8, 1, 255, 23, 9, 3, 255, 21, 8, 3, 255, 23, 9, 4, 255, 21, 7, 2, 255, 22, 5, 0, 255, 24, 9, 1, 255, 21, 11, 2, 255, 27, 10, 4, 255, 28, 9, 3, 255, 20, 8, 1, 255, 32, 9, 3, 255, 30, 9, 1, 255, 32, 13, 5, 255, 26, 11, 3, 255, 23, 10, 1, 255, 24, 12, 3, 255, 29, 13, 5, 255, 27, 10, 2, 255, 31, 13, 1, 255, 33, 13, 2, 255, 31, 11, 2, 255, 30, 13, 3, 255, 32, 13, 5, 255, 38, 19, 6, 255, 28, 12, 1, 255, 31, 13, 1, 255, 38, 17, 3, 255, 34, 13, 1, 255, 38, 16, 4, 255, 34, 16, 4, 255, 31, 18, 3, 255, 31, 13, 2, 255, 32, 14, 5, 255, 36, 15, 7, 255, 34, 16, 1, 255, 37, 17, 2, 255, 35, 13, 2, 255, 36, 14, 4, 255, 37, 15, 3, 255, 37, 15, 2, 255, 36, 14, 1, 255, 38, 18, 4, 255, 37, 17, 3, 255, 36, 18, 5, 255, 36, 19, 5, 255, 38, 18, 1, 255, 44, 20, 4, 255, 44, 18, 6, 255, 48, 19, 9, 255, 40, 18, 5, 255, 36, 19, 4, 255, 35, 21, 2, 255, 37, 21, 0, 255, 43, 21, 3, 255, 42, 21, 6, 255, 35, 20, 9, 255, 37, 20, 5, 255, 43, 21, 9, 255, 49, 21, 8, 255, 49, 20, 2, 255, 47, 24, 5, 255, 44, 22, 5, 255, 43, 22, 3, 255, 45, 24, 7, 255, 48, 21, 7, 255, 47, 22, 5, 255, 48, 24, 2, 255, 56, 26, 6, 255, 50, 25, 4, 255, 42, 23, 6, 255, 43, 25, 10, 255, 45, 25, 6, 255, 50, 25, 2, 255, 50, 25, 9, 255, 43, 26, 11, 255, 44, 26, 4, 255, 52, 28, 5, 255, 52, 22, 4, 255, 51, 30, 3, 255, 54, 27, 9, 255, 58, 31, 11, 255, 61, 33, 8, 255, 63, 32, 2, 255, 53, 37, 4, 255, 54, 35, 14, 255, 59, 37, 16, 255, 54, 47, 11, 255, 56, 50, 22, 255, 58, 53, 32, 255, 61, 60, 25, 255, 65, 65, 37, 255, 63, 67, 52, 255, 64, 72, 59, 255, 68, 78, 58, 255, 75, 88, 69, 255, 77, 95, 74, 255, 77, 102, 79, 255, 83, 113, 94, 255, 83, 122, 100, 255, 87, 130, 108, 255, 91, 137, 119, 255, 96, 145, 129, 255, 100, 152, 137, 255, 104, 159, 144, 255, 104, 163, 148, 255, 104, 165, 152, 255, 114, 169, 158, 255, 118, 169, 158, 255, 114, 171, 157, 255, 116, 172, 157, 255, 112, 169, 154, 255, 110, 168, 153, 255, 113, 165, 151, 255, 113, 161, 146, 255, 111, 158, 137, 255, 108, 152, 131, 255, 109, 150, 127, 255, 105, 144, 117, 255, 101, 136, 108, 255, 99, 128, 106, 255, 95, 121, 91, 255, 92, 117, 82, 255, 89, 107, 82, 255, 90, 102, 73, 255, 87, 94, 60, 255, 87, 91, 60, 255, 83, 83, 48, 255, 81, 79, 41, 255, 87, 77, 38, 255, 86, 72, 39, 255, 79, 66, 27, 255, 82, 65, 21, 255, 80, 59, 29, 255, 76, 54, 22, 255, 85, 52, 16, 255, 81, 53, 18, 255, 74, 49, 17, 255, 82, 44, 9, 255, 72, 45, 16, 255, 72, 39, 19, 255, 73, 37, 13, 255, 68, 37, 10, 255, 68, 37, 17, 255, 69, 35, 4, 255, 70, 35, 7, 255, 67, 32, 10, 255, 71, 36, 6, 255, 70, 35, 5, 255, 70, 32, 4, 255, 72, 31, 6, 255, 72, 30, 3, 255, 75, 35, 1, 255, 76, 33, 1, 255, 74, 30, 2, 255, 74, 34, 5, 255, 74, 35, 1, 255, 76, 32, 4, 255, 75, 32, 6, 255, 73, 33, 3, 255, 74, 31, 5, 255, 77, 32, 6, 255, 76, 32, 6, 255, 75, 30, 2, 255, 77, 29, 4, 255, 66, 29, 3, 255, 65, 27, 2, 255, 76, 32, 8, 255, 70, 32, 5, 255, 73, 29, 4, 255, 80, 31, 10, 255, 67, 26, 6, 255, 70, 27, 9, 255, 71, 27, 6, 255, 71, 26, 3, 255, 73, 26, 9, 255, 71, 25, 7, 255, 74, 29, 4, 255, 70, 26, 0, 255, 72, 28, 0, 255, 68, 26, 4, 255, 65, 26, 3, 255, 70, 27, 3, 255, 66, 24, 3, 255, 64, 30, 5, 255, 73, 29, 6, 255, 74, 27, 4, 255, 79, 26, 3, 255, 72, 23, 1, 255, 69, 22, 4, 255, 76, 30, 6, 255, 78, 30, 5, 255, 79, 30, 6, 255, 74, 27, 4, 255, 75, 28, 5, 255, 74, 28, 5, 255, 75, 28, 4, 255, 76, 30, 3, 255, 73, 26, 5, 255, 70, 24, 2, 255, 72, 24, 1, 255, 71, 25, 1, 255, 73, 28, 5, 255, 73, 25, 4, 255, 75, 25, 0, 255, 74, 26, 3, 255, 71, 28, 6, 255, 70, 25, 2, 255, 72, 27, 4, 255, 69, 25, 6, 255, 64, 23, 3, 255, 65, 24, 1, 255, 73, 27, 5, 255, 66, 25, 3, 255, 62, 24, 1, 255, 68, 25, 4, 255, 64, 24, 4, 255, 60, 22, 3, 255, 57, 21, 4, 255, 55, 20, 3, 255, 60, 25, 5, 255, 58, 25, 3, 255, 61, 20, 0, 255, 65, 21, 7, 255, 60, 21, 3, 255, 61, 23, 2, 255, 59, 20, 6, 255, 56, 19, 3, 255, 58, 21, 3, 255, 56, 17, 3, 255, 56, 20, 5, 255, 59, 19, 5, 255, 61, 16, 1, 255, 61, 15, 1, 255, 59, 18, 5, 255, 50, 17, 2, 255, 58, 20, 5, 255, 58, 17, 2, 255, 57, 18, 0, 255, 58, 20, 2, 255, 56, 21, 3, 255, 53, 18, 2, 255, 56, 17, 4, 255, 53, 16, 7, 255, 53, 18, 4, 255, 56, 21, 0, 255, 57, 16, 3, 255, 55, 10, 5, 255, 63, 19, 3, 255, 56, 18, 3, 255, 55, 16, 4, 255, 57, 15, 5, 255, 54, 17, 9, 255, 42, 14, 6, 255, 52, 17, 6, 255, 52, 13, 1, 255, 52, 19, 3, 255, 46, 18, 2, 255, 50, 15, 4, 255, 52, 15, 5, 255, 50, 14, 4, 255, 50, 13, 3, 255, 49, 14, 2, 255, 44, 15, 2, 255, 44, 15, 2, 255, 48, 14, 4, 255, 45, 13, 6, 255, 44, 12, 4, 255, 40, 10, 4, 255, 46, 13, 4, 255, 53, 15, 2, 255, 63, 20, 7, 255, 70, 20, 3, 255, 65, 16, 5, 255, 64, 14, 3, 255, 75, 22, 7, 255, 67, 16, 5, 255, 54, 13, 2, 255, 41, 12, 5, 255, 30, 9, 7, 255, 37, 9, 2, 255, 44, 10, 3, 255, 43, 13, 2, 255, 37, 11, 2, 255, 34, 13, 4, 255, 41, 12, 4, 255, 38, 12, 6, 255, 33, 9, 1, 255, 38, 10, 3, 255, 42, 11, 1, 255, 45, 11, 2, 255, 47, 10, 5, 255, 44, 12, 2, 255, 42, 13, 3, 255, 40, 11, 1, 255, 49, 14, 3, 255, 54, 15, 4, 255, 52, 12, 0, 255, 64, 18, 5, 255, 69, 16, 7, 255, 61, 13, 1, 255, 48, 11, 3, 255, 39, 10, 6, 255, 41, 11, 3, 255, 42, 13, 3, 255, 45, 9, 1, 255, 46, 6, 2, 255, 45, 11, 6, 255, 44, 11, 3, 255, 42, 9, 2, 255, 41, 12, 6, 255, 40, 11, 5, 255, 36, 10, 3, 255, 33, 12, 3, 255, 33, 10, 2, 255, 35, 8, 2, 255, 41, 11, 5, 255, 37, 9, 3, 255, 42, 9, 1, 255, 41, 13, 3, 255, 33, 9, 2, 255, 38, 8, 3, 255, 41, 7, 5, 255, 40, 9, 4, 255, 33, 7, 0, 255, 29, 7, 2, 255, 31, 8, 7, 255, 35, 11, 4, 255, 35, 8, 2, 255, 31, 5, 1, 255, 35, 12, 5, 255, 43, 9, 3, 255, 41, 8, 4, 255, 37, 8, 5, 255, 29, 7, 3, 255, 29, 7, 2, 255, 31, 9, 3, 255, 29, 5, 1, 255, 21, 5, 1, 255, 22, 7, 2, 255, 26, 5, 2, 255, 26, 7, 1, 255, 30, 8, 2, 255, 33, 6, 3, 255, 26, 4, 2, 255, 34, 7, 5, 255, 34, 4, 2, 255, 22, 30, 52, 255, 33, 34, 56, 255, 34, 32, 54, 255, 40, 38, 50, 255, 65, 52, 62, 255, 79, 67, 62, 255, 64, 59, 53, 255, 33, 32, 23, 255, 12, 11, 12, 255, 0, 0, 4, 255, 3, 2, 3, 255, 6, 3, 5, 255, 6, 4, 0, 255, 6, 4, 3, 255, 7, 3, 2, 255, 9, 1, 0, 255, 11, 1, 1, 255, 12, 1, 5, 255, 12, 3, 2, 255, 10, 2, 0, 255, 11, 1, 0, 255, 13, 1, 1, 255, 15, 4, 2, 255, 15, 4, 2, 255, 12, 1, 0, 255, 15, 4, 2, 255, 18, 2, 2, 255, 10, 0, 0, 255, 14, 2, 0, 255, 16, 4, 2, 255, 15, 3, 1, 255, 12, 1, 0, 255, 13, 1, 1, 255, 18, 4, 1, 255, 20, 5, 2, 255, 17, 3, 2, 255, 19, 4, 3, 255, 25, 6, 3, 255, 22, 4, 3, 255, 17, 3, 2, 255, 14, 4, 2, 255, 14, 4, 2, 255, 17, 4, 3, 255, 20, 5, 3, 255, 20, 6, 3, 255, 16, 5, 2, 255, 15, 5, 4, 255, 15, 6, 5, 255, 19, 7, 3, 255, 20, 7, 1, 255, 22, 5, 2, 255, 21, 6, 4, 255, 18, 6, 0, 255, 20, 7, 0, 255, 20, 7, 1, 255, 20, 7, 1, 255, 21, 8, 2, 255, 21, 8, 0, 255, 23, 7, 0, 255, 26, 11, 3, 255, 20, 10, 1, 255, 24, 8, 2, 255, 26, 8, 1, 255, 18, 8, 0, 255, 27, 9, 3, 255, 28, 10, 4, 255, 26, 11, 3, 255, 22, 9, 1, 255, 26, 13, 4, 255, 27, 14, 5, 255, 24, 9, 1, 255, 35, 17, 8, 255, 32, 14, 5, 255, 31, 14, 4, 255, 29, 13, 3, 255, 29, 12, 3, 255, 29, 12, 2, 255, 27, 13, 2, 255, 33, 18, 4, 255, 32, 14, 2, 255, 36, 14, 2, 255, 39, 15, 4, 255, 38, 14, 1, 255, 33, 14, 5, 255, 27, 12, 1, 255, 32, 12, 2, 255, 33, 16, 7, 255, 33, 13, 5, 255, 33, 16, 2, 255, 39, 20, 6, 255, 36, 16, 3, 255, 35, 17, 3, 255, 36, 17, 3, 255, 39, 16, 3, 255, 37, 16, 2, 255, 38, 19, 3, 255, 36, 17, 2, 255, 32, 14, 1, 255, 35, 16, 3, 255, 38, 17, 3, 255, 42, 20, 4, 255, 41, 15, 4, 255, 39, 17, 3, 255, 34, 18, 2, 255, 37, 20, 5, 255, 37, 20, 3, 255, 41, 22, 3, 255, 41, 22, 4, 255, 35, 18, 4, 255, 36, 18, 6, 255, 38, 21, 3, 255, 40, 18, 5, 255, 44, 18, 5, 255, 48, 21, 2, 255, 44, 21, 3, 255, 49, 22, 1, 255, 48, 26, 1, 255, 47, 26, 2, 255, 46, 24, 6, 255, 37, 19, 4, 255, 48, 24, 6, 255, 56, 22, 1, 255, 56, 25, 2, 255, 49, 23, 4, 255, 49, 23, 3, 255, 53, 29, 3, 255, 59, 26, 0, 255, 59, 28, 5, 255, 48, 25, 10, 255, 49, 26, 3, 255, 57, 28, 6, 255, 64, 31, 13, 255, 55, 32, 4, 255, 59, 30, 11, 255, 55, 24, 6, 255, 50, 33, 7, 255, 59, 31, 3, 255, 64, 31, 8, 255, 58, 38, 16, 255, 55, 44, 19, 255, 59, 47, 14, 255, 51, 48, 26, 255, 54, 51, 39, 255, 59, 58, 37, 255, 64, 63, 47, 255, 67, 68, 52, 255, 71, 77, 45, 255, 70, 81, 56, 255, 76, 89, 72, 255, 78, 97, 79, 255, 79, 106, 83, 255, 81, 114, 97, 255, 82, 123, 106, 255, 89, 134, 115, 255, 95, 143, 126, 255, 101, 152, 137, 255, 103, 156, 143, 255, 106, 163, 148, 255, 107, 166, 154, 255, 108, 168, 158, 255, 113, 173, 158, 255, 119, 172, 160, 255, 116, 173, 159, 255, 116, 170, 157, 255, 114, 170, 156, 255, 114, 170, 156, 255, 114, 165, 152, 255, 113, 162, 144, 255, 112, 158, 137, 255, 108, 152, 131, 255, 105, 149, 123, 255, 105, 142, 114, 255, 102, 134, 105, 255, 101, 129, 101, 255, 93, 122, 85, 255, 88, 112, 73, 255, 84, 101, 75, 255, 87, 98, 70, 255, 80, 88, 54, 255, 80, 84, 61, 255, 77, 76, 60, 255, 78, 75, 40, 255, 85, 73, 26, 255, 86, 66, 27, 255, 81, 60, 26, 255, 82, 59, 21, 255, 86, 58, 18, 255, 84, 55, 13, 255, 77, 50, 14, 255, 73, 50, 12, 255, 74, 49, 10, 255, 76, 43, 12, 255, 69, 40, 11, 255, 75, 39, 15, 255, 74, 39, 8, 255, 70, 40, 4, 255, 65, 35, 10, 255, 72, 37, 12, 255, 73, 32, 9, 255, 70, 30, 6, 255, 72, 35, 4, 255, 75, 38, 6, 255, 70, 32, 5, 255, 70, 31, 4, 255, 73, 33, 5, 255, 75, 32, 4, 255, 80, 35, 8, 255, 77, 32, 8, 255, 75, 34, 5, 255, 72, 32, 0, 255, 76, 33, 6, 255, 74, 30, 6, 255, 72, 28, 4, 255, 76, 32, 7, 255, 75, 31, 5, 255, 77, 33, 6, 255, 80, 33, 7, 255, 80, 29, 5, 255, 74, 33, 6, 255, 74, 31, 4, 255, 77, 30, 3, 255, 69, 32, 1, 255, 72, 31, 3, 255, 73, 25, 3, 255, 71, 26, 6, 255, 72, 26, 6, 255, 75, 28, 3, 255, 74, 26, 3, 255, 72, 24, 7, 255, 71, 24, 4, 255, 75, 29, 3, 255, 70, 25, 5, 255, 69, 28, 3, 255, 66, 28, 2, 255, 64, 23, 6, 255, 70, 26, 5, 255, 71, 28, 4, 255, 70, 27, 4, 255, 70, 26, 2, 255, 71, 27, 4, 255, 72, 23, 1, 255, 73, 28, 5, 255, 75, 24, 4, 255, 74, 26, 3, 255, 75, 27, 4, 255, 78, 28, 5, 255, 75, 26, 3, 255, 72, 26, 2, 255, 71, 26, 3, 255, 71, 25, 1, 255, 73, 26, 2, 255, 71, 25, 2, 255, 71, 25, 2, 255, 75, 27, 4, 255, 73, 26, 2, 255, 71, 26, 3, 255, 69, 26, 2, 255, 73, 27, 2, 255, 65, 22, 7, 255, 65, 22, 9, 255, 74, 26, 3, 255, 73, 26, 0, 255, 70, 22, 3, 255, 69, 22, 5, 255, 69, 24, 1, 255, 76, 30, 7, 255, 62, 24, 3, 255, 59, 27, 3, 255, 63, 24, 2, 255, 70, 24, 4, 255, 69, 25, 7, 255, 63, 20, 4, 255, 57, 16, 2, 255, 61, 21, 6, 255, 60, 20, 3, 255, 62, 19, 6, 255, 65, 23, 2, 255, 61, 18, 2, 255, 62, 16, 6, 255, 66, 21, 3, 255, 66, 21, 4, 255, 62, 18, 5, 255, 60, 22, 2, 255, 58, 23, 4, 255, 58, 21, 3, 255, 60, 18, 1, 255, 63, 21, 6, 255, 58, 19, 7, 255, 56, 19, 4, 255, 57, 19, 3, 255, 58, 19, 3, 255, 57, 19, 3, 255, 54, 18, 0, 255, 55, 20, 1, 255, 58, 21, 4, 255, 57, 19, 4, 255, 52, 18, 1, 255, 54, 19, 1, 255, 53, 18, 1, 255, 56, 18, 3, 255, 62, 19, 5, 255, 61, 20, 2, 255, 56, 17, 3, 255, 58, 15, 6, 255, 52, 14, 3, 255, 43, 13, 0, 255, 46, 13, 6, 255, 48, 18, 6, 255, 51, 18, 3, 255, 49, 18, 3, 255, 40, 18, 1, 255, 41, 14, 1, 255, 45, 13, 3, 255, 50, 17, 4, 255, 56, 16, 4, 255, 55, 15, 4, 255, 49, 18, 3, 255, 47, 15, 0, 255, 49, 14, 3, 255, 42, 12, 4, 255, 39, 13, 3, 255, 43, 16, 6, 255, 37, 11, 4, 255, 36, 12, 1, 255, 43, 14, 3, 255, 52, 15, 0, 255, 53, 13, 5, 255, 46, 12, 2, 255, 39, 13, 0, 255, 32, 11, 1, 255, 35, 15, 2, 255, 32, 12, 0, 255, 35, 10, 4, 255, 42, 10, 5, 255, 44, 9, 1, 255, 44, 15, 4, 255, 39, 8, 1, 255, 37, 12, 4, 255, 42, 11, 3, 255, 36, 10, 5, 255, 32, 9, 1, 255, 36, 9, 5, 255, 43, 12, 5, 255, 44, 13, 1, 255, 44, 13, 4, 255, 42, 12, 2, 255, 48, 13, 7, 255, 46, 12, 3, 255, 45, 12, 3, 255, 49, 15, 5, 255, 49, 12, 2, 255, 51, 12, 3, 255, 52, 10, 2, 255, 55, 11, 0, 255, 52, 12, 4, 255, 40, 8, 4, 255, 42, 6, 0, 255, 41, 12, 1, 255, 47, 13, 4, 255, 41, 10, 2, 255, 43, 11, 4, 255, 43, 11, 4, 255, 39, 11, 1, 255, 38, 9, 1, 255, 34, 9, 1, 255, 39, 9, 1, 255, 38, 8, 1, 255, 42, 9, 3, 255, 47, 11, 5, 255, 44, 14, 6, 255, 31, 8, 1, 255, 40, 9, 2, 255, 43, 10, 3, 255, 40, 9, 3, 255, 39, 10, 5, 255, 32, 5, 1, 255, 35, 9, 2, 255, 36, 8, 3, 255, 35, 6, 5, 255, 30, 5, 6, 255, 29, 5, 1, 255, 34, 6, 1, 255, 33, 8, 7, 255, 27, 8, 2, 255, 31, 7, 0, 255, 29, 5, 1, 255, 28, 6, 3, 255, 25, 5, 2, 255, 27, 5, 3, 255, 33, 10, 4, 255, 29, 6, 4, 255, 20, 5, 2, 255, 21, 8, 2, 255, 25, 6, 2, 255, 24, 6, 1, 255, 27, 7, 1, 255, 32, 6, 2, 255, 26, 8, 2, 255, 30, 8, 3, 255, 28, 4, 2, 255, 31, 28, 40, 255, 32, 31, 44, 255, 20, 27, 42, 255, 20, 29, 48, 255, 30, 28, 54, 255, 46, 40, 49, 255, 62, 55, 58, 255, 68, 63, 52, 255, 62, 62, 46, 255, 38, 41, 29, 255, 11, 13, 14, 255, 2, 1, 14, 255, 2, 2, 11, 255, 3, 3, 13, 255, 5, 4, 10, 255, 8, 7, 3, 255, 11, 4, 0, 255, 13, 4, 2, 255, 12, 3, 3, 255, 10, 2, 1, 255, 11, 1, 0, 255, 13, 2, 1, 255, 15, 4, 2, 255, 14, 3, 1, 255, 12, 1, 0, 255, 14, 2, 1, 255, 16, 1, 1, 255, 14, 2, 1, 255, 16, 1, 0, 255, 16, 1, 1, 255, 17, 2, 2, 255, 15, 3, 1, 255, 16, 4, 1, 255, 19, 4, 1, 255, 20, 5, 2, 255, 16, 1, 0, 255, 17, 2, 1, 255, 19, 3, 0, 255, 21, 5, 2, 255, 19, 5, 2, 255, 17, 5, 2, 255, 18, 5, 1, 255, 20, 4, 2, 255, 21, 5, 3, 255, 21, 6, 3, 255, 21, 7, 3, 255, 18, 4, 1, 255, 16, 3, 1, 255, 19, 4, 1, 255, 20, 6, 0, 255, 21, 5, 1, 255, 17, 6, 3, 255, 15, 5, 1, 255, 19, 8, 2, 255, 20, 8, 2, 255, 21, 8, 2, 255, 21, 6, 1, 255, 22, 8, 0, 255, 21, 8, 0, 255, 22, 8, 3, 255, 19, 8, 2, 255, 23, 9, 4, 255, 25, 8, 4, 255, 22, 11, 2, 255, 22, 10, 3, 255, 18, 6, 0, 255, 21, 9, 1, 255, 25, 12, 3, 255, 24, 10, 1, 255, 24, 11, 2, 255, 26, 9, 1, 255, 31, 12, 4, 255, 30, 12, 5, 255, 24, 9, 2, 255, 28, 15, 5, 255, 25, 10, 1, 255, 31, 13, 4, 255, 32, 12, 5, 255, 31, 13, 4, 255, 30, 13, 2, 255, 28, 12, 0, 255, 32, 15, 2, 255, 34, 15, 1, 255, 30, 12, 3, 255, 30, 14, 5, 255, 32, 14, 4, 255, 29, 13, 2, 255, 32, 13, 4, 255, 31, 14, 2, 255, 33, 15, 1, 255, 34, 16, 2, 255, 34, 16, 2, 255, 36, 18, 3, 255, 38, 18, 4, 255, 36, 17, 1, 255, 33, 17, 3, 255, 38, 19, 5, 255, 35, 16, 3, 255, 34, 17, 3, 255, 35, 18, 3, 255, 38, 19, 4, 255, 39, 17, 3, 255, 36, 17, 0, 255, 37, 18, 2, 255, 43, 19, 6, 255, 46, 17, 4, 255, 49, 20, 6, 255, 43, 20, 5, 255, 37, 17, 2, 255, 39, 17, 3, 255, 43, 22, 4, 255, 44, 19, 5, 255, 46, 18, 4, 255, 49, 24, 4, 255, 48, 23, 5, 255, 50, 25, 5, 255, 48, 26, 2, 255, 47, 22, 0, 255, 49, 22, 4, 255, 43, 23, 7, 255, 45, 26, 6, 255, 48, 24, 2, 255, 48, 25, 9, 255, 43, 23, 7, 255, 46, 26, 6, 255, 48, 27, 5, 255, 52, 24, 6, 255, 51, 25, 3, 255, 53, 24, 2, 255, 59, 31, 7, 255, 61, 30, 4, 255, 63, 25, 4, 255, 58, 27, 2, 255, 58, 28, 6, 255, 57, 27, 11, 255, 55, 31, 8, 255, 58, 31, 2, 255, 50, 29, 8, 255, 57, 36, 9, 255, 56, 38, 17, 255, 56, 45, 19, 255, 55, 48, 27, 255, 57, 53, 40, 255, 59, 57, 41, 255, 62, 62, 49, 255, 67, 70, 54, 255, 71, 81, 48, 255, 74, 86, 63, 255, 74, 90, 77, 255, 79, 100, 87, 255, 79, 110, 94, 255, 79, 118, 106, 255, 82, 127, 115, 255, 89, 139, 121, 255, 95, 148, 132, 255, 101, 157, 143, 255, 104, 161, 148, 255, 106, 165, 152, 255, 109, 170, 156, 255, 112, 172, 162, 255, 112, 173, 159, 255, 119, 176, 163, 255, 117, 176, 161, 255, 117, 172, 159, 255, 117, 171, 158, 255, 117, 168, 155, 255, 114, 164, 148, 255, 113, 160, 141, 255, 114, 156, 135, 255, 107, 152, 127, 255, 101, 146, 119, 255, 101, 138, 109, 255, 102, 129, 99, 255, 96, 121, 93, 255, 92, 116, 86, 255, 88, 107, 76, 255, 83, 96, 75, 255, 82, 89, 66, 255, 81, 85, 58, 255, 76, 82, 50, 255, 72, 78, 35, 255, 73, 72, 30, 255, 78, 66, 28, 255, 81, 61, 30, 255, 81, 59, 26, 255, 75, 56, 19, 255, 79, 54, 14, 255, 85, 53, 15, 255, 72, 49, 11, 255, 72, 46, 10, 255, 81, 44, 11, 255, 77, 44, 12, 255, 76, 41, 3, 255, 77, 40, 9, 255, 75, 38, 12, 255, 70, 36, 10, 255, 68, 35, 8, 255, 73, 35, 7, 255, 75, 33, 8, 255, 74, 31, 8, 255, 74, 31, 3, 255, 73, 31, 3, 255, 72, 32, 3, 255, 70, 32, 2, 255, 70, 31, 4, 255, 74, 29, 7, 255, 75, 28, 5, 255, 74, 27, 7, 255, 78, 33, 8, 255, 75, 32, 0, 255, 75, 29, 3, 255, 79, 32, 10, 255, 78, 28, 7, 255, 76, 28, 5, 255, 74, 30, 5, 255, 75, 29, 6, 255, 77, 29, 6, 255, 75, 24, 3, 255, 81, 31, 10, 255, 78, 30, 8, 255, 78, 28, 6, 255, 74, 30, 3, 255, 75, 31, 6, 255, 73, 26, 4, 255, 76, 27, 5, 255, 76, 28, 6, 255, 74, 29, 2, 255, 72, 27, 0, 255, 75, 27, 7, 255, 78, 28, 7, 255, 70, 25, 3, 255, 65, 23, 6, 255, 64, 26, 4, 255, 63, 25, 4, 255, 64, 23, 6, 255, 69, 27, 4, 255, 72, 29, 6, 255, 78, 26, 5, 255, 71, 25, 3, 255, 70, 32, 7, 255, 71, 27, 4, 255, 73, 27, 4, 255, 81, 28, 7, 255, 76, 29, 3, 255, 74, 27, 1, 255, 77, 25, 2, 255, 75, 26, 3, 255, 71, 27, 2, 255, 70, 27, 3, 255, 69, 26, 0, 255, 73, 27, 2, 255, 71, 27, 3, 255, 70, 26, 3, 255, 73, 27, 4, 255, 72, 26, 2, 255, 70, 25, 2, 255, 68, 23, 9, 255, 69, 21, 5, 255, 67, 24, 2, 255, 68, 28, 3, 255, 69, 25, 2, 255, 66, 22, 2, 255, 66, 26, 4, 255, 58, 24, 1, 255, 61, 26, 2, 255, 65, 23, 3, 255, 63, 19, 2, 255, 65, 21, 3, 255, 69, 23, 4, 255, 67, 24, 3, 255, 61, 19, 0, 255, 63, 22, 4, 255, 61, 19, 2, 255, 55, 16, 1, 255, 59, 19, 6, 255, 60, 21, 4, 255, 58, 18, 4, 255, 61, 19, 4, 255, 63, 21, 4, 255, 61, 17, 3, 255, 61, 15, 3, 255, 63, 18, 2, 255, 61, 22, 2, 255, 57, 20, 2, 255, 58, 20, 2, 255, 56, 18, 1, 255, 55, 18, 4, 255, 51, 18, 6, 255, 56, 17, 5, 255, 56, 17, 4, 255, 55, 18, 2, 255, 50, 16, 0, 255, 53, 18, 3, 255, 57, 17, 5, 255, 54, 15, 4, 255, 54, 16, 1, 255, 55, 19, 0, 255, 55, 21, 3, 255, 52, 17, 7, 255, 56, 18, 4, 255, 60, 21, 0, 255, 54, 18, 2, 255, 59, 16, 6, 255, 57, 12, 4, 255, 46, 14, 1, 255, 43, 17, 4, 255, 51, 14, 6, 255, 45, 16, 4, 255, 49, 19, 6, 255, 47, 14, 3, 255, 40, 15, 2, 255, 44, 16, 4, 255, 49, 14, 2, 255, 53, 18, 4, 255, 53, 14, 2, 255, 53, 13, 3, 255, 50, 17, 3, 255, 47, 15, 0, 255, 47, 15, 3, 255, 40, 12, 1, 255, 40, 12, 1, 255, 40, 12, 5, 255, 40, 14, 9, 255, 33, 10, 4, 255, 34, 9, 3, 255, 43, 15, 4, 255, 45, 14, 5, 255, 45, 12, 4, 255, 38, 8, 3, 255, 38, 10, 8, 255, 43, 15, 8, 255, 41, 10, 0, 255, 43, 11, 2, 255, 38, 12, 5, 255, 39, 13, 3, 255, 34, 10, 1, 255, 41, 10, 4, 255, 39, 12, 4, 255, 38, 10, 1, 255, 34, 9, 5, 255, 34, 11, 4, 255, 31, 10, 5, 255, 41, 16, 5, 255, 44, 15, 1, 255, 43, 15, 3, 255, 43, 11, 1, 255, 46, 10, 4, 255, 46, 12, 4, 255, 43, 9, 1, 255, 45, 12, 3, 255, 47, 14, 4, 255, 47, 14, 4, 255, 44, 13, 3, 255, 51, 13, 0, 255, 52, 13, 2, 255, 46, 11, 5, 255, 47, 9, 2, 255, 40, 10, 1, 255, 41, 12, 4, 255, 41, 8, 1, 255, 42, 12, 2, 255, 44, 14, 4, 255, 46, 13, 2, 255, 40, 14, 3, 255, 39, 12, 5, 255, 42, 9, 2, 255, 37, 8, 0, 255, 40, 10, 2, 255, 45, 13, 6, 255, 47, 11, 6, 255, 40, 6, 2, 255, 38, 9, 3, 255, 43, 10, 4, 255, 43, 6, 3, 255, 34, 6, 1, 255, 27, 9, 1, 255, 37, 14, 6, 255, 41, 9, 5, 255, 38, 5, 2, 255, 32, 5, 3, 255, 34, 8, 4, 255, 33, 8, 4, 255, 27, 7, 5, 255, 19, 4, 1, 255, 25, 7, 2, 255, 22, 6, 2, 255, 20, 5, 4, 255, 21, 6, 5, 255, 23, 4, 3, 255, 25, 5, 2, 255, 25, 4, 3, 255, 19, 4, 1, 255, 21, 6, 3, 255, 26, 6, 2, 255, 26, 5, 1, 255, 27, 8, 2, 255, 30, 7, 2, 255, 27, 6, 0, 255, 28, 4, 1, 255, 27, 3, 0, 255, 19, 21, 30, 255, 27, 22, 34, 255, 26, 22, 35, 255, 26, 26, 39, 255, 24, 25, 50, 255, 29, 38, 50, 255, 33, 40, 46, 255, 43, 43, 42, 255, 62, 58, 63, 255, 72, 67, 61, 255, 50, 47, 41, 255, 21, 24, 29, 255, 7, 13, 23, 255, 6, 5, 14, 255, 4, 3, 14, 255, 5, 6, 11, 255, 5, 5, 2, 255, 8, 5, 1, 255, 10, 3, 5, 255, 11, 3, 3, 255, 11, 2, 0, 255, 14, 3, 2, 255, 14, 2, 0, 255, 12, 1, 0, 255, 13, 3, 1, 255, 12, 2, 0, 255, 14, 1, 0, 255, 14, 2, 1, 255, 18, 1, 1, 255, 20, 3, 2, 255, 22, 5, 5, 255, 18, 5, 4, 255, 20, 6, 3, 255, 19, 5, 2, 255, 19, 4, 1, 255, 20, 5, 2, 255, 21, 6, 3, 255, 18, 3, 0, 255, 19, 4, 1, 255, 19, 4, 1, 255, 19, 6, 1, 255, 20, 5, 0, 255, 22, 3, 1, 255, 23, 4, 3, 255, 21, 4, 1, 255, 23, 6, 2, 255, 22, 5, 3, 255, 22, 5, 2, 255, 22, 5, 1, 255, 22, 6, 1, 255, 18, 5, 0, 255, 19, 5, 1, 255, 21, 6, 1, 255, 24, 8, 3, 255, 21, 8, 3, 255, 21, 7, 4, 255, 18, 6, 0, 255, 21, 10, 0, 255, 19, 6, 0, 255, 17, 6, 0, 255, 18, 5, 1, 255, 21, 7, 3, 255, 22, 8, 3, 255, 23, 9, 2, 255, 25, 9, 4, 255, 20, 7, 1, 255, 23, 10, 2, 255, 29, 13, 6, 255, 26, 11, 2, 255, 24, 11, 2, 255, 29, 12, 4, 255, 27, 10, 2, 255, 26, 9, 2, 255, 24, 10, 3, 255, 23, 10, 2, 255, 27, 14, 4, 255, 28, 10, 2, 255, 33, 9, 5, 255, 31, 8, 3, 255, 29, 11, 3, 255, 28, 14, 3, 255, 29, 16, 3, 255, 27, 13, 1, 255, 32, 14, 7, 255, 26, 11, 2, 255, 31, 14, 5, 255, 30, 16, 4, 255, 32, 13, 1, 255, 30, 13, 2, 255, 34, 15, 4, 255, 30, 13, 1, 255, 34, 16, 3, 255, 35, 16, 4, 255, 38, 19, 5, 255, 35, 17, 2, 255, 31, 16, 2, 255, 36, 17, 3, 255, 35, 16, 2, 255, 34, 17, 4, 255, 31, 16, 3, 255, 34, 19, 3, 255, 43, 23, 7, 255, 39, 22, 4, 255, 36, 21, 2, 255, 39, 20, 3, 255, 39, 18, 1, 255, 41, 19, 5, 255, 40, 19, 3, 255, 40, 19, 3, 255, 40, 18, 4, 255, 37, 20, 3, 255, 45, 20, 5, 255, 43, 18, 3, 255, 38, 18, 2, 255, 45, 20, 4, 255, 36, 19, 7, 255, 36, 21, 4, 255, 47, 20, 3, 255, 48, 17, 2, 255, 46, 22, 4, 255, 41, 25, 0, 255, 44, 27, 3, 255, 40, 22, 10, 255, 42, 23, 5, 255, 48, 27, 6, 255, 45, 25, 3, 255, 52, 23, 9, 255, 53, 27, 3, 255, 62, 29, 3, 255, 59, 32, 7, 255, 61, 29, 5, 255, 62, 25, 4, 255, 57, 27, 6, 255, 54, 27, 5, 255, 55, 25, 12, 255, 53, 26, 5, 255, 52, 29, 6, 255, 43, 29, 9, 255, 59, 35, 8, 255, 57, 35, 15, 255, 57, 42, 20, 255, 59, 48, 23, 255, 61, 56, 30, 255, 58, 59, 33, 255, 60, 64, 43, 255, 64, 71, 58, 255, 67, 78, 63, 255, 74, 87, 67, 255, 75, 93, 78, 255, 77, 104, 91, 255, 77, 113, 99, 255, 80, 124, 114, 255, 84, 134, 121, 255, 91, 144, 128, 255, 97, 153, 140, 255, 99, 160, 148, 255, 103, 165, 155, 255, 109, 169, 158, 255, 114, 173, 162, 255, 114, 175, 164, 255, 117, 176, 165, 255, 121, 176, 166, 255, 118, 176, 163, 255, 117, 172, 159, 255, 115, 171, 157, 255, 113, 167, 153, 255, 113, 162, 146, 255, 112, 157, 137, 255, 111, 153, 133, 255, 104, 149, 125, 255, 96, 143, 115, 255, 97, 133, 103, 255, 98, 124, 92, 255, 93, 116, 86, 255, 88, 108, 80, 255, 85, 101, 69, 255, 83, 94, 66, 255, 80, 86, 53, 255, 79, 83, 46, 255, 76, 77, 39, 255, 73, 73, 35, 255, 73, 69, 32, 255, 76, 65, 29, 255, 78, 59, 26, 255, 73, 54, 26, 255, 74, 52, 18, 255, 81, 51, 11, 255, 80, 47, 12, 255, 71, 44, 11, 255, 71, 42, 14, 255, 72, 37, 14, 255, 70, 37, 15, 255, 78, 38, 9, 255, 73, 36, 8, 255, 70, 34, 9, 255, 70, 34, 8, 255, 74, 36, 7, 255, 75, 35, 8, 255, 72, 32, 5, 255, 75, 32, 7, 255, 74, 29, 4, 255, 75, 29, 3, 255, 78, 33, 5, 255, 75, 35, 6, 255, 71, 32, 4, 255, 76, 30, 6, 255, 76, 28, 2, 255, 76, 28, 6, 255, 77, 31, 8, 255, 76, 31, 4, 255, 75, 28, 4, 255, 77, 29, 4, 255, 84, 30, 7, 255, 79, 30, 6, 255, 73, 29, 3, 255, 73, 27, 2, 255, 79, 30, 6, 255, 78, 31, 6, 255, 78, 31, 5, 255, 76, 29, 4, 255, 77, 31, 2, 255, 79, 32, 2, 255, 79, 31, 3, 255, 78, 29, 4, 255, 77, 27, 5, 255, 73, 27, 4, 255, 71, 29, 2, 255, 70, 29, 2, 255, 69, 23, 5, 255, 75, 25, 5, 255, 69, 21, 3, 255, 68, 26, 8, 255, 65, 26, 2, 255, 65, 24, 6, 255, 67, 23, 4, 255, 70, 29, 0, 255, 71, 28, 3, 255, 76, 27, 4, 255, 71, 27, 4, 255, 64, 26, 2, 255, 75, 29, 7, 255, 70, 26, 2, 255, 72, 26, 3, 255, 75, 30, 4, 255, 76, 28, 3, 255, 78, 26, 2, 255, 78, 27, 3, 255, 73, 26, 2, 255, 69, 29, 5, 255, 70, 27, 2, 255, 73, 28, 3, 255, 71, 28, 3, 255, 68, 26, 2, 255, 69, 24, 3, 255, 71, 24, 3, 255, 72, 26, 4, 255, 75, 26, 5, 255, 73, 26, 4, 255, 67, 23, 5, 255, 65, 23, 7, 255, 65, 26, 4, 255, 64, 26, 2, 255, 70, 26, 6, 255, 69, 24, 4, 255, 65, 26, 3, 255, 65, 26, 5, 255, 61, 21, 3, 255, 62, 25, 5, 255, 59, 24, 3, 255, 61, 24, 5, 255, 60, 23, 4, 255, 59, 22, 3, 255, 59, 22, 2, 255, 61, 24, 6, 255, 58, 22, 4, 255, 58, 21, 2, 255, 57, 19, 6, 255, 59, 21, 6, 255, 57, 21, 0, 255, 53, 19, 2, 255, 58, 20, 6, 255, 60, 20, 4, 255, 58, 20, 3, 255, 58, 22, 3, 255, 58, 20, 2, 255, 57, 20, 4, 255, 58, 21, 6, 255, 55, 19, 4, 255, 56, 17, 6, 255, 54, 16, 3, 255, 55, 20, 5, 255, 50, 19, 1, 255, 51, 17, 2, 255, 56, 16, 5, 255, 54, 15, 4, 255, 57, 18, 4, 255, 53, 16, 1, 255, 50, 16, 2, 255, 49, 17, 5, 255, 56, 18, 3, 255, 59, 18, 1, 255, 54, 17, 5, 255, 51, 15, 4, 255, 53, 14, 4, 255, 49, 16, 5, 255, 46, 17, 5, 255, 51, 14, 5, 255, 45, 14, 4, 255, 50, 15, 5, 255, 54, 12, 5, 255, 46, 14, 3, 255, 49, 17, 6, 255, 56, 14, 4, 255, 51, 15, 3, 255, 52, 15, 6, 255, 51, 14, 5, 255, 46, 16, 5, 255, 44, 16, 3, 255, 45, 15, 5, 255, 38, 13, 4, 255, 44, 12, 4, 255, 39, 7, 1, 255, 39, 10, 6, 255, 43, 13, 9, 255, 40, 11, 6, 255, 44, 12, 2, 255, 40, 14, 5, 255, 38, 14, 4, 255, 42, 14, 5, 255, 43, 15, 7, 255, 38, 13, 4, 255, 37, 12, 3, 255, 41, 14, 6, 255, 39, 12, 4, 255, 37, 14, 3, 255, 37, 10, 2, 255, 42, 10, 5, 255, 43, 9, 4, 255, 39, 11, 3, 255, 40, 10, 5, 255, 40, 12, 4, 255, 29, 11, 3, 255, 38, 17, 3, 255, 41, 13, 1, 255, 44, 12, 4, 255, 45, 10, 0, 255, 44, 11, 2, 255, 48, 14, 5, 255, 48, 12, 4, 255, 48, 12, 3, 255, 46, 12, 3, 255, 46, 12, 4, 255, 47, 13, 4, 255, 53, 14, 3, 255, 47, 12, 2, 255, 42, 12, 4, 255, 45, 10, 2, 255, 42, 8, 2, 255, 42, 9, 4, 255, 46, 11, 1, 255, 50, 14, 3, 255, 48, 11, 3, 255, 51, 12, 1, 255, 48, 12, 0, 255, 34, 10, 3, 255, 23, 7, 1, 255, 31, 13, 3, 255, 33, 11, 1, 255, 32, 7, 0, 255, 33, 7, 1, 255, 34, 9, 5, 255, 34, 10, 4, 255, 35, 7, 4, 255, 37, 9, 4, 255, 37, 9, 3, 255, 33, 8, 0, 255, 35, 9, 2, 255, 41, 11, 4, 255, 46, 11, 5, 255, 35, 9, 4, 255, 35, 10, 6, 255, 31, 6, 2, 255, 24, 3, 0, 255, 23, 7, 3, 255, 25, 6, 2, 255, 21, 7, 2, 255, 19, 6, 3, 255, 20, 7, 5, 255, 21, 4, 2, 255, 18, 4, 1, 255, 23, 5, 4, 255, 19, 4, 2, 255, 21, 5, 2, 255, 27, 6, 3, 255, 26, 7, 2, 255, 28, 8, 3, 255, 30, 8, 3, 255, 27, 6, 2, 255, 29, 5, 1, 255, 33, 7, 3, 255, 15, 13, 28, 255, 19, 14, 24, 255, 17, 18, 23, 255, 14, 19, 35, 255, 23, 22, 58, 255, 28, 27, 43, 255, 32, 29, 38, 255, 35, 33, 44, 255, 33, 38, 65, 255, 35, 43, 50, 255, 39, 43, 36, 255, 38, 36, 30, 255, 34, 28, 30, 255, 26, 23, 23, 255, 19, 18, 23, 255, 7, 8, 25, 255, 3, 4, 22, 255, 7, 6, 12, 255, 6, 5, 2, 255, 8, 4, 1, 255, 9, 4, 1, 255, 14, 5, 3, 255, 14, 3, 1, 255, 12, 1, 0, 255, 13, 3, 1, 255, 11, 1, 0, 255, 13, 1, 0, 255, 15, 4, 2, 255, 18, 2, 1, 255, 21, 3, 1, 255, 22, 5, 2, 255, 20, 4, 3, 255, 21, 6, 2, 255, 19, 4, 1, 255, 20, 5, 2, 255, 23, 6, 2, 255, 24, 6, 3, 255, 18, 4, 2, 255, 19, 4, 2, 255, 18, 3, 0, 255, 20, 5, 0, 255, 23, 5, 0, 255, 24, 4, 2, 255, 23, 4, 3, 255, 20, 4, 3, 255, 23, 6, 1, 255, 26, 8, 2, 255, 28, 7, 2, 255, 26, 6, 2, 255, 24, 7, 5, 255, 18, 5, 0, 255, 26, 4, 1, 255, 28, 7, 2, 255, 25, 6, 1, 255, 22, 6, 3, 255, 19, 5, 2, 255, 17, 6, 0, 255, 20, 10, 2, 255, 20, 10, 1, 255, 20, 9, 3, 255, 20, 6, 3, 255, 19, 6, 2, 255, 19, 8, 0, 255, 27, 9, 3, 255, 26, 5, 1, 255, 26, 8, 2, 255, 23, 7, 0, 255, 26, 7, 2, 255, 28, 10, 3, 255, 25, 13, 3, 255, 23, 10, 2, 255, 26, 12, 3, 255, 27, 10, 3, 255, 23, 9, 2, 255, 23, 11, 3, 255, 26, 12, 5, 255, 22, 7, 0, 255, 25, 9, 2, 255, 30, 11, 4, 255, 29, 10, 3, 255, 29, 14, 3, 255, 30, 16, 3, 255, 30, 12, 1, 255, 31, 13, 3, 255, 25, 11, 2, 255, 30, 13, 5, 255, 26, 12, 2, 255, 33, 16, 4, 255, 31, 16, 3, 255, 34, 14, 4, 255, 30, 12, 3, 255, 34, 16, 5, 255, 31, 12, 1, 255, 36, 16, 5, 255, 34, 16, 3, 255, 29, 16, 0, 255, 34, 16, 2, 255, 35, 16, 2, 255, 33, 17, 4, 255, 27, 15, 2, 255, 29, 16, 2, 255, 37, 18, 1, 255, 39, 21, 4, 255, 36, 21, 2, 255, 35, 19, 0, 255, 33, 19, 1, 255, 34, 20, 3, 255, 37, 18, 1, 255, 42, 21, 3, 255, 38, 17, 4, 255, 34, 17, 4, 255, 44, 19, 5, 255, 40, 17, 3, 255, 35, 19, 5, 255, 43, 20, 5, 255, 36, 17, 7, 255, 37, 22, 7, 255, 44, 24, 5, 255, 48, 23, 6, 255, 41, 21, 5, 255, 43, 24, 6, 255, 42, 19, 2, 255, 40, 20, 10, 255, 51, 27, 3, 255, 52, 24, 1, 255, 55, 28, 3, 255, 60, 26, 6, 255, 63, 32, 2, 255, 65, 31, 4, 255, 51, 25, 5, 255, 52, 26, 1, 255, 60, 25, 5, 255, 55, 26, 12, 255, 49, 25, 5, 255, 46, 24, 10, 255, 48, 33, 5, 255, 47, 29, 15, 255, 52, 26, 12, 255, 64, 33, 9, 255, 52, 36, 13, 255, 55, 41, 19, 255, 54, 51, 23, 255, 56, 57, 24, 255, 58, 62, 35, 255, 63, 66, 46, 255, 68, 70, 59, 255, 75, 79, 64, 255, 75, 88, 66, 255, 77, 97, 78, 255, 78, 107, 90, 255, 78, 118, 98, 255, 82, 130, 117, 255, 88, 138, 126, 255, 96, 149, 134, 255, 100, 158, 145, 255, 100, 163, 153, 255, 104, 169, 160, 255, 113, 174, 164, 255, 117, 177, 167, 255, 117, 178, 169, 255, 122, 177, 166, 255, 123, 174, 165, 255, 118, 175, 162, 255, 118, 174, 159, 255, 115, 173, 157, 255, 112, 167, 151, 255, 112, 162, 145, 255, 109, 155, 135, 255, 105, 150, 129, 255, 102, 147, 123, 255, 98, 139, 113, 255, 95, 129, 100, 255, 93, 120, 88, 255, 92, 113, 84, 255, 89, 106, 79, 255, 80, 93, 60, 255, 81, 88, 54, 255, 80, 83, 44, 255, 79, 78, 38, 255, 78, 67, 42, 255, 77, 64, 38, 255, 78, 63, 28, 255, 81, 62, 19, 255, 81, 57, 16, 255, 74, 51, 19, 255, 74, 46, 21, 255, 75, 46, 10, 255, 73, 44, 6, 255, 71, 39, 11, 255, 74, 43, 12, 255, 70, 43, 4, 255, 70, 37, 9, 255, 72, 32, 9, 255, 67, 32, 11, 255, 68, 33, 10, 255, 74, 35, 7, 255, 74, 32, 5, 255, 74, 33, 8, 255, 72, 34, 6, 255, 73, 34, 7, 255, 75, 32, 8, 255, 78, 32, 8, 255, 76, 31, 3, 255, 78, 35, 4, 255, 76, 34, 4, 255, 78, 32, 2, 255, 81, 34, 0, 255, 82, 32, 4, 255, 77, 29, 6, 255, 77, 31, 5, 255, 77, 30, 7, 255, 78, 32, 3, 255, 84, 30, 3, 255, 78, 27, 1, 255, 73, 31, 3, 255, 81, 33, 6, 255, 78, 28, 2, 255, 72, 29, 1, 255, 75, 31, 5, 255, 75, 30, 4, 255, 72, 30, 0, 255, 82, 31, 1, 255, 81, 30, 2, 255, 77, 27, 1, 255, 76, 27, 6, 255, 71, 28, 5, 255, 68, 31, 3, 255, 70, 32, 6, 255, 67, 24, 5, 255, 74, 25, 6, 255, 72, 23, 1, 255, 70, 27, 9, 255, 67, 26, 3, 255, 72, 30, 4, 255, 71, 23, 3, 255, 73, 28, 0, 255, 74, 31, 1, 255, 73, 29, 5, 255, 71, 28, 4, 255, 68, 29, 3, 255, 75, 29, 6, 255, 69, 29, 4, 255, 63, 28, 3, 255, 73, 29, 3, 255, 76, 28, 2, 255, 78, 25, 2, 255, 78, 28, 3, 255, 73, 27, 2, 255, 74, 31, 6, 255, 72, 27, 3, 255, 71, 26, 1, 255, 69, 28, 3, 255, 68, 28, 4, 255, 71, 28, 6, 255, 72, 26, 6, 255, 71, 26, 3, 255, 71, 27, 1, 255, 65, 24, 2, 255, 69, 27, 3, 255, 66, 25, 2, 255, 62, 21, 6, 255, 68, 25, 8, 255, 66, 22, 3, 255, 65, 20, 1, 255, 66, 22, 2, 255, 64, 28, 4, 255, 63, 25, 3, 255, 65, 24, 4, 255, 62, 22, 3, 255, 63, 21, 6, 255, 61, 22, 5, 255, 60, 22, 3, 255, 57, 20, 1, 255, 59, 20, 2, 255, 61, 21, 3, 255, 61, 17, 3, 255, 64, 19, 2, 255, 65, 20, 5, 255, 61, 23, 6, 255, 58, 27, 2, 255, 59, 23, 5, 255, 52, 15, 6, 255, 53, 20, 6, 255, 52, 19, 3, 255, 57, 21, 5, 255, 55, 18, 2, 255, 59, 22, 5, 255, 56, 19, 2, 255, 53, 17, 4, 255, 50, 14, 0, 255, 55, 19, 3, 255, 54, 22, 4, 255, 53, 20, 4, 255, 58, 19, 7, 255, 52, 17, 3, 255, 54, 17, 5, 255, 54, 15, 7, 255, 54, 20, 8, 255, 53, 21, 5, 255, 56, 18, 2, 255, 59, 13, 3, 255, 54, 14, 3, 255, 47, 18, 2, 255, 50, 18, 3, 255, 52, 15, 6, 255, 45, 13, 4, 255, 45, 14, 4, 255, 43, 15, 4, 255, 47, 14, 4, 255, 61, 16, 7, 255, 48, 14, 3, 255, 47, 15, 4, 255, 55, 15, 6, 255, 45, 14, 2, 255, 47, 16, 6, 255, 48, 12, 5, 255, 41, 11, 3, 255, 40, 11, 2, 255, 41, 11, 4, 255, 34, 10, 4, 255, 41, 12, 4, 255, 39, 13, 4, 255, 38, 12, 6, 255, 42, 13, 5, 255, 42, 11, 3, 255, 44, 12, 0, 255, 43, 14, 4, 255, 40, 11, 3, 255, 42, 12, 1, 255, 41, 17, 0, 255, 32, 11, 0, 255, 34, 9, 5, 255, 40, 11, 8, 255, 35, 12, 3, 255, 34, 15, 3, 255, 36, 11, 2, 255, 37, 11, 4, 255, 38, 10, 4, 255, 36, 13, 4, 255, 37, 11, 2, 255, 43, 12, 2, 255, 35, 10, 2, 255, 46, 15, 3, 255, 47, 14, 2, 255, 40, 11, 4, 255, 44, 12, 3, 255, 45, 12, 0, 255, 50, 14, 3, 255, 52, 15, 4, 255, 51, 13, 3, 255, 46, 8, 0, 255, 49, 11, 3, 255, 47, 9, 2, 255, 53, 15, 3, 255, 43, 11, 2, 255, 35, 11, 4, 255, 42, 9, 0, 255, 44, 10, 2, 255, 44, 9, 4, 255, 51, 11, 0, 255, 59, 13, 4, 255, 54, 10, 3, 255, 62, 15, 3, 255, 60, 15, 3, 255, 41, 10, 5, 255, 34, 9, 6, 255, 38, 10, 4, 255, 36, 6, 1, 255, 37, 9, 3, 255, 36, 12, 6, 255, 31, 7, 4, 255, 31, 7, 4, 255, 26, 7, 1, 255, 31, 11, 4, 255, 39, 11, 4, 255, 43, 8, 4, 255, 36, 7, 2, 255, 36, 10, 2, 255, 42, 9, 1, 255, 30, 8, 1, 255, 34, 9, 5, 255, 34, 9, 5, 255, 33, 9, 1, 255, 28, 8, 2, 255, 25, 5, 2, 255, 23, 8, 3, 255, 18, 5, 1, 255, 20, 5, 2, 255, 22, 3, 2, 255, 18, 5, 2, 255, 24, 7, 5, 255, 21, 4, 2, 255, 21, 5, 2, 255, 25, 5, 2, 255, 24, 6, 0, 255, 25, 8, 1, 255, 27, 6, 2, 255, 24, 6, 4, 255, 24, 6, 0, 255, 29, 8, 2, 255];\n\
+\n\
+var width = 400, height = 267;\n\
+\n\
+\n\
+TalosContentProfiler.subtestStart('imaging-desaturate', true).then(() => {\n\
+ var _sunSpiderStartDate = new Date();\n\
+\n\
+ /*\n\
+ * Pixastic Lib - Desaturation filter - v0.1.1\n\
+ * Copyright (c) 2008 Jacob Seidelin, jseidelin@nihilogic.dk, http://blog.nihilogic.dk/\n\
+ * License: [http://www.pixastic.com/lib/license.txt] (MPL 1.1)\n\
+ */\n\
+\n\
+ var Pixastic = {};\n\
+ Pixastic.Actions = {};\n\
+ Pixastic.Actions.desaturate = {\n\
+ process : function(params) {\n\
+ var useAverage = !!(params.options.average && params.options.average != \"false\");\n\
+ var data = params.data;\n\
+ var rect = params.options.rect;\n\
+ var w = rect.width;\n\
+ var h = rect.height;\n\
+\n\
+ var p = w*h;\n\
+ var pix = p*4, pix1, pix2;\n\
+\n\
+ if (useAverage) {\n\
+ while (p--) \n\
+ data[pix-=4] = data[pix1=pix+1] = data[pix2=pix+2] = (data[pix]+data[pix1]+data[pix2])/3\n\
+ } else {\n\
+ while (p--)\n\
+ data[pix-=4] = data[pix1=pix+1] = data[pix2=pix+2] = (data[pix]*0.3 + data[pix1]*0.59 + data[pix2]*0.11);\n\
+ }\n\
+ return true;\n\
+ }\n\
+ }\n\
+\n\
+ var params = {\n\
+ options: {\n\
+ rect: { width: width, height: height},\n\
+ },\n\
+ data: squidImageData\n\
+ }\n\
+\n\
+ //XXX improve dataset rather than loop\n\
+ for (var pixcounter = 0; pixcounter < 200; pixcounter++)\n\
+ Pixastic.Actions.desaturate.process(params);\n\
+\n\
+ var _sunSpiderInterval = new Date() - _sunSpiderStartDate;\n\
+ TalosContentProfiler.subtestEnd('imaging-desaturate', true).then(() => {\n\
+ record(_sunSpiderInterval);\n\
+ });\n\
+\n\
+});\n\
+</script>\n\
+\n\
+\n\
+</body>\n\
+</html>\n\
+", "<!DOCTYPE html>\n\
+<head>\n\
+\n\
+<meta charset=utf8>\n\
+\n\
+<!--\n\
+ Copyright (C) 2007 Apple Inc. All rights reserved.\n\
+\n\
+ Redistribution and use in source and binary forms, with or without\n\
+ modification, are permitted provided that the following conditions\n\
+ are met:\n\
+ 1. Redistributions of source code must retain the above copyright\n\
+ notice, this list of conditions and the following disclaimer.\n\
+ 2. Redistributions in binary form must reproduce the above copyright\n\
+ notice, this list of conditions and the following disclaimer in the\n\
+ documentation and/or other materials provided with the distribution.\n\
+\n\
+ THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY\n\
+ EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n\
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n\
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR\n\
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n\
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n\
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n\
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n\
+ OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n\
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \n\
+-->\n\
+\n\
+<title>SunSpider json-parse-financial</title>\n\
+<link rel=\"stylesheet\" href=\"../kraken.css\">\n\
+</head>\n\
+\n\
+<body>\n\
+<h3>json-parse-financial</h3>\n\
+<div id=\"console\">\n\
+</div>\n\
+<script>\n\
+var TalosContentProfiler = parent.TalosContentProfiler;\n\
+function record(time) {\n\
+ document.getElementById(\"console\").innerHTML = time + \"ms\";\n\
+ if (window.parent) {\n\
+ parent.recordResult(time);\n\
+ }\n\
+}\n\
+\n\
+var data =\n\
+\"{\\\"summary\\\":{\\\"turnover\\\":0.3736,\\\"correlation2\\\":0.\" +\n\
+\"7147,\\\"concentration\\\":0.3652,\\\"beta\\\":0.8814,\\\"totalValue\\\":1.3\" +\n\
+\"091078259E8,\\\"correlation\\\":0.7217},\\\"watchlist\\\":[],\\\"shortCash\" +\n\
+\"\\\":-1611000,\\\"holdings\\\":[{\\\"type\\\":\\\"LONG\\\",\\\"commission\\\":1040\" +\n\
+\",\\\"cost\\\":9001920,\\\"quantity\\\":26000,\\\"lots\\\":[{\\\"marketCap\\\":\\\"\" +\n\
+\"L\\\",\\\"industry\\\":\\\"TECHNOLOGY\\\",\\\"style\\\":\\\"G\\\",\\\"buyDate\\\":\\\"20\" +\n\
+\"08-10-08 13:44:20.000\\\",\\\"quantity\\\":8000},{\\\"marketCap\\\":\\\"L\\\",\" +\n\
+\"\\\"industry\\\":\\\"TECHNOLOGY\\\",\\\"style\\\":\\\"G\\\",\\\"buyDate\\\":\\\"2008-1\" +\n\
+\"0-15 13:28:02.000\\\",\\\"quantity\\\":18000}],\\\"stock\\\":\\\"GOOG\\\"},{\\\"\" +\n\
+\"type\\\":\\\"LONG\\\",\\\"commission\\\":8000,\\\"cost\\\":4672000,\\\"quantity\" +\n\
+\"\\\":200000,\\\"lots\\\":[{\\\"marketCap\\\":\\\"L\\\",\\\"industry\\\":\\\"TECHNOLO\" +\n\
+\"GY\\\",\\\"style\\\":\\\"G\\\",\\\"buyDate\\\":\\\"2008-10-15 13:28:54.000\\\",\\\"q\" +\n\
+\"uantity\\\":200000}],\\\"stock\\\":\\\"MSFT\\\"},{\\\"type\\\":\\\"LONG\\\",\\\"comm\" +\n\
+\"ission\\\":21877,\\\"cost\\\":1.001592313E7,\\\"quantity\\\":546919,\\\"lots\" +\n\
+\"\\\":[{\\\"marketCap\\\":\\\"L\\\",\\\"industry\\\":\\\"FINANCIAL\\\",\\\"style\\\":\\\"\" +\n\
+\"G\\\",\\\"buyDate\\\":\\\"2008-08-01 09:50:17.000\\\",\\\"quantity\\\":103092}\" +\n\
+\",{\\\"marketCap\\\":\\\"L\\\",\\\"industry\\\":\\\"FINANCIAL\\\",\\\"style\\\":\\\"G\\\"\" +\n\
+\",\\\"buyDate\\\":\\\"2008-08-18 10:31:34.000\\\",\\\"quantity\\\":49950},{\\\"\" +\n\
+\"marketCap\\\":\\\"L\\\",\\\"industry\\\":\\\"FINANCIAL\\\",\\\"style\\\":\\\"G\\\",\\\"b\" +\n\
+\"uyDate\\\":\\\"2008-08-29 09:35:22.000\\\",\\\"quantity\\\":45045},{\\\"mark\" +\n\
+\"etCap\\\":\\\"L\\\",\\\"industry\\\":\\\"FINANCIAL\\\",\\\"style\\\":\\\"G\\\",\\\"buyDa\" +\n\
+\"te\\\":\\\"2008-09-15 09:40:32.000\\\",\\\"quantity\\\":48400},{\\\"marketCa\" +\n\
+\"p\\\":\\\"L\\\",\\\"industry\\\":\\\"FINANCIAL\\\",\\\"style\\\":\\\"G\\\",\\\"buyDate\\\"\" +\n\
+\":\\\"2008-10-06 11:21:50.000\\\",\\\"quantity\\\":432},{\\\"marketCap\\\":\\\"\" +\n\
+\"L\\\",\\\"industry\\\":\\\"FINANCIAL\\\",\\\"style\\\":\\\"G\\\",\\\"buyDate\\\":\\\"200\" +\n\
+\"8-10-15 13:30:05.000\\\",\\\"quantity\\\":300000}],\\\"stock\\\":\\\"UBS\\\"},\" +\n\
+\"{\\\"type\\\":\\\"LONG\\\",\\\"commission\\\":4000,\\\"cost\\\":6604849.1,\\\"quan\" +\n\
+\"tity\\\":122741,\\\"lots\\\":[{\\\"marketCap\\\":\\\"L\\\",\\\"industry\\\":\\\"SERV\" +\n\
+\"ICES\\\",\\\"style\\\":\\\"V\\\",\\\"buyDate\\\":\\\"2008-04-26 04:44:34.000\\\",\" +\n\
+\"\\\"quantity\\\":22741},{\\\"marketCap\\\":\\\"L\\\",\\\"industry\\\":\\\"SERVICES\" +\n\
+\"\\\",\\\"style\\\":\\\"V\\\",\\\"buyDate\\\":\\\"2008-10-15 13:31:02.000\\\",\\\"qua\" +\n\
+\"ntity\\\":100000}],\\\"stock\\\":\\\"V\\\"},{\\\"type\\\":\\\"LONG\\\",\\\"commissio\" +\n\
+\"n\\\":2805,\\\"cost\\\":5005558.25,\\\"quantity\\\":70121,\\\"lots\\\":[{\\\"mar\" +\n\
+\"ketCap\\\":\\\"M\\\",\\\"industry\\\":\\\"RETAIL\\\",\\\"style\\\":\\\"G\\\",\\\"buyDate\" +\n\
+\"\\\":\\\"2008-10-10 10:48:36.000\\\",\\\"quantity\\\":121},{\\\"marketCap\\\":\" +\n\
+\"\\\"M\\\",\\\"industry\\\":\\\"RETAIL\\\",\\\"style\\\":\\\"G\\\",\\\"buyDate\\\":\\\"2008\" +\n\
+\"-10-15 13:33:44.000\\\",\\\"quantity\\\":70000}],\\\"stock\\\":\\\"LDG\\\"},{\" +\n\
+\"\\\"type\\\":\\\"LONG\\\",\\\"commission\\\":10000,\\\"cost\\\":5382500,\\\"quanti\" +\n\
+\"ty\\\":250000,\\\"lots\\\":[{\\\"marketCap\\\":\\\"L\\\",\\\"industry\\\":\\\"RETAIL\" +\n\
+\"\\\",\\\"style\\\":\\\"V\\\",\\\"buyDate\\\":\\\"2008-10-15 13:34:30.000\\\",\\\"qua\" +\n\
+\"ntity\\\":250000}],\\\"stock\\\":\\\"SWY\\\"},{\\\"type\\\":\\\"LONG\\\",\\\"commiss\" +\n\
+\"ion\\\":1120,\\\"cost\\\":1240960,\\\"quantity\\\":28000,\\\"lots\\\":[{\\\"mark\" +\n\
+\"etCap\\\":\\\"u\\\",\\\"industry\\\":\\\"ETF\\\",\\\"style\\\":\\\"B\\\",\\\"buyDate\\\":\" +\n\
+\"\\\"2008-10-15 15:57:39.000\\\",\\\"quantity\\\":28000}],\\\"stock\\\":\\\"OIL\" +\n\
+\"\\\"},{\\\"type\\\":\\\"LONG\\\",\\\"commission\\\":400,\\\"cost\\\":236800,\\\"quan\" +\n\
+\"tity\\\":10000,\\\"lots\\\":[{\\\"marketCap\\\":\\\"M\\\",\\\"industry\\\":\\\"UTILI\" +\n\
+\"TIES_AND_ENERGY\\\",\\\"style\\\":\\\"G\\\",\\\"buyDate\\\":\\\"2008-10-15 15:58\" +\n\
+\":03.000\\\",\\\"quantity\\\":10000}],\\\"stock\\\":\\\"COG\\\"},{\\\"type\\\":\\\"LO\" +\n\
+\"NG\\\",\\\"commission\\\":3200,\\\"cost\\\":1369600,\\\"quantity\\\":80000,\\\"l\" +\n\
+\"ots\\\":[{\\\"marketCap\\\":\\\"S\\\",\\\"industry\\\":\\\"UTILITIES_AND_ENERGY\" +\n\
+\"\\\",\\\"style\\\":\\\"G\\\",\\\"buyDate\\\":\\\"2008-10-15 15:58:32.000\\\",\\\"qua\" +\n\
+\"ntity\\\":80000}],\\\"stock\\\":\\\"CRZO\\\"},{\\\"type\\\":\\\"LONG\\\",\\\"commiss\" +\n\
+\"ion\\\":429,\\\"cost\\\":108164.8,\\\"quantity\\\":10720,\\\"lots\\\":[{\\\"mark\" +\n\
+\"etCap\\\":\\\"u\\\",\\\"industry\\\":\\\"FINANCIAL\\\",\\\"style\\\":\\\"V\\\",\\\"buyDa\" +\n\
+\"te\\\":\\\"2008-10-16 09:37:06.000\\\",\\\"quantity\\\":10720}],\\\"stock\\\":\" +\n\
+\"\\\"FGI\\\"},{\\\"type\\\":\\\"LONG\\\",\\\"commission\\\":1080,\\\"cost\\\":494910,\" +\n\
+\"\\\"quantity\\\":27000,\\\"lots\\\":[{\\\"marketCap\\\":\\\"L\\\",\\\"industry\\\":\" +\n\
+\"\\\"RETAIL\\\",\\\"style\\\":\\\"V\\\",\\\"buyDate\\\":\\\"2008-10-16 09:37:06.000\" +\n\
+\"\\\",\\\"quantity\\\":27000}],\\\"stock\\\":\\\"LOW\\\"},{\\\"type\\\":\\\"LONG\\\",\\\"\" +\n\
+\"commission\\\":4080,\\\"cost\\\":4867440,\\\"quantity\\\":102000,\\\"lots\\\":\" +\n\
+\"[{\\\"marketCap\\\":\\\"L\\\",\\\"industry\\\":\\\"HEALTHCARE\\\",\\\"style\\\":\\\"V\" +\n\
+\"\\\",\\\"buyDate\\\":\\\"2008-10-16 09:37:06.000\\\",\\\"quantity\\\":102000}]\" +\n\
+\",\\\"stock\\\":\\\"AMGN\\\"},{\\\"type\\\":\\\"SHORT\\\",\\\"commission\\\":4000,\\\"\" +\n\
+\"cost\\\":-1159000,\\\"quantity\\\":-100000,\\\"lots\\\":[{\\\"marketCap\\\":\" +\n\
+\"\\\"L\\\",\\\"industry\\\":\\\"TECHNOLOGY\\\",\\\"style\\\":\\\"V\\\",\\\"buyDate\\\":\" +\n\
+\"\\\"2008-10-16 09:37:06.000\\\",\\\"quantity\\\":-100000}],\\\"stock\\\":\\\"\" +\n\
+\"AMAT\\\"},{\\\"type\\\":\\\"LONG\\\",\\\"commission\\\":2,\\\"cost\\\":5640002,\\\"\" +\n\
+\"quantity\\\":50,\\\"lots\\\":[{\\\"marketCap\\\":\\\"L\\\",\\\"industry\\\":\\\"FIN\" +\n\
+\"ANCIAL\\\",\\\"style\\\":\\\"B\\\",\\\"buyDate\\\":\\\"2008-10-16 09:37:06.000\" +\n\
+\"\\\",\\\"quantity\\\":50}],\\\"stock\\\":\\\"BRKA\\\"},{\\\"type\\\":\\\"SHORT\\\",\\\"\" +\n\
+\"commission\\\":4000,\\\"cost\\\":-436000,\\\"quantity\\\":-100000,\\\"lots\" +\n\
+\"\\\":[{\\\"marketCap\\\":\\\"M\\\",\\\"industry\\\":\\\"TRANSPORTATION\\\",\\\"styl\" +\n\
+\"e\\\":\\\"G\\\",\\\"buyDate\\\":\\\"2008-10-16 09:37:06.000\\\",\\\"quantity\\\":-\" +\n\
+\"100000}],\\\"stock\\\":\\\"JBLU\\\"},{\\\"type\\\":\\\"LONG\\\",\\\"commission\\\":8\" +\n\
+\"000,\\\"cost\\\":1.1534E7,\\\"quantity\\\":200000,\\\"lots\\\":[{\\\"marketCap\" +\n\
+\"\\\":\\\"S\\\",\\\"industry\\\":\\\"FINANCIAL\\\",\\\"style\\\":\\\"G\\\",\\\"buyDate\\\":\" +\n\
+\"\\\"2008-10-16 14:35:24.000\\\",\\\"quantity\\\":200000}],\\\"stock\\\":\\\"US\" +\n\
+\"O\\\"},{\\\"type\\\":\\\"LONG\\\",\\\"commission\\\":4000,\\\"cost\\\":1.0129E7,\\\"\" +\n\
+\"quantity\\\":100000,\\\"lots\\\":[{\\\"marketCap\\\":\\\"L\\\",\\\"industry\\\":\\\"\" +\n\
+\"TECHNOLOGY\\\",\\\"style\\\":\\\"G\\\",\\\"buyDate\\\":\\\"2008-10-15 13:28:26.0\" +\n\
+\"00\\\",\\\"quantity\\\":50000},{\\\"marketCap\\\":\\\"L\\\",\\\"industry\\\":\\\"TEC\" +\n\
+\"HNOLOGY\\\",\\\"style\\\":\\\"G\\\",\\\"buyDate\\\":\\\"2008-10-17 09:33:09.000\" +\n\
+\"\\\",\\\"quantity\\\":50000}],\\\"stock\\\":\\\"AAPL\\\"},{\\\"type\\\":\\\"LONG\\\",\" +\n\
+\"\\\"commission\\\":1868,\\\"cost\\\":9971367.2,\\\"quantity\\\":54280,\\\"lots\" +\n\
+\"\\\":[{\\\"marketCap\\\":\\\"L\\\",\\\"industry\\\":\\\"SERVICES\\\",\\\"style\\\":\\\"G\" +\n\
+\"\\\",\\\"buyDate\\\":\\\"2008-04-26 04:44:34.000\\\",\\\"quantity\\\":7580},{\" +\n\
+\"\\\"marketCap\\\":\\\"L\\\",\\\"industry\\\":\\\"SERVICES\\\",\\\"style\\\":\\\"G\\\",\\\"\" +\n\
+\"buyDate\\\":\\\"2008-05-29 09:50:28.000\\\",\\\"quantity\\\":7500},{\\\"mark\" +\n\
+\"etCap\\\":\\\"L\\\",\\\"industry\\\":\\\"SERVICES\\\",\\\"style\\\":\\\"G\\\",\\\"buyDat\" +\n\
+\"e\\\":\\\"2008-10-15 13:30:38.000\\\",\\\"quantity\\\":33000},{\\\"marketCap\" +\n\
+\"\\\":\\\"L\\\",\\\"industry\\\":\\\"SERVICES\\\",\\\"style\\\":\\\"G\\\",\\\"buyDate\\\":\" +\n\
+\"\\\"2008-10-17 09:33:09.000\\\",\\\"quantity\\\":6200}],\\\"stock\\\":\\\"MA\\\"\" +\n\
+\"}],\\\"longCash\\\":4.600368106E7,\\\"ownerId\\\":8,\\\"pendingOrders\\\":[{\" +\n\
+\"\\\"total\\\":487000,\\\"type\\\":\\\"cover\\\",\\\"subtotal\\\":483000,\\\"price\" +\n\
+\"\\\":4.83,\\\"commission\\\":4000,\\\"date\\\":\\\"2008-10-17 23:56:06.000\\\"\" +\n\
+\",\\\"quantity\\\":100000,\\\"expires\\\":\\\"2008-10-20 16:00:00.000\\\",\\\"s\" +\n\
+\"tock\\\":\\\"JBLU\\\",\\\"id\\\":182375},{\\\"total\\\":6271600,\\\"type\\\":\\\"buy\" +\n\
+\"\\\",\\\"subtotal\\\":6270000,\\\"price\\\":156.75,\\\"commission\\\":1600,\\\"d\" +\n\
+\"ate\\\":\\\"2008-10-17 23:56:40.000\\\",\\\"quantity\\\":40000,\\\"expires\\\"\" +\n\
+\":\\\"2008-10-20 16:00:00.000\\\",\\\"stock\\\":\\\"MA\\\",\\\"id\\\":182376}],\\\"\" +\n\
+\"inceptionDate\\\":\\\"2008-04-26 04:44:29.000\\\",\\\"withdrawals\\\":0,\\\"\" +\n\
+\"id\\\":219948,\\\"deposits\\\":0}\";\n\
+\n\
+\n\
+TalosContentProfiler.subtestStart('json-parse-financial', true).then(() => {\n\
+ var _sunSpiderStartDate = new Date();\n\
+\n\
+\n\
+ for (var i = 0; i < 1000; i++) {\n\
+ var x = JSON.parse(data);\n\
+ }\n\
+\n\
+ var _sunSpiderInterval = new Date() - _sunSpiderStartDate;\n\
+ TalosContentProfiler.subtestEnd('json-parse-financial', true).then(() => {\n\
+ record(_sunSpiderInterval);\n\
+ });\n\
+\n\
+});\n\
+</script>\n\
+\n\
+\n\
+</body>\n\
+</html>\n\
+", "<!DOCTYPE html>\n\
+<head>\n\
+\n\
+<meta charset=utf8>\n\
+\n\
+<!--\n\
+ Copyright (C) 2007 Apple Inc. All rights reserved.\n\
+\n\
+ Redistribution and use in source and binary forms, with or without\n\
+ modification, are permitted provided that the following conditions\n\
+ are met:\n\
+ 1. Redistributions of source code must retain the above copyright\n\
+ notice, this list of conditions and the following disclaimer.\n\
+ 2. Redistributions in binary form must reproduce the above copyright\n\
+ notice, this list of conditions and the following disclaimer in the\n\
+ documentation and/or other materials provided with the distribution.\n\
+\n\
+ THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY\n\
+ EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n\
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n\
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR\n\
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n\
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n\
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n\
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n\
+ OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n\
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \n\
+-->\n\
+\n\
+<title>SunSpider json-stringify-tinderbox</title>\n\
+<link rel=\"stylesheet\" href=\"../kraken.css\">\n\
+</head>\n\
+\n\
+<body>\n\
+<h3>json-stringify-tinderbox</h3>\n\
+<div id=\"console\">\n\
+</div>\n\
+<script>\n\
+var TalosContentProfiler = parent.TalosContentProfiler;\n\
+function record(time) {\n\
+ document.getElementById(\"console\").innerHTML = time + \"ms\";\n\
+ if (window.parent) {\n\
+ parent.recordResult(time);\n\
+ }\n\
+}\n\
+\n\
+var tinderbox_data = {'cvs_module' : '','name_count' : 40,'cvs_branch' : '','num' : 0,'warning_builds' : {},\n\
+'build_time_index' : {'1240110901' : 241,'1240129496' : 170,'1240155422' : 6,'1240136995' : 120,'1240144682' : 68,\n\
+'1240143721' : 73,'1240151392' : 26,'1240136762' : 123,'1240148705' : 35,'1240138647' : 112,'1240134674' : 139,\n\
+'1240114808' : 231,'1240141596' : 85,'1240122091' : 206,'1240139402' : 107,'1240143815' : 72,'1240143361' : 75,\n\
+'1240147983' : 42,'1240130341' : 163,'1240145527' : 59,'1240119481' : 219,'1240148042' : 41,'1240121330' : 212,\n\
+'1240135056' : 135,'1240121886' : 209,'1240140122' : 99,'1240131009' : 159,'1240152090' : 22,'1240125782' : 190,\n\
+'1240123085' : 201,'1240131868' : 156,'1240133642' : 143,'1240140490' : 94,'1240130641' : 161,'1240139527' : 105,\n\
+'1240147039' : 47,'1240135804' : 126,'1240127721' : 180,'1240148642' : 37,'1240142043' : 80,'1240125361' : 192,\n\
+'1240135867' : 125,'1240113981' : 237,'1240121181' : 214,'1240145244' : 63,'1240136993' : 121,'1240141021' : 91,\n\
+'1240153681' : 13,'1240139882' : 102,'1240135775' : 127,'1240130222' : 165,'1240138147' : 114,'1240141804' : 84,\n\
+'1240127951' : 178,'1240135683' : 129,'1240137185' : 117,'1240127582' : 182,'1240140185' : 98,'1240125182' : 195,\n\
+'1240136523' : 124,'1240151761' : 23,'1240114000' : 236,'1240146422' : 52,'1240154221' : 11,'1240122721' : 204,\n\
+'1240147022' : 48,'1240125183' : 194,'1240145615' : 58,'1240129142' : 174,'1240129442' : 172,'1240121888' : 208,\n\
+'1240130230' : 164,'1240141563' : 86,'1240118762' : 223,'1240118282' : 224,'1240135562' : 130,'1240107064' : 242,\n\
+'1240118223' : 225,'1240129894' : 166,'1240119243' : 221,'1240133651' : 142,'1240155481' : 4,'1240145461' : 60,\n\
+'1240153154' : 16,'1240124402' : 197,'1240147921' : 43,'1240128608' : 176,'1240138756' : 110,'1240132085' : 153,\n\
+'1240147809' : 44,'1240149973' : 29,'1240135321' : 131,'1240141262' : 89,'1240127763' : 179,'1240130882' : 160,\n\
+'1240125965' : 188,'1240132923' : 147,'1240141868' : 83,'1240129497' : 169,'1240143241' : 76,'1240149969' : 30,\n\
+'1240127548' : 183,'1240132682' : 151,'1240135758' : 128,'1240140004' : 100,'1240113394' : 238,'1240146301' : 53,\n\
+'1240145644' : 57,'1240144239' : 69,'1240121701' : 210,'1240145821' : 55,'1240134124' : 141,'1240135059' : 134,\n\
+'1240132801' : 148,'1240139951' : 101,'1240141081' : 90,'1240142886' : 77,'1240155008' : 10,'1240138174' : 113,\n\
+'1240118104' : 226,'1240124104' : 199,'1240129514' : 168,'1240154043' : 12,'1240142843' : 79,'1240117147' : 227,\n\
+'1240133109' : 146,'1240128301' : 177,'1240144693' : 66,'1240146603' : 50,'1240135264' : 133,'1240149367' : 31,\n\
+'1240140664' : 93,'1240119902' : 217,'1240137781' : 115,'1240113241' : 239,'1240148404' : 38,'1240140482' : 95,\n\
+'1240139612' : 104,'1240148161' : 39,'1240153021' : 18,'1240152422' : 21,'1240138741' : 111,'1240148704' : 36,\n\
+'1240122875' : 203,'1240144685' : 67,'1240128845' : 175,'1240131905' : 155,'1240126805' : 187,'1240133463' : 144,\n\
+'1240127546' : 184,'1240114742' : 232,'1240118942' : 222,'1240135320' : 132,'1240138989' : 108,'1240149089' : 32,\n\
+'1240120323' : 216,'1240127486' : 185,'1240136821' : 122,'1240151407' : 25,'1240129495' : 171,'1240149062' : 33,\n\
+'1240145648' : 56,'1240131185' : 157,'1240153085' : 17,'1240116427' : 228,'1240155543' : 3,'1240129262' : 173,\n\
+'1240148892' : 34,'1240125421' : 191,'1240119860' : 218,'1240132681' : 152,'1240153442' : 15,'1240155363' : 7,\n\
+'1240134782' : 138,'1240151517' : 24,'1240144216' : 70,'1240138822' : 109,'1240152902' : 19,'1240132025' : 154,\n\
+'1240140301' : 96,'1240144981' : 65,'1240125302' : 193,'1240145402' : 61,'1240121583' : 211,'1240137007' : 119,\n\
+'1240134867' : 137,'1240147082' : 46,'1240124521' : 196,'1240155241' : 8,'1240125961' : 189,'1240144192' : 71,\n\
+'1240147301' : 45,'1240124230' : 198,'1240137051' : 118,'1240156931' : 2,'1240141922' : 82,'1240139881' : 103,\n\
+'1240137362' : 116,'1240152426' : 20,'1240141382' : 88,'1240141937' : 81,'1240120621' : 215,'1240145276' : 62,\n\
+'1240133162' : 145,'1240132742' : 150,'1240145042' : 64,'1240114625' : 233,'1240131123' : 158,'1240123022' : 202,\n\
+'1240122362' : 205,'1240157463' : 0,'1240141442' : 87,'1240146542' : 51,'1240142850' : 78,'1240150143' : 27,\n\
+'1240113003' : 240,'1240123329' : 200,'1240130522' : 162,'1240155122' : 9,'1240140902' : 92,'1240153563' : 14,\n\
+'1240116360' : 229,'1240134182' : 140,'1240146072' : 54,'1240146903' : 49,'1240119422' : 220,'1240135019' : 136,\n\
+'1240150142' : 28,'1240114204' : 235,'1240121209' : 213,'1240126871' : 186,'1240127646' : 181,'1240157251' : 1,\n\
+'1240155424' : 5,'1240140242' : 97,'1240129866' : 167,'1240143663' : 74,'1240115641' : 230,'1240139521' : 106,\n\
+'1240114323' : 234,'1240121889' : 207,'1240148103' : 40,'1240132745' : 149},\n\
+'note_array' : ['<pre>\\n[<b><a href=mailto:ehsan.akhgari%gmail.com>ehsan.akhgari%gmail.com</a> - 2009/04/19&nbsp;00:30:56</b>]\\nbug 478603\\n</pre>','<pre>\\n[<b><a href=mailto:ehsan.akhgari%gmail.com>ehsan.akhgari%gmail.com</a> - 2009/04/19&nbsp;02:43:59</b>]\\nbug 478603\\n</pre>','<pre>\\n[<b><a href=mailto:ehsan.akhgari%gmail.com>ehsan.akhgari%gmail.com</a> - 2009/04/19&nbsp;02:52:29</b>]\\nBacked out bug 464795 due to\\ntest failure\\n</pre><pre>\\n[<b><a href=mailto:ehsan.akhgari%gmail.com>ehsan.akhgari%gmail.com</a> - 2009/04/19&nbsp;02:48:22</b>]\\nWaiting for other unit test\\nboxes to cycle. I will\\nbackout my test if this cycles\\norange again.\\n</pre>','<pre>\\n[<b><a href=mailto:ehsan.akhgari%gmail.com>ehsan.akhgari%gmail.com</a> - 2009/04/19&nbsp;02:52:16</b>]\\nBacked out bug 464795 due to\\ntest failure\\n</pre>','<pre>\\n[<b><a href=mailto:ehsan.akhgari%gmail.com>ehsan.akhgari%gmail.com</a> - 2009/04/19&nbsp;02:52:48</b>]\\nBacked out bug 464795 due to test failure\\n</pre>','<pre>\\n[<b><a href=mailto:ehsan.akhgari%gmail.com>ehsan.akhgari%gmail.com</a> - 2009/04/19&nbsp;02:52:53</b>]\\nBacked out bug 464795 due to test failure\\n</pre>','<pre>\\n[<b><a href=mailto:ehsan.akhgari%gmail.com>ehsan.akhgari%gmail.com</a> - 2009/04/19&nbsp;02:52:58</b>]\\nBacked out bug 464795 due to test failure\\n</pre>','<pre>\\n[<b><a href=mailto:ehsan.akhgari%gmail.com>ehsan.akhgari%gmail.com</a> - 2009/04/19&nbsp;02:53:04</b>]\\nBacked out bug 464795 due to test failure\\n</pre>','<pre>\\n[<b><a href=mailto:ehsan.akhgari%gmail.com>ehsan.akhgari%gmail.com</a> - 2009/04/19&nbsp;05:11:14</b>]\\nbug 478603\\n</pre>','<pre>\\n[<b><a href=mailto:ehsan.akhgari%gmail.com>ehsan.akhgari%gmail.com</a> - 2009/04/19&nbsp;05:11:27</b>]\\nbug 478603\\n</pre>'],\n\
+'build_time_times' : [1240157463,1240157251,1240156931,1240155543,1240155481,1240155424,1240155422,1240155363,\n\
+ 1240155241,1240155122,1240155008,1240154221,1240154043,1240153681,1240153563,1240153442,\n\
+ 1240153154,1240153085,1240153021,1240152902,1240152426,1240152422,1240152090,1240151761,\n\
+ 1240151517,1240151407,1240151392,1240150143,1240150142,1240149973,1240149969,1240149367,\n\
+ 1240149089,1240149062,1240148892,1240148705,1240148704,1240148642,1240148404,1240148161,\n\
+ 1240148103,1240148042,1240147983,1240147921,1240147809,1240147301,1240147082,1240147039,\n\
+ 1240147022,1240146903,1240146603,1240146542,1240146422,1240146301,1240146072,1240145821,\n\
+ 1240145648,1240145644,1240145615,1240145527,1240145461,1240145402,1240145276,1240145244,\n\
+ 1240145042,1240144981,1240144693,1240144685,1240144682,1240144239,1240144216,1240144192,\n\
+ 1240143815,1240143721,1240143663,1240143361,1240143241,1240142886,1240142850,1240142843,\n\
+ 1240142043,1240141937,1240141922,1240141868,1240141804,1240141596,1240141563,1240141442,\n\
+ 1240141382,1240141262,1240141081,1240141021,1240140902,1240140664,1240140490,1240140482,\n\
+ 1240140301,1240140242,1240140185,1240140122,1240140004,1240139951,1240139882,1240139881,\n\
+ 1240139612,1240139527,1240139521,1240139402,1240138989,1240138822,1240138756,1240138741,\n\
+ 1240138647,1240138174,1240138147,1240137781,1240137362,1240137185,1240137051,1240137007,\n\
+ 1240136995,1240136993,1240136821,1240136762,1240136523,1240135867,1240135804,1240135775,\n\
+ 1240135758,1240135683,1240135562,1240135321,1240135320,1240135264,1240135059,1240135056,\n\
+ 1240135019,1240134867,1240134782,1240134674,1240134182,1240134124,1240133651,1240133642,\n\
+ 1240133463,1240133162,1240133109,1240132923,1240132801,1240132745,1240132742,1240132682,\n\
+ 1240132681,1240132085,1240132025,1240131905,1240131868,1240131185,1240131123,1240131009,\n\
+ 1240130882,1240130641,1240130522,1240130341,1240130230,1240130222,1240129894,1240129866,\n\
+ 1240129514,1240129497,1240129496,1240129495,1240129442,1240129262,1240129142,1240128845,\n\
+ 1240128608,1240128301,1240127951,1240127763,1240127721,1240127646,1240127582,1240127548,\n\
+ 1240127546,1240127486,1240126871,1240126805,1240125965,1240125961,1240125782,1240125421,\n\
+ 1240125361,1240125302,1240125183,1240125182,1240124521,1240124402,1240124230,1240124104,\n\
+ 1240123329,1240123085,1240123022,1240122875,1240122721,1240122362,1240122091,1240121889,\n\
+ 1240121888,1240121886,1240121701,1240121583,1240121330,1240121209,1240121181,1240120621,\n\
+ 1240120323,1240119902,1240119860,1240119481,1240119422,1240119243,1240118942,1240118762,\n\
+ 1240118282,1240118223,1240118104,1240117147,1240116427,1240116360,1240115641,1240114808,\n\
+ 1240114742,1240114625,1240114323,1240114204,1240114000,1240113981,1240113241,1240113003,\n\
+ 1240110901,1240107064],\n\
+'scrape_builds' : {'Linux talos mozilla-central qm-plinux-trunk01' : 1,\n\
+'WINNT 6.0 talos mozilla-central qm-pvista-trunk02' : 1,'MacOSX Darwin 8.8.1 talos mozilla-central qm-pmac-trunk03' : 1,\n\
+'Linux mozilla-central nightly' : 1,'static-analysis-bsmedberg' : 1,'Linux mozilla-central leak test build' : 1,\n\
+'Linux mozilla-central build' : 1,'WINNT 5.1 talos mozilla-central jss qm-pxp-jss02' : 1,\n\
+'OS X 10.5.2 mozilla-central build' : 1,'WINNT 5.1 talos mozilla-central nochrome qm-pxp-trunk07' : 1,\n\
+'MacOSX Darwin 8.8.1 talos mozilla-central nochrome qm-pmac-trunk10' : 1,'Linux mozilla-central unit test' : 1,\n\
+'WINNT 5.1 talos mozilla-central fast qm-pxp-fast03' : 1,'WINNT 5.2 mozilla-central nightly' : 1,\n\
+'MacOSX Darwin 9.2.2 talos mozilla-central qm-pleopard-trunk02' : 1,'OS X 10.5.2 mozilla-central unit test' : 1,\n\
+'OS X 10.5.2 mozilla-central leak test build' : 1,'MacOSX Darwin 9.2.2 talos mozilla-central qm-pleopard-trunk03' : 1,\n\
+'WINNT 5.1 talos mozilla-central qm-pxp-trunk03' : 1,'MacOSX Darwin 8.8.1 talos mozilla-central qm-pmac-trunk02' : 1,\n\
+'WINNT 5.1 talos mozilla-central qm-pxp-trunk02' : 1,'WINNT 5.2 mozilla-central build' : 1,\n\
+'WINNT 6.0 talos mozilla-central qm-pvista-trunk03' : 1,'Linux x86-64 mozilla-central build' : 1,\n\
+'WINNT 6.0 talos mozilla-central qm-pvista-trunk01' : 1,'WINNT 5.2 mozilla-central leak test build' : 1,\n\
+'MacOSX Darwin 8.8.1 talos mozilla-central qm-pmac-trunk01' : 1,\n\
+'MacOSX Darwin 9.2.2 talos mozilla-central nochrome qm-pleopard-trunk04' : 1,\n\
+'Linux talos mozilla-central qm-plinux-trunk02' : 1,'WINNT 5.1 talos mozilla-central jss qm-pxp-jss03' : 1,\n\
+'OS X 10.5.2 mozilla-central nightly' : 1,'WINNT 5.2 mozilla-central unit test' : 1,\n\
+'Linux talos mozilla-central fast qm-plinux-fast03' : 1,\n\
+'MacOSX Darwin 8.8.1 talos mozilla-central fast qm-pmac-fast03' : 1,'WINNT 5.1 talos mozilla-central jss qm-pxp-jss01' : 1,\n\
+'WINNT 5.1 talos mozilla-central qm-pxp-trunk01' : 1,'MacOSX Darwin 9.2.2 talos mozilla-central qm-pleopard-trunk01' : 1,\n\
+'Linux x86-64 mozilla-central nightly' : 1,'Linux talos mozilla-central nochrome qm-plinux-trunk07' : 1,\n\
+'WINNT 6.0 talos mozilla-central nochrome qm-pvista-trunk04' : 1,'Linux talos mozilla-central qm-plinux-trunk03' : 1},\n\
+'time_count' : 243,'warnings' : {},'cvs_root' : '','mindate' : 1240114261,'query' : '',\n\
+'build_name_index' : {'Linux talos mozilla-central qm-plinux-trunk01' : 6,\n\
+'WINNT 6.0 talos mozilla-central qm-pvista-trunk02' : 38,'MacOSX Darwin 8.8.1 talos mozilla-central qm-pmac-trunk03' : 14,\n\
+'Linux mozilla-central nightly' : 2,'static-analysis-bsmedberg' : 39,'Linux mozilla-central leak test build' : 1,\n\
+'Linux mozilla-central build' : 0,'WINNT 5.1 talos mozilla-central jss qm-pxp-jss02' : 26,\n\
+'OS X 10.5.2 mozilla-central build' : 19,'MacOSX Darwin 8.8.1 talos mozilla-central nochrome qm-pmac-trunk10' : 11,\n\
+'WINNT 5.1 talos mozilla-central nochrome qm-pxp-trunk07' : 28,'Linux mozilla-central unit test' : 3,\n\
+'WINNT 5.1 talos mozilla-central fast qm-pxp-fast03' : 24,'WINNT 5.2 mozilla-central nightly' : 34,\n\
+'MacOSX Darwin 9.2.2 talos mozilla-central qm-pleopard-trunk02' : 17,'OS X 10.5.2 mozilla-central leak test build' : 20,\n\
+'OS X 10.5.2 mozilla-central unit test' : 23,'MacOSX Darwin 9.2.2 talos mozilla-central qm-pleopard-trunk03' : 18,\n\
+'WINNT 5.1 talos mozilla-central qm-pxp-trunk03' : 31,'MacOSX Darwin 8.8.1 talos mozilla-central qm-pmac-trunk02' : 13,\n\
+'WINNT 5.2 mozilla-central build' : 32,'WINNT 5.1 talos mozilla-central qm-pxp-trunk02' : 30,\n\
+'Linux x86-64 mozilla-central build' : 8,'OS X 10.5.2 mozilla-central shark' : 22,\n\
+'WINNT 6.0 talos mozilla-central qm-pvista-trunk01' : 37,'MacOSX Darwin 8.8.1 talos mozilla-central qm-pmac-trunk01' : 12,\n\
+'WINNT 5.2 mozilla-central leak test build' : 33,\n\
+'MacOSX Darwin 9.2.2 talos mozilla-central nochrome qm-pleopard-trunk04' : 15,\n\
+'WINNT 5.1 talos mozilla-central jss qm-pxp-jss03' : 27,'OS X 10.5.2 mozilla-central nightly' : 21,\n\
+'WINNT 5.2 mozilla-central unit test' : 35,'Linux talos mozilla-central fast qm-plinux-fast03' : 4,\n\
+'MacOSX Darwin 8.8.1 talos mozilla-central fast qm-pmac-fast03' : 10,'WINNT 5.1 talos mozilla-central qm-pxp-trunk01' : 29,\n\
+'WINNT 5.1 talos mozilla-central jss qm-pxp-jss01' : 25,\n\
+'MacOSX Darwin 9.2.2 talos mozilla-central qm-pleopard-trunk01' : 16,'Linux x86-64 mozilla-central nightly' : 9,\n\
+'Linux talos mozilla-central nochrome qm-plinux-trunk07' : 5,\n\
+'WINNT 6.0 talos mozilla-central nochrome qm-pvista-trunk04' : 36,'Linux talos mozilla-central qm-plinux-trunk03' : 7},\n\
+'name' : 'Firefox','scrape' : {'1240127546.1240134106.24318.gz' : \n\
+[' \"<a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/c319b49e2880 title=\\\\\"Built from revision c319b49e2880\\\\\">rev:c319b49e2880</a>\"',' check<br/>670/0',' xpcshell-tests<br/>610/<em class=\"testfail\">1</em>',' reftest<br/>2984/0/163',' crashtest<br/>1092/0/8',' mochitest-plain<br/>79373/0/1259',' mochitest-chrome<br/>1767/0/29',' mochitest-browser-chrome<br/>2805/0/5',' mochitest-a11y<br/>2251/0/78'],'1240137051.1240144671.19409.gz' : ['id:20090419033051','<a href = \"http://hg.mozilla.org/mozilla-central/rev/11f68e169ed4\">rev:11f68e169ed4</a>',' cycle time: 00:56:55<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":61}]\\'>twinopen: 485.89</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":61}]\\'>tsspider: 85.88</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":61}]\\'>ts: 1132.58</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":2,\"branch\":1,\"machine\":61}]\\'>tp: 305.86</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":5,\"branch\":1,\"machine\":61}]\\'>tp_rss: 317.5MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":22,\"branch\":1,\"machine\":61}]\\'>tsvg: 4288.05</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":20,\"branch\":1,\"machine\":61}]\\'>tgfx: 1.5</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":61}]\\'>tdhtml: 902.88</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":61,\"testrun\":380272}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":61,\"testrun\":380273}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":61,\"testrun\":380274}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":2,\"branch\":1,\"machine\":61,\"testrun\":380275}]\\'>tp</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":5,\"branch\":1,\"machine\":61,\"testrun\":380277}]\\'>tp_rss</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":22,\"branch\":1,\"machine\":61,\"testrun\":380278}]\\'>tsvg</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":20,\"branch\":1,\"machine\":61,\"testrun\":380279}]\\'>tgfx</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":61,\"testrun\":380280}]\\'>tdhtml</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394876\">twinopen: 485.89</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394880\">tsspider: 85.88</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394884\">ts: 1132.58</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394887\">tp: 305.86</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394904\">tp_RSS: 317.5MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394914\">tsvg: 4288.05</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394917\">tgfx: 1.50</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394919\">tdhtml: 902.88</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625833\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625834\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625835\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625836\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625838\">tp_RSS</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625839\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625840\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625841\">tdhtml</a> ','</p>'],'1240151407.1240155499.7154.gz' : ['id:20090419073007','<a href = \"http://hg.mozilla.org/mozilla-central/rev/11f68e169ed4\">rev:11f68e169ed4</a>',' cycle time: 00:56:47<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":59}]\\'>twinopen: 490.32</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":59}]\\'>tsspider: 85.7</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":59}]\\'>ts: 1121.58</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":2,\"branch\":1,\"machine\":59}]\\'>tp: 306.63</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":5,\"branch\":1,\"machine\":59}]\\'>tp_rss: 298.9MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":22,\"branch\":1,\"machine\":59}]\\'>tsvg: 4277.14</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":20,\"branch\":1,\"machine\":59}]\\'>tgfx: 2.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":59}]\\'>tdhtml: 902.06</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":59,\"testrun\":381173}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":59,\"testrun\":381174}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":59,\"testrun\":381175}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":2,\"branch\":1,\"machine\":59,\"testrun\":381176}]\\'>tp</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":5,\"branch\":1,\"machine\":59,\"testrun\":381178}]\\'>tp_rss</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":22,\"branch\":1,\"machine\":59,\"testrun\":381179}]\\'>tsvg</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":20,\"branch\":1,\"machine\":59,\"testrun\":381180}]\\'>tgfx</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":59,\"testrun\":381181}]\\'>tdhtml</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394866\">twinopen: 490.32</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394868\">tsspider: 85.70</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394870\">ts: 1121.58</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394872\">tp: 306.63</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394895\">tp_RSS: 298.9MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394906\">tsvg: 4277.14</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394910\">tdhtml: 902.06</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626788\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626789\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626790\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626791\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626793\">tp_RSS</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626794\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626795\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626796\">tdhtml</a> ','</p>'],'1240116360.1240122985.11479.gz' : ['id:20090418214600','<a href = \"http://hg.mozilla.org/mozilla-central/rev/e2bf0c7914c8\">rev:e2bf0c7914c8</a>',' cycle time: 00:15:23<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":71}]\\'>twinopen: 94.11</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":71}]\\'>tdhtml: 1080.21</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":71}]\\'>tsspider: 69.6</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":71}]\\'>ts: 469.26</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":11,\"branch\":1,\"machine\":71}]\\'>tp_fast: 96.8</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":15,\"branch\":1,\"machine\":71}]\\'>tp_fast_memset: 47.5MB</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":71,\"testrun\":378438}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":71,\"testrun\":378439}]\\'>tdhtml</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":71,\"testrun\":378440}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":71,\"testrun\":378441}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":11,\"branch\":1,\"machine\":71,\"testrun\":378442}]\\'>tp_fast</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":15,\"branch\":1,\"machine\":71,\"testrun\":378444}]\\'>tp_fast_memset</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=912144\">twinopen: 94.11</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=912141\">tdhtml: 1080.21</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=912138\">tsspider: 69.60</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=912146\">ts: 469.26</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=912148\">tp: 96.80</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=912154\">tp_memset: 47.5MB</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3623904\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3623905\">tdhtml</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3623906\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3623907\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3623908\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3623911\">tp_memset</a> ','</p>'],'1240151392.1240152048.2698.gz' : [' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/11f68e169ed4 title=\"Built from revision 11f68e169ed4\">rev:11f68e169ed4</a>'],'1240135758.1240142805.17018.gz' : ['id:20090419030918','<a href = \"http://hg.mozilla.org/mozilla-central/rev/907f2f562f44\">rev:907f2f562f44</a>',' cycle time: 00:55:34<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":65}]\\'>twinopen: 332.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":65}]\\'>tsspider: 84.8</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":65}]\\'>ts: 1548.42</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":2,\"branch\":1,\"machine\":65}]\\'>tp: 301.27</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":5,\"branch\":1,\"machine\":65}]\\'>tp_rss: 339.1MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":22,\"branch\":1,\"machine\":65}]\\'>tsvg: 3492.05</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":20,\"branch\":1,\"machine\":65}]\\'>tgfx: 2.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":65}]\\'>tdhtml: 905.12</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":65,\"testrun\":380098}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":65,\"testrun\":380099}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":65,\"testrun\":380100}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":2,\"branch\":1,\"machine\":65,\"testrun\":380101}]\\'>tp</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":5,\"branch\":1,\"machine\":65,\"testrun\":380103}]\\'>tp_rss</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":22,\"branch\":1,\"machine\":65,\"testrun\":380104}]\\'>tsvg</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":20,\"branch\":1,\"machine\":65,\"testrun\":380105}]\\'>tgfx</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":65,\"testrun\":380106}]\\'>tdhtml</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794398\">twinopen: 332.00</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794401\">tsspider: 84.80</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794405\">ts: 1548.42</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794407\">tp: 301.27</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794433\">tp_RSS: 339.1MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794456\">tsvg: 3492.05</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794460\">tdhtml: 905.12</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625653\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625654\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625655\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625656\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625658\">tp_RSS</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625659\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625660\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625661\">tdhtml</a> ','</p>'],'1240135019.1240140992.12981.gz' : [' periodic clobber',' \"<a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/907f2f562f44 title=\\\\\"Built from revision 907f2f562f44\\\\\">rev:907f2f562f44</a>\"','<abbr title=\"refcnt Leaks\">RLk</abbr>:0B','<abbr title=\"Total Bytes malloc\\'ed and not free\\'d\">Lk</abbr>:112KB','<abbr title=\"Maximum Heap Size\">MH</abbr>:14.8MB','<abbr title=\"Allocations - number of calls to malloc and friends\">A</abbr>:501267'],'1240129495.1240131176.20894.gz' : [' \"<a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/f9627950be8f title=\\\\\"Built from revision f9627950be8f\\\\\">rev:f9627950be8f</a>\"','<abbr title=\"refcnt Leaks\">RLk</abbr>:0B','<abbr title=\"Total Bytes malloc\\'ed and not free\\'d\">Lk</abbr>:112KB','<abbr title=\"Maximum Heap Size\">MH</abbr>:14.7MB','<abbr title=\"Allocations - number of calls to malloc and friends\">A</abbr>:493592'],'1240151407.1240152852.3811.gz' : ['id:20090419073007','<a href = \"http://hg.mozilla.org/mozilla-central/rev/11f68e169ed4\">rev:11f68e169ed4</a>',' cycle time: 00:12:32<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":72}]\\'>twinopen: 491.32</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":72}]\\'>tdhtml: 906.32</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":72}]\\'>tsspider: 85.68</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":72}]\\'>ts: 1252.53</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":11,\"branch\":1,\"machine\":72}]\\'>tp_fast: 151.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":13,\"branch\":1,\"machine\":72}]\\'>tp_fast_rss: 258.2MB</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":72,\"testrun\":380987}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":72,\"testrun\":380988}]\\'>tdhtml</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":72,\"testrun\":380989}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":72,\"testrun\":380990}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":11,\"branch\":1,\"machine\":72,\"testrun\":380991}]\\'>tp_fast</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":13,\"branch\":1,\"machine\":72,\"testrun\":380993}]\\'>tp_fast_rss</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911651\">twinopen: 491.32</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911649\">tdhtml: 906.32</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911647\">tsspider: 85.68</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911653\">ts: 1252.53</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911655\">tp: 151.00</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911659\">tp_RSS: 258.2MB</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626593\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626594\">tdhtml</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626595\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626596\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626597\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626599\">tp_RSS</a> ','</p>'],'1240127582.1240132054.22000.gz' : ['id:20090419005302','<a href = \"http://hg.mozilla.org/mozilla-central/rev/c319b49e2880\">rev:c319b49e2880</a>',' cycle time: 00:57:10<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":60}]\\'>twinopen: 498.21</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":60}]\\'>tsspider: 85.72</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":60}]\\'>ts: 1118.37</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":2,\"branch\":1,\"machine\":60}]\\'>tp: 309.23</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":5,\"branch\":1,\"machine\":60}]\\'>tp_rss: 314.7MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":22,\"branch\":1,\"machine\":60}]\\'>tsvg: 4276.82</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":20,\"branch\":1,\"machine\":60}]\\'>tgfx: 1.5</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":60}]\\'>tdhtml: 915.53</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":60,\"testrun\":379167}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":60,\"testrun\":379168}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":60,\"testrun\":379169}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":2,\"branch\":1,\"machine\":60,\"testrun\":379170}]\\'>tp</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":5,\"branch\":1,\"machine\":60,\"testrun\":379172}]\\'>tp_rss</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":22,\"branch\":1,\"machine\":60,\"testrun\":379173}]\\'>tsvg</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":20,\"branch\":1,\"machine\":60,\"testrun\":379174}]\\'>tgfx</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":60,\"testrun\":379175}]\\'>tdhtml</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394892\">twinopen: 498.21</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394894\">tsspider: 85.72</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394897\">ts: 1118.37</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394900\">tp: 309.23</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394915\">tp_RSS: 314.7MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394921\">tsvg: 4276.82</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394925\">tgfx: 1.50</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394927\">tdhtml: 915.53</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624675\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624676\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624677\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624678\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624680\">tp_RSS</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624681\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624682\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624683\">tdhtml</a> ','</p>'],'1240141596.1240148109.24348.gz' : ['id:20090419044636','<a href = \"http://hg.mozilla.org/mozilla-central/rev/907f2f562f44\">rev:907f2f562f44</a>','FAIL: Busted: ts','FAIL: failed to initialize browser'],'1240139612.1240146496.22288.gz' : ['id:20090419041332','<a href = \"http://hg.mozilla.org/mozilla-central/rev/11f68e169ed4\">rev:11f68e169ed4</a>',' cycle time: 00:20:39<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":75}]\\'>tsspider: 70.22</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":24,\"branch\":1,\"machine\":75}]\\'>tjss: 39.86</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":75}]\\'>ts: 477.84</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":75}]\\'>twinopen: 95.0</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":75,\"testrun\":380431}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":24,\"branch\":1,\"machine\":75,\"testrun\":380432}]\\'>tjss</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":75,\"testrun\":380433}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":75,\"testrun\":380434}]\\'>twinopen</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=2699124\">tsspider: 70.22</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=2699126\">tjss: 39.86</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=2699128\">ts: 477.84</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=2699130\">twinopen: 95.00</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626003\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626004\">tjss</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626005\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626006\">twinopen</a> ','</p>'],'1240122875.1240127923.16698.gz' : ['id:20090418233435','<a href = \"http://hg.mozilla.org/mozilla-central/rev/e2bf0c7914c8\">rev:e2bf0c7914c8</a>','FAIL: Busted: ts','FAIL: failed to initialize browser'],'1240133109.1240143649.18200.gz' : ['id:20090419022509','<a href = \"http://hg.mozilla.org/mozilla-central/rev/c319b49e2880\">rev:c319b49e2880</a>',' cycle time: 01:19:44<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":70}]\\'>twinopen: 102.05</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":26,\"branch\":1,\"machine\":70}]\\'>tsspider_nochrome: 54.32</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":70}]\\'>ts: 560.53</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":1,\"branch\":1,\"machine\":70}]\\'>tp_nochrome: 318.89</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":10,\"branch\":1,\"machine\":70}]\\'>tp_memset_nochrome: 53.8MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":23,\"branch\":1,\"machine\":70}]\\'>tsvg_nochrome: 3731.73</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":21,\"branch\":1,\"machine\":70}]\\'>tgfx_nochrome: 18.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":19,\"branch\":1,\"machine\":70}]\\'>tdhtml_nochrome: 744.41</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":70,\"testrun\":380175}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":26,\"branch\":1,\"machine\":70,\"testrun\":380176}]\\'>tsspider_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":70,\"testrun\":380177}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":1,\"branch\":1,\"machine\":70,\"testrun\":380178}]\\'>tp_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":10,\"branch\":1,\"machine\":70,\"testrun\":380180}]\\'>tp_memset_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":23,\"branch\":1,\"machine\":70,\"testrun\":380181}]\\'>tsvg_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":21,\"branch\":1,\"machine\":70,\"testrun\":380182}]\\'>tgfx_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":19,\"branch\":1,\"machine\":70,\"testrun\":380183}]\\'>tdhtml_nochrome</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431842\">twinopen: 102.05</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431844\">tsspider: 54.32</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431846\">ts: 560.53</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431848\">tp: 318.89</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431880\">tp_memset: 53.8MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431885\">tsvg: 3731.73</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431894\">tdhtml: 744.41</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625732\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625733\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625734\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625735\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625738\">tp_memset</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625739\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625740\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625741\">tdhtml</a> ','</p>'],'1240151392.1240151703.2259.gz' : [' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/11f68e169ed4 title=\"Built from revision 11f68e169ed4\">rev:11f68e169ed4</a>','<abbr title=\"refcnt Leaks\">RLk</abbr>:0B','<abbr title=\"Total Bytes malloc\\'ed and not free\\'d\">Lk</abbr>:2.09MB','<abbr title=\"Maximum Heap Size\">MH</abbr>:23.3MB','<abbr title=\"Allocations - number of calls to malloc and friends\">A</abbr>:807777'],'1240134674.1240145627.21158.gz' : ['id:20090419025114','<a href = \"http://hg.mozilla.org/mozilla-central/rev/f9627950be8f\">rev:f9627950be8f</a>',' cycle time: 01:23:39<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":68}]\\'>twinopen: 98.47</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":68}]\\'>tsspider: 73.68</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":68}]\\'>ts: 559.21</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":2,\"branch\":1,\"machine\":68}]\\'>tp: 373.72</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":9,\"branch\":1,\"machine\":68}]\\'>tp_memset: 60.1MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":22,\"branch\":1,\"machine\":68}]\\'>tsvg: 3839.36</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":20,\"branch\":1,\"machine\":68}]\\'>tgfx: 1.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":68}]\\'>tdhtml: 751.15</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":68,\"testrun\":380331}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":68,\"testrun\":380332}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":68,\"testrun\":380333}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":2,\"branch\":1,\"machine\":68,\"testrun\":380334}]\\'>tp</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":9,\"branch\":1,\"machine\":68,\"testrun\":380336}]\\'>tp_memset</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":22,\"branch\":1,\"machine\":68,\"testrun\":380337}]\\'>tsvg</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":20,\"branch\":1,\"machine\":68,\"testrun\":380338}]\\'>tgfx</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":68,\"testrun\":380339}]\\'>tdhtml</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=787113\">twinopen: 98.47</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=787117\">tsspider: 73.68</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=787126\">ts: 559.21</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=787129\">tp: 373.72</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=787156\">tp_memset: 60.1MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=787159\">tsvg: 3839.36</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=787887\">tgfx: 1.00</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=787165\">tdhtml: 751.15</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625897\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625898\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625899\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625900\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625903\">tp_memset</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625904\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625905\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625906\">tdhtml</a> ','</p>'],'1240141596.1240152984.3997.gz' : ['id:20090419044636','<a href = \"http://hg.mozilla.org/mozilla-central/rev/907f2f562f44\">rev:907f2f562f44</a>',' cycle time: 01:21:19<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":56}]\\'>twinopen: 93.37</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":56}]\\'>tsspider: 70.52</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":56}]\\'>ts: 468.95</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":2,\"branch\":1,\"machine\":56}]\\'>tp: 163.9</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":9,\"branch\":1,\"machine\":56}]\\'>tp_memset: 65.6MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":22,\"branch\":1,\"machine\":56}]\\'>tsvg: 4203.05</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":20,\"branch\":1,\"machine\":56}]\\'>tgfx: 1.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":56}]\\'>tdhtml: 1080.94</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":56,\"testrun\":380994}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":56,\"testrun\":380995}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":56,\"testrun\":380996}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":2,\"branch\":1,\"machine\":56,\"testrun\":380997}]\\'>tp</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":9,\"branch\":1,\"machine\":56,\"testrun\":380999}]\\'>tp_memset</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":22,\"branch\":1,\"machine\":56,\"testrun\":381000}]\\'>tsvg</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":20,\"branch\":1,\"machine\":56,\"testrun\":381001}]\\'>tgfx</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":56,\"testrun\":381002}]\\'>tdhtml</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395014\">twinopen: 93.37</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395016\">tsspider: 70.52</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395018\">ts: 468.95</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395020\">tp: 163.90</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395034\">tp_memset: 65.6MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395036\">tsvg: 4203.05</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395040\">tdhtml: 1080.94</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626600\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626601\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626602\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626603\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626606\">tp_memset</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626607\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626608\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626609\">tdhtml</a> ','</p>'],'1240151407.1240155461.7094.gz' : ['id:20090419073007','<a href = \"http://hg.mozilla.org/mozilla-central/rev/11f68e169ed4\">rev:11f68e169ed4</a>',' cycle time: 00:56:03<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":65}]\\'>twinopen: 329.47</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":65}]\\'>tsspider: 85.06</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":65}]\\'>ts: 1538.42</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":2,\"branch\":1,\"machine\":65}]\\'>tp: 304.12</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":5,\"branch\":1,\"machine\":65}]\\'>tp_rss: 330.0MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":22,\"branch\":1,\"machine\":65}]\\'>tsvg: 3493.95</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":20,\"branch\":1,\"machine\":65}]\\'>tgfx: 2.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":65}]\\'>tdhtml: 905.15</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":65,\"testrun\":381146}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":65,\"testrun\":381147}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":65,\"testrun\":381148}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":2,\"branch\":1,\"machine\":65,\"testrun\":381149}]\\'>tp</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":5,\"branch\":1,\"machine\":65,\"testrun\":381151}]\\'>tp_rss</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":22,\"branch\":1,\"machine\":65,\"testrun\":381152}]\\'>tsvg</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":20,\"branch\":1,\"machine\":65,\"testrun\":381153}]\\'>tgfx</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":65,\"testrun\":381154}]\\'>tdhtml</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794398\">twinopen: 329.47</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794401\">tsspider: 85.06</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794405\">ts: 1538.42</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794407\">tp: 304.12</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794433\">tp_RSS: 330.0MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794456\">tsvg: 3493.95</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794460\">tdhtml: 905.15</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626761\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626762\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626763\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626764\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626766\">tp_RSS</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626767\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626768\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626769\">tdhtml</a> ','</p>'],'1240135059.1240137728.29805.gz' : ['id:20090419025739','<a href = \"http://hg.mozilla.org/mozilla-central/rev/907f2f562f44\">rev:907f2f562f44</a>',' cycle time: 00:11:40<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":73}]\\'>twinopen: 108.42</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":73}]\\'>tdhtml: 849.21</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":73}]\\'>tsspider: 92.02</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":73}]\\'>ts: 649.68</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":11,\"branch\":1,\"machine\":73}]\\'>tp_fast: 137.25</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":13,\"branch\":1,\"machine\":73}]\\'>tp_fast_rss: 61.7MB</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":73,\"testrun\":379645}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":73,\"testrun\":379646}]\\'>tdhtml</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":73,\"testrun\":379647}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":73,\"testrun\":379648}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":11,\"branch\":1,\"machine\":73,\"testrun\":379649}]\\'>tp_fast</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":13,\"branch\":1,\"machine\":73,\"testrun\":379651}]\\'>tp_fast_rss</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911690\">twinopen: 108.42</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911688\">tdhtml: 849.21</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911686\">tsspider: 92.02</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911692\">ts: 649.68</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911694\">tp: 137.25</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911698\">tp_RSS: 61.7MB</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625177\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625178\">tdhtml</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625179\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625180\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625181\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625183\">tp_RSS</a> ','</p>'],'1240135775.1240141028.13019.gz' : ['id:20090419030935','<a href = \"http://hg.mozilla.org/mozilla-central/rev/907f2f562f44\">rev:907f2f562f44</a>',' cycle time: 00:50:06<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":51}]\\'>twinopen: 108.89</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":51}]\\'>tsspider: 93.42</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":51}]\\'>ts: 650.79</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":2,\"branch\":1,\"machine\":51}]\\'>tp: 225.2</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":5,\"branch\":1,\"machine\":51}]\\'>tp_rss: 79.0MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":22,\"branch\":1,\"machine\":51}]\\'>tsvg: 4125.09</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":20,\"branch\":1,\"machine\":51}]\\'>tgfx: 19.83</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":51}]\\'>tdhtml: 853.06</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":51,\"testrun\":379938}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":51,\"testrun\":379939}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":51,\"testrun\":379940}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":2,\"branch\":1,\"machine\":51,\"testrun\":379941}]\\'>tp</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":5,\"branch\":1,\"machine\":51,\"testrun\":379943}]\\'>tp_rss</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":22,\"branch\":1,\"machine\":51,\"testrun\":379944}]\\'>tsvg</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":20,\"branch\":1,\"machine\":51,\"testrun\":379945}]\\'>tgfx</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":51,\"testrun\":379946}]\\'>tdhtml</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395160\">twinopen: 108.89</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395162\">tsspider: 93.42</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395164\">ts: 650.79</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395166\">tp: 225.20</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395170\">tp_RSS: 79.0MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395172\">tsvg: 4125.09</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395174\">tgfx: 19.83</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395176\">tdhtml: 853.06</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625487\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625488\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625489\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625490\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625492\">tp_RSS</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625493\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625494\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625495\">tdhtml</a> ','</p>'],'1240129495.1240130842.20393.gz' : [' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/f9627950be8f title=\"Built from revision f9627950be8f\">rev:f9627950be8f</a>','<abbr title=\"refcnt Leaks\">RLk</abbr>:0B','<abbr title=\"Total Bytes malloc\\'ed and not free\\'d\">Lk</abbr>:884KB','<abbr title=\"Maximum Heap Size\">MH</abbr>:21.5MB','<abbr title=\"Allocations - number of calls to malloc and friends\">A</abbr>:668166'],'1240129514.1240133598.23646.gz' : ['id:20090419012514','<a href = \"http://hg.mozilla.org/mozilla-central/rev/f9627950be8f\">rev:f9627950be8f</a>',' cycle time: 00:55:59<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":65}]\\'>twinopen: 324.84</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":65}]\\'>tsspider: 84.88</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":65}]\\'>ts: 1595.95</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":2,\"branch\":1,\"machine\":65}]\\'>tp: 302.33</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":5,\"branch\":1,\"machine\":65}]\\'>tp_rss: 332.0MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":22,\"branch\":1,\"machine\":65}]\\'>tsvg: 3494.91</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":20,\"branch\":1,\"machine\":65}]\\'>tgfx: 2.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":65}]\\'>tdhtml: 905.06</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":65,\"testrun\":379337}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":65,\"testrun\":379338}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":65,\"testrun\":379339}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":2,\"branch\":1,\"machine\":65,\"testrun\":379340}]\\'>tp</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":5,\"branch\":1,\"machine\":65,\"testrun\":379342}]\\'>tp_rss</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":22,\"branch\":1,\"machine\":65,\"testrun\":379343}]\\'>tsvg</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":20,\"branch\":1,\"machine\":65,\"testrun\":379344}]\\'>tgfx</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":65,\"testrun\":379345}]\\'>tdhtml</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794398\">twinopen: 324.84</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794401\">tsspider: 84.88</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794405\">ts: 1595.95</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794407\">tp: 302.33</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794433\">tp_RSS: 332.0MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794456\">tsvg: 3494.91</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794460\">tdhtml: 905.06</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624854\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624855\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624856\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624857\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624859\">tp_RSS</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624860\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624861\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624862\">tdhtml</a> ','</p>'],'1240137051.1240142027.14703.gz' : ['id:20090419033051','<a href = \"http://hg.mozilla.org/mozilla-central/rev/11f68e169ed4\">rev:11f68e169ed4</a>',' cycle time: 00:12:32<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":72}]\\'>twinopen: 488.05</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":72}]\\'>tdhtml: 901.82</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":72}]\\'>tsspider: 85.54</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":72}]\\'>ts: 1114.53</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":11,\"branch\":1,\"machine\":72}]\\'>tp_fast: 149.9</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":13,\"branch\":1,\"machine\":72}]\\'>tp_fast_rss: 258.6MB</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":72,\"testrun\":380037}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":72,\"testrun\":380038}]\\'>tdhtml</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":72,\"testrun\":380039}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":72,\"testrun\":380040}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":11,\"branch\":1,\"machine\":72,\"testrun\":380041}]\\'>tp_fast</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":13,\"branch\":1,\"machine\":72,\"testrun\":380043}]\\'>tp_fast_rss</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911651\">twinopen: 488.05</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911649\">tdhtml: 901.82</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911647\">tsspider: 85.54</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911653\">ts: 1114.53</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911655\">tp: 149.90</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911659\">tp_RSS: 258.6MB</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625590\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625591\">tdhtml</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625592\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625593\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625594\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625596\">tp_RSS</a> ','</p>'],'1240147301.1240148020.24189.gz' : [' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/11f68e169ed4 title=\"Built from revision 11f68e169ed4\">rev:11f68e169ed4</a>'],'1240151392.1240157428.11379.gz' : [' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/11f68e169ed4 title=\"Built from revision 11f68e169ed4\">rev:11f68e169ed4</a>',' check<br/>629/0',' xpcshell-tests<br/>607/0',' reftest<br/>2985/0/162',' crashtest<br/>1093/0/7',' mochitest-plain<br/>79208/0/1262',' mochitest-chrome<br/>2037/0/30',' mochitest-browser-chrome<br/>2798/0/5'],'1240137051.1240144623.19355.gz' : ['id:20090419033051','<a href = \"http://hg.mozilla.org/mozilla-central/rev/11f68e169ed4\">rev:11f68e169ed4</a>',' cycle time: 00:55:57<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":63}]\\'>twinopen: 328.16</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":63}]\\'>tsspider: 84.76</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":63}]\\'>ts: 1559.53</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":2,\"branch\":1,\"machine\":63}]\\'>tp: 304.86</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":5,\"branch\":1,\"machine\":63}]\\'>tp_rss: 329.7MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":22,\"branch\":1,\"machine\":63}]\\'>tsvg: 3465.09</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":20,\"branch\":1,\"machine\":63}]\\'>tgfx: 2.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":63}]\\'>tdhtml: 910.74</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":63,\"testrun\":380263}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":63,\"testrun\":380264}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":63,\"testrun\":380265}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":2,\"branch\":1,\"machine\":63,\"testrun\":380266}]\\'>tp</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":5,\"branch\":1,\"machine\":63,\"testrun\":380268}]\\'>tp_rss</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":22,\"branch\":1,\"machine\":63,\"testrun\":380269}]\\'>tsvg</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":20,\"branch\":1,\"machine\":63,\"testrun\":380270}]\\'>tgfx</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":63,\"testrun\":380271}]\\'>tdhtml</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794384\">twinopen: 328.16</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794387\">tsspider: 84.76</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794391\">ts: 1559.53</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794396\">tp: 304.86</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794420\">tp_RSS: 329.7MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794447\">tsvg: 3465.09</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794452\">tdhtml: 910.74</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625824\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625825\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625826\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625827\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625829\">tp_RSS</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625830\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625831\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625832\">tdhtml</a> ','</p>'],'1240127582.1240129392.18645.gz' : ['id:20090419005302','<a href = \"http://hg.mozilla.org/mozilla-central/rev/c319b49e2880\">rev:c319b49e2880</a>',' cycle time: 00:12:38<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":72}]\\'>twinopen: 497.16</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":72}]\\'>tdhtml: 915.09</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":72}]\\'>tsspider: 85.54</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":72}]\\'>ts: 1160.68</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":11,\"branch\":1,\"machine\":72}]\\'>tp_fast: 149.88</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":13,\"branch\":1,\"machine\":72}]\\'>tp_fast_rss: 258.7MB</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":72,\"testrun\":379010}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":72,\"testrun\":379011}]\\'>tdhtml</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":72,\"testrun\":379012}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":72,\"testrun\":379013}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":11,\"branch\":1,\"machine\":72,\"testrun\":379014}]\\'>tp_fast</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":13,\"branch\":1,\"machine\":72,\"testrun\":379016}]\\'>tp_fast_rss</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911651\">twinopen: 497.16</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911649\">tdhtml: 915.09</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911647\">tsspider: 85.54</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911653\">ts: 1160.68</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911655\">tp: 149.88</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911659\">tp_RSS: 258.7MB</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624508\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624509\">tdhtml</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624510\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624511\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624512\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624514\">tp_RSS</a> ','</p>'],'1240135056.1240137310.29338.gz' : ['id:20090419025736','<a href = \"http://hg.mozilla.org/mozilla-central/rev/907f2f562f44\">rev:907f2f562f44</a>',' cycle time: 00:12:28<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":72}]\\'>twinopen: 491.21</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":72}]\\'>tdhtml: 908.5</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":72}]\\'>tsspider: 85.54</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":72}]\\'>ts: 1148.95</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":11,\"branch\":1,\"machine\":72}]\\'>tp_fast: 148.65</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":13,\"branch\":1,\"machine\":72}]\\'>tp_fast_rss: 257.2MB</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":72,\"testrun\":379629}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":72,\"testrun\":379630}]\\'>tdhtml</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":72,\"testrun\":379631}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":72,\"testrun\":379632}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":11,\"branch\":1,\"machine\":72,\"testrun\":379633}]\\'>tp_fast</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":13,\"branch\":1,\"machine\":72,\"testrun\":379635}]\\'>tp_fast_rss</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911651\">twinopen: 491.21</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911649\">tdhtml: 908.50</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911647\">tsspider: 85.54</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911653\">ts: 1148.95</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911655\">tp: 148.65</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911659\">tp_RSS: 257.2MB</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625161\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625162\">tdhtml</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625163\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625164\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625165\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625167\">tp_RSS</a> ','</p>'],'1240134674.1240141862.14492.gz' : ['id:20090419025114','<a href = \"http://hg.mozilla.org/mozilla-central/rev/f9627950be8f\">rev:f9627950be8f</a>',' cycle time: 00:20:53<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":74}]\\'>tsspider: 70.42</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":24,\"branch\":1,\"machine\":74}]\\'>tjss: 39.98</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":74}]\\'>ts: 455.05</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":74}]\\'>twinopen: 95.16</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":74,\"testrun\":380006}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":24,\"branch\":1,\"machine\":74,\"testrun\":380007}]\\'>tjss</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":74,\"testrun\":380008}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":74,\"testrun\":380009}]\\'>twinopen</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=2698579\">tsspider: 70.42</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=2698581\">tjss: 39.98</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=2698583\">ts: 455.05</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=2698585\">twinopen: 95.16</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625558\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625559\">tjss</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625560\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625561\">twinopen</a> ','</p>'],'1240127546.1240128584.17568.gz' : [' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/c319b49e2880 title=\"Built from revision c319b49e2880\">rev:c319b49e2880</a>','Z:18.7MB','Zdiff:+12984 (+107576/-94592)'],'1240135056.1240139911.32752.gz' : ['id:20090419025736','<a href = \"http://hg.mozilla.org/mozilla-central/rev/907f2f562f44\">rev:907f2f562f44</a>',' cycle time: 00:55:53<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":63}]\\'>twinopen: 329.42</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":63}]\\'>tsspider: 84.84</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":63}]\\'>ts: 1539.84</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":2,\"branch\":1,\"machine\":63}]\\'>tp: 303.89</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":5,\"branch\":1,\"machine\":63}]\\'>tp_rss: 329.7MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":22,\"branch\":1,\"machine\":63}]\\'>tsvg: 3461.09</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":20,\"branch\":1,\"machine\":63}]\\'>tgfx: 2.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":63}]\\'>tdhtml: 905.88</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":63,\"testrun\":379818}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":63,\"testrun\":379819}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":63,\"testrun\":379820}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":2,\"branch\":1,\"machine\":63,\"testrun\":379821}]\\'>tp</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":5,\"branch\":1,\"machine\":63,\"testrun\":379823}]\\'>tp_rss</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":22,\"branch\":1,\"machine\":63,\"testrun\":379824}]\\'>tsvg</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":20,\"branch\":1,\"machine\":63,\"testrun\":379825}]\\'>tgfx</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":63,\"testrun\":379826}]\\'>tdhtml</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794384\">twinopen: 329.42</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794387\">tsspider: 84.84</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794391\">ts: 1539.84</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794396\">tp: 303.89</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794420\">tp_RSS: 329.7MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794447\">tsvg: 3461.09</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794452\">tdhtml: 905.88</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625361\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625362\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625363\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625364\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625366\">tp_RSS</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625367\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625368\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625369\">tdhtml</a> ','</p>'],'1240121181.1240127606.16330.gz' : [' \"<a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/e2bf0c7914c8 title=\\\\\"Built from revision e2bf0c7914c8\\\\\">rev:e2bf0c7914c8</a>\"',' check<br/>667/0',' xpcshell-tests<br/>608/0',' reftest<br/>2984/0/163',' crashtest<br/>1092/0/8',' mochitest-plain<br/>79384/0/1259',' mochitest-chrome<br/>1767/0/29',' mochitest-browser-chrome<br/>2802/0/5',' mochitest-a11y<br/>2250/0/78'],'1240134674.1240145517.20886.gz' : ['id:20090419025114','<a href = \"http://hg.mozilla.org/mozilla-central/rev/f9627950be8f\">rev:f9627950be8f</a>',' cycle time: 01:21:21<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":56}]\\'>twinopen: 93.89</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":56}]\\'>tsspider: 70.58</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":56}]\\'>ts: 457.63</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":2,\"branch\":1,\"machine\":56}]\\'>tp: 163.88</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":9,\"branch\":1,\"machine\":56}]\\'>tp_memset: 65.3MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":22,\"branch\":1,\"machine\":56}]\\'>tsvg: 4204.32</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":20,\"branch\":1,\"machine\":56}]\\'>tgfx: 1.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":56}]\\'>tdhtml: 1083.06</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":56,\"testrun\":380313}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":56,\"testrun\":380314}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":56,\"testrun\":380315}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":2,\"branch\":1,\"machine\":56,\"testrun\":380316}]\\'>tp</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":9,\"branch\":1,\"machine\":56,\"testrun\":380318}]\\'>tp_memset</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":22,\"branch\":1,\"machine\":56,\"testrun\":380319}]\\'>tsvg</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":20,\"branch\":1,\"machine\":56,\"testrun\":380320}]\\'>tgfx</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":56,\"testrun\":380321}]\\'>tdhtml</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395014\">twinopen: 93.89</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395016\">tsspider: 70.58</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395018\">ts: 457.63</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395020\">tp: 163.88</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395034\">tp_memset: 65.3MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395036\">tsvg: 4204.32</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395040\">tdhtml: 1083.06</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625875\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625876\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625877\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625878\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625881\">tp_memset</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625882\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625883\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625884\">tdhtml</a> ','</p>'],'1240136993.1240145409.20736.gz' : [' forced clobber',' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/11f68e169ed4 title=\"Built from revision 11f68e169ed4\">rev:11f68e169ed4</a>',' check<br/>630/0',' xpcshell-tests<br/>608/0',' reftest<br/>2976/0/171',' crashtest<br/>1092/0/8',' mochitest-plain<br/>79090/0/1258',' mochitest-chrome<br/>1462/0/30',' mochitest-browser-chrome<br/>2824/0/5',' mochitest-a11y<br/>2251/0/77'],'1240127721.1240132664.22677.gz' : ['id:20090419005521','<a href = \"http://hg.mozilla.org/mozilla-central/rev/c319b49e2880\">rev:c319b49e2880</a>',' cycle time: 00:46:32<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":54}]\\'>twinopen: 108.43</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":26,\"branch\":1,\"machine\":54}]\\'>tsspider_nochrome: 74.98</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":54}]\\'>ts: 651.84</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":1,\"branch\":1,\"machine\":54}]\\'>tp_nochrome: 192.97</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":6,\"branch\":1,\"machine\":54}]\\'>tp_rss_nochrome: 71.2MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":23,\"branch\":1,\"machine\":54}]\\'>tsvg_nochrome: 4117.59</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":21,\"branch\":1,\"machine\":54}]\\'>tgfx_nochrome: 25.5</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":19,\"branch\":1,\"machine\":54}]\\'>tdhtml_nochrome: 847.44</a><br>',\n\
+'<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":54,\"testrun\":379244}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":26,\"branch\":1,\"machine\":54,\"testrun\":379245}]\\'>tsspider_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":54,\"testrun\":379246}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":1,\"branch\":1,\"machine\":54,\"testrun\":379247}]\\'>tp_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":6,\"branch\":1,\"machine\":54,\"testrun\":379249}]\\'>tp_rss_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":23,\"branch\":1,\"machine\":54,\"testrun\":379250}]\\'>tsvg_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":21,\"branch\":1,\"machine\":54,\"testrun\":379251}]\\'>tgfx_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":19,\"branch\":1,\"machine\":54,\"testrun\":379252}]\\'>tdhtml_nochrome</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431026\">twinopen: 108.43</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431028\">tsspider: 74.98</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431030\">ts: 651.84</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431032\">tp: 192.97</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431037\">tp_RSS: 71.2MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431042\">tsvg: 4117.59</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431045\">tgfx: 25.50</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431047\">tdhtml: 847.44</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624756\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624757\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624758\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624759\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624761\">tp_RSS</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624762\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624763\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624764\">tdhtml</a> ','</p>'],'1240142843.1240145625.21152.gz' : [' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/11f68e169ed4 title=\"Built from revision 11f68e169ed4\">rev:11f68e169ed4</a>'],'1240135056.1240139823.32650.gz' : ['id:20090419025736','<a href = \"http://hg.mozilla.org/mozilla-central/rev/907f2f562f44\">rev:907f2f562f44</a>',' cycle time: 00:54:32<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":62}]\\'>twinopen: 484.17</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":26,\"branch\":1,\"machine\":62}]\\'>tsspider_nochrome: 71.14</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":62}]\\'>ts: 1112.47</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":1,\"branch\":1,\"machine\":62}]\\'>tp_nochrome: 283.67</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":6,\"branch\":1,\"machine\":62}]\\'>tp_rss_nochrome: 302.1MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":23,\"branch\":1,\"machine\":62}]\\'>tsvg_nochrome: 4254.18</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":21,\"branch\":1,\"machine\":62}]\\'>tgfx_nochrome: 4.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":19,\"branch\":1,\"machine\":62}]\\'>tdhtml_nochrome: 903.24</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":62,\"testrun\":379793}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":26,\"branch\":1,\"machine\":62,\"testrun\":379794}]\\'>tsspider_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":62,\"testrun\":379795}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":1,\"branch\":1,\"machine\":62,\"testrun\":379796}]\\'>tp_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":6,\"branch\":1,\"machine\":62,\"testrun\":379798}]\\'>tp_rss_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":23,\"branch\":1,\"machine\":62,\"testrun\":379799}]\\'>tsvg_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":21,\"branch\":1,\"machine\":62,\"testrun\":379800}]\\'>tgfx_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":19,\"branch\":1,\"machine\":62,\"testrun\":379801}]\\'>tdhtml_nochrome</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431141\">twinopen: 484.17</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431148\">tsspider: 71.14</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431157\">ts: 1112.47</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431170\">tp: 283.67</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431190\">tp_RSS: 302.1MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431208\">tsvg: 4254.18</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431219\">tdhtml: 903.24</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625335\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625336\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625337\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625338\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625340\">tp_RSS</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625341\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625342\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625343\">tdhtml</a> ','</p>'],'1240127721.1240130577.20113.gz' : ['id:20090419005521','<a href = \"http://hg.mozilla.org/mozilla-central/rev/c319b49e2880\">rev:c319b49e2880</a>',' cycle time: 00:11:44<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":73}]\\'>twinopen: 110.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":73}]\\'>tdhtml: 854.94</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":73}]\\'>tsspider: 94.44</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":73}]\\'>ts: 656.89</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":11,\"branch\":1,\"machine\":73}]\\'>tp_fast: 139.05</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":13,\"branch\":1,\"machine\":73}]\\'>tp_fast_rss: 62.1MB</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":73,\"testrun\":379060}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":73,\"testrun\":379061}]\\'>tdhtml</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":73,\"testrun\":379062}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":73,\"testrun\":379063}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":11,\"branch\":1,\"machine\":73,\"testrun\":379064}]\\'>tp_fast</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":13,\"branch\":1,\"machine\":73,\"testrun\":379066}]\\'>tp_fast_rss</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911690\">twinopen: 110.00</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911688\">tdhtml: 854.94</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911686\">tsspider: 94.44</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911692\">ts: 656.89</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911694\">tp: 139.05</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911698\">tp_RSS: 62.1MB</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624563\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624564\">tdhtml</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624565\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624566\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624567\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624569\">tp_RSS</a> ','</p>'],'1240129866.1240133424.23489.gz' : ['id:20090419013106','<a href = \"http://hg.mozilla.org/mozilla-central/rev/f9627950be8f\">rev:f9627950be8f</a>',' cycle time: 00:11:41<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":73}]\\'>twinopen: 108.95</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":73}]\\'>tdhtml: 848.09</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":73}]\\'>tsspider: 93.04</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":73}]\\'>ts: 666.11</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":11,\"branch\":1,\"machine\":73}]\\'>tp_fast: 138.03</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":13,\"branch\":1,\"machine\":73}]\\'>tp_fast_rss: 61.5MB</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":73,\"testrun\":379330}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":73,\"testrun\":379331}]\\'>tdhtml</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":73,\"testrun\":379332}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":73,\"testrun\":379333}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":11,\"branch\":1,\"machine\":73,\"testrun\":379334}]\\'>tp_fast</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":13,\"branch\":1,\"machine\":73,\"testrun\":379336}]\\'>tp_fast_rss</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911690\">twinopen: 108.95</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911688\">tdhtml: 848.09</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911686\">tsspider: 93.04</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911692\">ts: 666.11</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911694\">tp: 138.03</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911698\">tp_RSS: 61.5MB</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624847\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624848\">tdhtml</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624849\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624850\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624851\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624853\">tp_RSS</a> ','</p>'],'1240151407.1240155357.6984.gz' : ['id:20090419073007','<a href = \"http://hg.mozilla.org/mozilla-central/rev/11f68e169ed4\">rev:11f68e169ed4</a>',' cycle time: 00:54:29<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":62}]\\'>twinopen: 490.42</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":26,\"branch\":1,\"machine\":62}]\\'>tsspider_nochrome: 71.2</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":62}]\\'>ts: 1244.16</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":1,\"branch\":1,\"machine\":62}]\\'>tp_nochrome: 285.45</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":6,\"branch\":1,\"machine\":62}]\\'>tp_rss_nochrome: 303.1MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":23,\"branch\":1,\"machine\":62}]\\'>tsvg_nochrome: 4260.14</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":21,\"branch\":1,\"machine\":62}]\\'>tgfx_nochrome: 4.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":19,\"branch\":1,\"machine\":62}]\\'>tdhtml_nochrome: 903.18</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":62,\"testrun\":381124}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":26,\"branch\":1,\"machine\":62,\"testrun\":381125}]\\'>tsspider_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":62,\"testrun\":381126}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":1,\"branch\":1,\"machine\":62,\"testrun\":381127}]\\'>tp_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":6,\"branch\":1,\"machine\":62,\"testrun\":381129}]\\'>tp_rss_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":23,\"branch\":1,\"machine\":62,\"testrun\":381130}]\\'>tsvg_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":21,\"branch\":1,\"machine\":62,\"testrun\":381131}]\\'>tgfx_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":19,\"branch\":1,\"machine\":62,\"testrun\":381132}]\\'>tdhtml_nochrome</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431141\">twinopen: 490.42</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431148\">tsspider: 71.20</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431157\">ts: 1244.16</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431170\">tp: 285.45</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431190\">tp_RSS: 303.1MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431208\">tsvg: 4260.14</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431219\">tdhtml: 903.18</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626739\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626740\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626741\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626742\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626744\">tp_RSS</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626745\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626746\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626747\">tdhtml</a> ','</p>'],'1240129495.1240134802.25455.gz' : [' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/f9627950be8f title=\"Built from revision f9627950be8f\">rev:f9627950be8f</a>',' check<br/>632/0',' xpcshell-tests<br/>609/<em class=\"testfail\">1</em>',' reftest<br/>2985/0/162',' crashtest<br/>1093/0/7',' mochitest-plain<br/>79205/0/1262',' mochitest-chrome<br/>2037/0/30',' mochitest-browser-chrome<br/>2794/0/5'],'1240135019.1240136496.28127.gz' : [' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/907f2f562f44 title=\"Built from revision 907f2f562f44\">rev:907f2f562f44</a>','Z:18.7MB'],'1240151407.1240157188.10324.gz' : ['id:20090419073007','<a href = \"http://hg.mozilla.org/mozilla-central/rev/11f68e169ed4\">rev:11f68e169ed4</a>',' cycle time: 00:56:30<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":66}]\\'>twinopen: 329.42</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":26,\"branch\":1,\"machine\":66}]\\'>tsspider_nochrome: 70.36</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":66}]\\'>ts: 1785.47</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":1,\"branch\":1,\"machine\":66}]\\'>tp_nochrome: 316.13</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":6,\"branch\":1,\"machine\":66}]\\'>tp_rss_nochrome: 307.7MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":23,\"branch\":1,\"machine\":66}]\\'>tsvg_nochrome: 3494.95</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":21,\"branch\":1,\"machine\":66}]\\'>tgfx_nochrome: 6.5</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":19,\"branch\":1,\"machine\":66}]\\'>tdhtml_nochrome: 905.18</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":66,\"testrun\":381246}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":26,\"branch\":1,\"machine\":66,\"testrun\":381247}]\\'>tsspider_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":66,\"testrun\":381248}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":1,\"branch\":1,\"machine\":66,\"testrun\":381249}]\\'>tp_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":6,\"branch\":1,\"machine\":66,\"testrun\":381251}]\\'>tp_rss_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":23,\"branch\":1,\"machine\":66,\"testrun\":381252}]\\'>tsvg_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":21,\"branch\":1,\"machine\":66,\"testrun\":381253}]\\'>tgfx_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":19,\"branch\":1,\"machine\":66,\"testrun\":381254}]\\'>tdhtml_nochrome</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431186\">twinopen: 329.42</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431192\">tsspider: 70.36</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431206\">ts: 1785.47</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431214\">tp: 316.13</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431230\">tp_RSS: 307.7MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431234\">tsvg: 3494.95</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431237\">tgfx: 6.50</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431240\">tdhtml: 905.18</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626865\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626866\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626867\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626868\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626870\">tp_RSS</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626871\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626872\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626875\">tdhtml</a> ','</p>'],'1240144239.1240148083.24284.gz' : ['id:20090419053039','<a href = \"http://hg.mozilla.org/mozilla-central/rev/11f68e169ed4\">rev:11f68e169ed4</a>',' cycle time: 00:50:26<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":53}]\\'>twinopen: 108.89</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":53}]\\'>tsspider: 99.66</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":53}]\\'>ts: 656.63</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":2,\"branch\":1,\"machine\":53}]\\'>tp: 225.89</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":5,\"branch\":1,\"machine\":53}]\\'>tp_rss: 79.1MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":22,\"branch\":1,\"machine\":53}]\\'>tsvg: 4139.55</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":20,\"branch\":1,\"machine\":53}]\\'>tgfx: 20.17</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":53}]\\'>tdhtml: 848.68</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":53,\"testrun\":380585}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":53,\"testrun\":380586}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":53,\"testrun\":380587}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":2,\"branch\":1,\"machine\":53,\"testrun\":380588}]\\'>tp</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":5,\"branch\":1,\"machine\":53,\"testrun\":380590}]\\'>tp_rss</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":22,\"branch\":1,\"machine\":53,\"testrun\":380591}]\\'>tsvg</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":20,\"branch\":1,\"machine\":53,\"testrun\":380592}]\\'>tgfx</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":53,\"testrun\":380593}]\\'>tdhtml</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395129\">twinopen: 108.89</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395131\">tsspider: 99.66</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395133\">ts: 656.63</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395135\">tp: 225.89</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395141\">tp_RSS: 79.1MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395148\">tsvg: 4139.55</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=398218\">tgfx: 20.17</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395151\">tdhtml: 848.68</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626166\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626167\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626168\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626169\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626171\">tp_RSS</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626172\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626173\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626174\">tdhtml</a> ','</p>'],'1240133109.1240143777.18361.gz' : ['id:20090419022509','<a href = \"http://hg.mozilla.org/mozilla-central/rev/c319b49e2880\">rev:c319b49e2880</a>',' cycle time: 01:20:45<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":57}]\\'>twinopen: 94.05</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":57}]\\'>tsspider: 69.84</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":57}]\\'>ts: 472.53</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":2,\"branch\":1,\"machine\":57}]\\'>tp: 166.22</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":9,\"branch\":1,\"machine\":57}]\\'>tp_memset: 65.8MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":22,\"branch\":1,\"machine\":57}]\\'>tsvg: 4203.45</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":20,\"branch\":1,\"machine\":57}]\\'>tgfx: 1.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":57}]\\'>tdhtml: 1080.59</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":57,\"testrun\":380202}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":57,\"testrun\":380203}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":57,\"testrun\":380204}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":2,\"branch\":1,\"machine\":57,\"testrun\":380205}]\\'>tp</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":9,\"branch\":1,\"machine\":57,\"testrun\":380207}]\\'>tp_memset</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":22,\"branch\":1,\"machine\":57,\"testrun\":380208}]\\'>tsvg</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":20,\"branch\":1,\"machine\":57,\"testrun\":380209}]\\'>tgfx</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":57,\"testrun\":380210}]\\'>tdhtml</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395042\">twinopen: 94.05</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395044\">tsspider: 69.84</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395046\">ts: 472.53</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395048\">tp: 166.22</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395054\">tp_memset: 65.8MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395056\">tsvg: 4203.45</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395060\">tdhtml: 1080.59</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625761\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625762\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625763\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625764\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625767\">tp_memset</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625768\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625769\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625770\">tdhtml</a> ','</p>'],'1240138174.1240141779.14339.gz' : [' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/11f68e169ed4 title=\"Built from revision 11f68e169ed4\">rev:11f68e169ed4</a>',' check<br/>629/0',' xpcshell-tests<br/>607/0',' reftest<br/>2985/0/162',' crashtest<br/>1093/0/7',' mochitest-plain<br/>79203/0/1262',' mochitest-chrome<br/>2037/0/30',' mochitest-browser-chrome<br/>2797/0/5'],'1240144192.1240145217.20459.gz' : [' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/11f68e169ed4 title=\"Built from revision 11f68e169ed4\">rev:11f68e169ed4</a>','Z:18.7MB'],'1240127721.1240132895.22956.gz' : ['id:20090419005521','<a href = \"http://hg.mozilla.org/mozilla-central/rev/c319b49e2880\">rev:c319b49e2880</a>',' cycle time: 00:50:25<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":51}]\\'>twinopen: 107.95</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":51}]\\'>tsspider: 94.56</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":51}]\\'>ts: 649.84</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":2,\"branch\":1,\"machine\":51}]\\'>tp: 225.27</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":5,\"branch\":1,\"machine\":51}]\\'>tp_rss: 79.1MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":22,\"branch\":1,\"machine\":51}]\\'>tsvg: 4166.73</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":20,\"branch\":1,\"machine\":51}]\\'>tgfx: 20.08</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":51}]\\'>tdhtml: 852.24</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":51,\"testrun\":379287}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":51,\"testrun\":379288}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":51,\"testrun\":379289}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":2,\"branch\":1,\"machine\":51,\"testrun\":379290}]\\'>tp</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":5,\"branch\":1,\"machine\":51,\"testrun\":379292}]\\'>tp_rss</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":22,\"branch\":1,\"machine\":51,\"testrun\":379293}]\\'>tsvg</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":20,\"branch\":1,\"machine\":51,\"testrun\":379294}]\\'>tgfx</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":51,\"testrun\":379295}]\\'>tdhtml</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395160\">twinopen: 107.95</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395162\">tsspider: 94.56</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395164\">ts: 649.84</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395166\">tp: 225.27</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395170\">tp_RSS: 79.1MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395172\">tsvg: 4166.73</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395174\">tgfx: 20.08</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395176\">tdhtml: 852.24</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624802\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624803\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624804\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624805\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624807\">tp_RSS</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624808\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624809\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624810\">tdhtml</a> ','</p>'],'1240148892.1240155074.6517.gz' : ['id:20090419064812','<a href = \"http://hg.mozilla.org/mozilla-central/rev/11f68e169ed4\">rev:11f68e169ed4</a>',' cycle time: 00:15:23<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":71}]\\'>twinopen: 93.63</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":71}]\\'>tdhtml: 1080.65</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":71}]\\'>tsspider: 70.2</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":71}]\\'>ts: 473.32</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":11,\"branch\":1,\"machine\":71}]\\'>tp_fast: 95.95</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":15,\"branch\":1,\"machine\":71}]\\'>tp_fast_memset: 47.9MB</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":71,\"testrun\":381108}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":71,\"testrun\":381109}]\\'>tdhtml</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":71,\"testrun\":381110}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":71,\"testrun\":381111}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":11,\"branch\":1,\"machine\":71,\"testrun\":381112}]\\'>tp_fast</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":15,\"branch\":1,\"machine\":71,\"testrun\":381114}]\\'>tp_fast_memset</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=912144\">twinopen: 93.63</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=912141\">tdhtml: 1080.65</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=912138\">tsspider: 70.20</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=912146\">ts: 473.32</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=912148\">tp: 95.95</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=912154\">tp_memset: 47.9MB</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626722\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626723\">tdhtml</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626724\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626725\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626726\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626729\">tp_memset</a> ','</p>'],'1240136993.1240141370.13427.gz' : [' \"<a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/11f68e169ed4 title=\\\\\"Built from revision 11f68e169ed4\\\\\">rev:11f68e169ed4</a>\"','<abbr title=\"refcnt Leaks\">RLk</abbr>:0B','<abbr title=\"Total Bytes malloc\\'ed and not free\\'d\">Lk</abbr>:111KB','<abbr title=\"Maximum Heap Size\">MH</abbr>:14.7MB','<abbr title=\"Allocations - number of calls to malloc and friends\">A</abbr>:381745'],'1240129514.1240130993.20617.gz' : ['id:20090419012514','<a href = \"http://hg.mozilla.org/mozilla-central/rev/f9627950be8f\">rev:f9627950be8f</a>',' cycle time: 00:12:29<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":72}]\\'>twinopen: 497.26</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":72}]\\'>tdhtml: 917.71</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":72}]\\'>tsspider: 85.64</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":72}]\\'>ts: 1114.58</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":11,\"branch\":1,\"machine\":72}]\\'>tp_fast: 149.72</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":13,\"branch\":1,\"machine\":72}]\\'>tp_fast_rss: 258.2MB</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":72,\"testrun\":379092}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":72,\"testrun\":379093}]\\'>tdhtml</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":72,\"testrun\":379094}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":72,\"testrun\":379095}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":11,\"branch\":1,\"machine\":72,\"testrun\":379096}]\\'>tp_fast</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":13,\"branch\":1,\"machine\":72,\"testrun\":379098}]\\'>tp_fast_rss</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911651\">twinopen: 497.26</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911649\">tdhtml: 917.71</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911647\">tsspider: 85.64</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911653\">ts: 1114.58</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911655\">tp: 149.72</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911659\">tp_RSS: 258.2MB</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624595\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624596\">tdhtml</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624597\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624598\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624599\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624601\">tp_RSS</a> ','</p>'],'1240116360.1240126811.15433.gz' : ['id:20090418214600','<a href = \"http://hg.mozilla.org/mozilla-central/rev/e2bf0c7914c8\">rev:e2bf0c7914c8</a>',' cycle time: 01:20:45<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":67}]\\'>twinopen: 97.89</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":67}]\\'>tsspider: 73.3</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":67}]\\'>ts: 555.84</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":2,\"branch\":1,\"machine\":67}]\\'>tp: 359.51</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":9,\"branch\":1,\"machine\":67}]\\'>tp_memset: 59.9MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":22,\"branch\":1,\"machine\":67}]\\'>tsvg: 3840.68</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":20,\"branch\":1,\"machine\":67}]\\'>tgfx: 1.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":67}]\\'>tdhtml: 747.06</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":67,\"testrun\":378802}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":67,\"testrun\":378803}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":67,\"testrun\":378804}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":2,\"branch\":1,\"machine\":67,\"testrun\":378805}]\\'>tp</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":9,\"branch\":1,\"machine\":67,\"testrun\":378807}]\\'>tp_memset</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":22,\"branch\":1,\"machine\":67,\"testrun\":378808}]\\'>tsvg</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":20,\"branch\":1,\"machine\":67,\"testrun\":378809}]\\'>tgfx</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":67,\"testrun\":378810}]\\'>tdhtml</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=787109\">twinopen: 97.89</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=787111\">tsspider: 73.30</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=787114\">ts: 555.84</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=787118\">tp: 359.51</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=787155\">tp_memset: 59.9MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=787160\">tsvg: 3840.68</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=787166\">tdhtml: 747.06</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624285\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624286\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624287\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624288\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624291\">tp_memset</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624292\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624293\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624294\">tdhtml</a> ','</p>'],'1240148892.1240154173.5315.gz' : ['id:20090419064812','<a href = \"http://hg.mozilla.org/mozilla-central/rev/11f68e169ed4\">rev:11f68e169ed4</a>','FAIL: Busted: ts','FAIL: failed to initialize browser'],'1240134674.1240140641.12602.gz' : ['id:20090419025114','<a href = \"http://hg.mozilla.org/mozilla-central/rev/f9627950be8f\">rev:f9627950be8f</a>','FAIL: Busted: ts','FAIL: failed to initialize browser'],'1240141596.1240149325.25872.gz' : ['id:20090419044636','<a href = \"http://hg.mozilla.org/mozilla-central/rev/907f2f562f44\">rev:907f2f562f44</a>',' cycle time: 00:20:56<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":74}]\\'>tsspider: 70.28</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":24,\"branch\":1,\"machine\":74}]\\'>tjss: 40.04</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":74}]\\'>ts: 455.95</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":74}]\\'>twinopen: 94.63</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":74,\"testrun\":380696}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":24,\"branch\":1,\"machine\":74,\"testrun\":380697}]\\'>tjss</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":74,\"testrun\":380698}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":74,\"testrun\":380699}]\\'>twinopen</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=2698579\">tsspider: 70.28</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=2698581\">tjss: 40.04</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=2698583\">ts: 455.95</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=2698585\">twinopen: 94.63</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626281\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626282\">tjss</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626283\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626284\">twinopen</a> ','</p>'],'1240137051.1240146570.22408.gz' : ['id:20090419033051','<a href = \"http://hg.mozilla.org/mozilla-central/rev/11f68e169ed4\">rev:11f68e169ed4</a>',' cycle time: 00:54:50<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":62}]\\'>twinopen: 492.42</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":26,\"branch\":1,\"machine\":62}]\\'>tsspider_nochrome: 71.12</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":62}]\\'>ts: 1232.58</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":1,\"branch\":1,\"machine\":62}]\\'>tp_nochrome: 286.27</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":6,\"branch\":1,\"machine\":62}]\\'>tp_rss_nochrome: 302.8MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":23,\"branch\":1,\"machine\":62}]\\'>tsvg_nochrome: 4260.45</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":21,\"branch\":1,\"machine\":62}]\\'>tgfx_nochrome: 4.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":19,\"branch\":1,\"machine\":62}]\\'>tdhtml_nochrome: 903.35</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":62,\"testrun\":380435}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":26,\"branch\":1,\"machine\":62,\"testrun\":380436}]\\'>tsspider_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":62,\"testrun\":380437}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":1,\"branch\":1,\"machine\":62,\"testrun\":380438}]\\'>tp_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":6,\"branch\":1,\"machine\":62,\"testrun\":380440}]\\'>tp_rss_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":23,\"branch\":1,\"machine\":62,\"testrun\":380441}]\\'>tsvg_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":21,\"branch\":1,\"machine\":62,\"testrun\":380442}]\\'>tgfx_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":19,\"branch\":1,\"machine\":62,\"testrun\":380443}]\\'>tdhtml_nochrome</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431141\">twinopen: 492.42</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431148\">tsspider: 71.12</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431157\">ts: 1232.58</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431170\">tp: 286.27</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431190\">tp_RSS: 302.8MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431208\">tsvg: 4260.45</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431219\">tdhtml: 903.35</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626008\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626009\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626010\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626011\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626013\">tp_RSS</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626014\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626015\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626016\">tdhtml</a> ','</p>'],'1240129866.1240135671.26946.gz' : ['id:20090419013106','<a href = \"http://hg.mozilla.org/mozilla-central/rev/f9627950be8f\">rev:f9627950be8f</a>',' cycle time: 00:47:06<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":54}]\\'>twinopen: 108.59</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":26,\"branch\":1,\"machine\":54}]\\'>tsspider_nochrome: 75.04</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":54}]\\'>ts: 648.37</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":1,\"branch\":1,\"machine\":54}]\\'>tp_nochrome: 193.42</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":6,\"branch\":1,\"machine\":54}]\\'>tp_rss_nochrome: 71.5MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":23,\"branch\":1,\"machine\":54}]\\'>tsvg_nochrome: 4130.55</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":21,\"branch\":1,\"machine\":54}]\\'>tgfx_nochrome: 25.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":19,\"branch\":1,\"machine\":54}]\\'>tdhtml_nochrome: 846.09</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":54,\"testrun\":379509}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":26,\"branch\":1,\"machine\":54,\"testrun\":379510}]\\'>tsspider_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":54,\"testrun\":379511}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":1,\"branch\":1,\"machine\":54,\"testrun\":379512}]\\'>tp_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":6,\"branch\":1,\"machine\":54,\"testrun\":379514}]\\'>tp_rss_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":23,\"branch\":1,\"machine\":54,\"testrun\":379515}]\\'>tsvg_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":21,\"branch\":1,\"machine\":54,\"testrun\":379516}]\\'>tgfx_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":19,\"branch\":1,\"machine\":54,\"testrun\":379517}]\\'>tdhtml_nochrome</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431026\">twinopen: 108.59</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431028\">tsspider: 75.04</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431030\">ts: 648.37</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431032\">tp: 193.42</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431037\">tp_RSS: 71.5MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431042\">tsvg: 4130.55</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431045\">tgfx: 25.00</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431047\">tdhtml: 846.09</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625034\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625035\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625036\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625037\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625039\">tp_RSS</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625040\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625041\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625042\">tdhtml</a> ','</p>'],'1240135019.1240136989.28814.gz' : [' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/907f2f562f44 title=\"Built from revision 907f2f562f44\">rev:907f2f562f44</a>','Z:16.3MB'],'1240139612.1240146244.21940.gz' : ['id:20090419041332','<a href = \"http://hg.mozilla.org/mozilla-central/rev/11f68e169ed4\">rev:11f68e169ed4</a>',' cycle time: 00:15:24<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":71}]\\'>twinopen: 93.79</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":71}]\\'>tdhtml: 1079.29</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":71}]\\'>tsspider: 71.1</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":71}]\\'>ts: 475.37</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":11,\"branch\":1,\"machine\":71}]\\'>tp_fast: 96.78</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":15,\"branch\":1,\"machine\":71}]\\'>tp_fast_memset: 48.2MB</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":71,\"testrun\":380399}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":71,\"testrun\":380400}]\\'>tdhtml</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":71,\"testrun\":380401}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":71,\"testrun\":380402}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":11,\"branch\":1,\"machine\":71,\"testrun\":380403}]\\'>tp_fast</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":15,\"branch\":1,\"machine\":71,\"testrun\":380405}]\\'>tp_fast_memset</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=912144\">twinopen: 93.79</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=912141\">tdhtml: 1079.29</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=912138\">tsspider: 71.10</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=912146\">ts: 475.37</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=912148\">tp: 96.78</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=912154\">tp_memset: 48.2MB</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625968\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625969\">tdhtml</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625970\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625971\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625972\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625975\">tp_memset</a> ','</p>'],'1240129496.1240140476.12434.gz' : [' \"<a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/f9627950be8f title=\\\\\"Built from revision f9627950be8f\\\\\">rev:f9627950be8f</a>\"'],'1240127546.1240129832.19154.gz' : [' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/c319b49e2880 title=\"Built from revision c319b49e2880\">rev:c319b49e2880</a>','Z:16.3MB','Zdiff:-24 (+0/-24)'],'1240127548.1240129253.18387.gz' : [' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/c319b49e2880 title=\"Built from revision c319b49e2880\">rev:c319b49e2880</a>','<abbr title=\"refcnt Leaks\">RLk</abbr>:0B','<abbr title=\"Total Bytes malloc\\'ed and not free\\'d\">Lk</abbr>:886KB','<abbr title=\"Maximum Heap Size\">MH</abbr>:21.5MB','<abbr title=\"Allocations - number of calls to malloc and friends\">A</abbr>:668745'],'1240135019.1240135805.27166.gz' : [' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/907f2f562f44 title=\"Built from revision 907f2f562f44\">rev:907f2f562f44</a>'],'1240144192.1240153557.4643.gz' : [' periodic clobber',' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/11f68e169ed4 title=\"Built from revision 11f68e169ed4\">rev:11f68e169ed4</a>',' check<br/>630/0',' xpcshell-tests<br/>608/0',' reftest<br/>2976/0/171',' crashtest<br/>1092/0/8',' mochitest-plain<br/>79094/0/1258',' mochitest-chrome<br/>1462/0/30',' mochitest-browser-chrome<br/>2822/0/5',' mochitest-a11y<br/>2251/0/78'],'1240121181.1240121851.10237.gz' : [' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/e2bf0c7914c8 title=\"Built from revision e2bf0c7914c8\">rev:e2bf0c7914c8</a>'],'1240135019.1240140438.12379.gz' : [' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/907f2f562f44 title=\"Built from revision 907f2f562f44\">rev:907f2f562f44</a>',' check<br/>630/0',' xpcshell-tests<br/>608/0',' reftest<br/>2976/0/171',' crashtest<br/>1092/0/8',' mochitest-plain<br/>79096/0/1258',' mochitest-chrome<br/>1462/0/30',' mochitest-browser-chrome<br/>2822/0/5',' mochitest-a11y<br/>2250/0/78'],'1240122875.1240132747.22776.gz' : ['id:20090418233435','<a href = \"http://hg.mozilla.org/mozilla-central/rev/e2bf0c7914c8\">rev:e2bf0c7914c8</a>',' cycle time: 01:20:44<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":57}]\\'>twinopen: 93.74</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":57}]\\'>tsspider: 70.28</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":57}]\\'>ts: 465.74</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":2,\"branch\":1,\"machine\":57}]\\'>tp: 163.59</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":9,\"branch\":1,\"machine\":57}]\\'>tp_memset: 66.1MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":22,\"branch\":1,\"machine\":57}]\\'>tsvg: 4206.59</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":20,\"branch\":1,\"machine\":57}]\\'>tgfx: 1.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":57}]\\'>tdhtml: 1082.56</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":57,\"testrun\":379271}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":57,\"testrun\":379272}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":57,\"testrun\":379273}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":2,\"branch\":1,\"machine\":57,\"testrun\":379274}]\\'>tp</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":9,\"branch\":1,\"machine\":57,\"testrun\":379276}]\\'>tp_memset</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":22,\"branch\":1,\"machine\":57,\"testrun\":379277}]\\'>tsvg</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":20,\"branch\":1,\"machine\":57,\"testrun\":379278}]\\'>tgfx</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":57,\"testrun\":379279}]\\'>tdhtml</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395042\">twinopen: 93.74</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395044\">tsspider: 70.28</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395046\">ts: 465.74</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395048\">tp: 163.59</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395054\">tp_memset: 66.1MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395056\">tsvg: 4206.59</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395060\">tdhtml: 1082.56</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624784\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624785\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624786\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624787\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624790\">tp_memset</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624791\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624792\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624793\">tdhtml</a> ','</p>'],'1240135758.1240142880.17080.gz' : ['id:20090419030918','<a href = \"http://hg.mozilla.org/mozilla-central/rev/907f2f562f44\">rev:907f2f562f44</a>',' cycle time: 00:56:56<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":59}]\\'>twinopen: 497.53</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":59}]\\'>tsspider: 86.28</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":59}]\\'>ts: 1235.26</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":2,\"branch\":1,\"machine\":59}]\\'>tp: 305.25</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":5,\"branch\":1,\"machine\":59}]\\'>tp_rss: 301.4MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":22,\"branch\":1,\"machine\":59}]\\'>tsvg: 4295.05</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":20,\"branch\":1,\"machine\":59}]\\'>tgfx: 2.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":59}]\\'>tdhtml: 911.12</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":59,\"testrun\":380132}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":59,\"testrun\":380133}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":59,\"testrun\":380134}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":2,\"branch\":1,\"machine\":59,\"testrun\":380135}]\\'>tp</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":5,\"branch\":1,\"machine\":59,\"testrun\":380137}]\\'>tp_rss</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":22,\"branch\":1,\"machine\":59,\"testrun\":380138}]\\'>tsvg</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":20,\"branch\":1,\"machine\":59,\"testrun\":380139}]\\'>tgfx</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":59,\"testrun\":380140}]\\'>tdhtml</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394866\">twinopen: 497.53</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394868\">tsspider: 86.28</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394870\">ts: 1235.26</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394872\">tp: 305.25</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394895\">tp_RSS: 301.4MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394906\">tsvg: 4295.05</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394910\">tdhtml: 911.12</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625688\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625689\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625690\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625691\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625693\">tp_RSS</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625694\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625695\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625696\">tdhtml</a> ','</p>'],'1240135758.1240144935.20094.gz' : ['id:20090419030918','<a href = \"http://hg.mozilla.org/mozilla-central/rev/907f2f562f44\">rev:907f2f562f44</a>',' cycle time: 00:56:29<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":66}]\\'>twinopen: 328.16</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":26,\"branch\":1,\"machine\":66}]\\'>tsspider_nochrome: 70.5</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":66}]\\'>ts: 1786.58</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":1,\"branch\":1,\"machine\":66}]\\'>tp_nochrome: 314.88</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":6,\"branch\":1,\"machine\":66}]\\'>tp_rss_nochrome: 305.9MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":23,\"branch\":1,\"machine\":66}]\\'>tsvg_nochrome: 3485.77</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":21,\"branch\":1,\"machine\":66}]\\'>tgfx_nochrome: 7.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":19,\"branch\":1,\"machine\":66}]\\'>tdhtml_nochrome: 906.0</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":66,\"testrun\":380254}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":26,\"branch\":1,\"machine\":66,\"testrun\":380255}]\\'>tsspider_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":66,\"testrun\":380256}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":1,\"branch\":1,\"machine\":66,\"testrun\":380257}]\\'>tp_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":6,\"branch\":1,\"machine\":66,\"testrun\":380259}]\\'>tp_rss_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":23,\"branch\":1,\"machine\":66,\"testrun\":380260}]\\'>tsvg_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":21,\"branch\":1,\"machine\":66,\"testrun\":380261}]\\'>tgfx_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":19,\"branch\":1,\"machine\":66,\"testrun\":380262}]\\'>tdhtml_nochrome</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431186\">twinopen: 328.16</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431192\">tsspider: 70.50</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431206\">ts: 1786.58</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431214\">tp: 314.88</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431230\">tp_RSS: 305.9MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431234\">tsvg: 3485.77</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431240\">tdhtml: 906.00</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625814\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625815\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625816\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625817\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625819\">tp_RSS</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625820\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625821\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625822\">tdhtml</a> ','</p>'],'1240137185.1240143302.17604.gz' : ['id:20090419033305','<a href = \"http://hg.mozilla.org/mozilla-central/rev/11f68e169ed4\">rev:11f68e169ed4</a>',' cycle time: 00:50:42<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":53}]\\'>twinopen: 109.06</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":53}]\\'>tsspider: 92.08</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":53}]\\'>ts: 652.53</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":2,\"branch\":1,\"machine\":53}]\\'>tp: 225.64</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":5,\"branch\":1,\"machine\":53}]\\'>tp_rss: 79.3MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":22,\"branch\":1,\"machine\":53}]\\'>tsvg: 4142.45</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":20,\"branch\":1,\"machine\":53}]\\'>tgfx: 20.08</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":53}]\\'>tdhtml: 847.38</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":53,\"testrun\":380166}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":53,\"testrun\":380167}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":53,\"testrun\":380168}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":2,\"branch\":1,\"machine\":53,\"testrun\":380169}]\\'>tp</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":5,\"branch\":1,\"machine\":53,\"testrun\":380171}]\\'>tp_rss</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":22,\"branch\":1,\"machine\":53,\"testrun\":380172}]\\'>tsvg</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":20,\"branch\":1,\"machine\":53,\"testrun\":380173}]\\'>tgfx</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":53,\"testrun\":380174}]\\'>tdhtml</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395129\">twinopen: 109.06</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395131\">tsspider: 92.08</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395133\">ts: 652.53</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395135\">tp: 225.64</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395141\">tp_RSS: 79.3MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395148\">tsvg: 4142.45</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=398218\">tgfx: 20.08</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395151\">tdhtml: 847.38</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625722\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625723\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625724\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625725\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625727\">tp_RSS</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625728\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625729\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625730\">tdhtml</a> ','</p>'],'1240127546.1240134739.25369.gz' : [' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/c319b49e2880 title=\"Built from revision c319b49e2880\">rev:c319b49e2880</a>',' check<br/>633/0',' xpcshell-tests<br/>610/<em class=\"testfail\">1</em>',' reftest<br/>2976/0/171',' crashtest<br/>1092/0/8',' mochitest-plain<br/>79095/0/1258',' mochitest-chrome<br/>1462/0/30',' mochitest-browser-chrome<br/>2818/0/5',' mochitest-a11y<br/>2251/0/77'],'1240121181.1240121687.10032.gz' : [' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/e2bf0c7914c8 title=\"Built from revision e2bf0c7914c8\">rev:e2bf0c7914c8</a>','<abbr title=\"refcnt Leaks\">RLk</abbr>:0B','<abbr title=\"Total Bytes malloc\\'ed and not free\\'d\">Lk</abbr>:886KB','<abbr title=\"Maximum Heap Size\">MH</abbr>:21.5MB','<abbr title=\"Allocations - number of calls to malloc and friends\">A</abbr>:669985'],'1240121181.1240121541.9891.gz' : [' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/e2bf0c7914c8 title=\"Built from revision e2bf0c7914c8\">rev:e2bf0c7914c8</a>','<abbr title=\"refcnt Leaks\">RLk</abbr>:0B','<abbr title=\"Total Bytes malloc\\'ed and not free\\'d\">Lk</abbr>:2.13MB','<abbr title=\"Maximum Heap Size\">MH</abbr>:24.1MB','<abbr title=\"Allocations - number of calls to malloc and friends\">A</abbr>:814474'],'1240135320.1240141918.14560.gz' : [' \"<a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/907f2f562f44 title=\\\\\"Built from revision 907f2f562f44\\\\\">rev:907f2f562f44</a>\"'],'1240129514.1240135237.26429.gz' : ['id:20090419012514','<a href = \"http://hg.mozilla.org/mozilla-central/rev/f9627950be8f\">rev:f9627950be8f</a>',' cycle time: 00:54:12<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":62}]\\'>twinopen: 489.84</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":26,\"branch\":1,\"machine\":62}]\\'>tsspider_nochrome: 71.16</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":62}]\\'>ts: 1153.63</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":1,\"branch\":1,\"machine\":62}]\\'>tp_nochrome: 283.34</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":6,\"branch\":1,\"machine\":62}]\\'>tp_rss_nochrome: 301.7MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":23,\"branch\":1,\"machine\":62}]\\'>tsvg_nochrome: 4254.86</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":21,\"branch\":1,\"machine\":62}]\\'>tgfx_nochrome: 4.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":19,\"branch\":1,\"machine\":62}]\\'>tdhtml_nochrome: 904.03</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":62,\"testrun\":379450}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":26,\"branch\":1,\"machine\":62,\"testrun\":379451}]\\'>tsspider_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":62,\"testrun\":379452}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":1,\"branch\":1,\"machine\":62,\"testrun\":379453}]\\'>tp_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":6,\"branch\":1,\"machine\":62,\"testrun\":379455}]\\'>tp_rss_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":23,\"branch\":1,\"machine\":62,\"testrun\":379456}]\\'>tsvg_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":21,\"branch\":1,\"machine\":62,\"testrun\":379457}]\\'>tgfx_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":19,\"branch\":1,\"machine\":62,\"testrun\":379458}]\\'>tdhtml_nochrome</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431141\">twinopen: 489.84</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431148\">tsspider: 71.16</a><br>',\n\
+'<a href=\"http://graphs.mozilla.org/graph.html#show=1431157\">ts: 1153.63</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431170\">tp: 283.34</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431190\">tp_RSS: 301.7MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431208\">tsvg: 4254.86</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431212\">tgfx: 4.00</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431219\">tdhtml: 904.03</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624973\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624974\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624975\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624976\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624978\">tp_RSS</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624979\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624980\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624981\">tdhtml</a> ','</p>'],'1240133109.1240143709.18266.gz' : ['id:20090419022509','<a href = \"http://hg.mozilla.org/mozilla-central/rev/c319b49e2880\">rev:c319b49e2880</a>',' cycle time: 01:20:36<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":67}]\\'>twinopen: 98.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":67}]\\'>tsspider: 73.18</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":67}]\\'>ts: 555.58</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":2,\"branch\":1,\"machine\":67}]\\'>tp: 320.34</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":9,\"branch\":1,\"machine\":67}]\\'>tp_memset: 61.2MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":22,\"branch\":1,\"machine\":67}]\\'>tsvg: 3844.18</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":20,\"branch\":1,\"machine\":67}]\\'>tgfx: 1.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":67}]\\'>tdhtml: 749.5</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":67,\"testrun\":380193}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":67,\"testrun\":380194}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":67,\"testrun\":380195}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":2,\"branch\":1,\"machine\":67,\"testrun\":380196}]\\'>tp</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":9,\"branch\":1,\"machine\":67,\"testrun\":380198}]\\'>tp_memset</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":22,\"branch\":1,\"machine\":67,\"testrun\":380199}]\\'>tsvg</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":20,\"branch\":1,\"machine\":67,\"testrun\":380200}]\\'>tgfx</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":67,\"testrun\":380201}]\\'>tdhtml</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=787109\">twinopen: 98.00</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=787111\">tsspider: 73.18</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=787114\">ts: 555.58</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=787118\">tp: 320.34</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=787155\">tp_memset: 61.2MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=787160\">tsvg: 3844.18</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=787166\">tdhtml: 749.50</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625751\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625752\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625753\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625754\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625757\">tp_memset</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625758\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625759\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625760\">tdhtml</a> ','</p>'],'1240134674.1240141546.13647.gz' : ['id:20090419025114','<a href = \"http://hg.mozilla.org/mozilla-central/rev/f9627950be8f\">rev:f9627950be8f</a>',' cycle time: 00:15:26<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":71}]\\'>twinopen: 93.53</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":71}]\\'>tdhtml: 1082.29</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":71}]\\'>tsspider: 70.42</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":71}]\\'>ts: 469.26</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":11,\"branch\":1,\"machine\":71}]\\'>tp_fast: 96.83</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":15,\"branch\":1,\"machine\":71}]\\'>tp_fast_memset: 47.5MB</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":71,\"testrun\":379990}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":71,\"testrun\":379991}]\\'>tdhtml</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":71,\"testrun\":379992}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":71,\"testrun\":379993}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":11,\"branch\":1,\"machine\":71,\"testrun\":379994}]\\'>tp_fast</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":15,\"branch\":1,\"machine\":71,\"testrun\":379996}]\\'>tp_fast_memset</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=912144\">twinopen: 93.53</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=912141\">tdhtml: 1082.29</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=912138\">tsspider: 70.42</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=912146\">ts: 469.26</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=912148\">tp: 96.83</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=912154\">tp_memset: 47.5MB</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625541\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625542\">tdhtml</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625543\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625544\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625545\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625548\">tp_memset</a> ','</p>'],'1240121330.1240125374.13957.gz' : ['id:20090418230850','<a href = \"http://hg.mozilla.org/mozilla-central/rev/e2bf0c7914c8\">rev:e2bf0c7914c8</a>',' cycle time: 00:50:36<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":53}]\\'>twinopen: 108.89</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":53}]\\'>tsspider: 93.78</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":53}]\\'>ts: 653.11</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":2,\"branch\":1,\"machine\":53}]\\'>tp: 226.05</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":5,\"branch\":1,\"machine\":53}]\\'>tp_rss: 78.8MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":22,\"branch\":1,\"machine\":53}]\\'>tsvg: 4132.5</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":20,\"branch\":1,\"machine\":53}]\\'>tgfx: 20.33</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":53}]\\'>tdhtml: 848.65</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":53,\"testrun\":378707}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":53,\"testrun\":378708}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":53,\"testrun\":378709}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":2,\"branch\":1,\"machine\":53,\"testrun\":378710}]\\'>tp</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":5,\"branch\":1,\"machine\":53,\"testrun\":378712}]\\'>tp_rss</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":22,\"branch\":1,\"machine\":53,\"testrun\":378713}]\\'>tsvg</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":20,\"branch\":1,\"machine\":53,\"testrun\":378714}]\\'>tgfx</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":53,\"testrun\":378715}]\\'>tdhtml</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395129\">twinopen: 108.89</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395131\">tsspider: 93.78</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395133\">ts: 653.11</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395135\">tp: 226.05</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395141\">tp_RSS: 78.8MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395148\">tsvg: 4132.50</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=398218\">tgfx: 20.33</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395151\">tdhtml: 848.65</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624185\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624186\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624187\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624188\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624190\">tp_RSS</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624191\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624192\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624193\">tdhtml</a> ','</p>'],'1240127546.1240131081.20811.gz' : [' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/c319b49e2880 title=\"Built from revision c319b49e2880\">rev:c319b49e2880</a>',' check<br/>632/0',' xpcshell-tests<br/>609/<em class=\"testfail\">1</em>',' reftest<br/>2985/0/162',' crashtest<br/>1093/0/7',' mochitest-plain<br/>79196/0/1262',' mochitest-chrome<br/>2037/0/30',' mochitest-browser-chrome<br/>2791/0/5'],'1240121181.1240125744.14340.gz' : [' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/e2bf0c7914c8 title=\"Built from revision e2bf0c7914c8\">rev:e2bf0c7914c8</a>',' check<br/>630/0',' xpcshell-tests<br/>608/0',' reftest<br/>2976/0/171',' crashtest<br/>1092/0/8',' mochitest-plain<br/>79097/0/1258',' mochitest-chrome<br/>1462/0/30',' mochitest-browser-chrome<br/>2814/0/5',' mochitest-a11y<br/>2251/0/78'],'1240129514.1240136773.28567.gz' : ['id:20090419012514','<a href = \"http://hg.mozilla.org/mozilla-central/rev/f9627950be8f\">rev:f9627950be8f</a>',' cycle time: 00:56:53<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":66}]\\'>twinopen: 329.84</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":26,\"branch\":1,\"machine\":66}]\\'>tsspider_nochrome: 70.76</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":66}]\\'>ts: 1902.68</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":1,\"branch\":1,\"machine\":66}]\\'>tp_nochrome: 317.15</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":6,\"branch\":1,\"machine\":66}]\\'>tp_rss_nochrome: 306.7MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":23,\"branch\":1,\"machine\":66}]\\'>tsvg_nochrome: 3493.77</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":21,\"branch\":1,\"machine\":66}]\\'>tgfx_nochrome: 6.5</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":19,\"branch\":1,\"machine\":66}]\\'>tdhtml_nochrome: 902.12</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":66,\"testrun\":379563}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":26,\"branch\":1,\"machine\":66,\"testrun\":379564}]\\'>tsspider_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":66,\"testrun\":379565}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":1,\"branch\":1,\"machine\":66,\"testrun\":379566}]\\'>tp_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":6,\"branch\":1,\"machine\":66,\"testrun\":379568}]\\'>tp_rss_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":23,\"branch\":1,\"machine\":66,\"testrun\":379569}]\\'>tsvg_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":21,\"branch\":1,\"machine\":66,\"testrun\":379570}]\\'>tgfx_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":19,\"branch\":1,\"machine\":66,\"testrun\":379571}]\\'>tdhtml_nochrome</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431186\">twinopen: 329.84</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431192\">tsspider: 70.76</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431206\">ts: 1902.68</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431214\">tp: 317.15</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431230\">tp_RSS: 306.7MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431234\">tsvg: 3493.77</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431237\">tgfx: 6.50</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431240\">tdhtml: 902.12</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625089\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625090\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625091\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625092\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625094\">tp_RSS</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625095\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625096\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625097\">tdhtml</a> ','</p>'],'1240139612.1240150101.29745.gz' : ['id:20090419041332','<a href = \"http://hg.mozilla.org/mozilla-central/rev/11f68e169ed4\">rev:11f68e169ed4</a>',' cycle time: 01:20:34<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":67}]\\'>twinopen: 97.84</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":67}]\\'>tsspider: 72.6</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":67}]\\'>ts: 554.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":2,\"branch\":1,\"machine\":67}]\\'>tp: 326.93</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":9,\"branch\":1,\"machine\":67}]\\'>tp_memset: 61.4MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":22,\"branch\":1,\"machine\":67}]\\'>tsvg: 3841.64</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":20,\"branch\":1,\"machine\":67}]\\'>tgfx: 1.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":67}]\\'>tdhtml: 749.12</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":67,\"testrun\":380743}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":67,\"testrun\":380744}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":67,\"testrun\":380745}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":2,\"branch\":1,\"machine\":67,\"testrun\":380746}]\\'>tp</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":9,\"branch\":1,\"machine\":67,\"testrun\":380748}]\\'>tp_memset</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":22,\"branch\":1,\"machine\":67,\"testrun\":380749}]\\'>tsvg</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":20,\"branch\":1,\"machine\":67,\"testrun\":380750}]\\'>tgfx</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":67,\"testrun\":380751}]\\'>tdhtml</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=787109\">twinopen: 97.84</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=787111\">tsspider: 72.60</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=787114\">ts: 554.00</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=787118\">tp: 326.93</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=787155\">tp_memset: 61.4MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=787160\">tsvg: 3841.64</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=787166\">tdhtml: 749.12</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626329\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626330\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626331\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626332\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626335\">tp_memset</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626336\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626337\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626338\">tdhtml</a> ','</p>'],'1240116360.1240123268.11765.gz' : ['id:20090418214600','<a href = \"http://hg.mozilla.org/mozilla-central/rev/e2bf0c7914c8\">rev:e2bf0c7914c8</a>',' cycle time: 00:20:54<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":74}]\\'>tsspider: 69.84</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":24,\"branch\":1,\"machine\":74}]\\'>tjss: 40.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":74}]\\'>ts: 467.95</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":74}]\\'>twinopen: 126.63</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":74,\"testrun\":378461}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":24,\"branch\":1,\"machine\":74,\"testrun\":378462}]\\'>tjss</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":74,\"testrun\":378463}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":74,\"testrun\":378464}]\\'>twinopen</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=2698579\">tsspider: 69.84</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=2698581\">tjss: 40.00</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=2698583\">ts: 467.95</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=2698585\">twinopen: 126.63</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3623928\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3623930\">tjss</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3623931\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3623932\">twinopen</a> ','</p>'],'1240145615.1240146410.22185.gz' : [' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/11f68e169ed4 title=\"Built from revision 11f68e169ed4\">rev:11f68e169ed4</a>'],'1240135019.1240139399.32095.gz' : [' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/907f2f562f44 title=\"Built from revision 907f2f562f44\">rev:907f2f562f44</a>',' check<br/>629/0',' xpcshell-tests<br/>607/0',' reftest<br/>2985/0/162',' crashtest<br/>1093/0/7',' mochitest-plain<br/>79196/0/1262',' mochitest-chrome<br/>2037/0/30',' mochitest-browser-chrome<br/>2794/0/5'],'1240121181.1240122327.10784.gz' : [' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/e2bf0c7914c8 title=\"Built from revision e2bf0c7914c8\">rev:e2bf0c7914c8</a>','Z:16.3MB'],'1240135321.1240138111.30215.gz' : [' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/907f2f562f44 title=\"Built from revision 907f2f562f44\">rev:907f2f562f44</a>'],'1240135758.1240143191.17464.gz' : ['id:20090419030918','<a href = \"http://hg.mozilla.org/mozilla-central/rev/907f2f562f44\">rev:907f2f562f44</a>',' cycle time: 00:54:38<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":62}]\\'>twinopen: 497.53</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":26,\"branch\":1,\"machine\":62}]\\'>tsspider_nochrome: 71.02</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":62}]\\'>ts: 1164.32</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":1,\"branch\":1,\"machine\":62}]\\'>tp_nochrome: 284.88</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":6,\"branch\":1,\"machine\":62}]\\'>tp_rss_nochrome: 302.6MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":23,\"branch\":1,\"machine\":62}]\\'>tsvg_nochrome: 4258.77</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":21,\"branch\":1,\"machine\":62}]\\'>tgfx_nochrome: 4.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":19,\"branch\":1,\"machine\":62}]\\'>tdhtml_nochrome: 902.74</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":62,\"testrun\":380157}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":26,\"branch\":1,\"machine\":62,\"testrun\":380158}]\\'>tsspider_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":62,\"testrun\":380159}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":1,\"branch\":1,\"machine\":62,\"testrun\":380160}]\\'>tp_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":6,\"branch\":1,\"machine\":62,\"testrun\":380162}]\\'>tp_rss_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":23,\"branch\":1,\"machine\":62,\"testrun\":380163}]\\'>tsvg_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":21,\"branch\":1,\"machine\":62,\"testrun\":380164}]\\'>tgfx_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":19,\"branch\":1,\"machine\":62,\"testrun\":380165}]\\'>tdhtml_nochrome</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431141\">twinopen: 497.53</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431148\">tsspider: 71.02</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431157\">ts: 1164.32</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431170\">tp: 284.88</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431190\">tp_RSS: 302.6MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431208\">tsvg: 4258.77</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431219\">tdhtml: 902.74</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625713\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625714\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625715\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625716\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625718\">tp_RSS</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625719\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625720\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625721\">tdhtml</a> ','</p>'],'1240135056.1240140868.12842.gz' : ['id:20090419025736','<a href = \"http://hg.mozilla.org/mozilla-central/rev/907f2f562f44\">rev:907f2f562f44</a>',' cycle time: 00:56:36<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":66}]\\'>twinopen: 328.74</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":26,\"branch\":1,\"machine\":66}]\\'>tsspider_nochrome: 70.6</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":66}]\\'>ts: 1760.11</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":1,\"branch\":1,\"machine\":66}]\\'>tp_nochrome: 316.33</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":6,\"branch\":1,\"machine\":66}]\\'>tp_rss_nochrome: 305.4MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":23,\"branch\":1,\"machine\":66}]\\'>tsvg_nochrome: 3487.05</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":21,\"branch\":1,\"machine\":66}]\\'>tgfx_nochrome: 6.5</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":19,\"branch\":1,\"machine\":66}]\\'>tdhtml_nochrome: 909.09</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":66,\"testrun\":379879}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":26,\"branch\":1,\"machine\":66,\"testrun\":379880}]\\'>tsspider_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":66,\"testrun\":379881}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":1,\"branch\":1,\"machine\":66,\"testrun\":379882}]\\'>tp_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":6,\"branch\":1,\"machine\":66,\"testrun\":379886}]\\'>tp_rss_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":23,\"branch\":1,\"machine\":66,\"testrun\":379887}]\\'>tsvg_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":21,\"branch\":1,\"machine\":66,\"testrun\":379888}]\\'>tgfx_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":19,\"branch\":1,\"machine\":66,\"testrun\":379889}]\\'>tdhtml_nochrome</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431186\">twinopen: 328.74</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431192\">tsspider: 70.60</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431206\">ts: 1760.11</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431214\">tp: 316.33</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431230\">tp_RSS: 305.4MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431234\">tsvg: 3487.05</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431237\">tgfx: 6.50</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431240\">tdhtml: 909.09</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625422\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625424\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625426\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625427\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625429\">tp_RSS</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625430\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625431\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625432\">tdhtml</a> ','</p>'],'1240144192.1240145026.20190.gz' : [' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/11f68e169ed4 title=\"Built from revision 11f68e169ed4\">rev:11f68e169ed4</a>','Z:16.3MB'],'1240129495.1240130472.20001.gz' : [' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/f9627950be8f title=\"Built from revision f9627950be8f\">rev:f9627950be8f</a>'],'1240135019.1240141409.13474.gz' : [' \"<a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/907f2f562f44 title=\\\\\"Built from revision 907f2f562f44\\\\\">rev:907f2f562f44</a>\"',' check<br/>667/0',' xpcshell-tests<br/>608/0',' reftest<br/>2984/0/163',' crashtest<br/>1092/0/8',' mochitest-plain<br/>79394/0/1259',' mochitest-chrome<br/>1767/0/29',' mochitest-browser-chrome<br/>2808/0/5',' mochitest-a11y<br/>2250/0/79'],'1240129497.1240138695.30986.gz' : [' periodic clobber',' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/f9627950be8f title=\"Built from revision f9627950be8f\">rev:f9627950be8f</a>',' check<br/>633/0',' xpcshell-tests<br/>610/<em class=\"testfail\">1</em>',' reftest<br/>2976/0/171',' crashtest<br/>1092/<em class=\"testfail\">3</em>/8',' mochitest-plain<br/>79090/0/1258',' mochitest-chrome<br/>1462/0/30',' mochitest-browser-chrome<br/>2820/0/5',' mochitest-a11y<br/>2252/0/77'],'1240135758.1240140227.32576.gz' : ['id:20090419030918','<a href = \"http://hg.mozilla.org/mozilla-central/rev/907f2f562f44\">rev:907f2f562f44</a>',' cycle time: 00:12:28<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":72}]\\'>twinopen: 495.26</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":72}]\\'>tdhtml: 901.41</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":72}]\\'>tsspider: 85.58</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":72}]\\'>ts: 1116.11</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":11,\"branch\":1,\"machine\":72}]\\'>tp_fast: 150.22</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":13,\"branch\":1,\"machine\":72}]\\'>tp_fast_rss: 256.8MB</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":72,\"testrun\":379867}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":72,\"testrun\":379868}]\\'>tdhtml</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":72,\"testrun\":379869}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":72,\"testrun\":379870}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":11,\"branch\":1,\"machine\":72,\"testrun\":379871}]\\'>tp_fast</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":13,\"branch\":1,\"machine\":72,\"testrun\":379873}]\\'>tp_fast_rss</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911651\">twinopen: 495.26</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911649\">tdhtml: 901.41</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911647\">tsspider: 85.58</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911653\">ts: 1116.11</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911655\">tp: 150.22</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911659\">tp_RSS: 256.8MB</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625410\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625411\">tdhtml</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625412\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625413\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625414\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625416\">tp_RSS</a> ','</p>'],'1240116360.1240126799.15388.gz' : ['id:20090418214600','<a href = \"http://hg.mozilla.org/mozilla-central/rev/e2bf0c7914c8\">rev:e2bf0c7914c8</a>',' cycle time: 01:20:21<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":55}]\\'>twinopen: 94.63</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":55}]\\'>tsspider: 70.44</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":55}]\\'>ts: 465.63</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":2,\"branch\":1,\"machine\":55}]\\'>tp: 164.88</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":9,\"branch\":1,\"machine\":55}]\\'>tp_memset: 66.3MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":22,\"branch\":1,\"machine\":55}]\\'>tsvg: 4204.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":20,\"branch\":1,\"machine\":55}]\\'>tgfx: 1.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":55}]\\'>tdhtml: 1080.41</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":55,\"testrun\":378793}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":55,\"testrun\":378794}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":55,\"testrun\":378795}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":2,\"branch\":1,\"machine\":55,\"testrun\":378796}]\\'>tp</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":9,\"branch\":1,\"machine\":55,\"testrun\":378798}]\\'>tp_memset</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":22,\"branch\":1,\"machine\":55,\"testrun\":378799}]\\'>tsvg</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":20,\"branch\":1,\"machine\":55,\"testrun\":378800}]\\'>tgfx</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":55,\"testrun\":378801}]\\'>tdhtml</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395002\">twinopen: 94.63</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395004\">tsspider: 70.44</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395006\">ts: 465.63</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395008\">tp: 164.88</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395024\">tp_memset: 66.3MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395028\">tsvg: 4204.00</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395032\">tdhtml: 1080.41</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624275\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624276\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624277\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624278\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624281\">tp_memset</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624282\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624283\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624284\">tdhtml</a> ','</p>'],'1240129495.1240131826.21637.gz' : [' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/f9627950be8f title=\"Built from revision f9627950be8f\">rev:f9627950be8f</a>','<abbr title=\"refcnt Leaks\">RLk</abbr>:0B','<abbr title=\"Total Bytes malloc\\'ed and not free\\'d\">Lk</abbr>:2.14MB','<abbr title=\"Maximum Heap Size\">MH</abbr>:24.2MB','<abbr title=\"Allocations - number of calls to malloc and friends\">A</abbr>:811518'],'1240151392.1240156918.9302.gz' : [' \"<a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/11f68e169ed4 title=\\\\\"Built from revision 11f68e169ed4\\\\\">rev:11f68e169ed4</a>\"',' check<br/>667/0',' xpcshell-tests<br/>608/0',' reftest<br/>2984/0/163',' crashtest<br/>1092/0/8',' mochitest-plain<br/>79379/0/1259',' mochitest-chrome<br/>1767/0/29',' mochitest-browser-chrome<br/>2811/0/5',' mochitest-a11y<br/>2248/0/80'],'1240121181.1240125915.14518.gz' : [' periodic clobber',' \"<a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/e2bf0c7914c8 title=\\\\\"Built from revision e2bf0c7914c8\\\\\">rev:e2bf0c7914c8</a>\"','<abbr title=\"refcnt Leaks\">RLk</abbr>:0B','<abbr title=\"Total Bytes malloc\\'ed and not free\\'d\">Lk</abbr>:112KB','<abbr title=\"Maximum Heap Size\">MH</abbr>:14.8MB','<abbr title=\"Allocations - number of calls to malloc and friends\">A</abbr>:496075'],'1240151392.1240152372.3171.gz' : [' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/11f68e169ed4 title=\"Built from revision 11f68e169ed4\">rev:11f68e169ed4</a>','Z:16.3MB'],'1240127546.1240133143.23196.gz' : [' periodic clobber',' \"<a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/c319b49e2880 title=\\\\\"Built from revision c319b49e2880\\\\\">rev:c319b49e2880</a>\"','<abbr title=\"refcnt Leaks\">RLk</abbr>:0B','<abbr title=\"Total Bytes malloc\\'ed and not free\\'d\">Lk</abbr>:111KB','<abbr title=\"Maximum Heap Size\">MH</abbr>:14.7MB','<abbr title=\"Allocations - number of calls to malloc and friends\">A</abbr>:492899'],'1240121209.1240125919.14522.gz' : ['id:20090418230649','<a href = \"http://hg.mozilla.org/mozilla-central/rev/e2bf0c7914c8\">rev:e2bf0c7914c8</a>',' cycle time: 00:56:29<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":66}]\\'>twinopen: 327.63</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":26,\"branch\":1,\"machine\":66}]\\'>tsspider_nochrome: 70.68</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":66}]\\'>ts: 1820.32</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":1,\"branch\":1,\"machine\":66}]\\'>tp_nochrome: 315.65</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":6,\"branch\":1,\"machine\":66}]\\'>tp_rss_nochrome: 307.2MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":23,\"branch\":1,\"machine\":66}]\\'>tsvg_nochrome: 3485.5</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":21,\"branch\":1,\"machine\":66}]\\'>tgfx_nochrome: 7.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":19,\"branch\":1,\"machine\":66}]\\'>tdhtml_nochrome: 903.32</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":66,\"testrun\":378684}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":26,\"branch\":1,\"machine\":66,\"testrun\":378685}]\\'>tsspider_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":66,\"testrun\":378686}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":1,\"branch\":1,\"machine\":66,\"testrun\":378687}]\\'>tp_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":6,\"branch\":1,\"machine\":66,\"testrun\":378689}]\\'>tp_rss_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":23,\"branch\":1,\"machine\":66,\"testrun\":378690}]\\'>tsvg_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":21,\"branch\":1,\"machine\":66,\"testrun\":378691}]\\'>tgfx_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":19,\"branch\":1,\"machine\":66,\"testrun\":378692}]\\'>tdhtml_nochrome</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431186\">twinopen: 327.63</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431192\">tsspider: 70.68</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431206\">ts: 1820.32</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431214\">tp: 315.65</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431230\">tp_RSS: 307.2MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431234\">tsvg: 3485.50</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431240\">tdhtml: 903.32</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624162\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624163\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624164\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624165\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624167\">tp_RSS</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624168\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624169\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624170\">tdhtml</a> ','</p>'],'1240135059.1240140069.488.gz' : ['id:20090419025739','<a href = \"http://hg.mozilla.org/mozilla-central/rev/907f2f562f44\">rev:907f2f562f44</a>',' cycle time: 00:50:42<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":53}]\\'>twinopen: 109.22</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":53}]\\'>tsspider: 92.76</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":53}]\\'>ts: 649.53</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":2,\"branch\":1,\"machine\":53}]\\'>tp: 226.14</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":5,\"branch\":1,\"machine\":53}]\\'>tp_rss: 79.2MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":22,\"branch\":1,\"machine\":53}]\\'>tsvg: 4121.27</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":20,\"branch\":1,\"machine\":53}]\\'>tgfx: 20.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":53}]\\'>tdhtml: 848.0</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":53,\"testrun\":379845}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":53,\"testrun\":379846}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":53,\"testrun\":379847}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":2,\"branch\":1,\"machine\":53,\"testrun\":379848}]\\'>tp</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":5,\"branch\":1,\"machine\":53,\"testrun\":379850}]\\'>tp_rss</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":22,\"branch\":1,\"machine\":53,\"testrun\":379851}]\\'>tsvg</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":20,\"branch\":1,\"machine\":53,\"testrun\":379852}]\\'>tgfx</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":53,\"testrun\":379853}]\\'>tdhtml</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395129\">twinopen: 109.22</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395131\">tsspider: 92.76</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395133\">ts: 649.53</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395135\">tp: 226.14</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395141\">tp_RSS: 79.2MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395148\">tsvg: 4121.27</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=398218\">tgfx: 20.00</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395151\">tdhtml: 848.00</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625388\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625389\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625390\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625391\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625393\">tp_RSS</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625394\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625395\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625396\">tdhtml</a> ','</p>'],'1240141596.1240153672.4751.gz' : ['id:20090419044636','<a href = \"http://hg.mozilla.org/mozilla-central/rev/907f2f562f44\">rev:907f2f562f44</a>',' cycle time: 01:20:38<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":70}]\\'>twinopen: 97.95</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":26,\"branch\":1,\"machine\":70}]\\'>tsspider_nochrome: 54.78</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":70}]\\'>ts: 602.21</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":1,\"branch\":1,\"machine\":70}]\\'>tp_nochrome: 337.97</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":10,\"branch\":1,\"machine\":70}]\\'>tp_memset_nochrome: 53.8MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":23,\"branch\":1,\"machine\":70}]\\'>tsvg_nochrome: 3731.68</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":21,\"branch\":1,\"machine\":70}]\\'>tgfx_nochrome: 17.5</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":19,\"branch\":1,\"machine\":70}]\\'>tdhtml_nochrome: 743.03</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":70,\"testrun\":381024}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":26,\"branch\":1,\"machine\":70,\"testrun\":381025}]\\'>tsspider_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":70,\"testrun\":381026}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":1,\"branch\":1,\"machine\":70,\"testrun\":381027}]\\'>tp_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":10,\"branch\":1,\"machine\":70,\"testrun\":381029}]\\'>tp_memset_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":23,\"branch\":1,\"machine\":70,\"testrun\":381030}]\\'>tsvg_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":21,\"branch\":1,\"machine\":70,\"testrun\":381031}]\\'>tgfx_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":19,\"branch\":1,\"machine\":70,\"testrun\":381032}]\\'>tdhtml_nochrome</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431842\">twinopen: 97.95</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431844\">tsspider: 54.78</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431846\">ts: 602.21</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431848\">tp: 337.97</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431880\">tp_memset: 53.8MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431885\">tsvg: 3731.68</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431889\">tgfx: 17.50</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431894\">tdhtml: 743.03</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626633\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626634\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626635\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626636\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626639\">tp_memset</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626640\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626641\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626642\">tdhtml</a> ','</p>'],'1240121330.1240125146.13731.gz' : ['id:20090418230850','<a href = \"http://hg.mozilla.org/mozilla-central/rev/e2bf0c7914c8\">rev:e2bf0c7914c8</a>',' cycle time: 00:46:56<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":54}]\\'>twinopen: 109.05</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":26,\"branch\":1,\"machine\":54}]\\'>tsspider_nochrome: 75.84</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":54}]\\'>ts: 654.89</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":1,\"branch\":1,\"machine\":54}]\\'>tp_nochrome: 192.79</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":6,\"branch\":1,\"machine\":54}]\\'>tp_rss_nochrome: 70.4MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":23,\"branch\":1,\"machine\":54}]\\'>tsvg_nochrome: 4138.45</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":21,\"branch\":1,\"machine\":54}]\\'>tgfx_nochrome: 25.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":19,\"branch\":1,\"machine\":54}]\\'>tdhtml_nochrome: 851.97</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":54,\"testrun\":378639}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":26,\"branch\":1,\"machine\":54,\"testrun\":378640}]\\'>tsspider_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":54,\"testrun\":378641}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":1,\"branch\":1,\"machine\":54,\"testrun\":378642}]\\'>tp_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":6,\"branch\":1,\"machine\":54,\"testrun\":378644}]\\'>tp_rss_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":23,\"branch\":1,\"machine\":54,\"testrun\":378645}]\\'>tsvg_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":21,\"branch\":1,\"machine\":54,\"testrun\":378646}]\\'>tgfx_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":19,\"branch\":1,\"machine\":54,\"testrun\":378647}]\\'>tdhtml_nochrome</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431026\">twinopen: 109.05</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431028\">tsspider: 75.84</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431030\">ts: 654.89</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431032\">tp: 192.79</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431037\">tp_RSS: 70.4MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431042\">tsvg: 4138.45</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431045\">tgfx: 25.00</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431047\">tdhtml: 851.97</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624117\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624118\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624119\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624120\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624122\">tp_RSS</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624123\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624124\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624125\">tdhtml</a> ','</p>'],'1240121330.1240123071.11545.gz' : ['id:20090418230850','<a href = \"http://hg.mozilla.org/mozilla-central/rev/e2bf0c7914c8\">rev:e2bf0c7914c8</a>',' cycle time: 00:11:43<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":73}]\\'>twinopen: 109.84</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":73}]\\'>tdhtml: 854.68</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":73}]\\'>tsspider: 93.76</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":73}]\\'>ts: 655.32</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":11,\"branch\":1,\"machine\":73}]\\'>tp_fast: 138.75</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":13,\"branch\":1,\"machine\":73}]\\'>tp_fast_rss: 61.9MB</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":73,\"testrun\":378454}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":73,\"testrun\":378455}]\\'>tdhtml</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":73,\"testrun\":378456}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":73,\"testrun\":378457}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":11,\"branch\":1,\"machine\":73,\"testrun\":378458}]\\'>tp_fast</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":13,\"branch\":1,\"machine\":73,\"testrun\":378460}]\\'>tp_fast_rss</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911690\">twinopen: 109.84</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911688\">tdhtml: 854.68</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911686\">tsspider: 93.76</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911692\">ts: 655.32</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911694\">tp: 138.75</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911698\">tp_RSS: 61.9MB</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3623921\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3623922\">tdhtml</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3623923\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3623924\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3623925\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3623927\">tp_RSS</a> ','</p>'],'1240151517.1240155197.6659.gz' : ['id:20090419073157','<a href = \"http://hg.mozilla.org/mozilla-central/rev/11f68e169ed4\">rev:11f68e169ed4</a>',' cycle time: 00:47:00<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":54}]\\'>twinopen: 108.95</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":26,\"branch\":1,\"machine\":54}]\\'>tsspider_nochrome: 77.24</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":54}]\\'>ts: 650.68</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":1,\"branch\":1,\"machine\":54}]\\'>tp_nochrome: 193.09</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":6,\"branch\":1,\"machine\":54}]\\'>tp_rss_nochrome: 71.4MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":23,\"branch\":1,\"machine\":54}]\\'>tsvg_nochrome: 4118.5</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":21,\"branch\":1,\"machine\":54}]\\'>tgfx_nochrome: 25.25</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":19,\"branch\":1,\"machine\":54}]\\'>tdhtml_nochrome: 846.29</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":54,\"testrun\":381115}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":26,\"branch\":1,\"machine\":54,\"testrun\":381116}]\\'>tsspider_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":54,\"testrun\":381117}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":1,\"branch\":1,\"machine\":54,\"testrun\":381118}]\\'>tp_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":6,\"branch\":1,\"machine\":54,\"testrun\":381120}]\\'>tp_rss_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":23,\"branch\":1,\"machine\":54,\"testrun\":381121}]\\'>tsvg_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":21,\"branch\":1,\"machine\":54,\"testrun\":381122}]\\'>tgfx_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":19,\"branch\":1,\"machine\":54,\"testrun\":381123}]\\'>tdhtml_nochrome</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431026\">twinopen: 108.95</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431028\">tsspider: 77.24</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431030\">ts: 650.68</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431032\">tp: 193.09</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431037\">tp_RSS: 71.4MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431042\">tsvg: 4118.50</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431045\">tgfx: 25.25</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431047\">tdhtml: 846.29</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626730\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626731\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626732\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626733\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626735\">tp_RSS</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626736\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626737\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626738\">tdhtml</a> ','</p>'],'1240129495.1240130185.19604.gz' : [' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/f9627950be8f title=\"Built from revision f9627950be8f\">rev:f9627950be8f</a>','Z:18.7MB','Zdiff:-13000 (+95288/-108288)'],'1240144216.1240146033.21660.gz' : ['id:20090419053016','<a href = \"http://hg.mozilla.org/mozilla-central/rev/11f68e169ed4\">rev:11f68e169ed4</a>',' cycle time: 00:12:29<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":72}]\\'>twinopen: 486.95</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":72}]\\'>tdhtml: 908.41</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":72}]\\'>tsspider: 85.66</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":72}]\\'>ts: 1136.89</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":11,\"branch\":1,\"machine\":72}]\\'>tp_fast: 152.05</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":13,\"branch\":1,\"machine\":72}]\\'>tp_fast_rss: 258.3MB</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":72,\"testrun\":380383}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":72,\"testrun\":380384}]\\'>tdhtml</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":72,\"testrun\":380385}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":72,\"testrun\":380386}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":11,\"branch\":1,\"machine\":72,\"testrun\":380387}]\\'>tp_fast</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":13,\"branch\":1,\"machine\":72,\"testrun\":380389}]\\'>tp_fast_rss</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911651\">twinopen: 486.95</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911649\">tdhtml: 908.41</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911647\">tsspider: 85.66</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911653\">ts: 1136.89</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911655\">tp: 152.05</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911659\">tp_RSS: 258.3MB</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625952\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625953\">tdhtml</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625954\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625955\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625956\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625958\">tp_RSS</a> ','</p>'],'1240121209.1240125309.13895.gz' : ['id:20090418230649','<a href = \"http://hg.mozilla.org/mozilla-central/rev/e2bf0c7914c8\">rev:e2bf0c7914c8</a>',' cycle time: 00:56:54<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":59}]\\'>twinopen: 501.42</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":59}]\\'>tsspider: 86.12</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":59}]\\'>ts: 1138.37</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":2,\"branch\":1,\"machine\":59}]\\'>tp: 304.17</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":5,\"branch\":1,\"machine\":59}]\\'>tp_rss: 299.8MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":22,\"branch\":1,\"machine\":59}]\\'>tsvg: 4298.18</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":20,\"branch\":1,\"machine\":59}]\\'>tgfx: 2.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":59}]\\'>tdhtml: 904.91</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":59,\"testrun\":378675}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":59,\"testrun\":378676}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":59,\"testrun\":378677}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":2,\"branch\":1,\"machine\":59,\"testrun\":378678}]\\'>tp</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":5,\"branch\":1,\"machine\":59,\"testrun\":378680}]\\'>tp_rss</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":22,\"branch\":1,\"machine\":59,\"testrun\":378681}]\\'>tsvg</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":20,\"branch\":1,\"machine\":59,\"testrun\":378682}]\\'>tgfx</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":59,\"testrun\":378683}]\\'>tdhtml</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394866\">twinopen: 501.42</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394868\">tsspider: 86.12</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394870\">ts: 1138.37</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394872\">tp: 304.17</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394895\">tp_RSS: 299.8MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394906\">tsvg: 4298.18</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394910\">tdhtml: 904.91</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624153\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624154\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624155\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624156\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624158\">tp_RSS</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624159\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624160\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624161\">tdhtml</a> ','</p>'],'1240148892.1240155418.7052.gz' : ['id:20090419064812','<a href = \"http://hg.mozilla.org/mozilla-central/rev/11f68e169ed4\">rev:11f68e169ed4</a>',' cycle time: 00:21:08<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":76}]\\'>tsspider: 70.18</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":24,\"branch\":1,\"machine\":76}]\\'>tjss: 40.15</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":76}]\\'>ts: 470.05</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":76}]\\'>twinopen: 95.37</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":76,\"testrun\":381138}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":24,\"branch\":1,\"machine\":76,\"testrun\":381140}]\\'>tjss</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":76,\"testrun\":381144}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":76,\"testrun\":381145}]\\'>twinopen</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=2701339\">tsspider: 70.18</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=2701341\">tjss: 40.15</a><br>',\n\
+'<a href=\"http://graphs.mozilla.org/graph.html#show=2701343\">ts: 470.05</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=2701345\">twinopen: 95.37</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626750\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626752\">tjss</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626754\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626755\">twinopen</a> ','</p>'],'1240144192.1240154008.5093.gz' : [' \"<a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/11f68e169ed4 title=\\\\\"Built from revision 11f68e169ed4\\\\\">rev:11f68e169ed4</a>\"'],'1240121209.1240125255.13828.gz' : ['id:20090418230649','<a href = \"http://hg.mozilla.org/mozilla-central/rev/e2bf0c7914c8\">rev:e2bf0c7914c8</a>',' cycle time: 00:55:53<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":64}]\\'>twinopen: 328.32</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":64}]\\'>tsspider: 84.94</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":64}]\\'>ts: 1632.11</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":2,\"branch\":1,\"machine\":64}]\\'>tp: 306.37</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":5,\"branch\":1,\"machine\":64}]\\'>tp_rss: 331.5MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":22,\"branch\":1,\"machine\":64}]\\'>tsvg: 3462.45</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":20,\"branch\":1,\"machine\":64}]\\'>tgfx: 2.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":64}]\\'>tdhtml: 907.76</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":64,\"testrun\":378666}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":64,\"testrun\":378667}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":64,\"testrun\":378668}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":2,\"branch\":1,\"machine\":64,\"testrun\":378669}]\\'>tp</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":5,\"branch\":1,\"machine\":64,\"testrun\":378671}]\\'>tp_rss</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":22,\"branch\":1,\"machine\":64,\"testrun\":378672}]\\'>tsvg</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":20,\"branch\":1,\"machine\":64,\"testrun\":378673}]\\'>tgfx</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":64,\"testrun\":378674}]\\'>tdhtml</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794371\">twinopen: 328.32</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794373\">tsspider: 84.94</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794376\">ts: 1632.11</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794379\">tp: 306.37</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794419\">tp_RSS: 331.5MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794438\">tsvg: 3462.45</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794446\">tdhtml: 907.76</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624144\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624145\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624146\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624147\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624149\">tp_RSS</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624150\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624151\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624152\">tdhtml</a> ','</p>'],'1240121209.1240125178.13738.gz' : ['id:20090418230649','<a href = \"http://hg.mozilla.org/mozilla-central/rev/e2bf0c7914c8\">rev:e2bf0c7914c8</a>',' cycle time: 00:54:34<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":62}]\\'>twinopen: 491.05</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":26,\"branch\":1,\"machine\":62}]\\'>tsspider_nochrome: 71.2</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":62}]\\'>ts: 1116.37</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":1,\"branch\":1,\"machine\":62}]\\'>tp_nochrome: 284.41</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":6,\"branch\":1,\"machine\":62}]\\'>tp_rss_nochrome: 302.4MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":23,\"branch\":1,\"machine\":62}]\\'>tsvg_nochrome: 4253.77</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":21,\"branch\":1,\"machine\":62}]\\'>tgfx_nochrome: 4.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":19,\"branch\":1,\"machine\":62}]\\'>tdhtml_nochrome: 902.38</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":62,\"testrun\":378648}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":26,\"branch\":1,\"machine\":62,\"testrun\":378649}]\\'>tsspider_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":62,\"testrun\":378650}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":1,\"branch\":1,\"machine\":62,\"testrun\":378651}]\\'>tp_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":6,\"branch\":1,\"machine\":62,\"testrun\":378653}]\\'>tp_rss_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":23,\"branch\":1,\"machine\":62,\"testrun\":378654}]\\'>tsvg_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":21,\"branch\":1,\"machine\":62,\"testrun\":378655}]\\'>tgfx_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":19,\"branch\":1,\"machine\":62,\"testrun\":378656}]\\'>tdhtml_nochrome</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431141\">twinopen: 491.05</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431148\">tsspider: 71.20</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431157\">ts: 1116.37</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431170\">tp: 284.41</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431190\">tp_RSS: 302.4MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431208\">tsvg: 4253.77</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431219\">tdhtml: 902.38</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624126\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624127\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624128\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624129\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624131\">tp_RSS</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624132\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624133\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624134\">tdhtml</a> ','</p>'],'1240136993.1240145173.20415.gz' : [' \"<a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/11f68e169ed4 title=\\\\\"Built from revision 11f68e169ed4\\\\\">rev:11f68e169ed4</a>\"'],'1240129495.1240132690.22724.gz' : [' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/f9627950be8f title=\"Built from revision f9627950be8f\">rev:f9627950be8f</a>','Z:16.3MB','Zdiff:-168 (+270/-438)'],'1240135059.1240139840.32682.gz' : ['id:20090419025739','<a href = \"http://hg.mozilla.org/mozilla-central/rev/907f2f562f44\">rev:907f2f562f44</a>',' cycle time: 00:47:05<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":54}]\\'>twinopen: 108.44</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":26,\"branch\":1,\"machine\":54}]\\'>tsspider_nochrome: 81.78</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":54}]\\'>ts: 659.32</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":1,\"branch\":1,\"machine\":54}]\\'>tp_nochrome: 192.56</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":6,\"branch\":1,\"machine\":54}]\\'>tp_rss_nochrome: 71.6MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":23,\"branch\":1,\"machine\":54}]\\'>tsvg_nochrome: 4126.73</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":21,\"branch\":1,\"machine\":54}]\\'>tgfx_nochrome: 25.92</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":19,\"branch\":1,\"machine\":54}]\\'>tdhtml_nochrome: 846.56</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":54,\"testrun\":379809}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":26,\"branch\":1,\"machine\":54,\"testrun\":379810}]\\'>tsspider_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":54,\"testrun\":379811}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":1,\"branch\":1,\"machine\":54,\"testrun\":379812}]\\'>tp_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":6,\"branch\":1,\"machine\":54,\"testrun\":379814}]\\'>tp_rss_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":23,\"branch\":1,\"machine\":54,\"testrun\":379815}]\\'>tsvg_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":21,\"branch\":1,\"machine\":54,\"testrun\":379816}]\\'>tgfx_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":19,\"branch\":1,\"machine\":54,\"testrun\":379817}]\\'>tdhtml_nochrome</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431026\">twinopen: 108.44</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431028\">tsspider: 81.78</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431030\">ts: 659.32</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431032\">tp: 192.56</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431037\">tp_RSS: 71.6MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431042\">tsvg: 4126.73</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431045\">tgfx: 25.92</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431047\">tdhtml: 846.56</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625352\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625353\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625354\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625355\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625357\">tp_RSS</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625358\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625359\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625360\">tdhtml</a> ','</p>'],'1240121181.1240121863.10257.gz' : [' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/e2bf0c7914c8 title=\"Built from revision e2bf0c7914c8\">rev:e2bf0c7914c8</a>','Z:18.7MB','Zdiff:+16 (+32/-16)'],'1240127582.1240132007.21937.gz' : ['id:20090419005302','<a href = \"http://hg.mozilla.org/mozilla-central/rev/c319b49e2880\">rev:c319b49e2880</a>',' cycle time: 00:56:18<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":64}]\\'>twinopen: 319.37</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":64}]\\'>tsspider: 84.8</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":64}]\\'>ts: 1560.47</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":2,\"branch\":1,\"machine\":64}]\\'>tp: 304.77</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":5,\"branch\":1,\"machine\":64}]\\'>tp_rss: 335.2MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":22,\"branch\":1,\"machine\":64}]\\'>tsvg: 3486.91</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":20,\"branch\":1,\"machine\":64}]\\'>tgfx: 2.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":64}]\\'>tdhtml: 909.76</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":64,\"testrun\":379149}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":64,\"testrun\":379150}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":64,\"testrun\":379151}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":2,\"branch\":1,\"machine\":64,\"testrun\":379152}]\\'>tp</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":5,\"branch\":1,\"machine\":64,\"testrun\":379154}]\\'>tp_rss</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":22,\"branch\":1,\"machine\":64,\"testrun\":379155}]\\'>tsvg</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":20,\"branch\":1,\"machine\":64,\"testrun\":379156}]\\'>tgfx</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":64,\"testrun\":379157}]\\'>tdhtml</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794371\">twinopen: 319.37</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794373\">tsspider: 84.80</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794376\">ts: 1560.47</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794379\">tp: 304.77</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794419\">tp_RSS: 335.2MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794438\">tsvg: 3486.91</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794446\">tdhtml: 909.76</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624656\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624657\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624658\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624659\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624661\">tp_RSS</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624662\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624663\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624664\">tdhtml</a> ','</p>'],'1240144216.1240148608.25029.gz' : ['id:20090419053016','<a href = \"http://hg.mozilla.org/mozilla-central/rev/11f68e169ed4\">rev:11f68e169ed4</a>',' cycle time: 00:55:55<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":64}]\\'>twinopen: 329.74</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":64}]\\'>tsspider: 84.82</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":64}]\\'>ts: 1568.74</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":2,\"branch\":1,\"machine\":64}]\\'>tp: 305.94</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":5,\"branch\":1,\"machine\":64}]\\'>tp_rss: 334.4MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":22,\"branch\":1,\"machine\":64}]\\'>tsvg: 3491.18</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":20,\"branch\":1,\"machine\":64}]\\'>tgfx: 2.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":64}]\\'>tdhtml: 908.41</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":64,\"testrun\":380612}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":64,\"testrun\":380613}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":64,\"testrun\":380614}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":2,\"branch\":1,\"machine\":64,\"testrun\":380615}]\\'>tp</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":5,\"branch\":1,\"machine\":64,\"testrun\":380617}]\\'>tp_rss</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":22,\"branch\":1,\"machine\":64,\"testrun\":380618}]\\'>tsvg</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":20,\"branch\":1,\"machine\":64,\"testrun\":380619}]\\'>tgfx</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":64,\"testrun\":380620}]\\'>tdhtml</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794371\">twinopen: 329.74</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794373\">tsspider: 84.82</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794376\">ts: 1568.74</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794379\">tp: 305.94</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794419\">tp_RSS: 334.4MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794438\">tsvg: 3491.18</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=794446\">tdhtml: 908.41</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626194\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626195\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626196\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626197\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626199\">tp_RSS</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626200\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626201\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626202\">tdhtml</a> ','</p>'],'1240116360.1240122056.10484.gz' : ['id:20090418214600','<a href = \"http://hg.mozilla.org/mozilla-central/rev/e2bf0c7914c8\">rev:e2bf0c7914c8</a>','FAIL: Busted: ts','FAIL: failed to initialize browser'],'1240127582.1240132677.22690.gz' : ['id:20090419005302','<a href = \"http://hg.mozilla.org/mozilla-central/rev/c319b49e2880\">rev:c319b49e2880</a>',' cycle time: 00:57:05<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":66}]\\'>twinopen: 328.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":26,\"branch\":1,\"machine\":66}]\\'>tsspider_nochrome: 70.44</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":66}]\\'>ts: 1862.89</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":1,\"branch\":1,\"machine\":66}]\\'>tp_nochrome: 314.83</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":6,\"branch\":1,\"machine\":66}]\\'>tp_rss_nochrome: 307.3MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":23,\"branch\":1,\"machine\":66}]\\'>tsvg_nochrome: 3483.09</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":21,\"branch\":1,\"machine\":66}]\\'>tgfx_nochrome: 6.25</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":19,\"branch\":1,\"machine\":66}]\\'>tdhtml_nochrome: 905.68</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":66,\"testrun\":379176}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":26,\"branch\":1,\"machine\":66,\"testrun\":379177}]\\'>tsspider_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":66,\"testrun\":379178}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":1,\"branch\":1,\"machine\":66,\"testrun\":379179}]\\'>tp_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":6,\"branch\":1,\"machine\":66,\"testrun\":379181}]\\'>tp_rss_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":23,\"branch\":1,\"machine\":66,\"testrun\":379182}]\\'>tsvg_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":21,\"branch\":1,\"machine\":66,\"testrun\":379183}]\\'>tgfx_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":19,\"branch\":1,\"machine\":66,\"testrun\":379184}]\\'>tdhtml_nochrome</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431186\">twinopen: 328.00</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431192\">tsspider: 70.44</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431206\">ts: 1862.89</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431214\">tp: 314.83</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431230\">tp_RSS: 307.3MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431234\">tsvg: 3483.09</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431237\">tgfx: 6.25</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431240\">tdhtml: 905.68</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624684\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624685\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624686\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624687\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624689\">tp_RSS</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624690\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624691\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624692\">tdhtml</a> ','</p>'],'1240144216.1240148676.25114.gz' : ['id:20090419053016','<a href = \"http://hg.mozilla.org/mozilla-central/rev/11f68e169ed4\">rev:11f68e169ed4</a>',' cycle time: 00:57:01<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":61}]\\'>twinopen: 491.84</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":61}]\\'>tsspider: 85.7</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":61}]\\'>ts: 1115.05</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":2,\"branch\":1,\"machine\":61}]\\'>tp: 307.82</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":5,\"branch\":1,\"machine\":61}]\\'>tp_rss: 315.5MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":22,\"branch\":1,\"machine\":61}]\\'>tsvg: 4286.68</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":20,\"branch\":1,\"machine\":61}]\\'>tgfx: 2.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":61}]\\'>tdhtml: 901.18</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":61,\"testrun\":380637}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":61,\"testrun\":380638}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":61,\"testrun\":380639}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":2,\"branch\":1,\"machine\":61,\"testrun\":380640}]\\'>tp</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":5,\"branch\":1,\"machine\":61,\"testrun\":380642}]\\'>tp_rss</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":22,\"branch\":1,\"machine\":61,\"testrun\":380643}]\\'>tsvg</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":20,\"branch\":1,\"machine\":61,\"testrun\":380644}]\\'>tgfx</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":61,\"testrun\":380645}]\\'>tdhtml</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394876\">twinopen: 491.84</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394880\">tsspider: 85.70</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394884\">ts: 1115.05</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394887\">tp: 307.82</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394904\">tp_RSS: 315.5MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394914\">tsvg: 4286.68</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394919\">tdhtml: 901.18</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626221\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626222\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626223\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626224\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626226\">tp_RSS</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626227\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626228\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626229\">tdhtml</a> ','</p>'],'1240136993.1240147758.23930.gz' : [' forced clobber',' \"<a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/11f68e169ed4 title=\\\\\"Built from revision 11f68e169ed4\\\\\">rev:11f68e169ed4</a>\"',' check<br/>667/0',' xpcshell-tests<br/>608/0',' reftest<br/>2984/0/163',' crashtest<br/>1092/0/8',' mochitest-plain<br/>79373/0/1259',' mochitest-chrome<br/>1767/0/29',' mochitest-browser-chrome<br/>2811/0/5',' mochitest-a11y<br/>2250/0/79'],'1240151392.1240154175.5321.gz' : [' \"<a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/11f68e169ed4 title=\\\\\"Built from revision 11f68e169ed4\\\\\">rev:11f68e169ed4</a>\"','<abbr title=\"refcnt Leaks\">RLk</abbr>:0B','<abbr title=\"Total Bytes malloc\\'ed and not free\\'d\">Lk</abbr>:112KB','<abbr title=\"Maximum Heap Size\">MH</abbr>:14.7MB','<abbr title=\"Allocations - number of calls to malloc and friends\">A</abbr>:491696'],'1240144192.1240148394.24641.gz' : [' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/11f68e169ed4 title=\"Built from revision 11f68e169ed4\">rev:11f68e169ed4</a>',' check<br/>629/0',' xpcshell-tests<br/>607/0',' reftest<br/>2985/0/162',' crashtest<br/>1093/0/7',' mochitest-plain<br/>79194/0/1262',' mochitest-chrome<br/>2037/0/30',' mochitest-browser-chrome<br/>2800/0/5'],'1240137185.1240142855.17065.gz' : ['id:20090419033305','<a href = \"http://hg.mozilla.org/mozilla-central/rev/11f68e169ed4\">rev:11f68e169ed4</a>',' cycle time: 00:47:05<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":54}]\\'>twinopen: 108.76</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":26,\"branch\":1,\"machine\":54}]\\'>tsspider_nochrome: 74.38</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":54}]\\'>ts: 649.95</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":1,\"branch\":1,\"machine\":54}]\\'>tp_nochrome: 193.2</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":6,\"branch\":1,\"machine\":54}]\\'>tp_rss_nochrome: 71.3MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":23,\"branch\":1,\"machine\":54}]\\'>tsvg_nochrome: 4120.41</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":21,\"branch\":1,\"machine\":54}]\\'>tgfx_nochrome: 25.1</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":19,\"branch\":1,\"machine\":54}]\\'>tdhtml_nochrome: 846.71</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":54,\"testrun\":380123}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":26,\"branch\":1,\"machine\":54,\"testrun\":380124}]\\'>tsspider_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":54,\"testrun\":380125}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":1,\"branch\":1,\"machine\":54,\"testrun\":380126}]\\'>tp_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":6,\"branch\":1,\"machine\":54,\"testrun\":380128}]\\'>tp_rss_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":23,\"branch\":1,\"machine\":54,\"testrun\":380129}]\\'>tsvg_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":21,\"branch\":1,\"machine\":54,\"testrun\":380130}]\\'>tgfx_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":19,\"branch\":1,\"machine\":54,\"testrun\":380131}]\\'>tdhtml_nochrome</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431026\">twinopen: 108.76</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431028\">tsspider: 74.38</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431030\">ts: 649.95</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431032\">tp: 193.20</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431037\">tp_RSS: 71.3MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431042\">tsvg: 4120.41</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431045\">tgfx: 25.10</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431047\">tdhtml: 846.71</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625679\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625680\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625681\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625682\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625684\">tp_RSS</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625685\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625686\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625687\">tdhtml</a> ','</p>'],'1240129514.1240133634.23667.gz' : ['id:20090419012514','<a href = \"http://hg.mozilla.org/mozilla-central/rev/f9627950be8f\">rev:f9627950be8f</a>',' cycle time: 00:56:49<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":59}]\\'>twinopen: 491.47</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":59}]\\'>tsspider: 86.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":59}]\\'>ts: 1118.53</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":2,\"branch\":1,\"machine\":59}]\\'>tp: 305.7</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":5,\"branch\":1,\"machine\":59}]\\'>tp_rss: 302.6MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":22,\"branch\":1,\"machine\":59}]\\'>tsvg: 4297.18</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":20,\"branch\":1,\"machine\":59}]\\'>tgfx: 1.5</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":59}]\\'>tdhtml: 909.09</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":59,\"testrun\":379346}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":59,\"testrun\":379347}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":59,\"testrun\":379348}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":2,\"branch\":1,\"machine\":59,\"testrun\":379349}]\\'>tp</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":5,\"branch\":1,\"machine\":59,\"testrun\":379351}]\\'>tp_rss</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":22,\"branch\":1,\"machine\":59,\"testrun\":379352}]\\'>tsvg</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":20,\"branch\":1,\"machine\":59,\"testrun\":379353}]\\'>tgfx</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":59,\"testrun\":379354}]\\'>tdhtml</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394866\">twinopen: 491.47</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394868\">tsspider: 86.00</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394870\">ts: 1118.53</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394872\">tp: 305.70</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394895\">tp_RSS: 302.6MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394906\">tsvg: 4297.18</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394908\">tgfx: 1.50</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394910\">tdhtml: 909.09</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624863\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624864\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624865\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624866\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624868\">tp_RSS</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624869\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624870\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624871\">tdhtml</a> ','</p>'],'1240137051.1240149018.25540.gz' : ['id:20090419033051','<a href = \"http://hg.mozilla.org/mozilla-central/rev/11f68e169ed4\">rev:11f68e169ed4</a>',' cycle time: 00:56:35<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":66}]\\'>twinopen: 326.53</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":26,\"branch\":1,\"machine\":66}]\\'>tsspider_nochrome: 70.48</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":66}]\\'>ts: 1833.58</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":1,\"branch\":1,\"machine\":66}]\\'>tp_nochrome: 315.61</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":6,\"branch\":1,\"machine\":66}]\\'>tp_rss_nochrome: 306.2MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":23,\"branch\":1,\"machine\":66}]\\'>tsvg_nochrome: 3488.73</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":21,\"branch\":1,\"machine\":66}]\\'>tgfx_nochrome: 6.5</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":19,\"branch\":1,\"machine\":66}]\\'>tdhtml_nochrome: 914.76</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":66,\"testrun\":380594}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":26,\"branch\":1,\"machine\":66,\"testrun\":380595}]\\'>tsspider_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":66,\"testrun\":380596}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":1,\"branch\":1,\"machine\":66,\"testrun\":380597}]\\'>tp_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":6,\"branch\":1,\"machine\":66,\"testrun\":380599}]\\'>tp_rss_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":23,\"branch\":1,\"machine\":66,\"testrun\":380600}]\\'>tsvg_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":21,\"branch\":1,\"machine\":66,\"testrun\":380601}]\\'>tgfx_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":19,\"branch\":1,\"machine\":66,\"testrun\":380602}]\\'>tdhtml_nochrome</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431186\">twinopen: 326.53</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431192\">tsspider: 70.48</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431206\">ts: 1833.58</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431214\">tp: 315.61</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431230\">tp_RSS: 306.2MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431234\">tsvg: 3488.73</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431237\">tgfx: 6.50</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431240\">tdhtml: 914.76</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626176\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626177\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626178\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626179\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626181\">tp_RSS</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626182\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626183\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626184\">tdhtml</a> ','</p>'],'1240144239.1240147879.24057.gz' : ['id:20090419053039','<a href = \"http://hg.mozilla.org/mozilla-central/rev/11f68e169ed4\">rev:11f68e169ed4</a>',' cycle time: 00:47:00<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":54}]\\'>twinopen: 109.61</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":26,\"branch\":1,\"machine\":54}]\\'>tsspider_nochrome: 77.46</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":54}]\\'>ts: 650.26</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":1,\"branch\":1,\"machine\":54}]\\'>tp_nochrome: 193.66</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":6,\"branch\":1,\"machine\":54}]\\'>tp_rss_nochrome: 71.1MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":23,\"branch\":1,\"machine\":54}]\\'>tsvg_nochrome: 4130.5</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":21,\"branch\":1,\"machine\":54}]\\'>tgfx_nochrome: 25.5</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":19,\"branch\":1,\"machine\":54}]\\'>tdhtml_nochrome: 850.18</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":54,\"testrun\":380569}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":26,\"branch\":1,\"machine\":54,\"testrun\":380570}]\\'>tsspider_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":54,\"testrun\":380571}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":1,\"branch\":1,\"machine\":54,\"testrun\":380572}]\\'>tp_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":6,\"branch\":1,\"machine\":54,\"testrun\":380574}]\\'>tp_rss_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":23,\"branch\":1,\"machine\":54,\"testrun\":380575}]\\'>tsvg_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":21,\"branch\":1,\"machine\":54,\"testrun\":380576}]\\'>tgfx_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":19,\"branch\":1,\"machine\":54,\"testrun\":380577}]\\'>tdhtml_nochrome</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431026\">twinopen: 109.61</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431028\">tsspider: 77.46</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431030\">ts: 650.26</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431032\">tp: 193.66</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431037\">tp_RSS: 71.1MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431042\">tsvg: 4130.50</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431045\">tgfx: 25.50</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431047\">tdhtml: 850.18</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626150\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626151\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626152\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626153\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626155\">tp_RSS</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626156\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626157\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626158\">tdhtml</a> ','</p>'],'1240135775.1240138731.31045.gz' : ['id:20090419030935','<a href = \"http://hg.mozilla.org/mozilla-central/rev/907f2f562f44\">rev:907f2f562f44</a>',' cycle time: 00:11:45<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":73}]\\'>twinopen: 110.24</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":73}]\\'>tdhtml: 848.21</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":73}]\\'>tsspider: 93.8</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":73}]\\'>ts: 662.16</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":11,\"branch\":1,\"machine\":73}]\\'>tp_fast: 138.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":13,\"branch\":1,\"machine\":73}]\\'>tp_fast_rss: 60.5MB</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":73,\"testrun\":379702}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":73,\"testrun\":379703}]\\'>tdhtml</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":73,\"testrun\":379704}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":73,\"testrun\":379705}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":11,\"branch\":1,\"machine\":73,\"testrun\":379706}]\\'>tp_fast</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":13,\"branch\":1,\"machine\":73,\"testrun\":379708}]\\'>tp_fast_rss</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911690\">twinopen: 110.24</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911688\">tdhtml: 848.21</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911686\">tsspider: 93.80</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911692\">ts: 662.16</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911694\">tp: 138.00</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911698\">tp_RSS: 60.5MB</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625236\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625237\">tdhtml</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625238\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625239\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625240\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625242\">tp_RSS</a> ','</p>'],'1240133109.1240139861.32695.gz' : ['id:20090419022509','<a href = \"http://hg.mozilla.org/mozilla-central/rev/c319b49e2880\">rev:c319b49e2880</a>',' cycle time: 00:15:32<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":71}]\\'>twinopen: 93.84</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":71}]\\'>tdhtml: 1081.29</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":71}]\\'>tsspider: 70.94</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":71}]\\'>ts: 469.58</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":11,\"branch\":1,\"machine\":71}]\\'>tp_fast: 96.1</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":15,\"branch\":1,\"machine\":71}]\\'>tp_fast_memset: 47.6MB</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":71,\"testrun\":379802}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":71,\"testrun\":379803}]\\'>tdhtml</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":71,\"testrun\":379804}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":71,\"testrun\":379805}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":11,\"branch\":1,\"machine\":71,\"testrun\":379806}]\\'>tp_fast</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":15,\"branch\":1,\"machine\":71,\"testrun\":379808}]\\'>tp_fast_memset</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=912144\">twinopen: 93.84</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=912141\">tdhtml: 1081.29</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=912138\">tsspider: 70.94</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=912146\">ts: 469.58</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=912148\">tp: 96.10</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=912154\">tp_memset: 47.6MB</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625344\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625345\">tdhtml</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625346\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625347\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625348\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625351\">tp_memset</a> ','</p>'],'1240121209.1240122672.11197.gz' : ['id:20090418230649','<a href = \"http://hg.mozilla.org/mozilla-central/rev/e2bf0c7914c8\">rev:e2bf0c7914c8</a>',' cycle time: 00:12:33<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":72}]\\'>twinopen: 484.33</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":72}]\\'>tdhtml: 905.24</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":72}]\\'>tsspider: 85.9</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":72}]\\'>ts: 1112.74</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":11,\"branch\":1,\"machine\":72}]\\'>tp_fast: 150.93</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":13,\"branch\":1,\"machine\":72}]\\'>tp_fast_rss: 258.1MB</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":72,\"testrun\":378422}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":72,\"testrun\":378423}]\\'>tdhtml</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":72,\"testrun\":378424}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":72,\"testrun\":378425}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":11,\"branch\":1,\"machine\":72,\"testrun\":378426}]\\'>tp_fast</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":13,\"branch\":1,\"machine\":72,\"testrun\":378431}]\\'>tp_fast_rss</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911651\">twinopen: 484.33</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911649\">tdhtml: 905.24</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911647\">tsspider: 85.90</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911653\">ts: 1112.74</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911655\">tp: 150.93</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911659\">tp_RSS: 258.1MB</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3623887\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3623888\">tdhtml</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3623889\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3623890\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3623891\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3623895\">tp_RSS</a> ','</p>'],'1240129495.1240141814.14418.gz' : [' forced clobber',' \"<a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/f9627950be8f title=\\\\\"Built from revision f9627950be8f\\\\\">rev:f9627950be8f</a>\"',' check<br/>670/0',' xpcshell-tests<br/>610/<em class=\"testfail\">1</em>',' reftest<br/>2984/0/163',' crashtest<br/>1092/0/8',' mochitest-plain<br/>79385/0/1259',' mochitest-chrome<br/>1767/0/29',' mochitest-browser-chrome<br/>2808/0/5',' mochitest-a11y<br/>2249/0/79'],'1240144192.1240146860.22758.gz' : [' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/11f68e169ed4 title=\"Built from revision 11f68e169ed4\">rev:11f68e169ed4</a>','<abbr title=\"refcnt Leaks\">RLk</abbr>:0B','<abbr title=\"Total Bytes malloc\\'ed and not free\\'d\">Lk</abbr>:2.05MB','<abbr title=\"Maximum Heap Size\">MH</abbr>:24.1MB','<abbr title=\"Allocations - number of calls to malloc and friends\">A</abbr>:804032'],'1240151517.1240155396.7038.gz' : ['id:20090419073157','<a href = \"http://hg.mozilla.org/mozilla-central/rev/11f68e169ed4\">rev:11f68e169ed4</a>',' cycle time: 00:50:23<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":51}]\\'>twinopen: 108.41</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":51}]\\'>tsspider: 92.82</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":51}]\\'>ts: 652.95</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":2,\"branch\":1,\"machine\":51}]\\'>tp: 226.09</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":5,\"branch\":1,\"machine\":51}]\\'>tp_rss: 78.9MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":22,\"branch\":1,\"machine\":51}]\\'>tsvg: 4126.36</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":20,\"branch\":1,\"machine\":51}]\\'>tgfx: 19.92</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":51}]\\'>tdhtml: 851.88</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":51,\"testrun\":381133}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":51,\"testrun\":381134}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":51,\"testrun\":381135}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":2,\"branch\":1,\"machine\":51,\"testrun\":381136}]\\'>tp</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":5,\"branch\":1,\"machine\":51,\"testrun\":381139}]\\'>tp_rss</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":22,\"branch\":1,\"machine\":51,\"testrun\":381141}]\\'>tsvg</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":20,\"branch\":1,\"machine\":51,\"testrun\":381142}]\\'>tgfx</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":51,\"testrun\":381143}]\\'>tdhtml</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395160\">twinopen: 108.41</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395162\">tsspider: 92.82</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395164\">ts: 652.95</a><br>',\n\
+'<a href=\"http://graphs.mozilla.org/graph.html#show=395166\">tp: 226.09</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395170\">tp_RSS: 78.9MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395172\">tsvg: 4126.36</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395174\">tgfx: 19.92</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395176\">tdhtml: 851.88</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626748\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626749\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626751\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626753\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626757\">tp_RSS</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626758\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626759\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626760\">tdhtml</a> ','</p>'],'1240144216.1240153096.4112.gz' : ['id:20090419053016','<a href = \"http://hg.mozilla.org/mozilla-central/rev/11f68e169ed4\">rev:11f68e169ed4</a>',' cycle time: 00:56:41<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":66}]\\'>twinopen: 333.63</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":26,\"branch\":1,\"machine\":66}]\\'>tsspider_nochrome: 70.42</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":66}]\\'>ts: 1766.11</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":1,\"branch\":1,\"machine\":66}]\\'>tp_nochrome: 315.29</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":6,\"branch\":1,\"machine\":66}]\\'>tp_rss_nochrome: 304.9MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":23,\"branch\":1,\"machine\":66}]\\'>tsvg_nochrome: 3490.45</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":21,\"branch\":1,\"machine\":66}]\\'>tgfx_nochrome: 6.5</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":19,\"branch\":1,\"machine\":66}]\\'>tdhtml_nochrome: 909.24</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":66,\"testrun\":380969}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":26,\"branch\":1,\"machine\":66,\"testrun\":380970}]\\'>tsspider_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":66,\"testrun\":380971}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":1,\"branch\":1,\"machine\":66,\"testrun\":380972}]\\'>tp_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":6,\"branch\":1,\"machine\":66,\"testrun\":380974}]\\'>tp_rss_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":23,\"branch\":1,\"machine\":66,\"testrun\":380975}]\\'>tsvg_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":21,\"branch\":1,\"machine\":66,\"testrun\":380976}]\\'>tgfx_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":19,\"branch\":1,\"machine\":66,\"testrun\":380977}]\\'>tdhtml_nochrome</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431186\">twinopen: 333.63</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431192\">tsspider: 70.42</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431206\">ts: 1766.11</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431214\">tp: 315.29</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431230\">tp_RSS: 304.9MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431234\">tsvg: 3490.45</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431237\">tgfx: 6.50</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431240\">tdhtml: 909.24</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626574\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626575\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626576\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626577\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626579\">tp_RSS</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626580\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626581\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626582\">tdhtml</a> ','</p>'],'1240135019.1240135503.26799.gz' : [' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/907f2f562f44 title=\"Built from revision 907f2f562f44\">rev:907f2f562f44</a>','<abbr title=\"refcnt Leaks\">RLk</abbr>:0B','<abbr title=\"Total Bytes malloc\\'ed and not free\\'d\">Lk</abbr>:2.10MB','<abbr title=\"Maximum Heap Size\">MH</abbr>:23.4MB','<abbr title=\"Allocations - number of calls to malloc and friends\">A</abbr>:805645'],'1240151392.1240152047.2695.gz' : [' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/11f68e169ed4 title=\"Built from revision 11f68e169ed4\">rev:11f68e169ed4</a>','Z:18.7MB'],'1240122875.1240128829.17869.gz' : ['id:20090418233435','<a href = \"http://hg.mozilla.org/mozilla-central/rev/e2bf0c7914c8\">rev:e2bf0c7914c8</a>',' cycle time: 00:15:22<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":71}]\\'>twinopen: 93.32</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":71}]\\'>tdhtml: 1082.32</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":71}]\\'>tsspider: 70.84</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":71}]\\'>ts: 475.11</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":11,\"branch\":1,\"machine\":71}]\\'>tp_fast: 96.78</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":15,\"branch\":1,\"machine\":71}]\\'>tp_fast_memset: 47.6MB</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":71,\"testrun\":378947}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":71,\"testrun\":378948}]\\'>tdhtml</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":71,\"testrun\":378949}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":71,\"testrun\":378950}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":11,\"branch\":1,\"machine\":71,\"testrun\":378951}]\\'>tp_fast</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":15,\"branch\":1,\"machine\":71,\"testrun\":378953}]\\'>tp_fast_memset</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=912144\">twinopen: 93.32</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=912141\">tdhtml: 1082.32</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=912138\">tsspider: 70.84</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=912146\">ts: 475.11</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=912148\">tp: 96.78</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=912154\">tp_memset: 47.6MB</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624442\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624443\">tdhtml</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624444\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624445\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624446\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624449\">tp_memset</a> ','</p>'],'1240136993.1240141221.13279.gz' : [' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/11f68e169ed4 title=\"Built from revision 11f68e169ed4\">rev:11f68e169ed4</a>','Z:18.7MB'],'1240138647.1240138972.31577.gz' : [' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/11f68e169ed4 title=\"Built from revision 11f68e169ed4\">rev:11f68e169ed4</a>','<abbr title=\"refcnt Leaks\">RLk</abbr>:0B','<abbr title=\"Total Bytes malloc\\'ed and not free\\'d\">Lk</abbr>:2.10MB','<abbr title=\"Maximum Heap Size\">MH</abbr>:23.3MB','<abbr title=\"Allocations - number of calls to malloc and friends\">A</abbr>:805745'],'1240144192.1240149921.28542.gz' : [' periodic clobber',' \"<a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/11f68e169ed4 title=\\\\\"Built from revision 11f68e169ed4\\\\\">rev:11f68e169ed4</a>\"','<abbr title=\"refcnt Leaks\">RLk</abbr>:0B','<abbr title=\"Total Bytes malloc\\'ed and not free\\'d\">Lk</abbr>:110KB','<abbr title=\"Maximum Heap Size\">MH</abbr>:14.7MB','<abbr title=\"Allocations - number of calls to malloc and friends\">A</abbr>:387457'],'1240135019.1240136706.28488.gz' : [' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/907f2f562f44 title=\"Built from revision 907f2f562f44\">rev:907f2f562f44</a>','<abbr title=\"refcnt Leaks\">RLk</abbr>:0B','<abbr title=\"Total Bytes malloc\\'ed and not free\\'d\">Lk</abbr>:882KB','<abbr title=\"Maximum Heap Size\">MH</abbr>:21.2MB','<abbr title=\"Allocations - number of calls to malloc and friends\">A</abbr>:666821'],'1240139612.1240145348.20638.gz' : ['id:20090419041332','<a href = \"http://hg.mozilla.org/mozilla-central/rev/11f68e169ed4\">rev:11f68e169ed4</a>','FAIL: Busted: ts','FAIL: failed to initialize browser'],'1240144216.1240149938.28658.gz' : ['id:20090419053016','<a href = \"http://hg.mozilla.org/mozilla-central/rev/11f68e169ed4\">rev:11f68e169ed4</a>',' cycle time: 00:54:20<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":62}]\\'>twinopen: 483.83</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":26,\"branch\":1,\"machine\":62}]\\'>tsspider_nochrome: 71.26</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":62}]\\'>ts: 1214.74</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":1,\"branch\":1,\"machine\":62}]\\'>tp_nochrome: 281.41</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":6,\"branch\":1,\"machine\":62}]\\'>tp_rss_nochrome: 303.5MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":23,\"branch\":1,\"machine\":62}]\\'>tsvg_nochrome: 4261.73</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":21,\"branch\":1,\"machine\":62}]\\'>tgfx_nochrome: 4.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":19,\"branch\":1,\"machine\":62}]\\'>tdhtml_nochrome: 904.65</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":62,\"testrun\":380734}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":26,\"branch\":1,\"machine\":62,\"testrun\":380735}]\\'>tsspider_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":62,\"testrun\":380736}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":1,\"branch\":1,\"machine\":62,\"testrun\":380737}]\\'>tp_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":6,\"branch\":1,\"machine\":62,\"testrun\":380739}]\\'>tp_rss_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":23,\"branch\":1,\"machine\":62,\"testrun\":380740}]\\'>tsvg_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":21,\"branch\":1,\"machine\":62,\"testrun\":380741}]\\'>tgfx_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":19,\"branch\":1,\"machine\":62,\"testrun\":380742}]\\'>tdhtml_nochrome</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431141\">twinopen: 483.83</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431148\">tsspider: 71.26</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431157\">ts: 1214.74</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431170\">tp: 281.41</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431190\">tp_RSS: 303.5MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431208\">tsvg: 4261.73</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431219\">tdhtml: 904.65</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626320\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626321\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626322\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626323\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626325\">tp_RSS</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626326\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626327\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626328\">tdhtml</a> ','</p>'],'1240133109.1240138972.31575.gz' : ['id:20090419022509','<a href = \"http://hg.mozilla.org/mozilla-central/rev/c319b49e2880\">rev:c319b49e2880</a>','FAIL: Busted: ts','FAIL: failed to initialize browser'],'1240121181.1240130294.19730.gz' : [' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/e2bf0c7914c8 title=\"Built from revision e2bf0c7914c8\">rev:e2bf0c7914c8</a>',' check<br/>629/0',' xpcshell-tests<br/>607/0',' reftest<br/>2985/0/162',' crashtest<br/>1093/0/7',' mochitest-plain<br/>79188/0/1262',' mochitest-chrome<br/>2037/0/30',' mochitest-browser-chrome<br/>2791/0/5'],'1240135019.1240147949.24128.gz' : [' \"<a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/907f2f562f44 title=\\\\\"Built from revision 907f2f562f44\\\\\">rev:907f2f562f44</a>\"'],'1240151517.1240153078.4061.gz' : ['id:20090419073157','<a href = \"http://hg.mozilla.org/mozilla-central/rev/11f68e169ed4\">rev:11f68e169ed4</a>',' cycle time: 00:11:45<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":73}]\\'>twinopen: 108.32</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":73}]\\'>tdhtml: 848.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":73}]\\'>tsspider: 94.44</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":73}]\\'>ts: 667.11</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":11,\"branch\":1,\"machine\":73}]\\'>tp_fast: 139.2</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":13,\"branch\":1,\"machine\":73}]\\'>tp_fast_rss: 61.3MB</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":73,\"testrun\":381003}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":73,\"testrun\":381004}]\\'>tdhtml</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":73,\"testrun\":381005}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":73,\"testrun\":381006}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":11,\"branch\":1,\"machine\":73,\"testrun\":381007}]\\'>tp_fast</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":13,\"branch\":1,\"machine\":73,\"testrun\":381009}]\\'>tp_fast_rss</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911690\">twinopen: 108.32</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911688\">tdhtml: 848.00</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911686\">tsspider: 94.44</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911692\">ts: 667.11</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911694\">tp: 139.20</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911698\">tp_RSS: 61.3MB</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626610\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626611\">tdhtml</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626612\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626613\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626614\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626616\">tp_RSS</a> ','</p>'],'1240129866.1240135738.27047.gz' : ['id:20090419013106','<a href = \"http://hg.mozilla.org/mozilla-central/rev/f9627950be8f\">rev:f9627950be8f</a>',' cycle time: 00:50:24<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":53}]\\'>twinopen: 110.47</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":53}]\\'>tsspider: 95.54</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":53}]\\'>ts: 648.84</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":2,\"branch\":1,\"machine\":53}]\\'>tp: 226.03</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":5,\"branch\":1,\"machine\":53}]\\'>tp_rss: 79.3MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":22,\"branch\":1,\"machine\":53}]\\'>tsvg: 4142.86</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":20,\"branch\":1,\"machine\":53}]\\'>tgfx: 20.42</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":53}]\\'>tdhtml: 848.47</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":53,\"testrun\":379518}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":53,\"testrun\":379519}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":53,\"testrun\":379520}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":2,\"branch\":1,\"machine\":53,\"testrun\":379521}]\\'>tp</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":5,\"branch\":1,\"machine\":53,\"testrun\":379523}]\\'>tp_rss</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":22,\"branch\":1,\"machine\":53,\"testrun\":379524}]\\'>tsvg</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":20,\"branch\":1,\"machine\":53,\"testrun\":379525}]\\'>tgfx</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":53,\"testrun\":379526}]\\'>tdhtml</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395129\">twinopen: 110.47</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395131\">tsspider: 95.54</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395133\">ts: 648.84</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395135\">tp: 226.03</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395141\">tp_RSS: 79.3MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395148\">tsvg: 4142.86</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=398218\">tgfx: 20.42</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395151\">tdhtml: 848.47</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625043\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625044\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625045\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625046\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625048\">tp_RSS</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625049\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625050\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625051\">tdhtml</a> ','</p>'],'1240141596.1240152401.3215.gz' : ['id:20090419044636','<a href = \"http://hg.mozilla.org/mozilla-central/rev/907f2f562f44\">rev:907f2f562f44</a>','FAIL: Busted: tdhtml','FAIL: failed to initialize browser'],'1240141596.1240149012.25526.gz' : ['id:20090419044636','<a href = \"http://hg.mozilla.org/mozilla-central/rev/907f2f562f44\">rev:907f2f562f44</a>',' cycle time: 00:15:24<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":71}]\\'>twinopen: 93.89</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":71}]\\'>tdhtml: 1080.41</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":71}]\\'>tsspider: 70.66</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":71}]\\'>ts: 465.53</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":11,\"branch\":1,\"machine\":71}]\\'>tp_fast: 99.1</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":15,\"branch\":1,\"machine\":71}]\\'>tp_fast_memset: 48.2MB</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":71,\"testrun\":380664}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":71,\"testrun\":380665}]\\'>tdhtml</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":71,\"testrun\":380666}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":71,\"testrun\":380667}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":11,\"branch\":1,\"machine\":71,\"testrun\":380668}]\\'>tp_fast</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":15,\"branch\":1,\"machine\":71,\"testrun\":380670}]\\'>tp_fast_memset</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=912144\">twinopen: 93.89</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=912141\">tdhtml: 1080.41</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=912138\">tsspider: 70.66</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=912146\">ts: 465.53</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=912148\">tp: 99.10</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=912154\">tp_memset: 48.2MB</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626248\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626249\">tdhtml</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626250\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626251\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626252\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626255\">tp_memset</a> ','</p>'],'1240127582.1240131888.21703.gz' : ['id:20090419005302','<a href = \"http://hg.mozilla.org/mozilla-central/rev/c319b49e2880\">rev:c319b49e2880</a>',' cycle time: 00:54:29<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":62}]\\'>twinopen: 490.21</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":26,\"branch\":1,\"machine\":62}]\\'>tsspider_nochrome: 70.96</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":62}]\\'>ts: 1154.42</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":1,\"branch\":1,\"machine\":62}]\\'>tp_nochrome: 284.96</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":6,\"branch\":1,\"machine\":62}]\\'>tp_rss_nochrome: 303.0MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":23,\"branch\":1,\"machine\":62}]\\'>tsvg_nochrome: 4246.09</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":21,\"branch\":1,\"machine\":62}]\\'>tgfx_nochrome: 4.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":19,\"branch\":1,\"machine\":62}]\\'>tdhtml_nochrome: 902.97</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":62,\"testrun\":379140}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":26,\"branch\":1,\"machine\":62,\"testrun\":379141}]\\'>tsspider_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":62,\"testrun\":379142}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":1,\"branch\":1,\"machine\":62,\"testrun\":379143}]\\'>tp_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":6,\"branch\":1,\"machine\":62,\"testrun\":379145}]\\'>tp_rss_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":23,\"branch\":1,\"machine\":62,\"testrun\":379146}]\\'>tsvg_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":21,\"branch\":1,\"machine\":62,\"testrun\":379147}]\\'>tgfx_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":19,\"branch\":1,\"machine\":62,\"testrun\":379148}]\\'>tdhtml_nochrome</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431141\">twinopen: 490.21</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431148\">tsspider: 70.96</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431157\">ts: 1154.42</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431170\">tp: 284.96</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431190\">tp_RSS: 303.0MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431208\">tsvg: 4246.09</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431219\">tdhtml: 902.97</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624647\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624648\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624649\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624650\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624652\">tp_RSS</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624653\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624654\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624655\">tdhtml</a> ','</p>'],'1240116360.1240129111.18237.gz' : ['id:20090418214600','<a href = \"http://hg.mozilla.org/mozilla-central/rev/e2bf0c7914c8\">rev:e2bf0c7914c8</a>',' cycle time: 01:20:48<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":70}]\\'>twinopen: 97.33</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":26,\"branch\":1,\"machine\":70}]\\'>tsspider_nochrome: 54.56</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":70}]\\'>ts: 595.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":1,\"branch\":1,\"machine\":70}]\\'>tp_nochrome: 337.61</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":10,\"branch\":1,\"machine\":70}]\\'>tp_memset_nochrome: 53.6MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":23,\"branch\":1,\"machine\":70}]\\'>tsvg_nochrome: 3726.18</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":21,\"branch\":1,\"machine\":70}]\\'>tgfx_nochrome: 18.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":19,\"branch\":1,\"machine\":70}]\\'>tdhtml_nochrome: 742.09</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":70,\"testrun\":378988}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":26,\"branch\":1,\"machine\":70,\"testrun\":378989}]\\'>tsspider_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":70,\"testrun\":378990}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":1,\"branch\":1,\"machine\":70,\"testrun\":378991}]\\'>tp_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":10,\"branch\":1,\"machine\":70,\"testrun\":378993}]\\'>tp_memset_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":23,\"branch\":1,\"machine\":70,\"testrun\":378994}]\\'>tsvg_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":21,\"branch\":1,\"machine\":70,\"testrun\":378995}]\\'>tgfx_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":19,\"branch\":1,\"machine\":70,\"testrun\":378996}]\\'>tdhtml_nochrome</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431842\">twinopen: 97.33</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431844\">tsspider: 54.56</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431846\">ts: 595.00</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431848\">tp: 337.61</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431880\">tp_memset: 53.6MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431885\">tsvg: 3726.18</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431894\">tdhtml: 742.09</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624485\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624486\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624487\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624488\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624491\">tp_memset</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624492\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624493\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624494\">tdhtml</a> ','</p>'],'1240139612.1240150099.29709.gz' : ['id:20090419041332','<a href = \"http://hg.mozilla.org/mozilla-central/rev/11f68e169ed4\">rev:11f68e169ed4</a>',' cycle time: 01:20:27<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":55}]\\'>twinopen: 93.16</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":55}]\\'>tsspider: 70.8</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":55}]\\'>ts: 460.21</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":2,\"branch\":1,\"machine\":55}]\\'>tp: 164.91</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":9,\"branch\":1,\"machine\":55}]\\'>tp_memset: 65.8MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":22,\"branch\":1,\"machine\":55}]\\'>tsvg: 4200.09</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":20,\"branch\":1,\"machine\":55}]\\'>tgfx: 1.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":55}]\\'>tdhtml: 1080.94</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":55,\"testrun\":380752}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":55,\"testrun\":380753}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":55,\"testrun\":380754}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":2,\"branch\":1,\"machine\":55,\"testrun\":380755}]\\'>tp</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":9,\"branch\":1,\"machine\":55,\"testrun\":380757}]\\'>tp_memset</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":22,\"branch\":1,\"machine\":55,\"testrun\":380758}]\\'>tsvg</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":20,\"branch\":1,\"machine\":55,\"testrun\":380759}]\\'>tgfx</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":55,\"testrun\":380760}]\\'>tdhtml</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395002\">twinopen: 93.16</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395004\">tsspider: 70.80</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395006\">ts: 460.21</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395008\">tp: 164.91</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395024\">tp_memset: 65.8MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395028\">tsvg: 4200.09</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395030\">tgfx: 1.00</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=395032\">tdhtml: 1080.94</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626339\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626340\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626341\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626342\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626345\">tp_memset</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626346\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626347\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626348\">tdhtml</a> ','</p>'],'1240137185.1240140255.3879.gz' : ['id:20090419033305','<a href = \"http://hg.mozilla.org/mozilla-central/rev/11f68e169ed4\">rev:11f68e169ed4</a>',' cycle time: 00:11:45<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":73}]\\'>twinopen: 108.94</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":73}]\\'>tdhtml: 848.94</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":73}]\\'>tsspider: 93.94</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":73}]\\'>ts: 654.21</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":11,\"branch\":1,\"machine\":73}]\\'>tp_fast: 138.2</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":13,\"branch\":1,\"machine\":73}]\\'>tp_fast_rss: 61.1MB</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":73,\"testrun\":379874}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":73,\"testrun\":379875}]\\'>tdhtml</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":73,\"testrun\":379876}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":73,\"testrun\":379877}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":11,\"branch\":1,\"machine\":73,\"testrun\":379878}]\\'>tp_fast</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":13,\"branch\":1,\"machine\":73,\"testrun\":379884}]\\'>tp_fast_rss</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911690\">twinopen: 108.94</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911688\">tdhtml: 848.94</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911686\">tsspider: 93.94</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911692\">ts: 654.21</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911694\">tp: 138.20</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911698\">tp_RSS: 61.1MB</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625417\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625418\">tdhtml</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625419\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625420\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625421\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625425\">tp_RSS</a> ','</p>'],'1240122875.1240132710.22740.gz' : ['id:20090418233435','<a href = \"http://hg.mozilla.org/mozilla-central/rev/e2bf0c7914c8\">rev:e2bf0c7914c8</a>',' cycle time: 01:21:04<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":67}]\\'>twinopen: 97.84</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":67}]\\'>tsspider: 71.62</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":67}]\\'>ts: 564.58</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":2,\"branch\":1,\"machine\":67}]\\'>tp: 379.3</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":9,\"branch\":1,\"machine\":67}]\\'>tp_memset: 60.1MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":22,\"branch\":1,\"machine\":67}]\\'>tsvg: 3839.09</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":20,\"branch\":1,\"machine\":67}]\\'>tgfx: 1.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":67}]\\'>tdhtml: 753.82</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":67,\"testrun\":379262}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":67,\"testrun\":379263}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":67,\"testrun\":379264}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":2,\"branch\":1,\"machine\":67,\"testrun\":379265}]\\'>tp</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":9,\"branch\":1,\"machine\":67,\"testrun\":379267}]\\'>tp_memset</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":22,\"branch\":1,\"machine\":67,\"testrun\":379268}]\\'>tsvg</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":20,\"branch\":1,\"machine\":67,\"testrun\":379269}]\\'>tgfx</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":67,\"testrun\":379270}]\\'>tdhtml</a> ','</p>',' graph links','<br>',\n\
+'<a href=\"http://graphs.mozilla.org/graph.html#show=787109\">twinopen: 97.84</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=787111\">tsspider: 71.62</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=787114\">ts: 564.58</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=787118\">tp: 379.30</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=787155\">tp_memset: 60.1MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=787160\">tsvg: 3839.09</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=787166\">tdhtml: 753.82</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624774\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624775\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624776\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624777\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624780\">tp_memset</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624781\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624782\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624783\">tdhtml</a> ','</p>'],'1240144192.1240154979.6403.gz' : [' periodic clobber',' \"<a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/11f68e169ed4 title=\\\\\"Built from revision 11f68e169ed4\\\\\">rev:11f68e169ed4</a>\"',' check<br/>667/0',' xpcshell-tests<br/>608/0',' reftest<br/>2984/0/163',' crashtest<br/>1092/0/8',' mochitest-plain<br/>79384/0/1259',' mochitest-chrome<br/>1767/0/29',' mochitest-browser-chrome<br/>2811/0/5',' mochitest-a11y<br/>2250/0/79'],'1240121181.1240127752.16511.gz' : [' \"<a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/e2bf0c7914c8 title=\\\\\"Built from revision e2bf0c7914c8\\\\\">rev:e2bf0c7914c8</a>\"'],'1240135056.1240139978.352.gz' : ['id:20090419025736','<a href = \"http://hg.mozilla.org/mozilla-central/rev/907f2f562f44\">rev:907f2f562f44</a>',' cycle time: 00:57:11<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":60}]\\'>twinopen: 483.47</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":60}]\\'>tsspider: 85.34</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":60}]\\'>ts: 1145.05</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":2,\"branch\":1,\"machine\":60}]\\'>tp: 306.91</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":5,\"branch\":1,\"machine\":60}]\\'>tp_rss: 313.1MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":22,\"branch\":1,\"machine\":60}]\\'>tsvg: 4286.18</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":20,\"branch\":1,\"machine\":60}]\\'>tgfx: 2.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":60}]\\'>tdhtml: 911.24</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":60,\"testrun\":379836}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":60,\"testrun\":379837}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":60,\"testrun\":379838}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":2,\"branch\":1,\"machine\":60,\"testrun\":379839}]\\'>tp</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":5,\"branch\":1,\"machine\":60,\"testrun\":379841}]\\'>tp_rss</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":22,\"branch\":1,\"machine\":60,\"testrun\":379842}]\\'>tsvg</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":20,\"branch\":1,\"machine\":60,\"testrun\":379843}]\\'>tgfx</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":60,\"testrun\":379844}]\\'>tdhtml</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394892\">twinopen: 483.47</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394894\">tsspider: 85.34</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394897\">ts: 1145.05</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394900\">tp: 306.91</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394915\">tp_RSS: 313.1MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394921\">tsvg: 4286.18</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=394927\">tdhtml: 911.24</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625379\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625380\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625381\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625382\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625384\">tp_RSS</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625385\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625386\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625387\">tdhtml</a> ','</p>'],'1240144239.1240145765.21378.gz' : ['id:20090419053039','<a href = \"http://hg.mozilla.org/mozilla-central/rev/11f68e169ed4\">rev:11f68e169ed4</a>',' cycle time: 00:11:43<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":73}]\\'>twinopen: 109.29</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":18,\"branch\":1,\"machine\":73}]\\'>tdhtml: 846.59</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":73}]\\'>tsspider: 93.56</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":73}]\\'>ts: 654.21</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":11,\"branch\":1,\"machine\":73}]\\'>tp_fast: 136.97</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":13,\"branch\":1,\"machine\":73}]\\'>tp_fast_rss: 62.5MB</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":73,\"testrun\":380365}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":18,\"branch\":1,\"machine\":73,\"testrun\":380368}]\\'>tdhtml</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":73,\"testrun\":380369}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":73,\"testrun\":380370}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":11,\"branch\":1,\"machine\":73,\"testrun\":380371}]\\'>tp_fast</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":13,\"branch\":1,\"machine\":73,\"testrun\":380373}]\\'>tp_fast_rss</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911690\">twinopen: 109.29</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911688\">tdhtml: 846.59</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911686\">tsspider: 93.56</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911692\">ts: 654.21</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911694\">tp: 136.97</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=911698\">tp_RSS: 62.5MB</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625928\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625929\">tdhtml</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625930\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625932\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625934\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625936\">tp_RSS</a> ','</p>'],'1240127546.1240138798.31154.gz' : [' \"<a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/c319b49e2880 title=\\\\\"Built from revision c319b49e2880\\\\\">rev:c319b49e2880</a>\"'],'1240133109.1240140174.15758.gz' : ['id:20090419022509','<a href = \"http://hg.mozilla.org/mozilla-central/rev/c319b49e2880\">rev:c319b49e2880</a>',' cycle time: 00:20:51<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":74}]\\'>tsspider: 70.4</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":24,\"branch\":1,\"machine\":74}]\\'>tjss: 40.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":74}]\\'>ts: 460.53</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":74}]\\'>twinopen: 95.84</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":74,\"testrun\":379854}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":24,\"branch\":1,\"machine\":74,\"testrun\":379855}]\\'>tjss</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":74,\"testrun\":379856}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":74,\"testrun\":379857}]\\'>twinopen</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=2698579\">tsspider: 70.40</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=2698581\">tjss: 40.00</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=2698583\">ts: 460.53</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=2698585\">twinopen: 95.84</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625397\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625398\">tjss</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625399\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3625400\">twinopen</a> ','</p>'],'1240144192.1240146979.22943.gz' : [' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/11f68e169ed4 title=\"Built from revision 11f68e169ed4\">rev:11f68e169ed4</a>','<abbr title=\"refcnt Leaks\">RLk</abbr>:0B','<abbr title=\"Total Bytes malloc\\'ed and not free\\'d\">Lk</abbr>:885KB','<abbr title=\"Maximum Heap Size\">MH</abbr>:21.5MB','<abbr title=\"Allocations - number of calls to malloc and friends\">A</abbr>:667784'],'1240151392.1240153412.4465.gz' : [' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/11f68e169ed4 title=\"Built from revision 11f68e169ed4\">rev:11f68e169ed4</a>','<abbr title=\"refcnt Leaks\">RLk</abbr>:0B','<abbr title=\"Total Bytes malloc\\'ed and not free\\'d\">Lk</abbr>:886KB','<abbr title=\"Maximum Heap Size\">MH</abbr>:21.6MB','<abbr title=\"Allocations - number of calls to malloc and friends\">A</abbr>:668489'],'1240122875.1240129140.18257.gz' : ['id:20090418233435','<a href = \"http://hg.mozilla.org/mozilla-central/rev/e2bf0c7914c8\">rev:e2bf0c7914c8</a>',' cycle time: 00:20:49<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":25,\"branch\":1,\"machine\":74}]\\'>tsspider: 69.9</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":24,\"branch\":1,\"machine\":74}]\\'>tjss: 39.87</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":74}]\\'>ts: 462.84</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":74}]\\'>twinopen: 93.74</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":25,\"branch\":1,\"machine\":74,\"testrun\":378997}]\\'>tsspider</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":24,\"branch\":1,\"machine\":74,\"testrun\":378998}]\\'>tjss</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":74,\"testrun\":378999}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":74,\"testrun\":379000}]\\'>twinopen</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=2698579\">tsspider: 69.90</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=2698581\">tjss: 39.87</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=2698583\">ts: 462.84</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=2698585\">twinopen: 93.74</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624495\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624496\">tjss</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624497\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624498\">twinopen</a> ','</p>'],'1240127546.1240130209.19640.gz' : [' periodic clobber',' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/c319b49e2880 title=\"Built from revision c319b49e2880\">rev:c319b49e2880</a>','<abbr title=\"refcnt Leaks\">RLk</abbr>:0B','<abbr title=\"Total Bytes malloc\\'ed and not free\\'d\">Lk</abbr>:2.10MB','<abbr title=\"Maximum Heap Size\">MH</abbr>:23.4MB','<abbr title=\"Allocations - number of calls to malloc and friends\">A</abbr>:811379'],'1240136993.1240139505.32241.gz' : [' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/11f68e169ed4 title=\"Built from revision 11f68e169ed4\">rev:11f68e169ed4</a>','Z:16.3MB'],'1240127546.1240128248.17107.gz' : [' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/c319b49e2880 title=\"Built from revision c319b49e2880\">rev:c319b49e2880</a>'],'1240122875.1240134140.24359.gz' : ['id:20090418233435','<a href = \"http://hg.mozilla.org/mozilla-central/rev/e2bf0c7914c8\">rev:e2bf0c7914c8</a>',' cycle time: 01:20:50<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":70}]\\'>twinopen: 98.53</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":26,\"branch\":1,\"machine\":70}]\\'>tsspider_nochrome: 54.9</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":70}]\\'>ts: 585.74</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":1,\"branch\":1,\"machine\":70}]\\'>tp_nochrome: 369.03</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":10,\"branch\":1,\"machine\":70}]\\'>tp_memset_nochrome: 53.5MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":23,\"branch\":1,\"machine\":70}]\\'>tsvg_nochrome: 3738.5</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":21,\"branch\":1,\"machine\":70}]\\'>tgfx_nochrome: 17.0</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":19,\"branch\":1,\"machine\":70}]\\'>tdhtml_nochrome: 744.56</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":70,\"testrun\":379371}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":26,\"branch\":1,\"machine\":70,\"testrun\":379372}]\\'>tsspider_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":70,\"testrun\":379373}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":1,\"branch\":1,\"machine\":70,\"testrun\":379374}]\\'>tp_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":10,\"branch\":1,\"machine\":70,\"testrun\":379376}]\\'>tp_memset_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":23,\"branch\":1,\"machine\":70,\"testrun\":379377}]\\'>tsvg_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":21,\"branch\":1,\"machine\":70,\"testrun\":379378}]\\'>tgfx_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":19,\"branch\":1,\"machine\":70,\"testrun\":379379}]\\'>tdhtml_nochrome</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431842\">twinopen: 98.53</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431844\">tsspider: 54.90</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431846\">ts: 585.74</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431848\">tp: 369.03</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431880\">tp_memset: 53.5MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431885\">tsvg: 3738.50</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431889\">tgfx: 17.00</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431894\">tdhtml: 744.56</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624891\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624892\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624893\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624894\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624897\">tp_memset</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624898\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624899\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3624900\">tdhtml</a> ','</p>'],'1240135320.1240139467.32194.gz' : [' <a href=http://hg.mozilla.org/mozilla-central/index.cgi/rev/907f2f562f44 title=\"Built from revision 907f2f562f44\">rev:907f2f562f44</a>'],'1240134674.1240148662.25093.gz' : ['id:20090419025114','<a href = \"http://hg.mozilla.org/mozilla-central/rev/f9627950be8f\">rev:f9627950be8f</a>',' cycle time: 01:20:32<br>',' new graph links','<br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":17,\"branch\":1,\"machine\":70}]\\'>twinopen: 97.84</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":26,\"branch\":1,\"machine\":70}]\\'>tsspider_nochrome: 54.76</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":16,\"branch\":1,\"machine\":70}]\\'>ts: 587.68</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":1,\"branch\":1,\"machine\":70}]\\'>tp_nochrome: 359.33</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":10,\"branch\":1,\"machine\":70}]\\'>tp_memset_nochrome: 53.9MB</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":23,\"branch\":1,\"machine\":70}]\\'>tsvg_nochrome: 3746.95</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":21,\"branch\":1,\"machine\":70}]\\'>tgfx_nochrome: 17.5</a><br>','<a href=\\'http://graphs-new.mozilla.org/graph.html#tests=[{\"test\":19,\"branch\":1,\"machine\":70}]\\'>tdhtml_nochrome: 745.47</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":17,\"branch\":1,\"machine\":70,\"testrun\":380621}]\\'>twinopen</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":26,\"branch\":1,\"machine\":70,\"testrun\":380622}]\\'>tsspider_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":16,\"branch\":1,\"machine\":70,\"testrun\":380623}]\\'>ts</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":1,\"branch\":1,\"machine\":70,\"testrun\":380624}]\\'>tp_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":10,\"branch\":1,\"machine\":70,\"testrun\":380626}]\\'>tp_memset_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":23,\"branch\":1,\"machine\":70,\"testrun\":380627}]\\'>tsvg_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":21,\"branch\":1,\"machine\":70,\"testrun\":380628}]\\'>tgfx_nochrome</a> ',' <a href=\\'http://graphs-new.mozilla.org/graph.html#type=series&tests=[{\"test\":19,\"branch\":1,\"machine\":70,\"testrun\":380629}]\\'>tdhtml_nochrome</a> ','</p>',' graph links','<br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431842\">twinopen: 97.84</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431844\">tsspider: 54.76</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431846\">ts: 587.68</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431848\">tp: 359.33</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431880\">tp_memset: 53.9MB</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431885\">tsvg: 3746.95</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431889\">tgfx: 17.50</a><br>','<a href=\"http://graphs.mozilla.org/graph.html#show=1431894\">tdhtml: 745.47</a><br>','<p style=\"font-size:smaller;\">Details:<br>',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626203\">twinopen</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626204\">tsspider</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626205\">ts</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626206\">tp</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626209\">tp_memset</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626210\">tsvg</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626211\">tgfx</a> ',' <a href=\"http://graphs.mozilla.org/graph.html#type=series&show=3626212\">tdhtml</a> ','</p>'],'1240127486.1240147058.23043.gz' : ['<a href=http://hg.mozilla.org/mozilla-central/rev/c319b49e2880 title=\"Built from revision c319b49e2880\">rev:c319b49e2880</a>','<a href=\"http://office.smedbergs.us:8080/build?id=1323\">warn:22479</a>']},'mindate_time_count' : 234,'maxdate' : 1240157461,'build_table' : [[{'rowspan' : 22,'buildstatus' : 'null'},{'rowspan' : 16,'buildstatus' : 'null'},{'rowspan' : 115,'buildstatus' : 'null'},{'buildname' : 'Linux mozilla-central unit test','previousbuildtime' : 1240144192,'errorparser' : 'unittest','rowspan' : 27,'buildstatus' : 'building','binaryurl' : '','endtime' : '1240151392','td' : '','buildtime' : 1240151392,'logfile' : '1240151392.1240151393.1800.gz'},{'rowspan' : 18,'buildstatus' : 'null'},{'rowspan' : 9,'buildstatus' : 'null'},{'rowspan' : 7,'buildstatus' : 'null'},{'rowspan' : 41,'buildstatus' : 'null'},{'rowspan' : 23,'buildstatus' : 'null'},{'rowspan' : 58,'buildstatus' : 'null'},{'rowspan' : 20,'buildstatus' : 'null'},{'rowspan' : 8,'buildstatus' : 'null'},{'rowspan' : 4,'buildstatus' : 'null'},{'rowspan' : 101,'buildstatus' : 'null'},{'rowspan' : 36,'buildstatus' : 'null'},{'rowspan' : 2,'buildstatus' : 'null'},{'rowspan' : 69,'buildstatus' : 'null'},{'rowspan' : 38,'buildstatus' : 'null'},{'rowspan' : 5,'buildstatus' : 'null'},{'rowspan' : 23,'buildstatus' : 'null'},{'rowspan' : 24,'buildstatus' : 'null'},{'rowspan' : 107,'buildstatus' : 'null'},{'rowspan' : 68,'buildstatus' : 'null'},{'rowspan' : 1,'buildstatus' : 'null'},{'rowspan' : 10,'buildstatus' : 'null'},{'rowspan' : 32,'buildstatus' : 'null'},{'rowspan' : 52,'buildstatus' : 'null'},{'rowspan' : 6,'buildstatus' : 'null'},{'rowspan' : 12,'buildstatus' : 'null'},{'rowspan' : 29,'buildstatus' : 'null'},{'rowspan' : 19,'buildstatus' : 'null'},{'buildname' : 'WINNT 5.1 talos mozilla-central qm-pxp-trunk03','previousbuildtime' : 1240133109,'errorparser' : 'unix','rowspan' : 35,'buildstatus' : 'building','binaryurl' : '','endtime' : '1240148892','td' : '','buildtime' : 1240148892,'logfile' : '1240148892.1240153996.5078.gz'},{'buildname' : 'WINNT 5.2 mozilla-central build','previousbuildtime' : 1240144192,'errorparser' : 'unix','rowspan' : 27,'buildstatus' : 'building','binaryurl' : '','endtime' : '1240151392','td' : '','buildtime' : 1240151392,'logfile' : '1240151392.1240151396.1822.gz'},{'rowspan' : 12,'buildstatus' : 'null'},{'rowspan' : 82,'buildstatus' : 'null'},{'rowspan' : 3,'buildstatus' : 'null'},{'buildname' : 'WINNT 6.0 talos mozilla-central nochrome qm-pvista-trunk04','previousbuildtime' : 1240141596,'errorparser' : 'unix','rowspan' : 35,'buildstatus' : 'building','binaryurl' : '','endtime' : '1240148892','td' : '','buildtime' : 1240148892,'logfile' : '1240148892.1240153995.5075.gz'},{'buildname' : 'WINNT 6.0 talos mozilla-central qm-pvista-trunk01','previousbuildtime' : 1240139612,'errorparser' : 'unix','rowspan' : 35,'buildstatus' : 'building','binaryurl' : '','endtime' : '1240148892','td' : '','buildtime' : 1240148892,'logfile' : '1240148892.1240153994.5072.gz'},{'rowspan' : 21,'buildstatus' : 'null'},{'buildname' : 'static-analysis-bsmedberg','previousbuildtime' : 1240127486,'errorparser' : 'unix','rowspan' : 48,'buildstatus' : 'building','binaryurl' : '','endtime' : '1240147039','td' : '','buildtime' : 1240147039,'logfile' : '1240147039.1240147041.23025.gz'}],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'OS X 10.5.2 mozilla-central unit test','previousbuildtime' : 1240144192,'errorparser' : 'unittest','rowspan' : 26,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240157463,'td' : '','buildtime' : 1240151392,'logfile' : '1240151392.1240157428.11379.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'MacOSX Darwin 9.2.2 talos mozilla-central nochrome qm-pleopard-trunk04','previousbuildtime' : 1240144216,'errorparser' : 'unix','rowspan' : 24,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240157251,'td' : '','buildtime' : 1240151407,'logfile' : '1240151407.1240157188.10324.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'WINNT 5.2 mozilla-central unit test','previousbuildtime' : 1240144192,'errorparser' : 'unittest','rowspan' : 24,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240156931,'td' : '','buildtime' : 1240151392,'logfile' : '1240151392.1240156918.9302.gz'},-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'MacOSX Darwin 8.8.1 talos mozilla-central qm-pmac-trunk01','previousbuildtime' : 1240135758,'errorparser' : 'unix','rowspan' : 22,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240155543,'td' : '','buildtime' : 1240151407,'logfile' : '1240151407.1240155499.7154.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'MacOSX Darwin 9.2.2 talos mozilla-central qm-pleopard-trunk03','previousbuildtime' : 1240135758,'errorparser' : 'unix','rowspan' : 21,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240155481,'td' : '','buildtime' : 1240151407,'logfile' : '1240151407.1240155461.7094.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'WINNT 5.1 talos mozilla-central jss qm-pxp-jss03','errorparser' : 'unix','rowspan' : 29,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240155424,'td' : '','buildtime' : 1240148892,'logfile' : '1240148892.1240155418.7052.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,{'buildname' : 'Linux talos mozilla-central qm-plinux-trunk01','previousbuildtime' : 1240135775,'errorparser' : 'unix','rowspan' : 18,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240155422,'td' : '','buildtime' : 1240151517,'logfile' : '1240151517.1240155396.7038.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'MacOSX Darwin 8.8.1 talos mozilla-central nochrome qm-pmac-trunk10','previousbuildtime' : 1240144216,'errorparser' : 'unix','rowspan' : 18,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240155363,'td' : '','buildtime' : 1240151407,'logfile' : '1240151407.1240155357.6984.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,{'buildname' : 'Linux talos mozilla-central nochrome qm-plinux-trunk07','previousbuildtime' : 1240144239,'errorparser' : 'unix','rowspan' : 16,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240155241,'td' : '','buildtime' : 1240151517,'logfile' : '1240151517.1240155197.6659.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'WINNT 5.1 talos mozilla-central fast qm-pxp-fast03','previousbuildtime' : 1240141596,'errorparser' : 'unix','rowspan' : 25,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240155122,'td' : '','buildtime' : 1240148892,'logfile' : '1240148892.1240155074.6517.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'WINNT 5.1 talos mozilla-central nochrome qm-pxp-trunk07','previousbuildtime' : 1240141596,'errorparser' : 'unix','rowspan' : 23,'buildstatus' : 'testfailed','binaryurl' : '','endtime' : 1240154221,'td' : '','buildtime' : 1240148892,'logfile' : '1240148892.1240154173.5315.gz'},-1,-1,-1,-1,{'buildname' : 'WINNT 5.2 mozilla-central leak test build','previousbuildtime' : 1240144192,'errorparser' : 'unix','rowspan' : 15,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240154221,'td' : '','buildtime' : 1240151392,'logfile' : '1240151392.1240154175.5321.gz'},-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,{'buildname' : 'Linux mozilla-central leak test build','previousbuildtime' : 1240144192,'errorparser' : 'unix','rowspan' : 11,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240153442,'td' : '','buildtime' : 1240151392,'logfile' : '1240151392.1240153412.4465.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,{'buildname' : 'Linux talos mozilla-central fast qm-plinux-fast03','previousbuildtime' : 1240144239,'errorparser' : 'unix','rowspan' : 7,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240153085,'td' : '','buildtime' : 1240151517,'logfile' : '1240151517.1240153078.4061.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'WINNT 5.1 talos mozilla-central qm-pxp-trunk02','previousbuildtime' : 1240134674,'errorparser' : 'unix','rowspan' : 67,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240153021,'td' : '','buildtime' : 1240141596,'logfile' : '1240141596.1240152984.3997.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'MacOSX Darwin 8.8.1 talos mozilla-central fast qm-pmac-fast03','previousbuildtime' : 1240144216,'errorparser' : 'unix','rowspan' : 6,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240152902,'td' : '','buildtime' : 1240151407,'logfile' : '1240151407.1240152852.3811.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'WINNT 6.0 talos mozilla-central qm-pvista-trunk02','previousbuildtime' : 1240134674,'errorparser' : 'unix','rowspan' : 65,'buildstatus' : 'testfailed','binaryurl' : '','endtime' : 1240152426,'td' : '','buildtime' : 1240141596,'logfile' : '1240141596.1240152401.3215.gz'},-1],[{'buildname' : 'Linux mozilla-central build','previousbuildtime' : 1240144192,'errorparser' : 'unix','rowspan' : 5,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240152422,'td' : '','buildtime' : 1240151392,'logfile' : '1240151392.1240152372.3171.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'Linux x86-64 mozilla-central build','previousbuildtime' : 1240147301,'errorparser' : 'unix','rowspan' : 4,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240152090,'td' : '','buildtime' : 1240151392,'logfile' : '1240151392.1240152048.2698.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'OS X 10.5.2 mozilla-central build','previousbuildtime' : 1240144192,'errorparser' : 'unix','rowspan' : 4,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240152090,'td' : '','buildtime' : 1240151392,'logfile' : '1240151392.1240152047.2695.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'OS X 10.5.2 mozilla-central leak test build','previousbuildtime' : 1240144192,'errorparser' : 'unix','rowspan' : 3,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240151761,'td' : '','buildtime' : 1240151392,'logfile' : '1240151392.1240151703.2259.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,{'rowspan' : 31,'buildstatus' : 'null'},{'rowspan' : 19,'buildstatus' : 'null'},{'rowspan' : 66,'buildstatus' : 'null'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'rowspan' : 29,'buildstatus' : 'null'},{'rowspan' : 4,'buildstatus' : 'null'},{'rowspan' : 52,'buildstatus' : 'null'},-1,-1,{'buildname' : 'MacOSX Darwin 9.2.2 talos mozilla-central nochrome qm-pleopard-trunk04','previousbuildtime' : 1240137051,'errorparser' : 'unix','rowspan' : 45,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240153154,'td' : '','buildtime' : 1240144216,'logfile' : '1240144216.1240153096.4112.gz'},-1,-1,{'rowspan' : 53,'buildstatus' : 'null'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[{'rowspan' : 38,'buildstatus' : 'null'},{'rowspan' : 22,'buildstatus' : 'null'},-1,{'buildname' : 'Linux mozilla-central unit test','previousbuildtime' : 1240136993,'errorparser' : 'unittest','rowspan' : 45,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240153563,'td' : '','buildtime' : 1240144192,'logfile' : '1240144192.1240153557.4643.gz'},-1,-1,-1,-1,{'rowspan' : 15,'buildstatus' : 'null'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'rowspan' : 36,'buildstatus' : 'null'},{'rowspan' : 23,'buildstatus' : 'null'},-1,-1,{'rowspan' : 12,'buildstatus' : 'null'},-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'WINNT 5.2 mozilla-central build','previousbuildtime' : 1240136993,'errorparser' : 'unix','rowspan' : 45,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240154043,'td' : '','buildtime' : 1240144192,'logfile' : '1240144192.1240154008.5093.gz'},{'rowspan' : 4,'buildstatus' : 'null'},-1,{'buildname' : 'WINNT 5.2 mozilla-central unit test','previousbuildtime' : 1240136993,'errorparser' : 'unittest','rowspan' : 45,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240155008,'td' : '','buildtime' : 1240144192,'logfile' : '1240144192.1240154979.6403.gz'},-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'WINNT 5.1 talos mozilla-central qm-pxp-trunk01','previousbuildtime' : 1240116360,'errorparser' : 'unix','rowspan' : 76,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240150142,'td' : '','buildtime' : 1240139612,'logfile' : '1240139612.1240150099.29709.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'MacOSX Darwin 8.8.1 talos mozilla-central nochrome qm-pmac-trunk10','previousbuildtime' : 1240137051,'errorparser' : 'unix','rowspan' : 41,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240149973,'td' : '','buildtime' : 1240144216,'logfile' : '1240144216.1240149938.28658.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'WINNT 5.2 mozilla-central leak test build','previousbuildtime' : 1240136993,'errorparser' : 'unix','rowspan' : 41,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240149969,'td' : '','buildtime' : 1240144192,'logfile' : '1240144192.1240149921.28542.gz'},-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'WINNT 5.1 talos mozilla-central jss qm-pxp-jss01','previousbuildtime' : 1240134674,'errorparser' : 'unix','rowspan' : 54,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240149367,'td' : '','buildtime' : 1240141596,'logfile' : '1240141596.1240149325.25872.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'WINNT 5.1 talos mozilla-central fast qm-pxp-fast03','previousbuildtime' : 1240139612,'errorparser' : 'unix','rowspan' : 51,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240149062,'td' : '','buildtime' : 1240141596,'logfile' : '1240141596.1240149012.25526.gz'},-1,-1,{'rowspan' : 208,'buildstatus' : 'null'},{'rowspan' : 5,'buildstatus' : 'null'},-1,-1,{'rowspan' : 38,'buildstatus' : 'null'},-1,-1,-1,-1,{'buildname' : 'WINNT 6.0 talos mozilla-central nochrome qm-pvista-trunk04','previousbuildtime' : 1240134674,'errorparser' : 'unix','rowspan' : 51,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240153681,'td' : '','buildtime' : 1240141596,'logfile' : '1240141596.1240153672.4751.gz'},{'buildname' : 'WINNT 6.0 talos mozilla-central qm-pvista-trunk01','previousbuildtime' : 1240133109,'errorparser' : 'unix','rowspan' : 70,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240150143,'td' : '','buildtime' : 1240139612,'logfile' : '1240139612.1240150101.29745.gz'},-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'MacOSX Darwin 8.8.1 talos mozilla-central qm-pmac-trunk03','previousbuildtime' : 1240137051,'errorparser' : 'unix','rowspan' : 35,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240148705,'td' : '','buildtime' : 1240144216,'logfile' : '1240144216.1240148676.25114.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'MacOSX Darwin 9.2.2 talos mozilla-central qm-pleopard-trunk02','previousbuildtime' : 1240127582,'errorparser' : 'unix','rowspan' : 33,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240148642,'td' : '','buildtime' : 1240144216,'logfile' : '1240144216.1240148608.25029.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'OS X 10.5.2 mozilla-central unit test','previousbuildtime' : 1240138174,'errorparser' : 'unittest','rowspan' : 33,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240148404,'td' : '','buildtime' : 1240144192,'logfile' : '1240144192.1240148394.24641.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'WINNT 5.1 talos mozilla-central nochrome qm-pxp-trunk07','previousbuildtime' : 1240139612,'errorparser' : 'unix','rowspan' : 46,'buildstatus' : 'testfailed','binaryurl' : '','endtime' : 1240148161,'td' : '','buildtime' : 1240141596,'logfile' : '1240141596.1240148109.24348.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'Linux talos mozilla-central qm-plinux-trunk03','previousbuildtime' : 1240137185,'errorparser' : 'unix','rowspan' : 29,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240148103,'td' : '','buildtime' : 1240144239,'logfile' : '1240144239.1240148083.24284.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'Linux x86-64 mozilla-central build','previousbuildtime' : 1240145615,'errorparser' : 'unix','rowspan' : 4,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240148042,'td' : '','buildtime' : 1240147301,'logfile' : '1240147301.1240148020.24189.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,{'buildname' : 'Linux talos mozilla-central nochrome qm-plinux-trunk07','previousbuildtime' : 1240137185,'errorparser' : 'unix','rowspan' : 26,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240147921,'td' : '','buildtime' : 1240144239,'logfile' : '1240144239.1240147879.24057.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,{'rowspan' : 7,'buildstatus' : 'null'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'static-analysis-bsmedberg','errorparser' : 'unix','rowspan' : 138,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240147082,'td' : '','buildtime' : 1240127486,'logfile' : '1240127486.1240147058.23043.gz'}],[-1,{'buildname' : 'Linux mozilla-central leak test build','previousbuildtime' : 1240136995,'errorparser' : 'unix','rowspan' : 23,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240147022,'td' : '','buildtime' : 1240144192,'logfile' : '1240144192.1240146979.22943.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'OS X 10.5.2 mozilla-central leak test build','previousbuildtime' : 1240138647,'errorparser' : 'unix','rowspan' : 22,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240146903,'td' : '','buildtime' : 1240144192,'logfile' : '1240144192.1240146860.22758.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'WINNT 5.1 talos mozilla-central jss qm-pxp-jss02','errorparser' : 'unix','rowspan' : 53,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240146542,'td' : '','buildtime' : 1240139612,'logfile' : '1240139612.1240146496.22288.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'Linux x86-64 mozilla-central build','previousbuildtime' : 1240135019,'errorparser' : 'unix','rowspan' : 6,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240146422,'td' : '','buildtime' : 1240145615,'logfile' : '1240145615.1240146410.22185.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'MacOSX Darwin 8.8.1 talos mozilla-central fast qm-pmac-fast03','previousbuildtime' : 1240137051,'errorparser' : 'unix','rowspan' : 16,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240146072,'td' : '','buildtime' : 1240144216,'logfile' : '1240144216.1240146033.21660.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,{'buildname' : 'Linux talos mozilla-central fast qm-plinux-fast03','previousbuildtime' : 1240137185,'errorparser' : 'unix','rowspan' : 14,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240145821,'td' : '','buildtime' : 1240144239,'logfile' : '1240144239.1240145765.21378.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'Linux x86-64 mozilla-central nightly','errorparser' : 'unix','rowspan' : 22,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240145644,'td' : '','buildtime' : 1240142843,'logfile' : '1240142843.1240145625.21152.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,{'rowspan' : 67,'buildstatus' : 'null'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'OS X 10.5.2 mozilla-central build','previousbuildtime' : 1240136993,'errorparser' : 'unix','rowspan' : 9,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240145276,'td' : '','buildtime' : 1240144192,'logfile' : '1240144192.1240145217.20459.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[{'buildname' : 'Linux mozilla-central build','previousbuildtime' : 1240136993,'errorparser' : 'unix','rowspan' : 7,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240145042,'td' : '','buildtime' : 1240144192,'logfile' : '1240144192.1240145026.20190.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'OS X 10.5.2 mozilla-central shark','errorparser' : 'unix','rowspan' : 65,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240144685,'td' : '','buildtime' : 1240135320,'logfile' : '1240135320.1240144637.19382.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'MacOSX Darwin 9.2.2 talos mozilla-central qm-pleopard-trunk01','previousbuildtime' : 1240135056,'errorparser' : 'unix','rowspan' : 50,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240144682,'td' : '','buildtime' : 1240137051,'logfile' : '1240137051.1240144623.19355.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,{'rowspan' : 27,'buildstatus' : 'null'},{'rowspan' : 8,'buildstatus' : 'null'},-1,{'rowspan' : 6,'buildstatus' : 'null'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'rowspan' : 10,'buildstatus' : 'null'},{'buildname' : 'MacOSX Darwin 8.8.1 talos mozilla-central nochrome qm-pmac-trunk10','previousbuildtime' : 1240135758,'errorparser' : 'unix','rowspan' : 48,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240146603,'td' : '','buildtime' : 1240137051,'logfile' : '1240137051.1240146570.22408.gz'},-1,-1,{'buildname' : 'MacOSX Darwin 8.8.1 talos mozilla-central qm-pmac-trunk03','previousbuildtime' : 1240114000,'errorparser' : 'unix','rowspan' : 48,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240144693,'td' : '','buildtime' : 1240137051,'logfile' : '1240137051.1240144671.19409.gz'},{'buildname' : 'MacOSX Darwin 9.2.2 talos mozilla-central nochrome qm-pleopard-trunk04','previousbuildtime' : 1240135758,'errorparser' : 'unix','rowspan' : 48,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240149089,'td' : '','buildtime' : 1240137051,'logfile' : '1240137051.1240149018.25540.gz'},-1,{'rowspan' : 84,'buildstatus' : 'null'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[{'rowspan' : 34,'buildstatus' : 'null'},{'buildname' : 'Linux mozilla-central leak test build','previousbuildtime' : 1240135019,'errorparser' : 'unix','rowspan' : 49,'buildstatus' : 'building','binaryurl' : '','endtime' : '1240136995','td' : '','buildtime' : 1240136995,'logfile' : '1240136995.1240136996.28843.gz'},-1,{'buildname' : 'Linux mozilla-central unit test','previousbuildtime' : 1240135019,'errorparser' : 'unittest','rowspan' : 50,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240145461,'td' : '','buildtime' : 1240136993,'logfile' : '1240136993.1240145409.20736.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'rowspan' : 18,'buildstatus' : 'null'},{'rowspan' : 37,'buildstatus' : 'null'},-1,-1,{'rowspan' : 13,'buildstatus' : 'null'},-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'WINNT 5.2 mozilla-central build','previousbuildtime' : 1240135019,'errorparser' : 'unix','rowspan' : 50,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240145244,'td' : '','buildtime' : 1240136993,'logfile' : '1240136993.1240145173.20415.gz'},{'rowspan' : 17,'buildstatus' : 'null'},-1,{'buildname' : 'WINNT 5.2 mozilla-central unit test','previousbuildtime' : 1240135019,'errorparser' : 'unittest','rowspan' : 50,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240147809,'td' : '','buildtime' : 1240136993,'logfile' : '1240136993.1240147758.23930.gz'},-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'WINNT 5.1 talos mozilla-central qm-pxp-trunk03','previousbuildtime' : 1240122875,'errorparser' : 'unix','rowspan' : 74,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240143815,'td' : '','buildtime' : 1240133109,'logfile' : '1240133109.1240143777.18361.gz'},-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'Linux talos mozilla-central qm-plinux-trunk03','previousbuildtime' : 1240135059,'errorparser' : 'unix','rowspan' : 42,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240143361,'td' : '','buildtime' : 1240137185,'logfile' : '1240137185.1240143302.17604.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,{'buildname' : 'Linux talos mozilla-central nochrome qm-plinux-trunk07','previousbuildtime' : 1240135059,'errorparser' : 'unix','rowspan' : 40,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240142886,'td' : '','buildtime' : 1240137185,'logfile' : '1240137185.1240142855.17065.gz'},-1,-1,-1,-1,-1,-1,{'buildname' : 'MacOSX Darwin 8.8.1 talos mozilla-central qm-pmac-trunk01','previousbuildtime' : 1240129514,'errorparser' : 'unix','rowspan' : 51,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240142886,'td' : '','buildtime' : 1240135758,'logfile' : '1240135758.1240142880.17080.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'MacOSX Darwin 9.2.2 talos mozilla-central qm-pleopard-trunk03','previousbuildtime' : 1240129514,'errorparser' : 'unix','rowspan' : 50,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240142850,'td' : '','buildtime' : 1240135758,'logfile' : '1240135758.1240142805.17018.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,{'rowspan' : 163,'buildstatus' : 'null'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'MacOSX Darwin 8.8.1 talos mozilla-central fast qm-pmac-fast03','previousbuildtime' : 1240135758,'errorparser' : 'unix','rowspan' : 38,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240142043,'td' : '','buildtime' : 1240137051,'logfile' : '1240137051.1240142027.14703.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'WINNT 5.2 mozilla-central nightly','errorparser' : 'unix','rowspan' : 51,'buildstatus' : 'busted','binaryurl' : '','endtime' : 1240141937,'td' : '','buildtime' : 1240135320,'logfile' : '1240135320.1240141918.14560.gz'},-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'OS X 10.5.2 mozilla-central unit test','previousbuildtime' : 1240135019,'errorparser' : 'unittest','rowspan' : 29,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240141804,'td' : '','buildtime' : 1240138174,'logfile' : '1240138174.1240141779.14339.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'WINNT 5.1 talos mozilla-central fast qm-pxp-fast03','previousbuildtime' : 1240134674,'errorparser' : 'unix','rowspan' : 19,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240146301,'td' : '','buildtime' : 1240139612,'logfile' : '1240139612.1240146244.21940.gz'},{'buildname' : 'WINNT 5.1 talos mozilla-central jss qm-pxp-jss01','previousbuildtime' : 1240133109,'errorparser' : 'unix','rowspan' : 54,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240141922,'td' : '','buildtime' : 1240134674,'logfile' : '1240134674.1240141862.14492.gz'},-1,-1,{'buildname' : 'WINNT 5.1 talos mozilla-central nochrome qm-pxp-trunk07','previousbuildtime' : 1240134674,'errorparser' : 'unix','rowspan' : 19,'buildstatus' : 'testfailed','binaryurl' : '','endtime' : 1240145402,'td' : '','buildtime' : 1240139612,'logfile' : '1240139612.1240145348.20638.gz'},-1,{'buildname' : 'WINNT 5.1 talos mozilla-central qm-pxp-trunk02','errorparser' : 'unix','rowspan' : 54,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240145527,'td' : '','buildtime' : 1240134674,'logfile' : '1240134674.1240145517.20886.gz'},-1,-1,-1,-1,-1,{'buildname' : 'WINNT 6.0 talos mozilla-central nochrome qm-pvista-trunk04','previousbuildtime' : 1240133109,'errorparser' : 'unix','rowspan' : 54,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240148704,'td' : '','buildtime' : 1240134674,'logfile' : '1240134674.1240148662.25093.gz'},-1,{'buildname' : 'WINNT 6.0 talos mozilla-central qm-pvista-trunk02','previousbuildtime' : 1240113394,'errorparser' : 'unix','rowspan' : 54,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240145648,'td' : '','buildtime' : 1240134674,'logfile' : '1240134674.1240145627.21158.gz'},-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'WINNT 5.2 mozilla-central leak test build','previousbuildtime' : 1240135019,'errorparser' : 'unix','rowspan' : 33,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240141382,'td' : '','buildtime' : 1240136993,'logfile' : '1240136993.1240141370.13427.gz'},-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'OS X 10.5.2 mozilla-central build','previousbuildtime' : 1240135019,'errorparser' : 'unix','rowspan' : 32,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240141262,'td' : '','buildtime' : 1240136993,'logfile' : '1240136993.1240141221.13279.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,{'buildname' : 'Linux talos mozilla-central qm-plinux-trunk01','previousbuildtime' : 1240127721,'errorparser' : 'unix','rowspan' : 37,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240141081,'td' : '','buildtime' : 1240135775,'logfile' : '1240135775.1240141028.13019.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,{'buildname' : 'Linux talos mozilla-central fast qm-plinux-fast03','previousbuildtime' : 1240135775,'errorparser' : 'unix','rowspan' : 21,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240140301,'td' : '','buildtime' : 1240137185,'logfile' : '1240137185.1240140255.3879.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'MacOSX Darwin 8.8.1 talos mozilla-central qm-pmac-trunk02','previousbuildtime' : 1240127582,'errorparser' : 'unix','rowspan' : 35,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240140004,'td' : '','buildtime' : 1240135056,'logfile' : '1240135056.1240139978.352.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'WINNT 5.1 talos mozilla-central fast qm-pxp-fast03','previousbuildtime' : 1240133109,'errorparser' : 'unix','rowspan' : 35,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240141563,'td' : '','buildtime' : 1240134674,'logfile' : '1240134674.1240141546.13647.gz'},-1,{'rowspan' : 138,'buildstatus' : 'null'},-1,{'hasnote' : 1,'buildname' : 'WINNT 5.1 talos mozilla-central nochrome qm-pxp-trunk07','previousbuildtime' : 1240133109,'errorparser' : 'unix','noteid' : '8','rowspan' : 35,'buildstatus' : 'testfailed','binaryurl' : '','endtime' : 1240140664,'td' : '','buildtime' : 1240134674,'logfile' : '1240134674.1240140641.12602.gz'},{'rowspan' : 83,'buildstatus' : 'null'},-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'WINNT 6.0 talos mozilla-central qm-pvista-trunk01','previousbuildtime' : 1240122875,'errorparser' : 'unix','rowspan' : 42,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240143721,'td' : '','buildtime' : 1240133109,'logfile' : '1240133109.1240143709.18266.gz'},-1,-1],[{'buildname' : 'Linux mozilla-central build','previousbuildtime' : 1240135019,'errorparser' : 'unix','rowspan' : 16,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240139527,'td' : '','buildtime' : 1240136993,'logfile' : '1240136993.1240139505.32241.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'OS X 10.5.2 mozilla-central nightly','errorparser' : 'unix','rowspan' : 26,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240139521,'td' : '','buildtime' : 1240135320,'logfile' : '1240135320.1240139467.32194.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'OS X 10.5.2 mozilla-central leak test build','previousbuildtime' : 1240135019,'errorparser' : 'unix','rowspan' : 4,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240138989,'td' : '','buildtime' : 1240138647,'logfile' : '1240138647.1240138972.31577.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'rowspan' : 18,'buildstatus' : 'null'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'OS X 10.5.2 mozilla-central unit test','previousbuildtime' : 1240129495,'errorparser' : 'unittest','rowspan' : 23,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240139402,'td' : '','buildtime' : 1240135019,'logfile' : '1240135019.1240139399.32095.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,{'buildname' : 'Linux mozilla-central nightly','errorparser' : 'unix','rowspan' : 17,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240138147,'td' : '','buildtime' : 1240135321,'logfile' : '1240135321.1240138111.30215.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,{'buildname' : 'Linux talos mozilla-central fast qm-plinux-fast03','previousbuildtime' : 1240135059,'errorparser' : 'unix','rowspan' : 10,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240138756,'td' : '','buildtime' : 1240135775,'logfile' : '1240135775.1240138731.31045.gz'},{'buildname' : 'Linux talos mozilla-central nochrome qm-plinux-trunk07','previousbuildtime' : 1240129866,'errorparser' : 'unix','rowspan' : 17,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240139882,'td' : '','buildtime' : 1240135059,'logfile' : '1240135059.1240139840.32682.gz'},-1,{'buildname' : 'Linux talos mozilla-central qm-plinux-trunk03','previousbuildtime' : 1240129866,'errorparser' : 'unix','rowspan' : 17,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240140122,'td' : '','buildtime' : 1240135059,'logfile' : '1240135059.1240140069.488.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'MacOSX Darwin 8.8.1 talos mozilla-central fast qm-pmac-fast03','previousbuildtime' : 1240135056,'errorparser' : 'unix','rowspan' : 10,'buildstatus' : 'success',\n\
+'binaryurl' : '','endtime' : 1240140242,'td' : '','buildtime' : 1240135758,'logfile' : '1240135758.1240140227.32576.gz'},{'buildname' : 'MacOSX Darwin 8.8.1 talos mozilla-central nochrome qm-pmac-trunk10','previousbuildtime' : 1240135056,'errorparser' : 'unix','rowspan' : 10,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240143241,'td' : '','buildtime' : 1240135758,'logfile' : '1240135758.1240143191.17464.gz'},-1,-1,{'rowspan' : 106,'buildstatus' : 'null'},{'buildname' : 'MacOSX Darwin 9.2.2 talos mozilla-central nochrome qm-pleopard-trunk04','previousbuildtime' : 1240135056,'errorparser' : 'unix','rowspan' : 10,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240144981,'td' : '','buildtime' : 1240135758,'logfile' : '1240135758.1240144935.20094.gz'},{'buildname' : 'MacOSX Darwin 9.2.2 talos mozilla-central qm-pleopard-trunk01','errorparser' : 'unix','rowspan' : 17,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240139951,'td' : '','buildtime' : 1240135056,'logfile' : '1240135056.1240139911.32752.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,{'rowspan' : 3,'buildstatus' : 'null'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[{'buildname' : 'Linux mozilla-central build','previousbuildtime' : 1240129495,'errorparser' : 'unix','rowspan' : 15,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240137007,'td' : '','buildtime' : 1240135019,'logfile' : '1240135019.1240136989.28814.gz'},-1,-1,{'buildname' : 'Linux mozilla-central unit test','previousbuildtime' : 1240129497,'errorparser' : 'unittest','rowspan' : 15,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240140482,'td' : '','buildtime' : 1240135019,'logfile' : '1240135019.1240140438.12379.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'rowspan' : 3,'buildstatus' : 'null'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'WINNT 5.2 mozilla-central build','previousbuildtime' : 1240129496,'errorparser' : 'unix','rowspan' : 15,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240147983,'td' : '','buildtime' : 1240135019,'logfile' : '1240135019.1240147949.24128.gz'},{'buildname' : 'WINNT 5.2 mozilla-central leak test build','previousbuildtime' : 1240129495,'errorparser' : 'unix','rowspan' : 15,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240141021,'td' : '','buildtime' : 1240135019,'logfile' : '1240135019.1240140992.12981.gz'},-1,{'buildname' : 'WINNT 5.2 mozilla-central unit test','previousbuildtime' : 1240129495,'errorparser' : 'unittest','rowspan' : 15,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240141442,'td' : '','buildtime' : 1240135019,'logfile' : '1240135019.1240141409.13474.gz'},-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,{'buildname' : 'Linux mozilla-central leak test build','previousbuildtime' : 1240129495,'errorparser' : 'unix','rowspan' : 13,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240136762,'td' : '','buildtime' : 1240135019,'logfile' : '1240135019.1240136706.28488.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'OS X 10.5.2 mozilla-central build','previousbuildtime' : 1240129495,'errorparser' : 'unix','rowspan' : 12,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240136523,'td' : '','buildtime' : 1240135019,'logfile' : '1240135019.1240136496.28127.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'Linux x86-64 mozilla-central build','previousbuildtime' : 1240129495,'errorparser' : 'unix','rowspan' : 11,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240135867,'td' : '','buildtime' : 1240135019,'logfile' : '1240135019.1240135805.27166.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,{'buildname' : 'Linux talos mozilla-central fast qm-plinux-fast03','previousbuildtime' : 1240129866,'errorparser' : 'unix','rowspan' : 7,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240137781,'td' : '','buildtime' : 1240135059,'logfile' : '1240135059.1240137728.29805.gz'},-1,{'rowspan' : 20,'buildstatus' : 'null'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'MacOSX Darwin 8.8.1 talos mozilla-central fast qm-pmac-fast03','previousbuildtime' : 1240129514,'errorparser' : 'unix','rowspan' : 7,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240137362,'td' : '','buildtime' : 1240135056,'logfile' : '1240135056.1240137310.29338.gz'},{'buildname' : 'MacOSX Darwin 8.8.1 talos mozilla-central nochrome qm-pmac-trunk10','previousbuildtime' : 1240129514,'errorparser' : 'unix','rowspan' : 7,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240139881,'td' : '','buildtime' : 1240135056,'logfile' : '1240135056.1240139823.32650.gz'},{'rowspan' : 14,'buildstatus' : 'null'},-1,-1,{'buildname' : 'MacOSX Darwin 9.2.2 talos mozilla-central nochrome qm-pleopard-trunk04','previousbuildtime' : 1240129514,'errorparser' : 'unix','rowspan' : 7,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240140902,'td' : '','buildtime' : 1240135056,'logfile' : '1240135056.1240140868.12842.gz'},-1,-1,{'rowspan' : 15,'buildstatus' : 'null'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'OS X 10.5.2 mozilla-central leak test build','previousbuildtime' : 1240129495,'errorparser' : 'unix','rowspan' : 6,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240135562,'td' : '','buildtime' : 1240135019,'logfile' : '1240135019.1240135503.26799.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,{'rowspan' : 111,'buildstatus' : 'null'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'rowspan' : 110,'buildstatus' : 'null'},{'rowspan' : 110,'buildstatus' : 'null'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'rowspan' : 110,'buildstatus' : 'null'},-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,{'rowspan' : 10,'buildstatus' : 'null'},{'buildname' : 'Linux talos mozilla-central nochrome qm-plinux-trunk07','previousbuildtime' : 1240127721,'errorparser' : 'unix','rowspan' : 33,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240135683,'td' : '','buildtime' : 1240129866,'logfile' : '1240129866.1240135671.26946.gz'},-1,{'buildname' : 'Linux talos mozilla-central qm-plinux-trunk03','previousbuildtime' : 1240121330,'errorparser' : 'unix','rowspan' : 33,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240135804,'td' : '','buildtime' : 1240129866,'logfile' : '1240129866.1240135738.27047.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'rowspan' : 24,'buildstatus' : 'null'},{'buildname' : 'MacOSX Darwin 8.8.1 talos mozilla-central nochrome qm-pmac-trunk10','previousbuildtime' : 1240127582,'errorparser' : 'unix','rowspan' : 33,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240135264,'td' : '','buildtime' : 1240129514,'logfile' : '1240129514.1240135237.26429.gz'},-1,{'rowspan' : 18,'buildstatus' : 'null'},-1,{'buildname' : 'MacOSX Darwin 9.2.2 talos mozilla-central nochrome qm-pleopard-trunk04','previousbuildtime' : 1240127582,'errorparser' : 'unix','rowspan' : 33,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240136821,'td' : '','buildtime' : 1240129514,'logfile' : '1240129514.1240136773.28567.gz'},{'rowspan' : 107,'buildstatus' : 'null'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],\n\
+[{'rowspan' : 14,'buildstatus' : 'null'},{'rowspan' : 24,'buildstatus' : 'null'},-1,{'hasnote' : 1,'buildname' : 'Linux mozilla-central unit test','previousbuildtime' : 1240127546,'errorparser' : 'unittest','noteid' : '7','rowspan' : 33,'buildstatus' : 'testfailed','binaryurl' : '','endtime' : 1240138741,'td' : '','buildtime' : 1240129497,'logfile' : '1240129497.1240138695.30986.gz'},-1,-1,-1,-1,{'rowspan' : 26,'buildstatus' : 'null'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'rowspan' : 29,'buildstatus' : 'null'},{'rowspan' : 20,'buildstatus' : 'null'},-1,-1,{'rowspan' : 1,'buildstatus' : 'null'},-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'WINNT 5.2 mozilla-central build','previousbuildtime' : 1240127546,'errorparser' : 'unix','rowspan' : 34,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240140490,'td' : '','buildtime' : 1240129496,'logfile' : '1240129496.1240140476.12434.gz'},{'rowspan' : 21,'buildstatus' : 'null'},-1,{'hasnote' : 1,'buildname' : 'WINNT 5.2 mozilla-central unit test','previousbuildtime' : 1240127546,'errorparser' : 'unittest','noteid' : '5','rowspan' : 35,'buildstatus' : 'testfailed','binaryurl' : '','endtime' : 1240141868,'td' : '','buildtime' : 1240129495,'logfile' : '1240129495.1240141814.14418.gz'},-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'hasnote' : 1,'buildname' : 'OS X 10.5.2 mozilla-central unit test','previousbuildtime' : 1240127546,'errorparser' : 'unittest','noteid' : '6','rowspan' : 34,'buildstatus' : 'testfailed','binaryurl' : '','endtime' : 1240134867,'td' : '','buildtime' : 1240129495,'logfile' : '1240129495.1240134802.25455.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'WINNT 5.1 talos mozilla-central fast qm-pxp-fast03','previousbuildtime' : 1240122875,'errorparser' : 'unix','rowspan' : 7,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240139882,'td' : '','buildtime' : 1240133109,'logfile' : '1240133109.1240139861.32695.gz'},{'buildname' : 'WINNT 5.1 talos mozilla-central jss qm-pxp-jss01','previousbuildtime' : 1240122875,'errorparser' : 'unix','rowspan' : 7,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240140185,'td' : '','buildtime' : 1240133109,'logfile' : '1240133109.1240140174.15758.gz'},-1,-1,{'hasnote' : 1,'buildname' : 'WINNT 5.1 talos mozilla-central nochrome qm-pxp-trunk07','previousbuildtime' : 1240122875,'errorparser' : 'unix','noteid' : '9','rowspan' : 7,'buildstatus' : 'testfailed','binaryurl' : '','endtime' : 1240138989,'td' : '','buildtime' : 1240133109,'logfile' : '1240133109.1240138972.31575.gz'},-1,{'rowspan' : 103,'buildstatus' : 'null'},-1,-1,-1,-1,-1,{'buildname' : 'WINNT 6.0 talos mozilla-central nochrome qm-pvista-trunk04','previousbuildtime' : 1240122875,'errorparser' : 'unix','rowspan' : 7,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240143663,'td' : '','buildtime' : 1240133109,'logfile' : '1240133109.1240143649.18200.gz'},-1,{'rowspan' : 58,'buildstatus' : 'null'},-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'MacOSX Darwin 8.8.1 talos mozilla-central qm-pmac-trunk01','previousbuildtime' : 1240121209,'errorparser' : 'unix','rowspan' : 26,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240133651,'td' : '','buildtime' : 1240129514,'logfile' : '1240129514.1240133634.23667.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'MacOSX Darwin 9.2.2 talos mozilla-central qm-pleopard-trunk03','previousbuildtime' : 1240114000,'errorparser' : 'unix','rowspan' : 25,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240133642,'td' : '','buildtime' : 1240129514,'logfile' : '1240129514.1240133598.23646.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,{'buildname' : 'Linux talos mozilla-central fast qm-plinux-fast03','previousbuildtime' : 1240127721,'errorparser' : 'unix','rowspan' : 23,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240133463,'td' : '','buildtime' : 1240129866,'logfile' : '1240129866.1240133424.23489.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'rowspan' : 29,'buildstatus' : 'null'},{'rowspan' : 28,'buildstatus' : 'null'},-1,-1,{'rowspan' : 32,'buildstatus' : 'null'},-1,-1,{'rowspan' : 2,'buildstatus' : 'null'},-1,-1,-1,-1,{'buildname' : 'WINNT 6.0 talos mozilla-central nochrome qm-pvista-trunk04','previousbuildtime' : 1240116360,'errorparser' : 'unix','rowspan' : 57,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240134182,'td' : '','buildtime' : 1240122875,'logfile' : '1240122875.1240134140.24359.gz'},{'rowspan' : 3,'buildstatus' : 'null'},-1,-1],[-1,-1,-1,-1,-1,-1,{'buildname' : 'Linux talos mozilla-central qm-plinux-trunk01','previousbuildtime' : 1240107064,'errorparser' : 'unix','rowspan' : 33,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240132923,'td' : '','buildtime' : 1240127721,'logfile' : '1240127721.1240132895.22956.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'WINNT 5.1 talos mozilla-central qm-pxp-trunk03','previousbuildtime' : 1240113394,'errorparser' : 'unix','rowspan' : 55,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240132801,'td' : '','buildtime' : 1240122875,'logfile' : '1240122875.1240132747.22776.gz'},-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'WINNT 6.0 talos mozilla-central qm-pvista-trunk01','previousbuildtime' : 1240116360,'errorparser' : 'unix','rowspan' : 54,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240132745,'td' : '','buildtime' : 1240122875,'logfile' : '1240122875.1240132710.22740.gz'},-1,-1],[{'buildname' : 'Linux mozilla-central build','previousbuildtime' : 1240127546,'errorparser' : 'unix','rowspan' : 21,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240132742,'td' : '','buildtime' : 1240129495,'logfile' : '1240129495.1240132690.22724.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'MacOSX Darwin 8.8.1 talos mozilla-central qm-pmac-trunk02','errorparser' : 'unix','rowspan' : 29,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240132085,'td' : '','buildtime' : 1240127582,'logfile' : '1240127582.1240132054.22000.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'MacOSX Darwin 9.2.2 talos mozilla-central qm-pleopard-trunk02','previousbuildtime' : 1240121209,'errorparser' : 'unix','rowspan' : 28,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240132025,'td' : '','buildtime' : 1240127582,'logfile' : '1240127582.1240132007.21937.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'OS X 10.5.2 mozilla-central leak test build','previousbuildtime' : 1240127546,'errorparser' : 'unix','rowspan' : 15,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240131868,'td' : '','buildtime' : 1240129495,'logfile' : '1240129495.1240131826.21637.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'WINNT 5.2 mozilla-central leak test build','previousbuildtime' : 1240127546,'errorparser' : 'unix','rowspan' : 14,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240131185,'td' : '','buildtime' : 1240129495,'logfile' : '1240129495.1240131176.20894.gz'},-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'MacOSX Darwin 8.8.1 talos mozilla-central fast qm-pmac-fast03','previousbuildtime' : 1240127582,'errorparser' : 'unix','rowspan' : 9,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240131009,'td' : '','buildtime' : 1240129514,'logfile' : '1240129514.1240130993.20617.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,{'buildname' : 'Linux mozilla-central leak test build','previousbuildtime' : 1240127548,'errorparser' : 'unix','rowspan' : 11,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240130882,'td' : '','buildtime' : 1240129495,'logfile' : '1240129495.1240130842.20393.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'Linux x86-64 mozilla-central build','previousbuildtime' : 1240127546,'errorparser' : 'unix','rowspan' : 9,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240130522,'td' : '','buildtime' : 1240129495,'logfile' : '1240129495.1240130472.20001.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'OS X 10.5.2 mozilla-central build','previousbuildtime' : 1240127546,'errorparser' : 'unix','rowspan' : 6,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240130222,'td' : '','buildtime' : 1240129495,'logfile' : '1240129495.1240130185.19604.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,{'buildname' : 'Linux talos mozilla-central fast qm-plinux-fast03','previousbuildtime' : 1240121330,'errorparser' : 'unix','rowspan' : 13,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240130641,'td' : '','buildtime' : 1240127721,'logfile' : '1240127721.1240130577.20113.gz'},{'buildname' : 'Linux talos mozilla-central nochrome qm-plinux-trunk07','previousbuildtime' : 1240121330,'errorparser' : 'unix','rowspan' : 13,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240132681,'td' : '','buildtime' : 1240127721,'logfile' : '1240127721.1240132664.22677.gz'},-1,{'rowspan' : 24,'buildstatus' : 'null'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'rowspan' : 4,'buildstatus' : 'null'},{'buildname' : 'MacOSX Darwin 8.8.1 talos mozilla-central nochrome qm-pmac-trunk10','previousbuildtime' : 1240121209,'errorparser' : 'unix','rowspan' : 14,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240131905,'td' : '','buildtime' : 1240127582,'logfile' : '1240127582.1240131888.21703.gz'},{'rowspan' : 24,'buildstatus' : 'null'},-1,-1,{'buildname' : 'MacOSX Darwin 9.2.2 talos mozilla-central nochrome qm-pleopard-trunk04','previousbuildtime' : 1240121209,'errorparser' : 'unix','rowspan' : 14,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240132682,'td' : '','buildtime' : 1240127582,'logfile' : '1240127582.1240132677.22690.gz'},-1,-1,{'rowspan' : 57,'buildstatus' : 'null'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,{'hasnote' : 1,'buildname' : 'Linux mozilla-central unit test','previousbuildtime' : 1240121181,'errorparser' : 'unittest','noteid' : '4','rowspan' : 15,'buildstatus' : 'testfailed','binaryurl' : '','endtime' : 1240134782,'td' : '','buildtime' : 1240127546,'logfile' : '1240127546.1240134739.25369.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'WINNT 5.2 mozilla-central build','previousbuildtime' : 1240121181,'errorparser' : 'unix','rowspan' : 14,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240138822,'td' : '','buildtime' : 1240127546,'logfile' : '1240127546.1240138798.31154.gz'},-1,-1,-1,-1,-1,-1,-1],[{'buildname' : 'Linux mozilla-central build','previousbuildtime' : 1240121181,'errorparser' : 'unix','rowspan' : 13,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240129894,'td' : '','buildtime' : 1240127546,'logfile' : '1240127546.1240129832.19154.gz'},{'rowspan' : 2,'buildstatus' : 'null'},-1,-1,-1,-1,-1,-1,{'rowspan' : 6,'buildstatus' : 'null'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'rowspan' : 5,'buildstatus' : 'null'},{'buildname' : 'OS X 10.5.2 mozilla-central leak test build','previousbuildtime' : 1240121181,'errorparser' : 'unix','rowspan' : 13,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240130230,'td' : '','buildtime' : 1240127546,'logfile' : '1240127546.1240130209.19640.gz'},-1,-1,{'hasnote' : 1,'buildname' : 'OS X 10.5.2 mozilla-central unit test','previousbuildtime' : 1240121181,'errorparser' : 'unittest','noteid' : '2','rowspan' : 13,'buildstatus' : 'testfailed','binaryurl' : '','endtime' : 1240131123,'td' : '','buildtime' : 1240127546,'logfile' : '1240127546.1240131081.20811.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'WINNT 5.2 mozilla-central leak test build','previousbuildtime' : 1240121181,'errorparser' : 'unix','rowspan' : 13,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240133162,'td' : '','buildtime' : 1240127546,'logfile' : '1240127546.1240133143.23196.gz'},-1,{'hasnote' : 1,'buildname' : 'WINNT 5.2 mozilla-central unit test','previousbuildtime' : 1240121181,'errorparser' : 'unittest','noteid' : '3','rowspan' : 13,'buildstatus' : 'testfailed','binaryurl' : '','endtime' : 1240134124,'td' : '','buildtime' : 1240127546,'logfile' : '1240127546.1240134106.24318.gz'},-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'MacOSX Darwin 8.8.1 talos mozilla-central fast qm-pmac-fast03','previousbuildtime' : 1240121209,'errorparser' : 'unix','rowspan' : 10,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240129442,'td' : '','buildtime' : 1240127582,'logfile' : '1240127582.1240129392.18645.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,{'buildname' : 'Linux mozilla-central leak test build','previousbuildtime' : 1240121181,'errorparser' : 'unix','rowspan' : 10,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240129262,'td' : '','buildtime' : 1240127548,'logfile' : '1240127548.1240129253.18387.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'WINNT 5.1 talos mozilla-central jss qm-pxp-jss01','previousbuildtime' : 1240116360,'errorparser' : 'unix','rowspan' : 29,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240129142,'td' : '','buildtime' : 1240122875,'logfile' : '1240122875.1240129140.18257.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'WINNT 5.1 talos mozilla-central fast qm-pxp-fast03','previousbuildtime' : 1240116360,'errorparser' : 'unix','rowspan' : 28,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240128845,'td' : '','buildtime' : 1240122875,'logfile' : '1240122875.1240128829.17869.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'OS X 10.5.2 mozilla-central build','previousbuildtime' : 1240121181,'errorparser' : 'unix','rowspan' : 8,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240128608,'td' : '','buildtime' : 1240127546,'logfile' : '1240127546.1240128584.17568.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'Linux x86-64 mozilla-central build','previousbuildtime' : 1240121181,'errorparser' : 'unix','rowspan' : 7,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240128301,'td' : '','buildtime' : 1240127546,'logfile' : '1240127546.1240128248.17107.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'hasnote' : 1,'buildname' : 'WINNT 5.1 talos mozilla-central nochrome qm-pxp-trunk07','previousbuildtime' : 1240116360,'errorparser' : 'unix','noteid' : '1','rowspan' : 25,'buildstatus' : 'testfailed','binaryurl' : '','endtime' : 1240127951,'td' : '','buildtime' : 1240122875,'logfile' : '1240122875.1240127923.16698.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,{'rowspan' : 21,'buildstatus' : 'null'},{'rowspan' : 15,'buildstatus' : 'null'},{'rowspan' : 59,'buildstatus' : 'null'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'rowspan' : 22,'buildstatus' : 'null'},{'rowspan' : 12,'buildstatus' : 'null'},-1,{'rowspan' : 60,'buildstatus' : 'null'},-1,{'rowspan' : 6,'buildstatus' : 'null'},-1,{'rowspan' : 11,'buildstatus' : 'null'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,{'rowspan' : 27,'buildstatus' : 'null'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[{'rowspan' : 21,'buildstatus' : 'null'},-1,-1,{'rowspan' : 6,'buildstatus' : 'null'},-1,-1,-1,-1,{'rowspan' : 25,'buildstatus' : 'null'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'rowspan' : 24,'buildstatus' : 'null'},{'rowspan' : 27,'buildstatus' : 'null'},-1,-1,{'buildname' : 'OS X 10.5.2 mozilla-central unit test','previousbuildtime' : 1240113981,'errorparser' : 'unittest','rowspan' : 30,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240130341,'td' : '','buildtime' : 1240121181,'logfile' : '1240121181.1240130294.19730.gz'},-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'WINNT 5.2 mozilla-central build','previousbuildtime' : 1240113981,'errorparser' : 'unix','rowspan' : 30,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240127763,'td' : '','buildtime' : 1240121181,'logfile' : '1240121181.1240127752.16511.gz'},{'rowspan' : 5,'buildstatus' : 'null'},-1,{'buildname' : 'WINNT 5.2 mozilla-central unit test','previousbuildtime' : 1240113981,'errorparser' : 'unittest','rowspan' : 30,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240127646,'td' : '','buildtime' : 1240121181,'logfile' : '1240121181.1240127606.16330.gz'},-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'rowspan' : 57,'buildstatus' : 'null'}],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'WINNT 5.1 talos mozilla-central qm-pxp-trunk01','errorparser' : 'unix','rowspan' : 42,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240126805,'td' : '','buildtime' : 1240116360,'logfile' : '1240116360.1240126799.15388.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'MacOSX Darwin 9.2.2 talos mozilla-central nochrome qm-pleopard-trunk04','previousbuildtime' : 1240114000,'errorparser' : 'unix','rowspan' : 25,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240125965,'td' : '','buildtime' : 1240121209,'logfile' : '1240121209.1240125919.14522.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'WINNT 5.2 mozilla-central leak test build','previousbuildtime' : 1240113981,'errorparser' : 'unix','rowspan' : 25,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240125961,'td' : '','buildtime' : 1240121181,'logfile' : '1240121181.1240125915.14518.gz'},-1,-1,-1,-1,-1,-1],[-1,-1,-1,{'buildname' : 'Linux mozilla-central unit test','previousbuildtime' : 1240113981,'errorparser' : 'unittest','rowspan' : 24,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240125782,'td' : '','buildtime' : 1240121181,'logfile' : '1240121181.1240125744.14340.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'Linux talos mozilla-central qm-plinux-trunk03','previousbuildtime' : 1240114204,'errorparser' : 'unix','rowspan' : 21,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240125421,'td' : '','buildtime' : 1240121330,'logfile' : '1240121330.1240125374.13957.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'MacOSX Darwin 8.8.1 talos mozilla-central qm-pmac-trunk01','errorparser' : 'unix','rowspan' : 21,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240125361,'td' : '','buildtime' : 1240121209,'logfile' : '1240121209.1240125309.13895.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'MacOSX Darwin 9.2.2 talos mozilla-central qm-pleopard-trunk02','errorparser' : 'unix','rowspan' : 20,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240125302,'td' : '','buildtime' : 1240121209,'logfile' : '1240121209.1240125255.13828.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'MacOSX Darwin 8.8.1 talos mozilla-central nochrome qm-pmac-trunk10','previousbuildtime' : 1240114000,'errorparser' : 'unix','rowspan' : 19,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240125183,'td' : '','buildtime' : 1240121209,'logfile' : '1240121209.1240125178.13738.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,{'buildname' : 'Linux talos mozilla-central nochrome qm-plinux-trunk07','previousbuildtime' : 1240114204,'errorparser' : 'unix','rowspan' : 17,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240125182,'td' : '','buildtime' : 1240121330,'logfile' : '1240121330.1240125146.13731.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'WINNT 6.0 talos mozilla-central qm-pvista-trunk02','errorparser' : 'unix','rowspan' : 41,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240124402,'td' : '','buildtime' : 1240113394,'logfile' : '1240113394.1240124372.12934.gz'},-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,{'buildname' : 'Linux talos mozilla-central fast qm-plinux-fast03','previousbuildtime' : 1240114204,'errorparser' : 'unix','rowspan' : 11,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240123085,'td' : '','buildtime' : 1240121330,\n\
+'logfile' : '1240121330.1240123071.11545.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'WINNT 5.1 talos mozilla-central fast qm-pxp-fast03','previousbuildtime' : 1240113394,'errorparser' : 'unix','rowspan' : 26,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240123022,'td' : '','buildtime' : 1240116360,'logfile' : '1240116360.1240122985.11479.gz'},{'buildname' : 'WINNT 5.1 talos mozilla-central jss qm-pxp-jss01','previousbuildtime' : 1240113394,'errorparser' : 'unix','rowspan' : 26,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240123329,'td' : '','buildtime' : 1240116360,'logfile' : '1240116360.1240123268.11765.gz'},-1,-1,{'rowspan' : 3,'buildstatus' : 'null'},-1,-1,{'buildname' : 'WINNT 5.1 talos mozilla-central qm-pxp-trunk03','errorparser' : 'unix','rowspan' : 35,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240124230,'td' : '','buildtime' : 1240113394,'logfile' : '1240113394.1240124219.12774.gz'},-1,-1,-1,-1,{'buildname' : 'WINNT 6.0 talos mozilla-central nochrome qm-pvista-trunk04','previousbuildtime' : 1240113394,'errorparser' : 'unix','rowspan' : 26,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240129142,'td' : '','buildtime' : 1240116360,'logfile' : '1240116360.1240129111.18237.gz'},{'buildname' : 'WINNT 6.0 talos mozilla-central qm-pvista-trunk01','errorparser' : 'unix','rowspan' : 26,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240126871,'td' : '','buildtime' : 1240116360,'logfile' : '1240116360.1240126811.15433.gz'},-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'MacOSX Darwin 8.8.1 talos mozilla-central fast qm-pmac-fast03','previousbuildtime' : 1240114000,'errorparser' : 'unix','rowspan' : 9,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240122721,'td' : '','buildtime' : 1240121209,'logfile' : '1240121209.1240122672.11197.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[{'buildname' : 'Linux mozilla-central build','previousbuildtime' : 1240113981,'errorparser' : 'unix','rowspan' : 9,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240122362,'td' : '','buildtime' : 1240121181,'logfile' : '1240121181.1240122327.10784.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'hasnote' : 1,'buildname' : 'WINNT 5.1 talos mozilla-central nochrome qm-pxp-trunk07','previousbuildtime' : 1240113394,'errorparser' : 'unix','noteid' : '0','rowspan' : 23,'buildstatus' : 'testfailed','binaryurl' : '','endtime' : 1240122091,'td' : '','buildtime' : 1240116360,'logfile' : '1240116360.1240122056.10484.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'OS X 10.5.2 mozilla-central build','previousbuildtime' : 1240113981,'errorparser' : 'unix','rowspan' : 6,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240121888,'td' : '','buildtime' : 1240121181,'logfile' : '1240121181.1240121863.10257.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'Linux x86-64 mozilla-central build','previousbuildtime' : 1240113981,'errorparser' : 'unix','rowspan' : 5,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240121886,'td' : '','buildtime' : 1240121181,'logfile' : '1240121181.1240121851.10237.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,{'buildname' : 'Linux mozilla-central leak test build','previousbuildtime' : 1240113981,'errorparser' : 'unix','rowspan' : 4,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240121701,'td' : '','buildtime' : 1240121181,'logfile' : '1240121181.1240121687.10032.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'OS X 10.5.2 mozilla-central leak test build','previousbuildtime' : 1240113981,'errorparser' : 'unix','rowspan' : 3,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240121583,'td' : '','buildtime' : 1240121181,'logfile' : '1240121181.1240121541.9891.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,{'rowspan' : 15,'buildstatus' : 'null'},{'rowspan' : 9,'buildstatus' : 'null'},-1,{'rowspan' : 7,'buildstatus' : 'null'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'rowspan' : 17,'buildstatus' : 'null'},{'rowspan' : 13,'buildstatus' : 'null'},{'rowspan' : 29,'buildstatus' : 'null'},-1,-1,{'rowspan' : 9,'buildstatus' : 'null'},-1,{'rowspan' : 29,'buildstatus' : 'null'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[{'rowspan' : 14,'buildstatus' : 'null'},{'rowspan' : 19,'buildstatus' : 'null'},-1,{'rowspan' : 9,'buildstatus' : 'null'},-1,-1,-1,-1,{'rowspan' : 18,'buildstatus' : 'null'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'rowspan' : 17,'buildstatus' : 'null'},{'rowspan' : 20,'buildstatus' : 'null'},-1,-1,{'rowspan' : 4,'buildstatus' : 'null'},-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'WINNT 5.2 mozilla-central build','errorparser' : 'unix','rowspan' : 23,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240121889,'td' : '','buildtime' : 1240113981,'logfile' : '1240113981.1240121881.10296.gz'},{'rowspan' : 3,'buildstatus' : 'null'},-1,{'buildname' : 'WINNT 5.2 mozilla-central unit test','errorparser' : 'unittest','rowspan' : 23,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240124521,'td' : '','buildtime' : 1240113981,'logfile' : '1240113981.1240124478.13077.gz'},-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'WINNT 5.2 mozilla-central leak test build','errorparser' : 'unix','rowspan' : 20,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240119902,'td' : '','buildtime' : 1240113981,'logfile' : '1240113981.1240119865.8135.gz'},-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'OS X 10.5.2 mozilla-central unit test','errorparser' : 'unittest','rowspan' : 19,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240119860,'td' : '','buildtime' : 1240113981,'logfile' : '1240113981.1240119834.8093.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'Linux talos mozilla-central qm-plinux-trunk03','errorparser' : 'unix','rowspan' : 16,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240119481,'td' : '','buildtime' : 1240114204,'logfile' : '1240114204.1240119424.7700.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,{'buildname' : 'Linux talos mozilla-central nochrome qm-plinux-trunk07','previousbuildtime' : 1240107064,'errorparser' : 'unix','rowspan' : 14,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240119243,'td' : '','buildtime' : 1240114204,\n\
+'logfile' : '1240114204.1240119209.7416.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'MacOSX Darwin 9.2.2 talos mozilla-central nochrome qm-pleopard-trunk04','errorparser' : 'unix','rowspan' : 14,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240118942,'td' : '','buildtime' : 1240114000,'logfile' : '1240114000.1240118885.7089.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,{'buildname' : 'Linux mozilla-central unit test','errorparser' : 'unittest','rowspan' : 14,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240118762,'td' : '','buildtime' : 1240113981,'logfile' : '1240113981.1240118727.6920.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'MacOSX Darwin 8.8.1 talos mozilla-central qm-pmac-trunk03','errorparser' : 'unix','rowspan' : 12,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240118282,'td' : '','buildtime' : 1240114000,'logfile' : '1240114000.1240118267.6249.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'MacOSX Darwin 9.2.2 talos mozilla-central qm-pleopard-trunk03','errorparser' : 'unix','rowspan' : 11,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240118223,'td' : '','buildtime' : 1240114000,'logfile' : '1240114000.1240118208.6184.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'MacOSX Darwin 8.8.1 talos mozilla-central nochrome qm-pmac-trunk10','errorparser' : 'unix','rowspan' : 10,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240118104,'td' : '','buildtime' : 1240114000,'logfile' : '1240114000.1240118088.5991.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,{'buildname' : 'Linux talos mozilla-central fast qm-plinux-fast03','previousbuildtime' : 1240107064,'errorparser' : 'unix','rowspan' : 8,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240117147,'td' : '','buildtime' : 1240114204,'logfile' : '1240114204.1240117101.4633.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[{'buildname' : 'Linux mozilla-central build','errorparser' : 'unix','rowspan' : 9,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240116427,'td' : '','buildtime' : 1240113981,'logfile' : '1240113981.1240116368.3775.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'WINNT 5.1 talos mozilla-central fast qm-pxp-fast03','errorparser' : 'unix','rowspan' : 9,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240120323,'td' : '','buildtime' : 1240113394,'logfile' : '1240113394.1240120303.8593.gz'},{'buildname' : 'WINNT 5.1 talos mozilla-central jss qm-pxp-jss01','errorparser' : 'unix','rowspan' : 9,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240120621,'td' : '','buildtime' : 1240113394,'logfile' : '1240113394.1240120615.8898.gz'},-1,-1,{'buildname' : 'WINNT 5.1 talos mozilla-central nochrome qm-pxp-trunk07','errorparser' : 'unix','rowspan' : 9,'buildstatus' : 'testfailed','binaryurl' : '','endtime' : 1240119422,'td' : '','buildtime' : 1240113394,'logfile' : '1240113394.1240119400.7670.gz'},{'rowspan' : 13,'buildstatus' : 'null'},-1,-1,-1,-1,-1,-1,{'buildname' : 'WINNT 6.0 talos mozilla-central nochrome qm-pvista-trunk04','errorparser' : 'unix','rowspan' : 9,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240124104,'td' : '','buildtime' : 1240113394,'logfile' : '1240113394.1240124098.12653.gz'},{'rowspan' : 13,'buildstatus' : 'null'},-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'MacOSX Darwin 8.8.1 talos mozilla-central fast qm-pmac-fast03','errorparser' : 'unix','rowspan' : 6,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240115641,'td' : '','buildtime' : 1240114000,'logfile' : '1240114000.1240115599.2794.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'OS X 10.5.2 mozilla-central build','errorparser' : 'unix','rowspan' : 6,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240114808,'td' : '','buildtime' : 1240113981,'logfile' : '1240113981.1240114788.1873.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'Linux x86-64 mozilla-central build','errorparser' : 'unix','rowspan' : 5,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240114742,'td' : '','buildtime' : 1240113981,'logfile' : '1240113981.1240114695.1744.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,{'buildname' : 'Linux mozilla-central leak test build','errorparser' : 'unix','rowspan' : 4,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240114625,'td' : '','buildtime' : 1240113981,'logfile' : '1240113981.1240114572.1628.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'buildname' : 'OS X 10.5.2 mozilla-central leak test build','errorparser' : 'unix','rowspan' : 3,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240114323,'td' : '','buildtime' : 1240113981,'logfile' : '1240113981.1240114316.1289.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,{'rowspan' : 6,'buildstatus' : 'null'},{'rowspan' : 5,'buildstatus' : 'null'},-1,{'rowspan' : 7,'buildstatus' : 'null'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'rowspan' : 6,'buildstatus' : 'null'},{'rowspan' : 6,'buildstatus' : 'null'},-1,-1,{'rowspan' : 6,'buildstatus' : 'null'},{'rowspan' : 6,'buildstatus' : 'null'},-1,-1,{'rowspan' : 6,'buildstatus' : 'null'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[{'rowspan' : 5,'buildstatus' : 'null'},{'rowspan' : 5,'buildstatus' : 'null'},-1,{'rowspan' : 5,'buildstatus' : 'null'},-1,-1,-1,-1,{'rowspan' : 5,'buildstatus' : 'null'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'rowspan' : 5,'buildstatus' : 'null'},{'rowspan' : 5,'buildstatus' : 'null'},-1,-1,{'rowspan' : 5,'buildstatus' : 'null'},-1,-1,-1,-1,-1,-1,-1,-1,{'rowspan' : 5,'buildstatus' : 'null'},{'rowspan' : 5,'buildstatus' : 'null'},-1,{'rowspan' : 5,'buildstatus' : 'null'},-1,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,{'rowspan' : 4,'buildstatus' : 'null'},{'rowspan' : 4,'buildstatus' : 'null'},-1,-1,{'rowspan' : 4,'buildstatus' : 'null'},-1,-1,{'rowspan' : 4,'buildstatus' : 'null'},-1,-1,-1,-1,{'rowspan' : 4,'buildstatus' : 'null'},-1,{'rowspan' : 4,'buildstatus' : 'null'},-1],[-1,-1,-1,-1,-1,-1,{'buildname' : 'Linux talos mozilla-central qm-plinux-trunk01','errorparser' : 'unix','rowspan' : 3,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240113241,'td' : '','buildtime' : 1240107064,'logfile' : '1240107064.1240113190.32497.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,-1,{'buildname' : 'Linux talos mozilla-central nochrome qm-plinux-trunk07','errorparser' : 'unix','rowspan' : 2,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240113003,'td' : '','buildtime' : 1240107064,'logfile' : '1240107064.1240112981.32269.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[-1,-1,-1,-1,{'buildname' : 'Linux talos mozilla-central fast qm-plinux-fast03','errorparser' : 'unix','rowspan' : 1,'buildstatus' : 'success','binaryurl' : '','endtime' : 1240110901,'td' : '','buildtime' : 1240107064,'logfile' : '1240107064.1240110861.30015.gz'},-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[]],'ignore_builds' : {'MacOSX Darwin 9.0.0 talos trunk qm-pmac-trunk04' : 1,'MacOSX Darwin 9.0.0 talos trunk qm-pmac-trunk05' : 1,'Linux qm-centos5-02 dep unit test' : 1,'OS X 10.5.2 mozilla-central l10n nightly' : 1,'MacOSX Darwin 9.1.0 qm-xserve02 dep unit test' : 1,'Linux talos qm-mini-ubuntu03 trunk' : 1,'Linux talos trunk fast qm-plinux-fast01' : 1,'OS X 10.5.2 mozilla-central xulrunner' : 1,'MacOSX Darwin 8.8.1 talos trunk qm-pmac01' : 1,'WINNT 5.2 mozilla-central moz2-win32-slave08 dep unit test' : 1,'WINNT 5.2 mozilla-central moz2-win32-slave07 dep unit test' : 1,'Linux talos trunk qm-mini-ubuntu02' : 1,'WINNT 5.1 mini talos trunk jss qm-pxp-jss03' : 1,'WINNT 5.1 bl-bldxp01 Depend fx-win32-tbox perf test' : 1,'WINNT 6.0 talos trunk qm-mini-vista01' : 1,'Linux ayane Sisyphus' : 1,'WINNT 6.0 talos trunk qm-mini-vista02' : 1,'MacOSX Darwin 9.2.2 moz2-darwin8-slave02 dep unit test' : 1,'Linux talos trunk qm-mini-ubuntu05' : 1,'Linux talos trunk qm-mini-ubuntu01' : 1,'Linux mozilla-central qm-centos5-03 dep unit test' : 1,'Linux mozilla-central qm-centos5-moz2-02-hw dep unit test' : 1,'Linux bl-bldlnx01 Depend fx-linux-tbox perf test' : 1,'Linux fxdbug-linux-tbox Depend' : 1,'Linux qm-centos5-04 dep unit test' : 1,'WINNT 5.2 qm-win2k3-03 dep unit test' : 1,'WINNT 5.2 mozilla-central qm-win2k3-unittest-hw dep unit test' : 1,'win32 qm-mini-xp03 branch perf' : 1,'WINNT 5.2 fxnewref-win32- Depend Fx-Newref' : 1,'Linux mozilla-central moz2-linux-slave08 dep unit test' : 1,'WINNT 5.1 mini talos trunk qm-mini-xp02' : 1,'MacOSX Darwin 8.8.4 qm-xserve06 dep unit test' : 1,'Linux qm-centos5-01 dep unit test' : 1,'Linux bl-bldlnx03 Depend fx-linux-tbox perf test' : 1,'win32 qm-mini-xp02 trunk perf' : 1,'talos win32 branch' : 1,'talos qm-pxp01,3 trunk' : 1,'WINNT 5.1 talos trunk qm-pxp03' : 1,'WINNT 5.1 talos trunk qm-pxp01' : 1,'MacOSX Darwin 8.8.4 fx-mac-1 Depend Universal Nightly' : 1,'Linux mozilla-central l10n nightly' : 1,'MacOSX Darwin 9.2.2 talos trunk qm-pmac-trunk05' : 1,'Linux bl-bldlnx01 Depend fx-linux-tbox test perf' : 1,'Linux bl-bldlnx01 Depend argo-vm perf test' : 1,'WINNT 6.0 talos trunk qm-mini-vista03' : 1,'Linux mozilla-central qm-centos5-moz2-01 dep unit test' : 1,'WINNT 5.1 talos qm-pxp01,3 trunk' : 1,'MacOSX Darwin 9.0.0 talos trunk qm-pmac-trunk06' : 1,'Linux qm-mini-ubuntu03 trunk perf' : 1,'WINNT 5.2 mozilla-central l10n nightly' : 1,'MacOSX Darwin 8.8.1 talos trunk nochrome qm-pmac05' : 1,'MacOSX Darwin 8.8.1 talos trunk fast qm-pmac-fast01' : 1,'WINNT 5.2 win2k3-ref-img Depend Nightly' : 1,'Linux fx3-linux-tbox Depend Nightly' : 1,'Linux bl-bldlnx01 Depend argo-vm test perf' : 1,'MacOSX Darwin 9.2.2 talos trunk qm-pmac-trunk04' : 1,'Linux talos trunk nochrome qm-mini-ubuntu03' : 1,'Linux mozilla-central fx-linux-1.9-slave04 dep unit test' : 1,'Linux qm-centos5-03 dep unit test' : 1,'WINNT 5.1 mini talos trunk qm-mini-xp03' : 1,'MacOSX Darwin 8.8.4 qm-xserve01 dep unit test' : 1,'WINNT 5.1 mini talos trunk jss qm-pxp-jss01' : 1,'Linux fx-linux-1 Depend Nightly' : 1,'Linux qm-rhel02 dep unit test' : 1,'Linux mozilla-central xulrunner' : 1,'MacOSX Darwin 9.2.2 mozilla-central moz2-darwin8-slave01 dep unit test' : 1,'MacOSX Darwin 8.8.1 talos trunk qm-pmac03' : 1,'MacOSX Darwin 9.2.2 mozilla-central qm-moz2mini01 dep unit test' : 1,'WINNT 5.2 mozilla-central xulrunner' : 1,'Linux argo-vm Depend Nightly' : 1,'WINNT 5.2 fx-win32-tbox Depend Nightly' : 1,'WINNT 5.1 bl-bldxp01 Depend fxnewref-win32-tbox perf test' : 1,'WINNT 6.0 talos trunk nochrome qm-mini-vista05' : 1,'MacOSX Darwin 8.8.1 talos trunk qm-pmac02' : 1,'MacOSX Darwin 9.0.0 robert-helmers-macbook-pro Depend Universal Nightly' : 1,'WINNT 5.2 mozilla-central qm-win2k3-moz2-01 dep unit test' : 1,'WINNT 5.2 qm-win2k3-pgo01 dep unit test' : 1,'MacOSX Darwin 9.2.2 mozilla-central moz2-darwin8-slave02 dep unit test' : 1,'WINNT 5.1 mini talos trunk qm-mini-xp01' : 1,'WINNT 5.2 bm-win2k3-pgo01 dep unit test' : 1,'Linux fxnewref-linux-tbox Depend Nightly' : 1,'Linux mozilla-central bm-centos5-unittest-02 dep unit test' : 1,'Linux x86-64 mozilla-central xulrunner' : 1,'MacOSX Darwin 8.11.1 qm-xserve06 dep unit test' : 1,'Linux mozilla-central moz2-linux-slave07 dep unit test' : 1,'WINNT 5.1 mini talos trunk fast qm-pxp-fast01' : 1,'Linux bl-bldlnx03 Depend fxnewref-linux-tbox perf test' : 1,'WINNT 5.2 qm-win2k3-02 dep unit test' : 1,'MacOSX Darwin 8.8.4 bm-xserve11 Depend Debug + Leak Test' : 1,'Linux bl-bldlnx03 Depend Nightly' : 1,'talos qm-pxp04 branch' : 1,'Linux qm-mini-ubuntu01 branch perf' : 1,'Linux fx-linux-tbox Depend' : 1,'MacOSX Darwin 8.11.1 qm-xserve01 dep unit test' : 1,'MacOSX Darwin 9.2.2 moz2-darwin8-slave01 dep unit test' : 1,'WINNT 5.2 fxnewref-win32- Depend Nightly' : 1,'MacOSX Darwin 9.2.2 talos trunk qm-pmac-trunk06' : 1,'WINNT 5.2 mozilla-central qm-win2k3-03 dep unit test' : 1,'WINNT 5.2 fxdbug-win32-tb Depend Debug + Leak Test' : 1,'MacOSX Darwin 8.8.4 bm-xserve07 dep unit test' : 1,'Linux bl-bldlnx02 Depend Nightly' : 1,'WINNT 5.1 mini talos trunk nochrome qm-mini-xp05' : 1,'Linux mozilla-central fx-linux-1.9-slave03 dep unit test' : 1,'WINNT 5.1 qm-winxp01 dep unit test' : 1,'WINNT 5.1 mini talos trunk jss qm-pxp-jss02' : 1,'talos qm-pxp02,4 branch' : 1,'Linux lilroro Depend fx-linux-tbox perf test' : 1,'WINNT 5.2 qm-win2k3-01 dep unit test' : 1,'Linux fx-linux-tbox Depend Nightly' : 1,'MacOSX Darwin 8.8.4 bm-xserve08 Depend Universal Nightly' : 1},\n\
+'who_list' : ['undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef','undef',\n\
+{'cltbld' : 1,'brendan%mozilla.org' : 1,'gavin%gavinsharp.com' : 1,'dbaron%dbaron.org' : 1,'neil%parkwaycc.co.uk' : 1,'reed%reedloden.com' : 1,'dietrich%mozilla.com' : 1,'crowder%fiverocks.com' : 1,'philringnalda%gmail.com' : 1,'mnyromyr%tprac.de' : 1,'marco.zehe%googlemail.com' : 1,'Pidgeot18%gmail.com' : 1,'hwaara%gmail.com' : 1,'silver%warwickcompsoc.co.uk' : 1,'dholbert%cs.stanford.edu' : 1,'jst%mozilla.org' : 1,'mozilla%kewis.ch' : 1,'bugzilla%standard8.plus.com' : 1,'anodelman%mozilla.com' : 1,'mkmelin+mozilla%iki.fi' : 1,'axel%pike.org' : 1,'sdwilsh%shawnwilsher.com' : 1,'bhearsum%mozilla.com' : 1,'ctalbert%mozilla.com' : 1,'smichaud%pobox.com' : 1,'wr%rosenauer.org' : 1,'timeless%mozdev.org' : 1,'Callek%gmail.com' : 1,'dcamp%mozilla.com' : 1,'jminta%gmail.com' : 1,'bienvenu%nventure.com' : 1}],'build_names' : ['Linux mozilla-central build','Linux mozilla-central leak test build','Linux mozilla-central nightly','Linux mozilla-central unit test','Linux talos mozilla-central fast qm-plinux-fast03','Linux talos mozilla-central nochrome qm-plinux-trunk07','Linux talos mozilla-central qm-plinux-trunk01','Linux talos mozilla-central qm-plinux-trunk03','Linux x86-64 mozilla-central build','Linux x86-64 mozilla-central nightly','MacOSX Darwin 8.8.1 talos mozilla-central fast qm-pmac-fast03','MacOSX Darwin 8.8.1 talos mozilla-central nochrome qm-pmac-trunk10','MacOSX Darwin 8.8.1 talos mozilla-central qm-pmac-trunk01','MacOSX Darwin 8.8.1 talos mozilla-central qm-pmac-trunk02','MacOSX Darwin 8.8.1 talos mozilla-central qm-pmac-trunk03','MacOSX Darwin 9.2.2 talos mozilla-central nochrome qm-pleopard-trunk04','MacOSX Darwin 9.2.2 talos mozilla-central qm-pleopard-trunk01','MacOSX Darwin 9.2.2 talos mozilla-central qm-pleopard-trunk02','MacOSX Darwin 9.2.2 talos mozilla-central qm-pleopard-trunk03','OS X 10.5.2 mozilla-central build','OS X 10.5.2 mozilla-central leak test build','OS X 10.5.2 mozilla-central nightly','OS X 10.5.2 mozilla-central shark','OS X 10.5.2 mozilla-central unit test','WINNT 5.1 talos mozilla-central fast qm-pxp-fast03','WINNT 5.1 talos mozilla-central jss qm-pxp-jss01','WINNT 5.1 talos mozilla-central jss qm-pxp-jss02','WINNT 5.1 talos mozilla-central jss qm-pxp-jss03','WINNT 5.1 talos mozilla-central nochrome qm-pxp-trunk07','WINNT 5.1 talos mozilla-central qm-pxp-trunk01','WINNT 5.1 talos mozilla-central qm-pxp-trunk02','WINNT 5.1 talos mozilla-central qm-pxp-trunk03','WINNT 5.2 mozilla-central build','WINNT 5.2 mozilla-central leak test build','WINNT 5.2 mozilla-central nightly','WINNT 5.2 mozilla-central unit test','WINNT 6.0 talos mozilla-central nochrome qm-pvista-trunk04','WINNT 6.0 talos mozilla-central qm-pvista-trunk01','WINNT 6.0 talos mozilla-central qm-pvista-trunk02','static-analysis-bsmedberg']};\n\
+\n\
+\n\
+TalosContentProfiler.subtestStart('json-stringify-tinderbox', true).then(() => {\n\
+ var _sunSpiderStartDate = new Date();\n\
+\n\
+\n\
+ for (var i = 0; i < 20; i++) {\n\
+ var x = JSON.stringify(tinderbox_data);\n\
+ }\n\
+\n\
+ var _sunSpiderInterval = new Date() - _sunSpiderStartDate;\n\
+ TalosContentProfiler.subtestEnd('json-stringify-tinderbox', true).then(() => {\n\
+ record(_sunSpiderInterval);\n\
+ });\n\
+\n\
+});\n\
+</script>\n\
+\n\
+\n\
+</body>\n\
+</html>\n\
+", "<!DOCTYPE html>\n\
+<head>\n\
+\n\
+<meta charset=utf8>\n\
+\n\
+<!--\n\
+ Copyright (C) 2007 Apple Inc. All rights reserved.\n\
+\n\
+ Redistribution and use in source and binary forms, with or without\n\
+ modification, are permitted provided that the following conditions\n\
+ are met:\n\
+ 1. Redistributions of source code must retain the above copyright\n\
+ notice, this list of conditions and the following disclaimer.\n\
+ 2. Redistributions in binary form must reproduce the above copyright\n\
+ notice, this list of conditions and the following disclaimer in the\n\
+ documentation and/or other materials provided with the distribution.\n\
+\n\
+ THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY\n\
+ EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n\
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n\
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR\n\
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n\
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n\
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n\
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n\
+ OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n\
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \n\
+-->\n\
+\n\
+<title>SunSpider stanford-crypto-aes</title>\n\
+<link rel=\"stylesheet\" href=\"../kraken.css\">\n\
+</head>\n\
+\n\
+<body>\n\
+<h3>stanford-crypto-aes</h3>\n\
+<div id=\"console\">\n\
+</div>\n\
+<script>\n\
+var TalosContentProfiler = parent.TalosContentProfiler;\n\
+function record(time) {\n\
+ document.getElementById(\"console\").innerHTML = time + \"ms\";\n\
+ if (window.parent) {\n\
+ parent.recordResult(time);\n\
+ }\n\
+}\n\
+\n\
+\"use strict\";\n\
+\n\
+var sjcl={cipher:{},hash:{},mode:{},misc:{},codec:{},exception:{corrupt:function(a){this.toString=function(){return\"CORRUPT: \"+this.message};this.message=a},invalid:function(a){this.toString=function(){return\"INVALID: \"+this.message};this.message=a},bug:function(a){this.toString=function(){return\"BUG: \"+this.message};this.message=a}}};\n\
+sjcl.cipher.aes=function(a){this.h[0][0][0]||this.w();var b,c,d,e,f=this.h[0][4],g=this.h[1];b=a.length;var h=1;if(b!==4&&b!==6&&b!==8)throw new sjcl.exception.invalid(\"invalid aes key size\");this.a=[d=a.slice(0),e=[]];for(a=b;a<4*b+28;a++){c=d[a-1];if(a%b===0||b===8&&a%b===4){c=f[c>>>24]<<24^f[c>>16&255]<<16^f[c>>8&255]<<8^f[c&255];if(a%b===0){c=c<<8^c>>>24^h<<24;h=h<<1^(h>>7)*283}}d[a]=d[a-b]^c}for(b=0;a;b++,a--){c=d[b&3?a:a-4];e[b]=a<=4||b<4?c:g[0][f[c>>>24]]^g[1][f[c>>16&255]]^g[2][f[c>>8&255]]^\n\
+g[3][f[c&255]]}};\n\
+sjcl.cipher.aes.prototype={encrypt:function(a){return this.H(a,0)},decrypt:function(a){return this.H(a,1)},h:[[[],[],[],[],[]],[[],[],[],[],[]]],w:function(){var a=this.h[0],b=this.h[1],c=a[4],d=b[4],e,f,g,h=[],i=[],k,j,l,m;for(e=0;e<0x100;e++)i[(h[e]=e<<1^(e>>7)*283)^e]=e;for(f=g=0;!c[f];f^=k||1,g=i[g]||1){l=g^g<<1^g<<2^g<<3^g<<4;l=l>>8^l&255^99;c[f]=l;d[l]=f;j=h[e=h[k=h[f]]];m=j*0x1010101^e*0x10001^k*0x101^f*0x1010100;j=h[l]*0x101^l*0x1010100;for(e=0;e<4;e++){a[e][f]=j=j<<24^j>>>8;b[e][l]=m=m<<24^m>>>8}}for(e=\n\
+0;e<5;e++){a[e]=a[e].slice(0);b[e]=b[e].slice(0)}},H:function(a,b){if(a.length!==4)throw new sjcl.exception.invalid(\"invalid aes block size\");var c=this.a[b],d=a[0]^c[0],e=a[b?3:1]^c[1],f=a[2]^c[2];a=a[b?1:3]^c[3];var g,h,i,k=c.length/4-2,j,l=4,m=[0,0,0,0];g=this.h[b];var n=g[0],o=g[1],p=g[2],q=g[3],r=g[4];for(j=0;j<k;j++){g=n[d>>>24]^o[e>>16&255]^p[f>>8&255]^q[a&255]^c[l];h=n[e>>>24]^o[f>>16&255]^p[a>>8&255]^q[d&255]^c[l+1];i=n[f>>>24]^o[a>>16&255]^p[d>>8&255]^q[e&255]^c[l+2];a=n[a>>>24]^o[d>>16&\n\
+255]^p[e>>8&255]^q[f&255]^c[l+3];l+=4;d=g;e=h;f=i}for(j=0;j<4;j++){m[b?3&-j:j]=r[d>>>24]<<24^r[e>>16&255]<<16^r[f>>8&255]<<8^r[a&255]^c[l++];g=d;d=e;e=f;f=a;a=g}return m}};\n\
+sjcl.bitArray={bitSlice:function(a,b,c){a=sjcl.bitArray.P(a.slice(b/32),32-(b&31)).slice(1);return c===undefined?a:sjcl.bitArray.clamp(a,c-b)},concat:function(a,b){if(a.length===0||b.length===0)return a.concat(b);var c=a[a.length-1],d=sjcl.bitArray.getPartial(c);return d===32?a.concat(b):sjcl.bitArray.P(b,d,c|0,a.slice(0,a.length-1))},bitLength:function(a){var b=a.length;if(b===0)return 0;return(b-1)*32+sjcl.bitArray.getPartial(a[b-1])},clamp:function(a,b){if(a.length*32<b)return a;a=a.slice(0,Math.ceil(b/\n\
+32));var c=a.length;b&=31;if(c>0&&b)a[c-1]=sjcl.bitArray.partial(b,a[c-1]&2147483648>>b-1,1);return a},partial:function(a,b,c){if(a===32)return b;return(c?b|0:b<<32-a)+a*0x10000000000},getPartial:function(a){return Math.round(a/0x10000000000)||32},equal:function(a,b){if(sjcl.bitArray.bitLength(a)!==sjcl.bitArray.bitLength(b))return false;var c=0,d;for(d=0;d<a.length;d++)c|=a[d]^b[d];return c===0},P:function(a,b,c,d){var e;e=0;if(d===undefined)d=[];for(;b>=32;b-=32){d.push(c);c=0}if(b===0)return d.concat(a);\n\
+for(e=0;e<a.length;e++){d.push(c|a[e]>>>b);c=a[e]<<32-b}e=a.length?a[a.length-1]:0;a=sjcl.bitArray.getPartial(e);d.push(sjcl.bitArray.partial(b+a&31,b+a>32?c:d.pop(),1));return d},k:function(a,b){return[a[0]^b[0],a[1]^b[1],a[2]^b[2],a[3]^b[3]]}};\n\
+sjcl.codec.utf8String={fromBits:function(a){var b=\"\",c=sjcl.bitArray.bitLength(a),d,e;for(d=0;d<c/8;d++){if((d&3)===0)e=a[d/4];b+=String.fromCharCode(e>>>24);e<<=8}return decodeURIComponent(escape(b))},toBits:function(a){a=unescape(encodeURIComponent(a));var b=[],c,d=0;for(c=0;c<a.length;c++){d=d<<8|a.charCodeAt(c);if((c&3)===3){b.push(d);d=0}}c&3&&b.push(sjcl.bitArray.partial(8*(c&3),d));return b}};\n\
+sjcl.codec.hex={fromBits:function(a){var b=\"\",c;for(c=0;c<a.length;c++)b+=((a[c]|0)+0xf00000000000).toString(16).substr(4);return b.substr(0,sjcl.bitArray.bitLength(a)/4)},toBits:function(a){var b,c=[],d;a=a.replace(/\\s|0x/g,\"\");d=a.length;a+=\"00000000\";for(b=0;b<a.length;b+=8)c.push(parseInt(a.substr(b,8),16)^0);return sjcl.bitArray.clamp(c,d*4)}};\n\
+sjcl.codec.base64={D:\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",fromBits:function(a,b){var c=\"\",d,e=0,f=sjcl.codec.base64.D,g=0,h=sjcl.bitArray.bitLength(a);for(d=0;c.length*6<h;){c+=f.charAt((g^a[d]>>>e)>>>26);if(e<6){g=a[d]<<6-e;e+=26;d++}else{g<<=6;e-=6}}for(;c.length&3&&!b;)c+=\"=\";return c},toBits:function(a){a=a.replace(/\\s|=/g,\"\");var b=[],c,d=0,e=sjcl.codec.base64.D,f=0,g;for(c=0;c<a.length;c++){g=e.indexOf(a.charAt(c));if(g<0)throw new sjcl.exception.invalid(\"this isn't base64!\");\n\
+if(d>26){d-=26;b.push(f^g>>>d);f=g<<32-d}else{d+=6;f^=g<<32-d}}d&56&&b.push(sjcl.bitArray.partial(d&56,f,1));return b}};sjcl.hash.sha256=function(a){this.a[0]||this.w();if(a){this.n=a.n.slice(0);this.i=a.i.slice(0);this.e=a.e}else this.reset()};sjcl.hash.sha256.hash=function(a){return(new sjcl.hash.sha256).update(a).finalize()};\n\
+sjcl.hash.sha256.prototype={blockSize:512,reset:function(){this.n=this.N.slice(0);this.i=[];this.e=0;return this},update:function(a){if(typeof a===\"string\")a=sjcl.codec.utf8String.toBits(a);var b,c=this.i=sjcl.bitArray.concat(this.i,a);b=this.e;a=this.e=b+sjcl.bitArray.bitLength(a);for(b=512+b&-512;b<=a;b+=512)this.C(c.splice(0,16));return this},finalize:function(){var a,b=this.i,c=this.n;b=sjcl.bitArray.concat(b,[sjcl.bitArray.partial(1,1)]);for(a=b.length+2;a&15;a++)b.push(0);b.push(Math.floor(this.e/\n\
+4294967296));for(b.push(this.e|0);b.length;)this.C(b.splice(0,16));this.reset();return c},N:[],a:[],w:function(){function a(e){return(e-Math.floor(e))*0x100000000|0}var b=0,c=2,d;a:for(;b<64;c++){for(d=2;d*d<=c;d++)if(c%d===0)continue a;if(b<8)this.N[b]=a(Math.pow(c,0.5));this.a[b]=a(Math.pow(c,1/3));b++}},C:function(a){var b,c,d=a.slice(0),e=this.n,f=this.a,g=e[0],h=e[1],i=e[2],k=e[3],j=e[4],l=e[5],m=e[6],n=e[7];for(a=0;a<64;a++){if(a<16)b=d[a];else{b=d[a+1&15];c=d[a+14&15];b=d[a&15]=(b>>>7^b>>>18^\n\
+b>>>3^b<<25^b<<14)+(c>>>17^c>>>19^c>>>10^c<<15^c<<13)+d[a&15]+d[a+9&15]|0}b=b+n+(j>>>6^j>>>11^j>>>25^j<<26^j<<21^j<<7)+(m^j&(l^m))+f[a];n=m;m=l;l=j;j=k+b|0;k=i;i=h;h=g;g=b+(h&i^k&(h^i))+(h>>>2^h>>>13^h>>>22^h<<30^h<<19^h<<10)|0}e[0]=e[0]+g|0;e[1]=e[1]+h|0;e[2]=e[2]+i|0;e[3]=e[3]+k|0;e[4]=e[4]+j|0;e[5]=e[5]+l|0;e[6]=e[6]+m|0;e[7]=e[7]+n|0}};\n\
+sjcl.mode.ccm={name:\"ccm\",encrypt:function(a,b,c,d,e){var f,g=b.slice(0),h=sjcl.bitArray,i=h.bitLength(c)/8,k=h.bitLength(g)/8;e=e||64;d=d||[];if(i<7)throw new sjcl.exception.invalid(\"ccm: iv must be at least 7 bytes\");for(f=2;f<4&&k>>>8*f;f++);if(f<15-i)f=15-i;c=h.clamp(c,8*(15-f));b=sjcl.mode.ccm.G(a,b,c,d,e,f);g=sjcl.mode.ccm.I(a,g,c,b,e,f);return h.concat(g.data,g.tag)},decrypt:function(a,b,c,d,e){e=e||64;d=d||[];var f=sjcl.bitArray,g=f.bitLength(c)/8,h=f.bitLength(b),i=f.clamp(b,h-e),k=f.bitSlice(b,\n\
+h-e);h=(h-e)/8;if(g<7)throw new sjcl.exception.invalid(\"ccm: iv must be at least 7 bytes\");for(b=2;b<4&&h>>>8*b;b++);if(b<15-g)b=15-g;c=f.clamp(c,8*(15-b));i=sjcl.mode.ccm.I(a,i,c,k,e,b);a=sjcl.mode.ccm.G(a,i.data,c,d,e,b);if(!f.equal(i.tag,a))throw new sjcl.exception.corrupt(\"ccm: tag doesn't match\");return i.data},G:function(a,b,c,d,e,f){var g=[],h=sjcl.bitArray,i=h.k;e/=8;if(e%2||e<4||e>16)throw new sjcl.exception.invalid(\"ccm: invalid tag length\");if(d.length>0xffffffff||b.length>0xffffffff)throw new sjcl.exception.bug(\"ccm: can't deal with 4GiB or more data\");\n\
+f=[h.partial(8,(d.length?64:0)|e-2<<2|f-1)];f=h.concat(f,c);f[3]|=h.bitLength(b)/8;f=a.encrypt(f);if(d.length){c=h.bitLength(d)/8;if(c<=65279)g=[h.partial(16,c)];else if(c<=0xffffffff)g=h.concat([h.partial(16,65534)],[c]);g=h.concat(g,d);for(d=0;d<g.length;d+=4)f=a.encrypt(i(f,g.slice(d,d+4)))}for(d=0;d<b.length;d+=4)f=a.encrypt(i(f,b.slice(d,d+4)));return h.clamp(f,e*8)},I:function(a,b,c,d,e,f){var g,h=sjcl.bitArray;g=h.k;var i=b.length,k=h.bitLength(b);c=h.concat([h.partial(8,f-1)],c).concat([0,\n\
+0,0]).slice(0,4);d=h.bitSlice(g(d,a.encrypt(c)),0,e);if(!i)return{tag:d,data:[]};for(g=0;g<i;g+=4){c[3]++;e=a.encrypt(c);b[g]^=e[0];b[g+1]^=e[1];b[g+2]^=e[2];b[g+3]^=e[3]}return{tag:d,data:h.clamp(b,k)}}};\n\
+sjcl.mode.ocb2={name:\"ocb2\",encrypt:function(a,b,c,d,e,f){if(sjcl.bitArray.bitLength(c)!==128)throw new sjcl.exception.invalid(\"ocb iv must be 128 bits\");var g,h=sjcl.mode.ocb2.A,i=sjcl.bitArray,k=i.k,j=[0,0,0,0];c=h(a.encrypt(c));var l,m=[];d=d||[];e=e||64;for(g=0;g+4<b.length;g+=4){l=b.slice(g,g+4);j=k(j,l);m=m.concat(k(c,a.encrypt(k(c,l))));c=h(c)}l=b.slice(g);b=i.bitLength(l);g=a.encrypt(k(c,[0,0,0,b]));l=i.clamp(k(l,g),b);j=k(j,k(l,g));j=a.encrypt(k(j,k(c,h(c))));if(d.length)j=k(j,f?d:sjcl.mode.ocb2.pmac(a,\n\
+d));return m.concat(i.concat(l,i.clamp(j,e)))},decrypt:function(a,b,c,d,e,f){if(sjcl.bitArray.bitLength(c)!==128)throw new sjcl.exception.invalid(\"ocb iv must be 128 bits\");e=e||64;var g=sjcl.mode.ocb2.A,h=sjcl.bitArray,i=h.k,k=[0,0,0,0],j=g(a.encrypt(c)),l,m,n=sjcl.bitArray.bitLength(b)-e,o=[];d=d||[];for(c=0;c+4<n/32;c+=4){l=i(j,a.decrypt(i(j,b.slice(c,c+4))));k=i(k,l);o=o.concat(l);j=g(j)}m=n-c*32;l=a.encrypt(i(j,[0,0,0,m]));l=i(l,h.clamp(b.slice(c),m));k=i(k,l);k=a.encrypt(i(k,i(j,g(j))));if(d.length)k=\n\
+i(k,f?d:sjcl.mode.ocb2.pmac(a,d));if(!h.equal(h.clamp(k,e),h.bitSlice(b,n)))throw new sjcl.exception.corrupt(\"ocb: tag doesn't match\");return o.concat(h.clamp(l,m))},pmac:function(a,b){var c,d=sjcl.mode.ocb2.A,e=sjcl.bitArray,f=e.k,g=[0,0,0,0],h=a.encrypt([0,0,0,0]);h=f(h,d(d(h)));for(c=0;c+4<b.length;c+=4){h=d(h);g=f(g,a.encrypt(f(h,b.slice(c,c+4))))}b=b.slice(c);if(e.bitLength(b)<128){h=f(h,d(h));b=e.concat(b,[2147483648|0])}g=f(g,b);return a.encrypt(f(d(f(h,d(h))),g))},A:function(a){return[a[0]<<\n\
+1^a[1]>>>31,a[1]<<1^a[2]>>>31,a[2]<<1^a[3]>>>31,a[3]<<1^(a[0]>>>31)*135]}};sjcl.misc.hmac=function(a,b){this.M=b=b||sjcl.hash.sha256;var c=[[],[]],d=b.prototype.blockSize/32;this.l=[new b,new b];if(a.length>d)a=b.hash(a);for(b=0;b<d;b++){c[0][b]=a[b]^909522486;c[1][b]=a[b]^1549556828}this.l[0].update(c[0]);this.l[1].update(c[1])};sjcl.misc.hmac.prototype.encrypt=sjcl.misc.hmac.prototype.mac=function(a,b){a=(new this.M(this.l[0])).update(a,b).finalize();return(new this.M(this.l[1])).update(a).finalize()};\n\
+sjcl.misc.pbkdf2=function(a,b,c,d,e){c=c||1E3;if(d<0||c<0)throw sjcl.exception.invalid(\"invalid params to pbkdf2\");if(typeof a===\"string\")a=sjcl.codec.utf8String.toBits(a);e=e||sjcl.misc.hmac;a=new e(a);var f,g,h,i,k=[],j=sjcl.bitArray;for(i=1;32*k.length<(d||1);i++){e=f=a.encrypt(j.concat(b,[i]));for(g=1;g<c;g++){f=a.encrypt(f);for(h=0;h<f.length;h++)e[h]^=f[h]}k=k.concat(e)}if(d)k=j.clamp(k,d);return k};\n\
+sjcl.random={randomWords:function(a,b){var c=[];b=this.isReady(b);var d;if(b===0)throw new sjcl.exception.notready(\"generator isn't seeded\");else b&2&&this.U(!(b&1));for(b=0;b<a;b+=4){(b+1)%0x10000===0&&this.L();d=this.u();c.push(d[0],d[1],d[2],d[3])}this.L();return c.slice(0,a)},setDefaultParanoia:function(a){this.t=a},addEntropy:function(a,b,c){c=c||\"user\";var d,e,f=(new Date).valueOf(),g=this.q[c],h=this.isReady();d=this.F[c];if(d===undefined)d=this.F[c]=this.R++;if(g===undefined)g=this.q[c]=0;this.q[c]=\n\
+(this.q[c]+1)%this.b.length;switch(typeof a){case \"number\":break;case \"object\":if(b===undefined)for(c=b=0;c<a.length;c++)for(e=a[c];e>0;){b++;e>>>=1}this.b[g].update([d,this.J++,2,b,f,a.length].concat(a));break;case \"string\":if(b===undefined)b=a.length;this.b[g].update([d,this.J++,3,b,f,a.length]);this.b[g].update(a);break;default:throw new sjcl.exception.bug(\"random: addEntropy only supports number, array or string\");}this.j[g]+=b;this.f+=b;if(h===0){this.isReady()!==0&&this.K(\"seeded\",Math.max(this.g,\n\
+this.f));this.K(\"progress\",this.getProgress())}},isReady:function(a){a=this.B[a!==undefined?a:this.t];return this.g&&this.g>=a?this.j[0]>80&&(new Date).valueOf()>this.O?3:1:this.f>=a?2:0},getProgress:function(a){a=this.B[a?a:this.t];return this.g>=a?1[\"0\"]:this.f>a?1[\"0\"]:this.f/a},startCollectors:function(){if(!this.m){if(window.addEventListener){window.addEventListener(\"load\",this.o,false);window.addEventListener(\"mousemove\",this.p,false)}else if(document.attachEvent){document.attachEvent(\"onload\",\n\
+this.o);document.attachEvent(\"onmousemove\",this.p)}else throw new sjcl.exception.bug(\"can't attach event\");this.m=true}},stopCollectors:function(){if(this.m){if(window.removeEventListener){window.removeEventListener(\"load\",this.o);window.removeEventListener(\"mousemove\",this.p)}else if(window.detachEvent){window.detachEvent(\"onload\",this.o);window.detachEvent(\"onmousemove\",this.p)}this.m=false}},addEventListener:function(a,b){this.r[a][this.Q++]=b},removeEventListener:function(a,b){var c;a=this.r[a];\n\
+var d=[];for(c in a)a.hasOwnProperty[c]&&a[c]===b&&d.push(c);for(b=0;b<d.length;b++){c=d[b];delete a[c]}},b:[new sjcl.hash.sha256],j:[0],z:0,q:{},J:0,F:{},R:0,g:0,f:0,O:0,a:[0,0,0,0,0,0,0,0],d:[0,0,0,0],s:undefined,t:6,m:false,r:{progress:{},seeded:{}},Q:0,B:[0,48,64,96,128,192,0x100,384,512,768,1024],u:function(){for(var a=0;a<4;a++){this.d[a]=this.d[a]+1|0;if(this.d[a])break}return this.s.encrypt(this.d)},L:function(){this.a=this.u().concat(this.u());this.s=new sjcl.cipher.aes(this.a)},T:function(a){this.a=\n\
+sjcl.hash.sha256.hash(this.a.concat(a));this.s=new sjcl.cipher.aes(this.a);for(a=0;a<4;a++){this.d[a]=this.d[a]+1|0;if(this.d[a])break}},U:function(a){var b=[],c=0,d;this.O=b[0]=(new Date).valueOf()+3E4;for(d=0;d<16;d++)b.push(Math.random()*0x100000000|0);for(d=0;d<this.b.length;d++){b=b.concat(this.b[d].finalize());c+=this.j[d];this.j[d]=0;if(!a&&this.z&1<<d)break}if(this.z>=1<<this.b.length){this.b.push(new sjcl.hash.sha256);this.j.push(0)}this.f-=c;if(c>this.g)this.g=c;this.z++;this.T(b)},p:function(a){sjcl.random.addEntropy([a.x||\n\
+a.clientX||a.offsetX,a.y||a.clientY||a.offsetY],2,\"mouse\")},o:function(){sjcl.random.addEntropy(new Date,2,\"loadtime\")},K:function(a,b){var c;a=sjcl.random.r[a];var d=[];for(c in a)a.hasOwnProperty(c)&&d.push(a[c]);for(c=0;c<d.length;c++)d[c](b)}};\n\
+sjcl.json={defaults:{v:1,iter:1E3,ks:128,ts:64,mode:\"ccm\",adata:\"\",cipher:\"aes\"},encrypt:function(a,b,c,d){c=c||{};d=d||{};var e=sjcl.json,f=e.c({iv:sjcl.random.randomWords(4,0)},e.defaults);e.c(f,c);if(typeof f.salt===\"string\")f.salt=sjcl.codec.base64.toBits(f.salt);if(typeof f.iv===\"string\")f.iv=sjcl.codec.base64.toBits(f.iv);if(!sjcl.mode[f.mode]||!sjcl.cipher[f.cipher]||typeof a===\"string\"&&f.iter<=100||f.ts!==64&&f.ts!==96&&f.ts!==128||f.ks!==128&&f.ks!==192&&f.ks!==0x100||f.iv.length<2||f.iv.length>\n\
+4)throw new sjcl.exception.invalid(\"json encrypt: invalid parameters\");if(typeof a===\"string\"){c=sjcl.misc.cachedPbkdf2(a,f);a=c.key.slice(0,f.ks/32);f.salt=c.salt}if(typeof b===\"string\")b=sjcl.codec.utf8String.toBits(b);c=new sjcl.cipher[f.cipher](a);e.c(d,f);d.key=a;f.ct=sjcl.mode[f.mode].encrypt(c,b,f.iv,f.adata,f.tag);return e.encode(e.V(f,e.defaults))},decrypt:function(a,b,c,d){c=c||{};d=d||{};var e=sjcl.json;b=e.c(e.c(e.c({},e.defaults),e.decode(b)),c,true);if(typeof b.salt===\"string\")b.salt=\n\
+sjcl.codec.base64.toBits(b.salt);if(typeof b.iv===\"string\")b.iv=sjcl.codec.base64.toBits(b.iv);if(!sjcl.mode[b.mode]||!sjcl.cipher[b.cipher]||typeof a===\"string\"&&b.iter<=100||b.ts!==64&&b.ts!==96&&b.ts!==128||b.ks!==128&&b.ks!==192&&b.ks!==0x100||!b.iv||b.iv.length<2||b.iv.length>4)throw new sjcl.exception.invalid(\"json decrypt: invalid parameters\");if(typeof a===\"string\"){c=sjcl.misc.cachedPbkdf2(a,b);a=c.key.slice(0,b.ks/32);b.salt=c.salt}c=new sjcl.cipher[b.cipher](a);c=sjcl.mode[b.mode].decrypt(c,\n\
+b.ct,b.iv,b.adata,b.tag);e.c(d,b);d.key=a;return sjcl.codec.utf8String.fromBits(c)},encode:function(a){var b,c=\"{\",d=\"\";for(b in a)if(a.hasOwnProperty(b)){if(!b.match(/^[a-z0-9]+$/i))throw new sjcl.exception.invalid(\"json encode: invalid property name\");c+=d+b+\":\";d=\",\";switch(typeof a[b]){case \"number\":case \"boolean\":c+=a[b];break;case \"string\":c+='\"'+escape(a[b])+'\"';break;case \"object\":c+='\"'+sjcl.codec.base64.fromBits(a[b],1)+'\"';break;default:throw new sjcl.exception.bug(\"json encode: unsupported type\");\n\
+}}return c+\"}\"},decode:function(a){a=a.replace(/\\s/g,\"\");if(!a.match(/^\\{.*\\}$/))throw new sjcl.exception.invalid(\"json decode: this isn't json!\");a=a.replace(/^\\{|\\}$/g,\"\").split(/,/);var b={},c,d;for(c=0;c<a.length;c++){if(!(d=a[c].match(/^([a-z][a-z0-9]*):(?:(\\d+)|\"([a-z0-9+\\/%*_.@=\\-]*)\")$/i)))throw new sjcl.exception.invalid(\"json decode: this isn't json!\");b[d[1]]=d[2]?parseInt(d[2],10):d[1].match(/^(ct|salt|iv)$/)?sjcl.codec.base64.toBits(d[3]):unescape(d[3])}return b},c:function(a,b,c){if(a===\n\
+undefined)a={};if(b===undefined)return a;var d;for(d in b)if(b.hasOwnProperty(d)){if(c&&a[d]!==undefined&&a[d]!==b[d])throw new sjcl.exception.invalid(\"required parameter overridden\");a[d]=b[d]}return a},V:function(a,b){var c={},d;for(d in a)if(a.hasOwnProperty(d)&&a[d]!==b[d])c[d]=a[d];return c},W:function(a,b){var c={},d;for(d=0;d<b.length;d++)if(a[b[d]]!==undefined)c[b[d]]=a[b[d]];return c}};sjcl.encrypt=sjcl.json.encrypt;sjcl.decrypt=sjcl.json.decrypt;sjcl.misc.S={};\n\
+sjcl.misc.cachedPbkdf2=function(a,b){var c=sjcl.misc.S,d;b=b||{};d=b.iter||1E3;c=c[a]=c[a]||{};d=c[d]=c[d]||{firstSalt:b.salt&&b.salt.length?b.salt.slice(0):sjcl.random.randomWords(2,0)};c=b.salt===undefined?d.firstSalt:b.salt;d[c]=d[c]||sjcl.misc.pbkdf2(a,c,b.iter);return{key:d[c].slice(0),salt:c.slice(0)}};\n\
+\n\
+\n\
+var browserUtil = {\n\
+ isRhino: true,\n\
+ \n\
+ pauseAndThen: function (cb) { cb(); },\n\
+ \n\
+ cpsIterate: function (f, start, end, pause, callback) {\n\
+ function go() {\n\
+ var called = false;\n\
+ if (start >= end) {\n\
+ callback && callback();\n\
+ } else {\n\
+ f(start, function () {\n\
+ if (!called) { called = true; start++; go(); }\n\
+ });\n\
+ }\n\
+ }\n\
+ go (start);\n\
+ },\n\
+ \n\
+ cpsMap: function (map, list, pause, callback) {\n\
+ browserUtil.cpsIterate(function (i, cb) { map(list[i], i, list.length, cb); },\n\
+ 0, list.length, pause, callback);\n\
+ },\n\
+\n\
+ loadScripts: function(scriptNames, callback) {\n\
+ for (i=0; i<scriptNames.length; i++) {\n\
+ load(scriptNames[i]);\n\
+ callback && callback();\n\
+ }\n\
+ },\n\
+ \n\
+ write: function(type, message) {\n\
+ print(message);\n\
+ return { update: function (type2, message2) {\n\
+ if (type2 === 'pass') { print(\" + \" + message2); }\n\
+ else if (type2 === 'unimplemented') { print(\" ? \" + message2); }\n\
+ else { print(\" - \" + message2); }\n\
+ }};\n\
+ },\n\
+ \n\
+ writeNewline: function () { print(\"\"); },\n\
+ \n\
+ status: function(message) {}\n\
+};\n\
+\n\
+sjcl.test = { vector: {}, all: {} };\n\
+\n\
+/* A bit of a hack. Because sjcl.test will be reloaded several times\n\
+ * for different variants of sjcl, but browserUtils will not, this\n\
+ * variable keeps a permanent record of whether anything has failed.\n\
+ */\n\
+if (typeof browserUtil.allPassed === 'undefined') {\n\
+ browserUtil.allPassed = true;\n\
+}\n\
+\n\
+sjcl.test.TestCase = function(name, doRun) {\n\
+ this.doRun = doRun;\n\
+ this.name = name;\n\
+ this.passes = 0;\n\
+ this.failures = 0;\n\
+ this.isUnimplemented = false;\n\
+ sjcl.test.all[name] = this;\n\
+};\n\
+\n\
+sjcl.test.TestCase.prototype = {\n\
+ /** Pass some subtest of this test */\n\
+ pass: function () { this.passes ++; },\n\
+ \n\
+ /** Fail some subtest of this test */\n\
+ fail: function (message) {\n\
+ if (message !== undefined) {\n\
+ this.log(\"fail\", \"*** FAIL *** \" + this.name + \": \" + message);\n\
+ } else {\n\
+ this.log(\"fail\", \"*** FAIL *** \" + this.name);\n\
+ }\n\
+ this.failures ++;\n\
+ browserUtil.allPassed = false;\n\
+ },\n\
+ \n\
+ unimplemented: function() {\n\
+ this.isUnimplemented = true;\n\
+ },\n\
+ \n\
+ /** Log a message to the console */\n\
+ log: browserUtil.write,\n\
+ \n\
+ /** Require that the first argument is true; otherwise fail with the given message */\n\
+ require: function (bool, message) {\n\
+ if (bool) {\n\
+ this.pass();\n\
+ } else if (message !== undefined) {\n\
+ this.fail(message);\n\
+ } else {\n\
+ this.fail(\"requirement failed\");\n\
+ }\n\
+ },\n\
+\n\
+ /** Pause and then take the specified action. */\n\
+ pauseAndThen: browserUtil.pauseAndThen,\n\
+ \n\
+ /** Continuation-passing-style iteration */\n\
+ cpsIterate: browserUtil.cpsIterate,\n\
+ \n\
+ /** Continuation-passing-style iteration */\n\
+ cpsMap: browserUtil.cpsMap,\n\
+\n\
+ /** Report the results of this test. */\n\
+ report: function (repo) {\n\
+ var t = (new Date()).valueOf() - this.startTime;\n\
+ if (this.failures !== 0) {\n\
+ repo.update(\"fail\", \"failed \" + this.failures + \" / \" +\n\
+ (this.passes + this.failures) + \" tests. (\" + t + \" ms)\");\n\
+ } else if (this.passes === 1) {\n\
+ repo.update(\"pass\", \"passed. (\" + t + \" ms)\");\n\
+ } else if (this.isUnimplemented) {\n\
+ repo.update(\"unimplemented\", \"unimplemented\");\n\
+ } else {\n\
+ repo.update(\"pass\", \"passed all \" + this.passes + \" tests. (\" + t + \" ms)\");\n\
+ }\n\
+ browserUtil.writeNewline();\n\
+ },\n\
+ \n\
+\n\
+ /** Run the test. */\n\
+ run: function (ntests, i, cb) {\n\
+ var thiz = this;\n\
+ this.startTime = (new Date()).valueOf();\n\
+ this.pauseAndThen(function () {\n\
+ thiz.doRun(function () {\n\
+ cb && cb();\n\
+ })\n\
+ });\n\
+ }\n\
+};\n\
+\n\
+// pass a list of tests to run, or pass nothing and it will run them all\n\
+sjcl.test.run = function (tests, callback) {\n\
+ var t;\n\
+ \n\
+ if (tests === undefined || tests.length == 0) {\n\
+ tests = [];\n\
+ for (t in sjcl.test.all) {\n\
+ if (sjcl.test.all.hasOwnProperty(t)) {\n\
+ tests.push(t);\n\
+ }\n\
+ }\n\
+ }\n\
+ \n\
+ browserUtil.cpsMap(function (t, i, n, cb) {\n\
+ sjcl.test.all[tests[i]].run(n, i+1, cb);\n\
+ }, tests, true, callback);\n\
+};\n\
+\n\
+/* Several test scripts rely on sjcl.codec.hex to parse their test\n\
+ * vectors, but we are not guaranteed that sjcl.codec.hex is\n\
+ * implemented.\n\
+ */\n\
+sjcl.codec = sjcl.codec || {};\n\
+sjcl.codec.hex = sjcl.codec.hex ||\n\
+{\n\
+ fromBits: function (arr) {\n\
+ var out = \"\", i, x;\n\
+ for (i=0; i<arr.length; i++) {\n\
+ out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);\n\
+ }\n\
+ return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, \"$1 \");\n\
+ },\n\
+ toBits: function (str) {\n\
+ var i, out=[], len;\n\
+ str = str.replace(/\\s|0x/g, \"\");\n\
+ len = str.length;\n\
+ str = str + \"00000000\";\n\
+ for (i=0; i<str.length; i+=8) {\n\
+ out.push(parseInt(str.substr(i,8),16)^0);\n\
+ }\n\
+ return sjcl.bitArray.clamp(out, len*4);\n\
+ }\n\
+};\n\
+\n\
+sjcl.test.vector.aes = [ \n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xf34481ec,0x3cc627ba,0xcd5dc3fb,0x08f273e6],\n\
+ ct: [0x0336763e,0x966d9259,0x5a567cc9,0xce537f5e] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x9798c464,0x0bad75c7,0xc3227db9,0x10174e72],\n\
+ ct: [0xa9a1631b,0xf4996954,0xebc09395,0x7b234589] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x96ab5c2f,0xf612d9df,0xaae8c31f,0x30c42168],\n\
+ ct: [0xff4f8391,0xa6a40ca5,0xb25d23be,0xdd44a597] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x6a118a87,0x4519e64e,0x9963798a,0x503f1d35],\n\
+ ct: [0xdc43be40,0xbe0e5371,0x2f7e2bf5,0xca707209] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xcb9fceec,0x81286ca3,0xe989bd97,0x9b0cb284],\n\
+ ct: [0x92beedab,0x1895a94f,0xaa69b632,0xe5cc47ce] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xb26aeb18,0x74e47ca8,0x358ff223,0x78f09144],\n\
+ ct: [0x459264f4,0x798f6a78,0xbacb89c1,0x5ed3d601] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x58c8e00b,0x2631686d,0x54eab84b,0x91f0aca1],\n\
+ ct: [0x08a4e2ef,0xec8a8e33,0x12ca7460,0xb9040bbf] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xf34481ec,0x3cc627ba,0xcd5dc3fb,0x08f273e6],\n\
+ ct: [0x0336763e,0x966d9259,0x5a567cc9,0xce537f5e] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x9798c464,0x0bad75c7,0xc3227db9,0x10174e72],\n\
+ ct: [0xa9a1631b,0xf4996954,0xebc09395,0x7b234589] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x96ab5c2f,0xf612d9df,0xaae8c31f,0x30c42168],\n\
+ ct: [0xff4f8391,0xa6a40ca5,0xb25d23be,0xdd44a597] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x6a118a87,0x4519e64e,0x9963798a,0x503f1d35],\n\
+ ct: [0xdc43be40,0xbe0e5371,0x2f7e2bf5,0xca707209] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xcb9fceec,0x81286ca3,0xe989bd97,0x9b0cb284],\n\
+ ct: [0x92beedab,0x1895a94f,0xaa69b632,0xe5cc47ce] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xb26aeb18,0x74e47ca8,0x358ff223,0x78f09144],\n\
+ ct: [0x459264f4,0x798f6a78,0xbacb89c1,0x5ed3d601] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x58c8e00b,0x2631686d,0x54eab84b,0x91f0aca1],\n\
+ ct: [0x08a4e2ef,0xec8a8e33,0x12ca7460,0xb9040bbf] },\n\
+ { key: [0x10a58869,0xd74be5a3,0x74cf867c,0xfb473859],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6d251e69,0x44b051e0,0x4eaa6fb4,0xdbf78465] },\n\
+ { key: [0xcaea65cd,0xbb75e916,0x9ecd22eb,0xe6e54675],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6e292011,0x90152df4,0xee058139,0xdef610bb] },\n\
+ { key: [0xa2e2fa9b,0xaf7d2082,0x2ca9f054,0x2f764a41],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc3b44b95,0xd9d2f256,0x70eee9a0,0xde099fa3] },\n\
+ { key: [0xb6364ac4,0xe1de1e28,0x5eaf144a,0x2415f7a0],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x5d9b0557,0x8fc944b3,0xcf1ccf0e,0x746cd581] },\n\
+ { key: [0x64cf9c7a,0xbc50b888,0xaf65f49d,0x521944b2],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf7efc89d,0x5dba5781,0x04016ce5,0xad659c05] },\n\
+ { key: [0x47d6742e,0xefcc0465,0xdc96355e,0x851b64d9],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x0306194f,0x666d1836,0x24aa230a,0x8b264ae7] },\n\
+ { key: [0x3eb39790,0x678c56be,0xe34bbcde,0xccf6cdb5],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x858075d5,0x36d79cce,0xe571f7d7,0x204b1f67] },\n\
+ { key: [0x64110a92,0x4f0743d5,0x00ccadae,0x72c13427],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x35870c6a,0x57e9e923,0x14bcb808,0x7cde72ce] },\n\
+ { key: [0x18d81265,0x16f8a12a,0xb1a36d9f,0x04d68e51],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6c68e9be,0x5ec41e22,0xc825b7c7,0xaffb4363] },\n\
+ { key: [0xf5303579,0x68578480,0xb398a3c2,0x51cd1093],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf5df3999,0x0fc688f1,0xb07224cc,0x03e86cea] },\n\
+ { key: [0xda84367f,0x325d42d6,0x01b43269,0x64802e8e],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xbba071bc,0xb470f8f6,0x586e5d3a,0xdd18bc66] },\n\
+ { key: [0xe37b1c6a,0xa2846f6f,0xdb413f23,0x8b089f23],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x43c9f7e6,0x2f5d288b,0xb27aa40e,0xf8fe1ea8] },\n\
+ { key: [0x6c002b68,0x2483e0ca,0xbcc731c2,0x53be5674],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3580d19c,0xff44f101,0x4a7c966a,0x69059de5] },\n\
+ { key: [0x143ae8ed,0x6555aba9,0x6110ab58,0x893a8ae1],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x806da864,0xdd29d48d,0xeafbe764,0xf8202aef] },\n\
+ { key: [0xb69418a8,0x5332240d,0xc8249235,0x3956ae0c],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa303d940,0xded8f0ba,0xff6f7541,0x4cac5243] },\n\
+ { key: [0x71b5c08a,0x1993e136,0x2e4d0ce9,0xb22b78d5],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc2dabd11,0x7f8a3eca,0xbfbb11d1,0x2194d9d0] },\n\
+ { key: [0xe234cdca,0x2606b81f,0x29408d5f,0x6da21206],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xfff60a47,0x40086b3b,0x9c56195b,0x98d91a7b] },\n\
+ { key: [0x13237c49,0x074a3da0,0x78dc1d82,0x8bb78c6f],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8146a08e,0x2357f0ca,0xa30ca8c9,0x4d1a0544] },\n\
+ { key: [0x3071a2a4,0x8fe6cbd0,0x4f1a1290,0x98e308f8],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x4b98e06d,0x356deb07,0xebb824e5,0x713f7be3] },\n\
+ { key: [0x90f42ec0,0xf68385f2,0xffc5dfc0,0x3a654dce],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x7a20a53d,0x460fc9ce,0x0423a7a0,0x764c6cf2] },\n\
+ { key: [0xfebd9a24,0xd8b65c1c,0x787d50a4,0xed3619a9],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf4a70d8a,0xf877f9b0,0x2b4c40df,0x57d45b17] },\n\
+ { key: [0x10a58869,0xd74be5a3,0x74cf867c,0xfb473859],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6d251e69,0x44b051e0,0x4eaa6fb4,0xdbf78465] },\n\
+ { key: [0xcaea65cd,0xbb75e916,0x9ecd22eb,0xe6e54675],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6e292011,0x90152df4,0xee058139,0xdef610bb] },\n\
+ { key: [0xa2e2fa9b,0xaf7d2082,0x2ca9f054,0x2f764a41],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc3b44b95,0xd9d2f256,0x70eee9a0,0xde099fa3] },\n\
+ { key: [0xb6364ac4,0xe1de1e28,0x5eaf144a,0x2415f7a0],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x5d9b0557,0x8fc944b3,0xcf1ccf0e,0x746cd581] },\n\
+ { key: [0x64cf9c7a,0xbc50b888,0xaf65f49d,0x521944b2],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf7efc89d,0x5dba5781,0x04016ce5,0xad659c05] },\n\
+ { key: [0x47d6742e,0xefcc0465,0xdc96355e,0x851b64d9],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x0306194f,0x666d1836,0x24aa230a,0x8b264ae7] },\n\
+ { key: [0x3eb39790,0x678c56be,0xe34bbcde,0xccf6cdb5],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x858075d5,0x36d79cce,0xe571f7d7,0x204b1f67] },\n\
+ { key: [0x64110a92,0x4f0743d5,0x00ccadae,0x72c13427],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x35870c6a,0x57e9e923,0x14bcb808,0x7cde72ce] },\n\
+ { key: [0x18d81265,0x16f8a12a,0xb1a36d9f,0x04d68e51],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6c68e9be,0x5ec41e22,0xc825b7c7,0xaffb4363] },\n\
+ { key: [0xf5303579,0x68578480,0xb398a3c2,0x51cd1093],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf5df3999,0x0fc688f1,0xb07224cc,0x03e86cea] },\n\
+ { key: [0xda84367f,0x325d42d6,0x01b43269,0x64802e8e],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xbba071bc,0xb470f8f6,0x586e5d3a,0xdd18bc66] },\n\
+ { key: [0xe37b1c6a,0xa2846f6f,0xdb413f23,0x8b089f23],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x43c9f7e6,0x2f5d288b,0xb27aa40e,0xf8fe1ea8] },\n\
+ { key: [0x6c002b68,0x2483e0ca,0xbcc731c2,0x53be5674],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3580d19c,0xff44f101,0x4a7c966a,0x69059de5] },\n\
+ { key: [0x143ae8ed,0x6555aba9,0x6110ab58,0x893a8ae1],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x806da864,0xdd29d48d,0xeafbe764,0xf8202aef] },\n\
+ { key: [0xb69418a8,0x5332240d,0xc8249235,0x3956ae0c],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa303d940,0xded8f0ba,0xff6f7541,0x4cac5243] },\n\
+ { key: [0x71b5c08a,0x1993e136,0x2e4d0ce9,0xb22b78d5],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc2dabd11,0x7f8a3eca,0xbfbb11d1,0x2194d9d0] },\n\
+ { key: [0xe234cdca,0x2606b81f,0x29408d5f,0x6da21206],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xfff60a47,0x40086b3b,0x9c56195b,0x98d91a7b] },\n\
+ { key: [0x13237c49,0x074a3da0,0x78dc1d82,0x8bb78c6f],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8146a08e,0x2357f0ca,0xa30ca8c9,0x4d1a0544] },\n\
+ { key: [0x3071a2a4,0x8fe6cbd0,0x4f1a1290,0x98e308f8],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x4b98e06d,0x356deb07,0xebb824e5,0x713f7be3] },\n\
+ { key: [0x90f42ec0,0xf68385f2,0xffc5dfc0,0x3a654dce],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x7a20a53d,0x460fc9ce,0x0423a7a0,0x764c6cf2] },\n\
+ { key: [0xfebd9a24,0xd8b65c1c,0x787d50a4,0xed3619a9],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf4a70d8a,0xf877f9b0,0x2b4c40df,0x57d45b17] },\n\
+ { key: [0x80000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x0edd33d3,0xc621e546,0x455bd8ba,0x1418bec8] },\n\
+ { key: [0xc0000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x4bc3f883,0x450c113c,0x64ca42e1,0x112a9e87] },\n\
+ { key: [0xe0000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x72a1da77,0x0f5d7ac4,0xc9ef94d8,0x22affd97] },\n\
+ { key: [0xf0000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x970014d6,0x34e2b765,0x0777e8e8,0x4d03ccd8] },\n\
+ { key: [0xf8000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf17e79ae,0xd0db7e27,0x9e955b5f,0x493875a7] },\n\
+ { key: [0xfc000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x9ed5a751,0x36a940d0,0x963da379,0xdb4af26a] },\n\
+ { key: [0xfe000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc4295f83,0x465c7755,0xe8fa364b,0xac6a7ea5] },\n\
+ { key: [0xff000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb1d75825,0x6b28fd85,0x0ad49442,0x08cf1155] },\n\
+ { key: [0xff800000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x42ffb34c,0x743de4d8,0x8ca38011,0xc990890b] },\n\
+ { key: [0xffc00000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x9958f0ec,0xea8b2172,0xc0c1995f,0x9182c0f3] },\n\
+ { key: [0xffe00000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x956d7798,0xfac20f82,0xa8823f98,0x4d06f7f5] },\n\
+ { key: [0xfff00000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa01bf44f,0x2d16be92,0x8ca44aaf,0x7b9b106b] },\n\
+ { key: [0xfff80000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb5f1a33e,0x50d40d10,0x3764c76b,0xd4c6b6f8] },\n\
+ { key: [0xfffc0000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x2637050c,0x9fc0d481,0x7e2d69de,0x878aee8d] },\n\
+ { key: [0xfffe0000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x113ecbe4,0xa453269a,0x0dd26069,0x467fb5b5] },\n\
+ { key: [0xffff0000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x97d0754f,0xe68f11b9,0xe375d070,0xa608c884] },\n\
+ { key: [0xffff8000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc6a0b3e9,0x98d05068,0xa5399778,0x405200b4] },\n\
+ { key: [0xffffc000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xdf556a33,0x438db87b,0xc41b1752,0xc55e5e49] },\n\
+ { key: [0xffffe000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x90fb128d,0x3a1af6e5,0x48521bb9,0x62bf1f05] },\n\
+ { key: [0xfffff000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x26298e9c,0x1db517c2,0x15fadfb7,0xd2a8d691] },\n\
+ { key: [0xfffff800,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa6cb761d,0x61f8292d,0x0df393a2,0x79ad0380] },\n\
+ { key: [0xfffffc00,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x12acd89b,0x13cd5f87,0x26e34d44,0xfd486108] },\n\
+ { key: [0xfffffe00,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x95b1703f,0xc57ba09f,0xe0c3580f,0xebdd7ed4] },\n\
+ { key: [0xffffff00,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xde11722d,0x893e9f91,0x21c381be,0xcc1da59a] },\n\
+ { key: [0xffffff80,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6d114ccb,0x27bf3910,0x12e8974c,0x546d9bf2] },\n\
+ { key: [0xffffffc0,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x5ce37e17,0xeb4646ec,0xfac29b9c,0xc38d9340] },\n\
+ { key: [0xffffffe0,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x18c1b6e2,0x15712205,0x6d0243d8,0xa165cddb] },\n\
+ { key: [0xfffffff0,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x99693e6a,0x59d1366c,0x74d82356,0x2d7e1431] },\n\
+ { key: [0xfffffff8,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6c7c64dc,0x84a8bba7,0x58ed17eb,0x025a57e3] },\n\
+ { key: [0xfffffffc,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xe17bc79f,0x30eaab2f,0xac2cbbe3,0x458d687a] },\n\
+ { key: [0xfffffffe,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x1114bc20,0x28009b92,0x3f0b0191,0x5ce5e7c4] },\n\
+ { key: [0xffffffff,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x9c28524a,0x16a1e1c1,0x452971ca,0xa8d13476] },\n\
+ { key: [0xffffffff,0x80000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xed62e163,0x63638360,0xfdd6ad62,0x112794f0] },\n\
+ { key: [0xffffffff,0xc0000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x5a8688f0,0xb2a2c162,0x24c16165,0x8ffd4044] },\n\
+ { key: [0xffffffff,0xe0000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x23f71084,0x2b9bb9c3,0x2f26648c,0x786807ca] },\n\
+ { key: [0xffffffff,0xf0000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x44a98bf1,0x1e163f63,0x2c47ec6a,0x49683a89] },\n\
+ { key: [0xffffffff,0xf8000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x0f18aff9,0x4274696d,0x9b61848b,0xd50ac5e5] },\n\
+ { key: [0xffffffff,0xfc000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x82408571,0xc3e24245,0x40207f83,0x3b6dda69] },\n\
+ { key: [0xffffffff,0xfe000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x303ff996,0x947f0c7d,0x1f43c8f3,0x027b9b75] },\n\
+ { key: [0xffffffff,0xff000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x7df4daf4,0xad29a361,0x5a9b6ece,0x5c99518a] },\n\
+ { key: [0xffffffff,0xff800000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc72954a4,0x8d0774db,0x0b4971c5,0x26260415] },\n\
+ { key: [0xffffffff,0xffc00000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x1df9b761,0x12dc6531,0xe07d2cfd,0xa04411f0] },\n\
+ { key: [0xffffffff,0xffe00000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8e4d8e69,0x9119e1fc,0x87545a64,0x7fb1d34f] },\n\
+ { key: [0xffffffff,0xfff00000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xe6c4807a,0xe11f36f0,0x91c57d9f,0xb68548d1] },\n\
+ { key: [0xffffffff,0xfff80000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8ebf73aa,0xd49c8200,0x7f77a5c1,0xccec6ab4] },\n\
+ { key: [0xffffffff,0xfffc0000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x4fb288cc,0x20400490,0x01d2c758,0x5ad123fc] },\n\
+ { key: [0xffffffff,0xfffe0000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x04497110,0xefb9dceb,0x13e2b13f,0xb4465564] },\n\
+ { key: [0xffffffff,0xffff0000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x75550e6c,0xb5a88e49,0x634c9ab6,0x9eda0430] },\n\
+ { key: [0xffffffff,0xffff8000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb6768473,0xce9843ea,0x66a81405,0xdd50b345] },\n\
+ { key: [0xffffffff,0xffffc000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xcb2f4303,0x83f9084e,0x03a65357,0x1e065de6] },\n\
+ { key: [0xffffffff,0xffffe000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xff4e66c0,0x7bae3e79,0xfb7d2108,0x47a3b0ba] },\n\
+ { key: [0xffffffff,0xfffff000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x7b907851,0x25505fad,0x59b13c18,0x6dd66ce3] },\n\
+ { key: [0xffffffff,0xfffff800,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8b527a6a,0xebdaec9e,0xaef8eda2,0xcb7783e5] },\n\
+ { key: [0xffffffff,0xfffffc00,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x43fdaf53,0xebbc9880,0xc228617d,0x6a9b548b] },\n\
+ { key: [0xffffffff,0xfffffe00,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x53786104,0xb9744b98,0xf052c46f,0x1c850d0b] },\n\
+ { key: [0xffffffff,0xffffff00,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb5ab3013,0xdd1e61df,0x06cbaf34,0xca2aee78] },\n\
+ { key: [0xffffffff,0xffffff80,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x7470469b,0xe9723030,0xfdcc73a8,0xcd4fbb10] },\n\
+ { key: [0xffffffff,0xffffffc0,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa35a63f5,0x343ebe9e,0xf8167bcb,0x48ad122e] },\n\
+ { key: [0xffffffff,0xffffffe0,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xfd8687f0,0x757a210e,0x9fdf1812,0x04c30863] },\n\
+ { key: [0xffffffff,0xfffffff0,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x7a181e84,0xbd5457d2,0x6a88fbae,0x96018fb0] },\n\
+ { key: [0xffffffff,0xfffffff8,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x653317b9,0x362b6f9b,0x9e1a580e,0x68d494b5] },\n\
+ { key: [0xffffffff,0xfffffffc,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x995c9dc0,0xb689f03c,0x45867b5f,0xaa5c18d1] },\n\
+ { key: [0xffffffff,0xfffffffe,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x77a4d96d,0x56dda398,0xb9aabecf,0xc75729fd] },\n\
+ { key: [0xffffffff,0xffffffff,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x84be19e0,0x53635f09,0xf2665e7b,0xae85b42d] },\n\
+ { key: [0xffffffff,0xffffffff,0x80000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x32cd6528,0x42926aea,0x4aa6137b,0xb2be2b5e] },\n\
+ { key: [0xffffffff,0xffffffff,0xc0000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x493d4a4f,0x38ebb337,0xd10aa84e,0x9171a554] },\n\
+ { key: [0xffffffff,0xffffffff,0xe0000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd9bff7ff,0x454b0ec5,0xa4a2a695,0x66e2cb84] },\n\
+ { key: [0xffffffff,0xffffffff,0xf0000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3535d565,0xace3f31e,0xb249ba2c,0xc6765d7a] },\n\
+ { key: [0xffffffff,0xffffffff,0xf8000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf60e91fc,0x3269eecf,0x3231c6e9,0x945697c6] },\n\
+ { key: [0xffffffff,0xffffffff,0xfc000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xab69cfad,0xf51f8e60,0x4d9cc371,0x82f6635a] },\n\
+ { key: [0xffffffff,0xffffffff,0xfe000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x7866373f,0x24a0b6ed,0x56e0d96f,0xcdafb877] },\n\
+ { key: [0xffffffff,0xffffffff,0xff000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x1ea448c2,0xaac954f5,0xd812e9d7,0x8494446a] },\n\
+ { key: [0xffffffff,0xffffffff,0xff800000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xacc5599d,0xd8ac0223,0x9a0fef4a,0x36dd1668] },\n\
+ { key: [0xffffffff,0xffffffff,0xffc00000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd8764468,0xbb103828,0xcf7e1473,0xce895073] },\n\
+ { key: [0xffffffff,0xffffffff,0xffe00000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x1b0d0289,0x3683b9f1,0x80458e4a,0xa6b73982] },\n\
+ { key: [0xffffffff,0xffffffff,0xfff00000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x96d9b017,0xd302df41,0x0a937dcd,0xb8bb6e43] },\n\
+ { key: [0xffffffff,0xffffffff,0xfff80000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xef1623cc,0x44313cff,0x440b1594,0xa7e21cc6] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffc0000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x284ca2fa,0x35807b8b,0x0ae4d19e,0x11d7dbd7] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffe0000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf2e97687,0x5755f940,0x1d54f36e,0x2a23a594] },\n\
+ { key: [0xffffffff,0xffffffff,0xffff0000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xec198a18,0xe10e5324,0x03b7e208,0x87c8dd80] },\n\
+ { key: [0xffffffff,0xffffffff,0xffff8000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x545d50eb,0xd919e4a6,0x949d96ad,0x47e46a80] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffc000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xdbdfb527,0x060e0a71,0x009c7bb0,0xc68f1d44] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffe000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x9cfa1322,0xea33da21,0x73a024f2,0xff0d896d] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffff000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8785b1a7,0x5b0f3bd9,0x58dcd0e2,0x9318c521] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffff800,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x38f67b9e,0x98e4a97b,0x6df030a9,0xfcdd0104] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffffc00,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x192afffb,0x2c880e82,0xb05926d0,0xfc6c448b] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffffe00,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6a7980ce,0x7b105cf5,0x30952d74,0xdaaf798c] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffff00,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xea3695e1,0x351b9d68,0x58bd958c,0xf513ef6c] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffff80,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6da0490b,0xa0ba0343,0xb935681d,0x2cce5ba1] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffc0,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf0ea23af,0x08534011,0xc60009ab,0x29ada2f1] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffe0,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xff13806c,0xf19cc387,0x21554d7c,0x0fcdcd4b] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffffff0,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6838af1f,0x4f69bae9,0xd85dd188,0xdcdf0688] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffffff8,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x36cf44c9,0x2d550bfb,0x1ed28ef5,0x83ddf5d7] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffffffc,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd06e3195,0xb5376f10,0x9d5c4ec6,0xc5d62ced] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffffffe,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc440de01,0x4d3d6107,0x07279b13,0x242a5c36] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf0c5c6ff,0xa5e0bd3a,0x94c88f6b,0x6f7c16b9] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0x80000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3e40c390,0x1cd7effc,0x22bffc35,0xdee0b4d9] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xc0000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb63305c7,0x2bedfab9,0x7382c406,0xd0c49bc6] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xe0000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x36bbaab2,0x2a6bd492,0x5a99a2b4,0x08d2dbae] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xf0000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x307c5b8f,0xcd0533ab,0x98bc51e2,0x7a6ce461] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xf8000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x829c04ff,0x4c07513c,0x0b3ef05c,0x03e337b5] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfc000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf17af0e8,0x95dda5eb,0x98efc680,0x66e84c54] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfe000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x277167f3,0x812afff1,0xffacb4a9,0x34379fc3] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xff000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x2cb1dc3a,0x9c72972e,0x425ae2ef,0x3eb597cd] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xff800000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x36aeaa3a,0x213e968d,0x4b5b679d,0x3a2c97fe] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffc00000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x9241daca,0x4fdd034a,0x82372db5,0x0e1a0f3f] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffe00000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc14574d9,0xcd00cf2b,0x5a7f77e5,0x3cd57885] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfff00000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x793de392,0x36570aba,0x83ab9b73,0x7cb521c9] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfff80000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x16591c0f,0x27d60e29,0xb85a96c3,0x3861a7ef] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffc0000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x44fb5c4d,0x4f5cb79b,0xe5c174a3,0xb1c97348] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffe0000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x674d2b61,0x633d162b,0xe59dde04,0x222f4740] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffff0000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb4750ff2,0x63a65e1f,0x9e924ccf,0xd98f3e37] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffff8000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x62d0662d,0x6eaedded,0xebae7f7e,0xa3a4f6b6] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffc000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x70c46bb3,0x0692be65,0x7f7eaa93,0xebad9897] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffe000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x323994cf,0xb9da285a,0x5d9642e1,0x759b224a] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffff000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x1dbf5787,0x7b7b1738,0x5c85d0b5,0x4851e371] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffff800],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xdfa5c097,0xcdc1532a,0xc071d57b,0x1d28d1bd] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffffc00],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3a0c53fa,0x37311fc1,0x0bd2a998,0x1f513174] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffffe00],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xba4f970c,0x0a25c418,0x14bdae2e,0x506be3b4] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffff00],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x2dce3acb,0x727cd13c,0xcd76d425,0xea56e4f6] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffff80],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x5160474d,0x504b9b3e,0xefb68d35,0xf245f4b3] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffc0],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x41a8a947,0x766635de,0xc37553d9,0xa6c0cbb7] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffe0],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x25d6cfe6,0x881f2bf4,0x97dd14cd,0x4ddf445b] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffffff0],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x41c78c13,0x5ed9e98c,0x09664064,0x7265da1e] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffffff8],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x5a4d404d,0x8917e353,0xe92a2107,0x2c3b2305] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffffffc],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x02bc9684,0x6b3fdc71,0x643f384c,0xd3cc3eaf] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffffffe],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x9ba4a914,0x3f4e5d40,0x48521c4f,0x8877d88e] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa1f6258c,0x877d5fcd,0x89644845,0x38bfc92c] },\n\
+ { key: [0x80000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x0edd33d3,0xc621e546,0x455bd8ba,0x1418bec8] },\n\
+ { key: [0xc0000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x4bc3f883,0x450c113c,0x64ca42e1,0x112a9e87] },\n\
+ { key: [0xe0000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x72a1da77,0x0f5d7ac4,0xc9ef94d8,0x22affd97] },\n\
+ { key: [0xf0000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x970014d6,0x34e2b765,0x0777e8e8,0x4d03ccd8] },\n\
+ { key: [0xf8000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf17e79ae,0xd0db7e27,0x9e955b5f,0x493875a7] },\n\
+ { key: [0xfc000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x9ed5a751,0x36a940d0,0x963da379,0xdb4af26a] },\n\
+ { key: [0xfe000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc4295f83,0x465c7755,0xe8fa364b,0xac6a7ea5] },\n\
+ { key: [0xff000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb1d75825,0x6b28fd85,0x0ad49442,0x08cf1155] },\n\
+ { key: [0xff800000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x42ffb34c,0x743de4d8,0x8ca38011,0xc990890b] },\n\
+ { key: [0xffc00000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x9958f0ec,0xea8b2172,0xc0c1995f,0x9182c0f3] },\n\
+ { key: [0xffe00000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x956d7798,0xfac20f82,0xa8823f98,0x4d06f7f5] },\n\
+ { key: [0xfff00000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa01bf44f,0x2d16be92,0x8ca44aaf,0x7b9b106b] },\n\
+ { key: [0xfff80000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb5f1a33e,0x50d40d10,0x3764c76b,0xd4c6b6f8] },\n\
+ { key: [0xfffc0000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x2637050c,0x9fc0d481,0x7e2d69de,0x878aee8d] },\n\
+ { key: [0xfffe0000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x113ecbe4,0xa453269a,0x0dd26069,0x467fb5b5] },\n\
+ { key: [0xffff0000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x97d0754f,0xe68f11b9,0xe375d070,0xa608c884] },\n\
+ { key: [0xffff8000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc6a0b3e9,0x98d05068,0xa5399778,0x405200b4] },\n\
+ { key: [0xffffc000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xdf556a33,0x438db87b,0xc41b1752,0xc55e5e49] },\n\
+ { key: [0xffffe000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x90fb128d,0x3a1af6e5,0x48521bb9,0x62bf1f05] },\n\
+ { key: [0xfffff000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x26298e9c,0x1db517c2,0x15fadfb7,0xd2a8d691] },\n\
+ { key: [0xfffff800,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa6cb761d,0x61f8292d,0x0df393a2,0x79ad0380] },\n\
+ { key: [0xfffffc00,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x12acd89b,0x13cd5f87,0x26e34d44,0xfd486108] },\n\
+ { key: [0xfffffe00,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x95b1703f,0xc57ba09f,0xe0c3580f,0xebdd7ed4] },\n\
+ { key: [0xffffff00,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xde11722d,0x893e9f91,0x21c381be,0xcc1da59a] },\n\
+ { key: [0xffffff80,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6d114ccb,0x27bf3910,0x12e8974c,0x546d9bf2] },\n\
+ { key: [0xffffffc0,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x5ce37e17,0xeb4646ec,0xfac29b9c,0xc38d9340] },\n\
+ { key: [0xffffffe0,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x18c1b6e2,0x15712205,0x6d0243d8,0xa165cddb] },\n\
+ { key: [0xfffffff0,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x99693e6a,0x59d1366c,0x74d82356,0x2d7e1431] },\n\
+ { key: [0xfffffff8,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6c7c64dc,0x84a8bba7,0x58ed17eb,0x025a57e3] },\n\
+ { key: [0xfffffffc,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xe17bc79f,0x30eaab2f,0xac2cbbe3,0x458d687a] },\n\
+ { key: [0xfffffffe,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x1114bc20,0x28009b92,0x3f0b0191,0x5ce5e7c4] },\n\
+ { key: [0xffffffff,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x9c28524a,0x16a1e1c1,0x452971ca,0xa8d13476] },\n\
+ { key: [0xffffffff,0x80000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xed62e163,0x63638360,0xfdd6ad62,0x112794f0] },\n\
+ { key: [0xffffffff,0xc0000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x5a8688f0,0xb2a2c162,0x24c16165,0x8ffd4044] },\n\
+ { key: [0xffffffff,0xe0000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x23f71084,0x2b9bb9c3,0x2f26648c,0x786807ca] },\n\
+ { key: [0xffffffff,0xf0000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x44a98bf1,0x1e163f63,0x2c47ec6a,0x49683a89] },\n\
+ { key: [0xffffffff,0xf8000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x0f18aff9,0x4274696d,0x9b61848b,0xd50ac5e5] },\n\
+ { key: [0xffffffff,0xfc000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x82408571,0xc3e24245,0x40207f83,0x3b6dda69] },\n\
+ { key: [0xffffffff,0xfe000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x303ff996,0x947f0c7d,0x1f43c8f3,0x027b9b75] },\n\
+ { key: [0xffffffff,0xff000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x7df4daf4,0xad29a361,0x5a9b6ece,0x5c99518a] },\n\
+ { key: [0xffffffff,0xff800000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc72954a4,0x8d0774db,0x0b4971c5,0x26260415] },\n\
+ { key: [0xffffffff,0xffc00000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x1df9b761,0x12dc6531,0xe07d2cfd,0xa04411f0] },\n\
+ { key: [0xffffffff,0xffe00000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8e4d8e69,0x9119e1fc,0x87545a64,0x7fb1d34f] },\n\
+ { key: [0xffffffff,0xfff00000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xe6c4807a,0xe11f36f0,0x91c57d9f,0xb68548d1] },\n\
+ { key: [0xffffffff,0xfff80000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8ebf73aa,0xd49c8200,0x7f77a5c1,0xccec6ab4] },\n\
+ { key: [0xffffffff,0xfffc0000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x4fb288cc,0x20400490,0x01d2c758,0x5ad123fc] },\n\
+ { key: [0xffffffff,0xfffe0000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x04497110,0xefb9dceb,0x13e2b13f,0xb4465564] },\n\
+ { key: [0xffffffff,0xffff0000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x75550e6c,0xb5a88e49,0x634c9ab6,0x9eda0430] },\n\
+ { key: [0xffffffff,0xffff8000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb6768473,0xce9843ea,0x66a81405,0xdd50b345] },\n\
+ { key: [0xffffffff,0xffffc000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xcb2f4303,0x83f9084e,0x03a65357,0x1e065de6] },\n\
+ { key: [0xffffffff,0xffffe000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xff4e66c0,0x7bae3e79,0xfb7d2108,0x47a3b0ba] },\n\
+ { key: [0xffffffff,0xfffff000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x7b907851,0x25505fad,0x59b13c18,0x6dd66ce3] },\n\
+ { key: [0xffffffff,0xfffff800,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8b527a6a,0xebdaec9e,0xaef8eda2,0xcb7783e5] },\n\
+ { key: [0xffffffff,0xfffffc00,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x43fdaf53,0xebbc9880,0xc228617d,0x6a9b548b] },\n\
+ { key: [0xffffffff,0xfffffe00,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x53786104,0xb9744b98,0xf052c46f,0x1c850d0b] },\n\
+ { key: [0xffffffff,0xffffff00,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb5ab3013,0xdd1e61df,0x06cbaf34,0xca2aee78] },\n\
+ { key: [0xffffffff,0xffffff80,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x7470469b,0xe9723030,0xfdcc73a8,0xcd4fbb10] },\n\
+ { key: [0xffffffff,0xffffffc0,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa35a63f5,0x343ebe9e,0xf8167bcb,0x48ad122e] },\n\
+ { key: [0xffffffff,0xffffffe0,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xfd8687f0,0x757a210e,0x9fdf1812,0x04c30863] },\n\
+ { key: [0xffffffff,0xfffffff0,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x7a181e84,0xbd5457d2,0x6a88fbae,0x96018fb0] },\n\
+ { key: [0xffffffff,0xfffffff8,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x653317b9,0x362b6f9b,0x9e1a580e,0x68d494b5] },\n\
+ { key: [0xffffffff,0xfffffffc,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x995c9dc0,0xb689f03c,0x45867b5f,0xaa5c18d1] },\n\
+ { key: [0xffffffff,0xfffffffe,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x77a4d96d,0x56dda398,0xb9aabecf,0xc75729fd] },\n\
+ { key: [0xffffffff,0xffffffff,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x84be19e0,0x53635f09,0xf2665e7b,0xae85b42d] },\n\
+ { key: [0xffffffff,0xffffffff,0x80000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x32cd6528,0x42926aea,0x4aa6137b,0xb2be2b5e] },\n\
+ { key: [0xffffffff,0xffffffff,0xc0000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x493d4a4f,0x38ebb337,0xd10aa84e,0x9171a554] },\n\
+ { key: [0xffffffff,0xffffffff,0xe0000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd9bff7ff,0x454b0ec5,0xa4a2a695,0x66e2cb84] },\n\
+ { key: [0xffffffff,0xffffffff,0xf0000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3535d565,0xace3f31e,0xb249ba2c,0xc6765d7a] },\n\
+ { key: [0xffffffff,0xffffffff,0xf8000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf60e91fc,0x3269eecf,0x3231c6e9,0x945697c6] },\n\
+ { key: [0xffffffff,0xffffffff,0xfc000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xab69cfad,0xf51f8e60,0x4d9cc371,0x82f6635a] },\n\
+ { key: [0xffffffff,0xffffffff,0xfe000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x7866373f,0x24a0b6ed,0x56e0d96f,0xcdafb877] },\n\
+ { key: [0xffffffff,0xffffffff,0xff000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x1ea448c2,0xaac954f5,0xd812e9d7,0x8494446a] },\n\
+ { key: [0xffffffff,0xffffffff,0xff800000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xacc5599d,0xd8ac0223,0x9a0fef4a,0x36dd1668] },\n\
+ { key: [0xffffffff,0xffffffff,0xffc00000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd8764468,0xbb103828,0xcf7e1473,0xce895073] },\n\
+ { key: [0xffffffff,0xffffffff,0xffe00000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x1b0d0289,0x3683b9f1,0x80458e4a,0xa6b73982] },\n\
+ { key: [0xffffffff,0xffffffff,0xfff00000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x96d9b017,0xd302df41,0x0a937dcd,0xb8bb6e43] },\n\
+ { key: [0xffffffff,0xffffffff,0xfff80000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xef1623cc,0x44313cff,0x440b1594,0xa7e21cc6] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffc0000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x284ca2fa,0x35807b8b,0x0ae4d19e,0x11d7dbd7] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffe0000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf2e97687,0x5755f940,0x1d54f36e,0x2a23a594] },\n\
+ { key: [0xffffffff,0xffffffff,0xffff0000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xec198a18,0xe10e5324,0x03b7e208,0x87c8dd80] },\n\
+ { key: [0xffffffff,0xffffffff,0xffff8000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x545d50eb,0xd919e4a6,0x949d96ad,0x47e46a80] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffc000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xdbdfb527,0x060e0a71,0x009c7bb0,0xc68f1d44] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffe000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x9cfa1322,0xea33da21,0x73a024f2,0xff0d896d] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffff000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8785b1a7,0x5b0f3bd9,0x58dcd0e2,0x9318c521] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffff800,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x38f67b9e,0x98e4a97b,0x6df030a9,0xfcdd0104] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffffc00,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x192afffb,0x2c880e82,0xb05926d0,0xfc6c448b] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffffe00,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6a7980ce,0x7b105cf5,0x30952d74,0xdaaf798c] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffff00,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xea3695e1,0x351b9d68,0x58bd958c,0xf513ef6c] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffff80,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6da0490b,0xa0ba0343,0xb935681d,0x2cce5ba1] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffc0,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf0ea23af,0x08534011,0xc60009ab,0x29ada2f1] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffe0,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xff13806c,0xf19cc387,0x21554d7c,0x0fcdcd4b] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffffff0,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6838af1f,0x4f69bae9,0xd85dd188,0xdcdf0688] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffffff8,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x36cf44c9,0x2d550bfb,0x1ed28ef5,0x83ddf5d7] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffffffc,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd06e3195,0xb5376f10,0x9d5c4ec6,0xc5d62ced] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffffffe,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc440de01,0x4d3d6107,0x07279b13,0x242a5c36] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf0c5c6ff,0xa5e0bd3a,0x94c88f6b,0x6f7c16b9] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0x80000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3e40c390,0x1cd7effc,0x22bffc35,0xdee0b4d9] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xc0000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb63305c7,0x2bedfab9,0x7382c406,0xd0c49bc6] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xe0000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x36bbaab2,0x2a6bd492,0x5a99a2b4,0x08d2dbae] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xf0000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x307c5b8f,0xcd0533ab,0x98bc51e2,0x7a6ce461] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xf8000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x829c04ff,0x4c07513c,0x0b3ef05c,0x03e337b5] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfc000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf17af0e8,0x95dda5eb,0x98efc680,0x66e84c54] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfe000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x277167f3,0x812afff1,0xffacb4a9,0x34379fc3] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xff000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x2cb1dc3a,0x9c72972e,0x425ae2ef,0x3eb597cd] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xff800000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x36aeaa3a,0x213e968d,0x4b5b679d,0x3a2c97fe] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffc00000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x9241daca,0x4fdd034a,0x82372db5,0x0e1a0f3f] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffe00000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc14574d9,0xcd00cf2b,0x5a7f77e5,0x3cd57885] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfff00000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x793de392,0x36570aba,0x83ab9b73,0x7cb521c9] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfff80000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x16591c0f,0x27d60e29,0xb85a96c3,0x3861a7ef] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffc0000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x44fb5c4d,0x4f5cb79b,0xe5c174a3,0xb1c97348] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffe0000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x674d2b61,0x633d162b,0xe59dde04,0x222f4740] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffff0000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb4750ff2,0x63a65e1f,0x9e924ccf,0xd98f3e37] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffff8000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x62d0662d,0x6eaedded,0xebae7f7e,0xa3a4f6b6] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffc000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x70c46bb3,0x0692be65,0x7f7eaa93,0xebad9897] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffe000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x323994cf,0xb9da285a,0x5d9642e1,0x759b224a] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffff000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x1dbf5787,0x7b7b1738,0x5c85d0b5,0x4851e371] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffff800],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xdfa5c097,0xcdc1532a,0xc071d57b,0x1d28d1bd] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffffc00],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3a0c53fa,0x37311fc1,0x0bd2a998,0x1f513174] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffffe00],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xba4f970c,0x0a25c418,0x14bdae2e,0x506be3b4] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffff00],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x2dce3acb,0x727cd13c,0xcd76d425,0xea56e4f6] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffff80],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x5160474d,0x504b9b3e,0xefb68d35,0xf245f4b3] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffc0],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x41a8a947,0x766635de,0xc37553d9,0xa6c0cbb7] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffe0],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x25d6cfe6,0x881f2bf4,0x97dd14cd,0x4ddf445b] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffffff0],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x41c78c13,0x5ed9e98c,0x09664064,0x7265da1e] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffffff8],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x5a4d404d,0x8917e353,0xe92a2107,0x2c3b2305] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffffffc],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x02bc9684,0x6b3fdc71,0x643f384c,0xd3cc3eaf] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffffffe],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x9ba4a914,0x3f4e5d40,0x48521c4f,0x8877d88e] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa1f6258c,0x877d5fcd,0x89644845,0x38bfc92c] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x80000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3ad78e72,0x6c1ec02b,0x7ebfe92b,0x23d9ec34] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xc0000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xaae5939c,0x8efdf2f0,0x4e60b9fe,0x7117b2c2] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xe0000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf031d4d7,0x4f5dcbf3,0x9daaf8ca,0x3af6e527] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xf0000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x96d9fd5c,0xc4f07441,0x727df0f3,0x3e401a36] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xf8000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x30ccdb04,0x4646d7e1,0xf3ccea3d,0xca08b8c0] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfc000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x16ae4ce5,0x042a67ee,0x8e177b7c,0x587ecc82] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfe000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb6da0bb1,0x1a23855d,0x9c5cb1b4,0xc6412e0a] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xff000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xdb4f1aa5,0x30967d67,0x32ce4715,0xeb0ee24b] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xff800000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa8173825,0x2621dd18,0x0a34f345,0x5b4baa2f] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffc00000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x77e2b508,0xdb7fd892,0x34caf793,0x9ee5621a] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffe00000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb8499c25,0x1f8442ee,0x13f0933b,0x688fcd19] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfff00000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x965135f8,0xa81f25c9,0xd630b175,0x02f68e53] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfff80000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8b87145a,0x01ad1c6c,0xede995ea,0x3670454f] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffc0000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8eae3b10,0xa0c8ca6d,0x1d3b0fa6,0x1e56b0b2] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffe0000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x64b4d629,0x810fda6b,0xafdf08f3,0xb0d8d2c5] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffff0000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd7e5dbd3,0x324595f8,0xfdc7d7c5,0x71da6c2a] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffff8000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf3f72375,0x264e167f,0xca9de2c1,0x527d9606] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffc000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8ee79dd4,0xf401ff9b,0x7ea945d8,0x6666c13b] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffe000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xdd35cea2,0x799940b4,0x0db3f819,0xcb94c08b] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffff000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6941cb6b,0x3e08c2b7,0xafa581eb,0xdd607b87] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffff800,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x2c20f439,0xf6bb097b,0x29b8bd6d,0x99aad799] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffffc00,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x625d01f0,0x58e565f7,0x7ae86378,0xbd2c49b3] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffffe00,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc0b5fd98,0x190ef45f,0xbb430143,0x8d095950] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffff00,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x13001ff5,0xd99806ef,0xd25da34f,0x56be854b] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffff80,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3b594c60,0xf5c8277a,0x5113677f,0x94208d82] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffc0,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xe9c0fc18,0x18e4aa46,0xbd2e39d6,0x38f89e05] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffe0,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf8023ee9,0xc3fdc45a,0x019b4e98,0x5c7e1a54] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffffff0,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x35f40182,0xab4662f3,0x023baec1,0xee796b57] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffffff8,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3aebbad7,0x303649b4,0x194a6945,0xc6cc3694] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffffffc,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa2124bea,0x53ec2834,0x279bed7f,0x7eb0f938] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffffffe,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb9fb4399,0xfa4facc7,0x309e14ec,0x98360b0a] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc2627743,0x7420c5d6,0x34f715ae,0xa81a9132] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0x80000000,0x00000000,0x00000000],\n\
+ ct: [0x171a0e1b,0x2dd424f0,0xe089af2c,0x4c10f32f] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xc0000000,0x00000000,0x00000000],\n\
+ ct: [0x7cadbe40,0x2d1b208f,0xe735edce,0x00aee7ce] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xe0000000,0x00000000,0x00000000],\n\
+ ct: [0x43b02ff9,0x29a1485a,0xf6f5c6d6,0x558baa0f] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xf0000000,0x00000000,0x00000000],\n\
+ ct: [0x092faacc,0x9bf43508,0xbf8fa861,0x3ca75dea] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xf8000000,0x00000000,0x00000000],\n\
+ ct: [0xcb2bf828,0x0f3f9742,0xc7ed513f,0xe802629c] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfc000000,0x00000000,0x00000000],\n\
+ ct: [0x215a41ee,0x442fa992,0xa6e32398,0x6ded3f68] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfe000000,0x00000000,0x00000000],\n\
+ ct: [0xf21e99cf,0x4f0f77ce,0xa836e11a,0x2fe75fb1] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xff000000,0x00000000,0x00000000],\n\
+ ct: [0x95e3a0ca,0x9079e646,0x331df8b4,0xe70d2cd6] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xff800000,0x00000000,0x00000000],\n\
+ ct: [0x4afe7f12,0x0ce7613f,0x74fc12a0,0x1a828073] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffc00000,0x00000000,0x00000000],\n\
+ ct: [0x827f000e,0x75e2c8b9,0xd479beed,0x913fe678] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffe00000,0x00000000,0x00000000],\n\
+ ct: [0x35830c8e,0x7aaefe2d,0x30310ef3,0x81cbf691] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfff00000,0x00000000,0x00000000],\n\
+ ct: [0x191aa0f2,0xc8570144,0xf38657ea,0x4085ebe5] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfff80000,0x00000000,0x00000000],\n\
+ ct: [0x85062c2c,0x909f15d9,0x269b6c18,0xce99c4f0] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffc0000,0x00000000,0x00000000],\n\
+ ct: [0x678034dc,0x9e41b5a5,0x60ed239e,0xeab1bc78] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffe0000,0x00000000,0x00000000],\n\
+ ct: [0xc2f93a4c,0xe5ab6d5d,0x56f1b93c,0xf19911c1] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffff0000,0x00000000,0x00000000],\n\
+ ct: [0x1c3112bc,0xb0c1dcc7,0x49d79974,0x3691bf82] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffff8000,0x00000000,0x00000000],\n\
+ ct: [0x00c55bd7,0x5c7f9c88,0x1989d3ec,0x1911c0d4] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffc000,0x00000000,0x00000000],\n\
+ ct: [0xea2e6b5e,0xf182b7df,0xf3629abd,0x6a12045f] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffe000,0x00000000,0x00000000],\n\
+ ct: [0x22322327,0xe01780b1,0x7397f240,0x87f8cc6f] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffff000,0x00000000,0x00000000],\n\
+ ct: [0xc9cacb5c,0xd11692c3,0x73b24117,0x68149ee7] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffff800,0x00000000,0x00000000],\n\
+ ct: [0xa18e3dbb,0xca577860,0xdab6b80d,0xa3139256] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffffc00,0x00000000,0x00000000],\n\
+ ct: [0x79b61c37,0xbf328ecc,0xa8d74326,0x5a3d425c] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffffe00,0x00000000,0x00000000],\n\
+ ct: [0xd2d99c6b,0xcc1f06fd,0xa8e27e8a,0xe3f1ccc7] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffff00,0x00000000,0x00000000],\n\
+ ct: [0x1bfd4b91,0xc701fd6b,0x61b7f997,0x829d663b] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffff80,0x00000000,0x00000000],\n\
+ ct: [0x11005d52,0xf25f16bd,0xc9545a87,0x6a63490a] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffc0,0x00000000,0x00000000],\n\
+ ct: [0x3a4d354f,0x02bb5a5e,0x47d39666,0x867f246a] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffe0,0x00000000,0x00000000],\n\
+ ct: [0xd451b8d6,0xe1e1a0eb,0xb155fbbf,0x6e7b7dc3] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffffff0,0x00000000,0x00000000],\n\
+ ct: [0x6898d4f4,0x2fa7ba6a,0x10ac05e8,0x7b9f2080] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffffff8,0x00000000,0x00000000],\n\
+ ct: [0xb611295e,0x739ca7d9,0xb50f8e4c,0x0e754a3f] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffffffc,0x00000000,0x00000000],\n\
+ ct: [0x7d33fc7d,0x8abe3ca1,0x936759f8,0xf5deaf20] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffffffe,0x00000000,0x00000000],\n\
+ ct: [0x3b5e0f56,0x6dc96c29,0x8f0c1263,0x7539b25c] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0x00000000,0x00000000],\n\
+ ct: [0xf807c3e7,0x985fe0f5,0xa50e2cdb,0x25c5109e] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0x80000000,0x00000000],\n\
+ ct: [0x41f992a8,0x56fb278b,0x389a62f5,0xd274d7e9] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xc0000000,0x00000000],\n\
+ ct: [0x10d3ed7a,0x6fe15ab4,0xd91acbc7,0xd0767ab1] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xe0000000,0x00000000],\n\
+ ct: [0x21feecd4,0x5b2e6759,0x73ac33bf,0x0c5424fc] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xf0000000,0x00000000],\n\
+ ct: [0x1480cb39,0x55ba62d0,0x9eea668f,0x7c708817] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xf8000000,0x00000000],\n\
+ ct: [0x66404033,0xd6b72b60,0x9354d549,0x6e7eb511] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfc000000,0x00000000],\n\
+ ct: [0x1c317a22,0x0a7d700d,0xa2b1e075,0xb00266e1] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfe000000,0x00000000],\n\
+ ct: [0xab3b8954,0x2233f127,0x1bf8fd0c,0x0f403545] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xff000000,0x00000000],\n\
+ ct: [0xd93eae96,0x6fac46dc,0xa927d6b1,0x14fa3f9e] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xff800000,0x00000000],\n\
+ ct: [0x1bdec521,0x316503d9,0xd5ee65df,0x3ea94ddf] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffc00000,0x00000000],\n\
+ ct: [0xeef45643,0x1dea8b4a,0xcf83bdae,0x3717f75f] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffe00000,0x00000000],\n\
+ ct: [0x06f2519a,0x2fafaa59,0x6bfef5cf,0xa15c21b9] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfff00000,0x00000000],\n\
+ ct: [0x251a7eac,0x7e2fe809,0xe4aa8d0d,0x7012531a] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfff80000,0x00000000],\n\
+ ct: [0x3bffc16e,0x4c49b268,0xa20f8d96,0xa60b4058] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffc0000,0x00000000],\n\
+ ct: [0xe886f928,0x1999c5bb,0x3b3e8862,0xe2f7c988] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffe0000,0x00000000],\n\
+ ct: [0x563bf90d,0x61beef39,0xf48dd625,0xfcef1361] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffff0000,0x00000000],\n\
+ ct: [0x4d37c850,0x644563c6,0x9fd0acd9,0xa049325b] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffff8000,0x00000000],\n\
+ ct: [0xb87c921b,0x91829ef3,0xb13ca541,0xee1130a6] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffc000,0x00000000],\n\
+ ct: [0x2e65eb6b,0x6ea383e1,0x09accce8,0x326b0393] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffe000,0x00000000],\n\
+ ct: [0x9ca547f7,0x439edc3e,0x255c0f4d,0x49aa8990] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffff000,0x00000000],\n\
+ ct: [0xa5e65261,0x4c9300f3,0x7816b1f9,0xfd0c87f9] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffff800,0x00000000],\n\
+ ct: [0x14954f0b,0x4697776f,0x44494fe4,0x58d814ed] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffffc00,0x00000000],\n\
+ ct: [0x7c8d9ab6,0xc2761723,0xfe42f8bb,0x506cbcf7] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffffe00,0x00000000],\n\
+ ct: [0xdb7e1932,0x679fdd99,0x742aab04,0xaa0d5a80] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffff00,0x00000000],\n\
+ ct: [0x4c6a1c83,0xe568cd10,0xf27c2d73,0xded19c28] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffff80,0x00000000],\n\
+ ct: [0x90ecbe61,0x77e674c9,0x8de41241,0x3f7ac915] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffc0,0x00000000],\n\
+ ct: [0x90684a2a,0xc55fe1ec,0x2b8ebd56,0x22520b73] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffe0,0x00000000],\n\
+ ct: [0x7472f9a7,0x988607ca,0x79707795,0x991035e6] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffffff0,0x00000000],\n\
+ ct: [0x56aff089,0x878bf335,0x2f8df172,0xa3ae47d8] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffffff8,0x00000000],\n\
+ ct: [0x65c0526c,0xbe40161b,0x8019a2a3,0x171abd23] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffffffc,0x00000000],\n\
+ ct: [0x377be0be,0x33b4e3e3,0x10b4aabd,0xa173f84f] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffffffe,0x00000000],\n\
+ ct: [0x9402e9aa,0x6f69de65,0x04da8d20,0xc4fcaa2f] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0x00000000],\n\
+ ct: [0x123c1f4a,0xf313ad8c,0x2ce648b2,0xe71fb6e1] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0x80000000],\n\
+ ct: [0x1ffc626d,0x30203dcd,0xb0019fb8,0x0f726cf4] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xc0000000],\n\
+ ct: [0x76da1fbe,0x3a50728c,0x50fd2e62,0x1b5ad885] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xe0000000],\n\
+ ct: [0x082eb8be,0x35f442fb,0x52668e16,0xa591d1d6] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xf0000000],\n\
+ ct: [0xe656f9ec,0xf5fe27ec,0x3e4a73d0,0x0c282fb3] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xf8000000],\n\
+ ct: [0x2ca8209d,0x63274cd9,0xa29bb74b,0xcd77683a] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfc000000],\n\
+ ct: [0x79bf5dce,0x14bb7dd7,0x3a8e3611,0xde7ce026] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfe000000],\n\
+ ct: [0x3c849939,0xa5d29399,0xf344c4a0,0xeca8a576] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xff000000],\n\
+ ct: [0xed3c0a94,0xd59bece9,0x8835da7a,0xa4f07ca2] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xff800000],\n\
+ ct: [0x63919ed4,0xce101964,0x38b6ad09,0xd99cd795] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffc00000],\n\
+ ct: [0x7678f3a8,0x33f19fea,0x95f3c602,0x9e2bc610] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffe00000],\n\
+ ct: [0x3aa42683,0x1067d36b,0x92be7c5f,0x81c13c56] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfff00000],\n\
+ ct: [0x9272e2d2,0xcdd11050,0x998c8450,0x77a30ea0] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfff80000],\n\
+ ct: [0x088c4b53,0xf5ec0ff8,0x14c19ada,0xe7f6246c] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffc0000],\n\
+ ct: [0x4010a5e4,0x01fdf0a0,0x354ddbcc,0x0d012b17] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffe0000],\n\
+ ct: [0xa87a3857,0x36c0a618,0x9bd6589b,0xd8445a93] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffff0000],\n\
+ ct: [0x545f2b83,0xd9616dcc,0xf60fa983,0x0e9cd287] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffff8000],\n\
+ ct: [0x4b706f7f,0x92406352,0x394037a6,0xd4f4688d] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffffc000],\n\
+ ct: [0xb7972b39,0x41c44b90,0xafa7b264,0xbfba7387] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffffe000],\n\
+ ct: [0x6f45732c,0xf1088154,0x6f0fd238,0x96d2bb60] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffff000],\n\
+ ct: [0x2e3579ca,0x15af27f6,0x4b3c955a,0x5bfc30ba] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffff800],\n\
+ ct: [0x34a2c5a9,0x1ae2aec9,0x9b7d1b5f,0xa6780447] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffffc00],\n\
+ ct: [0xa4d6616b,0xd04f8733,0x5b0e5335,0x1227a9ee] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffffe00],\n\
+ ct: [0x7f692b03,0x945867d1,0x6179a8ce,0xfc83ea3f] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffffff00],\n\
+ ct: [0x3bd141ee,0x84a0e641,0x4a26e7a4,0xf281f8a2] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffffff80],\n\
+ ct: [0xd1788f57,0x2d98b2b1,0x6ec5d5f3,0x922b99bc] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffffffc0],\n\
+ ct: [0x0833ff6f,0x61d98a57,0xb288e8c3,0x586b85a6] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffffffe0],\n\
+ ct: [0x85682617,0x97de176b,0xf0b43bec,0xc6285afb] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffffff0],\n\
+ ct: [0xf9b0fda0,0xc4a898f5,0xb9e6f661,0xc4ce4d07] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffffff8],\n\
+ ct: [0x8ade8959,0x13685c67,0xc5269f8a,0xae42983e] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffffffc],\n\
+ ct: [0x39bde67d,0x5c8ed8a8,0xb1c37eb8,0xfa9f5ac0] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffffffe],\n\
+ ct: [0x5c005e72,0xc1418c44,0xf569f2ea,0x33ba54f3] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffffffff],\n\
+ ct: [0x3f5b8cc9,0xea855a0a,0xfa7347d2,0x3e8d664e] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x80000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3ad78e72,0x6c1ec02b,0x7ebfe92b,0x23d9ec34] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xc0000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xaae5939c,0x8efdf2f0,0x4e60b9fe,0x7117b2c2] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xe0000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf031d4d7,0x4f5dcbf3,0x9daaf8ca,0x3af6e527] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xf0000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x96d9fd5c,0xc4f07441,0x727df0f3,0x3e401a36] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xf8000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x30ccdb04,0x4646d7e1,0xf3ccea3d,0xca08b8c0] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfc000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x16ae4ce5,0x042a67ee,0x8e177b7c,0x587ecc82] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfe000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb6da0bb1,0x1a23855d,0x9c5cb1b4,0xc6412e0a] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xff000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xdb4f1aa5,0x30967d67,0x32ce4715,0xeb0ee24b] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xff800000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa8173825,0x2621dd18,0x0a34f345,0x5b4baa2f] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffc00000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x77e2b508,0xdb7fd892,0x34caf793,0x9ee5621a] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffe00000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb8499c25,0x1f8442ee,0x13f0933b,0x688fcd19] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfff00000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x965135f8,0xa81f25c9,0xd630b175,0x02f68e53] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfff80000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8b87145a,0x01ad1c6c,0xede995ea,0x3670454f] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffc0000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8eae3b10,0xa0c8ca6d,0x1d3b0fa6,0x1e56b0b2] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffe0000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x64b4d629,0x810fda6b,0xafdf08f3,0xb0d8d2c5] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffff0000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd7e5dbd3,0x324595f8,0xfdc7d7c5,0x71da6c2a] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffff8000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf3f72375,0x264e167f,0xca9de2c1,0x527d9606] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffc000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8ee79dd4,0xf401ff9b,0x7ea945d8,0x6666c13b] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffe000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xdd35cea2,0x799940b4,0x0db3f819,0xcb94c08b] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffff000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6941cb6b,0x3e08c2b7,0xafa581eb,0xdd607b87] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffff800,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x2c20f439,0xf6bb097b,0x29b8bd6d,0x99aad799] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffffc00,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x625d01f0,0x58e565f7,0x7ae86378,0xbd2c49b3] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffffe00,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc0b5fd98,0x190ef45f,0xbb430143,0x8d095950] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffff00,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x13001ff5,0xd99806ef,0xd25da34f,0x56be854b] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffff80,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3b594c60,0xf5c8277a,0x5113677f,0x94208d82] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffc0,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xe9c0fc18,0x18e4aa46,0xbd2e39d6,0x38f89e05] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffe0,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf8023ee9,0xc3fdc45a,0x019b4e98,0x5c7e1a54] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffffff0,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x35f40182,0xab4662f3,0x023baec1,0xee796b57] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffffff8,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3aebbad7,0x303649b4,0x194a6945,0xc6cc3694] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffffffc,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa2124bea,0x53ec2834,0x279bed7f,0x7eb0f938] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffffffe,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb9fb4399,0xfa4facc7,0x309e14ec,0x98360b0a] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc2627743,0x7420c5d6,0x34f715ae,0xa81a9132] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0x80000000,0x00000000,0x00000000],\n\
+ ct: [0x171a0e1b,0x2dd424f0,0xe089af2c,0x4c10f32f] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xc0000000,0x00000000,0x00000000],\n\
+ ct: [0x7cadbe40,0x2d1b208f,0xe735edce,0x00aee7ce] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xe0000000,0x00000000,0x00000000],\n\
+ ct: [0x43b02ff9,0x29a1485a,0xf6f5c6d6,0x558baa0f] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xf0000000,0x00000000,0x00000000],\n\
+ ct: [0x092faacc,0x9bf43508,0xbf8fa861,0x3ca75dea] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xf8000000,0x00000000,0x00000000],\n\
+ ct: [0xcb2bf828,0x0f3f9742,0xc7ed513f,0xe802629c] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfc000000,0x00000000,0x00000000],\n\
+ ct: [0x215a41ee,0x442fa992,0xa6e32398,0x6ded3f68] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfe000000,0x00000000,0x00000000],\n\
+ ct: [0xf21e99cf,0x4f0f77ce,0xa836e11a,0x2fe75fb1] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xff000000,0x00000000,0x00000000],\n\
+ ct: [0x95e3a0ca,0x9079e646,0x331df8b4,0xe70d2cd6] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xff800000,0x00000000,0x00000000],\n\
+ ct: [0x4afe7f12,0x0ce7613f,0x74fc12a0,0x1a828073] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffc00000,0x00000000,0x00000000],\n\
+ ct: [0x827f000e,0x75e2c8b9,0xd479beed,0x913fe678] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffe00000,0x00000000,0x00000000],\n\
+ ct: [0x35830c8e,0x7aaefe2d,0x30310ef3,0x81cbf691] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfff00000,0x00000000,0x00000000],\n\
+ ct: [0x191aa0f2,0xc8570144,0xf38657ea,0x4085ebe5] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfff80000,0x00000000,0x00000000],\n\
+ ct: [0x85062c2c,0x909f15d9,0x269b6c18,0xce99c4f0] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffc0000,0x00000000,0x00000000],\n\
+ ct: [0x678034dc,0x9e41b5a5,0x60ed239e,0xeab1bc78] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffe0000,0x00000000,0x00000000],\n\
+ ct: [0xc2f93a4c,0xe5ab6d5d,0x56f1b93c,0xf19911c1] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffff0000,0x00000000,0x00000000],\n\
+ ct: [0x1c3112bc,0xb0c1dcc7,0x49d79974,0x3691bf82] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffff8000,0x00000000,0x00000000],\n\
+ ct: [0x00c55bd7,0x5c7f9c88,0x1989d3ec,0x1911c0d4] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffc000,0x00000000,0x00000000],\n\
+ ct: [0xea2e6b5e,0xf182b7df,0xf3629abd,0x6a12045f] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffe000,0x00000000,0x00000000],\n\
+ ct: [0x22322327,0xe01780b1,0x7397f240,0x87f8cc6f] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffff000,0x00000000,0x00000000],\n\
+ ct: [0xc9cacb5c,0xd11692c3,0x73b24117,0x68149ee7] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffff800,0x00000000,0x00000000],\n\
+ ct: [0xa18e3dbb,0xca577860,0xdab6b80d,0xa3139256] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffffc00,0x00000000,0x00000000],\n\
+ ct: [0x79b61c37,0xbf328ecc,0xa8d74326,0x5a3d425c] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffffe00,0x00000000,0x00000000],\n\
+ ct: [0xd2d99c6b,0xcc1f06fd,0xa8e27e8a,0xe3f1ccc7] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffff00,0x00000000,0x00000000],\n\
+ ct: [0x1bfd4b91,0xc701fd6b,0x61b7f997,0x829d663b] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffff80,0x00000000,0x00000000],\n\
+ ct: [0x11005d52,0xf25f16bd,0xc9545a87,0x6a63490a] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffc0,0x00000000,0x00000000],\n\
+ ct: [0x3a4d354f,0x02bb5a5e,0x47d39666,0x867f246a] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffe0,0x00000000,0x00000000],\n\
+ ct: [0xd451b8d6,0xe1e1a0eb,0xb155fbbf,0x6e7b7dc3] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffffff0,0x00000000,0x00000000],\n\
+ ct: [0x6898d4f4,0x2fa7ba6a,0x10ac05e8,0x7b9f2080] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffffff8,0x00000000,0x00000000],\n\
+ ct: [0xb611295e,0x739ca7d9,0xb50f8e4c,0x0e754a3f] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffffffc,0x00000000,0x00000000],\n\
+ ct: [0x7d33fc7d,0x8abe3ca1,0x936759f8,0xf5deaf20] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffffffe,0x00000000,0x00000000],\n\
+ ct: [0x3b5e0f56,0x6dc96c29,0x8f0c1263,0x7539b25c] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0x00000000,0x00000000],\n\
+ ct: [0xf807c3e7,0x985fe0f5,0xa50e2cdb,0x25c5109e] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0x80000000,0x00000000],\n\
+ ct: [0x41f992a8,0x56fb278b,0x389a62f5,0xd274d7e9] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xc0000000,0x00000000],\n\
+ ct: [0x10d3ed7a,0x6fe15ab4,0xd91acbc7,0xd0767ab1] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xe0000000,0x00000000],\n\
+ ct: [0x21feecd4,0x5b2e6759,0x73ac33bf,0x0c5424fc] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xf0000000,0x00000000],\n\
+ ct: [0x1480cb39,0x55ba62d0,0x9eea668f,0x7c708817] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xf8000000,0x00000000],\n\
+ ct: [0x66404033,0xd6b72b60,0x9354d549,0x6e7eb511] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfc000000,0x00000000],\n\
+ ct: [0x1c317a22,0x0a7d700d,0xa2b1e075,0xb00266e1] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfe000000,0x00000000],\n\
+ ct: [0xab3b8954,0x2233f127,0x1bf8fd0c,0x0f403545] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xff000000,0x00000000],\n\
+ ct: [0xd93eae96,0x6fac46dc,0xa927d6b1,0x14fa3f9e] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xff800000,0x00000000],\n\
+ ct: [0x1bdec521,0x316503d9,0xd5ee65df,0x3ea94ddf] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffc00000,0x00000000],\n\
+ ct: [0xeef45643,0x1dea8b4a,0xcf83bdae,0x3717f75f] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffe00000,0x00000000],\n\
+ ct: [0x06f2519a,0x2fafaa59,0x6bfef5cf,0xa15c21b9] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfff00000,0x00000000],\n\
+ ct: [0x251a7eac,0x7e2fe809,0xe4aa8d0d,0x7012531a] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfff80000,0x00000000],\n\
+ ct: [0x3bffc16e,0x4c49b268,0xa20f8d96,0xa60b4058] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffc0000,0x00000000],\n\
+ ct: [0xe886f928,0x1999c5bb,0x3b3e8862,0xe2f7c988] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffe0000,0x00000000],\n\
+ ct: [0x563bf90d,0x61beef39,0xf48dd625,0xfcef1361] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffff0000,0x00000000],\n\
+ ct: [0x4d37c850,0x644563c6,0x9fd0acd9,0xa049325b] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffff8000,0x00000000],\n\
+ ct: [0xb87c921b,0x91829ef3,0xb13ca541,0xee1130a6] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffc000,0x00000000],\n\
+ ct: [0x2e65eb6b,0x6ea383e1,0x09accce8,0x326b0393] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffe000,0x00000000],\n\
+ ct: [0x9ca547f7,0x439edc3e,0x255c0f4d,0x49aa8990] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffff000,0x00000000],\n\
+ ct: [0xa5e65261,0x4c9300f3,0x7816b1f9,0xfd0c87f9] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffff800,0x00000000],\n\
+ ct: [0x14954f0b,0x4697776f,0x44494fe4,0x58d814ed] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffffc00,0x00000000],\n\
+ ct: [0x7c8d9ab6,0xc2761723,0xfe42f8bb,0x506cbcf7] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffffe00,0x00000000],\n\
+ ct: [0xdb7e1932,0x679fdd99,0x742aab04,0xaa0d5a80] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffff00,0x00000000],\n\
+ ct: [0x4c6a1c83,0xe568cd10,0xf27c2d73,0xded19c28] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffff80,0x00000000],\n\
+ ct: [0x90ecbe61,0x77e674c9,0x8de41241,0x3f7ac915] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffc0,0x00000000],\n\
+ ct: [0x90684a2a,0xc55fe1ec,0x2b8ebd56,0x22520b73] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffe0,0x00000000],\n\
+ ct: [0x7472f9a7,0x988607ca,0x79707795,0x991035e6] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffffff0,0x00000000],\n\
+ ct: [0x56aff089,0x878bf335,0x2f8df172,0xa3ae47d8] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffffff8,0x00000000],\n\
+ ct: [0x65c0526c,0xbe40161b,0x8019a2a3,0x171abd23] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffffffc,0x00000000],\n\
+ ct: [0x377be0be,0x33b4e3e3,0x10b4aabd,0xa173f84f] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffffffe,0x00000000],\n\
+ ct: [0x9402e9aa,0x6f69de65,0x04da8d20,0xc4fcaa2f] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0x00000000],\n\
+ ct: [0x123c1f4a,0xf313ad8c,0x2ce648b2,0xe71fb6e1] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0x80000000],\n\
+ ct: [0x1ffc626d,0x30203dcd,0xb0019fb8,0x0f726cf4] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xc0000000],\n\
+ ct: [0x76da1fbe,0x3a50728c,0x50fd2e62,0x1b5ad885] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xe0000000],\n\
+ ct: [0x082eb8be,0x35f442fb,0x52668e16,0xa591d1d6] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xf0000000],\n\
+ ct: [0xe656f9ec,0xf5fe27ec,0x3e4a73d0,0x0c282fb3] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xf8000000],\n\
+ ct: [0x2ca8209d,0x63274cd9,0xa29bb74b,0xcd77683a] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfc000000],\n\
+ ct: [0x79bf5dce,0x14bb7dd7,0x3a8e3611,0xde7ce026] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfe000000],\n\
+ ct: [0x3c849939,0xa5d29399,0xf344c4a0,0xeca8a576] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xff000000],\n\
+ ct: [0xed3c0a94,0xd59bece9,0x8835da7a,0xa4f07ca2] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xff800000],\n\
+ ct: [0x63919ed4,0xce101964,0x38b6ad09,0xd99cd795] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffc00000],\n\
+ ct: [0x7678f3a8,0x33f19fea,0x95f3c602,0x9e2bc610] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffe00000],\n\
+ ct: [0x3aa42683,0x1067d36b,0x92be7c5f,0x81c13c56] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfff00000],\n\
+ ct: [0x9272e2d2,0xcdd11050,0x998c8450,0x77a30ea0] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfff80000],\n\
+ ct: [0x088c4b53,0xf5ec0ff8,0x14c19ada,0xe7f6246c] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffc0000],\n\
+ ct: [0x4010a5e4,0x01fdf0a0,0x354ddbcc,0x0d012b17] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffe0000],\n\
+ ct: [0xa87a3857,0x36c0a618,0x9bd6589b,0xd8445a93] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffff0000],\n\
+ ct: [0x545f2b83,0xd9616dcc,0xf60fa983,0x0e9cd287] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffff8000],\n\
+ ct: [0x4b706f7f,0x92406352,0x394037a6,0xd4f4688d] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffffc000],\n\
+ ct: [0xb7972b39,0x41c44b90,0xafa7b264,0xbfba7387] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffffe000],\n\
+ ct: [0x6f45732c,0xf1088154,0x6f0fd238,0x96d2bb60] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffff000],\n\
+ ct: [0x2e3579ca,0x15af27f6,0x4b3c955a,0x5bfc30ba] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffff800],\n\
+ ct: [0x34a2c5a9,0x1ae2aec9,0x9b7d1b5f,0xa6780447] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffffc00],\n\
+ ct: [0xa4d6616b,0xd04f8733,0x5b0e5335,0x1227a9ee] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffffe00],\n\
+ ct: [0x7f692b03,0x945867d1,0x6179a8ce,0xfc83ea3f] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffffff00],\n\
+ ct: [0x3bd141ee,0x84a0e641,0x4a26e7a4,0xf281f8a2] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffffff80],\n\
+ ct: [0xd1788f57,0x2d98b2b1,0x6ec5d5f3,0x922b99bc] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffffffc0],\n\
+ ct: [0x0833ff6f,0x61d98a57,0xb288e8c3,0x586b85a6] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffffffe0],\n\
+ ct: [0x85682617,0x97de176b,0xf0b43bec,0xc6285afb] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffffff0],\n\
+ ct: [0xf9b0fda0,0xc4a898f5,0xb9e6f661,0xc4ce4d07] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffffff8],\n\
+ ct: [0x8ade8959,0x13685c67,0xc5269f8a,0xae42983e] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffffffc],\n\
+ ct: [0x39bde67d,0x5c8ed8a8,0xb1c37eb8,0xfa9f5ac0] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffffffe],\n\
+ ct: [0x5c005e72,0xc1418c44,0xf569f2ea,0x33ba54f3] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffffffff],\n\
+ ct: [0x3f5b8cc9,0xea855a0a,0xfa7347d2,0x3e8d664e] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x80000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6cd02513,0xe8d4dc98,0x6b4afe08,0x7a60bd0c] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xc0000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x2ce1f8b7,0xe30627c1,0xc4519ead,0xa44bc436] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xe0000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x9946b5f8,0x7af446f5,0x796c1fee,0x63a2da24] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xf0000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x2a560364,0xce529efc,0x21788779,0x568d5555] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xf8000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x35c14718,0x37af4461,0x53bce55d,0x5ba72a0a] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfc000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xce60bc52,0x386234f1,0x58f84341,0xe534cd9e] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfe000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8c7c27ff,0x32bcf8dc,0x2dc57c90,0xc2903961] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xff000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x32bb6a7e,0xc84499e1,0x66f93600,0x3d55a5bb] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xff800000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa5c772e5,0xc62631ef,0x660ee1d5,0x877f6d1b] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffc00000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x030d7e5b,0x64f380a7,0xe4ea5387,0xb5cd7f49] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffe00000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x0dc9a261,0x0037009b,0x698f11bb,0x7e86c83e] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfff00000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x0046612c,0x766d1840,0xc226364f,0x1fa7ed72] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfff80000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x4880c7e0,0x8f27befe,0x78590743,0xc05e698b] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffc0000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x2520ce82,0x9a26577f,0x0f4822c4,0xecc87401] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffe0000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8765e8ac,0xc1697583,0x19cb46dc,0x7bcf3dca] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffff0000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xe98f4ba4,0xf073df4b,0xaa116d01,0x1dc24a28] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffff8000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf378f68c,0x5dbf59e2,0x11b3a659,0xa7317d94] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffc000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x283d3b06,0x9d8eb9fb,0x432d74b9,0x6ca762b4] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffe000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa7e1842e,0x8a87861c,0x221a5008,0x83245c51] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffff000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x77aa2704,0x71881be0,0x70fb52c7,0x067ce732] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffff800,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x01b0f476,0xd484f43f,0x1aeb6efa,0x9361a8ac] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffffc00,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x1c3a94f1,0xc052c55c,0x2d8359af,0xf2163b4f] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffffe00,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xe8a067b6,0x04d5373d,0x8b0f2e05,0xa03b341b] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffff00,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa7876ec8,0x7f5a09bf,0xea42c77d,0xa30fd50e] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffff80,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x0cf3e9d3,0xa42be5b8,0x54ca65b1,0x3f35f48d] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffc0,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6c62f6bb,0xcab7c3e8,0x21c9290f,0x08892dda] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffe0,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x7f5e05bd,0x20687381,0x96fee79a,0xce7e3aec] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffffff0,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x440e0d73,0x3255cda9,0x2fb46e84,0x2fe58054] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffffff8,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xaa5d5b1c,0x4ea1b7a2,0x2e5583ac,0x2e9ed8a7] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffffffc,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x77e537e8,0x9e8491e8,0x662aae3b,0xc809421d] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffffffe,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x997dd3e9,0xf1598bfa,0x73f75973,0xf7e93b76] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x1b38d4f7,0x452afefc,0xb7fc7212,0x44e4b72e] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0x80000000,0x00000000,0x00000000],\n\
+ ct: [0x0be2b182,0x52e774dd,0xa30cdda0,0x2c6906e3] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xc0000000,0x00000000,0x00000000],\n\
+ ct: [0xd2695e59,0xc20361d8,0x2652d7d5,0x8b6f11b2] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xe0000000,0x00000000,0x00000000],\n\
+ ct: [0x902d88d1,0x3eae5208,0x9abd6143,0xcfe394e9] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xf0000000,0x00000000,0x00000000],\n\
+ ct: [0xd49bceb3,0xb823fedd,0x602c3053,0x45734bd2] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xf8000000,0x00000000,0x00000000],\n\
+ ct: [0x707b1dbb,0x0ffa40ef,0x7d95def4,0x21233fae] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfc000000,0x00000000,0x00000000],\n\
+ ct: [0x7ca0c1d9,0x3356d9eb,0x8aa95208,0x4d75f913] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfe000000,0x00000000,0x00000000],\n\
+ ct: [0xf2cbf9cb,0x186e270d,0xd7bdb0c2,0x8febc57d] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xff000000,0x00000000,0x00000000],\n\
+ ct: [0xc94337c3,0x7c4e790a,0xb45780bd,0x9c3674a0] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xff800000,0x00000000,0x00000000],\n\
+ ct: [0x8e3558c1,0x35252fb9,0xc9f367ed,0x609467a1] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffc00000,0x00000000,0x00000000],\n\
+ ct: [0x1b72eeae,0xe4899b44,0x3914e5b3,0xa57fba92] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffe00000,0x00000000,0x00000000],\n\
+ ct: [0x011865f9,0x1bc56868,0xd051e52c,0x9efd59b7] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfff00000,0x00000000,0x00000000],\n\
+ ct: [0xe4771318,0xad7a63dd,0x680f6e58,0x3b7747ea] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfff80000,0x00000000,0x00000000],\n\
+ ct: [0x61e3d194,0x088dc8d9,0x7e9e6db3,0x7457eac5] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffc0000,0x00000000,0x00000000],\n\
+ ct: [0x36ff1ec9,0xccfbc349,0xe5d356d0,0x63693ad6] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffe0000,0x00000000,0x00000000],\n\
+ ct: [0x3cc9e9a9,0xbe8cc3f6,0xfb2ea240,0x88e9bb19] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffff0000,0x00000000,0x00000000],\n\
+ ct: [0x1ee5ab00,0x3dc8722e,0x74905d9a,0x8fe3d350] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffff8000,0x00000000,0x00000000],\n\
+ ct: [0x24533931,0x9584b0a4,0x12412869,0xd6c2eada] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffc000,0x00000000,0x00000000],\n\
+ ct: [0x7bd49691,0x8115d14e,0xd5380852,0x716c8814] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffe000,0x00000000,0x00000000],\n\
+ ct: [0x273ab2f2,0xb4a366a5,0x7d582a33,0x9313c8b1] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffff000,0x00000000,0x00000000],\n\
+ ct: [0x113365a9,0xffbe3b0c,0xa61e9850,0x7554168b] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffff800,0x00000000,0x00000000],\n\
+ ct: [0xafa99c99,0x7ac478a0,0xdea4119c,0x9e45f8b1] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffffc00,0x00000000,0x00000000],\n\
+ ct: [0x9216309a,0x7842430b,0x83ffb986,0x38011512] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffffe00,0x00000000,0x00000000],\n\
+ ct: [0x62abc792,0x28825849,0x2a7cb451,0x45f4b759] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffff00,0x00000000,0x00000000],\n\
+ ct: [0x534923c1,0x69d504d7,0x519c15d3,0x0e756c50] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffff80,0x00000000,0x00000000],\n\
+ ct: [0xfa75e05b,0xcdc7e00c,0x273fa33f,0x6ee441d2] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffc0,0x00000000,0x00000000],\n\
+ ct: [0x7d350fa6,0x057080f1,0x086a56b1,0x7ec240db] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffe0,0x00000000,0x00000000],\n\
+ ct: [0xf34e4a63,0x24ea4a5c,0x39a661c8,0xfe5ada8f] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffffff0,0x00000000,0x00000000],\n\
+ ct: [0x0882a16f,0x44088d42,0x447a29ac,0x090ec17e] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffffff8,0x00000000,0x00000000],\n\
+ ct: [0x3a3c15bf,0xc11a9537,0xc1306870,0x04e136ee] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffffffc,0x00000000,0x00000000],\n\
+ ct: [0x22c0a767,0x8dc6d8cf,0x5c8a6d5a,0x9960767c] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffffffe,0x00000000,0x00000000],\n\
+ ct: [0xb46b0980,0x9d68b9a4,0x56432a79,0xbdc2e38c] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0x00000000,0x00000000],\n\
+ ct: [0x93baaffb,0x35fbe739,0xc17c6ac2,0x2eecf18f] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0x80000000,0x00000000],\n\
+ ct: [0xc8aa80a7,0x850675bc,0x007c46df,0x06b49868] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xc0000000,0x00000000],\n\
+ ct: [0x12c6f387,0x7af421a9,0x18a84b77,0x5858021d] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xe0000000,0x00000000],\n\
+ ct: [0x33f12328,0x2c5d6339,0x24f7d5ba,0x3f3cab11] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xf0000000,0x00000000],\n\
+ ct: [0xa8f16100,0x2733e93c,0xa4527d22,0xc1a0c5bb] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xf8000000,0x00000000],\n\
+ ct: [0xb72f70eb,0xf3e3fda2,0x3f508eec,0x76b42c02] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfc000000,0x00000000],\n\
+ ct: [0x6a9d965e,0x6274143f,0x25afdcfc,0x88ffd77c] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfe000000,0x00000000],\n\
+ ct: [0xa0c74fd0,0xb9361764,0xce91c520,0x0b095357] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xff000000,0x00000000],\n\
+ ct: [0x091d1fdc,0x2bd2c346,0xcd5046a8,0xc6209146] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xff800000,0x00000000],\n\
+ ct: [0xe2a37580,0x116cfb71,0x85625449,0x6ab0aca8] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffc00000,0x00000000],\n\
+ ct: [0xe0b3a007,0x85917c7e,0xfc9adba3,0x22813571] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffe00000,0x00000000],\n\
+ ct: [0x733d41f4,0x727b5ef0,0xdf4af4cf,0x3cffa0cb] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfff00000,0x00000000],\n\
+ ct: [0xa99ebb03,0x0260826f,0x981ad3e6,0x4490aa4f] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfff80000,0x00000000],\n\
+ ct: [0x73f34c7d,0x3eae5e80,0x082c1647,0x524308ee] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffc0000,0x00000000],\n\
+ ct: [0x40ebd5ad,0x082345b7,0xa2097ccd,0x3464da02] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffe0000,0x00000000],\n\
+ ct: [0x7cc4ae9a,0x424b2cec,0x90c97153,0xc2457ec5] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffff0000,0x00000000],\n\
+ ct: [0x54d632d0,0x3aba0bd0,0xf91877eb,0xdd4d09cb] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffff8000,0x00000000],\n\
+ ct: [0xd3427be7,0xe4d27cd5,0x4f5fe37b,0x03cf0897] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffc000,0x00000000],\n\
+ ct: [0xb2099795,0xe88cc158,0xfd75ea13,0x3d7e7fbe] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffe000,0x00000000],\n\
+ ct: [0xa6cae46f,0xb6fadfe7,0xa2c302a3,0x4242817b] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffff000,0x00000000],\n\
+ ct: [0x026a7024,0xd6a902e0,0xb3ffccba,0xa910cc3f] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffff800,0x00000000],\n\
+ ct: [0x156f0776,0x7a85a431,0x2321f639,0x68338a01] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffffc00,0x00000000],\n\
+ ct: [0x15eec9eb,0xf42b9ca7,0x6897d2cd,0x6c5a12e2] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffffe00,0x00000000],\n\
+ ct: [0xdb0d3a6f,0xdcc13f91,0x5e2b302c,0xeeb70fd8] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffff00,0x00000000],\n\
+ ct: [0x71dbf37e,0x87a2e34d,0x15b20e8f,0x10e48924] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffff80,0x00000000],\n\
+ ct: [0xc745c451,0xe96ff3c0,0x45e4367c,0x833e3b54] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffc0,0x00000000],\n\
+ ct: [0x340da09c,0x2dd11c3b,0x679d08cc,0xd27dd595] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffe0,0x00000000],\n\
+ ct: [0x8279f7c0,0xc2a03ee6,0x60c6d392,0xdb025d18] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffffff0,0x00000000],\n\
+ ct: [0xa4b2c7d8,0xeba531ff,0x47c5041a,0x55fbd1ec] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffffff8,0x00000000],\n\
+ ct: [0x74569a2c,0xa5a7bd51,0x31ce8dc7,0xcbfbf72f] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffffffc,0x00000000],\n\
+ ct: [0x3713da0c,0x0219b634,0x54035613,0xb5a403dd] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffffffe,0x00000000],\n\
+ ct: [0x8827551d,0xdcc9df23,0xfa72a3de,0x4e9f0b07] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0x00000000],\n\
+ ct: [0x2e3febfd,0x625bfcd0,0xa2c06eb4,0x60da1732] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0x80000000],\n\
+ ct: [0xee82e6ba,0x488156f7,0x6496311d,0xa6941deb] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xc0000000],\n\
+ ct: [0x4770446f,0x01d1f391,0x256e85a1,0xb30d89d3] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xe0000000],\n\
+ ct: [0xaf04b68f,0x104f21ef,0x2afb4767,0xcf74143c] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xf0000000],\n\
+ ct: [0xcf3579a9,0xba38c8e4,0x3653173e,0x14f3a4c6] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xf8000000],\n\
+ ct: [0xb3bba904,0xf4953e09,0xb54800af,0x2f62e7d4] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfc000000],\n\
+ ct: [0xfc424965,0x6e14b29e,0xb9c44829,0xb4c59a46] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfe000000],\n\
+ ct: [0x9b31568f,0xebe81cfc,0x2e65af1c,0x86d1a308] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xff000000],\n\
+ ct: [0x9ca09c25,0xf273a766,0xdb98a480,0xce8dfedc] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xff800000],\n\
+ ct: [0xb9099257,0x86f34c3c,0x92d97188,0x3c9fbedf] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffc00000],\n\
+ ct: [0x82647f13,0x32fe570a,0x9d4d92b2,0xee771d3b] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffe00000],\n\
+ ct: [0x3604a7e8,0x0832b3a9,0x9954bca6,0xf5b9f501] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfff00000],\n\
+ ct: [0x884607b1,0x28c5de3a,0xb39a529a,0x1ef51bef] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfff80000],\n\
+ ct: [0x670cfa09,0x3d1dbdb2,0x31704140,0x4102435e] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffc0000],\n\
+ ct: [0x7a867195,0xf3ce8769,0xcbd33650,0x2fbb5130] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffe0000],\n\
+ ct: [0x52efcf64,0xc72b2f7c,0xa5b3c836,0xb1078c15] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffff0000],\n\
+ ct: [0x4019250f,0x6eefb2ac,0x5ccbcae0,0x44e75c7e] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffff8000],\n\
+ ct: [0x022c4f6f,0x5a017d29,0x27856276,0x67ddef24] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffffc000],\n\
+ ct: [0xe9c21078,0xa2eb7e03,0x250f7100,0x0fa9e3ed] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffffe000],\n\
+ ct: [0xa13eaeeb,0x9cd391da,0x4e2b0949,0x0b3e7fad] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffff000],\n\
+ ct: [0xc958a171,0xdca1d4ed,0x53e1af1d,0x380803a9] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffff800],\n\
+ ct: [0x21442e07,0xa110667f,0x2583eaee,0xee44dc8c] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffffc00],\n\
+ ct: [0x59bbb353,0xcf1dd867,0xa6e33737,0xaf655e99] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffffe00],\n\
+ ct: [0x43cd3b25,0x375d0ce4,0x1087ff9f,0xe2829639] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffffff00],\n\
+ ct: [0x6b98b17e,0x80d1118e,0x3516bd76,0x8b285a84] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffffff80],\n\
+ ct: [0xae47ed36,0x76ca0c08,0xdeea02d9,0x5b81db58] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffffffc0],\n\
+ ct: [0x34ec40dc,0x20413795,0xed53628e,0xa748720b] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffffffe0],\n\
+ ct: [0x4dc68163,0xf8e98354,0x73253542,0xc8a65d46] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffffff0],\n\
+ ct: [0x2aabb999,0xf4369317,0x5af65c6c,0x612c46fb] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffffff8],\n\
+ ct: [0xe01f9449,0x9dac3547,0x515c5b1d,0x756f0f58] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffffffc],\n\
+ ct: [0x9d12435a,0x46480ce0,0x0ea349f7,0x1799df9a] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffffffe],\n\
+ ct: [0xcef41d16,0xd266bdfe,0x46938ad7,0x884cc0cf] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffffffff],\n\
+ ct: [0xb13db4da,0x1f718bc6,0x904797c8,0x2bcf2d32] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x80000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6cd02513,0xe8d4dc98,0x6b4afe08,0x7a60bd0c] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xc0000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x2ce1f8b7,0xe30627c1,0xc4519ead,0xa44bc436] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xe0000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x9946b5f8,0x7af446f5,0x796c1fee,0x63a2da24] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xf0000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x2a560364,0xce529efc,0x21788779,0x568d5555] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xf8000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x35c14718,0x37af4461,0x53bce55d,0x5ba72a0a] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfc000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xce60bc52,0x386234f1,0x58f84341,0xe534cd9e] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfe000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8c7c27ff,0x32bcf8dc,0x2dc57c90,0xc2903961] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xff000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x32bb6a7e,0xc84499e1,0x66f93600,0x3d55a5bb] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xff800000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa5c772e5,0xc62631ef,0x660ee1d5,0x877f6d1b] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffc00000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x030d7e5b,0x64f380a7,0xe4ea5387,0xb5cd7f49] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffe00000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x0dc9a261,0x0037009b,0x698f11bb,0x7e86c83e] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfff00000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x0046612c,0x766d1840,0xc226364f,0x1fa7ed72] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfff80000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x4880c7e0,0x8f27befe,0x78590743,0xc05e698b] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffc0000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x2520ce82,0x9a26577f,0x0f4822c4,0xecc87401] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffe0000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8765e8ac,0xc1697583,0x19cb46dc,0x7bcf3dca] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffff0000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xe98f4ba4,0xf073df4b,0xaa116d01,0x1dc24a28] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffff8000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf378f68c,0x5dbf59e2,0x11b3a659,0xa7317d94] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffc000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x283d3b06,0x9d8eb9fb,0x432d74b9,0x6ca762b4] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffe000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa7e1842e,0x8a87861c,0x221a5008,0x83245c51] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffff000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x77aa2704,0x71881be0,0x70fb52c7,0x067ce732] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffff800,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x01b0f476,0xd484f43f,0x1aeb6efa,0x9361a8ac] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffffc00,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x1c3a94f1,0xc052c55c,0x2d8359af,0xf2163b4f] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffffe00,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xe8a067b6,0x04d5373d,0x8b0f2e05,0xa03b341b] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffff00,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa7876ec8,0x7f5a09bf,0xea42c77d,0xa30fd50e] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffff80,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x0cf3e9d3,0xa42be5b8,0x54ca65b1,0x3f35f48d] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffc0,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6c62f6bb,0xcab7c3e8,0x21c9290f,0x08892dda] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffe0,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x7f5e05bd,0x20687381,0x96fee79a,0xce7e3aec] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffffff0,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x440e0d73,0x3255cda9,0x2fb46e84,0x2fe58054] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffffff8,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xaa5d5b1c,0x4ea1b7a2,0x2e5583ac,0x2e9ed8a7] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffffffc,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x77e537e8,0x9e8491e8,0x662aae3b,0xc809421d] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffffffe,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x997dd3e9,0xf1598bfa,0x73f75973,0xf7e93b76] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x1b38d4f7,0x452afefc,0xb7fc7212,0x44e4b72e] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0x80000000,0x00000000,0x00000000],\n\
+ ct: [0x0be2b182,0x52e774dd,0xa30cdda0,0x2c6906e3] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xc0000000,0x00000000,0x00000000],\n\
+ ct: [0xd2695e59,0xc20361d8,0x2652d7d5,0x8b6f11b2] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xe0000000,0x00000000,0x00000000],\n\
+ ct: [0x902d88d1,0x3eae5208,0x9abd6143,0xcfe394e9] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xf0000000,0x00000000,0x00000000],\n\
+ ct: [0xd49bceb3,0xb823fedd,0x602c3053,0x45734bd2] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xf8000000,0x00000000,0x00000000],\n\
+ ct: [0x707b1dbb,0x0ffa40ef,0x7d95def4,0x21233fae] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfc000000,0x00000000,0x00000000],\n\
+ ct: [0x7ca0c1d9,0x3356d9eb,0x8aa95208,0x4d75f913] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfe000000,0x00000000,0x00000000],\n\
+ ct: [0xf2cbf9cb,0x186e270d,0xd7bdb0c2,0x8febc57d] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xff000000,0x00000000,0x00000000],\n\
+ ct: [0xc94337c3,0x7c4e790a,0xb45780bd,0x9c3674a0] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xff800000,0x00000000,0x00000000],\n\
+ ct: [0x8e3558c1,0x35252fb9,0xc9f367ed,0x609467a1] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffc00000,0x00000000,0x00000000],\n\
+ ct: [0x1b72eeae,0xe4899b44,0x3914e5b3,0xa57fba92] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffe00000,0x00000000,0x00000000],\n\
+ ct: [0x011865f9,0x1bc56868,0xd051e52c,0x9efd59b7] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfff00000,0x00000000,0x00000000],\n\
+ ct: [0xe4771318,0xad7a63dd,0x680f6e58,0x3b7747ea] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfff80000,0x00000000,0x00000000],\n\
+ ct: [0x61e3d194,0x088dc8d9,0x7e9e6db3,0x7457eac5] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffc0000,0x00000000,0x00000000],\n\
+ ct: [0x36ff1ec9,0xccfbc349,0xe5d356d0,0x63693ad6] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffe0000,0x00000000,0x00000000],\n\
+ ct: [0x3cc9e9a9,0xbe8cc3f6,0xfb2ea240,0x88e9bb19] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffff0000,0x00000000,0x00000000],\n\
+ ct: [0x1ee5ab00,0x3dc8722e,0x74905d9a,0x8fe3d350] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffff8000,0x00000000,0x00000000],\n\
+ ct: [0x24533931,0x9584b0a4,0x12412869,0xd6c2eada] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffc000,0x00000000,0x00000000],\n\
+ ct: [0x7bd49691,0x8115d14e,0xd5380852,0x716c8814] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffe000,0x00000000,0x00000000],\n\
+ ct: [0x273ab2f2,0xb4a366a5,0x7d582a33,0x9313c8b1] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffff000,0x00000000,0x00000000],\n\
+ ct: [0x113365a9,0xffbe3b0c,0xa61e9850,0x7554168b] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffff800,0x00000000,0x00000000],\n\
+ ct: [0xafa99c99,0x7ac478a0,0xdea4119c,0x9e45f8b1] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffffc00,0x00000000,0x00000000],\n\
+ ct: [0x9216309a,0x7842430b,0x83ffb986,0x38011512] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffffe00,0x00000000,0x00000000],\n\
+ ct: [0x62abc792,0x28825849,0x2a7cb451,0x45f4b759] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffff00,0x00000000,0x00000000],\n\
+ ct: [0x534923c1,0x69d504d7,0x519c15d3,0x0e756c50] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffff80,0x00000000,0x00000000],\n\
+ ct: [0xfa75e05b,0xcdc7e00c,0x273fa33f,0x6ee441d2] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffc0,0x00000000,0x00000000],\n\
+ ct: [0x7d350fa6,0x057080f1,0x086a56b1,0x7ec240db] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffe0,0x00000000,0x00000000],\n\
+ ct: [0xf34e4a63,0x24ea4a5c,0x39a661c8,0xfe5ada8f] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffffff0,0x00000000,0x00000000],\n\
+ ct: [0x0882a16f,0x44088d42,0x447a29ac,0x090ec17e] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffffff8,0x00000000,0x00000000],\n\
+ ct: [0x3a3c15bf,0xc11a9537,0xc1306870,0x04e136ee] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffffffc,0x00000000,0x00000000],\n\
+ ct: [0x22c0a767,0x8dc6d8cf,0x5c8a6d5a,0x9960767c] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffffffe,0x00000000,0x00000000],\n\
+ ct: [0xb46b0980,0x9d68b9a4,0x56432a79,0xbdc2e38c] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0x00000000,0x00000000],\n\
+ ct: [0x93baaffb,0x35fbe739,0xc17c6ac2,0x2eecf18f] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0x80000000,0x00000000],\n\
+ ct: [0xc8aa80a7,0x850675bc,0x007c46df,0x06b49868] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xc0000000,0x00000000],\n\
+ ct: [0x12c6f387,0x7af421a9,0x18a84b77,0x5858021d] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xe0000000,0x00000000],\n\
+ ct: [0x33f12328,0x2c5d6339,0x24f7d5ba,0x3f3cab11] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xf0000000,0x00000000],\n\
+ ct: [0xa8f16100,0x2733e93c,0xa4527d22,0xc1a0c5bb] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xf8000000,0x00000000],\n\
+ ct: [0xb72f70eb,0xf3e3fda2,0x3f508eec,0x76b42c02] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfc000000,0x00000000],\n\
+ ct: [0x6a9d965e,0x6274143f,0x25afdcfc,0x88ffd77c] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfe000000,0x00000000],\n\
+ ct: [0xa0c74fd0,0xb9361764,0xce91c520,0x0b095357] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xff000000,0x00000000],\n\
+ ct: [0x091d1fdc,0x2bd2c346,0xcd5046a8,0xc6209146] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xff800000,0x00000000],\n\
+ ct: [0xe2a37580,0x116cfb71,0x85625449,0x6ab0aca8] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffc00000,0x00000000],\n\
+ ct: [0xe0b3a007,0x85917c7e,0xfc9adba3,0x22813571] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffe00000,0x00000000],\n\
+ ct: [0x733d41f4,0x727b5ef0,0xdf4af4cf,0x3cffa0cb] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfff00000,0x00000000],\n\
+ ct: [0xa99ebb03,0x0260826f,0x981ad3e6,0x4490aa4f] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfff80000,0x00000000],\n\
+ ct: [0x73f34c7d,0x3eae5e80,0x082c1647,0x524308ee] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffc0000,0x00000000],\n\
+ ct: [0x40ebd5ad,0x082345b7,0xa2097ccd,0x3464da02] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffe0000,0x00000000],\n\
+ ct: [0x7cc4ae9a,0x424b2cec,0x90c97153,0xc2457ec5] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffff0000,0x00000000],\n\
+ ct: [0x54d632d0,0x3aba0bd0,0xf91877eb,0xdd4d09cb] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffff8000,0x00000000],\n\
+ ct: [0xd3427be7,0xe4d27cd5,0x4f5fe37b,0x03cf0897] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffc000,0x00000000],\n\
+ ct: [0xb2099795,0xe88cc158,0xfd75ea13,0x3d7e7fbe] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffe000,0x00000000],\n\
+ ct: [0xa6cae46f,0xb6fadfe7,0xa2c302a3,0x4242817b] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffff000,0x00000000],\n\
+ ct: [0x026a7024,0xd6a902e0,0xb3ffccba,0xa910cc3f] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffff800,0x00000000],\n\
+ ct: [0x156f0776,0x7a85a431,0x2321f639,0x68338a01] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffffc00,0x00000000],\n\
+ ct: [0x15eec9eb,0xf42b9ca7,0x6897d2cd,0x6c5a12e2] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffffe00,0x00000000],\n\
+ ct: [0xdb0d3a6f,0xdcc13f91,0x5e2b302c,0xeeb70fd8] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffff00,0x00000000],\n\
+ ct: [0x71dbf37e,0x87a2e34d,0x15b20e8f,0x10e48924] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffff80,0x00000000],\n\
+ ct: [0xc745c451,0xe96ff3c0,0x45e4367c,0x833e3b54] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffc0,0x00000000],\n\
+ ct: [0x340da09c,0x2dd11c3b,0x679d08cc,0xd27dd595] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffe0,0x00000000],\n\
+ ct: [0x8279f7c0,0xc2a03ee6,0x60c6d392,0xdb025d18] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffffff0,0x00000000],\n\
+ ct: [0xa4b2c7d8,0xeba531ff,0x47c5041a,0x55fbd1ec] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffffff8,0x00000000],\n\
+ ct: [0x74569a2c,0xa5a7bd51,0x31ce8dc7,0xcbfbf72f] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffffffc,0x00000000],\n\
+ ct: [0x3713da0c,0x0219b634,0x54035613,0xb5a403dd] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffffffe,0x00000000],\n\
+ ct: [0x8827551d,0xdcc9df23,0xfa72a3de,0x4e9f0b07] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0x00000000],\n\
+ ct: [0x2e3febfd,0x625bfcd0,0xa2c06eb4,0x60da1732] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0x80000000],\n\
+ ct: [0xee82e6ba,0x488156f7,0x6496311d,0xa6941deb] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xc0000000],\n\
+ ct: [0x4770446f,0x01d1f391,0x256e85a1,0xb30d89d3] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xe0000000],\n\
+ ct: [0xaf04b68f,0x104f21ef,0x2afb4767,0xcf74143c] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xf0000000],\n\
+ ct: [0xcf3579a9,0xba38c8e4,0x3653173e,0x14f3a4c6] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xf8000000],\n\
+ ct: [0xb3bba904,0xf4953e09,0xb54800af,0x2f62e7d4] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfc000000],\n\
+ ct: [0xfc424965,0x6e14b29e,0xb9c44829,0xb4c59a46] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfe000000],\n\
+ ct: [0x9b31568f,0xebe81cfc,0x2e65af1c,0x86d1a308] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xff000000],\n\
+ ct: [0x9ca09c25,0xf273a766,0xdb98a480,0xce8dfedc] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xff800000],\n\
+ ct: [0xb9099257,0x86f34c3c,0x92d97188,0x3c9fbedf] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffc00000],\n\
+ ct: [0x82647f13,0x32fe570a,0x9d4d92b2,0xee771d3b] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffe00000],\n\
+ ct: [0x3604a7e8,0x0832b3a9,0x9954bca6,0xf5b9f501] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfff00000],\n\
+ ct: [0x884607b1,0x28c5de3a,0xb39a529a,0x1ef51bef] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfff80000],\n\
+ ct: [0x670cfa09,0x3d1dbdb2,0x31704140,0x4102435e] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffc0000],\n\
+ ct: [0x7a867195,0xf3ce8769,0xcbd33650,0x2fbb5130] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffe0000],\n\
+ ct: [0x52efcf64,0xc72b2f7c,0xa5b3c836,0xb1078c15] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffff0000],\n\
+ ct: [0x4019250f,0x6eefb2ac,0x5ccbcae0,0x44e75c7e] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffff8000],\n\
+ ct: [0x022c4f6f,0x5a017d29,0x27856276,0x67ddef24] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffffc000],\n\
+ ct: [0xe9c21078,0xa2eb7e03,0x250f7100,0x0fa9e3ed] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffffe000],\n\
+ ct: [0xa13eaeeb,0x9cd391da,0x4e2b0949,0x0b3e7fad] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffff000],\n\
+ ct: [0xc958a171,0xdca1d4ed,0x53e1af1d,0x380803a9] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffff800],\n\
+ ct: [0x21442e07,0xa110667f,0x2583eaee,0xee44dc8c] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffffc00],\n\
+ ct: [0x59bbb353,0xcf1dd867,0xa6e33737,0xaf655e99] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffffe00],\n\
+ ct: [0x43cd3b25,0x375d0ce4,0x1087ff9f,0xe2829639] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffffff00],\n\
+ ct: [0x6b98b17e,0x80d1118e,0x3516bd76,0x8b285a84] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffffff80],\n\
+ ct: [0xae47ed36,0x76ca0c08,0xdeea02d9,0x5b81db58] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffffffc0],\n\
+ ct: [0x34ec40dc,0x20413795,0xed53628e,0xa748720b] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffffffe0],\n\
+ ct: [0x4dc68163,0xf8e98354,0x73253542,0xc8a65d46] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffffff0],\n\
+ ct: [0x2aabb999,0xf4369317,0x5af65c6c,0x612c46fb] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffffff8],\n\
+ ct: [0xe01f9449,0x9dac3547,0x515c5b1d,0x756f0f58] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffffffc],\n\
+ ct: [0x9d12435a,0x46480ce0,0x0ea349f7,0x1799df9a] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffffffe],\n\
+ ct: [0xcef41d16,0xd266bdfe,0x46938ad7,0x884cc0cf] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffffffff],\n\
+ ct: [0xb13db4da,0x1f718bc6,0x904797c8,0x2bcf2d32] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x26aa49dc,0xfe7629a8,0x901a69a9,0x914e6dfd],\n\
+ ct: [0xd5e08bf9,0xa182e857,0xcf40b3a3,0x6ee248cc] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x941a4773,0x058224e1,0xef66d10e,0x0a6ee782],\n\
+ ct: [0x067cd9d3,0x74920779,0x18415625,0x07fa9626] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x1b077a6a,0xf4b7f982,0x29de786d,0x7516b639],\n\
+ ct: [0x275cfc04,0x13d8ccb7,0x0513c385,0x9b1d0f72] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x9c2d8842,0xe5f48f57,0x648205d3,0x9a239af1],\n\
+ ct: [0xc9b8135f,0xf1b5adc4,0x13dfd053,0xb21bd96d] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xbff52510,0x095f518e,0xcca60af4,0x205444bb],\n\
+ ct: [0x4a3650c3,0x371ce2eb,0x35e389a1,0x71427440] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x51719783,0xd3185a53,0x5bd75adc,0x65071ce1],\n\
+ ct: [0x4f354592,0xff7c8847,0xd2d0870c,0xa9481b7c] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x26aa49dc,0xfe7629a8,0x901a69a9,0x914e6dfd],\n\
+ ct: [0xd5e08bf9,0xa182e857,0xcf40b3a3,0x6ee248cc] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x941a4773,0x058224e1,0xef66d10e,0x0a6ee782],\n\
+ ct: [0x067cd9d3,0x74920779,0x18415625,0x07fa9626] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x1b077a6a,0xf4b7f982,0x29de786d,0x7516b639],\n\
+ ct: [0x275cfc04,0x13d8ccb7,0x0513c385,0x9b1d0f72] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x9c2d8842,0xe5f48f57,0x648205d3,0x9a239af1],\n\
+ ct: [0xc9b8135f,0xf1b5adc4,0x13dfd053,0xb21bd96d] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xbff52510,0x095f518e,0xcca60af4,0x205444bb],\n\
+ ct: [0x4a3650c3,0x371ce2eb,0x35e389a1,0x71427440] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x51719783,0xd3185a53,0x5bd75adc,0x65071ce1],\n\
+ ct: [0x4f354592,0xff7c8847,0xd2d0870c,0xa9481b7c] },\n\
+ { key: [0xe9f065d7,0xc1357358,0x7f787535,0x7dfbb16c,0x53489f6a,0x4bd0f7cd],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x0956259c,0x9cd5cfd0,0x181cca53,0x380cde06] },\n\
+ { key: [0x15d20f6e,0xbc7e649f,0xd95b76b1,0x07e6daba,0x967c8a94,0x84797f29],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8e4e1842,0x4e591a3d,0x5b6f0876,0xf16f8594] },\n\
+ { key: [0xa8a282ee,0x31c03fae,0x4f8e9b89,0x30d5473c,0x2ed695a3,0x47e88b7c],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x93f3270c,0xfc877ef1,0x7e106ce9,0x38979cb0] },\n\
+ { key: [0xcd62376d,0x5ebb4149,0x17f0c78f,0x05266433,0xdc9192a1,0xec943300],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x7f6c25ff,0x41858561,0xbb62f364,0x92e93c29] },\n\
+ { key: [0x502a6ab3,0x6984af26,0x8bf423c7,0xf5092052,0x07fc1552,0xaf4a91e5],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8e06556d,0xcbb00b80,0x9a025047,0xcff2a940] },\n\
+ { key: [0x25a39dbf,0xd8034f71,0xa81f9ceb,0x55026e40,0x37f8f6aa,0x30ab44ce],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3608c344,0x868e9455,0x5d23a120,0xf8a5502d] },\n\
+ { key: [0xe08c1541,0x1774ec4a,0x908b64ea,0xdc6ac419,0x9c7cd453,0xf3aaef53],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x77da2021,0x935b840b,0x7f5dcc39,0x132da9e5] },\n\
+ { key: [0x3b375a1f,0xf7e8d444,0x09696e63,0x26ec9dec,0x86138e2a,0xe010b980],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3b7c24f8,0x25e3bf98,0x73c9f14d,0x39a0e6f4] },\n\
+ { key: [0x950bb9f2,0x2cc35be6,0xfe79f52c,0x320af93d,0xec5bc9c0,0xc2f9cd53],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x64ebf956,0x86b35350,0x8c90ecd8,0xb6134316] },\n\
+ { key: [0x7001c487,0xcc3e572c,0xfc92f4d0,0xe697d982,0xe8856fdc,0xc957da40],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xff558c5d,0x27210b79,0x29b73fc7,0x08eb4cf1] },\n\
+ { key: [0xf029ce61,0xd4e5a405,0xb41ead0a,0x883cc6a7,0x37da2cf5,0x0a6c92ae],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa2c3b2a8,0x18075490,0xa7b4c143,0x80f02702] },\n\
+ { key: [0x61257134,0xa518a0d5,0x7d9d244d,0x45f6498c,0xbc32f2ba,0xfc522d79],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xcfe4d740,0x02696ccf,0x7d87b14a,0x2f9cafc9] },\n\
+ { key: [0xb0ab0a6a,0x818baef2,0xd11fa33e,0xac947284,0xfb7d748c,0xfb75e570],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd2eafd86,0xf63b109b,0x91f5dbb3,0xa3fb7e13] },\n\
+ { key: [0xee053aa0,0x11c8b428,0xcdcc3636,0x313c54d6,0xa03cac01,0xc71579d6],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x9b9fdd1c,0x5975655f,0x539998b3,0x06a324af] },\n\
+ { key: [0xd2926527,0xe0aa9f37,0xb45e2ec2,0xade5853e,0xf8075761,0x04c7ace3],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xdd619e1c,0xf2044461,0x12e0af2b,0x9afa8f8c] },\n\
+ { key: [0x982215f4,0xe173dfa0,0xfcffe5d3,0xda41c481,0x2c7bcc8e,0xd3540f93],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd4f0aae1,0x3c8fe933,0x9fbf9e69,0xed0ad74d] },\n\
+ { key: [0x98c6b8e0,0x1e379fbd,0x14e61af6,0xaf891596,0x583565f2,0xa27d59e9],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x19c80ec4,0xa6deb7e5,0xed1033dd,0xa933498f] },\n\
+ { key: [0xb3ad5cea,0x1dddc214,0xca969ac3,0x5f37dae1,0xa9a9d152,0x8f89bb35],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3cf5e1d2,0x1a17956d,0x1dffad6a,0x7c41c659] },\n\
+ { key: [0x45899367,0xc3132849,0x763073c4,0x35a9288a,0x766c8b9e,0xc2308516],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x69fd12e8,0x505f8ded,0x2fdcb197,0xa121b362] },\n\
+ { key: [0xec250e04,0xc3903f60,0x2647b85a,0x401a1ae7,0xca2f02f6,0x7fa4253e],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8aa584e2,0xcc4d1741,0x7a97cb9a,0x28ba29c8] },\n\
+ { key: [0xd077a03b,0xd8a38973,0x928ccafe,0x4a9d2f45,0x5130bd0a,0xf5ae46a9],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xabc786fb,0x1edb5045,0x80c4d882,0xef29a0c7] },\n\
+ { key: [0xd184c36c,0xf0dddfec,0x39e65419,0x50060222,0x37871a47,0xc33d3198],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x2e19fb60,0xa3e1de01,0x66f483c9,0x7824a978] },\n\
+ { key: [0x4c6994ff,0xa9dcdc80,0x5b60c2c0,0x095334c4,0x2d95a8fc,0x0ca5b080],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x76567095,0x38dd5fec,0x41e0ce6a,0x0f8e207d] },\n\
+ { key: [0xc88f5b00,0xa4ef9a68,0x40e2acaf,0x33f00a3b,0xdc4e2589,0x5303fa72],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa67cf333,0xb314d411,0xd3c0ae6e,0x1cfcd8f5] },\n\
+ { key: [0xe9f065d7,0xc1357358,0x7f787535,0x7dfbb16c,0x53489f6a,0x4bd0f7cd],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x0956259c,0x9cd5cfd0,0x181cca53,0x380cde06] },\n\
+ { key: [0x15d20f6e,0xbc7e649f,0xd95b76b1,0x07e6daba,0x967c8a94,0x84797f29],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8e4e1842,0x4e591a3d,0x5b6f0876,0xf16f8594] },\n\
+ { key: [0xa8a282ee,0x31c03fae,0x4f8e9b89,0x30d5473c,0x2ed695a3,0x47e88b7c],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x93f3270c,0xfc877ef1,0x7e106ce9,0x38979cb0] },\n\
+ { key: [0xcd62376d,0x5ebb4149,0x17f0c78f,0x05266433,0xdc9192a1,0xec943300],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x7f6c25ff,0x41858561,0xbb62f364,0x92e93c29] },\n\
+ { key: [0x502a6ab3,0x6984af26,0x8bf423c7,0xf5092052,0x07fc1552,0xaf4a91e5],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8e06556d,0xcbb00b80,0x9a025047,0xcff2a940] },\n\
+ { key: [0x25a39dbf,0xd8034f71,0xa81f9ceb,0x55026e40,0x37f8f6aa,0x30ab44ce],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3608c344,0x868e9455,0x5d23a120,0xf8a5502d] },\n\
+ { key: [0xe08c1541,0x1774ec4a,0x908b64ea,0xdc6ac419,0x9c7cd453,0xf3aaef53],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x77da2021,0x935b840b,0x7f5dcc39,0x132da9e5] },\n\
+ { key: [0x3b375a1f,0xf7e8d444,0x09696e63,0x26ec9dec,0x86138e2a,0xe010b980],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3b7c24f8,0x25e3bf98,0x73c9f14d,0x39a0e6f4] },\n\
+ { key: [0x950bb9f2,0x2cc35be6,0xfe79f52c,0x320af93d,0xec5bc9c0,0xc2f9cd53],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x64ebf956,0x86b35350,0x8c90ecd8,0xb6134316] },\n\
+ { key: [0x7001c487,0xcc3e572c,0xfc92f4d0,0xe697d982,0xe8856fdc,0xc957da40],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xff558c5d,0x27210b79,0x29b73fc7,0x08eb4cf1] },\n\
+ { key: [0xf029ce61,0xd4e5a405,0xb41ead0a,0x883cc6a7,0x37da2cf5,0x0a6c92ae],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa2c3b2a8,0x18075490,0xa7b4c143,0x80f02702] },\n\
+ { key: [0x61257134,0xa518a0d5,0x7d9d244d,0x45f6498c,0xbc32f2ba,0xfc522d79],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xcfe4d740,0x02696ccf,0x7d87b14a,0x2f9cafc9] },\n\
+ { key: [0xb0ab0a6a,0x818baef2,0xd11fa33e,0xac947284,0xfb7d748c,0xfb75e570],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd2eafd86,0xf63b109b,0x91f5dbb3,0xa3fb7e13] },\n\
+ { key: [0xee053aa0,0x11c8b428,0xcdcc3636,0x313c54d6,0xa03cac01,0xc71579d6],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x9b9fdd1c,0x5975655f,0x539998b3,0x06a324af] },\n\
+ { key: [0xd2926527,0xe0aa9f37,0xb45e2ec2,0xade5853e,0xf8075761,0x04c7ace3],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xdd619e1c,0xf2044461,0x12e0af2b,0x9afa8f8c] },\n\
+ { key: [0x982215f4,0xe173dfa0,0xfcffe5d3,0xda41c481,0x2c7bcc8e,0xd3540f93],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd4f0aae1,0x3c8fe933,0x9fbf9e69,0xed0ad74d] },\n\
+ { key: [0x98c6b8e0,0x1e379fbd,0x14e61af6,0xaf891596,0x583565f2,0xa27d59e9],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x19c80ec4,0xa6deb7e5,0xed1033dd,0xa933498f] },\n\
+ { key: [0xb3ad5cea,0x1dddc214,0xca969ac3,0x5f37dae1,0xa9a9d152,0x8f89bb35],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3cf5e1d2,0x1a17956d,0x1dffad6a,0x7c41c659] },\n\
+ { key: [0x45899367,0xc3132849,0x763073c4,0x35a9288a,0x766c8b9e,0xc2308516],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x69fd12e8,0x505f8ded,0x2fdcb197,0xa121b362] },\n\
+ { key: [0xec250e04,0xc3903f60,0x2647b85a,0x401a1ae7,0xca2f02f6,0x7fa4253e],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8aa584e2,0xcc4d1741,0x7a97cb9a,0x28ba29c8] },\n\
+ { key: [0xd077a03b,0xd8a38973,0x928ccafe,0x4a9d2f45,0x5130bd0a,0xf5ae46a9],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xabc786fb,0x1edb5045,0x80c4d882,0xef29a0c7] },\n\
+ { key: [0xd184c36c,0xf0dddfec,0x39e65419,0x50060222,0x37871a47,0xc33d3198],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x2e19fb60,0xa3e1de01,0x66f483c9,0x7824a978] },\n\
+ { key: [0x4c6994ff,0xa9dcdc80,0x5b60c2c0,0x095334c4,0x2d95a8fc,0x0ca5b080],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x76567095,0x38dd5fec,0x41e0ce6a,0x0f8e207d] },\n\
+ { key: [0xc88f5b00,0xa4ef9a68,0x40e2acaf,0x33f00a3b,0xdc4e2589,0x5303fa72],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa67cf333,0xb314d411,0xd3c0ae6e,0x1cfcd8f5] },\n\
+ { key: [0x80000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xde885dc8,0x7f5a9259,0x4082d02c,0xc1e1b42c] },\n\
+ { key: [0xc0000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x132b074e,0x80f2a597,0xbf5febd8,0xea5da55e] },\n\
+ { key: [0xe0000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6eccedf8,0xde592c22,0xfb81347b,0x79f2db1f] },\n\
+ { key: [0xf0000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x180b09f2,0x67c45145,0xdb2f826c,0x2582d35c] },\n\
+ { key: [0xf8000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xedd807ef,0x7652d7eb,0x0e13c8b5,0xe15b3bc0] },\n\
+ { key: [0xfc000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x9978bcf8,0xdd8fd722,0x41223ad2,0x4b31b8a4] },\n\
+ { key: [0xfe000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x5310f654,0x343e8f27,0xe12c83a4,0x8d24ff81] },\n\
+ { key: [0xff000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x833f7125,0x8d53036b,0x02952c76,0xc744f5a1] },\n\
+ { key: [0xff800000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xeba83ff2,0x00cff931,0x8a92f869,0x1a06b09f] },\n\
+ { key: [0xffc00000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xff620ccb,0xe9f3292a,0xbdf2176b,0x09f04eba] },\n\
+ { key: [0xffe00000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x7ababc4b,0x3f516c9a,0xafb35f41,0x40b548f9] },\n\
+ { key: [0xfff00000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xaa187824,0xd9c4582b,0x0916493e,0xcbde8c57] },\n\
+ { key: [0xfff80000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x1c0ad553,0x177fd5ea,0x1092c9d6,0x26a29dc4] },\n\
+ { key: [0xfffc0000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa5dc46c3,0x72611941,0x24ecaebd,0x680408ec] },\n\
+ { key: [0xfffe0000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xe4f2f2ae,0x23e9b10b,0xacfa5860,0x1531ba54] },\n\
+ { key: [0xffff0000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb7d67cf1,0xa1e91e8f,0xf3a57a17,0x2c7bf412] },\n\
+ { key: [0xffff8000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x26706be0,0x6967884e,0x847d1371,0x28ce47b3] },\n\
+ { key: [0xffffc000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb2f8b409,0xb0585909,0xaad3a7b5,0xa219072a] },\n\
+ { key: [0xffffe000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x5e4b7bff,0x0290c783,0x44c54a23,0xb722cd20] },\n\
+ { key: [0xfffff000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x07093657,0x552d4414,0x227ce161,0xe9ebf7dd] },\n\
+ { key: [0xfffff800,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xe1af1e7d,0x8bc225ed,0x4dffb771,0xecbb9e67] },\n\
+ { key: [0xfffffc00,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xef655525,0x3635d843,0x2156cfd9,0xc11b145a] },\n\
+ { key: [0xfffffe00,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xfb403507,0x4a5d4260,0xc90cbd6d,0xa6c3fceb] },\n\
+ { key: [0xffffff00,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x446ee416,0xf9ad1c10,0x3eb0cc96,0x751c88e1] },\n\
+ { key: [0xffffff80,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x198ae2a4,0x637ac0a7,0x890a8fd1,0x485445c9] },\n\
+ { key: [0xffffffc0,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x562012ec,0x8faded08,0x25fb2fa7,0x0ab30cbd] },\n\
+ { key: [0xffffffe0,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xcc8a64b4,0x6b5d88bf,0x7f247d4d,0xbaf38f05] },\n\
+ { key: [0xfffffff0,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa1682537,0x62e2cc81,0xb42d1e50,0x01762699] },\n\
+ { key: [0xfffffff8,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x1b41f83b,0x38ce5032,0xc6cd7af9,0x8cf62061] },\n\
+ { key: [0xfffffffc,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x61a89990,0xcd141175,0x0d5fb0dc,0x988447d4] },\n\
+ { key: [0xfffffffe,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb5accc8e,0xd629edf8,0xc68a5391,0x83b1ea82] },\n\
+ { key: [0xffffffff,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb16fa71f,0x846b81a1,0x3f361c43,0xa851f290] },\n\
+ { key: [0xffffffff,0x80000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x4fad6efd,0xff5975ae,0xe7692234,0xbcd54488] },\n\
+ { key: [0xffffffff,0xc0000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xebfdb05a,0x783d0308,0x2dfe5fdd,0x80a00b17] },\n\
+ { key: [0xffffffff,0xe0000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xeb81b584,0x766997af,0x6ba5529d,0x3bdd8609] },\n\
+ { key: [0xffffffff,0xf0000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x0cf4ff4f,0x49c8a0ca,0x060c4434,0x99e29313] },\n\
+ { key: [0xffffffff,0xf8000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xcc4ba8a8,0xe029f8b2,0x6d8afff9,0xdf133bb6] },\n\
+ { key: [0xffffffff,0xfc000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xfefebf64,0x360f38e4,0xe63558f0,0xffc550c3] },\n\
+ { key: [0xffffffff,0xfe000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x12ad98cb,0xf725137d,0x6a8108c2,0xbed99322] },\n\
+ { key: [0xffffffff,0xff000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6afaa996,0x226198b3,0xe2610413,0xce1b3f78] },\n\
+ { key: [0xffffffff,0xff800000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x2a8ce674,0x7a7e3936,0x7828e290,0x848502d9] },\n\
+ { key: [0xffffffff,0xffc00000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x223736e8,0xb8f89ca1,0xe37b6dea,0xb40facf1] },\n\
+ { key: [0xffffffff,0xffe00000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc0f797e5,0x0418b95f,0xa6013333,0x917a9480] },\n\
+ { key: [0xffffffff,0xfff00000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa758de37,0xc2ece2a0,0x2c73c01f,0xedc9a132] },\n\
+ { key: [0xffffffff,0xfff80000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3a9b87ae,0x77bae706,0x803966c6,0x6c73adbd] },\n\
+ { key: [0xffffffff,0xfffc0000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd365ab8d,0xf8ffd782,0xe358121a,0x4a4fc541] },\n\
+ { key: [0xffffffff,0xfffe0000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc8dcd9e6,0xf75e6c36,0xc8daee04,0x66f0ed74] },\n\
+ { key: [0xffffffff,0xffff0000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc79a637b,0xeb1c0304,0xf14014c0,0x37e736dd] },\n\
+ { key: [0xffffffff,0xffff8000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x105f0a25,0xe84ac930,0xd996281a,0x5f954dd9] },\n\
+ { key: [0xffffffff,0xffffc000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x42e4074b,0x2927973e,0x8d17ffa9,0x2f7fe615] },\n\
+ { key: [0xffffffff,0xffffe000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x4fe2a9d2,0xc1824449,0xc69e3e03,0x98f12963] },\n\
+ { key: [0xffffffff,0xfffff000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb7f29c1e,0x1f62847a,0x15253b28,0xa1e9d712] },\n\
+ { key: [0xffffffff,0xfffff800,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x36ed5d29,0xb903f31e,0x8983ef8b,0x0a2bf990] },\n\
+ { key: [0xffffffff,0xfffffc00,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x27b80702,0x70810f9d,0x023f9dd7,0xff3b4aa2] },\n\
+ { key: [0xffffffff,0xfffffe00,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x94d46e15,0x5c1228f6,0x1d1a0db4,0x815ecc4b] },\n\
+ { key: [0xffffffff,0xffffff00,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xca6108d1,0xd9807142,0x8eeceef1,0x714b96dd] },\n\
+ { key: [0xffffffff,0xffffff80,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xdc5b25b7,0x1b6296cf,0x73dd2cdc,0xac2f70b1] },\n\
+ { key: [0xffffffff,0xffffffc0,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x44aba95e,0x8a06a2d9,0xd3530d26,0x77878c80] },\n\
+ { key: [0xffffffff,0xffffffe0,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa570d20e,0x89b467e8,0xf5176061,0xb81dd396] },\n\
+ { key: [0xffffffff,0xfffffff0,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x758f4467,0xa5d8f1e7,0x307dc30b,0x34e404f4] },\n\
+ { key: [0xffffffff,0xfffffff8,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xbcea28e9,0x071b5a23,0x02970ff3,0x52451bc5] },\n\
+ { key: [0xffffffff,0xfffffffc,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x7523c00b,0xc177d331,0xad312e09,0xc9015c1c] },\n\
+ { key: [0xffffffff,0xfffffffe,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xccac61e3,0x183747b3,0xf5836da2,0x1a1bc4f4] },\n\
+ { key: [0xffffffff,0xffffffff,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x707b0757,0x91878880,0xb44189d3,0x522b8c30] },\n\
+ { key: [0xffffffff,0xffffffff,0x80000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x7132d0c0,0xe4a07593,0xcf12ebb1,0x2be7688c] },\n\
+ { key: [0xffffffff,0xffffffff,0xc0000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xeffbac16,0x44deb0c7,0x84275fe5,0x6e19ead3] },\n\
+ { key: [0xffffffff,0xffffffff,0xe0000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa005063f,0x30f4228b,0x374e2459,0x738f26bb] },\n\
+ { key: [0xffffffff,0xffffffff,0xf0000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x29975b5f,0x48bb68fc,0xbbc7cea9,0x3b452ed7] },\n\
+ { key: [0xffffffff,0xffffffff,0xf8000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xcf3f2576,0xe2afedc7,0x4bb1ca7e,0xeec1c0e7] },\n\
+ { key: [0xffffffff,0xffffffff,0xfc000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x07c403f5,0xf966e0e3,0xd9f296d6,0x226dca28] },\n\
+ { key: [0xffffffff,0xffffffff,0xfe000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc8c20908,0x249ab4a3,0x4d6dd0a3,0x1327ff1a] },\n\
+ { key: [0xffffffff,0xffffffff,0xff000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc0541329,0xecb6159a,0xb23b7fc5,0xe6a21bca] },\n\
+ { key: [0xffffffff,0xffffffff,0xff800000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x7aa1acf1,0xa2ed9ba7,0x2bc6deb3,0x1d88b863] },\n\
+ { key: [0xffffffff,0xffffffff,0xffc00000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x808bd8ed,0xdabb6f3b,0xf0d5a8a2,0x7be1fe8a] },\n\
+ { key: [0xffffffff,0xffffffff,0xffe00000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x273c7d76,0x85e14ec6,0x6bbb96b8,0xf05b6ddd] },\n\
+ { key: [0xffffffff,0xffffffff,0xfff00000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x32752eef,0xc8c2a93f,0x91b6e73e,0xb07cca6e] },\n\
+ { key: [0xffffffff,0xffffffff,0xfff80000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd893e7d6,0x2f6ce502,0xc64f75e2,0x81f9c000] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffc0000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8dfd999b,0xe5d0cfa3,0x5732c0dd,0xc88ff5a5] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffe0000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x02647c76,0xa300c317,0x3b841487,0xeb2bae9f] },\n\
+ { key: [0xffffffff,0xffffffff,0xffff0000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x172df8b0,0x2f04b53a,0xdab028b4,0xe01acd87] },\n\
+ { key: [0xffffffff,0xffffffff,0xffff8000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x054b3bf4,0x998aeb05,0xafd87ec5,0x36533a36] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffc000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3783f7bf,0x44c97f06,0x5258a666,0xcae03020] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffe000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xaad4c8a6,0x3f809541,0x04de7b92,0xcede1be1] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffff000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xcbfe6181,0x0fd5467c,0xcdacb758,0x00f3ac07] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffff800,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x830d8a25,0x90f7d8e1,0xb55a737f,0x4af45f34] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffffc00,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xfffcd468,0x3f858058,0xe7431467,0x1d43fa2c] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffffe00,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x523d0bab,0xbb82f46e,0xbc9e70b1,0xcd41ddd0] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffff00,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x344aab37,0x080d7486,0xf7d542a3,0x09e53eed] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffff80,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x56c5609d,0x0906b23a,0xb9caca81,0x6f5dbebd] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffc0,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x7026026e,0xedd91adc,0x6d831cdf,0x9894bdc6] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffe0,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x88330baa,0x4f2b618f,0xc9d9b021,0xbf503d5a] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffffff0,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xfc9e0ea2,0x2480b0ba,0xc935c8a8,0xebefcdcf] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffffff8,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x29ca779f,0x398fb04f,0x867da7e8,0xa44756cb] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffffffc,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x51f89c42,0x985786bf,0xc43c6df8,0xada36832] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffffffe,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6ac1de5f,0xb8f21d87,0x4e91c53b,0x560c50e3] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x03aa9058,0x490eda30,0x6001a8a9,0xf48d0ca7] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0x80000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xe34ec71d,0x6128d487,0x1865d617,0xc30b37e3] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xc0000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x14be1c53,0x5b17cabd,0x0c4d9352,0x9d69bf47] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xe0000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc9ef6775,0x6507beec,0x9dd38628,0x83478044] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xf0000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x40e231fa,0x5a5948ce,0x2134e92f,0xc0664d4b] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xf8000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x03194b8e,0x5dda5530,0xd0c678c0,0xb48f5d92] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfc000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x90bd086f,0x237cc4fd,0x99f4d76b,0xde6b4826] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfe000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x19259761,0xca17130d,0x6ed86d57,0xcd7951ee] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xff000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd7cbb3f3,0x4b9b450f,0x24b0e851,0x8e54da6d] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xff800000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x725b9cae,0xbe9f7f41,0x7f4068d0,0xd2ee20b3] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffc00000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x9d924b93,0x4a90ce1f,0xd39b8a97,0x94f82672] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffe00000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc50562bf,0x094526a9,0x1c5bc63c,0x0c224995] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfff00000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd2f11805,0x046743bd,0x74f57188,0xd9188df7] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfff80000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8dd274bd,0x0f1b58ae,0x345d9e72,0x33f9b8f3] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffc0000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x9d6bdc8f,0x4ce5feb0,0xf3bed2e4,0xb9a9bb0b] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffe0000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xfd5548bc,0xf3f42565,0xf7efa945,0x62528d46] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffff0000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd2ccaebd,0x3a4c3e80,0xb0637481,0x31ba4a71] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffff8000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xe03cb23d,0x9e11c9d9,0x3f117e9c,0x0a91b576] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffc000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x78f933a2,0x081ac1db,0x84f69d10,0xf4523fe0] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffe000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x4061f741,0x2ed320de,0x0edc8851,0xc2e2436f] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffff000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x9064ba1c,0xd04ce6ba,0xb9847433,0x0814b4d4] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffff800,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x48391bff,0xb9cfff80,0xac238c88,0x6ef0a461] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffffc00,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb8d2a67d,0xf5a999fd,0xbf93edd0,0x343296c9] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffffe00,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xaaca7367,0x396b69a2,0x21bd632b,0xea386eec] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffff00,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa80fd502,0x0dfe65f5,0xf16293ec,0x92c6fd89] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffff80,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x2162995b,0x8217a67f,0x1abc342e,0x146406f8] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffc0,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc6a6164b,0x7a60bae4,0xe986ffac,0x28dfadd9] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffe0,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x64e0d7f9,0x00e3d9c8,0x3e4b8f96,0x717b2146] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffffff0,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x1ad2561d,0xe8c1232f,0x5d8dbab4,0x739b6cbb] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffffff8,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x279689e9,0xa557f58b,0x1c3bf40c,0x97a90964] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffffffc,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc4637e4a,0x5e6377f9,0xcc5a8638,0x045de029] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffffffe,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x492e607e,0x5aea4688,0x594b45f3,0xaee3df90] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xe8c4e438,0x1feec740,0x54954c05,0xb777a00a] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x80000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x91549514,0x605f3824,0x6c9b724a,0xd839f01d] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xc0000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x74b24e3b,0x6fefe40a,0x4f9ef7ac,0x6e44d76a] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xe0000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x2437a683,0xdc5d4b52,0xabb4a123,0xa8df86c6] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xf0000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xbb2852c8,0x91c5947d,0x2ed44032,0xc421b85f] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xf8000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x1b9f5fbd,0x5e8a4264,0xc0a85b80,0x409afa5e] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfc000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x30dab809,0xf85a917f,0xe924733f,0x424ac589] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfe000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xeaef5c1f,0x8d605192,0x646695ce,0xadc65f32] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb8aa9004,0x0b4c15a1,0x2316b78e,0x0f9586fc] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff800000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x97fac829,0x7ceaabc8,0x7d454350,0x601e0673] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffc00000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x9b47ef56,0x7ac28dfe,0x488492f1,0x57e2b2e0] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffe00000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x1b842602,0x7ddb962b,0x5c5ba7eb,0x8bc9ab63] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff00000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xe917fc77,0xe71992a1,0x2dbe4c18,0x068bec82] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff80000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xdceebbc9,0x8840f8ae,0x6daf7657,0x3b7e56f4] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffc0000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x4e11a9f7,0x4205125b,0x61e0aee0,0x47eca20d] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffe0000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf60467f5,0x5a1f17ea,0xb88e8001,0x20cbc284] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffff0000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd436649f,0x600b449e,0xe276530f,0x0cd83c11] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffff8000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3bc0e365,0x6a9e3ac7,0xcd378a73,0x7f53b637] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffc000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6bacae63,0xd33b928a,0xa8380f8d,0x54d88c17] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffe000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8935ffbc,0x75ae6251,0xbf8e859f,0x085adcb9] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffff000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x93dc4970,0xfe35f677,0x47cb0562,0xc06d875a] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffff800,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x14f9df85,0x89758517,0x97ba604f,0xb0d16cc7] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffc00,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x02ea0c98,0xdca10b38,0xc21b3b14,0xe8d1b71f] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffe00,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8f091b1b,0x5b0749b2,0xadc803e6,0x3dda9b72] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffff00,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x05b389e3,0x322c6da0,0x8384345a,0x4137fd08] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffff80,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x381308c4,0x38f35b39,0x9f10ad71,0xb05027d8] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffc0,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x68c230fc,0xfa9279c3,0x409fc423,0xe2acbe04] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffe0,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x1c84a475,0xacb011f3,0xf59f4f46,0xb76274c0] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffff0,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x45119b68,0xcb3f8399,0xee60066b,0x5611a4d7] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffff8,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x9423762f,0x527a4060,0xffca312d,0xcca22a16] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffffc,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf361a274,0x5a33f056,0xa5ac6ace,0x2f08e344] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffffe,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x5ef14576,0x6eca849f,0x5d011536,0xa6557fdb] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc9af27b2,0xc89c9b4c,0xf4a0c410,0x6ac80318] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x80000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xfb9c4f16,0xc621f4ea,0xb7e9ac1d,0x7551dd57] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xc0000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x138e06fb,0xa466fa70,0x854d8c2e,0x524cffb2] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xe0000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xfb4bc78b,0x22507077,0x3f04c404,0x66d4e90c] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xf0000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8b2cbff1,0xed0150fe,0xda8a4799,0xbe94551f] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xf8000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x08b30d7b,0x3f279627,0x09a36bca,0xdfb974bd] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfc000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xfdf6d32e,0x044d77ad,0xcf37fb97,0xac213326] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfe000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x93cb284e,0xcdcfd781,0xa8afe320,0x77949e88] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x7b017bb0,0x2ec87b2b,0x94c96e40,0xa26fc71a] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff800000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc5c038b6,0x990664ab,0x08a3aaa5,0xdf9f3266] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffc00000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x4b7020be,0x37fab625,0x9b2a27f4,0xec551576] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffe00000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x60136703,0x374f64e8,0x60b48ce3,0x1f930716] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff00000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8d63a269,0xb14d506c,0xcc401ab8,0xa9f1b591] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff80000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd317f81d,0xc6aa454a,0xee4bd4a5,0xa5cff4bd] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffc0000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xdddececd,0x5354f04d,0x530d76ed,0x884246eb] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffe0000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x41c5205c,0xc8fd8eda,0x9a3cffd2,0x518f365a] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffff0000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xcf42fb47,0x4293d96e,0xca9db1b3,0x7b1ba676] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffff8000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa2316926,0x07169b4e,0xcdead5cd,0x3b10db3e] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffc000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xace4b91c,0x9c669e77,0xe7acacd1,0x9859ed49] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffe000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x75db7cfd,0x4a7b2b62,0xab78a48f,0x3ddaf4af] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffff000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc1faba2d,0x46e259cf,0x480d7c38,0xe4572a58] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffff800],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x241c45bc,0x6ae16dee,0x6eb7bea1,0x28701582] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffc00],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8fd03057,0xcf136442,0x0c2b7806,0x9a3e2502] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffe00],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xddb505e6,0xcc1384cb,0xaec1df90,0xb80beb20] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffff00],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x5674a3be,0xd27bf4bd,0x3622f9f5,0xfe208306] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffff80],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb687f26a,0x89cfbfbb,0x8e5eeac5,0x4055315e] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffc0],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x0547dd32,0xd3b29ab6,0xa4caeb60,0x6c5b6f78] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffe0],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x186861f8,0xbc5386d3,0x1fb77f72,0x0c3226e6] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffff0],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xeacf1e6c,0x4224efb3,0x8900b185,0xab1dfd42] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffff8],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd241aab0,0x5a42d319,0xde81d874,0xf5c7b90d] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffffc],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x5eb9bc75,0x9e2ad8d2,0x140a6c76,0x2ae9e1ab] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffffe],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x018596e1,0x5e78e2c0,0x64159def,0xce5f3085] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xdd8a4935,0x14231cbf,0x56eccee4,0xc40889fb] },\n\
+ { key: [0x80000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xde885dc8,0x7f5a9259,0x4082d02c,0xc1e1b42c] },\n\
+ { key: [0xc0000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x132b074e,0x80f2a597,0xbf5febd8,0xea5da55e] },\n\
+ { key: [0xe0000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6eccedf8,0xde592c22,0xfb81347b,0x79f2db1f] },\n\
+ { key: [0xf0000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x180b09f2,0x67c45145,0xdb2f826c,0x2582d35c] },\n\
+ { key: [0xf8000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xedd807ef,0x7652d7eb,0x0e13c8b5,0xe15b3bc0] },\n\
+ { key: [0xfc000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x9978bcf8,0xdd8fd722,0x41223ad2,0x4b31b8a4] },\n\
+ { key: [0xfe000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x5310f654,0x343e8f27,0xe12c83a4,0x8d24ff81] },\n\
+ { key: [0xff000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x833f7125,0x8d53036b,0x02952c76,0xc744f5a1] },\n\
+ { key: [0xff800000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xeba83ff2,0x00cff931,0x8a92f869,0x1a06b09f] },\n\
+ { key: [0xffc00000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xff620ccb,0xe9f3292a,0xbdf2176b,0x09f04eba] },\n\
+ { key: [0xffe00000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x7ababc4b,0x3f516c9a,0xafb35f41,0x40b548f9] },\n\
+ { key: [0xfff00000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xaa187824,0xd9c4582b,0x0916493e,0xcbde8c57] },\n\
+ { key: [0xfff80000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x1c0ad553,0x177fd5ea,0x1092c9d6,0x26a29dc4] },\n\
+ { key: [0xfffc0000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa5dc46c3,0x72611941,0x24ecaebd,0x680408ec] },\n\
+ { key: [0xfffe0000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xe4f2f2ae,0x23e9b10b,0xacfa5860,0x1531ba54] },\n\
+ { key: [0xffff0000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb7d67cf1,0xa1e91e8f,0xf3a57a17,0x2c7bf412] },\n\
+ { key: [0xffff8000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x26706be0,0x6967884e,0x847d1371,0x28ce47b3] },\n\
+ { key: [0xffffc000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb2f8b409,0xb0585909,0xaad3a7b5,0xa219072a] },\n\
+ { key: [0xffffe000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x5e4b7bff,0x0290c783,0x44c54a23,0xb722cd20] },\n\
+ { key: [0xfffff000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x07093657,0x552d4414,0x227ce161,0xe9ebf7dd] },\n\
+ { key: [0xfffff800,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xe1af1e7d,0x8bc225ed,0x4dffb771,0xecbb9e67] },\n\
+ { key: [0xfffffc00,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xef655525,0x3635d843,0x2156cfd9,0xc11b145a] },\n\
+ { key: [0xfffffe00,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xfb403507,0x4a5d4260,0xc90cbd6d,0xa6c3fceb] },\n\
+ { key: [0xffffff00,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x446ee416,0xf9ad1c10,0x3eb0cc96,0x751c88e1] },\n\
+ { key: [0xffffff80,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x198ae2a4,0x637ac0a7,0x890a8fd1,0x485445c9] },\n\
+ { key: [0xffffffc0,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x562012ec,0x8faded08,0x25fb2fa7,0x0ab30cbd] },\n\
+ { key: [0xffffffe0,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xcc8a64b4,0x6b5d88bf,0x7f247d4d,0xbaf38f05] },\n\
+ { key: [0xfffffff0,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa1682537,0x62e2cc81,0xb42d1e50,0x01762699] },\n\
+ { key: [0xfffffff8,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x1b41f83b,0x38ce5032,0xc6cd7af9,0x8cf62061] },\n\
+ { key: [0xfffffffc,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x61a89990,0xcd141175,0x0d5fb0dc,0x988447d4] },\n\
+ { key: [0xfffffffe,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb5accc8e,0xd629edf8,0xc68a5391,0x83b1ea82] },\n\
+ { key: [0xffffffff,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb16fa71f,0x846b81a1,0x3f361c43,0xa851f290] },\n\
+ { key: [0xffffffff,0x80000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x4fad6efd,0xff5975ae,0xe7692234,0xbcd54488] },\n\
+ { key: [0xffffffff,0xc0000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xebfdb05a,0x783d0308,0x2dfe5fdd,0x80a00b17] },\n\
+ { key: [0xffffffff,0xe0000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xeb81b584,0x766997af,0x6ba5529d,0x3bdd8609] },\n\
+ { key: [0xffffffff,0xf0000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x0cf4ff4f,0x49c8a0ca,0x060c4434,0x99e29313] },\n\
+ { key: [0xffffffff,0xf8000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xcc4ba8a8,0xe029f8b2,0x6d8afff9,0xdf133bb6] },\n\
+ { key: [0xffffffff,0xfc000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xfefebf64,0x360f38e4,0xe63558f0,0xffc550c3] },\n\
+ { key: [0xffffffff,0xfe000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x12ad98cb,0xf725137d,0x6a8108c2,0xbed99322] },\n\
+ { key: [0xffffffff,0xff000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6afaa996,0x226198b3,0xe2610413,0xce1b3f78] },\n\
+ { key: [0xffffffff,0xff800000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x2a8ce674,0x7a7e3936,0x7828e290,0x848502d9] },\n\
+ { key: [0xffffffff,0xffc00000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x223736e8,0xb8f89ca1,0xe37b6dea,0xb40facf1] },\n\
+ { key: [0xffffffff,0xffe00000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc0f797e5,0x0418b95f,0xa6013333,0x917a9480] },\n\
+ { key: [0xffffffff,0xfff00000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa758de37,0xc2ece2a0,0x2c73c01f,0xedc9a132] },\n\
+ { key: [0xffffffff,0xfff80000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3a9b87ae,0x77bae706,0x803966c6,0x6c73adbd] },\n\
+ { key: [0xffffffff,0xfffc0000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd365ab8d,0xf8ffd782,0xe358121a,0x4a4fc541] },\n\
+ { key: [0xffffffff,0xfffe0000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc8dcd9e6,0xf75e6c36,0xc8daee04,0x66f0ed74] },\n\
+ { key: [0xffffffff,0xffff0000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc79a637b,0xeb1c0304,0xf14014c0,0x37e736dd] },\n\
+ { key: [0xffffffff,0xffff8000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x105f0a25,0xe84ac930,0xd996281a,0x5f954dd9] },\n\
+ { key: [0xffffffff,0xffffc000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x42e4074b,0x2927973e,0x8d17ffa9,0x2f7fe615] },\n\
+ { key: [0xffffffff,0xffffe000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x4fe2a9d2,0xc1824449,0xc69e3e03,0x98f12963] },\n\
+ { key: [0xffffffff,0xfffff000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb7f29c1e,0x1f62847a,0x15253b28,0xa1e9d712] },\n\
+ { key: [0xffffffff,0xfffff800,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x36ed5d29,0xb903f31e,0x8983ef8b,0x0a2bf990] },\n\
+ { key: [0xffffffff,0xfffffc00,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x27b80702,0x70810f9d,0x023f9dd7,0xff3b4aa2] },\n\
+ { key: [0xffffffff,0xfffffe00,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x94d46e15,0x5c1228f6,0x1d1a0db4,0x815ecc4b] },\n\
+ { key: [0xffffffff,0xffffff00,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xca6108d1,0xd9807142,0x8eeceef1,0x714b96dd] },\n\
+ { key: [0xffffffff,0xffffff80,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xdc5b25b7,0x1b6296cf,0x73dd2cdc,0xac2f70b1] },\n\
+ { key: [0xffffffff,0xffffffc0,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x44aba95e,0x8a06a2d9,0xd3530d26,0x77878c80] },\n\
+ { key: [0xffffffff,0xffffffe0,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa570d20e,0x89b467e8,0xf5176061,0xb81dd396] },\n\
+ { key: [0xffffffff,0xfffffff0,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x758f4467,0xa5d8f1e7,0x307dc30b,0x34e404f4] },\n\
+ { key: [0xffffffff,0xfffffff8,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xbcea28e9,0x071b5a23,0x02970ff3,0x52451bc5] },\n\
+ { key: [0xffffffff,0xfffffffc,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x7523c00b,0xc177d331,0xad312e09,0xc9015c1c] },\n\
+ { key: [0xffffffff,0xfffffffe,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xccac61e3,0x183747b3,0xf5836da2,0x1a1bc4f4] },\n\
+ { key: [0xffffffff,0xffffffff,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x707b0757,0x91878880,0xb44189d3,0x522b8c30] },\n\
+ { key: [0xffffffff,0xffffffff,0x80000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x7132d0c0,0xe4a07593,0xcf12ebb1,0x2be7688c] },\n\
+ { key: [0xffffffff,0xffffffff,0xc0000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xeffbac16,0x44deb0c7,0x84275fe5,0x6e19ead3] },\n\
+ { key: [0xffffffff,0xffffffff,0xe0000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa005063f,0x30f4228b,0x374e2459,0x738f26bb] },\n\
+ { key: [0xffffffff,0xffffffff,0xf0000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x29975b5f,0x48bb68fc,0xbbc7cea9,0x3b452ed7] },\n\
+ { key: [0xffffffff,0xffffffff,0xf8000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xcf3f2576,0xe2afedc7,0x4bb1ca7e,0xeec1c0e7] },\n\
+ { key: [0xffffffff,0xffffffff,0xfc000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x07c403f5,0xf966e0e3,0xd9f296d6,0x226dca28] },\n\
+ { key: [0xffffffff,0xffffffff,0xfe000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc8c20908,0x249ab4a3,0x4d6dd0a3,0x1327ff1a] },\n\
+ { key: [0xffffffff,0xffffffff,0xff000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc0541329,0xecb6159a,0xb23b7fc5,0xe6a21bca] },\n\
+ { key: [0xffffffff,0xffffffff,0xff800000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x7aa1acf1,0xa2ed9ba7,0x2bc6deb3,0x1d88b863] },\n\
+ { key: [0xffffffff,0xffffffff,0xffc00000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x808bd8ed,0xdabb6f3b,0xf0d5a8a2,0x7be1fe8a] },\n\
+ { key: [0xffffffff,0xffffffff,0xffe00000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x273c7d76,0x85e14ec6,0x6bbb96b8,0xf05b6ddd] },\n\
+ { key: [0xffffffff,0xffffffff,0xfff00000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x32752eef,0xc8c2a93f,0x91b6e73e,0xb07cca6e] },\n\
+ { key: [0xffffffff,0xffffffff,0xfff80000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd893e7d6,0x2f6ce502,0xc64f75e2,0x81f9c000] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffc0000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8dfd999b,0xe5d0cfa3,0x5732c0dd,0xc88ff5a5] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffe0000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x02647c76,0xa300c317,0x3b841487,0xeb2bae9f] },\n\
+ { key: [0xffffffff,0xffffffff,0xffff0000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x172df8b0,0x2f04b53a,0xdab028b4,0xe01acd87] },\n\
+ { key: [0xffffffff,0xffffffff,0xffff8000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x054b3bf4,0x998aeb05,0xafd87ec5,0x36533a36] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffc000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3783f7bf,0x44c97f06,0x5258a666,0xcae03020] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffe000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xaad4c8a6,0x3f809541,0x04de7b92,0xcede1be1] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffff000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xcbfe6181,0x0fd5467c,0xcdacb758,0x00f3ac07] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffff800,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x830d8a25,0x90f7d8e1,0xb55a737f,0x4af45f34] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffffc00,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xfffcd468,0x3f858058,0xe7431467,0x1d43fa2c] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffffe00,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x523d0bab,0xbb82f46e,0xbc9e70b1,0xcd41ddd0] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffff00,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x344aab37,0x080d7486,0xf7d542a3,0x09e53eed] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffff80,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x56c5609d,0x0906b23a,0xb9caca81,0x6f5dbebd] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffc0,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x7026026e,0xedd91adc,0x6d831cdf,0x9894bdc6] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffe0,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x88330baa,0x4f2b618f,0xc9d9b021,0xbf503d5a] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffffff0,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xfc9e0ea2,0x2480b0ba,0xc935c8a8,0xebefcdcf] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffffff8,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x29ca779f,0x398fb04f,0x867da7e8,0xa44756cb] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffffffc,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x51f89c42,0x985786bf,0xc43c6df8,0xada36832] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffffffe,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6ac1de5f,0xb8f21d87,0x4e91c53b,0x560c50e3] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x03aa9058,0x490eda30,0x6001a8a9,0xf48d0ca7] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0x80000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xe34ec71d,0x6128d487,0x1865d617,0xc30b37e3] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xc0000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x14be1c53,0x5b17cabd,0x0c4d9352,0x9d69bf47] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xe0000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc9ef6775,0x6507beec,0x9dd38628,0x83478044] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xf0000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x40e231fa,0x5a5948ce,0x2134e92f,0xc0664d4b] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xf8000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x03194b8e,0x5dda5530,0xd0c678c0,0xb48f5d92] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfc000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x90bd086f,0x237cc4fd,0x99f4d76b,0xde6b4826] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfe000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x19259761,0xca17130d,0x6ed86d57,0xcd7951ee] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xff000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd7cbb3f3,0x4b9b450f,0x24b0e851,0x8e54da6d] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xff800000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x725b9cae,0xbe9f7f41,0x7f4068d0,0xd2ee20b3] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffc00000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x9d924b93,0x4a90ce1f,0xd39b8a97,0x94f82672] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffe00000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc50562bf,0x094526a9,0x1c5bc63c,0x0c224995] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfff00000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd2f11805,0x046743bd,0x74f57188,0xd9188df7] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfff80000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8dd274bd,0x0f1b58ae,0x345d9e72,0x33f9b8f3] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffc0000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x9d6bdc8f,0x4ce5feb0,0xf3bed2e4,0xb9a9bb0b] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffe0000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xfd5548bc,0xf3f42565,0xf7efa945,0x62528d46] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffff0000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd2ccaebd,0x3a4c3e80,0xb0637481,0x31ba4a71] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffff8000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xe03cb23d,0x9e11c9d9,0x3f117e9c,0x0a91b576] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffc000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x78f933a2,0x081ac1db,0x84f69d10,0xf4523fe0] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffe000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x4061f741,0x2ed320de,0x0edc8851,0xc2e2436f] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffff000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x9064ba1c,0xd04ce6ba,0xb9847433,0x0814b4d4] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffff800,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x48391bff,0xb9cfff80,0xac238c88,0x6ef0a461] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffffc00,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb8d2a67d,0xf5a999fd,0xbf93edd0,0x343296c9] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffffe00,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xaaca7367,0x396b69a2,0x21bd632b,0xea386eec] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffff00,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa80fd502,0x0dfe65f5,0xf16293ec,0x92c6fd89] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffff80,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x2162995b,0x8217a67f,0x1abc342e,0x146406f8] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffc0,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc6a6164b,0x7a60bae4,0xe986ffac,0x28dfadd9] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffe0,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x64e0d7f9,0x00e3d9c8,0x3e4b8f96,0x717b2146] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffffff0,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x1ad2561d,0xe8c1232f,0x5d8dbab4,0x739b6cbb] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffffff8,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x279689e9,0xa557f58b,0x1c3bf40c,0x97a90964] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffffffc,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc4637e4a,0x5e6377f9,0xcc5a8638,0x045de029] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffffffe,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x492e607e,0x5aea4688,0x594b45f3,0xaee3df90] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xe8c4e438,0x1feec740,0x54954c05,0xb777a00a] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x80000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x91549514,0x605f3824,0x6c9b724a,0xd839f01d] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xc0000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x74b24e3b,0x6fefe40a,0x4f9ef7ac,0x6e44d76a] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xe0000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x2437a683,0xdc5d4b52,0xabb4a123,0xa8df86c6] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xf0000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xbb2852c8,0x91c5947d,0x2ed44032,0xc421b85f] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xf8000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x1b9f5fbd,0x5e8a4264,0xc0a85b80,0x409afa5e] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfc000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x30dab809,0xf85a917f,0xe924733f,0x424ac589] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfe000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xeaef5c1f,0x8d605192,0x646695ce,0xadc65f32] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb8aa9004,0x0b4c15a1,0x2316b78e,0x0f9586fc] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff800000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x97fac829,0x7ceaabc8,0x7d454350,0x601e0673] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffc00000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x9b47ef56,0x7ac28dfe,0x488492f1,0x57e2b2e0] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffe00000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x1b842602,0x7ddb962b,0x5c5ba7eb,0x8bc9ab63] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff00000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xe917fc77,0xe71992a1,0x2dbe4c18,0x068bec82] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff80000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xdceebbc9,0x8840f8ae,0x6daf7657,0x3b7e56f4] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffc0000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x4e11a9f7,0x4205125b,0x61e0aee0,0x47eca20d] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffe0000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf60467f5,0x5a1f17ea,0xb88e8001,0x20cbc284] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffff0000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd436649f,0x600b449e,0xe276530f,0x0cd83c11] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffff8000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3bc0e365,0x6a9e3ac7,0xcd378a73,0x7f53b637] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffc000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6bacae63,0xd33b928a,0xa8380f8d,0x54d88c17] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffe000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8935ffbc,0x75ae6251,0xbf8e859f,0x085adcb9] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffff000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x93dc4970,0xfe35f677,0x47cb0562,0xc06d875a] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffff800,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x14f9df85,0x89758517,0x97ba604f,0xb0d16cc7] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffc00,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x02ea0c98,0xdca10b38,0xc21b3b14,0xe8d1b71f] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffe00,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8f091b1b,0x5b0749b2,0xadc803e6,0x3dda9b72] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffff00,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x05b389e3,0x322c6da0,0x8384345a,0x4137fd08] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffff80,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x381308c4,0x38f35b39,0x9f10ad71,0xb05027d8] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffc0,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x68c230fc,0xfa9279c3,0x409fc423,0xe2acbe04] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffe0,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x1c84a475,0xacb011f3,0xf59f4f46,0xb76274c0] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffff0,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x45119b68,0xcb3f8399,0xee60066b,0x5611a4d7] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffff8,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x9423762f,0x527a4060,0xffca312d,0xcca22a16] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffffc,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf361a274,0x5a33f056,0xa5ac6ace,0x2f08e344] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffffe,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x5ef14576,0x6eca849f,0x5d011536,0xa6557fdb] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc9af27b2,0xc89c9b4c,0xf4a0c410,0x6ac80318] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x80000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xfb9c4f16,0xc621f4ea,0xb7e9ac1d,0x7551dd57] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xc0000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x138e06fb,0xa466fa70,0x854d8c2e,0x524cffb2] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xe0000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xfb4bc78b,0x22507077,0x3f04c404,0x66d4e90c] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xf0000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8b2cbff1,0xed0150fe,0xda8a4799,0xbe94551f] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xf8000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x08b30d7b,0x3f279627,0x09a36bca,0xdfb974bd] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfc000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xfdf6d32e,0x044d77ad,0xcf37fb97,0xac213326] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfe000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x93cb284e,0xcdcfd781,0xa8afe320,0x77949e88] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x7b017bb0,0x2ec87b2b,0x94c96e40,0xa26fc71a] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff800000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc5c038b6,0x990664ab,0x08a3aaa5,0xdf9f3266] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffc00000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x4b7020be,0x37fab625,0x9b2a27f4,0xec551576] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffe00000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x60136703,0x374f64e8,0x60b48ce3,0x1f930716] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff00000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8d63a269,0xb14d506c,0xcc401ab8,0xa9f1b591] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff80000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd317f81d,0xc6aa454a,0xee4bd4a5,0xa5cff4bd] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffc0000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xdddececd,0x5354f04d,0x530d76ed,0x884246eb] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffe0000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x41c5205c,0xc8fd8eda,0x9a3cffd2,0x518f365a] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffff0000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xcf42fb47,0x4293d96e,0xca9db1b3,0x7b1ba676] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffff8000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa2316926,0x07169b4e,0xcdead5cd,0x3b10db3e] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffc000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xace4b91c,0x9c669e77,0xe7acacd1,0x9859ed49] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffe000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x75db7cfd,0x4a7b2b62,0xab78a48f,0x3ddaf4af] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffff000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc1faba2d,0x46e259cf,0x480d7c38,0xe4572a58] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffff800],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x241c45bc,0x6ae16dee,0x6eb7bea1,0x28701582] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffc00],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8fd03057,0xcf136442,0x0c2b7806,0x9a3e2502] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffe00],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xddb505e6,0xcc1384cb,0xaec1df90,0xb80beb20] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffff00],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x5674a3be,0xd27bf4bd,0x3622f9f5,0xfe208306] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffff80],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb687f26a,0x89cfbfbb,0x8e5eeac5,0x4055315e] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffc0],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x0547dd32,0xd3b29ab6,0xa4caeb60,0x6c5b6f78] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffe0],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x186861f8,0xbc5386d3,0x1fb77f72,0x0c3226e6] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffff0],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xeacf1e6c,0x4224efb3,0x8900b185,0xab1dfd42] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffff8],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd241aab0,0x5a42d319,0xde81d874,0xf5c7b90d] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffffc],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x5eb9bc75,0x9e2ad8d2,0x140a6c76,0x2ae9e1ab] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffffe],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x018596e1,0x5e78e2c0,0x64159def,0xce5f3085] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xdd8a4935,0x14231cbf,0x56eccee4,0xc40889fb] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x80000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xddc6bf79,0x0c15760d,0x8d9aeb6f,0x9a75fd4e] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xc0000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x0a6bdc6d,0x4c1e6280,0x301fd8e9,0x7ddbe601] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xe0000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x9b80eefb,0x7ebe2d2b,0x16247aa0,0xefc72f5d] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xf0000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x7f2c5ece,0x07a98d8b,0xee13c511,0x77395ff7] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xf8000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x7818d800,0xdcf6f4be,0x1e0e94f4,0x03d1e4c2] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfc000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xe74cd1c9,0x2f0919c3,0x5a032412,0x3d6177d3] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfe000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8092a4dc,0xf2da7e77,0xe93bdd37,0x1dfed82e] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xff000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x49af6b37,0x2135acef,0x10132e54,0x8f217b17] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xff800000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8bcd40f9,0x4ebb63b9,0xf7909676,0xe667f1e7] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffc00000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xfe1cffb8,0x3f45dcfb,0x38b29be4,0x38dbd3ab] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffe00000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x0dc58a8d,0x88662370,0x5aec15cb,0x1e70dc0e] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfff00000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc218faa1,0x6056bd07,0x74c3e8d7,0x9c35a5e4] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfff80000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x047bba83,0xf7aa8417,0x31504e01,0x2208fc9e] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffc0000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xdc8f0e49,0x15fd81ba,0x70a33131,0x0882f6da] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffe0000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x1569859e,0xa6b7206c,0x30bf4fd0,0xcbfac33c] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffff0000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x300ade92,0xf88f48fa,0x2df730ec,0x16ef44cd] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffff8000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x1fe6cc3c,0x05965dc0,0x8eb0590c,0x95ac71d0] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffc000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x59e858ea,0xaa97fec3,0x8111275b,0x6cf5abc0] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffe000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x2239455e,0x7afe3b06,0x16100288,0xcc5a723b] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffff000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3ee500c5,0xc8d63479,0x717163e5,0x5c5c4522] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffff800,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd5e38bf1,0x5f16d90e,0x3e214041,0xd774daa8] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffffc00,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb1f4066e,0x6f4f187d,0xfe5f2ad1,0xb17819d0] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffffe00,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6ef4cc4d,0xe49b1106,0x5d7af290,0x9854794a] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffff00,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xac86bc60,0x6b6640c3,0x09e782f2,0x32bf367f] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffff80,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x36aff0ef,0x7bf32807,0x72cf4cac,0x80a0d2b2] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffc0,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x1f8eedea,0x0f62a140,0x6d58cfc3,0xecea72cf] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffe0,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xabf4154a,0x3375a1d3,0xe6b1d454,0x438f95a6] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffffff0,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x96f96e9d,0x607f6615,0xfc192061,0xee648b07] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffffff8,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xcf37cdaa,0xa0d2d536,0xc7185763,0x4c792064] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffffffc,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xfbd6640c,0x80245c2b,0x805373f1,0x30703127] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffffffe,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8d6a8afe,0x55a6e481,0xbadae0d1,0x46f436db] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6a4981f2,0x915e3e68,0xaf6c2238,0x5dd06756] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0x80000000,0x00000000,0x00000000],\n\
+ ct: [0x42a1136e,0x5f8d8d21,0xd3101998,0x642d573b] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xc0000000,0x00000000,0x00000000],\n\
+ ct: [0x9b471596,0xdc69ae15,0x86cee615,0x8b0b0181] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xe0000000,0x00000000,0x00000000],\n\
+ ct: [0x753665c4,0xaf1eff33,0xaa8b628b,0xf8741cfd] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xf0000000,0x00000000,0x00000000],\n\
+ ct: [0x9a682acf,0x40be01f5,0xb2a4193c,0x9a82404d] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xf8000000,0x00000000,0x00000000],\n\
+ ct: [0x54fafe26,0xe4287f17,0xd1935f87,0xeb9ade01] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfc000000,0x00000000,0x00000000],\n\
+ ct: [0x49d541b2,0xe74cfe73,0xe6a8e822,0x5f7bd449] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfe000000,0x00000000,0x00000000],\n\
+ ct: [0x11a45530,0xf624ff6f,0x76a1b382,0x6626ff7b] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xff000000,0x00000000,0x00000000],\n\
+ ct: [0xf96b0c4a,0x8bc6c861,0x30289f60,0xb43b8fba] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xff800000,0x00000000,0x00000000],\n\
+ ct: [0x48c7d0e8,0x0834ebdc,0x35b6735f,0x76b46c8b] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffc00000,0x00000000,0x00000000],\n\
+ ct: [0x2463531a,0xb54d6695,0x5e73edc4,0xcb8eaa45] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffe00000,0x00000000,0x00000000],\n\
+ ct: [0xac9bd8e2,0x53046913,0x4b9d5b06,0x5d4f565b] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfff00000,0x00000000,0x00000000],\n\
+ ct: [0x3f5f9106,0xd0e52f97,0x3d4890e6,0xf37e8a00] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfff80000,0x00000000,0x00000000],\n\
+ ct: [0x20ebc86f,0x1304d272,0xe2e207e5,0x9db639f0] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffc0000,0x00000000,0x00000000],\n\
+ ct: [0xe67ae642,0x6bf9526c,0x972cff07,0x2b52252c] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffe0000,0x00000000,0x00000000],\n\
+ ct: [0x1a518ddd,0xaf9efa0d,0x002cc58d,0x107edfc8] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffff0000,0x00000000,0x00000000],\n\
+ ct: [0xead731af,0x4d3a2fe3,0xb34bed04,0x7942a49f] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffff8000,0x00000000,0x00000000],\n\
+ ct: [0xb1d4efe4,0x0242f83e,0x93b6c8d7,0xefb5eae9] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffc000,0x00000000,0x00000000],\n\
+ ct: [0xcd2b1fec,0x11fd906c,0x5c763009,0x9443610a] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffe000,0x00000000,0x00000000],\n\
+ ct: [0xa1853fe4,0x7fe29289,0xd153161d,0x06387d21] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffff000,0x00000000,0x00000000],\n\
+ ct: [0x46321541,0x79a555c1,0x7ea604d0,0x889fab14] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffff800,0x00000000,0x00000000],\n\
+ ct: [0xdd27cac6,0x401a022e,0x8f38f9f9,0x3e774417] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffffc00,0x00000000,0x00000000],\n\
+ ct: [0xc090313e,0xb98674f3,0x5f312338,0x5fb95d4d] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffffe00,0x00000000,0x00000000],\n\
+ ct: [0xcc352626,0x2b92f02e,0xdce548f7,0x16b9f45c] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffff00,0x00000000,0x00000000],\n\
+ ct: [0xc0838d1a,0x2b16a7c7,0xf0dfcc43,0x3c399c33] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffff80,0x00000000,0x00000000],\n\
+ ct: [0x0d9ac756,0xeb297695,0xeed4d382,0xeb126d26] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffc0,0x00000000,0x00000000],\n\
+ ct: [0x56ede9dd,0xa3f6f141,0xbff1757f,0xa689c3e1] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffe0,0x00000000,0x00000000],\n\
+ ct: [0x768f520e,0xfe0f23e6,0x1d3ec8ad,0x9ce91774] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffffff0,0x00000000,0x00000000],\n\
+ ct: [0xb1144ddf,0xa7575521,0x3390e7c5,0x96660490] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffffff8,0x00000000,0x00000000],\n\
+ ct: [0x1d7c0c40,0x40b355b9,0xd107a993,0x25e3b050] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffffffc,0x00000000,0x00000000],\n\
+ ct: [0xd8e2bb1a,0xe8ee3dcf,0x5bf7d6c3,0x8da82a1a] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffffffe,0x00000000,0x00000000],\n\
+ ct: [0xfaf82d17,0x8af25a98,0x86a47e7f,0x789b98d7] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0x00000000,0x00000000],\n\
+ ct: [0x9b58dbfd,0x77fe5aca,0x9cfc190c,0xd1b82d19] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0x80000000,0x00000000],\n\
+ ct: [0x77f39208,0x9042e478,0xac16c0c8,0x6a0b5db5] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xc0000000,0x00000000],\n\
+ ct: [0x19f08e34,0x20ee69b4,0x77ca1420,0x281c4782] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xe0000000,0x00000000],\n\
+ ct: [0xa1b19bee,0xe4e11713,0x9f74b3c5,0x3fdcb875] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xf0000000,0x00000000],\n\
+ ct: [0xa37a5869,0xb218a9f3,0xa0868d19,0xaea0ad6a] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xf8000000,0x00000000],\n\
+ ct: [0xbc3594e8,0x65bcd026,0x1b132027,0x31f33580] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfc000000,0x00000000],\n\
+ ct: [0x811441ce,0x1d309eee,0x7185e8c7,0x52c07557] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfe000000,0x00000000],\n\
+ ct: [0x959971ce,0x41341905,0x63518e70,0x0b9874d1] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xff000000,0x00000000],\n\
+ ct: [0x76b5614a,0x042707c9,0x8e2132e2,0xe805fe63] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xff800000,0x00000000],\n\
+ ct: [0x7d9fa6a5,0x7530d0f0,0x36fec31c,0x230b0cc6] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffc00000,0x00000000],\n\
+ ct: [0x964153a8,0x3bf6989a,0x4ba80daa,0x91c3e081] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffe00000,0x00000000],\n\
+ ct: [0xa013014d,0x4ce8054c,0xf2591d06,0xf6f2f176] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfff00000,0x00000000],\n\
+ ct: [0xd1c5f639,0x9bf38250,0x2e385eee,0x1474a869] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfff80000,0x00000000],\n\
+ ct: [0x0007e20b,0x8298ec35,0x4f0f5fe7,0x470f36bd] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffc0000,0x00000000],\n\
+ ct: [0xb95ba05b,0x332da61e,0xf63a2b31,0xfcad9879] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffe0000,0x00000000],\n\
+ ct: [0x4620a49b,0xd9674915,0x61669ab2,0x5dce45f4] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffff0000,0x00000000],\n\
+ ct: [0x12e71214,0xae8e04f0,0xbb63d742,0x5c6f14d5] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffff8000,0x00000000],\n\
+ ct: [0x4cc42fc1,0x407b008f,0xe350907c,0x092e80ac] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffc000,0x00000000],\n\
+ ct: [0x08b244ce,0x7cbc8ee9,0x7fbba808,0xcb146fda] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffe000,0x00000000],\n\
+ ct: [0x39b333e8,0x694f2154,0x6ad1edd9,0xd87ed95b] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffff000,0x00000000],\n\
+ ct: [0x3b271f8a,0xb2e6e4a2,0x0ba8090f,0x43ba78f3] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffff800,0x00000000],\n\
+ ct: [0x9ad983f3,0xbf651cd0,0x393f0a73,0xcccdea50] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffffc00,0x00000000],\n\
+ ct: [0x8f476cbf,0xf75c1f72,0x5ce18e4b,0xbcd19b32] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffffe00,0x00000000],\n\
+ ct: [0x905b6267,0xf1d6ab53,0x20835a13,0x3f096f2a] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffff00,0x00000000],\n\
+ ct: [0x145b60d6,0xd0193c23,0xf4221848,0xa892d61a] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffff80,0x00000000],\n\
+ ct: [0x55cfb3fb,0x6d75cad0,0x445bbc8d,0xafa25b0f] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffc0,0x00000000],\n\
+ ct: [0x7b8e7098,0xe357ef71,0x237d46d8,0xb075b0f5] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffe0,0x00000000],\n\
+ ct: [0x2bf27229,0x901eb40f,0x2df9d839,0x8d1505ae] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffffff0,0x00000000],\n\
+ ct: [0x83a63402,0xa77f9ad5,0xc1e931a9,0x31ecd706] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffffff8,0x00000000],\n\
+ ct: [0x6f8ba652,0x1152d31f,0x2bada184,0x3e26b973] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffffffc,0x00000000],\n\
+ ct: [0xe5c3b8e3,0x0fd2d8e6,0x239b17b4,0x4bd23bbd] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffffffe,0x00000000],\n\
+ ct: [0x1ac1f710,0x2c59933e,0x8b2ddc3f,0x14e94baa] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0x00000000],\n\
+ ct: [0x21d9ba49,0xf276b45f,0x11af8fc7,0x1a088e3d] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0x80000000],\n\
+ ct: [0x649f1cdd,0xc3792b46,0x38635a39,0x2bc9bade] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xc0000000],\n\
+ ct: [0xe2775e4b,0x59c1bc2e,0x31a2078c,0x11b5a08c] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xe0000000],\n\
+ ct: [0x2be1fae5,0x048a2558,0x2a679ca1,0x0905eb80] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xf0000000],\n\
+ ct: [0xda86f292,0xc6f41ea3,0x4fb2068d,0xf75ecc29] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xf8000000],\n\
+ ct: [0x220df19f,0x85d69b1b,0x562fa69a,0x3c5beca5] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfc000000],\n\
+ ct: [0x1f11d5d0,0x355e0b55,0x6ccdb6c7,0xf5083b4d] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfe000000],\n\
+ ct: [0x62526b78,0xbe79cb38,0x4633c91f,0x83b4151b] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xff000000],\n\
+ ct: [0x90ddbcb9,0x50843592,0xdd47bbef,0x00fdc876] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xff800000],\n\
+ ct: [0x2fd0e41c,0x5b840227,0x7354a739,0x1d2618e2] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffc00000],\n\
+ ct: [0x3cdf13e7,0x2dee4c58,0x1bafec70,0xb85f9660] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffe00000],\n\
+ ct: [0xafa2ffc1,0x37577092,0xe2b654fa,0x199d2c43] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfff00000],\n\
+ ct: [0x8d683ee6,0x3e60d208,0xe343ce48,0xdbc44cac] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfff80000],\n\
+ ct: [0x705a4ef8,0xba213372,0x9c20185c,0x3d3a4763] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffc0000],\n\
+ ct: [0x0861a861,0xc3db4e94,0x194211b7,0x7ed761b9] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffe0000],\n\
+ ct: [0x4b00c27e,0x8b26da7e,0xab9d3a88,0xdec8b031] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffff0000],\n\
+ ct: [0x5f397bf0,0x3084820c,0xc8810d52,0xe5b666e9] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffff8000],\n\
+ ct: [0x63fafabb,0x72c07bfb,0xd3ddc9b1,0x203104b8] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffffc000],\n\
+ ct: [0x683e2140,0x585b1845,0x2dd4ffbb,0x93c95df9] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffffe000],\n\
+ ct: [0x286894e4,0x8e537f87,0x63b56707,0xd7d155c8] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffff000],\n\
+ ct: [0xa423deab,0xc173dcf7,0xe2c4c53e,0x77d37cd1] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffff800],\n\
+ ct: [0xeb816831,0x3e1cfdfd,0xb5e986d5,0x429cf172] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffffc00],\n\
+ ct: [0x27127daa,0xfc9accd2,0xfb334ec3,0xeba52323] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffffe00],\n\
+ ct: [0xee0715b9,0x6f72e3f7,0xa22a5064,0xfc592f4c] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffffff00],\n\
+ ct: [0x29ee5267,0x70f2a11d,0xcfa989d1,0xce88830f] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffffff80],\n\
+ ct: [0x0493370e,0x054b0987,0x1130fe49,0xaf730a5a] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffffffc0],\n\
+ ct: [0x9b7b940f,0x6c509f9e,0x44a4ee14,0x0448ee46] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffffffe0],\n\
+ ct: [0x2915be4a,0x1ecfdcbe,0x3e023811,0xa12bb6c7] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffffff0],\n\
+ ct: [0x7240e524,0xbc51d8c4,0xd440b1be,0x55d1062c] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffffff8],\n\
+ ct: [0xda63039d,0x38cb4612,0xb2dc36ba,0x26684b93] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffffffc],\n\
+ ct: [0x0f59cb5a,0x4b522e2a,0xc56c1a64,0xf558ad9a] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffffffe],\n\
+ ct: [0x7bfe9d87,0x6c6d63c1,0xd035da8f,0xe21c409d] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffffffff],\n\
+ ct: [0xacdace80,0x78a32b1a,0x182bfa49,0x87ca1347] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x80000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xddc6bf79,0x0c15760d,0x8d9aeb6f,0x9a75fd4e] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xc0000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x0a6bdc6d,0x4c1e6280,0x301fd8e9,0x7ddbe601] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xe0000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x9b80eefb,0x7ebe2d2b,0x16247aa0,0xefc72f5d] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xf0000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x7f2c5ece,0x07a98d8b,0xee13c511,0x77395ff7] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xf8000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x7818d800,0xdcf6f4be,0x1e0e94f4,0x03d1e4c2] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfc000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xe74cd1c9,0x2f0919c3,0x5a032412,0x3d6177d3] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfe000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8092a4dc,0xf2da7e77,0xe93bdd37,0x1dfed82e] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xff000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x49af6b37,0x2135acef,0x10132e54,0x8f217b17] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xff800000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8bcd40f9,0x4ebb63b9,0xf7909676,0xe667f1e7] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffc00000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xfe1cffb8,0x3f45dcfb,0x38b29be4,0x38dbd3ab] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffe00000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x0dc58a8d,0x88662370,0x5aec15cb,0x1e70dc0e] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfff00000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc218faa1,0x6056bd07,0x74c3e8d7,0x9c35a5e4] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfff80000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x047bba83,0xf7aa8417,0x31504e01,0x2208fc9e] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffc0000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xdc8f0e49,0x15fd81ba,0x70a33131,0x0882f6da] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffe0000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x1569859e,0xa6b7206c,0x30bf4fd0,0xcbfac33c] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffff0000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x300ade92,0xf88f48fa,0x2df730ec,0x16ef44cd] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffff8000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x1fe6cc3c,0x05965dc0,0x8eb0590c,0x95ac71d0] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffc000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x59e858ea,0xaa97fec3,0x8111275b,0x6cf5abc0] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffe000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x2239455e,0x7afe3b06,0x16100288,0xcc5a723b] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffff000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3ee500c5,0xc8d63479,0x717163e5,0x5c5c4522] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffff800,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd5e38bf1,0x5f16d90e,0x3e214041,0xd774daa8] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffffc00,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb1f4066e,0x6f4f187d,0xfe5f2ad1,0xb17819d0] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffffe00,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6ef4cc4d,0xe49b1106,0x5d7af290,0x9854794a] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffff00,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xac86bc60,0x6b6640c3,0x09e782f2,0x32bf367f] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffff80,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x36aff0ef,0x7bf32807,0x72cf4cac,0x80a0d2b2] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffc0,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x1f8eedea,0x0f62a140,0x6d58cfc3,0xecea72cf] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffe0,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xabf4154a,0x3375a1d3,0xe6b1d454,0x438f95a6] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffffff0,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x96f96e9d,0x607f6615,0xfc192061,0xee648b07] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffffff8,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xcf37cdaa,0xa0d2d536,0xc7185763,0x4c792064] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffffffc,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xfbd6640c,0x80245c2b,0x805373f1,0x30703127] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xfffffffe,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8d6a8afe,0x55a6e481,0xbadae0d1,0x46f436db] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6a4981f2,0x915e3e68,0xaf6c2238,0x5dd06756] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0x80000000,0x00000000,0x00000000],\n\
+ ct: [0x42a1136e,0x5f8d8d21,0xd3101998,0x642d573b] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xc0000000,0x00000000,0x00000000],\n\
+ ct: [0x9b471596,0xdc69ae15,0x86cee615,0x8b0b0181] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xe0000000,0x00000000,0x00000000],\n\
+ ct: [0x753665c4,0xaf1eff33,0xaa8b628b,0xf8741cfd] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xf0000000,0x00000000,0x00000000],\n\
+ ct: [0x9a682acf,0x40be01f5,0xb2a4193c,0x9a82404d] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xf8000000,0x00000000,0x00000000],\n\
+ ct: [0x54fafe26,0xe4287f17,0xd1935f87,0xeb9ade01] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfc000000,0x00000000,0x00000000],\n\
+ ct: [0x49d541b2,0xe74cfe73,0xe6a8e822,0x5f7bd449] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfe000000,0x00000000,0x00000000],\n\
+ ct: [0x11a45530,0xf624ff6f,0x76a1b382,0x6626ff7b] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xff000000,0x00000000,0x00000000],\n\
+ ct: [0xf96b0c4a,0x8bc6c861,0x30289f60,0xb43b8fba] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xff800000,0x00000000,0x00000000],\n\
+ ct: [0x48c7d0e8,0x0834ebdc,0x35b6735f,0x76b46c8b] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffc00000,0x00000000,0x00000000],\n\
+ ct: [0x2463531a,0xb54d6695,0x5e73edc4,0xcb8eaa45] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffe00000,0x00000000,0x00000000],\n\
+ ct: [0xac9bd8e2,0x53046913,0x4b9d5b06,0x5d4f565b] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfff00000,0x00000000,0x00000000],\n\
+ ct: [0x3f5f9106,0xd0e52f97,0x3d4890e6,0xf37e8a00] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfff80000,0x00000000,0x00000000],\n\
+ ct: [0x20ebc86f,0x1304d272,0xe2e207e5,0x9db639f0] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffc0000,0x00000000,0x00000000],\n\
+ ct: [0xe67ae642,0x6bf9526c,0x972cff07,0x2b52252c] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffe0000,0x00000000,0x00000000],\n\
+ ct: [0x1a518ddd,0xaf9efa0d,0x002cc58d,0x107edfc8] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffff0000,0x00000000,0x00000000],\n\
+ ct: [0xead731af,0x4d3a2fe3,0xb34bed04,0x7942a49f] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffff8000,0x00000000,0x00000000],\n\
+ ct: [0xb1d4efe4,0x0242f83e,0x93b6c8d7,0xefb5eae9] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffc000,0x00000000,0x00000000],\n\
+ ct: [0xcd2b1fec,0x11fd906c,0x5c763009,0x9443610a] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffe000,0x00000000,0x00000000],\n\
+ ct: [0xa1853fe4,0x7fe29289,0xd153161d,0x06387d21] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffff000,0x00000000,0x00000000],\n\
+ ct: [0x46321541,0x79a555c1,0x7ea604d0,0x889fab14] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffff800,0x00000000,0x00000000],\n\
+ ct: [0xdd27cac6,0x401a022e,0x8f38f9f9,0x3e774417] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffffc00,0x00000000,0x00000000],\n\
+ ct: [0xc090313e,0xb98674f3,0x5f312338,0x5fb95d4d] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffffe00,0x00000000,0x00000000],\n\
+ ct: [0xcc352626,0x2b92f02e,0xdce548f7,0x16b9f45c] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffff00,0x00000000,0x00000000],\n\
+ ct: [0xc0838d1a,0x2b16a7c7,0xf0dfcc43,0x3c399c33] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffff80,0x00000000,0x00000000],\n\
+ ct: [0x0d9ac756,0xeb297695,0xeed4d382,0xeb126d26] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffc0,0x00000000,0x00000000],\n\
+ ct: [0x56ede9dd,0xa3f6f141,0xbff1757f,0xa689c3e1] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffe0,0x00000000,0x00000000],\n\
+ ct: [0x768f520e,0xfe0f23e6,0x1d3ec8ad,0x9ce91774] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffffff0,0x00000000,0x00000000],\n\
+ ct: [0xb1144ddf,0xa7575521,0x3390e7c5,0x96660490] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffffff8,0x00000000,0x00000000],\n\
+ ct: [0x1d7c0c40,0x40b355b9,0xd107a993,0x25e3b050] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffffffc,0x00000000,0x00000000],\n\
+ ct: [0xd8e2bb1a,0xe8ee3dcf,0x5bf7d6c3,0x8da82a1a] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xfffffffe,0x00000000,0x00000000],\n\
+ ct: [0xfaf82d17,0x8af25a98,0x86a47e7f,0x789b98d7] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0x00000000,0x00000000],\n\
+ ct: [0x9b58dbfd,0x77fe5aca,0x9cfc190c,0xd1b82d19] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0x80000000,0x00000000],\n\
+ ct: [0x77f39208,0x9042e478,0xac16c0c8,0x6a0b5db5] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xc0000000,0x00000000],\n\
+ ct: [0x19f08e34,0x20ee69b4,0x77ca1420,0x281c4782] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xe0000000,0x00000000],\n\
+ ct: [0xa1b19bee,0xe4e11713,0x9f74b3c5,0x3fdcb875] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xf0000000,0x00000000],\n\
+ ct: [0xa37a5869,0xb218a9f3,0xa0868d19,0xaea0ad6a] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xf8000000,0x00000000],\n\
+ ct: [0xbc3594e8,0x65bcd026,0x1b132027,0x31f33580] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfc000000,0x00000000],\n\
+ ct: [0x811441ce,0x1d309eee,0x7185e8c7,0x52c07557] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfe000000,0x00000000],\n\
+ ct: [0x959971ce,0x41341905,0x63518e70,0x0b9874d1] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xff000000,0x00000000],\n\
+ ct: [0x76b5614a,0x042707c9,0x8e2132e2,0xe805fe63] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xff800000,0x00000000],\n\
+ ct: [0x7d9fa6a5,0x7530d0f0,0x36fec31c,0x230b0cc6] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffc00000,0x00000000],\n\
+ ct: [0x964153a8,0x3bf6989a,0x4ba80daa,0x91c3e081] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffe00000,0x00000000],\n\
+ ct: [0xa013014d,0x4ce8054c,0xf2591d06,0xf6f2f176] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfff00000,0x00000000],\n\
+ ct: [0xd1c5f639,0x9bf38250,0x2e385eee,0x1474a869] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfff80000,0x00000000],\n\
+ ct: [0x0007e20b,0x8298ec35,0x4f0f5fe7,0x470f36bd] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffc0000,0x00000000],\n\
+ ct: [0xb95ba05b,0x332da61e,0xf63a2b31,0xfcad9879] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffe0000,0x00000000],\n\
+ ct: [0x4620a49b,0xd9674915,0x61669ab2,0x5dce45f4] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffff0000,0x00000000],\n\
+ ct: [0x12e71214,0xae8e04f0,0xbb63d742,0x5c6f14d5] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffff8000,0x00000000],\n\
+ ct: [0x4cc42fc1,0x407b008f,0xe350907c,0x092e80ac] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffc000,0x00000000],\n\
+ ct: [0x08b244ce,0x7cbc8ee9,0x7fbba808,0xcb146fda] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffe000,0x00000000],\n\
+ ct: [0x39b333e8,0x694f2154,0x6ad1edd9,0xd87ed95b] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffff000,0x00000000],\n\
+ ct: [0x3b271f8a,0xb2e6e4a2,0x0ba8090f,0x43ba78f3] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffff800,0x00000000],\n\
+ ct: [0x9ad983f3,0xbf651cd0,0x393f0a73,0xcccdea50] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffffc00,0x00000000],\n\
+ ct: [0x8f476cbf,0xf75c1f72,0x5ce18e4b,0xbcd19b32] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffffe00,0x00000000],\n\
+ ct: [0x905b6267,0xf1d6ab53,0x20835a13,0x3f096f2a] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffff00,0x00000000],\n\
+ ct: [0x145b60d6,0xd0193c23,0xf4221848,0xa892d61a] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffff80,0x00000000],\n\
+ ct: [0x55cfb3fb,0x6d75cad0,0x445bbc8d,0xafa25b0f] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffc0,0x00000000],\n\
+ ct: [0x7b8e7098,0xe357ef71,0x237d46d8,0xb075b0f5] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffe0,0x00000000],\n\
+ ct: [0x2bf27229,0x901eb40f,0x2df9d839,0x8d1505ae] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffffff0,0x00000000],\n\
+ ct: [0x83a63402,0xa77f9ad5,0xc1e931a9,0x31ecd706] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffffff8,0x00000000],\n\
+ ct: [0x6f8ba652,0x1152d31f,0x2bada184,0x3e26b973] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffffffc,0x00000000],\n\
+ ct: [0xe5c3b8e3,0x0fd2d8e6,0x239b17b4,0x4bd23bbd] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xfffffffe,0x00000000],\n\
+ ct: [0x1ac1f710,0x2c59933e,0x8b2ddc3f,0x14e94baa] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0x00000000],\n\
+ ct: [0x21d9ba49,0xf276b45f,0x11af8fc7,0x1a088e3d] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0x80000000],\n\
+ ct: [0x649f1cdd,0xc3792b46,0x38635a39,0x2bc9bade] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xc0000000],\n\
+ ct: [0xe2775e4b,0x59c1bc2e,0x31a2078c,0x11b5a08c] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xe0000000],\n\
+ ct: [0x2be1fae5,0x048a2558,0x2a679ca1,0x0905eb80] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xf0000000],\n\
+ ct: [0xda86f292,0xc6f41ea3,0x4fb2068d,0xf75ecc29] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xf8000000],\n\
+ ct: [0x220df19f,0x85d69b1b,0x562fa69a,0x3c5beca5] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfc000000],\n\
+ ct: [0x1f11d5d0,0x355e0b55,0x6ccdb6c7,0xf5083b4d] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfe000000],\n\
+ ct: [0x62526b78,0xbe79cb38,0x4633c91f,0x83b4151b] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xff000000],\n\
+ ct: [0x90ddbcb9,0x50843592,0xdd47bbef,0x00fdc876] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xff800000],\n\
+ ct: [0x2fd0e41c,0x5b840227,0x7354a739,0x1d2618e2] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffc00000],\n\
+ ct: [0x3cdf13e7,0x2dee4c58,0x1bafec70,0xb85f9660] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffe00000],\n\
+ ct: [0xafa2ffc1,0x37577092,0xe2b654fa,0x199d2c43] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfff00000],\n\
+ ct: [0x8d683ee6,0x3e60d208,0xe343ce48,0xdbc44cac] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfff80000],\n\
+ ct: [0x705a4ef8,0xba213372,0x9c20185c,0x3d3a4763] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffc0000],\n\
+ ct: [0x0861a861,0xc3db4e94,0x194211b7,0x7ed761b9] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffe0000],\n\
+ ct: [0x4b00c27e,0x8b26da7e,0xab9d3a88,0xdec8b031] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffff0000],\n\
+ ct: [0x5f397bf0,0x3084820c,0xc8810d52,0xe5b666e9] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffff8000],\n\
+ ct: [0x63fafabb,0x72c07bfb,0xd3ddc9b1,0x203104b8] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffffc000],\n\
+ ct: [0x683e2140,0x585b1845,0x2dd4ffbb,0x93c95df9] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffffe000],\n\
+ ct: [0x286894e4,0x8e537f87,0x63b56707,0xd7d155c8] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffff000],\n\
+ ct: [0xa423deab,0xc173dcf7,0xe2c4c53e,0x77d37cd1] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffff800],\n\
+ ct: [0xeb816831,0x3e1cfdfd,0xb5e986d5,0x429cf172] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffffc00],\n\
+ ct: [0x27127daa,0xfc9accd2,0xfb334ec3,0xeba52323] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffffe00],\n\
+ ct: [0xee0715b9,0x6f72e3f7,0xa22a5064,0xfc592f4c] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffffff00],\n\
+ ct: [0x29ee5267,0x70f2a11d,0xcfa989d1,0xce88830f] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffffff80],\n\
+ ct: [0x0493370e,0x054b0987,0x1130fe49,0xaf730a5a] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffffffc0],\n\
+ ct: [0x9b7b940f,0x6c509f9e,0x44a4ee14,0x0448ee46] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffffffe0],\n\
+ ct: [0x2915be4a,0x1ecfdcbe,0x3e023811,0xa12bb6c7] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffffff0],\n\
+ ct: [0x7240e524,0xbc51d8c4,0xd440b1be,0x55d1062c] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffffff8],\n\
+ ct: [0xda63039d,0x38cb4612,0xb2dc36ba,0x26684b93] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffffffc],\n\
+ ct: [0x0f59cb5a,0x4b522e2a,0xc56c1a64,0xf558ad9a] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xfffffffe],\n\
+ ct: [0x7bfe9d87,0x6c6d63c1,0xd035da8f,0xe21c409d] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0xffffffff,0xffffffff,0xffffffff,0xffffffff],\n\
+ ct: [0xacdace80,0x78a32b1a,0x182bfa49,0x87ca1347] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x014730f8,0x0ac625fe,0x84f026c6,0x0bfd547d],\n\
+ ct: [0x5c9d844e,0xd46f9885,0x085e5d6a,0x4f94c7d7] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x0b24af36,0x193ce466,0x5f2825d7,0xb4749c98],\n\
+ ct: [0xa9ff75bd,0x7cf6613d,0x3731c77c,0x3b6d0c04] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x761c1fe4,0x1a18acf2,0x0d241650,0x611d90f1],\n\
+ ct: [0x623a52fc,0xea5d443e,0x48d9181a,0xb32c7421] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x8a560769,0xd605868a,0xd80d819b,0xdba03771],\n\
+ ct: [0x38f2c7ae,0x10612415,0xd27ca190,0xd27da8b4] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x91fbef2d,0x15a97816,0x060bee1f,0xeaa49afe],\n\
+ ct: [0x1bc704f1,0xbce135ce,0xb810341b,0x216d7abe] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x014730f8,0x0ac625fe,0x84f026c6,0x0bfd547d],\n\
+ ct: [0x5c9d844e,0xd46f9885,0x085e5d6a,0x4f94c7d7] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x0b24af36,0x193ce466,0x5f2825d7,0xb4749c98],\n\
+ ct: [0xa9ff75bd,0x7cf6613d,0x3731c77c,0x3b6d0c04] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x761c1fe4,0x1a18acf2,0x0d241650,0x611d90f1],\n\
+ ct: [0x623a52fc,0xea5d443e,0x48d9181a,0xb32c7421] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x8a560769,0xd605868a,0xd80d819b,0xdba03771],\n\
+ ct: [0x38f2c7ae,0x10612415,0xd27ca190,0xd27da8b4] },\n\
+ { key: [0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x91fbef2d,0x15a97816,0x060bee1f,0xeaa49afe],\n\
+ ct: [0x1bc704f1,0xbce135ce,0xb810341b,0x216d7abe] },\n\
+ { key: [0xc47b0294,0xdbbbee0f,0xec4757f2,0x2ffeee35,0x87ca4730,0xc3d33b69,0x1df38bab,0x076bc558],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x46f2fb34,0x2d6f0ab4,0x77476fc5,0x01242c5f] },\n\
+ { key: [0x28d46cff,0xa1585331,0x94214a91,0xe712fc2b,0x45b51807,0x6675affd,0x910edeca,0x5f41ac64],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x4bf3b0a6,0x9aeb6657,0x794f2901,0xb1440ad4] },\n\
+ { key: [0xc1cc358b,0x449909a1,0x9436cfbb,0x3f852ef8,0xbcb5ed12,0xac705832,0x5f56e609,0x9aab1a1c],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x35206527,0x2169abf9,0x85684392,0x7d0674fd] },\n\
+ { key: [0x984ca75f,0x4ee8d706,0xf46c2d98,0xc0bf4a45,0xf5b00d79,0x1c2dfeb1,0x91b5ed8e,0x420fd627],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x4307456a,0x9e67813b,0x452e15fa,0x8fffe398] },\n\
+ { key: [0xb43d08a4,0x47ac8609,0xbaadae4f,0xf12918b9,0xf68fc165,0x3f126922,0x2f123981,0xded7a92f],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x46634466,0x07354989,0x477a5c6f,0x0f007ef4] },\n\
+ { key: [0x1d85a181,0xb54cde51,0xf0e09809,0x5b2962fd,0xc93b51fe,0x9b88602b,0x3f54130b,0xf76a5bd9],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x531c2c38,0x344578b8,0x4d50b3c9,0x17bbb6e1] },\n\
+ { key: [0xdc0eba1f,0x2232a787,0x9ded34ed,0x8428eeb8,0x769b056b,0xbaf8ad77,0xcb65c354,0x1430b4cf],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xfc6aec90,0x63234800,0x05c58e7e,0x1ab004ad] },\n\
+ { key: [0xf8be9ba6,0x15c5a952,0xcabbca24,0xf68f8593,0x039624d5,0x24c816ac,0xda2c9183,0xbd917cb9],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa3944b95,0xca0b5204,0x3584ef02,0x151926a8] },\n\
+ { key: [0x797f8b3d,0x176dac5b,0x7e34a2d5,0x39c4ef36,0x7a16f863,0x5f626473,0x7591c5c0,0x7bf57a3e],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa74289fe,0x73a4c123,0xca189ea1,0xe1b49ad5] },\n\
+ { key: [0x6838d40c,0xaf927749,0xc13f0329,0xd331f448,0xe202c73e,0xf52c5f73,0xa37ca635,0xd4c47707],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb91d4ea4,0x488644b5,0x6cf0812f,0xa7fcf5fc] },\n\
+ { key: [0xccd1bc3c,0x659cd3c5,0x9bc43748,0x4e3c5c72,0x4441da8d,0x6e90ce55,0x6cd57d07,0x52663bbc],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x304f81ab,0x61a80c2e,0x743b94d5,0x002a126b] },\n\
+ { key: [0x13428b5e,0x4c005e06,0x36dd3384,0x05d173ab,0x135dec2a,0x25c22c5d,0xf0722d69,0xdcc43887],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x649a7154,0x5378c783,0xe368c9ad,0xe7114f6c] },\n\
+ { key: [0x07eb03a0,0x8d291d1b,0x07408bf3,0x512ab40c,0x91097ac7,0x7461aad4,0xbb859647,0xf74f00ee],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x47cb030d,0xa2ab051d,0xfc6c4bf6,0x910d12bb] },\n\
+ { key: [0x90143ae2,0x0cd78c5d,0x8ebdd6cb,0x9dc17624,0x27a96c78,0xc639bccc,0x41a61424,0x564eafe1],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x798c7c00,0x5dee432b,0x2c8ea5df,0xa381ecc3] },\n\
+ { key: [0xb7a5794d,0x52737475,0xd53d5a37,0x7200849b,0xe0260a67,0xa2b22ced,0x8bbef128,0x82270d07],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x637c31dc,0x2591a076,0x36f646b7,0x2daabbe7] },\n\
+ { key: [0xfca02f3d,0x5011cfc5,0xc1e23165,0xd413a049,0xd4526a99,0x1827424d,0x896fe343,0x5e0bf68e],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x179a49c7,0x12154bbf,0xfbe6e7a8,0x4a18e220] },\n\
+ { key: [0xc47b0294,0xdbbbee0f,0xec4757f2,0x2ffeee35,0x87ca4730,0xc3d33b69,0x1df38bab,0x076bc558],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x46f2fb34,0x2d6f0ab4,0x77476fc5,0x01242c5f] },\n\
+ { key: [0x28d46cff,0xa1585331,0x94214a91,0xe712fc2b,0x45b51807,0x6675affd,0x910edeca,0x5f41ac64],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x4bf3b0a6,0x9aeb6657,0x794f2901,0xb1440ad4] },\n\
+ { key: [0xc1cc358b,0x449909a1,0x9436cfbb,0x3f852ef8,0xbcb5ed12,0xac705832,0x5f56e609,0x9aab1a1c],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x35206527,0x2169abf9,0x85684392,0x7d0674fd] },\n\
+ { key: [0x984ca75f,0x4ee8d706,0xf46c2d98,0xc0bf4a45,0xf5b00d79,0x1c2dfeb1,0x91b5ed8e,0x420fd627],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x4307456a,0x9e67813b,0x452e15fa,0x8fffe398] },\n\
+ { key: [0xb43d08a4,0x47ac8609,0xbaadae4f,0xf12918b9,0xf68fc165,0x3f126922,0x2f123981,0xded7a92f],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x46634466,0x07354989,0x477a5c6f,0x0f007ef4] },\n\
+ { key: [0x1d85a181,0xb54cde51,0xf0e09809,0x5b2962fd,0xc93b51fe,0x9b88602b,0x3f54130b,0xf76a5bd9],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x531c2c38,0x344578b8,0x4d50b3c9,0x17bbb6e1] },\n\
+ { key: [0xdc0eba1f,0x2232a787,0x9ded34ed,0x8428eeb8,0x769b056b,0xbaf8ad77,0xcb65c354,0x1430b4cf],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xfc6aec90,0x63234800,0x05c58e7e,0x1ab004ad] },\n\
+ { key: [0xf8be9ba6,0x15c5a952,0xcabbca24,0xf68f8593,0x039624d5,0x24c816ac,0xda2c9183,0xbd917cb9],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa3944b95,0xca0b5204,0x3584ef02,0x151926a8] },\n\
+ { key: [0x797f8b3d,0x176dac5b,0x7e34a2d5,0x39c4ef36,0x7a16f863,0x5f626473,0x7591c5c0,0x7bf57a3e],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa74289fe,0x73a4c123,0xca189ea1,0xe1b49ad5] },\n\
+ { key: [0x6838d40c,0xaf927749,0xc13f0329,0xd331f448,0xe202c73e,0xf52c5f73,0xa37ca635,0xd4c47707],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb91d4ea4,0x488644b5,0x6cf0812f,0xa7fcf5fc] },\n\
+ { key: [0xccd1bc3c,0x659cd3c5,0x9bc43748,0x4e3c5c72,0x4441da8d,0x6e90ce55,0x6cd57d07,0x52663bbc],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x304f81ab,0x61a80c2e,0x743b94d5,0x002a126b] },\n\
+ { key: [0x13428b5e,0x4c005e06,0x36dd3384,0x05d173ab,0x135dec2a,0x25c22c5d,0xf0722d69,0xdcc43887],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x649a7154,0x5378c783,0xe368c9ad,0xe7114f6c] },\n\
+ { key: [0x07eb03a0,0x8d291d1b,0x07408bf3,0x512ab40c,0x91097ac7,0x7461aad4,0xbb859647,0xf74f00ee],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x47cb030d,0xa2ab051d,0xfc6c4bf6,0x910d12bb] },\n\
+ { key: [0x90143ae2,0x0cd78c5d,0x8ebdd6cb,0x9dc17624,0x27a96c78,0xc639bccc,0x41a61424,0x564eafe1],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x798c7c00,0x5dee432b,0x2c8ea5df,0xa381ecc3] },\n\
+ { key: [0xb7a5794d,0x52737475,0xd53d5a37,0x7200849b,0xe0260a67,0xa2b22ced,0x8bbef128,0x82270d07],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x637c31dc,0x2591a076,0x36f646b7,0x2daabbe7] },\n\
+ { key: [0xfca02f3d,0x5011cfc5,0xc1e23165,0xd413a049,0xd4526a99,0x1827424d,0x896fe343,0x5e0bf68e],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x179a49c7,0x12154bbf,0xfbe6e7a8,0x4a18e220] },\n\
+ { key: [0x80000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xe35a6dcb,0x19b201a0,0x1ebcfa8a,0xa22b5759] },\n\
+ { key: [0xc0000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb29169cd,0xcf2d83e8,0x38125a12,0xee6aa400] },\n\
+ { key: [0xe0000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd8f3a72f,0xc3cdf74d,0xfaf6c3e6,0xb97b2fa6] },\n\
+ { key: [0xf0000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x1c777679,0xd50037c7,0x9491a94d,0xa76a9a35] },\n\
+ { key: [0xf8000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x9cf4893e,0xcafa0a02,0x47a898e0,0x40691559] },\n\
+ { key: [0xfc000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8fbb4137,0x03735326,0x310a269b,0xd3aa94b2] },\n\
+ { key: [0xfe000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x60e32246,0xbed2b0e8,0x59e55c1c,0xc6b26502] },\n\
+ { key: [0xff000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xec52a212,0xf80a09df,0x6317021b,0xc2a9819e] },\n\
+ { key: [0xff800000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf23e5b60,0x0eb70dbc,0xcf6c0b1d,0x9a68182c] },\n\
+ { key: [0xffc00000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa3f599d6,0x3a82a968,0xc33fe265,0x90745970] },\n\
+ { key: [0xffe00000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd1ccb9b1,0x337002cb,0xac42c520,0xb5d67722] },\n\
+ { key: [0xfff00000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xcc111f6c,0x37cf40a1,0x159d00fb,0x59fb0488] },\n\
+ { key: [0xfff80000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xdc43b51a,0xb6090523,0x72989a26,0xe9cdd714] },\n\
+ { key: [0xfffc0000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x4dcede8d,0xa9e2578f,0x39703d44,0x33dc6459] },\n\
+ { key: [0xfffe0000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x1a4c1c26,0x3bbccfaf,0xc1178289,0x4685e3a8] },\n\
+ { key: [0xffff0000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x937ad848,0x80db5061,0x3423d6d5,0x27a2823d] },\n\
+ { key: [0xffff8000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x610b71df,0xc688e150,0xd8152c5b,0x35ebc14d] },\n\
+ { key: [0xffffc000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x27ef2495,0xdabf3238,0x85aab39c,0x80f18d8b] },\n\
+ { key: [0xffffe000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x633cafea,0x395bc03a,0xdae3a1e2,0x068e4b4e] },\n\
+ { key: [0xfffff000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6e1b482b,0x53761cf6,0x31819b74,0x9a6f3724] },\n\
+ { key: [0xfffff800,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x976e6f85,0x1ab52c77,0x1998dbb2,0xd71c75a9] },\n\
+ { key: [0xfffffc00,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x85f2ba84,0xf8c307cf,0x525e124c,0x3e22e6cc] },\n\
+ { key: [0xfffffe00,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6bcca98b,0xf6a835fa,0x64955f72,0xde4115fe] },\n\
+ { key: [0xffffff00,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x2c75e2d3,0x6eebd654,0x11f14fd0,0xeb1d2a06] },\n\
+ { key: [0xffffff80,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xbd492950,0x06250ffc,0xa5100b60,0x07a0eade] },\n\
+ { key: [0xffffffc0,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa190527d,0x0ef7c70f,0x459cd394,0x0df316ec] },\n\
+ { key: [0xffffffe0,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xbbd1097a,0x62433f79,0x449fa97d,0x4ee80dbf] },\n\
+ { key: [0xfffffff0,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x07058e40,0x8f5b99b0,0xe0f061a1,0x761b5b3b] },\n\
+ { key: [0xfffffff8,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x5fd1f13f,0xa0f31e37,0xfabde328,0xf894eac2] },\n\
+ { key: [0xfffffffc,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xfc4af7c9,0x48df26e2,0xef3e01c1,0xee5b8f6f] },\n\
+ { key: [0xfffffffe,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x829fd720,0x8fb92d44,0xa074a677,0xee9861ac] },\n\
+ { key: [0xffffffff,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xad9fc613,0xa703251b,0x54c64a0e,0x76431711] },\n\
+ { key: [0xffffffff,0x80000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x33ac9ecc,0xc4cc75e2,0x711618f8,0x0b1548e8] },\n\
+ { key: [0xffffffff,0xc0000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x2025c74b,0x8ad8f4cd,0xa17ee204,0x9c4c902d] },\n\
+ { key: [0xffffffff,0xe0000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf85ca05f,0xe528f1ce,0x9b790166,0xe8d551e7] },\n\
+ { key: [0xffffffff,0xf0000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6f6238d8,0x966048d4,0x967154e0,0xdad5a6c9] },\n\
+ { key: [0xffffffff,0xf8000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf2b21b4e,0x7640a9b3,0x346de8b8,0x2fb41e49] },\n\
+ { key: [0xffffffff,0xfc000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf836f251,0xad1d11d4,0x9dc34462,0x8b1884e1] },\n\
+ { key: [0xffffffff,0xfe000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x077e9470,0xae7abea5,0xa9769d49,0x182628c3] },\n\
+ { key: [0xffffffff,0xff000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xe0dcc2d2,0x7fc98656,0x33f85223,0xcf0d611f] },\n\
+ { key: [0xffffffff,0xff800000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xbe66cfea,0x2fecd6bf,0x0ec7b435,0x2c99bcaa] },\n\
+ { key: [0xffffffff,0xffc00000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xdf31144f,0x87a2ef52,0x3facdcf2,0x1a427804] },\n\
+ { key: [0xffffffff,0xffe00000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb5bb0f56,0x29fb6aae,0x5e1839a3,0xc3625d63] },\n\
+ { key: [0xffffffff,0xfff00000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3c9db333,0x5306fe1e,0xc612bdbf,0xae6b6028] },\n\
+ { key: [0xffffffff,0xfff80000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3dd5c346,0x34a79d3c,0xfcc83397,0x60e6f5f4] },\n\
+ { key: [0xffffffff,0xfffc0000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x82bda118,0xa3ed7af3,0x14fa2ccc,0x5c07b761] },\n\
+ { key: [0xffffffff,0xfffe0000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x2937a64f,0x7d4f46fe,0x6fea3b34,0x9ec78e38] },\n\
+ { key: [0xffffffff,0xffff0000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x225f068c,0x28476605,0x735ad671,0xbb8f39f3] },\n\
+ { key: [0xffffffff,0xffff8000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xae682c5e,0xcd71898e,0x08942ac9,0xaa89875c] },\n\
+ { key: [0xffffffff,0xffffc000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x5e031cb9,0xd676c302,0x2d7f2622,0x7e85c38f] },\n\
+ { key: [0xffffffff,0xffffe000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa78463fb,0x064db5d5,0x2bb64bfe,0xf64f2dda] },\n\
+ { key: [0xffffffff,0xfffff000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8aa9b75e,0x78459387,0x6c53a00e,0xae5af52b] },\n\
+ { key: [0xffffffff,0xfffff800,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3f84566d,0xf23da48a,0xf692722f,0xe980573a] },\n\
+ { key: [0xffffffff,0xfffffc00,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x31690b5e,0xd41c7eb4,0x2a1e8327,0x0a7ff0e6] },\n\
+ { key: [0xffffffff,0xfffffe00,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x77dd7702,0x646d55f0,0x8365e477,0xd3590eda] },\n\
+ { key: [0xffffffff,0xffffff00,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x4c022ac6,0x2b3cb78d,0x739cc67b,0x3e20bb7e] },\n\
+ { key: [0xffffffff,0xffffff80,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x092fa137,0xce18b5df,0xe7906f55,0x0bb13370] },\n\
+ { key: [0xffffffff,0xffffffc0,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3e0cdadf,0x2e68353c,0x0027672c,0x97144dd3] },\n\
+ { key: [0xffffffff,0xffffffe0,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd8c4b200,0xb383fc1f,0x2b2ea677,0x618a1d27] },\n\
+ { key: [0xffffffff,0xfffffff0,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x11825f99,0xb0e9bb34,0x77c1c071,0x3b015aac] },\n\
+ { key: [0xffffffff,0xfffffff8,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf8b9fffb,0x5c187f7d,0xdc7ab10f,0x4fb77576] },\n\
+ { key: [0xffffffff,0xfffffffc,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xffb4e87a,0x32b37d6f,0x2c8328d3,0xb5377802] },\n\
+ { key: [0xffffffff,0xfffffffe,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd276c13a,0x5d220f4d,0xa9224e74,0x896391ce] },\n\
+ { key: [0xffffffff,0xffffffff,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x94efe7a0,0xe2e031e2,0x536da01d,0xf799c927] },\n\
+ { key: [0xffffffff,0xffffffff,0x80000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8f8fd822,0x680a8597,0x4e53a5a8,0xeb9d38de] },\n\
+ { key: [0xffffffff,0xffffffff,0xc0000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xe0f0a91b,0x2e45f8cc,0x37b7805a,0x3042588d] },\n\
+ { key: [0xffffffff,0xffffffff,0xe0000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x597a6252,0x255e46d6,0x364dbeed,0xa31e279c] },\n\
+ { key: [0xffffffff,0xffffffff,0xf0000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf51a0f69,0x4442b8f0,0x5571797f,0xec7ee8bf] },\n\
+ { key: [0xffffffff,0xffffffff,0xf8000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x9ff071b1,0x65b5198a,0x93dddeeb,0xc54d09b5] },\n\
+ { key: [0xffffffff,0xffffffff,0xfc000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc20a19fd,0x5758b0c4,0xbc1a5df8,0x9cf73877] },\n\
+ { key: [0xffffffff,0xffffffff,0xfe000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x97120166,0x307119ca,0x2280e931,0x5668e96f] },\n\
+ { key: [0xffffffff,0xffffffff,0xff000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x4b3b9f1e,0x099c2a09,0xdc091e90,0xe4f18f0a] },\n\
+ { key: [0xffffffff,0xffffffff,0xff800000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xeb040b89,0x1d4b37f6,0x851f7ec2,0x19cd3f6d] },\n\
+ { key: [0xffffffff,0xffffffff,0xffc00000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x9f0fdec0,0x8b7fd79a,0xa39535be,0xa42db92a] },\n\
+ { key: [0xffffffff,0xffffffff,0xffe00000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x2e70f168,0xfc74bf91,0x1df240bc,0xd2cef236] },\n\
+ { key: [0xffffffff,0xffffffff,0xfff00000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x462ccd7f,0x5fd1108d,0xbc152f3c,0xacad328b] },\n\
+ { key: [0xffffffff,0xffffffff,0xfff80000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa4af534a,0x7d0b643a,0x01868785,0xd86dfb95] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffc0000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xab980296,0x197e1a50,0x22326c31,0xda4bf6f3] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffe0000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf97d57b3,0x333b6281,0xb07d486d,0xb2d4e20c] },\n\
+ { key: [0xffffffff,0xffffffff,0xffff0000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf33fa367,0x20231afe,0x4c759ade,0x6bd62eb6] },\n\
+ { key: [0xffffffff,0xffffffff,0xffff8000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xfdcfac0c,0x02ca5383,0x43c68117,0xe0a15938] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffc000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xad4916f5,0xee5772be,0x764fc027,0xb8a6e539] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffe000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x2e16873e,0x1678610d,0x7e14c02d,0x002ea845] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffff000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x4e6e627c,0x1acc5134,0x0053a823,0x6d579576] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffff800,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xab0c8410,0xaeeead92,0xfeec1eb4,0x30d652cb] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffffc00,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xe86f7e23,0xe835e114,0x977f60e1,0xa592202e] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffffe00,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xe68ad505,0x5a367041,0xfade09d9,0xa70a794b] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffff00,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x0791823a,0x3c666bb6,0x162825e7,0x8606a7fe] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffff80,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xdcca366a,0x9bf47b7b,0x868b77e2,0x5c18a364] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffc0,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x684c9efc,0x237e4a44,0x2965f84b,0xce20247a] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffe0,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa858411f,0xfbe63fdb,0x9c8aa1bf,0xaed67b52] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffffff0,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x04bc3da2,0x179c3015,0x498b0e03,0x910db5b8] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffffff8,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x40071eea,0xb3f935db,0xc25d0084,0x1460260f] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffffffc,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x0ebd7c30,0xed2016e0,0x8ba806dd,0xb008bcc8] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffffffe,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x15c6becf,0x0f4cec71,0x29cbd22d,0x1a79b1b8] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x0aeede5b,0x91f72170,0x0e9e62ed,0xbf60b781] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0x80000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x266581af,0x0dcfbed1,0x585e0a24,0x2c64b8df] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xc0000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6693dc91,0x1662ae47,0x3216ba22,0x189a511a] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xe0000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x7606fa36,0xd86473e6,0xfb3a1bb0,0xe2c0adf5] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xf0000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x112078e9,0xe11fbb78,0xe26ffb88,0x99e96b9a] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xf8000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x40b264e9,0x21e9e4a8,0x2694589e,0xf3798262] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfc000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8d4595cb,0x4fa70267,0x15f55bd6,0x8e2882f9] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfe000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb588a302,0xbdbc0919,0x7df1edae,0x68926ed9] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xff000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x33f75023,0x90b8a4a2,0x21cfecd0,0x666624ba] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xff800000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3d20253a,0xdbce3be2,0x373767c4,0xd822c566] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffc00000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa42734a3,0x929bf84c,0xf0116c98,0x56a3c18c] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffe00000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xe3abc493,0x9457422b,0xb957da3c,0x56938c6d] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfff00000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x972bdd2e,0x7c525130,0xfadc8f76,0xfc6f4b3f] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfff80000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x84a83d7b,0x94c699cb,0xcb8a7d9b,0x61f64093] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffc0000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xce61d635,0x14aded03,0xd43e6ebf,0xc3a9001f] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffe0000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6c839dd5,0x8eeae6b8,0xa36af48e,0xd63d2dc9] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffff0000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xcd5ece55,0xb8da3bf6,0x22c4100d,0xf5de46f9] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffff8000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3b6f46f4,0x0e0ac5fc,0x0a9c1105,0xf800f48d] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffc000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xba26d47d,0xa3aeb028,0xde4fb5b3,0xa854a24b] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffe000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x87f53bf6,0x20d36772,0x68445212,0x904389d5] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffff000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x10617d28,0xb5e0f460,0x5492b182,0xa5d7f9f6] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffff800,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x9aaec4fa,0xbbf6fae2,0xa71feff0,0x2e372b39] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffffc00,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3a90c62d,0x88b5c428,0x09abf782,0x488ed130] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffffe00,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf1f1c5a4,0x0899e157,0x72857ccb,0x65c7a09a] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffff00,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x190843d2,0x9b25a389,0x7c692ce1,0xdd81ee52] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffff80,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa866bc65,0xb6941d86,0xe8420a7f,0xfb0964db] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffc0,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8193c6ff,0x85225ced,0x4255e92f,0x6e078a14] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffe0,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x9661cb24,0x24d7d4a3,0x80d547f9,0xe7ec1cb9] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffffff0,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x86f93d9e,0xc08453a0,0x71e2e287,0x7877a9c8] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffffff8,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x27eefa80,0xce6a4a9d,0x598e3fec,0x365434d2] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffffffc,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd6206844,0x4578e3ab,0x39ce7ec9,0x5dd045dc] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffffffe,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb5f71d4d,0xd9a71fe5,0xd8bc8ba7,0xe6ea3048] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6825a347,0xac479d4f,0x9d95c5cb,0x8d3fd7e9] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x80000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xe3714e94,0xa5778955,0xcc034635,0x8e94783a] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xc0000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd836b44b,0xb29e0c7d,0x89fa4b2d,0x4b677d2a] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xe0000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x5d454b75,0x021d76d4,0xb84f873a,0x8f877b92] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xf0000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc3498f7e,0xced20953,0x14fc2811,0x5885b33f] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xf8000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6e668856,0x539ad8e4,0x05bd123f,0xe6c88530] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfc000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8680db7f,0x3a87b860,0x5543cfdb,0xe6754076] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfe000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6c5d03b1,0x3069c365,0x8b3179be,0x91b0800c] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xef1b384a,0xc4d93eda,0x00c92add,0x0995ea5f] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff800000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xbf811580,0x5471741b,0xd5ad20a0,0x3944790f] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffc00000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc64c24b6,0x894b038b,0x3c0d09b1,0xdf068b0b] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffe00000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3967a10c,0xffe27d01,0x78545fbf,0x6a40544b] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff00000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x7c85e9c9,0x5de1a9ec,0x5a5363a8,0xa053472d] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff80000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa9eec03c,0x8abec7ba,0x68315c2c,0x8c2316e0] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffc0000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xcac8e414,0xc2f38822,0x7ae14986,0xfc983524] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffe0000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x5d942b7f,0x4622ce05,0x6c3ce3ce,0x5f1dd9d6] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffff0000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd240d648,0xce21a302,0x0282c3f1,0xb528a0b6] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffff8000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x45d089c3,0x6d5c5a4e,0xfc689e3b,0x0de10dd5] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffc000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb4da5df4,0xbecb5462,0xe03a0ed0,0x0d295629] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffe000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xdcf4e129,0x136c1a4b,0x7a0f3893,0x5cc34b2b] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffff000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd9a4c761,0x8b0ce48a,0x3d5aee1a,0x1c0114c4] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffff800,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xca352df0,0x25c65c7b,0x0bf306fb,0xee0f36ba] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffc00,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x238aca23,0xfd3409f3,0x8af63378,0xed2f5473] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffe00,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x59836a0e,0x06a79691,0xb36667d5,0x380d8188] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffff00,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x33905080,0xf7acf1cd,0xae0a91fc,0x3e85aee4] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffff80,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x72c9e464,0x6dbc3d63,0x20fc6689,0xd93e8833] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffc0,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xba77413d,0xea5925b7,0xf5417ea4,0x7ff19f59] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffe0,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6cae8129,0xf843d86d,0xc786a0fb,0x1a184970] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffff0,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xfcfefb53,0x4100796e,0xebbd9902,0x06754e19] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffff8,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8c791d5f,0xdddf470d,0xa04f3e6d,0xc4a5b5b5] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffffc,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc93bbdc0,0x7a4611ae,0x4bb266ea,0x5034a387] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffffe,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc102e38e,0x489aa747,0x62f3efc5,0xbb23205a] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x93201481,0x665cbafc,0x1fcc220b,0xc545fb3d] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x80000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x4960757e,0xc6ce68cf,0x195e454c,0xfd0f32ca] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xc0000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xfeec7ce6,0xa6cbd07c,0x04341673,0x7f1bbb33] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xe0000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x11c54139,0x04487a80,0x5d70a8ed,0xd9c35527] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xf0000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x347846b2,0xb2e36f1f,0x0324c86f,0x7f1b98e2] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xf8000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x332eee1a,0x0cbd19ca,0x2d69b426,0x894044f0] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfc000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x866b5b39,0x77ba6efa,0x5128efbd,0xa9ff03cd] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfe000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xcc1445ee,0x94c0f08c,0xdee5c344,0xecd1e233] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xbe288319,0x029363c2,0x622feba4,0xb05dfdfe] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff800000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xcfd18755,0x23f3cd21,0xc395651e,0x6ee15e56] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffc00000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xcb5a4086,0x57837c53,0xbf16f9d8,0x465dce19] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffe00000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xca0bf42c,0xb107f55c,0xcff2fc09,0xee08ca15] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff00000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xfdd9bbb4,0xa7dc2e4a,0x23536a58,0x80a2db67] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff80000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xede447b3,0x62c48499,0x3dec9442,0xa3b46aef] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffc0000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x10dffb05,0x904bff7c,0x4781df78,0x0ad26837] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffe0000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc33bc13e,0x8de88ac2,0x5232aa74,0x96398783] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffff0000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xca359c70,0x803a3b2a,0x3d542e87,0x81dea975] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffff8000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xbcc65b52,0x6f88d05b,0x89ce8a52,0x021fdb06] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffc000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xdb91a388,0x55c8c464,0x3851fbfb,0x358b0109] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffe000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xca6e8893,0xa114ae8e,0x27d5ab03,0xa5499610] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffff000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6629d2b8,0xdf97da72,0x8cdd8b1e,0x7f945077] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffff800,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x4570a5a1,0x8cfc0dd5,0x82f1d88d,0x5c9a1720] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffc00,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x72bc65aa,0x8e89562e,0x3f274d45,0xaf1cd10b] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffe00,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x98551da1,0xa6503276,0xae1c7762,0x5f9ea615] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffff00,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x0ddfe51c,0xed7e3f4a,0xe927daa3,0xfe452cee] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffff80,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xdb826251,0xe4ce384b,0x80218b0e,0x1da1dd4c] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffc0,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x2cacf728,0xb88abbad,0x7011ed0e,0x64a1680c] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffe0,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x330d8ee7,0xc5677e09,0x9ac74c99,0x94ee4cfb] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffff0,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xedf61ae3,0x62e882dd,0xc0167474,0xa7a77f3a] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffff8,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6168b00b,0xa7859e09,0x70ecfd75,0x7efecf7c] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffffc,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd1415447,0x866230d2,0x8bb1ea18,0xa4cdfd02] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffffe,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x51618339,0x2f7a8763,0xafec68a0,0x60264141] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x77565c8d,0x73cfd413,0x0b4aa14d,0x8911710f] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x80000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x37232a4e,0xd21ccc27,0xc19c9610,0x078cabac] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xc0000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x804f32ea,0x71828c7d,0x329077e7,0x12231666] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xe0000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd64424f2,0x3cb97215,0xe9c2c6f2,0x8d29eab7] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xf0000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x023e82b5,0x33f68c75,0xc238cebd,0xb2ee89a2] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xf8000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x193a3d24,0x157a51f1,0xee0893f6,0x777417e7] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfc000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x84ecacfc,0xd400084d,0x078612b1,0x945f2ef5] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfe000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x1dcd8bb1,0x73259eb3,0x3a5242b0,0xde31a455] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x35e9eddb,0xc375e792,0xc19992c1,0x9165012b] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff800000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8a772231,0xc01dfdd7,0xc98e4cfd,0xdcc0807a] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffc00000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6eda7ff6,0xb8319180,0xff0d6e65,0x629d01c3] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffe00000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc267ef0e,0x2d01a993,0x944dd397,0x101413cb] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff00000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xe9f80e9d,0x845bcc0f,0x62926af7,0x2eabca39] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff80000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x67029907,0x27aa0878,0x637b45dc,0xd3a3b074] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffc0000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x2e2e647d,0x5360e092,0x30a5d738,0xca33471e] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffe0000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x1f56413c,0x7add6f43,0xd1d56e4f,0x02190330] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffff0000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x69cd0606,0xe15af729,0xd6bca143,0x016d9842] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffff8000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa085d7c1,0xa500873a,0x20099c4c,0xaa3c3f5b] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffc000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x4fc0d230,0xf8891415,0xb87b83f9,0x5f2e09d1] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffe000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x4327d08c,0x523d8eba,0x697a4336,0x507d1f42] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffff000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x7a15aab8,0x2701efa5,0xae36ab1d,0x6b76290f] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffff800,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x5bf00518,0x93a18bb3,0x0e139a58,0xfed0fa54] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffc00,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x97e8adf6,0x5638fd9c,0xdf3bc22c,0x17fe4dbd] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffe00,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x1ee6ee32,0x6583a058,0x6491c964,0x18d1a35d] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffff00,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x26b549c2,0xec756f82,0xecc48008,0xe529956b] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffff80,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x70377b6d,0xa669b072,0x129e057c,0xc28e9ca5] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffc0,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x9c94b8b0,0xcb8bcc91,0x9072262b,0x3fa05ad9] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffe0,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x2fbb83df,0xd0d7abcb,0x05cd28ca,0xd2dfb523] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffff0,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x96877803,0xde77744b,0xb970d0a9,0x1f4debae] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffff8,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x7379f337,0x0cf6e5ce,0x12ae5969,0xc8eea312] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffffc,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x02dc99fa,0x3d4f98ce,0x80985e72,0x33889313] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffffe,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x1e38e759,0x075ba5ca,0xb6457da5,0x1844295a] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x70bed8db,0xf615868a,0x1f9d9b05,0xd3e7a267] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x80000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x234b148b,0x8cb1d8c3,0x2b287e89,0x6903d150] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xc0000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x294b033d,0xf4da853f,0x4be3e243,0xf7e513f4] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xe0000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3f58c950,0xf0367160,0xadec45f2,0x441e7411] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xf0000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x37f65553,0x6a704e5a,0xce182d74,0x2a820cf4] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xf8000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xea7bd6bb,0x63418731,0xaeac790f,0xe42d61e8] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfc000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xe74a4c99,0x9b4c064e,0x48bb1e41,0x3f51e5ea] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfe000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xba9ebefd,0xb4ccf30f,0x296cecb3,0xbc1943e8] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3194367a,0x4898c502,0xc13bb747,0x8640a72d] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff800000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xda797713,0x263d6f33,0xa5478a65,0xef60d412] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffc00000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd1ac39bb,0x1ef86b9c,0x1344f214,0x679aa376] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffe00000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x2fdea9e6,0x50532be5,0xbc0e7325,0x337fd363] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff00000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd3a204db,0xd9c2af15,0x8b6ca67a,0x5156ce4a] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff80000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3a0a0e75,0xa8da3673,0x5aee6684,0xd965a778] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffc0000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x52fc3e62,0x0492ea99,0x641ea168,0xda5b6d52] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffe0000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd2e0c7f1,0x5b477246,0x7d2cfc87,0x3000b2ca] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffff0000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x56353113,0x5e0c4d70,0xa38f8bdb,0x190ba04e] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffff8000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa8a39a0f,0x5663f4c0,0xfe5f2d3c,0xafff421a] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffc000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd94b5e90,0xdb354c1e,0x42f61fab,0xe167b2c0] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffe000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x50e6d3c9,0xb6698a7c,0xd276f96b,0x1473f35a] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffff000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x9338f08e,0x0ebee969,0x05d8f2e8,0x25208f43] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffff800],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8b378c86,0x672aa54a,0x3a266ba1,0x9d2580ca] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffc00],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xcca7c308,0x6f5f9511,0xb31233da,0x7cab9160] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffe00],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x5b40ff4e,0xc9be536b,0xa23035fa,0x4f06064c] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffff00],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x60eb5af8,0x416b2571,0x49372194,0xe8b88749] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffff80],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x2f005a8a,0xed8a361c,0x92e440c1,0x5520cbd1] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffc0],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x7b036276,0x11678a99,0x77175788,0x07a800e2] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffe0],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xcf78618f,0x74f6f369,0x6e0a4779,0xb90b5a77] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffff0],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x03720371,0xa04962ea,0xea0a852e,0x69972858] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffff8],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x1f8a8133,0xaa8ccf70,0xe2bd3285,0x831ca6b7] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffffc],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x27936bd2,0x7fb1468f,0xc8b48bc4,0x83321725] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffffe],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb07d4f3e,0x2cd2ef2e,0xb5459807,0x54dfea0f] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x4bf85f1b,0x5d54adbc,0x307b0a04,0x8389adcb] },\n\
+ { key: [0x80000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xe35a6dcb,0x19b201a0,0x1ebcfa8a,0xa22b5759] },\n\
+ { key: [0xc0000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb29169cd,0xcf2d83e8,0x38125a12,0xee6aa400] },\n\
+ { key: [0xe0000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd8f3a72f,0xc3cdf74d,0xfaf6c3e6,0xb97b2fa6] },\n\
+ { key: [0xf0000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x1c777679,0xd50037c7,0x9491a94d,0xa76a9a35] },\n\
+ { key: [0xf8000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x9cf4893e,0xcafa0a02,0x47a898e0,0x40691559] },\n\
+ { key: [0xfc000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8fbb4137,0x03735326,0x310a269b,0xd3aa94b2] },\n\
+ { key: [0xfe000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x60e32246,0xbed2b0e8,0x59e55c1c,0xc6b26502] },\n\
+ { key: [0xff000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xec52a212,0xf80a09df,0x6317021b,0xc2a9819e] },\n\
+ { key: [0xff800000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf23e5b60,0x0eb70dbc,0xcf6c0b1d,0x9a68182c] },\n\
+ { key: [0xffc00000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa3f599d6,0x3a82a968,0xc33fe265,0x90745970] },\n\
+ { key: [0xffe00000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd1ccb9b1,0x337002cb,0xac42c520,0xb5d67722] },\n\
+ { key: [0xfff00000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xcc111f6c,0x37cf40a1,0x159d00fb,0x59fb0488] },\n\
+ { key: [0xfff80000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xdc43b51a,0xb6090523,0x72989a26,0xe9cdd714] },\n\
+ { key: [0xfffc0000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x4dcede8d,0xa9e2578f,0x39703d44,0x33dc6459] },\n\
+ { key: [0xfffe0000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x1a4c1c26,0x3bbccfaf,0xc1178289,0x4685e3a8] },\n\
+ { key: [0xffff0000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x937ad848,0x80db5061,0x3423d6d5,0x27a2823d] },\n\
+ { key: [0xffff8000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x610b71df,0xc688e150,0xd8152c5b,0x35ebc14d] },\n\
+ { key: [0xffffc000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x27ef2495,0xdabf3238,0x85aab39c,0x80f18d8b] },\n\
+ { key: [0xffffe000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x633cafea,0x395bc03a,0xdae3a1e2,0x068e4b4e] },\n\
+ { key: [0xfffff000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6e1b482b,0x53761cf6,0x31819b74,0x9a6f3724] },\n\
+ { key: [0xfffff800,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x976e6f85,0x1ab52c77,0x1998dbb2,0xd71c75a9] },\n\
+ { key: [0xfffffc00,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x85f2ba84,0xf8c307cf,0x525e124c,0x3e22e6cc] },\n\
+ { key: [0xfffffe00,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6bcca98b,0xf6a835fa,0x64955f72,0xde4115fe] },\n\
+ { key: [0xffffff00,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x2c75e2d3,0x6eebd654,0x11f14fd0,0xeb1d2a06] },\n\
+ { key: [0xffffff80,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xbd492950,0x06250ffc,0xa5100b60,0x07a0eade] },\n\
+ { key: [0xffffffc0,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa190527d,0x0ef7c70f,0x459cd394,0x0df316ec] },\n\
+ { key: [0xffffffe0,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xbbd1097a,0x62433f79,0x449fa97d,0x4ee80dbf] },\n\
+ { key: [0xfffffff0,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x07058e40,0x8f5b99b0,0xe0f061a1,0x761b5b3b] },\n\
+ { key: [0xfffffff8,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x5fd1f13f,0xa0f31e37,0xfabde328,0xf894eac2] },\n\
+ { key: [0xfffffffc,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xfc4af7c9,0x48df26e2,0xef3e01c1,0xee5b8f6f] },\n\
+ { key: [0xfffffffe,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x829fd720,0x8fb92d44,0xa074a677,0xee9861ac] },\n\
+ { key: [0xffffffff,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xad9fc613,0xa703251b,0x54c64a0e,0x76431711] },\n\
+ { key: [0xffffffff,0x80000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x33ac9ecc,0xc4cc75e2,0x711618f8,0x0b1548e8] },\n\
+ { key: [0xffffffff,0xc0000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x2025c74b,0x8ad8f4cd,0xa17ee204,0x9c4c902d] },\n\
+ { key: [0xffffffff,0xe0000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf85ca05f,0xe528f1ce,0x9b790166,0xe8d551e7] },\n\
+ { key: [0xffffffff,0xf0000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6f6238d8,0x966048d4,0x967154e0,0xdad5a6c9] },\n\
+ { key: [0xffffffff,0xf8000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf2b21b4e,0x7640a9b3,0x346de8b8,0x2fb41e49] },\n\
+ { key: [0xffffffff,0xfc000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf836f251,0xad1d11d4,0x9dc34462,0x8b1884e1] },\n\
+ { key: [0xffffffff,0xfe000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x077e9470,0xae7abea5,0xa9769d49,0x182628c3] },\n\
+ { key: [0xffffffff,0xff000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xe0dcc2d2,0x7fc98656,0x33f85223,0xcf0d611f] },\n\
+ { key: [0xffffffff,0xff800000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xbe66cfea,0x2fecd6bf,0x0ec7b435,0x2c99bcaa] },\n\
+ { key: [0xffffffff,0xffc00000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xdf31144f,0x87a2ef52,0x3facdcf2,0x1a427804] },\n\
+ { key: [0xffffffff,0xffe00000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb5bb0f56,0x29fb6aae,0x5e1839a3,0xc3625d63] },\n\
+ { key: [0xffffffff,0xfff00000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3c9db333,0x5306fe1e,0xc612bdbf,0xae6b6028] },\n\
+ { key: [0xffffffff,0xfff80000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3dd5c346,0x34a79d3c,0xfcc83397,0x60e6f5f4] },\n\
+ { key: [0xffffffff,0xfffc0000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x82bda118,0xa3ed7af3,0x14fa2ccc,0x5c07b761] },\n\
+ { key: [0xffffffff,0xfffe0000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x2937a64f,0x7d4f46fe,0x6fea3b34,0x9ec78e38] },\n\
+ { key: [0xffffffff,0xffff0000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x225f068c,0x28476605,0x735ad671,0xbb8f39f3] },\n\
+ { key: [0xffffffff,0xffff8000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xae682c5e,0xcd71898e,0x08942ac9,0xaa89875c] },\n\
+ { key: [0xffffffff,0xffffc000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x5e031cb9,0xd676c302,0x2d7f2622,0x7e85c38f] },\n\
+ { key: [0xffffffff,0xffffe000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa78463fb,0x064db5d5,0x2bb64bfe,0xf64f2dda] },\n\
+ { key: [0xffffffff,0xfffff000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8aa9b75e,0x78459387,0x6c53a00e,0xae5af52b] },\n\
+ { key: [0xffffffff,0xfffff800,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3f84566d,0xf23da48a,0xf692722f,0xe980573a] },\n\
+ { key: [0xffffffff,0xfffffc00,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x31690b5e,0xd41c7eb4,0x2a1e8327,0x0a7ff0e6] },\n\
+ { key: [0xffffffff,0xfffffe00,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x77dd7702,0x646d55f0,0x8365e477,0xd3590eda] },\n\
+ { key: [0xffffffff,0xffffff00,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x4c022ac6,0x2b3cb78d,0x739cc67b,0x3e20bb7e] },\n\
+ { key: [0xffffffff,0xffffff80,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x092fa137,0xce18b5df,0xe7906f55,0x0bb13370] },\n\
+ { key: [0xffffffff,0xffffffc0,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3e0cdadf,0x2e68353c,0x0027672c,0x97144dd3] },\n\
+ { key: [0xffffffff,0xffffffe0,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd8c4b200,0xb383fc1f,0x2b2ea677,0x618a1d27] },\n\
+ { key: [0xffffffff,0xfffffff0,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x11825f99,0xb0e9bb34,0x77c1c071,0x3b015aac] },\n\
+ { key: [0xffffffff,0xfffffff8,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf8b9fffb,0x5c187f7d,0xdc7ab10f,0x4fb77576] },\n\
+ { key: [0xffffffff,0xfffffffc,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xffb4e87a,0x32b37d6f,0x2c8328d3,0xb5377802] },\n\
+ { key: [0xffffffff,0xfffffffe,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd276c13a,0x5d220f4d,0xa9224e74,0x896391ce] },\n\
+ { key: [0xffffffff,0xffffffff,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x94efe7a0,0xe2e031e2,0x536da01d,0xf799c927] },\n\
+ { key: [0xffffffff,0xffffffff,0x80000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8f8fd822,0x680a8597,0x4e53a5a8,0xeb9d38de] },\n\
+ { key: [0xffffffff,0xffffffff,0xc0000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xe0f0a91b,0x2e45f8cc,0x37b7805a,0x3042588d] },\n\
+ { key: [0xffffffff,0xffffffff,0xe0000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x597a6252,0x255e46d6,0x364dbeed,0xa31e279c] },\n\
+ { key: [0xffffffff,0xffffffff,0xf0000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf51a0f69,0x4442b8f0,0x5571797f,0xec7ee8bf] },\n\
+ { key: [0xffffffff,0xffffffff,0xf8000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x9ff071b1,0x65b5198a,0x93dddeeb,0xc54d09b5] },\n\
+ { key: [0xffffffff,0xffffffff,0xfc000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc20a19fd,0x5758b0c4,0xbc1a5df8,0x9cf73877] },\n\
+ { key: [0xffffffff,0xffffffff,0xfe000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x97120166,0x307119ca,0x2280e931,0x5668e96f] },\n\
+ { key: [0xffffffff,0xffffffff,0xff000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x4b3b9f1e,0x099c2a09,0xdc091e90,0xe4f18f0a] },\n\
+ { key: [0xffffffff,0xffffffff,0xff800000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xeb040b89,0x1d4b37f6,0x851f7ec2,0x19cd3f6d] },\n\
+ { key: [0xffffffff,0xffffffff,0xffc00000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x9f0fdec0,0x8b7fd79a,0xa39535be,0xa42db92a] },\n\
+ { key: [0xffffffff,0xffffffff,0xffe00000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x2e70f168,0xfc74bf91,0x1df240bc,0xd2cef236] },\n\
+ { key: [0xffffffff,0xffffffff,0xfff00000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x462ccd7f,0x5fd1108d,0xbc152f3c,0xacad328b] },\n\
+ { key: [0xffffffff,0xffffffff,0xfff80000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa4af534a,0x7d0b643a,0x01868785,0xd86dfb95] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffc0000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xab980296,0x197e1a50,0x22326c31,0xda4bf6f3] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffe0000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf97d57b3,0x333b6281,0xb07d486d,0xb2d4e20c] },\n\
+ { key: [0xffffffff,0xffffffff,0xffff0000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf33fa367,0x20231afe,0x4c759ade,0x6bd62eb6] },\n\
+ { key: [0xffffffff,0xffffffff,0xffff8000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xfdcfac0c,0x02ca5383,0x43c68117,0xe0a15938] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffc000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xad4916f5,0xee5772be,0x764fc027,0xb8a6e539] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffe000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x2e16873e,0x1678610d,0x7e14c02d,0x002ea845] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffff000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x4e6e627c,0x1acc5134,0x0053a823,0x6d579576] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffff800,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xab0c8410,0xaeeead92,0xfeec1eb4,0x30d652cb] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffffc00,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xe86f7e23,0xe835e114,0x977f60e1,0xa592202e] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffffe00,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xe68ad505,0x5a367041,0xfade09d9,0xa70a794b] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffff00,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x0791823a,0x3c666bb6,0x162825e7,0x8606a7fe] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffff80,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xdcca366a,0x9bf47b7b,0x868b77e2,0x5c18a364] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffc0,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x684c9efc,0x237e4a44,0x2965f84b,0xce20247a] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffe0,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa858411f,0xfbe63fdb,0x9c8aa1bf,0xaed67b52] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffffff0,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x04bc3da2,0x179c3015,0x498b0e03,0x910db5b8] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffffff8,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x40071eea,0xb3f935db,0xc25d0084,0x1460260f] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffffffc,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x0ebd7c30,0xed2016e0,0x8ba806dd,0xb008bcc8] },\n\
+ { key: [0xffffffff,0xffffffff,0xfffffffe,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x15c6becf,0x0f4cec71,0x29cbd22d,0x1a79b1b8] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x0aeede5b,0x91f72170,0x0e9e62ed,0xbf60b781] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0x80000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x266581af,0x0dcfbed1,0x585e0a24,0x2c64b8df] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xc0000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6693dc91,0x1662ae47,0x3216ba22,0x189a511a] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xe0000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x7606fa36,0xd86473e6,0xfb3a1bb0,0xe2c0adf5] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xf0000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x112078e9,0xe11fbb78,0xe26ffb88,0x99e96b9a] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xf8000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x40b264e9,0x21e9e4a8,0x2694589e,0xf3798262] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfc000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8d4595cb,0x4fa70267,0x15f55bd6,0x8e2882f9] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfe000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb588a302,0xbdbc0919,0x7df1edae,0x68926ed9] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xff000000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x33f75023,0x90b8a4a2,0x21cfecd0,0x666624ba] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xff800000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3d20253a,0xdbce3be2,0x373767c4,0xd822c566] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffc00000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa42734a3,0x929bf84c,0xf0116c98,0x56a3c18c] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffe00000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xe3abc493,0x9457422b,0xb957da3c,0x56938c6d] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfff00000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x972bdd2e,0x7c525130,0xfadc8f76,0xfc6f4b3f] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfff80000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x84a83d7b,0x94c699cb,0xcb8a7d9b,0x61f64093] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffc0000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xce61d635,0x14aded03,0xd43e6ebf,0xc3a9001f] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffe0000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6c839dd5,0x8eeae6b8,0xa36af48e,0xd63d2dc9] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffff0000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xcd5ece55,0xb8da3bf6,0x22c4100d,0xf5de46f9] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffff8000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3b6f46f4,0x0e0ac5fc,0x0a9c1105,0xf800f48d] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffc000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xba26d47d,0xa3aeb028,0xde4fb5b3,0xa854a24b] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffe000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x87f53bf6,0x20d36772,0x68445212,0x904389d5] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffff000,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x10617d28,0xb5e0f460,0x5492b182,0xa5d7f9f6] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffff800,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x9aaec4fa,0xbbf6fae2,0xa71feff0,0x2e372b39] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffffc00,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3a90c62d,0x88b5c428,0x09abf782,0x488ed130] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffffe00,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xf1f1c5a4,0x0899e157,0x72857ccb,0x65c7a09a] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffff00,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x190843d2,0x9b25a389,0x7c692ce1,0xdd81ee52] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffff80,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa866bc65,0xb6941d86,0xe8420a7f,0xfb0964db] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffc0,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8193c6ff,0x85225ced,0x4255e92f,0x6e078a14] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffe0,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x9661cb24,0x24d7d4a3,0x80d547f9,0xe7ec1cb9] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffffff0,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x86f93d9e,0xc08453a0,0x71e2e287,0x7877a9c8] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffffff8,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x27eefa80,0xce6a4a9d,0x598e3fec,0x365434d2] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffffffc,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd6206844,0x4578e3ab,0x39ce7ec9,0x5dd045dc] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xfffffffe,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb5f71d4d,0xd9a71fe5,0xd8bc8ba7,0xe6ea3048] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6825a347,0xac479d4f,0x9d95c5cb,0x8d3fd7e9] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x80000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xe3714e94,0xa5778955,0xcc034635,0x8e94783a] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xc0000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd836b44b,0xb29e0c7d,0x89fa4b2d,0x4b677d2a] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xe0000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x5d454b75,0x021d76d4,0xb84f873a,0x8f877b92] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xf0000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc3498f7e,0xced20953,0x14fc2811,0x5885b33f] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xf8000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6e668856,0x539ad8e4,0x05bd123f,0xe6c88530] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfc000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8680db7f,0x3a87b860,0x5543cfdb,0xe6754076] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfe000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6c5d03b1,0x3069c365,0x8b3179be,0x91b0800c] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xef1b384a,0xc4d93eda,0x00c92add,0x0995ea5f] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff800000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xbf811580,0x5471741b,0xd5ad20a0,0x3944790f] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffc00000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc64c24b6,0x894b038b,0x3c0d09b1,0xdf068b0b] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffe00000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3967a10c,0xffe27d01,0x78545fbf,0x6a40544b] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff00000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x7c85e9c9,0x5de1a9ec,0x5a5363a8,0xa053472d] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff80000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa9eec03c,0x8abec7ba,0x68315c2c,0x8c2316e0] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffc0000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xcac8e414,0xc2f38822,0x7ae14986,0xfc983524] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffe0000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x5d942b7f,0x4622ce05,0x6c3ce3ce,0x5f1dd9d6] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffff0000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd240d648,0xce21a302,0x0282c3f1,0xb528a0b6] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffff8000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x45d089c3,0x6d5c5a4e,0xfc689e3b,0x0de10dd5] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffc000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb4da5df4,0xbecb5462,0xe03a0ed0,0x0d295629] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffe000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xdcf4e129,0x136c1a4b,0x7a0f3893,0x5cc34b2b] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffff000,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd9a4c761,0x8b0ce48a,0x3d5aee1a,0x1c0114c4] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffff800,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xca352df0,0x25c65c7b,0x0bf306fb,0xee0f36ba] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffc00,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x238aca23,0xfd3409f3,0x8af63378,0xed2f5473] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffe00,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x59836a0e,0x06a79691,0xb36667d5,0x380d8188] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffff00,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x33905080,0xf7acf1cd,0xae0a91fc,0x3e85aee4] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffff80,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x72c9e464,0x6dbc3d63,0x20fc6689,0xd93e8833] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffc0,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xba77413d,0xea5925b7,0xf5417ea4,0x7ff19f59] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffe0,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6cae8129,0xf843d86d,0xc786a0fb,0x1a184970] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffff0,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xfcfefb53,0x4100796e,0xebbd9902,0x06754e19] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffff8,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8c791d5f,0xdddf470d,0xa04f3e6d,0xc4a5b5b5] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffffc,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc93bbdc0,0x7a4611ae,0x4bb266ea,0x5034a387] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffffe,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc102e38e,0x489aa747,0x62f3efc5,0xbb23205a] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x00000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x93201481,0x665cbafc,0x1fcc220b,0xc545fb3d] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x80000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x4960757e,0xc6ce68cf,0x195e454c,0xfd0f32ca] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xc0000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xfeec7ce6,0xa6cbd07c,0x04341673,0x7f1bbb33] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xe0000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x11c54139,0x04487a80,0x5d70a8ed,0xd9c35527] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xf0000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x347846b2,0xb2e36f1f,0x0324c86f,0x7f1b98e2] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xf8000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x332eee1a,0x0cbd19ca,0x2d69b426,0x894044f0] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfc000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x866b5b39,0x77ba6efa,0x5128efbd,0xa9ff03cd] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfe000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xcc1445ee,0x94c0f08c,0xdee5c344,0xecd1e233] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xbe288319,0x029363c2,0x622feba4,0xb05dfdfe] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff800000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xcfd18755,0x23f3cd21,0xc395651e,0x6ee15e56] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffc00000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xcb5a4086,0x57837c53,0xbf16f9d8,0x465dce19] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffe00000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xca0bf42c,0xb107f55c,0xcff2fc09,0xee08ca15] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff00000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xfdd9bbb4,0xa7dc2e4a,0x23536a58,0x80a2db67] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff80000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xede447b3,0x62c48499,0x3dec9442,0xa3b46aef] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffc0000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x10dffb05,0x904bff7c,0x4781df78,0x0ad26837] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffe0000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc33bc13e,0x8de88ac2,0x5232aa74,0x96398783] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffff0000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xca359c70,0x803a3b2a,0x3d542e87,0x81dea975] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffff8000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xbcc65b52,0x6f88d05b,0x89ce8a52,0x021fdb06] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffc000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xdb91a388,0x55c8c464,0x3851fbfb,0x358b0109] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffe000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xca6e8893,0xa114ae8e,0x27d5ab03,0xa5499610] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffff000,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6629d2b8,0xdf97da72,0x8cdd8b1e,0x7f945077] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffff800,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x4570a5a1,0x8cfc0dd5,0x82f1d88d,0x5c9a1720] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffc00,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x72bc65aa,0x8e89562e,0x3f274d45,0xaf1cd10b] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffe00,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x98551da1,0xa6503276,0xae1c7762,0x5f9ea615] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffff00,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x0ddfe51c,0xed7e3f4a,0xe927daa3,0xfe452cee] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffff80,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xdb826251,0xe4ce384b,0x80218b0e,0x1da1dd4c] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffc0,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x2cacf728,0xb88abbad,0x7011ed0e,0x64a1680c] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffe0,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x330d8ee7,0xc5677e09,0x9ac74c99,0x94ee4cfb] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffff0,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xedf61ae3,0x62e882dd,0xc0167474,0xa7a77f3a] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffff8,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6168b00b,0xa7859e09,0x70ecfd75,0x7efecf7c] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffffc,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd1415447,0x866230d2,0x8bb1ea18,0xa4cdfd02] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffffe,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x51618339,0x2f7a8763,0xafec68a0,0x60264141] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x00000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x77565c8d,0x73cfd413,0x0b4aa14d,0x8911710f] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x80000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x37232a4e,0xd21ccc27,0xc19c9610,0x078cabac] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xc0000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x804f32ea,0x71828c7d,0x329077e7,0x12231666] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xe0000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd64424f2,0x3cb97215,0xe9c2c6f2,0x8d29eab7] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xf0000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x023e82b5,0x33f68c75,0xc238cebd,0xb2ee89a2] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xf8000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x193a3d24,0x157a51f1,0xee0893f6,0x777417e7] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfc000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x84ecacfc,0xd400084d,0x078612b1,0x945f2ef5] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfe000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x1dcd8bb1,0x73259eb3,0x3a5242b0,0xde31a455] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x35e9eddb,0xc375e792,0xc19992c1,0x9165012b] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff800000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8a772231,0xc01dfdd7,0xc98e4cfd,0xdcc0807a] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffc00000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x6eda7ff6,0xb8319180,0xff0d6e65,0x629d01c3] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffe00000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xc267ef0e,0x2d01a993,0x944dd397,0x101413cb] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff00000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xe9f80e9d,0x845bcc0f,0x62926af7,0x2eabca39] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff80000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x67029907,0x27aa0878,0x637b45dc,0xd3a3b074] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffc0000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x2e2e647d,0x5360e092,0x30a5d738,0xca33471e] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffe0000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x1f56413c,0x7add6f43,0xd1d56e4f,0x02190330] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffff0000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x69cd0606,0xe15af729,0xd6bca143,0x016d9842] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffff8000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa085d7c1,0xa500873a,0x20099c4c,0xaa3c3f5b] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffc000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x4fc0d230,0xf8891415,0xb87b83f9,0x5f2e09d1] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffe000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x4327d08c,0x523d8eba,0x697a4336,0x507d1f42] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffff000,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x7a15aab8,0x2701efa5,0xae36ab1d,0x6b76290f] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffff800,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x5bf00518,0x93a18bb3,0x0e139a58,0xfed0fa54] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffc00,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x97e8adf6,0x5638fd9c,0xdf3bc22c,0x17fe4dbd] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffe00,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x1ee6ee32,0x6583a058,0x6491c964,0x18d1a35d] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffff00,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x26b549c2,0xec756f82,0xecc48008,0xe529956b] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffff80,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x70377b6d,0xa669b072,0x129e057c,0xc28e9ca5] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffc0,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x9c94b8b0,0xcb8bcc91,0x9072262b,0x3fa05ad9] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffe0,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x2fbb83df,0xd0d7abcb,0x05cd28ca,0xd2dfb523] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffff0,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x96877803,0xde77744b,0xb970d0a9,0x1f4debae] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffff8,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x7379f337,0x0cf6e5ce,0x12ae5969,0xc8eea312] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffffc,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x02dc99fa,0x3d4f98ce,0x80985e72,0x33889313] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffffe,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x1e38e759,0x075ba5ca,0xb6457da5,0x1844295a] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x00000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x70bed8db,0xf615868a,0x1f9d9b05,0xd3e7a267] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x80000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x234b148b,0x8cb1d8c3,0x2b287e89,0x6903d150] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xc0000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x294b033d,0xf4da853f,0x4be3e243,0xf7e513f4] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xe0000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3f58c950,0xf0367160,0xadec45f2,0x441e7411] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xf0000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x37f65553,0x6a704e5a,0xce182d74,0x2a820cf4] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xf8000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xea7bd6bb,0x63418731,0xaeac790f,0xe42d61e8] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfc000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xe74a4c99,0x9b4c064e,0x48bb1e41,0x3f51e5ea] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfe000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xba9ebefd,0xb4ccf30f,0x296cecb3,0xbc1943e8] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3194367a,0x4898c502,0xc13bb747,0x8640a72d] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff800000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xda797713,0x263d6f33,0xa5478a65,0xef60d412] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffc00000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd1ac39bb,0x1ef86b9c,0x1344f214,0x679aa376] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffe00000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x2fdea9e6,0x50532be5,0xbc0e7325,0x337fd363] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff00000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd3a204db,0xd9c2af15,0x8b6ca67a,0x5156ce4a] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff80000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x3a0a0e75,0xa8da3673,0x5aee6684,0xd965a778] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffc0000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x52fc3e62,0x0492ea99,0x641ea168,0xda5b6d52] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffe0000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd2e0c7f1,0x5b477246,0x7d2cfc87,0x3000b2ca] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffff0000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x56353113,0x5e0c4d70,0xa38f8bdb,0x190ba04e] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffff8000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xa8a39a0f,0x5663f4c0,0xfe5f2d3c,0xafff421a] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffc000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xd94b5e90,0xdb354c1e,0x42f61fab,0xe167b2c0] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffe000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x50e6d3c9,0xb6698a7c,0xd276f96b,0x1473f35a] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffff000],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x9338f08e,0x0ebee969,0x05d8f2e8,0x25208f43] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffff800],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x8b378c86,0x672aa54a,0x3a266ba1,0x9d2580ca] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffc00],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xcca7c308,0x6f5f9511,0xb31233da,0x7cab9160] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffe00],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x5b40ff4e,0xc9be536b,0xa23035fa,0x4f06064c] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffff00],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x60eb5af8,0x416b2571,0x49372194,0xe8b88749] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffff80],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x2f005a8a,0xed8a361c,0x92e440c1,0x5520cbd1] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffc0],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x7b036276,0x11678a99,0x77175788,0x07a800e2] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffe0],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xcf78618f,0x74f6f369,0x6e0a4779,0xb90b5a77] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffff0],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x03720371,0xa04962ea,0xea0a852e,0x69972858] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffff8],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x1f8a8133,0xaa8ccf70,0xe2bd3285,0x831ca6b7] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffffc],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x27936bd2,0x7fb1468f,0xc8b48bc4,0x83321725] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffffffe],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0xb07d4f3e,0x2cd2ef2e,0xb5459807,0x54dfea0f] },\n\
+ { key: [0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff],\n\
+ pt: [0x00000000,0x00000000,0x00000000,0x00000000],\n\
+ ct: [0x4bf85f1b,0x5d54adbc,0x307b0a04,0x8389adcb] }\n\
+];\n\
+\n\
+\n\
+TalosContentProfiler.subtestStart('stanford-crypto-aes', true).then(() => {\n\
+ var _sunSpiderStartDate = new Date();\n\
+\n\
+ new sjcl.test.TestCase(\"AES official known-answer tests\", function (cb) {\n\
+ if (!sjcl.cipher.aes) {\n\
+ this.unimplemented();\n\
+ cb && cb();\n\
+ return;\n\
+ }\n\
+\n\
+ var i, kat = sjcl.test.vector.aes, tv, len, aes;\n\
+\n\
+ //XXX add more vectors instead of looping\n\
+ for (var index = 0; index < 8; index++) {\n\
+ for (i=0; i<kat.length; i++) {\n\
+ tv = kat[i];\n\
+ len = 32 * tv.key.length;\n\
+ aes = new sjcl.cipher.aes(tv.key);\n\
+ this.require(sjcl.bitArray.equal(aes.encrypt(tv.pt), tv.ct), \"encrypt \"+len+\" #\"+i);\n\
+ this.require(sjcl.bitArray.equal(aes.decrypt(tv.ct), tv.pt), \"decrypt \"+len+\" #\"+i);\n\
+ }\n\
+ }\n\
+ cb && cb();\n\
+ });\n\
+\n\
+ sjcl.test.run();\n\
+\n\
+\n\
+ var _sunSpiderInterval = new Date() - _sunSpiderStartDate;\n\
+ TalosContentProfiler.subtestEnd('stanford-crypto-aes', true).then(() => {\n\
+ record(_sunSpiderInterval);\n\
+ });\n\
+\n\
+});\n\
+</script>\n\
+\n\
+\n\
+</body>\n\
+</html>\n\
+", "<!DOCTYPE html>\n\
+<head>\n\
+\n\
+<meta charset=utf8>\n\
+\n\
+<!--\n\
+ Copyright (C) 2007 Apple Inc. All rights reserved.\n\
+\n\
+ Redistribution and use in source and binary forms, with or without\n\
+ modification, are permitted provided that the following conditions\n\
+ are met:\n\
+ 1. Redistributions of source code must retain the above copyright\n\
+ notice, this list of conditions and the following disclaimer.\n\
+ 2. Redistributions in binary form must reproduce the above copyright\n\
+ notice, this list of conditions and the following disclaimer in the\n\
+ documentation and/or other materials provided with the distribution.\n\
+\n\
+ THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY\n\
+ EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n\
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n\
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR\n\
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n\
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n\
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n\
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n\
+ OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n\
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \n\
+-->\n\
+\n\
+<title>SunSpider stanford-crypto-ccm</title>\n\
+<link rel=\"stylesheet\" href=\"../kraken.css\">\n\
+</head>\n\
+\n\
+<body>\n\
+<h3>stanford-crypto-ccm</h3>\n\
+<div id=\"console\">\n\
+</div>\n\
+<script>\n\
+var TalosContentProfiler = parent.TalosContentProfiler;\n\
+function record(time) {\n\
+ document.getElementById(\"console\").innerHTML = time + \"ms\";\n\
+ if (window.parent) {\n\
+ parent.recordResult(time);\n\
+ }\n\
+}\n\
+\n\
+\"use strict\";\n\
+\n\
+var sjcl={cipher:{},hash:{},mode:{},misc:{},codec:{},exception:{corrupt:function(a){this.toString=function(){return\"CORRUPT: \"+this.message};this.message=a},invalid:function(a){this.toString=function(){return\"INVALID: \"+this.message};this.message=a},bug:function(a){this.toString=function(){return\"BUG: \"+this.message};this.message=a}}};\n\
+sjcl.cipher.aes=function(a){this.h[0][0][0]||this.w();var b,c,d,e,f=this.h[0][4],g=this.h[1];b=a.length;var h=1;if(b!==4&&b!==6&&b!==8)throw new sjcl.exception.invalid(\"invalid aes key size\");this.a=[d=a.slice(0),e=[]];for(a=b;a<4*b+28;a++){c=d[a-1];if(a%b===0||b===8&&a%b===4){c=f[c>>>24]<<24^f[c>>16&255]<<16^f[c>>8&255]<<8^f[c&255];if(a%b===0){c=c<<8^c>>>24^h<<24;h=h<<1^(h>>7)*283}}d[a]=d[a-b]^c}for(b=0;a;b++,a--){c=d[b&3?a:a-4];e[b]=a<=4||b<4?c:g[0][f[c>>>24]]^g[1][f[c>>16&255]]^g[2][f[c>>8&255]]^\n\
+g[3][f[c&255]]}};\n\
+sjcl.cipher.aes.prototype={encrypt:function(a){return this.H(a,0)},decrypt:function(a){return this.H(a,1)},h:[[[],[],[],[],[]],[[],[],[],[],[]]],w:function(){var a=this.h[0],b=this.h[1],c=a[4],d=b[4],e,f,g,h=[],i=[],k,j,l,m;for(e=0;e<0x100;e++)i[(h[e]=e<<1^(e>>7)*283)^e]=e;for(f=g=0;!c[f];f^=k||1,g=i[g]||1){l=g^g<<1^g<<2^g<<3^g<<4;l=l>>8^l&255^99;c[f]=l;d[l]=f;j=h[e=h[k=h[f]]];m=j*0x1010101^e*0x10001^k*0x101^f*0x1010100;j=h[l]*0x101^l*0x1010100;for(e=0;e<4;e++){a[e][f]=j=j<<24^j>>>8;b[e][l]=m=m<<24^m>>>8}}for(e=\n\
+0;e<5;e++){a[e]=a[e].slice(0);b[e]=b[e].slice(0)}},H:function(a,b){if(a.length!==4)throw new sjcl.exception.invalid(\"invalid aes block size\");var c=this.a[b],d=a[0]^c[0],e=a[b?3:1]^c[1],f=a[2]^c[2];a=a[b?1:3]^c[3];var g,h,i,k=c.length/4-2,j,l=4,m=[0,0,0,0];g=this.h[b];var n=g[0],o=g[1],p=g[2],q=g[3],r=g[4];for(j=0;j<k;j++){g=n[d>>>24]^o[e>>16&255]^p[f>>8&255]^q[a&255]^c[l];h=n[e>>>24]^o[f>>16&255]^p[a>>8&255]^q[d&255]^c[l+1];i=n[f>>>24]^o[a>>16&255]^p[d>>8&255]^q[e&255]^c[l+2];a=n[a>>>24]^o[d>>16&\n\
+255]^p[e>>8&255]^q[f&255]^c[l+3];l+=4;d=g;e=h;f=i}for(j=0;j<4;j++){m[b?3&-j:j]=r[d>>>24]<<24^r[e>>16&255]<<16^r[f>>8&255]<<8^r[a&255]^c[l++];g=d;d=e;e=f;f=a;a=g}return m}};\n\
+sjcl.bitArray={bitSlice:function(a,b,c){a=sjcl.bitArray.P(a.slice(b/32),32-(b&31)).slice(1);return c===undefined?a:sjcl.bitArray.clamp(a,c-b)},concat:function(a,b){if(a.length===0||b.length===0)return a.concat(b);var c=a[a.length-1],d=sjcl.bitArray.getPartial(c);return d===32?a.concat(b):sjcl.bitArray.P(b,d,c|0,a.slice(0,a.length-1))},bitLength:function(a){var b=a.length;if(b===0)return 0;return(b-1)*32+sjcl.bitArray.getPartial(a[b-1])},clamp:function(a,b){if(a.length*32<b)return a;a=a.slice(0,Math.ceil(b/\n\
+32));var c=a.length;b&=31;if(c>0&&b)a[c-1]=sjcl.bitArray.partial(b,a[c-1]&2147483648>>b-1,1);return a},partial:function(a,b,c){if(a===32)return b;return(c?b|0:b<<32-a)+a*0x10000000000},getPartial:function(a){return Math.round(a/0x10000000000)||32},equal:function(a,b){if(sjcl.bitArray.bitLength(a)!==sjcl.bitArray.bitLength(b))return false;var c=0,d;for(d=0;d<a.length;d++)c|=a[d]^b[d];return c===0},P:function(a,b,c,d){var e;e=0;if(d===undefined)d=[];for(;b>=32;b-=32){d.push(c);c=0}if(b===0)return d.concat(a);\n\
+for(e=0;e<a.length;e++){d.push(c|a[e]>>>b);c=a[e]<<32-b}e=a.length?a[a.length-1]:0;a=sjcl.bitArray.getPartial(e);d.push(sjcl.bitArray.partial(b+a&31,b+a>32?c:d.pop(),1));return d},k:function(a,b){return[a[0]^b[0],a[1]^b[1],a[2]^b[2],a[3]^b[3]]}};\n\
+sjcl.codec.utf8String={fromBits:function(a){var b=\"\",c=sjcl.bitArray.bitLength(a),d,e;for(d=0;d<c/8;d++){if((d&3)===0)e=a[d/4];b+=String.fromCharCode(e>>>24);e<<=8}return decodeURIComponent(escape(b))},toBits:function(a){a=unescape(encodeURIComponent(a));var b=[],c,d=0;for(c=0;c<a.length;c++){d=d<<8|a.charCodeAt(c);if((c&3)===3){b.push(d);d=0}}c&3&&b.push(sjcl.bitArray.partial(8*(c&3),d));return b}};\n\
+sjcl.codec.hex={fromBits:function(a){var b=\"\",c;for(c=0;c<a.length;c++)b+=((a[c]|0)+0xf00000000000).toString(16).substr(4);return b.substr(0,sjcl.bitArray.bitLength(a)/4)},toBits:function(a){var b,c=[],d;a=a.replace(/\\s|0x/g,\"\");d=a.length;a+=\"00000000\";for(b=0;b<a.length;b+=8)c.push(parseInt(a.substr(b,8),16)^0);return sjcl.bitArray.clamp(c,d*4)}};\n\
+sjcl.codec.base64={D:\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",fromBits:function(a,b){var c=\"\",d,e=0,f=sjcl.codec.base64.D,g=0,h=sjcl.bitArray.bitLength(a);for(d=0;c.length*6<h;){c+=f.charAt((g^a[d]>>>e)>>>26);if(e<6){g=a[d]<<6-e;e+=26;d++}else{g<<=6;e-=6}}for(;c.length&3&&!b;)c+=\"=\";return c},toBits:function(a){a=a.replace(/\\s|=/g,\"\");var b=[],c,d=0,e=sjcl.codec.base64.D,f=0,g;for(c=0;c<a.length;c++){g=e.indexOf(a.charAt(c));if(g<0)throw new sjcl.exception.invalid(\"this isn't base64!\");\n\
+if(d>26){d-=26;b.push(f^g>>>d);f=g<<32-d}else{d+=6;f^=g<<32-d}}d&56&&b.push(sjcl.bitArray.partial(d&56,f,1));return b}};sjcl.hash.sha256=function(a){this.a[0]||this.w();if(a){this.n=a.n.slice(0);this.i=a.i.slice(0);this.e=a.e}else this.reset()};sjcl.hash.sha256.hash=function(a){return(new sjcl.hash.sha256).update(a).finalize()};\n\
+sjcl.hash.sha256.prototype={blockSize:512,reset:function(){this.n=this.N.slice(0);this.i=[];this.e=0;return this},update:function(a){if(typeof a===\"string\")a=sjcl.codec.utf8String.toBits(a);var b,c=this.i=sjcl.bitArray.concat(this.i,a);b=this.e;a=this.e=b+sjcl.bitArray.bitLength(a);for(b=512+b&-512;b<=a;b+=512)this.C(c.splice(0,16));return this},finalize:function(){var a,b=this.i,c=this.n;b=sjcl.bitArray.concat(b,[sjcl.bitArray.partial(1,1)]);for(a=b.length+2;a&15;a++)b.push(0);b.push(Math.floor(this.e/\n\
+4294967296));for(b.push(this.e|0);b.length;)this.C(b.splice(0,16));this.reset();return c},N:[],a:[],w:function(){function a(e){return(e-Math.floor(e))*0x100000000|0}var b=0,c=2,d;a:for(;b<64;c++){for(d=2;d*d<=c;d++)if(c%d===0)continue a;if(b<8)this.N[b]=a(Math.pow(c,0.5));this.a[b]=a(Math.pow(c,1/3));b++}},C:function(a){var b,c,d=a.slice(0),e=this.n,f=this.a,g=e[0],h=e[1],i=e[2],k=e[3],j=e[4],l=e[5],m=e[6],n=e[7];for(a=0;a<64;a++){if(a<16)b=d[a];else{b=d[a+1&15];c=d[a+14&15];b=d[a&15]=(b>>>7^b>>>18^\n\
+b>>>3^b<<25^b<<14)+(c>>>17^c>>>19^c>>>10^c<<15^c<<13)+d[a&15]+d[a+9&15]|0}b=b+n+(j>>>6^j>>>11^j>>>25^j<<26^j<<21^j<<7)+(m^j&(l^m))+f[a];n=m;m=l;l=j;j=k+b|0;k=i;i=h;h=g;g=b+(h&i^k&(h^i))+(h>>>2^h>>>13^h>>>22^h<<30^h<<19^h<<10)|0}e[0]=e[0]+g|0;e[1]=e[1]+h|0;e[2]=e[2]+i|0;e[3]=e[3]+k|0;e[4]=e[4]+j|0;e[5]=e[5]+l|0;e[6]=e[6]+m|0;e[7]=e[7]+n|0}};\n\
+sjcl.mode.ccm={name:\"ccm\",encrypt:function(a,b,c,d,e){var f,g=b.slice(0),h=sjcl.bitArray,i=h.bitLength(c)/8,k=h.bitLength(g)/8;e=e||64;d=d||[];if(i<7)throw new sjcl.exception.invalid(\"ccm: iv must be at least 7 bytes\");for(f=2;f<4&&k>>>8*f;f++);if(f<15-i)f=15-i;c=h.clamp(c,8*(15-f));b=sjcl.mode.ccm.G(a,b,c,d,e,f);g=sjcl.mode.ccm.I(a,g,c,b,e,f);return h.concat(g.data,g.tag)},decrypt:function(a,b,c,d,e){e=e||64;d=d||[];var f=sjcl.bitArray,g=f.bitLength(c)/8,h=f.bitLength(b),i=f.clamp(b,h-e),k=f.bitSlice(b,\n\
+h-e);h=(h-e)/8;if(g<7)throw new sjcl.exception.invalid(\"ccm: iv must be at least 7 bytes\");for(b=2;b<4&&h>>>8*b;b++);if(b<15-g)b=15-g;c=f.clamp(c,8*(15-b));i=sjcl.mode.ccm.I(a,i,c,k,e,b);a=sjcl.mode.ccm.G(a,i.data,c,d,e,b);if(!f.equal(i.tag,a))throw new sjcl.exception.corrupt(\"ccm: tag doesn't match\");return i.data},G:function(a,b,c,d,e,f){var g=[],h=sjcl.bitArray,i=h.k;e/=8;if(e%2||e<4||e>16)throw new sjcl.exception.invalid(\"ccm: invalid tag length\");if(d.length>0xffffffff||b.length>0xffffffff)throw new sjcl.exception.bug(\"ccm: can't deal with 4GiB or more data\");\n\
+f=[h.partial(8,(d.length?64:0)|e-2<<2|f-1)];f=h.concat(f,c);f[3]|=h.bitLength(b)/8;f=a.encrypt(f);if(d.length){c=h.bitLength(d)/8;if(c<=65279)g=[h.partial(16,c)];else if(c<=0xffffffff)g=h.concat([h.partial(16,65534)],[c]);g=h.concat(g,d);for(d=0;d<g.length;d+=4)f=a.encrypt(i(f,g.slice(d,d+4)))}for(d=0;d<b.length;d+=4)f=a.encrypt(i(f,b.slice(d,d+4)));return h.clamp(f,e*8)},I:function(a,b,c,d,e,f){var g,h=sjcl.bitArray;g=h.k;var i=b.length,k=h.bitLength(b);c=h.concat([h.partial(8,f-1)],c).concat([0,\n\
+0,0]).slice(0,4);d=h.bitSlice(g(d,a.encrypt(c)),0,e);if(!i)return{tag:d,data:[]};for(g=0;g<i;g+=4){c[3]++;e=a.encrypt(c);b[g]^=e[0];b[g+1]^=e[1];b[g+2]^=e[2];b[g+3]^=e[3]}return{tag:d,data:h.clamp(b,k)}}};\n\
+sjcl.mode.ocb2={name:\"ocb2\",encrypt:function(a,b,c,d,e,f){if(sjcl.bitArray.bitLength(c)!==128)throw new sjcl.exception.invalid(\"ocb iv must be 128 bits\");var g,h=sjcl.mode.ocb2.A,i=sjcl.bitArray,k=i.k,j=[0,0,0,0];c=h(a.encrypt(c));var l,m=[];d=d||[];e=e||64;for(g=0;g+4<b.length;g+=4){l=b.slice(g,g+4);j=k(j,l);m=m.concat(k(c,a.encrypt(k(c,l))));c=h(c)}l=b.slice(g);b=i.bitLength(l);g=a.encrypt(k(c,[0,0,0,b]));l=i.clamp(k(l,g),b);j=k(j,k(l,g));j=a.encrypt(k(j,k(c,h(c))));if(d.length)j=k(j,f?d:sjcl.mode.ocb2.pmac(a,\n\
+d));return m.concat(i.concat(l,i.clamp(j,e)))},decrypt:function(a,b,c,d,e,f){if(sjcl.bitArray.bitLength(c)!==128)throw new sjcl.exception.invalid(\"ocb iv must be 128 bits\");e=e||64;var g=sjcl.mode.ocb2.A,h=sjcl.bitArray,i=h.k,k=[0,0,0,0],j=g(a.encrypt(c)),l,m,n=sjcl.bitArray.bitLength(b)-e,o=[];d=d||[];for(c=0;c+4<n/32;c+=4){l=i(j,a.decrypt(i(j,b.slice(c,c+4))));k=i(k,l);o=o.concat(l);j=g(j)}m=n-c*32;l=a.encrypt(i(j,[0,0,0,m]));l=i(l,h.clamp(b.slice(c),m));k=i(k,l);k=a.encrypt(i(k,i(j,g(j))));if(d.length)k=\n\
+i(k,f?d:sjcl.mode.ocb2.pmac(a,d));if(!h.equal(h.clamp(k,e),h.bitSlice(b,n)))throw new sjcl.exception.corrupt(\"ocb: tag doesn't match\");return o.concat(h.clamp(l,m))},pmac:function(a,b){var c,d=sjcl.mode.ocb2.A,e=sjcl.bitArray,f=e.k,g=[0,0,0,0],h=a.encrypt([0,0,0,0]);h=f(h,d(d(h)));for(c=0;c+4<b.length;c+=4){h=d(h);g=f(g,a.encrypt(f(h,b.slice(c,c+4))))}b=b.slice(c);if(e.bitLength(b)<128){h=f(h,d(h));b=e.concat(b,[2147483648|0])}g=f(g,b);return a.encrypt(f(d(f(h,d(h))),g))},A:function(a){return[a[0]<<\n\
+1^a[1]>>>31,a[1]<<1^a[2]>>>31,a[2]<<1^a[3]>>>31,a[3]<<1^(a[0]>>>31)*135]}};sjcl.misc.hmac=function(a,b){this.M=b=b||sjcl.hash.sha256;var c=[[],[]],d=b.prototype.blockSize/32;this.l=[new b,new b];if(a.length>d)a=b.hash(a);for(b=0;b<d;b++){c[0][b]=a[b]^909522486;c[1][b]=a[b]^1549556828}this.l[0].update(c[0]);this.l[1].update(c[1])};sjcl.misc.hmac.prototype.encrypt=sjcl.misc.hmac.prototype.mac=function(a,b){a=(new this.M(this.l[0])).update(a,b).finalize();return(new this.M(this.l[1])).update(a).finalize()};\n\
+sjcl.misc.pbkdf2=function(a,b,c,d,e){c=c||1E3;if(d<0||c<0)throw sjcl.exception.invalid(\"invalid params to pbkdf2\");if(typeof a===\"string\")a=sjcl.codec.utf8String.toBits(a);e=e||sjcl.misc.hmac;a=new e(a);var f,g,h,i,k=[],j=sjcl.bitArray;for(i=1;32*k.length<(d||1);i++){e=f=a.encrypt(j.concat(b,[i]));for(g=1;g<c;g++){f=a.encrypt(f);for(h=0;h<f.length;h++)e[h]^=f[h]}k=k.concat(e)}if(d)k=j.clamp(k,d);return k};\n\
+sjcl.random={randomWords:function(a,b){var c=[];b=this.isReady(b);var d;if(b===0)throw new sjcl.exception.notready(\"generator isn't seeded\");else b&2&&this.U(!(b&1));for(b=0;b<a;b+=4){(b+1)%0x10000===0&&this.L();d=this.u();c.push(d[0],d[1],d[2],d[3])}this.L();return c.slice(0,a)},setDefaultParanoia:function(a){this.t=a},addEntropy:function(a,b,c){c=c||\"user\";var d,e,f=(new Date).valueOf(),g=this.q[c],h=this.isReady();d=this.F[c];if(d===undefined)d=this.F[c]=this.R++;if(g===undefined)g=this.q[c]=0;this.q[c]=\n\
+(this.q[c]+1)%this.b.length;switch(typeof a){case \"number\":break;case \"object\":if(b===undefined)for(c=b=0;c<a.length;c++)for(e=a[c];e>0;){b++;e>>>=1}this.b[g].update([d,this.J++,2,b,f,a.length].concat(a));break;case \"string\":if(b===undefined)b=a.length;this.b[g].update([d,this.J++,3,b,f,a.length]);this.b[g].update(a);break;default:throw new sjcl.exception.bug(\"random: addEntropy only supports number, array or string\");}this.j[g]+=b;this.f+=b;if(h===0){this.isReady()!==0&&this.K(\"seeded\",Math.max(this.g,\n\
+this.f));this.K(\"progress\",this.getProgress())}},isReady:function(a){a=this.B[a!==undefined?a:this.t];return this.g&&this.g>=a?this.j[0]>80&&(new Date).valueOf()>this.O?3:1:this.f>=a?2:0},getProgress:function(a){a=this.B[a?a:this.t];return this.g>=a?1[\"0\"]:this.f>a?1[\"0\"]:this.f/a},startCollectors:function(){if(!this.m){if(window.addEventListener){window.addEventListener(\"load\",this.o,false);window.addEventListener(\"mousemove\",this.p,false)}else if(document.attachEvent){document.attachEvent(\"onload\",\n\
+this.o);document.attachEvent(\"onmousemove\",this.p)}else throw new sjcl.exception.bug(\"can't attach event\");this.m=true}},stopCollectors:function(){if(this.m){if(window.removeEventListener){window.removeEventListener(\"load\",this.o);window.removeEventListener(\"mousemove\",this.p)}else if(window.detachEvent){window.detachEvent(\"onload\",this.o);window.detachEvent(\"onmousemove\",this.p)}this.m=false}},addEventListener:function(a,b){this.r[a][this.Q++]=b},removeEventListener:function(a,b){var c;a=this.r[a];\n\
+var d=[];for(c in a)a.hasOwnProperty[c]&&a[c]===b&&d.push(c);for(b=0;b<d.length;b++){c=d[b];delete a[c]}},b:[new sjcl.hash.sha256],j:[0],z:0,q:{},J:0,F:{},R:0,g:0,f:0,O:0,a:[0,0,0,0,0,0,0,0],d:[0,0,0,0],s:undefined,t:6,m:false,r:{progress:{},seeded:{}},Q:0,B:[0,48,64,96,128,192,0x100,384,512,768,1024],u:function(){for(var a=0;a<4;a++){this.d[a]=this.d[a]+1|0;if(this.d[a])break}return this.s.encrypt(this.d)},L:function(){this.a=this.u().concat(this.u());this.s=new sjcl.cipher.aes(this.a)},T:function(a){this.a=\n\
+sjcl.hash.sha256.hash(this.a.concat(a));this.s=new sjcl.cipher.aes(this.a);for(a=0;a<4;a++){this.d[a]=this.d[a]+1|0;if(this.d[a])break}},U:function(a){var b=[],c=0,d;this.O=b[0]=(new Date).valueOf()+3E4;for(d=0;d<16;d++)b.push(Math.random()*0x100000000|0);for(d=0;d<this.b.length;d++){b=b.concat(this.b[d].finalize());c+=this.j[d];this.j[d]=0;if(!a&&this.z&1<<d)break}if(this.z>=1<<this.b.length){this.b.push(new sjcl.hash.sha256);this.j.push(0)}this.f-=c;if(c>this.g)this.g=c;this.z++;this.T(b)},p:function(a){sjcl.random.addEntropy([a.x||\n\
+a.clientX||a.offsetX,a.y||a.clientY||a.offsetY],2,\"mouse\")},o:function(){sjcl.random.addEntropy(new Date,2,\"loadtime\")},K:function(a,b){var c;a=sjcl.random.r[a];var d=[];for(c in a)a.hasOwnProperty(c)&&d.push(a[c]);for(c=0;c<d.length;c++)d[c](b)}};\n\
+sjcl.json={defaults:{v:1,iter:1E3,ks:128,ts:64,mode:\"ccm\",adata:\"\",cipher:\"aes\"},encrypt:function(a,b,c,d){c=c||{};d=d||{};var e=sjcl.json,f=e.c({iv:sjcl.random.randomWords(4,0)},e.defaults);e.c(f,c);if(typeof f.salt===\"string\")f.salt=sjcl.codec.base64.toBits(f.salt);if(typeof f.iv===\"string\")f.iv=sjcl.codec.base64.toBits(f.iv);if(!sjcl.mode[f.mode]||!sjcl.cipher[f.cipher]||typeof a===\"string\"&&f.iter<=100||f.ts!==64&&f.ts!==96&&f.ts!==128||f.ks!==128&&f.ks!==192&&f.ks!==0x100||f.iv.length<2||f.iv.length>\n\
+4)throw new sjcl.exception.invalid(\"json encrypt: invalid parameters\");if(typeof a===\"string\"){c=sjcl.misc.cachedPbkdf2(a,f);a=c.key.slice(0,f.ks/32);f.salt=c.salt}if(typeof b===\"string\")b=sjcl.codec.utf8String.toBits(b);c=new sjcl.cipher[f.cipher](a);e.c(d,f);d.key=a;f.ct=sjcl.mode[f.mode].encrypt(c,b,f.iv,f.adata,f.tag);return e.encode(e.V(f,e.defaults))},decrypt:function(a,b,c,d){c=c||{};d=d||{};var e=sjcl.json;b=e.c(e.c(e.c({},e.defaults),e.decode(b)),c,true);if(typeof b.salt===\"string\")b.salt=\n\
+sjcl.codec.base64.toBits(b.salt);if(typeof b.iv===\"string\")b.iv=sjcl.codec.base64.toBits(b.iv);if(!sjcl.mode[b.mode]||!sjcl.cipher[b.cipher]||typeof a===\"string\"&&b.iter<=100||b.ts!==64&&b.ts!==96&&b.ts!==128||b.ks!==128&&b.ks!==192&&b.ks!==0x100||!b.iv||b.iv.length<2||b.iv.length>4)throw new sjcl.exception.invalid(\"json decrypt: invalid parameters\");if(typeof a===\"string\"){c=sjcl.misc.cachedPbkdf2(a,b);a=c.key.slice(0,b.ks/32);b.salt=c.salt}c=new sjcl.cipher[b.cipher](a);c=sjcl.mode[b.mode].decrypt(c,\n\
+b.ct,b.iv,b.adata,b.tag);e.c(d,b);d.key=a;return sjcl.codec.utf8String.fromBits(c)},encode:function(a){var b,c=\"{\",d=\"\";for(b in a)if(a.hasOwnProperty(b)){if(!b.match(/^[a-z0-9]+$/i))throw new sjcl.exception.invalid(\"json encode: invalid property name\");c+=d+b+\":\";d=\",\";switch(typeof a[b]){case \"number\":case \"boolean\":c+=a[b];break;case \"string\":c+='\"'+escape(a[b])+'\"';break;case \"object\":c+='\"'+sjcl.codec.base64.fromBits(a[b],1)+'\"';break;default:throw new sjcl.exception.bug(\"json encode: unsupported type\");\n\
+}}return c+\"}\"},decode:function(a){a=a.replace(/\\s/g,\"\");if(!a.match(/^\\{.*\\}$/))throw new sjcl.exception.invalid(\"json decode: this isn't json!\");a=a.replace(/^\\{|\\}$/g,\"\").split(/,/);var b={},c,d;for(c=0;c<a.length;c++){if(!(d=a[c].match(/^([a-z][a-z0-9]*):(?:(\\d+)|\"([a-z0-9+\\/%*_.@=\\-]*)\")$/i)))throw new sjcl.exception.invalid(\"json decode: this isn't json!\");b[d[1]]=d[2]?parseInt(d[2],10):d[1].match(/^(ct|salt|iv)$/)?sjcl.codec.base64.toBits(d[3]):unescape(d[3])}return b},c:function(a,b,c){if(a===\n\
+undefined)a={};if(b===undefined)return a;var d;for(d in b)if(b.hasOwnProperty(d)){if(c&&a[d]!==undefined&&a[d]!==b[d])throw new sjcl.exception.invalid(\"required parameter overridden\");a[d]=b[d]}return a},V:function(a,b){var c={},d;for(d in a)if(a.hasOwnProperty(d)&&a[d]!==b[d])c[d]=a[d];return c},W:function(a,b){var c={},d;for(d=0;d<b.length;d++)if(a[b[d]]!==undefined)c[b[d]]=a[b[d]];return c}};sjcl.encrypt=sjcl.json.encrypt;sjcl.decrypt=sjcl.json.decrypt;sjcl.misc.S={};\n\
+sjcl.misc.cachedPbkdf2=function(a,b){var c=sjcl.misc.S,d;b=b||{};d=b.iter||1E3;c=c[a]=c[a]||{};d=c[d]=c[d]||{firstSalt:b.salt&&b.salt.length?b.salt.slice(0):sjcl.random.randomWords(2,0)};c=b.salt===undefined?d.firstSalt:b.salt;d[c]=d[c]||sjcl.misc.pbkdf2(a,c,b.iter);return{key:d[c].slice(0),salt:c.slice(0)}};\n\
+\n\
+\n\
+var browserUtil = {\n\
+ isRhino: true,\n\
+ \n\
+ pauseAndThen: function (cb) { cb(); },\n\
+ \n\
+ cpsIterate: function (f, start, end, pause, callback) {\n\
+ function go() {\n\
+ var called = false;\n\
+ if (start >= end) {\n\
+ callback && callback();\n\
+ } else {\n\
+ f(start, function () {\n\
+ if (!called) { called = true; start++; go(); }\n\
+ });\n\
+ }\n\
+ }\n\
+ go (start);\n\
+ },\n\
+ \n\
+ cpsMap: function (map, list, pause, callback) {\n\
+ browserUtil.cpsIterate(function (i, cb) { map(list[i], i, list.length, cb); },\n\
+ 0, list.length, pause, callback);\n\
+ },\n\
+\n\
+ loadScripts: function(scriptNames, callback) {\n\
+ for (i=0; i<scriptNames.length; i++) {\n\
+ load(scriptNames[i]);\n\
+ callback && callback();\n\
+ }\n\
+ },\n\
+ \n\
+ write: function(type, message) {\n\
+ print(message);\n\
+ return { update: function (type2, message2) {\n\
+ if (type2 === 'pass') { print(\" + \" + message2); }\n\
+ else if (type2 === 'unimplemented') { print(\" ? \" + message2); }\n\
+ else { print(\" - \" + message2); }\n\
+ }};\n\
+ },\n\
+ \n\
+ writeNewline: function () { print(\"\"); },\n\
+ \n\
+ status: function(message) {}\n\
+};\n\
+\n\
+sjcl.test = { vector: {}, all: {} };\n\
+\n\
+/* A bit of a hack. Because sjcl.test will be reloaded several times\n\
+ * for different variants of sjcl, but browserUtils will not, this\n\
+ * variable keeps a permanent record of whether anything has failed.\n\
+ */\n\
+if (typeof browserUtil.allPassed === 'undefined') {\n\
+ browserUtil.allPassed = true;\n\
+}\n\
+\n\
+sjcl.test.TestCase = function(name, doRun) {\n\
+ this.doRun = doRun;\n\
+ this.name = name;\n\
+ this.passes = 0;\n\
+ this.failures = 0;\n\
+ this.isUnimplemented = false;\n\
+ sjcl.test.all[name] = this;\n\
+};\n\
+\n\
+sjcl.test.TestCase.prototype = {\n\
+ /** Pass some subtest of this test */\n\
+ pass: function () { this.passes ++; },\n\
+ \n\
+ /** Fail some subtest of this test */\n\
+ fail: function (message) {\n\
+ if (message !== undefined) {\n\
+ this.log(\"fail\", \"*** FAIL *** \" + this.name + \": \" + message);\n\
+ } else {\n\
+ this.log(\"fail\", \"*** FAIL *** \" + this.name);\n\
+ }\n\
+ this.failures ++;\n\
+ browserUtil.allPassed = false;\n\
+ },\n\
+ \n\
+ unimplemented: function() {\n\
+ this.isUnimplemented = true;\n\
+ },\n\
+ \n\
+ /** Log a message to the console */\n\
+ log: browserUtil.write,\n\
+ \n\
+ /** Require that the first argument is true; otherwise fail with the given message */\n\
+ require: function (bool, message) {\n\
+ if (bool) {\n\
+ this.pass();\n\
+ } else if (message !== undefined) {\n\
+ this.fail(message);\n\
+ } else {\n\
+ this.fail(\"requirement failed\");\n\
+ }\n\
+ },\n\
+\n\
+ /** Pause and then take the specified action. */\n\
+ pauseAndThen: browserUtil.pauseAndThen,\n\
+ \n\
+ /** Continuation-passing-style iteration */\n\
+ cpsIterate: browserUtil.cpsIterate,\n\
+ \n\
+ /** Continuation-passing-style iteration */\n\
+ cpsMap: browserUtil.cpsMap,\n\
+\n\
+ /** Report the results of this test. */\n\
+ report: function (repo) {\n\
+ var t = (new Date()).valueOf() - this.startTime;\n\
+ if (this.failures !== 0) {\n\
+ repo.update(\"fail\", \"failed \" + this.failures + \" / \" +\n\
+ (this.passes + this.failures) + \" tests. (\" + t + \" ms)\");\n\
+ } else if (this.passes === 1) {\n\
+ repo.update(\"pass\", \"passed. (\" + t + \" ms)\");\n\
+ } else if (this.isUnimplemented) {\n\
+ repo.update(\"unimplemented\", \"unimplemented\");\n\
+ } else {\n\
+ repo.update(\"pass\", \"passed all \" + this.passes + \" tests. (\" + t + \" ms)\");\n\
+ }\n\
+ browserUtil.writeNewline();\n\
+ },\n\
+ \n\
+\n\
+ /** Run the test. */\n\
+ run: function (ntests, i, cb) {\n\
+ var thiz = this;\n\
+ this.startTime = (new Date()).valueOf();\n\
+ this.pauseAndThen(function () {\n\
+ thiz.doRun(function () {\n\
+ cb && cb();\n\
+ })\n\
+ });\n\
+ }\n\
+};\n\
+\n\
+// pass a list of tests to run, or pass nothing and it will run them all\n\
+sjcl.test.run = function (tests, callback) {\n\
+ var t;\n\
+ \n\
+ if (tests === undefined || tests.length == 0) {\n\
+ tests = [];\n\
+ for (t in sjcl.test.all) {\n\
+ if (sjcl.test.all.hasOwnProperty(t)) {\n\
+ tests.push(t);\n\
+ }\n\
+ }\n\
+ }\n\
+ \n\
+ browserUtil.cpsMap(function (t, i, n, cb) {\n\
+ sjcl.test.all[tests[i]].run(n, i+1, cb);\n\
+ }, tests, true, callback);\n\
+};\n\
+\n\
+/* Several test scripts rely on sjcl.codec.hex to parse their test\n\
+ * vectors, but we are not guaranteed that sjcl.codec.hex is\n\
+ * implemented.\n\
+ */\n\
+sjcl.codec = sjcl.codec || {};\n\
+sjcl.codec.hex = sjcl.codec.hex ||\n\
+{\n\
+ fromBits: function (arr) {\n\
+ var out = \"\", i, x;\n\
+ for (i=0; i<arr.length; i++) {\n\
+ out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);\n\
+ }\n\
+ return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, \"$1 \");\n\
+ },\n\
+ toBits: function (str) {\n\
+ var i, out=[], len;\n\
+ str = str.replace(/\\s|0x/g, \"\");\n\
+ len = str.length;\n\
+ str = str + \"00000000\";\n\
+ for (i=0; i<str.length; i+=8) {\n\
+ out.push(parseInt(str.substr(i,8),16)^0);\n\
+ }\n\
+ return sjcl.bitArray.clamp(out, len*4);\n\
+ }\n\
+};\n\
+\n\
+\n\
+/* Emily generated this file. I don't know how.\n\
+ * It's kind of incomplete. It only tests tag length = 8, iv length = 8 or 12.\n\
+ */\n\
+sjcl.test.vector.ccm = [\n\
+{ key: \"b058d2931f46abb2a6062abcddf61d75\", \n\
+ iv: \"ed77b0e43daccec06c41f472\", \n\
+ pt: \"849c27d7333fe9fb769725b0f29a6b0d977e504976d709b8b6ef542e455504a20243e9ff2ea72da8ab709f983f85349f0ccb63a3c3d70225b8c06305592487193b8599c4aeeecc513d9f71bce28fa0f3a9ba5b310fed302a360b73e7a546793f1dd7b17c1dfcb6348c1f2dfe86dab6\", \n\
+ adata: \"a7e0f806e4ff0829b0fd8142f8aa26d5a1a1c34cde7e23d65b43cbc3a3cd692bf5817f68756bd46b78cef34903879c7d5929e94b4b3470564f4480315496bf0f2d66358a0ad1e4a2dca7f807c0bb747ca11266f04ec01dc631cbe7019ea8479bb41f23c575008ce54b841066d72806fc0cfa88905ef1444d02ecccbcec53f04ef65fdd42\", \n\
+ ct: \"9f14fa396445bf0e206b123e090edf1c41c6ee6b85ec9963721075b9261006b83a68c3179e2824d45ad4a10e0cd44a66b9c4c12c57424a2dff701eac89d968a64b3b221864a163cc9425ee687bdb283c0b9931b5abde531a6e43737ddea7f715779a8ec15ff06808eb54f0e538c5ef\", \n\
+ tag: \"8f27c1985372e9db7477be389e701c26\"\n\
+},\n\
+{ key: \"76913a2c23ecde49fe994d9d0916488a\", \n\
+ iv: \"cebfa37c55b7b378\", \n\
+ pt: \"803c56f2397c4250c90c9722133781e5b8ebf5997cb01c70b157bd4ff83c519edd13c020adea8c519f36cf5133c79565aafe5922aefb74ede1ef8cc985\", \n\
+ adata: \"598bb9d13392623064a19cf5812c207c47fed14c1c0bc913806b603a5426ee930d0f7d766b098b4175074802799b3e396ae1\", \n\
+ ct: \"096e3a778050bb9fb40fc596e4e8b22f9b51056aad7f624f324946bec90e558e89c5da8332b1639dc3ed56a30ca895827d2254d9679f309ae05805ca46\", \n\
+ tag: \"18c15e5c5c9dac4d16f9311a92bb8331\"\n\
+},\n\
+{ key: \"dc0dd104000e11fe11418e3fbf79efa6\", \n\
+ iv: \"56832be3131809aefd05b162\", \n\
+ pt: \"117fc55d618f2d97920600e606ef51d2bca851efca396c1a7153142dc5645210c634aae95de3a049ae6097459f45923d30281bfa5dbc8b84861da5e5f122557c701ecdbd6e9cba5b02947750069ee29f19a055438fde6ade9ebc36a7ac92d80d408abfd5c7695f1db5e7aa37d5e2dd40c9b775\", \n\
+ adata: \"3a8a94fa6312e080ffe1920719d0e5d616d1\", \n\
+ ct: \"a830e76f8becfea6bf6fb81d91a11f2f89843b6f57d6a6d5160ef4a576c610a1d4e91722b962672503c36a710c5966f911949e8b5c353973a7e9498304569674317ad34acb753cc2e6c8b763a946541176aae77390586403e5821d17908272b7cec98165b5b28f8918bad713dc99e74ee7a7fb\", \n\
+ tag: \"5b01223877855fc1608534e66425759f\"\n\
+},\n\
+{ key: \"3f8e92ec57c05c27a6c1d8374b26cbff\", \n\
+ iv: \"56d56bd8bd3c2211458ed96c\", \n\
+ pt: \"3edfcd3729c9b01667687c6f5203c6c4a753966eee3b29344fec47995a3793e0bae09389def1117da88d164fb3dd984dd244a7bb78d3332b501f16a1b65bd65773cece6aa434988981d55ac4a80b3404b87447bd7437d6dd62a99defdf366de63cc7da5b05\", \n\
+ adata: \"\", \n\
+ ct: \"540ed4a1eaf23b7b1b87e9dc8b9c96135b99e45147c919c45aecc0323b7a41179454d6e704671a77c37dc6ebd1b20a644135c0d16f1443aa67667d2cbaead3483856d299a0021b7db598c1d053c1b19e446cd3d90aa2db2871ee8397ec05805d2343404ef5\", \n\
+ tag: \"e6b41ccae9b8dbd16cdde8424df5960f\"\n\
+},\n\
+{ key: \"fa99cbf6105ae39b594aa4adb6e94b21\", \n\
+ iv: \"0eaa5a3b2fe22e795f99422b\", \n\
+ pt: \"1be4af9f0ad57423d6fa4bc5cdf6071341062d1d60782c60ecaf2d5490f090ce3501c8acee2679cb700f93304b377824ffc4a945d73545dc8f7869eef536aad06d4e4bd8c85628a5b6bdac50f31b045668382cf012c152c1fb4a51f880eaddb457eeb7ade98c0be3685625d081386084e322e9203fae7e35a43542c65d11c1ab60a369cb3e9489e79141aac6adc36bceb00fa4b33c05a7e171437205d247c2ed755b064737dc1b03d27246b9bee230\", \n\
+ adata: \"4df4cb4bc5d947487e685490a7ee5dfdab55211035bc8537f172cde808bb7d691fc05634613473395c8d890b3fbeaa609b77b9bf2d405bce8fd1a725e36342190607b6b36e7b6d50775a3b9fdf23ddf0340e44eb4536df3642e3bf87bda3ccbeb27cabbae5c2a3c021dd0f6e9056d9b4be948f4190f7a130c1a64813618fc7bb42ae3570\", \n\
+ ct: \"6bd3af8afc802252b76bd1ca85c204008435d6ae598245944613ce64f918f0808f2df1db854af77921ca5eeba8cfbc174359019df14c6ee6c0378f6db045c055b81173f0546fc1d884ff56c04b4f3a92b33660f1f851fb657e1947aaee4387e531782404cebef95102246e5566141f421824e5411a1aa9203d70cde3250a39777b9ee478f59a758a0d008212f9eb17c92f046f006de1e31aa529b8dfce3e19addd7074c69ec1a18d64e91413cb77b5\", \n\
+ tag: \"9f7e906f519e2a7bd484304b33aa9fcf\"\n\
+},\n\
+{ key: \"d3c34d5fd2a5528c4f9d263eca8dd51c\", \n\
+ iv: \"65c25cc9007be33bd3c25272\", \n\
+ pt: \"e454e30bce79d861fe4e39947c93592e1d082f8d5261fac3a395d7fa056b4f6c8df183502268abe911d2b8919bb61d33161fa898bc5b51c565644b9536df79c5ced0f7d5ff289c768654cb00d1fbc4e5ffe4cebe338ac2eee364a8627d28483a4e8c965d4a45b2b4308395dd984e2ce7c71edf44a496f110e95cd82508bc59522f61093b9850268199c66e699575bae0c2bb91b2077c5ad0cad10e5e3e25108498b685\", \n\
+ adata: \"55548fea7d9ff16ccf3e30eb98633f26d4ca431f07248a891318fe1713b2c1105c362ba676fcb91421f6f9e597074eb9ec1261\", \n\
+ ct: \"d1571e57756ce8b2bbae50493dfd77b31a86d0657609d0fac173153985eb03afb343162885a8bf3cded582e75af234f2b9be44e9a266dac02e08212fc79d7a4225bfd10d17d4029a72186f842b5ff49a6eb3ee03d2f596344a2b9ab27d110f681f74d27cff0786689609338a8d78be4e9ab264a8b7375adbf05338819b2291d8dfc8fbfacf0fee2013128e63eb3dc29b45a8252d81fafd4f0fe61ceb558d3e57aae15b\", \n\
+ tag: \"75b45d9c7ede4319c6800a4d68bb7255\"\n\
+},\n\
+{ key: \"2840320c59b27e8a56f13282ab62fa8c\", \n\
+ iv: \"ff7ddfbb18cc8a439de36b33\", \n\
+ pt: \"e6bd88b947d7d047d73874fcd1a0b9cb6923533ae3f51c42cd244d427a3c2bd72fdf35ea87c77ed37476b02d31a6ca25546cf77e069a277218357f87380bf0bb127930ec24d7e2fc3126accb72ccbab39a5b6b853c79a8f623c08d37038e91a584fc5bdc14ab9485206d09b821c3a940c9f7e320ba7388c6c8956e2f65b965c833f933abe63663ec5a03372afe5576fd50b4bd32c6b5937f5a91e0d5923dfc91b3b0\", \n\
+ adata: \"2fe766457da565d8824137dd8a7c7c02\", \n\
+ ct: \"0603e88057f8705895755989d9c2d27fb670809fe395b4c6ff6b0ce50814d937a2ef7c5961e22b0639b7886a87cad2ebd20fa87de227422f7c2c81136f5b365bc7894db851de9b640ea08f9d9ef02e0d697c96c1b59e8247bee339dcbfd4e302c6489e629df6eafccae15cc0738e7c4854e3909ecd08c6526f78ec0de9e3a730993643f531022c80a467f3576015bdcf681679a4d98b9632b498d54ef958d498ea0a\", \n\
+ tag: \"2380332f70e0a1aed293b4098fadcdc1\"\n\
+},\n\
+{ key: \"45062fbaa405d0e02111ed91dcf85f00\", \n\
+ iv: \"839c9a72121477593ff26860\", \n\
+ pt: \"3552b5ed89942978dbacd699cc1a6655c2c5c24291ffadc9d66ff3f609959e696dffb41c4920535ec30ce3d7c93483ed42f08041a4acc67c6e3074c6cfec10dedf8410cbcad3fc61383b126e31f0ab82b4c4bdfff2fda8d0a6bf392c7144c5352f6558da9ebbef00ed9c5035037aa709f98221f97351d3881acc682ff49ab6541c9f993c34e21145589eaa\", \n\
+ adata: \"cf77164db7e8fedfce7bd73ffc2fec81c63d6575a80c2807dfd610c9415f93ea8be42ea9183f796a9bf320fa843ef209957e0bb3c10514cbfdef9ea6e3862f84736416137686c431770d6014b01a2ebb855ebf0f4785b0f2205456d146b094fd8315cdcccee78b04f1a3c6a550e85f839a8976246cbf1b7ddf2dccbf603c56a195ad471ca7af4fcbbca6e8d9790df660663ca205\", \n\
+ ct: \"69be8c33d1d5cf94dc0b99a8187100eeb045f0c20830917ce9b49bb04aacdc58bc75394fe8d45766a884facb836b0b7ec720794bea7082646df480115da019af36b7617aa8da984726dd83d5ace1c58f7a21a6c7f80b21711da43c7fc1f54fe9bc9412152b44fcb1a4a6373b0ea61cbb54df911928e00b63f00e94200480871c35aa6f014b75320abafb82\", \n\
+ tag: \"397461a1e95d537f0b1552e0cd991309\"\n\
+},\n\
+{ key: \"d80cef2a9d71d77fa35f1c2e6be6761e\", \n\
+ iv: \"7378cc4089085c8b6541ef7b\", \n\
+ pt: \"fec40c0275b623c7b7ea3ec7fe6130cde89412f5136514db74f68b4ab85508d4b16f8af9e7ae08873e4cc6d66db331f5bc3508cee376ae1b997b75eb0c846c2b9580a10c84b2d5b8d566e73198eecb7d4b6d8b3709e0f9babde328603d0cf88346f5ba50367523139d1f75dbfe\", \n\
+ adata: \"b1e2cbc4adb0fc7fbceff52c41e06cb18d03e94783d55aab6943a94021ddbc2d4dffedb6e225c77a3fca1821bd04c68d52be41b65b39719980e69175a266463eac6e56f1ef5d9672a9784006cec985\", \n\
+ ct: \"29ac685c4767c17d9449b9623d95a7dce60713f18e1feb0c594e48b79abef7aadb225ff417b0c9d25e97afd5a18e584cb66131ebba450aee44d099819655aeff971694da4e633fb9fac36fb7773fc24168ede14c43ec6bf6ab109d3776b068272bc6564245eed9364885683ccd\", \n\
+ tag: \"96c391609cd6940a7cd8060a0fd6b04c\"\n\
+},\n\
+{ key: \"2111652ed02b8c56b86e035989529419\", \n\
+ iv: \"5d15fdee51a8811b43d1146b\", \n\
+ pt: \"60db1050a831aba24186a52ea25cf48b170714a3e000de0245f5e1a8309d0ef9015b26d0b3f9cd8f30ecfb22bcb09499f91e0dbdbde86622f76ba36922abda61ef386a569246fa52fe828cf2a66a75f508913957d62191cfe44f6c4e60241443167b13018cd36fd2caf9960c1b34300c319383e19debeb4dca3e4a8960a516da99cdc75dead2646d0e9ca967de6efa551e81fbf19554672aecd09684f809b42f989c683978f6c6bdd96806bc83438024a156eb7b61108a20\", \n\
+ adata: \"d72fe8f345dffca664fc66d3fd321587a608cf9027ac03d1384cdba369d81ffedd2302cd80e3d37fc608207885b1\", \n\
+ ct: \"1a8ae1f52ac7ca26249e3017d539a38a90b4cb973a219a3b9057aebb461bce32b79245f5976d55272b52181f41bf47cc32646b33ed6362772e197d4096e52888e076ec2187bf2490d008f30282db5d297b1d06e607976138aa9e04dbc167af019d2ac94c8cb4be0a48088c02c99853504367183abe9469eea6ac7051262d999f20f6d1a57fc6e11e7a302c42c6eedd6cd3e6cd02cb45a6d339ffe150fa28bcc74892f99f725609d5c0bb4e910333cd4f7887c536e0256bd0\", \n\
+ tag: \"daadae0e2b2946ca8977de8099fd4ae9\"\n\
+},\n\
+{ key: \"40b9c4f2b53e634612474a238d54ead1\", \n\
+ iv: \"447152c767dd536b\", \n\
+ pt: \"b52bc3eebecfcc28d76caa74087bac078269dcb6fa679a292fb8eeadecffe19919410b85dddb913a9f5c20d0b0a0050c23ec13b5ed8c9fe5de3c32a77607504ac00bc897c7edd09c3f12e1ae379f22785582f891999c78fc1723ad6a74e4e8ba617db0729e1254fbc35f08612976add3e3700bbe7bf080309add\", \n\
+ adata: \"238dd09d69aaa56848cf045aeaa9afc4df39f5db4a4c82c7ce25c925f784d53707d3f7a17363b2cc2c5df9571a723cb7ca419e07bc10d8037ff06eb1f82b16250fce53cd9203c212135e75218ffb215f188ab13f172d314496cf10851109415fb3f75e21195589814ec0d5bc3dbcbbd815c8f81bfaea678fc64575c48f9735d962c7d028394f885b433353967181029e0927f91d4c6c5308caa1e1e4dde4354a774e9d77fd6254e34436a1872911c2350a760448b60383\", \n\
+ ct: \"715b82d1ba2e455b95376f0eb65b5dd70195551c9e87d9717781901b7adf3803a3bdcb9401f50c2301d03950e80957e63978a6d9f0ab8026981016fbba9c4abdb059e8545043c3d279e84c221207a70a6598719c8601d14dd730a5ad6a3594b84e821ae3c0170df9072ba3f1c39c89a73c0ee4502d8082010ecf\", \n\
+ tag: \"8464dbbe9694ad3bf460dfa42ed038e8\"\n\
+},\n\
+{ key: \"919c50f429b55882a134441373405f2a\", \n\
+ iv: \"d037e54e6114e413\", \n\
+ pt: \"1450a9c479ae7658549f9dd18861b324125f2a49c5605ee381ace39818da491acbbc5d9786aaf035cfcad4e78f2c5aa56f61d6b7175446e222b7339d6a1aa186d1bebdb035a6ff2809877801ad3faba95b98b34caa3a03b5900d231476b300ee2c6df792ccd2d726880c89308680eafde46cdea3c31541116f3f372f4594f72f050f1d658631a80a81e56f8a2aa6b4071ed2c1b95ac4b469c29ac2fe95d4854fa5b3a82707f98f46e37f9df88e20d10a7f\", \n\
+ adata: \"ca4a11fe842065f7b68c35e1e93362b4d1a3a463ce5959db92a9d334732cc5da9d9043d32f07137c4149e99f332e609b37c171a61b6742bcd28d51610029a40e1551ec30b27af6cd126c037257cadc9b16d123a63511c63102e9410b1ea85bb005cae0a7f4aa96afd4edd7353244ea551459f067ad4ecf2612981a72fc5bf1ce71734415eb5c950cbba0905c7a2dabf553f3203108c3e2a798ad873d244d016f50c3\", \n\
+ ct: \"620eafca6170e9fcc6f63db185ca1c37cf5821a36524b20f6b152d66133bffe8ce84e7e6441109e12b299c095c3820e79e05303aac6bfd9d6916eb1f0e948d06f2fdcabbab5c83cfa5cbf0391313b734d45a160b5e71e7b79f95ae6fce66ee74cc1cce71b4829d5b17176f7f180e7e37d0cc45a81d69aca7e966a6d9806ae7e243caa5b2d117e9f2a7769dffbd8e1354a803d10eb2aca923225ede7805e466971c31dac6ab59f2a31fb338e0eb7aa8380b\", \n\
+ tag: \"35287120ea19e2a5f93d3a9aa1ac8552\"\n\
+},\n\
+{ key: \"ea1d19e9cb5a9c65b0a267c145e408ef\", \n\
+ iv: \"b58dd504020e2296\", \n\
+ pt: \"db7160bcbe12d01cbca8a28b6b999c556313a0b93481e3955dc5454009217fa9160c9b21dd1c2885f6561c648318ff288603273ff29504615db85d4946c206ad1c40dd708edd55edcf186ba54163ec8c8e850162c8f0b412566fe3214915927b7e9b93edd67b55aaaa347749be736088a6882b6dede727254b5756ffaa9657f7d7f236a1ed87753da7bd0e3edde039c991f5ae867e82c5e8\", \n\
+ adata: \"70c4cdca0604e7674a18a8526c79ff8e93b02fcb2dc70167d375e0ae8c8378898dbf287ec73513769930a0624b2b0c1e0fa9c134d13c50892f7e1ea0dbbed2049a94bf10b34914440d13bc3bfa5c6b3122a7867b4faefe3ab0ccad52d6b46f28ce2c780e65608767cdf95735ce5ac33352b363621d233c893fdd046dc98af34a83466cf493a65a47ddea222f17b6908972408dfbc347989221e0758c46b0d80ef8ca53cfda5234368cef5e9b836aa629d8f67a6a60da73c1\", \n\
+ ct: \"2a51158a686cc7b43362cd5a5f968e24a576939dee2f1bed99057f41cce70e6a83b8c29c72646c2bbd29a2bd6827c69eac59cd1035167e7993448421c802f35b66f6c9ac9b2a156551c3d120214614e53a0bec25ea31555078a3aaf6277cad74381b8c47927fa214da441b78b8e943868b004ae11c6e31da4964710f32820dfdc0ca543c57587f35bfe914792dd1ab132f1afe81be594e25\", \n\
+ tag: \"e04a54a1779994fe4a00cb02b6855958\"\n\
+},\n\
+{ key: \"72d3d7ed4ed4744ee23ab2767f3d259a\", \n\
+ iv: \"799c56ae5071b977\", \n\
+ pt: \"752019020181295baa7c8898ef60cc08af889ca273d3ab68e91eb68a95b20405cfd4da1f5cc7ffac9bec33060b2780993c0c3dfb5770403409599cc6ea8fd97479e4e35f33c296b0a8fa29ec24c5bf1f089617073452adef5798e6237a844840c621c3\", \n\
+ adata: \"1e9d130928b9489da5b71354cb57ca11dd33eb9d276eaaa88fedb7704c79df2c210b02a45b157c22a8539bedde0ebea7bd57975492eb4db6e18b28411979ce28cc99389d9707da261501975f4a0f41876c7160aaac7d6bb5ac0e05fd2970adfddc7104e038f252417ff40a\", \n\
+ ct: \"7c74367a0d19ff526b49b21203c13d9b0af5535cac967335bbd12f8f8ca87c25e8f6ea89afabca074f182752c4c91fe6fb07508ddf0646b18ee2577a7adb13deb8e38b1a9eddcfedbe9931c4ef083f4668eecdda18df949def64dc2ae99799b7fa3404\", \n\
+ tag: \"d061b85f6d29be6a1b6f7eeb93a4e62f\"\n\
+},\n\
+{ key: \"d488d8eea4c9da190d5b0610597ea58d\", \n\
+ iv: \"14e5fac921bd83f6\", \n\
+ pt: \"826236ba\", \n\
+ adata: \"9ecf0c008297b1e57a053555df519f0a870d\", \n\
+ ct: \"666a9ca9\", \n\
+ tag: \"5e32e1e462b80b777de829beee0ec691\"\n\
+},\n\
+{ key: \"c28cf39b00f138af6db240281f942c2f\", \n\
+ iv: \"67b26b0e7ca209a9\", \n\
+ pt: \"3e1dd05f7286df5ccaf34eb3252d7c66f9b020ce67339e2407a9322d1f65ae5cf0dd1c27a04c8efd62969bb510c35d3c46c4990f5c2d3f8129f460c400607151d62f291ffcb7872c83c000b31e2c5c35fef0c587fa23f005e7870cbae090a83dd523a84c1eefd4bd464713e903b3884a24fa7d830ba72ef3cd23ce6e41f19ba0f936370dcb0745f9345dab0d8b266e9658157d59dbdfc9656cb123f0514dae6c5fc4b03b01c7f4d803ccbddb5f75544442\", \n\
+ adata: \"dce41e528118c27fd1a7fa180a586dc16a88ad60b7fc6eef\", \n\
+ ct: \"a2883cc44c0a091e2b151774168ef4c1c52c030d11b4cecc9d6cd6eb1ef55f568782999c6bb6d11c78edd616b1264d4980ed2c33626064f82362f8774cea196afa430c6522f2d47ee3e1cf44f1bf7a56cb733bcd8920eb02641584125c2af0b300788ded063b8fa3e7840353a931a9efae50a40a523d93a3628ac0151fd6bd0bf23fddc5781bb56f7baddcb200d4c5a84225e9b1374a750f481170864bdfe916f96592499b7755d203e6239e753f18b9cb\", \n\
+ tag: \"225da90f494bc454811c6b234e2e7222\"\n\
+},\n\
+{ key: \"361483a87fd615060f6fd6e6d281a8a1\", \n\
+ iv: \"3fcc9ad524d64b92\", \n\
+ pt: \"c248eeca3ecb24b601d99662f72d4411a7e1596d5dae64ca6ec6e00d95a309e0329a7d2d330fad3854db3e805e82aee3264f5756f7ceb1c6251222b998b0f364cb1a5ce5cb73f727d85660172afb6c1ad7a8842422b8995b838ee6cf833622ff64fed8c4becfbeee929297471ed429a8ea4d8650f2e0cace58b7d8a14ab1275a25d6cacda6d9d0e740ddefe1cd9f0885c38c366d5f6f731c74db9035c94a4da891f2b9b857b7c7e6cf67d5701faa5db51549d7\", \n\
+ adata: \"\", \n\
+ ct: \"0ced5cf29bc5fe7d249268508cfa66f5ad491fe93dfa149fb5879496753c9d53a50e05c9916ca87fa252b0f0ddd5b750c318ba6b2e801ff5147e8e6cc68c2a6ba0bf363f0f77bdafbdad4d72b01ff9ceb5266e62c0e94a6d8fe8359f662bc3c89c1e46b4c23837ef44cf54aff83bd6b27d88286bdaa9ddb3f9551916df7aa2f7bbca4e092b860eee9c9157d9a27d622a69ad9e45f6c5f6ee83ad7f3e53c1fcfcb777e7bafa91cb9f73c3cdad9996158bb5bae0\", \n\
+ tag: \"18eb220231e5e826c335267c8236e2b0\"\n\
+},\n\
+{ key: \"b594137fb62fba66426928711e0caa9c\", \n\
+ iv: \"a60244ba0399ebf3\", \n\
+ pt: \"81467508a00b\", \n\
+ adata: \"5f66d33bd16aebd4f43966d4dd17bf70a14f1b15748f08980fe22ef362b09c6b3c0c1d6c65573f2797c26be5038322b10824762e3d470141c936a645846d54f54bb4b2\", \n\
+ ct: \"2c5d8a275bf7\", \n\
+ tag: \"2df3b7c6ee29c0a5b35278e35272dca4\"\n\
+},\n\
+{ key: \"0e7aab3f0a936209a3239d34e5c9e26e\", \n\
+ iv: \"90d454935a5a49de\", \n\
+ pt: \"97d82d079c3e656d54f1b9f345922816d3e97a11902421a9ab13d35ae432df8cf81d55a6067f9a2694162804ff93efa19d462fd227f28c579c73f7537b6af486caf5152a939a7288a09c1d6d40125575f5359f06725148e228ac63951b8f52330b708bfd48f5639e7b9e79ded17b15ab08dfd227614f629053558b96d23a2dc85f730611607d3365b17ba448c5704ca87f47126d08f77814ff8af336c3935ad6adec6450a26764d8a142\", \n\
+ adata: \"51749d3e8a5fb85d98eb8c52660a6febcf8133c0b93915ee823ef6c9ce597a084ff2f26d05431f046f454a4c4c1c353d6ee068e6f39841ad30b253342eebe608bef53be887a5a5453c5a165e7889271801e327e804aaea81d4664062cc5597\", \n\
+ ct: \"9ba759633d4b7572d7f3462d264a8406c35698f9b36153e9b5999926030f35a184560ac5502832606dacb4609e26cd300d3b715c7b7eefa819c27ad36ab70feff968c00d7e43243f8f65bb17d070fe4d7149ac74f340597af305aaf32071b8433f55ad99442ecee08d2dd306e6d446e4c8448fd99cd24449a3c2139a4cfa67769a2229a82a4a5fe2842b46fdc3d0b3333a6c001aba68988090b605f2d03300294d9e8cf8e657d616f141\", \n\
+ tag: \"fe283d7d54f3bf55fe755fea0d483bf8\"\n\
+},\n\
+{ key: \"f72d259db9ab22ee7a47faed2d820f84\", \n\
+ iv: \"9f1520e21a6e1fc8\", \n\
+ pt: \"4a4c\", \n\
+ adata: \"82cbf5143999282469ac8b872eea5deb5910324230c8d366cab1a0c429679b2c1e32b9192040e455342227b5a4c0997e5b488b8aa825d3dd0aaaafb2b5fd03f4bdea8d144e946c2a063e2ee3b247173d7787b33988db7ab4318edf27cfe7e8cc29dd91df5fe37f81cf589a1c7ea91483096794468a509b1fea5a495c337f80f182614d385a8e05e7e5e27974c1d1ab11e962d6e0c08c\", \n\
+ ct: \"80a7\", \n\
+ tag: \"83ad3091b7d4e030a4fe328899392ede\"\n\
+},\n\
+{ key: \"2308daddc31083425206695bdca105e2\", \n\
+ iv: \"239ccb5fe2d6839d103b317e\", \n\
+ pt: \"d83fa0256c3e222236f8fa272299f5579acbc148cc7f60de3047505b8c5df9f4574f1d4255fd1781d014709225f66c6a3944f895ff86ca84fdca6fb666a27a20b206c7ab955f142a6121da5ce48402318ffa433df553f0dcc3e1e8f29c6a4803716c05c156eb28a34f6d866c6beb7dff7cf354cef8046c8c3679189b7a0e306edeba1fcec9695c45787133d024149797ef91db3a4d13e802e5fedda1c273a190de555d5a4070b8242d875bde98141038eadad83d6128a6a43f56\", \n\
+ adata: \"8c93690bc31d317fea23f082a7078755acf81546\", \n\
+ ct: \"4733fea72ce3c87bd55fb0c50b4121d06c29565fe17d356965d448d726e93baa652dbba81ebd8a34fb46a98f7a72354679d8d26aa1a99292b970b39c81e4d991775d038cef3b628a1d77b3a4b2bb62a55b95c6efb9a8db0d59703a12ec9e88e16e960b48e5c9ca6546d920a5dc04eb273528244a4cde831093888b81f8535a838976ee9ca3c01cc7c300da922ddcc76fc906c822db32fb88bf02d6ab0d0f558be625ad29374fbaa77dddb45f82acbe7703ea3bff6a7dbd89922c\", \n\
+ tag: \"47cacedef590be985ca5b56885f7f46d\"\n\
+},\n\
+{ key: \"9d65aa544e3d2e02176626376a4c8a33\", \n\
+ iv: \"3b5e604faa3ee3d9\", \n\
+ pt: \"c21f49cc96e4744ae72ad392fd8cc1d1f8764220fc282480d52c2c53efdf2d9f1d7957ee32b22cde13ccdc06e846bbb4\", \n\
+ adata: \"5957a5543f9185d0e4e1630349706bc76ce74182a8b7ae8719f9e9165d785e9adc587669fa155c82499e019b7068f72ba72c16040a7c05fe3e815bf66cdcbaae5562c760e1e288caee864c8a152e2e17dd6b7218c0711df2b602\", \n\
+ ct: \"10e004a5e52c8c7778d3826a4dfa80e6dca2c666b94e7d1a8f9a94c120f24a456db40dfb3758acc7cc95c666aba1c363\", \n\
+ tag: \"d652d21bbe98868d6894caee4c814344\"\n\
+},\n\
+{ key: \"9d3bb4dd8010c41cb2c903aa8992c2f4\", \n\
+ iv: \"a7fac75980668f86\", \n\
+ pt: \"6fd6ab2d07ab9f0e3ac2110a4caaf37688b7287ff34e14a9dd0e48c7288d5767fe15db14c3cd71090873810bbc77b5b5c263ee8587a5c43ba070f5e10fd2d3c7c12a01156bacffd353425ba1919ed81a03d10f5a11b47abcc8243b1056bf05b54962e52e4b73a380db80dd1a86917d1ba441d81498fba3b782a9ba\", \n\
+ adata: \"2330685eded1867ef10d0e32adcd454e316fd771db6af7f214de968875cf964e14f571cf3fbfd82921343e5781da6966a06a81ce5bfbb6d09a0d73a3a1696ced\", \n\
+ ct: \"0a147e9cf3b1753e94d29408be6ed7f158a061d42dad79f085ca40488c5540e39ed419130e65522404f4560614209950661d7450ef4934215de6e1a15f789dd0294a0156a0791c45350d5a9aa9501701b71c6873af6781935df87047bcd021d924d4d8064f8ba2f1dddddb0df10dbc5d9d09e1ad3e7c664e8de08b\", \n\
+ tag: \"4e1072d70f7e765517d93a63d9e70f8e\"\n\
+},\n\
+{ key: \"a25a16ef038f41c6f5e604f0bec9fadf\", \n\
+ iv: \"9d4826a9daadd751\", \n\
+ pt: \"dc5440889c5942398afe536b8d099781b915b1ec761ead8d7961fdab20a1dee2f86ff816364a0ca315bf06a7f6e9cbd02bb76b9861eeb08477bfb08e1f4934495031d87e7b2e665cbda6b468b8d5e841ec6692e3906e26385002c8d2acfa638a86c842f5bb046b1d59459ce04edabbf662ede069fd2a7351515aa0ed4a06c31159936ef1bc611723a16c81580fac96b179321fa816bc7a09fa08aff941c3a241f7eb7d60256f9f0073144c90e6391b9ba24bae45406bfb\", \n\
+ adata: \"662636b316b256c77fefc6af6d3ce95d76116b262596970fb5856139a064fd7da9d021de0ecb4ab565019abef6cbef41ec762bbb6bbddefc45027e209152a32d61055ff29d52a26b387f1893fa58dc60d9bea7fa150273fb95ee89b943eb35541f96b25315d65a3969ac39a2f11111555ee8d564a86c4eaeedc6c0\", \n\
+ ct: \"21482406b51d8c47d594edd50a92c10f13e1c4f1c0480023b4d58799593e0619a3fd9849748713cdcbaa57bc7a6c8698264ec6f9ef61e2d17e156d838e29484c4cccc5ed1e3db30249d26879ff90fc311c4296a018fe977f4ac322276ce28fc6c8638591fb60711c9262edb455d0312c3e2b33d2a611a0fef5eb683c8607fae9be32b12c1d3038687146d4ed98de234bfd8d6eadb4c576a259bfa299fcbd164def369fcd8ea502d742090862b4e72aeea87b9f6d65bf8b\", \n\
+ tag: \"f4d1e4bba93bb27458f959b6e957a1b0\"\n\
+},\n\
+{ key: \"5230ef6cc0fe106f5b0987dfb911e706\", \n\
+ iv: \"57becdf7e23bb934\", \n\
+ pt: \"29212929b2b010b8fd45\", \n\
+ adata: \"1e13b1d4d27d5ff4b376ff067c5284decbd0585391f8719d6d8a6c2b18b57be32726b42b9a0909a44af27ebf91fd6f0daf11aa02126bdb499f35b1df7c4095b81f454ada309ad100da4d04b9be1889a24a7b3ce71b207853608f07589f3f2b6f4cea30d64172bf940f21873239ff552217b206dbabe7aecbe7fe587535af4d2e8e52ec5bee3db4219a931d8781cf834e4678c0d663f0c4067f83c4\", \n\
+ ct: \"e4e823b4dfcf0de52280\", \n\
+ tag: \"fd3ad26b39fec9f94b0f8b03b47357ed\"\n\
+},\n\
+{ key: \"757f4f73c219f3ac1a2c6e29d4dfec20\", \n\
+ iv: \"057f20b6acc68506\", \n\
+ pt: \"be4e2c04db84ccaebd75415155bb2438f37d6d5c78082948920f0b0d02396be15d1409644ae549ed50d98634b635c20c5a6b0bd1510cd83832663b9c0f7e8584b8d10da5f4b052bf670eb26ee3143fab8632c24bd6f3cf43ba39569b42b2e7bb5337f5181c36e5637c38b713a0fc556d8b98f62e\", \n\
+ adata: \"43ae01bd6abc9cba461d8ea90c223df6\", \n\
+ ct: \"0c86c854974e4f81c3984ef9d5ebc338b2920762c83449790be650e8f5564d44c676d487a554bf225267075c45122997ac600c2119d0fdd21d06b544a2d274c2a28d95193f1178fff8a5c4fdaf5bb30f5daac18148a27fc47a0f9aa4828b92797f0a1a66197fbed3293a880481b5faf239856960\", \n\
+ tag: \"ae29ae68a575fa7ace5c5e17ec53842b\"\n\
+},\n\
+{ key: \"433d13e7ff86a242da8e86b20d1f8b80\", \n\
+ iv: \"b73ca9d723577a09e3949102\", \n\
+ pt: \"d2983ee13b9d844282ae71c85f1401f09c6d94689ca734397af070fdec32ef452e3f4e13cb8faa2281d65671c1c0af2b3f435957bce1c82f3a08add5da66104bee31fc30154c1b78968718ff36b26718b27ce1e7c22d25a51efb95ca82374fd90123077d\", \n\
+ adata: \"\", \n\
+ ct: \"198d6cebbf755b40bfed4921f6340f0296a0bea9dea013379c7a4ea7d2f01e3ecb8d9d34c3f2787b533f2e8e045c60fff0e82dfabfa02cb50aaa9bd9dca8839f8bb020666f6211c03339cdabc0355230e67dbef2c4f2ca64a594be82d858e87b53b8bb77\", \n\
+ tag: \"275691f752202bde3ef84804596fae38\"\n\
+},\n\
+{ key: \"1a3be9378180077f80cc60cb10fb4ffc\", \n\
+ iv: \"ce39501437ca9b87\", \n\
+ pt: \"5ff4063654dfd452a35ad5224f86db758a2ede962c7277b48b9b774c5f349a971638cdb2c974d0f3c3a5c2b515767925ad2e42642a696a13b0a0808696fcd559d18f7e7c32d2fd7a5c3497367d5870b2e23caa3cbe843fde633d221cac35999c6d4b0fff507077e6d94b29ab24262be6a9d0bd68800fbeb13dbb545b713cc037904e664927521b075f99ca9cb569e2a61b9d9386ec7fff6706faefcc4d43211816bc122b4d5b9b720ecf71f75abc8ef3\", \n\
+ adata: \"5ec533608c9f4b82ff6e0ac1a746f726fdc75a5bd014d73028af77f5b4bf315e7ed8a0cf5d00dac31d438049848f239638dd31ab084c6f934ce4444722e9d5605f7509f192837613c7de76970c371071a3293ac6cd96e71ff9ae63d57e7bcefe22a3877de08f310c6091c648376660a28678c0ee1c83ebcb5241f2812bc687\", \n\
+ ct: \"4bf1b8e6efca9fc8381d59a0edfca1ac335f1b921dec751231014a86bb53c884f4ab1404805425f1e69cadb902269d58a04a57478c35a160a8f764afe198264d1b2d4d93e8749733e35f5d9a65ec969a36d4fbf85e211b03426d899e4b1c20521cc7a3299c3f2ed5b0aad2fa8d8137b5834004f4e4e13d2165cb7c43739d37ef192a591abe9e1a99733d76a7c9029acd4667ad3583db77874f5991c2b783fec17c64b31c05baec8e1eaf972e61f91980\", \n\
+ tag: \"d5572c2c53e4357dfc3c9c1be050e73b\"\n\
+},\n\
+{ key: \"55a8462682d4e66fe3b468b1c47de768\", \n\
+ iv: \"e40a8c639197ebc7\", \n\
+ pt: \"acdacb836aeae53e61ee9709277f3c827d845b6a13a93a0363b4c3cedc3f08c6691edffde725866b1b700564aa0b868ea963f0e2c1adddcf719c75e5dbdb4276987eee91c93703f2f85991090120c65c58\", \n\
+ adata: \"2bbe8519823993\", \n\
+ ct: \"c7c6576c6fe5699a36df7bbec6d82688025dfd97f7e17271b580bc7d4899847047b354aa7c25dc74b7beb43d836a45f8ce8215e11ac3e9161a542cc76268b60e7d339d4602b462f5339e4cad8f38e5d9dd\", \n\
+ tag: \"9b9b42d7ad12f9753f89e296c7cd587a\"\n\
+},\n\
+{ key: \"78388d4e6bc498a8a30bb609f654c2d0\", \n\
+ iv: \"e790b2c558d26215\", \n\
+ pt: \"49ee3fa16a5b2e05c253865b4fa1d66b5ecee5d1e7b8250b315e75c8998b550456f391b1f50375954aaba131b452f94e90e2a5e89ac95ce858cdba36d6511cc882446ed22a96081a219a07c4d21e5d6bc75b2b52a35ec546468ebf153333204c33d05813e274139b051e28a202105290db66ae5b90d17dff1c672e046904da7d48ae6bea5db5e06d0556756b1101cff59eb145371dfa9ee40055c753b72a3a662e177f6f3319621af29708fb1f3d4b48d5330d5938d99468f57709ab056ab3\", \n\
+ adata: \"9ebc77bdeede9fb4c36b98a808a9f028773429aa1bf01d048ef198beb742be6fe3b9553bf6d373ab5913ef54ae4cc1f3f8dabd4c613570456650c751fb657e19034e24f45fa2ef4c58ef564c7cad2b7fab5ccd0653d99429a5ac52f86646e749104b8e83afa128fb66e86cd276dbfea0bb53473447ce2e440d02714ad80f940dc1d53d39d2c8dd8c8297a5eadf202925ae23142d0ccf327e3a483a66761f3f7da2a3bf86dee63a7cedacec92e77e5861aeb8e8\", \n\
+ ct: \"d06ef2ba63d3aabb15e37b7d24b13f0f6865f008d048264369feee5abe03ace50964dd3d392c6a8709ea827c70a2d54c0aefa46bce7bf8025efaa850b2268bb1fbeab621a2d11c733632181ff3cc2cd0f2d5f9d831fb19c3e832b20576e189e5ef30aa0f169819c4a0871c036cac402a5df9a42b13ed8846b3c673b76843c16d69dafd04bed91c8148c3311e38d9f5011d14b2de984be256c52a14f430d468b2488f2bd4b29433e37a1d1e45ae07e96115110942b1b663fc3f424527b44fc8\", \n\
+ tag: \"ec893cb15cec10d4d85832afbd81fd30\"\n\
+},\n\
+{ key: \"333fee7e7cf2a586370d17ad129f670a\", \n\
+ iv: \"56de50372375e910\", \n\
+ pt: \"be91b751e042a45452037dd70616948db7f2f8366cd82f5eb67e1fa426d005650f6ffce28b4531e9ba5b1b548f1661fbbde1a3698eb8aacd78ee96c5792e967b37d83be632b6cfd017e8b410a4406e3496316864420d71e886f5d84429964e8d0acc3f2e4ec6c9d162e9e75e773581faf37d2b27109a408ad3c0ba6b01f25176ff5ec3eb40b31225be912b1fa093f146b2ffc3d2f7dc4188e296e61e32d9c23be1c030a21368cbb1\", \n\
+ adata: \"4caf307326d8096d35c7c03906d37c0e6f061fa21b3e70dd6266bb335d21841b3612a61502d6cff41bb98fdadb5227e07f497168252d4ec1c02dde739311e639c14decb5392dffb2a5fd8cf00f16ff38a75d2447e4140dbf051623160ab2cb77f750ad0bc374cafaf94160b7b4dc27230cefaa30b5120fb3122ad0d2\", \n\
+ ct: \"b7d594ed12d32b2627a7ea30f5b4f70de167487701b259d904e0c7007cea471467ade5357155d95090334c23f47dc5cc4a4d5655712b036fb933e67f11eb5dab60518d63eb86e680f8e3ad6159f402b3145adec0497a2468e1450ad530a3b4240cd7f17be6ee86d1d15e0574f79a8be87c81b202b5fc0116317361ede19b07d0199ab9f7f3d4e53c8d2d93acd547d296df5802d070315150c11989dc80bb82c6f6623bc8324b7c3b\", \n\
+ tag: \"ef64c0d24a10b6555aee3062083cfc8c\"\n\
+},\n\
+{ key: \"17b080e333fad56b055630826455206b\", \n\
+ iv: \"fe7f1f513b0a0e35\", \n\
+ pt: \"3bb80ca63716d58ed19510c4f98dc88f69ddf8ec18b85f90007beb0dda0ec0cfc5af00aba776fe0d4dc09442e21ae49907d44fdce69ab6150460fcf0c08b6b63e8989824989545295d828cc8d640478fec505c2bc37dfeb5715f20301dc07ac3ad1814450706c925620442a58cdde12cd80f3ac9f30c6d5b0cc50979cdf01323f34ac1686db77315bd7af813cf58e88eb3c4335c7e2a8252d47dca9ee3b7cf26215d02de509d54fa31feabfbf52abd50d14e972fe46897500a3c8a0c7c8e7832d1bf1d25e41061\", \n\
+ adata: \"056eb1359f20e04aa504d28d6495e3f97bad409a018d4d527f40f7\", \n\
+ ct: \"3bf65cc76be33c4fd04a1c30711b8c861d2aaad8b9be114c169911715917e0ed3daf6ca13d5b9bf163530e4c7f91fb5a3a2c256b542d3a909ac91b1f890a4f92a4591f4a143f433062415cd41ed7b0108e730fb3ff25a86f0104c5a7fa83fc146eb8390eb9a0de4f7a40afd816f33fc1648ad859412abf8b83debe32d567072efc75216d4c79820a7e3782b51ddce9fc7642e8b47cf6421caf73dda75532fdf23c69cccee6bdf8413b200ab40b87064ae1a6f904ba14f5537e636f2b798f138299d84cfde01501\", \n\
+ tag: \"3fa74b02d95cd07317e82682dc0a5ff7\"\n\
+},\n\
+{ key: \"183d658fa46a842d36fbf64b45dce9d6\", \n\
+ iv: \"674994d41529ad18be615bf1\", \n\
+ pt: \"46808b2dc520a3f07dadc881a0fcd5a88d87b9c9a5bf5281eb1479706380612512e4ff247c58d13c21f46367180a9f684e166c03fac975722be8777e1061059df0e3c39375d72c87e32e738c97a637d62f53fb3ba95b30c3cbb561d55ff4dea0f1fa5813a457acb66b317bc013549a9de2a326f4f6af5c7e878125606b356c43d6c42e1c5256e1999fc2a08b4f219b5e508f6da097afc85e9f2fdead46b618ff1359dc2c45e062fcca3b54026e467efd0d1cb0a84288\", \n\
+ adata: \"63c4f5136c45d9d61bf9415820712b2a7107c409ab9e780467be5d09fa1aa7651d4ee4e03a6a8a65d4cbb73fa3bf2cb3a9bf7d96120568b72e26869853057177c7336637061b11e8ff278555e3eb297f76deab8d8603309f4b1e13543b33d9e78720b2e856b8f96fdf850e1f97b667406b74ffaa2f7c201d14b93fe37492bdc8465f7990f66a80e0d88208b887eb20e5d2b626703354aea42a118694ea20d1f4bdca6bd80c26b4e2e5ce41f7551b30267f07bbc949e05e7aef\", \n\
+ ct: \"dcb701781ea16a56b3890f4f5f357fe5faa0d766b4115a2e8fd5619e181a8873622db3967c177bd03c5e6342359d0c20dd47fbb87b901c4cdf348b9605b5a74efebb02188590ab28ae8fddd154aa4344f392e11e7d1192bf8d561048fba57587e69a748ee1763b847d44f8c4899c824a794fa6099a61af963198142164cf53d4994a04ca1440a5f090035d8ac65ac594602b6a2ab09951b5c0cbd2172ccf7219dadd8ed41cb7cf92e421ac2aa0a3070c906726a12afc\", \n\
+ tag: \"dcb579b669631da1a1c655cb14df9fbf\"\n\
+},\n\
+{ key: \"07e1a4e8c4ef5eca2e17609f7514c105\", \n\
+ iv: \"86978dcad60ba404a7dae396\", \n\
+ pt: \"95ea39fce0f7d46aa2f25c20fbde84dbc0087569a8886573175eb00cdc66204999c62c2485b7d22862\", \n\
+ adata: \"49866ef9bd46c069b252bb8bd6a3b032245dfe44bdd42413cd5affd863ec70da7f3967f58a49e936df9413b171e0c1a82c71b6417743e4a75e79\", \n\
+ ct: \"7f22e920914bbfb0d1aca18c6f9523302146f38f5577dfbd7c6f67a9120d11feafb5e3701bac0d9cc0\", \n\
+ tag: \"1e270f615713a7e8bb66c7c9e1ec6424\"\n\
+},\n\
+{ key: \"2e4d89c4aa7608115a5e00c410e30b4b\", \n\
+ iv: \"d0ca4e5540ccc7d2da891c98\", \n\
+ pt: \"dcc34cac00e9c364b74f3969c6ca1a1724af0b6c0cce930473de6b76cb8c12f6c58ed3fc3e3f651dd42a8c0059e7ec2c277588ee171ff5cc13a69a5dc144da147c62919b945ff18ea33b1681cf20c74448041cfbe2ed2449841006ea9990bdf42a8f66d1476e83d8c92d7bc8f3c71fa0c1740c24be4fa643c6dfdedd953ed930a3b3780f4405875bc043ea4022bbaa1c0f2701d7a7395e0ef8ab8c5c5e5821cd0733451d720e\", \n\
+ adata: \"c44c83530c006e2b9f07c2cf97712e9f03bf8999ea2ef8fa178d3f67e8ff0e953caab41d9d1f8259751aeffa\", \n\
+ ct: \"27953ecc5ae87b4f8813795edd9eb05d98b7381e8aa910eafd79e53216ab9ead6256c64666610d9d91a0f8362f54220cbd42e396cbdd896703e6d00f7021baa0eebd5facf8f46b976883bbbbd0327e6712f3ba7801806848ac36bc03dcabcc7313cbcc75e6a39bd86a74e61f510acab868f8d84f656f99520e7fdf5ecc5523a3be610c0f49250b1956bd4d4b8e4425e98f2247b5ab83c0c59d47cb98234a792fe5d825030ba0\", \n\
+ tag: \"112affd5a639a0942fca390c616afafb\"\n\
+},\n\
+{ key: \"b0439c6441ec2545afeff2ac447f44b6\", \n\
+ iv: \"ec7f275a9f8b5e84\", \n\
+ pt: \"bb24146f8133ea886343559f7fd4f6e1fe0d22c2e23d8b48a6b984d9a84908d0e8dbe9d6d5bd4d82ef918d88369c4cd7cb64fb7b6d7cf81a5aa8fce3dd1c53f5a518705106d73c13c0fc483f2308f6e37f7cc20e80f183ce\", \n\
+ adata: \"07f8f186604855db8047477f7ba2a787e29ce952a02aff73e8e53535cd01e163f251048f3c2b48fe039cb2ff2b01bab96b7d559b15795d07ae3fa36fc7be0114bc36a445aa97bb8fd8bf447413a289ed1cad82686541e3f5e2127ddc11d9afba275d25b5c17538816161c034389724f75dfe2fdcc9ef16323927062723f60ce11a9cf2b0728f6ac9170789ce03dc52f2e0c2d755569834551163cc4158a20e491fbe6ea0d416edb4ed84d5e757922b7ad6aeb2aa\", \n\
+ ct: \"db0eb870bd0463ac626fe7cc0a0ad44982f90085300913b5d5d5caa58b0b445f4fc04e2a237fd004b69c3996fb31102b76cc5e3276cd76d11e2261704895c6a20b2785efee4852f58458b01e23c97149a6914a8a8f31aa4e\", \n\
+ tag: \"080641872b692c5b9980036e2a2b23ee\"\n\
+},\n\
+{ key: \"4e5c589c25da52506f30e150ecf1f320\", \n\
+ iv: \"68992c38321d96ceb20d5444\", \n\
+ pt: \"6cf9c70cec1e367b4cde1e5a90a1fb0f561b3195b8\", \n\
+ adata: \"a86da8590a66a9e7ebc1bd1163ec528485c7d22a9eef59130b0e711ac8a666b99316d0aec80e5e326cb31f2595afba32e8b82561654e98dd69d33aeb69ac8f5792fa90606216c3d661ddffdc5aa707a0e71f6faeb14d719140487b03eadd2410d97772b85d10cc2ceca9453515c697549be5b7f5aadba9bea742\", \n\
+ ct: \"8619b1cb5cbc52e12cad26cada0978f2ddc2a8c254\", \n\
+ tag: \"02f0fa62bc3a547b10eef80f09766d57\"\n\
+},\n\
+{ key: \"26dfa722bbcaa6d9f7b46bc39481a32e\", \n\
+ iv: \"d69b9228821835419e5b9f82\", \n\
+ pt: \"4aab5d32a24f40ea450adbce4175fee966d1a9d19959\", \n\
+ adata: \"1edaf080ba8a47f906f134b2257ea8b3984f9cc9bc1ef230fe86de2a29472a3acab31d5ea520aeaae9380935f095a8ad62a3e199e64bac24da3e0f473e1b667f19b91267d8cb1f4bb8327daa0d2606faac1fb97e36\", \n\
+ ct: \"29c0a079242daae91df966ea8c792367035f86e44941\", \n\
+ tag: \"6209b1e172c3a40881f533c89762139a\"\n\
+},\n\
+{ key: \"a8063ece9831c3160672b6c68dbdd838\", \n\
+ iv: \"a8b4ed1a6ba1cfadb3a49494\", \n\
+ pt: \"1249f0c289a894c6c4cc557e84b9eea2fc3c39fe5f1d93faf4bf18e74df97d6984eb257f38d14f2780d0b414a435b970cd9d244fb331c48c5ffb4065d3038304fff2f59103d56a8bda29e6139e9964aff946206b4f2e0dc84b\", \n\
+ adata: \"3fe34211311875e80d656d827547fd90c81003c1f0e41f30a807340719f7f92be09a51bc701133fb486d7ccfaf95c08c281b3dcb3d977191a221281f7a6b80674cc763fab1eeaf4ade71e7d71f60f8b89b637be81b7340cc1b7cca0c6bbe63b2296a2cce66f07d67bd26fd0846001fcffa77e5e6966046cf368ea030b41f18d1\", \n\
+ ct: \"5a93cb55e66808e7b93148520cef64a4e7facdeec1936a1f09951b7eba9958f6d70c2341b471e47684f4eb2ab6c3057f761e082fe61cae9f63c883aeaee291f8e98f481404217749c0a7a1b18199964da70579728cbf9e0c7b\", \n\
+ tag: \"bf702e001a28767b56d5d3f7fd92bd19\"\n\
+},\n\
+{ key: \"4e0f47987f54bc917ae69d2c4a58cb92\", \n\
+ iv: \"85256ee0d02af01b6e4b3535\", \n\
+ pt: \"10b86286c311edf7443d9f237e068e2da7d5a9ea12a8e3fded8ae37e4a643e513dc3388a595706a644b41d9105c600c206af9830674485df72de8c7a289150701d2c438895cd1e92d45e1a44b5e647171f0aeebd1730d0c55e50ed8ee73420022ad41c20a6a2f28c2d954004e0513c3a49209774a1422ff8498eba76802997de22edfb2537f623ff92d1b595c21be47ea8b022ebb98141e2e74ed4b0012edd3e144dab20d2541ecee2006a9a585e74f4\", \n\
+ adata: \"177ffa8e62511b1dc0f7b87bf6ec793bedfa1ceb1156e2d2a15209a061ea26ccbde2bcfff2111c5d6a9fd5103251a4efe408ee75143e7c69990b3b3410dda109584c9952a4167aa23a66a82bdd8e9ddb7df49a29eeba3caff7df8ad4ea522ebb038158e1f3e9a273f8afa29dc454f4feed32271d95cbf7bc45022b8946eac79ddca88766f732d40cb71cd0e36ee2d15318f8dab5834d6e16479d74f2\", \n\
+ ct: \"558e27eccc4de3fc7363b8ee4561a109b8124ebd1bc3a6403a5f030cf11ad9c911e4d5a5361cc8ed7496812f603099e401d193de36f437cc8c199231af54b3b62121cae5cde62bb1b7e1e476ad3e5f514d8dd828ce6fd068165e5378b88460b341778b9234b4f6309811f991acaa3eddb0f2ad02cbf9c6202d0b82741443c2d9e378eb87796a9b0dcb2cec3c63e924770f3768313fd7138370fbfa958d4021952590e8257fb68fb6691704a3f3831078\", \n\
+ tag: \"bb42b5905083943518cc43649f199275\"\n\
+},\n\
+{ key: \"591ed5f5a80ab4a5e015c450e11063c8\", \n\
+ iv: \"6aa052c5ae3e06c9\", \n\
+ pt: \"030e31502ee62761421f324f1bc1ed12\", \n\
+ adata: \"cdb86b2e5c91212e343020a6e431d1b0b61367aed0e58b4d8a9d95203e4866e11e44c93f833a7ca16097b78bc5829c14b36b55085d4d9526fd3150964151d30341f518f1390201a40236d17feb5b91525fdadf2dc14379cb2fde4c02bb0267135fedc13d60f0075e8bd246917d682096274d01d87c231005622d4c29dd9540f22d7c8815f4776f0969e524be35f50ce82424a017d6a02301193935f707bce03ddf785a7e6fb59cc91b5d38497f98\", \n\
+ ct: \"d4ec9632f9e25e286017c839ec2648a1\", \n\
+ tag: \"f271a89ac9f6130859ccd99360129f3e\"\n\
+},\n\
+{ key: \"a3442764267a54000fa964975ca4a211\", \n\
+ iv: \"cbd1e888fb154546\", \n\
+ pt: \"0e97530ee053fb2d1448884607432241ab53d474d0ba07028599935496b05b55579777e5e7134b2128f963822a0d46a77d0b7b\", \n\
+ adata: \"8c33a14dfd1a935c764d8204\", \n\
+ ct: \"8c9bd974f5cd6b3df7803d110ab1981a5cfe03b95a2ad5e9a4158456345c3a37affe9025ef0a83dd7b107a346c882c97c2b4be\", \n\
+ tag: \"0cd78fae4f61cbdc996280689a3ec9fe\"\n\
+},\n\
+{ key: \"1fc77248cca8c428328fa6d78f8983e3\", \n\
+ iv: \"9389aa10232a1def\", \n\
+ pt: \"394ab42a334fe81bd2c0dd\", \n\
+ adata: \"9de49f4d24944d3b094e6eb0b2535b39f7272ab070a2a9b77e0b0cdebb37646529432a58816eb2ca2405e07234fab5482ad1c391a4f8ebabb7b5a848c23cff2d27a5bc5431f0a6f5bae429ca5c9c256030\", \n\
+ ct: \"080f856413b4e07f51fe04\", \n\
+ tag: \"e61be4ad269327e6ec7f3286f475e927\"\n\
+},\n\
+{ key: \"475affbea9fcf3cd9cb360790ec256c4\", \n\
+ iv: \"7c2e992e3058493c\", \n\
+ pt: \"\", \n\
+ adata: \"ff93da60adbbde3da67a4de0879ff60e6a78fc20db832312825d2da08e8d37227357f2a65716f8ef47e9b81ff87a4538cf2e7d81a7aa758bb07fa5039902f932197b4d3e9969f287daba27bb46fb5fe5724d964e022c94d29825dfe65691d54cee7f8f8326c7f6df862d9a3ab8885a9e1e88400e9a99b5257b69\", \n\
+ ct: \" \", \n\
+ tag: \"6aa8aac1f3a0bf3546ede5de8592a6b0\"\n\
+},\n\
+{ key: \"3614f60052888cb9c1ae4f3b6bebcaae\", \n\
+ iv: \"3515a7e84cc6aaec4a167f41\", \n\
+ pt: \"94880b610d5e11979d2bf4263ecead5794d0ea5e101b10\", \n\
+ adata: \"9c9ff3c6027bc4f80727bd0220b53dcd937415b17b570d3b0db3489bd7f0300d75426cc3ae7866acb571ff\", \n\
+ ct: \"4dbffcde0083eb391b317df077f090e4b878c67b6a3e5c\", \n\
+ tag: \"3b33753cb3da436beadbf91cc84b62d9\"\n\
+},\n\
+{ key: \"d9afbe61b2226914c14dc6e4b6a18c34\", \n\
+ iv: \"36d013783b4eb091\", \n\
+ pt: \"e04b48\", \n\
+ adata: \"09e28bf17294e1031b34140c0f048a972650fc489e0d308f97b5\", \n\
+ ct: \"3e733c\", \n\
+ tag: \"c0b9935d920678fed944edd0e23e8a09\"\n\
+},\n\
+{ key: \"de70d02dd8add89e33108461a9bdbc0c\", \n\
+ iv: \"2dcac821caae925c6a426ffc\", \n\
+ pt: \"052841350c41e827812ec0229aa349aa858ce5e8c5b9822999be275092d3a81f1a33331b1ffaa006993d89b4345d8153439b7881f929687fc5d6f206d760480ce42da413b9b601ef36c7e69c16a740b2765328a2b414\", \n\
+ adata: \"b61269a3f2d05438e51e681aee8c16465b7b139f1fd522df9f1fb8fc3da5fa3ec984cea81afa4a208ebb63ab0777493eb22934e3282f9492f608cb9897b9436ac729427b9bc0162495d33ab0d64af8fe824df7e9fed32d48e31480fa7b3e025d9424d165e4c7e6e348e0a51b457f8ce785a092f052b3de829006143258e53499c2\", \n\
+ ct: \"0786179301a822ee0ac62ccaac1d85e766a4b7a91a4e0a6f1aaf2bd93bf352676b7548c8370844d70907c7110dff16b55f400a0b22fa62aeff23899090cd5e93b7d897c636dca721bab48b35c1dc34f937a3187f2fab\", \n\
+ tag: \"38bfddc21d72567fc055f3d3555c5e0f\"\n\
+},\n\
+{ key: \"8ff3e093382425863766b7e9eed614d1\", \n\
+ iv: \"2e878b4e25278f96\", \n\
+ pt: \"f723572ed0c00d8285f43f3f3d543a522a930a56c5104af19f130c6ae53800f1a48f394533798304a827bfac38100d074b708efef6e58e5f837ee22e1c4c3003b357607d5060382c571184bb0e40b54255523613a71558da6297cd467622ac129782b797534bf70065633377ec1da6220c528bdf8b7201529592ca26292ef28a396ee1a683008bd6afc1a5f46a1080a5205547c3941b1e2f005a973c37a77169146c8e9dba64d183e1d331345f0b6b069947b3efb9b070a9a58b240650780a22\", \n\
+ adata: \"2ac9a4d3258213125269451fe8b0be7aa1f86bd429126ac0fdc9ee73529185d9786e60ab8a806d78c68d4b15f156238a5c68e89009a2ccc5e83b913612dfbe0029a6345e56a40a8239e4821e1dc252d3c6b053ed5cbf20c873af379caeacad\", \n\
+ ct: \"77d277b8fd46864691f6c8d3e37cd656fdd2e55c5517bca97729a4a23c2735e438a0eeeb7550906b807a2ad9a4c8363fb69fd38db13587a3648a6de937eb889ece0143430032abf9ef67e042d1ba00dc2dd50e5056a730d902f006f25f8095680240e7eeed1288cf5713e4748d374f82985aa15b326f190fc4fca20bc7c055d5a5d39656bc82aa4317b6d61a2d48a2aee636d8c00dfc482fa7c99258186d9b45da19aa666bba7130aa4a95bc42220092d8da05f0f389ec1c0d5d9547e706b4ad\", \n\
+ tag: \"bebedbfe17ecc53652a2d84e002a6984\"\n\
+},\n\
+{ key: \"c424cd21a1e7046c1e3dd752e5cb33b8\", \n\
+ iv: \"d095d3773527cb5e\", \n\
+ pt: \"5df3dd166af87e63dc5aa6640ef9873eae862399f39c68599d8baefa6f49c5d8d235085283648eaa187f2c17424202bb05d45460a179e41b5c4be7\", \n\
+ adata: \"9813ba00478d150cb11164f21ceaa1\", \n\
+ ct: \"5ede9ec0ea2260cde5e121ebee188d64c41035dec97c9f6906ef5275400cb9854de68d464f2a4b940a25870966bf3ae42e64cf1e8892165b881d76\", \n\
+ tag: \"3ef6b75573659154f800f16ecba4c6c0\"\n\
+},\n\
+{ key: \"3f77ccb3354be4e763ccde9d7e2a572e\", \n\
+ iv: \"a20d479de8b963de\", \n\
+ pt: \"2c056030f4f8cb1ab25f52be73e516575bfe8c9d35bd74446bc0aca5fd1ebd2c0b34fd988d4b422826745eae992ffef2db5dcd12b98b0dc8f2\", \n\
+ adata: \"ba7e636268c60e952b41712a26010d61864fd55cb0948a6c8b545c50660047f282a6e88809c9735834c46ecac67ede3a9c5cbc678e1f0f\", \n\
+ ct: \"6c1d989654eaa983b99393b25a4cb9fb230772338b9deadc22a3b28baa1f670b17698f4fa717d8798979422d8e016ce5dc729fb0367359e303\", \n\
+ tag: \"5b39ca5703f015a9c93578fa3062058c\"\n\
+},\n\
+{ key: \"b3c250526c9fb1e5f40ca456ed6b29e2\", \n\
+ iv: \"ef35bf5841627d1b\", \n\
+ pt: \"3664fd58553d1f3e875f392caa8f905b5f0ca309a14eb5fb8c4d5ab9d5d1b9502c69ee144ffa96bb99ea07bff5b4440cf9b928d24d79bdf905c95f1f1914b91761d8bf4b2b78c62f832f0ca35900b337cef1cbafa20ad1c854ff0f040dbfb4fcbd8093f472ffbb9c95d79ce9efeec23921\", \n\
+ adata: \"2d63b7cee0218d1f09661613809467164306750f3b65df034b223a75a06478114c71b34197269603777a6765c5c2983eeaca5f4523dec4c1af35738c506123200bec03310bcf861b208e5c78b3cc43773df865fafa1daa264acf21c4db8bcf95405e02758e1202fb647ed01a88e31b79e58d9743c237b265e0942f6366cfc53bb78cfe6c6ad17793ad1585c131b64c6cdbe2332436f59cdbef34083c9916d9fb6d04d7e470470aa8\", \n\
+ ct: \"0a6daa850552040cb87b371a48298e2b0a1414995ef19e5df6f307adfb2e0c4505bd31f68dd3934ec6b2736a7d7d006998d6462143156bd0c283421949ce63a5de12f64bd35b3ea5267ebeb4d0522bb3c2e5e87f1d8a4f796de4dd86e3de5dcf4e9e7f3483166d0bfb05942b12c24dd243\", \n\
+ tag: \"68f0eb3479a8ce26bdf3ab00131c7105\"\n\
+},\n\
+{ key: \"731ad91ed5e0ce54bfbe6bcc9f91a1e7\", \n\
+ iv: \"dd8bbbb02f087dbf\", \n\
+ pt: \"21a2afd316cd0c7bde666a3814031cf8a190d665d4df29680961c52795cb1676ca60c8f41f6c454dc5917af49441d98fed13ed5e353ec9489e08d720304d7d2d2469c099973d7c5ed5314d5e4fd802c5a323fefef09d68f4f4f62ddb4d051f036661e757051102dc408123e839d19ac4e85cda5a9d04889145c8aab1d2d9f37704c742dd3d5b84db7009395c0d970855ebdfbc17b049a8a8\", \n\
+ adata: \"da583bccba399f0be7532ec2356a7b56694606c4070322b28803ff532aee50b1\", \n\
+ ct: \"a0af5317775f392606cd16690681a3d5cb99822ab4b8c46475d2bc79abdb125908cc0bc8ab9fa7f088a316cd188e314316d936b28363bf84542ac1f31131a5b3d68fc11f7e4cff3a2638afcd86b101bb4366dece63d33825a24a75523ac01b344d8cfccd4ca9510b0eb72ef6061c496d33e1b98229a652617b0fb8c8417e00e93e08d19f9f0927996dcdb1fbf3fd0194450bc9b2a1d7644f\", \n\
+ tag: \"d0df6c7aa8966fd22ecb82e297548c92\"\n\
+},\n\
+{ key: \"aa9cc1db27fbb32f670604b63ac6a9f5\", \n\
+ iv: \"bfb96fb6da83b537\", \n\
+ pt: \"1c7cbb2956\", \n\
+ adata: \"f967e2d297f3a55fe4d2731aec5fa6ce019b7b09bf93cf92935e8ca13d1f6435945b2f976d124fbc6e81275ad73298bdf8317018483c5a4147f2e77b41ac45ac624bf41596105736ab2a3b7d3f42c566ca067baa68234cd3d1157ca313701d5e95e3744082b3\", \n\
+ ct: \"9f0c629bb1\", \n\
+ tag: \"f3db436074a183162f723d02dd998072\"\n\
+},\n\
+{ key: \"77621e0f6d84b02774b2fb5207599e3d\", \n\
+ iv: \"bd58a0c3eac9ec4610c482b0\", \n\
+ pt: \"d36c24ea124c1033eaac12a625a89dc89f7a0e861afa3535a1c2b5c813e651985ec4d6d6661e7effdaad7cf3d08aa995c64076f95fa4701d1b4b73bed47fa51ec75510c7fad1103d42f06c28c10f3e38a4dd2f0a9fae2ed0949f2518b8c141d00633aec2a1d77c24a591c1139b1c195557e687c6c6605603705476\", \n\
+ adata: \"d71a699cf246a0664f0d23ab801b832a9b405408626bee6db00857bd7e2850cd95a34cc6105beb9fac551237b31d5bd68537021e43a4a8c478a721173e79c51e756513318272fba17eb607285c03bbc60bba8ea0be7da48a3ad403b2a8432da611ac2e775bf45672c6ebaba266f9fc9663321446db65a022161b9c8ed257459aea1b8890c3357e4098d1689b71480155fc548b0cadb235fca477a59b2b16361bda9a51376544274e02a4eba2f022d41cd3a40c86e4db0bd38bfc\", \n\
+ ct: \"70b6324e8a9743870728b34dd2664c65363b63f28a62068b7bd6c37bbeaaeca5e56cecd4b3f363ea1d91079bba105d1daa8964226da053bd937028bd3d9b52fd6b6831abd765903ab8a41277cc1b0f94e0f990a4e6c149b2af7d58e43a8dbe62dffe0b46c1776a91bc517943444c1e8f9419c14e07811fd77baee6\", \n\
+ tag: \"9e0601944017d51d50857d24cc016c19\"\n\
+},\n\
+{ key: \"12d9f8ccc5b0f9a7d49381458c4a7cfa\", \n\
+ iv: \"4e4763a4437a45b4d96d68d1\", \n\
+ pt: \"5c3ab5bf54e82c60ae793522257bb7d09c61ab433fb2697003eca9fe2c7e0db43cd9dd0c3b30003058cf\", \n\
+ adata: \"12df04ba6d1a117fbf01c530fda65d4393c9dac8cd4f5f5b2dfae420e256\", \n\
+ ct: \"d51b28398c50b27a6aeb0e170ffeda529ae090c5fba681d3c77c9df3b30feed186899566e2eab546f523\", \n\
+ tag: \"08fafc7a2e91421e442a646442c424ed\"\n\
+},\n\
+{ key: \"6daea8cdd46dc4133e316d9775e57294\", \n\
+ iv: \"c3f71091b40bb164\", \n\
+ pt: \"a9009b7fb19200a0e41c8a9581a0c4e739b85ccbff17df80b0d64a051347bbdee72b5bc75a8391b7ac315590127b0b0fd1ca3123f724df99eeaf13d7653d9ad8a54a087000cac078d9f31c4cf66a59d63b57\", \n\
+ adata: \"ee5292b4e1a820ed3f96937492f4053fe01fca06024b564c9cce411b08d6a7fd7b95020fbc5f81b63d\", \n\
+ ct: \"39f604f095daf4e8f9552dca74c127cc88a69ddfee5574557faa273223cc42b0b21fcc3972f0953c981466e2be1e255162b4bc7f138fa9d2d968d09bfdb79966f619eb84b396751ed11701ba21e2ca0212f5\", \n\
+ tag: \"c9c18638ff744763c3ae1a72548d1d07\"\n\
+},\n\
+{ key: \"c80973f7b7f8264a15b588e23bc2417e\", \n\
+ iv: \"31633fb2cf721ffcc421310d\", \n\
+ pt: \"e88e3bd3c59bfe639e996e3eec65822aa9e092b4fd0d\", \n\
+ adata: \"1647b10d6014395dec65aaf465e0b9809dc1a16f0e296957d84932135c4e9f0fe9437a0babce7b690db2602b8d86acf3c2ade8d56364d277cdcca56ae61b4c1b0ae67612f7be0b1ff6d6d9a5fd186da67071f362f867bf0e9f6f1203022297c1a9b945bdba8fc6e43fa9619fd87d367e57d49adbccdf8370b5955e290222ce2ff503e116568e52c7274c513c1af755772141540ed3f305ba81db\", \n\
+ ct: \"4d4ca70b0f0ef1e7638b1b0f6bfa569f0676a55823f6\", \n\
+ tag: \"3e1be1791722c37b8881ead654ad4e81\"\n\
+},\n\
+{ key: \"522cefe4e97987de07fe8632a15ef3cc\", \n\
+ iv: \"0c1713ca639b3a79\", \n\
+ pt: \"158875044e59cd4431b6946edb6c4aee6de6138baf09e861b8521a6159df8a2d81d1ec53a6e3a0adf6f331aa627a0f6d883e4d034d61ff8f82c1cb59650ca309c203e561d60ec6d89e82d83b5cd175f502d6adeae3122834b5121efa64bf5df4\", \n\
+ adata: \"ed5ef9f54bc80c9ee309243a129574b12c6bf1967cb26653e0389d931955a33aa98024390f8b99f76f14c8d9b4ca74\", \n\
+ ct: \"87c2a57dee98515b2f56bdb2da92c2fa7d8126169018a4b30c30c389298489d8ce1df301bcd2650a010598341fe750bbcbe825511771b90e4507a23ab0a63bf8c5d6ef880454f02fc1a06ce5bbc19510f0b5d2bafc5166ebf82bc8ff4daa9386\", \n\
+ tag: \"866680957f9124960a4c0ebf14a64fd4\"\n\
+},\n\
+{ key: \"552f7fac3b903272e4e7a01cd60338fa\", \n\
+ iv: \"91210a4dcfa03d930eee1767\", \n\
+ pt: \"455ceb9f908c455dada9c5017cb855d8b2de66074bc3fd462766f304f1b099c478419425e4226ae13b1c805f97a7da2bfcfb727ff90d5957a92bc6834d078137697dc62fccbcdc6fb61079d52880726952317e5ab9988f6a6a9de765850eb24c9f65edbbfeeccb0c9c1712d1b2f525359135f6b4d451c6b9f76eb5c4f6a9e69810eb1225\", \n\
+ adata: \"7643593c9c665f1ab6977e6bd1c91a8794d8ac02412706d5b3de39e0193ae51cd14d572e23346c3bf1bcbbb5caf1131a7ce1e6e343e1dfdc3493f509e655dc52771959d8d6cd215f29349a781c14327b86b90cd27572ceed9f8c69407652398756600d76633b7aaa24896eb88faf6d67509c09ad18383ecb39ff16477bb90cf6f96e09608f314f3469e1709e779b6c35fe6d458327c8ff2206df\", \n\
+ ct: \"6387de35235459ac44070db0aa2d70379dbbfbcf8d7dc732c39ea030251970ad2537cf0e462b4f31163dbe3230f0877ec82d3497bfdda56f9d2b800b00920ccc0cdc0aef96f0aff8a4a2b95394613751b96cfe9028f7b4b984f8c7a9d755fd66f0e62bb1d6d58eba93cbbdb601ccc9c079adf9616595a429512215fa77df59480653a298\", \n\
+ tag: \"571053e64f4f4cb70265473d4a17e162\"\n\
+},\n\
+{ key: \"9436e9f0d09cce8d50091c5df226e9ab\", \n\
+ iv: \"4530212ae9cc94df\", \n\
+ pt: \"44371a60fbcc0250ecdc6dbf5bf4e931c9137d8fb0ff3e75fb01f9484dd46187742389b1bbd481b417b5b407885095ecd588ceb5c0f4893017c71eda3cebd2ccc50190610b59bca3a719387947d66bd08c9bcd736cf1c2e4a552ca40c31b53c9571eae360f05b6c62fccc36c958e6c5beeff0892cce50cb2545185aa42ae00c8fc85af520f482a4c61\", \n\
+ adata: \"63295799a1de2e67af83e1b829b78709080e4ee8308af100222bafbb8bb05ffde8f7261fc4283a37314db6c1b2ae1fd95afd997530e2f77587f0c18270e197b6c30e9b9997f94f51b052a821b0f8ddfdf39ee75540d28c16b6a10238ddefd56b4636b554436d92c4581ea271889d25c7c0b39d0aa930e5327e5e57d685aef130aedb5ee2596a9ab51d97826d94ebe35653a295f38cbec8daae62b2275440ce8894728536988ca4e0\", \n\
+ ct: \"8ae47b979103fcdb062b0c0a994aa7a0b1ad1b05c6001dcd40e7395f6cd3fc50ed88b4c8c1945543ba34824e6c5a7086c50c096ed2035f49a3138855c24f510c31fe7dccd0b335fe421f4c4c20718cd8840f038e3c8cb3d70c9f12d9d31ad65e1a5dea332e5e90d3c72361e80ad3f67ac7b49e4b712b3a278acc873a0c5e985c473b10812ce8be0ff8\", \n\
+ tag: \"28614dc383d48ac724528699f6c56f08\"\n\
+},\n\
+{ key: \"7e11ea7b69c6cc1de60ff02494f9907a\", \n\
+ iv: \"872051c44030471deb6360f6\", \n\
+ pt: \"acb973738d5c7786d2f122a8f56ab58006a1627466d093a2b57cff87697e3914e7abc416ea790e1ebcd8a7\", \n\
+ adata: \"16dcdf54f6c91e9f4d3c51d044a64595bb9ebd67686f728b26f2e6f3af06e286eb058f752e161f43737c355284698ffdda2c3aa827f3b95d9caf705ae8ff2dfb77d87e7c0a1da0c74950f72a1db186fb4e2f60b0b888a005ddb65b9a7ed81d96015e0a521a00fe1e4af6b74b77d9b019ec05523dc8fd36fa65a5\", \n\
+ ct: \"b8154b66c09eb90b487d20e51cb090041ddfd757a08d9f17da4adf4059c46285aae17ab7440e452bcbbef6\", \n\
+ tag: \"a87a9c33fb1090c4416a2140215d6eb4\"\n\
+},\n\
+{ key: \"f560dcf0d5b710776c0abf173957b6c2\", \n\
+ iv: \"e248a46cc4625149ccedfe0e\", \n\
+ pt: \"1afc09f52db73d74880c6636bb44c01b56f809bbc056aecf61600cb52ffdc526ac5853c85b1bb693046c103a1e9339ca16372e53a532c9ca1f7e20063997bef8ea918048668d4327230d7da66a\", \n\
+ adata: \"0521d7fab8a4c9e77ac7e8d8472a0bbb54d1cd29a913d904e715c66a21c72d2aebb7a8a36f0879a5ef9aaae4ef102c482aee7d1d0b8a482c3790dacb4e34f35095de325f62ca16841c14c8147431e4f9cba3178d8f18f86db5ceae4838c15873266973671c7dc8c9ebd626ab9f0815e42bc2ea86b8889e482140e89b8252e3893e7a2fc25036a0d73d983636bbe5d4241bc437ba059274e556db9f6d0816be689f6ea59ef2f4e9a67baef47b089019a22308ae\", \n\
+ ct: \"0fa9eb85133dfb61c2db45be989248b46cdd857a78c224fde055e5a57f9ebb48b62585ff7b70c6ceade13cd354d0c388a8ea474c91445501b680283bd4ecd830b0e1a5822231ebe5562c98c81d\", \n\
+ tag: \"3f7232aecd79850ef385d9e94f0a3b72\"\n\
+},\n\
+{ key: \"af7c15a3585d599feab3a2643e18b9a2\", \n\
+ iv: \"5e67dd2c11bd2a70\", \n\
+ pt: \"68213748c89798257a0c0d8bc14497afbd7c388b1d6fe71af23c922ce290bd7bbf8d70c69a4e8624922ddfbe276bcf7a3c4ca689ce5a79\", \n\
+ adata: \"4158bab9a1dc03\", \n\
+ ct: \"ad9cc858cbf31c831ed8bb410227e7ca535f940130a1378fe976aed6b2df007a17d5bfd4101d611b673e1a3dfa839a4318b1e85ad9de95\", \n\
+ tag: \"901a124b3a1c208111cf630180d1e8ce\"\n\
+},\n\
+{ key: \"f3aa1ed76a0f21fddcbb4b1adde97513\", \n\
+ iv: \"023bc4b0ea16faf5b411ef7c\", \n\
+ pt: \"f9ce952bb097f76d5f6073289f4005feafb4115231e6b25687b46b335eaa70af05c000a82d733bdb1591512286349d5913d8a66c005a9151735f2c54b75e923fa22c7c03fe853b4de4033b8d85f2bd4de5ef7cf56178f12be3ec8d1c49f07437\", \n\
+ adata: \"cd6c54a230c06832db\", \n\
+ ct: \"b10f7a196fac1ac73453527d71c42e3271d8ff27930431a93e9897f25a55146598bbd2693d5d662679ca09a741bb533ca668394a9648707f9d7a12cc12a0656c2c8e73fc7fadca560bacd22db096e6e63be4f9e1f1e4278a34c14401706493a8\", \n\
+ tag: \"6b37cc7959d87582fd927d85b797a68b\"\n\
+},\n\
+{ key: \"f9c17ae88944d92256ba0c66d642f947\", \n\
+ iv: \"46ee339f28b0c8ec23eeca2f\", \n\
+ pt: \"323dafd50b4004ec9f5d6516e64dc07f5ce6030fda7c1f6aeb572ba0c01373f03947b15d86c6fab7\", \n\
+ adata: \"a9aeb44bf77a853424d62a91379602b54df03d8dfb349cccb7d8df42419c35411401edcec76652acdd985869fe9c2b6666abe158b4311c60825d2b97d9788c0bb7c573f0e3458219123c83451730180f5cdff5289f1e74c101ce0a99f6c4729c960579d8b1f667639aaa5b26e4b6ae7a83f0f907bedc555b0d8c3e83133ce6003795bd205c39866a39cf22b8d49907\", \n\
+ ct: \"2d18edfc2f49b2b9fbc6389c1f3a5ccb3c7de3a224b53e6f83a47079d255f3282b0b508af9672f06\", \n\
+ tag: \"10005294ac3eb7e00da63f8bf73132b0\"\n\
+},\n\
+{ key: \"ae6c111299c4659cda3d21a768e4b600\", \n\
+ iv: \"d098e1317991b923\", \n\
+ pt: \"a9d7f23e6a26f4e07addc42b68fd9ff822d472c7bf8c8d87554f1b697f3484bacb734328a5297dbfa2c8e096e6be454a4cfdc9f0377887bef5e7e22910ef50c6aedb17975f8a0d4f92e82511f81f36b2e3fc70fc03ebb9d36768faa19fdddd47113dbb38a7146f32c2795756e2c6439ecd84992ee47274956ea440bfd903709abe17918c1271fb2f\", \n\
+ adata: \"686c15b3f69dad62097d70a78e8a1cdf7128d97f094f583d523d82ce2a8dc483ce0721ba522e6530b4434be00109b0369e875dcfc54cbc4405d9e85b4695ec19c0fa557ca59a35d46bcdfd8474940c3679d85b2e831ca9d1ee43a4dec2edd8d19303c2e0434919d5cc49edeb8cdc12670fb688ce2db232ec30796875a36576c2d3e4d8c0b8\", \n\
+ ct: \"f7bb8a772206685a62f39ccc2283ac2068224ea641e1e71624aef49384a7f35c35e50ee74e3c7f3e1eb848299a157f4ae9984cd218d7201e29f90733b3c18a83e1e76cbdef6b0667ab11ebbda8da9803449e1dea7ed7fd2bdd5e3199f256b2ebca3e17ce839c07d838d963d3db7cb4bf3a27ef8170323e54272403e22b795ce9b26bbcfc7a21adb8\", \n\
+ tag: \"745d16b06c19994342f942bf1a324873\"\n\
+},\n\
+{ key: \"1a397bfcc403416ab38e1fdb38bcfa58\", \n\
+ iv: \"744f723ae71eba98\", \n\
+ pt: \"976e0ae72d417b5a69d78fadc079041511034fa85229ef88d5981c0e5e406f6bded197cc3bd52ae66accc2fa7817c08d8043dbba7c3926ed\", \n\
+ adata: \"8049ec3d9769fa5f702b6c7541dfe2362e59ae5d22e871c8019b748911de1d9ae78a8c64c62a506faafe97d800efb6f9c4a8447fd0dea4ed08a33b69a25d484df96407c5f983fac227202ca7bdcc4a14afe9e3b5e70181c7468064b8ba5e0766e58d79160363ec1bc08740ac8ffa5c7443f88d0e138f1cecb6e8c961dd608bcddc\", \n\
+ ct: \"2024d83d01de5385986ce9f7fb65878ec2549fbc9151cc57ac4b1883e7bb1dafba455e83a715adab51753d8f2bd3d26ca268eb6d9df9ef2e\", \n\
+ tag: \"920b70f148690adccfd9ef1b6eda8af3\"\n\
+},\n\
+{ key: \"3009dae294d0e9bed7d5479036127450\", \n\
+ iv: \"6903e7d197733c977f888752\", \n\
+ pt: \"ddb7711a185776273a4f424b4db2198511c31d72c232484c90f3e7ca18316712a5a4782da2f076b335131d5c590a21ffe4331a2f29aabeefc1745145ed5f4fd45dff91fc0d320dad89998d4bbddd\", \n\
+ adata: \"c4a3\", \n\
+ ct: \"4b36c9ff804e9de81bf5f5689d9362477f3b2861f71dc6fb04fa52468362c6a3add8c04cca85219e03b9511f6a7cbb6b0f9d3f0e3331666060bd2d5802d9c8990569368d869c599fc763fb1c037a\", \n\
+ tag: \"65c0ce35eacf36515bfddb4b886c11eb\"\n\
+},\n\
+{ key: \"00fd32fe337927021fe77ccf7689ffe7\", \n\
+ iv: \"d3e621a73f44c85b35b3c101\", \n\
+ pt: \"031ba27727f422ca9b69f623cf70ffac1213f732bc47d9ca29d4\", \n\
+ adata: \"27756ad333cd166dd17134d0b00a7fef748eb3665c7844e71b766d6edf96aad1e38709f2515c11a9e8f03640\", \n\
+ ct: \"0fcce8f58664d91da463bba9bfb0e5537a06fc8ecc63c2cd122c\", \n\
+ tag: \"f8f23ac2172c564da91167df71f9faf8\"\n\
+},\n\
+{ key: \"cab353bc53a08cdbaa08c4046d24bdaa\", \n\
+ iv: \"aca9024cb71904c8e35e219e\", \n\
+ pt: \"9c07ef7e479db224f8e5ba6c3407f7f0bd1dc13d6a91cfc5b338c2ebff8d57b74d013a3c3fdec3695c87f24a230e905ad7b334bc50618a2fe5bcf9985cff30a2b3cf60c58e01dc9160aac56e793675f5111c30dd\", \n\
+ adata: \"97ab6d01a1835c8d64e0e65ada5afbb4d171b8e63107042b596dfc050e264d8a3d57db24c75547a529e905978bdabfaf9373a113c7320b1d8a0229109af3c19309\", \n\
+ ct: \"92b005039d5326d9814ca7f47c70f6c2aeab2fbaa83442b6934448194324912087bd4a6c010acf50f003de06502254b6c0e86671a21e501e71d7e5e709688df3511ef3d86c5417464a4d46110af9c54a313b32d7\", \n\
+ tag: \"5de29f88a6e10a49733e987905dd170a\"\n\
+},\n\
+{ key: \"ef564bbe185b1eecce72157794286349\", \n\
+ iv: \"cac24309c807616ca06859e8\", \n\
+ pt: \"57bd0d33dc5921606f87dee0507cc0a5a12c72bf6dc906607c1f93f8c34057a370b91d24f4f509102e20ab04d359ce23e13ec933ea037cb9fcf3a4c5d8e476374d3c40a47fb00fc77ca8\", \n\
+ adata: \"6e7f9d1a319a8cace6e06e02397df8f51babaecd949d4aae337013172d67e7168c452ce08f02fd014535ccc0cb8ebd36845169a8a16b939918023e4e22dd6d0633\", \n\
+ ct: \"bcd21930a1bb92662f23493cc60da77bd6ec858b15a268ac44c121a611242d8d687fd5e595eb2b23d9589355f27925de534bad27d0e6be79997e52e574119f7199156b0b8d1f10eafca5\", \n\
+ tag: \"ece9a0ff3d2b37afc5744b33c96e4e9b\"\n\
+},\n\
+{ key: \"cb557e929e54907ef604e8e4dde91dbc\", \n\
+ iv: \"21b9c6e36a0fd18ff48e8cf9\", \n\
+ pt: \"8ddd85e86752f17f8794de11c282edba9ec7c03c59eaf4e759b17ffe28a264a7c12bd2e4ae349bb0cbc8513a614bed075eb79052504671d237a929c5bc80a009e0690ff811d250b4beab89489fc9d937cce207e9003e39d0e0034e\", \n\
+ adata: \"0818efc864e5ea39b22f416291bccbd4d9ff0516b4ef3c6c6d24e5ae5ca11a26b0d0557a832e52eca0b6923df26fcd6cd3676ab667cdbf0119cecdadcf5d353a636766ab18162d19ab710adb5f54f9bd04b573926e51f3834e0ff070aaff099ad82b9b353d9ea892c61fee4bf029efa1153049529192985eefb636984c09eb2312f4c341c57957feb71bf9b5cb11f4\", \n\
+ ct: \"5894c2b41720b9eeeb517aa54c6099d87042f5592331470e697424a092813aa09f4676fa412f7c6b3a211f0ba7e1df779c7df6d3fcaa5b8a72a5dcf9ab7b9af9a077d9d0949fe4a5541bde03e4ce7ac4916913bf694a46db3b67b3\", \n\
+ tag: \"c12c04f74767dc0638f943917be94dcd\"\n\
+},\n\
+{ key: \"85496af9af9576504559970a2cd802ee\", \n\
+ iv: \"786abe43615e4ad9\", \n\
+ pt: \"78d0581135260864cbba6e9bf2653a367d4444c397796a626447b23dec8f\", \n\
+ adata: \"c890f6885db9aa84f5cbb14c6dda48e007d6a0c9f32e8f60e7bf6cd48f6668226215d3aaf2cb7e6c6d38ee238eed9a5837e11492f6902f8e25dcf699b846010264b79dea5a975306c4944800428c63\", \n\
+ ct: \"6aec065d1999365ed3a72ebafb19eaecefcfbaba50a5f5e8b31c68fc3241\", \n\
+ tag: \"0d9c94c805ecb1e50ceb21dbb52430a7\"\n\
+},\n\
+{ key: \"a0e596f74aa059d06e68c731360a3760\", \n\
+ iv: \"39d771c9aa3ed70207329520\", \n\
+ pt: \"7aedb719777fd3cd61a0f2dce8164ff9523be1da5445c5cbc87976c4047e4b92be0a53d864a15d27a4f301dbe126cd34061dcd662f05b85620833f0815da696bf80a46b703f064d61e9fd299328dbb7932311d792bcd3343657b4442d3f0cfc9abfde920004caed7aa8bb8f00134782d6075a97c65ccae5393abcb5d0231640cffa4da4549c873e3592a3ed222291c3093d8c63f484707d5800a84f70dc24e5d3af0\", \n\
+ adata: \"2b32427a41f93fee8dde1fc750753fb8e2fb9ea269bfc3a96a469bcbc5412f47a09efc33becf39b35c4d17991d6d91b159346172009dfe2492fc016757abf4b3b3aacdb175eaa05849ede48223068048626df8162d3c68be4ac5f1ac6b9e1a8865f3ef31090fe8654ca2531eced331435ccc3fe584525a21c47e1bc8e5df8303d7ba957badcc1f952442916001663410fbe72d9aafe77672d9f31fbfcdca072f7e5a61aa3c77b0ac3c\", \n\
+ ct: \"9f60f936ffc46e38b4569555f24cedfffe600717d4fcf5a12121131e26b5956fd4ecfe995e88bca1f6a625491e1fc6f7700149a54b6a7acacc7bdc81ead92f5024f949506d121d46bfcc2ec3b26f4cafb0d689c21357858b5cf28874c779b8502c61c14fa8e0944d3941e2bcaf68fbd8a48d6f831fe011a29996894ccb7fa1767bc1d48444c8ae37c03b8ec98fa7372e7a0800d1e1a1c07d63e2fe89a955952a2985\", \n\
+ tag: \"6dce8bd182df6de2f434013ead1c0f35\"\n\
+},\n\
+{ key: \"0f503b9720322380844d52f17476fc68\", \n\
+ iv: \"f271d8db253b1454\", \n\
+ pt: \"09bcef2a846643687815b92a0f7aa3e13406ad66faab0e8d623c8e3715bceb5878314e09af01a99d1b6c41b8d29672670b5735ec05d06d4536cee212f139d46cff91427ab1bf20d5a24629ccd7240308c418cae31ec938470ebdb84729141ebbb5867b44d76ea231b14a398176a5141ec62d13459dbc1eaf126a85a96e5aaad3f8efa05fb30bab372a761b7e283a4c512786d888f69aed4a636772249ed6910db2818e120021e03b831618c70c62a3fc7623332a98\", \n\
+ adata: \"ef11df37980acfc332d177df77ff38e30aaf6618f1b5b28bb08bec949ef863074c82dfd5419c6415890dfb61bc35ce1c290638d2f14e84835828344e3ba0e754209588086ee3458198f96962d4bfd81a05483f618dea575e44432a2155858fd819328996f333028ccb27598a5adb644beb3c67640835e00751dac36c689acfd343975c917288a1c8\", \n\
+ ct: \"3513b53cb0d2ed41655ffc74e072e874c013e431de8369b52a272a20a27e839a4c6522eb5756e0af5afc0252c76f06a3db715319652dd146f0a032ac991bee09a3cafc6c17fcf8a0445d994d1ecdffea1403082cdd91e1c7bd80c4579bde82c87cba1c5b6afcfc1fdbdff09f22fedfba5fff6844cf644e86180d2e2a49e8a1e9b0f7c0450fa873d693e7ad3f5a1a544ab9a26e105c11083a23e83745c7ac549364f76ffe5a63b9c199381df8738f27410981f42de0\", \n\
+ tag: \"359668f6bed3a0faf0936db5a7cce62d\"\n\
+},\n\
+{ key: \"f650ac4aaf57891e641e7a47eccd4998\", \n\
+ iv: \"4c7a9e29a850937f\", \n\
+ pt: \"a54ba3178d3027e9aa969ad68619a12bfb441071e483afdabd28ef45e50d73bce855d94780cd361cfc88229dc5594f88423e8566d426b1a4006d45dfe057b8c1f23d408d3bded8d2b88127bcbb9722725cc31c706e00e2d08caf947abe24cf784d5d01627403b76cf09d562f199cc27c3dd31a7b32c2e855e98a5515e3223496db8254cf05909737e0b0fef15c68043ed64983de1e19ca15548ba860d1ad38287ec21456d0aa562a660d0db65673c430d9bc16b1\", \n\
+ adata: \"a27e5ba7bf756008a29ab9258384bfe646b98cf7f1cf26631dbd4118746aaaf2797b0369d45043fabb6c7731cd969344b6621f907c3ea7712e4ce13c1a815be82da6fec104\", \n\
+ ct: \"7bb0e9337cdf08a8ba2c09874c2ebf1a64e6e6eb2a0446c7735e14b721257e2bc0b80e65fd9376186c526cb553edcd81f63545c77c8b76afed83c4c08c69aa7a3870171a6ee9e609ac09cde38811f58fef8dc9635055a29e97756dcab20300b31c66ad5509f4dd3fb4e2ed3d5315dea2a2abb3e62c117d718ffaa26b5308ebf5fa74cf0e1cda0385de3645ae065145f2f05b038044860f144fe998d6d524751cb11106ca8eac1b5bfa352a40e2ea5571060ca807\", \n\
+ tag: \"961a814f117e1a3a20b2d6415ceabfaf\"\n\
+},\n\
+{ key: \"44cacd84762cd0ada3b1deb4adbf0a23\", \n\
+ iv: \"92a5e86baf765bf58c3e768f\", \n\
+ pt: \"a52d950abdd95edf8750a700e38a22bd65a393151dacab50582490ef3d6a4e6a06cddfb2740f83e4064e7ee54fafd5fadfe4dbbd02846f6c68f48b074a2a730f41a3fcb11f49f5471ade0e5074a3e5\", \n\
+ adata: \"c496bd791939b02f0bed896d249b348ecc89ed23019dd87adb28de9680f2f6ead46fc727ca515bd22cf9c2cfede1d19b262368ea2b1ec9\", \n\
+ ct: \"6269dc28261b9ac09ca6513273250196a7b9e04de5d279a5543e4770684e50c349805e764d63f75f4909a60ef53f923b9c14a0fcc5b0aac0f0229855dd66811ec655e95028d2620daa5549deadda75\", \n\
+ tag: \"0ef0a6ff62776a2e55608eeba9d3834a\"\n\
+},\n\
+{ key: \"ec72e13e6d4527d5437e6bd576047d51\", \n\
+ iv: \"8c0d35a6edaee694cd173e67\", \n\
+ pt: \"c0e8dc7876556cb448374fb3d2ce0965a9c943ec012760c94dbbdde5be8d5c9fd34c115d0e0fb07c37d6caa38ec6dd404bb7565206e7494cb7861db8ccc3e49ec9606e721943657ba82acc7f03105d2e3fa0c612ad882d4b2136aa3ff781d72c7de6c89b7cfde6a6e1cb67349aa93915f6\", \n\
+ adata: \"5e390e6dd16805789ad83b1a0de49f04f4c550032e3bdcc9a93b434d52c0d391717a410a1ad739bfb6d09b38b39326584e87848dc661fb0163bed87e344a8bf4c9f3b8e5b8f4e87394a21010150efe8193bc845501af7104a745\", \n\
+ ct: \"e8e161c3ddfa87706a0e11e73b2446799ac982a99473dac7fd0a30ca2086984984741436d529e66a5fa7505c442b27b00439951a23af55695d1387a3a97fb5d654d55326c55b323fd0a60549d5da90ff5121534c09c6692b418b42b2be0269d5834e12ebf4f110a2a19a2fb4a81fcd3bb9\", \n\
+ tag: \"278d658657000fc8af9b3d00062ef5cc\"\n\
+},\n\
+{ key: \"9c3d6dc19fbf4ef1cedc799a9b4cad7b\", \n\
+ iv: \"9f465a0e1b0e6243\", \n\
+ pt: \"efaa94d25a0124c0a77d51b7ecc6379c9d163fd0a66122fffefa2928129917\", \n\
+ adata: \"1a6fbf4a2333cede87dc8331472c59fb4bc0e38e14173d70f7c4c8a04f4e3ca30668815588c4a8a8aed22a38291104c2dd531a9a8c16e43fc0d4\", \n\
+ ct: \"02bc4ff6002030ee4a73ffbfd2732b238700ae715695735c939523f8814c91\", \n\
+ tag: \"18ffa2a7bf847fe02ddf3de9201b49b8\"\n\
+},\n\
+{ key: \"e562b0a2f4dd45e4c46219173407185b\", \n\
+ iv: \"bc7e5e902a445936\", \n\
+ pt: \"4af8394518c61476b79a297f75433d828395c6c4962cc25a9090521c65a824bd4a94d99d88af6671406b4801c7cda5ea9cd2982ee9985a84abf70cf7246e78450388ca7d9d605672b056fd211dfe9e5277e900c1227c3046349e176645e1813fecda7c15aa027c5b563584715f7d4d421e9175cc0e50bce72362736f4fe7f95a147d0b1d5780d4c63ed142c87bb4d0aad0a1ad2507adb7ff9e173f41f922b2bcf466c96076c0ca33b4f77924f197d73db883b3edd8\", \n\
+ adata: \"4dd6921012acca58d1cb6e1f2b8cac10a1d970c455ec31a66b1180a07bc0921c06949ddd365279ec36f8bb618fe97db7366d7c4781b2afe4a7ad6014fa9f884f353c6c0b3d4974716b2fccfe16cf0fc64da652404ac932990811f01bd9ec57d36a64645a09384a09aa241a29f684af665ea072e5970cf022da1e957d65bbbace11b7db62989f97a01fe8fb23ff0e24e44e461925fc91f5a5ff06498b\", \n\
+ ct: \"cab2924ce7ab0133235d30f475ed1d107811ef1f84f4c6d23651d1ef289af73a30bb753a4689cbec23f452bfb6b83c236af7e7e7f6f3c9ce4e4ada177994aed0e546dd208eda65a73db4f25d1dfe4acbf76761d6ea724129547895467bae254468f0c1c93eb090b7fa6f8be0ec4c076b0868a143e1554d42a0ef98b4d4c9c689b9c71f0b2140868b024e80cc0b81f96ffedd4b200b4e5e44cff7603f936bd30138482b8ec2e0083cab888943f1d51b74e4a6ba55bb\", \n\
+ tag: \"b70ffb891f0cb8464e397f96d6e24228\"\n\
+},\n\
+{ key: \"b59b9c0e359befd5798b2cf49954e591\", \n\
+ iv: \"cf0bef60fceff9dd\", \n\
+ pt: \"dc8b4b2411bbd90173bd284495d564d7e7923090fba564821f8d5916ce2d2d01720999c2d8cba9b8\", \n\
+ adata: \"2e3a358a7f583e294310a74a90f70fe787773a26581b095184c4c729748639d1115c5342f6f3898848028d9a9b3f90c3ac4bfe8fa49c7faa28dde84d3df6916ec742cd07765a8a12612de2919dbb07e6543f2a0a46464c9930a06371d21e5d7dd30a654fb365bd17b8c78a6a3d6a74ab61713e0cbaf16d1bef05fb8e972adb077601603dc2b86e84935a1303a44e6231c7d2b5803d4e9497cb5cf180fe6e8677762b34bbc6a9\", \n\
+ ct: \"cfbd5cad79499c491b6064b581953f43643595301358f407acaddd514aaeaa3841c30efe88313904\", \n\
+ tag: \"21e3c6ddcec735eb2c8ccd897027dddd\"\n\
+},\n\
+{ key: \"886a8362a88149972e4d5823fd528fb6\", \n\
+ iv: \"e0fff7708171e7ce\", \n\
+ pt: \"355e3d2d42461419bd598e5c6cc0869f81339fea8319425f7bf4ac1eaaeb67714af877361815173613b9721f447515144f44a573db\", \n\
+ adata: \"2499896fc6740aa27ce591bcdcf3ba8f4e613a194ee0969f1a408666779c0ed6ccbce9d2df83c9e12ee7afee163e9deebe766674b0e372ba6b1a28f61e2e32c4\", \n\
+ ct: \"9e45ef02467a0d9d27b02dedebc7b39e2305b3e71bd103c596647929655da436aeff8d5a78787aeb9b0bb3316b3b2525ce09e2739b\", \n\
+ tag: \"f5dd59991c10558a34d7f95e312b80d1\"\n\
+},\n\
+{ key: \"5bf4fe64af92cf6208824a35d208c291\", \n\
+ iv: \"13ebd16c62847a4cb3da07ac\", \n\
+ pt: \"1606232f7e70ae949d921192ee6cd4ce0a46a3746b759b1803181a33010f369c8250007a3c0e853107e867da8256493bb89b89c16a071f146839744ea704e399a13be7012191f3ebf70672d3c356a502a585b130bd91a6e7ac86e93ccf4aabe655cef1c4947b93ae3c681905ef70feb058e57d4aafc2dc2ff47a7bb7ebe0bd0b59665747cf168024f85b16591ce340a63eea5f5570509d56d454b6258befb5bfa915f8a12f87e9b797a823230d80c2cafb17c12c03\", \n\
+ adata: \"6fb00aa3d13b30d636c80bb1c84d63e73d8bbd441b54c2574766009083551582d3b87993020fe9b14a326c10b14953ffc27fcf73a70754bd750c491d63e1c120a7187efd3de70c89297d5f192063e70235fe5115d3baeb0d056b3d3bcc610538a35f48568e38d244d7534a3cee2fa1c2560d54856fcb517ddfbd47f653adbe85e346d97e59d7086719b6b8f4c59304af24120228ec3423b23821447538a8888bd2c3d337ad74de2803599e4dc8d7357d1a21\", \n\
+ ct: \"7ba413efec5f471973d32c8e62380f1662840c0f52da3b9f61ddfdd3458c78a3fe92bc48cf7d18eed1bc4d028fc7334b15b25e0482ccd360ce7cbbd381228cf25efa25b0b85c5b44a627c49aa3dad20071d171f7abe5b1f3853c7b1a99e19cb148a2abef7eaaf7d0aafb541710b4169914721fa182b4e1be4f87a21e4bd3a35b5a1ed6b9a3367a68587e2c0e3d27521f0661cc92d19896899e8ec3dc5ee00e992c93e4ac042401430caf48c73cfb5f1c2d83fa27a5\", \n\
+ tag: \"151d491e9146ca0a54dae88e5fb9152d\"\n\
+},\n\
+{ key: \"1a6fd40ddc97a132571d38eb3984849e\", \n\
+ iv: \"608a4383c493be1dcef1d00a\", \n\
+ pt: \"d0770f752177b926d39754ef4024d571a782887f3f9693642489c97b48549609eb80d51af46e7ccd528bc3a0de\", \n\
+ adata: \"ef9760391ceb33cb92986f8957aa\", \n\
+ ct: \"bf9074fed8373cb71a12a64f0411203a2d5a78f42473eabd7ceb47d1cc2b5aca7ffffde6e1ab4f2e90d1a139d7\", \n\
+ tag: \"6a766f48bf9f90d48a4d2ce93d1ed44d\"\n\
+},\n\
+{ key: \"aee180293157bc3a3046bfcee8ff4cc7\", \n\
+ iv: \"dc3650b4dc7f6f968d579b73\", \n\
+ pt: \"6002fe4e0f0ebe808e09a23035b673c47a15aa8fc53b89751e30befe101e22827dbf17a93a4a3722c087cba4bf924d07e1d47afff9202de3713d93b28c257cf9505b7a53ae189742852085d2b8b3c44096c303967fbe234dfd7cd3248c29e3d239269e6a05d34d653ae996fe080851588243e7c83eec3d8793dbee557a5fdd48ee4f71032db32cb3d7ce39ef2a163adb43d440ef3793a2055d41c66ecbf628dcf0b0aae2\", \n\
+ adata: \"b20c03c026599a1347473b8d70a5034a4bf2d9a52cc9c6a48fd89ae88cd1eddca85911cb57684d5e07ef93895de0f42822d10d94c9829793df9efcd83cec3899e882d46be5c753a8143f491047f9393e7100b98d4963\", \n\
+ ct: \"4aa6ef1e215b02a76860b5e5bf659377c2e1322e2b55bee125f59d39f08b6392509e3d524811c556abe987df374a45c5ac2fb83ee3dff6f98c6e2e40b979fbd4011885a0bac935f4dc8ad97ceade55abb60ca9930c58858a1ece8e732b3d3c05a49e443e7553a85f6192d3c74a5a1ffb2536ea9367901b0cc799a366015a05b24cd05461bb10a4367689cb131d35607df29646c0e64af1f289b444bcfc8b3150d2f3d12a\", \n\
+ tag: \"34bb77ee66991dd09898a720bfec07c5\"\n\
+},\n\
+{ key: \"309913e00a4c7d8190172c69a486b694\", \n\
+ iv: \"ad00bfaba8c83ae6f4b92299\", \n\
+ pt: \"\", \n\
+ adata: \"e5a19c42fbe32bb777636ef4d70c03ed8602fee3a6cf3f8f08dc5e7325b8ed6b46cb1433a4823f19619a2d386bea45eb36df9761d1feeb9542b25e8e45\", \n\
+ ct: \" \", \n\
+ tag: \"129364dce0249cc74d059b7f470698ff\"\n\
+},\n\
+{ key: \"c02514f4ed8bcaaa209ef38a3c2efa72\", \n\
+ iv: \"3f0f4d348d95a832\", \n\
+ pt: \"702195887634213a1d955ef82c4ced8b712b322d2b6d0701d6529af6cc7c4a1bab6e67c8a608bb69864fa0492259f593f8ba2e5b17d6e26f8bbd48539c646139f4ccba07a0b9013b32ef53316aa2b8d40e40e3e346ee0da760cd17c8113d5b6453e86ffe6c0fee65cba5bf83fa8a49297a27b970bfbdc0046cb1e0b3a0571ead9efaa181355e90badd49bfc5b35edf95\", \n\
+ adata: \"3e1efcae650fd90ee2490f531463add13b3efda9d8a517ab53b202e4de4a421df58f95b3e14f5d07eb67c1c38682e54b90c72f7fdec01e857f963bdc6ad9433c68dc200f9dd7fccf2b122ac802c810415b42a412e029cb1c1df8799e2795b6307ab38b0a6a6a8754be\", \n\
+ ct: \"60fd397842d2960114071d1fa3d5f0c63c6d1780dbd0b2e964d7a2e80c31cc8cc57cc3f7543dcd43620b7bfcffa5b86fb93007e2a19cf930acba364fcc7a8c719588ba53eb71acdef6af46f88bd9d38c831f17d35dda7fb863f66872daf9e1671184039c857d7003725f5c684db78fdc7c33a29d475403f830f9b4e3daebb4616df5861b451a948d8717d5fee38fee39\", \n\
+ tag: \"cf061d291b076e8c43ef5d5e78311ddf\"\n\
+},\n\
+{ key: \"7a2403a635231613050f3c985c8c59b7\", \n\
+ iv: \"77f9b92745e87ab9\", \n\
+ pt: \"c2e4dde306e8487026e825549e5ebb877d9274be6400ef1bd541af15\", \n\
+ adata: \"5421d9247d9302a04fe0f5218fa4e4827954744e41cccf2bdb53c884d69d63f9bae862f940aa4037b9257b0f27ae402b73021a2fec17b966eff8ff37bbc376a1448a8529412a4cb51adeccfdba64d252b3b04e5441cff3c9a2369f0ef38cb15d956171d53599ebe5108123d8d786\", \n\
+ ct: \"603a60b4e048a034c1ef6130b23999df1faac62708fa073c8ce7e0a4\", \n\
+ tag: \"0dcae37a0581ea81b79274f28d6edc8b\"\n\
+},\n\
+{ key: \"dc5c650b3a05207a220f807509b8facc\", \n\
+ iv: \"e8670dc57a6ca92a7d1f004a\", \n\
+ pt: \"91480f1908530cde551a4922bec5c3d3a999f4ce88e7e4efa77378f68eba01bf8513f309342ac45ab1a0d534df26f15ce10390fdb6cc7ca26a8eb3e310fee9b71a789fe280a66c81dbb61b665c5026b08efb311e44f1faa171e645251e8cd022e51e6a80062be85b52dd4108c7db1015b931a561ff95d544ff63b8824d55deb834f414f25b7dee0b62076c1eb5552f2c9078a573\", \n\
+ adata: \"c496c1a27d74cd9fdfeec96cb0e8902ee35ecfbceac377f8ae92a40623514dca9db92cfa8a6cd5b0fffae030f05464f89931a50f5bc7db11dd06702bf6c445acf51615b9450974a0ca88bbbee8b64f653208446f2345f1e622ba1e48aba162c04d17cf5dfa9de8a6e7feac6496b4f0038b191c1c983a3d20708bfe0ea45e26d9ebedf0ae385a62a83a1b5a\", \n\
+ ct: \"6e4d28992bb8fe3010647f8fe5352345d38f47485b53ac26c287e2ef0b06b8f73e0d793ae187f33f3268c2ff80cb167f58daa23240fbabe35a72a6db2ff3b3e2065fbafbfd531b21c82ae291938e7840b7c5fef48955e3c21c6a0b2bb7dc99ed6dc30b464bc20b788ca8829c53a3d6f7cb321ab2864dde25372556fc0de91d0efb5b84167cadfd07526694b39c330c233e69051e\", \n\
+ tag: \"d1c59c6f79dc816dec97dc7b73e718c3\"\n\
+},\n\
+{ key: \"2bd237ad7557c6ef52a95e4379117450\", \n\
+ iv: \"0fadb754faf6b501cd5d8fb2\", \n\
+ pt: \"1f89157c1a17958986b626a8b84b333a34a2163d6eaa10c799906dce78ce0cd60369c4f1b16c76329091651eb3476147bb91\", \n\
+ adata: \"12194a52fa22e1059a3091addbe264c51a7f8a8b56f20b2816755d4d3e0d32e79c60c78c05c272082decc5d709912246d181ac7664\", \n\
+ ct: \"630e48d71cf6ff50d74e812a1b21f47361fb2364e4320fc36d4661cca426a2ad66956a62823932396923e4018d53278ac9d2\", \n\
+ tag: \"1219f16cb2d0b868056d8fdc221f6573\"\n\
+},\n\
+{ key: \"250a525751c5278362addd4203e5d2e6\", \n\
+ iv: \"70ae382641d88b12\", \n\
+ pt: \"bb3c76f434915972d91b14bcbd76c1b2cc5fa5ddfee0a444c97ebf9525dd003ba6543aa74e3b6841102f8eeee633b5a5846ff5a058d48e9ef379e03029ea6cdbe46b73e1f38012b8bc0c21e09ba7fb42f8fa13630c894bf37ef69ac27b199beeba99cc794a291a64d2ae\", \n\
+ adata: \"4d026537bee15e9c6ef3131343ec815d967c4a7106af988941ca5d9bd0aef2b305526b66bcd2155a32bc501d04e1760fdfcc2b2024be0c750e59b2bf4aba5067b61086\", \n\
+ ct: \"c119fa8a97a578af77eb6610c1d5df2a83981943c803a8530fb46df84abdbc233bcf2b59e7df73d50c232583758fa57a67949ce335f8903f158fb828b07ac8ad4d036e0e9d1e9f8278718953c9892424a2628aeffd3ff169a3d4037dd3e9cbbb8d8ca1163f2389f80dcd\", \n\
+ tag: \"6c0dedc83fc644b2d06b95ff0a797f94\"\n\
+},\n\
+{ key: \"bffec4e2c27370d1ce9e58a1f546dfe8\", \n\
+ iv: \"587e49c5a544ba3a\", \n\
+ pt: \"636860e2c6df6ad44d38ddca377dea5e4da0626401fbce6be8a8301d5942b648471ed08719562f14cd8a1c108f289d47e0cf5ad8ae33b85825da965c65998637f193a8be8044adff86ba86ca6298c3f9e629f4a10778e34ec266710af8d46fdefab3b001a2fea9516e7173173687\", \n\
+ adata: \"ed4da21d33806f8d3050af3e4d7328d1913a3710dac4dc01fd0e38f9bd1d021f84206b43d9c9bbe8b0f447ef112c62791c6b29750fa193da46eb6c9ad9ca57902b994b49639b2d9d3ea42528e1554e5c4eccc4dcd71d769f56dd445abe74640da934\", \n\
+ ct: \"585a04dcd3de60d5851ae6e7652dbed27c8f3298ddc0ed538824a7a42ecf16f049120485afc1d03f06fa50e7b0fbd08070f553981c8e0450cf96dc9d6c2ce633732fd4c316bf8f39e7d5bb0eb66a5c748f3872ff6e2e3238916bc153834ce919e29fca7fe6a810af5d1033e09851\", \n\
+ tag: \"60cab761f8c3f2e8c5d3cf95dd018f89\"\n\
+},\n\
+{ key: \"0f051fdb628b4a2decaa21425d63dca2\", \n\
+ iv: \"b73d478faf5a3393\", \n\
+ pt: \"444c5a1b739f1c9ea2077e58a1157928d90133a1ee0e0118cf1d9f898fb71d7c4ab4634a9b4d8eadfc2f\", \n\
+ adata: \"124701db5e6761d3482660f13e9a0b84d27f72bb41fa17c6f4b5e4056adf6d0b0a57945c48ae51d3aa22d818ceee3d7f5752cd126747103e633ecde0e37b13866a6a446946b7c631d310a4b7c39c10a47a0ee2576cb5fb6706082ba9616194d1fba6c48533f6be550df9e87178\", \n\
+ ct: \"1d3173d028690d8c40e586d4f339a5b37ac50cfe3a3c6f602a3933d59475a178816afa3f35b771a28fc5\", \n\
+ tag: \"c5ef1ca56389246501ad5ca2005f2324\"\n\
+},\n\
+{ key: \"410a5e2762f185a225207bbd0da9a81d\", \n\
+ iv: \"21279514141eaea9b5927238\", \n\
+ pt: \"086e\", \n\
+ adata: \"a41c25d5807c65ca163e2e763a8cc628d5c031fc32b52954bb55921b3ae2e0\", \n\
+ ct: \"5603\", \n\
+ tag: \"5759e113a61da0b79f99ac44b42e3a1e\"\n\
+},\n\
+{ key: \"80d02fe752572644860176dde26ec276\", \n\
+ iv: \"d05953517fdb15d5\", \n\
+ pt: \"55d0abeae62474c0eef4d1f1777c61c24acb6777e90ad1591eb9a6fcd0400e2370eaa713da4bb96bb00a8b976487eac29b5c3355db700875d90ad7578beed28f487c7b69d6597838fb07ba9ad9\", \n\
+ adata: \"7797411790deb1f207020f014e158c57dcfce157ac890ab976711810f8395fbf15258b375cf165c32b5187ed456f7db48d0a7e7f64cfbe7f405eba539d73c3b162ba7615977f4c375b7823e737\", \n\
+ ct: \"e3ce3cec01201cfe67b96c26ea581c67909ceac3b7b467932db6e368901db5c51ee2dc139dbe55b792d8b3fe13a36f9bd84ce6b83e1af0f7cdad5211babc62f3d06287a8df6766e258d684828f\", \n\
+ tag: \"f8f5f478eb38314c1c4e3c7af5abc197\"\n\
+},\n\
+{ key: \"b017ee24e576973bb77632a0e5cc77ad\", \n\
+ iv: \"509e4bf1a5a1ca65b8378dec\", \n\
+ pt: \"732e57235ef037731c3727d57c91843a2d408d2f\", \n\
+ adata: \"5112538d21ac386080a574469d0fc8cb45bedc366c667b6ae18667e6fb56772e2448665ea66f90e77ac222c4c993\", \n\
+ ct: \"451cefa47272e318e8b4162c64c1ac260264a172\", \n\
+ tag: \"c99804965456fa7f9514869fb5948c31\"\n\
+},\n\
+{ key: \"5fc75bd25c58377bc31e997a2487ee86\", \n\
+ iv: \"35f89aaea1baab9ae80133a1\", \n\
+ pt: \"d05496c4f62672b4b96c2d167dac611a04b9200a710818ed12cd510cfd4bfa7c3a1b8225c3efc8b580bbf762cd7785bb5d8d3ac4f3ebbc883e2cfecab5b0d7bdf8119c8f08d560da95ad32ea90d37d9520c13e024fbdd2a95010fa29e7239c22d1198f6467a2c310cc\", \n\
+ adata: \"b5b72a74dd3a2d340460e0c29923ddb3a9fd3f2e2936bfdb7704ed49582878c7638bc4716e642d12d174d7fa66e7d0646bd89035e09e55e34d248bbe42e0f8bcae0370edee7f67912571926d43f3fe901f8d7f9dbff8f348ad0697ce692649662c2c5dc73e679c\", \n\
+ ct: \"2fa119362352ac078b3b449860546b0670506769cf4b9f8bb826eb3d9ed51c34a3a837b4476c6edbba17a1c5d6ec8f9861638620686de90a7cf8e38a83180d09a11650b3fcd4c2241f97941b78b6d258446595dbbdebf7754ff778ff6b96c102041a17f9dc4e733efb\", \n\
+ tag: \"8fdb4c6898fe94082ee1209c981a4d15\"\n\
+},\n\
+{ key: \"980ea55a29f6330ac8c2eeb3ccb053af\", \n\
+ iv: \"e48a6dc4ef7abb9c\", \n\
+ pt: \"eccb7546649c45bade6a8b6e5560a2999342cea3ff2e5a5ad27d2d58f7345ecf6bcf8e3f01537d8d68858b61fd812d34fc7a7072a7\", \n\
+ adata: \"ec08619ef1f296dcf2bcd3c39209fb020b58a4809dd30c1560dd893ca5394406f821f1269e59354fba910a934e31856ac1066be28a8027185ba046afe7cace1575662762314115a27e8bb85471275673e2e59e965b5c08a9876c1efb7ba522a4cf57fc4fdfa46b8e5464259fdadcf5c083e3630be39225a6037af752edf67d5f72c9c3a6cfa4597833\", \n\
+ ct: \"95cb2aa6d44bfc65ab786c111ad8148648a96ac8b96afcbbdebcc94d91a837377c256cba3723c2581b640738f951f175f1f317b50f\", \n\
+ tag: \"b61687b62988de1404a92855ce0cde80\"\n\
+},\n\
+{ key: \"1d98f42ad14983101548ce988dca3a24\", \n\
+ iv: \"fb143f64f766a468\", \n\
+ pt: \"5a6be08fcdcb2cf0e6d1b1d2982be40b8e260d91b686baac8a77b9fab3be8b3a1cc375b1c2e78285bb6d94b6b672e02bbe4d70daea4f2be7275e66959d4ba93b8546011b8d77e02dacdfc33781c030cd7bcd045ff8ccf3af4795b0e0bb9d6efb1f86b2a3edd21339f0a1baeae34eb76e031db551c127758523d44f1bdfb8dfb994a96e51c40da46b93bd7cdc05182e731f\", \n\
+ adata: \"bab4292314120fa83ecd3810b4e00b8ed7f09b13ccc8cd14940bf066333093f271c15a1826c3bb520366d5b47f1b53ae6cfd60cb183539d91314f0a57d8152be4887ca49d4b0cb72d6eb7d4485b6bcb740dd9bdea20a0e2f79545d5804f9c4d8d0fa5648477de70b8f336ed2753da462d3e36f33f819bf01fde87ea3203e096d9e4f8efa89e79046a2b0\", \n\
+ ct: \"adb4d6aaeec32758abc2e598688d7dfb42f0a2703e3a453f86cbecf55465fdd6cc2b8343f3d3efcaae83367898adf8e19b03fc6e9c1bbf3b101be91459a9f06f4ada0885a3a203ff94207a93ea8749b3dfbd6a7a9e52ccf266a1bae274d60e2a7cf8a386679686feaa7dc507d9688f707d8cd1ed7e0c9e6dae00fc04b075a1aceb7a675eb49bace9c06e937ed0aedce640\", \n\
+ tag: \"b4fe699e7857137b0615a675ca883356\"\n\
+},\n\
+{ key: \"d97da82045034c8923ff62ae14eabfd1\", \n\
+ iv: \"032f84659edc510a\", \n\
+ pt: \"ddb3c89d639c767eafa4e9e7c505f074dbf8ce05750c803df52060c9b9aa8226303ba4a2e5e353dcb99e3da9c9268b1fe825c3e6aacad6c5782432016e70c15b78896676799a53b4f5e29bfc19b83e9596fac2f2d35d27136782234638c04583bfd2609b4d5dd4f34efdf044de8f03c06220301e38a51bae1bc4ac8cc17d0821f5eb4c0194a4f957030f2b70104ca40c9d31695f67588858a2d50c38ff2b7d43b3d4a5e7df59ffb0af38b936f9e8ceae9c8e72332f1238c9936e150c\", \n\
+ adata: \"37ea046fb4ce1558abcc592047d78441708811d3a18319e265d7b9001fdcc5b4498e822fd543c0bf84fda85c8b3a2675aa84261196aa7190e3a35c57c2f04756d889c8066d7f814e1222ac4c5f6a16a120af6a9a68a2061d45a2f471f7ca1ed22eb910\", \n\
+ ct: \"e9769d2fde4fa3b16d7482bd340d93be78cad3e4002fa7c5d8545d733cf83237adabe7f7f2ced0bacbc39222ac120c4437c8e656ed516e0d0c8d7914b35b07a8f8173e9f5eb5905b54d7a9a4490ae388920cd1e482e11722301acd0374479fe8b621078dcd82c64febf172093dda7dbea117150c0c906870312fc9c687d9ee6945b4694e49d1a1032026c08414c13d284faf00cacf39904de970a43367eeb93d555c44cc67e10eabeea747eeb7c51592aec0245d3dafcc345c3880fc\", \n\
+ tag: \"ba2493a63c990bd361b3d0f839227671\"\n\
+},\n\
+{ key: \"da4747e0c3c984ba3c081c93e9f0d6b3\", \n\
+ iv: \"f96b2c4bc92f94a1\", \n\
+ pt: \"a5bce2c02f9a27ecab44645b34e11369025f631526fa3f2f6a2c729de9a01de75b63865e1e990672b51026877a6085e1c60948b1840b18817df66c6fed832e67dabfb0fdbf11742743af80b58b384eda69a60e8101b74fc81b5328\", \n\
+ adata: \"d97c752a\", \n\
+ ct: \"55899bd9f5327aa95c33467f5b56985ebc5c1eb5d0b290c04f6c91556948ed39d36f3f50298efd9df475f880a94cff1ab5fa5f85cc64c4e040e3ce1951a5261f67dcd94bcdba31d431b6d94d9e5829a59282dee607b0066342912a\", \n\
+ tag: \"cfe046d0f57039293a9dc38ff2b3fa1a\"\n\
+},\n\
+{ key: \"1675772a7bf5b05bb211c923fe3f1658\", \n\
+ iv: \"d76584e7103d0333\", \n\
+ pt: \"5ade326f2bd4c231e7233385cab209a6c0ed93e51206a097e9c2171496f7d56b858fca949d0db80ad8c3de7b0d902a0b31acc21cbda98a4569ec93049cfc1f50adf599dedd441a9555c78c69e5abdc77bfab619acdbd52d0f1e7b5d7a26795859a91fbe8d989ca10eeb75e226d4bc5f8ec6f8ff1d76881255c09d280c633c1f3dd151d6a236d5ce66281071b5301c46ea64b9bceee4a76f0949c07b063d500aa1175cc76cba741b9f3cddc980e943a531e58e419cf302478076458229f\", \n\
+ adata: \"5b464a2b1c89f8e92b7c686d61a93c2e\", \n\
+ ct: \"1e707b44fe468a7e3b622608c1453d3b370e2ffb811c55dcb8097988b93d1fc8451c118d6364ec81c625cb52b87ee509578a0ead23c3a79a3ae7c9b39c3024ea9c7d93976f16d47dae665f94d798864d15ec9251b6cd08f0f0a7f7086b7bbe14dad50a174d7a27b07d49eb43f5303c3ce567e052dbf080a75181831b26217c41ddff0dfc6c1acd376f43f2e232e0a9a107c3ef5fda892241b546ecfdead181d4c92a6897f46762281301fd4df2a7c2aad2b78dbd2b30a9514fd4e7d190\", \n\
+ tag: \"7cd78d6fa7bdedc3ea7d29abeaaaaa93\"\n\
+},\n\
+{ key: \"447c236df577f95f4f5e54bd94f4986f\", \n\
+ iv: \"d47d593ccb2c2ba5\", \n\
+ pt: \"ddc2d62741270e546542650cf149dcbd8371acc9ee0d60133f7a7d44fe746999205dad24f2afc90f245d11e05e91c0f1103e64f39cdb360d661a2b29a78f4c9c85db8f92b63dd96130c639842e65a42b67ce80fb0d86cd75f7\", \n\
+ adata: \"95cd4c05f5fe29b606080220714d0d0e555b677ccca451df0682d0dd8b3cab1f6e70f7b496e36d4a585237fc520d1d1e2fc4c75a4cf1d633fbe739c97e401bf03da8de57adb429813502a886d5e8e116ae07a65aa9e7cf1811aa065acae4fcb3a9bc56b5d243481730d27ecbd801d41f530491bd5e3af0e09d\", \n\
+ ct: \"4e87d8b9d9e57d1f4c528c7abd9593f1a567d777d84c80ef5f63e3ed3e4bcecf47ee46dcce35dfec84a23fafeff83e50b9bb7283fa22dcabbdac9dc83871d6db7c9f935a645eb6e03c81de75d44babb7006cf10f460b73f70f\", \n\
+ tag: \"f9e0ed54eb953e406edb8ffb7913e7bf\"\n\
+},\n\
+{ key: \"21f066abbabc6419423147b8e7d96b5c\", \n\
+ iv: \"247350448133d691\", \n\
+ pt: \"5e61692281c9a23ca69b08abcb2e3932d96d1a34fc8ca134383604876b0183762fc23f8037968930ea\", \n\
+ adata: \"e1bef37edcc9a50f7834ac6e74b4673f483cd3e99686b113534a4e9f406bd633d015e3a24f77579d0be54cb3abe0b12346dea941aec325593321aee20c269d1da96e135451d79074cfde382276b74bc2d16ac9d701b3ed79f966dd3becade046bf1a\", \n\
+ ct: \"ac57a4e6639e282f89843ee1c0a18dc8ec9241102f0cabc8eecba109b2b8319fbc7a65641ae1d6a5f6\", \n\
+ tag: \"288ca94679c0bfd19d5ebd5f4d0179d2\"\n\
+},\n\
+{ key: \"573e3c7ffb3be5850f824d0f0f6c7795\", \n\
+ iv: \"ad3ae262d63b9fd2\", \n\
+ pt: \"6579e0f1a0fa5eb5d3ab43d8f6e4884eb7998b371e64f6692523c0f447de5d880bd52c0563a8ec98d2fba1a2d2457609b44810aeef82c097e0dea24a0727fce6af334b1197dc91edcd86f18d69fffae5beb9d678c9eb2f8a\", \n\
+ adata: \"7eff72740078536dee0783a1d1db9a7b234200b8791cdb7163116947666c1b409df7fbd40a58d4c4c7\", \n\
+ ct: \"bf2685b9c958cb2b90ff2a0e6928201be7f806ee343abc4b53715806fd4c9c2d0159bdcf0071ce44224e2a8aac8a9c2bc8cc2292caf56c674b85353ebb901d7eeb80e4a9b012bfcf9f433395f342879d839dda2f8172c411\", \n\
+ tag: \"059000148fc03bb38b6630cb2e516b1b\"\n\
+},\n\
+{ key: \"4126da3ef72e1ca2e056ad77b3bd17f7\", \n\
+ iv: \"2cb46e05f1981f69\", \n\
+ pt: \"8cb6bd1a2415768dd6\", \n\
+ adata: \"92e1ec01cbcdaf48d9fa6e0f27becdb7226e950955943cb5487333526d7d19cfb0b558e3b76665d8427bb6ed75f397da66aa2ad7544a6970b3db093ec4eeee023242a71dd41c470a19a3dbb4286ad61d59948e705cfd7f85142a728888939d3bc4f1e0683094dccafc7225097f3819050c45ea063a65e88395c171e748b1d605bf604d993e77e5f867566e9c6e45fc1b58fffb5471a2ab40e067d450150a\", \n\
+ ct: \"3240faea3ee1ed75c9\", \n\
+ tag: \"4f583b62beb4553326eed72585650b71\"\n\
+},\n\
+{ key: \"86080409a6fe027fe3848e069d7c50b1\", \n\
+ iv: \"9de99846f02e1d05dc76da89\", \n\
+ pt: \"\", \n\
+ adata: \"4339ca9511a0f0a77640323c0bd3163367ac591c7ea3da3515a734a372699965ac07b342e5975a8a9d4b7a1495ad9f18e9c06565f7769d0084ebdd95f9f28a48b95c845e9b1fe96b8669eee0d45b184912ba80515e337139ea6a26fce50ba1\", \n\
+ ct: \" \", \n\
+ tag: \"c95a1be7b1414390f78d5f7f5cd72970\"\n\
+},\n\
+{ key: \"7966dc66c3f5e84dad47999bb6931846\", \n\
+ iv: \"c62f050782efd57757d9e3e2\", \n\
+ pt: \"eddcaea0a5e10513320514a2b3af881b0e415a7d6fb545c589ba87bd9850a7e3d5842dd898722d3c93c1241296f8ffbaabcfbe6876887ddf78b72ee5441518bada114efda88a7b7e0851349789c0900f2fbb43e2afa0009a2237daea0f248f943bb0e0d419d92936acec5bbafdfa665d15\", \n\
+ adata: \"c3a0b8727e606ec324d04d73099fb026183d0e783c7f0cfa2c0b28514fed460850a3da8dea7491fb01bd82866cefc650a1407bbf49b0ba9a25b3ed\", \n\
+ ct: \"0c276a14277845b98f39018360395d23ee9dc6c3677bcd342a1261a676273da9e46e8498ca6ada6e310ed53cce331c5270a3f7001cd7ca067b939e343f5307bee1c2f2cbe2988b330926ef561030734b1200c98e5d17f3e6dd39d05b8ec5a9565cd084bd57bf73420f9cf0a71bf0b5e670\", \n\
+ tag: \"86891ffee7cd21c6476854b56d1650b1\"\n\
+},\n\
+{ key: \"9f11ee149cfcfbc8c0d84ecacf8214ed\", \n\
+ iv: \"009b2d90d82914ff\", \n\
+ pt: \"5f46d1e89c2fc0aea84d4d806dd48f3e23cc256f3025fc79ade9ef2d53a3154da369\", \n\
+ adata: \"340bdb812e30f18eac91bea5ad2f16673d4f24b859270a90c74e56e54e669ced1174247d2c34345e02026e3f00e4e5facb9f72f8da716ae5347ce4401b7157c47061eee40a9745d2969ac68b1db75c8620cf4cdd8ce81bd51ea28059d2bdfd3f00564e6796581a580dc56fad\", \n\
+ ct: \"9bd752e8b1d3fcd07a6c85d77f4af8dfcd49a9db505a708d56784095aca7c3544e27\", \n\
+ tag: \"c16b7a6db85c14f23a4a35d0c77018de\"\n\
+},\n\
+{ key: \"39bd4d5b21970564fa0a20a8cbe8a88a\", \n\
+ iv: \"31f53a2812c1aa33\", \n\
+ pt: \"9cbd6c2613c16a67decf62628a9a0262965290f32c5546c28a3a5a7db888dd17ce1b86d9a5c8498b011fd00152870fc32de66790519d8bb3d4233355bcf201147cee34d701101a7386af0c236fb6027ddeee2c31714c04db9f201a7b419833740a6c79d582c6de762048bd99517f9e7f478735137cdb6b10431977167f5fc4bc5c1160be131be1db20fe7f\", \n\
+ adata: \"017fe8ee14d4aee2e83d520c1e679ce0\", \n\
+ ct: \"c00dc9ed6bd5631119979dd4bf263f5e2e5a5e61966e106309b49b62e05812592e6eb2a303f86b21714b572af2e5dda2e703897189643bd07db290f24b04a3305113c197f9709a379885008d6b797677eca4abbad16b7bb58397b874f7ca42048616d346805363e278d034ea79bea021d8dae2c3295f0f1caa967c7298b51fa2affaf76671a9bf77958f8d\", \n\
+ tag: \"146b073b0d27e5485b14ee05823d3fa9\"\n\
+},\n\
+{ key: \"5212f6086fc0dcd48d75862774244c2d\", \n\
+ iv: \"8541bf71d403c227c5d013ca\", \n\
+ pt: \"a1c22806e2b5\", \n\
+ adata: \"bc82d4882757c0bad255c305d41b2cd2e4c8958a00eeb10b462e5d1963a1f06fed58cbcdddd9a9782d5c2400ea0bb637cd5d5a6e8d2786b2b7a46cfb30389c97c11e589dd53419ee0a1a6b3438d1efe60ebe6a56874698e0a6a08c4c496dee67da9ede3f71af\", \n\
+ ct: \"83d36d30d75a\", \n\
+ tag: \"1b3c2c6f04dac358efe188758d0b289d\"\n\
+},\n\
+{ key: \"50f5d4529762c4429397884849cabbcc\", \n\
+ iv: \"4e986ac812ba3feb\", \n\
+ pt: \"951e07b3551954844ffe0998dfc1ca018b29bec6d0d8f5e430e3476cf61f5a53e93b35963a1901d966552c6d43a8d24bf7779356fa2cf4e15fd99ffa3378404b6eb3122c113a053b3276c6dc00328a7a69a90fd71dadee81b237cf\", \n\
+ adata: \"3d70840dfed7218bac8f6d722e1ae86fd300e9315f1f00008f88a8c465e33c0464f4deb51af80abf3d34783f41e3f4f386f10dc719784ba50e943b5aa3f77aa3ec45d58afaa0437f1e5cdae8e63abf6382389518dc86b8d8aff29a189d906bb25f93ff277ee25104da607235916cbb519f7599d5c5175931e4560f3371f426489de8affdc574c5525d3b03bc170f18db953787016683e03781ebdb05f1d066edf15195eedf2eaca4d2bddc92f4d29968bf8ac68d\", \n\
+ ct: \"efbd551ca3284fa55741d3b66ea8bd23ab127e65c6ff458786dd70b5e9754f7284e5cfd9902f99cd59bb6cc48a0c8462528f8975f6f5edb4558edb56f5ec4e24d5af16c5220b13f15d176bdd132be873fcc718f4919085a6215d6d\", \n\
+ tag: \"df4a8477844c18a5ea6360a9b6772689\"\n\
+},\n\
+{ key: \"8374c5deeb19235858f35409d9fb66cf\", \n\
+ iv: \"b742f25266c99e3f\", \n\
+ pt: \"217931f4741555e7cff1ae02f78bdf0d70435662b6073cb8ced454bc2ed266a47f9c1cb097712a3ca0d30cf6e8f3b9bdde16c9358245e5c7222ba9ce\", \n\
+ adata: \"21880d61207fa581c22af1b5da4fe7ed7cd52298584d21bd507087f0b99be5a303323b715fee9f19edff62d3eb037b10cf28c61321691ff1bb63886c7e7db8a20b6be5af672f67c8f1127bc0b75669046da4fe0b94f0e91f1d25656a53f11edcb1b65464e72feeb2993d51e32112edd1a1db0b16d3088741da966175762df1ff10c4aa804056ebb0b042\", \n\
+ ct: \"74b6e2207417f1cdc05921036cea0031bc5835c33b9fe83b4712ea81bcfd2210ca03b73dd2653e4cf0de82e765e1c5740b76edacb6c62f733037397b\", \n\
+ tag: \"aba665d0092dc8505241bc52b7e035e1\"\n\
+},\n\
+{ key: \"076d0ef652ec434da81e70e84ed3b951\", \n\
+ iv: \"c07831c0c5c6b937\", \n\
+ pt: \"6ee7312c562ace7d70cf1a3f1a76acb58ae9168e8e0a1e8e091db98174b3c643ab1ec6035532d5ff23\", \n\
+ adata: \"748a284be650c754beb4cade9158fcfd58c064fa97cd969dc9b5fd6df08402548de6c0c15f8ea36176fde62704985e6fbf6872b3594ced8201643ee274f8c1523bf970c95f99713a5e68752c17a5a65973c969d139ae763ecc6bf770f9042361af624b8881e643615d59ea846c832904c65ddfd5081d3fd5aeda0f803bb525fe8e13e11890c9c567cb56f495805913a80a53b133c5e56725c420d70dc45882306aebe872\", \n\
+ ct: \"c17f0a1ef7fbd7a32eecd37718d844172e830d67c1c13296e589a0cbd9c093b110ad5cca736e842d2c\", \n\
+ tag: \"02869853d9d265fbe6a26eaac63811f4\"\n\
+},\n\
+{ key: \"f759b37637ff6c2e5f4de05422624866\", \n\
+ iv: \"16a2d0c2d17712f5\", \n\
+ pt: \"457847337fdcbf8ce1d3490d384ceafbd3d555420238fdfcd806b2456af8b6d91fd6d04f2820e355ccb92e1ba611b72517a6b83e64e00eee82dda74db011fac36a9eac083b73214fd1e8a4c7ddb993c1e480c427286119e590024e13836a61db73afbb0fbc58b89b6d06d89899c53dbc3b9b8ad4e63ef86e7a9641265b87a19e0a8ab63677ef1f4ef4a6333d3fef09e546a087235efc9d2595\", \n\
+ adata: \"74b8e3188256aebd8b79020fd4dc\", \n\
+ ct: \"0968aed3a84a6b5af0b52379df9eaddf5dad8f51efc9a9c77220573ffd6a2cedbc9fa1dc2b32a1c9002895123310406d507bb5f38ad13228dedbb0a0578686185c19657925eabdb960e6f66e042b0f0b7574b3b4d498caefb46ce96ec319565febc349cbe7536b4d6ed6ba39523b042c865057e72687dfc422edecfba4c835ec7583edd476f651c872fb3604b215631be02e9edb20b3d9b950\", \n\
+ tag: \"88546be0873845499273c3ac0c3ed11f\"\n\
+},\n\
+{ key: \"2853b17bfd04f6f892dfe10f65d45e6d\", \n\
+ iv: \"28a06b7b3d96e05b\", \n\
+ pt: \"09fa26afe4694697cb33dfeb9f6929c4f4f0fd5ca0559679af197cc3c7b1d17575c666a77c20a79f3b0936a4b020\", \n\
+ adata: \"c4e3fe1a77526cf2e47fcbcd5581f70cf8f4369ef3fe9456af7b\", \n\
+ ct: \"6f07e4681e2a674c020860d10a3a4545e8a71cfb60e77caf32707624700a8d741744adf525abbe1dec473ca304b9\", \n\
+ tag: \"2d61dee8a539180f21b7d14dc39ac4bf\"\n\
+},\n\
+{ key: \"7219942affd3c3389eb8857d71f79736\", \n\
+ iv: \"5833a3f59cb2d08be5c95665\", \n\
+ pt: \"389c92111223879927a7d8795a1bb122d259560bfdc98b631f638212f9ef6abec70a35f70e27f83d0732184b2da949110765d3b0dd40746c7c9ea374fcf91c941b8200fb58b86270f4bc63a3037b4262cbde8dbabb89c759b52c58002e7309a17d5e2fa8d6fecc0bf13d304f3d593384412a5ed0a2c7476ba6f03963d7ff80ec74eaa18000d81a30289f93bb7643a7a9bbfa939055521190d789ec1ad4d97f05fe\", \n\
+ adata: \"af8acabcd5da84387463fea6b4d9d859efb9bae108d5e1224ad58ff83ceb9cf2622561ecbd2133a01d3307220e6aefaeb4497b8afa602dd40da07a3444c93ee20ced463207626135bef67dc7627c1600603f5744cd69e34e50c3ba42bb7c041d160c3e99a12b7eb72526e3cc02b9252181c723c31779d0ccaff40377a623a2e20c0534edeb515d513caf099f744d7c8dd50ff655c68baa34ecd79d995d7b72dfacbc7b8ef8e79d4adffc312f4dca4169761c53d828\", \n\
+ ct: \"0075ac2ec0e87e4605e7f0a5da232f24a1508caf2e13c2d6ddbe38fcc75cfcc81b77850b9e128074273dfe6e94f28f5e4eddabce324ec23ec6e324160fe4934eded24abfa032e3b5a3c17d174507d71223336063c6ff54e5d22c3bb843b0a93358fc4304686bbaeb1b7ed1869b48faa706113dbe2e1bf05e0a2ab6ad532bde935c1776cf9b93b52a11e4730413f89237a8e2d55a7e9d2dd89c28871319502da862\", \n\
+ tag: \"8fb7a3c1f5d4e306df9dbb51a564117d\"\n\
+},\n\
+{ key: \"4afe3004fbf03404f6c4127428d6f9a8\", \n\
+ iv: \"23360ed81a75aa5ef5245d87\", \n\
+ pt: \"e1cdec2287d6f3d0b7bd480a259cdd5e2954370c7c1e47e45284f5b819a74a85b3db37d91f2bccf54fb10393220fa02b8b735bfdd9d7c55a2fe909605ad339ef95f77f0c231eaf712f2dd6f66032d171f3e3167333f10308d02cc6b87a1c522ea46744b1c09baa45b0287bba5100b11e838392284cbb2605be6356edc74e883c68c8671157a3b264793aa8e41e18a8e89e4b7e19e7933b8046b0124339f4695d0eb04b645c0f1ac8a4d3cc782fb932c8121b9880b4043c0ab1ca6031260f4037efbb0c\", \n\
+ adata: \"ffad80aef537d4555bbf96608790c092e8a4866d3b364f0d2882dc5e4431226eb4d0c81036c9b1f8f06ceb8e74611640cb0a15c5d11f64f065f1b56fb70fd73983791c93efb2c2e84373329d31deaf0f1f755616c7b225b147646b432a71551faafb9fea31063b915b2ef05ca7a91c565bd9800f4002af01517281e3bccdde26046e50c2e5cde33fc2b21606f536ca6018c91b8a5b4f401549871becf9af9036e5c0bae2e710\", \n\
+ ct: \"5e08471c1623543c68d6a984c1ee4c80415d87a663319ebec75914f0710c0ebfb91071d45d8cdf1df323aa195797d73473a1009cd5c2c1f7a6ffa0c07fdea2251581da147e7762cb4f58bf78d63fb3ab6e2bda639e3040099a0d7bbca371b5bff5e3adfba1b19741a5957ea51d613109c0ef5f45d19ce8aa039534af15918a11e7218f386ef3ba63bd29d6a7fa50023c96f9dfb366a2779fd2fa3a5d4490164896bf27c228d64c1d1fcdbd20e056ee466d490ec8261340a21abf090e9c9e08c98d2bdc\", \n\
+ tag: \"74ed91c5eca594312d6cff83da400142\"\n\
+},\n\
+{ key: \"99562ab5d6ea5790696b50cbd0b6e9b1\", \n\
+ iv: \"5009edf9858f4758\", \n\
+ pt: \"77b38f04963de7b7a645021fe5528bd88adcd80091d200c6f7f6a53c461ed2303e1919d4db0815d4885e50185ba37c084a37d7227643111c4a0b1f092d0fe93939d396686b9ac7b62d6e0723fd7436fcd7684478d7f39294c73d98db0ee298e57ce180df63e7b343489de0d0bc0f8742cd3bbd6f8f59f77955e331056e62b3f1e11788c33f5ba02dcbee0d73156674a88f0146c4dd32808479ecebdd\", \n\
+ adata: \"fda3826093553bae4dbfb99cd414086b23ce4078cc6aefd6592e0bf1f49237acd29e9301e4039094ac21feed6f3bbda457b62e61c0ca5ff32214035c4acd1b1ff5db8a56b04e27e54ed847bd04d71aa70738db4842f385e452acd4e8a592f5c14b449d80503d654ffafcad173166b91e157b2ce10643ebb6d223204bc88c69a29eb95f139345d0726d220b5687f2a1d58d8241d676\", \n\
+ ct: \"b8c169bcbd8891bd6c2ce2a806a6f1a10f5174ee07cb21d343dcaa84531fce0fdabdc5b8e7b462982cdb15b11c702bf0041dcc4d1c646f3a8d43eb4e9b05ca8dde43375dcf5060600dce624f8bdb2153fd30a3ebc81bdb6b9a9ccf8e20520d5f28ebdc8588701af4f0ed448990660b22436c4c5c607cc590f04331ff5db354bb8de372cacbd2e9b117e997f542ada88ab6c165d5f7d1d1794877b47b\", \n\
+ tag: \"78861d99aa6e3d031e12c9f14fb0c349\"\n\
+},\n\
+{ key: \"58f4d6b20cb4211c9139e53cb451398d\", \n\
+ iv: \"e72529d17dcc8df718476fdd\", \n\
+ pt: \"0adbe37beca312950b44b4e2507f7afde990c15b50323bf00d50aa17a6d89331a29d89580f91be6c7c82c1a43f2a197016b27ca74a4163b2060a4da1e32d25cbb1388c72065cd85a3fb2eefab21c41e2f5badfe70282b55f773bfa188157c6f1cbc3f5e16641a62264f223c84ab322b382964c8d50dc35af88d6298f47152e5428063d735fbadc978a6d78cb91dc8fc927b61ac436e5ae16c03b580366970cebe7ece6d6e449670ff8fc0c3eaa1c7a20693face2b4\", \n\
+ adata: \"44fc76f1898aef63354691567480fcc4a345621ba51d9c3c098bc200bfdb080d883bcd3d9efa7e58395008c4045f7b3c7f5ff89d25bfda1da70700d210a1ee91a52ef7f998e3\", \n\
+ ct: \"cb5c2a146181c95a3ff9c398b21ea6243739c999d178b434ae971ccda3dc72cb7b05c5f975d9c44292c4e3e9b8f4470aea4c744d4919af59bd1ac047ddfcd1c05b9dc40e54a161359a34963d3bc03c3c34ed67722664af94fc57197561fc3dc3c971588109337b5f541d59d0984b187d47470eed7badfd13459f56ed4501a695ac4a356cc7dfa05e036af5e617ea9bceade871c02340964691a541544400f2de90f0e85269de0cb09a999dd1ef39c7d57bd4a8534b\", \n\
+ tag: \"2fa6f159263fe6e9a2f726b1470cb253\"\n\
+},\n\
+{ key: \"f19fedc2ec5f45e417732f1b10d3c65b\", \n\
+ iv: \"dc99120001b6e516\", \n\
+ pt: \"c2c1d2d1b59842070899e7f15343107dc75ce99303e99f89c8d1f2e60cd07d9b223c4983e7d477e6c6f8f50a243fae0777f04a6e54a1ce14850b1fb95d04adfb5cc1eeac8dd812dfc69d06357792131fd67344b265800b6240a6accec9752455e551731c3d8371dbc2756ef0adaa5b8dd5\", \n\
+ adata: \"b0da45a11f7a0b69352b0394c05a2a0b8e2be5e241d99c5d81839c8b85\", \n\
+ ct: \"9528dbf1a81bf66ef5cb2c7290cbb00c7c2be0ecd0146c5a18b4c5f0a984d7e550681f798181b04f4d68030ef1631f7564c2132c4acac2093ad91b43dd310002dee7473aa29d3de20e4ab9e77db250edf62e31e96e955323a6b16b1057b5952fb34668ded1ae17b656e01c2dca6126348f\", \n\
+ tag: \"b773d0129b66cfabf9230c94c67c3eb8\"\n\
+},\n\
+{ key: \"abd432cc1769522454b4a8418a5bf1eb\", \n\
+ iv: \"9b377e93ec3c8d93d8dd9d38\", \n\
+ pt: \"6842cdc7f20c6327c3ceff118ead575acaecc6bcb8a72fa877c35ce5a53668bf40e215e80a47cce28d8326917b9d1641a865ba5f8c88af2b3a7c45d9245f6ba2c40de184fe08ce8172e6b6963ca62585798c154ad9d2ab\", \n\
+ adata: \"4b734ec80797a27156f02c78641b381f1da956337dd4d517121c0f300aba08ad98fd78c2389afa319bc55fbb3f8765779cdda979abb6a370dc1e437135117654088fa7867cfe6068afeda03c5a2e3985cb62ab67e42c6cd4e7669b1551d37756baa750409d2554fc7e0cdc5df1172aa627bc4956f044729d888bbb68163008a6bcdff776cf9c402d7dcc0a7480e783d95f24c592cfa6f7722dd6\", \n\
+ ct: \"d9632095e166940b7fbe6298b6f0c0de6c30e495947ef1863fbb72c2ace23f27621302b1fe430041fee2e95c7e478b6701a1db646c6ba758afcc3f126e5105afcc87d00f77a08dc5eb09e5bc40ff80b540b54729165fea\", \n\
+ tag: \"b750af0f398c62a7017730544303fd45\"\n\
+},\n\
+{ key: \"9623b992284874969e8aeb9e80b2ffa3\", \n\
+ iv: \"457e612d757b1030\", \n\
+ pt: \"26c34067ea9da89807c5a16e57c1c164081efdd72d0a6d71172065b65ce6c370f4e7da2a5b40749e85fefb4470b5df9948dab7185a4e647f682898d7962449e31493f1ebc907d15fa147d524a582d1678cab1448de3b160ababf4e61c86e7eed33a8f16681be8d5c1cbf276a21e3f1a9d65e6476ddbb7b22dc6daf97dc1e5d226def310f450e10be89a0faa7893a9e07d5b19ef7b006f75d6471787886c355\", \n\
+ adata: \"e727debcb1df2e0c6a1ddddd\", \n\
+ ct: \"d8ebb6c4c5bf3557580ca51bbb93c0eb4f6792a05d20706edc0fc6d4cc43b69a017c4f8809ca7c0c10470334244236cba67b7db8001d2f0c7323b5966ae78f4f2d2cda912e3475e2580007df2ef9efd96b4c058990b683cf9201d2087caf1280a7522cf10e771ce0ea2c908a6c0a1ec3525f1e598d096010445c3efd873afd2b1ef934c8eed89313e81096664204964ab0b0107d0b3bfe0e31a0316322de43\", \n\
+ tag: \"74bac3c79aaa39e01eaf68802bb63f7d\"\n\
+},\n\
+{ key: \"2247cfa398dd11acc2a23d494725d5cc\", \n\
+ iv: \"ed09b41ec27df71e\", \n\
+ pt: \"e92dc4e8d5409157484fb590b25c69efb13bea6b8ed5f1a14c1e3bda55542aa05c82f088a0b9ed26963837b4bab86d1475b7b82f047a0db4c40fb4a1f810befce8e2a15cfc812fa8030771dc1eeb2b6cf721aa6ec8ccd602860e75a3929399f95dc13906b7e4a01563ee6de44b447977444505d9ebe44be42df6c044ced41af79f192ab4b4c72d0f5ec987df112f6bcb6fc3c33ac899612a15119203bdb61af2be9b01af707981ffb9b3fd33f779\", \n\
+ adata: \"a8b22916d49586e54fbb67b131198e6869755dcc18dcdc707532b9ed5bdfe5770597d31fcc5cc2e9f020083c1c2230c3a80f1127888200121b6abd4f56e3a7fa3cd3f687086cf8e6bc63091c6e3c7fcfeed6844394e04d47804517edf44cc0a651ee7afc67c47195a5b814b032603dee350b6343ef26c520a3305351d6ae6f9d74ddc280ee85c8329e21aab475f0cd\", \n\
+ ct: \"502211cbdc04c64d15cb1bdf76e8cc20a424e591e71051bf50ad65d44fbe1e33538532f2393ecc5691b4979487644346cf8e5a8d3df468962989824a737c6ce227a80527f59588d1bbeb2bd09a6c0c1a77c31d98e1acd50cacea820d43d2d61408de9dba1a439f01daf2b8c936d699a75d626ec94c61f65aacbf7c8fc00b3887d27fc164cde488445c1a2e75ce609504bf812fc8c8f4f52b0be8ecbe533386154757beb346bf29443d51aa9405de\", \n\
+ tag: \"100f146e87aa847f82506b676b490171\"\n\
+},\n\
+{ key: \"9ba36d81c06fe912101fb0e810808152\", \n\
+ iv: \"d2031193194015845cc6bb59\", \n\
+ pt: \"6e84187a76c4dbd218ca36dbf21ad66259bd4bcb1d401dd016fbe401923eeaf60133113a244d2dfcfe00c7af6d1c5554d526fbdd8609d0e33b71b30e844506562f627b48ecdddca99a7da31e257e28c1ba0bdc3d85c574f1657844de9b2cce376dee5d73f0151b58f9b5c05af4ff5b395a2130efdfe56bf0cc5c44dd853cf15ce6e70004e6ba01fe53f02c28\", \n\
+ adata: \"909c5dcab6c32f8c775804c43734ac42c4b1b57500b2279a70009b47d29b4e20dfc0fe3e92bb4de4326a7b5bd74419c297f979febe731f11a48d220b78912a493c33a781de5b8ce3074a684ca4e9e7734f4c31e22f4e14227c6a587e614e069921f9991bd176f7bfbb48bc0097df80e9e7fc8d40a040dff833c9f40fa9cbf71d765dd529e3207871b68979ed6a2b85ff70beb678d81bf8efffbae319ccad89a98ba4ccc7b59f88d55e8ca8622ea8fe5ac2cc236dd4\", \n\
+ ct: \"d600e284d16932ea47505d4221af5ab86a3c4ee3678509f48663895be74c565b23ccf8d93317ccf183ff16dc35f0d0c50ea6f958bde13945315f05cbf0e322075f313ccb1f0778b27b017a9db2dcb9c055353fb251a0d931d85e4a2d59b8da2eb25b35d47583c442a461287a3533b1dae13216214140f781e4d09413d2f8247e5105bada9e1ce17d7abd0c97\", \n\
+ tag: \"580517f92dccfaef505c618db64d6650\"\n\
+},\n\
+{ key: \"55e783cdeac9fcf688235ef4a6223497\", \n\
+ iv: \"06c34354f4723094cb1c49fd\", \n\
+ pt: \"3c824f5f97c8795319c3ee9cfc779f6a9403e7c7facd14c9a0b96c8184bfd5ee8d002af5406dc008eaae9fe8228dfdf8cfa656e1d170d5eb1ed1c45bcbbab48e81d59b08f030901204548a81faa6d23c428466e77a5ee4ed4dcdd08ed907b2549aaac7d9b5f64c36e4653185ffce5f8735a1501242a9295c71fe7e46b746781a22559c29a7dad50da176d016b98f84691b6effb5b7e889d73071\", \n\
+ adata: \"36df6d7788ff18d0dbb1762a51d2f08027183039b018b97a0a6f587c654100845ee70aaef421cb1791e86c1b5f7a986762a27ea02a7dd7caf0e7cef1367613b668e778b3ddb0ed312b229b656fa6c69c46048b7b689295faa2603d5134ab80f8b4a04f9a615d87f4f1d63b8113831c0f5f06430c786d516a96e465a135a1057d54032b7bbf0d0b535d8698da1b8e5dd2e84790ae70be8f8d5c632a07d895f78126ef9a04aad0fda2621b0e57d699a22eba\", \n\
+ ct: \"281d5318c8fa6a741a2f7d25c6e7543f84e5f3bf4d3aa5df49c6928a1f7d658765e0b856a0c2db21e2b34ea076cdb42a7d4da59f56756e72bdaae8efd3f7a56315f58ef1fd57fd51ee49b8debd086c8ca1f73df1f152011d3dd7907ac69e1dd45896748bf22e4b57b8ce9a6dcf49029ef9b6b355c486f51e291a343cadfa884f3ab31f48b7d81d3676112c50f6e9336c218c2e1c0768e9e7ceda\", \n\
+ tag: \"6c149fc5df22c1d9f801eee7ca28c095\"\n\
+},\n\
+{ key: \"b2fdec6ca853dfcbbe93a9940e76d09e\", \n\
+ iv: \"22fa49c110e717b5b1e61190\", \n\
+ pt: \"eaa97808049564033b0a12dd084e9c9d9d8d69e670ec2d48d035d21bc7b4a75d65ae494659f99e3f4edfaec29e55cc1679da9a7c36c144eb7d8ef78755c6f542436990452e393b673a94847c78286ff26a622c6b1eeaa88dd212394e7de3feda949999572ee1fe10857623d39dcf33e7a5a8b1ef088c758a80e38cb471368e27df13195d489a0b67dea90fa5336e095a218940c87c9da639\", \n\
+ adata: \"fd0ce62706c10bd2b444b1484748d331087a1764877e4d17bb54856c9c26b4769ca57e418e26e895f6b93c7366ecdafaaeda706b5c45e6422933e5e7337b9fdddb33dfa0ac80bd94cf32fcd2a806d6db5252d971c96f7b3d925d1df414cff4de3d31de8a549d2971ecfea4ae22e7fa6f7e\", \n\
+ ct: \"b52c4587c08d8d2e019141860107d0e8e179e3ebb4dfdbf025d2de54550e1fad36d975f97680dcb53deff8bd208b60c7c64332eb91ce6297f07a2d4b54df98be92cd4d8a7f307fadf6289cf6565126c7c2956cefa1527c947415b9bc992b2dce3a9801fdff80a28aa07e3177f961a494e4d647225549a36e9f0bdf9f1dbd798bec9ed9b59897d6ef7b1188b71b04080392a6e7b2c0edfcd9\", \n\
+ tag: \"ea770221ff217849889e3977cdc1cf49\"\n\
+},\n\
+{ key: \"ca347430aec443251a3219eda63cfae6\", \n\
+ iv: \"d65041da2f6ccb38\", \n\
+ pt: \"4a523888daabe15371bf460b5f25c33af171a483a2cb92f90bca375dc8526ab30d604229f8d2d4d7b85475fab61c5da3e5b0548ad38741d5e7ed7b6b37b4cb6286abfa02fdc7937b5b4a82e791441d9d0d70c411b3df609d21017275ea6583a9d6f3631bf0a1737b5d4a8eb3e5181bc358eb63f3fae55a73b1f51050401a\", \n\
+ adata: \"52980ffa80973f2fcccd6df700c43deea5658f53733aa5af69ea1cf02def42163dadb1e1f8a9402ca82540fb1cd36efd6210782658c42c033750e0e5b2abca33f1a30ffb949955689401f195a8a2e19c31199c56c3e7f4e534b539ffc5b65c608d3c51a36611066d9941d86c751188b613001de8fae29bb74d42746b391433f623aab557ba1aabc1f9fd86f9e818dccc47abd5ca685afe5118b78e08b779f320c579de5178a456f95096d867e1343f23a36de107fe8c\", \n\
+ ct: \"28aaacce5a0635d69ff1d67ad794c65af2acb46ff4b3164cfb1dbae1a5da83ee368b3ecebd747d17c6991573a520a18c1a528958ed26c8de4db30820e3a05ab615a1230dde2df38cff0085cff687d411f17fd101849fda7a911e3b21814f8d7b1bace9089d418856e3f76d2b8b6e27a001ef0b67b2712b585404c761939b\", \n\
+ tag: \"a0aead620a159bb9ffed170d443a764e\"\n\
+},\n\
+{ key: \"23bba4c207858e4c26ae904ef9cbac7d\", \n\
+ iv: \"aea5739c19a81c6c\", \n\
+ pt: \"e76042b60c894bec29b6849ba26788f21ba53c8b1b81d4ba7af4d6a5da\", \n\
+ adata: \"2a9d27e48f2e3b05c76d00fd360fd409f286826a75d44b174a6713b2f7471b645fd345d565da9ec2ff797ddbd8ae99c45c019bf3ddab24a5aee11f3648f1edc759618ae26307b2daa8736dce44fff2cb3d72e483467d8d6478b50df8e1c564ccf8e4638fbc9624ebef29d4a9ba775e3655bedb75a6ccdc15a6008d045550fb9b1485fc\", \n\
+ ct: \"0e1aa24721449395bef45ec7794016c50c3467b6138ef263fa510d7016\", \n\
+ tag: \"8c04a838d2859e045a1fb45e676e41df\"\n\
+},\n\
+{ key: \"e4c5b7dbf2880648ca413c9cd9b189f1\", \n\
+ iv: \"3c05521f129a18b6\", \n\
+ pt: \"7933287b0b46854f949ea95b6ff5dcd6f6740068e9fd4c8b3415b1451c4b6a9d4a91b166107ed6dc55c79358a58c69d45bcec49280bd34430c3243a874c6ee87a42755701e7a652db3ba3cac41a5047d42458339a47682b0ebbd1939395db797bc98a519f039d885cfbc11e680cae4a598\", \n\
+ adata: \"ef065e5f76686975ee9345ef3811fc85cd33d9fc055edcf8d62b1204127766f72ea50e9db9df581d7665d296c42503da44db5e73d4d1eca7e9bf32a43b9fdfd97b8c063c531d68dfef13ed5a2f1d402d9af04910685e47bd362e0f63c01eb44c87\", \n\
+ ct: \"9dcfcd13f76710129c3692298ef3a655c3ffd47c98823ad505bacefc3269272b24b569731191d1d8b191bd656d2b1427d3b791251e30e44cef25ec1344d77eef5eb944effdffc18c5c6aecf6b16d653ce2e4f8cc8f78d1c72dbf3f05ab6e3ba504d38e37e85bc14bf2ce08b225bb2d17e9\", \n\
+ tag: \"93eff7c271229695055f23fa6435149b\"\n\
+},\n\
+{ key: \"5472b1fe08c5365104aa4df2a9a76897\", \n\
+ iv: \"771dc530a3b46cc3\", \n\
+ pt: \"\", \n\
+ adata: \"4a7034c0b84196dd9e95e6a387083116fa7a90ad29cbda77e9524af143140c2ff19d1c6ae0e7192f248b1222c9dab599923595cc3cc654b6384ffa6eab6c698c44cd0ed2110813bf0acb2175387fd78dcf73bfda3c1c1bdc1bcdf27f44b3edb2df55c14a8388946ce2346f752afb5b9c3668f91eac1863de8d2f93c950837be77c5ed4f1d4c7c8408dae49\", \n\
+ ct: \" \", \n\
+ tag: \"2e57244bd63b23a58fae6226c34d528f\"\n\
+},\n\
+{ key: \"336930ea022dbd2d1549251befcf7337\", \n\
+ iv: \"62d102334b4ff814b4dd3041\", \n\
+ pt: \"82f487ada0309eaef67423a74458e8680ea73c802e0b1a7f7893c4706ea70a089510bbe7c19b75f673c25381553521af58ef3e328a9226ba837c0c73e54ffc01aa94ffdebcde110d7c664ca5485f56ba6a630a89e9799b128dc1d63d721dc4613d8c26358b89386e1ecd7cad385b25ce\", \n\
+ adata: \"5376d29f9b9b1145b0fc05dcf5a8dc303c7bdccdd61f6b8eddd31502c85c8beb34f054d087581cc2c4452a7f6dd42ae81491c9e3719e7a4a17967eb87016d19eea94a30da324d8bb27e35e726808ed78b77e14e95b86137004e5b3b9ac5b25fb06c5d366fe62309751c13ba47008ded9344d5c06f6d3e4c4dedee59e029d868fddcb3a405f4f246dda6754266b58ab1bf796537b4c98ccd4088918bf95b0416e0c3c42f9e7817e6d8c7714296eb79700cea5c2e43d661387\", \n\
+ ct: \"ba197f52d64c401586ff26b7629f5d7620620fe65e753ae76efd9a5be11692cc082aebb5df5081ed6ebcff57bdd26e2a596c6b09cc3e1ee2e790f9f826788f4793dcae4a8f1319953480feb5ebb4eb96d0626a7e09d38b8587cb9f993f9c5fea6205b3fff164175c0c5491f1220919cd\", \n\
+ tag: \"257ddd6d8786ccaaf98fe9d12af0b164\"\n\
+},\n\
+{ key: \"d2f8dff21ed338e79c55dace7db0d3e8\", \n\
+ iv: \"cdeeeb837e7341d0\", \n\
+ pt: \"cbb598a39b4b3c17c2d0a616ad27143506ae1e52abb06093d0986fd0574ea77d9af14205413bb4ce9c07e4208c58a26993a603a14d1696d8e47b334f9140193027a10c59623cb2bb379c6f868a418a2dbdafd6f33e05aa3e93\", \n\
+ adata: \"e3da5bb451918f7d765591904e551ac318e601a8680ad0722a40292e5fca68a48f1d7d5ce70e6a3c1b6147b6f83707a2d9d10d1c3e908b60b3b42c42b0ba0ca0ffb9ab136b00b9bf1e693654802ef1908cf116b0d6753423cb76f487a8f4154a71ded08ea3685e8e2db07acaf908ecf9f51b1220ca73136e60ae3eeb5250d1dd583466b54215d3e38603bf380b492259\", \n\
+ ct: \"6999111d1e038228b469d739b9b8747e7df67beda907883752e4c77df1dafae7157deee774906729a20443b7965583983cb3ef2dc0291d72b8dd8c9703f17d9de86a960c4632e5b29b41ff216b939053a4de9809a105aedaea\", \n\
+ tag: \"657aa4e0077ebead6239046729e0d61a\"\n\
+},\n\
+{ key: \"778b92ace1dd70d18919113a3c1dbdb4\", \n\
+ iv: \"d6f4ffc15058d4bb18c6658b\", \n\
+ pt: \"ac487ea9400598291d0006ef2a297d711c17ff91e9f46e0e43929467f2b09217f26253f68776a66698121adefd55d5c79d76f9dfdb3b8ed5674fbf4dd9b890f34a7cb1553a5ea1d8934215f9a7f5cbc5cf7c4913371e9f5c01c7a89fe1\", \n\
+ adata: \"ad5d08e2fb42b4a7918a6fd9286d0a6aae451d8808aa3d26b4f8031e0cbfea86abf0f7141469d3577eb0bde30e71f47540131f3dc0e7cbc0b46ee96f626dca29ebfdc76e1f7408cd3a4b8181e5fc73d08bc4ece1a9a2d08dee520f3219eab484764edf0e9366fe3028d53df0ff61e9c885dceb7c7dd1cb5381d000abee31006246673a084d4ce79c3de989957296ef4fece653f74471fe35146045f1fe32\", \n\
+ ct: \"53a4d7ba1996bc0d5be2baf4e9ae2bca113bd968f4827dcbc0cf9eac96dff7f1ebe1c5e3c77fd0a74ab54059a04caeb01fb11415a68de20e7e35d9f5c4e2707a6e592f5fcd18673e4b1c9552d59717c663a15d1c9e55c8548466268cd4\", \n\
+ tag: \"e7e256f58f0ac408cd22e12193c6c442\"\n\
+},\n\
+{ key: \"6ca7374e8bfef560cb5f4d6e5bb3548d\", \n\
+ iv: \"dafa4f36ad9c8d9952df3e9f\", \n\
+ pt: \"ed1b355f0fa0c1b8b684837dc88609510b0b0b296d2a8f68d46c5d5793a2a623f74734029bc328\", \n\
+ adata: \"1186c1900958976795fe073135f2be210388f81268775c09ecac820f4b8e6499b5c0e91db811dc1f295d92b5a3f492e30e019721e7429207f514c445326f1cf5532f317f7a74b528121c45a84a88b86485eadc751a9ec5df6ebe536ed80646ef07ca7fecbf376efa498bfa063d46ed62d614c22ff715f09e604a01a37cc1935dcb7649f387be65bbfd7aa57dc62306556cfdd412d380076bdf141c44cfe1633bcdbdf4f019295d117512aeca98f739edaa\", \n\
+ ct: \"8a1a4aae3a00104acd23994435d538f9a5ac79995bd2b0c045c842c5fb6863788f0e0c53c4ef99\", \n\
+ tag: \"1235423b1ae22b8858e04414739ee80a\"\n\
+},\n\
+{ key: \"89a59c6743720078b2b572f23c8f9798\", \n\
+ iv: \"1f8e537db5d1bdc0\", \n\
+ pt: \"4439d27bd7f474b4187760e32ace182f6b1ade3facb74ffef5600158ac1821cc42cf9a38df7d124b9ab790046afc859dbe5b07aedbc5fd785c7f67b05652a68d15bf492fa17e93a9\", \n\
+ adata: \"8ebefbde44afe809258437a04b560c70f642cb23\", \n\
+ ct: \"80722c27331fb30ae74481c9758f1cc88d4aadbe4b335547f300fba68224487cc8a96ad125f023500f2dddbe91c4a51c2829dae33955b42e4670cceba328a4b15f68459d570452c5\", \n\
+ tag: \"918cf8b0dbcd6bb96a7d4a81dc6fdb46\"\n\
+},\n\
+{ key: \"bfe25e8a1555f24e3efbb39c606763c7\", \n\
+ iv: \"f1733ce38e0962dca5ccec31\", \n\
+ pt: \"947c00a67721187e2ed9a34e2a608ee10fc02d64defb28c4fb0e2af44bfb8678463de17300c697b36f40ece9d0da108419f2e3af61007a3ec4e55e71cee1b04ce6d388fe\", \n\
+ adata: \"9d844db1007d06b1416a3c2f3658152a05c33f17bf6d9a5ef07ad4badd275d4742dde3c5006e5d32aada4930c39774a1112e846cdeb362ad9fb8e729a6a4995689768d35077388\", \n\
+ ct: \"4b7f76d1afc58c7547e60661890cdf3a38967ec6a14e4f232b20a6c629a69a8802d0a01e35d17c66eeece9ff0d3bea3f91662914c97dc153df3edda1843d25c4d6d324e0\", \n\
+ tag: \"29d9dc8b54cc8666705f2ff8239963f7\"\n\
+},\n\
+{ key: \"b61a4d776221c3b2c377f45695d196e7\", \n\
+ iv: \"01158150bd698ff1\", \n\
+ pt: \"d80e1ec311fa1c5070b0a6d52f130be0a74b9b88e68d17fb3e6cd6bc78deae1c78b5fdc0983dd66ce103e8cce94b8eb00726a93503da1f5e29c5ae931539c8ecafbd\", \n\
+ adata: \"2dade7c0c908d7faa534691a63d8878d3ffa3f169a9cbac5f6680b041fe51f1b7e2f599b12988b\", \n\
+ ct: \"fef1a3fdd820bbaf8443d331da8118117a6efac88493b5cc462d4d70d3912df0ba51ee936739aa211c54d12a5c0b8b6b4484cd0c644f17b661f281b21c7c2996bf29\", \n\
+ tag: \"57e0010dc234f3b79b82d8a7a693496b\"\n\
+},\n\
+{ key: \"aa0efb3cee0f98f1bc5de3fc3fbb1677\", \n\
+ iv: \"8232de7f1556dd4f\", \n\
+ pt: \"3d1f9516c11e247c058510fd622b0ff2bfedf192f787d6b30142491e22ef8573f3539cf6a24f4045e47bc40186ac72281b76231e820f1eec7db44d51069c4e08014ce0791bc96f16722cbdf56f77ca0d5c0f4c27e3182c5f0a383594acca4285b0ae846662979fc60957bb645bd4795c027bfaa3a10f1846af541f6c599bdca19b86911c530783\", \n\
+ adata: \"b67ae51f9b3dce71542bc5250e496c8baaf1d0dbd76fe87b14eebca132150a28a02f7b2c31eae889f8214f0a415453fbe299bbd2984979eada850b40f0d2ec1f5d365f5c19d87ff17c6fdeac6cb01e9aef40f0886cc063cdcbee324a54c8c5b2f66e3d78e9787d9fe7fb39a86698677f2da1cee97121745fe133507ae0\", \n\
+ ct: \"a5f0c240f604c41ced4f96f1916dd36644fa53a344140f87e9577b6f682b90db25d79dd4ff2c430a33ac272367bd5deb48bb7e669c45ff0c0ae6683136b80623c16857d4869a88fbbc0eeee0101eb123ea3fe7ae1584717eac8f22343106fafd2a3ba651fe04761a10f4f018e0ba5eb969bfd8b4b82375a648a7ccf6fbf2d47d12edcb22d8efbf\", \n\
+ tag: \"0c0115b3d4f569b01330de9b41a2b5b0\"\n\
+},\n\
+{ key: \"111a0d798f9ffbad8634bae505a8e5fc\", \n\
+ iv: \"06a2623585751650\", \n\
+ pt: \"a40c6d5fb4bf1d5c5de86975042bdc00a4c3ae5b10b244dc33d17e1f9a8d2d7fd26b88f2d64c5a\", \n\
+ adata: \"f986014a9f867663a7d900d7d4ba6a1de89240466067cc094fb26b481b50cae4d6d542c9f6b5a94be51a9cb40c5da8e31d89b767fe7d422d53ea3c5cd48762b5d3edeefda52322776018bc3e78afe2ac2211165735c9771cc4ae70f2a73929d7581a767b54ad60b76e3b4e57ee1500c4591632efd782fa85d238e314ca297a99ba9beb1856844e272df7fe4bfc12b13bb87e1cef0d71721c54e7fbc1696374fd472ca627221b10d0811d\", \n\
+ ct: \"f7b2d588a1600deed3be840402067db8e85107dc5e8f909c152bcbe5a4d29b783ed1dfa53ae38d\", \n\
+ tag: \"926a5afeecd2ce219141d0bfad7cde09\"\n\
+},\n\
+{ key: \"3f853935ef779d11d5ef088153d0ebac\", \n\
+ iv: \"f44ee9ff9059956efe58576a\", \n\
+ pt: \"84545ee29eaa413c00aed94fadbdb0e3404d6e15ed\", \n\
+ adata: \"f70e8ea44acc3d64ed9e15c7ce27721a5bed3202232ea44860bb\", \n\
+ ct: \"9dc14198a702eee4982fb0a441d52ef10381153ba4\", \n\
+ tag: \"53ebaac791f84ad4ec6663c23c38dc52\"\n\
+},\n\
+{ key: \"f8eb4732afc912d5a6b65ee1348f5fba\", \n\
+ iv: \"8444dcec369d3d49\", \n\
+ pt: \"95eee7a50ac7e9c2dcee\", \n\
+ adata: \"77ac99843762bee7b26ac97bd225d4a0b6dc55c3dbf1266d14453947b69999a4cb8e7128a3bade192c719783f64bfff246e226e4c9d94329\", \n\
+ ct: \"1ff2ebd779f3ddc5ead1\", \n\
+ tag: \"5a17465d9b764970c9767beb6cde8aa7\"\n\
+},\n\
+{ key: \"fb74eed0b27f0d256ef0f5d20cb06c9e\", \n\
+ iv: \"d7191445838ac7f5424e47d5\", \n\
+ pt: \"96eeeec4af8cec6acf9dd620ccfda00b18a588a1a8ce9b0a828ee01d8d40bcbaf2c83d8e00782991af15ae9e91d1e5ce6c0f680fd71ba6a04a91029f9787f57ebd745078419ad9ebf1c76688a2fd89f2bfea33348e9b6c12054c04c6a289fe66d60b2b9151a4c2c340e623075c505c1adeab852ea1db1febbec1a7d0270956315834fc2a17ff07beabf3e9c770b87d20d6e8\", \n\
+ adata: \"d3fef11542ec5549862bdeb6c827cfddbd76b6e788f109ff\", \n\
+ ct: \"a76e836c1d538b510c7a5ab81bbb14a685e5b05e8692cb7347fd93166fdef81e7a84c4d986a3690517977ca764bceca9c8b1f84cfd512f78f9a84ee3172450a8d8932c48f0a0e3d97f773850f0920bedc0bb405c852c964239acf2dde986a1ec6c41cb36666bf702bc60ce8ce7e99b7d2f0530daab8e0da52f993ee15137ea1b757e24d78607f858bee066a46041570dbcff\", \n\
+ tag: \"227826fbd0409246a4130520eb984b87\"\n\
+},\n\
+{ key: \"53d238fef7ec3b610c64f2aa7f4024f5\", \n\
+ iv: \"f442b7372af069ec\", \n\
+ pt: \"38375df7cb10f0b25caf5f63ed1956c30231e2cd746706ecdcfd27eefd1556cd1bb7fddfae551cb1ae5b9d9761bcf57664f6322b073512a8b2b2184a07a446c4d71b56a79daa3e0b1b82a088eae2b635fdf268ed38b5f1edea0b3140695530359a75f48af64b09cb9b65b5761359a66b43f383aa65bdd7ccf68da9e90c8fce8fef92e21b52b3e6fc5188673ac7171986ae179bd6da49\", \n\
+ adata: \"1fd0c4b72e45db8bbca64aba24650972e8b8420ada4e80180514c867a52d76bc4456e56a8ad0d08bc6122aae5aaa5dad3fc43fcaa99401722397e51e0277c38abd428bc4cc8beda0a5089754d827cbf4772829e624fee8d311b86a29824b4d4a775660f0e675d1f4d0df2d353be2d1f679bf58f795035ad329e5e605447888743dfccc584fb3435766468af06ef137825aa8f8b156fea1c33cc7ba6d2de0aaf4c99458f5277bb1eee6bc4cfadcb8689d36669c440eac7e25a199cc\", \n\
+ ct: \"6654d1213a63cc2d86f7fd895a38f34e924e8814bc877b4363187c80b03ab5d80464418ae35a7231c8083f48e32bb55b685d33c1088180c638cd5c5622bf8bc134ee66e0524c49f2cdc5d103a70ccdd0cd6e11767167d38f67a8fb57d022cc4cebef71b4e9593e69dc8bca0813913733feced2ea882d1513ce8fd6df8a3da1f2ca4d112bc8b4cfa127a5d5fb1cfb5a653df4498cc528\", \n\
+ tag: \"027e680e4267d0a1bf8619e2066280db\"\n\
+},\n\
+{ key: \"44387ae1fb11c052008a208987913cb3\", \n\
+ iv: \"7b247b63196b6ae9\", \n\
+ pt: \"b487d4045a649400f480ab5a90f72483f0cd61afafa072d4cfc72d8686f5901a1414798073b8704310b8c410f8416550d8bfd9363b\", \n\
+ adata: \"30963f2c6c75517dabf35634db2f355286a3a293e98757d7bdfc768880d4b93f151d63c3d6636f280e30479c3ad55d31b55112100b063d47e5e1e7f86b401d5c41e6529f7a063c9d0ba258fc3bf3e2c76de30bf8e7c94136b77ee909fa53e6e4189c4e40dceaeb2b438c5cc1ff0c09f67a\", \n\
+ ct: \"39e4440477d21c8096d54d29139aebd110182ee174053206cd7769c90a4e52e087570419028ac36dc6b45bf89aa8144781185b603e\", \n\
+ tag: \"c839297923aba26049daa374e0f3873c\"\n\
+},\n\
+{ key: \"01cec4e3aeeadcc46dbd25c488fb1931\", \n\
+ iv: \"5da06c1b356fcb95\", \n\
+ pt: \"f79995c16684f38e80c9a2d169626250accaf4e0b9b3c5471b619a209bd3d460f0b8be810ae56373d43641448f22b701ae03ed2c7bcdf32ca3b0e5842687dd5fb36983c66026dfa90362f088a0fc20efc023bcfacd453bbb4f86012ce43276469f\", \n\
+ adata: \"e0f73a24cb84c8454579d575296b064d8bada28359315ae3f911dd0cc7d6731c1277db717e207644402bf5a3d30280ff4c8086b42f55b0ef9ac303962748fcb2448dd8bf9a2620ff79e57ed701eb9816903c54f6c587e34714212d57e91b79222b4ab478\", \n\
+ ct: \"e3a8acf1a53797d8cb7292a5c7039c31f07fa22fbab9d4833ae45616108cc74c020b4c5bd7e863cef60bf7fd41a63945450c3ec85a87459bbe92aabfc4fa2ad81132e3628f9031c82f43adfd014423ca059a333bb1fe53a53127ceaaa7087014ce\", \n\
+ tag: \"9fbda49d8d4ac9ec968a9c74bd9a9b4a\"\n\
+},\n\
+{ key: \"76c4d18eadb4132df76078fe1683fb55\", \n\
+ iv: \"904467e938f69357\", \n\
+ pt: \"3fb90ce50c484fc398d49bdb0e42aa1b045e06daa543be64339bf22d053b39218eda25daa9bd\", \n\
+ adata: \"a174a0283dc422b394fc36d9f81c1109cc3f3d02ce35f0d95233cde4424954060ad0c63ed829647aab6bb1a28f\", \n\
+ ct: \"f4b9ce9670477c71bf1bafd363365e698f4cc554a3773fd9106032774f034901813da51959f9\", \n\
+ tag: \"e607c37702599229c852d537ee969e40\"\n\
+},\n\
+{ key: \"8b5c5aab3b56985f00f2d53d01360eac\", \n\
+ iv: \"a48d9697fb61df2b40b2850a\", \n\
+ pt: \"a91ad48217e86f4b82b75afd88557fb02e8d46294d249aafbd92e95d771a7d485741ad2a7805406d8b43f0d6f381aa340f8cf75433ae7862b6025420\", \n\
+ adata: \"57ece296dcb879582ffd555c4c245e434a4e3b51bd7a16ee136e2d1512b7f54c4658098e8e50c91f758ebb736722059a60329166d0142bd8837508b4765ef81fd1607957c916d2ebb8f69a1ca77cbdff50a0ddecabf7c3541bfb188ba96c\", \n\
+ ct: \"3abedbb8d83f739f329fbff1a142a85a1f01c35d286859777655e76c594d82b3259163126c9b40205ee724b2ccc3e58476148454e6b2745f03a272bf\", \n\
+ tag: \"543296bdb4b006fd1cbc4706ed7a86b6\"\n\
+},\n\
+{ key: \"6e975cf395717a7348d44ab4c113451d\", \n\
+ iv: \"52ee6c3f9c31be23\", \n\
+ pt: \"df6c897e80643966fc285327804367b6241603aaa627cdef0c288cba724b1974ddafa7aa25dac6b71009958ebdc0dc9fbe6283556eeedb1f17f2955f5d31\", \n\
+ adata: \"8937a7d3c5a54e4404fd77ad64583d7f6ac660df3bd49dfdcea0203a8b77345b22eb834f73968c446eb4671e25685670966f523b149d282e9c786658bc0287638bc91565\", \n\
+ ct: \"c41d1624eb415fec38eaf24a1b358e0b9ebdb14406920e3dbfd808335fbcecf8572adfeac1cd82099efc25fe06c556b5f5232e1759b37330027aa2be9adb\", \n\
+ tag: \"1e1287316ef2918a81933e9cfe520fcf\"\n\
+},\n\
+{ key: \"d568e0b965f01397d642b9b709a9ec59\", \n\
+ iv: \"38ca08748015d5a1db53817c\", \n\
+ pt: \"86ff7db47f192974856d62927c35cf076c0d58575ea4bd443ca98910e10f2cc50f44384a554f2dd54b2c49191e6b7c6c163b6445a0b6a03bb94ba04a870bfa43cf1ce3a6f38bfe28e6224be5cbc390a6f92d125dacd72d\", \n\
+ adata: \"b596e39a7c111b21ecad4d2f2124e97299108efa21dcb819e6\", \n\
+ ct: \"c667eacc92b29ff5cdc8462bbe40d0b9c1d2e2955b1deb72a2c6bf02891a0ed25f1fb5f72eeafe734092c6fee50de1e58d0f344ad0cd357f5994636d62467c642206a981367f9b9979f28082b5488f26aa37406adf7d76\", \n\
+ tag: \"a82c37ffc65bc707b01403f7f65bc1c0\"\n\
+},\n\
+{ key: \"11ba983bc07092576d4a3326b8f26fc8\", \n\
+ iv: \"1031ff45d38a0df5\", \n\
+ pt: \"530344c4ecb1dd51a7131ef2902b8febf0da8c3ac0c32887e783aa1322d6afc58b2f6445d7b8e0a82fad60466db21575c43b940a44687086f0603a2de594efafb5379481d2a28bf75e00\", \n\
+ adata: \"728ea81de56178a80fb9d99a8515a5ed526cb990c0208850e5db319535da24326391b09e993c18ed6537ce02b8caa438a34fd00385ce01fdecd3484bdf682338ed78f120502e32f4a49c10e9e2d41966ea41372df828c3ffe4edfc03bc3d683fb2864e0265bd2badd3b732afc61c2189d71e6071b395e31a54205ae52db4df4c67fdfa2332a16aee414b11058d66dde5757f3c98df76\", \n\
+ ct: \"139ea873fd5dea794d17433a5977a2670f6367c3d8c0786598b8881d2db3f8450af849f7cb80e933ecf19a32593d8050a78a6a652f1b374b37447643a5adb27ad7f6d4174f5c59187ddd\", \n\
+ tag: \"2f4184f6627a34762cacc653e9e433ed\"\n\
+},\n\
+{ key: \"07badf0836933e93d6a6c485a8c96f88\", \n\
+ iv: \"320fb149d0c5f8c653da5fb7\", \n\
+ pt: \"668da34f61de7c72b421c19704e60efe686492c24d92f413459477bd505fe1602764db3b6bedb37a3e8c318209c08dc82fa39d905aca6123b0a9776a07f5ed7c964efb9cd6bf31fdf7d0671fb2efcf8fba73de8f7c7edea48f3a0889cd3c835bfc2526f029c0adb00e1340d2f0399971b96812ec7f6010824422475d2424c8d6bf125489d973d5bfab9e941795fc915080bc8e3bbbb7c92e0d9134bf2a6937bdb7354d6d\", \n\
+ adata: \"bd9940c8d2df551d7911a16caf6cbbe887e6b433470a9708a64ffdba4ee4447ba9e3b47027825cff356b2aac344a5a6452\", \n\
+ ct: \"9fb1ddd66f3be47eef3827a8e70fbd74bae56c7191ce6ee3cbae96aa5d1ed9c7108b25bfa6de39d0da8f8cc71eefc059dea611eb4b0ceed0fbf7b00d38ec85d50f3341fa540413f5ec07881b9924572f50c54c1519e2c4f6eb0ac9769e921a2905d8f676a6aeebef7793ee7ddeaee1642e15dc6c8e4db7e55040ab93ca5d06f890222edd076488c7414f868a8ce8140fc04bfbaa979692ea985976c3c13d1c01bf7ac7de\", \n\
+ tag: \"1e866da2f49158039f1048476ae2756b\"\n\
+},\n\
+{ key: \"06f9e9011885300e0df0ec6568cc1cef\", \n\
+ iv: \"abceb3d72d4cf554\", \n\
+ pt: \"5d93239235bed93646139134810938165de58db8b451bd26148160905c08448e63301104b6ae5f1be3cf440437f77697addc11c103171ef5fa8796dbebcf519a306f\", \n\
+ adata: \"8b60774d07ed62661566eedd9898a8abe441f2fa3bf8af446b41aac864cd94a4f3\", \n\
+ ct: \"ee4d70339ca854f9dea6a0ddf154e3e5fbeed0623d03009982d630f14bd4d9cbe8f2c5b30be8f1dbf37de245208a9cf4fc7238d02c4d2a84610952bd2db0f34d61b0\", \n\
+ tag: \"f11b758d2f200c5d3edb8a7aa88a3880\"\n\
+},\n\
+{ key: \"ed9684be34b70b20e706995558744ab6\", \n\
+ iv: \"d8cfb81cca52a9c6\", \n\
+ pt: \"3987e58dc1c64d49c0eb2ff8c709bfb85722a2220b5576e243205d4500e641c4f1e8acc75905a90e532a1fda8d841507d97ecc7c228e9211938ba98150156d1b8b47734c68374fd01b82590b2a740e557496fd933f634cf0282b7b1ff72de31eca34f91f5d0083c2bda18b5bc9bbb5074fefe72334daa195a62736ac3403ba5b2835c90b1c0805552279f7ca8acf91bb5c566febfaca47273dde439be3908e8001add7ace6f24b6ee1b9de32685a1a66aa53fe52adf1\", \n\
+ adata: \"3d3de00cd5a7503d215b6f3bc678ebb56532e4cf4c97515f25d05ccaa3f967ce80b5\", \n\
+ ct: \"8acfbbbfea166f5f9fba87c28856d5872af50efdc03f1a3a7ba70cbae3f45b61bfe117fc9daf1e4c45ca78ae4767acc0efefbcbb5246ef7976dff6fe67d992a4b40cbf08e24a7f2c3812f6c8438be57177588a3dbb860a927bfc6f22a96f45164cad882954ea1b5d224cb86bd8e3fd193503ab2fb7487a2176456b60fbbd45c87be23637ad89168f7bd163d7ff99afe2e2cc613bf583e3578c78310bedbaf380ffe2f2e11796a9b9a49f1d9fb85414807086dc34b868\", \n\
+ tag: \"a3ae469e2ec90a098af9d17c6723354a\"\n\
+},\n\
+{ key: \"bde7eb462f1f0ff7aa2e67d149227c28\", \n\
+ iv: \"a83169c1f31b3c6c1c629484\", \n\
+ pt: \"d428e49ee1997679861ad68bc4b391bc3c475ef6e45bd43bb072ad4c92cbe29a490b4f54ac4b33708ce6175682f7f3f4126c0f65cecd5208b3ae389d63a5ccf6740193f2865b242a4f13999ba916c6499b5604453535eb2c3dd87b99b4c62a9a46d5242dc90e5e915dc1e243ca877c5209e59d43be501b7637c246ae4f8c55e827538b364ab9c9c1b25f4b7578f1dec9ea7ab5aea7165ebbc54452d43c357a74068aa396e0ba4b53a64a720ac9a948c58f31c4d0fc10dab0b95b3af2f921de9e8c482ebdbbb78a\", \n\
+ adata: \"464be190a3bcaed1095a680959ddf35bc9349fb90b64ceff7a953795b53e927e4aa6d6ac5bab5065922ee2fc24d9c307195cf1c6b7d8a066d601bbc0a5eae678c3e1a3d960dfb4d12b3a2a72d858ce36fa0647eac224a8dafdd3923a30fc5e91613e9b672928910ffe0b13134a8a53346b8b30b47ebbcf86dff1e4612e7423fb9418e14cd60eb599cc\", \n\
+ ct: \"c32ccc913fba4e634809305d5e9b0459f5c955860026ab13c1423c0cf4b385c5cd7ece38630952bf57c127916be894d4b50b7269de14d3a4400547912f56b3ba54b7db3e798bbff6556733584d4efaac8810d878536fa3a39664410820d1192869f3c8f9e17a52f8492c04eef82eb420ce5bebabaa75111264ecc8fecaebfc592260892c435fb04dbe2310c4897ac981da65be3768daffefd455da891019ed248f17c972f06e0634f460349d48f13c71839e88f66e7a69d5ce69efee2f590a552ed0b7fa79d4d0\", \n\
+ tag: \"9e2661a44d712dda0d96b6d46adc9828\"\n\
+},\n\
+{ key: \"67700cd5802ba7cb893b4d749ac8b8d8\", \n\
+ iv: \"59b31e35691a029f395e8bff\", \n\
+ pt: \"77eef3df7294e580d35872ad24c280bc9c218982d6cb645881bbef0dea6ee577060482ee6abe436254926a49a29803\", \n\
+ adata: \"6054c22964e0de8e3d8f53742c949a75374bfd9db86ba5ff4be0a73d346ae1eab45fbf2539f647368e65fc7afef73647ed569a61039ef5f66ff443aac15d62a74a38586c465911438e1632b21817db1c2896113c1266855e14d36191dae69285cc25eabe0c98ff306ad6cdf7d665cf19e58cf17b25\", \n\
+ ct: \"117ed1ad30ebe005b94526d84451a6a4828a4f37d390d3d668b59cd1e4ec8b66bc5b2356944fd5101a5cf00fa7b5f6\", \n\
+ tag: \"c9cc7372321818c277ef09229d88b5b9\"\n\
+},\n\
+{ key: \"81baf6dc949438166929ba5f6db82284\", \n\
+ iv: \"1acb1d3b474475b979370240\", \n\
+ pt: \"3d139147e9207c864a435d02cd52419696ccf78b6a346018ac003e447b28a25389e09b8999290a893ca24d1ca83886909100b11810eaa2e43a0e7f8d1bff01573815e1bb38112b60d265bfebdb4630f043fc84473923560139f9a5f622e523b2b360d8ccb835afc8825b506f\", \n\
+ adata: \"a8f7623a7614b4722d\", \n\
+ ct: \"a9d28e2c00c607311663ef872d20e8d7cdf7c6b7331a488c707628d0ee7920ff8eff5b83d26db63b941121146c90df249b36e6b433490034899590c353415304be1154cd9a7b45ae97582c67102ac84a7a744571ba38288f2d76b7b9493bcb246de49c15190cd0e2749f8452\", \n\
+ tag: \"d75f899d6cbaa0638d0c82431b051700\"\n\
+},\n\
+{ key: \"dfab852df7dfb18e704d8e18f8cac6d4\", \n\
+ iv: \"8f83de0dead21e61\", \n\
+ pt: \"3df87283c9a238a07a7f90c716ac22117ee5c40e52f0fe61183c751d798a8a91e74680c9c58edc475f2171661f270a1d3afce4b1cfa57fad9e79204aaa087c17d69e29ed4b972633a9d731c7a6803d6f16625f8b0075336566de6d19208e963c4d3dee8cdd04a980099792bf3f4d52fc0990add9a78c15cd5a75c28475cf6c343d17ba6332bf\", \n\
+ adata: \"5c9090a5f431b07cd8ed0669179307f9eaadf3fb6f410f96d554d191\", \n\
+ ct: \"696bb321aeb565abdd35388edaee5fd7c42850ce96ad89b9e65f74328f288a81841dc490d675f84271146172fdfa1c92cd19ddf522578e1feb9e269ebf7410361f874f54ccb9e41744f6e2f911f9aac3112ad4db0967103629379ae1bb73452f2ecade8173b57d46982ce850a23d91bf338465bce4c3e619f962daa9fd1d4e86d4f15b2bcca1\", \n\
+ tag: \"a183d0513a99830da4ddca43d604e11d\"\n\
+},\n\
+{ key: \"c4daf99a9e70c1e4d5cea7fd7196087a\", \n\
+ iv: \"ee5f0eeda992affc2f52e843\", \n\
+ pt: \"fdc5fe5fde338df50170cc4c9de7fa04332d1c6d35550026b5ffb77cdfaf1284be54683fecea7ec660ba8ccfda7b440500e444689f97d8b11aea3a2e0a0c5d9f61708c43f2e75ae3f207fe5aced0b1d6f32ed803e57a5e68124a6b4d9347f14dcacb79380215f1f3a0e1d3\", \n\
+ adata: \"0bc299774c931689eaa2\", \n\
+ ct: \"07680a515dea558913fc608a1341bd65e9737c238c47445ddf89274b505cab945bd1f5b4f06e253f2e0ad23beef8445f0e7bd7162909721c79dfa73846c87d4049489a4455c51fe7eeff7d5ae0830b07bbbcf7c4f8b4f19674d8b729eadb7dae1399dc55d852132ba1dfca\", \n\
+ tag: \"fd7804ad911f948f935b084a91527b23\"\n\
+},\n\
+{ key: \"cfc8329d3f0d46014e9ece6c8bb319ae\", \n\
+ iv: \"0ae14d770561d500\", \n\
+ pt: \"3ee8d633eb2c3929d038347b00089cff39bb2be06500bbefab3008e3a19a248a44b7cf506c3554736cb26868886e468e9fd2721fccae6ea46773974156f2d5b5fef0fb0fa75cdc816c3ea46ada5ff41d4f7d614e6db899924daafed4735ab99d9bef6a891749044e4f431d4d1bba10dbb1e284175e636ff78d92d669abeafef667d703ea78d95b00b927d6a12faafd7afe2e6f6a7ac7caa0b14b024e39420ded1a2524083616d2613a5937b6fa18255f56dcaf84f2737822a66fe7dfe6df03533378201eb6e940\", \n\
+ adata: \"9b2a7406f444627a12fc4d\", \n\
+ ct: \"53bf40ec19827e6a20d1812831d1b292c578129e539eaf7f1f450efc053bd46d1931c79d43b6e4be5bd4e5c2549600beae130ac4d904656b8105f711a1fa634de3f87b28721e7b647c324fd12ed7dfaf1e4d4d6786063d1306724823e37bba567f67f845b0724a301af14deaf01101a3e0dbe6ead0bbc06b6fe84143de42f3f0c061a83c4d108268579c9427ed2e80a61826b19b072f037ab67ccc6188986a99ca7a407c875e00cf8b4c07ee850349daa2af28084288470bce621306459614e391bc25c33b6980\", \n\
+ tag: \"e48a687465bc723d25143cec9d866c2a\"\n\
+},\n\
+{ key: \"e7a07225ed866acb22e8a7022b31d9ab\", \n\
+ iv: \"f9892728d8f7e09490e24b25\", \n\
+ pt: \"243347bde9edc9fb1cdec769b8c07ac7312578bacff4382e841a06c2b44446a74b50fb1ccaaddc20cbd8af6bc7035b5181cc1bed10368375a058e88dfafa9ec2a497da2a7b7fdc0b0bbf27d1b6f325a00287f1d7d5406c1c163d662c2e06ec01515de2160769535fa904859ce41e4fd0\", \n\
+ adata: \"1d004d042caa61128dd8192d462fd54d042a9a20565745988ab9e4d59c9e92\", \n\
+ ct: \"49933f0b447997d03178c4f1a1f60d2b9ccc8ee15648be3965663e5d07f3717f320d1c8a9161d657eb452644eeb8ffd19d446b6bc55f1c1d5a56f83eb90584a561cdc615f1058f0af1092b54b30a53ad5e65580c72beeabaeb82573e224b68a122e3cee9dabcd345dda9869c4368eedc\", \n\
+ tag: \"55c8384cac30888852cd67ba87582da9\"\n\
+},\n\
+{ key: \"586ee8f306fcc1203072ff53b36822d8\", \n\
+ iv: \"e27104a7b19e7762\", \n\
+ pt: \"9ca16689bd3ed8f72bb11ac9\", \n\
+ adata: \"aef64f26e776dbaf4483c83c7c4bf04bbefa0455d8ba0a6c7fa21ae20c8299eae4a6100d6538060d31005e85e791c25bfeacf52e78ca8cc4699bc6a69a2d8bcde74c8a5e997a105595bbad9a4c65d6d56736bdf793c524bd8a8a78784c23a71aacdb4797b748eceafd948c359fc90f533ce14d0a65928c2eba184341a247a1b6164a80e73e496657db851f1aee94aa3065aae80aabc944f10d2709595fbe1355d5d3110cd86babd8c046e92b96ec9f65ce90a27742c4ede02462b4\", \n\
+ ct: \"304daab889fac8ac410e522c\", \n\
+ tag: \"946e1cd091707d6237c1daafda8d3934\"\n\
+},\n\
+{ key: \"04a47b26c32432484ff382824eec4bca\", \n\
+ iv: \"f795f409be6ec4c9\", \n\
+ pt: \"e19155bc0daef3e307648c14fc5e23a9e40db8af7ece2f0b9cb6dfed03064722e117a37b6d6ce97a869545de579829ccda497662096335074c13fe9e22a5fef902\", \n\
+ adata: \"6560123da91de446338ecd862cb83e060e1a96189a34c3b3dbb780cb6be013d99f41911e43405dd838748148239c0a03\", \n\
+ ct: \"02729dc1c10c947ddb6164594e2e9d40e6e1b1603bc55af9885807e561194f0f90bed18a90483ecbdfd8c61cd9023d498a2f3219d565da4976011e161a5f3cb859\", \n\
+ tag: \"5f83656ef64eb2a546e6fb02fa51a50b\"\n\
+},\n\
+{ key: \"5a289664b83ffdf446740d7dcd2f99aa\", \n\
+ iv: \"b150f7945fe2162383a67f71\", \n\
+ pt: \"a18f40db39e3eaebb308bc3814663882b2e4ffa518ae2dfedebd8dcdff3174e539752d09f6b5743fb6d78b2727ade3cf4324270c9d1677aff31635a60c12675fc8d18a039f9f1154c9cda39ad7f89a302ed94b57b38b3f2dcfa242c01a9b73125140a2a4bf7ab8606a7f704ab19166698f890fc80e76f349638bf957585200f9129fa7bc6fc9e1b330bee1144a83e9eb0ce212b24f60c5864eab6d77b3de83bb776238ab0b2f94c3a7225a4db6ca\", \n\
+ adata: \"a618d1801f4b640cd8fb9c0f14f0a83cd5033b8d528eeb343478932390c0fce966377cfd0e8e\", \n\
+ ct: \"9318ea3dcbeb079d83caaffbf2c1f63b52e7417677aa1b17b4fb09a15db264287ea311dae6f723c0bca3f443624e1824fc381501cbd8e19920baf14a9c386db2caa22d8aff13237c1476dfdf409a13bd6a19bd39de3b33c3a75d3ad0948a7810fbe33bf835262267c98d3e11e4d5d4396de1646f135424b43e858bb52df366ea0f20a7df4002fb0c31d8fccde91d142da7b5911e072d6f5f6541bb4b98f97fea35e042a7457d34dab04f0614bb5d\", \n\
+ tag: \"88b6954d282c269b809c507730384d4c\"\n\
+},\n\
+{ key: \"f6a5081ecab5be176549f6f544a08995\", \n\
+ iv: \"7bf97bd9b7775ce52340c648\", \n\
+ pt: \"628dda1f0685f9c51835edf39c79b4fc1837952a75ca1e2b7c6fa6d9f2880036c1a4bae1d91e9741534b7e9494cca92f108290015f\", \n\
+ adata: \"da827e3614c5b2\", \n\
+ ct: \"88e54c71a9cff3046c7228c24d2e94726b5a22cfae0a6044acfb1cbe7ff5080e4413c66b5ea7cf6207786e7f94023260f86c25479e\", \n\
+ tag: \"c08641236661194ffb10526d0b9a746f\"\n\
+},\n\
+{ key: \"ae68967dfa806be906a1dbe1cb25db51\", \n\
+ iv: \"444fb40444188c16a0802868\", \n\
+ pt: \"198cf0334750864579d6e43c98e1b27cfb063d953b29902affd31e2d12335b7334521dbcbd1e92\", \n\
+ adata: \"a09d7f017dad9055c99b47b4396690ee4c82e1c32ee43527d009a60fb059fe619970b07fef73e095b9a6a1248eb27c149edfa7d87c8486f63334d654a97dee7bc42500b52885acca1b3aa5a5f4288e5e2d3be8ff08babf27998e6ab271c7f73605781889691810060798bd045b99db3814316e8638fd5d46aefba5f3200702b69546adedf849ac6dd7fb32402154f5c6c176b432bb0fc986b75393e880aff77370efb95b91906612d5332a3215124f0cc88d025f5f174efacb2c541921ec\", \n\
+ ct: \"c3a525d155c06158adde733ee2171a3a39971ed1cb84562c9a62aad0f50e5bcf65e34874cf1968\", \n\
+ tag: \"3a4f1236e257ca39794bb4965893c9d8\"\n\
+},\n\
+{ key: \"8cf7ace9800824a1b6320a03389dbcfa\", \n\
+ iv: \"b126ed013f33a62520dcf16a\", \n\
+ pt: \"84f53fea2e09297bc7746da030ce617fe9569a8a5d4b77bd09d0e4e5c324fe756aacf5a573cb1657c649a9a97d60\", \n\
+ adata: \"54a76425510dc64ad5fc67d35a1cd29456285b95c85d9776ed0605ff0b99e0fb56c2f286dea5cc666dc3f7c682fccab248df15451917a0a9ac8e9fd96b9bccdad5a518b3c802ca50838b55e79a98899ffbc557582f7b5f942f7e9f4d111bc98c5d9d7715353d42ea077338\", \n\
+ ct: \"b0a25cb7ea6be982c364f786bacbd07e5b1efa512b07c60eba6dcb1465bff52e45f8262acfd64940e077d2a432d3\", \n\
+ tag: \"de117b31ae116e90945cebb3c4b9303f\"\n\
+},\n\
+{ key: \"af45c8501165a03a66fa8efc8bd30f78\", \n\
+ iv: \"c79a7bc7d2296699a520352e\", \n\
+ pt: \"3542287c2f5f909d85b10931b0f94941e2102b0ff45bfeef0ed19727242a29df53bcb8a37e9539b92e2e35c356664d599a631683d54cb1fb0da44006d8d702eadbcc0cfe1244bf2769fe96853846cdbaf0c14991f1ef29b05b0d9f29ae7b53108a25e57cfa51fcce891b8595c2f8e2c7f065d3b553320b7e6be5e89801629d2ea5b1512b496e021e992be7c6dbb602bb7d31cefc4636a5d66ac59268f51f715ca55273edb88d8a07a901a4386bd3cc020323c15c1b1eb76de79cedb4cdc719d98355\", \n\
+ adata: \"49fe6907de5124d15c\", \n\
+ ct: \"9341ed37d81eaf00707c40efd6394186ec1a6e2ceb8877a68832b1472595cbab7485221cc2e65dc6eff175ec757cc4440364a031da590be2de839d9de785e469be590533f2f7b015e92f4964937781434edc551ae6c455ebb581f4a85b4d4bd1b7eb23ead48ee2eb343e28575f6f6c107f515399deb198101ed843fb685b266a68b3822e47470cd04ececec69aa180c77474d72e9a5638c881a411bf08f3bb566dae766d702a1c249dcb69df499e786c3bb02a49ed4d7e6c66ce5a5e05d7336b6213\", \n\
+ tag: \"21bfe7b00f71ef8c7b9d56030e96d65f\"\n\
+},\n\
+{ key: \"b353d9a578be16ed48dfe3c6df04aa1d\", \n\
+ iv: \"310465d2cb8aee7d\", \n\
+ pt: \"480f54c22a56f56fadc82c8a2d263ba04d0862fd8a2d24d9d94b1039f7\", \n\
+ adata: \"4d9c9c5b5a708f3256b405d5bf80a33bba0d07ec0fa924ecd4dfe8f29ea1c70cf0b480ec7c065f332eaad5559806f146bf\", \n\
+ ct: \"841a707e210a0c56455bec2948a15f4e00b32ffe2b2903ba829a9b24fe\", \n\
+ tag: \"5d0b1151648e156b9088c3a7bffd6e64\"\n\
+},\n\
+{ key: \"5a245f5be6cf25a2a0eccbe6c6046087\", \n\
+ iv: \"d8a5e0e59141cbd254505048\", \n\
+ pt: \"29d3565eb4ab093a45b8e6d12c5bbe4312cee992399776294ed98230a6869e481c2ddefe0098e3f64dca45077cab2209ce11c54018bfb817b0c1665c7baecaf70f675ff48e97c168a8c3f54ba8687edb74930b35bbf73fa846b2f94daf024aeefe3bd4ca6268e5c8bd7c5848a81f3bf4e00bcc5b3b138437fb759d3fde72b2e9a27ae5e67fdbe01316176c8db2a29ea183635f91d166f6614ff0adec90524f0502f3\", \n\
+ adata: \"368ae5b6f8a94766f0100c6a16edf77d83aac556ecb4e035cafb39c40f6a73eefd9798bbb6c758bc4fa25ae6c18ad8fc581914102183a14834f3d86e781335d6cc6edb1df7ff6b825c924be47a19db815b0c226f98b0abb5a7da9a53ca2cbafc260f7a9db30b97be03d4f5618c281404799b5dddc15042c3290dd9156c828324b22fae0f9b6f1dde6bfc6a73e99153e98dcbf36458a8\", \n\
+ ct: \"1449c8599055d92ed2dbf1a0cd0fef799c5f85c59ab31f7544f555e73e0f461fb2e1ca810e3ebd7a08ee811257951b1841c9bc323df9bf3d07c69d43f35f8689edd976f7eda87b81253f049c20970c0201604e1af29d2f30259371a91220a593188b4ecc5adaeafce16e4afff935f28e17a6ac7303388fdead4a8b5a6f71854d00460f23a98b9dd9f69655618ccd19631aeead9d563bb2f20888424ca296f8591952\", \n\
+ tag: \"016ee0f46f0c9ad2dbede6a85df589fb\"\n\
+},\n\
+{ key: \"f7e01f81d9c1d2b99383446d80dcb7ba\", \n\
+ iv: \"da88dbaf1f813e33\", \n\
+ pt: \"2cd10d1676b8f38a67610590416e2cc68e7c33e7627c3c05322e072a071185ce32dbc0ef6e53de3d3817dcf7d7bd413edd09a48e796469485e097df56f4f73b179239e3be32b0b04f668ab915a0be03ed6d8769d7612ca0392ecbde0c908ea2b2f5d71dcf583f088d6a7c48f898d20d004c9d6b35cb188\", \n\
+ adata: \"f7207170c16810319a8350ae97b89708412c22f38ba5b87b5c7083c89e1bde6dd8ff8f2ed59d557ed6d2b5f474c2193ad7fe51c1d127911df5f044ca09c759ce1c96df77be5a2322e2c58cff6818e0749fafc71d7ee5292318f353b8a50e3af5979296c2b321c6a7aa2554b6f921832b5c4f806866dd\", \n\
+ ct: \"e2e8f2f7e2e274553a10317ff89abb33e8c26925636fabca00754f2e5d9435fb2bd38054118a3f55094f30164e1deb49b5ef411d142c81d862f7c3a6c42bac797440e36ac2fad5b9f11afab5142e35b7a8f23c17f1fbd1ef388410d4d78db8aad9fbed273771b0d472b3d6b13a134a19441e77c60bdd4e\", \n\
+ tag: \"5a44aa2e3af7f3efc717b38fe0154b7a\"\n\
+},\n\
+{ key: \"770d1ba1a5c130f2b794d36cc20381ca\", \n\
+ iv: \"9322d58ab5d1740f26225abb\", \n\
+ pt: \"2806c5c39036f6a888f5b529fbaf03234f716acfd7\", \n\
+ adata: \"18e9f5f3d9bdaecb53b455ad9c183019cb7f1a5ee0cb64487c03e7a06ce51675c70046b446f9ea34faa032a0db092b744352518ca2c9346d01c23b15f8fde23079ec8473145f438487ca9a5f131ee6b089d53a29615722021be0eda34555a8ae820fa5e49415523d71b36a3dd4bff51bc01142f2d3c4acb5303d8ad8f9ed40f0e54c67c3\", \n\
+ ct: \"bdde5d46c7cd385c73154a510a55808f6de3f4489e\", \n\
+ tag: \"47706135bba791ee1839b0cabc33fd08\"\n\
+},\n\
+{ key: \"2dd82593f9771519834ebf7f5c85783b\", \n\
+ iv: \"65068e5e2d594488\", \n\
+ pt: \"26e7f50cf516a65afc6812386bf43c9c420696d31fd395e42eaa50952d5d71d3e6e00bbcdc93ca043fdcd80a414e705a7de9690adac3011e4c650a3d35eab7\", \n\
+ adata: \"bbac5d0f1993821f95407b66b0731be5fc133c4118c81e83426ddcf4f6bd5ae857cd6eba85812f40c173cb39627185085704b4b95b0542684fb644ebcfdce895f77533cf9b20dfe6ad74b3be3ac1b45ed8bdb562d24b1496a9a9952a6289279738e97c63569052bebbf92290adc5d396a43ea652173ad41892e3d6aaa576e69fca77b77f7e35cbe77481a747de41bb996571ea3f4b62c65badf38c8fd9921e0bf4e8b69a70e7a6065016c8e74c5660\", \n\
+ ct: \"6fe6181197bd4f7cffd78076bd71d04e4f10f7179008660aa8653f47970155da12efc5b4b72400604b42cf8e3a69fa7d960cad3534eafafca00617bcacb3b9\", \n\
+ tag: \"928298832a9dad3c6fcf7dc1bc268664\"\n\
+},\n\
+{ key: \"43ff8ad8011a3cb0ce7f7751ab7bfa33\", \n\
+ iv: \"021d83dc4a3b12f5\", \n\
+ pt: \"d74fcee6be82fe06b601b54af3d8228039e7ce8348fd814beab69c47f98589a0350308b1fd4903984df6b8052d2e9bfce372ff3bc3f2dc1a41342407961ba7d9257b59763c2638bcac5089a3b4c284ff2eb8c67a7dcb64b4372968544e1e3dc040e02b4e6050a68c32275a08df\", \n\
+ adata: \"66428967d98b916bc8334781ff0a53982d6efc387da54e20b8b3feb5deeea8b4c61f77c756dd1f7c201a8eb793ddd27a8514091f87b9096af5f572f61d4c719b60cb6003afebffed4282d92fdb27d1fc4b3a4df1c623b117b8b32b477d0ee69e7f00f505975cfc61d6dfa7318dc7d79a2115c40bbafb29b6db758c55bfd6ef9216b2dfa344c863d0f20b460d4759aa96d855ba09273356e53c3773989ea375b330f472\", \n\
+ ct: \"6bec5e494bc09822dc06bcebeb4b4836432545e45a2fabcafa66715e5c4d271bab33cb2ea9580957f77c6a3c9f74382e4ccd4177179c3b9832a4526cf5b99d4d61ee5309363e49e2a3464eb5eb51f85143f29aea18fe7e0026e8e39fbf0795e295f68650738001b21f9d65a8ce\", \n\
+ tag: \"5e1e288a3825926c82104b10dc985a5e\"\n\
+},\n\
+{ key: \"6171855488096028087181a9ec903e06\", \n\
+ iv: \"10322b14e5ef1c097bfe206f\", \n\
+ pt: \"667b48ce5a3a6bf6e0\", \n\
+ adata: \"4e6f337b6f2128d222f7282e881e3a832d898c5b8ab66ddb8e810649d0e10bc4338d42fabcaf4ded6fecbe00852583d3e10533c1f72da2c0211f4cef29663432260532bab00151072f6a667b248544c22e0fa127e7fc134645043fc4a61f13826ad5c0e545f7a4bae377b99a0c6e38cf4f360ab4c114906df4b928b0355cafa5dce9542caf39d9e025c0de7dcc3b52b1113175b8821e3a29885217dc94b181cab9cf3b09382295f2b7950fe2b64fdf5798\", \n\
+ ct: \"ae3557744b72417963\", \n\
+ tag: \"60dad8926b3012bb0328c60d4fa69b03\"\n\
+},\n\
+{ key: \"2621defdcfb6908c46a63f6a7338b0e8\", \n\
+ iv: \"d045f54b15ff2a42\", \n\
+ pt: \"b59d89daa2968993459f72ee8ded299ce8c212c1b6b54483b55b39af7e5ab0c337812254dcfa8a65aa1c1d9a90ad3e1752440caccf90f8b847ac70976a7423ccd0419ffa6bf413ee70fb0e6b44d843d1d0d3ac4ae7eb1e6cb750e60566653eecfaf75c9f9c0134777b52e51981dc9732a475e682b65eb9fc2e49647bf8e6374f498bac97644fe94717f7487b469766328c750ff138d5f024bf0d\", \n\
+ adata: \"c760\", \n\
+ ct: \"ba156e286e99bb3e9810177de145c7a309c27c58d3fda4247d5501eb5354f60353e74ccd483652362612b68df9798bcdb4efd287b7e0bd0a7c145c8f368ec71545877f66cdda2529e2ab6e7d97b3f4a60964cc4375ebd5e2207de45ffa3518c0333e31ee0e22b742ee24fb08b7e9114b3e823d6d78bd4d91783dc6647aa61a31c83471b4a0896fbd94b2085d7a524b70e43b04594709219584ab\", \n\
+ tag: \"345a9272e9e43e913111c6172ecc0d80\"\n\
+},\n\
+{ key: \"dfbf2396fbb122757065227f659ff418\", \n\
+ iv: \"a708a047afc16f08\", \n\
+ pt: \"851733c216c6ee98fd2283bcb7c6bc32b33a86cb5f9e0d39ccae8bcd6692d8793f51205ebc6ed9d0e74505382f47f54493103e1815eb1609913c979fb3b71861f5508162d53e332e32f8b8a1fff169a7716037f0c3c0afc51513517e577d16cfca3812bb84b8d7a7d93fc4acc11f62ef747b997cb7fb0e74cbd42fa4fdae3600a068630c06e38bb0db54e1ec70020158edfffadf360de5434d18355e7738d73d621ec256e6fcfddcd8737ab82a748425c19a\", \n\
+ adata: \"f9a999d3c6ac95c659480c13d6b38a301ba6fa0d1a4948d4df77ad14fc3c5bd463506052e677eb1202d7a9cfd52e2e04e55ca314132d64b8736756b62a3359eb06496601fe428a152c261faadce09a97a2eabd27e6bd2b408309d062740bc5473cdea5307322a41a72fab2cb0b87b23597f2989cd608cf158857fc\", \n\
+ ct: \"88a6981c2ac5a2b51c5cd870f50121a2a1eb2ad58f17ee039457c303cfe4b33e37c6cdeb1b16161c478c5bd961f23dd21bf85cf476ce7ba67c4ffdbbd22584556a62ead44b9ae9dfbc6ebd9e2eeb1cfdb0399eba049846b2b278f1cefd217ceda48d8795006e1994c27f7b11463c6812832e22a069d9ca55d624f30387da3cc098b9c81df5d1bcd66f6e6c8bb32ad3c8343a087fbcc2138851b3dfc36bc42f3b6e5bed7706d0c243d8ff5817f1df9a9ded83\", \n\
+ tag: \"0a18e8e3988ee5adab904e7a0141e7bc\"\n\
+},\n\
+{ key: \"f13429cfc88e04fd3500db4bc1e3d247\", \n\
+ iv: \"e0675a7d0adb2d1df516734f\", \n\
+ pt: \"600cf15683ddda286c4b3599e5258271f48e86d9e784dba57c7d907505b62de8f90453ed0442a4eca49a6385a9ad4a7e73f47ee55655f8624fe76d78952a0a2d563460f994801a75cc4511bfd4\", \n\
+ adata: \"b3d8eecd1e7113e9920ca9399927bc8519b40aa824c3fb3f82de5046477b132db26dbddfae8071419e42e2f4fd3e905ff062005fe98885137d3024ff1af83add14a4b3a526804ebac38242b99d94203932def6bb6dc2e39df60f4474dd5ad8fe519d3b7cb5f79d96e1220e304d61af0ff67a99a2c3377de9ce82c5d4d5333a83f366fbd42891effa2b\", \n\
+ ct: \"66ea6efdd887df9a3f839b4c2b9199d44a4809780a6e9440a878591f2e8ea93a3b52b3cccd421c58688c2d7a46e5be5ecd7b720c4f221e53fc22cd5ed4cd11d60f6821bd816ad137f04d0e2950\", \n\
+ tag: \"442f6c06670d8a2ceebc3af177835947\"\n\
+},\n\
+{ key: \"3dfe6a0036e54bc871cc16b338da5e58\", \n\
+ iv: \"993c31719d43e847d646ff02\", \n\
+ pt: \"650454c7ecea38e77534704046d557d9c60c345befe7662d94b4beb06c206bee81ece86417a17abe0ea70e576fcf38df183fe7be0d873f40e84fa1a684147a1197cf40ab625fa42ade7115157450\", \n\
+ adata: \"95e9be9ae34640335318322063199fc0e270e8a0da43967c9ebe93a7c0b37cd013081a48f780399d21c96f6ce36376d63a0953ecaa0d29a06d669d5b154b04fd9266b810980a9398e07cfb7d67550121f9c24527804e07de483e31aec4e51fcdbf031d920080c3afeaa6651541d93679b745a9b0d2c7c122b78cc4abfc58942b908047\", \n\
+ ct: \"010ebc9e9e7674bcf848e58c7822085fa3fc73dc03a9d43c23c13d94ab779c84ee48e1c4ec70b46482450fcfe3bc0b93e0619b92e06b2e3ca51c6ccbbe6b64d9cd4b51393596d7e5680a9f966652\", \n\
+ tag: \"1948dc162db372d49f8b2f85b0651c89\"\n\
+},\n\
+{ key: \"0f4d4c356d75d4cda39a6551e0c5b546\", \n\
+ iv: \"f9840aca995a3b7757ca0473\", \n\
+ pt: \"3737f58f91580e89b7c0cb45590e6d6e01f45d079e9ede19589a952e4132f5a27cad0e94f9dc4cbb5c1b9f3cc5b24b890412237ac92abed8cc6511c8fa2ec99bce3d4852299a9c82ee23991fc258aa3d12e6618b14a44a29a4ebaee299d6924141ea9bdb099fd9506e4765c0607f8e2a43f08d8835b1bce543637a58669543506d33639f6f4935d16ef2ca0fb5dfcd716584c0535ae2b8e2aef15025f68ce1\", \n\
+ adata: \"d07825a9c6d7277e69831033566cf8ab314bfc6a5f926117a15d0fffcadf9a1c3e7ff6e7882744c157c23bf0e868cdec98a55197dad513fe38d558e931711f6a189d4e6e2d10a40fe7e159143f2a9fb269d09d2737fb130d4a29a2992fa6cb33b6204b2ef8b184fcefb11813f4c60f914d802cf0e223f73b5cdbc83ac677b9ca30052b637440228327c4ce8f2fbf5355adde2623d3f733f2c69d0541\", \n\
+ ct: \"0bfd780c9cc7f8256bc509498ed806873c3ff25e0c4722a05732fde7f001796bd84e7e576365a9825d96e2857de3f9b26597a92b7427e511500eace061c99f6f18365771de1cc0fd4ca1e808e8e3d1bab3d2ce8407450ee4d9d9f31ca71e7009fd6d70ea6c8da95ed5f52f28ad9ba2a0a2ea18208199140b215223ac6352e1254bbd55befb1e392c57fd580482f4b1db8dba34ec29e5b87028fe3977953e27\", \n\
+ tag: \"2c7fb83aafabcd4cbe2ec673203036fb\"\n\
+},\n\
+{ key: \"bdf55bc100c8e5640ce96ec7cf304898\", \n\
+ iv: \"ea47ba7aba727fce0752123c\", \n\
+ pt: \"b0f1b7103ab0fbc5ca4d6b895e811e5ed631bf505567f8344b880abb849b64f0523e172107101a7013d8ac751673ffac22044635a7b88bb98f7c16d0a06ab72f9d3852670e15ccd04c3e238f1d41f28eb85f49f8b4d4a95e085786f5e3dcd7d34f55c70da1520e0fff4123952b75cc09bc9f25fa6a48be5791362eec2cba042d9585c8dc343f31e9d237f7374a45839a244f20\", \n\
+ adata: \"af639ca4d20cddd60a627c6eda13c61ad3b5f7c2dd28f9cb7bcfe5b498\", \n\
+ ct: \"975c9ed6b128e18367faab0e9de75f4a19fc896a267bfe3e47d0d48d6135388e4627185a1051b16e8a41e046d6f4e9c397241c7b8b59dea81817ead81f80d939b4cddc57339f11b6ecc4f1ab342fd05db6b572d3e753106e7b4b213968ae98f387ff1ebf114ed40f188ee2eb5507624d36f705093cafa95ab2e1bbf7758d9e2a086fbeb0d2d95567a012dac61164ddaa03debc\", \n\
+ tag: \"ee680f6554102a2005b2e39686aee2b5\"\n\
+},\n\
+{ key: \"f81f2efb5a32b92782614fb14e7f9195\", \n\
+ iv: \"a8ea029789c60a2dbe95dfab\", \n\
+ pt: \"c9b6f1b4b9c6a1722560e68606409c5bbc639d3d366649e53d9da6aa692d22e99b794beae81b4aa406bf2f6042776422c68b9236932bf27566cfe73f6a95ce8773fdce66d663add86839bc920ab5a5b1a1d40f540256084ead53cbe95c18b3b244e3316b0e2a550de3786a090cb3d6626c9854151c24ea48c51fa31900bc30eb452c8310ba916bd6b58a5f0307be378dddab7ae05f888cc7b6524979850a1dc9dc304c\", \n\
+ adata: \"72c1d40f1319ddb25b378f84b7ed9b328aa03b21e4dc7546e3a64636c456a9d62656f14d56cf2051625616c05199713e4fcda3ab9f6302dec0707a0335b1f790a28ae6898c11c53ae9f80529142274eba61a35222e8b2a58e7f77cdb2ce6c7706f42d5504d65917ee9c4d8ff302a499603458df480e292be3c03d805b262a1db3c06d97afa84569db756555bb823f44652dffc69d2962100ba594219de8a\", \n\
+ ct: \"03d5c3a639bb5d128c4a05e20838da23149f2c6c09fc407671715cff39bc4925e7689e97eaec7113a329036e1e002510083e9375238b034cc59c68c8ffebea6fbbb1d1c15f2083c4aa6a39572086e6a715fb44abc6a6983e40f28df6dfeef0c1cb2d91bc12c69db39e0ee3128d61b27182faf1c3d2ab13c11787a92b332491f028ebba7a878a6311828fd799f1d83ba7ab21df425a48ba69d6ffe4e4a307a686636f9c\", \n\
+ tag: \"713fce3ed0a1c71aa79ba2ba5042587f\"\n\
+},\n\
+{ key: \"c1d5020894400339364a53d7436c0051\", \n\
+ iv: \"4c16bbbde29d5f9d\", \n\
+ pt: \"4eb03774c517074bb23532c34b031e4feb5f6f804f64758d3cda3ebd0b8a1a7e302f9650974eacc6d399260ad34e3b0a91a1a90990f1b23922a002e82ea451d584ab7edda48a24809f6a657c0016e1ba933e0650fd\", \n\
+ adata: \"e240f9b9823a06\", \n\
+ ct: \"de817d5c0dc84a81d0c897dc2fa8ba18e99092ec96d2fd1c9bba14498f2edb5489e5e8db65fb147685cbcd6a003a49b5b1507b59299da569d78bf80928264a898c7e99ede14782178edc67571aae9287e9800ae5c2\", \n\
+ tag: \"4d2698ac549af3a3cb3b228f8955249b\"\n\
+},\n\
+{ key: \"fc9fd4b27c219a12c7eef385f2e8636f\", \n\
+ iv: \"ded5aaab12367a443669bf0a\", \n\
+ pt: \"4312b9a46fad8a437d6237db941d979229b931a39ea9411cc44c8e5207953c2b13d05690b07e7244d173cce63ae522ff1ec28be3a99601aa2423cfe634244631360157800fbe63ba18cd01d42f321587ec6e9976b15dbd47f6a2366a00308ce269fd7a0d642eeeb9e60380e2957e247113b0315ee198ecfb9d6b4c6085c660607c2acdd58f9d4ef10744\", \n\
+ adata: \"a7e4c264d9b3561f46fe622cb84430dde2b79d264cc4510fb4078eef9472afc7cb1fdeb4d748cf881338788f66cca92dde1a0f6d795bb6b74942f04360ec21ed423bb216f39a0ea44bd3fb4d80ace2e50e\", \n\
+ ct: \"d692a89850ae952c80c0e64f686b9ce87e83cf406dd7c8d1eaeea2d12d493883ad052b058be599bd9c583d5010b8d64c9b5a0470baf5bb93d69159051de33fc0532876529e721249392708091924840e4606e81d360dbfc472ab5a869c53f91aa01e9b5a23a41bb00f054538dff4f56eb4b3e81fa3a97ff728c576ddb6b4fd79e25257010b590841c875\", \n\
+ tag: \"4ed8d210003eadc1a8899690ec39dad0\"\n\
+},\n\
+{ key: \"06005e8eaaddfc684aa65a315060837b\", \n\
+ iv: \"deed9c121078b278\", \n\
+ pt: \"b74fbd576eb3a447b2d2c15bc0b37bf84da6e9c9c4ceda0a1d7aa83c180960687b21dfd86214f4b40bd5c7c5ce4a0b59c4a49dfe8b458e64072d6a7ad0435a29aa18146dc97840a52ca27b8ecdd9373e1c0a7de67d612dc8d0f872116880f58ed421d83228aef39f58a15015ae51ef06e2d6fa4ca80fe19b32a2a7adf8b69d2c0b8e47003461a1a67874df587599db7987ec8423d3574a498e7313e944cacb95ea\", \n\
+ adata: \"0063e37a6f335e2e90bbc164e2ad3afbfc47efbac1b05fd22bb300e1668939b9bd9ce55d61e0d1668c3922434f45a86355\", \n\
+ ct: \"65d20447150d72ca3902ac434f4294ebb1dc8cc6b498c58b315118d4bbba1ff10b8f5d9f2c59abe3f6de03ab78e8986b016e4abb10c7fe5111650ccb13064c24fa6526b63d4d99fdf5f047dcb7092ec9c1cea58501ce00e54209471ab55661ee40a8e2ca3502bf6f37d5d8337536ff3d7b23b02da4379c2a959ab4b9f3e8203a846c82c6f450de7248ef6a112db1e0efd14de0ae7628227fa660ad32cd2f7becbc\", \n\
+ tag: \"3a285053e5aba8f79dd8c4fbee8168dd\"\n\
+},\n\
+{ key: \"90cdca72828febbeabac76c320afa6fb\", \n\
+ iv: \"0959bee720c8533b\", \n\
+ pt: \"08f6ca857bbc313a9376efbfcafc477ad20835b77613bf48c7a2ccebbe7ea102507365ee40eca89a45f4942b1d6db90be7180abe18104d7674c5bfb8696db9ea6b6a076d5d9b1d38fc3bd82ccfdba33d85bbbdfb0ebd59a4fb020d75d45a2e0f1dbc2d911e1574d4484a4e346a207b1e530c9c3f04ac6148\", \n\
+ adata: \"0ba0896fce581694304d1290230b2fcd9985a9b4b4543da594857093e11f8dfd5b6fd20e7859d43dd3362c010bdaa906\", \n\
+ ct: \"f60e75cc8828c2dd0239c7285f1508b49f0274f9e6f874cf37bf1107f7ae9d3ea47b17db6f449cd9fc2d7a7de3dd8764dad0b89904e936031a0577a0e3fffdd64f000ef498286f754343c643d4a3f63a54cb1d3b02af37487c1fafb5de1c35e1796412c6d8245d61450f9bb0bc3e11b18737f5c0574ca4bb\", \n\
+ tag: \"fb97c20e2033dda57edb85bc7211b813\"\n\
+},\n\
+{ key: \"530f583ab14f42e52477593e878934bd\", \n\
+ iv: \"6e8ddbec00dfd397\", \n\
+ pt: \"8958a78f2510fa3284c9c3f0afe9aa35c1c1a593599fe33811406b748ed3189144465f4880cf8564ba4d46316b23e410343348122493b8f98776f07085185115dd37c7c5be09b0af049770024d03dce587148f1d5a1f193669803ad5cee9d16f58421f6dc521cdaeb61b97bb69c5fe366986d8df0c323642fab5c490ae1ec90aefe648053e91ebd6d13539fdf2ae9a00a06a6f2579cba6db42d4df3a3fbf0dea1f72a275b91eef39ddf5160e7b0c3cd00d67901e8901\", \n\
+ adata: \"ba7dccf58660ee1957401e6bbcf48dab9d5c55d52e9679ded4608104bd9a2949524e9fa5d8135ec0265f707a417868ead65aaf85c27e700df7f183c7cbe3efbadafb7d4141ac5730cec7460107625736e908c1075cddcb70c5a829d3e7ef49eb8f8b29aec5146bceafe628adc78dacae215ddf9f26a0\", \n\
+ ct: \"4bfef6840222e62839dfb0b157388819f8ddf5b4d8db90136b94ce1c9a50518be5788a5137d091f5d158cd161b9e0e1a923ddeaeb87b6ffa39c0ee0bf1ea0c57aae55c270db09e652da6eb000afc15dcc053f257e2fead3b359f523f31e9ba76799dd2ed49e52bbdc1689d3524a79380cdc2ddd684cfbfb9202ba0c2def798bd1cfa0b0418fabda59a9fc273e0b84972f6dfa12bea799f1b10112c0704c40c0c028e041108189535a1ed2aa06ee40e9b1d868379ef3f\", \n\
+ tag: \"0bcb6e76718f568238a368d966cc1cf6\"\n\
+},\n\
+{ key: \"809bcdbed736b368ddf261bd1cca93e2\", \n\
+ iv: \"562c70befa1920b5\", \n\
+ pt: \"7382e33444824b84fa0cd8037db3281b2d31cd8117930fed\", \n\
+ adata: \"176abce16ace73ccc111ef1c6b1b919efca2fba5c993f5aed549f223e024ca1b5d3bd384e7b98144\", \n\
+ ct: \"1363c5b29e217c5c149dc134d2793048bc76d1d3eb3c04e3\", \n\
+ tag: \"1ca0e4ad2a124603bc37a1c8f4e09bac\"\n\
+},\n\
+{ key: \"dd7eeeb16a55684b4fa05d1e635edfee\", \n\
+ iv: \"3dfcfdf40bf5e38e\", \n\
+ pt: \"c8808f386d1348831bdeecc607e0b95802c4ddad4e721601ff70a7db923df1a4f629fe90c70647\", \n\
+ adata: \"50dabba1cbcf27939ebb3e1f77cc9a3985f4f9a6886ab13b1577244035f644c9a859bc3d2b338c5de9a8397fc93b1b74a085777d6fd7083059846d950fea2493d74700f969e58298278af9\", \n\
+ ct: \"e8183f20adbcea73084790132d1f0e7c68a0ef867023179fae4af90e760302f2fa815abd1d3297\", \n\
+ tag: \"151ce7ebf528be051f26c679199aa8a9\"\n\
+},\n\
+{ key: \"bed4c902e716e27fdd87fc936b61a1e7\", \n\
+ iv: \"f86a5f75365e1f4d33f509ac\", \n\
+ pt: \"b402e85c13ccdede764177dd40acbba06ba1f8e1c6cb8ae5a9a2a758e6e287066793aa0127c744d65971ae91356999c99a9b21bdad01dc0b8a0675ec5cca34a829391d0e6f1f9c7fde4e9e792f51075dddbf81a74d8143e4b0e057662226e549a6c7a746975b53aed59df4b63a14da9656ad961e9323080dd9bc4fcd618b4af6098b\", \n\
+ adata: \"74deb1153d7ba6ede31c65bcad82b5761e14c7bac78b40c1952e8676711d95ce365f31163699c285c82116bd4395746da1936405f6af19facdce36ac533b2b951e647770921216ccc141bf8fd5edeaaaba5a4fbdcbe006e32bd532e7cc9242e5856b37ece6d6346b4f948b1255909f804a623b52242f0f2f3e277877f98412\", \n\
+ ct: \"ba98a515ad89352afa780aecff593a73d413aec704d24c790d10fffe678d8bfc68a31705424ea12cd3898567736c64abaad9f54b45c6850a68a37513af080f263842a063fad8a1b614f30dbd986123138316fbdb707a48954103a9f6fe73784f2d18fb9243c0f3d19445f62ce99ac7902d633afe933929e653e41d608d528cafc358\", \n\
+ tag: \"a91e4696baba4ad0331c2fa3a254d84d\"\n\
+},\n\
+{ key: \"2a4abfbf21a47ba8e48343059f7ce0f9\", \n\
+ iv: \"f3eeb523367a9f2e15bae8bf\", \n\
+ pt: \"e76a50efcf0943bf9ccf7e477419c67822322d1d76f172a02f198e93b4ec238dbf7a5fd10ea36d69e49a0f4cd2a50ede239c31378d98996defce3fb01da6ceed62a7580fcf3a6d6b4c2ad36cf4ad7877b37e51647c3c\", \n\
+ adata: \"a294531e1ee4dcbc348134cee4ce65e270ce3bc9b3190c387415ca7b1896701336d0efb4a0d7a4ca53b9b4b7e1c7f6826813f5922b3e9bb78c7df5bb87f3450f35505880f60369b6ca18b6c98d4061cdd28d7dbf15d0b607e91d4f6bbc8d7d012be652c7608a089edcb7a3789d3a0769f46d5d893ba40bb27899461eebf28d5d7db0fec6cac2dc0bfae7a5025e3fa832084f841462de14666a5f0d6339b30c71c63bf1453d7b77a53ad4508f2c5953f02408143b3350\", \n\
+ ct: \"e4fb1254923fadf5b18d31b583dc7967e833633520f3a652202e2410c7ef107b652fe625f97ef0a7d2b0ec05f0d14bf9bd546c5694d9090c7612820506c4bfd5596e1c7eb99acc2e3df53d592a1c4b39388f13498744\", \n\
+ tag: \"bc4644621880ec8103ec6d24502ea7e8\"\n\
+},\n\
+{ key: \"7f8dadfa817b4b5260c36dc2f4fbe928\", \n\
+ iv: \"5e233b8b4d343080\", \n\
+ pt: \"b7068197efc1e5a1aed74e68a6608b921d9509ac3f98c59baf6240943b414e5704dd73a391387e\", \n\
+ adata: \"a25ac5e5e5bef48dc60eb30840e93e5382620a05c1c29bc6e3318bbb6d4037373c97586f7205bd2a141526324142\", \n\
+ ct: \"fcbc105f3f47665d88b6bf8f449e1420f6206192a075f0cb1450ff1859246ab4f1aae684a93b6e\", \n\
+ tag: \"e328abe15796e836b8d913db70ee1fcc\"\n\
+},\n\
+{ key: \"9ca346bddf12eb733e0ba1e90c057f5a\", \n\
+ iv: \"c4fe9ef0907e2456\", \n\
+ pt: \"d43831906bf404d284fc187755c63b75a87d004471c526ebdd67d95730fcdd9180f6cf0a73d63e9bc1d34531f8f3a4a4e2ef2d417680b5eeffc9a1adf8eba53305515a8fa81969cefa5bad1246ee911e4b764c1c3505e2c501ba2672618fc5db6a2bd2455105a03a7d4ef344ce9a3c07f68d170126cdbfc48acbe7178ff338cde2c29e24fcc9b61981dda2522151f256\", \n\
+ adata: \"3b39e3a00cd694898cd2ba0659ab53fa6474ba226302fa8c38ee51f387e000bbd2f4a7448d7f00b6742d68afebd0d24107d3d4c873969d2bfa90be93cacb835e4100fd99b72e5c8df6525b27b7c8d17530487281d81e5e1dcc7b8c94ec229bed1c0a6f5cf1fa82ca62de548aee1d4821d1e8139232351a211f16ea859a81cef7344ccbbad114b32181d8d0fded57a3bd8633cf\", \n\
+ ct: \"d289bb2212d2b0a71d5be0185b9d7ccaf8b8d345176907d2111cebf7e6f1bf659260b0e739eab5beaa8cf2bee6a5972e48294e85c4659431f63e80eaf9a21aaf3bd1d6a940c7a3c0bf1e8bff83e2f05f3f75bd38b8512a1867a6455ab8859f6c534f4a5e43037200060a74b80cd8e9e5227e4bae01712b243b625e76a7e6cc8209e0166460ae3e45e872f4aadefcb704\", \n\
+ tag: \"fe9d2dfc4b8877dd60767db55ecaf545\"\n\
+},\n\
+{ key: \"7b85a0dfe66b952334ed856bce29395d\", \n\
+ iv: \"70407d96296823fa5678cf07\", \n\
+ pt: \"9d0f5a6f2815417a8f4902f828e795b570349984cb586cc709d0a4d4e0d1bb1995b584\", \n\
+ adata: \"a6505a759b7e00ed43e35dfa5cabb90babb79a65e1aab6b3b211f1c4ebe4b03cf794ec75aebd83b5e02a53022c28906e9eaca2896f71776f3359eb299dda66807c32f8c932ace02faaf807653e2b58cc2052fd4cf56bbe009b8cbd63e97383f82359c446e143daddf584fa2eb497d758dceefedb805759524f72fdb7dc8344021ee7c0\", \n\
+ ct: \"46ef068122fbb3afa0ed5f235758da464748ac19f21bc27d90ec2490be70cb563cd400\", \n\
+ tag: \"6e189b3eb9cc6670bbb74bd99c238978\"\n\
+},\n\
+{ key: \"565e11b2264eda24b6ab0868925f52d4\", \n\
+ iv: \"b3a9f2a1bf68dc36f8ba2e2b\", \n\
+ pt: \"6305bf84a976c9bd6d67f39d40d999f347a370efe21e\", \n\
+ adata: \"a07187860d17dc257c007bef5db3fd9b497f97d411578f33274f2a2871058475f64673e72a4036ed15ed3dcc5a877cb8f14ab97b1bbb648c5631bbd8237df5cfaa3bfaa4dfcdadbaa36f5ba472e7583b2b35225cde8790d41a1952aa4cff3ebb0f143b8f05c5575476ee3a62\", \n\
+ ct: \"9da9c19c6332914e19255dcf85f6c3feb9a66e8f3914\", \n\
+ tag: \"e99c31eb59fe5a9305a42fdecb4bd111\"\n\
+},\n\
+{ key: \"82537ed1a36b5ebf00a261aac02da5d4\", \n\
+ iv: \"4d5d6222c738ebc90b371b34\", \n\
+ pt: \"55c07e6d71a52e2442a44212a4249dc6bc5d5711044a757e1c568d795d913ac16dc2f7dc649e3ab929d02b7ea7a0e4bc0689e238611542eb929625ebcaa8687c8bba404e08c53d57f17a6dd40210742bb594161ee96d90c8fff849651ee1815d90579131d08ce3799c126c0ba6d7285b584274db07495b21b28c6cf1657eee3404586ff59ce4349566f0233b5b04ec733fefac6d2ccef49c494207282f53f07bb6c8f1546aee0a60ce282a2595ce9a5d5894fe\", \n\
+ adata: \"30fdc63d67fab1c1229ca00c21871bf4703c11cd4d037864a275b2b87216fbbc1091e98584bef974908c5253fa9f7079e97f8937fcc3e48b0e9e3e2d58f24c96216d0470456d8fff1da0f8e2119f830b83f489545e15fe8c7916532ecf0db1ebfc183d8c6b4772d3b7798c4c430016fbee4c56136fabf1a64b8e9cfeb178e983a8984d6aad3b32399743c64b61505579512f79d4\", \n\
+ ct: \"884e30ec0da8f2af77318b82b1801267333f5e41f0bef1f6e1addaa4a77752da8d504d149b4767cdf5d0c94334c8194374dc075357f8d2b515f161e8290ee01ef73d433c6fa04aa54f956b4ce821b1290542084f0b52a2d8013331830557b21998aa7c031cbb4ab33b5402cbd41753a3f93adb12432b34449674e90d8a69828441797bb1f62ca4fe0193b60cfa22fa4bfdd0069674f72e64be2d9c676ca0eeaab8775801a7417f1c66e032c3a196fb5cf30cf4\", \n\
+ tag: \"1bc648bc6504b845bce122314c0a2149\"\n\
+},\n\
+{ key: \"07dba0646f9c5d351a11cda4d91b6c6e\", \n\
+ iv: \"926c3c53412928c9\", \n\
+ pt: \"c8f1b566f09a54debd297b83cb6ae889417ac6bbf3d779e7bf3b7e694b2ed946aff1dfd0f3c5abea46256c3bb01a78ca3da0bd2b221a6b7488653f2458f5d71c7dca94bb11079099bad78c0145434d3307131ee4854feeaa2c28bb22984939e60bf736cb190904c7a35c22b19fc4ecc3f8d9908e8cdd1c91a10e400c236dda71dfe689fdcc4835b80da66d6538cb38608bed019c194570c454ed38af5f03299ed8412cc00bfa233b6a464e26f3ed8267c79240bfcfc268e3d96c06a8b4\", \n\
+ adata: \"92f29d283c9e3bdc73e2f5405bb2cb2c166de822aa1ed30c52ca35df46985cf17906bb20d6b93d2380fefc4ccae7d79844f5a727ae07eab54fa2028aca81efcd020b8fc41d94e1dafe2a359803cc17982838a4c174af969d3492766209e87523bbfcac322ffbc47b3ef8c0bd9e8223d04a7773d6b4c71fdd3dd20875bcd95e512351a353a0a6a0815277216ee1bc1158cb0a844737cdb68512ce1c967c5f67498a98cef6202d58f8727407b666\", \n\
+ ct: \"87291f9ec2d8311f5f2bb2b9d3833821ed9919c8a0d72b02d4c02a9ee8282ea819d95a5908ebef8910f615ef1350de4496ca6f07be51716b209bd680782154942788edbc9c98b93eeb87746418bc4833d15a27b64175f6e780f621140f61e78fb1bbea69517ab8729b2e52e951758d3b2d58fdaf08573b3516c94065b6d4f6afd938432ce5f818e99f8ebfb55f38f85757cecee059941b9bc85a6638f6842164e02227db556b6c77686fe013ff92fe69d81758ad4ad7c53c591a3099c6\", \n\
+ tag: \"f6da6135c7d8fcb94b4692d463381535\"\n\
+},\n\
+{ key: \"805c786e24df0394a3f67d908d41821f\", \n\
+ iv: \"65475bc91692e0c58531e53b\", \n\
+ pt: \"5fc1491b6ac1514f227585ff24f80345bfc0474f7ec92bd1f51330a8bb2223df3130\", \n\
+ adata: \"d5da1f674e407e61f1597c394e2816f1495546d638e0bd60a132cb16382c0b65c633036fa0947d8cbd3ece61e451a3e3a2495e67d51f2bb97bfc60d74570d6c02bc56dc6b835f53df592d71aeb50ac412e792e2a8cc3f54b9b2d145b4f27b364ef672815db180a8d37bde46f50bf21aff6fb98ec9f9a126b9e0c483af072058bc3a735c263fb3b5b05e81a9820ced48e2392971d400c3285a5307c52ccd123d944d01785c254ee782c74d7a22ff7648c1f235cefd0\", \n\
+ ct: \"0d8064e8014c0b2aaf67943331434323999c045a07e50159c2c722a906772c35a629\", \n\
+ tag: \"932212f94e39aee2b90cc12af90be202\"\n\
+},\n\
+{ key: \"616fe814f700283de4c6adf67e899aaa\", \n\
+ iv: \"ad5dfdd94f47b6c38f6a53c5\", \n\
+ pt: \"be91c48a6001\", \n\
+ adata: \"b74610c4c31ea2ece0c3ca18d406f564251192cc64ff85e1a3ed0a63d75a8c38dac1784f1420f44fca8d\", \n\
+ ct: \"4e360b4af798\", \n\
+ tag: \"db1c5213a6c2eeb534b36d691c24ed39\"\n\
+},\n\
+{ key: \"b381a66e8243c4d29bf8601e5ba328b9\", \n\
+ iv: \"2982f2938806bc52\", \n\
+ pt: \"2b78974d2abd118daa654c43c22dc87d4cb79a14f1f054037ce7db46c50a7f7ec5e1c3d96ad483668ad638fea31a36e601fb1db1c2e527ed5479531b7c5b2310bdd78977937a52189d4fc3\", \n\
+ adata: \"4e2f51ef75b1016908121c61e0f83118dac8abab98b1a5c9e292553e6d1ebe9e0ed7241dd1bea1d688ccc5e879d31d63a6da69297d3d0fe8bc815c0fbe482fb82fd8984f2b4d74017fefd1ae306a4207fd7b035052b67bdfaec6379ad78dea5b8782d83552bb5b87a62708d00322ce3b3b25cf60971d78788d3529e21bc2a5fd1b7dba7da156cc734e57f735ba11cf312c29af83f2d8a98bcf8d06742430b37371b5adc79a42610dd8db89a1f9bf7b134302785e53981362c52ed9f046a6a1\", \n\
+ ct: \"07381b8520fd12120a47181520bfef5284f0cc64eb9826b70bc17abdd45b61af6dd44d5ad4d90337e595f9e4b75cd035e3e57fc9d72808b4e9c2c10a10ec22e98dca55d843947887520f18\", \n\
+ tag: \"90e2e542d17dec1c1c0df3521eb8463d\"\n\
+},\n\
+{ key: \"96db148547884d99d0d6276ff888c62c\", \n\
+ iv: \"8b1ac7061f8e63d5\", \n\
+ pt: \"667eae40fa3969\", \n\
+ adata: \"0e73668294a0d565c19e0175447758505bbd14b56946e28fba1b3d4d97523f35ba344bd92685784f25b8a07b13133a80dba9a54d816907de589eb8849bfa3035d39629bc0f5fc1d35ac53e663669a32421df75d8e6cc31a4ea43e83c26fcbcc191a56ff5dbf359068cc6bac81c737aaca0e11486d184fc7ea185cd14da0d2f60b4416040408aa0\", \n\
+ ct: \"e118c0db9ebb55\", \n\
+ tag: \"7872fffa61315a139145eee1ce2a87e2\"\n\
+},\n\
+{ key: \"6c233560e6adae582c7f55c11a782cea\", \n\
+ iv: \"17a1a5e66960dfd2c009b273\", \n\
+ pt: \"528ccad3c71136baab6a3e8bdfa00aa06cf63525f9c92ef50e6d480a2b7b567a8c2daa8df54a6190c9f951dd8c14f617c0f0b6c5176a0f32612ecce914e904522a55e30613d122ca06a1658d63aa683f9aaf690977a31ae8dc7f1455f28f8734bad1911c201d6abea128a5bb60ad790a96e9d34a13ae725ddb067b04cc12884b92e9b3f692aa9c38e88b38132cd77ee5b1afc76cad19da996a26\", \n\
+ adata: \"313bdd09a5b5910ba0beea67cc9429b7d722a60b3afc7661294c274d361a3c3002f1403deabe5d00fa2aca0643b053a15e254f676a63de8c63244b706608f9f5e3a40030deeae98ac80e1bca7bcd0a76f24c4e8db005b4456a4e893e6f772a07014af827b13edf86c7ae7df5811f9a37c6be99fa6ce63f30d3764e418c4b0d12e88e6855bb6b3e53b747f5f295a9dcf1b2f3949d7e8ffc1d8d76\", \n\
+ ct: \"bd1350f75789df96a7d085b7c8590ccaaa164d1bcb531fe637844e107157440ed00317f490a55054749043ed787b3809c51580077b1488e98cd0632d2ed024b6f9160cac0c3ec36dc559e2577bef694ad134b4548166f1549e5f56adf9e304abd619c47b859f4190298de5cd919f0c8997318a118ca1ccdbc9988f6dae2ae8b263e896f2d0345bc338fc78beeaad538be0c4eff812d84c80932a\", \n\
+ tag: \"b89e3dff3ad55d9f09f87df6f3b9ce61\"\n\
+},\n\
+{ key: \"53060d7ce89a0933b10d0cc845a0cf83\", \n\
+ iv: \"3f2e15c62eb1dfb1\", \n\
+ pt: \"9cb3e259d94ee762f982c21bbd8a13ce\", \n\
+ adata: \"66d3433549c9b8f4c6a6a29075643971eed6bc1243cca3c6b33083103f6f59aedfa9cec013bee4c1f7e0babc03488191d7973474725a93edd111a93686907294c11e5cf0e5a3fde60d7d6bc10322b4df4d77e8b2c623708195447a01fb83\", \n\
+ ct: \"d244bdd7a5183540f237712b7a0c66a3\", \n\
+ tag: \"c1d49b4193eee7d17d667b8fdd895078\"\n\
+},\n\
+{ key: \"56ec03fefb1035c75f23af0ca500c785\", \n\
+ iv: \"13cce115d0a4e4e74ead988a\", \n\
+ pt: \"bac2ea2c7b0e168e6a5398db6b3d2f8765bdffa03d4cee5acd71b30a71355fdf82b9eaf9bb5b7ed0a879777baa38f8609f28c999d8310fce2de2b93f6d9691b045c07fd9bcb17909cd441d9ce22fd48cc4fdc74036962769ed9105984da51d80baa27aa215dac0744b3150040fb3aa3401eef730967e5e31a70053587d8ba271e4f6ff888d\", \n\
+ adata: \"e062d411e208a941675d35cd97318742059fc4defee3be361b128ab553210d1ba48d91e7e4745bca5d081a95978652841ca7c85fd40b067486a24c9ea9623ef6d68de5797f58332a5a3c3c619b632e8cdce0412276a08905be1d42da8508d04c73fb6446a7f2d2b6a770eef667c1713891d7a9e089a22727727e07431fe4dc3ca961dcd396b0a7b4efd1446c258d388bd9c6\", \n\
+ ct: \"8f0409a217d46a5255c36c8853a3154b22894f67cb0dc55720dd3b57726c3b613ed4ce27982f6a7077b5aae3e209e558f163e7e26725a314d835ebc1fdc3e6e2f28ead7b2a9edc760c89b1b0a04e3c62109c6438dc701fa6319124c1e5acb00c480c0f519a05eee987522622ace57ad7db59fa9d876ed3367f0dc5559fe5c4b60ef5aaa2f4\", \n\
+ tag: \"7d8dc97af5e2f9151ca89fb5eeec2fee\"\n\
+},\n\
+{ key: \"56c41a50ea70648f05d4f876d9e5f329\", \n\
+ iv: \"0b412097d8475ec968f55b00\", \n\
+ pt: \"4c4bcad5eaad701ae6d361721b96f8217b51b577d867980a5750d592611ad553132fd17cc5f8e05e12695c316f07baf2c9b847db154d3a1dabd73d6c8f58ecb0502ec0eaf88099fc7217e96af0d597c7f6d55e602c93f17705039eb2b84c69bae39e7f35cc3c7cc3c42c9862face6110cd4c7ac0044761a658cead4b3bc1a135a3d5c2c61953bf97\", \n\
+ adata: \"ef9f9fa24008358043d55c4196f7c4fc8218fbb6039b54a14c786616d152813a43ac20d8d295038b79cef32c76d0b100ff2c073df4a3ca6f40f08b09699c54ebcec122cf6f252d4d12d3dea801b61b1b55bcc74734b5edd8a8d693ee9cb393f1b1a580016da19f2c16638e5947e63d10f02520be4a7ffbebfa81a9e906446f3d7901\", \n\
+ ct: \"eef0acadd45d7be5dd557f077afbe2d1c98ee50f8fcdcf98f6f8c74345a98254027ae4c6ebbf2238890a0ea40ffb799b0fd2a2d7fd94f8f6dd0b369334f6376003b6e55f192cfe21ddf779beb7d416257eed2f039c728e4a8eb716765b21328ce427e0dec9c12f2c21930df49ed10d01c6a866918efed4e5e1f86a9ad8ad3e306df000649afc150a\", \n\
+ tag: \"7b04b8ff25a5c0fa533ec9761c6af345\"\n\
+},\n\
+{ key: \"c17b7d7e57f4c863393078a363887e14\", \n\
+ iv: \"eb2bc0ce16075254\", \n\
+ pt: \"acd395d2738b13c9d7b1ceaa96b9df3816324ebf4734fc050d2a75d38bd13160d5a1f987d176ac2d00a37abe1061702714f09ac7a7e9a576e51c135f97d7aea0080a0574c88ac8a3160b2f77ff609e28e6d0bcb63c88d00cef6dea6a9339e84a8727f14c33ee905e755903db3f4c0134039ae6716507e225019710ce2186166ab415a85db94dad0a887af3e875db7366fab578cfb7f0bb8f47ba74be65725e6dcb64\", \n\
+ adata: \"08fe65f692983ce97a2879ef23bf82c67400bb43fc15a7d9a86ec8ec13\", \n\
+ ct: \"313554deb76b1637cc4f885e5ce81b2f3f94b61da261ab6f917b8bed5aa52aa99bc354e83ad78c60dffe82d18c163ccb4902640be55221494b9a873e888178c9ce8a6466d209d389e5bc49fb83b099bdb38c53676c4de46cc844a7d3c17c6cec06fc103618f0d20f8033ce65e9f2b6a04d84ff0772b6521d887ec4872b518fd68cb50e7de3ddaf9c89d7d66bc9d09781a67a71a2825fb3d9bb528e23d951841d3122\", \n\
+ tag: \"572d7c7e1e515792e6f77a3c0ee028a1\"\n\
+},\n\
+{ key: \"9457345f49d88f656733b1e3f121c569\", \n\
+ iv: \"c7b9a1305f88d472eab033e7\", \n\
+ pt: \"74483fc881eb99178ea18f446d2bae4b355b42afdee98077727ceb58afcb00e8e188955f4e6c131ce3657099e5c3dd1df2a9851f438f77975c25f4e01d5493f22c54a3ff3f21c53a2bbfef26e0e1f523326026a61cef04b9ad23196006\", \n\
+ adata: \"ddb804ad0e6c91690125\", \n\
+ ct: \"dec89eae3464f87de957e774ad38ab1603d923d1d67bf24f7642ed751946e35d0f2aeaa4559819d2db62bc8242f5038a4af68d33485893418cf3c204cd89f873f93309c3b11f3b8cf13193f72aff80d6b8cc7949f29f8a67e1d68fd9dd\", \n\
+ tag: \"102113ea0490ec87b5868f6ca5a8eb55\"\n\
+},\n\
+{ key: \"496003ef102ca7ea9ebfd7fc006c3604\", \n\
+ iv: \"74f73e58213ef11f78c0f0e6\", \n\
+ pt: \"809af8cd7afba21d94e6e83c8cf16d08ac3ec5ca7545c80894a532928670319131dabcd3c9d89c11b1b73d4b8d4ff333409cf7a273529b65823b1318cdbcf6acbab12df6d9a4f58bb2364584f35dcd0fcf1d12d7fc4f87c849f1e7aef804a5216ebae4398b42663d68aa5843ca333a20725cb6e5843bbb937f83d897e6ced16466713c678bd7e9cbfb328d5184f7c1e07c58b3eda269f601728c6b7297fb6f8e68710a1778c64d049acc3e7712\", \n\
+ adata: \"c2f384e5b8a5d69d6dc42a040408d05eb8f59bc668045917ba53d18f6b171e30c9c7e5751239b03f938956017b0cbff8\", \n\
+ ct: \"65ddd5e41e3462f18bdd29bc881c05fb4170bf8c3e11345bc72619949e95b43d7af0d975acafda0ddc1cee43ed4229de8da08f6978c1e3c3197494f6bd845f7650dc76c181f34c5cebdfadb55bdf18e38a0791f023e7ae49fb91740c592edaa756df94a31d9aa5ead3f8c973fa53c9f2f3d546ef32b238e80a7a1cd27170934c510c578c195b6d610cf7b58507b6bb2bf4ce708c65f0e541b0f03f1921b9d526c76b0590041f07df8169d97303\", \n\
+ tag: \"5011ed413fb4ee3c4974b00317f08df4\"\n\
+},\n\
+{ key: \"1351567de7682aa1b4ca7f8c06db6d55\", \n\
+ iv: \"7fed89116c01c27fba561fd5\", \n\
+ pt: \"d31e31840e699ac0c25b84dc43a6523f12747ea632312a36536d6d4936de3031f2341e8737b93be671000428d1e63c9203557e6a9a733ae6b8c7cff514f6043164be971f245855e1087da019b4d8a584ef848beb96c1b76370e4749e797e51a177ff44394fbdc9a13d51058cb441e76040345b7b1f35021f1f3fcdfdae9a8b66cbf1b9c0a7cf94\", \n\
+ adata: \"2ec3ac5e72eb0bfab74a874cb1b4a93eb9ba298d622dcd4a42b0f13460d85d3c9085ceaed4ef7d095754bf72f104d3f45b030b309a407fe3d63b90b54f7c73751c27e5fdb5989ee617bfb40c6df8f2d0b5e20a6407f34ce033af4abda32524\", \n\
+ ct: \"f9bbb37fc24c8c38c8fdc3f7371c521a59b8711c41dc42808bb46b94ef3defc1c44bb5b6db10485f49a96a8ca7437bf3b391f00ef3eb03b9e4a606b7a3d112b6e1ac497d5c4f2d109b57c6528fda659a4ec9b970cca4a924a4d9deb789f758ca0c45f68b114dbf703721a6928f806f2c52064b35266372f55295b56fab17a310b7def445ea7230\", \n\
+ tag: \"27e97e81ebea75c6542e619553dac2d4\"\n\
+},\n\
+{ key: \"18607d28cef787345a31f7969fea2c97\", \n\
+ iv: \"c3e171a4f0f4e0d1\", \n\
+ pt: \"3f6770689f01a6de9b5fe54bfe5844b6509425c46938d8b6202b2f09db86d4383b2d427a5315977987e8c7f1197110bfba2382a8df7edef766366e624b2357898d82c7de107d499b73d0d7420d5314c64dfcf4d5840e408d2e06916211d230361457b3c157d393227d2abb254ea5e703115405ccb4ffcd6ac74107b0f1fac87fdc166ac65bc73a4c4d2cbb32be53422412b24c9bd6f78ae4ea62e6110ad87e00f8952bd1159bb841f6122188d4ba13f5133c8d4ebfacca1342f847485d4a4b4f\", \n\
+ adata: \"d5414f9d9abc69f69d7caf7550ce8e724e64ebeef4ffe0ecbcbeb1a090b388a1115828ac212732be706e5633af22b1a9a564291c2e6e5f63060b33e64ab4ab8adebef63d5089d59a10874d9bfd78eb8ad84d3ff5315beff80568e6d5a13f5252f745afbd69\", \n\
+ ct: \"c1649c395dbfa9f37c02a9d704c1c0e0ed67a9cdd644bc8dafab36f6562c157acaa6be26361834f2cea6561d9175c410535de4f25a9e014358e34d1cd4cf300373910eea146836112444c3a3b6c0affce6d8abe0e7723cc872523c3a9406d2ea3d144fc023703c134d91d6a27580ca7d2ba39852ca66f9d35277862d023bc528a2fb56be1ce584616a7a712a4922368d5ae33d51c22d4592e085ad1e4fe359958571db7385a778714fa3cdb00f195b0f8f9a5a49699fec6af356b2cd87adeb00\", \n\
+ tag: \"1c7828bdcd5b844ec708bf658c140234\"\n\
+},\n\
+{ key: \"5399a6720fe343af121f7e150ff1508d\", \n\
+ iv: \"b3a904444c57d705\", \n\
+ pt: \"41ae97d919d4d55c31e8c09c98e2535e6f9b6fae7f235b080b89fdd4c7e71c39d145742f6cea84e088cc740d1ebd83167c6c33b581cd19a082db8ef62d1305861dc561d78c1b8cd2\", \n\
+ adata: \"06cde46fa6ca691d9122ce779014\", \n\
+ ct: \"02171b87804c4dcad10e64b8ec0206ca4f43d172433b74dfc7c656977ee1e25f129b99f0b4cfc6fa7e1c622f9dea9574790bf737b6cdda3dec80fa75a15f4842ddd1ae1e36fcaa91\", \n\
+ tag: \"5e753a3544cce28bc02bf4f214879949\"\n\
+},\n\
+{ key: \"e77d694650031cc58412c536d028db5a\", \n\
+ iv: \"a8546927d6242a5c\", \n\
+ pt: \"04efe487521fb87cc0a170a5540d3b60b5aa97479c67a449efb326bd90df005c4a99197b72e9a3922dc735c5\", \n\
+ adata: \"69bac8943d73b9629d1258a45bb6eb2a9909c4b81ff9ee18e90254934a7f0224426c7458005ff9bd9a9b4ff10f6c32898773bc178d374c1e95719eab4eeed16bc2f3bd5bc4bb8b329a8c8b83354d7b0c96f77ea7c89027358666867f9e18dbe84f21a4d8d9aa4c521982b1b39f718abc6af9960fa50821cdaa4f6abcdf0dff5ca1ae1d08ac1a3dacfa7950b6700173e911b6e9359bd94cbb293ea1cb1238b24fae9f7a568e8504121d4ca1bbcf75a6af64c7c0063fdd53de3abb01ac11\", \n\
+ ct: \"5ce2d9d50c952838d5303ed2997616ced986f9406ff62dfd247984e3bd0297800290eaeb61b6008d7f9c73f0\", \n\
+ tag: \"0bb7c8718b5e15977053ecc77256b6af\"\n\
+},\n\
+{ key: \"4dfa05ee29708d376ffeffbe786af3a9\", \n\
+ iv: \"9b86b386f45b99bb\", \n\
+ pt: \"a32bc7b2ec8fb6dc091eac90f2f8e1b0390a5c2753cc8a00496192960bc236152c5b5a73b644f4f789b81f72c15b7e6b12939811f1aad03f3b5c7ef4a72a0d3dde6a4421c6c457cc545bd3e9371b0912b53d929c76d2edb43f1725b6ebd971c246a0bd02b2baa5be4ceb0f7133f3fb65b94b10777de3678da34aa15a24b28fa64cf8913921b5e656c2ddee66327e02801ba0f7\", \n\
+ adata: \"efab0d0893c6d9b8e0bb31d55a70b7b5e7d0084db7e19862ac999e39809d65c9b429727415d67adbc4c9bdbd3a87ddcdf8889b4cfb8a1817efe36046c4ace9702ead89cda363cd9449240984fffc2523620332124a618a16af639d8c05d94a19d5e00ffff52e0d7c466fd37f515a503c603e2e175520327e7f8488478c58fdc0101286e7\", \n\
+ ct: \"1b949fdd88ed95602e3716c20842e28895c8b3a4aa3f4443f932f93856ad4c9beaebbee55fe8a61e496095bfaeb61b9f4056ae8398c9c10b36a65da8d6a44500f038d8b1cc57f4c7e2592d3d29a0c6c7d9234c60d344c0653b0c4c08be694213b1d47e214b9f28b9013d75ac9dc66ffdc8ee666ec6c772bba25470c70667aae33dee27706a65a3f99a316e913dbfac2fa7c89f\", \n\
+ tag: \"a2ca3c6f2ab09fccdccee5a2ce9d5f67\"\n\
+},\n\
+{ key: \"961df3a0f71b62caa1bf75eea2bfd34f\", \n\
+ iv: \"be0052b55ad6dd2c882a4e5d\", \n\
+ pt: \"2081244eccda7d05a5701bff171adfb851f8891e2db456479fed03d6cde36868613ff89a7b743d45da47f827b51f5afda3446b3a5f69125703c49a01b72edf6074b30a8849907630bfed5f074f7aae5359ee\", \n\
+ adata: \"2d6d429cb3cf1a6bbff11dad0d6f9b67876a8ddcd58ea0b55696fdaf9230c6bd46955fa96b1357d8005421a96bfd330296f60122db81a902006b1b2cfecd3ae9ea38f016333edc023e1156823042e177f63d5d3b81b1e6edf00fc81eb8f8ef90f474c7af4de1b823164aca030b4fd25bb447623768\", \n\
+ ct: \"f84da4f3d743b637fc353207b9d6fa1c9c81542ad515aca6409763b9998c3508b1477d3a543787c8fee560e59851d67a8780cd6b0e49c027ee3f4aea9255dc1ac4424113d1f7d046719367dc411904dd5f31\", \n\
+ tag: \"4df6e0218fdfbfbbb3f0196fe95cc499\"\n\
+},\n\
+{ key: \"11bb2aa441b85b66f21dbb2e782c3ccf\", \n\
+ iv: \"d9a49d989407c4ad4cde8dce\", \n\
+ pt: \"e96021482cad38bdd315b64dd6de3268cf19c6e3a92b432cfd\", \n\
+ adata: \"0f136f2d6a4b26654232a8b76a358d69dd4163ba95291b09d39dfff650027b47d3d0111365b5f8a09eec3b4cebba80140d3b0b7f1b303394a5839e08a0bbccd0870e0322b6a1d4292296bd5b74129fa78815ae36268f0c63286660eda9bfac8184a28a6a9cda0d8ed7a164ec973f1c90c7ba8b9d04a564627c0c958075778cebc9f182e8bd915244eb9d9ffdc5fc1092f77bf051c339c28072622957ffcb0e364014e79318998723\", \n\
+ ct: \"3cfb39bca22ecad48f311b707b51a31f174554cd7e8b04521a\", \n\
+ tag: \"7ca58d0f132f073693245554ba96dc82\"\n\
+},\n\
+{ key: \"5dbb878c457d2a8377586744adbcdd80\", \n\
+ iv: \"67ae7ec3abd0eb79f6cba666\", \n\
+ pt: \"425198d7515c9e56b01c060f97da666c181e57947f3622abac2aef88159f1d9def5372a82959d85b6648b26b01d0b7762ae4c124795718c4b5629782894326708b410c4e53280799b5c21c7b81379ced15d2e2d4f530a911c0edddae59c649053d6607f4d3dab2edd98c9919097558547d19ffa37b351a91accb72349e4571d8f14bd668c28476b277b85ce12ea5b703\", \n\
+ adata: \"942f66711897a435fbc7897f72\", \n\
+ ct: \"883589dcac4b847a09c9635145843f836337f852f1e67fa5ed32b095dcb621aa8d39bdf01425f414da80952f0303d9116bd58a910d2bcc71e9bf38b31dc9ddebcb10b4796c6497bfb6579d5d6d0c6ba5a253aefd909fc5bb40b033ca99f93c9877101a5bfe08f7fb6ce0585eaf0849c59a2db0675ac4168c98545aa9dbc162d9779ca5169c5d81bade9438f36507a4e8\", \n\
+ tag: \"c67e12cf11924d6a5460da95678f70b2\"\n\
+},\n\
+{ key: \"ac28f7cb6cd09123fb1739405d925e3f\", \n\
+ iv: \"f8438269db661365\", \n\
+ pt: \"cc22d65f430aa0a1b30b1b0f6e10fe86f4d2b2182ecef59d6461d895d879133607195e0a9deb9bfeddde220d4f53b686855c89f753f7bf59bf57729f23a8050fd37d44a368f88d374771e662a32cf62130319b52df59ebaf8e4783dc9f12d0eb240ea044bb35590f8e6262809578a7f1f63b12c10c0d51b4ba58cfdd4d738861b39d0d59aae831654588e245471a\", \n\
+ adata: \"6d85da4b345d59f98f10bdf5738bcffc65971f80dd64daeb9eefd2e6c038d3e02a0816c85bf7d3fdbfcaa412edc46eea7218cdf693d1769d38affe5413766045648fdcdc6e03920877d4f59001dd6fd1519eb63628cfcc861ff79e22e8ea66ea1632ba7079319c89f563e97d7255ef6a9bdf7c05878cededff06f4dbdeaef4b573e4c032e3fe21b659db15139f60cb74153e47710a33220aef6c72\", \n\
+ ct: \"94850686a65b61a6996831c3999246237d92e65fc35f0c3ac867eebcdac0fdce4f96643a0f6418a8b1e980360c8b5cd046412d3bbadca598644653d6631a4f5aa3a5c7378b050dcad99574933ceb2969a8b0555a542d414718bbeed09b1aec7dc10d83468e8d79ef17fb2016449fe5a5db42a44f5de4a99f05541f3b0cecdad05a3a7614c47d50508db9eece5289\", \n\
+ tag: \"cbd8d174d5a8d7b026470f390a94b321\"\n\
+},\n\
+{ key: \"1c6778f1fa807a4700c3e981d253ad08\", \n\
+ iv: \"bcd625a61b01ba64557d78db\", \n\
+ pt: \"0c7e31605fe15503e65cf35ca0c5353be6037d97718b60e6b93fac207605fcac68d270ca41c0f10e2a58fc9f62bab70f4ce3fa0e7228eb3d792afd7eef80f9ffbc4146df9ecee17e2434a98f42c943629e8227bd0a103eb7e49b24d81adc1d\", \n\
+ adata: \"beabf820bdbdaa002950237f881041b0658f8fafeeacf86abb5a060844297225609dc3e61102e42a491aa7815be3b7aa\", \n\
+ ct: \"c17460b87d327f4ac74248fe231872585b1524d8a0ac88f269b9077ec3ba918bf10f0be441d56fe2724cfc1f0258b65ff00ad1310d1ca018b57423f05b733a8fb1a5da128f6758ebdfa86e0d41d16fb756b0015c73c2dfc2b6eadebdd10401\", \n\
+ tag: \"2de0cf6c7777ed9dd37baa3a3524f28f\"\n\
+},\n\
+{ key: \"41f0f2c752e246234e0a1777f2e04937\", \n\
+ iv: \"2aa4635ed8c3cfc0b0e3f56e\", \n\
+ pt: \"ae41b310eda044ad9fad2c075821019a72461c855df7f8a0d1f07e13dbdabcd358018526d4df88dace3b04043d21f87466e5890b378e83a9ea9727ba21424baf384b134de1c9e2372ad2939f03c0c50fde7956871c2390fe112c693ca7149f089f62eecb6272894a877363e56488efd7bfe8592973f6ee726c697adb8a1b5cf3921ccf3fb283eb1cc6a7b5e2e4ebfb8e741cb27d3736d2\", \n\
+ adata: \"a71e8d04382e8ca1abaaf4ce70a41ac1a7a1fa593877946bcb3bb0d7f2ac2c7406a453d876e32a665c0790ec3d89c206b7bf9b01565b0de70d527cd36e9a48eac50e32f4be357a9309\", \n\
+ ct: \"45f747174d855e75b128cc182361e1bfdaa0ce905bfb36786b6e89200f72f27b9744dd012c929d2fe1b191a47558b27e10ce007939464aac9c04e05c9217f5b3021091add3fa5d24b0148ea257f5efd8990af45d9431dc79a11b6f478efd421a696bf50fe5b428573774b5f06384e953363eda00b63702e45b15a6d23e378c14837af46b9d1c4e532c31bc5c12e52f075fe5815862e7c1\", \n\
+ tag: \"5a79f03036b1bdb545771636afd1c3e1\"\n\
+},\n\
+{ key: \"2062e60a5fe9dac91007be74ecb87821\", \n\
+ iv: \"325347de8cffabc11b93bb92\", \n\
+ pt: \"35a7e0d922ee54656ab27f0890502eccdbe1ff734815edecf432719d0af34fe538a6ff5c0b2bfcf395022d304db8edbb372f735038fbc9af40a39e86fb6620a598f6c59984dfbc8b21ada8f0cab9b35e04b71977c9658f0fd6260b648393650133c05909b33beeaf171b9cfe0072c319725ddf96a8e41ce54a1f788bb02d72431c2f09\", \n\
+ adata: \"e4914daddceb8bf94d1c0acc6c27393dd3f2d251983911786c15b84b41d80468330a457981b3470f132b732a86c3770610e56ce2a1f11948b637de6f2739698c0dae417d82d6e89314a6070600bc653813ac2d748182d487d9fac345b625e1c0e39041ef68ff2d76a0658c7a51f5c01877c12db50a888b462320d04c8cd644d8db55218f0642a718c841448b470dcf8d43a397c4885d2d9e9454c46f25256a7877\", \n\
+ ct: \"edd1f17f8fda741038a48f4efdafe3b233084a217f81fc26d5d3266e3d0cfbac5c540531cd3800a120dc45d85e4050c0470940c628d5c92af243520c45a0a9b3eb5e3aee6e78ce835066c5d14ff7e1f47aa79dc6279088128b0aa55157609d4c81e9d960829f605934c5711d137658713b33bd3f24a6795cf6cf00eb4175db0be72152\", \n\
+ tag: \"b8617bc08e567375e209c8a60a2a0d39\"\n\
+},\n\
+{ key: \"48e2f6f22423d1adacb8593997166ec6\", \n\
+ iv: \"e015b9869ea3c7ea\", \n\
+ pt: \"1380b9e3b7346e4c3271e8545aeba408fbf9a8761723691891504a43b63201b90d03428c91f21aff894c696510d16b9eb954e200021b7c22063eb9ce241f2d8ccac2fed62c8d7d17717c73cc9b98085ea5957f96314ca81762e1528c39393e4c9c0b75868778a7cb3eecc6988170b7a05c7e1acf50715245de94a6e3b2fc0955d809321a9182e2f9d74a1cc6766bd18e1f98703bc1826efefb484f6c6c6467e295e99feda05c17df8feae3bda4ea440266afd78abdecb5a51a1aefc76af7f4d734ea\", \n\
+ adata: \"f5836cb48fad8a83e42476ad63104a01bbc8a4ec843bb4fe69caa391641a368f3de81a7cbf1df3d4816ee8a9476666a7a7adb3ea2763e131607238b1ee34bcc677e0f05b17bafd15ca9f0350974a648d70f85103f21f33f65926e50742f6018a70642ef3fb7e80e7443a11c98a990fcea7c2b38cbda735a01b80aca498a6718f63ab98e997657e589d7a3ed5d0b588eb3c5061dc447a0db57f11c84551eae24f66fac67fb3b626e69b8dc262afb294e4bb37639196e2b5777a2fb568a76a060977\", \n\
+ ct: \"4776b502e50a4f4be85dd287f28487cf63ddc953cb25c2ac40ff81ec070e0878b65c9b0191bda65b3b96b5167a599989b03d5c10fe9e9435c90d4da42af7427d42d6397ece67258f7e95a733e55788e34492ec796bd6f6d0106459fdcfe149b37079b029be99382314b197cd72bfb420a6a0878a189de2067f1d5ab293c3eafee82548e1cb0f82472b85e7788d799ebe866e0b0223b313d175772b014e4412db23d2f51bd13135a0e3657bfce11494d8de3fe2ec73b0d7ba9fbeda7dd0af2a5d956d\", \n\
+ tag: \"590c6037f9bc861de92920624f9f274f\"\n\
+},\n\
+{ key: \"a4afdccfb32c7bc3aecb44fc5c5fa47e\", \n\
+ iv: \"5ef04a5e47a03e00\", \n\
+ pt: \"7fd4f9073551778433c8c69745f5f818370c19873556e19a50695290661f\", \n\
+ adata: \"10c23fb1fef0c7dca5588655461e072571cb164146d4cf622a94cc66e0afea4cdae8b717c0abf9595a3f7473c965d2736f6552348d5826446648c72ab8914e8f1214b0c33744b00f0bcf2a990c2fc1a0a427782844710146b5f0107662b5bc717cc6990b3ec2366b3b6e05d4c37531b2870e1a84a2427ddfaf679209653fa20b86345ba2a2fe8496ec248eed6d79045dec3821\", \n\
+ ct: \"884de920262553e614b12da837305b67ab98363ca681b342104147eaaa42\", \n\
+ tag: \"81a3dd818ef5f620187e64b7c033b9d3\"\n\
+},\n\
+{ key: \"70c86d85d66364a6673cc819ccaf5c77\", \n\
+ iv: \"020835e88d8ee579\", \n\
+ pt: \"05bad508819ba1ee417b4935e3fe730acf874e4df901d43e571bb0090047a2d9ba5d7693ec26497655c55c3560241bcbe10965ca23fa8774f4f5dbec5fc6a289dce20426451447230f656a55\", \n\
+ adata: \"eeeaa8a1821cfa6d68fdc2da46831b2b85\", \n\
+ ct: \"0e6624040af501f592d5909f89ecb262ec4ee6fceca4fc70ce84cd0b4d8e86850e89aaa22cc0f3ce7634e72348221c2df26473f539ec4fc926efd75d5ca18d4c8be261aa9a3f90c58e8c1901\", \n\
+ tag: \"f5675aa611bbcb648cff62bd8e5f9bd3\"\n\
+},\n\
+{ key: \"3e31f1a00b41e90833dbe3bb6514f41c\", \n\
+ iv: \"41ede405e996c29b1c6fbe7b\", \n\
+ pt: \"35e542cd72d18ffd042532311bf77bbf078c3de4dee6fe86f5721cbd78869f8c81ecc4560f0fd3ffc17b448bd197b212989a3ceb4d0757b5d4b34984a721f0e58955a2b4d60fd572914bcb0cb8b969f7fa60d523074c7f2e8c9c1de172\", \n\
+ adata: \"9f521bdc4d7ec1c2d55523\", \n\
+ ct: \"5902e4d533663e0bb64db1b4c85a1f8a19e1162c6eaba1e8e1d06da0e1f3bae8f440db9862c2d5df0f8069f6a51dc06a2cde53e68a6e1ba67efc638d62c7bb329bfbde7cb6598b89b6e0687e071a3230085adda39e1b425b124025ba3d\", \n\
+ tag: \"8ed0bd3a007808a3a6c759c9d3582ad1\"\n\
+},\n\
+{ key: \"8a436d9afdd067ef44c51a4d5e349645\", \n\
+ iv: \"a98c34d25b555e2fe645eaf7\", \n\
+ pt: \"736f3091364ff4\", \n\
+ adata: \"0c22c2f4ed2dfc0f6f018db050dd26352873155e42e194512fb99d62af1bec4a43e70e6df8aa28b584dd959cfc849ace129ac20cc95d5a57f294dbfebcb282501833f4db5b4334\", \n\
+ ct: \"56420de39ef3dc\", \n\
+ tag: \"14b6d5a6787cbc2b27d6fd006d4fe310\"\n\
+},\n\
+{ key: \"89c146068e022f28ab13a1fefe934d82\", \n\
+ iv: \"b73cfe3c72faf31d8e178e68\", \n\
+ pt: \"2aad2bec8e5fdf0222857fd1c21e845547159b75056bc2a308801a4d6dc54a3d63806376e725606a0905ad3f96de58ac39f7d77e91e4d394aebe991de95ddb0c39fe1f836ce9073fad4b0b95b501fa88dffc36f1706600c66acdb61e2f04dea4a0ab6e5fd81d8ea361d78c38e95b4672f5b2e20d765e06c694aaaa83f1d31aa75fd61c8a33570da6944e5023c945423cecece5061833d73bc807fc4dc03adef3dd6cd8339dfc5dac1bdbc25c9d29\", \n\
+ adata: \"9c96fc1457e09afb30e3207133a362e798755e32fb07a636c55c42e4ca580ce1e4da2bd983c61fe48dcc3830ce710854c6ae7d8975447540ebbcf2be9f7543b1425f7f25333c5c1dcfc200dd4f2daa340f9e04036eab8869aed3c55949acf619ea3ae51b3e28d4d2b6cc0d441735e256db3315b0a0f6a11506982ee8314593531643cfed690b6d552791e80b15751efe1d51eca5c7081eb7c31ac826b9262a98b391351290451511706d891d67d5\", \n\
+ ct: \"51ee3f131679b2fc84bbf6495d7abc4ad19963129ada5c77100b45186631a9036bdabb4d36ba7f2410645d5c2a46968b4d3ae75d227ff94824c96523f3b2618f433d76572ec1d2d472d9449d8eb4255f3fe598cd2ee6861f4ef78d1208ee6e95d9e5aa488e56086839558e8605530a04339b42a9aa3c381796fe91207006e144c8f93f98dffb76be02b0a09c67865cd4a3c2140f66963235e38a98bcee356fe7d151ca835904fe8de7e7025127a2\", \n\
+ tag: \"5dd6d0659d145a52027e14bb85e26694\"\n\
+},\n\
+{ key: \"876f3857ef84ef05850c5a3454f347c3\", \n\
+ iv: \"4968045eea7000de\", \n\
+ pt: \"63befda665650e81137a92e77b6b69ae78b2e900405cb5\", \n\
+ adata: \"7d25aff2055cfa185b945829c62c84e27464e5fa938308018842ae8f3f9fa4ce2ae543f4f16711b832de7fbea84e3fc862c5348dd26ef1e7eef2100d62e88421e8295529fa72e30338352b13c67d3b2defe0fa5211894342d5656a1369cc138add0d70a206ac967a5a3f2407a62224caa46fc8ac4b6914dc46cb990d1a177c0d718ba1252f1f4d561e36196b0d1f\", \n\
+ ct: \"341b8a4f9956597288a7ceb88b4307fe14a2ef34a7bae9\", \n\
+ tag: \"2fdef9a468a61179589b7b64571f5866\"\n\
+},\n\
+{ key: \"3fb1542620dd440b5b17f76d2ea402b6\", \n\
+ iv: \"99bf33109a4c96b66aef215c\", \n\
+ pt: \"c71f13f06a2d52858f226077e6fc3bdbbd286afa415db7494f230d53d8e9900c62e491a44a5394f0b2c13e4706d54ebec5f6e0dfe5f94d159407841b7b0db6757fff31ba21b7b3c3a6f85a80c4d082d0455939cf13b649896167a8131483839914d99cf6c42e1257b4f3997de875a3f00db91da6b7630c0a5f7532ba593a0c043dca72d4a881b2a3ce139efa7911788b53e90890c7d7471eb3c89c0dc492e22e2e2a46a75c9bec3e188400819d22f0e7ae25097fb6d483e4\", \n\
+ adata: \"7c8695a9bcc9e68c4e885555\", \n\
+ ct: \"f65c2ff57b33ded3bc787f24e731a232ad4a12203cec325cdffd56400ea5a4b1f70ee5102983be051a8255b15dedc24ad0e01c8f4b447e7e8464bd79fcd1ecb67f7aa6f6abef8d72f4512810ee12d7661a6047faef74a64dba61e008f4c2d6e15123331c304d1ab4d2604c9fdd042da1fab6e56dda3cde53df9be3bdc8461e0e89dd2f23026fd36f3deeaf1b26a2a60804e8c682c5bf58287a3da6babe78bf36dc44b7041ee19681d27edbc5eb05b99854850de2f330222d\", \n\
+ tag: \"d9466b728ef47cf9af1a5291c910d27b\"\n\
+},\n\
+{ key: \"a881b70392bb1c640310f3f532f2339f\", \n\
+ iv: \"ccbae1db55f1a4c0\", \n\
+ pt: \"8b9571b56248da8bf7b1e32fbf4a2a76094e67aacf3aa97c74f6730107fd9e039f2d77e789374c3290d20b89e7232cf3e6f9913f6aac5b4170326b732c7826f38c18957268c26867b73a41b486ff2112edf09ca8a1ba7412be7be0f895cd49e0b30265cedf4672ecfe3f54945ebdc6b8ca53725a3a262081b37fd8d135f08650d1d1749612bd325d89642fc0b010d4d3d056ffcc944a7c4f4d1a52d0bc2adfe28cc2b37d220a7040ecd65195dd7fa7d7cdbeac747f61c76f59df8ca21d1caa23d04d7d6e\", \n\
+ adata: \"bd8dcb40036979331893b0c8af3e339d1a8318ae8ce6a2f70400d478d5ee9cccc4af306b567002fe11263151129141d5\", \n\
+ ct: \"0e0cb1e9be46299fff873ce6c30f1f3ec23c94a30ce18b84f39c4c2a5b76deec6dcc85c6872f4e6c6769270ba86d456a4c580506b8906336626425e7fa41e8a73440ba6663a621f0f9660e58113e0ea1d3fb534c279e8e4ac4a9f8c3a2701254a1fc6e09793b8f37a54edf6803cd26dce0f1c4b39da2676ee6e4718ccf1d777bd864f699f4a8b1662835689f0bfbd9c22c8ae8bbc55efa7444db9b844611b13e51b8902180ff88b027f7b633b082dcc7a80f6a15be96a9ed504b59c2cf8565744b26b2a3\", \n\
+ tag: \"1bd718b31599e1bbe551ef78b5eaa516\"\n\
+},\n\
+{ key: \"7b34eb2268298ebec80a32b955fc343c\", \n\
+ iv: \"5c7b02efa676469c\", \n\
+ pt: \"d0f08a21f503fb08fb4a26f503aabffc1d5c6a2efa7afa94b133ab5446034324d28c87a62495d4fd63378a0d0ce2f83b0c7afbda692fae987e94bdd3851ff0090c2fb561686297e647f10eb1bd3b6df202adb0472d0a844430dc8bea72f9f024cac37b340bac32f94152e465564d8b27437226a5fa58e0e15d1dcc80267232a4523e48776491c90f1c9e89d9243818427a687cd7\", \n\
+ adata: \"8447c026a31ecbe87fae95f5df90792db1bcd906b0bbc66576c3a751932359552fecabfbe7c7753f63f6cd9abb33ee70dbda23542f8e79a86bef\", \n\
+ ct: \"a975c421f278bfaaddbfaa45a8c75a86f2fdab4ccba609d936c759988e2223d23454881079f85e2e5246b6652946beee7caa26e3b1a6aa3bd7d94f26d0710614f690220eab3b2b8e042e6b32d0b756ce7534087c08c879f3d17bfa31e40d930a302f0bcce1fe6863deb952e6ea1924a15efcc4ad0feb979f9f975ceb6b4777d1f97e904f0a196d0a17f9d25264df9e06fe0edb84\", \n\
+ tag: \"73c8cfb7ad92e25b31419b642714afc6\"\n\
+},\n\
+{ key: \"52f4e24b887b8f68868428db3c74046f\", \n\
+ iv: \"8a30230496b40cb6\", \n\
+ pt: \"e6ab92af314e87d29a7c487f5fc2902de23ee6afb736552229be0c1a3a9a66509eb86200fa5bbbd0cf626015ffb8a4c62827166b937c66695cd123acdc03d120a0389a01aef0d343d650bdb9530ea7ba449f688d6f49dcdf14ae59b0f5c69b357f346ef4f0cf164c29a8183a973113ccb1bea481b6ab8849583d6a3f03c3232b116b66f315c3a7c191b0f9f01088034d\", \n\
+ adata: \"db701b58e09059bf7f8bad68d5c7093214a821f9f1c55de4cb5f2d9781d513a782a7bca0b163b73bca52391e\", \n\
+ ct: \"2bfaaab2eb3648f5ebfa60dd8102c712479c84db50c6ce5b4f9b3d0c1ec179cb72326b3caddd03fe92cfc1c2aa7759b3c60a03d60c3c5a92c697e1f72d814571fc37a91c7c8efcf5e5e32706ee6ab3896ee85cb786484bf0e236d804a87996e954d115680f3d5c0f5734c7324e4112297759dac7556e26ae309070f720559243ae08519866fe6f498f7a5a1dc222ee92\", \n\
+ tag: \"7961e205eca416e62bb3c0c095a72a11\"\n\
+},\n\
+{ key: \"7d8985682815efdf1c97d8ee4d4eb0dc\", \n\
+ iv: \"18322399a360ae4fc14b1bd9\", \n\
+ pt: \"f8a116745763e8db99fa855f215a9b5aabf90ffe9ccaf999bc6f911db5aa994670b89e19d88b800a79c5e5c2db013c9d0e304d2d55f44bedf8f0454b99c6d240779e45058dae997c873649f1dd80943604b8c21ce64154086f0e1ee38ea47027f8f89c1b4462c32c6cfd34d9b25cc543c0c0efddd57b52ff017633397cf27bcdef812098b3b3513140d579d98d240e2c\", \n\
+ adata: \"9f875eabd293588a52f541eae09a6ba395c657a8d9d50151cda1f9b2fb3842885e7f9101e02105b66d433ebac21bc906f235613773f064e270b0df3f1bade46a01ae1e872f61ff3703de12006dadae3a87339e\", \n\
+ ct: \"6a28026bb290fc18a7949516bffea9550c4f491da44c0103d93f24e114517b8796dbcf3b6c875cefe5b3e167ce41cb07f9f4dd07a25be70606609103e21bd3b022e6bb07c4ce95feb96425a00b01082ab518d5632ec8f9c3e374af2b1fd3b41e68fb6e55b0ce91dbfe27d3897e6fe82c90e13ee51d5ff5145c182f38c107b77ece784f2444a27a5f6f87b55c8d2380c0\", \n\
+ tag: \"8010457b5bddf996fcd10857d5d45783\"\n\
+},\n\
+{ key: \"5832276ae81706a7905618f27d9c08e3\", \n\
+ iv: \"a3bb6bedc055b7fe\", \n\
+ pt: \"cf2cba97\", \n\
+ adata: \"25089048f08956ce473a1924d33092574fd11da733fa362598080c1e5a7470d1048c2f0ae89ac904a28eb3648c3d8a401808cc1de01e3bfa76c0ca8f790d7396a3f893adec9f436daa6c008dc45377b5587ad8fbd7a8360a580ca717278f08d067fa800645e657f102d1a5e921e7ed7c68a3273b4ee3a68b13782c8e93614e83e4cec302c2231a2755864d5f41434b2aadf3e7489fb2324d3eddab3752bc09f7d923a186e0a91bd147f2493b5d7a04b49086bd8223ddf56206\", \n\
+ ct: \"19313ffb\", \n\
+ tag: \"d551b6eac1fee1361423308787969c71\"\n\
+},\n\
+{ key: \"5a451933452cca9eb60ccf1693506045\", \n\
+ iv: \"c593014ef8d6bc58\", \n\
+ pt: \"a73f0ac18dfcdfc1dbc0ac09c557648ce34e8b7a5f8c16f76c29bda71f471c5a235bb3c71630d33b6b2fa46672b21be330f1a8ca776afdcaed0d33e8bfd3d80ed4c148d77adc261e2abc5b2b8a8f5e82c60d1240a0d85665883668150a8b47ea5a9b152f6947989cf04c2b759f7ea1ed5047bd49c2bd9b489ea64214f492019d205f2825cb51de8913eb178f4f743f628864694e2c4c9591d916\", \n\
+ adata: \"f13f116b93fab4431e017781f63917d9b7c23c352c6b79eb6cb2d724033b4f90f6d403dd544a45280ff7c65fe7e0a5b05461ad89de4d7d63199469a212004bbbe13ae0d537d7b0fff2de7620f021cba487\", \n\
+ ct: \"63488e20c90fc9d3651eee3be6cc624d83ff0fea5de55f0032a480dc6da02aaca547aea6ee9b459d07c3dcab7ce0b6d5b3f26f831f557b917abc70982c9a57fb6ad4447ca6e78de34980f737c1f9587b4fe36c0a91dbf1451b76885064dabe22c2aaac1b05ce9ccb1e4637f7f5c6212cc84f8202808ac6caab6bc29e89e62a8b5b112f7cf641450027a772e9de06dbf3519bc741a6f619acd7a3\", \n\
+ tag: \"d749f6815f782c47a8278585f1b68b03\"\n\
+},\n\
+{ key: \"599864b4d994e741b6062a00e2984505\", \n\
+ iv: \"aea3a085df2584b1\", \n\
+ pt: \"66ea1a6add6d71e4bc2ad7b5b6a9dc8981a6b324483ff7a5b9f3200998060f6ac7d8ce4536e0c14383863190b34db2ebabd42ac32dffeaf9bc373514b21c130b1c80c1a5ae106617f87b7036e2bea7c85b1a054356f99bee53c70eea924a7773dfcdf2467bfceb297634b14e969c0a21f8fe365f36c61b28c5826869e31c856ee24fb8ef4b1e29d14caee236e3\", \n\
+ adata: \"a06831f6b66d60938e8e9e5685227c538d827dc8a37062e449f8fb06076983641f8470dfe1029ecafa82dafd4f6ae4ecb17b89d9f8c2302eb46eb859b6e9177844ad400fc9300dc01c20ee94aa511bda4e546c3563babe47f58ac744f407b1ea4056008c20991f21d796\", \n\
+ ct: \"36d34a3060675122d301c4b04fe03b6d51559fbd2bd22f877bd0a1896677861c33f57ac76151b1642772e08c56a34daa5ba069092f663733cc94f649cc1315b191af801625d6bffda95d178030ae501ff59de82b2b12e1fe75dabe59cbe65b59466994040d23ee333215cb0ee4b77f65147e8183b63a91bd48f11b5bac280b055549b7f55ad651faefecaa6ce3\", \n\
+ tag: \"1888aceaf5d2d1c68938e619ccf019d8\"\n\
+},\n\
+{ key: \"21c1874331a367c42dda65f3b1c2f73e\", \n\
+ iv: \"7aa3ac78c8f35a9b\", \n\
+ pt: \"447c2d72b08f1f1fe8a15d1d20aec95d263f6c6e790f173fe4256a6f413a0cd8563ba5a2352ae0738b22b044f007d277ef2076dcefea4f88ebbb6eacbf90263ccf01eee4b712ceb280b164d642643cb2bd\", \n\
+ adata: \"ff3e2baba372bc676d8ecbd3d8caed1aeddd5e503fb3c34a066f093d1c9b76094c2b5981008a5d99a954e855e577446f6c768b068c51d1702c9f930b3c35b8c1fc4d212b329cee78fbe1348bb55d122349850a4ae58eb0b4807ee587a8fc3d2fa9dda0c72a13c66ccec2b31c6386dd8c2c765533c2b3a47e5d3ffab0d42bf2343a54f575197f70b1205c442215101734b52a62c592bf30730b\", \n\
+ ct: \"1fd199d15ce0a654e67cded62bda51a3d1ddd786bf2c1964d784a20b7eb4849261522705493b365e7884934b89ff45151a209155ff3dfd8b90bd0927b74b235efa2711a4995532a334e4dc5604fd616884\", \n\
+ tag: \"e20f5514b88458d5a79dcc747770d23b\"\n\
+},\n\
+{ key: \"a1654905a14fd02587bd20bd91f60d96\", \n\
+ iv: \"aeb88c00ae6664597b572fcc\", \n\
+ pt: \"ba1c632300091cb1bc068221eb70ca725d7df24a2bc9bfba432e42cd3ad46c206c18f23a\", \n\
+ adata: \"b73d9d75bfcd3b74c493618360abd901266efd750412bd292f26968e570472d5da991c089d4982b3b1f40e10a7e6e96d5ecbb364e7d75f4b05cb4b40f266eb40ea94e5c41fb668b61050b6bb42c15ba9e87f15c742c009ae7db735ad895205356ce3417a82f8\", \n\
+ ct: \"e54183b768f1f5da5643fe11450bf9557f746393de035d8d3d5848137a19a2ff4a8581c7\", \n\
+ tag: \"0ac796a433fd34746355bed621044e84\"\n\
+},\n\
+{ key: \"2f8136eec8443976f1077739d2a443b9\", \n\
+ iv: \"5d24d33a406be2dbbf0e1aff\", \n\
+ pt: \"5c460bcbdfe8bba554deaaed4472dea4e48e19208af0da7564a464c618ea5fb744178e7c631c67da0cefd4110a8dce19283be1662bb6a5153f91e26db585970f07a7e5a8b7f44348fde9ed19666f7ff676c718a266c55de5903e869f4265e85776b749b1c00c14a7c472fe444cffd11101fa30ceb2dc5991dc15b1d8b5d7deb22ef3d01586\", \n\
+ adata: \"d9e8de4e6d6873af2ed09f4c0cfcbc33918f64d8cd558afcce190ee7e03463757c0db1e94a3adb5082f06cc6b00665c14ef9155447a45dec1bb075cae546388604a06647f3cbd6dc2b53e2f41564fe0458c7562ecb6445734ed3f4542984f6108c763e70c43dff1fbfe973b296dbecea4ac58bd81983d29620fd8e617a6d5b130511e8f11f32b8f16855aea73089134291eaebeacc8961b99d98\", \n\
+ ct: \"716b2e0b73d7b5611b1941898309e9fdb8c153f760ba86e014f71779aa3d9ba84ac84228f9af7758d8e58ccbe6f100e39a9d6d261af78b254d9798aa7a0c154cece0011f1e447b7ad4747a83db4a760922dfce03dd2c7b1cccf56abba2f12af0d9f6c0ec1b07f2f7e5ad100cd5f4c53e9fc04a59e18c589b346a1d57c0550c31c89aa81063\", \n\
+ tag: \"6b8d5abc7d765e290e2b5273aad8efbd\"\n\
+},\n\
+{ key: \"f99ebfdd204617741fc8f4c5efcf7bea\", \n\
+ iv: \"6d4fd9ecc4106da24a23811e\", \n\
+ pt: \"91788da7354c185517a9415c39b74e50223a53c19d1eb0f9726e34b3c9a0576fe8b9c07e8a5043eb37a69dd380f7f1f74ff40dd5bf45dbb06789cee32653ea1764af982bfd67b23b6a9575dfbd3a6e54c9afa87033cc65cb6d5a7c8b1bbe63bd618a170ed701aa42ee6bab7bb105f20167877413dc6fdc01bc194319670610e931\", \n\
+ adata: \"\", \n\
+ ct: \"5c1b3b264ad104625440b680aa296db00c3fb49dcc9ed46873f6e5209099ff1ab0d14c5468fe5c992747e805e2738ac7c10d2dcf4d4313968d2a2a35c12bb46c2d8b9b3e6195ce326ef0a89ba1ee5daa5a595c4b4ae79ccd0601552d8999dd6830f6a78dffa2d8c9a7dc7aebf61d58680ac65314717b7e24e4d8adc1cda762815c\", \n\
+ tag: \"22c16373ce8cfccd0f669ac5c1f3414d\"\n\
+},\n\
+{ key: \"ed79aa3d9a6c4f7f154459395f7dd6d5\", \n\
+ iv: \"51a865b75ff09e2a\", \n\
+ pt: \"3d03e7232866e61008192b4e7a50600d733b3494d6c57c461b56637a4e7f5c5ad459301852a8e7e79ee9fb1ed8609c1c51\", \n\
+ adata: \"40d5297537c062a3cb6d8c74e5cd47cd121af3f48df957bd55185ab38f7f118099f8e6e6a2616652d749ee72ef0e854cf8efe0af77b96be5a4447f8aff7f822bde9f5df1a58d06e76a53c336bcb16f8de7d4f6d9998547718461d7613b2c9f807be19b0a2dfaf8e3c15f9500eb14cac0dd9253152d70a054236dace1df0a4a4c8ba47b4e2794\", \n\
+ ct: \"87e918bfc9e740379839ddd777c92f5559223724a66ac1971f0e06ceceee980ce11966f73bd02f6a63fdfb255a9be8a768\", \n\
+ tag: \"04d1a7c5f42d45dc985f47b86dbe3867\"\n\
+},\n\
+{ key: \"a2e3ddaff6095afe18b84bfce0ae6b85\", \n\
+ iv: \"8604156344cee400\", \n\
+ pt: \"d45e61ebedabea3c775fb19a69bae095ca202124c0314575249185f82c6398719977d71eed57d075a5bf39f7f184076a208991bc3c21de8ab82c171cc825b4ad7417902b08665f3bd4ab778c10bbffea351226869b9868e0e392685d47a513f7ea04d91060\", \n\
+ adata: \"d1032b32ed6a029fd7b04479be17e360123e8c644d27320c76cffda1e6a8d0eb0dcfd1b003\", \n\
+ ct: \"2627d20534194678fd3b161b337afaacf142ca51c8839c46cfb614217cf456bf6869b595d20fee8838389361710c0b8cf7ace9c610454fd29a451bee7d897d23e60be3ddd6c6944667e5fd7173756e9bd40b836076e471633e9feafa19f9eaa69a2efa49f0\", \n\
+ tag: \"7a6eca3f80242ab31ed3c08371eb2cc4\"\n\
+},\n\
+{ key: \"1987a1b990f469929dbc4ca7d1328999\", \n\
+ iv: \"c79ab5fb7b1871e0\", \n\
+ pt: \"40e50aba8ab998c1202ac1502b24c06ff010aaafbba390367aea7087d2933052f2dfebe195a4b6bd4014ba76a93703f3dad0596b65e1d0433e5b1dbab6390e29c2870caffd80080f3975990ea33f68324df6fd28762ce6a61285a5a6e48be090a87a5220e89c54f1c790761345aa317c2729e4357de44499be37e0772ae3788d3a5c01747e1e35ab9af116622da8462ea25ed4639a6a3fecae22f1e4c9a7f067e5\", \n\
+ adata: \"2d413fd0fac64bfc65cf6681c7ce9b3b1a28e2643ca4ff00c67a7bc7a0816435169fe21c8ee413c3c8c3345267c446c58c4a10aa70b8c341feee9472ed146adfc9a6789d8b669710cb6d1b3192a9c59b3e45ef8e7f11fe5576be4534e1c196ab8e3f3dccaf92f0d692a2062eb2e8\", \n\
+ ct: \"408499987dbcb741c23f1dfdf9eb16709357b2e8e45c3e006037eea1e9166faa5c09a6c9518a46b2b9aebad7ff2e6197935d3075a7b84c00ed5729a1c09c11221beeeac6ea73004c20176b1311535b44f4dc051137c92b3f1291e8d379274323f87b36befcce41405e98820c9dae18355dafdefac73383cbd414af470ad73365568ec61c0473995ef595e1bc6c2675e5f54c2234ba9326334a8b50b8713b7b020c\", \n\
+ tag: \"9288b9350768bd01deef947754ab83e3\"\n\
+},\n\
+{ key: \"2350282886140619814fbfd3858e86e9\", \n\
+ iv: \"7f676e635817bccb\", \n\
+ pt: \"d9e586730e09ba2ef45c219c39f26a72c026685a0bd1c25a87bf52d9ec3cb4f0fb4ed69809e0000e2e56cf9d338192398ccf02ee2dd005629c989c3532022e19fe713558c582e8d9ad3c9fbded8a2f880bbb7058057e84d562cfa2dcfe7722df\", \n\
+ adata: \"c1c8f5dc39ac825b6f7843a58985ff79393f93b7cd7bc1e80fe35b79bcadec09b45d76f940ed44664cbd34d90231c161d6c26b61a30ed9aa2195d65c735400710d49ba2832bdd7baadffe5d838db42beed2a647d67623d0516d4aa8a639639d1d1dfba1721438a1b171cc57054810a3117553ed6d5ee8e6f\", \n\
+ ct: \"285f2fcb146c6790b7662e7d983b09b5601faac4ff10aae63480a3a367de92bbfbc887c751ca4b3e40221b01479096ac871c752e2e87aa687116fa016c0276ea2d03098fa28bca3f389b65e156c846bf155667eb34d7af01f8084eb3615b2f74\", \n\
+ tag: \"3cd7ca0bbfa7cd17b9d7120736ee77bf\"\n\
+},\n\
+{ key: \"c82d111f81979a596a056d16216ea34a\", \n\
+ iv: \"9b2920477647ab5b694f3199\", \n\
+ pt: \"73715cbddc6c7d2993cdfe796a7afb8c6d912ebd421b2acad75c5ff5d93364da903ff7803b147676fde12e2f3b26a79167e51d6aa35a9f4ddd8c8624a5d3684768838e15235303072a628a754b39f03a44c4bc8a19664b419163bb15f29ce53dfefe49690b65c2d143769c5d20c739382a87f9177f7c63a59cdbf639266a3b5c76c517ae67a41ca4a076776f45039cfb2c6c7a577285072a3641984a29a1f9f65f01df5093ccb95f39a7d67ffd96a853995a1699e9cfaf81e442767662cfe03ad33bd540d482\", \n\
+ adata: \"388aee1fbde2c2b82129c65b0c6161873f4b5d84c3318c2ae946ec0585954a6db85548e4fc86c20eec6612274afc3cfcbd05809553\", \n\
+ ct: \"c670253d5fb5fd0b832bea8b3ba9cea9aa99045db6be98e58416a06bbb0b6a6f542a1f93b7d4543b7bb7dc9660c5adf6f9c3040204a263d97da379e58d1c77395c0066916a34e60137ddc67d66c9d4fbb5659d971e5b17fd193a5c282c0f9cd3b420086b2986b57212f2f2131a1065f251236f8e29c3410578f3bb9aed13b9150f1aaf433a6c854e2400dabd0250972531b740516389b444d60c4483ece12c1102ada859b6d930b9cbbc59bab5bd4f3ce205b6aaead563f8d79baa4015a3baa71efe0693bd51\", \n\
+ tag: \"dafb715ed31849424cc9c8be9d463519\"\n\
+},\n\
+{ key: \"f881ba2f0a0331d0508d894b8b86bfd8\", \n\
+ iv: \"ffb273bca07dd876764fc312\", \n\
+ pt: \"b9de091b1761a0992617868e0e9e5df7557395ea67f30a021bf348fbc9eb52c0b2b76aa438773f0ea179cc86dc79a4f451f6746b4a2376bdafcd5f54fa7b692853ee\", \n\
+ adata: \"4a464940325c5e3c7a84ff12b605a7864875dc844fe3b6e90212f95cd58afac42f2e8d25e4ce2f298bbafd483aeea666af632580713e68b8210690ed2de4f0559d3a71d2c157550706d4a9a134cb6fca4149384c215cae4cfc204580be7b43a5afa33c0fa86d8c4fcfad8affb50dae0ac0e34846441efd8a176101d85a70a48929e3c67021e9f9eb5d6b4b457a965faf\", \n\
+ ct: \"ce99e249ac86f054278644416bb38496e93abcd67039d5c9102e15837b1e8fd2f67e7b83b257f0edede0932f41dd1daa0a43f1ca44f3742447c8ef1ac0c85c9a8b0c\", \n\
+ tag: \"4f3ca2e71e89bb12073169a70178aa57\"\n\
+},\n\
+{ key: \"cb501b6ece182c0469036251f1ad683a\", \n\
+ iv: \"f63124b9239785c16a8c1832\", \n\
+ pt: \"325162bb7d9a05b755ef2bc798c321c9b2275b8f4e19628a12ce1f8d24c4d765362255dc22c403799deae8311a3bc78b144151b82239d1d498279f3589c23afbab58\", \n\
+ adata: \"7250452b55ea01a740a56a823fd0153840f3cfc386962f2fa02c225045d76594b472907edba663fbebf57c83b2700d297572d6d85dcbba632a63d864d4f55d90bf2a3c9dca57e13ddbfe2b5f5f55640c6fb01aed50c885a4f815bed9c7771980f87b401a6fada965e653acc4f366ae322d30772424399ff29743ded318a94fdb7674c93289c026208471dd42bea09181461629f4fc99c94fa5fac9806c2e92786871\", \n\
+ ct: \"3a755388ff91096f8cf79368573bb010961a6c0d0f26e47772b6bc0009974d6a0688f602a316161a09932f2b2d052c585d4e8dc64c522fb4121d9859e62ff04bdd75\", \n\
+ tag: \"df364588e0faf18ed2db3409bcb1de4f\"\n\
+},\n\
+{ key: \"2828aa57b91bec0a3204bb2b9dd53244\", \n\
+ iv: \"92101ae11a58d024\", \n\
+ pt: \"6045d76e11a1ecab32cd4e4d97c53471c83338c906bc5cfe5b447b17aae7ad555aeb56aafe848d4634dd788da66dce7b4e1ea02fe8724d53f4f02e1fc6938695d14ab1e5e027417a22f36e6c7197f1b370c968a5879c8e40901f90826ca93a0b7099c77e501699a23091e768bbdd3ac0f30788b3b0e2291f9141cc24309aa48041d40cda6c41a5b4e19124f0e9338044be0d2b3d14b593593f864b220370d7f1b26eae768421247f457a81572fd010ab13af68743ebfc2ec58f13b3c569d\", \n\
+ adata: \"3b3d782816f19f343367abff795f4074c4a43c92b39eae789b7aa3cdbf84a1f5839d84d56757abdaba884f63f97c788186534ce56ecc115a20e91dafa1dec46950300ff8c14dcc82c0dfd5990973861c5e38ae8d371917f903dfad7891db43432101b078cab4ba352cf1fdd919f2fbc7c598e4e3f2be0d96517448f36c4d0f0892bffca322955bd2aef8d37639a1ca4f\", \n\
+ ct: \"587f8344a959eb6c8108a1d0fd26e6f7d5d658e7f6a0cf5b8284efa48385e402ae209ff6a5c3d88418a600a0c23d6237e6313d9bf70949ff5176c7abcfcc23d68133e0c40178975f1b218ccfa54705a71ba9ce721bd58ccd7d338c4fc82a5da2f79bfcdf427632c15cfcd4ccbe2bc8ff38e9494046297d011c84ade76c56ba464ecf0a4ea7eb81e1d79d27cb9e9ac7ff1d18bc37be01041653303c6234ea484949ee4991eb5c9b565bd6d62b45d23388583e740ba7513f4c8153bb742907\", \n\
+ tag: \"fc3c358da0394d1c5de3d465383446c5\"\n\
+},\n\
+{ key: \"acf86b536f6a3cd4faae2eefe9928eb9\", \n\
+ iv: \"92049d02a86d905fd2f9574b\", \n\
+ pt: \"54e33c3a0448a42214451a7b2b95b52e\", \n\
+ adata: \"025828e13d259c0c89729568ecba736e0f0c191dea0c264c7d331aae108e2ce58043702fde8e62c06c5c555a5fb39338e5a3cf7bb3b36a7decc62bf3de7b89d8abded1a69249e88f673a23cbb75e75e08f90c19a53128b2898a5a8\", \n\
+ ct: \"25fb8c30ff7ee30cc2f263e9af252300\", \n\
+ tag: \"6fbed111b6db3bd38f692ed18711ae7a\"\n\
+},\n\
+{ key: \"6300e3b9ef04d7ad3e9e645f507b4988\", \n\
+ iv: \"3f9b8125ab9347949d23df7f\", \n\
+ pt: \"20367ad9d087653482cc7371ec0ad6d62259566dd185c51a8955fc72941ab7caed1b30e0f9271906daefeb92125a3a47fc27cd86a4243b4d9f9389da56078821a5affc9f354b5aa31065fca1242148d588f723de83c7c9734452f44fbdb476a05b5bba5e399ab6334edee521eb49d6d2c31a488eb56841c7db081e0cd4f896ba82f8feeca6006427eaaf2067be52a1b415780598e2eef3994e08808f32fa7a583f0a31454f647c63c1728c372c1ebbda507a32b461f4\", \n\
+ adata: \"79b01a0cdaee63de1f8ca3402417a70437021727ae8f2150fe9dab402f4c753fdc252035062c9408fe28a0daae2a591aba9c10281040a446e25523b704b94cbe95f93bbc49b751fd9da169230a52435a559c7eede25fcc93a5f44a828e8c2048d52c633b36224897257cca767cee80fdafd937be322b75a97552f977462e979766ea34969849fb7f43ae6f0b7c5937b4fa45d46587f3d62ba58a933c40de80bdc443bba99850f3088e05b9481925eba76d2f\", \n\
+ ct: \"ede59db1c31da504e6734303c8b52185cee1f55fec0975a442e91958799da38e0f03ef0aa918cd418432a02f2442a04cfeb7002155459edb50359b8beaf801e7c3c6c97edaa3c14ca5a21e45f245f07b104c9d17a011c926530a06068776ce6c158f9930cbc71404ecdc94f6662ef5b47fc5d7abe5be51de27467ce1a240f4104c7ccadd8dc488a7dd2a874ba7a2b4b42fe071f5eec43a19aff100fdb982a5975daaa94b0f1d8e8f3defbe702a3511b37cb4ddc08c3e\", \n\
+ tag: \"a7ea41eecc437a7cc9ff5dacc7d65bd0\"\n\
+},\n\
+{ key: \"476513fa2e5643d5e5bf600930dafcd7\", \n\
+ iv: \"4162dee3d6f33f5b776ac03b\", \n\
+ pt: \"62a7ee2414d2e0f0c4067709de810f39721695fc8807f8158c3940f9b263ec4681f75db29a1bd3f766966f5ac6e57c306649eb3a7955989f706f32afd88e50f86ea97e5a1cae5d76b3e61d35a76869f8b0fb3ff578bd85ddd27b73d7fc642665a0d40e30f0d05af3250e09596a9e84b1053646e0531200d7001cd86bc968aeb06f05db\", \n\
+ adata: \"d8e27b6d1965d308fef839401fc059bd8b29c655ca014b95329229da42981aed753a44d2aea40f552583e434e9d9222da2f2693a5a2ab15a\", \n\
+ ct: \"6bfed7190fbd48bdef3c55c0c699d1798b109f53aa57f7024d8c8aaabb57654fe215e3e5df3e79d932571dca93a65de38e65ff3c622e92798a85b8a1eda1bb2372ecfb503a32cc8d779f52bf32499ca740ca40f1393e7f646d0aa98ae702fb0a006dd9a629e77a5e91d122536e7b9547512768f2f26c7b7221ee1700741fa0ebc2d41a\", \n\
+ tag: \"fb355549c07bd0a9f82389feccde51cb\"\n\
+},\n\
+{ key: \"e13ce93d3b743a674965bc93fb88d9b2\", \n\
+ iv: \"76142761a9dc86d95092b924\", \n\
+ pt: \"170edfa7a1fc583d260f9ef875a83b2ddb6c48e720\", \n\
+ adata: \"f2567f5432e6\", \n\
+ ct: \"95dd6d20a19f799fd170cfc55ce5024176f54f45a9\", \n\
+ tag: \"748ab398a53e26ab9c5590be0336b5b1\"\n\
+},\n\
+{ key: \"038fdab0967777ff5185a04617ca37ff\", \n\
+ iv: \"81bcbf96081b51f1\", \n\
+ pt: \"3424d7fe24980be2bc8cec9f0a960e0489a1e9779043ac9a6a493ecd4180b23aca9b3895464511df59564c573e9f53b16ca8fd58ff5129a1157e5538d7975a0023a9b0f531881cdf8997ff8b312a5066f9b70311bf5c5c913bebe28e490fa6a1feb07ce73502fa11129543b1de3453cdd50b25a667b66b7075adde77c6a1f1661423e65c985456019a9fff00fbd88654054680901537ca\", \n\
+ adata: \"18ea1a75ff4cac2d93ff8935e5f59d43cf94defd81b1ff87570b75e893baf3f6e202687cb96d379025645d194bb8f50f561dd4ca98eb4412493f1999e952046a6e2ab7e5d5628872aaebc4c2c9703975d9bdd199d7f807ae9ef64a94c9509b3c93ce49446f1bc17ffe9ece20bf3f\", \n\
+ ct: \"83dbe568da290a960c36617931d4c3b9fe85d357a0c54f9a7f5c796d915235e89412819e0c5026198f9e7ea265fe3f7bce6def5cb15ced9d8d8ce977ee538d53eab72f49db01a770a601b8418502e4e7bbae113b690bdd4f41ed15594b33b4ebacf22906df21ff1fbdb273b806427e65f54687f3b53cf27d836404b6914320dd92265fb919a8abf37fb67d6fc26b40edb4f25d570c684d\", \n\
+ tag: \"45dc91d941534bd51822111e160f96ae\"\n\
+},\n\
+{ key: \"3def0b32817636e13cbb62d935cde418\", \n\
+ iv: \"f324d22453f16692bb2181f5\", \n\
+ pt: \"1be9ad3ca83ada034a3cfd635af4dfbe781ae4975eb945614a626f71253c99832a7871d0c5b16aec90968c59ecfd499ccab0a75aae367c59e6f3a91bf79894b2c43cea86899408c86bcae5978577124215867f238d2bccd21d6c6c642b343a28eb733bcb2e5b795eb341c6136cffd63044ee4dfff6d826768bd617033a9a0dccfa4b84f564b94988e5c39a91ee6def6a281a78d2daa3f28095441089abee851deecbb1b43b3f30c909e0f30f72316ae45515\", \n\
+ adata: \"91f9522484baee63f53aa96d4c1b56af6b7d89bcda70f8d280f7aacd6bd0b92d6c93aada7cc424900abfa0000a8e6f99a820142552c6eab9f6afb5d952db085faa1b4adcc299d3f01a86a791b05169631b84e8e2b667ce08c438fc67256176b9d01871ccd9ab0492d323d7dae2b4ab\", \n\
+ ct: \"18e90e2f0060360d27f1a33a13edaafdd7c47f09285e46f56be13a9bd7d7f235b3cdc69542d0028b9d214d519c3bca947375a632f63398818fb437737a004bfaeedf0f8c7d13e4a0c421adcd852517447ff49fcbea0ddaac014d1cbc6a27b3a0a0009b6786929d7a0668481734240c5c63336994a6f72206ca8724aee73f102b72a4c45d89c057c70e3982ae066d1b64c87fcb5fd1d8c587c61585b2119dc7e3a67af23a03895875ea6c46e307c4c8c90b03\", \n\
+ tag: \"1f47368da079477303ebe1499357683f\"\n\
+},\n\
+{ key: \"9dd559ca562cd9f73e2d287dcfa1caeb\", \n\
+ iv: \"ed76e79efd62bb7f\", \n\
+ pt: \"90700f34b6fab6afca925cb9b4b0cf9403733b78fd60e79c3b8ef8377247fd1233aad199d4f0213c737b4ba0ac83d422c38ac5\", \n\
+ adata: \"01499be15243f954da6aa011a552c81985ce0a145d961665d7263d211aab7ec173d9b7a3ad4ecbda914f0dd6db11c9cac68611f6e09daf9c979afc1f6d1fbde141a04e085604b46357729fb7c2d0fc1a0f6c455ea99351fcc8093c72636609ab299c9b95461ef899adb43470800d5747ee4ff15def8ac4bd93ed501eddb2281abb6ff546325896f75c05747b970ce7ed17899d1c1b6683630d63abc769f26e0cef59f4caaab30f3ba7136bb90cf834f0b41a12\", \n\
+ ct: \"9e2888f951d936fd68a11c3c9d95654e6c2720321bef5394311d43b5c003b220f41e903ee3b1e1dcd84f00cda7d133763af170\", \n\
+ tag: \"b73590191c13ecd1e3366503dbdb4a46\"\n\
+},\n\
+{ key: \"8b1e9f4d6b100da9b12ff70d1dac548c\", \n\
+ iv: \"9b25ed8f26c31cdf\", \n\
+ pt: \"23dd20b6a1fdb0af4b071cac\", \n\
+ adata: \"fc681569d376d081\", \n\
+ ct: \"4a135fe9d5a82da94386c1a9\", \n\
+ tag: \"ecd9e8e07bbaa38c8c4d8c47c964ef13\"\n\
+},\n\
+{ key: \"2a600712f71735c337cbe96fa5db4b35\", \n\
+ iv: \"d8074ceb63a15fe3\", \n\
+ pt: \"42af7b8b888805df0c36da3f74510b48f00a405143f18dd87d3e53b7c6d6157f47db9b5768e659e58ec1f843052f7660d544aec9dd0b2e92d35eb56e7dba2a4fa18bfeabc7b57101145385d34ece57c769ff3fd979d83d7b52fe218cee733a2a78f87631269b0407640c20032cbf0216c146233c1bc5c68d3c690dcc99d6876cef0a4884a8\", \n\
+ adata: \"3c2800bae85c8ad0024a9f61ba11b8753a5228e1f10fc7f1ea85ce8019d35757f59faca4cd2fee6acec3d93f91ff25dd8eec6a1a51bf936082f306c2d2e8c3bc66768483e8f3b908651f0846e03e0c50\", \n\
+ ct: \"9a3cc702920a8298f87bfd7828b2d4191e0af4096ddecff4d213c10fd5dc8a5deea534c8ed9970a2be8918fcefaec41845f0d2e3d2560ff7747b7da4b276190819ae45fd8383a2e0208ffe5be96380273c37326eb1fdd694636f5e2587fd16c39cb5f327e655ee0813b72fb0582cf7939faea3ec6d9b32f4d45e74aa6342b0a09d2a749c97\", \n\
+ tag: \"74774626528429c463d498b446cef599\"\n\
+},\n\
+{ key: \"c5138b4ac5ae6e216d7f82d4ea79257c\", \n\
+ iv: \"dc3e894aa7fbeb7f\", \n\
+ pt: \"78ed7f62729f4aac121472eb97e4fd73976aedc74f294551115634828411aaa8bc6004be611b467582c66c01940028e51ce86efa97c5b5c8570a1434966810fb872c7b8e13125cd6e4cae5eddd844247121baef2a50369\", \n\
+ adata: \"395671321ada3bc25739e6829b90cf9149804ea236ffacf95674291f51b1bf3d69b8f9fd1f72bd4ad223d8e95e56a2c027dfaba1d74d417c7c476130e450779e6bdf04bf215847519a3aaba8bfed62b370d6e05da681e58a0140dd7682eb26d9e578f45fb746452cc2301c104c0ca181b6595a7abd439e0facecd8604935b737ab2e6675381c9bed02e5d862fc229096406eda84c871ae16be59e744f826f4de5d874388ed7ecee23dc121e4efa10f885648a2f44a05fa27ee20b9386546\", \n\
+ ct: \"ca99e7e0038c830debe85a0a87789ae04f97b5040a0a89180bd5ab7d6135afe8fe6bb8a0666c520b3976b4e474c28d51f2f4e4d4806735c94276d18fdd7bcadc115ebb9a133f68f9505f9d3578cfaef673790d89716f69\", \n\
+ tag: \"fdbf1a825b2d7387a3500b5d2c7aff04\"\n\
+},\n\
+{ key: \"965f30b909a56e5edef4c340119fa53c\", \n\
+ iv: \"00f12da027d9fcc36523e5ae\", \n\
+ pt: \"cd1953bee9c6a0692cc54a3c527bbd30dcbe56d0ba2d1879a75a808cce9f70568cd35c71d898bbe251b55cda7cb949df32e8fef1b18866b656cd87b920645308d7d0d5e494a207297f18fbd835e7f4c435fdc976f2ec457153aecb08411280955c695c22719deaa6805e2d8f51504e6f0eba2d50ebe8346e3c00b40751759ad59bccb13ed09e3f81a1b309f665ad575c2e70a9d066ea5a38823f1b3036a4e036\", \n\
+ adata: \"aa7761fd99ed1b63546a0a88a59fef8e5e72b1919c04bb062e490549a1eb11e63f14d021bf8ca3a9fec1b1dc834efa94ddf8e6ad13f4604d1f326d06a3cb144607d8ff318ed4820ce5791d6d6ea7208dfbcbdb5df63e7772eef2a16c05ebe8c8b74a80bcc343c2b28c429c05eb8752eb1e8b7105a12336812208c1348eed99ec58b4f5cc31b52e06708615b496c810c56f60425b1a9ed5\", \n\
+ ct: \"8632f7cc5708fa124f19675902bd08e6c166a7960c0f93de7fc7caa93b56fbecd9ed19e7872a894c2bbcf503a8c3add2b565b27c5127afe58687af3f0bd267cff3578023e008972195216ca6c8f2b4159b04bbf3ec2872aae26073c8221598e5c20b402b86abb494855a51ad0bcb4ae3f51752b19c2672013c2c8029915f4ff172d39c8a6f6abe42828b461335b98a5fde7b7e6a90c255807642c334fbef924a\", \n\
+ tag: \"a23701f4285e2b6c34ce2bf5cca97a4c\"\n\
+},\n\
+{ key: \"75cf2a5f955a126064e60fc35c2da8fb\", \n\
+ iv: \"dce781ff6d6dbfe0852308eb\", \n\
+ pt: \"0bdd90c78ffdc317396efb51fa59edd1c7c5988e04062d9b779475a8b173c00ba2ea86145e8a8b59996d00efbf84652acb5339efdbf84feff80737b1a9c96d8b1921871f084f850816b3312a7fd28a303a272e653f126dcb6e055341a66b522c9cd572b9aa4bd2392aea485c677de10e56631359b07821ee3e2d93515511cef10f563ee5ef73b0db742b63503f3b6d5c1154c843729c8fea83bf0f\", \n\
+ adata: \"bfdf2eac11ae3b80258c73a38d39b1669d7c850ae8f2a54be60ea7ff51bb774595bca9dde3447b46f00372ce657378fa1792a1fa32fc15dbd98707a95df0230e447bb4590e39c4c9e098b3f2de68\", \n\
+ ct: \"eef75063687778efc0f9cf3deb16c3c4ce43f3e12c3fd2aa64ac9af7fcccd746302393bdcf6a4356d7bd12d4d3008045f0f4ce507ad47977473c97131e606440b2c1b97f3b24464a87cc49db39c253ae18d5bc2b29557a63558e4195204445d09672d9fec9228a93c1f49a95a975075ca4163b78c375ca5c79a319443dd9be8ffa8ab2d5911927b086df6a5334e54da76a28e6c1b48c0c4f7027bb\", \n\
+ tag: \"b263a2fa9921ce8028ca28cb94940cdb\"\n\
+},\n\
+{ key: \"6651b32627085ff2c0e7dbb366cf11e2\", \n\
+ iv: \"8432311916a33ba4\", \n\
+ pt: \"f516bcd31c0243635d091767574e0b18cebf0c7693ca2caf98ab46122229526b55a936a7ff3178b631411de4b2f2a43013335a41643cc170f96c5ea215efe0297536e7df607e691b58d6b7053cf0f964e87384673a04eb8cee99068cc5126bf31464b1c2ecb9a0af71562e5af6b15f47b23ee6c8327bde27108b999e34031ca9df\", \n\
+ adata: \"01147a874c96af5f6772f65cb666dbef37802981ae9515782f7912c2a1c0f6f047f2af225ab9b32e6ff30b6624d235e86a911fa3a2daed4ccb00fe1ace0d356c73809185b03c385620\", \n\
+ ct: \"fc39fe470c677b9b6e85431b1a43e5ac35537815feb50fc4776a926dc74b0f3b8f000a1806ea47f57de000458fdde31fdd8c28ac791572a680bb63dafe37974e66507ba72e673759e3ebab3440db0fd12f44dfe4047985a23db782c4d968bd05d27a7d5e75f02eab99a9ec001c8ef409b748c061529110b86f4137419e86b716f2\", \n\
+ tag: \"fa0d4c644a11d7636b512775e32a6c26\"\n\
+},\n\
+{ key: \"638ea4771c48ff00d5c19dfeac3f60aa\", \n\
+ iv: \"2601a1eb02adf78c\", \n\
+ pt: \"c0a8ab28e62a761ca19b4bcf20265ba6d5e6\", \n\
+ adata: \"336b8ea058ddac899d6f5f6ec4608226819c351c80f555a7a7842ac9b55bb947b37719f8536cd870eb90642ae8a6e0c395d74ba9394a9faf4ecba678f945f550afb7cab12b979eae9d5af789fa318cc3d4ac99b65e1ea04e924e5af266297fa5ede43305403a0fd4d1e5d09585658f5e6edc93af8bc446d88c042457e686bb7685f993598dfbe49c5f4bbc\", \n\
+ ct: \"c7549505d50801b6ca1813da10e1e2d89ab2\", \n\
+ tag: \"714cee21b1bf1b8b1f590acfe23f94a8\"\n\
+},\n\
+{ key: \"a1c1d3a0fbd67b620712246f959e6028\", \n\
+ iv: \"6ef8e85cb76fb62e\", \n\
+ pt: \"32711fbf4d8e7183fd5989f6fa9a56badd20ba7c803cbecce3861a9c14ef04517cfcdef90fa0028962a8e337574ace50a4a7\", \n\
+ adata: \"2f89f5f257fcaedf05aa46333cbffeab789452150ce850225dd39b973718f119b15c2ac11452890f3787c97f694c22b9fa00381b9f45b46b24217005488040431bb6d9fafd23d72cee36da80d974061c8685b7fc01a693d6406eef0a5adcd4bd09248f738a715c637cd6e77faf9265d14d46\", \n\
+ ct: \"aea4501aa276497f530a6622d3d46817fa3a1daef443c2655b6402f104f4eb0a04de21d93deb1b74911f91da3ab996b6c537\", \n\
+ tag: \"2af76e57676a449ba09c9b9de03e26f8\"\n\
+},\n\
+{ key: \"b415df149858f69958a8fb38a1ea13fb\", \n\
+ iv: \"1bae4c36f7805c61f3a7f089\", \n\
+ pt: \"e909feff389eca09df35db5ed172debf5fa7f21f41a64053abf5ff04bf2c65eee5e067ecdd419b4e\", \n\
+ adata: \"776e3c3f5a798e45562ac4914604c506ad4e4d3963a59b51c53bdf5d24eb57bb8b36e2c5ee250b545b3b9e0bb6228d92752f371538bb720d0e0f1f0fe44946bd65432e34a95b5162cd2c17120eccffb5866e1b0000cac95f6fe91ff5543fea670709397b07eb000d92dee2d614cee5cb75147d58fada96fb11522d288b5310a0b79763fd041bfe0dc9fe52eeee19a63af801\", \n\
+ ct: \"0f8935797e0ecfeb4cb5df96cdf89c6551e2a0dd4cc873460478f137e35aadf800993e4dbdae2eb1\", \n\
+ tag: \"9c5dcb8014bed939653d724e12de3c74\"\n\
+},\n\
+{ key: \"b91fd798054081e1722b1e233d9ece88\", \n\
+ iv: \"99b90e94d812b350\", \n\
+ pt: \"4c5c3e616a790ac586bb3bb9159a0777585d9ac2722157560387b826059046dcd4d4f96977b1c76bdb6581056eae7f659989a39959512f58bfb2f14f2407daafa3474bc2f1130a1eefcdc99583ae68feb4129dab0452581e399645584334a692ca897fa143614c31f0c9fc9ae5c293e83e82e3469d58d3bf53ea04be4bb5fb2416429c95b66d98e91223f3d207a564bb25c257df878440f03226f03f842eac6d1123b4a95b9edc833751427269a76f88a8f506976872b1183a1bf02120e821b66c624dcbb83138\", \n\
+ adata: \"dfc2cdcdc341298e566881c874e78b81fe\", \n\
+ ct: \"930594d160e24779fd04455b2fbf4b5501fd14c4250495ff06ee6d2cd67433a37ff5263f030ef0fcf907c64e4ab8098c5fdad942b4e7e8bfc66d8ef35196e586b6255e9d365213e3d40487a2044110ae99ec684cccaf722d870b65f61726872281abc5fc0edeb0759c54e1e0155b1f52f41a91e2c194d4315dd5996194b6e633dd01597b6eed56c9684e222f5808d3f33a28f2fa37588b9b77d00512f880a858dee8ef81aa65e823e37ad0bbe59aa2fe7f849ed8d18691fb31ae635ce2fb099201e27899e427ca\", \n\
+ tag: \"f106c4cd134288d65f0a4efabde91b8d\"\n\
+},\n\
+{ key: \"f14e0b48625e7476f9ef5b8dd3c2bcbd\", \n\
+ iv: \"cff99077d3db13fe744e6447\", \n\
+ pt: \"83b880d81954aaa6869b8bbdc4f2935f9cecb1f44adf80708edb9869c019c2961b2376b5970a466e71ff581f862bf58ed8cec227e46353d2be66f7268e40cd\", \n\
+ adata: \"3105d418b33b00c27c2282a956aeb4454902dcaefb6bbcea955b4d371feba4fcfc367b1d6d9bff8068232960e639bfe3abcc199fb3136848320879533e904531a7478b2007cccd7e61125933a8d7fbe008398fd45cd305bce6796fa39282307f03d6c6a460f93d10d9047d55a9ffa0cee2293008682588d0ca675a91ac0188505d766b65928b38a2e4e97b1efe24a13cd915bc68edac04f5c15f9d00bc540c4eb6f7a6428dd88ef0296bea2abfa7b214f761a2f9f2931c1dfd3acc7b\", \n\
+ ct: \"507423184ffc8ded26b73219b08efad8db6384998401044f90e8f260c2e2b68017720c203bac135f3fc6c90296b2808f3593f94db515d87afb1e25c753ea65\", \n\
+ tag: \"184178497ebabc081bc381102c2a33ed\"\n\
+},\n\
+{ key: \"39f9636bb6e59743682b4059f77ef225\", \n\
+ iv: \"d6c32822b45f1d27\", \n\
+ pt: \"200f8d4c656850727b282f60eb169bd422859879e7da0c636e78412e33d87104ee73ce675ff3\", \n\
+ adata: \"ef9c86e1be89c7acd84484d5246b0c94f356b2a31fdfa6927bb4a2214aac95d90ce659c3d57052a0bc1618e7590c83f54e64159e2360b0645d91a6792ee46ebc2ef084eb30b77d62a1d7fe28d876675b410fbbaa00a6523e8843805f241ab81749e1f5c557\", \n\
+ ct: \"88d76ea6323526e0df9eca03b560d983e40f73a3f041aa72235229527b5998fd7ec1a9ac6c7c\", \n\
+ tag: \"39a6f1e1131c083efee854fe06e1ad87\"\n\
+},\n\
+{ key: \"b19cd017eae03fd3624797fadcee6117\", \n\
+ iv: \"cececfca4360085e\", \n\
+ pt: \"cd744cc2917be600481fb64339a0bdce4763ec764ae528ee680c7cfea8bc35bd7a9c163d0372c80417957265\", \n\
+ adata: \"6318765d416a0da7acb483abddc1ea77bb976de8d2f1dfcb6131ee1090d7bb8cd2afc1ff569463e8ef0e258d3df5b6992b5e0d32eb55c745ab5951948f3be5acf07345be51726f4223267532aeb07b704d45cfef835015016235683e06ebae6741e854648383a37d25aa19165d7baa222e590433419ae2c7dad6852d8e825b24e77e48d81ea2c3d499ebd895c761b7455458f6f43c8965c093a97704727ef48fb2f4ada130fb0a487adc28e47caa5cf47d792d9718ee54d8\", \n\
+ ct: \"badab9f1c7eb25932c0fe0dcbb7dfcb2ba54828795e1f8ae934713abe1b490c1365cc6ee673d299a0f1c2734\", \n\
+ tag: \"22def921ac77e681d891c350c7e87a01\"\n\
+},\n\
+{ key: \"747391bd983bd7f00731b49cffeda7b9\", \n\
+ iv: \"24041664ddd891c6c9d06315\", \n\
+ pt: \"65a74ba8a0a6954542aa09d868b22372c066ca245fd77b3b60beae89c6377c2aecf3aa9e6321a22691c9b7e0ed9aa9175e6987cc66dc7664f1a53227a0de12512fa8d485b2745251ff1c6b04ed17cddaa163f1110dafccb27cb73df3c4d9792c1208d258cb3e\", \n\
+ adata: \"7a0d80f5f6a9db01315091f8f9d3441f290ad6810af61a70d1a80f43f39b3c109be58d6cc0d016eca9f420a012f9baab498ef5579ccaeb9e58f1fb4370db0900e266c2aa5c538c5d173ab2f8f5e6662ad5913a853888d6bbc814d9007c99afc7e105d9cbac07593df82907fe7c219a1aebd088478738d8552b7fdf2af2c988f64acf65801098c35ea64971da41d45810932e6de9fa0f1658db6c3dab3588ebff74748e3225d6eaebc1dae518dbbfaf\", \n\
+ ct: \"8aed05258178ba479affb9da135eb802d3aa2739ce7c315082f1bb8f72afb84c5641428a85f7a7144677880a06ea18f5a3f49222a03466683a714c6e37d7962c53352c715ed854143d41bb225dc4d8528800218ba56d29007e3638cf61b53e5f80f14edbac02\", \n\
+ tag: \"f5be86c8c9afadf6a0cdba85d5f17bee\"\n\
+},\n\
+{ key: \"a1bd9146ba4d7591e8d8ae3fa50fa3f8\", \n\
+ iv: \"44d3c739dff2d9ac23ad8ac6\", \n\
+ pt: \"090dc16ad197f49a54f068da4d125c7fbf7e938926c0888f9467682c0e8a22b65cb929adf1142edc2a4c51105ceb97ae188fb38cf72f21b604e2d34b4a43fcf4bf131189f1c5a8cdfb2c0a92f64e885a587681daecd984c200b46a7880b3d94556eaf6111a6cb8fa5f8ffd8dd81ff7\", \n\
+ adata: \"0ca9d1d08e1062fda6692c29079eed98724ee8cfa35975b129f09cd15a14c06beb5a01c0d551c801b384ef6dc43da29a0cfd1726a2abfdcb21da0f3b5906b5d2879ad51e5fb608f7675c32eb01cc07927f68f248dd1eb13799ac2590da48bb2e2928ccc18115140705574a0433fa08bd03281c522b7ff4ea6d74308517666224a668bbff45c73dedca958d4df8e7d2fad18b5a517507ce6b416d1dc23e827d9f76bd3372441f56107fb9f05ad67924d6ec66ec4a7b44e642634c83ea80\", \n\
+ ct: \"bf5fcfcff282cd5f449fe9f3a7ac819466c4de6011ee46f6000ed1259b49a650daa86ad442ac84730ffcfbff750effb8b2d46583b2901fea51d8acc1c12a27c95a2f2e5f6cfca99936fde1c0a6f5652f41efbc4a02b1826005485c10c0f064db9e51a551861fca7d84c6ccba1c3c36\", \n\
+ tag: \"07d7e85c12b3fa73313bde5a49f5de23\"\n\
+},\n\
+{ key: \"ccd06789ae89375002f4e23efeef28bd\", \n\
+ iv: \"87170ebdb5faa2c21d2deb3f\", \n\
+ pt: \"bf93dd6aad202c1f1d7d65c2ecf11aee87c762b331740fffacd75bb4a56394f982bd66890caf18cbb8af65c3179e154e9ba1d713c41b267ca52a69dcfccd32a368b2772fbd995347e5b5d92b51c5\", \n\
+ adata: \"0be81e3e76add70d7e43494812f48a5198c3108bb0236960bbbbd0aa657ba16f40121000f594106379bdb22477\", \n\
+ ct: \"f9ac1d50c195b759a6fa0a64337e604735edf2a649de32e13af505e05ae63cb88e19cefb0f67deb87a6121dc0b74c1ba54b403f370b21bcdbe602b0f3accc17107c0261187fefc37d2d955da53ed\", \n\
+ tag: \"7f9e128f60c4d556fafd7865f7c76ab8\"\n\
+},\n\
+{ key: \"79a8f53761f9306651d03bb29bdb4a0e\", \n\
+ iv: \"61654f449339002e\", \n\
+ pt: \"e44c4c41e00f31a653549f8b57351087d660264a49ff5ac99eddc95b337bc85aa6c19566d669e09bb56fa170118d13e0ff36e369368b99454908d0bccb57d24a1e15c31a788bd7a717e3ff39590a5f6a\", \n\
+ adata: \"7c9d8ef1cded33f03f8c5914a06a42\", \n\
+ ct: \"5f70d7fa190387c30ed17756fd920c746819018270c208a13d89bec405139b752a7bf4c2184fa053bb7c5e7782675462836714d1f3d78554c31929983bc191575aa9d9789c9dea5cbb07df1ca1fc364d\", \n\
+ tag: \"8c38f1e4d850c004e36fc2c12a7a83a4\"\n\
+},\n\
+{ key: \"33f3fd79f6a18e543d9a5c713dc294e5\", \n\
+ iv: \"97770ffff6e148badc9a73db\", \n\
+ pt: \"bc861bc27f41279bdc4c763437c3aa9acbe7b72cfd549e3e28a583b943e2f1bc596dd34134d244dd144129a75d7d4b13a043c6e8d7528c764e8857952736145ecfacb80696f4ca41d49af409e22424d54583ac2582d2f61f3ca654fbf3d2f29ac3931196a2e271153b6ce8e8c5a88de9b4fb9334c65a4b087cc07c650120a27f825ee1\", \n\
+ adata: \"8363280d26d04620b34ada56caee977e47f6311268acd7a1602a1796d69e7980e48e92e65bb44fb80c3a295021743f3fd832f6c6729b4e95dfefda135b686951e3e9\", \n\
+ ct: \"84ac2e5a821b44841f30c6eaf4ff952a597deb0b8ac06dcaa0a3a50e04d80b9dfdd2999bcec9a1b9fecc2b3d788fc7f44361e1d7842a6ec6f4f8bdd2d155fe984c0e02b1f7557aaeb61013559f1215df5a70dc38e44e9d6ab7900cc8fe43a40dfc5d07870f2818ec104586559c8e6a2656a37755b0804063fd4c03e6aa7b32cf705ca9\", \n\
+ tag: \"b2b363e87c5697c87ebda36b96379ad0\"\n\
+},\n\
+{ key: \"908a8aa85fc7d6fcb808b55e57dc4b91\", \n\
+ iv: \"41741f05bde9ad8b\", \n\
+ pt: \"d4c83bd528a92437f7002f74c8523b6309ce24e3f4f902d385b22c286ddbc9c3b23be6f8eedcb89ef67a66b558\", \n\
+ adata: \"8eab9d7c3b6314437eac9140856c0339e0e46cf8c011868fe75ef89b88f479d228d64d7a580f99a432d006ce467658bf8f11b479acb8c686e0197e15819cfada0561c0f408cd43ce54246aaff81e3331b744a064bc9d23fe43c69b73ef16e1e14e2bdf3a3dc9077828c29c61ee6f833dbd6b2deb84bae01bf2a0bbfc15d331fc918225c25883f3cbc6e3c326d1e6a35b775b8f473bea6eaff6ad0bac98beb9beaef9b7af5757e690d5694522fc854f01c4886230606dadf945172c\", \n\
+ ct: \"2a3dcee5d15b8c885b8100e9bff4eef9ff9725897b6ad0f8ffe0bbfe078f36b7bcfa924f4995ecd7351aa63d3b\", \n\
+ tag: \"66407b55eef9182b65ca63cb16101df5\"\n\
+},\n\
+{ key: \"c8dd8bd4a09e45476efc05e549bc4251\", \n\
+ iv: \"e517c823c3fae161\", \n\
+ pt: \"0dc3cf41b3f73ef6ea8f0669b5b18dff57ffb4e16d52a269bb9a462e292cf7c40130bc53425c1ce9eda1ca36ae99c5b3a8210efadd81a9b6372b6477822294568c93b03f17703e67ad7b28a0db64918f7892bfe34f2163949185f045cda26ef019028e5d8a1ecd180ae0abc6994975890b564c03a0cf4c3f51068ccf60b8cce85a7e3670856fd5523c5e9cbe51834d8477d5e9d4971e5250bda5\", \n\
+ adata: \"ca48ccd8b857ec5063a9d2edb175a4f75b9a3a484467359e1ef4fcd25f4cd0d7de78067166db3d0b1b7302bf2dbadb082cdffdd85d14f979ecc538a107c632412a82dfc44792448c0ff67c1edcd6b275ed66319901b36afb59f2be4c78a1392b736e09d42e8867aef3099679396e052e701cd5eabd84ab9cbf3de07e2dd70f3b686738f8e47bb94c7ae6d9f336674f9316d200474b2cd549d415e039d940d5d2577b95d549e9cbaa7e51\", \n\
+ ct: \"82bfb513ab7c2f1ad76babdcf4d8024277a173ad8218461fd5b2fdc689212bbc3a4e9768e526a2f8a07987df4cc42ad3014ab7597d962d577638116cbf524c3fe749034de3182fb4895653f8735e0c5bdc8130e712806b08550de62d73fb22ed52d3ace356f07b3d53c8343a603c6e75b55c5718736d8871c892c233c5e0a74dd99483d8171647c37f413f5f970043b43072241e879eeba27f94\", \n\
+ tag: \"3029a83ea649cb52487775d11eb35beb\"\n\
+},\n\
+{ key: \"1410ccccf2040b8916f870a1742842ad\", \n\
+ iv: \"49065466f52c0f114c9dd31b\", \n\
+ pt: \"dbba64d73a4b00cbbc1b67e978cd5d0c2d4ec8d66373befb94f0302124b8712533dff20d0a2f3af08bca630c5a53c220f9a20727f053283e97c22fd63e15bf1f64aa50e92b9724f419c165823d274a6bcaae963a512dbb7f52\", \n\
+ adata: \"979c279178062d8c7905004a29ac7b77ad6f24508e8541940a6fca153b458c95f6efc9ebda9e3c7a193ca3acaac34aa66c4cd94afee9ca79032433c8e40f8cd2fd74b5112ec67bc6b51f3ca1e94f7eae4e940d95bc920a218be7b48c7d2b61605747939e74c581497d425d67396ac57468da9a6d03d7b4e26926007573667082311710f072\", \n\
+ ct: \"9b29ab56f2dc0a735a89d60d86b077a0d9a81fd4a82edc1fe45ff464686bce7868cdb60fa2085b342872ca42e0824baa8e97dc89ea0d3df9450b313ec509e8c4e32117ff27520e3d8ede8c984084f9c2838b1b070b81eee2f2\", \n\
+ tag: \"8a090656baabb134b27d591c38498afc\"\n\
+},\n\
+{ key: \"2f33cbe10d0803b2865746d0d34d5bce\", \n\
+ iv: \"709113095771ff64\", \n\
+ pt: \"1659919933c4f81f8acf49dba937c8b254845593eff39363085288e8940598557189eee27ddc1c963567e7f851a1f22dc12925280a9ea0333cb888e6908894e5ef6bfdd0f654aad77ec6dfc6ca03eb2a63188af0eea295279eaa10f61c4fd59911fa5b621f261beca3a115c78df958e49365a3688906a950d1d75f8bb882abfef9fda32b31c0c3043385df8af0f927c5206c6e5c1c6782e0564c8b1f995eab2f804c150c94156aad7119\", \n\
+ adata: \"d95fbe5364c3ddc28d839970af6293e9482991d82ebde2be93df2d0374e59fd153cc3da40acd93ec66e7f50e80b9399a12e1987596c30750aa275319730467385df45c9237d3e106\", \n\
+ ct: \"ec8e90f98c4e7ac6888bca1d61144aa9ab237db309752dad495219a34bd8e78d53a92c28b695472d773177880a08f7181c6d6b748403ffadc279f7b92faad2753d85ffd1c0bc5fb914deeab179629553043942f5a7e41a01760800b507642f74a321ddce0fbf1de006ba74964462c8f705bb0c3ad78d4c3245ccb889bc8e4cd836b46bb61415d3fbc514e4b894d510cafb6fd504700eab1bc1e600107afd069198ce0fbc9d947cfdcf43\", \n\
+ tag: \"d23cc8696f7efdb6b3f0a6f33bdb7f15\"\n\
+},\n\
+{ key: \"3f94349cc93393145924c2663d5bff3c\", \n\
+ iv: \"52cb2979c57e3e09\", \n\
+ pt: \"00d2390d821c9485767782853d4f232d588743e6f43ed5f01437727c3309c8535455\", \n\
+ adata: \"977ea62be1b45cf37ab6e804c1851f37886029ed5494c4722ec6dfb8967b16221637571939e9a21c69f6b9134f2d7362070bdfa6a22270e45d842a55c547f4953fdd75cfbb6f858c9d9c63cb3d8c71ffd249e2db72716c8d753e0250845045570a033b5bea061d2c4b9b9862ac5b2bf4ae7305fe163c167a2950b4ed\", \n\
+ ct: \"137a657538003ff19ab0b633bc5c25b3567bbfac6c5cd573f3d4ec1b8cb6ed336a85\", \n\
+ tag: \"562e46088a0df762b7e45a020ea2e006\"\n\
+},\n\
+{ key: \"f7b35721e8f58a1291e7270cdb8e575e\", \n\
+ iv: \"64f8b79526db568127ac13e6\", \n\
+ pt: \"a4471b93da18c7789abf10f2ee186a31a8\", \n\
+ adata: \"576ac58356fca48fc7072d43618a97b811c35a827160fbe7993192b529e957a639021197b497f9f20d21f8\", \n\
+ ct: \"0c96d2df8c95676d70b7a6ff98080cadc1\", \n\
+ tag: \"ef452fe45764cc6ad897538e2f51d0ab\"\n\
+},\n\
+{ key: \"8b80536303c488bac8afcdc53963fd5a\", \n\
+ iv: \"3b7f2367cf1bf6dd1413008b\", \n\
+ pt: \"151758c3224b1c5313bb0be05740b1936698478d538f3ea8b9d811297a60d3b7be77e480d256f0b1c9724bbab02acab07ec7a5f8cef7808f2c11196e37f8440d544d3d29b428076e7303f50c03e1a1a0c0da1f318f02acc169eb97f78b2fed19485068a3\", \n\
+ adata: \"caaafa9e07c5f74753705b5f5b408a6560a22820ed36441e527084e28f4e0648fe7ad97e745e666206b7b0e9c88bbb333a5f46f9725ce5c60e0b370c7280dda245db2f030cd9ac13323b23feee88c283340c1d45e42d01ae0156e6b917fe17040940e50e\", \n\
+ ct: \"dd949ab12b65b3fdf543cb34eabff4237080377ee57ab320090da6737dbda3ba73743e05b69745725f03d557d1fa2b47baa62ff44879d9e6df2e0a435f54c2b43448c064a49efc9c9bca9428666a457f850a3a4cfce5a9c246ef45b77ae1d936da852c4d\", \n\
+ tag: \"60cb21097b8433fc0752fcf6c329f9dd\"\n\
+},\n\
+{ key: \"c67f7dbdd2f44598a9574459d96f9cc2\", \n\
+ iv: \"bd4de7cb3ef1da4063f1aa18\", \n\
+ pt: \"349d13788f002583923ecdffa2cbaceabb3e79b07ae82d57e6969c1b37e60a6b4b6a0256ccf49dc2eb7b630c2a704308ec4dea61402d9e037f5df1495e77cd911039ae43a0b3d30e2922aa8afca58b2df2804c\", \n\
+ adata: \"4d0c4f85a1950c02b66180\", \n\
+ ct: \"94d5fbf131e940d5a768d8ede378b3ec31ccb62b69369c9455eaffc98969191cf81b35535003d20aa19a20f07504e3d3ac06f5ba70a8052dc61bca4084d073c9403be0d739ad7485da113b99dc9519a2e5d25e\", \n\
+ tag: \"c65ac30aa1baa77962b4f6515403feb0\"\n\
+},\n\
+{ key: \"6bd954d0792a231493542b656ea79058\", \n\
+ iv: \"9c37488525be72bf24ee71d2\", \n\
+ pt: \"3a6db78b14e7c823d382a2d518a2a285f5b3ff193e9ac1d0c366cbf780d42567161cbb39a72bc3c7683c81c6d3934b8d5033acd72390178aad073017fbc67e94f2bfc44cd917260c981f103739233c7fa6397fda26a2e93e435bf5045e4d8892d44924db33d5c4f49ff1ff16dd99482c107ee85fc243e54416df68d599ab4a1c9c583b4d08d5f1d1f392eb9f629c017bd01eb29e\", \n\
+ adata: \"bef01a877f27b40284536b466592bdd38f840a1672e2b756589f4bf1e175cb37aa1f1cc67e74bbf887c308b835af463ed929ce232853a50ebc657f4fcd5e838a29f04e95aa0a15cc9ac096515c587d258e6ecbb21fe121520c1db0650886de33857e74ef35e359297849ceb3fd514a0f1a007ba69b6371806daa1cb3654e3b728a6c2789c04ac926bd8e9f8dceb6f24d6274fe71a1737a555e139377702a480a8ba61d50da3ad1ebfa38e6f07dbc36198bc79d8ae82b84ac400b945048\", \n\
+ ct: \"5b2067bd09824fe61878486a1775252f8cb53d1b248b39aec853db38f161ecbcc67661812c14313ceb126314bce5e8c728543e2864c276072d1fb4d233ec21614d67d87774b0be9eb3e5a265693def026a4db2ee10b85f03444afc4b446771d83047432fae9cb0b90f7999dcb48ac2b074d1d07e553531a10c26d2752aa3e6cfd29684d9a4ecfeeb88e30a0df4ffad902570f758\", \n\
+ tag: \"7b2678f55308db3cce289bfa0016784e\"\n\
+},\n\
+{ key: \"0d1eff326374f84533675a9758bfce06\", \n\
+ iv: \"e1c07724a51b2f68\", \n\
+ pt: \"58418f4e9bb4f1a05c11c7956b88df3b7a40\", \n\
+ adata: \"b7ffbb476dfb3d4106a30adaa85acf3b51897b6d0469cfa8a7f35f70da65be4d1c8c9233d1014dc21633397ea2f5d0ee6807c8bf72ea5a83942354f6ff01ebf611009933b234442f64eaca7732407db48453776845cd06aa63378a45bea372a546ca2529527dadd5c274fcc031584713b15d3e3ac22694e0b75458bb9495c9b9041086bab9b8\", \n\
+ ct: \"ee4baf9c9ba0f71ccf9270357295294bcdc3\", \n\
+ tag: \"31c6840cf276db0cd5bf96cff42b3c6c\"\n\
+},\n\
+{ key: \"1731d4d4cce0fc741e44b6d578ae7ad9\", \n\
+ iv: \"d7ffc35799d172cd\", \n\
+ pt: \"afe907e607f29e7fb4bb1e273c0723dd79a0cca71d27a098841d4dcf3eba8c78\", \n\
+ adata: \"a73e\", \n\
+ ct: \"243323ca4b23986b52f8ef452f98349aa2c8ed5dd1a2e3f6f571661ae3b3fb10\", \n\
+ tag: \"5ea52a2d5ab88eab9d112ec8aab8d51d\"\n\
+},\n\
+{ key: \"d5144f6869ddf47487dd4e6840fa0333\", \n\
+ iv: \"161fdc22348742aa\", \n\
+ pt: \"7f4ecca2362a6119981dc52901b94ca190e6cbebdbd7d9fce2af43c158b730fb7dd00012957d4114d2e430ff2d965abd3b128cb71bef7593fc8effb6036ec7f20e13a1c6cee6f8beb917f3f42f866534100a9b3506ce5ee0be475f2c8727dd93d51d889f93161e9c5c8239acbd51f51d1b\", \n\
+ adata: \"9669992d24b788ddfd6d2c36b6bc0f3dbef0\", \n\
+ ct: \"b01ddd8823ae43557d07e1e07a8b8600dfbd4ee8bdc14abc3487418e89c00031690be239c5fb551ed94571e0852ebe3f72a6dbfdd7a57411bee4a44e339f8c9ef5562bd9fdc167ea9eeedad8892f71bb425eac7786e0b580b301c7c57488c1ec649300dba7b70c38eeb2c4a9c2e3657cee\", \n\
+ tag: \"f41ae6483acb32071f3c14dd80874fc5\"\n\
+},\n\
+{ key: \"74be19a874baa98a5cee524e231230c3\", \n\
+ iv: \"522a6fca2cc8f4d05b6e26e7\", \n\
+ pt: \"6ee38e13b7b4262a5fc48a26dc5bac48c94ddbaa0e379d5d68cf575321a5b00db093018ae05254304e8c2d71c03ba69cebc1d78fd56b1f18d5cb5bd3f4b59ab544bf567c90e3d353e9dbee0698f1ee3d717c356836ae7ea078bbb3cb6333a201a7957ac09b2424dad24c2e385324f50496c98c9356f5637d048a54d397bd3599fd4a2073dd57210a6776ee4ea78eb0df4d392d6ff0084035fe7a0ef1e9f04f35f7f24a186210535d236fdabaf8d91de7e43306\", \n\
+ adata: \"cd7049b1ec0f91e7e12a37d6997dc0231248e8f12c5894c6f974c26e1751f9cbd82b11133eab2a17a7bec290e1a002357a9b1faaa926b933df9c713679\", \n\
+ ct: \"f55a09ff74a9708d6afdfc9f2a7604298d668933d6266d01facf63cc357186ecb28a1f22863b1582ed5185344e2ea81c0e05ffae06f9d6573278e889d8bc5c26db3d9853f4e0016ac86d67d597ea6d2f3675489fb0b5a1f08402beb4dd6821f87be817386d61efef0630500945ced6fd3cfbdf4df93d6b13618d21954add7352cd84e6ba098fcd3af468cd4f31345ff9b3501cb7d93b942c8b36320c160d9c65eabec29c2e037c0f1c6e65530c8a7394bf9242\", \n\
+ tag: \"ec6efa3a423b3312cbbf3f8cea81aa32\"\n\
+},\n\
+{ key: \"a2bc1ee30a86c7c9911907e4bce83150\", \n\
+ iv: \"8bc20386529c2090\", \n\
+ pt: \"e254e4cad6ae04d5dd8b19225ca7b15541391e5aaed14866b8874aa9b9fe6b3a11a2f398e554304a759e7e6972f643a8fcd08ee44b3c07daa587c0ff0a754444a9205c2aabf7d060c73ed8ec17dbec7fbf023a02aed983595ca132\", \n\
+ adata: \"840a540e2ac0dbe44ad884127f7b976c6c5e152e035ee8349472e5d7f6fc368afb0cfc35886595db00300c9597443eab381115f4c790fba6e75fddbf40548d393cedf6fd8bc1b019227db7b18af491111289d76f40beaa0855ad9f6a83a793f2df572fd4f057e70c63a6e53b22b7c289b08c72217820c2989734b6b9f45624ca4d2ac72a81698e\", \n\
+ ct: \"bab7bf04e9bd66d7bb5c21d952f2ec474913e94d2ea25c9eaada643e6cf32c16dca672afbb4949cb93c72c5a99c159436f7abc515c9c4577d48223663374fdf49f9922aa3d40b5c86d915325baa42756c233e9b43a8daa4f4c4b9c\", \n\
+ tag: \"095fbe1048a9e1ef8246b17333c8525d\"\n\
+},\n\
+{ key: \"6f8333a9694f9b3ff7fc28c67aad5f29\", \n\
+ iv: \"c249cdfbad758ad1ac01c1e3\", \n\
+ pt: \"15b867e7210c88c1230f014d02b70e1755bdafaf50856c0af1e34c11c64bac6b53dc3d9696f8843aa8992568af6cc7bf05bed0372bef39e002ed627faca4a13de91d2ea1fd7c9ef47bbda54e1094b4dd8c3ee979e9ea19ec3072739e39eeb64fa925faca4b7cbc64d3bb2bffe3387acd2b16e90b95a589a680752bf006f0640fb7a24f2cb59aa17985038ce524b7e5803288316d3fe4b9f411466d7bd8ad\", \n\
+ adata: \"15bd3e0e3b11651ff4\", \n\
+ ct: \"5fe49a57b5101fd45ff2968e21d3e17e62ae660bd4cb808b8716246f239160daa72ccdba67cf99d69f30c1c3bf4e63b43a2a49ba2e80f92e13b3da1d7218dedc3ef7bdc108abcc0306edf4845cd326371121f0816c33eb1f024c7baf6a485952cccad2da1426114b6e460f027f37691813119849397aa00e6768bb28c76d1b9489ec7407965d8440d0e6b99c9a4b70a1d8fe60fe6652a0997a507abc3630\", \n\
+ tag: \"277891d1acf39204af93d4fd28a7dd19\"\n\
+},\n\
+{ key: \"e8dd1625c845473407e74e2925d27d42\", \n\
+ iv: \"0df2d757dfee70a1\", \n\
+ pt: \"b2cc999c01e7b6aac9e9de47db0b1d49cd6f4d98c67ef2c97e587e018563d352a9d209f0d919406d2d3e37219b174a2f33c6fe353bde0bd13ac4c01bd3dbf89963bee8d741393ba3937f6f4ba6b451327ae4909b082637f9c8c82fa0b8ed9aa050de2fbde14004115bd4f98dea4097a106739bc56426ebfb881ca193a6cdaf4e64550aa523dbf276bf8aa9b004a4eb437137750cf87f546ae5bf704a9d451ffaed93ce8cf7e80a153f00f9614d658d3c1662b0678131dff1fd77edbf9975a1b86f1c658ffeb7\", \n\
+ adata: \"212c767b6638f01655e955fa63fc8b4c151f2f1eeb3e098d26d7283578e639e92bf69a129ace20c431b5ab0c7c71a8491d19d7a3bdef7d5bb8add298ae183fe7a9053fbdfa9934413c781421c9549a5463dd6696a810b356af18\", \n\
+ ct: \"89cc43d4835e019614e3bb84541742bfa5f9df5bcf0237608a763b2a59b002105fd0b04331c577d8a6d2299a73b2ee4c89265d39c1772bf2223d373631d5fa639d98a8cf85c3fa060ae14fbd4ed639b34b6e8f16664333ee963c4360bfd2c556fbb285f215fa40ab040b76efa6002343bc0bae44ad129daaee3a9d45b5c23866c0304e52e25a16607da87ab497305c0d5e544cf30575b859c10ff69ae000b83c2dc51c725a747acb2696c2702eb79f9a0236b638f669e7a5730e4a45328f3a69d95a5839b96d\", \n\
+ tag: \"0254fcf268518711f3032e82acf87624\"\n\
+},\n\
+{ key: \"e840d3b465bd44d9bff13dae900257f5\", \n\
+ iv: \"f117160b7c483e53d628b89d\", \n\
+ pt: \"c9affbc874b565eac3ae4fd8a41affd84086f6cfb7f4570852ee836bc6db32698e21fa\", \n\
+ adata: \"1d097f0d8b81236c97519c3af4c1b1814ccc5ca73c1d705d323e469963cdbf2161591cc8531e12\", \n\
+ ct: \"fc12b8b185247f1c79955c62d802fd6c0812097ab46fee79d42e8b68157f33a11e48f1\", \n\
+ tag: \"03460e79073ee73e02a4ef2979f23961\"\n\
+},\n\
+{ key: \"86f9179b44307fa24f8d0d2feae8a206\", \n\
+ iv: \"8b5a6a94884075b788498ac8\", \n\
+ pt: \"1668369ce1d30c19a4705728d4b29db4ae6b2183125ad49363ba38be3ca2c03b56948bd1a6dbe3fd7eb3952bf9379d8183175d6ff7083105ca5cf2a87ef247cf8e654d96ed92fb4623ce1f8e73477aeb90bf616a44cd65714d9b8aef64536bb4\", \n\
+ adata: \"8bbb6b3c73046aa406b906030f4ee6f7c2\", \n\
+ ct: \"1ea46f08bdfa7aeade0b12f7680a802683b940f2cf7f863c731d2ca812a401fc7fdbcb80bf33396b9772a1d4eee7968ab6057af0a6f364d36b7a46a9bfadc93a79be03b0765f3d8eecff2d9e3bfc2f7ea09892c6589700ae2e58b61ba4349174\", \n\
+ tag: \"b915c6824df83534564ad867985fcfa8\"\n\
+},\n\
+{ key: \"1544e9d4b7e4f021432b7eb4457b0f6f\", \n\
+ iv: \"08877fa421fcba2b\", \n\
+ pt: \"29b4486f107e583705ddc84be277ce9ca0f4\", \n\
+ adata: \"300a1f26977de792e45bd4b99c4e070f67addbf47099fb8ed900780cafde58df9a6dcc154a1801f10f192cf48a4871b483006e507d75be238943235f81ec4b10bfe375e6a1fe16b71de22169dcce9002590f1397fee7cfa5f10762c4aea559d6a9235f08c5ebfa8949203b56809392\", \n\
+ ct: \"af849b56f4200041db231c82fb639f69dcd3\", \n\
+ tag: \"86c15ba35f9d414c22e82bd9f43d7b72\"\n\
+},\n\
+{ key: \"57d27662db3b3e64f61eb1eb4a5cafec\", \n\
+ iv: \"d834e22d8b115309ac3a2d18\", \n\
+ pt: \"8bbd3ade3ded4abf43f8441cb1cec14a5a2423c4889f8548b53fede8e7a64317d628661cd0e560f76271a395126d\", \n\
+ adata: \"f474ee18b574e0cd1251aff4d79c6e3ac2d075f7ddc1cdc2ca0e210c08c23006d3dace30083da910972c11b5f979de38a5e8a659b0dc4f7df6c8c7f8a27b225f7978f40e31f979a24b69cc758ea57373e0d5711d843a566faf74847e3106d9d50b9bf83b74201b6c158a1566cfc0f02b8b82aa7350f9aa2e560d67be1cd7ef0206b825d737037a7db3c94d3b7b9e798c1ad7d2b23f5fe1d4d1387d1894\", \n\
+ ct: \"67124b8597f96244ac21b09d0753487377e54513b0777a258481918649757eeeb3b55387d37c69e2735af1cfc20e\", \n\
+ tag: \"e3ad2cb20506753e052517259a1f749a\"\n\
+},\n\
+{ key: \"c87648b1a0b4f5465beb387114ada91e\", \n\
+ iv: \"7c6886e1bafff9c40cbc71eb\", \n\
+ pt: \"ab8423e9e5c82fd48707a66647bd9d29d029d229372c1e5f6c3d1163b48c1f221754fa2e404d9209c01c54da0a3faf7ee18a32c2cb25bbd010f68e3b1e22fc88fa537e3ad0c1546b20e08cb25e51aed19d0c4f63caf2953626f68b456dc90759f078097cfe2f490fe4d92d61f0da567abdd64a3682042cddaa1cdab08aa3822c84c29961be6b33d67960a694921054708055e1ebc3e454a117dfa2763cb516435d46e0fe7625\", \n\
+ adata: \"20dd60c2ebe44181700f754f81849d1284bd36431dcad34358e8ebccc8501aa89c3add8044a8940b\", \n\
+ ct: \"d717fa1069e0433824e2a828264008d6a48be2e6ab7f6871700b2df9de996581028130acd00a741cdc9751a8fad9032fa27d8a3ace6099e26cd7b744308ea993daad2f5a03a6a802625ee1a0d2b3f812d3041324456480224a52da1569a6956d9dd3a8a76d328fbdc27555f422d083609371f96ab3f7d84ed46ef218559dd002a5f3fe365b1a0cf9eef43192607014fdc8bc3fcbb5e0a0389d25fc4bcec43005544c749241cd\", \n\
+ tag: \"ef39d0da8aa270303efeed462a474893\"\n\
+},\n\
+{ key: \"e28aa04463bb35da8e2b28063cdb4a56\", \n\
+ iv: \"a807b9306f3c450e\", \n\
+ pt: \"229795a70ca81f9e12d1f9ab6706331b77ffcbe45510403a6c70b1c0c0a635db2618213e7dc875b0f9d038de838de2c77e26d837a0ddd04713e2dedbabf5b47f3ff2a3d1cab928f69b4c3b40cc10f5333613178cb015fcb39041112dcd5c7c8aacd815167fc023803f84652c995af2d93f397cddc6f8f29b4f823de91cff3fcd9e2765a3b0eec986e590e8d8eb8c44cf8feae429841762c92b8ad8137242968a3c98e0045f4e4f6775e3c096d230d32f\", \n\
+ adata: \"bdd45960763497febdb2905a2432b6035176e97e57fa43506989b029bc131d1834523e3665cf2d62008200fb97fa49c1bbd8cca3db83f3f4e2556790964fd8f323b21d89a96d90473d2d39e458317164410bf0db6b428dc208ec294d3c7ddfe1623f59c894e8653ef3464bf6a6070b56f8cce5b8310679bd3a363533c18e93f4006a3e3fd8a49d7fdc13\", \n\
+ ct: \"2d54a5f823dd0b96fa4d05b17b0a1ce729ce93ab88b1f521e172762d4b5e154d9a74abe92b6eaa2a29e15c26110c5ae2f87214feb7aefb7d350d34734342ee7644f0939502e3584d216771a1bed7b94b1d81679633a728c758c78e2e6db937d603fec9f69b69b5d17145ffb725c1eb916efe2f4eccb1b14b86c0b973cd0952409f4f459310623660ae25b60f62c5e940e1721d862bea8aa51c4c59392d1199b10d20707a6edf2844ba36376b83a85e7e\", \n\
+ tag: \"aed86f530b3f671f9046490f71c2ebe3\"\n\
+},\n\
+{ key: \"e7b2989bb92efd953cd8ff304d65a4f3\", \n\
+ iv: \"72da3d67e7b15e1382ccefb6\", \n\
+ pt: \"dcba31c5131d2228c591329f3ecf80947466c0878be5b88960e3438843913a336cacecbf56016aaf6b24809d6b61cd85e3b47f9bdacb21bd7301c49d9fa29edd2572\", \n\
+ adata: \"620ee0fac6a107ad3e01a8fd59\", \n\
+ ct: \"f44557400a69d4b523b03bb3bd9ecb6f14591a8cf705abf99d52a9fc35ec6192f610ded48bbd518179866992c726c46e9cc7f8ad249cb2886072d9839bfaf22f749b\", \n\
+ tag: \"184da3729b71bf3fe694df787f114609\"\n\
+},\n\
+{ key: \"b528a5c2c13aba13ab8672cae5a08f29\", \n\
+ iv: \"1535eb319d9c2317\", \n\
+ pt: \"502915b0b42e59d812412b1a640b\", \n\
+ adata: \"7c1775054c6cd645f27f783bdcd981f8f8663c46a74f3567747f683441bcd7ec804cc12d7bd5f15d9ef33ae54e163564ad0cfc6a87d6181149c81bb957ddc32dfef81589990dbbdd022fb7\", \n\
+ ct: \"4670bd688ca35c579505a12edd44\", \n\
+ tag: \"613e41e244005d7e0773b56d5f7d696a\"\n\
+},\n\
+{ key: \"035eddc35be9a11920a268ce608f9f40\", \n\
+ iv: \"b24d035ce59fc3cfcffcd068\", \n\
+ pt: \"92a4688df6f3eeebfa6c5f06f6e07c6c13ebbcb346a129b583fb437aac5f47ee74e40491e15f2206ab50aae8ddb261807fc08056357e0caaf4\", \n\
+ adata: \"b42bb5e8ae6a5149204d5cd0d50a3eafe0dff3a041bd4697ef3a61dfb19d5bdb0caaa9573bc59861da4ba0340b615bc3624ccf81af1e4255372da187811bb74f8d2eb680b799fb7b412bf837b6962644027c5b819c1a\", \n\
+ ct: \"a0b911e7840f6ea45d12f254a039c7e44b5ba2a313a28f47d48fa912856f4108d1fe6d5c6d55da9c7c07919efb9c669130790424d08751ced0\", \n\
+ tag: \"cb98102850e4ea660ee80e17305f01dd\"\n\
+},\n\
+{ key: \"8dcd11e93a7b36ed3f0d74a2963f37a2\", \n\
+ iv: \"f5f8bee58a474b38\", \n\
+ pt: \"767ace479e36461f8f0266d10773fed29bbaa77ac88730e6ce7c5adce4bec592b6a8\", \n\
+ adata: \"2cf608e54a93b13ceefb41e72728f3ae766acfe8378eb13eb5ae2d515d99cf9d66dcd9941fa0cb93c0673f79f87f415e3d8d672b3e4aab0a4e6c7fe8\", \n\
+ ct: \"d22298e068a69e56e6c3178fe118ac9d91e949e0d2af41f207750e36739aa58cd41e\", \n\
+ tag: \"4b941b1c7e98d77ed8d3e1ac9fbaaca4\"\n\
+},\n\
+{ key: \"f3dfdc7254bd7e981045fdf3975c2654\", \n\
+ iv: \"43c10fb9891834e4\", \n\
+ pt: \"bfca30866bf4ba086d9aef6d4584e8acbee37e316bdc905eb653b83fed2318e5cbf02874b36ee481142036d4b1ee8297afc755e3123ea4e2273bc706e561f08ad4f92e13b86ae433f1befa4288168aa63b373ecbf37e2d90855f2d5d80c85d2b43a6e5be3ef84266ac96cddfb6441d8f84d9\", \n\
+ adata: \"f7909c0f2ab6b33d8243fc6f542948135cb117386a\", \n\
+ ct: \"fab8faa7a039d39f34ab83d64102229ede0aefd3b45e42e79c659f4b1d9452e8abd2697288cea16cfb8e3860e151f29ef9f56891ce74660a39f87eafef828e027c63626807f8f53958be8d91979face46ba82d314d4c54b30dfb63bf192e3d4b5bd08cec869db1829b48d0f0b191726e640e\", \n\
+ tag: \"c6a3b60c6846c873719a21510e3ef815\"\n\
+},\n\
+{ key: \"d68f2610bdb5878974baadf5d805f58f\", \n\
+ iv: \"e46690010378d641\", \n\
+ pt: \"3a9b42d47eefebea12e430c85c7c0635c7c6cfec2e30b0ad571c60f17d3859de0c78329391a9911026a4\", \n\
+ adata: \"1ee18708db084eadb883846be9b602d8225ee879bbb77c6bea6b5d9800c75dc7f105d8a203dae46a38dd942cbc8dcb95f08cc5ab298ecc415a8ca8f316e4c4fb30e3764f1f34d5055573fe74f494a99c6d942b2962630f1a25d20f903802be67513f41c02a91829993717a0e9bc07cb583c7d7535298a92cef004ffdac5380c6e4ce9fe5e1e2f40b23c6\", \n\
+ ct: \"9529eaf01291ac929ab6283bc23e8d5c42533312f30c8a83af2030c1545dfaf9181ce4a57217c15720e1\", \n\
+ tag: \"5f6c21b8f1454d883b9ccf7bd09d2007\"\n\
+},\n\
+{ key: \"f2b887e7d03288edeb2476c9787288f1\", \n\
+ iv: \"a07bba358b5fd2d1\", \n\
+ pt: \"ab3a4094e1ba736b1d549585f3ca78d84cf7784c4634d90de13249297698204c2c50b168256d10c463624b50f3b0ee92769b1672b4039a2c7135ebb70e88d78a6bb91bce5969c3bdc929e290ccb69ca28e39543470d6ec137ae00a69faf0b66a013ce5a9428dff\", \n\
+ adata: \"d03e76d4c1ba939294b3997d\", \n\
+ ct: \"f27dc7451519f76b8d34187ad428301460f6fc737762c1817bc14a970ae798ab3a88ff1e619d94ee4b21d6d6780db73188793216455097f31c069747e23a29bb75c1475f9cf951048d0f6b3a3eac9612c632e8042b38823b74d01621e393065e30d5e9dc2d62d1\", \n\
+ tag: \"d3884bb937317247276c5c09b489a6b9\"\n\
+},\n\
+{ key: \"4a9f0e24bb982a85f793b47f94d5dd51\", \n\
+ iv: \"9d91a85c910c6427\", \n\
+ pt: \"372c3b3d0af925c8ac1d8c74e5ae8366f0cb3f4a51563d4881945c733a67d504a058ddd324f73fa7c3d63c1cc8c48be2ef4e50d670690e7a45b7dfc55861346226c01f2e0afc23be9dd7e55dd205454edd2c0696534a217c3aaa5863ec3e1d0ec76075b85bd4ce64f84cbbdfe6f9bbdf51480134e76475803055a10fe98ad64d5085671e5dfa8860ad9f4e238dee438503bfc64a71e67421fe942d9aeb9d2673a2935c02\", \n\
+ adata: \"4abcaf3ec56e285a2597e5f3dca60f0884cf5194b1904e5903881769999827a631b46cc7e2f734cc4ce6a4fca2ee502e820083d820b9db0aaf5fad83b0f82e4032475920f0075d79cc\", \n\
+ ct: \"55b8dd657cf086a4649cd0c00ff2c65c7c9451cd428eb6bca9433450ca00053fd4ce2dc01936cdc749247db03faf0d01dd2d6b1f6c1014293c2a0dead9d673780d7553709bc5f14ebabd21ae115e188d2ff441a5b29c8404dd2b458684f753360faf287e8bde65c77a4f9a25fd2d646a23075150546a69bd82859c501ae464865daab33868e0a0766b45f3aa05dc7b177ef78dbe2170533e57f02cd864bc30e0bba9691e\", \n\
+ tag: \"5bd0d06e5518b878f6e5a026a03783eb\"\n\
+},\n\
+{ key: \"4b730016fbd8756b128d9f37e4f7d4e4\", \n\
+ iv: \"00d885c9cf5756a9da5dcef1\", \n\
+ pt: \"aca04e19fbf5029a2862fb37766cb0315aa1520d6e26b65a094dac89c0c9b9fdb099bdaedb78b376d53c1d5fe4a786a5f5c434e48aae6727aedac81ea4d058ec001186f3bcb61cd76be26c917afe930b10dc89435453e0048d31d588772986\", \n\
+ adata: \"dfd7f60e77889845\", \n\
+ ct: \"2049c687b98bfffec02d086aae571f3adf80e19fa2cba987cb66254a1c8e96ebd8a28162349eb50fb297b53fb8f86c7f852b5d487b1cface0e791d60ca05a8e57fe5771fb35edfc96d118c255123165a6f642aa634d269486b0af37ed6aba2\", \n\
+ tag: \"479ddb065692cb273f00a81777e1b5c5\"\n\
+},\n\
+{ key: \"08fb5f0f231b3b1db246a38c441e7e17\", \n\
+ iv: \"930f45373e0575d0\", \n\
+ pt: \"3465ce84e3af5e8cae9685b1f1a5530a9a382f435a60449a951fec21a03a162196452d8854df916e5a5524178a7915d4583364e4b256993e67d588f1c31adb495fe946d78b70b488679c78c1fdbc119204a4552aa29ab347a3a36755a3767a1e98eef4ab9d1029c76cf4e2856f8f1a895ccd064b900c82a3a9d7394e7bc6ff5d83c1cc13ff43bd7f114a6fa380b3ff414715f4af825a\", \n\
+ adata: \"11b6bb73cbe8b1be24e8b2eda07880b452394776a3d422f5dbc254ed19620c27c26849ec9e7c6df9415f4787c0a9a483ad5229cf62710e5fdcc0e3f1324092c3597c4733263f7f4af070c24af7aa6ec0af2208c76190b576111040599bed66a29002ab7a602f38023500bb255d591615420adc436b9d59aa36887c8f391294e74d2e67445397302a40b3c6f65829bbabad90757d3372f4b3027051ab\", \n\
+ ct: \"74c1afe333c15726c86d2334f27645056021cf6a708e349d6efeb9c2d1d20cc2855e557f9efe28427ad3a5706c03f4ad3ed00d71b9da4f49a0e5a6d2dba55e1009d0cfe4ac4500e2ac255923ee61a57b4d54f094853f3e32249d8c66f5892b9ac5722a9cd56460cf663797f38478dbbbaf1ad282c294768ee2fb17ede5ff3505f6ac7a752d475042bbc92770479d35d2d5c3e60f301d\", \n\
+ tag: \"455ae5bf5c8aa2248f92bc4107e69c34\"\n\
+},\n\
+{ key: \"03aeda8f9e7f907db814300573139980\", \n\
+ iv: \"e515280a0cbbe10639cf24ce\", \n\
+ pt: \"7fa7cbc2b55c2d8a98ceb17e4d83e6a7219ffde81d191c6b12784d30f2fd1e7e494c586ef0458227d782fd1feeeece13b0b13fa7760365ed857de9d7c9ea1d9933456c0aea422193235f2c8a2f6d026ef6d607c99b14f5bd24861f494148e7b02bf8eb7058d2d2ac7d9e437ee1c4bfd6295c974df4b778796526f2a93123a720559df306f253e3417789bb6d01ffd72ca2010a97a3e29f2a7b649583b3e153a9628e621f76a561b77806e419a263fda41a069308d8ab1528f54ad1\", \n\
+ adata: \"\", \n\
+ ct: \"ae3a286fbd722c77d1ce71d2799380e90507e2d437ece434f2fe519bcf5589e9927b763af7ef1c1068e8ed704d997816a8cd5571a73563eb627ee40e14d8ac8d0dac1f45ad0cbce4289a3420bf3a59b74b6135f812ff7535fa476bfe3797af16112206a4685f29ff6d654330fb1f77140d9da747033f7786bb219c783bf886fa1e5d1df74957023c67f0d464e2f033455fda3b914821479763cbaf140cefee0e6c08975514c8d621dbc30b72ce09cefd1cdae3200f56f6701afd53\", \n\
+ tag: \"23aa38b64d6fecaa9fa00bb1ef3bca1d\"\n\
+},\n\
+{ key: \"81bc807c2b3a0645b0527e949ea5fdb2\", \n\
+ iv: \"9f14d981c1417d7a\", \n\
+ pt: \"f3a9d00a3f7f874f713503890c575ba5e8d8543686a094cef736850ead61d414b3b4f8e0722c\", \n\
+ adata: \"3cb8eb4949fb5942f30846faf6976e60a629bcc5fa5b034c9a88771a5e4c6405f64b00a3bd36ab9883cf5885fef577d899b18dcf38900a9bc19dc6a8a29ceab47acd6394516a5453391d517195cc47f1f7181520dcad65545c657fbe3e6887031084947a3b260f27190c8d01715dbd7df7190b56b7dde7c3a805996257b4c576af8e6d28f996ef200a8ce1fc2ec263ce1f5380\", \n\
+ ct: \"6af24b8ba516ed32ad93d57f7dc4abe39de5c9a232e332b8ff675ed567e2b3cb41ae329c2a4d\", \n\
+ tag: \"c2dfc26bf436c72e6b1e5e6ce3f79906\"\n\
+},\n\
+{ key: \"cddc7035f4d43fd0fe6488f2a956f948\", \n\
+ iv: \"3da76fe237243394\", \n\
+ pt: \"2881c8a5c1ba087064629b9fd588d53cc2e9514f9b4e311453d37780de066fcacf37790e78c4287409a46cdf34374ef8ff54fc5f9b2127763772b320118fc70c828a7fa56213221d7b0ea55390143e0fdd44874f743f4c5a75d5ca6f06ecf54e9e1b7614a3d55fe63d9d2b21ec1162848f81389d57b746d5d6b860f28419bc8b91\", \n\
+ adata: \"f9a65f0c011713a35f8d35d94ac247e189442527eec8eff349c037469d8427483bdd5872ead91474ffa80442398d1680a3e30ac016c1ae115ab261f1740397491517e93e593e8dbcf609a371b8f3d84c02f5585d6ddbc4b60796e8899d332fcf81856853700ff5da3917a3a671b9cb17da8a758ebf34f283bab184a48d5a16a57ac118a42007775a4b57acc2ce5aef101f5a01da676732138ab3395591c66bebc01b78b97f43f8625c7d51c2918a380b4cd1aeba64330bb2a56c8b84b7a5\", \n\
+ ct: \"7b3b221a29fe450607a83d2ec00d577152da376f215bbfd4a1eb329115ebaf5e1c4a2f90a9c0b9a1ec359ac23338ef252c5cadcf86ae67b7b621d6a466f79f1f7b393ad53490dbe7493739f3eb54d3b5bde917c9ca1eb4be255421b7256dd2d2d6b66420db43899356090b53b709a1df9d9b919681f5bfa147060315700edf332c\", \n\
+ tag: \"360b88d8be7eda9e82d89a2532b4e950\"\n\
+},\n\
+{ key: \"7cfc0d22f482f5673026091a37e1ad4c\", \n\
+ iv: \"39a13e5a55fa85ad\", \n\
+ pt: \"6ea309f68d8eeb47571e553ecf97db67dc0ed260be1b187e1a\", \n\
+ adata: \"ed2d59f17ac1a115a9a66f21b1c1c32180e8d992f1ef1dc13cb1f799ab3cea7c61bde2b37fe358a720cbb83ba940d30d844209f1c4e78094eeaa4cc8d888f19f80b2205875e4abefe19ad9e2ff12f4a8edcb5084af360fc88fcd821f3ef689030d4f2ce1121710e71f496b92bf01c0140084c72942471148ea33b0bf1ead9fdea14ee6032ec40da8542b0df944dfb0252249a127d3845f3918ee05c78cf3a7ea1fb27ed94b\", \n\
+ ct: \"bea1fb175403e8962c0a7d3ad1ac0ca9093c34529e897746ea\", \n\
+ tag: \"ee2782b38d356af1cc71857292ba8946\"\n\
+},\n\
+{ key: \"7ffef79fea795cb6a9c668d7341cb144\", \n\
+ iv: \"2681cba76e7d842a3b2bdc4a\", \n\
+ pt: \"41d579d3f247c8aafb4e5bf1b79dbb43ef7ece461a337046714e1b68a9e7c076464ba244b401242e617622659ee9364063df094f264a457a581c983bb1237f3e8868cfd495dbeb0454b0495950b1f71c606979017cfd143ab79adbf0ac3712e7faa569bab41e49d150e32d73828833805d46722f1e065685b9b8d7723eb63a06acce05fc0962dac1f1c6929f639c18786132d317b1c87651b59233905be18e3b688d533ae1a39d05ff817121848087adaa3d4c4b31930ed924886f831aa61ec117f797748b71\", \n\
+ adata: \"916b6a6c3cf63b015cc5b322df847448accf9d8b38336bcd56736a7a3f93c91b8d238f6db3fbfbd008a793fc2ddb701d3c11ba\", \n\
+ ct: \"65145f46bad6eec3a84a041146ff028e22a37ce6beb7999b50cfddf3fa99cdd723aa361849d976422cb647c2d550f1997a727031c37be37e750bdc3684f6a00c0d9899b084a6d22caecd1cf147178a17231203d84dfbe48ad04aa745a294f6cc48f61c3711a060d4d6c19e79440840be0d55a7ad8c9ae41e550ff881673603598bcd32b87c4dec6e813b239154917986f1a21780d55915bdc64c61a96634f3d059c19402e2a39177ae901ab8476bebc4136446bc82db00251d6df4bed2b0817936ef947313f6\", \n\
+ tag: \"50b52ce62d3ac08cdbf76e77b23a41d8\"\n\
+},\n\
+{ key: \"c762f87bddbc77bd3bc90730d73866cf\", \n\
+ iv: \"d8f188da6a09530d4965a4e8\", \n\
+ pt: \"c7026272b1383022f97a0e23e01e52b73130dcdb8d785a999c136bcc2289329e0df4c48a67e35632e5eba61a9815df898374d17eb730c5f10288cd914c4acc57d1221126fac9c266dced324de00393fd53b6011c670712990cf76f49d76c5518045fdaf5da619d68c230d0efec32e3eece444871e80064d5d37b8bad9e259cda92e7855e1e2157671b3aae6c69aae9247ddcf82350941e2992fa4bf078fd1f963f51c404ed647b9e7a24303b0743109bea631d0724c024643b2fd777\", \n\
+ adata: \"b8e488088797d6052191407ee85aebe7a2820f583a75d245a5d441574bb458678bad60124e201f9797955066174b12bb9ebe4e2d2533a7ab6324581c519b779b609d563838ac1284fb7fe03a7a8afb9bdfad1b3410a09ea6567b3b34f2eec2910f53201ea979ad974b96bfe548ddba0e068f5f2f1725a4256351a58f3457014bc01b163f9c9019b4c8d3566042fd47dbda7b96a00100756a181c9f692f9a809140c76ae594576807\", \n\
+ ct: \"57e31b809dc707c4c0828f4a01957b6266037b913206f357eefad1e9d880aba6af506f3fbbe268d94dca89ab26c6ee04c879f055d5bda79f83b8cfad4bbe30f05f3ef5c86d8d6f403993bca6e817e31101c47abc2d4b6ff43c7a2451a920ce56d13519461a53d6052c6145c6539faf3cc12de5827cbcf1e9dfe0b5087f0fbc9066b93cbc02db7d69f152ad54bd3a4d06429eb335107bb73bf6fdf4f19165a1bd22b20f6ed6ca9b1cf65495a7250cab308f29e2c252c76fdd267e137a\", \n\
+ tag: \"4c7a6161129290e17e2540b2c1d68455\"\n\
+},\n\
+{ key: \"8d17b6a31d2681096c5e3a835ef91266\", \n\
+ iv: \"142372fb7c1a394d\", \n\
+ pt: \"e4c794974d19944731bbe04b622dce7a74814f47ab4eccdcc1c522637a8f976e481a9c6f978d65d5ddd4856e561fdb9ed512f9a392f0adfad84328915dab31a8d6513c1103dc1a31153c6e58de79b1b6859657022d88981ce557637f8b57556976d94849cdba99969e4808edb60b3aae761e12bc44461c913ca36abfbd3fea807e57d6b3d8a5b42056e8ffe1372703a224c8531f1e6b0668c52036f4465b82c0227fc97020441b3f0cc46863aa3da4db5c119156ad\", \n\
+ adata: \"288a8441c53db2bc218e1d1053497270d1093194913c171e5685b10fe41f8d9b7f5f5741e78ea8ca3b6aec65f79a05d7e5fc336bbfcdabeedfb80c160a0c8111209d42d34363b8efbdbcefb8b0e3e41bb4034cdbea\", \n\
+ ct: \"290fa7163692dd55b710ac513f897a414b42090a9c0ed661e435be205b47407471afe3412af3661595b0a5fa46339a7b7a774b7276fc1c95eba9f1c2f5a07c341886e26484a0b56348381e9ad4b87b7252e29bb62a54a3f7b41bb36ffc571038751c8038fc7b390429112b4a921eeb9aab1b3e39a44d225b8f6f1d685722d6dc76a8954ae666d82e49fbd2c03c0911d5af78b4b2d77c0c3201796ef8e3470963be00de578171a8c81671661bd5ae31902816f8ab8b\", \n\
+ tag: \"2bcb6400c750176d8e95211611728cc4\"\n\
+},\n\
+{ key: \"10e3a1017c58915d345d8f9674f0ac1b\", \n\
+ iv: \"8bc0652dbeaf1e16e907b92d\", \n\
+ pt: \"05246ff8d6d8\", \n\
+ adata: \"af650a60a3ad4a2702bec5058bc46f8301ea90000bdb99314a219190ade4a4ebe4e9018d561c57228fcfd7b376fbc6412b658dec\", \n\
+ ct: \"0af9f72d3491\", \n\
+ tag: \"0ac99619b02f2398bfcd92b1d134a5b7\"\n\
+},\n\
+{ key: \"56004cf417246395d641eeeb4d15e77b\", \n\
+ iv: \"8dd05532805e26553ac30364\", \n\
+ pt: \"0241e61d9842adf82538cc021fc028a08a64fe7d4afeb0393c5b9fdff5c54156e2d4c8334962818a2421c5af38048e69908c3f197df1535906e6496d6cb68302\", \n\
+ adata: \"2f02677a805aa281ca472d8441fbc92b31d3ef9d7ab57cb3be4f6d96d7aa2f79eac4b14c36d673b5d30e2d956f2946e74ffc0fd6c8c3fe36f7c400a427f7bd4c96a3ce4f64c0e2833aaed5323d8c52a7419c43c9b6d87617e0ee1afc009f904bce8b0f21c7d187598f1cd78b568b2531e0bbd417cf1dd07f4b25a7ae27310853c0019a9dad82be0ae378e450c4ecebb228257993e60504fcbeece8e8898a80b727e3c519b549\", \n\
+ ct: \"b0767ed0b62c7fa73af0936cb313058873c3d21f0267246ff2d8f5e7041afe2fbcc8f9a758da92e3d519a9da593d04a962f89eef08f47cd425ebc1f0083b274d\", \n\
+ tag: \"8e0ba6532605afae15085b9ec2f4e3f6\"\n\
+},\n\
+{ key: \"0334740cc9a5f9346d2de8d56205e169\", \n\
+ iv: \"0bad709225fc2cee91041d10\", \n\
+ pt: \"253d30ea13f2c53786d84d759b0abff27c6e8c53d6f4b92cf8946663b950f4cc6541e869d80f478219096b26f517314db8c9cf88c0aa4651b1d9e3e9278ee1259b40ae0d8037c25d1494d5cc7b4ec20c464011ce20a728a7a1f3c452\", \n\
+ adata: \"e0c98de9b3191c6d64f78afe96d93f7305ef82f3922f217e0bf2f770dc2f792ab05ca4e5eb637068af31cb8494fd68db0434cb57b0502e3386f97cecb98d95ad57c363f18b063b66d313874971686bb8beb9884cc23282e5b9158c8c9342b096f58afa5a74dc5d6ad17ee1385fc2fe9486285230987945c208045b00\", \n\
+ ct: \"cd68177ff0a044bf31388bc63fa19e4ec26f732c2ecb10e04889e36bf9c462945c728b4fd314f38b52c7983d9f5be024cee5c168ff97f3ad606896c2c312ae20530ab8a753f98c0c05dc4f3d7dc8138f7f8614d7ece98c2b06bf5a53\", \n\
+ tag: \"c78e50d766ed8ae8d35ada162fe3daf2\"\n\
+},\n\
+{ key: \"d49079c047e5eedd90ad1012a55dac14\", \n\
+ iv: \"e64dae27305a36134bc47d55\", \n\
+ pt: \"c4b21478f57e6f8dea9e6907f3d5e69a024142801fea5d53d9e1b642c0b5e56cc03ea306471eaa683c7cc1ae5cb6550a6ba5abfa2c66c891da9f26fb624379df1b660b62f6522d07e407104378e5101ed7bc69002ada121aa9740958dce979058357e7513f64738e04c7f1702cd9394824486139391e408eb89b51fc9ddf7adc08082c94e7ccdb00b6\", \n\
+ adata: \"a5f6ba99034cf1003ef91673d7a6ad221de4c79a2d0217c8852bab3ff4e5233b88a112d44f\", \n\
+ ct: \"77b7f34c2bc3e61e68e2cebbb0aae69ac26bf1b4c419479be35c15297f466147c6c4474f8a8303fdf425fe7530a2bd094393ad32eb29089729c880e0f781939aa7e2bfd0c7d63ff6ff5673f5c83e327102b7e4088b9998b96e6909269778bc05e1fd4fbf9af43b89fe20d3a060e067c9b3f1aaf9798b1db7bd7376881d59ba20e26be158b0082e3f2c\", \n\
+ tag: \"716494f15dbb63aa942e72f3b75dd97c\"\n\
+},\n\
+{ key: \"697321395cc3a4ddfb05934db205443f\", \n\
+ iv: \"d5eb2b07e7f58560f2f65469\", \n\
+ pt: \"e5a370776191da7aac50b96d7ce6ae8eb03783\", \n\
+ adata: \"251ab1340588cc07e97c6eed6fed3fe7fac690e7d76626824e66cf25d4fcd26978cf4641de4239648c9a47cb6cef02b98b80da8a2651d87b10121069bfa0527e9d2d67be93fb29296897a108da53a935735a9a7c58a407df262b36e0ca44ec017d645bf06c69cc065e1c0e76835f3ff0e18393d94914b138d9ed666380e8f2c3af6de2\", \n\
+ ct: \"4c3079284a3de198f96feda4b7855d24f8c547\", \n\
+ tag: \"f0793392b1888c80508e88988d7ab6ed\"\n\
+},\n\
+{ key: \"ab46540aa658d8ff9ab7d1d2ea281daa\", \n\
+ iv: \"caaac6fe8750841def39f8bd\", \n\
+ pt: \"e88181d3a516e63d6419c66977abb01a577700eb72c3d3e528fdbd121af7e97275b7611a3cd494b8325caa7b5d8f665033127526482215278269df7a1854de53f52f59\", \n\
+ adata: \"b82c3569a86d23dba158004d6414118e032c53d64a8627c86fa2a7a3ebb2fc5f49f28839bd0ac62ad75a4f8ea749124f06cb191866e205c34a650c466e54bdee5887ac4d3e2d731fab652474306a99fbeb4b04c2b4d31d0a1ab18ee23b9c8bf4d04b2cfb9b6bc6faf3738a55f004b43842e9b05f0e8663d5c00bfa8206d2f72e\", \n\
+ ct: \"fdf4c6a83381b0feaec5d467eef2f0dff1e7b6355dc83dcf4d4d6ff81432db73c6dce1335e95aa64c6e95d97bfe96f529a5e0ed97c11be9ba640e13e497f400962c10b\", \n\
+ tag: \"869972971bbbee9266d13d3d26477c3b\"\n\
+},\n\
+{ key: \"a16570097df5ee30979c172248e0587d\", \n\
+ iv: \"c86af52d8546e97803999da0\", \n\
+ pt: \"cc49eb47\", \n\
+ adata: \"59822eae773fd54cbb2241d7dd8718ee3718f1898973169eeb06face4b76f782e34b50c7671192674cd5244f49f0629eb76286e4739818cb6a8623f47a704b4c35c0ce3a5cb5f829cffc43bd18aad4d1002105a9e99c0179c34155a53cac228d835974969fa810c1a3c83a12bc4d2134fedbac99a62d8765\", \n\
+ ct: \"511d31f2\", \n\
+ tag: \"4966d9b980b7b12dbc96c4eae185ed66\"\n\
+},\n\
+{ key: \"ed6bb5cf685f8b15a8e986374d823a8e\", \n\
+ iv: \"381bf9bc17658e15f1538c7b\", \n\
+ pt: \"284968c9f6be12bd984f2c50a0f9479c\", \n\
+ adata: \"25361a2f18e5dc8b612397178a5581905997ef162b78da15dc5368f63e3edcf1c7c4570d\", \n\
+ ct: \"c14266c6a97187af2643de254b65a1a9\", \n\
+ tag: \"1ee21d5d55602ce6a1bc17b3ddbd9406\"\n\
+},\n\
+{ key: \"a5f45575e6f17969addc8c827fe33e8d\", \n\
+ iv: \"36b9a7672a5d6ffbaf5b762e\", \n\
+ pt: \"2e616e197b34810ba8e66bdc78e66c65fba160aafc84fc035d263bcd68ea40e6987caa2988877de65d99cb0d39fb88c05dcce6f2c33160df7889204f900f4655\", \n\
+ adata: \"44d2c0c8bb2135b36511c5d093260a087ce816922263c6793651d03d56f5626de974317e8444f1807b\", \n\
+ ct: \"edb87bcdb6eb63fe539aed6635983ec787691c20f77bdac431d8eadbf321d3782b2396de5331f891b97ed2dad60899b017f222a437e8617da6e6401e0483d161\", \n\
+ tag: \"e3abfff8dc8c7367a4353a928f6a4d55\"\n\
+},\n\
+{ key: \"cf0f8bc9e285a462f8c7f4b7386e67fd\", \n\
+ iv: \"194cefd2f5fe79463ba031d0\", \n\
+ pt: \"542ab7e0180a287a31f3c62906b15d14b83713865a68f0c0153bac37d2197a79d1ada8d08a82a559a7cfeecfa272d1af973b602189ce1dd2515582cd4d5170bb3de528169c25ade8ebedc17864591322db99f516b712eeae16e094215f3c7c213238f73d09fa39dbad0ef7993863d347c369c2f360d2938250899f93a8d089c0e740f8960a38a24ada6129\", \n\
+ adata: \"d8fb5fa9e3e3ebc20892d6cc6a41e2a4f71fd7a7e08d443e8f38ef87fb7c1960b7e133aca5468b9de341c4f9640584b753e87f9f68ccd3df24ea351f9619d7e8fd95043ecf05b4b280e5ccd454de601f06c867217e10b90aee74b0d5b726587036c7c0b2322b7d111e6da35dcf212fcd0c0d30ea21ed020f0b752319e11ecfcc43a9215120b78c3893ed3bb1dc95d3fa9cbff7fa0482e324c6aaa4849ea9d9d268d1dc685228a76e1393e0adc704e0310ee94344f72e5349a7f9\", \n\
+ ct: \"6eeb421664990f19b13c67888fddf6b53841d4a0fcc605310a9e35e78a56b06b1a2b93c053bae5f6c6272ac505fef3a5620158361f1220f1bc38f6a164ed62aa557dec91bfddde0cca7020e49a02e9977c96549693dc0efb6f70550cfd8407af4d2160227da766745306fe1c76d852f1947e3c2ef38d50986d48cbe018fed738649be1b11d9637d3fc8bc2\", \n\
+ tag: \"2b4f983091abb19c19f9932452148f86\"\n\
+},\n\
+{ key: \"e49dadd29211b8fd0ba18010640ea58a\", \n\
+ iv: \"d49de48c743638f171d3cab3\", \n\
+ pt: \"9ce0bdb532910194d875c522014e5c361c243a27a9095f55f6f7826af16538058758a9e5546abe4eb37660744a41f5a6624ccb1bcee5e5952d2a6db6c50129ee489036080f375c9c34cea28300e374ef039558f1d3c2469d906b75e197bed748df5e32a993407464a21d71df3999748c25c8edd102b4bf3a58888b95aa68ec5bcf715a7b3680215d07e51419e86aef0277fa79fcb8354e52b7305c23d40659e52f568070ba33ec8c7a5271e709bf0d1c\", \n\
+ adata: \"f6dddaf06f03b2f0997760fb82d1ed32e62cf8926f82ed6a83347bbf6a7a5405f28130bc0459bf93db896207d0ed739b258fc71a3857d6d55063d598edf4520cfaebf4e6068946c32878d0994d5969cfae824a3c792b2a01167d8cff081f3c3af3\", \n\
+ ct: \"2829c8cbc83eafc0203c43525178b9c6c0fd7a1cf5926e7aab6a9805106df61ce4d2ddfe4ca32b22eb45f4912ec33823b135ee7dde0fed76799c38e6f8cb2f728b580165eded64862c7b5366972e3f9925122ef78fa608d31d1904997cb6e2201b5a8e565ac5dc8e9d2e20ee10ae5caa2d26769a2d2272dbf5fecbe2cc08350ca391a89e3eddada27d9606d859318094a448e4848f648b3a42f604a09fba0a2312826b990e13e6c570140cd8477f677e\", \n\
+ tag: \"ad3f5a395abb169df53bee12c8b03853\"\n\
+},\n\
+{ key: \"f8f6cbbe6caed1927e634d5c24e581fe\", \n\
+ iv: \"8c7314b7fc891748\", \n\
+ pt: \"3f656b9c18ee9d650d40d0a18337966596c1e1db4a9152403a8a61f39746a11fe522fdc947b4cebc7bcc4dcfe5ddd39f02aa42183906089986774032b06bef50511b611354ea0766a2d565496822336f02eda529db0b4ffbe7fe02b7d8a92e1a269522b1295987b872a76d0a365d17ee1bd4a0b1b31e36c4b269947af9c5157493f068c6\", \n\
+ adata: \"ecba59a2e28250d9119c14e9311e828850c81c4d87d59f0914ddfd28e69e4d00d47d00c46ce13be445c9763ea28b393144e5dc8e062011b3d10dc37c\", \n\
+ ct: \"9ecd536b047c3e11ca10284c57e1e11b715c50774b0aa394249f572ed9b795324cf0314c5d421ab05f5a5ef16ac0fc5b3caf6965e89a0f6efee68662b26be2fdc4f7c41101826e8bc0c0dfbc6f5e0b75c5a0659705aecdbb4c885ec5d4c53545306a651f0a10e3e0216543008672b4af57e98405d287a2065114e50382be514e63f233b9\", \n\
+ tag: \"56ed480069aaebc40694a43c7d530965\"\n\
+},\n\
+{ key: \"de4221704b18c245335d981ac1311ec8\", \n\
+ iv: \"1b1f883b65094bc7\", \n\
+ pt: \"b4d3ffd37211235ea0d81952d3e72d5ffd340ff082f5f02be7af4ffd0686e0\", \n\
+ adata: \"78e8cd1c80f891e6345b33695bf673f1ef439fc9\", \n\
+ ct: \"023081632b0307ad5af94a6bb136b4033fea764a3280cd045ef1022fcde37a\", \n\
+ tag: \"6c5709026114cf7c6fec5ab30b47f795\"\n\
+},\n\
+{ key: \"69d8425f96aa73526a55963bb9284be7\", \n\
+ iv: \"e3ebd61a21323e87\", \n\
+ pt: \"83d6b7b022f901a981e397f2461ee4874fb7\", \n\
+ adata: \"b7d2cec39db14df9ab226158ac1deb396735f92e0b9e701c1696e93cde2791e3bc31cdd45f8c32c35a431da4625ad5a5e9e0e7b2792442f377d57b714bdbb4ad7500368d6eb18bcd855cd5f987a666e3c200af569f40b1828925965c7ba9f39bcca5586e6036fa02037c9a4ab8cfcf6e0e6e78b41e78fba3dccc799514af8fecacdf9c7860e78befcd346aff67fedf00bc9e0d2191083f6257a98c99e33176da620b3a9c1abf8632a98bef\", \n\
+ ct: \"b71de8156dd0359e3dc09b2d4ecc39180b5d\", \n\
+ tag: \"9d4857ee02d03fb2ce239e709b889e34\"\n\
+},\n\
+{ key: \"f54a22586ae95c86273a943c35061d03\", \n\
+ iv: \"7aac80ea1834e8ba\", \n\
+ pt: \"f68e844d02ba23ebe645d23f47e1a366341c945f032622b859d865c67b9568b53f07a997a7a8ba80a95737ca24c0a34afaf7bbf812ac8547ba236fb07aab47a771f04cd7e01800d6d4b151f2c2f4812d406654325f6ef1909dab6c541720cd24f05d07a08d904b3923c290f8e4c2ab0b48c80fa98451b5533a4c8d2bbf85cce31e3a3186bff8\", \n\
+ adata: \"1f1a101d9e55a5af9fca0ef333c172679c395b2abcdbad91bd343225b11fc024f7c2af9b51960afb3eae896116389e34fbeede7d0032494d1f\", \n\
+ ct: \"aecbcc2dcefeff38541968f3be5486bf8ec7dd34ccbf04670f557d3a8e66b07a1a6721813ab6fcfe86022c029eea139595464dddcee1754ebdc1762f6e2685d00125de4ee074b41a9840985c63b6f2e8c8b6a664e372c8c0a11b96c876e5b36b443e82462354f6043e2db0346b71487ba102d7274984bd31aee15683ee45073cb9de5ce1770e\", \n\
+ tag: \"2e760ca999a0f73bd3a210d4e5933c86\"\n\
+},\n\
+{ key: \"c7eb4ab1b54464f6e5fa39ef195133d1\", \n\
+ iv: \"d24419968b58564b43a53c4f\", \n\
+ pt: \"5166c4abfa74c00ee50cbf0885a1cfe92e74dd1baa92c6bd4368c86d920558635c240ea822950ebcaf88a816d854b6d443ef89f51e40495c2dfe3e801303ef2dbcf261ab2d77e27db24d4660ee8c49492cad0bb8f97f4f84\", \n\
+ adata: \"734123a0ad72c51be1bfd7e26bcc\", \n\
+ ct: \"cb806cec05f0218ab35187ac998d10c5c4f20c46f239a6c3842088a5a326a55716eb932bce8d5de166c5c5434e6ae67f20b1aa70fbec421d54e0a6c998b3fbb957051ce0a2445c03e9f3b1c4ee14b801ab3cc3b2c73ee559\", \n\
+ tag: \"b3f34502f6096cbf954473b2712d34b0\"\n\
+},\n\
+{ key: \"a45cebf426dc5db3705b5cd16c99a4e6\", \n\
+ iv: \"e54145ab14300f7b00b26343\", \n\
+ pt: \"df759cce5025ef2f57e6039e6f1b0b2068cd\", \n\
+ adata: \"a1a01ff5789ba14b3c533bdc058cbfc12af582b45acb20a7db69b331eeefc99ba60814339b3ed3033eec327e0d8702b0e5690b651b170d91f207b98f15e8a4ff4a098bd77049fdab6e84ea150224448d95156abf73417a04a9c025bf07f0e564d893acc3106c2fb8a9c69ca97a1f3fe888663c46445c84681b627fad07673ee1\", \n\
+ ct: \"43b3025ce8d6f4c2fec5a2c558895900c345\", \n\
+ tag: \"2f6194747e2101715f56a8511ed9329a\"\n\
+},\n\
+{ key: \"3463dd04db726c5e4e13822c4ba42919\", \n\
+ iv: \"b6ce6234c705f688\", \n\
+ pt: \"56a1c8da63f793dce2479c1b6049546c94c07e58f87e8cff240930d95776b24b11270d677d101ce50d24396b7491e9e16a5d45180887200cd5ad5a2e94b78c7c40499a2648162ad4628834728cb4cd720b5e13fe33e700155b491f57ad50b09ad3a8c7c5f1f61b8cf3d6a107d7749cd542ebf144d0863e\", \n\
+ adata: \"7796f9384cd6b6e0a6c97399aef96a8fc61ea89aaaf29503d4f9ba599c03dd847108136bca53edbcf642ff5ffd3b\", \n\
+ ct: \"2dc80f2a2e5135a0625f20fc499ea5f7400061b73fdd95fecbb5a68e27ec2ded98642d9cf5e2059a20c26faf850fb245cd255ef28444b75d6a5a6db43693b748feee1a84e7494e236b48a9a18bdc3fb92885d46c9067cd7219bb189355c5d72f9811c4a7d9ebf9644f0ef3feda55b4cc6be1e9df55c80e\", \n\
+ tag: \"9130a20487d9e14bb49fefd369b3428e\"\n\
+},\n\
+{ key: \"54a69a863d46d03f9878dab933311a93\", \n\
+ iv: \"1579112bbfe63a8b679abaae\", \n\
+ pt: \"2177dd906ee276bcfc50bd97258c435e4116b8f7d1f897db889597df785d21d4f32dca0460bc6e05213d2c3cecb772b72c5c44b7b9b5fe31b2b7e8f30781013c9f5cade7bfbee85a1e9960043de3f115cacee2ae70fe31fdf7f7ac75ef957213afc4af12fa89792408dafe7840e98c137287248dc0f1128b22ac12beedb3e7375ba73fe8b32d0b2b\", \n\
+ adata: \"604496d7f8eaa98b867926ead89a82a2a8e793d40862a73320f4d4dcb5e26adff0af20807055a2a18b551a9a1014c9360664da71ad871a5aebfd17d76dc3806c3457eda20a9a0c7a5b\", \n\
+ ct: \"cdc9e648140d0f5d7f948f84535c537110743a2efbbff64f2a38e253179f0484d4c3014fa0b80b347b32adb42cfc49f2abec9b3735e519267f15b9ec85259140638e3a4bf9487179193d2f83b6c7bbd9157f07b5ed99785db270e12c29c33e2b9394bc9d568dadcb103975a3d16f9857a203d35a03f66d8fc6dbd0c4b1265345ea73a010fb867958\", \n\
+ tag: \"e9e35cb6be82e10b2f98af7b3564fdaa\"\n\
+},\n\
+{ key: \"2cfe7d4412f7a9666c18084f4cfdf0d3\", \n\
+ iv: \"8f4cc0e288bc58db\", \n\
+ pt: \"020aecb01bd7099ea8\", \n\
+ adata: \"5654867ba06cf6bebfbc06f53d402500d5d9ba79cc9367af060cadb201a289cc19fa79984938b89e0fea2fb4f9a12c4a002e5243340a590ee84e9e332683e7056f101a00fb1b7b0b75334fecee326958dfe4fe987bef7106a4d2416e76c76257448183460d03dbe8ceb5b7b4e956bbfe1ed3a80bd610a70fec4eb464f1a100c5283e\", \n\
+ ct: \"a6daa0d8bc454a99e7\", \n\
+ tag: \"312189bb9257303c0d32bea49ac16499\"\n\
+},\n\
+{ key: \"56083b212a32f76742d1d60b97df6a49\", \n\
+ iv: \"52af9e0ac64570c5\", \n\
+ pt: \"b6a5500f4bcff3d6fa07300d9dd154c202521fd183b0c5a993421d590787cea955f42232122050fdc19ef8920728238496862f87a2c03dfdfb6c9fe2acf746be6e8984daeebfa0ac81c5b1a9d3cdbefc1e3b8f5882f2cbfe49387cbe459ff36348ef1c105dda9b0f3c48d3c1414de42aa198f3feaa9447601729006fbd13e36c36e7\", \n\
+ adata: \"cdc716e7a52b50144e90497c960b5a5ff426d25005d3213de639b97560cb3546c9d34822fe0b9f8495b9e2\", \n\
+ ct: \"50d1608a5a5742fc2cbaf9bb1b1fb82db3a17f0c56d36835f848f58c083dd23baa7d0460b69880d6d41e15c0ae41e58994fb4532232495aaa29ab20d082be809af46d58ded3e80a2d4d767b62effc1684fcc8a8d3e0a3637079269a06b93b80c7a06f6aeaf961d1e8283422dc21d7bfdc9423be9f731ab4a5c0ea68092eaccdf6e8d\", \n\
+ tag: \"4edd34bfc542aa3303b81087f2848fe5\"\n\
+},\n\
+{ key: \"3a99eff9a9ba53cd56b45f6816f5ee65\", \n\
+ iv: \"c618c5a36655b3c9f7b643ee\", \n\
+ pt: \"eb4e7e5078a51be330e06bbcbc0aa96057266e66990f7fc2476ad6e015b1ec2473c1b8a56eb40fb1e69943bc17c0e2237659fdc2a688a71d21ee1e385ce97cbf4fcf095a96b82fe0b6723cb8482c7a617fe5bafcd917fd5c3257cb6aabf14b0f1c1c38eb349720121c3d6e3904614b772e4e8ce6f0d884b0420c285ee92937d28e6b562feac67dceafa4690d5368ee306490b078c3fd876e07bf2edc9618b39ecc2e243ef9f058f2b70cd2bee971ca69177398284455c9970c909a32\", \n\
+ adata: \"e699db74c197e7a8d738258316e60468d74cb31ca68c0267550a49d7f14f0510d854c58c3c3e8190f069ca7e00bce04c72cb97379c5d7c19bfb9e1b762bc9761c08837d1d71890df8aa32a849799c4f9c45833d55806eff81f43bf5ee1b0f92ef895ce3cc4e6a08d27b5615640babcb75c\", \n\
+ ct: \"580c3ef9e22ee73920cf466ff7161800614708148166da5c087191af91ba0b62de297db1a70bae06485a6b1d55f1b58eb7b27f69dc7cf646f91fd22532b6da9715f30ae5267f742fea388d9ead4ecdf3b448a7d0d1e679a57409a21dc80f0634f4863c2973972978a57cd6f687ee90e04a95d19d56d51d62ed590df486437b6e03562fc36db5a79e36611b6c024b1637f942348ff90c4a57ab7c22697b67a51d78fd2f2f31bddf5d8787420d1176efb605745c7af4b0f8fdfac747b9\", \n\
+ tag: \"9a3740461128c856957c6899eb232cb8\"\n\
+},\n\
+{ key: \"72442da9af40284e8439aacfe790122f\", \n\
+ iv: \"05817b55c986b03c\", \n\
+ pt: \"172b01a42b123d21c68fe784ba3aae7a73868a65418ec93b770e0dcb6e86be3881caca932725069825596f84b2f800f2e818097f0d90710544bbba784ca987a7c9039e7eb018bff19ff9e3d752fcdfc15d042f3066c5e4319f7a462894ae75eac84a1ae5c89023dd7edca81e78a93db77d8cf30490d21a642ddc941e49cd977caf542df912f94f4d8b16b552ba7a18cb40c57ca12c624da9e674eb174dea7ef39522001a4a20afaaadaf54867b896e65ab9e4221ebb708f7edc9fe601c\", \n\
+ adata: \"c3\", \n\
+ ct: \"6e30916e383885461016bf056138b12b0e310f0129af1f3e5174a19c63c53f7e4adfca2bbae7d013a6ff7cfae5eec93fa17b74b0610b3cc2a3c7c2b5d08ca50bb25bf3ab269c2643ab3115b8c680ff672ee45da79d97db64ca9da8514dbadc418a65a8835368d659def12caeba1611c8687640a4393d12677e5b32af94d5a631e608b6356fbb494b25cc3206192f95a5bf872ed8e3e5202e76d09a2e514808943e88b5b9b8b19360410410c2b7e718b12ae8bb0d67171e44413fd84cd9\", \n\
+ tag: \"1f003c6b66a267fe081db6d2b319d53a\"\n\
+},\n\
+{ key: \"88468e9f9ee8a7a1bd89904b7061d6ff\", \n\
+ iv: \"42386a36cb0ae5ce\", \n\
+ pt: \"06663023d951fa4c0021519bddc09fc3\", \n\
+ adata: \"793381603f0525b1d755a196d52f655ec197c76e2f4ff8820fd433c905f1e7b8eeda575aab995d58660ec94b8e997977656f8ba3009e95805cfb77c1456efabcd7ad3cd8edcb3d73e9742856b1cd\", \n\
+ ct: \"70fc54ed374c746bd82647b7999ba88f\", \n\
+ tag: \"8297768acc070b48940138eac775b691\"\n\
+},\n\
+{ key: \"c7c2bed70d1b9e1bed3f323dd7eb9180\", \n\
+ iv: \"e26dbbbcb2020b695c4d3cc4\", \n\
+ pt: \"d162b7f8f749c076f628eb1da24f1f3d0929a66c27450d0841465379a3f638fd92d25dd7cca98dd15f81c3808b26\", \n\
+ adata: \"ff324c5255dc91e6fe7b4066552443a08fb7f68186386bdd4a87b849bc1d026fa607f0d6ef110dde13c389c123a5afd4ad65547695108dfd0ddf70c742777b0f0fda892a4d958ce1fb8e881c04ccedf36f5843f758cd648b4e93c35b3d2fa162ea\", \n\
+ ct: \"ce2b0242c2b28da91c97c04ffe90656e0159730ed7ae3bc14a539da3048bf1b6aa283810d61ad25f27abb9527585\", \n\
+ tag: \"cbb57f9b439f734ea6f2cde1e0e13647\"\n\
+},\n\
+{ key: \"46302d723ebb9bbf9cde4bb0d0885fcb\", \n\
+ iv: \"28ac673c6ba6c865b453c456\", \n\
+ pt: \"d16b78bf28a112dc99f5b2f4bf71b83d59abfc5eedcb5569eee0be53cfc6cc6b64f1f32671e0a327f1109d86a84ff7971ea85c99d0d258318e679091b0d264548177\", \n\
+ adata: \"2e2ba88c7f06bd27e899082a9febda1c2f840c0360f92ae73b579401bf45b122ab3a803a8455c38bb6def8310d083bb569b8369d39bffcad225f921f4a283a6be4678e384e2c9875a97bcde7a79f661df0f18938dfbfc663ce0b887e0253869d7981038357880eab5c92c5a7e77f12c293cce7b2c63d4306de6fc4cf2471bdd577ce2a185c70605ada876f27c69799bba5b0f1132dbc1b990b44cdebc9a8022cb5a1297b79caab69aa\", \n\
+ ct: \"38ece109620abda5630a953b3d65d5858becf70a37f43f65b228c55d3d188c576509d093a8c076abb8e83941a12b263db31ce5ab13447d3409e54ea1299bc346ae3b\", \n\
+ tag: \"a8a5c0c1521996c6d21addd931670cfe\"\n\
+},\n\
+{ key: \"1f971b2de58743c422b9ef03d84c839d\", \n\
+ iv: \"9dd78c3f1de3ade6\", \n\
+ pt: \"878222570cf4267bbb8b673e08993da9f0c6d6d10a9e3e9f5621dfa96eaed27ef816256609cc0e8b3e44137478b4dec30dc515469a62fe4248d7dcec90b2a2dac70a7c140ee55e63a0195f9b5917cf9bc0563e30c5cf34f3c87d34c9b98bf0b6ca5a7b2985bdde710acf4b592461b09b8bfcc4c588ecc784667508ff9320461caf63044501bcb00d0753bae6477683c5bbfc33b03074a5aea517010166b805f812cdf016bc3f5d2ccb97a1d639cc2bcd574e66bc36920cd0dc17da9a9cbfe11831b45cde\", \n\
+ adata: \"31cddfc11d6b091f79457a955d177ec0094c2f67c66b3a244787d99691c51db289b0b91438bb0895bf7a3bd5e611f976904d979d8f8c39cc3e96fde497004276dbdc58360d20a22feed1a214f48683441a3f5d7a0ca6a30624ccafa1a73b24dc3a\", \n\
+ ct: \"2d70277120128720abc56e3fb7181e943614aea096bc81d587af9f98b15fc51ee127cbdde24292504cd24f2ce460af8ba987cc04a06374ccecf809e8426367ea49d754b28093df2d2816c1763e7cca67fbcf59e4ab1931588044bf4d53715fd371ea1758508807d4743a2c93c9645f0ba86b8ba649034986a701b8ca391a0018a0ec0e85bb6ce4e38c89c4642cedab9fb0949a41d7358114f1942fe8393f3b36aa7571f1437165037795fed0f34b992daadf2382a14d0e5bb96498b82a4e50728d06a812\", \n\
+ tag: \"cf1201b431b66bce798d855b046a10e8\"\n\
+},\n\
+{ key: \"a4ca4ecac7274e3943385e682a772e32\", \n\
+ iv: \"11d320cebfa3d98c62a6f1f0\", \n\
+ pt: \"16e668a83c4b14f7708168f449c0d60d4f55734cb43eacc81086b2f174783dcfc8955ad107e41ab10c7ecf67b7f72ed1eafb49d1a821ad053032cacc7ade2186254699130fc0955e781b278f10c37979e64fd2aa09ca215985f1ad7ef619652cbf68c20572a3ddab952da3e6767be71a5ae6e5bf4a8a50bd72eb29d38e794effdccd457079c4bf16093e76b2a0845a17cd14756accf8e6e7a32affdd825c8f77582299ec2319\", \n\
+ adata: \"428ba0dca87d1bfcf6da02da499af70a44ee0258028ce18a71da09c10844679c70ab24334dbfdb24a29436326c635b703dc33ee104d45e730f9a77fa6cf83c8d91dab348acddcedd8d3239660e1efa18fa0e1f9295\", \n\
+ ct: \"0fa6e1fdd78d4ac7c237dae6bc0dc0c74fe015eea8490befc0997eecdcccf9aa79fcdcda5121dd7ec04ec549381ff199c14f2ef621f3b3f74ea33d3a59c176f61a7d2371e6830798ed31588f8c8a2d3ff58e618ea31ac689963b4197f5cb1a4406c5f85743d6f563b7e8345628fd266cca0278b12574c87df7df1e5dc14cc846cff9cb1ef06e375a255769f87cf8b16eedb9df3c5e40189dd25e28ef3ed953e1cffc75dea546\", \n\
+ tag: \"4e205c83d9a038038ffdd56df8c78078\"\n\
+},\n\
+{ key: \"2f75a2eac20f7f0da9a85da1c7119f32\", \n\
+ iv: \"32669619ca37527e2dd92c90\", \n\
+ pt: \"0bb377b5919e5fcb\", \n\
+ adata: \"a8deb4664e9b8f473576d5bfb29b5e05211b5569176a7e09d626305523e4072f83e75b8ad0ac460cbf0985d22d6992b83fb9c0e50f17b1b7dda68949ace28e878b049d4ead069e435f6cd5889fab7830e3177634a8dc3064c032\", \n\
+ ct: \"eedd0bf662c62103\", \n\
+ tag: \"ccfa56696af85785a227608ae5772245\"\n\
+},\n\
+{ key: \"7cc2f0832fa59881d3f80b64d3e64343\", \n\
+ iv: \"3460d3382643c817\", \n\
+ pt: \"3a05fcad63b5e0ebec40ed55c27aeb3d107afb2991ddc17746ab889b08fb83cecdb06ec0d1902867576a22684b4bdbaa7461cd654034bb05811580a8c9e9aec384674769d2e15a29495db21a6e408ee87a52c8ca1790d9c39a332de7023ba93fb909a1797a62941f7bed25c4124da703bfc2317b159376c25f2199771b4a05331e3fb8966e018e06d1bc3013eca6cf351a76ac4cd7b4c0744ca523b542d8c0fdd947a6e75273122e6ef717c0ff5f4642b7c09688260c\", \n\
+ adata: \"34c562a1b7a9927c5d21726e21e2da817e29d95a325b4210c5b16969d97e6cb11b6886bf5ca3c89c9899d7cbb0f9bf3b4a5eb426d3ff9a80800fd92b614cc136fdd9f263b6bbea2ad033e1b6dd4821d82b4e011203652a81660580c2c1f265bd392d77513774b87fbd242cf278088b2a630d305ef2e054189b0092c10d96496706e23544dded732f1f3841b9e671434a\", \n\
+ ct: \"58680f21794dacdf568e218dbd8851b795779594568c696ffc130238686d35e603fb1ed0c066b5fd9ea625719ea85e2af2c1f4601cf84f4bd84c97f12752f105eeb0d48855409148288556a0e0c7d6a1d4a5da55c748389544c93a044018dfb61a065f04681c276129aa6d0f9d19d02dace1d952409a24b21c8ec208b4ef039f763ec5dd0f94aecd1ca668932d20d4214e5311ed9daf3eefe96f395d0f837a1281578f48ba596fbcec323dfd408d692c18e085f0c252\", \n\
+ tag: \"9162644fab9a2a06e2e931fa09db2c79\"\n\
+},\n\
+{ key: \"e51604b85c407043775394c8472db458\", \n\
+ iv: \"ae56d1d4233c825ba563b231\", \n\
+ pt: \"f75cb8ba148fd5c827048bdf63606df4903517a4eef79263e558d3eb191aa51c17fcec1cd8532bceb24606fea6e2416e38de86ead684bb783a4959602ca3cb9818598aa8620a7481135c04ef59776b93e423877f909f8c8f5f838a27510a977292d908c666280639f6a6977ef674b083a51b0b038feff8e6fb4cdf80e7479da0640e6c28308cb2041d4e7309f3202d2adcf85a146147cec95b7c3732bd579ed83b3a46f8cb738f192a3670e1eff369465b819b71b61bdd20c495dcc0dcef4009b92a\", \n\
+ adata: \"28a339848fbb4f\", \n\
+ ct: \"9029be5880936f25241ef6a86bca1e011de2faf42a740f62897ea51ddee22db211643c0f10053a6706569feee8889957fdbe8ff6ecae3dcd89a5fdbac3987b20b4833684b1b1400ab230bc2eabc1b0d5eb22102b4ed9db70f21bdb256fcb0de1fa69aac60615d73252dc2763f486fb9f2e4853e6e664c69e7065f36be16d096d9a1eff5291d2296f4c62340a2a2d769bd7efac3e47f36d90ec70c38177ce52e66c0dd25e929d77e85c827016665de2657773a4550224d8977e7a2defe49a0df180eb\", \n\
+ tag: \"0673c34ac0ec2822e445e558bfc034ac\"\n\
+},\n\
+{ key: \"b3362f692b9754bc42a191d9476b44a8\", \n\
+ iv: \"188f9898beb69022754cc62d\", \n\
+ pt: \"9845973a41f53e1af7a1205246c4bdef9acb130fb887832cdad88eb73c97dcb12939592f055678d88969f80333caad12921ac486fe4b13ac4f9eda9de3110c6e4c9656883dc055bc9ba5166a1014d8f52e4cd5f3ea386647e037335c12f9c636dcfd9447b2e067a56cf7ad15f9730394ad19591c5be42a97ee126c5c900ced75035076a71b304ff487c1d80e07ccdfdf80233b8f897e75c6d42d\", \n\
+ adata: \"71356fd0f762e7a9db752da97898b7af776e716c123dfeebe61e02bcba6e25f707a31b8b3cd77cebdcff669b716a33a29b7874910f12579567aeb69dd746a59957a433d2ce3a221a3b496cd4157431c957a4db5086238c206c7f9d516b30ae151e8030cd661714736ee246468913d43ae4c93a74834b9b11248186\", \n\
+ ct: \"ed2c6a13233dd425b7465dd4914f70e362415e9c1e07bb92ef8d18b676666fb14e110d493b5c633fdf169eaa86bc7bfbc7f01b0a3c705c7181a1450b462a081097456baabeca9dfb08ab8ec3d3900e851aa5c43902b2b44eefc6da8ae208292e119b7ea78caf3c4d2c6d9209eed6005412799ae340ec61bdcd2760b36528ba5e19487a1c5b6403665687d0863b70f61130d6b1a86d09a003c830\", \n\
+ tag: \"4ef009396ec40f6bfb20316167d5c82a\"\n\
+},\n\
+{ key: \"ee17f563ef83ff690e846d834d6d1f71\", \n\
+ iv: \"89fda696a7f03cdbf545990b\", \n\
+ pt: \"576a398174ce55c589a08a909babb40351a040ad8ce0c02641d01e6cb6ca0daeed34c019874fd5531a1dfda194f0c949d703e1eaafd529a4e1c421ab0b3c60f5545b21460fea13032a583af6e33d5449bff2dc5581ebce8bd2d5f7b31b03ab657d97806a78e4dc41b3a4a4472376747482d8b98039e9200285cc25280bab58eb230a2b8ad45a3c21f799f1d9f70cb9b191\", \n\
+ adata: \"105ceeed28efa59fa72d8c76f4f6f5686de7321abc108c88c1dc408fea9111e974f073617506e5cc95d4bb31fb15ebfba61ff01967c5a95f580a23e626364278e6676e5945e480faf7d39ef53195b2c3d3935eb90f21eeb3ba88b602fc35830b00ce85aded1ee6a5811e88bc587fca9222b96be464cbe903670a6bd072d3c832f1273fb0a13b300dd2813b99bd4e71d6bbcdbb2817f2cc58aa1a5e8ca6b5e09dc7205e121c5d2887fb8a616351d0a5e3ec6b3e77dea4bf7b510a8b7167ce253953e2a4d4\", \n\
+ ct: \"aa1442c466ab997d6309a987883935ab220603787b95de743bc378d5dd77b689537fa38442e9965bcef6ecc0bfba418b745c38b2d0a65583e1d94cf833fca3c571b141f4ed3da5e8715b84c83bfc9f69927c4403c9101067957ef0fcd446178e8c3d7062a1a2b71ab096644acdaeb091f70c26bd6cbd01a1869ca02c7e88b01c651924284519a92bd5f4b1f42fcfe6eac4\", \n\
+ tag: \"689a28ba6510db51ce80a454a23b8fdc\"\n\
+},\n\
+{ key: \"05c96071d0b8fc102a58b09fbb8eaca6\", \n\
+ iv: \"4241cfc3e289404c\", \n\
+ pt: \"1f76d5ca16f0815b5d37e44c4f46a5420399a5090c8d05103ea53aea524888c7462b6b9b981c29058f80805e925eb289bd3debd37c6bb3957908b16e16575c95d25feab289e312654abdff349c62b7e4cfb31b8193e72f8c77b3d393a1ca34dbd506bd63d66d5f65b1c582601e652df2\", \n\
+ adata: \"3dc8f509ffa5bc44e5d2d5a2b3aaa05360438e5f7521814719f3f91348f2a9c1237c3cbb84df72db0375d9507270d3b4eb133863d8d3eda7d78c3a95b4091854ecd4686bdef1662c33eeaaf7e0032ad94748fcfd2b57c812b30fbdabf04dccb1\", \n\
+ ct: \"27ea45067cd983463df8b043cd8b7ec60c61c881f2e63e704c681c6d5212ee5a14cc54242a0a92a02434481ac11d03112ab10c822847d02254c2c710b6782944d1439da6f690faf9f7ae4f4fab88f17639ccddcb4961beea3a7cec86ec025cc7c67779d6d51f7315b11b815485a635de\", \n\
+ tag: \"54e1020f379848fceb78c1181a5ced7e\"\n\
+},\n\
+{ key: \"9aabc2f212ee61a93495e5f1ffd4ac2d\", \n\
+ iv: \"748a9bffae76b9dc\", \n\
+ pt: \"b79db9b02809f96e0d5dbd3555d9\", \n\
+ adata: \"81a8966c700213a89fa5a0767fe92b2b014109c8a875dc2a294118312d30635e122ffec12e647eb72226213c6b00bb7ddae0a9537cb32b9d4fd4f140a03f926ad8d4749c65e8f03f411feb1166d320a33c7a525151ce1e660ebce4eee23e41013cb60c53936423ff977d01467f97cc7549a2708f4f4dbe69a76c372509bec05f17c4f85bc32aaa55cd6f691bccd310ecdcafd59737bbe6a3f6f9e1589cc91a37ef\", \n\
+ ct: \"4b2e2605dbb61997e6d8c9bbf644\", \n\
+ tag: \"47530f7d31f40535012f9b9986a9b4f6\"\n\
+},\n\
+{ key: \"c7bea8e457715875bb748313d5abc0d2\", \n\
+ iv: \"08297f69e9e2ed36\", \n\
+ pt: \"a321e845793837d9f683ba6d200a4e13459bb500d57299995656f5f7ccc7d6462ad94d6d0b41f41c2faf3f0f7ffb8ac6cd587b8c7520be3d1be4380d8d22b77b2619a7a50eeb1d6874c3210d2995e29cc647cf488e86f366c6fdf1ac88326099b9aace2ceeef996ec58cda0c8eab4686c48ec58f3f8fa59cc2\", \n\
+ adata: \"4f873616e5a73490b7770b9f877239bf4888491f70\", \n\
+ ct: \"db96a32bf50d1dafe112c4466412d9d9af56ce9e2e521d3d6f030f29ae55e604e90022ce17f1d7073e477a0be9001139471149696ab1638cc2f05f61e061f1ee0526eb89287c82ee88a2d7e66404991de75bfeedacf76f9bfadae7059aef226768465f551fca352a3d26f0712e84f539eae727f7b0d117fc27\", \n\
+ tag: \"03d3977af959c57618f6bb9f0dc77b4f\"\n\
+},\n\
+{ key: \"97ac7c697c691b753dc8de7addccfdc5\", \n\
+ iv: \"4d9ff8ed2b05d72cf4825f78\", \n\
+ pt: \"4354a0a6ec9d1873997f1181f7f3ac17e66c7569dc3eed300cce625f9e72a4a1fbf1fb56833907f2\", \n\
+ adata: \"14013d06908e54c907db64065c68418c39f37f47a4d594f8af475a95cf23589f6c18dd3a92b017bb0251dd\", \n\
+ ct: \"5c967809a58f3220d2b3df5b55be484251b25f38b187b46b0df128fef5a9344a9329441db7e7704c\", \n\
+ tag: \"3087e2bf1e8bb00eecae23b3f1adfe0e\"\n\
+},\n\
+{ key: \"d42821c95994031a03ef567e5317c8e1\", \n\
+ iv: \"96e7b48ddb2727929b52a3b4\", \n\
+ pt: \"bb80079902397adf\", \n\
+ adata: \"8967ec112adee2cc3c4a05bb7f879b58a1e55591e56e0d97d53f9c6891fa63836512a4fbd3366c3cbc887749cfcebf153023e699f22e806db2abac8ea5ec74394e95d5380a63b1bc9edb0159c46e0c8f2cc617d2c35b00d9e977d86de6c25093430c599d6ec0e4908b77713e3ed4998b15e9eb5f7d901be78e765788699a4b6f04128ec5e735067beb764d6c73dada445be53a85ff5c2b0840519b06f9726ea58ae18b33469d2a7f92797e456536d4ab3f91513da5\", \n\
+ ct: \"54a00015b82083b1\", \n\
+ tag: \"f1445a12a47668c85a1ace33b073beaa\"\n\
+},\n\
+{ key: \"64f0fa8d37731f49d06f3c0891bb83c7\", \n\
+ iv: \"fb60b737d87f97b65d92b5ee\", \n\
+ pt: \"9b221f5f8f486fb12c71b28c696b933069f5308259ceae3bb816b57970cd136eff8f51acee7732f8b8579d8e3cd481925998d29d5a3c85a9d50825afae6388dd74b51727c52d8aefe7a26e13f8cd9639114b4c1d5178d0b376bc9e8a6b6f30286decae5a45008073895e8b1d596bffbfc41efbb94d58cbaf8a38deb13f09681c293c5c9731aacbc15e8e8fc84426c81ef68e20118e9d9b34842c7f6718205ee7a8392ffecabd7c432a20ed\", \n\
+ adata: \"0a8830074d41cd83d8aee1fb8647dde571ec7b2cff8fa12f654f8664aebd19e486b216a98dbe40d799ac958e66e8550fc4801f3e940f\", \n\
+ ct: \"fcbe14aa1bc9c782eb4ebdeea127b0449a019d69a4799164737e5877ecbb35042ffe8856ec697ae35a46b0107dc60ec9d7237f09551077122deea1932db5728f3289f1ea7eaf810837db696fd3638f0ea8e4475ea728a1e67228e3f2990bab8a8dd73847c727a619639b3d5a4a3a0143eb2fcd0fe2c5b09fcc402c5fccf9e4826c1095bdaa156c2d8d697b2d2c4bffe584bd56ea08957d184c930046f894f5ba49111a2d5166c1a1ae71d1\", \n\
+ tag: \"e552cd3f853c4f8293bd898c3c42dbee\"\n\
+},\n\
+{ key: \"fbef1a09077f974549feccd155b1af6d\", \n\
+ iv: \"796f4d3b75007a06\", \n\
+ pt: \"97d547219f93bd197888ba589f3476648651fbf1329e3428d202e300b1874cf08f4537b39fdc06079924184cf1bd023d6874f30fabbe7f438df0d475b93b62cabde3842b09d353d0f7f5493df0df4bf2a9056ee5ea329544df2e8ee97ebdbf8a5fb2bace29eb2d6ded88a83aec487bdaf27958da3c6847eadd6f89d9a984542d4022e44845cab16e117094e7d494ccb8\", \n\
+ adata: \"1e95f5832f55e43e649433c7c2ff6d002ccffc2c68116f189f2d1b1a80b8c621dd27c386d132d01265c8045357362b6fea53e6e15b322de54d73b7e0195f0a163c99111ffcb4da3c85105aaaee6915f4490a6f233da1cd55e1beebd4b30f7f9fd12d5c49\", \n\
+ ct: \"e05bc43a7a1badd263f860acaf76cc95bbaebebad0d041c6ee26fd55a87c1612ad4a34742f53b56bb2b3d3044af62e96d3059735bb6a8a8df5b67951d19b174bf6eaf2d1d5ea8842d908e8789f500d2cf930d3bad6b279e24409f63e5ad0e951de6629230e88da680fc4205d3a6e1b51763ef657ffcb027d10a2433706701920ebe1fb0c711daf4f228eefd936cdade7\", \n\
+ tag: \"70b20dd9c6222a22705a2807a6f89211\"\n\
+},\n\
+{ key: \"58a7d1d373619ce1f41827f74b8bb3af\", \n\
+ iv: \"7aee1592298c6f9b4598ef2b\", \n\
+ pt: \"6218f35b03cdf93a308a8c71602fd9c492d9b37f6956b66c9ebab79acc3e3e90a5c9ed8df72c6d\", \n\
+ adata: \"98c8f63639ff126879e01d59153ba6b8f407471de2770a7c\", \n\
+ ct: \"de280d93c8121b4ca84064cca1bfc0d86ef01969a197185f6518bdcfbf16808e9caa7e511f5a0d\", \n\
+ tag: \"620d1107bc58c79b0f9537622c8cac2b\"\n\
+},\n\
+{ key: \"4335236d5e1d19f1fbb9bb8be521cac8\", \n\
+ iv: \"dae013a610f72172\", \n\
+ pt: \"8792aefc27085f9ce2fa4a40471312424239a315b0fb02bc1d5c0bb99adb095faca8cd78e493da0288729e9132c6072f2a722f409d8a1e6cd5a287d02d5391a9deb82bfa3b9de60627817f116b4f14d681af8fff3c913ab8979a6c157fd8305d961b44564c93eb352a546e2628347d8ed1713b121bd7e02103f9b2cccabcc7968ff92f5286a8a926079b63525e2a5fb90974306d04046cf63c22f4153a7915e77cce6f91cc5841\", \n\
+ adata: \"f9d70c0f383f5042c6d03e536d526639725bfdb607a751cc90aa4d447974336c0e99119468ef9036459879bfdab512247be1158e89d660c02119f78264392b69ec63e0af05f988f150e3315d4688b7184e050f906148dd3e828dd95780cb192a3e382514cdcb529af4a966462071ca1c3d2283be986ee1157a3ff2505b2d48\", \n\
+ ct: \"5d05edbbdd294ab0a76d32ea4ea089699bf596eff26f7c5d58b3f60bbe29e2ec5d120c90b68d08ebf94223b75e00b8dc63a256ca6766c9cb9c5b404002d968d4db00cb45e6a12d2ffc64185286f0743dc44b71eefcf4fe4c875be7b904aa8921ef4e423b0d5d5c948cbe54f15601d2959cf056a406eb8a246c2615259a67a8355098023fab6e38b24abae1f91b4bd5fe7b91972e587979cc8d72214fc99b8816db93bb1615a7b3\", \n\
+ tag: \"8e63f6246a22cb73579464b3ad5561dc\"\n\
+},\n\
+{ key: \"6b1d2bf68d96c16fe2e53a05d9f46f1c\", \n\
+ iv: \"c3362e6db7a2f5b3\", \n\
+ pt: \"b7260e1d4f3be58bee5877f87c388352a2bef24f5354705b43b819c29d59369c48ec0013c17567719f3aa8cda2\", \n\
+ adata: \"7570291955\", \n\
+ ct: \"8c0a6a3009f67fdf1695f916c2150a2d65cc097121f7d2962227a8ef2182745cb42ef8ba1be5f127ecf0e56f45\", \n\
+ tag: \"7fdcba51e2d65c6f25b8e4fe109d26cc\"\n\
+},\n\
+{ key: \"82e42b7d0ec82934bc38f2596b4ebc2b\", \n\
+ iv: \"3761a0d98cd8c561\", \n\
+ pt: \"911066e78208334d857de5c0715d3a266f4c24dcd02e904816c19e5074e849e9fae89cd9e19c71c9ef5643eb1cc71fb48bdfbd94cd52244f45db8d0d2f3ff7ed1761bc89313ed5b79ffafe463a989e55bfd17d92617914c5dcb7132d67ba73b018339682b9e8dc3f34c917bc7e18641971ff5dcb7021b142390128ed8b7434c19cc54655690dd7904f2d1e978e375eba923bc11dec5c7a4f6446f996694a663d5edfc28016e53d41b16c55cd8212a0ef5c71ea8cfe758f7da5e1ed799bace674958be6a0\", \n\
+ adata: \"695d42b3158e60364c7574f66a28b37a0f7156ad15a4e73f3d75fbc7b2cb16037300ac76731c1af2913a62020f3fcf330c009aab13daa86f7b1cc95bed328c5b35e047202991841162bcf47df09dbca7cc46213c3e92080c0bbff9594765b775eefee05153a4900b4942b0c275237351522e334ebfe7cb5056f5eb8c96c9d40db304cf5a1e11\", \n\
+ ct: \"9b842d10da79dcad0deefec9f65638d29c373b1579301f1e32ff93f639d835dbf0f2e7969e80fca17ef8dfb6d01213442deac1b12fdc4a3352c83fea0eb9bac7186c113444da32ac43c96968e947f91bcc5b27d470b2695cf0aa20f465c06fa6d7f20bd7f6f0f0ad495ead258fb4e440689d43b13a003d5e34fba24835ac84e1de0004bfd78f9735f29ded56a418a81f07bd617095e3a7cd01c13b1b9471eb1e4e5aff0472ca0b2d0633ca7d530f7ec2e2bbb551c2f48e11b36af0e52d5f84abd9964bad\", \n\
+ tag: \"c77ff4ac330464c14487ad495b242005\"\n\
+},\n\
+{ key: \"e6b712916162a498c79a468b41b67795\", \n\
+ iv: \"319862634c4704aa261441b4\", \n\
+ pt: \"974e2562330f95f955e90593da9823240179d0029f85cf3aa02e2013ab19918cbdb53763919bd397509e98927a5c30\", \n\
+ adata: \"522ee2c6b8b971346d43693f84dd0e5e9a4753728ebc24654a334c17783f3e725b4c045c\", \n\
+ ct: \"b924527f1dc844e65598f004edd57115593aec3778352d63400e0357a6ccebee507a6d5c04cdd9f2aa005ee08885fa\", \n\
+ tag: \"279c2ce6cb9444061a2519977734ed5e\"\n\
+},\n\
+{ key: \"6f01d2bd4646cc1c2c16c9fc5b8b1518\", \n\
+ iv: \"83578c5e5fa65bfff4a40a48\", \n\
+ pt: \"35edcdccf628889bc968b1fdf657dcd6a22900f35df60b8c901652a41800abef603ceb139f5bb512d1edafd7d996101b0995ebafa44a31819fe034fa62adac682b62f327b0ed8be0ec223268b1a8294a4c985066e1a53a579c3ae509b8325431897dbbfb9d9f9073e7d1bbc3deb746eb8b8654e4638635f8459f56a8d437ca657d0c0fe8e2e0088446e9c72f389158284cf0c67f2ae18fa80153a81b1dcce518f681f73f11a70b0612ba30\", \n\
+ adata: \"8d41723f53512cb9b70b0f05f80adfffd6af7e7ea8c9899b8dfceac16e90854f085e5f9fbd2614db09b8b3605efd2b539b7b7636afac7ca99c9feb50439cac2b80079e3068f2c342591af694fdaa72f03c0746457cafe32d0914226b415ec3f165c256ee84f9c8aba05541e02c016a61e8a69f540dc26aac0bd1ff005d129d1c45ec1ad0c649b9751a98\", \n\
+ ct: \"1e08ab6e564cb49bc45c1681e29c5b5b82f31d58107678e98563c3da81f3d3644c0f5c306849f8d66d1b6289da278199dabae071eea4cc8dae92d8747ae9d9eebcaa9c9bdbadb465935f4496c2e44c2a55d08ac45c4859fb9d509308e7ce9c41f241a37d7d1de6296313fdddb093085e7d57dc71ea0746da1c4458a72a8f17973bd4b3c0fad5af8ac74808d56033cc6bad5532de58b2bc507329d60e58f64376cd8e823760fdba2b34f366\", \n\
+ tag: \"b516492b36ea890344654dab2a77e7aa\"\n\
+},\n\
+{ key: \"3259d405961387fcb240df2adfcdfada\", \n\
+ iv: \"65061afee1c0a670\", \n\
+ pt: \"0a127355204e774dd26b6b2a41d8c99b4f10f362de2c45723a903fdfc8788f3140fa51b763a2a41c8f887d6b0ab78dda0ca69298e9ee6c6d1f69c5dbc216cd913d19b26947aa65cd4ad10f97c26c90\", \n\
+ adata: \"534fa49ca016ec289617e20f28e3223963ab05f6306a91b9dc8b2a2580f2626d16d1813b85c6dfe6d147013eb2a8b2eebcbcfbb286adb181ee979b44e5bf4e14f7fe2d34cf93c20858f9d10a46aa1b31d084863a4a690f326daed4999434f93b673b3ce1a6d63f6acf5ebd128d3190f8d4612feee0d8d478c6a27efb70a7f6e2de74a9670f6b158bffab752573d059f82f2b2cbcb8f6262866bf44de3386aea5c193f7a49fe8e9fff35106f0af35656c6c7760160aff8b9f84df8bf751e62726\", \n\
+ ct: \"3c44456a7a15fb545dadfe62bd827709b5f87d319ae591f077f27d1403469ae695f221a3950ca02ad12a141ca72c538621d1b0c5fc1af0c0356386a6e850b43253f184b5a2cde22a52f27f7c4a614b\", \n\
+ tag: \"729d38431ff852b935896f35bbe2f487\"\n\
+},\n\
+{ key: \"28380d9af8135caa124a9a60f436bd04\", \n\
+ iv: \"297710388674f3d1d31e1f90\", \n\
+ pt: \"7c6f37e77e5c4e6f50b3e76313f37959fcba3238deb17cad0a6eb7e089d335590f0852a4920f0e7582b6c7d9df530109\", \n\
+ adata: \"6c2271f64e95bdd7ee6388a3cda88e9580f8afbcdf92316f03980974c33d4ef169\", \n\
+ ct: \"00527945a89816fbd04d61d60562df7c8b0119e48533e54c1f094a17bb6ecec8c72620aed3fea85e8d1a7da43eee17bb\", \n\
+ tag: \"7e626a8c02c1519d2fd047ce78cb2a0a\"\n\
+},\n\
+{ key: \"b0c820bf6c9c66e7ae634c5b4f2c7a77\", \n\
+ iv: \"6dfeaa72688e055a879941b0\", \n\
+ pt: \"3b6df590d33fe193b70d6d536a28f7ded90f1ee162cb4597c246c4570635afdab24d3e6d0d6b6363e34cf7f52e40caeb9af1717ee77959ca093d503bd1d8ad174e8e19fa577a9d048d194ec665c1ff5d6333b453ecf7ddbe97380920b4bca54730fa70b5567a448081e77a019f5ef367395e\", \n\
+ adata: \"8db825837e3a48b02e6fe340bd34263260c35cf5c90fe3d6a179196ab4cfe0653d046d2bc272d7b8a537f5dc6687e49adcfb74172146d5ae218b7810d35b754a79d2fecfce97ff1d780020\", \n\
+ ct: \"d277b8b11f855e1c1570c251d0fefbf8f7f0e92f6274e360096d4e10cba707dc4ca8bed8b030498c84ee864d7446e2a434f300dbeb4947292d418bcc9b3b37140b0097e6a31359e87ab6418bf6409a187a5bcaadba576bdd4f57810d53c2c268d6e28cf1be634d23aff0e0eeaf9a9b3fbdcc\", \n\
+ tag: \"5ced1aa20f85ef7beb92e0a2fbd894da\"\n\
+},\n\
+{ key: \"e351a2cfe24048b84db3a9dbf8a9e210\", \n\
+ iv: \"2dc496a64b504b3eb1336f36\", \n\
+ pt: \"2ba4ce97462d63fa19767d0a6185fb0f520b54effdcc2a50bc590ebcbdbdf5051f6b8ea05618c2782688f861bf879ec62a5224e485ee7f0d9b3758d07e7488fc68deac5a8d41705eac2c4af2b29f8a0869d0885f670f5557a4e092f9f9e143a4e7fa397217362a176226a5e162d0bd58fbd84f5a\", \n\
+ adata: \"bb9ef1ea8c5a4d49625cd62e7b6a023507266dbc0134177165e643fce3cf94b11e1ccf57c93e87180c881a78513e4d96bed97be723c5c7b0a0026cf0ae3e5330fd7ef1df675ae68db202d3f318d012d95caa06a1dbc53e3dc381d81fa38745db4872df90bc7ea611db94da3a288476480460b2ca0bb95927941fd21cf95649c96f\", \n\
+ ct: \"60bb5d1c919b03e837aafd092bee6778cdff513b884a2ce02ff5937cc728a5887825c6672dec2a4fe99d1132f0ade30e05e734d51222005a1503b06c22bebdb358d6f50e3748556b6ade528f486e2e55e0fcdebeac66a9f47e92a1624ace7ca7a48fefaa7f4ec63d525905fc4cc42b555350f2a8\", \n\
+ tag: \"1c8a8602729a1417635525d1824af894\"\n\
+},\n\
+{ key: \"ed6e0c6859df2c22437dfe5f29ca13d6\", \n\
+ iv: \"0a984e7d762c148f\", \n\
+ pt: \"2affaccfc862d53f055d342f963968ed83490ff1695027947a5edd3fd5254a656e9a0cb25ff649abb15dbc36e544813ac3ee9caebc956ee4797b3e41d8c6711c3357564e8da389018c3ead00b8e6909b28316bf1b43b28a5c96f7afc237e048175efee57476f641155b182b58a426386\", \n\
+ adata: \"63b19259c3341c687f729674c9292c623759dad3772dbaf9fa63fe14ae71e7a078bffb2a6ce7b676b20db3\", \n\
+ ct: \"15cc17662cf6bf85026be8c35a3c2126bd3348a5ddc9dab1e61161d34c720cf135d6047c2aea09e239b17b0698b89a23fb311e33c3a0ca823fe6524169d7437d895f830223f3b57a8aa31527497d23d5a0dc22120ac3275a02d4230dd5b0ee82b75765dc967556ba15557dc7d2d65405\", \n\
+ tag: \"a086456f593f35c59abae22007cdfaa3\"\n\
+},\n\
+{ key: \"49b41cc55af0ca7683f8390996a18bd9\", \n\
+ iv: \"0742fa9ff8c42919\", \n\
+ pt: \"24926f0e34b27b69cfae8a94c4202c2d7cd494572053d20407aa4c9adb09a543d03365d9aeeed63017c196d84723b3483e\", \n\
+ adata: \"564b22b4088aa33acfb56a1800fee1abd1b19df0b33c09d145ad60e2d9d388c179c1b8a65e0cbeb3ecf911c48d29a7a057ac4bac14103f1b0998e23263a80dbeff1ee97e8342f9ab669a844dd99c4a6bf29ddd2de6f9\", \n\
+ ct: \"75e9831c7b750da97f71685d701a86ddd87ecd1a1617596e3dc3699c915065563841d0391a38b3a3f27fc6b2af25726b05\", \n\
+ tag: \"b305ffee2ca27776b47f0f3e87a8efa4\"\n\
+},\n\
+{ key: \"56086085d94abb43c25ba3df8b231e45\", \n\
+ iv: \"638815dab1cf272b\", \n\
+ pt: \"116032264cb37cc0e56c799e9adba8e1bd9a436a91a0c6a030a8d5ce9a39932ae5d9cdb90144ec74b830886155a5caf394da451efd1bfaade5a1a41d1b58bfb150463bbdeb8d7867eb7dc29152fe4f845637ac781fac9a11d80465e683f377f3e900898ee7e2f2023259ecacec2d906f1c0522f9618405a99b0e070f1742\", \n\
+ adata: \"53418cec36b061e4d44208e84d3359eb46f964feeca4006b30dea0c9641bd43a571ade8bf616e2c8d30bfd47956aa43d5fd85e1ee1a61ed228ce1abe15cea76f295519398c19eb30ba1118564ac0b67977120840ae02bd173756f8b0987056cfe5706b5cd33f89bfba529460d2dd37\", \n\
+ ct: \"ca45c9b54e159625b6bf63147b59e7fbdcb234604bfa1c019701209a3d4cedf9b5911e3da2999b7d29d0692b5bb93697fbe43dead7b781124280a7057c98bdb2710a935384894e1de46ec2ad3971b290cec46776039a1b8c7d41062037f1011fff15824b90e428ec93240ace9208acad002cb31f8fffe1958051a58eaee3\", \n\
+ tag: \"b6ccc32430b7e9dbbd402438c873af77\"\n\
+},\n\
+{ key: \"9eb3b5b76a95d7f419b1bf959e6aaca9\", \n\
+ iv: \"a82546d9cc56452a\", \n\
+ pt: \"f1ebe95e5c034c68e8c03e76cc146e99129b5f537d492705aa90259777645b2b5a9b30c8055040fd3cabc4551a84defdec64d0c8f5c7d65dca3734e7eb2e9090cbfc66fd69c097820bde4f1d47cdbe50135c175317140da3a95524358cf8f915b370d7767dc2249b31759e519723d808d0e17abaa3533c0a6cb48805cfdf6adb15b36819ee7688cbf382dfc8697b99811a84a002ad44942c6c65248b06b657debe8d8a529a30ad98ea\", \n\
+ adata: \"6ba46cc7c441a050889f355637f32d3bd729b9eb24124794d3ab8cb8719cba3271808134806246cc2bed59a09bf760b957bcf56b4addccf15f9b2759a0489d502ed801e37a16a696de1dee9671fa7f02b20045ffddfea24b60e7a482b340fb7252e629b7f21e046660539a47ab4fa4a223f6a1962dee2a7297e1cc3bf1a4d394c54899b64e54c70066e88eea93e952c99b5e399e22af658126e33fa915831280bf6d270fb440eb\", \n\
+ ct: \"9b77ad507642b3562de4cfe14c5e273a959682f6de0d0232f3bbd9d9dfbdc8a583dedb6a8df3cc23873911ed6213c2f5d20f6df069dc0fa0fd080e9b38dc6704ac9600d112b15b1e383dc16e66021b6421452394e8c68fad30bbe2129c696020deaac40dada16ef8f283e939f325bd49a1936ec3d5c4e95a1efdb1f99b7699d2352ccee0b02b8293f11b99435a6b03a5c548c5f3594c1e8f03dd592cba25a3a748afa460c28910a3fe\", \n\
+ tag: \"4dbf35ef45e059f4222798afecef1613\"\n\
+},\n\
+{ key: \"214c77f9397027bfddf70f02aaed3c84\", \n\
+ iv: \"25cc4c2226fb8479\", \n\
+ pt: \"19\", \n\
+ adata: \"97cfd9be0d6192a90b4bec413ee5f10926fcaa84bb5184f65ebc6dd9f68d5744a6599027c20a2572014f95019810d407b0806947bb662caa71b087f3c26db76386ce6b4f95861a6ac38a6d70f205f28be2f1d7bdeaa7003e8556bd93597cea17d183e7348d17e8bcc5447a0352c2297c4f049a656a4b9dd20e1bb9cc1995ab264f65d343c1e8ad7dd712f2e8580800ad052e18a74d9302ce2972920e7719b8b8517ef290fb003d6ab34a7e6ef8a237671fb41506d30f\", \n\
+ ct: \"1f\", \n\
+ tag: \"0d33df29d6e82037126f0f5682107a0a\"\n\
+},\n\
+{ key: \"2f1ab7cd7ce00379974cdef3d0d6f4e9\", \n\
+ iv: \"a19c2fcf243e759bcc76555f\", \n\
+ pt: \"d59a92fdf6dc8cd4e06daf34561175f88eb1ebe27e033fc4adaf3959c6b6d9bccd17084dbeabb232f9891013b217a1b363b45416b918cea2acbafaa165b5b1e2699785061980b2b28483e7a2d306a2c2fc6451d429f050df05654eade1911626b2d8cd49987a14347c75cbca877216c1b2105758e732f840312bb6a323adb35cb4e1026b0f497c971346db14937a417f2281fbbce4c39502912f1e3222\", \n\
+ adata: \"f51a8a24b778c639b683bb1ce5152e487beefbef8926bb9bcffb9c87fc3b8627d953a47eab20796042be45a4\", \n\
+ ct: \"364bc6825402315fb48e1116c81790207db28273b5df0a0371cb328fd20cb788e5294404e3be488e04e2b863b1d89e3f03563ecfe132370ddcc1793e5cc3129cc5b9b3695124a319b7fa2109ef7893a6a13832db7151d8a42be8f4a84dadaf21ffe78b319a2a226cd787245c201490dcb977d009128bc7f9f12535b1501905469c997f48c284dcc1d4eb5d50a82a8845dad47b9c4a97029472a3cd2c14\", \n\
+ tag: \"9ff71689044232967243b84d75418511\"\n\
+},\n\
+{ key: \"b16899777f70710824b1ca93626eb0c6\", \n\
+ iv: \"bdf479c264bd83a5b2690b46\", \n\
+ pt: \"16d66909feff71e9c68d903f6aee731cf60358c64bb84bf597ee5d0f2d9cf750e1c0adedc13233585ef0dfc63e2c7a4919a1718546f18edb216173654cfc82b3f0a06676e1a1d13be1316b7c52c2983f04f4e721f1da1ed1e55ab388bec58f4e2858d0ff86a652ee9bb515779b72189fd2f5d5ef86859ad16dca9538a3d80503701853571da2eff7cfdaa976de67eb81880c958b8a11a5465583a6423a772a25948a00877774dc0e25c6e36a05202ac3aafea2a439a5e3b266\", \n\
+ adata: \"c0a6c693310d659948a5e85b5c0f01fb830172592c8175499bd845955c19bb806e3175ccae0d86ecc92c71192153f9781c24574949604893429f94a1e1c9de5ae25c73a740ef\", \n\
+ ct: \"fe5c27b87098cdd76b14e702cda6ff5981152607e2a12eeb44a1383acb5a0b3cf9b6566393b2aee0c1c491fe7abfa31378f480535d9d8c528be2a49d540991892f64a26ea77ef839f247c95e2ec8cbe00937ed41ed0fb647fd233bffcf9ff00f11fe67fff4a120d91b6a2f1b6e965784ec055b0f4cf9b608364bbdfd12a21d040a152c38f2d3fc830eb44ef71188fdb14d1f66cc17420aec5b2d8fc226baa5834ea93108ab61fe1e75d19d99c0f9dadfc5efe737dcfbd189c0\", \n\
+ tag: \"ccb8fd717eecb916d97aae5753be246c\"\n\
+},\n\
+{ key: \"f7ee0e07492a8c4a8be1e12cae0b91da\", \n\
+ iv: \"cf241da11995034d\", \n\
+ pt: \"08ed679bef227afbf18aac7128c081afa2ac195b91f72ee867177c491d52d64895e1d9d0b2c60a95a1021017b22225979dc9a27e28bd7f903977f40b3563b1a6ec716ca4e8726823bf07b718848dbcc94cc462f61a3dd326ccab9384f83974de929f59fdde94d5ed50c441112a288f606ec96435c81ecc19d069ff3cb828be52b79519a40d415bc968547dde49c7cb66493d41294067046b6d5dda504a1dd077cd43e601971597be09\", \n\
+ adata: \"2deea367d1de13e6d10f0356ebff2ec75e83b69b7fbb8ec734f57dd2ebb23056408f961d0f3c8ebd52752b32\", \n\
+ ct: \"397130ef73ea171a5fff2a96cb1a9962dcbc7f50793b2fd47a89acfefa31c0f84e5127ecac1b7d322fb56743c76bb26ca28a9d8686b68b08708e2057ed588034e25b4a085224ad52aa0d47c6790618cacaf33a8cfbc8c9d1dbb161aa6195819e518936673bdce2dffba5d499f6f6579ce72b064cfc7d2334b6da9462944470901964003417495732efd8aa26154bdf18d59dee781f10bf4d02b957c86166f399222407da20a9f2fee6\", \n\
+ tag: \"fcd86e366d76af89443ea7c1cf888f25\"\n\
+},\n\
+{ key: \"66b88d9d51931afd1de53740caacfca3\", \n\
+ iv: \"1744edb8817a59c3\", \n\
+ pt: \"09e2ea94a0a6f249fb606142c8b7ff38ba85c1f5cd69f679f3c25905ba81af48bc96c19525d36af446dc5476eaa380ef48e46db99e10c3af79fac5805e47500150b312b93c1e6be528951a2588072d371ac9656f97bbf80c381cb5f675056ba01e359b35cf634497df8defa25d757ca5d24755957af2c51407fe525c331218af54f794dfdbda91ae3149704ab019727803dc4cc185522b53046f242350\", \n\
+ adata: \"55bcd0d2fbdd87eb7e11122a617765c32e348b68704748f8b5cc4e14fe3f0445725e9e3cb901120726b4e21a1ca434bde6ab4e87160b8050c7b97b0f5d0754cd0bb123b07c7942be2cdfaf68b57c\", \n\
+ ct: \"d3d3db116ecfebb1ae9143a59660e9b83078ba8be954065a57150aa2c340281dc21a892bf96910b912007dd5aeb3fc4d514a70e04f935b995fbfa49394afa0bb414347c4140292e9362e68a23d7815afc41750fb685ea9fc00b35f4bb574fbe9da01484c06f9e2f41cd176ee0f6f6ff3a252278e727dc3f25c84b7ba6ca44f0478b2934567d2659d20926166a8c5c4042a4473f583df036b529b42b919\", \n\
+ tag: \"09e7cfb4318aa0d903a5372ed441e407\"\n\
+},\n\
+{ key: \"c171095c02a8920344a5c2250a47fb20\", \n\
+ iv: \"85660ada6e6ff07469ce38dd\", \n\
+ pt: \"92efab4050ce71318d9959cc9a224e494782c2bf79c352f24249cecda32dc62b93602e6dc70931554e6687ba509be5e942dc71cea972bb2a22071e006bbd19cdf437961c308c6f4d821fc5c24486ea321d6cdd15cd6b58f5b9fd67\", \n\
+ adata: \"f9bea35fc8da22e943152fff69295f460d8ddec64d8a4ec515020a89cf7788eb7dce6214d060a831a8a2a59c20b4a5e395d61b0e8f12240c28cdc13c733432f38cf79b7a7d9155c21bbfa699ac52459675e9442f513304e134c86bb007655568c3029cd9cdffe2cdb68f7f3c6913553a0f4dc3ebcc1f9219872bff7b9656d5c604c251ac12f2150704a9835a0fc699f1807694439a3359e4ef55ef9a1182176e49111293ff16085333ab7fffeec2935491e9783540795eb90f2ed21aa70b70\", \n\
+ ct: \"faedb53116818662137131c628cf89c23f96350b4e0cade362cdd107add2b77a054f1d6a3c3e73a0ee3586356899fc83e377850fac248e9111a21bc065f426580014df221b1f4e03ea4974d3a309676c8a879d6d60f8a18795ec8d\", \n\
+ tag: \"9f4e41aa2d377932e0a213841c5e5c45\"\n\
+},\n\
+{ key: \"e6b943622396e84eccb55837e92a9125\", \n\
+ iv: \"654125cfd8be8497a21833d1\", \n\
+ pt: \"1adf6ea50d520c2b8880ca265c14e3800147ccceb0432d5cc577f039efe4bfc37253cd8752baeeb5647823808bea8d8c3e3e\", \n\
+ adata: \"6c022b4e0e7da6c0a1f1b24a1974a368297355ec3eef63f300eddccf62ea0cbdbb9c5165eee53b36ba46d823e83ccb762a1516b159871b11dddd10e397b72a1804b0a6fe736340925927937c3577f2007366f0277af7e70c8ca66deaed176504f3f2600e01e1c71cadba6dd1a62204268468341a1c8c3a5fd34674\", \n\
+ ct: \"4107e2121bd41cd0bf6fda43babf8e8ea2f04e345c11dbe91d8d8419dffd6a5128867db1c04128645d037cf7f489e557f40f\", \n\
+ tag: \"1ab2ddb6470aee2a8b70171951778345\"\n\
+},\n\
+{ key: \"7ee879a9689a67c470d15a1bc95555c2\", \n\
+ iv: \"2c5852c5f5d9f263d0ec7bfa\", \n\
+ pt: \"d83924940604d9ff37cb7414a6320dd6a351cde6dc265575bfe8d186c7ec81f1bffa3f25b74da3cc613e841980e55a28daef90cb8e7a4ac1659037968070cac89c1f7b90dfa0fc29aa1fe1a9d91fb8c44485c0e2f72be840f5f094211909160d\", \n\
+ adata: \"39b5b11e76970858343ec6cac4bdb320c96c07cbc4a4c143a6248302063b6a5355b0f7545a28f75c86ce3666afff003a434a36144f5b5449e40dedf4286b44adcf57d3b8dacc76e4afeb3ffb61eb0a13cab635e940d0a87da8dd22d8eb5bc6957cf458adfadd5b2919ac7b4315383884652484f080c193560a805b3a59e1dcfe698b6403ba21f7bfdbbd73d0590877f05641e19711f40013afdcf3acca09e85f42912a924b48f6068f91abe2521ddcaa00b9\", \n\
+ ct: \"675be59d47bccb07583c50c4a203389494bc198c448291c3777bdc90969e949a50654ea6938d6b665ac94e5d05c9a30908403013a769ec9ba2dbde403b22ff6baafa8e12cace79cd0458ecb2a3607982e796e23b73d364cf58d8bdceca56a117\", \n\
+ tag: \"66234a04abd6c9ca75827979e7200f97\"\n\
+},\n\
+{ key: \"cc44eef47db5ca846e6509a50229f98f\", \n\
+ iv: \"7e47850c6619e68fd0ae2b7a\", \n\
+ pt: \"d058aee3dbffda\", \n\
+ adata: \"4e9c\", \n\
+ ct: \"46b2103850b571\", \n\
+ tag: \"4dc7927170b350b129d2f8e2b6b372d1\"\n\
+},\n\
+{ key: \"c67dc1f325c541aae5ff5d2da0acb963\", \n\
+ iv: \"397b3b5e7ba76fa3\", \n\
+ pt: \"0d0c7f19f312a4ecc7c290f1b20667ca5693062e97bcfbf6ccbeb82a22626aeb0e2ec77f49230e84dd4e4f948e614041dd10837fc11f43be8fe92dcacfa8a6fd473c809e39\", \n\
+ adata: \"9f77b7c266d776665ce053bae278e21612e2b0cb8186f14727c138f76192b6f8a55dd85802c965b64c2e272e83e1628b1ee70c43593c5a29de81a73c\", \n\
+ ct: \"a8f40a4cca73c1a58fb908c8fbc043c4cccbabe5d1e9cada1398418c81b92b14e4d5842b3e5885666c49d7ba915c2ccec6ad0761294dac975765e410aacef3e9b826f1e3c9\", \n\
+ tag: \"a9961d67b77e8bae2eac1c464f7def42\"\n\
+},\n\
+{ key: \"036026a1688a28d5947c099e13bd6132\", \n\
+ iv: \"f3b8ce2ecea8fc5e48f19afa\", \n\
+ pt: \"21455f89c0be04f2\", \n\
+ adata: \"ff88c9cca4280b981d792d5c2f7d736e5665bc7ea3c063600088f560de0dfada328da77837e6f95e3f237eb16a728787484c99fa356fce04a35a1df28a82d8c6c37147488ec0607f579e288861bb0fd09e7a6c7971fdc0004033b275ca0b0e718ad01cd2f9ae2ddf832f46e6a336c7862a461593b0f8c5f1c043bdd364936dd689f678a45d3fb7fe80e1afb3a623ab79f2a9aa0c95f1b90ce8e59fe30a6c2d8f44726d20228a7e7a173bd0885ffa91e53aa5a37c339dd28078e0\", \n\
+ ct: \"025f89caad1d6f62\", \n\
+ tag: \"9caaf2ddd1ed7210cb33a26703ee4ea6\"\n\
+},\n\
+{ key: \"e4f2cac97dba36aaa61cb9f437cc39a0\", \n\
+ iv: \"8bb56ee87218201f\", \n\
+ pt: \"df24b79a8f037fd1eea345178c6d4387f6a5dc6fc703f4d0db9da7cfbe89bd14cdf9fc780ca067a7c9a9072ba1864ca67ed393e5dee00f64881149aac516e9da9af2304f3886d3dbc66b16b6a9997b8eec877071d73a6bdc77df1724e57b87f7e9885d0fcd380b252141e9\", \n\
+ adata: \"74d482577a66c26c4f5a12ffed259c3d36453eb145b133b1641ca00940a6ab1525869bbac0d394f5be0cf3\", \n\
+ ct: \"0981497c2ea26b4351f163551d8aedf9dafce9d6b8a2456c8d54b7a356517a979d656fdd6925a3e90c5bb32b36495e53474d3e37619cbfb97307dde913b5b5f2574c6a9c87ed5ff400da34df441ab3980feb2b8ac8de0f1400f404f49682f201ff9a007013fad6c98e1f82\", \n\
+ tag: \"12ebdf83bc9760f5c8e0591fe100bdf4\"\n\
+},\n\
+{ key: \"b208c36fd24cb5b0cfff40ace1d31cc4\", \n\
+ iv: \"2ced5a484e2452720425d00e\", \n\
+ pt: \"c04f39e630985828ae0fe41c0e1e71ef3f46c48b7e7b857e5be3282f41e60a34f7a54e1dd5af83890623638d0350e22de697584a2036a59b048e7cb78aa9039962\", \n\
+ adata: \"83dfc2cad217397d38c2cb35c73de44ea8143144f52a1035b11b5d308606af6427349bbb9bcc422e00e9f54e08f5c311f38d503f65032a82d41dfb8b869b77884ae7b279a1653645ee3db240ccc728810f38b52039c754020c17f2f5ec1b3695d098f627e213caa61a29f0e1e4a5bd7b79c8afc95a8defd9b636c92512cc8335\", \n\
+ ct: \"aa9ed3d883d82de971ba65af4e9a278b47cd7eb6c2652a3f7bd21545e2e5271db3ca2b9bfe78a99ed4917ec6194be2eddbe316706ab131f0f85c76164bfec4df2c\", \n\
+ tag: \"95358901e8bc60d9a6e3fc367269d62d\"\n\
+},\n\
+{ key: \"e58c212057b1cf232101eefde4ceaa3c\", \n\
+ iv: \"1a37e86e992aec0e\", \n\
+ pt: \"6b9e606dea575142530500fe7baf3b401858cbc1b2afe5885585f6c2a4f4d432cca762ddb814999233b5f4b962296d6a2ce78c27ba5bce906cf08ad3923fc972c7893603ea0be1f0e9394b53d6ecf5d9b69228c057f09a9dcb850c90a36fde62b8a104f32b80ca950de2c9a4fe2c7ea00f26aaa060fa2272a31e8e73a650db8271ee1be331354e58c7b0f5574d29ec8d66e8c6e7db6cfb154980af0fde480c827ec652b60f261d02411e509d3e3fd3e4e2c0a7997913188e02df85a5b1f887b4\", \n\
+ adata: \"fc9439b69228bf884e1b000ee7aaa6f6b838d007b63deb6fd449c76f5f2620b8cbc78fcadd009d95e3f9a7e378b0cb9aaf5a85d76fcddaab07112003f3e2aaa93f793fec88a93b84838521c2b8bf2dfc328da7b8e7e4f54da199d4\", \n\
+ ct: \"a268dd2f5a976d66a58e68e9949d13435acae13e57c1f57c69b300bec9663dbf9ea1b125c1701a91f7edf5700de4ba0778914b0cae00cbdc456d3635fde3eb2f74897b15c7f71bad2231030c9933a0ed5d940509a59563bd645f808cbeefeb8907ee182ac0cc08d4d450e572e79524849de0117b818cb1c8bb8156bc68a75045d72f29e45c0f7d574bf81c6dbb94d22ba3c686fa3f7e2d259ae4477e35766d65101302b14bbbbce11a476a25db7ccf36f70eac3772b1ade4a548c18cf2e850e5\", \n\
+ tag: \"af70a04e521f2f3be477099d16f8cd63\"\n\
+},\n\
+{ key: \"22f3a70f83863caf66903315fc11a542\", \n\
+ iv: \"8cafbce722503d6b88794eee\", \n\
+ pt: \"17e03e362301d9e56fa60bd47d5db6514fcea7832655ca165dc6817db270598512135c175d303f3341686e453604d0e95a2c28\", \n\
+ adata: \"1bdb52e350a51aa5a839ce3093225b6455ba3e75d1780f3dba026339749cbc0354c4009c34159c66b05a6c3ba1f5a3fea172536198d31e8f468a9f5a1ac7e2f731994c2a06d02e8b1fa7cd12bccab0b4069ac9fafe63ec0023515abeacf7adaff68851f9ee582bb23ee511fca301b3311a10a2645c2c75935b236e0839705b7dbaf5199935f3118c49173e3b25d4c9a54d9de419ae62\", \n\
+ ct: \"4e106a8373e2d7040e56287898036652e22fef2d405ffb99a8baa552e26af4b33f6e8156b7fb3c0a9c9123e84fc15e27f84e7f\", \n\
+ tag: \"5cb9d83af489d6e4a45c9a5e75e34172\"\n\
+},\n\
+{ key: \"c4ec1bbfe82d0bd7e564120db4720d4b\", \n\
+ iv: \"9c9572de68b6b3c056e70330\", \n\
+ pt: \"293b0147bd333924df6c89462baf46901c616da002\", \n\
+ adata: \"dd819ee2da93a2fb4b7ca1494935eea0dae6237954166e690d7865aefde2c9d403a2fd8b52228eef5a\", \n\
+ ct: \"6ab6e13a47390b3e8592b8356dad11a5a8f8bd6eaf\", \n\
+ tag: \"7270bfbae8c7456cb716a867b8d61b93\"\n\
+},\n\
+{ key: \"874b5268ccad31eec93231b898e48b9b\", \n\
+ iv: \"b7e68546871781d50f1591dc\", \n\
+ pt: \"560928c495f537fa2ef776307bb5d65a0c3443c558816ba6b1b01dc547cc7ab7fa5c13b7ff7285431434a49e52325f1e7d23d256c186a6d72d18e000edb743aa92fac4b228813a513aa8d9c4dcb0b9ffee0856b12fec375cb6550df5a9fa3b0966110a32148465a70260975f1e86b4896034bde6f0bf096aba0741915ba63d69d812157f4bb3fda21edf\", \n\
+ adata: \"104c0af78b51f0fdafa1e8f069bf9475358a4b7ddffc8ece864cff57c13096f5e1373713119a5ba7e042521a3e4695c1942f96918741eae1afa34a986fe926d756609b80578bfb20780bd5eb33c23cfb031a6e31870e7b4d3e00583dcd7c1625aa1aebbf7e9f9ef136637f6aec61c048ab5ece982feb57ad35293cd7bbc6cefcf223d56fbf55c406ed75122e150751384c663a6122e1dd80775012bc9a9114fdd3b902c004bdb07e7c3c10028f05a43a091659a68357241b586ac03c18ea888794\", \n\
+ ct: \"6f5cda4dfc2df975108cffa5bd76f3bc2c10387fe24a25256d9a7796919738d472c24e0fadf60c3587a021a7b6432bcaf3e2023edc67a8471a5846a9dd863166c310d888a4d77734fd06d19c61db8cb9c17658ffe6237142a2c448468772ecf4a4eddef6a52cba4fd60fe6607b4fceccfb4d8125702070eea661456cdca47beb95624919c042c2893f74\", \n\
+ tag: \"25192f85dcf67b22ab852232e198d953\"\n\
+},\n\
+{ key: \"07d71224dd1f2ef904b7e21296461a54\", \n\
+ iv: \"f9419f8213c866a8\", \n\
+ pt: \"feb9b5\", \n\
+ adata: \"5df33184ac200bd6d8cb7b9a0ab2773b4a58baae824e66\", \n\
+ ct: \"b1333c\", \n\
+ tag: \"c40d920061f0fd994b2c8bfea8697b17\"\n\
+},\n\
+{ key: \"09c60ca61c2fe841223d6cbb70a29770\", \n\
+ iv: \"908cfa427fe75837\", \n\
+ pt: \"32d68f929c499fe89f32aaef21487380b071fa29f03bf7a6ef3cece70630ee4a6b6ebd4a08c9b14e61da0be494e0fe1bb1f3df9d304348585c1d1214c4d4d0579151d2a7b13f714c58fc273fac3eb39e7ff111d6114e97834b557fc7565f49ceb6eb3e92e02c477650485895b0b21a862b124c5fcf9ccda5f7969ddbba7d0de9ac9ec5948dd70f38de9347386bbfd17139c4c5e35ff77d14ca5dd974e9804cef4ee6d1bdd62694049a10426f3e2b25d1016da1ef4efde8216e8f39\", \n\
+ adata: \"73bf68f2d1c3cc567bf4acab6f753e92046e05302a28a1fd3b340644232ad7e72073e0080da25f653793d26f8b5bc081ca290a154892ee23eb5fce00606996a7cfbda3eda69cb9a1cf7957268aca7df1f503978dae0a4230b6e904fa25204ddc1b45653d0f9c26cb1d8633829d40d46bc4cfc01b202f144acda5f8620c5a9a9b7fd8331af48431c1ed8fe17a82d3d4ae3451c5ff36c2e7909d7b75c2fe220ee2d7f992347fd9635186669ccc887af64a35d477\", \n\
+ ct: \"1074ecb28482e266824d2fccf9513cf0a1a814a00a178b3fa06d25e93f6263f0811d9c3361631400f3599eb76787847374e2e902de1a881711d07d7faf02396b80d6f76f2f0389186779ba0efbb10711752bb00025d2d2c978b944c732465a3838fc91a9dd45522377286dc6232d0eb48bc4b38937c23330348b56fb4104efaa02e1893fe9794fcc30f7fd1179289def6346eb48a0163db52aeb3317587e3fdba3cc9ba9421f1c96cce5a724aa228d0ae7a18b92c95c886cc47e24\", \n\
+ tag: \"fc7b89ce6b6fba630ea5d0aaaf73460d\"\n\
+},\n\
+{ key: \"5779fbd55bcba6ca6a21b26227ff3d53\", \n\
+ iv: \"d1b296a8e87624540758f89a\", \n\
+ pt: \"c92fe96fbc1f0bab69b4f55063fff765b1df8bd23ef96b15a3476685fe69b8d360275e75bd48\", \n\
+ adata: \"7a74c1faaacaf6ad9ac79d6cef643fbd0d17a8d2c14d7399591f79989b482baf7149373e5e854b1d4ca89cd19658c9b34982abb1fe28bcdb9f5ad101edd56117e92764d15c3040bae96167116f76a57b8e2f4fcc039c004d2921464cfb0467549761e70e32540b85a114dd938fb17c8219d177f79d93835eaf745f43fef38a7187457b\", \n\
+ ct: \"f0dde0e2c4528e5a711bee308a2615ef47494208295044ffad5b3b0a81c3b0067650ecba8a1f\", \n\
+ tag: \"0d67028bf5cd5268a66bedd224ff1221\"\n\
+},\n\
+{ key: \"144314178f1e77242ca73aee1a4dd0a3\", \n\
+ iv: \"c395baf4ba7f24f9992c9167\", \n\
+ pt: \"45e8980e51ece8cea598cc50197ed0f763b248b8d5af5fc9bd\", \n\
+ adata: \"31b16cca997e79dc6ad60723811757dc228674a3665ad8de4474fafe67d4cfda431785a3e8f3c60a5545299dea1ea929aaf7dfbdcb1855b1f4\", \n\
+ ct: \"2a7b2d6d0685966de6630f2a5838f438948053ce41ae222df3\", \n\
+ tag: \"3c3b3684f90ef8f87c6ee612c348137f\"\n\
+},\n\
+{ key: \"131b0c5af1deec9d40b4c77469aa26ad\", \n\
+ iv: \"f09cb708d878b521175f3f32\", \n\
+ pt: \"7a87d3b9e10adf0fd5e2e6559b3644ecba0de91036d722fec1b588a5aa2b9e2a8a460ba6f2a111d204282197265b984f82ddd6e677c247a3e509988f04cb748848bc260ccba56723d080a35cf8a5d2f2331813cf27783907bb2a9bc0da007219c23631278c0792dc51b2d3da1e5a4403524cb8311a1469af40384ddd489301c176ac\", \n\
+ adata: \"94f7de51f85d08dfaabfc95eba\", \n\
+ ct: \"2fe0941639a4babe1560b29b4748d3a43a4355b4ca39de53fa2902a7718f4d6ec98f8ea45e665a51de8cc989299eb0d304bfb1efa028fbea4e824bad16c198f97de4792e89baf488bbe5ab6729087a3bcc869c6c7f9a69a7e9fca18d882708077f4c5a65050c9ed54690bcc81c0aef2d36e506a1c052c15af9d99ec4e3da3a942085\", \n\
+ tag: \"f45645ea0b6827b4f65569c93b37aca3\"\n\
+},\n\
+{ key: \"13ec098eb2a4377b02d6ba59a7acf92d\", \n\
+ iv: \"ae9568775f74c4d0ace4676b\", \n\
+ pt: \"a0d073c59c54319968497a2f501de8d9da9abf1d6ea8d98bc3da4f3dd2ee042b41316072113c3a76b2e0904d88364b\", \n\
+ adata: \"842a35ed6c16545985\", \n\
+ ct: \"7315d70498679a066c04196414ea0402d8e480720929b822f278c536c30b118ee09226332c8d588e5b9336cebf7dd0\", \n\
+ tag: \"c4d56136dbecc954c26ae1328ea16066\"\n\
+},\n\
+{ key: \"3c26734cb53f14d6c7bc4e006c2352fc\", \n\
+ iv: \"50a098d2a0caaf87\", \n\
+ pt: \"2bdb537e2273709109ec0b0b081d55b7a74ea905dd5845d4e8176415c25b0540179f1cf5e4af5954c4010253be626c50baf825e39e969a41e2\", \n\
+ adata: \"b92efd\", \n\
+ ct: \"6e6b42db6c4fae9ae55f1c9d3c6328f3de5d962a6f7218244fddee4fa7fb685fd48cf216721bf3308fcf4703882fe73584c4daaefa96581686\", \n\
+ tag: \"c7c7e5438e431c04b84f5d0935f4944e\"\n\
+},\n\
+{ key: \"89436fc1de10290fe3c36e542bb09ae1\", \n\
+ iv: \"010063a7d6fd3f50eea7e15b\", \n\
+ pt: \"f1af9f5448145d644b6d0cbacdeeeaf059f0e564016cbfbe1cc3ec4d\", \n\
+ adata: \"c466ca2a6759d7ec55ba1b0549fa8f80c23460c26bcaf941609e2e46c5c1b50a5631256f9f3df0118cdf1c3c0e6ed317e0066e3499db266136144fa5e60b92442124a4d987197e4fb2378f3aec07978ae4d45b6c3144251f3ef072d82f73ea34407595e525d3b9f3ba5065bc3420a70527c6f9abea2439866572bba421533c79c2b3a0c0363c829b1f\", \n\
+ ct: \"5caba3dfc3339436621d5ef2d686672e191d6701ddd2887eaca95394\", \n\
+ tag: \"7522d5c02f1487adfb2a3ac33c7fb1d7\"\n\
+},\n\
+{ key: \"f787cec1efc3e2d5952cd39ad5cbbcee\", \n\
+ iv: \"17b837a8e7f22cd5\", \n\
+ pt: \"8ba6105143bb7f718af6f47968b66de3001ea50715bbec33392cc6d121c870cab98396dbd6ee21bf22\", \n\
+ adata: \"d2884409061709915f11b92a78c034211e0a6720c4e5c54ba59b8ec848dd9ae0587cfcfb764d68d4faf18769adfc53eff2e8604dbe183f4b97b39adbdc9aa9b675dcb3c989f38efe7f2fc7f0cf79cedde9743b3cd99331b7639b62b1c2284cdc9fb8276cc823e324672b88c70e6b70b8aebb6d846ecba149c3b0375b0f186c17f31808598342812440ca1806ea7f7d6208f017c807bae5ce54c9453a096b8e6649ec9020dbb4bda2cc35b72e9a7e27ffde4a5748b82b52c3a581f3e276c4548c6c05477e6b\", \n\
+ ct: \"14d150e9a374197fee476ae4b07cf8d29cc43a64631a4b0cd57d49dff7036b4041145a2e5028f4dbed\", \n\
+ tag: \"32deff7dfabc72a4a7dd9dd9b79f2ae0\"\n\
+},\n\
+{ key: \"7aa41072f3d8db1dc9a813b028266f58\", \n\
+ iv: \"941a08eb824baa86bd272085\", \n\
+ pt: \"a08dd734d50e0e041ae2362a7ec20d1dae659cfada1dcc67b3508c342e060b695075beed5bcd7ed3551fed221130ca2ac0e00fe5c3d853ac2a31ffba8e9f6b091f2abbce1a11d174d566a9296ab0343932089afbb036b3aec7c5b37ee5d8f0526d8cd663dcf2746d3113f49f36f596e611c29c8a7eefbd9bddf4911f1541961b42db2bab96dbe4d5e053732d3611752b6265d4eef699fe5b098c3c4ab8a9d2b54ae53039\", \n\
+ adata: \"f77c399cb6105bf55414283200f3b6742a5bd896cb32d936a3523b637da1d5161a0fcbacde61e3e3638fc589a9ff4e7ac2808a71bf11664f594b609bee3cea6365587e98361675c89bb5bf4967540eaf92839a85acb13f65cadeb6aeec54405897e3c34e48016f1d\", \n\
+ ct: \"ca79a82a4581535f7a8ea6f0e09dad3954d57f2a73a8ce027ac643a1d971f1eab853189a5c568804e7488b728c70abb2cf9a9410aad39f60c286c1d4d21c52e83c9a3c6383894c20495a2189934c8242239fe0a6174b12506de994ca7acb120e6c37f13ca3aada399f1d2fea3c8009f425910d24abcded0464775df04fb4bd70b2b3c7fe3e26855f8df9f0aeaff8e57eeffa7a311ecfeeba40cfd30a29b3cb8bab9faf96\", \n\
+ tag: \"e1b7744d569c7f813079acf8be4bdc2b\"\n\
+},\n\
+{ key: \"de32a70acb73b1ec80bedcb99781aac6\", \n\
+ iv: \"3a745439d96656029fe91ceb\", \n\
+ pt: \"7238c82d02507f00207948c08c8a41afa938fa2c8bf310e4826b094f74f9d3eca506d5d54ad07cc0d4740dc20f9a0a9e3e8e3fba3588887085c9b20b15d698ba2a1f5bcc46b94f88d8f6c4b0d595596c678f0d8d127f023f0be24bccd24441e0d277d5123177a1d588c5b918fd951d939fd9fa8f668cbc6699c7e0e6ccd2ca0a6f5e8c0b80463ceea4fb1704de566cb1319dd41b3758acfc6d951c53638f12b6dc67024f8a10a409b8e948\", \n\
+ adata: \"40474ba37fe9bef8e7cfc938ac46088d816620fb0140025ae1c953ef2049c792aafd04b849cf10766064337d3ffde7b3f421be6f7091b45add330ce24f5e8829e0f5724c042c8622ded84d7bc1de\", \n\
+ ct: \"eabf9e58761b5764a3e613a6d6d4fdc8c66adb5467dd4300ba897ea0f3cf94847564cc7a4cb2408c12e702ef719e1e7cf15c15113258c806676fea8dace631e98f0874b929937dba63f7035994f968eec2cede37cde78299bd6ba675175307116a3affac7e6b0a49c68e817c2abc6f19228c751685dae05f10635c58bc8ac49dcefd458edd9964fe714ee5030061470a114210df07895296d8c2f5d614b2e2bcdab69d96a10734a3715e09\", \n\
+ tag: \"656464ae0e0f5f41d0d714551a1fa0ec\"\n\
+},\n\
+{ key: \"cbb9bb90ecda8eed25c9df1d2aa62028\", \n\
+ iv: \"329dbb3ef0e9edb692dff445\", \n\
+ pt: \"ecc6e87db12af4049c239435c97fe408d34a54b3789be64dab7b0efe0509fd311cf885c67150c424c354998f5717bf49f841425f0107c3b3fe33337d36ceb543d41d563310\", \n\
+ adata: \"d06a4073112fbeb873721dfefe87ef257fb3d831bd87f2a0002b7f4d59b294faa8ac608dbab347b998db8f231e73d506c16fb77ad329f0cd06c680478b294dfcceb186f3799f10f31a91d5109cc23eb8dfa69d6a41ccb385889339d0e79b864897a61dbab0842c0077412d53c9872b6e3ea149b5243dddb9f2baf07f66e0\", \n\
+ ct: \"f7cbdca033b159f80d7c9cbcd9223076cbbe2b06267cc2fa0d4c1a870b58decac15340a644fba42bc33ed62139b6d9ff5bd22ad03aed1424c81e22edb97587ff105e040456\", \n\
+ tag: \"7da4c2934279eb8a2f0178083abd966c\"\n\
+},\n\
+{ key: \"4865ba8cad50b87d475e71e6a38cfb51\", \n\
+ iv: \"a749a76e6b96a72c46d426e1\", \n\
+ pt: \"b499b32c03b31e971c526a71bdd3fbdea045656e44691d25b13bb78a681bf0ad5da8d719fa4d476ffb26cba6759d4580a4388080a3c36770b0acb99f1b3bce2ca783ea5ed2dc8df11285fa9b2bbaed6338e641b183bbe06c09cfd16955e42f0d1f7f22590420b019a107076606a5f331dd2026aff7ba85f13a3f320227\", \n\
+ adata: \"7190659955d3e71281f1aa12e0afa58ca9417c051bac225a0cb5906b62b79dbba6e22fcda0\", \n\
+ ct: \"ca2e8f26ae9f10ee7f0df6b9e0070b1d9b374ad62caf17318c669e284829daec33554f3c43a9560e7add052f50248f01e22b478370765c2a9bc94ac2ce484b986faf6310556cb4beea4e3c0c651900a0f47797c3c3b933b45cdff3006c8a6599e0ed03fe521d4ed283c3e70bc1ed2e4e31be1fab5f27900023ef4e6f0b\", \n\
+ tag: \"f659d6b241d4b08f69754c842d74ee2d\"\n\
+},\n\
+{ key: \"1cf681c6e726a2c14510ed40ca948459\", \n\
+ iv: \"28864f2b075ef9f5183e9472\", \n\
+ pt: \"24101e0f5e085b7ccea6cd56c23c7ac3628257fe8a895a968d273b2e060b297ad1afc08b2cdf9e2027b966edbd7e8b014113645954192ecf943e7020e52b2691370fb5b0c99ed912e9fded4ff54de6a2981d0b3c803ed5f3cda5f9907941e737e4e796b54ee0251f491fc4e46cc4169e8d075ea9d2611782c0ed34b8d1926591b752968434a0ecb926b6e5bc0dc326a4e0a420ff5421b20174c0cc8d5b95296b7e0f0ad33dda1126d18d9613c0feeba5619a\", \n\
+ adata: \"cc8300e79509b7\", \n\
+ ct: \"ae51f109d86f971ee127f56b891a57f7e5e99e74959ece5fbfde7cff236ec08fa1adcf680da7da2a508e68c0a2d7632cb2bbc0d253d400c0b1cc2842dd27c5b1253c387ea24ce83648a131a7abe7ee51c433cc5baa583ee8c24397191bc5c4086b88d10ea1108ad92cdd0d9b1b10fcb9a868158f4f924ab726e6072c4ec4a4ead186eeb7eb18ee97c69a3784a6898a7e6505a49bd31e0f62181ad51a06bc3be2fb6e5f25cb2ab6bf50a3810617c5a45bf5d5\", \n\
+ tag: \"50869fa6bc13ea785b8005c533253696\"\n\
+},\n\
+{ key: \"c6c259442e5ebc7d63309ee9d38e21bf\", \n\
+ iv: \"c9a6dba311acb6d4d79c52bf\", \n\
+ pt: \"006b33d0584dfc1216e8cc4b1a2d59df3c1babaa0f6d9bd2\", \n\
+ adata: \"7fd4186ac1d4e063559b515b42408eaaec14cb444d0d42631f674ac03c384377897c0f8949ac60b2c9591d5f90a1f7b1be6b7bd7b15133b3b661c7b82d1622e5b69302f31c4992e676c28d14665d4716f49617b275c9f7ca121901b31da748f8c38a3e4dc3efe94863b6d193a8eac8510b8f393f36ce3296d627d4013a0413fcaa6c435d99cb63e081a4\", \n\
+ ct: \"8219d8ea1bd05e4cce67d42499015a06d1f99c4b061d6934\", \n\
+ tag: \"00179b9b1f983c16339fe805fa73afa7\"\n\
+},\n\
+{ key: \"8f29e9fa193d8d0e09beec4cbc191531\", \n\
+ iv: \"f103357f02c97c9190d6d717\", \n\
+ pt: \"4162a7db11e7326f9a5a2a8275f3c873f6f40261e356595f9046fda2654f045c06a03f59969991196d40b27e252fee2272f381be313f9a558924a76370698cdd572012c3bff867293e205d86d0c3c3a50ebbd32a6ff18ed8c895ff7573f0ac08baf7ec66b70fe9d2f73ef0c4b02021538d51116e90aea2629f1012c1143ce13061f192a3f21ed7b5c566c6b95165ee2adc159059a37650f449ed9255230d0518eeb383b40f2bd8a03f472474daf107f80069f08a6407e6960cd38b6bc4f34c3085c7a1adccb9\", \n\
+ adata: \"6a1b61004f961673aa501de87422ffaf4c6b58454c965de4ac707f7db940ddd4252041df1d011c0a6e999ba6c84aaf08ed103604947c6d4a8e5055296fe731db64a1ca4e9ee9655f0af0c451c785022a426472bee52b1bda675e0b04fd28f782a6db6e5479b4369e5fc003600b5fd1142225d505b7905727c75aa67d9d826eb464bc656f523939abce3570c23df3791127b4fa75a97d867ad5c5ebc3391e4a49e0f3c985\", \n\
+ ct: \"6cd03c30bce196b998c33d0a6b5a58370dc8568e057b852cb7a0dc4b4bb73fb5456c6a64889442865f8d6a4bfd991ef84322116d205c9cc58011f3cd2e5696e4c73a319b2470686633a035ee2ee7569804a3e8c78c037a2ec00c743f84c1f7a6dfc68a4d0088d74c87dc555707db5d96324fd7054197a6a3549e3808424e9653cc4ffb7b8fdfd0e1a0020f6066d1f8f0db5c5ee465135a9ee3fab9dd5f3d561ddb37a8a26ff45b2339f5a1065fd5a9cfdfd0860a0f0eae3808611e0a0d2561493c06e78870bd\", \n\
+ tag: \"6e9dbd485d7edfa5853ae9af1f952234\"\n\
+},\n\
+{ key: \"f308cf5155ae8b590f39c4ef86aaf260\", \n\
+ iv: \"09b165e4c8c85a0f\", \n\
+ pt: \"08dd4f657323779cc310dea30d42257e8464f62fd567b8eb7c295272c34a3b1efbcc45bd9e46da2d24d3ca757373dbf42d0e1df95489ccc2f84a54d5ae412c3f71990f0a89a7ed6b28f0daa5a1cda42ac52193308d2b41554faa8553843afc18d5fc79a35bfc0df1e4bc\", \n\
+ adata: \"1f7d125f51a77c8d55a9ef5b4037ad85aff885149796f979a8df868e9f85d0246b36989d45d68b6f999ac382e0ce097067ed34abd4cb88bdd99ef2f4a7389c9581dc288a92ac618e363bc4d559419b1c31c0666ac53fe781a197ae2bae5db5cc25ba811bbe0fd91f015045af9e56012ce1e5eff49eb716b0b49e86f491c0b35cbc11312cb51bb7997cc584d6f0665bb6570e30d77eed7e1c3493887b5419c5cea5dd5a2ef7c4c310fcc7da91d66953820d16b3\", \n\
+ ct: \"576c942e6bce13eb5c941de18cffd2ab027390e609c7c98f636e5464c33c1a3ed6d3b231c3c3c54001e59a639fcd04f7ae55763b6af26bece5e8ab1e904574f6655407625b1f50f34852802710908f09c522be81bca1af5bf8ccff90237ccbc27dd4fb9f37862ed002e0\", \n\
+ tag: \"adc3bdc1ce354865e925845d1b022b4a\"\n\
+},\n\
+{ key: \"46a2603fee154b7b6f818f22adf4aa62\", \n\
+ iv: \"206be00e2cb54cd569e30cf8\", \n\
+ pt: \"9063a159453ebcd53c8e1d6a4591f57e194a151567b4f02515028aed791ac52eb5a5fc2da88a2c464ae1a09f35b4d958a6c172f64334f1b9e769481433e90ae3a43581051161cc299d30dea36971b3975da780b74e7874a555d427a1d3d3de04523c9cd285256d5e1912d0729eb673571102d9a570256c5fc14a53bf754425033b6a85a2e28d7945f3706782f5ad4460f1732e3fce626deb6620699191208dead9f89e4e67114be9ed237c364657337063a297c34fe1d39a7f06\", \n\
+ adata: \"406d2909d90fb4da10f45f7909ee3100c3a55b7bfbb7fecf79653bf12bdd5ac801eed6e32404daaf537dda65fab7b0c75f5cfc15845c31d2ec878a36527697651d13d2c227391a27bcf91027c7dee40c89d0fa4f6900bf0597611393bdafdb875cc7d336be91db311ee078e3e196a040e08fb0f31e59aac9995a0161371497c9910da1324449e56d233b056ad11f2246fe24935bcccf088bbb602c986f67d8981120239c23f29758555b77d034fe4be8438606\", \n\
+ ct: \"da1e3b6ed80646b4a148eda56bee53c8f530bc23b201a63221d02059f0fed77cf60101eb93b77b3b98db9700480e393ae4a31c26ea0e969923bd87872a9443d8b9231554561f4fb1fe22f1f87fbbfc43e23917667ab4ba6d058667f8f337a7697954c6046808b51ee1279957ddc41b2883251415de31885dc072e6b7b8e8ebc31adf7b9469e47b4fa45329e2bba62c82a9c22e2e4f703bdffca9f5762f0d0047636283c8bb9c1b6ca86dcb5785b5a2094a11bc4224c422f14871\", \n\
+ tag: \"9c8ef9bba90bfe5fe4ee102d5a665e4f\"\n\
+},\n\
+{ key: \"aff4f78d5303c137047894dc09678c0b\", \n\
+ iv: \"aa2ac56a20005989\", \n\
+ pt: \"1bee0513fa3eea24c567611224c159eb244d84293dd640c482c6e5a284cc9c8590cf3e7aa8ca5f7aad2a41ab643267e9d4b55fb60ec833791d96a6e290d1c5a9a6c9ab15b2faec3b06c0794f3ad18ecf0a7cda0a754aaa5ea9b3b99ed35d7e6b3d4cb3ede18f1904ab837ce363ef35f6dc704e897ab725081acf8170d0dafcc091ed91c0d420649a25d78e3c092d884e7aab868262eed95f44\", \n\
+ adata: \"8c8afd3fcad6c510409f2af1eafac2896fd82387b0d25ca1459bc9116e857adb1d2e7b9c32e56da2adf181837a\", \n\
+ ct: \"25ec25ba49e03a6621056d898aceeeba8b2311dd45241d1feede4d6ceb55b408fca06b15b358e9e5d768488b9bc7a0865fe53fbded7ff731371d9b9f681b00dbba0c310b8d2423a695eefab816a0c9857c62f0e746ceb47afefee80269f29ac02192d316d9f0f658e23b795e1edde555c766c00fd50e71cf180989dceaa81fe46817d8de5b940e8e9821324bf15f6e8a1337fad502c534513d\", \n\
+ tag: \"cc65c5f3e7b414fda3649c5ab518967e\"\n\
+},\n\
+{ key: \"71c78a9540e7b4c918aad05938df7f2c\", \n\
+ iv: \"3dbc1e0813651123\", \n\
+ pt: \"11f7a03cd4872ecb9b11bb5d9f91fb3727ddee2e23f9721b6e9e6cf0962af13bcf15aa187d4f9865adb40cd55da38348cad15352988876bf9a053b4034b715c5e26e7d5a00422f0c96a4cb97122771579a82e5ee54a604d188011e12cdb0bc0fc4f845d511badf3df8611e76919ba66d64b3b0c203e0ad97d8f4fd659d607915cd0418f4d01812b18bf9606f19c85acf49f2bda0c7d4af731ada7bdb5e6ebda005d7b56963a53f03425d6467a25704f162bedb28cca16dbd3986cfcaf47dcbcd02b4e473c5b0\", \n\
+ adata: \"8248585c44576a027a73dc86a3a32a2f4a0cccd19b1d2e1febbc56f4530f73a87efd\", \n\
+ ct: \"754d879ccf4eddc0495a8664ea96723345c9988f7865fc2251226db204b0ce4ac48bbe2b2bc1f01b624a2ce6303c6502a22f057b9bff42c7c2f00e98ae81c6f9ca269287a400821be2c26d33d82c835d8f9bab9ab15e44ea51fde34a7d2df4a6835f430d9ac775478d9923e490aa8b8350948c404daadb201ae2ddfbd11b0be79d272c527f72467a1bca08ae44cb33a509a3e8063328ea4d503fc17d0948ebd8497c89388c82db6a02961c5a91f4d00989019f28f2f486221cd843f3f5d3641f200da7785d68\", \n\
+ tag: \"5c26a86e2b5501adc09058fcb76c7de4\"\n\
+},\n\
+{ key: \"5fef50b453d9979458296a8e14f9421f\", \n\
+ iv: \"ae8655ce63863c59\", \n\
+ pt: \"8671fcdf019368ed9ff057f98ade405e022b2cafd52874b0f3c398c0c6f055221bcd91684af99d39925df93eb4c2683c216118c50c71d0d3fd8fc5d88f70dfc17a3cd7d1d14a7ff4111c428c934b13227f558b6362bb2c33e418e38148e3d3\", \n\
+ adata: \"13453318f96eecdbf2a125c93c4cb2b605791327d6ce12ffc1fbe0b0cfd90b975f630dc0d929d3c5807f4e2b536e497120a13e4615f839f93e6ef618190a449f6158f29ad756154599b31cab8189d52e1ab3712667c45fae76e944cfe88755c9f5de2dee0a42a797f163331916396cdea57623d0a06ac96caaf3b2bb78ab\", \n\
+ ct: \"86146249e3d56e4366ac275261056361a31b88f0ba1b087e9754f7a96efad10d7bc384b57016f15bbc8cb084edbd2ea11c3f2e55529b81d87bcf5404e761430c80cc5859c644046bb97400b9ac1f354bf89fc0fc7f7b48ea9cf0dbe5805a58\", \n\
+ tag: \"ada6c51c661f977fe7214ee3a2089f1d\"\n\
+},\n\
+{ key: \"95ce64e7e869ce48ffafc47432ad8ba5\", \n\
+ iv: \"008e736144b4bb4ba3d3dedf\", \n\
+ pt: \"e364eb7a51a52536f8ae7901b3ac831547e93b78ad3ff55e3953d9ad27ff58fe1b5df271e952723b8a338bf6df7080f028\", \n\
+ adata: \"6c827627baf55acea369ef3bb063ec5fc0bfe97732b25e878dcf5781456952a606b540fff819ac6d2301f0f41720d56f48a6883ec4ecc4eef1c3e95262650eb6e9b1774e43362b32cc4ebd49360e0f32bd60569c3475cded0a003a887a6f30f6ae135fc9e2a2b595e5756f6b144da1d6b27212859803ec7d76497c6fd3e8883b0607259d875e15ff669b9d9f6bb86584d69916\", \n\
+ ct: \"b8160d11516628163679212dea4ee7cb9062ef19f4532ec727b92a9992270c829e7d588074d8e59d549bf146cb4cf32a4e\", \n\
+ tag: \"dfdc040ed89298bf34cd6af97ec23341\"\n\
+},\n\
+{ key: \"cf5c2a1b591f52df154dcb537c01c94b\", \n\
+ iv: \"c2ec0f845b85210d3c6fc53f\", \n\
+ pt: \"eb2f95f37934071e475068224143f0b77efa39f34ad8518304ad6a4c70304ddd639ca43f8a4df3099f933337228945da394c422b95a629a74ce47941457dabf1331ed734faae3a191e0decb63f69312d9322db\", \n\
+ adata: \"efcc772d6917ea817a2b35bf9072de745ed3170ea7857782ae4d453d347dc18a5d57448efa08e4565708772ce97ed2dee2336e40e2a1122614ea2d98376bb13d2d33c79d2ebec5b32177d749e5843635ede005cada385e5d8dd80f5825ad025ae71e9a0e3b1423a3031e91ec\", \n\
+ ct: \"2297da342198907bbc3fc6ef2ca966fed6671a947f5c078e77dc275fc48ad70a4bee27498081e4826341cd1094d2ac2a6f8cd8a56e3c9371b686b0e15160b6238ad67a739b6ad858803465234c97e050d0c5de\", \n\
+ tag: \"38a3f3f61e3b7019aa3fea5b3601cae9\"\n\
+},\n\
+{ key: \"643e1c3eafc2dba51a80c64c86fb8548\", \n\
+ iv: \"9eae420adae5cde4\", \n\
+ pt: \"fb8603aa54af\", \n\
+ adata: \"4bd34bfe6a7477e0123d42739b6b39b9117cce3f59cb602a3417e0a112d76f1fe2df483ba3de39dd5cd1c4c142d624e3fa071a8f2f48c3de4cd7ec883d0e92a35587871458d9dc310ac54d06edbd0f3ebd46f70761cb355b027a4acc91899d05f4039669cce2143a7207e08187ef794a2bacb2a997da50c69da7fd601395f5a782f39d4c10d77ba4624549a9fff522f3c0eebcbf3fef4f073d49ba5f09bd54ac20dd4861f48b2aa70e064abcbb8555731fc3facaec85744f427a127ea468560688c83a3fcf0b1d\", \n\
+ ct: \"82c87e892368\", \n\
+ tag: \"c6e2a477b1bfdf272cbd8885cc9d2b67\"\n\
+},\n\
+{ key: \"4996e2746e1c4adc44de5518bbf52736\", \n\
+ iv: \"6c7d231250a748d5\", \n\
+ pt: \"892a466d8203ea80e26b103391db48eb085331f143d65ae09f974b6f38f47d1873d30991539ebb86f637662d14da4c136adcf486635f36541dd28d5ddcbaeac5a047d4d398dafbcb129e3dad7d65c1f1c35ea95e6c11db365531389647a2488b4cd060cd192fc8202cb1c287623a6f8227bd468d3bf834d126cbec0cea527fd8c2be9d7de6008a8a160f\", \n\
+ adata: \"23950bdac62b4dabb535b1cdc4ab5c3c0b76a8fb58cb1ad97e32475b7eb4661968ea5066df0928592060d5b847096d9b54e3f2dd91fdaa56b044d53fce357456f3a8ebd3b555fa21567d25c0e8dd7cc8f346a038d89e953d5606fa1915bdb72c519ff4b7464f7543ce29211ecd5bca3d0008dc049b06bdbbf00142a49252e833c8482d7dc0db808031c6067f1bfb346e6f71d24ce6296e34f0b7a50c2b5ed7c95f8f83ad34d6394f1945e3573106f6aae53177a45f254f053bcd1efc3ed400aa9100ebce\", \n\
+ ct: \"9f085249e2569c2bec0b632446c3b020898b0f6118eb7b2e6cde695455baa6a5e06169be899533c90da6395454110b66be4179bff349e741d64f538e59b107ea70d92aca338be2c5227cf7144224963ba7c65b3716ce3b66dd92c5d761c6db0dfc852c0d27fee4bf690a68f4320417a3731f024b2286d649f61062d5117ba15545c6d706a3866cee1db8\", \n\
+ tag: \"b7efd06fdf69093f83f33ecab25f0dd4\"\n\
+},\n\
+{ key: \"f45f76204fd88e6a22c627cbf3335df4\", \n\
+ iv: \"85a098312ac4814e\", \n\
+ pt: \"3a753b99e214a489d2db128e16d56664dbe0c363a0215c96a52353a33a8b0273dc4512a803cc7ee07d629f3c13d06edbc4341917538be03f715a268b29c084fee461ea8e7ca09bfc56666ca743440f5c162e25857c65928432e57249fd08f7b52351ab1f\", \n\
+ adata: \"7148c1f85340dfdb7818e76b0ddc4df9125cd21bba16d08e54efc97a8a8c561da21b2d07f07382406ff21800d358f82d9321dfc4381af083a52536345cd4c16626e8a6306d5105dcbbd23511576a2cba9ac8eadb29e6164d43c52f4470b215261a7f667931cf85144844da19c3c549c8dc0036fd3f\", \n\
+ ct: \"57487f024cdf1d8b76fe3c8a4a005688cb92592e1c666b5e3c81f6af5c1843fecba0b313628ae5ba019b1f463fd866f41b8083698a5c3146bd585a629a9c24eab1e9d1640a40a75a11bf884ac2e0ff43465cf177c8e3afcadb121bd23e419b9f7d19b703\", \n\
+ tag: \"9531345054b6a79e9bc603bd135ecf33\"\n\
+},\n\
+{ key: \"f3519beccb44fd22e8f8f37dcf9327f3\", \n\
+ iv: \"df0ca172f2e3831f\", \n\
+ pt: \"42866d41c744860400b1d32f3b32b834957393eaec45e7d41c2011b9851f4a477a0000f37f7b021888d2ca4f148ffff8378946\", \n\
+ adata: \"03de0641802364bdd06aa431610a785612497de519\", \n\
+ ct: \"50575087068d2ba52e3001498465433e47e52005bcec74500e94464e613046801a81ae616d742b68bb1c5643168c3d5de247fa\", \n\
+ tag: \"1955098d5ed31d7aaa1a3c314c882de2\"\n\
+},\n\
+{ key: \"2895096e8b0aba691a65ecea89cf166c\", \n\
+ iv: \"f9d8b2d3b4ff276503492957\", \n\
+ pt: \"cc20254d514c96691fed9a187676ac68d0820d5770430b904b64fd88e5e0eef7a44554a34b0b3e7919a3e47c35283b29787305e764a12344e90faee332e5094273ca9c427d991d310ef4948d6b4a92552fe4b34e8a1babfb50188787fe7bd14a70aa8b87f9cc28010278e688cf64216c7469bb853f7de2f0ef78e02d0113b35a969079b362e0bd5c9e6ae9\", \n\
+ adata: \"12ac1b01604af901ad507705a51f694cb6fa3aa13eb7adcd3d854e07fed656f0c110c5e047d269a15ef7d9bdc6052b5e4120c9c6ae8c3e73f926927ed10b46d86c578a682a8f46bc504f036ac39b308d6c54cc5faa47dbb2494c12965a007cbf1c8f23ef53094ff42fa814cd47880e170f630546a3e087f9110dd8bbf36658186c9e311380ab26969d29380a0c59e6d44b5ab0f59b8ba37ba9d0bc31fafd4b771993d1bfa008db94ba060539dfd11a62933d2b9b771f5b2aa7\", \n\
+ ct: \"18fa6a7f4d1813f8df10253beffae895d62a5dc1422caae402c74596d77942e35d253a726b4583088357dd11e44f8c2409cef02b0cacdbff627a5a3c6ee4cbe4980ca41f41ce89d72ecde5b6338546a6a2bbd94ffc2f39b2b8cd0b190f6a76fb415a27fdf89454bdd75a27e367c1c551af8b541cb345066d70b678d833629323e1f11bfd9b195f1cb7d367\", \n\
+ tag: \"14b4f5e24c92f0d5483c6c82a73db872\"\n\
+},\n\
+{ key: \"eaf500246ff21b4536c764f8c817ef64\", \n\
+ iv: \"2f01f38857b041e5\", \n\
+ pt: \"ad6d2235a71b4941d1ab0a5cd7c43636cfd197c73d3591e7bc\", \n\
+ adata: \"0fa45fe098c719a66aa92dd5d15568f7f4f89794617caf52b505216da18a838d918ac4\", \n\
+ ct: \"5003f24a8c94e59460459e238721e8733b7fe13d432565bdf7\", \n\
+ tag: \"9946cfe8887d1a1bc055b0f6a65fa571\"\n\
+},\n\
+{ key: \"fdf60dbdb1f6ef2080fd078b0db4accc\", \n\
+ iv: \"e973f83e405f929f\", \n\
+ pt: \"0842a9ed76c189d8f672efaa118edee37843d0d5f20dcbbb07dfc38117a31e5d36aabe7c0651e1494d359c9005a72a59bd67ba3a28cf10268c37b7e6d93e01464a47caf5e29e7c2a836a134556637a4e5ab64895eb05cf212a70d16a01c174eed11e84e0557323fa1cc7e43994f024cce0ab0e9de8439f0d06793f24e98e6a99869f9fd71cff9e3fcbc6993989064432c04c63322835270e10d44d489d17c58bab09293580d7b32d87f95897e4547e82cc015b2b\", \n\
+ adata: \"f202b5709ed6c479a87dd54c7f4527d9c402cafbfc15ec1035ca\", \n\
+ ct: \"fd41b895cbf5ebebdeeb3805740711220a4f7d32d437bef2bc09aed907044147c717f58a9231bb164df96b691a067cec39c3820dfaf82bcaea67ec1811761fd24356bdecc6602d0951272850f997e5d4d1c2ba325b73b5a8259a40ec771275e0a1cb15bdacfb6a734195a372ac6554630b32423e567533af87a3333512244185bd60a08808862e7583148315befbe9a1b3dd5d726d4c2061c011a90837d66a6e3beb130ffdaec7bb0a48f5b37c8b71851e8e82c2\", \n\
+ tag: \"bca1771424fd910a5eb76b0665caa0f9\"\n\
+},\n\
+{ key: \"65abcf8d278914463fefce499a828712\", \n\
+ iv: \"afe969aa861e9a8852cbe8db\", \n\
+ pt: \"d20a3f304f283cab52043f06f6ddb84d25a691eccf3546ea57a773eb8147f12af776f1cc296e64b22001dfc1439f4efe6ab8c249c0b454d709bec42db6e91b59e5c92ee4259f353b12b840cd93920f0d7d03a5e330cf2dbab8187acdf9948eb9459261de95a3729f866c737b6c70637f814685\", \n\
+ adata: \"e232b0d83cc0fa3def2305758c4bd6e3a3475c8d326feebb57e6947fc6b7428fec7a551c437b10cdd66d7c6404b1fb0ed962ba0e0fb73d5e210334afb137ea8d402acd560a18d43b3bde64a6d0bba3553a641fc1\", \n\
+ ct: \"cde4023dd3f19a488e2539d1fc15f61281d7ae7057ea7ab68149d8dcf20013d1023fbe3b10c0003be404e54744cd1accddd322759315e62f3c6bd430c5a8926f3df79393084434893bafca567ffcbf218eda75c6fa92daefbbf7ff32dc6420c9ec7caa36af9a1e30f78bad2e7d3dca726bb175\", \n\
+ tag: \"7a0679757b5215f5776310b4520e981b\"\n\
+},\n\
+{ key: \"e396be15e70463e031b9b3837f63c24e\", \n\
+ iv: \"c65efce730517e2b\", \n\
+ pt: \"7f98d53e7b06e7dadc577e112e86f118c6dca6a44f96fdd383d0175e74e586abec30c9305dfc0e913f2a2ad135c35e032ae8dd97d2fea13ebcc9f0062ea7c6aae8075153d494d7cdc09570e559b44d787785d04b0338c117bc4dca5cd9d8862db8a6ba4371b05afe309c7b20b00466d7006e324af567057efe9cfc2ca1c9b9aeecd3a4\", \n\
+ adata: \"48a79be0a8df515f22d74f06f6db4d6df988cb27f534bd3501c68ec90356b435a01b618b30efc3635be33f14104ed9\", \n\
+ ct: \"313e45dc72854851608e37ede7ec58313af7ea9a2fb0610553027d2becc5bb5809baae8db703662c1c8ad1d6ce7370d044a6c2cf3b91aeee3927749e4ff9c451c908d0ef45798133e8f67d1c35e376975b9e7ce60c06f281c5388ff6d0e3d7ce8449777001d36692ce9dd66e84633eff769c561fec00c1aadf270d3547abe13475856e\", \n\
+ tag: \"79ce3fe93829fa5209a5f7bc81864a4f\"\n\
+},\n\
+{ key: \"6b328d5b4c037e458978936519719aa5\", \n\
+ iv: \"306150aef2a5c2fb\", \n\
+ pt: \"20e3d25214534500ddc0e696f4d46cd408586f1eed2287a2bf5c1e6f1482f0e178b24246d20f95db2a8d900a92e8ec36927cf9e10d6ec007108c189ce5a4a525e40a58758e7ff1429968ea0802b1e95100c21e1341b22c7f4f1af70fbce885e61240ce9ff192ea18681dc3ec0228bfb95b7dfc19964f7bbf01c4f3b61092494a25e28d896f8d6ed5a4b22c3ba9ec339e39d1b6d617990d\", \n\
+ adata: \"24a66f67e2318fffa4009dd25a66c25b52d1a59557075406c2637ff3da324820c9f3a4edb02ed8b8f9e6334e14661dd79897243f5a347d2dae2b55e0659f5cd5c42b5fc38e74cbbb640c30a358da67f45ded37ee0a9dafbb0eec9193ed72fa4b65bb90211557c789233f04f8086b02d0f0e6cd7ab09b3331ebec44bbc48a1c851b\", \n\
+ ct: \"e0104b0b72a6c88fb6fdbdf84836fff2b5c5ad71379c8a83f5fbfb18e074aa3e6a77c1e1c6cc45c5c8b52f476bdebea2339336511cfc119ec0be93aefee6c445a0bf8e063df3740358b60412c11911aa6e43ed60e2c335bc1c7f4266307958c56df8abb1a303369ca619cad2d9bb20c0970d86e02ac252dcdf79739619d5e4d582dba17eb49423ac5ef353f0c1f3adf62d85fdde76cc09\", \n\
+ tag: \"f436b5fd3831d98868f5079afda5b9ad\"\n\
+},\n\
+{ key: \"60742e794e716e16a2710d97b6c6b298\", \n\
+ iv: \"13334008939cc9ef\", \n\
+ pt: \"bb3db13ba007c749e1ae0f6be3a2580159da94803c891d179e03b85adcbf812f212942e10079d2ab6e442658fd20328fd38fd4bb003a77b25accdbbe2ebd04a74dbea2b5c5188485a923c4bc2df90eed6d401852774a3514b7e9e38ebfe227a6d0b512901f09052f4b96a20014c2ae0871b58e64e919e5ef48ddb5ac7dfdd04da6c01cb6ac631a29e5632f92161c747fc0c46d3a5a690ae17a34e57198\", \n\
+ adata: \"3ab8c4ffe0b4151cb3126137c32fa8f19b324f60847760a0bcf608b0bde4d515378e788a5cfab8d03d3019625712569363ea83cbe3f4f02c55f658a5b0d798ee3d0aa4e8b3a773f996af528a6049ef2373a37e74c9fa493922de28673e64dc407fbb3b0d6f722b81be\", \n\
+ ct: \"bb48c9b753cac393199be01ee1eb448b38ed233e87de76b0c3607d5478a3b35ffdad2e3eac0d6b2dd7e7ac838a2cd9512e92d26c7a9912ec76be0a1662c51939266b96c2d37198bbb69e9288832d89bad8e57ce5593e440e727efea2162ec212ae4392f9ed0639949ff97472a114df0e3c1c35cf9ec3a2596af3158f4ff90d5ccdf2523c9b5a671548c36af2cd81d04cd17bec0e8af756d7df7cb3877d\", \n\
+ tag: \"f16440d985f7fc23d9d8f2a399dfb014\"\n\
+},\n\
+{ key: \"2cfb116a7c37dc422d60e31256cf41ad\", \n\
+ iv: \"7c51c6905680102a\", \n\
+ pt: \"89b630824d92a5789372e56ce069a26e49d20015e7225522083fae6c895fa6f5ce95022efb24fbc292dadf9379a72227dc4281475092e544ec86d642762b056e56a31e5509aeff93d3425343ff138f20e19b632905a28405ae06ba7b33bc473d51969084f7968f6bb4acc44d9569fa0ca318\", \n\
+ adata: \"42fd73c68b88219b051055792249f8195a77d6c9ef2edeb68a5d13e3f75dfd4e35a40c4f2dcca20998e89f6d727a73cbac8999c735fd606c476e907500b88d4ff957293aae296dc4de33c614975ee629dcb4f59161b0f55bd13650022ed636effd81bf3171e7158a518accd45567c27ace39c2f43b3198cbcdc22d698540b8f95cf109082e813bd9a2cb2e82e952eef3edd585\", \n\
+ ct: \"587e5d14eb3b41783315e2c5f5810f1356e823359d8a38b6e1ce7ede38cf20411a8d4ea6b79f18ffd8ff2589c716fa0af07f19546d69e40379183f3aa18abadf1475649f41ddc1eb7b5050bcb4c9425c45dbede42917dd3981e007104da4d7746940f983033e2f0a2b7b9ce79af39775026c\", \n\
+ tag: \"90328757dba7fb334afffc947d460e35\"\n\
+},\n\
+{ key: \"5b89717aef11999f7b5b51f3ecf5f81b\", \n\
+ iv: \"a7b07878ef6d7108\", \n\
+ pt: \"cc839f69a5fb2dfd73d045e1d694f3b9cba42be58ef5bf392e60aaabf33ab76500ee8b0a6521855892d661a3d0360dd8fb24d834aed3c769590aab49277cd54feb90e0fca17fbcbc2473f21b3d5ae3d4260448725af26de316ca4f1972d7c45c31fb1285edbebc00f93beb258b24622833efd9ec6bcb722a7315a4f427cbabccfbd3f1a80f7c051c65bc90262cdfb2ecf94760\", \n\
+ adata: \"4cd85fbcaa427f41e29b0c68a14aaf8330fd3453fe3d47a689d2b8109ff715c1411696f41337589aa832eb277a3db38255d0cad07b1315b765ae0d76796605df6c44458b2af20bd883911abd0d7f013849fe1e76bce7ecd5a5f70ae3c763cb02f90f697a393643fc0d29f6e6c138d0a272dd52c6b03fbda13897a29da2308cc4b6cc5c851f2e1e4e31ba8b7ff411bcb33ad1f4660ef86210c89fb6715ad2\", \n\
+ ct: \"f58dcd3b50b264d84931876ad7c8571284134a0d9ac4078de66896f7b13b9e46a8c1f45740d5f641892d8470541f7db8a8e488bcd0679e5ca9c5414d2c05025acd7307e9671c79ff5711f6aed44331343bcf874d40ca1269002c734f893c781bd9417bba36b72c4c37cba0264d548381245458702c12b69aaab0221dcda45291e4eed31cec8b42adf1fa3b34703da05a27220a\", \n\
+ tag: \"f93fbe5052828c7b9e48781ffe92d57c\"\n\
+},\n\
+{ key: \"9d3c3a84b06f06ab10fe907679a698b1\", \n\
+ iv: \"3d1b9e1d14207200\", \n\
+ pt: \"8b8fd4e93a37c04e5a809831c7e3a5\", \n\
+ adata: \"d8c4af5c5cc701e5b93ab186ff8f6a\", \n\
+ ct: \"9c0223b70ac7d25353931fb2898cce\", \n\
+ tag: \"4cbad4452329353cf8b35c8c6984d39b\"\n\
+},\n\
+{ key: \"ce0a675a0830fc5ff4f7e2122ceb88d4\", \n\
+ iv: \"80e840a945a53b8dd4befd4d\", \n\
+ pt: \"e893eb54d36b6188cf7534d88443588477cc8f61387a5e06e7e7ac7a0c231ae9264a20ffad74c13eb8b6a7e45df608cca8a817f99a046b32af4828214d7f86e928e38808c4e474c50d83e0d4a5386ebff560c4be22\", \n\
+ adata: \"b9c6d4acb68b130e0d\", \n\
+ ct: \"1fe25baa1b3dd61a531092d5570c31718361aebafe0c8ea9177a45b4e0c82501c5b2cef0465a595ac91d7173d83d6a232a8c833cf5c9663853fce5776b87232ad450e2c791b5667a95e289be6a99e1cb2a7fe7ee33\", \n\
+ tag: \"534b3dcbb796611f085dd97303702737\"\n\
+},\n\
+{ key: \"1028455a0ef4730873be9b99b739b7be\", \n\
+ iv: \"3613d4aef6362304ad4c2114\", \n\
+ pt: \"c495b365b6d08d76d278898400a68081ce14c460db52eac73aa43003258a10d0207988d72ce28eeb87a217c8379716f802659e996213e848a4913fdd9c9f64a20a4879f325758fcbd5d988ff64c52bfa2f329aaf42b3e459b9e403202d9cab8e56d5e10c65cfc0b4588ab0b88cc120902cc96b045a05572d6ff7a1222bfa658c574e48c03c4d61ffbbb8f9\", \n\
+ adata: \"23716eab0f597cab24\", \n\
+ ct: \"510d7a56c559406682e110b3a538e12f959625aad912422b687d9e1da06ad1bd54bd0b25ea0e4ac058991e745d0348717713ec0a1eac022149715970fcb5273944c5529b5c41644cc4eacab84a7768ad8574c83c643ea97ba1dbbc9b4fa9cb0f221f8c4a4dc42e0cd8278b6ae0404e1b4d2371a813b9e215b6de9ecef27d8806e814ce59d9416a49a088ef\", \n\
+ tag: \"669fcf26d8f282035a9fc68ef5f8c98c\"\n\
+},\n\
+{ key: \"b1485437f28db00a1aa3f012757fbe1d\", \n\
+ iv: \"01da404d1dc568ff96f99de0\", \n\
+ pt: \"b7c17dccbef1d658354aaa984508d40b425b05b9718aaa576fe917bb44bb934dfa4eaa93d23e13b1d4629b909ab2c91340d868c36a8eee7e9676d78a5c618b2c10e7317d85c90bf6d8bc0f794fee2b90cb566bead71223a335be49c724e48eb29be82720\", \n\
+ adata: \"d2e336cbabc4e5af1cc1bf7830d76c533ab5e0c60b6f92c4ce38217b4a733c6987cabf4eef857766f2952fa5a6e41a0978bd9d7b6b77dd4002998dfc14179dc46bcdde36a50d001fcacc9e7195e3421facfb8b95113255a9712924ba15658a70fe6131060dea8467b0c95b4b9f98bb10ef73f8f471468e3bef10ef910857bc756c322e8c3fbdead84e7724709907cee467d8eb67fdad5e3fd8152a5a0bd4241a80c38a36b0bf\", \n\
+ ct: \"82edd4ec96c612bc05aacc9fdb22e89183cda6f97ad4a3651487fd567cd8f75e2a0c36756d277c930dea32b3f84f43a8280e622d982a48037cacc725a2f374f92c2f73431a41041841da9e59fd100fc91aec35fdffe9d25b1121d024abb88727d2e03ae7\", \n\
+ tag: \"0084e3966ac51471a9a82750de28d4be\"\n\
+},\n\
+{ key: \"93d63911bb701fa5d0bb35b5a282c232\", \n\
+ iv: \"249efdc45d49e026\", \n\
+ pt: \"ecd862e56c5bc5c4ace22f9281a837d196301789972c663d652a47789db48bc5d1d43be9f5068d2a9dfaee2dbc7f263505989bf341465873785371c5c0d3e96cbc5220b3120874dddb791fe926dc409027080535d27d79f7c69d0ef8f07b269be7ffed3e1292dc710115f5227954242d29e8bcb14f9f350bb4113678f287ce71022ac07fe7aefccd790acad30b26464e77ef0146b53f9a22\", \n\
+ adata: \"01037b67693c113bd76d6c2dadf2b2a8cf432172d217bfd0a24895d69a36e15f333f97cbb1b4990a987ae9a7a18860d4214703861f6ca79194f80cc377099de5556bc7307728a84604665f314ddc3abf13f79edb2facfb01e7735b124d077db23773402971\", \n\
+ ct: \"c289c5e727bcd7b35a0f1198066e5963b940fd2f60c50fe76ea2a2a863828e9b3c26c38e261af7f112708992a22409839db776d610a3f86ff82e5caef9a8b575570e6329c8e77a42fca06f2e94972d66bdbc8a7e83fcad636d0023ad6633e36607621bf21a0b2facd5648e7dfc0e52a389efdc34e024742ea6acb67e9343a33fe6cf0a242b63025b158753fbb41d902fae76f0210b294a1b\", \n\
+ tag: \"5749bbaf2c1a6964ab6e4bc33c4decb2\"\n\
+},\n\
+{ key: \"8b1c23d4487ad9e04e0b82f29413065c\", \n\
+ iv: \"187dfe87184164eb\", \n\
+ pt: \"fe88d0a86d9a0cf044d013dd723d784584919e497c1b5cb3db9934bac5f18168fc34586f4c339b59a25f3eca03f6fa67097d8f8caadbd1dcded09a622f42c76bfa197abc819d93d608a600a25b1dc74d11a0b7fde0b251b6f8f79ab1fffb57bd04572f2fc4f08c69d03ba959aeed16776c409d45514c100bcc9b2b3d28c62c6c20c912fa8a153c0f4aca318eb83793acc225dc3d30a94679a193\", \n\
+ adata: \"76fb12cdf8d8713e6032f5bc3c5c0ef99d86ceac7715de9c719bd3dc2af8c7a95afd8ae386a2aba62e848b974278ba3067a0fb3b62548e527978c9975e5590f2335919a407021bf3d0cf71e94f104b33aff056\", \n\
+ ct: \"a01f2fe1e3da87554e379985f56457f1438e9a6149ce85a1d0c54ad98911bc5af332851fb901d4f8fd0661e15815ccefdfd2521c41e9cc470f8beab73d8bb10d1f837002dd37a546a2302e82c82f933e7cc09bf4cdc5853a278ca4b51adcea81886afbc2e8b04fc4598edf3eb029ba41345ee87974fc6c51d2a75284bb33ce823c77a0482a8947c4f34577ffe5d753219abecb0433b807cc173d\", \n\
+ tag: \"0fd89918d9675622561716aa7db2a3ba\"\n\
+},\n\
+{ key: \"4f64fa0515c210fab01eef79708b0223\", \n\
+ iv: \"9e95c03be80f9516\", \n\
+ pt: \"13b0247092dec30756ca45b609140227b1a8f0b6e3f903648c0f6672be00512669543e5e4c3ebab4dbfc0ffb9e3e75768a45078dd62a1ee85ac7cb643462a7ad2b2e10b1b568f4119c4834686321a6487b1facea7bbe8ee8cc4c3d4a66cf6869f3\", \n\
+ adata: \"148c3ba91873be1c41fcb3d6238f3f79ffb23408f3d58994b5ce2cb00baee330b37b1bcda68af36a33ab96776f17c6470bc18f2dfb5389dc5c43ba9c94d34a4b1502d298d21fc1dbba3970d51353df3cd7e8\", \n\
+ ct: \"c41d21adab5c0a703e8dc2c3667e025184bda8949a46c61600631de77bada549a727aca31aa7633ba2aea777464b86be257c095b7ea65eb06171bae5b6c8f5972240f45babe8e9f37e02cfc8bd2b7c3611100aafbf4e75f470c37dcf515fa16827\", \n\
+ tag: \"71facd430635d6e0bd540ef09899c3d0\"\n\
+},\n\
+{ key: \"09f586bec5a78df0e395961c31e216d3\", \n\
+ iv: \"9e3cf71f488e3f3e\", \n\
+ pt: \"9a6e4a996884ff88d977365d7cdd6d2237fe5a0a6735aca5c631db0ca9ba3d44ee5604b7fa4028cd177c\", \n\
+ adata: \"5ff74320d26ccb1be7d6f217\", \n\
+ ct: \"2551b8db5ffd72a40d1232213c2b08785c18789cbd692f0fe8ed031e9cdbd2bbb28bad9234c4f37eb1d4\", \n\
+ tag: \"a82ed59ed3fdff96bd0b1a1ff198c108\"\n\
+},\n\
+{ key: \"117ad5cc6f6c88178c33c95aa197bf95\", \n\
+ iv: \"c1f2ab86564fd3d0\", \n\
+ pt: \"6409cc6b6be5a4ead662a82768bc157bd37ae405b656d2796a9b0858a187e7858693ff6bfd74bba614223067f3703960bf8e462bca3aca94f202309766fab249993718741796537051f6ded4e6afeed7379c5f2d636438645a312b40a7a071872b3e49738ff4676a9a55c428e011b4550f2a3e436a487d78aba84e0d329d6e616cd3c66b7e840e816590f6dab6efdb15ef4bcdc9d58ed137e84fc218a758ac26ebd23f02311b0ff604909124b06c6af8efabca5c\", \n\
+ adata: \"179a1fb712b2a454166dc9a4d31bf753f3ac4918e0c6f5935ad48c75a4539f3c5412f11610cb7f9189498dca0e63bc55babd1951bf5baec1799c8782bf74d31877473f07b5cc5c2cc9fea1b1b432f5cdc8191ce67ca398c710b8807214069acec46b88525f197d7b1c7d738c072efc7c05345601786469d830eeff76e70d1cab9374009631defb14b7833aa33a3163b19ef95fec3e9ee5a571e6e92f387c0225c0afc7d95eeec9b25ab4e1601b59\", \n\
+ ct: \"2c6b2b9827dc8ebef878eecb32d38a1387eea138ae4f8ca32ad3f65eabdaa4c9a6ffeec93520547c77cbfb0829d9835068bc62937637dca16874d4148334d77dbf97df09c1bfa45c89a8524aa117d54fce4f96c850ee143d3d45aea5e695556bd146be89a675a5e954bb94670b0b1e3f083ef874f9012b38ef59b6b0f091af57c80eac674416b664ca849461cbad9b945204d65ec4f84b5c842ea2108b4a47429541f2bc6c579191fd1cebf403c7051282699a6f\", \n\
+ tag: \"a1d31059007764ba7612f5cd61bff686\"\n\
+},\n\
+{ key: \"efb69b9c0d66f97039bdedca0beb9d40\", \n\
+ iv: \"ff1e1f28584043780ed259e7\", \n\
+ pt: \"deb104c8bc2a1325787fac9a1742b488845a2568e8a13f508fa1f1f53db5f6ed1eee595b3ede118edea10a64b762522dc534111d490818b777a1d4ed7d5427ce986d27de0677faf6ee2bee0ac8347219c3c465c80f50915f35d894bd359230deb34c01f5a78a0ccf7ca2883dc2c13fbb3c48d461d0984021b8b258bb13cd9429be2c63bc3112af895ec83fb73a66c282da5aab65e511906a20b4a4d845fbbe9f774ba976ee12\", \n\
+ adata: \"5c0b8f525fdde54e4a5e7ee4bcee14f1f072554e1022985c290155e685bee46c77688d6722a1a4833c6f9c6417ecd4fd59e53b90fcb143b6c392f849f6f0bffaea166d3ccd6943a1ce843efde8731e7eb042a1f01525a73bd7262ceb3c8a215575cb9aa94ca4823b8c305424ade82ac7e3d47145bb8a056370ed8b65\", \n\
+ ct: \"08ee1bcb59795ed2c83706a8b85f7614a938fdfeef83417364e49db9c348f53b150d5b8a95a827416e8b49657d659a7d3e7078148dfb77026c33bfcc8b1345d3e80a80755ed616532af3233a69bc10dd0d2e81fd0421defd3783434f2af901ed39eb318dc12c9fe251b8d53d37231b162861860661cd2f70e8ab2ed532356f282eaa261d450c71e1fb18a754cdf36861ec9188f8298d8b130eb0e6375daa691463e5a1dc51ba\", \n\
+ tag: \"95d8ca52d4c179aa225afaeab493d6f3\"\n\
+},\n\
+{ key: \"de0d4ac200753741b90cfc36b8966739\", \n\
+ iv: \"137b820537757e00edb8b60e\", \n\
+ pt: \"81c282e404665121d75db379\", \n\
+ adata: \"d55a46c088820fc02cec0fb0ad55a630ea02027d3d905a438292e407ed56d42eb639c6a9cf19a73148af3a83b96e0749d2efad3c6ae84a6286\", \n\
+ ct: \"7ba8cddb8c0dbff37f691c7c\", \n\
+ tag: \"22a25ec82c83eed9aac66e6959068cb3\"\n\
+},\n\
+{ key: \"f3308b6296f1de845d0f6d61bb5fdac3\", \n\
+ iv: \"54ada449d16e6958\", \n\
+ pt: \"74676b505d0a78f51553a55f2e0e609301468dc5c4247a926fa94f7a57f91fc6b883559ec8ea09\", \n\
+ adata: \"06417e060e3d2cef25614c2466052e7a91671ace201b94395b80278dc8dbfca9a753ed2a61b125926318bb0dc9c14bbfb0826220940f4a6076928c0f230dff1af816f1\", \n\
+ ct: \"48c4b6b7c948198e23c5212471c7c1fd6851472a48dd87db0ca607a4db191d8a66a6420e932c72\", \n\
+ tag: \"477fcda58b6d23f4fc5cf11c84fc16f5\"\n\
+},\n\
+{ key: \"34eb9b3f365fee6c063214c7ca4142a7\", \n\
+ iv: \"6869e447f6bce7a2\", \n\
+ pt: \"ea461fe865b21b06c92d9233024b5d18e29657b8fc26df26a4919afa2513f7da2dc657b40999a287262f771dae435a6575cf5eb9af059f011664fca77f29ea481277afac43c7a9532302a8fdeda201c80c37e113bb302efd0ff22a9706b5f73ad2995c877c9cb0dff27c9c1314e1fb8e4059e59d537cdd3fbf61a3c3fe5dbba55da2c5c9d15b94a649505ccee7f7dd3797226b98442a68ff4659ca7f68dfa349dd01fa05d9e8\", \n\
+ adata: \"a8f819ecb1c833d395bd8a5dfb3879faa66274a3bb34f933f0adbb4a3d9380e914f943f371464a12ae27d6d1c76aa6d3ec00ddf87ff67eee843c789c8a5bc004884a1fafc1240f82f310b224fc666f29daf14bc21adcd1d684be40817feb04485544c89668860598cb029f93e8efefee42a910c658f13034a0ebcb3265\", \n\
+ ct: \"f9d12c2e7165168effe9665d252a40fdd91b2f3bdddf0333bc33dd2b3ea5f77f58fb0b45f5c748ca6c05c9e0c25b2c5264e078d6b9675c52bc3cd8154a895868aa32215e96f3e4e9b0b92c6d9b4b395f66a001a6c9412febc6fec8c2e4264ee9055146faef8d6abcb55bb5a9e58f1010dd8f111289315dde7d13d48f559babeaa8a18bdf507d50b08c6d96da9b625904743b60e32a4270ce15b34634f26cb64e7a4d359be0a3\", \n\
+ tag: \"869754e3b84ae87ccdcd38cd28ab404d\"\n\
+},\n\
+{ key: \"b81dca1e7552ddeb535e590660a262b2\", \n\
+ iv: \"86331283eb68f6dd\", \n\
+ pt: \"d1f49a9c6c2848f6f2e6db2ad88ddbcbbd4a6e4a88db555ca2f3f85724c2f8771c0ba055669bae4d4f8ab1b416e46e2d65711c771fabd75e77c350d8234834d16cd7dc6c9b47da7d19da1b84616158c8d117a77447ccc47def7ee33962752841e68f848b37e3b4d7be613275fc51556f177c02041d54a95544a552e5e21a419b33070c244d98806d1187f43fb97f1b918e55e5b9698f14\", \n\
+ adata: \"c39b3bb6a7d81f4e00a9cc5fcea46239fd32d095ba8be72a5a3773b9610e467c16cce829df2188175b2a319a5ccd1672c12d67e2da79675b09058409fab2131ad468309d141696b8c730d4b9fd61d4d2ef7aa67533f6dd431ccfb1cd35addabd7e7bac2fbefcf3c9a2de034146945537e63ef09b4da5c18ad491aca4f06b1ccea3f3305b17894a8c556c100a93\", \n\
+ ct: \"7e03d2e5ce7eec2165eca50d7f2ffda49ea71c9badf02d2687ecc3aa9473f3f2ce744439da5a2ccc601c7b1d9557e21ef4c7aaa6a6bad2e92ada2fad42bd70e55c86b031495be5c9ef6c2f4d3853c834ba26c45f64629cebcb8da004468c4b974c0af520d60b8d8fb651977b22bcdd9449a8a51cce892eeb9e12e20c7b2206346fdbe447dbd44f230daa0e05210939df2b2918dd6b3253\", \n\
+ tag: \"2189ba3a4d5da02b908135bd09a9a515\"\n\
+},\n\
+{ key: \"55de0f63ed4d3a15b4fa823f60d07635\", \n\
+ iv: \"f3c8bad76c0b1993e3065e29\", \n\
+ pt: \"ccb2f47451999913bc33fb5bcd6f308ac08a0cfb4df2a5779adc95907e41d45e3e8a3fdce8dc632543c24b6cfa61d2c09e570e9ae0648122a0a023ba2fc3f0bcd2080d1191\", \n\
+ adata: \"584e9599f427c165d3621521b44e0b34ec336c9824925dbc1fae99d017fd436436f9108ced13519da5f598483f359291f9d54f9ee94abde328fd4a5bfa2a290c3316e1dd18d885c1256503f8c0a2279c4b8e32ed815b9efd398d5d9e7243f0826b46574c33d78d0ddee0c9d2b9512a9343a0c194fafb2ea4ad14fd7dfa11fd2843948a\", \n\
+ ct: \"52470cd3d9d13e0e556b433e40848c28db4d0a5523fc6eba17ac0eb8222062165986d2f0d80e812f87214cb742b3eb58b38dd6ee45d90cf4eecf2cc92414c138d843169172\", \n\
+ tag: \"f1033f42ef48722d2b6c9334b3ffff54\"\n\
+},\n\
+{ key: \"351dd7bff7d0b4e2d515a5b6e415b886\", \n\
+ iv: \"43ae526f1d1ebd5f\", \n\
+ pt: \"31cf845d126cfda5e454c0cd0b\", \n\
+ adata: \"45caf4fb15ab2a9dee09cb7e769f97550b3fd84cbecab316181813f4f1ad8e5903691283d8cee9dde15964eed6af1ca0d265ab94dc696924ca6b88e57faaf70f5f748d54d84166240b609dd48707b6d4b3f962c09b5dcf4002ac5107cd036018fe707cbe8e68718a66b25c134851c5df78\", \n\
+ ct: \"c79de0c498618e40f868cc6171\", \n\
+ tag: \"5cfe186ab34a11277dd45962b6740173\"\n\
+},\n\
+{ key: \"fc327dbe68217d09c1d75fe132ace8f3\", \n\
+ iv: \"22e01ae24fb70157cd64ce5c\", \n\
+ pt: \"db07544a6bbd3b2d0acc8e35748876d3dfa2653a616e12e22ce6fd7efbda2eeef8eefa580483ab2968b71dee4419b9960393aaf12c907546af4408a8a3f26108c48c81a6de020a2e26f82d00c1ae0d0aff17283ab6dabedfe6471e73255dd1b175b879ccc50667e2f42d029700c2\", \n\
+ adata: \"5d6332fab9b6dd676f51adc6760f833c9f9ddefd8fcdba28cc9b2199fd00c8033499908d78f7ce25b3e030054f98b67199c3423e38c9caa7\", \n\
+ ct: \"99e92f980a4a24a61c1010fad298c79246662193b50017eecc208fe27554e3d015e06673c5c69564e7f21ccb67e86a0270fe39a56865b8e02580489ab958193c88630131680dd307bbd2d3da40eaa72bbce39406807afa60469fbec557136f8b46588ce57d61e9fc00622cccde69\", \n\
+ tag: \"7ebcc5fc3932dcf5c3889c075688ce68\"\n\
+},\n\
+{ key: \"f26228bb88d390a868914127783e20aa\", \n\
+ iv: \"f288796d3821999d\", \n\
+ pt: \"072f751d7b32b054d1068e47be52d57d12f2ec3a4158a62159c6351a4a64651f374b5dc6eb8435a6c0070ecd8d84f209ed014812e8da0d5e778d741821fe01cd8fda81490771701e24cbe2021d30bb966e7a012ca95d9fc839cfeb82\", \n\
+ adata: \"b7f788bae9f6af18e6896fc4ddea86d82fea487e7f99ef617f431e4c1a5302247b45741fb34e436f8254d5d0c55528e9b9cb17234d94bc59ac849c3d473aaef488a993e07b8f0af10ecdb148377c66261ead982315e0f3f3c629de6c06d712948e9008976d410aa02cbe33238b0624a5f05b288307c1776a\", \n\
+ ct: \"85ad503805e44e9a939cb341526f9e04b8e92dc82e8949a40596d38a68b104727082f79d6fc9408c9225254da0a7a63613bda4667b314e586baabb66ba713638ee41783983acfb829491a70f6c6e4d77ca831b73d0fb582996880652\", \n\
+ tag: \"b38d1a6617adebdff687881c95be3f0e\"\n\
+},\n\
+{ key: \"bb08a0e5b31dec9a7f4aa2219e845ad9\", \n\
+ iv: \"700e54370869c35549280010\", \n\
+ pt: \"8528fe825a0797e3cfc89e6453ac568c18c8584f00c01bcc2b191354b2f18cd15b926e2b03de4ef38ff3490525413893\", \n\
+ adata: \"acd35bbb84332783f5e9d6fd9dbbc70500cbcc56174f901000ca714c09a1e4fc3261\", \n\
+ ct: \"35329bf16352c59fc8bbd2301a82ae1c6aceca7221a367b1fdde0f1a4e749fd479214488c5e675fc7c8816324c7a9113\", \n\
+ tag: \"034dc0856283d61c116a938bc7b7ce0e\"\n\
+},\n\
+{ key: \"8846862906afa113a493baab361571a8\", \n\
+ iv: \"f018f502dbdbe2f480271609\", \n\
+ pt: \"09e143eead20b9c2fddd8f57764b491bbe0483e6ac5ce2393a58e6fcfd2e5eb83d4db092d762fe679d0219965eeff1c9d43c50bc628022f606e4f2a1dffd53ed8f52bcd6f856e00826c96545aa40f87dd58942abe089b7e2b13b4e73a8d8cecb0c8411c5a0f273dd9b2fc5ba2c4d39b05053d0dc1a4b0e9e2f37ec5e83d1ef79e56116b501aef8e9410526cf4ffd0a6fa523fb80bedc1d59d428bc13fc3d5edab507ce6732336a819caad66fad562511126bed5c043c978ad37c85e4f6ea47f282\", \n\
+ adata: \"71052589d9652dd6bb5b2982ad6aa32a2a26\", \n\
+ ct: \"b1c01233f6eecbafe0b6b087b1f34d5711efba64ebafe4ab719858c8a85c1d30dc0d971de3c14f97ce5fd67310e44a79ba737641a639ecb83f6132869710e0b3290dccfdd384f1898667fb37a9ecc05a30418f6f369973cbd12d2549cfd29570fb7ec903fe03ed4cda5c119abc07eec5c8896f8792ceeb77d73dc5fe0f94eed23fac9280b33431eeb6d57e7add02da8ac52cf4a3d37178be9bf43ec0e9fcbc54a273f8200ef8944bbc8e49c4e933d74bce0f5941429e955317d6b7a6e1a75ff685\", \n\
+ tag: \"e68ddeb9d138d3eb89e733bc1861035b\"\n\
+},\n\
+{ key: \"c7a6bf375ce0858b9010382094558ba9\", \n\
+ iv: \"f0ef0e0b7ae2087d\", \n\
+ pt: \"8e9480a936d1c75d6a99ca5bd5e410c8042a3a2b4dfbdf1b73e25d1ad45e23151deeb63bc099d6b1596b0ad8e83ba486bd7c6fa6c8851dc47129d886e4c153170fabeab946df81c5d2740b7c8a03d975b874aede54ad134e1ae3e1c64b0d37229bd593e0816a8773295ce4b6480fe50a082fbb4bef64462faab667179b2fe2a0f9a350fdb46b08f9092112902623365edd\", \n\
+ adata: \"641e73bb1f9cbb94cc41c16b4ae8bb4621b80c483fadc966843b9f345b26b917bc266ed8ac9d5feb7cac4d357a3743534867511dc6b16b3f009c9ff8d6df217f058544a9021c5e28f68931b35751a209a7d001f33c7d7ec999e28ab28b523a\", \n\
+ ct: \"846f2bc6747bf694e0a7fdaa3fbe612b7c519b66d283674ff8d8b47b4ded80c42ec4433a94ec50bdc99b3f4dad190fd2558799593110e581b71eb7afaa51bc02a7d7baeb0854dfb0f644ef5eda440a480e3da5584bd38ba94893c1c9f6c9da265c0a35ca5b48e3f9a3fdfe83a327b6eb6abe02337e773489c58be59198bf6d5eaedb0feeeadbb6496db584edca6c66d4be\", \n\
+ tag: \"9204fa39a74bdf74346315ff816fdd63\"\n\
+},\n\
+{ key: \"76c97a343449ec9d1f97d9215baaa2f2\", \n\
+ iv: \"d62dfb0569522df9b51a1a81\", \n\
+ pt: \"bc2d738ff7accd0ac18f5dd621544df62d43f4f4532e5e84540a1cf1128735ec79f40c83133360ca35d3072b3990d3c6d88f2a6f3f268e4fe007a754c7044b84451fb184d558b0ee987d4ed1a30e426a450a4b47685318a2e66aa6c6675aa0b7801c0a8dcdb339f19bc3cfb8b7415031493f652aafaeb5d1cbe01c8b7d\", \n\
+ adata: \"c0260a1c8e51ccf301e63c62c563a47a43296569079f097dfc3d5925d88dfe5480112debfb381b6f3e790228678dbbec823cf9e1b045ac8b9d3268a36ac331dfe3b981ae7b88fca3adbc4ba704965bb379119ece4cd0652286f4f529f5ec64d96de5784b3d9ccdc359d5315ed0abf69f81d8330eca8113e35426de846d3b69be668306184c3d7908\", \n\
+ ct: \"9c3e184771a34e13391d51fa0dfded085de69a07da6948804e6ee00aaf0051fb5f487f04f490ff8c0a4485caa3594d2b5d8748123902cd068b1e9f734be369bebb79c479dc87cb0168ff043161f3ae4e98891b2924f98d9ff838e455598dda6ab53c625f4118564ace4ca8b0c5a44c3942a652aae64fd53a58d5fe8a99\", \n\
+ tag: \"2d4bbdf86a7f639e4f7987d6905c93ca\"\n\
+},\n\
+{ key: \"9eca325e6d50926cd1a108239453b393\", \n\
+ iv: \"208ae6c8d6e591217209f77a\", \n\
+ pt: \"34c3d8c8ff2b9ebb969b2fbd59d773a5f1a0124ba2141ba238d63a2b7912c55f14a76d8cbd73c4b93c614ebc984d1e8882b0ad\", \n\
+ adata: \"c2128df675e73c1c605fd92f5c6789e725c4d1e4b9cc2447ba52a151793e2ed97ff368c4eb723727dade4a744a72f45555eb5b493962beb442116ef79637db58d0c16cc871a3efe633d25812990479b22d3c1ba7d2b7d953ff408a6bb43f4bcd5a43e15ebbce7845c7b4f9082bdc0bfa346ac3c91408d5e6ed4f35ff9d015524a2f46b8501d00db9c8074e2190a9\", \n\
+ ct: \"8025453b91467bfa46f1f4652e56e37d605c9775599f4ae908afb7ae46d11ee7ac9fff1093214354192dc2e95aa4382cd38e56\", \n\
+ tag: \"aa9bd5e9f78c3a4ddb1968dc26cd5e64\"\n\
+},\n\
+{ key: \"c442c900140d8c62324f66dddfbe140e\", \n\
+ iv: \"fe58baa98948abf3\", \n\
+ pt: \"54a97b70ecf553d13bcfd01b0df0037436ecf8c8e342cff620e127f3c5055b4a2652e3827e53e489bf15b57c9356ad624195b155933f82f959b8670e514fc5775b6fa3ea8458ba836e9419d3f13911c3b77b540a112dfdb49df56bef04\", \n\
+ adata: \"6a280a29b87008a107f8657a954d60d7c72a20e190342dfcf8d589d1a06f832f7e5c181172d588cf0fc020732be2c2cd45972202f64ce00a1d36c7879fe8684572ca2c2c029f2a34ebf7556489768ba7ff810b74cebf0f04b959c61445347035b0c5\", \n\
+ ct: \"a4dfec1cda36aff3444eda3653fe6437b55dd93d0a0c6aa3111ccf62e6a51bc00bb066c75a7ad64ab2ea0f2ff178018ae95188654c55b41bef6f8f8245e5e842f6f52cc27b5cfc710b3c70d4b9a3351c3427b33ac97c9a46a734a59c11\", \n\
+ tag: \"92fd4af3d8549e3fb0f9a5fb15c13765\"\n\
+},\n\
+{ key: \"d735c72fbf9f828a424755e9fa6643ee\", \n\
+ iv: \"b578f5726bfe817f\", \n\
+ pt: \"85d7733a25632aee9df5b50a08af4b81cf4af7246f3fce57fee85ce62902b17df76a942c87b59f68f9e9d021fa1f053f57d15e74fab23d2a6c75af2df5d3c952628568a4ec999ad0b5d067077679e1a40ecdf44d36b27d7ba4277e8ef8fb58d5a8cc9d9406b4303952cb\", \n\
+ adata: \"a5836b80e570f871b05cb06f898b7e7d9b809b717cd560e9f3a754f830d9ab67d73ac573f094bbd69ec5f679\", \n\
+ ct: \"affc743a15eeb8949d2d080a70d63c6c562318a91c76942a06d917259ee862872e6ae6f50e56a66b0726b2a9942883b7a1e84263c2e57fab2ec22e90e4baa2cea030d5b51422bf4016e89577944562643dbb01b41fb872eaa59b90f63faa4c17f31e1564fc27cf9de49c\", \n\
+ tag: \"dc877c80614b5a748bf5149b41027693\"\n\
+},\n\
+{ key: \"738e131246a8f536603097dba7bd9aae\", \n\
+ iv: \"32c7376e363ac2b07e528f6a\", \n\
+ pt: \"0dcfe1675db612e9faa74d41e2e3f4654998ea2cf1addf6c0a373349938fec1f2c74540dcdd6f4b33b996edbcda4\", \n\
+ adata: \"cc0058d4bad35bed2aa0ce541088af7a90bde517c649701514c1465352ce516c308cb6f2ad89bd87df92930f66b81551140430a0b193bfade484c55ab9331c4b9490b7721aee0ccf34269771997d71fc34d888c5d12c2e2dca99a23e4783616a674610d1621b170eddb0c02f72cc8e251c7b872330d7da83fb8053786e00bbfe71e816b680b8eeadb8cc6d00cb0e83502275e65391f724e96c\", \n\
+ ct: \"8643c4708beb0b89bf96fcc9c885eeb28ab5ea72aa036a3f9f6460f4ce26b31dc03ff4918273d2a6d2b4768a6010\", \n\
+ tag: \"6a18f54d36cd00a85074edcb0ed3d333\"\n\
+},\n\
+{ key: \"ae4aa98943877cd4962be412c748524b\", \n\
+ iv: \"e612aaedd91adc32\", \n\
+ pt: \"69404564c7a1723033737c482017634c8533e55373d58491834463a297525224d67e3b271950dbc2c6a3ac7b0318f9cf874d2fd4dfb1271cac393a403f19781ef4af8c2801537388b825d4c63a747aba449385bfbdd169e46990ec1a9c44f5\", \n\
+ adata: \"19f81904a509b5581bf61dc79a02c8b7696da5f3fbdf02f8921da7c8bc5d3c3fb02f9d44815c0ecc89a32c47eded7e79772e9a50101fa39d84e143a0bebca367e6d054209419cf9af6a122204d7ea853dbf801dda8426cd293a7ecba1a4f8a470119f4c940eed53e47c69fb398e116626b91229b105a9c316e24c1745035dd\", \n\
+ ct: \"2a5083c40e01589e8ae63182e10bf93a337978eed184a90280b3be60c1dd302bcc28b90fd383c54a3a418b665602a643e7ba36f0926ac8239722a340ed2c9cb6fe76bd312724d8215788bf00d9da53e5ceb3b108abc37ef50a80fdd719d97b\", \n\
+ tag: \"391647833ace5ef8f803726f83df2299\"\n\
+},\n\
+{ key: \"9aa420bda1c760cb02849ee6ddd3afa0\", \n\
+ iv: \"73ff401433d9acf0\", \n\
+ pt: \"1bd3a7e0ed964abac3a352de7759b79a14022d61bedd3b44dcaccf02a4883a0f66c14579cbb51032b69fbdbc02dc4bee9135b5ab766cec952e59c67674bf7855b13f714925fb6ba080cb506df83c230e03de92adda701a18369b51c2c712b5e5b7eaef105fcdb23895ddb6c838aeddf142afc7da10641d370e6ed77578b624f2a0639c1b270c925362dc5b2027a105d1bd5471300d9fa015debc5b8161580d602234c16afc8439336ffe0eef9d10ec461d16b9637cfbf977241348\", \n\
+ adata: \"5622281843ad99ea1faa49baa9258a5a1823b60aa41106da0e98ca45156935f2214b71003abe6285159142d8019f5499a88e95c2678dd5523111758a8fcbee3b3c3a9825cb6c0a489ef0e5420d04f964660069a946c9f0b0281fdb6781f641d7f9f907dbac1a69a2935381ebeec8d6e34072d7bbf05be8a0f2e2551f1a6607076f7b6e89b7cf7d7e24ad471bb000e067af5260f41272bab07f8acef0aa4f2aeb063b9972fbc1b155\", \n\
+ ct: \"4ea13064166d725d8d34048349fa8f4e56143e78c52b56fabbddbc93a981df60473a7b0abadf823d4b6e96cb9a47e8bfc11bef1cf8287cc0292abfbcd97f0266b206bdd9529472ea7400727cd279acd0755df74af0ddff6993c84a5a25d45fee691bbfcfc1649fae32b4c5b2421e1475daea824e087da577c582eb71f953b5219ca0c12f14cae11576b776ed8bac9bdde15b29079577b788740deafa27baf0bf900da2c035d932c199c11991e991761e89d34ce46ad9616772a996\", \n\
+ tag: \"395a4e9b1a06a4086a36696fba9982dd\"\n\
+},\n\
+{ key: \"64b40d701610e9e4079cd522407244b7\", \n\
+ iv: \"a960c7353812ef51\", \n\
+ pt: \"8430ceae5d17682e32bf1b7639106c444f53986b71ac2a34cd60bcb55ad4bc0cccc0eee3574018ca7eb587a89e4780ff84f88e1b6ab7b17d03def9ad9221f9\", \n\
+ adata: \"cc5559af3f766268bb3215b0ea325e309a1ad17d57b73f936beaffc0f5aebd2523c276f7ec893f336c91613812c6f0623a123b3405a3f49b7cb88f1db77849fcc8792ebae0129f05\", \n\
+ ct: \"12a096f30a63c2e541e5e4521f0308bf31c72c45576665c34494086f628af4c036743c6e996baaa3a2d0e198742cbf783a8163b9f3713f541346906ec84031\", \n\
+ tag: \"9ef278edd1e94746eca384375ddddca1\"\n\
+},\n\
+{ key: \"c8674357224782a624b2c3e2e474752f\", \n\
+ iv: \"3e3a16a1ba6f324a\", \n\
+ pt: \"f8534f85c817d5852e2f649e5b983249704c6a7b411d243e344f3010e32b994244d2d7944f3fc55d5d0f417377c6bfb5ae98544c42a60bc0929a122fde757acc15b90b0d58cc276d23c418f7aae6a5a15925ed175bfb6d9d73696cebf539d9820a5f6b779102c2829f293c808b5b00bb308bb5dac1b90c7de5e33bef9cff4ce525e497666b813ca27e2c9438e08112d5c3d9f481afa8\", \n\
+ adata: \"2b4196f77d\", \n\
+ ct: \"80901e10c3b45df51ee0ed93d2cf0dc4c1a870424495f9024dbe832d02f5f86cb5286ff89c208d1176a5d0f7820630d6791435de029e8f4c2ee1b8262c62cc4ee2ceaea01fbc001ac7ed89972c286e62e7ece83144eef4ff28262755ce7482c7c5a2612320a7e91daadd685a29e5ac4968cd3d3f2c7dd80013ca3be51bffd98782b62ed6dba9510dbaa4b91c699c590f4d41d316ef83\", \n\
+ tag: \"2032c82f77429d43d2d3543dc1323135\"\n\
+},\n\
+{ key: \"b83272054925974bf1b1d0bf646ef460\", \n\
+ iv: \"cb6c3c8cb75be490\", \n\
+ pt: \"64e35f169f5715c08365084eba754e171e5a2dda804913c85370868ca6da34041ab9b468053f31e1ead25fb5042b10a7aad6b70f90fe57909e66735fa546be5a1d4c562449949e88e297e6c125522de1587c6738b0f3c3f45f36d988665240cf1def73ea214866c6e1788f00b977b619d5239f24711e4b43fa1f631911ffd6e6a7\", \n\
+ adata: \"6b7d91ff0ed7e3ae2303ae9bed28dc070aa2ffd30947e6be0550663b9ab5db652151609b3a53bf7e0445458009fc90dfb5212bc28431479041f4dbf52a40466cbd36bdc479240fb7814c11e7d4cc3f98120b7da0d48a24277327e189b7d4fe32e153316f815da077486c8d65cd3e6df2dbe18661886aafb562c6bd4e254e1a529f84508ddd974fe65b57261725c0d7023c177f0de5612ee2e93989b4deb065d82dc77f348d5afb9f604852449892191fc08d44abaee85c447ea26999bed77b96b6911e\", \n\
+ ct: \"804e5872aa1648fe107d4985354bcfd7af3cf04ed2dbcb9b4758e92b9f2cb27635ddb576151e307c1a109697bccf5d4d97365cb36f814b79214a866dcf455209f04eb9d237b5a0673fcd3d89859c65735655e08117c92c3c310c24e0a1cb154493f28718123a643dbf7561c10c9fcb736ddca8177f5366f558b020c4627a9b14c2\", \n\
+ tag: \"2bf2b147a872aed5552d2efad6faf442\"\n\
+},\n\
+{ key: \"af6488984f80e6f61a9151afb9638baa\", \n\
+ iv: \"0af976739ffb5559d6474fa3\", \n\
+ pt: \"0e81080fe9841009746d817e6ee6764113688292af3900fa1467edf2016dfe65aaee5f2346e01fac9a01913f3b6059528d2750ac1e8f27bbd69e0b8da1c061832e261a50995865d718f82bdb666c4875ce04d1efc2637edaa6f2fe2ef7613fd3b71c970f2f9f7524f3c2689a711ca577d34c127f5b7a200dc88050be00b00e2d8eb59221851bbd3d53a6a2d7f557a7d66d8c8ddfce4daa587801d3cb36526761a699d4b3894608d0ace6c13f8584\", \n\
+ adata: \"2898a50c74b67ed99276edfbaf8e4f30279992c83f690e8f675699eda58f16831bfdd28c550214121e9f79028171a2728c87b35fcff5a26b4bfa3b86a6424b371ba71ab650d9c7c9e45ce277b32dddfebadb157d2168ffab778407d295820a7aa9126ec029020214b1a05967e6d16d2377e25e29266926c71564e2ce0d7d33baf778\", \n\
+ ct: \"861f3c012ad11bc1e72aba5daae7330e26773de6e25f782a0b1dce8b0014cda1cf80e006574bf618d0070b797511b79c9fb71e58d78033d5fe4a9ee2a26406ad9c4ce7cf9c33093c87d4b65f3e47f1c6554b80d7e184c7e4238948d88134f60a0b1a1a63935a0187bcca4b16678598e5b170b1fa58a9b841248e62552ed8bcd2226680fc09c585b54e0096b30a3c515eba2eb26b63a901c876b5dcff571c82869fcd09803a57d09d5d17a15a99cc\", \n\
+ tag: \"c113f66731bc8a4a93c8dc809e19fbe4\"\n\
+},\n\
+{ key: \"9892c93887637248dffbf8ca327523b6\", \n\
+ iv: \"c168f7ddc0f79aacdbda5291\", \n\
+ pt: \"715df15ec0c785b54cc906ba99a8078bfb63d481329d4137b14660ff4b6a29333e9f6ce7eaab1bee9261fbb18346310592a01804ed1a388d1f7b87bfc00aa250b77d88a7a9edd7bdb00efdc1f2d3b0ad592918a8648bfd82504adacf99d88519275ce0f8f42d39\", \n\
+ adata: \"2c38\", \n\
+ ct: \"1714d3cbaecdb7e0e691999d6e3cee83792c349147769696769aaa1bc19a4c87809342d611c2acb936ffd2169dd8d4f82c04df58a613d3f368dd5babaec3e99d9866dc88128a48b65b9a29b296f9bdb3d0e384054bc5aecf35b1be56f43c07cb4aa109b72ec735\", \n\
+ tag: \"7e3491413fcd5f9877c9224edeb06277\"\n\
+},\n\
+{ key: \"7cc40b882553d637f1b5a6d6abce4751\", \n\
+ iv: \"61e6ecfe7ae8c597\", \n\
+ pt: \"7320012cc04b875a2ffb1e28bff6e6b5a6e9f2bdc663fd213b0aa8f5d7ea5e62f26956fbb2352374d48cfc6a17384c22f0a271d729697d17407735b425abf9d95133401eb871334d9442cd2cc59f9d5230d78bc3dafcb88c2b6fa523de233544b13106b5556708542869d9d3dc8b7f00408b0cdf50591bce9142faebf16d19a1ae070e6da4f61f070f1960ad7664a327a52830a3dccb6885b6fa5faf6bf067cbf9dc61051a85f2f129ee199e95\", \n\
+ adata: \"e99c8360e20efc6a91b35d76b07ece16ccd42b1b566c7bb7faa82e7dfbea9773d91a407f5f93845c19498b312376debe2e4f081af6e53e85bb250547a61598ece42e0ed9c354e1d8be\", \n\
+ ct: \"fdb85527a844ee8e3553e7b41e094df8999446a27b88f6d2cc2ee11e3575d12641bdee952e0ef55b8c83e015b079a5c926b124a411093f94ad2ef4cc89795f917dc85c10e6936a6f1d68dd665ee690b9a4e2a1ac29547af6662535b19d01337786cdd7f5e94d943a3bf47e72dac24f2c7ff9ac294c9790bcfe810caa1df6cdb8859e3841f95b0ba5b3294ece5e4c85da00a2563d41a9a40b95d41548647eecb03d673af8a77eb7b22bd5ecbf18\", \n\
+ tag: \"1c789fb5917ca4077ac28a702fcca24f\"\n\
+},\n\
+{ key: \"bc9ce0ec2fcd16376b6f74dc5871fc21\", \n\
+ iv: \"a87031c172fe977f\", \n\
+ pt: \"4ee4f19365b8b26d160e43a23e76d1c6b886539b6e704bef43dc60a899789b4a43887130c871063d36a214a84057b1\", \n\
+ adata: \"00def180eed837a176b54dc70e6cb6176fad048c2be4dd057a72682c1ec8051c309bf8de9844f75c989cd3e7ae591ef8828c11cbcfffb13b2e96d60fc0cfa3570ef945204f61bb2184697721a844edd653c86ba74dfbdf0cbfdaf1fb5ef5d6a6b0e0eee2\", \n\
+ ct: \"c16ea7e45b6580f4e6851ae3f4e4a59f928b49977a819cf2979b50e922ac83421c39e8ff9e6bfa61a8dc2775cbbf44\", \n\
+ tag: \"adf55cb1b4a17573b43f96a2d5ac9bb7\"\n\
+},\n\
+{ key: \"0c30122b2d20fe414ff3401cde02906b\", \n\
+ iv: \"8835745c458cabb0\", \n\
+ pt: \"41357a30305b6b47ad9c687121c4bb13b56741339c981e86d4a6ab93527acf0366a2e06e25c0a17bb584a6d0ced4df636de152084c9154c16d7c53d097c4c2e44a12fe1a2f7875d848262dfa1097884b93edaf90d9f3db4d5024d3dbbacab7e34a991ec2d5a1d0dace0ca462e2468a956041726e80690f693405018d0d712acc9953e847a806739392096e7e7dcaa433640ffa6a01c20c03365215b1927cb246ea6e8bc9b563dc5aa6ba128c2a\", \n\
+ adata: \"3b6d6a6ab30c0a91eb6d90cc4260674b1c43b265938aa673aa1ee9e067d8e1e12e70924314b31b55a5aa9f655bb5bca025d41083a36742428ed0b193faac2c503022d3a4f0b9271f2c3b8c4a13de66bcf3489c1a7014cc2fecb2d3d0be00bbf45f6e3db57cd30a0306fed4c14942590844e4ef975cb43fe53f67e88b047d942fb1f5c92fe7b55a50668a07cd66a5a5471ed1dec0dc4b31ffe71f18e435ca76710426d4d93d87343498fa1b9fa7e193cd056e1085f1e99d584f85e63e10ba5def\", \n\
+ ct: \"d6cbc6472d9faa2158e73c22cc66a8f218de8bffe9464f291b96edb4b89fb08b1b58fc21840a03532403988744e86e63432449ef1c64095baf22cdcef4a3d8bf5e6b78a0ef893c020ac9b128f4599e2354ce1ece8e5c32e3dc7d9264c397c01402edc86b1055ac01a3e0218767f7dfc4d1f48b634177a5ebf611e830f442306e399b3d6087510dba713827424bb81eee2436ff7e0f19576a90507a30d14dbd885bebabb87b74b70126b91bbd39\", \n\
+ tag: \"d63c5ff681fd8278b6bf719e6a713ccb\"\n\
+},\n\
+{ key: \"96993c17e1efb65f5333d9e071eb1c9d\", \n\
+ iv: \"ee35ef797fae4263aab08800\", \n\
+ pt: \"675d604e0755f2afbd116838ad27802485497dc1858928f8949f042cfb408fe3cdef04f3161461b3c3097a3367321194a20fefbdeb1fcb2cdaaa54baf3fadcfd6bc6c0096366ecd27dc16154b66a9dfca650f3f0a2b1b3e3009549b71dc5cf614c12e87fdc92a4896d8cefcedab64fced4ff8dcd05568329023a94a683b4368f4f518dcdb79fac2e0f4f54902cf06febb89286138543ebaee78b880de446834cf2b941d8add11b59640bbc7b73b71fc9c4ccf9584028bc61742f7f046e850402e75cc0\", \n\
+ adata: \"4cf864e004f8a17300ebfb618704c86959a7e5775da6dfc13a774a294e9cc494299c9163e7b710e8c202cedeae0bd1256b8a8fd53d275a0cc76b7bb4aa72321beed5255baa00c3d53dd46db2137e14cc2ffeefe08c1e54248a4633bfdb3f2c56905c6fca25747c53c04087\", \n\
+ ct: \"f970ce9512a5f297d4ecfa7281b3d23427b1d95ddae52f38eac8a6ed4cfe0f63a03aea9be9949749c059814bdefaf84478c8fac7747e4e5b0bf427067bf24d7c1315a402098106406af161ca602085d932554342d8ee7607f8c01d1178303d0f33364868f36b76fe444f04b50058e243a02e5d615ab51c97be76e8c33663544d68c8cd40f94bf90d21e72c66c6c961ad90cf0837b2d84f0aca8757b79c6a4a231d0721f53bb942ecd01aa88b546fefa0259922e6d1120a744aa17d0ebf80d8c80d6052\", \n\
+ tag: \"9e4f75b28b88b9e582c2ac69c378cdab\"\n\
+},\n\
+{ key: \"b3370411c5b3376c141cf0d6418e601c\", \n\
+ iv: \"94e95626891282fedac4c182\", \n\
+ pt: \"9bf2f9c9a2bd3e98bd9faa5ec5ec5d8fc4aeecf5b78a7422a057d6bf07740dc5d44db4a1cf08edc47680fb66fa0477993093a48b50c8d16e076ef3f12ebb0fc74971bdc7ee370cff382c0fe76f393a341f2e8566f805a253ee32e0892ed0ce5ef44d9cf1e6297f3575bd56eb88ba76d7dc16cf0aecbf62d49a98276fa01bb7bbf8ca8bba4e8c18da1769d7d3bab7e2aafc15a604456ad4704f2a360b0a0ecbde218f8e92a73661eefeb1e656e7165c8e\", \n\
+ adata: \"6b9f708b897ff596aa4963f90d75fcfceb55373c095ee88dbf0b6d5de2f0a6f8f4c79186a7872687924fd581726b1767dbf51ddaf101a57e34e637ef5e9a7a5784f72ce05ea7e0fc3ed69e7f798d3cc57d728d359be3c9a199666414bdc4cc8f4a8e5951f80ced83ccb72fdb7a9a44a9a6ac623005d3074cd9b8f08d54ac2dd886397927004b541a5a9682c0ea716986cdd786de499d65bff2acdae66598b43bd6e17dab56e6f2288af81f2357bcd65c\", \n\
+ ct: \"e3b0f895f74d1d05379286de9760e6bbb5a2d252e0e05378a9c1a53e5e74b7e44f7ab19fde66d8bfad42749cb6d13244cd77066f2e104f7043337699a8c651a457ca16f23be0fa67ac691a58955afa06edffaab5238b9a5467e3ca074f60d6332fe58971a355de6a4e829c897acf2657c6f8d5814b798d09d5fcbb8a8b26e00edeb6aa324f4d7e7f8f809de5a7843a5bd18387e6a345351dc65ef506a3ca23e5b8638358642112497a8699167fccc871\", \n\
+ tag: \"5314bafad444fb09d71f90c8fd4ff182\"\n\
+},\n\
+{ key: \"351daf23fa0df3221ec250dd0c8a80bb\", \n\
+ iv: \"3100e77b02a1417b95fd09c7\", \n\
+ pt: \"6de23bee5ef49cdc61a45a32bcbdccd37fd99057309d82314482497811f7704c96ae463332ab6ae4d476d53e6ee8d9e44e574e0ed55d8679447827c00a437407087e5bd2d4fe4f6057e3526ad3e50ac3e97ae6c6cc38fd6576a555d56e6faa709d511baa043d0d750ef3888f43\", \n\
+ adata: \"eb0304af170424e56f3589d05bde951b04743dbcbddcd9fbca0e4c9fd3917420a2e2f32161d7a18fbc89060e571c38bd19bc4b1eff97e547d6bf82d02f036da9460d901d69399e58d5919e0b0d098b441afa0a2f9b7d49cffd53baa1173e681e693d1dcb5bbfe4422ce64065a93e1cfc2cd1c240107c6d10405838311c198cd221eebdc78c57cfbdd142d2772560298e38\", \n\
+ ct: \"795fd7351beeea3f5a8feac7396ba09555643db0774de746ff0267c259a1e39f8929e51953d3bd57e843ba3a67e29b434828981d5750c1b9994e078eaf50ce12cf7c5dc56a07f71690617557573180960c2ab6f06d52f0f19c97e377dca28d4a1b1b9170790f248c38e549c249\", \n\
+ tag: \"15443f4f6ede488e5840b3aaa6a62325\"\n\
+},\n\
+{ key: \"6f4f6e50e5d9a0359d8e2eb06aa8daf0\", \n\
+ iv: \"a53d7f797704ed1d\", \n\
+ pt: \"97743bc553049c55637b834b0cfe695bf6b460ce5c1368296f5f38211023723e1111f9f8fa502a6b2cc8fc71b74a49386fb1a413a128afb7f6e30a079adc66c452bd6dcc4c368083668fce6f18ddaaecabc9bdb2ed0aa5789e77c52b1768a9dc9b630a462d448e1ec45bebce0c69020b285e7698bd170c733fd79c07d0e8d49596c09674d0dc95ed\", \n\
+ adata: \"a6ae1d3084baa3c049d4d0484d884269d0dd9ae7594283cedf5194d242\", \n\
+ ct: \"c2e74b79c73fafc447e90b325def1184f1003febcb49edef11c652c227d3c76137a042d3cce90cc5318c0c0bc3b9012253c845912c8d6194ba3b491090267340ae10ae40383010debf8d01699db8982f8c651a3a6b52af03bb4e83afacd1c8d0dc3098d4b2e05d987811e5774d49eaa0abc9b13f2ab37e84782485f3c824488dcc59c24cd02c71bb\", \n\
+ tag: \"4a0fa8016cbef2e2daa09f7a7ce40e7f\"\n\
+},\n\
+{ key: \"1c110e9b779d2f1327cec4334dc8f51e\", \n\
+ iv: \"6bb191072ac7bdf5\", \n\
+ pt: \"ac484a6e40c4bf79d0b93cf5f2617f4a1b1608de22e893dc220f8169b2d5a86b27a335ada60d85e48f1cedc208453de934f0aa5ceea2cc4cfb2577842994a3464ccc27ff\", \n\
+ adata: \"746fa150de14c4b6e69a586262dabbf49f978caf7d769debd6a2873a\", \n\
+ ct: \"88292fac4d7daaf305abc8f29c7a29c267b05f70475fa0397f643b20023d05ac72d864964ad00d45245229d6fc17218f5739f07bd0939e554d0630b265b201d77f871841\", \n\
+ tag: \"fca75e5d06749a06cede84cf31a0f005\"\n\
+},\n\
+{ key: \"a2258c17b662468372dc9dbe9b4e2901\", \n\
+ iv: \"dea9f0af255bbc7a3ccc7b61\", \n\
+ pt: \"163caf5849da777bfdbd6e80b5112b4eb3842fa290c106deced30912a7fa91a5c39b9f7fe0807f261b37ae300e78307fb191c91ad2a95072581d281605d4b9f6b7b6d0382fd5a539b7a7baa19da3de536dda00cb51a1e1a55dc2062686\", \n\
+ adata: \"30fc9e41b53f1c6b500a7c0e50eb0bf1bc7c\", \n\
+ ct: \"a4e96df31c9d3bd95cc66e57c6ce3b9d9d5df9474ddbf6c88733420acdcdd4f250a3e0c5fee155b631144f6c45647d646cc2e7feb9482513f1244f11215943f2a02e7d4a0f2447477e3e0f3455fa444899ad13bd60c9892dbf7f3971b5\", \n\
+ tag: \"ac8526344074dcc02d46bd80180b64ee\"\n\
+},\n\
+{ key: \"465fc357b0a78e2d321ee62ad9d7fce5\", \n\
+ iv: \"b2162ae6b075ef07\", \n\
+ pt: \"1743abee3b587247ce2be24d096d137b4a11071dfb51feaf619ee8c00bc604dad2e985c312e66c9db3235d6cf7faa1c7e5e7e6f7f54d8da429142df6c2f91a1bd4b62af95e792e13a8b8778d\", \n\
+ adata: \"9fed2a168843c88a2ee41efe09bd6fcbc0ec7023d4e4dde12873234afd0f2c32d256351ea531459a136dec89e2cd586615bc6416f4b4ad257ee55b2c8303915237099307c31bf7feb1fd6527\", \n\
+ ct: \"9790cd949482c818942c7c80b43bc2ecf4367c5149cf3a4ad5a5e752dedb50abb3bd05687c396d16904bad5108fb512b495730eebf42e0b45f4175d83efcd112f3ba460a8dd17f97ccc8f510\", \n\
+ tag: \"9912ef7f879ab41452dafa6b1ff2bcc0\"\n\
+},\n\
+{ key: \"306f0af3d9afc172e21d3c91c3bca1c9\", \n\
+ iv: \"47dca72c835f38e6\", \n\
+ pt: \"d19ad387cf92f0d680cdbd680bc4e22617a2db1b94d25599dcaac0dbbbd7efb90d0124676ecf03c41ad499a509480a02508ddb3cdd247955f90758343a78db6405efb973efd67106e4327387713974f1dc8a7256c30e3961186d1af2e5505e61825c210b195ae7ea8a8651\", \n\
+ adata: \"b825b5ad1b0cacd2e9c52d37847b6d16abcd45e06b\", \n\
+ ct: \"957ab2511a277e1d32a81d0ae3f3ea75ec1072458cf1268e03eb487e542b4d544157583241a55eed1356e92428ebe1e36113b7a632e6ebd2ac9572f7b5d84b85c50fddf8e4c8b849f0d696179dbda19fa5e15b7b1a4b7a7fe234afff61e4224e4f0dc8083540a5aeb7da6b\", \n\
+ tag: \"530b3d347d083a0d6547ed838be58eb9\"\n\
+},\n\
+{ key: \"e3d4de0669289cb0e2304fe5a88334d8\", \n\
+ iv: \"c75731680d7efa6eb2842ca5\", \n\
+ pt: \"568be3\", \n\
+ adata: \"d5d683c6399cf344f6d276773a58f5cc938296ff11ca2f7ce3689c1feb9824aebce07dcc19fabe5fcf1f09d78d9b19afe71ea03f9683cea55548a11efd41b5a1c67fd5473ded70550d7288c1d05e55f5d604a0007163f86326e4b2c90e2b3b3eb09deb571ef70881b1e9e8c1be86b3b9bf84c2a9ee19bd1fed0f6786018f2075354df26296adfcff426ed88214a53e6a3e92\", \n\
+ ct: \"4b36ab\", \n\
+ tag: \"05204517f0719efb2415a0789b72471d\"\n\
+},\n\
+{ key: \"19c6c9ee3bc61f191b0897f3a7d7d8c3\", \n\
+ iv: \"ffc8af672ff2c891d92593c6\", \n\
+ pt: \"5e3d9cce6fe9ff4c13f7fc4d2cedaf\", \n\
+ adata: \"7c2838a8d5799e9e2407eb70aeb77409da584ec0a0bf563ed5d05ab91dd3b9da43332505c7aa56907a0f26fb361a30e8ad02395c2e2449698a9d373d6af0c7d2b2da7bebe7d92db3f803de361bdc59dc4f58dfdf719f9b5b3c70434fd1f8f4d590e5be654a0a7546b4aa8cd4791d1182b494d35cf75b911f909a2e55\", \n\
+ ct: \"705b818118cf3500c5c701e17d68c6\", \n\
+ tag: \"3eb6dc7dddbcaed598c7a1acc3718640\"\n\
+},\n\
+{ key: \"f6e0170e7708d5aac20899f360c8e242\", \n\
+ iv: \"c5b74fa94bc6829c2854d74d\", \n\
+ pt: \"208b2c549cb0be8ff7229e27672560fdf53d0d274d34c0f61e261f2a55c3e5d78fb411be80f4a0774e3c5882b7e91207651fcca33deb7dac638910dd067eb9591e26b5341a52a8dbbc9acb1d846f5da707b8fb50075bb750d6dd354359aec9552e920ec1aecb03619e12adb72414a1a8bf6e6fe0e48478fd84588bc6c5ebcb50421f3031f69ecafb5b5e40\", \n\
+ adata: \"6e5408c092cb6a19e3bf3bcee3a9dc0715e63e3a25c5ca50bd01925bd091fac9fa5adbe734988caa4a57442e5e6af71d6e0964b53be482fc1cd33313228d8ea38d6fb7ffb1c1c4648283af6c4405c1a65fba14b657c207fdbc0886ee42255287a73a6ade53a1139daded4ebe16267464f03c63d4795727c71013bcef4c3a85e84e2202a3415a2c19c7fb9f5655d4392d33d3444e157c73a3be64cdf8c72cac37696a47c5f3a62ce676d594cbb68d410b13f7528c\", \n\
+ ct: \"9c5f2204788e2e1b155f2621767596d2f7f15a543a9992435da1758405e933161bf165cfdf1587680e4ff3c96b6896a9c7244ec55dcc8f490f7fbfc7ead3a013b5104bb418af6f8cb635a0387542ef22b03df03f4b54b689eef42b2c8fb6ab5c1bf74d573f1a0b9ccc8425430d0a620bf646b8891ac63fce7eda76be9fa9c0c06660a511c9338f132a7f1b\", \n\
+ tag: \"7a55064ba7ee76050c92c54bb4b75208\"\n\
+},\n\
+{ key: \"d0e3a9e53b5edd48a164098719e55e8c\", \n\
+ iv: \"0785a13d37401178155fba0c\", \n\
+ pt: \"bd3961a2d24cae8cb50308c2a4fe3be095cb7b93e6a3337285f11d22838c16128fc566162a658975f710e82d96aa5aab143b8dc94e6308186135cc4aeb2a5176fc01f4d415a01e3e4e404d3afd11a0027d37a4c659bee1cb5b8f0e0f3fbb2833701129717d966889ab\", \n\
+ adata: \"49ed28282a24e08d0b11bfdf568551584d07f948c8546f757b482504c7d8c980bb9d3407f63723e7a7c71c4b458308948a8256fa3b4427787a208af8fd8857e85c5af06ec2b4c3f1dd5e8507728506e4ccc8388e4bad8cd5ce77d8e45be379b97f936ccf27d2fc9002d2d8175c2ec9a2af19c3f1037cf3fb611643df6c1154ed4d462e7b0aa5777669d662c7b184e2e07e7427f77e8112107d8b98868acd2a\", \n\
+ ct: \"34e2e2c8a5775b0212743f08a48d988870a69ad4696a4dd10cc6ca14d9669f4f54d6f145e17afd9acbe1ddf0cc1a62c2c5978044a22f7badbef56b65d748083d1e45564f02dc0f6c53337ebd2d93b90c4a9d52eeb2721ba95fb012d6de063a85363ff603fd1b37d638\", \n\
+ tag: \"9951e7a281ef2a0fc2c96df5046f1d87\"\n\
+},\n\
+{ key: \"dc80e2d059840c5c905eef340c46b639\", \n\
+ iv: \"3b48c5a64e45f945\", \n\
+ pt: \"888e21e89a95f41aa4d4fa0def18ca39783ac7890dc2bc1689c6ba8007ce065093caddaffe91248c6b82e223f8509581cae359f4b64a904fdf19068947c3f0115b4360fa6d37c295ea67a4b8bd15fdee50d8df9ca715760817b3246bbff746e4\", \n\
+ adata: \"85db246004d95007d0a75d929bb7340079dfb8de71f73051f5baa6d3197b7f87aabfbeeaf8f381ec55349a6f438948769f832d759be3e97e0e22eb7bcc688b923bfd08c41a6e18ffdad5ecafa3c77a697f386466a0d03d5a4ca5dd890b5f54e60242852ed11d380dfc9147e1b20730da78d95c6b9854f467f484fe03b384504f9c45bbdda5a15dde7a3c8c8e69ea43a9e44923d77658beeae78cd634e95cf5b6bb\", \n\
+ ct: \"e0f8b97dabefa41dbc224e17b7150b1d14e99857dd18291e6bc60d4d76098bb49320d6c867fb957f60f0a66535f6b6013cbe92f225a10bc22f90864204f28e9ec910c327dbe855998e53d02c28d7eadcb821ef942c43ea03c3dcd34d6c75d138\", \n\
+ tag: \"e4430006aed478852df8e3810f288524\"\n\
+},\n\
+{ key: \"f0a25a2450bd1d13fdc6731bb77bb129\", \n\
+ iv: \"bf8f63a79aebf1de\", \n\
+ pt: \"d460e05c33457a19911f293cd0e20e35f2dbd6ce6b32afc47cc29cfc8c8cbaebeecc2b61c501f7035fafa1191235bf2232b03eaf5c1db14b4dbc0738e06798bceadb3dcb49cb8ed9a658503b908190aa2cd9aa71177d924825393927b5574f224359f45331699dc7f2361c7a06343a47b2181545a60860b8e31121ca6db476dc639002ea6f5c18820bd0326c5ec6537b9947b653dc07b0e37226a853ce513e93771645154aeb44da99e2fe6cb171b01bcdb6b6f0\", \n\
+ adata: \"dfcfc2cb66a89b05c3f1f006a24c710378b7522cc2534a5a49f44e1d07f460df16e75552fb4f6ab135591c15cd89d10c38825fb19c35cc52\", \n\
+ ct: \"05f4dd24258de54f2bce55cc912406c4aee91813583aa4ca250bcf240f3f4f60430329a39fe5e7198a00502270c4e00b23b1d018f9ffa9a42d28a012a3f4a2fe57465c4a06654a6b11c6856e596be13322febf8589d53cc4935b4bd58c1031d4e43436a2851b5295808203fc852657d004ba36b7af73d630a85302d1869231ced521098211d3792313c81d852ddcd7385a04f0f16b9bd8bf9cdbcea44322142012d1cb42cc5540732918933a352e996ff4393639\", \n\
+ tag: \"8b8c1afe4aa8decdb9df7b154ad102c4\"\n\
+},\n\
+{ key: \"5338866773f6d2a405b12ee53cf62606\", \n\
+ iv: \"f0a06764d5f2973e\", \n\
+ pt: \"2973abe089cdeafabd93c2c43838d80ddd5808d5debb62943d4789ea0ba00c68cd\", \n\
+ adata: \"f2247f33a097ab4e3a0761503b8e30e10fded28aee83ab9cd545280073262b9ad37439512cbeed38c36bd101b8360d517c2d17c2a042df7dfa1748ac3b1b5962b93d3ea513\", \n\
+ ct: \"bb088c52f0b143d0a3b016a4ef6edc0aa924383915817aaf142d32688daf9457bf\", \n\
+ tag: \"6cc934cd24bc47316663506f68f3d38e\"\n\
+},\n\
+{ key: \"a8cf10562eba86d2c21efb0e0a1d97c3\", \n\
+ iv: \"57d15c14970e8204d689cfed\", \n\
+ pt: \"5220e8164533d90a0ce1d76abd434570d7ed2a960f3bd73802ac9f1d3e088480c2\", \n\
+ adata: \"ae5aa67811888f202f2605ece2c3b8b8fcc3eba604b8e1550076b8946be6ada5ce5b9f4c896e0558c97e0b8dd985f7455e078d22e57a3922c1bc40dd3b8c96df827caf726218ad16920a4f3edef7a91c4b23b995cfcef28126202dd37051c70bf3975fc1959fbd4d0d3c27731d424fd348b9af8ee47a2358376eb28174e19fb0a2f96f0aff1f7bab2a81fbd65be1d4b9fea66fa8d09bc8cb3f2ec1167ea938cbad4bd825665ee471c73b44f0294f4b988370bf4a70f990495c3c270fe6f67a980b\", \n\
+ ct: \"5f732f25630d26ec4830329936d4ab2c057698641659295caa46a517c8b3d2ad5e\", \n\
+ tag: \"70a5722e28d327ae2db73acde1fc8af4\"\n\
+},\n\
+{ key: \"d34958fd45bb45896592dc6346871b9a\", \n\
+ iv: \"cbdff63c1990620b\", \n\
+ pt: \"457063a66e4b41a90b37d60d4dbe2d8afe49972a69e113d972615d9a1ce588b679aec9f10366b6637d948cf8927d40dda448e460\", \n\
+ adata: \"5bd2865ce16ae606e93417b8f4b360e0c069f81449885bc61b0a9e228c27e4ac62e70ceca85bad401836a56431e8a594f5643ebd0926c6f99de49687a4598450e37708a695a7b6fd97e0ba65b4969a96f383b515d7bb8c0609dbaae2351566dbf2488a7f42ec29590ae28cd6c864254b6bcb2bb3742b54d4c3e9b511742d3af4cfab20e052c005a49fb1139fb95ecc8b89717d16f2d9619bfa4f47f4c2731f4407eda7c4e819e9fcd3e596ce0a796e6c37e20b4b32d33e039084\", \n\
+ ct: \"a1a921939c65ba5a2757d1f1b49da2afd2e21d290dda5c62a353dec4cb8557ca6f2346c68d243fa9fd6598d107ec8234af5ce783\", \n\
+ tag: \"346e41627eeb3eb4a9cf7e4eafa0d8ce\"\n\
+},\n\
+{ key: \"d370e0ae90e11039437c2f073cef046e\", \n\
+ iv: \"dcde1d331407139b\", \n\
+ pt: \"a1f86fc41dabf1405910559fb64e884c88b0004f95d2d9d36ffcc61e17c8cc79087ebe4e1ec0e544879d4577379e83fd99d197c6c440a05b0fe0071b3b18a369fdd137a0612b93139b4b150fb932c05e1ad2182061b2ea0909eb26845d0c43f6764e7947560f2424e10d63bb835edbad\", \n\
+ adata: \"0097dd8517393ef83fd9abad44b977e63d9d75b4adbf98b8bffca6e1c3673eb4566dce68a6005b306a007acd906669201ad567142b1ba1e0e48a13a36364ed29925d28992ed4f630aa2cae90f7464cba96aee235007533f48fc7823d48d9267c394ebf8963057a729c85387392bde219e4c2bb4038a9ce2c019384b3096c206b\", \n\
+ ct: \"ec6fa1273f78d601d1308e8e7641f9dce4ec5f3f5317fce0eb58bb97ebe106f2cf90e5ee0144ed0d7932e276e54e2027c7581f37dd6bbbbbe62fa3b896b9712c6dc4bf7d36b7654b68ddbf154a57e0d71302e951cc53b9e7b4326f818db9f1c7fe1acd567bd495ea0bcaa073c1ec09cb\", \n\
+ tag: \"3f4dcffce7d7d578e93ada177c4feded\"\n\
+},\n\
+{ key: \"dd4996d573743eba6064c6625accf115\", \n\
+ iv: \"c9844fedc2c8fdcd7b8a6908\", \n\
+ pt: \"9d9394fa5639ef13ebd54c0e58d747e581830c40809e987f99f4ee7822b280b0b38594f1c766f125d45fa8beed91f603960a2751a3ec2ab7df330a5bc98d54bbf8a71cf6ba1dd2c9af7365a3cd537601e77b4b9bc71e8562fadba0ef84a52962fbf62d33a9fc29ed95b7f5db5115f29baeb7ec8b1046e2e226001092f988d8662af0a986544a24dd6268525379c439c2a9711b36a3c3b2eb17bc551e7748ec\", \n\
+ adata: \"71a15928b88a8855be3d9ce84c56141d9840dcbe6b92c9957e6f28281b8e91b60a9cd8eb9e485ae752329b2b72eeb54ca9636a33931118bcec41bb651d944c6e0b04b205b09512734fb5d96a9e8352142784c11e3a3fb8e0ef5f896f662b17a116cf86f202b4dc840cd73216553356cd3e0d246ddef02cc6a605943dc93cb0bd9c441c22e3ee6e8191de77a1d8660d2f38f558ee0fb8c966dea47f53ac0bf72b225a6e4dcfa8d9d1\", \n\
+ ct: \"482248220e89c17aabee25a586cc045be251a2ad78ab1b10ed04420a7a2cdc6e2a3f4663e197c5f52b8ca788e66efdff0179a3f867fb64a529b694e934e22ba81ac0e7ffd2bfb5d226a0dbcc986d5a92cf7122d0266b1f8f26e074ceade8fb3d2818507379aaff741df57a33fa7d897c0a667a56321f8062a4bcb47fcd7f653fb71f1e884387458cd48971e623207b62da4c85ace39329654ab0d191fa6a75\", \n\
+ tag: \"4d282acb6e1b9ee1f2ac4e0918823765\"\n\
+},\n\
+{ key: \"3213ab2a4d7a9c0028ccd2260c6b33c8\", \n\
+ iv: \"efa3e168305fd9b4e48836e3\", \n\
+ pt: \"9306a37fa5d41e8c1a0e815279709477bcd79b4e54dde535\", \n\
+ adata: \"5d780776900712b3355aa40494593b04f7215f4e0ae491db446f1fd251edeab7c7a4d77d64c7b121105745795c307884a76ce56c3983ffe9145da01cbf344b35329a77b1a79b55c85646ef0d00cb3d435c29006c7181d9fd834754f25cfd84276c571ba51f9b665e17349b241b9dc62e90d60654fe81c75311455f7b834d321610936c40bd1dfbcdd18de08c20bdd1b6a85b5942dd8384314f8ddf3360e4d731\", \n\
+ ct: \"e59af43ebfb173a2ece8f3b8c9cab58d0445bbef03dcca98\", \n\
+ tag: \"e5e8da9b7914169174198dd6eba782e9\"\n\
+},\n\
+{ key: \"6796e9bd9971b1482bf10414ff21c56e\", \n\
+ iv: \"37ef32376ec5a5e9463a8b36\", \n\
+ pt: \"4f6a832c83ec67bc4a53b45bb82bcf8b6e8535afe0ab1b92b1e3f06793f7a2fc82aa6ef369036c8aafdca6e47f9ac4bec2b3424fd236d9af5a18804406191394d1b94501392130867a6b1fd23a82b48d77ed4731d001f5d3c3407f8df7285a30f152498da8b0e0e51b072c55e8982b72c3a62c3ad0d35de75a20fd8ee3bfef83b473918cad4bed67268bb4a20351\", \n\
+ adata: \"51ebdaf16e454d7eb81b16022e0bfb0f7b3e6616f41db3e01ac133159d2f96d4fd1736e3e10179ee99e1306b3b\", \n\
+ ct: \"79691a434df58c62758c5bb823a60da4d2bec85726d2df97066d78edb1ddbe038877e512a06a77556a836f25a0da529fa5c74bba065025d150035c79b087f1d5003fd91f94234b1d2576019d0e57b3f13070b586793b6551f88aa8568a50fa1a5aa1fe849281dea321e35ad731c3297aad4f2232f3e66e8615918ca5493a01acdd1c0ae7c64ba0f1ad9b455a0e76\", \n\
+ tag: \"43629bc1b7d9bde8aa5fde8905e8417a\"\n\
+},\n\
+{ key: \"3d6d8df7ea99687da08f24fd3462e1cd\", \n\
+ iv: \"89b5b53807d5f407\", \n\
+ pt: \"dfad812a908938db67ef37700da77001370851231c09c05e91665abd2fd18050bb10bc74a60e5a4aba59b7ff3be0975f38514c566b11e21e64c52838af89\", \n\
+ adata: \"bdf5793d494726fa72ff4821490bae7596dc1d16fe92bfcf0fefb9608241e0b6daccdb49c5b44e692c61f7030a543b423f5b8f56b73561e6dd06d09cd10e61d349dca181\", \n\
+ ct: \"76fdfca1a47e1b8d3cfb97c7aa9c3fda2c924371f46159d0c4c78b8b32acfc8e0bdcb901d3cff6a79ed5dcedf0dac1469bc652b9e95141060b0f9d0d5f0e\", \n\
+ tag: \"2e784fb9139a1de3daff2f0ed295482e\"\n\
+},\n\
+{ key: \"33c02db05f17347768caae62680b2a2d\", \n\
+ iv: \"dbf06026fd50b378\", \n\
+ pt: \"4d55d7a16624bf4408359059ca716a75d4fc94a7e0b915ebb9f95bfddb9524c31b53aa5b5118916efb7f8b296b8f14c2dbaa589af6d3cc9a4ff923b1fe8ff3e9042cc7766dc2d40d375f1b5bd87ff84a7a90d2808bd4df1d42d07fae73277aeae579730caa3a96bd5554259b374a5b50\", \n\
+ adata: \"f1e6fb6cd486f19f8cdc2376537d14f1d7ae724deee0c267d5b5d5f2374aed731f6c37de8f61b1f439aa71f1b00b55f905090ea378152282a660d4f054ca13ef8aff16dbe5a6e1c31dacf3a8369a382b9317c4ba089b4edbf8f4fe3337c23c319a7aaf89220a9c315d663451060afc844a97f26d2c4ded8d6673c3085535b21d028054bb65a1bb0ef69880075558101c26213484757de856570c\", \n\
+ ct: \"53ba6cf1bd3d82786d920059916b5a9575fc633fbd4e207089018976d7b84c817a4f7d43b83ac53e349f293def61388f83ddec70538bfcc97b4f5bea28861863dbf1a1b868e3d783535aa51f494e798dff94230931461fdaea30fa34605b2540c5de4c15abc8682fc7fea1ac1fde0234\", \n\
+ tag: \"58de590c3b8f2201f533894e395c4f70\"\n\
+},\n\
+{ key: \"d0bc4b3bfc867283820aa95c03a8e9d6\", \n\
+ iv: \"79c7106e8ef1b68dabadd3d9\", \n\
+ pt: \"18cb032bf279c45cdf8603c61fa84819f4644979a312378b630d419a30f935cf48f8179ce205682fa083c5ad\", \n\
+ adata: \"a71d9b7b6c99d8262d6789217be0d271cf2f19c5e452570e0aaf588a69b4c044035d667489cd28a8114b814cf4cc630f594132eb363406a3f98c5e91b486948afec1bdc1e68c021b\", \n\
+ ct: \"a8f7a73025551f82fc87a702342b36396eb075c3ffff27b0bd0167fd024d4a8c1f9d398b55e7df089f757cc4\", \n\
+ tag: \"3f7c93d461fe1193448639c7107aa3d0\"\n\
+},\n\
+{ key: \"a8730a2ee8e8dbdf95a85f5598f682e6\", \n\
+ iv: \"3b4ee82f63b3b3d9\", \n\
+ pt: \"b533f3e0271d6f5210fd7f7c18827b95740f75f6e4435b22203573027b4d981fa59a702b1f0895e0a7c8f1b239595e7bd0bdb5d853b869\", \n\
+ adata: \"211b34df4d9acb75bacb0cc0edb9f8f8b9bd63219641\", \n\
+ ct: \"2018e286f0e441ac641e213dbb8b30c33f95827b6c118828591e206639f327a957a86bd66d4967c3934297cc12e8daaba6ca1abaeb6b60\", \n\
+ tag: \"80dbe3c0b32c68a5c96dd9b8dd3c0cf5\"\n\
+},\n\
+{ key: \"8bae594fea1cba4275ff3ea6793b0b3f\", \n\
+ iv: \"d94febc27bc39b8e18a3debe\", \n\
+ pt: \"ba8b7be464747990983a18244f017f0df80f0cac41772002d9b3614a19bdc061dee588dc28d93286cb6e0002f52197d1109fe3ebc73ee5304482a5e6245f3f4d6b846e958ecc487e7546aa9dde373ffe264fd4654d41eb5caedea8aeb060791832f712b5a6a14a96c223ef481bf93212c2242fe35cf9c2acc5b46592cd061b078c96804f866f4dc096fb75480a1ead1d7c9df79be9192795e46f11da6d8bd578265ada2d43c5a48703b4943d904485cbd14cee0526e58ff84d2e5e7aab1419c5c49f53a0899b\", \n\
+ adata: \"e2a5b38e69bb5767a5a8d3ac246edeb994f3cfb4f1df943970146c005aa1bede9bf0ec839290566dadaeab5e4a89022fe79829fc0634a90b554600eaae622f514cdad0e524a9\", \n\
+ ct: \"75bf4c1dc21df2f56a995c663c58c2819d506a27f8865da53dd80a1c8f7befe1e6082c6eae1191ed67b2353c9fcb89f585ea1b4aa2e13f1a4562c9ad5a00b47f1cd229465f4b20e28b90672bf7f88186f2be9767c4df0f4150f87e35e4772ee14d8a0de312f6ec69345b9389ef903eb0a51c44bc3492f1887be0bd9f8ee7400cbcf264d23acad8619d339f1212d875bf111b24a552a55b48d464737a658929fca867b48ef991fdcc189000710ba4629e74ed466f28358f4367829db782e15401f22fca6455d2\", \n\
+ tag: \"367e5a3e2258b35385aa5c93ca1f0acf\"\n\
+},\n\
+{ key: \"03b1725af01b64d9fcab3d51e208b807\", \n\
+ iv: \"75709b4e688790fe\", \n\
+ pt: \"fde3e10e617dcfb1648c615049769268d9e1dc89dbdd9c872b9a02dca282155a0605999f51fe9d2070ed062fb02f42424e205d9279a8046d462381c4f8dbb52e95289813ece23cea959c5d252a9c24a72afb52beb99c1c130d5cf34f3855dc8014e2ad61f0309e0fcb315d\", \n\
+ adata: \"ae4a62c9aad3898c551c15686492e6394163dc4f7ac1ac1db65c6fcc3aa61a62772a0715b3fdaabf15be225e601004a600f895fecc3b055179f7a73144a44ebfd785f309f9a47788c67626c8f05dc066d0bd7933eb7cca830e79232b316e77096d730a762c4c8ca1ada8f87dead747fb9e043588794c75e7275491731b78\", \n\
+ ct: \"aed67403b8b9a893d7268dfd3560d67419adbf1c6b233b6e50a3050ce57f4869ed8c1a9e9ff956404bd9cd2ed70f22626247fefc3a9a42cfcf92dd536ca4554daed5cea8c2c28b45fdef9a10fd45d586e373941272d30b58ef8506034d2a452a158ad441987c6ffcce39c4\", \n\
+ tag: \"27729c9940b11edba1370af11c76d0ca\"\n\
+},\n\
+{ key: \"1e7947f0004a55eaa6118bdad7476cec\", \n\
+ iv: \"b3bca8ecfd168c99\", \n\
+ pt: \"5a92e275f12ad7238768d8d6fe5537d8fd5303d771e22a7541e01267ffb6c1a9985812f941ef2a2fb1f9838bad66890950bc31f17b78d494df4c71f89c1131c3441929a925e6ce10b5ef090c8ceb0c5bdcab5c228184207e4431206697f6283f4a7699943d66bb751a2c3c828cde2c44d3d0ebf5271f8973a654381a21a4d9eabaaa\", \n\
+ adata: \"49bff3a3d31ef2c794e449be1d165fdc70b1918a02930d04fe027746a6ffc268c0d6e5acdec9638e417c170990bd13\", \n\
+ ct: \"db82838faede4edb1f31f75019e7542443d856c18ff426a398d3909d7abe5dfe71312da4762d0c05faa2ee4caecbd4093c5cbb01858eec76f3f3ffbfb419b81956a76bc1682542ecf5c80e40c492391a3766799b2427f305f34977ddc4a8fa9613ae3b4543c6b7663d305ffd78d4175a0296ae772127161279a9f731f93a217e27b2\", \n\
+ tag: \"22d637ade46b057dd5c437459c55aeb4\"\n\
+},\n\
+{ key: \"4fad744095a4990ae3472b00923ff38c\", \n\
+ iv: \"79c0dc3189e0348b\", \n\
+ pt: \"66cf823edc397cd979a8070f17a5555e2ea79bf5ee6abaf6380f1871dae557475333914655f3dc513d0a11b8da68b53076f49fedb48bdc1e87358f01ffe002cb8cd17c6aebfcbd304bbddec0dadb8696027358576abe799cf0bdc873ec582bdc941446e221d68b7788539c1a4cc12e76de069088e1607518b69c178fb47b2db75e5e128d5b85c81407b959063665946df0d82565b0c7c410642398c0\", \n\
+ adata: \"f2c98380ecf511f77c8a3eb6690f7bf4bf1c9fe4d51d21576f4aa48401c3ff8480f7acd620e5644527252991f0959966406cd5dbebd79cc21b6f9c7e5a52ec82a5605144f41990f52d911e41aa0c5e145a96722712971acf09e28628fb\", \n\
+ ct: \"66bb5fdba714ef0678e067807a09ab5f696db9bda8bd8c9fd5cd2fd523b14869c54619acc4113db43a35130482f97e90d6e7bc859142fa94016ae7ddb8687fd868feda210f9beff6799ad03cb762b1665644c2700ce45a5d827e9c63bb2dd158d1521cfb55bcf9436b80994a013d845492ad05d6e43e753cd032899543d84311194397ec323fdddd098b24efddebc8e0571438f4fd72a27c4ce1ea6c\", \n\
+ tag: \"351b68728f849554204c89c3d3fc20a4\"\n\
+},\n\
+{ key: \"0d7f4fd19dc968b666048701422fa339\", \n\
+ iv: \"740720814f5cc6a4fe5c0df1\", \n\
+ pt: \"c657012981df58bf0c7bb3143da66ac02e32203dc7d7b147520af3bc0e96faa0e3a3cbf3573069aa2abd9ce4f1b21133030bc0bfd0ed3821ec814ad8871970a6310c428987e09e4afeb37f0ee1b7d170c9a622888b58a9bf4c5a16740a3b0d1ab302576db224a8adcb9d1fac5f82674fe5fa3f3714446b5f43\", \n\
+ adata: \"ef8519ff6cd4ea219620013aa97db0a4cec2bb76039488b08d74b9b32a0968d69b087abe9be0a6c585e4cd9dae352a6f929273222569ddeef97407e3f24c763063945fa071e4fed1e5dc0adf2e2ba4f17511363f8046f48252f8aae8ecc53555\", \n\
+ ct: \"c93e5f39c02859fd3c2c88c44cd7c17c9fb6ddea1af7d5759dbefccd58cf078ecdd4a44dbae635f1344222d62f222af39179d819829326d51c9e674e0731c4b8c6800cdbfe2604a4f5735bb8a95119ea2d750587bf11aea7f3300420fe43eeec45d98de8f0aee08420f0aa09a71d3deb82cf1b6f42e36205ca\", \n\
+ tag: \"6ba9ac8bc9dbaffa658ec1c7198b4c47\"\n\
+},\n\
+{ key: \"16b0501dd9bb29b0b8b1982ec42ac39f\", \n\
+ iv: \"42e111b7d5ae6072b9b78f00\", \n\
+ pt: \"e351adb96dc79fb8419f4483c57f122a95bc47c7b92cab685faa0cab4363f25b07ab1152d01e0be03e3177e786a9570176d1a1635b16f1a034fc0036a98cff45ddd8b7dcbddd2b418c82eb66a795020cd006f6a292c004fd232fda6b868644b4a0dda5c7420172a76cc0d5f9ea1b2b06c25ac3fbe13b22ff1704c8f7ac085095cac0675aa8e05393\", \n\
+ adata: \"46870532f20bef96501c720b20\", \n\
+ ct: \"36c2ba9079dfa944e21e67b3c98f811aa5c98618f10de09a3b6c8f55dac9e6d831b1d216335e5d6bc444706a11fc130b36061bc70f9385587ffe299d010cb24458bc69276575596924b55db668aed322393fadd97c3e69cd1bd3bbf23e402dc57f127f03907398ff45022bf7bd5afbd1a2152a052c7d24beee5688aab7c02657de5bcc45b6039f02\", \n\
+ tag: \"0b231aa620d084e7d6624324240cfd6d\"\n\
+},\n\
+{ key: \"661cb7a9f0126bb8a7a82da94a37506a\", \n\
+ iv: \"8b89adff61218850\", \n\
+ pt: \"5478f5f04df20d9c75eb1a4a758f81ce4529960b7fe7b4931733fc6e8132244cfeb4ffb420e03a660d870a5ad8bcbb80d5bf611d10761a28b53ea960e60ee99ca3c52b7282cef1f098bded0abe98458fe1dfa0beb9984f73e83af52d99d14d27e3168d1b0b00bd58e7f7e818668b228fd387277006bb7f5e14cbeb9b945970114c0a811a5cbe9f219c4bc4609a8d5d20b6f676a33d0a5ea675e5859c6f8fd166d3f2bdbbbe09c24cf7a9254f153930e45495\", \n\
+ adata: \"1d98d3643377fd8b115ed0e956138989cdd2c83a2aec77e33c6d970a58bafb5bb03c79cb2d29db15ee056e09e3f6c97ad0130661e527db183b393ac4ae2b8be2021a59cbdfb08934140a35e2d31d9657714545c98685971340be2932463eadd56ae1473e5f9ae07eaede7c2abe40b35c46828264388b2fa5998c49787a1358d8060aed92064c76225094dccaea9ddd43d8147108d2bf9e9bba31249c22ac5d3e7502dc3e64f30da796891d1ba8\", \n\
+ ct: \"d59e8cb15e730f079e7b2e5b2e07f9164e30e4eabc7a5373cc9d2098247bc513ecea1afec4937e67a38187f1000bacc3a04f11d473567cc7c7bd88832f2018ad145adcc02728cf450631d6e7c4dc86c9f2ffff0f7ec4be9ef4fa58f28a7f58c3e9091a30111c8c252ef4bc0341d5233b88693783e8bdb24345e22f7e37ca3a8deb1c1b5ecc7be8e4b591a7504f302097d94e36d5d2777f13f5744d6c443df6bcad54c124379ff097ecf668463600ec87426b\", \n\
+ tag: \"1ff69885757c9f7a4359cc166f947f9d\"\n\
+},\n\
+{ key: \"81ce69854defb431b6f415d4ba221949\", \n\
+ iv: \"c42a44b03a908635703f009c\", \n\
+ pt: \"fa6d72a38ce4a9258097cce9a9beaaac030278a114d0c392c97cd524c68ecef903c820eef3260a792d8a4eb1ef3150a5e31c3367570afbc9be4b47d852692b92c22884c7db8b96bc663e61c5b18c64735d162f657bbd910c1900705763\", \n\
+ adata: \"4d813b7213419821484575420742d0e27d3876653ec519647177ee55c50eced1b6bfb12567aa2d3c9e48bbe8ee9fd6bdbf3d37a79b68cd79d961a141b2ff21091565b3a4ba8495b4e4edfb880362cb1b09\", \n\
+ ct: \"5351c2ff99d5d4263564c934c24e2865792ab084c2943bf3fbc90858fa4815a5942fbdff4ac90e6f95295acefcc2e714f85bf7b127777bcbe6974a3185a4cbf78ca655e1c126f6099dcdc592d0ec22c2a290e1964a18cf41e6dbfb6406\", \n\
+ tag: \"9928ae9221e0df47638d50fec3eda3fc\"\n\
+},\n\
+{ key: \"b7d9c5e36c3ab572f2e9140944afdf6c\", \n\
+ iv: \"7f5c69c27b3a3b16\", \n\
+ pt: \"6048964d926177bd861b91af2bcb50189a42c0ab150bc2c3700eb69437bfa54715aacf3351095e13fc23819ecd895b518131d2881f0786c53497150a658b00302b09db7e07cccd056618d9943cd2143ba7a02b520140c9fc66016fe11f9d10f7dd2d0fbbf3c10196c889ee33d5b5f7de1e202bd2f31521\", \n\
+ adata: \"d2ca206ee4e8bdd454101ff75558cb7f49ee5df30a26f5f3150f6a1c1efb7607115d910080af0f7eae0251024207db37d7b0fa02fc9dfc8744b8efc24d11e09291d0b845c0743f846f29ff320373ffcb7141b2be929b729d0971722706bfc19d001d0f6ea1112f58ff3f2842b5dfb548a5417e0213738726830882edb5eb572dea1b6dacd081173133dd464adaf1b5f736a88b24fdaf793c863bc10f271701748d89439215781bbd87\", \n\
+ ct: \"7d032df515f85a1fb7216762c2dee3c9766ff0d592db6d9e071469554fda0de74c20dd30406ce73a2f0214953d1ad599392985a0e3d8fe327380d54caf741854a343e0fac79cf564bc0f609e9598f85e3afc0718d27be8fe13bfbec4c54f84e8df2d3d7368de8845a73ceb58aa0f63ece57c0dda94b79b\", \n\
+ tag: \"4dcd665bb802be04c0c93b59fefe54a5\"\n\
+},\n\
+{ key: \"d15491365d02df47aacfe5d2adbd2426\", \n\
+ iv: \"305c75c0be19592a998529c6\", \n\
+ pt: \"b2b853463db76f7c7d85098db142e94724fad0dc71353f5191a0eaec49c44defc16dbfb839788b2faaad352bf96d8b278d8a4d15b1b42c1b20e77d296facf5eff6e3739000d8f31f\", \n\
+ adata: \"3407c9683728a9f170ca7189ea91d54ac280bee1b1a7f4d217820fd4caf02a898e085f964d14ef8ba5d5c0458363\", \n\
+ ct: \"3067a416f868f3f214572e5b1117e33bd5b0e2bd55ac24dc92fbcdedd79ae9ffcae429896375d0f40263719839c3b3e61b135dd60d1a98bed12af8ad4bc5b94f8ede94dc642c8581\", \n\
+ tag: \"67f0030fe61f5a5ffcc7723a5a25edca\"\n\
+},\n\
+{ key: \"4d337e5dfe1e269b942300f661ef8cc1\", \n\
+ iv: \"c0d0d28b43b5956d\", \n\
+ pt: \"a75c9a9ebb75fea6e49094cede4c2d59ce151638cc0053204b3f09aead59b87c763be42f34a31746506dc20f6b4a923703b99c46a6afd6aaf76ef8c0dcb3d64fd74cd78e65b9b9f6a686a7e3bb04f66eba67f7d1fc12f567f5007cf98e73f0576fe1da47612777d069be7a8427088296d2dd876143b2305cc36f4b8ba614d620c172d534045f852b312f9c186fe7821227c0d8791f2f147ace19d511146e6c255ecf2d61\", \n\
+ adata: \"10132e9a013f45c5e00a13fe82f64d37eaee4e686a067a013c2710a0b656c4c06a441ccc266109e21a315839184ddfa85f7d57059b29037c4c175dd60ca28553f1d29dc7a3f935c025c290ffec14da692d904db65f682aec5ef0cb8d9120dcc5f3a693a4629ad2e352ddffa72a35118eee804cb866d6f516340bf08caab3f37cf4648be2343c4b717fac7213c21af10ea5d0b54c54b97ab044eba2e686233c96a16733be9c171fc334b00ac804496090d7b711b8d06197b9133296\", \n\
+ ct: \"51f57b15de517646bdd473c7ea2be1de8f2b2068fbbd757c03fbd9004dcb255ea967d3a32963c412aaa44e3ffffb4b047782cebe14f353dac582624dc3ad4ecb21dd30f2ff93de0ca76a0a13a50667932a65a3e6bc179167d65303ddaa89b4ecfb4cd09fbc4ae2b6e9896a0368fad50e44f67697c57539caac9a9aff9596dba68c08d0364d91cd83848880c8462a7bf82e9674499871ca86be4fee0c0947f5f54fb9ed28\", \n\
+ tag: \"4b282e3742d09167d0fc36e19dba0d38\"\n\
+},\n\
+{ key: \"abe476670e11e0b9afe19fadbd56afe0\", \n\
+ iv: \"efdbfbbf9357f8f1c93937f8\", \n\
+ pt: \"4a2f89a5106cc03c35fa23383720eb75890bf4ed0f60dbe28d6929647df723612481cd3480f64215e88b403344307a950673e3350fd026f5144b84528d80d614757ea937df1d585024e63bdd8a1371577b900bdcc4654b8825cab63f50ed9acc965e0ab172ccad02bee614bb56a33f3903091c85fffac358e2be29f081b80e45aed0e4b361825ad88061a0a25f5868658bef7a2354fa\", \n\
+ adata: \"3231009b8359b1b996b3810b31c3005695a4add2ba3cdea9e18560ae48286926de657b3bb11ce65c936ce4572f7693934d5bdaa4ad5b0e8e991b7a30279c71ab7a3b5eae6dcd90a4fb865fa8aaeefd89685fa959654d5fa2e57234ca471e768f67535cad18b80de3756318e118368d4126a279300e6b5d2922c33e8c2914c5c89d60ef5fdaecbf718cb98c\", \n\
+ ct: \"0faa9a80aaee3b07e450fc19b1afc4cc6dd680b30018ba3ca85944b6ffe5a5f19ced526488275355f742482ec961d80ac9a6e37fa9671f9f8384a7d09d747cc211fc4e907ae014e0c0b354c63f80b5f0bd611997c546b155e604a29acf5b49e747a10f6a56a1f86df46e30e8b068a7fc7b9f5fa147f1e5181b4b10860fe8c5b25bc0a1b5c303487c99e9f9fabc80073f41a7a859fffc\", \n\
+ tag: \"810640be8514bc6e6bb72206e1fdabe9\"\n\
+},\n\
+{ key: \"49e06f810e4aff42b9958f69cf86528a\", \n\
+ iv: \"b25cc6931205f6d32e25420b\", \n\
+ pt: \"8fd07add7f0020c3d0cacb9b9fa8cfc069c6f5b18888a8ccc99c74d62614f43a9cd83873d9ebf93ef4093966ccb041a699aeadb75758eb723e1fbea26c957be5cd325495733b34405b3728d56c6f6522e684178dcb3635fdc349bfc5e7e957c1ca233318b09c7a2fbf7e94d879058e86ed115938c4a3bff7be46ae00c663d8\", \n\
+ adata: \"1338a7afdc7fe4cb3cf32d08105936cc2f3654e7fb8ddfeb480c62188b25ebb0b91fe5d34a1a950e5cd2a182d6ba24eea13fddeeae13c95c319b167d55d5bac2fd887c8e1894cbf659595a2121d2fe9ee421b381916632b88a92d79c9890c0a7db116e377519bbbe7c8e4e67d99272a8cfa697d9e890848abd45c7ddb350b7d3\", \n\
+ ct: \"5cfc53fa112f6d0710cd3bbe2fc32f9084ab8c599323f59beff16d8c96f0ac9cdb5eefae810e474bdf8a9cd2ea8ccf16e63b855fc6d77dd341e649812432fedb7a18821935177c41d3f054f9f2aee9f8e6614eaea4a7bff36dfd56126a8cb10320436725fba6cb0d32466cb685097a70d97b0dc7b970cff884d820c0422ff1\", \n\
+ tag: \"5478346e185a5fc6529ed50888679ae2\"\n\
+},\n\
+{ key: \"5a20809ddf1dde347c3e2a196cbd0bae\", \n\
+ iv: \"cab0a3b75001de4a\", \n\
+ pt: \"ed83770bb2d48f52d5cb2e20f66988247aff9fbc6f0479e002ded6bc95c3d07621a41365b7a1950355971607152dbbfa936eaada1a6cec552336f78cd910\", \n\
+ adata: \"595de5a37b8c52aec7a9f0fffa32347fffd9d5e6ef1f6fba4404c3c5f3f3e2f4d73ed4f82bdf9dbfa2eee668\", \n\
+ ct: \"6e744468978c1fd2fa0db3abbb9a6ed15313cdfac947608ebb4e15dc80db585662981826c214d49a747642b864475c246a54af5145ed86e9190afa7c295d\", \n\
+ tag: \"318cedc9ee9a5fca32040a9c307b9f9e\"\n\
+},\n\
+{ key: \"6e2b84f39f49d24f7d3471cdc1014a1a\", \n\
+ iv: \"8daefc409e9e4f424bcfc63d\", \n\
+ pt: \"4dee3b79690bb9a056c632857d0f6fd11c8b025481b7cbc1a8d1d1816e3387c7cd13bf8ecea14ac490716a46b82c7622e9e9c44d712c649b17b1df167f3e8caf3996b714354621ceb0da26e3487e93126c0837036bea3ae782d06693e0b840b74f9b32067a6ee1e83b4bbfe64667b0ae9c98f0b8\", \n\
+ adata: \"38338b7abf03a60d71eb61b0cbc8ff5f17f6b5d1b37d0b44c24cc62beb3d1fadb45b1a8ee50cbb7694d66e9e863aea75d57786cd79616f63dfb29d81b24c3c27b4b365be\", \n\
+ ct: \"29d3638b3ee429020dbad079b062b874990b560d94c0b0c830509c502d4c3cb9d7808ca59d71363c9401e5def477d07028e2abfb66757ddb0cc2626434caf9c2cf750814b4d8759c4c6cbd9793665f5a42f2d98cba97c14f7d5c9b9a7349c88ecd7cafbcbc1c7b6b1f8b3197e7a0764abb87aef3\", \n\
+ tag: \"032dbe7687e333724a540a0598e008a2\"\n\
+},\n\
+{ key: \"8d3b3a0b2c0d204f41f5d9b77594cf4b\", \n\
+ iv: \"2e866f5c8674af5a\", \n\
+ pt: \"971218c30fb2bb2faa82ad36366c95540835e2733007e1332d75d05bf8ed3d76940693051b4dab3c8ba9d5296d293c1af51f1dbed4\", \n\
+ adata: \"01d2161c016811a5eb7d6bb404b1db9e1375d009818ce1cd92a20bb2623f7756e30eecdfbf67c0a0f8773821273968bfcf8ee2c35449fe2d37febe\", \n\
+ ct: \"d5f958fb1cddaf6390d18f946dc460cc1ad3ef375cf75d2273c51d22378bc7123cd52c9f6e46a17d80beea957a95f9a3cdd922033d\", \n\
+ tag: \"346f10a7ed1f8c2eb5c920feea763cc7\"\n\
+},\n\
+{ key: \"727a9b4a1c6542b88020a4c821bb859c\", \n\
+ iv: \"51758d58f3cbf3c21d500b7f\", \n\
+ pt: \"a77f52c5157053aa89395e36c8026ac8abb026a0cdeff2527e6df8bf6d4aa5e2cfaafd4463aceeb8571e6a0bc7cbe797d993f04ca6c2489a8f6175b1f57c5194fdb3699691bf20e19230a8a723c7d90b4e5a67e961c7b3cee63725b2bd3b170f97d05d0c6a43f06eb4ac7055ebdcb035a3d6e46a8856f2d9ea5c02e24ce197b0ce6186ae48218ad36714e1365aececc15e0aa3e444ac\", \n\
+ adata: \"7639e635368e15fea4cee62775acf357dc8e5c260b320d7d35a06ada204492e88707392bd3025380524b8d0e56ba91d58b4736c2563292b31b62fe404aa2cff1f94206444d7c0479cab5cecf8ff56ff35a2ba8cca101771365543de747ff60e8a121e89089151fe951cb7972d3f1d512cc9633ecdefbcdf7b6a9e2ae90ea7ce9afdc83a57b43b98399ad9e5c9036997063644f1c7ac3f70b\", \n\
+ ct: \"58927b101807cfcd5d876b13e7c4546cebc4129f67f63a82c2a2e13d2f7e0c99ee4ad59f431cc9782857b95b4b7cf577d6fd93e91308c172ca31b9cc015ad32786c56a16d5ea030757c07c17469d91117600b6b7a1f0adc158581ab31bf4fec409f64299be1edbbc0daf1c3b409a4d2d7fdcaa9789815329a80875f26cf1a4b33236c050e8a93b30f6c0bebf780d2f1de25938cf945c\", \n\
+ tag: \"11c80aa4a32b8946fd87a5b1ecb27f56\"\n\
+},\n\
+{ key: \"ba2c1c2f24497d2a092fa02e2f5e0051\", \n\
+ iv: \"5ae9e49da9f7d71e\", \n\
+ pt: \"2642d817655f9a56cd56a4692932325a49f99f698cc8e2fb12d9dd4567b50ca6dd9e7d4dd5c765ae0b77dd7c80656fcae6d62ef98546c69d64878ac693c44a539d745506439647c058143c107d3282f44aca844788715421c58c357d349fa5993c685ce0204b881d5eda24ea\", \n\
+ adata: \"e5669cf6deda89b116edb181db0f3de6baaf74e5e54929610151d44a491233e757baf7d51ad3b6c362ba887a81ccf47737d267504b9a3738b0a910a327ac9a05a90f652fc52098eb20a22956614211116b32fde311a95526e43e616d528700dfce02d8c72fb0647417a37058a1729e96bfbfe6c35f0890c30d00a05fa7140cec668e296505f66cdb7935beda2eebca871cff5ac798244ef765\", \n\
+ ct: \"4efd7d0ffd85ab61c43932c093506e101d764707628ce0d6316916527db1608b5340533abeddd4719870091e77dbb2ceed9e11e703d45bbe814f06cbabea00bb4ce47118920a824324700c7b53e2e2a98922993974129208a402dc430569516c9e08657a6c428694667d874f\", \n\
+ tag: \"e9193bcb742e5439d958a505f7e20fa5\"\n\
+},\n\
+{ key: \"4b4389e88c7df36d31ffc4e5af6b7011\", \n\
+ iv: \"05bb8ba0880fd55dd8558ecd\", \n\
+ pt: \"f7b47df91595780679206b59785e08d7e5cd425e446676c8db04a99d3841f6a840c1f041f6beddb7f932f31f9d6259\", \n\
+ adata: \"9a23399a02abb34b45665f4530ab59cc25ffdcba704e5a2fdbdc374e22e4ac195a3c1f4a4be6a1bda8feaa81c0f80190cbbe56ab489490d457772e77f352327a62d983e87d666405ebc193d92f8402ab50f9c3f66157d67a4908519a398e1bd7d5924840c5635e693d41c910d5f3567a3aca81d84ff2908674c1a2f35a23ed779b82bd9729219887df63cf07c5e646f40fbbbe6b0e34896192f1f61e87c4845f9cd83a3107f7654451a29294d2e74cbe56\", \n\
+ ct: \"de74e75bbc70b63fdf5b9a26f217e6caaeee6939be1d42b913b2a981f45c4d4014015e35f9c462acac070243a6a149\", \n\
+ tag: \"5579ec8f3441fb7d779287216e899cab\"\n\
+},\n\
+{ key: \"bc30785418be5e45f7c7ad1e8e0c20b9\", \n\
+ iv: \"ca362f32920a1b9c\", \n\
+ pt: \"23f9ef791656ac7d79a0673c9dddcd0c45b9d2885c310878305d69173a636567a7699bf9ec7179a7a0301424dc885a59b2d22726f8a49c4dd4832a97da987617eb5295c568191a05faf369be1532e309edef0f08cfb6f4ddf26bcaca67ce01415e50ed80332cb3e2b46bd0b2399529321a09\", \n\
+ adata: \"65b2145360a234e62e00a4c1e2ec91d2266a454a03efa9e943a27b68a1b83ae26c5819fac6d8c0fedd423f2f9bb226960791df4ef29844daa018edb0af021198abd4d25f12136c07d1d93be261821e1e0524101c2662a2628ef088355d930d9336c43ae82d2fe53f4bd23b86f1c5fcd05e28793f2de55c079fd990f2652d2b9a9a0f0d3babf4b950b40bfad9bd42cbee10cd801f62b91313b6cee11adbd16dabe3d728cf5dbf3e1088badee5e03b52e3d8534df0e77f80c5440655\", \n\
+ ct: \"0a674e8151988d92c599d9bd52a2a7e3ec83fd0481f65165e7753cbcf6e716aaa8a6333164206f94822c61fbaaa1e9726786a1ce9f4f56c77a39a17f8b8d79fa48bc578a807c45ea7f31b50cb63e5733ec529d5c60d899847a0a29467a73a5338883ea658aa207e8a6e949a214260029f02d\", \n\
+ tag: \"88e20664d45fec0313dcd108ca8fb115\"\n\
+},\n\
+{ key: \"8b97ac6b681d087bd54e96889edfbcc6\", \n\
+ iv: \"9b7df0785339302b85963a50\", \n\
+ pt: \"a61b1eb4c6601d022c3785e4e9e48c919be56b73be2d77b52e205020224dc794663b5ef26ea47d6dd6b79d80c81e3647bd9ab6a3c5922d439c675bb197a6f6e8c51b2fa07c38eb9f873ef27ae5c14e919b6aec0fcc92af674f2f040697393cdd17eb9591a0bb9bacf72463ee558662450cfca085f4462e22dbd8ee34dfb67ff6874198a29844264616f164c0f2\", \n\
+ adata: \"fad2dbfb4a7c05e6f6a0a50b378616fd2cb106491de6fad6a9bc6605e1f67543d338097cf78d1d9241edad80cc6b1a521db4cdc5757ffc321e373339c62c99a484cb4bf01451a3034b5a48d58ab7e5a5ad34da443cde27cc6c71e042\", \n\
+ ct: \"5d18c95c3cd5addc7201e9186efb4e8e827626561a2117a543265e4f4ee0cdced3d964c0f476f6dda7c392c92e584531b9f8740bc139491a42b7748d2292557be05df2c6c6220cdaa500214c6ff7739e6934fd970eb320a4773498197de9f296ed599d0371f9039cf1ca6c30ac598d980c8699c8e8b214a77394e909b48ac028d8f7b31b06bf0e6b5755975c82\", \n\
+ tag: \"fe2a691b124ae3e5f4f806ff58cc853d\"\n\
+},\n\
+{ key: \"ed186c62417a3e609cd68fd84450060a60469d14e846b435118eb6248fd19f4c\", \n\
+ iv: \"31d32cf363fd0fa7611fe88b\", \n\
+ pt: \"a2cc0a66f75065bf3ce0741f6458c27f866ddc41750e426808e95b8dad779ff3dda43d09afea842f7603db6104b396a7ab86921bb0c0e28903561087259c18bb9a95da48b8c6d909f12e4237ba784119cceedc9a312b26c4f909449ab4a9e3a059fe49a4608c7bcd7eafc9302e9cc23bf65ffd5778f3910c7617d43022ba47fd034b80b143\", \n\
+ adata: \"d2824bb1764dab2c7f6c6053b8948b9612d0513710b9899cdcc5c762a8852c6ffa72ffd81ad39f6e5a7fcd48aec6094e05fc88b4b01c6963a6cd007c6b5779c64092c558763e3f359681ed6fd61e4491240f8cbb4dce096cc9b03e674d38\", \n\
+ ct: \"14b852fcbdd8d3efa8f02d0536aa1b61acec2fc7bcca3b41513ad8b91cd2ee3e03dbc00e85363e2c829eb863e515c832de59e6dfcdc4aeb90746ab8f1c93743218d867653e0dfc6471674f8178b88c69af71044e1a3ff0d41e1361d2f0c8f12d18b235298f8796239d086835d2e1bbb4cd2dd182eb444f5434639d93eaad371fe4c7e9f1b9\", \n\
+ tag: \"2b7efa135d408dce88605ec5eb8377f3\"\n\
+},\n\
+{ key: \"4700ca4bd6ace76cb8fd5a60ab4b6d20bd523e5d4b239be36e53e9d8e2ee2509\", \n\
+ iv: \"d4120afc371a67f0720e4649\", \n\
+ pt: \"34e023980c16b899109750bf4828035f70b020cc26f16f11c4207bce4b8606fd114dc95dc24d8a129f8fea560cba7e1bacb45f74a748e25c765457940cdb656913c2e9b845142ed758bb49153a601b17d4718d7720171a7d47886fd00e58237ce6c739\", \n\
+ adata: \"ead446cff35c9c210763c95881f3e8fdc649538b89cd91a5d86349c48cf7b744e2a6657e81d3166a1a621b17931ecc2f1920609b7be3fdc34b8c3466c87533b8aaae48a13f640d15827a13156e7ce9cd9d94aaa32b571725f1132474873a9b1c7cf65df80c0fbc9ef5e94e1b1155dc32ac849d853ab75df2449d4a79648e6fc68b75d7a635484b2887804b9cae51e03a459ebd6ef6a001562de1f5d1b43e47a65a6501f156a3398d1564\", \n\
+ ct: \"d0106f5db0ea9c3a707a665f5313c0912fabfb7e43ceec92f63bc053ba9f1f70c5096a7879c721ce50ede709e1756e8f67df7d54928b93a4a94608841e6bc208204988c7a8f398139310fdd351e0b59efa19188c500513bb48e52561a7748ca34fbe81\", \n\
+ tag: \"8d8eb642200be95efe5033d7333c0cb4\"\n\
+},\n\
+{ key: \"9e718c662f007e082cc2de64fdf368b0bbb8b09eb4083e6e3989fe746dac56aa\", \n\
+ iv: \"360f096a6172253200054af7\", \n\
+ pt: \"56e5ee5c7f90bb8ce854f12a8b4bf4348aaf53d664c9ebed7b827c43e373cf0ffd65450ccc948ad6c5610ae3d8e2163ef2732d8d886c689af08cf24a866ee56f5f0dc9849843b075610fc476fc31aac0e91015f427a3a3c35ced3a16ba\", \n\
+ adata: \"f0776a88478468a5a3796e1b86fe4caa2a78c8249fe1b34afa50f9413de6d8f1a7456f73e452b2158bda687c3d163e9bda8120e998f02b7dd6d1a1356bac69b26b7c723e7da9ca\", \n\
+ ct: \"f347e20226febaceb65056a5147ba3123797c1cdcfff0ac91990d0537a5851c4a6a4bad33dcec54ea0f4a5f07b88aa77223f9f12826428a0a90d16e8a53c17485fc3c0d9c23afe411ca67e1ed4d51edf553c478ef48730e5f6317c3053\", \n\
+ tag: \"6bf0af64f76b46721e0c6f590cad6f5c\"\n\
+},\n\
+{ key: \"49b02aea94a5d1c81a11d7965727d7cdd846aecc086033f33d3f7790a3dd21c3\", \n\
+ iv: \"ef0c1a1afa3e33d7\", \n\
+ pt: \"45fd9015a8e5f7411c683924128fed81c4b39184e7926c200495eeb5328823170c98ba83\", \n\
+ adata: \"decde1416df0eb083bd8c8c8c1a0605afb56252372bb5cbec360a1a2ce9bc3930113f8f6b5e233be8fce013ba2253c8eeb4addf0a4c30e6bb17d03fc7bdc3ccc8e3188ed831a3de0bc7e970f80e2b5cd658d17cf417fbc751c8635a682e64f4125b9ac8952e38af3ec1c8f4d2fab533490f9c798e7\", \n\
+ ct: \"b049816986b46f4abd162906355a57b875d797c8ac94eb78d2660056fdf260ffe84cef0c\", \n\
+ tag: \"156bb3665c052dcd32fc844d815ebef1\"\n\
+},\n\
+{ key: \"cac62fb1fc3378455e785195e611cdf7eb1c3199677e00f901da9fb3fe39ba59\", \n\
+ iv: \"8583955a30e75fcc813e509b\", \n\
+ pt: \"a98f641ddd6d32fb3dcbf04d49654c996a82861a1ad03c7e30a938d79fcd920af9d0f9dba33daa3b29283d79778d48fbab9489ac9e50c2ac4669bed159517361ba814fede99527b3202a3e970db36130470110c23e2a00f33c6dba5aca7c415b700d51bc86f59b868d19647f2497c960398933bc4b4a27eb95246066bfec41bcdd49\", \n\
+ adata: \"4d71ba6b36c06478d163f95c4e21624fd108fde6\", \n\
+ ct: \"b37822ce11634613c876c3d286968954929a6f35702875b5dad7f83177049f4fa73b49934d429a42e1bf857e76711ee4021da078bbd5bc3517ae14af57f267afded38c5f7ee8144aa10bf54715c0cd04219def56d8687efd3ac088e225215f943b41f98a4ec594eac11d3c05b988bb89e32ea7eee22ae1c1e528fe58df57a52f1016\", \n\
+ tag: \"80f5aa4293a2c82e21647f67ea1927e9\"\n\
+},\n\
+{ key: \"211a87b7b8164f1be6ac907df92a73503aba1c61bee8694a9cc6a353b8436adc\", \n\
+ iv: \"3c436c05e669d8e4\", \n\
+ pt: \"0d4e58f4087ad888c6de41f29ab097cfc6e29601e89df8c6e8f1d1fef51b1ca699b0e06b24104ef1b77b56927d41344bce007df4b8d58eb1ed9815971e0014e4fe813cf07ecdb74e57e2b7a38cd0f0283a63817ef7e628c82052114856d89c99d0e64588ef46679e1528d31c8723cad41f2fe125d5ada1f80e2f300c54118e3a36b72756\", \n\
+ adata: \"7c14ca2f0f80164f8d56a8820dfd6dbe7bc8a2cfb07128a392ca216f2f38609e1081b82346da788931918ead7fcdb3b7cb3a0fd72d45d11470136979930ba8c49d522b\", \n\
+ ct: \"ec0c89049bbe024ca237e89359e888726e03f88f73917e1d7dd6d1d74e0c20b9ba40cb382597d4ae9dc8857b5fedc54de34c238364a81d688c3abb9d1cfd9b86195e7f6f6eca2d87ff2db7ee0c1f3d3ac954142e18511abe525d956e47e86b82f39606d0713b6798ec44c268ab838caed8ed4e14592cc54baf2b8bc72a23b3ac96288ced\", \n\
+ tag: \"b2a2238b19d9374b28979a150abae7d7\"\n\
+},\n\
+{ key: \"79b9202a631288feb8c9fc0d4a0616536c8cda8b556e41d3a04faff9c33ae03f\", \n\
+ iv: \"45af267b9bb4e264595697e2\", \n\
+ pt: \"78ab58\", \n\
+ adata: \"e3ed603383740cf2a14ee27bee5fdc423a48a2a6a866a636ad7321df21dea8b357bb48fd8a752c43e328f8e4d7ce54fe5cb926d98b62bf2c3a34fa\", \n\
+ ct: \"490de0\", \n\
+ tag: \"8e0dc72164da4766b92ca7a6d310e6ed\"\n\
+},\n\
+{ key: \"f76bd8dfc93e7fd20de567b6b4808044f40325889ccc11c5ff7d016b20e9878b\", \n\
+ iv: \"b3c5269827ef4564989214e4\", \n\
+ pt: \"f704ae4e32135916ae7172f39ecb68920186feec1d04ae39240ed1c57f4c9edce7ece6008dfee2b70b5702d7559d41616244634f5fc79a8a01ea537396789f12da2b367df4151d510c10cd71b0fb2bcaaf18d5db654b7f7bd8638e3533f2780a409b51d92c57fd5c4a105e916fc30a3df5d27f24632aaf6695a515b14a7020f4c00d8aada210c8b79f6201fa84be08298d4003a48db48a0122759d\", \n\
+ adata: \"228ef3ab96b23112f2f3e8e95facad08957ad2d7623ebb8af926bd2ef964225e632d22bf2f1d2770e6892cb5fdf1be3bd6b73daa1094f910f85b4d6ad57461f16ce8cedf782057e293f35b5e676e891c8584d0374ae47751cf318b9e0f22e30dae16ad6968e48d51fe8c59ca9f9667109ad233a8f8f8d38db1ebb80db53a7187b33e5807237250aa85bdcc2b1098ca9813da4f88a9192bc1323fcf4c75397375fd972efaa41346e9d9d9f41b56df37ff10b60e14d9772049b7d1c433ecb0ceb5\", \n\
+ ct: \"5236c94f21dd394dc158ffb10f3f473f6bf5be478924118935b27f3b20e9807f45999f2837b3db9659b4c1e048df9201453d6ad5a2245623af62bb052e6d9612079eafa00876743fdb0a953ec7f13f03f4c44ad9327818f52d3ff015952ee37a270c7e738e01702e096acad99b32f48dde000ee64accc5cce14784e556fb7513549c19508993183d3f05d0e29992c48ad38c85a6c777aba7d50d8f\", \n\
+ tag: \"6e5902ae14fc8a6bd4ffe0e428e7d028\"\n\
+},\n\
+{ key: \"062ce8bb07d6159ee219df3ab2437d99a1a891d8d4275f5180089e81b07f5a13\", \n\
+ iv: \"dc8d92bbdff0c9f637ba3d8b\", \n\
+ pt: \"28a69fa050cdbd61c3a348dc4ac42dfc74c6376f1e1b0ad8ff8788dfe4ebac5b3ec801f01b469470a5e44a\", \n\
+ adata: \"795ce0b9b579e967aefa5d08ede1abfca30ad21cc40622a2f7a28cdef7543043c5e59e6ca56d23814fa6d090039444d06bb75622bb37af811befa89ac85a3e171c2d5c31e02fb8e069ec082e62cb0cabee374bc198dccae8a7221d04e3474999732e8dc50f0bed7e301f868a1d29b65423cccb63926a0d325a83b86e9e70f887558cdba4401cca183cade5985009b438171664f04ee275b9e32d3db04939e6ab8d8a1c01c91a8ae15ffe03cef14d5b3922c9189dcc0335354597805509\", \n\
+ ct: \"3b1afa8b31e21ab65b3d0544f773fc283d66b9126ae2e748366538ababb5ab95150018d30bb73cee5c91a1\", \n\
+ tag: \"5ce7e5f2219860042e28f80083b2547f\"\n\
+},\n\
+{ key: \"60af91161f488f6ea07a79e5d871753a8311889b2b12d03aa23d922d61105691\", \n\
+ iv: \"e816895d52a25c73\", \n\
+ pt: \"062d798786561dd849da13f2f43bfc5838b797ee0eeba7d266032032f3b79782162383ccf525ccab76276ea108b6c42cf251eaaba07b74914f3477f5656adefddd1f3795384ab8e9044dcd8dd5d0f28638b7365d23ef46df823ec665972a4d0b62987f6a0dfa28e11b1ac5202493f7ec1f00fd76b17501076c33e3136530e97aeb7117e9bbe15e9cf6c8bb12403d19d9dbc867b21605f1148a07911cdcd9903601722266e4aa25c8bb\", \n\
+ adata: \"ebb8accdd244\", \n\
+ ct: \"dc96508c23908d71632a13763428377818f79c09581e7060ac9b477bd7691ca2a1636394fbe087034ca10f2c3b9e6834c5968929bb3adabb8dc3e81de704c9f8d540d1bc7e209f7f77f82469d49a9bc6ccdf38e96d55dca28a608111a57680877b01f56d58bd9ea371a4c0a64a8c85a5e7cc350d9c8f0273487d2245ddef2ebadf5ff7284c9a18e7d12f879ab9eed4911acc35d07ae1638241a55a5cb583d54945a92a7b49d4d69166\", \n\
+ tag: \"dbbecde72e95158c11c3c963e152d98f\"\n\
+},\n\
+{ key: \"15c39beae27a5d88e841c25fb5f4b0e7ab0afa9f3bf1934a305e29983222e590\", \n\
+ iv: \"63ef15e77576a577\", \n\
+ pt: \"3eb154b3bfc10aeda6633c35c140764ad9011e4bea82c0192951abc399107eb58fb3ef8e720da852cb85b0777aac0ef9d8c03016e52abf3a3994bc3b894c0949c21fc77bfff865f469588ecb303d0e77e7cdcf70ea0394f962c36895e7abca32e093b146645c1378605489897fb72eecb90b5e46fd85cd18112f2b58686102229257cce7a1b571782a79e8c8464b5be21e1c571bd373c841cad68db0046b824b1fefc6dd5ea6714b3f91f81e5179cd4f48adef2bc99d57f61a4235ae5e3a\", \n\
+ adata: \"f45dc1e295802bbf4bd1668e964e6701edf6d409ced915e2fd9280365c72c5e879b9bd7455b7816f7270febc603e23302440aa5b25369901c3add0a19ec484865b1ebae924112927e3b1d8beb55b7d0aff6fd1f6812ec29597a9084136bafed52d1593271570f24bc656eb315a7c2bb7ac91eba3582a7948d2324a316616e3f50f293d7ba05f5101c64148e3cbb4e8c8902b7a8dc96bb67985a7bfdba431d5cd87412e574e89d873e0b9816961\", \n\
+ ct: \"22f04b4f8179df16d5f5681c57bfb264b1a29a62034c081ac9c25a3200419b5cd8bc01e49eb2b483f75fc130549e1e526eb67fa88f41e3664c9cc31b5c62dd5dbfc3c9a1e7c63ae15e18e89386225155e9553caf3b344f0a26c673c7ba4a3f8edda61a3982e12af21882619b8d101cdd9b471906685f7900c60546163dd93861354e8347a42fd202b36581b4078dfeef731253da80c33c02ca13f6e0b338019bc565531f15cbea1641559e08546e8dbb5d02126507695e70aaa8d1b7b861\", \n\
+ tag: \"ba6a0700cada7009103ca1062b7859e1\"\n\
+},\n\
+{ key: \"cf90dfba7b6acb6c11b47b0b4bc7c26bf3cc93d852c4dddefc1561caf4240680\", \n\
+ iv: \"d1fb3035dd746e2077157330\", \n\
+ pt: \"bda6548ede0a52827ae878e08711b8c0ff4bf92ba69f048b4c92589fdb988507c7c0872eb9f5638c0949653507ef02f9bde8ffb267a3d96cb53d61b563e48ed014ffa6a4060c86aef49eea5ec5b9e51d3f041248a6228d8fde6c28f9166f87f36359e2970a0ff8d175a79f127b55ae5038429c7340ee2f9c3e194b5f5a3dfaaa4577b0d0609d320b1a5e31077556eb\", \n\
+ adata: \"2c4c727e0af79580236dcfa6502ccaa17866d24a463170a3a4864942721bd6389d64e6dec806e1d848481ab0885484dbda3afc81f908\", \n\
+ ct: \"1d5a86ac8dbd0fb24a94fac274c805e035a461b16b2921cb1cd894330c7c550856083adf6cfed5131150a420fcd8693e1df18a89a49970dc40639fdf832c6684c243bb6a573bd0acbff8f2bd93a7b1c30db170ef64a4b5b68351e98aae4599bffb13582d3e7b8084c0bc657ca54c032d43429a93b255bd2343f47df95bb9f852f43d57f49ab8523e9cb702f08bb0fb\", \n\
+ tag: \"c50381b49979c93d4b615b9add20c69f\"\n\
+},\n\
+{ key: \"a97938be3b6a1583d01bf97eda0e935384dcd7aaef3ec681e9027f46a6d89a49\", \n\
+ iv: \"65b66fe18ca1c7393f467d12\", \n\
+ pt: \"a724e7119b256ee25cf3296dc331e5bbdd5dfa2c22cc08dd36038e8bc3d8df3c6576b6b928800ca47cb82e32fdad7f715c1bc3987c9680d20673211c88de57ef6c4457c4350a2ff104153c675b3a3138d52fa90985bb3292e1\", \n\
+ adata: \"6af6174766945c63dae1002d8c4774c091ec1598e3d818aca9eb39ed5fe1a56cd69ee5663f475d93a13da2388398892de5d319f3f7ca133e821e4ad60517abd737ece1a33ab8a45ac0ac818b843588ba51ab83b3ff044cfc7b85253ffda815756903126c56c79510a07f841331d88a01d0f4228954eed10b23f8ab061d07d44896598dfc5cc8b64dbf3908458e54de946b0bae87db32611d53fdd075ec3c00\", \n\
+ ct: \"d37ee82409bbece4d165c8cfb49d311cd0243982ecf8c1cf083b685c10cadcda42fa9f6e1ac95e3ea47cddcdb326099bc42ed804f2ed691182a0c19d772bb1788430d4d578458ed44758a4ea0b6e5b9c09963034e1d0e2107b\", \n\
+ tag: \"1578ea22ade51c777298dc242a50454f\"\n\
+},\n\
+{ key: \"8e553ac4e86424b2e68527c8a1415e7fd3324cf5a72bed7d27c3299b567f18ee\", \n\
+ iv: \"0ec725cc74220bb7\", \n\
+ pt: \"6ebf1e0dc6272abcd723c4d567ab11c7a2009c86b83eb2dd4bb25c51981c7d9217c2c8f30a2f505cbc453990bc645f837ac11469d6c2312dd579bc244f4bdd4fe68874cddf1e450cef99cb935ef21d497191d22fb7c98b4b3b63bcc206377ae2734097a0e3568ed537d9a21483fd01bd28d9c54a8d1a2baf64a24e4e1b1bb536bbbb767a00b6\", \n\
+ adata: \"9e50f0d884f2808dc06e44a79f4331e475399a9eec93ce0c2b04d06edb91d047fda114f66da0a13149ac0c74dea8ff3e4dd1db4d7269f4c3a3595feea7f43dd277320749e6ef36f196fbd5f81c97abe617942e566322bffeda45b41e0e78046d8bd08016e7b2dcfb2a25f6ecf061b127cd0b6a88cf9a287e279af4e9ea8a8eed43a5e94dadf777b4300102fd7439a238401dc2ff0a7e53e78eeb563fa6821b110f059c677e34cb47dd2d57601e2bf85b629598101e\", \n\
+ ct: \"96952731821bc27aa812463bba45bd5e55f19def00f818be70affb21626b2ef3ff33997927c509023a6ad29bfc3780844436787c28583f9f7e0f7ff60a29c30fb75ef8e8a48acbf392dd028802995d5b0d03a22fa423c27f8b78e9562b36be9aef1ab34ff979012a5f01492e4a2b40fa78370287be35a7eab9d91a2dc01329d2beca2f249d06\", \n\
+ tag: \"b967acf2234cf1a62b1f77a3e7097776\"\n\
+},\n\
+{ key: \"2f1b64ba037deaab7a77bd914368d541b736a58aa76b051d78077087179f5618\", \n\
+ iv: \"192a33e5e75821b11c495d28\", \n\
+ pt: \"2af7d3c8b76ca5bd37846e4c631f8a9f23e05767a03866b4a809b4882200597043b1e3a4c0c5516f4fd6d9a9e2b524db8f\", \n\
+ adata: \"76f00cf71eeecb9051901ea89d22df7d9b8f13c5853f312fde2757e83fa129f140ce27d80f32db5fdae72e87cb4c34320b4b4a46970f75fe1070798bb68864a6dfc2efe938f64b95cf111f9553f3c4b90d8e6d6d4720dcf0a39e8dff854e46de938f432e\", \n\
+ ct: \"803b7457f6c115a529058b834ce006cb4068d33f8a6e1671aa755a7d320f78dbf1bc6b4652c342abdc10873cd67927095b\", \n\
+ tag: \"2c939679e158f3de45bf3b6e5172205f\"\n\
+},\n\
+{ key: \"7c367d42764dc6e3dedb2a03b79d6118a84b61caab15f1314c4afa17dd299bac\", \n\
+ iv: \"18b9a33e76c80491\", \n\
+ pt: \"588ee23791482b5bbf662fdbd9bf86e05e2f6d7959af9a70a21f570dd4bd3a3b0b99bcbec051651feb794f3133e7a73b9e0aefa4f08b7b2626a1715176b1dd03eb14dab02b953d86e06007fc7415d8e0c3061b\", \n\
+ adata: \"703a183023b51b6217f73e85958b3f341b273a47e9e9f732b826be16b366f3a1f3831207bb291ec94638896ea9e8f22c2b151e49c1de2a025032fa992cc84a9840b617c118512365ff435f459063c08539ee4f63bb04732b03335ccc0cd1a3c2add9ac92ffef0024eeb289ff6e7d4d301fa0faab429665b8046a8828da2b0c3093bf39f41afc15a2e8ec3bb6c2a41f28c2bc8ea73a5496337bbf21c2ec457de0d6f86598dcce\", \n\
+ ct: \"17452eeb9d4efc5cf09f3561cfd82bf8c9233b759f14a4d9bc1445861203c8beddfb9060a200e8efca87b9c12ff535fe5652a4d718f5717af9c9971c97ed50b1dc8b28e346b6f0275cdb31ac2539881c004aa6\", \n\
+ tag: \"36c74167022bf5d27575041230f6087e\"\n\
+},\n\
+{ key: \"c1a9a978e8d21c16d9226e88d7349dbe4bf31d25d9220bf9e888c1963bf4cbf5\", \n\
+ iv: \"426681ac5382621b722dfe5f\", \n\
+ pt: \"ae6588d338c069df9c5da624bde81ac68b299d8e66a8f2a72b7c2ee4804bc1f1a7d41e6bb76460cb4d89930148f57ca8f5c7020d9c\", \n\
+ adata: \"7dcb317842a0fec9d70fc8abddec7361c6293fe620f166980f98fd91a9bb5ba47387b72807c7f613a62da7c40c74ab9877546e665dff01f31533110408dd2eb5dd9b735c0e42405fe38ccc2b98576a4e8ee599e88efa3c02e84ee6a3d22c22fefb40fdbfe2cea2d2865cee7fab73d03244408fc5005df71bae2bd83e41ad5975848cca3bc1ab56ba7780f3da653a5deb9db9c265df4e5a0bd9f421826f6ae42c0d855a87f07e8eb871aae66635a0fb4d33556e8dd6055dd7e70b45ba0d148f2c5da071\", \n\
+ ct: \"b2c8a857556e882aebc5c13c8493657482edf92e2df83b263fd6d197d830f05d3b2b9815474e11de49b081161b81e635aaf875750b\", \n\
+ tag: \"96306a3d8ac663c510a9f79bf2e92765\"\n\
+},\n\
+{ key: \"15b05c7d782a2a7ae0198c3a30c284c901000109d73c70760cb5fff35ec4e8f1\", \n\
+ iv: \"ee08f96dc539e205f3dadb2c\", \n\
+ pt: \"5a24b0be46eb40505e561bb560dbf24d\", \n\
+ adata: \"b8723fa2fef541\", \n\
+ ct: \"dbb680a03cbebbb1326b58f01ffe7604\", \n\
+ tag: \"d3872a8beb070b0014cac491f5a25174\"\n\
+},\n\
+{ key: \"7e663984b2039cc365725aea8ea160ddcc93505a302f72e372ff3cb83a6df56b\", \n\
+ iv: \"fdcf22c149629ebea0c96887\", \n\
+ pt: \"51fb5ba0df565493173982dcb93cdd1c4d29db9dc1e149d377efae262717146dc2fe597ec75c9e32a0bccd99faf39bf6e97bf30bb7bfd351196c0aa36b5af09c922e35b82714401c4836ac374283ed4e7e47b1003b08064c690e816f86a7e7dded4c63c4f41bb6cd80d81e74006feb9275dd39d47ca64d83b6eb3de0c0dc546548df2a802378873e996120808f4ccaa27b4f9749c9c9616240e78b84fad49f0ca04929f3a62a73426860de18002d86beaee1b956ababc399\", \n\
+ adata: \"dea5e0d6d8487ddab97e26c7e95615b49355e2612f644ecb639a19bf09635e9891679b88a2a36efd081662c4495b085b28dbed21e510a515e73fd3307290bcb8064606478e5c3623a0bf930d88b4ede8e9467d5d9f7bcca94f5af86f3f98134993\", \n\
+ ct: \"afa0177320ef5f9eeeb4575d100c4e1ec1913fe813e6a9bd117da1aa65c98dff5c73288a24f3d65068e148d0297848765f0a89fe1efef8c2fb40b5e66c6c78f383878aeceb591985c1ae62747f39647fd7af7d6a41e126f9c11cee34230ae8acd1c528bfb5e645d2c1ec1f5c62c6f69993f06dcdbae10697ad74d9fe4c107990798babc552a5f118cb5cf41f603bbd948e6f617217df9821f4f4615368d22876a457d4aa94a6321080e379f2be30059bad6cf6cad494792c\", \n\
+ tag: \"430d959ee684c3002f1b32a7d0be3b92\"\n\
+},\n\
+{ key: \"1f202a68cd4cd2202e510774da5094c8c6654e6ae70e6a73fe80428476e9cf07\", \n\
+ iv: \"146966c7d1850245\", \n\
+ pt: \"42027eb766f2f5121cf1fc951a59c729ad6951c3eae95c0cfead863eee2ffcb34c3b495f2b5de26fc2051fe879b31650ed477eddb7dc58219f50e35b32f654b4bfacf7ecb6f817e20df095773a7f743c6e2c864a340e8b55305cc26fa8982da831aa053b4098796843d847054325447ebc626d14ae91dd9ccaa8c58ff4fab8f6c32c9c96c4238be6534fb0b0cc48c8dff36016d00797142e3e4a399074358a7c4ef558da92388072e36fcf6efd58e0ad7c2e79f4886f1b3b2acf2ef40705e057278cfc\", \n\
+ adata: \"a36f9b1f6ccd2eb3b2658f6e4c448c703ed4598f94610accc549ba9b333f07a8e6315535cdef61236dc7c5a06031f7ad37ff8a6ba2cb92597476e675073ca7740a84f0f9ca713d966f1bece9c735b90eae59e15838\", \n\
+ ct: \"1141782ea6e3c71aa2703985666c718adbc9ea4a8b08eeaf10c1b004f167c2088daa1e6ec434f1b953e081e907626f8944f43a657e7bbe01a046f62c55a13f42e7ed5f3b1a418b13372c3c441acb5b2effd0ed43e6fcfa3d7d71a15c4c995d569d9792449f5f6433afe00499d08d52a90d0183e0510dc867c2580f5a6eac9f131f757da59d88e3aae0c9422badd07570372a99a1bb999e0cb80893762f458416e6871197fb17715d15d8612934ce95b1be400c1d88d252324e828896f6cf9b10f45b7a\", \n\
+ tag: \"e57161c9944abe8374ec87dbe1f3ffcb\"\n\
+},\n\
+{ key: \"51053b6159eef07be4f5b33287c853c570f5c0b0f3ee077a3fb3687b125f6177\", \n\
+ iv: \"1560d9d0e0df8815\", \n\
+ pt: \"0eefc80189860602f915775b8e6b84a6640c5a1e9964cf79aad6117c9765f6ef31b5e7df579e88f13ec8a873cb1acb8ce8f4eb412eb0aa23d4d67bb405a9e4175bda443397f7cc384cfe227431b8ca182ce30c4a24a2e82f44d63714fb5c7b52c4a2935d9e3755bf1da99f231aab1f42887aa7c88796aedb74b484e72401b1de6288d83ccf00f147164fd12255b2acb040ac720f422eccf3658f84f4fdbcf53643a574ade7c85103c3cdd20ef2d01b55cc2d8e8ee4c20e8c5ec56c72b0bc71e4e68439ea58\", \n\
+ adata: \"ddd52a457dd2ecf79acfa04b74117c5d1f475ae0631bb60c72a1060269dfaae07dbf7e4c389c89f579166b06d9acb0447b077df507185b9439085284a1d440e37975ba3a7d469bd7c0acb6d26d8bc82085f72e943150aec0bfa456a217e1827f1e99a5cf8e0609334332952da6fad876773588c923d5637a587bcdea5317c6e19cf0a87f84\", \n\
+ ct: \"7fc385db8038bf550c2280d772a45db0160b00db8e972e2328d124e3a9964da8c3251da6e5e28e038904ed64ca7de18c0ed5299a0ef287d446240fc3432c7c932895e94fd1a827e57ab108b75228fdc3e79f8b03a810247ce33dafe518cb67b2ccb809dd0e14932afdf88bc5c95498422ffccfd91c7b384b9649d5fba06dea88969629443cad1e4160931f696e3ee6485a29e75df741896816e83eb47a3d60a832b68dbacb9a3a29329177fdbc0099bd5a00905b3c8fd5423167a81c9983c4754e28612ad7\", \n\
+ tag: \"b58e298b949359c54c002b0abb18f24f\"\n\
+},\n\
+{ key: \"841334f5a81afe19b4fb6e3cf76fa6f3c111af19c232cf6893035b7f8d2fcd37\", \n\
+ iv: \"436e09dfeb0d146f\", \n\
+ pt: \"3583a9f2f8adf236653f525a9c6cc6a79e8b4923af48ff11586580c5ed9d11a4bf2c6bd1609f05ff37d4d995788e79095adbb8d91d791c56ce7a98937e22a187704499de727da8e8bea868b616fffd05478582b5f10bfd32667fbf33d6beef79ba6adf97d24101e61a389da6165453177a2dba8607ebda2637676e779ae8aafee79530da3a3e0aaba5a373a30c6e1f810e879b33bd\", \n\
+ adata: \"7763cf323bc3a24ce5a90573c48ffefe4d68d7adc8af835199296f0a1a383690e744478a504bfd02d4b746ea2d8a\", \n\
+ ct: \"fcde4c8362a8f272bf7dc758e937d4b94d693989db15b9e249587bb433b325ebc6b39c8605f1638375cbefd85d0339aaf5ec355821fb62e49aa75ff575dc5478fbb081124e2d9d04205a770011a1bc90eecbaca155e505fd5591bbb3d05dd499a43435e281904e1e46c7a6db2cd771d60da93e9f132fec20ed2f80dddacb18c34e0bb37865a137827d7345f5b31ba77002ecd1a6c6\", \n\
+ tag: \"f46d12c005c5fec91b2cebc9b817f092\"\n\
+},\n\
+{ key: \"b31f7b26e141a957ebb877ee52d7894bf55ea9771367f53fc79cfcd91624ff95\", \n\
+ iv: \"1b0667ba2a664a02\", \n\
+ pt: \"4c44612696b11884b27c0b1d014ce4a32901f9e294a117\", \n\
+ adata: \"2a03b60a\", \n\
+ ct: \"8e4c0c4983d88e64dfdfb3ac44b8ae4d27675a50aa68dc\", \n\
+ tag: \"e34076d408eb27b1884e7792cbd66e46\"\n\
+},\n\
+{ key: \"964cdef96bb43a6a59ec5b3c19734db0674a7c5a8d82c5b62f3d877bd4d2823b\", \n\
+ iv: \"40d8102af688c500\", \n\
+ pt: \"665f6c27a49afdac54f0c75146ed57fa9348d8b849fa366dbaf8ab5ea476342b0a7e93d92b24dd78ff1ac266d930f98a06d8602ba5a3271316b4eeb66e709876c35fe54120ed393d5b749e064051744977dcc7ff5684b5a70f3c61f268596a98b3f7\", \n\
+ adata: \"aeb2ba723b28ff34b2f78a0b2bede7f0c861c28846d02ba92c314881fbed928c86ddc550a7219320aac1a55762b261d761a8ab109d7a1fb1cf8a09bc0ec8e4ea803981781e080f52dbd64d26e0e5a4718659dd762555113abc4c3e9be90ed948\", \n\
+ ct: \"a13a9462b1e0b51cba053358ff4743d48ea48ec0a374e27dd68f257cb6f72d60b8cb02f532fad382f85f27ae053aac7f61edd69b231ce062cb68bfe87095e2e3d4b451b6a406c269cffc2f27ee20b78e3d43c3b9266526b5071083c93f6a239afb69\", \n\
+ tag: \"a2d0344b364651bb5a00ba47cb879939\"\n\
+},\n\
+{ key: \"9b1b0dfa0709a8007af4fd01fd0463fde15c4e6fa2698ba60cbcf94a4f4a481e\", \n\
+ iv: \"55708e702bf7406d\", \n\
+ pt: \"3d630435305ec34a166b9d62f5576a88d8841012042f435fc9fbc628e8c70ef274ee8c9d64c2eac45602a8894c17e891e4e448d5c7d6e017d735292b9a88655b691b63a579bfb8eb79b9ae12d290248e8e41e28c90435425079896562c81cd3de0acd8aa70c344f3abdc3cb64a6a0967e4c8db82dd4d72957c80ffe600d5cd4d11880b7f7d5b65f5f8a67e7d6649fbe066f4553d3291bb003a13276ec3\", \n\
+ adata: \"d206cf7792ea6dabc1ee6ef1e70deddda306888e59232fb75d524596c43b8935488cafd1407e834d48c7e2ed16d6ea8200e7cf23550f13898636b9b48b66ed00e24ae69923dc495e8ddecd17935cb0eef5af08e244fd4f67c3cbf511295f75e3c7d4e45765844f8a275dc88eb44b7b95c6b401d234ebf5d3260f43dce27d3ad0e2b7164167b8995fc722b4bcb2af7aad194908\", \n\
+ ct: \"9a62973407a0bce12fd02fbbb30f6664143fc271a211e7991b0bcd0a71a4b1f655f044713859993211d6bb4ed80d14758888c7707a4e70f742c6decd7da996cb66449db59c1de17f7f0244f38a9a186b6bd5212673d268c5e0d364ac390b25848e091c1b052625c04f67a2b2334a4ac3afaff26477a6c2398e3af9da754d1e985b6d2b599f9cc3ad63da736ea29df5cba516ad84cc88091b5d27e2acc1\", \n\
+ tag: \"29404872364b25b88004cf89921ca603\"\n\
+},\n\
+{ key: \"32d05e323bbcc5720c4565797fdba63f0f3c85b47acb261e5d1ef6c6338700da\", \n\
+ iv: \"6ca0ec4a8cad2935da6af9e2\", \n\
+ pt: \"0ce56ef1a567b9103d91c8c1eca6ef525a1ed3bce0c1c8c79e3ac1a920d3a90bf12e787b9574d71f42f16e7b5b3aaff518f11912eb7c836bff9d952a0264426d07fbcba4457d2afe679a79be438a6f\", \n\
+ adata: \"f3759d0a9e88982bc06dbf675277c7d29dcba6c1170d4b427f6352fde4d720d4\", \n\
+ ct: \"d9e55b93b24b2dedb485cf45ee1829b03cb3e9addf94a12e3f1875afc9e2a47c1c38d583ed5b8d46f0a93f213cefc22cdc5ab88f0a496a1ced12a4c20a619f3bc6f79fdd0c48b5f383889e908dbef4\", \n\
+ tag: \"ddce6535b01f7d5d37dd408562e2c66d\"\n\
+},\n\
+{ key: \"3d76878e018c4834cff5b28d5f8a417057dfc0dccbd73d10880e2815b347be68\", \n\
+ iv: \"389562a1d2de3ad40729a0e3\", \n\
+ pt: \"8701eeaffe5e19f5637c9b0e87f2d3683099bb6fc8db2e922857f836d2d7f9d0f7b53492e023eb3e0793ed6474e7475e0b0938468dc1a23a249d651b2b96868b3d10398361acc4e81c89a1a6b300ecaeb882ae5fea5428c6d2e6e42129a8253463749f\", \n\
+ adata: \"264ecc7483331efcfafd03d0c331114d83862d0784a9e59c102671d6fffc2bab349a78cd8b86003a7302e7d2d0c9f08a55694e38655ca1fb4f9e8b9f3f3f7cc4beb8915c0b956e5cff7c689be047649f0ac38cffbf998f502a62c6a8e616129e57eab164f675b7e5ca971f5ffccede0aae33f077f22f258e91c57d5b0c03e080f19969c718204164a9ed05cd1663822f126bdf1343c18c935fcbb1aeddae89073d8268f739da15a60d\", \n\
+ ct: \"922ef20d5625b4f377948bae2c2c249971cff83711ca5884a92d59123fec545e28bde7e9484b7f88046fe2118d9bcdb7930469157e3120e03ddf9c2afd4657176db6796ffbbfd107012ed3b6775e1d62e161d5b00b02419442f25509176f61dcd6fd84\", \n\
+ tag: \"c7d874f4b46577cbd4d751db48ed117e\"\n\
+},\n\
+{ key: \"e5fc1120e1e0b67e2e3a03110cd3945095ff3f63fd362539c08734a186aa157f\", \n\
+ iv: \"7affce3481856076bcdda379\", \n\
+ pt: \"fb387f30f2b3f8c9763a1b1a777f7a8797859c314f4e7449d8c390e848eab82868a8fe7840d484caf042d5726186068ac965cf8a016a623f4d25702af4c7b013260b2e8ca3d2e84118249ea25977d9d9d3dd8db6b0765d658daaeeddb1bedee9d7515c6a223c83b8db0fa6aa066d37492f834fde8d556875254472ace5e599777ebefab49f\", \n\
+ adata: \"109c4d1253ccbb09b0c256fc708398c31db57cdad2a4375fca2711f93168385e8bff61735c502ee5ad9daf13e8d076d5e09deac90be60e8cbdba457195d64458cf28aee16da2c84122057fe058340f59394b869eb1c0898699e4184a397524b9ae8a1b7c15\", \n\
+ ct: \"eeab414182864a6347552269c9cf45efb3882ce40cf2ca354416425115dd018c18b082e99d78818a49254490a0524504505f2267831fce16845d74321a11c496330a44b60d2e36b006a2946ed76e9922394a914a82e484d9be64f322740d24f1285b71e3716146847f9b72aa0bedccc46e265a3c362d2dd51f2d3d5818fc1b79963d0b0d80\", \n\
+ tag: \"c3cffa8e0e9b233c91c037128bb679c0\"\n\
+},\n\
+{ key: \"ffbd93b642bef35fba865aacce438da0052e680efb9e7c35aa42395b4249073e\", \n\
+ iv: \"bf61a29d574b7c37\", \n\
+ pt: \"59944b5a4661be0fa77240685f6d26ca703d3ed34d3ff16b100aeb2d1ff9640e861516c52e72d4316c2b83d85399322330b6e0\", \n\
+ adata: \"b1cedc9070e709904ee0ccebf4789ff014c5cc6cc4fe924ff5c50320eaa25dbf7064e9ea07b8163b27a92147a65a21601281906e3aacac68270a4c59d353ed358a1d0765b6b17f9c8c99ec6ac274a9ad61f19ca3e2fb369063f805\", \n\
+ ct: \"55688b495b9c320a19e8f49af1ef718ff9fb77b323df7a5927325a3a76eeb8fd058bd4665e06917f42750ed68e82654fb7267f\", \n\
+ tag: \"55eb67038b2b2685cd980a3ad947f654\"\n\
+},\n\
+{ key: \"96a0ec9444ef43993d579338ff72338484768b682a509140068085eda4a3e588\", \n\
+ iv: \"aab36246233a000302a8289e\", \n\
+ pt: \"5511f07e2bc4cb64fb6f215115dd6f1c79b0df9075e91defecd7376218af2b934add928415ac05be800d768ba4aad6d6de7e6078094dc88ba741c2\", \n\
+ adata: \"0d9ab9b9df8d2dc6e83cab551479b9377f90f3566ff8fa3068f9530b23f044524beec9e96c6c71816687285d40a36cc8f1b90fdef6c949df4879afd7b33b85e6da7c00764c5b8ae7216303b4f98fd4441a739521a6b075b9ccea46d3433751e791959792f5a8d9173fa20730f1ec010bcfae342ed3893aad2bdadbba895e3220ba04a015c276a2cc0120a1aa1f5bed95bf85cac1fd7ec726457401b6c041064b803e50aeaf93d4a7fd23cc552e40db0132f813c86928ad\", \n\
+ ct: \"ce3fec9154cd7a5558ffeb0ab74c00c21fc30d8e41a7e41487298bdcf29d5478fe51cca97ecfb5744b320b5c3d872e4092ccec0fe0e8d2ba994832\", \n\
+ tag: \"60674238d584097f19131c579a348e3c\"\n\
+},\n\
+{ key: \"66973a1b32d052f10aaf5355e6fcc7c95bf848f6160f0896e1e6f817a0e9f692\", \n\
+ iv: \"c94158f01fc94209b1fb5835\", \n\
+ pt: \"0508db1b3da25c6193f089d044fa9655b48185cde1880f5d74e47b356bc11aaa6b3847d90df71680563ae0c59a033c68f2db6cb8a1371ebd556780c35d5fa01e28fb9568c7db0572ba194628298df98a065f65322404bb0e2f0f8d1c0aee3ee4879f65c9202bc6583aec785d8a6907103b63b683c761e25d664b9dea6323f4884c68b1117997a9225d842b4cab1ccef880c455cd4397944824e3e427dffcb24a5ea4dc84d1c5140224c418b56c660d91fea785a6b7824d93c392fe27d6\", \n\
+ adata: \"178c8d597e16254a75594e30564ef0e8e6ebba2f8ad08ea9e4\", \n\
+ ct: \"eb2bc27580bad9eb0007609fe26fcfdf770430d47300d8b5a6034ad2fdecd722b109b0a92fec2131962935b2451b8f3a7c5442884c83b1b65fa24ff05be2158348072130c215dff9a2b3a23efb1d126680e4adc16e5b7271b0c0afeda26b53c34e0ff20c481c59e42b268351fd987abea83b62eeef5dceb49f4eb2bffaa9510369da3f874659a56f1d038281fd50011dd5d9c44b9cf81bf378e8d69139c33496a22bdefeeec8517ea32cd487e30efccd6830b5b8de5e0d609600af4059\", \n\
+ tag: \"74d17d7d906a492f44398cbe8ff26be9\"\n\
+},\n\
+{ key: \"038521795f487b4aaf67bbdb45215e99bb3978e0b620160c90c771c67883547e\", \n\
+ iv: \"bb17cc805bd03d31\", \n\
+ pt: \"0363d2632ab101a6a3918b5ac1901da6a3bf476b2ed459857f39876a4118ab5fd69b82f6c537325d4c8c325376df06e44fbbd862a3f22cd2f39deb6290f5ab023ab7dccbeda1c013c85588eb2a71314af81dea01c3a1564b3ce0f4c4ad38999aa0851af897449a64f8293644688993c22f903a4a420231e3fb07f465c7ae37d3bad5e7605f5f80893428c5f71217dee87057cc029196433ae16fe0290076db967fab7f895e4b324c574ee24d9f2aeda3910167368ee0ba92\", \n\
+ adata: \"dbcc124a66dec693732018d7cb19e53e8ee85123b13c68889048a364a356b0bc416d7347518d1702d4eb6c7a60eb3f80894c07cdd294f484fddc7537079aa2bd230c6ec2e439641a47e348358df0a297e51e3b\", \n\
+ ct: \"1345d723df431803e87045957f60714c0dcef524f965ea55dd455aaf5316fd1a8f02a7ad6122332adaa2a380266d24c0bcdbc5ff33700ecbce8b57b3c69e9c1d894b39a63158b8ef2e4b2003da08562caa6463d88aa1c99bdd1b99aa064911f1b901bc2deee7e92bf155001e0d402573065314a14f695720f4f0bcf5daba2124ce7246d7fa2914e6fb9fbbc820b6382c206d82e8c8fe9df32675c149a0bae73dcbcae26d2facb794cebb47d30f7c2c2a2beda200ebb4d621\", \n\
+ tag: \"bad113b13c8044c603a1ad03071fca68\"\n\
+},\n\
+{ key: \"bf0e6e4c1a546d3405e59e28f0ede27721902841587e5d2265a5d9c6c46fd962\", \n\
+ iv: \"10eb2ca530e02164\", \n\
+ pt: \"07fd0e48613877ee92e67756a6de53a5d93e968cc8b98f7e4e\", \n\
+ adata: \"ede83822042241f90c3f2c810cfa\", \n\
+ ct: \"ff336327c04f79dfbde79f89968d0c8ddf7c238a492ae82fc7\", \n\
+ tag: \"01da1770ebd4e2b9f47cec923c9ab37b\"\n\
+},\n\
+{ key: \"7abb873ed0140ea9ffb731f370ebfc6321a6b0390b7129935adea668637b0968\", \n\
+ iv: \"1618d10213af23749481ff41\", \n\
+ pt: \"db0ad13d7f95807004bc94108ae8e24a560101f43891e3d7e040c809cf89dbb57652619c4365e1b0b05b604389dbc5ca9314850d34ba9d9201a17ac3d81eea2cf39b9c565be536e3a0268efa014b75620c8cae8219796ddbdeff8b3f4c29984d9c2ec7e20a0eaff0d4495bef53436f2258cd37dc53eaed065c81afbdfd8a7f1605d1f34ec5226494b8204a1516f67fccb2a4d14b38f19c738ba96d50e9c5760d1767fac0e9fdb9f2a8a19d62ba2cbc\", \n\
+ adata: \"d68ea5de89a4c70e330298142644fe98e571783ada34872dd752b13eb43b2a42aa0f7672f06dd793093cc982c07837bcf7793a0f0d48178c5c590081071e8b506f6d8a826456f3\", \n\
+ ct: \"d6d361cac3bb69d1038ea4c2eb2c8639b12551b053c31b3ad29daa126708e87aedf8cf111cf6714cc1f9db5331138c9130cd9e7f07c5a930b36efb25712897a4581b60decb88a3da049094d70b0d59e85ecffd19e3a582a76dd51f55ab15907f4cbb89a37402c5c8919922ba5f55e9229ba5720b16542ff1e6093788361846d43363bce0ef711a7899f245dcc2e08545063008b527fb63f4e75e3255ebf584a9ac7e46baa7846a99139b9701018aff\", \n\
+ tag: \"01ee394bb0fc1ed41d8191a3718a6d42\"\n\
+},\n\
+{ key: \"bd74639cdca58605f36f9019a481a667e55f2c9b7693e8f5e7feb5d1610ef371\", \n\
+ iv: \"c14b651e579cdc9a1a664772\", \n\
+ pt: \"fa9a\", \n\
+ adata: \"58c19ddb4b60332763aa04df143c604b9f7a33ef63f03e93d99caf0afc5fdda9097274a020565f89304fe1c3e67ea3a8bcadd9f8ee9b8f8662ed180ecf8582e41180b06d03dd98527055eef9cf4fd2\", \n\
+ ct: \"df55\", \n\
+ tag: \"954ef8c4fc6b374f87ac49e056c2837d\"\n\
+},\n\
+{ key: \"76dca2a4183d6d5618ecdef3869b07708db648d860b576111c5fd578f93a076d\", \n\
+ iv: \"8293ec24a15193db9b27e22b\", \n\
+ pt: \"d2ab57944f4fd856d8f0d7119bf64be3a46a4a32e9c9d2cc69807c026f81adfedccb3ff2e42227a3f2eae559079e641f6fc9c8a4f71201245af80c2d709db4f02fd77f227a2958\", \n\
+ adata: \"cfa38e3d3f8c2c17eab7711bc8d8821b13df6fb58ee4e6ce36f3f80f91fa414df732288aa2955b500a859d12acec4dd1ccd11cbe4eb7755d1ad08279\", \n\
+ ct: \"27b93fd3a3b877260fb323725ca05d65b32615f7d48209f9dff2ddf76489da867d60dfa1aaed8bc2d81c89ce268affc8178fec85b24468b33fed1319269f8b451253ebacd735ad\", \n\
+ tag: \"34fa09ea234dd06cb35f63a972b90cce\"\n\
+},\n\
+{ key: \"fc2e6ca609543fb3554f791830d9ec92838a0f284a542f40929995a9fc1e6bbe\", \n\
+ iv: \"65f6f49f8e53cba826b5f443\", \n\
+ pt: \"511d12d0643d344cfb301eab8940557190b62dabab704b7037778685abeb5e780560c02505c3d39d4031744542928a5fdff19e7abf809e34f591737c50a558ec500ded0d229da80b79f943352d5cbae92ac893557d39941a33ccb22058ad660ee7e790c86d38a8f94cbcc01b8aa59ef4a0670f334c9c97acb61804d9d41fb9806db10b7347db990eaccf1f3cc02d3c41081d71602d0ff457f8ce85b6930e971a61f11e4cca69ce60629a661de73a5c7aaf7fa063a8b2daf80e4f\", \n\
+ adata: \"57b4a722197a155f7c1160431004879be30d46ab3b327d3ca1e83e48aa87266229842cdf426b89e19f24c9c4a4b01120aaf573a2cbf9bbfa32b1b04cb4ed6a58099483fdde0ac36680f2b15fcc84b63e83a264a96f\", \n\
+ ct: \"e6055cf5366c47ce8b4d488f47eb7fc1818436a0c42fd5fe710eecf04ee485a5cc0d97cc7aaa14ad98e0672cf965063ef42e7231d774fc7bf566480262c8743f149d803590afd4bdd83937448fd6adb3291803758664b535a83d2321763bbe1fb37265c362953df0d7dfdd9024414d1639d978267a86b13f320611a82ceff54636193d0e639bb01c11e5e1e947c380fc9d056d1a6081c722efaff75b3da0a2e27c917450733fb862d8d0a541c19741352b81878efba31e90e73e\", \n\
+ tag: \"4db3ac9382886aa20dafa8ec403c71b8\"\n\
+},\n\
+{ key: \"7f9b8454f319c521203b501e42675fca4e70d604713d3965a531857ecb40863f\", \n\
+ iv: \"819915361f909e7119b76373\", \n\
+ pt: \"c9c3d4722379ebe9a6dd6950c56fd7236278d7c95b605fedbfa640d464a8e45ee81d5dc733b43052fe1238871a3f213bf4401d02e3b8997f795780be2adc840f31ce2cc4a71e424c2e7b9d94ab6f9ad6f7436302\", \n\
+ adata: \"f0b72b3f05594c60df47ab268c58c9da56833464cbcdeb47ea5f658254cfa78ec812aafcf17dd7d9627b5303479783c2cc64db8d12b748f4a9288e40f9ecee6161b99a61599631b6d01f692dba06feeb5e3f4c\", \n\
+ ct: \"f220e2ef69682d52cf2e70fbf2ae19d71588d06d30767ab39391132acb4ad559128f9eb940eed725b22bc4be06908261da5e3671ec263631856b8585a94da35a79a321e68f76b8ebdc8b5d6fd8e95f84d20c5ddf\", \n\
+ tag: \"2e5b929931480b87db9fa43ffb8ff7a4\"\n\
+},\n\
+{ key: \"06a5a49af73b5a4482771182a42b89608c4b722a434d7b13fc75a1890196a3c7\", \n\
+ iv: \"0d1e999391196e1f\", \n\
+ pt: \"4ebfe52cb6532ad09e450f32cea872cb4c411f65bce15fb3e8d18e61f41cfee8e5d0d2413c213604db611854029f0e4ad1b2de5f61f7fc0ce05149c24804a65115543b11d7f868610dc5916e2a1f76bd4d31247d3c186e9c7f8b2301df\", \n\
+ adata: \"24037868a53d94059995ea20757bf2f3770200fca7abb76828f7d9bb4d113ad2945dc13d8ac44814dd515e76066108959eabab804c2ca59ebbcf668503e1790cf1b26158433721b2b2dddae7c1ef1fe6f61079f62b9b402f276b6b4b3a00134dc5f9f17b8f9a687a845bcc1f18353438e18d58c754a3d1cd72bb24c1d1e18af8d1053469163ac097944d029368fe0d5b93bd22aa745c1af6ace17d8839fea80e7c1d6267699a77f3f6335481d3a996cb598b675e9c718013fccb13c0bb776e5996\", \n\
+ ct: \"ecd7f27a427b31bb032c2c126a0347b6a2772f387923e3a5a5a923a65492db7e0297db0f663ab94a7ede058ae94c43dc173e8bf20571bf17c9b2e3e56eb419032d97514cd6d55ddbd740b7d94f0e8e620c777a8f679441c24bdb8fee9e\", \n\
+ tag: \"465f45bc48f9a00a900e2dc3ec9fa2fd\"\n\
+},\n\
+{ key: \"e7906e91f86d6d49caf7fb1e39c646292d6b410026572703a01cab7a7e4d7fb3\", \n\
+ iv: \"50616d2fc32d014d\", \n\
+ pt: \"64419d889f45ccc611869637ad\", \n\
+ adata: \"e93c3d\", \n\
+ ct: \"c9ea0c569e92a2220ae901be56\", \n\
+ tag: \"ee8eda62d903b2730cbe4085114d50cb\"\n\
+},\n\
+{ key: \"bb1304e81fd0e5be45ade9a935a6a2d527b179c07dc1f0febe5bd686f2349067\", \n\
+ iv: \"61c649693b8c86bc9f492aeb\", \n\
+ pt: \"ddd68735238753f6d681c7c18c5cd6ace3ca59c7bc516c45467cd16c7e3bdabc7d8b06b54b989c9e3f110b0afc330297c6a3a1783d4764ea18d2d2907e26b0f3f49b9701dc5fa6c358b73941872a21f90973644b708ccb981b699fb5926ddefdfbf4ec85a57536c3efb57559c93278609f4aad5cccd9ab0c865737362cd08c7bf0feb06a5bd50193c750546ce0a6f5f33328f149e19c02960293098c36\", \n\
+ adata: \"f1c9fa1fe0f810faa129782e38a1f9f72aa1bcb014820984cb29107e55c3148f77d907810a940c699b6df547eaaaff3a36946d3c6c4e219e31909bca11199cd5dc86398848adcea2cf6f24febb857403d5c60b4f4483b235026b2a985f39fc32841868bbfba29965d02099e9c46b4d35941e68086c14e3854b33894b39c27214db9c426626f482aadeb452ffb4dda607bd5ce45059bd9673ba88cf197f6a0afcf4d4208254848e1a697485bdcee51d64\", \n\
+ ct: \"8a5de88343ee15c60e364479f857367ff1972cb2dbde9440027cd3208e202c810616110db96575272b17cb64d9e086cfac7d74ce465fd1df2c9e9d07fb3f4e7876cba46bc13c03a319ea0c86e89b1568b061e81d75c505f7c891234adda9cfeb8a8df3a654f18acfde604bce1d738a031c8a0134c24b14fcc0b77b35b9097e53cd31f4082ad159105a2ff343926e917a6ca25707300a0fd0f0a3803aeb\", \n\
+ tag: \"b7291cf2d9d8622fbab714e89126bffd\"\n\
+},\n\
+{ key: \"16c435f7ec961194b3ce109df2b060e0c815af510b1afbd57d9c94754d17cd13\", \n\
+ iv: \"9f43afc5a02d2c8f3f34a0df\", \n\
+ pt: \"0ed49a3ba593a8f53599b2fad4adb489396b5d3c12042f8eb674ba74427f50800ec5fedac6f4af53404e84537af70aa09f4789fb783ba6adc93488bfad526924c1fd148e0edf736afebaa0b2aa69f397a4dfc20c2aa3bd4a147761cbf0f76f43f8ed30c13a445b1f2dae4eebe84f4c488ab11723c5fe5641ff\", \n\
+ adata: \"1f2b02c599630b6bb12f082d9d809c10998bc3d7a9ac9b9457bfc8a78bfe778e50f6dbbc627305335c7a704c31358c7fdefabf288863629d577ef4aab8036ef86bae4852d0921f065864\", \n\
+ ct: \"0fdbdb2a7fb8dac1f8e8ffdc698df9c393f2c78fb56ea32ac00a59a7140d15e5b506e7ceabe3e1dea8e3e1f6fbb6c9a8b8e5ecf831b843626d346286c97c309afcc9ccac4f3737b9313533a0c2509bf502f2f02c0ccfb9b0aef414f016a0f4d6e05cae1ab90e20edd3fa16f79d4612f5b98864139082c14363\", \n\
+ tag: \"c52c2ed43a7b42d7a5b5ce85c8e87ab5\"\n\
+},\n\
+{ key: \"f83b640e48984634e46ce86640adcec1ad06d71d2dd50814a6fac2d316acd2ae\", \n\
+ iv: \"4f272ac3d8e94ba7d0ae3ec5\", \n\
+ pt: \"8b312f19ddd58c87dd22d29f388a0f752d98c9bf9dd26c035e69737cbc3fc5bf51\", \n\
+ adata: \"49c18558434d84ca038cc08bba6b80ee3d2d7763e2258a0e4e3903e7cb18ec2ef7c54bde9cd2e5387288163587535cab41f9b4a6e8d963df07cce17f5c5c7d4e9481af720342\", \n\
+ ct: \"445d63fd1d5eb1ce114fef1f74913a5a6b973afc9863364f2db29138fa3bf0e3d5\", \n\
+ tag: \"cb100605ce6a92146a9552a42b86f4a9\"\n\
+},\n\
+{ key: \"8fe8763b8b5c068abeef74c16423dea6cf9ebc6ef5aab9c552b72c26991319eb\", \n\
+ iv: \"95ccdc8064580f74d6b69648\", \n\
+ pt: \"ec959cc52be438007f13157ec33b622ab6e97ad9d0293dbf4b57513a2f53c9bc4aa327f8e101de9d416bec0f3963a5ca1001a0ea46863dd6aa785a0f78508e3e30836b644c0c563da4fdb1d141fc65a160b8f2cbe9bae4ea04a3469b825fb6b927367ae3ce82fa\", \n\
+ adata: \"823f3c05ad23e419c7280ab01fd57c438e5c30be11db4ebd0203a9fbc2be1ecab2b0\", \n\
+ ct: \"c2732539c54d059b649a812263a4e1f3ce19e33f9b490e5be7685edb4eaa03d082a55cf9c687d744a0eb4c7c086e4e57aaaa6e972feec4988c8f4b98681767159da195543d08a48f2fbfe26c6e29e107d90bb5fcda75530846a9800932fe97b8af2c7681791011\", \n\
+ tag: \"49066113c3612574cb149107a81706b1\"\n\
+},\n\
+{ key: \"fa982f47661adb599b530ebe7334d3b3f48801fa5fc54afe4b42c72a73ceba89\", \n\
+ iv: \"9aff9cee60fd8888\", \n\
+ pt: \"91666799a943e39dde09c6e59c744c025117acabd2713919048cf131239404\", \n\
+ adata: \"c1ff2c6151c1f8bd9dfede8c923f4cec6c640da91e0320709a1e1ce3aea2753ca617eecda98e409754af24ea9fdeeaeccd3635f5ba86fb6ffbbe0596cec96a4f0405fd1cbbcfe6496d35f80a1afe1f7be946c23a5d0a1f8b5f89e0ec8c5f3bf4bb76c0c313f3a20f174e60a1bb278cd73366a5dd96123f5ce07db542de5ffd5f21e5e5bd91d17c85afd8b55d9bead6b7a5c2d7df10e4f27c7140c9723be9523d08\", \n\
+ ct: \"0c140cef934fd29ea43051cf15edae0e922ac28d0ba6d72127c380d48e9277\", \n\
+ tag: \"6e3bff09e623df34a27d1c5d258aaa1e\"\n\
+},\n\
+{ key: \"96aa21a6aede43acb4ee7b42f295f530381264abc43101d0959f7cb5866e392c\", \n\
+ iv: \"2be1d143dbbf704effcdb189\", \n\
+ pt: \"043414659ff8a1a54eed33060e8bdfd53f7b13fb9e4a3e7c3fb62103b84413575a6624b3ba6a0e8344de229a88eb249c9af1478c493970dec98a54db3ce44d84320916fee62d11387c2c5cf41616b293bcd8e5974c63f9dd5f496f45b3e7ef247df8a6c098cad41b0f9614dedc8c10ef321d97e8b6f01ed3c39cc0cbb3b50470f67e635037dfd805d5553d7d6300fc6605a238e0cfde1ccc45de41a1f8b13e1b4041eb0d7bba15\", \n\
+ adata: \"3ac4bd8ce8624dbcd0cfb1afdbb8cee169503e38008ea59918fdcc4d6da3a229cb997ab1f341cbf76158e2f0c977ff202a52e29007c55c91a4ebdca7cd266a40b5168b00565c53212832d56dff69532806bb2fdd933c290ac8bc9fd62d5ba6c8\", \n\
+ ct: \"313dcd7a1f8ae1a3e30b1281325dff45887a1a5296a0f454f05a393cad36623cff99ab2745258c79b8c31c0361659fb4fdbd23f2577ad0a307389c6279ef4464e2a08ef167164b09c7268cf5008e93db3136cd7f3597471c7b19441eb24ccb8e5582adea06ce0acc5fea1005ec10410afb221e42e616dea83f33d7367beded05ff480da42b3b2dbfea11f951ab0a40d3f503122d23e47aff8ed8f69ed5499e03a8d591ae0883e6\", \n\
+ tag: \"faafc4c08d8d3758e72365487572f0bd\"\n\
+},\n\
+{ key: \"bea3d9a705cdb9b8fd827240a9727c71d47994ab49eff97c0e53bec8a8bdce8c\", \n\
+ iv: \"ea9cb98df0d6ffb3\", \n\
+ pt: \"3482e8f5a79ea95e77db4f017273f485b6c4665b799973b3ee700849a5667d4be53f02270e31fb490d639033269194883d99074d33d8d52601a106fbd851f5fab91acbfadccb7630f89170f79a75a41b245efaa184449843fb7f2166f57dc5ecf50bf288b12ae267a911dfe80149900905c95eb33ae79b509cfdbec27621e64a61b1\", \n\
+ adata: \"6664a958a78df84d0e5345b327a7cdbe8fd1c02dc8cf0de21edf7f756acc3a24683b395a5beacd32f0772c49c392de8baa4e9759af6a7c69ad272b2b438129a5b608d2ce5fb8ebbe81039ca3655ededa277dc0a9ca9b664a02723ff55f7fb39a9ebf0715165719aa341a2380eb2338c879cef495f29e93c4543208\", \n\
+ ct: \"924e3663cb012155f43144e93582f01fbbf561e72ef82f84b97873f1e285d87f288d10c6b72425977df28fe7a53397f30d4b8fc003d5cc32c31f10baf8e3f3b26350748946e83884e31f8c26d972628f9d549896a0b2d38f9f9406fe4124508babaaf496e6681ee06785c81ee2db565c3836918703de12f62385dff404d58133aa58\", \n\
+ tag: \"dfbb49918d45a2a9e6b6cf67c839de5d\"\n\
+},\n\
+{ key: \"cffb631e05e93f78a9b8cc9a8d7a4ce816727952dc0c81b9165125bde800f306\", \n\
+ iv: \"e07244987e0452ac\", \n\
+ pt: \"63b862ff8658ac1d4608359e90b6a4b0c424056ba474a968\", \n\
+ adata: \"cad57d97b3323daf8c11ba60fc3a6c50fb63ab564358e0a9be07777d73bb7f407d639bee55ce367ca14039fd4c177a1ff150ac38dfffa55065df59211c46d360cf88d9be70df6aed3d511601436041baa0b8ce7838606a465f982a640de48e78075ae2c1cd0f231ab44f133b98e4a9ffbb6419d39b6744ae20686c704e6bec985d01dc46c3993ddbd5ef330d3875c5c731b0511ff8cf\", \n\
+ ct: \"941d385f60afba25e44dea913df92f26ba336b3f2872efe5\", \n\
+ tag: \"54913a5d0bce5ed11963dee851373512\"\n\
+},\n\
+{ key: \"70b86dd3f42d7c54dd029041badae874c4076ce6544a59054ff0fb140d06ae69\", \n\
+ iv: \"d65c48a3132f204b\", \n\
+ pt: \"ec8c61fa486cf4058ed8950193c56ead46fedff086ae2b620e8afd93f6da6d06a3401e5d\", \n\
+ adata: \"53025962c41eb00143a5dda28afd83b9c6a8b15d2d8b1969383990a3f232259c7807f473c9404f6d7d843dba700f4edf5deb6b887e42a5a87154ec33f630eb7e9f367fa049ff00\", \n\
+ ct: \"718f665588fa896d5b1df0715ce6d673e4f935bbb25c58e1106da0226170809f4b0fee19\", \n\
+ tag: \"b0935abe2ab4a33c2c55557f3a7d3b3b\"\n\
+},\n\
+{ key: \"a68b1eb0711fe511ccdb083086274ac1083431ddec6c05fa6c8d91a8cc5b6490\", \n\
+ iv: \"281f9ffc59feb748\", \n\
+ pt: \"ae31e4653413f5fe79889fc7db1f7cfcdb5a02083f6612430b74d6ec0bc3a28bd6a24b8292421fea6b9d667ff3f5d4fc5398f2ae646a0ecb96263a4823a689ae719262c575525e167595a952f88d13112fb5eb64127cb7f697b29342a4a11a2946e96829472cc9ec933e8f256edf6a3ba5d5ccef3846ac2158ca5972b50597f268855ae39dc8256a13c6ed3a8a30fa78a9\", \n\
+ adata: \"3eaa0286e6f0ae18531e9226cccb3a2d041d47ea6fc34fc7d7167ece3dae5d5dd4de42b2cbc2548c92903aec6c439db2d399b89f0e2475\", \n\
+ ct: \"0e70073c0f946b8a5c79e1e92e7fca3fd8d785844b733db31aaf0c989b452a4e1485673d431f9239aefd37f31c1d30020716766984e9b3b07796475a3c4fe11d0767569da852a54e719794518767de2b72a92ddbe0436c9808079a942be205bb25fbcb47bb7ac8f6bbd32ed111d1f5579c083fabab6cb68658ad87629a9e5d25f8a10137e17e9f7553791942437fa7e5e8\", \n\
+ tag: \"ad972cc46ef55779fe0ab133d5ae78be\"\n\
+},\n\
+{ key: \"031f099e996cc02c392f97ea263f0dee9968768995a5a255f971c92506051cc4\", \n\
+ iv: \"86038e7bcb359c3cceeb143f\", \n\
+ pt: \"8e71e88fa48b1b32712dafd3f7d0499da8eb36382fe18f978ff78a7e6198d4082af081c5b17523af80cccbfc2a24cd0f5f19c5b40aaec6f682d660072ec63850dfd23a708b202885568b79b15ff01deb1ff83b9c0c60bd6e1c4f2cc0c1a9fd1b53b6d4b232e4239464c62f8ee5e60c71d154e40466e4a36640b43c9310fd37fc5c7a8b6bac9ea20250292931245925f7b1ce227fdd1711db148c676f\", \n\
+ adata: \"141ce788eeab98341d7975d820499cb22324c5eeef5b62cc127ce379948bc723654dff5e89d1c856d79effc9e9fa4f217baa57d95ab1843f59424227dbe1afc1c6124dab2080cfd80c4d7b4c471a21a76974a7816f661d1d0d3ab8476ad18780a371a1544a0807b1275f5c292446be3dd467a8fd65a6718059d5009cc55caa9d\", \n\
+ ct: \"1d400e93ca2eae723f82d17636ccb687b0f4d97b1c8e33e89765dee383bf3a14d9330feb5288880d09317d0e21116dabbd7950614fc46f23e49a6a413cc8386025eedf014b88a3b8d6756b49327ebb97e58eedb130ab3763742b06cf0e23d0a65a9d8cc16b6cc633c2df01fe5d2b18bc694a686ff6cff3b7eae4ba42dc8156129ca4d4b11077917aa0390d45f677df7265e6b1725bdddad926ea1537\", \n\
+ tag: \"b458603903423ed739c12f6eb4f86083\"\n\
+},\n\
+{ key: \"99f3395aaf74d72758f09c516dd159f1e0dcf86e03adf03f7b91a938bcb08a04\", \n\
+ iv: \"467b533e3fbb6c98d2eafbec\", \n\
+ pt: \"fc2d34f2ba5739570b1e18c2f7e2b0cd2eae566c23b7c7b540bf573dcf9708471092faba933dd744d2fc0d63ad9213873db27be16e4101bf53ce3b5936a540be03d1cb27a69816cbdd9bf30b1a49ab750a30449b61a543ebbf8e1062d4c9d8e43c95db91f4e00124082c61a1f58fe5e47cdd5c3cab230394c2d180b71ca030ae06290ae5957c0ee8ff7adebb72fd8743f4fa299459b4806682a6bec2ac790f5cd7aa\", \n\
+ adata: \"569dd58aa45555caf56b181ef4a1ce37c88ec3a4b4347c94e3859103fbaeaa6798b73fe690a16f94231ffcdc6d15663c57ccf04908802a0dbb5458fe0e5cf894\", \n\
+ ct: \"4458ee74709268332c966f4bd8aa5073b08d35a4520ec4c8badf2ea7270f3f52ef08a58c92f010e70ca16a46259f8f4cf07328996fe1bf251f81f98c5a0ac28536e668cf565fa5e2efbdd26dc49688111bfc36a6ff17e23429b2c3822216ea1b990acb685ea01c2d69b427726dde221e7c9b5d1819d4574222ea3dfaf4875798b5fdef5399c584e84bb18dbfc775831800e3068f4de5ec30b33bc4d44698ea4e4d32\", \n\
+ tag: \"f92083be3830db6fb6dcc44cc33f45db\"\n\
+},\n\
+{ key: \"d6922397759cf3ce0398c2f20be4d8fbcd32d538c7d37a804b87bb7162780359\", \n\
+ iv: \"3c9f81513b1d0f8e\", \n\
+ pt: \"e66753da30713bfb025859144532e62958908f2eeff156b09e13defd026ab16db13366e06c07c6bf48233919f15cff43251942bebf57567e1005e545920f73480b38842012a85d71dbfb0f971252\", \n\
+ adata: \"d69e1d1900c0c7cdf166f121d197c671c612079f31201de3b0a82430c814a5469b35ec7a94146c5c2383f516324d5bbc48f36521028846766ee069e1cb4ff433da7646e7\", \n\
+ ct: \"82b327a8d38d49b8f06595664a42cfce25ceb87a4337304baeb27c392d991df8b111d66ff6d45861a36c60e6840a56c33fd9560e145c018e4dd119160adb784ddc1776cbd74aa4f2604f53f33c53\", \n\
+ tag: \"8dd3cbf88befd2d597448bc84226c656\"\n\
+},\n\
+{ key: \"093e7c165fc620cb9627586d46c99fe9e00a31857cdbbfb2de5caf151c8316df\", \n\
+ iv: \"3cec4cfdfc23081e5c85d8a6\", \n\
+ pt: \"572639d334686e708b5d595b499c65dd1ed8f2ef4904898c2f8b0b7278adec232357d31bebcf466713275d54375b37f1dc1f86031f777709b5a9641befa36444a2\", \n\
+ adata: \"9c75c73eb26d7099ce398680fa0fe89f2e5e3771c68272074e5f9116a904c5bdea90aa72608a13daec84bb0e1644f44fff1118ac139a46fb2ba9b42ba119787d1b55221d87ce92dddb91f5d8d7397f7723532227ff9641f7f64a697c1bf45f66f35d33526bcca9841ff247ea008ba18045f6734c9b265af109f9024c77b828b27a8fc19043dae99f38de7688bb22545086dcd7de9bdeb7d120391b86c6386416bb5bfd9961\", \n\
+ ct: \"ec664acaeaa802c719a866ae18772e06cab1083d7e11f993920f59953029780a2af796199648f04f8d62c105d7af2a24023ad3e068d2bb818b70642065043bc425\", \n\
+ tag: \"614deafce9640c535392fa19f215db48\"\n\
+},\n\
+{ key: \"563296eb0c00759027e1132d7325150a90a3e2c6529bbeb6f87e337b45b69099\", \n\
+ iv: \"b96d7c76a61944f7\", \n\
+ pt: \"7416454afb7c1702f38277be87967030da2e67b1799cdefce9b2c8425abef625ac0aafc6a8ed7277961285f8c767faf71f\", \n\
+ adata: \"45a639b4d7ac95fcd187d9c38ea07695ce88fed8c81b41c992112cf574a747aad664e11d70e458c997dfdd45e2fdb31f8fd7baa448dec119da8ae91003336e8992ecf9fae5589e1e939b6f39db92f11b742018da551e347f6be89b9b09b1c6f2d6078a1ce70e2b0dd47c79fd5275c6c7c6bf639e1a8b7bbdc84a07c8a76c9d29c311daba948fc5636ff9eb318f135b9a84c9a2629e338cdb8bfd89038dbf1ca73ea5894ddf13a9a61bbb621d4a0dd565dc2cef9708\", \n\
+ ct: \"01872394b44aa39d54edc6da8cc1812db90fa454359c0eafb8384f5221eb08cd6a7e0c58681175cfd44f11c8ce2d582381\", \n\
+ tag: \"1dca50dfd2d81bdaa555a29826d92907\"\n\
+},\n\
+{ key: \"315e353deb9c136d5959d8301a39b1a01363f5ad3fb2436333c17695cbb13f7f\", \n\
+ iv: \"8b8eb71390ffc149\", \n\
+ pt: \"dd02aff4eaf770b9c4d7d69a9e3fbca5bc58baeeec42a63b75e63378dfc50f77d0dd\", \n\
+ adata: \"a2ea9091149c31b89eb5eff3acd7fa9a77a888e008523a4bb635ffd3e96c093d882f26d64204abc1b79b1ab269f4557d8c189053e29b820c88b92ebb4a6f150c99e571af1dfa2e56ac8919167a4b94\", \n\
+ ct: \"bff8f4ecb05fd67cfae94feffc7982c29d56c76ce7c70843603a965cfe69130c867a\", \n\
+ tag: \"ac8bcb8a39530e7c6b3a76114986c6bb\"\n\
+},\n\
+{ key: \"d59f865b627e42139ab4221e9623be20e61119421a517b14ce1851cc0014b561\", \n\
+ iv: \"b7e867646a3b9eb5e5f4bcfa\", \n\
+ pt: \"c0da174904c4173ce14e5b4c944f8bc7fad2ab85a7e19c25717bfe0b27729ea83026\", \n\
+ adata: \"cf3f13d827be66e81e42adcfd3053163ea2a64c1b6bbcc554ca2f5efa3d0d487d6cb681ecca0fbe5335b560abe41be1f81fb2c99b3bb8017c10eb54ddfb0014cc821f34e5a5bf2e821012562484ba05b3b7ff2665c3e47d5ff4177ac1d1cd1013740dd6fe2b5f0c8d422dbe762354a46644cd173b9271f0e0f60330bfafae7a3eff18baa\", \n\
+ ct: \"d9950cf69a7ea89d74d6109bf0c2d93060835aa4ebceb2a2adf76cee6c903f9d1121\", \n\
+ tag: \"5d5117a4a6ce78d9a4dae6553f774c04\"\n\
+},\n\
+{ key: \"0535f11a751cc66ca88554124c75d6bfa9d90744d2fd9500ef1bbbeb77332841\", \n\
+ iv: \"9f223c4039ec987ddbe925c0\", \n\
+ pt: \"c0a2cbb6b6fbfd9a5bc53a07ff75ef2ea11a3b4b9a66a3d30c9b9150a828592d1f64350bf2cada0a0e7ea2cb08c2\", \n\
+ adata: \"2330a5bbeafcad34292dfe0d4870185f8e35843b77360a27268972598607819304c56614979e14a01f03127a858fe5c02d3a3c75481fd01ebc256b9d3cb2077f98a414667db11c5e275b1b25b0e9e6c854b57f07499af7b3a8205560a6673267f0a121cddeea2aadf9783d198eb022b3c8b5489c3ccea15cd8c419cf8ecb06c9376d4566f6759fcca81e9935908c\", \n\
+ ct: \"10cc7092bf9bdf41cec227e66d4da37c1c8108b9271a8a34eaa8acb309b4e50eb8d35ff0dcc40697a4af42f11a29\", \n\
+ tag: \"27f0163459ba987ae098a4ced1e76ca5\"\n\
+},\n\
+{ key: \"61ed5ffddfa8029a7da40728ed15a04127d1b74e9761e4891ee7a2cb0aa776ef\", \n\
+ iv: \"e0495af42c0dc98f87997292\", \n\
+ pt: \"ff62db2846ff238761f5043a2581ccdd2f74b99a68ba2372bfe5bc09ad8cf91ab6996ebb77d72f3e6583a1d1629f82a2a394b393777ad8ff8f0eb42aad9bc89d3589efe9d0ae1b11e6d4ed9ec4e6b28d800c0c0486efb511c1b6a40776fafbe646e873eb4111bec90850a3196e45f1e3a1d9b19c913669bddbef1c2834be\", \n\
+ adata: \"fc555897b8796b3efe2e3248\", \n\
+ ct: \"5505b83abb5ca6fbb199303fc7fc9286d418e3293b8cca2f318c7b9af78d11f948bedb59bfbcc61018d566885114a126d9682787b975664ea6fbca750bf451c7318f6ce4cfd55152744d5d6d29f29f568251cce53de953d297886a5a58db185bbb4a37a7aa5b1984ff01459dfd3967d4148de313832e9326acf61d20ba92\", \n\
+ tag: \"2ccebd39d590e68c5dc68c46cd3fa7c4\"\n\
+},\n\
+{ key: \"f7639df28fa35c21b5c70d3a3d4e159edb3ec0c41e48a4b5d5df7d585faefad7\", \n\
+ iv: \"bc5bf1529f8a0cb88e8997c7\", \n\
+ pt: \"4a37bee7065e1a624e1e3a44fa52c5b4aca7ce87ffa9fe579bebe3aab4ff57937b006ec5609e14f4897aff41128fa4cbdfef7632c1d1b956dfa11bf1388a7ed6da98682a6c3beb6dde1675442cf8b117fb9bcdf2fcf7444af2032c2b14086d286215ca5c7842a445899dc4a4a7ac9fd899076e146fd106f15de96aa65ba34c525d63672cc069adc5c2ab426f1ad2a1ed88c2cb02b28db121c340a7c532999efbcf1db6427feb68e3636c80c94cea33484930ed519686f505762e\", \n\
+ adata: \"5bfa4061e39440d89e77f7fa5e22750490f91be82d2cc1958a189a2f6d9d1a1d1ab4bc24089fb4a86b3fb29b098c2e8d96118da1227fa1cb0a5633e19658f38859da7bccd2aaa6be3511edf04869f928396c3e4114100a8a68dbe2578d029e3e0beec28e786a6aef48bf98346e610b583abc32782b655175780e35\", \n\
+ ct: \"b30439537e254d0de29ed257de8b141b6f1b75601375a46644b1f4dcdba580bd8bc1792c9d15e4af8ccde725f6ed28b0b7da53254ad391dc415432714be936f24dfdd3da5cebbbc846494056f5fc177a67b960256887207bd0a7e7945efb2035889e3dace50984d1a0e6368f980f40831487505a0d4b557a97f642e5219ceb0bd66a8d61ca54a00a0545009d1bcd286ef3c8aad692bd5985b4ca9b418543c0efc099cf253cc74bd0f85d25d9f77cf3af0fc0c30bf3b25d01f246\", \n\
+ tag: \"ac3c227d6d0a62ad433df26000a7201a\"\n\
+},\n\
+{ key: \"a00eb9133d6a56e9b8310cde4c1e7b85b872d2801b88c8d22ca39d4c3507c5ea\", \n\
+ iv: \"0c6f5248f9f85d42\", \n\
+ pt: \"6d18889784d8e6b303196c3ab2fa05017c4d2aa4b3ca510a100c2d65663f015cc3bd68b9b0431dec96501b2a3d49b4a7ceee\", \n\
+ adata: \"88a8e3680513bf2bd7c8031df931a7fe17e1893f44e4de60aef163dd85bb69a7f61da7fffbeb4975fde13a7fe555c398fa3144fcb2dac303e4f4579da9d9606c13df4d0e49ee7d812d9d7664cb083913595188\", \n\
+ ct: \"5ecafd44dc261208ea414d630c15127fdd63967e310826fe81a8c211fdb72e3f88c5fb2c9413d64336d191155ac6922541c2\", \n\
+ tag: \"2c8c067d2e043427b81b687475483fac\"\n\
+},\n\
+{ key: \"d1323729ba7e221fef4231249bff90504e49b593575fd46dd117953318d10aa1\", \n\
+ iv: \"d9a94ba9c710c1c27acbeb46\", \n\
+ pt: \"a9c8\", \n\
+ adata: \"bc9c21beab93f68db6d19bc59ec310b875275bb856eb9afc7474158ea27de638aaefa6a9451e006950a165cb2a0202c8b1f92d5c7dc7ccf92d52be7d34271b406c3f77c68f1c4facfd26f7fdb9e7087879398c289e6985b0f203f8cc39d988c68a1c69d9e39975afd1fec6127326f2cfb71473e59cd8f004fde43ee02577b99193b4c0703970d62c56c205667746d1f92d87abe1082268c7736b67ec\", \n\
+ ct: \"fc65\", \n\
+ tag: \"6487e968eb5493a706b5db0b2475b778\"\n\
+},\n\
+{ key: \"d2c088c5676a4dd7382970d67fcf490820b8178395171256dce4a58bbb0cbc61\", \n\
+ iv: \"ff488a72d7a0d2743c48d523\", \n\
+ pt: \"536ef658e7baceb8d2a8a3f83d54e927ad96ea758659c08740d3d450991ae67d8260e4129bf752684200d44efe7ae5bea66bd8802c004e99eb6e197c338cc3170b4113cdcb403740dcc7848c92b2d944e78c7d1338a0150542570595c41d9474242698e16d8d0b229c78adc867acc25c17f8f824bc878ea7ca8e8fa65417a9931d653b19dea7501d7edaaba56dc14aa0bc1acdf5315dfaebd23fc192de761f214eed8767619510a0aaeaa8c806dac576110c4b75208dc2dd6c88cb50ade40d21d0573b778bac\", \n\
+ adata: \"c642d53a0cf8b9c6280c144db4fe4f20fbda81bcda29ac382c3db8b84d801a9087fd2657629a5b59d267c483a17a9923ffa7835791ec4ecd810fb4cd38d394e59964d6a1b5b4218b3e17ea888ecd0e4c9142b0cd607d9c27efdebd4b51615826010dce04bff35beeab4fc89a188858ea55c73fef5446b485c839021149fa8dfd4283b56f889531fbde7daf5d84977d6838c577b61a86a4ab184aae\", \n\
+ ct: \"0d824cb9f3d373b4e69ccfc152cb51ffc69a277b4287bf597d63dc24330c3c7352526f1f76791f85b902470c599537d6813edde04cbde8fba2b686020049316eeb75833d9c92227219c80e370cd77e3612b626558de66edd0258a0f7a1d1096cd00fb612b12ede51309942c26388342493fa17c33e8a286e0d2c59adce60aa94d54e9d925bb45b814733636d204fb8674dbeae07d6ea7d5ddaf9c58e5e75109a1562a4d7c6334236c02dd417ca8bdfbdb977c393a7f9303c0519b2a432e54b2f6ab167e4f54f\", \n\
+ tag: \"bf4a7e1c2df7c9e39f4479168b7444a0\"\n\
+},\n\
+{ key: \"ad3b513062372fb18376cb647ef83e4f976d111641137d120de604e0c0969208\", \n\
+ iv: \"a9db6b58ae9cd803\", \n\
+ pt: \"95b791cf46303d4d857404eaffb251ed15303283ca734b15ca4557c5e1b548afd2d480b23450ad083c0ec0b854ba520330c13704e9919a0782d1eb641b57d06337bcc22913e99505b6fd4745d7e5a0e1e63e177a843aa127b927728b314033cd83fcaffa6fd25e9b0ffc4f853b1c595857a27e1e7c477bd26725c53931f42089c2ed183760fa04d30c33dd4caf8e7b0c8529841943a1aeed035c4064a96cc04aeec313af6eaeb358948c69346b6f8f\", \n\
+ adata: \"a0053f00ba27e703e2779c3c920d87ad7302c1e13681434eae3fa938e18e4f042d0fd6bfe6816a1ab961e8b7676971de5992ae9639555504cdcc\", \n\
+ ct: \"7432adead44fdcf4c7c13d43bc5a9fc407dd7cdee9d147a1d3d4cda702a5484598942c0f45ab5615fc62e879a81108e3e13988cb52e1be5012976df01c6703c173299d5e01103e4a0d03b7dca9120a3eee1d5e88e7a7bd43df25ac8d435a6a78cd46434ab40a8ba4d9b5073b53dd0be614f961afb9c8b0a09bc79f4d7768e824315bbb24325323562485d655d2dbd0290a3fcf562f72b4e5e05bc8082167bbefed8ab0402e2929c3f0f3dc3b8a0599\", \n\
+ tag: \"54d080c7f70b6bf57a0e1371513afeae\"\n\
+},\n\
+{ key: \"d3aa73445aaeb9330f7ac80538296945c1bce2df37a2281071baf36607d45e54\", \n\
+ iv: \"40ac14d9f348da744a3e3847\", \n\
+ pt: \"5f607ad2efa03daec4e6a9a8b9b888f7e5b8866ba2bba10b728c76c317d5ff236158f015cea11bb1d87e0beda7f3f9db94ca52cc06a036a35f24f2b371093740a2d7b4e3d1d22cd79b00d7208945b1e48fa23d1f33657ffee4d3bbdedb30c0e24f5360892154db52d737b9637031b60a8834d0fb85165d917152d51982614de6aea23013f29add05068c0cd5912aa3cdecd9cdd0ef5cddea48a7905eabe73f3a0224670572d300a3\", \n\
+ adata: \"c290775285796f2abefe649ea1b7c6936784a567f85dd548c0c2e3fe\", \n\
+ ct: \"761dd69fde066505291051de9f65257f352d5a11a96a09d683b721c057ea7b97b67c96d1e9d375915db4371afa73e5ed7c2fb2a1e0ab8d6a07a5db3006d6705585eff682af7cf3682cbfd06cde828af90f924dec2bfc4d2b12c655e0aeffbc3574333742b80ff6a6449186fdb68dfb74d43c65046aad83b2e58a51fe57d464dc45d259a50dcce5cb629bd093d130af92790ded49535f8666eef0bc8ca05c9a2ec6dc56758ccda49f\", \n\
+ tag: \"30a36b37ea9dc087a5ec0f6eeea81a69\"\n\
+},\n\
+{ key: \"af445220340ec87d4fb081328ccf0139bbe33965a38e203f3a3f9e3cfd748fad\", \n\
+ iv: \"5a08a6abc76b269b\", \n\
+ pt: \"94b57f5481eddb4389bb4a57bf477d0db99fae5e81e5944f8db74a78b9995db2471a409d7686f4625422e285fcc223d19a85baf04f7aa5f19c07393720f220cdb4be774e5a1f534169bacb7420ae8bb2bc17cf9c120de273be98b4e31c0d4aae304a0279eae303b69a270c1c30f75678dd680ec46b3b535631714b8a180d15d0fc9bad25005e68cc5063f60b0f3784224feef33cd545b28f4d964ca88a756f32b46e7bb5a00291cdb55c1e3f4396e8\", \n\
+ adata: \"269b7313db1b9c582bdf9d992d3a285eee87971ccfd3705964e9\", \n\
+ ct: \"30350a30ffd54693eccd6de2f973dc21c39a0a9277f88aa18bf79f8e2067da76041e69942c18903af46879ad83566eb34fb3eeed6c91f930206b76e7cdb526e53fb7dfd5361a2ccaac8c1aca0de65377a631adcd43f6e6287d3f5fcced3be8eca28c45bbd7a51ca847ac727781bcd721436e050ca09dd315eefb8207d6854b1f1dfcc0371d01001dc630e5cf56e0056421b296543308a3ccb2a70b48d4711cfd99c5e1c81dc969eb3df01ef0b80085\", \n\
+ tag: \"42d627d030c7b9dfe2b0b12bd91cd0ca\"\n\
+},\n\
+{ key: \"da937d106baf58dc1f8961be3021b8652f37567a3fad59a4749945a3f6d15a6d\", \n\
+ iv: \"d9f9c4a5efa43ec7\", \n\
+ pt: \"4a0f0ab9851e94d58c3303fa75fe0c20\", \n\
+ adata: \"41ed4e17e9548dbd4718103165e4cb8aaa5b0797e7286e6c41ec4a02ee1df35b4af66bc98b2b7d0f73e382360ba3dbd4013afcef1a15a9ae0d24e517364b25fdfc1b37e7b2971748b40d474ae255c4339a0d5dc768792a2aa979afdf07acf98d1772761002a16430bf5a5e97488e\", \n\
+ ct: \"644c015261ce0012e25bb5f0bbb2bc21\", \n\
+ tag: \"4fa5b7be247ca93d5b72fd3ece63f903\"\n\
+},\n\
+{ key: \"6b73a71f9edce4224274b249ff2dee61446e16703479ca4d04c24dda4b83a590\", \n\
+ iv: \"8ccef17f04b32545\", \n\
+ pt: \"fbef9a2840a180daf9e39b4803ae25b05c66d4a4fab386d6b4b948c37b328a945ed8d0fa8c674c39eb92a8be5f8f7c993df91aab98e7a30eb6c16dc0549ccc1f783e5095387695f08fad7a\", \n\
+ adata: \"808908517eef0a2ab1b82bdf7468470af9bae96e3e63988b79484b2c741086e6\", \n\
+ ct: \"336dd7cb543b5ddd195443d3565ebfcac99e3e56aa9ddb7f2e306d78dc05487e904ddf6b403f38a330958b1e70a59047624be573f1df638c591956547b680e90ae9fa0e77a3b9de7fa68ef\", \n\
+ tag: \"1c6563223901fe7210d60a5ab9044a37\"\n\
+},\n\
+{ key: \"3d51a029287d283352beb803370c592f6574cddce3fbc7a96c55b56f549e3a5f\", \n\
+ iv: \"d0995d2bbc04024e\", \n\
+ pt: \"21a89875480d259e48173dccc75bcbc281faeefd766a6ab0ebb97600aad2e7c5e1ba33ab818eeafca247a30d60c3146f151c2697c72ed741c11c6057eaa6e24f8138625c711da5498501e230bb98a92153f86b2d\", \n\
+ adata: \"fba1b95e092aad762b9e184d71b6bbf324dae6d692e834a2e47f65fdff00f763f1133c68ff2395f7a1e7c22fc34ad935d68d0b46d5ecdefb46f2b02a811a95d1214a494005ff0d7f790311ad60cf755721960c1a3889b3ff701c7f484ef079cc3941330e65163e96edf8ee930cacb67473e08580947f0b8488fa9573f849\", \n\
+ ct: \"83d9d2141925eb56e8fe5624c5974513fafca3bba10c8babefb114eabca98399c7b2d32d0471240ed9a6688aafc56fc579897ac551712dcf8c331ffb0a80ae78af5c451472193de2cbd9a681a2917ced7b424cbe\", \n\
+ tag: \"58132a4a039820e5a7bfe64f55faf387\"\n\
+},\n\
+{ key: \"1571f638ac95c851f87a78e3081215824236bd01fb1ce94e008e18219f3339e7\", \n\
+ iv: \"320d19187e1e7bb0\", \n\
+ pt: \"10b231b09b\", \n\
+ adata: \"4e8171bfd73901b44a32b97efd8c8da67762084bc6e140ea23a6f9ff8377bf3b96c804cfc55d104e514d5d3dc08736d315d1bba38c4ee29af320f7fb39a3c7b87ec23a6990b761b730b7eea0cdb432e056105d749d156c853869f1f57bf17e4560bf\", \n\
+ ct: \"81570492bf\", \n\
+ tag: \"97e1b43a6cce13e498ac036d429e8c5a\"\n\
+},\n\
+{ key: \"72ad064d5a1ff04db8bb71573728505d230c9584b4bd6b783fa6743ff4ab29e3\", \n\
+ iv: \"9e0e6e22bbdbb0a7870d4b23\", \n\
+ pt: \"dfc7767e32a2a838f95664d6de9dc8f56e90cb1757df3b824e78033f0a48c7811fdf3bc9a32b821f9a1cfef2bff4f74f6a2754c908b0c70950e50469983ea99923cf02cd88e8644260561e574d7c975495aa7ac24d9185db72a7d35fd8b2f5a6a681fb22424db685833482107f98b230211e27ac0ad8c561fabd3b7def6674089ede2773869424352108aad8d56441ff5272b3ddf6884973e8b4ea608d24075e52e9cea81f8f68e2b7b28e5cffcd0b6ada7a86\", \n\
+ adata: \"521ae39058a5ce2e299bdc1c6081aa1d08497e03d63c16552b9b9edea1a95fcd05b8e3b57e384427aaf8b0a1822cb56d08abcbc1bbc1bb6edd1e363092700c2f8032ebb416c8d296c38171edacaa5e48aaf94e03099dcc460b743e48c9f221144ca3bf57d478d0c4959d2ed4b7f45a3ae115298fd82a45cf00bb92949bd0a34c5c472555f7164af85b026505\", \n\
+ ct: \"a32fdf72c262e27454a56dfbcbaa6ff1dbbb6aa01f35c2e46b318533f8a37d88bc2ec913505a96487f78b8bd217a0a1794682ea8bc4fee06caa99abca898976c918579329471afde3c76ee53f15b472af60eef160f341c39b1e9838497980558569286fc8a1203d497f5ef4f938019f623150145608bd84fa8dd3c2923699b4633a547ae980fccaf618d8a8964889b05cf9a7b575e3cb71aa572f9a5c12cee846781b6cfc6f0c4543f724c60bc4933bdc1cb48\", \n\
+ tag: \"03099f9e9ffe65b65321d24a8364fa9c\"\n\
+},\n\
+{ key: \"090f0c0a9548359e0364ab525eec87f403b0558c757e69bbc0917199308b8599\", \n\
+ iv: \"9dde60876f9b5b0dee84e606\", \n\
+ pt: \"c88604c9020d4f1841a61fad24e0b33cf43f93c65e2f\", \n\
+ adata: \"a30312ff048caf272d7420be28abd7c00e0d45be63dae3931ba72e8b3b92e75832cfd7339434e82ac01572bb8c04fec237fa1beafe5cf4fabbc1365af7e7634c09c5be6f946e8a1b27\", \n\
+ ct: \"3dd49b3381217e91c4e43a7d46710d1e305a35db2219\", \n\
+ tag: \"85aea1cd6efd885190e9c407bc620453\"\n\
+},\n\
+{ key: \"0e98a98bf421120c4c50959a54dcea66bc8d871f47eec9aae2871cca7a9d2fa9\", \n\
+ iv: \"27dbb4a427ac53c5863b1bec\", \n\
+ pt: \"f30c143befc6e72e076fc672898aa8c4216484f4b17baecd9e6587ca19e0775842f442038b7250da0454eba9316edd16e3e4c4db0ea635e167ecb4956887a2480d7db21b7525ec2e4629cdf14d8ce3921425f354ee78427c2024754680ec89305c471852955b3199f00ea90ba28413529604f0c1b79123dbb7bb189e13fab5877f8d5c1e6784937ff9ec86cab94a99ef61cb696b8a64\", \n\
+ adata: \"370fd70e7cd49328be23f38d78d23ee45680f61fda7f127b79d37b010fbaa87b0bb3f01cc758a392eef3c8671f6b73d7ba9c3d68d3168df8658a687037aa2ff8a472e72c2b9a3197bda7c7bbbb1867c425e326acb01ff837f189488a9d47f990368719077a01bca7a8\", \n\
+ ct: \"d7b88c2a9fd2a7fd3b0554f0cff1470126d4b0acf59b6c6934d1ca535c48a3b80a5ce21462998e4004d708ab955bf6c1bd8692153fb78a7520c50a671c133c61cb6f6add43a8df35302a1ca10af353777e23c619d89ef13da07e1e2f90ae524c5e6f6eb2487c637459c3ab9556a76000aee2cf97975cd0f20b6b75f5d4ac7181e9d5b692549f399ebe123017f8f650c2f07f2050c526\", \n\
+ tag: \"5a6b3f79079f806b559288ec5727d097\"\n\
+},\n\
+{ key: \"e0dfde572298f11b043a589e7b4cdfddb44a133283171a12b209005a99494562\", \n\
+ iv: \"eb5e699cb9b63361\", \n\
+ pt: \"540c2a14cf40b8954f3d28e5820985d7498c5a6197786cf7c079447bac9d1037d8b115e966954fc00878a825cd673fb9af02dce2291fd2e008be077de624de1d18af5390a694953735b0437581e917ec211d1b7bfaeb6b8a90eb\", \n\
+ adata: \"67e7606d897d9d1dcf85fcaaaadeb05abe1462458cf36eac8ef7cd596ccc4d37c2bade33ec2198e89af681e361dc664476c2cc7cc7e1181c61854a18dfaa8ad30662726813128a\", \n\
+ ct: \"71d33d30ed476a8e233621aa08cb23f621b6b775c5d539e45641df6d83820e685de46076577930f5a8a9055633cd5af4416a40e533e676e3467f8abb68414ddcc34e8f27f3fff2973cf32363b32998a710e3ee59d22ec6aa3aa2\", \n\
+ tag: \"0f3e988ec147ab918ffcb4e321de0b28\"\n\
+},\n\
+{ key: \"838ae9816973427a8cc9b5483a33def30b209e183a37390dd603f74d96c75726\", \n\
+ iv: \"415bfff6c13a2285\", \n\
+ pt: \"fe7398aabc6269646bf5530ad0d7b46748bdd50cef24a0a7e9f3849b0497bdf6a9030412a6293635ec33e71c23623e0524deb78925be2f04871d874f1e8e65a3981cd670d09b40f00709ec6a04151cf670a636f4dad9044878\", \n\
+ adata: \"f462aa354ed62caceeac00e5141764568299be640d961587e630\", \n\
+ ct: \"f5fee2d06cc42576434142de233726b852db941938305a2cb6594e9af2599d17ad1a98fa7e75820aaf2ce0d7b2959b3d57249eeb8b27c13be1c7a1331d58feaf67a682b1658ded6982bb9e9ded10b42a9cfd3a6aac8a8b5273\", \n\
+ tag: \"7ec777c36bfc5789fc7af6d42dbab53e\"\n\
+},\n\
+{ key: \"4297756df05ed563ee0b73515d3f022b528d62c1e6ef89e544eed785ddc43325\", \n\
+ iv: \"f1e97514c8e9bf3747626e07\", \n\
+ pt: \"ce3332485417c82d8c079fc67f2ca346b8bc9be2b5bf7342c45f04f90607d870bbba57e2cfcc1cb5b2153e711424d0859b9212df61a8f8e0d56463c0f8596b4de798d6ecbfd24ddc64e441b8a7a9fd7070e54b7518bc8b347dc86d2363061e2ff0b300a10dab60d37263fed85390b4406f09513f4139258b0338ff7661b3fc59e037dd5a1413d20fa9ed62e56f85d2fc36af5107db5ff25d832df70f97e37c90ed06a798547a1b13029c3aa1bb1c842081f9\", \n\
+ adata: \"053ea246355ebed4b81fb3e159e7d1c27b07c6fcf8844b82d9d6dce9279e69c069d4057d0ba290e777c751160bfe889832291de2052aa9b7c7550a6dc2d01c4e7d0300526fe603eba41548e26cce87ec55fa141b68aa2d1f3637e2aa01cd3de0e623a6f3744e823b7de6ce8e\", \n\
+ ct: \"405d836906bb1715066933239f0d8a62317b76c9140bc35c64ef610baef3a8d82b3d90cd9667b35608b201427f4d5f59d76232233bd5ed382e642d7df0c0a49825c1bb79d657ee3a6b77d60c47d75d8fad8d5d48007f12be53a0c7df2c415966cf52f8b2b011cbaaa93c6dfdcceccd90200e75860c3837495909c2728ec9dafedff9a2a1f95c3ba71cc0da1197946e828ba80714d3d5b26b9a680ae6cf36463ff8ea1d28b717d3f10390d9ea40b17b1307b8\", \n\
+ tag: \"58ef3ca198acc997d14413f4d38b83f0\"\n\
+},\n\
+{ key: \"28c07dd22ad879ff8bc414b92362d29cdba757de22421e10b4c5e8e06d1e7975\", \n\
+ iv: \"29fc93f1ea5acffe\", \n\
+ pt: \"fde95c77b9c84f83ac92eca9e1475cb30a4dc438edd67069bcc4a174e6fdd870e0d210\", \n\
+ adata: \"a86ff8390335144ad0f2a55a1f26d20c4d8ff522413dab18b0dd69386c76ba8e0c3df4cb7d6994c66c39a0fcb3fb870df9bc\", \n\
+ ct: \"5be541d3b724eac0b7f1318d52da07fb8a6829dba89c7dea92feae0463f2a59c598c0d\", \n\
+ tag: \"b5725fb7f13369c0a6dea8fd63f1e308\"\n\
+},\n\
+{ key: \"ee5b37b17683ed4290f1efe3551968e83df92b0ce85506cddacb85bb74d97b2a\", \n\
+ iv: \"a1ef54c8f8384d5ad4d55054\", \n\
+ pt: \"0a3a13461e902a4a9b70a42ac6844e7a162f71dfdb4dedff2fa03f03b8875b9410168995b1b8e9\", \n\
+ adata: \"d8\", \n\
+ ct: \"c7bcd2f3b75308fc21712126dfc34e2e13253f8a622614ddbe2278ead46616ce070af18405b23e\", \n\
+ tag: \"0c3d1185aa57b9b3aa8835a62c46efe7\"\n\
+},\n\
+{ key: \"0e2c021811badfd2e1cd8b5adf61aa4dc3706f090bef4f6eca0f65ae33e4664f\", \n\
+ iv: \"019818107b931484c44cf55d\", \n\
+ pt: \"1ce5180ec3f2cb91ddcd050512ef38a2880486cec709f4e139f3ddbec95f95a49a3945770a7821170042fd4a8a557e9587e831812ab146e328d915e96b3385ad570d92efe6be79bdc798a6b4d2af7f6f29107fb97e5e187b09910cacfcb81501b0df2a758ceff04f0f\", \n\
+ adata: \"09689c0bf881407724ae9d020cbf0cc6dcf6077f54971efdd7ca17bc73bd037b2f22922b65b9cf7cdae445f5ac455ad4e24feb4e5db4838810063f5064a730d3bf0721eaada878bea8cc1576ccf485b285207cec23bdc19738ee7306b20c7bc0482287f9a26aee3bbbeb2d3185c40eed5fd90505420c70cdc531f2305dfcd60524c2ff040fe2409853fed43c2c699e20020b5672cccf1ba996\", \n\
+ ct: \"0deb6297ecface697746344ed86cc5e1ab33f8dee37fd869fc5af155a73c38718035ea23bcce5bf163cfce1361393291dc08f7bb91be61f4de1eb2767ba69c3b8329739177c1521bc9cdf12c146c9ca5524ae9ce1f4429bce501abbbc52c678c8cd53b96a171b23ba8\", \n\
+ tag: \"48aa2bb07f4027bfb51d74013d5cacbf\"\n\
+},\n\
+{ key: \"80f24c948d8ba0f853c8c659bfdbde28301dd29ca0d6a8a90a4680d7e9a5c7c7\", \n\
+ iv: \"074ed241e235ae0425d8fceb\", \n\
+ pt: \"68091db83ce49454475f0010b14631b96003308bfadfb9e52fe0c25fc3d8e676ad618228229a96249d527b62919c\", \n\
+ adata: \"a3efc71b77da55298e1267aadbaa0c5a4327e5c0164df326512b16b421bad6de9bd56d487938180b082099f570a835cca920b44d580436de13bdcc9672b367f3d67243cfd3ca06e5e7a8d29be4de582c44666a10a44648bbd0bb1d6de772e93b3c2495cd2bffdf961b988d08aa056e029dc0c053b988e898fb71186208ddcfa2d871773a5762826a14ea29878a237793f37878b3855d34f87acf729b548db8fb8c0fb6a4ed4a0dc1db471e8eb5d5f7c5136f87f0be35c3e984e98b\", \n\
+ ct: \"0b018dbb566ef6b373dd1b503ae2b3466ee9e6e569fdebc5558542351dcdf052ee59be0cf6610d9aea3ab8d7501c\", \n\
+ tag: \"61b4a72dc61f0d0a34f7a24064df2356\"\n\
+},\n\
+{ key: \"cce2d4f2029936fae5d3283af45b0dbe0f691107466f096b337bb2b61f92cd0c\", \n\
+ iv: \"94915eb3b6650af9\", \n\
+ pt: \"eae2d9bd52d4a8ba773990437f6d4b5d9b5e9e91cca5caac666c1c7c14eb4732975e6a165ef86d8182a8611907a422c220630b576744efd4b806389bd1e2ebf6ee84cc93432c0ad13ac25cbd96d989c362760ed9f903dd1e56b2ba11c3d3cff1265de823368a53ff1a64093b3b5a3f71cbc948faf2cf12a2a2129988a6d4ae4ee3ab0bc735d278e732ab42f467dd2e32dee7da97e2a416b12266af784f\", \n\
+ adata: \"6c7bdcbfb53b81cbd3d2288b36d59bf11021ac9b350578b75aa22a2dcf841f8887a7eef76ac719f3928ea629ee5992ba0fc016b9f8d3db1f0a4c402bd82c1ad94418d9b6b1517d897aaad4c6afa8340d464c17f046841edcf4f4ce\", \n\
+ ct: \"17019f99329a5f0b32fd94735be06eb98f2f78fc76a85271e88a39112870cc5d3b5671c24b1aecfc271df858eba9703def1ecba324b03572a0e851e5dd2334feab93e2182d0d2a9c86cc78d9463f1fb8593c3d2752cd94acff711145ea028af7afb0aa09bc2f7f5a9ef548ef9cc671ed35d5ca2561ae7c5eccbd4a9c0bf194cd6e3eaf46c43ccaad41dc4bfa202779b18b042d456f7b198536219abcca\", \n\
+ tag: \"77503eb6ebfd00e39c0ed75792deeba4\"\n\
+},\n\
+{ key: \"0299c21cad5f315f265c3fe132059e9e0c90c628035955ba0629fe49eaa5c6d6\", \n\
+ iv: \"022415fd18ecc4e1\", \n\
+ pt: \"514c94\", \n\
+ adata: \"8a1d3959e81bba8c8b1647fb8eb35733cd8515e33ab9c4302d741649967cc5249e14cc\", \n\
+ ct: \"32bab3\", \n\
+ tag: \"c433930812258da5ed043643a76cbe84\"\n\
+},\n\
+{ key: \"c23283a24ee6ed4c219da1723af6c0b6556c11c74f5ec9dd0ae9285afdf88f8a\", \n\
+ iv: \"4c09be17839373dd76cb4700\", \n\
+ pt: \"d4fd8921942fe1c1bd4cd9f15f45294b9c2d9b86fbb8536514c9b532b9cabc1bde2a0f7e5757d04dde8c3e1f67c0530c40198ebeafa38d9c49792bed6faf38b9bc2f4cce7374eb29a421c22fb688f01144c71469745e4c0a09eca15f5f6ec6f10864ded12440b2fc8112bc5187f091272d357f1727a300669811333feda5f8af5782\", \n\
+ adata: \"f10797d00e46eac7d135c232f398e452f99b3ecc25bb186181c5ce34a0f7eb4eb658170b16919f\", \n\
+ ct: \"16cb7d1e2677a2f8785cbd7b827dc320377d234b2a4bd19d385098b4a2dd61f13db8dee5c31a7d07f48819f6e3fb197ce689aea80f8d9fe2ec4be7537ce2358b6bda885e002d32cb4cf9c393e2cacf14a32bcd2e25e6ab2a6732f7625ef0767371447e05cc6fde39c8cf9df8a8430346d886ef0969b9c01522b071bbc6a75ba441ae\", \n\
+ tag: \"3058453443e35f3e64041d7041ce7de3\"\n\
+},\n\
+{ key: \"b9454c0173a89e0d95fa17fe946aaf35a81f8f6222335ace3784596cf72e8d3d\", \n\
+ iv: \"7a4449fe312ce339\", \n\
+ pt: \"163fbfc3fd8ff602ab010971a169574973c48c8c960367a6b0d234f31683ba163a01e30055f363492ec605\", \n\
+ adata: \"d7548834caf19f5b70990610594fe651afda1067cf3e9409e055b0d55176c1a6dc3a41417c34687db3bcb38df6db34638b17b11dff5baafaac00648bcdb7cec3e19bf6f7e079d54fdb9f91f9b60f0acdbecba073115afed855e263dbbd1171c2d40b1bfee349382af0dfb0a8b0\", \n\
+ ct: \"abc3ee5e57e7eb13610000d4be85c162bb177b5c107120b7d61abd14492cb3d6cf2d1f24f1d4eb25aaa894\", \n\
+ tag: \"f150ceb240e3e8c6322c6b38f46e8aec\"\n\
+},\n\
+{ key: \"8181878f361330527da640abbbc7bbafa4ac3f88d51b4ff76b9ee93d90b31357\", \n\
+ iv: \"046f802f6486b73eb2874720\", \n\
+ pt: \"a00c3635c1575225bcbc4d6e89e92e961d7256b5706a9bfca044237464b0e3dcff26af9f6c724e3e9396bf8d662df6c9f381ab23d27e3cf4df45e27bf1802e5c250c608b25e5534e1e35455ab9c60783f4786ec88138f1fe7bd25c50aac053f2ab7a1f5d9797436b0398ed3e524c193f275398bbe63e9b9bb79c57472c5e437e1b907272fa0ef672583effcb3d0360e0e00034b6f196cfd80b\", \n\
+ adata: \"50508e9d1d3987b4a44b7ab16225fdb09f073e8b6ea79a91b06919d25fb4f80b94cb9e0253321016e5cd2c4de2b90adb018c1e8fc010bf21921c2817a0209d34c7cf876ce43cac703e742afd824c18a9b57a48ce5458bfd9c1d2b07a581ecfc1c396b962b0eb6ba6c9bf8ed99c1258a1d2b29ce8bc097b3fc78591aea3436ddb07c787d3af5e6ea3fe774af8a9c758ce54ccf64c4775bc1cb85fa279ce3c3827c0f9aec4750640ec19e195b25da63056240b\", \n\
+ ct: \"1c944f3503778c26880ffd48dc9c7ec859224d3d2cbaef479bf7d29e0076f3732d117cbf536df4e84b9b5b3d17e1e4954e9a991474f3ff44ffcf3b320ed6ad01432ce152c862c5ec326fbabd4a5e84b30225622e4ce983f6215400ab54e3910657b7327d1d3b6dfcb4be33ab7006fafc6c542030649a8443a93ed70638b10c2355f5f92a4b2a85f51bf43e790526590ceb9c535d8ca8c8185a\", \n\
+ tag: \"03335c475dd2b7a4c88a5c0dd7abb371\"\n\
+},\n\
+{ key: \"c8f0193066fadf7ada62156b67c5e9d16a24532431b02d9f2f95d51f3ffb4232\", \n\
+ iv: \"24f92b83d5a287f4\", \n\
+ pt: \"020071e89f75e908f46215cc5749f062da8b6359d65b27f2e56b12c558df88cb0e\", \n\
+ adata: \"cfe53d08f29717f561c44a18d9114bd183e39a786af1af87b9127731fdb40da66a33aaa3923c799eee36a7abd93ed62614718e3d27b5787c7d01a4b96fb6b7099bc02574aa8f5bcd22ade0303b7d46c2721a7cff277e6861c2c8e6dc6700ab2f8a812ea51e19658e90cb56eefefbb95fce53c5efa195385486e6a38bfd1691\", \n\
+ ct: \"2f8839fc29d48a890a163045aa6cab94cfc6d7ff6d9582f7babb2ae4963bc91b34\", \n\
+ tag: \"95a5fedea8293ca6ec1f061626f6860a\"\n\
+},\n\
+{ key: \"1e54d1a3ac042b347d2b56ec94ba019ec06b6a148950a3071e944b3d0a90d555\", \n\
+ iv: \"a98140e970bee023\", \n\
+ pt: \"f870a67a126353f732827a252e5821650310e34ce1f439ff9ac257441a6e8614a27503f84e60308450f1b8a1c1befa79552d3bf2749aead1c40986e3d1126f5627d13a59c8830d55ebff71d5819a62b39b86e91864ba1933aee8fd3153d25a3898cd74706a7965\", \n\
+ adata: \"b8f7ecf326952e50ff279876f1733b787e7fc3b19c8f4e92fdf440ac34e5f7e34583ffe1abb38572d9ab589dfcf454b55312b0c0c67e2959f26677ac44e19c1f85e815477659f24ae861cdd42e7f9f6ace2f346dfbfcf739df18424065db65d9de94b2a6d2870f70bb458f400f5e7ed5bb88ab5d5eda269ab28ae51f99ac4833f7f6d602db424020952474b4fca3748d484eaef6851b4a875880f3b021e071cac707921caa90acc069932b885f9bd55637433ab24e44cfb4\", \n\
+ ct: \"8f5b1b63d6dc6faec3dcbf1daa21064a3bd1a0bf897ece3ebfe1b8b71a837ae86d53b47076129bb5da865d92ae4736df7b105a569175b25c9ec56b9c81290a7ebff8af31ded940732077cf46eac33e32fa77799e81bd6be488e715ae2201a108ef60639fbc46c9\", \n\
+ tag: \"bf7e921e8aa382dbcd3b2a32ae9bd836\"\n\
+},\n\
+{ key: \"0f9218df6a13ca02651f4ac0b82d4abcd6052fd0753ad5ab3e6b38966d6ad893\", \n\
+ iv: \"abee7d0bbad8a287\", \n\
+ pt: \"47fe84667fca7c2badf65a7503f22e41ce94aef2f82876c2a02793fdb86c5e720c466082940e902d35cc4f54e17e09c6dce1264f7889446ed5afaa7582da31742a75cdc58d5548ef010a74bf5612f635129c09cdd782cf3c992a4d312e50d016a56ea39010a60e3c46778b652d1706f88ff3e18f3681ea4b4e54f2ceba6b8178\", \n\
+ adata: \"2bbf71f996a919dbb188c7f897805014f9f2d682ab841277af50a457c121dfcb34be38fd867b2481d846186c6166939dd595f69dc8e63478a0095a0bbca6a1f701043eafd98fa36cf309fc61064f34440b2685b76c2f90\", \n\
+ ct: \"415e0d36dab11561095fd986e1c1bb2b2a34a3f0e6428da32154c426cbbd729a57e01decc3c7fb9269a567867708e700961d9a275474a0b1b4e45af1b6a7f833f7b30bb9ae6501a58dc75bd5de8e1fdadf223279de07e1b25c82f7b7f58f1250d8375dd2434824c2b0114e1a0bd125db1aa7c351574da38c336f4400107902f6\", \n\
+ tag: \"85ecaf4189196d261db69bafa6f46361\"\n\
+},\n\
+{ key: \"d4656ce573293929074c238b2ad21278d26a4ee8b06bb8dd3996ffd5bc3ab100\", \n\
+ iv: \"72b442273dbeb584247d42a0\", \n\
+ pt: \"33c54663265415e7a2c2ae6f2d3a76191e2959e4a986737f31b71c9490e2ef87703b00038676af1455a191deb3aff3d703648dfc647af2281656c568a1f8c624175716aa97309f06efa9da127dd56f0436aadd8fd079990ad051e11c9e0995394b821aca0227fd199f585aa2271dc62f5e4af3635c445603132f2d3a2aa5b55540e9749f814035\", \n\
+ adata: \"cd15a28d59ea496b6bbc1a6187d09eb0ddf8bb54b7c7b223c7e421e972c175f4ea0d4ccd0f065baa9ca1c20f9cd93ab53609af9a14b38d8755fd707dab6091722f0488e405ec25876eb50ce3406b2ccc4c24011384852c3cda45434895d126ce4f9b85d552\", \n\
+ ct: \"6c5e2438abb34d4b36191ce47f3cc91ac7f494767e571d7bbed0d1e4870d5c38f79cca494f7fc8e9774f24bb68f233ffaf62805d30c96cd728f4acf02d99b717cf2c3f0448ef70a0320463504e47dd04c2e02f8a1de966cd3ee18b564d1808906397b75bebc3bf76e0295afecc7e49a213b12b1dbc003bae864718be4b692ccb1ca32b72a4166e\", \n\
+ tag: \"e5c98baa07340fbd395d52a1d30e3b67\"\n\
+},\n\
+{ key: \"24a38dce7790565e681579a1cd6b8e69fd31cfe6a7969f7810165fa4dd118bc8\", \n\
+ iv: \"ab51183581385152eeda71e6\", \n\
+ pt: \"7f176e70de3d79a4b6dde100c14e9c3a6d6a26bb28a3dc6f8e41ccf4299068d79824f1ed15eaf9388d9a4d40999c0331eb\", \n\
+ adata: \"f08bb7ed12aff552085e6e6a6516c0de915fe88a3990236b46ce5cc915aaa87acb0dfeb606da12ab31f01fb88f0f56c4c51e83519e009aef5bdc785caaf5\", \n\
+ ct: \"4d912e56497ee13c573236cca17d2dace44ccbf4e24bddd0b9eb02b8173ac1c4d39498520d10094229283008888c31274c\", \n\
+ tag: \"c71e2e06ea28d1839df353dacb22b4c0\"\n\
+},\n\
+{ key: \"e53d38b0de346f6ffcd3ecacd3414371abde3b54cfb534bbba5c8c5d9cbdab5c\", \n\
+ iv: \"a32fdf22870b6154\", \n\
+ pt: \"cdf69282245832b9a4aa236aaa2cc74e7b4fe9b0beb9cda00da3ab3ff03d048193d2ad53b35b0a\", \n\
+ adata: \"73ce674eb6a0343b327828a2022ab3802b\", \n\
+ ct: \"f6b8d06c7a3d21206837cf35676cf0f09c7823375463422a6c43f8681a0b45e11a193f84f71d7d\", \n\
+ tag: \"c625158a22f5d8ef45896856ed3514df\"\n\
+},\n\
+{ key: \"97149b9e8f2b78a967e3040c5fd953506a38c65583cee681c393e74d5713771a\", \n\
+ iv: \"205f8cfe4105f9c181e38f48\", \n\
+ pt: \"ca346c950fee2ab560620411f6f44a865dfbe7ea\", \n\
+ adata: \"0aa021af283008d6739a6d65610fb8f3bd0221f6ababace8b49181de03fd872b47877fac92cab76a4b47f7558b024c890a6e15dd8dbda42820ca0eafed535e37d414023eca01d0b16252a4bfcdbd26c42b1ff01e665a8af0e15e9fe75a9998f8119d04db8692ffab760b433f8a398ad4be05f91325547df4e2cdf27e233524c1eb80b52751c361\", \n\
+ ct: \"2fbe4dd37f4282f8989f156dbf5b83a0ad87acff\", \n\
+ tag: \"dc13ceefd8962419c57212f765490f09\"\n\
+},\n\
+{ key: \"86a15c016338d2a913695b3d11362fd165d1b155e59a87cc6a4ea3c831a126b7\", \n\
+ iv: \"57e1cdf79b14a04cb666ca29\", \n\
+ pt: \"600dca412e131135ee6ab552419e701ccaa0c951a6838c67071463dc31502ed01f18c0d9e333bc56e111\", \n\
+ adata: \"85753741130b2820b36262e87dd6ba3561fd5d7aaae3\", \n\
+ ct: \"fe8935c3993c6e5f0fdb40fa2ce93b68d4d04e16c4b2fd9e65fb703785592a118141014bf12700f57d43\", \n\
+ tag: \"da56a7b00bcf7fba8081e32c754e44ef\"\n\
+},\n\
+{ key: \"d928c21190dc87bd1154eaec1bf13539fbea91c15fcf7e1b0d14189fab297aab\", \n\
+ iv: \"608181e1029d7353fdbee01d\", \n\
+ pt: \"e1e45b6f5cab678d64328864ea7da62ab4ba0a9fe5b3edbf476e1773b2f7d8bc1cbe71dc75d15b7c1c50c0ebc8a4000dcfc15f4afe7ffeafe0ec8a1bc6c4ec950c9851ed3cb3caa7c1ddec741dede3f47e683f0248a535367cc6eb43278757d52adffd2005\", \n\
+ adata: \"57a6bc312e694c2bcff226193c8cf252b2755dc7b7f28ee0cb3a8f2ac0826536c1abb6dc252a1a49cd7f42d8ab4186e44bd1da1923d68a08c7ac0777f0f8e90edf398f67b8\", \n\
+ ct: \"1cbd59728f6cf64c53db55c407f3479a18e4260e108e65978f9a639ac987bc930f02b483c1cadff26733e13c02c6013faa605b0b10ec8c76f132e07ada593d075fc7bd5b83f2858e190b4148643a2cc5a86bb7a304effc882a85bb2f45fa880f0b33b24c6e\", \n\
+ tag: \"b0113293ffc99ddcab8868c203e0531b\"\n\
+},\n\
+{ key: \"7c9079a58b5e36c66659ca2fd6154f5cc60bbc49d230a162a8bfc5981d17c153\", \n\
+ iv: \"2a1c23be4100f91a\", \n\
+ pt: \"acc0ea71bf65ba67f9fd059b0501eb3ade4c0dd19c7f6eeb7fe497ded6df3f34bfa71b30dfec125598f3f1\", \n\
+ adata: \"0a78489ac9c575176f156e54666128a37119f4ac21b1dc910bebcda2a8cab1044c93a40e1b235088a66b6b2102fd0a7e5008850a72b019525ae8da3790ea706b3131519b62\", \n\
+ ct: \"bbe5b3ba8a51cfd8a39905f5d5f7081e7eb366671b4deb772708413db14abb36ed2efe6cb90a612d74735c\", \n\
+ tag: \"16e919fd35283711a66d2394d84849ba\"\n\
+},\n\
+{ key: \"c616994769c0ba55b76b4f98a0e7e618c30f40be72ad6768577d7b02eec4ff7f\", \n\
+ iv: \"3a590fe6a33bb812fed7dcbf\", \n\
+ pt: \"c64415488becbe1f8d2d84f7a77bc2ccca1fedab5f6cfeb2f6b5cf770717f864bfc0959aa6f58059b4b024fa21b93428648146ebea9db2b52d858676aff62a757ad6cf431e86aab9ff3542b3f82e7ef711700ce55719ba65d70483cf740834a8165f3b6a827a3c32795b5dd8d607a9a143b09e504fae17d7ab84188364ae11ebe801bd7f7e867c9ad5a24c5ff28296ea55a0f180ec79\", \n\
+ adata: \"42b9c72f16f3ffad0411651a22842973cfc415591e410f8d3caa430ab233d390d91a56cc4af59fbd00fc5ef6a1468d416f98fd31c295652b782bac8bd1bf0dc72255c871eb9fda161386cf7ea38e112bc827cfad543ee47e501c9ec768261eae83e465e957b74bcedc73191ef57ce637d3f9e6f762a8eb6ca74acca98ce793794bf6f169371c5667c6378d5eb02664f1ca3ccbd449ce3086715949\", \n\
+ ct: \"daf20e99061246d73b38bf4b38fa5534cf67295df4815fd2c3b4eae9f50de98cd9b36a9ad2ed73c1a536024e20155fed6833588c4af79b318ebf83ce144f470aae9a7d6f8a8749de32a8cd24f46b6895b90f27e4ce3533acdceeaa6b56907d82f91837f43d2ff10770037ca7ea968c8bd6fd5e96bf6feacb9a5fbca3af15c954b9b3e7f5e334f323b5d75ada6a2e73cdc3a33e847040\", \n\
+ tag: \"69a018e0af4052bf76555a113f36a205\"\n\
+},\n\
+{ key: \"b2e9741f8a710f341c766cfd658c4689675cdcfca7d058af2b9e1e09ccc52d9f\", \n\
+ iv: \"491377fd8cf3d598\", \n\
+ pt: \"b9d49370b30fb9375b0b02d36c2d2b82c9eb98a651096fce1b604cf3792b84a1a85d574f8082cbbddb731a3e898587224341848429d464805676e9c9830e0de6f28c1357a52821ebbdd65fab76a6955c1abbb0ccb2d91010ab9c3f1287df68368bf0bc71a389abc6bdc44de1e8835b981fdc8fcc33a9e79b11a2eb4d8d0aafac3e4204\", \n\
+ adata: \"a4f4ea4e7e2e2b3aab539f35e6a14a207873142732971adb0bd1ab4952c1ed1d28ebcf959a37b9abcad416c33b71e47ed9f10f5ff021cacbcc98973e0739cfe6b8c33411c5815b373bf42150a83d5487834edc964ff67d763e5de136799d57f4d5d8bd4ea15c81873c30588d15f3d60b2cab7a2c9e913c40333c819057884216b34a0da9ed66958d7b4b4ec35519fe0925c0146f\", \n\
+ ct: \"24545c1155580a9c599fb7eb6ae7b1bb1516c6743d5f4475ad36f667ce05c8431fbcb2db943abe0ac228d0bc0085369bb36b01977ba75e8c4e9810d4546388a0a021338c6884533f231373c19fa66d470775b7975efa29a590e5cb30f7dee6a938022190007c874127ac6637ca37949990c5908e85b3339367ed9c75244cd4d83f6d49\", \n\
+ tag: \"06be0ec809a996999ff2f839046af6fc\"\n\
+},\n\
+{ key: \"4a13e394eb6b2cf1e9241e4e03b841f7d17c4246f187b7121daa9fe55ff6b42e\", \n\
+ iv: \"50ccfddffb424918\", \n\
+ pt: \"9f51253e0a660db722a5a06da5a0610b94cec1bb4aa7b660a713e7687b151a8cdf452b4e5873f25ae0c5ceed7444257b7249c77757f82376d579cdf15491d16234074cbcfa0c80f47112bbffa4f170055b3b02735f772b13e2aa93f4fdf47d4e089506ebb621a0a64144d5f62b075be4fae1a43175d17fa84555108d24054a46f1d22fa33911146f83f540dc1dc30875e64eaefab1b28660677f685351f372142e2cd80318e9b8c396875a45db2d0c36c435\", \n\
+ adata: \"7088f665d4d5fd689afd5febcccd64198eb0cf07dce074a9f33233a19324dd775697f3f684c7f24d7974c604cb6ba6db0f70ddc20ce5dfb6b0a35aeae2fb8f05699b267850158c\", \n\
+ ct: \"a8466be4769679ae472347a27aeb8648e03c04d18efce9f4e45dcee5989bb781e5d0aaae9920ad5b55abbdefcde0a67e898e6da2ce12e3e60627f1d175634788a49358e84d2e8326ff0a9d922162b5dbdfc59606005ce7007bb2ba6e1cc52be55f40190caf73075d1a65822a63d3d705918b91d8308c3b1490a240810937bebe83fc30cedba53f96b0a6ee6be068ab4604f0427356c78c9d99fda8c986b827a7c9b522417bfcbf4bb4a2bee5b26428757418\", \n\
+ tag: \"4b905e11c68d3222f51f519f69e62725\"\n\
+},\n\
+{ key: \"c47a2e7b562d4a4e06de6e8e3f5a8f5edb17f6a9725646821eb89752296faf33\", \n\
+ iv: \"9d9966a376b4c8d978438efe\", \n\
+ pt: \"bf0102e57541b28de4addab097e2bff0650595e1b1012b8b1ce4069c9f3ba32b951cf0d16e661d162b8f9b28f33392a546d141ef0e9f7139e442e4b760a70e4d8a3593623cb4d83619805e5885b9cbfe404a1ff234c75ac886416d17f4d6c4cff7417daa7ad8dbeac50f472d6538242687cfa1c230be157b23ee51d00b019fe9b33b1468fea2d0\", \n\
+ adata: \"6c4c3eca0ddd3350869292d7f7a3332b1055910f659709\", \n\
+ ct: \"14a82cc8125949a890537e227b0adcfaee5d23d88544b644c2bde9d2247d2428f2e66613a8b8d7d4d25fa983b9bef1448ab977a642ba67d20a5efb00c369f206c09b67ef40e3f4501584a1c6e3536f2e9297fe454fc7c92b593e383b8f696fde39be811ed30fd6a06f60a2b6651c4c757e99ef7164c2431b80646a224f130b1b0c5568a20434bb\", \n\
+ tag: \"ae128b38cb7575df9dd6e6a339eacd30\"\n\
+},\n\
+{ key: \"1b18bea7ac823dcd88b12585f59f6d604ea31c0796839be41fa3c8aad89e3436\", \n\
+ iv: \"9d08e033486a7c69828a2e1f\", \n\
+ pt: \"4406030232244d\", \n\
+ adata: \"26c096220d49339824\", \n\
+ ct: \"c4c8a36660b4aa\", \n\
+ tag: \"8141eee1e62f676eb41a10cfbd02affc\"\n\
+},\n\
+{ key: \"ba8a36d9acc4fe6d95421b9d93de324819bcb193b7a8fcbd996909c86d38f1bc\", \n\
+ iv: \"6cea5a931cbe228a56727661\", \n\
+ pt: \"8afd662e7ed4e02a76b6603d55623705639dca8ce8ac9ab6f81e94a6d97427522bcba9c21fa69f59de5d29165232b2ec86059576576bfd989058f3d718d55955807f0c8adf253bbd864f46684740240f4fa2e282b7c85ce2b7442f0c5677b1614a9ee2bdff5beaf7c5c34f64543c9760fd9c8b943f5a26a6b6df0443a57e5a0613cacb00eb2c4bfd4f6450f49564d01c\", \n\
+ adata: \"130beaff5b9befd76817b8c4e3131d00505981da64c03be32d5106aad2ae3e8de053902a259eb1d7ad8d60c39b152b8ec40c8d6f70c0078b661afe689f373b4a9426a61c579147f2feed9ab82a2686e8fdc19e08dacc52a9ae3771fb21f62b3bbd2288030879433349\", \n\
+ ct: \"54d2a3b9cccb5c7971e296bc2975bb9d87b4318e7ca790e1d88591e5e7736aee068a07d846ebb332fcead7070aaf6329a013e4836fb86255a58199d8b5ff8719d313a41f919589ae985cef9ef3797a8b826d3506ae044ea2250508ce93028823361a30750de1d9e5b5a2eef8a92c73bd98c70ef5b075eba8a57058b0601cf2ea554ba55f8684dc70137512ebb5e5509d\", \n\
+ tag: \"4f69d3794ba8a348763540310fa4a018\"\n\
+},\n\
+{ key: \"ebcddca34740a82fb26219066e61caebf4dec8201b9e31d1765e021f90df58cd\", \n\
+ iv: \"234672b1a9e83e17\", \n\
+ pt: \"413847a62ca0fdffff0708c3c455ec2a522afc59c8c9ac967c1303afad8e0bcf957bd31339bddb5cfdbc603c8f7466d9f72486d96cba2008230728ff8bf8f80bd52b730ec710c726390db1f923bcaba7\", \n\
+ adata: \"6ddac0e8732834b051cb0025fd26e16e91055507370950f27c21b62300e395f14fc19e2a5010d5344b38b3ab42de2649b069dec1ec9c35f9a525e6136a96c02b075e5ce8c93ced8fdcab4b73a8694372da1e1dc7d5b37c1eeac4a4228fc51cb1c4957b4a4121cc213fea3ec2eb634ab9536ab65848\", \n\
+ ct: \"e07c5c4b51476802d2c5ad1cafce382392a99debf0437aae17239a2997a3e604b8ea8c35aafba36cf9a9de7d59434f6fac1c08d3577ecb3e41209f4976c2cfb0995b303786eb866fd397679cdafb24a1\", \n\
+ tag: \"042e087be4e24479fd095886c4d7797c\"\n\
+},\n\
+{ key: \"2b4d24df986a3e99e8184ca42d38313dd9691f4fb49c36146793c794937eabcc\", \n\
+ iv: \"a597dca365e927e6\", \n\
+ pt: \"c38a7f50c2db3e217ee15701b50e606bd4b80465feb8ffe51977328542d60d67ad7621b7babee263497e8fe106114a2f54\", \n\
+ adata: \"043f94cc4790a3ab15ff38ffa3ee623abea687e1c69c8e5ba5d7d204f40ddc3cbf8fa5c1092e8032422a3e638b84bee763f06f7d1e89ca8d53ebbeec\", \n\
+ ct: \"2fc8be317cc359e93a796663e9fb1531f481c0bb0f9e3e431dd705aa80606ad4edb00fb8daa77d9b66ee55a93859a14100\", \n\
+ tag: \"9a35c644840d88170670f370f366f723\"\n\
+},\n\
+{ key: \"f34d7c81c938038e350613132898dd3856d07bf2bccf6bbadc9d052a4ba4651e\", \n\
+ iv: \"87b6b0671a9144fd\", \n\
+ pt: \"a6a305fa5a629b541529e1388e1064e2a635dccda6a91ef706b5426a08a34b972c3d8f931fbf11c2b939b273fd979eb0943ac46e6bc97645\", \n\
+ adata: \"9a1dc1b41f899cfa1c9076bcedd467ec7f801561fcf8937c77214e162755062ff5c0da523666865a4759e2811b321d4a6e4a3107203a54aa73ae6955d12f540cd3ab8b0bec290ea220677f8de85d8b9a341054bb2a5588da0ebc99c8591a36f5ff65ecfe0b3f413918763eca1978332b61\", \n\
+ ct: \"4dabb3813e30e441061d7559c7ccf2d28ee7feaa6e5adf3de440fed059f796dfad4528237ba890a547ed8fd27d5416af9324d5cdd9a2b5fb\", \n\
+ tag: \"257f8c4af948edc7d39160996031e7df\"\n\
+},\n\
+{ key: \"40b9a6a85efc435ac206247a891b95e85aaf5d3470cba7dfcb33b15b9f8dea12\", \n\
+ iv: \"b34b43f2b94303b65a2bf359\", \n\
+ pt: \"1ecff215cbf2c3d69ef575df1b704aa5c32762ac625827d5d18dfa033dfc88231fadceef945634e559967debd1651f23655aa621d302f47d94e6bb71c87bbdac57f9fe1c0825bb5da7c12af7ccae29308d781bddcb8a8728ccb82656693e94321fb402aedee9dd88775d26fefa5c60dfd9336b3b422613d446de3f796d750e9e52cf7e4d7ffe81661a9e7099408e833e3bb7c9f5894ab38a6fd0178c6d73f02f7845a79d6e2cee0851314ad1100f1e22121f4618c66ea74105878ed290be30041f5e9b8adf\", \n\
+ adata: \"c953da80bf321299f9409efa6bcf\", \n\
+ ct: \"dde2c6bfbd065a257a4946e1dc21cf5b99b1c72c24a29ce3e269639edd8d11339d74e5d386ce9a35a28b52fb31b14cb62fd607514fc7c2f7ab2736015f951cd43e48ca5d439a20d1c2257d123df8dc601cf53f9b901ea56f0e11841ffba606373b7dbc59b3f592cff474236e039b84e4da0dc473586994de74d69d070bdb44b72b1a75fe5b1f612bd7d80c47a48590c87c99391e85fdab1c4b07309789280b04c397b8f8ffd4a5933edc5fcabcbf799c5df15fe6f3fc9dd87f000222b5ac132cf983183948\", \n\
+ tag: \"f5cfaae6c5ce1e2a33bac3fa19ce0ece\"\n\
+},\n\
+{ key: \"dc318de323135accbc9ceb72a1fd5c9fd4473f1953380bcd10d1e98156dc6df9\", \n\
+ iv: \"b7d06d169f9bed827871a11f\", \n\
+ pt: \"f531c91cf4e5ca2151cb5a871dc1da93a89d469cc3\", \n\
+ adata: \"85b473f9c3c5682d827243f6f9ce726243db31ce338ab493e5dce10bb60ede1c70cdb2aeac5a1d50d3dd\", \n\
+ ct: \"40f426a5aa3b6d3f922230c2eb471de94b19355830\", \n\
+ tag: \"6c28296a768d1d2327212c231a8b955b\"\n\
+},\n\
+{ key: \"f33f9d9f8c0c37f6df671816b03022b621f26dfcee77e19136fb2957d12c80f8\", \n\
+ iv: \"a6839eb05af1b27bdc753b46\", \n\
+ pt: \"275cd82f8a624dd1b2cf2f3c51036f5ec144e5c16346950de51e4f33c2ceffa72115319b6726e45445a47f4b47831cdac47eba66631bf4782bcba6e66f6c89a8ebcb144f2390\", \n\
+ adata: \"6a6fe6aa1fcb3d05b169d43dfd6849e1705007cd2ea008835f5e57ec53ddd572b031915ada142413d4fc2a5606d8f0bba2a8a21d2a6b66a7ec19435dfdc6691ff0e79fc8773a321708939b017b9022697e6180253220cbb76a1278a576bc177428e214341e69bed31ae2dd0ac34ebe465f745c076f44cbe35489984173a3784feb1401d8ffa33a7e\", \n\
+ ct: \"ae267a538c6d71cadf66c002449761a3dc94473fbc5fb020dc3c54a6b1125acf9956d8c1e5353e52f877ee7ecddce9870e4a2aa5835605c91fb7fdade1a8758db5e8998c3aa8\", \n\
+ tag: \"679b8c37ce53836320c9b64ff40743ae\"\n\
+},\n\
+{ key: \"5d9d35cd29e513e969de88f37cfb9ed3cd00ab458c092c93ad0f4a84fe590248\", \n\
+ iv: \"f8ad97d86eeda7aeda0fe35e\", \n\
+ pt: \"a4bbee5f056837ab2a1032c87c03bf2c831a11f76fd04916eca8d505355e07557426a30a2258a4b60f21f8ecf461998da4555289ee21c711745033ef6a5666b1283203faa79ec4fbadc23de47522b9d126ff7a80b08aad2bf2286d83043e190ddccda7a5c55038d7a8cc5c41466c294298e870ff115ebd1981e2535d56672e648d51c9a3f08fec931e1cd57ca724d07a30c30861c0458ca1706bd2e1a9ce14a96b099e4eecdbcfbc93341413b7c02e116fb2f642\", \n\
+ adata: \"69bbc294662a83e31bb0a7f661acf7270dac527a6923c95cb63ff43ebc7927563b73001af0bcf0cbb652c3b1c521882f2bbaea7250052856fdacce257ae41432ac7d1e76ca049dbfac62e05ddcc4cb3d066b29b169b224bab4e479221bcb32d549bd135e43e0a288eabf8fa1cdf4\", \n\
+ ct: \"3903741ee7befe1ed4ed81d111d563317e3bd8ab01115a4a957e80c4ec5dc4883135cb163a27f5c4b76f63666acc4f8964749dfe99fc20bc66cc978505d1491cd88fb81b164229b2d3385ccbc297de858a213c30780815ae2e52651c909ebe922ce66556fc87d45acf20d88312591d601c0304245ef0b24976e66f93441e18fbf9ce83b74dcd96ef8b4b31e6a68885dde9b5d1bf0c9bd6d2f95c8cde5b06fa6a242014a35b10d73d1d38a9ed5d785fd4d65173e1\", \n\
+ tag: \"4173fd016834aca27fb3b5f836041a31\"\n\
+},\n\
+{ key: \"9f2b3aa4266c0f88194e32768e052d639e38a26e2dce85e020fa44e96dd67e10\", \n\
+ iv: \"6c6ae75bcadadacd657f8e38\", \n\
+ pt: \"659832cb13c9574df4a8d81164ffde03234b69b10cb1d92f1d7ed92abdf8213d8bc5bada33da23ce861f613b188f0d0d1297b180bc84fc1bdd6e650d8a9fdf2ead19cb1421f678c6bbf2ecb897b6d6bae4a631d233670df6784cf9497191cd647c02\", \n\
+ adata: \"508899387a8804f7f88ae0a58ce1ac384173d2385bf29e87f6ef841218aa2fe1472123caf7c4b0ed7cabd0916db51d3db437655ea28d81b4e0c580484cebe5f8e7b124bb972ae2041a49da1e19a6bb0006b0193e223b\", \n\
+ ct: \"aab0bf4f0b2773b20589bc7fdd6e2b264094ae7f6d3c70e663eca9b9965b1bb6e6dc13b616d2c839f7b5dcede6a25009370f9c7cff660a1cceb1ddcecd3c40e21c3703641613314767c76e71977db29881050fcd0fd85a674d6dfac7db2e87d0b8a1\", \n\
+ tag: \"dfcd10394dc18c53b74865fa287eb83d\"\n\
+},\n\
+{ key: \"9a0bc3758d504dfbe06b8a42a2db25a24f94539651901dd40ac16a9d94501663\", \n\
+ iv: \"08a458c6203d4550\", \n\
+ pt: \"9f198c189aeaf99d798f76bb298d49ee05bf7e185ba9d0b1245369054ad85e4e11b391d5fc5e2451413616c579ab236682d9f293534ed73e95aaff6ce858f85ee8aebef33b6718fe1f8644a8607b3ad5c097c76ba64aa94132d4e950ad7d894ea91b70a268e1e206d300c3958cb1cab2739a948046fe59431cfc77c66f9650171078d6545fd61acc9d87abe706f35f4785d87ce00a5c31a99a53ef971de0d386496aa09a29dc5fde226d44cfa8e50bd573\", \n\
+ adata: \"2e0153f8938531810c0306a779b87ff6143301ae3d25f6aa31c23d01\", \n\
+ ct: \"7bebad18e5cf555ff8d7ab6864b2fee06fb1c68f3f38defc8b41ebbd54caac56491efeabb14a2a154e64edd37e51ac3b7be842a897a778ed8ceb2cb0bef307936e1fd3feb6ff11f75181f4c6645a275cb91082aa30afece178cd45c594cbb2e00741313ee6f56ae4c51e1999a4ecce4ad8c915a9a124da7bd68210be4e538f32f79c7ef4521606c67143bc86fd809f0d8ae8f2d1fc9ebb36c71f8101e7a66715ec147455a07334b24f653f8e23a9cbef1a\", \n\
+ tag: \"b7feffdd396a0e04ff97bffaf7a12893\"\n\
+},\n\
+{ key: \"8cacbba073c5db768860db5a8fee518e66c21a1419a610a69d8d9987fe738956\", \n\
+ iv: \"8666efbf7253bb0d\", \n\
+ pt: \"68c268b23e4480c5e4f8479a5b8a0765195f99737fc8e0d5e8f599147a0453713c7197b6e4867e6021cfc9cf2447ea8a090e862a409282\", \n\
+ adata: \"09cad6164337827136708ea720eb8201c313d266aa4d04da5d40a66ac5973f506233632b80d3b41e32d162aaf23de8d839f19684c0409f20889eed9f37406fcf197512d5567aa4d7584ecc9a65f3b82ad8bf98df22ca5bc2ecabf56dda45e62b70740f1c30a5495e72d48c558082d13d8927cb3634598760ba37994a1330fd3fc399828c2de7f0c1f9e1062794b6579a63b6719fc434741262e4fbb6ec05d87e83e04c3383\", \n\
+ ct: \"430a2fbece6c0591249dab8ed35138ac489e6bfcbb757b4f201528fe8293a531867afebc95697ac7fe983b2ec708cd8f88eaef6d0b32fd\", \n\
+ tag: \"78670a1114c9e0a0d0abfa02602a4573\"\n\
+},\n\
+{ key: \"c0fee43100102810c2b86b89924ed50b5f252fe9c00f07041b2e055b1750ad30\", \n\
+ iv: \"310baf630f3ca007\", \n\
+ pt: \"f4f96ddd2a27ed3117d5aafb605337ec16be7308b4a9cd527a559c674f11fcedd5b260e8542e5d31e085bc720c9d9515aa9ccc1b906f99a37aaf9eff499667138d5959bf8cf71f64ccd411140f44b0265b0b2a8e590614c24a10cfd55b2396b598e6eadc33dc4d8b5076854d9b4be0703fc641256098130182fee68b024d483f8275d593\", \n\
+ adata: \"5ad7bfa41f2e30bba1a5ca4aec7fb12e418067e34f3a0cdff31f3dda5b90589dfec6222cb77bd199b6dbcd0f6c78eb851e7fe34cfa40f0a8ba017ed1e9fe532531f8504a\", \n\
+ ct: \"656fd41e492f96ccafd4b6dc94cf1421b8dd3ce2178e6de87cf9012784a26e049c7cf746be9596d36cf52ec391130bcb7e0d68cfb65f84a14b80e408d4ad4d022db2061a61ddc6ef8184573eeb6fb482400bc6044c0be49d7c16938c7d603118fa2c22194c6909fc0123915d4b464bc08cea4191d0a0930d5b2bbe83185bbba9e6bb621b\", \n\
+ tag: \"680f321bf62e3ad744f082d7c022f8eb\"\n\
+},\n\
+{ key: \"a4c342643cd6cf468046a3bd36920636fed159e34c937324fbdb4744bd0ad210\", \n\
+ iv: \"14f246d6d8ce577aa3488c72\", \n\
+ pt: \"0b97316db256123cea5a769fa500ca2350c2259b636b5abf2254b58675ea\", \n\
+ adata: \"6eae43ed5ccdab237cd9d1c6662d1d6bdd77cbd4c574ac1e42972328f3d44713016df36a08005f006cb5374e861f50956257c4c53dd423c748ec85795e507e4ef065e7e01dd7bb80d715dcf42563355d1294e752f9a30b3892e3f4c3fb4529dc12a40b9fa47726\", \n\
+ ct: \"22ae79489bb834a7b1e2d17df120df78159c76426120b7d308f6ae694170\", \n\
+ tag: \"e4d38f54561446f03f68f98e9f75699a\"\n\
+},\n\
+{ key: \"07b8bb6d28e20a5bcae72e42d0627ac72056ae89ca6904489e2513f019067a1d\", \n\
+ iv: \"23e9ae48dde4a6a3a25e208b\", \n\
+ pt: \"f11a9d0cd6f8c8fc8a8a06f9d80f6c2dfd8d9428e3f7d6c9ae1ff0acd9dc68b532865b01348679aaf403b3b67ccc02045ce6b28d9054d12e0c1955fc8d50f87274ba2102aa0f40372e9c682b515258a20f419ecf5249e43c340536762a5fb95207f11b3a389c72aa6560c43258959cea4392796afd19617afe3d69a1495774cd573495c47003e3fcba3bf30709f436708244d2d220b64f814cb068cad01270282675f1d31c8b6b5a3b53a79992\", \n\
+ adata: \"fd86f0f9966aa830a50fbf\", \n\
+ ct: \"5af6d0571e85fe151e7735ec38fdb367bccc898314c21019ca692d6853b3d7d135d313508169f72bdbfd0ed0d775a20a7fb8cd145fa07cb7f0f99bcf9c88cd2662797d04c6f25a109088cb3133714aa231d401234238f26ed60a30b2faf47932e93f13983f977ba262da98a11cd7fa8f61a5580135c8bb8edf370739329e27c2b75f13c12246feada5e6f5adc1b9a8ae77ce15e64bac86ed3ada9829c8d5c551a08cf3ba105e85d0cfc1ab838e\", \n\
+ tag: \"3740b8294826e49ae17fe6eb36e4f587\"\n\
+},\n\
+{ key: \"2e8fd3dff7141ac6955cc1df5fd0c4c09f13d8ca65c48ec74158d6a3bb217a20\", \n\
+ iv: \"1b29ad72893fe2af6276b5cd\", \n\
+ pt: \"ed00167076cc848c16c75ebfb9a87ef94a345a36ed125654162c26c1a48e6d84c78ead4304c05791cb69dede60e778b7b864d6c010426871991197e69dfc26c1d8ff5f1b56116b7ab2f833450b8f088e42e58fb53228e0e0113e8480efb038e160759737342eb83d95c46eb233616b34\", \n\
+ adata: \"84752240fda233991e918a9b327c90c4a25d960c249f11d6114b64828fb75354f32ec21ac8233021db57d691ec9938d1b8a72baea266231d7735dc2a5139830656c01a853d3038a7870c28065eef9b28354a9d899822d870ebdac68d1578d191732e3bcc8ed32f1acb42d84661b137ac4dbd37433c10edfd7a644a\", \n\
+ ct: \"ea12c0beae07b5fcc308572b5196b240ec0c93fb7f6160aa48f0013e1dc2bf53a88eb535e282af6339c801631a0c0fd4136fd5eaf85edec65e8e439650fb549aa71587bb17ca6412388639fc433ed45e34ca28e12f3e76868857e64769d2348ac1bba40376ee17ee44e5d763a9dbdf62\", \n\
+ tag: \"9784400b1e9ffdd41af1ce866e4d4f5e\"\n\
+},\n\
+{ key: \"65536a065cde04951b1a9b704b37b91630baefe5e4048a8f87ea69b62974b579\", \n\
+ iv: \"2d527d9ea49dce0323afc842\", \n\
+ pt: \"29bdde7ebab6771e131ebe592df14e7b755736e1c0cc1c184104e94c3b35cfd7cc29cd69ad3dff40502d2a8d8e3e23690c18208d7265de7d1c1d323514b6aa\", \n\
+ adata: \"3b36812acb3a1ca16aaa78013fa3de03c4ee75b9dac494969f535db8f55476ddcdc6013d576f3b083d40f5738bb1d03980179c718f8992f3600cc4f83ed847cc541d344888c9a0cd8bfffe8d9a7030705419b428e4eda4c04bcae172b35d1eb5f071dcb5be06d3cc65afa55d440443e42c16cb8a8723a46f\", \n\
+ ct: \"c4d8312648fae199c7c7bdddc61e9f69690cb5fc20cad699dc77c4fda296a42d2726653e6e17e6dbbec215048ac5c143665ebf0468c44974cfeff27ea25772\", \n\
+ tag: \"3385344f8fa2b8eb6b0aa14bbbf30123\"\n\
+},\n\
+{ key: \"dc130286e56dd15a21375367c0bc4ea8102b4812214a8a4e54c6c0c7abf512b0\", \n\
+ iv: \"a7ae2b525365b7d3af85cd7f\", \n\
+ pt: \"7f4fd4826d28e0764808eed959a51e06afbd4260b805c229e769fb8cbe1ef56ff3f738f7ce47e48e8c2affa5dc0ce702982a26699e4971f8872f01e8363f9aa70a798720d21e0208df27a7837724ce48a7b2ea2811ce8196e414a7b917c24c1c60749b3ec4cd7f68f35fd3a6d1666993d29478d3c9d57e23f5097cfd7ed3bb5f25736bdb7ef880baec8136744319ba9077ec1f75677f67b2236417e59ed7ae72544320d78dad68e8efd73e7d614e147d87e6\", \n\
+ adata: \"d59c617c7f116b856338be175a79659949094da1527080f8285c0945674480e69d8154b2fa90c3da2d83b1a6e2456c36840c2c5ac1565adbd594cf86c0f2bd24bcf67f25\", \n\
+ ct: \"fc73293ec12fb8b9a867621c135a722af76948bd729f6ba85c1f00f8277f8001dc8df01f799767a0c9b1588ef20db7a1841dc4f671b02c024b87784b9d16ae88394a560fe05db8fe77223e87004d06ffca5b15dc79ee539cfe0806d4521d4c4997def05ce3edbb3fed7d13bd35879c19b6f02dd5edb3eabedbae6675e969b9c5f8a6c69cff28c1880fa08520f24ea57bf009f263c1860e2f2a0eb6e8740d7bfbb00119990cb8934890e4679ca5f46cf00ad3\", \n\
+ tag: \"8286ea9867c712d2b210a51b0c6c8d21\"\n\
+},\n\
+{ key: \"af7bed7b3f0c2d1bc85ed74a83ba886eeeeffc3145b9d5162cbb103a2b59abf2\", \n\
+ iv: \"f63f02315039b32f\", \n\
+ pt: \"ef749042fad1907ec87ec64d02a093cac4\", \n\
+ adata: \"d63ac5a4f1089886a6dac803386a885969d28962e3d28e621eb3f2007763f8856f5e41807b6de4476dc027fca9242146547adb71\", \n\
+ ct: \"4f201faf141a71cac54baf6f8d581d786b\", \n\
+ tag: \"a3e9390f9bb35702876028f3345604d2\"\n\
+},\n\
+{ key: \"01a7204e0584a6ee70c7ef30528db9dc1916c7fe4a906f021a320877f1788f4d\", \n\
+ iv: \"08a185ab99ca4edd\", \n\
+ pt: \"b74ce79b11105e063ce4178baeb93fa68ac108c96e6ee21121beca8401fdc67797709f10cad44c59cd10bc7d18\", \n\
+ adata: \"9294aa463973a9932ed6c795fcc6c98f2cbd8f644290cb9c4ca4feae\", \n\
+ ct: \"af87bc501acf0e22e6f210fca6d92f38ad2d638f20b7b9f4f5a64451da21f8c22e9c5306ea927cada091fecf8b\", \n\
+ tag: \"9052cba8017c2e1982e341b70a233c9b\"\n\
+},\n\
+{ key: \"f2790d5fafb2992c133722b361f0cf2f723a40fa0b9476b1df06baff1bc95382\", \n\
+ iv: \"ff6d630e7a543f7a\", \n\
+ pt: \"ecb8a4ed918ea9923d786d4e4d9e7048bb115a3461ac16bcb5913c222bfd1af73c265410496cd65eda43705dc2e325414fdeb5caf08429fa4218a7574d36dd0f21cd5959f0d6d717afcbae\", \n\
+ adata: \"d12a009f07768e51088a5e16dcbbb1108278218781d8091c8345bd9ac500ca6caa0879cd824de4feadc403deecfbe70a22d329e18e0872084c2505b37f5c8c48aa7569a5a8b99eba637e66600655e00251dc080177eea343cb2bc154399a89a01b01e9d17f31b9375654c8045209b388e990b6da53392acbed9dc21622cf4667edd74fa86ce27ba7a679313fda741c0108fea0c18149fc24f3e7d071d12dfb4d99\", \n\
+ ct: \"d3491be80cbdc4883a5d1c82d755daac017fbacacca714cdfcb560dc2fe2020577ce3e45738db00265e723c1bfb626121179242d10da71d022611baf35500322c1c3b489f0f40a9473361f\", \n\
+ tag: \"e789fc44028642c038eddfdccc222696\"\n\
+},\n\
+{ key: \"332582d6a9c5376de8659ae46220fdbe31c7301c2da4a55714babef0ceb57191\", \n\
+ iv: \"fc65f6e84949466920da18a1\", \n\
+ pt: \"b59c21462e2844c078470dd5cee6d76d4b0327289cee85a7f26d1b994836c3835d428813a95b23db0b21103efa6bae7d96ab8db50ccf6784da65739779b62e085ca4bb060b536d0e33a7afe5cd5d53161a11a33ad91d0d2ab6f3\", \n\
+ adata: \"a00c66a970aa2a0c171849536ecfec2680d8303c0313a36bdc4b4ca96328f5127908616fd94ac1a47442be3396ede649d31cf649c878fee73629c32e9d8f83c824e76993347f3c560285bfb9b50fb44be2400f8ffba7f0f554\", \n\
+ ct: \"aefeafc22beb48822c19d0d33ccf794e80310d9007eae7a71bd3b59f1a9e3b1f72406eec56c341bd5d822c84ff8bb49112a9b786888c117046c4d67fabd07be963df1c6ca0616f209c29bb123fe7986effeda5d7720b7ae81896\", \n\
+ tag: \"754044a6a8776dc70f3672822d156f3c\"\n\
+},\n\
+{ key: \"0b4af1cc437df463929482d906a5bb03371d1920e7fbfa2c354b1cb2ba11663f\", \n\
+ iv: \"177718efe804dcaa80ca08e2\", \n\
+ pt: \"c27c6d518bf49da3503d1e29e1132054d96652cc7234b512d49801918b04a1100709d2f63f7c336793f36caa2831568f6583046a391703032e4a87ae33c5f7214eb95a528f9ed6b72c68b5e93904cb5e0f2823f4e1d8918c58bb382d1649ba5b60cff937b5bc2963c87ee0541161e9067602e0917b9b13e5521ca998b3e5\", \n\
+ adata: \"eae03a7501fd5592c2c4e7f4c9c2ecf19c02ac6e9fde4f7bb5d81d2b2188ef1ef8d6897cdd7196d6f7920dbed981cac42a770168c0f3697acc7331ff39d915cefc718f000318f0eab6413da26743a490b86bf209d4d064ee10c6319ed0eafb861e47e099f8d18786aa\", \n\
+ ct: \"f912f9583fcdd974bc68d729c7049681b18299a65287ba776670d54191ac6a0f06d7bc7e96f058337710c8eb55d06d8fce89c77406f8a725079e50ce21fd5d5ea3a1a90def7c92dfc517d8f923da1e2fd5cf0dbfecabf746ed37fd87c5c85fd6ad0df3b7a4c568c52758223389b08e967ce8e926391cecc2ba293d254971\", \n\
+ tag: \"dc402e84ad4d093e8bdcd28428867735\"\n\
+},\n\
+{ key: \"b67364daab818ff641c435ee4ef0e9c5d5fef5cb98917d5d3bfc82d0244d6c9b\", \n\
+ iv: \"1cfd8145e99307ed\", \n\
+ pt: \"27d25e250d0f9393ec32d33a23e5b08fd93e39313017a7a2cf2c1383fc0b7f4e6dc0581a54e4567b22f08f85b778c17863897b5bae022dec224a0cdbca6b0f34e78d85764b5bc54a2f003952098e5acb42d55dcd103477a05f38f84d18c0b300a480a866930a142cf141f910526d86030a3c6ca8cf1477486efc4093a47df6ca49a8b0a6d98710de50e39bd3d1328ada66d64ed25d59147e524bb9f1088b984c6831ea1b922bca184ee6efb1752235bd39c0b2ab7ee202ea6dc107848ff6221bed9d6ce4\", \n\
+ adata: \"aced35d065cac63a99c2d0bdcf6cfddf38db039dbb0903aabfcd84c516627e43f14640bd9c5c7bdb83db84e2ef50f40b517aaa1fe69deef998cb4d0bd8d973288ed9266a75990b30426273b5\", \n\
+ ct: \"470f90273edb27a71cdfddcf7cd32b49aa134ccd29d47b465675c4fababd01d6b7084523b44fd150e7c9b1d5379f0d7d9dd09b7a16f53d1c8da6cd4693e4b27156d39281735128fc1a3f31dcc4447d8561c67d4a4a0d5c24cf50fc5c0d136a9360f54ed1a17c1daaf17557f6b2ecf3ba1eff8c9b695cf6bf99576bca771b7cae4691b5b3545338aed475e66cd27a4fee9817f509b5334bf5c834fd858680c4c9b3477f82665a658774bd8de905d12baa74fb3a1d13144b683389b4c252a7de8f2f363c11\", \n\
+ tag: \"434a935a6d0cf7b0db74221de71be837\"\n\
+},\n\
+{ key: \"cf0f89c38a951408f3dae9585d4c973a0a284d0fbda72bd18924b10d5cb34906\", \n\
+ iv: \"68ca09ce44c4c25c\", \n\
+ pt: \"182ef3978d63757b31ca47bf33fc5e7292503846b0792ff6b76f9712970de6d1b048978b1d61bb178c9d7d57903cac0c5dd0dbde627399673153765f9104a7b625806020adceeafa79ee64a246517ddc30470ecb867f270354c959629f1082c989a8214b7800670a2ba7487fd9cdcb6ab73e6b39e9e1ef3711b1d81ee28930e2ee230bc5ab21a434a81ba8620dc039\", \n\
+ adata: \"def5fc029a062abeb67a60c2f2e7cbf354ee5ee28dd0018c8c751f78030105df73fb53ac3de56caabd3ae46ff1b5d8a299e2459bbede523d75a4f512658621a28e8f667a1bf497702afe3846aaf05e5f70b457ee22e922316602cd9b77f03a8e4d640e29fcbca3dda5b0edfa37eb3aeecf0ec0ea552726be462c0c3146eff04873d76e9ed3f4f4718501f2563356bebb6338b2abe87d6e8c41265205c34316b25bb27b9e8019b7aae0537b\", \n\
+ ct: \"2e2a712734536a81fe9e0a313558550d294a294a99363ac8a6ecd197a7e70574e4d34205989aa32fc036a1b2d01faa77f2737feb6886fc806bc125c0115199b9e73ad34cf06a62c3f78d468759e266a9ae151907096f09153f3fcb5887d0fcef623642f9c3255a2db3a4a11e325399d8fff6016503aa4d0bdff00ac949277cf09bb21ebf9493b39c979845fda982ab\", \n\
+ tag: \"b169bb33a2146aa432cebe13397998d0\"\n\
+},\n\
+{ key: \"207bdd57fae2481cced9dc3c8843f838f6d5f9312a475d3cfca1173e078e177b\", \n\
+ iv: \"c61e4739f1c79123\", \n\
+ pt: \"aad02c\", \n\
+ adata: \"b6e7c2631e296ed3ee26ef40bee7bf9ce972508f29f6c456a134fbd84e60d6eefce1262e759ed42863b91f2217c5f7ec3e68d7e87a0ce7414d7512b7b8822e52bde17a2d32080d7bede47a4689b46b56ce3ca59de78e06008950dee412eb5283ea59c72730847e5e19bd777025209b971a88a6a2a4ee8bdb970b72ce4b907b8e415e65cebbc6a9b248eedb22cefcbe35a1f9456c7f605f9b3e2bb905c48544eb2e97\", \n\
+ ct: \"3fbda5\", \n\
+ tag: \"e86da6d57b042b346855fa1cd116c2b5\"\n\
+},\n\
+{ key: \"f2479f8e89abf12c4d68239798f08dd89711d800f121e3a8352f1ae234127731\", \n\
+ iv: \"c95bf2fbdd92f726a65857a2\", \n\
+ pt: \"e8711bab9201cc29fdf05d87a3fee559c95e118b661312dbbe667cd9e525dff10c9c9ce523649e57b03234fe2b5f22b2c1bae10cedb14d19425d03ffbb92fd285fe8273081d8fd41e42d480e34dc77c9352b71e10355466887b5c9b40ff3900010de2aac22f3242016b2a108f207702071475df768d70699233adb4be3ba80771a1c9ba8f7be113cb1da8c448c03e6a992cefceeca6508571112b98607d3187ae67cfdf953eff33fd77559d22e46fda59d9eaf5aead709e19b7ed89d\", \n\
+ adata: \"408772485ee0e6f0975ac90c003efbc2f1405e4b\", \n\
+ ct: \"dc2802284080cb9a07bd08e087c11bdb6e22fc14823e6364a0105f847e53fce37bcbd2093f33a47bbe823595d0de3ed68d7cc00d57ea5ef0643a3821e1f67ee5aa880bd643fd4803d8735acfcd61d7638e80d7f30e5cfe99686d13fc9cd7c575b1cf4a6d88448d07d23bf5bd30292647b558678fb861e14118f09030a671d644871d36ca99827656831b63a887c8d2cc5997e6bf12363a3dccd2b6bf139a8b32b7149dc515c5e71c5e42963d21a830fee84c35baa6cec3ddfee6a81a\", \n\
+ tag: \"af556aa8d282790089e8cb4595a01ffd\"\n\
+},\n\
+{ key: \"3988ee988fb8e33803fc9bdb5c000dbd82c50c010a9b11e7ba1cfd03e92c6aea\", \n\
+ iv: \"176d42b393ada06129fccdd9\", \n\
+ pt: \"20fb1b8a1abf\", \n\
+ adata: \"d001412c073a36ee5df0339e032bdd721415a4\", \n\
+ ct: \"72394fbe405b\", \n\
+ tag: \"345984ae393109fd172207a0f2b2299b\"\n\
+},\n\
+{ key: \"b6a51ced088bf2def004b5a9e29926e5f8dcd9fde80ec9b0ab5eb84f40248395\", \n\
+ iv: \"8e8bd0acd8beac6c\", \n\
+ pt: \"d878424bfcc4e827b0cfd05c8e84c78f2f2a796163a5c1cad2a0b721a41d6a415c3b5fab7981504e9e9179961b851484fa59bd0b0143aa3a6a9834a504b1bb81a16f2936341d3a64eec4124f3430565188d19b191ae99e336bdd987711a7a90f397388044e7e2a9e09644a15b2262342be09216de0390ef587e4d85ee28d4b8909a8358584fc135270d7fe22dc44b4da681ae27aa4764e69d6b8d2a3eeea6503723129bb3e81cb4352c9\", \n\
+ adata: \"77f362676a44990665c035c5d40a54d2cb8701b663893c7bf1c9da7ec292b7a45a5e63ccfa8867124dcf862a3821b4a0ca22b8d3361b90a4059d26700baaa7d4698fa74c6190ba9b4c030f4f19b29955696d5f8ed06ea4d36216ddb562af8ec756bf163db8817354a5d7689c4dc9f6fc62895003cc736bbbd50d3c5f7557a6d1435fb837b4660813116173cf6b10\", \n\
+ ct: \"fe1396d1eb8b32f4858eeac32fd4c888c1405b25aecbd53f125c7eab17f69ad8f0597621c0f263765bab12fb1d9b0648bd2a6bbf76e1e00c3c88eda4d88ec23ad9d897d8636eacf62597145e535fae6184d7dacd8c312e59cc501232f04a3d29c914cec123ed2f33ca09a042e794b81a8ee1ea0985b210ad65146b48886ccea70b3969b704d12ddb5a6ca835d8ad32bee7bdbbba5426f89667740c64fd5fe249435e4bfad9494a923fad\", \n\
+ tag: \"8e6c8d5a1ac5dcc76479cf8900763691\"\n\
+},\n\
+{ key: \"ebf9ca3c50319b209f61bf09c9e862a3707c709fdeb51d1138f69335a1d4497c\", \n\
+ iv: \"5462c23351afa3ae970f06db\", \n\
+ pt: \"d0ea153e84bf9e3ba0d7ba8ad91ccb6c8595470bd3b6326e3197f6d7ca1411b93e5b546e6cfa093f3c7906b377acff18b3d9f7ac28bf8b162acf2c35dafa7450caf2a3\", \n\
+ adata: \"9e399007afc51f39916962222d1d544bfc4b476841db952b0a525dd172db355a58b141415cc7fb369895be0045adaa2d641559cf3be54d42c8a94a6b6355d4a51aed84934609ef2f03aa8703fd220e5ca295926fa77cace094b6a5df94f8fa1271f7f82d68e1bfe1c8d413c41ca398de0491f54064a2\", \n\
+ ct: \"615f7f0e3e21cda14a5688b4ceadc31db73913332c2b169209e4180c57ec6f39d38c9d31114f854612a2d7b8c865c14ef6517cb3a2fc29622759c563a1fd09c37faf39\", \n\
+ tag: \"71a7d06628e5ca2c9e3a612e08330311\"\n\
+},\n\
+{ key: \"40b820aa8617e6ad327594a644fb92fd3359ba73b007f689c6589573a94d0495\", \n\
+ iv: \"96babf198d1a8d676645e7b7\", \n\
+ pt: \"3d5fa2d0b02463e128f5c1cc5199967e72c2cb338c969281e643ca108d409daee725dd8da2d758a3895f310785c35622f0e43db1080e600155152f6b9ee21585d502495ebe8c96086e90d178e31f4497eb188211fd6593bc4e4f689b2cc54dab00921d0fc985183ff2306bb7943d2cd4b7949e08ec3a55207c150c6e8560b7863487c440b14a3133eb5bd7e1635e375f4806d88e86561c295c8bdd7f184531743231f26d8aab80c9979981de973488fc144661f2b2b1eb01d49fa4\", \n\
+ adata: \"e44109a52120fbea5c039491d79c0044f5fdf553d3334ee1ffb60029ba8735eb1d5ca48ed29827b478b706b6532d7bf1ffc1a05f9c703e3388ba97bfc753c6208053e59e433909f6135b\", \n\
+ ct: \"ea6df1accd35df016b549a57711f46ad881a8fcd822deff59d3d5e435e7f20ada83127d01fedc19cab6deca927b1f1718b5398004ffbe9e66dd3053761d2d2eb30497ed80f61609267dd76472b35c85c801420490f674b443e56f5325cb9b20f070d6422840414e80be6b23f4c8d367a228651905adda46e14038319a1b1a2bed086069b62e90979d40fc43223e3dc68232557db07437d94164e2035d05e9b4fcda0e6972ab7b1154bfcc0fea55db86996636c589639489478a8df\", \n\
+ tag: \"797e81ccd4b7ed5302bf2b0aa54c749c\"\n\
+},\n\
+{ key: \"b544782c30a79a71d076116bdc9d8c58fd578d3bb132ca93bf312cfc7d4d7f4a\", \n\
+ iv: \"d811d94b8a2fc9009e8f4b05\", \n\
+ pt: \"8476b43083f17b09375f2bfe921df949113ef9a065a5c8cd89f1ce84b50a4baf7e7a1fba82eb8b2669f3314655a088389d586cb8c3a3b559fd000fb44e22e3faa306b76c9055d1455faefcbfb8c1ea407da8a4b1bdb77f54d092a68e42aa7a651d3ad277850aabe15ee2282dcf823f7fa6c35f6b3a07f0bec582291c25c07c2e7dcc1061e373c726356e85c4424c971571fb748e1518c53d97cfd348ea6c005680a42b25821bfd10a896\", \n\
+ adata: \"9bc15c571f8dbbee86012cb4a39761f89fe043d18727bb0be1f84999dc56bb726db2d56d2a71f8b071edbeabee06cafe8196fd8f1d9f9d0c5c0c8284573d777c7f1c40d7438c1578c9178c07d685b27702fc609cb62f80c1a3c514001e0a9d519ee98f79e1ce7cbed4859ef7d3080c223655096819c323bcc51db46893f5e688da0e0cb73192cd2f368866bc4aabf924d3807a243661e52958fd0e9e0cf093c763\", \n\
+ ct: \"d56e25fb388c555e0eac5fa9a1d284f153bd61ac47d58df0849b732fe45ed287a2719ed2e06305d314e8c7e62f58ae1ac2c9047d316ee1f23ff6e2c6cb196edfad345e5a925a9081b45b28e56a2b830711247386004b7cf70c62ab4c29b4c87f7234dd31e99433185ea7fa0b063a0cd5badb5bf810305b78745536936a52794bebd0cd7da28048d8dda13eeaa5272d5bca4ccd06ab45d462a71b1b3d0a52eae22d13f4de17a1df244c1b\", \n\
+ tag: \"e4bd012f56c960d200c286050d56eecf\"\n\
+},\n\
+{ key: \"eec12d7135c13181d38dc93343be0dcc159e7e1f3708c99315e99820c33d7e2a\", \n\
+ iv: \"8f07d83a6fe11fca452ff3f7\", \n\
+ pt: \"1dfcc7980e8e4b5cd65731904ed295d91b211031e1a59e5b5d96f356dffb7ebacff0003de6a2b6e574000b2d684035daa2cf8f98e6e8c8013e3fd366f6e44ed5a4311f34db50d96b85434218c90453b09d1c4f9e50a32974cd9ad0bb1f1f00b9e75b9b9165611e966c7727ea85f3151ab41051018f3be635fbcb7b\", \n\
+ adata: \"fab9451b3226e4ddf3f667a8db\", \n\
+ ct: \"b6f437c242dad661030088329a2920fe0d5b41eaeafe4abaf234b6b4aac62a05232444c448f0b534097196de47ff727a8b9432d68b0d6865eb8a25fa48b93decc8e5b1d115fc3bb740d6c82db0bd650873fe66103f432ddde85fbb61a0c8f2e979f1088852df145b2f15b7bb6c164b60cfa4bf467d0fa4a45d4c86\", \n\
+ tag: \"4fbace36bb8e0c968f37ee3dfaa42b4b\"\n\
+},\n\
+{ key: \"de77585c03ac0eecc685c77e29da37e99f4cb36141dbb1a2c37b99b8e6a60abd\", \n\
+ iv: \"0b7d778622c54f24\", \n\
+ pt: \"cf7466734b3d67e05e85dae5d6c87f07783521c232023fa09335d5bd8c10f6269dfcccd3b1bbab5ac26c9b6f535ecfacafed6bce2c82bc79f3910a34e05c8c0408c7f21341aa979ffc5a477a674848a9767eb7a9aa09dfb732b541d9f362ac60585e3c46e3e762399474107f81a46201424d7496bda66e658b9cca469e4d7480b97f2b79c42da98c5c655adc9c6b7672131b71cb87afaa8b551f9da18fa10799f4433faaa428785a90310273985974623d9ae020a3c5ce4e0931c418a0159e963f881c53\", \n\
+ adata: \"ecb3c194a68dec7b20a1010b25db016f5396ee429d08470df97d48a77669f8d0c2ac687ddf456531135845528f0692df0796569f23b4639d6986cef17f09a4061eb764ccaddd0697c892cb06a424a52f667701f78d3d0db5c27a89cde63541503588abe9c964d1d27134786a40649acaf5eb8aacfecc95296a12603c36da5998c35e2b898d492b82ec1ce9f5ef25216b73e421e6f01167c833e6b567b331f1d04411839e027879884b237bf233\", \n\
+ ct: \"156d5d5ca283c6fe73ec58f28785519e595ec0fa8c075ee8da06e4cbf26003182b2e66d474ffa8235a245dbb49d1aa430cfdde8af983204f57adbd3aa0ea77832e6e020925b4222ba1426dce2e869a53033770b432cd27788bad98d46eada01353876b50290aecdccb51267cce62f7e543193a50c8a4e889b78452de2d24cf5f97d1f695263c6edd7f6573c31286712159ff55668f823e140ec7306282c19c9cdcbe0147bab566329a250b4c26bd1554da6dae68d39be673d4d77e12217b43a6f87ff51c\", \n\
+ tag: \"08f60a618ddf910821ad26d84e62d81f\"\n\
+},\n\
+{ key: \"58cfa2e186a6c6add85c76aec867b041a9f715ffecb11b1249e2bd6d8aabc237\", \n\
+ iv: \"75b1f57d773a0ff2d7c0daf1\", \n\
+ pt: \"58a76490e1ccb1688ae6ca78b613f50c3fc360338d06faab4a577a42dbe429df826ee0441c989dde2583104705e2fd0cb6b288ccb4509d495479b5ab7110f32976d43829c3d9e1cab8b4574eeb30dc7a216f55384c6355675f242a8a6a7e35c1d73cdf1ee7170f92f187e281d72362f7b8ec46fe5e98641b9290caa7aa389daccae98d7bf8182de511039f06b7ac\", \n\
+ adata: \"ee54ed04445e4f733f84e7903cf53c2bcd13b975057f70496a6303f85bc5b54ee80d84e1a109ffdfb79117f6557d0f17754a282a6499d490a7225826481fa48edae74a38c03c38c5966691718a9e07eb600cf31e9ab5ec68449c10b310eb235fdb3adb0022bc4874aecb72762f4c4faae24e5c2ca33a63472fffc8307552ad0805a3cc15873e50a34f40\", \n\
+ ct: \"8ec477888e5475cf0b8ea3024b714f269d79b3275808bbbe7cc2259c032be4360c274acf0f91281ece7e7964bfd0149d0067e13deea0f188f587d9567d8a2b8e73845749ba007ae5cd73df78dd4b17dfcc0c2d1d0860474b46c34247254ef832a58595f134de69aae9eabe7b2647d78e0f60941926ef38e378211f50cf4bc4653f2661734fe124c61b54b56337f8\", \n\
+ tag: \"c861e05ad8b2d9c638e51d0e6679644d\"\n\
+},\n\
+{ key: \"8dfcef4e371198205b5d44f9e05eac3f2b2996a2564069487740fbf88de407c1\", \n\
+ iv: \"4b330b03bff8c60c\", \n\
+ pt: \"6c7501e2a3cd3140b8ad1019d75056ca2e6e179db4dcddcf8d28c4c3a100a248ae2b6a0a283c18e5875df69e18d15e844b9092d634d5b3198f9f0c4166243c87b7c3767cf5ef6e56d0cf169c94\", \n\
+ adata: \"5be841fc0857390092931ecb067775dae4118564ab39af738b56ceb040d3c0af087c717bd69f6d429d12437e89fc073e3fb340925a92a307d4a1fb3d1205f8c6b64b599eb6daa695c7d808\", \n\
+ ct: \"f54ebe9bc0010f79c07af89e81c6370573c037f2f57cd005645f5c81d750a4e61c18788e490122937ce7319a77600a5ad3e8512aa55c43843d8f6e84bc50afb6b7792025521e21bf126790aa84\", \n\
+ tag: \"1f1bc450a00c25188d0e9ffcf5c22983\"\n\
+},\n\
+{ key: \"ce0e697369712f06542ddeba048c32f35795bafae2c1687efdbfa156aa8eec1f\", \n\
+ iv: \"5060037c95e0dbfd\", \n\
+ pt: \"65c556dc4ac797e0505e31603314f6c884a841e2de380330314d5ebbbf37d85c91d65cfaec62da3f9f09017ecfb01ceb69e70e4f24cf92351bf19068645e58c57c2b\", \n\
+ adata: \"fb4b57dc16971ee04974e840e048e5a904367ef9330403c5df7284cfb16541d33e16738b7255d7d44b6bba9e84d1456d55e4b0fb2b7f270f95ca075359f36ac92478bb4e52a9804f50fcd92ead28830d6fee1298e473\", \n\
+ ct: \"0b6e4d83ebdacac857c66ded197dd8254400727c4f81b5a8338eeedae02e90181fba16f8b0cc9891f93e942edc250f429d1fac17435c2dfd4957becfd7ef25acf860\", \n\
+ tag: \"efbd169fd744304c6abfc33f7c58a2c5\"\n\
+},\n\
+{ key: \"8b5558a118ad4e3bb29e827b88ba4b33f9e1e2ce3678f02dfbf31f600babdef6\", \n\
+ iv: \"b9b0637ab18c6e48\", \n\
+ pt: \"99025998ca911e3443924cea63a06a9bac6785b3e06d5cd725479db5cf8106e12fb25bf1fc9051bc4442ea2fc30376c496d23726fedbeba4aa5f54b3483b7b5944631d575c8a4c6758591a844c16b09e2e5adf74f41236b81615451ae699\", \n\
+ adata: \"dbedeec83b90533fd6f83bc9b2a048a568cc4bd52d89fc6732236a94d1033ee1901e6a5555644c80936d2fac9c7c15eae23994a9a3e429b4b4bd4fcaf962d12cb4ba7463816b4ed49a37c6b67517d723aae05e90019756cc2d7fdadc55ef15f478fe06a2f417d059de9abc1bdc032e3e9537314f8a8571a46324fb9811441416ce82863a5114c66f2e4075a8\", \n\
+ ct: \"29cb6fe5337377553850e6723b8c76d5e1f64d9e4d35c941975dd86594e637ffd8bd9c4e5dc6a849076d2c0a6931fbd9e04d4120a7b0e61917ac80a4b0fb130a26453363e2e74ba14dbbd1da25ad2726cbc729c98ffb28cf168b55c265d7\", \n\
+ tag: \"66995c8e42b58f084842eb10ffc6e046\"\n\
+},\n\
+{ key: \"c5ef8f272a2548e332e144c7303d61b52f8b7425875ef426192863b2b250b4cd\", \n\
+ iv: \"970d0fc354907468\", \n\
+ pt: \"1113f8ba34e251321ee3fca356249f3a65c2e343065b7d25fbcd2c1cd852\", \n\
+ adata: \"179a275e2e111f64ff2bffc8d438df2e423f5f7ab3f2c340a7db09839fdddbd6789639a366bc578c341a8e8ec298b5704e3b38fe276bd181\", \n\
+ ct: \"9b84d77e0b2885ab86e0922dfedcdb4b56c60c83c13b756998443900f99f\", \n\
+ tag: \"83c46ff5af5f9ec2e4fd49da39331dc5\"\n\
+},\n\
+{ key: \"84c8befe102f6a47a745414a2516d0762b858bcadbf674d32dc005a95a692f98\", \n\
+ iv: \"fade8e5f78d6ec2c\", \n\
+ pt: \"fe4920676707dfaff3b85af696081a88aff81cb3e886a2ccc8020004975ad7916f14c76cdf56c46a668cd3085a0c97c828433eed9683c32ca2d836fae00a8bb80d\", \n\
+ adata: \"d33050f5ed410ca882e2d0782863cb9a450b70e15a15a9c05b3747bd951bc57f1076f270fa667cbf905c149e205ff25213b958dd4ff288cf36430f9cb5ef15b87e877ff202a10fab75e94fdefd0119ca6bedd759fedd9ee45f083d2af2f644326619d27613b8b575d3a85d23311332ffcfa35abe43ea9ed2058a8f2daf570af99f54063677d56b8e129d3723c13d58802fa9de0452161c6659f6b03f31c5d7\", \n\
+ ct: \"03c6c4099959a16eeca67ee3c998bf0ae26eba0169bdbf9e27752241a4035cb92d6edcd07e8e1014b5baa6aafc85d9d17a9bfc7c5c4cee1848d59fb044d48e34c5\", \n\
+ tag: \"5391c7c9ed244d7951818b5081892883\"\n\
+},\n\
+{ key: \"7f0221e8d05eea8b9785b07a451f3c53295f5994c595de1ef7528f99886741dc\", \n\
+ iv: \"7d0c5179de076b50\", \n\
+ pt: \"38362b19aca7a52c8285b82102ad46bf40ade4e257776d8f32ee7eedb87f65588377b53ccc92b73395f61a\", \n\
+ adata: \"8b89740741e72d7d096e10d0e696f299eb284ed50ce202ec1ba74dc6102a1b894f094e857fa9cf28e65ffaa79a2e3fa7990e4188658fb48d8d06cdc0d1b1649cc4344468642ee768c72db3918faad89d395fe6565a898477c91c6432bbc755bacebf11b0121c6c737f25cb2a30b0ff6fbe0c57c5ab6b0dbbb8825bc53b8d0f33ddb40b4daa8b0e9f848c18e3e49edd86402cfd\", \n\
+ ct: \"2a0f63143ad8b8c5c676956169ca1e65867fb15e67b7a6091003235feb0ae69a53a691678b13e367b552bc\", \n\
+ tag: \"e20a7e8a18833d36151121b3aca553a2\"\n\
+},\n\
+{ key: \"bfd02c5090e74e22728f98f6ff8cb7e6b96c3df0f4c44aa9abefc45d09f84514\", \n\
+ iv: \"04a86edda13e080dcafb62fa\", \n\
+ pt: \"9226deb19a5a5562d526f6fee23d67dab2c7942f537f744765a52bfcdd927a2f43bec208c6c9a1c7f63e49ea379f09bcc7c1ec759b5938ac3622f0e4ad93d76961ae41dbd3545f555267afc06380a5cda307aeaa02fce17ea2b3a96b610a8dbbef843c42a32cb1fbea9a085f7131ddaad3e6f174ff\", \n\
+ adata: \"09e87936cba323dfd88b13acc15699aea2afc64c90a7d4f197dac38ad1382bad5263fc7fb98e2a7bce8439b5b518709a525fcf6a9b9132dd5b36652e6212a276479eab82226caa2265b3bbc852b590bd256fa42256604da8cb60a1eb778a605ebaffb90c94d95b23ea78243e4b5c9ad2820361e15faaf12b\", \n\
+ ct: \"2b2a150f30537946e17e5289ca0751f5a51f287918edb4b7b70c9a01c8a21a93118a7422ac30b4514c8b423a3b451d159cdbccefe373e8febee0ddd26df86c36d6916410825a329b2063b30df4dda59aeff6cfb618db425f034b8157abb124f3daf534643655113e49f36fb531d56b9f6275662b86\", \n\
+ tag: \"19010d807c2e8c6b12fc8d2ec70c992f\"\n\
+},\n\
+{ key: \"a91b81e8682056b98e85822a0837691b4fa5c0ab0c75abc17a8bc8913deda6c8\", \n\
+ iv: \"25f7eaff670fab5c0625c321\", \n\
+ pt: \"c7764e04531652aa03c4f3357499fa0efd73ed6751cffdcdc111184c82a940a5451df2745324472e3d1a39e530102d7c1c70e2f6ac9154118e9436e411517677c3348a47b040d76cd064ad7bc868ffcad59b5207325ab721329afa93d90470485e77e136fb7ef123e612f6402b32bb6fac5307fdb0\", \n\
+ adata: \"eda0ca762e38413dc635c6e742b96ed02350ce356fef793483cddc1360fdd99952a3c8c6a133a8c7bcb25641302ad69a72f778e0b75048deeedabc3ce82486be0fcd732175362ef79400085bf50b34d220e04d6ab77c90f50f9103bca6b39076c912e09afd03d73ee7db31651f27978cc14163b9b94c31edf193453bd7bbbf23b84a5a4b30c5115352ede4ac38ec7c27aa111b\", \n\
+ ct: \"5d09fb66fb4169461c9e920bd3df783c93efc43755c7d45ea0610634e5f0d840b0c14901cf1db22c981d876fd64b9b16adb4993cfe63797ef79c96f8b128116aee220e1143e956b91cb357d35722fb86bd9ffdeab37e80bb935032484dbc7a5b954e22cc7e8e39c60af758b54a4be11a8726723fd6\", \n\
+ tag: \"6c4dab6fd85a5d9b14d3a55c803dec5b\"\n\
+},\n\
+{ key: \"4507170ff544f8911caefe5f5515523556eaffa1dd2e995674dfe46337aa5782\", \n\
+ iv: \"c1357420e90d34523b134fcb\", \n\
+ pt: \"285c36767711fd78a94d4dfdc074debb2970b77796ea63f6fe26d9acd27f112f47df8ff67acd9dedd4476b4c27ef99d70203efd0f4a5e730fdcdabe259167e4f3e5f47a8cd4f326828ac43fe0693bd630489e436133e765c2a4bfefbc89adbc663c69edcc01c3215991d2f29f4c8dcc6ab8825d0504df4f0b5602469153a943cb625f919dcadd546a3e22b549730b4cebe9598c9241e7fa46b6e651e9f9eacc6b1cc3b012c94086bde\", \n\
+ adata: \"6c0254cfdaae98c0b3ec996c331cdb5f50565ece186453682a4f96684fcefe43e0b1313a8c5beeeeb9b0c8be1125166c87a2d07f2748ab47cb4798731da4af2e6636fccca920871720ee6cd2b1b5c6fffaeca48633f0c8\", \n\
+ ct: \"1d005aec223a6dfa29df7fae6e32b9da5d14b0d07de5b956258b4330c211b7fc406fa63d6fe09477dc3f70542445f878e30f8abcae3258a15579c2fbab57bf68206fdc05e30b5fedb29bad976d961a346c3527c00ab1ca743494be6ecdb3c6ee42c9b0c3dcd7f4e96d9ec5a581c1ea967941208324a425040d5841bf2af7712e8de62917db10cf0a35faf62c0fcf77b05d0a200e9772faf7661d963984eee3be908ace459d34b024e7\", \n\
+ tag: \"7fa66150a4965d45cc988a83ba69c058\"\n\
+},\n\
+{ key: \"631691379e7ad78a440c84f155b45e77999fda20f92074fb801920b3bb2fb095\", \n\
+ iv: \"b6d4b92695e7f9e5\", \n\
+ pt: \"2e04925f019cfc41529c14598200096463a530552ad21d15a2e7a9391aebcacc111ed7\", \n\
+ adata: \"9e1d37eaae5d3ec577490ab99edb18de2a2a2b056069194e3d8c4ec4992e9e86451d921d7bbdf5957785742292afc729b2cb0a\", \n\
+ ct: \"22e9fc5f22b2f7b5e223a439cf726495048766e2299494cfbb9cf9ab80490e5ad47cc7\", \n\
+ tag: \"9b37af8fd423af448a61c4e2a134b580\"\n\
+},\n\
+{ key: \"fa2e10d323329075d4039abb57eb36b14c4e21b8cafb46f20f2199d1a5aef669\", \n\
+ iv: \"e9fad67d555ed9ba9e4f8898\", \n\
+ pt: \"0408954873991dded4af7923f19449ba1d61bae5c60f62de928e9d0fff49e3841039083c48fe374f07bc64d24198ca58533f89dd1fc8a8ec67539be999085bc2867c2a88bc5fca29e4974a4c3e3b0150a8c4c96fd109723e5516c0c69c4fc485179bf29fbd575767c1ee8c6283a64a7096cca3892ede03abe394b3c9b23ca96ff8c69e9b8d4cff36222e1f3fa4885ef2fc05e7e5f3e6dffd9543dd1d5feeab40be1b84ce28930ef3e1dfc819e0b70206cfecabd13c645036d151ac6e66\", \n\
+ adata: \"3cbc45a77357e293ec061e5247b16972883143baf648a9888733e3ea7abb3ba0f6f3ef5ba4d544b2b66d46780fbfcf1c52077ae48c544860821dccf97c3b81ac55cbc72d1a321b67326890da68973150b72c6f10b6f6b520d63432567451b68238ba1825588453b07ec291f9e8e4eb65d0744e5a4f\", \n\
+ ct: \"d06e2d1aa8f1fe6098d78738194ff399859513306555959d736458d91400b9c3301257c079a12adccc0418b69b53baf859f0ca870ba5497ef939cf8f38c5ac924f1a263aabadff8ba6de95a97da1abf3b71a263a138c2f2c24f855207e2378050e30b5a1d98983238f8679c9740dadce0d82844c37e94d80f08e179c64b7439b076c110a843bdde418c726af27950a3203efe710d42bf35d2c4dd3280f24ecc123ff6ec8020479a9d4c0dcb37ef9a91142befcf4a9a607d11dc119f38e\", \n\
+ tag: \"288c127b327592de03e25f2938bc27fe\"\n\
+},\n\
+{ key: \"f3f6606dc46d936ca2a317423f9bd3c383a3ada0e892c5a0b720f49c5e4e83ab\", \n\
+ iv: \"3141384e830679619ff84dbc\", \n\
+ pt: \"8393197c4c78dfb6fc04b70fc0f9b4e5630ab02ad43f71e706b727aa057adee6d3a23c982055f39e8eb0ac50868b562cad9ac1c120cbca14ce02a32ca626be60c6467ded88b4e3d08943115a27f26427909db7700826529b153608e692a3bbd30586a1ced28ef0508f8b38ff00769d2a69745811fe340fbb7eded740f889b758f424548562001fd1a7f54e9e340762745c8c02e6809097a2c2ea776281014ee08ba8a19b\", \n\
+ adata: \"bdf2ae34c46abd50b5ae0fab1c9aa300f60eae496ad4d1f61c7bef4440ab9858f71c35652d20dfa91f0a08334027f558aad9b82072d916f19bb84ae5cbfa203fad38fb8a55e92ccb41b76d1ff66ce36a8ddb71d3562b52667324efc81a11e15274c6e0326722e6d97cdb6faf48a8464725c73ffd44cc1de58ed8517389382289173d24ac959356d5e6a2523369473fd90af8fba4ed732fcd5cf764ae3a981011d7890a0db5f404395f4c6f42cb3257032ddad5f10d0310bbd19961de88a4dc2134f30339\", \n\
+ ct: \"93ffed8848eb2ba83e0a6ecacf1b3c3fc036bcfde28558b81c6f3b5e5435c67922fac07318617dc276d5b841b054fbd627c9892c225f8ffef632f02f4914dd13e976008c381805f3989c88aa46796f415f183a0bb54996bdca2e4b1a437f98ecc1c3e78cc3044eb8d71784632f9f866d780091ed1441c305e2f6900a82dead3569f02eb6b1690cb4f2185f5c2f6982b26c804b09ff30e8fbd4c2ecb4ef2131a7a9bc8726\", \n\
+ tag: \"dac28a63e481a8e6db36b417058912aa\"\n\
+},\n\
+{ key: \"f94e79b70ffae4eab0dd68a547f45e22a4ddfdf0f79034d6ae3b361fc7b6b9d0\", \n\
+ iv: \"af0b83eb0ed5fca5\", \n\
+ pt: \"dfde81e30360a6dd2e\", \n\
+ adata: \"293aaf92e992bff81b1998a0c1817463ba8a1520357849e50eba58efdd3c4986896a13f82a245a2c5f1981276e3825f99823faf0ec7bf1337b4a5dea689dc4fb913456cca5b689c0a9003d3c0cc9bcc0080865d2a8e50de5dafe76d441c76901afa988cf28a90a125f073a9cd71f19f28fc8fe385aeeee445a64f318\", \n\
+ ct: \"957bd043b1e553ab3a\", \n\
+ tag: \"423c40431a340f2ceb82e975c8bd4050\"\n\
+},\n\
+{ key: \"9907340b3e39f5eec8c1134ca48441b4c1631a6f7397116bade7997b996f2e64\", \n\
+ iv: \"f05aa890de319260010df9ff\", \n\
+ pt: \"b759383cf09bcaa6dc938e02ca18a594a467963cfd480ce0e055282d7d2407acd98ff73ef78407c9db48f19f092e2581d04a3f481a41dd46210e9d7ac5243898165227379ad29b39e0e47d3f853b0bb98849c435dc5f77924ff2b1a0245b862fdc324fd0fbfff9bb3cfe65e9df586955\", \n\
+ adata: \"d2cd851fc6cd0d8c9ea338e2bf2fc3da5994124ced805f93bc0edac2f56c74a02da77c4e455ed7232b31f57c0fecd49e7146a72b0849269eebae18c7849e42c2a358c44f3e706b243adfffa5a2ea241cb6a164269d0c5564c7e0ddf416828524e44b108f640e24a44284063c29693de5d8520d72d2ab073426e2f47a7335e0d6c302e7b9b44318c7298d36d874c1d0c081f7d9d560\", \n\
+ ct: \"cddc8f04e6eebb7057fc3a0f4ea780d5a9f4d9866fc976bc3a3d0027e0f255235803a85f4d525df5c593dad7a2cc33333bac812e9e91a595d3188277a2c2967ff7adc1d138c54d5b88ddd12812f1f36d9f8c6288003641cdba3d248dcc59f46c8245377e9e236db5769702880698daca\", \n\
+ tag: \"ef6dad8110293c6d9afbfe72797d5b77\"\n\
+},\n\
+{ key: \"848c6f3fed682acc156f34e13236365fb4e9b4fa70e75aeabb77d23a60f317ef\", \n\
+ iv: \"b53b832212934fee3771064b\", \n\
+ pt: \"f71f86a2b39ed029c93db1544392a58c6e1e21e42fdc90d8a427b40d5cab9d4f2b09772d3562316604573f0a305007d3a139f8c7710bfe63f6412a093f6937db0bcb60c55a3a1dcfa4cc67af7ec5c6be8f938dbe9ab3dae7219158b0767b3059cdb5ceb4e247655a8ebaf77e72a49e38d20e1259739187b848d4ea3502633c73435ef6f396b1\", \n\
+ adata: \"cee667317d7d3b80e42d3253d6c2ad8e\", \n\
+ ct: \"c62069509db2078634115f514fdf27d1d59ea94f5f45cab0c9dfd7a59ead7db6a0cc1d21681cd624e979bf74f5cb93da7fe7935e519544f3ed158ea6084fc0b593f40b40158057b65c9289a86653ff5a62f741f608e313f471a1895cfe1f740d6b72bf3a14458d444d2baf5db0e69feb4d102c78cd5e5cf647376d53a33e1dc2b43b56757ce0\", \n\
+ tag: \"804cd71a58ac36c151e68565276cc5d2\"\n\
+},\n\
+{ key: \"992da54b94b11928f2e45d8b6bf1f0288a680c7af28f494da24f34973fb6a30a\", \n\
+ iv: \"f88463ffbea2e0086c68b18e\", \n\
+ pt: \"f7a8e11e1833781baf1892440b2d9864fd2bb758dd125364ca88bbe928a5d45414a1a15a8f90fde3f6382fd1fae7fdf54c10a8a56b6c263fcec96badce6daefc827c5f370feb5cb88ac6f92928b6368c331d34ef9b71ff986627f71f79be4cb14d6ffd532c94ec6edd29cd3f8b729c7485cf3b19f2b31ff5983777ca2ae3673e20f2662405815616a69288b4d8e49b5e7e57c330c936e9c93f2043a9\", \n\
+ adata: \"adf221c5da63ebcad62dd681a57e2f5ffd9321\", \n\
+ ct: \"65f4412a46332172a7df469bb9cee7dc628f2af9d28fe7fadc0bded24c2e318073e272f9e8548bead69419d92979b1f53bf0b88b07ca8c8d792b390325554ac0031ecec94dd07310cf688ad94fb0dd3596f8ebfdb9196690ef8d32d2ec9961044f47c2d6b82eff933513d9de6084f0e7454d1cf596fbcbbb1f1390d0d7da3cc648fe9e35171907f8f4bc4e146c3470a1c4a4f73d98ed6fe4b15496b2\", \n\
+ tag: \"7d91d417fcbcfb2866bdb3e35f32777c\"\n\
+},\n\
+{ key: \"0a727626290b591ef184f281c1137ffb4297f8524fbfb9917ab36a2a46039f6c\", \n\
+ iv: \"648829773c4c1312\", \n\
+ pt: \"b94af25c438cf68baf89548642b7c4df0dd6d12316fa220cc7ce37a830e3bff4ed91463695f66388d27d6cd0f681edfeb3eb93b8d549eb375344fa5cec8cd2bdbb6e8c996302f5f350f06116607c3ee1c74a4c6e527d76d9122c5dbb527538f4b58edcf645bbdbf060ce92e186e4af8944ca7375963a69c2319927eb08821842a09e86a1146e75db9544ccc647478d6c1d5878836501\", \n\
+ adata: \"fa93c2b98238c9e3cd4930553825f7bad47cdb020f235be1c04d96c425cf812a30d1d22253ffc3c7c2f057050fb12ca6321cc8b63ec9cd757cc922e9755cdcf6f88a0daa6677130041dec27c8a5ef2a58438086833df722d13f3a321f74e956db507def58d85569832b1b6dca96646d6de096e07ee53432b2a75658260739bedb725a9cd7952fc0b70901479dc33d3d16d79da6c1891c3\", \n\
+ ct: \"d9582f2a5ac687613eeae279509b4d011b532729a6409ef8ef39ea861005a77d6f005d9059ef6cc975e907cc869506cd02bd6293ce4705f5d00b6b6ae74273128e77437d284f6375e0cf3663264268ddb33297a84f30f6fbc92ddadf4eb032ddebe2164181c800523ce9b46b49c69aea341887c580399229a0467ca7ce9e73994c2ee1f980f2f95d63979ed6206c26549e5a4e7a39ea\", \n\
+ tag: \"0df6356f01bd881acebe4c8aafb81e7d\"\n\
+},\n\
+{ key: \"43b7768e5583a43e7644583241d49385c999aff0c23cb76cc6583e62dc40d3e3\", \n\
+ iv: \"441b1d8c8c61c3adea73546b\", \n\
+ pt: \"356ca94653f6e64fc24f124b4ef367d49fe3b2fe87e3a7db6195e93773b502814e357e9b97090a056119e8153b618e7b6ff88a48dc9a46\", \n\
+ adata: \"2eb6f3bfaa5140d63e7f6bd3cba83b5e4cb73d82049a78511d5f1b5b0b0970766b74e69c8d0b4b74f26dca779918a5c3014f8e47c605b09d6847219918cfe91e5034ff1495721b5fd493a26ac42632fcd57d3b2ac99e\", \n\
+ ct: \"b4dbc3c65298b523ae9bd39eebda2c92b90a740e732f7f33179f54d46bb0bbd49a5655d44aa8c569c59c72578b9caef70e0fe1caef140b\", \n\
+ tag: \"dba3dc6b8095411cb825197850629b4e\"\n\
+},\n\
+{ key: \"8e296281b2a1f25c5af0d675e9190b1fc381e03acaff68673458e9a45840aab6\", \n\
+ iv: \"b396237fd7a701ef\", \n\
+ pt: \"bc97c81aea10074fc8b8b099a405f2a1ec9eb73f3c3235a9d9311322d10e5b9e23302f9a3d57e777a8036d2b04b05750b5927244d72b5db9e6ab4b86e5653d7017087efc34c72c97a223f7b5ff31713748777c63ed84b2f77522a6d1c3f060ac931e5fecb8e9f68554133e5a095dd131dd5eb651527d52e4a6a0f4a8079c6df0509e5115b4e5932a1fd41aeb25c3c8d025057f293d7b03520200205e316a06\", \n\
+ adata: \"80d3ca43d7dc4066356ac54ce63ec6fc66091b985d5fa298eb8ea1b14681f0802fc64ad5afadc95e6c4828cd6e664770d91061c2cfd4cda60d6d0f0e823cab675647f9f0931f04b2d2edcce10ac8ee327945d5401a2b94412b4cf04e6a72641984b929b32407d892736db987e06d3d6a5af3fbf9806a12ea3b18c0e7e695766f3f7d32416f94c60fc69db20bd7495abea555d835e63e83a5b130c14a0d65cbda785d5659a5cc6e37a6609f1c8044e92a2e\", \n\
+ ct: \"9a13e3cc69fcc971b4490a436fd1b656b5c50a3298a184f84fd9fa11239006b93a965adeed284eec4c86a65028f13fb65dd080520118cbd4dedca6116e6f370097e94795155f3c7914bf8f2dc8665645c48503c78f4e8df3959de05b8f0c46bb35acec54473d2bc2eb25e637ff9e2f7eec9e9868cea6e76802e401cb83c0aefc759bde2df8918425b4f0fbb9d112c4816cbcbcfc30e4eecf720110f09364ea\", \n\
+ tag: \"4c7b21111675b7e8cedc5b9723b11e83\"\n\
+},\n\
+{ key: \"94cf23cfe003c9d78535af2d71ddfd8643934531c1c39942975dadace974d6fc\", \n\
+ iv: \"a143d60cafcda2d7e58cd940\", \n\
+ pt: \"4a970e50f2524e6bb5403ea7d572e3e1599477c4b1eb22693c027bba3ddfd04578bba1b0da4a2793bb0914af77d4f243a0318082f5827ae262b5a93575132da97e29ad2853ec47e1fd470f3565e3ac\", \n\
+ adata: \"6f91b9e6ec53500e81fb86f4586f51d692ca4ab44e0e91eca8170f5cdc6c2350dc97c1b755b224995a2cddaf4e351f36a4d45594f45a3d35f1bca58ccc3f68829f165d0d9169ac69971fcbd212302b39923a7dbc6077dede19ca52533f00d0af80c0be8cfd53f6bb8992aeb47f07026f138e547802ae759247a2464e063a94\", \n\
+ ct: \"10471e55e3bd6e9e5292a0670b412a8e41a998f0db1bf7afb84bbc048ef2b7b07fe00a3e75189c6d127d735a77e8afcb5f6af296dff03f0bd723cbe43a89cc0c8e918ffbdb6331bc8229a82ae01328\", \n\
+ tag: \"127e8027446a0cb2e414b6b6585cf676\"\n\
+},\n\
+{ key: \"d08cd0e5e8d1f09a0ae43e8e801083532a8838b3901e72db5b088ed2442e3a49\", \n\
+ iv: \"ee93fa73dcb9cf2b475d10ec\", \n\
+ pt: \"12b2695757a6ad1c96aa6c5eb99131b9b328d53a6bf6abef34c4a6dabda33cee00fbe6e1528d0cd7572fa2e8ecd7cec914eae2108a3927738f9682f8feb77d433afe8c5e40912d79ffe11757ad627a6d18e03ce8fd6bda1f2c23c27bdf5e33aa5cd9ff0eb6be76474dac14b7505581e6e92682142e05f76f2dc10a17281eadc4abd33c7f95ad503840bc6b5f0aa1100e58222a8d317d9d7cdd9944cea92cb306fe1c0ea0782f80966cefb937da30598633175b6c51c923b32a9e93808884d8e0\", \n\
+ adata: \"287526bd49df5c277be0a8629eff23188f72eeb0dddbaeed07e11d6a9dcf6a5859ced62a2f67caaad60766a03f14ce440848990662324094ba08ebac407bc663b18cab7231a97e822f38030cebc3681bf9f3bd068ba21fcf50ed6a8ed6e29bbe6c59ce67e969f612ec0c6ca316c4d0131b4f2ac657d8c869decc08bceceabbd41d1efa6fd5\", \n\
+ ct: \"73cf4cb077cbfa36bcfcec32ab36809c9e7b3f4067d8297ec57d80c53890f60e066a67c8bc0d86288f270fe373302326c7868c1fbfc211dc11e7bf25f2254f52c67f02d455f7c46f5d1ef379be6778cb528729af5265c61518755da4b7577dc2109a06720edbd4c2495acc5311cc469e6011d4866434f5d22f4e1e833f72ed11ba497f7613ae1d7588d84ccc25b7f7dad28449993514cfeca65342f5c16b303dec08e638f98fc7c1aabced4c25fe55c42daf5699ec1b47da272e108a6b877fdd\", \n\
+ tag: \"76bc3f771108f613d59ee2dcb82e7a1e\"\n\
+},\n\
+{ key: \"0dc979f11c4fc9afe4808cf685c4c40c402e5ab5e3aebd99cd9618d515df532f\", \n\
+ iv: \"77b6d06afe4bbe85\", \n\
+ pt: \"e1b25055f710e053f0d3b3a946693ca216d9c98e7657edc328d3ab\", \n\
+ adata: \"d9de3ba94ffc038f37bf08cc2291f9128f4e8ada07f37b7abf4aa81404f71d90b99d30b88fdc40754ef36605d8bd03037b5774fc2c7843529fb450db1435188c0398d48fa8f1faa6e4dc42f0c49400de51ec248c9e223cf2583c8a8ee45353d5aafa3513476827dcdaaac93d83467c801f56c6c2b7529fb3670f0bbd8ef2469ef1b4c365db57b1a569d975f8e884e29462042e12\", \n\
+ ct: \"b0428239a4ed2df29cc29be8e269e1e27fbb4c9af04b9ec2d460c7\", \n\
+ tag: \"5e5ea5f5d29b640efe09cc9020e035d0\"\n\
+},\n\
+{ key: \"03d911297b4b9408c7dca8057753f7c41056331257f62c29341fadb77c6ca8d0\", \n\
+ iv: \"cf795b11551bb7f7fb0ef06c\", \n\
+ pt: \"e69d171f962ed6\", \n\
+ adata: \"623b4af69f9388a564b2d34d35be1761915f18a4e7b61157d52fa9439f5935dfa7945d816e16501f2ca73af30b2fa8c72c72cda880756cb16b4e9a441cc6295fb4e2a580e0a8d370252d1c42be825c3d04e7a7c90e286f2c3e44623fb9\", \n\
+ ct: \"7fe23a676c5483\", \n\
+ tag: \"95f2d10b227c59dab7e24a8db41e6bb7\"\n\
+},\n\
+{ key: \"55bb24ba07a11499a32630ee6b805fd3d68426453b1bc7db326f70cc182e94a8\", \n\
+ iv: \"74e8e82183d1d3ba\", \n\
+ pt: \"b137de29f2106b0c97864e85f95b30dee3a3226166a0fcfb660a6ee63bace130aae6460227ac231ab9e48702547e853d9a02adbf335bcd162c358d41c7aa6279fe8d870981096d0fe135641110bec696223fd97351612c9d1e0b30246aa2b9e8784466f11dcea83e126025edf29ab99c608a7be3ffc765c299fcccb68602294ae562da3c1bf593161519af85c638a62e96e2ce87b3db955798f5e3c813550171fc57f9914f45c2b629\", \n\
+ adata: \"51dddc536a846bd66b481d4addb177e40627db631e84dd37ab0d5e99e6fe058e9b80b888cc52ecb82788eb99e68233dccb98b0a22d08fb4eba4a2d480c142e4f57dd130220bb3dca82bcd3a10750ecb28fbb7e0f6e0b5851ca0099073e89e9932d28f7d3ad6cbc0591ea06ddda53ec1c15061964b75079e35d51b28c3b0a7837a18e476a3a15348e5eb4fb27f981fd\", \n\
+ ct: \"8e5cba5f8b8f8354ba7c0be528a9e696ca4de4666fe178db47b9b19c24d66b91c6a91142a13855c3d39cad39e2349eb740b0948e52a784e718c2ec0d7ed884b66ae4e75bb213150e15ddde3a9333d599df02276d15c33a7043f3e8d3a7f4a7327eef4f4afdeed6051786c7cb113801b5153b712dd77f0da2fcb87816438d63a050af6774d935af1bb7ccc6e7ce3fe1f9cda2d00501600294bb3f297c6876c20b1a38f87639edf41c39\", \n\
+ tag: \"fdaf1fc2bc73e0e4aff87c0f10790496\"\n\
+},\n\
+{ key: \"c44243d56073f86f64f07c3e68695d1bd18c5ba6ad763e602ebdcb9ee5be1c5d\", \n\
+ iv: \"4292329406185a4a\", \n\
+ pt: \"86544508e03fd13802f8fbbade8ec27f27567e70ab0ef1ea9e9288c007d89b143c2aa33892954901c4bf249a2ad5e1eaa05e9e34029ded6190a283fa2c09c2690e9c9555501287372de0c93005091509d092f27c3eb21d468e6612aea257a39f824256a518e6192ffabdb795e25a305ac70b9ef1\", \n\
+ adata: \"e51556e1155380acd0a3102dcd888c\", \n\
+ ct: \"39172c1625dfcdc75868ca51ca831b6b0ca03fc15c8ca63cd6a1a31b0aa40362bb16b65c5662015a9f46c89fadead9bbc5bcdeb54c7707002d059543a7357e068052435525978a36a29cb2f4949869ba08414a6be1c41d5e3541bdcf9c7b8eed7a2d69d512821d9be6f74327bc08f6c06409595b\", \n\
+ tag: \"27259e46003ce235414a82ce9af8372f\"\n\
+},\n\
+{ key: \"b064b44d3e953c81f012eb9572ecfdca5b3d1a5943c4a9ca452d69fd844a439d\", \n\
+ iv: \"85eb1bacd0b14cd9\", \n\
+ pt: \"259c9133b04f53dbd6f015db046acb3ac87e7f2daa3b5ec8913fe487940a6882e9e98c9ae0107bc40aea2e438488a9daa76c025f3f44955be3cea9053e21e292c375822a4577491b6054146027ffedb9bed5028ff0bdaa3583336897d4d55fa1b1c59f91670d152b7c17d1b6919dce304c9bb32906a03961e333f05c802f77b678ce309ec6291d328fcf1b0f1cb6f8b3e33c765f4e7d945d68efaf88\", \n\
+ adata: \"bd2e6ebf46adb4ccc5a0f7532b63052b924985d01056753b6e89b877daa782c442f8a45bc689c2f8b03ca18e6f42da7b48dcb9348d0480507c41eaf3f692c9aa0b2576e3846eacd41f7acd89a2473c99fb071569d8c48e831e8a83fcf2111da929584bf3e9f7250c158586ce7bcf02b9abd9c98d0e735becaa\", \n\
+ ct: \"e26dcca3e28e90b89de6d06d29556e33a8035fabc627ae24cb6a76dbebc48b94b1c376c0ff5909938e1a399fef348c58c2f22d6d9e4fbc90ef0726570da931bbb899c2a8d87f7e8fb093e13d604bec448ca85f984b3487717dd6c623ed3a769524c2a0abc568d016035f2b52b47c6a4ae92c1bcea6413786ddd5259e8a61496de6e4efaaf1c0234274944ba634737e7b81f6321f27b19dc4c4c4727c\", \n\
+ tag: \"089aabd87cb8a8463c382538a599db6b\"\n\
+},\n\
+{ key: \"e513e9c4ad565c128237e42208991a4841f7d571f663d0c738d4f975764f4fb2\", \n\
+ iv: \"467fc055665d2933369aaac6\", \n\
+ pt: \"f9d9ad2d80d5544cf159e44b7a95e7448b263f3f37a9be42ecb3defc8608aa04aed840ceed2259271dcdf3a6d4867c296e61786ef8a4da9c00c6b2ab74f54462\", \n\
+ adata: \"22e725911ccd90cfbbf6\", \n\
+ ct: \"272a8e507195f6170c7a8173269d86f98da7faf35b614fbe7ad643eac21f7a6efece059fb32a3e04c5ded18b750f2a76274127e93c2fc6a03fdd0d3e3e1709c5\", \n\
+ tag: \"15ac0f8da328e221de507136923e9300\"\n\
+},\n\
+{ key: \"aeb60f740c8cfd8ba618a4bfe695d356a3e3148362fbbb5e541663c90afa4ebf\", \n\
+ iv: \"67ee55b4a465372e\", \n\
+ pt: \"ce022ead9627fef91a7f6cc8b86a481e7edabf9cdd4c4f1487984364713b96d9f1ebc78be1d5ce51d308b4c56fa9a09c0717\", \n\
+ adata: \"8614764f69ab407ca9a91b6daaefd9f24f6cd8dac5\", \n\
+ ct: \"ec8a591f7ec762a05656e7f1f45b835894a44356a894af6b2934de2ff87efa27eaf0cb324ee7f222c8e6ebac7cca6c8c99e7\", \n\
+ tag: \"d3763353185011548a99c198243886ff\"\n\
+},\n\
+{ key: \"627aa09739ecfcd6ac9045e3a7a7680a906b29b0981b5d8d1d1c4e8d53e95e89\", \n\
+ iv: \"d33826e595eaf7a00e8d9bc7\", \n\
+ pt: \"f3cdfbab9dd630de980d6619e8238d6b912d676fb6db2a7ea487ccc4607f54dfd4d7e476440cfd1be8cb50b01abd88cf03fa054fdd7da07c81d80a5dcc7ec4cff6b587c22253de1299ffe2d08102ad96bab27eb9eeb8e3cf8bdd65778646370e51435fc5e2d057071cd2bd67ed181b89547b4f3ab874ad90f6b09e33eb009cd6c02254a6d26d7e80f745f7\", \n\
+ adata: \"f0bfe3ca684c2b2738ef3491368b1a8e24d63f09e59a3ad8def0fa38ce29e1897285a4a3911e64251c1d66dd9367a0b7c693108012c446d0ee00ef01745c166062704d60f825\", \n\
+ ct: \"243d159505a2f1d73193a9441e829297afb0bb47e7a4d958e9a52986c8092ac9a18c159303527212a39000ec92515f7938062bf411ee81cc58aaeafbda287d6d54c57a8e9364ccd1ff77d2b275aa378dd24f18f8b5afab7e63ba628ec89c04bd1de6fe42df0a9f11b37d73972088f09832b9a12f14ed0316ba53d7cf951bbf85346fd9e86fe98385071d5b\", \n\
+ tag: \"815967c9e99fc6443168d409de74f9f6\"\n\
+},\n\
+{ key: \"05a2d7207ca9e87029447c9c7ef7401a10a36059893a597311a9ed0404c824fb\", \n\
+ iv: \"994dbb08622c0f8bd0a3abef\", \n\
+ pt: \"89e7df12e2b0f1d1949d12a17d822e07e77a3da7b8e104ad8ebf24a69547dee1ad6680309f2c1bcbd76e2e88d3f0ec334a59c32eccec9c1eb0146b998f1d8298c98ebab0607d9ea738105f1fed1cf44569f6bd0ec3ceaa63ad483010\", \n\
+ adata: \"394ee873e36bc38df0e51b6f73aa1293a611e47e6bca72761331fd8a19444039477d793414311675bd454403e0aef24ab5df67ca\", \n\
+ ct: \"5eff3f4f64b9a3ad2787322ebb2139017cdcb11e059a0edbf81e541bbf5bdada324880ede95143e8072b91c7c63618f6af10d08458ee42676d1495594a86b2b7bf055002f1a8ab50a37cc6d5cbc5b03fc3efb39e464e538305700626\", \n\
+ tag: \"f9a7097955e7964c4b335d198bb55980\"\n\
+},\n\
+{ key: \"47a16a8f78a74a353e9fca05d8a1bd4ac5f83c9176766a7eca78516ca2c29845\", \n\
+ iv: \"3a4038a5179525f3cce08547\", \n\
+ pt: \"1f816a71932530dc0ccf34704fd859f21356f87749a99658f5e628f1a6dfc692171012f691739aad2ef059\", \n\
+ adata: \"db6074ce919140ead576270a0fed1320585fdb93ca1cae02e4321c469901f76aac9fa95b0f8c3026de35162b270128dd644212dd5d94a4275c7f980ba4b52d50876239477538f5f6d715fd7aec90adb646dd45cbfa6187169db11f4e08205ae0650da5f77fed350fd9a7d36f405dad127d27b4aabba68acae212398e4f846acb285226c748a5c839502b13a67f429f\", \n\
+ ct: \"64633be25f4d1b43a8855f96dc595a10e30daa0da5346b3ffaad72f1a03fee86984dbf99ecc1de450fef55\", \n\
+ tag: \"499fc853edfcccc043aabec74f5fbdca\"\n\
+},\n\
+{ key: \"926ea4d1d3f4fd95302f4095966da9702181d1b7a618b3b38e3e8ca4ef71268d\", \n\
+ iv: \"b8cfe9582fbde2ab\", \n\
+ pt: \"f5e8c0949f40ae20c92d92251ee4\", \n\
+ adata: \"9528cb6d333dcfbb5e41efbb64b3808ece245d49f3af5cec830e7c39cf6475365501322a7f262a64a0d64b77869b543dc906449d4a7070095b673a8600d63be77018f60176e2df3fb9f6e1c66845ae6586f5ea4255f6318ecd8a33d9c6211233\", \n\
+ ct: \"ee1adcd7978829bdb5e025a32b65\", \n\
+ tag: \"52bc0359a276fb0ae1bfdafbecaf5b32\"\n\
+},\n\
+{ key: \"276223f824c9f2310142ffdbeaedca8b09e11a57d8a5457c9cc648ca50a3b9dd\", \n\
+ iv: \"54eb8dbb4defe44241386dfd\", \n\
+ pt: \"33f0de012f9b973684d74ec4149899735cd8091dd2725c8e7deb4a1384401a558fc738da160ad4f0afd206af92f94c51811dfa3908aaf508eba1114f60379ecd6c6ed05e31ebd5c3afaf3983eb15f846ff292d5fb862fe491216524cbf92a65572c4ded8ccaf3ab0cdfca51bba6581791c84c47efdc8c95a7faa091d04f71b3f0a02e2b16f59ada3588086f4\", \n\
+ adata: \"0974d7c708a4dc8951d0d63bb0c976f97347661acd4f8f544c967d011e75275005af833ec9fe3a424b103d0fcad5ec6c6dc7d1757baad6aeab0e2cfb236bafe975b2056a923b3dc45d3ddd67684ce59c676c98fedb3b1ffc54135da95181c942967cefaf1cacef846284f318a12f5a449db184161518b3876973e116a7a7e9bb1f6eee16f4c2c0f4a43b7e2f43f389\", \n\
+ ct: \"65fe4c26889bdf5821a7c5b7df83f781cf8bb57f0fb4ea47a439e72454ce9ea60476b2c8d938943b08a3369d1d123fe17ef2e45117a66469896095b9736e68d4fe3d57349a8124bf3472246d6771b5291d8473d14cf446be180543d3824e5a11cfc12c0d8ecb89248eb220572654da0241c18a6a1c68c37af2280f5b4b6048d0e9dbfabfb3ce66facbc9280f\", \n\
+ tag: \"919d7c3e36082cd01fb60b68796066d6\"\n\
+},\n\
+{ key: \"87858024b539bb9a6e22925ee618d047223948d7e239d9943a20fbf4a980cce6\", \n\
+ iv: \"31add665d81f648e\", \n\
+ pt: \"b2a5e2971e5b7a24d9d3e9b4566f17f35fba9fbb9c1e66765911fb793a56e1b513454bbeb74ceb078d270246fd3876c95f08a51c6933af3be77eac156161cb27b6a28e56a3d9a1\", \n\
+ adata: \"9126215d319e8c035fe393502aeae24eea0333b8cb0b0c985d9161713a1e0410115f94694c788ff30c96db0a557cde234d985b5f3a53cde4afb5efdb4367ba5b38ffa25a486fd15ef5b924a7dd558b227be1193ea6\", \n\
+ ct: \"ce71efd3f88dde62f545d5a13e896c3fcb4ad6fe99c30f9ac081e5dc1ab30401933898ff7eb225fb01c7fe5d29b6ba6a613400fa7fa9ad24a41383a68719e89cc8953129a58b9c\", \n\
+ tag: \"fad9aeec4ed38687b6faa647df1daf78\"\n\
+},\n\
+{ key: \"d813adc0bf7992fff91fd83133b350aaf7cc8fcf72e8105c9ebc8d61a56be871\", \n\
+ iv: \"4aa5b8a65afce10d\", \n\
+ pt: \"eb94a8a128abf76c8255f0766a6ad00c2d1fe4b807683165937b363d7b55e985cf7043a326d92d12e0f9762eb3f502db6f0d7fd1862866756501bf5203641661ce9d0ee3a85c00476b14ed34d15b8cf502bd958d549c76aedac07a11752c1cf4539a48120d9167620e\", \n\
+ adata: \"e6ea8a41b056e312ea5ab2542f5b81851fdad8ea9a7405f646992a49cea5bf413535081b2259b883d6f883b9ad84196438b3283515c8179dcc878b906477c9259031292abbf697bdc30d4ecb6560c1b19dce020e46c3be2953dd42e7072369fa32c06021204f4296e29fbf84f2760fe5b58c092cd0faae0a70f0fa5704d5306f2a4ca20c9656f6648d9b1aefb6b9ba7abd271058f19cd0749a56ce4db1e514d3e16b7229a5\", \n\
+ ct: \"ca3360a6b65488639c941a593fffcf05a84825272ade3600d1e7955a8b88a616c1265c5d2bc5d6a23c358007d8537c1e8dc4b81c41e3f5e429d5599f03cd926fe522a2e39dd26ccf1c8d09ce548909411bd7253fc102927c81fc60c29cea0783814b3e43cf50f0dd8f\", \n\
+ tag: \"cb4894bd70e10150cf51d54868586af0\"\n\
+},\n\
+{ key: \"b1b7517d3d1f0e334071a9ce887636125a65220e6a9b59cc0749483eab06ea89\", \n\
+ iv: \"70e0135b770de12c\", \n\
+ pt: \"958cd470327ff269a23673ff312aa55b1a40fea6e19e02f1589358d6a215580d7f6be2071d8b86064061d307b42931fc1e92e09f26ab15c50035748993286045e0b93183f7f57dcacc6a79da2cf671632f878e17877cf2a75dd0bf41fc2f2920eb4213fccd8037229f7bedaf66c2068eb7996b6495238f6ebe717b3fb62d84bff494a2505061991345a088607eec57e0704f23c2a9813f0f1dd913831b3effa68bcb9ca1b8\", \n\
+ adata: \"a1fd79008627f9ba77e780c5b69cc67fd9a5d59e261315fbfd7bc15798a352d569dc78e1595b5d1fa5aa69934c19a352af4f9a7bb975a2d9840d7b1b7a14ff0fe7634bb41481e45266f6c33ab530253f93e5c5092b6c9bf839e6cedecb80c66597fa1b39048534f49d5af7a1c7641f80092e0626430458ec1f947e36f2f627340875eaa28383d474805c\", \n\
+ ct: \"1c7912b8b070beaeac6156abef8f276221121a72d5adf883c93b4fdcdd9c4de56851cbf335595957270f51edad95fdb849815fb2b7e2bc63a659e3225ede0cd5c8d3c2a2f9f2a5bc58ea73ced40a4c7ba0c668de03bc6e418d03b0be518468c70ebc269d42ca4606685a696c91bd0a7ec7ec92c5b2921f31742fd57edac7b2e05cabc76b655ff805fd70a59e1e7cb782b078740908e3525337042f61784ab2fbaaf3026823\", \n\
+ tag: \"40071e5b4511cfd567aacc46b0d1fa86\"\n\
+},\n\
+{ key: \"7fb23414ffad7b5a4653c3d1cfeda391bb2612ba9676033e4ff42e98036f9258\", \n\
+ iv: \"d1d51f2f58de98b6\", \n\
+ pt: \"466195cb7de3a0f6f09f7bac05d94ed13b5e2f538450948a3f56ece806f65bdd4dd5dbd86b2dd7dda4a41065d7e5d333e310034a4a6475a6281d83c00d9c87bc1b2ab1ec\", \n\
+ adata: \"6284b24bc047c16f0a9f899ac4fb77053791de19936711639d8f6868e59ca8f972e4e67f9f0c12442584fed8889c14e200fa7951a4635239ed01aff16429a081661f074d6ce596cc56d7221fd6a59e31268832184534daf4cd31e0cf81c8ea6ede00717af7937e036425557546c731f4e91251c1e81b2fac010ad7e6b72f8e814e61a856246f76387bfe363b2ceb8148b3b7b2a5c66c5ed07656251559fb54907cf4049f2260\", \n\
+ ct: \"7d9f9f49d7bae856b94573df905167b8528c2e80e775d6b743293bd736aace455fcf62dbc45b7717c7a30cb4332463cd0e433d74e9f1e98d66aff467ef64e8be9cffaa28\", \n\
+ tag: \"49f974f6728207f4ddd32bfe977af41d\"\n\
+},\n\
+{ key: \"cf5d24e3cf16a3f5589cf1569aa8d60cf2af5e59fa75a546647edd11ca2158cc\", \n\
+ iv: \"7d1c76be3849ebae3c95e13c\", \n\
+ pt: \"84380c9599becad7cf05\", \n\
+ adata: \"3bb70684668b378d6ba33cdb93c36217dc82fddd7415dfd5446bff8c31d8f0c64861ec1eb5509d3bc6165acb68d1f0eb873d85049886e51619f505e55511dd62da42c54cfd42b6d7de7b9d591c099dc530d6dff3e146e92ab475d7036bce98905c88fbe4f342292ed5e4e6ae52f294fead258c7f60b6d9eb6c6edf71f90736f40972cbf9c6c26fcd96bc172e7fe56581822a020338b86e99\", \n\
+ ct: \"7f07fb7fddd64eee8636\", \n\
+ tag: \"b666be042075ace4fdeed6ffb72bf8f5\"\n\
+},\n\
+{ key: \"98dddace948a47eefe3b82451ca550439f291b0bdb943284e280a4160605a12e\", \n\
+ iv: \"4a27f3d1729ce89c\", \n\
+ pt: \"a802dcd9206dceed3312e90550388c9f0c061040a36ef74de0f963dca4f913335f59952391a44f3b5d9eb08d5c419a9acc2e8c848a2f43f770c69cf8a12f0dc81704cb49f4dda9e3ba82617e5f1d7960ba72714d895e1fb6ae789e4d3addae98d56f77633c9f81944940273a7e0131ae2b6036d65cc58e26ef5976aa44e12075e106f58f46e0a313638aae4ca3b33d181f1cb0563b238bb8ddd56b\", \n\
+ adata: \"7d5e08798809a8adbb633e\", \n\
+ ct: \"1adf281904cea8d86d7a49855a4cf2c3e2a64075e851e167762d15d0fa3650aec1a77c93894bf6ebcf25e0faecda1fec1dd68f26f68aee1e4bfeebfd2c63246aba717170e9ed0f750c8b3d7b61bdbdcfa32bd843e71c2b3a8740dd602d89da4930238f12bf234dcc8242f6bd26f336a90da49c5d270fea615da9c5a32dde0bac11b104a77137794478f68cdaaa04c04995520100bef901c5cfed9c\", \n\
+ tag: \"2cd9e4339f3bbdf3227bef406d661e71\"\n\
+},\n\
+{ key: \"c7dc813003e5ab22394ca8e5bd3895cb9580cbdbaee03cd4164314443d81e5f0\", \n\
+ iv: \"3bb8a9796c7a7924\", \n\
+ pt: \"e1e3e40ab3a4ec3b4921df8dc5036c21678e85ddf5a4a04304bd43b18273967932365d87a3e5540cf8d7e46fbd2fae6508\", \n\
+ adata: \"f4e61225164082c83a195f48415787182c1fff1566aa111bc68a5d54b698c9eee2ed317c6af196ccd44dd8724ee5e50eb8727c7b939d856a1c9321719a37d3d691680f83982cd1b97473b0c5d1\", \n\
+ ct: \"78d38294415bfb7da43ae3c8c5fe9fed749b9f21a8d0d295b9f32aca6375a6f60f22afdd725612ef8269f439508a7e9e62\", \n\
+ tag: \"bde6b8191cbb4c819b28bb1c13dc01c1\"\n\
+},\n\
+{ key: \"7c19c0225d854480ec66c0ca12296fc755d83d126aa00f4883b1ee71da22a40b\", \n\
+ iv: \"b931c254d5f9eb52\", \n\
+ pt: \"72235579f91ba676bbe773b505642c0a9734f523e996b3376c5099ed1791c4620f661a23584a3f4b9cba84fc8249d5e58a0db612990df33c481acd2aa4a12e5340ed998ff7bd5b5f098782c32ad63859995e543b937b159931f8c881062e2992faafb2cb7a146fc73ae8063c154767c43baff231b61edd9569c31816b3c900b3e12d52d9fc6f40737ecee405d8f9f5307960647072679538eca67b155bf1a534785079\", \n\
+ adata: \"594f2b6857a8e7326238d0fa30a1669cfa448a648d72b3531796790e19ada4fd2c66ad3681aefcb444810f4750bdfe2782ad6725ad1cb6d4\", \n\
+ ct: \"0ec17cac64ebf189805e80c6f32c9c6f0e479d31641c145d6551511d6ca8ecaec4f1d935702db492445dc58d8fdebbc2a5fcca0cc579247c2ffe1f7587522b53f0a683495a62087512e7c9963cee9793d7ff0c59a0eb9d33c6eb373e96dda0c55a8d15df51988cac3211eb1d27799a10ed51e66514849922d71a59b84ac99422f386adf374bf0d9d42f7cec6931164c6c64d4637855cdbfb7b9b65a0a878fcbebf6ca0\", \n\
+ tag: \"380f07b879e62ab2b995a4ec2e815803\"\n\
+},\n\
+{ key: \"82bc0d0e2b99fb0e41cc5ca37ac26d297e5e363b85da772ee71402e8f8616b21\", \n\
+ iv: \"808032a2bdc3259e\", \n\
+ pt: \"fee0b99c91f5110cb10f010674e039c5534d13f740450f5564b05b7738f60c5080e3cf965e162374ee7b6ba7e1e7e005333c5a04ad421901fcd0f78083020dfb919e8e41173fb5d239e65a4886897e8784ef04f610202660e023dabb940ea687\", \n\
+ adata: \"98eadb3388ad57eac7683c54c1f9fde5c450c9bb93f424c36c1ebdacc1e0913c4727ed45f5d98e418c60c302d41853032429c02e5d1ec9251c45170845bde52a5f9186e3156a8c0c0b\", \n\
+ ct: \"a7b2973fd826bf9de73f0a27a0b018c30a3d420109f115319a47e4eadb79fbeef2cac2c469529198ee593ef4b01f76255f38c617ebb4e145b29cb3ec43fe09d0bfdcf12ea585b781115728f40e7fd60ddbaf65c1d1d9543bc3249c1468ee68cc\", \n\
+ tag: \"175e59dba00ab7d4991e0a840e99e6b0\"\n\
+},\n\
+{ key: \"1530677ded0721a69fed25084ae10cb42903f6d16781cec42c07608e76f0e311\", \n\
+ iv: \"a12abeb1e54200c8f0a0425c\", \n\
+ pt: \"9cb6657faf73628ad079a1640148e118baf9a48e050850b17c90b04cfcfd44919fbb9f82ea596ebf3ea4ca625d755fd6b8352eecb369061a5468360f470cd815ada51619a8f33983c069f12e7c2be2c7\", \n\
+ adata: \"d612fad488dc49d81a53d4a50e7b837178a005333185d87301010db87c01906d9add0e1bbb982b0704af67ca16f68775dc5ef6bcdff8eb9795052dbd5e8ee85accfa93ac46fc7cde38928580f718125a8abf648b6a7ab1a9eb87466b73e8774f\", \n\
+ ct: \"65b2edf76f464ea68f664abdfdd2f0a5246ff22d4b894a5c86cf32b03ac1a1f0d3372be0a5dd51ab8a6aa3745b2d8c0b5c51288d85578306bbc8feafbfc24a67839f396a98ba362982af89d09e134106\", \n\
+ tag: \"135b7b6a7a492bc52c08939a1de46f69\"\n\
+},\n\
+{ key: \"c33c643491a4372ff9e505a73d9fdc444c3aa781ba6aec92661d1825a268ca02\", \n\
+ iv: \"f7ef89f5467ae72b\", \n\
+ pt: \"cb8c2180ff9f668c270795bfb8fb099e044d2b032ab77496670abf55b18d69c5667c1f6cd42333174aad30ea1c2396eaa5152dedc0c0fd506451e9ddf5ab463abe26152d166089fcd90903eefc52cb4fa50c21acf8fb8e07211466fbbb23e30238e18bdf60ce1f1ca85614dfb78852e5315f4c36aa3a4bbc888208f4bf7ee7d44bdb25d5438f565deca23b3504a1bdeb46e637705ce387189add3fcd7f234e84644dbcd4ec73bb834806c940d5f9380f80fef6943913\", \n\
+ adata: \"d11b6fe084fc7a7c43d150f2e66dd080ce5286c79402dca821e48261e152a8d1a898eecd3fac79b3dc92edb41a4ace214009850cd3d8d74b4b76605344cd8111af79407fea7836b0d7d7b8f2fb750fc44369c6fabba5ab0b19213eec37af12f21b0f860633500a3314744389ea19dbe97ceb98ac0a69e5f97d46711d068bc7b5ab8b94252c9b28aca8c121aa3de69f120da07602e2509eef11c6d97eade2e449afc83667f56e697cd84c935e82a1a44797fda8\", \n\
+ ct: \"8e9b9d2a13ec16691315ee0ecc7d1ca4fa940d0071d2f82d2a8e23fe61d13188bd2daf2cd1ccce3bc8053895f9d59b0821e75b617b08024919324bcc72ef3fbe0b82ee1c839d0f86dc08a8242f6f13c3cf45760f318f1f71e7b1b889370c600f1a1a55f882e7a4ad52612e4b8e671b780a62ffc56106b96f77b90c4b53c9c0ccc1495bca6828bdd50b7d239746c3408a5fd7a89f43083a532a91a5d75bcab849ae68fa0733e2ef7017210785dbd6c948f89c18c7358d\", \n\
+ tag: \"b68f7b4328677b54b2269afd303856c0\"\n\
+},\n\
+{ key: \"d702fa97c1f43df655fd10246c1cb5f6dd93fae4f90ad4e777ac127b2f402118\", \n\
+ iv: \"cf3fa9c1371ec3a2\", \n\
+ pt: \"bc4865266002633c1f25dd29174254963fe8cf61b832c59b9f45e1004c45fd30de6108f9b4aa144af9a7d65e2bd95bf10882c8bebbb0860dd8fba4589c97a93e50c2535873d99efc01302fc575fde3bf889a4f5859304203d748b7168ace13b1fecd026b83d8316884c70b06d43416819d3a84f969bcad81c6c5ec323f8d65d38df48c9eebbcf66dedc93c681268e533b44b85430ba58cd9df339841af06a10af11fb9fda8e5b23104bf3ab560ae871893ca\", \n\
+ adata: \"9672be3b506e34bf0679bc1328466b71d86efa4585a820a1de9073293681b12cb966d8f27b9f86eb40a8e6835db5593d61d90953dac5d3a26166468b1d0b360482021af96202a3f090e76bd5cf5c266b1683c84d1b7cba2ad0c4e561ede4129581551ac1ecb7d28690a66bc7a542546d03e224560858486567272745ca13af7c78e9b4478790c6827827926794f714ee883964621068784843daa2e0dee2ae047cbe3dbc7fad9ece6b7a7d15e79b36e13f9f36f6e0416cfb7dd14e6f92\", \n\
+ ct: \"7dcb2dc1465d9e17880a4654ff5fae8532a950b4057a6d1fcdd38d1efd404c9281132c67c94692b73a06c07626bb36bca142950d89b4cc84a35b205a99c40a2d957d3186d52a8a069f8bf5a3fe6ea489bbb126ffb2151fdb0d7c98130a127ccaf627524eab798066d9f6b4e13e1a193fa800b3289ef81667ac7cd7f8813d1e7f72994315a0fa1faf5d9e06cf421139fc7029c8b2e77c16f1539e5726785c201af05944e5a86a6f6f27e9d009a82cc2afce87\", \n\
+ tag: \"27e9ff0e093f70e718b226e3014384dc\"\n\
+},\n\
+{ key: \"5d44b42921891878d686a326ec40407f6acc988fea96c527aac24e9a5b7fa713\", \n\
+ iv: \"9944983e01aac42d\", \n\
+ pt: \"4ec460601c49f5ce765ab54cc18cf91754ff1cca7fe89404905d3efa5b64550de961a54c02\", \n\
+ adata: \"56711e7d14d8143a87d7d44fda68b5e3b132341854e8fe7fbd14f14212f0\", \n\
+ ct: \"e9ac27d056fe6b4c19b3a1acefaba287faf455f7bcdcc726e08388d4330ae205692650599e\", \n\
+ tag: \"06c1ca46a453519d285760bbd85bcb13\"\n\
+},\n\
+{ key: \"87a5c9311c2760cba335b4faaba891fc298a0270a3314c6b559e1b1c05fec8ba\", \n\
+ iv: \"31d4eb38e4c84372\", \n\
+ pt: \"a0cc27177fcb80769a83a9ab7105b8e84b3a3e6c574de56dcb9ec528e1bc9b83bd821620a71cba101bb8e413a87266ac4215d465941e72838d6acb7e9d45d9\", \n\
+ adata: \"f9ce64e0da571b935bc10bf3b8236a1e9368262f8eba7fa638246864c0e710348e6966d3edd518b61e359c285e92501c86d6233ee071896663e428301cfe0a3f61c8a2ca491e5a4ecb5e091d3d39f3e02649dcf19b1d783d1c20fffa9ba7b70cd3ab0d2010d04bcd3e6e256659b1526d7ecbb8993214ffc298e37890ae29a9b3b28b012771062a18bdd5e4c1a54d02287a480b87cef6e9e677ab26007c671733e7b3\", \n\
+ ct: \"ebfbce194ab1b1ab595b809431d020c4dde2c409f1ea61dfe990ad30757c898ada112dd35144db1fdaea178c423c15fe111ca5712263400bb4bd25d9747b83\", \n\
+ tag: \"9854c30bfdfa7b358d91e12cfc491ec5\"\n\
+},\n\
+{ key: \"0f661e06255ef6ce7b9fb12765f10f80fa607b266467d3a46eedfcff93ffd234\", \n\
+ iv: \"8120770a97b05566\", \n\
+ pt: \"88977617c27982ca5cc35e714bf5a09d66eac91a880091330fc97fb78d0b1518acca75296423b32ff14264990864b10ff742906b223289aaaacdea831323366195e54ab21d37a01e617aa0bafff55960474d46a1f587cfe64d074aa600273baae3756887afcdb3baf21b50994de5cf6878e0e57d2f631cf372ccd2229ac08221c777063e278d0dd2b362559fb652bb4d444f2cc3f70360885cc3d58f1c9d3c5e6d2dde1216cbd41d11496dba8f0475793f2eb19b28fe93be7f4e930742e38a9b7e76e3b0979fc8\", \n\
+ adata: \"3ced02832d4e77e5cfb72004d704fb2cc9fec72768f0ffb4afad840a477d11b2a56917ad57f77939f93d660a9cf99c9baee70a92dd02ab0b25f8ed21d31739395bfd34edf384b709aa2dc717e37c13601b5c989ecdfa7bfb2dbce071c04108f8ce4988e9134ddbb7a83c27b34faa74fa890bb0\", \n\
+ ct: \"f99b154f472dc422d1e1c4ac4ace1662c551169fe0e3dde1d820ba91aec1b8bbd2c42ede530a604c1e32636f523fd4f8c81aa2420b9ee0dbc045ce89ea12041f30e23b86ba9eb105ca092084cdc7829e93257357eb8c7d3b37cdf8d6f58498e9465a873c3d6b2f1ed58089a6a64c8fb8f554e95cdda74f6a0c6e3f0f22b05034adbe6b9a9646fb27e2fc6620922be3debc1ed00ed394a21212a6263b8dd2663ce52a5479505651e56382e135a2e8f3a1517ed0360554c9c71e1a68af39a5ff2511c55ea00b9b99\", \n\
+ tag: \"f0eed76b0a983bd9223f529e2afeb2a2\"\n\
+},\n\
+{ key: \"89a574a4dbb2efd3ebb2df95150acb8f8a26c50015e736be278b4c854c24f659\", \n\
+ iv: \"88dcbae38b595c09\", \n\
+ pt: \"9ebf724bf004f07ee9750dbf30b350800e53317b493daed624744436912ff77c0047d2c004b14acd049ec320277fa71e889a5b5be7996292596419c3fe6d2905e1f738becd03c79df73dc9c8d1b686cda59946bea7f777c57db70e5bc2436a168e37234582769154915a226df8d20e13aacc27431db7cb96c02716ad\", \n\
+ adata: \"44c3a33c782c084c1644964ecf2fe1307f628540e2547c08c7a96c3594fbabbb2c2a502dd95273784761f134c510a811cac2d98a1a7af9e7f346a4c0e09c504e838a6ad4c5496146f1020714df66f0a366da49c3533163a1953fb543852d04de17ae4263baf74d2a8891fd4a1aa1aa5dad7c37849cd3f4cc1110f3df0a883eb199904df1dd6c7330869bbcbd4387b18b86f690b816ab0c0280979523e74d749a790986cc286a003546e12327156cc41c4e739661a772a9e3e102c6a29ae8ee4ba9\", \n\
+ ct: \"70138a642500d8584c1c2ca12fe7c31ad266a83c5dd3e3cb8e7739ab92176cd4abc5fa5092bafdca2a6c0959eb485e576d3118d694b6998e66cc5067ef9b16f96502efd12089f505712ac8148f7eefdd0ff764250696783f4e6ff3ced9e9219416d83f0c5b393ba01dcd2e4421a61de83048504ea3bbbe442aae763d\", \n\
+ tag: \"6bf6e742d1e496e7da695e1f1611cc1e\"\n\
+},\n\
+{ key: \"75c9384a08991e73e3eb1da5cc0fc8dc1fa88817026fc62d5560ab43ab3b91fc\", \n\
+ iv: \"2700f7186e62a3257fc40d1b\", \n\
+ pt: \"528375469c5d83d5406e65a2f52070b9380aedfb268da86089d4d94aedaf46c2f111a83247c361219785af43bf0dc8190536d6f8f462fa7b220a2e8a40e64037b0b0b278a0bce3d3fe4b8d9a2d51173141cdccb339b7544698e7c9b9888433aac348bf34001f2618646ef454864a4e4275ccbedfb37b0bb915d4078fc648ff988057af954aa112494d5f5fcb15b29f0a9754634a92817f4c5be856220b6f9e4f304a3f071d281a5b478717b22808380379f446e644f85bc796f50eef4be60d8efb6ef2e8b765\", \n\
+ adata: \"a5361b5e41cabe7e40f1163c6e351870542ce9da56\", \n\
+ ct: \"ea2eec8b66403dbb25634e61e63b35f14a75233a4d26566f2d14db70cfe7a9382bae8dbd97b972a528c84e492f21243d3df4ff3053e8feb1521d76ea0ed7aabb466ee8aa0ce465c25f53e5421510f5ffbc2aeaebe50136fe86e8618f513ea55744f609b0e64571e3da0be0948106cb24dea0ddddc30b05ecd5eeaa3770b19ff2e6c69cfc59e81c3d1a0b174d84cf41f2fd1d96c9ca7be4abb015eb02f5ab26d46731f261986aaa2b38e7d19eb93fbddc05ff02df85c1bfc02262a94be5b0cad94f49a1c28916\", \n\
+ tag: \"9043a0f14b97cef352229357f521d0a5\"\n\
+},\n\
+{ key: \"dfa8324028bb428a234b764daf7f2e4f70d744667e65df39fe1063e60ccbc906\", \n\
+ iv: \"e8d7cc9975746dce\", \n\
+ pt: \"1776c5cfc8f4021daad4b5113c846cff7acf21a5daa6b1053d7dc4dfa16d6245a510b2656da8e6da7b40274a58784997b9076c7aaf5d7f54164a52c7158513837296d56f1b7246708bbb8cae95479cb95abd0559de0a52c4e8c7915326f0be47f60d73a4a58bab47ae4f99c7ba1ccee4ed161d46c4a59fbbd8a5563bbda64f5be457a748af82a4da6cc7f61815a557ae9674135f4fa0845ac6177032710377f59413131966c34acc57cf990cd7b9ecc21c6495bdf076bed4169b7349a115740492\", \n\
+ adata: \"f5869a117a8120e0a53bb89d219f68c75bf845476bae884bb6534e41b4765864d0b1b61ee8b68065d64274da7b7919da6cfdbf0e8697086502c919d16950a9ebd1ce4455797104cbae95ac55f3ad8c4021ae0e539bc1a2162485f1cf14d85c00da062a6597f59baaedf1890df646690fa56026f8880b3d736545118d0d2a28c506472d66ba31\", \n\
+ ct: \"3b2258897a458c8454c62a44b3e18d57b40749be00a38ab49079e43cc00c6f4e4bb9d7cbaa91a9cf9101425e690db6b95bf8eabf5b84eb6dc4c39b89af82843415ad9caaa36a9fa10bfb1e9e33c28afe34bcc331769109a335e36905cb4c46047b41729fa52ab72ea532741ecd6f68aa4f47f15b08d5de8c001f0ecc7e71b4cc7832311dca044eb3de2058af6381a083b3085ecaa12508a31610eda96cf936df69ec075847f6be9c38647ab73f7a9e766583d90d5112754ff5c981e5e6ec231545\", \n\
+ tag: \"12a22a36c90be6c3ff72ef2db31d6bb0\"\n\
+},\n\
+{ key: \"391a23e3d9e35549724f9ebd9271a8b7b4be35ecedd8d41de26b10e1db3805f2\", \n\
+ iv: \"40d3409eb3bf7568\", \n\
+ pt: \"84884faf6bf00308a65e6b2b939ccdefda3e4dd54bba6ae559edd4cc5264eba26b830ce2566476fa01d7cbb410c0c49a2ec69334e6e2d3a1b7af7a0da4aae89fbb7b07120191922f0f4c551ae87d335d6a7c029503d38dda2c7e3c18aa707f5e15e96ecb3e04050a08a2ab855b28f93779272f926528657d34abe5a5a2c83b993fa008c2ca2239fa5cb999a65d746f351965f3c257a7d07be11b30bb5df79e4af778733905d1f1ef3221280aded2ccbf602d7cf3174f6389\", \n\
+ adata: \"106447df19ec122a8439a4e4f2ea4cb76411e1e05e05004d93b5fc21e6ce6392acf33dcaf85afe0b7ba9fdb1c3cb3a8e4de3984954b8f1fb63dd6ef62e48c87aa3bb5b39984c7b3a6656d29da59dbc27a1c7dc645ea09317e3ab130b5e81f59efe7ff1de13620bd2151ba182ba51f11ecb47ca65806b6c82a915\", \n\
+ ct: \"2b9858eb527aaef4699f2b5746b72720a6294fd85647826e94cdb1912d2b3702b9b2ff19a443505d72d73c6360e72507bf9a9f50d6814041d0939d30941db25988f13ba8f8286bf6fe3501514f5da290d5c19bdcc263c1328946ecd9f09cea43bf78fff4672702ecb908aeebc852d45f4b83c211c1d32476df74b3e7be5a33be402d5b18ef6198948b4f1286f95aa30a2ac75477c1c16b0b6f2e33489f9b60c6a1c8fb3f7a04c615509c25906c00fa2248941888613e1ce8\", \n\
+ tag: \"9debe7261fc119777c3d7ef57733ef8a\"\n\
+},\n\
+{ key: \"73c9a8900cdb961e0a4dc7d3d125e612b5ed6beab578f2703b583e9e2ad4da60\", \n\
+ iv: \"11e63bf4850fc8ba8ec1dec4\", \n\
+ pt: \"6717f25c777a045b17332b018760196b53a4769c768ba056014dbcbb677ccd4d7dabe4358758e1813ef826a7f8e6ed08de8834114f6a0576c69860eaef72e525e586f2f7508762b69b158771fb7aa705e0b1f72a0783\", \n\
+ adata: \"c54ad65e69ba137be1bcfa3c1983bbea458eb0e15fe2c62f6615c08c85e84041cfb67b3f8ca3a56cd0e77a39a5bfa13723cb6e232a59f4\", \n\
+ ct: \"57986815f9fc57a94308ced92493165e7fedd6eb0223d30947bcf566f63198c895a44ef4676f978144c25248a6f2b1bc218bf853bf8479fbf40405e2bb055c651c18e694c80f60fb41fe01a7f56db64fff4a612e47fa\", \n\
+ tag: \"9403eb4f61f1ed5b7d19a92e948e1ee6\"\n\
+},\n\
+{ key: \"7f1a4bc1213b73876b1d898fa887a009acf5c4bbb472f9de6410a8695ca7b9dd\", \n\
+ iv: \"3c25f188895bfe1f35cce9f7\", \n\
+ pt: \"a416af0045f30ef0f9e99c7465e6242ef56d73386fbab60f2dc286658f1ab7bd0ea5253563c50c94cf5ebd12688b7eb96637e6bc6261bf44dd69d511e2295e71cda7f739b6fa3861f1d02c65df959a4d4b5cb1d6c9e26bf592f8961d0696cf6b5df89dfe840b21d32a800234\", \n\
+ adata: \"92bb1848b498446c5c1e7b3b530d0272f0d2d9b6214cdd304ddeeca7fc7559f639df79a134a6cece8bc670daf73a1d7b3595f790309f8c3e3e6ca714d77ee2de18b67c99e560a5a56e6817fd3e\", \n\
+ ct: \"c0fbefc4c1248b42c0aa6c580ab7a562200b651254ccc88b57f8df5c617ace64948df058ac5212f9f3e2ec0c18e48b77b03c6717cf4d158d20ad0bc2d9295e00160fa39f0964aa329dab2e63dd59126f6bed38d7eea814fc6a87133b4b687596fe7a6927ba095953693fdefb\", \n\
+ tag: \"fd3be7ddcf13380b2740caaaedefc7ee\"\n\
+},\n\
+{ key: \"3903636d688c37881c1119d7b7c8c80ce43b4f2faab50bb091bb0549212ba934\", \n\
+ iv: \"fc5190e6c6853105f092c50b\", \n\
+ pt: \"87888b026f0ea5ed8605aadf5cee0a6f70f38a89ace37e36dddd4498803120503ec7a4369e4d579ac78203edf2ea283eef1841b6be4582872a2663b5e888f07542c8ec1f01609ac0f4be67b75834bb479693e15ef986278f52d0a39a86599671c19ceac126b8f513f7e74da94177139b8fffb8b66717d212019ac72202c419a79f53\", \n\
+ adata: \"b407070c13c534194e1004c8cf82e2a4bfe7e1c9768e1cb888deb0d8c84c44a0cdfd36781b326d7bcdf36e06d78fd3ef2f8d01d459b704f838f757b0494aef2ed0bf7f854be64c2d196bac7e33dba63f5d1c35c169c3bdf04892bc33ebf64fae8c609d478932e22f487a4436e8a02d35e1116449e4ff47aa7c271190238ab9edf181f7d27181bea18be2fe1fb5cc274c9f95268a98829aa932e4f8e039cb17cd05ffafff985b70f7104eae3dd9\", \n\
+ ct: \"75b970d2fc955aefdb953edccb35009d193f0f7da7bcd3b3b3219e92124647f5b559dbd4f0efc9b1551f7f121095c701510663cdf7653f3b57c100b20698c39f01280f8d9024751d4e031de1b7ee72e2581dc57cca18f55fd06c1ba1690e52f71c360b65208030752f89636b84053b573cfc0ffc0675141e1c63ee323be14f068278\", \n\
+ tag: \"20d618d9326233909b8b4a44c5d58318\"\n\
+},\n\
+{ key: \"c967e8532a21c1f52d508e0465c5182475d7fa8439a28db22a26536275778647\", \n\
+ iv: \"2f8d622708d60817\", \n\
+ pt: \"500e2735caadf493cee101423a137db5b9042ee17f66144dfe3e2d7be8e4d18fb16671b7240b0ac21bf750364327bd514ec24730a63ac9e1dfa765d6f7ca84d1f82b519aef350232a9a37dde2c8a0635ff652761155d2af70b6efc5dac5759bf9cec5f488f692de189a1c7c4cec3e0ad33049cd929b97186567bdcd263184b221269768538d20dde0661daecc093b47feb826c61ab6c02bc1bfb145a214ec03b2e0a3db09883e128dce2c47617b9d85d\", \n\
+ adata: \"adc8878d8507fe18cb2ed208af6e36c140d79e45013fef984427135412c37920d1e438b8a293f79328c18f9c522243165f5c71bf885b8f5f86fe2457ca2e23c0f2f52ec23904b5a97292b179b8c1c2ee12a690273a\", \n\
+ ct: \"d490276d78829e1f85ded73f01ef64122b83ab3b55f95298256dcc5de5dbe33a46ef6a3733949e9d003d0c35716bdb3191a0dd9dea1ebaf5050f9f49dfcf690672cbce17f7f08c2e898ccf6f76a331812fdf9f27b801b5e0e974dd142702b38d463a837a53dbb6af1a0b8e3581fcf278475ba37da96b615e3a7b1faf4ad88289582008aaabb8395e955f6317fdc055f7e9ff3f343548fb2a44ac99940e5c52d97eb502aa594b71bc40dbc8fd9c1e4736\", \n\
+ tag: \"d26b84effa3470ca7db46fa0634ee89a\"\n\
+},\n\
+{ key: \"a5e83b731dbc107bc3e079e03e3162aedfa6ad6ef9d3210311623b0febd7bf6c\", \n\
+ iv: \"5cff4c14a2bdd5c7\", \n\
+ pt: \"19e671cbf8c830554b6af1f1543ded8971363dc45951ec701d077166c55b68ab6c21ce16804d7ee8cba3de1ab603ff76b37ab0fa8e309b8c57d7955c2bd65f5b3f8669c65adfe0d9ceaa838ae292a992b61cf0a751508733fb80f0d5104667d8e10bcc6d9dc651d6bc097c58216bede0e3001b277f4fddaf61ded5b7ae9997a5e11088c435253e23a8013aafe9b96e3b778604a3afcca29129be61144c043a092ad61a15dcfa7ad0fa8a1b5d22f44baeb6405bf9d34a316306d99f4eeba9360eac3e3dc07de3\", \n\
+ adata: \"5030afc43e5ade6b33f2f373769e571dbdf0460cd92404a1fca4c4d24129c213447fd20a72905706273d4024473ba3a0027d4cdd6d5c67744858106d58f271b97c9552f2be0a4a99c4c6015ea4ec6dfbe56ab041630977716402110310481688b245fefa5d8f410912e2ca1a34c958cf8d636f22c86cd36d2bac5486eddea28a619c10d6403b71fdf6ec7858a7913beb93ae9902b7a967dd91736f9541a3c3c123f12e3756481c11b7961b62f2dc\", \n\
+ ct: \"2e94fce14d00ec40e22b7c6ca507d53b32a60598c1300c7025602755727f8ebbea3fc9351d2669d65086a057070fbc23d521bc57c3bdcef8574897fba76cd012a72657d9bd35b75a9930e5b1b185134810df3d6f1da8f42ef30d24d498476daaef0ab75c5e0222d0e36c4352f8074826635e24cef02bfe82753d64a15fc3041a1ff37725a33814d5570bc82676771e9d455fad7a6297a1567c7adf2d19cb429636c1dacd0da8a5ff6668563a7f02cf540243004e96e0b5506c2ab3b1aa1358e6a21ce131d380\", \n\
+ tag: \"78d30e222d552d9f292def49e2cc46be\"\n\
+},\n\
+{ key: \"e6ee0bc9121ea55e422b202cb386d2ff85ca60c5cfdc7081669ecfeac0213320\", \n\
+ iv: \"16f7754c9933edeac3d3ac27\", \n\
+ pt: \"5990aae0ebe94e35d22b83a98f9c49bf862f1467246e0c767402928d8d5970621dde56e3e5e4e8e1e3208cd82d89eba250bf0a4317d5dbd8c1db65edb37f6bc661d483667827964b3b65b932f9f4475b75999dafcbf3be0a1abef6fb91c4ba63149b65859dd211d1f353713db7d1d0c4df18f2f0\", \n\
+ adata: \"0710d143d25e10bcfce92a11f6e45912b4fe38ca555bc7518fe7fc3ba1f98efa502cbdab05ca14936b3ff312db2ab68bc706ec67de5af5db877cc4fd22ab42ac40fbad1a717c3a2b28ecbc9a280a78fb1745db38c727b538fbe93d88c031361e8a37ce51c3ecff2cee0b9de9fa53021cc745\", \n\
+ ct: \"c04b125d71ef4a708f088c144b6523f200542ae033344d85c796aa25b81e983a090fbfd5f7ac0d53a591964ff3b1e0ee416ee6a7589bba9162b2944f93f453bf590d1cb477f02da0a851082f2fc03c7cfb9c9578ebd3cfeca0f71bedc65ebae663965fccfdbba520a5028c78174ccb848348674e\", \n\
+ tag: \"fbf418975ddddbde157feeff0ac6824c\"\n\
+},\n\
+{ key: \"b620abba4fd99360c423a3f4f5c18659ed953e4bcfdb2ed54ba7fe766eaf09d3\", \n\
+ iv: \"e46f709cbc118fa1\", \n\
+ pt: \"baa7cf815062b352d6c4d8a22818ec70bc4be96d58e348c370a09cdbb5cf3833a0e1ff9ca36c6a20eb5d86f1c4e92b43b5e34eb456ca2df02bc25b1808ee94ce9d34f5c67693698f4812e7b2006fae3cbdf327441c3770a4bb3cfbbe92beee4403cd3cf3399fb88d43a3437a588921330ff48259733a0bbf68602496ec4a35ce4e66ca62bc1882305a5638e0acb9ebfa83ce63697dac519b8ccd217696cc2304d513540f934f5868c2963f9075\", \n\
+ adata: \"f6d9716f5a6cb0278a4054933b2e24d096a5155513c42c\", \n\
+ ct: \"a1efd39aae54d4cd8bb18d17e9886c9aa3cddff7549abca0f3900e215462c90711a61d16215676f2ed0fa121c100844c5c83684c20a17ac584fe8675a8c5b361df6732d064acd8d9ae33893ac56394baf6ee7e3c8307ca0d70aeaf907a0ab3bc563453e90557412ef234d439910870ca6a2d9d122db6a1bb7c82ee7ca10fdd23402bf3ac8900dd6ba2c1df58ba799bd5dadd4a6ef70777c42bf12e485781892afd9dda2996bf1146adb178e172\", \n\
+ tag: \"e3b2259f54936f27efaf3cf012f4da81\"\n\
+},\n\
+{ key: \"ac97b01d2ca108addb339e113eddf6ea9ceb9f44b3e387e0e65ee447bf96bb85\", \n\
+ iv: \"f8c07c3db8cfcb91\", \n\
+ pt: \"9ad7591845e2759817cfe8d20310813940e0b862e6693a9950d35dded84d5a082f3aa1db48a92e95eb5fdd327a\", \n\
+ adata: \"201f7b1654e5586bd322710ee5da792b30910bf6687ddd\", \n\
+ ct: \"8d3ae3e8f052394c1f53556882761262d7ea8ff4216c42bbb11d7f49c4ebf6f9f53fdf0bad34302cbdc808b31a\", \n\
+ tag: \"3ef41de425844475ea398bba65064bbf\"\n\
+},\n\
+{ key: \"264403f978bb764121d16481621282df69098b0708e3fff21de92e5bd6d582c6\", \n\
+ iv: \"351da663dacbae83\", \n\
+ pt: \"d453b464a4b1a7673b4ce753263ec382f66a6cbc9a84e233e0cd3a1d3a967e03cb8ccb12ea26de4942bd663cd45c343bd71471ccfebecba9d3a24a822020bcda11eb5c7dd2e4f7a4e94d7f2d82e0004169561075e3ced8038606caec55d107594f5fa8106423b02cfcb11141724c\", \n\
+ adata: \"f7f61d07de6f9325b527b07ff0e3e80a25e6bc3b9d88e34d275171ece38936\", \n\
+ ct: \"1f05d557023d57182d3e8bc95eaa49faaaa9c4a2d9369362ae00235b7e2d7c509a6f8be80eb793f032ee9c0dbb2a9f404e0b0fda1629d73e7f4ee00abacf5eacc16e6bef8a8c42712614c441c64102792e4ff8ad26b4744deff783e391db67cb5be396ecfbcd0c39ee291433c3ef\", \n\
+ tag: \"0587b5dea20f4e35ebc4552801b3fe03\"\n\
+},\n\
+{ key: \"0cb1e66175dccce9ffad2a4ec4243a953040516262480ef71d0baacd81cf0f2b\", \n\
+ iv: \"9d83744c0f012a88\", \n\
+ pt: \"f2446e7d59989503aa6e0b64f9baf9d0647c6ed802ed2293daa7e0e98b3850d07ad07455dd036f5b5c218e802979fb8997a177ff514d13\", \n\
+ adata: \"af9f6ad9a09e54bf1e11f54bea30061c3f8a04a90b118b9a7f393585043f5fcada7326193edcaca56fa152819fa95a25f1862fb8debcce5b788cabb442f4df7cc1a9097588a50f5ee75d89492e71721159450ec147894915e918c5e67843063bf4cdc012a062924d3524c348b05726d92eda5e957e28bc0676a2d908db02915c607ffd1ce77ac0b2e9032d795bd8f3af0d3ac9a467a20f53d7da6b6efdbdb827dfc4\", \n\
+ ct: \"e4134b521bc9e83818aae17d4a09b6fbf39742a3858ebc7904406dfa614782d153157b3698e38609ec2714af3b243c4b168e3227066f30\", \n\
+ tag: \"5d32ad0fae422a6617c6eac77ca74b76\"\n\
+},\n\
+{ key: \"90badf377caf040ce22ee6d5c0d7833b2f2e4d9703df31f462ade296d86ff5a9\", \n\
+ iv: \"69aa74268bb94e1ea522698f\", \n\
+ pt: \"f44a3fa7b916488889552a1c98d9bf0abcefb24e87019303aa0ff92e713d73d5222063b717ef1035927b2e0aca99e964606bee2dbe46782306618edd0f5baa54b9eb0e60ddfe1ecf8f15052ffcd2b741b3f070c59256b321d4232d7f00f33e\", \n\
+ adata: \"6efb98e4f5d91d3ae796028479a7e0859956f4f6faa38b7d72171bc6d57429d137b6b5cac11798810b02384e6ab5ab3094564f27f00c839b8fdd713120f140fa213c2529f5da5313abfe056d3e70754621233c6d209a02cc9b0524db119663900d227c86f5dd9cc95b3734ff7b45b2e025bf628639736a06f7e336bd212dc696f97d6d05c5\", \n\
+ ct: \"c1ca6572b89bf5041b2da730f0cd58a7137e64b8fd46e185a446f94931b9884b92dd4da5df7605047d161a5e72b576875560841e9439538ed79f7f88be87dd1a4340f180b0d29008be8876e31322f880e9f02b0234cf3702f35ca35407d6ca\", \n\
+ tag: \"3a15f96f61eb6982067de3d7798133ce\"\n\
+},\n\
+{ key: \"3761934bcd715ec443048eaee66b6dff3ddbb26f59131f0dcd21ee88da2783d4\", \n\
+ iv: \"70493aa687fe14721d5bae2e\", \n\
+ pt: \"1f3295b8a8d7574b0d46b475735f131e395b75a90e1caaf391bd5f8029fb7c89bb8235b5f8fd11152b054e665d9855db98baa08b601ccb24eb48f24a23c1a5f25b9f66ee2991419733c9246ef9d1ba1bd0118a5cea466d179f6c844aa509694a6abd139c686a6ab69a00c1056ff9f3ce6da29ece40436f54aa016f3d799d77d573dc922f063b4ed6df81af8ddeea774ff5d9b5ef96d2c0bf9b72a0ad6eecc34d77038877636379e5e46d0568201ce391610a75a698467dfe329c1cd5\", \n\
+ adata: \"45484b11edb18bf92b465c9d3171f912e70fed32dc75f8834573dd93048ee554911088570a86b30b7d4be8377a2efee86372f6333f8176a370e9e51c77a0fcd60f7bd2ff6b01bd4055da74119db4db4a8564ba19ed17c096435eb74764f028526b\", \n\
+ ct: \"74033991fcceb3bf431bf3c6cadd5b5a42d67e25bfa8423866bf8df852f924b2e1e1588e892872fc8ec9b40a4ac898834d8f69d1b69b5abba29b883f2933bea9cf7eb3adc557366ec4561b78053d7e53fbff358a2012f96a1a88d9e02f46bf3b45576deab6ea7836edf4f71bb6c817bef16b8051347d7ac69da3c0a44096dae0543ea1b3ca32604c65d1d1313d71884ee5cc7f1e79f5ba2e4568f5163773a8d122f9fbc047541ef7f1bd29b71f86c77b82082b4aad655adfe4008ff1\", \n\
+ tag: \"2a5f1b5636500262dad0d3206e7bdd15\"\n\
+},\n\
+{ key: \"f748439b2b2ddd78fd98b54b27e477695cb3205e5643d9278f44e5e86cee78f2\", \n\
+ iv: \"d429e0f4aacd68258d19cc64\", \n\
+ pt: \"11c682bbc085c18654bf66c6687a0c7bcbc9d433e74aae4b9159734853e8a861d43a5eb71927c1def9cde3c67379edd54f8b6381eb482cc520b833abf143da2220cc35fde3ed\", \n\
+ adata: \"2bfcdeca0041b6f8e530496672fadae11e3298af513dc866b9d13b5b75f7be9f64d15524c2c4f1232c908c5948a0aa67d61847aaffa0e7c97b943146cd18fbff9d80e56c433d32f9fa0bdb67a10b6954f9cb51cf946c425e4103e72d5831903a5350a616aff51beff0125f7f997e504eb93e279fb5518535\", \n\
+ ct: \"ecf4f2d14a7bda2a9bf7ba91ae44ea42628c19bbd2e3789cc5f949e31a0fb8c7c3b24e30d3d8306f1b0e39ef9680cd27bbc3d21821a5336ed48324b114356e8671f73ce4d177\", \n\
+ tag: \"f94b647c21a9bc49ab184d8bbe3ed452\"\n\
+},\n\
+{ key: \"8719e4dcd5f065f96da27e34090880fcf6db18ab2ba8e76d0052d578168553f8\", \n\
+ iv: \"335a662d7116c242\", \n\
+ pt: \"d56512bd58ed935a1ba5a926f2dfd9898fbefa001f856092541b9f9b7aec0dd5460355c0d055aa18c2037de1058ac648b170d245d0cd33d74ac671cc990994f83fa16ac3e23a186dc8bf4b7a9eb057527f3d07137eb6e5335d0357ca78f8833b023c45cb16dd382aa6aea4f34db96c45e870c37610aba0048ec96da3c3daff657d2a204b2c0fe67c856517\", \n\
+ adata: \"1912ea2a042e31f9b9090ca89f438158e205ef49b90316ac38132d89c3dbb6ff3d00235fe44a13a2ac1c10a6d873500598b477aab1f11dd9316aa57632782c4d8442e55100e0339ed52e84\", \n\
+ ct: \"a92107403c1ebdba78d9a1bd07463fbc0fc852182334c98699ee842959d2fe15917f92d88d1f660dc23e9fa7443cbb7b99946ef5742dd0e725d9afbf13d6baace2acb288f1f6c3a2ef83c6be86fb8f80a7301658d07d9fc82814d6839968db5edb79164c7fcb486b56e1febc94131416639ec463cad235039196290aed6b1629fc78320cfc14779abc5506\", \n\
+ tag: \"17e220e0fe9677d9f2da2ca090cdff45\"\n\
+},\n\
+{ key: \"c9a494ed8010a48f5ff401d5903755e7195b5bb8707db066864b44d88a4a6f02\", \n\
+ iv: \"fca2c409d8fb9864\", \n\
+ pt: \"dc080db239864ae9be653519cc48fbe78fcfd5cdddf40a56bd1cf63bc02661f5b355f260ef6d0984b2a1b531e3f549d46c448b2c331ca915705e13cf3e8d964e6e60b54dcda785\", \n\
+ adata: \"88af17caec1a41d1babefc7eeef36f5aa65695cfd4614fda9d598565fee728cafb6a1053c0fcf04744551d4cb4820d2e4e11e4cec6d54e7b9b16b3c8ec3f243b1f2de57fc4ec187a84bd9f0cb06d016dbd8b0a46ea0a662d82dd070447288e1721a995d4a7b9a414457ac7ac19b66590d345d4ac4068a8882a37519504f48cf35808d769859be5922d397068ed4e31692eea14bdf3f1834ba813b699201b9e6d4e73\", \n\
+ ct: \"42179e41342f498b1487f4cfed44a1d756b33796842084cb34711b88a34daf39ba63dfad57579fb76f6ff67c2aa408286b1aef236dcae8fa768e8d55917d8cf3baa353001bae52\", \n\
+ tag: \"b3189346687a5c20713f60ec27035a2a\"\n\
+},\n\
+{ key: \"515592d22afef07833df72861dd7fb41998099bde410545a7c3f606212f46899\", \n\
+ iv: \"3b65fe1cc18e9affaebeb7e1\", \n\
+ pt: \"871eb18d371f1f7b6090a373ff56c505345786b980d8c2de830bccad8f58d2efd08cdcab916146f7cb21e42d56627d985485ae02bb45433982080a6d1e41c343dc16782c0637e4a78797e5ae4131b9bbd7f0d6698bbc\", \n\
+ adata: \"969d762bc6c882db7b243df42d400e66d3b445db0f99e0c9088f5c60f3db545b729b80e8d20957be4b5ce9\", \n\
+ ct: \"aaabe09f1df895a147eaa01f5d4b0c541fecb53ffe8f52b16d83323b24b97f569bc6f8f3007ad59376a21bd441033c84f17dc67b33ba77aad1422db67f66025cf5e78011dcf85a00e5735c8b6cbb0a030baff511906f\", \n\
+ tag: \"914a08b6cd03bf05d87eeb46e6b877c6\"\n\
+},\n\
+{ key: \"7d0cd489ff0b6c40a92e17e95695da20b8e11db8fc303eb08b20f01b022cab6e\", \n\
+ iv: \"d5cc003e96ee991d\", \n\
+ pt: \"67db46c99c7149262c6b145d7a5881cac60205fc24e939bcdec78a946694cffc787e16e837f038658b7c262796b9e351dba5ae063f086bf02e63f6d2ab3115b3c4283676a6ec02aa8e3c23e5146d4a8c9cb3de2286f46f4a957f42b39d144e2b4d16830625badb6dc643292333aaea8ee414265e67ab1729248936767fa6dcca69fde25160b21b57eb86adbe1ff5c42c66a8\", \n\
+ adata: \"ba98926a33669f63a9e2e6245a242aa3db16d6e2ba971de382dba65749132f9fedf8d59bd091eaa5fb39b3472f69c1ce44ccac4af4eab5eb0aca564758db53f3c32ee748948407e712caecf84e5bbea941c92c3183f7db5341f19c7d7f1cc04c2334192aab595f86d98f55e97628b40267ec5a6d27a5ea3ab2abef85bfbb9e0b1a43d01e2d27f4d61edde2eb52bac228e7983e1e7f48bf1a15fed8ad6d\", \n\
+ ct: \"50097a9f18c68e55bcb5e054fd1dec12a33f07f1e1abd27aed91139e1884a07c00631ead2b17c53d485b41bed9a31ec0f95b994a3f61c291f02360fd62ee9b1f7c956537ab2e2cb2d1df500fc978c800e030dac9724985ee03dfb858294c7d15322cdbd46e7b81d621e2590695a6a8feb2e5c93a5422a049da39dda6d9f343cdf674bdf0dcea5de8746b3aa7a80423946d95\", \n\
+ tag: \"4187127430ec989b4b57106ec8d4a10a\"\n\
+},\n\
+{ key: \"77676a917b7b5dbfa4410d02cc701d9fc64f48e2f733c3606b848ef9fdd6e021\", \n\
+ iv: \"42ad2e16993a44b4\", \n\
+ pt: \"4433142612c1ad147613990314589fb4dfff0b676391e54a02c6f3ceaf73138b2ba710b974691cec87cebd2d69dfa1e24bc33cf6d874fb9d731dc88c3584010b12c117cad7617bf2fbca7e2b1108776457c3128549266f7043f012104ba549833b60e53a6b73d5e7cec6036af5b40908e6b1f62537561f072bbab7d3becf53\", \n\
+ adata: \"1b40b91e9317c0ad3246493c9023ceb1aab22334439638db5aebaf0fe20996e333dd76280b1b63938f07e5cc5792d4e035f882fbcf163e874f4ecf897e44124cb8b07def6b6de8b3851577bf759ff99ce0c7f237a6ab047b485e233720d11d8c3fe663a643e6a15b6ec23c2fdbef96978752799466f699d0e590475ffacee86c49f3760eed5c2137c22dfeb0eaa575ba138a4ffee1743eb48aa7c8a08bbeff79d67818f08928e4c3dc9459e64858fb5cbfdf9077b5\", \n\
+ ct: \"fe1905998e156dca66fcac64119d9d2bd7d8eeed453060281e2a633d53ddc220940f1a8e0896b3b182a1d1fe7c6d5a23fa1f2b3fe4420f73db90ec12f6ca662dc5b613947ad493a23b88cbfaaa4d753ce38c78c2ce18792602145d96c5cceaa79b0caa93947bc1aa1b49d8e3b8c997cbde1833ea627808fa481e632475502f\", \n\
+ tag: \"7f8d2c5264758933b1bffd2a1da2a35e\"\n\
+},\n\
+{ key: \"cc4d59edb33d41aecd4835bfef518a84af692e3be88d610155af053b9709b021\", \n\
+ iv: \"23a2d98e2273415b35ecbc85\", \n\
+ pt: \"9cf06a338f60067ee21405f5aa82f27a82882d11ec9e7c97c79bec2f0745e86faca52e9eb0a2d1659a83afe18cf8bbaac3df\", \n\
+ adata: \"3d8bd64a3cd67ca979d8bc4da8c282ff7a883f5377013fe7bac75b3649720709917c09806f66f2290c9c9259ba498bd93580f88ad1ffc5e801d8ec7c921878e3dd448997da51f46092dd9f29313e8aac0f024ea4b53ff11f09a23bcaf6ca476e9d11ca2cf3aebbdadea7ed0d40f439b8180bfece24d24f39121c18063245cf925e07d555ed81218da8bee79874fb76b17ea2063ad09f7c1eada69ef9f7a0f893110569e8fe3ce2e417b7a5ea53e1050f0e92ba\", \n\
+ ct: \"bbcfbe463793c81de57dfe6d972b1a4e46cbab60f85344ddd9f9c39c342200cba01575502f51193961d4facbf7815982a442\", \n\
+ tag: \"18fb081cd0f4426166abc2c88c284816\"\n\
+},\n\
+{ key: \"684464eec47b0269867093eccd74e15fe222cdd7fdf3d0bc5b7ef67431c72842\", \n\
+ iv: \"ac720f94b412b6fb\", \n\
+ pt: \"a2473af9c2c04b157237100d8511a6d5825d9c3e872b96793460c7ccb447d10a955709601e364b991e42b2466e98b1b080e2a17f4e7cf63d44a542fe879c6b89d2057d4cf5502f7ebd0af9d7a4faa5f5f50df823\", \n\
+ adata: \"af00087a099a76c8ab5a02ecb795825d021bcccbf2\", \n\
+ ct: \"9a38e8a47428474af0ba27a5c417698adc4ae6d5eca6ae94b61a50294cd2bcb165d0c6d40ca5b36eb964f253b05ffbc7b48a5381d5a5c0d2d2316916660b39cf84f02e4807c7c198c15ec26eeed97a8f46271c64\", \n\
+ tag: \"703794a0f2ca250dafba659d88fbc75f\"\n\
+},\n\
+{ key: \"cb44006c3c4a386c6d674a479ce8eb2f759197ad0b9c73f0f6177238ea8292a3\", \n\
+ iv: \"a5535f4fd918c365\", \n\
+ pt: \"728807d75dd3cea7f66945d91c0997cfe0ce7b39630baea9e11262b51c8972d16f525f7f0715cf05f030a2cc2d49c4fb7c8050713e8230e842b5b8f2a97fbb834db2e4931111dda483daf0ef74715844a295ffa485d8fde7774b878114b7529ee7f8912ca01c03bf22c1c31f7bfe00adbf2e3d0c0985a55659f126a7\", \n\
+ adata: \"ef9b2fac05cd26317cbd9859575bc6cbd2af5478cc4c3e0d1930a87d01f1bfd05d264121e067dc1438efa2606804cbe9da53e1500dae6d0f585c9ad2bae681db2d28a3f29fe4b2db94fb15cd9e7e1357660fe34e7163080595368f4ac984cffb8e7faa9e94a40482d6cf88a535edfb0ae3\", \n\
+ ct: \"84b8cecc902c0cedda03eb7e33e7a8c148184ba12ce6cb1b71b50659d37eb360d1a236ee0203d487bc00895ad9ff60eb04df339b7790b3a2afc8529c6e8c2a3af1cf8703fa18c92b4b0b0288e684712527c6a36698ad838cf6f79c62e75960b5c52b0dc482022bd16d7bfd2e11ed80e5aba208be2bab236c704882a2\", \n\
+ tag: \"f0a5f1d601fcb310c93c2e2c6374fabc\"\n\
+},\n\
+{ key: \"febee603374be3ee15197a58b166aef3ac644c93d50ec05e80f4fe9f92164c40\", \n\
+ iv: \"ab442bfe2cae276263c7c99b\", \n\
+ pt: \"7d7abb075c14ee656385d4554ff3bab8e16b78c7b046fa1c241fafc3311d3d6c050754277fe82552c27719fd77b283ae06e461b17f541dbde4ae64a5172d8cb7a022ad9bf8b9d9f76eb08ad813a69bb035c93992824b327263b730f626ffdda88a45317138ff87ae2e22f6f8383e75d6adc35334e14f012f30820bce457f16f541349e9c095fb8d86b7308adfb56a9f42c32faa96fc23857845b4fc32e5e10303b809249c41b09c96d04eda553006a6e85190f28c9d2607a313e2364\", \n\
+ adata: \"36d38c5981b7f7cc49f383fc3c164a2b08ce055b6657d3f2de0c2c1c8e188a4005dc33d5b081122d207af9d83b4d56c846c927cd61b7ac33f9eb\", \n\
+ ct: \"b430ad2dd4302ab8bf1531a789239596f3490a70b85197a7dfdad1c604a006601a72ef70c7a9cc3a45ffff65a6ac56c84f9b23846fa2b5a5914489c28e677edb18d7bd093abab82e9199db492ba587fd12c815c4bfb2e4f48d1e2284b890d9afbaa2cb0f7d17aa990340ace598db2f2e9a3d0d8311d43099a9ff2d13fbcb6ca5bcec6d7fb7f8f805648e0adaa3cdb4eadff5bfddf82267795ec5e89afaf2f75b640fd8a64938ed4d66f3c52460e727ea4b79b7b182e41d5b022e07ae\", \n\
+ tag: \"28eeea185b86e09804993690a11d4aff\"\n\
+},\n\
+{ key: \"9ee6229cf971d5aea42c2ada72515f67b30d944abe5d9de00418ee1ce0e5d3a2\", \n\
+ iv: \"697853d81af963d26b163ee2\", \n\
+ pt: \"62023a5b87bc689c4fcc22f42a36d379d12359ccbd6fc4714638427cea1a11f674c834e301baaf756bbda0a2917e2547f3d05fb4cb8e8fdd3736a3619b17027e1a3eaac811cf228a5d501fdcc3c6b34a44c040d4fc59609ae9ba521e90aa7f33e0a2a8771264\", \n\
+ adata: \"a1edb00c38c743930d1e71f76eb09a20d8d021dad6b4052cd6b730\", \n\
+ ct: \"1352b1b68346ef751623b0ebe5822f200e18ea08dbd3e4b63c7cb03bc96596921397d92df2c87074a135a148dd17b54e770345f80b9901ea51064a77ca0afe3cd404b6181db6b46f153d3934cc7186679a3a5fcfc7e3942d14994b9f1efb4539c2623187b0f4\", \n\
+ tag: \"ffa88919d19396eb282c6224dcd3fe6b\"\n\
+},\n\
+{ key: \"89d3941cf24bc93333a77a74ed8828aadb0ea7686bdf18a47a7ca3a47f78d462\", \n\
+ iv: \"b8c0ed111f7002eac768c7ff\", \n\
+ pt: \"2e050747eb762401aef26a899906b2cdf1b54d595ca17e6da4f58db22f3c8f01b4d0b24e836ed296c92894551cadf0033d9fe9c4f7dda13755cae5ae54943522015c7de9a867e0e434e3db899d9737e984629213d6e5e125d75fe0e51f8dfda36dd6ff48d9cd1ae24c520e5e0d8e4524d0a3ddc572\", \n\
+ adata: \"8b63e991991cf2df62639a34c97c82f2d6b37aa5273298d8101f31a350e8779cbc02fc4ed8017a27a1\", \n\
+ ct: \"ff609d560dba5cba4c2eef85eba510fdaba3399049827da07061ba77249cd32ca406f8ad5141735557495a78441a861d8369712b029da352c33385eafd4ab12670ae09bee7aecc0000f6dfd8c3fc42851fd1f6191f210b4a31d998c4dd057374d6aeb962d3b4d30ba2b6cb6741f5a71b82b4b269c5\", \n\
+ tag: \"ce563aa1f4173c907ee26536533eb654\"\n\
+},\n\
+{ key: \"be57a968e1b3836a9c8a9e12ee25dd8703093049ada52887dcc888c59e3ef3ae\", \n\
+ iv: \"5bbeb59b5b28f4c4\", \n\
+ pt: \"ddfdbf26ab360b4ecc6449525b635316e3eeae9dfc728bc2b282f44f2b179185789abea2dfc13d05405a689d2ebbb4a9cbb699b5a1f1832229da416585bd\", \n\
+ adata: \"248a863ebd03178897e10f91a67d2de214427074c1861259089d10321c4ffd82c9c719d260e5f97f717aa51625bcef0ddf1383d8c427b74d5e57619cf5758852c36a2940a6de672258878a87fd69742d02046b8e63175e697ab7a26e8f66c41d97140060dba0799146cf\", \n\
+ ct: \"eab9d1c1b6a8a9c0ec168b6943fc8c6ec1c03256d7dd88565ea31c1e0443d4416f9c90123d8ac62c7cc7d0ed233cc870a613e3f2134fcb1c7c77fc6c5354\", \n\
+ tag: \"120c39c99ef8b3b687c026561af2f948\"\n\
+},\n\
+{ key: \"8d15e619b32ef11117d90737cea69355b586fe8462ab768a1f148577d1bbfc23\", \n\
+ iv: \"cda03296823fc83cad56efe7\", \n\
+ pt: \"a73954a0bbbc91e6c712bbaa067d761ad5f41a2e894932cf3067214282740574b88441fa29f1ea099b37ed36071a457247262329c5d8bd0f36989f783355945968b0f730ed5aac7e1be6961b58fa41909c3a46eae63e0016d4aee7fa46f08fd8672fd1133b\", \n\
+ adata: \"ca93ed8e4b\", \n\
+ ct: \"ae5fcea8e2ad26c9992bee980b9771a42804cb412032a218422b266a09030ee1d4b70890d112700867832385a78de24051e304ba930a08ba081b6c2127af3bbff7c63d92dc4201e0669267438e83b96aaab29cd4b5aca9afa908194bac6e3d49419b77fdc3\", \n\
+ tag: \"02f6954cbe4664112c39a1cc2c02fa7a\"\n\
+},\n\
+{ key: \"fe6b294d9031b831569f4a557df1099b04498d4a5aa1b9d3b535fe8b274ddaa3\", \n\
+ iv: \"109d0d53ac4ea15a89072c4c\", \n\
+ pt: \"7defac85c3395602cadeb5c4fba6b78f90fc803aeea6cdca5c7153e464fd3f288143b4ecd8b69453c9e000349205e7600f011b0661c246a229e2ded96b8326ec982689d4e088373c4d6cd33ef6cd9cc841a9e9d02f537e490775203c1a43358ec3f8b2c43348b81878b0a313eb3ec6\", \n\
+ adata: \"4bf883528ed09bef747d64f6ee4a51bcf2b090a9c0985a44d1fb57fc77343b646a8b6abe7ef65f2430b79da49349d32ae104f611de8bd3c17f24b4e8d498aac5857c57afede7e2543ab1e6210cb72eda2f4aa1dfeb3bc90514515a42f015bfd4df046f14cf0ed36cf200f90efbe0aa48d716d040df86ada013eb20cc664a4ceaaa6bb4b5d0935519366af82fc65b969477e166e762233da2e2\", \n\
+ ct: \"3d162890c64bcc6463a88c01248b9c1d99dbe2fc424fda68084858c34e2403dd5fd01a5c5e236aba5c40bc011e340bd4601ac7b9f0d9710de09bd3ddad15dc5fcfca7913da64b796a030acd78a2a976d008a004ba95401e812dffd02125ed837d7b2bbdd78a23a8227c77c5c2b1a0f\", \n\
+ tag: \"515f047af5fe463de838e2afb732bc05\"\n\
+},\n\
+{ key: \"e642f9ab92aa1651643b812ac7b6dfdf757e472f996b75f54d58bf3f275a0e80\", \n\
+ iv: \"ce4a59cbd419aa99\", \n\
+ pt: \"dd343e\", \n\
+ adata: \"e384c5e16736090977feea86e79538aaa24579cf47325b984da959939872522b94cec6076de33c686ed3cba3bb9ed7a22d57fb\", \n\
+ ct: \"c999b8\", \n\
+ tag: \"940e90021079f80aec137ee2b2844486\"\n\
+},\n\
+{ key: \"d46cb200b48475adb07f38376edaff45784a6775e0ef937eff25af18676ccedd\", \n\
+ iv: \"ff9ba532c7c65a4b\", \n\
+ pt: \"13e7e252f63cb6522a03031729e44591449c053661e171f27eee4a7dcf0db96a88d55779d62b2143eb26ccb4269f60e9ad8d8032916195f696998616526b8bf60427aa9640a79bf2415416345397bd6561262b4ccae79a1a47b557f1ac1417858270415d00e30f0dc70b2f8a2a039dc7a9cfc161672d5a90eaf19357cf5a9ebb300fdba701b5aea86ce09ace2216\", \n\
+ adata: \"f60b52091f854c9103cce8dedcb571fb7b3a29620d64926779a24b23354e27b87e57cc02c8796234afed92f066b272f02b3e7400443bc12194558e32f43e4fe97a2b81d596ebfec5681d880a16e6eb5d69db9a12b0b3ef2c00441f99baaf1f9d19d459f8ecc7927d71251c63a67c1156c565aa4f61b4fcac8b23b22e075c6e7e64320221c8bc\", \n\
+ ct: \"08e2cf6656ba77c546935036ccc8a02c8de2ac28618dd37331bd32311947edcdd8422bad9318033fb3ef5c6ce0fb25576e879df90e9a6b27f6afcf12797605e0d63ddbd3c9b9d31bc4a771f4211b419f609b98dfedea2558a7cf55125379399bc1b838ea236046d6df51c222db37c935a9acaff0449ded133829c076eb2c026596da38d50d68c5b394b6e19dcd1f\", \n\
+ tag: \"f67cef66469afc23698426517ad705d4\"\n\
+},\n\
+{ key: \"0e0a62f75af4dcf2364b0aaa02f26498328ce622b67e737b53945d473aa4c889\", \n\
+ iv: \"3b2f7a3ec60c3fb1\", \n\
+ pt: \"014f4a3ada5579db3adcc2e0d5f7ad9262729f269abd936a748651dd29c9d9a93a3fb57bcb0848369a91935499f7528181c85f139510704fcda3c1a7ab84240f8bda6e41b250d7e4bed3d1110ad3bcb7b6c48f7039ef40bc24694830f29dbac27b0c3dee8f963ac91ef9e252a837f4efba04f534ab503556fbea2852cc583aec736ca890e3a75e5001bdd2192a8b4442c047e2e12de2bbaf18fe765c064d49e6b9868d72d9ab6ecbeb88d87299bb4c4b\", \n\
+ adata: \"eca48460fcaac0bb878eff1058a9fcfeb0716ecddeb36ad1b3ab2a223a7c1db986f56783e99573976015426e194fc42f56db8d43a77ec49dcf4ea9ede420d9824dcdf73bed311d36373c6968d48c959066247fe4fcc2a72626021b9d6363f3d06a7a741ee43af77349ff7268fcc4433b20173cf6f3e884509b779cd93b433243be8e26d7761529f327e1c2c885865f3ad8338089cbcc2c6ea5cdd61245b20843f6ef0174c205aba812a95ee6faf9653a0470d79149c2ff5d4437e7bd4857d3865d31a7ec5ce8\", \n\
+ ct: \"ddbc3e73ad8c938dbf3d440d79302424914a85d26b5672f9f943f104d00d0253f846356da162ee89523f62a6bb7851d741c68d7f04dbbbaccf04d89d6d83df753fd6d5f5a055add0d87b10b066aac36455c5b5969d65b8ac1629635060bbb2b1bba0f52812f4219a2510c0ea19375445076a3ee9da2e8c133ab0f351713aa8f3f9159f3e0977bf5370dda52a02f746d9653a2451b655a84edf565c1c6984bd39e1f2a63552a1a8e6f4d8755d7c385384\", \n\
+ tag: \"9d6c307bae57fabb0fc47276cfc88fc5\"\n\
+},\n\
+{ key: \"862da566809048af6ef243270be9044a9238d81ba03a2372b30942974a3fd621\", \n\
+ iv: \"ac287856851f987f\", \n\
+ pt: \"d70940c0e6b567fdb9fa0f556f7bc58be613f2089b1f189446a5d07f34aff5fa74da4a190bf38c7927f021e1c2feb3336c3c5aec3d72116bc4895bc050518ad6643dceb51551b4f2fb18340dc46b887aa46fbb21bf0269ddd8b17b87a1b4cfa06f53dc8539a674d8e5abb3dbf94f143003caf88e0549dce1662d967e99a3bc2b3bd8987993b9b5a3\", \n\
+ adata: \"18128a8572bde3b16908be2b0b93c481f14becced66e6de15ac540dbd1b461f44a495299a8968cc5c8cc4248d2d5026e0cf3ae99f54c12c5d545fd625174951f42a83c49ffc5d273b00ac920d747a8a72341c94d60d4fdb7f3873f95057e186a6aede2b1b0d07f41e07eb6e8fed030b21a1721021b6d5c298ad4b0972a\", \n\
+ ct: \"cd793dc38ad2b06e2f2b2748591a9db04fded80811cecdb224954bc50b773d9a3a89cd974073c099aa7c5eb4ca75cf30320e759680adfd1ac162e441f81ad76e0e10e202be15e6c187b21daeb0587b41978b4a4f7df7e0438f1ef5284fb09388e113e17108fc7d3ec606ee73ed2b8446b2195c3b4e34307e304d8e951ad242bbeae337953d535e13\", \n\
+ tag: \"642368e32e0a2f6f62401453489cf715\"\n\
+},\n\
+{ key: \"e637ae3a436b23f6761f80f05300edfc629be97791489d7c426da8aa54357730\", \n\
+ iv: \"12520ab84f22b4609a1df2e8\", \n\
+ pt: \"3865b3a74cd36c9dc3efc0bf72a24acf019f6b48a43dcc\", \n\
+ adata: \"2f571a02e94c3e154a4da8bfbcae8c8776608d332b94da86c499ad55dbd52faa479bf37d28e6a8c51b09dddd1165a4d3dd6386d15023b3308ef2a6141aec3e44f38294ebdf5c7e455d2b5dbd3b45bfb91f45a0b91c2b431f974ca3fbb7a58d08f2b3242bb32a7b8ca188eb0f547bcbf2105e39669d923ad8dde4\", \n\
+ ct: \"4adbba4d7837e00128bb264821afad01e5f64646890893\", \n\
+ tag: \"898e81e90b52302f16d95a6e7dea8b55\"\n\
+},\n\
+{ key: \"b75f7b5b97afbeec715e091446939f284daec571d6a35e8a6480f2fef8aebb07\", \n\
+ iv: \"76cbabe1b4ca2ee8\", \n\
+ pt: \"3eba966607d0d02eb111af2c6b1fb7e6ae31cc67da6649db81dd142799f8d0f5\", \n\
+ adata: \"70332435cd8eec26e451169f5cf465\", \n\
+ ct: \"75b4d992e79edb93a9c566af0d7aa86056aa7cef9820da6519fc4b6e0fd80cb6\", \n\
+ tag: \"02a867f5d7fdd8aa459b17c7854abe20\"\n\
+},\n\
+{ key: \"ce10d764942d48e4ec3ba43d985fd89ed200e365bc4a63cf40ae2dd2d1842f10\", \n\
+ iv: \"3e9453bb8379a77d6c42465c\", \n\
+ pt: \"e6d31faa62f7adc63e7ac847392c0415cc03485d08ea7be96064988d467ce44a5c790ea91cecd242260182dbd6c93d0337e127f3e9f20ab9ef5ccacc6d203b05cfba8b47734d37d9cf6cd820bbf5d72ab3e72581c49bfb0ecdbec6ae1fa33e8d992e0f7da3222916ac8d7d466903d55c3504e96d352cbb07decd69\", \n\
+ adata: \"4958d8ed2ca9a294e7b773f17b49aa41e7ad6ce510952234deabbd4fcb55c9daa092124cdb283407ee124b095357a10db41b333050dd2ac6193e76a8\", \n\
+ ct: \"4ec01b78cef98ef0643257bafca20dcfb931fd4e236e370457987b93a7ef778ebb6fa1e1ff76dc30ee4b975880ba2b4d5e776079113bc38b658dc33bb4aab494ee18a5e0e635e6b5972ff07ad72485dc91a686d2c052b1e680b01ca8bb70bcab70e014421398b34f6b72ab43db731d35f5266261b42938bec8f77b\", \n\
+ tag: \"e3a0c41461a8771e20c071682cd1c2ae\"\n\
+},\n\
+{ key: \"1c87f704d4dc5279224554f63ac950a382fa35f1bf3d9b287f07aadfc26bbfbc\", \n\
+ iv: \"0bee73595f908b9e823b61ce\", \n\
+ pt: \"6f58bdd0fed99f751ad18520cb06ed69b3dc95ed5004cf\", \n\
+ adata: \"1db9673b08cb5d68083f2c96d7fd3bf51059fa42e6ca22750e0d89887c4ec4df3b5d8876afaa6035c321539878f34c15bf5e26e45a92ed61e38eb70707313cba39ad5240f1afd61d\", \n\
+ ct: \"f51af8b1aede99c2082947ea783d0774be7d28c77cb085\", \n\
+ tag: \"6a6c918a283e45a733dc4fe1f23ffbee\"\n\
+},\n\
+{ key: \"86501401da61c040099a15ebfc9c3723732d4af2dc6de59451500d9f32394d33\", \n\
+ iv: \"19c2d159501beb92e696ffee\", \n\
+ pt: \"36b05d577e55ed1f5c4992b26614fc23bd72ce5c4d39100bec8aaca8ea2a4b17d79d74a104dd68a8c9a46c4d5a04945552659eaf05ca759061177afd9af1b793ef03315d23fbc759c8b619bc958554a6905b0d79ec75184e3ef183ac102bd9224c62d6bf5c12b11d40373feab2f46d0615a18cede5773b66891417cd9dd1bac4ed03ba9044dd2fc6925ab8a3183ff920513e33da362164bdcf7fe4e158a5b4d16d4b75d2d2e940\", \n\
+ adata: \"62a22991051212a63f75618d7205b63594af41147fa550067e9aed2374921487da16ce75b7d5a41f604a62be9ec430506eaa1f4c0866397765e372f59fbc0e0c74ea551780d1a76f6e6f24669fe7ed00f74942a048bebccc7d9c6eb204f5dabb9c6e06195c7c70530ca788599c682813a4b41fdf5bebdf6cf0d8e23d\", \n\
+ ct: \"8b860edb4a65f5ba0176e67bcc0938afc9ad14221d81366d446fa885632dfa2c696fec09a230dfb57411abb126e507182c2f4fe619bd8de6a8eacd27b4a6bc6fc1091de035d4fa26d8d372b85f5eb156de5258bc30450adfa7b63a7b19ce76c729427960a8bbd309524b00e55f3b26eced08fa9720b5caa60cee7645033e5cf6862fe93495b29def9281c508348e9256170e48fab40d81cf02912380b125538ab9799386de2ba9\", \n\
+ tag: \"e58d7bd7acd5d02108c8a44afad63269\"\n\
+},\n\
+{ key: \"deab502336821fd5c077efc1258a272d41de6aa7bd019a153050e7a84ccd6471\", \n\
+ iv: \"6ad16d75920d0edeafb9383f\", \n\
+ pt: \"fca7f3ac53eea0bcf411004f7fc9c1afaa11ef204ad11e691caad9760e32318b8400e9362dbe25228daa4848f43c6cd1843ac3e5fbafedf9b27ac0fe811dca40e90d5b27af819b6c0931e8640f34a85b17482f28ca\", \n\
+ adata: \"e1da745eb7849030bc6ab6546dcd9f3ea3032dfc2b80602964fba72ab91463c79e0003cf34805490606091e0c77988acd2911aab812000d1fe3bde9febafae750b49f0070398182d8b2dc528f83093d4a034b3f8759b1d75e871eb69a93c0fbca14270a01c9f1f23b832c82e\", \n\
+ ct: \"6941cb0190cc932794170fd292521fb00218a6184dfa43ff8a41eb7ac831f776e81b31ac3811408f8f8e27ed6551dc8a341dddf5d9baa9666871cf1051736b80da034dbb1abd17536569b93ef908389a9bf16b0726\", \n\
+ tag: \"29dea9cf3bf958764366820a11074eca\"\n\
+},\n\
+{ key: \"bf497b0ba89689cb966283ec494a3210b2e7a6ae84174a92dde53be122936290\", \n\
+ iv: \"221a5fa6f35ac95aefc7b72f\", \n\
+ pt: \"bbc4cbddea798494d952538271b51aa9cdb2de41c827cfd5bf3a336361cbdd4ab720b2ed069e8873dd2556ecf6f740ae4d8b5a9147af43\", \n\
+ adata: \"c8cfa890dae0e9cea7f782791a66fc696145e9754ba4b479f09f3c8359d1c6994ded1ae66773c222b6250240ea39608877cd16502f771b0fd9b51bbe266f9c2419ddc981a533ed1d43691466619bf287adcb556f6279ae97e17473e3075649bd00194aa922c6d9382d8eea11bc9cd48dacef7bd2f38fb7a95e6cfadda54210beb23c1d105c39c38473bcf4f9fe04f144794f21739a192edd5f130fd218caf46d130163c27ab7c4d55bc6a4d12b54279fd6fdc2177eea3414ceb615f04ec498e0\", \n\
+ ct: \"0851edff80e9c976fd27bfa25b97d35041b31a2daa1a48384829e1a9c25f5434848a44081c2e03d3ba9ba58747ff39c3a51a9a041259b9\", \n\
+ tag: \"c6c21a89748f9fb58b427b4e5b3cc79c\"\n\
+},\n\
+{ key: \"2b509e1fd999b617613a9b5ca54457fab0a3a46f999cc777712160067ef74cac\", \n\
+ iv: \"f85415707803e877c4a330c5\", \n\
+ pt: \"076539bbbb76238a8ebae562f57392efbdba002c24139a5c7c94cb8c\", \n\
+ adata: \"96a91260fbbee215fe86c00ce2960fd919a9b789bae80a5084deec3303741925589de4fe4f49bd1592c74fda8626d64d22\", \n\
+ ct: \"28fb76257e8f7219a5a000850b31a4a013efc1de8182bdae1fa404d3\", \n\
+ tag: \"fc9475ab53f2fa4c85d65c0d8145fe95\"\n\
+},\n\
+{ key: \"bca7ea4126395888ffa3415d477aff0d3faa5d3f031455fc4ea06d0b7f600dc0\", \n\
+ iv: \"c478016bd6e921c7\", \n\
+ pt: \"544bdcac1e4b7a5f7828a00b4ae69bbaf1ad921eaf0a2022a87e969d3f2955fd8b1577c7ba37bec5bfd9d43cbc065ae65859b7cae614da324f6235c0051f3f99d71e672ab6fd88e8dfbb3fa922947e47d78dbbf9a3f085245602376519660e431e43c4db3dc7d03ab3c87f99cf53b7bea2c57f4982b3164e9c98e48fafbdd58ecd5a707b21bda12593f7a81d9654ef6f918c91f0d664b26b4843bbc634bbe6f1087904a3df24\", \n\
+ adata: \"56d696e215ee3ba23b8e8fd550a1ad5ef2b92dee8972f821831ac93e326560e72c4877d90b3f3196847e5009f0f4563d05ed6d3e48c1b81090f58ab19c458f9b17a84270576fade01dc45df553c394b682583f17b944327359d7d37fa5c596cba668eb74c3bc946fe18feb1c8b84351be6dcfbe1c45b58a81bf7ea7b835a46e635e88f447d0d\", \n\
+ ct: \"17f7da351dfbee004c8d9024c579852cafdf65d12ce20bfd740fbfab62c22c232c1c48d17ef05b20473872c5bbed614629c1ffeae64f22f22c9e558f792335b2359e199d59ff11be9ef07c61ee2963987e0a298563668853ca597bbcb7a0e33adb3fce98b618eaf54d6e10dabc8b3a8f252e6fb239a6992881cf34b4237df280c3f87510b4275c26d86af3a94fb490323dea45358ac55c6be99da8c570276904001d3125ed75\", \n\
+ tag: \"3e40b772b32f170f54744630cd5b7c97\"\n\
+},\n\
+{ key: \"41210acda912da9452657f8579f76be46e7eed774ad03b9489e0c5d53c9ed261\", \n\
+ iv: \"f04d556831061cb4bac263c4\", \n\
+ pt: \"deb6a05250b602b008a6a7df9b6fa9bacdbe8d0e6ad90e4f590cb865c75cb727d586e3f95d4eb0b0def76a935c1694840f9ee9848a96c3cefdbb1e8eb09285eebe4b4f87624dbb01fcd492bbd60a59a6464f4ce153c958640df6019dbe8248087f2457be3d6a9e980dcf4fd491c656c6bd03136ae18cd62645ccab422d14a6bdd003252a7695927ca1\", \n\
+ adata: \"ef6c292b350887c581a82398b8c6f9a02dcfea462e8a31127e1cde106bb84b91916816f06a8fc81953a2564829a020faf05cdaddc7561e62f4a3f70047d5beab533d6cd64e76baf8\", \n\
+ ct: \"d1375d760e7209079c57b7ee05327a6ae63699c5299497dce23f2dbd8e7dd8ab4a1700b391f986f15b5d4d9e4698a9bf795149511216cf33fa14f6a65f9f40962ff8143f26850ebcea9fd593d6001d80cf7bfa77508c900617568a3a7f25fd8e4705dd51797d38b15476de127ee583b8c6cfb9a7968ee37b717d5c3da60f93d154e2c84928d1fcc425\", \n\
+ tag: \"b3c4076f901f0ddb7ad3e831e9ec207c\"\n\
+},\n\
+{ key: \"72eaab69a09e2028b7c7a9be4512c57c3f0aeb0af6ccf8052df8c9e28fea8bf0\", \n\
+ iv: \"0628f05b7d4e8095\", \n\
+ pt: \"5622a3b86756dbcdf3fa7f45a1f73193ec3600d160bebe8f4de1694432600ec7141481dc080ead429b7dd4ac8bc5e36dafadc9374d98fd66390c9a508605f8eb1c8efdf2a5fd34d28a51e733b11a3ee93c1e3ad8953b8f12a0d1c6d93b5d5ba6f349e4c45b021cb4ac3af14c7af9e17a2816e644d29525ce34d853d992fe451fb0bbbf809eaec02d72b87948a17b5e5df6202d1babd3b41bc4c53ec47ef597d2014e2fbb7a960f5e690deb9deda6b79116fa7dc65d90cb863677167b7c1c4e\", \n\
+ adata: \"ceef032f227ca9fb97f74fe555ac12ccdc9adc6a96bd1f56b06987ce96063fcd\", \n\
+ ct: \"3b24dbe1e689f6af525a790a2f49102a2108d81fdb91c3f54559a9f8b8a7238ada51ef6a2f64edcf6f3f36a066c9a7a249c41f232ebacf1dedd056e1c7c57d8f99881e2c4422b7f32b74ac6e5a7994d8a33fbd0170455a425d53f4f44f372edd54a367cd8e9a8762351b9e607fa0dce612fcade7dffc9d6a7e4d81450ff1ce4fadea5d1b075576a708632b1864c46b307690377613b93090395b1bbc9269a9686fc7a54aebb6d7f9f02e95c314c1c9ffbe814954bb54f18d2476bf80862ba2\", \n\
+ tag: \"1e0931f3a402f6b0c5781e3fa23a9cc5\"\n\
+},\n\
+{ key: \"47ab3abf76aea07ec8166b2390df7008fbef5e24d796bb8a3234160f58df0dc1\", \n\
+ iv: \"c9d38bc0e1476a06\", \n\
+ pt: \"0e33961739a214cd694db7a0030edf67f573938207e26ed7fa\", \n\
+ adata: \"d96881e440afffcebcd8dabf2490707c2cf1b3b52809fa0157862be02b63718cade6e093a84bbc651f64dc2c44a9d132e8dc5aa296c5d8f8e33e7385516b2c0cdc8ef560fb8b39a205ff3757bc5c9e6760c5c36b3e0117d1a18d50e63246be6726943aa8a7933701ace58ebf5c3207b39c5084d385e247d694c9b552138860829d691e7a7dd9311d939802a6559877df35968113e48adc4e780ba2f4df19a783575e61d5a1902aa0b2359c298ee9c88cd88fc4f7b2\", \n\
+ ct: \"2cb104e8c02f50fba7b25872d2c19931b1dc3568aa945b1c39\", \n\
+ tag: \"7d52a06e9fb0f611fa06b28bd1a52938\"\n\
+},\n\
+{ key: \"40cf4c7202f46c7e4eb3cf7ef90e59fa9ca53229c4c3b8cc0608be711fa606c8\", \n\
+ iv: \"a93be29bd9391e933a7312a5\", \n\
+ pt: \"a2194b81f95f0e7ecfebb5dc25177addd51c7f\", \n\
+ adata: \"1413e865ddd8244859b264d87f9f4b3ce5759e11f0c25c9c2b0a86a773fbbded9fd3154377bb43db5ded6e0f6b7ece00dd1df6a68d7d37f6d10c4beb6a3d9efe54eae387643791bada8f1006287489c475a39c68ba7b30b45713b6f6bb5986e4f47e9f2dd9b19889209810fcacc66e51a531d1a285c112af024cd3a1fafedaa6e8d15fe77e3dda50bc\", \n\
+ ct: \"c8558482cf77bd2cc8ebdf74120d7465b16044\", \n\
+ tag: \"f32477edde804f1b30fec1518158d77e\"\n\
+},\n\
+{ key: \"053c4aeb86c56f8e3af33c9086508b912064471560ce5f76f8c4f2325283f513\", \n\
+ iv: \"c3cfa1ddcd4a00fc\", \n\
+ pt: \"a38c7c9f429b6e7b\", \n\
+ adata: \"5384\", \n\
+ ct: \"8fad7f02117932a9\", \n\
+ tag: \"c521cc8dbb9eb87b76652706962c89fc\"\n\
+},\n\
+{ key: \"785b4b481e607479e6d11b1d1244b34207c08dff9a96405dd5cdc104308dee57\", \n\
+ iv: \"a941bdeccf180459ea96b5d5\", \n\
+ pt: \"53640804e27e044d71ac27662732a5c68f37dbfbdaec1c5d8bfdb5f5f398903d91f98915871aa96461cdf92da3cb250ac3964c43dad89ce435450da22853595c9ee5f03209c644e33b55a0b9a00080616233732d0ce35aef382a5f390867399b7738f3fc16cda12dbeb8e65a0ee11b39f478336488db6b56060e5023855678ff5d0dc4cf38e619\", \n\
+ adata: \"d606cb77cb39c7c722afba88112cbf1395698fa3343b62598ccc6c653852e76278abe40a4c593e6a80c8a6ce4161d653c2dd4690ddc8ea828e45185b18b6a8c7a290474c8a94c26799ff564fef0ef392c103d4a72966f38a54f4cd0c78f920b79498192550d4d137f54bf539bdcfad93dd017b0ab21b3d1abf45af5a6404ee9667a24a5c38d0fcd4d647ad96ea2b4a9ca5f3bd303f2a276ea628db2f1185f8a7826c1172e877ea59b06f66f645366d2fa322f2fa0b30b6c2c04ee4e7\", \n\
+ ct: \"8a541b25358df012ecf539fc6a2ad23fb94c5dc96bcbd3bd7459ac6eefd6e593e5b376ab591fd29f04fa66493832664bd9225d015cae0735130d7eb4481e2ca25bac975b6a11b6017c2aef09019098424403d7b54348fff00967ea31413c0bb8003f37297e2260c67b22a85ed1c152064efb9d7d5149ed4fb7c86442721c300b1eeca91f554c09\", \n\
+ tag: \"813894b0344c3a317456536bf73a5141\"\n\
+},\n\
+{ key: \"a5990c4ce9d021e81355045ac1567c2940055f176b78d996a5276c69adeb4a6c\", \n\
+ iv: \"afb3fdc93c4d7d00\", \n\
+ pt: \"47f22c9a0c5db13b8a96a5ec3307437d348b12ec04e0ddee2abe3ddfd0ee029306f6ec4fc2\", \n\
+ adata: \"b84641ef36b45e3eb87c31d84741729ee14798c85459bd54ad6547c0c1b1691d142f97d4c327bd3fb3c4\", \n\
+ ct: \"2144d00e63c536f1f2de36fe1e485ac186871ee864560af1ed5a15fb928b78e812710d5a23\", \n\
+ tag: \"de40daabf63bf331ad51dc0a5ccf69bc\"\n\
+},\n\
+{ key: \"0d349c5b39fb05129abc25f5f7ed67fe63f2556a707588070707d083bb448f1c\", \n\
+ iv: \"fd09fdcd4377183c\", \n\
+ pt: \"0b9557257a715613a33a340e0358abcc7d329d588bb8811b321d70145c6f754b838528eac39d3d0bd93e9b5143fc1cb9db3dfc9143a99bc3a74b2e6ed0fea0f9cf6dc92376cc9c20c7f722ee442661a599e853f43e6a94ea7cefdd04f294de696f309ae7c6e54fb1f97efa8c3ea75a641fa03553\", \n\
+ adata: \"3a35c730e0f7a569f7ae38c3fbadff64dd22cf3d47338bda8d72a8a3a6ae265aeceefce0b65e67a7e9faaca5e1a7cc9c5af79d6ebe51a370905ac33ed856f129e9d076f2922b14d7e441683a3a6e9e493e01592c7eaef8aed77ca2724ba72d8df0de2f12f05ab76659ae34a5692f35b84de0f86df5cf20b1f27879979b699593b4151d55ebec004f0e7134e4\", \n\
+ ct: \"705250fc59b7fe6b2c3c0ec53ea01452dc96459ad01d54fa82f10acade9ccf94233f013976d8232bb849ddb4442bce417cc00c98e3ba45c03db1fe5cab0404bcc39b1e550cedc70dbb0d8f028c9bfc67ea712281ef626f1f99d6108fd88af831ac46f96cfe4d46498450c9cd0edeb0250efcbef2\", \n\
+ tag: \"0de48816e98a55ad79e6bf6c3640045b\"\n\
+},\n\
+{ key: \"3587cd48eab037108c68d4d472ba807c78ad426ac31c9c54e932e182d4f9593e\", \n\
+ iv: \"7a004091cdd53d1248aa1aff\", \n\
+ pt: \"da32e724a2bd9d9eae0539997e9f\", \n\
+ adata: \"e980b011611408504f85dd0fb7a52cab922fef\", \n\
+ ct: \"fd0ed36a4992af7a2e176123055b\", \n\
+ tag: \"1d362d0d717ac0618823391beac636a2\"\n\
+},\n\
+{ key: \"b57a3cc27c66f9483c3b90b6195d6eb9189fcc72c4dc978a7f276d44444547db\", \n\
+ iv: \"be219a8c31faa0ff\", \n\
+ pt: \"dd9778faaa18fb19f9a4f9c846fb8bfc88f0b87756001bfd8c1359c73d26e6f77baa36fa2b922d32293c9b95\", \n\
+ adata: \"b548760fdd02808b551880ed95e25ab30627bd21eb24520df01caed62f6fe6249151d1a6e8a6e6a1455b22d6982b137354647dc22addd4a974d813edd3062a115d3deb496bda2b54\", \n\
+ ct: \"792a8d95bf12669c1cfbd2ed96137dad8acb087fbf8ab5c89fcc74f2539908a13c3ed93254bd4fd0128b7262\", \n\
+ tag: \"39c873881101e161f88a0034087f3a57\"\n\
+},\n\
+{ key: \"801c7658609f29986cb64d2faff16a7d495c82b1ea210132c992fe49eeee25e0\", \n\
+ iv: \"b63989089025568f8a49371c\", \n\
+ pt: \"255a692d2d21ba648a5cf84825d54b6da1ca484a978fd61abf7ca3c124fcf272cff2518de6e78d897448014b8bb33dd334ab1a953a9cf284f21c97e37823dd3346f1dfef1d7724063186301066e9105b71ee1a40958f4702f14d759adbb3c63199af07af850563b912a8fc48d5928421b554acf85c1e227bf6bd22e21bc6b00f8671e2ff0b78482879109d418e4f82f3767cc4b17d7ce0\", \n\
+ adata: \"cbc8171a3322c8e4\", \n\
+ ct: \"d1bd0209db46dd0e50737de5ea1a28b3b0548f26e62def5e7c56538e4b4ecdd88be8bce7837eaa694ea9232c596d0630f2e8aba9a495cfc05f331dc0adda8c1ffea04fd49225137b7edaf7c2e8c3b16d77a400116d4cac01b5803526febcec2a416a17212aee2b031d58c104a6a741c85d3ff8aa337fc12aca19a8138829d62b33a0420ce2e79107efd70aa7fa1f251840cf04d07085ba\", \n\
+ tag: \"3cf097692adc634ab66d8392e8117d67\"\n\
+},\n\
+{ key: \"ac2e7361f95327c04f7fcda08cdcee4d9653eb9486ce9cbc153eef69b35e9f8a\", \n\
+ iv: \"b66f3461fee91385b4147c76\", \n\
+ pt: \"588ad5f6eacb37a13396eea2a7f447e37e75104569bfc2832141e3f2f582429294ec\", \n\
+ adata: \"5442d365fb85c27b1f8a0ba9acbe70f6d0db8135067626fa0adf384d8b35b2d9b3ef5ef6dae711ad1e72f9f17b97efa88fab347e3214d527c8cfbc000efefb8cf11be3f6cef19c040611be41b5ec2643bf1bf54311e82a3b70003d67faddf75ab26a188390228be803d43bf085f4fd12292666bb44f6ccaf64bcc07370050d9a33c1eed23a19eb50d851bf7db9c9c382ca649ddfa3e1b800456ee0832cb35695d64465b38e9b64276db3c6e25ca2a8bbd5eef0abddeea9ba299648f321ce4f51286307f858\", \n\
+ ct: \"2ebd56376563f91c14a4d94cfcfb60b0c832e8ba3332f1f9fb3ac67cf619429758d5\", \n\
+ tag: \"3a40ede9991b687aae2ddfa18be72a4d\"\n\
+},\n\
+{ key: \"8c893c33f71d907d1f347840a63e827bc299d317903a659b9738fccb3f50c25b\", \n\
+ iv: \"a1fc809ffe7cee46\", \n\
+ pt: \"964896885551ecfa3e6d29d9f8aa8a71d56f8dbd300d9bb757e82db43a9e192d\", \n\
+ adata: \"84b26e2886b648c694dddf2339287e46bc37344d347f0b11136e4dde44140be5ec47762c4aa37fa19ecc32a1f71d4ef9087402f734bafd04a1d5a762124a83f811aa47398accca5436aea34f7d7e3554fd53f848b62a3d0bd58d88133ace664a682aa29dbb2d16cfe354989347e5b2be392f5f7efbed09a03d5a3b74ef4a8717bfb5f8fdeb7ad1\", \n\
+ ct: \"1928f57c89a50b87c8f3a7e7232fd92a32c640e962c8e3124cfac576f124f77c\", \n\
+ tag: \"f19127e1b23333c82560960ca5fcf4fa\"\n\
+},\n\
+{ key: \"05114bbcbc3955ccf3b891c14a5a29bea2ce213d99e1ade21ec0bcdeebfd2235\", \n\
+ iv: \"cafb09923e0c60a38727f889\", \n\
+ pt: \"73a316af88f4f5fbaedb57cf87338d5009638c55971d6fa0ab479358335661dbbcd8db49ff89\", \n\
+ adata: \"e791d6eb78e3c10f3e4db7de2074c401e21f7572c39b62d0bc264001a305c045e5d860d7a92e5e025ab9f9fd12b3fc6f8ed737480b14c3b29264436c2a\", \n\
+ ct: \"27536ac60f3fed0742401755065a14b9b3d843d7c2bd238afda4f65477ede6f876004c4ee925\", \n\
+ tag: \"32b4ad70afe7faf2ebcaae4da09eb5f4\"\n\
+},\n\
+{ key: \"2eace14fc5d5504fabc48fd52bca93a2b3ed34abdcef6a529c3342698d8547cb\", \n\
+ iv: \"00bcbb9844bfc734\", \n\
+ pt: \"011986fe4276e081bdbd609df781d1f3fe9587d69583618ed345ba30314618f74b08c933872b93877cdd2fd572995cd959b5a796c5e373fa0c1bacde78563d6f733fae4509f982ba0320173e841f8013a7f0fc237d62834415240a54e3eaa0f87404fbc588fdde41132991ef\", \n\
+ adata: \"bcd5f88062178e330a7557a7258686965277ed0bd38c7058c79ec0931b7099274bbf192fd7f3559189e0dabb5e\", \n\
+ ct: \"77e28f7588658e7f5aeb853514a6801233a8f47cf6a0cc9c58f4f27efeede7372ed709fc2996d00489781598d07d60739d31c4f94418c0c9167a6e8a2890d0327dfb4e859b7bd318b20981c41e9f7ae3ac5cf913c580753bec952569888b40d1436859251e7edd0e15739dd4\", \n\
+ tag: \"b8b6e8746f46e1a621d9b1aa9a43b31b\"\n\
+},\n\
+{ key: \"b95ee92c838a3eec473d93ea196589375cee85ba4a6df86014af547fc0fd0172\", \n\
+ iv: \"9b35a8f3ae6ab4fb8813aeb8\", \n\
+ pt: \"dcbbae009ec973885bbfc09beef8cc0a49e5f8d2ff83bf6df8f901b3442fd1ff92184989284c3a6e48219a092798205594cd1d0bdae0dcb5e7f05432adcaf9bc270024d15c908dd9b161d68f7d2625a0febc7eaa7befcdf3975dfb0c4a472e2ef25dc7de74ad66d6aa26779689146f286f3492b5d6e6f5aaca55da00e0eab290fe087fede4a7\", \n\
+ adata: \"0860015c79e8a46fa4359b5a84288c71294d8a6c43f7bd566604ccc997b8730ead576c66ea90df2a459d515b65af20dfdbf7994aa66920072863a5c19e9c68a15798bb623bc5c298e80cdeced30521c5216d3ce689eab9ea38c754f82ed28e8d3669d920d83008cf6eac9c457fb650e72ac5a9a5bd65f2c4afaaabe00f1366622b8d05baf6e0ce0fdbdcfbe3faec228a7af14a5304004c101324b134990b4a298728d9f360780e46a8a14e2ec6f7ee157e34b8aa482929a7b07ee925ff781719\", \n\
+ ct: \"821ec5c54a5c96dc044756887f1795c26e23391dabedb9b3860cda2aa920eaa52663f38678af1a98ddc23198e99394784da55642471185344b58f69c688e9993744fb06512a860cb91049d91e4d940de1b7bd9e1606b5d8b4b21f7b95593efe4feb94aa00b4dad0da92118b0bd157eb1dab58bfa6305bcb8f5720078bd272dc90443aee4226d\", \n\
+ tag: \"231add1f55ac9da0f3cb1fd4a281f9e0\"\n\
+},\n\
+{ key: \"fafaf4fd4a86d99514a8e3d86297757dc841308e16ff725853aaacb6d5d2a467\", \n\
+ iv: \"f29aee91c39af9b4aef4be67\", \n\
+ pt: \"7ba3735a23cf85ba673963c7dbd8cfdeed4dde1c44e565005e618915f3163dc42e23d234f3cbfcb1d628a3ebd9cd85c9df714d603f76943b34ed9d770c3cd20321b7f2bb2be5f3ca3d037c8206c8fbbc5d22a7d94133ad2d97b1618e2ded4a4c7f1ab78107408029cabf48a7fc18276c86bfedd899c62378095fd2cccb92ab\", \n\
+ adata: \"f816ff43db54c639dccefe8deaa9efe1e81108349ca52dba1cb54ddfc23e59838146b8f042b76a47c47eadd5a11151a0aa2c60133ae95b1c1cc67dfc8fa185c05850b1f4925b1a38247cb39be2423d72aaed505ba441291827a61894d0673468\", \n\
+ ct: \"a0dc04fab46f21024624f993a2df72777fd0512af595764cf3775cd3c2ec2294b4595a96d784489e7601a15e77ff138370d26009cf69d25114d6cb67d27964301fad9e142fb7fa69ba78d2cb5ce8d4c32c49ca6858056e67698ec801ac2b0de1eeccada72267fea9a0098c594251d59281dea80e4ddfd81bf54d00bbbad865\", \n\
+ tag: \"162098a37ef2eb7d415ba0a7c1dac9ce\"\n\
+},\n\
+{ key: \"ad9110c5bd0935ef20065ab0e20f32ac0950b679b7ab5fb01ce56c1617d01262\", \n\
+ iv: \"7d41eb671f478f72\", \n\
+ pt: \"7b358304e5d86c0ac576623982d5101323f6dc81d44e9dd7ee130a7ae5b4da6381d3d6a25bbadbcbad4a827ee142c73f6a373c9a1d211c074ea3c21f672ab4399ed868d4d89c1dbc99e78143aac1a8e9b08a49\", \n\
+ adata: \"646ce27fddf8d3aa573e789c6929736464619a4c610375bebcffb079ccf6f1add00fb05923e1059ddf3c0e5b2d8e57c45675fef32004b8b847946101b10d9f80bb2017f4c22249103a9fd3f1b5ef\", \n\
+ ct: \"0136c48f0a78185c310af9b9f3253b65aa88ce8df411c9976f279ce41ebb8f3dc9f2a85668799ea60b7873f5e6ba0d95ad1289c7654c6c0c9f90287836a268778f6d9bdd86f93814a8db5e70d3feee58a16c89\", \n\
+ tag: \"ded5e2732a9410186aca3157a66566b0\"\n\
+},\n\
+{ key: \"b24698da3cfa211d961135c70733e984f207baa47eed270c21e9276e22dc0bd0\", \n\
+ iv: \"4fe2484d0fc6507328cde11d\", \n\
+ pt: \"978737353906e0722b073133cb80d4bad4fe8ad0a7242a72086ced06e342e4ff08a86b7a59a18a2a811975e71417bb1f30\", \n\
+ adata: \"39e78d1a5ac6e6d0748d2706fc0058591b7f542be3881c806f3e9479e89abe9408496ede2d1f8058d7f9\", \n\
+ ct: \"7918de45b6a4e8cbc459fd08ff8e99572973ab2c7ea836520682e520714490235f095e26a5387eef9a368d2d4b2a38875e\", \n\
+ tag: \"fb8ba743e2e282d38e5f6c9bd53a3df2\"\n\
+},\n\
+{ key: \"4a6cde378cd3868365edcc4d5b3a3a8f423c978fba4433e2c2084187479fe1cd\", \n\
+ iv: \"b33329c32bf96c64\", \n\
+ pt: \"9ec1fd5f8bba71368ac9476362a0411296adecb0ccf7b69d407e1a0bdfd04562b3582d95fb0c3451fc13563092bd5757ac887373b3bc23fb5992ba20fd2375582745b4f110c2519b8565\", \n\
+ adata: \"9b89d01add8b7640764d5ae28af705edb91c9b795ef760efd15f2158053a8e565957286c84781b82af26b9a7d302d4c1d8d9e634974b\", \n\
+ ct: \"c19e2f764c346e71331cb09455a35c49c916add37991b2c74787d06a2a15799398236bad9cda4df73f5c71ab58107ba0ec5a89947d95cfa03a502ba5a6845e49b9656abd6b9552ef0bab\", \n\
+ tag: \"631be7def1ec94aa9c2227734da87e6b\"\n\
+},\n\
+{ key: \"67ab2edef27d2855eb1f497f015be4c68c7b68c15436076b26b3862b6fe6d8cd\", \n\
+ iv: \"02fcca90641c219c7dd84734\", \n\
+ pt: \"97e0a070d0219ca4157a8f3f77d0454cbb577079311a\", \n\
+ adata: \"d1bcac52544e49912a8bb6323dd1890ff7477df4548815ee1ed64d742fd80d8ef3132c34fa02267e89697874f233583cc81ee63ae91614f8a293ec2faef82721c86817ae05bf225d2dab318c4e\", \n\
+ ct: \"5ebb221c22d650554a961c6c63a2c6f72721450bb92a\", \n\
+ tag: \"9c4250715f8603eec66e366664d3e3b5\"\n\
+},\n\
+{ key: \"ab2cfa821110fc4297120943a27e2bc0a57f0c32ce84dd920514cf6c6d57855f\", \n\
+ iv: \"2f94a9cd49d00c452492a5c8\", \n\
+ pt: \"01c331181857b84a9c17e5fea4f7cfd8397571ef9d0f6e5b41bdf68e9a029f5095670e5ca1dd8cf64a6c10d1a9d12881fe33fd18cb49cb330ad8efbab3f7703ca23e04ef394c3bcd610c\", \n\
+ adata: \"6f48e3a6d2588ce2b1fb59582270786bace82878d37d217613433664d4e8f57769020d2f8607a8b3d997e0885f757d24a9e3fe61b39843132b9411dd43afb5f142514e1d4b582a7cde1ca37a59a8ef82fee96f7f66601059cb79f800e5a71d6482455688622b84c47bd885cd979783478dd0840d85900c4410ab575cc4d3b42a444332b70479cf256b258bbddd866a34725aaa9e77bc\", \n\
+ ct: \"d54e8b08e2f2bb33dcecb4be524d5ac2a91df407dc184dacc848ecadf2255491e12a6ef1ff83eded5f96badee5c250f4cfacefc21bf036dfb34647bbff2d7c8594c81a4d17104f81404d\", \n\
+ tag: \"37e1ad63610248e1846339029beb7ffd\"\n\
+},\n\
+{ key: \"9b9ccdd0fba79ab6d86ad7d588ba1d48803bcc291fc70bb6deb42685b541f5aa\", \n\
+ iv: \"22d72cd0e5095791\", \n\
+ pt: \"70fe04ad9558069b91325b4712bef137f49cd06e2c57bb4f21efbe88abfc516b2b6ade5d1b95ae97ad27\", \n\
+ adata: \"a2fada0297e501b8c373e43d97c05a591c50d6b36128496e89ab745347572669d99f30eb8eb10953709f2ff952013b9c6c321c538aa858617e7fe80e1c0c0d8711f643b606ac302510eed8f2cd01afa0e601b78db2ec082893cb12f4\", \n\
+ ct: \"c90c70c68bac8837dc4e433a78728ab288ab81c1ba328d3e0c26320031ca85cc112bad85bff3a3c25f06\", \n\
+ tag: \"ea13ab4b0eecc4b9dd3c260f84e69ff4\"\n\
+},\n\
+{ key: \"33ccd14fafbc369fd633e6d105d7577d9cc88b9584043e430c95daf269ac2d19\", \n\
+ iv: \"53e90340719a0578c09455a1\", \n\
+ pt: \"543751d2a7\", \n\
+ adata: \"386fbdc8e8240261b6720f547e89517a4ba30798897e315c4a0cc47cc2cdfd006969f3029fb540bcfb3e5aeb910fc684928a653fe5a4798e4eff4d75c3c502cef8\", \n\
+ ct: \"2c47ae7630\", \n\
+ tag: \"f0bf9ddcf9c6e0dd22e68164853280f0\"\n\
+},\n\
+{ key: \"bf05f46a94068f1e1b38391b805046cd03cc15b8765b53d5990bbcbbd085da87\", \n\
+ iv: \"336ebeef023ececf\", \n\
+ pt: \"3172115834081b017ee20b4ec9ec51b2548263d46267ab785d81d6124e9d6975bf7e5afc1d19bfd9edbbfd28a61663fba35d\", \n\
+ adata: \"91c16539fee12a88072d02cb662907cc41cf0529ccfeef8faa6b802736270bad7510452d42c543d10be1ff22527560d3bf74b6621329fb2489888f46f8545149395a321e79f7bf65bc55b5e75649089af7d18027e2a7bdd5ada039b475bed5e050\", \n\
+ ct: \"e1a0ad78cb1b8bd65f25e1e7b6973e14402903306d19d2c51abfe886c9831be530ea9c34bfef2e12dbc75eac1ba577f7ab02\", \n\
+ tag: \"decfc22d4c1f7bfa58eb6ddb491c326b\"\n\
+},\n\
+{ key: \"59196601a37fdb2872aa5afd64589334aa240b75c8717eb18729ba470bcc81db\", \n\
+ iv: \"653e4c65995349b61439e393\", \n\
+ pt: \"c1a4191425624e86868a062665bdaa92c2dd97946b73605edc0392bb7733d2798a7ccb0388a7ba8f9c14203269a76dd75f508813c5a3436ef43b07d1c581f0d3bdf8888ba1730d15f87670ab896ef13ae43f470e2721ed6dfa5d18bbdb39819282199fcf4c3d97a4bd2a3f56e559afc07e\", \n\
+ adata: \"f19cb5a2b551a23a5bf7eb53bc4df120ea93052fce1c6757c774b6658db627ba7d1bd6366edc11ed1209de81604519ec307695de9376638e59ef1308eea2dd9b\", \n\
+ ct: \"008aec21f25e01591fe016b9851125fcfdf09241643e0ab567d763a8fcd3cd19ce7b0a822a94b4047eb8a8e7e69d3dbb437a433e0b84644cadbd5129dcd6216ff552d3765579ddef97a617f74fe6f5b401e82ab6c8cfe9e3817ee6b20369ccb2e4cf0fe2cfd650a21931faad9d2a220aa3\", \n\
+ tag: \"a4e04e60ad281fda1cba27e1d0b5b1a1\"\n\
+},\n\
+{ key: \"9012d5a33182db402bb5ad1938197174e425f88819f17bd16488f65a9995d2cf\", \n\
+ iv: \"a140f35fd0707703fc8ac593\", \n\
+ pt: \"ea0fbcb41a8e59f8cc990a102031eab6b25d266dbc720b2e5c42bdf86da2e483df2197ce85d6aa99725835aae735631c8856485d2dc41da9ee716fcf3d77ca8da1c9da3da7853016cedfd029a3ffa84ebe23504bd2c7a5b6afc8b9a818e6471b165646a69e81d1087ae821\", \n\
+ adata: \"5fa2e8ccd0e1b6933e047473b3dece7451b7a555c70851a5cd3ab69d626778ddceee3c0b544319880d1c99cf623eb67ce06a139762ad4363406896ec8371c1c61713c95686750bd1175bed6a3cb9500e7f007ddf258563b00200a94d9b2ce96de5e88617db2790e7cdd997c1\", \n\
+ ct: \"bda92b27190ffc451b60ff19b745caf2de63b4e04c0182f82bacf53a010c5a80dd3e92989afa0677b02d9b12db86f4e8ead8ec847bade006992c1fc0879e86da632b9396b7923676f4be7ddf7cdedddbc64333653bce54b6e2238d85bb571890c1c410a3c1e166232278a3\", \n\
+ tag: \"c134f0ba371eedda08f6bbc46fdd5d59\"\n\
+},\n\
+{ key: \"a9e5494f58fa9205d29e2640c74f4d1ff4d1e44159c708a58effa5558af4a6de\", \n\
+ iv: \"d3566e4a50e3cd5d50676fb0\", \n\
+ pt: \"efae8b6354ca80237313d6079e73174a733d906f137660378028ef59b438a884b77dd2\", \n\
+ adata: \"9e3c913adf0c4e2a1f66bfc4c4bae71ed036289ccc6497600593684f6c88ae1b313b6a49b80acf857c59dc8b2caf54e322e6d3b85c7da7daeebd4119808a27ce854f68465437b5bd2d8408d868015012b41eb5a407b2b2dde8cb27dca2a0c2fafeb681be0891c84902bdcc681e562e06b3d5cc516d9238991969e65944ab7fc192502ede330d8c4144a4a68f09040517963c6ddab9535c6fffaacf176550d49ebf83c54b5f10bd45ac4940905ceb2b3894eed4bb895b3f\", \n\
+ ct: \"3ee1aba5d83f41622c3b6987b66ab0630a31659440e18422726296925c58df62ca452a\", \n\
+ tag: \"15fdfeaae0107384af29b9d4d4018b62\"\n\
+},\n\
+{ key: \"a174a17100e4504d0c8d4f5d8ed21c6ffad32b6888ad56a9598923e1221af85e\", \n\
+ iv: \"ce8e4f4393087d070a627c84\", \n\
+ pt: \"5c485f22d0572dea295112be04d2fd1d6106a0fdb91898143ffdb765bb82a493fc1b\", \n\
+ adata: \"dd1c1928ccd68d6039888f5bbb335a2fcc979e1b64678ea59352b9f0358703b315b979e17b27b0ec421ecdf398f01f8fa6b4968ee9384eb7d49d24d4140263dc5751b9d96337df178bb708b82e64e7ec6498eec9511c3e695ea67b4e35c00e660356c8aafc82c0c3d04f322cc250873b5cb0245790897d13ea9385c3d03714edb8eb094f159713b8ad349489\", \n\
+ ct: \"e9dd1899e8d359c12b7f110fc1392e610513af75da9f4b1e95f4735d39f7fb1ba801\", \n\
+ tag: \"233f697b4d9e087838eecd4cff10e102\"\n\
+},\n\
+{ key: \"22b8d0d94c7979f1a93e00b9ccc231e63e63169a71aefe2da451c812da89624b\", \n\
+ iv: \"d3571c2267733d90\", \n\
+ pt: \"b45535494b7b581231af0fc4c4da7e5972de3711de548f133395de89f9ad7bb3900ec0ff9def48801f66805440548054cff77f5116d9ced832b6eae862b7c6ababe70e7210abb10455ef02fde3cdeeefbb6f11b820450bf9d41d7f\", \n\
+ adata: \"0259eaaff49d9218fb9f8f72a63c36982caa3c9dd2111b55b69e0fa79fae1bcf3c477a6a728d4875a0c67cff5886307e87f6d26004da421c61c5e92fd26f2ea77fb78af571e5a50a2994a503aa351369657065\", \n\
+ ct: \"a49997e4e72e066004ff7b23d6b77684b31471978f61dc44da7efe6322df4265ff7ee581406a28be4ce5b013315ff549fab9b871324ebc8cef36b0a0c5c80d6fb460042db8b04b61d8d755102eee9c3955186fc9af6cb50a7ddf59\", \n\
+ tag: \"781d6c1930aea3ce055486b065b234c2\"\n\
+},\n\
+{ key: \"a95e7a4cc203e2c9c7b3863976432d2daaa6d2b3f8146e262a85d6258dd6aa08\", \n\
+ iv: \"c86205d47367b3327706a811\", \n\
+ pt: \"765f2fea79fb1a68e7b58290947f60f6955ee9cbef6d41cfb52e5a2d1b8348ff1d2c8ab11214e8589c3482dd332a061cae3a15ae138933e2a115d9c1eee91e490f202e4c10f723e6aa3363851b7f6a7e83b6207ca53487f70444152565c6a4\", \n\
+ adata: \"a22583d18662135d91bc31557f2e7834079c02cd4082d2c34bfa52408abe28795e27e3512da32729ca82e2a84ddc11e377f742439518038ac5dd4e60ed58320b76e505ea68ee1f076c39deb15bf45cbb8d0215ec77146c7a0a0d2c4904eedda4e9217d80e442e4c4756b7b34\", \n\
+ ct: \"7be4526019a5ca5441202ea1934b1a9e2f1305cb80bb3c156f6179a4f663f6aac87a62237fc99ed78081e4836d03bea47fec9d38886a47be24d0e878592c2ae1341c97a911253996326a556d0856cd2b2b8e26138e69584c7b07722ed2758c\", \n\
+ tag: \"8cfb398c97123dd5b9f194491f387e47\"\n\
+},\n\
+{ key: \"631cfd4e53566dcb3675e63ba0b23cab30893047a45abc59ac0162738ebe15ab\", \n\
+ iv: \"39d23cf812954e6c\", \n\
+ pt: \"7e44c2e0956ecf459f775e2a432665575522cb80434d20b50522f6dd3f39c07e33380c5e40d7d74550134f52079545443df6f44fc99e73bca963105ff263c65dae8140584e9c584cd07b5a38af0de148213a1d8c6a7318ed9c9d9a5b38cc505c76830198cbe4a538e74357451f8d2ba778cae6741d99a83dce07bdebeaec02702f2d9e439fb86736a3bac78be5f2c6c4f0eed80c40c6488976de6b57fd9eafd54cde71e4f7a4ea1c21ad\", \n\
+ adata: \"9d9ea35303c61b747fc4ca8ec2756d236f8afcd3a608c77469f9d6ff7d276b3c0c4dd59e29a85f6c2da3032f37ac2c1bacc7389260250fd65dac45fcc8d4587dbe24fc94c777f4b792c86e6decd44851c5928d37801eaff0415134710fe489b8cf7e736c3f224578abfb92dd0c258d37e2adfba9a30d9ffaa5dd8bd7ced3c61fb474b54d4c29\", \n\
+ ct: \"d7b355d27efded370d6ba51fa118dc6aab63416de31a942dd871fa0dab260e15773ea206ad368726c6d4192fd8ff893cadaa6bcbeff0879a21f86981886a3e05451d6179a56f24dffea2969537116869c6d83cc45a6b8fdf8e0f5e936526dfa7f6244ca65bf19545df06fe4e90e0d4753556a2f16b8f5ead60b907d1b1913613c6ce20cf3459b79082386d5b14b1d78b1a05bb9c0eae4c8641e62299f340565a629a06280a1347cadfe8\", \n\
+ tag: \"f46b0b96fbc19f622ba5d56bd55ec181\"\n\
+},\n\
+{ key: \"e56f9ee49942cc43673c3cf8d3c5d3ef8ca566ae18a9fe73ffd0c421f44f7a6b\", \n\
+ iv: \"a52dee9025304d610359264d\", \n\
+ pt: \"0e4897bffe806c238ee3f55dcffd0fea28abd8d04fc97b52e37e70de1b5894247559cfc88461652b59d912c9ffc363089c1592ba5169aee59b4b0bc077105b8d2396e938665f\", \n\
+ adata: \"5d3f85edf1eedc577fd8dd8179751350b8810cdab474de194a6050552d050b\", \n\
+ ct: \"880d0d784f3d44a12d5e0c2aa86db03ec559bfb288b090f0c460377fa283e7dde5514362c8ead1f53dfc75022caf1bcea0438eabe2d6e4b3847bedc711560f707c3263b87df9\", \n\
+ tag: \"375d39c700dfe84d4be6d2914d5fce20\"\n\
+},\n\
+{ key: \"f94d7578a47645348dc1c83cafa6a93a4ad42f0f897287d60b12b249c940e79b\", \n\
+ iv: \"d1b6e9f24c530e65\", \n\
+ pt: \"5a2fbf1fe6fd7f1044337105c4daf39b353e378d987a4c7c265ba2e82662698a5ecc\", \n\
+ adata: \"e2cf8088c35d9d2991e8ba7af0ac72fcf71e0d8841a6f6370496a53f54956b03e9a615950180eb8c09595980a321bbeac1b6419ed85ccb8aaea66cf150aaf8c376a44c4a51437ebb1589b5266fb9cb005a169b476d682b94f2fc499e5a7c82e73e053da45e745777ec60e86de028cb58a6ad281333cffee780520205fe0eb541346861\", \n\
+ ct: \"4a8ec5f502a6a664baf83e353152a32f99a5c2aa262ca78f62ef78661956e54dbab7\", \n\
+ tag: \"6ae49ad94561aa00c91634b3fc031ab1\"\n\
+},\n\
+{ key: \"8e4970b48997cd491f10078702a4d5957f5741536109942d31a01b04b07971c5\", \n\
+ iv: \"25dbcc082427f3baed5cd38f\", \n\
+ pt: \"e189238e23b395366b96ccd6805ce286e4212576f31a44e5e79c56b0c53d61b65fe2eb94\", \n\
+ adata: \"1795dfebd81a1b9bdf8e91e78d5437c146cbac16ed554f21fe9df6adb2f6243b7e6854a510f3e10a8135bda7e74f935bd2d02a20155d894fb278ce912f8a806ce7056a2caaf9cc2df7af8dd1d7a8299fb6b22fa6db4b6f1e8583bb5129279053d7515d7b023cb784d5\", \n\
+ ct: \"feb03a42574c3ef339e87a600ed9fc23ead406c0ea894308d2840deaee9f73786efb4c91\", \n\
+ tag: \"4e8f13499b40d9ae231e876dc9cf68db\"\n\
+},\n\
+{ key: \"f7c9608be803cb22c65f573ef90925eee354b153f7e51862e3b15098f52c6a4c\", \n\
+ iv: \"26e28e9ad5efb6a8928002b7\", \n\
+ pt: \"14ae6a5bd34731f7aa330af9184a357b4f5c75c2ed7b8908101401d38f3641026a336cc2dab2a064bbb849d8a4616a9308e8cbf209c4622910cc92aacd71e9834f460dcfe8e21380f7cc94a1dc49f93fbb0edb73461ae7157973477925e1c5\", \n\
+ adata: \"0cf75a52939056d34f0a\", \n\
+ ct: \"404966becd6c3872c126b68bab33d502d1c1a0cdc1396b94191758e1585bb5717e1ec7670aefa1020b57a7587f84085fa280523e9962a9af23248c025089fccad73122729884c71d4281597818ec6bdb757c7693b92e92d7fdbbd152786cf5\", \n\
+ tag: \"b8d35d6139425fc80091b9ebf9a0b5b5\"\n\
+},\n\
+{ key: \"38b29d1b14121ca7d44c8b8a2421fd05ecf664495771c597677b88df3a0f6071\", \n\
+ iv: \"9838f66c6c7288eb\", \n\
+ pt: \"bee75cb71ddae4f5fa3b7485c880e38952b23d8aef824e9557a5c0202cba42d00171e12a741c3a0029928c78771ae1fcc659b68045237aeb1a9c99d7daf74b54c86c9d8bd44b11b24eb742b7dd56046f76511f214f88002ad22851b2b4c1ce94f6b7b21cc2928e75137233606dabd22c70f4d93c803b35e635e1d641146924b6862509b4323c99e2d5bfaf08a850af59c6c717bed10936e01c3d92df4d072ef864de05f4f2f8ccbec16923c89a2884c6691c44c643\", \n\
+ adata: \"6deda0b7aaff9dc0b8dd51ae636d26dedfd821dac5bad5653afeac88fdc2b78936dc41f251cc50dbcd18e167281d4e496509e24bfd7cb48bed28ffc0543fae2a79a802b9a3d73463bc6f9b214a1cadc79bd15d47e6ce9bc5e24d4f09fb668f\", \n\
+ ct: \"30f380c50c9d6b4bea920ff43b66fd162dc3eda29c82fe61a15f530706e79a51ccbcc6caf27ca5746624d003a43b7977b5ce4f95b419068de7aecaac479b3150877067284ee3211fe7867eb67d83ff4e907c14f8bf93551b1842cf911bfd0616e0bcaf20abbdab38323a13b700359ff7da5eb52360e0179739fdfd3a21a1a0f510dde66815b716971ea1313e2ff6e257089860e6dbb6038eeea269494bfb4d32953b2e611f2b1a356368218de080ccd2e824cfc41b\", \n\
+ tag: \"25a4f3fb501b00990a552853ba4bc4c2\"\n\
+},\n\
+{ key: \"48ac4398167d538eeceb5fc92fc5aa2c606e09b8c5b2a45f8f51978f5b7b901b\", \n\
+ iv: \"f3b979746602034e\", \n\
+ pt: \"19abf9b4b5\", \n\
+ adata: \"c562d6fbbbf487b884d4fb9af8d56a841c359c96aba4ecb7808b4a849dec5afe98246f864557e8397c4a0bf86d049d21486c589bdc7bf57452ae28be527f3f65b2376194e3e2d593541441983e323915a7cdfc2528e7d92f11bc639b24398c7448586a3c275c084115a6a6faace006d18f08c645bd3836dab71b2d0b1a80baca3c148c5a8a12851a910165c4ee30430b818556eb22641097ede75ff68349fbc0ba800d937a8a2c13c101afb9966ffcbcc216e58b63c5a1ee13e28c3c0543ced738e55a\", \n\
+ ct: \"ece5d42c45\", \n\
+ tag: \"6f17c8fa5cb2c563e790e3e8da93cc48\"\n\
+},\n\
+{ key: \"eb02c44464e278f313a607898675057da0de523b9d4658d6a08330dba8cb4d6d\", \n\
+ iv: \"2e4dc5ffa09c348dee33651b\", \n\
+ pt: \"890c43bf042c3c76f3a13c7996086f5327cc9d9ff76d51933a2ab00af75ad39045a7d7fe3ce68676ed42f993e72cb3fa787a80d9ac82462d19a1a9cdbf79e4967cef2817a56f24ce89d9bd02c9bec5f744c0d59490b349dc58019ecd50a0a48ba72a90053d4f177784271f07fc8efcfd95e7b3acd6f4bd363b5cdaef7f1cb45f6db5fb7d34f7bf2d1ea73d6d861e32005e65548821708e6357a1b19f13afba6fa987a2061160\", \n\
+ adata: \"b668702c6e45d29e1bdb4d86e5a46a18b8d8ff29b944324f\", \n\
+ ct: \"8ecc8a0af7ddfe27d34945a91b0551e2783f1d64e6cae3f5160277f8d7daa38c3241d7589fd8f2aa56e2b2fb325daec3fc6650a120853340e7791dc811dc6498533741d8a442f3365badc0426f82b51d964a5d033f4b5546577cc8d25f060123f55ba968e3dc56d944dc9f498cd66332eea841a9a90ede8b0bb7db83d66cbf5d565e975ed8e14c5288edda52ed44257241e27a2d4f0248ab2fee922a21503ae3d9c7155df4ae\", \n\
+ tag: \"c27ab3185e9b4aa9b244f1ad0b0a37be\"\n\
+},\n\
+{ key: \"8252772eb303ab5c9a5a3035ac20a55c86dc1da290b7c5d617ed5e87c39c753b\", \n\
+ iv: \"86935e4f690765fc50cae50e\", \n\
+ pt: \"9cce0b029a799c17fd5374cb15b51f1c6281e2f9ed2207c758778b5073512739\", \n\
+ adata: \"758eb24c89f3fbbcd1a843808b171f06b76abdb7b8615ad1856e716f7d21da84df1017b4a75eaa18c1a715d792ac6f7038ca0a8db5551f94ade5e696099840267fc5d6539529229fb9f8b3978e547906a90fd990e15bb59fd45c61c2c5ce7ed12947\", \n\
+ ct: \"3b5f1f56296be67b2b7b8c9e16ab572ec599ee064ff7cd6c20e46fe37002e48f\", \n\
+ tag: \"2462c1798c34c8a3bc20eda5c0322209\"\n\
+},\n\
+{ key: \"93db7ff26682b4fb9309285d4085409ddab12b722179f034bab38c10b940ed87\", \n\
+ iv: \"26846c63dd502df5\", \n\
+ pt: \"beef54cf911a4256bf52b6b9277b4168b6d33380332937f22997d9b01da46cd05c1d8c5881739e5d0dca908be058fd0d19cbd424ddb5dbe16b67eff99ad52447485080dd8dcd842e5d8bf9383ccf39ef28d403639fb68e6f2da39930439d9df69025\", \n\
+ adata: \"aeebaff4e28afb63540b52f53c85cf038d80476085c1ca73188239ee40420e812477efa5dfd171ce0973b3a5e42dc5d931e17535cc869b19cfe7dc18bc5bf6e2f2106fcabe88c69aadf72c8b4f3629139d4ad780b3cddd3d94cee2ac2868c1d58d9642021e16d724e305b4027333bb149dab7b0b1b2634e498bedda63520323fe865c8107a02ad3b2bbab83093ef721ab82587f10a9f69960ae9b3f8846829c4d176e3e5dfad\", \n\
+ ct: \"10d7ac0d70a6ff31d02f82ee0e9aa182c3dff5b05aea849e7fc3a34816f2f207898178beb8d696d33d7ba1b245b94a1d2757e1679ea4a593044fcdbb893eb7bae4e24eed0d7f75421fc7798ecb759302d76c626217e400d53e2162cde51a0a2e4472\", \n\
+ tag: \"494f30cf4414261990767dd37631adaa\"\n\
+},\n\
+{ key: \"4de08f787740ff3a5cc8e379dd25acb43143c42a6cfa81b005fc5e126522856e\", \n\
+ iv: \"c0c5f5288d7cb674\", \n\
+ pt: \"9b46b0d9415c9c6d81513b070745e4a018377ac5643aa2bb162528fdadee1bd6c1d26f88963e3549fcd4c9dc6849f94f58e2500a461df07dc95cf56057bd9daf134c92c853d57771b12fe85e3d89838f88148d6fcbdd6a58e713b3bb33c7a1f792ae0e399dc403f195e8cf893d019ac9db3feead899310fb2e4748cf74b01a1feb8f7fb354fc78244b1568a1f90b8e8fb8d3888b9dbf9779b1454a661515be49138d6595255ca2588f63a93ef074\", \n\
+ adata: \"75359f2955133c8ac4eabb0a9986116d063b353b798502c2032873e9074b1322294641528c580e962e83a199d62e16e433bd468ec5d22e869230d144ad0d36edfeb4ce302649eb1a6c825bb4c5fef1da825487daac73e4375d4cc0877d4094832ef09407bfa9ecc13661c2bb95699e58fa889d5533828a55845c9b66c80387\", \n\
+ ct: \"37d22c2205ba63adc764bfdd3e4b878e653c4ebf8011e45898e83d23617d2fa1d0fe411303f60013cbd74e478175738644d33a0331da755c0310a347669bcfb066d39bb8bb3640d852c319fd54507bbc9cee32d6b52e1423c09955a868c5a755c1bcb7c4cb3687c009e812d71295d0e9788a654a1e1708738e3fed117aab16b8a9240a4ef71f3e2395a06574fd51f52dafdcc9fe8ad9590c78938dec950638968d0d24d395d583c71c1fdf6f8510\", \n\
+ tag: \"558ea1f3245b6e49f3e8cbd5dd28904f\"\n\
+},\n\
+{ key: \"bbdef429f146adfd02f99ea76b96dbb296b7c94d04938e9de578bc2e3a4e0292\", \n\
+ iv: \"e08772e32ac81272f87a6029\", \n\
+ pt: \"48d113c76a8161072d142ac14fd8b03b10710ac00ee4d539f61267abc0abd80be8c5eff075e25980ec91608b08bd23d15d9a1999d006f7bcbb48dfcb1f89eaa1abc640220349d3e4aecf4022438ca87411d52aee682feb90deab178b80f4721ba77bc45e18f7d58a62303522353384708ecb67441a2124148b1e992ef7aa8a6502e2977b50929327345285982c127ad9d2e6f935be56\", \n\
+ adata: \"bf69608c9f2533f1c23f48ebfbc180a8031558750b2a846355089b4c9f8200b2d5aabda6df0351822e7b9f32467265f1e4941ea4ea\", \n\
+ ct: \"b8a688bf0090ca890197a5ec64263e5003da48d5a9650091c53ab6212d6468658ce7d414dc8b9e9cc63f2401affb3745a6130db6e70820e61bf2ab1d9ed53fa4e68c5485734cb2029287e406de78c6788da8ea2dcc7e60df404aad9f65c391818563cf40c7326475ec45871e710982ddbdf96d3b684d83b636735f410679d7d322d22f0f352c5526d0b3e39781bc1c57334cfcd9ee78\", \n\
+ tag: \"7a46802bb9791df059896ac8af6a1b6b\"\n\
+},\n\
+{ key: \"4a2f4de34ca689b4fa899f1e6f00aed4cad7bfb1713f3d618ac4f33abbfdb23c\", \n\
+ iv: \"451432d7ed9dda9d\", \n\
+ pt: \"dc1c4b37c60da356ad9cbff507204f45fc6dd489a04aed5c6ea0e527eadd494ca0467f82949ee87879cdef2e48ccab5b378dcf45ffce359196be2bec1ae569e1a9a08b5adc66\", \n\
+ adata: \"4184782be0d9a648ab1d93448ea4a8b343bd484cada47fad963098a3a8060158bfd408a398cf597b0d354c8abfa91b0c\", \n\
+ ct: \"66571b3b8914a8c9c9c49b294862a23797fe8f2438924c0a18cd50e22ca3fd1598962629bd35911e3e6e4d0128bbf5abf756d538f6df71e014d53021f240f997b891248625aa\", \n\
+ tag: \"d4d0e630ac3c90f1677fbe632e8f064a\"\n\
+},\n\
+{ key: \"0814ea86680125ce92990a2441e16440160b3c41171e33d64835e70feff488cd\", \n\
+ iv: \"44a6aad52a558d67089c2dfd\", \n\
+ pt: \"7bb96574e7dfd07cc55d72530ffbf156ba1569f81f15c010f3d5acf39fb31d9938824403f9e4a1\", \n\
+ adata: \"54d93f3cdf6d617bc5b4b2672d39ad8f0ba2f02d1121e84e7d2ab7740c095d711783f4a408c2ea80f3390bc117cac0338c5e770d3883757e00f6dc98a3ef1612f8ca511187a0b7f0c12bbd3cffbc85dd33b4c106b05fae044b7ee8845253e424ed817b\", \n\
+ ct: \"75c576f0341836e4451f41aa1c92607f38809bf0a5624e959204a29080861a33a20bd55c976aac\", \n\
+ tag: \"b751db0cbe41bf24663b7a92cc8af219\"\n\
+},\n\
+{ key: \"274d20b0f545502332bca392333c627217e11ba7aa3e04559bd1f7989c5066b5\", \n\
+ iv: \"3e312b75e2bf4e7d2850bd28\", \n\
+ pt: \"10027890b7a1948992050bbd9688cfec1fc1a62d944c1c81bc4d34f08fae70f7b4e3ced5c76c1f05232255b5d0229af0be7a665c16b9bda36c39af95b17ce8032bdbc0d528941fe90f0229977d4fc9fc7814d4e805496633ce58e661f0d9531e\", \n\
+ adata: \"8e396faa61669d4fda0ad96499a94c849caca6824f56f109265f9d34baaaa1e0e5f7c27201c76fa2f5d08aa6b44ac99963715f92d4a42a36b8d3775ad526256f893f8952f8d8d396c9cb5eaa2933dd8d620f735537d3dd09\", \n\
+ ct: \"288ba0f3af548d31111e9a682aa5f128ca5bb309404ebba545e9a4a0c265a697b904625af706bd932dca8931f749c1c27bc322cf96e9fe7487859dca0f943c6560247e9c8153e38d53797fbb90e7101ba91726e3d0c842ee08f4b5d4cef8a8e8\", \n\
+ tag: \"203de04df8653ab16147b764008586db\"\n\
+},\n\
+{ key: \"e19fcd425544cc9dfba318a445a4cd7b197890647098f7d08c58efb98d171401\", \n\
+ iv: \"b062b12e2b347c81\", \n\
+ pt: \"d8252c205abf0aac0d175409b0577c90d514930e97a166f79eac5e63e7bb0101029b8da820bb2f07a0a135cdb970e8a6966e476ee69f6a9ad05a3e169b1f407e95ad973644ac3be0027e1f247e2e7dbf16bc46f9721ed08ec37531cb185beb0bce5e26c213dd49baed32750b4fe5e57504ca49b24924b80875572fa7a93fd10d8b4bfde26de4dd15874e522e5ee6259355ebdd4d3ceae398a4a17236ebae4b62448f5d2ce115b252431b87bf\", \n\
+ adata: \"ce40f9f3908dde5c86e13abaa1f1f8bf8bab2a13831b0acb32f27c691a837f3b5292f2212b12775990be4b53cb990e219c1ba3fca8b6d6411289417ab4d5eaaebb44e28bde768978b824b1466a32d0772323977c1bab3a23b644fe6006\", \n\
+ ct: \"c50795cda9d048d69fd27efa1fbae596a27e8fac2e015b7eec238e6b9ea24d071008bdd267fb71dc70cf953256ebfede53ab340e7258be3cf8c3c872f488508de02ae5c435cd6e0718d50f98aecf84e0e5c5c4885a50215e594efc092e80c458eea097a7a893c9076d6b6e6eefcbfc1fc39572c6e7a5ff36163eb3501ed2b063127db9a0cb6e73c9e950b095e7111c216ab79f3fddf39ea178f379dee432a8b315f754e12ebaa88c90787650\", \n\
+ tag: \"732e08b177e710085a8a3ecc87654e2f\"\n\
+},\n\
+{ key: \"c327332670efa09c79cb0bb5faf0a06adc9c341dbb7d09561c9064116c6058be\", \n\
+ iv: \"af0bbd2540e1ea57\", \n\
+ pt: \"1b07647919648bd0bac35334f38c0eea91d674642c44981b048de9295fd0ae3d96ad0165f7f82f100781cb88e291bde09cce91d50bc9\", \n\
+ adata: \"953d215f82711301d6cc1fca46d02286764b8c1cc19f52f2f3c2600a82abbeeba7d484f7e5d4a6aea45ccf9042fbe773213885a73e19d9215407d831340802e8820e9763cad53b3a112685700175c951ff4219\", \n\
+ ct: \"ee280564432c9b442f7b4f7fe16fb962db518585d809930d11511139805125ff4c2f558b965786f4b6a08367368abf51fd5bc3107038\", \n\
+ tag: \"123266c3c3862ecb08dacbc1b716bcae\"\n\
+},\n\
+{ key: \"68087b4af80d1cf574b85153bfab83101cf84c92c961b9dd5e34e9b348c148d9\", \n\
+ iv: \"b250772e4d614ffcc0f21c1c\", \n\
+ pt: \"f521dead97c7c277eb0ed115a55c6cbd768a74033c800732aa77e5a8ad537be0\", \n\
+ adata: \"8270bfe44a47d55013df3da30aa98196e4df7efced99efcc819d0a6522fa81479c296b25f5ae58724f701ff97ba00095a32260435d48f9fb4ffab5050f\", \n\
+ ct: \"753679dda79c13d63601b5b1ef4f8462360542b70ffdeae75b6127e959b8d518\", \n\
+ tag: \"8ea903731e76404eb0fad396c90139d1\"\n\
+},\n\
+{ key: \"45f809225566e2c68d8999162882b620e6270a5dad034672e8dac142e1ee7d6b\", \n\
+ iv: \"359bb94901167a93\", \n\
+ pt: \"ea835d8dbd71fc98ade0e90d101d2089eaca84d83b2e5a066793ac9962d28ba698d80152ffae55a412f53d60ca468380\", \n\
+ adata: \"15d4b615a002461f36694fd86489cd4b6865dc214c618a01a39cce669ab622ba345c149f841b3cdb17e9e268f25a347a9c85f97f40d0056e970223c0feeffa05c5982a399a857f014e7463aeab374f9528b7160301888ca24e554256f1c72da58a0caf65b6202c7991e4c5e5963353cae9ed7f54f12b0e28b26671ed12e272b66fe16c8054915c3748924e234c9e85df3803f5786a5c3680ce21fde09a284cba47eb1c1cb1e262dcf9992671491755469a4e\", \n\
+ ct: \"34017692907bfa66e11e148ec547bab41daa6ba4a46a51ad7b87d38b07743205a591595b0b97ac4cc74bd8c12b015785\", \n\
+ tag: \"688cec6d9c63425345af3e7f6b9af09b\"\n\
+},\n\
+{ key: \"a1ec7354d69dcc9268a91ad94ec1c5006e7a8e3371b558910adb4d0517b9deba\", \n\
+ iv: \"e6548a53eb111f3670206c1a\", \n\
+ pt: \"22031ef3847ba1b536fa2730a4a0\", \n\
+ adata: \"5a2b30b84691888477b48db99c6f824bd5068e078cb952d56c5c89ab86da0c7a4632e48fdb4ed1ba92d883e5e4c34c07e5e51c8fc4a591666a426741d7a5bcc626fb56744490a76329f811919c8acaf57a4fd3bf72c89b726a284bb82713d04b3a3fc2098b6fafd3331e\", \n\
+ ct: \"782b0958c58a8e486e4769da2ccd\", \n\
+ tag: \"1f01b8021021a7d4e2f3b300d7e3fcde\"\n\
+},\n\
+{ key: \"0b9a0eedb591722a88fc6fad7c26f21f42ae2dcecb63a7f5397bc5abbb8a710c\", \n\
+ iv: \"7f07952694c70b0e5cd9fdc1\", \n\
+ pt: \"6381c8da6832b0722143fbd1a935bc618be74892a7adb08fbcaaf321dc5fc8a7ea4c617a8221f860ade843d7ec22d0d168b3440bbae98db811521ab7512d0af0c376a4feb6ee590c9fd4492daf97767a627f944fa4b99c1031d3663841f0e15d70abd0cd60d763d87fd474f90f9efb61\", \n\
+ adata: \"98ed75ccdd84c8cb31266e7a8c2663fadf9cb5ab22ec9ebd65eabafda7b80a64f6edcc3f3a86ae4d9c7e0cb53e108d420d89ae8aed9191407bf3a6cd0862014d7c6f9e6755e942f1e7c24bdb399ac0dd3a28a24afdf4cedd48e5a4c0cf601234a2d3bddc406e8cd7d33a6c7350fdb6eabc6eed8ffa1224e5710129acbb604b6b2806c0f7bc34066606eccb8fbcb2397d\", \n\
+ ct: \"87430d18de5b7641dce09d8e739e4cb029063a572fc5f7659c23701de4aeec09bed02478f8a2477a59f8ab3b395732e867455f028bda0a40866c63f7d1a183c05487af2eea485303aae24502bc21209d605c80e675f8ef1afeb3c9dd4f0c7f979754cc08f773e3d9275aa7bf43cf1b27\", \n\
+ tag: \"e82fe05eae413dbdb51f75babab11465\"\n\
+},\n\
+{ key: \"991e9f325e7cadbcec5fa552b404207f62ed9a0cc63d2a8a7241aeaaeab9f0aa\", \n\
+ iv: \"90a2bda4c397a3f0207811d6\", \n\
+ pt: \"c38996a72d753656c0bc4372c1e2883dcdbb1107bdcef2ee560da74b54ca80dae05128d16a439bdc2fd1e17734f7abc9\", \n\
+ adata: \"0608bb0f60ae02904c775f95355f3258160cd301c9153a657caa1e6e93bebdf46d0907591085dcb9e9da\", \n\
+ ct: \"8c1e6e37feb69bec3d58f8cc2b7353985dc439191e545862a5fc6279104d25ed9eff3a5361209c4549859ea8ab7bdc82\", \n\
+ tag: \"6cd919b4591df578a30b5f15969672f1\"\n\
+},\n\
+{ key: \"51b92f662a0d9c8c15e096acd2713bd3675b9653857c93d47fb705f524e0a845\", \n\
+ iv: \"abf862821da27da7\", \n\
+ pt: \"5cc155aa50415f24318e6306c4c806dc4097f960a5bb9e1c969272cf\", \n\
+ adata: \"acf3bdba67b940c37c28543355b4e427c83b9e337e7a2e7c3e6016bb49a9ec21cf75aaa53d8bb1852eca78da8f9d069b8c2c666dfdeaefd18b86f953d603ef37c8f70278ef13a14429a421dc90a6d813fafed3e17aa0ba8f43e886aae3bc7967f157cc7e758521dd49a9e808d9a5c9fa0155a483ba489c6c2028e9515951ab4dc5f73dd8434d073d\", \n\
+ ct: \"3bc7caef0a68bd01f4f7542a59fe0275ca5bead8e2a4104c66592de0\", \n\
+ tag: \"211397592e599c76d0839d5ce74ab725\"\n\
+},\n\
+{ key: \"41bfd40d4ae8e7cfaeb61886e2718524e686923b1f9187e12dba72389bff4c2a\", \n\
+ iv: \"d14bad4afbd8cbd1\", \n\
+ pt: \"ca\", \n\
+ adata: \"f6a21bd7b3164339e20537ac19826e69d9b78c16ab02ffbbc6003e77d21656187d0fa3\", \n\
+ ct: \"f3\", \n\
+ tag: \"6a9ee41440ee169e40e0733459e06d56\"\n\
+},\n\
+{ key: \"cd5ef5e22850cb79737235d44a45d2f8c03968171a178071be08417e85ebe2ca\", \n\
+ iv: \"ad080427a5243ff2\", \n\
+ pt: \"2763ec05e3b00c6c9204f70438b6c82d3d7ec2edb28255f97603429c4419243c4c7ae2bf2dc307089a4263142612abd62974318e495203e6fce1261848af40a4a67376868d4d897013fa41b56695414e6eeba22203fad6d498fcfc489c66da6f2d916ffed9f7e159a099d44ab55c815120c05947f48d82b8cdd16537abf70e8e458a1cfbaafc28f1bd004355a75100e760\", \n\
+ adata: \"9417b7db58aae20f8d80c89b2625b999c66dd0b16f06b334e025380ef60d978ac5d49df4b480b10bf1344bae8fe865503444e82f1eda7e4f7214\", \n\
+ ct: \"146394cb26000cd67c888cc54736b7fbe844dbf3eda934b995f125b2fba52f3f5ee876d14dfe5fb6a978672182a25995bf72bcb223dc3701c9724ef1848d1fb284d0bdd2f34da4bcc8ab8556770cdc1a1395f4b7e06a06778528c00fbfb223dd27e6b87da83cb931fd3cac1f9735b37460d95cd505d097c005d87e15c01a9de0df8cb629f26a6eff06cf676bdf1629463b\", \n\
+ tag: \"2f3c38653c9647599995691e9ed2f034\"\n\
+},\n\
+{ key: \"c44223281d88ce1ba0c22ddca93b025d55cb4a90911e5e88aa1a27bf8f039464\", \n\
+ iv: \"647458419204d53b\", \n\
+ pt: \"4768bc48f3765e0f43a7cad77650a64d75b78c25029c59726e69b61017c1c251b202a73f253c6f6e6922a4c68eb82a05425e50e2552f0ed6494b68da9da02a39654c4ab37a2da6cb\", \n\
+ adata: \"c48a568f4be67177c4a0a6cb2535ac0fa9970383fe6aaf8d56cc3c8f4a52e843d6195f11dc2368a370421aa9843a461b6dc19bb4612cecf3645ac10077c7fbd4367486452f794c4a8dd6e0516e9961bfe51d0f97e99364c64f479499364f443ca2490972ebfda57a4619b60f15b4bf4ea73228464f08cb44368cdf4a3b2bfe2e00d7fdb2cee91e2f4e712ee76d4da2f48f3923246f96e22b5dd07c4e1461bced4a077a473170e2d02dea12f3\", \n\
+ ct: \"d822e80ad4fc2d785b5c66baaea4352e7fa8794711a52b61431d93024369f19eba82a011c9cfe16cf02235ce96b1edbcd37519da91e5985ac143bc5ef9bf6343bbaf337b2cfdf66f\", \n\
+ tag: \"96c27f74f27da841957f994295ecdc0d\"\n\
+},\n\
+{ key: \"5cb4a41d8b3c23c80f5adabb2dd36621cc0348e8e3e42f54c549d0500133f987\", \n\
+ iv: \"52aac1e9654d6398\", \n\
+ pt: \"90130ac9e1525a3dbd4c69aa097d6cdee046d205b86567a57614d4d5de7b5bc9152bcbd42d4f1b132b5a54716d0988bcbed894304deb4bcdcd892a148f57e331d53209140cd19df2ade0f4a4fa7010dac1a4d8f722932f1fde2fb8b4b0d02c3e7d\", \n\
+ adata: \"473cc7395c05d3b512eaa119b550ef790ed4ff80062c50193ea38020632bceb2d06f636245453e5281fe4fbb38be6b3b578e220fc2daf44c590c767ebdeb42854619d848e6f279c049a9\", \n\
+ ct: \"7e5fe08ecb041132297085000814d2b5b7403f8639973c88b6bad67ed1a0d67d7f03218ca3fcff6ebab52349dcfbd7b7888f79ab9754631a12d1da3345fb39e79e24fc3d233b727bb600f070a4d1b5afc806645f0d2cf7b61db686c4eeda84f5b4\", \n\
+ tag: \"47b82c4e8909a275310ea469e2fc61d7\"\n\
+},\n\
+{ key: \"7adb08edb1b6f38f5b54b7acea258f5d480e3c1ae0f45a22183b3da08041760b\", \n\
+ iv: \"7edb05f9098129b69079e1c3\", \n\
+ pt: \"b624055301e9cb26c95bc3034b79f9666440f22d41daba34c3f5a5d8fda1a8a9c68f0a4e\", \n\
+ adata: \"9c86570d87912c7969026259efe9ebbe1e56516ef1\", \n\
+ ct: \"df3473dfe452d059b3adde9bb37b400c54561badc7a47205468c2dc10208e34b91a614b1\", \n\
+ tag: \"c8863be761c61b48b31ae19ac5aa55a2\"\n\
+},\n\
+{ key: \"a50d62e67df9571a5f676f059a7b5fbfd752b714703aed11b8021265fca4d4cc\", \n\
+ iv: \"a956d321b68859b3\", \n\
+ pt: \"11724a85f18feb8962ff36734394f342224e8d25\", \n\
+ adata: \"3a24d2bae8e7c36f7954a59f750430518edd989b327fd5026cb723d3f1667f508138364cdf191aab4e420d17bae61a9cea20da2315df9d1ce28d5df64735f3ec39086ab7243d1630ce7125b15045eab143b7dcecdfa527307ba8368ef692a91cc308e333614a95ab67aea623fa39ec8633ba6a5785b7fd326b21f1ba6d9d19583a5bb46377c904b55bb1a28c5f\", \n\
+ ct: \"7320c65da4b504c9a5848002fc0d86431e6e806d\", \n\
+ tag: \"22016786821a44788d3f9cb1db651e04\"\n\
+},\n\
+{ key: \"c293764d6715a0371532383b540ed5973a9b927753f313fe182ae4a086b917da\", \n\
+ iv: \"2b243bf678e4d9399dd3f868\", \n\
+ pt: \"20b99169758ecc66137a381bd9fa9bd462179aa83f98e2af3bf5bbec88bcd7f4e2a19bc13a8632e2d9f96a50b46f3225927d08f9ec130c9b415506f804bd799735f9f40b870231b2bfda0586e74ac9630e8606479ef0e6b5a2fd01c67b1e89eb99f978a367d00d7c1fa3783b2c56374cf4120d31ae060d981c4d194bde11b830ce9c0ff94f19af18439f40e1df75cd1c\", \n\
+ adata: \"6588a887f9cd05deec94c892891f9ab4308dd70af64617e0d5c52c2c58b366279a7edcdd51c09385baee9908b7249f0e2fbb2afa5e3dd7bc7aa7afb4dafe3bd4f9fbfe389539b361\", \n\
+ ct: \"bb76be508fc0bd1d8e5226a8a4ada0c7c506e12fb762233b3038ec385ff8ef5d8cd2cd75551d62e7ce11bb63845de18259795ae4f2ea91c608908b2ccb95aab239aadcb880db396519552bba736ff162a2da80e178f039830d4a0132f8fb673e2a4acb07483c17814a5345c80c1e3e0eebd30cc122866df1c471ca3adc610ad88849bbfc33f8ba462cab7f4c861d5b3d\", \n\
+ tag: \"b20311a8cd62344299f0726452e23855\"\n\
+},\n\
+{ key: \"19954aedab338ca489bc1b8c2bff20c2968a5758c06345553d4a04140c1e8d4b\", \n\
+ iv: \"0bcce6dafe520d38\", \n\
+ pt: \"e065f3a8ca8148422e55c3e54533cb40fc2c35ae04db7799be24773b3f604bc13fcab7f584997f78c94c1da793868c4da86ce090e65570cc7b54cf1efaf6b6bcd928a231c27a317869\", \n\
+ adata: \"7f87255783cbe3deb785\", \n\
+ ct: \"cc82272536b73c7272adaca283f67a8249d31bce6c229a34449a9c595d4bf5768639e007f6bcb9b082c820dc482c88dca5d17390562332c4e36943dc7a2cfca3d5eb12f8fd6443823f\", \n\
+ tag: \"f062d81061c7e409922ee4c1de0b4465\"\n\
+},\n\
+{ key: \"4dc527b25638a48a54129f8e66aaac09fb214f4667da6caf5fadb33fd613e8d8\", \n\
+ iv: \"470d898cab263730\", \n\
+ pt: \"7bae99e9ac6c5445eac2f8201da146f1530aa38adccdf12554a922d05a168982c36c4199252ce12c7825dd547192c8d5446ae658f08efef4b6fcd124a30ff4707f5930a9c41cb4c40bbfbc7db01a37c368c032483705c69e5ff02f4c3e081df7ed073754e843805c9a46c756cf240dea158e9d8df9a81761f35f3b7435\", \n\
+ adata: \"5394dbe7be52ccb002924bf33a676a8f1cb7fe03b6235ce760670a427e64df3c3cc88ea90d76811d435eff9beac002b128d3c135403c965b6bb1c927e65be91091a38c091b3ab1e1feebb202fd48786379ba75e4ea2571074f9ca74ef39acbfe44b59b09d7081c1ce5801e665b4ca3429eb3f5b944dc1a8ec5b2fdd22d172f8f8914671405c27a09f37498400cbd208d5c1754d80284d3467d1dd2cb4291de0b4812d99a4068\", \n\
+ ct: \"706d50beb5a00a85ec3a07ae3063129d83e3429d8bec7a78e3493bde99cd29a6920d885b1095d16384e2464b4828f47d12f4effe495a01c56ed2d11839924251645ee9add925dcab86961a0bf908bdb243513d0876eb9a5dd7d936d850ac4c9b0dba6c4d0f33770df2ee3725cf016725ffe04a8d98556d577962bd77fc\", \n\
+ tag: \"138772f612489a3cae6e414c27702145\"\n\
+},\n\
+{ key: \"f551562598e2f2ac00cc28d41e5480885126229bfaeb6f1d51571f4e4c39c21a\", \n\
+ iv: \"ff6f0250ffefcabc\", \n\
+ pt: \"ae966f5cbdbb91a7b10b9e67116f4a648b09406d32a5b094031d2371ceea7b190ffc2be715590c9ab6627af6c8d16843c95bd881945b780cac91db450804d805197791331dd002b100f22e4b188feaec020448f88b8b31e0082c54c0e0403c15a193265dc08739c7913f6311b4\", \n\
+ adata: \"63d007a7ba1bdd07d75296bedaded3cbcf2f238c2c25aca44428c2fc9a7305ac8e316ad42d4bfaa2735143ef5aa0592ad25604aaf7de6db4b811f0a4fde69bd6b156\", \n\
+ ct: \"b71e13e390b43cbed4a522ed5d3a969b4c0603f542086a5f47a3b4e724c52b0f55e47bb5498c79497888f77b740ff83eb83e19eb9cece7fcd45680ad4e6b6a5f0b8ea187fd87cb96b8f772325cb3c32c89e2cc17de18b2a92c5bd4498fc3ebef2fcb65091137ea34c9cbeec692\", \n\
+ tag: \"daca6bd5a5bef58f553b1d511d4b031d\"\n\
+},\n\
+{ key: \"8e610ba5b642df32f7858c7f1cbd26e13856438497cf5266819c6f7f8b133e65\", \n\
+ iv: \"9b7ce85b493adfdb\", \n\
+ pt: \"1c38863b2ca75531d769e792ef375533f38dd305cfa06bfd68b818ab02a0e5d70e8deb2077f248a004774ac76bfb\", \n\
+ adata: \"f03cf04c\", \n\
+ ct: \"0b633fa139cb48208d85af2e0c948eec03d322e59394e0c4433c4aeae6538c3f9c0c1206a9dfd7b06c16e0e272c6\", \n\
+ tag: \"8930b4ad7b29e8ebd903c31cce84aafe\"\n\
+},\n\
+{ key: \"c7cc6db8d48e31172c991df58dc45481961b2c20cd91cd9f96439c16ba6ca1c1\", \n\
+ iv: \"16687d0e51675889\", \n\
+ pt: \"0747ec934923d109a5f710d571d57a15e9c222a842919bf95abf669d29eb\", \n\
+ adata: \"21da1356b336d37f33a5e266ad362c9c33568d02eae2a694399cf8c8cccf75e93b680356bc5a5252a3bc3d030b9ab2cf6385544852de8d8385ef3f37c6cbaa9c9a73b5b11d6095c8cbe098a7c8db4a56cde8b031126ff403f2191ccb7c4aa35a7054868877ee7d54f6cd259078d7f2a57018f731a7b33d52046c51669a85031a2c9504a746bc0d8b7214c5ba49f28c70df06bedef7fc31e074757d\", \n\
+ ct: \"5edb1e06aef5cb364683894435377919ba77840955b205a0ea938912562f\", \n\
+ tag: \"c378a693f6aaf89f2b0035fe08ad7119\"\n\
+},\n\
+{ key: \"9707315d321c74dc166b2d4a127feea92aaa07aeb4db51630d34fc29cda4ad85\", \n\
+ iv: \"caab19479a61fdd0\", \n\
+ pt: \"ded48a7c94819774daf320cf342c4e016c283826ba9f2b785e9aa0aa1ba8469bf8f1601beb0f41ec1954d028868577e196127fb5675208eb66ba9b25a0429a3889549eb1e887760da4311e755038e6d1cd20a5215969d28f23672a4e8799289173235141077d2e26dfa72f798b811d44550c16d661b1c25003c7d5\", \n\
+ adata: \"2c05dc96f7fa15bf1685383c7b44ce9fd96e415d102f52842c51d73eeb3175d5bfbec66222feb4be6b0d7f1774c5f4fd130bce8c9d0bfb3934604bfbcb0f74adc359c5d7c8ddad06f7f5d755c996baebb752bf9c4e9d87a0f64dd2055f2565176d1b0985d4ebeea1b7e7c8e62485eea833989ae03a08d65eca79970e95\", \n\
+ ct: \"3f1294d976929da4cf924d8568e1cd9d5be34091972d6b276226c83b0c45a7f66da21e5284878a133758e9df05e60d54e98e22dc9b419b0bb5525c49b495edae5a15e929e56222279546e02d836de3aab7c489959b6bd08efa1f171873feb324844fdeb48061a55c638d42a6a6ad4dc04ebb04931dbaedbecc9176\", \n\
+ tag: \"6f1311381e2cb025c24dc2ad40565204\"\n\
+},\n\
+{ key: \"5a387c9e88ed9dfe2f94238dfd03a2344c24b1ebdd7b41666c78d84753e26672\", \n\
+ iv: \"54405960f99b6088dac0f8ad\", \n\
+ pt: \"f848f8b2200612bbf64988c9cf8cc7640a76fcc2af5f413de1db4656d79d73f9a7b40991cec778f275e282af031e0f9351381aa0e72b6b1838d83d7e0c34422bdfbefa13709e13ef21008bd90db66231bc72935ea3b1a37b4a559c0eb2082171c718fca2499e0e6d020db43e4f6e9e8adb5363e1ab9c0af5ea311ce40f75c360b1599b3ab4fdbd14d2647185bbef7ffecb661ed70296a5b9f25137bae9ef8803500a3c48f4a108a7457ea0dd00e2068af4\", \n\
+ adata: \"a9d7a5b6f55bde6cc9a07b1d24e3b75d10ce93c93228c1f28fd3c21ccf05810dfdce1d6f089539625905cbe432b7daf31111a00010e5e3af8b97f2acb19765fed1a56b9001083469b7f23cadda5f3cd6e3ebdd20dea4de06488944359a51ef80a026cea494c79da70ef324e3f8ad7870cce2526ce135fcb482edc871f0a004b36175d6314320a1c8ebf7b2dc4c448b8c63aebb2a6381239eaf5a7534b62fd9ab7163f9e41911c1fa\", \n\
+ ct: \"ce51d98304f8422caa641c3d46ed4ecb69bd9072ee508e3a18163590e363f4207fee2f8db558c223e84dcd985a4c80c5e832aab9fc2aefad7cc9c3e841438bfd70b1bc7d765d359a6d6079a73a7258911765640e10b3c25441a5e8f084e456acbc439f6f1f3c0bb306604286f567f6a79b1fa98f19089e70eb76385ef8d393bb5bb8a7b77a8d97412bfa352bf38c1c2c8a50414af5448dbac286c6458b023e74e560dc6880ada0dab5d4a18744c0977ce2\", \n\
+ tag: \"fe3a028ce3c01dba6ec31f6b0e52c9d5\"\n\
+},\n\
+{ key: \"59f01746c56abeea847514e00e38941eed9b0dc98fc8645e324ef8cb2578a725\", \n\
+ iv: \"12081e8ec1cd2f4b\", \n\
+ pt: \"9d484848cb632978f780c3efae9bd18ea8c457fae4360916aaee8384eea62c1a053ea195bf0a3920fe299f85fcedced8b207b83be66231ddeb45c7ad23d99721348b2db0af7a8adb1453969364f5f032277cd85f009d0f5f0bfba4540d093d1a0889ee6514dd800447c3ada938ffcae88672b8da606ad82d7300\", \n\
+ adata: \"5811275085dd35835d7c582aa369d8aa0685de9e498cc149529837f7dc4e41e2edd2aaad00a0de4e22d7d4f88fa7b0c1f08793cc6e0fede0acb115f89e19bd109e98ef641cbbf951d7ef305ee09a8b3f9ca3c59c4999bacdc74d2eac1eadc64709e00dad2bcbf29a2178a9d85268c3e596c65c2e74ed3e8ec54b43b0a49ffcefeb204e454537fcac2c6b7cd273d03e37b7923b6efad430a5596c43062071c86bf47d043bf59f736b345f0aff01c617aebcb366b576\", \n\
+ ct: \"4d7373473ce1a75347e7a36df9a46487bb86ac3dc2c0e2f8fa524ce965320f6ef3d26a31ec38c7ef8a32c0a25c8f9d07698c8224c52fced2a18299cdeecff8954d10100aff31de3995c701fc98dfaf552be539bfc20bf8f4236e1c86250a959ffedc1ea39b031ba263a5e6b8a64a4201467700688cf8f11430d4\", \n\
+ tag: \"84fb9b123ad455002397344ee981c26b\"\n\
+},\n\
+{ key: \"950bfb98dee39f2137c8520df4b36bdc579f89114e7bee405b199991fe57e92c\", \n\
+ iv: \"fd64520f2d4fa435\", \n\
+ pt: \"56c6dd356712f9660486026fdea96a8b2fc6346777e03d6cf5eacfec7ead670153c931dc84f0310fb446e3ab2eff735474f420eab5cac696adfbb2b413e302a1615b63605e0c2eae4ca0e3f8a60af46d7d953f3e76c12d3db98a7804058e035f5a7d71b4497403eeb3f790b4e21215590e54f38b0dd8bc8eaebd089c9be17f417ea92b0cc7c9829a\", \n\
+ adata: \"9248fe69b69a42d9e0f5cae0218ce2c3d04b1936f16fdbff26a323e30fad0fa475763b90f47cf3b6c4391008dca6fdf9ea0431ce550727b074614dd530fae794fa7a407207fc097d\", \n\
+ ct: \"863d8cca50ced25d502b5fc73acfc635c97bbb3b79048c29788b920d324504cb86b0d955a03309f493cfbd094c2a15cedf8679c6e76b4fdb080d2ad421c13385b3e60c27839f67dd192596b8e77a545ca481414d79499f392f8dad2a0b3bceab58f6b8a2cde9328dba9d80d955c0684adfa062d725f113576d44943c91eccbcccfebf605e0d4654c\", \n\
+ tag: \"d28a683342e32cba308c9fec12961863\"\n\
+},\n\
+{ key: \"7192f2e01cf30e28abcfbbf0dea478c61039e98ae7832fa6c38a5c08a55a0d48\", \n\
+ iv: \"96c2920cfc3730e8\", \n\
+ pt: \"4c559814d223a8d7d3124a972cced40c9948ea9680530f178f7bdfa0357c9928a712b99e313d562a9512e043c8\", \n\
+ adata: \"1b9d6c7fab79a35a8745\", \n\
+ ct: \"dfac761554eab74e19a005563e6467561e5c6d30373f8da2f7d544763bcc6abcc34a1bf5e397732405ca2bdbd1\", \n\
+ tag: \"63fbadf4b522e3402c7069cc25eaffbf\"\n\
+},\n\
+{ key: \"20bb5b8dfa9f856c31c1413372054cae9b9a328ed008ddc669bd35b1fb736f9e\", \n\
+ iv: \"9d0b6bf7f165cca0\", \n\
+ pt: \"c485753aff7175158a545d592dd65620bc6d1aa5eb0f34cf57aa66a631d7b019276127b8b9e2156dfbeb4fb405505eae04ebc2b78e787f75c8d8481ad6cb73114aab66447835c8828678c94a7a72b275f0a80785d15da6eb5724ca3b7b257618b31001677c5e521d0311016f7694b4180f33149635ffe62e969e3ead840fd56b39d8b52941dbe39829e690471196c87f5f7113d49cc9cd39557367b55c8b4627\", \n\
+ adata: \"13e816683eaaec7dcecce92c7b21c5301ebb4e591f45375cbb094c2a7bd574eedfd35137856172ad9738c9e64e5afa82b7d3525b5cf6d8914451c3c3493700ee747aaf8b0972466ce4911b4aa10ce3c93388a06638af02469e4af10b9015aa5a938bda38628eef50af4b20d46f0d419e17fa4a426903702c3e70c4570302887801e25de093b230ff060a9eb6afe5560853609cb9295c27d07febfe0821269e3632c960c71fa14a8064598ef8ed199feddf4c41831e1cda402d1eccda93496cef\", \n\
+ ct: \"01314224aff4b5bf99379c4c6620bed11a2b2e72b3df72799d77169fea96031cdb841fb46e3313519dcd814914e6626ce9389d7bdd2eb98c8c592617c39577f0818cd3b34b8f17471f1b5dba39c8b29d339998585374168bedd4a7b7f78da3904518955751958520ef9ecc2970125ae9b5c2369fd8b5bf925f0d75d3d6b88b4abff39f6bf63e4560bcfb4fee24bf31b0a757ac8b1f3c4f24036b4a49d1d72454\", \n\
+ tag: \"95522c8dfe1c12c857b64eea34a47e34\"\n\
+},\n\
+{ key: \"9e687c3d97831d02228f693cac57378506c4945e088b0ea824bc4501044bf9a1\", \n\
+ iv: \"13a35410b72e18b82ff796d7\", \n\
+ pt: \"c1b92c181166bb227aee4f929d07e19476306a4cb80ca8553bf8b1e7d07f3cc94cd018ca7a61b21e7c84860348f8443aa7aa7616d7c57eecd93bc358d1218ce25f0ef89c4118e7f3db255472174664f825bf4cc882b2d2ed10b3471e64402e4ba310daee429d9c307a6661976d7a49578e81f2708c811d574c7ca1dbd67c40c67307b2021a25889cf0fe746e460a526ad853e22fd5\", \n\
+ adata: \"6ef2cf3cef0e20eb0b6e1fba02808c41168921bda88a101a8a569cd181f6499ea4e3d7f7e919745ec81940c2bda8240d60363c4153b62941f2d5a2fb344427f6a6d287ca003af0e0b81e94dcaa8d7bda9f16668c0b65633f83cfc7dbd8672000889f04a894a8644723ca14ac66d4b6ad883bfb\", \n\
+ ct: \"57c2c1d516459ceb296cd0236a438f009ad83f4ccc61f41c93c88b199abb6d3643aba93230cd4cf91e2feb9d653adbe088d9d1e319653aea6db568c6caa9b591368e4992ebf62a812e83ad7b670e90dc5f8c48e41e97b2ad1c44fa3afb148b888b9993d4dd26fe76407af5a356bdc55c3734b08e31d15a21915314e099893093caa05a4f5b02ee812a95bf0de32dd0f42d9fca84ff\", \n\
+ tag: \"13bc62ee5570e6e1ec299c447048441a\"\n\
+},\n\
+{ key: \"626f2eb38e95ce72707f88e76c430038df80e27e4c6aa2c80eef037b8a2d0eef\", \n\
+ iv: \"bcf4e2f2c0d5b7e1\", \n\
+ pt: \"ada1f47d0d082aa625f1a97a8fc3bc4c63f9382e18d8dc3b80007985e67c7bd09515e0f6af5fa8ba5fc16cfbd40e2b0ec82f4e1a168a3a4494c0d7c00f0452394e7b91a543d8342b608156d95d1508226df085526ced2a8111a3bb23971f973a8540cd6e80f1f2eae181af0a1c4b16d55f40cc9cfa9e3983cf97e3d3b92939e4738112e6467dd648f0068626\", \n\
+ adata: \"c1c263f4aa40e5fb5d55819b99ff62fd9e8b83ae246238b45c0c7cdbd076ca777d8bace9cecddf0296a005e479e544f46bad575c4f26da36b0acc7574bf03b1c660c661792878f9146c10e9124b244f8f3abd410b0d213b1821e6da88bfd981322dbc03a6cf4b891330b3265a3de4717a1abd7ee2c7ca742922370f537cf933823d70393df5d4ce249f2c8cc8fdb9d8469447ef5cfbe0cc41da6d44eefe861246cda\", \n\
+ ct: \"222e71623beca41010a389c2f5882d40df3afe5479c822dca35998273aa60679e41ed433cee5d4cca34ddc3d7e195bff4682d31b07cdffc5b69e62421ba51c165ae0de95cad7a88580846688961e4ec900c094b36db73081267fa002251dc00393df6d6ac760498e1e657f94df5c47475e2658425f9f5e0a8bb22c74f598c607e40abf4ef5b0218a3164e2ab\", \n\
+ tag: \"c6dc5b19627dff5858451b1fd5121a92\"\n\
+},\n\
+{ key: \"3e3e479fa7231ca5483d191df0e2b2edbf9ee43f0e6ce5d3220ec134af35137b\", \n\
+ iv: \"0f2137753a725141151242ce\", \n\
+ pt: \"6ba1b91f35bd4e802e562772d08069659d558697c199b9aff5a599e953ee3576a2417f925c6b4e8f78e311fca6128c285aeaf34650c8360e067883487bfc502c8d95523d6ef11bf20f31eb43b618247c2585ce76dff082060ca818bb97125b980d73f5d429e8c0163b8f01ef934cbf2e8372a20d\", \n\
+ adata: \"a3cf0445e6816dd717cad4210864\", \n\
+ ct: \"7ddaa9bd28eea1115ea5955bb2fae9aceec9b607cbe49d03e6614cbaa18e31faaaff6f36de70abcb0f2034d8d7ee67393040fbfe5cc0ac962a852af6f5c3206b063e36d38b2ca57d24bacdad81b7212004225f4a3c43e1517884405193cefe05ca0045d76aff598d82981ca743a839a336690ab1\", \n\
+ tag: \"3eff7e99d0dfd0633f9e75590ae7d791\"\n\
+},\n\
+{ key: \"23b211141e46739d75321d47512c17d9fba8e28f258705d1d7194979c0bda0d3\", \n\
+ iv: \"dd2307a369919c7e\", \n\
+ pt: \"22621ea803db12c776d932972bbe6f64b445a1e80bbf209ad26796337742689e8ea46722e0d2efc75094770375df8ee2a3ed9c3b6ad02fac50e2631111648f02c3ef2119a65fe5798e0cd3d283f975ec7022fc1e7bb0a94070ea6a0bdd6ba28bda0737725e26ff25f353f76bc7917f75631d50e6ea0b6dd8962750\", \n\
+ adata: \"42c034718160cbcc4ecdf7478f619215d355d3e2a4d9e33e249ce5409d0be12d2eb428aa06f7fa20adc955dcb6c56c7794592719041fbc796d553cb45667bc5e097ea030d60fcae3d693dea24c66e0a334787bc4d81f10d205da0980a416b45ab55a7634aa3503e1a4fcbf4fcaa8c74cba289a1a95e92c885cd9acb184f49d048e7c2fb601049c1238079a76ad9108e224ad798f014631b9b02418118cf402372543\", \n\
+ ct: \"a96495a980a6aa075fa4e8d9dcbf3447ee1514e9a32be911dcaeba5cf9f03593d443f5926ee4217d2843051345db16578b22ca11c2f2ff59512048334bc7e5e911e4b06cd80f0d3742b5e190dce5c776da8f1640e52d7e79f8884503912817885e5eab8020d6265b265ee0bcdf6ae967a134d2abbf33d3f2339a93\", \n\
+ tag: \"fc895731d7dd99762aa79c806af621f5\"\n\
+},\n\
+{ key: \"a295eb5ec308f17c522320061ec0186f66be05e0c86eab5cb5bb3f23ed562494\", \n\
+ iv: \"3e9e2ed1e3be064c\", \n\
+ pt: \"6874d63f180e6ba0bc5599d82aae118e59405e6c79a96adf9ad55b384bb03bdefa60d4efb43bc89394e7fd76283ca8765404f144ea26385f76f0e34e1e27fe001b45f39b206d741dc56554443eeb73c3c3c30ae57756a3554f56976196424f611b21e4a82e0180df4ca7ef66fe39767f234b8a88e6901b1574d16cbfb931f79b1353be5b714ab67e7d06ec0df129f9b8a112e8d93277d5026d3930efa3b101712b5d76192e796897d5b216e5bb683b20d955de708bfe6f33b0e8309801\", \n\
+ adata: \"a1b2f525adf4f36c0c7117450c973dd38a75c3c73bec46cd40f85b5482988c487ae8f9d7ac3be413500e7066d6625731e31e9f60adb19d5b95a6e0c3cd8a0c22a485efd99db4f4773688d58f9d630308353ccd3777b4bb86f4a1f00dde82f3132620022506da080a392a76edcf52\", \n\
+ ct: \"bc37d3a457ba07a2882bb93a395d919db2f6d4fe871c60672f18ab4f41f97a57f59ce5ca28b6d9615b2273a3321e6b104ab529f54ed9358bd6f345e2dc767f4e901a8d6a565cca7a0bc5d40767e6e0442de36f9de5d66482918f45ed41c624aa241affe78d6c9d4af3794697679b000a78d0fde96a9e09cee06f45ff78b91c8617f6694759ee169eb8397033195e276a7176d2a2da32f1fe0647aa83f787cca9beac401d0b15ee533b2471f95726006959055625a4226642eee2d2ecfa\", \n\
+ tag: \"ee3674c680b61afb904c7b2fd70e0d80\"\n\
+},\n\
+{ key: \"893ab4022f15879e3c632300d0a157b8f13430bdb9cd11be1484dc59c72c0f29\", \n\
+ iv: \"4ac62246208f045161292952\", \n\
+ pt: \"f1f0fdd63d116231af61f030163b2332600e15cf1e7d8c927a36fc\", \n\
+ adata: \"cc2b3011da0ea3e0df2ec3c18444a5efe6129f0b72761bf450cd1b82e39ba7d7a8cfd10deeaa5daf6464481525154c461f75564c842b0d4158ece977e891999754b66ce59216785d510c2483619b85167718d657b70b2353ae5fffc94cc6bbc997219dda9fb44bc7154f04f7d93d37c493096c56cde8627608734479879063d62df21ed45b2950574589f1e00a85e5da9d5fa220029ac759e5e314751d057c19439e65be5829903400929d0b898d8a14fa430f5fb9365790\", \n\
+ ct: \"ec7e0d7264f0f77a768e0f52d4ea086ce317cfee72f1143fcd9d82\", \n\
+ tag: \"9796025b2525ce66d25015e8935a299b\"\n\
+},\n\
+{ key: \"f30cc48e0198997c4310f299e775a7da444d99460937c78ce409e9fb154dbf1b\", \n\
+ iv: \"947dfe2f9e1e2feb\", \n\
+ pt: \"c40e770b0fffbebceb3f760c6696a60f4b49f7e29cd947289f39353a9bbe585619baf5a9e90550ecc6dda131b09dc5d02d2c423976eceab62d2b140bd1869f173a3179897e43d2d32129e47a54127ce8f155c359af6830844e9f090772b7daf6c25b457f9489b11d35ddd29401f2cc2eb455d5\", \n\
+ adata: \"411ff2941ad9880afd9a0e0d375d055a98f1a4a45c8de90d2d81fd616c182bfeb5d6ede22d\", \n\
+ ct: \"10654018203c77ed4c29e59992cd8dd1177b019562599cc47187152b4ca97a1a665138949fefc6b5d4f96cc6621e2a3f6047ef72c31902959d70dc4c24dc99964d2c553863f53deda0adc596d1e1a948d003bbd04c1f323e69e96ed46bdd91f1f34a9a8626a6ad6e8d504da0940dd63f6100fb\", \n\
+ tag: \"a7aca1afa99f9f7b333c341797b6976f\"\n\
+},\n\
+{ key: \"b7739b589593e777b8f093e4a1a7b4040eee120a5b9e9a1f4005740d05586b7d\", \n\
+ iv: \"0b09236da66f3b62981608c5\", \n\
+ pt: \"c7ee6cfdd8445b9eb99d4866d229a8d8f55ac425e43b15b5a2050ed125df3c30551d7194e551141b0da23a602e3dad3465552369fb25a593bf47a817b0c6f37b01553efb9a3301e8879ec7c268881916bfbc162a8326772604a870206c726a9130b20b478caee32787ac0aeaa491\", \n\
+ adata: \"0a98a0a322e47998f33261114de662061bdce4c3698926502a3c3b96dbf743b61b3bdaba5c33e2d69532b9c43fca4f94d48828cbea6f971d8b5a93bbac490f6080d5a9c74846dfa5743444149a7fac7385316de6314cc38d5d2972ee6f9a632b109551db89c3f7b2008b9fe62940884db59d94e34e91887748c08d03df9ca2420ca72ed0071971e4a6359ae2ab56d0310e6b2404cc\", \n\
+ ct: \"ebd9990dd5e87ae0f59da56b89e0c194f30f5c69a5c903960eeed8bb8f4ffd5a34ce639ee63bfa09e14cc68f6ccd9068a2e68bfbfa771e5b6bb05485116492747fd3d29a33a24bf4b6571ab03695fb0c9e37215d23898a998cd1502724cf96c65f96f635f7fe10ab8ac19ce350e3\", \n\
+ tag: \"ad04c0b16d081d59f6371b59924275f8\"\n\
+},\n\
+{ key: \"ccf0c4cd559dfc312928bbfda0b1b5b64b28e7fa65b7035461423a98f8e747a4\", \n\
+ iv: \"481fb1e6719286adfc79d9a6\", \n\
+ pt: \"a38ad19d267b2a5eea5592e1e4c7e0ef6a6d3a692958\", \n\
+ adata: \"88f5904c2cf7ad69f6b86e2404d0eb38a14d7c43b44b051caea00e819afe54e4b55ff6482e9424e20fcc00eaca4916960641ccf150132e7e865dd23b7f410c1cd2919f591880ba9eb45730cde82b5ec0bd4bd177781dc405bfd16e689113314e33d9214c7f0da3e23f6bc06a6c6d6786f5f7a99fa9da2280302029a36cd4ed493c7b01243f14401f1bcdbc2656b7664244fe7b1978a66cb91b3d1fa7b859c58d\", \n\
+ ct: \"7b39c5b212d34d521cbaab43327b41a2ce05d590044b\", \n\
+ tag: \"e1bb5cc027a4982e72c42342e9d04653\"\n\
+},\n\
+{ key: \"5b43e54ff9b42342fe50f2978b8838d51421b6423c567123b95714667654b766\", \n\
+ iv: \"6cc0d4c23e63a68d\", \n\
+ pt: \"07f72d929029285a82bdfdd508b77fed98162a1224efec227e95b4b25cbcd0c6cce88734c13f33219719058ba994aa78a91f5a2fda4912cbc67744ba63619972ecf6e3bf3e22be3bf2bbb8dfd7bc094992c37ec6f268208c70a3f6400ec5c56c0367a1bf1502e1ec14d2aaa589125db7b9\", \n\
+ adata: \"1676d44236a2d49c4de648d594c49343e753c4761c0dade77870c283c88652dedbd7693934c9eaf77a260d7e40350bbc77ad91e0ce2cf03730deeef6\", \n\
+ ct: \"b45e804c5cf7e48815a451f6a7887f07f81033f4b5d07a2293d4ff3e68678d5d40ebc91363323d2c84c298072a8b9fc78dfb6d7173f12fab145b67b9fa36de06997bfba9154f5895f107af581ffcb1df0698efd93e3e3b03f30831d89f6e9f5bd80a30aa0693be15db0b1d4dcbde501fd2\", \n\
+ tag: \"3e3a387cdec26d04a8f8220d61922979\"\n\
+},\n\
+{ key: \"76017bc421b45a858b4f17fb5ad2787e0aa33ba8ff626981bef32b585284f98f\", \n\
+ iv: \"d2f793219494dc69ef348859\", \n\
+ pt: \"4fb119378398\", \n\
+ adata: \"46602194b4596a479db252917c0d38b03f003e2e93d03635b98f0e01e25a413016da390619dfac5dc723d81af6164b1915b1182fdc7cf6ca4f38d67e356929b5d803fe65ac66837153f12616c13aab7ef4eb7c9acdea\", \n\
+ ct: \"ea3704bcf998\", \n\
+ tag: \"8598e2e9fc8f4dcded2d7191468d620d\"\n\
+},\n\
+{ key: \"3edf8e35181bf727ce08449cd769e309f1f108489c40b72ef4e6061e2f2f945c\", \n\
+ iv: \"1e5f5138c78c6dc8\", \n\
+ pt: \"4a1b021c1c7ec72283f55870cef3cca471cd92a50166801eb7d8\", \n\
+ adata: \"e9b7b629577c3248e7c08ba56759ac5166084228e4a2f4aa1df032c466daf536f0952d4b8b995fa1049ccb55c0ef3f6048bd81a0d9f3dae170f8b414f5efb65a95433eddb223df9dd9b649d2a24c0cf5107c54cdd237bef3f8067b591ffe79f707d3a215e069fb12de55069f4797a9c0246d630d05818e476ed6eecb95e2d8ed9c8a7ba6578935ee741740866ac9\", \n\
+ ct: \"44f54d3d21bfc1451d1789dfba499944562f42dbdfb0441cbc4e\", \n\
+ tag: \"b9137005049deb17db2d603fea96ac79\"\n\
+},\n\
+{ key: \"7dbac4bf4bd26b4e1aa62726686b737c7ac65e650b62659588355a2b8d16dacd\", \n\
+ iv: \"b8a9358acfb8724e\", \n\
+ pt: \"11e23ddb17bcac30dc902819937f6207790d98cb15878a504a7b4bbd979e1a99c8b144129c68cba305c9b4bd8d0ea59da8c0042158700be2c5a1be1ed9788d87dfb6bc3cd2c16e6e60e7cf28f9d526b078029ca46bc155ab5348b1da9fa3afc24237a0b06e\", \n\
+ adata: \"d2889cc8cb2bdfda64de7b7f52d1e99584f7b083a42d3d59dc2b76183c4ecf2fc8cf8f1161572848aef69b4e2afdb661a236d01fae2e8aead3d4e680c6e79d3a5c89ace970b0f10cf444d24d380650c432341f8516be258e50f3ab919a0ae491e36852b494e63d5f9d144e0cfc445abfd324bdebef21852928a946a9bd37daf5c2ccf6f06d261aa75d6b680c1ac15ef33978b3e803fa8e57d88e546812096f15343eca0117172c382d708633e41a86e68775d33e16c9589e833374d3b7f3720714a8e6c45a97\", \n\
+ ct: \"fcb6d709cd20aaaf5e3e7e274c2195de80ac4a16980e11ab4d5f767758da17e4b46a19459f1ac8cae6ab5b5a6bbb907d86cc00a5477acdddb50764c39419e89176dbc0b44718e9f5c6627b67b48c99b8159857bc6b25a196a193ad3d46bd6627e1a0104c3e\", \n\
+ tag: \"1b4faf310f0c0823ab9a9b5d092d0bf0\"\n\
+},\n\
+{ key: \"b4e5742f21e0f4e7d82aefb47088cde73ba4c706b476dafa3ada1aea753dcbfb\", \n\
+ iv: \"7351e9e3e99470149518739e\", \n\
+ pt: \"c56b87d8cce4f295e0392694e5cb533ecf29\", \n\
+ adata: \"2556cf246f4909cf90f6ab90f48945c7d1dffa280596cc77eb12366221fbc513421fe8930f6bc3caae809858818f47097427211480e1113687130eabad78d123b3b1cb8852941bc4f286d1dc854a57b152ffb88dc4fd35af70f721b4c438883fbbe8d26e56ae63af5f6e960f58ee50\", \n\
+ ct: \"7c737808ca164dcc19c0e1a8da9e3f614da3\", \n\
+ tag: \"851ace06e748e5d3b0f826a8b65fd7ad\"\n\
+},\n\
+{ key: \"c41964c0a48d497df94e7891f753ad74238018068e8cfab177f5612f645a178e\", \n\
+ iv: \"7d56aa96e691971e\", \n\
+ pt: \"a60fcb27e8cc7e39c658b15a6bebacbc249ca251a71e4c1ef656a2aa2f\", \n\
+ adata: \"ed850d5b83fc3ce05c549fdbb171490dc2893f26324d8725e5dc49dfdb7a20de9f9b6ecb22e28f07abd6fb428985c27928db9d449f6ae812693f46851fc451e59a56564967d3da74300db12fa8dfdf447015920e1f158222268666d36e08372bf1045a393ba5c7d2800241ac0652e52e0f92e4ed0e5502a0cb3dae9a3247462da1bcb18cae6185ced977021077f64e6882aef6c157d8e88f4257c4ee8947\", \n\
+ ct: \"f0456da1e2fe907f47c160cb2569840a9de83b8624d9e393a4eeb18d93\", \n\
+ tag: \"d05f6738e080380dd4fc5585d507d24f\"\n\
+},\n\
+{ key: \"0ebc5dcee393860389a43f945ad1045a1562cba0cf1e3e9fba7380b68aeaf0dd\", \n\
+ iv: \"f58ade9ebcc6c5dd\", \n\
+ pt: \"d76054c51ceb05f5213bdb298f15eda2d041899c44863d2c35dfa5bf01876e8b353f2bddaa45929bc05087c59835ad376cffc294a332b121b2f4c15b53e750d153b84997de052190be71cda8a06581d8ea196c2671f8b84ed14e7db3d64707be2a0d01aaffc580c6f5947591d20ed80231eae86377b522db84356aaee9fb9c1d46da3845ea6c329f34ed70f446ca13784d6a081dd5ebf3728205b291c99a77e779da4f6108ffd7201d08783e3483d9dae145c5a8f6f390d7\", \n\
+ adata: \"945cb328d817c42d2efe75c9d4591c84d6cee0cbef550be8ed1b0b6949188a52\", \n\
+ ct: \"d7630ec41d98f1097c9381f2c3dbc0efc94184bbd931b12930f5fe1b138e5427863c0b98ede0b840800d9fa8beff895869b9b259e21cf0856cba265a0af1f94f9b9b206f3c26c52b75b7803a20f1ab773810edb706b76a9c23b815e9fd879790f18c4170b97eada1a6cd42b15a4cafcdee1f8a6a4ea2c0462d4ba9a3829be60b0abfca15982ab3baa8bbbc2d41dde65035491d5ed52d897174a1d762a3ba3ddd150a7cb8eb3674de1d35d2b77baca6d275365d7a34f0b27f\", \n\
+ tag: \"ef1f14e9f1c45026c66018c5c4b38c50\"\n\
+},\n\
+{ key: \"957ad182b0003148f1926541cf85aff46c1ec6b54e3d72d3851a1da962b5f719\", \n\
+ iv: \"4e6a6a1a6a37a5e8\", \n\
+ pt: \"3ba7dcf3b1a5bdd1ef27b1f79e74b3c650e6894629c18aa7cbb36a07f5c23ba7c90cb93d624691acc4694a34dd464074d7a89083a59634c0fb6ea2027e3a2343672df9c67e92395df5a7b8b53f7ded61585fa44f1cd01f2c84573017870c88d3fd4fb1c13b71e5c01069b3\", \n\
+ adata: \"a2a1d5bbd66eb1e230b109b602f139127b8110efe4a3d6250d9be3ffc7fce9be937406f7bd1f04295423b9752c4e2eebcd698cbec738b131d75c074d420d221548b9dec7eb\", \n\
+ ct: \"6d4f339e16bf3954704fab845491a38835eb61733fa31889e7ec6699b8cc4a3bb47facea6be94f50e9eb716484fbccf8c5f98eb8a297c9a9ca18e01101b11cac21bd2ed1f18a68743f4fa795272c2d4188111ae94e192a8049e7ef1ae788956e0d7bb7058c6ad4daffffb4\", \n\
+ tag: \"63685790147fe863aecb668902ff3286\"\n\
+},\n\
+{ key: \"2f7dc1637aff6f55d5760fe0a6af6371c37c911e6ff4506cdadf74d185775710\", \n\
+ iv: \"2b93a8b8ecf68c552b4b7334\", \n\
+ pt: \"824e772689c73e24e5906df3005d1b9a821dfcb490573e1c61e139d05574a08ded3c4eeed5b779a33f4dd264afce31661e761680cd68d38b4f0bff21a96e15603aecf72ab7e31a0a703cae5f1488038653e27f518c795da0e3126abc980e5c28d2f5acefd830bd325c2409a13873670e835a93e6d60ba5bbddb2c00a18067334cd87e708b5\", \n\
+ adata: \"d002924abbbf0d657acfc6d04bb9c2bd7ef1fa3840ebb9c458c11d99f5305a66667b4d63479f138ac798a9afa35d3d032bd714eb33d86b89db9d63f06c6fd91e1ac6a50d393e3b14a70f6786f47a5c07\", \n\
+ ct: \"f836c6eeb51960981362aa44959f0aea2d3f9d8493caffefb398da628f9f6c7728d835ba99e3b8658bc8a39dfc6c2ca3ea161b9ad0034267746fc473659ae1760c6d0d77027504b2446c64c23b0003f79ce47d70f3c1a4c022919a3b8fe77eb90f7ac212545348fff553bf4e24ffc477d7bef3edd99c71fb18e589fc8b9c53d6976c7af0c8\", \n\
+ tag: \"39f323f9757677d22bbf856ac3baa9d8\"\n\
+},\n\
+{ key: \"4fc5dafb9a5c820bbd236b85ef5783002763af89b5113cd24caf87be183bac91\", \n\
+ iv: \"24cbaa36322e758e22f6a20d\", \n\
+ pt: \"1e6616f525d0b9bb921e68b59449da2e309018bbbfb71a81622ebab3b87b40b9f3fb53079c026467a76a6b9b6b0d3645021ac1db82190b4579dae3d17a723ad0770771f891a9bb60955560db91e4daabd99b755f962f7d873bf896350beeb89a05176eb5d91c7ba07cfc4568a9203baaa44db1c8b870\", \n\
+ adata: \"1189c95dea3642df5cff2b14ea4d4cf43c02f7373d722d0b56c592b41ad8f3e815d326aa2368f844ded0bf33de7e4019806d9ae76c7ffc1643bab680eae047e7fd172f0a03c25d\", \n\
+ ct: \"db873bc21556ce48ecd2e60336961bd03fd7bea5103a51125327d29c89636b68f78ab60ddb9e023f274503fc2c6ac74f9ad4c16df88ec0e993c6a24c2b43d3ccb7aefc72f82f36adee8beee6e056478937af0f1f7559f7b92d4c328b94b75c24a9e1f72ff863e8403c0a0eb1fd5cb006b535b213709e\", \n\
+ tag: \"f9085a7dd3857f6ded956ae62675b45e\"\n\
+},\n\
+{ key: \"deb0e3ac16479e0ecca79e258c98be9fd858e7139e828dc4f76414b18eda5311\", \n\
+ iv: \"4d5f4bc38ec0f074e698a024\", \n\
+ pt: \"98d2cfcb2a6cbd2498226582030dddc6fe4badaa64ec3fdf22e4a2514d7eba3e2c072a46\", \n\
+ adata: \"5b05c2eb13c535216beaa499bbd5fa0972ed11e2d0c3f675c70a985ac69bbd9a0bd062752dec0c9a2fc8b1b00c988d8eb30e919e6ca3eb737323f0a9f99e386f669260c6e24a9d\", \n\
+ ct: \"e6ece3be3b00f21e51e2be40dc7e6d4ecfaaa7576286b507764701c9744ef04b99f417ad\", \n\
+ tag: \"b860f2e809accced478a99753b253488\"\n\
+},\n\
+{ key: \"c1ee04c1651f7910e2657a4047094a05265333b26fe57560305dde95a166b771\", \n\
+ iv: \"05bd94668e7b84fbe3e849c5\", \n\
+ pt: \"00860e2e22aadca3a07e28c0600baf538bfa7942fa1d0cad71a5efbdb1c3efa8f4d4cc4a00336a9ac1ecccd1e296cc4d3a1433120d9e54bc80d40007639e3fa667b65d8c0fc05bbdfbb76da7bd001df9f676c08f0836f4f792cbc4fac88f7b7762f97dc44ac60a02611972a4b8c428f4cb6f7c60fae65ef14d\", \n\
+ adata: \"9db5006b7d2dcb98f6de7be91087788d9ab7d47518ff3a55c64e4f8b20ede9d0128bde1e0731a18fb777a0634dcddea0e343f700b703a9cc516269ccb746164d94b5e9a720e83f3c97a63faaef01383de488c31a121b9ee3df894458c7a6a4d7739957947f01c890019d4ed697b3397bf2112472992b2c860c5d3ece2230a5fc94c088ded173c820bea294c491737c3a9d0f6a0abed1adb791a7b231b60e49e5d7c2daa8fad69616\", \n\
+ ct: \"e17709d82b1d82c979152f86ced163e98a700ba9c2fc8d3315d858c47a920fc35ae7939b2c8ceec3bc12e986508299fd5d3934ba0380d27260c14db7b1ce5f13572f4053360e0492a9f0f9627e04abf8d479095fc241d9a52c6af4601e21be2e33b54c1a9ca3b9ccce857db91753920d2dcd09e6c1a965a9f7\", \n\
+ tag: \"93a7a47d870e668c7657007bfb404e08\"\n\
+},\n\
+{ key: \"7c9fdeb6a8eb32abfe9b850c0c370c76ff298262e3f7f8a05c4e2a6119085598\", \n\
+ iv: \"16a517c54e7ba04dcfbbf001\", \n\
+ pt: \"dfa4fd180829bb2458680e960c6291066ea6e5eb6983714cb4858427ee18c5be0856d57ebfb5a47d9ca308\", \n\
+ adata: \"f9987eb54e479a7a4dafa54c8d0745725e1668110315b78d399dceff6225678d20054be28a742529367fefa5072cf5fb439af5e1de9ad3cfaaf7201d01b09d0322e273198fee490279f46fc3d54048395a52b28198aad505f442ae82c21d4923ee9f1f09212b7c43c22722808959d7f060a6dfe6320ecf590e6a1465ddef\", \n\
+ ct: \"0c1889fa10af370d61e55cdf49d3eef9ac0289c853714d1e6fbd340711bfbe9534b8f42b45328ecfacb337\", \n\
+ tag: \"6baedbbe7476cfb0ff7848df94145f01\"\n\
+},\n\
+{ key: \"d629d0f80169df73fd5ec5b0cd86d524b9e2bdc073e435cb54ec3141ee5c3306\", \n\
+ iv: \"81d6c26959863438\", \n\
+ pt: \"3542bef8c04ed058b314e06af391ee39afb06ddefa0816c2db6fc55d058cfa5be1ccf0ebdf16aa07bef3d29ce617f22366c87c2ebeae29f07ff1edb62e6b362b31845b409938521b7b247857375ff724c7ac026ea378065d43357aefdc9b2341b7e385a57c52ae50e9772b164991d545aea77edf5aebc37e7dec9d5aaec17152ffdbbd71585a5f7c1ebd02048f742c5cbc74cd5bd36af5bed14502976688786bac6218b9e4f7b744a503c22bf32fe92e16b4d7d09f08c9e84fd2a603a9983d81d8\", \n\
+ adata: \"6f2e2a30bbd12d12cf9b84159946a4aafad7a0ee1aec15eb6ba7df9070e68c741406a5d2b0e12f763cbe23f1fb80ffe9a80548a6f76cc0cd25296dee04872d2fa49ad5e6f1976e623fd75c04d1fc7fbc7c941007c2b8fdd3cc7ce3f7689aed547ef9764b407b8fd766c6ff41c766c30105059f42f51a2c06fadfa541c84e1853452e503e932bfb7f18d3da1415b3471d5f4f4c727fa7fddb8ed7a7e8c2943e8e91d7c815c6db61\", \n\
+ ct: \"85ee3fb13df27057e0e737b6ab1814767059153f2e140cc9f04e368fcc7372a5e92e65793ec3357cabfd12848b9bdf2a9eabc2b7aaebb6ee3ed3b44ae1a9217bd9936e7d6a30cf5dc9c1739fa01bc13de7b594cdce0a4d754631aee5d26642e6be0b2641eeadd1969f558333eaed78cbbc98a7c823e5249ff68d21b61dfabf7b14241cf699c78827955e9c56864d9fca48e0fb0c4a8150ccc3ff9ec71b10e3b9317cfab680b1ef1a6e4690ede8410e3d05ae6ad5c1b8175cb1a666171373d02ec4\", \n\
+ tag: \"daec41253945529deb87807ba3c481e4\"\n\
+},\n\
+{ key: \"f36f1a1ca8a78d3d64b5211c7ebaa109b0df1d77f5709dd59fcf17f187052f4b\", \n\
+ iv: \"b5ce2c2bca92744606e70f77\", \n\
+ pt: \"08b743d84e0a31f5646016cb79a8ec08\", \n\
+ adata: \"8a1062e994dad0b6eaad4d66b2be9d7d823d370c2036453a710a8a156085629eb6fba2519c1a9205d0960966277e61ccdc6d313a29aeae71b4416629a173a88f5a5c307724e7bba3b2480ddbe0467982a9b5460094a900ea202337eab27a8c3d26d2df8d563f918b089391242b734c8ef5cdb648f5602e089d0988fd4d4637f8f71e932a5b7e4c638bc3d625ff3ce3d4c46b3a93643bf5cd4717a7e2f3e12f3e1ee617f3a47e9b9d9e160628fa94\", \n\
+ ct: \"77040fa87c59f013ca5994c3e6f050f3\", \n\
+ tag: \"12cd184add28a6f0c735420e58b60bca\"\n\
+},\n\
+{ key: \"8151e2324ca8ef2843840b6ceb9ddfa05a3cb652d2bd39fdd33aacca69ec8bbe\", \n\
+ iv: \"0fef6597714beaac56c1f4bf\", \n\
+ pt: \"0d\", \n\
+ adata: \"b158c41d299389f126f44d7f2d4198c73a34255bb88d568d9e41ef18ee83fdc9af9791f179b557ca\", \n\
+ ct: \"1b\", \n\
+ tag: \"cec3423dbfdf9a3be272f85832afb9bd\"\n\
+},\n\
+{ key: \"0eb43c4f031286c59a4b200cf35bcac7c43c67d1365e706fbd6e152e507cb483\", \n\
+ iv: \"c1f129e899168631\", \n\
+ pt: \"5ed9aad6157e6bff\", \n\
+ adata: \"3b86dca02a157a3c1fe9a9bf98a054c77b910cd7f22090b1801b8f3a6fcb62e2271776cb8a9046b7621cd5a7da09486a503470197652cb66489d08e276139edeeee741d76df660c34cd844d5e29be327abbcccafeea2eb651a8d446c8562fbce852222cd823815da81f0265ff1d84a356bbaace3c0af0cd015a678fd23dc3bfc3b16f19af29032d577fd9446766a73590e6aa87fa8dcda685272eeb270f9285481a07f03f6bca0b2e3067560187ed6ba1e89125c989e296185\", \n\
+ ct: \"3a48668c50e555e8\", \n\
+ tag: \"5cfca24d6a6fe72a0ccbe0e3814025f9\"\n\
+},\n\
+{ key: \"0b13b7e96709c012465dcb85f4d71148198ff9732b3de4479a027e8e503c57b3\", \n\
+ iv: \"37913baa18e06232\", \n\
+ pt: \"3a5f17311dccb43f\", \n\
+ adata: \"a0971c0d84c0aa6bba7d828619271c67616c94c45bd1cc1fe80557225f1d0c205f8dbca678da1dccdce30e46ee\", \n\
+ ct: \"5964348b8ca3e780\", \n\
+ tag: \"a6b327ca88a46fc55a101b9e32a0f1ed\"\n\
+},\n\
+{ key: \"59278a6a90efebcc775aa0c195448eef52e3482df8675469d83b7309c9a393f9\", \n\
+ iv: \"a696748ddc563cd6114d1ebf\", \n\
+ pt: \"4a3548b0743b5909e7910dc15d730f6785bc4b4e26b7dd29\", \n\
+ adata: \"a79ae90d0b1f29ec587aa999fece511e328bd7da6ea1547eeaf504b3fd5e3f8d6f2c5757c435e61e9b830ec555c819e76a44eb1bfa11f1ac89d26982029af057cf4edf9d4844faacd61ea35dfad617a940544d3b2ee37a49d9723c61da4e674e92edcfc8ed1f4be7a3ff051c60dee0a255b1530b86835a46748f2f24cbe9ba20985f64f915\", \n\
+ ct: \"ba910ff2f5d970d97c2aec0f1ceafa597abb0c3eaff9a9d5\", \n\
+ tag: \"94e4264582f98e9e19004895ed514241\"\n\
+},\n\
+{ key: \"f09f3c3dc3aa5fac58d10612becea01c10a3e6bbcd6ea172c93680b57a776810\", \n\
+ iv: \"529e936605471c4c\", \n\
+ pt: \"ddbfd390ab9ae8015947630fc2c00d27a4e9c9ed5467bf673bdfb274caedbca06189ca3cdb2c55bddf353be50051a0a9dedd70b38fbe0f8ea4749a97f1d51e9a0698506af6d0cf71627a684c365f57da730346b8f5bf6985b173eb6d6d45ed7f277edebf130ffe278c5679157c8436a90cbebe4f7e929b2d899822a5dbbb40b0d2ca08e985359250c8697bfc74ca82fa1f97cbcf8105705ea36406ced83d7ecaf7c193cf637cabfffb9acf1750b36b4898fa6fc5f58c714245ec2e2205a327806daf57\", \n\
+ adata: \"a1a0773f6afe446f2b5724d831e7b840dde6052076ab16e16e28c8b74b61\", \n\
+ ct: \"1ea8edf049ff01eb2efac19844e36eee086a8df71017f316675fbb1b2b3038a432041d97d286d76a8563bf34789f654b4d8d7f23496a18ea0f88cf11813aabd56d763bc5f17a4aa1f3a4a0c1268031985796889fe1362f1c373aa438425c1bcddbc2d02e9e1f5f55823ebf477ca7d8b6e42c7f71b40bc3a8583df13e7af845a445b0db5438bb972ece4c1946068cee03e08e6e9a8a813148d3876432f6ced30a5b26688719d31d012943232aea0d3d3d9aa6c49993126cd69022c7caae03e4952abc8b\", \n\
+ tag: \"07840605efc08cb106213bdd56b96164\"\n\
+},\n\
+{ key: \"e82689b7f9c6989426def25bbeb498098a1ad8153dafdeba233976de80e97e27\", \n\
+ iv: \"312428ac587c1d18\", \n\
+ pt: \"a409773038871f39bf31b8b25ea474b69c3bac645ed26f4dbcd3e391f7d100340f1a6b6e4d7f105ab18280ce294f8c23be12ca5677cd8aa6caaa8943437a69eda4a22e52d2d6ee67b2b005335bb7f55266776b7f2f4e8998bf8a16c52951892076596ff0349b1eaec45a423f4eda51fa901eaacb8fc7ca37f4232720988d233d83e6cba98b1a333027de71b9ce7a8fcb0aa046c120a489b92aa349e6c53c87780fc9d5\", \n\
+ adata: \"0dadd6396dbe919af2f34cfb2a15bb16e4383016e57e3ac88c046b2287a4714407ecd09efa14f552907945ccd39a1db450d16f3ab0a8fef006ab5133249269946d283470b77f48263e4e1ae3fcbf7667a1db9347b2b2770b8688805109ddc15e2e7e56a6bab9091a3f1ac888ffdf214d38c88e2c1c04c860cde0bdde4ad0a441feb286577b1f\", \n\
+ ct: \"f445a2d5ec81992b327f2daf89ad23fb6d9e95e390b89f62719dd99dac6a3804153a36d1bdd09c20953387755004a1803e8b8ee60738e0d17df1912eac2feacd1532c8e13e767ba17d3523f7fdf9201063447cac810a5c36a6e39c7f627aaff81c8ac7dd98432626f6939617cfe5ca67b421ccfee023cc5c039632e82413e33283a73dec65759c6398b86d67a0bc20e18d93616db04bcb14ca4518854b0d04d96969ab\", \n\
+ tag: \"9f736a1b523f35f63fceffdb25f7dd3e\"\n\
+},\n\
+{ key: \"8ac399ebb91a18a728064b7617798899a7ee1b0cbe21fb26d396541bef2a0588\", \n\
+ iv: \"cf283a9659b12dd2\", \n\
+ pt: \"66a7de01a9fbe1bd6aad366ce3fac7c92c3d8adeeb41ae0d568b8e968b65730dee0fbea3ee182e335c51716e7ed8892ad7d1126ada6afe6185868c20cc3a00a4c66860d2d0d0e4911c6072eef0b99545043958c3fbb80b0c7168fc7f7c\", \n\
+ adata: \"38c6047841ff89621e03a743e6c7d022804616c283febb532bf37ffaa8300b288126ca2fa0c62486d3962e7fc6b83d9801ad3f0a690bda6e3d205e0c8374\", \n\
+ ct: \"5dc935894adc082e4856f9408215a449030f080ff14cdf343205f759226f66ae3c9912a0d9b4fe4094fbeecbbbeb0eeb139a53faa217e60db95e816ea5f60852d6640271ce5349fecf28a9ddf4a34016cf67904c1bd12b8aa1702f517f\", \n\
+ tag: \"f0fcecabef29f9f67cba63064ec4ca64\"\n\
+},\n\
+{ key: \"971e63fea178c6fa8817303ced0142be705e7230d71a7ce14281b3ca12206b06\", \n\
+ iv: \"34be8cd0293b2e22\", \n\
+ pt: \"7b9a9ab9db7e\", \n\
+ adata: \"9b8833428619a7758af40566083e24267816a87338234352a2cd7e12693641210b3134fee3343e8e6d128e5abcdc6154980be76c727ba2073655d1e9e2c2e5725a0780827b6100f5961ae730e8659ba7dd1ac97d52c8dfc862346e306192ec1c393fb43bfc6d2efa73ed52a0fda2232be4b34767abab31c32a25bfd213eefb190abc86187a203874876841fefba5151aa1e0601390bf24cafa22a5aab9fd31a3\", \n\
+ ct: \"357b18f4f92a\", \n\
+ tag: \"a44829638bca7dd583307d1be94e8df8\"\n\
+},\n\
+{ key: \"3779996dee9fdc813f2f3f1554f1d386201678b7f9cd9e51997e7070c52215f4\", \n\
+ iv: \"b910570ce29aea5c\", \n\
+ pt: \"b8386524\", \n\
+ adata: \"1e680bced4db8982904dce3f654d0015bfa9a5cab60f88\", \n\
+ ct: \"8528fc1e\", \n\
+ tag: \"73cb0856dd9b47ff06aa7b2b382819c6\"\n\
+},\n\
+{ key: \"b9a14054c7b8357fcc0060798be6b3803809721615b86ded0fdca9a47c780de1\", \n\
+ iv: \"3f2e5f059b77d3b4\", \n\
+ pt: \"5b6bfedb04162dc0c59f073cc5990600f5f6cbbec424f82d375148c216e844d14cb5344b0170cc97ceeca672df995caed32ffb41f554fbfbcd28fbbe9f32a9c9a1dc4751f35312dcf89dd8f29ecc\", \n\
+ adata: \"42161715a9af8a401ff05d6469946c950fed5b13e0c64873940a9dcfb76936fea802e4752e5a928533ef540dae50c96f49bb360acde0ec060a0c85e05e066309dd3e0051705a06fa579fa20de33d89ec6c5f162c689936dc373de9f830128e7fc814517cba9c76d4546c23e872258accadc5ba\", \n\
+ ct: \"518c6cffeeb97f8442f7fd469989faebceea7ad7bda85b4488f09e0c89a6eb7aabe9ecb21a87734f4cc74c43782e7ddfe3c9f879f76ab2258ac9177a4233d803197b163dff5ed70f01a82a7d3258\", \n\
+ tag: \"caa06ecb80615c82054bddf11128f2bf\"\n\
+},\n\
+{ key: \"167d9a3619f893c8b1e31824dd25d44dcaa848e8b377d64103894ea6194ab394\", \n\
+ iv: \"25088d2bd26f27a9b5c9ffd6\", \n\
+ pt: \"cd0e5d39c78a94440ffd1792000c67849261d4c963\", \n\
+ adata: \"7edb2120a1c4e00bedfb63304bb217780786f15d8a09e627ab7911111cb969cf6e8531798e51a37b4ddf70ff7281dd59a2591eb659747e3f8159296522cf4a1334d992f0279f2435b7ee8737758080068bd77e84d9c08cf8a4fbecd5\", \n\
+ ct: \"e02e40315c5f47dd8276df3c7430918368266ad7a2\", \n\
+ tag: \"8fa35ac5f051390385dbc7cddca75062\"\n\
+},\n\
+{ key: \"7430374dbe9db7f42104743c0ed18da388ee1881bbce0bcfa01fa1cc17926d02\", \n\
+ iv: \"3b6007f787553f16\", \n\
+ pt: \"d6476a755e0f1b77b34ac7495dd27ee80294b01df0a028a76524b461031ca390e266526f51b7b12d45df6da9b11f5874be05dda22caf99cd947d93b9e316dbc5a891311ebcb56d109d1826e34051985283d52774659c18d913ab5acdb0007c811a2169b0cf15657892c217758414ff73126afd00064b3272410c\", \n\
+ adata: \"fe0114a8dfa568e3cb43fedb5c89fbb4b0af68040b39c4a8b23cf5a71a4cae18e5df5838af2f6a995300b79db41b0a47d077e2acc5de93ad092f577d4285b3144601a209e49c517992aada675b1f0dfde9c16573dbdc8a833fb6c71ab949ad10\", \n\
+ ct: \"a78077130e538b45533b8acb4c7a5399784c57fecbedbcb8e553daae23b3a7863dcd519c21c8bba3ca0ce481bc7db85c76182742a7708b171424a24cb640cb1de10c541f22710d9bacb4e78a6418da37b2cd23f66c3e9a7711ae960563fcb31f064261486095c9512827cb1369dbb7dab78889fc6cf6e2742a5d\", \n\
+ tag: \"b8d5b0ad2f0a5034c8a4e4d6b5154c2e\"\n\
+},\n\
+{ key: \"fd62f40db251778fd2fca22e98cf4d2a6ebe9ea80195495e085a366fe6dbbfba\", \n\
+ iv: \"7f6187a6ca95cdb9\", \n\
+ pt: \"aafd88eab83e82f727049a56eecf4c1bc37f923ecaf3bab64534d43997c87f62cabaa279626ce5b77892b85782f1d590124c13886f3a96b71615\", \n\
+ adata: \"02b23e6656a471b3601fe915009c8176ccdb88287af3f5b115950a02c9e7fd32b404a0725b1ffeb294899c16b4f418eff933668ac70f2e3e37bf3d23093cca141659148ca33bcf00e66ad1eb696ca35537b8d8be1b9bdb016b58f2ef8a391da81f7ae0e96f0205\", \n\
+ ct: \"511cbe8199f3f519e2c60b16130ad4fe2c37d7e3e4e582504fac49ecad0eaf3f7512a916abef1669164787a61e7b00ed144f0c4d5fed9874b6cf\", \n\
+ tag: \"14bc4927c3698d611f3f35608ed34243\"\n\
+},\n\
+{ key: \"575ca06a0e27b351a054c76f7c486a0b226329e608f0bc381aaccb986190e44c\", \n\
+ iv: \"25604d2509f8a7e636ded605\", \n\
+ pt: \"b81f309ed311b620ce28126d03a7d68b996625aeeac497aad8a737597a235afd4d0b8a357175609509fc1b0ec9d91623a1bffce6631d4598778b87a35b89832cf5233e5769e459429b488c9e8f733fcb39b9b6868a210439e0324ca8cd007e25b9496b61f4ace720fcf70d2a550c1e5e2b3f15199aefec08560121763b8b883cc2d4b981236d2a751e9660291177265234062cdb6ec80e298b67a016701663a77f7d243120\", \n\
+ adata: \"9507021ef36cb9f6634b89a9e9abe9db4a0b58b03a997b7e6eafc9707bd76cab62fccb720b7262e4e5882eced425819a4ebf5efb9f42c5b005f4f5be4e0a42965914065329f00523307699bae6a4f1abf2f8e306b3e071146e01e7558752a52b2d5f2533f4acd3e9ee2f6edea74e0450a255\", \n\
+ ct: \"27938648d4e61dda5dd24031187492ddad616eaf946dd42371125e6585cbfa324415957bdd99d7d2f5c17b83649c250deaac18ace8c5787aa7104761ccb0289c565b11007b554eaaf8c7970e748a6a283776b85d6924d3b4cdbb061119f64541c9d2bdc86b068fa152a44ab08b8e70a89c30387c380358b04ca06b726dfaffaa836447e8f6caf8d9c2d79fd2843d874fe7c03257590927014fc6f76ff1eb3696c0da051041\", \n\
+ tag: \"218a78c9fd3c252024003fec13f4afc2\"\n\
+},\n\
+{ key: \"442d42075bac91b2ec7571b586d5c94a7d00d8038a0db30efb8033876390aa59\", \n\
+ iv: \"743d1669c59c177b\", \n\
+ pt: \"74076e4d9665318ebd4f5dcd9ca0024b97f7a2e063676c523b7e9c1b3d2c9d81fa16e7fdd9a7bde816b77d24621da5296990dd89e84b3a7bea548e35a3cd929858adee5cb08620f6e0e31c1b490d482826fccddae2dfb3916ed16583ed32bfc360a1c774ad01012c5c29742cf767a6c977ebc920bdad9fb8fc0b4914a0377a8cc6c390b69ce7b15dab6ddc97d470b3832b583c70c1ef3000e7beea1e47e83fee8af0582591a266e7807e27f54fae3c799b832c2500a0df97e5f602920639c9\", \n\
+ adata: \"863d9d329ca2db4666287bc8a56e130d7e6993bbe079815692ce49eb3e915621ef41819f11bfd6a419177fcd0774970e18966fc191ed0fd1568c66dd311919e10feef663699a0c33d9c7d38887a8db1c190d8026ed34eb0afee9ac00eca5afd0ab6c14a90a4e3cfb91a21dffe1e4604f0176d096eddba7431b4338397d7759ebf5fe4f399e2df98912ac5fb6e08b042fc4f7c6b1bb061853c8769698\", \n\
+ ct: \"54826faaba647baf09fb69ad10b0b096aa37c9ee9732a30f50f34683eb3bbcbf511dd4b1c9a56395561892a7aac9728a9575b9ce09e8e72142b737ac3f2bc88efb5b8d4eeafbdfb30b4907dce764b9bb464e8a1d2bcde3885a022457965f468664fb19c1736e351ffd232978d695726ac13cbfa5bc145609e83da25bad5fdc2c31af88fb6dd3810fc2fcbf7cc5dd342fbf6aaaa94ab8d2edbd8d4d8ab58c48573c34e9becbd691825122efad75ff2f6c5deffb13cb0c7fe5b2d3121cd550c8\", \n\
+ tag: \"f7e11aeae11f9177a98532e0484af478\"\n\
+},\n\
+{ key: \"8dcdd94101439e78f40a9be66fe8781452d21cb81991caeb3383a6a02df4d3c2\", \n\
+ iv: \"9d969ccd55a879e0\", \n\
+ pt: \"da2859eb42380afbb8f1205bd200ad8270a18f2077bf21e3231069e3da8490ed91eb1510e98a0770eb277577954c4f29970bb1337494431665d26d0d096facdcfee862aaa9f4b9ecb1f39a38ce6a76dd3fb74d697e39c20b626fdeb3cfd59aae4aad\", \n\
+ adata: \"6f907349dec2f91ad242f47cc32a49b3a5654cc795a52038bca0655c29e555ea9dd7d86307c2b9ba689cdea385c38bc999eabfd22dd02fec5545aea3ecee908978d643f9f78593818189f882b4be059f7dd245ea8196accc2e31c107f18fabc242cb22b1e6309cd3eb89ddaa0703687c3ae218382a163f5c1d37f818f98f48f6ec51f5cf24eb9d79c08c980ac05ed9b7e4f3c2e7fe4b1d\", \n\
+ ct: \"6a188c7fdb81b08973aa58952a8e28f245f492938d80ccf2838d5e6559e19a1fc748423328a1aaee3edd1e6184f924a5328aa46b52021cdc88fe871699a4db86f9b3f8186e46a8eb0321487d1bc1de277de54050a67fd58d93528797fa406d7ff821\", \n\
+ tag: \"649b4a84e2a336c8fb4374df763cb5e6\"\n\
+},\n\
+{ key: \"1f4e8449af87eefe90b8d483b95904c0d4011e4685f3ddd4d9ccfa7face9f657\", \n\
+ iv: \"fcc52494c2577da0c260f3bd\", \n\
+ pt: \"6c44982aca9bfc8ee1a0054653935f84f909add0a0171c8a8e8ee5491392dd25006dc917104a8202de581c065d5d2a830aedcc6f7426ea6207d840e40ecccbbd90d20d1cae9801ccf4cf4351852145287083bf7970b020989c794320df0c5fcb141aaf4c75020038d223b1f5c974ae3b41a19e08b9b7619322bb1467333c3e6b6f47f7340bfba26a725f46f4b22e91998b424e5447a5afc86505ad018f7fbc94919a11ef3f38e0f43378676f\", \n\
+ adata: \"c15285d5c3394304d5e547182448be7c048d96ad02dabff1f31147134ffcbc\", \n\
+ ct: \"13db42583afe0898edfebbaa5b1ebe63eb193adc37ee447f398967817398d47ec8aa7d231286c8028797bcbfb37c8bfd51596785ddccdd46201efb77a9acd20bfe098a6148c8ce75ed7eaa5b5d0f6ff77cae13b43fbec9b48ae8c57c06e9adc71539fd6b2e4eeb46ca08f3abb9f214b3a11387271c794057c52313e7be6e38eea5c4ae9d67dc829ac8809bf742b9e445867ca58e3e7b39c90ed6e1b38465519db77a284aa39c90040a1ce63c\", \n\
+ tag: \"5dee4c9c67183843f0ffcf80dabbe45d\"\n\
+},\n\
+{ key: \"339be9f0c8bf1a5bfea8914287ffa8e42e121016ae59ef226e3c050061f470f7\", \n\
+ iv: \"88bbab846a46bc29\", \n\
+ pt: \"26f08e8ceca924596fac8f8948df5adb66239fdd35ccbbb38d34e6b43ffc46bb223f786f2cefa2caf4bc64512128f838eb36f6b41458c7488881b701413127273b5e9baa917a37d4ee6967f613cbd489a5f93ab06857b53050eaca5bc86bba65209a787e\", \n\
+ adata: \"da9097e6d32ecf6721c958eca6f0a5d95ba15fbce2be834164464c0a72ff3f6129c969d61eee20ed56abf1bb452a1eccd3c6ddfec7c53ceefce2f01071e2d0a14b2e2e6610695f\", \n\
+ ct: \"981e413c1730b01468563793c776218f85a1ae49feddb64aa37f6f6a745d8c72c144f69dd7d03c12ba5df1c21ad826c1f530e4f6d285c5cc0a3fb8c6018cd19e0d0deb7b02e74ac3cc224eee9e591a0fc8ae7be3afe66d69a7de8445c12860f9a2a00936\", \n\
+ tag: \"7da897c42ee36016a1872f2344e138cc\"\n\
+},\n\
+{ key: \"f7a0ae35cf18ef80dd9d3bbf0ca1be810a9bd1b226000d1414b57495fe0b0dad\", \n\
+ iv: \"c65e7d09bc1140ab\", \n\
+ pt: \"06b62d580079bf2d1f58b3c10bd2ecf672c1b183245a57636563c4c12d55a900bec3a6cbe3ff75ff413d88964cde018f96cf2dee3dd022661d832f47dd8a0ca1e96b2df5923820d5ad478b3e\", \n\
+ adata: \"0603ae211551714cbc935f732f67\", \n\
+ ct: \"38794106ca823298dd3aaa993a27e5b5c8a318d405abf028c627f87f0469b32a7163d781466b9737610acb25416ea43fcaeea61fdcf24ceb6b434282df275e6de1a5d3a6130d0b2aa9103945\", \n\
+ tag: \"a89bfd3c16916bd7472615103d8feb77\"\n\
+},\n\
+{ key: \"188e3873b3e64df556626de97361dc05a834e219272258e6383199dd5a3c1c73\", \n\
+ iv: \"e99aebc479d3ec38\", \n\
+ pt: \"afb5cf436f8a0806f3ae4c0fd4778a2be0b3a5bda2d9742450fb2467e16ff6a246b61e00e0eaa486f109bdc5ef7402ca93c8602e0d1ceea3249bde6af3cd81759f\", \n\
+ adata: \"3e1c68364988fae90e3f4bc5ef356877d2d5b0ac4934d8c4a1f6e1b5d7eec3312620cffa4e5e59e0158498c031dfa45ffad927e075480f\", \n\
+ ct: \"cbde772aef00649806431e339fcec48a733c050d2526b484812d15897e1b3f3df91f76899316bdb50d32519fb0c593e153054595199904ea3a0dcc11d1719a028d\", \n\
+ tag: \"8c425e4aeda185db484e7529f759e0e7\"\n\
+},\n\
+{ key: \"cd4a4e1b633057e5651e8b215ddb3e354ab3e5faa79dbb3f90223480e54581c4\", \n\
+ iv: \"b2843ec5a421de756f3d4f49\", \n\
+ pt: \"7e164248348909785d14dea6371e8c\", \n\
+ adata: \"f53ba6d758adb92adb31d1fbd1ea2589f89485e58bed18cd03733ccad9aa3bd3713932bb80d4f7bddaf73ea3ecf746c1ee75a8f52e00d005d8c23622d413ed35bc957aeb608b2cadf4807f2bac22709d67776e14d6cd40555cecf8976efb4114f3b78c908e5faa48da13054dda1e1e3ca864ae44008e7c7b3e7cd8a67892424106894ef5e3bb118b8262\", \n\
+ ct: \"eff30b437e7a9e8b65a62b1d802c99\", \n\
+ tag: \"dd3c693df3d62011114f068f997d5575\"\n\
+},\n\
+{ key: \"bb433ca7a908ff2b9e38df840f158843b0c88292338e8c76761402db504ccbd8\", \n\
+ iv: \"e5d4226b1d86b4ee\", \n\
+ pt: \"1b33e32b5b10affea922e6172d051ba3db35c3f1906079a0197459779d5d6ed848c67dc2f1878142726dc39959\", \n\
+ adata: \"3f6e40d8a4ac4e03516d064208c5778c32a48261356e8a5a85b4d24b0ad6b61656bb01c2d021a71dc8e9fa6494086f36743e72911e13f8e4bd7657324e30bebc95208d32d20cac45c4a04be64f829341c16a4f1104949b0e48568b5fac0e10e335aa23e2c995\", \n\
+ ct: \"7bd54fef650e759f20aac7b526217c943f7a8124274e7f44037d743522368eac2ac099e68433870254ffc24ad3\", \n\
+ tag: \"87a16ac0c78050b539ef30075c4844dc\"\n\
+},\n\
+{ key: \"f582266a2d08076328b381a3880fe21a269bda119e84ea9e96d0f96a7a701b1c\", \n\
+ iv: \"58aa4cca100e0312\", \n\
+ pt: \"d548dc11b5dfd3846f21430e5a75a99298ab24b0745a500b426ec8cfe2e492813ae19a17ff5b3f1f70c476ea5b9358c250b0598c34aaa13727c54380632122160caf3b6ab41d270e1d7ad9e29771949a99300f31d3a8501c76b24ac3ca10f262e13aa01c9a4e88f9c881cd0ad32088134e840be9ce9774b1e74cf58790c0faa6904bac54d29fcbc4991a1c4678d1d7c25164\", \n\
+ adata: \"6fb41a84738f859c91c872460c011ad03227fb03bea756a28c52051b831f48589ceeebe72abe7544fc04835d3adefbb098c9b3398352a214f6e1f506fd418b89d9314091847e2abed32a64e8b27f494db9f3bac6070fe6e27a6c620955194cab9d6ef3723bb824f57ecd39017e20874fb8b6bae1824df7dcc368ad2278bcaf2eea286ff2fa3411ed9f616735cc2d89\", \n\
+ ct: \"0fa85d725ad58d907ebb6f9f269498d23e4ef191acc6cc17312b6bd6ef2ea9d1fb8d156f2cf9e0e3b1d57749a7741df34918a0943fa09f547f6fe24adf51e6f4b75f57f2fe8204c182e3e73827d9f04b2c6d40fcd853be5b849f291399ae7432515bda5ac6dd3712a5da4b51ebd951a77b96d50c99733c999ed65afb5726ba658b3aebf8411f7a3196ab623f0a8a378cc7c7\", \n\
+ tag: \"f7a07d05fdb9dd94edd88c3ca4e14f77\"\n\
+},\n\
+{ key: \"d831b0caa45ab4e640c02492f73f44bbec97bf024786aa1a57fbe8a27a75de0a\", \n\
+ iv: \"6ea0f8000997267a\", \n\
+ pt: \"2cd770fc5ae16b8d785142244e0e2117c8db695780a8bfd0af4cecd94570771b9a541f7e6834a7c061\", \n\
+ adata: \"1a43fb96aac74ae38460ad74089da905c0505d70e29eb3b3a238f7c93c2f311f96d8c4fe599d3a558dd743756b57bc09b10dadd85c83c38dd4963fd67faf128c2e52c3fff94b237192ffa25b1b3290533903c54155246f5652ed1888365e2fa1444a7113ed2b52b4b00aa8aa8bbb29187802bcaadf36e95e26d24dbd0c52941995\", \n\
+ ct: \"65b1eadcecbf5acf8d5fbf126954fe8da46b021816cebd5c48b8c5d9a169b92c4315f84bc92654b972\", \n\
+ tag: \"d5410dedd7e14ded3af04c8fa4fcf54b\"\n\
+},\n\
+{ key: \"647afa50fb8dc438d97f718cf5f828e3e99a1df781e0365590cdaf9546a76d4a\", \n\
+ iv: \"95fa742c273202ab5fe0ffd7\", \n\
+ pt: \"1b734eec30c40e7ab00d795a03a3816183adeab1531f87a44b7ccde904228e623af187d341d9cfebfc51c8ab82ec7326d28e5a5f5c494682ffab8cafc96e5192cdac40edf81dbccbe89713d3346232f69fd54c35bbb0b435cf9dfa4de94a81889ece7df4f60c2528574467d07a738bbaf717ae217a0019d778375e1896c44922448a50bc82947ad1881a80f7656580f39871712c9bb7ddb5b8da961ec655e46b1ca907c3b59f3413d23447e2c7b2c9e2b06249117ebefcaea81243873b38e3965b\", \n\
+ adata: \"63a4fe7b33b220091ef90f43e1616155f7304f493b3d1b7bd362e283c15d342b83031b6498335459\", \n\
+ ct: \"846f2b9435d706344e60f845d97ede2fcc168cd3ea6d83edf63671bdee5349ba5b5ccee45d2e1c68c0df94ca6dcafda555f06c652e1c028903dbaa235a208eecb62698d4d18a01a6b9569e0569a1aac83c5b55bbe5c43a82654cac65a0fc582f93dd8da92b6cb54210ffc33660d110ccaae59ea26269e7bb31ac4814ae41b7477265594138e53fcb7a8eea2d534db4b849a0ef8c64b574569893685aebbbcf6ac883d2e9e42beee1d8f552cee21dd42deaaaa2d4d2b7db8344e610cc1e1d4a450d\", \n\
+ tag: \"0bcad98a373fea74957ea4ee6d5c8853\"\n\
+},\n\
+{ key: \"4e52a6557277f370509b6ce2a62c5c830872ab4fb9564ef71a09f4f1dbef9aa2\", \n\
+ iv: \"43b8da1a36d4d505c8fa8f62\", \n\
+ pt: \"53453d3869b280a89cb8c49c1914a9c722c712bc44b09e68115968c21b025f7c1b6c220bbf09c9778b8b849f99ea6df6092209f4183673c7dd6bfa1614a3e1cb7edfa57797f9552f913300b3533bef\", \n\
+ adata: \"4b80190dc07fa467bf17caa6e8dcbd4bbfbaf2036ecc87527bdcfc66c23a46fab9307969d83909ee8795431b32a2f1b06bd5adfda494dcd13789b2548aeed2f176133bf8fba9c3ffd010c7c1f5ad1851ffb2a1d90fde5ca5bfdc252e891e8bf160339c4d279ac53a4cee402cbd803b722ae825a2c60ccd6645a93f85e7dc81e097c268748f81b25a34f7a6b92d5f4ead9243c10295a28b359f79c18d83cb10673e7b6a98bfef1093014c77f550ab283c45064f6548abfbfc6c03772041b86f9b9d861d77b71555\", \n\
+ ct: \"4ed9f63e7f8e6fd591b33d4ee94864b4321e9017d01b21dd30b93b9d543987be0a43ed3bbc267d1f84bd43a43e21fe0c8492dd1dff8b4ad1a58b152b09b926a54edc200a46998925a176eddc795682\", \n\
+ tag: \"26e0fadb3193388a3ffce6d5b2822f00\"\n\
+},\n\
+{ key: \"8890c537a42f6c8d4214197655c3de508dbf4a9ffc6e8d3d3754b4ce9ee4339f\", \n\
+ iv: \"a1420e386c408db1a1ba0fce\", \n\
+ pt: \"e238d48bc37bb924834aa548436cc5cafe44d094343271d414579ff05cfc4cb79994d81d3393258fdc3db16bebe3101aad5cac309a23\", \n\
+ adata: \"a29f7c3f9f5401830842194f9555214b27f08c34d38e1034dc3b6d60b080fd24e2b022aef52440a11a4325c594a5f3bbb6b3fe917a13e1ebb989c654cfd2c0ae\", \n\
+ ct: \"fc00d54c257ba11dfabdebec1c84fe43e54574b87c4aee414d5d6ea899bc7033f4a2c3e068c98f4419d4a87705b82e40b0e9413c05fe\", \n\
+ tag: \"ddf96eb5b46a6588a775e25075e63d67\"\n\
+},\n\
+{ key: \"9a1d63e58f8f6eb918db7acd858f11ef1010f05ad175c3b994f99e1cb08d3c6e\", \n\
+ iv: \"b09d646c9e0d094f\", \n\
+ pt: \"b3e121e68da58a72d9c61b79f4\", \n\
+ adata: \"a5e24b087ba717c636ca8c8b7f2e94b7e74b0fb230aee1277fdc505defaa56f6925924aadddc05997dde13c063b085622bf14d733656d0b282568477a309461728\", \n\
+ ct: \"659674cd1be59902b17c586e15\", \n\
+ tag: \"c09ac7c08c9cc2fd1ebeec1b0a1b8acc\"\n\
+},\n\
+{ key: \"3086a90c300b2e633273228bdbaa6eee3475fc220e5e09721c523359751c0237\", \n\
+ iv: \"902d205b1c36d0bfbea27a64\", \n\
+ pt: \"c4d9eea0a2ffe23f2d100f62f871b516af28b326dcde88e05522dafbeffd5864e5ab224335748af7b44c4e80a55a71840a\", \n\
+ adata: \"1ac35d4f84c0930d9917a0b58808103cb8bec5e4469b7ea5809888462f23e6895465c445d67edb7a3ad899985720d7f211c34e2d9fe79166afa95dd567868c648a04c956f58182e093b1ec8ad63bbc02842350a2f713f61a658d7460969a8de1accf8d3f7b1e198da3ae2eaa8c8f7d3e0f85ee766ff40f89f1ae59b6a249fc29cd7513ef77df9d1091138c5aa4e50962bc4b33eedc84c3974cb273375dfd0a4fc64be1bb545da499\", \n\
+ ct: \"2649bdcd68da3986a4e09898cdfa06f8f1361f8269612237f97c86d64c96992a91b09b36616aea1dcd3ddcd2161e4bdc55\", \n\
+ tag: \"8a5afee836041f331a98d77288eeac8e\"\n\
+},\n\
+{ key: \"5d501c53be77716c4476c77c88fcf6542ad39bdbd82f2da0d29cf27529b5ddaf\", \n\
+ iv: \"19b9e87e280756cd2070fc98\", \n\
+ pt: \"f07b129bbb5748bfe2858ac9b3c3def89e9cb5656f072264902f48aada690d5efa0d478efc8ca04d982654aa54bb8f4341ee9bc370752339\", \n\
+ adata: \"67ec5ff2cc44694870595ff9954900ef5d21a5ad12048b54344cb6092f1889ef98d669f9420a89aae27c5256af80eded386c938657808ab2a066daad0d7a5758776dc1558920fb11b6b71e4c62219edc785d3426582d4a4f21fd3ffbe780b2192c68635fa553d7212d6e8f3ae3f4cb5ccb61f13698adc1\", \n\
+ ct: \"b7a2d4813e2612006a84fe6172224e24f71ec2660f47518b6c0c921b5775b5f9d50101fc7d39fe1c999da53179140684a042ee769285e525\", \n\
+ tag: \"1762b50cc9fd24499bbf611ef613fa34\"\n\
+},\n\
+{ key: \"d09f50dc60cc6606976a6961869f2844a9044fbcf11c49ff9fcca1c15ae3e62f\", \n\
+ iv: \"a528c40b3b1c9a88\", \n\
+ pt: \"dd95e8e9e15f73ba91b1872c203a058c5764\", \n\
+ adata: \"24848f282c4be8ec7d5dc513043a3e275d0d27703ef89e84cc44695ea80062a228c7fd70bc6b5964a34db095fd9943bc6053a4d1ac8d2d3d13cb13cd19cd9deeca5f9fa6ee74e25417de603b1f7b43ea50b36fa2d6\", \n\
+ ct: \"65aabdfce08efe0fe9ca05c830e6f76f4b0a\", \n\
+ tag: \"99bc2ff95b8bf38d1e8a4110df782c8e\"\n\
+},\n\
+{ key: \"56a662773b9931b96ed48bc9429c75c8bbcfa74ac0e67d1df074e7ee47aa27b5\", \n\
+ iv: \"042ccf32c2c952c7b39a4e00\", \n\
+ pt: \"e694da5b6b0d23264d397ec013179f83687ac9d9bf45bb377db94f1b03d718a189a339afcfdc3153f913eef2ad35aa14856eb79b8df4345d49eaef3caa3e6f044bd23ccd5086ed6766e4927be99c1e3870e7408a6a6bad891f240fb1e34d8b0c95cfd57a53bd66e81395c6ebcf93e1a4\", \n\
+ adata: \"85452ecd967a60e24bd6cedb7771cf7cc8a5abb7b0d0f737e91d7d309ad9c35eee865ba5db8712cc5f5331436951b5c444eef034871f51bd3560cbdfea935af5ac12a1c21f0b39be0aa8feac4347aa3b74c2f65b3c53f69fe80a2aebb114b25be5b29166480739dd027465aaa17131c57d100173e7d04f141019e36a1223e28256ffbf24dce611f7d25b6c8601eaea52bd0b5692cbef4f2822e2597b336148e0091b6145e68d1ee03b27ce1e0674d85a849d6091721ec87b28a598bbf287f08abd7c12e0\", \n\
+ ct: \"54377bb60a4e20f7e727682ac8a404e019f55b02e9ac5f3fbbd5afae54521dc7bbf1512cefc99ead928ffc72825b56d9d4080ddd34825980b959fdcd2a8914c69c799c2f192e59f9de7124da520b898ef8bb6e3502f6bcb6e3869778c569977179775f07f1ea6de7724f43cb66f0a1af\", \n\
+ tag: \"32a2adade1c2163609d7174303f44aae\"\n\
+},\n\
+{ key: \"f5b30bae594b3285dea2bd2cba8255eedbcb014c3a7ee291b063242c54bd9cdc\", \n\
+ iv: \"cca9d65e2f4d2090\", \n\
+ pt: \"c48c8dd906027d8a244b98fba6c43357ac69\", \n\
+ adata: \"d64eaeec6a89465fb7dbf6e66d9a009b00c2b05527a025457fdca27edadf633f08e61171e84d1880d6a7c96a3d76b0b52495e2ddc781d28cefbab8df2e3231e44cb1792ce46be35f30e516d313ad7abbad15e3c6598350fd81f46416de\", \n\
+ ct: \"a2033ec315d0161d3689f065b7f6b7f5356a\", \n\
+ tag: \"911d523755e04005eb3310b41654e6a5\"\n\
+},\n\
+{ key: \"211c20255054972b4e19353e09d6489160ff6cfb9d4899fb12810783c1cca228\", \n\
+ iv: \"2cd1a33a95fee46cc4d03ecc\", \n\
+ pt: \"c6a11649dac5082b03e7c3e2cc8c79d0a7ff209e7681cde42adb48e9850f660825fb8cdce6959af33bb8a4311479ba0256d4c92d12a81a5ad720b13825ce\", \n\
+ adata: \"1ce26ded305a4cef5e0eacda28c2141ae1d6feef543465736692a341a97878a387fa6da0221f55ac12297052567804bc3db0903cbce018e2b88d00369110ea1b58552eb0d7fa15d58eb08adccb0d1ad089585b189045198acc6bcc00\", \n\
+ ct: \"8f606fe1e4ef420e2f8f6dbdc82b08e71b9e93388e1f1d1821c9ea07ca9499add97995ce4bcd58c9fbd842136cdd9b330883ff61314f97df2bd05baf5525\", \n\
+ tag: \"57d9222732b271e08a6662a091deb4b0\"\n\
+},\n\
+{ key: \"ed73554b5a3e159724a7374c6e83ceab1273521045228c94d726978ec505958b\", \n\
+ iv: \"ac9fe75af3412068\", \n\
+ pt: \"1e494fb68922369293d02213e36e725ec71925a3ec3b7ce73d7bebf1e600f645613692443c5d6d708aa95a0375a7cee7bf033c7fe9b07acd3a13b597e3b66a840765ce6e6a6a1f494436468df412947f21a10a23dd6ca6260aa3d19933a55bfdbebd3cd3f28a000e037f62ee1a55f7defe262ddecd11d3a8faad6cf132a6bbfe18c3d16e10\", \n\
+ adata: \"d3ef5ecf525e0bdd9068be8c1e45c9c425e2be0085bcd09e8aebf05cfc54db7b299bb283080bdb8772304b7ef1c22e130222f5efd4bda37940909daaf75bc0db69a1fc3c7e725fbf219eec52afa5fda86656aa4317b913da89548d127cd8d5c6d1e94fd4a6c1bbe216cf75fe6114172869467d8d98032d39e9c6d97fcf2f50ba4059e1ed10e053adc590929a5120d8bb8999c9daf72b8d5bf9986914c3b2196949eb8bfe29c53cee2c71cef41888d055b4cad12f\", \n\
+ ct: \"278ce453ebc1f226f88767d715243352e6066311ba66a02312b659eefa451b2b3734049e973fddf265c1e7c142967888f9ee116290b9a58f5dcb1d504b428c61131997a14ff8748df017e76fa4330be81bbf6b9f6cec76a67721127ea417b5bbcccb948b25fe3b4857ef2ca60f80d5546711bda85fc26baf3a68f0a295f55201c737432c9d\", \n\
+ tag: \"490124868bd59ddd16c8a7641781683e\"\n\
+},\n\
+{ key: \"cdac85333982e663f7c95812f624f7b613cbd43cba91be9c9a898e6008521868\", \n\
+ iv: \"f3415737ab1394c0\", \n\
+ pt: \"71ecdb77596d9027fcf62adffa4946bc1a19327b2c57e27f0d28e01d591208a5fc55dbd4bab1f0568ef935c51e98ed38b442dbf5c380f649411bb19ebb401e7b7b156db22ef109c399f110f6f47f5915926e9633032fe1c85a60cfa9e8ee0313262557c9327c66c0d3c861e567bbd4748da8246681c1520fc6c1b8e4cfed31a14954dab1a14996dee8\", \n\
+ adata: \"d54052c11ed7105986d48f26849bedfb804f88abc4b4e259024da06f4446a9f89e065304129727db84c7c52525c4e97a242e8ac856003d1dcc0442b3b2814e48a235a2b6240609437917bf7e03a1e3f1f22fd5162860e067ff7e30464ac17eb9f7d8c3c21237cddba778add83dca3377c806901dad1a54d1f689c01564bb38a48fc38a4f79f0aa15d0d36c663ad0f2dbefbb7d19306349cd3cd0345ffbf4b390dde2a8ce306db996c4a77ce7e4a8bdd88da91a98034b05a079c42626e30e6c19f1b4049f60\", \n\
+ ct: \"7dc13ed3d7c1350a6580ab1a8c00642fbf94d0afb8d3abadc54ecb77e26f8e2c380c2a15e70a15f1a6067ca925098fd2974c9727168b0fc17102a2d8891d2d35d4849003093ab60683f2c37f6dde741ff7fda07eab565630a5bbc26b86deb946bb4857e4ce404ed184a21f974ac1a63f91d359b4aad2d8ef32280d14f08a17f26ba28e09a7660cf9e0\", \n\
+ tag: \"e46af13008d8ea417d752766533284e8\"\n\
+},\n\
+{ key: \"79b8a72d7f02c6dc5e5201755a461f6fa7063926481a4de35d8f7d6ddae1d05e\", \n\
+ iv: \"652ac6e66083efa6c7c3f503\", \n\
+ pt: \"080083b7f268d52e0f195f8a29f93297147dab886ae1379873fb23e0ecbcf3da5dbbdce5f2f12eb885c3fa30dfc7a4beb48adbc2c9288881f77ca3dcf258f24fa06a3f6deeb437ac13beb8105cf3e62eaa5ecb1990b62237e8e2b970831d6f50b8f9a418ea8946eea6790e86e5\", \n\
+ adata: \"004c4a2a6a0eb3829e9e097bf2977b35c5c4aaf3a306b15e789927aec8f71dc494fc5e6cd1fd3e06ee411cf55a16f324834e2a25495f29750cafdb56aff42aec65991bedc8d0f1f68bfc1c76383c30e76d1542b95b917e59639a361a\", \n\
+ ct: \"b40208c4036a8182543e802c58deee3066e941ed4ae073891a59cba5f5e58535293bf37b652b4ef716def677311e503d3903708349242b24b993151a83367c8fc58df4b71fa19bd3a72df5a305a6ca6d69140a48a3004522026e41887563388f34a337e7d22b28914daa05d16f\", \n\
+ tag: \"ca173b113cab020b11a754fe7aa65d0f\"\n\
+},\n\
+{ key: \"1d41ddd3fd38f8280bb82158e5327c9dc66cdca524c154667eae051b8028d050\", \n\
+ iv: \"ac3783be41eec6f5acf1a6fc\", \n\
+ pt: \"5b8b5dd0cb79e4b3f43c0e11f39626414ab8d0dbb3305dc2f6ad9eac09c5a41f96dffe15e6e8450b45c3ad44bc4a7d4d8c88e827b35d6f8816e37f29d3f0e3f4a5001b85b0de3f4a21d4ab8fbc2b474c54fe31c8c00017cc6cd93a6c525af7ac91ce322e2614bd40804d56d4ae40897c25807ac7fcdfff7a3ab6\", \n\
+ adata: \"ef2e648245e0f0c6e8e8c74bf22846fb7b374a7fd2924248742b536cdf56de93ef67a004b51ccced683fac5002b1e09770a6b1d0acdd06dfc697\", \n\
+ ct: \"dd107c08f704869fdc7076e255eba64c8f85ac828b6bc494dc7de6c7df6848bd6c0a719bf781d72adc079b6769a102ce25793ce047474b3003013516d53d30c93dafabfd5564c08cc8a4fe19b3704a468349ea19db55564d7a9932c3bdd6c830ac0203c01542ae605ed6c4090084314cd3111060b68870908a32\", \n\
+ tag: \"a244135947909545e92418baffb62325\"\n\
+},\n\
+{ key: \"d6251d823e7c9d0e4bc0224c5e3f0e0e58a64f8acffaa2eac734ba00789edb66\", \n\
+ iv: \"f9c3789ce679065837077f95\", \n\
+ pt: \"6931e761bdc72cf08aeb42e574172d9f736252f15d4ad1be7e2b789996b675cad235986a2e6bf6720fa5d71b8e91d97dad5aba9d1e28344292e14c9e279a05b715769540ff4e0a6e465cc6d09ab39b5448b68d653b94a4710c9dcfd9440d7630317bdd28892986973f14974bbb5f3603f32432bc9837d19e20954b400f3fc978a538b9da186ac263ac3fe32a1f1c8db80f574909939809292e44f08463e086014890d976ea790c94e8e7e70059f505\", \n\
+ adata: \"d4b50ec8de6ad284d07f72340f1464e1385ff6880cb2193744b37c7c2e5fb5f74bccfa80a39964bb0919ac7929f2b850a912c7d23cf5259d4f2c736111c34dcc785ac5c8325670902b2184a2f4b35c900d1f2fd9fdcad091ea687e3c73f8f966cefc13ff7a89c720160b4a8e56e61fe9c3afb0d98cd35ee7682a0a8da4e7e5b66ab15fc5a996c8efa78cc5a27f6b1b10db8e9f0173740c4028f40c11c6547c295ede05e9b1c7c04da343\", \n\
+ ct: \"b754ddf3f3204c03c8bf7f2b1930c75fe5350212404388ce422900b62e595c942ae036aa97dc6925fe8a95c00a653080fc52c544c632a4aab89703416f9413ac8837fe683868cb2956470392f27607921442813b818d0a95b29e78259d8ab3a5bb06e1c02ece3abddad14f98d55bd7f8bbea93cbfea52fb70483735b0f8ed68382d25f8d5a6ebf5602eb40e0b5218b34fe1a442f977513f3e4d391bf45f8843f9e30d22fbf829fc03e081f764b4473\", \n\
+ tag: \"16b8d11fb8f6141025b4dba2b9a7e896\"\n\
+},\n\
+{ key: \"2ae905a1682023174926fe88bf9af975ff6956713567618dc3e5032d0721d460\", \n\
+ iv: \"c9ce126cbb9af8ec\", \n\
+ pt: \"88493d450e8619a7e75654821d09bb4000b733903b4c48e2525908f19dc61606b7d0d1bad1a63a78f12645b5a0cdb406aa1efa93683c0c65eec0a32e88d86f02acf10a9fc465d85349801e7a7dccbf4b9e1daaef8834f9db425612b0b7257f5abc36fdbe2f87bd8e99fdd93d17cf8cff14679129fa90b390df55dc3b645a5623d82cd030557b0ffdc59067a983826e6b058530640feed2598eff2c210e110e6cd7823db0217ba634c95faa3b430a153f3b8216fcd999765e1ab506f92c74952b6462d1\", \n\
+ adata: \"972c5aaaaed813c5f14d9ad7712452978ddb85e4bfe1b244f699d8572de61d3fa8cadb5092fbe5517544140bc5d68b3c\", \n\
+ ct: \"e18364c3bdf6d75a8f6450ffff615122571d97bd0567b58fcdcb0fe6531807e95a717c29cd37153d5f3b0419d9f280e10070a24c262aa5320110a7e873c81fe5260af3243bf5babdc96fd18f8e5f8edb0c181f4d81c7951b5ba0b98b5590706ebcfad1a4b8858aaf156fdf5d15b35f0c09087169e701c1a92273fd1aaf384a93cd586407fe2f7fa22c745b1f410b91116b62019b2272fede34c306c41b797a6973a2ec2cdce5279a5c61aeb87e894484ed6690f633ad820b063ebdc8e1e75525be5d78\", \n\
+ tag: \"af168fb22cddb8605e01a275434df882\"\n\
+},\n\
+{ key: \"12a6541aeec52f50a20a7319dac11b824207e3940441404757a172759806b29b\", \n\
+ iv: \"ff782baf46cccabc\", \n\
+ pt: \"547bbe6e6a21f867c21ed92254a5dac8c78a10c7a6ef6df87a5fbc0132a2d51b2873d379f2d3ef54c0af793fe47c6d33426cfd0300a97b6521bd9ea4812d7b9fe7f94ee7168f02bba8fcd0e25fd99077898c85186705ba124dcc1b77ba091ef217c7e235fa5445f01f89c7df6da47c6b42fadf1a15e797e9915313fe19f8b77ea3d9f99eb3e845e564031415de87e73e2df09eb24937a723c0477e9974a245ad7557fdd272a32cc12cd8d98ca70662e7ef6d9af15b32ccb9bd04de28df60\", \n\
+ adata: \"bfa326bd30eceb4775f72c6e964a06807841936a54a4bf90c20d4a01c2d5e6fdba43e619885a80fc45f6abf0a897570ce3b905c759aa9d9d4741099d4ff30a6ac07b9f9cdd81e1aa8c29f964df5631f84fcc7d2fdfd47cba\", \n\
+ ct: \"e2e500dbdcb351b301935ab763a9abe2491ba202af796b79244d75c6cefcd8963da55f09cfbdb00139371067dd40481655d3b5aa6d0a6f245dde5e143726c652c23c6fdf19add348af5b34387b9f0dae4118a6f6cc4e527b9de7b18219940e323a0e2fc57fb3009d3aaf97f7f19d025eb2b1d3207990914b7f0de2df7733490f5ce37a3185ed6555eddef03311ff506cd8b503834baae8eec26b98ae75be97096443fac3200177ea706a19bc33baf6b68ba3851bec876c93358bb67eec6f\", \n\
+ tag: \"9e3c834700068d1983dc186a35164cef\"\n\
+},\n\
+{ key: \"0c0cdefa3d66f4ba562c94ccf6f3594e7868f7cbfdaac3dd9dc3289e0d28b5f1\", \n\
+ iv: \"dd19dda2fedcb175\", \n\
+ pt: \"5fa824a78222fa656663a7a668a0e8ee41bc2ceeb6992aa99b451f58ce3b2f6359d1fe5ee3af4a\", \n\
+ adata: \"da450e448a70ab03ff3c35a7c537cac80cfabbc409f107d6768083b984275e88c8b98d4cc0c647c426d4f1bccf5f75baafbae8bb7eb4b99ede0b664f41be03ac4034389794a8ced8cd465317a4c8b140d5bae87b2fbfac5ecd4d354d1f94751cf82e0ad933b68740fedcea6a17f2361966cadebd6af26020610b8f6d2d714ca070c3cabf5ba8ab7464be7e80cd7acff3\", \n\
+ ct: \"292c8f20bae34aaa3716f2db44537359e88c932f33649bb60ca31ae2d50c538f10b0fc0a83c21b\", \n\
+ tag: \"2d6d10817550854c7355ea2abd194eba\"\n\
+},\n\
+{ key: \"de8afe0054bb00b0d503a2e426e4858aea9951c5a6a36a7145736f690347cb62\", \n\
+ iv: \"54fad5bbd983ab19ca1406d8\", \n\
+ pt: \"5912ccc9fd46666904b1aaa03324b1150fbec6dd2044ca43d15909ad34313d779d87f792f5d8eb7cdde8f1bcd77a64\", \n\
+ adata: \"5df0e7428c31697382da68df1e179a418fb52970e4816161a2e2676ddca5c7e0ad05a74b1c273783210045aaa33c3a7bb8fa0f739ba6dc93ca7fc758f4caa65a686cca7acd0da9f308edb92468e5cc1f3b514cdf7cff77e6aea7477536ea759f372a1ec47801294264f614414afc2337e5bccd7852d8f91a0e0d02caa1b2879fe897df081df9a73aa878a561064d2fb136d4f5a91960a5584292bcd0fd36322e94dff31fe95fcd3ce8ed\", \n\
+ ct: \"40d802616c05f8dd47e28ff3f41acefb8b59ac02264c02d66aa506a25be0158e2defebda7b1630b642a6c0f2d105e8\", \n\
+ tag: \"cc3d4d32deb5addbb6fef0049315d696\"\n\
+},\n\
+{ key: \"c8cac4bc36049093e0b2800d51c9ce1ddb863dbdd6ed08f03cd967f35b6a3c93\", \n\
+ iv: \"ba69accf172ebf3be9b39a98\", \n\
+ pt: \"4c1163b88bbfbb170123e29766c9308682f14b1b8e13d378cbbc17bfcabed88ea7acb28576d1c653061f01f35a5a579b9bd09dddeba02fbda0abe0a2a98f77026df803a40f69149e2f2438cbed90159254465a1ab519f48de073c498bc59a59dff3e4f9fa7219a982d8ace9bcf398dadf25084f122e575ca540c3f142b47de77c2ab18a323a4f76f7358012095af8476e1658e583fe482408ce2f2c9a11d4528975a71a0e715f94ddfbc3864aa6c73b58ad9a2932c6e2ae1bc49199690ee43afec\", \n\
+ adata: \"239e9a91d6a778dc77c5ffd81768ecf142e91f9554f06b123fb1d4cf9cbed7c5a1a39755d68e477a966f129dc642ee34dc9f16a942b855749eb09ebd3a0569e9a109b53d7ec036d8b7ff19f21cfd6aded6a811be191aef6382fe64a2ed380f9f03a5ef8ffc07c37a\", \n\
+ ct: \"4bd696e6bbd3c701024ee58e9bb251839f7aac9609d4b7d85b89100653a6746b1b80cb8d39a379739c706cecd7c9da341944d3232a5f1e364bfca543159ac9af9759ee155ccced4fec9000423fda1c8d500e9c4f404e2288d66b3c7e0a600f2db547c6803c150a5bb5bffe74f5926431d8abf3ddff4a3afbeeba7bf2a9170e45bc45508287b192a663e3f6084d9583c1db8ed6ab9fa43ddf3173d636505479d1722f78c33b064f464fa667d1984fb51e41a15a4223dc01192cf1224e4e50a1cef8\", \n\
+ tag: \"63611dce5ccd9689ff068db1cab6bd1d\"\n\
+},\n\
+{ key: \"cda3e4bdd34ae65d411cb6906103535c3e8e2f7dfc1d21eb050b24937b96bac8\", \n\
+ iv: \"70f9277cec9ccfe8\", \n\
+ pt: \"6cde353200099f9b38f844a4f71d7ab22350f2dc7d7e6d2b9fc46326390281fe1a11fc2c58078fc8e3363c0e702d1004fc7657972d1023ca3f13a667515a9a5531ab53d1efcd0e015f6d61df1755be8468570c8c7f5b29df0bd83a48117697c07317a05973aa883335d995d9ec9ea7cda8ad2398b8c108be54ab81691cd56b1c36640ced62dca81050a1715fb1f6b61718fe81348a2e59db46688dcbceecd9f7cfa86928ae2e8470dbec1e236a56\", \n\
+ adata: \"b6836e4031a1869a243177155e81911fb92413b1a495b12b169b9a55d2fca8357be7ffe7f1ef56576a3a5511e738cb6617dbd6ec18d2a67564e0538fb8b64cbbb4069988b1c65cb7ce6e94044561926898448a8026b0af74e4874d6330be47c434441d33293afa1ac27450f2d0de82f809a2d76c0f9b3de83d23a807d58c2f3a268ba3f4f9d987e13d6550b930c177296d50d4c51a06f2858652f93f195736097396126dbef0be0f84f23fc734c6c1f9e4e34964c4\", \n\
+ ct: \"f6cac8d00eb10c846843518a80ebc1662403a47d47df0a736ed3caf1293239b31892fbdd57e9a76d776c7a99145b9c7cda885d5e0ba7ffd6bbeb97b32523e82f389859c0dcb7969fb42702023dcad6d48531679adc4693de0d1dc7a113080e84d325df1e8d2a4f6c31dff7369ed7f51550094966c8682c8f744887de2719eee7adc22288c9a8b27583ae815dca512e0ce4f0293dbcc3b1ad6fd61ca41954183095e3a0d540e646098b1ac2a0fe73\", \n\
+ tag: \"b6afdb2865bb640a57673112cbbdf6ab\"\n\
+},\n\
+{ key: \"ee0ae95811b96e7f1cbf808457b9a9f5093af45655579149bd7824e8fb724c62\", \n\
+ iv: \"490184872c1efde4\", \n\
+ pt: \"9ea9c1abd58662c38e2f7c61d5\", \n\
+ adata: \"fad60e7427bac33733015b96045e9d2374535dd8908bb1cc257a2894e9bc3198a6b2803042a186345ec3c3baeff666a76d56c8481ab0c19e805f8b448b119ab1ffed735716d47564d96ccd13ad7246b8cf56a4e5033594dd448bb6ce\", \n\
+ ct: \"4471cc200753ce744e437defd6\", \n\
+ tag: \"84905585f62460df85b3a2255a654404\"\n\
+},\n\
+{ key: \"96138aea79e29efcb89e5c56dcb3340f69f1753216b0d614a5d10a1f47732201\", \n\
+ iv: \"9ab0aeda15b591be\", \n\
+ pt: \"491f5158e3eb6ecadf8c239feb70832abfc280a155bfd7b541113a3df0b8da418d36c2e6688f8cac7247fc1328f36374feb8cc579ea8066645a945150db4dec1b099f194f2148c8e2e8e93d405a3b18e294363a2584b5195456b38eacec79a339b3024f66c150554d5802f3ee59dea117210c9ab5f569b9aa506e9d40e9b975c78a4972def6b367a8de28b5d90a15b4732b5ed89de6535f640593c6040d90102\", \n\
+ adata: \"6a73648b5018a66b2584f46cb28aa24ff491dc6a112f6e83dc4ad78000b845b9a89bb0d3f8b05987806c6b654c8c5d07a1da1da62fa235d4dbeba0df4933e08bf7dc1e2e6261e8a68926\", \n\
+ ct: \"3d05287e9bc84ae1fd1dc0a2474aee99c474a956923057746a342e5d6e7af7e54deb02d05afe81cb101429dac53bd7eacefdcec6594489a11b046939a63fb1989d8242de1050cdfdc175fbc681323336dfde245547d1fa5141c7c207273bfda1780c665517f149514a8321341b446303b30a129e44551398c380c713740223b53648a6a46cb84d40fcb3f00683ff6d5be1754ffeee2c76fcd200ffed37c89e4c\", \n\
+ tag: \"8187b26f6e83ed6006775778e4e8debe\"\n\
+},\n\
+{ key: \"2ee5efc5286376e5a422f1d656e7bc4fa3c6958f283b7dd17c86722e0a171b9e\", \n\
+ iv: \"ac1d1f7af092b548\", \n\
+ pt: \"00b31dd41d74d88cc3eb8fc9da2e749ba00db977d917c2a0238eabd1d0f6161d998240154233a36f5e80f1c4ed89db65990cbbdf3fe7e223050995d9b670d41b95edfcb1864aebb023c1a5b533a6b941a41b350cd3bc62500356fe1ee3a8a19d249deb7d9f284fee38fe6a4a2aa4626b24efb2fc9b6f79a1ee3a1ebe971624be7c14d0909bc11f64\", \n\
+ adata: \"f62754ff1a38f9a937cfa13a0bf42ff940408c39c9808e978ad011d267de54993f28\", \n\
+ ct: \"84e44dd125636f2261c3f80c566d6f332d133dd48e9f84e0698c79e3b1207a6ce746457e33259edef48f354fd39a89b53b1b9da4e3575498ef30dd01dc68c1973041787cf11b36dbbc535638784cd3e802e0953d175df1ff797100d10b73afbbee4469c556b8ed8c8d04d91a02290fc266ee040d999bbda4e8d306e08c8fd1537022add1bc7f7c26\", \n\
+ tag: \"c174afa20544692d54e4249438709382\"\n\
+},\n\
+{ key: \"d3c95f3e257f19782abd245745440f62f8d943a4f30387608f85d2ae39728c2d\", \n\
+ iv: \"666e23900110f8b1\", \n\
+ pt: \"85557a046ab131ac627d9239b53a71d20ae916b53d08d91ca10edb793928b7018fd2d0339ac41e7a3fa2750017ad4342aff4819126cb27a83f6cec47bf45ebb123f7f417700e84bccd22445d8ac348ab0477f51d56d2c48b59ef9dc8c986db58d3a5\", \n\
+ adata: \"3f0ad9099e744d56e7c4d1882a7d5a2cbdd7a4b55fb491e360144b6ac146b843da03d22354040aad2eb7716e08adc35bea76d127298743c9d4323ac43c9f02095946ac50a4a6a24381b234b71f061a84e46a\", \n\
+ ct: \"db99ceb6b12c9641379bd7ce9b650eee3f508b98b9674c9b2a174ad74a23ddf787e9ece8842a97cb0c8113ece26d4b651ff96878be17a8a891c38acf77b0f053796fa8a79fcf7d165e9b4ffbbeeab53feca55d99a28387ca6f602f0c7d447ac749bf\", \n\
+ tag: \"7509c2acc1b64d60d900dcad0d336f62\"\n\
+},\n\
+{ key: \"882a3e532b2e4690b2226908a2d1e9d8e23cafb54f5e500622be0af66f237d49\", \n\
+ iv: \"fd73cd007e662828\", \n\
+ pt: \"d4948beda8f3b987a354f8c51a8efb5641797235e57b58b78e473cc46a9030ab86d92377d7450509bf5957f2c0eb90c13e2088d7080ddc0dd1b9a9625351f6aa05cca428\", \n\
+ adata: \"582df43e7a962088\", \n\
+ ct: \"470e156906dc778502609ea87e915419ea83d13acd37428b650bc3f56840a3e0d11326aee16cc473cc5d335163191848693e83a16046a138e9453062211ceaa2acc385be\", \n\
+ tag: \"7acff4718f30fdfeeeee7e730d348984\"\n\
+},\n\
+{ key: \"0c59beaa25aeda11bbedbf61e534b269644f0e916b28b026866485bb07306c10\", \n\
+ iv: \"962e00dffa75b380\", \n\
+ pt: \"4a69aa5a3e9762abd4571c8223a4326b8823b04a83acf6b3ec401559a3d0847a4d93eaf184f64c3441d94ce1c07731badf9c4f3886c929613b3228\", \n\
+ adata: \"1228564a526f1ca660aadbcadbbb3b4065d18c845b04205c5225cdcec335d2ab0406c0049bd0b723dbbc034af8c0de126a5113d6b2dde20f6fc0a960423829c61d4ff293a4627d50b4a83269af6e9de623f017f2a28af989e46970e92f2cfe83798fa6aeef6b81c84b25190a7e395314220765076332fdac3d037e024ff99d90f8dc43f9a81c9c379b8caf032fe5b1c153cbad7f245babfe0269793da353cf6ed0\", \n\
+ ct: \"4d97e11890f16ed42e634f69f8ebaef51b88ec2e42c4f2fe4b5836818bb6d792cfcb11ce4e817c373a1c1964e0d59068b3bdd29b096802ab0053e4\", \n\
+ tag: \"689872d21b3211c1f8e71beba23835a0\"\n\
+},\n\
+{ key: \"72bfd4ae387bf8ddd2ce772f4064adc6ff54d6a3819a37069f25d53fef5a868b\", \n\
+ iv: \"966b04dd45aa03cefa228d7c\", \n\
+ pt: \"d4b5de7e7bbfeeb22df4291f6b4bf98a1052bd977d2592be5956d6dd00e54e21649013380f29c6d9795c965f762eac3a756d7bfd163657eb1921699c09035bd661593715671d7c45735f8af2519c51f5\", \n\
+ adata: \"05fb4d5da5dd3e64c20d34b9da1607d6bba2d76f3ef663d2c30983b7097715e4e4faf9136239687f77a5516fe33adf5345dacf2019e3efb601a3e9f96d5363c76a9dcffa8042e3f9537bf60b95e7d9642540e6c1d8f7ee4d59d2c25c6feb16523d5e34260acf4dda05ce5db6f6f5c737b09ffc4a45c9b2903835f239f71409a2e891b1afdef4e8c82e1970b45216d25ecf4fb60bc1b9e61d396eb34e\", \n\
+ ct: \"b02c4bfa2acd29a63cdb8018848d93c22f2439caf9c7021eec438b70c37362a7e7deefcd18f8d294f8e3a1c05ed1ccfb2f679b0ccfbd187ae188a98712448808916c7480c23cc2f37c3f33d1faf52325\", \n\
+ tag: \"498b3de42c5a92ed4e1b7c06d957778b\"\n\
+},\n\
+{ key: \"87442c660b76c3190392b0c033c34f7a6df384e2104fb63248724a6e2abc5051\", \n\
+ iv: \"782bb36b3f24007abe9febb8\", \n\
+ pt: \"790c4f08d0b2de9a4b377ff5631c9e374c89356d9683632c9ea505af62f970afdc5cb6a6e51dbed9ea0761e54da7d08ce6d33829db806e4b367cae7329964a1d8b1361b3a561a4787d2fee8fd9660daa4edd7ba613b0a458e8e2b2ce88fd4dc77b7a1fbf02aa003a781e3af8f985f39805300214839ae79675c29e7a204c6ef38d8ebc0536f2247c8689f3e869c2ac55d87c623558c2e7a67db0ff4b0bde4bf5a87bb25825c1e45a64ac105adc917a97\", \n\
+ adata: \"a7f4a42cd90b3dc19517\", \n\
+ ct: \"ed7cf572933d807937a58831f9086c14824bab345323e15ce7689beef13c4ab704a2533141b808b0edee2814e2d364c2cbe8f85c64b55bee3390558df4498aaf3013ad835dff47a32b42563fbd7c9932638c2f8390d67b2b936e36faa8b79037161c9950a8ee925007b93d8147478432a1b1d5ecdb2cd5b302a38ac025d7c407be339c93f51d956d06de81e2dee7fdc61b8db994ae9a5ce440b4c33d71c9e19740c4c87fc5f02abb4fe366c50cfbbc33\", \n\
+ tag: \"9bfc90a25de8ffd1072012a29928e463\"\n\
+},\n\
+{ key: \"0198d643026f706961fa938ea73564da016994b1da81b0050e335a2bc9a916bd\", \n\
+ iv: \"ff7a74f8fcea386d\", \n\
+ pt: \"5bc382140b9633dcbe7bf9af32ab7cd748679369fa51e7baf46d5c09bb0cf488f080ae67981c3e7fa4614265af3b39\", \n\
+ adata: \"feb31bdec47c9b1b2852a6c730f68887ae7ac59b551d72cb6b63885531cabefcff7191d73a9d847943a6a6388ca34819ee117bf87541e68c858e905d725381c750d37116e615f955ddf9bbe8d1929f6a590cc3de24c78fa94130279b4576422594a20bc58a0d83c09c3b076c82f0f9aa35ab1d1f649146a06090586c6af75c\", \n\
+ ct: \"32c46b2c66684a63bba143a64276298ce33cdd359e6ad9449475757bc645ce15aabfc8d08765050be65da0f706ae33\", \n\
+ tag: \"fa59a8cfecbc94e6e713db71e427b6e5\"\n\
+},\n\
+{ key: \"ee12401d65710e0950599840a909b27654c187bac80643ecd41ceb55a171262a\", \n\
+ iv: \"a2db38fda718e840\", \n\
+ pt: \"bfc599ca65cc8a6480ddc551ac1175f9ce2a826a1678561f197acd197a1c9ff3972f9a75a7dbe625230e951690cf2dfccf235e1f4a2a0f9681e6b50ecc8f4cb20e9af2\", \n\
+ adata: \"0a0b1b0e0f4595d5140b04a0402c3f3ab6f010bb293aa4c2b4434bf53aafb3df31045a5024966ffa97220d9b0fe279cdf135705eba51f9183c8e87a7abe556ce94b70de73824f89faea27a684003420fd63ddb2ba2dfae26a59f2d7307de62ef385e2c8e291cb9947f96dd0dff85273bd2526d51b309bb06a4dbafab65c3d8ef8ae7a547c3d1de85e7b04c772377f8cf25dd058f24d9cac7\", \n\
+ ct: \"3600d4a8f73e11a5b0082f42cf746518fc00325754bf8615806d88e4afee9c9ee93427c62e6f2026ce23378a78ed8aa28b9e77b78ce85b57b7ba2b5b8b24bc2affcb23\", \n\
+ tag: \"71eb8bdc021515115e3e724599bb0cb6\"\n\
+},\n\
+{ key: \"abbdfa8950e157e94bffdc2d5c97e31a6a7a28ad359980ca2447384904ec0fd8\", \n\
+ iv: \"15f84e471d18a254\", \n\
+ pt: \"85c27f0b565ce2b2c47b4fb08d5d90ecdfd224e62e7a3bf9100d07fe852682e217c0\", \n\
+ adata: \"b3364a7c2977079f85e2da99918bcf889ba20afad000916f27458b6c48f71751355616dfd56055f42b959eaa1b8eca8dd761cf3bbd86de6f515b644d5adee3ce9389c5e1e38937c3fbfc2b04d1dababd\", \n\
+ ct: \"8c46aa1888617113cb985e94ca16b3c361edb0c1923156f32351b4eb2d39ea1993cf\", \n\
+ tag: \"529dbd28729412a7fccea9e279145b62\"\n\
+},\n\
+{ key: \"0dc27b157f22f682166b2afdb1d3ff5ace8dca5aeec12e1364508caf63e3f3c4\", \n\
+ iv: \"0765a5b81e786f7c\", \n\
+ pt: \"5e984d79d04b13c44dc729c8a3c4565bd68633dad6f52a52886a5a6f3596ec1d89ff9d582204842c8d31f8787f3f1c3f60bf913dd42fabe5407d89\", \n\
+ adata: \"99fea533750f189328bfde830b2424b7f38cddccf1cead54340639ebb4e8140bb12746958cf1832a56b05b3c795e3ee2a62ad417f43b151fae45494387e56b0d6c92738de5abee81302d32e7d20a6b2cce2cd6de647060d016bba950e570a7a186835444b2b6d6eff5f7b43c49f9fc6d573f9d7cf2136b70ce494f173769bc8bf3dbb5e01776f391733f8bda41005abd30cc8966eefaaa9a36d8fab16d3b\", \n\
+ ct: \"d7d223fa10cb0636f5a3b27bb408489b0d015b457f2adc91136b0735ab7fffd8933181b4670ff7be093058f25de91dfc29ba109f0f354f5e163777\", \n\
+ tag: \"023c3e1d79d8a0318197731ccf161ebc\"\n\
+},\n\
+{ key: \"7efe0f1fa53995dfbf7ace0d1490cd6689ba5d37db3ddcbe5aac3301b8d5ad8d\", \n\
+ iv: \"99bb11541a03ce7edbdc4b37\", \n\
+ pt: \"a24fb67e8fb09edf80ba0e8f9665f739360b8d1eede2227fc48888f49ed7322c72b47f1637bc02d56b50cec19ecbcaaa8ffd0bcc1e3215a3201b9f9aecb96c51fe04d3dcaa95c7018a16a180064102bb3bcdb20a6692d35d1d897706fdc2c71f85b2426838c10718c489dc3d853aa4af1f32b430b84ee8529eecce1ccde287cd50219f7c0d1d\", \n\
+ adata: \"51b290d6eec7ac4a877035b0e4b0a85e0e8155bd046164eb50f3fc0a281592c45e174b1fba353da0a696759922782a21\", \n\
+ ct: \"a5e33688864da014b3df798853e7432703ddda714d15a06c8c940d9df4495ab9d883d0ee1620d8265ae9d976a7b55fdc5434e1f5882cf95a40a5651f6a9a79f7a0425a38cfe712b86fe557a1e8b93d58f26d621e210c2b4cfb87421fd3033fd47f8b06de4c2d62a98980b9950f2c17ab5edb63700193078497a644bbd55e5eaa9183e5dd048c\", \n\
+ tag: \"487cb08b0d3eebefe55d33670b7d2f0b\"\n\
+},\n\
+{ key: \"dc44701e330deeb13e8bdf0322f67c8ec039c83401052edb48a125dcdf7815dd\", \n\
+ iv: \"5f82099a8592e2b6b6e7dd28\", \n\
+ pt: \"669a5b945aaade00a552ccbce304a7239d9c3d09c40cfd438c129c19dc7756e3f39db1d25a571b9f10946b17971c1af786e777ed5e1794b1553d619668e69aab10b10dcce95709fbb29b1422796b5bd8db0c825c8717f89096089da19323b19e2b08bd44ac03b42064230c54d5ff00e9ac90004e14fd387b288ff3662040fa8b479940347fb9abee1f603c34f64e14a395b6480805c2494d461cd08931694899610b8bf56c38bb156de045d045706c58858187875a2f9f80b8\", \n\
+ adata: \"c3a27e33aa3d184b16146b323d05310952e10d9e6846e483e08553180edada23fefb9d56939aa6076be1294ee2de994dbc6dbcba97c77969fb665ea3dd68b6\", \n\
+ ct: \"cca77c76143f59dae6b5ee9fa5752046092919678bb555ae315ecf2b5b5edddc34aa059f070c8a18e0c08e4fd94a5bb1e901e2037804f20d6cef9325755a5c5f054ab5f60f25605763265cf1e60262e9605edc20d5993fcd72107a3fb0eed261364aac3e4a4fb3c150f129d6fbf31367e36e03dc63f10beb78ba3bc29807e05ee93ec2189ae224a237eea8ed8409463a23bb807adb779c09a7d61297d3ea8a48eb61942a093025502accbe6e348b382210fb4a015ed4745357\", \n\
+ tag: \"1d63c0c344694a1ed5868c7284647810\"\n\
+},\n\
+{ key: \"228d2bdb55c857279733e29242afe1268fa6c820489cab6e58db53a018421374\", \n\
+ iv: \"a23b6b7857864cbcf6238a97\", \n\
+ pt: \"1686de6a79da7b7914ea8a249ba5a985549f0d8161004647cd49508d7cafe8b96bb8ac5908\", \n\
+ adata: \"df0f1a7a03041a0689c838d1b95ff5423c40b6c59e8ed918e4117baeab2b84637b7e4f0aa968e745\", \n\
+ ct: \"657054b4113475ad8b9e2f5a72be15d726604bb73ddad99f3840b1b5b6d9b904a3546ecaf3\", \n\
+ tag: \"10bfbaacb2e4fb6bafea123996b94958\"\n\
+},\n\
+{ key: \"ce897f59ede634c6b6e32425dd99c3c24b5b84091bdc99e4e9227a39431a4d35\", \n\
+ iv: \"3ecab47e35f5e6f5277db6d9\", \n\
+ pt: \"a17ebabb6d9bca88a8ee90d28166f3e71d9e9dd0b96930f5b3103b78d0d8f9e22d89cdae7a5cf4358bc66f05953728ff71b89845064d0d44d096ce73cdd152ab52ff9c352b47a2\", \n\
+ adata: \"0b61cdbd96459b85b1d8e96e45fc7a807433c892d968f7ed81ac06437f110bef81518f0d65da9a958ee3b60c46643fc6c87667bfa09fe622e354b37a6690e17a219a867f80553d608b180c3d3bf8ea9236af9ceb1b4af6358ec95a0ea7bcf911565a6c42e75c0aa61c40d2c898db2a9fe8361fb5e8c54b1e0eb3a0e84c4f2d81994942b799a4b72f28c235ed630d71f712e94ca65da077a33b5bce64c6060330e87436\", \n\
+ ct: \"10144e80dd3fa6b8a99ada1aa46d30f3c8888407ce1e497b18ff5d4ae181ceec303454ced125ec4663642c644ad441d90483fad6f6bc6250bfc26c4b7198d3139fea35c991ca3e\", \n\
+ tag: \"67905da86614f16fabd66da5feaf8b72\"\n\
+},\n\
+{ key: \"a27af727add69aef2cec041c4d070420f027f7d6aea0e19451b6bea3e110afe7\", \n\
+ iv: \"639e867509774f96\", \n\
+ pt: \"\", \n\
+ adata: \"5d1d9c3b11b5ad8a731955e0f0211b788360709adf38a8286febd525cd24dafacaa9cc6b39165e300a3ab290561a1593a1031e4807f57145528916025bfb9dfede5dd303e6e08202bb292f16fc44e8bcb3afd17a457664c0ba1c9706befe28eb7bbb4c340741f2609a517347f902ac08a92e08601c834891d019ee16185fc012dfb9b145feeabfc685e136b5f907c9b47d2f96ee71dccfcc70de2cb8e492d718f3d19c5d856808e43a7a02f623cb547fd7e227defc66cd0dd3f0fc10f471685c9f96a4a3cf\", \n\
+ ct: \" \", \n\
+ tag: \"1ca5790eb8f5052be64e3715849239be\"\n\
+},\n\
+{ key: \"86878e69a33fdd662cf010217687b88b46f5463daf9fefd004a67ef711c38773\", \n\
+ iv: \"ab89694cd55deccab9d53dcb\", \n\
+ pt: \"7acac9a99cf3321cb8\", \n\
+ adata: \"15400b496c08550847f3960075e86cb6e5f14394153b24f22d5d7f0df452a994dada52cceb0bce9b7361d3c83b5b43ef538e2637c32a69b2c599ca538f7da920895cbbc54df3d30ad136ddc00660baee40d3627e7a19d6bce0c995330b629c0b9b5303b3\", \n\
+ ct: \"079d47f5e65d37209b\", \n\
+ tag: \"0468809b2f42d652d05297d4ba86a92c\"\n\
+},\n\
+{ key: \"db98cd8292e69e33188922cbd86d4f6e30a94727e5e6348b89957f24aeb75383\", \n\
+ iv: \"ed84c528fe4caf93\", \n\
+ pt: \"9ac9a72acbe564a7da5c9063740a0945283a4c564fcf25024cd6fb9615491ab0466c07d56d900b00cf352ef912\", \n\
+ adata: \"35ae88c9ee25c7efc2fc573aac5ccc5042a8c9f43365112e13160c4aad7759c7ccd1e3304510aca7732417757a8870b2edad142382a6599bce0f10e36399bec738c26ee51868a1aba30ad9cadea120370785eeb7c7a539690cd11895fd80fe3451364c15a78767927eb74ac73587182349d78a9fc54a1169f7a86d8e3dbcf55b10fc0958b8b407778bb489753715865deabbed125f7cf55b30a03318bb6b0c8cba15d0cca18e89667d2cacd9809f0459ce28e828ebd9992faacd2cf6edd6f1\", \n\
+ ct: \"3754ce335edac4735d343dbd7c6c0cc0880e6647a03001b20bb9d34e2e01800f35b0765c70b6161a17eb2c4c00\", \n\
+ tag: \"0b47d0e63162f115b0e58d3c3f525fcc\"\n\
+},\n\
+{ key: \"b3ff39427979a60f851ef406148daac7c2d787adbe4e8f5a7f332424c3e503e0\", \n\
+ iv: \"425f6a8b692b34cdf1795b2d\", \n\
+ pt: \"988ef95e063bcbe24a64c76d1425a60eb72dc518cb6494a9e04bc19ffb19a818285f27faa8983d1f5e0c5dce1858b039b570fa4fe5\", \n\
+ adata: \"2ff6930373c326ff4da57ea9c10c041873d880528c304689d9bd55434c1968f3a7d3edf8ae8ea9612499e9e0fecbad5e2b34624c8c817b24f2e5ac6685a0e57f85f19375574acbbe862d12b4ca9358fe0f78857b72a6fd53a8f29b3011a759b35ef504e0ad298ae260caa3ab52cf1089475c9bd7cb5b62a08175fe46f1a1260c7acc4ac660f67b987947320971d34f75ee41cd8edc69fa2146e021eed178355dede1634297fd6a504808618c20cc108e57c1153a\", \n\
+ ct: \"b3037ec963e8504b4b673ba6e10fb93c0d131e6f83e0704560d4aff1c9828e93ce482aef1d046d752a7f0599c41476a613e52a8fe2\", \n\
+ tag: \"099b7b2727a0d33d065630dea808a515\"\n\
+},\n\
+{ key: \"d5cf25fdb5f44f5ca63803abebd1f64dc5f4e29ee9e05afd686fcb236e4a0a42\", \n\
+ iv: \"25efb3f209a7660a2410831b\", \n\
+ pt: \"47fe8b8abf6cc55458f6848b188c222a1e4f76dc06dbc01f2f287e5268486ddd196a2fb04c47851c7230b65347d5b1b5e0a1ae2073853d67811657f4be8bb44f68add6a77dbbf6ea56a232e7c19ef5389b6f35731274c07d9ed8e2b007ada7e742268c80900d515bbe277f\", \n\
+ adata: \"cbb7ed5ef200a5bd1641b44103726e718fc2a6d8e9f5bca9b34b81c135c02190393fbb45b57915c2c70828b78298a69d1356cb5ea583d90da80b9059c7f94c2fbbdd\", \n\
+ ct: \"1cfde6d6537806534e5650aa19226c0230d3e301f2f15785b6846c8a71ba2662ccc826d6558ebc001529801b454263a4a6e036893187d40a2b8a8e35aed34ea4ef74fe310eabc267a5f55df91cdff33c4dee5db0e994f39f4a341e8a4a1b1038113729fad0162906ee3c18\", \n\
+ tag: \"a16193df545bffcc12cd65ec85f2b596\"\n\
+},\n\
+{ key: \"3b1700944f05d4be13cfc60a6b18496305446838352d4f3d71878b7ce590a3a8\", \n\
+ iv: \"b2709d7ccfd4ff54\", \n\
+ pt: \"55f650fac83c55f8599aa4406a0a589b5e33dc367a1b791f91d7fafb15deb02438218c29b58f19fb6ca8bcc564e6c79d70f322699b0fc060e14162abc211fca590a5b3b9dedf50efd574b8cd4b1e969e77d6dd2483438631ea7016753b2806317de6152aef057e9eb92fddf7acf6\", \n\
+ adata: \"fb00a1a1ff1fb9ab037f7cf39c93b2f8b85c24c79711f6033fa7a4a02f410e974d53798c1a5c19d7a23a38653b10dd3ed6d1aa3108ebefa1186c6239565ccada413e635e045cd4e1670a0636334e909bc96173ead0c488e1d5d6fd8a45765710b8022efd6afe76fddd8cc64e1a737b296a95a8ea5542759bde2007314d66af69f249ecedd87525cbb4ff03061964386f56f8bf5208e8c6b8bbd0a2c96cb4aba81233\", \n\
+ ct: \"cd2846a77b15d88087ef689b2bd505bff23c7754f7485725025bd3dd533c9ecc14b90070eae22d7acba4d7198c905deab115dbbb6ea9d5cc61a0e8d337c3fca27c8e59f6d81b2abb5ec968823fa9681eed6639ce5ed55741e466eb72fa4c0e6d4ad87d9341a7016460964d69b94f\", \n\
+ tag: \"faef4d975bb446b0b57a5a912bd9ba35\"\n\
+},\n\
+{ key: \"ed35f825a980fdfdadd207b33c0d4dd82bad44806534b5701b2facae90499247\", \n\
+ iv: \"80a783f6f9ad1156\", \n\
+ pt: \"533d606fd8140b3481a456a9753bc2cc940ad1ec2f717111b6529455a2128dde537c3aef35f01c119cda94aadbb2d8a10b3c82b465851c4f4dc2021dd52ffacd0d6418de1b23a80bee83001bd1c7d800fb4d09bdabd4c4d57bf552e48e87c877134e2b769c10bb6f7b13e32304b57758ea9480bedb5eff19b6859f3a3e7dbd64e11c3c914712fce7282577b33428b3\", \n\
+ adata: \"e3480f07257de4dd51690de5fc8ac2a04faaba5fbf357ccb8fe3939c0a33e286abfdf5aa93bc4dc8c0a233f8143a2b00e80ca210307f44c6933b6896d9091e6f9aca60907786af053cd2b70be2d61c3e1f0bf656e864689a5c82a080e9c52ad0f23eae08a9599bd5e634bfb04b58979df2e79dffeecd28cfcd2ea2c70e7751f2a3767acce24ab1b2d5903974dcdefd0d\", \n\
+ ct: \"d0d442c821eb1e2d5933f27d6e00e66c8e4879562c5c7648d36c8a61b73365043329c343799a3c240ec30fdbbae77a5ecf61fa8c2eeaa662fc5d80fccef6dd39a7cfd839b2f7e81828a1ed7e10c8770c1f27194bea8484252abf44ec0c640a31114fef40ab4df17df79d1dd24fd2d94e13d9b59cf33f29b0e088f90d1f5d0a2a93d4b70d739732244e39fb7eb21087\", \n\
+ tag: \"5ecf0796c58de09110753028192ea34b\"\n\
+},\n\
+{ key: \"7d5769d344793625ded77e81cc1a967468d67d44323a6a7ac0b7ce7a3d9d3b05\", \n\
+ iv: \"4cf5f04cb16e5fdc\", \n\
+ pt: \"3709d2f237c37041480aa0330e8256d9ba6ddbda45551ead394d8eb33620444b134a6902a0b2ad25b3bc9211eacb5c13bb5c2fdc0b11a9585c3ea1ce765f88ddc8871ba2d1965fe8a5fc6c1b9896fb54bfdf92f9c2d87e98da0e5c62817c1ca882ab76c19352b0eb4ec0d7c2654ecbced753656482c3dde38754de8f8399041bb2c6f370d651201d01cafef272055cd29abb5a2ed537a8a26f48cd96\", \n\
+ adata: \"f4b1d0004b7965d46dfba99869d140c709f931902f1f64bb93dc106177f15466faf586ee20229f7ed71e61b2fbcdea4f85d5173ba50044917eaff8f505df13a51001a8b359\", \n\
+ ct: \"b012ada3a9dd5b075f683e2ca5b7ff54339a547ac7e1dca06b3bec7c6b7b0c17973b4eb3c3e426aae04605d934c8f666bac1c2989e7541e8ecacea8bb7ddd19efa2c7c1a28e3f7a89bf6d39f174a8bf1659188f3fe2081b4a7f1ff7ab2ccd4deb98950c698e2f6897c534042b3e989b2942c8b9cd5835cc0cee7fe7b0a0eed43e8a277b96a3a9f6cd62f76f11ff86005595890d89aecd196fea118f2\", \n\
+ tag: \"31174a2042dd0c651ce9f5dbb9b03ccc\"\n\
+},\n\
+{ key: \"96d472542f071a9737638cc6dbb2cb9981391adca45553093e5b5ed6b9082c90\", \n\
+ iv: \"6be35a21b26c8663\", \n\
+ pt: \"d0e96648796b8c55457df94c4602d0ad8962d56db294f3f47533b0d1235e9d582e2eb8a7ec2ea5dd126a08f3aafcae10f41174a847c3c93d861913910e6afa3bab17577c804da923fba4753c2ae575438bdac086893353f63e4609c7e19b4aaeb46210f90b41e29cf634a9c2391dedf7162fe3c966f5\", \n\
+ adata: \"089128ee932e1ab16e577c83478589285d4c3a13fcfe902322fa6c6f847883e925c45d0680582c6ced54d2759cdabb7145142581bb50da2cc1757bb1a1865c78a1aa664dac63a1bc800fe6e4874abf01e62a1a38a094a68f9d94679f216a91ab9462ea24d04df0ff32780ec3575cb738e0fe6fbf9bfdfb27bc6e52ba\", \n\
+ ct: \"65b34b17ecebfb68726073dc929f689fe27251b66b7f5767c27b5895f123a58621450e8c5fe414acc752499266ef531369245d259ad46d06c247adc5aef85da5c0a121e690d0da579f135b08260792ee56f1ddfbb51dac6b231d1cab4008ee2521e86db7831d3ef0f673439f65f14eead60bb78840f7\", \n\
+ tag: \"1c6f706806344183887ce56e2eda2ece\"\n\
+},\n\
+{ key: \"5efb824eef4defe669b0e33716f21d26c48c576faa9bba55f12a1ecc84168b71\", \n\
+ iv: \"3d1107ba27c273fe27c39606\", \n\
+ pt: \"b2d2e8454722b8054a022a453e5e0fea6528066e1f63c1a754c5905936f4add68e114f1c64cdba38f96720c4bde8ba5dae1b05eb39089394b58503a391cec9429c09b1283b8b9886ea5d7cad332df6564cffa71f9518c846b68cfb479a6aabb3e86813ae00fbc37bd882449248426a8d870bb51133a2ff51c49f180c576296363d7cb61bca0a33962e68033d492df4745aafc8a013a9d567674d6eb277108c7d5a66dddf27c8435571fc0e85217238d5d844e790484efe8510b70cda4c13f7a17e5d\", \n\
+ adata: \"18ace317e4a0e6a4e26659c62689956cab2a07a7d1f6e94812e5fdbedf62a3084a486477be3b3608548d0a6c9a2a487f791f4d7d498873472116fbc97e30dd443e495275db0891a5a2f42dd971025fa8f3d9d024eca42405346195ff581d2798f3524ef474a98ead8acfe4cba2b8cb1aec2c05594497757cbf8512ef0d9ae37b1a9d383b991798ff24e36ba6a560a4f4ab292acd71df5680362bcdf07bb3e5edd93f163f1ba6655b90fb5e549726951a7b146e78\", \n\
+ ct: \"72db7f84ba1b3f8050e201e9396aba3a090c2b0fbf593df7c703a14ca0f51068f5f70f28f686454b50fb277e77eeb52b3848baa5723fd8aa5584f1bb02dbec419d05592c29721f4d8757239b35a2b64ea87bcae28ba1ecbaf2fb9b4941b53410050c61c7b3cc4d701afdfa6c1a7653ad0452b1f68ca04b05a0a5d709e3d104050117b5959492e64b12370500cc49ec48849d2bf1d1e2e6c65a0ad7ef0c3b836fdfacd50bc9150153de2f74008c27572c8754d464aca9a045860224a76285cc83be0b\", \n\
+ tag: \"536bdffc70c3d4b2da34ca71aed9d41c\"\n\
+},\n\
+{ key: \"a30045bb9c77b8859655f05491584294746fe3cadca914619905bdd80bc6f765\", \n\
+ iv: \"a4cfefada57494c8168178ea\", \n\
+ pt: \"44a9514739329efecaf424846cac54f30abf6dc84706c1ad5d84024276861f936af85309b18b799dfa0dda37d0c5dfb625e6edec611206c988eec6f5b9066b697959b8e56bde1961eaa6f2259fa97c0d7fb59e3a18c70d5cb6c91832f7877d9f654ad754a76322ff6fec5fe45c19f2ee94d4ffe6dce1ca9e33584b837a936e865813790b40a819afb47407a0fdbbac55d2a5b1ee0319afeb36a1c8e654e012b62ee9711eea8bf072d7bef9dfd0f8f86ab82f292e3ac09313a4fc5ba3807353b8825bd5825239b9\", \n\
+ adata: \"55f61943df799d44b334470b6a2973cbd65f78c285b5f18c943ad3e2c33899ce5971362a0a67c3\", \n\
+ ct: \"68a205c8c9550b5fd18dfba252201da8245d106d0d05f699df811d08e792ee021e316033da3ddedc9562a87e160d8de3b3b1c846c6385be286cc68cf49d2c9137efe8c8d6f141dd00bb7d85f7f4e48f0ec08671766b2310de960a193a6434a090e56c00c157ac13d7289be70b09b94f567d0ff9b6c7b72db6c02cac1c6fce558c9777b9156788ae2e1295f78994484cff801b5a26ff99f4f9ef8bf06a1e68e54f5bf6f2930ca45f7b967c2927f031c3915ac96625fc9245c0a4c747cf66025df4c3d5588de146e\", \n\
+ tag: \"439d4cc967ed7d666c46607f9dd92766\"\n\
+},\n\
+{ key: \"4b878cefc9b54afe7e7a3e66fd3d29d01a807b4001bb43cbef8deabaf889d157\", \n\
+ iv: \"aa2648b920844d3729763e75\", \n\
+ pt: \"183a314625ac29205c385613c15fd0ff34e03688f7032884bf00151c95c9b4f111a0a6238e417a66bfeb3e8fe5813fcafab5bb49af7c174951287bb275bb95784a3d841251292f7b1116a2802f13db9403693e12254f4ddba999954aaba6fcf018de4942ab292f19fce0d2412dac4ad9fb725d464bd98bbcf482e05aefbaf6b509a7d309d9afa9f9c88dff5779a5237ecc38374c5ad2f54773eb7caee286f55b5d3e1e63dc91b0f8bc8510d75d7fc65418217439a92235\", \n\
+ adata: \"8877abeeec5cf96c062ed7e54af1ce614b12f3071d646a8d93031df58233040bec4b0c95a5dfdb709840c04fd54b22709ff5caabb56c90f0243191afbe744af7eae9ba95f77f4d91fdc8e5ce0cdc7d57f44beaf2cfbd3095ad4530afb00f959f73e946b01781e08ff79b4b66dec81c786f59b4cb625e960245bb68702320cc49c3f5f7b15c65bd2a1d383925843bbc7427a9ba5eeb3a5660f6ac9307fa7712f2ff1b83f4171168fd03eeffca93912b89cd8cdb6c3ee36596cc96e6102a8725495feb5f\", \n\
+ ct: \"de30028495c8c871cc0386dbae5be900d4f62977a1be0ecd13b00123115422beca43d58be35e4a9d9b2582f18a7b7b995571d3a8443f575db9010a64a07be8c76573af656e153ad9cde69fb69cc9c383201e1a328f98cbd0657469bd078b295c9c0085e3d213aa37d6dc0d172d2d288f329a79a8e976cdfbd0927e20c4b8e7aedc7123ec9135fc18c2f8eb4b1ed69ac241ffe9238ef6d64f4793ae86452fb5fd61e2e26a4051d591e7b56c20393d0a2e4aff834eca6af4\", \n\
+ tag: \"909dceab127a7f4c76f2e16805fbcd00\"\n\
+},\n\
+{ key: \"6545516d9906fbce229de587d7f59333b713c8469c8d0a5fe400e5c9f77510bd\", \n\
+ iv: \"0e386319af8297dc\", \n\
+ pt: \"4410fcf3d67ff0afaeda868ca9aaf520d3c217f8da9ccc5a8b51ac5782dd766d52f0847a8ec94eb0f380de499a1812\", \n\
+ adata: \"990eaef4c9fd79ce94c431fe23a4a1cc0f7c3e76e5ea2debee7602ed2b4fc7e869e9d7b2eac79c0255a29957051a9bb72c881cbca2d9719b4cac\", \n\
+ ct: \"7a4aea98565b63dcdb1f2a712141032227050e0108521178fa2e38376371a8b0bfb801e32d05e079ea4cad68fb9e8b\", \n\
+ tag: \"f087733652a527d66777edac6a3fb8f4\"\n\
+},\n\
+{ key: \"89e1267d4ad258b4bb2103ec42398e6c32e16d4cc8aa199b3c3825cbe9845ea1\", \n\
+ iv: \"2af4cc869fc74d995633d0c5\", \n\
+ pt: \"06c668f25e48808a8d815298ca521c2396da5d50036796201284cafc7edf35852ad6975ac9408ab627b3d6557a4d00a5df9e35d98009292ed5b8b1763c28889ca51ff50799f36c48eaf24502459388acda77ba59f3ee34dee4b07f23d877caa9e782909cdff0e619a7b3a566a26e1ac03d6a19a36eb23512847b\", \n\
+ adata: \"a3d58e109095ca27009ddd931de8a60ab111d7db0cccbeea44ca8064e5f492b7783a2e968433767a6b2063c0c012c167107937fc6d0aa12067\", \n\
+ ct: \"bd69041652af35288f60375ea7fb7b4cd5f3b1271f5988d4719e88d49ceb0a186f0ad1df64683e057e7dc5588ff3d3da6743254017ae8cc447e5f16070be9333c0c26a5dc5db11cada6f002796382902b789097e446abb6e1d12eb755b38adf409ca7b9138b48bf2779d9985958c27d8c53f2b1aa74155c9f0fb\", \n\
+ tag: \"406c351df9af6ea472b85f76449bc5ed\"\n\
+},\n\
+{ key: \"596b1725d1fffdf68768512894a3833c5e5f565c8b8094c3fe760ed6edea6a36\", \n\
+ iv: \"3c875391c5850133\", \n\
+ pt: \"cab6b08ef3d0ee106f795f5baa3c9d65369e\", \n\
+ adata: \"23066f9e7934f42e2b0578d44e788d43dd102df35ad492345809e0c513e82d9f0f012282e62eaa207e7ad0ca30969326dbedacca919b52112831695a6e7873b1b4d1d3568466026a96\", \n\
+ ct: \"8a84a1148da0c7771f6c5976213d9d0070a1\", \n\
+ tag: \"cf9552eb7f5880eced1b7e96bd8d96e5\"\n\
+},\n\
+{ key: \"43a67554d6db04f2789e713e2923a08a581450d02f449fda05bf7c820a2fac97\", \n\
+ iv: \"397d6d7bd6ee16fd\", \n\
+ pt: \"a35617746daf599fc7626000787c3d33248dd7aaabbbdb7179ea23eac71490a0549a60\", \n\
+ adata: \"88dda564df18a061ac78d512aac99ee8cae34be5eac77667c46bdbad07de077dfdad0f14fe0b83e6719457e7b61fdc13a7f48a490cfde8f19d4d2de17ff60cd892\", \n\
+ ct: \"90a0bc914a214949b1bedf833f7ecd5fcabb5b4fc0578a1d622493f35e61f609cc9508\", \n\
+ tag: \"6973dcaf8f3880df50ef3766750f7e25\"\n\
+},\n\
+{ key: \"1364d90f6a5728f5a7a3bd06595c427a412977c8dee3133b1e970a9c3c16caa1\", \n\
+ iv: \"b81989a90437075b\", \n\
+ pt: \"cc7520b22fa5ae72448f4fd2e38cebfb7b021da1670f5d4b55a4f77affe1b95160ef649d04a4c2c5d7063faa12f7d07953cb261b83d21aee840443c6ed4a488940f49088519305ce6a67a20c9e9c5313c7f11237c8d4eeb4878d55febc5d1906da7297f1c4de34a46a1f67c23da7ea10b4140aff5a26e4abdbed8dad198cb6\", \n\
+ adata: \"33c5656f30f775e800637e5d54f0f3b02a36e98f24b29edd00c46233855ec2bb69e1e1fc\", \n\
+ ct: \"a4587adb4ad44df4ddda6884ea740b58d827bb4e3082deb1ba4c1bfa777e60dd14b387a3b1b2a2ed0727acf42cceabfac73018a7f78a1f831e274e3cf8a335d331b115eef790f16dc796bd686962501fd46349765034e7894a1d14c2e8a9e5b581e037b59a4df1d4b0adfee1207618630741a26b8005c905267f6be0da7dba\", \n\
+ tag: \"2c926372a0d795a5a2afa2965ff109fe\"\n\
+},\n\
+{ key: \"e7b62ed9aed5c136e688e7c241d256394da34ba88b9ebe58f5634f8d1bc6656d\", \n\
+ iv: \"a9ad8876c88497cb\", \n\
+ pt: \"2654febd0cd5f790813085f1abe7e0b5319bee2bb97526d43603050c302de7b4d8166ba43924ea265f488bca2752b96f215c5382f9f275dd201cb921084db45bc614275aca636a76782038abc1fd63683245d7e5cf7a7c91e3f6bb43ef982f366a5658007c1b2d94042af955e05327a1bfa3247cc916c6c67f148368392b916dffb320a2c7213b5caa8f39ce6086e8399b2f01a410c29c9fc11e00173576b516a1b2f14f89616837dff0111268d5241477718b061f08afb669c947c0092d03e5abd0b3\", \n\
+ adata: \"e54f381a428e58b240d33fe2b1acd1\", \n\
+ ct: \"dd34bd01873bbdaf9acd805151750d471f756a477ab776fdd3d19070d1241c9f294006b7c2f0a6962cbac85e63ad6b3e3daf3e6822ee327f4a1db2d752c02e3356748d3b9b8bd7163ee507baebf5d61b64f150af710c9847a5eb57a76cbd59bd084c6a12367bfe8d0cea3b70b8677f67d6c684c17976a37db1f73ed4205d0efc23810d741cb3e00bd0c9745784245658f2f8b82f1c2c62f3d4d48f39e1e1206241e797efc5145313c0b18dc72e982047c5bb7701ca0f5f055ec66f0ba2cf5bebf6de22\", \n\
+ tag: \"adfec0f5accedd532e31c9edba84d448\"\n\
+},\n\
+{ key: \"066135d19745cd4cd3af20d3a642163c2871c589bf92989ccf7978e0ab12a0d6\", \n\
+ iv: \"cbfe73f393ecbb500fedc0b3\", \n\
+ pt: \"d0d9cae24bde34fb8dcc7427bbf369045f6fe17ace3d55b4a8127f30a517bdeb572439734e121a772cbdec21fd4133362bb1fd6331eb648a995bef2d43835d12e690da6f3afb115951672d9d394bb6c179119d10e75e85c63cfba16303c9f9ecdb69fce603126451102b6413137b023587ff10b784dcd23b21894955380dd1278901373e16f74ea2e968bf0b95170bdf7fc18f86bbb0d8bced18c6c53b6f25\", \n\
+ adata: \"4644373c52a226986fe500ccc1120946f4f65f9a57b230ca088e631241770f8faef345f2290e\", \n\
+ ct: \"746b5318fd2a0987baf00cd0a50b585ed9497da93b3dc1c41580526acca1d4b4e1fdc9b92159bd4588cac98238db486bce2c998555836721f7c8d9bad4553a5479e5eaaf9cbc79e35db9ad568acc6fc38f6e3537615e0c30e8510a662f2100b2e550071db011496b24a89c98e1a31457ec6d6a7d1181f561c8eb055a7460bb7a69da8cbf82b51dc25bc54abab04de63bf48ead8370933cca130302750d43d2\", \n\
+ tag: \"3abcc9d22dd5465d2d8764b6af1fcfdc\"\n\
+},\n\
+{ key: \"aba0b869ea450514eb215ee0d13bf9c45791d7272c24ac2cb744ed84737b7433\", \n\
+ iv: \"dc6894c396188bbd5eea0ecf\", \n\
+ pt: \"ac3877b4548c221a7becdc6ea9f69ee0571f6ed95b399b7025fb1ff72920ce7f6e6b1585f78aa448f24b7d\", \n\
+ adata: \"6a67007e02a2fcff8c67887a907cc9e399aaa52957d5be4c1cf58ed8c10466091e07311c13b64680ac52fcfc59f104e3a00826208f81dd7dd2aa6c5474261b97052d1bdc07b2719fbd37aa24d6c4379e56\", \n\
+ ct: \"c1a84f557c5fff86167f488484c9bc1beb297a580e201575e025ccca14727d3963090db1b5f66c663bf616\", \n\
+ tag: \"3e144c7b13f82293318f79d1935119c2\"\n\
+},\n\
+{ key: \"e7b06871e60d6cceed8e8bb4db440f98c9193d3ea6bc6f73adc20da911cb659c\", \n\
+ iv: \"d6320f3c74bc3495ad1b2c06\", \n\
+ pt: \"ebad4fb9f515a9eb55\", \n\
+ adata: \"693c43f0c8f0565790060d6293d13ee0c6d0623534f58909ddee6a973994cb9b3cd0e78ee9af81c0223d8f6ed515dcc96c47596d2d4b23e2d2a41c7ccdbc3bc5f53cc1271fd6d0da30c99ef048c50c9179e3e7fc7b70485c\", \n\
+ ct: \"c8730e7d9656b80838\", \n\
+ tag: \"cfd1416e560c45c1fd1e94620353bcb5\"\n\
+},\n\
+{ key: \"f9f4a9cd3f2255bfa083986bf172f7e7896154d7193d3c18b57df694dab26b9e\", \n\
+ iv: \"229c9f38b4ccb853d6285e9d\", \n\
+ pt: \"dfb42fcdc54a0ab39283c8f82a5dd46b758ab580a9fbd5b192bb70dc5e63a705ec7c29d6404ac11d6a7bba7a41cd52\", \n\
+ adata: \"9642adddda882cd6d142972e7b3190f42d38bd89ec9d1b889e6e1908ca4ca66494f7091f7990019e9d29dcb930d49d013028b2c96de899e391a271dad8e48016275e65c0e444221c10ddbc889265f19006bb08b4a44089f841cc15512ba2ca9c1bfcc6e24a1b399c48c7964718d2377111b46cfc4ee6271f95\", \n\
+ ct: \"0a3387a08f673be8c6fca77549b8f994c44e635e3c57f78811e7819451a0cc89f5ae890ba24403c59abd6ddbe036c0\", \n\
+ tag: \"9559c79bf7bef4fcc3d7834951ecbba4\"\n\
+},\n\
+{ key: \"cae5bf9699db4f6ad7ed40a3489ff5ab87e91ddf0456137ac8e000bb4107d41e\", \n\
+ iv: \"f26f4e1a2f69737d\", \n\
+ pt: \"01c03719381087b2f75aa2a7ce5b3b17a1f8071d2d77c64937a4a289d73fdc571c5af47ce3596a5b01a14eb4ef16cceb0b4fe0f5887337bbffff1b0d3d5b5a231dc5d321d7739d960004a07db31d3eb76ee56821d5fce006e0b8d82c2834e114cc9802dadae85a\", \n\
+ adata: \"a0546108cf43515788aed5a4078871223fa989a3ae1b6196beb634bfea25c9f249e9936204c8955ab63f1740ab98e7fa5e38\", \n\
+ ct: \"c0db06c12594e86312ae7d6f7fea8ae45dc1a79bfc5074e303db5df960ca555888fa07bf4293e4a8ff65b58e9a2cc80cc2443da8e4220a5e297cd2250d56980ff5467099a0fccaa541e7d094b9a2212d916a67ff0c8df8e97580fbefa7e60a9c63156c65d49ab3\", \n\
+ tag: \"cc074cea9a693e0039d8fa0d4e7fefc5\"\n\
+},\n\
+{ key: \"e84025b98ca3c4fcddee1e60af49c664b47cf5df1d787b234e3d91dfc01cfe0e\", \n\
+ iv: \"04b7651dc7694220\", \n\
+ pt: \"596e8b8abb516b253b48d8800b43d4abfaabaae2abc3d80a9026c51e62c87e2c54b88df46e80a30bdb0c3bbfd693273042d84ff268411e83fc50d52d9ba61804b2fba9a8f990f1f022fe0d70e4f672248e063320ef8fa6f57ccfc1224533a0a46d365e99274718efbe73ff1ad999b9a5566bb55d0e6be207eaf6566c2aa68797cc1df360328fbb46f3051506220ea9a32afd17f907195979d8d040e44ccbd519925391302aed0dcb035c5adbec51\", \n\
+ adata: \"f6d23fd28ea2f9784086cfb1d66a6f6fb4dfc50167290147f93d0daf69dac4e33e40934bb1f74cf33940824666a5b508049af6c756652c6f1b9b905a9eb3bf42de6859976a9b4fedcd9d4fadcfe1ca77ddc5012177ba0f9f9fcb79dae1cf548366149d8ec9c93d3bd86593a2c3eeca72f0e547e3eda72d6624\", \n\
+ ct: \"05a7e6bfc1ccf0ff04b87f10cadaad1dc6bef91403312e107c10fec89529d8ea75e2eadde9c29369933ea3c3972d60716202901aac0b663a5db87b4df2daf67df29ddc665529fe6a172c7578d72e807b2bec397272360d0252e25bf8558a8506eab538f07508db0e01f7aa7f42b6910d89a7b05d57358be02730d5291c301d31cf8e1f1e8388ab6dd7480c0b826a2b01ed1595085826e8c3f1dc81b6d8b6d016702c844c552449259ed9671f49a7\", \n\
+ tag: \"0c0fae8a5fdff7b9bd1795b608b0d14f\"\n\
+},\n\
+{ key: \"ebedec41c7fb2d8d4efe4f094f551671fdbfae8a8f6f7c018b1d1efab9365b3a\", \n\
+ iv: \"9c69bffaa7b9d239091c6002\", \n\
+ pt: \"f6daa99a9d1181b42b2adf0f6624f2e9a63be2d8adad867d296400ddae710ddf6f041d8142f2a066c0c6\", \n\
+ adata: \"c534aae6053cd26b15c2ece39a198f41397e6c3a5d588f64558cfbaba9d9efa639002c97e8e6545403f099ad2426b8fdb9eda1b77bbc0b008e12a68b5dce703f894548fc5e3fffe5\", \n\
+ ct: \"5b4c345e2f68b03af8a19da0ad9796f5002e71631da0f21795daff7103f8570ef7fe3817b4374f1ebeb0\", \n\
+ tag: \"7a783012166cc85a4d8c14e36eecf67e\"\n\
+},\n\
+{ key: \"416c13251cb00adf87ea329fd6054ead4703e3a7a7983b62c93cfc0e8bfdbe5d\", \n\
+ iv: \"700334f303c47a99\", \n\
+ pt: \"238b1e7bd823de07d983b25088fa8305c47453d39222362cb6347e24ef26013edfc061cce82c1ec4732b663aad365d5150877e5ce31da70014452fd12f21f62d31cd4ceed7e4c463c78ae551912ca0ce9fb9b9b4ea40d98cdc1fd74dee45c03046f70c0725044059f9655ace10\", \n\
+ adata: \"5309aefa200ea309013b4471ca652bb2ff5e6325f69311b3911df6e4c740a6272be0fb4e8da285df4ce525537935c582ea8e44d07df954bff4af81f41568efb5d36b5cc77c7bf5164d3058281e27a14d79beb29fff7996685a44590b7df8b5d40ae2a2aab8ccbf0de67917\", \n\
+ ct: \"1002317e2157dd01bacf7a514cede103f56dcfb2522e7b6e73a026043159e8a97c425f68321a28be580c848b89f027743d90a7323517cccc8717c9d7afd31d00288801f0baaf8b54ac901b64cf58f4e3ba6fdce2355305413a1e72d7b9cb8721a7b6c3ff2a548cd5dc01aa9d96\", \n\
+ tag: \"4c9f58b6e9bd7baa2b1789c09c680136\"\n\
+},\n\
+{ key: \"91619fd5aa9f6e68c06662d819cba79c57c0c396709f91bdd12e37a60b43e707\", \n\
+ iv: \"f1733ec4362f44a3aa38712e\", \n\
+ pt: \"ced39f15\", \n\
+ adata: \"493f8217cf45e14407ab68a50b0a55062fb01ffa7d249b33f18edc6b19da25c19edc778f61493b\", \n\
+ ct: \"e1f3dbb5\", \n\
+ tag: \"e5940e27b97203933f7780c1860d021a\"\n\
+},\n\
+{ key: \"698a993a350cfb61783debb474895883f1004dac75e389c0c7fb7298a623f6b8\", \n\
+ iv: \"dbbc063bbbfce42e8236dcec\", \n\
+ pt: \"518a132fee100c093416f0644111201034dc50a607b32990a1e03181f8a9dad2ea3f83ee12215924f6d19513483e58b2ac44acfca51969dc8c3c54d26b345d4fcd8fa25a8f37c2d14a075a6f87f0224e1af91d749f6c38b5e4127199cef3465c26c4a41001d15f8d141f03d413bc461e00908a6f619f0882d2a454\", \n\
+ adata: \"04e9640a2c4ca47891a1e697fb9c3e33bc5f081512a19234f6a923eb95d468162d71bd07b097bbba3964f9c93ffd53f851a9ae526a267b60e3342f415af9a978588a3e3d13462cecbc8f1f2e1f7ccfff597f9d83bc64e6764333ba9c7d72f6e57793140664\", \n\
+ ct: \"c570c49a87034d8acc6927fd68b298f31b1fb832241fe050add7546e7b41da48b7179a3a4878507eee37bedd35586769d0a4b20281f376c6bb37aeebbee119588f6a7501280a23662c1b41e593f641c8b0deba81f8beb81c89d6f377a5dab0f2e507624f30780b40d841b15bd2e0a54d5323384a04adfa12767a0d\", \n\
+ tag: \"fbaf9a14253ae8c216171a2a0df6ff0e\"\n\
+},\n\
+{ key: \"9179fd924d2fc00406eaa35dc64bd6e4c4c4267f2644fbde89aac70b214a5604\", \n\
+ iv: \"b23edd0f667aaeae714faf71\", \n\
+ pt: \"10de82444cad2a21c76e87c42ad537e704664cd97e5df457dec83f8ec77df77d5c027c6847b73f56f2f062adf994db170e2aafc9177ffc1f8a82f2bd5591a6b9b7f319ff8c74e2e0dd38dadb74ad70464b74b00f9030d6924ae7a9eed0852d0d42c9de1f333110742bcf1bac814bc4741cfd88ecd594029aa1836b6cd3e29cfe936a103dc9fb332b7a645ecc\", \n\
+ adata: \"1b09520a9c1ea2a5040c45b9e39fc3da2a5e6eaa1e5d4574f4d8b94c08dc643e34d0cd35e26df1c70b9aa868db62426d0adb471a2214184245e4f0de808f6f473ebd3d3b3fc554737db2288429d6bd8431da17c1b9b5db7c58fc12bf\", \n\
+ ct: \"70dff2b6f24d0c8eeedc575c40fcf54151d4841291685fc9991048ff0557f72356cf885ad322a5bdc5827d8b582086cad54b3c3a6d002845a8b613a64f21cb8f7f5b7a5cae37e2703e469d1b0de3b3c2dff185d78fc32fb72654c4b901c8b9df6463f33cfd3d3b649f945374817ec454f8ad001f1798e32a5db0d225912d90ac5c093b4536adc96520a9879f\", \n\
+ tag: \"b6af033e688f889f25a9533c454b62f2\"\n\
+},\n\
+{ key: \"fdf7f6c6cb27777026317b974f549f81f60ce5f947c60d6cc1114578d1f26578\", \n\
+ iv: \"2c6e7520a65c75c5\", \n\
+ pt: \"f96ed1868961a75376332b635819b1e682aede38f68381d0ce9f5bd8744f5e30d3a96fe0ddd49977754c957c560d231ad9a3a034447a6c12e69ef139f9987d9b25bebfac5155951768c74a04fbab3af49747e81262d1fb843b6b68a57a31234d8d04319dce8f44820cb98032f66487b12549f1401a0a23b2a5d741ad9e116c760ff0013a9f018e4ee5c96965b2edc8a49ba8b9f851dc330a12bfa04f84c1c73a05bcfc4012df\", \n\
+ adata: \"08c0a06dc3e44ecdee9d9d0ee2fa18ad7e55866a82a58546e0df02068468fa38f9e3f1adf4451730ac608d4192a726ba015ff44893c58d0b2deb94291bfa35d442ce75d5aa3469bb36726e40fa5aa54dd8bdecc61021f8765cc656f1a7266c2b6786acc5774334fd9f18\", \n\
+ ct: \"9aa61796aa09836e3c946dbbc8e3534795eb4909a63247a21ab774a7997bf51e0eed6443c6cfcbffbdc67c4b115dcf2da1c9ecdab00fbca6fd803c99c3329d38fa1a8bdc39727bc9c9197b275d97aa36d02782ca729526f5db3394d814b8c11a789d37fc4d708c4e9369086040592f6ff929fff9e6a7458f6520c1161e8420210f2b61b5fec6fb9e0d0c1aac1f00a86fc43716caf1c646a3a6058736afbaf80dda997a5aa0f5\", \n\
+ tag: \"1c532df0b39f9fd65120c21f476d7bff\"\n\
+},\n\
+{ key: \"d0378e37f9296de0ae2482afce8a0ba741aee557a6d24496676e86bfb66da524\", \n\
+ iv: \"56fc07fff14ce81bbddead45\", \n\
+ pt: \"0a104b0826064b267d66ab058ef56193a09dd695d073614ba86c0e0855e3def78fdde0a57c9293cda623589a7b5caa2867412f4f6dd90cda36ee5296a1a241eace6f6a976f6ffd1aeae2f165d49db75df82579c5193e6fc63fff688166df01f5d8c1e0188ca5520d860a8971520f4d51f66a6b81ec29\", \n\
+ adata: \"7f6669a934b780f1d44eaef43be69560b6a64d797d086890d7e6c07d12c297ad62\", \n\
+ ct: \"abfcefae289343aad4568f285de05eff7573719f60cb95f673372b0ab7dd62a57a9ccb4fd72d5e0a370e89d758910cce87218c530f71c6937aa030f047712646332d230a8a2e313863fe63efd3bb8bc7d2ab84d27e1028c9b8449d9df3b6fdae6314d838bff9f7b35d155a8dc4bc4cca4c252de08306\", \n\
+ tag: \"74e670af70e417d35d2e44c80cb7a7ad\"\n\
+},\n\
+{ key: \"a3d4314bbcb93cf06177bddcc217cb48fdad1ca298ccd8449cf68f6d39bf6213\", \n\
+ iv: \"cf64abd4e4dd8dad\", \n\
+ pt: \"cfd94e282eda6a5bef509c0e4a7f830fc4672bccb409067ffa1254eae78014efb8449a65546a99a6067240f1a5db7c50862e3ad6f202ac5ec8f13ce1680fe7d04748734e3b2b6c46c3115c44b8963be4baf11015c739f7fdf118aa15ce12dbfc91c7256c95469ee5dd142f3fef\", \n\
+ adata: \"5f28ebc711285035bfcc4baa8316a0a29a8b0a4ba2443646a65501e4a20a5b15f0ef98026943826ca2b701669fbe0ca47396eae13950a7383ba273d048d94e9be27032cc14b43e440e4b0ac1522e638d7f633a435c67ca276a46f2b61c9aa2ef0c560b589bbd2bf3ed8af84e3e3291cb785dbe10dcc5c3b4f26d3dfffaa8001d598fbb06fb149b68c2dc60e8d993f90cf6620d9d4ab110eff0ac7a16178d3c22848fa2ca07b4a47ea5398053c48fe34855d797e05582770b712f4ac40c40f01fd7\", \n\
+ ct: \"31389c717f96a7c2c186de9a231216fd6296564e48f7bfcfae5c71584e2cfb3d24fbe6cb0f4c3c9a54ff64021835e21164e6517007fe3eb7bfc796d711037f1d1f2dde78340671669c933dbec770171c247a46ba75f90f58d6851a1e2a7cfb4398a1e386518185cd16098a7897\", \n\
+ tag: \"331ebf2cc5cbf3fbba3bc793430e56bb\"\n\
+},\n\
+{ key: \"da4a2d2a40a8c7892e62b3d5d0de9321d2ffc6f1107cd2488b2d726f28f5d25e\", \n\
+ iv: \"9dcd5ab971a5be554e9bfafe\", \n\
+ pt: \"0453981ad98a16e5af76c41e63e742937607419fab23bd80af8f39ff2bab63ac3b785805e7aa452f11c38784c2f0136ebb9b398000e04e5b828cae358c14c0ed45e571e38920881d494b9ffb2fdfcae277df4edd\", \n\
+ adata: \"813ee4082a7e1828873b180becdbb0e1910d85b309308d2fc1977858674641799be61ae51d21d8178e1ea2651c2b29d0b3abbb0f0da1b8c83791ad47dec7c667721e3009dd8f85cf9964e1050ad777c75aa6cdbf69f4477904b865b6097c7de1adbd1dcdeea413ad23f4986f718aa83e720f421e5f8829caed29c9bfdd6bc273cc4d227a9b\", \n\
+ ct: \"8ac13a7265084c5e1e9a402542d6079d85de5aa3b8434412bb9bbfe766c513f9e96596dd711cfec85019958f08379c2b1150e56e4eca72bc0261d1f7d9bf80b85d846c0061bee0ef2b73ef91e0f3522506ae5f43\", \n\
+ tag: \"d5fa66e45204c36cf426b6caf9ee296b\"\n\
+},\n\
+{ key: \"df703698de58bf3067628406af510a1efe77b9d67c871232027e329c6d216c0b\", \n\
+ iv: \"591f25b15e261d9d\", \n\
+ pt: \"d37c630134f79e5644c9fc872ecb9f6a622b7d2b99e389e219311fef1cc92e9dd0edb65b82e4095df37e5387b507d33ac23a65a327276db3cb7c3ae82a72261a5da012c7be55fdbd42c3cef974846f0df5f74a541795be32ac1b8a90345b609cd2a0796787ec61507ecfdd71e7e6d26965d711ccc756888009262f0870ab98fc4d8cd056dd14078eea7d1b23e5585ce46baa2ebbf7c82bdb002d1025745a1e210289a13e33550ec06703c7a125469b99e7170e8ef5ee9b37980f\", \n\
+ adata: \"5d1d24b80c269acb313a39a21eb3f73ac557b8e51276288236aa36dd870f0f22110a371a783fbcd662fdc8345dcfdfb400d53ee97a1826a3b868932163bef4c8e999327573be22582791b2653c111b79b42d7fa5748e451026f9142ad2feb1cb181bdc1dc3ada517e5177218a1325878aaac1b86b1ae2d15e10e2446383bfadf0f16ed031b91e04a6a58dfaa3afe0a455c66988ebc5ffcdfc961c6504b1707259780a0a35fe8869631edcd378e56a271bdc2baa99c9798ae72740c\", \n\
+ ct: \"beab44ccd6b764ef72e9fd12ae74f5454c587a207a0a5d32c52888d7e6498268a16aa4474adbab3f70681f48c41b64f06ec9cb67f484e929bef3f9a18e783698b8ea300d7bb5c565e88d462d1b327cb3b0212dfe457007e3dce1142ffa5f15689094e0654a9bcb103c15b9677d63387464416a43166723e53e8d24afbb87edadad6af2a95b02b02ca052760e2a5785c2d6196338df1976bf80a188b4486e39cc3724abd88d086566815f09ed26e8cbca6add0b02e12c7a308974\", \n\
+ tag: \"8fc6220f4eb2e243d2f62753b3f5e43d\"\n\
+},\n\
+{ key: \"a9cfd297454eb6fce9ffb0512f04e65a352e94592fde4caa4f923a7f4729b030\", \n\
+ iv: \"32ff7ad8b08c429a4b89b7ad\", \n\
+ pt: \"bca4e25ae46b5ded4fe811ac80f315f7cd52c411a9bd7959e439f4c50cb59d45173eef91e3752c39beb8af58cd73a4d7347c4dbc6ca8763856aa004613f86fc16fc5abfed8dd5c3154e2a5ac6db31e5c7fd7a9f20f6849473a89f7ef8227e5c42e74218860abad5f3881a1147793f69dbbaf48455bba0a03e5a90d07ae992dd3b8f5cccfd91d8ba3f64b8822304485d34c02\", \n\
+ adata: \"ea097e89885446bb4154a6f521b295bb3a90d7b1d43ee4d989938545e42b5ca97fc5ae58d8b61e2412303ab5e8e523c88e7423fc3d44ad2a88c531ef116f412844d5b382cc3cc7170c8c087a2181d3e4445d81b336af8c559b16755b647305bb5d02a3cda929dde5e9deb98ffef242862d781254b5dcf015dd63d7266413eaa261cf73b0b637f2ff4b6da2ca22a4855068f0764b254a0ec809382608c30e4e767cbcc21aa8daaf8a2ff8ebeb865b7af20db57836a8cfbdf0\", \n\
+ ct: \"16b2cdfa63dbbb89b6c0817943663f90b9063bfd16ed6c051f74fb4937593a746c7542bbf4fc94688513fedfad4377772195a6f2ac8f142a9fe3a5ed72cfdd96f3c83d3764356abf3ff17bf70dfecaf56399a32386f2b40db1fb96a13c103c113995b0832ca69d2049940f7491263532ecf784c954fd1f533129b15138ebaf86c54f3d7bda454fb674246f6db50b15ebef8b\", \n\
+ tag: \"9e03cab3e6385f7d53957bc1e5e859e8\"\n\
+},\n\
+{ key: \"6c9930b2ff3e3dc16bd7df15339fbd46896d32689dea3b223f2a7bd7f76e907e\", \n\
+ iv: \"a41aba28b830b8b7b2277892\", \n\
+ pt: \"9f23820be013423d06dac086247cb8e76d43b933a16ecd432300a271\", \n\
+ adata: \"3f8d10a943af67e06b2971373f47244dbb41dc91cb0e436a11fc7dbf598dbbb65d8271f48dddde7a278d3263c4613575586436dbe625c01be41736b2447695cec6\", \n\
+ ct: \"145abfdc49e688531ddf41edd2e6df01ddba6572df6a0f8f98be909f\", \n\
+ tag: \"e30d2ea90ad06eb0441a1564984770c8\"\n\
+},\n\
+{ key: \"1012b1460aec351d8beb2550eccf604476b5ec06bb3782ba53133f87b12adf03\", \n\
+ iv: \"4bd4dd782c48492f\", \n\
+ pt: \"812856b5aace9b621add4035cd5ea2e9df7f836afbf481287bbab324c09d41e3de4d9c63086b67cac976368d5caddacf0bd0f527e3e9fc\", \n\
+ adata: \"8e426f5ca5da94849d53ce89fa36b532c8372d6097b483afb2f03571159a2543e96a732a5baaccd75ea9760aabd7a0be376dfcdd178a1ae04a5c515cafc717f211efa123ca1d7e66162f18f8084a4f6574ad82f4f8df87e9e31b33\", \n\
+ ct: \"0ddc1915968d3a4778b2fc12ec3431143eab1a10637e09c01e26aeed15483b45fad9ed340dd3606fd793e9fc62a2824f27e277c233764e\", \n\
+ tag: \"d1894cb81b6856404ac1432d729d9bd4\"\n\
+},\n\
+{ key: \"f40f3b75c19e45a08bb1277eb1f6e7d55912065019bad02e6ebafa5311d167ec\", \n\
+ iv: \"d77359368f0da726\", \n\
+ pt: \"948bc1ee3fa18c773cf5eea0cf4255c07642ddc3cfd4bef30400f09819f03dfa497e9fdc067965849503f23a1e17a891dcd7bfe21d4344\", \n\
+ adata: \"47ff151b2660838309feccd98d34af28708301b7f1482ff419e1b4c4582b697beb89736adcc4f6b5d80f126180c1d78b3a87d0a22bd132097ee61e9a4364d04dcc606e71c2cd3ee0ef3cd11a110d9b5c7f5ea67ea8a178fc77886838b400691b10c50e2a272c224179392c57d6c0219e96a0a2490eb1042d2cc0e4e3669417704468ab69705ecbf08b6eef14c81ac3b87ebcd5daad7212327f73017a45559ff28b16aebe736363617baf43\", \n\
+ ct: \"7e4bbab708f9842d472ce69e3903637886aa639d44a332e188b07878369d6c35d98ad8a09eedcd475da881b18a361087f807274347ef14\", \n\
+ tag: \"5de796ee09ec2100d4cb5c6135ba0faf\"\n\
+},\n\
+{ key: \"b191d04fcba5bc288fd15b19f6144965bbd565b778f2e9b93585646fc07d6e02\", \n\
+ iv: \"05c76f37263bfc7a\", \n\
+ pt: \"91c556d14544e52fe5b24c536b7429f76b2cf23c98a3ae81be2b98a84a9a85580a7bd94465c44e8ce6ae9a031832b0abf67886beb384bb7ec125a8150cb9276221f2\", \n\
+ adata: \"37e33b3fb792916214543748\", \n\
+ ct: \"15c879017e399bef6dd5e4cb0a78dab9b4211cfc8739065979479d589b2c0321a36ba1c3b6673007ce2e7381f3890be1bf3297af35fb8f2731267ac4e7fdfeaf3c82\", \n\
+ tag: \"9aba0815cfcebf9b2b712ee76db06712\"\n\
+},\n\
+{ key: \"b18ce4a376394cc72482b2a1211b9655e25e4b6b8a0eb0a50cec2b689b435c88\", \n\
+ iv: \"afe6af745bc83b18\", \n\
+ pt: \"ab9b503142c99f42a3f085b44e8dcb25fe4f006db70a3b6a73b369350262a61bc046eb5fc35744c1581a7ab00eccce8803ff676d4dc17fab5fee270f44f4a3288bbb52355d3a1e77aa7f9f2ac0b4bfb482b3dd9229b84970d13bfe5146b9fd36ec4edab758f49a1c7e26005f622a692883aac2ae95937611781ba2eac3eb66ae33af3d92d66fbbc09bbc83ab2279f73b61e67d97330be0aa0fb9752ab8dd71a94fa1e8cbae3d47900bc13d07\", \n\
+ adata: \"9b24d3c13c583716b64a1b392b4b0a992cd4f37d817e4e29c5ebad5027992cd829003977c9d12b082bc3e6b93e088e896dcbad3ea8982c9de0cfa8cc28d1fed2081d2924db8064eb0d5120e4907e6c959dfd0fe7bafdc17070dcb48f74466d8add6bb1772d70da9ad102fe33aa349578738fb7adf05dc53fefea4bb1581137504c02cadd7d6f47b4e1afc917f9bc031c994429493be0377bccbda3002f682d770799938e6c7d214ca8b5b4696e1275ea49e152b0abf86c02\", \n\
+ ct: \"537cd5900fdd1e604af0c857225360677c4dec9618c930cd0bef77fc2e54b1c79808e855afa64f1312ad1bf998a24a6048970a9396082e2717c7c182c868155c9843b269cf73ccf26f0dd2610950a3d5283e965e63651c4d604281496b65890749083eeac5ed9b5c9ef620168fb839b84aff0febe4ebcac69d2972c68c510e64a7699acbc1bf64ba685db55e60d0c0f630ec558ce74ddbf3b27c12dcacc82fa69a4b7884b572ff17fb044063\", \n\
+ tag: \"3177e04f58fae6a85ccfa62fad4e6ea0\"\n\
+},\n\
+{ key: \"5bf2e393435bbd9cced9cbc6308c143383b081cbff0955e991bc27c2c2d3508f\", \n\
+ iv: \"b338b45e462ee40c\", \n\
+ pt: \"711606d76b\", \n\
+ adata: \"9bd13c5cc991e9102245690eca10c078c8fb8bca59ea4d6973190ec8e1458d7754563bfe79c06955881c74828716\", \n\
+ ct: \"5040b2a4bb\", \n\
+ tag: \"92a04b137b0aaa09418b719798c02c7c\"\n\
+},\n\
+{ key: \"3b235bf4af8e86c5b22f76d6d5ef334387d8022ffc2b7a27071f41779ec9d314\", \n\
+ iv: \"247bc807247e750c\", \n\
+ pt: \"339f2393d681fbfa4ee584972e656bab9892376b\", \n\
+ adata: \"3233\", \n\
+ ct: \"c64fea072f83ef7feabe7e0b2327c142a00f7f9a\", \n\
+ tag: \"bf2f7c77b1f679375d8e4b97be0ab686\"\n\
+},\n\
+{ key: \"1f8b697d2d99765a3c6d90d935b1c4af4b7265315939c3643ba8c88963b11612\", \n\
+ iv: \"38a90d4ada0d16a8\", \n\
+ pt: \"622d48ac2472e25118bf93f07fa6e3d03127f0f54cf0deb9ab87e8787d753f\", \n\
+ adata: \"beff533e70e6822107a8791bbdf3360afaec55c24731666425d3b2d8c437c2948c9c3b07de4e4f7662362839f9a4ae2e6874b4f76d2132cf364af205b32a1194dc1360d1a4613cd9bc65982c114ff5efe89eaeae3d2bbe82c9988955373e1b07814c3618eeb4685ed849da8dbc903b3880db0026fc5ef5bbdee406e86d163827937ee79039fe93c65df80eeb7e996db1c0e2d8827b4901a6a1dde90f7430e03a89b3fc5f4388\", \n\
+ ct: \"90a761f06398a9278d899be7657922c8b4ca2f12a033b7d45ce3a3a96c0719\", \n\
+ tag: \"88ca70d9e86257241bffd0f6392defcd\"\n\
+},\n\
+{ key: \"74a096d89c80b8631001fe5361033fc06d73123b75d71eba7ad203f245a0bd9c\", \n\
+ iv: \"105f46e5e4d7f68c\", \n\
+ pt: \"\", \n\
+ adata: \"7d8d73f4305eb02c628a5a478654ffc7c723f51a4903c4c7cfaea54b5bf66b33673c6571a2ba426c777a211b631d151e2f5a693b49dc5cda1b08a9b26baa59c039f2590920256ba83b508fc603bd53b57560c52dc46c22522791901dc282630d728576e75052a084f9df4e87400b01\", \n\
+ ct: \" \", \n\
+ tag: \"695339e830888bf6aae579017a849166\"\n\
+},\n\
+{ key: \"9d27758d42eba8178f0da2d55e0b259d20b7c9bdb40f20a974d81b11b59beda6\", \n\
+ iv: \"adb3d1961510aa34\", \n\
+ pt: \"8fce89be0615efed1d5a4f09744168d33f343a4a3a73\", \n\
+ adata: \"1925ba361883573ea355aaab75881b5052a5de6846b7cbf2576964dc3d11af1727fc2bda7b85e0c532cac0ec75bdb12a5e99789f903e33e742cca77d2fee535b6acd5a18da88d4e2e37297bb1914eec8c14d6642888e7bee\", \n\
+ ct: \"37419df02746c4eb1216c5f115b71ce0a2e0ae6f207c\", \n\
+ tag: \"f8551546399572fbfa2e74a3f4e5e366\"\n\
+},\n\
+{ key: \"a5c642819c3bf147ac869b8bae1ba19665fbbaba6bb2a4fd51e12881d747b2bf\", \n\
+ iv: \"7ec5e770bc569b45\", \n\
+ pt: \"c0de7d0c11f6bf3e001657b754335e45758a29337021c73a3abe43b67d33b30103c92299ded304b1216e5479c14b63cda7018d93fae3b4a05c87bace1f0d0eaf97116307c0829163b038d9e784b863c97b25ba9285f64be118a111e095e322460c333a38d378b50e9d0bee0644c74ef4b91b0449ca31ff5ef0fe245578afe6f24e190dcd7d618c24cfa812238451c89d2465e6103ae940abc6131241e7c7e233aecdf3ef91bf8059e760ec33be69c100b1ee58975e7fffd85b235c14263b9e19b65046ef356f\", \n\
+ adata: \"6e0191421c0175406283bfd39985be0d10874c81d3ef10bcdcf22fbf0c1bf38aa1fdb8b8357184d72079db42411354b1009de74e463f1e94162564cd551a3fe0b70dde271db496b21eaadcae77fc00dc64ef94f6635517a7c07bcd0a33e52936e199eaeaea1a1ec5a20eb4f43a2636b46297b54fa1149679\", \n\
+ ct: \"9640823ee749985bf320d6c196ac2e475b425aa33f9a70667bc1065bc4c57b1071debf713ca7e0ae46e73e99fc6c58a635c637c4ee012c7f7414139995fb48f1a96ed34dd40874f61aa54547e0a121a1174b67f7a3bfa15c34f5a5b22fbf991a2625c08d0f9375dbd147f46930351e310cfbc6923075f06300203611d80f4d5beee9b418423c66f98fd64e76a7601cd833ba237de7f4e481070d26844238d1acbeab5255f051b1ff1ae53d2f103b30e7da7ec50dd5ba1264a51961e78aeee98862b8470d26a3\", \n\
+ tag: \"c4bb7078adcae63d5bed2d1787f84c81\"\n\
+},\n\
+{ key: \"ebdd0a036036565f36e4357e94c5a5b21070a59324aa5a8282314f1cecfda49b\", \n\
+ iv: \"5856a3ed31a922e0\", \n\
+ pt: \"b6897f753cc2ccbab0e32b9c9cba4234c9aa898a4c36c8e2fad26046bdce40f54b71d3e98d21609f77415f4a5497353cd7bc51\", \n\
+ adata: \"f6a78e3a54f7187fbd02b1085fc8479b99ddbcadf0b411cf978ca71998bf07d614476cf24480c34717a79fe5be189207cb\", \n\
+ ct: \"6824cc6aa768dcf2dde2ab5919bc432f26ec26818993e7f28c06e85f036301b71e730ab5417a0a468c1fe2dad47ea807ec886d\", \n\
+ tag: \"7ee18861138ec74fd7aa994c6062257d\"\n\
+},\n\
+{ key: \"98534ed7023d53d05b1f804dbd3659a166f6d72309eec9dcb738565cbf07b448\", \n\
+ iv: \"207e895444bed162\", \n\
+ pt: \"28a7af3cb52ba83a80a05bff84a185bd8c3f3f9b0944b5f571b7266d012293849a5ac2c54c189ad2400a52caa4fdfbb493a7cc8feb8907306809ac0d5a31ce479f5049025991f501ce77a59b82f422ac4db90d35058620db050a93dad8676c26d6dd4e7fc892c00f2b7ff386e28827e52b3d749790066a0851f192592df95765dfbf61793d404af080e2cacbf2f1bd15f8504a4a106a01adfbc72ff86744433ad64c314c38044a459d\", \n\
+ adata: \"8611ff6a9435b60eb4993cbf37ca0e826cf14bb44bae8b567385d3fa40f42b33a935322436bde91a75cacdec70c7f0ad6ec79303325a5e6ec46976aa95fb860b57c54f088294bb478a158958dabb7dcfa79520ab67f1a8c9888164730ff37235741ae31f633159bae6bf9deae5e5883158d874c2774e09d753149f2ff6c4dbac0207869429671bbb55129fca14056dbd7585e02eeaf0f8dfdb8b8a16daa3676be27c754c771adc94decea25326d38a9befe93848f680a3e512ddef627ffdadcac5a4\", \n\
+ ct: \"6c6619b91d6ee4392cb7dd9837aa6f08a972e3af6f21d3c817fec623cd23f4745c4e83f24c93318aaca60d1a55fe191975233436697a8bd0533057c87495f1f949179fa7032ec03028aff2e868d468054d8f8c743f9e07c9829471aadef0bd00845073307431bbe15bab1036c0886f5ce99d4f6aedd0a73cedfcbf8b2742e3ee7237342b8aae0c1c774f11fde99c7db4c4f47d9b33f3cd2a76fa2bec2d0e9cb31afcabf0ce96be239b\", \n\
+ tag: \"3323724f51909d9deb47a31667b0c4f4\"\n\
+},\n\
+{ key: \"33b0a349f1a67d85270eba46829eaf8b1fd55ebc9377be431d6dec1050860c1d\", \n\
+ iv: \"c2f9e26d6ce38e9ca7ee8b8c\", \n\
+ pt: \"e53d449a0bae3edc9635438c36b4fe835629d69f9483c04f2d83e27ef6de3b7d5e66cc9b3d28522f4396aab762b9640a005768ace700c15adc6b79dc43e272418c92719e16ec560d86707d52f7ab4aea2da2d342378c6f46440c9e2ff0911cde1903c49519ee80\", \n\
+ adata: \"9556b975c4cb20afa2159d01092cc8a6623cdaf2710db351680cf7e293eb5df18669feb2f732ecb1e03e11a856300f72ac9efc2332438a46e174af1b9a1d38362518afb85e6e92f9bf428a2b3d88cc16c9ba1322b063ee5e6d6ad007ad606ea3f73d28b3ef96cbdd14\", \n\
+ ct: \"cc85db43637d45b660ac2b308066731325a96b6dd10e43af921e75030c934ac527683de5a4de87f2bf7858d5a18d5d71fdaaccce00d280b30b7ca5a801b842382b30bee8fda23dcfd27a715c3bedd02a50ebc6dbcbb0cf709fbc2e90ae7b850d8d8f12e6b9f412\", \n\
+ tag: \"430c5913e6eab56e5663c08e45cc3a0a\"\n\
+},\n\
+{ key: \"53290f791166ad179e4d0dceeb36c96cfc41c9702c995f4c6e4cb4fffc3da890\", \n\
+ iv: \"58dc3392a691fb3da78ba2e0\", \n\
+ pt: \"a4461aac1562055d154ed38e81cdb13ff9704888bb61c82d93117d797832658cd6059e504d658b1ff1408d5046c268223e6f645efd0cdbb1abf86e8c30aa33c1938cd415112c431085174358ecfe0215d905bf57d240811997b9f70a2fef75f35c472abae30616dc3b3deebb90f4e2a8b60e58bbfc3be94bb06bed890ae5cf6f37388e3724c76aec3261a5508360b9284740107e\", \n\
+ adata: \"c8970634a8cfde52b48c215d9900b4b1a38a7d3f2c17c6701884a87781625cf08ec1beb8c072be2115ff50c94c7ccf2e6313ad4d53\", \n\
+ ct: \"3762d879daa0e41f8bbe38cb40a8a7fae73ed4a458d9c1b14fb8befea2942a313c37c46b4f65294b91e327f6434942b208d09eea0a94d1f8b5a13bca59d8beebf11313c12941d787c268be36eddb2303b92c949c3c5a1ab59c41a26d07129a691a288fd47d903455ca80c231617c11353ee3323aca71bcd415fc0becb95f597cbf88f37cdc1d3909fe6efaefa47a96afb3ebf528\", \n\
+ tag: \"9189de4b0f0253e253e46e93979ca5a5\"\n\
+},\n\
+{ key: \"cf7ea53c2fd87efdef05bd383c4d500b711cc827326da06a23e9c2b9064a483c\", \n\
+ iv: \"174a2c23bda975fd\", \n\
+ pt: \"c73e87b1fc150f77a41ddf85e485709e190e1abc693c9d4c934a3a55cfecebfb80a6e3b48e01282e458452e1a951b71ca06c2b0369591b976fe119ccac9fe83b9b67032ffa8ace4b45c479d60133f84917cc6414f2e1c0422a828659d865b0734ce66ff0eb492c9aa8613967224b819fc795c82b39fd92b6950af2a3193a8a7843d345956cbc751e6f310c7ad42d60bcb2dbb73a70283b5bedeaf14af50f20443608a840ee74fcaf0f44b60ec6aca0c51c7665bd5d1d225a47c7dedd138a1e3615a0\", \n\
+ adata: \"f2dbee122ba8407124279c59240e2e89ca23ddd2a911bc3e905a\", \n\
+ ct: \"38eb13707b8909b6fa6aa0aa5a7db0bd37c61db681415fc4b88457dc5efd3c03419aa745d26996cee1850116f9cd892b1b5f0bde3eaf4ce0039f47d073d4efe97b51ec724215bf514473c29c777eae212574fbfd68b70ef3560143b37573e7ab0b422a09b73e2c120c52c69b6049a44dc1078f929abb286544b1d841bc18d2349d1ab3e87930039d8a9ce49c6fced3f72057edfbe08b314dcdaed356f8c2791cc42e52f5f09c9665dbb1e8e93f0cb60ef078a083e289bcfd82534ef3d2b3061c53e8\", \n\
+ tag: \"2dc1a285bcd5df876f255a3797f51746\"\n\
+},\n\
+{ key: \"0f79fcd75886e5abb5760a4d9009131b69b7ecdf127b2f4ba2207fc0f3b7215b\", \n\
+ iv: \"a9fb654f4e81c62a\", \n\
+ pt: \"bbc049ac05e251f4197aa81d89f1a1552f421d5e50ae70e8147cceafb3c6122d\", \n\
+ adata: \"b30dcab74cc51cb463adcb7c8947684fe7406ecab2cb40edec5d009f\", \n\
+ ct: \"35010b0895753f0d2ef7d63d4bae7ef69533bb724a3216fa9a1337a10efaae6a\", \n\
+ tag: \"5c184fe84047c57d79c761d6dad043df\"\n\
+},\n\
+{ key: \"7e9f6cd9838d174b30c57c6ae681005e72e99cc9ed51d59736653f1ddadbaffb\", \n\
+ iv: \"98c1c42bc2153689\", \n\
+ pt: \"e82c688a99abb620549b9d66752bb7b817e335b199d70f21cc690241d3d1b8e1c338810cad1f4bb98c1fc9708c776c17c1a952f1797138a2b41b92b97a0d727e6b39fcdafd06155e1cd71cccca2ed5338c48402a1fea5ae669828127\", \n\
+ adata: \"99db13e4c183cacf8792027942df6b6dc2ffb5152e50e0cddad28ab4fc6982594150ccda41cf7607688862f07bf0f04e1792f984f3fad23bef2e3259259f4ce394814f70157ff88e16d4ca4dd46ff7aa5252b1166be95254be4b6cb8854f91fb7b83524be0316de666cb844a29384fb48dfcfc3d86cbc114a1fe4ba45b100977f7ac73c102e4b5d4f275672eb2a71b759535eceb701d39111ea142e8fb\", \n\
+ ct: \"164875bf117081f2ec13455971ea3d35a51b720e0a3c2844e0a21fbe4a319aa9516ab9f018ea750da4251de1234b13b49f53264488d4871c6abaa8889795e71f6f1d3630914440207c313c2d273a2d870d6342bf00a3349c87764786\", \n\
+ tag: \"03573bc8b55a0d59633d6888939efb44\"\n\
+},\n\
+{ key: \"7e077bc5b6374b3c2103e3166a7d8930e807ec2da02646b19af7770f23e1c115\", \n\
+ iv: \"0349c51f6855664b\", \n\
+ pt: \"d6a4203f8aab17823dc00c2fcbd9b85a49757e67889225cc3da601ad5fd1d67fdf90fda8bea567e281c2fd903dd400eba9db729fb4477eb64651e26532bf8b015adc5ee260bedbcb43703481908ad7e641d13d3a351683ff578a843474fb4895d32a92826e78\", \n\
+ adata: \"075e265168fb95f4e08a6654418d2f394c38be2759accd703c7608f27f817f47f0a3a6f3209aa9eb8986dd017b1e1b20c12796254bf11797fcbb4800a794457108ba69ff25f4b88257d0316c9d51aa65493b0260ae41baedc679a84d99f3e05f175f2eeb6b9400e29132021915d72e499056612e98c523faa1dad528d6f982ae824fce338e16f6d159840ef04d1b55e744e4146582eb6a52e7bcbe3d97eba105a64b985531c05f98bef37a2488cc026312b5309739f83b12707188df279afe\", \n\
+ ct: \"4bb1d3e4e631723669447f7795bded7c209412aba2e0a06ee4b330f348150265b5b4e0a6e4a670a6c5ed8bccbe1a401f78663f90c2dec41a05a488f86bbec67f02c3bec7cfb41844cc365e69119fea949cf924121ca7e77d5e34de93a5bd52cc97e5e4fc502a\", \n\
+ tag: \"b60ed2af33a72c4f6d87acf8c62a4bf9\"\n\
+},\n\
+{ key: \"450ead10a02788dbd831169c3894e053484dd6de47a0761c6f762628c48c4754\", \n\
+ iv: \"c5a5b853ab1473f2\", \n\
+ pt: \"63e3d24c49442d21122444b85f6d546bb8dda80ab88496a19070e9ee340d0adc2f7464351917aa5e1461bfa3ab34e42eab46ac60b737582f5d20974efdf4da9b962bf0050eed48553f8d22ceb4658788d26c5a348826ecba18ffd0f443ecfe0f583709f922\", \n\
+ adata: \"002579a7ad3db5af2ec3f291d7ff7afafad672d15487fe18718d962c77c170ea989c87434f99691f0b957378224510f39ff376516b5650ceb6207d7cfae9298376c784f8c9f393d2f1dee8f421fad1a5042a8a6b900a099de303c6e45095de5c081745be97770a61bff4f825f2d05a8439b86e86f8ae9897ee4e2b24bcfb2b715f6df7d573e0fe7abe5e2b54d143d8ebe4f67fdf53473023511c91\", \n\
+ ct: \"8c89e7db62db3462825013d22d4c54262f6c251a9f345bd93bb29649a83bcf1b3b5588f4b6df220c93d9f0b511ac4de810cef31a354c86b93d83c5adf32fe07d975c518cd862deec650902d2eb61348d117fcb0ff1cd4bc76e75b2c40075516b3ca1fb34d7\", \n\
+ tag: \"b152dc0650dca2cf3e7e21fe37b580da\"\n\
+},\n\
+{ key: \"c115c7a9746bb49d29b0d009cc61480a181b33bb309e9cac8302596d358797c5\", \n\
+ iv: \"66c0990d5dec4a70\", \n\
+ pt: \"cddd29a4eafe312f62556db1e24456f3fc45d17f719eb413fff58885d4886ba229674966287227a6a0775115b016ffbd6bfbce83f61944729e20a01f9da70145af4b2bc61d772c61a0365a\", \n\
+ adata: \"8484d6c586fb832983448e1874aeaaf9c3c542dd74c6787d3d843bbcee17ebccd88108e7208273b24eee2fbea4cabd9cf43946dd38c96849ed53ee5bc53e585203b6a167148a5426760edc87a20aa6b46954b5883c623381b6a30173127c7bd2a4569c2c43e04c48a9c11d616c48f3f63781e0a80e4fde6e33\", \n\
+ ct: \"e0c571e4c1952255d3a388b9843f1b8043e1799cc18d9ef8b1de672aec5ad7d4e42ffc9ed828de174fad365554d9758ccdf78d5609175b70d7f2727fcc1de47259326c8b62e631ea79107a\", \n\
+ tag: \"7a413a953554639057d2e7a0cfec8392\"\n\
+},\n\
+{ key: \"84b15b1363ce469500383e742341273da5fd9041b7a85a4d1ee35a9841e3e76a\", \n\
+ iv: \"b86b7e4ee9c7dda2d372e8de\", \n\
+ pt: \"70b90b2867d92446e29e7c2db66bcfe381d6dd7fe16b365df976d4f79a55361920856cfac0f60d8d7eb67b610d428a96afc58889d20e7d0b742fa6d8edabbfc9959da00dba8740790972125c824d4e1e91e9bb83d26f2344c9d833f2cd9286a7a8dbb7f89996ed9134c887c7268561d3b3819564305e10d35bd9327262321680c9559d3ec620e866110b148b4bc70bc46a7e455b78b0ba80bfac15b053\", \n\
+ adata: \"dbeba48c33289c3f570f84f40972c89567856c5dc0bbd054819d2f23fded354efed58d175b43563256c1ee64f550d75c\", \n\
+ ct: \"200a9fa635c77e95b6918976007862e8f3ccfb4bd0abf44b13d397ba547460b81dd0a9b3b5124db834eebb923dc41eb38070cd7a1a3dce7ea11a80179ef3771cce290a3851c88ceb461f1f829daa4b319009682021a5daef7ef6f18bdd2ff2b8c2ff78dd7a0bfa70a6c153decfa3c43169a1566a84e0bcfd679347e50a1cb6335824f5e371770691c61a4ba0f362bc351a506b8eb2197c5b58c052b2b7\", \n\
+ tag: \"fe97f2eb65c389acd98ed0c56d3aad7b\"\n\
+},\n\
+{ key: \"9f13f51419133448ec2240162abe4411c399b8dc275f63d343487588a536a33d\", \n\
+ iv: \"9a2fecb367c4e2dc\", \n\
+ pt: \"185dc702e80bd78b72ef2fb868399264f0787c762b1f21213d9676fa64052a0d2b902785fa04af55ad2aaecf0581fd9063e1ab71ca056542394bb28a5715a55cc7bca3746fcf372f718de2a70f2f8dcd370b434d6c0033584058a7d411513272220cfa86845035ca58adbca2a37356787dca08faa86fc967f18843ba4bf82932adb63ad9b762dbd205fa3b04aaaff2cb77b62fb95acce8b9c2991be6d5eed011a6b3ba627570f161d4d9c0e9b6d84a41698892ab\", \n\
+ adata: \"0cadbe23a86a262e3c5661a901f06d92c094371ca2b3c40e5775d45e17ad762d8614b369a49912bcd315057975d2e9534fc0a01b4bb350a6507d77593f3f2e22460ab259cb275e4a159a99c65310016fa0108a5f341e14b7adeba13d80770e0f512138262a9172f50a30fa734874f4acfb4049135b8c934df171fd6975ce3093c6bdf36c87fa3e5d3a5a983fb57a836bcf193e872c8347df148c4e8205ce1ae577816ead3802ddfec4485d248b026d28328bdc59a9c00d\", \n\
+ ct: \"430ffe1eb83485e5b81830c5f7e3bea0b0a408218997d5ca14d977b09e6bcbe8622fed9d001cee204c8c0f7d92e66b7ada70cabf938d7489876711f8f25f0707552ba8653a69ff642de1748fa1112c6ca3c25b4a126df5e229e56e4e9e886c6a5de08ee6b62c8c7448bd09ad728db164e24d7eaa834545c098aa831d73a7867dba5289bbee40f0b46244182cb14222519393339ab874de1f6e7d534b10274ddb55e59f75776ecc19e08bc29c5300382a6a70283a\", \n\
+ tag: \"5f9e70f956d6859718fbb6c2f4b38d3b\"\n\
+},\n\
+{ key: \"33b5e6d0310024ca664b3ee41cb9d2a9e1289470ecd51413cab76d3ef4c37e5d\", \n\
+ iv: \"6fc2a857d6e5fa1b\", \n\
+ pt: \"1c70b2265fce94f8ef01c7c076c53e9b7718a7f27ad20165\", \n\
+ adata: \"082f45bad9bf40bd97e4baa2f25081ff6a61ddd3125ecae2efa47bae69584004117df1067d178de0890c923c9ce21ad5ff605781886507537608c4fe1f6cc5663e2f0bc91eac336728647658962780ccc58f215a615a938b2499c5bcc2417d2977c49262ca2e8276c074386bdd6e990d\", \n\
+ ct: \"6273e9d64012f4cbc18f86249774983216d9b84d881cf9ff\", \n\
+ tag: \"4e1f99dbf8c04ec55fac22bf683b1467\"\n\
+},\n\
+{ key: \"c4941402c651bf67329f1d52dd4992d0218ea25203741984184d26b940bfe11e\", \n\
+ iv: \"5fab6d4d901321ee\", \n\
+ pt: \"0349386ea4904f3341b18a6e49f7671ca5b40e3b2fb7e565f8159dfc52bb9218e9d781177e3ffaf2c4f18048e548f15d030341634bad9dbcfd46a8c5a5bd62debec0a2240db61919b39ff94f1da4cc617e8062a15197f3c255433ad7\", \n\
+ adata: \"566e5b1a85b41561461988cb309e7d1478be32c204d745e306dbf20672735e9bd7c2890551817533ee5e91b8a385f526b6390b5a271164e5081b\", \n\
+ ct: \"a8064046ffb5cfdbb6700e1b1034d25908d3df60de1ca09fdeda6b7ab8c95727baf86d91dcec6e467961f540470a0683e62957cb76731ed9f7c6e6be433e1c4a472d6ad23fcb23f5c6c2109b40bc2edf24d945c9eb98296a7292a479\", \n\
+ tag: \"25718a9043d6f4c272d74b36785b9d60\"\n\
+},\n\
+{ key: \"e31c740dc33ed6946b77afec7fba8e9a0975d62db5887d357ee8159509749c4f\", \n\
+ iv: \"6edb5e7f19ce34e0ece02e0c\", \n\
+ pt: \"0a4069486e1c1963ca4fb74c65e661cd401833fe03580f5b6cde78809cb7d34cc9d9fa60f276d5c64c4df580a855593059883c03d68cbe72142e79fe505633\", \n\
+ adata: \"f881e3224d900de6b279a600148b6ff4036c3abc5e5a24d289473396012d314939a0db1b27aa5ba478269711c4ba\", \n\
+ ct: \"8321cf2d34eda68c2372d42dcf17e7dd686aaaf594be96f5afa42d12ead2e1dbf6443e8170bf369c63c7cb0dd921c5a2a5700043c460343a19ba7f6677084f\", \n\
+ tag: \"52f460a0572ef8a75423998e1a9a748d\"\n\
+},\n\
+{ key: \"51d83d1107b4673e1b3e02482167af05e49fc33852d3a61e4095022b01f29103\", \n\
+ iv: \"365154c31b4d151ff1d14d7f\", \n\
+ pt: \"9b85826b57f50ee60b7791b296b24cf1edbc82e2b2c75f23cd37d118cf697fa1316e7b32aa0915a79223836eba7e3fea197280a9f8ac3c963be9892970420b2ad5e8d232a527aa3438868e2125ebb300e6b37c18be611f43a386cd11c9343820daf17e4ba4c925d1170ef51e59b8ff858d46b1881c6fc524fdf49d55250608fbd81f5642dd324aaa466e3dccb327b89429f77f52c4f67b8f08d742515c\", \n\
+ adata: \"95ac9ab963d112be6f22daad0168e4886a5b846d3defc71c7d9ad9814e37e21f7a1db8488ca9f390faac1fe9e66f2a113e1339d04fefca90eeca4ddec72d50cc82fa4072a147093407c69e939cce3d8d3f54932c28961db59926ea521be2e4c87bb379034a8590f3aaaaafaa92ea10\", \n\
+ ct: \"bffde74917027ce2e7514d6950a39b17e0abbee05c94175678bb0bfbbdfd12b2ff50688788f36fe3a1bee1b0b93d5693ab225fa0825f95c66b6ce7057ec1c4a8f79d9a2ad532e92a0cd9e22997df434ff02757a1f385dac9dc3e2ef431605c48bc62574f2184fa29d504a4b7b276e9760a3c55f7f38a59a07085d5fb70d7ebc733629f9e79483dc04f89a5cae1e5fdf76934091975ef1c6f98cb65f66c\", \n\
+ tag: \"de25f4bde517689816b3f307875169cb\"\n\
+},\n\
+{ key: \"c456b591eb97ed50b75c0bf9a79d1c4880d084380b47161b447d32f91a19aea4\", \n\
+ iv: \"8cb6da96ce218b98\", \n\
+ pt: \"2e79f864c249ca476837c405ca1eeba0e56d422454bc43bbba622238400328c5bed7b924f48ea36932fbe8131c630dbc1cf719df47f57adbc12de3263303badb82f7a0a325c4256c502c\", \n\
+ adata: \"b8c9462c6fb25034deecc90bd54aab595af5b766733b8a8b23463f88c00e0e8a5939bb03b570b3656f0ff4c1df30477531fc1dcb62021fb10cb48b6e0a8e37f75411e6ae9968cfcdc07bf9c81afde001260f23\", \n\
+ ct: \"29f477cf39258c49e1dc6593d963b2f771c8a411d5f330464a54fff6794e209fe0c5577ed1d9cb5aeb99a01e3c8175119903816ec9c88e0509637c728fd2358ccb7a41150601e0ad9756\", \n\
+ tag: \"de2a199d0e350599e19e8d1ba969f9ce\"\n\
+},\n\
+{ key: \"30870d0eb3af12ec579094fec596812d082d8eb275d20d6c34677fee3e5e4778\", \n\
+ iv: \"3e714ec082ad8f95\", \n\
+ pt: \"f0\", \n\
+ adata: \"a5a03bb4fb7a6bc6c84b7126c66fb1a31cf2ba4baba25c259ffea1\", \n\
+ ct: \"39\", \n\
+ tag: \"7cb28c45d5217738cb9dd1d6dae6b8c5\"\n\
+},\n\
+{ key: \"dda1e9595dc3547c5f04b769eb3630e4baa496540490a2c21c1c0b3fc1f39afe\", \n\
+ iv: \"188fc50e6f63e2c7\", \n\
+ pt: \"6b28315df3c7b84389a8a1a13e3db8cba8b3f814f2a12bb6f6db88a68c4fbaa1193422443c6e478a950b544f220859144dbb5ab318b675c9204cafec7350eb4092058ae81bd59bbeb933f9d641d670d0266d3fd4e3d6a02bbc6d3fb4\", \n\
+ adata: \"83f813e240e0f60e5091d76bb7d692aafdda0f94556764056e9ad2bf36a6baef6a52c4483a26d0e469223b3af5bce00b33\", \n\
+ ct: \"507c9afa25f0c463d7cc21da480766a0814d6a1c559a1e85441e2d7c1b5d0d71d35cc26a07f4a05a14bc9aeef3ddfc0c251e43d7ba02b15fddc8c2233f0004423f8735facfaacc3b4a89fa333662e9ab0b116c934de83f80caf25e18\", \n\
+ tag: \"dd54857bcbad42bc7fab2dcd149cb22d\"\n\
+},\n\
+{ key: \"54b3b37a79e8b0f96702bbaedea1a58f8f9c97ad1ba3f0e1750ce16ef9c66ec4\", \n\
+ iv: \"3ece6fb93f6dbb73\", \n\
+ pt: \"4663b289b1bb718e03195c971d01164054c94db657707d8fb125877ab3dac9083a896d39320305ad908c583fb42f4769705630b14029f4\", \n\
+ adata: \"8911a5071d24964de3124fc4b8ff16edb5d71e7fde7de985d6a2374edc214e7b567df8d56f376622dc95bbc1ba5e9c62019c11cc7fe48081851cdd00ea2671efe3f5e80634a96a4c5db7fa8b374ef206ab4e2d030a4e90549a24a8c84ad838049de50cddf7641918e1a8a9d8b8779db5\", \n\
+ ct: \"f1b43ec8545faa6ae3fa5fcf6f37743964a3997376e5dd7871cc867d03c52b4b8c8f5e32735a1856a1d54306e1dfec79143e9439ceeb46\", \n\
+ tag: \"29564126cbb2824c8f0cb424bb0db366\"\n\
+},\n\
+{ key: \"2cae5e1d74d2cfc9981ee53cba1fa14b94cd5e1105c4f93b8492df4fa8ff7a38\", \n\
+ iv: \"783bc0d7c02601e34d6ff576\", \n\
+ pt: \"c90f633e6d5db03698e52a492e6e936685e8138fa00de94a7f8150975cbfc6576fad50f4dc48d12a78057597476d1934446181c5e92dca525506aecb37dd0c329eda103a7129edf7e781e371166cae20a820c6f1272ba851b0f6cc0e24730b2252242e01823eaf4aaa8d952556c086cb32f333d04fe0575e25b903441b5d19f4b2d5e9086ff47bb5bde978126fc31a4b6f00809dfa86eb5e40f8cf785133ea103d02db8732437981\", \n\
+ adata: \"6ed02e24517343aa1e05bf0b9de937d0fe5d167bb0aaf3db86809ac12a62026330f522c04b7dd951a02a4f6471ea6407b4b5c07378386852a03fac4aa94882231d9e62c6c03894490b48dfb606a74e1967fceddd471995029f845b37917b97b980a3228abd9ed261809ce48e939d928c2c2cebabb24bf11b2f722440d56ce3ea2ad011944b6db7902da5328f28d278e6822a36018e4d00c9\", \n\
+ ct: \"5cee5b11d331a6a74976f9d6859c4d3b6d8f7bfba9bbac97ebc7ca45b39668e40fe2d43708b09149d8c5d529a0f5e0eb61d9d7643be90411146ace7775cb5d58ea29c80724a3267ea5b92df9e4d09d88dfcf12cb50224e2c2344e77436d8833707c7c56c61ed6e562495553e8b3b4d40652d2eba233984d2d734e4f519bd3d6af3f8cce29855808b6a7814ba610c407b9311b10e21108020dda95ff0e403814f10ae8e401900a38e\", \n\
+ tag: \"efe37a441042e078b5a072500551be6d\"\n\
+},\n\
+{ key: \"b40e4fbd743c14539eb677e8332bbb535cc2fd1ce9aeed1e8e5fb7043211bfb7\", \n\
+ iv: \"efe2a8411af15870db5f0639\", \n\
+ pt: \"84ad29016a225fc14a9d21d971f8f30947dc9305e202d55eecddb4c315b1a24d1033ad5f73e639b6fc73e39d8aafc81c80d0b946ce47e40edb64966a21c4e0a399b61a\", \n\
+ adata: \"2883f4615e622552d1f6c84fea9c4b48f7648a57dc265c2cf3aef6b897e904cb0723388e77f29d9a16e11e80f71adc041f8e0b17f2f42801f7cbd9feb9b36383cd\", \n\
+ ct: \"fe74949c7269dce53df27416686823b5daf6cd75359f0857bc30e150afbd4641275c2a56609c63d5a1b6d9543a7e5c23635157e2048574742176d858b31e4b45467b27\", \n\
+ tag: \"5cf58323b7017bcc5ee4343ceea082be\"\n\
+},\n\
+{ key: \"1e7b4124a8c1dc37338da24a3fd68a5f5dcf6fc7839358381c02c45b52d5c356\", \n\
+ iv: \"64afe53daa3904ae\", \n\
+ pt: \"413a79276fe0348e934f\", \n\
+ adata: \"b19e964edfb6ad5c941c392deb3858b5559405da7db97bfb9468c790b84e3d3ef196c7910b609e8ef1df50e6bede4eedf3b9ad3b5c2b3482af37a10251d9e522da67be8bde9bd5bb28294507029ef284683615ed3af8f4d40d09013363ccb63ba5bd07e0871f39333bd05adaa79d898cd64f80285bdf809fb0da50f29f549bfe2e12e992\", \n\
+ ct: \"0e33e35312a5463728af\", \n\
+ tag: \"2e83bc8e1389351ab7984fbaea61cd05\"\n\
+},\n\
+{ key: \"35f8b8cdddb257d6c4d344906836b2b5c274b366eb0415f4cfd3ffaf52d73b69\", \n\
+ iv: \"a60cbb47045945f8\", \n\
+ pt: \"c1fa4865794fc4f3b26899356795ea37375eab533d6ca6f0f656b4e8d4d458204630d1137ed0656ac7e062ffe38e326aaddd3d4ed7fa95f9\", \n\
+ adata: \"b44b95e4cffcfcfd\", \n\
+ ct: \"1d13562af74fb4e0bd2e8b19faf19057f2a80906700f411a3ad09ceba2f65d9e727cc24ec9e88d5d5edc3d8de5b3c364fd7c562b1f7f8365\", \n\
+ tag: \"ce1246484b565e0100cb8cf3eb12747f\"\n\
+},\n\
+{ key: \"1913455ea9d0f49f1a97e09f9f69b7ef7090b1988de8475445867f30c27fc30c\", \n\
+ iv: \"26ec36d4d60660369aa99f91\", \n\
+ pt: \"90f933f83d841512e03f3658503c22d67186fd856c060856b40283474cca8986e96fb20522a4af709fc6b203e03413760fa19594a9ba12bb3bb2e63be95123de37bbdd25\", \n\
+ adata: \"9ea91e6cb88017d6c47889636a978ddff0b6da1795b7d6e05ed93cbc36566953309b75db8b04635361d47ac4841068b4a8e3915aaab8070ece9cfc15b4d66f4a9bcac7ab24e49caf6d7d692298aec8a807cc2dc5f0b4814644cbd4d80d4689280751c19c711068f5723a74a43d6e1ac0d195a4f4ccc39266e09b4e082ad36d2e668aa68bceed4a4994b674ff36d684c8952299d521ee7bdb910581f7d9f8b411e90ea9\", \n\
+ ct: \"3315c839e7e79905a894ff0df7378427c13c5eae7b05fb4965b9a92a8a9db21737c7c762ca5a884e4334cf0fafd5bdfbf052847e46e359a765bbd14451d1b4f7b96b5803\", \n\
+ tag: \"f623c16038799479299de64a76bfefe6\"\n\
+},\n\
+{ key: \"d00535594cc2fd3fa2f88acde6cf17202db0468517046201d61a23bd07c184d7\", \n\
+ iv: \"bc67367f4643731deb8fe185\", \n\
+ pt: \"3572ef111c660b9ea4adeeba5e6ca12cfcfb9c4d549940d72e6b91ac45e3f618a9dd1d6974abdb0b7c8c91d5afc667c0023d3be745\", \n\
+ adata: \"46f82f3f216758eb240d7d28ae452cc2467a5d61f5a129fc0b383b862d18927a16302c6e59f83f783fd59dd98a7a89d6c8a2ef066491446c0d7ea1d172423c41a39349419d9ab2d078befb4afc710a81054e89ea7c5cf3c2da3d023ed091d0e3adf54f6b0cac0be0f01e017baa8bd2b5acce251a4a0a0130fad39bf2b430b66c402cbb25c9b048e5f893f98130dce5f6c468\", \n\
+ ct: \"4f131429a9d193c5de289362b818e5db17d4b6b45bda7ba7a4dbfef64f63b8a657f960b9467827b5fd74eccb759fe37ffaed599546\", \n\
+ tag: \"2a0c3fbefbaa7e014c10f3a481723a0a\"\n\
+},\n\
+{ key: \"ee42d4208fc4f22458bfbb7b20030f125b161c6b5c872b170258673d4dff3ef6\", \n\
+ iv: \"eecd7da6c28b8653\", \n\
+ pt: \"4d21006774624d19886923bdedeb9c2f541af88057a71a94d82d67b464cfc3fe55d7620579085c9d19e5461ea66489d9247e77026c0084932bc00378e8d3efd99817b3d378ce158d2f27f432d86c9b8b3f175821ec8d27219bfb5985c8799d2ca378e892\", \n\
+ adata: \"7033621dda59da87ef81876f31c561d00941e05809d883df8242c36df51eb465d78846e06a7bd2a313d0f7e15ce6900074e644afff1de487ec9eeca73a44afcd457aea8bb361c0b3bc623bdd84443af74e4c1afed98432\", \n\
+ ct: \"590f71ea66dcb0fdb77579c0a404dbeb9dfbe1686ff90e614ce7d1ec9fe7e0b561a0bca288ac3978860f0a17972ff18523c518be6eabb2c5859fdeebd3033d76332f687cfb7462f2cb0afe8250c7a7054f4d70744d0285afed5f1ee9b2be5cad172bc7f3\", \n\
+ tag: \"83592a34ec230cb036887a8869ab8583\"\n\
+},\n\
+{ key: \"13ee95e2c6f040cc18414f69a42da9729cb65a77f9c1f581f821316adbc72237\", \n\
+ iv: \"3039f972ffce3c8e3a06a4cc\", \n\
+ pt: \"d3b75e1bf691955a5315a9c969ebedeca5aff4bdc195b0815fcf1cdb71ae436ef4d419867fde94d5cf24992a0846bcba10151ed56fa656d21e370a4b4424154f485aa3dafff9e030caae52b92b065cdedd50c5ddf5cdc6416845ad3be449638beb989877bcad71fe537b8fbb4d38c989353137b24ef37087\", \n\
+ adata: \"b18386e97c75b6dfc1207a1d2ca8a8e41045af6657554afa96d1fc28fe7f19c567d18c3fe6047eceae2c3937058522c117e0681262f4aee9aeb0c082348f4dfaf1cfdc5340d531bd2caba63f93f404e1dad157f0323819d279a8dc8093bc\", \n\
+ ct: \"c306f32c4e1bebdf2febf5ffe6b886888d50b11daa95b60dd85755f982edd8f07516865ab8b87e311d3e44efae0298f317bdf98846add6af53df4db5afbb3e521060e41e6bb384422f79425fba290485f6cd57029ab80c882218caf5c5045ca24711d1278a756dab236562dc46bb2601c39cc67f9ce6208b\", \n\
+ tag: \"45b910fdb8fae257d72420557299a677\"\n\
+},\n\
+{ key: \"0b78086f012d877ad11c220ed7f296542cf83bb3c42a4ba844fab9940fdc22ab\", \n\
+ iv: \"bb1b9a9886a42a17\", \n\
+ pt: \"c42eb4ca617a044c403e0f7348ede6b2f7cb56c7535924edf418476b32b8f63cb45822eed02d3bbeb5c8a4355254b963ae\", \n\
+ adata: \"f6a949393ba3aaad5edf2b7197da166f08098350a58efbdca646abcd2510e593b7155f65e98e406a9cc0f700eaac4d23594f61548fcddb4ed319563740d302746874eef87ad7ae0f3721d4781e9ee6b2987f9fdcddcd32bc0cd4907b90d8a42783afdb4759ed8df224e4dbf3e151cb60fbb5b11ea55644be3f28281c43aca044f61f6934f781e9736c65da37b74df2d4eedcbbfd897ba23f32a90c0153463e3cb098ec6fb721bd98b0c961212b39fd7bb904f6d22a342f054015\", \n\
+ ct: \"70171e86ae37e8fbeaab3faddd2f5e00377660bb2b7d83572d187459c2c94f09c0e66678bc87c792f82f5458db4a45c9f8\", \n\
+ tag: \"527cd4dc7f6a4c8e1f3b116ab5840270\"\n\
+},\n\
+{ key: \"39ba125f3a4e4c094bfdc61947c1c9cd28d0420153f9348e1acafc253188d8fe\", \n\
+ iv: \"ae78cc54a1f6b082\", \n\
+ pt: \"e179145703d4344b27769e867dd2e01a82193fc6d9dcae18cf741c056b86325062b962ac619ebefc377bef1f51d031c841b27571b1db52b118ac2b826701d42318592e385b59\", \n\
+ adata: \"a614be3071d229d235a92e412dd6270d36d83baf1e38549e54d44f94165fba19b428b9870e2a1d7a1dcc96735c93bfb424fb4a290f98be9fe0d2cd3a03c8692025827f56aff13501e145857fa7f98f3334ac8b0f755fbb6461aa2ba35625325ee81e4fab665158abd32c1cdbd6bc8503e0f59b77c213674d8db599e7\", \n\
+ ct: \"4c88cf1033ecd86cb5558d07e2c283c77e125d159ad201dd74bef33fbdd1a3de7ece3e9ce245f24b2e477cd839bffcc8b3ec943bd043f01400f47614f456a6f40577f2ba7bf9\", \n\
+ tag: \"dc96584539307d3623f2d70ab0d038fb\"\n\
+},\n\
+{ key: \"443c502be228ef2b1654665883826223b09629845455bfc21e7299593651839c\", \n\
+ iv: \"2a3669339ef0f55c\", \n\
+ pt: \"3e3d00f9de7526a835f4ab6c4d282f8e172e7e839e7f8a02fc415731311bacf734155bfcf38152246f2eccd2f7377d89cd63a400701e\", \n\
+ adata: \"749e8c1be6a5a4b8b2e55ef32cbebe488693e9684fd0bcd8b012f1c8e74dca32257624a0a1da73ea678a742a4e7172be9b84f127ad1d05a9f44ed93fa0d70e41ad060615b53698ae12dbd163ace8435ad0e9f7aa4f6fad9b4011871096899c23ebe04a3548836f62c4a31e91a2d01944a313662e01cad19da7e7f1dbc86ab60a96446c201e9b35ddfe19c3b411865c67c7905cebb217f45bf6e2592b691691fbeb2e34fea63e16f61cd9dc0065f0e04018ed74271d04a3\", \n\
+ ct: \"15068a10eea51613c1ca9aafe0a5b139dbc30373cef88646e060677e3b8141187595ddf9d8022f7b176d8a4f334a7b0e7892742b9d2b\", \n\
+ tag: \"92f36c55761cab8ecd5a9626f2cce025\"\n\
+},\n\
+{ key: \"562809f622abb1cee6f9bdf42ce27d491f582f38253bdfbcbd26e5b772c51f3b\", \n\
+ iv: \"54e55ceeeb3e54faa881d631\", \n\
+ pt: \"286d5936bde7141ddb3d926adbe54d93a5c2412236bcab8c122836e37f064700246d570a47baed54a758ef08cdfa662a6a4c0d5bc80a20879f242549b3a9f341f8afa6895e47ada0afdbe2e6f45df7335f9a1c6d51d736d954865935d45a17252d14057afd4985cbb8b6af52c6940a725715\", \n\
+ adata: \"ceb2d454cfbafa00967472fd8cd0bd7c3d65abb365c0a4de5625cfeaf29dceee0d4b789a0f67338e560d1aad3fa71d2a51aac2277b85ad2e9ed16d2fba77c9d846fe45650d61c2748dd3e5\", \n\
+ ct: \"4df02a0e9fc9946725d6b0d27de6b879e90d9224e02e3541e882f3e792142717f55addc18a38a90730d1f12bb7ac550df8fa35f4257f8480a608492a9228f54ef1108497ffc2dd129668a587b20924ecf9da87448e66f9bec97efb8d056a4d20e14c0fa35df097e4ad62f86001beb2a8ecf8\", \n\
+ tag: \"b5af4207e79335129846bf00d08480a4\"\n\
+},\n\
+{ key: \"e2c696a97909afdc1e8407598028998a1a24ce10fb57723614d53e0d5ed41157\", \n\
+ iv: \"62feef39601c0ffd7dde7e7f\", \n\
+ pt: \"7987beba54a539c91d115881a85278e5412c0959f44c8a4d3d4ce24d5e44e232\", \n\
+ adata: \"5fd7c9822f443534eb36c4194d5eb8eca0c86d7da2e30627aa1025626b9a121d827eb238342fa0a1c0b215c0139212a2372646e50f1156eb20f435d188d85b071b26aca24ca9b118f163df66\", \n\
+ ct: \"3e3544f0b3b0969a4cb2bb33e86abd625918e2e7dbae4867d94454bf70537f44\", \n\
+ tag: \"37ba694275ad1a99fc5ced8d51becfa1\"\n\
+},\n\
+{ key: \"e9787eb4e93bc6fc0cb76968a0fe21ca2ef62cb492f2a107e87298d6a58971a0\", \n\
+ iv: \"251b63a166896b628ea3f37b\", \n\
+ pt: \"\", \n\
+ adata: \"4fa069557c402a6ea52c7ba4b6005193f73d7e0873c28299ccacd8c98fa23018525d858371160b50fb09acf9fcddb06aacff06f2fa368912ee6e783c3553c3ca17ea3bedec9b77d5d28123a054849ed72dfe433d9bc16809f75398843f9d9e0d882092d5c3f8b60449c9c42bea405c\", \n\
+ ct: \" \", \n\
+ tag: \"54c209203fa957301cab018642fe95a3\"\n\
+},\n\
+{ key: \"b2cb0b066eb36f512a1c314ca35bd923dab0fdd807728ae5baf6b1a55a576a80\", \n\
+ iv: \"59dd6455fd2d6cbd0d1e7518\", \n\
+ pt: \"\", \n\
+ adata: \"108ea956a3c296e0171925be5b2ed014f5b4ef942cd17cba30daaa\", \n\
+ ct: \" \", \n\
+ tag: \"676f6f5db415b14cd10edde83e587c69\"\n\
+},\n\
+{ key: \"4ee54f55114bf22a5ff8550de76504fcc555990c2761b2a71c9b04e0b603ae06\", \n\
+ iv: \"6ff8a8c916fb6038fcaae0ce\", \n\
+ pt: \"21ef6bbb36d74bb249bd26fae49c3f662da3f4bc05e31cd2121b685a8955eb7ef47af26e4a8a7b573cf6f17185a7a0a4039a5d3b967b1a37ebc8de3dc8dffe52c539f25a9d6a4ed95311daced2080dc8d91b98d9f33e30880081\", \n\
+ adata: \"364e6855f607936d24b6f279e2dd1ae81c81ee9b35283435f80d20c9a3034badc363de27958cab8c423f81ab30ef678c6fa007bb8bea6c56c956a10a288de0a03100e0044871a4e13b17e15908d8a885948031973e5032dcecbb2e1a13656121ab4108ae0e15e971510f538a48dd78\", \n\
+ ct: \"6255bc5c2186d968d3a9d787a3cb9a0e76573e17dde6a5abb4cb75c5467747d2633e3ccad8eac145fe6f8a4aa45eebaf24f19f8af70cb614288bcc2a065fb215af36f4cd6ebb262936c835496df70c7db87af2db5d6ccbb9cbf5\", \n\
+ tag: \"cf92d6f234237a521c2f2cb2f3625b93\"\n\
+},\n\
+{ key: \"ab48d076b52a9ee200adbe526122eda39b9c9f77deea55d31678e3d0dd40e430\", \n\
+ iv: \"be41b9a58dc2de6f846498f6\", \n\
+ pt: \"228869f103057ee5f05f2c2d903480b0078cf2867e5b67d010a689e8899ca854d5cc1a036e374c3a2324daad75be7981b64a3402ff2e04ff6ca55a7ec768e4548e060f2820a401dfc121f4d60745cd8d7fdbd8\", \n\
+ adata: \"3113bd18db11c3da115cf3be19b2a189b96d5ee7b8afbe1d2417dcc79d1d052972b0705fa9a82bcddbc11e64ae480425004701b8666cc72802548a7f4044039721227e58cfa02c15b8fab0df51fab8d0a41f64a8fa6e548237d9e36410444b15b5482ebf787200b4454767cbb07f91ac99243266a0ea51dbdef0939500350f19fd57a157ca4d\", \n\
+ ct: \"41079bfc82c91b837b7cb7103bd7ad4c0db9cd42a425e874c3db8330bddfbde4dca7069914546aea60b1b707d89a404ce2829a36bc7030af1f357bb1a1516336771642ba8394a0f438917062288e909997cde1\", \n\
+ tag: \"1a8b610a3ac33976f15072a21ac39b4e\"\n\
+},\n\
+{ key: \"56d2fe9cdec8c4f1376046ad2ab7b5cbd5819d0518d917e901673e3eb937ad85\", \n\
+ iv: \"281924a6757029a87ebf9707\", \n\
+ pt: \"c89d0915458e35785a3d414f19dd15f2491df5a192eaf9a184a1e1af510fb4108273a9d101b5a3efd815b2585f07e9f348a08d100d05334257a8f5bcf957ea1e74f3d90848797d0bf7850800c2e6384da4e8b5daa0653b0bdc153883bb2b554b5d127c4992562763c432332bd141a16179dc76dd9026e8ef180cebcc\", \n\
+ adata: \"0a0aa1f30612b19c802591399165bff45500a94f58c2b9cfa476e109b76cfcad29bb27768628c531f40321bccc496f63997cdfc6746f60fd1eccbebf2cb78cbcf0cdf828b0816f5c772d5dc5d875d3421596a0a361734fcf8342b4e714b3efb3875ec2a18bd557ff5e1467ca5808a178558c2460aa7f7af57e834874683973588fd089d31cf26aec462089c021a9b880dd91e585b7ad5b0ca59db58243497dd9b34b0d\", \n\
+ ct: \"7fb349c6df184e61f17a3105e9dffd1cf3ba83d8cb1b01cf1a332e20ac2581c81e42131447989be722470cec75da17d56fffe85832dd4539b47cc9d7ee8f70f2ec0407a23fdde27b68219b8305389d630c69d1cea8360bac0c8e09a7daaebf4c2693917fa6a3e1c1f42b5d9604759ecf93ef4c7e7a86a451c026e36c\", \n\
+ tag: \"b719fd20ec652bccd2f9743bd3b1a8d0\"\n\
+},\n\
+{ key: \"21cf8521d3a0e3445eef01494c274f503dbb17de449df09e49f9f60208d7006b\", \n\
+ iv: \"47e6b2e43515033bc78ff2f7\", \n\
+ pt: \"844142afa5dc\", \n\
+ adata: \"da123879310ef9f1557980b4a01af78492ccb9c8c6351a5ad1d05bfbe328fae89b0126f2af6f93db393ded4a9dbf265f3633c44197fc4e92036f2ddc8e1d7d3cd022032ad231edc0a1856694d222ba7adad05eb2c899fe8adfa08c578316def68d8b0b641b4c\", \n\
+ ct: \"961ec5a7d14c\", \n\
+ tag: \"924e95bd231fb387cc4ce4a3176b45b7\"\n\
+},\n\
+{ key: \"20c920e4b08617893a2f2bec81064957e6114394213d14174eb489ed912cc4c5\", \n\
+ iv: \"a50cd31f924da06f07f90a38\", \n\
+ pt: \"14b3\", \n\
+ adata: \"55b9a30431e911bf3d4902f9f55614948ea6880b47885d6bf3adfad7c60c57838418643fe1c239fc339f6797a8070b1ebe37c34ffa65b7f20d9c18b56e57fc7b0bf4b4b3274a762286302ded1b5c4141cfe89dda2eb0fea422ae43241222b11ec9ccff853d00b7ad085206c1757083\", \n\
+ ct: \"6fef\", \n\
+ tag: \"23253ea162de951c8ad8aa6741625123\"\n\
+},\n\
+{ key: \"c2b0019e09c5d60ecdaef2bca6513902783bced7efe05ea38df04e3e86991e56\", \n\
+ iv: \"a48eb050ac25c14b\", \n\
+ pt: \"0d4a7057b55a357346d6cdad3fd8e51ccb60c3445e83538f9374f6c6d0df80e1bff2af2f919a2e049a6ddce83c9153f69a3b20352ffcb47ff61f0b80855829db8fd499989f75520a7cfd350515f0b936d59c8435a408089d656e91e07b8a1d8d82896473edbc34b4780df5dff15bfa0167f6c91dac9968340d2f32c8c8ba2a9b73ef98f505f5680a58446fe0e97c8970aca9d360457ce21475ab9aa870001479af3be85a62586b0467b628ea589cb2c13fd2b07183c5e6797a8c4d67\", \n\
+ adata: \"e33b24fe638019c8999011666e5a2f7f2bf11d29f951fe1e4df583937db7f0f4e8d1a17fa8fd410354d23e024d8251fd968d97ecfced30265f83811f6ea923\", \n\
+ ct: \"eb7377a3fc17a7f2f829728038246f98f95a989d6b6122934d9569a3abe7d4d3ec7720c0eac3a7f51de37dd08486127d894997f1f43a866f6d744fe244818758c9a789647789bee231a637af642d02f7383c7570e355b9db6f69b8df4a469bb0fded1c986c021840f4900faa5bd7f88a398aa0452b99c1a6a448357b490800a226dcb29aa7852ec9d7b8756d3556ed38b521964381678986a2df607a5bd083141970570e706d87dc6eb8cd8410603f30796194c46c630f3b2c437d10\", \n\
+ tag: \"9cc8861ef710689bdf0e0b75b734201b\"\n\
+},\n\
+{ key: \"a359f21a278c2dbefe4e0e848d8246fb8cbe16abe64cf6357c1030196d417737\", \n\
+ iv: \"d82570451d5a4350\", \n\
+ pt: \"3b7616ade6b6f5b6f7a74ed2fa7d3b6afa10db24908bb9f82bf27feccf828cca9d92358fb54246f9d7cfdff609fcbc4d49f5dc966ffd902fd1482dfdd9541e11065171daf43685f768d2bb036a4ff5\", \n\
+ adata: \"2be8b222895f\", \n\
+ ct: \"1462cb98b165ad19e273ea581a073d4f4811477f832a6c2d2e6fd3338cf30b1dcb0a153ef8427de0bb81e38fa3f09e0e1fc3a29a8a7ebd78760719fbb2d2aaf4a16d1b9249c5e92be6e330d622c7fc\", \n\
+ tag: \"3df8d12c0726dc053fa9351c893cbd73\"\n\
+},\n\
+{ key: \"cf82ba87adff78cc941dc038d7e22348e3531e48d579fb1d6c7481df2ef9d5d1\", \n\
+ iv: \"61574db7157d8400e1db680a\", \n\
+ pt: \"bfbe829a960e6f94455e379aeca57ba2f7571e36a894f5345968fce3670bed1608e018c860c192a76beb2fc32d757da31efb0ddbbb67e5e0428407e18af955b2931b9a341d058de73d2cebadd071133e46ad92b8a42cea738b6c7a5a5230dc8730733fc6896b638dd351fbd3d3b13e7f\", \n\
+ adata: \"c59a99bdb96573e80b7f82f57499fac1120b71548302d6fe79796559ad7fdd77\", \n\
+ ct: \"19e65191c3667edbe6f0172ff79028fbdb7ecc522c08aa71b50c1ec355d230dfae5b63202cf3c5b1b6ab7f5d6afcc893da6228cb61ab72f27467ee72fb91635b7308a228a6841ec50fac8c1363d52c428518922895e337f98ae4babd6193a6150126255451082a944f2bca569719bb2d\", \n\
+ tag: \"42b00ee6c49ba7643aee18196b54f891\"\n\
+},\n\
+{ key: \"960eb67dbba372cea078a6f0ec594e10c43b988e51cce44ddecf434ffa580cd7\", \n\
+ iv: \"1c9d0ff31363dece\", \n\
+ pt: \"704b31a14d0edf74c0d69d3c331f2895b54d344aa90aecc13e84d5aed862322f\", \n\
+ adata: \"eb9ad40dd16c\", \n\
+ ct: \"9731daa53cd8f410c554d0d003bee965c3ffb6cd42b16b57789746cf4b153a62\", \n\
+ tag: \"b6780b03c0b6835aa71469472f068d9b\"\n\
+},\n\
+{ key: \"6e674561bdfa3e6dbc5b888d8b33beaa30ae6ce193330268df488c41edb0b8be\", \n\
+ iv: \"0991a2faf41101ef\", \n\
+ pt: \"0cf8605e11864e128a8bed540f78ffdc8bcf63c64d39cc7bedb5cea990a1e5b8bb54e54f43cf4d55f1e726e2136d1de9f0b438e9acdac9cd3b1bfcbc2b7b6b90f07c51b5b7d4b1b87695\", \n\
+ adata: \"bdf8158a1f431fddc607141774508db947dd24155866454dd07e377ca6e1f9efebed41e953203eb154ffb5e0f5264a68b8eadeaa6e781505108715de8b98506bf9cc68b9abb97cb3d0f91f68663c4450df17c0ad3a6a2cd153b81e2690ffce6ac376cbe90cff15b558cfeb93d7de51ec5b19b98968bf7e1da8f9bb3d5c30518f38300226c1703c82743ed5\", \n\
+ ct: \"e176e43ae2ae062099cb9c769a5dae1904d73f7dacb23dc83c5b8a82a925f5676331f6627122b5f4b1cc7a1ee652d37f26a6769c0279a91de06bd69f342e18b9060a1c5be741d2e5cc65\", \n\
+ tag: \"ce29efac0c7d4753a1b580cc10c1bb8d\"\n\
+},\n\
+{ key: \"4de2a7561104d6efbcd0fa6b995a274fe6cc224fe4a6effb71bcc2da1380d964\", \n\
+ iv: \"94890173a6db919a\", \n\
+ pt: \"58dd94ba03ff1856b6164a052e63ac42ae6deff67a13d638122169215998ed6af85b46f4108c55333ccb518c27b9d8f1d33a084c158630dceed397372b9c931c7666e98c4c4432ab2b8962115fdf92fce4e8799f2309ab\", \n\
+ adata: \"836875743493a3\", \n\
+ ct: \"4eb03ad8063593234207cd661f4d8303a73ce2c74de8ad97d97583f8522b22b6389426b7760e48762ba445f0fe6295d7e3599614b2dd4411cf8ea78589fe1c92a0a7095501f3d609cdff680dfca370e5c959f42af0e47d\", \n\
+ tag: \"40bcf88f9faf5fc7870b11a6e7300265\"\n\
+},\n\
+{ key: \"81e31c65246c6f7ab536af187863a27e80967436de809e30646f4a9aa2b9bc5c\", \n\
+ iv: \"93e68973c3848c79\", \n\
+ pt: \"019bfb184f64ba2ea212638f53e15759cba0a06e7a5d59738c6793ddf0568e448c70dd4507ce3db4f646d2ce1fd82e842e963ceb0f276ecd7a15d3a4ab3768bec2534716dbcd742dfcc6fb5b4a2e0e12e2eacff29aaa89986d1ab2a504d34cbe4f5530ef6f3f7b1edf7305aae1e35f9cf2e7409c63a62b94fd7ef092d9fff1\", \n\
+ adata: \"3fbef0ec3b\", \n\
+ ct: \"d2e79b40830df1307db78a49ce09824e046c6dc08abb4cc9bf446a70c432311d89443f44f6a012873ab2ec90de2df18f44874c2dc7d6a19190502164442b97d56f78c19b4be1602af6e0b0865f3ea81b5fb15d76629b9ed6f14fa6649d52d53205c9fc21e37ed8a0071d99dcd50f669b07bda36d3dce9dca13d509ac2eb48d\", \n\
+ tag: \"1bf73e47ed4fffff207bb987117b2d5d\"\n\
+},\n\
+{ key: \"d5ef442eb8490d4b2f1627677bb80a254209bd7b03d9cebba33b145a90d37e90\", \n\
+ iv: \"4e7d832bab0daba4\", \n\
+ pt: \"eec13f77db083ce8dd28190cd884fc50eebee8779f30cea48c0c6e46a27816d20d39957f45865aca4f7defb9c0fd5bfb0ade4de33fbff0c7ba30a8c0870fd0fc14ad1062d5f83a131a0c6a69019786aeb750565648ec1affd70b6342997f400486fef64dce59636f454c8db3f159bf64c211eb50b6b6bfa93fc6fcbb6e693cd6734c1be9f4a3095b6efbd3f1210a7686bbd1c177cb8d78\", \n\
+ adata: \"6e54d99c9ecb505f7e1d28a0c80844c3510e83ebfc4178c275d286f0964ddbbe4615077c5039b4cf18db502316b2993795b87020a5f0\", \n\
+ ct: \"01cc4353d34eac1b7e0966e8c15402666853f570f53e1b96e2acb0024aebdb631555832b4ca572f34ebef8067a8b2b3b50ee9b03f474f31daf8b3936ca50685f12e08d78af369083953275ff3cd11b4f3c3e95f5f2ad9de60a156e02945dfbd6d655c0ea1b4343d3f5aed5e36d39269c0ba93e9ed1dda424532b66d0fb400780aa606d08426316754395368006f2805e9d8a2e5c74e197\", \n\
+ tag: \"a9a2dccb7d0e4fe86afaef92ae765862\"\n\
+},\n\
+{ key: \"e8fa6e11c10029b460c2481794ce1c45518b669708a78a866efd5850b5f19ab9\", \n\
+ iv: \"0f9f7ef0a36258a0\", \n\
+ pt: \"1b6ce5078d65797cb13bfafdda09b6dc4b012dfc1859931dfb427a0f2d52da8f93c3cfea3644fcb27fce8f691e62da4f53da0629f02c095e3e07e9496286c5685d16eb05e4208676f74c742f65ac72b9f6787f3fcab91afdfcb8b6dc6da8\", \n\
+ adata: \"f280a69b737cee4001358b787033149f4e5a6b4cb9fbc14c133a0f0a21df480796aff6cccfed14fb2efb\", \n\
+ ct: \"3cd5cb3e0201c1a243309b17e42686a57b411ed1b3b09ba76b2a69db60b0f5ff002e229c6cbfbb1fbc4545a31a99a3854d73b06c33bd55d4160c335d5ebc3f65a8291d1fd3403adb4ea3132124308da9d423cad90a8a4ca623b81fd8e238\", \n\
+ tag: \"454de624acfa062e9fc1f809fad399ab\"\n\
+},\n\
+{ key: \"539fa6b4c5b1e8f0d7960f778ce70375405b81040335429118672496be70c8d8\", \n\
+ iv: \"73bdc3b9cf72d62a2dcfecac\", \n\
+ pt: \"cc82c3311d6f62c175de585c65ca5ce72b25ed2805e3a6a25b6aa3dcdf3526e673edfa63270ce2df9cda43872b93bae1af4987e9822f\", \n\
+ adata: \"12aae91379f393356ec7ed8a3da4c75ce5e8b12fee1b37dcf4732689e2691f565671af25b1611cd1bbe913fd25dcfece0846005b4cf7b7341c985318ff02c0615e7d\", \n\
+ ct: \"5d103b8c1c1ad5b849567b5e9005fa410c35653326f767b06c0fb46879ca14220a316773c65fc0881502b79f982de4bbfd998ac7b4a5\", \n\
+ tag: \"57d1b9c8dbe54696c16a7f7e6c29339a\"\n\
+},\n\
+{ key: \"f8910d4e70808a0f98cfe6d55ad3c8e815d3d0cc36d8852522d21ff1e6f03db3\", \n\
+ iv: \"d834b1a3d475fadc02c2d2c9\", \n\
+ pt: \"a4a76338a32679a7a2e25311ece627f0cb9799349bb990d97558242bb8173b256c691ce35876a8fc250a3b383761d444e4910e62e2799231ce007044dc6037e807c2acdafe49a232f9ed6ea3dd8f8562c4ef31631b34cb237a223215ae50e54ac537f0e7\", \n\
+ adata: \"33a98ebe276bf2ed4dcf7588a329c6dfa19edbe5dac1bc29a6b6808557456e7fe05badcce350a35c463f4c648f972b170b\", \n\
+ ct: \"1316f3374cf4453591d532ae0723e8a6a0fb274075e93a5cdad78df76a098aabd791e58ef54fe8ed0fca898a9b37dadfa2f0541cb6836c503ab58e5a99f14ce53090d34711a97011f61db28c1074a6383ad282811a93968e3351326fb3587ec2d901d6bd\", \n\
+ tag: \"76f859b2095b4fc30b9b828009e7fdb1\"\n\
+},\n\
+{ key: \"54b668b4309ed86956e5b7d0071b082a68ea8ff749fd76d0266d3ae301fd7cc2\", \n\
+ iv: \"df5b8beebb3a4041bf370354\", \n\
+ pt: \"0ec931dafe3d80a8c2373a80b7f59de7c4a585ad3e3c758445573770a27f95a9f1d1ee86119ce3c96c70a939eb6074edb9bab5b77ef9eb954d64365422687ac1854ed114fb8744b565bdfed00392485760d0620af9c58872bc7a87216cbd6b8bb1d5e3d680c8124db888ca82819fff213a97f76c692399bc9a4e9238685b28d2d3271df34a4028dc71abcba7b24f9cda9ffb2325f3e017c46d1bcf738b28b60162a7508cf58ef3c61ee0ce7f90a67b4f4110e8c473\", \n\
+ adata: \"8e2592bc7be1b1b7d70c55ff98888dce37c897b628c992cd82ba558b64d6be3be66d710ef7b7e5d36c77484417e876a9dcf8a774f9819c5199f6249c6e24c2abd647503abecca45a72fb446ed7ccfff52654b045405ae0167024346d00087b38cc4826bfa6795c57c7c2b1b7c16de558bb9121fd11c6dc19ee3ee187037b44a62e4df985f07fd7f8ac135a05dffd15536237db64e5bd4024c5bdd67cdd5ec2a9208f03adcf3c912164c6c62538993140cb5132c58f8589884c38069b259661f175e49c7c7e73\", \n\
+ ct: \"e817858462003f250020637bce69b15bc3918bd94d3b9c8de85b4e416e6c8b7f0e2a1d78af400005726168b6b0703eb998528956003ef3b328e06d9ff73b95a440314eb7e5fd3601d1cf2c41973dad25eae2e4819bdc826e3da9f768ec5e900510211157be434549a0f10dff230f36868cc3fdfdfdcaf596f2fd5926765fffeef630772eccf9e2efe4639683dd6dc9bb60bfd84470b8d9cb29b0a40d36c4d872cf0f00e776f6f2f5f762b1f2eed491f8798b85af1f\", \n\
+ tag: \"40f07a11791f068d8eeb5601a619c367\"\n\
+},\n\
+{ key: \"342104875ac3b1d0bef7f08443cc2e26c75b4c206411df8edfc832a9b7940766\", \n\
+ iv: \"42a4deefc254e696\", \n\
+ pt: \"60ad1d3affe6b11866fc19edd91d20a0d6433050922c263ee97bb495aebbd6fefc18b046c2933cb8409537b08233b5d23893e7c3270a789ee418359fd0b9a39c19fc1f972ae1b68c\", \n\
+ adata: \"e49ea662d8f9287cdc540abe81423e4a6666b5349d78d22840d0502ec598a790937acae48ba4177675c9cfe15b4c4442dce86a66f5b1\", \n\
+ ct: \"65d7a01ede5cf0db8e90c065ed2aae84391630c6224fd4882a156874ab499a5201d099c89dd666102b48a8caecf22426d7c80aa7c4fcbcd9bb66cc31fd63aa3099438de45618ea9d\", \n\
+ tag: \"c0b51d7b674e2acd4ea1f79a56e9ff76\"\n\
+},\n\
+{ key: \"ff2b2c521f1807f0226dcabb547d10372ef9db54410cbb4eecc5e66fdf856a98\", \n\
+ iv: \"618c5c17789e0ce1\", \n\
+ pt: \"e2391e901922f7bac7e433ce024c469dbcab701ef4c646dc20af5188d64f5850bb796c50565abe1518861c3f086136d5adfee502bbeaaa28925a11e4946bef12279fb80c7f40f8ef4b0ad2d26ee817be51153eadb897c493db7bec45fa99f67b7c1895514fcfafa000f59b02b0dee631b9a172df46ed1a558918c03290e169830930ccfa14cb48b8f01efc1959\", \n\
+ adata: \"b92928c898437f09d69f8152362524c150d48de3a4d1d8edddaad71c44ce78e76debf99feb19e782b8dc63e9d1e587f9d03244cbed724e9c25b474e97cd0e027f48df68c4a27bd0914660032157a142828d0026637a0b63385650fa73ef293\", \n\
+ ct: \"cfeaf0b20502f86ddee58f2e7277cbe7d0483fb55a5f2212ccab5b7c69576fde074cccb75dfd428ab7ac850c4bef831e568b9a1038df0949bd47fff5c41aa1bcd1901074363e1f2ca9f1cbbb2a17e0ba9db183d8a5c6b8eb1ea6bd4df57286cace118a66d3b2f0406e9f3b82aa938de6e414af31d0cc0d89d871a64c739d214dfe1cc182e0a32f518f0d38d049\", \n\
+ tag: \"3ec062b345142067044b4dddfccb576d\"\n\
+},\n\
+{ key: \"ced05a82760c163ad549364a2cc5520174603e0a3cbd1813967e79e6317be7fe\", \n\
+ iv: \"aaab598a5d20975d\", \n\
+ pt: \"a359f97abf85a5f87125e33b547157702109d28a25bca8823436f984d70104ed0c0a94704a96c0a60a75b628062d274ca2f7b5251b55b40c17d44971ca97eb1f0bab2d37f80f14c9f472dfafbea0\", \n\
+ adata: \"cca276c4872a859d30c5421c14091a49116edcb7b8bc63b98d0846cfbb686dc984b5da4f2c83a43c0f8d7461f465f5928c963bb769c0cff0511ef6843aceedb2615b028bd3\", \n\
+ ct: \"ce7d8d7751e67e9ca64029aa86c506cdceb09ea02fd4c350556586a26b7d89d34ae12b3cc8e17a2b9a250f28aabf0613aa20473eef03805c8665e56f6dc7f04c1112d6757224f20285883909fa14\", \n\
+ tag: \"7f0cc4cebb751f04fea3f51627b1c945\"\n\
+},\n\
+{ key: \"f7a89e892173cd0643b5bcaf8f4bbbf4e49c5f358e9b0d3d165a533af0ea9a96\", \n\
+ iv: \"f900ff6b4cb1c805\", \n\
+ pt: \"d147da01a6f3b34d3a4267f8ce50f19936ebb3ea9831dff216ab2e098c47331d891677d0a682b1df56971f1b751892d3b1dce2cfaaddfd4af2cc3cf855cd08776d28f3b27f18da9e5da0465fea895ac1cd481e9e4ce8e803\", \n\
+ adata: \"4d15e36facc4e26d4256a2eed9e1a52d9b433c2a9fa36eca2c18f011cfc2ce06b433c8e64055df65ced0c605b96dd04e90beba5ed112916f39271f5dd257aadbf10e61d632a0a004222480c911a159bc2f319eb046ab2009516d5a\", \n\
+ ct: \"47e9e01f4e5ff093f3b5e01eb5a670f9967ac01b8c8604ba972aa42bfb37f53fdeecfa487374c625c84883c19c475f214b95c14983b4e1e4218b9c3cc9470215176218b6168d3e4f60e9d62cff334de99bb7745f81768a84\", \n\
+ tag: \"8ec46a7c4daf346f75c7e585cb26625c\"\n\
+},\n\
+{ key: \"3ec2b92a51ca30297e5e3bd56320f8e537406fdc2e3980bc54a72c726bee4ad1\", \n\
+ iv: \"17a8cfb98da6801c\", \n\
+ pt: \"b0c4ff0088f461adaf7a76ef2b0962e49d9ef0f00e46ba261e0955e5cf3c7e7cd08515e8a3c7f555990190821725f09a61e17cf11c7691e8e84c0862377e2515e7324eba93d02021f3836511980cb5dbc4acba490eb5a766bc4bb4b542728adeb41299f39dd439c9aa74bf4a4a4e8d2816ed750155ca9f6fdabc583cc0a20bcaf2f40dd3c9\", \n\
+ adata: \"575cd11bac0cc48f93c7d347d44e89e5a6d0527f6f72713ff3d8e241e3a44a9a65fa503d2b3ce7a0eaccc9853c5bd37192d3c6fd8b4040500263\", \n\
+ ct: \"1297c07c50352e8d3db9fe1838977742461945042580d1fb505d2ee5149eb6f2fe341eecf6ce8dc01e619c8ef8567b697e3ba8bba4001e5ef586474fd883781223db7c360286a948e9fe6834e84bad6170a1054cf38ce5aca9cbc0b41e421e87ee6b3ff4da8bb21e49e78a17e86215aed732f348cedd42fc0e83d952d25de59df579753fb7\", \n\
+ tag: \"43d6ae4e89de0d3e76e07453be55d02d\"\n\
+},\n\
+{ key: \"a54f7df852754351b5711d0b8998ac2b9c013b20cab21dc9960d2f882d47bc24\", \n\
+ iv: \"1361d433725b96d7\", \n\
+ pt: \"b2ac6a33ed71dfb017893a5f63c6d30b3dcbb3330e777b5840169c0e4fee2b1d30556f9719f7a4df49eabb6e5fd428aa280233c7146f7a1cbfaa8701a8cddd59f4e7875b83bc31e2337c439a60be27316bd0d965b01d9ad91301f4e7031c252f64badcd99d571dc35ac6d2f698\", \n\
+ adata: \"2f5346b050e7748201470b2bb6656120559a8392f1e38c6e49ba475d194c43f5af1dc7a7d91adf7e4173b0f704467cdd4996f13b4118c0d4fa9b6cd97937a68fc70c1aa6edcee48d5c838cf417009e2bbdb68aa7871c6df5943fbaf836f8cec1b2a8d946444fed9089d5445561c6866857a9eb54a29258a76f5231b539e7b185c5b38739ec56721527c2b9c9ceea40c64ca2\", \n\
+ ct: \"aac1a92be8d3ac40a792e5c7068b351db4ac90e5cf9644db54151b23f3cc16239ce5589e72777c420108bf887ca80a1e96f6a8f3ff39d2b5568f8957e72f12b2ab0f6484f5d538dc773c7e7507b4683cfe8528a56581b3dce3ef6b2395d28c249213245c7f64cc91c9d338dfde\", \n\
+ tag: \"d604d42857ff818175a9f4e45a156bc0\"\n\
+},\n\
+{ key: \"af4c0239d4bcd7c0604d52661807665488dabed59705fc0e546695828dbe2531\", \n\
+ iv: \"1a3d00a961bed2ac\", \n\
+ pt: \"24bf659551fee6497e66e6499e46b4acf38b5dee5ef152880f5f6b94e99a7816a28ed3d48289f4a9ea\", \n\
+ adata: \"c6c3c1c9be6614cd75bd1a7ed33f502603c4e8a5b9e10da5912063138be7a26e91e4a9f0fce62c457678067ceca371e3268e6771b18562887a7eac72ffcbaa6609300437d6e4799c1456ccf6e08d1fdde771e219913f090a333853de33453cc405e41ddd889cd7090e46ae45acac25829a6903d57a87d512b487c3d989b5ef0dde535a7cd25486edfd8c97942a31acc61009e9dfa35fd2a59205e524beb3e1e741e7f982102fc7b2ad5265eb3ca2dfd87e6891d15790ed47bba89f85246b6f12dc5b47bfc8\", \n\
+ ct: \"f9bba410f31c58ab1d1aaa09343195f6f461daf0265baf97da51e9b7c9bcb029fb6cd668d4f636959d\", \n\
+ tag: \"3c0eb26599d72b59b96409dd68f5944f\"\n\
+},\n\
+{ key: \"5d733ada677e5bdad5ea7d45fe54a9b14bee16807f01431ef3f1427eedd12f04\", \n\
+ iv: \"fa33eb237bcd7803\", \n\
+ pt: \"ea7818782f374c6d60b29e224605c75d1d6df400a8a3a3c12e5aacb7dfadb6cb9eb1747ad560daed19a21724eb40a62def2f8f\", \n\
+ adata: \"9818ad4843d991d07f2d7ec73ace090f17a274e3b7cb0407aa8c707e17d21270d29a0ea62392548a0d3697e72034b2c228d4a6bf7552f75d79b2435ec519682ade6d751a9df057c5b8983dd05ec9473e365295b0b5e3611d62562fb9b35a4f4c349fbe1581f061c7ecd80c17c78f7c2a1a847a1c226f9f69ae1d4ba825eeaff0afdcc40aea2d74e2080d1e09\", \n\
+ ct: \"12f0e9a03c1f6a3d957d4a0b0ded6de6af8ecd188ad64b312d080df5f9728ff18f63b5cdfb6c055e0f841f8be45ed0f68edfc1\", \n\
+ tag: \"02643c04819a0bd85856372f978738ca\"\n\
+},\n\
+{ key: \"18b2899f04abf806a14993a014f440d2fee3e5c038d517a9119410d622f918f7\", \n\
+ iv: \"5a834f3dae9b05e5\", \n\
+ pt: \"10a79927def5b2f2ed7d9bc7b11df9265ea928daa884abd048f1215e9b05c4309afbab492a7c7139700adc75ff35b8b5aa05ae10f390668d9478471cdcf4d3c3bf09ad4f24a74eaf7fcb899f0c6e71efb4c6a42cbd7feee4cff2a62f822ac689116c546e6b8f2a121eb341d976244ac2d2f4d52e368397bfcf40eb3c5b59258bab52f60c4dc35407289031c6e094d0a2e7eb8bae85ca92b4d9fd5ef80fdf1c\", \n\
+ adata: \"db7e3a19daf579c436e2fe9cbe3b701c368b4c52bda9272c68e08d1c3ab99ac56f959b807d999bed2a11f25663e19afdcfa3c94e8dfedeea6c31e0d933febdd20914962f19e26aa94a071afd5030e0d1a155ea1bd8c7bdbb02c00677124e225d72ea1eb062f2e1ab2cc533df3115db604b9f4aa5117f4899932532126632a1795cd936dbcd6fc280b0581a88daaed4319b687bbb37e225f50ae9a1c52f4c1b9ab0681064d678d918212fa67d568f17ab783fdfe20282b9bd0eebb1d688e03c\", \n\
+ ct: \"c82edf6fd5b2fd9f971c901bd2c43688053d5d938e21b8af240d02f63384cc27591d35a7895fcd853c3a3a3af87132a368aebf3c6aab6d548cae5a224547a94fbe7a8daa4a655136ba69c4a7e3616b441fa2d60410b97d23f0eb675a6a443a843c7a6c2e3843901e0ff04bd14e70ddb3541481633f70fe8adf00865048e55ffc998ba882d692e47baf41d8ac0a8ae879b925d3462bcc86faa79159e092083d\", \n\
+ tag: \"2a00971b2e33fe9f8ffa813c7d0a15e2\"\n\
+},\n\
+{ key: \"bdbb388fe2126ffe6b7084c081ee1594defe5d684291faa7055ada833805ca9f\", \n\
+ iv: \"e59b04ce9f460152e607cf2c\", \n\
+ pt: \"1f8f39e960af8025d74f99f0978770be216c4fa12574ec6d1bb5f04e6d238818f1fd5f574980a0fb468a2bb468655e5687c300eaf9a09fc6bb10ebded429545dba8c9a3893c2dba0e4fd0e530a541f2b1f3b83ebc8b6685b7aa7a2962dc4ae9d50bce13bd02ce6d9b65ec1e7ec88b59eacf7d52cc71ffcb1c13fac3abdc5bbff92e724299b2e6a508f4dcc46d6d6ba25dc9490a2f29e0bd18bbf624b284b9e6663cfe6969540187075707387358db874\", \n\
+ adata: \"4986019f5e7e4233139ef29c5d4639f25ded24a196800694b788d352ed25bb26f72da8553fe176e654172d88e9315a0b011a7bf27e69c918271cd6a4c7c23a7e4e9e80cfade3802d82c468d210b4df41acdbac9f9ae453bed19b6789fd7af8bca51cb551d9979b914baf4844863260fd2978065f31f1643f8a9ebd4d4e845f7a527303909e31fbf32991d5560941f02b\", \n\
+ ct: \"87c32e09d22cfc6cb8e89f9dedd35a9bc1766d076689a3795300ca21e2013f7fbf07a26b750b29843dfad87a01bef44ae2afa7146e673f944de86a43c93a2d7e159cdcd9a9fa5e0d4e5fc2c92f2ab23e8d8760e66c643f009498a0b18c3c8b007f3950f172c8fe418af7f3581d8cbb76c2c47bd859525bb6211b674105ddc4f7e074a8f72453d67914fc93fc76d878aadec1951a62fa4868ab2db7457fcf2578d2d31b9d61c252c5b291c38af001df32\", \n\
+ tag: \"900245ef1bac070f8a893aa1eeb1f697\"\n\
+},\n\
+{ key: \"af564750c555c4ee1c519e99bc1c08b6b3bb8c7bdeca96330fe0e9ecb75bcca7\", \n\
+ iv: \"f85e3ae5b171caf5dda76cb7\", \n\
+ pt: \"1acbaad6d26389272adf1e71a386a4d6922aac0cbd11aafd32c60fe096ac08c09d0fce26117b8d8be48b869e60f645d7a7b8d41b4fb66f54c8d152e82bf15000373f59d8c1b46469b32f3e\", \n\
+ adata: \"208980b3b9dea92733aa4b5a7c6b4805c4d503df022c0d1db00eb70455b904ae572fb1989c9d1e62e499a41a93d67e8c259173663c3d5acaf51e29c595b5dd00c4abc6460cf8ef995c4e3fda96ae0d5863433759cd278b9b3b537d6aa80c54afbea6454e36ba6d29c550c4abe6acea1933646fc2187f0081a17f889764e210072c8e74dde72a02667298cf64ed46be90489604e9c8de8570e05c8094a5e822e2cfeb894fa837957cc97bb126ecd2ada6484a4da1459e1f\", \n\
+ ct: \"87af966c0de3df1e9527dde7ef563ce218d96384bbf5487e37e1cc936e233304f1d2ffe4052553fa8dc5655fe03ee16423080903b5a0538b3111f953aa0f7deadda8e771cad19d02a45fbf\", \n\
+ tag: \"94fa659334d672b7aeee4dc4dd70737e\"\n\
+},\n\
+{ key: \"ebada5647dd402589a0d36ac84898ada4a7f591043c1555eba8b219aa6c8d08e\", \n\
+ iv: \"695b325cd565a68e\", \n\
+ pt: \"159a135d8a3d22e5cc6e469ccc32e64676de493d424c5d74f497baa6c25569bda7f5c22de9d8d3f58d7e42a05591125b4b27fc5b9980837659a7bd444476f57e09ea8e3f909fdfbc026f7ec36a3bc80a458623dcb3fabe9bdf47d57721af69d6730a4e651991c923e544200a6844fc1186e49b0a9989b7cede147f639071c1e3557bee1acb3549b858cbfe5622da96956fd0283ce5d2cc725b95\", \n\
+ adata: \"0f8adce44b12b9cf533506bf82a4bc4e5a9feb758523ff900b64a7c152f194da9bd00a78e9a446ca22a04e2e6cf8c22b8368bcfbddcef27686f709aa424da94ea2b9abe604c730186300197c5fd733d4d8f70852cf580f5152eab957338b1146e8eef67c4d93c98edad5c5075ad9d66ddd598b5ac8b92784b4ceee1c226db69da6a5c10e69f4cc14ca4fa6bbb7f79bcbb97105b09ac0f1012ff47d098776e87f0755a83203abb34accc8724c259ade2a4908a7cbf7b1\", \n\
+ ct: \"ddcc5640abfc1f353114cb9acbb5b969d674393fe5dbb160bd45354113fdd71c65b1e0390e71d09d24e71c1f5c0af58ce205f20d5cbaac67d1b83a84db3aa9a5543820412c88def7010f70d63a522f8d3cb03f6d8ad50df448367b0f606bf55cdd349fd23e5abd8a4690eb919a4cf1a819a8be05f4b8d20426e8490a4cfc7702848cb7cf23a1f02a0df3f059ec834dc72583cb1aa0f2d543049b\", \n\
+ tag: \"4597339dce274e36f4c469125893ce07\"\n\
+},\n\
+{ key: \"09f204cc22f7ab163f26ec8e52cf2f9677a50d1796267bbf26a19110e5e85fa1\", \n\
+ iv: \"84760d9441d07366\", \n\
+ pt: \"34e1677853792e69\", \n\
+ adata: \"93524545b8eab82c7031641d2778eea3f49e8ccd9d4d1ae2c5e35f61c405deddce1083b6407bea0e18c26d46e63eb1f80e69ae6daadc4a40b02ba227e4b7b0d7d9390ace967f1b9b67cf0e5b3946bfe037bbaadb9855644fa9086aaf32efb1084fdcfb3beaa7f2ce4e27f392fee58279947b4fd05de32d189e51c565c8d6813f7f66edbc5c0d374f1f904c31e7699c08e2dd0d7065620944ebb712e703f7deddd58e6c81e1fcaf7c0afb0b579bae51446f2c14baa9\", \n\
+ ct: \"11c708924255301b\", \n\
+ tag: \"87932097213b593b37fcd443a144851a\"\n\
+},\n\
+{ key: \"a7469bcfc24a8d3c07f8712285469734050f0f50502ec904f249b65747d64ccc\", \n\
+ iv: \"757c81d15f3fcac7\", \n\
+ pt: \"fd27ba478c99d8ab04aa1da3d1c44f828b6b99df882c3d8a3e7a946f64049f158906003612a8e7d04d335e3c927e377f08a0f2f3224a066c59c3199c8f221c1f99e8d7479eef2dea0d622633d2f631eeab66a0abbf7ca21142652a24c934db8eb5332d4457e26a4f711f86402ad8b65c98ef3c6f5c83c277\", \n\
+ adata: \"492aee7f07cbda5191fb157fc855473a337d37d92bc443cbdb25d375889c7387610e4736b10202a02e68125905cf6a04055f32e6e7b627fe8e5f2d3c0da51af92d52e2bfe82986fadf70ae63a707018821d3b9c7177438c3ea135ef102c1f7a8421528e19407db3ad67d4207daddd783100731a24d1ce981bf97c53266d56662ed497f25318bedd23f00efe49852e6dd1119c16294de4b8151229ece6c1ab65cb1ef9c6dbd15cf6fbd68dcaffe3cf09c476c12db126982c8cd3dbbfe9c80\", \n\
+ ct: \"6cb0b63afd8fe2e26e03094068a8928c84ad756e0363299cf96cd3ccdaf4b671a457a53e3d4eea57acdeeff7d79668c63d36da90f92b5ce427f87178052f6f8da6113af43e0f09c8c8fb83f35ace6c0e4b069bbef71ecc58afe92ab50d13276c4ab2576ab9e7eb4ffa3ab672e9e08716d05d8ad0dbb76d29\", \n\
+ tag: \"e72e05afdba0790322881fbd8699cfbd\"\n\
+},\n\
+{ key: \"e4bd745afe4135274bf98b13a45a716915330c3ac15eda95559a9b30bb3d773a\", \n\
+ iv: \"93514b0ae1d72df8\", \n\
+ pt: \"2e83e29d6d5576031d27334e93c10b5d36d2f786181548e4b6043b13f7d4ba520d82365a2659b449989b53f3ed8d2fa7a19f9bd87939a7caf5\", \n\
+ adata: \"cd1ba2f16ee4c2544012e244e426cd269ae238e477e935561be0fefea3e232493e3caa2bed5db991c7416494f1016dbe5fa85fce0f43a3d424597166ccb2dbc14f98ac9ddf1ef92da79993d165302a80c051a2cca7f603721f3ccceb5929d3fd6c8bc4193ec90151aa9855c752f8d080f4f7a3bd7052fb11f4406b670fc7b896\", \n\
+ ct: \"652726500abf8f416fde5f57cfce944834e24c7a3a1cafc57696ad4e7b3c3a3c1ea3194410e387fdb3a7f691e203f56b651118647a9d756b62\", \n\
+ tag: \"020f2116f955ae9f1085399970c46da0\"\n\
+},\n\
+{ key: \"243b14373b7c92e0502a0c95eac3bde181e565cf32adbce1fc20d1dd64c08de1\", \n\
+ iv: \"9f6b9c32a0680085\", \n\
+ pt: \"c1578acdd04ed3a567c2bf20c652000f2b56943e827c0c513ad705dcbf5f36f9e0906b187bbafa00211e0e3193f23f16eace196d3367c1599e2adbfb16aee023c184f06577b2585dcf9a4849bc56478500\", \n\
+ adata: \"fcd2daf5e70534ba2baf74362f3e9dbc67504c3b66c7\", \n\
+ ct: \"2d8af834ad57e94dfc0f22a186d2e67fd90c5ced110ade317b75a433472d337a96d6970ebef616116ac62ea64d1143825dab5a60e72f977b93f3c8d990ab6761797e10e6dae75f099a58483b54885bc185\", \n\
+ tag: \"f88df6b40f254c49199a449c5cb2ef76\"\n\
+},\n\
+{ key: \"d8a0f8503c5eab41fb6e09b77e8441ee5b8c3d14351221b431377ffdc5411a4a\", \n\
+ iv: \"a7f61454ba364a3d95b0ed37\", \n\
+ pt: \"2627c00f382cd461f109cfa72d61f98774c5369e8754dc41375df317021861e5badc8842259bad9473f0709379d43c3919abf3d93880aad3a28daa6208d49a52d8721e52164838a813ea174c1cac167802\", \n\
+ adata: \"56c25da5bbc19019aa3ad67f8f5ece5d010af5efa09394faffc3c87832e651a866d58412c141ecac7bb6e32fef46ad71df31129f4664da8072952dc06ccd6de029a8de8b36676b61a3305e7c077b5367f4085e479e0ad39ada786f7d5e17ab7c5120e7f992a6affb33867dbc408fec992ec215c15fb48d6b98d2c5ed1566d5d22a278ea1ee68dfc0e632840634a1c456a44d2810a461ff82047a869db1e11810edef6b8c0f0d576284869bc84d66\", \n\
+ ct: \"d819f28625b394ca2ca6eb49dc8814646dfac4e27a275fd19f4ca2a2d7a5680ce5850a8207c3554607178221225db079e0d2fd704210331064e24ca19720e29bc032a2533325fbf787bcef115d846132d2\", \n\
+ tag: \"c23da8fc63246239029e912ecd911762\"\n\
+},\n\
+{ key: \"562b8f5912b7f1bfef6ceec59d6602e694a9549838efd38a7d8c00a858830446\", \n\
+ iv: \"1685754157e58bf80232e4b8\", \n\
+ pt: \"509afcb323d154183b3edc2e9c37bef74096e28d97b6e60c56b79aff46a398ef71d68bf2bdff\", \n\
+ adata: \"f49f6db4a38b5e39d740500b0927f843f98786679ee770e4ee9d6e983756bbfa513382e8d8ee088b5df58398d25b1b9547873b1d92f5d96bf1be91f66fb9bc374961fa8bb4005dbcd83397438aa2f7717b23557ba3055270f3db58bbce36471cbff8da7d15388cf043eed5600d5d68452c3b0301982e\", \n\
+ ct: \"0fed8cb28295b906b26e8543c2017039bcfbb91bfae7c2812ce8b1ccf9486fc786dd9fb982d3\", \n\
+ tag: \"f3b1cd04de49f009dc3ac009c23809a6\"\n\
+},\n\
+{ key: \"4644037f75a41b01e4e02bc49dc6172df51d1a6ecb2dd3482905be5ab5eef9b2\", \n\
+ iv: \"ccd3af4baaee4a1e\", \n\
+ pt: \"55a10a01172ce22719fa71e04dd808c22d4ca7719e6593b516fcc56198f5fbcc9b9cb07d5f8b4efcb2e8ea77f48ebe80ae287b13666c4b10eababceea9ec43e8615a7803275ada8252\", \n\
+ adata: \"b55d66d231f325866d3e86095fe5af\", \n\
+ ct: \"02abf650c95704c75bc519429333dc0be43848a18185c6e3517736f4c4382f3f54be4a70cfb82c9e66108b6ffb17cef98c3bf3532336a1c7aace0fbbaf2790c97cb6cc32750b09b562\", \n\
+ tag: \"40183e477aa03007646ac6af0756b80e\"\n\
+}];\n\
+\n\
+\n\
+TalosContentProfiler.subtestStart('stanford-crypto-ccm', true).then(() => {\n\
+ var _sunSpiderStartDate = new Date();\n\
+\n\
+ new sjcl.test.TestCase(\"CCM mode tests\", function (cb) {\n\
+ if (!sjcl.cipher.aes || !sjcl.mode.ccm) {\n\
+ this.unimplemented();\n\
+ cb && cb();\n\
+ return;\n\
+ }\n\
+\n\
+ var i, kat = sjcl.test.vector.ccm, tv, iv, ct, aes, len, tlen, thiz=this, w=sjcl.bitArray, pt, h=sjcl.codec.hex, ad;\n\
+ browserUtil.cpsIterate(function (j, cbb) {\n\
+ for (i=100*j; i<kat.length && i<100*(j+1); i++) {\n\
+ tv = kat[i];\n\
+ len = 32 * tv.key.length;\n\
+ aes = new sjcl.cipher.aes(h.toBits(tv.key));\n\
+\n\
+ // Convert from strings\n\
+ iv = h.toBits(tv.iv);\n\
+ ad = h.toBits(tv.adata);\n\
+ pt = h.toBits(tv.pt);\n\
+ ct = h.toBits(tv.ct + tv.tag);\n\
+ tlen = tv.tag.length * 4;\n\
+\n\
+ thiz.require(w.equal(sjcl.mode.ccm.encrypt(aes, pt, iv, ad, tlen), ct), \"aes-\"+len+\"-ccm-encrypt #\"+i);\n\
+ try {\n\
+ thiz.require(w.equal(sjcl.mode.ccm.decrypt(aes, ct, iv, ad, tlen), pt), \"aes-\"+len+\"-ccm-decrypt #\"+i);\n\
+ } catch (e) {\n\
+ thiz.fail(\"aes-ccm-decrypt #\"+i+\" (exn \"+e+\")\");\n\
+ }\n\
+ }\n\
+ cbb();\n\
+ }, 0, kat.length / 100, true, cb);\n\
+ });\n\
+\n\
+ sjcl.test.run();\n\
+\n\
+\n\
+ var _sunSpiderInterval = new Date() - _sunSpiderStartDate;\n\
+ TalosContentProfiler.subtestEnd('stanford-crypto-ccm', true).then(() => {\n\
+ record(_sunSpiderInterval);\n\
+ });\n\
+\n\
+});\n\
+</script>\n\
+\n\
+\n\
+</body>\n\
+</html>\n\
+", "<!DOCTYPE html>\n\
+<head>\n\
+\n\
+<meta charset=utf8>\n\
+\n\
+<!--\n\
+ Copyright (C) 2007 Apple Inc. All rights reserved.\n\
+\n\
+ Redistribution and use in source and binary forms, with or without\n\
+ modification, are permitted provided that the following conditions\n\
+ are met:\n\
+ 1. Redistributions of source code must retain the above copyright\n\
+ notice, this list of conditions and the following disclaimer.\n\
+ 2. Redistributions in binary form must reproduce the above copyright\n\
+ notice, this list of conditions and the following disclaimer in the\n\
+ documentation and/or other materials provided with the distribution.\n\
+\n\
+ THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY\n\
+ EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n\
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n\
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR\n\
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n\
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n\
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n\
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n\
+ OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n\
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \n\
+-->\n\
+\n\
+<title>SunSpider stanford-crypto-pbkdf2</title>\n\
+<link rel=\"stylesheet\" href=\"../kraken.css\">\n\
+</head>\n\
+\n\
+<body>\n\
+<h3>stanford-crypto-pbkdf2</h3>\n\
+<div id=\"console\">\n\
+</div>\n\
+<script>\n\
+var TalosContentProfiler = parent.TalosContentProfiler;\n\
+function record(time) {\n\
+ document.getElementById(\"console\").innerHTML = time + \"ms\";\n\
+ if (window.parent) {\n\
+ parent.recordResult(time);\n\
+ }\n\
+}\n\
+\n\
+\"use strict\";\n\
+\n\
+var sjcl={cipher:{},hash:{},mode:{},misc:{},codec:{},exception:{corrupt:function(a){this.toString=function(){return\"CORRUPT: \"+this.message};this.message=a},invalid:function(a){this.toString=function(){return\"INVALID: \"+this.message};this.message=a},bug:function(a){this.toString=function(){return\"BUG: \"+this.message};this.message=a}}};\n\
+sjcl.cipher.aes=function(a){this.h[0][0][0]||this.w();var b,c,d,e,f=this.h[0][4],g=this.h[1];b=a.length;var h=1;if(b!==4&&b!==6&&b!==8)throw new sjcl.exception.invalid(\"invalid aes key size\");this.a=[d=a.slice(0),e=[]];for(a=b;a<4*b+28;a++){c=d[a-1];if(a%b===0||b===8&&a%b===4){c=f[c>>>24]<<24^f[c>>16&255]<<16^f[c>>8&255]<<8^f[c&255];if(a%b===0){c=c<<8^c>>>24^h<<24;h=h<<1^(h>>7)*283}}d[a]=d[a-b]^c}for(b=0;a;b++,a--){c=d[b&3?a:a-4];e[b]=a<=4||b<4?c:g[0][f[c>>>24]]^g[1][f[c>>16&255]]^g[2][f[c>>8&255]]^\n\
+g[3][f[c&255]]}};\n\
+sjcl.cipher.aes.prototype={encrypt:function(a){return this.H(a,0)},decrypt:function(a){return this.H(a,1)},h:[[[],[],[],[],[]],[[],[],[],[],[]]],w:function(){var a=this.h[0],b=this.h[1],c=a[4],d=b[4],e,f,g,h=[],i=[],k,j,l,m;for(e=0;e<0x100;e++)i[(h[e]=e<<1^(e>>7)*283)^e]=e;for(f=g=0;!c[f];f^=k||1,g=i[g]||1){l=g^g<<1^g<<2^g<<3^g<<4;l=l>>8^l&255^99;c[f]=l;d[l]=f;j=h[e=h[k=h[f]]];m=j*0x1010101^e*0x10001^k*0x101^f*0x1010100;j=h[l]*0x101^l*0x1010100;for(e=0;e<4;e++){a[e][f]=j=j<<24^j>>>8;b[e][l]=m=m<<24^m>>>8}}for(e=\n\
+0;e<5;e++){a[e]=a[e].slice(0);b[e]=b[e].slice(0)}},H:function(a,b){if(a.length!==4)throw new sjcl.exception.invalid(\"invalid aes block size\");var c=this.a[b],d=a[0]^c[0],e=a[b?3:1]^c[1],f=a[2]^c[2];a=a[b?1:3]^c[3];var g,h,i,k=c.length/4-2,j,l=4,m=[0,0,0,0];g=this.h[b];var n=g[0],o=g[1],p=g[2],q=g[3],r=g[4];for(j=0;j<k;j++){g=n[d>>>24]^o[e>>16&255]^p[f>>8&255]^q[a&255]^c[l];h=n[e>>>24]^o[f>>16&255]^p[a>>8&255]^q[d&255]^c[l+1];i=n[f>>>24]^o[a>>16&255]^p[d>>8&255]^q[e&255]^c[l+2];a=n[a>>>24]^o[d>>16&\n\
+255]^p[e>>8&255]^q[f&255]^c[l+3];l+=4;d=g;e=h;f=i}for(j=0;j<4;j++){m[b?3&-j:j]=r[d>>>24]<<24^r[e>>16&255]<<16^r[f>>8&255]<<8^r[a&255]^c[l++];g=d;d=e;e=f;f=a;a=g}return m}};\n\
+sjcl.bitArray={bitSlice:function(a,b,c){a=sjcl.bitArray.P(a.slice(b/32),32-(b&31)).slice(1);return c===undefined?a:sjcl.bitArray.clamp(a,c-b)},concat:function(a,b){if(a.length===0||b.length===0)return a.concat(b);var c=a[a.length-1],d=sjcl.bitArray.getPartial(c);return d===32?a.concat(b):sjcl.bitArray.P(b,d,c|0,a.slice(0,a.length-1))},bitLength:function(a){var b=a.length;if(b===0)return 0;return(b-1)*32+sjcl.bitArray.getPartial(a[b-1])},clamp:function(a,b){if(a.length*32<b)return a;a=a.slice(0,Math.ceil(b/\n\
+32));var c=a.length;b&=31;if(c>0&&b)a[c-1]=sjcl.bitArray.partial(b,a[c-1]&2147483648>>b-1,1);return a},partial:function(a,b,c){if(a===32)return b;return(c?b|0:b<<32-a)+a*0x10000000000},getPartial:function(a){return Math.round(a/0x10000000000)||32},equal:function(a,b){if(sjcl.bitArray.bitLength(a)!==sjcl.bitArray.bitLength(b))return false;var c=0,d;for(d=0;d<a.length;d++)c|=a[d]^b[d];return c===0},P:function(a,b,c,d){var e;e=0;if(d===undefined)d=[];for(;b>=32;b-=32){d.push(c);c=0}if(b===0)return d.concat(a);\n\
+for(e=0;e<a.length;e++){d.push(c|a[e]>>>b);c=a[e]<<32-b}e=a.length?a[a.length-1]:0;a=sjcl.bitArray.getPartial(e);d.push(sjcl.bitArray.partial(b+a&31,b+a>32?c:d.pop(),1));return d},k:function(a,b){return[a[0]^b[0],a[1]^b[1],a[2]^b[2],a[3]^b[3]]}};\n\
+sjcl.codec.utf8String={fromBits:function(a){var b=\"\",c=sjcl.bitArray.bitLength(a),d,e;for(d=0;d<c/8;d++){if((d&3)===0)e=a[d/4];b+=String.fromCharCode(e>>>24);e<<=8}return decodeURIComponent(escape(b))},toBits:function(a){a=unescape(encodeURIComponent(a));var b=[],c,d=0;for(c=0;c<a.length;c++){d=d<<8|a.charCodeAt(c);if((c&3)===3){b.push(d);d=0}}c&3&&b.push(sjcl.bitArray.partial(8*(c&3),d));return b}};\n\
+sjcl.codec.hex={fromBits:function(a){var b=\"\",c;for(c=0;c<a.length;c++)b+=((a[c]|0)+0xf00000000000).toString(16).substr(4);return b.substr(0,sjcl.bitArray.bitLength(a)/4)},toBits:function(a){var b,c=[],d;a=a.replace(/\\s|0x/g,\"\");d=a.length;a+=\"00000000\";for(b=0;b<a.length;b+=8)c.push(parseInt(a.substr(b,8),16)^0);return sjcl.bitArray.clamp(c,d*4)}};\n\
+sjcl.codec.base64={D:\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",fromBits:function(a,b){var c=\"\",d,e=0,f=sjcl.codec.base64.D,g=0,h=sjcl.bitArray.bitLength(a);for(d=0;c.length*6<h;){c+=f.charAt((g^a[d]>>>e)>>>26);if(e<6){g=a[d]<<6-e;e+=26;d++}else{g<<=6;e-=6}}for(;c.length&3&&!b;)c+=\"=\";return c},toBits:function(a){a=a.replace(/\\s|=/g,\"\");var b=[],c,d=0,e=sjcl.codec.base64.D,f=0,g;for(c=0;c<a.length;c++){g=e.indexOf(a.charAt(c));if(g<0)throw new sjcl.exception.invalid(\"this isn't base64!\");\n\
+if(d>26){d-=26;b.push(f^g>>>d);f=g<<32-d}else{d+=6;f^=g<<32-d}}d&56&&b.push(sjcl.bitArray.partial(d&56,f,1));return b}};sjcl.hash.sha256=function(a){this.a[0]||this.w();if(a){this.n=a.n.slice(0);this.i=a.i.slice(0);this.e=a.e}else this.reset()};sjcl.hash.sha256.hash=function(a){return(new sjcl.hash.sha256).update(a).finalize()};\n\
+sjcl.hash.sha256.prototype={blockSize:512,reset:function(){this.n=this.N.slice(0);this.i=[];this.e=0;return this},update:function(a){if(typeof a===\"string\")a=sjcl.codec.utf8String.toBits(a);var b,c=this.i=sjcl.bitArray.concat(this.i,a);b=this.e;a=this.e=b+sjcl.bitArray.bitLength(a);for(b=512+b&-512;b<=a;b+=512)this.C(c.splice(0,16));return this},finalize:function(){var a,b=this.i,c=this.n;b=sjcl.bitArray.concat(b,[sjcl.bitArray.partial(1,1)]);for(a=b.length+2;a&15;a++)b.push(0);b.push(Math.floor(this.e/\n\
+4294967296));for(b.push(this.e|0);b.length;)this.C(b.splice(0,16));this.reset();return c},N:[],a:[],w:function(){function a(e){return(e-Math.floor(e))*0x100000000|0}var b=0,c=2,d;a:for(;b<64;c++){for(d=2;d*d<=c;d++)if(c%d===0)continue a;if(b<8)this.N[b]=a(Math.pow(c,0.5));this.a[b]=a(Math.pow(c,1/3));b++}},C:function(a){var b,c,d=a.slice(0),e=this.n,f=this.a,g=e[0],h=e[1],i=e[2],k=e[3],j=e[4],l=e[5],m=e[6],n=e[7];for(a=0;a<64;a++){if(a<16)b=d[a];else{b=d[a+1&15];c=d[a+14&15];b=d[a&15]=(b>>>7^b>>>18^\n\
+b>>>3^b<<25^b<<14)+(c>>>17^c>>>19^c>>>10^c<<15^c<<13)+d[a&15]+d[a+9&15]|0}b=b+n+(j>>>6^j>>>11^j>>>25^j<<26^j<<21^j<<7)+(m^j&(l^m))+f[a];n=m;m=l;l=j;j=k+b|0;k=i;i=h;h=g;g=b+(h&i^k&(h^i))+(h>>>2^h>>>13^h>>>22^h<<30^h<<19^h<<10)|0}e[0]=e[0]+g|0;e[1]=e[1]+h|0;e[2]=e[2]+i|0;e[3]=e[3]+k|0;e[4]=e[4]+j|0;e[5]=e[5]+l|0;e[6]=e[6]+m|0;e[7]=e[7]+n|0}};\n\
+sjcl.mode.ccm={name:\"ccm\",encrypt:function(a,b,c,d,e){var f,g=b.slice(0),h=sjcl.bitArray,i=h.bitLength(c)/8,k=h.bitLength(g)/8;e=e||64;d=d||[];if(i<7)throw new sjcl.exception.invalid(\"ccm: iv must be at least 7 bytes\");for(f=2;f<4&&k>>>8*f;f++);if(f<15-i)f=15-i;c=h.clamp(c,8*(15-f));b=sjcl.mode.ccm.G(a,b,c,d,e,f);g=sjcl.mode.ccm.I(a,g,c,b,e,f);return h.concat(g.data,g.tag)},decrypt:function(a,b,c,d,e){e=e||64;d=d||[];var f=sjcl.bitArray,g=f.bitLength(c)/8,h=f.bitLength(b),i=f.clamp(b,h-e),k=f.bitSlice(b,\n\
+h-e);h=(h-e)/8;if(g<7)throw new sjcl.exception.invalid(\"ccm: iv must be at least 7 bytes\");for(b=2;b<4&&h>>>8*b;b++);if(b<15-g)b=15-g;c=f.clamp(c,8*(15-b));i=sjcl.mode.ccm.I(a,i,c,k,e,b);a=sjcl.mode.ccm.G(a,i.data,c,d,e,b);if(!f.equal(i.tag,a))throw new sjcl.exception.corrupt(\"ccm: tag doesn't match\");return i.data},G:function(a,b,c,d,e,f){var g=[],h=sjcl.bitArray,i=h.k;e/=8;if(e%2||e<4||e>16)throw new sjcl.exception.invalid(\"ccm: invalid tag length\");if(d.length>0xffffffff||b.length>0xffffffff)throw new sjcl.exception.bug(\"ccm: can't deal with 4GiB or more data\");\n\
+f=[h.partial(8,(d.length?64:0)|e-2<<2|f-1)];f=h.concat(f,c);f[3]|=h.bitLength(b)/8;f=a.encrypt(f);if(d.length){c=h.bitLength(d)/8;if(c<=65279)g=[h.partial(16,c)];else if(c<=0xffffffff)g=h.concat([h.partial(16,65534)],[c]);g=h.concat(g,d);for(d=0;d<g.length;d+=4)f=a.encrypt(i(f,g.slice(d,d+4)))}for(d=0;d<b.length;d+=4)f=a.encrypt(i(f,b.slice(d,d+4)));return h.clamp(f,e*8)},I:function(a,b,c,d,e,f){var g,h=sjcl.bitArray;g=h.k;var i=b.length,k=h.bitLength(b);c=h.concat([h.partial(8,f-1)],c).concat([0,\n\
+0,0]).slice(0,4);d=h.bitSlice(g(d,a.encrypt(c)),0,e);if(!i)return{tag:d,data:[]};for(g=0;g<i;g+=4){c[3]++;e=a.encrypt(c);b[g]^=e[0];b[g+1]^=e[1];b[g+2]^=e[2];b[g+3]^=e[3]}return{tag:d,data:h.clamp(b,k)}}};\n\
+sjcl.mode.ocb2={name:\"ocb2\",encrypt:function(a,b,c,d,e,f){if(sjcl.bitArray.bitLength(c)!==128)throw new sjcl.exception.invalid(\"ocb iv must be 128 bits\");var g,h=sjcl.mode.ocb2.A,i=sjcl.bitArray,k=i.k,j=[0,0,0,0];c=h(a.encrypt(c));var l,m=[];d=d||[];e=e||64;for(g=0;g+4<b.length;g+=4){l=b.slice(g,g+4);j=k(j,l);m=m.concat(k(c,a.encrypt(k(c,l))));c=h(c)}l=b.slice(g);b=i.bitLength(l);g=a.encrypt(k(c,[0,0,0,b]));l=i.clamp(k(l,g),b);j=k(j,k(l,g));j=a.encrypt(k(j,k(c,h(c))));if(d.length)j=k(j,f?d:sjcl.mode.ocb2.pmac(a,\n\
+d));return m.concat(i.concat(l,i.clamp(j,e)))},decrypt:function(a,b,c,d,e,f){if(sjcl.bitArray.bitLength(c)!==128)throw new sjcl.exception.invalid(\"ocb iv must be 128 bits\");e=e||64;var g=sjcl.mode.ocb2.A,h=sjcl.bitArray,i=h.k,k=[0,0,0,0],j=g(a.encrypt(c)),l,m,n=sjcl.bitArray.bitLength(b)-e,o=[];d=d||[];for(c=0;c+4<n/32;c+=4){l=i(j,a.decrypt(i(j,b.slice(c,c+4))));k=i(k,l);o=o.concat(l);j=g(j)}m=n-c*32;l=a.encrypt(i(j,[0,0,0,m]));l=i(l,h.clamp(b.slice(c),m));k=i(k,l);k=a.encrypt(i(k,i(j,g(j))));if(d.length)k=\n\
+i(k,f?d:sjcl.mode.ocb2.pmac(a,d));if(!h.equal(h.clamp(k,e),h.bitSlice(b,n)))throw new sjcl.exception.corrupt(\"ocb: tag doesn't match\");return o.concat(h.clamp(l,m))},pmac:function(a,b){var c,d=sjcl.mode.ocb2.A,e=sjcl.bitArray,f=e.k,g=[0,0,0,0],h=a.encrypt([0,0,0,0]);h=f(h,d(d(h)));for(c=0;c+4<b.length;c+=4){h=d(h);g=f(g,a.encrypt(f(h,b.slice(c,c+4))))}b=b.slice(c);if(e.bitLength(b)<128){h=f(h,d(h));b=e.concat(b,[2147483648|0])}g=f(g,b);return a.encrypt(f(d(f(h,d(h))),g))},A:function(a){return[a[0]<<\n\
+1^a[1]>>>31,a[1]<<1^a[2]>>>31,a[2]<<1^a[3]>>>31,a[3]<<1^(a[0]>>>31)*135]}};sjcl.misc.hmac=function(a,b){this.M=b=b||sjcl.hash.sha256;var c=[[],[]],d=b.prototype.blockSize/32;this.l=[new b,new b];if(a.length>d)a=b.hash(a);for(b=0;b<d;b++){c[0][b]=a[b]^909522486;c[1][b]=a[b]^1549556828}this.l[0].update(c[0]);this.l[1].update(c[1])};sjcl.misc.hmac.prototype.encrypt=sjcl.misc.hmac.prototype.mac=function(a,b){a=(new this.M(this.l[0])).update(a,b).finalize();return(new this.M(this.l[1])).update(a).finalize()};\n\
+sjcl.misc.pbkdf2=function(a,b,c,d,e){c=c||1E3;if(d<0||c<0)throw sjcl.exception.invalid(\"invalid params to pbkdf2\");if(typeof a===\"string\")a=sjcl.codec.utf8String.toBits(a);e=e||sjcl.misc.hmac;a=new e(a);var f,g,h,i,k=[],j=sjcl.bitArray;for(i=1;32*k.length<(d||1);i++){e=f=a.encrypt(j.concat(b,[i]));for(g=1;g<c;g++){f=a.encrypt(f);for(h=0;h<f.length;h++)e[h]^=f[h]}k=k.concat(e)}if(d)k=j.clamp(k,d);return k};\n\
+sjcl.random={randomWords:function(a,b){var c=[];b=this.isReady(b);var d;if(b===0)throw new sjcl.exception.notready(\"generator isn't seeded\");else b&2&&this.U(!(b&1));for(b=0;b<a;b+=4){(b+1)%0x10000===0&&this.L();d=this.u();c.push(d[0],d[1],d[2],d[3])}this.L();return c.slice(0,a)},setDefaultParanoia:function(a){this.t=a},addEntropy:function(a,b,c){c=c||\"user\";var d,e,f=(new Date).valueOf(),g=this.q[c],h=this.isReady();d=this.F[c];if(d===undefined)d=this.F[c]=this.R++;if(g===undefined)g=this.q[c]=0;this.q[c]=\n\
+(this.q[c]+1)%this.b.length;switch(typeof a){case \"number\":break;case \"object\":if(b===undefined)for(c=b=0;c<a.length;c++)for(e=a[c];e>0;){b++;e>>>=1}this.b[g].update([d,this.J++,2,b,f,a.length].concat(a));break;case \"string\":if(b===undefined)b=a.length;this.b[g].update([d,this.J++,3,b,f,a.length]);this.b[g].update(a);break;default:throw new sjcl.exception.bug(\"random: addEntropy only supports number, array or string\");}this.j[g]+=b;this.f+=b;if(h===0){this.isReady()!==0&&this.K(\"seeded\",Math.max(this.g,\n\
+this.f));this.K(\"progress\",this.getProgress())}},isReady:function(a){a=this.B[a!==undefined?a:this.t];return this.g&&this.g>=a?this.j[0]>80&&(new Date).valueOf()>this.O?3:1:this.f>=a?2:0},getProgress:function(a){a=this.B[a?a:this.t];return this.g>=a?1[\"0\"]:this.f>a?1[\"0\"]:this.f/a},startCollectors:function(){if(!this.m){if(window.addEventListener){window.addEventListener(\"load\",this.o,false);window.addEventListener(\"mousemove\",this.p,false)}else if(document.attachEvent){document.attachEvent(\"onload\",\n\
+this.o);document.attachEvent(\"onmousemove\",this.p)}else throw new sjcl.exception.bug(\"can't attach event\");this.m=true}},stopCollectors:function(){if(this.m){if(window.removeEventListener){window.removeEventListener(\"load\",this.o);window.removeEventListener(\"mousemove\",this.p)}else if(window.detachEvent){window.detachEvent(\"onload\",this.o);window.detachEvent(\"onmousemove\",this.p)}this.m=false}},addEventListener:function(a,b){this.r[a][this.Q++]=b},removeEventListener:function(a,b){var c;a=this.r[a];\n\
+var d=[];for(c in a)a.hasOwnProperty[c]&&a[c]===b&&d.push(c);for(b=0;b<d.length;b++){c=d[b];delete a[c]}},b:[new sjcl.hash.sha256],j:[0],z:0,q:{},J:0,F:{},R:0,g:0,f:0,O:0,a:[0,0,0,0,0,0,0,0],d:[0,0,0,0],s:undefined,t:6,m:false,r:{progress:{},seeded:{}},Q:0,B:[0,48,64,96,128,192,0x100,384,512,768,1024],u:function(){for(var a=0;a<4;a++){this.d[a]=this.d[a]+1|0;if(this.d[a])break}return this.s.encrypt(this.d)},L:function(){this.a=this.u().concat(this.u());this.s=new sjcl.cipher.aes(this.a)},T:function(a){this.a=\n\
+sjcl.hash.sha256.hash(this.a.concat(a));this.s=new sjcl.cipher.aes(this.a);for(a=0;a<4;a++){this.d[a]=this.d[a]+1|0;if(this.d[a])break}},U:function(a){var b=[],c=0,d;this.O=b[0]=(new Date).valueOf()+3E4;for(d=0;d<16;d++)b.push(Math.random()*0x100000000|0);for(d=0;d<this.b.length;d++){b=b.concat(this.b[d].finalize());c+=this.j[d];this.j[d]=0;if(!a&&this.z&1<<d)break}if(this.z>=1<<this.b.length){this.b.push(new sjcl.hash.sha256);this.j.push(0)}this.f-=c;if(c>this.g)this.g=c;this.z++;this.T(b)},p:function(a){sjcl.random.addEntropy([a.x||\n\
+a.clientX||a.offsetX,a.y||a.clientY||a.offsetY],2,\"mouse\")},o:function(){sjcl.random.addEntropy(new Date,2,\"loadtime\")},K:function(a,b){var c;a=sjcl.random.r[a];var d=[];for(c in a)a.hasOwnProperty(c)&&d.push(a[c]);for(c=0;c<d.length;c++)d[c](b)}};\n\
+sjcl.json={defaults:{v:1,iter:1E3,ks:128,ts:64,mode:\"ccm\",adata:\"\",cipher:\"aes\"},encrypt:function(a,b,c,d){c=c||{};d=d||{};var e=sjcl.json,f=e.c({iv:sjcl.random.randomWords(4,0)},e.defaults);e.c(f,c);if(typeof f.salt===\"string\")f.salt=sjcl.codec.base64.toBits(f.salt);if(typeof f.iv===\"string\")f.iv=sjcl.codec.base64.toBits(f.iv);if(!sjcl.mode[f.mode]||!sjcl.cipher[f.cipher]||typeof a===\"string\"&&f.iter<=100||f.ts!==64&&f.ts!==96&&f.ts!==128||f.ks!==128&&f.ks!==192&&f.ks!==0x100||f.iv.length<2||f.iv.length>\n\
+4)throw new sjcl.exception.invalid(\"json encrypt: invalid parameters\");if(typeof a===\"string\"){c=sjcl.misc.cachedPbkdf2(a,f);a=c.key.slice(0,f.ks/32);f.salt=c.salt}if(typeof b===\"string\")b=sjcl.codec.utf8String.toBits(b);c=new sjcl.cipher[f.cipher](a);e.c(d,f);d.key=a;f.ct=sjcl.mode[f.mode].encrypt(c,b,f.iv,f.adata,f.tag);return e.encode(e.V(f,e.defaults))},decrypt:function(a,b,c,d){c=c||{};d=d||{};var e=sjcl.json;b=e.c(e.c(e.c({},e.defaults),e.decode(b)),c,true);if(typeof b.salt===\"string\")b.salt=\n\
+sjcl.codec.base64.toBits(b.salt);if(typeof b.iv===\"string\")b.iv=sjcl.codec.base64.toBits(b.iv);if(!sjcl.mode[b.mode]||!sjcl.cipher[b.cipher]||typeof a===\"string\"&&b.iter<=100||b.ts!==64&&b.ts!==96&&b.ts!==128||b.ks!==128&&b.ks!==192&&b.ks!==0x100||!b.iv||b.iv.length<2||b.iv.length>4)throw new sjcl.exception.invalid(\"json decrypt: invalid parameters\");if(typeof a===\"string\"){c=sjcl.misc.cachedPbkdf2(a,b);a=c.key.slice(0,b.ks/32);b.salt=c.salt}c=new sjcl.cipher[b.cipher](a);c=sjcl.mode[b.mode].decrypt(c,\n\
+b.ct,b.iv,b.adata,b.tag);e.c(d,b);d.key=a;return sjcl.codec.utf8String.fromBits(c)},encode:function(a){var b,c=\"{\",d=\"\";for(b in a)if(a.hasOwnProperty(b)){if(!b.match(/^[a-z0-9]+$/i))throw new sjcl.exception.invalid(\"json encode: invalid property name\");c+=d+b+\":\";d=\",\";switch(typeof a[b]){case \"number\":case \"boolean\":c+=a[b];break;case \"string\":c+='\"'+escape(a[b])+'\"';break;case \"object\":c+='\"'+sjcl.codec.base64.fromBits(a[b],1)+'\"';break;default:throw new sjcl.exception.bug(\"json encode: unsupported type\");\n\
+}}return c+\"}\"},decode:function(a){a=a.replace(/\\s/g,\"\");if(!a.match(/^\\{.*\\}$/))throw new sjcl.exception.invalid(\"json decode: this isn't json!\");a=a.replace(/^\\{|\\}$/g,\"\").split(/,/);var b={},c,d;for(c=0;c<a.length;c++){if(!(d=a[c].match(/^([a-z][a-z0-9]*):(?:(\\d+)|\"([a-z0-9+\\/%*_.@=\\-]*)\")$/i)))throw new sjcl.exception.invalid(\"json decode: this isn't json!\");b[d[1]]=d[2]?parseInt(d[2],10):d[1].match(/^(ct|salt|iv)$/)?sjcl.codec.base64.toBits(d[3]):unescape(d[3])}return b},c:function(a,b,c){if(a===\n\
+undefined)a={};if(b===undefined)return a;var d;for(d in b)if(b.hasOwnProperty(d)){if(c&&a[d]!==undefined&&a[d]!==b[d])throw new sjcl.exception.invalid(\"required parameter overridden\");a[d]=b[d]}return a},V:function(a,b){var c={},d;for(d in a)if(a.hasOwnProperty(d)&&a[d]!==b[d])c[d]=a[d];return c},W:function(a,b){var c={},d;for(d=0;d<b.length;d++)if(a[b[d]]!==undefined)c[b[d]]=a[b[d]];return c}};sjcl.encrypt=sjcl.json.encrypt;sjcl.decrypt=sjcl.json.decrypt;sjcl.misc.S={};\n\
+sjcl.misc.cachedPbkdf2=function(a,b){var c=sjcl.misc.S,d;b=b||{};d=b.iter||1E3;c=c[a]=c[a]||{};d=c[d]=c[d]||{firstSalt:b.salt&&b.salt.length?b.salt.slice(0):sjcl.random.randomWords(2,0)};c=b.salt===undefined?d.firstSalt:b.salt;d[c]=d[c]||sjcl.misc.pbkdf2(a,c,b.iter);return{key:d[c].slice(0),salt:c.slice(0)}};\n\
+\n\
+\n\
+var browserUtil = {\n\
+ isRhino: true,\n\
+ \n\
+ pauseAndThen: function (cb) { cb(); },\n\
+ \n\
+ cpsIterate: function (f, start, end, pause, callback) {\n\
+ function go() {\n\
+ var called = false;\n\
+ if (start >= end) {\n\
+ callback && callback();\n\
+ } else {\n\
+ f(start, function () {\n\
+ if (!called) { called = true; start++; go(); }\n\
+ });\n\
+ }\n\
+ }\n\
+ go (start);\n\
+ },\n\
+ \n\
+ cpsMap: function (map, list, pause, callback) {\n\
+ browserUtil.cpsIterate(function (i, cb) { map(list[i], i, list.length, cb); },\n\
+ 0, list.length, pause, callback);\n\
+ },\n\
+\n\
+ loadScripts: function(scriptNames, callback) {\n\
+ for (i=0; i<scriptNames.length; i++) {\n\
+ load(scriptNames[i]);\n\
+ callback && callback();\n\
+ }\n\
+ },\n\
+ \n\
+ write: function(type, message) {\n\
+ print(message);\n\
+ return { update: function (type2, message2) {\n\
+ if (type2 === 'pass') { print(\" + \" + message2); }\n\
+ else if (type2 === 'unimplemented') { print(\" ? \" + message2); }\n\
+ else { print(\" - \" + message2); }\n\
+ }};\n\
+ },\n\
+ \n\
+ writeNewline: function () { print(\"\"); },\n\
+ \n\
+ status: function(message) {}\n\
+};\n\
+\n\
+sjcl.test = { vector: {}, all: {} };\n\
+\n\
+/* A bit of a hack. Because sjcl.test will be reloaded several times\n\
+ * for different variants of sjcl, but browserUtils will not, this\n\
+ * variable keeps a permanent record of whether anything has failed.\n\
+ */\n\
+if (typeof browserUtil.allPassed === 'undefined') {\n\
+ browserUtil.allPassed = true;\n\
+}\n\
+\n\
+sjcl.test.TestCase = function(name, doRun) {\n\
+ this.doRun = doRun;\n\
+ this.name = name;\n\
+ this.passes = 0;\n\
+ this.failures = 0;\n\
+ this.isUnimplemented = false;\n\
+ sjcl.test.all[name] = this;\n\
+};\n\
+\n\
+sjcl.test.TestCase.prototype = {\n\
+ /** Pass some subtest of this test */\n\
+ pass: function () { this.passes ++; },\n\
+ \n\
+ /** Fail some subtest of this test */\n\
+ fail: function (message) {\n\
+ if (message !== undefined) {\n\
+ this.log(\"fail\", \"*** FAIL *** \" + this.name + \": \" + message);\n\
+ } else {\n\
+ this.log(\"fail\", \"*** FAIL *** \" + this.name);\n\
+ }\n\
+ this.failures ++;\n\
+ browserUtil.allPassed = false;\n\
+ },\n\
+ \n\
+ unimplemented: function() {\n\
+ this.isUnimplemented = true;\n\
+ },\n\
+ \n\
+ /** Log a message to the console */\n\
+ log: browserUtil.write,\n\
+ \n\
+ /** Require that the first argument is true; otherwise fail with the given message */\n\
+ require: function (bool, message) {\n\
+ if (bool) {\n\
+ this.pass();\n\
+ } else if (message !== undefined) {\n\
+ this.fail(message);\n\
+ } else {\n\
+ this.fail(\"requirement failed\");\n\
+ }\n\
+ },\n\
+\n\
+ /** Pause and then take the specified action. */\n\
+ pauseAndThen: browserUtil.pauseAndThen,\n\
+ \n\
+ /** Continuation-passing-style iteration */\n\
+ cpsIterate: browserUtil.cpsIterate,\n\
+ \n\
+ /** Continuation-passing-style iteration */\n\
+ cpsMap: browserUtil.cpsMap,\n\
+\n\
+ /** Report the results of this test. */\n\
+ report: function (repo) {\n\
+ var t = (new Date()).valueOf() - this.startTime;\n\
+ if (this.failures !== 0) {\n\
+ repo.update(\"fail\", \"failed \" + this.failures + \" / \" +\n\
+ (this.passes + this.failures) + \" tests. (\" + t + \" ms)\");\n\
+ } else if (this.passes === 1) {\n\
+ repo.update(\"pass\", \"passed. (\" + t + \" ms)\");\n\
+ } else if (this.isUnimplemented) {\n\
+ repo.update(\"unimplemented\", \"unimplemented\");\n\
+ } else {\n\
+ repo.update(\"pass\", \"passed all \" + this.passes + \" tests. (\" + t + \" ms)\");\n\
+ }\n\
+ browserUtil.writeNewline();\n\
+ },\n\
+ \n\
+\n\
+ /** Run the test. */\n\
+ run: function (ntests, i, cb) {\n\
+ var thiz = this;\n\
+ this.startTime = (new Date()).valueOf();\n\
+ this.pauseAndThen(function () {\n\
+ thiz.doRun(function () {\n\
+ cb && cb();\n\
+ })\n\
+ });\n\
+ }\n\
+};\n\
+\n\
+// pass a list of tests to run, or pass nothing and it will run them all\n\
+sjcl.test.run = function (tests, callback) {\n\
+ var t;\n\
+ \n\
+ if (tests === undefined || tests.length == 0) {\n\
+ tests = [];\n\
+ for (t in sjcl.test.all) {\n\
+ if (sjcl.test.all.hasOwnProperty(t)) {\n\
+ tests.push(t);\n\
+ }\n\
+ }\n\
+ }\n\
+ \n\
+ browserUtil.cpsMap(function (t, i, n, cb) {\n\
+ sjcl.test.all[tests[i]].run(n, i+1, cb);\n\
+ }, tests, true, callback);\n\
+};\n\
+\n\
+/* Several test scripts rely on sjcl.codec.hex to parse their test\n\
+ * vectors, but we are not guaranteed that sjcl.codec.hex is\n\
+ * implemented.\n\
+ */\n\
+sjcl.codec = sjcl.codec || {};\n\
+sjcl.codec.hex = sjcl.codec.hex ||\n\
+{\n\
+ fromBits: function (arr) {\n\
+ var out = \"\", i, x;\n\
+ for (i=0; i<arr.length; i++) {\n\
+ out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);\n\
+ }\n\
+ return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, \"$1 \");\n\
+ },\n\
+ toBits: function (str) {\n\
+ var i, out=[], len;\n\
+ str = str.replace(/\\s|0x/g, \"\");\n\
+ len = str.length;\n\
+ str = str + \"00000000\";\n\
+ for (i=0; i<str.length; i+=8) {\n\
+ out.push(parseInt(str.substr(i,8),16)^0);\n\
+ }\n\
+ return sjcl.bitArray.clamp(out, len*4);\n\
+ }\n\
+};\n\
+\n\
+\n\
+\n\
+TalosContentProfiler.subtestStart('stanford-crypto-pbkdf2', true).then(() => {\n\
+ var _sunSpiderStartDate = new Date();\n\
+\n\
+ /* From http://www.cryptosys.net/manapi/api_PBE_Kdf2.html */\n\
+\n\
+ new sjcl.test.TestCase(\"PBKDF2\", function (cb) {\n\
+ if (!sjcl.misc.pbkdf2 || !sjcl.misc.hmac || !sjcl.hash.sha256) {\n\
+ this.unimplemented();\n\
+ cb && cb();\n\
+ return;\n\
+ }\n\
+\n\
+ //XXX use 8 inputs, not 8 iterations\n\
+ for (var index = 0; index < 8; index++) { \n\
+ var h = sjcl.codec.hex, password = \"password\", salt = \"78 57 8E 5A 5D 63 CB 06\", count = 2048, output,\n\
+ goodOutput = \"97b5a91d35af542324881315c4f849e327c4707d1bc9d322\";\n\
+ output = sjcl.misc.pbkdf2(password, h.toBits(salt), count);\n\
+ output = h.fromBits(output);\n\
+ this.require(output.substr(0,goodOutput.length) == goodOutput);\n\
+ cb && cb();\n\
+ }\n\
+ });\n\
+ sjcl.test.run();\n\
+\n\
+\n\
+ var _sunSpiderInterval = new Date() - _sunSpiderStartDate;\n\
+ TalosContentProfiler.subtestEnd('stanford-crypto-pbkdf2', true).then(() => {\n\
+ record(_sunSpiderInterval);\n\
+ });\n\
+\n\
+});\n\
+</script>\n\
+\n\
+\n\
+</body>\n\
+</html>\n\
+", "<!DOCTYPE html>\n\
+<head>\n\
+\n\
+<meta charset=utf8>\n\
+\n\
+<!--\n\
+ Copyright (C) 2007 Apple Inc. All rights reserved.\n\
+\n\
+ Redistribution and use in source and binary forms, with or without\n\
+ modification, are permitted provided that the following conditions\n\
+ are met:\n\
+ 1. Redistributions of source code must retain the above copyright\n\
+ notice, this list of conditions and the following disclaimer.\n\
+ 2. Redistributions in binary form must reproduce the above copyright\n\
+ notice, this list of conditions and the following disclaimer in the\n\
+ documentation and/or other materials provided with the distribution.\n\
+\n\
+ THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY\n\
+ EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n\
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n\
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR\n\
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n\
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n\
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n\
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n\
+ OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n\
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \n\
+-->\n\
+\n\
+<title>SunSpider stanford-crypto-sha256-iterative</title>\n\
+<link rel=\"stylesheet\" href=\"../kraken.css\">\n\
+</head>\n\
+\n\
+<body>\n\
+<h3>stanford-crypto-sha256-iterative</h3>\n\
+<div id=\"console\">\n\
+</div>\n\
+<script>\n\
+var TalosContentProfiler = parent.TalosContentProfiler;\n\
+function record(time) {\n\
+ document.getElementById(\"console\").innerHTML = time + \"ms\";\n\
+ if (window.parent) {\n\
+ parent.recordResult(time);\n\
+ }\n\
+}\n\
+\n\
+\"use strict\";\n\
+\n\
+var sjcl={cipher:{},hash:{},mode:{},misc:{},codec:{},exception:{corrupt:function(a){this.toString=function(){return\"CORRUPT: \"+this.message};this.message=a},invalid:function(a){this.toString=function(){return\"INVALID: \"+this.message};this.message=a},bug:function(a){this.toString=function(){return\"BUG: \"+this.message};this.message=a}}};\n\
+sjcl.cipher.aes=function(a){this.h[0][0][0]||this.w();var b,c,d,e,f=this.h[0][4],g=this.h[1];b=a.length;var h=1;if(b!==4&&b!==6&&b!==8)throw new sjcl.exception.invalid(\"invalid aes key size\");this.a=[d=a.slice(0),e=[]];for(a=b;a<4*b+28;a++){c=d[a-1];if(a%b===0||b===8&&a%b===4){c=f[c>>>24]<<24^f[c>>16&255]<<16^f[c>>8&255]<<8^f[c&255];if(a%b===0){c=c<<8^c>>>24^h<<24;h=h<<1^(h>>7)*283}}d[a]=d[a-b]^c}for(b=0;a;b++,a--){c=d[b&3?a:a-4];e[b]=a<=4||b<4?c:g[0][f[c>>>24]]^g[1][f[c>>16&255]]^g[2][f[c>>8&255]]^\n\
+g[3][f[c&255]]}};\n\
+sjcl.cipher.aes.prototype={encrypt:function(a){return this.H(a,0)},decrypt:function(a){return this.H(a,1)},h:[[[],[],[],[],[]],[[],[],[],[],[]]],w:function(){var a=this.h[0],b=this.h[1],c=a[4],d=b[4],e,f,g,h=[],i=[],k,j,l,m;for(e=0;e<0x100;e++)i[(h[e]=e<<1^(e>>7)*283)^e]=e;for(f=g=0;!c[f];f^=k||1,g=i[g]||1){l=g^g<<1^g<<2^g<<3^g<<4;l=l>>8^l&255^99;c[f]=l;d[l]=f;j=h[e=h[k=h[f]]];m=j*0x1010101^e*0x10001^k*0x101^f*0x1010100;j=h[l]*0x101^l*0x1010100;for(e=0;e<4;e++){a[e][f]=j=j<<24^j>>>8;b[e][l]=m=m<<24^m>>>8}}for(e=\n\
+0;e<5;e++){a[e]=a[e].slice(0);b[e]=b[e].slice(0)}},H:function(a,b){if(a.length!==4)throw new sjcl.exception.invalid(\"invalid aes block size\");var c=this.a[b],d=a[0]^c[0],e=a[b?3:1]^c[1],f=a[2]^c[2];a=a[b?1:3]^c[3];var g,h,i,k=c.length/4-2,j,l=4,m=[0,0,0,0];g=this.h[b];var n=g[0],o=g[1],p=g[2],q=g[3],r=g[4];for(j=0;j<k;j++){g=n[d>>>24]^o[e>>16&255]^p[f>>8&255]^q[a&255]^c[l];h=n[e>>>24]^o[f>>16&255]^p[a>>8&255]^q[d&255]^c[l+1];i=n[f>>>24]^o[a>>16&255]^p[d>>8&255]^q[e&255]^c[l+2];a=n[a>>>24]^o[d>>16&\n\
+255]^p[e>>8&255]^q[f&255]^c[l+3];l+=4;d=g;e=h;f=i}for(j=0;j<4;j++){m[b?3&-j:j]=r[d>>>24]<<24^r[e>>16&255]<<16^r[f>>8&255]<<8^r[a&255]^c[l++];g=d;d=e;e=f;f=a;a=g}return m}};\n\
+sjcl.bitArray={bitSlice:function(a,b,c){a=sjcl.bitArray.P(a.slice(b/32),32-(b&31)).slice(1);return c===undefined?a:sjcl.bitArray.clamp(a,c-b)},concat:function(a,b){if(a.length===0||b.length===0)return a.concat(b);var c=a[a.length-1],d=sjcl.bitArray.getPartial(c);return d===32?a.concat(b):sjcl.bitArray.P(b,d,c|0,a.slice(0,a.length-1))},bitLength:function(a){var b=a.length;if(b===0)return 0;return(b-1)*32+sjcl.bitArray.getPartial(a[b-1])},clamp:function(a,b){if(a.length*32<b)return a;a=a.slice(0,Math.ceil(b/\n\
+32));var c=a.length;b&=31;if(c>0&&b)a[c-1]=sjcl.bitArray.partial(b,a[c-1]&2147483648>>b-1,1);return a},partial:function(a,b,c){if(a===32)return b;return(c?b|0:b<<32-a)+a*0x10000000000},getPartial:function(a){return Math.round(a/0x10000000000)||32},equal:function(a,b){if(sjcl.bitArray.bitLength(a)!==sjcl.bitArray.bitLength(b))return false;var c=0,d;for(d=0;d<a.length;d++)c|=a[d]^b[d];return c===0},P:function(a,b,c,d){var e;e=0;if(d===undefined)d=[];for(;b>=32;b-=32){d.push(c);c=0}if(b===0)return d.concat(a);\n\
+for(e=0;e<a.length;e++){d.push(c|a[e]>>>b);c=a[e]<<32-b}e=a.length?a[a.length-1]:0;a=sjcl.bitArray.getPartial(e);d.push(sjcl.bitArray.partial(b+a&31,b+a>32?c:d.pop(),1));return d},k:function(a,b){return[a[0]^b[0],a[1]^b[1],a[2]^b[2],a[3]^b[3]]}};\n\
+sjcl.codec.utf8String={fromBits:function(a){var b=\"\",c=sjcl.bitArray.bitLength(a),d,e;for(d=0;d<c/8;d++){if((d&3)===0)e=a[d/4];b+=String.fromCharCode(e>>>24);e<<=8}return decodeURIComponent(escape(b))},toBits:function(a){a=unescape(encodeURIComponent(a));var b=[],c,d=0;for(c=0;c<a.length;c++){d=d<<8|a.charCodeAt(c);if((c&3)===3){b.push(d);d=0}}c&3&&b.push(sjcl.bitArray.partial(8*(c&3),d));return b}};\n\
+sjcl.codec.hex={fromBits:function(a){var b=\"\",c;for(c=0;c<a.length;c++)b+=((a[c]|0)+0xf00000000000).toString(16).substr(4);return b.substr(0,sjcl.bitArray.bitLength(a)/4)},toBits:function(a){var b,c=[],d;a=a.replace(/\\s|0x/g,\"\");d=a.length;a+=\"00000000\";for(b=0;b<a.length;b+=8)c.push(parseInt(a.substr(b,8),16)^0);return sjcl.bitArray.clamp(c,d*4)}};\n\
+sjcl.codec.base64={D:\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",fromBits:function(a,b){var c=\"\",d,e=0,f=sjcl.codec.base64.D,g=0,h=sjcl.bitArray.bitLength(a);for(d=0;c.length*6<h;){c+=f.charAt((g^a[d]>>>e)>>>26);if(e<6){g=a[d]<<6-e;e+=26;d++}else{g<<=6;e-=6}}for(;c.length&3&&!b;)c+=\"=\";return c},toBits:function(a){a=a.replace(/\\s|=/g,\"\");var b=[],c,d=0,e=sjcl.codec.base64.D,f=0,g;for(c=0;c<a.length;c++){g=e.indexOf(a.charAt(c));if(g<0)throw new sjcl.exception.invalid(\"this isn't base64!\");\n\
+if(d>26){d-=26;b.push(f^g>>>d);f=g<<32-d}else{d+=6;f^=g<<32-d}}d&56&&b.push(sjcl.bitArray.partial(d&56,f,1));return b}};sjcl.hash.sha256=function(a){this.a[0]||this.w();if(a){this.n=a.n.slice(0);this.i=a.i.slice(0);this.e=a.e}else this.reset()};sjcl.hash.sha256.hash=function(a){return(new sjcl.hash.sha256).update(a).finalize()};\n\
+sjcl.hash.sha256.prototype={blockSize:512,reset:function(){this.n=this.N.slice(0);this.i=[];this.e=0;return this},update:function(a){if(typeof a===\"string\")a=sjcl.codec.utf8String.toBits(a);var b,c=this.i=sjcl.bitArray.concat(this.i,a);b=this.e;a=this.e=b+sjcl.bitArray.bitLength(a);for(b=512+b&-512;b<=a;b+=512)this.C(c.splice(0,16));return this},finalize:function(){var a,b=this.i,c=this.n;b=sjcl.bitArray.concat(b,[sjcl.bitArray.partial(1,1)]);for(a=b.length+2;a&15;a++)b.push(0);b.push(Math.floor(this.e/\n\
+4294967296));for(b.push(this.e|0);b.length;)this.C(b.splice(0,16));this.reset();return c},N:[],a:[],w:function(){function a(e){return(e-Math.floor(e))*0x100000000|0}var b=0,c=2,d;a:for(;b<64;c++){for(d=2;d*d<=c;d++)if(c%d===0)continue a;if(b<8)this.N[b]=a(Math.pow(c,0.5));this.a[b]=a(Math.pow(c,1/3));b++}},C:function(a){var b,c,d=a.slice(0),e=this.n,f=this.a,g=e[0],h=e[1],i=e[2],k=e[3],j=e[4],l=e[5],m=e[6],n=e[7];for(a=0;a<64;a++){if(a<16)b=d[a];else{b=d[a+1&15];c=d[a+14&15];b=d[a&15]=(b>>>7^b>>>18^\n\
+b>>>3^b<<25^b<<14)+(c>>>17^c>>>19^c>>>10^c<<15^c<<13)+d[a&15]+d[a+9&15]|0}b=b+n+(j>>>6^j>>>11^j>>>25^j<<26^j<<21^j<<7)+(m^j&(l^m))+f[a];n=m;m=l;l=j;j=k+b|0;k=i;i=h;h=g;g=b+(h&i^k&(h^i))+(h>>>2^h>>>13^h>>>22^h<<30^h<<19^h<<10)|0}e[0]=e[0]+g|0;e[1]=e[1]+h|0;e[2]=e[2]+i|0;e[3]=e[3]+k|0;e[4]=e[4]+j|0;e[5]=e[5]+l|0;e[6]=e[6]+m|0;e[7]=e[7]+n|0}};\n\
+sjcl.mode.ccm={name:\"ccm\",encrypt:function(a,b,c,d,e){var f,g=b.slice(0),h=sjcl.bitArray,i=h.bitLength(c)/8,k=h.bitLength(g)/8;e=e||64;d=d||[];if(i<7)throw new sjcl.exception.invalid(\"ccm: iv must be at least 7 bytes\");for(f=2;f<4&&k>>>8*f;f++);if(f<15-i)f=15-i;c=h.clamp(c,8*(15-f));b=sjcl.mode.ccm.G(a,b,c,d,e,f);g=sjcl.mode.ccm.I(a,g,c,b,e,f);return h.concat(g.data,g.tag)},decrypt:function(a,b,c,d,e){e=e||64;d=d||[];var f=sjcl.bitArray,g=f.bitLength(c)/8,h=f.bitLength(b),i=f.clamp(b,h-e),k=f.bitSlice(b,\n\
+h-e);h=(h-e)/8;if(g<7)throw new sjcl.exception.invalid(\"ccm: iv must be at least 7 bytes\");for(b=2;b<4&&h>>>8*b;b++);if(b<15-g)b=15-g;c=f.clamp(c,8*(15-b));i=sjcl.mode.ccm.I(a,i,c,k,e,b);a=sjcl.mode.ccm.G(a,i.data,c,d,e,b);if(!f.equal(i.tag,a))throw new sjcl.exception.corrupt(\"ccm: tag doesn't match\");return i.data},G:function(a,b,c,d,e,f){var g=[],h=sjcl.bitArray,i=h.k;e/=8;if(e%2||e<4||e>16)throw new sjcl.exception.invalid(\"ccm: invalid tag length\");if(d.length>0xffffffff||b.length>0xffffffff)throw new sjcl.exception.bug(\"ccm: can't deal with 4GiB or more data\");\n\
+f=[h.partial(8,(d.length?64:0)|e-2<<2|f-1)];f=h.concat(f,c);f[3]|=h.bitLength(b)/8;f=a.encrypt(f);if(d.length){c=h.bitLength(d)/8;if(c<=65279)g=[h.partial(16,c)];else if(c<=0xffffffff)g=h.concat([h.partial(16,65534)],[c]);g=h.concat(g,d);for(d=0;d<g.length;d+=4)f=a.encrypt(i(f,g.slice(d,d+4)))}for(d=0;d<b.length;d+=4)f=a.encrypt(i(f,b.slice(d,d+4)));return h.clamp(f,e*8)},I:function(a,b,c,d,e,f){var g,h=sjcl.bitArray;g=h.k;var i=b.length,k=h.bitLength(b);c=h.concat([h.partial(8,f-1)],c).concat([0,\n\
+0,0]).slice(0,4);d=h.bitSlice(g(d,a.encrypt(c)),0,e);if(!i)return{tag:d,data:[]};for(g=0;g<i;g+=4){c[3]++;e=a.encrypt(c);b[g]^=e[0];b[g+1]^=e[1];b[g+2]^=e[2];b[g+3]^=e[3]}return{tag:d,data:h.clamp(b,k)}}};\n\
+sjcl.mode.ocb2={name:\"ocb2\",encrypt:function(a,b,c,d,e,f){if(sjcl.bitArray.bitLength(c)!==128)throw new sjcl.exception.invalid(\"ocb iv must be 128 bits\");var g,h=sjcl.mode.ocb2.A,i=sjcl.bitArray,k=i.k,j=[0,0,0,0];c=h(a.encrypt(c));var l,m=[];d=d||[];e=e||64;for(g=0;g+4<b.length;g+=4){l=b.slice(g,g+4);j=k(j,l);m=m.concat(k(c,a.encrypt(k(c,l))));c=h(c)}l=b.slice(g);b=i.bitLength(l);g=a.encrypt(k(c,[0,0,0,b]));l=i.clamp(k(l,g),b);j=k(j,k(l,g));j=a.encrypt(k(j,k(c,h(c))));if(d.length)j=k(j,f?d:sjcl.mode.ocb2.pmac(a,\n\
+d));return m.concat(i.concat(l,i.clamp(j,e)))},decrypt:function(a,b,c,d,e,f){if(sjcl.bitArray.bitLength(c)!==128)throw new sjcl.exception.invalid(\"ocb iv must be 128 bits\");e=e||64;var g=sjcl.mode.ocb2.A,h=sjcl.bitArray,i=h.k,k=[0,0,0,0],j=g(a.encrypt(c)),l,m,n=sjcl.bitArray.bitLength(b)-e,o=[];d=d||[];for(c=0;c+4<n/32;c+=4){l=i(j,a.decrypt(i(j,b.slice(c,c+4))));k=i(k,l);o=o.concat(l);j=g(j)}m=n-c*32;l=a.encrypt(i(j,[0,0,0,m]));l=i(l,h.clamp(b.slice(c),m));k=i(k,l);k=a.encrypt(i(k,i(j,g(j))));if(d.length)k=\n\
+i(k,f?d:sjcl.mode.ocb2.pmac(a,d));if(!h.equal(h.clamp(k,e),h.bitSlice(b,n)))throw new sjcl.exception.corrupt(\"ocb: tag doesn't match\");return o.concat(h.clamp(l,m))},pmac:function(a,b){var c,d=sjcl.mode.ocb2.A,e=sjcl.bitArray,f=e.k,g=[0,0,0,0],h=a.encrypt([0,0,0,0]);h=f(h,d(d(h)));for(c=0;c+4<b.length;c+=4){h=d(h);g=f(g,a.encrypt(f(h,b.slice(c,c+4))))}b=b.slice(c);if(e.bitLength(b)<128){h=f(h,d(h));b=e.concat(b,[2147483648|0])}g=f(g,b);return a.encrypt(f(d(f(h,d(h))),g))},A:function(a){return[a[0]<<\n\
+1^a[1]>>>31,a[1]<<1^a[2]>>>31,a[2]<<1^a[3]>>>31,a[3]<<1^(a[0]>>>31)*135]}};sjcl.misc.hmac=function(a,b){this.M=b=b||sjcl.hash.sha256;var c=[[],[]],d=b.prototype.blockSize/32;this.l=[new b,new b];if(a.length>d)a=b.hash(a);for(b=0;b<d;b++){c[0][b]=a[b]^909522486;c[1][b]=a[b]^1549556828}this.l[0].update(c[0]);this.l[1].update(c[1])};sjcl.misc.hmac.prototype.encrypt=sjcl.misc.hmac.prototype.mac=function(a,b){a=(new this.M(this.l[0])).update(a,b).finalize();return(new this.M(this.l[1])).update(a).finalize()};\n\
+sjcl.misc.pbkdf2=function(a,b,c,d,e){c=c||1E3;if(d<0||c<0)throw sjcl.exception.invalid(\"invalid params to pbkdf2\");if(typeof a===\"string\")a=sjcl.codec.utf8String.toBits(a);e=e||sjcl.misc.hmac;a=new e(a);var f,g,h,i,k=[],j=sjcl.bitArray;for(i=1;32*k.length<(d||1);i++){e=f=a.encrypt(j.concat(b,[i]));for(g=1;g<c;g++){f=a.encrypt(f);for(h=0;h<f.length;h++)e[h]^=f[h]}k=k.concat(e)}if(d)k=j.clamp(k,d);return k};\n\
+sjcl.random={randomWords:function(a,b){var c=[];b=this.isReady(b);var d;if(b===0)throw new sjcl.exception.notready(\"generator isn't seeded\");else b&2&&this.U(!(b&1));for(b=0;b<a;b+=4){(b+1)%0x10000===0&&this.L();d=this.u();c.push(d[0],d[1],d[2],d[3])}this.L();return c.slice(0,a)},setDefaultParanoia:function(a){this.t=a},addEntropy:function(a,b,c){c=c||\"user\";var d,e,f=(new Date).valueOf(),g=this.q[c],h=this.isReady();d=this.F[c];if(d===undefined)d=this.F[c]=this.R++;if(g===undefined)g=this.q[c]=0;this.q[c]=\n\
+(this.q[c]+1)%this.b.length;switch(typeof a){case \"number\":break;case \"object\":if(b===undefined)for(c=b=0;c<a.length;c++)for(e=a[c];e>0;){b++;e>>>=1}this.b[g].update([d,this.J++,2,b,f,a.length].concat(a));break;case \"string\":if(b===undefined)b=a.length;this.b[g].update([d,this.J++,3,b,f,a.length]);this.b[g].update(a);break;default:throw new sjcl.exception.bug(\"random: addEntropy only supports number, array or string\");}this.j[g]+=b;this.f+=b;if(h===0){this.isReady()!==0&&this.K(\"seeded\",Math.max(this.g,\n\
+this.f));this.K(\"progress\",this.getProgress())}},isReady:function(a){a=this.B[a!==undefined?a:this.t];return this.g&&this.g>=a?this.j[0]>80&&(new Date).valueOf()>this.O?3:1:this.f>=a?2:0},getProgress:function(a){a=this.B[a?a:this.t];return this.g>=a?1[\"0\"]:this.f>a?1[\"0\"]:this.f/a},startCollectors:function(){if(!this.m){if(window.addEventListener){window.addEventListener(\"load\",this.o,false);window.addEventListener(\"mousemove\",this.p,false)}else if(document.attachEvent){document.attachEvent(\"onload\",\n\
+this.o);document.attachEvent(\"onmousemove\",this.p)}else throw new sjcl.exception.bug(\"can't attach event\");this.m=true}},stopCollectors:function(){if(this.m){if(window.removeEventListener){window.removeEventListener(\"load\",this.o);window.removeEventListener(\"mousemove\",this.p)}else if(window.detachEvent){window.detachEvent(\"onload\",this.o);window.detachEvent(\"onmousemove\",this.p)}this.m=false}},addEventListener:function(a,b){this.r[a][this.Q++]=b},removeEventListener:function(a,b){var c;a=this.r[a];\n\
+var d=[];for(c in a)a.hasOwnProperty[c]&&a[c]===b&&d.push(c);for(b=0;b<d.length;b++){c=d[b];delete a[c]}},b:[new sjcl.hash.sha256],j:[0],z:0,q:{},J:0,F:{},R:0,g:0,f:0,O:0,a:[0,0,0,0,0,0,0,0],d:[0,0,0,0],s:undefined,t:6,m:false,r:{progress:{},seeded:{}},Q:0,B:[0,48,64,96,128,192,0x100,384,512,768,1024],u:function(){for(var a=0;a<4;a++){this.d[a]=this.d[a]+1|0;if(this.d[a])break}return this.s.encrypt(this.d)},L:function(){this.a=this.u().concat(this.u());this.s=new sjcl.cipher.aes(this.a)},T:function(a){this.a=\n\
+sjcl.hash.sha256.hash(this.a.concat(a));this.s=new sjcl.cipher.aes(this.a);for(a=0;a<4;a++){this.d[a]=this.d[a]+1|0;if(this.d[a])break}},U:function(a){var b=[],c=0,d;this.O=b[0]=(new Date).valueOf()+3E4;for(d=0;d<16;d++)b.push(Math.random()*0x100000000|0);for(d=0;d<this.b.length;d++){b=b.concat(this.b[d].finalize());c+=this.j[d];this.j[d]=0;if(!a&&this.z&1<<d)break}if(this.z>=1<<this.b.length){this.b.push(new sjcl.hash.sha256);this.j.push(0)}this.f-=c;if(c>this.g)this.g=c;this.z++;this.T(b)},p:function(a){sjcl.random.addEntropy([a.x||\n\
+a.clientX||a.offsetX,a.y||a.clientY||a.offsetY],2,\"mouse\")},o:function(){sjcl.random.addEntropy(new Date,2,\"loadtime\")},K:function(a,b){var c;a=sjcl.random.r[a];var d=[];for(c in a)a.hasOwnProperty(c)&&d.push(a[c]);for(c=0;c<d.length;c++)d[c](b)}};\n\
+sjcl.json={defaults:{v:1,iter:1E3,ks:128,ts:64,mode:\"ccm\",adata:\"\",cipher:\"aes\"},encrypt:function(a,b,c,d){c=c||{};d=d||{};var e=sjcl.json,f=e.c({iv:sjcl.random.randomWords(4,0)},e.defaults);e.c(f,c);if(typeof f.salt===\"string\")f.salt=sjcl.codec.base64.toBits(f.salt);if(typeof f.iv===\"string\")f.iv=sjcl.codec.base64.toBits(f.iv);if(!sjcl.mode[f.mode]||!sjcl.cipher[f.cipher]||typeof a===\"string\"&&f.iter<=100||f.ts!==64&&f.ts!==96&&f.ts!==128||f.ks!==128&&f.ks!==192&&f.ks!==0x100||f.iv.length<2||f.iv.length>\n\
+4)throw new sjcl.exception.invalid(\"json encrypt: invalid parameters\");if(typeof a===\"string\"){c=sjcl.misc.cachedPbkdf2(a,f);a=c.key.slice(0,f.ks/32);f.salt=c.salt}if(typeof b===\"string\")b=sjcl.codec.utf8String.toBits(b);c=new sjcl.cipher[f.cipher](a);e.c(d,f);d.key=a;f.ct=sjcl.mode[f.mode].encrypt(c,b,f.iv,f.adata,f.tag);return e.encode(e.V(f,e.defaults))},decrypt:function(a,b,c,d){c=c||{};d=d||{};var e=sjcl.json;b=e.c(e.c(e.c({},e.defaults),e.decode(b)),c,true);if(typeof b.salt===\"string\")b.salt=\n\
+sjcl.codec.base64.toBits(b.salt);if(typeof b.iv===\"string\")b.iv=sjcl.codec.base64.toBits(b.iv);if(!sjcl.mode[b.mode]||!sjcl.cipher[b.cipher]||typeof a===\"string\"&&b.iter<=100||b.ts!==64&&b.ts!==96&&b.ts!==128||b.ks!==128&&b.ks!==192&&b.ks!==0x100||!b.iv||b.iv.length<2||b.iv.length>4)throw new sjcl.exception.invalid(\"json decrypt: invalid parameters\");if(typeof a===\"string\"){c=sjcl.misc.cachedPbkdf2(a,b);a=c.key.slice(0,b.ks/32);b.salt=c.salt}c=new sjcl.cipher[b.cipher](a);c=sjcl.mode[b.mode].decrypt(c,\n\
+b.ct,b.iv,b.adata,b.tag);e.c(d,b);d.key=a;return sjcl.codec.utf8String.fromBits(c)},encode:function(a){var b,c=\"{\",d=\"\";for(b in a)if(a.hasOwnProperty(b)){if(!b.match(/^[a-z0-9]+$/i))throw new sjcl.exception.invalid(\"json encode: invalid property name\");c+=d+b+\":\";d=\",\";switch(typeof a[b]){case \"number\":case \"boolean\":c+=a[b];break;case \"string\":c+='\"'+escape(a[b])+'\"';break;case \"object\":c+='\"'+sjcl.codec.base64.fromBits(a[b],1)+'\"';break;default:throw new sjcl.exception.bug(\"json encode: unsupported type\");\n\
+}}return c+\"}\"},decode:function(a){a=a.replace(/\\s/g,\"\");if(!a.match(/^\\{.*\\}$/))throw new sjcl.exception.invalid(\"json decode: this isn't json!\");a=a.replace(/^\\{|\\}$/g,\"\").split(/,/);var b={},c,d;for(c=0;c<a.length;c++){if(!(d=a[c].match(/^([a-z][a-z0-9]*):(?:(\\d+)|\"([a-z0-9+\\/%*_.@=\\-]*)\")$/i)))throw new sjcl.exception.invalid(\"json decode: this isn't json!\");b[d[1]]=d[2]?parseInt(d[2],10):d[1].match(/^(ct|salt|iv)$/)?sjcl.codec.base64.toBits(d[3]):unescape(d[3])}return b},c:function(a,b,c){if(a===\n\
+undefined)a={};if(b===undefined)return a;var d;for(d in b)if(b.hasOwnProperty(d)){if(c&&a[d]!==undefined&&a[d]!==b[d])throw new sjcl.exception.invalid(\"required parameter overridden\");a[d]=b[d]}return a},V:function(a,b){var c={},d;for(d in a)if(a.hasOwnProperty(d)&&a[d]!==b[d])c[d]=a[d];return c},W:function(a,b){var c={},d;for(d=0;d<b.length;d++)if(a[b[d]]!==undefined)c[b[d]]=a[b[d]];return c}};sjcl.encrypt=sjcl.json.encrypt;sjcl.decrypt=sjcl.json.decrypt;sjcl.misc.S={};\n\
+sjcl.misc.cachedPbkdf2=function(a,b){var c=sjcl.misc.S,d;b=b||{};d=b.iter||1E3;c=c[a]=c[a]||{};d=c[d]=c[d]||{firstSalt:b.salt&&b.salt.length?b.salt.slice(0):sjcl.random.randomWords(2,0)};c=b.salt===undefined?d.firstSalt:b.salt;d[c]=d[c]||sjcl.misc.pbkdf2(a,c,b.iter);return{key:d[c].slice(0),salt:c.slice(0)}};\n\
+\n\
+\n\
+var browserUtil = {\n\
+ isRhino: true,\n\
+ \n\
+ pauseAndThen: function (cb) { cb(); },\n\
+ \n\
+ cpsIterate: function (f, start, end, pause, callback) {\n\
+ function go() {\n\
+ var called = false;\n\
+ if (start >= end) {\n\
+ callback && callback();\n\
+ } else {\n\
+ f(start, function () {\n\
+ if (!called) { called = true; start++; go(); }\n\
+ });\n\
+ }\n\
+ }\n\
+ go (start);\n\
+ },\n\
+ \n\
+ cpsMap: function (map, list, pause, callback) {\n\
+ browserUtil.cpsIterate(function (i, cb) { map(list[i], i, list.length, cb); },\n\
+ 0, list.length, pause, callback);\n\
+ },\n\
+\n\
+ loadScripts: function(scriptNames, callback) {\n\
+ for (i=0; i<scriptNames.length; i++) {\n\
+ load(scriptNames[i]);\n\
+ callback && callback();\n\
+ }\n\
+ },\n\
+ \n\
+ write: function(type, message) {\n\
+ print(message);\n\
+ return { update: function (type2, message2) {\n\
+ if (type2 === 'pass') { print(\" + \" + message2); }\n\
+ else if (type2 === 'unimplemented') { print(\" ? \" + message2); }\n\
+ else { print(\" - \" + message2); }\n\
+ }};\n\
+ },\n\
+ \n\
+ writeNewline: function () { print(\"\"); },\n\
+ \n\
+ status: function(message) {}\n\
+};\n\
+\n\
+sjcl.test = { vector: {}, all: {} };\n\
+\n\
+/* A bit of a hack. Because sjcl.test will be reloaded several times\n\
+ * for different variants of sjcl, but browserUtils will not, this\n\
+ * variable keeps a permanent record of whether anything has failed.\n\
+ */\n\
+if (typeof browserUtil.allPassed === 'undefined') {\n\
+ browserUtil.allPassed = true;\n\
+}\n\
+\n\
+sjcl.test.TestCase = function(name, doRun) {\n\
+ this.doRun = doRun;\n\
+ this.name = name;\n\
+ this.passes = 0;\n\
+ this.failures = 0;\n\
+ this.isUnimplemented = false;\n\
+ sjcl.test.all[name] = this;\n\
+};\n\
+\n\
+sjcl.test.TestCase.prototype = {\n\
+ /** Pass some subtest of this test */\n\
+ pass: function () { this.passes ++; },\n\
+ \n\
+ /** Fail some subtest of this test */\n\
+ fail: function (message) {\n\
+ if (message !== undefined) {\n\
+ this.log(\"fail\", \"*** FAIL *** \" + this.name + \": \" + message);\n\
+ } else {\n\
+ this.log(\"fail\", \"*** FAIL *** \" + this.name);\n\
+ }\n\
+ this.failures ++;\n\
+ browserUtil.allPassed = false;\n\
+ },\n\
+ \n\
+ unimplemented: function() {\n\
+ this.isUnimplemented = true;\n\
+ },\n\
+ \n\
+ /** Log a message to the console */\n\
+ log: browserUtil.write,\n\
+ \n\
+ /** Require that the first argument is true; otherwise fail with the given message */\n\
+ require: function (bool, message) {\n\
+ if (bool) {\n\
+ this.pass();\n\
+ } else if (message !== undefined) {\n\
+ this.fail(message);\n\
+ } else {\n\
+ this.fail(\"requirement failed\");\n\
+ }\n\
+ },\n\
+\n\
+ /** Pause and then take the specified action. */\n\
+ pauseAndThen: browserUtil.pauseAndThen,\n\
+ \n\
+ /** Continuation-passing-style iteration */\n\
+ cpsIterate: browserUtil.cpsIterate,\n\
+ \n\
+ /** Continuation-passing-style iteration */\n\
+ cpsMap: browserUtil.cpsMap,\n\
+\n\
+ /** Report the results of this test. */\n\
+ report: function (repo) {\n\
+ var t = (new Date()).valueOf() - this.startTime;\n\
+ if (this.failures !== 0) {\n\
+ repo.update(\"fail\", \"failed \" + this.failures + \" / \" +\n\
+ (this.passes + this.failures) + \" tests. (\" + t + \" ms)\");\n\
+ } else if (this.passes === 1) {\n\
+ repo.update(\"pass\", \"passed. (\" + t + \" ms)\");\n\
+ } else if (this.isUnimplemented) {\n\
+ repo.update(\"unimplemented\", \"unimplemented\");\n\
+ } else {\n\
+ repo.update(\"pass\", \"passed all \" + this.passes + \" tests. (\" + t + \" ms)\");\n\
+ }\n\
+ browserUtil.writeNewline();\n\
+ },\n\
+ \n\
+\n\
+ /** Run the test. */\n\
+ run: function (ntests, i, cb) {\n\
+ var thiz = this;\n\
+ this.startTime = (new Date()).valueOf();\n\
+ this.pauseAndThen(function () {\n\
+ thiz.doRun(function () {\n\
+ cb && cb();\n\
+ })\n\
+ });\n\
+ }\n\
+};\n\
+\n\
+// pass a list of tests to run, or pass nothing and it will run them all\n\
+sjcl.test.run = function (tests, callback) {\n\
+ var t;\n\
+ \n\
+ if (tests === undefined || tests.length == 0) {\n\
+ tests = [];\n\
+ for (t in sjcl.test.all) {\n\
+ if (sjcl.test.all.hasOwnProperty(t)) {\n\
+ tests.push(t);\n\
+ }\n\
+ }\n\
+ }\n\
+ \n\
+ browserUtil.cpsMap(function (t, i, n, cb) {\n\
+ sjcl.test.all[tests[i]].run(n, i+1, cb);\n\
+ }, tests, true, callback);\n\
+};\n\
+\n\
+/* Several test scripts rely on sjcl.codec.hex to parse their test\n\
+ * vectors, but we are not guaranteed that sjcl.codec.hex is\n\
+ * implemented.\n\
+ */\n\
+sjcl.codec = sjcl.codec || {};\n\
+sjcl.codec.hex = sjcl.codec.hex ||\n\
+{\n\
+ fromBits: function (arr) {\n\
+ var out = \"\", i, x;\n\
+ for (i=0; i<arr.length; i++) {\n\
+ out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);\n\
+ }\n\
+ return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, \"$1 \");\n\
+ },\n\
+ toBits: function (str) {\n\
+ var i, out=[], len;\n\
+ str = str.replace(/\\s|0x/g, \"\");\n\
+ len = str.length;\n\
+ str = str + \"00000000\";\n\
+ for (i=0; i<str.length; i+=8) {\n\
+ out.push(parseInt(str.substr(i,8),16)^0);\n\
+ }\n\
+ return sjcl.bitArray.clamp(out, len*4);\n\
+ }\n\
+};\n\
+\n\
+sjcl.test.run();\n\
+\n\
+\n\
+TalosContentProfiler.subtestStart('stanford-crypto-sha256-iterative', true).then(() => {\n\
+ var _sunSpiderStartDate = new Date();\n\
+\n\
+ /**\n\
+ * Test SHA-256 using an ad-hoc iterative technique.\n\
+ * This uses a string buffer which has n characters on the nth iteration.\n\
+ * Each iteration, the buffer is hashed and the hash is converted to a string.\n\
+ * The first two characters of the string are prepended to the buffer, then the\n\
+ * last character of the buffer is removed. This way, neither the beginning nor\n\
+ * the end of the buffer is fixed.\n\
+ *\n\
+ * The hashes from each output step are also hashed together into one final hash.\n\
+ * This is compared against a final hash which was computed with SSL.\n\
+ */\n\
+\n\
+ new sjcl.test.TestCase(\"SHA-256 iterative\", function (cb) {\n\
+ if (!sjcl.hash.sha256) {\n\
+ this.unimplemented();\n\
+ cb && cb();\n\
+ return;\n\
+ }\n\
+\n\
+ var toBeHashed = \"\", cumulative = new sjcl.hash.sha256(), hash, thiz=this;\n\
+ browserUtil.cpsIterate(function (i, cbb) {\n\
+ for (var n=100*i; n<100*(i+1); n++) {\n\
+ hash = sjcl.hash.sha256.hash(toBeHashed);\n\
+ hash = sjcl.codec.hex.fromBits(hash);\n\
+ cumulative.update(hash);\n\
+ toBeHashed = (hash.substring(0,2)+toBeHashed).substring(0,n+1);\n\
+ }\n\
+ cbb && cbb();\n\
+ }, 0, 10, true, function () {\n\
+ hash = sjcl.codec.hex.fromBits(cumulative.finalize());\n\
+ thiz.require(hash === \"f305c76d5d457ddf04f1927166f5e13429407049a5c5f29021916321fcdcd8b4\");\n\
+ cb && cb();\n\
+ });\n\
+ });\n\
+\n\
+ sjcl.test.run();\n\
+\n\
+\n\
+ var _sunSpiderInterval = new Date() - _sunSpiderStartDate;\n\
+ TalosContentProfiler.subtestEnd('stanford-crypto-sha256-iterative', true).then(() => {\n\
+ record(_sunSpiderInterval);\n\
+ });\n\
+\n\
+});\n\
+</script>\n\
+\n\
+\n\
+</body>\n\
+</html>\n\
+" ];
diff --git a/testing/talos/talos/tests/kraken/test-prefix.js b/testing/talos/talos/tests/kraken/test-prefix.js
new file mode 100644
index 0000000000..ef485298c1
--- /dev/null
+++ b/testing/talos/talos/tests/kraken/test-prefix.js
@@ -0,0 +1,2 @@
+var tests = [ "ai-astar", "audio-beat-detection", "audio-dft", "audio-fft", "audio-oscillator", "imaging-gaussian-blur", "imaging-darkroom", "imaging-desaturate", "json-parse-financial", "json-stringify-tinderbox", "stanford-crypto-aes", "stanford-crypto-ccm", "stanford-crypto-pbkdf2", "stanford-crypto-sha256-iterative" ];
+var categories = [ "ai", "audio", "imaging", "json", "stanford" ];
diff --git a/testing/talos/talos/tests/layout/benchmarks/displaylist_flattened_mutate.html b/testing/talos/talos/tests/layout/benchmarks/displaylist_flattened_mutate.html
new file mode 100644
index 0000000000..8d73a7695f
--- /dev/null
+++ b/testing/talos/talos/tests/layout/benchmarks/displaylist_flattened_mutate.html
@@ -0,0 +1,64 @@
+<html>
+<head>
+<style>
+ div {
+ opacity: 0.95;
+ width:10px;
+ height:10px;
+ background-color:green;
+ display: inline-block;
+ }
+</style>
+</head>
+<body id="body">
+</body>
+<script>
+
+var start = null;
+var divCount = 2500;
+var maxIterations = 600;
+
+// ensure contentful paint occurs
+document.body.innerHTML = "DisplayList flattened mutate";
+
+for (var i = 0; i < divCount; i++) {
+ var div = document.createElement("div");
+ div.id = i;
+ document.getElementById("body").appendChild(div);
+}
+
+var iteration = 0;
+function runFrame() {
+ if (document.getElementById(iteration).style.backgroundColor == "red") {
+ document.getElementById(iteration).style.backgroundColor = "green";
+ } else {
+ document.getElementById(iteration).style.backgroundColor = "red";
+ }
+ iteration++;
+ iteration = iteration % divCount;
+ if (--maxIterations == 0) {
+ var end = performance.now();
+ if (window.tpRecordTime) {
+ window.tpRecordTime(end - start, start);
+ }
+ return;
+ }
+
+ window.requestAnimationFrame(runFrame);
+}
+
+function startTest() {
+ start = performance.now();
+ window.requestAnimationFrame(runFrame);
+}
+
+addEventListener("load", function() {
+ if (window.TalosContentProfiler) {
+ TalosContentProfiler.subtestStart("displaylist_flattened_mutate.html loaded", true).then(startTest);
+ } else {
+ startTest();
+ }
+});
+</script>
+<script type="text/javascript" src="resource://talos-powers/TalosContentProfiler.js"></script>
+</html>
diff --git a/testing/talos/talos/tests/layout/benchmarks/displaylist_inactive_mutate.html b/testing/talos/talos/tests/layout/benchmarks/displaylist_inactive_mutate.html
new file mode 100644
index 0000000000..dde1a200ec
--- /dev/null
+++ b/testing/talos/talos/tests/layout/benchmarks/displaylist_inactive_mutate.html
@@ -0,0 +1,64 @@
+<html>
+<head>
+<style>
+ div {
+ transform: translate(1px);
+ width:10px;
+ height:10px;
+ background-color:green;
+ display: inline-block;
+ }
+</style>
+</head>
+<body id="body">
+</body>
+<script>
+
+var start = null;
+var divCount = 1000;
+var maxIterations = 600;
+
+// ensure contentful paint occurs
+document.body.innerHTML = "DisplayList inactive mutate";
+
+for (var i = 0; i < divCount; i++) {
+ var div = document.createElement("div");
+ div.id = i;
+ document.getElementById("body").appendChild(div);
+}
+
+var iteration = 0;
+function runFrame() {
+ if (document.getElementById(iteration).style.backgroundColor == "red") {
+ document.getElementById(iteration).style.backgroundColor = "green";
+ } else {
+ document.getElementById(iteration).style.backgroundColor = "red";
+ }
+ iteration++;
+ iteration = iteration % divCount;
+ if (--maxIterations == 0) {
+ var end = performance.now();
+ if (window.tpRecordTime) {
+ window.tpRecordTime(end - start, start);
+ }
+ return;
+ }
+
+ window.requestAnimationFrame(runFrame);
+}
+
+function startTest() {
+ start = performance.now();
+ window.requestAnimationFrame(runFrame);
+}
+
+addEventListener("load", function() {
+ if (window.TalosContentProfiler) {
+ TalosContentProfiler.subtestStart("displaylist_inactive_mutate.html loaded", true).then(startTest);
+ } else {
+ startTest();
+ }
+});
+</script>
+<script type="text/javascript" src="resource://talos-powers/TalosContentProfiler.js"></script>
+</html>
diff --git a/testing/talos/talos/tests/layout/benchmarks/displaylist_mutate.html b/testing/talos/talos/tests/layout/benchmarks/displaylist_mutate.html
new file mode 100644
index 0000000000..d7cd9e369e
--- /dev/null
+++ b/testing/talos/talos/tests/layout/benchmarks/displaylist_mutate.html
@@ -0,0 +1,63 @@
+<html>
+<head>
+<style>
+ div {
+ width:10px;
+ height:10px;
+ background-color:green;
+ display: inline-block;
+ }
+</style>
+</head>
+<body id="body">
+</body>
+<script>
+
+var start = null;
+var divCount = 10000;
+var maxIterations = 600;
+
+// ensure contentful paint occurs
+document.body.innerHTML = "DisplayList mutate";
+
+for (var i = 0; i < divCount; i++) {
+ var div = document.createElement("div");
+ div.id = i;
+ document.getElementById("body").appendChild(div);
+}
+
+var iteration = 0;
+function runFrame() {
+ if (document.getElementById(iteration).style.backgroundColor == "red") {
+ document.getElementById(iteration).style.backgroundColor = "green";
+ } else {
+ document.getElementById(iteration).style.backgroundColor = "red";
+ }
+ iteration++;
+ iteration = iteration % divCount;
+ if (--maxIterations == 0) {
+ var end = performance.now();
+ if (window.tpRecordTime) {
+ window.tpRecordTime(end - start, start);
+ }
+ return;
+ }
+
+ window.requestAnimationFrame(runFrame);
+}
+
+function startTest() {
+ start = performance.now();
+ window.requestAnimationFrame(runFrame);
+}
+
+addEventListener("load", function() {
+ if (window.TalosContentProfiler) {
+ TalosContentProfiler.subtestStart("displaylist_mutate.html loaded", true).then(startTest);
+ } else {
+ startTest();
+ }
+});
+</script>
+<script type="text/javascript" src="resource://talos-powers/TalosContentProfiler.js"></script>
+</html>
diff --git a/testing/talos/talos/tests/layout/displaylist_mutate.manifest b/testing/talos/talos/tests/layout/displaylist_mutate.manifest
new file mode 100644
index 0000000000..77d782aa8c
--- /dev/null
+++ b/testing/talos/talos/tests/layout/displaylist_mutate.manifest
@@ -0,0 +1,3 @@
+% http://localhost/tests/layout/benchmarks/displaylist_mutate.html
+% http://localhost/tests/layout/benchmarks/displaylist_inactive_mutate.html
+% http://localhost/tests/layout/benchmarks/displaylist_flattened_mutate.html
diff --git a/testing/talos/talos/tests/motionmark/animometer.manifest b/testing/talos/talos/tests/motionmark/animometer.manifest
new file mode 100644
index 0000000000..894c6ef985
--- /dev/null
+++ b/testing/talos/talos/tests/motionmark/animometer.manifest
@@ -0,0 +1,2 @@
+% http://localhost/tests/webkit/PerformanceTests/MotionMark/developer.html?test-interval=15&display=minimal&tiles=big&controller=fixed&frame-rate=30&kalman-process-error=1&kalman-measurement-error=4&time-measurement=performance&suite-name=Animometer
+
diff --git a/testing/talos/talos/tests/motionmark/htmlsuite.manifest b/testing/talos/talos/tests/motionmark/htmlsuite.manifest
new file mode 100644
index 0000000000..396e9cfb88
--- /dev/null
+++ b/testing/talos/talos/tests/motionmark/htmlsuite.manifest
@@ -0,0 +1 @@
+% http://localhost/tests/webkit/PerformanceTests/MotionMark/developer.html?test-interval=15&display=minimal&tiles=big&controller=fixed&frame-rate=30&kalman-process-error=1&kalman-measurement-error=4&time-measurement=performance&suite-name=HTMLsuite \ No newline at end of file
diff --git a/testing/talos/talos/tests/motionmark/webgl.manifest b/testing/talos/talos/tests/motionmark/webgl.manifest
new file mode 100644
index 0000000000..a805fa476b
--- /dev/null
+++ b/testing/talos/talos/tests/motionmark/webgl.manifest
@@ -0,0 +1 @@
+% http://localhost/tests/webkit/PerformanceTests/MotionMark/developer.html?test-interval=15&display=minimal&tiles=big&controller=fixed&frame-rate=50&kalman-process-error=1&kalman-measurement-error=4&time-measurement=performance&suite-name=3DGraphics&test-name=WebGL&complexity=30000
diff --git a/testing/talos/talos/tests/offscreencanvas/benchmarks/video/2d_av1_main.html b/testing/talos/talos/tests/offscreencanvas/benchmarks/video/2d_av1_main.html
new file mode 100644
index 0000000000..172638f56d
--- /dev/null
+++ b/testing/talos/talos/tests/offscreencanvas/benchmarks/video/2d_av1_main.html
@@ -0,0 +1,22 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ - You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<html>
+<head>
+<script src="mp4box.all.min.js" type="text/javascript"></script>
+<script src="demuxer_mp4.js" type="text/javascript"></script>
+<script src="shared.js" type="text/javascript"></script>
+<script src="helper_main.js" type="text/javascript"></script>
+<script language="javascript" type="text/javascript">
+
+function init() {
+ const videoUri = "../../../video/clips/testsrc.1080p.60fps.av1.short.mp4";
+ runTest("offscreencanvas_webcodecs_main_2d_av1", "2d", videoUri);
+}
+
+</script>
+
+</head>
+<body id="body" onload="init();">
+</body>
+</html>
diff --git a/testing/talos/talos/tests/offscreencanvas/benchmarks/video/2d_av1_worker.html b/testing/talos/talos/tests/offscreencanvas/benchmarks/video/2d_av1_worker.html
new file mode 100644
index 0000000000..82ba532d92
--- /dev/null
+++ b/testing/talos/talos/tests/offscreencanvas/benchmarks/video/2d_av1_worker.html
@@ -0,0 +1,20 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ - You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<html>
+<head>
+<script src="helper_worker.js" type="text/javascript"></script>
+<script language="javascript" type="text/javascript">
+const worker = new Worker("worker.js");
+
+function init() {
+ const videoUri = "../../../video/clips/testsrc.1080p.60fps.av1.short.mp4";
+ runTest("offscreencanvas_webcodecs_worker_2d_av1", "2d", worker, videoUri);
+}
+
+</script>
+
+</head>
+<body id="body" onload="init();">
+</body>
+</html>
diff --git a/testing/talos/talos/tests/offscreencanvas/benchmarks/video/2d_h264_main.html b/testing/talos/talos/tests/offscreencanvas/benchmarks/video/2d_h264_main.html
new file mode 100644
index 0000000000..1289165bc7
--- /dev/null
+++ b/testing/talos/talos/tests/offscreencanvas/benchmarks/video/2d_h264_main.html
@@ -0,0 +1,22 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ - You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<html>
+<head>
+<script src="mp4box.all.min.js" type="text/javascript"></script>
+<script src="demuxer_mp4.js" type="text/javascript"></script>
+<script src="shared.js" type="text/javascript"></script>
+<script src="helper_main.js" type="text/javascript"></script>
+<script language="javascript" type="text/javascript">
+
+function init() {
+ const videoUri = "../../../video/clips/testsrc.1080p.60fps.h264.short.mp4";
+ runTest("offscreencanvas_webcodecs_main_2d_h264", "2d", videoUri);
+}
+
+</script>
+
+</head>
+<body id="body" onload="init();">
+</body>
+</html>
diff --git a/testing/talos/talos/tests/offscreencanvas/benchmarks/video/2d_h264_worker.html b/testing/talos/talos/tests/offscreencanvas/benchmarks/video/2d_h264_worker.html
new file mode 100644
index 0000000000..cad548878f
--- /dev/null
+++ b/testing/talos/talos/tests/offscreencanvas/benchmarks/video/2d_h264_worker.html
@@ -0,0 +1,20 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ - You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<html>
+<head>
+<script src="helper_worker.js" type="text/javascript"></script>
+<script language="javascript" type="text/javascript">
+const worker = new Worker("worker.js");
+
+function init() {
+ const videoUri = "../../../video/clips/testsrc.1080p.60fps.h264.short.mp4";
+ runTest("offscreencanvas_webcodecs_worker_2d_h264", "2d", worker, videoUri);
+}
+
+</script>
+
+</head>
+<body id="body" onload="init();">
+</body>
+</html>
diff --git a/testing/talos/talos/tests/offscreencanvas/benchmarks/video/2d_vp9_main.html b/testing/talos/talos/tests/offscreencanvas/benchmarks/video/2d_vp9_main.html
new file mode 100644
index 0000000000..7a63deab67
--- /dev/null
+++ b/testing/talos/talos/tests/offscreencanvas/benchmarks/video/2d_vp9_main.html
@@ -0,0 +1,22 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ - You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<html>
+<head>
+<script src="mp4box.all.min.js" type="text/javascript"></script>
+<script src="demuxer_mp4.js" type="text/javascript"></script>
+<script src="shared.js" type="text/javascript"></script>
+<script src="helper_main.js" type="text/javascript"></script>
+<script language="javascript" type="text/javascript">
+
+function init() {
+ const videoUri = "../../../video/clips/testsrc.1080p.60fps.vp9.short.mp4";
+ runTest("offscreencanvas_webcodecs_main_2d_vp9", "2d", videoUri);
+}
+
+</script>
+
+</head>
+<body id="body" onload="init();">
+</body>
+</html>
diff --git a/testing/talos/talos/tests/offscreencanvas/benchmarks/video/2d_vp9_worker.html b/testing/talos/talos/tests/offscreencanvas/benchmarks/video/2d_vp9_worker.html
new file mode 100644
index 0000000000..abefcf49f1
--- /dev/null
+++ b/testing/talos/talos/tests/offscreencanvas/benchmarks/video/2d_vp9_worker.html
@@ -0,0 +1,20 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ - You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<html>
+<head>
+<script src="helper_worker.js" type="text/javascript"></script>
+<script language="javascript" type="text/javascript">
+const worker = new Worker("worker.js");
+
+function init() {
+ const videoUri = "../../../video/clips/testsrc.1080p.60fps.vp9.short.mp4";
+ runTest("offscreencanvas_webcodecs_worker_2d_vp9", "2d", worker, videoUri);
+}
+
+</script>
+
+</head>
+<body id="body" onload="init();">
+</body>
+</html>
diff --git a/testing/talos/talos/tests/offscreencanvas/benchmarks/video/demuxer_mp4.js b/testing/talos/talos/tests/offscreencanvas/benchmarks/video/demuxer_mp4.js
new file mode 100644
index 0000000000..98d429c512
--- /dev/null
+++ b/testing/talos/talos/tests/offscreencanvas/benchmarks/video/demuxer_mp4.js
@@ -0,0 +1,113 @@
+/**
+ * This software or document includes material copied from or derived from:
+ * https://github.com/w3c/webcodecs/blob/main/samples/video-decode-display/demuxer_mp4.js
+ *
+ * Copyright (c) 2022-2023 World Wide Web Consortium.
+ * https://www.w3.org/copyright/software-license-2023/
+ */
+
+// Wraps an MP4Box File as a WritableStream underlying sink.
+class MP4FileSink {
+ #setStatus = null;
+ #file = null;
+ #offset = 0;
+
+ constructor(file, setStatus) {
+ this.#file = file;
+ this.#setStatus = setStatus;
+ }
+
+ write(chunk) {
+ // MP4Box.js requires buffers to be ArrayBuffers, but we have a Uint8Array.
+ const buffer = new ArrayBuffer(chunk.byteLength);
+ new Uint8Array(buffer).set(chunk);
+
+ // Inform MP4Box where in the file this chunk is from.
+ buffer.fileStart = this.#offset;
+ this.#offset += buffer.byteLength;
+
+ // Append chunk.
+ this.#setStatus("fetch", (this.#offset / (1024 ** 2)).toFixed(1) + " MiB");
+ this.#file.appendBuffer(buffer);
+ }
+
+ close() {
+ this.#setStatus("fetch", "Done");
+ this.#file.flush();
+ }
+}
+
+// Demuxes the first video track of an MP4 file using MP4Box, calling
+// `onConfig()` and `onChunk()` with appropriate WebCodecs objects.
+class MP4Demuxer {
+ #onConfig = null;
+ #onChunk = null;
+ #setStatus = null;
+ #file = null;
+
+ constructor(uri, {onConfig, onChunk, setStatus}) {
+ this.#onConfig = onConfig;
+ this.#onChunk = onChunk;
+ this.#setStatus = setStatus;
+
+ // Configure an MP4Box File for demuxing.
+ this.#file = MP4Box.createFile();
+ this.#file.onError = error => setStatus("demux", error);
+ this.#file.onReady = this.#onReady.bind(this);
+ this.#file.onSamples = this.#onSamples.bind(this);
+
+ // Fetch the file and pipe the data through.
+ const fileSink = new MP4FileSink(this.#file, setStatus);
+ fetch(uri).then(response => {
+ // highWaterMark should be large enough for smooth streaming, but lower is
+ // better for memory usage.
+ response.body.pipeTo(new WritableStream(fileSink, {highWaterMark: 2}));
+ });
+ }
+
+ // Get the appropriate `description` for a specific track. Assumes that the
+ // track is H.264, H.265, VP8, VP9, or AV1.
+ #description(track) {
+ const trak = this.#file.getTrackById(track.id);
+ for (const entry of trak.mdia.minf.stbl.stsd.entries) {
+ const box = entry.avcC || entry.hvcC || entry.vpcC || entry.av1C;
+ if (box) {
+ const stream = new DataStream(undefined, 0, DataStream.BIG_ENDIAN);
+ box.write(stream);
+ return new Uint8Array(stream.buffer, 8); // Remove the box header.
+ }
+ }
+ throw new Error("avcC, hvcC, vpcC, or av1C box not found");
+ }
+
+ #onReady(info) {
+ this.#setStatus("demux", "Ready");
+ const track = info.videoTracks[0];
+
+ // Generate and emit an appropriate VideoDecoderConfig.
+ this.#onConfig({
+ // Browser doesn't support parsing full vp8 codec (eg: `vp08.00.41.08`),
+ // they only support `vp8`.
+ codec: track.codec.startsWith('vp08') ? 'vp8' : track.codec,
+ codedHeight: track.video.height,
+ codedWidth: track.video.width,
+ description: this.#description(track),
+ });
+
+ // Start demuxing.
+ this.#file.setExtractionOptions(track.id);
+ this.#file.start();
+ }
+
+ #onSamples(track_id, ref, samples) {
+ // Generate and emit an EncodedVideoChunk for each demuxed sample.
+ for (const sample of samples) {
+ this.#onChunk(new EncodedVideoChunk({
+ type: sample.is_sync ? "key" : "delta",
+ timestamp: 1e6 * sample.cts / sample.timescale,
+ duration: 1e6 * sample.duration / sample.timescale,
+ data: sample.data
+ }));
+ }
+ }
+}
diff --git a/testing/talos/talos/tests/offscreencanvas/benchmarks/video/helper_main.js b/testing/talos/talos/tests/offscreencanvas/benchmarks/video/helper_main.js
new file mode 100644
index 0000000000..548736dfd3
--- /dev/null
+++ b/testing/talos/talos/tests/offscreencanvas/benchmarks/video/helper_main.js
@@ -0,0 +1,57 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/*global runTestInternal b:true*/
+
+function runTest(testName, canvasType, videoUri) {
+ const canvas = document.createElement("canvas");
+ canvas.width = 1920;
+ canvas.height = 1080;
+ document.body.appendChild(canvas);
+
+ const offscreenCanvas = canvas.transferControlToOffscreen();
+
+ return new Promise((resolve, reject) => {
+ try {
+ runTestInternal(
+ testName,
+ canvasType,
+ offscreenCanvas,
+ /* isWorker */ false,
+ videoUri,
+ resolve,
+ reject
+ );
+ } catch (e) {
+ reject(e);
+ }
+ })
+ .then(result => {
+ let name =
+ result.testName +
+ " Mean time across " +
+ result.totalFrames +
+ " frames: ";
+ let value = result.elapsed / result.totalFrames;
+ let msg = name + value + "\n";
+ dump("[talos offscreen-canvas-webcodecs result] " + msg);
+
+ if (window.tpRecordTime) {
+ // Within talos - report the results
+ tpRecordTime(value, 0, name);
+ } else {
+ alert(msg);
+ }
+ })
+ .catch(e => {
+ let msg = "caught error " + e;
+ dump("[talos offscreen-canvas-webcodecs result] " + msg);
+ if (window.tpRecordTime) {
+ // Within talos - report the results
+ tpRecordTime("", 0, "");
+ } else {
+ alert(msg);
+ }
+ });
+}
diff --git a/testing/talos/talos/tests/offscreencanvas/benchmarks/video/helper_worker.js b/testing/talos/talos/tests/offscreencanvas/benchmarks/video/helper_worker.js
new file mode 100644
index 0000000000..3b6d5aefe6
--- /dev/null
+++ b/testing/talos/talos/tests/offscreencanvas/benchmarks/video/helper_worker.js
@@ -0,0 +1,53 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+function runTest(testName, canvasType, worker, videoUri) {
+ const canvas = document.createElement("canvas");
+ canvas.width = 1920;
+ canvas.height = 1080;
+ document.body.appendChild(canvas);
+
+ const offscreenCanvas = canvas.transferControlToOffscreen();
+
+ return new Promise((resolve, reject) => {
+ worker.onmessage = e => {
+ if (e.data.errorMessage) {
+ reject(e.data.errorMessage);
+ } else {
+ resolve(e.data);
+ }
+ };
+
+ worker.postMessage({ offscreenCanvas, testName, canvasType, videoUri }, [
+ offscreenCanvas,
+ ]);
+ })
+ .then(result => {
+ let name =
+ result.testName +
+ " Mean time across " +
+ result.totalFrames +
+ " frames: ";
+ let value = result.elapsed / result.totalFrames;
+ let msg = name + value + "\n";
+ dump("[talos offscreen-canvas-webcodecs result] " + msg);
+
+ if (window.tpRecordTime) {
+ // Within talos - report the results
+ tpRecordTime(value, 0, name);
+ } else {
+ alert(msg);
+ }
+ })
+ .catch(e => {
+ let msg = "caught error " + e;
+ dump("[talos offscreen-canvas-webcodecs result] " + msg);
+ if (window.tpRecordTime) {
+ // Within talos - report the results
+ tpRecordTime("", 0, "");
+ } else {
+ alert(msg);
+ }
+ });
+}
diff --git a/testing/talos/talos/tests/offscreencanvas/benchmarks/video/mp4box.all.min.js b/testing/talos/talos/tests/offscreencanvas/benchmarks/video/mp4box.all.min.js
new file mode 100644
index 0000000000..1a638d8eb0
--- /dev/null
+++ b/testing/talos/talos/tests/offscreencanvas/benchmarks/video/mp4box.all.min.js
@@ -0,0 +1,4 @@
+/*! mp4box 12-12-2023 */
+
+var Log=function(){var i=new Date,r=4;return{setLogLevel:function(t){r=t==this.debug?1:t==this.info?2:t==this.warn?3:(this.error,4)},debug:function(t,e){void 0===console.debug&&(console.debug=console.log),r<=1&&console.debug("["+Log.getDurationString(new Date-i,1e3)+"]","["+t+"]",e)},log:function(t,e){this.debug(t.msg)},info:function(t,e){r<=2&&console.info("["+Log.getDurationString(new Date-i,1e3)+"]","["+t+"]",e)},warn:function(t,e){r<=3&&console.warn("["+Log.getDurationString(new Date-i,1e3)+"]","["+t+"]",e)},error:function(t,e){r<=4&&console.error("["+Log.getDurationString(new Date-i,1e3)+"]","["+t+"]",e)}}}();Log.getDurationString=function(t,e){var i;function r(t,e){for(var i=(""+t).split(".");i[0].length<e;)i[0]="0"+i[0];return i.join(".")}t<0?(i=!0,t=-t):i=!1;var s=t/(e||1),a=Math.floor(s/3600);s-=3600*a;t=Math.floor(s/60),e=1e3*(s-=60*t);return e-=1e3*(s=Math.floor(s)),e=Math.floor(e),(i?"-":"")+a+":"+r(t,2)+":"+r(s,2)+"."+r(e,3)},Log.printRanges=function(t){var e=t.length;if(0<e){for(var i="",r=0;r<e;r++)0<r&&(i+=","),i+="["+Log.getDurationString(t.start(r))+","+Log.getDurationString(t.end(r))+"]";return i}return"(empty)"},"undefined"!=typeof exports&&(exports.Log=Log);var MP4BoxStream=function(t){if(!(t instanceof ArrayBuffer))throw"Needs an array buffer";this.buffer=t,this.dataview=new DataView(t),this.position=0};MP4BoxStream.prototype.getPosition=function(){return this.position},MP4BoxStream.prototype.getEndPosition=function(){return this.buffer.byteLength},MP4BoxStream.prototype.getLength=function(){return this.buffer.byteLength},MP4BoxStream.prototype.seek=function(t){t=Math.max(0,Math.min(this.buffer.byteLength,t));return this.position=isNaN(t)||!isFinite(t)?0:t,!0},MP4BoxStream.prototype.isEos=function(){return this.getPosition()>=this.getEndPosition()},MP4BoxStream.prototype.readAnyInt=function(t,e){var i=0;if(this.position+t<=this.buffer.byteLength){switch(t){case 1:i=e?this.dataview.getInt8(this.position):this.dataview.getUint8(this.position);break;case 2:i=e?this.dataview.getInt16(this.position):this.dataview.getUint16(this.position);break;case 3:if(e)throw"No method for reading signed 24 bits values";i=this.dataview.getUint8(this.position)<<16,i|=this.dataview.getUint8(this.position+1)<<8,i|=this.dataview.getUint8(this.position+2);break;case 4:i=e?this.dataview.getInt32(this.position):this.dataview.getUint32(this.position);break;case 8:if(e)throw"No method for reading signed 64 bits values";i=this.dataview.getUint32(this.position)<<32,i|=this.dataview.getUint32(this.position+4);break;default:throw"readInt method not implemented for size: "+t}return this.position+=t,i}throw"Not enough bytes in buffer"},MP4BoxStream.prototype.readUint8=function(){return this.readAnyInt(1,!1)},MP4BoxStream.prototype.readUint16=function(){return this.readAnyInt(2,!1)},MP4BoxStream.prototype.readUint24=function(){return this.readAnyInt(3,!1)},MP4BoxStream.prototype.readUint32=function(){return this.readAnyInt(4,!1)},MP4BoxStream.prototype.readUint64=function(){return this.readAnyInt(8,!1)},MP4BoxStream.prototype.readString=function(t){if(this.position+t<=this.buffer.byteLength){for(var e="",i=0;i<t;i++)e+=String.fromCharCode(this.readUint8());return e}throw"Not enough bytes in buffer"},MP4BoxStream.prototype.readCString=function(){for(var t=[];;){var e=this.readUint8();if(0===e)break;t.push(e)}return String.fromCharCode.apply(null,t)},MP4BoxStream.prototype.readInt8=function(){return this.readAnyInt(1,!0)},MP4BoxStream.prototype.readInt16=function(){return this.readAnyInt(2,!0)},MP4BoxStream.prototype.readInt32=function(){return this.readAnyInt(4,!0)},MP4BoxStream.prototype.readInt64=function(){return this.readAnyInt(8,!1)},MP4BoxStream.prototype.readUint8Array=function(t){for(var e=new Uint8Array(t),i=0;i<t;i++)e[i]=this.readUint8();return e},MP4BoxStream.prototype.readInt16Array=function(t){for(var e=new Int16Array(t),i=0;i<t;i++)e[i]=this.readInt16();return e},MP4BoxStream.prototype.readUint16Array=function(t){for(var e=new Int16Array(t),i=0;i<t;i++)e[i]=this.readUint16();return e},MP4BoxStream.prototype.readUint32Array=function(t){for(var e=new Uint32Array(t),i=0;i<t;i++)e[i]=this.readUint32();return e},MP4BoxStream.prototype.readInt32Array=function(t){for(var e=new Int32Array(t),i=0;i<t;i++)e[i]=this.readInt32();return e},"undefined"!=typeof exports&&(exports.MP4BoxStream=MP4BoxStream);var DataStream=function(t,e,i){this._byteOffset=e||0,t instanceof ArrayBuffer?this.buffer=t:"object"==typeof t?(this.dataView=t,e&&(this._byteOffset+=e)):this.buffer=new ArrayBuffer(t||0),this.position=0,this.endianness=null==i?DataStream.LITTLE_ENDIAN:i};DataStream.prototype={},DataStream.prototype.getPosition=function(){return this.position},DataStream.prototype._realloc=function(t){if(this._dynamicSize){var e=this._byteOffset+this.position+t,i=this._buffer.byteLength;if(e<=i)e>this._byteLength&&(this._byteLength=e);else{for(i<1&&(i=1);i<e;)i*=2;var r=new ArrayBuffer(i),t=new Uint8Array(this._buffer);new Uint8Array(r,0,t.length).set(t),this.buffer=r,this._byteLength=e}}},DataStream.prototype._trimAlloc=function(){var t,e,i;this._byteLength!=this._buffer.byteLength&&(t=new ArrayBuffer(this._byteLength),e=new Uint8Array(t),i=new Uint8Array(this._buffer,0,e.length),e.set(i),this.buffer=t)},DataStream.BIG_ENDIAN=!1,DataStream.LITTLE_ENDIAN=!0,DataStream.prototype._byteLength=0,Object.defineProperty(DataStream.prototype,"byteLength",{get:function(){return this._byteLength-this._byteOffset}}),Object.defineProperty(DataStream.prototype,"buffer",{get:function(){return this._trimAlloc(),this._buffer},set:function(t){this._buffer=t,this._dataView=new DataView(this._buffer,this._byteOffset),this._byteLength=this._buffer.byteLength}}),Object.defineProperty(DataStream.prototype,"byteOffset",{get:function(){return this._byteOffset},set:function(t){this._byteOffset=t,this._dataView=new DataView(this._buffer,this._byteOffset),this._byteLength=this._buffer.byteLength}}),Object.defineProperty(DataStream.prototype,"dataView",{get:function(){return this._dataView},set:function(t){this._byteOffset=t.byteOffset,this._buffer=t.buffer,this._dataView=new DataView(this._buffer,this._byteOffset),this._byteLength=this._byteOffset+t.byteLength}}),DataStream.prototype.seek=function(t){t=Math.max(0,Math.min(this.byteLength,t));this.position=isNaN(t)||!isFinite(t)?0:t},DataStream.prototype.isEof=function(){return this.position>=this._byteLength},DataStream.prototype.mapUint8Array=function(t){this._realloc(+t);var e=new Uint8Array(this._buffer,this.byteOffset+this.position,t);return this.position+=+t,e},DataStream.prototype.readInt32Array=function(t,e){t=null==t?this.byteLength-this.position/4:t;var i=new Int32Array(t);return DataStream.memcpy(i.buffer,0,this.buffer,this.byteOffset+this.position,t*i.BYTES_PER_ELEMENT),DataStream.arrayToNative(i,null==e?this.endianness:e),this.position+=i.byteLength,i},DataStream.prototype.readInt16Array=function(t,e){t=null==t?this.byteLength-this.position/2:t;var i=new Int16Array(t);return DataStream.memcpy(i.buffer,0,this.buffer,this.byteOffset+this.position,t*i.BYTES_PER_ELEMENT),DataStream.arrayToNative(i,null==e?this.endianness:e),this.position+=i.byteLength,i},DataStream.prototype.readInt8Array=function(t){t=null==t?this.byteLength-this.position:t;var e=new Int8Array(t);return DataStream.memcpy(e.buffer,0,this.buffer,this.byteOffset+this.position,t*e.BYTES_PER_ELEMENT),this.position+=e.byteLength,e},DataStream.prototype.readUint32Array=function(t,e){t=null==t?this.byteLength-this.position/4:t;var i=new Uint32Array(t);return DataStream.memcpy(i.buffer,0,this.buffer,this.byteOffset+this.position,t*i.BYTES_PER_ELEMENT),DataStream.arrayToNative(i,null==e?this.endianness:e),this.position+=i.byteLength,i},DataStream.prototype.readUint16Array=function(t,e){t=null==t?this.byteLength-this.position/2:t;var i=new Uint16Array(t);return DataStream.memcpy(i.buffer,0,this.buffer,this.byteOffset+this.position,t*i.BYTES_PER_ELEMENT),DataStream.arrayToNative(i,null==e?this.endianness:e),this.position+=i.byteLength,i},DataStream.prototype.readUint8Array=function(t){t=null==t?this.byteLength-this.position:t;var e=new Uint8Array(t);return DataStream.memcpy(e.buffer,0,this.buffer,this.byteOffset+this.position,t*e.BYTES_PER_ELEMENT),this.position+=e.byteLength,e},DataStream.prototype.readFloat64Array=function(t,e){t=null==t?this.byteLength-this.position/8:t;var i=new Float64Array(t);return DataStream.memcpy(i.buffer,0,this.buffer,this.byteOffset+this.position,t*i.BYTES_PER_ELEMENT),DataStream.arrayToNative(i,null==e?this.endianness:e),this.position+=i.byteLength,i},DataStream.prototype.readFloat32Array=function(t,e){t=null==t?this.byteLength-this.position/4:t;var i=new Float32Array(t);return DataStream.memcpy(i.buffer,0,this.buffer,this.byteOffset+this.position,t*i.BYTES_PER_ELEMENT),DataStream.arrayToNative(i,null==e?this.endianness:e),this.position+=i.byteLength,i},DataStream.prototype.readInt32=function(t){t=this._dataView.getInt32(this.position,null==t?this.endianness:t);return this.position+=4,t},DataStream.prototype.readInt16=function(t){t=this._dataView.getInt16(this.position,null==t?this.endianness:t);return this.position+=2,t},DataStream.prototype.readInt8=function(){var t=this._dataView.getInt8(this.position);return this.position+=1,t},DataStream.prototype.readUint32=function(t){t=this._dataView.getUint32(this.position,null==t?this.endianness:t);return this.position+=4,t},DataStream.prototype.readUint16=function(t){t=this._dataView.getUint16(this.position,null==t?this.endianness:t);return this.position+=2,t},DataStream.prototype.readUint8=function(){var t=this._dataView.getUint8(this.position);return this.position+=1,t},DataStream.prototype.readFloat32=function(t){t=this._dataView.getFloat32(this.position,null==t?this.endianness:t);return this.position+=4,t},DataStream.prototype.readFloat64=function(t){t=this._dataView.getFloat64(this.position,null==t?this.endianness:t);return this.position+=8,t},DataStream.endianness=0<new Int8Array(new Int16Array([1]).buffer)[0],DataStream.memcpy=function(t,e,i,r,s){e=new Uint8Array(t,e,s),s=new Uint8Array(i,r,s);e.set(s)},DataStream.arrayToNative=function(t,e){return e==this.endianness?t:this.flipArrayEndianness(t)},DataStream.nativeToEndian=function(t,e){return this.endianness==e?t:this.flipArrayEndianness(t)},DataStream.flipArrayEndianness=function(t){for(var e=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),i=0;i<t.byteLength;i+=t.BYTES_PER_ELEMENT)for(var r=i+t.BYTES_PER_ELEMENT-1,s=i;s<r;r--,s++){var a=e[s];e[s]=e[r],e[r]=a}return t},DataStream.prototype.failurePosition=0,String.fromCharCodeUint8=function(t){for(var e=[],i=0;i<t.length;i++)e[i]=t[i];return String.fromCharCode.apply(null,e)},DataStream.prototype.readString=function(t,e){return null==e||"ASCII"==e?String.fromCharCodeUint8.apply(null,[this.mapUint8Array(null==t?this.byteLength-this.position:t)]):new TextDecoder(e).decode(this.mapUint8Array(t))},DataStream.prototype.readCString=function(t){var e=this.byteLength-this.position,i=new Uint8Array(this._buffer,this._byteOffset+this.position),r=e;null!=t&&(r=Math.min(t,e));for(var s=0;s<r&&0!==i[s];s++);var a=String.fromCharCodeUint8.apply(null,[this.mapUint8Array(s)]);return null!=t?this.position+=r-s:s!=e&&(this.position+=1),a};var MAX_SIZE=Math.pow(2,32);DataStream.prototype.readInt64=function(){return this.readInt32()*MAX_SIZE+this.readUint32()},DataStream.prototype.readUint64=function(){return this.readUint32()*MAX_SIZE+this.readUint32()},DataStream.prototype.readInt64=function(){return this.readUint32()*MAX_SIZE+this.readUint32()},DataStream.prototype.readUint24=function(){return(this.readUint8()<<16)+(this.readUint8()<<8)+this.readUint8()},"undefined"!=typeof exports&&(exports.DataStream=DataStream),DataStream.prototype.save=function(t){var e=new Blob([this.buffer]);if(!window.URL||!URL.createObjectURL)throw"DataStream.save: Can't create object URL.";var i=window.URL.createObjectURL(e),e=document.createElement("a");document.body.appendChild(e),e.setAttribute("href",i),e.setAttribute("download",t),e.setAttribute("target","_self"),e.click(),window.URL.revokeObjectURL(i)},DataStream.prototype._dynamicSize=!0,Object.defineProperty(DataStream.prototype,"dynamicSize",{get:function(){return this._dynamicSize},set:function(t){t||this._trimAlloc(),this._dynamicSize=t}}),DataStream.prototype.shift=function(t){var e=new ArrayBuffer(this._byteLength-t),i=new Uint8Array(e),r=new Uint8Array(this._buffer,t,i.length);i.set(r),this.buffer=e,this.position-=t},DataStream.prototype.writeInt32Array=function(t,e){if(this._realloc(4*t.length),t instanceof Int32Array&&this.byteOffset+this.position%t.BYTES_PER_ELEMENT===0)DataStream.memcpy(this._buffer,this.byteOffset+this.position,t.buffer,0,t.byteLength),this.mapInt32Array(t.length,e);else for(var i=0;i<t.length;i++)this.writeInt32(t[i],e)},DataStream.prototype.writeInt16Array=function(t,e){if(this._realloc(2*t.length),t instanceof Int16Array&&this.byteOffset+this.position%t.BYTES_PER_ELEMENT===0)DataStream.memcpy(this._buffer,this.byteOffset+this.position,t.buffer,0,t.byteLength),this.mapInt16Array(t.length,e);else for(var i=0;i<t.length;i++)this.writeInt16(t[i],e)},DataStream.prototype.writeInt8Array=function(t){if(this._realloc(+t.length),t instanceof Int8Array&&this.byteOffset+this.position%t.BYTES_PER_ELEMENT===0)DataStream.memcpy(this._buffer,this.byteOffset+this.position,t.buffer,0,t.byteLength),this.mapInt8Array(t.length);else for(var e=0;e<t.length;e++)this.writeInt8(t[e])},DataStream.prototype.writeUint32Array=function(t,e){if(this._realloc(4*t.length),t instanceof Uint32Array&&this.byteOffset+this.position%t.BYTES_PER_ELEMENT===0)DataStream.memcpy(this._buffer,this.byteOffset+this.position,t.buffer,0,t.byteLength),this.mapUint32Array(t.length,e);else for(var i=0;i<t.length;i++)this.writeUint32(t[i],e)},DataStream.prototype.writeUint16Array=function(t,e){if(this._realloc(2*t.length),t instanceof Uint16Array&&this.byteOffset+this.position%t.BYTES_PER_ELEMENT===0)DataStream.memcpy(this._buffer,this.byteOffset+this.position,t.buffer,0,t.byteLength),this.mapUint16Array(t.length,e);else for(var i=0;i<t.length;i++)this.writeUint16(t[i],e)},DataStream.prototype.writeUint8Array=function(t){if(this._realloc(+t.length),t instanceof Uint8Array&&this.byteOffset+this.position%t.BYTES_PER_ELEMENT===0)DataStream.memcpy(this._buffer,this.byteOffset+this.position,t.buffer,0,t.byteLength),this.mapUint8Array(t.length);else for(var e=0;e<t.length;e++)this.writeUint8(t[e])},DataStream.prototype.writeFloat64Array=function(t,e){if(this._realloc(8*t.length),t instanceof Float64Array&&this.byteOffset+this.position%t.BYTES_PER_ELEMENT===0)DataStream.memcpy(this._buffer,this.byteOffset+this.position,t.buffer,0,t.byteLength),this.mapFloat64Array(t.length,e);else for(var i=0;i<t.length;i++)this.writeFloat64(t[i],e)},DataStream.prototype.writeFloat32Array=function(t,e){if(this._realloc(4*t.length),t instanceof Float32Array&&this.byteOffset+this.position%t.BYTES_PER_ELEMENT===0)DataStream.memcpy(this._buffer,this.byteOffset+this.position,t.buffer,0,t.byteLength),this.mapFloat32Array(t.length,e);else for(var i=0;i<t.length;i++)this.writeFloat32(t[i],e)},DataStream.prototype.writeInt32=function(t,e){this._realloc(4),this._dataView.setInt32(this.position,t,null==e?this.endianness:e),this.position+=4},DataStream.prototype.writeInt16=function(t,e){this._realloc(2),this._dataView.setInt16(this.position,t,null==e?this.endianness:e),this.position+=2},DataStream.prototype.writeInt8=function(t){this._realloc(1),this._dataView.setInt8(this.position,t),this.position+=1},DataStream.prototype.writeUint32=function(t,e){this._realloc(4),this._dataView.setUint32(this.position,t,null==e?this.endianness:e),this.position+=4},DataStream.prototype.writeUint16=function(t,e){this._realloc(2),this._dataView.setUint16(this.position,t,null==e?this.endianness:e),this.position+=2},DataStream.prototype.writeUint8=function(t){this._realloc(1),this._dataView.setUint8(this.position,t),this.position+=1},DataStream.prototype.writeFloat32=function(t,e){this._realloc(4),this._dataView.setFloat32(this.position,t,null==e?this.endianness:e),this.position+=4},DataStream.prototype.writeFloat64=function(t,e){this._realloc(8),this._dataView.setFloat64(this.position,t,null==e?this.endianness:e),this.position+=8},DataStream.prototype.writeUCS2String=function(t,e,i){null==i&&(i=t.length);for(var r=0;r<t.length&&r<i;r++)this.writeUint16(t.charCodeAt(r),e);for(;r<i;r++)this.writeUint16(0)},DataStream.prototype.writeString=function(t,e,i){var r=0;if(null==e||"ASCII"==e)if(null!=i){for(var s=Math.min(t.length,i),r=0;r<s;r++)this.writeUint8(t.charCodeAt(r));for(;r<i;r++)this.writeUint8(0)}else for(r=0;r<t.length;r++)this.writeUint8(t.charCodeAt(r));else this.writeUint8Array(new TextEncoder(e).encode(t.substring(0,i)))},DataStream.prototype.writeCString=function(t,e){var i=0;if(null!=e){for(var r=Math.min(t.length,e),i=0;i<r;i++)this.writeUint8(t.charCodeAt(i));for(;i<e;i++)this.writeUint8(0)}else{for(i=0;i<t.length;i++)this.writeUint8(t.charCodeAt(i));this.writeUint8(0)}},DataStream.prototype.writeStruct=function(t,e){for(var i=0;i<t.length;i+=2){var r=t[i+1];this.writeType(r,e[t[i]],e)}},DataStream.prototype.writeType=function(t,e,i){var r;if("function"==typeof t)return t(this,e);if("object"==typeof t&&!(t instanceof Array))return t.set(this,e,i);var s=null,a="ASCII",i=this.position;switch("string"==typeof t&&/:/.test(t)&&(t=(r=t.split(":"))[0],s=parseInt(r[1])),"string"==typeof t&&/,/.test(t)&&(t=(r=t.split(","))[0],a=parseInt(r[1])),t){case"uint8":this.writeUint8(e);break;case"int8":this.writeInt8(e);break;case"uint16":this.writeUint16(e,this.endianness);break;case"int16":this.writeInt16(e,this.endianness);break;case"uint32":this.writeUint32(e,this.endianness);break;case"int32":this.writeInt32(e,this.endianness);break;case"float32":this.writeFloat32(e,this.endianness);break;case"float64":this.writeFloat64(e,this.endianness);break;case"uint16be":this.writeUint16(e,DataStream.BIG_ENDIAN);break;case"int16be":this.writeInt16(e,DataStream.BIG_ENDIAN);break;case"uint32be":this.writeUint32(e,DataStream.BIG_ENDIAN);break;case"int32be":this.writeInt32(e,DataStream.BIG_ENDIAN);break;case"float32be":this.writeFloat32(e,DataStream.BIG_ENDIAN);break;case"float64be":this.writeFloat64(e,DataStream.BIG_ENDIAN);break;case"uint16le":this.writeUint16(e,DataStream.LITTLE_ENDIAN);break;case"int16le":this.writeInt16(e,DataStream.LITTLE_ENDIAN);break;case"uint32le":this.writeUint32(e,DataStream.LITTLE_ENDIAN);break;case"int32le":this.writeInt32(e,DataStream.LITTLE_ENDIAN);break;case"float32le":this.writeFloat32(e,DataStream.LITTLE_ENDIAN);break;case"float64le":this.writeFloat64(e,DataStream.LITTLE_ENDIAN);break;case"cstring":this.writeCString(e,s);break;case"string":this.writeString(e,a,s);break;case"u16string":this.writeUCS2String(e,this.endianness,s);break;case"u16stringle":this.writeUCS2String(e,DataStream.LITTLE_ENDIAN,s);break;case"u16stringbe":this.writeUCS2String(e,DataStream.BIG_ENDIAN,s);break;default:if(3==t.length){for(var n=t[1],o=0;o<e.length;o++)this.writeType(n,e[o]);break}this.writeStruct(t,e)}null!=s&&(this.position=i,this._realloc(s),this.position=i+s)},DataStream.prototype.writeUint64=function(t){var e=Math.floor(t/MAX_SIZE);this.writeUint32(e),this.writeUint32(4294967295&t)},DataStream.prototype.writeUint24=function(t){this.writeUint8((16711680&t)>>16),this.writeUint8((65280&t)>>8),this.writeUint8(255&t)},DataStream.prototype.adjustUint32=function(t,e){var i=this.position;this.seek(t),this.writeUint32(e),this.seek(i)},DataStream.prototype.mapInt32Array=function(t,e){this._realloc(4*t);var i=new Int32Array(this._buffer,this.byteOffset+this.position,t);return DataStream.arrayToNative(i,null==e?this.endianness:e),this.position+=4*t,i},DataStream.prototype.mapInt16Array=function(t,e){this._realloc(2*t);var i=new Int16Array(this._buffer,this.byteOffset+this.position,t);return DataStream.arrayToNative(i,null==e?this.endianness:e),this.position+=2*t,i},DataStream.prototype.mapInt8Array=function(t){this._realloc(+t);var e=new Int8Array(this._buffer,this.byteOffset+this.position,t);return this.position+=+t,e},DataStream.prototype.mapUint32Array=function(t,e){this._realloc(4*t);var i=new Uint32Array(this._buffer,this.byteOffset+this.position,t);return DataStream.arrayToNative(i,null==e?this.endianness:e),this.position+=4*t,i},DataStream.prototype.mapUint16Array=function(t,e){this._realloc(2*t);var i=new Uint16Array(this._buffer,this.byteOffset+this.position,t);return DataStream.arrayToNative(i,null==e?this.endianness:e),this.position+=2*t,i},DataStream.prototype.mapFloat64Array=function(t,e){this._realloc(8*t);var i=new Float64Array(this._buffer,this.byteOffset+this.position,t);return DataStream.arrayToNative(i,null==e?this.endianness:e),this.position+=8*t,i},DataStream.prototype.mapFloat32Array=function(t,e){this._realloc(4*t);var i=new Float32Array(this._buffer,this.byteOffset+this.position,t);return DataStream.arrayToNative(i,null==e?this.endianness:e),this.position+=4*t,i};var MultiBufferStream=function(t){this.buffers=[],this.bufferIndex=-1,t&&(this.insertBuffer(t),this.bufferIndex=0)};MultiBufferStream.prototype=new DataStream(new ArrayBuffer,0,DataStream.BIG_ENDIAN),MultiBufferStream.prototype.initialized=function(){var t;return-1<this.bufferIndex||(0<this.buffers.length?0===(t=this.buffers[0]).fileStart?(this.buffer=t,this.bufferIndex=0,Log.debug("MultiBufferStream","Stream ready for parsing"),!0):(Log.warn("MultiBufferStream","The first buffer should have a fileStart of 0"),this.logBufferLevel(),!1):(Log.warn("MultiBufferStream","No buffer to start parsing from"),this.logBufferLevel(),!1))},ArrayBuffer.concat=function(t,e){Log.debug("ArrayBuffer","Trying to create a new buffer of size: "+(t.byteLength+e.byteLength));var i=new Uint8Array(t.byteLength+e.byteLength);return i.set(new Uint8Array(t),0),i.set(new Uint8Array(e),t.byteLength),i.buffer},MultiBufferStream.prototype.reduceBuffer=function(t,e,i){var r=new Uint8Array(i);return r.set(new Uint8Array(t,e,i)),r.buffer.fileStart=t.fileStart+e,r.buffer.usedBytes=0,r.buffer},MultiBufferStream.prototype.insertBuffer=function(t){for(var e=!0,i=0;i<this.buffers.length;i++){var r=this.buffers[i];if(t.fileStart<=r.fileStart){if(t.fileStart===r.fileStart){if(t.byteLength>r.byteLength){this.buffers.splice(i,1),i--;continue}Log.warn("MultiBufferStream","Buffer (fileStart: "+t.fileStart+" - Length: "+t.byteLength+") already appended, ignoring")}else t.fileStart+t.byteLength<=r.fileStart||(t=this.reduceBuffer(t,0,r.fileStart-t.fileStart)),Log.debug("MultiBufferStream","Appending new buffer (fileStart: "+t.fileStart+" - Length: "+t.byteLength+")"),this.buffers.splice(i,0,t),0===i&&(this.buffer=t);e=!1;break}if(t.fileStart<r.fileStart+r.byteLength){var s=r.fileStart+r.byteLength-t.fileStart,r=t.byteLength-s;if(!(0<r)){e=!1;break}t=this.reduceBuffer(t,s,r)}}e&&(Log.debug("MultiBufferStream","Appending new buffer (fileStart: "+t.fileStart+" - Length: "+t.byteLength+")"),this.buffers.push(t),0===i&&(this.buffer=t))},MultiBufferStream.prototype.logBufferLevel=function(t){for(var e,i,r=[],s="",a=0,n=0,o=0;o<this.buffers.length;o++)e=this.buffers[o],0===o?(i={},r.push(i),i.start=e.fileStart,i.end=e.fileStart+e.byteLength,s+="["+i.start+"-"):i.end===e.fileStart?i.end=e.fileStart+e.byteLength:((i={}).start=e.fileStart,s+=r[r.length-1].end-1+"], ["+i.start+"-",i.end=e.fileStart+e.byteLength,r.push(i)),a+=e.usedBytes,n+=e.byteLength;0<r.length&&(s+=i.end-1+"]");t=t?Log.info:Log.debug;0===this.buffers.length?t("MultiBufferStream","No more buffer in memory"):t("MultiBufferStream",this.buffers.length+" stored buffer(s) ("+a+"/"+n+" bytes), continuous ranges: "+s)},MultiBufferStream.prototype.cleanBuffers=function(){for(var t,e=0;e<this.buffers.length;e++)(t=this.buffers[e]).usedBytes===t.byteLength&&(Log.debug("MultiBufferStream","Removing buffer #"+e),this.buffers.splice(e,1),e--)},MultiBufferStream.prototype.mergeNextBuffer=function(){var t;if(this.bufferIndex+1<this.buffers.length){if((t=this.buffers[this.bufferIndex+1]).fileStart!==this.buffer.fileStart+this.buffer.byteLength)return!1;var e=this.buffer.byteLength,i=this.buffer.usedBytes,r=this.buffer.fileStart;return this.buffers[this.bufferIndex]=ArrayBuffer.concat(this.buffer,t),this.buffer=this.buffers[this.bufferIndex],this.buffers.splice(this.bufferIndex+1,1),this.buffer.usedBytes=i,this.buffer.fileStart=r,Log.debug("ISOFile","Concatenating buffer for box parsing (length: "+e+"->"+this.buffer.byteLength+")"),!0}return!1},MultiBufferStream.prototype.findPosition=function(t,e,i){for(var r=null,s=-1,a=!0===t?0:this.bufferIndex;a<this.buffers.length&&(r=this.buffers[a]).fileStart<=e;)s=a,i&&(r.fileStart+r.byteLength<=e?r.usedBytes=r.byteLength:r.usedBytes=e-r.fileStart,this.logBufferLevel()),a++;return-1!==s&&(r=this.buffers[s]).fileStart+r.byteLength>=e?(Log.debug("MultiBufferStream","Found position in existing buffer #"+s),s):-1},MultiBufferStream.prototype.findEndContiguousBuf=function(t){var e,i,t=void 0!==t?t:this.bufferIndex,r=this.buffers[t];if(this.buffers.length>t+1)for(e=t+1;e<this.buffers.length&&(i=this.buffers[e]).fileStart===r.fileStart+r.byteLength;e++)r=i;return r.fileStart+r.byteLength},MultiBufferStream.prototype.getEndFilePositionAfter=function(t){var e=this.findPosition(!0,t,!1);return-1!==e?this.findEndContiguousBuf(e):t},MultiBufferStream.prototype.addUsedBytes=function(t){this.buffer.usedBytes+=t,this.logBufferLevel()},MultiBufferStream.prototype.setAllUsedBytes=function(){this.buffer.usedBytes=this.buffer.byteLength,this.logBufferLevel()},MultiBufferStream.prototype.seek=function(t,e,i){i=this.findPosition(e,t,i);return-1!==i?(this.buffer=this.buffers[i],this.bufferIndex=i,this.position=t-this.buffer.fileStart,Log.debug("MultiBufferStream","Repositioning parser at buffer position: "+this.position),!0):(Log.debug("MultiBufferStream","Position "+t+" not found in buffered data"),!1)},MultiBufferStream.prototype.getPosition=function(){if(-1===this.bufferIndex||null===this.buffers[this.bufferIndex])throw"Error accessing position in the MultiBufferStream";return this.buffers[this.bufferIndex].fileStart+this.position},MultiBufferStream.prototype.getLength=function(){return this.byteLength},MultiBufferStream.prototype.getEndPosition=function(){if(-1===this.bufferIndex||null===this.buffers[this.bufferIndex])throw"Error accessing position in the MultiBufferStream";return this.buffers[this.bufferIndex].fileStart+this.byteLength},"undefined"!=typeof exports&&(exports.MultiBufferStream=MultiBufferStream);var MPEG4DescriptorParser=function(){var s=[];s[3]="ES_Descriptor",s[4]="DecoderConfigDescriptor",s[5]="DecoderSpecificInfo",s[6]="SLConfigDescriptor",this.getDescriptorName=function(t){return s[t]};var r=this,a={};return this.parseOneDescriptor=function(t){var e,i=0,r=t.readUint8();for(e=t.readUint8(),0;128&e;)i=(127&e)<<7,e=t.readUint8(),0;return i+=127&e,Log.debug("MPEG4DescriptorParser","Found "+(s[r]||"Descriptor "+r)+", size "+i+" at position "+t.getPosition()),(r=new(s[r]?a[s[r]]:a.Descriptor)(i)).parse(t),r},a.Descriptor=function(t,e){this.tag=t,this.size=e,this.descs=[]},a.Descriptor.prototype.parse=function(t){this.data=t.readUint8Array(this.size)},a.Descriptor.prototype.findDescriptor=function(t){for(var e=0;e<this.descs.length;e++)if(this.descs[e].tag==t)return this.descs[e];return null},a.Descriptor.prototype.parseRemainingDescriptors=function(t){for(var e=t.position;t.position<e+this.size;){var i=r.parseOneDescriptor(t);this.descs.push(i)}},a.ES_Descriptor=function(t){a.Descriptor.call(this,3,t)},a.ES_Descriptor.prototype=new a.Descriptor,a.ES_Descriptor.prototype.parse=function(t){var e;this.ES_ID=t.readUint16(),this.flags=t.readUint8(),this.size-=3,128&this.flags?(this.dependsOn_ES_ID=t.readUint16(),this.size-=2):this.dependsOn_ES_ID=0,64&this.flags?(e=t.readUint8(),this.URL=t.readString(e),this.size-=e+1):this.URL="",32&this.flags?(this.OCR_ES_ID=t.readUint16(),this.size-=2):this.OCR_ES_ID=0,this.parseRemainingDescriptors(t)},a.ES_Descriptor.prototype.getOTI=function(t){var e=this.findDescriptor(4);return e?e.oti:0},a.ES_Descriptor.prototype.getAudioConfig=function(t){var e=this.findDescriptor(4);if(!e)return null;var i=e.findDescriptor(5);if(i&&i.data){e=(248&i.data[0])>>3;return 31===e&&2<=i.data.length&&(e=32+((7&i.data[0])<<3)+((224&i.data[1])>>5)),e}return null},a.DecoderConfigDescriptor=function(t){a.Descriptor.call(this,4,t)},a.DecoderConfigDescriptor.prototype=new a.Descriptor,a.DecoderConfigDescriptor.prototype.parse=function(t){this.oti=t.readUint8(),this.streamType=t.readUint8(),this.upStream=0!=(this.streamType>>1&1),this.streamType=this.streamType>>>2,this.bufferSize=t.readUint24(),this.maxBitrate=t.readUint32(),this.avgBitrate=t.readUint32(),this.size-=13,this.parseRemainingDescriptors(t)},a.DecoderSpecificInfo=function(t){a.Descriptor.call(this,5,t)},a.DecoderSpecificInfo.prototype=new a.Descriptor,a.SLConfigDescriptor=function(t){a.Descriptor.call(this,6,t)},a.SLConfigDescriptor.prototype=new a.Descriptor,this};"undefined"!=typeof exports&&(exports.MPEG4DescriptorParser=MPEG4DescriptorParser);var BoxParser={ERR_INVALID_DATA:-1,ERR_NOT_ENOUGH_DATA:0,OK:1,BASIC_BOXES:["mdat","idat","free","skip","meco","strk"],FULL_BOXES:["hmhd","nmhd","iods","xml ","bxml","ipro","mere"],CONTAINER_BOXES:[["moov",["trak","pssh"]],["trak"],["edts"],["mdia"],["minf"],["dinf"],["stbl",["sgpd","sbgp"]],["mvex",["trex"]],["moof",["traf"]],["traf",["trun","sgpd","sbgp"]],["vttc"],["tref"],["iref"],["mfra",["tfra"]],["meco"],["hnti"],["hinf"],["strk"],["strd"],["sinf"],["rinf"],["schi"],["trgr"],["udta",["kind"]],["iprp",["ipma"]],["ipco"],["grpl"],["j2kH"],["etyp",["tyco"]]],boxCodes:[],fullBoxCodes:[],containerBoxCodes:[],sampleEntryCodes:{},sampleGroupEntryCodes:[],trackGroupTypes:[],UUIDBoxes:{},UUIDs:[],initialize:function(){BoxParser.FullBox.prototype=new BoxParser.Box,BoxParser.ContainerBox.prototype=new BoxParser.Box,BoxParser.SampleEntry.prototype=new BoxParser.Box,BoxParser.TrackGroupTypeBox.prototype=new BoxParser.FullBox,BoxParser.BASIC_BOXES.forEach(function(t){BoxParser.createBoxCtor(t)}),BoxParser.FULL_BOXES.forEach(function(t){BoxParser.createFullBoxCtor(t)}),BoxParser.CONTAINER_BOXES.forEach(function(t){BoxParser.createContainerBoxCtor(t[0],null,t[1])})},Box:function(t,e,i){this.type=t,this.size=e,this.uuid=i},FullBox:function(t,e,i){BoxParser.Box.call(this,t,e,i),this.flags=0,this.version=0},ContainerBox:function(t,e,i){BoxParser.Box.call(this,t,e,i),this.boxes=[]},SampleEntry:function(t,e,i,r){BoxParser.ContainerBox.call(this,t,e),this.hdr_size=i,this.start=r},SampleGroupEntry:function(t){this.grouping_type=t},TrackGroupTypeBox:function(t,e){BoxParser.FullBox.call(this,t,e)},createBoxCtor:function(e,t){BoxParser.boxCodes.push(e),BoxParser[e+"Box"]=function(t){BoxParser.Box.call(this,e,t)},BoxParser[e+"Box"].prototype=new BoxParser.Box,t&&(BoxParser[e+"Box"].prototype.parse=t)},createFullBoxCtor:function(e,i){BoxParser[e+"Box"]=function(t){BoxParser.FullBox.call(this,e,t)},BoxParser[e+"Box"].prototype=new BoxParser.FullBox,BoxParser[e+"Box"].prototype.parse=function(t){this.parseFullHeader(t),i&&i.call(this,t)}},addSubBoxArrays:function(t){if(t)for(var e=(this.subBoxNames=t).length,i=0;i<e;i++)this[t[i]+"s"]=[]},createContainerBoxCtor:function(e,t,i){BoxParser[e+"Box"]=function(t){BoxParser.ContainerBox.call(this,e,t),BoxParser.addSubBoxArrays.call(this,i)},BoxParser[e+"Box"].prototype=new BoxParser.ContainerBox,t&&(BoxParser[e+"Box"].prototype.parse=t)},createMediaSampleEntryCtor:function(t,e,i){BoxParser.sampleEntryCodes[t]=[],BoxParser[t+"SampleEntry"]=function(t,e){BoxParser.SampleEntry.call(this,t,e),BoxParser.addSubBoxArrays.call(this,i)},BoxParser[t+"SampleEntry"].prototype=new BoxParser.SampleEntry,e&&(BoxParser[t+"SampleEntry"].prototype.parse=e)},createSampleEntryCtor:function(e,i,t,r){BoxParser.sampleEntryCodes[e].push(i),BoxParser[i+"SampleEntry"]=function(t){BoxParser[e+"SampleEntry"].call(this,i,t),BoxParser.addSubBoxArrays.call(this,r)},BoxParser[i+"SampleEntry"].prototype=new BoxParser[e+"SampleEntry"],t&&(BoxParser[i+"SampleEntry"].prototype.parse=t)},createEncryptedSampleEntryCtor:function(t,e,i){BoxParser.createSampleEntryCtor.call(this,t,e,i,["sinf"])},createSampleGroupCtor:function(e,t){BoxParser[e+"SampleGroupEntry"]=function(t){BoxParser.SampleGroupEntry.call(this,e,t)},BoxParser[e+"SampleGroupEntry"].prototype=new BoxParser.SampleGroupEntry,t&&(BoxParser[e+"SampleGroupEntry"].prototype.parse=t)},createTrackGroupCtor:function(e,t){BoxParser[e+"TrackGroupTypeBox"]=function(t){BoxParser.TrackGroupTypeBox.call(this,e,t)},BoxParser[e+"TrackGroupTypeBox"].prototype=new BoxParser.TrackGroupTypeBox,t&&(BoxParser[e+"TrackGroupTypeBox"].prototype.parse=t)},createUUIDBox:function(e,i,r,s){BoxParser.UUIDs.push(e),BoxParser.UUIDBoxes[e]=function(t){(i?BoxParser.FullBox:r?BoxParser.ContainerBox:BoxParser.Box).call(this,"uuid",t,e)},BoxParser.UUIDBoxes[e].prototype=new(i?BoxParser.FullBox:r?BoxParser.ContainerBox:BoxParser.Box),s&&(BoxParser.UUIDBoxes[e].prototype.parse=i?function(t){this.parseFullHeader(t),s&&s.call(this,t)}:s)}};function ColorPoint(t,e){this.x=t,this.y=e}function Pixel(t,e){this.bad_pixel_row=t,this.bad_pixel_column=e}BoxParser.initialize(),BoxParser.TKHD_FLAG_ENABLED=1,BoxParser.TKHD_FLAG_IN_MOVIE=2,BoxParser.TKHD_FLAG_IN_PREVIEW=4,BoxParser.TFHD_FLAG_BASE_DATA_OFFSET=1,BoxParser.TFHD_FLAG_SAMPLE_DESC=2,BoxParser.TFHD_FLAG_SAMPLE_DUR=8,BoxParser.TFHD_FLAG_SAMPLE_SIZE=16,BoxParser.TFHD_FLAG_SAMPLE_FLAGS=32,BoxParser.TFHD_FLAG_DUR_EMPTY=65536,BoxParser.TFHD_FLAG_DEFAULT_BASE_IS_MOOF=131072,BoxParser.TRUN_FLAGS_DATA_OFFSET=1,BoxParser.TRUN_FLAGS_FIRST_FLAG=4,BoxParser.TRUN_FLAGS_DURATION=256,BoxParser.TRUN_FLAGS_SIZE=512,BoxParser.TRUN_FLAGS_FLAGS=1024,BoxParser.TRUN_FLAGS_CTS_OFFSET=2048,BoxParser.Box.prototype.add=function(t){return this.addBox(new BoxParser[t+"Box"])},BoxParser.Box.prototype.addBox=function(t){return this.boxes.push(t),this[t.type+"s"]?this[t.type+"s"].push(t):this[t.type]=t,t},BoxParser.Box.prototype.set=function(t,e){return this[t]=e,this},BoxParser.Box.prototype.addEntry=function(t,e){e=e||"entries";return this[e]||(this[e]=[]),this[e].push(t),this},"undefined"!=typeof exports&&(exports.BoxParser=BoxParser),BoxParser.parseUUID=function(t){return BoxParser.parseHex16(t)},BoxParser.parseHex16=function(t){for(var e="",i=0;i<16;i++){var r=t.readUint8().toString(16);e+=1===r.length?"0"+r:r}return e},BoxParser.parseOneBox=function(t,e,i){var r,s,a=t.getPosition(),n=0;if(t.getEndPosition()-a<8)return Log.debug("BoxParser","Not enough data in stream to parse the type and size of the box"),{code:BoxParser.ERR_NOT_ENOUGH_DATA};if(i&&i<8)return Log.debug("BoxParser","Not enough bytes left in the parent box to parse a new box"),{code:BoxParser.ERR_NOT_ENOUGH_DATA};var o=t.readUint32(),h=t.readString(4),d=h;if(Log.debug("BoxParser","Found box of type '"+h+"' and size "+o+" at position "+a),n=8,"uuid"==h){if(t.getEndPosition()-t.getPosition()<16||i-n<16)return t.seek(a),Log.debug("BoxParser","Not enough bytes left in the parent box to parse a UUID box"),{code:BoxParser.ERR_NOT_ENOUGH_DATA};n+=16,d=s=BoxParser.parseUUID(t)}if(1==o){if(t.getEndPosition()-t.getPosition()<8||i&&i-n<8)return t.seek(a),Log.warn("BoxParser",'Not enough data in stream to parse the extended size of the "'+h+'" box'),{code:BoxParser.ERR_NOT_ENOUGH_DATA};o=t.readUint64(),n+=8}else if(0===o)if(i)o=i;else if("mdat"!==h)return Log.error("BoxParser","Unlimited box size not supported for type: '"+h+"'"),r=new BoxParser.Box(h,o),{code:BoxParser.OK,box:r,size:r.size};return 0!==o&&o<n?(Log.error("BoxParser","Box of type "+h+" has an invalid size "+o+" (too small to be a box)"),{code:BoxParser.ERR_NOT_ENOUGH_DATA,type:h,size:o,hdr_size:n,start:a}):0!==o&&i&&i<o?(Log.error("BoxParser","Box of type '"+h+"' has a size "+o+" greater than its container size "+i),{code:BoxParser.ERR_NOT_ENOUGH_DATA,type:h,size:o,hdr_size:n,start:a}):0!==o&&a+o>t.getEndPosition()?(t.seek(a),Log.info("BoxParser","Not enough data in stream to parse the entire '"+h+"' box"),{code:BoxParser.ERR_NOT_ENOUGH_DATA,type:h,size:o,hdr_size:n,start:a}):e?{code:BoxParser.OK,type:h,size:o,hdr_size:n,start:a}:(BoxParser[h+"Box"]?r=new BoxParser[h+"Box"](o):"uuid"!==h?(Log.warn("BoxParser","Unknown box type: '"+h+"'"),(r=new BoxParser.Box(h,o)).has_unparsed_data=!0):BoxParser.UUIDBoxes[s]?r=new BoxParser.UUIDBoxes[s](o):(Log.warn("BoxParser","Unknown uuid type: '"+s+"'"),(r=new BoxParser.Box(h,o)).uuid=s,r.has_unparsed_data=!0),r.hdr_size=n,r.start=a,r.write===BoxParser.Box.prototype.write&&"mdat"!==r.type&&(Log.info("BoxParser","'"+d+"' box writing not yet implemented, keeping unparsed data in memory for later write"),r.parseDataAndRewind(t)),r.parse(t),(a=t.getPosition()-(r.start+r.size))<0?(Log.warn("BoxParser","Parsing of box '"+d+"' did not read the entire indicated box data size (missing "+-a+" bytes), seeking forward"),t.seek(r.start+r.size)):0<a&&(Log.error("BoxParser","Parsing of box '"+d+"' read "+a+" more bytes than the indicated box data size, seeking backwards"),0!==r.size&&t.seek(r.start+r.size)),{code:BoxParser.OK,box:r,size:r.size})},BoxParser.Box.prototype.parse=function(t){"mdat"!=this.type?this.data=t.readUint8Array(this.size-this.hdr_size):0===this.size?t.seek(t.getEndPosition()):t.seek(this.start+this.size)},BoxParser.Box.prototype.parseDataAndRewind=function(t){this.data=t.readUint8Array(this.size-this.hdr_size),t.position-=this.size-this.hdr_size},BoxParser.FullBox.prototype.parseDataAndRewind=function(t){this.parseFullHeader(t),this.data=t.readUint8Array(this.size-this.hdr_size),this.hdr_size-=4,t.position-=this.size-this.hdr_size},BoxParser.FullBox.prototype.parseFullHeader=function(t){this.version=t.readUint8(),this.flags=t.readUint24(),this.hdr_size+=4},BoxParser.FullBox.prototype.parse=function(t){this.parseFullHeader(t),this.data=t.readUint8Array(this.size-this.hdr_size)},BoxParser.ContainerBox.prototype.parse=function(t){for(;t.getPosition()<this.start+this.size;){if((e=BoxParser.parseOneBox(t,!1,this.size-(t.getPosition()-this.start))).code!==BoxParser.OK)return;var e,i=e.box;this.boxes.push(i),this.subBoxNames&&-1!=this.subBoxNames.indexOf(i.type)?this[this.subBoxNames[this.subBoxNames.indexOf(i.type)]+"s"].push(i):this[e="uuid"!==i.type?i.type:i.uuid]?Log.warn("Box of type "+e+" already stored in field of this type"):this[e]=i}},BoxParser.Box.prototype.parseLanguage=function(t){this.language=t.readUint16();t=[];t[0]=this.language>>10&31,t[1]=this.language>>5&31,t[2]=31&this.language,this.languageString=String.fromCharCode(t[0]+96,t[1]+96,t[2]+96)},BoxParser.SAMPLE_ENTRY_TYPE_VISUAL="Visual",BoxParser.SAMPLE_ENTRY_TYPE_AUDIO="Audio",BoxParser.SAMPLE_ENTRY_TYPE_HINT="Hint",BoxParser.SAMPLE_ENTRY_TYPE_METADATA="Metadata",BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE="Subtitle",BoxParser.SAMPLE_ENTRY_TYPE_SYSTEM="System",BoxParser.SAMPLE_ENTRY_TYPE_TEXT="Text",BoxParser.SampleEntry.prototype.parseHeader=function(t){t.readUint8Array(6),this.data_reference_index=t.readUint16(),this.hdr_size+=8},BoxParser.SampleEntry.prototype.parse=function(t){this.parseHeader(t),this.data=t.readUint8Array(this.size-this.hdr_size)},BoxParser.SampleEntry.prototype.parseDataAndRewind=function(t){this.parseHeader(t),this.data=t.readUint8Array(this.size-this.hdr_size),this.hdr_size-=8,t.position-=this.size-this.hdr_size},BoxParser.SampleEntry.prototype.parseFooter=function(t){BoxParser.ContainerBox.prototype.parse.call(this,t)},BoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_HINT),BoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_METADATA),BoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE),BoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SYSTEM),BoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_TEXT),BoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL,function(t){var e;this.parseHeader(t),t.readUint16(),t.readUint16(),t.readUint32Array(3),this.width=t.readUint16(),this.height=t.readUint16(),this.horizresolution=t.readUint32(),this.vertresolution=t.readUint32(),t.readUint32(),this.frame_count=t.readUint16(),e=Math.min(31,t.readUint8()),this.compressorname=t.readString(e),e<31&&t.readString(31-e),this.depth=t.readUint16(),t.readUint16(),this.parseFooter(t)}),BoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO,function(t){this.parseHeader(t),t.readUint32Array(2),this.channel_count=t.readUint16(),this.samplesize=t.readUint16(),t.readUint16(),t.readUint16(),this.samplerate=t.readUint32()/65536,this.parseFooter(t)}),BoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL,"avc1"),BoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL,"avc2"),BoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL,"avc3"),BoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL,"avc4"),BoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL,"av01"),BoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL,"dav1"),BoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL,"hvc1"),BoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL,"hev1"),BoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL,"hvt1"),BoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL,"lhe1"),BoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL,"dvh1"),BoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL,"dvhe"),BoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL,"vvc1"),BoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL,"vvi1"),BoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL,"vvs1"),BoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL,"vvcN"),BoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL,"vp08"),BoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL,"vp09"),BoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL,"avs3"),BoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL,"j2ki"),BoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL,"mjp2"),BoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL,"mjpg"),BoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL,"uncv"),BoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO,"mp4a"),BoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO,"ac-3"),BoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO,"ac-4"),BoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO,"ec-3"),BoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO,"Opus"),BoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO,"mha1"),BoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO,"mha2"),BoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO,"mhm1"),BoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO,"mhm2"),BoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL,"encv"),BoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO,"enca"),BoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE,"encu"),BoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SYSTEM,"encs"),BoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_TEXT,"enct"),BoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_METADATA,"encm"),BoxParser.createBoxCtor("a1lx",function(t){var e=16*(1+(1&(1&t.readUint8())));this.layer_size=[];for(var i=0;i<3;i++)this.layer_size[i]=16==e?t.readUint16():t.readUint32()}),BoxParser.createBoxCtor("a1op",function(t){this.op_index=t.readUint8()}),BoxParser.createFullBoxCtor("auxC",function(t){this.aux_type=t.readCString();var e=this.size-this.hdr_size-(this.aux_type.length+1);this.aux_subtype=t.readUint8Array(e)}),BoxParser.createBoxCtor("av1C",function(t){var e=t.readUint8();if(e>>7&!1)Log.error("av1C marker problem");else if(this.version=127&e,1===this.version)if(e=t.readUint8(),this.seq_profile=e>>5&7,this.seq_level_idx_0=31&e,e=t.readUint8(),this.seq_tier_0=e>>7&1,this.high_bitdepth=e>>6&1,this.twelve_bit=e>>5&1,this.monochrome=e>>4&1,this.chroma_subsampling_x=e>>3&1,this.chroma_subsampling_y=e>>2&1,this.chroma_sample_position=3&e,e=t.readUint8(),this.reserved_1=e>>5&7,0===this.reserved_1){if(this.initial_presentation_delay_present=e>>4&1,1===this.initial_presentation_delay_present)this.initial_presentation_delay_minus_one=15&e;else if(this.reserved_2=15&e,0!==this.reserved_2)return void Log.error("av1C reserved_2 parsing problem");e=this.size-this.hdr_size-4;this.configOBUs=t.readUint8Array(e)}else Log.error("av1C reserved_1 parsing problem");else Log.error("av1C version "+this.version+" not supported")}),BoxParser.createBoxCtor("avcC",function(t){var e,i;for(this.configurationVersion=t.readUint8(),this.AVCProfileIndication=t.readUint8(),this.profile_compatibility=t.readUint8(),this.AVCLevelIndication=t.readUint8(),this.lengthSizeMinusOne=3&t.readUint8(),this.nb_SPS_nalus=31&t.readUint8(),i=this.size-this.hdr_size-6,this.SPS=[],e=0;e<this.nb_SPS_nalus;e++)this.SPS[e]={},this.SPS[e].length=t.readUint16(),this.SPS[e].nalu=t.readUint8Array(this.SPS[e].length),i-=2+this.SPS[e].length;for(this.nb_PPS_nalus=t.readUint8(),i--,this.PPS=[],e=0;e<this.nb_PPS_nalus;e++)this.PPS[e]={},this.PPS[e].length=t.readUint16(),this.PPS[e].nalu=t.readUint8Array(this.PPS[e].length),i-=2+this.PPS[e].length;0<i&&(this.ext=t.readUint8Array(i))}),BoxParser.createBoxCtor("btrt",function(t){this.bufferSizeDB=t.readUint32(),this.maxBitrate=t.readUint32(),this.avgBitrate=t.readUint32()}),BoxParser.createFullBoxCtor("ccst",function(t){var e=t.readUint8();this.all_ref_pics_intra=128==(128&e),this.intra_pred_used=64==(64&e),this.max_ref_per_pic=(63&e)>>2,t.readUint24()}),BoxParser.createBoxCtor("cdef",function(t){var e;for(this.channel_count=t.readUint16(),this.channel_indexes=[],this.channel_types=[],this.channel_associations=[],e=0;e<this.channel_count;e++)this.channel_indexes.push(t.readUint16()),this.channel_types.push(t.readUint16()),this.channel_associations.push(t.readUint16())}),BoxParser.createBoxCtor("clap",function(t){this.cleanApertureWidthN=t.readUint32(),this.cleanApertureWidthD=t.readUint32(),this.cleanApertureHeightN=t.readUint32(),this.cleanApertureHeightD=t.readUint32(),this.horizOffN=t.readUint32(),this.horizOffD=t.readUint32(),this.vertOffN=t.readUint32(),this.vertOffD=t.readUint32()}),BoxParser.createBoxCtor("clli",function(t){this.max_content_light_level=t.readUint16(),this.max_pic_average_light_level=t.readUint16()}),BoxParser.createFullBoxCtor("cmex",function(t){1&this.flags&&(this.pos_x=t.readInt32()),2&this.flags&&(this.pos_y=t.readInt32()),4&this.flags&&(this.pos_z=t.readInt32()),8&this.flags&&(0==this.version?16&this.flags?(this.quat_x=t.readInt32(),this.quat_y=t.readInt32(),this.quat_z=t.readInt32()):(this.quat_x=t.readInt16(),this.quat_y=t.readInt16(),this.quat_z=t.readInt16()):this.version),32&this.flags&&(this.id=t.readUint32())}),BoxParser.createFullBoxCtor("cmin",function(t){this.focal_length_x=t.readInt32(),this.principal_point_x=t.readInt32(),this.principal_point_y=t.readInt32(),1&this.flags&&(this.focal_length_y=t.readInt32(),this.skew_factor=t.readInt32())}),BoxParser.createBoxCtor("cmpd",function(t){for(this.component_count=t.readUint32(),this.component_types=[],this.component_type_urls=[],i=0;i<this.component_count;i++){var e=t.readUint16();this.component_types.push(e),32768<=e&&this.component_type_urls.push(t.readCString())}}),BoxParser.createFullBoxCtor("co64",function(t){var e,i=t.readUint32();if(this.chunk_offsets=[],0===this.version)for(e=0;e<i;e++)this.chunk_offsets.push(t.readUint64())}),BoxParser.createFullBoxCtor("CoLL",function(t){this.maxCLL=t.readUint16(),this.maxFALL=t.readUint16()}),BoxParser.createBoxCtor("colr",function(t){var e;this.colour_type=t.readString(4),"nclx"===this.colour_type?(this.colour_primaries=t.readUint16(),this.transfer_characteristics=t.readUint16(),this.matrix_coefficients=t.readUint16(),e=t.readUint8(),this.full_range_flag=e>>7):"rICC"!==this.colour_type&&"prof"!==this.colour_type||(this.ICC_profile=t.readUint8Array(this.size-4))}),BoxParser.createFullBoxCtor("cprt",function(t){this.parseLanguage(t),this.notice=t.readCString()}),BoxParser.createFullBoxCtor("cslg",function(t){0===this.version&&(this.compositionToDTSShift=t.readInt32(),this.leastDecodeToDisplayDelta=t.readInt32(),this.greatestDecodeToDisplayDelta=t.readInt32(),this.compositionStartTime=t.readInt32(),this.compositionEndTime=t.readInt32())}),BoxParser.createFullBoxCtor("ctts",function(t){var e,i=t.readUint32();if(this.sample_counts=[],this.sample_offsets=[],0===this.version)for(e=0;e<i;e++){this.sample_counts.push(t.readUint32());var r=t.readInt32();r<0&&Log.warn("BoxParser","ctts box uses negative values without using version 1"),this.sample_offsets.push(r)}else if(1==this.version)for(e=0;e<i;e++)this.sample_counts.push(t.readUint32()),this.sample_offsets.push(t.readInt32())}),BoxParser.createBoxCtor("dac3",function(t){var e=t.readUint8(),i=t.readUint8(),t=t.readUint8();this.fscod=e>>6,this.bsid=e>>1&31,this.bsmod=(1&e)<<2|i>>6&3,this.acmod=i>>3&7,this.lfeon=i>>2&1,this.bit_rate_code=3&i|t>>5&7}),BoxParser.createBoxCtor("dec3",function(t){var e=t.readUint16();this.data_rate=e>>3,this.num_ind_sub=7&e,this.ind_subs=[];for(var i=0;i<this.num_ind_sub+1;i++){var r={};this.ind_subs.push(r);var s=t.readUint8(),a=t.readUint8(),n=t.readUint8();r.fscod=s>>6,r.bsid=s>>1&31,r.bsmod=(1&s)<<4|a>>4&15,r.acmod=a>>1&7,r.lfeon=1&a,r.num_dep_sub=n>>1&15,0<r.num_dep_sub&&(r.chan_loc=(1&n)<<8|t.readUint8())}}),BoxParser.createFullBoxCtor("dfLa",function(t){var e=[],i=["STREAMINFO","PADDING","APPLICATION","SEEKTABLE","VORBIS_COMMENT","CUESHEET","PICTURE","RESERVED"];for(this.parseFullHeader(t);;){var r=t.readUint8(),s=Math.min(127&r,i.length-1);if(s?t.readUint8Array(t.readUint24()):(t.readUint8Array(13),this.samplerate=t.readUint32()>>12,t.readUint8Array(20)),e.push(i[s]),128&r)break}this.numMetadataBlocks=e.length+" ("+e.join(", ")+")"}),BoxParser.createBoxCtor("dimm",function(t){this.bytessent=t.readUint64()}),BoxParser.createBoxCtor("dmax",function(t){this.time=t.readUint32()}),BoxParser.createBoxCtor("dmed",function(t){this.bytessent=t.readUint64()}),BoxParser.createBoxCtor("dOps",function(t){if(this.Version=t.readUint8(),this.OutputChannelCount=t.readUint8(),this.PreSkip=t.readUint16(),this.InputSampleRate=t.readUint32(),this.OutputGain=t.readInt16(),this.ChannelMappingFamily=t.readUint8(),0!==this.ChannelMappingFamily){this.StreamCount=t.readUint8(),this.CoupledCount=t.readUint8(),this.ChannelMapping=[];for(var e=0;e<this.OutputChannelCount;e++)this.ChannelMapping[e]=t.readUint8()}}),BoxParser.createFullBoxCtor("dref",function(t){var e;this.entries=[];for(var i=t.readUint32(),r=0;r<i;r++){if((e=BoxParser.parseOneBox(t,!1,this.size-(t.getPosition()-this.start))).code!==BoxParser.OK)return;e=e.box,this.entries.push(e)}}),BoxParser.createBoxCtor("drep",function(t){this.bytessent=t.readUint64()}),BoxParser.createFullBoxCtor("elng",function(t){this.extended_language=t.readString(this.size-this.hdr_size)}),BoxParser.createFullBoxCtor("elst",function(t){this.entries=[];for(var e=t.readUint32(),i=0;i<e;i++){var r={};this.entries.push(r),1===this.version?(r.segment_duration=t.readUint64(),r.media_time=t.readInt64()):(r.segment_duration=t.readUint32(),r.media_time=t.readInt32()),r.media_rate_integer=t.readInt16(),r.media_rate_fraction=t.readInt16()}}),BoxParser.createFullBoxCtor("emsg",function(t){1==this.version?(this.timescale=t.readUint32(),this.presentation_time=t.readUint64(),this.event_duration=t.readUint32(),this.id=t.readUint32(),this.scheme_id_uri=t.readCString(),this.value=t.readCString()):(this.scheme_id_uri=t.readCString(),this.value=t.readCString(),this.timescale=t.readUint32(),this.presentation_time_delta=t.readUint32(),this.event_duration=t.readUint32(),this.id=t.readUint32());var e=this.size-this.hdr_size-(16+(this.scheme_id_uri.length+1)+(this.value.length+1));1==this.version&&(e-=4),this.message_data=t.readUint8Array(e)}),BoxParser.createEntityToGroupCtor=function(e,r){BoxParser[e+"Box"]=function(t){BoxParser.FullBox.call(this,e,t)},BoxParser[e+"Box"].prototype=new BoxParser.FullBox,BoxParser[e+"Box"].prototype.parse=function(t){if(this.parseFullHeader(t),r)r.call(this,t);else for(this.group_id=t.readUint32(),this.num_entities_in_group=t.readUint32(),this.entity_ids=[],i=0;i<this.num_entities_in_group;i++){var e=t.readUint32();this.entity_ids.push(e)}}},BoxParser.createEntityToGroupCtor("aebr"),BoxParser.createEntityToGroupCtor("afbr"),BoxParser.createEntityToGroupCtor("albc"),BoxParser.createEntityToGroupCtor("altr"),BoxParser.createEntityToGroupCtor("brst"),BoxParser.createEntityToGroupCtor("dobr"),BoxParser.createEntityToGroupCtor("eqiv"),BoxParser.createEntityToGroupCtor("favc"),BoxParser.createEntityToGroupCtor("fobr"),BoxParser.createEntityToGroupCtor("iaug"),BoxParser.createEntityToGroupCtor("pano"),BoxParser.createEntityToGroupCtor("slid"),BoxParser.createEntityToGroupCtor("ster"),BoxParser.createEntityToGroupCtor("tsyn"),BoxParser.createEntityToGroupCtor("wbbr"),BoxParser.createEntityToGroupCtor("prgr"),BoxParser.createFullBoxCtor("esds",function(t){var e=t.readUint8Array(this.size-this.hdr_size);void 0!==MPEG4DescriptorParser&&(t=new MPEG4DescriptorParser,this.esd=t.parseOneDescriptor(new DataStream(e.buffer,0,DataStream.BIG_ENDIAN)))}),BoxParser.createBoxCtor("fiel",function(t){this.fieldCount=t.readUint8(),this.fieldOrdering=t.readUint8()}),BoxParser.createBoxCtor("frma",function(t){this.data_format=t.readString(4)}),BoxParser.createBoxCtor("ftyp",function(t){var e=this.size-this.hdr_size;this.major_brand=t.readString(4),this.minor_version=t.readUint32(),e-=8,this.compatible_brands=[];for(var i=0;4<=e;)this.compatible_brands[i]=t.readString(4),e-=4,i++}),BoxParser.createFullBoxCtor("hdlr",function(t){0===this.version&&(t.readUint32(),this.handler=t.readString(4),t.readUint32Array(3),this.name=t.readString(this.size-this.hdr_size-20),"\0"===this.name[this.name.length-1]&&(this.name=this.name.slice(0,-1)))}),BoxParser.createBoxCtor("hvcC",function(t){var e,i;this.configurationVersion=t.readUint8(),i=t.readUint8(),this.general_profile_space=i>>6,this.general_tier_flag=(32&i)>>5,this.general_profile_idc=31&i,this.general_profile_compatibility=t.readUint32(),this.general_constraint_indicator=t.readUint8Array(6),this.general_level_idc=t.readUint8(),this.min_spatial_segmentation_idc=4095&t.readUint16(),this.parallelismType=3&t.readUint8(),this.chroma_format_idc=3&t.readUint8(),this.bit_depth_luma_minus8=7&t.readUint8(),this.bit_depth_chroma_minus8=7&t.readUint8(),this.avgFrameRate=t.readUint16(),i=t.readUint8(),this.constantFrameRate=i>>6,this.numTemporalLayers=(13&i)>>3,this.temporalIdNested=(4&i)>>2,this.lengthSizeMinusOne=3&i,this.nalu_arrays=[];for(var r=t.readUint8(),s=0;s<r;s++){var a=[];this.nalu_arrays.push(a),i=t.readUint8(),a.completeness=(128&i)>>7,a.nalu_type=63&i;for(var n=t.readUint16(),o=0;o<n;o++){var h={};a.push(h),e=t.readUint16(),h.data=t.readUint8Array(e)}}}),BoxParser.createFullBoxCtor("iinf",function(t){var e;0===this.version?this.entry_count=t.readUint16():this.entry_count=t.readUint32(),this.item_infos=[];for(var i=0;i<this.entry_count;i++){if((e=BoxParser.parseOneBox(t,!1,this.size-(t.getPosition()-this.start))).code!==BoxParser.OK)return;"infe"!==e.box.type&&Log.error("BoxParser","Expected 'infe' box, got "+e.box.type),this.item_infos[i]=e.box}}),BoxParser.createFullBoxCtor("iloc",function(t){var e=t.readUint8();this.offset_size=e>>4&15,this.length_size=15&e,e=t.readUint8(),this.base_offset_size=e>>4&15,1===this.version||2===this.version?this.index_size=15&e:this.index_size=0,this.items=[];var i=0;if(this.version<2)i=t.readUint16();else{if(2!==this.version)throw"version of iloc box not supported";i=t.readUint32()}for(var r=0;r<i;r++){var s={};if(this.items.push(s),this.version<2)s.item_ID=t.readUint16();else{if(2!==this.version)throw"version of iloc box not supported";s.item_ID=t.readUint32()}switch(1===this.version||2===this.version?s.construction_method=15&t.readUint16():s.construction_method=0,s.data_reference_index=t.readUint16(),this.base_offset_size){case 0:s.base_offset=0;break;case 4:s.base_offset=t.readUint32();break;case 8:s.base_offset=t.readUint64();break;default:throw"Error reading base offset size"}var a=t.readUint16();s.extents=[];for(var n=0;n<a;n++){var o={};if(s.extents.push(o),1===this.version||2===this.version)switch(this.index_size){case 0:o.extent_index=0;break;case 4:o.extent_index=t.readUint32();break;case 8:o.extent_index=t.readUint64();break;default:throw"Error reading extent index"}switch(this.offset_size){case 0:o.extent_offset=0;break;case 4:o.extent_offset=t.readUint32();break;case 8:o.extent_offset=t.readUint64();break;default:throw"Error reading extent index"}switch(this.length_size){case 0:o.extent_length=0;break;case 4:o.extent_length=t.readUint32();break;case 8:o.extent_length=t.readUint64();break;default:throw"Error reading extent index"}}}}),BoxParser.createBoxCtor("imir",function(t){t=t.readUint8();this.reserved=t>>7,this.axis=1&t}),BoxParser.createFullBoxCtor("infe",function(t){return 0!==this.version&&1!==this.version||(this.item_ID=t.readUint16(),this.item_protection_index=t.readUint16(),this.item_name=t.readCString(),this.content_type=t.readCString(),this.content_encoding=t.readCString()),1===this.version?(this.extension_type=t.readString(4),Log.warn("BoxParser","Cannot parse extension type"),void t.seek(this.start+this.size)):void(2<=this.version&&(2===this.version?this.item_ID=t.readUint16():3===this.version&&(this.item_ID=t.readUint32()),this.item_protection_index=t.readUint16(),this.item_type=t.readString(4),this.item_name=t.readCString(),"mime"===this.item_type?(this.content_type=t.readCString(),this.content_encoding=t.readCString()):"uri "===this.item_type&&(this.item_uri_type=t.readCString())))}),BoxParser.createFullBoxCtor("ipma",function(t){var e,i;for(entry_count=t.readUint32(),this.associations=[],e=0;e<entry_count;e++){var r={};this.associations.push(r),this.version<1?r.id=t.readUint16():r.id=t.readUint32();var s=t.readUint8();for(r.props=[],i=0;i<s;i++){var a=t.readUint8(),n={};r.props.push(n),n.essential=(128&a)>>7==1,1&this.flags?n.property_index=(127&a)<<8|t.readUint8():n.property_index=127&a}}}),BoxParser.createFullBoxCtor("iref",function(t){var e;for(this.references=[];t.getPosition()<this.start+this.size;){if((e=BoxParser.parseOneBox(t,!0,this.size-(t.getPosition()-this.start))).code!==BoxParser.OK)return;(e=new(0===this.version?BoxParser.SingleItemTypeReferenceBox:BoxParser.SingleItemTypeReferenceBoxLarge)(e.type,e.size,e.hdr_size,e.start)).write===BoxParser.Box.prototype.write&&"mdat"!==e.type&&(Log.warn("BoxParser",e.type+" box writing not yet implemented, keeping unparsed data in memory for later write"),e.parseDataAndRewind(t)),e.parse(t),this.references.push(e)}}),BoxParser.createBoxCtor("irot",function(t){this.angle=3&t.readUint8()}),BoxParser.createFullBoxCtor("ispe",function(t){this.image_width=t.readUint32(),this.image_height=t.readUint32()}),BoxParser.createFullBoxCtor("kind",function(t){this.schemeURI=t.readCString(),this.value=t.readCString()}),BoxParser.createFullBoxCtor("leva",function(t){var e=t.readUint8();this.levels=[];for(var i=0;i<e;i++){var r={};(this.levels[i]=r).track_ID=t.readUint32();var s=t.readUint8();switch(r.padding_flag=s>>7,r.assignment_type=127&s,r.assignment_type){case 0:r.grouping_type=t.readString(4);break;case 1:r.grouping_type=t.readString(4),r.grouping_type_parameter=t.readUint32();break;case 2:case 3:break;case 4:r.sub_track_id=t.readUint32();break;default:Log.warn("BoxParser","Unknown leva assignement type")}}}),BoxParser.createBoxCtor("lsel",function(t){this.layer_id=t.readUint16()}),BoxParser.createBoxCtor("maxr",function(t){this.period=t.readUint32(),this.bytes=t.readUint32()}),ColorPoint.prototype.toString=function(){return"("+this.x+","+this.y+")"},BoxParser.createBoxCtor("mdcv",function(t){this.display_primaries=[],this.display_primaries[0]=new ColorPoint(t.readUint16(),t.readUint16()),this.display_primaries[1]=new ColorPoint(t.readUint16(),t.readUint16()),this.display_primaries[2]=new ColorPoint(t.readUint16(),t.readUint16()),this.white_point=new ColorPoint(t.readUint16(),t.readUint16()),this.max_display_mastering_luminance=t.readUint32(),this.min_display_mastering_luminance=t.readUint32()}),BoxParser.createFullBoxCtor("mdhd",function(t){1==this.version?(this.creation_time=t.readUint64(),this.modification_time=t.readUint64(),this.timescale=t.readUint32(),this.duration=t.readUint64()):(this.creation_time=t.readUint32(),this.modification_time=t.readUint32(),this.timescale=t.readUint32(),this.duration=t.readUint32()),this.parseLanguage(t),t.readUint16()}),BoxParser.createFullBoxCtor("mehd",function(t){1&this.flags&&(Log.warn("BoxParser","mehd box incorrectly uses flags set to 1, converting version to 1"),this.version=1),1==this.version?this.fragment_duration=t.readUint64():this.fragment_duration=t.readUint32()}),BoxParser.createFullBoxCtor("meta",function(t){this.boxes=[],BoxParser.ContainerBox.prototype.parse.call(this,t)}),BoxParser.createFullBoxCtor("mfhd",function(t){this.sequence_number=t.readUint32()}),BoxParser.createFullBoxCtor("mfro",function(t){this._size=t.readUint32()}),BoxParser.createFullBoxCtor("mskC",function(t){this.bits_per_pixel=t.readUint8()}),BoxParser.createFullBoxCtor("mvhd",function(t){1==this.version?(this.creation_time=t.readUint64(),this.modification_time=t.readUint64(),this.timescale=t.readUint32(),this.duration=t.readUint64()):(this.creation_time=t.readUint32(),this.modification_time=t.readUint32(),this.timescale=t.readUint32(),this.duration=t.readUint32()),this.rate=t.readUint32(),this.volume=t.readUint16()>>8,t.readUint16(),t.readUint32Array(2),this.matrix=t.readUint32Array(9),t.readUint32Array(6),this.next_track_id=t.readUint32()}),BoxParser.createBoxCtor("npck",function(t){this.packetssent=t.readUint32()}),BoxParser.createBoxCtor("nump",function(t){this.packetssent=t.readUint64()}),BoxParser.createFullBoxCtor("padb",function(t){var e=t.readUint32();this.padbits=[];for(var i=0;i<Math.floor((e+1)/2);i++)this.padbits=t.readUint8()}),BoxParser.createBoxCtor("pasp",function(t){this.hSpacing=t.readUint32(),this.vSpacing=t.readUint32()}),BoxParser.createBoxCtor("payl",function(t){this.text=t.readString(this.size-this.hdr_size)}),BoxParser.createBoxCtor("payt",function(t){this.payloadID=t.readUint32();var e=t.readUint8();this.rtpmap_string=t.readString(e)}),BoxParser.createFullBoxCtor("pdin",function(t){var e=(this.size-this.hdr_size)/8;this.rate=[],this.initial_delay=[];for(var i=0;i<e;i++)this.rate[i]=t.readUint32(),this.initial_delay[i]=t.readUint32()}),BoxParser.createFullBoxCtor("pitm",function(t){0===this.version?this.item_id=t.readUint16():this.item_id=t.readUint32()}),BoxParser.createFullBoxCtor("pixi",function(t){var e;for(this.num_channels=t.readUint8(),this.bits_per_channels=[],e=0;e<this.num_channels;e++)this.bits_per_channels[e]=t.readUint8()}),BoxParser.createBoxCtor("pmax",function(t){this.bytes=t.readUint32()}),BoxParser.createFullBoxCtor("prdi",function(t){if(this.step_count=t.readUint16(),this.item_count=[],2&this.flags)for(var e=0;e<this.step_count;e++)this.item_count[e]=t.readUint16()}),BoxParser.createFullBoxCtor("prft",function(t){this.ref_track_id=t.readUint32(),this.ntp_timestamp=t.readUint64(),0===this.version?this.media_time=t.readUint32():this.media_time=t.readUint64()}),BoxParser.createFullBoxCtor("pssh",function(t){if(this.system_id=BoxParser.parseHex16(t),0<this.version){var e=t.readUint32();this.kid=[];for(var i=0;i<e;i++)this.kid[i]=BoxParser.parseHex16(t)}var r=t.readUint32();0<r&&(this.data=t.readUint8Array(r))}),BoxParser.createFullBoxCtor("clef",function(t){this.width=t.readUint32(),this.height=t.readUint32()}),BoxParser.createFullBoxCtor("enof",function(t){this.width=t.readUint32(),this.height=t.readUint32()}),BoxParser.createFullBoxCtor("prof",function(t){this.width=t.readUint32(),this.height=t.readUint32()}),BoxParser.createContainerBoxCtor("tapt",null,["clef","prof","enof"]),BoxParser.createBoxCtor("rtp ",function(t){this.descriptionformat=t.readString(4),this.sdptext=t.readString(this.size-this.hdr_size-4)}),BoxParser.createFullBoxCtor("saio",function(t){1&this.flags&&(this.aux_info_type=t.readUint32(),this.aux_info_type_parameter=t.readUint32());var e=t.readUint32();this.offset=[];for(var i=0;i<e;i++)0===this.version?this.offset[i]=t.readUint32():this.offset[i]=t.readUint64()}),BoxParser.createFullBoxCtor("saiz",function(t){1&this.flags&&(this.aux_info_type=t.readUint32(),this.aux_info_type_parameter=t.readUint32()),this.default_sample_info_size=t.readUint8();var e=t.readUint32();if(this.sample_info_size=[],0===this.default_sample_info_size)for(var i=0;i<e;i++)this.sample_info_size[i]=t.readUint8()}),BoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_METADATA,"mett",function(t){this.parseHeader(t),this.content_encoding=t.readCString(),this.mime_format=t.readCString(),this.parseFooter(t)}),BoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_METADATA,"metx",function(t){this.parseHeader(t),this.content_encoding=t.readCString(),this.namespace=t.readCString(),this.schema_location=t.readCString(),this.parseFooter(t)}),BoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE,"sbtt",function(t){this.parseHeader(t),this.content_encoding=t.readCString(),this.mime_format=t.readCString(),this.parseFooter(t)}),BoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE,"stpp",function(t){this.parseHeader(t),this.namespace=t.readCString(),this.schema_location=t.readCString(),this.auxiliary_mime_types=t.readCString(),this.parseFooter(t)}),BoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE,"stxt",function(t){this.parseHeader(t),this.content_encoding=t.readCString(),this.mime_format=t.readCString(),this.parseFooter(t)}),BoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE,"tx3g",function(t){this.parseHeader(t),this.displayFlags=t.readUint32(),this.horizontal_justification=t.readInt8(),this.vertical_justification=t.readInt8(),this.bg_color_rgba=t.readUint8Array(4),this.box_record=t.readInt16Array(4),this.style_record=t.readUint8Array(12),this.parseFooter(t)}),BoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_METADATA,"wvtt",function(t){this.parseHeader(t),this.parseFooter(t)}),BoxParser.createSampleGroupCtor("alst",function(t){var e,i=t.readUint16();for(this.first_output_sample=t.readUint16(),this.sample_offset=[],e=0;e<i;e++)this.sample_offset[e]=t.readUint32();var r=this.description_length-4-4*i;for(this.num_output_samples=[],this.num_total_samples=[],e=0;e<r/4;e++)this.num_output_samples[e]=t.readUint16(),this.num_total_samples[e]=t.readUint16()}),BoxParser.createSampleGroupCtor("avll",function(t){this.layerNumber=t.readUint8(),this.accurateStatisticsFlag=t.readUint8(),this.avgBitRate=t.readUint16(),this.avgFrameRate=t.readUint16()}),BoxParser.createSampleGroupCtor("avss",function(t){this.subSequenceIdentifier=t.readUint16(),this.layerNumber=t.readUint8();var e=t.readUint8();this.durationFlag=e>>7,this.avgRateFlag=e>>6&1,this.durationFlag&&(this.duration=t.readUint32()),this.avgRateFlag&&(this.accurateStatisticsFlag=t.readUint8(),this.avgBitRate=t.readUint16(),this.avgFrameRate=t.readUint16()),this.dependency=[];for(var i=t.readUint8(),r=0;r<i;r++){var s={};this.dependency.push(s),s.subSeqDirectionFlag=t.readUint8(),s.layerNumber=t.readUint8(),s.subSequenceIdentifier=t.readUint16()}}),BoxParser.createSampleGroupCtor("dtrt",function(t){Log.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}),BoxParser.createSampleGroupCtor("mvif",function(t){Log.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}),BoxParser.createSampleGroupCtor("prol",function(t){this.roll_distance=t.readInt16()}),BoxParser.createSampleGroupCtor("rap ",function(t){t=t.readUint8();this.num_leading_samples_known=t>>7,this.num_leading_samples=127&t}),BoxParser.createSampleGroupCtor("rash",function(t){if(this.operation_point_count=t.readUint16(),this.description_length!==2+(1===this.operation_point_count?2:6*this.operation_point_count)+9)Log.warn("BoxParser","Mismatch in "+this.grouping_type+" sample group length"),this.data=t.readUint8Array(this.description_length-2);else{if(1===this.operation_point_count)this.target_rate_share=t.readUint16();else{this.target_rate_share=[],this.available_bitrate=[];for(var e=0;e<this.operation_point_count;e++)this.available_bitrate[e]=t.readUint32(),this.target_rate_share[e]=t.readUint16()}this.maximum_bitrate=t.readUint32(),this.minimum_bitrate=t.readUint32(),this.discard_priority=t.readUint8()}}),BoxParser.createSampleGroupCtor("roll",function(t){this.roll_distance=t.readInt16()}),BoxParser.SampleGroupEntry.prototype.parse=function(t){Log.warn("BoxParser","Unknown Sample Group type: "+this.grouping_type),this.data=t.readUint8Array(this.description_length)},BoxParser.createSampleGroupCtor("scif",function(t){Log.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}),BoxParser.createSampleGroupCtor("scnm",function(t){Log.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}),BoxParser.createSampleGroupCtor("seig",function(t){this.reserved=t.readUint8();var e=t.readUint8();this.crypt_byte_block=e>>4,this.skip_byte_block=15&e,this.isProtected=t.readUint8(),this.Per_Sample_IV_Size=t.readUint8(),this.KID=BoxParser.parseHex16(t),this.constant_IV_size=0,this.constant_IV=0,1===this.isProtected&&0===this.Per_Sample_IV_Size&&(this.constant_IV_size=t.readUint8(),this.constant_IV=t.readUint8Array(this.constant_IV_size))}),BoxParser.createSampleGroupCtor("stsa",function(t){Log.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}),BoxParser.createSampleGroupCtor("sync",function(t){t=t.readUint8();this.NAL_unit_type=63&t}),BoxParser.createSampleGroupCtor("tele",function(t){t=t.readUint8();this.level_independently_decodable=t>>7}),BoxParser.createSampleGroupCtor("tsas",function(t){Log.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}),BoxParser.createSampleGroupCtor("tscl",function(t){Log.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}),BoxParser.createSampleGroupCtor("vipr",function(t){Log.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed")}),BoxParser.createFullBoxCtor("sbgp",function(t){this.grouping_type=t.readString(4),1===this.version?this.grouping_type_parameter=t.readUint32():this.grouping_type_parameter=0,this.entries=[];for(var e=t.readUint32(),i=0;i<e;i++){var r={};this.entries.push(r),r.sample_count=t.readInt32(),r.group_description_index=t.readInt32()}}),Pixel.prototype.toString=function(){return"[row: "+this.bad_pixel_row+", column: "+this.bad_pixel_column+"]"},BoxParser.createFullBoxCtor("sbpm",function(t){var e;for(this.component_count=t.readUint16(),this.component_index=[],e=0;e<this.component_count;e++)this.component_index.push(t.readUint16());var i=t.readUint8();for(this.correction_applied=128==(128&i),this.num_bad_rows=t.readUint32(),this.num_bad_cols=t.readUint32(),this.num_bad_pixels=t.readUint32(),this.bad_rows=[],this.bad_columns=[],this.bad_pixels=[],e=0;e<this.num_bad_rows;e++)this.bad_rows.push(t.readUint32());for(e=0;e<this.num_bad_cols;e++)this.bad_columns.push(t.readUint32());for(e=0;e<this.num_bad_pixels;e++){var r=t.readUint32(),s=t.readUint32();this.bad_pixels.push(new Pixel(r,s))}}),BoxParser.createFullBoxCtor("schm",function(t){this.scheme_type=t.readString(4),this.scheme_version=t.readUint32(),1&this.flags&&(this.scheme_uri=t.readString(this.size-this.hdr_size-8))}),BoxParser.createBoxCtor("sdp ",function(t){this.sdptext=t.readString(this.size-this.hdr_size)}),BoxParser.createFullBoxCtor("sdtp",function(t){var e,i=this.size-this.hdr_size;this.is_leading=[],this.sample_depends_on=[],this.sample_is_depended_on=[],this.sample_has_redundancy=[];for(var r=0;r<i;r++)e=t.readUint8(),this.is_leading[r]=e>>6,this.sample_depends_on[r]=e>>4&3,this.sample_is_depended_on[r]=e>>2&3,this.sample_has_redundancy[r]=3&e}),BoxParser.createFullBoxCtor("senc"),BoxParser.createFullBoxCtor("sgpd",function(t){this.grouping_type=t.readString(4),Log.debug("BoxParser","Found Sample Groups of type "+this.grouping_type),1===this.version?this.default_length=t.readUint32():this.default_length=0,2<=this.version&&(this.default_group_description_index=t.readUint32()),this.entries=[];for(var e=t.readUint32(),i=0;i<e;i++){var r=new(BoxParser[this.grouping_type+"SampleGroupEntry"]?BoxParser[this.grouping_type+"SampleGroupEntry"]:BoxParser.SampleGroupEntry)(this.grouping_type);this.entries.push(r),1===this.version&&0===this.default_length?r.description_length=t.readUint32():r.description_length=this.default_length,r.write===BoxParser.SampleGroupEntry.prototype.write&&(Log.info("BoxParser","SampleGroup for type "+this.grouping_type+" writing not yet implemented, keeping unparsed data in memory for later write"),r.data=t.readUint8Array(r.description_length),t.position-=r.description_length),r.parse(t)}}),BoxParser.createFullBoxCtor("sidx",function(t){this.reference_ID=t.readUint32(),this.timescale=t.readUint32(),0===this.version?(this.earliest_presentation_time=t.readUint32(),this.first_offset=t.readUint32()):(this.earliest_presentation_time=t.readUint64(),this.first_offset=t.readUint64()),t.readUint16(),this.references=[];for(var e=t.readUint16(),i=0;i<e;i++){var r={};this.references.push(r);var s=t.readUint32();r.reference_type=s>>31&1,r.referenced_size=2147483647&s,r.subsegment_duration=t.readUint32(),s=t.readUint32(),r.starts_with_SAP=s>>31&1,r.SAP_type=s>>28&7,r.SAP_delta_time=268435455&s}}),BoxParser.SingleItemTypeReferenceBox=function(t,e,i,r){BoxParser.Box.call(this,t,e),this.hdr_size=i,this.start=r},BoxParser.SingleItemTypeReferenceBox.prototype=new BoxParser.Box,BoxParser.SingleItemTypeReferenceBox.prototype.parse=function(t){this.from_item_ID=t.readUint16();var e=t.readUint16();this.references=[];for(var i=0;i<e;i++)this.references[i]={},this.references[i].to_item_ID=t.readUint16()},BoxParser.SingleItemTypeReferenceBoxLarge=function(t,e,i,r){BoxParser.Box.call(this,t,e),this.hdr_size=i,this.start=r},BoxParser.SingleItemTypeReferenceBoxLarge.prototype=new BoxParser.Box,BoxParser.SingleItemTypeReferenceBoxLarge.prototype.parse=function(t){this.from_item_ID=t.readUint32();var e=t.readUint16();this.references=[];for(var i=0;i<e;i++)this.references[i]={},this.references[i].to_item_ID=t.readUint32()},BoxParser.createFullBoxCtor("SmDm",function(t){this.primaryRChromaticity_x=t.readUint16(),this.primaryRChromaticity_y=t.readUint16(),this.primaryGChromaticity_x=t.readUint16(),this.primaryGChromaticity_y=t.readUint16(),this.primaryBChromaticity_x=t.readUint16(),this.primaryBChromaticity_y=t.readUint16(),this.whitePointChromaticity_x=t.readUint16(),this.whitePointChromaticity_y=t.readUint16(),this.luminanceMax=t.readUint32(),this.luminanceMin=t.readUint32()}),BoxParser.createFullBoxCtor("smhd",function(t){this.balance=t.readUint16(),t.readUint16()}),BoxParser.createFullBoxCtor("ssix",function(t){this.subsegments=[];for(var e=t.readUint32(),i=0;i<e;i++){var r={};this.subsegments.push(r),r.ranges=[];for(var s=t.readUint32(),a=0;a<s;a++){var n={};r.ranges.push(n),n.level=t.readUint8(),n.range_size=t.readUint24()}}}),BoxParser.createFullBoxCtor("stco",function(t){var e=t.readUint32();if(this.chunk_offsets=[],0===this.version)for(var i=0;i<e;i++)this.chunk_offsets.push(t.readUint32())}),BoxParser.createFullBoxCtor("stdp",function(t){var e=(this.size-this.hdr_size)/2;this.priority=[];for(var i=0;i<e;i++)this.priority[i]=t.readUint16()}),BoxParser.createFullBoxCtor("sthd"),BoxParser.createFullBoxCtor("stri",function(t){this.switch_group=t.readUint16(),this.alternate_group=t.readUint16(),this.sub_track_id=t.readUint32();var e=(this.size-this.hdr_size-8)/4;this.attribute_list=[];for(var i=0;i<e;i++)this.attribute_list[i]=t.readUint32()}),BoxParser.createFullBoxCtor("stsc",function(t){var e,i=t.readUint32();if(this.first_chunk=[],this.samples_per_chunk=[],this.sample_description_index=[],0===this.version)for(e=0;e<i;e++)this.first_chunk.push(t.readUint32()),this.samples_per_chunk.push(t.readUint32()),this.sample_description_index.push(t.readUint32())}),BoxParser.createFullBoxCtor("stsd",function(t){var e,i,r,s;for(this.entries=[],r=t.readUint32(),e=1;e<=r;e++){if((i=BoxParser.parseOneBox(t,!0,this.size-(t.getPosition()-this.start))).code!==BoxParser.OK)return;BoxParser[i.type+"SampleEntry"]?((s=new BoxParser[i.type+"SampleEntry"](i.size)).hdr_size=i.hdr_size,s.start=i.start):(Log.warn("BoxParser","Unknown sample entry type: "+i.type),s=new BoxParser.SampleEntry(i.type,i.size,i.hdr_size,i.start)),s.write===BoxParser.SampleEntry.prototype.write&&(Log.info("BoxParser","SampleEntry "+s.type+" box writing not yet implemented, keeping unparsed data in memory for later write"),s.parseDataAndRewind(t)),s.parse(t),this.entries.push(s)}}),BoxParser.createFullBoxCtor("stsg",function(t){this.grouping_type=t.readUint32();var e=t.readUint16();this.group_description_index=[];for(var i=0;i<e;i++)this.group_description_index[i]=t.readUint32()}),BoxParser.createFullBoxCtor("stsh",function(t){var e,i=t.readUint32();if(this.shadowed_sample_numbers=[],this.sync_sample_numbers=[],0===this.version)for(e=0;e<i;e++)this.shadowed_sample_numbers.push(t.readUint32()),this.sync_sample_numbers.push(t.readUint32())}),BoxParser.createFullBoxCtor("stss",function(t){var e,i=t.readUint32();if(0===this.version)for(this.sample_numbers=[],e=0;e<i;e++)this.sample_numbers.push(t.readUint32())}),BoxParser.createFullBoxCtor("stsz",function(t){var e;if(this.sample_sizes=[],0===this.version)for(this.sample_size=t.readUint32(),this.sample_count=t.readUint32(),e=0;e<this.sample_count;e++)0===this.sample_size?this.sample_sizes.push(t.readUint32()):this.sample_sizes[e]=this.sample_size}),BoxParser.createFullBoxCtor("stts",function(t){var e,i,r=t.readUint32();if(this.sample_counts=[],this.sample_deltas=[],0===this.version)for(e=0;e<r;e++)this.sample_counts.push(t.readUint32()),(i=t.readInt32())<0&&(Log.warn("BoxParser","File uses negative stts sample delta, using value 1 instead, sync may be lost!"),i=1),this.sample_deltas.push(i)}),BoxParser.createFullBoxCtor("stvi",function(t){var e=t.readUint32();this.single_view_allowed=3&e,this.stereo_scheme=t.readUint32();var i,e=t.readUint32();for(this.stereo_indication_type=t.readString(e),this.boxes=[];t.getPosition()<this.start+this.size;){if((i=BoxParser.parseOneBox(t,!1,this.size-(t.getPosition()-this.start))).code!==BoxParser.OK)return;i=i.box,this.boxes.push(i),this[i.type]=i}}),BoxParser.createBoxCtor("styp",function(t){BoxParser.ftypBox.prototype.parse.call(this,t)}),BoxParser.createFullBoxCtor("stz2",function(t){var e,i;if(this.sample_sizes=[],0===this.version)if(this.reserved=t.readUint24(),this.field_size=t.readUint8(),i=t.readUint32(),4===this.field_size)for(e=0;e<i;e+=2){var r=t.readUint8();this.sample_sizes[e]=r>>4&15,this.sample_sizes[e+1]=15&r}else if(8===this.field_size)for(e=0;e<i;e++)this.sample_sizes[e]=t.readUint8();else if(16===this.field_size)for(e=0;e<i;e++)this.sample_sizes[e]=t.readUint16();else Log.error("BoxParser","Error in length field in stz2 box")}),BoxParser.createFullBoxCtor("subs",function(t){var e,i,r,s=t.readUint32();for(this.entries=[],e=0;e<s;e++){var a={};if((this.entries[e]=a).sample_delta=t.readUint32(),a.subsamples=[],0<(r=t.readUint16()))for(i=0;i<r;i++){var n={};a.subsamples.push(n),1==this.version?n.size=t.readUint32():n.size=t.readUint16(),n.priority=t.readUint8(),n.discardable=t.readUint8(),n.codec_specific_parameters=t.readUint32()}}}),BoxParser.createFullBoxCtor("tenc",function(t){var e;t.readUint8(),0===this.version?t.readUint8():(e=t.readUint8(),this.default_crypt_byte_block=e>>4&15,this.default_skip_byte_block=15&e),this.default_isProtected=t.readUint8(),this.default_Per_Sample_IV_Size=t.readUint8(),this.default_KID=BoxParser.parseHex16(t),1===this.default_isProtected&&0===this.default_Per_Sample_IV_Size&&(this.default_constant_IV_size=t.readUint8(),this.default_constant_IV=t.readUint8Array(this.default_constant_IV_size))}),BoxParser.createFullBoxCtor("tfdt",function(t){1==this.version?this.baseMediaDecodeTime=t.readUint64():this.baseMediaDecodeTime=t.readUint32()}),BoxParser.createFullBoxCtor("tfhd",function(t){var e=0;this.track_id=t.readUint32(),this.size-this.hdr_size>e&&this.flags&BoxParser.TFHD_FLAG_BASE_DATA_OFFSET?(this.base_data_offset=t.readUint64(),e+=8):this.base_data_offset=0,this.size-this.hdr_size>e&&this.flags&BoxParser.TFHD_FLAG_SAMPLE_DESC?(this.default_sample_description_index=t.readUint32(),e+=4):this.default_sample_description_index=0,this.size-this.hdr_size>e&&this.flags&BoxParser.TFHD_FLAG_SAMPLE_DUR?(this.default_sample_duration=t.readUint32(),e+=4):this.default_sample_duration=0,this.size-this.hdr_size>e&&this.flags&BoxParser.TFHD_FLAG_SAMPLE_SIZE?(this.default_sample_size=t.readUint32(),e+=4):this.default_sample_size=0,this.size-this.hdr_size>e&&this.flags&BoxParser.TFHD_FLAG_SAMPLE_FLAGS?(this.default_sample_flags=t.readUint32(),e+=4):this.default_sample_flags=0}),BoxParser.createFullBoxCtor("tfra",function(t){this.track_ID=t.readUint32(),t.readUint24();var e=t.readUint8();this.length_size_of_traf_num=e>>4&3,this.length_size_of_trun_num=e>>2&3,this.length_size_of_sample_num=3&e,this.entries=[];for(var i=t.readUint32(),r=0;r<i;r++)1===this.version?(this.time=t.readUint64(),this.moof_offset=t.readUint64()):(this.time=t.readUint32(),this.moof_offset=t.readUint32()),this.traf_number=t["readUint"+8*(this.length_size_of_traf_num+1)](),this.trun_number=t["readUint"+8*(this.length_size_of_trun_num+1)](),this.sample_number=t["readUint"+8*(this.length_size_of_sample_num+1)]()}),BoxParser.createFullBoxCtor("tkhd",function(t){1==this.version?(this.creation_time=t.readUint64(),this.modification_time=t.readUint64(),this.track_id=t.readUint32(),t.readUint32(),this.duration=t.readUint64()):(this.creation_time=t.readUint32(),this.modification_time=t.readUint32(),this.track_id=t.readUint32(),t.readUint32(),this.duration=t.readUint32()),t.readUint32Array(2),this.layer=t.readInt16(),this.alternate_group=t.readInt16(),this.volume=t.readInt16()>>8,t.readUint16(),this.matrix=t.readInt32Array(9),this.width=t.readUint32(),this.height=t.readUint32()}),BoxParser.createBoxCtor("tmax",function(t){this.time=t.readUint32()}),BoxParser.createBoxCtor("tmin",function(t){this.time=t.readUint32()}),BoxParser.createBoxCtor("totl",function(t){this.bytessent=t.readUint32()}),BoxParser.createBoxCtor("tpay",function(t){this.bytessent=t.readUint32()}),BoxParser.createBoxCtor("tpyl",function(t){this.bytessent=t.readUint64()}),BoxParser.TrackGroupTypeBox.prototype.parse=function(t){this.parseFullHeader(t),this.track_group_id=t.readUint32()},BoxParser.createTrackGroupCtor("msrc"),BoxParser.TrackReferenceTypeBox=function(t,e,i,r){BoxParser.Box.call(this,t,e),this.hdr_size=i,this.start=r},BoxParser.TrackReferenceTypeBox.prototype=new BoxParser.Box,BoxParser.TrackReferenceTypeBox.prototype.parse=function(t){this.track_ids=t.readUint32Array((this.size-this.hdr_size)/4)},BoxParser.trefBox.prototype.parse=function(t){for(var e;t.getPosition()<this.start+this.size;){if((e=BoxParser.parseOneBox(t,!0,this.size-(t.getPosition()-this.start))).code!==BoxParser.OK)return;(e=new BoxParser.TrackReferenceTypeBox(e.type,e.size,e.hdr_size,e.start)).write===BoxParser.Box.prototype.write&&"mdat"!==e.type&&(Log.info("BoxParser","TrackReference "+e.type+" box writing not yet implemented, keeping unparsed data in memory for later write"),e.parseDataAndRewind(t)),e.parse(t),this.boxes.push(e)}},BoxParser.createFullBoxCtor("trep",function(t){for(this.track_ID=t.readUint32(),this.boxes=[];t.getPosition()<this.start+this.size;){if(ret=BoxParser.parseOneBox(t,!1,this.size-(t.getPosition()-this.start)),ret.code!==BoxParser.OK)return;box=ret.box,this.boxes.push(box)}}),BoxParser.createFullBoxCtor("trex",function(t){this.track_id=t.readUint32(),this.default_sample_description_index=t.readUint32(),this.default_sample_duration=t.readUint32(),this.default_sample_size=t.readUint32(),this.default_sample_flags=t.readUint32()}),BoxParser.createBoxCtor("trpy",function(t){this.bytessent=t.readUint64()}),BoxParser.createFullBoxCtor("trun",function(t){var e=0;if(this.sample_count=t.readUint32(),e+=4,this.size-this.hdr_size>e&&this.flags&BoxParser.TRUN_FLAGS_DATA_OFFSET?(this.data_offset=t.readInt32(),e+=4):this.data_offset=0,this.size-this.hdr_size>e&&this.flags&BoxParser.TRUN_FLAGS_FIRST_FLAG?(this.first_sample_flags=t.readUint32(),e+=4):this.first_sample_flags=0,this.sample_duration=[],this.sample_size=[],this.sample_flags=[],this.sample_composition_time_offset=[],this.size-this.hdr_size>e)for(var i=0;i<this.sample_count;i++)this.flags&BoxParser.TRUN_FLAGS_DURATION&&(this.sample_duration[i]=t.readUint32()),this.flags&BoxParser.TRUN_FLAGS_SIZE&&(this.sample_size[i]=t.readUint32()),this.flags&BoxParser.TRUN_FLAGS_FLAGS&&(this.sample_flags[i]=t.readUint32()),this.flags&BoxParser.TRUN_FLAGS_CTS_OFFSET&&(0===this.version?this.sample_composition_time_offset[i]=t.readUint32():this.sample_composition_time_offset[i]=t.readInt32())}),BoxParser.createFullBoxCtor("tsel",function(t){this.switch_group=t.readUint32();var e=(this.size-this.hdr_size-4)/4;this.attribute_list=[];for(var i=0;i<e;i++)this.attribute_list[i]=t.readUint32()}),BoxParser.createFullBoxCtor("txtC",function(t){this.config=t.readCString()}),BoxParser.createBoxCtor("tyco",function(t){var e=(this.size-this.hdr_size)/4;this.compatible_brands=[];for(var i=0;i<e;i++)this.compatible_brands[i]=t.readString(4)}),BoxParser.createFullBoxCtor("udes",function(t){this.lang=t.readCString(),this.name=t.readCString(),this.description=t.readCString(),this.tags=t.readCString()}),BoxParser.createFullBoxCtor("uncC",function(t){var e;if(this.profile=t.readUint32(),1!=this.version&&0==this.version){for(this.component_count=t.readUint32(),this.component_index=[],this.component_bit_depth_minus_one=[],this.component_format=[],this.component_align_size=[],e=0;e<this.component_count;e++)this.component_index.push(t.readUint16()),this.component_bit_depth_minus_one.push(t.readUint8()),this.component_format.push(t.readUint8()),this.component_align_size.push(t.readUint8());this.sampling_type=t.readUint8(),this.interleave_type=t.readUint8(),this.block_size=t.readUint8();var i=t.readUint8();this.component_little_endian=i>>7&1,this.block_pad_lsb=i>>6&1,this.block_little_endian=i>>5&1,this.block_reversed=i>>4&1,this.pad_unknown=i>>3&1,this.pixel_size=t.readUint32(),this.row_align_size=t.readUint32(),this.tile_align_size=t.readUint32(),this.num_tile_cols_minus_one=t.readUint32(),this.num_tile_rows_minus_one=t.readUint32()}}),BoxParser.createFullBoxCtor("url ",function(t){1!==this.flags&&(this.location=t.readCString())}),BoxParser.createFullBoxCtor("urn ",function(t){this.name=t.readCString(),0<this.size-this.hdr_size-this.name.length-1&&(this.location=t.readCString())}),BoxParser.createUUIDBox("a5d40b30e81411ddba2f0800200c9a66",!0,!1,function(t){this.LiveServerManifest=t.readString(this.size-this.hdr_size).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")}),BoxParser.createUUIDBox("d08a4f1810f34a82b6c832d8aba183d3",!0,!1,function(t){this.system_id=BoxParser.parseHex16(t);var e=t.readUint32();0<e&&(this.data=t.readUint8Array(e))}),BoxParser.createUUIDBox("a2394f525a9b4f14a2446c427c648df4",!0,!1),BoxParser.createUUIDBox("8974dbce7be74c5184f97148f9882554",!0,!1,function(t){this.default_AlgorithmID=t.readUint24(),this.default_IV_size=t.readUint8(),this.default_KID=BoxParser.parseHex16(t)}),BoxParser.createUUIDBox("d4807ef2ca3946958e5426cb9e46a79f",!0,!1,function(t){this.fragment_count=t.readUint8(),this.entries=[];for(var e=0;e<this.fragment_count;e++){var i={},r=0,s=0,s=1===this.version?(r=t.readUint64(),t.readUint64()):(r=t.readUint32(),t.readUint32());i.absolute_time=r,i.absolute_duration=s,this.entries.push(i)}}),BoxParser.createUUIDBox("6d1d9b0542d544e680e2141daff757b2",!0,!1,function(t){1===this.version?(this.absolute_time=t.readUint64(),this.duration=t.readUint64()):(this.absolute_time=t.readUint32(),this.duration=t.readUint32())}),BoxParser.createFullBoxCtor("vmhd",function(t){this.graphicsmode=t.readUint16(),this.opcolor=t.readUint16Array(3)}),BoxParser.createFullBoxCtor("vpcC",function(t){var e;1===this.version?(this.profile=t.readUint8(),this.level=t.readUint8(),e=t.readUint8(),this.bitDepth=e>>4,this.chromaSubsampling=e>>1&7,this.videoFullRangeFlag=1&e,this.colourPrimaries=t.readUint8(),this.transferCharacteristics=t.readUint8(),this.matrixCoefficients=t.readUint8()):(this.profile=t.readUint8(),this.level=t.readUint8(),e=t.readUint8(),this.bitDepth=e>>4&15,this.colorSpace=15&e,e=t.readUint8(),this.chromaSubsampling=e>>4&15,this.transferFunction=e>>1&7,this.videoFullRangeFlag=1&e),this.codecIntializationDataSize=t.readUint16(),this.codecIntializationData=t.readUint8Array(this.codecIntializationDataSize)}),BoxParser.createBoxCtor("vttC",function(t){this.text=t.readString(this.size-this.hdr_size)}),BoxParser.createFullBoxCtor("vvcC",function(t){var e,i={held_bits:void 0,num_held_bits:0,stream_read_1_bytes:function(t){this.held_bits=t.readUint8(),this.num_held_bits=8},stream_read_2_bytes:function(t){this.held_bits=t.readUint16(),this.num_held_bits=16},extract_bits:function(t){var e=this.held_bits>>this.num_held_bits-t&(1<<t)-1;return this.num_held_bits-=t,e}};if(i.stream_read_1_bytes(t),i.extract_bits(5),this.lengthSizeMinusOne=i.extract_bits(2),this.ptl_present_flag=i.extract_bits(1),this.ptl_present_flag){if(i.stream_read_2_bytes(t),this.ols_idx=i.extract_bits(9),this.num_sublayers=i.extract_bits(3),this.constant_frame_rate=i.extract_bits(2),this.chroma_format_idc=i.extract_bits(2),i.stream_read_1_bytes(t),this.bit_depth_minus8=i.extract_bits(3),i.extract_bits(5),i.stream_read_2_bytes(t),i.extract_bits(2),this.num_bytes_constraint_info=i.extract_bits(6),this.general_profile_idc=i.extract_bits(7),this.general_tier_flag=i.extract_bits(1),this.general_level_idc=t.readUint8(),i.stream_read_1_bytes(t),this.ptl_frame_only_constraint_flag=i.extract_bits(1),this.ptl_multilayer_enabled_flag=i.extract_bits(1),this.general_constraint_info=new Uint8Array(this.num_bytes_constraint_info),this.num_bytes_constraint_info){for(o=0;o<this.num_bytes_constraint_info-1;o++){var r=i.extract_bits(6);i.stream_read_1_bytes(t);var s=i.extract_bits(2);this.general_constraint_info[o]=r<<2|s}this.general_constraint_info[this.num_bytes_constraint_info-1]=i.extract_bits(6)}else i.extract_bits(6);if(1<this.num_sublayers){for(i.stream_read_1_bytes(t),this.ptl_sublayer_present_mask=0,e=this.num_sublayers-2;0<=e;--e){var a=i.extract_bits(1);this.ptl_sublayer_present_mask|=a<<e}for(e=this.num_sublayers;e<=8&&1<this.num_sublayers;++e)i.extract_bits(1);for(this.sublayer_level_idc=[],e=this.num_sublayers-2;0<=e;--e)this.ptl_sublayer_present_mask&1<<e&&(this.sublayer_level_idc[e]=t.readUint8())}if(this.ptl_num_sub_profiles=t.readUint8(),this.general_sub_profile_idc=[],this.ptl_num_sub_profiles)for(o=0;o<this.ptl_num_sub_profiles;o++)this.general_sub_profile_idc.push(t.readUint32());this.max_picture_width=t.readUint16(),this.max_picture_height=t.readUint16(),this.avg_frame_rate=t.readUint16()}this.nalu_arrays=[];for(var n=t.readUint8(),o=0;o<n;o++){var h=[];this.nalu_arrays.push(h),i.stream_read_1_bytes(t),h.completeness=i.extract_bits(1),i.extract_bits(2),h.nalu_type=i.extract_bits(5);var d=1;for(13!=h.nalu_type&&12!=h.nalu_type&&(d=t.readUint16()),e=0;e<d;e++){var l=t.readUint16();h.push({data:t.readUint8Array(l),length:l})}}}),BoxParser.createFullBoxCtor("vvnC",function(t){var e=strm.readUint8();this.lengthSizeMinusOne=3&e}),BoxParser.SampleEntry.prototype.isVideo=function(){return!1},BoxParser.SampleEntry.prototype.isAudio=function(){return!1},BoxParser.SampleEntry.prototype.isSubtitle=function(){return!1},BoxParser.SampleEntry.prototype.isMetadata=function(){return!1},BoxParser.SampleEntry.prototype.isHint=function(){return!1},BoxParser.SampleEntry.prototype.getCodec=function(){return this.type.replace(".","")},BoxParser.SampleEntry.prototype.getWidth=function(){return""},BoxParser.SampleEntry.prototype.getHeight=function(){return""},BoxParser.SampleEntry.prototype.getChannelCount=function(){return""},BoxParser.SampleEntry.prototype.getSampleRate=function(){return""},BoxParser.SampleEntry.prototype.getSampleSize=function(){return""},BoxParser.VisualSampleEntry.prototype.isVideo=function(){return!0},BoxParser.VisualSampleEntry.prototype.getWidth=function(){return this.width},BoxParser.VisualSampleEntry.prototype.getHeight=function(){return this.height},BoxParser.AudioSampleEntry.prototype.isAudio=function(){return!0},BoxParser.AudioSampleEntry.prototype.getChannelCount=function(){return this.channel_count},BoxParser.AudioSampleEntry.prototype.getSampleRate=function(){return this.samplerate},BoxParser.AudioSampleEntry.prototype.getSampleSize=function(){return this.samplesize},BoxParser.SubtitleSampleEntry.prototype.isSubtitle=function(){return!0},BoxParser.MetadataSampleEntry.prototype.isMetadata=function(){return!0},BoxParser.decimalToHex=function(t,e){var i=Number(t).toString(16);for(e=null==e?e=2:e;i.length<e;)i="0"+i;return i},BoxParser.avc1SampleEntry.prototype.getCodec=BoxParser.avc2SampleEntry.prototype.getCodec=BoxParser.avc3SampleEntry.prototype.getCodec=BoxParser.avc4SampleEntry.prototype.getCodec=function(){var t=BoxParser.SampleEntry.prototype.getCodec.call(this);return this.avcC?t+"."+BoxParser.decimalToHex(this.avcC.AVCProfileIndication)+BoxParser.decimalToHex(this.avcC.profile_compatibility)+BoxParser.decimalToHex(this.avcC.AVCLevelIndication):t},BoxParser.hev1SampleEntry.prototype.getCodec=BoxParser.hvc1SampleEntry.prototype.getCodec=function(){var t=BoxParser.SampleEntry.prototype.getCodec.call(this);if(this.hvcC){switch(t+=".",this.hvcC.general_profile_space){case 0:t+="";break;case 1:t+="A";break;case 2:t+="B";break;case 3:t+="C"}t+=this.hvcC.general_profile_idc,t+=".";for(var e=this.hvcC.general_profile_compatibility,i=0,r=0;r<32&&(i|=1&e,31!=r);r++)i<<=1,e>>=1;t+=BoxParser.decimalToHex(i,0),t+=".",0===this.hvcC.general_tier_flag?t+="L":t+="H",t+=this.hvcC.general_level_idc;var s=!1,a="";for(r=5;0<=r;r--)(this.hvcC.general_constraint_indicator[r]||s)&&(a="."+BoxParser.decimalToHex(this.hvcC.general_constraint_indicator[r],0)+a,s=!0);t+=a}return t},BoxParser.vvc1SampleEntry.prototype.getCodec=BoxParser.vvi1SampleEntry.prototype.getCodec=function(){var t=BoxParser.SampleEntry.prototype.getCodec.call(this);if(this.vvcC){t+="."+this.vvcC.general_profile_idc,this.vvcC.general_tier_flag?t+=".H":t+=".L",t+=this.vvcC.general_level_idc;var e="";if(this.vvcC.general_constraint_info){var i,r=[],s=0;for(s|=this.vvcC.ptl_frame_only_constraint<<7,s|=this.vvcC.ptl_multilayer_enabled<<6,h=0;h<this.vvcC.general_constraint_info.length;++h)s|=this.vvcC.general_constraint_info[h]>>2&63,r.push(s),s&&(i=h),s=this.vvcC.general_constraint_info[h]>>2&3;if(void 0===i)e=".CA";else{e=".C";for(var a="ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",n=0,o=0,h=0;h<=i;++h)for(n=n<<8|r[h],o+=8;5<=o;)e+=a[n>>o-5&31],n&=(1<<(o-=5))-1;o&&(e+=a[31&(n<<=5-o)])}}t+=e}return t},BoxParser.mp4aSampleEntry.prototype.getCodec=function(){var t=BoxParser.SampleEntry.prototype.getCodec.call(this);if(this.esds&&this.esds.esd){var e=this.esds.esd.getOTI(),i=this.esds.esd.getAudioConfig();return t+"."+BoxParser.decimalToHex(e)+(i?"."+i:"")}return t},BoxParser.stxtSampleEntry.prototype.getCodec=function(){var t=BoxParser.SampleEntry.prototype.getCodec.call(this);return this.mime_format?t+"."+this.mime_format:t},BoxParser.vp08SampleEntry.prototype.getCodec=BoxParser.vp09SampleEntry.prototype.getCodec=function(){var t=BoxParser.SampleEntry.prototype.getCodec.call(this),e=this.vpcC.level;0==e&&(e="00");var i=this.vpcC.bitDepth;return 8==i&&(i="08"),t+".0"+this.vpcC.profile+"."+e+"."+i},BoxParser.av01SampleEntry.prototype.getCodec=function(){var t,e=BoxParser.SampleEntry.prototype.getCodec.call(this),i=this.av1C.seq_level_idx_0;return i<10&&(i="0"+i),2===this.av1C.seq_profile&&1===this.av1C.high_bitdepth?t=1===this.av1C.twelve_bit?"12":"10":this.av1C.seq_profile<=2&&(t=1===this.av1C.high_bitdepth?"10":"08"),e+"."+this.av1C.seq_profile+"."+i+(this.av1C.seq_tier_0?"H":"M")+"."+t},BoxParser.Box.prototype.writeHeader=function(t,e){this.size+=8,this.size>MAX_SIZE&&(this.size+=8),"uuid"===this.type&&(this.size+=16),Log.debug("BoxWriter","Writing box "+this.type+" of size: "+this.size+" at position "+t.getPosition()+(e||"")),this.size>MAX_SIZE?t.writeUint32(1):(this.sizePosition=t.getPosition(),t.writeUint32(this.size)),t.writeString(this.type,null,4),"uuid"===this.type&&t.writeUint8Array(this.uuid),this.size>MAX_SIZE&&t.writeUint64(this.size)},BoxParser.FullBox.prototype.writeHeader=function(t){this.size+=4,BoxParser.Box.prototype.writeHeader.call(this,t," v="+this.version+" f="+this.flags),t.writeUint8(this.version),t.writeUint24(this.flags)},BoxParser.Box.prototype.write=function(t){"mdat"===this.type?this.data&&(this.size=this.data.length,this.writeHeader(t),t.writeUint8Array(this.data)):(this.size=this.data?this.data.length:0,this.writeHeader(t),this.data&&t.writeUint8Array(this.data))},BoxParser.ContainerBox.prototype.write=function(t){this.size=0,this.writeHeader(t);for(var e=0;e<this.boxes.length;e++)this.boxes[e]&&(this.boxes[e].write(t),this.size+=this.boxes[e].size);Log.debug("BoxWriter","Adjusting box "+this.type+" with new size "+this.size),t.adjustUint32(this.sizePosition,this.size)},BoxParser.TrackReferenceTypeBox.prototype.write=function(t){this.size=4*this.track_ids.length,this.writeHeader(t),t.writeUint32Array(this.track_ids)},BoxParser.avcCBox.prototype.write=function(t){var e;for(this.size=7,e=0;e<this.SPS.length;e++)this.size+=2+this.SPS[e].length;for(e=0;e<this.PPS.length;e++)this.size+=2+this.PPS[e].length;for(this.ext&&(this.size+=this.ext.length),this.writeHeader(t),t.writeUint8(this.configurationVersion),t.writeUint8(this.AVCProfileIndication),t.writeUint8(this.profile_compatibility),t.writeUint8(this.AVCLevelIndication),t.writeUint8(this.lengthSizeMinusOne+252),t.writeUint8(this.SPS.length+224),e=0;e<this.SPS.length;e++)t.writeUint16(this.SPS[e].length),t.writeUint8Array(this.SPS[e].nalu);for(t.writeUint8(this.PPS.length),e=0;e<this.PPS.length;e++)t.writeUint16(this.PPS[e].length),t.writeUint8Array(this.PPS[e].nalu);this.ext&&t.writeUint8Array(this.ext)},BoxParser.co64Box.prototype.write=function(t){var e;for(this.version=0,this.flags=0,this.size=4+8*this.chunk_offsets.length,this.writeHeader(t),t.writeUint32(this.chunk_offsets.length),e=0;e<this.chunk_offsets.length;e++)t.writeUint64(this.chunk_offsets[e])},BoxParser.cslgBox.prototype.write=function(t){this.version=0,this.flags=0,this.size=20,this.writeHeader(t),t.writeInt32(this.compositionToDTSShift),t.writeInt32(this.leastDecodeToDisplayDelta),t.writeInt32(this.greatestDecodeToDisplayDelta),t.writeInt32(this.compositionStartTime),t.writeInt32(this.compositionEndTime)},BoxParser.cttsBox.prototype.write=function(t){var e;for(this.version=0,this.flags=0,this.size=4+8*this.sample_counts.length,this.writeHeader(t),t.writeUint32(this.sample_counts.length),e=0;e<this.sample_counts.length;e++)t.writeUint32(this.sample_counts[e]),1===this.version?t.writeInt32(this.sample_offsets[e]):t.writeUint32(this.sample_offsets[e])},BoxParser.drefBox.prototype.write=function(t){this.version=0,this.flags=0,this.size=4,this.writeHeader(t),t.writeUint32(this.entries.length);for(var e=0;e<this.entries.length;e++)this.entries[e].write(t),this.size+=this.entries[e].size;Log.debug("BoxWriter","Adjusting box "+this.type+" with new size "+this.size),t.adjustUint32(this.sizePosition,this.size)},BoxParser.elngBox.prototype.write=function(t){this.version=0,this.flags=0,this.size=this.extended_language.length,this.writeHeader(t),t.writeString(this.extended_language)},BoxParser.elstBox.prototype.write=function(t){this.version=0,this.flags=0,this.size=4+12*this.entries.length,this.writeHeader(t),t.writeUint32(this.entries.length);for(var e=0;e<this.entries.length;e++){var i=this.entries[e];t.writeUint32(i.segment_duration),t.writeInt32(i.media_time),t.writeInt16(i.media_rate_integer),t.writeInt16(i.media_rate_fraction)}},BoxParser.emsgBox.prototype.write=function(t){this.version=0,this.flags=0,this.size=16+this.message_data.length+(this.scheme_id_uri.length+1)+(this.value.length+1),this.writeHeader(t),t.writeCString(this.scheme_id_uri),t.writeCString(this.value),t.writeUint32(this.timescale),t.writeUint32(this.presentation_time_delta),t.writeUint32(this.event_duration),t.writeUint32(this.id),t.writeUint8Array(this.message_data)},BoxParser.ftypBox.prototype.write=function(t){this.size=8+4*this.compatible_brands.length,this.writeHeader(t),t.writeString(this.major_brand,null,4),t.writeUint32(this.minor_version);for(var e=0;e<this.compatible_brands.length;e++)t.writeString(this.compatible_brands[e],null,4)},BoxParser.hdlrBox.prototype.write=function(t){this.size=20+this.name.length+1,this.version=0,this.flags=0,this.writeHeader(t),t.writeUint32(0),t.writeString(this.handler,null,4),t.writeUint32(0),t.writeUint32(0),t.writeUint32(0),t.writeCString(this.name)},BoxParser.hvcCBox.prototype.write=function(t){var e,i;for(this.size=23,e=0;e<this.nalu_arrays.length;e++)for(this.size+=3,i=0;i<this.nalu_arrays[e].length;i++)this.size+=2+this.nalu_arrays[e][i].data.length;for(this.writeHeader(t),t.writeUint8(this.configurationVersion),t.writeUint8(this.general_profile_space<<6+this.general_tier_flag<<5+this.general_profile_idc),t.writeUint32(this.general_profile_compatibility),t.writeUint8Array(this.general_constraint_indicator),t.writeUint8(this.general_level_idc),t.writeUint16(this.min_spatial_segmentation_idc+(15<<24)),t.writeUint8(this.parallelismType+252),t.writeUint8(this.chroma_format_idc+252),t.writeUint8(this.bit_depth_luma_minus8+248),t.writeUint8(this.bit_depth_chroma_minus8+248),t.writeUint16(this.avgFrameRate),t.writeUint8((this.constantFrameRate<<6)+(this.numTemporalLayers<<3)+(this.temporalIdNested<<2)+this.lengthSizeMinusOne),t.writeUint8(this.nalu_arrays.length),e=0;e<this.nalu_arrays.length;e++)for(t.writeUint8((this.nalu_arrays[e].completeness<<7)+this.nalu_arrays[e].nalu_type),t.writeUint16(this.nalu_arrays[e].length),i=0;i<this.nalu_arrays[e].length;i++)t.writeUint16(this.nalu_arrays[e][i].data.length),t.writeUint8Array(this.nalu_arrays[e][i].data)},BoxParser.kindBox.prototype.write=function(t){this.version=0,this.flags=0,this.size=this.schemeURI.length+1+(this.value.length+1),this.writeHeader(t),t.writeCString(this.schemeURI),t.writeCString(this.value)},BoxParser.mdhdBox.prototype.write=function(t){this.size=20,this.flags=0,this.version=0,this.writeHeader(t),t.writeUint32(this.creation_time),t.writeUint32(this.modification_time),t.writeUint32(this.timescale),t.writeUint32(this.duration),t.writeUint16(this.language),t.writeUint16(0)},BoxParser.mehdBox.prototype.write=function(t){this.version=0,this.flags=0,this.size=4,this.writeHeader(t),t.writeUint32(this.fragment_duration)},BoxParser.mfhdBox.prototype.write=function(t){this.version=0,this.flags=0,this.size=4,this.writeHeader(t),t.writeUint32(this.sequence_number)},BoxParser.mvhdBox.prototype.write=function(t){this.version=0,this.flags=0,this.size=96,this.writeHeader(t),t.writeUint32(this.creation_time),t.writeUint32(this.modification_time),t.writeUint32(this.timescale),t.writeUint32(this.duration),t.writeUint32(this.rate),t.writeUint16(this.volume<<8),t.writeUint16(0),t.writeUint32(0),t.writeUint32(0),t.writeUint32Array(this.matrix),t.writeUint32(0),t.writeUint32(0),t.writeUint32(0),t.writeUint32(0),t.writeUint32(0),t.writeUint32(0),t.writeUint32(this.next_track_id)},BoxParser.SampleEntry.prototype.writeHeader=function(t){this.size=8,BoxParser.Box.prototype.writeHeader.call(this,t),t.writeUint8(0),t.writeUint8(0),t.writeUint8(0),t.writeUint8(0),t.writeUint8(0),t.writeUint8(0),t.writeUint16(this.data_reference_index)},BoxParser.SampleEntry.prototype.writeFooter=function(t){for(var e=0;e<this.boxes.length;e++)this.boxes[e].write(t),this.size+=this.boxes[e].size;Log.debug("BoxWriter","Adjusting box "+this.type+" with new size "+this.size),t.adjustUint32(this.sizePosition,this.size)},BoxParser.SampleEntry.prototype.write=function(t){this.writeHeader(t),t.writeUint8Array(this.data),this.size+=this.data.length,Log.debug("BoxWriter","Adjusting box "+this.type+" with new size "+this.size),t.adjustUint32(this.sizePosition,this.size)},BoxParser.VisualSampleEntry.prototype.write=function(t){this.writeHeader(t),this.size+=70,t.writeUint16(0),t.writeUint16(0),t.writeUint32(0),t.writeUint32(0),t.writeUint32(0),t.writeUint16(this.width),t.writeUint16(this.height),t.writeUint32(this.horizresolution),t.writeUint32(this.vertresolution),t.writeUint32(0),t.writeUint16(this.frame_count),t.writeUint8(Math.min(31,this.compressorname.length)),t.writeString(this.compressorname,null,31),t.writeUint16(this.depth),t.writeInt16(-1),this.writeFooter(t)},BoxParser.AudioSampleEntry.prototype.write=function(t){this.writeHeader(t),this.size+=20,t.writeUint32(0),t.writeUint32(0),t.writeUint16(this.channel_count),t.writeUint16(this.samplesize),t.writeUint16(0),t.writeUint16(0),t.writeUint32(this.samplerate<<16),this.writeFooter(t)},BoxParser.stppSampleEntry.prototype.write=function(t){this.writeHeader(t),this.size+=this.namespace.length+1+this.schema_location.length+1+this.auxiliary_mime_types.length+1,t.writeCString(this.namespace),t.writeCString(this.schema_location),t.writeCString(this.auxiliary_mime_types),this.writeFooter(t)},BoxParser.SampleGroupEntry.prototype.write=function(t){t.writeUint8Array(this.data)},BoxParser.sbgpBox.prototype.write=function(t){this.version=1,this.flags=0,this.size=12+8*this.entries.length,this.writeHeader(t),t.writeString(this.grouping_type,null,4),t.writeUint32(this.grouping_type_parameter),t.writeUint32(this.entries.length);for(var e=0;e<this.entries.length;e++){var i=this.entries[e];t.writeInt32(i.sample_count),t.writeInt32(i.group_description_index)}},BoxParser.sgpdBox.prototype.write=function(t){var e,i;for(this.flags=0,this.size=12,e=0;e<this.entries.length;e++)i=this.entries[e],1===this.version&&(0===this.default_length&&(this.size+=4),this.size+=i.data.length);for(this.writeHeader(t),t.writeString(this.grouping_type,null,4),1===this.version&&t.writeUint32(this.default_length),2<=this.version&&t.writeUint32(this.default_sample_description_index),t.writeUint32(this.entries.length),e=0;e<this.entries.length;e++)i=this.entries[e],1===this.version&&0===this.default_length&&t.writeUint32(i.description_length),i.write(t)},BoxParser.sidxBox.prototype.write=function(t){this.version=0,this.flags=0,this.size=20+12*this.references.length,this.writeHeader(t),t.writeUint32(this.reference_ID),t.writeUint32(this.timescale),t.writeUint32(this.earliest_presentation_time),t.writeUint32(this.first_offset),t.writeUint16(0),t.writeUint16(this.references.length);for(var e=0;e<this.references.length;e++){var i=this.references[e];t.writeUint32(i.reference_type<<31|i.referenced_size),t.writeUint32(i.subsegment_duration),t.writeUint32(i.starts_with_SAP<<31|i.SAP_type<<28|i.SAP_delta_time)}},BoxParser.smhdBox.prototype.write=function(t){this.version=0,this.flags=1,this.size=4,this.writeHeader(t),t.writeUint16(this.balance),t.writeUint16(0)},BoxParser.stcoBox.prototype.write=function(t){this.version=0,this.flags=0,this.size=4+4*this.chunk_offsets.length,this.writeHeader(t),t.writeUint32(this.chunk_offsets.length),t.writeUint32Array(this.chunk_offsets)},BoxParser.stscBox.prototype.write=function(t){var e;for(this.version=0,this.flags=0,this.size=4+12*this.first_chunk.length,this.writeHeader(t),t.writeUint32(this.first_chunk.length),e=0;e<this.first_chunk.length;e++)t.writeUint32(this.first_chunk[e]),t.writeUint32(this.samples_per_chunk[e]),t.writeUint32(this.sample_description_index[e])},BoxParser.stsdBox.prototype.write=function(t){var e;for(this.version=0,this.flags=0,this.size=0,this.writeHeader(t),t.writeUint32(this.entries.length),this.size+=4,e=0;e<this.entries.length;e++)this.entries[e].write(t),this.size+=this.entries[e].size;Log.debug("BoxWriter","Adjusting box "+this.type+" with new size "+this.size),t.adjustUint32(this.sizePosition,this.size)},BoxParser.stshBox.prototype.write=function(t){var e;for(this.version=0,this.flags=0,this.size=4+8*this.shadowed_sample_numbers.length,this.writeHeader(t),t.writeUint32(this.shadowed_sample_numbers.length),e=0;e<this.shadowed_sample_numbers.length;e++)t.writeUint32(this.shadowed_sample_numbers[e]),t.writeUint32(this.sync_sample_numbers[e])},BoxParser.stssBox.prototype.write=function(t){this.version=0,this.flags=0,this.size=4+4*this.sample_numbers.length,this.writeHeader(t),t.writeUint32(this.sample_numbers.length),t.writeUint32Array(this.sample_numbers)},BoxParser.stszBox.prototype.write=function(t){var e,i=!0;if(this.version=0,(this.flags=0)<this.sample_sizes.length)for(e=0;e+1<this.sample_sizes.length;){if(this.sample_sizes[e+1]!==this.sample_sizes[0]){i=!1;break}e++}else i=!1;this.size=8,i||(this.size+=4*this.sample_sizes.length),this.writeHeader(t),i?t.writeUint32(this.sample_sizes[0]):t.writeUint32(0),t.writeUint32(this.sample_sizes.length),i||t.writeUint32Array(this.sample_sizes)},BoxParser.sttsBox.prototype.write=function(t){var e;for(this.version=0,this.flags=0,this.size=4+8*this.sample_counts.length,this.writeHeader(t),t.writeUint32(this.sample_counts.length),e=0;e<this.sample_counts.length;e++)t.writeUint32(this.sample_counts[e]),t.writeUint32(this.sample_deltas[e])},BoxParser.tfdtBox.prototype.write=function(t){var e=Math.pow(2,32)-1;this.version=this.baseMediaDecodeTime>e?1:0,this.flags=0,this.size=4,1===this.version&&(this.size+=4),this.writeHeader(t),1===this.version?t.writeUint64(this.baseMediaDecodeTime):t.writeUint32(this.baseMediaDecodeTime)},BoxParser.tfhdBox.prototype.write=function(t){this.version=0,this.size=4,this.flags&BoxParser.TFHD_FLAG_BASE_DATA_OFFSET&&(this.size+=8),this.flags&BoxParser.TFHD_FLAG_SAMPLE_DESC&&(this.size+=4),this.flags&BoxParser.TFHD_FLAG_SAMPLE_DUR&&(this.size+=4),this.flags&BoxParser.TFHD_FLAG_SAMPLE_SIZE&&(this.size+=4),this.flags&BoxParser.TFHD_FLAG_SAMPLE_FLAGS&&(this.size+=4),this.writeHeader(t),t.writeUint32(this.track_id),this.flags&BoxParser.TFHD_FLAG_BASE_DATA_OFFSET&&t.writeUint64(this.base_data_offset),this.flags&BoxParser.TFHD_FLAG_SAMPLE_DESC&&t.writeUint32(this.default_sample_description_index),this.flags&BoxParser.TFHD_FLAG_SAMPLE_DUR&&t.writeUint32(this.default_sample_duration),this.flags&BoxParser.TFHD_FLAG_SAMPLE_SIZE&&t.writeUint32(this.default_sample_size),this.flags&BoxParser.TFHD_FLAG_SAMPLE_FLAGS&&t.writeUint32(this.default_sample_flags)},BoxParser.tkhdBox.prototype.write=function(t){this.version=0,this.size=80,this.writeHeader(t),t.writeUint32(this.creation_time),t.writeUint32(this.modification_time),t.writeUint32(this.track_id),t.writeUint32(0),t.writeUint32(this.duration),t.writeUint32(0),t.writeUint32(0),t.writeInt16(this.layer),t.writeInt16(this.alternate_group),t.writeInt16(this.volume<<8),t.writeUint16(0),t.writeInt32Array(this.matrix),t.writeUint32(this.width),t.writeUint32(this.height)},BoxParser.trexBox.prototype.write=function(t){this.version=0,this.flags=0,this.size=20,this.writeHeader(t),t.writeUint32(this.track_id),t.writeUint32(this.default_sample_description_index),t.writeUint32(this.default_sample_duration),t.writeUint32(this.default_sample_size),t.writeUint32(this.default_sample_flags)},BoxParser.trunBox.prototype.write=function(t){this.version=0,this.size=4,this.flags&BoxParser.TRUN_FLAGS_DATA_OFFSET&&(this.size+=4),this.flags&BoxParser.TRUN_FLAGS_FIRST_FLAG&&(this.size+=4),this.flags&BoxParser.TRUN_FLAGS_DURATION&&(this.size+=4*this.sample_duration.length),this.flags&BoxParser.TRUN_FLAGS_SIZE&&(this.size+=4*this.sample_size.length),this.flags&BoxParser.TRUN_FLAGS_FLAGS&&(this.size+=4*this.sample_flags.length),this.flags&BoxParser.TRUN_FLAGS_CTS_OFFSET&&(this.size+=4*this.sample_composition_time_offset.length),this.writeHeader(t),t.writeUint32(this.sample_count),this.flags&BoxParser.TRUN_FLAGS_DATA_OFFSET&&(this.data_offset_position=t.getPosition(),t.writeInt32(this.data_offset)),this.flags&BoxParser.TRUN_FLAGS_FIRST_FLAG&&t.writeUint32(this.first_sample_flags);for(var e=0;e<this.sample_count;e++)this.flags&BoxParser.TRUN_FLAGS_DURATION&&t.writeUint32(this.sample_duration[e]),this.flags&BoxParser.TRUN_FLAGS_SIZE&&t.writeUint32(this.sample_size[e]),this.flags&BoxParser.TRUN_FLAGS_FLAGS&&t.writeUint32(this.sample_flags[e]),this.flags&BoxParser.TRUN_FLAGS_CTS_OFFSET&&(0===this.version?t.writeUint32(this.sample_composition_time_offset[e]):t.writeInt32(this.sample_composition_time_offset[e]))},BoxParser["url Box"].prototype.write=function(t){this.version=0,this.location?(this.flags=0,this.size=this.location.length+1):(this.flags=1,this.size=0),this.writeHeader(t),this.location&&t.writeCString(this.location)},BoxParser["urn Box"].prototype.write=function(t){this.version=0,this.flags=0,this.size=this.name.length+1+(this.location?this.location.length+1:0),this.writeHeader(t),t.writeCString(this.name),this.location&&t.writeCString(this.location)},BoxParser.vmhdBox.prototype.write=function(t){this.version=0,this.flags=1,this.size=8,this.writeHeader(t),t.writeUint16(this.graphicsmode),t.writeUint16Array(this.opcolor)},BoxParser.cttsBox.prototype.unpack=function(t){for(var e,i=0,r=0;r<this.sample_counts.length;r++)for(e=0;e<this.sample_counts[r];e++)t[i].pts=t[i].dts+this.sample_offsets[r],i++},BoxParser.sttsBox.prototype.unpack=function(t){for(var e,i=0,r=0;r<this.sample_counts.length;r++)for(e=0;e<this.sample_counts[r];e++)t[i].dts=0===i?0:t[i-1].dts+this.sample_deltas[r],i++},BoxParser.stcoBox.prototype.unpack=function(t){for(var e=0;e<this.chunk_offsets.length;e++)t[e].offset=this.chunk_offsets[e]},BoxParser.stscBox.prototype.unpack=function(t){for(var e,i,r=0,s=0,a=0;a<this.first_chunk.length;a++)for(e=0;e<(a+1<this.first_chunk.length?this.first_chunk[a+1]:1/0);e++)for(s++,i=0;i<this.samples_per_chunk[a];i++){if(!t[r])return;t[r].description_index=this.sample_description_index[a],t[r].chunk_index=s,r++}},BoxParser.stszBox.prototype.unpack=function(t){for(var e=0;e<this.sample_sizes.length;e++)t[e].size=this.sample_sizes[e]},BoxParser.DIFF_BOXES_PROP_NAMES=["boxes","entries","references","subsamples","items","item_infos","extents","associations","subsegments","ranges","seekLists","seekPoints","esd","levels"],BoxParser.DIFF_PRIMITIVE_ARRAY_PROP_NAMES=["compatible_brands","matrix","opcolor","sample_counts","sample_counts","sample_deltas","first_chunk","samples_per_chunk","sample_sizes","chunk_offsets","sample_offsets","sample_description_index","sample_duration"],BoxParser.boxEqualFields=function(t,e){if(t&&!e)return!1;for(var i in t)if(!(-1<BoxParser.DIFF_BOXES_PROP_NAMES.indexOf(i)||t[i]instanceof BoxParser.Box||e[i]instanceof BoxParser.Box||void 0===t[i]||void 0===e[i]||"function"==typeof t[i]||"function"==typeof e[i]||t.subBoxNames&&-1<t.subBoxNames.indexOf(i.slice(0,4))||e.subBoxNames&&-1<e.subBoxNames.indexOf(i.slice(0,4))||"data"===i||"start"===i||"size"===i||"creation_time"===i||"modification_time"===i||-1<BoxParser.DIFF_PRIMITIVE_ARRAY_PROP_NAMES.indexOf(i)||t[i]===e[i]))return!1;return!0},BoxParser.boxEqual=function(t,e){if(!BoxParser.boxEqualFields(t,e))return!1;for(var i=0;i<BoxParser.DIFF_BOXES_PROP_NAMES.length;i++){var r=BoxParser.DIFF_BOXES_PROP_NAMES[i];if(t[r]&&e[r]&&!BoxParser.boxEqual(t[r],e[r]))return!1}return!0};var VTTin4Parser=function(){};VTTin4Parser.prototype.parseSample=function(t){for(var e,i=new MP4BoxStream(t.buffer),r=[];!i.isEos();)(e=BoxParser.parseOneBox(i,!1)).code===BoxParser.OK&&"vttc"===e.box.type&&r.push(e.box);return r},VTTin4Parser.prototype.getText=function(t,e,i){function s(t,e,i){return i=i||"0",(t+="").length>=e?t:new Array(e-t.length+1).join(i)+t}function r(t){var e=Math.floor(t/3600),i=Math.floor((t-3600*e)/60),r=Math.floor(t-3600*e-60*i),t=Math.floor(1e3*(t-3600*e-60*i-r));return s(e,2)+":"+s(i,2)+":"+s(r,2)+"."+s(t,3)}for(var a=this.parseSample(i),n="",o=0;o<a.length;o++){var h=a[o];n+=r(t)+" --\x3e "+r(e)+"\r\n",n+=h.payl.text}return n};var XMLSubtitlein4Parser=function(){};XMLSubtitlein4Parser.prototype.parseSample=function(t){var e,i={resources:[]},r=new MP4BoxStream(t.data.buffer);if(t.subsamples&&0!==t.subsamples.length){if(i.documentString=r.readString(t.subsamples[0].size),1<t.subsamples.length)for(e=1;e<t.subsamples.length;e++)i.resources[e]=r.readUint8Array(t.subsamples[e].size)}else i.documentString=r.readString(t.data.length);return"undefined"!=typeof DOMParser&&(i.document=(new DOMParser).parseFromString(i.documentString,"application/xml")),i};var Textin4Parser=function(){};Textin4Parser.prototype.parseSample=function(t){return new MP4BoxStream(t.data.buffer).readString(t.data.length)},Textin4Parser.prototype.parseConfig=function(t){t=new MP4BoxStream(t.buffer);return t.readUint32(),t.readCString()},"undefined"!=typeof exports&&(exports.XMLSubtitlein4Parser=XMLSubtitlein4Parser,exports.Textin4Parser=Textin4Parser);var ISOFile=function(t){this.stream=t||new MultiBufferStream,this.boxes=[],this.mdats=[],this.moofs=[],this.isProgressive=!1,this.moovStartFound=!1,this.onMoovStart=null,this.moovStartSent=!1,this.onReady=null,this.readySent=!1,this.onSegment=null,this.onSamples=null,this.onError=null,this.sampleListBuilt=!1,this.fragmentedTracks=[],this.extractedTracks=[],this.isFragmentationInitialized=!1,this.sampleProcessingStarted=!1,this.nextMoofNumber=0,this.itemListBuilt=!1,this.onSidx=null,this.sidxSent=!1};ISOFile.prototype.setSegmentOptions=function(t,e,i){var r,s=this.getTrackById(t);s&&(r={},this.fragmentedTracks.push(r),r.id=t,r.user=e,(r.trak=s).nextSample=0,r.segmentStream=null,r.nb_samples=1e3,r.rapAlignement=!0,i&&(i.nbSamples&&(r.nb_samples=i.nbSamples),i.rapAlignement&&(r.rapAlignement=i.rapAlignement)))},ISOFile.prototype.unsetSegmentOptions=function(t){for(var e=-1,i=0;i<this.fragmentedTracks.length;i++)this.fragmentedTracks[i].id==t&&(e=i);-1<e&&this.fragmentedTracks.splice(e,1)},ISOFile.prototype.setExtractionOptions=function(t,e,i){var r,s=this.getTrackById(t);s&&(r={},this.extractedTracks.push(r),r.id=t,r.user=e,(r.trak=s).nextSample=0,r.nb_samples=1e3,r.samples=[],i&&i.nbSamples&&(r.nb_samples=i.nbSamples))},ISOFile.prototype.unsetExtractionOptions=function(t){for(var e=-1,i=0;i<this.extractedTracks.length;i++)this.extractedTracks[i].id==t&&(e=i);-1<e&&this.extractedTracks.splice(e,1)},ISOFile.prototype.parse=function(){var t;if(!this.restoreParsePosition||this.restoreParsePosition())for(;;)if(this.hasIncompleteMdat&&this.hasIncompleteMdat()){if(!this.processIncompleteMdat())return}else if(this.saveParsePosition&&this.saveParsePosition(),(t=BoxParser.parseOneBox(this.stream,!1)).code===BoxParser.ERR_NOT_ENOUGH_DATA){if(!this.processIncompleteBox)return;if(!this.processIncompleteBox(t))return}else{var e,i="uuid"!==(e=t.box).type?e.type:e.uuid;switch(this.boxes.push(e),i){case"mdat":this.mdats.push(e);break;case"moof":this.moofs.push(e);break;case"moov":this.moovStartFound=!0,0===this.mdats.length&&(this.isProgressive=!0);default:void 0!==this[i]&&Log.warn("ISOFile","Duplicate Box of type: "+i+", overriding previous occurrence"),this[i]=e}this.updateUsedBytes&&this.updateUsedBytes(e,t)}},ISOFile.prototype.checkBuffer=function(t){if(null==t)throw"Buffer must be defined and non empty";if(void 0===t.fileStart)throw"Buffer must have a fileStart property";return 0===t.byteLength?(Log.warn("ISOFile","Ignoring empty buffer (fileStart: "+t.fileStart+")"),this.stream.logBufferLevel(),!1):(Log.info("ISOFile","Processing buffer (fileStart: "+t.fileStart+")"),t.usedBytes=0,this.stream.insertBuffer(t),this.stream.logBufferLevel(),!!this.stream.initialized()||(Log.warn("ISOFile","Not ready to start parsing"),!1))},ISOFile.prototype.appendBuffer=function(t,e){var i;if(this.checkBuffer(t))return this.parse(),this.moovStartFound&&!this.moovStartSent&&(this.moovStartSent=!0,this.onMoovStart&&this.onMoovStart()),this.moov?(this.sampleListBuilt||(this.buildSampleLists(),this.sampleListBuilt=!0),this.updateSampleLists(),this.onReady&&!this.readySent&&(this.readySent=!0,this.onReady(this.getInfo())),this.processSamples(e),this.nextSeekPosition?(i=this.nextSeekPosition,this.nextSeekPosition=void 0):i=this.nextParsePosition,this.stream.getEndFilePositionAfter&&(i=this.stream.getEndFilePositionAfter(i))):i=this.nextParsePosition||0,this.sidx&&this.onSidx&&!this.sidxSent&&(this.onSidx(this.sidx),this.sidxSent=!0),this.meta&&(this.flattenItemInfo&&!this.itemListBuilt&&(this.flattenItemInfo(),this.itemListBuilt=!0),this.processItems&&this.processItems(this.onItem)),this.stream.cleanBuffers&&(Log.info("ISOFile","Done processing buffer (fileStart: "+t.fileStart+") - next buffer to fetch should have a fileStart position of "+i),this.stream.logBufferLevel(),this.stream.cleanBuffers(),this.stream.logBufferLevel(!0),Log.info("ISOFile","Sample data size in memory: "+this.getAllocatedSampleDataSize())),i},ISOFile.prototype.getInfo=function(){var t,e,i,r,s,a,n={},o=new Date("1904-01-01T00:00:00Z").getTime();if(this.moov)for(n.hasMoov=!0,n.duration=this.moov.mvhd.duration,n.timescale=this.moov.mvhd.timescale,n.isFragmented=null!=this.moov.mvex,n.isFragmented&&this.moov.mvex.mehd&&(n.fragment_duration=this.moov.mvex.mehd.fragment_duration),n.isProgressive=this.isProgressive,n.hasIOD=null!=this.moov.iods,n.brands=[],n.brands.push(this.ftyp.major_brand),n.brands=n.brands.concat(this.ftyp.compatible_brands),n.created=new Date(o+1e3*this.moov.mvhd.creation_time),n.modified=new Date(o+1e3*this.moov.mvhd.modification_time),n.tracks=[],n.audioTracks=[],n.videoTracks=[],n.subtitleTracks=[],n.metadataTracks=[],n.hintTracks=[],n.otherTracks=[],t=0;t<this.moov.traks.length;t++){if(a=(i=this.moov.traks[t]).mdia.minf.stbl.stsd.entries[0],r={},n.tracks.push(r),r.id=i.tkhd.track_id,r.name=i.mdia.hdlr.name,r.references=[],i.tref)for(e=0;e<i.tref.boxes.length;e++)s={},r.references.push(s),s.type=i.tref.boxes[e].type,s.track_ids=i.tref.boxes[e].track_ids;i.edts&&(r.edits=i.edts.elst.entries),r.created=new Date(o+1e3*i.tkhd.creation_time),r.modified=new Date(o+1e3*i.tkhd.modification_time),r.movie_duration=i.tkhd.duration,r.movie_timescale=n.timescale,r.layer=i.tkhd.layer,r.alternate_group=i.tkhd.alternate_group,r.volume=i.tkhd.volume,r.matrix=i.tkhd.matrix,r.track_width=i.tkhd.width/65536,r.track_height=i.tkhd.height/65536,r.timescale=i.mdia.mdhd.timescale,r.cts_shift=i.mdia.minf.stbl.cslg,r.duration=i.mdia.mdhd.duration,r.samples_duration=i.samples_duration,r.codec=a.getCodec(),r.kind=i.udta&&i.udta.kinds.length?i.udta.kinds[0]:{schemeURI:"",value:""},r.language=i.mdia.elng?i.mdia.elng.extended_language:i.mdia.mdhd.languageString,r.nb_samples=i.samples.length,r.size=i.samples_size,r.bitrate=8*r.size*r.timescale/r.samples_duration,a.isAudio()?(r.type="audio",n.audioTracks.push(r),r.audio={},r.audio.sample_rate=a.getSampleRate(),r.audio.channel_count=a.getChannelCount(),r.audio.sample_size=a.getSampleSize()):a.isVideo()?(r.type="video",n.videoTracks.push(r),r.video={},r.video.width=a.getWidth(),r.video.height=a.getHeight()):a.isSubtitle()?(r.type="subtitles",n.subtitleTracks.push(r)):a.isHint()?(r.type="metadata",n.hintTracks.push(r)):a.isMetadata()?(r.type="metadata",n.metadataTracks.push(r)):(r.type="metadata",n.otherTracks.push(r))}else n.hasMoov=!1;if(n.mime="",n.hasMoov&&n.tracks){for(n.videoTracks&&0<n.videoTracks.length?n.mime+='video/mp4; codecs="':n.audioTracks&&0<n.audioTracks.length?n.mime+='audio/mp4; codecs="':n.mime+='application/mp4; codecs="',t=0;t<n.tracks.length;t++)0!==t&&(n.mime+=","),n.mime+=n.tracks[t].codec;n.mime+='"; profiles="',n.mime+=this.ftyp.compatible_brands.join(),n.mime+='"'}return n},ISOFile.prototype.setNextSeekPositionFromSample=function(t){t&&(this.nextSeekPosition?this.nextSeekPosition=Math.min(t.offset+t.alreadyRead,this.nextSeekPosition):this.nextSeekPosition=t.offset+t.alreadyRead)},ISOFile.prototype.processSamples=function(t){var e;if(this.sampleProcessingStarted){if(this.isFragmentationInitialized&&null!==this.onSegment)for(e=0;e<this.fragmentedTracks.length;e++)for(var i=this.fragmentedTracks[e],r=i.trak;r.nextSample<r.samples.length&&this.sampleProcessingStarted;){Log.debug("ISOFile","Creating media fragment on track #"+i.id+" for sample "+r.nextSample);var s=this.createFragment(i.id,r.nextSample,i.segmentStream);if(!s)break;if(i.segmentStream=s,r.nextSample++,(r.nextSample%i.nb_samples==0||t||r.nextSample>=r.samples.length)&&(Log.info("ISOFile","Sending fragmented data on track #"+i.id+" for samples ["+Math.max(0,r.nextSample-i.nb_samples)+","+(r.nextSample-1)+"]"),Log.info("ISOFile","Sample data size in memory: "+this.getAllocatedSampleDataSize()),this.onSegment&&this.onSegment(i.id,i.user,i.segmentStream.buffer,r.nextSample,t||r.nextSample>=r.samples.length),i.segmentStream=null,i!==this.fragmentedTracks[e]))break}if(null!==this.onSamples)for(e=0;e<this.extractedTracks.length;e++){var a=this.extractedTracks[e];for(r=a.trak;r.nextSample<r.samples.length&&this.sampleProcessingStarted;){Log.debug("ISOFile","Exporting on track #"+a.id+" sample #"+r.nextSample);var n=this.getSample(r,r.nextSample);if(!n){this.setNextSeekPositionFromSample(r.samples[r.nextSample]);break}if(r.nextSample++,a.samples.push(n),(r.nextSample%a.nb_samples==0||r.nextSample>=r.samples.length)&&(Log.debug("ISOFile","Sending samples on track #"+a.id+" for sample "+r.nextSample),this.onSamples&&this.onSamples(a.id,a.user,a.samples),a.samples=[],a!==this.extractedTracks[e]))break}}}},ISOFile.prototype.getBox=function(t){t=this.getBoxes(t,!0);return t.length?t[0]:null},ISOFile.prototype.getBoxes=function(t,e){var i=[];return ISOFile._sweep.call(this,t,i,e),i},ISOFile._sweep=function(t,e,i){for(var r in this.type&&this.type==t&&e.push(this),this.boxes){if(e.length&&i)return;ISOFile._sweep.call(this.boxes[r],t,e,i)}},ISOFile.prototype.getTrackSamplesInfo=function(t){t=this.getTrackById(t);if(t)return t.samples},ISOFile.prototype.getTrackSample=function(t,e){t=this.getTrackById(t);return this.getSample(t,e)},ISOFile.prototype.releaseUsedSamples=function(t,e){var i=0,r=this.getTrackById(t);r.lastValidSample||(r.lastValidSample=0);for(var s=r.lastValidSample;s<e;s++)i+=this.releaseSample(r,s);Log.info("ISOFile","Track #"+t+" released samples up to "+e+" (released size: "+i+", remaining: "+this.samplesDataSize+")"),r.lastValidSample=e},ISOFile.prototype.start=function(){this.sampleProcessingStarted=!0,this.processSamples(!1)},ISOFile.prototype.stop=function(){this.sampleProcessingStarted=!1},ISOFile.prototype.flush=function(){Log.info("ISOFile","Flushing remaining samples"),this.updateSampleLists(),this.processSamples(!0),this.stream.cleanBuffers(),this.stream.logBufferLevel(!0)},ISOFile.prototype.seekTrack=function(t,e,i){var r,s,a,n,o=0,h=0;if(0===i.samples.length)return Log.info("ISOFile","No sample in track, cannot seek! Using time "+Log.getDurationString(0,1)+" and offset: 0"),{offset:0,time:0};for(r=0;r<i.samples.length;r++){if(s=i.samples[r],0===r)h=0,n=s.timescale;else if(s.cts>t*s.timescale){h=r-1;break}e&&s.is_sync&&(o=r)}for(e&&(h=o),t=i.samples[h].cts,i.nextSample=h;i.samples[h].alreadyRead===i.samples[h].size&&i.samples[h+1];)h++;return a=i.samples[h].offset+i.samples[h].alreadyRead,Log.info("ISOFile","Seeking to "+(e?"RAP":"")+" sample #"+i.nextSample+" on track "+i.tkhd.track_id+", time "+Log.getDurationString(t,n)+" and offset: "+a),{offset:a,time:t/n}},ISOFile.prototype.getTrackDuration=function(t){return t.samples?((t=t.samples[t.samples.length-1]).cts+t.duration)/t.timescale:1/0},ISOFile.prototype.seek=function(t,e){var i,r,s=this.moov,a={offset:1/0,time:1/0};if(this.moov){for(r=0;r<s.traks.length;r++)i=s.traks[r],t>this.getTrackDuration(i)||((i=this.seekTrack(t,e,i)).offset<a.offset&&(a.offset=i.offset),i.time<a.time&&(a.time=i.time));return Log.info("ISOFile","Seeking at time "+Log.getDurationString(a.time,1)+" needs a buffer with a fileStart position of "+a.offset),a.offset===1/0?a={offset:this.nextParsePosition,time:0}:a.offset=this.stream.getEndFilePositionAfter(a.offset),Log.info("ISOFile","Adjusted seek position (after checking data already in buffer): "+a.offset),a}throw"Cannot seek: moov not received!"},ISOFile.prototype.equal=function(t){for(var e=0;e<this.boxes.length&&e<t.boxes.length;){var i=this.boxes[e],r=t.boxes[e];if(!BoxParser.boxEqual(i,r))return!1;e++}return!0},"undefined"!=typeof exports&&(exports.ISOFile=ISOFile),ISOFile.prototype.lastBoxStartPosition=0,ISOFile.prototype.parsingMdat=null,ISOFile.prototype.nextParsePosition=0,ISOFile.prototype.discardMdatData=!1,ISOFile.prototype.processIncompleteBox=function(t){var e;return"mdat"===t.type?(e=new BoxParser[t.type+"Box"](t.size),this.parsingMdat=e,this.boxes.push(e),this.mdats.push(e),e.start=t.start,e.hdr_size=t.hdr_size,this.stream.addUsedBytes(e.hdr_size),this.lastBoxStartPosition=e.start+e.size,this.stream.seek(e.start+e.size,!1,this.discardMdatData)?!(this.parsingMdat=null):(this.moovStartFound?this.nextParsePosition=this.stream.findEndContiguousBuf():this.nextParsePosition=e.start+e.size,!1)):("moov"===t.type&&(this.moovStartFound=!0,0===this.mdats.length&&(this.isProgressive=!0)),!!this.stream.mergeNextBuffer&&this.stream.mergeNextBuffer()?(this.nextParsePosition=this.stream.getEndPosition(),!0):(!t.type||this.moovStartFound?this.nextParsePosition=this.stream.getEndPosition():this.nextParsePosition=this.stream.getPosition()+t.size,!1))},ISOFile.prototype.hasIncompleteMdat=function(){return null!==this.parsingMdat},ISOFile.prototype.processIncompleteMdat=function(){var t=this.parsingMdat;return this.stream.seek(t.start+t.size,!1,this.discardMdatData)?(Log.debug("ISOFile","Found 'mdat' end in buffered data"),!(this.parsingMdat=null)):(this.nextParsePosition=this.stream.findEndContiguousBuf(),!1)},ISOFile.prototype.restoreParsePosition=function(){return this.stream.seek(this.lastBoxStartPosition,!0,this.discardMdatData)},ISOFile.prototype.saveParsePosition=function(){this.lastBoxStartPosition=this.stream.getPosition()},ISOFile.prototype.updateUsedBytes=function(t,e){this.stream.addUsedBytes&&("mdat"===t.type?(this.stream.addUsedBytes(t.hdr_size),this.discardMdatData&&this.stream.addUsedBytes(t.size-t.hdr_size)):this.stream.addUsedBytes(t.size))},ISOFile.prototype.add=BoxParser.Box.prototype.add,ISOFile.prototype.addBox=BoxParser.Box.prototype.addBox,ISOFile.prototype.init=function(t){var e=t||{},t=(this.add("ftyp").set("major_brand",e.brands&&e.brands[0]||"iso4").set("minor_version",0).set("compatible_brands",e.brands||["iso4"]),this.add("moov"));return t.add("mvhd").set("timescale",e.timescale||600).set("rate",e.rate||65536).set("creation_time",0).set("modification_time",0).set("duration",e.duration||0).set("volume",e.width?0:256).set("matrix",[65536,0,0,0,65536,0,0,0,1073741824]).set("next_track_id",1),t.add("mvex"),this},ISOFile.prototype.addTrack=function(t){this.moov||this.init(t);var e=t||{};e.width=e.width||320,e.height=e.height||320,e.id=e.id||this.moov.mvhd.next_track_id,e.type=e.type||"avc1";var i=this.moov.add("trak");this.moov.mvhd.next_track_id=e.id+1,i.add("tkhd").set("flags",BoxParser.TKHD_FLAG_ENABLED|BoxParser.TKHD_FLAG_IN_MOVIE|BoxParser.TKHD_FLAG_IN_PREVIEW).set("creation_time",0).set("modification_time",0).set("track_id",e.id).set("duration",e.duration||0).set("layer",e.layer||0).set("alternate_group",0).set("volume",1).set("matrix",[0,0,0,0,0,0,0,0,0]).set("width",e.width<<16).set("height",e.height<<16);t=i.add("mdia");t.add("mdhd").set("creation_time",0).set("modification_time",0).set("timescale",e.timescale||1).set("duration",e.media_duration||0).set("language",e.language||"und"),t.add("hdlr").set("handler",e.hdlr||"vide").set("name",e.name||"Track created with MP4Box.js"),t.add("elng").set("extended_language",e.language||"fr-FR");var r=t.add("minf");if(void 0!==BoxParser[e.type+"SampleEntry"]){var s=new BoxParser[e.type+"SampleEntry"];s.data_reference_index=1;var a,n,o="";for(a in BoxParser.sampleEntryCodes)for(var h=BoxParser.sampleEntryCodes[a],d=0;d<h.length;d++)if(-1<h.indexOf(e.type)){o=a;break}switch(o){case"Visual":r.add("vmhd").set("graphicsmode",0).set("opcolor",[0,0,0]),s.set("width",e.width).set("height",e.height).set("horizresolution",72<<16).set("vertresolution",72<<16).set("frame_count",1).set("compressorname",e.type+" Compressor").set("depth",24),e.avcDecoderConfigRecord?((n=new BoxParser.avcCBox).parse(new MP4BoxStream(e.avcDecoderConfigRecord)),s.addBox(n)):e.hevcDecoderConfigRecord&&((n=new BoxParser.hvcCBox).parse(new MP4BoxStream(e.hevcDecoderConfigRecord)),s.addBox(n));break;case"Audio":r.add("smhd").set("balance",e.balance||0),s.set("channel_count",e.channel_count||2).set("samplesize",e.samplesize||16).set("samplerate",e.samplerate||65536);break;case"Hint":r.add("hmhd");break;case"Subtitle":r.add("sthd"),"stpp"===e.type&&s.set("namespace",e.namespace||"nonamespace").set("schema_location",e.schema_location||"").set("auxiliary_mime_types",e.auxiliary_mime_types||"");break;case"Metadata":case"System":default:r.add("nmhd")}e.description&&s.addBox(e.description),e.description_boxes&&e.description_boxes.forEach(function(t){s.addBox(t)}),r.add("dinf").add("dref").addEntry((new BoxParser["url Box"]).set("flags",1));t=r.add("stbl");return t.add("stsd").addEntry(s),t.add("stts").set("sample_counts",[]).set("sample_deltas",[]),t.add("stsc").set("first_chunk",[]).set("samples_per_chunk",[]).set("sample_description_index",[]),t.add("stco").set("chunk_offsets",[]),t.add("stsz").set("sample_sizes",[]),this.moov.mvex.add("trex").set("track_id",e.id).set("default_sample_description_index",e.default_sample_description_index||1).set("default_sample_duration",e.default_sample_duration||0).set("default_sample_size",e.default_sample_size||0).set("default_sample_flags",e.default_sample_flags||0),this.buildTrakSampleLists(i),e.id}},BoxParser.Box.prototype.computeSize=function(t){t=t||new DataStream;t.endianness=DataStream.BIG_ENDIAN,this.write(t)},ISOFile.prototype.addSample=function(t,e,i){var r=i||{},i={},t=this.getTrackById(t);if(null!==t){i.number=t.samples.length,i.track_id=t.tkhd.track_id,i.timescale=t.mdia.mdhd.timescale,i.description_index=r.sample_description_index?r.sample_description_index-1:0,i.description=t.mdia.minf.stbl.stsd.entries[i.description_index],i.data=e,i.size=e.byteLength,i.alreadyRead=i.size,i.duration=r.duration||1,i.cts=r.cts||0,i.dts=r.dts||0,i.is_sync=r.is_sync||!1,i.is_leading=r.is_leading||0,i.depends_on=r.depends_on||0,i.is_depended_on=r.is_depended_on||0,i.has_redundancy=r.has_redundancy||0,i.degradation_priority=r.degradation_priority||0,i.offset=0,i.subsamples=r.subsamples,t.samples.push(i),t.samples_size+=i.size,t.samples_duration+=i.duration,void 0===t.first_dts&&(t.first_dts=r.dts),this.processSamples();r=this.createSingleSampleMoof(i);return this.addBox(r),r.computeSize(),r.trafs[0].truns[0].data_offset=r.size+8,this.add("mdat").data=new Uint8Array(e),i}},ISOFile.prototype.createSingleSampleMoof=function(t){var e=0,e=t.is_sync?1<<25:65536,i=new BoxParser.moofBox;i.add("mfhd").set("sequence_number",this.nextMoofNumber),this.nextMoofNumber++;var r=i.add("traf"),s=this.getTrackById(t.track_id);return r.add("tfhd").set("track_id",t.track_id).set("flags",BoxParser.TFHD_FLAG_DEFAULT_BASE_IS_MOOF),r.add("tfdt").set("baseMediaDecodeTime",t.dts-(s.first_dts||0)),r.add("trun").set("flags",BoxParser.TRUN_FLAGS_DATA_OFFSET|BoxParser.TRUN_FLAGS_DURATION|BoxParser.TRUN_FLAGS_SIZE|BoxParser.TRUN_FLAGS_FLAGS|BoxParser.TRUN_FLAGS_CTS_OFFSET).set("data_offset",0).set("first_sample_flags",0).set("sample_count",1).set("sample_duration",[t.duration]).set("sample_size",[t.size]).set("sample_flags",[e]).set("sample_composition_time_offset",[t.cts-t.dts]),i},ISOFile.prototype.lastMoofIndex=0,ISOFile.prototype.samplesDataSize=0,ISOFile.prototype.resetTables=function(){var t,e;for(this.initial_duration=this.moov.mvhd.duration,t=this.moov.mvhd.duration=0;t<this.moov.traks.length;t++){(e=this.moov.traks[t]).tkhd.duration=0,e.mdia.mdhd.duration=0,(e.mdia.minf.stbl.stco||e.mdia.minf.stbl.co64).chunk_offsets=[],(i=e.mdia.minf.stbl.stsc).first_chunk=[],i.samples_per_chunk=[],i.sample_description_index=[],(e.mdia.minf.stbl.stsz||e.mdia.minf.stbl.stz2).sample_sizes=[],(i=e.mdia.minf.stbl.stts).sample_counts=[],i.sample_deltas=[],(i=e.mdia.minf.stbl.ctts)&&(i.sample_counts=[],i.sample_offsets=[]),i=e.mdia.minf.stbl.stss;var i=e.mdia.minf.stbl.boxes.indexOf(i);-1!=i&&(e.mdia.minf.stbl.boxes[i]=null)}},ISOFile.initSampleGroups=function(t,e,i,r,s){var a,n,o,h;function d(t,e,i){this.grouping_type=t,this.grouping_type_parameter=e,this.sbgp=i,this.last_sample_in_run=-1,this.entry_index=-1}for(e&&(e.sample_groups_info=[]),t.sample_groups_info||(t.sample_groups_info=[]),n=0;n<i.length;n++){for(h=i[n].grouping_type+"/"+i[n].grouping_type_parameter,o=new d(i[n].grouping_type,i[n].grouping_type_parameter,i[n]),e&&(e.sample_groups_info[h]=o),t.sample_groups_info[h]||(t.sample_groups_info[h]=o),a=0;a<r.length;a++)r[a].grouping_type===i[n].grouping_type&&(o.description=r[a],o.description.used=!0);if(s)for(a=0;a<s.length;a++)s[a].grouping_type===i[n].grouping_type&&(o.fragment_description=s[a],o.fragment_description.used=!0,o.is_fragment=!0)}if(e){if(s)for(n=0;n<s.length;n++)!s[n].used&&2<=s[n].version&&(h=s[n].grouping_type+"/0",(o=new d(s[n].grouping_type,0)).is_fragment=!0,e.sample_groups_info[h]||(e.sample_groups_info[h]=o))}else for(n=0;n<r.length;n++)!r[n].used&&2<=r[n].version&&(h=r[n].grouping_type+"/0",o=new d(r[n].grouping_type,0),t.sample_groups_info[h]||(t.sample_groups_info[h]=o))},ISOFile.setSampleGroupProperties=function(t,e,i,r){var s,a,n;for(s in e.sample_groups=[],r)e.sample_groups[s]={},e.sample_groups[s].grouping_type=r[s].grouping_type,e.sample_groups[s].grouping_type_parameter=r[s].grouping_type_parameter,i>=r[s].last_sample_in_run&&(r[s].last_sample_in_run<0&&(r[s].last_sample_in_run=0),r[s].entry_index++,r[s].entry_index<=r[s].sbgp.entries.length-1&&(r[s].last_sample_in_run+=r[s].sbgp.entries[r[s].entry_index].sample_count)),r[s].entry_index<=r[s].sbgp.entries.length-1?e.sample_groups[s].group_description_index=r[s].sbgp.entries[r[s].entry_index].group_description_index:e.sample_groups[s].group_description_index=-1,0!==e.sample_groups[s].group_description_index&&(n=r[s].fragment_description||r[s].description,0<e.sample_groups[s].group_description_index?(a=65535<e.sample_groups[s].group_description_index?(e.sample_groups[s].group_description_index>>16)-1:e.sample_groups[s].group_description_index-1,n&&0<=a&&(e.sample_groups[s].description=n.entries[a])):n&&2<=n.version&&0<n.default_group_description_index&&(e.sample_groups[s].description=n.entries[n.default_group_description_index-1]))},ISOFile.process_sdtp=function(t,e,i){e&&(t?(e.is_leading=t.is_leading[i],e.depends_on=t.sample_depends_on[i],e.is_depended_on=t.sample_is_depended_on[i],e.has_redundancy=t.sample_has_redundancy[i]):(e.is_leading=0,e.depends_on=0,e.is_depended_on=0,e.has_redundancy=0))},ISOFile.prototype.buildSampleLists=function(){for(var t,e=0;e<this.moov.traks.length;e++)t=this.moov.traks[e],this.buildTrakSampleLists(t)},ISOFile.prototype.buildTrakSampleLists=function(t){var e,i,r,s,a,n,o,h,d,l,p,f,u,_,c,m,x,g,y,B,S,P,U,b;if(t.samples=[],t.samples_duration=0,t.samples_size=0,i=t.mdia.minf.stbl.stco||t.mdia.minf.stbl.co64,r=t.mdia.minf.stbl.stsc,s=t.mdia.minf.stbl.stsz||t.mdia.minf.stbl.stz2,a=t.mdia.minf.stbl.stts,n=t.mdia.minf.stbl.ctts,o=t.mdia.minf.stbl.stss,h=t.mdia.minf.stbl.stsd,d=t.mdia.minf.stbl.subs,f=t.mdia.minf.stbl.stdp,l=t.mdia.minf.stbl.sbgps,p=t.mdia.minf.stbl.sgpds,S=B=y=g=-1,b=U=P=0,ISOFile.initSampleGroups(t,null,l,p),void 0!==s){for(e=0;e<s.sample_sizes.length;e++){var v={};v.number=e,v.track_id=t.tkhd.track_id,v.timescale=t.mdia.mdhd.timescale,v.alreadyRead=0,(t.samples[e]=v).size=s.sample_sizes[e],t.samples_size+=v.size,0===e?(_=1,u=0,v.chunk_index=_,v.chunk_run_index=u,x=r.samples_per_chunk[u],m=0,c=u+1<r.first_chunk.length?r.first_chunk[u+1]-1:1/0):e<x?(v.chunk_index=_,v.chunk_run_index=u):(_++,m=0,(v.chunk_index=_)<=c||(c=++u+1<r.first_chunk.length?r.first_chunk[u+1]-1:1/0),v.chunk_run_index=u,x+=r.samples_per_chunk[u]),v.description_index=r.sample_description_index[v.chunk_run_index]-1,v.description=h.entries[v.description_index],v.offset=i.chunk_offsets[v.chunk_index-1]+m,m+=v.size,g<e&&(y++,g<0&&(g=0),g+=a.sample_counts[y]),0<e?(t.samples[e-1].duration=a.sample_deltas[y],t.samples_duration+=t.samples[e-1].duration,v.dts=t.samples[e-1].dts+t.samples[e-1].duration):v.dts=0,n?(B<=e&&(S++,B<0&&(B=0),B+=n.sample_counts[S]),v.cts=t.samples[e].dts+n.sample_offsets[S]):v.cts=v.dts,o?(e==o.sample_numbers[P]-1?(v.is_sync=!0,P++):(v.is_sync=!1,v.degradation_priority=0),d&&d.entries[U].sample_delta+b==e+1&&(v.subsamples=d.entries[U].subsamples,b+=d.entries[U].sample_delta,U++)):v.is_sync=!0,ISOFile.process_sdtp(t.mdia.minf.stbl.sdtp,v,v.number),v.degradation_priority=f?f.priority[e]:0,d&&d.entries[U].sample_delta+b==e&&(v.subsamples=d.entries[U].subsamples,b+=d.entries[U].sample_delta),(0<l.length||0<p.length)&&ISOFile.setSampleGroupProperties(t,v,e,t.sample_groups_info)}0<e&&(t.samples[e-1].duration=Math.max(t.mdia.mdhd.duration-t.samples[e-1].dts,0),t.samples_duration+=t.samples[e-1].duration)}},ISOFile.prototype.updateSampleLists=function(){var t,e,i,r,s,a,n,o,h,d,l,p;if(void 0!==this.moov)for(;this.lastMoofIndex<this.moofs.length;)if(n=this.moofs[this.lastMoofIndex],this.lastMoofIndex++,"moof"==n.type)for(o=n,t=0;t<o.trafs.length;t++){for(h=o.trafs[t],d=this.getTrackById(h.tfhd.track_id),l=this.getTrexById(h.tfhd.track_id),e=h.tfhd.flags&BoxParser.TFHD_FLAG_SAMPLE_DESC?h.tfhd.default_sample_description_index:l?l.default_sample_description_index:1,i=h.tfhd.flags&BoxParser.TFHD_FLAG_SAMPLE_DUR?h.tfhd.default_sample_duration:l?l.default_sample_duration:0,r=h.tfhd.flags&BoxParser.TFHD_FLAG_SAMPLE_SIZE?h.tfhd.default_sample_size:l?l.default_sample_size:0,s=h.tfhd.flags&BoxParser.TFHD_FLAG_SAMPLE_FLAGS?h.tfhd.default_sample_flags:l?l.default_sample_flags:0,(h.sample_number=0)<h.sbgps.length&&ISOFile.initSampleGroups(d,h,h.sbgps,d.mdia.minf.stbl.sgpds,h.sgpds),y=0;y<h.truns.length;y++)for(var f=h.truns[y],u=0;u<f.sample_count;u++){(p={}).moof_number=this.lastMoofIndex,p.number_in_traf=h.sample_number,h.sample_number++,p.number=d.samples.length,h.first_sample_index=d.samples.length,d.samples.push(p),p.track_id=d.tkhd.track_id,p.timescale=d.mdia.mdhd.timescale,p.description_index=e-1,p.description=d.mdia.minf.stbl.stsd.entries[p.description_index],p.size=r,f.flags&BoxParser.TRUN_FLAGS_SIZE&&(p.size=f.sample_size[u]),d.samples_size+=p.size,p.duration=i,f.flags&BoxParser.TRUN_FLAGS_DURATION&&(p.duration=f.sample_duration[u]),d.samples_duration+=p.duration,d.first_traf_merged||0<u?p.dts=d.samples[d.samples.length-2].dts+d.samples[d.samples.length-2].duration:(h.tfdt?p.dts=h.tfdt.baseMediaDecodeTime:p.dts=0,d.first_traf_merged=!0),p.cts=p.dts,f.flags&BoxParser.TRUN_FLAGS_CTS_OFFSET&&(p.cts=p.dts+f.sample_composition_time_offset[u]),x=s,f.flags&BoxParser.TRUN_FLAGS_FLAGS?x=f.sample_flags[u]:0===u&&f.flags&BoxParser.TRUN_FLAGS_FIRST_FLAG&&(x=f.first_sample_flags),p.is_sync=!(x>>16&1),p.is_leading=x>>26&3,p.depends_on=x>>24&3,p.is_depended_on=x>>22&3,p.has_redundancy=x>>20&3,p.degradation_priority=65535&x;var _=!!(h.tfhd.flags&BoxParser.TFHD_FLAG_BASE_DATA_OFFSET),c=!!(h.tfhd.flags&BoxParser.TFHD_FLAG_DEFAULT_BASE_IS_MOOF),m=!!(f.flags&BoxParser.TRUN_FLAGS_DATA_OFFSET),x=0,x=_?h.tfhd.base_data_offset:c||0===y?o.start:a;p.offset=0===y&&0===u?m?x+f.data_offset:x:a,a=p.offset+p.size,(0<h.sbgps.length||0<h.sgpds.length||0<d.mdia.minf.stbl.sbgps.length||0<d.mdia.minf.stbl.sgpds.length)&&ISOFile.setSampleGroupProperties(d,p,p.number_in_traf,h.sample_groups_info)}if(h.subs){d.has_fragment_subsamples=!0;for(var g=h.first_sample_index,y=0;y<h.subs.entries.length;y++)g+=h.subs.entries[y].sample_delta,(p=d.samples[g-1]).subsamples=h.subs.entries[y].subsamples}}},ISOFile.prototype.getSample=function(t,e){var i,r=t.samples[e];if(!this.moov)return null;if(r.data){if(r.alreadyRead==r.size)return r}else r.data=new Uint8Array(r.size),r.alreadyRead=0,this.samplesDataSize+=r.size,Log.debug("ISOFile","Allocating sample #"+e+" on track #"+t.tkhd.track_id+" of size "+r.size+" (total: "+this.samplesDataSize+")");for(;;){var s=this.stream.findPosition(!0,r.offset+r.alreadyRead,!1);if(!(-1<s))return null;s=(i=this.stream.buffers[s]).byteLength-(r.offset+r.alreadyRead-i.fileStart);if(r.size-r.alreadyRead<=s)return Log.debug("ISOFile","Getting sample #"+e+" data (alreadyRead: "+r.alreadyRead+" offset: "+(r.offset+r.alreadyRead-i.fileStart)+" read size: "+(r.size-r.alreadyRead)+" full size: "+r.size+")"),DataStream.memcpy(r.data.buffer,r.alreadyRead,i,r.offset+r.alreadyRead-i.fileStart,r.size-r.alreadyRead),i.usedBytes+=r.size-r.alreadyRead,this.stream.logBufferLevel(),r.alreadyRead=r.size,r;if(0==s)return null;Log.debug("ISOFile","Getting sample #"+e+" partial data (alreadyRead: "+r.alreadyRead+" offset: "+(r.offset+r.alreadyRead-i.fileStart)+" read size: "+s+" full size: "+r.size+")"),DataStream.memcpy(r.data.buffer,r.alreadyRead,i,r.offset+r.alreadyRead-i.fileStart,s),r.alreadyRead+=s,i.usedBytes+=s,this.stream.logBufferLevel()}},ISOFile.prototype.releaseSample=function(t,e){e=t.samples[e];return e.data?(this.samplesDataSize-=e.size,e.data=null,e.alreadyRead=0,e.size):0},ISOFile.prototype.getAllocatedSampleDataSize=function(){return this.samplesDataSize},ISOFile.prototype.getCodecs=function(){for(var t="",e=0;e<this.moov.traks.length;e++)0<e&&(t+=","),t+=this.moov.traks[e].mdia.minf.stbl.stsd.entries[0].getCodec();return t},ISOFile.prototype.getTrexById=function(t){var e;if(!this.moov||!this.moov.mvex)return null;for(e=0;e<this.moov.mvex.trexs.length;e++){var i=this.moov.mvex.trexs[e];if(i.track_id==t)return i}return null},ISOFile.prototype.getTrackById=function(t){if(void 0===this.moov)return null;for(var e=0;e<this.moov.traks.length;e++){var i=this.moov.traks[e];if(i.tkhd.track_id==t)return i}return null},ISOFile.prototype.items=[],ISOFile.prototype.entity_groups=[],ISOFile.prototype.itemsDataSize=0,ISOFile.prototype.flattenItemInfo=function(){var t=this.items,e=this.entity_groups,i=this.meta;if(null!=i&&void 0!==i.hdlr&&void 0!==i.iinf){for(d=0;d<i.iinf.item_infos.length;d++)(s={}).id=i.iinf.item_infos[d].item_ID,(t[s.id]=s).ref_to=[],s.name=i.iinf.item_infos[d].item_name,0<i.iinf.item_infos[d].protection_index&&(s.protection=i.ipro.protections[i.iinf.item_infos[d].protection_index-1]),i.iinf.item_infos[d].item_type?s.type=i.iinf.item_infos[d].item_type:s.type="mime",s.content_type=i.iinf.item_infos[d].content_type,s.content_encoding=i.iinf.item_infos[d].content_encoding;if(i.grpl)for(d=0;d<i.grpl.boxes.length;d++)entity_group={},entity_group.id=i.grpl.boxes[d].group_id,entity_group.entity_ids=i.grpl.boxes[d].entity_ids,entity_group.type=i.grpl.boxes[d].type,e[entity_group.id]=entity_group;if(i.iloc)for(d=0;d<i.iloc.items.length;d++){var r=i.iloc.items[d],s=t[r.item_ID];switch(0!==r.data_reference_index&&(Log.warn("Item storage with reference to other files: not supported"),s.source=i.dinf.boxes[r.data_reference_index-1]),r.construction_method){case 0:break;case 1:case 2:Log.warn("Item storage with construction_method : not supported")}for(s.extents=[],n=s.size=0;n<r.extents.length;n++)s.extents[n]={},s.extents[n].offset=r.extents[n].extent_offset+r.base_offset,s.extents[n].length=r.extents[n].extent_length,s.extents[n].alreadyRead=0,s.size+=s.extents[n].length}if(i.pitm&&(t[i.pitm.item_id].primary=!0),i.iref)for(d=0;d<i.iref.references.length;d++)for(var a=i.iref.references[d],n=0;n<a.references.length;n++)t[a.from_item_ID].ref_to.push({type:a.type,id:a.references[n]});if(i.iprp)for(var o=0;o<i.iprp.ipmas.length;o++)for(var h=i.iprp.ipmas[o],d=0;d<h.associations.length;d++){var l=h.associations[d];if(s=(s=t[l.id])||e[l.id])for(void 0===s.properties&&(s.properties={},s.properties.boxes=[]),n=0;n<l.props.length;n++){var p=l.props[n];0<p.property_index&&p.property_index-1<i.iprp.ipco.boxes.length&&(p=i.iprp.ipco.boxes[p.property_index-1],s.properties[p.type]=p,s.properties.boxes.push(p))}}}},ISOFile.prototype.getItem=function(t){var e,i;if(!this.meta)return null;if(!(i=this.items[t]).data&&i.size)i.data=new Uint8Array(i.size),i.alreadyRead=0,this.itemsDataSize+=i.size,Log.debug("ISOFile","Allocating item #"+t+" of size "+i.size+" (total: "+this.itemsDataSize+")");else if(i.alreadyRead===i.size)return i;for(var r=0;r<i.extents.length;r++){var s=i.extents[r];if(s.alreadyRead!==s.length){var a=this.stream.findPosition(!0,s.offset+s.alreadyRead,!1);if(!(-1<a))return null;a=(e=this.stream.buffers[a]).byteLength-(s.offset+s.alreadyRead-e.fileStart);if(!(s.length-s.alreadyRead<=a))return Log.debug("ISOFile","Getting item #"+t+" extent #"+r+" partial data (alreadyRead: "+s.alreadyRead+" offset: "+(s.offset+s.alreadyRead-e.fileStart)+" read size: "+a+" full extent size: "+s.length+" full item size: "+i.size+")"),DataStream.memcpy(i.data.buffer,i.alreadyRead,e,s.offset+s.alreadyRead-e.fileStart,a),s.alreadyRead+=a,i.alreadyRead+=a,e.usedBytes+=a,this.stream.logBufferLevel(),null;Log.debug("ISOFile","Getting item #"+t+" extent #"+r+" data (alreadyRead: "+s.alreadyRead+" offset: "+(s.offset+s.alreadyRead-e.fileStart)+" read size: "+(s.length-s.alreadyRead)+" full extent size: "+s.length+" full item size: "+i.size+")"),DataStream.memcpy(i.data.buffer,i.alreadyRead,e,s.offset+s.alreadyRead-e.fileStart,s.length-s.alreadyRead),e.usedBytes+=s.length-s.alreadyRead,this.stream.logBufferLevel(),i.alreadyRead+=s.length-s.alreadyRead,s.alreadyRead=s.length}}return i.alreadyRead===i.size?i:null},ISOFile.prototype.releaseItem=function(t){var e=this.items[t];if(e.data){this.itemsDataSize-=e.size,e.data=null;for(var i=e.alreadyRead=0;i<e.extents.length;i++)e.extents[i].alreadyRead=0;return e.size}return 0},ISOFile.prototype.processItems=function(t){for(var e in this.items){var i=this.items[e];this.getItem(i.id),t&&!i.sent&&(t(i),i.sent=!0,i.data=null)}},ISOFile.prototype.hasItem=function(t){for(var e in this.items){var i=this.items[e];if(i.name===t)return i.id}return-1},ISOFile.prototype.getMetaHandler=function(){return this.meta?this.meta.hdlr.handler:null},ISOFile.prototype.getPrimaryItem=function(){return this.meta&&this.meta.pitm?this.getItem(this.meta.pitm.item_id):null},ISOFile.prototype.itemToFragmentedTrackFile=function(t){var e=t||{},i=null;if(null==(i=e.itemId?this.getItem(e.itemId):this.getPrimaryItem()))return null;t=new ISOFile;t.discardMdatData=!1;e={type:i.type,description_boxes:i.properties.boxes};i.properties.ispe&&(e.width=i.properties.ispe.image_width,e.height=i.properties.ispe.image_height);e=t.addTrack(e);return e?(t.addSample(e,i.data),t):null},ISOFile.prototype.write=function(t){for(var e=0;e<this.boxes.length;e++)this.boxes[e].write(t)},ISOFile.prototype.createFragment=function(t,e,i){var r=this.getTrackById(t),t=this.getSample(r,e);if(null==t)return this.setNextSeekPositionFromSample(r.samples[e]),null;e=i||new DataStream;e.endianness=DataStream.BIG_ENDIAN;i=this.createSingleSampleMoof(t);i.write(e),i.trafs[0].truns[0].data_offset=i.size+8,Log.debug("MP4Box","Adjusting data_offset with new value "+i.trafs[0].truns[0].data_offset),e.adjustUint32(i.trafs[0].truns[0].data_offset_position,i.trafs[0].truns[0].data_offset);i=new BoxParser.mdatBox;return i.data=t.data,i.write(e),e},ISOFile.writeInitializationSegment=function(t,e,i,r){var s;Log.debug("ISOFile","Generating initialization segment");var a=new DataStream;a.endianness=DataStream.BIG_ENDIAN,t.write(a);var n=e.add("mvex");for(i&&n.add("mehd").set("fragment_duration",i),s=0;s<e.traks.length;s++)n.add("trex").set("track_id",e.traks[s].tkhd.track_id).set("default_sample_description_index",1).set("default_sample_duration",r).set("default_sample_size",0).set("default_sample_flags",65536);return e.write(a),a.buffer},ISOFile.prototype.save=function(t){var e=new DataStream;e.endianness=DataStream.BIG_ENDIAN,this.write(e),e.save(t)},ISOFile.prototype.getBuffer=function(){var t=new DataStream;return t.endianness=DataStream.BIG_ENDIAN,this.write(t),t.buffer},ISOFile.prototype.initializeSegmentation=function(){var t,e,i,r;for(null===this.onSegment&&Log.warn("MP4Box","No segmentation callback set!"),this.isFragmentationInitialized||(this.isFragmentationInitialized=!0,this.nextMoofNumber=0,this.resetTables()),e=[],t=0;t<this.fragmentedTracks.length;t++){var s=new BoxParser.moovBox;s.mvhd=this.moov.mvhd,s.boxes.push(s.mvhd),i=this.getTrackById(this.fragmentedTracks[t].id),s.boxes.push(i),s.traks.push(i),(r={}).id=i.tkhd.track_id,r.user=this.fragmentedTracks[t].user,r.buffer=ISOFile.writeInitializationSegment(this.ftyp,s,this.moov.mvex&&this.moov.mvex.mehd?this.moov.mvex.mehd.fragment_duration:void 0,0<this.moov.traks[t].samples.length?this.moov.traks[t].samples[0].duration:0),e.push(r)}return e},BoxParser.Box.prototype.printHeader=function(t){this.size+=8,this.size>MAX_SIZE&&(this.size+=8),"uuid"===this.type&&(this.size+=16),t.log(t.indent+"size:"+this.size),t.log(t.indent+"type:"+this.type)},BoxParser.FullBox.prototype.printHeader=function(t){this.size+=4,BoxParser.Box.prototype.printHeader.call(this,t),t.log(t.indent+"version:"+this.version),t.log(t.indent+"flags:"+this.flags)},BoxParser.Box.prototype.print=function(t){this.printHeader(t)},BoxParser.ContainerBox.prototype.print=function(t){this.printHeader(t);for(var e,i=0;i<this.boxes.length;i++)this.boxes[i]&&(e=t.indent,t.indent+=" ",this.boxes[i].print(t),t.indent=e)},ISOFile.prototype.print=function(t){t.indent="";for(var e=0;e<this.boxes.length;e++)this.boxes[e]&&this.boxes[e].print(t)},BoxParser.mvhdBox.prototype.print=function(t){BoxParser.FullBox.prototype.printHeader.call(this,t),t.log(t.indent+"creation_time: "+this.creation_time),t.log(t.indent+"modification_time: "+this.modification_time),t.log(t.indent+"timescale: "+this.timescale),t.log(t.indent+"duration: "+this.duration),t.log(t.indent+"rate: "+this.rate),t.log(t.indent+"volume: "+(this.volume>>8)),t.log(t.indent+"matrix: "+this.matrix.join(", ")),t.log(t.indent+"next_track_id: "+this.next_track_id)},BoxParser.tkhdBox.prototype.print=function(t){BoxParser.FullBox.prototype.printHeader.call(this,t),t.log(t.indent+"creation_time: "+this.creation_time),t.log(t.indent+"modification_time: "+this.modification_time),t.log(t.indent+"track_id: "+this.track_id),t.log(t.indent+"duration: "+this.duration),t.log(t.indent+"volume: "+(this.volume>>8)),t.log(t.indent+"matrix: "+this.matrix.join(", ")),t.log(t.indent+"layer: "+this.layer),t.log(t.indent+"alternate_group: "+this.alternate_group),t.log(t.indent+"width: "+this.width),t.log(t.indent+"height: "+this.height)};var MP4Box={createFile:function(t,e){t=void 0===t||t,e=new ISOFile(e);return e.discardMdatData=!t,e}};"undefined"!=typeof exports&&(exports.createFile=MP4Box.createFile);
+//# sourceMappingURL=mp4box.all.min.js.map \ No newline at end of file
diff --git a/testing/talos/talos/tests/offscreencanvas/benchmarks/video/mp4box.js-LICENSE b/testing/talos/talos/tests/offscreencanvas/benchmarks/video/mp4box.js-LICENSE
new file mode 100644
index 0000000000..dccb790eac
--- /dev/null
+++ b/testing/talos/talos/tests/offscreencanvas/benchmarks/video/mp4box.js-LICENSE
@@ -0,0 +1,24 @@
+Copyright (c) 2012. Telecom ParisTech/TSI/MM/GPAC Cyril Concolato
+All rights reserved.
+
+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 copyright holder 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/testing/talos/talos/tests/offscreencanvas/benchmarks/video/shared.js b/testing/talos/talos/tests/offscreencanvas/benchmarks/video/shared.js
new file mode 100644
index 0000000000..ca75fbc9b1
--- /dev/null
+++ b/testing/talos/talos/tests/offscreencanvas/benchmarks/video/shared.js
@@ -0,0 +1,128 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/*global MP4Demuxer b:true*/
+
+const kTotalFrames = 100;
+
+let start;
+let frameCount;
+
+function runTestInternal(
+ testName,
+ canvasType,
+ canvas,
+ isWorker,
+ videoUri,
+ resolve,
+ reject
+) {
+ const runContext = isWorker ? "worker" : "main";
+ dump(
+ "[" +
+ canvasType +
+ " webcodecs " +
+ runContext +
+ "] load video '" +
+ videoUri +
+ "'\n"
+ );
+
+ let drawImage;
+ if (canvasType == "2d") {
+ const ctx = canvas.getContext("2d");
+ drawImage = function (frame) {
+ ctx.drawImage(frame, 0, 0);
+ };
+ } else if (canvasType == "webgl") {
+ const gl = canvas.getContext("webgl");
+ gl.bindTexture(gl.TEXTURE_2D, gl.createTexture());
+ drawImage = function (frame) {
+ gl.texImage2D(
+ gl.TEXTURE_2D,
+ 0,
+ gl.RGBA,
+ gl.RGBA,
+ gl.UNSIGNED_BYTE,
+ frame
+ );
+ };
+ } else {
+ dump("[" + canvasType + " webcodecs " + runContext + "] unknown type\n");
+ reject("unknown type " + canvasType);
+ return;
+ }
+
+ frameCount = 0;
+
+ const decoder = new VideoDecoder({
+ output(frame) {
+ if (frameCount == 0) {
+ start = performance.now();
+ }
+ ++frameCount;
+
+ dump(
+ "[" +
+ canvasType +
+ " webcodecs " +
+ runContext +
+ "] draw frame " +
+ frameCount +
+ "\n"
+ );
+ drawImage(frame);
+ frame.close();
+
+ if (frameCount == kTotalFrames) {
+ var elapsed = performance.now() - start;
+ setTimeout(() => {
+ resolve({ testName, elapsed, totalFrames: kTotalFrames });
+ }, 0);
+
+ dump(
+ "[" + canvasType + " webcodecs " + runContext + "] close decoder\n"
+ );
+ decoder.close();
+ }
+ },
+ error(e) {
+ dump(
+ "[" +
+ canvasType +
+ " webcodecs " +
+ runContext +
+ "] decoder error " +
+ e +
+ "\n"
+ );
+ decoder.close();
+ reject(e);
+ },
+ });
+
+ new MP4Demuxer(videoUri, {
+ onConfig(config) {
+ dump(
+ "[" + canvasType + " webcodecs " + runContext + "] demuxer config\n"
+ );
+ decoder.configure(config);
+ },
+ onChunk(chunk) {
+ dump("[" + canvasType + " webcodecs " + runContext + "] demuxer chunk\n");
+ decoder.decode(chunk);
+ },
+ setStatus(msg) {
+ dump(
+ "[" +
+ canvasType +
+ " webcodecs " +
+ runContext +
+ "] demuxer status - " +
+ msg +
+ "\n"
+ );
+ },
+ });
+}
diff --git a/testing/talos/talos/tests/offscreencanvas/benchmarks/video/webgl_av1_main.html b/testing/talos/talos/tests/offscreencanvas/benchmarks/video/webgl_av1_main.html
new file mode 100644
index 0000000000..038e9e3008
--- /dev/null
+++ b/testing/talos/talos/tests/offscreencanvas/benchmarks/video/webgl_av1_main.html
@@ -0,0 +1,22 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ - You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<html>
+<head>
+<script src="mp4box.all.min.js" type="text/javascript"></script>
+<script src="demuxer_mp4.js" type="text/javascript"></script>
+<script src="shared.js" type="text/javascript"></script>
+<script src="helper_main.js" type="text/javascript"></script>
+<script language="javascript" type="text/javascript">
+
+function init() {
+ const videoUri = "../../../video/clips/testsrc.1080p.60fps.av1.short.mp4";
+ runTest("offscreencanvas_webcodecs_main_av1_webgl", "webgl", videoUri);
+}
+
+</script>
+
+</head>
+<body id="body" onload="init();">
+</body>
+</html>
diff --git a/testing/talos/talos/tests/offscreencanvas/benchmarks/video/webgl_av1_worker.html b/testing/talos/talos/tests/offscreencanvas/benchmarks/video/webgl_av1_worker.html
new file mode 100644
index 0000000000..b2dc7fc89d
--- /dev/null
+++ b/testing/talos/talos/tests/offscreencanvas/benchmarks/video/webgl_av1_worker.html
@@ -0,0 +1,20 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ - You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<html>
+<head>
+<script src="helper_worker.js" type="text/javascript"></script>
+<script language="javascript" type="text/javascript">
+const worker = new Worker("worker.js");
+
+function init() {
+ const videoUri = "../../../video/clips/testsrc.1080p.60fps.av1.short.mp4";
+ runTest("offscreencanvas_webcodecs_worker_webgl_av1", "webgl", worker, videoUri);
+}
+
+</script>
+
+</head>
+<body id="body" onload="init();">
+</body>
+</html>
diff --git a/testing/talos/talos/tests/offscreencanvas/benchmarks/video/webgl_h264_main.html b/testing/talos/talos/tests/offscreencanvas/benchmarks/video/webgl_h264_main.html
new file mode 100644
index 0000000000..c0b277f49c
--- /dev/null
+++ b/testing/talos/talos/tests/offscreencanvas/benchmarks/video/webgl_h264_main.html
@@ -0,0 +1,22 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ - You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<html>
+<head>
+<script src="mp4box.all.min.js" type="text/javascript"></script>
+<script src="demuxer_mp4.js" type="text/javascript"></script>
+<script src="shared.js" type="text/javascript"></script>
+<script src="helper_main.js" type="text/javascript"></script>
+<script language="javascript" type="text/javascript">
+
+function init() {
+ const videoUri = "../../../video/clips/testsrc.1080p.60fps.h264.short.mp4";
+ runTest("offscreencanvas_webcodecs_main_webgl_h264", "webgl", videoUri);
+}
+
+</script>
+
+</head>
+<body id="body" onload="init();">
+</body>
+</html>
diff --git a/testing/talos/talos/tests/offscreencanvas/benchmarks/video/webgl_h264_worker.html b/testing/talos/talos/tests/offscreencanvas/benchmarks/video/webgl_h264_worker.html
new file mode 100644
index 0000000000..2764c5c4e7
--- /dev/null
+++ b/testing/talos/talos/tests/offscreencanvas/benchmarks/video/webgl_h264_worker.html
@@ -0,0 +1,20 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ - You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<html>
+<head>
+<script src="helper_worker.js" type="text/javascript"></script>
+<script language="javascript" type="text/javascript">
+const worker = new Worker("worker.js");
+
+function init() {
+ const videoUri = "../../../video/clips/testsrc.1080p.60fps.h264.short.mp4";
+ runTest("offscreencanvas_webcodecs_worker_webgl_h264", "webgl", worker, videoUri);
+}
+
+</script>
+
+</head>
+<body id="body" onload="init();">
+</body>
+</html>
diff --git a/testing/talos/talos/tests/offscreencanvas/benchmarks/video/webgl_vp9_main.html b/testing/talos/talos/tests/offscreencanvas/benchmarks/video/webgl_vp9_main.html
new file mode 100644
index 0000000000..7834b448a2
--- /dev/null
+++ b/testing/talos/talos/tests/offscreencanvas/benchmarks/video/webgl_vp9_main.html
@@ -0,0 +1,22 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ - You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<html>
+<head>
+<script src="mp4box.all.min.js" type="text/javascript"></script>
+<script src="demuxer_mp4.js" type="text/javascript"></script>
+<script src="shared.js" type="text/javascript"></script>
+<script src="helper_main.js" type="text/javascript"></script>
+<script language="javascript" type="text/javascript">
+
+function init() {
+ const videoUri = "../../../video/clips/testsrc.1080p.60fps.vp9.short.mp4";
+ runTest("offscreencanvas_webcodecs_main_webgl_vp9", "webgl", videoUri);
+}
+
+</script>
+
+</head>
+<body id="body" onload="init();">
+</body>
+</html>
diff --git a/testing/talos/talos/tests/offscreencanvas/benchmarks/video/webgl_vp9_worker.html b/testing/talos/talos/tests/offscreencanvas/benchmarks/video/webgl_vp9_worker.html
new file mode 100644
index 0000000000..86867860da
--- /dev/null
+++ b/testing/talos/talos/tests/offscreencanvas/benchmarks/video/webgl_vp9_worker.html
@@ -0,0 +1,20 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ - You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<html>
+<head>
+<script src="helper_worker.js" type="text/javascript"></script>
+<script language="javascript" type="text/javascript">
+const worker = new Worker("worker.js");
+
+function init() {
+ const videoUri = "../../../video/clips/testsrc.1080p.60fps.vp9.short.mp4";
+ runTest("offscreencanvas_webcodecs_worker_webgl_vp9", "webgl", worker, videoUri);
+}
+
+</script>
+
+</head>
+<body id="body" onload="init();">
+</body>
+</html>
diff --git a/testing/talos/talos/tests/offscreencanvas/benchmarks/video/worker.js b/testing/talos/talos/tests/offscreencanvas/benchmarks/video/worker.js
new file mode 100644
index 0000000000..16ef0ccdf2
--- /dev/null
+++ b/testing/talos/talos/tests/offscreencanvas/benchmarks/video/worker.js
@@ -0,0 +1,30 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+importScripts("mp4box.all.min.js");
+importScripts("demuxer_mp4.js");
+importScripts("shared.js");
+
+self.onmessage = e => {
+ const resolve = result => {
+ self.postMessage(result);
+ };
+ const reject = errorMessage => {
+ self.postMessage({ errorMessage });
+ };
+
+ try {
+ runTestInternal(
+ e.data.testName,
+ e.data.canvasType,
+ e.data.offscreenCanvas,
+ /* isWorker */ true,
+ e.data.videoUri,
+ resolve,
+ reject
+ );
+ } catch (e) {
+ reject(e);
+ }
+};
diff --git a/testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_main_2d_av1.manifest b/testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_main_2d_av1.manifest
new file mode 100644
index 0000000000..6cc7e4aa30
--- /dev/null
+++ b/testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_main_2d_av1.manifest
@@ -0,0 +1 @@
+% http://localhost/tests/offscreencanvas/benchmarks/video/2d_av1_main.html
diff --git a/testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_main_2d_h264.manifest b/testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_main_2d_h264.manifest
new file mode 100644
index 0000000000..e7e2d69dc3
--- /dev/null
+++ b/testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_main_2d_h264.manifest
@@ -0,0 +1 @@
+% http://localhost/tests/offscreencanvas/benchmarks/video/2d_h264_main.html
diff --git a/testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_main_2d_vp9.manifest b/testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_main_2d_vp9.manifest
new file mode 100644
index 0000000000..54b90edd19
--- /dev/null
+++ b/testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_main_2d_vp9.manifest
@@ -0,0 +1 @@
+% http://localhost/tests/offscreencanvas/benchmarks/video/2d_vp9_main.html
diff --git a/testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_main_webgl_av1.manifest b/testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_main_webgl_av1.manifest
new file mode 100644
index 0000000000..452cf5b4d1
--- /dev/null
+++ b/testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_main_webgl_av1.manifest
@@ -0,0 +1 @@
+% http://localhost/tests/offscreencanvas/benchmarks/video/webgl_av1_main.html
diff --git a/testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_main_webgl_h264.manifest b/testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_main_webgl_h264.manifest
new file mode 100644
index 0000000000..751b5bdee7
--- /dev/null
+++ b/testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_main_webgl_h264.manifest
@@ -0,0 +1 @@
+% http://localhost/tests/offscreencanvas/benchmarks/video/webgl_h264_main.html
diff --git a/testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_main_webgl_vp9.manifest b/testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_main_webgl_vp9.manifest
new file mode 100644
index 0000000000..458cc92ce9
--- /dev/null
+++ b/testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_main_webgl_vp9.manifest
@@ -0,0 +1 @@
+% http://localhost/tests/offscreencanvas/benchmarks/video/webgl_vp9_main.html
diff --git a/testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_worker_2d_av1.manifest b/testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_worker_2d_av1.manifest
new file mode 100644
index 0000000000..4daf25cbef
--- /dev/null
+++ b/testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_worker_2d_av1.manifest
@@ -0,0 +1 @@
+% http://localhost/tests/offscreencanvas/benchmarks/video/2d_av1_worker.html
diff --git a/testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_worker_2d_h264.manifest b/testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_worker_2d_h264.manifest
new file mode 100644
index 0000000000..975c5d0647
--- /dev/null
+++ b/testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_worker_2d_h264.manifest
@@ -0,0 +1 @@
+% http://localhost/tests/offscreencanvas/benchmarks/video/2d_h264_worker.html
diff --git a/testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_worker_2d_vp9.manifest b/testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_worker_2d_vp9.manifest
new file mode 100644
index 0000000000..7f0fb644d7
--- /dev/null
+++ b/testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_worker_2d_vp9.manifest
@@ -0,0 +1 @@
+% http://localhost/tests/offscreencanvas/benchmarks/video/2d_vp9_worker.html
diff --git a/testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_worker_webgl_av1.manifest b/testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_worker_webgl_av1.manifest
new file mode 100644
index 0000000000..d47d736331
--- /dev/null
+++ b/testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_worker_webgl_av1.manifest
@@ -0,0 +1 @@
+% http://localhost/tests/offscreencanvas/benchmarks/video/webgl_av1_worker.html
diff --git a/testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_worker_webgl_h264.manifest b/testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_worker_webgl_h264.manifest
new file mode 100644
index 0000000000..c17e7e45d4
--- /dev/null
+++ b/testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_worker_webgl_h264.manifest
@@ -0,0 +1 @@
+% http://localhost/tests/offscreencanvas/benchmarks/video/webgl_h264_worker.html
diff --git a/testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_worker_webgl_vp9.manifest b/testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_worker_webgl_vp9.manifest
new file mode 100644
index 0000000000..38d2835d6d
--- /dev/null
+++ b/testing/talos/talos/tests/offscreencanvas/offscreencanvas_webcodecs_worker_webgl_vp9.manifest
@@ -0,0 +1 @@
+% http://localhost/tests/offscreencanvas/benchmarks/video/webgl_vp9_worker.html
diff --git a/testing/talos/talos/tests/pdfpaint/bug1722807_page2.pdf b/testing/talos/talos/tests/pdfpaint/bug1722807_page2.pdf
new file mode 100644
index 0000000000..8d09618271
--- /dev/null
+++ b/testing/talos/talos/tests/pdfpaint/bug1722807_page2.pdf
Binary files differ
diff --git a/testing/talos/talos/tests/pdfpaint/bug857031_page1.pdf b/testing/talos/talos/tests/pdfpaint/bug857031_page1.pdf
new file mode 100644
index 0000000000..c90f57de7f
--- /dev/null
+++ b/testing/talos/talos/tests/pdfpaint/bug857031_page1.pdf
Binary files differ
diff --git a/testing/talos/talos/tests/pdfpaint/pdfpaint.manifest b/testing/talos/talos/tests/pdfpaint/pdfpaint.manifest
new file mode 100644
index 0000000000..0dfa696b1a
--- /dev/null
+++ b/testing/talos/talos/tests/pdfpaint/pdfpaint.manifest
@@ -0,0 +1,3 @@
+http://localhost/tests/pdfpaint/tracemonkey.pdf
+http://localhost/tests/pdfpaint/bug1722807_page2.pdf
+http://localhost/tests/pdfpaint/bug857031_page1.pdf
diff --git a/testing/talos/talos/tests/pdfpaint/tracemonkey.pdf b/testing/talos/talos/tests/pdfpaint/tracemonkey.pdf
new file mode 100644
index 0000000000..65570184ac
--- /dev/null
+++ b/testing/talos/talos/tests/pdfpaint/tracemonkey.pdf
Binary files differ
diff --git a/testing/talos/talos/tests/perf-reftest-singletons/.eslintrc.json b/testing/talos/talos/tests/perf-reftest-singletons/.eslintrc.json
new file mode 100644
index 0000000000..612b9ee56e
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest-singletons/.eslintrc.json
@@ -0,0 +1,5 @@
+{
+ "rules": {
+ "no-undef": "off"
+ }
+}
diff --git a/testing/talos/talos/tests/perf-reftest-singletons/README b/testing/talos/talos/tests/perf-reftest-singletons/README
new file mode 100644
index 0000000000..72610f4a95
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest-singletons/README
@@ -0,0 +1,14 @@
+This directory is for adding short performance tests that will be tracked in
+Talos and receive regression alerts.
+
+To add a test:
+
+1) Create a test HTML file which includes <script src="util.js"></script>
+2) In that file, have an onload handler which does the following:
+ i) Any pre-test setup needed.
+ ii) A call to perf_start().
+ iii) The test steps.
+ iv) A call to perf_finish().
+3) Add your test to the perf_reftest_singletons.manifest file.
+4) Add your test to the list in build/pgo/index.html, if it should be used
+ for profile-guided optimization.
diff --git a/testing/talos/talos/tests/perf-reftest-singletons/abspos-reflow-1.html b/testing/talos/talos/tests/perf-reftest-singletons/abspos-reflow-1.html
new file mode 100644
index 0000000000..9e13ca9b4d
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest-singletons/abspos-reflow-1.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<script src="util.js"></script>
+<script>
+window.onload = function() {
+ const dom = build_dom(5000, "div", {
+ attributes: {
+ style: "position: absolute; left: 0px; top: 0px;",
+ },
+ });
+
+ document.body.appendChild(dom);
+ flush_layout();
+
+ perf_start();
+ for (const element of dom.querySelectorAll("*")) {
+ if (!element.childElementCount) {
+ flush_layout(element);
+ element.style.left = "auto";
+ }
+ }
+ flush_layout();
+ perf_finish();
+};
+</script>
+<body>
+</body>
diff --git a/testing/talos/talos/tests/perf-reftest-singletons/append-nth-edge-has-pseudo.html b/testing/talos/talos/tests/perf-reftest-singletons/append-nth-edge-has-pseudo.html
new file mode 100644
index 0000000000..0ade9b8050
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest-singletons/append-nth-edge-has-pseudo.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<style>
+/* This marks all elements as part of potential anchor. */
+:has(> nonexistent) {
+ color: black;
+}
+
+/* Mark container for nth-edge search. */
+.item:first-child {
+ color: green;
+}
+
+/* A lot of rules that should only really invalidate on .container. */
+foo .container:has(.item:first-child)::after, foo .container:has(.item:last-child)::before,
+bar .container:has(.item:first-child)::after, bar .container:has(.item:last-child)::before,
+baz .container:has(.item:first-child)::after, baz .container:has(.item:last-child)::before,
+beef .container:has(.item:first-child)::after, beef .container:has(.item:last-child)::before {
+ color: pink;
+}
+</style>
+<script src="util.js"></script>
+<script>
+window.onload = function() {
+ const N = 500;
+ flush_layout();
+ perf_start();
+ for (let i = 0; i < N; i++) {
+ const d = document.createElement("div");
+ d.classList.add("item");
+ dut.appendChild(d);
+ }
+ flush_layout();
+ perf_finish();
+};
+</script>
+<div class="top">
+<div><div><div><div><div><div><div>
+<div id="dut" class="container"><div class="item"></div></div>
+</div></div></div></div></div></div></div></div>
diff --git a/testing/talos/talos/tests/perf-reftest-singletons/attr-selector-1.html b/testing/talos/talos/tests/perf-reftest-singletons/attr-selector-1.html
new file mode 100644
index 0000000000..46fe9b6d0a
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest-singletons/attr-selector-1.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<body>
+<script src="util.js"></script>
+<script>
+window.onload = function() {
+ document.body.appendChild(build_dom(10000, "div", { attributes: { "data-x": "https://example.com/b/abcdefghijklmnopqrstuvwxyz" } }));
+ flush_layout(document.body);
+ document.head.appendChild(build_rule("[data-x^='https://example.com/a']", 500, "{}"));
+ document.head.appendChild(build_rule("[data-x$='abcdefghijklmnopqrstuvwxy.']", 500, "{}"));
+ document.head.appendChild(build_rule("[data-x*='abcdefghijklmnopqrstuvwxy.']", 500, "{}"));
+ perf_start();
+ flush_style(document.body.lastChild);
+ perf_finish();
+};
+</script>
diff --git a/testing/talos/talos/tests/perf-reftest-singletons/bidi-resolution-1.html b/testing/talos/talos/tests/perf-reftest-singletons/bidi-resolution-1.html
new file mode 100644
index 0000000000..c07899386a
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest-singletons/bidi-resolution-1.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html style="overflow-y: scroll">
+<head>
+<meta charset="UTF-8">
+<script src="util.js"></script>
+<script>
+window.onload = function() {
+ const TEST_WORD = "iqwdzx zzaعظأkvcg rvde";
+ let div = document.getElementById("test");
+
+ div.textContent = TEST_WORD;
+ flush_layout();
+
+ perf_start();
+ div.textContent = build_text(TEST_WORD, 30, 800);
+ flush_layout(div);
+ perf_finish();
+};
+</script>
+</head>
+<body>
+ <div id="test" style="white-space: normal"></div>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/perf-reftest-singletons/bloom-basic-2.html b/testing/talos/talos/tests/perf-reftest-singletons/bloom-basic-2.html
new file mode 100644
index 0000000000..2b9f769256
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest-singletons/bloom-basic-2.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <script src="util.js"></script>
+ <script>
+window.onload = function() {
+ /* Use many rules, instead of one rule with many selectors, to test per-rule overhead. */
+ document.head.appendChild(build_rule("caption div, caption span", 1, "{ color: blue; } ", 20000));
+ let dom = build_dom(5000, "div");
+
+ flush_layout();
+ perf_start();
+ document.body.appendChild(dom);
+ flush_style(dom);
+ perf_finish();
+};
+ </script>
+ </head>
+ <body>
+ </body>
+</html>
diff --git a/testing/talos/talos/tests/perf-reftest-singletons/bloom-basic.html b/testing/talos/talos/tests/perf-reftest-singletons/bloom-basic.html
new file mode 100644
index 0000000000..99772b933a
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest-singletons/bloom-basic.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <script src="util.js"></script>
+ <script>
+window.onload = function() {
+ document.head.appendChild(build_rule("caption div, caption span", 20000, "{ color: blue; } "));
+ let dom = build_dom(5000, "div");
+
+ flush_layout();
+ perf_start();
+ document.body.appendChild(dom);
+ flush_style(dom);
+ perf_finish();
+};
+ </script>
+ </head>
+ <body>
+ </body>
+</html>
diff --git a/testing/talos/talos/tests/perf-reftest-singletons/coalesce-1.html b/testing/talos/talos/tests/perf-reftest-singletons/coalesce-1.html
new file mode 100644
index 0000000000..40d90d9b4c
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest-singletons/coalesce-1.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<style>
+.x { color: yellow; }
+</style>
+<script src="util.js"></script>
+<script>
+function set_class(n) {
+ n.className = "x";
+ n = n.firstChild;
+ while (n) {
+ set_class(n);
+ n = n.nextSibling;
+ }
+}
+window.onload = function() {
+ let root = build_dom(50000, "div");
+ document.body.appendChild(root);
+ flush_layout(root);
+ perf_start();
+ set_class(root);
+ flush_style(root);
+ perf_finish();
+};
+</script>
+<body></body>
diff --git a/testing/talos/talos/tests/perf-reftest-singletons/coalesce-2.html b/testing/talos/talos/tests/perf-reftest-singletons/coalesce-2.html
new file mode 100644
index 0000000000..1c65fc789e
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest-singletons/coalesce-2.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<style>
+.x { color: yellow; }
+</style>
+<script src="util.js"></script>
+<script>
+function set_class(n) {
+ let child = n.firstChild;
+ while (child) {
+ set_class(child);
+ child = child.nextSibling;
+ }
+ n.className = "x";
+}
+window.onload = function() {
+ let root = build_dom(50000, "div");
+ document.body.appendChild(root);
+ flush_layout(root);
+ set_class(root);
+ perf_start();
+ flush_style(root);
+ perf_finish();
+};
+</script>
+<body></body>
diff --git a/testing/talos/talos/tests/perf-reftest-singletons/display-none-1.html b/testing/talos/talos/tests/perf-reftest-singletons/display-none-1.html
new file mode 100644
index 0000000000..036c40236f
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest-singletons/display-none-1.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<style>
+.root { display: none; }
+.x div { color: blue; }
+</style>
+<script src="util.js"></script>
+<script>
+window.onload = function() {
+ let root = document.createElement("div");
+ root.className = "root";
+ root.appendChild(build_dom(100000, "div"));
+ document.body.appendChild(root);
+ flush_layout(root);
+ perf_start();
+ document.body.className = "x";
+ flush_style(root);
+ perf_finish();
+};
+</script>
+<body></body>
diff --git a/testing/talos/talos/tests/perf-reftest-singletons/external-string-pass.html b/testing/talos/talos/tests/perf-reftest-singletons/external-string-pass.html
new file mode 100644
index 0000000000..459dacab0b
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest-singletons/external-string-pass.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<script src="util.js"></script>
+<script>
+ onload = function() {
+ var str = new Array(1e6).join("a");
+ var div = document.createElement("div");
+ // Round-trip through the DOM to make sure we have an external string.
+ div.setAttribute("x", str);
+ str = div.getAttribute("x");
+ var count = 3e7; // About 1s
+ var t = new DataTransfer();
+ perf_start();
+ for (let i = count; i > 0; --i) {
+ t.dropEffect = str;
+ }
+ perf_finish();
+ };
+</script>
diff --git a/testing/talos/talos/tests/perf-reftest-singletons/getElementById-1.html b/testing/talos/talos/tests/perf-reftest-singletons/getElementById-1.html
new file mode 100644
index 0000000000..96ed66dbe2
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest-singletons/getElementById-1.html
@@ -0,0 +1,42 @@
+<!doctype html>
+<script src="util.js"></script>
+<div id="x"></div>
+<div id="y"></div>
+<script>
+ /*
+ * Test the performance of getElementById.
+ */
+ onload = function() {
+ document.getElementById("x").counterProp = 0;
+ document.getElementById("y").counterProp = 0;
+ var count = 1000000; // About 50-60ms
+ var ids = ["x", "y"];
+ perf_start();
+ for (var i = count; i > 0; --i) {
+ /*
+ * We jump through some hoops here, because the JIT knows that
+ * getElementById is side-effect-free. That means we need to prevent it
+ * being dead-code eliminated or loop-hoisted.
+ *
+ * We avoid dead-code elimination by using the return value in a way that
+ * the JIT can't eliminate (i.e. by changing state on it that can be
+ * observed later). The use of += instead of just assigning is to avoid
+ * issues with the JIT detecting that later writes dominate earlier ones
+ * and eliminating the earlier ones by having all writes contribute to the
+ * state.
+ *
+ * We avoid loop-hoisting by making the arg to the getElementById call
+ * depend on the loop variable, which is obviously not loop-invariant.
+ *
+ * A sufficiently smart compiler could probably still figure out that
+ * there are only two possible return values, loop-hoist them both, and
+ * just grab the right thing inside the loop based on the value of the
+ * loop variable, and if that starts happening we'll need to see what we
+ * can do to fool the compiler into actually doing the many getElementById
+ * calls involved.
+ */
+ document.getElementById(ids[i % 2]).counterProp += i;
+ }
+ perf_finish();
+ }
+</script>
diff --git a/testing/talos/talos/tests/perf-reftest-singletons/id-getter-1.html b/testing/talos/talos/tests/perf-reftest-singletons/id-getter-1.html
new file mode 100644
index 0000000000..5b9430134a
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest-singletons/id-getter-1.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<script src="util.js"></script>
+<script>
+onload = function() {
+ var count = 20000000;
+ var el = document.createElement("span");
+ // A very short string.
+ el.id = "a";
+ var getter = Object.getOwnPropertyDescriptor(Element.prototype, "id").get;
+ perf_start();
+ for (var i = 0; i < count; ++i) {
+ getter.call(el);
+ }
+ perf_finish();
+};
+</script>
diff --git a/testing/talos/talos/tests/perf-reftest-singletons/id-getter-2.html b/testing/talos/talos/tests/perf-reftest-singletons/id-getter-2.html
new file mode 100644
index 0000000000..1751f73359
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest-singletons/id-getter-2.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<script src="util.js"></script>
+<script>
+onload = function() {
+ var count = 20000000;
+ var el = document.createElement("span");
+ // The longest string we can fit in a single-byte inline string (16 chars).
+ el.id = "aaaaaaaaaaaaaaaa";
+ var getter = Object.getOwnPropertyDescriptor(Element.prototype, "id").get;
+ perf_start();
+ for (var i = 0; i < count; ++i) {
+ getter.call(el);
+ }
+ perf_finish();
+};
+</script>
diff --git a/testing/talos/talos/tests/perf-reftest-singletons/id-getter-3.html b/testing/talos/talos/tests/perf-reftest-singletons/id-getter-3.html
new file mode 100644
index 0000000000..2dd2170bbb
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest-singletons/id-getter-3.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<script src="util.js"></script>
+<script>
+onload = function() {
+ var count = 20000000;
+ var el = document.createElement("span");
+ // The shortest string we can't fit in a single-byte inline string (17 chars).
+ el.id = "aaaaaaaaaaaaaaaaa";
+ var getter = Object.getOwnPropertyDescriptor(Element.prototype, "id").get;
+ perf_start();
+ for (var i = 0; i < count; ++i) {
+ getter.call(el);
+ }
+ perf_finish();
+};
+</script>
diff --git a/testing/talos/talos/tests/perf-reftest-singletons/id-getter-4.html b/testing/talos/talos/tests/perf-reftest-singletons/id-getter-4.html
new file mode 100644
index 0000000000..2a6849da30
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest-singletons/id-getter-4.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<script src="util.js"></script>
+<script>
+onload = function() {
+ var count = 20000000;
+ var el = document.createElement("span");
+ // The longest string we can fit in an autostring buffer (63 chars).
+ el.id = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
+ var getter = Object.getOwnPropertyDescriptor(Element.prototype, "id").get;
+ perf_start();
+ for (var i = 0; i < count; ++i) {
+ getter.call(el);
+ }
+ perf_finish();
+};
+</script>
diff --git a/testing/talos/talos/tests/perf-reftest-singletons/id-getter-5.html b/testing/talos/talos/tests/perf-reftest-singletons/id-getter-5.html
new file mode 100644
index 0000000000..4677c38e3a
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest-singletons/id-getter-5.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<script src="util.js"></script>
+<script>
+onload = function() {
+ var count = 20000000;
+ var el = document.createElement("span");
+ // The shortest string we can't fit in an autostring buffer (64 chars).
+ el.id = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
+ var getter = Object.getOwnPropertyDescriptor(Element.prototype, "id").get;
+ perf_start();
+ for (var i = 0; i < count; ++i) {
+ getter.call(el);
+ }
+ perf_finish();
+};
+</script>
diff --git a/testing/talos/talos/tests/perf-reftest-singletons/id-getter-6.html b/testing/talos/talos/tests/perf-reftest-singletons/id-getter-6.html
new file mode 100644
index 0000000000..5020f6a2da
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest-singletons/id-getter-6.html
@@ -0,0 +1,17 @@
+<!doctype html>
+<script src="util.js"></script>
+<script>
+onload = function() {
+ var count = 20000000;
+ var el = document.createElement("span");
+ // The longest string we can share via the external string cache after
+ // checking the chars (100 chars).
+ el.id = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
+ var getter = Object.getOwnPropertyDescriptor(Element.prototype, "id").get;
+ perf_start();
+ for (var i = 0; i < count; ++i) {
+ getter.call(el);
+ }
+ perf_finish();
+};
+</script>
diff --git a/testing/talos/talos/tests/perf-reftest-singletons/id-getter-7.html b/testing/talos/talos/tests/perf-reftest-singletons/id-getter-7.html
new file mode 100644
index 0000000000..5b4e360a58
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest-singletons/id-getter-7.html
@@ -0,0 +1,17 @@
+<!doctype html>
+<script src="util.js"></script>
+<script>
+onload = function() {
+ var count = 20000000;
+ var el = document.createElement("span");
+ // The shortest string we can't share via the external string cache after
+ // checking the chars (101 chars).
+ el.id = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
+ var getter = Object.getOwnPropertyDescriptor(Element.prototype, "id").get;
+ perf_start();
+ for (var i = 0; i < count; ++i) {
+ getter.call(el);
+ }
+ perf_finish();
+};
+</script>
diff --git a/testing/talos/talos/tests/perf-reftest-singletons/inline-style-cache-1.html b/testing/talos/talos/tests/perf-reftest-singletons/inline-style-cache-1.html
new file mode 100644
index 0000000000..a02eb8db2f
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest-singletons/inline-style-cache-1.html
@@ -0,0 +1,24 @@
+<!doctype html>
+<script src="util.js"></script>
+<body>
+<script>
+const styles = `:host { background: red; width: 100px; height: 100px; display: block; }`.repeat(3000);
+customElements.define("custom-element", class CustomElement extends HTMLElement {
+ connectedCallback() {
+ this.attachShadow({ mode: "open" });
+ const style = document.createElement("style");
+ style.textContent = styles;
+ this.shadowRoot.appendChild(style);
+ }
+});
+
+onload = function() {
+ perf_start();
+ for (let i = 0; i < 1000; ++i) {
+ document.body.appendChild(document.createElement("custom-element"));
+ }
+
+ flush_layout(document.body);
+ perf_finish();
+};
+</script>
diff --git a/testing/talos/talos/tests/perf-reftest-singletons/input-type-number-setAttribute.html b/testing/talos/talos/tests/perf-reftest-singletons/input-type-number-setAttribute.html
new file mode 100644
index 0000000000..ea30e43551
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest-singletons/input-type-number-setAttribute.html
@@ -0,0 +1,29 @@
+<!doctype html>
+<script src="util.js"></script>
+<script>
+ // Test performance of setting attributes on <input type="number">
+ onload = function() {
+ let count = 5000; // About 100ms, after bug 1842027
+ let a = [null, null];
+ perf_start();
+ for (let i = 0; i < count; i++) {
+ const el = document.createElement("input");
+ el.setAttribute("type", "number");
+ el.setAttribute("label", "Segment count weight");
+ el.setAttribute("value", 2.5);
+ el.setAttribute("min", 0.01);
+ el.setAttribute("max", 10);
+ el.setAttribute("step", 0.01);
+ a[0] = el;
+ const el2 = document.createElement("input");
+ el2.setAttribute("type", "number");
+ el2.setAttribute("label", "Grid size");
+ el2.setAttribute("value", 500);
+ el2.setAttribute("min", 100);
+ el2.setAttribute("max", 10000);
+ el2.setAttribute("step", 10);
+ a[1] = el2;
+ }
+ perf_finish();
+ }
+</script>
diff --git a/testing/talos/talos/tests/perf-reftest-singletons/line-iterator.html b/testing/talos/talos/tests/perf-reftest-singletons/line-iterator.html
new file mode 100644
index 0000000000..6d6e7b87cf
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest-singletons/line-iterator.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<script src="util.js"></script>
+<body>
+<pre contenteditable id="test">
+</pre>
+<script>
+window.onload = function() {
+ // Create 10000 lines of editable text.
+ let text = "";
+ for (let i = 0; i < 10000; i++) {
+ text += "Line " + i + "\n";
+ }
+ testElem = document.getElementById("test");
+ testElem.textContent = text;
+ testElem.focus(); // FYI: When this runs, the URL bar has focus, thus, this fails to steal focus
+ flush_layout();
+ perf_start();
+ // Move the selection down through 2000 lines...
+ const sel = getSelection();
+ sel.setPosition(testElem.firstChild, 0);
+ for (let i = 0; i < 2000; i++) {
+ sel.modify("move", "forward", "line");
+ }
+ // ...then go to the end, and back up by 2000 lines.
+ sel.setPosition(testElem, 1);
+ for (let i = 0; i < 2000; i++) {
+ sel.modify("move", "backward", "line");
+ }
+ perf_finish();
+}
+</script>
diff --git a/testing/talos/talos/tests/perf-reftest-singletons/link-style-cache-1.html b/testing/talos/talos/tests/perf-reftest-singletons/link-style-cache-1.html
new file mode 100644
index 0000000000..80351b420a
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest-singletons/link-style-cache-1.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<script src="util.js"></script>
+<body>
+<script>
+const styles = `:host { background: red; width: 100px; height: 100px; display: block; }`.repeat(3000);
+const blob = URL.createObjectURL(new Blob([styles], { type: 'text/css' }));
+customElements.define("custom-element", class CustomElement extends HTMLElement {
+ connectedCallback() {
+ this.attachShadow({ mode: "open" });
+ const link = document.createElement("link");
+ link.rel = "stylesheet";
+ link.href = blob;
+ this.shadowRoot.appendChild(link);
+ }
+});
+
+perf_start();
+
+for (let i = 0; i < 1000; ++i)
+ document.body.appendChild(document.createElement("custom-element"));
+
+onload = function() {
+ flush_layout(document.body);
+ perf_finish();
+};
+</script>
diff --git a/testing/talos/talos/tests/perf-reftest-singletons/many-custom-props.html b/testing/talos/talos/tests/perf-reftest-singletons/many-custom-props.html
new file mode 100644
index 0000000000..fd32dd0dca
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest-singletons/many-custom-props.html
@@ -0,0 +1,19 @@
+<!doctype html>
+<script src="util.js"></script>
+<body>
+<script>
+window.onload = function() {
+ flush_layout();
+ perf_start();
+ let s = document.createElement("style");
+ s.appendChild(document.createTextNode(`* {`));
+ for (let i = 0; i < 100000; ++i) {
+ s.appendChild(document.createTextNode(`--custom-prop-${i}: ${Math.random()};`));
+ }
+ s.appendChild(document.createTextNode(`}`));
+ document.head.appendChild(s);
+ flush_style(document.body);
+ perf_finish();
+}
+</script>
+</body>
diff --git a/testing/talos/talos/tests/perf-reftest-singletons/nth-index-1.html b/testing/talos/talos/tests/perf-reftest-singletons/nth-index-1.html
new file mode 100644
index 0000000000..47ad821b99
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest-singletons/nth-index-1.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<style>
+.x:nth-child(200000) { background-color: yellow; }
+.x:nth-child(200000) div, .x:nth-child(200000) span { color: green; }
+</style>
+<script src="util.js"></script>
+<script>
+window.onload = function() {
+ let root = document.createElement("div");
+ root.className = "root";
+ for (let i = 0; i < 200000; i++) {
+ root.appendChild(document.createElement("div"));
+ }
+ let last = root.lastChild;
+ last.appendChild(build_dom(5000, "div"));
+ document.body.appendChild(root);
+ flush_layout(root);
+ perf_start();
+ last.className = "x";
+ flush_style(root);
+ perf_finish();
+};
+</script>
+<body></body>
diff --git a/testing/talos/talos/tests/perf-reftest-singletons/nth-index-2.html b/testing/talos/talos/tests/perf-reftest-singletons/nth-index-2.html
new file mode 100644
index 0000000000..f662f5e500
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest-singletons/nth-index-2.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<style>
+.x:nth-of-type(200000) { background-color: yellow; }
+.x:nth-of-type(200000) div, .x:nth-of-type(200000) span { color: green; }
+</style>
+<script src="util.js"></script>
+<script>
+window.onload = function() {
+ let root = document.createElement("div");
+ root.className = "root";
+ for (let i = 0; i < 200000; i++) {
+ root.appendChild(document.createElement("div"));
+ }
+ let last = root.lastChild;
+ last.appendChild(build_dom(5000, "div"));
+ document.body.appendChild(root);
+ flush_layout(root);
+ perf_start();
+ last.className = "x";
+ flush_style(root);
+ perf_finish();
+};
+</script>
+<body></body>
diff --git a/testing/talos/talos/tests/perf-reftest-singletons/only-children-1.html b/testing/talos/talos/tests/perf-reftest-singletons/only-children-1.html
new file mode 100644
index 0000000000..02441f1729
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest-singletons/only-children-1.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<style>
+.x > div, .x > span { background-color: yellow; }
+</style>
+<script src="util.js"></script>
+<script>
+window.onload = function() {
+ let root = document.createElement("div");
+ root.appendChild(build_dom(100000, "div"));
+ document.body.appendChild(root);
+ flush_layout(root);
+ perf_start();
+ root.className = "x";
+ flush_style(root);
+ perf_finish();
+};
+</script>
+<body></body>
diff --git a/testing/talos/talos/tests/perf-reftest-singletons/parent-basic-singleton.html b/testing/talos/talos/tests/perf-reftest-singletons/parent-basic-singleton.html
new file mode 100644
index 0000000000..dc672040a5
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest-singletons/parent-basic-singleton.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <script src="util.js"></script>
+ <script>
+window.onload = function() {
+ document.head.appendChild(build_rule("body > .foo > .foo > .foo", 1000, "{ color: blue; } "));
+ let dom = build_dom(5000, "div", { attributes: {"class": "foo" } });
+
+ flush_layout();
+ perf_start();
+ document.body.appendChild(dom);
+ flush_style(dom);
+ perf_finish();
+};
+ </script>
+ </head>
+ <body>
+ </body>
+</html>
diff --git a/testing/talos/talos/tests/perf-reftest-singletons/perf_reftest_singletons.manifest b/testing/talos/talos/tests/perf-reftest-singletons/perf_reftest_singletons.manifest
new file mode 100644
index 0000000000..f3a54e5821
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest-singletons/perf_reftest_singletons.manifest
@@ -0,0 +1,41 @@
+# When modifying this list, please also update build/pgo/index.html (If relevant to profile-guided optimzation).
+% http://localhost/tests/perf-reftest-singletons/abspos-reflow-1.html
+% http://localhost/tests/perf-reftest-singletons/attr-selector-1.html
+% http://localhost/tests/perf-reftest-singletons/bidi-resolution-1.html
+% http://localhost/tests/perf-reftest-singletons/bloom-basic-2.html
+% http://localhost/tests/perf-reftest-singletons/bloom-basic.html
+% http://localhost/tests/perf-reftest-singletons/coalesce-1.html
+% http://localhost/tests/perf-reftest-singletons/coalesce-2.html
+% http://localhost/tests/perf-reftest-singletons/display-none-1.html
+% http://localhost/tests/perf-reftest-singletons/external-string-pass.html
+% http://localhost/tests/perf-reftest-singletons/getElementById-1.html
+% http://localhost/tests/perf-reftest-singletons/id-getter-1.html
+% http://localhost/tests/perf-reftest-singletons/id-getter-2.html
+% http://localhost/tests/perf-reftest-singletons/id-getter-3.html
+% http://localhost/tests/perf-reftest-singletons/id-getter-4.html
+% http://localhost/tests/perf-reftest-singletons/id-getter-5.html
+% http://localhost/tests/perf-reftest-singletons/id-getter-6.html
+% http://localhost/tests/perf-reftest-singletons/id-getter-7.html
+% http://localhost/tests/perf-reftest-singletons/inline-style-cache-1.html
+% http://localhost/tests/perf-reftest-singletons/input-type-number-setAttribute.html
+% http://localhost/tests/perf-reftest-singletons/line-iterator.html
+% http://localhost/tests/perf-reftest-singletons/link-style-cache-1.html
+% http://localhost/tests/perf-reftest-singletons/many-custom-props.html
+% http://localhost/tests/perf-reftest-singletons/nth-index-1.html
+% http://localhost/tests/perf-reftest-singletons/nth-index-2.html
+% http://localhost/tests/perf-reftest-singletons/only-children-1.html
+% http://localhost/tests/perf-reftest-singletons/parent-basic-singleton.html
+% http://localhost/tests/perf-reftest-singletons/scrollbar-styles-1.html
+% http://localhost/tests/perf-reftest-singletons/slow-selector-1.html
+% http://localhost/tests/perf-reftest-singletons/slow-selector-2.html
+% http://localhost/tests/perf-reftest-singletons/style-attr-1.html
+% http://localhost/tests/perf-reftest-singletons/style-sharing-style-attr.html
+% http://localhost/tests/perf-reftest-singletons/style-sharing.html
+% http://localhost/tests/perf-reftest-singletons/svg-text-textLength-1.html
+% http://localhost/tests/perf-reftest-singletons/svg-text-getExtentOfChar-1.html
+% http://localhost/tests/perf-reftest-singletons/tiny-traversal-singleton.html
+% http://localhost/tests/perf-reftest-singletons/window-named-property-get.html
+% http://localhost/tests/perf-reftest-singletons/remove-children.html
+% http://localhost/tests/perf-reftest-singletons/remove-front-has-pseudo.html
+% http://localhost/tests/perf-reftest-singletons/append-nth-edge-has-pseudo.html
+# When modifying this list, please also update build/pgo/index.html (If relevant to profile-guided optimzation).
diff --git a/testing/talos/talos/tests/perf-reftest-singletons/remove-children.html b/testing/talos/talos/tests/perf-reftest-singletons/remove-children.html
new file mode 100644
index 0000000000..4adf9f49ab
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest-singletons/remove-children.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<table id="dut">
+</table>
+<script src="util.js"></script>
+<script>
+window.onload = function() {
+ // From https://build.opensuse.org/project/show/openSUSE:Leap:15.5
+ const N = 40000;
+ let elements = new Array(N);
+ // Add lots of rows with newline in between
+ for (let i = 0; i < N; i++) {
+ let d = document.createElement("tr");
+ dut.appendChild(d);
+ elements[i] = d;
+ dut.appendChild(document.createTextNode("\n"));
+ }
+
+ flush_layout();
+ perf_start();
+ // Delete all from front. Text nodes of newlines will accumulate
+ // at the start of the table.
+ for (let i = 0; i < elements.length; i++) {
+ let d = elements[i];
+ d.remove();
+ }
+ flush_layout();
+ perf_finish();
+};
+</script>
+<body></body>
diff --git a/testing/talos/talos/tests/perf-reftest-singletons/remove-front-has-pseudo.html b/testing/talos/talos/tests/perf-reftest-singletons/remove-front-has-pseudo.html
new file mode 100644
index 0000000000..4568ab585c
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest-singletons/remove-front-has-pseudo.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<style>
+/* Mark #container with HAS_SLOW_SELECTOR_LATER_SIBLINGS */
+.nonexistent + .item {
+ color: purple;
+}
+
+/* See bug 1874066 comment 10 */
+:has(> .item:last-child)::after, :has(> .item:first-child)::before {
+ color: pink;
+}
+</style>
+<script src="util.js"></script>
+<script>
+window.onload = function() {
+ const N = 500;
+ for (let i = 0; i < N; i++) {
+ const d = document.createElement("div");
+ d.classList.add("item");
+ dut.appendChild(d);
+ }
+
+ flush_layout();
+ perf_start();
+ for (let i = 0; i < N; i++) {
+ dut.firstElementChild.remove();
+ }
+ flush_layout();
+ perf_finish();
+};
+</script>
+<div id="dut" class="container"></div>
diff --git a/testing/talos/talos/tests/perf-reftest-singletons/scrollbar-styles-1.html b/testing/talos/talos/tests/perf-reftest-singletons/scrollbar-styles-1.html
new file mode 100644
index 0000000000..cc69f3b7c5
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest-singletons/scrollbar-styles-1.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<style>
+div { overflow: auto; }
+</style>
+<script src="util.js"></script>
+<script>
+window.onload = function() {
+ let root = document.createElement("div");
+ root.appendChild(build_dom(10000, "div"));
+ document.body.appendChild(root);
+ perf_start();
+ flush_layout(root);
+ perf_finish();
+};
+</script>
+<body></body>
diff --git a/testing/talos/talos/tests/perf-reftest-singletons/slow-selector-1.html b/testing/talos/talos/tests/perf-reftest-singletons/slow-selector-1.html
new file mode 100644
index 0000000000..dc3f51b5fd
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest-singletons/slow-selector-1.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<style>
+.first:empty { color: blue; }
+</style>
+<script src="util.js"></script>
+<script>
+window.onload = function() {
+ let root = document.createElement("div");
+ let first = document.createElement("div");
+ first.className = "first";
+ first.appendChild(document.createElement("div"));
+ root.appendChild(first);
+ root.appendChild(build_dom(64000, "div"));
+ document.body.appendChild(root);
+ flush_layout(root);
+ perf_start();
+ first.firstChild.remove();
+ flush_style(root);
+ perf_finish();
+};
+</script>
diff --git a/testing/talos/talos/tests/perf-reftest-singletons/slow-selector-2.html b/testing/talos/talos/tests/perf-reftest-singletons/slow-selector-2.html
new file mode 100644
index 0000000000..7d8223a988
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest-singletons/slow-selector-2.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<style>
+.first:first-child { color: blue; }
+</style>
+<script src="util.js"></script>
+<script>
+window.onload = function() {
+ let root = document.createElement("div");
+ root.appendChild(document.createElement("div"));
+ let first = document.createElement("div");
+ first.className = "first";
+ root.appendChild(first);
+ root.appendChild(build_dom(64000, "div"));
+ document.body.appendChild(root);
+ flush_layout(root);
+ perf_start();
+ root.firstChild.remove();
+ flush_style(root);
+ perf_finish();
+};
+</script>
diff --git a/testing/talos/talos/tests/perf-reftest-singletons/style-attr-1.html b/testing/talos/talos/tests/perf-reftest-singletons/style-attr-1.html
new file mode 100644
index 0000000000..da0c2d9b51
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest-singletons/style-attr-1.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<script src="util.js"></script>
+<script>
+window.onload = function() {
+ document.head.appendChild(build_rule(".x[y~='e500']", 100000, "{ color: blue; }"));
+ var div = document.createElement("div");
+ div.className = "x";
+ let val = "";
+ for (let i = 0; i < 1000; i++) {
+ val += "e" + i + " ";
+ }
+ div.setAttribute("y", val);
+ document.body.appendChild(div);
+ flush_layout(div);
+ perf_start();
+ div.style.color = "green";
+ flush_style(div);
+ perf_finish();
+};
+</script>
+<body></body>
diff --git a/testing/talos/talos/tests/perf-reftest-singletons/style-sharing-style-attr.html b/testing/talos/talos/tests/perf-reftest-singletons/style-sharing-style-attr.html
new file mode 100644
index 0000000000..e7bfec348b
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest-singletons/style-sharing-style-attr.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <script src="util.js"></script>
+ <script>
+window.onload = function() {
+ document.head.appendChild(build_rule("caption div", 10000, "{ color: blue; } "));
+ let dom = build_dom(5000, "div", { elemNameLeft: "div", elemNameRight: "div",
+ attributes: { style: "background-color: yellow;"} });
+
+ flush_layout();
+ perf_start();
+ document.body.appendChild(dom);
+ flush_style(dom);
+ perf_finish();
+};
+ </script>
+ </head>
+ <body>
+ </body>
+</html>
diff --git a/testing/talos/talos/tests/perf-reftest-singletons/style-sharing.html b/testing/talos/talos/tests/perf-reftest-singletons/style-sharing.html
new file mode 100644
index 0000000000..785b28cb43
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest-singletons/style-sharing.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <script src="util.js"></script>
+ <script>
+window.onload = function() {
+ document.head.appendChild(build_rule("caption div", 10000, "{ color: blue; } "));
+ let dom = build_dom(5000, "div", { elemNameLeft: "div", elemNameRight: "div" });
+
+ flush_layout();
+ perf_start();
+ document.body.appendChild(dom);
+ flush_style(dom);
+ perf_finish();
+};
+ </script>
+ </head>
+ <body>
+ </body>
+</html>
diff --git a/testing/talos/talos/tests/perf-reftest-singletons/svg-text-getExtentOfChar-1.html b/testing/talos/talos/tests/perf-reftest-singletons/svg-text-getExtentOfChar-1.html
new file mode 100644
index 0000000000..4543c6e89e
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest-singletons/svg-text-getExtentOfChar-1.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<script src="util.js"></script>
+<body>
+<svg width="144130" height="20" style="visibility:hidden">
+<rect width="144130" height="20" fill="#555"/>
+<g fill="#fff" font-family="sans-serif" font-size="110">
+<!-- The use of textLength here forces adjusted positioning of all the glyphs,
+ which may put the SVG layout engine under some strain -->
+<text id="test" x="500" y="140" transform="scale(.1)" textLength="2440730"></text>
+</g>
+</svg>
+<script>
+window.onload = function() {
+ // "word0 word1 word2 ... word99 " -> 690 chars
+ text = "";
+ for (i = 0; i < 100; i++) {
+ text = text + "word" + i + " ";
+ }
+ // 6 doublings -> approx 44k chars
+ for (i = 0; i < 6; i++) {
+ text = text + text;
+ }
+ // set the text and force a reflow
+ testElem = document.getElementById("test");
+ testElem.textContent = text;
+ flush_layout();
+ // try calling getExtentOfChar for some of the characters
+ len = text.length / 2;
+ perf_start();
+ for (i = 0; i < len; i++) {
+ testElem.getExtentOfChar(i);
+ }
+ perf_finish();
+}
+</script>
diff --git a/testing/talos/talos/tests/perf-reftest-singletons/svg-text-textLength-1.html b/testing/talos/talos/tests/perf-reftest-singletons/svg-text-textLength-1.html
new file mode 100644
index 0000000000..b5e933a0ad
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest-singletons/svg-text-textLength-1.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<script src="util.js"></script>
+<body>
+<svg width="144130" height="20" style="visibility:hidden">
+<rect width="144130" height="20" fill="#555"/>
+<g fill="#fff" font-family="sans-serif" font-size="110">
+<!-- The use of textLength here forces adjusted positioning of all the glyphs,
+ which may put the SVG layout engine under some strain -->
+<text id="test" x="500" y="140" transform="scale(.1)" textLength="2440730"></text>
+</g>
+</svg>
+<script>
+window.onload = function() {
+ // "word0 word1 word2 ... word99 " -> 690 chars
+ text = "";
+ for (i = 0; i < 100; i++) {
+ text = text + "word" + i + " ";
+ }
+ // 6 doublings -> approx 44k chars
+ for (i = 0; i < 6; i++) {
+ text = text + text;
+ }
+ // set the text and time how long a reflow takes
+ testElem = document.getElementById("test");
+ testElem.textContent = text;
+ perf_start();
+ flush_layout();
+ perf_finish();
+}
+</script>
diff --git a/testing/talos/talos/tests/perf-reftest-singletons/tiny-traversal-singleton.html b/testing/talos/talos/tests/perf-reftest-singletons/tiny-traversal-singleton.html
new file mode 100644
index 0000000000..4206dad714
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest-singletons/tiny-traversal-singleton.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <script src="util.js"></script>
+ <script>
+window.onload = function() {
+ document.head.appendChild(build_rule("caption#foo", 1, "{ color: blue; } "));
+ let dom = build_dom(2048, "div");
+ let p = dom;
+ for (var i = 0; i < 5; ++i ) {
+ p = p.firstChild.lastChild;
+ }
+ let elem = document.createElement("caption");
+ p.appendChild(elem);
+ document.body.appendChild(dom);
+ flush_layout();
+
+ perf_start();
+ var state = true;
+ for (i = 0; i < 100000; ++i) {
+ elem.setAttribute("id", state ? "" : "foo");
+ state = !state;
+ flush_style(elem);
+ }
+ perf_finish();
+};
+ </script>
+ </head>
+ <body>
+ </body>
+</html>
diff --git a/testing/talos/talos/tests/perf-reftest-singletons/util.js b/testing/talos/talos/tests/perf-reftest-singletons/util.js
new file mode 100644
index 0000000000..f5b803eaa6
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest-singletons/util.js
@@ -0,0 +1,97 @@
+var perf_data = {
+ start: null,
+ end: null,
+};
+
+function build_dom(n, elemName, options) {
+ // By default we use different elements in the DOM to defeat the style sharing
+ // cache, otherwise this sythetic DOM is trivially stylable by engines with that
+ // optimization.
+ options = options || {};
+ var elemNameLeft = options.elemNameLeft || "div";
+ var elemNameRight = options.elemNameRight || "span";
+
+ var ours = document.createElement(elemName);
+ for (var attr in options.attributes) {
+ ours.setAttribute(attr, options.attributes[attr]);
+ }
+
+ if (n != 1) {
+ var leftSize = Math.floor(n / 2);
+ var rightSize = Math.floor((n - 1) / 2);
+ ours.appendChild(build_dom(leftSize, elemNameLeft, options));
+ if (rightSize > 0) {
+ ours.appendChild(build_dom(rightSize, elemNameRight, options));
+ }
+ }
+ return ours;
+}
+
+function build_rule(selector, selectorRepeat, declaration, ruleRepeat) {
+ ruleRepeat = ruleRepeat || 1;
+ var s = document.createElement("style");
+ var rule = Array(selectorRepeat).fill(selector).join(", ") + declaration;
+ s.textContent = Array(ruleRepeat).fill(rule).join("\n\n");
+ return s;
+}
+
+function build_text(word, wordRepeat, paraRepeat) {
+ wordRepeat = wordRepeat || 1;
+ paraRepeat = paraRepeat || 1;
+ let para = Array(wordRepeat).fill(word).join(" ");
+ return Array(paraRepeat).fill(para).join("\n");
+}
+
+function flush_style(element) {
+ getComputedStyle(element || document.documentElement).color;
+}
+
+function flush_layout(element) {
+ (element || document.documentElement).offsetHeight;
+}
+
+function perf_start() {
+ if (perf_data.start !== null) {
+ throw new Error("already started timing!");
+ }
+
+ perf_data.start = performance.now();
+}
+
+function perf_finish() {
+ var end = performance.now();
+
+ if (perf_data.start === null) {
+ throw new Error("haven't started timing!");
+ }
+
+ if (perf_data.end !== null) {
+ throw new Error("already finished timing!");
+ }
+
+ var start = perf_data.start;
+ perf_data.end = end;
+
+ // when running in talos report results; when running outside talos just alert
+ if (window.tpRecordTime) {
+ // Running in talos.
+ window.tpRecordTime(end - start, start);
+ } else if (window.parent && window.parent.report_perf_reftest_time) {
+ // Running in the perf-reftest runner.
+ window.parent.report_perf_reftest_time({
+ type: "time",
+ value: end - start,
+ });
+ } else {
+ // Running standalone; just alert.
+ console.log(end);
+ console.log(start);
+ alert("Result: " + (end - start).toFixed(2) + " (ms)");
+ }
+}
+
+if (window.parent.report_perf_reftest_time) {
+ window.addEventListener("error", function (e) {
+ window.parent.report_perf_reftest_time({ type: "error", value: e.message });
+ });
+}
diff --git a/testing/talos/talos/tests/perf-reftest-singletons/window-named-property-get.html b/testing/talos/talos/tests/perf-reftest-singletons/window-named-property-get.html
new file mode 100644
index 0000000000..7dfa802f7a
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest-singletons/window-named-property-get.html
@@ -0,0 +1,19 @@
+<!doctype html>
+<script src="util.js"></script>
+<div id="x"></div>
+<script>
+ /*
+ * Test performance of bareword lookup via the Window's named properties
+ * object.
+ */
+ onload = function() {
+ let count = 1000000; // About 700ms
+ perf_start();
+ for (let i = count; i > 0; --i) {
+ // Pretty sure JITs are not smart enough to optimize out this proxy
+ // lookup, so no need to do anything other than perform the get.
+ x;
+ }
+ perf_finish();
+ }
+</script>
diff --git a/testing/talos/talos/tests/perf-reftest/.eslintrc.json b/testing/talos/talos/tests/perf-reftest/.eslintrc.json
new file mode 100644
index 0000000000..612b9ee56e
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest/.eslintrc.json
@@ -0,0 +1,5 @@
+{
+ "rules": {
+ "no-undef": "off"
+ }
+}
diff --git a/testing/talos/talos/tests/perf-reftest/bidi-resolution-1-ref.html b/testing/talos/talos/tests/perf-reftest/bidi-resolution-1-ref.html
new file mode 100644
index 0000000000..c992ca428a
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest/bidi-resolution-1-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html style="overflow-y: scroll">
+<head>
+<meta charset="UTF-8">
+<script src="util.js"></script>
+<script>
+window.onload = function() {
+ const TEST_WORD = "iqwdzx zzaعظأkvcg rvde";
+ let div = document.getElementById("test");
+
+ div.textContent = TEST_WORD;
+ flush_layout();
+
+ perf_start();
+ div.textContent = build_text(TEST_WORD, 30, 800);
+ flush_layout(div);
+ perf_finish();
+};
+</script>
+</head>
+<body>
+ <div id="test" style="white-space: pre-line"></div>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/perf-reftest/bidi-resolution-1.html b/testing/talos/talos/tests/perf-reftest/bidi-resolution-1.html
new file mode 100644
index 0000000000..c07899386a
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest/bidi-resolution-1.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html style="overflow-y: scroll">
+<head>
+<meta charset="UTF-8">
+<script src="util.js"></script>
+<script>
+window.onload = function() {
+ const TEST_WORD = "iqwdzx zzaعظأkvcg rvde";
+ let div = document.getElementById("test");
+
+ div.textContent = TEST_WORD;
+ flush_layout();
+
+ perf_start();
+ div.textContent = build_text(TEST_WORD, 30, 800);
+ flush_layout(div);
+ perf_finish();
+};
+</script>
+</head>
+<body>
+ <div id="test" style="white-space: normal"></div>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/perf-reftest/bloom-basic-2.html b/testing/talos/talos/tests/perf-reftest/bloom-basic-2.html
new file mode 100644
index 0000000000..2b9f769256
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest/bloom-basic-2.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <script src="util.js"></script>
+ <script>
+window.onload = function() {
+ /* Use many rules, instead of one rule with many selectors, to test per-rule overhead. */
+ document.head.appendChild(build_rule("caption div, caption span", 1, "{ color: blue; } ", 20000));
+ let dom = build_dom(5000, "div");
+
+ flush_layout();
+ perf_start();
+ document.body.appendChild(dom);
+ flush_style(dom);
+ perf_finish();
+};
+ </script>
+ </head>
+ <body>
+ </body>
+</html>
diff --git a/testing/talos/talos/tests/perf-reftest/bloom-basic-ref.html b/testing/talos/talos/tests/perf-reftest/bloom-basic-ref.html
new file mode 100644
index 0000000000..dd05894b36
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest/bloom-basic-ref.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <script src="util.js"></script>
+ <script>
+window.onload = function() {
+ document.head.appendChild(build_rule("caption > div, caption > span", 20000, "{ color: blue; } "));
+ let dom = build_dom(5000, "div");
+
+ flush_layout();
+ perf_start();
+ document.body.appendChild(dom);
+ flush_style(dom);
+ perf_finish();
+};
+ </script>
+ </head>
+ <body>
+ </body>
+</html>
diff --git a/testing/talos/talos/tests/perf-reftest/bloom-basic.html b/testing/talos/talos/tests/perf-reftest/bloom-basic.html
new file mode 100644
index 0000000000..99772b933a
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest/bloom-basic.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <script src="util.js"></script>
+ <script>
+window.onload = function() {
+ document.head.appendChild(build_rule("caption div, caption span", 20000, "{ color: blue; } "));
+ let dom = build_dom(5000, "div");
+
+ flush_layout();
+ perf_start();
+ document.body.appendChild(dom);
+ flush_style(dom);
+ perf_finish();
+};
+ </script>
+ </head>
+ <body>
+ </body>
+</html>
diff --git a/testing/talos/talos/tests/perf-reftest/coalesce-1.html b/testing/talos/talos/tests/perf-reftest/coalesce-1.html
new file mode 100644
index 0000000000..40d90d9b4c
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest/coalesce-1.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<style>
+.x { color: yellow; }
+</style>
+<script src="util.js"></script>
+<script>
+function set_class(n) {
+ n.className = "x";
+ n = n.firstChild;
+ while (n) {
+ set_class(n);
+ n = n.nextSibling;
+ }
+}
+window.onload = function() {
+ let root = build_dom(50000, "div");
+ document.body.appendChild(root);
+ flush_layout(root);
+ perf_start();
+ set_class(root);
+ flush_style(root);
+ perf_finish();
+};
+</script>
+<body></body>
diff --git a/testing/talos/talos/tests/perf-reftest/coalesce-2.html b/testing/talos/talos/tests/perf-reftest/coalesce-2.html
new file mode 100644
index 0000000000..1c65fc789e
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest/coalesce-2.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<style>
+.x { color: yellow; }
+</style>
+<script src="util.js"></script>
+<script>
+function set_class(n) {
+ let child = n.firstChild;
+ while (child) {
+ set_class(child);
+ child = child.nextSibling;
+ }
+ n.className = "x";
+}
+window.onload = function() {
+ let root = build_dom(50000, "div");
+ document.body.appendChild(root);
+ flush_layout(root);
+ set_class(root);
+ perf_start();
+ flush_style(root);
+ perf_finish();
+};
+</script>
+<body></body>
diff --git a/testing/talos/talos/tests/perf-reftest/coalesce-ref.html b/testing/talos/talos/tests/perf-reftest/coalesce-ref.html
new file mode 100644
index 0000000000..a1824f6154
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest/coalesce-ref.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<style>
+.x, .x * { color: yellow; }
+</style>
+<script src="util.js"></script>
+<script>
+window.onload = function() {
+ let root = build_dom(50000, "div");
+ document.body.appendChild(root);
+ flush_layout(root);
+ root.className = "x";
+ perf_start();
+ flush_style(root);
+ perf_finish();
+};
+</script>
+<body></body>
diff --git a/testing/talos/talos/tests/perf-reftest/dep-check-1-ref.html b/testing/talos/talos/tests/perf-reftest/dep-check-1-ref.html
new file mode 100644
index 0000000000..38350cbb88
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest/dep-check-1-ref.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<script src="util.js"></script>
+<script>
+window.onload = function() {
+ let s = "";
+ s += ".x";
+ for (let j = 0; j < 100; j++) {
+ s += "[y~=v" + j + "]";
+ }
+ s += " { background-color: yellow; }";
+ var style = document.createElement("style");
+ style.textContent = s;
+ document.head.appendChild(style);
+ let els = [];
+ for (let i = 0; i < 1000; i++) {
+ var el = document.createElement("e" + i);
+ el.className = "x";
+ let val = "";
+ for (let j = 0; j < 100; j++) {
+ val += "v" + j + " ";
+ }
+ el.setAttribute("y", val);
+ document.body.appendChild(el);
+ els.push(el);
+ }
+ flush_layout(els[0]);
+ perf_start();
+ for (let el of els) {
+ el.className = "";
+ }
+ flush_style(els[0]);
+ perf_finish();
+};
+</script>
+<body></body>
diff --git a/testing/talos/talos/tests/perf-reftest/dep-check-1.html b/testing/talos/talos/tests/perf-reftest/dep-check-1.html
new file mode 100644
index 0000000000..f4b39d65d2
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest/dep-check-1.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<script src="util.js"></script>
+<script>
+window.onload = function() {
+ let s = "";
+ for (let i = 0; i < 50; i++) {
+ s += ".x";
+ for (let j = 0; j < 100; j++) {
+ s += "[y~=v" + j + "]";
+ }
+ s += " { background-color: yellow; }";
+ }
+ var style = document.createElement("style");
+ style.textContent = s;
+ document.head.appendChild(style);
+ let els = [];
+ for (let i = 0; i < 1000; i++) {
+ var el = document.createElement("e" + i);
+ el.className = "x";
+ let val = "";
+ for (let j = 0; j < 100; j++) {
+ val += "v" + j + " ";
+ }
+ el.setAttribute("y", val);
+ document.body.appendChild(el);
+ els.push(el);
+ }
+ flush_layout(els[0]);
+ perf_start();
+ for (let el of els) {
+ el.className = "";
+ }
+ flush_style(els[0]);
+ perf_finish();
+};
+</script>
+<body></body>
diff --git a/testing/talos/talos/tests/perf-reftest/display-none-1-ref.html b/testing/talos/talos/tests/perf-reftest/display-none-1-ref.html
new file mode 100644
index 0000000000..18be7649f1
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest/display-none-1-ref.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<style>
+.root { display: none; }
+.x div { color: blue; }
+</style>
+<script src="util.js"></script>
+<script>
+window.onload = function() {
+ let root = document.createElement("div");
+ root.className = "root";
+ document.body.appendChild(root);
+ flush_layout(root);
+ perf_start();
+ document.body.className = "x";
+ flush_style(root);
+ perf_finish();
+};
+</script>
+<body></body>
diff --git a/testing/talos/talos/tests/perf-reftest/display-none-1.html b/testing/talos/talos/tests/perf-reftest/display-none-1.html
new file mode 100644
index 0000000000..036c40236f
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest/display-none-1.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<style>
+.root { display: none; }
+.x div { color: blue; }
+</style>
+<script src="util.js"></script>
+<script>
+window.onload = function() {
+ let root = document.createElement("div");
+ root.className = "root";
+ root.appendChild(build_dom(100000, "div"));
+ document.body.appendChild(root);
+ flush_layout(root);
+ perf_start();
+ document.body.className = "x";
+ flush_style(root);
+ perf_finish();
+};
+</script>
+<body></body>
diff --git a/testing/talos/talos/tests/perf-reftest/nth-index-1.html b/testing/talos/talos/tests/perf-reftest/nth-index-1.html
new file mode 100644
index 0000000000..47ad821b99
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest/nth-index-1.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<style>
+.x:nth-child(200000) { background-color: yellow; }
+.x:nth-child(200000) div, .x:nth-child(200000) span { color: green; }
+</style>
+<script src="util.js"></script>
+<script>
+window.onload = function() {
+ let root = document.createElement("div");
+ root.className = "root";
+ for (let i = 0; i < 200000; i++) {
+ root.appendChild(document.createElement("div"));
+ }
+ let last = root.lastChild;
+ last.appendChild(build_dom(5000, "div"));
+ document.body.appendChild(root);
+ flush_layout(root);
+ perf_start();
+ last.className = "x";
+ flush_style(root);
+ perf_finish();
+};
+</script>
+<body></body>
diff --git a/testing/talos/talos/tests/perf-reftest/nth-index-2.html b/testing/talos/talos/tests/perf-reftest/nth-index-2.html
new file mode 100644
index 0000000000..f662f5e500
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest/nth-index-2.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<style>
+.x:nth-of-type(200000) { background-color: yellow; }
+.x:nth-of-type(200000) div, .x:nth-of-type(200000) span { color: green; }
+</style>
+<script src="util.js"></script>
+<script>
+window.onload = function() {
+ let root = document.createElement("div");
+ root.className = "root";
+ for (let i = 0; i < 200000; i++) {
+ root.appendChild(document.createElement("div"));
+ }
+ let last = root.lastChild;
+ last.appendChild(build_dom(5000, "div"));
+ document.body.appendChild(root);
+ flush_layout(root);
+ perf_start();
+ last.className = "x";
+ flush_style(root);
+ perf_finish();
+};
+</script>
+<body></body>
diff --git a/testing/talos/talos/tests/perf-reftest/nth-index-ref.html b/testing/talos/talos/tests/perf-reftest/nth-index-ref.html
new file mode 100644
index 0000000000..96eecd1051
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest/nth-index-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<style>
+.x:nth-child(200000) { background-color: yellow; }
+.x div, .x span { color: green; }
+</style>
+<script src="util.js"></script>
+<script>
+window.onload = function() {
+ let root = document.createElement("div");
+ root.className = "root";
+ for (let i = 0; i < 200000; i++) {
+ root.appendChild(document.createElement("div"));
+ }
+ let last = root.lastChild;
+ last.appendChild(build_dom(5000, "div"));
+ document.body.appendChild(root);
+ flush_layout(root);
+ perf_start();
+ last.className = "x";
+ flush_style(root);
+ perf_finish();
+};
+</script>
+<body></body>
diff --git a/testing/talos/talos/tests/perf-reftest/only-children-1.html b/testing/talos/talos/tests/perf-reftest/only-children-1.html
new file mode 100644
index 0000000000..02441f1729
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest/only-children-1.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<style>
+.x > div, .x > span { background-color: yellow; }
+</style>
+<script src="util.js"></script>
+<script>
+window.onload = function() {
+ let root = document.createElement("div");
+ root.appendChild(build_dom(100000, "div"));
+ document.body.appendChild(root);
+ flush_layout(root);
+ perf_start();
+ root.className = "x";
+ flush_style(root);
+ perf_finish();
+};
+</script>
+<body></body>
diff --git a/testing/talos/talos/tests/perf-reftest/only-children-ref.html b/testing/talos/talos/tests/perf-reftest/only-children-ref.html
new file mode 100644
index 0000000000..89e89293b9
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest/only-children-ref.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<style>
+.x > div, .x > span { background-color: yellow; }
+</style>
+<script src="util.js"></script>
+<script>
+window.onload = function() {
+ let root = document.createElement("div");
+ root.appendChild(document.createElement("div"));
+ document.body.appendChild(root);
+ flush_layout(root);
+ perf_start();
+ root.firstChild.className = "x";
+ flush_style(root);
+ perf_finish();
+};
+</script>
+<body></body>
diff --git a/testing/talos/talos/tests/perf-reftest/perf_reftest.manifest b/testing/talos/talos/tests/perf-reftest/perf_reftest.manifest
new file mode 100644
index 0000000000..42196d5b1d
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest/perf_reftest.manifest
@@ -0,0 +1,25 @@
+# base_vs_ref is set in test.py for this test, so each of these lines is the base vs ref test pag
+# both pages are run and then the results compared, the ultimate reported results are the comparisons.
+# Each line is reported as a subtest like the other talos tests that have multiple lines of URLs.
+& http://localhost/tests/perf-reftest/bloom-basic.html, http://localhost/tests/perf-reftest/bloom-basic-ref.html
+& http://localhost/tests/perf-reftest/bloom-basic-2.html, http://localhost/tests/perf-reftest/bloom-basic-ref.html
+& http://localhost/tests/perf-reftest/coalesce-1.html, http://localhost/tests/perf-reftest/coalesce-ref.html
+& http://localhost/tests/perf-reftest/coalesce-2.html, http://localhost/tests/perf-reftest/coalesce-ref.html
+& http://localhost/tests/perf-reftest/style-sharing.html, http://localhost/tests/perf-reftest/style-sharing-ref.html
+& http://localhost/tests/perf-reftest/style-sharing-style-attr.html, http://localhost/tests/perf-reftest/style-sharing-ref.html
+& http://localhost/tests/perf-reftest/display-none-1.html, http://localhost/tests/perf-reftest/display-none-1-ref.html
+& http://localhost/tests/perf-reftest/nth-index-1.html, http://localhost/tests/perf-reftest/nth-index-ref.html
+& http://localhost/tests/perf-reftest/nth-index-2.html, http://localhost/tests/perf-reftest/nth-index-ref.html
+& http://localhost/tests/perf-reftest/some-descendants-1.html, http://localhost/tests/perf-reftest/some-descendants-1-ref.html
+& http://localhost/tests/perf-reftest/only-children-1.html, http://localhost/tests/perf-reftest/only-children-ref.html
+& http://localhost/tests/perf-reftest/dep-check-1.html, http://localhost/tests/perf-reftest/dep-check-1-ref.html
+& http://localhost/tests/perf-reftest/slow-selector-1.html, http://localhost/tests/perf-reftest/slow-selector-1-ref.html
+& http://localhost/tests/perf-reftest/slow-selector-2.html, http://localhost/tests/perf-reftest/slow-selector-2-ref.html
+& http://localhost/tests/perf-reftest/style-attr-1.html, http://localhost/tests/perf-reftest/style-attr-1-ref.html
+& http://localhost/tests/perf-reftest/stop-cascade-1.html, http://localhost/tests/perf-reftest/stop-cascade-ref.html
+& http://localhost/tests/perf-reftest/stop-cascade-2.html, http://localhost/tests/perf-reftest/stop-cascade-ref.html
+
+& http://localhost/tests/perf-reftest/bidi-resolution-1.html, http://localhost/tests/perf-reftest/bidi-resolution-1-ref.html
+
+& http://localhost/tests/perf-reftest/recompute-position-vertical-lr.html, http://localhost/tests/perf-reftest/recompute-position-horizontal-tb.html
+& http://localhost/tests/perf-reftest/recompute-position-vertical-rl.html, http://localhost/tests/perf-reftest/recompute-position-horizontal-tb.html
diff --git a/testing/talos/talos/tests/perf-reftest/recompute-position-horizontal-tb.html b/testing/talos/talos/tests/perf-reftest/recompute-position-horizontal-tb.html
new file mode 100644
index 0000000000..642dfded77
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest/recompute-position-horizontal-tb.html
@@ -0,0 +1,9 @@
+<!doctype html>
+<style>
+html {
+ writing-mode: horizontal-tb;
+}
+</style>
+<script src="util.js"></script>
+<script src="recompute-position.js"></script>
+<body></body>
diff --git a/testing/talos/talos/tests/perf-reftest/recompute-position-vertical-lr.html b/testing/talos/talos/tests/perf-reftest/recompute-position-vertical-lr.html
new file mode 100644
index 0000000000..1177b83f89
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest/recompute-position-vertical-lr.html
@@ -0,0 +1,9 @@
+<!doctype html>
+<style>
+html {
+ writing-mode: vertical-lr;
+}
+</style>
+<script src="util.js"></script>
+<script src="recompute-position.js"></script>
+<body></body>
diff --git a/testing/talos/talos/tests/perf-reftest/recompute-position-vertical-rl.html b/testing/talos/talos/tests/perf-reftest/recompute-position-vertical-rl.html
new file mode 100644
index 0000000000..5a4f07504a
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest/recompute-position-vertical-rl.html
@@ -0,0 +1,9 @@
+<!doctype html>
+<style>
+html {
+ writing-mode: vertical-rl;
+}
+</style>
+<script src="util.js"></script>
+<script src="recompute-position.js"></script>
+<body></body>
diff --git a/testing/talos/talos/tests/perf-reftest/recompute-position.js b/testing/talos/talos/tests/perf-reftest/recompute-position.js
new file mode 100644
index 0000000000..664009c6bd
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest/recompute-position.js
@@ -0,0 +1,24 @@
+window.addEventListener("load", function () {
+ let str = "さ".repeat(97);
+ for (let i = 0; i < 2000; i++) {
+ let p = document.createElement("p");
+ p.textContent = str;
+ document.body.appendChild(p);
+ }
+ let floating = document.createElement("div");
+ floating.style.position = "absolute";
+ floating.style.top = "5px";
+ floating.style.left = "0px";
+ floating.style.backgroundColor = "white";
+ floating.innerHTML =
+ "あああああああああああ<br>あああああああああああ<br>あああああああああああ<br>あああああああああああ<br>あああああああああああ<br>あああああああああああ";
+ document.body.appendChild(floating);
+
+ flush_layout(floating);
+ perf_start();
+ for (let i = 0; i < 1000; i++) {
+ floating.style.left = i + "px";
+ flush_layout(floating);
+ }
+ perf_finish();
+});
diff --git a/testing/talos/talos/tests/perf-reftest/slow-selector-1-ref.html b/testing/talos/talos/tests/perf-reftest/slow-selector-1-ref.html
new file mode 100644
index 0000000000..851f4fa12a
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest/slow-selector-1-ref.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<style>
+.first:empty { color: blue; }
+</style>
+<script src="util.js"></script>
+<script>
+window.onload = function() {
+ let root = document.createElement("div");
+ let first = document.createElement("div");
+ first.className = "first";
+ first.appendChild(document.createElement("div"));
+ root.appendChild(first);
+ document.body.appendChild(root);
+ flush_layout(root);
+ perf_start();
+ first.firstChild.remove();
+ flush_style(root);
+ perf_finish();
+};
+</script>
diff --git a/testing/talos/talos/tests/perf-reftest/slow-selector-1.html b/testing/talos/talos/tests/perf-reftest/slow-selector-1.html
new file mode 100644
index 0000000000..dc3f51b5fd
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest/slow-selector-1.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<style>
+.first:empty { color: blue; }
+</style>
+<script src="util.js"></script>
+<script>
+window.onload = function() {
+ let root = document.createElement("div");
+ let first = document.createElement("div");
+ first.className = "first";
+ first.appendChild(document.createElement("div"));
+ root.appendChild(first);
+ root.appendChild(build_dom(64000, "div"));
+ document.body.appendChild(root);
+ flush_layout(root);
+ perf_start();
+ first.firstChild.remove();
+ flush_style(root);
+ perf_finish();
+};
+</script>
diff --git a/testing/talos/talos/tests/perf-reftest/slow-selector-2-ref.html b/testing/talos/talos/tests/perf-reftest/slow-selector-2-ref.html
new file mode 100644
index 0000000000..75beb8e011
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest/slow-selector-2-ref.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<style>
+.first:first-child { color: blue; }
+</style>
+<script src="util.js"></script>
+<script>
+window.onload = function() {
+ let root = document.createElement("div");
+ root.appendChild(document.createElement("div"));
+ let first = document.createElement("div");
+ first.className = "first";
+ root.appendChild(first);
+ document.body.appendChild(root);
+ flush_layout(root);
+ perf_start();
+ root.firstChild.remove();
+ flush_style(root);
+ perf_finish();
+};
+</script>
diff --git a/testing/talos/talos/tests/perf-reftest/slow-selector-2.html b/testing/talos/talos/tests/perf-reftest/slow-selector-2.html
new file mode 100644
index 0000000000..7d8223a988
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest/slow-selector-2.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<style>
+.first:first-child { color: blue; }
+</style>
+<script src="util.js"></script>
+<script>
+window.onload = function() {
+ let root = document.createElement("div");
+ root.appendChild(document.createElement("div"));
+ let first = document.createElement("div");
+ first.className = "first";
+ root.appendChild(first);
+ root.appendChild(build_dom(64000, "div"));
+ document.body.appendChild(root);
+ flush_layout(root);
+ perf_start();
+ root.firstChild.remove();
+ flush_style(root);
+ perf_finish();
+};
+</script>
diff --git a/testing/talos/talos/tests/perf-reftest/some-descendants-1-ref.html b/testing/talos/talos/tests/perf-reftest/some-descendants-1-ref.html
new file mode 100644
index 0000000000..3876ce7c50
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest/some-descendants-1-ref.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<style>
+.x { color: blue; }
+.y { background-color: green; }
+</style>
+<script src="util.js"></script>
+<script>
+function find_leftmost(e) {
+ while (e.firstChild) {
+ e = e.firstChild;
+ }
+ return e;
+}
+window.onload = function() {
+ document.head.appendChild(build_rule("div", 1, "{ color: blue; }", 100));
+ let root = document.createElement("div");
+ root.className = "root";
+ root.appendChild(build_dom(50000, "div"));
+ let leftmost = find_leftmost(root);
+ document.body.appendChild(root);
+ flush_layout(root);
+ perf_start();
+ document.body.className = "x";
+ leftmost.className = "y";
+ flush_style(root);
+ perf_finish();
+};
+</script>
+<body></body>
diff --git a/testing/talos/talos/tests/perf-reftest/some-descendants-1.html b/testing/talos/talos/tests/perf-reftest/some-descendants-1.html
new file mode 100644
index 0000000000..3d9ab964ea
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest/some-descendants-1.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<style>
+.x { color: blue; }
+.x .y { background-color: green; }
+</style>
+<script src="util.js"></script>
+<script>
+function find_leftmost(e) {
+ while (e.firstChild) {
+ e = e.firstChild;
+ }
+ return e;
+}
+window.onload = function() {
+ document.head.appendChild(build_rule("div", 1, "{ color: blue; }", 100));
+ let root = document.createElement("div");
+ root.className = "root";
+ root.appendChild(build_dom(50000, "div"));
+ let leftmost = find_leftmost(root);
+ leftmost.className = "y";
+ document.body.appendChild(root);
+ flush_layout(root);
+ perf_start();
+ document.body.className = "x";
+ flush_style(root);
+ perf_finish();
+};
+</script>
+<body></body>
diff --git a/testing/talos/talos/tests/perf-reftest/stop-cascade-1.html b/testing/talos/talos/tests/perf-reftest/stop-cascade-1.html
new file mode 100644
index 0000000000..0726b36ab8
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest/stop-cascade-1.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<style>
+.x { background-color: yellow; }
+</style>
+<script src="util.js"></script>
+<script>
+window.onload = function() {
+ let roots = [];
+ for (let i = 0; i < 200; i++) {
+ let root = document.createElement("div");
+ root.appendChild(build_dom(1024, "div"));
+ roots.push(root);
+ document.body.appendChild(root);
+ }
+ flush_layout(roots[0]);
+ perf_start();
+ for (x in ["x", "", "x"]) {
+ for (let root of roots) {
+ root.className = x;
+ }
+ }
+ flush_style(roots[0]);
+ perf_finish();
+};
+</script>
+<body></body>
diff --git a/testing/talos/talos/tests/perf-reftest/stop-cascade-2.html b/testing/talos/talos/tests/perf-reftest/stop-cascade-2.html
new file mode 100644
index 0000000000..6388f1a339
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest/stop-cascade-2.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<style>
+div, span { border-left-color: inherit; }
+.x { background-color: yellow; }
+</style>
+<script src="util.js"></script>
+<script>
+window.onload = function() {
+ let roots = [];
+ for (let i = 0; i < 200; i++) {
+ let root = document.createElement("div");
+ root.appendChild(build_dom(1024, "div"));
+ roots.push(root);
+ document.body.appendChild(root);
+ }
+ flush_layout(roots[0]);
+ perf_start();
+ for (x in ["x", "", "x"]) {
+ for (let root of roots) {
+ root.className = x;
+ }
+ }
+ flush_style(roots[0]);
+ perf_finish();
+};
+</script>
+<body></body>
diff --git a/testing/talos/talos/tests/perf-reftest/stop-cascade-ref.html b/testing/talos/talos/tests/perf-reftest/stop-cascade-ref.html
new file mode 100644
index 0000000000..41c2beda8e
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest/stop-cascade-ref.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<style>
+.x { background-color: yellow; }
+</style>
+<script src="util.js"></script>
+<script>
+window.onload = function() {
+ let roots = [];
+ for (let i = 0; i < 200; i++) {
+ let root = document.createElement("div");
+ roots.push(root);
+ document.body.appendChild(root);
+ }
+ flush_layout(roots[0]);
+ perf_start();
+ for (x in ["x", "", "x"]) {
+ for (let root of roots) {
+ root.className = x;
+ }
+ }
+ flush_style(roots[0]);
+ perf_finish();
+};
+</script>
+<body></body>
diff --git a/testing/talos/talos/tests/perf-reftest/style-attr-1-ref.html b/testing/talos/talos/tests/perf-reftest/style-attr-1-ref.html
new file mode 100644
index 0000000000..3c7ea0dfbe
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest/style-attr-1-ref.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<script src="util.js"></script>
+<script>
+window.onload = function() {
+ var div = document.createElement("div");
+ document.body.appendChild(div);
+ flush_layout(div);
+ perf_start();
+ div.style.color = "green";
+ flush_style(div);
+ perf_finish();
+};
+</script>
+<body></body>
diff --git a/testing/talos/talos/tests/perf-reftest/style-attr-1.html b/testing/talos/talos/tests/perf-reftest/style-attr-1.html
new file mode 100644
index 0000000000..da0c2d9b51
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest/style-attr-1.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<script src="util.js"></script>
+<script>
+window.onload = function() {
+ document.head.appendChild(build_rule(".x[y~='e500']", 100000, "{ color: blue; }"));
+ var div = document.createElement("div");
+ div.className = "x";
+ let val = "";
+ for (let i = 0; i < 1000; i++) {
+ val += "e" + i + " ";
+ }
+ div.setAttribute("y", val);
+ document.body.appendChild(div);
+ flush_layout(div);
+ perf_start();
+ div.style.color = "green";
+ flush_style(div);
+ perf_finish();
+};
+</script>
+<body></body>
diff --git a/testing/talos/talos/tests/perf-reftest/style-sharing-ref.html b/testing/talos/talos/tests/perf-reftest/style-sharing-ref.html
new file mode 100644
index 0000000000..d2db6783b2
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest/style-sharing-ref.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <script src="util.js"></script>
+ <script>
+window.onload = function() {
+ document.head.appendChild(build_rule("div", 1, "{ color: blue; } "));
+ let dom = build_dom(2000, "div");
+
+ flush_layout();
+ perf_start();
+ document.body.appendChild(dom);
+ flush_style(dom);
+ perf_finish();
+};
+ </script>
+ </head>
+ <body>
+ </body>
+</html>
diff --git a/testing/talos/talos/tests/perf-reftest/style-sharing-style-attr.html b/testing/talos/talos/tests/perf-reftest/style-sharing-style-attr.html
new file mode 100644
index 0000000000..e7bfec348b
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest/style-sharing-style-attr.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <script src="util.js"></script>
+ <script>
+window.onload = function() {
+ document.head.appendChild(build_rule("caption div", 10000, "{ color: blue; } "));
+ let dom = build_dom(5000, "div", { elemNameLeft: "div", elemNameRight: "div",
+ attributes: { style: "background-color: yellow;"} });
+
+ flush_layout();
+ perf_start();
+ document.body.appendChild(dom);
+ flush_style(dom);
+ perf_finish();
+};
+ </script>
+ </head>
+ <body>
+ </body>
+</html>
diff --git a/testing/talos/talos/tests/perf-reftest/style-sharing.html b/testing/talos/talos/tests/perf-reftest/style-sharing.html
new file mode 100644
index 0000000000..785b28cb43
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest/style-sharing.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <script src="util.js"></script>
+ <script>
+window.onload = function() {
+ document.head.appendChild(build_rule("caption div", 10000, "{ color: blue; } "));
+ let dom = build_dom(5000, "div", { elemNameLeft: "div", elemNameRight: "div" });
+
+ flush_layout();
+ perf_start();
+ document.body.appendChild(dom);
+ flush_style(dom);
+ perf_finish();
+};
+ </script>
+ </head>
+ <body>
+ </body>
+</html>
diff --git a/testing/talos/talos/tests/perf-reftest/util.js b/testing/talos/talos/tests/perf-reftest/util.js
new file mode 100644
index 0000000000..f5b803eaa6
--- /dev/null
+++ b/testing/talos/talos/tests/perf-reftest/util.js
@@ -0,0 +1,97 @@
+var perf_data = {
+ start: null,
+ end: null,
+};
+
+function build_dom(n, elemName, options) {
+ // By default we use different elements in the DOM to defeat the style sharing
+ // cache, otherwise this sythetic DOM is trivially stylable by engines with that
+ // optimization.
+ options = options || {};
+ var elemNameLeft = options.elemNameLeft || "div";
+ var elemNameRight = options.elemNameRight || "span";
+
+ var ours = document.createElement(elemName);
+ for (var attr in options.attributes) {
+ ours.setAttribute(attr, options.attributes[attr]);
+ }
+
+ if (n != 1) {
+ var leftSize = Math.floor(n / 2);
+ var rightSize = Math.floor((n - 1) / 2);
+ ours.appendChild(build_dom(leftSize, elemNameLeft, options));
+ if (rightSize > 0) {
+ ours.appendChild(build_dom(rightSize, elemNameRight, options));
+ }
+ }
+ return ours;
+}
+
+function build_rule(selector, selectorRepeat, declaration, ruleRepeat) {
+ ruleRepeat = ruleRepeat || 1;
+ var s = document.createElement("style");
+ var rule = Array(selectorRepeat).fill(selector).join(", ") + declaration;
+ s.textContent = Array(ruleRepeat).fill(rule).join("\n\n");
+ return s;
+}
+
+function build_text(word, wordRepeat, paraRepeat) {
+ wordRepeat = wordRepeat || 1;
+ paraRepeat = paraRepeat || 1;
+ let para = Array(wordRepeat).fill(word).join(" ");
+ return Array(paraRepeat).fill(para).join("\n");
+}
+
+function flush_style(element) {
+ getComputedStyle(element || document.documentElement).color;
+}
+
+function flush_layout(element) {
+ (element || document.documentElement).offsetHeight;
+}
+
+function perf_start() {
+ if (perf_data.start !== null) {
+ throw new Error("already started timing!");
+ }
+
+ perf_data.start = performance.now();
+}
+
+function perf_finish() {
+ var end = performance.now();
+
+ if (perf_data.start === null) {
+ throw new Error("haven't started timing!");
+ }
+
+ if (perf_data.end !== null) {
+ throw new Error("already finished timing!");
+ }
+
+ var start = perf_data.start;
+ perf_data.end = end;
+
+ // when running in talos report results; when running outside talos just alert
+ if (window.tpRecordTime) {
+ // Running in talos.
+ window.tpRecordTime(end - start, start);
+ } else if (window.parent && window.parent.report_perf_reftest_time) {
+ // Running in the perf-reftest runner.
+ window.parent.report_perf_reftest_time({
+ type: "time",
+ value: end - start,
+ });
+ } else {
+ // Running standalone; just alert.
+ console.log(end);
+ console.log(start);
+ alert("Result: " + (end - start).toFixed(2) + " (ms)");
+ }
+}
+
+if (window.parent.report_perf_reftest_time) {
+ window.addEventListener("error", function (e) {
+ window.parent.report_perf_reftest_time({ type: "error", value: e.message });
+ });
+}
diff --git a/testing/talos/talos/tests/quantum_pageload/quantum_pageload_amazon.manifest b/testing/talos/talos/tests/quantum_pageload/quantum_pageload_amazon.manifest
new file mode 100644
index 0000000000..2d55923140
--- /dev/null
+++ b/testing/talos/talos/tests/quantum_pageload/quantum_pageload_amazon.manifest
@@ -0,0 +1 @@
+https://www.amazon.com/s/url=search-alias%3Daps&field-keywords=laptop \ No newline at end of file
diff --git a/testing/talos/talos/tests/quantum_pageload/quantum_pageload_facebook.manifest b/testing/talos/talos/tests/quantum_pageload/quantum_pageload_facebook.manifest
new file mode 100644
index 0000000000..b446296385
--- /dev/null
+++ b/testing/talos/talos/tests/quantum_pageload/quantum_pageload_facebook.manifest
@@ -0,0 +1 @@
+https://www.facebook.com \ No newline at end of file
diff --git a/testing/talos/talos/tests/quantum_pageload/quantum_pageload_google.manifest b/testing/talos/talos/tests/quantum_pageload/quantum_pageload_google.manifest
new file mode 100644
index 0000000000..0ed538a6c8
--- /dev/null
+++ b/testing/talos/talos/tests/quantum_pageload/quantum_pageload_google.manifest
@@ -0,0 +1 @@
+https://www.google.com/#hl=en&q=barack+obama \ No newline at end of file
diff --git a/testing/talos/talos/tests/quantum_pageload/quantum_pageload_youtube.manifest b/testing/talos/talos/tests/quantum_pageload/quantum_pageload_youtube.manifest
new file mode 100644
index 0000000000..585b9518b2
--- /dev/null
+++ b/testing/talos/talos/tests/quantum_pageload/quantum_pageload_youtube.manifest
@@ -0,0 +1 @@
+https://www.youtube.com \ No newline at end of file
diff --git a/testing/talos/talos/tests/scroll/drac.htm b/testing/talos/talos/tests/scroll/drac.htm
new file mode 100644
index 0000000000..01d4873068
--- /dev/null
+++ b/testing/talos/talos/tests/scroll/drac.htm
@@ -0,0 +1,381 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html><head>
+ <meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<title>Perf test case</title>
+<link type="text/css" rel="stylesheet" href="reader.css">
+
+</head>
+<body>
+
+ <p style="margin: 0in 0in 0pt 0.3in; max-width: 1000px; text-align:justify; line-height:90%"><span style="font-size: 7pt;">
+
+
+
+ "The next morning Felix went out to his work, and after the usual
+ occupations of Agatha were finished, the Arabian sat at the feet of the
+ old man, and taking his guitar, played some airs so entrancingly
+ beautiful that they at once drew tears of sorrow and delight from my
+ eyes. She sang, and her voice flowed in a rich cadence, swelling or
+ dying away like a nightingale of the woods.
+
+ "When she had finished, she gave the guitar to Agatha, who at first
+ declined it. She played a simple air, and her voice accompanied it in
+ sweet accents, but unlike the wondrous strain of the stranger. The old
+ man appeared enraptured and said some words which Agatha endeavoured to
+ explain to Safie, and by which he appeared to wish to express that she
+ bestowed on him the greatest delight by her music.
+
+ "The days now passed as peaceably as before, with the sole alteration
+ that joy had taken place of sadness in the countenances of my friends.
+ Safie was always gay and happy; she and I improved rapidly in the
+ knowledge of language, so that in two months I began to comprehend most
+ of the words uttered by my protectors.
+
+ "In the meanwhile also the black ground was covered with herbage, and
+ the green banks interspersed with innumerable flowers, sweet to the
+ scent and the eyes, stars of pale radiance among the moonlight woods;
+ the sun became warmer, the nights clear and balmy; and my nocturnal
+ rambles were an extreme pleasure to me, although they were considerably
+ shortened by the late setting and early rising of the sun, for I never
+ ventured abroad during daylight, fearful of meeting with the same
+ treatment I had formerly endured in the first village which I entered.
+
+ "My days were spent in close attention, that I might more speedily
+ master the language; and I may boast that I improved more rapidly than
+ the Arabian, who understood very little and conversed in broken
+ accents, whilst I comprehended and could imitate almost every word that
+ was spoken.
+
+ "While I improved in speech, I also learned the science of letters as
+ it was taught to the stranger, and this opened before me a wide field
+ for wonder and delight.
+
+ "The book from which Felix instructed Safie was Volney's Ruins of
+ Empires. I should not have understood the purport of this book had not
+ Felix, in reading it, given very minute explanations. He had chosen
+ this work, he said, because the declamatory style was framed in
+ imitation of the Eastern authors. Through this work I obtained a
+ cursory knowledge of history and a view of the several empires at
+ present existing in the world; it gave me an insight into the manners,
+ governments, and religions of the different nations of the earth. I
+ heard of the slothful Asiatics, of the stupendous genius and mental
+ activity of the Grecians, of the wars and wonderful virtue of the early
+ Romans--of their subsequent degenerating--of the decline of that mighty
+ empire, of chivalry, Christianity, and kings. I heard of the discovery
+ of the American hemisphere and wept with Safie over the hapless fate of
+ its original inhabitants.
+
+ "These wonderful narrations inspired me with strange feelings. Was
+ man, indeed, at once so powerful, so virtuous and magnificent, yet so
+ vicious and base? He appeared at one time a mere scion of the evil
+ principle and at another as all that can be conceived of noble and
+ godlike. To be a great and virtuous man appeared the highest honour
+ that can befall a sensitive being; to be base and vicious, as many on
+ record have been, appeared the lowest degradation, a condition more
+ abject than that of the blind mole or harmless worm. For a long time I
+ could not conceive how one man could go forth to murder his fellow, or
+ even why there were laws and governments; but when I heard details of
+ vice and bloodshed, my wonder ceased and I turned away with disgust and
+ loathing.
+
+ "Every conversation of the cottagers now opened new wonders to me.
+ While I listened to the instructions which Felix bestowed upon the
+ Arabian, the strange system of human society was explained to me. I
+ heard of the division of property, of immense wealth and squalid
+ poverty, of rank, descent, and noble blood.
+
+ "The words induced me to turn towards myself. I learned that the
+ possessions most esteemed by your fellow creatures were high and
+ unsullied descent united with riches. A man might be respected with
+ only one of these advantages, but without either he was considered,
+ except in very rare instances, as a vagabond and a slave, doomed to
+ waste his powers for the profits of the chosen few! And what was I? Of
+ my creation and creator I was absolutely ignorant, but I knew that I
+ possessed no money, no friends, no kind of property. I was, besides,
+ endued with a figure hideously deformed and loathsome; I was not even
+ of the same nature as man. I was more agile than they and could
+ subsist upon coarser diet; I bore the extremes of heat and cold with
+ less injury to my frame; my stature far exceeded theirs. When I looked
+ around I saw and heard of none like me. Was I, then, a monster, a blot
+ upon the earth, from which all men fled and whom all men disowned?
+
+ "I cannot describe to you the agony that these reflections inflicted
+ upon me; I tried to dispel them, but sorrow only increased with
+ knowledge. Oh, that I had forever remained in my native wood, nor
+ known nor felt beyond the sensations of hunger, thirst, and heat!
+
+ "Of what a strange nature is knowledge! It clings to the mind when it
+ has once seized on it like a lichen on the rock. I wished sometimes to
+ shake off all thought and feeling, but I learned that there was but one
+ means to overcome the sensation of pain, and that was death--a state
+ which I feared yet did not understand. I admired virtue and good
+ feelings and loved the gentle manners and amiable qualities of my
+ cottagers, but I was shut out from intercourse with them, except
+ through means which I obtained by stealth, when I was unseen and
+ unknown, and which rather increased than satisfied the desire I had of
+ becoming one among my fellows. The gentle words of Agatha and the
+ animated smiles of the charming Arabian were not for me. The mild
+ exhortations of the old man and the lively conversation of the loved
+ Felix were not for me. Miserable, unhappy wretch!
+
+ "Other lessons were impressed upon me even more deeply. I heard of the
+ difference of sexes, and the birth and growth of children, how the
+ father doted on the smiles of the infant, and the lively sallies of the
+ older child, how all the life and cares of the mother were wrapped up
+ in the precious charge, how the mind of youth expanded and gained
+ knowledge, of brother, sister, and all the various relationships which
+ bind one human being to another in mutual bonds.
+
+ "But where were my friends and relations? No father had watched my
+ infant days, no mother had blessed me with smiles and caresses; or if
+ they had, all my past life was now a blot, a blind vacancy in which I
+ distinguished nothing. From my earliest remembrance I had been as I
+ then was in height and proportion. I had never yet seen a being
+ resembling me or who claimed any intercourse with me. What was I? The
+ question again recurred, to be answered only with groans.
+
+ "I will soon explain to what these feelings tended, but allow me now to
+ return to the cottagers, whose story excited in me such various
+ feelings of indignation, delight, and wonder, but which all terminated
+ in additional love and reverence for my protectors (for so I loved, in
+ an innocent, half-painful self-deceit, to call them)."
+
+
+
+ Chapter 14
+
+ "Some time elapsed before I learned the history of my friends. It was
+ one which could not fail to impress itself deeply on my mind, unfolding
+ as it did a number of circumstances, each interesting and wonderful to
+ one so utterly inexperienced as I was.
+
+ "The name of the old man was De Lacey. He was descended from a good
+ family in France, where he had lived for many years in affluence,
+ respected by his superiors and beloved by his equals. His son was bred
+ in the service of his country, and Agatha had ranked with ladies of the
+ highest distinction. A few months before my arrival they had lived in
+ a large and luxurious city called Paris, surrounded by friends and
+ possessed of every enjoyment which virtue, refinement of intellect, or
+ taste, accompanied by a moderate fortune, could afford.
+
+ "The father of Safie had been the cause of their ruin. He was a
+ Turkish merchant and had inhabited Paris for many years, when, for some
+ reason which I could not learn, he became obnoxious to the government.
+ He was seized and cast into prison the very day that Safie arrived from
+ Constantinople to join him. He was tried and condemned to death. The
+ injustice of his sentence was very flagrant; all Paris was indignant;
+ and it was judged that his religion and wealth rather than the crime
+ alleged against him had been the cause of his condemnation.
+
+ "Felix had accidentally been present at the trial; his horror and
+ indignation were uncontrollable when he heard the decision of the
+ court. He made, at that moment, a solemn vow to deliver him and then
+ looked around for the means. After many fruitless attempts to gain
+ admittance to the prison, he found a strongly grated window in an
+ unguarded part of the building, which lighted the dungeon of the
+ unfortunate Muhammadan, who, loaded with chains, waited in despair the
+ execution of the barbarous sentence. Felix visited the grate at night
+ and made known to the prisoner his intentions in his favour. The Turk,
+ amazed and delighted, endeavoured to kindle the zeal of his deliverer
+ by promises of reward and wealth. Felix rejected his offers with
+ contempt, yet when he saw the lovely Safie, who was allowed to visit
+ her father and who by her gestures expressed her lively gratitude, the
+ youth could not help owning to his own mind that the captive possessed
+ a treasure which would fully reward his toil and hazard.
+
+ "The Turk quickly perceived the impression that his daughter had made
+ on the heart of Felix and endeavoured to secure him more entirely in
+ his interests by the promise of her hand in marriage so soon as he
+ should be conveyed to a place of safety. Felix was too delicate to
+ accept this offer, yet he looked forward to the probability of the
+ event as to the consummation of his happiness.
+
+ "During the ensuing days, while the preparations were going forward for
+ the escape of the merchant, the zeal of Felix was warmed by several
+ letters that he received from this lovely girl, who found means to
+ express her thoughts in the language of her lover by the aid of an old
+ man, a servant of her father who understood French. She thanked him in
+ the most ardent terms for his intended services towards her parent, and
+ at the same time she gently deplored her own fate.
+
+ "I have copies of these letters, for I found means, during my residence
+ in the hovel, to procure the implements of writing; and the letters
+ were often in the hands of Felix or Agatha. Before I depart I will
+ give them to you; they will prove the truth of my tale; but at present,
+ as the sun is already far declined, I shall only have time to repeat
+ the substance of them to you.
+
+ "Safie related that her mother was a Christian Arab, seized and made a
+ slave by the Turks; recommended by her beauty, she had won the heart of
+ the father of Safie, who married her. The young girl spoke in high and
+ enthusiastic terms of her mother, who, born in freedom, spurned the
+ bondage to which she was now reduced. She instructed her daughter in
+ the tenets of her religion and taught her to aspire to higher powers of
+ intellect and an independence of spirit forbidden to the female
+ followers of Muhammad. This lady died, but her lessons were indelibly
+ impressed on the mind of Safie, who sickened at the prospect of again
+ returning to Asia and being immured within the walls of a harem,
+ allowed only to occupy herself with infantile amusements, ill-suited to
+ the temper of her soul, now accustomed to grand ideas and a noble
+ emulation for virtue. The prospect of marrying a Christian and
+ remaining in a country where women were allowed to take a rank in
+ society was enchanting to her.
+
+ "The day for the execution of the Turk was fixed, but on the night
+ previous to it he quitted his prison and before morning was distant
+ many leagues from Paris. Felix had procured passports in the name of
+ his father, sister, and himself. He had previously communicated his
+ plan to the former, who aided the deceit by quitting his house, under
+ the pretence of a journey and concealed himself, with his daughter, in
+ an obscure part of Paris.
+
+ "Felix conducted the fugitives through France to Lyons and across Mont
+ Cenis to Leghorn, where the merchant had decided to wait a favourable
+ opportunity of passing into some part of the Turkish dominions.
+
+ "Safie resolved to remain with her father until the moment of his
+ departure, before which time the Turk renewed his promise that she
+ should be united to his deliverer; and Felix remained with them in
+ expectation of that event; and in the meantime he enjoyed the society
+ of the Arabian, who exhibited towards him the simplest and tenderest
+ affection. They conversed with one another through the means of an
+ interpreter, and sometimes with the interpretation of looks; and Safie
+ sang to him the divine airs of her native country.
+
+ "The Turk allowed this intimacy to take place and encouraged the hopes
+ of the youthful lovers, while in his heart he had formed far other
+ plans. He loathed the idea that his daughter should be united to a
+ Christian, but he feared the resentment of Felix if he should appear
+ lukewarm, for he knew that he was still in the power of his deliverer
+ if he should choose to betray him to the Italian state which they
+ inhabited. He revolved a thousand plans by which he should be enabled
+ to prolong the deceit until it might be no longer necessary, and
+ secretly to take his daughter with him when he departed. His plans
+ were facilitated by the news which arrived from Paris.
+
+ "The government of France were greatly enraged at the escape of their
+ victim and spared no pains to detect and punish his deliverer. The
+ plot of Felix was quickly discovered, and De Lacey and Agatha were
+ thrown into prison. The news reached Felix and roused him from his
+ dream of pleasure. His blind and aged father and his gentle sister lay
+ in a noisome dungeon while he enjoyed the free air and the society of
+ her whom he loved. This idea was torture to him. He quickly arranged
+ with the Turk that if the latter should find a favourable opportunity
+ for escape before Felix could return to Italy, Safie should remain as a
+ boarder at a convent at Leghorn; and then, quitting the lovely Arabian,
+ he hastened to Paris and delivered himself up to the vengeance of the
+ law, hoping to free De Lacey and Agatha by this proceeding.
+
+ "He did not succeed. They remained confined for five months before the
+ trial took place, the result of which deprived them of their fortune
+ and condemned them to a perpetual exile from their native country.
+
+ "They found a miserable asylum in the cottage in Germany, where I
+ discovered them. Felix soon learned that the treacherous Turk, for
+ whom he and his family endured such unheard-of oppression, on
+ discovering that his deliverer was thus reduced to poverty and ruin,
+ became a traitor to good feeling and honour and had quitted Italy with
+ his daughter, insultingly sending Felix a pittance of money to aid him,
+ as he said, in some plan of future maintenance.
+
+ "Such were the events that preyed on the heart of Felix and rendered
+ him, when I first saw him, the most miserable of his family. He could
+ have endured poverty, and while this distress had been the meed of his
+ virtue, he gloried in it; but the ingratitude of the Turk and the loss
+ of his beloved Safie were misfortunes more bitter and irreparable. The
+ arrival of the Arabian now infused new life into his soul.
+
+ "When the news reached Leghorn that Felix was deprived of his wealth
+ and rank, the merchant commanded his daughter to think no more of her
+ lover, but to prepare to return to her native country. The generous
+ nature of Safie was outraged by this command; she attempted to
+ expostulate with her father, but he left her angrily, reiterating his
+ tyrannical mandate.
+
+ "A few days after, the Turk entered his daughter's apartment and told
+ her hastily that he had reason to believe that his residence at Leghorn
+ had been divulged and that he should speedily be delivered up to the
+ French government; he had consequently hired a vessel to convey him to
+ Constantinople, for which city he should sail in a few hours. He
+ intended to leave his daughter under the care of a confidential
+ servant, to follow at her leisure with the greater part of his
+ property, which had not yet arrived at Leghorn.
+
+ "When alone, Safie resolved in her own mind the plan of conduct that it
+ would become her to pursue in this emergency. A residence in Turkey
+ was abhorrent to her; her religion and her feelings were alike averse
+ to it. By some papers of her father which fell into her hands she
+ heard of the exile of her lover and learnt the name of the spot where
+ he then resided. She hesitated some time, but at length she formed her
+ determination. Taking with her some jewels that belonged to her and a
+ sum of money, she quitted Italy with an attendant, a native of Leghorn,
+ but who understood the common language of Turkey, and departed for
+ Germany.
+
+ "She arrived in safety at a town about twenty leagues from the cottage
+ of De Lacey, when her attendant fell dangerously ill. Safie nursed her
+ with the most devoted affection, but the poor girl died, and the
+ Arabian was left alone, unacquainted with the language of the country
+ and utterly ignorant of the customs of the world. She fell, however,
+ into good hands. The Italian had mentioned the name of the spot for
+ which they were bound, and after her death the woman of the house in
+ which they had lived took care that Safie should arrive in safety at
+ the cottage of her lover."
+
+
+
+ Chapter 15
+
+ "Such was the history of my beloved cottagers. It impressed me deeply.
+ I learned, from the views of social life which it developed, to admire
+ their virtues and to deprecate the vices of mankind.
+
+ "As yet I looked upon crime as a distant evil, benevolence and
+ generosity were ever present before me, inciting within me a desire to
+ become an actor in the busy scene where so many admirable qualities
+ were called forth and displayed. But in giving an account of the
+ progress of my intellect, I must not omit a circumstance which occurred
+ in the beginning of the month of August of the same year.
+
+ "One night during my accustomed visit to the neighbouring wood where I
+ collected my own food and brought home firing for my protectors, I
+ found on the ground a leathern portmanteau containing several articles
+ of dress and some books. I eagerly seized the prize and returned with
+ it to my hovel. Fortunately the books were written in the language,
+ the elements of which I had acquired at the cottage; they consisted of
+ Paradise Lost, a volume of Plutarch's Lives, and the Sorrows of Werter.
+ The possession of these treasures gave me extreme delight; I now
+ continually studied and exercised my mind upon these histories, whilst
+ my friends were employed in their ordinary occupations.
+
+ "I can hardly describe to you the effect of these books. They produced
+ in me an infinity of new images and feelings, that sometimes raised me
+ to ecstasy, but more frequently sunk me into the lowest dejection. In
+ the Sorrows of Werter, besides the interest of its simple and affecting
+ story, so many opinions are canvassed and so many lights thrown upon
+ what had hitherto been to me obscure subjects that I found in it a
+ never-ending source of speculation and astonishment. The gentle and
+ domestic manners it described, combined with lofty sentiments and
+ feelings, which had for their object something out of self, accorded
+ well with my experience among my protectors and with the wants which
+ were forever alive in my own bosom. But I thought Werter himself a
+ more divine being than I had ever beheld or imagined; his character
+ contained no pretension, but it sank deep. The disquisitions upon
+ death and suicide were calculated to fill me with wonder. I did not
+ pretend to enter into the merits of the case, yet I inclined towards
+ the opinions of the hero, whose extinction I wept, without precisely
+ understanding it.
+
+ "As I read, however, I applied much personally to my own feelings and
+ condition. I found myself similar yet at the same time strangely
+ unlike to the beings concerning whom I read and to whose conversation I
+ was a listener. I sympathized with and partly understood them, but I
+ was unformed in mind; I was dependent on none and related to none.
+ 'The path of my departure was free,' and there was none to lament my
+ annihilation. My person was hideous and my stature gigantic. What did
+ this mean? Who was I? What was I? Whence did I come? What was my
+ destination? These questions continually recurred, but I was unable to
+ solve them.
+
+ </span></p>
+</body></html>
diff --git a/testing/talos/talos/tests/scroll/iframe.svg b/testing/talos/talos/tests/scroll/iframe.svg
new file mode 100644
index 0000000000..d67b3dd107
--- /dev/null
+++ b/testing/talos/talos/tests/scroll/iframe.svg
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <!--
+ This tests the invalidation of foreign objects in svg. At the time of writing
+ we invalidate the entire foreign object when scrolling (bug 418063).
+ -->
+ <script>
+ iframeLoadedFirst = false;
+ parentLoadedFirst = false;
+
+ /* Since the script tag needs to come after the iframe, this
+ * ensures that doScroll() is only called once and only called
+ * after both the iframe and the parent have fired their
+ * onload events */
+
+ function iframeLoad() {
+ if (parentLoadedFirst) {
+ testScroll(document.getElementById("ifrm").contentWindow, 10);
+ } else {
+ iframeLoadedFirst = true;
+ }
+ }
+
+ window.onload = function() {
+ if (iframeLoadedFirst) {
+ testScroll(document.getElementById("ifrm").contentWindow, 10);
+ } else {
+ parentLoadedFirst = true;
+ }
+ }
+ </script>
+ <foreignObject x="5%" height="85%" width="90%">
+ <iframe onload="iframeLoad();" id="ifrm" width="99%" height="99%" xmlns="http://www.w3.org/1999/xhtml" src="drac.htm"/>
+ </foreignObject>
+ <!-- this has to come after the iframe for some reason -->
+ <script type="text/javascript" xlink:href="../../scripts/talos-debug.js"/>
+ <script type="text/javascript" xlink:href="resource://talos-powers/TalosContentProfiler.js"></script>
+ <script type="text/javascript" xlink:href="../../pageloader/chrome/tscroll.js"/>
+</svg>
diff --git a/testing/talos/talos/tests/scroll/reader.css b/testing/talos/talos/tests/scroll/reader.css
new file mode 100644
index 0000000000..b309f3d5ae
--- /dev/null
+++ b/testing/talos/talos/tests/scroll/reader.css
@@ -0,0 +1,63 @@
+
+html,body {
+font-size:90%;
+border:0;
+margin:0;
+}
+
+html,body,input {
+font-family:arial,sans-serif;
+}
+
+body {
+color:#000;
+}
+
+#chrome-viewer-container {
+width:100%;
+}
+
+#viewer-header {
+background:#9e9;
+}
+
+#entries,#viewer-page-container {
+overflow:auto;
+width:100%;
+}
+
+#entries .entry,#entries.list .entry-container {
+background:#fff;
+}
+
+.entry .entry-main {
+margin-right:10px;
+margin-left:20px;
+overflow:auto;
+}
+
+.cards .entry {
+padding:5px 0;
+}
+
+.entry .card {
+-webkit-box-shadow:0 1px 1px #f00;
+-moz-box-shadow:0 1px 1px #f00;
+border-color:#bbb;
+border-style:solid;
+border-width:1px;
+}
+
+.card-common {
+/* this margin is very important */
+margin:0 10px;
+}
+
+#current-entry .card {
+border-width:2px;
+}
+
+.entry .entry-body {
+max-width:650px;
+}
+
diff --git a/testing/talos/talos/tests/scroll/reader.htm b/testing/talos/talos/tests/scroll/reader.htm
new file mode 100644
index 0000000000..0855d81feb
--- /dev/null
+++ b/testing/talos/talos/tests/scroll/reader.htm
@@ -0,0 +1,147 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html><head>
+ <meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<title>Perf test case</title>
+<link type="text/css" rel="stylesheet" href="reader.css">
+<script language="Javascript" type="text/javascript" src="resource://talos-powers/TalosContentProfiler.js"></script>
+<script src="../../pageloader/chrome/tscroll.js" type="text/javascript"></script>
+<!--
+This resembles the layout of Google Reader as of 2009-11-23
+and exposed bug 530686.
+-->
+</head>
+<body onload = "testScroll(document.getElementById('entries'), 5)">
+ <table id="chrome-viewer-container">
+ <tbody>
+ <tr>
+ <td id="chrome-viewer" class=""><div id="viewer-header">
+ View settings...
+ <div id="viewer-container">
+ <div class="cards" style="height: 628.85px; visibility:" id="entries">
+ <div id="current-entry" class="entry entry-0 read">
+ <div class="card card-common">
+ <div class="entry-container">
+ <div class="entry-body">
+
+ <p style="margin: 0in 0in 0pt 0.5in;"><span style="font-size: 12pt;">
+
+ "The next morning Felix went out to his work, and after the usual
+ occupations of Agatha were finished, the Arabian sat at the feet of the
+ old man, and taking his guitar, played some airs so entrancingly
+ beautiful that they at once drew tears of sorrow and delight from my
+ eyes. She sang, and her voice flowed in a rich cadence, swelling or
+ dying away like a nightingale of the woods.
+
+ "When she had finished, she gave the guitar to Agatha, who at first
+ declined it. She played a simple air, and her voice accompanied it in
+ sweet accents, but unlike the wondrous strain of the stranger. The old
+ man appeared enraptured and said some words which Agatha endeavoured to
+ explain to Safie, and by which he appeared to wish to express that she
+ bestowed on him the greatest delight by her music.
+
+ "The days now passed as peaceably as before, with the sole alteration
+ that joy had taken place of sadness in the countenances of my friends.
+ Safie was always gay and happy; she and I improved rapidly in the
+ knowledge of language, so that in two months I began to comprehend most
+ of the words uttered by my protectors.
+
+ "In the meanwhile also the black ground was covered with herbage, and
+ the green banks interspersed with innumerable flowers, sweet to the
+ scent and the eyes, stars of pale radiance among the moonlight woods;
+ the sun became warmer, the nights clear and balmy; and my nocturnal
+ rambles were an extreme pleasure to me, although they were considerably
+ shortened by the late setting and early rising of the sun, for I never
+ ventured abroad during daylight, fearful of meeting with the same
+ treatment I had formerly endured in the first village which I entered.
+
+ "My days were spent in close attention, that I might more speedily
+ master the language; and I may boast that I improved more rapidly than
+ the Arabian, who understood very little and conversed in broken
+ accents, whilst I comprehended and could imitate almost every word that
+ was spoken.
+
+ "While I improved in speech, I also learned the science of letters as
+ it was taught to the stranger, and this opened before me a wide field
+ for wonder and delight.
+
+ "The book from which Felix instructed Safie was Volney's Ruins of
+ Empires. I should not have understood the purport of this book had not
+ Felix, in reading it, given very minute explanations. He had chosen
+ this work, he said, because the declamatory style was framed in
+ imitation of the Eastern authors. Through this work I obtained a
+ cursory knowledge of history and a view of the several empires at
+ present existing in the world; it gave me an insight into the manners,
+ governments, and religions of the different nations of the earth. I
+ heard of the slothful Asiatics, of the stupendous genius and mental
+ activity of the Grecians, of the wars and wonderful virtue of the early
+ Romans--of their subsequent degenerating--of the decline of that mighty
+ empire, of chivalry, Christianity, and kings. I heard of the discovery
+ of the American hemisphere and wept with Safie over the hapless fate of
+ its original inhabitants.
+
+ "These wonderful narrations inspired me with strange feelings. Was
+ man, indeed, at once so powerful, so virtuous and magnificent, yet so
+ vicious and base? He appeared at one time a mere scion of the evil
+ principle and at another as all that can be conceived of noble and
+ godlike. To be a great and virtuous man appeared the highest honour
+ that can befall a sensitive being; to be base and vicious, as many on
+ record have been, appeared the lowest degradation, a condition more
+ abject than that of the blind mole or harmless worm. For a long time I
+ could not conceive how one man could go forth to murder his fellow, or
+ even why there were laws and governments; but when I heard details of
+ vice and bloodshed, my wonder ceased and I turned away with disgust and
+ loathing.
+
+ "Every conversation of the cottagers now opened new wonders to me.
+ While I listened to the instructions which Felix bestowed upon the
+ Arabian, the strange system of human society was explained to me. I
+ heard of the division of property, of immense wealth and squalid
+ poverty, of rank, descent, and noble blood.
+
+ "The words induced me to turn towards myself. I learned that the
+ possessions most esteemed by your fellow creatures were high and
+ unsullied descent united with riches. A man might be respected with
+ only one of these advantages, but without either he was considered,
+ except in very rare instances, as a vagabond and a slave, doomed to
+ waste his powers for the profits of the chosen few! And what was I? Of
+ my creation and creator I was absolutely ignorant, but I knew that I
+ possessed no money, no friends, no kind of property. I was, besides,
+ endued with a figure hideously deformed and loathsome; I was not even
+ of the same nature as man. I was more agile than they and could
+ subsist upon coarser diet; I bore the extremes of heat and cold with
+ less injury to my frame; my stature far exceeded theirs. When I looked
+ around I saw and heard of none like me. Was I, then, a monster, a blot
+ upon the earth, from which all men fled and whom all men disowned?
+
+ "I cannot describe to you the agony that these reflections inflicted
+ upon me; I tried to dispel them, but sorrow only increased with
+ knowledge. Oh, that I had forever remained in my native wood, nor
+ known nor felt beyond the sensations of hunger, thirst, and heat!
+
+ "Of what a strange nature is knowledge! It clings to the mind when it
+ has once seized on it like a lichen on the rock. I wished sometimes to
+ shake off all thought and feeling, but I learned that there was but one
+ means to overcome the sensation of pain, and that was death--a state
+ which I feared yet did not understand. I admired virtue and good
+ feelings and loved the gentle manners and amiable qualities of my
+ cottagers, but I was shut out from intercourse with them, except
+ through means which I obtained by stealth, when I was unseen and
+ unknown, and which rather increased than satisfied the desire I had of
+ becoming one among my fellows. The gentle words of Agatha and the
+ animated smiles of the charming Arabian were not for me. The mild
+ exhortations of the old man and the lively conversation of the loved
+ Felix were not for me. Miserable, unhappy wretch!
+
+ "Other lessons were impressed upon me even more deeply. I heard of the
+ difference of sexes, and the birth and growth of children, how the
+ father doted on the smiles of the infant, and the lively sallies of the
+ older child, how all the life and cares of the mother were wrapped up
+ in the precious charge, how the mind of youth expanded and gained
+ knowledge, of brother, sister, and all the various relationships which
+ bind one human being to another in mutual bonds.
+
+ </span></p>
+</div></div></div>
+</div></div></div>
+</td></tr></tbody></table>
+</body></html>
diff --git a/testing/talos/talos/tests/scroll/scroll.manifest b/testing/talos/talos/tests/scroll/scroll.manifest
new file mode 100644
index 0000000000..a9c395abb9
--- /dev/null
+++ b/testing/talos/talos/tests/scroll/scroll.manifest
@@ -0,0 +1,6 @@
+% http://localhost/tests/scroll/tiled.html
+% http://localhost/tests/scroll/tiled-fixed.html
+% http://localhost/tests/scroll/tiled-downscale.html
+% http://localhost/tests/scroll/tiled-fixed-downscale.html
+% http://localhost/tests/scroll/iframe.svg
+% http://localhost/tests/scroll/reader.htm
diff --git a/testing/talos/talos/tests/scroll/strips-single.png b/testing/talos/talos/tests/scroll/strips-single.png
new file mode 100644
index 0000000000..e211155f5f
--- /dev/null
+++ b/testing/talos/talos/tests/scroll/strips-single.png
Binary files differ
diff --git a/testing/talos/talos/tests/scroll/strips.png b/testing/talos/talos/tests/scroll/strips.png
new file mode 100644
index 0000000000..e211155f5f
--- /dev/null
+++ b/testing/talos/talos/tests/scroll/strips.png
Binary files differ
diff --git a/testing/talos/talos/tests/scroll/tiled-downscale.html b/testing/talos/talos/tests/scroll/tiled-downscale.html
new file mode 100644
index 0000000000..51d52077db
--- /dev/null
+++ b/testing/talos/talos/tests/scroll/tiled-downscale.html
@@ -0,0 +1,143 @@
+<head>
+ <style>
+ body { background: url("strips.png");
+ -moz-background-size: 2.5px;
+ -webkit-background-size: 2.5px;
+ background-size: 2.5px;
+ margin-left: 160pt;
+ width: 400pt;
+ }
+ </style>
+ <script language="Javascript" type="text/javascript" src="resource://talos-powers/TalosContentProfiler.js"></script>
+ <script src="../../pageloader/chrome/tscroll.js" type="text/javascript"></script>
+</head>
+<body onload = "testScroll(window, 5)">
+<P>
+3 May. Bistritz.--Left Munich at 8:35 P.M., on 1st May, arriving at
+Vienna early next morning; should have arrived at 6:46, but train was
+an hour late. Buda-Pesth seems a wonderful place, from the glimpse
+which I got of it from the train and the little I could walk through
+the streets. I feared to go very far from the station, as we had
+arrived late and would start as near the correct time as possible.
+</P>
+
+<P>
+The impression I had was that we were leaving the West and entering the
+East; the most western of splendid bridges over the Danube, which is
+here of noble width and depth, took us among the traditions of Turkish
+rule.
+</P>
+
+<P>
+We left in pretty good time, and came after nightfall to Klausenburgh.
+Here I stopped for the night at the Hotel Royale. I had for dinner,
+or rather supper, a chicken done up some way with red pepper, which
+was very good but thirsty. (Mem. get recipe for Mina.) I asked the
+waiter, and he said it was called "paprika hendl," and that, as it was
+a national dish, I should be able to get it anywhere along the
+Carpathians.
+</P>
+
+<P>
+I found my smattering of German very useful here, indeed, I don't know
+how I should be able to get on without it.
+</P>
+
+<P>
+Having had some time at my disposal when in London, I had visited the
+British Museum, and made search among the books and maps in the
+library regarding Transylvania; it had struck me that some
+foreknowledge of the country could hardly fail to have some importance
+in dealing with a nobleman of that country.
+</P>
+
+<BR>
+
+<P>
+I find that the district he named is in the extreme east of the
+country, just on the borders of three states, Transylvania, Moldavia,
+and Bukovina, in the midst of the Carpathian mountains; one of the
+wildest and least known portions of Europe.
+</P>
+
+<P>
+I was not able to light on any map or work giving the exact locality
+of the Castle Dracula, as there are no maps of this country as yet to
+compare with our own Ordance Survey Maps; but I found that Bistritz,
+the post town named by Count Dracula, is a fairly well-known place. I
+shall enter here some of my notes, as they may refresh my memory when
+I talk over my travels with Mina.
+</P>
+
+<P>
+In the population of Transylvania there are four distinct
+nationalities: Saxons in the South, and mixed with them the Wallachs,
+who are the descendants of the Dacians; Magyars in the West, and
+Szekelys in the East and North. I am going among the latter, who
+claim to be descended from Attila and the Huns. This may be so, for
+when the Magyars conquered the country in the eleventh century they
+found the Huns settled in it.
+</P>
+
+<P>
+I read that every known superstition in the world is gathered into the
+horseshoe of the Carpathians, as if it were the centre of some sort of
+imaginative whirlpool; if so my stay may be very interesting. (Mem.,
+I must ask the Count all about them.)
+</P>
+
+<P>
+I did not sleep well, though my bed was comfortable enough, for I had
+all sorts of queer dreams. There was a dog howling all night under my
+window, which may have had something to do with it; or it may have
+been the paprika, for I had to drink up all the water in my carafe,
+and was still thirsty. Towards morning I slept and was wakened by the
+continuous knocking at my door, so I guess I must have been sleeping
+soundly then.
+</P>
+
+<P>
+I had for breakfast more paprika, and a sort of porridge of maize
+flour which they said was "mamaliga", and egg-plant stuffed with
+forcemeat, a very excellent dish, which they call "impletata". (Mem.,
+get recipe for this also.)
+</P>
+
+<P>
+I had to hurry breakfast, for the train started a little before eight,
+or rather it ought to have done so, for after rushing to the station
+at 7:30 I had to sit in the carriage for more than an hour before we
+began to move.
+</P>
+
+<P>
+It seems to me that the further east you go the more unpunctual are
+the trains. What ought they to be in China?
+</P>
+
+<P>
+All day long we seemed to dawdle through a country which was full of
+beauty of every kind. Sometimes we saw little towns or castles on the
+top of steep hills such as we see in old missals; sometimes we ran by
+rivers and streams which seemed from the wide stony margin on each
+side of them to be subject to great floods. It takes a lot of water,
+and running strong, to sweep the outside edge of a river clear.
+</P>
+
+<P>
+At every station there were groups of people, sometimes crowds, and in
+all sorts of attire. Some of them were just like the peasants at home
+or those I saw coming through France and Germany, with short jackets,
+and round hats, and home-made trousers; but others were very
+picturesque.
+</P>
+
+<P>
+The women looked pretty, except when you got near them, but they were
+very clumsy about the waist. They had all full white sleeves of some
+kind or other, and most of them had big belts with a lot of strips of
+something fluttering from them like the dresses in a ballet, but of
+course there were petticoats under them.
+</P>
+
+</body>
diff --git a/testing/talos/talos/tests/scroll/tiled-fixed-downscale.html b/testing/talos/talos/tests/scroll/tiled-fixed-downscale.html
new file mode 100644
index 0000000000..8b2bc99b14
--- /dev/null
+++ b/testing/talos/talos/tests/scroll/tiled-fixed-downscale.html
@@ -0,0 +1,144 @@
+<head>
+ <style>
+ body { background: url("strips.png");
+ -moz-background-size: 2.5px;
+ -webkit-background-size: 2.5px;
+ background-size: 2.5px;
+ background-attachment: fixed;
+ margin-left: 160pt;
+ width: 400pt;
+ }
+ </style>
+ <script language="Javascript" type="text/javascript" src="resource://talos-powers/TalosContentProfiler.js"></script>
+ <script src="../../pageloader/chrome/tscroll.js" type="text/javascript"></script>
+</head>
+<body onload = "testScroll(window, 5)">
+<P>
+3 May. Bistritz.--Left Munich at 8:35 P.M., on 1st May, arriving at
+Vienna early next morning; should have arrived at 6:46, but train was
+an hour late. Buda-Pesth seems a wonderful place, from the glimpse
+which I got of it from the train and the little I could walk through
+the streets. I feared to go very far from the station, as we had
+arrived late and would start as near the correct time as possible.
+</P>
+
+<P>
+The impression I had was that we were leaving the West and entering the
+East; the most western of splendid bridges over the Danube, which is
+here of noble width and depth, took us among the traditions of Turkish
+rule.
+</P>
+
+<P>
+We left in pretty good time, and came after nightfall to Klausenburgh.
+Here I stopped for the night at the Hotel Royale. I had for dinner,
+or rather supper, a chicken done up some way with red pepper, which
+was very good but thirsty. (Mem. get recipe for Mina.) I asked the
+waiter, and he said it was called "paprika hendl," and that, as it was
+a national dish, I should be able to get it anywhere along the
+Carpathians.
+</P>
+
+<P>
+I found my smattering of German very useful here, indeed, I don't know
+how I should be able to get on without it.
+</P>
+
+<P>
+Having had some time at my disposal when in London, I had visited the
+British Museum, and made search among the books and maps in the
+library regarding Transylvania; it had struck me that some
+foreknowledge of the country could hardly fail to have some importance
+in dealing with a nobleman of that country.
+</P>
+
+<BR>
+
+<P>
+I find that the district he named is in the extreme east of the
+country, just on the borders of three states, Transylvania, Moldavia,
+and Bukovina, in the midst of the Carpathian mountains; one of the
+wildest and least known portions of Europe.
+</P>
+
+<P>
+I was not able to light on any map or work giving the exact locality
+of the Castle Dracula, as there are no maps of this country as yet to
+compare with our own Ordance Survey Maps; but I found that Bistritz,
+the post town named by Count Dracula, is a fairly well-known place. I
+shall enter here some of my notes, as they may refresh my memory when
+I talk over my travels with Mina.
+</P>
+
+<P>
+In the population of Transylvania there are four distinct
+nationalities: Saxons in the South, and mixed with them the Wallachs,
+who are the descendants of the Dacians; Magyars in the West, and
+Szekelys in the East and North. I am going among the latter, who
+claim to be descended from Attila and the Huns. This may be so, for
+when the Magyars conquered the country in the eleventh century they
+found the Huns settled in it.
+</P>
+
+<P>
+I read that every known superstition in the world is gathered into the
+horseshoe of the Carpathians, as if it were the centre of some sort of
+imaginative whirlpool; if so my stay may be very interesting. (Mem.,
+I must ask the Count all about them.)
+</P>
+
+<P>
+I did not sleep well, though my bed was comfortable enough, for I had
+all sorts of queer dreams. There was a dog howling all night under my
+window, which may have had something to do with it; or it may have
+been the paprika, for I had to drink up all the water in my carafe,
+and was still thirsty. Towards morning I slept and was wakened by the
+continuous knocking at my door, so I guess I must have been sleeping
+soundly then.
+</P>
+
+<P>
+I had for breakfast more paprika, and a sort of porridge of maize
+flour which they said was "mamaliga", and egg-plant stuffed with
+forcemeat, a very excellent dish, which they call "impletata". (Mem.,
+get recipe for this also.)
+</P>
+
+<P>
+I had to hurry breakfast, for the train started a little before eight,
+or rather it ought to have done so, for after rushing to the station
+at 7:30 I had to sit in the carriage for more than an hour before we
+began to move.
+</P>
+
+<P>
+It seems to me that the further east you go the more unpunctual are
+the trains. What ought they to be in China?
+</P>
+
+<P>
+All day long we seemed to dawdle through a country which was full of
+beauty of every kind. Sometimes we saw little towns or castles on the
+top of steep hills such as we see in old missals; sometimes we ran by
+rivers and streams which seemed from the wide stony margin on each
+side of them to be subject to great floods. It takes a lot of water,
+and running strong, to sweep the outside edge of a river clear.
+</P>
+
+<P>
+At every station there were groups of people, sometimes crowds, and in
+all sorts of attire. Some of them were just like the peasants at home
+or those I saw coming through France and Germany, with short jackets,
+and round hats, and home-made trousers; but others were very
+picturesque.
+</P>
+
+<P>
+The women looked pretty, except when you got near them, but they were
+very clumsy about the waist. They had all full white sleeves of some
+kind or other, and most of them had big belts with a lot of strips of
+something fluttering from them like the dresses in a ballet, but of
+course there were petticoats under them.
+</P>
+
+</body>
diff --git a/testing/talos/talos/tests/scroll/tiled-fixed.html b/testing/talos/talos/tests/scroll/tiled-fixed.html
new file mode 100644
index 0000000000..7d5b72a914
--- /dev/null
+++ b/testing/talos/talos/tests/scroll/tiled-fixed.html
@@ -0,0 +1,141 @@
+<head>
+ <style>
+ body { background: url("strips.png");
+ background-attachment: fixed;
+ margin-left: 160pt;
+ width: 400pt;
+ }
+ </style>
+ <script language="Javascript" type="text/javascript" src="resource://talos-powers/TalosContentProfiler.js"></script>
+ <script src="../../pageloader/chrome/tscroll.js" type="text/javascript"></script>
+</head>
+<body onload = "testScroll(window, 5)">
+<P>
+3 May. Bistritz.--Left Munich at 8:35 P.M., on 1st May, arriving at
+Vienna early next morning; should have arrived at 6:46, but train was
+an hour late. Buda-Pesth seems a wonderful place, from the glimpse
+which I got of it from the train and the little I could walk through
+the streets. I feared to go very far from the station, as we had
+arrived late and would start as near the correct time as possible.
+</P>
+
+<P>
+The impression I had was that we were leaving the West and entering the
+East; the most western of splendid bridges over the Danube, which is
+here of noble width and depth, took us among the traditions of Turkish
+rule.
+</P>
+
+<P>
+We left in pretty good time, and came after nightfall to Klausenburgh.
+Here I stopped for the night at the Hotel Royale. I had for dinner,
+or rather supper, a chicken done up some way with red pepper, which
+was very good but thirsty. (Mem. get recipe for Mina.) I asked the
+waiter, and he said it was called "paprika hendl," and that, as it was
+a national dish, I should be able to get it anywhere along the
+Carpathians.
+</P>
+
+<P>
+I found my smattering of German very useful here, indeed, I don't know
+how I should be able to get on without it.
+</P>
+
+<P>
+Having had some time at my disposal when in London, I had visited the
+British Museum, and made search among the books and maps in the
+library regarding Transylvania; it had struck me that some
+foreknowledge of the country could hardly fail to have some importance
+in dealing with a nobleman of that country.
+</P>
+
+<BR>
+
+<P>
+I find that the district he named is in the extreme east of the
+country, just on the borders of three states, Transylvania, Moldavia,
+and Bukovina, in the midst of the Carpathian mountains; one of the
+wildest and least known portions of Europe.
+</P>
+
+<P>
+I was not able to light on any map or work giving the exact locality
+of the Castle Dracula, as there are no maps of this country as yet to
+compare with our own Ordance Survey Maps; but I found that Bistritz,
+the post town named by Count Dracula, is a fairly well-known place. I
+shall enter here some of my notes, as they may refresh my memory when
+I talk over my travels with Mina.
+</P>
+
+<P>
+In the population of Transylvania there are four distinct
+nationalities: Saxons in the South, and mixed with them the Wallachs,
+who are the descendants of the Dacians; Magyars in the West, and
+Szekelys in the East and North. I am going among the latter, who
+claim to be descended from Attila and the Huns. This may be so, for
+when the Magyars conquered the country in the eleventh century they
+found the Huns settled in it.
+</P>
+
+<P>
+I read that every known superstition in the world is gathered into the
+horseshoe of the Carpathians, as if it were the centre of some sort of
+imaginative whirlpool; if so my stay may be very interesting. (Mem.,
+I must ask the Count all about them.)
+</P>
+
+<P>
+I did not sleep well, though my bed was comfortable enough, for I had
+all sorts of queer dreams. There was a dog howling all night under my
+window, which may have had something to do with it; or it may have
+been the paprika, for I had to drink up all the water in my carafe,
+and was still thirsty. Towards morning I slept and was wakened by the
+continuous knocking at my door, so I guess I must have been sleeping
+soundly then.
+</P>
+
+<P>
+I had for breakfast more paprika, and a sort of porridge of maize
+flour which they said was "mamaliga", and egg-plant stuffed with
+forcemeat, a very excellent dish, which they call "impletata". (Mem.,
+get recipe for this also.)
+</P>
+
+<P>
+I had to hurry breakfast, for the train started a little before eight,
+or rather it ought to have done so, for after rushing to the station
+at 7:30 I had to sit in the carriage for more than an hour before we
+began to move.
+</P>
+
+<P>
+It seems to me that the further east you go the more unpunctual are
+the trains. What ought they to be in China?
+</P>
+
+<P>
+All day long we seemed to dawdle through a country which was full of
+beauty of every kind. Sometimes we saw little towns or castles on the
+top of steep hills such as we see in old missals; sometimes we ran by
+rivers and streams which seemed from the wide stony margin on each
+side of them to be subject to great floods. It takes a lot of water,
+and running strong, to sweep the outside edge of a river clear.
+</P>
+
+<P>
+At every station there were groups of people, sometimes crowds, and in
+all sorts of attire. Some of them were just like the peasants at home
+or those I saw coming through France and Germany, with short jackets,
+and round hats, and home-made trousers; but others were very
+picturesque.
+</P>
+
+<P>
+The women looked pretty, except when you got near them, but they were
+very clumsy about the waist. They had all full white sleeves of some
+kind or other, and most of them had big belts with a lot of strips of
+something fluttering from them like the dresses in a ballet, but of
+course there were petticoats under them.
+</P>
+
+</body>
diff --git a/testing/talos/talos/tests/scroll/tiled.html b/testing/talos/talos/tests/scroll/tiled.html
new file mode 100644
index 0000000000..17e7ed287b
--- /dev/null
+++ b/testing/talos/talos/tests/scroll/tiled.html
@@ -0,0 +1,140 @@
+<head>
+ <style>
+ body { background: url("strips.png");
+ margin-left: 160pt;
+ width: 400pt;
+ }
+ </style>
+ <script language="Javascript" type="text/javascript" src="resource://talos-powers/TalosContentProfiler.js"></script>
+ <script src="../../pageloader/chrome/tscroll.js" type="text/javascript"></script>
+</head>
+<body onload = "testScroll(window, 5)">
+<P>
+3 May. Bistritz.--Left Munich at 8:35 P.M., on 1st May, arriving at
+Vienna early next morning; should have arrived at 6:46, but train was
+an hour late. Buda-Pesth seems a wonderful place, from the glimpse
+which I got of it from the train and the little I could walk through
+the streets. I feared to go very far from the station, as we had
+arrived late and would start as near the correct time as possible.
+</P>
+
+<P>
+The impression I had was that we were leaving the West and entering the
+East; the most western of splendid bridges over the Danube, which is
+here of noble width and depth, took us among the traditions of Turkish
+rule.
+</P>
+
+<P>
+We left in pretty good time, and came after nightfall to Klausenburgh.
+Here I stopped for the night at the Hotel Royale. I had for dinner,
+or rather supper, a chicken done up some way with red pepper, which
+was very good but thirsty. (Mem. get recipe for Mina.) I asked the
+waiter, and he said it was called "paprika hendl," and that, as it was
+a national dish, I should be able to get it anywhere along the
+Carpathians.
+</P>
+
+<P>
+I found my smattering of German very useful here, indeed, I don't know
+how I should be able to get on without it.
+</P>
+
+<P>
+Having had some time at my disposal when in London, I had visited the
+British Museum, and made search among the books and maps in the
+library regarding Transylvania; it had struck me that some
+foreknowledge of the country could hardly fail to have some importance
+in dealing with a nobleman of that country.
+</P>
+
+<BR>
+
+<P>
+I find that the district he named is in the extreme east of the
+country, just on the borders of three states, Transylvania, Moldavia,
+and Bukovina, in the midst of the Carpathian mountains; one of the
+wildest and least known portions of Europe.
+</P>
+
+<P>
+I was not able to light on any map or work giving the exact locality
+of the Castle Dracula, as there are no maps of this country as yet to
+compare with our own Ordance Survey Maps; but I found that Bistritz,
+the post town named by Count Dracula, is a fairly well-known place. I
+shall enter here some of my notes, as they may refresh my memory when
+I talk over my travels with Mina.
+</P>
+
+<P>
+In the population of Transylvania there are four distinct
+nationalities: Saxons in the South, and mixed with them the Wallachs,
+who are the descendants of the Dacians; Magyars in the West, and
+Szekelys in the East and North. I am going among the latter, who
+claim to be descended from Attila and the Huns. This may be so, for
+when the Magyars conquered the country in the eleventh century they
+found the Huns settled in it.
+</P>
+
+<P>
+I read that every known superstition in the world is gathered into the
+horseshoe of the Carpathians, as if it were the centre of some sort of
+imaginative whirlpool; if so my stay may be very interesting. (Mem.,
+I must ask the Count all about them.)
+</P>
+
+<P>
+I did not sleep well, though my bed was comfortable enough, for I had
+all sorts of queer dreams. There was a dog howling all night under my
+window, which may have had something to do with it; or it may have
+been the paprika, for I had to drink up all the water in my carafe,
+and was still thirsty. Towards morning I slept and was wakened by the
+continuous knocking at my door, so I guess I must have been sleeping
+soundly then.
+</P>
+
+<P>
+I had for breakfast more paprika, and a sort of porridge of maize
+flour which they said was "mamaliga", and egg-plant stuffed with
+forcemeat, a very excellent dish, which they call "impletata". (Mem.,
+get recipe for this also.)
+</P>
+
+<P>
+I had to hurry breakfast, for the train started a little before eight,
+or rather it ought to have done so, for after rushing to the station
+at 7:30 I had to sit in the carriage for more than an hour before we
+began to move.
+</P>
+
+<P>
+It seems to me that the further east you go the more unpunctual are
+the trains. What ought they to be in China?
+</P>
+
+<P>
+All day long we seemed to dawdle through a country which was full of
+beauty of every kind. Sometimes we saw little towns or castles on the
+top of steep hills such as we see in old missals; sometimes we ran by
+rivers and streams which seemed from the wide stony margin on each
+side of them to be subject to great floods. It takes a lot of water,
+and running strong, to sweep the outside edge of a river clear.
+</P>
+
+<P>
+At every station there were groups of people, sometimes crowds, and in
+all sorts of attire. Some of them were just like the peasants at home
+or those I saw coming through France and Germany, with short jackets,
+and round hats, and home-made trousers; but others were very
+picturesque.
+</P>
+
+<P>
+The women looked pretty, except when you got near them, but they were
+very clumsy about the waist. They had all full white sleeves of some
+kind or other, and most of them had big belts with a lot of strips of
+something fluttering from them like the dresses in a ballet, but of
+course there were petticoats under them.
+</P>
+
+</body>
diff --git a/testing/talos/talos/tests/speedometer/speedometer.manifest b/testing/talos/talos/tests/speedometer/speedometer.manifest
new file mode 100644
index 0000000000..3c07af6f36
--- /dev/null
+++ b/testing/talos/talos/tests/speedometer/speedometer.manifest
@@ -0,0 +1 @@
+% http://localhost/tests/webkit/PerformanceTests/Speedometer/index.html?gecko
diff --git a/testing/talos/talos/tests/stylebench/stylebench.manifest b/testing/talos/talos/tests/stylebench/stylebench.manifest
new file mode 100644
index 0000000000..7405d6fb8c
--- /dev/null
+++ b/testing/talos/talos/tests/stylebench/stylebench.manifest
@@ -0,0 +1 @@
+% http://localhost/tests/webkit/PerformanceTests/StyleBench/index.html?gecko
diff --git a/testing/talos/talos/tests/svg_opacity/big-optimizable-group-opacity-2500.svg b/testing/talos/talos/tests/svg_opacity/big-optimizable-group-opacity-2500.svg
new file mode 100644
index 0000000000..e320f004d2
--- /dev/null
+++ b/testing/talos/talos/tests/svg_opacity/big-optimizable-group-opacity-2500.svg
@@ -0,0 +1,2503 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="600" height="600" >
+ <title>Test that implementations optimize away group opacity when possible</title>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+ <rect width="600" height="600" opacity=".5"/>
+</svg>
diff --git a/testing/talos/talos/tests/svg_opacity/small-group-opacity-2500.svg b/testing/talos/talos/tests/svg_opacity/small-group-opacity-2500.svg
new file mode 100644
index 0000000000..57b7cbd9a0
--- /dev/null
+++ b/testing/talos/talos/tests/svg_opacity/small-group-opacity-2500.svg
@@ -0,0 +1,2503 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="600" height="600" >
+ <title>Test that implementations minimize offscreen surface size for group opacity</title>
+ <rect x="0" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="0" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="12" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="24" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="36" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="48" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="60" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="72" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="84" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="96" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="108" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="120" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="132" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="144" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="156" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="168" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="180" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="192" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="204" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="216" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="228" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="240" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="252" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="264" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="276" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="288" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="300" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="312" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="324" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="336" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="348" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="360" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="372" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="384" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="396" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="408" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="420" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="432" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="444" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="456" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="468" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="480" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="492" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="504" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="516" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="528" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="540" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="552" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="564" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="576" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="0" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="12" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="24" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="36" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="48" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="60" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="72" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="84" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="96" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="108" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="120" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="132" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="144" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="156" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="168" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="180" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="192" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="204" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="216" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="228" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="240" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="252" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="264" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="276" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="288" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="300" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="312" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="324" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="336" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="348" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="360" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="372" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="384" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="396" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="408" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="420" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="432" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="444" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="456" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="468" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="480" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="492" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="504" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="516" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="528" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="540" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="552" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="564" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="576" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+ <rect x="588" y="588" width="12" height="12" stroke="white" opacity=".5"/>
+</svg>
diff --git a/testing/talos/talos/tests/svg_opacity/svg_opacity.manifest b/testing/talos/talos/tests/svg_opacity/svg_opacity.manifest
new file mode 100644
index 0000000000..37adaf457e
--- /dev/null
+++ b/testing/talos/talos/tests/svg_opacity/svg_opacity.manifest
@@ -0,0 +1,4 @@
+# opacity tests
+
+http://localhost/tests/svg_opacity/big-optimizable-group-opacity-2500.svg
+http://localhost/tests/svg_opacity/small-group-opacity-2500.svg
diff --git a/testing/talos/talos/tests/svg_static/composite-scale-opacity.svg b/testing/talos/talos/tests/svg_static/composite-scale-opacity.svg
new file mode 100644
index 0000000000..f7565a1bc7
--- /dev/null
+++ b/testing/talos/talos/tests/svg_static/composite-scale-opacity.svg
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+
+<svg
+ width="1024pt"
+ height="768pt"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:svg="http://www.w3.org/2000/svg">
+
+ <g transform="scale(0.5,0.5)">
+ <g transform="translate(0,0)">
+ <image style="opacity: 0.25" xlink:href="images/kyoto_1.jpg" width="1280" height="856"/>
+ <g transform="translate(50,50)">
+ <image style="opacity: 0.25" xlink:href="images/kyoto_1.jpg" width="1280" height="856"/>
+ <g transform="translate(50,50)">
+ <image style="opacity: 0.25" xlink:href="images/kyoto_1.jpg" width="1280" height="856"/>
+ <g transform="translate(50,50)">
+ <image style="opacity: 0.25" xlink:href="images/kyoto_1.jpg" width="1280" height="856"/>
+ <g transform="translate(50,50)">
+ <image style="opacity: 0.25" xlink:href="images/kyoto_1.jpg" width="1280" height="856"/>
+ <g transform="translate(50,50)">
+ <image style="opacity: 0.25" xlink:href="images/kyoto_1.jpg" width="1280" height="856"/>
+ <g transform="translate(50,50)">
+ <image style="opacity: 0.25" xlink:href="images/kyoto_1.jpg" width="1280" height="856"/>
+ <g transform="translate(50,50)">
+ <image style="opacity: 0.25" xlink:href="images/kyoto_1.jpg" width="1280" height="856"/>
+ <g transform="translate(50,50)">
+ <image style="opacity: 0.25" xlink:href="images/kyoto_1.jpg" width="1280" height="856"/>
+ <g transform="translate(50,50)">
+ <image style="opacity: 0.25" xlink:href="images/kyoto_1.jpg" width="1280" height="856"/>
+ <g transform="translate(50,50)">
+ <image style="opacity: 0.25" xlink:href="images/kyoto_1.jpg" width="1280" height="856"/>
+ <g transform="translate(50,50)">
+ <image style="opacity: 0.25" xlink:href="images/kyoto_1.jpg" width="1280" height="856"/>
+ <g transform="translate(50,50)">
+ <image style="opacity: 0.25" xlink:href="images/kyoto_1.jpg" width="1280" height="856"/>
+ <g transform="translate(50,50)">
+ <image style="opacity: 0.25" xlink:href="images/kyoto_1.jpg" width="1280" height="856"/>
+ <g transform="translate(50,50)">
+ <image style="opacity: 0.25" xlink:href="images/kyoto_1.jpg" width="1280" height="856"/>
+ </g></g></g></g></g></g></g></g></g></g></g></g></g></g></g></g>
+</svg> \ No newline at end of file
diff --git a/testing/talos/talos/tests/svg_static/composite-scale-rotate-opacity.svg b/testing/talos/talos/tests/svg_static/composite-scale-rotate-opacity.svg
new file mode 100644
index 0000000000..0594f0f0e7
--- /dev/null
+++ b/testing/talos/talos/tests/svg_static/composite-scale-rotate-opacity.svg
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+
+<svg
+ width="1024pt"
+ height="768pt"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:svg="http://www.w3.org/2000/svg">
+
+ <g transform="translate(500,400) scale(0.5,0.5)">
+ <g transform="rotate(10)">
+ <image style="opacity: 0.2" xlink:href="images/kyoto_1.jpg" x="-640" y="-428" width="1280" height="856"/>
+ <g transform="rotate(10)">
+ <image style="opacity: 0.2" xlink:href="images/kyoto_1.jpg" x="-640" y="-428" width="1280" height="856"/>
+ <g transform="rotate(10)">
+ <image style="opacity: 0.2" xlink:href="images/kyoto_1.jpg" x="-640" y="-428" width="1280" height="856"/>
+ <g transform="rotate(10)">
+ <image style="opacity: 0.2" xlink:href="images/kyoto_1.jpg" x="-640" y="-428" width="1280" height="856"/>
+ <g transform="rotate(10)">
+ <image style="opacity: 0.2" xlink:href="images/kyoto_1.jpg" x="-640" y="-428" width="1280" height="856"/>
+ <g transform="rotate(10)">
+ <image style="opacity: 0.2" xlink:href="images/kyoto_1.jpg" x="-640" y="-428" width="1280" height="856"/>
+ <g transform="rotate(10)">
+ <image style="opacity: 0.2" xlink:href="images/kyoto_1.jpg" x="-640" y="-428" width="1280" height="856"/>
+ <g transform="rotate(10)">
+ <image style="opacity: 0.2" xlink:href="images/kyoto_1.jpg" x="-640" y="-428" width="1280" height="856"/>
+ <g transform="rotate(10)">
+ <image style="opacity: 0.2" xlink:href="images/kyoto_1.jpg" x="-640" y="-428" width="1280" height="856"/>
+ <g transform="rotate(10)">
+ <image style="opacity: 0.2" xlink:href="images/kyoto_1.jpg" x="-640" y="-428" width="1280" height="856"/>
+ <g transform="rotate(10)">
+ <image style="opacity: 0.2" xlink:href="images/kyoto_1.jpg" x="-640" y="-428" width="1280" height="856"/>
+ <g transform="rotate(10)">
+ <image style="opacity: 0.2" xlink:href="images/kyoto_1.jpg" x="-640" y="-428" width="1280" height="856"/>
+ <g transform="rotate(10)">
+ <image style="opacity: 0.2" xlink:href="images/kyoto_1.jpg" x="-640" y="-428" width="1280" height="856"/>
+ <g transform="rotate(10)">
+ <image style="opacity: 0.2" xlink:href="images/kyoto_1.jpg" x="-640" y="-428" width="1280" height="856"/>
+ <g transform="rotate(10)">
+ <image style="opacity: 0.2" xlink:href="images/kyoto_1.jpg" x="-640" y="-428" width="1280" height="856"/>
+ </g></g></g></g></g></g></g></g></g></g></g></g></g></g></g></g>
+</svg> \ No newline at end of file
diff --git a/testing/talos/talos/tests/svg_static/composite-scale-rotate.svg b/testing/talos/talos/tests/svg_static/composite-scale-rotate.svg
new file mode 100644
index 0000000000..76a1c5de9f
--- /dev/null
+++ b/testing/talos/talos/tests/svg_static/composite-scale-rotate.svg
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+
+<svg
+ width="1024pt"
+ height="768pt"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:svg="http://www.w3.org/2000/svg">
+
+ <g transform="translate(500,400) scale(0.5,0.5)">
+ <g transform="rotate(10)">
+ <image xlink:href="images/kyoto_1.jpg" x="-640" y="-428" width="1280" height="856"/>
+ <g transform="rotate(10)">
+ <image xlink:href="images/kyoto_1.jpg" x="-640" y="-428" width="1280" height="856"/>
+ <g transform="rotate(10)">
+ <image xlink:href="images/kyoto_1.jpg" x="-640" y="-428" width="1280" height="856"/>
+ <g transform="rotate(10)">
+ <image xlink:href="images/kyoto_1.jpg" x="-640" y="-428" width="1280" height="856"/>
+ <g transform="rotate(10)">
+ <image xlink:href="images/kyoto_1.jpg" x="-640" y="-428" width="1280" height="856"/>
+ <g transform="rotate(10)">
+ <image xlink:href="images/kyoto_1.jpg" x="-640" y="-428" width="1280" height="856"/>
+ <g transform="rotate(10)">
+ <image xlink:href="images/kyoto_1.jpg" x="-640" y="-428" width="1280" height="856"/>
+ <g transform="rotate(10)">
+ <image xlink:href="images/kyoto_1.jpg" x="-640" y="-428" width="1280" height="856"/>
+ <g transform="rotate(10)">
+ <image xlink:href="images/kyoto_1.jpg" x="-640" y="-428" width="1280" height="856"/>
+ <g transform="rotate(10)">
+ <image xlink:href="images/kyoto_1.jpg" x="-640" y="-428" width="1280" height="856"/>
+ <g transform="rotate(10)">
+ <image xlink:href="images/kyoto_1.jpg" x="-640" y="-428" width="1280" height="856"/>
+ <g transform="rotate(10)">
+ <image xlink:href="images/kyoto_1.jpg" x="-640" y="-428" width="1280" height="856"/>
+ <g transform="rotate(10)">
+ <image xlink:href="images/kyoto_1.jpg" x="-640" y="-428" width="1280" height="856"/>
+ <g transform="rotate(10)">
+ <image xlink:href="images/kyoto_1.jpg" x="-640" y="-428" width="1280" height="856"/>
+ <g transform="rotate(10)">
+ <image xlink:href="images/kyoto_1.jpg" x="-640" y="-428" width="1280" height="856"/>
+ </g></g></g></g></g></g></g></g></g></g></g></g></g></g></g></g>
+</svg> \ No newline at end of file
diff --git a/testing/talos/talos/tests/svg_static/composite-scale.svg b/testing/talos/talos/tests/svg_static/composite-scale.svg
new file mode 100644
index 0000000000..0a73f58f07
--- /dev/null
+++ b/testing/talos/talos/tests/svg_static/composite-scale.svg
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+
+<svg
+ width="1024pt"
+ height="768pt"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:svg="http://www.w3.org/2000/svg">
+
+ <g transform="scale(0.5,0.5)">
+ <g transform="translate(0,0)">
+ <image xlink:href="images/kyoto_1.jpg" width="1280" height="856"/>
+ <g transform="translate(50,50)">
+ <image xlink:href="images/kyoto_1.jpg" width="1280" height="856"/>
+ <g transform="translate(50,50)">
+ <image xlink:href="images/kyoto_1.jpg" width="1280" height="856"/>
+ <g transform="translate(50,50)">
+ <image xlink:href="images/kyoto_1.jpg" width="1280" height="856"/>
+ <g transform="translate(50,50)">
+ <image xlink:href="images/kyoto_1.jpg" width="1280" height="856"/>
+ <g transform="translate(50,50)">
+ <image xlink:href="images/kyoto_1.jpg" width="1280" height="856"/>
+ <g transform="translate(50,50)">
+ <image xlink:href="images/kyoto_1.jpg" width="1280" height="856"/>
+ <g transform="translate(50,50)">
+ <image xlink:href="images/kyoto_1.jpg" width="1280" height="856"/>
+ <g transform="translate(50,50)">
+ <image xlink:href="images/kyoto_1.jpg" width="1280" height="856"/>
+ <g transform="translate(50,50)">
+ <image xlink:href="images/kyoto_1.jpg" width="1280" height="856"/>
+ <g transform="translate(50,50)">
+ <image xlink:href="images/kyoto_1.jpg" width="1280" height="856"/>
+ <g transform="translate(50,50)">
+ <image xlink:href="images/kyoto_1.jpg" width="1280" height="856"/>
+ <g transform="translate(50,50)">
+ <image xlink:href="images/kyoto_1.jpg" width="1280" height="856"/>
+ <g transform="translate(50,50)">
+ <image xlink:href="images/kyoto_1.jpg" width="1280" height="856"/>
+ <g transform="translate(50,50)">
+ <image xlink:href="images/kyoto_1.jpg" width="1280" height="856"/>
+ </g></g></g></g></g></g></g></g></g></g></g></g></g></g></g></g>
+</svg> \ No newline at end of file
diff --git a/testing/talos/talos/tests/svg_static/gearflowers.svg b/testing/talos/talos/tests/svg_static/gearflowers.svg
new file mode 100644
index 0000000000..038e202d28
--- /dev/null
+++ b/testing/talos/talos/tests/svg_static/gearflowers.svg
@@ -0,0 +1,8342 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
+"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ width="1024pt"
+ height="768pt"
+ id="svg1061"
+ sodipodi:version="0.32"
+ inkscape:version="0.40"
+ sodipodi:docbase="/home/xrostov/svg"
+ sodipodi:docname="gearflowers.svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ inkscape:export-filename="/home/xrostov/svg/kde/gearflowers.png"
+ inkscape:export-xdpi="72.000000"
+ inkscape:export-ydpi="72.000000">
+ <defs
+ id="defs3">
+ <linearGradient
+ id="linearGradient21439">
+ <stop
+ style="stop-color:#f1f1dd;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop21440" />
+ <stop
+ style="stop-color:#e8e8d5;stop-opacity:0.0000000;"
+ offset="1.0000000"
+ id="stop21441" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient18861">
+ <stop
+ style="stop-color:#9afd4e;stop-opacity:0.67843139;"
+ offset="0.0000000"
+ id="stop18862" />
+ <stop
+ style="stop-color:#d7dfd2;stop-opacity:0.043715846;"
+ offset="0.68571430"
+ id="stop18863" />
+ <stop
+ style="stop-color:#d7dfd2;stop-opacity:0.33152175;"
+ offset="0.93414968"
+ id="stop18865" />
+ <stop
+ style="stop-color:#d7dfd2;stop-opacity:0.078431375;"
+ offset="1.0000000"
+ id="stop18864" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient18234">
+ <stop
+ style="stop-color:#c5dad1;stop-opacity:0.80392158;"
+ offset="0.0000000"
+ id="stop18235" />
+ <stop
+ style="stop-color:#bfd7e2;stop-opacity:0.0000000;"
+ offset="1.0000000"
+ id="stop18236" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient16328">
+ <stop
+ style="stop-color:#aedced;stop-opacity:0.45405406;"
+ offset="0.0000000"
+ id="stop16329" />
+ <stop
+ style="stop-color:#59afd3;stop-opacity:0.49729729;"
+ offset="1.0000000"
+ id="stop16330" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient16323">
+ <stop
+ style="stop-color:#ecf3f6;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop16324" />
+ <stop
+ style="stop-color:#97ceed;stop-opacity:0.38043478;"
+ offset="1.0000000"
+ id="stop16325" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient16311">
+ <stop
+ style="stop-color:#5783c3;stop-opacity:1;"
+ offset="0"
+ id="stop16312" />
+ <stop
+ style="stop-color:#5783c3;stop-opacity:0;"
+ offset="1"
+ id="stop16313" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient16306">
+ <stop
+ style="stop-color:#3693ce;stop-opacity:0.0000000;"
+ offset="0.0000000"
+ id="stop16307" />
+ <stop
+ style="stop-color:#3693ce;stop-opacity:0.76502734;"
+ offset="0.50000000"
+ id="stop16310" />
+ <stop
+ style="stop-color:#3693ce;stop-opacity:0;"
+ offset="1.0000000"
+ id="stop16308" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient12484">
+ <stop
+ style="stop-color:#6cafd9;stop-opacity:0.40000001;"
+ offset="0.0000000"
+ id="stop12485" />
+ <stop
+ style="stop-color:#6cc4b2;stop-opacity:1.0000000;"
+ offset="0.39047620"
+ id="stop12488" />
+ <stop
+ style="stop-color:#6cce9e;stop-opacity:0.89411765;"
+ offset="0.58784580"
+ id="stop12489" />
+ <stop
+ style="stop-color:#88e8a3;stop-opacity:0.0000000;"
+ offset="1.0000000"
+ id="stop12486" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient11858">
+ <stop
+ style="stop-color:#7f88ec;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop11859" />
+ <stop
+ style="stop-color:#1d73ec;stop-opacity:0.0000000;"
+ offset="1.0000000"
+ id="stop11860" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient9363">
+ <stop
+ style="stop-color:#2f3fec;stop-opacity:0.58823532;"
+ offset="0.0000000"
+ id="stop9364" />
+ <stop
+ style="stop-color:#6974ec;stop-opacity:0.038043477;"
+ offset="1.0000000"
+ id="stop9365" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient8737">
+ <stop
+ style="stop-color:#3186ec;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop8738" />
+ <stop
+ style="stop-color:#73a4df;stop-opacity:0.11413044;"
+ offset="1.0000000"
+ id="stop8739" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient6847">
+ <stop
+ style="stop-color:#353b3d;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop6848" />
+ <stop
+ style="stop-color:#7f9bbe;stop-opacity:0.0000000;"
+ offset="1.0000000"
+ id="stop6849" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4134">
+ <stop
+ style="stop-color:#9afd4e;stop-opacity:0.67843139;"
+ offset="0.0000000"
+ id="stop4135" />
+ <stop
+ style="stop-color:#d7dfd2;stop-opacity:0.043715846;"
+ offset="0.68571430"
+ id="stop16958" />
+ <stop
+ style="stop-color:#d7dfd2;stop-opacity:0.55737704;"
+ offset="1.0000000"
+ id="stop4136" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3347">
+ <stop
+ style="stop-color:#e9e9d6;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop3348" />
+ <stop
+ style="stop-color:#ffffea;stop-opacity:0;"
+ offset="1"
+ id="stop3349" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2582">
+ <stop
+ style="stop-color:#3ba80c;stop-opacity:0.26630434;"
+ offset="0.0000000"
+ id="stop2583" />
+ <stop
+ style="stop-color:#076253;stop-opacity:0.0000000;"
+ offset="1.0000000"
+ id="stop2584" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient15803">
+ <stop
+ style="stop-color:#a4e019;stop-opacity:0.0000000;"
+ offset="0.0000000"
+ id="stop15804" />
+ <stop
+ style="stop-color:#b4e072;stop-opacity:0.88043481;"
+ offset="0.50000000"
+ id="stop15807" />
+ <stop
+ style="stop-color:#a5e078;stop-opacity:0;"
+ offset="1"
+ id="stop15805" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient14553">
+ <stop
+ style="stop-color:#e4e4df;stop-opacity:1;"
+ offset="0"
+ id="stop14554" />
+ <stop
+ style="stop-color:#e4e4df;stop-opacity:0;"
+ offset="1"
+ id="stop14555" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient13927">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop13928" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop13929" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient11439">
+ <stop
+ style="stop-color:#0d0ca8;stop-opacity:0.58039218;"
+ offset="0.0000000"
+ id="stop11440" />
+ <stop
+ style="stop-color:#075662;stop-opacity:0.0000000;"
+ offset="1.0000000"
+ id="stop11441" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient10815">
+ <stop
+ style="stop-color:#076232;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop10816" />
+ <stop
+ style="stop-color:#080762;stop-opacity:0;"
+ offset="1"
+ id="stop10817" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient10191">
+ <stop
+ style="stop-color:#038906;stop-opacity:0.46739131;"
+ offset="0.0000000"
+ id="stop10192" />
+ <stop
+ style="stop-color:#0b0a8d;stop-opacity:0.065217391;"
+ offset="1.0000000"
+ id="stop10193" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient9528">
+ <stop
+ style="stop-color:#080762;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop9529" />
+ <stop
+ style="stop-color:#080762;stop-opacity:0;"
+ offset="1"
+ id="stop9530" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient7645">
+ <stop
+ style="stop-color:#3693ce;stop-opacity:1;"
+ offset="0"
+ id="stop7646" />
+ <stop
+ style="stop-color:#3693ce;stop-opacity:0;"
+ offset="1"
+ id="stop7647" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient7625">
+ <stop
+ style="stop-color:#b4d4e8;stop-opacity:1;"
+ offset="0"
+ id="stop7626" />
+ <stop
+ style="stop-color:#b4d4e8;stop-opacity:0;"
+ offset="1"
+ id="stop7627" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient7618">
+ <stop
+ style="stop-color:#6cafdc;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop7619" />
+ <stop
+ style="stop-color:#6cafdc;stop-opacity:0;"
+ offset="1"
+ id="stop7620" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient6992">
+ <stop
+ style="stop-color:#6cafdc;stop-opacity:1;"
+ offset="0"
+ id="stop6993" />
+ <stop
+ style="stop-color:#6cafdc;stop-opacity:0;"
+ offset="1"
+ id="stop6994" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5124">
+ <stop
+ style="stop-color:#0f7cc4;stop-opacity:0.0000000;"
+ offset="0.0000000"
+ id="stop5125" />
+ <stop
+ style="stop-color:#3f7294;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop5126" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4493">
+ <stop
+ style="stop-color:#6cafdc;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop4494" />
+ <stop
+ style="stop-color:#5b94ba;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop4495" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3867">
+ <stop
+ style="stop-color:#2270c8;stop-opacity:0.63586956;"
+ offset="0.0000000"
+ id="stop3868" />
+ <stop
+ style="stop-color:#216bbe;stop-opacity:0.64313728;"
+ offset="0.42825395"
+ id="stop3870" />
+ <stop
+ style="stop-color:#0772eb;stop-opacity:0.53725493;"
+ offset="0.91768706"
+ id="stop3871" />
+ <stop
+ style="stop-color:#3d8feb;stop-opacity:0.77717394;"
+ offset="1.0000000"
+ id="stop3869" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3236">
+ <stop
+ style="stop-color:#b2d9ef;stop-opacity:1;"
+ offset="0"
+ id="stop3237" />
+ <stop
+ style="stop-color:#b2d9ef;stop-opacity:0;"
+ offset="1"
+ id="stop3238" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2610">
+ <stop
+ style="stop-color:#2984eb;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop2611" />
+ <stop
+ style="stop-color:#2984eb;stop-opacity:0;"
+ offset="1"
+ id="stop2612" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient32557">
+ <stop
+ style="stop-color:#d5e9d7;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop32558" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0.45108697;"
+ offset="1.0000000"
+ id="stop32559" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient31654">
+ <stop
+ style="stop-color:#9cf257;stop-opacity:1;"
+ offset="0"
+ id="stop31655" />
+ <stop
+ style="stop-color:#9cf257;stop-opacity:0;"
+ offset="1"
+ id="stop31656" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient29920">
+ <stop
+ style="stop-color:#86f721;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop29921" />
+ <stop
+ style="stop-color:#d8f2c1;stop-opacity:0;"
+ offset="1"
+ id="stop29922" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient29210">
+ <stop
+ style="stop-color:#ffffea;stop-opacity:1;"
+ offset="0"
+ id="stop29211" />
+ <stop
+ style="stop-color:#ffffea;stop-opacity:0;"
+ offset="1"
+ id="stop29212" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient29207">
+ <stop
+ style="stop-color:#eb552f;stop-opacity:0.77254903;"
+ offset="0.0000000"
+ id="stop29208" />
+ <stop
+ style="stop-color:#d64e2b;stop-opacity:0;"
+ offset="1"
+ id="stop29209" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient27896">
+ <stop
+ style="stop-color:#372820;stop-opacity:0.86956519;"
+ offset="0.0000000"
+ id="stop27897" />
+ <stop
+ style="stop-color:#0f0503;stop-opacity:0.0000000;"
+ offset="1.0000000"
+ id="stop27898" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient26575">
+ <stop
+ style="stop-color:#f45a30;stop-opacity:0.86956519;"
+ offset="0.0000000"
+ id="stop26576" />
+ <stop
+ style="stop-color:#d64e2b;stop-opacity:0.0000000;"
+ offset="1.0000000"
+ id="stop26577" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient24703">
+ <stop
+ style="stop-color:#aff274;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop24704" />
+ <stop
+ style="stop-color:#f1f2f0;stop-opacity:0.32608697;"
+ offset="1.0000000"
+ id="stop24705" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient22651">
+ <stop
+ style="stop-color:#1add6a;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop22652" />
+ <stop
+ style="stop-color:#1add6a;stop-opacity:0.54347825;"
+ offset="1.0000000"
+ id="stop22653" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient19525">
+ <stop
+ style="stop-color:#3de58d;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop19526" />
+ <stop
+ style="stop-color:#3de5c4;stop-opacity:0.49803922;"
+ offset="0.50000000"
+ id="stop19528" />
+ <stop
+ style="stop-color:#3de58d;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop19527" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient19517">
+ <stop
+ style="stop-color:#66e5a2;stop-opacity:1;"
+ offset="0"
+ id="stop19518" />
+ <stop
+ style="stop-color:#66e5a2;stop-opacity:0;"
+ offset="1"
+ id="stop19519" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient18127">
+ <stop
+ style="stop-color:#ce0329;stop-opacity:1;"
+ offset="0"
+ id="stop18128" />
+ <stop
+ style="stop-color:#ce0329;stop-opacity:0;"
+ offset="1"
+ id="stop18129" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient16187">
+ <stop
+ style="stop-color:#29e57b;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop16188" />
+ <stop
+ style="stop-color:#29e57b;stop-opacity:0.45652175;"
+ offset="1.0000000"
+ id="stop16189" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient16183">
+ <stop
+ style="stop-color:#29e59a;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop16184" />
+ <stop
+ style="stop-color:#29d3e5;stop-opacity:0.45652175;"
+ offset="1.0000000"
+ id="stop16185" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient16179">
+ <stop
+ style="stop-color:#29e582;stop-opacity:1;"
+ offset="0"
+ id="stop16180" />
+ <stop
+ style="stop-color:#29e582;stop-opacity:0;"
+ offset="1"
+ id="stop16181" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient16170">
+ <stop
+ style="stop-color:#29e58e;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop16171" />
+ <stop
+ style="stop-color:#45a2e5;stop-opacity:0.94565219;"
+ offset="0.50000000"
+ id="stop16174" />
+ <stop
+ style="stop-color:#29e58e;stop-opacity:0.99456519;"
+ offset="1.0000000"
+ id="stop16172" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient11111">
+ <stop
+ style="stop-color:#5794d8;stop-opacity:1;"
+ offset="0"
+ id="stop11112" />
+ <stop
+ style="stop-color:#5794d8;stop-opacity:0;"
+ offset="1"
+ id="stop11113" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient11099">
+ <stop
+ style="stop-color:#589eea;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop11100" />
+ <stop
+ style="stop-color:#79afea;stop-opacity:0;"
+ offset="1"
+ id="stop11101" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient11083">
+ <stop
+ style="stop-color:#a7b5ea;stop-opacity:0.043478262;"
+ offset="0.0000000"
+ id="stop11084" />
+ <stop
+ style="stop-color:#5146ea;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop11085" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient4818">
+ <stop
+ style="stop-color:#e9390d;stop-opacity:1;"
+ offset="0"
+ id="stop4819" />
+ <stop
+ style="stop-color:#e9390d;stop-opacity:0;"
+ offset="1"
+ id="stop4820" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4190">
+ <stop
+ style="stop-color:#86ed18;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop4191" />
+ <stop
+ style="stop-color:#bcecbf;stop-opacity:0.0000000;"
+ offset="1.0000000"
+ id="stop4192" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3564">
+ <stop
+ style="stop-color:#000000;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop3565" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop3566" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient1695">
+ <stop
+ style="stop-color:#b17b1b;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop1696" />
+ <stop
+ style="stop-color:#583d0d;stop-opacity:1.0000000;"
+ offset="0.50000000"
+ id="stop1699" />
+ <stop
+ style="stop-color:#c7922e;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop1697" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1695"
+ id="linearGradient1698"
+ gradientTransform="scale(1.666753,0.599969)"
+ x1="306.40466"
+ y1="742.39771"
+ x2="288.73209"
+ y2="703.21155"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3564"
+ id="linearGradient3567"
+ gradientTransform="scale(1.081233,0.924870)"
+ x1="499.80753"
+ y1="435.86755"
+ x2="550.16528"
+ y2="495.51517"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4190"
+ id="linearGradient4193"
+ gradientTransform="scale(1.040888,0.960718)"
+ x1="709.13391"
+ y1="445.11514"
+ x2="525.49945"
+ y2="652.39642"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4818"
+ id="linearGradient4821"
+ gradientTransform="matrix(1.310266,0.000000,0.000000,0.857544,-19.69210,-35.84892)"
+ x1="442.46298"
+ y1="540.10565"
+ x2="485.50449"
+ y2="578.96753"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11083"
+ id="radialGradient11086"
+ gradientTransform="scale(0.980331,1.020064)"
+ cx="433.95916"
+ cy="440.16448"
+ fx="433.95916"
+ fy="440.16448"
+ r="149.47448"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11099"
+ id="radialGradient11102"
+ gradientTransform="scale(1.077813,0.927805)"
+ cx="407.24873"
+ cy="602.51922"
+ fx="407.24873"
+ fy="602.51922"
+ r="25.687024"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11111"
+ id="radialGradient11114"
+ gradientTransform="scale(1.060653,0.942816)"
+ cx="482.54009"
+ cy="581.81309"
+ fx="482.54009"
+ fy="581.81309"
+ r="27.273221"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient16170"
+ id="linearGradient16173"
+ gradientTransform="scale(1.266827,0.789374)"
+ x1="338.52740"
+ y1="497.77591"
+ x2="397.40027"
+ y2="626.40479"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient16170"
+ id="linearGradient16178"
+ gradientTransform="scale(0.876284,1.141182)"
+ x1="457.80389"
+ y1="352.55243"
+ x2="507.93503"
+ y2="370.55652"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient16179"
+ id="linearGradient16182"
+ gradientTransform="scale(0.754458,1.325456)"
+ x1="439.42288"
+ y1="318.50616"
+ x2="555.40745"
+ y2="318.50616"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient16183"
+ id="radialGradient16186"
+ gradientTransform="scale(0.970016,1.030911)"
+ cx="424.20871"
+ cy="485.59210"
+ fx="424.20871"
+ fy="485.59210"
+ r="34.210431"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient16187"
+ id="radialGradient16191"
+ gradientTransform="scale(1.503775,0.664993)"
+ cx="301.35504"
+ cy="785.52722"
+ fx="301.35504"
+ fy="785.52722"
+ r="51.984039"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient18127"
+ id="linearGradient18130"
+ gradientTransform="scale(1.279830,0.781354)"
+ x1="448.08412"
+ y1="529.98144"
+ x2="463.89505"
+ y2="529.98144"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11083"
+ id="radialGradient18810"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(0.980331,1.020064)"
+ cx="433.95916"
+ cy="440.16448"
+ fx="433.95916"
+ fy="440.16448"
+ r="149.47448" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11111"
+ id="radialGradient18811"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.060653,0.942816)"
+ cx="482.54009"
+ cy="581.81309"
+ fx="482.54009"
+ fy="581.81309"
+ r="27.273221" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11099"
+ id="radialGradient18812"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.077813,0.927805)"
+ cx="407.24873"
+ cy="602.51922"
+ fx="407.24873"
+ fy="602.51922"
+ r="25.687024" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11083"
+ id="radialGradient18829"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(0.980331,1.020064)"
+ cx="433.95916"
+ cy="440.16448"
+ fx="433.95916"
+ fy="440.16448"
+ r="149.47448" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11111"
+ id="radialGradient18830"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.060653,0.942816)"
+ cx="482.54009"
+ cy="581.81309"
+ fx="482.54009"
+ fy="581.81309"
+ r="27.273221" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11099"
+ id="radialGradient18831"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.077813,0.927805)"
+ cx="407.24873"
+ cy="602.51922"
+ fx="407.24873"
+ fy="602.51922"
+ r="25.687024" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11083"
+ id="radialGradient18844"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(0.980331,1.020064)"
+ cx="433.95916"
+ cy="440.16448"
+ fx="433.95916"
+ fy="440.16448"
+ r="149.47448" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11111"
+ id="radialGradient18845"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.060653,0.942816)"
+ cx="482.54009"
+ cy="581.81309"
+ fx="482.54009"
+ fy="581.81309"
+ r="27.273221" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11099"
+ id="radialGradient18846"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.077813,0.927805)"
+ cx="407.24873"
+ cy="602.51922"
+ fx="407.24873"
+ fy="602.51922"
+ r="25.687024" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11083"
+ id="radialGradient18858"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(0.980331,1.020064)"
+ cx="433.95916"
+ cy="440.16448"
+ fx="433.95916"
+ fy="440.16448"
+ r="149.47448" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11111"
+ id="radialGradient18859"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.060653,0.942816)"
+ cx="482.54009"
+ cy="581.81309"
+ fx="482.54009"
+ fy="581.81309"
+ r="27.273221" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11099"
+ id="radialGradient18860"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.077813,0.927805)"
+ cx="407.24873"
+ cy="602.51922"
+ fx="407.24873"
+ fy="602.51922"
+ r="25.687024" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11083"
+ id="radialGradient18872"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(0.980331,1.020064)"
+ cx="433.95916"
+ cy="440.16448"
+ fx="433.95916"
+ fy="440.16448"
+ r="149.47448" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11111"
+ id="radialGradient18873"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.060653,0.942816)"
+ cx="482.54009"
+ cy="581.81309"
+ fx="482.54009"
+ fy="581.81309"
+ r="27.273221" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11099"
+ id="radialGradient18874"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.077813,0.927805)"
+ cx="407.24873"
+ cy="602.51922"
+ fx="407.24873"
+ fy="602.51922"
+ r="25.687024" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient19517"
+ id="linearGradient19520"
+ gradientTransform="scale(1.214521,0.823370)"
+ x1="169.38230"
+ y1="829.35319"
+ x2="354.75676"
+ y2="829.35319"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient19525"
+ id="linearGradient19524"
+ gradientTransform="scale(1.077049,0.928463)"
+ x1="214.43430"
+ y1="925.64703"
+ x2="314.95380"
+ y2="797.13611"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient16183"
+ id="linearGradient20153"
+ gradientTransform="scale(0.959947,1.041724)"
+ x1="123.61769"
+ y1="762.71704"
+ x2="297.13574"
+ y2="762.71704"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient16170"
+ id="linearGradient20778"
+ gradientTransform="scale(1.127960,0.886557)"
+ x1="100.04546"
+ y1="810.50677"
+ x2="140.80148"
+ y2="896.01904"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient16179"
+ id="linearGradient21403"
+ gradientTransform="scale(1.042594,0.959147)"
+ x1="60.617191"
+ y1="689.21771"
+ x2="213.33556"
+ y2="689.21771"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient16170"
+ id="radialGradient22029"
+ gradientTransform="scale(0.851142,1.174892)"
+ cx="235.80563"
+ cy="607.92432"
+ fx="235.80563"
+ fy="607.92432"
+ r="154.82706"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient22651"
+ id="linearGradient22654"
+ gradientTransform="scale(0.876829,1.140474)"
+ x1="239.28758"
+ y1="552.20875"
+ x2="410.63165"
+ y2="552.20875"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient16170"
+ id="linearGradient22753"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(0.876284,1.141182)"
+ x1="457.80389"
+ y1="352.55243"
+ x2="507.93503"
+ y2="370.55652" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient16170"
+ id="linearGradient22754"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.266827,0.789374)"
+ x1="338.52740"
+ y1="497.77591"
+ x2="397.40027"
+ y2="626.40479" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient16179"
+ id="linearGradient22755"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(0.754458,1.325456)"
+ x1="439.42288"
+ y1="318.50616"
+ x2="555.40745"
+ y2="318.50616" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient16187"
+ id="radialGradient22756"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.503775,0.664993)"
+ cx="301.35504"
+ cy="785.52722"
+ fx="301.35504"
+ fy="785.52722"
+ r="51.984039" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient16183"
+ id="radialGradient22757"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(0.970016,1.030911)"
+ cx="424.20871"
+ cy="485.59210"
+ fx="424.20871"
+ fy="485.59210"
+ r="34.210431" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient16170"
+ id="linearGradient22768"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(0.876284,1.141182)"
+ x1="457.80389"
+ y1="352.55243"
+ x2="507.93503"
+ y2="370.55652" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient16170"
+ id="linearGradient22769"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.266827,0.789374)"
+ x1="338.52740"
+ y1="497.77591"
+ x2="397.40027"
+ y2="626.40479" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient16179"
+ id="linearGradient22770"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(0.754458,1.325456)"
+ x1="439.42288"
+ y1="318.50616"
+ x2="555.40745"
+ y2="318.50616" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient16187"
+ id="radialGradient22771"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.503775,0.664993)"
+ cx="301.35504"
+ cy="785.52722"
+ fx="301.35504"
+ fy="785.52722"
+ r="51.984039" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient16183"
+ id="radialGradient22772"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(0.970016,1.030911)"
+ cx="424.20871"
+ cy="485.59210"
+ fx="424.20871"
+ fy="485.59210"
+ r="34.210431" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient22651"
+ id="linearGradient22796"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.747936,-0.263564,0.253248,0.812886,-66.00252,-522.2351)"
+ x1="239.28758"
+ y1="552.20875"
+ x2="410.63165"
+ y2="552.20875" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient19517"
+ id="linearGradient22797"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.035987,-0.365071,0.182835,0.586866,-66.00252,-522.2351)"
+ x1="169.38230"
+ y1="829.35319"
+ x2="354.75676"
+ y2="829.35319" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient19525"
+ id="linearGradient22798"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.780840,-0.608176,0.387303,0.562453,-192.5983,-395.8742)"
+ x1="214.43430"
+ y1="925.64703"
+ x2="314.95380"
+ y2="797.13611" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient16170"
+ id="radialGradient22799"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.726024,-0.255844,0.260891,0.837418,-66.00252,-522.2351)"
+ cx="235.80563"
+ cy="607.92432"
+ fx="235.80563"
+ fy="607.92432"
+ r="154.82706" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient16179"
+ id="linearGradient22800"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.889333,-0.313391,0.212986,0.683642,-66.00252,-522.2351)"
+ x1="60.617191"
+ y1="689.21771"
+ x2="213.33556"
+ y2="689.21771" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient16170"
+ id="linearGradient22801"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.917392,0.641787,-0.539887,0.559882,577.3328,-620.4757)"
+ x1="100.04546"
+ y1="810.50677"
+ x2="140.80148"
+ y2="896.01904" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient16183"
+ id="linearGradient22802"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-0.837713,0.196357,-5.692751e-2,-0.547806,526.2861,312.8796)"
+ x1="123.61769"
+ y1="762.71704"
+ x2="297.13574"
+ y2="762.71704" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient16170"
+ id="linearGradient22812"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(0.876284,1.141182)"
+ x1="457.80389"
+ y1="352.55243"
+ x2="507.93503"
+ y2="370.55652" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient16170"
+ id="linearGradient22813"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.266827,0.789374)"
+ x1="338.52740"
+ y1="497.77591"
+ x2="397.40027"
+ y2="626.40479" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient16179"
+ id="linearGradient22814"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(0.754458,1.325456)"
+ x1="439.42288"
+ y1="318.50616"
+ x2="555.40745"
+ y2="318.50616" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient16187"
+ id="radialGradient22815"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.503775,0.664993)"
+ cx="301.35504"
+ cy="785.52722"
+ fx="301.35504"
+ fy="785.52722"
+ r="51.984039" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient16183"
+ id="radialGradient22816"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.437602,-0.617552,0.407925,1.560044,-389.8963,-14.17233)"
+ cx="424.20871"
+ cy="485.59210"
+ fx="424.20871"
+ fy="485.59210"
+ r="34.210431" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient24703"
+ id="linearGradient24706"
+ gradientTransform="scale(0.883761,1.131527)"
+ x1="721.40253"
+ y1="415.81317"
+ x2="850.33508"
+ y2="369.74554"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient26575"
+ id="linearGradient27206"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987894,0.000000,0.000000,1.012254,-20.78082,-22.33888)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient26575"
+ id="linearGradient27208"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987894,0.000000,0.000000,1.012254,-14.32887,-25.06855)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient26575"
+ id="linearGradient27210"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987894,0.000000,0.000000,1.012254,-17.55484,-15.39063)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient26575"
+ id="linearGradient27212"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987894,0.000000,0.000000,1.012254,-9.117686,-18.12030)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient26575"
+ id="linearGradient27214"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987894,0.000000,0.000000,1.012254,-3.410197,-23.57964)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient26575"
+ id="linearGradient27216"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987894,0.000000,0.000000,1.012254,-0.432377,-14.89433)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient26575"
+ id="linearGradient27218"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987894,0.000000,0.000000,1.012254,-8.621383,-10.67575)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient26575"
+ id="linearGradient27222"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987894,0.000000,0.000000,1.012254,-12.59181,-6.209019)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient26575"
+ id="linearGradient27224"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987894,0.000000,0.000000,1.012254,3.289898,-20.35366)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient26575"
+ id="linearGradient27226"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987894,0.000000,0.000000,1.012254,5.275111,-13.65357)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient26575"
+ id="linearGradient27228"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987894,0.000000,0.000000,1.012254,0.560229,-7.449777)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient26575"
+ id="linearGradient27230"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987894,0.000000,0.000000,1.012254,-5.395411,-3.231199)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient26575"
+ id="linearGradient27232"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987894,0.000000,0.000000,1.012254,-3.162046,2.724441)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient26575"
+ id="linearGradient27234"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987894,0.000000,0.000000,1.012254,3.289898,-5.227275e-3)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient26575"
+ id="linearGradient27236"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987894,0.000000,0.000000,1.012254,6.515870,-4.968261)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient26575"
+ id="linearGradient27238"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987894,0.000000,0.000000,1.012254,11.97521,-11.17205)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient26575"
+ id="linearGradient27240"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987894,0.000000,0.000000,1.012254,19.41976,-8.442384)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient26575"
+ id="linearGradient27242"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987894,0.000000,0.000000,1.012254,15.44933,-4.223806)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient26575"
+ id="linearGradient27244"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987894,0.000000,0.000000,1.012254,7.260325,0.987379)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient26575"
+ id="linearGradient27246"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987894,0.000000,0.000000,1.012254,1.552836,7.191171)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient26575"
+ id="linearGradient27248"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987894,0.000000,0.000000,1.012254,5.523263,13.64311)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient26575"
+ id="linearGradient27252"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987894,0.000000,0.000000,1.012254,11.72705,7.935626)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient26575"
+ id="linearGradient27254"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987894,0.000000,0.000000,1.012254,15.69748,1.979986)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient26575"
+ id="linearGradient27256"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987894,0.000000,0.000000,1.012254,21.40497,-2.238592)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient26575"
+ id="linearGradient27258"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987894,0.000000,0.000000,1.012254,30.09028,-5.960867)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient26575"
+ id="linearGradient27260"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987894,0.000000,0.000000,1.012254,36.54222,-6.209019)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient26575"
+ id="linearGradient27262"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987894,0.000000,0.000000,1.012254,24.83506,0.530754)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient26575"
+ id="linearGradient27264"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987894,0.000000,0.000000,1.012254,18.18634,8.643387)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient26575"
+ id="linearGradient27266"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987894,0.000000,0.000000,1.012254,16.92058,19.75586)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient26575"
+ id="linearGradient27268"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987894,0.000000,0.000000,1.012254,6.800716,19.31391)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient26575"
+ id="linearGradient27272"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.937251,-0.312243,0.319943,0.960362,-73.56507,191.5260)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient27896"
+ id="linearGradient27274"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.427858,-0.890434,0.912390,0.438408,-112.3984,741.8942)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient27896"
+ id="linearGradient27900"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.427858,-0.890434,0.912390,0.438408,-105.0254,734.8160)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient27896"
+ id="linearGradient27902"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.427858,-0.890434,0.912390,0.438408,-100.0624,741.0198)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient27896"
+ id="linearGradient27904"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.427858,-0.890434,0.912390,0.438408,-103.7847,743.9976)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient27896"
+ id="linearGradient27906"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.427858,-0.890434,0.912390,0.438408,-93.36228,743.9976)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient27896"
+ id="linearGradient27908"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.427858,-0.890434,0.912390,0.438408,-91.15093,735.9951)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient27896"
+ id="linearGradient27910"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.427858,-0.890434,0.912390,0.438408,-95.84380,730.3493)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient27896"
+ id="linearGradient27912"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.514186,-1.072342,1.096482,0.527971,-219.3567,791.6351)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient27896"
+ id="linearGradient27914"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.427858,-0.890434,0.912390,0.438408,-80.63751,724.2292)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient27896"
+ id="linearGradient27916"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.664584,-0.730933,0.748956,0.680972,-151.2493,542.3806)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient27896"
+ id="linearGradient27918"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.889151,-0.430517,0.441133,0.911076,-136.0881,269.0064)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient27896"
+ id="linearGradient27920"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.427858,-0.890434,0.912390,0.438408,-73.26199,724.6418)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient27896"
+ id="linearGradient27922"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.427858,-0.890434,0.912390,0.438408,-76.48797,745.7347)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient27896"
+ id="linearGradient27924"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.427858,-0.890434,0.912390,0.438408,-71.77309,755.1644)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient27896"
+ id="linearGradient27926"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.427858,-0.890434,0.912390,0.438408,-68.29896,748.4643)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient27896"
+ id="linearGradient27928"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.427858,-0.890434,0.912390,0.438408,-66.56190,741.7642)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient27896"
+ id="linearGradient27930"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.427858,-0.890434,0.912390,0.438408,-62.59148,733.0789)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient27896"
+ id="linearGradient27932"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.427858,-0.890434,0.912390,0.438408,-65.56930,727.6196)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient27896"
+ id="linearGradient27934"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.793371,-0.588640,0.603155,0.812934,-128.8736,388.4537)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient27896"
+ id="linearGradient27936"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.018401,-0.517302,0.507610,1.089658,-220.2464,232.2565)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient27896"
+ id="linearGradient27938"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.943971,-0.550652,0.583011,0.936086,-211.4401,331.5020)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient27896"
+ id="linearGradient27940"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.427858,-0.890434,0.912390,0.438408,-66.06560,759.3830)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient27896"
+ id="linearGradient27942"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.427858,-0.890434,0.912390,0.438408,-57.87659,764.5942)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient27896"
+ id="linearGradient27944"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.427858,-0.890434,0.912390,0.438408,-51.92095,759.1348)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient27896"
+ id="linearGradient27946"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.427858,-0.890434,0.912390,0.438408,-50.54511,749.7667)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient27896"
+ id="linearGradient27948"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.427858,-0.890434,0.912390,0.438408,-50.35567,743.5233)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient27896"
+ id="linearGradient27950"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.801512,-0.577507,0.591747,0.821275,-119.8147,382.4496)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient27896"
+ id="linearGradient27952"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.982115,-0.551060,0.779595,0.728869,-306.3692,421.7354)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient27896"
+ id="linearGradient27954"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.029952,-0.715437,1.108330,0.698035,-478.7668,522.2340)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient27896"
+ id="linearGradient27956"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.012317,-0.268694,0.615328,0.970025,-252.5294,156.2318)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient27896"
+ id="linearGradient27958"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.427858,-0.890434,0.912390,0.438408,-49.43944,765.3386)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient26575"
+ id="linearGradient27960"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.778543,-0.725499,0.863160,0.687046,-256.7091,527.2207)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient29213"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,-30.78662,6.259520)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient29217"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,-20.18376,-5.109815)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient29219"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,-15.32944,-13.15777)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient29221"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,2.810396,-40.87850)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient29223"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,7.920208,-49.43744)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient29225"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,12.77453,-39.47330)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient29227"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,15.71267,-44.83861)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient29229"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,6.131774,-30.40339)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient29231"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,-2.043926,-22.35543)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient29233"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,-10.98610,-18.39533)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient29235"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,-29.25368,14.05198)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient29237"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,-23.50514,19.92827)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient29239"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,-20.82249,14.17973)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient29241"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,-22.09994,9.453150)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient29243"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,-17.24562,23.63288)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient29245"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,-12.26355,19.80052)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient29247"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,-23.50514,4.726573)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient29249"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,-15.71267,29.25367)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient29251"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,-7.664719,34.49123)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient29253"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,-7.025993,25.80455)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient29255"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,-8.666743e-7,36.66290)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient29257"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,-0.638727,30.53113)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient29259"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,-17.50111,1.660686)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient29261"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,-12.64679,-4.982070)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient29263"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,-6.131776,-13.15777)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient29265"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,9.580897,-41.77272)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient29267"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,7.536972,-21.07798)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient29269"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,7.281482,-11.36934)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient29275"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.868395,0.253674,1.568375,1.457824,-1180.288,-292.0646)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient29277"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.868395,0.253674,1.568375,1.457824,-1186.676,-298.8351)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient29279"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.868395,0.253674,1.568375,1.457824,-1181.310,-302.7952)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient29281"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.827425,0.464507,1.392413,1.626726,-1066.229,-520.6123)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient29283"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.835781,0.430301,1.422547,1.600440,-1079.567,-494.5802)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient29285"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.834396,0.436167,1.417424,1.604980,-1083.711,-510.0830)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient29287"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.868395,0.253674,1.568375,1.457824,-1180.799,-314.0368)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient29289"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.868395,0.253674,1.568375,1.457824,-1193.829,-311.3542)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient29291"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.810800,0.525597,1.337014,1.672556,-1035.630,-591.5112)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient29293"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.868395,0.253674,1.568375,1.457824,-1200.600,-306.2444)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient29295"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.868395,0.253674,1.568375,1.457824,-1208.265,-297.0467)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient29296"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.849689,0.365927,1.477572,1.549785,-1140.632,-404.9573)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient29923"
+ gradientTransform="scale(0.987575,1.012581)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient29925"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,-13.90681,-18.79995)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient29927"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,-15.96708,-32.19169)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient29929"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,-16.73968,-36.82729)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient29931"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,-4.635605,-39.66016)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient29933"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,4.635603,-32.96429)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient29935"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,16.48215,-27.04102)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient29937"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,26.52596,-23.95062)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient29939"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,36.82730,-17.51228)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient29941"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,-11.07394,-3.347932)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient29943"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,-5.665740,-15.19448)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient29945"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,-2.575337,-26.26842)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient29947"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,-14.67941,7.468477)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient29949"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,-6.438340,16.22462)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient29951"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,43.26564,-12.87667)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient29953"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,58.20258,1.802739)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient29955"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,39.91770,9.528745)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient29957"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,16.73968,-3.863000)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient29959"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,7.726005,19.57255)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient29961"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,22.40542,19.57255)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient29963"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,38.11497,16.48215)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient29965"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,56.39985,16.73969)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient29967"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,63.35325,19.05749)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient29969"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,1.802733,20.60269)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient29971"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,-13.39175,14.67942)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient29973"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,12.61914,15.19448)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient29975"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,9.013673,5.665742)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient29977"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,7.210938,-10.55887)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient29979"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,32.19169,3.347940)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient29981"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,18.54241,5.665742)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient29983"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,-0.772602,7.468477)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient29985"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,3.090401,-5.665735)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient29987"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,4.893136,-15.96708)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient29989"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,29.87389,9.271212)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient29991"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,53.05191,12.36161)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient29993"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,43.78070,12.10408)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient29995"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,27.55609,16.48215)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient29997"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,79.06280,13.90682)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient29999"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,41.72043,-18.79995)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient30001"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,16.22461,-32.19169)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient30003"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,-14.42188,-7.468469)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient30005"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,-20.34515,-8.498604)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient30007"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,-20.08762,-16.99721)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient30009"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,-18.54242,5.150675)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient30011"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,10.30134,14.93695)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient30013"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,18.79995,20.86022)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient30015"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,46.35604,16.22462)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient30017"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,-1.030136,-6.953402)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient30019"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,-20.08762,-0.515063)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient30021"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,-11.33148,-52.53684)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient30023"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,-17.51228,-44.03823)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29920"
+ id="linearGradient30025"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,-20.08762,-21.11775)"
+ x1="658.40747"
+ y1="488.13486"
+ x2="651.27698"
+ y2="479.61664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient31654"
+ id="linearGradient31657"
+ gradientTransform="matrix(1.209609,0.000000,0.000000,0.826714,-10.30134,-1.030134)"
+ x1="540.32678"
+ y1="526.11975"
+ x2="530.11053"
+ y2="529.01123"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient31654"
+ id="linearGradient31659"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.209609,0.000000,0.000000,0.826714,0.212737,5.649845)"
+ x1="540.32678"
+ y1="526.11975"
+ x2="530.11053"
+ y2="529.01123" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient31654"
+ id="linearGradient31661"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.209609,0.000000,0.000000,0.826714,0.470271,-4.393963)"
+ x1="540.32678"
+ y1="526.11975"
+ x2="530.11053"
+ y2="529.01123" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient31654"
+ id="linearGradient31663"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.209609,0.000000,0.000000,0.826714,3.818207,-13.15010)"
+ x1="540.32678"
+ y1="526.11975"
+ x2="530.11053"
+ y2="529.01123" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient31654"
+ id="linearGradient31665"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.209609,0.000000,0.000000,0.826714,-2.362598,-8.772034)"
+ x1="540.32678"
+ y1="526.11975"
+ x2="530.11053"
+ y2="529.01123" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient31654"
+ id="linearGradient31667"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.209609,0.000000,0.000000,0.826714,2.273006,10.80052)"
+ x1="540.32678"
+ y1="526.11975"
+ x2="530.11053"
+ y2="529.01123" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient31654"
+ id="linearGradient31669"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.209609,0.000000,0.000000,0.826714,13.86202,4.362178)"
+ x1="540.32678"
+ y1="526.11975"
+ x2="530.11053"
+ y2="529.01123" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient31654"
+ id="linearGradient31671"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.209609,0.000000,0.000000,0.826714,10.51408,-5.681631)"
+ x1="540.32678"
+ y1="526.11975"
+ x2="530.11053"
+ y2="529.01123" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient31654"
+ id="linearGradient31673"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.209609,0.000000,0.000000,0.826714,9.483946,-20.61858)"
+ x1="540.32678"
+ y1="526.11975"
+ x2="530.11053"
+ y2="529.01123" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient31654"
+ id="linearGradient31675"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.165816,-0.322530,0.220435,0.796784,-79.17957,158.6984)"
+ x1="540.32678"
+ y1="526.11975"
+ x2="530.11053"
+ y2="529.01123" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient31654"
+ id="linearGradient31677"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.106319,-0.489092,0.334273,0.756120,-101.1416,259.2760)"
+ x1="540.32678"
+ y1="526.11975"
+ x2="530.11053"
+ y2="529.01123" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient31654"
+ id="linearGradient31679"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.086990,-0.530666,0.362687,0.742909,-97.84456,279.0446)"
+ x1="540.32678"
+ y1="526.11975"
+ x2="530.11053"
+ y2="529.01123" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient31654"
+ id="linearGradient31681"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.209609,0.000000,0.000000,0.826714,19.27022,-23.96651)"
+ x1="540.32678"
+ y1="526.11975"
+ x2="530.11053"
+ y2="529.01123" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient31654"
+ id="linearGradient31683"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.209609,0.000000,0.000000,0.826714,25.96609,-34.26786)"
+ x1="540.32678"
+ y1="526.11975"
+ x2="530.11053"
+ y2="529.01123" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient31654"
+ id="linearGradient31685"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.209609,0.000000,0.000000,0.826714,32.14690,-44.82673)"
+ x1="540.32678"
+ y1="526.11975"
+ x2="530.11053"
+ y2="529.01123" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient31654"
+ id="linearGradient31687"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.209609,0.000000,0.000000,0.826714,17.72502,-14.43777)"
+ x1="540.32678"
+ y1="526.11975"
+ x2="530.11053"
+ y2="529.01123" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient31654"
+ id="linearGradient31691"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.209609,0.000000,0.000000,0.826714,17.46749,-4.393963)"
+ x1="540.32678"
+ y1="526.11975"
+ x2="530.11053"
+ y2="529.01123" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient31654"
+ id="linearGradient31693"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.209609,0.000000,0.000000,0.826714,12.83188,11.57312)"
+ x1="540.32678"
+ y1="526.11975"
+ x2="530.11053"
+ y2="529.01123" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient31654"
+ id="linearGradient31695"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.209609,0.000000,0.000000,0.826714,7.681211,19.81419)"
+ x1="540.32678"
+ y1="526.11975"
+ x2="530.11053"
+ y2="529.01123" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient31654"
+ id="linearGradient31697"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.155385,-0.358105,0.244749,0.789654,-65.34849,152.4549)"
+ x1="540.32678"
+ y1="526.11975"
+ x2="530.11053"
+ y2="529.01123" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient31654"
+ id="linearGradient31699"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.126128,-0.441576,0.301798,0.769659,-73.70026,200.3496)"
+ x1="540.32678"
+ y1="526.11975"
+ x2="530.11053"
+ y2="529.01123" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient31654"
+ id="linearGradient31701"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.209609,0.000000,0.000000,0.826714,37.55510,-54.09794)"
+ x1="540.32678"
+ y1="526.11975"
+ x2="530.11053"
+ y2="529.01123" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient32557"
+ id="linearGradient32560"
+ gradientTransform="scale(1.040271,0.961288)"
+ x1="738.24438"
+ y1="359.04068"
+ x2="647.64850"
+ y2="320.38120"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient32557"
+ id="linearGradient32562"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.151955,6.641592e-2,-6.348944e-2,1.050832,-55.76705,-72.55543)"
+ x1="738.24438"
+ y1="359.04068"
+ x2="647.64850"
+ y2="320.38120" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient32557"
+ id="linearGradient32564"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.037713,7.290470e-2,-6.736938e-2,0.958924,27.83212,-39.51157)"
+ x1="738.24438"
+ y1="359.04068"
+ x2="647.64850"
+ y2="320.38120" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient32557"
+ id="linearGradient32566"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.736493,0.734671,-0.678891,0.680574,411.7452,-302.0044)"
+ x1="738.24438"
+ y1="359.04068"
+ x2="647.64850"
+ y2="320.38120" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient32557"
+ id="linearGradient32568"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.760880,0.709384,-0.655523,0.703110,392.2087,-298.3966)"
+ x1="738.24438"
+ y1="359.04068"
+ x2="647.64850"
+ y2="320.38120" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient32557"
+ id="linearGradient32570"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.579637,0.718025,-0.510932,0.695579,458.4489,-287.7201)"
+ x1="738.24438"
+ y1="359.04068"
+ x2="647.64850"
+ y2="320.38120" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient32557"
+ id="linearGradient32574"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.096088,0.173147,-0.158543,1.003640,20.15197,-118.5459)"
+ x1="738.24438"
+ y1="359.04068"
+ x2="647.64850"
+ y2="320.38120" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient32557"
+ id="linearGradient32576"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.103483,0.183541,-0.163918,1.055082,13.52824,-132.0046)"
+ x1="738.24438"
+ y1="359.04068"
+ x2="647.64850"
+ y2="320.38120" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient32557"
+ id="linearGradient32578"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.103483,0.183541,-0.163918,1.055082,10.21400,-121.9192)"
+ x1="738.24438"
+ y1="359.04068"
+ x2="647.64850"
+ y2="320.38120" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient32557"
+ id="linearGradient32580"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.103483,0.183541,-0.163918,1.055082,9.183869,-116.5110)"
+ x1="738.24438"
+ y1="359.04068"
+ x2="647.64850"
+ y2="320.38120" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient32557"
+ id="linearGradient32582"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.103483,0.183541,-0.163918,1.055082,7.896201,-110.8452)"
+ x1="738.24438"
+ y1="359.04068"
+ x2="647.64850"
+ y2="320.38120" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient32557"
+ id="linearGradient32584"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.103483,0.183541,-0.163918,1.055082,5.835933,-104.6644)"
+ x1="738.24438"
+ y1="359.04068"
+ x2="647.64850"
+ y2="320.38120" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient32557"
+ id="linearGradient32586"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.076966,0.302499,-0.277727,1.030987,62.26978,-174.7270)"
+ x1="738.24438"
+ y1="359.04068"
+ x2="647.64850"
+ y2="320.38120" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient32557"
+ id="linearGradient32588"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.075455,0.307829,-0.282829,1.029599,61.54302,-169.6520)"
+ x1="738.24438"
+ y1="359.04068"
+ x2="647.64850"
+ y2="320.38120" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient32557"
+ id="linearGradient32590"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.067558,0.334189,-0.308069,1.022331,74.27139,-176.6682)"
+ x1="738.24438"
+ y1="359.04068"
+ x2="647.64850"
+ y2="320.38120" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient32557"
+ id="linearGradient32592"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.866614,0.491835,-0.396058,0.963964,247.6981,-259.7047)"
+ x1="738.24438"
+ y1="359.04068"
+ x2="647.64850"
+ y2="320.38120" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient32557"
+ id="linearGradient32594"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.698720,0.621119,-0.438090,0.894314,376.2831,-317.1018)"
+ x1="738.24438"
+ y1="359.04068"
+ x2="647.64850"
+ y2="320.38120" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient32557"
+ id="linearGradient32596"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.535772,0.827273,-0.556347,0.727119,527.9138,-395.5688)"
+ x1="738.24438"
+ y1="359.04068"
+ x2="647.64850"
+ y2="320.38120" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient31654"
+ id="linearGradient33239"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.165816,-0.322530,0.220435,0.796784,-102.1224,200.1346)"
+ x1="540.32678"
+ y1="526.11975"
+ x2="530.11053"
+ y2="529.01123" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient31654"
+ id="linearGradient33241"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.165816,-0.322530,0.220435,0.796784,-108.3032,197.3017)"
+ x1="540.32678"
+ y1="526.11975"
+ x2="530.11053"
+ y2="529.01123" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient31654"
+ id="linearGradient33243"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.165816,-0.322530,0.220435,0.796784,-99.28952,209.9209)"
+ x1="540.32678"
+ y1="526.11975"
+ x2="530.11053"
+ y2="529.01123" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient31654"
+ id="linearGradient33245"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.165816,-0.322530,0.220435,0.796784,-90.53337,208.3757)"
+ x1="540.32678"
+ y1="526.11975"
+ x2="530.11053"
+ y2="529.01123" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient31654"
+ id="linearGradient33247"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.165816,-0.322530,0.220435,0.796784,-87.95804,216.6167)"
+ x1="540.32678"
+ y1="526.11975"
+ x2="530.11053"
+ y2="529.01123" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient24703"
+ id="linearGradient34091"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(0.722156,1.384742)"
+ x1="851.38702"
+ y1="329.09396"
+ x2="911.94794"
+ y2="265.80905" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient32557"
+ id="linearGradient34092"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.040271,7.911964e-17,1.809314e-16,0.961288,-1.281484,0.497022)"
+ x1="738.24438"
+ y1="359.04068"
+ x2="647.64850"
+ y2="320.38120" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient32557"
+ id="linearGradient34093"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.926831,-0.167631,-0.230108,0.835203,162.6202,168.4452)"
+ x1="738.24438"
+ y1="359.04068"
+ x2="647.64850"
+ y2="320.38120" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient32557"
+ id="linearGradient34094"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.037713,7.290470e-2,-6.736938e-2,0.958924,27.83212,-39.51157)"
+ x1="738.24438"
+ y1="359.04068"
+ x2="647.64850"
+ y2="320.38120" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient32557"
+ id="linearGradient34095"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.736493,0.734671,-0.678891,0.680574,411.7452,-302.0044)"
+ x1="738.24438"
+ y1="359.04068"
+ x2="647.64850"
+ y2="320.38120" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient32557"
+ id="linearGradient34096"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.760880,0.709384,-0.655523,0.703110,392.2087,-298.3966)"
+ x1="738.24438"
+ y1="359.04068"
+ x2="647.64850"
+ y2="320.38120" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient32557"
+ id="linearGradient34097"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.579637,0.718025,-0.510932,0.695579,458.4489,-287.7201)"
+ x1="738.24438"
+ y1="359.04068"
+ x2="647.64850"
+ y2="320.38120" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient32557"
+ id="linearGradient34098"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.430658,0.729845,-0.325078,0.682599,500.6209,-283.1892)"
+ x1="738.24438"
+ y1="359.04068"
+ x2="647.64850"
+ y2="320.38120" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient32557"
+ id="linearGradient34099"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.096088,0.173147,-0.158543,1.003640,20.15197,-118.5459)"
+ x1="738.24438"
+ y1="359.04068"
+ x2="647.64850"
+ y2="320.38120" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient32557"
+ id="linearGradient34100"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.103483,0.183541,-0.163918,1.055082,13.52824,-132.0046)"
+ x1="738.24438"
+ y1="359.04068"
+ x2="647.64850"
+ y2="320.38120" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient32557"
+ id="linearGradient34101"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.103483,0.183541,-0.163918,1.055082,10.21400,-121.9192)"
+ x1="738.24438"
+ y1="359.04068"
+ x2="647.64850"
+ y2="320.38120" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient32557"
+ id="linearGradient34102"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.103483,0.183541,-0.163918,1.055082,9.183869,-116.5110)"
+ x1="738.24438"
+ y1="359.04068"
+ x2="647.64850"
+ y2="320.38120" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient32557"
+ id="linearGradient34103"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.103483,0.183541,-0.163918,1.055082,7.896201,-110.8452)"
+ x1="738.24438"
+ y1="359.04068"
+ x2="647.64850"
+ y2="320.38120" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient32557"
+ id="linearGradient34104"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.103483,0.183541,-0.163918,1.055082,5.835933,-104.6644)"
+ x1="738.24438"
+ y1="359.04068"
+ x2="647.64850"
+ y2="320.38120" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient32557"
+ id="linearGradient34105"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.076966,0.302499,-0.277727,1.030987,62.26978,-174.7270)"
+ x1="738.24438"
+ y1="359.04068"
+ x2="647.64850"
+ y2="320.38120" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient32557"
+ id="linearGradient34106"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.075455,0.307829,-0.282829,1.029599,61.54302,-169.6520)"
+ x1="738.24438"
+ y1="359.04068"
+ x2="647.64850"
+ y2="320.38120" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient32557"
+ id="linearGradient34107"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.067558,0.334189,-0.308069,1.022331,74.27139,-176.6682)"
+ x1="738.24438"
+ y1="359.04068"
+ x2="647.64850"
+ y2="320.38120" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient32557"
+ id="linearGradient34108"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.866614,0.491835,-0.396058,0.963964,247.6981,-259.7047)"
+ x1="738.24438"
+ y1="359.04068"
+ x2="647.64850"
+ y2="320.38120" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient32557"
+ id="linearGradient34109"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.698720,0.621119,-0.438090,0.894314,376.2831,-317.1018)"
+ x1="738.24438"
+ y1="359.04068"
+ x2="647.64850"
+ y2="320.38120" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient32557"
+ id="linearGradient34110"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.535772,0.827273,-0.556347,0.727119,527.9138,-395.5688)"
+ x1="738.24438"
+ y1="359.04068"
+ x2="647.64850"
+ y2="320.38120" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient31654"
+ id="linearGradient34111"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.295010,-0.932235,0.586346,0.219093,148.0222,793.0125)"
+ x1="540.32678"
+ y1="526.11975"
+ x2="530.11053"
+ y2="529.01123" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient31654"
+ id="linearGradient34112"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.295010,-0.932235,0.586346,0.219093,138.1218,782.1221)"
+ x1="540.32678"
+ y1="526.11975"
+ x2="530.11053"
+ y2="529.01123" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient31654"
+ id="linearGradient34113"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.295010,-0.932235,0.586346,0.219093,135.8943,773.9543)"
+ x1="540.32678"
+ y1="526.11975"
+ x2="530.11053"
+ y2="529.01123" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient31654"
+ id="linearGradient34114"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.295010,-0.932235,0.586346,0.219093,140.7517,791.5754)"
+ x1="540.32678"
+ y1="526.11975"
+ x2="530.11053"
+ y2="529.01123" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient31654"
+ id="linearGradient34115"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.295010,-0.932235,0.586346,0.219093,139.3594,774.2018)"
+ x1="540.32678"
+ y1="526.11975"
+ x2="530.11053"
+ y2="529.01123" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient31654"
+ id="linearGradient34116"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.295010,-0.932235,0.586346,0.219093,145.2996,783.6071)"
+ x1="540.32678"
+ y1="526.11975"
+ x2="530.11053"
+ y2="529.01123" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient31654"
+ id="linearGradient34117"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.295010,-0.932235,0.586346,0.219093,135.3992,766.0340)"
+ x1="540.32678"
+ y1="526.11975"
+ x2="530.11053"
+ y2="529.01123" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient31654"
+ id="linearGradient34118"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.295010,-0.932235,0.586346,0.219093,150.0023,796.7251)"
+ x1="540.32678"
+ y1="526.11975"
+ x2="530.11053"
+ y2="529.01123" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient32557"
+ id="linearGradient35362"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.590873,1.001364,-0.446015,0.936542,0.000000,0.000000)"
+ x1="863.26630"
+ y1="-404.22238"
+ x2="842.65424"
+ y2="-416.36603" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2610"
+ id="linearGradient2613"
+ gradientTransform="matrix(1.724864,0.000000,0.000000,0.579756,13.46278,356.2460)"
+ x1="419.98212"
+ y1="900.96655"
+ x2="152.85609"
+ y2="70.039268"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3236"
+ id="linearGradient3239"
+ gradientTransform="matrix(2.010612,0.000000,0.000000,0.497361,17.60518,365.5664)"
+ x1="223.00340"
+ y1="-113.55350"
+ x2="733.91034"
+ y2="1418.3474"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3867"
+ id="linearGradient3245"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.724864,0.000000,0.000000,0.579756,-15.53398,409.0615)"
+ x1="-0.70458949"
+ y1="458.81543"
+ x2="739.60657"
+ y2="451.16016" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4493"
+ id="linearGradient4496"
+ gradientTransform="scale(0.999428,1.000572)"
+ x1="522.64154"
+ y1="522.35547"
+ x2="522.27380"
+ y2="599.56842"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5124"
+ id="linearGradient4502"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.999428,0.000000,0.000000,1.000572,-1.496982,0.224547)"
+ x1="525.23193"
+ y1="523.95349"
+ x2="523.71497"
+ y2="599.02582" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6992"
+ id="radialGradient6995"
+ gradientTransform="scale(0.517306,1.933091)"
+ cx="1051.1016"
+ cy="290.64341"
+ fx="1051.1016"
+ fy="290.64341"
+ r="9.6218940"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7625"
+ id="radialGradient7628"
+ gradientTransform="scale(3.370999,0.296648)"
+ cx="296.57391"
+ cy="1382.4457"
+ fx="296.57391"
+ fy="1382.4457"
+ r="9.2981535"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7625"
+ id="radialGradient7630"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(3.370999,0.296648)"
+ cx="296.57391"
+ cy="1382.4457"
+ fx="296.57391"
+ fy="1382.4457"
+ r="9.2981535" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7625"
+ id="radialGradient7632"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(3.370999,0.296648)"
+ cx="296.57391"
+ cy="1382.4457"
+ fx="296.57391"
+ fy="1382.4457"
+ r="9.2981535" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7625"
+ id="radialGradient7634"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(3.370999,0.296648)"
+ cx="296.57391"
+ cy="1382.4457"
+ fx="296.57391"
+ fy="1382.4457"
+ r="9.2981535" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7625"
+ id="radialGradient7636"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(3.370999,0.296648)"
+ cx="296.57391"
+ cy="1382.4457"
+ fx="296.57391"
+ fy="1382.4457"
+ r="9.2981535" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7625"
+ id="radialGradient7638"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(3.370999,0.296648)"
+ cx="296.57391"
+ cy="1382.4457"
+ fx="296.57391"
+ fy="1382.4457"
+ r="9.2981535" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7625"
+ id="radialGradient7640"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(3.370999,0.296648)"
+ cx="296.57391"
+ cy="1382.4457"
+ fx="296.57391"
+ fy="1382.4457"
+ r="9.2981535" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7625"
+ id="radialGradient7642"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(3.370999,0.296648)"
+ cx="296.57391"
+ cy="1382.4457"
+ fx="296.57391"
+ fy="1382.4457"
+ r="9.2981535" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7645"
+ id="linearGradient7648"
+ gradientTransform="scale(0.587795,1.701274)"
+ x1="1794.5216"
+ y1="133.68471"
+ x2="1794.5216"
+ y2="328.50177"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9528"
+ id="linearGradient9547"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.381130,0.000000,0.000000,0.724045,15.53398,-1.035599)"
+ x1="20.132007"
+ y1="272.79824"
+ x2="542.98260"
+ y2="272.79824" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10191"
+ id="linearGradient9551"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.381130,0.724045)"
+ x1="247.66397"
+ y1="426.46765"
+ x2="371.05960"
+ y2="61.155201" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10815"
+ id="linearGradient9559"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.381130,9.707052e-17,3.558063e-17,0.724045,15.53398,-1.035599)"
+ x1="20.132008"
+ y1="272.79825"
+ x2="542.98260"
+ y2="272.79825" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient13927"
+ id="radialGradient13930"
+ gradientTransform="scale(1.069850,0.934711)"
+ cx="560.18524"
+ cy="479.57709"
+ fx="560.60718"
+ fy="479.09290"
+ r="49.800396"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient14553"
+ id="radialGradient14558"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.540400,0.000000,0.000000,0.649182,-5.916122,-4.022963)"
+ cx="423.37262"
+ cy="842.77686"
+ fx="423.37262"
+ fy="842.77686"
+ r="62.536392" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient15803"
+ id="linearGradient15806"
+ gradientTransform="scale(1.234394,0.810114)"
+ x1="303.45883"
+ y1="196.89500"
+ x2="732.64819"
+ y2="795.76660"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2582"
+ id="linearGradient1956"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.381130,1.122787e-16,8.625309e-17,0.724045,15.53398,-1.035599)"
+ x1="20.132008"
+ y1="272.79825"
+ x2="542.98260"
+ y2="272.79825" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2582"
+ id="linearGradient2588"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.381130,2.068785e-16,1.105491e-16,0.724045,15.53398,-1.035599)"
+ x1="20.132008"
+ y1="272.79825"
+ x2="542.98260"
+ y2="272.79825" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2582"
+ id="linearGradient2592"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.381130,1.214036e-16,1.326668e-16,0.724045,15.53398,-1.035599)"
+ x1="20.132008"
+ y1="272.79825"
+ x2="542.98260"
+ y2="272.79825" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient2596"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.810800,0.525597,1.337014,1.672556,-1026.028,-565.4414)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient2598"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.810800,0.525597,1.337014,1.672556,-1040.135,-559.3741)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient2600"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.810800,0.525597,1.337014,1.672556,-1021.781,-572.1156)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient2602"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.810800,0.525597,1.337014,1.672556,-1012.225,-572.1156)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient2604"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.810800,0.525597,1.337014,1.672556,-1052.724,-558.1606)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient2606"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.810800,0.525597,1.337014,1.672556,-1021.477,-566.9583)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient2719"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,1.766951,42.53737)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient2721"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,9.502860,46.02611)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient29210"
+ id="linearGradient2723"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,22.54773,46.93622)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3347"
+ id="linearGradient2725"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,30.73869,52.85191)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3347"
+ id="linearGradient3351"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,16.63203,49.21148)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3347"
+ id="linearGradient3353"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,34.53080,56.79570)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3347"
+ id="linearGradient3355"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,41.50829,59.52603)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3347"
+ id="linearGradient3357"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,43.32850,54.21707)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3347"
+ id="linearGradient3359"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,35.74428,47.54295)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3347"
+ id="linearGradient3361"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,51.06441,58.61592)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3347"
+ id="linearGradient3363"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,56.37337,67.26193)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3347"
+ id="linearGradient3365"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,45.75546,62.86308)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3347"
+ id="linearGradient3367"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,24.51963,51.18338)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3347"
+ id="linearGradient3369"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,51.97452,49.21148)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3347"
+ id="linearGradient3371"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,70.78340,48.14969)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3347"
+ id="linearGradient3373"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,80.79458,46.48116)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3347"
+ id="linearGradient3375"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,95.81134,47.54295)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3347"
+ id="linearGradient3377"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,60.46885,47.08790)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3347"
+ id="linearGradient3379"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,65.62613,57.40244)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3347"
+ id="linearGradient3381"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,60.16548,54.52044)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3347"
+ id="linearGradient3383"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,53.18800,60.58782)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3347"
+ id="linearGradient3385"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,47.12062,54.21707)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3347"
+ id="linearGradient3387"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,44.84535,49.36316)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3347"
+ id="linearGradient3389"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,73.05867,64.53161)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3347"
+ id="linearGradient3391"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,96.26639,71.66079)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3347"
+ id="linearGradient3393"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,109.3113,62.71140)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3347"
+ id="linearGradient3395"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,83.82827,61.34624)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3347"
+ id="linearGradient3397"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,84.58669,38.44188)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3347"
+ id="linearGradient3399"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,70.02498,37.22840)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3347"
+ id="linearGradient3401"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,95.50797,39.80704)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3347"
+ id="linearGradient3403"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,105.5191,45.11600)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3347"
+ id="linearGradient3405"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,53.03631,38.13851)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3347"
+ id="linearGradient3407"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,27.70500,41.47557)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3347"
+ id="linearGradient3409"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,13.75003,40.11041)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3347"
+ id="linearGradient3411"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,64.86770,68.02036)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3347"
+ id="linearGradient3413"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,78.97436,73.17763)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3347"
+ id="linearGradient3415"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,68.96318,21.30153)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3347"
+ id="linearGradient3417"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,40.59818,6.284765)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3347"
+ id="linearGradient3419"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,64.10928,2.189284)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4134"
+ id="radialGradient4143"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(0.987734,1.012418)"
+ cx="651.55780"
+ cy="477.82614"
+ fx="651.55780"
+ fy="477.82614"
+ r="195.36795" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6847"
+ id="linearGradient6858"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(1.381402,0.723902)"
+ x1="31.486246"
+ y1="271.42126"
+ x2="554.00787"
+ y2="271.42126" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient27896"
+ id="linearGradient6864"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.012317,-0.268694,0.615328,0.970025,-318.7249,148.5209)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8737"
+ id="radialGradient8740"
+ gradientTransform="scale(2.154316,0.464185)"
+ cx="347.72696"
+ cy="1018.0652"
+ fx="347.72696"
+ fy="1018.0652"
+ r="80.600567"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9363"
+ id="radialGradient9366"
+ gradientTransform="scale(1.470760,0.679921)"
+ cx="393.44842"
+ cy="729.92766"
+ fx="393.44842"
+ fy="729.92766"
+ r="97.868379"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8737"
+ id="radialGradient11231"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.154316,-1.020908,0.000000,0.464185,-359.4387,434.7816)"
+ cx="347.72696"
+ cy="1018.0652"
+ fx="347.72696"
+ fy="1018.0652"
+ r="80.600567" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8737"
+ id="radialGradient11233"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.154316,-1.020908,0.000000,0.464185,-630.8869,578.0072)"
+ cx="347.72696"
+ cy="1018.0652"
+ fx="347.72696"
+ fy="1018.0652"
+ r="80.600567" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8737"
+ id="radialGradient11235"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.154316,0.000000,0.000000,0.464185,228.3615,58.97665)"
+ cx="347.72696"
+ cy="1018.0652"
+ fx="347.72696"
+ fy="1018.0652"
+ r="80.600567" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11858"
+ id="radialGradient11861"
+ gradientTransform="scale(1.431356,0.698638)"
+ cx="640.29669"
+ cy="715.48064"
+ fx="640.29669"
+ fy="715.48064"
+ r="27.752797"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient12484"
+ id="linearGradient12491"
+ gradientTransform="scale(1.149762,0.869745)"
+ x1="875.55115"
+ y1="493.48654"
+ x2="807.70654"
+ y2="428.66379"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient12484"
+ id="linearGradient12493"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.011473,0.546695,-0.413551,0.765135,0.000000,0.000000)"
+ x1="1023.0687"
+ y1="-241.42816"
+ x2="999.95947"
+ y2="-327.93689" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient16306"
+ id="linearGradient16309"
+ gradientTransform="scale(1.165421,0.858059)"
+ x1="945.26428"
+ y1="601.43610"
+ x2="955.62598"
+ y2="610.90717"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient16311"
+ id="radialGradient16314"
+ gradientTransform="scale(0.807042,1.239092)"
+ cx="1427.3757"
+ cy="391.50178"
+ fx="1427.3757"
+ fy="391.50178"
+ r="36.047479"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient16323"
+ id="radialGradient16326"
+ gradientTransform="scale(0.952880,1.049450)"
+ cx="1145.5621"
+ cy="483.00604"
+ fx="1145.5621"
+ fy="483.00604"
+ r="26.520229"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient16328"
+ id="linearGradient16331"
+ gradientTransform="scale(0.591090,1.691790)"
+ x1="1882.3138"
+ y1="295.38058"
+ x2="1882.3138"
+ y2="265.39999"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient16328"
+ id="linearGradient16336"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.591090,0.000000,0.000000,1.691790,-13.69300,10.69440)"
+ x1="1882.3138"
+ y1="295.38058"
+ x2="1882.3138"
+ y2="265.39999" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4134"
+ id="radialGradient17593"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987734,0.000000,0.000000,1.012418,11.44915,17.40954)"
+ cx="651.55780"
+ cy="477.82614"
+ fx="651.55780"
+ fy="477.82614"
+ r="195.36795" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4134"
+ id="radialGradient17603"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987734,0.000000,0.000000,1.012418,9.558439,35.31861)"
+ cx="651.55780"
+ cy="477.82614"
+ fx="651.55780"
+ fy="477.82614"
+ r="195.36795" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4134"
+ id="radialGradient17605"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987734,0.000000,0.000000,1.012418,3.917300,54.12240)"
+ cx="651.55780"
+ cy="477.82614"
+ fx="651.55780"
+ fy="477.82614"
+ r="195.36795" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient18861"
+ id="radialGradient17607"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987734,0.000000,0.000000,1.012418,12.36990,12.27472)"
+ cx="659.99554"
+ cy="413.55933"
+ fx="659.99554"
+ fy="413.55933"
+ r="103.70863" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient18861"
+ id="radialGradient17609"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987734,0.000000,0.000000,1.012418,15.26705,31.50123)"
+ cx="659.99554"
+ cy="413.55933"
+ fx="659.99554"
+ fy="413.55933"
+ r="103.70863" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient18861"
+ id="radialGradient17610"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987734,0.000000,0.000000,1.012418,-1.580261,-0.263377)"
+ cx="659.99554"
+ cy="413.55933"
+ fx="659.99554"
+ fy="413.55933"
+ r="103.70863" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient18234"
+ id="radialGradient18237"
+ gradientTransform="scale(0.593526,1.684847)"
+ cx="1118.4713"
+ cy="205.08790"
+ fx="1118.4713"
+ fy="205.08790"
+ r="20.634364"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient18234"
+ id="radialGradient18239"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="scale(0.593526,1.684847)"
+ cx="1118.4713"
+ cy="205.08790"
+ fx="1118.4713"
+ fy="205.08790"
+ r="20.634364" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient27896"
+ id="linearGradient20109"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.752220,-0.640391,0.656181,0.770768,-124.5753,439.8346)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient27896"
+ id="linearGradient20113"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.752220,-0.640391,0.656181,0.770768,-135.3115,437.5400)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient27896"
+ id="linearGradient20115"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.973413,-0.168531,0.172686,0.997415,-59.56658,51.19465)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient27896"
+ id="linearGradient20117"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.752220,-0.640391,0.656181,0.770768,-141.3692,433.5893)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient27896"
+ id="linearGradient20119"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.752220,-0.640391,0.656181,0.770768,-133.2045,435.1695)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient27896"
+ id="linearGradient20121"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.752220,-0.640391,0.656181,0.770768,-131.0974,445.1778)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient27896"
+ id="linearGradient20127"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.752220,-0.640391,0.656181,0.770768,-115.8216,446.2313)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient27896"
+ id="linearGradient20129"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.752220,-0.640391,0.656181,0.770768,-106.0766,454.1326)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4818"
+ id="linearGradient20139"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987437,-3.005222e-2,3.079281e-2,1.011785,-12.99311,29.54724)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4818"
+ id="linearGradient20766"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987437,-3.005222e-2,3.079281e-2,1.011785,-15.51716,22.97124)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4818"
+ id="linearGradient20770"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987437,-3.005222e-2,3.079281e-2,1.011785,-22.62834,15.06993)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4818"
+ id="linearGradient20772"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987437,-3.005222e-2,3.079281e-2,1.011785,-19.46781,20.07409)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4818"
+ id="linearGradient20774"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987437,-3.005222e-2,3.079281e-2,1.011785,-28.94938,6.115120)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4818"
+ id="linearGradient20776"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.840119,-0.519744,0.532560,0.860835,-180.9311,344.6393)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4818"
+ id="linearGradient20779"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987437,-3.005222e-2,3.079281e-2,1.011785,-36.32393,-4.156579)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4818"
+ id="linearGradient20781"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987437,-3.005222e-2,3.079281e-2,1.011785,-10.77638,8.222131)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4818"
+ id="linearGradient20783"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987437,-3.005222e-2,3.079281e-2,1.011785,10.29378,7.432000)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4818"
+ id="linearGradient20785"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987437,-3.005222e-2,3.079281e-2,1.011785,-10.24962,32.97956)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4818"
+ id="linearGradient20787"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987437,-3.005222e-2,3.079281e-2,1.011785,1.075584,14.80655)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4818"
+ id="linearGradient20789"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987437,-3.005222e-2,3.079281e-2,1.011785,13.19092,27.71202)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4818"
+ id="linearGradient20791"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987437,-3.005222e-2,3.079281e-2,1.011785,-23.41847,5.324989)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4818"
+ id="linearGradient20793"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987437,-3.005222e-2,3.079281e-2,1.011785,-2.348316,25.86839)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4818"
+ id="linearGradient20795"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987437,-3.005222e-2,3.079281e-2,1.011785,24.77950,16.38681)"
+ x1="584.57037"
+ y1="453.69092"
+ x2="580.25800"
+ y2="445.05798" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient20817"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,-3.414257,37.30035)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21443"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,-11.84231,30.71593)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21445"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,-18.69011,25.71177)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21447"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,-34.49273,3.324736)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21449"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,-31.06883,7.802143)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21451"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,60.32295,64.16480)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21453"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,49.26112,61.26765)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21455"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,42.67670,57.31700)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21457"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,45.31047,50.20582)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21459"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,56.89905,54.41985)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21461"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,61.63984,43.09465)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21463"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,74.80868,72.32948)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21465"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,69.80452,70.22246)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21467"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,62.69335,65.48168)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21469"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,87.18740,77.07026)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21471"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,105.3604,75.22662)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21473"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,107.9942,58.63388)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21475"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,97.45909,55.73674)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21477"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,82.97337,59.95077)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21479"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,87.18740,51.52271)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21481"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,97.98585,77.59702)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21483"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,110.8913,77.59702)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21485"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,116.4222,74.43649)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21487"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,124.8503,64.95493)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21489"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,123.7968,60.47752)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21491"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,115.3687,56.52687)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21493"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,113.2617,69.16896)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21495"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,102.1999,53.89310)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21497"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,119.5828,69.95909)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21499"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,100.0929,83.91806)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21501"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,83.23674,76.54351)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21503"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,50.84139,65.21830)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21505"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,59.26945,64.69155)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21507"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,25.29383,53.10297)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21509"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,15.81226,49.41569)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21511"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,6.857446,45.72841)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21513"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,0.799778,42.83127)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21515"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,12.38836,34.40321)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21517"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,21.34317,35.98347)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21519"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,40.83306,39.67075)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21521"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,61.90321,38.35386)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21523"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,75.33544,43.35802)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21525"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,76.91570,54.68323)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21527"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,90.08454,47.83543)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21529"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,95.87883,51.52271)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21531"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,82.44661,11.48942)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21533"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,100.6196,28.60892)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21535"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,16.07564,-12.21450)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21539"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,110.1012,54.94660)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21541"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,93.50844,81.02092)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21543"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,101.4097,84.97157)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21545"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,75.59881,73.64636)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient21439"
+ id="linearGradient21547"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.987575,0.000000,0.000000,1.012581,19.23616,50.46920)"
+ x1="629.39368"
+ y1="471.64603"
+ x2="624.75055"
+ y2="465.35226" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient12484"
+ id="linearGradient21629"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-0.796302,-0.829371,0.627383,-0.602368,0.000000,0.000000)"
+ x1="-691.15564"
+ y1="30.686178"
+ x2="-754.20099"
+ y2="2.5523021" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#afafaf"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.078431373"
+ inkscape:pageshadow="2"
+ inkscape:zoom="11.240968"
+ inkscape:cx="447.05866"
+ inkscape:cy="294.43435"
+ inkscape:current-layer="layer2"
+ inkscape:window-width="1333"
+ inkscape:window-height="1112"
+ inkscape:window-x="0"
+ inkscape:window-y="31" />
+ <metadata
+ id="metadata4">
+ <rdf:RDF
+ id="RDF5">
+ <cc:Work
+ rdf:about=""
+ id="Work6">
+ <dc:format
+ id="format7">image/svg+xml</dc:format>
+ <dc:type
+ id="type9"
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title
+ id="title1820">Gearflowers</dc:title>
+ <dc:date
+ id="date1822">January 8, 2004</dc:date>
+ <dc:creator
+ id="creator1824">
+ <cc:Agent
+ id="Agent1825">
+ <dc:title
+ id="title1826">Alexandre Rostovtsev</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <dc:description
+ id="description1828">Wallpaper design for the KDE SVG contest. Also, hummingbirds are cool.</dc:description>
+ <cc:license
+ id="license1830"
+ rdf:resource="http://creativecommons.org/licenses/LGPL/2.1/" />
+ <dc:subject
+ id="subject1838">
+ <rdf:Bag
+ id="Bag1839">
+ <rdf:li
+ id="li1974">gear</rdf:li>
+ <rdf:li
+ id="li1976">flower</rdf:li>
+ <rdf:li
+ id="li1978">hummingbird</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ <dc:rights
+ id="rights4497">
+ <cc:Agent
+ id="Agent4498">
+ <dc:title
+ id="title4499">Alexandre Rostovtsev</dc:title>
+ </cc:Agent>
+ </dc:rights>
+ </cc:Work>
+ <cc:License
+ rdf:about="http://creativecommons.org/licenses/LGPL/2.1/"
+ id="License21621">
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/Reproduction"
+ id="permits21622" />
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/Distribution"
+ id="permits21623" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/Notice"
+ id="requires21624" />
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/DerivativeWorks"
+ id="permits21625" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/ShareAlike"
+ id="requires21626" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/SourceCode"
+ id="requires21627" />
+ </cc:License>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:groupmode="layer"
+ id="layer5"
+ inkscape:label="Background">
+ <path
+ style="fill:url(#linearGradient15806);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;"
+ d="M -6.2135922,331.39159 C 462.91262,273.39806 657.60518,-4.1423948 657.60518,-4.1423948 L 1286.2136,-5.1779935 C 1286.2136,-5.1779935 1285.1780,312.75081 1287.2492,457.73463 C 1168.1553,501.22977 1142.2654,764.27184 1034.5631,824.33657 C 926.86084,884.40129 668.99676,796.37540 532.29773,773.59223 C 395.59871,750.80906 -8.2847896,816.05178 -8.2847896,816.05178 L -6.2135922,331.39159 z "
+ id="path15180"
+ sodipodi:nodetypes="cccccccc" />
+ <g
+ id="Leaf"
+ transform="translate(501.6423,196.3455)">
+ <path
+ style="fill:url(#linearGradient9547);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 43.495157,164.66019 C 276.50486,388.34951 338.64079,376.95793 423.55988,385.24272 C 508.47898,393.52751 694.88669,258.89967 724.91909,252.68608 C 754.95149,246.47249 752.88029,251.65048 765.30749,256.82848 C 748.73789,210.22653 666.92559,97.346281 611.00319,62.135921 C 555.08089,26.925563 404.91910,-13.462777 280.64726,19.676373 C 198.83496,38.317153 115.98706,135.66343 43.495157,164.66019 z "
+ id="path8898"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:#080762;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 449.21875,12.343750 C 372.55367,131.34626 351.03163,190.15459 345.31250,234.71875 C 296.43407,228.74167 250.88253,220.20102 210.06250,211.18750 C 210.18144,159.47011 307.03125,15.562500 307.03125,15.562500 C 231.73758,132.43627 211.35292,167.53740 205.28125,210.12500 C 111.44954,189.10115 46.625000,165.87500 46.625000,165.87500 C 95.278072,186.13432 149.62093,202.52998 204.53125,215.34375 C 205.73417,244.61892 210.49875,254.89076 234.81250,324.93750 C 212.11540,236.98624 209.34258,255.80079 209.75000,216.50000 C 255.62272,227.00430 301.69759,235.02520 345.12500,240.43750 C 346.64554,269.96362 353.89092,311.29960 377.53125,379.40625 C 355.00622,292.12181 351.03030,281.31222 351.31250,241.25000 C 399.42652,247.01704 443.95673,249.65958 480.81250,249.21875 C 482.09933,277.29978 486.10250,295.38014 509.81250,363.68750 C 486.91509,274.96003 484.85720,289.97427 485.34375,249.09375 C 521.11851,248.40068 549.34122,244.76072 565.71875,238.12500 C 576.82659,233.17150 593.20091,230.91691 611.78125,230.34375 C 609.02322,239.26769 604.15131,267.42325 620.50000,307.75000 C 605.49195,257.72323 612.64130,247.27739 614.87500,230.31250 C 668.07068,229.21004 737.88540,241.30570 757.40625,245.12500 C 735.98732,234.66460 664.92792,227.25580 615.21875,228.21875 C 615.22870,228.11904 615.24045,228.03777 615.25000,227.93750 C 616.41525,215.70752 675.84375,123.06250 675.84375,123.06250 C 614.59722,216.66570 616.91444,216.32105 612.43750,228.21875 C 605.01927,228.41116 598.05690,228.77061 591.93750,229.37500 C 561.08150,232.42251 544.14471,244.86783 485.50000,246.00000 C 481.12067,196.29050 582.62500,47.906250 582.62500,47.906250 C 504.83281,168.65828 486.07119,201.47841 480.75000,246.09375 C 450.57954,246.34478 409.84371,243.69470 351.53125,235.56250 C 347.17084,177.77103 449.21875,12.343750 449.21875,12.343750 z "
+ id="path9535"
+ sodipodi:nodetypes="cccccccccccccccccccccccccccccc" />
+ </g>
+ <g
+ id="g9552"
+ transform="matrix(0.463805,0.606522,-0.472462,0.595409,611.4504,236.7744)"
+ style="fill-opacity:1.0;fill:url(#linearGradient6858);">
+ <path
+ style="fill:url(#linearGradient6858);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;"
+ d="M 43.495157,164.66019 C 276.50486,388.34951 338.64079,376.95793 423.55988,385.24272 C 508.47898,393.52751 694.88669,258.89967 724.91909,252.68608 C 754.95149,246.47249 752.88029,251.65048 765.30749,256.82848 C 748.73789,210.22653 666.92559,97.346281 611.00319,62.135921 C 555.08089,26.925563 404.91910,-13.462777 280.64726,19.676373 C 198.83496,38.317153 115.98706,135.66343 43.495157,164.66019 z "
+ id="path9553"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:url(#linearGradient6858);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;"
+ d="M 449.21875,12.343750 C 372.55367,131.34626 351.03163,190.15459 345.31250,234.71875 C 296.43407,228.74167 250.88253,220.20102 210.06250,211.18750 C 210.18144,159.47011 307.03125,15.562500 307.03125,15.562500 C 231.73758,132.43627 211.35292,167.53740 205.28125,210.12500 C 111.44954,189.10115 46.625000,165.87500 46.625000,165.87500 C 95.278072,186.13432 149.62093,202.52998 204.53125,215.34375 C 205.73417,244.61892 210.49875,254.89076 234.81250,324.93750 C 212.11540,236.98624 209.34258,255.80079 209.75000,216.50000 C 255.62272,227.00430 301.69759,235.02520 345.12500,240.43750 C 346.64554,269.96362 353.89092,311.29960 377.53125,379.40625 C 355.00622,292.12181 351.03030,281.31222 351.31250,241.25000 C 399.42652,247.01704 443.95673,249.65958 480.81250,249.21875 C 482.09933,277.29978 486.10250,295.38014 509.81250,363.68750 C 486.91509,274.96003 484.85720,289.97427 485.34375,249.09375 C 521.11851,248.40068 549.34122,244.76072 565.71875,238.12500 C 576.82659,233.17150 593.20091,230.91691 611.78125,230.34375 C 609.02322,239.26769 604.15131,267.42325 620.50000,307.75000 C 605.49195,257.72323 612.64130,247.27739 614.87500,230.31250 C 668.07068,229.21004 737.88540,241.30570 757.40625,245.12500 C 735.98732,234.66460 664.92792,227.25580 615.21875,228.21875 C 615.22870,228.11904 615.24045,228.03777 615.25000,227.93750 C 616.41525,215.70752 675.84375,123.06250 675.84375,123.06250 C 614.59722,216.66570 616.91444,216.32105 612.43750,228.21875 C 605.01927,228.41116 598.05690,228.77061 591.93750,229.37500 C 561.08150,232.42251 544.14471,244.86783 485.50000,246.00000 C 481.12067,196.29050 582.62500,47.906250 582.62500,47.906250 C 504.83281,168.65828 486.07119,201.47841 480.75000,246.09375 C 450.57954,246.34478 409.84371,243.69470 351.53125,235.56250 C 347.17084,177.77103 449.21875,12.343750 449.21875,12.343750 z "
+ id="path9554"
+ sodipodi:nodetypes="cccccccccccccccccccccccccccccc" />
+ </g>
+ <g
+ id="g9556"
+ transform="matrix(-0.431666,-0.749539,0.761496,-0.424888,183.0256,690.0901)">
+ <path
+ style="fill:url(#linearGradient9559);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;"
+ d="M 43.495157,164.66019 C 276.50486,388.34951 338.64079,376.95793 423.55988,385.24272 C 508.47898,393.52751 694.88669,258.89967 724.91909,252.68608 C 754.95149,246.47249 752.88029,251.65048 765.30749,256.82848 C 748.73789,210.22653 666.92559,97.346281 611.00319,62.135921 C 555.08089,26.925563 404.91910,-13.462777 280.64726,19.676373 C 198.83496,38.317153 115.98706,135.66343 43.495157,164.66019 z "
+ id="path9557"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:#080762;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 449.21875,12.343750 C 372.55367,131.34626 351.03163,190.15459 345.31250,234.71875 C 296.43407,228.74167 250.88253,220.20102 210.06250,211.18750 C 210.18144,159.47011 307.03125,15.562500 307.03125,15.562500 C 231.73758,132.43627 211.35292,167.53740 205.28125,210.12500 C 111.44954,189.10115 46.625000,165.87500 46.625000,165.87500 C 95.278072,186.13432 149.62093,202.52998 204.53125,215.34375 C 205.73417,244.61892 210.49875,254.89076 234.81250,324.93750 C 212.11540,236.98624 209.34258,255.80079 209.75000,216.50000 C 255.62272,227.00430 301.69759,235.02520 345.12500,240.43750 C 346.64554,269.96362 353.89092,311.29960 377.53125,379.40625 C 355.00622,292.12181 351.03030,281.31222 351.31250,241.25000 C 399.42652,247.01704 443.95673,249.65958 480.81250,249.21875 C 482.09933,277.29978 486.10250,295.38014 509.81250,363.68750 C 486.91509,274.96003 484.85720,289.97427 485.34375,249.09375 C 521.11851,248.40068 549.34122,244.76072 565.71875,238.12500 C 576.82659,233.17150 593.20091,230.91691 611.78125,230.34375 C 609.02322,239.26769 604.15131,267.42325 620.50000,307.75000 C 605.49195,257.72323 612.64130,247.27739 614.87500,230.31250 C 668.07068,229.21004 737.88540,241.30570 757.40625,245.12500 C 735.98732,234.66460 664.92792,227.25580 615.21875,228.21875 C 615.22870,228.11904 615.24045,228.03777 615.25000,227.93750 C 616.41525,215.70752 675.84375,123.06250 675.84375,123.06250 C 614.59722,216.66570 616.91444,216.32105 612.43750,228.21875 C 605.01927,228.41116 598.05690,228.77061 591.93750,229.37500 C 561.08150,232.42251 544.14471,244.86783 485.50000,246.00000 C 481.12067,196.29050 582.62500,47.906250 582.62500,47.906250 C 504.83281,168.65828 486.07119,201.47841 480.75000,246.09375 C 450.57954,246.34478 409.84371,243.69470 351.53125,235.56250 C 347.17084,177.77103 449.21875,12.343750 449.21875,12.343750 z "
+ id="path9558"
+ sodipodi:nodetypes="cccccccccccccccccccccccccccccc" />
+ </g>
+ <g
+ id="g1953"
+ transform="matrix(1.384075,0.161467,-0.304992,1.435028,-105.9261,-263.9710)">
+ <path
+ style="fill:url(#linearGradient1956);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 43.495157,164.66019 C 276.50486,388.34951 338.64079,376.95793 423.55988,385.24272 C 508.47898,393.52751 694.88669,258.89967 724.91909,252.68608 C 754.95149,246.47249 752.88029,251.65048 765.30749,256.82848 C 748.73789,210.22653 666.92559,97.346281 611.00319,62.135921 C 555.08089,26.925563 404.91910,-13.462777 280.64726,19.676373 C 198.83496,38.317153 115.98706,135.66343 43.495157,164.66019 z "
+ id="path1954"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:#080762;fill-opacity:0.053475920;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 449.21875,12.343750 C 372.55367,131.34626 351.03163,190.15459 345.31250,234.71875 C 296.43407,228.74167 250.88253,220.20102 210.06250,211.18750 C 210.18144,159.47011 307.03125,15.562500 307.03125,15.562500 C 231.73758,132.43627 211.35292,167.53740 205.28125,210.12500 C 111.44954,189.10115 46.625000,165.87500 46.625000,165.87500 C 95.278072,186.13432 149.62093,202.52998 204.53125,215.34375 C 205.73417,244.61892 210.49875,254.89076 234.81250,324.93750 C 212.11540,236.98624 209.34258,255.80079 209.75000,216.50000 C 255.62272,227.00430 301.69759,235.02520 345.12500,240.43750 C 346.64554,269.96362 353.89092,311.29960 377.53125,379.40625 C 355.00622,292.12181 351.03030,281.31222 351.31250,241.25000 C 399.42652,247.01704 443.95673,249.65958 480.81250,249.21875 C 482.09933,277.29978 486.10250,295.38014 509.81250,363.68750 C 486.91509,274.96003 484.85720,289.97427 485.34375,249.09375 C 521.11851,248.40068 549.34122,244.76072 565.71875,238.12500 C 576.82659,233.17150 593.20091,230.91691 611.78125,230.34375 C 609.02322,239.26769 604.15131,267.42325 620.50000,307.75000 C 605.49195,257.72323 612.64130,247.27739 614.87500,230.31250 C 668.07068,229.21004 737.88540,241.30570 757.40625,245.12500 C 735.98732,234.66460 664.92792,227.25580 615.21875,228.21875 C 615.22870,228.11904 615.24045,228.03777 615.25000,227.93750 C 616.41525,215.70752 675.84375,123.06250 675.84375,123.06250 C 614.59722,216.66570 616.91444,216.32105 612.43750,228.21875 C 605.01927,228.41116 598.05690,228.77061 591.93750,229.37500 C 561.08150,232.42251 544.14471,244.86783 485.50000,246.00000 C 481.12067,196.29050 582.62500,47.906250 582.62500,47.906250 C 504.83281,168.65828 486.07119,201.47841 480.75000,246.09375 C 450.57954,246.34478 409.84371,243.69470 351.53125,235.56250 C 347.17084,177.77103 449.21875,12.343750 449.21875,12.343750 z "
+ id="path1955"
+ sodipodi:nodetypes="cccccccccccccccccccccccccccccc" />
+ </g>
+ <g
+ id="g2589"
+ transform="matrix(1.707376,0.139808,-0.376234,1.242534,219.8921,550.6217)">
+ <path
+ style="fill:url(#linearGradient2592);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 43.495157,164.66019 C 276.50486,388.34951 338.64079,376.95793 423.55988,385.24272 C 508.47898,393.52751 694.88669,258.89967 724.91909,252.68608 C 754.95149,246.47249 752.88029,251.65048 765.30749,256.82848 C 748.73789,210.22653 666.92559,97.346281 611.00319,62.135921 C 555.08089,26.925563 404.91910,-13.462777 280.64726,19.676373 C 198.83496,38.317153 115.98706,135.66343 43.495157,164.66019 z "
+ id="path2590"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:#080762;fill-opacity:0.053475920;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 449.21875,12.343750 C 372.55367,131.34626 351.03163,190.15459 345.31250,234.71875 C 296.43407,228.74167 250.88253,220.20102 210.06250,211.18750 C 210.18144,159.47011 307.03125,15.562500 307.03125,15.562500 C 231.73758,132.43627 211.35292,167.53740 205.28125,210.12500 C 111.44954,189.10115 46.625000,165.87500 46.625000,165.87500 C 95.278072,186.13432 149.62093,202.52998 204.53125,215.34375 C 205.73417,244.61892 210.49875,254.89076 234.81250,324.93750 C 212.11540,236.98624 209.34258,255.80079 209.75000,216.50000 C 255.62272,227.00430 301.69759,235.02520 345.12500,240.43750 C 346.64554,269.96362 353.89092,311.29960 377.53125,379.40625 C 355.00622,292.12181 351.03030,281.31222 351.31250,241.25000 C 399.42652,247.01704 443.95673,249.65958 480.81250,249.21875 C 482.09933,277.29978 486.10250,295.38014 509.81250,363.68750 C 486.91509,274.96003 484.85720,289.97427 485.34375,249.09375 C 521.11851,248.40068 549.34122,244.76072 565.71875,238.12500 C 576.82659,233.17150 593.20091,230.91691 611.78125,230.34375 C 609.02322,239.26769 604.15131,267.42325 620.50000,307.75000 C 605.49195,257.72323 612.64130,247.27739 614.87500,230.31250 C 668.07068,229.21004 737.88540,241.30570 757.40625,245.12500 C 735.98732,234.66460 664.92792,227.25580 615.21875,228.21875 C 615.22870,228.11904 615.24045,228.03777 615.25000,227.93750 C 616.41525,215.70752 675.84375,123.06250 675.84375,123.06250 C 614.59722,216.66570 616.91444,216.32105 612.43750,228.21875 C 605.01927,228.41116 598.05690,228.77061 591.93750,229.37500 C 561.08150,232.42251 544.14471,244.86783 485.50000,246.00000 C 481.12067,196.29050 582.62500,47.906250 582.62500,47.906250 C 504.83281,168.65828 486.07119,201.47841 480.75000,246.09375 C 450.57954,246.34478 409.84371,243.69470 351.53125,235.56250 C 347.17084,177.77103 449.21875,12.343750 449.21875,12.343750 z "
+ id="path2591"
+ sodipodi:nodetypes="cccccccccccccccccccccccccccccc" />
+ </g>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer4"
+ inkscape:label="Branch">
+ <path
+ style="fill:#6caed9;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M -10.355987,713.52750 C 268.22006,565.43690 466.01942,431.84467 603.75405,417.34628 C 733.23203,403.71702 911.06817,486.79900 1017.9935,514.69256 C 1208.5437,564.40130 1286.2136,507.44337 1286.2136,507.44337 L 1286.2136,541.61812 C 1286.2136,541.61812 1199.2233,577.86408 1106.0194,578.89968 C 1012.8155,579.93528 794.30421,486.73139 707.31392,488.80259 C 620.32362,490.87379 360.69725,629.64955 309.64401,660.71197 C 269.55650,685.10250 -15.533981,899.93527 -15.533981,899.93527 L -10.355987,713.52750 z "
+ id="MainBranch"
+ sodipodi:nodetypes="cssccccscc" />
+ <path
+ style="fill:#6cafd9;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 972.54425,392.72534 C 988.71695,445.48313 1153.5444,401.24832 1090.3101,562.13159 L 1021.0052,534.84027 C 1078.9987,512.05710 1095.4210,499.30642 1088.6859,472.56863 C 1077.7358,429.09776 979.53780,447.34492 962.77102,404.08200 L 972.54425,392.72534 z "
+ id="Flower2-3Stem"
+ sodipodi:nodetypes="cccscc" />
+ <path
+ style="fill:#6caed9;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 1149.9236,336.82506 C 1154.5681,377.97680 1241.0747,437.84689 1112.6604,542.44236 L 1066.9994,540.30374 C 1066.9994,540.30374 1155.4506,506.87686 1169.1226,433.08916 C 1176.2705,394.51228 1130.9803,362.12588 1133.7504,324.14329 L 1149.9236,336.82506 z "
+ id="Flower2-2Stem"
+ sodipodi:nodetypes="cccscc" />
+ <path
+ style="fill:#6cafd9;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 1031.8664,215.90582 C 1048.0391,268.66361 1169.3714,387.01780 1106.1371,547.90107 L 1036.8322,520.60975 C 1101.0393,518.53855 1133.7070,483.99653 1086.9077,353.74264 C 1048.3186,246.33980 1004.6852,259.13382 1003.4524,208.62171 L 1031.8664,215.90582 z "
+ id="Flower2-1Stem"
+ sodipodi:nodetypes="cccscc" />
+ <path
+ style="fill:url(#linearGradient4496);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;"
+ d="M 535.40453,600.64725 C 544.72492,518.83495 481.55340,540.58252 481.55340,540.58252 L 513.65696,520.90615 C 513.65696,520.90615 553.00970,517.79935 556.11650,547.83172 C 559.22330,577.86408 549.90291,591.32686 561.29450,592.36246 L 535.40453,600.64725 z "
+ id="Flower1-3Stem"
+ sodipodi:nodetypes="cccccc" />
+ <path
+ style="fill:url(#linearGradient2613);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M -20.194184,776.41276 C 258.38187,628.32216 502.09256,496.44749 571.13269,468.83995 C 636.16971,442.83316 928.38774,489.19085 1033.0097,530.97587 C 1083.7997,551.26093 1180.0647,559.97265 1283.6246,524.76229 L 1283.6246,542.36745 C 1283.6246,542.36745 1196.6343,578.61341 1103.4304,579.64901 C 1010.2265,580.68461 791.71521,487.48073 704.72492,489.55193 C 617.73462,491.62313 358.10825,630.39888 307.05501,661.46130 C 266.96750,685.85183 -18.122983,900.68460 -18.122983,900.68460 L -20.194184,776.41276 z "
+ id="path1980"
+ sodipodi:nodetypes="cssccccscc" />
+ <path
+ style="fill:url(#linearGradient3239);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M -8.8025931,708.06325 C 269.77345,559.97264 467.57282,426.38041 605.30745,411.88203 C 734.78543,398.25277 912.40411,482.18208 1019.5469,509.22830 C 1129.3711,536.95139 1088.4409,454.88378 1075.4994,447.53824 C 1070.7806,444.85986 1107.5122,466.94531 1095.7249,508.19631 C 1094.4398,510.53735 1106.0820,507.05651 1119.7859,470.54563 C 1121.1410,466.93525 1087.2648,579.10026 1165.1536,454.07742 C 1173.6069,440.50866 1111.6130,528.29066 1119.1060,529.59980 C 1149.0781,534.83637 1213.0428,533.82469 1286.2625,505.48965 L 1287.7670,518.54868 C 1287.7670,518.54868 1208.0259,550.65225 1114.8220,551.68785 C 1021.6181,552.72345 832.10357,463.66196 706.79613,453.30598 C 575.27508,420.16682 386.06941,591.04614 335.01617,622.10856 C 294.92866,646.49909 -24.336570,828.19270 -24.336570,828.19270 L -8.8025931,708.06325 z "
+ id="path2614"
+ sodipodi:nodetypes="cssscsssccccscc" />
+ <path
+ style="fill:url(#linearGradient3245);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M -18.122983,854.51236 C 251.13268,673.28261 537.69465,506.45517 622.91262,485.83924 C 755.18263,453.84049 918.03175,506.19014 1022.6537,547.97515 C 1073.4437,568.26021 1180.0647,562.47355 1283.6246,527.26319 L 1282.5890,538.65476 C 1282.5890,538.65476 1195.5987,574.90072 1102.3948,575.93632 C 1009.1909,576.97192 790.67961,483.76805 703.68932,485.83925 C 616.69902,487.91045 357.07265,626.68619 306.01941,657.74861 C 265.93190,682.13914 -19.158579,896.97196 -19.158579,896.97196 L -18.122983,854.51236 z "
+ id="path3244"
+ sodipodi:nodetypes="cssccccscc" />
+ <path
+ style="fill:url(#linearGradient4502);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 536.49655,602.47084 C 545.81694,520.65854 487.87480,545.30177 487.87480,545.30177 L 525.10497,533.08573 C 543.74574,542.40612 540.63893,529.97893 543.74573,560.01130 C 546.85253,590.04366 538.56775,595.22165 549.95934,596.25725 L 536.49655,602.47084 z "
+ id="path4501"
+ sodipodi:nodetypes="cccccc" />
+ <path
+ sodipodi:type="arc"
+ style="fill:url(#radialGradient6995);fill-opacity:1.0000000;stroke:none;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ id="path6370"
+ sodipodi:cx="543.74127"
+ sodipodi:cy="561.84027"
+ sodipodi:rx="4.9774647"
+ sodipodi:ry="18.600000"
+ d="M 548.71874 561.84027 A 4.9774647 18.600000 0 1 1 538.76381,561.84027 A 4.9774647 18.600000 0 1 1 548.71874 561.84027 z"
+ transform="matrix(1.000000,0.000000,0.000000,1.289738,5.987927,-162.2627)" />
+ <path
+ sodipodi:type="arc"
+ style="fill:url(#radialGradient7628);fill-opacity:1.0000000;stroke:none;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ id="path6996"
+ sodipodi:cx="999.75043"
+ sodipodi:cy="410.09967"
+ sodipodi:rx="31.344069"
+ sodipodi:ry="2.7582781"
+ d="M 1031.0945 410.09967 A 31.344069 2.7582781 0 1 1 968.40636,410.09967 A 31.344069 2.7582781 0 1 1 1031.0945 410.09967 z"
+ transform="matrix(0.955049,0.296449,-0.296449,0.955049,196.6039,-258.3817)" />
+ <path
+ sodipodi:type="arc"
+ style="fill:url(#radialGradient7630);fill-opacity:1.0000000;stroke:none;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ id="path7629"
+ sodipodi:cx="999.75043"
+ sodipodi:cy="410.09967"
+ sodipodi:rx="31.344069"
+ sodipodi:ry="2.7582781"
+ d="M 1031.0945 410.09967 A 31.344069 2.7582781 0 1 1 968.40636,410.09967 A 31.344069 2.7582781 0 1 1 1031.0945 410.09967 z"
+ transform="matrix(0.491225,0.196413,-0.152477,0.632771,634.1177,-14.67026)" />
+ <path
+ sodipodi:type="arc"
+ style="fill:url(#radialGradient7632);fill-opacity:1.0000000;stroke:none;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ id="path7631"
+ sodipodi:cx="999.75043"
+ sodipodi:cy="410.09967"
+ sodipodi:rx="31.344069"
+ sodipodi:ry="2.7582781"
+ d="M 1031.0945 410.09967 A 31.344069 2.7582781 0 1 1 968.40636,410.09967 A 31.344069 2.7582781 0 1 1 1031.0945 410.09967 z"
+ transform="matrix(0.560824,0.992678,-1.087564,0.511894,935.2258,-944.2154)" />
+ <path
+ sodipodi:type="arc"
+ style="fill:url(#radialGradient7634);fill-opacity:1.0000000;stroke:none;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ id="path7633"
+ sodipodi:cx="999.75043"
+ sodipodi:cy="410.09967"
+ sodipodi:rx="31.344069"
+ sodipodi:ry="2.7582781"
+ d="M 1031.0945 410.09967 A 31.344069 2.7582781 0 1 1 968.40636,410.09967 A 31.344069 2.7582781 0 1 1 1031.0945 410.09967 z"
+ transform="matrix(0.560824,0.992678,-1.087564,0.511894,958.5466,-903.3415)" />
+ <path
+ sodipodi:type="arc"
+ style="fill:url(#radialGradient7636);fill-opacity:1.0000000;stroke:none;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ id="path7635"
+ sodipodi:cx="999.75043"
+ sodipodi:cy="410.09967"
+ sodipodi:rx="31.344069"
+ sodipodi:ry="2.7582781"
+ d="M 1031.0945 410.09967 A 31.344069 2.7582781 0 1 1 968.40636,410.09967 A 31.344069 2.7582781 0 1 1 1031.0945 410.09967 z"
+ transform="matrix(0.432680,1.054856,-1.142901,0.372301,1129.914,-868.1367)" />
+ <path
+ sodipodi:type="arc"
+ style="fill:url(#radialGradient7638);fill-opacity:1.0000000;stroke:none;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ id="path7637"
+ sodipodi:cx="999.75043"
+ sodipodi:cy="410.09967"
+ sodipodi:rx="31.344069"
+ sodipodi:ry="2.7582781"
+ d="M 1031.0945 410.09967 A 31.344069 2.7582781 0 1 1 968.40636,410.09967 A 31.344069 2.7582781 0 1 1 1031.0945 410.09967 z"
+ transform="matrix(0.458086,1.044074,-1.133555,0.399856,1171.103,-831.5445)" />
+ <path
+ sodipodi:type="arc"
+ style="fill:url(#radialGradient7640);fill-opacity:1.0000000;stroke:none;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ id="path7639"
+ sodipodi:cx="999.75043"
+ sodipodi:cy="410.09967"
+ sodipodi:rx="31.344069"
+ sodipodi:ry="2.7582781"
+ d="M 1031.0945 410.09967 A 31.344069 2.7582781 0 1 1 968.40636,410.09967 A 31.344069 2.7582781 0 1 1 1031.0945 410.09967 z"
+ transform="matrix(-0.414864,0.760461,-0.801062,-0.467697,1900.498,-97.93763)" />
+ <path
+ sodipodi:type="arc"
+ style="fill:url(#radialGradient7642);fill-opacity:1.0000000;stroke:none;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ id="path7641"
+ sodipodi:cx="999.75043"
+ sodipodi:cy="410.09967"
+ sodipodi:rx="31.344069"
+ sodipodi:ry="2.7582781"
+ d="M 1031.0945 410.09967 A 31.344069 2.7582781 0 1 1 968.40636,410.09967 A 31.344069 2.7582781 0 1 1 1031.0945 410.09967 z"
+ transform="matrix(-0.791385,0.820758,-0.800937,-0.896287,2251.789,49.29901)" />
+ <path
+ style="fill:#45a1d9;fill-opacity:0.49197862;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 967.40045,403.38057 C 1006.6424,445.60675 1152.9831,436.86406 1076.1391,514.11073 L 1058.9908,518.41423 C 1081.6952,506.48041 1094.0557,500.30305 1088.0556,473.19376 C 1078.3681,429.42423 978.90755,447.97005 962.14077,404.70713 L 967.40045,403.38057 z "
+ id="path7643"
+ sodipodi:nodetypes="cccscc" />
+ <path
+ style="fill:url(#linearGradient7648);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;"
+ d="M 1012.6486,211.88647 C 1043.8664,237.56299 1184.2559,484.80399 1074.3816,529.33808 L 1035.1671,530.63255 C 1099.3742,528.56135 1134.5494,483.48772 1087.7501,353.23383 C 1049.1610,245.83099 1005.5276,258.62501 1004.2948,208.11290 L 1012.6486,211.88647 z "
+ id="path7644"
+ sodipodi:nodetypes="cccscc" />
+ <path
+ style="fill:url(#linearGradient16309);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;"
+ d="M 1114.8458,502.62735 C 1107.8247,517.17099 1094.7857,530.71164 1083.7525,536.22819 C 1111.8368,532.71765 1128.3864,507.64240 1129.3894,504.63337 C 1120.3623,512.15594 1112.3383,514.66347 1114.8458,502.62735 z "
+ id="path7649"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#radialGradient16314);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;"
+ d="M 1181.0445,440.44071 C 1174.5249,486.57918 1124.3744,529.70862 1124.3744,529.70862 C 1124.3744,529.70862 1118.8579,531.21313 1128.8880,519.67852 C 1138.9181,508.14390 1153.4617,506.63938 1181.0445,440.44071 z "
+ id="path7650"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#radialGradient8740);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;"
+ d="M 752.86699,478.58128 C 775.70673,479.67673 871.09360,512.63054 904.19704,506.00985 C 937.30049,499.38916 949.59606,506.95566 911.76355,478.58128 C 873.93104,450.20689 832.31527,457.77340 783.13300,440.74877 C 733.95074,423.72414 680.98522,450.20690 628.01970,458.71921 C 575.05419,467.23153 562.75862,521.14286 588.29557,507.90148 C 613.83251,494.66010 633.56963,486.94063 665.85222,479.52709 C 678.88870,476.53332 715.82257,476.80454 752.86699,478.58128 z "
+ id="path8108"
+ sodipodi:nodetypes="ccccccss" />
+ <path
+ style="fill:url(#radialGradient9366);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;"
+ d="M 651.66503,472.90641 C 672.47291,464.39409 766.10838,470.06897 778.40394,445.47784 C 790.69951,420.88670 713.14286,424.66995 650.71921,431.29064 C 588.29557,437.91133 568.43350,471.01478 531.54680,487.09360 C 494.66010,503.17241 418.04926,540.05911 443.58621,559.92118 C 469.12315,579.78325 630.85714,481.41872 651.66503,472.90641 z "
+ id="path8741"
+ sodipodi:nodetypes="cccccc" />
+ <path
+ style="fill:url(#radialGradient11231);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 399.10314,570.77430 C 419.20996,572.13485 511.65487,534.61003 544.75831,512.30197 C 577.86176,489.99390 563.67457,507.12100 525.84206,496.67505 C 488.00955,486.22909 472.87654,498.12953 423.69427,504.41186 C 374.51201,510.69418 321.54649,562.27674 268.58097,595.88885 C 215.61546,629.50097 203.31989,689.23904 228.85684,663.89597 C 254.39378,638.55290 259.94370,668.76718 292.22629,646.05526 C 305.26277,636.88364 369.62522,568.77965 399.10314,570.77430 z "
+ id="path11230"
+ sodipodi:nodetypes="ccccccss" />
+ <path
+ style="fill:url(#radialGradient11233);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 323.43811,609.63467 C 290.07969,591.06105 243.98984,625.27634 194.80757,631.55867 C 145.62531,637.84099 45.369152,689.42355 -7.5963711,723.03566 C -60.561881,756.64778 -68.128387,832.46467 -42.591437,807.12160 C -17.054497,781.77853 10.249118,853.60857 42.531711,830.89665 C 55.568191,821.72503 358.17821,628.97759 323.43811,609.63467 z "
+ id="path11232"
+ sodipodi:nodetypes="ccccss" />
+ <path
+ style="fill:url(#radialGradient11235);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 922.58815,526.20817 C 1026.7677,569.86520 1215.1277,574.40743 1209.1693,562.14906 C 1188.6040,519.83949 1099.4551,554.58256 926.37138,506.34610 C 876.23638,492.37405 822.06583,469.45940 770.31227,449.59733 C 723.51240,431.63640 706.52555,451.56844 723.02164,475.13428 C 736.26301,494.05054 788.33604,487.05233 817.60292,502.56285 C 831.58521,509.97302 888.38309,511.87435 922.58815,526.20817 z "
+ id="path11234"
+ sodipodi:nodetypes="cssssss" />
+ <path
+ sodipodi:type="arc"
+ style="fill:url(#radialGradient11861);fill-opacity:1.0000000;stroke:none;stroke-width:1.7500000;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ id="path11236"
+ sodipodi:cx="916.49261"
+ sodipodi:cy="499.86206"
+ sodipodi:rx="39.724136"
+ sodipodi:ry="19.389162"
+ d="M 956.21675 499.86206 A 39.724136 19.389162 0 1 1 876.76848,499.86206 A 39.724136 19.389162 0 1 1 956.21675 499.86206 z"
+ transform="matrix(2.761905,0.514238,0.000000,1.799832,-1559.916,-842.7268)" />
+ <path
+ style="fill:url(#radialGradient16326);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;"
+ d="M 1118.1741,480.19244 C 1116.9031,486.86526 1117.5385,498.93989 1112.7722,505.61271 C 1108.0059,512.28553 1096.5668,528.80870 1086.0809,532.30399 C 1075.5951,535.79928 1061.9317,534.84602 1067.3335,531.03298 C 1072.7353,527.21994 1087.6697,522.77141 1094.9781,517.05183 C 1101.7158,511.77885 1109.2770,492.26705 1111.1835,486.54751 C 1114.1096,477.76920 1119.4451,473.51962 1118.1741,480.19244 z "
+ id="path16318"
+ sodipodi:nodetypes="ccccssc" />
+ <path
+ style="fill:url(#linearGradient16331);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;"
+ d="M 1110.2302,440.47328 C 1110.2302,470.02434 1101.3331,499.57540 1096.5668,506.56597 C 1117.5386,495.76235 1113.0900,497.66887 1114.0432,508.15473 C 1118.4918,501.79967 1121.3516,491.94932 1121.6694,482.73447 C 1123.8936,472.56636 1121.9871,454.13667 1120.3983,450.64138 C 1118.8095,447.14609 1113.4077,435.07147 1110.2302,440.47328 z "
+ id="path16327"
+ sodipodi:nodetypes="cccccc" />
+ <path
+ style="fill:url(#linearGradient16336);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 1068.8927,449.89667 C 1108.2941,482.62526 1081.6028,507.09227 1063.8086,515.98936 C 1092.4065,519.16688 1096.8550,479.76547 1100.0324,499.14842 C 1103.2100,488.02706 1102.5745,483.26077 1099.7148,474.04592 C 1092.0887,455.61622 1079.6963,449.89666 1078.1075,446.40137 C 1076.5187,442.90608 1072.0702,444.49486 1068.8927,449.89667 z "
+ id="path16335"
+ sodipodi:nodetypes="cccccc" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="Flower1">
+ <g
+ id="Flower1-3Inner"
+ transform="matrix(-0.328665,1.215295,-1.019160,-0.492154,1176.196,381.5868)">
+ <path
+ style="fill:url(#linearGradient22753);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 372.48492,498.90673 C 414.14732,411.61407 356.13246,406.42348 386.55263,384.60031 C 416.97280,362.77715 431.37033,356.03636 447.24172,370.58514 C 463.11311,385.13391 484.73879,403.17864 484.73879,410.45303 C 484.73879,417.72741 376.68472,495.04283 372.48492,498.90673 z "
+ id="path18790"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:url(#linearGradient22754);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 373.29953,498.91998 C 422.89763,399.72377 391.31920,406.68287 433.64292,413.95726 C 475.96663,421.23164 490.31841,408.26740 493.62495,438.02626 C 496.93149,467.78512 517.45929,484.83995 481.74866,494.09826 C 446.03802,503.35658 377.94616,497.96705 373.29953,498.91998 z "
+ id="path18791"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:url(#linearGradient22755);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 372.31642,498.40699 C 428.52760,380.03286 430.30761,368.00419 393.27436,363.37504 C 356.24111,358.74588 330.64235,389.11395 340.56197,423.50196 C 350.48159,457.88998 355.78372,438.88927 361.73549,460.05113 C 367.68727,481.21299 369.74255,491.59934 372.31642,498.40699 z "
+ id="path18792"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:url(#radialGradient22756);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 375.62296,499.06830 C 502.59410,475.26121 536.65615,491.32284 494.99374,518.43647 C 453.33133,545.55010 453.65731,567.84434 430.51153,548.00510 C 407.36575,528.16586 406.04313,514.27839 394.80089,506.34269 C 383.55866,498.40699 375.62296,499.06830 375.62296,499.06830 z "
+ id="path18793"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:url(#radialGradient22757);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 378.92950,499.72961 C 423.89845,534.11763 447.04423,547.34379 443.73769,522.21408 C 440.43115,497.08438 442.41507,450.13151 411.33360,471.29337 C 380.25212,492.45522 378.92950,499.72961 378.92950,499.72961 z "
+ id="path18794" />
+ </g>
+ <path
+ style="fill:url(#linearGradient21629);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;"
+ d="M 602.07725,593.83555 C 595.55770,597.74694 582.39489,594.48477 556.15280,589.17838 C 555.27950,581.79199 556.30239,569.82763 556.50995,560.36116 C 552.65598,552.01160 540.46145,548.74405 537.25583,552.47910 C 534.05023,556.21414 534.93501,563.48533 535.84318,573.78688 C 536.75135,584.08841 536.09819,597.05546 535.36420,600.17016 C 529.68781,606.27733 519.95225,614.55252 513.34856,619.81909 C 492.32731,642.19307 504.87551,642.59078 518.75757,652.48559 C 532.63962,662.38040 655.58777,622.57080 602.07725,593.83555 z "
+ id="path21628"
+ sodipodi:nodetypes="ccccccccc" />
+ <g
+ id="Flower1-1Inner">
+ <path
+ style="fill:url(#linearGradient16178);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 363.71942,503.69746 C 405.38182,416.40480 363.71942,390.61379 394.13959,368.79062 C 424.55976,346.96746 444.39900,338.37045 460.27039,352.91923 C 476.14178,367.46800 484.73879,403.17864 484.73879,410.45303 C 484.73879,417.72741 363.71942,503.69746 363.71942,503.69746 z "
+ id="path11816" />
+ <path
+ style="fill:url(#linearGradient16173);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 367.02596,501.05223 C 416.62406,401.85602 441.75376,386.64594 484.07748,393.92033 C 526.40119,401.19471 537.64343,389.29117 540.94997,419.05003 C 544.25651,448.80889 543.59520,482.53560 507.88457,491.79391 C 472.17393,501.05223 367.02596,501.05223 367.02596,501.05223 z "
+ id="path11817" />
+ <path
+ style="fill:url(#linearGradient16182);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 372.31642,498.40699 C 428.52760,380.03286 430.51153,350.93530 393.47828,346.30615 C 356.44503,341.67699 324.04094,380.03286 333.96056,414.42087 C 343.88018,448.80889 355.78372,438.88927 361.73549,460.05113 C 367.68727,481.21299 372.31642,498.40699 372.31642,498.40699 z "
+ id="path11818" />
+ <path
+ style="fill:url(#radialGradient16191);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 375.62296,499.06830 C 502.59410,475.26121 558.80529,495.10045 517.14288,522.21408 C 475.48047,549.32771 453.65731,567.84434 430.51153,548.00510 C 407.36575,528.16586 406.04313,514.27839 394.80089,506.34269 C 383.55866,498.40699 375.62296,499.06830 375.62296,499.06830 z "
+ id="path11819" />
+ <path
+ style="fill:url(#radialGradient16186);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 378.92950,499.72961 C 423.89845,534.11763 447.04423,547.34379 443.73769,522.21408 C 440.43115,497.08438 442.41507,450.13151 411.33360,471.29337 C 380.25212,492.45522 378.92950,499.72961 378.92950,499.72961 z "
+ id="path11821" />
+ <path
+ style="fill:#29e569;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;stroke-miterlimit:4.0000000;stroke-dasharray:none;"
+ d="M 355.12241,442.19581 C 388.84912,436.24404 421.25322,467.32552 411.33360,481.87429 C 401.41397,496.42307 377.60689,524.19801 372.31642,502.37484 C 367.02596,480.55168 355.12241,442.19581 355.12241,442.19581 z "
+ id="path11820" />
+ </g>
+ <g
+ id="Flower1-1Petals">
+ <path
+ style="fill:#5047dd;fill-opacity:0.84491980;stroke:#000000;stroke-width:1.7207220;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 370.56250,305.90625 C 355.90456,305.38356 341.55481,308.54187 333.40625,315.62500 C 327.97388,320.34708 347.33067,340.30951 329.62500,358.15625 C 312.69793,375.21818 287.66656,347.56368 283.21875,354.84375 C 273.25755,371.14806 265.37524,399.59673 267.90625,419.25000 C 269.17176,429.07664 308.54541,414.73263 315.68750,440.15625 C 323.48351,467.90766 284.89523,475.15541 290.03125,485.43750 C 300.30331,506.00168 311.03251,519.94295 326.87500,536.84375 C 334.79624,545.29416 351.90911,508.22838 377.75000,529.43750 C 401.05114,548.56211 370.17897,574.05542 379.65625,579.75000 C 398.61081,591.13920 418.51671,599.28318 438.12500,603.31250 C 447.92915,605.32715 439.41058,564.23371 467.18750,561.43750 C 489.51695,559.18965 496.47318,597.74565 505.37500,595.15625 C 523.21009,589.96826 540.88473,571.83246 552.37500,559.75000 C 558.12014,553.70878 523.50061,541.31380 533.00000,519.28125 C 543.82177,494.18176 562.07926,511.83883 564.31250,503.56250 C 567.67279,491.10942 567.09229,482.38503 565.46875,464.25000 C 564.65698,455.18248 540.01389,464.92575 532.25000,442.96875 C 522.65141,415.82302 549.39077,413.22085 545.21875,404.56250 C 538.82970,391.27821 534.77490,386.96586 519.84375,371.59375 C 512.37815,363.90770 500.37158,387.44121 480.50000,372.06250 C 459.85357,356.08416 479.40003,342.40562 470.31250,336.03125 C 459.54164,328.47614 449.37353,322.48497 439.65625,321.37500 C 429.76884,320.24559 433.66906,341.25860 409.21875,337.34375 C 385.30054,333.51408 394.77072,309.66850 385.12500,307.65625 C 380.38656,306.66773 375.44848,306.08048 370.56250,305.90625 z M 404.37500,362.59375 C 442.37861,362.88532 485.68016,390.09716 503.87500,422.56250 C 524.74616,459.80323 517.44770,509.29724 480.65625,524.43750 C 443.92960,539.55112 390.71795,510.29037 365.28125,466.06250 C 339.84455,421.83464 347.42926,373.16413 388.50000,364.18750 C 393.62397,363.06758 398.94591,362.55210 404.37500,362.59375 z "
+ id="Flower1Bottom" />
+ <path
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="0.0000000"
+ inkscape:original="M 370.56250 305.90625 C 355.90456 305.38356 341.55481 308.54187 333.40625 315.62500 C 327.97388 320.34708 347.33067 340.30951 329.62500 358.15625 C 312.69793 375.21818 287.66656 347.56368 283.21875 354.84375 C 273.25755 371.14806 265.37524 399.59673 267.90625 419.25000 C 269.17176 429.07664 308.54541 414.73263 315.68750 440.15625 C 323.48351 467.90766 284.89523 475.15541 290.03125 485.43750 C 300.30331 506.00168 311.03251 519.94295 326.87500 536.84375 C 334.79624 545.29416 351.90911 508.22838 377.75000 529.43750 C 401.05114 548.56211 370.17897 574.05542 379.65625 579.75000 C 398.61081 591.13920 418.51671 599.28318 438.12500 603.31250 C 447.92915 605.32715 439.41058 564.23371 467.18750 561.43750 C 489.51695 559.18965 496.47318 597.74565 505.37500 595.15625 C 523.21009 589.96826 540.88473 571.83246 552.37500 559.75000 C 558.12014 553.70878 523.50061 541.31380 533.00000 519.28125 C 543.82177 494.18176 562.07926 511.83883 564.31250 503.56250 C 567.67279 491.10942 567.09229 482.38503 565.46875 464.25000 C 564.65698 455.18248 540.01389 464.92575 532.25000 442.96875 C 522.65141 415.82302 549.39077 413.22085 545.21875 404.56250 C 538.82970 391.27821 534.77490 386.96586 519.84375 371.59375 C 512.37815 363.90770 500.37158 387.44121 480.50000 372.06250 C 459.85357 356.08416 479.40003 342.40562 470.31250 336.03125 C 459.54164 328.47614 449.37353 322.48497 439.65625 321.37500 C 429.76884 320.24559 433.66906 341.25860 409.21875 337.34375 C 385.30054 333.51408 394.77072 309.66850 385.12500 307.65625 C 380.38656 306.66773 375.44848 306.08048 370.56250 305.90625 z M 404.37500 362.59375 C 442.37861 362.88532 485.68016 390.09716 503.87500 422.56250 C 524.74616 459.80323 517.44770 509.29724 480.65625 524.43750 C 443.92960 539.55112 390.71795 510.29037 365.28125 466.06250 C 339.84455 421.83464 347.42926 373.16413 388.50000 364.18750 C 393.62397 363.06758 398.94591 362.55210 404.37500 362.59375 z "
+ xlink:href="#path4825"
+ style="fill:#564ce2;fill-opacity:0.72192514;stroke:#000000;stroke-width:1.7207220;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ id="path7333"
+ inkscape:href="#path4825"
+ d="M 370.56250,305.90625 C 355.90456,305.38356 341.55481,308.54187 333.40625,315.62500 C 327.97388,320.34708 347.33067,340.30951 329.62500,358.15625 C 312.69793,375.21818 287.66656,347.56368 283.21875,354.84375 C 273.25755,371.14806 265.37524,399.59673 267.90625,419.25000 C 269.17176,429.07664 308.54541,414.73263 315.68750,440.15625 C 323.48351,467.90766 284.89523,475.15541 290.03125,485.43750 C 300.30331,506.00168 311.03251,519.94295 326.87500,536.84375 C 334.79624,545.29416 351.90911,508.22838 377.75000,529.43750 C 401.05114,548.56211 370.17897,574.05542 379.65625,579.75000 C 398.61081,591.13920 418.51671,599.28318 438.12500,603.31250 C 447.92915,605.32715 439.41058,564.23371 467.18750,561.43750 C 489.51695,559.18965 496.47318,597.74565 505.37500,595.15625 C 523.21009,589.96826 540.88473,571.83246 552.37500,559.75000 C 558.12014,553.70878 523.50061,541.31380 533.00000,519.28125 C 543.82177,494.18176 562.07926,511.83883 564.31250,503.56250 C 567.67279,491.10942 567.09229,482.38503 565.46875,464.25000 C 564.65698,455.18248 540.01389,464.92575 532.25000,442.96875 C 522.65141,415.82302 549.39077,413.22085 545.21875,404.56250 C 538.82970,391.27821 534.77490,386.96586 519.84375,371.59375 C 512.37815,363.90770 500.37158,387.44121 480.50000,372.06250 C 459.85357,356.08416 479.40003,342.40562 470.31250,336.03125 C 459.54164,328.47614 449.37353,322.48497 439.65625,321.37500 C 429.76884,320.24559 433.66906,341.25860 409.21875,337.34375 C 385.30054,333.51408 394.77072,309.66850 385.12500,307.65625 C 380.38656,306.66773 375.44848,306.08048 370.56250,305.90625 z M 404.37500,362.59375 C 442.37861,362.88532 485.68016,390.09716 503.87500,422.56250 C 524.74616,459.80323 517.44770,509.29724 480.65625,524.43750 C 443.92960,539.55112 390.71795,510.29037 365.28125,466.06250 C 339.84455,421.83464 347.42926,373.16413 388.50000,364.18750 C 393.62397,363.06758 398.94591,362.55210 404.37500,362.59375 z " />
+ <path
+ style="fill:url(#radialGradient11086);fill-opacity:1.0000000;stroke:#000000;stroke-width:1.7138077;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 380.12958,297.43595 C 365.86249,296.90326 351.89541,300.12208 343.96414,307.34090 C 338.67664,312.15342 357.51725,332.49828 340.28372,350.68690 C 323.80802,368.07567 299.44415,339.89140 295.11493,347.31096 C 285.41937,363.92759 277.74725,392.92123 280.21077,412.95101 C 281.44254,422.96589 319.76626,408.34710 326.71788,434.25775 C 334.30601,462.54078 296.74672,469.92735 301.74578,480.40644 C 311.74392,501.36456 322.18703,515.57289 337.60706,532.79745 C 345.31706,541.40974 361.97361,503.63391 387.12541,525.24932 C 409.80520,544.74031 379.75628,570.72197 388.98084,576.52564 C 407.42996,588.13303 426.80503,596.43301 445.89044,600.53952 C 455.43316,602.59276 447.14175,560.71211 474.17796,557.86234 C 495.91199,555.57142 502.68271,594.86602 511.34716,592.22703 C 528.70666,586.93964 545.90998,568.45644 557.09385,556.14252 C 562.68579,549.98555 528.98942,537.35313 538.23552,514.89853 C 548.76870,489.31821 566.53935,507.31354 568.71302,498.87865 C 571.98372,486.18700 571.41869,477.29549 569.83844,458.81305 C 569.04832,449.57183 545.06237,459.50174 537.50550,437.12411 C 528.16288,409.45836 554.18920,406.80636 550.12843,397.98214 C 543.90974,384.44336 539.96307,380.04841 525.43007,364.38181 C 518.16357,356.54852 506.47716,380.53287 487.13549,364.85955 C 467.03960,348.57510 486.06484,334.63454 477.21964,328.13807 C 466.73600,320.43822 456.83902,314.33228 447.38086,313.20105 C 437.75712,312.05000 441.55333,333.46555 417.75501,329.47570 C 394.47461,325.57267 403.69226,301.27029 394.30375,299.21948 C 389.69169,298.21202 384.88527,297.61353 380.12958,297.43595 z M 413.04042,355.20943 C 450.03063,355.50656 492.17750,383.23969 509.88715,416.32696 C 530.20177,454.28108 523.09793,504.72324 487.28757,520.15355 C 451.54027,535.55668 399.74756,505.73540 374.98916,460.66029 C 350.23075,415.58516 357.61321,365.98228 397.58875,356.83369 C 402.57609,355.69231 407.75611,355.16696 413.04042,355.20943 z "
+ id="Flower1Top" />
+ <path
+ style="fill:#638ae3;fill-opacity:0.53475934;fill-rule:evenodd;stroke:#000000;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 378.47470,577.81411 C 378.41896,575.30523 385.62077,574.05338 386.68118,574.84545 C 392.70466,579.95068 411.33467,593.50542 447.38730,601.10327 C 443.61727,602.55639 444.73008,602.27386 440.53021,603.54017 C 435.26683,603.21121 387.98723,587.44481 378.47470,577.81411 z "
+ id="path11135"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#5492d5;fill-opacity:0.33155081;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 448.70315,329.05232 C 414.82014,343.52661 440.80808,340.23700 445.08458,347.80311 C 449.36107,355.36922 485.87577,370.17247 493.44188,381.68612 C 501.00799,393.19976 515.81124,405.70029 519.75878,420.50355 C 523.70631,435.30680 522.71943,465.90020 531.60138,459.97890 C 540.48334,454.05759 519.10086,423.13524 523.04839,401.75275 C 526.99593,380.37027 513.50852,380.04131 495.41565,372.47520 C 477.32278,364.90909 451.99276,352.73753 453.30861,343.52661 C 454.62445,334.31570 448.70315,329.05232 448.70315,329.05232 z "
+ id="path11115" />
+ <path
+ style="fill:url(#radialGradient11114);fill-opacity:1.0000000;stroke:none;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 539.43027,532.41062 C 539.43027,539.40171 544.55840,574.25612 534.48034,574.25612 C 524.40229,574.25612 475.43149,576.39300 475.43149,569.40191 C 475.43149,562.41083 493.88434,522.82888 503.96239,522.82888 C 514.04045,522.82888 539.43027,525.41954 539.43027,532.41062 z "
+ id="path11088"
+ sodipodi:nodetypes="ccccc"
+ transform="matrix(0.624661,0.780896,-0.780896,0.624661,623.2822,-194.2138)" />
+ <path
+ style="fill:url(#radialGradient11102);fill-opacity:1.0000000;stroke:none;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 466.62375,572.09687 C 466.62375,583.75974 447.16650,585.70506 438.72273,585.70506 C 430.27895,585.70506 413.31825,581.76117 413.31825,570.09830 C 389.07901,512.80764 422.08743,519.04264 443.58671,522.23015 C 466.15531,533.76777 473.08623,541.59775 466.62375,572.09687 z "
+ id="path11087"
+ sodipodi:nodetypes="ccccc"
+ transform="matrix(0.943927,0.330155,-0.357257,1.021414,211.1143,-156.7594)" />
+ <path
+ style="fill:#85c8ef;fill-opacity:0.14973260;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 317.44761,367.86974 C 306.92085,392.21288 316.46073,375.43585 330.93502,419.84562 C 345.40932,464.25539 329.61918,472.47942 364.81803,490.57229 C 400.01688,508.66516 393.76662,527.74491 425.01794,529.38972 C 456.26926,531.03453 452.32172,552.41701 489.16538,535.63998 C 526.00904,518.86296 555.28660,489.58540 552.98387,468.53188 C 551.01010,445.17564 536.20685,486.95372 518.44293,505.37555 C 491.79707,525.44218 455.94030,534.65310 426.33378,523.13946 C 396.72727,511.62581 379.62129,494.51983 369.75245,468.20293 C 359.88361,441.88603 345.40932,410.96367 352.97542,395.17353 C 360.54153,379.38339 362.51530,363.59325 384.88467,350.76376 C 407.25403,337.93427 404.62234,323.78894 385.21362,317.86763 C 365.80491,311.94633 372.05518,319.18348 355.93608,344.51350 C 339.81697,369.84351 325.34268,350.76375 317.44761,367.86974 z "
+ id="path10461"
+ sodipodi:nodetypes="cccccccccccccc" />
+ <path
+ style="fill:#2d84e6;fill-opacity:0.54901963;fill-rule:evenodd;stroke:#000000;stroke-width:2.0000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;stroke-miterlimit:4.0000000;stroke-dasharray:none;"
+ d="M 331.84343,317.12090 C 338.32897,332.25383 340.76105,348.73791 330.76251,355.22345 C 355.62374,348.46767 345.62521,323.87668 342.11221,308.47352 C 331.84343,311.44606 331.84343,318.47205 331.84343,317.12090 z "
+ id="path9836"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:#5d9ee5;fill-opacity:0.52406418;fill-rule:evenodd;stroke:#000000;stroke-width:2.0000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000;stroke-dasharray:none;"
+ d="M 283.74235,353.60207 C 288.60651,349.54860 289.08108,347.82170 296.10708,346.74078 C 289.08108,355.65839 275.09497,401.43291 281.04004,416.29561 C 294.82181,422.78115 314.81889,411.16122 326.43882,432.77969 C 330.49228,463.58600 308.60359,464.93716 301.30736,477.36777 C 302.92874,491.14954 322.11512,518.71309 339.40990,534.92693 C 331.84343,540.87202 331.03274,536.27809 328.60066,537.35902 C 316.44028,525.73909 295.09205,498.71601 290.22789,482.77239 C 296.17296,468.72039 317.25097,469.53108 317.25097,443.04846 C 311.84635,416.56584 287.25535,425.75368 269.96058,421.97046 C 262.93457,407.37799 276.44612,368.19453 283.74235,353.60207 z "
+ id="Flower1Side1"
+ sodipodi:nodetypes="ccccccccccc" />
+ </g>
+ <path
+ style="fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:2.0000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 561.48153,506.06814 C 566.60051,504.01792 566.31252,502.40826 568.14677,499.86067"
+ id="path14425"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:2.0000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000;stroke-dasharray:none;"
+ d="M 433.39029,324.56271 C 438.81244,317.35852 437.00858,319.38696 444.90632,313.20127"
+ id="path14424"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:2.0000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 269.82763,421.63403 C 275.24978,421.09968 278.90306,418.27733 280.73731,415.72974"
+ id="path14426"
+ sodipodi:nodetypes="cc" />
+ <g
+ id="Flower1-1Pestils">
+ <path
+ style="fill:#78bb0b;fill-opacity:1.0000000;fill-rule:nonzero;stroke:#000000;stroke-width:1.0000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ id="path16204"
+ d="M 395.87615,451.17702 C 402.94657,440.96346 403.10204,439.16578 407.83307,427.71470 C 413.62102,413.31065 418.11041,398.39296 421.31969,383.20749 C 422.27088,377.95644 423.54733,372.67183 423.48198,367.30475 C 423.47465,365.48261 424.20625,363.76225 424.60471,362.00104 C 424.72564,361.44833 424.80699,360.88841 424.90812,360.33209 L 433.49172,356.12720 C 433.40895,356.68512 433.33460,357.24429 433.24341,357.80095 C 432.95248,359.51019 432.42794,361.15542 432.16854,362.85892 C 432.07120,368.42576 430.40858,373.86257 429.41556,379.30073 C 425.94270,394.51893 421.51224,409.53306 415.76414,424.05417 C 411.16334,435.41613 407.55944,444.77969 400.84871,455.06865 C 399.48236,454.76498 395.67745,451.25404 395.87615,451.17702 z "
+ sodipodi:nodetypes="ccccccccccccc" />
+ <path
+ style="fill:#6a961f;fill-opacity:1.0000000;fill-rule:nonzero;stroke:#000000;stroke-width:1.0000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ id="path16207"
+ d="M 413.05377,473.85434 C 424.05948,476.53937 430.17384,477.80057 441.18665,480.45644 C 452.67249,483.36392 464.43167,485.01220 476.28740,484.64621 C 486.90765,484.28304 497.02967,480.87902 506.58227,476.43214 C 508.12492,475.70792 509.63402,474.91663 511.14030,474.12062 L 503.85239,479.96854 C 502.36791,480.72539 500.88081,481.47770 499.36291,482.16624 C 489.74758,486.48999 479.59335,489.77005 468.96091,489.99771 C 457.07136,490.23505 445.29421,488.50954 433.78405,485.57076 C 422.71192,482.88327 422.96458,483.66872 411.84052,481.19840 C 413.12114,478.06319 413.18395,476.48007 413.05377,473.85434 z "
+ sodipodi:nodetypes="ccccccccccc" />
+ <path
+ style="fill:#789744;fill-opacity:1.0000000;fill-rule:nonzero;stroke:#000000;stroke-width:1.0000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ id="path16205"
+ d="M 405.62917,459.17185 C 412.33225,454.41079 416.23635,451.48178 421.91223,445.57544 C 436.19796,430.44730 450.17285,415.02890 464.43804,399.88160 C 471.45366,391.96609 479.55942,385.05837 486.50024,377.08010 C 487.67395,375.82822 488.12803,374.85508 487.87723,373.26505 L 496.35996,368.52763 C 496.97328,370.45533 496.70314,371.78079 495.28480,373.35699 C 488.10977,381.56676 479.54058,388.47571 472.27621,396.61091 C 457.95901,411.58196 444.06746,426.95177 430.03261,442.18589 C 424.59302,448.01854 419.14837,453.96812 412.68316,458.69214 C 410.42654,460.33054 410.16941,461.03900 407.88268,462.57553 C 407.15463,460.99807 406.30728,460.73847 405.62917,459.17185 z "
+ sodipodi:nodetypes="cccccccccccc" />
+ </g>
+ <g
+ id="Flower1-2Inner">
+ <path
+ style="fill:url(#linearGradient22654);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 209.97044,727.33005 C 249.69458,536.27586 230.77833,522.08867 275.23153,536.27586 C 319.68473,550.46305 371.70443,592.07882 357.51724,628.96552 C 343.33005,665.85222 296.98522,654.50246 259.15271,679.09360 C 221.32020,703.68473 209.97044,727.33005 209.97044,727.33005 z "
+ id="path18882" />
+ <path
+ style="fill:url(#linearGradient19520);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.93750000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 206.18719,726.38424 C 251.58621,643.15271 307.38916,593.97044 341.43842,610.04926 C 375.48768,626.12808 432.23645,641.26108 430.34483,671.52709 C 428.45320,701.79310 409.53695,762.32512 366.97537,758.54187 C 324.41379,754.75862 206.18719,726.38424 206.18719,726.38424 z "
+ id="path18883" />
+ <path
+ style="fill:url(#radialGradient22029);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 219.42857,727.33005 C 253.47783,561.81281 293.20197,533.43842 240.23645,536.27586 C 187.27094,539.11330 114.44335,556.13793 129.57635,587.34975 C 144.70936,618.56158 220.37438,722.60099 220.37438,722.60099"
+ id="path18885" />
+ <path
+ style="fill:url(#linearGradient21403);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 222.26601,725.43842 C 193.89163,638.42365 151.33005,593.97044 120.11823,588.29557 C 88.906404,582.62069 48.236453,654.50246 69.044335,672.47291 C 89.852217,690.44335 97.418719,742.46305 111.60591,733.00493 C 125.79310,723.54680 213.75369,720.70936 213.75369,720.70936"
+ id="path18886" />
+ <path
+ style="fill:url(#linearGradient20778);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.93750000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 219.42857,717.87192 C 124.84729,697.06404 63.369458,713.14286 74.719212,749.08374 C 86.068966,785.02463 104.98522,832.31527 145.65517,821.91133 C 186.32512,811.50739 219.42857,717.87192 219.42857,717.87192 z "
+ id="path18887" />
+ <path
+ style="fill:url(#linearGradient20153);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.93750000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 233.61576,704.63054 C 101.20197,814.34483 107.82266,806.77833 135.25123,841.77340 C 162.67980,876.76847 174.02956,879.60591 219.42857,879.60591 C 264.82759,879.60591 296.03941,907.03448 280.90640,831.36946 C 265.77340,755.70443 233.61576,704.63054 233.61576,704.63054 z "
+ id="path18888" />
+ <path
+ style="fill:url(#linearGradient19524);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.93750000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 223.21182,718.81773 C 369.81281,718.81773 434.12808,735.84236 403.86207,781.24138 C 373.59606,826.64039 393.45813,877.71429 358.46305,880.55172 C 323.46798,883.38916 247.80296,850.28571 239.29064,825.69458 C 230.77833,801.10345 223.21182,718.81773 223.21182,718.81773 z "
+ id="path18884" />
+ </g>
+ <g
+ id="Flower1-3Petals"
+ transform="matrix(-0.282158,0.541211,-0.750396,-7.402685e-2,1045.228,511.3649)">
+ <path
+ style="fill:#5047dd;fill-opacity:0.84491980;stroke:#000000;stroke-width:1.7207220;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 370.56250,305.90625 C 355.90456,305.38356 341.55481,308.54187 333.40625,315.62500 C 327.97388,320.34708 347.33067,340.30951 329.62500,358.15625 C 312.69793,375.21818 287.66656,347.56368 283.21875,354.84375 C 273.25755,371.14806 265.37524,399.59673 267.90625,419.25000 C 269.17176,429.07664 308.54541,414.73263 315.68750,440.15625 C 323.48351,467.90766 284.89523,475.15541 290.03125,485.43750 C 300.30331,506.00168 311.03251,519.94295 326.87500,536.84375 C 334.79624,545.29416 351.90911,508.22838 377.75000,529.43750 C 401.05114,548.56211 370.17897,574.05542 379.65625,579.75000 C 398.61081,591.13920 418.51671,599.28318 438.12500,603.31250 C 447.92915,605.32715 439.41058,564.23371 467.18750,561.43750 C 489.51695,559.18965 496.47318,597.74565 505.37500,595.15625 C 523.21009,589.96826 540.88473,571.83246 552.37500,559.75000 C 558.12014,553.70878 523.50061,541.31380 533.00000,519.28125 C 543.82177,494.18176 562.07926,511.83883 564.31250,503.56250 C 567.67279,491.10942 567.09229,482.38503 565.46875,464.25000 C 564.65698,455.18248 540.01389,464.92575 532.25000,442.96875 C 522.65141,415.82302 549.39077,413.22085 545.21875,404.56250 C 538.82970,391.27821 534.77490,386.96586 519.84375,371.59375 C 512.37815,363.90770 500.37158,387.44121 480.50000,372.06250 C 459.85357,356.08416 479.40003,342.40562 470.31250,336.03125 C 459.54164,328.47614 449.37353,322.48497 439.65625,321.37500 C 429.76884,320.24559 433.66906,341.25860 409.21875,337.34375 C 385.30054,333.51408 394.77072,309.66850 385.12500,307.65625 C 380.38656,306.66773 375.44848,306.08048 370.56250,305.90625 z M 404.37500,362.59375 C 442.37861,362.88532 485.68016,390.09716 503.87500,422.56250 C 524.74616,459.80323 517.44770,509.29724 480.65625,524.43750 C 443.92960,539.55112 390.71795,510.29037 365.28125,466.06250 C 339.84455,421.83464 347.42926,373.16413 388.50000,364.18750 C 393.62397,363.06758 398.94591,362.55210 404.37500,362.59375 z "
+ id="path18819" />
+ <path
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="0.0000000"
+ inkscape:original="M 370.56250 305.90625 C 355.90456 305.38356 341.55481 308.54187 333.40625 315.62500 C 327.97388 320.34708 347.33067 340.30951 329.62500 358.15625 C 312.69793 375.21818 287.66656 347.56368 283.21875 354.84375 C 273.25755 371.14806 265.37524 399.59673 267.90625 419.25000 C 269.17176 429.07664 308.54541 414.73263 315.68750 440.15625 C 323.48351 467.90766 284.89523 475.15541 290.03125 485.43750 C 300.30331 506.00168 311.03251 519.94295 326.87500 536.84375 C 334.79624 545.29416 351.90911 508.22838 377.75000 529.43750 C 401.05114 548.56211 370.17897 574.05542 379.65625 579.75000 C 398.61081 591.13920 418.51671 599.28318 438.12500 603.31250 C 447.92915 605.32715 439.41058 564.23371 467.18750 561.43750 C 489.51695 559.18965 496.47318 597.74565 505.37500 595.15625 C 523.21009 589.96826 540.88473 571.83246 552.37500 559.75000 C 558.12014 553.70878 523.50061 541.31380 533.00000 519.28125 C 543.82177 494.18176 562.07926 511.83883 564.31250 503.56250 C 567.67279 491.10942 567.09229 482.38503 565.46875 464.25000 C 564.65698 455.18248 540.01389 464.92575 532.25000 442.96875 C 522.65141 415.82302 549.39077 413.22085 545.21875 404.56250 C 538.82970 391.27821 534.77490 386.96586 519.84375 371.59375 C 512.37815 363.90770 500.37158 387.44121 480.50000 372.06250 C 459.85357 356.08416 479.40003 342.40562 470.31250 336.03125 C 459.54164 328.47614 449.37353 322.48497 439.65625 321.37500 C 429.76884 320.24559 433.66906 341.25860 409.21875 337.34375 C 385.30054 333.51408 394.77072 309.66850 385.12500 307.65625 C 380.38656 306.66773 375.44848 306.08048 370.56250 305.90625 z M 404.37500 362.59375 C 442.37861 362.88532 485.68016 390.09716 503.87500 422.56250 C 524.74616 459.80323 517.44770 509.29724 480.65625 524.43750 C 443.92960 539.55112 390.71795 510.29037 365.28125 466.06250 C 339.84455 421.83464 347.42926 373.16413 388.50000 364.18750 C 393.62397 363.06758 398.94591 362.55210 404.37500 362.59375 z "
+ xlink:href="#path4825"
+ style="fill:#564ce2;fill-opacity:0.72192514;stroke:#000000;stroke-width:1.7207220;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ id="path18820"
+ inkscape:href="#path4825"
+ d="M 370.56250,305.90625 C 355.90456,305.38356 341.55481,308.54187 333.40625,315.62500 C 327.97388,320.34708 347.33067,340.30951 329.62500,358.15625 C 312.69793,375.21818 287.66656,347.56368 283.21875,354.84375 C 273.25755,371.14806 265.37524,399.59673 267.90625,419.25000 C 269.17176,429.07664 308.54541,414.73263 315.68750,440.15625 C 323.48351,467.90766 284.89523,475.15541 290.03125,485.43750 C 300.30331,506.00168 311.03251,519.94295 326.87500,536.84375 C 334.79624,545.29416 351.90911,508.22838 377.75000,529.43750 C 401.05114,548.56211 370.17897,574.05542 379.65625,579.75000 C 398.61081,591.13920 418.51671,599.28318 438.12500,603.31250 C 447.92915,605.32715 439.41058,564.23371 467.18750,561.43750 C 489.51695,559.18965 496.47318,597.74565 505.37500,595.15625 C 523.21009,589.96826 540.88473,571.83246 552.37500,559.75000 C 558.12014,553.70878 523.50061,541.31380 533.00000,519.28125 C 543.82177,494.18176 562.07926,511.83883 564.31250,503.56250 C 567.67279,491.10942 567.09229,482.38503 565.46875,464.25000 C 564.65698,455.18248 540.01389,464.92575 532.25000,442.96875 C 522.65141,415.82302 549.39077,413.22085 545.21875,404.56250 C 538.82970,391.27821 534.77490,386.96586 519.84375,371.59375 C 512.37815,363.90770 500.37158,387.44121 480.50000,372.06250 C 459.85357,356.08416 479.40003,342.40562 470.31250,336.03125 C 459.54164,328.47614 449.37353,322.48497 439.65625,321.37500 C 429.76884,320.24559 433.66906,341.25860 409.21875,337.34375 C 385.30054,333.51408 394.77072,309.66850 385.12500,307.65625 C 380.38656,306.66773 375.44848,306.08048 370.56250,305.90625 z M 404.37500,362.59375 C 442.37861,362.88532 485.68016,390.09716 503.87500,422.56250 C 524.74616,459.80323 517.44770,509.29724 480.65625,524.43750 C 443.92960,539.55112 390.71795,510.29037 365.28125,466.06250 C 339.84455,421.83464 347.42926,373.16413 388.50000,364.18750 C 393.62397,363.06758 398.94591,362.55210 404.37500,362.59375 z " />
+ <path
+ style="fill:url(#radialGradient18829);fill-opacity:1.0000000;stroke:#000000;stroke-width:1.7138077;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 380.12958,297.43595 C 365.86249,296.90326 351.89541,300.12208 343.96414,307.34090 C 338.67664,312.15342 357.51725,332.49828 340.28372,350.68690 C 323.80802,368.07567 299.44415,339.89140 295.11493,347.31096 C 285.41937,363.92759 277.74725,392.92123 280.21077,412.95101 C 281.44254,422.96589 319.76626,408.34710 326.71788,434.25775 C 334.30601,462.54078 296.74672,469.92735 301.74578,480.40644 C 311.74392,501.36456 322.18703,515.57289 337.60706,532.79745 C 345.31706,541.40974 361.97361,503.63391 387.12541,525.24932 C 409.80520,544.74031 379.75628,570.72197 388.98084,576.52564 C 407.42996,588.13303 426.80503,596.43301 445.89044,600.53952 C 455.43316,602.59276 447.14175,560.71211 474.17796,557.86234 C 495.91199,555.57142 502.68271,594.86602 511.34716,592.22703 C 528.70666,586.93964 545.90998,568.45644 557.09385,556.14252 C 562.68579,549.98555 528.98942,537.35313 538.23552,514.89853 C 548.76870,489.31821 566.53935,507.31354 568.71302,498.87865 C 571.98372,486.18700 571.41869,477.29549 569.83844,458.81305 C 569.04832,449.57183 545.06237,459.50174 537.50550,437.12411 C 528.16288,409.45836 554.18920,406.80636 550.12843,397.98214 C 543.90974,384.44336 539.96307,380.04841 525.43007,364.38181 C 518.16357,356.54852 506.47716,380.53287 487.13549,364.85955 C 467.03960,348.57510 486.06484,334.63454 477.21964,328.13807 C 466.73600,320.43822 456.83902,314.33228 447.38086,313.20105 C 437.75712,312.05000 441.55333,333.46555 417.75501,329.47570 C 394.47461,325.57267 403.69226,301.27029 394.30375,299.21948 C 389.69169,298.21202 384.88527,297.61353 380.12958,297.43595 z M 413.04042,355.20943 C 450.03063,355.50656 492.17750,383.23969 509.88715,416.32696 C 530.20177,454.28108 523.09793,504.72324 487.28757,520.15355 C 451.54027,535.55668 399.74756,505.73540 374.98916,460.66029 C 350.23075,415.58516 357.61321,365.98228 397.58875,356.83369 C 402.57609,355.69231 407.75611,355.16696 413.04042,355.20943 z "
+ id="path18821" />
+ <path
+ style="fill:#638ae3;fill-opacity:0.53475934;fill-rule:evenodd;stroke:#000000;stroke-width:1.4538000;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;stroke-miterlimit:4.0000000;stroke-dasharray:none;"
+ d="M 378.47470,577.81411 C 378.41896,575.30523 385.62077,574.05338 386.68118,574.84545 C 392.70466,579.95068 411.33467,593.50542 447.38730,601.10327 C 443.61727,602.55639 444.73008,602.27386 440.53021,603.54017 C 435.26683,603.21121 387.98723,587.44481 378.47470,577.81411 z "
+ id="path18822"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#5492d5;fill-opacity:0.33155081;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 448.70315,329.05232 C 414.82014,343.52661 440.80808,340.23700 445.08458,347.80311 C 449.36107,355.36922 485.87577,370.17247 493.44188,381.68612 C 501.00799,393.19976 515.81124,405.70029 519.75878,420.50355 C 523.70631,435.30680 522.71943,465.90020 531.60138,459.97890 C 540.48334,454.05759 519.10086,423.13524 523.04839,401.75275 C 526.99593,380.37027 513.50852,380.04131 495.41565,372.47520 C 477.32278,364.90909 451.99276,352.73753 453.30861,343.52661 C 454.62445,334.31570 448.70315,329.05232 448.70315,329.05232 z "
+ id="path18823" />
+ <path
+ style="fill:url(#radialGradient18830);fill-opacity:1.0000000;stroke:none;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 539.43027,532.41062 C 539.43027,539.40171 544.55840,574.25612 534.48034,574.25612 C 524.40229,574.25612 475.43149,576.39300 475.43149,569.40191 C 475.43149,562.41083 493.88434,522.82888 503.96239,522.82888 C 514.04045,522.82888 539.43027,525.41954 539.43027,532.41062 z "
+ id="path18824"
+ sodipodi:nodetypes="ccccc"
+ transform="matrix(0.624661,0.780896,-0.780896,0.624661,623.2822,-194.2138)" />
+ <path
+ style="fill:url(#radialGradient18831);fill-opacity:1.0000000;stroke:none;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 466.62375,572.09687 C 466.62375,583.75974 447.16650,585.70506 438.72273,585.70506 C 430.27895,585.70506 413.31825,581.76117 413.31825,570.09830 C 389.07901,512.80764 422.08743,519.04264 443.58671,522.23015 C 466.15531,533.76777 473.08623,541.59775 466.62375,572.09687 z "
+ id="path18825"
+ sodipodi:nodetypes="ccccc"
+ transform="matrix(0.943927,0.330155,-0.357257,1.021414,211.1143,-156.7594)" />
+ <path
+ style="fill:#85c8ef;fill-opacity:0.14973260;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 317.44761,367.86974 C 306.92085,392.21288 316.46073,375.43585 330.93502,419.84562 C 345.40932,464.25539 329.61918,472.47942 364.81803,490.57229 C 400.01688,508.66516 393.76662,527.74491 425.01794,529.38972 C 456.26926,531.03453 452.32172,552.41701 489.16538,535.63998 C 526.00904,518.86296 555.28660,489.58540 552.98387,468.53188 C 551.01010,445.17564 536.20685,486.95372 518.44293,505.37555 C 491.79707,525.44218 455.94030,534.65310 426.33378,523.13946 C 396.72727,511.62581 379.62129,494.51983 369.75245,468.20293 C 359.88361,441.88603 345.40932,410.96367 352.97542,395.17353 C 360.54153,379.38339 362.51530,363.59325 384.88467,350.76376 C 407.25403,337.93427 404.62234,323.78894 385.21362,317.86763 C 365.80491,311.94633 372.05518,319.18348 355.93608,344.51350 C 339.81697,369.84351 325.34268,350.76375 317.44761,367.86974 z "
+ id="path18826"
+ sodipodi:nodetypes="cccccccccccccc" />
+ <path
+ style="fill:#2d84e6;fill-opacity:0.54901963;fill-rule:evenodd;stroke:#000000;stroke-width:1.5303158;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;stroke-miterlimit:4.0000000;stroke-dasharray:none;"
+ d="M 331.84343,317.12090 C 338.32897,332.25383 340.76105,348.73791 330.76251,355.22345 C 355.62374,348.46767 345.62521,323.87668 342.11221,308.47352 C 331.84343,311.44606 331.84343,318.47205 331.84343,317.12090 z "
+ id="path18827"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:#5d9ee5;fill-opacity:0.52406418;fill-rule:evenodd;stroke:#000000;stroke-width:1.6259605;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000;stroke-dasharray:none;"
+ d="M 283.74235,353.60207 C 288.60651,349.54860 288.54298,347.43906 295.56898,346.35814 C 288.54298,355.27575 275.09497,401.43291 281.04004,416.29561 C 294.82181,422.78115 314.81889,411.16122 326.43882,432.77969 C 330.49228,463.58600 308.60359,464.93716 301.30736,477.36777 C 302.92874,491.14954 322.11512,518.71309 339.40990,534.92693 C 331.84343,540.87202 329.51836,537.08182 327.08628,538.16275 C 314.92590,526.54282 295.09205,498.71601 290.22789,482.77239 C 296.17296,468.72039 317.25097,469.53108 317.25097,443.04846 C 311.84635,416.56584 287.25535,425.75368 269.96058,421.97046 C 262.93457,407.37799 276.44612,368.19453 283.74235,353.60207 z "
+ id="path18828"
+ sodipodi:nodetypes="ccccccccccc" />
+ </g>
+ <path
+ style="fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000;stroke-dasharray:none;"
+ d="M 601.82447,638.74165 C 604.78515,633.28436 601.75731,634.85749 601.48173,632.48572"
+ id="path14427"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 653.57402,632.76380 C 650.55685,628.18560 651.39703,629.58291 652.52800,626.15623"
+ id="path14428"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 684.69400,728.40941 C 681.32519,721.19393 680.05554,724.52525 679.77996,722.15348"
+ id="path14429"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 509.57814,781.15516 C 507.26424,780.26917 507.75279,779.73247 506.94975,778.41561"
+ id="path14430"
+ sodipodi:nodetypes="cc" />
+ <g
+ id="Flower1-2Petals"
+ transform="matrix(1.665396,0.955877,-1.165744,1.230002,25.78933,-246.9053)">
+ <path
+ style="fill:#5047dd;fill-opacity:0.84491980;stroke:#000000;stroke-width:1.7207220;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 370.56250,305.90625 C 355.90456,305.38356 341.55481,308.54187 333.40625,315.62500 C 327.97388,320.34708 347.33067,340.30951 329.62500,358.15625 C 312.69793,375.21818 287.66656,347.56368 283.21875,354.84375 C 273.25755,371.14806 265.37524,399.59673 267.90625,419.25000 C 269.17176,429.07664 308.54541,414.73263 315.68750,440.15625 C 323.48351,467.90766 284.89523,475.15541 290.03125,485.43750 C 300.30331,506.00168 311.03251,519.94295 326.87500,536.84375 C 334.79624,545.29416 351.90911,508.22838 377.75000,529.43750 C 401.05114,548.56211 370.17897,574.05542 379.65625,579.75000 C 398.61081,591.13920 418.51671,599.28318 438.12500,603.31250 C 447.92915,605.32715 439.41058,564.23371 467.18750,561.43750 C 489.51695,559.18965 496.47318,597.74565 505.37500,595.15625 C 523.21009,589.96826 540.88473,571.83246 552.37500,559.75000 C 558.12014,553.70878 523.50061,541.31380 533.00000,519.28125 C 543.82177,494.18176 562.07926,511.83883 564.31250,503.56250 C 567.67279,491.10942 567.09229,482.38503 565.46875,464.25000 C 564.65698,455.18248 540.01389,464.92575 532.25000,442.96875 C 522.65141,415.82302 549.39077,413.22085 545.21875,404.56250 C 538.82970,391.27821 534.77490,386.96586 519.84375,371.59375 C 512.37815,363.90770 500.37158,387.44121 480.50000,372.06250 C 459.85357,356.08416 479.40003,342.40562 470.31250,336.03125 C 459.54164,328.47614 449.37353,322.48497 439.65625,321.37500 C 429.76884,320.24559 433.66906,341.25860 409.21875,337.34375 C 385.30054,333.51408 394.77072,309.66850 385.12500,307.65625 C 380.38656,306.66773 375.44848,306.08048 370.56250,305.90625 z M 404.37500,362.59375 C 442.37861,362.88532 485.68016,390.09716 503.87500,422.56250 C 524.74616,459.80323 517.44770,509.29724 480.65625,524.43750 C 443.92960,539.55112 390.71795,510.29037 365.28125,466.06250 C 339.84455,421.83464 347.42926,373.16413 388.50000,364.18750 C 393.62397,363.06758 398.94591,362.55210 404.37500,362.59375 z "
+ id="path18797" />
+ <path
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="0.0000000"
+ inkscape:original="M 370.56250 305.90625 C 355.90456 305.38356 341.55481 308.54187 333.40625 315.62500 C 327.97388 320.34708 347.33067 340.30951 329.62500 358.15625 C 312.69793 375.21818 287.66656 347.56368 283.21875 354.84375 C 273.25755 371.14806 265.37524 399.59673 267.90625 419.25000 C 269.17176 429.07664 308.54541 414.73263 315.68750 440.15625 C 323.48351 467.90766 284.89523 475.15541 290.03125 485.43750 C 300.30331 506.00168 311.03251 519.94295 326.87500 536.84375 C 334.79624 545.29416 351.90911 508.22838 377.75000 529.43750 C 401.05114 548.56211 370.17897 574.05542 379.65625 579.75000 C 398.61081 591.13920 418.51671 599.28318 438.12500 603.31250 C 447.92915 605.32715 439.41058 564.23371 467.18750 561.43750 C 489.51695 559.18965 496.47318 597.74565 505.37500 595.15625 C 523.21009 589.96826 540.88473 571.83246 552.37500 559.75000 C 558.12014 553.70878 523.50061 541.31380 533.00000 519.28125 C 543.82177 494.18176 562.07926 511.83883 564.31250 503.56250 C 567.67279 491.10942 567.09229 482.38503 565.46875 464.25000 C 564.65698 455.18248 540.01389 464.92575 532.25000 442.96875 C 522.65141 415.82302 549.39077 413.22085 545.21875 404.56250 C 538.82970 391.27821 534.77490 386.96586 519.84375 371.59375 C 512.37815 363.90770 500.37158 387.44121 480.50000 372.06250 C 459.85357 356.08416 479.40003 342.40562 470.31250 336.03125 C 459.54164 328.47614 449.37353 322.48497 439.65625 321.37500 C 429.76884 320.24559 433.66906 341.25860 409.21875 337.34375 C 385.30054 333.51408 394.77072 309.66850 385.12500 307.65625 C 380.38656 306.66773 375.44848 306.08048 370.56250 305.90625 z M 404.37500 362.59375 C 442.37861 362.88532 485.68016 390.09716 503.87500 422.56250 C 524.74616 459.80323 517.44770 509.29724 480.65625 524.43750 C 443.92960 539.55112 390.71795 510.29037 365.28125 466.06250 C 339.84455 421.83464 347.42926 373.16413 388.50000 364.18750 C 393.62397 363.06758 398.94591 362.55210 404.37500 362.59375 z "
+ xlink:href="#path4825"
+ style="fill:#564ce2;fill-opacity:0.72192514;stroke:#000000;stroke-width:1.7207220;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ id="path18798"
+ inkscape:href="#path4825"
+ d="M 370.56250,305.90625 C 355.90456,305.38356 341.55481,308.54187 333.40625,315.62500 C 327.97388,320.34708 347.33067,340.30951 329.62500,358.15625 C 312.69793,375.21818 287.66656,347.56368 283.21875,354.84375 C 273.25755,371.14806 265.37524,399.59673 267.90625,419.25000 C 269.17176,429.07664 308.54541,414.73263 315.68750,440.15625 C 323.48351,467.90766 284.89523,475.15541 290.03125,485.43750 C 300.30331,506.00168 311.03251,519.94295 326.87500,536.84375 C 334.79624,545.29416 351.90911,508.22838 377.75000,529.43750 C 401.05114,548.56211 370.17897,574.05542 379.65625,579.75000 C 398.61081,591.13920 418.51671,599.28318 438.12500,603.31250 C 447.92915,605.32715 439.41058,564.23371 467.18750,561.43750 C 489.51695,559.18965 496.47318,597.74565 505.37500,595.15625 C 523.21009,589.96826 540.88473,571.83246 552.37500,559.75000 C 558.12014,553.70878 523.50061,541.31380 533.00000,519.28125 C 543.82177,494.18176 562.07926,511.83883 564.31250,503.56250 C 567.67279,491.10942 567.09229,482.38503 565.46875,464.25000 C 564.65698,455.18248 540.01389,464.92575 532.25000,442.96875 C 522.65141,415.82302 549.39077,413.22085 545.21875,404.56250 C 538.82970,391.27821 534.77490,386.96586 519.84375,371.59375 C 512.37815,363.90770 500.37158,387.44121 480.50000,372.06250 C 459.85357,356.08416 479.40003,342.40562 470.31250,336.03125 C 459.54164,328.47614 449.37353,322.48497 439.65625,321.37500 C 429.76884,320.24559 433.66906,341.25860 409.21875,337.34375 C 385.30054,333.51408 394.77072,309.66850 385.12500,307.65625 C 380.38656,306.66773 375.44848,306.08048 370.56250,305.90625 z M 404.37500,362.59375 C 442.37861,362.88532 485.68016,390.09716 503.87500,422.56250 C 524.74616,459.80323 517.44770,509.29724 480.65625,524.43750 C 443.92960,539.55112 390.71795,510.29037 365.28125,466.06250 C 339.84455,421.83464 347.42926,373.16413 388.50000,364.18750 C 393.62397,363.06758 398.94591,362.55210 404.37500,362.59375 z " />
+ <path
+ style="fill:url(#radialGradient18810);fill-opacity:1.0000000;stroke:#000000;stroke-width:1.7138077;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 380.12958,297.43595 C 365.86249,296.90326 351.89541,300.12208 343.96414,307.34090 C 338.67664,312.15342 357.51725,332.49828 340.28372,350.68690 C 323.80802,368.07567 299.44415,339.89140 295.11493,347.31096 C 285.41937,363.92759 277.74725,392.92123 280.21077,412.95101 C 281.44254,422.96589 319.76626,408.34710 326.71788,434.25775 C 334.30601,462.54078 296.74672,469.92735 301.74578,480.40644 C 311.74392,501.36456 322.18703,515.57289 337.60706,532.79745 C 345.31706,541.40974 361.97361,503.63391 387.12541,525.24932 C 409.80520,544.74031 379.75628,570.72197 388.98084,576.52564 C 407.42996,588.13303 426.80503,596.43301 445.89044,600.53952 C 455.43316,602.59276 447.14175,560.71211 474.17796,557.86234 C 495.91199,555.57142 502.68271,594.86602 511.34716,592.22703 C 528.70666,586.93964 545.90998,568.45644 557.09385,556.14252 C 562.68579,549.98555 528.98942,537.35313 538.23552,514.89853 C 548.76870,489.31821 566.53935,507.31354 568.71302,498.87865 C 571.98372,486.18700 571.41869,477.29549 569.83844,458.81305 C 569.04832,449.57183 545.06237,459.50174 537.50550,437.12411 C 528.16288,409.45836 554.18920,406.80636 550.12843,397.98214 C 543.90974,384.44336 539.96307,380.04841 525.43007,364.38181 C 518.16357,356.54852 506.47716,380.53287 487.13549,364.85955 C 467.03960,348.57510 486.06484,334.63454 477.21964,328.13807 C 466.73600,320.43822 456.83902,314.33228 447.38086,313.20105 C 437.75712,312.05000 441.55333,333.46555 417.75501,329.47570 C 394.47461,325.57267 403.69226,301.27029 394.30375,299.21948 C 389.69169,298.21202 384.88527,297.61353 380.12958,297.43595 z M 413.04042,355.20943 C 450.03063,355.50656 492.17750,383.23969 509.88715,416.32696 C 530.20177,454.28108 523.09793,504.72324 487.28757,520.15355 C 451.54027,535.55668 399.74756,505.73540 374.98916,460.66029 C 350.23075,415.58516 357.61321,365.98228 397.58875,356.83369 C 402.57609,355.69231 407.75611,355.16696 413.04042,355.20943 z "
+ id="path18799" />
+ <path
+ style="fill:#638ae3;fill-opacity:0.53475934;fill-rule:evenodd;stroke:#000000;stroke-width:1.7150134;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;stroke-miterlimit:4.0000000;stroke-dasharray:none;"
+ d="M 378.47470,577.81411 C 378.41896,575.30523 385.62077,574.05338 386.68118,574.84545 C 392.70466,579.95068 413.90520,592.34120 446.41145,601.02821 C 442.64142,602.48133 444.73008,602.27386 440.53021,603.54017 C 435.26683,603.21121 387.98723,587.44481 378.47470,577.81411 z "
+ id="path18800"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#5492d5;fill-opacity:0.33155081;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 448.70315,329.05232 C 414.82014,343.52661 440.80808,340.23700 445.08458,347.80311 C 449.36107,355.36922 485.87577,370.17247 493.44188,381.68612 C 501.00799,393.19976 515.81124,405.70029 519.75878,420.50355 C 523.70631,435.30680 522.71943,465.90020 531.60138,459.97890 C 540.48334,454.05759 519.10086,423.13524 523.04839,401.75275 C 526.99593,380.37027 513.50852,380.04131 495.41565,372.47520 C 477.32278,364.90909 451.99276,352.73753 453.30861,343.52661 C 454.62445,334.31570 448.70315,329.05232 448.70315,329.05232 z "
+ id="path18801" />
+ <path
+ style="fill:url(#radialGradient18811);fill-opacity:1.0000000;stroke:none;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 539.43027,532.41062 C 539.43027,539.40171 544.55840,574.25612 534.48034,574.25612 C 524.40229,574.25612 475.43149,576.39300 475.43149,569.40191 C 475.43149,562.41083 493.88434,522.82888 503.96239,522.82888 C 514.04045,522.82888 539.43027,525.41954 539.43027,532.41062 z "
+ id="path18802"
+ sodipodi:nodetypes="ccccc"
+ transform="matrix(0.624661,0.780896,-0.780896,0.624661,623.2822,-194.2138)" />
+ <path
+ style="fill:url(#radialGradient18812);fill-opacity:1.0000000;stroke:none;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 466.62375,572.09687 C 466.62375,583.75974 447.16650,585.70506 438.72273,585.70506 C 430.27895,585.70506 413.31825,581.76117 413.31825,570.09830 C 389.07901,512.80764 422.08743,519.04264 443.58671,522.23015 C 466.15531,533.76777 473.08623,541.59775 466.62375,572.09687 z "
+ id="path18803"
+ sodipodi:nodetypes="ccccc"
+ transform="matrix(0.943927,0.330155,-0.357257,1.021414,211.1143,-156.7594)" />
+ <path
+ style="fill:#85c8ef;fill-opacity:0.14973260;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 317.44761,367.86974 C 306.92085,392.21288 316.46073,375.43585 330.93502,419.84562 C 345.40932,464.25539 329.61918,472.47942 364.81803,490.57229 C 400.01688,508.66516 393.76662,527.74491 425.01794,529.38972 C 456.26926,531.03453 452.32172,552.41701 489.16538,535.63998 C 526.00904,518.86296 555.28660,489.58540 552.98387,468.53188 C 551.01010,445.17564 536.20685,486.95372 518.44293,505.37555 C 491.79707,525.44218 455.94030,534.65310 426.33378,523.13946 C 396.72727,511.62581 379.62129,494.51983 369.75245,468.20293 C 359.88361,441.88603 345.40932,410.96367 352.97542,395.17353 C 360.54153,379.38339 362.51530,363.59325 384.88467,350.76376 C 407.25403,337.93427 404.62234,323.78894 385.21362,317.86763 C 365.80491,311.94633 372.05518,319.18348 355.93608,344.51350 C 339.81697,369.84351 325.34268,350.76375 317.44761,367.86974 z "
+ id="path18804"
+ sodipodi:nodetypes="cccccccccccccc" />
+ <path
+ style="fill:#2d84e6;fill-opacity:0.54901963;fill-rule:evenodd;stroke:#000000;stroke-width:1.7150134;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;stroke-miterlimit:4.0000000;stroke-dasharray:none;"
+ d="M 331.84343,317.12090 C 338.32897,332.25383 340.76105,348.73791 330.76251,355.22345 C 355.62374,348.46767 345.62521,323.87668 342.11221,308.47352 C 331.84343,311.44606 331.84343,318.47205 331.84343,317.12090 z "
+ id="path18805"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:#5d9ee5;fill-opacity:0.52406418;fill-rule:evenodd;stroke:#000000;stroke-width:2.0242781;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000;stroke-dasharray:none;"
+ d="M 283.74235,353.60207 C 288.60651,349.54860 288.47059,348.08490 295.49659,347.00398 C 288.47059,355.92159 275.09497,401.43291 281.04004,416.29561 C 294.82181,422.78115 314.81889,411.16122 326.43882,432.77969 C 330.49228,463.58600 308.60359,464.93716 301.30736,477.36777 C 302.92874,491.14954 322.11512,518.71309 339.40990,534.92693 C 331.84343,540.87202 331.03274,536.27809 328.60066,537.35902 C 316.44028,525.73909 295.09205,498.71601 290.22789,482.77239 C 296.17296,468.72039 317.25097,469.53108 317.25097,443.04846 C 311.84635,416.56584 287.25535,425.75368 269.96058,421.97046 C 262.93457,407.37799 276.44612,368.19453 283.74235,353.60207 z "
+ id="path18806"
+ sodipodi:nodetypes="ccccccccccc" />
+ </g>
+ <path
+ style="fill:#000000;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:2.8125000;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;stroke-miterlimit:4.0000000;stroke-dasharray:none;"
+ d="M 372.11638,913.35731 C 383.39263,913.86987 387.49308,910.79453 387.49308,910.79453"
+ id="path14398"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:2.8125000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000;"
+ d="M -56.381265,623.47752 C -44.592458,621.42730 -36.391552,621.93986 -28.190640,627.57798"
+ id="path14419"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:2.8125000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M -18.195768,528.97789 C -7.4320755,533.59091 -1.7939544,536.15369 9.4823000,533.59090"
+ id="path14420"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:2.8125000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 369.29732,565.88199 C 381.08613,563.83177 391.33726,558.19365 399.53817,563.83177"
+ id="path14423"
+ sodipodi:nodetypes="cc" />
+ <g
+ id="Flower1-3Pestils"
+ transform="translate(1.891626,11.34975)">
+ <path
+ style="fill:#78bb0b;fill-opacity:1.0000000;fill-rule:nonzero;stroke:#000000;stroke-width:1.0000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ id="path18807"
+ d="M 603.27927,666.47628 C 609.66972,677.12850 609.84624,674.89557 618.32858,683.92662 C 629.06556,695.13796 640.80583,705.37798 653.31781,714.56213 C 657.70974,717.59349 661.99817,720.93503 666.91489,723.08809 C 668.57801,723.83260 669.84377,725.20836 671.28408,726.29745 C 671.73779,726.63548 672.21438,726.94043 672.67953,727.26191 L 672.97185,736.81564 C 672.49767,736.51023 672.01888,736.21197 671.54932,735.89940 C 670.11202,734.92971 668.82935,733.77356 667.38428,732.83496 C 662.35263,730.45132 658.08474,726.69521 653.53958,723.54860 C 641.10645,714.11082 629.25402,703.88474 618.39396,692.66144 C 609.93913,683.78578 602.58476,678.57341 595.97733,668.21781 C 598.65124,667.77125 599.47798,667.05216 603.27927,666.47628 z "
+ sodipodi:nodetypes="ccccccccccccc" />
+ <path
+ style="fill:#6a961f;fill-opacity:1.0000000;fill-rule:nonzero;stroke:#000000;stroke-width:1.0000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ id="path18808"
+ d="M 540.75331,765.89447 C 542.06714,763.06677 543.47163,760.26779 544.83577,757.45996 C 549.67833,747.21863 554.66382,737.04505 559.47924,726.79091 C 564.63623,716.12397 568.61466,704.93616 570.63934,693.24886 L 571.27240,674.80580 C 571.71540,676.41212 572.75043,674.58080 573.99547,674.35749 C 576.29811,684.64569 576.32315,691.04037 574.40886,701.50154 C 572.25135,713.19611 568.19365,724.38600 563.00112,735.07047 C 558.14280,745.37636 553.12855,755.60955 548.47253,766.00997 C 547.15796,768.89228 545.62901,771.79636 544.81786,774.85325 L 540.75331,765.89447 z "
+ sodipodi:nodetypes="ccccccccccc" />
+ <path
+ style="fill:#789744;fill-opacity:1.0000000;fill-rule:nonzero;stroke:#000000;stroke-width:1.0000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ id="path18809"
+ d="M 566.21596,792.75252 C 567.07225,790.00841 568.23459,787.28724 569.25163,784.57374 C 572.16951,776.88707 573.60538,768.74718 575.03237,760.68095 C 578.47796,740.16094 581.50373,719.57285 584.92158,699.04836 C 586.34302,688.56725 591.45622,670.58068 590.36271,669.39944 C 592.98671,668.87464 595.21861,668.31694 598.32324,667.49699 C 596.93319,678.31130 591.11786,681.16577 589.61208,691.96786 C 586.05291,712.37489 583.06932,732.87622 579.89115,753.34460 C 578.61942,761.21808 577.40858,769.19151 574.66768,776.71499 C 573.70516,779.33229 572.71275,782.01875 571.66851,784.56819 L 566.21596,792.75252 z "
+ sodipodi:nodetypes="ccccccccccc" />
+ </g>
+ <g
+ id="g9548"
+ transform="matrix(0.978021,0.208507,-0.208507,0.978021,-163.9946,644.1626)">
+ <path
+ style="fill:url(#linearGradient9551);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;"
+ d="M 43.495157,164.66019 C 276.50486,388.34951 338.64079,376.95793 423.55988,385.24272 C 508.47898,393.52751 694.88669,258.89967 724.91909,252.68608 C 754.95149,246.47249 752.88029,251.65048 765.30749,256.82848 C 748.73789,210.22653 666.92559,97.346281 611.00319,62.135921 C 555.08089,26.925563 404.91910,-13.462777 280.64726,19.676373 C 198.83496,38.317153 115.98706,135.66343 43.495157,164.66019 z "
+ id="path9549"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:#1a15c0;fill-opacity:0.058823530;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;"
+ d="M 449.21875,12.343750 C 372.55367,131.34626 351.03163,190.15459 345.31250,234.71875 C 296.43407,228.74167 250.88253,220.20102 210.06250,211.18750 C 210.18144,159.47011 307.03125,15.562500 307.03125,15.562500 C 231.73758,132.43627 211.35292,167.53740 205.28125,210.12500 C 111.44954,189.10115 46.625000,165.87500 46.625000,165.87500 C 95.278072,186.13432 149.62093,202.52998 204.53125,215.34375 C 205.73417,244.61892 210.49875,254.89076 234.81250,324.93750 C 212.11540,236.98624 209.34258,255.80079 209.75000,216.50000 C 255.62272,227.00430 301.69759,235.02520 345.12500,240.43750 C 346.64554,269.96362 353.89092,311.29960 377.53125,379.40625 C 355.00622,292.12181 351.03030,281.31222 351.31250,241.25000 C 399.42652,247.01704 443.95673,249.65958 480.81250,249.21875 C 482.09933,277.29978 486.10250,295.38014 509.81250,363.68750 C 486.91509,274.96003 484.85720,289.97427 485.34375,249.09375 C 521.11851,248.40068 549.34122,244.76072 565.71875,238.12500 C 576.82659,233.17150 593.20091,230.91691 611.78125,230.34375 C 609.02322,239.26769 604.15131,267.42325 620.50000,307.75000 C 605.49195,257.72323 612.64130,247.27739 614.87500,230.31250 C 668.07068,229.21004 737.88540,241.30570 757.40625,245.12500 C 735.98732,234.66460 664.92792,227.25580 615.21875,228.21875 C 615.22870,228.11904 615.24045,228.03777 615.25000,227.93750 C 616.41525,215.70752 675.84375,123.06250 675.84375,123.06250 C 614.59722,216.66570 616.91444,216.32105 612.43750,228.21875 C 605.01927,228.41116 598.05690,228.77061 591.93750,229.37500 C 561.08150,232.42251 544.14471,244.86783 485.50000,246.00000 C 481.12067,196.29050 582.62500,47.906250 582.62500,47.906250 C 504.83281,168.65828 486.07119,201.47841 480.75000,246.09375 C 450.57954,246.34478 409.84371,243.69470 351.53125,235.56250 C 347.17084,177.77103 449.21875,12.343750 449.21875,12.343750 z "
+ id="path9550"
+ sodipodi:nodetypes="cccccccccccccccccccccccccccccc" />
+ </g>
+ <g
+ id="g13115"
+ transform="matrix(2.038847,0.000000,0.000000,1.923867,-602.1040,-176.4593)">
+ <path
+ style="fill:#78bb0b;fill-opacity:1.0000000;fill-rule:nonzero;stroke:#000000;stroke-width:1.0000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ id="path13116"
+ d="M 394.10576,452.65823 C 399.01928,447.68858 401.87654,446.98435 407.73687,436.13585 C 415.10216,422.50139 422.71500,395.32603 424.81725,386.39695 C 432.59894,353.34510 433.66820,323.26018 433.76933,322.70386 L 436.86582,346.10363 C 436.78305,346.66155 431.47654,380.00971 415.76414,424.05417 C 411.63846,435.61913 405.50952,449.12456 398.79879,459.41352 C 397.33926,458.31987 395.32750,454.93255 394.10576,452.65823 z "
+ sodipodi:nodetypes="cssccscc" />
+ <path
+ style="fill:#6a961f;fill-opacity:1.0000000;fill-rule:nonzero;stroke:#000000;stroke-width:1.0000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ id="path13117"
+ d="M 406.15858,472.17564 C 417.16429,474.86067 430.18789,477.73672 441.18665,480.45644 C 452.68654,483.30007 472.55231,485.56865 488.72130,479.40230 C 498.71939,475.58933 522.32168,464.29434 536.51561,456.90982 L 523.55784,470.94729 C 516.62703,471.11409 482.89229,486.01332 472.25970,486.23285 C 460.37030,486.47832 457.26549,487.57828 444.51517,485.28507 C 433.17761,483.24596 423.60892,478.34693 406.89416,481.20895 C 406.40439,477.18501 406.28876,474.80137 406.15858,472.17564 z "
+ sodipodi:nodetypes="cssccsscc" />
+ <path
+ style="fill:#789744;fill-opacity:1.0000000;fill-rule:nonzero;stroke:#000000;stroke-width:1.0000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ id="path13118"
+ d="M 411.04798,444.80297 C 418.78840,442.38627 461.51519,431.25353 479.40434,421.32526 C 488.33384,415.99783 490.41674,415.55663 499.29259,410.14559 C 500.76605,409.32339 510.29122,401.84518 510.50096,400.24850 L 519.93277,398.41882 C 519.97357,400.45269 508.64877,410.70313 506.85031,411.75720 C 497.68560,417.31484 498.25071,412.11766 489.02182,417.57580 C 471.13283,427.31940 453.53736,437.57850 435.84347,447.66267 C 429.00599,451.50260 408.63164,457.08887 406.01578,457.82964 C 407.76101,448.37975 406.36461,451.04408 411.04798,444.80297 z "
+ sodipodi:nodetypes="cccccccccc" />
+ </g>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer3"
+ inkscape:label="Flower2">
+ <g
+ id="Flower2-3Inner"
+ transform="matrix(-7.845077e-2,-1.074062,0.734145,4.891352e-2,630.8127,781.1565)">
+ <path
+ style="fill:url(#linearGradient22768);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 363.71942,503.69746 C 405.38182,416.40480 356.13246,406.42348 386.55263,384.60031 C 416.97280,362.77715 422.17091,378.87475 438.04230,393.42353 C 453.91369,407.97230 475.29202,424.27152 475.29202,431.54591 C 475.29202,438.82029 363.71942,503.69746 363.71942,503.69746 z "
+ id="path22763"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:url(#linearGradient22769);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 367.02596,501.05223 C 416.62406,401.85602 391.31920,406.68287 433.64292,413.95726 C 475.96663,421.23164 474.65290,429.18691 485.58403,453.12983 C 488.89057,482.88869 517.45929,484.83995 481.74866,494.09826 C 446.03802,503.35658 367.02596,501.05223 367.02596,501.05223 z "
+ id="path22764"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:url(#linearGradient22770);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 372.31642,498.40699 C 428.52760,380.03286 430.30761,368.00419 393.27436,363.37504 C 356.24111,358.74588 364.06386,389.49281 373.98348,423.88082 C 383.90310,458.26884 400.91057,482.51346 406.86234,503.67532 C 412.81412,524.83718 372.31642,498.40699 372.31642,498.40699 z "
+ id="path22765"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:url(#radialGradient22771);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 375.62296,499.06830 C 502.59410,475.26121 536.65615,491.32284 494.99374,518.43647 C 453.33133,545.55010 458.86406,564.22584 430.51153,548.00510 C 407.36575,528.16586 406.04313,514.27839 394.80089,506.34269 C 383.55866,498.40699 375.62296,499.06830 375.62296,499.06830 z "
+ id="path22766"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:url(#radialGradient22772);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 367.24532,504.86617 C 412.21427,539.25419 477.37338,542.48056 474.06684,517.35085 C 470.76030,492.22115 440.17838,408.38916 409.09691,429.55102 C 378.01543,450.71287 376.55763,466.07702 367.24532,504.86617 z "
+ id="path22767"
+ sodipodi:nodetypes="cccc" />
+ </g>
+ <g
+ id="Flower2-3Petals"
+ transform="matrix(5.603515e-2,-0.403873,0.459878,-0.321866,687.9418,640.9019)">
+ <path
+ style="fill:#5047dd;fill-opacity:0.84491980;stroke:#000000;stroke-width:1.7207220;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 370.56250,305.90625 C 355.90456,305.38356 341.55481,308.54187 333.40625,315.62500 C 327.97388,320.34708 347.33067,340.30951 329.62500,358.15625 C 312.69793,375.21818 287.66656,347.56368 283.21875,354.84375 C 273.25755,371.14806 265.37524,399.59673 267.90625,419.25000 C 269.17176,429.07664 308.54541,414.73263 315.68750,440.15625 C 323.48351,467.90766 284.89523,475.15541 290.03125,485.43750 C 300.30331,506.00168 311.03251,519.94295 326.87500,536.84375 C 334.79624,545.29416 351.90911,508.22838 377.75000,529.43750 C 401.05114,548.56211 370.17897,574.05542 379.65625,579.75000 C 398.61081,591.13920 418.51671,599.28318 438.12500,603.31250 C 447.92915,605.32715 439.41058,564.23371 467.18750,561.43750 C 489.51695,559.18965 496.47318,597.74565 505.37500,595.15625 C 523.21009,589.96826 540.88473,571.83246 552.37500,559.75000 C 558.12014,553.70878 523.50061,541.31380 533.00000,519.28125 C 543.82177,494.18176 562.07926,511.83883 564.31250,503.56250 C 567.67279,491.10942 567.09229,482.38503 565.46875,464.25000 C 564.65698,455.18248 540.01389,464.92575 532.25000,442.96875 C 522.65141,415.82302 549.39077,413.22085 545.21875,404.56250 C 538.82970,391.27821 534.77490,386.96586 519.84375,371.59375 C 512.37815,363.90770 500.37158,387.44121 480.50000,372.06250 C 459.85357,356.08416 479.40003,342.40562 470.31250,336.03125 C 459.54164,328.47614 449.37353,322.48497 439.65625,321.37500 C 429.76884,320.24559 433.66906,341.25860 409.21875,337.34375 C 385.30054,333.51408 394.77072,309.66850 385.12500,307.65625 C 380.38656,306.66773 375.44848,306.08048 370.56250,305.90625 z M 404.37500,362.59375 C 442.37861,362.88532 485.68016,390.09716 503.87500,422.56250 C 524.74616,459.80323 517.44770,509.29724 480.65625,524.43750 C 443.92960,539.55112 390.71795,510.29037 365.28125,466.06250 C 339.84455,421.83464 347.42926,373.16413 388.50000,364.18750 C 393.62397,363.06758 398.94591,362.55210 404.37500,362.59375 z "
+ id="path18862" />
+ <path
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="0.0000000"
+ inkscape:original="M 370.56250 305.90625 C 355.90456 305.38356 341.55481 308.54187 333.40625 315.62500 C 327.97388 320.34708 347.33067 340.30951 329.62500 358.15625 C 312.69793 375.21818 287.66656 347.56368 283.21875 354.84375 C 273.25755 371.14806 265.37524 399.59673 267.90625 419.25000 C 269.17176 429.07664 308.54541 414.73263 315.68750 440.15625 C 323.48351 467.90766 284.89523 475.15541 290.03125 485.43750 C 300.30331 506.00168 311.03251 519.94295 326.87500 536.84375 C 334.79624 545.29416 351.90911 508.22838 377.75000 529.43750 C 401.05114 548.56211 370.17897 574.05542 379.65625 579.75000 C 398.61081 591.13920 418.51671 599.28318 438.12500 603.31250 C 447.92915 605.32715 439.41058 564.23371 467.18750 561.43750 C 489.51695 559.18965 496.47318 597.74565 505.37500 595.15625 C 523.21009 589.96826 540.88473 571.83246 552.37500 559.75000 C 558.12014 553.70878 523.50061 541.31380 533.00000 519.28125 C 543.82177 494.18176 562.07926 511.83883 564.31250 503.56250 C 567.67279 491.10942 567.09229 482.38503 565.46875 464.25000 C 564.65698 455.18248 540.01389 464.92575 532.25000 442.96875 C 522.65141 415.82302 549.39077 413.22085 545.21875 404.56250 C 538.82970 391.27821 534.77490 386.96586 519.84375 371.59375 C 512.37815 363.90770 500.37158 387.44121 480.50000 372.06250 C 459.85357 356.08416 479.40003 342.40562 470.31250 336.03125 C 459.54164 328.47614 449.37353 322.48497 439.65625 321.37500 C 429.76884 320.24559 433.66906 341.25860 409.21875 337.34375 C 385.30054 333.51408 394.77072 309.66850 385.12500 307.65625 C 380.38656 306.66773 375.44848 306.08048 370.56250 305.90625 z M 404.37500 362.59375 C 442.37861 362.88532 485.68016 390.09716 503.87500 422.56250 C 524.74616 459.80323 517.44770 509.29724 480.65625 524.43750 C 443.92960 539.55112 390.71795 510.29037 365.28125 466.06250 C 339.84455 421.83464 347.42926 373.16413 388.50000 364.18750 C 393.62397 363.06758 398.94591 362.55210 404.37500 362.59375 z "
+ xlink:href="#path4825"
+ style="fill:#564ce2;fill-opacity:0.72192514;stroke:#000000;stroke-width:1.7207220;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ id="path18863"
+ inkscape:href="#path4825"
+ d="M 370.56250,305.90625 C 355.90456,305.38356 341.55481,308.54187 333.40625,315.62500 C 327.97388,320.34708 347.33067,340.30951 329.62500,358.15625 C 312.69793,375.21818 287.66656,347.56368 283.21875,354.84375 C 273.25755,371.14806 265.37524,399.59673 267.90625,419.25000 C 269.17176,429.07664 308.54541,414.73263 315.68750,440.15625 C 323.48351,467.90766 284.89523,475.15541 290.03125,485.43750 C 300.30331,506.00168 311.03251,519.94295 326.87500,536.84375 C 334.79624,545.29416 351.90911,508.22838 377.75000,529.43750 C 401.05114,548.56211 370.17897,574.05542 379.65625,579.75000 C 398.61081,591.13920 418.51671,599.28318 438.12500,603.31250 C 447.92915,605.32715 439.41058,564.23371 467.18750,561.43750 C 489.51695,559.18965 496.47318,597.74565 505.37500,595.15625 C 523.21009,589.96826 540.88473,571.83246 552.37500,559.75000 C 558.12014,553.70878 523.50061,541.31380 533.00000,519.28125 C 543.82177,494.18176 562.07926,511.83883 564.31250,503.56250 C 567.67279,491.10942 567.09229,482.38503 565.46875,464.25000 C 564.65698,455.18248 540.01389,464.92575 532.25000,442.96875 C 522.65141,415.82302 549.39077,413.22085 545.21875,404.56250 C 538.82970,391.27821 534.77490,386.96586 519.84375,371.59375 C 512.37815,363.90770 500.37158,387.44121 480.50000,372.06250 C 459.85357,356.08416 479.40003,342.40562 470.31250,336.03125 C 459.54164,328.47614 449.37353,322.48497 439.65625,321.37500 C 429.76884,320.24559 433.66906,341.25860 409.21875,337.34375 C 385.30054,333.51408 394.77072,309.66850 385.12500,307.65625 C 380.38656,306.66773 375.44848,306.08048 370.56250,305.90625 z M 404.37500,362.59375 C 442.37861,362.88532 485.68016,390.09716 503.87500,422.56250 C 524.74616,459.80323 517.44770,509.29724 480.65625,524.43750 C 443.92960,539.55112 390.71795,510.29037 365.28125,466.06250 C 339.84455,421.83464 347.42926,373.16413 388.50000,364.18750 C 393.62397,363.06758 398.94591,362.55210 404.37500,362.59375 z " />
+ <path
+ style="fill:url(#radialGradient18872);fill-opacity:1.0000000;stroke:#000000;stroke-width:1.7138077;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 380.12958,297.43595 C 365.86249,296.90326 351.89541,300.12208 343.96414,307.34090 C 338.67664,312.15342 357.51725,332.49828 340.28372,350.68690 C 323.80802,368.07567 299.44415,339.89140 295.11493,347.31096 C 285.41937,363.92759 277.74725,392.92123 280.21077,412.95101 C 281.44254,422.96589 319.76626,408.34710 326.71788,434.25775 C 334.30601,462.54078 296.74672,469.92735 301.74578,480.40644 C 311.74392,501.36456 322.18703,515.57289 337.60706,532.79745 C 345.31706,541.40974 361.97361,503.63391 387.12541,525.24932 C 409.80520,544.74031 379.75628,570.72197 388.98084,576.52564 C 407.42996,588.13303 426.80503,596.43301 445.89044,600.53952 C 455.43316,602.59276 447.14175,560.71211 474.17796,557.86234 C 495.91199,555.57142 502.68271,594.86602 511.34716,592.22703 C 528.70666,586.93964 545.90998,568.45644 557.09385,556.14252 C 562.68579,549.98555 528.98942,537.35313 538.23552,514.89853 C 548.76870,489.31821 566.53935,507.31354 568.71302,498.87865 C 571.98372,486.18700 571.41869,477.29549 569.83844,458.81305 C 569.04832,449.57183 545.06237,459.50174 537.50550,437.12411 C 528.16288,409.45836 554.18920,406.80636 550.12843,397.98214 C 543.90974,384.44336 539.96307,380.04841 525.43007,364.38181 C 518.16357,356.54852 506.47716,380.53287 487.13549,364.85955 C 467.03960,348.57510 486.06484,334.63454 477.21964,328.13807 C 466.73600,320.43822 456.83902,314.33228 447.38086,313.20105 C 437.75712,312.05000 441.55333,333.46555 417.75501,329.47570 C 394.47461,325.57267 403.69226,301.27029 394.30375,299.21948 C 389.69169,298.21202 384.88527,297.61353 380.12958,297.43595 z M 413.04042,355.20943 C 450.03063,355.50656 492.17750,383.23969 509.88715,416.32696 C 530.20177,454.28108 523.09793,504.72324 487.28757,520.15355 C 451.54027,535.55668 399.74756,505.73540 374.98916,460.66029 C 350.23075,415.58516 357.61321,365.98228 397.58875,356.83369 C 402.57609,355.69231 407.75611,355.16696 413.04042,355.20943 z "
+ id="path18864" />
+ <path
+ style="fill:#638ae3;fill-opacity:0.53475934;fill-rule:evenodd;stroke:#000000;stroke-width:1.8314677;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;stroke-miterlimit:4.0000000;stroke-dasharray:none;"
+ d="M 378.47470,577.81411 C 378.41896,575.30523 385.62077,574.05338 386.68118,574.84545 C 392.70466,579.95068 411.33467,593.50542 447.38730,601.10327 C 443.61727,602.55639 444.73008,602.27386 440.53021,603.54017 C 435.26683,603.21121 387.98723,587.44481 378.47470,577.81411 z "
+ id="path18865"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#5492d5;fill-opacity:0.33155081;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 448.70315,329.05232 C 414.82014,343.52661 440.80808,340.23700 445.08458,347.80311 C 449.36107,355.36922 485.87577,370.17247 493.44188,381.68612 C 501.00799,393.19976 515.81124,405.70029 519.75878,420.50355 C 523.70631,435.30680 522.71943,465.90020 531.60138,459.97890 C 540.48334,454.05759 519.10086,423.13524 523.04839,401.75275 C 526.99593,380.37027 513.50852,380.04131 495.41565,372.47520 C 477.32278,364.90909 451.99276,352.73753 453.30861,343.52661 C 454.62445,334.31570 448.70315,329.05232 448.70315,329.05232 z "
+ id="path18866" />
+ <path
+ style="fill:url(#radialGradient18873);fill-opacity:1.0000000;stroke:none;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 539.43027,532.41062 C 539.43027,539.40171 544.55840,574.25612 534.48034,574.25612 C 524.40229,574.25612 475.43149,576.39300 475.43149,569.40191 C 475.43149,562.41083 493.88434,522.82888 503.96239,522.82888 C 514.04045,522.82888 539.43027,525.41954 539.43027,532.41062 z "
+ id="path18867"
+ sodipodi:nodetypes="ccccc"
+ transform="matrix(0.624661,0.780896,-0.780896,0.624661,623.2822,-194.2138)" />
+ <path
+ style="fill:url(#radialGradient18874);fill-opacity:1.0000000;stroke:none;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 466.62375,572.09687 C 466.62375,583.75974 447.16650,585.70506 438.72273,585.70506 C 430.27895,585.70506 413.31825,581.76117 413.31825,570.09830 C 389.07901,512.80764 422.08743,519.04264 443.58671,522.23015 C 466.15531,533.76777 473.08623,541.59775 466.62375,572.09687 z "
+ id="path18868"
+ sodipodi:nodetypes="ccccc"
+ transform="matrix(0.943927,0.330155,-0.357257,1.021414,211.1143,-156.7594)" />
+ <path
+ style="fill:#85c8ef;fill-opacity:0.14973260;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 317.44761,367.86974 C 306.92085,392.21288 316.46073,375.43585 330.93502,419.84562 C 345.40932,464.25539 329.61918,472.47942 364.81803,490.57229 C 400.01688,508.66516 393.76662,527.74491 425.01794,529.38972 C 456.26926,531.03453 452.32172,552.41701 489.16538,535.63998 C 526.00904,518.86296 555.28660,489.58540 552.98387,468.53188 C 551.01010,445.17564 536.20685,486.95372 518.44293,505.37555 C 491.79707,525.44218 455.94030,534.65310 426.33378,523.13946 C 396.72727,511.62581 379.62129,494.51983 369.75245,468.20293 C 359.88361,441.88603 345.40932,410.96367 352.97542,395.17353 C 360.54153,379.38339 362.51530,363.59325 384.88467,350.76376 C 407.25403,337.93427 404.62234,323.78894 385.21362,317.86763 C 365.80491,311.94633 372.05518,319.18348 355.93608,344.51350 C 339.81697,369.84351 325.34268,350.76375 317.44761,367.86974 z "
+ id="path18869"
+ sodipodi:nodetypes="cccccccccccccc" />
+ <path
+ style="fill:#2d84e6;fill-opacity:0.54901963;fill-rule:evenodd;stroke:#000000;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 331.84343,317.12090 C 338.32897,332.25383 340.76105,348.73791 330.76251,355.22345 C 355.62374,348.46767 345.62521,323.87668 342.11221,308.47352 C 331.84343,311.44606 331.84343,318.47205 331.84343,317.12090 z "
+ id="path18870"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:#5d9ee5;fill-opacity:0.52406418;fill-rule:evenodd;stroke:#000000;stroke-width:1.5567476;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000;stroke-dasharray:none;"
+ d="M 283.74235,353.60207 C 288.60651,349.54860 288.02148,348.39624 295.04748,347.31532 C 288.02148,356.23293 275.09497,401.43291 281.04004,416.29561 C 294.82181,422.78115 314.81889,411.16122 326.43882,432.77969 C 330.49228,463.58600 308.60359,464.93716 301.30736,477.36777 C 302.92874,491.14954 322.11512,518.71309 339.40990,534.92693 C 331.84343,540.87202 330.36636,537.11425 327.93428,538.19518 C 315.77390,526.57525 295.09205,498.71601 290.22789,482.77239 C 296.17296,468.72039 317.25097,469.53108 317.25097,443.04846 C 311.84635,416.56584 287.25535,425.75368 269.96058,421.97046 C 262.93457,407.37799 276.44612,368.19453 283.74235,353.60207 z "
+ id="path18871"
+ sodipodi:nodetypes="ccccccccccc" />
+ </g>
+ <path
+ style="fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.75000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 925.02801,368.79454 C 923.46238,367.90933 923.69100,368.31474 923.28200,365.54276"
+ id="path15683"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.75000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 896.21103,397.09074 C 897.94373,395.16396 895.74200,394.70139 895.33300,393.14458"
+ id="path15682"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.75000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 861.49177,361.15630 C 859.57895,360.79189 859.80757,361.19730 857.31541,360.33488"
+ id="path15684"
+ sodipodi:nodetypes="cc" />
+ <g
+ id="Flower2-3Pestils">
+ <path
+ style="fill:#53c107;fill-opacity:1.0000000;fill-rule:nonzero;stroke:#000000;stroke-width:1.0000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ id="path13130"
+ d="M 926.18004,320.66940 C 919.79126,315.80464 916.18049,306.49503 911.86960,299.53113 C 882.73157,258.01740 857.30139,213.99246 835.42987,168.23589 C 832.79102,162.55482 830.29495,156.80994 827.82222,151.05534 L 834.62840,148.27110 C 836.18682,154.27839 837.89529,160.24225 839.99372,166.08851 C 857.97962,213.62925 884.26383,257.46764 918.31791,295.26795 C 921.12694,298.85739 935.34792,316.10638 932.99866,315.53021 L 926.18004,320.66940 z "
+ sodipodi:nodetypes="ccccccccc" />
+ <path
+ style="fill:#4e941e;fill-opacity:1.0000000;fill-rule:nonzero;stroke:#000000;stroke-width:1.0000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ id="path13131"
+ d="M 916.11430,331.81855 C 898.60767,321.80647 882.06441,307.50232 866.32291,294.85305 C 850.00966,282.39429 835.72638,267.75439 821.68975,252.86147 L 828.26599,247.79974 C 840.74190,263.62625 855.83906,277.11859 871.14993,290.11935 C 885.14831,301.84976 906.79970,318.32598 923.94753,323.29732 L 916.11430,331.81855 z "
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:#76901e;fill-opacity:1.0000000;fill-rule:nonzero;stroke:#000000;stroke-width:1.0000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ id="path13132"
+ d="M 910.78342,347.08336 C 893.87611,342.41730 870.67395,342.02975 853.20725,340.96630 C 842.95336,340.93180 832.93428,339.33123 822.86290,337.70906 L 826.89475,329.43490 C 836.37420,331.92581 845.98974,333.51916 855.77550,334.28819 C 873.28519,335.87776 896.06862,337.20688 913.54359,337.88572 L 910.78342,347.08336 z "
+ sodipodi:nodetypes="ccccccc" />
+ </g>
+ <path
+ style="fill:url(#linearGradient12491);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 927.83758,392.64573 C 956.91646,400.54760 948.06636,400.54760 969.08534,414.61293 C 974.45861,419.82816 982.51852,425.04340 991.21057,428.04611 C 999.90263,431.04882 1007.9625,430.89078 1007.4884,425.99162 C 1007.0143,421.09247 997.53207,418.56387 989.47216,412.08433 C 981.41226,405.60480 979.51581,405.13069 977.77740,402.44405 C 979.83188,394.85825 985.04711,381.58312 984.09889,373.20714 C 982.51852,342.54787 972.08805,346.97292 955.33608,350.13367 C 938.58412,353.29442 927.83758,392.64573 927.83758,392.64573 z "
+ id="Flower2-3Transition"
+ sodipodi:nodetypes="ccccccccc" />
+ <g
+ id="Flower2-2Inner"
+ transform="matrix(0.824589,-0.750320,0.579669,0.798557,551.4131,222.5662)">
+ <path
+ style="fill:url(#linearGradient22813);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 367.02596,501.05223 C 416.62406,401.85602 391.31920,406.68287 433.64292,413.95726 C 475.96663,421.23164 498.93877,433.47998 502.24531,463.23884 C 505.55185,492.99770 517.45929,484.83995 481.74866,494.09826 C 446.03802,503.35658 367.02596,501.05223 367.02596,501.05223 z "
+ id="path22808"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:url(#linearGradient22812);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 363.71942,503.69746 C 405.38182,416.40480 356.13246,406.42348 386.55263,384.60031 C 416.97280,362.77715 433.42693,377.09495 449.29832,391.64373 C 465.16971,406.19250 475.53456,429.76291 475.53456,437.03730 C 475.53456,444.31168 363.71942,503.69746 363.71942,503.69746 z "
+ id="path22807"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:url(#linearGradient22814);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 372.31642,498.40699 C 428.52760,380.03286 420.31562,335.76821 393.29291,357.35261 C 357.08951,386.27011 368.64007,381.53075 378.55969,415.91876 C 388.47931,450.30678 371.21340,457.41349 377.16517,478.57535 C 383.11695,499.73721 372.31642,498.40699 372.31642,498.40699 z "
+ id="path22809"
+ sodipodi:nodetypes="csccc" />
+ <path
+ style="fill:url(#radialGradient22815);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 375.62296,499.06830 C 502.59410,475.26121 528.60545,487.78502 486.94304,514.89865 C 445.28063,542.01228 460.36951,523.81892 437.22373,503.97968 C 414.07795,484.14044 406.04313,514.27839 394.80089,506.34269 C 383.55866,498.40699 375.62296,499.06830 375.62296,499.06830 z "
+ id="path22810"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:url(#radialGradient22816);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.9743026;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 369.43275,500.81091 C 449.68566,524.22020 466.94604,529.70841 452.10192,493.78550 C 388.30049,442.06185 409.39950,357.95957 371.70918,409.77082 C 368.70439,496.18570 369.43275,500.81091 369.43275,500.81091 z "
+ id="path22811"
+ sodipodi:nodetypes="cccc" />
+ </g>
+ <g
+ id="Flower2-2Petals"
+ transform="matrix(0.461513,-0.218468,0.507505,0.388027,757.7875,160.0813)">
+ <path
+ style="fill:#5047dd;fill-opacity:0.84491980;stroke:#000000;stroke-width:1.7207220;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 370.56250,305.90625 C 355.90456,305.38356 341.55481,308.54187 333.40625,315.62500 C 327.97388,320.34708 347.33067,340.30951 329.62500,358.15625 C 312.69793,375.21818 287.66656,347.56368 283.21875,354.84375 C 273.25755,371.14806 265.37524,399.59673 267.90625,419.25000 C 269.17176,429.07664 308.54541,414.73263 315.68750,440.15625 C 323.48351,467.90766 284.89523,475.15541 290.03125,485.43750 C 300.30331,506.00168 311.03251,519.94295 326.87500,536.84375 C 334.79624,545.29416 351.90911,508.22838 377.75000,529.43750 C 401.05114,548.56211 370.17897,574.05542 379.65625,579.75000 C 398.61081,591.13920 418.51671,599.28318 438.12500,603.31250 C 447.92915,605.32715 439.41058,564.23371 467.18750,561.43750 C 489.51695,559.18965 496.47318,597.74565 505.37500,595.15625 C 523.21009,589.96826 540.88473,571.83246 552.37500,559.75000 C 558.12014,553.70878 523.50061,541.31380 533.00000,519.28125 C 543.82177,494.18176 562.07926,511.83883 564.31250,503.56250 C 567.67279,491.10942 567.09229,482.38503 565.46875,464.25000 C 564.65698,455.18248 540.01389,464.92575 532.25000,442.96875 C 522.65141,415.82302 549.39077,413.22085 545.21875,404.56250 C 538.82970,391.27821 534.77490,386.96586 519.84375,371.59375 C 512.37815,363.90770 500.37158,387.44121 480.50000,372.06250 C 459.85357,356.08416 479.40003,342.40562 470.31250,336.03125 C 459.54164,328.47614 449.37353,322.48497 439.65625,321.37500 C 429.76884,320.24559 433.66906,341.25860 409.21875,337.34375 C 385.30054,333.51408 394.77072,309.66850 385.12500,307.65625 C 380.38656,306.66773 375.44848,306.08048 370.56250,305.90625 z M 404.37500,362.59375 C 442.37861,362.88532 485.68016,390.09716 503.87500,422.56250 C 524.74616,459.80323 517.44770,509.29724 480.65625,524.43750 C 443.92960,539.55112 390.71795,510.29037 365.28125,466.06250 C 339.84455,421.83464 347.42926,373.16413 388.50000,364.18750 C 393.62397,363.06758 398.94591,362.55210 404.37500,362.59375 z "
+ id="path18848" />
+ <path
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="0.0000000"
+ inkscape:original="M 370.56250 305.90625 C 355.90456 305.38356 341.55481 308.54187 333.40625 315.62500 C 327.97388 320.34708 347.33067 340.30951 329.62500 358.15625 C 312.69793 375.21818 287.66656 347.56368 283.21875 354.84375 C 273.25755 371.14806 265.37524 399.59673 267.90625 419.25000 C 269.17176 429.07664 308.54541 414.73263 315.68750 440.15625 C 323.48351 467.90766 284.89523 475.15541 290.03125 485.43750 C 300.30331 506.00168 311.03251 519.94295 326.87500 536.84375 C 334.79624 545.29416 351.90911 508.22838 377.75000 529.43750 C 401.05114 548.56211 370.17897 574.05542 379.65625 579.75000 C 398.61081 591.13920 418.51671 599.28318 438.12500 603.31250 C 447.92915 605.32715 439.41058 564.23371 467.18750 561.43750 C 489.51695 559.18965 496.47318 597.74565 505.37500 595.15625 C 523.21009 589.96826 540.88473 571.83246 552.37500 559.75000 C 558.12014 553.70878 523.50061 541.31380 533.00000 519.28125 C 543.82177 494.18176 562.07926 511.83883 564.31250 503.56250 C 567.67279 491.10942 567.09229 482.38503 565.46875 464.25000 C 564.65698 455.18248 540.01389 464.92575 532.25000 442.96875 C 522.65141 415.82302 549.39077 413.22085 545.21875 404.56250 C 538.82970 391.27821 534.77490 386.96586 519.84375 371.59375 C 512.37815 363.90770 500.37158 387.44121 480.50000 372.06250 C 459.85357 356.08416 479.40003 342.40562 470.31250 336.03125 C 459.54164 328.47614 449.37353 322.48497 439.65625 321.37500 C 429.76884 320.24559 433.66906 341.25860 409.21875 337.34375 C 385.30054 333.51408 394.77072 309.66850 385.12500 307.65625 C 380.38656 306.66773 375.44848 306.08048 370.56250 305.90625 z M 404.37500 362.59375 C 442.37861 362.88532 485.68016 390.09716 503.87500 422.56250 C 524.74616 459.80323 517.44770 509.29724 480.65625 524.43750 C 443.92960 539.55112 390.71795 510.29037 365.28125 466.06250 C 339.84455 421.83464 347.42926 373.16413 388.50000 364.18750 C 393.62397 363.06758 398.94591 362.55210 404.37500 362.59375 z "
+ xlink:href="#path4825"
+ style="fill:#564ce2;fill-opacity:0.72192514;stroke:#000000;stroke-width:1.7207220;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ id="path18849"
+ inkscape:href="#path4825"
+ d="M 370.56250,305.90625 C 355.90456,305.38356 341.55481,308.54187 333.40625,315.62500 C 327.97388,320.34708 347.33067,340.30951 329.62500,358.15625 C 312.69793,375.21818 287.66656,347.56368 283.21875,354.84375 C 273.25755,371.14806 265.37524,399.59673 267.90625,419.25000 C 269.17176,429.07664 308.54541,414.73263 315.68750,440.15625 C 323.48351,467.90766 284.89523,475.15541 290.03125,485.43750 C 300.30331,506.00168 311.03251,519.94295 326.87500,536.84375 C 334.79624,545.29416 351.90911,508.22838 377.75000,529.43750 C 401.05114,548.56211 370.17897,574.05542 379.65625,579.75000 C 398.61081,591.13920 418.51671,599.28318 438.12500,603.31250 C 447.92915,605.32715 439.41058,564.23371 467.18750,561.43750 C 489.51695,559.18965 496.47318,597.74565 505.37500,595.15625 C 523.21009,589.96826 540.88473,571.83246 552.37500,559.75000 C 558.12014,553.70878 523.50061,541.31380 533.00000,519.28125 C 543.82177,494.18176 562.07926,511.83883 564.31250,503.56250 C 567.67279,491.10942 567.09229,482.38503 565.46875,464.25000 C 564.65698,455.18248 540.01389,464.92575 532.25000,442.96875 C 522.65141,415.82302 549.39077,413.22085 545.21875,404.56250 C 538.82970,391.27821 534.77490,386.96586 519.84375,371.59375 C 512.37815,363.90770 500.37158,387.44121 480.50000,372.06250 C 459.85357,356.08416 479.40003,342.40562 470.31250,336.03125 C 459.54164,328.47614 449.37353,322.48497 439.65625,321.37500 C 429.76884,320.24559 433.66906,341.25860 409.21875,337.34375 C 385.30054,333.51408 394.77072,309.66850 385.12500,307.65625 C 380.38656,306.66773 375.44848,306.08048 370.56250,305.90625 z M 404.37500,362.59375 C 442.37861,362.88532 485.68016,390.09716 503.87500,422.56250 C 524.74616,459.80323 517.44770,509.29724 480.65625,524.43750 C 443.92960,539.55112 390.71795,510.29037 365.28125,466.06250 C 339.84455,421.83464 347.42926,373.16413 388.50000,364.18750 C 393.62397,363.06758 398.94591,362.55210 404.37500,362.59375 z " />
+ <path
+ style="fill:url(#radialGradient18858);fill-opacity:1.0000000;stroke:#000000;stroke-width:1.7138077;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 380.12958,297.43595 C 365.86249,296.90326 351.89541,300.12208 343.96414,307.34090 C 338.67664,312.15342 357.51725,332.49828 340.28372,350.68690 C 323.80802,368.07567 299.44415,339.89140 295.11493,347.31096 C 285.41937,363.92759 277.74725,392.92123 280.21077,412.95101 C 281.44254,422.96589 319.76626,408.34710 326.71788,434.25775 C 334.30601,462.54078 296.74672,469.92735 301.74578,480.40644 C 311.74392,501.36456 322.18703,515.57289 337.60706,532.79745 C 345.31706,541.40974 361.97361,503.63391 387.12541,525.24932 C 409.80520,544.74031 379.75628,570.72197 388.98084,576.52564 C 407.42996,588.13303 426.80503,596.43301 445.89044,600.53952 C 455.43316,602.59276 447.14175,560.71211 474.17796,557.86234 C 495.91199,555.57142 502.68271,594.86602 511.34716,592.22703 C 528.70666,586.93964 545.90998,568.45644 557.09385,556.14252 C 562.68579,549.98555 528.98942,537.35313 538.23552,514.89853 C 548.76870,489.31821 566.53935,507.31354 568.71302,498.87865 C 571.98372,486.18700 571.41869,477.29549 569.83844,458.81305 C 569.04832,449.57183 545.06237,459.50174 537.50550,437.12411 C 528.16288,409.45836 554.18920,406.80636 550.12843,397.98214 C 543.90974,384.44336 539.96307,380.04841 525.43007,364.38181 C 518.16357,356.54852 506.47716,380.53287 487.13549,364.85955 C 467.03960,348.57510 486.06484,334.63454 477.21964,328.13807 C 466.73600,320.43822 456.83902,314.33228 447.38086,313.20105 C 437.75712,312.05000 441.55333,333.46555 417.75501,329.47570 C 394.47461,325.57267 403.69226,301.27029 394.30375,299.21948 C 389.69169,298.21202 384.88527,297.61353 380.12958,297.43595 z M 413.04042,355.20943 C 450.03063,355.50656 492.17750,383.23969 509.88715,416.32696 C 530.20177,454.28108 523.09793,504.72324 487.28757,520.15355 C 451.54027,535.55668 399.74756,505.73540 374.98916,460.66029 C 350.23075,415.58516 357.61321,365.98228 397.58875,356.83369 C 402.57609,355.69231 407.75611,355.16696 413.04042,355.20943 z "
+ id="path18850" />
+ <path
+ style="fill:#638ae3;fill-opacity:0.53475934;fill-rule:evenodd;stroke:#000000;stroke-width:1.4624690;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;stroke-miterlimit:4.0000000;stroke-dasharray:none;"
+ d="M 378.47470,577.81411 C 378.41896,575.30523 385.62077,574.05338 386.68118,574.84545 C 392.70466,579.95068 411.44551,591.58986 446.56562,600.64064 C 442.79559,602.09376 444.73008,602.27386 440.53021,603.54017 C 428.20303,603.58564 387.98723,587.44481 378.47470,577.81411 z "
+ id="path18851"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#5492d5;fill-opacity:0.33155081;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 448.70315,329.05232 C 414.82014,343.52661 440.80808,340.23700 445.08458,347.80311 C 449.36107,355.36922 485.87577,370.17247 493.44188,381.68612 C 501.00799,393.19976 515.81124,405.70029 519.75878,420.50355 C 523.70631,435.30680 522.71943,465.90020 531.60138,459.97890 C 540.48334,454.05759 519.10086,423.13524 523.04839,401.75275 C 526.99593,380.37027 513.50852,380.04131 495.41565,372.47520 C 477.32278,364.90909 451.99276,352.73753 453.30861,343.52661 C 454.62445,334.31570 448.70315,329.05232 448.70315,329.05232 z "
+ id="path18852" />
+ <path
+ style="fill:url(#radialGradient18859);fill-opacity:1.0000000;stroke:none;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 539.43027,532.41062 C 539.43027,539.40171 544.55840,574.25612 534.48034,574.25612 C 524.40229,574.25612 475.43149,576.39300 475.43149,569.40191 C 475.43149,562.41083 493.88434,522.82888 503.96239,522.82888 C 514.04045,522.82888 539.43027,525.41954 539.43027,532.41062 z "
+ id="path18853"
+ sodipodi:nodetypes="ccccc"
+ transform="matrix(0.624661,0.780896,-0.780896,0.624661,623.2822,-194.2138)" />
+ <path
+ style="fill:url(#radialGradient18860);fill-opacity:1.0000000;stroke:none;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 466.62375,572.09687 C 466.62375,583.75974 447.16650,585.70506 438.72273,585.70506 C 430.27895,585.70506 413.31825,581.76117 413.31825,570.09830 C 389.07901,512.80764 422.08743,519.04264 443.58671,522.23015 C 466.15531,533.76777 473.08623,541.59775 466.62375,572.09687 z "
+ id="path18854"
+ sodipodi:nodetypes="ccccc"
+ transform="matrix(0.943927,0.330155,-0.357257,1.021414,211.1143,-156.7594)" />
+ <path
+ style="fill:#85c8ef;fill-opacity:0.14973260;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 317.44761,367.86974 C 306.92085,392.21288 316.46073,375.43585 330.93502,419.84562 C 345.40932,464.25539 329.61918,472.47942 364.81803,490.57229 C 400.01688,508.66516 393.76662,527.74491 425.01794,529.38972 C 456.26926,531.03453 452.32172,552.41701 489.16538,535.63998 C 526.00904,518.86296 555.28660,489.58540 552.98387,468.53188 C 551.01010,445.17564 536.20685,486.95372 518.44293,505.37555 C 491.79707,525.44218 455.94030,534.65310 426.33378,523.13946 C 396.72727,511.62581 379.62129,494.51983 369.75245,468.20293 C 359.88361,441.88603 345.40932,410.96367 352.97542,395.17353 C 360.54153,379.38339 362.51530,363.59325 384.88467,350.76376 C 407.25403,337.93427 404.62234,323.78894 385.21362,317.86763 C 365.80491,311.94633 372.05518,319.18348 355.93608,344.51350 C 339.81697,369.84351 325.34268,350.76375 317.44761,367.86974 z "
+ id="path18855"
+ sodipodi:nodetypes="cccccccccccccc" />
+ <path
+ style="fill:#2d84e6;fill-opacity:0.54901963;fill-rule:evenodd;stroke:#000000;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 331.84343,317.12090 C 338.32897,332.25383 340.76105,348.73791 330.76251,355.22345 C 355.62374,348.46767 345.62521,323.87668 342.11221,308.47352 C 331.84343,311.44606 331.84343,318.47205 331.84343,317.12090 z "
+ id="path18856"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:#5d9ee5;fill-opacity:0.52406418;fill-rule:evenodd;stroke:#000000;stroke-width:1.4856828;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000;stroke-dasharray:none;"
+ d="M 283.74235,353.60207 C 288.60651,349.54860 289.97177,347.25710 296.99777,346.17618 C 286.11578,356.48311 275.09497,401.43291 281.04004,416.29561 C 297.09769,420.10660 314.81889,411.16122 326.43882,432.77969 C 330.49228,463.58600 308.60359,464.93716 301.30736,477.36777 C 302.92874,491.14954 322.11512,518.71309 339.40990,534.92693 C 331.84343,540.87202 331.03274,536.27809 328.60066,537.35902 C 316.44028,525.73909 295.09205,498.71601 290.22789,482.77239 C 296.17296,468.72039 317.25097,469.53108 317.25097,443.04846 C 311.84635,416.56584 287.25535,425.75368 269.96058,421.97046 C 262.93457,407.37799 276.44612,368.19453 283.74235,353.60207 z "
+ id="path18857"
+ sodipodi:nodetypes="ccccccccccc" />
+ </g>
+ <path
+ style="fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.75000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000;stroke-dasharray:none;"
+ d="M 1096.1335,265.00825 C 1097.8662,263.08147 1099.1364,262.96609 1098.5538,259.67332"
+ id="path15678"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.75000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 1136.7700,284.65630 C 1137.4282,281.96202 1136.3959,280.92564 1139.1903,279.32137"
+ id="path15679"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.75000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 1273.0783,233.38717 C 1274.1970,231.46039 1274.2392,232.11251 1273.9636,230.20124"
+ id="path15680"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.75000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 1216.7437,199.61709 C 1216.4809,197.38330 1215.6021,197.11442 1215.4800,195.20316"
+ id="path15681"
+ sodipodi:nodetypes="cc" />
+ <g
+ id="Flower2-2Pestils">
+ <path
+ style="fill:#69bd2c;fill-opacity:1.0000000;fill-rule:nonzero;stroke:#000000;stroke-width:1.0000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ id="path13133"
+ d="M 1154.4277,252.78674 C 1162.8993,243.88809 1172.2735,228.77012 1178.0553,217.63868 C 1189.9362,194.40642 1190.0200,165.76692 1191.2441,140.17049 C 1191.7851,121.40427 1193.9977,102.91415 1193.2265,84.129869 L 1199.0920,82.754503 C 1199.1619,101.78871 1196.6113,120.73486 1195.8456,139.73994 C 1194.4414,165.88091 1194.9026,193.69601 1183.9552,217.96036 C 1178.2546,229.84365 1169.0161,244.54165 1162.2949,255.74981 L 1154.4277,252.78674 z "
+ sodipodi:nodetypes="ccccccccc" />
+ <path
+ style="fill:#479e35;fill-opacity:1.0000000;fill-rule:nonzero;stroke:#000000;stroke-width:1.0000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ id="path13134"
+ d="M 1177.5335,260.88068 C 1183.2699,245.61539 1196.1282,217.54204 1201.5671,202.16328 C 1210.2572,179.25574 1216.1572,155.59101 1219.2041,131.30987 C 1219.3416,129.99117 1219.4791,128.67247 1219.6166,127.35377 L 1227.4380,126.86311 C 1227.2147,128.20234 1226.9915,129.54157 1226.7682,130.88080 C 1222.7949,155.20619 1216.5626,178.98478 1209.7507,202.66228 C 1205.2636,218.00649 1188.1060,246.46598 1186.4680,262.59187 L 1177.5335,260.88068 z "
+ sodipodi:nodetypes="ccccccccc" />
+ <path
+ style="fill:#82a335;fill-opacity:1.0000000;fill-rule:nonzero;stroke:#000000;stroke-width:1.0000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ id="path13135"
+ d="M 1198.5919,264.88318 C 1208.2251,250.58402 1220.8793,218.06577 1229.5456,203.23101 C 1236.8545,193.62761 1244.7962,184.40425 1253.1819,175.71051 L 1260.4413,178.57275 C 1252.4554,187.07176 1245.4445,196.36443 1238.1475,205.44239 C 1228.3107,218.94669 1214.9223,250.25842 1208.8057,265.76135 L 1198.5919,264.88318 z "
+ sodipodi:nodetypes="ccccccc" />
+ </g>
+ <path
+ style="fill:url(#linearGradient12493);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 1109.8468,293.73441 C 1131.6710,314.51247 1127.9231,320.74742 1137.4688,347.56312 C 1139.9727,354.59723 1146.5927,367.65837 1152.8116,374.43289 C 1159.0305,381.20737 1161.5022,380.20681 1163.4146,375.67148 C 1165.3270,371.13615 1162.0722,370.55364 1158.0626,361.02107 C 1154.0531,351.48851 1152.4482,348.06551 1151.8727,344.06613 C 1161.1716,339.34076 1194.0844,322.85845 1197.2329,315.03905 C 1210.4206,287.31591 1174.3763,292.88537 1158.1363,287.70067 C 1141.8963,282.51592 1109.8468,293.73441 1109.8468,293.73441 z "
+ id="Flower2-2Transition"
+ sodipodi:nodetypes="csccccccc" />
+ <g
+ id="Flower2-1Inner"
+ transform="matrix(0.812206,0.000000,0.000000,0.638130,755.1049,257.7198)">
+ <path
+ style="fill:url(#linearGradient22796);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.20535541pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 274.61097,-66.937326 C 266.07083,-215.05391 246.78491,-219.47999 287.85388,-222.73005 C 328.92287,-225.98009 382.53679,-211.95450 378.62605,-181.39859 C 374.71529,-150.84269 332.66280,-145.00164 305.85227,-116.10201 C 279.04172,-87.202396 274.61097,-66.937326 274.61097,-66.937326 z "
+ id="path22789" />
+ <path
+ style="fill:url(#linearGradient22797);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.77008289;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 271.17382,-66.474256 C 291.41712,-139.44487 328.09585,-191.27380 360.71030,-190.04826 C 393.32478,-188.82271 445.09192,-195.09454 450.19914,-172.95350 C 455.30633,-150.81247 452.61230,-101.98160 415.46714,-91.884636 C 378.32196,-81.787656 271.17382,-66.474256 271.17382,-66.474256 z "
+ id="path22790" />
+ <path
+ style="fill:url(#linearGradient22798);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.77008289;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 269.07621,-86.463326 C 375.35919,-169.24437 429.08827,-195.24788 426.08390,-150.65540 C 423.07950,-106.06290 449.46829,-101.16004 425.28112,-79.680508 C 390.61348,-81.915599 325.44237,-38.493324 309.01305,-48.583714 C 292.58376,-58.674104 269.07621,-86.463326 269.07621,-86.463326 z "
+ id="path22791"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:url(#radialGradient22799);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.20535541pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 282.67875,-69.780336 C 274.96861,-197.98938 302.55261,-230.15415 258.00305,-212.21092 C 213.45349,-194.26768 155.11191,-160.24206 174.95117,-142.54429 C 194.79044,-124.84652 282.43542,-73.435316 282.43542,-73.435316"
+ id="path22792" />
+ <path
+ style="fill:url(#linearGradient22800);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.20535541pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 284.67905,-71.981506 C 241.15347,-125.47323 194.97727,-144.36424 167.09341,-139.02714 C 139.20954,-133.69006 120.47986,-70.230626 142.21946,-63.676596 C 163.95907,-57.122576 181.96462,-22.319366 191.96607,-33.325246 C 201.96752,-44.331136 276.36792,-72.793496 276.36792,-72.793496"
+ id="path22793" />
+ <path
+ style="fill:url(#linearGradient22801);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.86946380;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 318.63642,-42.271896 C 254.38296,-109.22740 167.74096,-107.00535 155.08504,-77.850036 C 142.42910,-48.694726 200.20530,-34.325536 239.61867,-17.755486 C 279.03202,-1.1854357 318.63642,-42.271896 318.63642,-42.271896 z "
+ id="path22794"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient22802);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.64277321;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 301.48024,-27.789386 C 411.03764,-112.56941 390.10354,-97.059886 364.25520,-109.85202 C 338.40681,-122.64414 326.34871,-114.07596 286.73054,-104.78959 C 247.11238,-95.503206 218.37600,-103.54253 235.71695,-66.848486 C 253.05788,-30.154446 301.48024,-27.789386 301.48024,-27.789386 z "
+ id="path22795"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+ <g
+ id="Flower2-1Petals"
+ transform="matrix(0.427857,-0.598088,0.893641,0.167574,403.5946,361.8838)">
+ <path
+ style="fill:#5047dd;fill-opacity:0.84491980;stroke:#000000;stroke-width:1.7207220;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 370.56250,305.90625 C 355.90456,305.38356 341.55481,308.54187 333.40625,315.62500 C 327.97388,320.34708 347.33067,340.30951 329.62500,358.15625 C 312.69793,375.21818 287.66656,347.56368 283.21875,354.84375 C 273.25755,371.14806 265.37524,399.59673 267.90625,419.25000 C 269.17176,429.07664 308.54541,414.73263 315.68750,440.15625 C 323.48351,467.90766 284.89523,475.15541 290.03125,485.43750 C 300.30331,506.00168 311.03251,519.94295 326.87500,536.84375 C 334.79624,545.29416 351.90911,508.22838 377.75000,529.43750 C 401.05114,548.56211 370.17897,574.05542 379.65625,579.75000 C 398.61081,591.13920 418.51671,599.28318 438.12500,603.31250 C 447.92915,605.32715 439.41058,564.23371 467.18750,561.43750 C 489.51695,559.18965 496.47318,597.74565 505.37500,595.15625 C 523.21009,589.96826 540.88473,571.83246 552.37500,559.75000 C 558.12014,553.70878 523.50061,541.31380 533.00000,519.28125 C 543.82177,494.18176 562.07926,511.83883 564.31250,503.56250 C 567.67279,491.10942 567.09229,482.38503 565.46875,464.25000 C 564.65698,455.18248 540.01389,464.92575 532.25000,442.96875 C 522.65141,415.82302 549.39077,413.22085 545.21875,404.56250 C 538.82970,391.27821 534.77490,386.96586 519.84375,371.59375 C 512.37815,363.90770 500.37158,387.44121 480.50000,372.06250 C 459.85357,356.08416 479.40003,342.40562 470.31250,336.03125 C 459.54164,328.47614 449.37353,322.48497 439.65625,321.37500 C 429.76884,320.24559 433.66906,341.25860 409.21875,337.34375 C 385.30054,333.51408 394.77072,309.66850 385.12500,307.65625 C 380.38656,306.66773 375.44848,306.08048 370.56250,305.90625 z M 404.37500,362.59375 C 442.37861,362.88532 485.68016,390.09716 503.87500,422.56250 C 524.74616,459.80323 517.44770,509.29724 480.65625,524.43750 C 443.92960,539.55112 390.71795,510.29037 365.28125,466.06250 C 339.84455,421.83464 347.42926,373.16413 388.50000,364.18750 C 393.62397,363.06758 398.94591,362.55210 404.37500,362.59375 z "
+ id="path18834" />
+ <path
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="0.0000000"
+ inkscape:original="M 370.56250 305.90625 C 355.90456 305.38356 341.55481 308.54187 333.40625 315.62500 C 327.97388 320.34708 347.33067 340.30951 329.62500 358.15625 C 312.69793 375.21818 287.66656 347.56368 283.21875 354.84375 C 273.25755 371.14806 265.37524 399.59673 267.90625 419.25000 C 269.17176 429.07664 308.54541 414.73263 315.68750 440.15625 C 323.48351 467.90766 284.89523 475.15541 290.03125 485.43750 C 300.30331 506.00168 311.03251 519.94295 326.87500 536.84375 C 334.79624 545.29416 351.90911 508.22838 377.75000 529.43750 C 401.05114 548.56211 370.17897 574.05542 379.65625 579.75000 C 398.61081 591.13920 418.51671 599.28318 438.12500 603.31250 C 447.92915 605.32715 439.41058 564.23371 467.18750 561.43750 C 489.51695 559.18965 496.47318 597.74565 505.37500 595.15625 C 523.21009 589.96826 540.88473 571.83246 552.37500 559.75000 C 558.12014 553.70878 523.50061 541.31380 533.00000 519.28125 C 543.82177 494.18176 562.07926 511.83883 564.31250 503.56250 C 567.67279 491.10942 567.09229 482.38503 565.46875 464.25000 C 564.65698 455.18248 540.01389 464.92575 532.25000 442.96875 C 522.65141 415.82302 549.39077 413.22085 545.21875 404.56250 C 538.82970 391.27821 534.77490 386.96586 519.84375 371.59375 C 512.37815 363.90770 500.37158 387.44121 480.50000 372.06250 C 459.85357 356.08416 479.40003 342.40562 470.31250 336.03125 C 459.54164 328.47614 449.37353 322.48497 439.65625 321.37500 C 429.76884 320.24559 433.66906 341.25860 409.21875 337.34375 C 385.30054 333.51408 394.77072 309.66850 385.12500 307.65625 C 380.38656 306.66773 375.44848 306.08048 370.56250 305.90625 z M 404.37500 362.59375 C 442.37861 362.88532 485.68016 390.09716 503.87500 422.56250 C 524.74616 459.80323 517.44770 509.29724 480.65625 524.43750 C 443.92960 539.55112 390.71795 510.29037 365.28125 466.06250 C 339.84455 421.83464 347.42926 373.16413 388.50000 364.18750 C 393.62397 363.06758 398.94591 362.55210 404.37500 362.59375 z "
+ xlink:href="#path4825"
+ style="fill:#564ce2;fill-opacity:0.72192514;stroke:#000000;stroke-width:1.7207220;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ id="path18835"
+ inkscape:href="#path4825"
+ d="M 370.56250,305.90625 C 355.90456,305.38356 341.55481,308.54187 333.40625,315.62500 C 327.97388,320.34708 347.33067,340.30951 329.62500,358.15625 C 312.69793,375.21818 287.66656,347.56368 283.21875,354.84375 C 273.25755,371.14806 265.37524,399.59673 267.90625,419.25000 C 269.17176,429.07664 308.54541,414.73263 315.68750,440.15625 C 323.48351,467.90766 284.89523,475.15541 290.03125,485.43750 C 300.30331,506.00168 311.03251,519.94295 326.87500,536.84375 C 334.79624,545.29416 351.90911,508.22838 377.75000,529.43750 C 401.05114,548.56211 370.17897,574.05542 379.65625,579.75000 C 398.61081,591.13920 418.51671,599.28318 438.12500,603.31250 C 447.92915,605.32715 439.41058,564.23371 467.18750,561.43750 C 489.51695,559.18965 496.47318,597.74565 505.37500,595.15625 C 523.21009,589.96826 540.88473,571.83246 552.37500,559.75000 C 558.12014,553.70878 523.50061,541.31380 533.00000,519.28125 C 543.82177,494.18176 562.07926,511.83883 564.31250,503.56250 C 567.67279,491.10942 567.09229,482.38503 565.46875,464.25000 C 564.65698,455.18248 540.01389,464.92575 532.25000,442.96875 C 522.65141,415.82302 549.39077,413.22085 545.21875,404.56250 C 538.82970,391.27821 534.77490,386.96586 519.84375,371.59375 C 512.37815,363.90770 500.37158,387.44121 480.50000,372.06250 C 459.85357,356.08416 479.40003,342.40562 470.31250,336.03125 C 459.54164,328.47614 449.37353,322.48497 439.65625,321.37500 C 429.76884,320.24559 433.66906,341.25860 409.21875,337.34375 C 385.30054,333.51408 394.77072,309.66850 385.12500,307.65625 C 380.38656,306.66773 375.44848,306.08048 370.56250,305.90625 z M 404.37500,362.59375 C 442.37861,362.88532 485.68016,390.09716 503.87500,422.56250 C 524.74616,459.80323 517.44770,509.29724 480.65625,524.43750 C 443.92960,539.55112 390.71795,510.29037 365.28125,466.06250 C 339.84455,421.83464 347.42926,373.16413 388.50000,364.18750 C 393.62397,363.06758 398.94591,362.55210 404.37500,362.59375 z " />
+ <path
+ style="fill:url(#radialGradient18844);fill-opacity:1.0000000;stroke:#000000;stroke-width:1.7138077;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 380.12958,297.43595 C 365.86249,296.90326 351.89541,300.12208 343.96414,307.34090 C 338.67664,312.15342 357.51725,332.49828 340.28372,350.68690 C 323.80802,368.07567 299.44415,339.89140 295.11493,347.31096 C 285.41937,363.92759 277.74725,392.92123 280.21077,412.95101 C 281.44254,422.96589 319.76626,408.34710 326.71788,434.25775 C 334.30601,462.54078 296.74672,469.92735 301.74578,480.40644 C 311.74392,501.36456 322.18703,515.57289 337.60706,532.79745 C 345.31706,541.40974 361.97361,503.63391 387.12541,525.24932 C 409.80520,544.74031 379.75628,570.72197 388.98084,576.52564 C 407.42996,588.13303 426.80503,596.43301 445.89044,600.53952 C 455.43316,602.59276 447.14175,560.71211 474.17796,557.86234 C 495.91199,555.57142 502.68271,594.86602 511.34716,592.22703 C 528.70666,586.93964 545.90998,568.45644 557.09385,556.14252 C 562.68579,549.98555 528.98942,537.35313 538.23552,514.89853 C 548.76870,489.31821 566.53935,507.31354 568.71302,498.87865 C 571.98372,486.18700 571.41869,477.29549 569.83844,458.81305 C 569.04832,449.57183 545.06237,459.50174 537.50550,437.12411 C 528.16288,409.45836 554.18920,406.80636 550.12843,397.98214 C 543.90974,384.44336 539.96307,380.04841 525.43007,364.38181 C 518.16357,356.54852 506.47716,380.53287 487.13549,364.85955 C 467.03960,348.57510 486.06484,334.63454 477.21964,328.13807 C 466.73600,320.43822 456.83902,314.33228 447.38086,313.20105 C 437.75712,312.05000 441.55333,333.46555 417.75501,329.47570 C 394.47461,325.57267 403.69226,301.27029 394.30375,299.21948 C 389.69169,298.21202 384.88527,297.61353 380.12958,297.43595 z M 413.04042,355.20943 C 450.03063,355.50656 492.17750,383.23969 509.88715,416.32696 C 530.20177,454.28108 523.09793,504.72324 487.28757,520.15355 C 451.54027,535.55668 399.74756,505.73540 374.98916,460.66029 C 350.23075,415.58516 357.61321,365.98228 397.58875,356.83369 C 402.57609,355.69231 407.75611,355.16696 413.04042,355.20943 z "
+ id="path18836" />
+ <path
+ style="fill:#638ae3;fill-opacity:0.53475934;fill-rule:evenodd;stroke:#000000;stroke-width:1.7499997;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;stroke-miterlimit:4.0000000;stroke-dasharray:none;"
+ d="M 378.47470,577.81411 C 381.62759,574.99441 385.62077,574.05338 386.68118,574.84545 C 392.70466,579.95068 412.14182,591.15833 445.79306,600.64115 C 442.02303,602.09427 442.93405,602.39852 438.73418,603.66483 C 433.47080,603.33587 387.98723,587.44481 378.47470,577.81411 z "
+ id="path18837"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#5492d5;fill-opacity:0.33155081;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 448.70315,329.05232 C 414.82014,343.52661 440.80808,340.23700 445.08458,347.80311 C 449.36107,355.36922 485.87577,370.17247 493.44188,381.68612 C 501.00799,393.19976 515.81124,405.70029 519.75878,420.50355 C 523.70631,435.30680 522.71943,465.90020 531.60138,459.97890 C 540.48334,454.05759 519.10086,423.13524 523.04839,401.75275 C 526.99593,380.37027 513.50852,380.04131 495.41565,372.47520 C 477.32278,364.90909 451.99276,352.73753 453.30861,343.52661 C 454.62445,334.31570 448.70315,329.05232 448.70315,329.05232 z "
+ id="path18838" />
+ <path
+ style="fill:url(#radialGradient18845);fill-opacity:1.0000000;stroke:none;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 539.43027,532.41062 C 539.43027,539.40171 544.55840,574.25612 534.48034,574.25612 C 524.40229,574.25612 475.43149,576.39300 475.43149,569.40191 C 475.43149,562.41083 493.88434,522.82888 503.96239,522.82888 C 514.04045,522.82888 539.43027,525.41954 539.43027,532.41062 z "
+ id="path18839"
+ sodipodi:nodetypes="ccccc"
+ transform="matrix(0.624661,0.780896,-0.780896,0.624661,623.2822,-194.2138)" />
+ <path
+ style="fill:url(#radialGradient18846);fill-opacity:1.0000000;stroke:none;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 466.62375,572.09687 C 466.62375,583.75974 447.16650,585.70506 438.72273,585.70506 C 430.27895,585.70506 413.31825,581.76117 413.31825,570.09830 C 389.07901,512.80764 422.08743,519.04264 443.58671,522.23015 C 466.15531,533.76777 473.08623,541.59775 466.62375,572.09687 z "
+ id="path18840"
+ sodipodi:nodetypes="ccccc"
+ transform="matrix(0.943927,0.330155,-0.357257,1.021414,211.1143,-156.7594)" />
+ <path
+ style="fill:#85c8ef;fill-opacity:0.14973260;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 317.44761,367.86974 C 306.92085,392.21288 316.46073,375.43585 330.93502,419.84562 C 345.40932,464.25539 329.61918,472.47942 364.81803,490.57229 C 400.01688,508.66516 393.76662,527.74491 425.01794,529.38972 C 456.26926,531.03453 452.32172,552.41701 489.16538,535.63998 C 526.00904,518.86296 555.28660,489.58540 552.98387,468.53188 C 551.01010,445.17564 536.20685,486.95372 518.44293,505.37555 C 491.79707,525.44218 455.94030,534.65310 426.33378,523.13946 C 396.72727,511.62581 379.62129,494.51983 369.75245,468.20293 C 359.88361,441.88603 345.40932,410.96367 352.97542,395.17353 C 360.54153,379.38339 362.51530,363.59325 384.88467,350.76376 C 407.25403,337.93427 404.62234,323.78894 385.21362,317.86763 C 365.80491,311.94633 372.05518,319.18348 355.93608,344.51350 C 339.81697,369.84351 325.34268,350.76375 317.44761,367.86974 z "
+ id="path18841"
+ sodipodi:nodetypes="cccccccccccccc" />
+ <path
+ style="fill:#5d9ee5;fill-opacity:0.52406418;fill-rule:evenodd;stroke:#000000;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 283.74235,353.60207 C 288.60651,349.54860 289.72783,347.75698 296.75383,346.67606 C 286.68068,357.78782 275.09497,401.43291 281.04004,416.29561 C 294.82181,422.78115 314.81889,411.16122 326.43882,432.77969 C 330.49228,463.58600 308.60359,464.93716 301.30736,477.36777 C 302.92874,491.14954 322.11512,518.71309 339.40990,534.92693 C 331.84343,540.87202 331.39601,537.57465 328.96393,538.65558 C 316.80355,527.03565 295.09205,498.71601 290.22789,482.77239 C 296.17296,468.72039 317.25097,469.53108 317.25097,443.04846 C 311.84635,416.56584 287.25535,425.75368 269.96058,421.97046 C 262.93457,407.37799 271.84513,371.37772 283.74235,353.60207 z "
+ id="path18843"
+ sodipodi:nodetypes="ccccccccccc" />
+ <path
+ style="fill:#2d84e6;fill-opacity:0.54901963;fill-rule:evenodd;stroke:#000000;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 331.84343,317.12090 C 338.32897,332.25383 340.76105,348.73791 330.76251,355.22345 C 355.62374,348.46767 345.62521,323.87668 342.11221,308.47352 C 331.84343,311.44606 331.84343,318.47205 331.84343,317.12090 z "
+ id="path18842"
+ sodipodi:nodetypes="cccc" />
+ </g>
+ <path
+ style="fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 895.07703,271.69924 C 898.03771,266.24195 896.32396,265.62493 896.04838,263.25316"
+ id="path15052"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 958.81024,269.50910 C 956.51458,264.92787 956.11491,263.43479 958.24849,260.84401"
+ id="path15053"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 1095.9133,109.84753 C 1095.5888,107.01842 1094.5321,108.37254 1094.2565,105.78175"
+ id="path15054"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 878.21292,156.49762 C 875.91725,152.79245 875.51759,152.83248 874.36595,149.14662"
+ id="path15055"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 1002.3941,104.59119 C 998.12734,100.22897 1000.1369,102.67816 997.67113,99.868360"
+ id="path15056"
+ sodipodi:nodetypes="cc" />
+ <g
+ id="Flower2-1Pestils">
+ <path
+ style="fill:#45a703;fill-opacity:1.0000000;fill-rule:nonzero;stroke:#000000;stroke-width:1.0000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ id="path13122"
+ d="M 966.32939,193.47933 C 961.88588,173.35541 949.51470,154.50453 936.90393,137.61148 C 894.07552,88.478864 832.35796,56.737044 771.47244,35.692005 C 757.72544,31.498420 764.29610,33.349915 751.78324,30.057299 L 754.36486,25.748627 C 766.09294,30.553600 759.90793,27.991607 772.91277,33.451786 C 832.63859,58.885218 895.94836,86.699309 940.96999,134.72662 C 955.35925,152.79024 967.10055,171.00323 976.23252,192.24903 L 966.32939,193.47933 z "
+ sodipodi:nodetypes="ccccccccc" />
+ <path
+ style="fill:#4c7229;fill-opacity:1.0000000;fill-rule:nonzero;stroke:#000000;stroke-width:1.0000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ id="path13123"
+ d="M 983.87462,191.09304 C 970.55670,173.78792 966.04080,145.04909 959.06360,123.49216 C 954.42897,100.15042 945.11151,77.049864 942.53257,53.319990 C 942.25253,49.639130 941.88082,45.988996 941.26701,42.351753 L 950.07750,40.063494 C 950.41409,43.809578 950.61381,47.564267 951.01580,51.304385 C 953.37274,74.980102 957.77282,98.569093 964.28262,121.44051 C 970.23301,140.12463 975.52790,166.67601 983.25276,179.86618 L 983.87462,191.09304 z "
+ sodipodi:nodetypes="ccccccccc" />
+ <path
+ style="fill:#7cb806;fill-opacity:1.0000000;fill-rule:nonzero;stroke:#000000;stroke-width:1.0000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ id="path13128"
+ d="M 1000.0165,188.24982 C 997.67401,178.73766 997.80935,177.98518 995.91916,170.47693 C 994.44301,165.16183 991.37111,161.27505 987.18215,157.93360 C 968.55381,147.16517 947.68275,140.89125 927.33656,134.21834 C 888.45059,122.68301 850.63783,108.01804 812.43318,94.482803 C 810.27076,93.743550 808.10833,93.004297 805.94590,92.265044 L 809.29214,86.969255 C 811.39799,87.818265 813.50384,88.667275 815.60968,89.516285 C 853.05304,104.82207 891.32040,118.22519 930.23796,129.25688 C 951.48169,135.76796 973.47131,141.11613 993.40940,151.08743 C 999.16424,155.12223 1002.6528,160.71077 1004.4693,167.52816 C 1005.4455,171.37985 1008.1787,175.19838 1010.5553,186.49266 L 1000.0165,188.24982 z "
+ sodipodi:nodetypes="ccccccccccccc" />
+ </g>
+ </g>
+ <g
+ id="layer1"
+ inkscape:label="Bird"
+ inkscape:groupmode="layer">
+ <g
+ id="BackWing"
+ transform="matrix(0.958504,0.285077,-0.285077,0.958504,152.9519,-164.5305)">
+ <path
+ style="fill:url(#linearGradient34091);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 616.40876,442.60376 C 585.14165,326.22063 611.19757,323.98726 616.65691,326.71693 C 633.72571,335.25133 666.28724,382.30290 670.00952,395.95125 C 673.73179,409.59959 664.30203,460.71883 664.30203,460.71883 L 616.40876,442.60376 z "
+ id="BackWingBase"
+ sodipodi:nodetypes="csccc" />
+ <g
+ id="BackWingLongFeathers"
+ transform="matrix(0.642675,-0.578389,0.661057,0.500660,-82.45126,598.6676)">
+ <path
+ style="fill:url(#linearGradient34092);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 677.75360,380.92767 C 722.37586,333.02415 744.86146,313.84053 750.53980,313.16678 C 756.21814,312.49303 716.19937,362.27979 708.40722,366.00757 C 700.61506,369.73535 677.75360,380.92767 677.75360,380.92767 z "
+ id="path33875" />
+ <path
+ style="fill:url(#linearGradient34093);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 676.54161,389.55630 C 727.76478,340.74543 752.39042,320.45462 757.61082,318.95423 C 762.83123,317.45382 715.25875,367.15910 707.42399,371.65358 C 699.58922,376.14805 676.54161,389.55630 676.54161,389.55630 z "
+ id="path33876" />
+ <path
+ style="fill:url(#linearGradient34094);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 678.53611,387.57209 C 726.40585,342.91359 750.18059,325.35299 755.89219,325.07885 C 761.60378,324.80470 718.19424,371.66444 710.15999,374.83696 C 702.12574,378.00948 678.53611,387.57209 678.53611,387.57209 z "
+ id="path33877" />
+ <path
+ style="fill:url(#linearGradient34095);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 623.81780,446.88904 C 689.24049,444.48784 718.70794,446.78621 723.20393,450.31942 C 727.69991,453.85264 664.20641,460.83827 656.05704,457.97441 C 647.90766,455.11055 623.81780,446.88904 623.81780,446.88904 z "
+ id="path33878" />
+ <path
+ style="fill:url(#linearGradient34096);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 629.44759,442.90897 C 694.75190,438.30008 724.28016,439.60213 728.89288,442.98153 C 733.50560,446.36091 670.28419,455.48648 662.04276,452.89944 C 653.80132,450.31238 629.44759,442.90897 629.44759,442.90897 z "
+ id="path33879" />
+ <path
+ style="fill:url(#linearGradient34097);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 634.60405,456.24577 C 684.92857,452.38278 707.65374,454.02190 711.17581,457.45374 C 714.69786,460.88557 665.93745,469.28871 659.61433,466.60773 C 653.29121,463.92675 634.60405,456.24577 634.60405,456.24577 z "
+ id="path33880" />
+ <path
+ style="fill:url(#linearGradient34098);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 653.08248,463.35514 C 687.75506,460.64601 703.55114,462.79967 706.12974,466.30511 C 708.70834,469.81056 675.30470,477.08671 670.81822,474.26686 C 666.33174,471.44700 653.08248,463.35514 653.08248,463.35514 z "
+ id="path33881" />
+ <path
+ style="fill:url(#linearGradient34099);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 672.87844,391.66688 C 727.79561,349.07999 754.65164,332.79378 760.74578,333.03548 C 766.83992,333.27717 716.46264,378.59651 707.63757,381.19156 C 698.81250,383.78662 672.87844,391.66688 672.87844,391.66688 z "
+ id="path33882" />
+ <path
+ style="fill:url(#linearGradient34100);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 668.95417,405.35129 C 724.45635,360.64669 751.57945,343.55855 757.71772,343.82092 C 763.85599,344.08330 712.91591,391.66711 704.01461,394.38381 C 695.11331,397.10050 668.95417,405.35129 668.95417,405.35129 z "
+ id="path33883" />
+ <path
+ style="fill:url(#linearGradient34101);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 665.63994,415.43670 C 721.14212,370.73210 748.26522,353.64396 754.40349,353.90633 C 760.54176,354.16871 709.60168,401.75252 700.70038,404.46922 C 691.79908,407.18591 665.63994,415.43670 665.63994,415.43670 z "
+ id="path33884" />
+ <path
+ style="fill:url(#linearGradient34102);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 664.60980,420.84491 C 720.11198,376.14031 747.23508,359.05217 753.37335,359.31454 C 759.51162,359.57692 708.57154,407.16073 699.67024,409.87743 C 690.76894,412.59412 664.60980,420.84491 664.60980,420.84491 z "
+ id="path33885" />
+ <path
+ style="fill:url(#linearGradient34103);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 663.32213,426.51065 C 718.82431,381.80605 745.94741,364.71791 752.08568,364.98028 C 758.22395,365.24266 707.28387,412.82647 698.38257,415.54317 C 689.48127,418.25986 663.32213,426.51065 663.32213,426.51065 z "
+ id="path33886" />
+ <path
+ style="fill:url(#linearGradient34104);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 661.26186,432.69145 C 716.76404,387.98685 743.88714,370.89871 750.02541,371.16108 C 756.16368,371.42346 705.22360,419.00727 696.32230,421.72397 C 687.42100,424.44066 661.26186,432.69145 661.26186,432.69145 z "
+ id="path33887" />
+ <path
+ style="fill:url(#linearGradient34105);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 655.34683,430.74313 C 715.38299,392.34193 744.20412,378.30592 750.27742,379.23452 C 756.35071,380.16312 700.53634,421.92275 691.39232,423.65496 C 682.24831,425.38716 655.34683,430.74313 655.34683,430.74313 z "
+ id="path33888" />
+ <path
+ style="fill:url(#linearGradient34106);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 651.61454,438.74758 C 711.84013,400.64414 740.73041,386.75103 746.79903,387.70969 C 752.86765,388.66835 696.84718,430.15109 687.69469,431.83799 C 678.54221,433.52488 651.61454,438.74758 651.61454,438.74758 z "
+ id="path33889" />
+ <path
+ style="fill:url(#linearGradient34107);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 649.19925,446.06157 C 710.34387,409.45106 739.56715,396.27278 745.61035,397.38042 C 751.65356,398.48807 694.62966,438.58029 685.43845,440.04155 C 676.24724,441.50281 649.19925,446.06157 649.19925,446.06157 z "
+ id="path33890" />
+ <path
+ style="fill:url(#linearGradient34108);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 656.63887,442.82942 C 713.54874,415.88969 740.18450,407.28373 745.19253,409.29279 C 750.20054,411.30186 696.34978,442.30658 688.32253,442.36066 C 680.29529,442.41472 656.63887,442.82942 656.63887,442.82942 z "
+ id="path33891" />
+ <path
+ style="fill:url(#linearGradient34109);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 658.99673,442.25801 C 710.79935,424.33474 734.64485,419.91322 738.76587,422.67680 C 742.88689,425.44039 693.31806,447.86431 686.38542,446.67989 C 679.45280,445.49546 658.99673,442.25801 658.99673,442.25801 z "
+ id="path33892" />
+ <path
+ style="fill:url(#linearGradient34110);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 657.46297,432.19015 C 708.16904,431.44160 730.85237,434.81269 734.16682,438.81875 C 737.48127,442.82482 688.05621,448.65877 681.88555,445.28178 C 675.71490,441.90479 657.46297,432.19015 657.46297,432.19015 z "
+ id="path33893" />
+ </g>
+ <g
+ id="BackWingShortFeathers">
+ <path
+ style="fill:url(#linearGradient34111);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 616.50953,416.08173 C 612.06946,406.87642 613.32566,402.90684 615.95141,403.00018 C 618.57716,403.09353 623.16087,402.80873 622.40138,405.85417 C 621.64189,408.89961 616.50953,416.08173 616.50953,416.08173 z "
+ id="path33917" />
+ <path
+ style="fill:url(#linearGradient34112);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 606.60917,405.19134 C 602.16910,395.98603 603.42530,392.01645 606.05105,392.10979 C 608.67680,392.20314 613.26051,391.91834 612.50102,394.96378 C 611.74153,398.00922 606.60917,405.19134 606.60917,405.19134 z "
+ id="path33919" />
+ <path
+ style="fill:url(#linearGradient34113);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 604.38159,397.02355 C 599.94152,387.81824 601.19772,383.84866 603.82347,383.94200 C 606.44922,384.03535 611.03293,383.75055 610.27344,386.79599 C 609.51395,389.84143 604.38159,397.02355 604.38159,397.02355 z "
+ id="path33921" />
+ <path
+ style="fill:url(#linearGradient34114);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 609.23904,414.64465 C 604.79897,405.43934 606.05517,401.46976 608.68092,401.56310 C 611.30667,401.65645 615.89038,401.37165 615.13089,404.41709 C 614.37140,407.46253 609.23904,414.64465 609.23904,414.64465 z "
+ id="path33913" />
+ <path
+ style="fill:url(#linearGradient34115);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 607.84672,397.27105 C 603.40665,388.06574 604.66285,384.09616 607.28860,384.18950 C 609.91435,384.28285 614.49806,383.99805 613.73857,387.04349 C 612.97908,390.08893 607.84672,397.27105 607.84672,397.27105 z "
+ id="path33923" />
+ <path
+ style="fill:url(#linearGradient34116);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 613.78693,406.67639 C 609.34686,397.47108 610.60306,393.50150 613.22881,393.59484 C 615.85456,393.68819 620.43827,393.40339 619.67878,396.44883 C 618.91929,399.49427 613.78693,406.67639 613.78693,406.67639 z "
+ id="path33925" />
+ <path
+ style="fill:url(#linearGradient34117);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 603.88657,389.10326 C 599.44650,379.89795 600.70270,375.92837 603.32845,376.02171 C 605.95420,376.11506 610.53791,375.83026 609.77842,378.87570 C 609.01893,381.92114 603.88657,389.10326 603.88657,389.10326 z "
+ id="path33927" />
+ <path
+ style="fill:url(#linearGradient34118);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 618.48960,419.79437 C 614.04953,410.58906 615.30573,406.61948 617.93148,406.71282 C 620.55723,406.80617 625.14094,406.52137 624.38145,409.56681 C 623.62196,412.61225 618.48960,419.79437 618.48960,419.79437 z "
+ id="path33929" />
+ </g>
+ </g>
+ <path
+ style="fill:url(#radialGradient17610);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;"
+ d="M 580.83968,395.97047 C 643.19962,312.61302 659.94642,299.14582 659.94642,299.14582 L 620.38528,421.64384 L 580.83968,395.97047 z "
+ id="path3512"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#radialGradient17607);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;"
+ d="M 604.27141,399.29038 C 666.63135,315.93293 671.52619,313.26419 673.10645,313.00081 L 634.33544,434.18194 L 604.27141,399.29038 z "
+ id="path17606"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#radialGradient17609);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;"
+ d="M 601.11089,431.42236 C 663.47083,348.06491 682.85140,333.28083 682.85140,333.28083 L 637.23259,453.40845 L 601.11089,431.42236 z "
+ id="path17608"
+ sodipodi:nodetypes="cccc" />
+ <path
+ sodipodi:type="arc"
+ style="fill:url(#radialGradient18237);fill-opacity:1.0000000;stroke:none;stroke-width:1.8314677;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ id="BackWingHalo"
+ sodipodi:cx="663.84143"
+ sodipodi:cy="345.54175"
+ sodipodi:rx="12.247025"
+ sodipodi:ry="34.765747"
+ d="M 676.08846 345.54175 A 12.247025 34.765747 0 1 1 651.59441,345.54175 A 12.247025 34.765747 0 1 1 676.08846 345.54175 z"
+ transform="matrix(2.145401,-0.357956,0.671830,1.490337,-990.9290,63.71587)" />
+ <path
+ sodipodi:type="arc"
+ style="fill:url(#radialGradient13930);fill-opacity:1.0000000;stroke:none;stroke-width:1.7500000;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:0.053475920"
+ id="HeadHalo"
+ sodipodi:cx="599.53973"
+ sodipodi:cy="448.49213"
+ sodipodi:rx="56.203156"
+ sodipodi:ry="49.103809"
+ d="M 655.74289 448.49213 A 56.203156 49.103809 0 1 1 543.33658,448.49213 A 56.203156 49.103809 0 1 1 655.74289 448.49213 z"
+ transform="matrix(1.223158,0.000000,0.000000,1.122892,-155.8000,-82.68502)" />
+ <g
+ id="Birdie">
+ <path
+ style="fill:#fffffa;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000058;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:0.053475935;stroke-miterlimit:4.0000000;stroke-dasharray:none;"
+ d="M 458.04332,450.93245 C 457.11280,449.75570 522.73441,425.23650 539.48624,420.36763 C 548.77715,409.20630 551.85467,402.90231 573.33202,396.55508 C 600.98541,391.35156 720.34010,482.39140 734.31938,508.36094 C 748.29866,534.33048 725.23285,559.53621 713.35046,557.24478 C 701.46807,554.95334 617.12218,521.03538 600.34705,506.52299 C 583.57191,492.01060 548.39498,425.86946 540.70637,429.68851 C 519.43019,425.30660 467.66168,451.33268 458.04332,450.93245 z "
+ id="bird_outline"
+ sodipodi:nodetypes="cccccccc" />
+ <path
+ style="fill:#6c665e;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 680.50435,524.43517 C 690.31594,541.60546 697.67464,548.26333 708.18707,548.26333 C 718.69949,548.26333 723.60529,543.70795 719.04991,537.05008 C 714.49452,530.39221 706.78541,530.04180 708.53748,533.19552 C 710.28955,536.34925 715.54576,539.15256 711.69121,540.55422 C 707.83665,541.95588 698.37547,541.25505 696.62340,539.85339 C 694.87133,538.45174 689.26470,525.48641 686.81180,520.58061 C 684.35890,515.67481 680.50435,524.43517 680.50435,524.43517 z "
+ id="BirdFoot" />
+ <path
+ style="fill:url(#linearGradient3567);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;"
+ d="M 575.97381,396.37829 C 592.09877,396.47202 627.47152,418.31792 640.43902,428.60278 C 639.52405,436.38003 645.93825,483.25429 584.63524,487.14291 C 573.19469,471.12923 547.83846,424.28489 536.40133,429.54597 C 535.25762,422.68370 538.00254,427.25854 538.68876,421.76872 C 542.80613,414.44896 558.58937,397.06451 575.97381,396.37829 z "
+ id="head_base"
+ sodipodi:nodetypes="cccccc" />
+ <path
+ style="fill:url(#linearGradient1698);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 538.87716,420.66535 C 504.44737,432.14539 487.71845,437.90912 457.83107,450.82288 C 462.50029,452.69317 521.25627,425.48052 540.61484,429.59789 C 541.30106,426.85298 541.98360,419.62956 538.87716,420.66535 z "
+ id="beak"
+ sodipodi:nodetypes="cccs" />
+ <path
+ style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 541.15636,426.40968 C 497.42096,434.99068 496.59054,437.02059 490.13173,439.05050 C 477.58317,444.49436 458.66807,450.95317 458.66807,450.95317"
+ id="Lips"
+ sodipodi:nodetypes="ccc" />
+ <path
+ style="fill:url(#linearGradient4193);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 637.96561,427.71688 C 633.84824,447.61748 621.27168,448.08438 626.08468,464.30800 C 630.89768,481.89894 620.70773,502.90478 635.57599,509.53832 C 650.44426,516.17185 694.96099,501.59903 708.21096,507.55488 C 718.72627,513.05496 724.88522,525.84659 731.51876,528.13402 C 738.15229,530.42144 737.69738,516.23855 733.35127,507.77507 C 730.60550,498.16703 691.26091,466.83015 683.71241,459.96787 C 674.56869,453.56137 640.25303,425.88694 637.96561,427.71688 z "
+ id="BackBase"
+ sodipodi:nodetypes="cccccccc" />
+ <path
+ style="fill:url(#linearGradient4821);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 545.10678,429.15093 C 567.77430,416.54734 573.67730,432.85787 594.45586,443.23729 C 615.23441,453.61673 614.76216,437.55332 624.67921,438.29471 C 634.59624,439.03609 628.22099,445.95572 626.09592,454.11098 C 623.97084,462.26625 591.15017,479.07104 579.34417,477.09400 C 572.02445,470.17438 553.37099,441.26026 553.37099,441.26026"
+ id="ThroatBase"
+ sodipodi:nodetypes="cccccc" />
+ <path
+ style="fill:url(#linearGradient18130);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 573.63547,411.66502 C 585.45813,405.99015 592.78818,408.35468 593.49754,410.00985 C 594.20690,411.66502 587.58621,417.57635 585.45813,418.75862 C 583.33005,419.94089 577.65517,421.12315 575.52709,418.75862 C 573.39902,416.39409 573.63547,411.66502 573.63547,411.66502 z "
+ id="EyeBase" />
+ <path
+ sodipodi:type="arc"
+ style="fill:#000000;fill-opacity:1.0000000;stroke:none;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ id="EyeBall"
+ sodipodi:cx="573.63550"
+ sodipodi:cy="413.32019"
+ sodipodi:rx="4.0197043"
+ sodipodi:ry="3.5467980"
+ d="M 577.65520 413.32019 A 4.0197043 3.5467980 0 1 1 569.61579,413.32019 A 4.0197043 3.5467980 0 1 1 577.65520 413.32019 z"
+ transform="translate(4.256158,0.709360)" />
+ <path
+ sodipodi:type="arc"
+ style="fill:#efefef;fill-opacity:1.0000000;stroke:none;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ id="EyeHighlight"
+ sodipodi:cx="579.19214"
+ sodipodi:cy="413.55664"
+ sodipodi:rx="1.3004926"
+ sodipodi:ry="0.94581282"
+ d="M 580.49263 413.55664 A 1.3004926 0.94581282 0 1 1 577.89165,413.55664 A 1.3004926 0.94581282 0 1 1 580.49263 413.55664 z" />
+ <path
+ style="fill:url(#radialGradient14558);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 602.02453,503.98535 C 627.10889,527.64984 683.43037,547.76465 695.26261,548.00130 C 707.09485,548.23794 725.07986,552.26090 720.58361,543.97833 C 716.08736,535.69576 713.24762,528.35977 683.43037,515.81759 C 653.61312,503.27542 638.94113,521.26043 626.39896,514.16108 C 613.85678,507.06173 610.78039,495.70278 603.68105,498.77916 C 596.58170,501.85555 602.02453,503.98535 602.02453,503.98535 z "
+ id="BellyShadows" />
+ <g
+ id="HeadFeathers">
+ <path
+ style="fill:url(#linearGradient20129);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 619.06928,426.21244 C 624.93688,434.25311 627.38557,434.44975 630.19177,432.38664 C 632.99795,430.32353 633.28654,424.53756 630.81744,422.40292 C 628.34834,420.26826 619.06928,426.21244 619.06928,426.21244 z "
+ id="path20128"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient20127);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 609.32433,418.31113 C 615.19193,426.35180 617.64062,426.54844 620.44682,424.48533 C 623.25300,422.42222 623.54159,416.63625 621.07249,414.50161 C 618.60339,412.36695 609.32433,418.31113 609.32433,418.31113 z "
+ id="path20126"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient20121);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 594.04847,417.25762 C 599.91607,425.29829 602.36476,425.49493 605.17096,423.43182 C 607.97714,421.36871 608.26573,415.58274 605.79663,413.44810 C 603.32753,411.31344 594.04847,417.25762 594.04847,417.25762 z "
+ id="path20120"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient20119);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 591.94145,407.24930 C 597.80905,415.28997 600.25774,415.48661 603.06394,413.42350 C 605.87012,411.36039 606.15871,405.57442 603.68961,403.43978 C 601.22051,401.30512 591.94145,407.24930 591.94145,407.24930 z "
+ id="path20118"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient20117);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 583.77678,405.66904 C 589.64438,413.70971 592.09307,413.90635 594.89927,411.84324 C 597.70545,409.78013 597.99404,403.99416 595.52494,401.85952 C 593.05584,399.72486 583.77678,405.66904 583.77678,405.66904 z "
+ id="path20116"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient20115);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 578.89127,396.14067 C 579.85107,406.04824 581.85900,407.46351 585.32454,407.11535 C 588.79006,406.76719 591.98262,401.93311 590.94325,398.83910 C 589.90389,395.74508 578.89127,396.14067 578.89127,396.14067 z "
+ id="path20114"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient20113);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 589.83445,409.61969 C 595.70205,417.66036 598.15074,417.85700 600.95694,415.79389 C 603.76312,413.73078 604.05171,407.94481 601.58261,405.81017 C 599.11351,403.67551 589.83445,409.61969 589.83445,409.61969 z "
+ id="path20112"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient20109);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 600.57062,411.91439 C 606.43822,419.95506 608.88691,420.15170 611.69311,418.08859 C 614.49929,416.02548 614.78788,410.23951 612.31878,408.10487 C 609.84968,405.97021 600.57062,411.91439 600.57062,411.91439 z "
+ id="path20108"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27960);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 575.40066,413.05206 C 583.27804,420.33590 586.12819,420.23921 589.07770,417.85627 C 592.02719,415.47335 591.55899,409.69423 588.41703,407.86916 C 585.27509,406.04408 575.40066,413.05206 575.40066,413.05206 z "
+ id="path27959"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27958);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 602.06821,445.72338 C 610.69260,450.69339 613.01062,449.88003 614.73894,446.85611 C 616.46725,443.83220 614.38445,438.42640 611.26179,437.47658 C 608.13913,436.52674 602.06821,445.72338 602.06821,445.72338 z "
+ id="path27957"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27956);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 604.64225,431.21588 C 609.91325,440.93036 612.74918,442.12250 616.46004,441.41538 C 620.17089,440.70826 621.67510,435.58577 619.20552,432.62938 C 616.73595,429.67296 604.64225,431.21588 604.64225,431.21588 z "
+ id="path27955"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27952);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 606.19966,426.80387 C 613.10419,434.36636 616.16890,434.64818 619.81382,432.88895 C 623.45873,431.12972 624.15695,425.87740 621.17905,423.83140 C 618.20115,421.78539 606.19966,426.80387 606.19966,426.80387 z "
+ id="path27951"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27950);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 605.21579,413.22219 C 610.41440,421.71074 612.83919,422.10463 615.80294,420.27504 C 618.76667,418.44546 619.52190,412.70174 617.23338,410.37454 C 614.94487,408.04733 605.21579,413.22219 605.21579,413.22219 z "
+ id="path27949"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27948);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 601.15198,423.90805 C 609.77637,428.87806 612.09439,428.06470 613.82271,425.04078 C 615.55102,422.01687 613.46822,416.61107 610.34556,415.66125 C 607.22290,414.71141 601.15198,423.90805 601.15198,423.90805 z "
+ id="path27947"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27944);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 599.58670,439.51959 C 608.21109,444.48960 610.52911,443.67624 612.25743,440.65232 C 613.98574,437.62841 611.90294,432.22261 608.78028,431.27279 C 605.65762,430.32295 599.58670,439.51959 599.58670,439.51959 z "
+ id="path27943"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27920);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 578.24566,405.02651 C 586.87005,409.99652 589.18807,409.18316 590.91639,406.15924 C 592.64470,403.13533 590.56190,397.72953 587.43924,396.77971 C 584.31658,395.82987 578.24566,405.02651 578.24566,405.02651 z "
+ id="path27919"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27942);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 593.63106,444.97892 C 602.25545,449.94893 604.57347,449.13557 606.30179,446.11165 C 608.03010,443.08774 605.94730,437.68194 602.82464,436.73212 C 599.70198,435.78228 593.63106,444.97892 593.63106,444.97892 z "
+ id="path27941"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27940);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 585.44205,439.76774 C 594.06644,444.73775 596.38446,443.92439 598.11278,440.90047 C 599.84109,437.87656 597.75829,432.47076 594.63563,431.52094 C 591.51297,430.57110 585.44205,439.76774 585.44205,439.76774 z "
+ id="path27939"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27938);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 591.95039,428.68065 C 596.95598,438.27479 599.61628,438.91292 603.07887,437.20592 C 606.54144,435.49892 607.90564,429.38465 605.57338,426.67808 C 603.24114,423.97147 591.95039,428.68065 591.95039,428.68065 z "
+ id="path27937"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27932);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 585.93835,408.00433 C 594.56274,412.97434 596.88076,412.16098 598.60908,409.13706 C 600.33739,406.11315 598.25459,400.70735 595.13193,399.75753 C 592.00927,398.80769 585.93835,408.00433 585.93835,408.00433 z "
+ id="path27931"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27930);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 588.91617,413.46366 C 597.54056,418.43367 599.85858,417.62031 601.58690,414.59639 C 603.31521,411.57248 601.23241,406.16668 598.10975,405.21686 C 594.98709,404.26702 588.91617,413.46366 588.91617,413.46366 z "
+ id="path27929"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27928);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 584.94575,422.14897 C 593.57014,427.11898 595.88816,426.30562 597.61648,423.28170 C 599.34479,420.25779 597.26199,414.85199 594.13933,413.90217 C 591.01667,412.95233 584.94575,422.14897 584.94575,422.14897 z "
+ id="path27927"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27926);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 583.20869,428.84907 C 591.83308,433.81908 594.15110,433.00572 595.87942,429.98180 C 597.60773,426.95789 595.52493,421.55209 592.40227,420.60227 C 589.27961,419.65243 583.20869,428.84907 583.20869,428.84907 z "
+ id="path27925"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27922);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 575.01968,426.11940 C 583.64407,431.08941 585.96209,430.27605 587.69041,427.25213 C 589.41872,424.22822 587.33592,418.82242 584.21326,417.87260 C 581.09060,416.92276 575.01968,426.11940 575.01968,426.11940 z "
+ id="path27921"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27924);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 579.73456,435.54916 C 588.35895,440.51917 590.67697,439.70581 592.40529,436.68189 C 594.13360,433.65798 592.05080,428.25218 588.92814,427.30236 C 585.80548,426.35252 579.73456,435.54916 579.73456,435.54916 z "
+ id="path27923"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27918);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 572.75291,424.44253 C 576.40857,433.70089 578.72900,434.50734 581.96403,433.21669 C 585.19904,431.92603 586.93419,426.39883 585.08163,423.71160 C 583.22909,421.02435 572.75291,424.44253 572.75291,424.44253 z "
+ id="path27917"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27916);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 564.44388,422.38247 C 571.28725,429.61084 573.74106,429.49419 576.26181,427.09065 C 578.78255,424.68712 578.33229,418.91148 575.61155,417.10850 C 572.89082,415.30550 564.44388,422.38247 564.44388,422.38247 z "
+ id="path27915"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27914);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 570.87014,404.61391 C 579.49453,409.58392 581.81255,408.77056 583.54087,405.74664 C 585.26918,402.72273 583.18638,397.31693 580.06372,396.36711 C 576.94106,395.41727 570.87014,404.61391 570.87014,404.61391 z "
+ id="path27913"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27912);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 563.60470,406.72531 C 573.96922,412.71065 576.75494,411.73113 578.83199,408.08945 C 580.90901,404.44778 578.40597,397.93763 574.65326,396.79377 C 570.90054,395.64989 563.60470,406.72531 563.60470,406.72531 z "
+ id="path27911"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27906);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 558.14537,424.38234 C 566.76976,429.35235 569.08778,428.53899 570.81610,425.51507 C 572.54441,422.49116 570.46161,417.08536 567.33895,416.13554 C 564.21629,415.18570 558.14537,424.38234 558.14537,424.38234 z "
+ id="path27905"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27908);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 560.35672,416.37979 C 568.98111,421.34980 571.29913,420.53644 573.02745,417.51252 C 574.75576,414.48861 572.67296,409.08281 569.55030,408.13299 C 566.42764,407.18315 560.35672,416.37979 560.35672,416.37979 z "
+ id="path27907"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27904);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 547.72300,424.38234 C 556.34739,429.35235 558.66541,428.53899 560.39373,425.51507 C 562.12204,422.49116 560.03924,417.08536 556.91658,416.13554 C 553.79392,415.18570 547.72300,424.38234 547.72300,424.38234 z "
+ id="path27903"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27902);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 551.44527,421.40452 C 560.06966,426.37453 562.38768,425.56117 564.11600,422.53725 C 565.84431,419.51334 563.76151,414.10754 560.63885,413.15772 C 557.51619,412.20788 551.44527,421.40452 551.44527,421.40452 z "
+ id="path27901"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27900);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 546.48224,415.20072 C 555.10663,420.17073 557.42465,419.35737 559.15297,416.33345 C 560.88128,413.30954 558.79848,407.90374 555.67582,406.95392 C 552.55316,406.00408 546.48224,415.20072 546.48224,415.20072 z "
+ id="path27899"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27274);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 539.10925,422.27894 C 547.73364,427.24895 550.05166,426.43559 551.77998,423.41167 C 553.50829,420.38776 551.42549,414.98196 548.30283,414.03214 C 545.18017,413.08230 539.10925,422.27894 539.10925,422.27894 z "
+ id="path27273"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27910);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 555.66385,410.73399 C 564.28824,415.70400 566.60626,414.89064 568.33458,411.86672 C 570.06289,408.84281 567.98009,403.43701 564.85743,402.48719 C 561.73477,401.53735 555.66385,410.73399 555.66385,410.73399 z "
+ id="path27909"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27934);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 596.51591,409.10108 C 601.83252,417.51623 604.26258,417.87623 607.20049,416.00544 C 610.13839,414.13466 610.81336,408.38095 608.49258,406.08594 C 606.17180,403.79090 596.51591,409.10108 596.51591,409.10108 z "
+ id="path27933"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27936);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 592.67727,416.77620 C 596.88740,427.85112 599.54918,428.81144 603.25504,427.25936 C 606.96088,425.70728 608.93844,419.08704 606.80910,415.87429 C 604.67977,412.66151 592.67727,416.77620 592.67727,416.77620 z "
+ id="path27935"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27946);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 600.96254,430.15152 C 609.58693,435.12153 611.90495,434.30817 613.63327,431.28425 C 615.36158,428.26034 613.27878,422.85454 610.15612,421.90472 C 607.03346,420.95488 600.96254,430.15152 600.96254,430.15152 z "
+ id="path27945"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27954);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 607.16920,418.74594 C 617.26123,426.12996 620.97418,426.06984 624.86792,423.72497 C 628.76166,421.38012 628.28213,415.59564 624.23255,413.73050 C 620.18296,411.86533 607.16920,418.74594 607.16920,418.74594 z "
+ id="path27953"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29221);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 616.09287,427.85620 C 615.34841,437.78227 617.08547,439.51933 620.55960,439.76748 C 624.03372,440.01563 628.00415,435.79705 627.50784,432.57108 C 627.01154,429.34511 616.09287,427.85620 616.09287,427.85620 z "
+ id="path29220"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient6864);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 538.44681,423.50496 C 543.71781,433.21944 546.55374,434.41158 550.26460,433.70446 C 553.97545,432.99734 555.47966,427.87485 553.01008,424.91846 C 550.54051,421.96204 538.44681,423.50496 538.44681,423.50496 z "
+ id="path6863"
+ sodipodi:nodetypes="cccc" />
+ </g>
+ <g
+ id="NeckFeathers">
+ <path
+ style="fill:url(#linearGradient20795);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 608.42083,447.63959 C 607.97867,457.58372 609.76777,459.26714 613.24784,459.40949 C 616.72790,459.55184 620.56816,455.21443 619.97395,452.00506 C 619.37974,448.79567 608.42083,447.63959 608.42083,447.63959 z "
+ id="path20794"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient20793);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 581.29301,457.12117 C 580.85085,467.06530 582.63995,468.74872 586.12002,468.89107 C 589.60008,469.03342 593.44034,464.69601 592.84613,461.48664 C 592.25192,458.27725 581.29301,457.12117 581.29301,457.12117 z "
+ id="path20792"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient20791);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 560.22286,436.57777 C 559.78070,446.52190 561.56980,448.20532 565.04987,448.34767 C 568.52993,448.49002 572.37019,444.15261 571.77598,440.94324 C 571.18177,437.73385 560.22286,436.57777 560.22286,436.57777 z "
+ id="path20790"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient20789);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 596.83225,458.96480 C 596.39009,468.90893 598.17919,470.59235 601.65926,470.73470 C 605.13932,470.87705 608.97958,466.53964 608.38537,463.33027 C 607.79116,460.12088 596.83225,458.96480 596.83225,458.96480 z "
+ id="path20788"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient20787);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 584.71691,446.05933 C 584.27475,456.00346 586.06385,457.68688 589.54392,457.82923 C 593.02398,457.97158 596.86424,453.63417 596.27003,450.42480 C 595.67582,447.21541 584.71691,446.05933 584.71691,446.05933 z "
+ id="path20786"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient20785);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 573.39171,464.23234 C 572.94955,474.17647 574.73865,475.85989 578.21872,476.00224 C 581.69878,476.14459 585.53904,471.80718 584.94483,468.59781 C 584.35062,465.38842 573.39171,464.23234 573.39171,464.23234 z "
+ id="path20784"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient20783);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 593.93511,438.68478 C 593.49295,448.62891 595.28205,450.31233 598.76212,450.45468 C 602.24218,450.59703 606.08244,446.25962 605.48823,443.05025 C 604.89402,439.84086 593.93511,438.68478 593.93511,438.68478 z "
+ id="path20782"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient20781);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 572.86495,439.47491 C 572.42279,449.41904 574.21189,451.10246 577.69196,451.24481 C 581.17202,451.38716 585.01228,447.04975 584.41807,443.84038 C 583.82386,440.63099 572.86495,439.47491 572.86495,439.47491 z "
+ id="path20780"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient20779);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 547.31740,427.09620 C 546.87524,437.04033 548.66434,438.72375 552.14441,438.86610 C 555.62447,439.00845 559.46473,434.67104 558.87052,431.46167 C 558.27631,428.25228 547.31740,427.09620 547.31740,427.09620 z "
+ id="path20777"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient20776);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 540.14349,426.29449 C 544.73263,435.12744 547.12375,435.69078 550.20875,434.07402 C 553.29375,432.45727 554.45080,426.78083 552.33152,424.29854 C 550.21222,421.81623 540.14349,426.29449 540.14349,426.29449 z "
+ id="path20775"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient20774);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 554.69195,437.36790 C 554.24979,447.31203 556.03889,448.99545 559.51896,449.13780 C 562.99902,449.28015 566.83928,444.94274 566.24507,441.73337 C 565.65086,438.52398 554.69195,437.36790 554.69195,437.36790 z "
+ id="path20773"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient20772);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 564.17352,451.32687 C 563.73136,461.27100 565.52046,462.95442 569.00053,463.09677 C 572.48059,463.23912 576.32085,458.90171 575.72664,455.69234 C 575.13243,452.48295 564.17352,451.32687 564.17352,451.32687 z "
+ id="path20771"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient20770);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 561.01299,446.32271 C 560.57083,456.26684 562.35993,457.95026 565.84000,458.09261 C 569.32006,458.23496 573.16032,453.89755 572.56611,450.68818 C 571.97190,447.47879 561.01299,446.32271 561.01299,446.32271 z "
+ id="path20769"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient20766);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 568.12417,454.22402 C 567.68201,464.16815 569.47111,465.85157 572.95118,465.99392 C 576.43124,466.13627 580.27150,461.79886 579.67729,458.58949 C 579.08308,455.38010 568.12417,454.22402 568.12417,454.22402 z "
+ id="path20765"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient20139);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 570.64822,460.80002 C 570.20606,470.74415 571.99516,472.42757 575.47523,472.56992 C 578.95529,472.71227 582.79555,468.37486 582.20134,465.16549 C 581.60713,461.95610 570.64822,460.80002 570.64822,460.80002 z "
+ id="path20138"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27208);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 555.92368,423.73900 C 555.17922,433.66507 556.91628,435.40213 560.39041,435.65028 C 563.86453,435.89843 567.83496,431.67985 567.33865,428.45388 C 566.84235,425.22791 555.92368,423.73900 555.92368,423.73900 z "
+ id="path27207"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27214);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 566.84235,425.22791 C 566.09789,435.15398 567.83495,436.89104 571.30908,437.13919 C 574.78320,437.38734 578.75363,433.16876 578.25732,429.94279 C 577.76102,426.71682 566.84235,425.22791 566.84235,425.22791 z "
+ id="path27213"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27224);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 573.54245,428.45389 C 572.79799,438.37996 574.53505,440.11702 578.00918,440.36517 C 581.48330,440.61332 585.45373,436.39474 584.95742,433.16877 C 584.46112,429.94280 573.54245,428.45389 573.54245,428.45389 z "
+ id="path27223"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27228);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 570.81278,441.35777 C 570.06832,451.28384 571.80538,453.02090 575.27951,453.26905 C 578.75363,453.51720 582.72406,449.29862 582.22775,446.07265 C 581.73145,442.84668 570.81278,441.35777 570.81278,441.35777 z "
+ id="path27227"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27234);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 573.54245,448.80232 C 572.79799,458.72839 574.53505,460.46545 578.00918,460.71360 C 581.48330,460.96175 585.45373,456.74317 584.95742,453.51720 C 584.46112,450.29123 573.54245,448.80232 573.54245,448.80232 z "
+ id="path27233"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27240);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 589.67231,440.36517 C 588.92785,450.29124 590.66491,452.02830 594.13904,452.27645 C 597.61316,452.52460 601.58359,448.30602 601.08728,445.08005 C 600.59098,441.85408 589.67231,440.36517 589.67231,440.36517 z "
+ id="path27239"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27254);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 585.95003,450.78754 C 585.20557,460.71361 586.94263,462.45067 590.41676,462.69882 C 593.89088,462.94697 597.86131,458.72839 597.36500,455.50242 C 596.86870,452.27645 585.95003,450.78754 585.95003,450.78754 z "
+ id="path27253"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27258);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 600.34283,442.84668 C 599.59837,452.77275 601.33543,454.50981 604.80956,454.75796 C 608.28368,455.00611 612.25411,450.78753 611.75780,447.56156 C 611.26150,444.33559 600.34283,442.84668 600.34283,442.84668 z "
+ id="path27257"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27206);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 549.47173,426.46867 C 548.72727,436.39474 550.46433,438.13180 553.93846,438.37995 C 557.41258,438.62810 561.38301,434.40952 560.88670,431.18355 C 560.39040,427.95758 549.47173,426.46867 549.47173,426.46867 z "
+ id="Feather"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27210);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 552.69771,433.41692 C 551.95325,443.34299 553.69031,445.08005 557.16444,445.32820 C 560.63856,445.57635 564.60899,441.35777 564.11268,438.13180 C 563.61638,434.90583 552.69771,433.41692 552.69771,433.41692 z "
+ id="path27209"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27212);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 561.13486,430.68725 C 560.39040,440.61332 562.12746,442.35038 565.60159,442.59853 C 569.07571,442.84668 573.04614,438.62810 572.54983,435.40213 C 572.05353,432.17616 561.13486,430.68725 561.13486,430.68725 z "
+ id="path27211"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27216);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 569.82017,433.91322 C 569.07571,443.83929 570.81277,445.57635 574.28690,445.82450 C 577.76102,446.07265 581.73145,441.85407 581.23514,438.62810 C 580.73884,435.40213 569.82017,433.91322 569.82017,433.91322 z "
+ id="path27215"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27218);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 561.63117,438.13180 C 560.88671,448.05787 562.62377,449.79493 566.09790,450.04308 C 569.57202,450.29123 573.54245,446.07265 573.04614,442.84668 C 572.54984,439.62071 561.63117,438.13180 561.63117,438.13180 z "
+ id="path27217"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27222);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 557.66074,442.59853 C 556.91628,452.52460 558.65334,454.26166 562.12747,454.50981 C 565.60159,454.75796 569.57202,450.53938 569.07571,447.31341 C 568.57941,444.08744 557.66074,442.59853 557.66074,442.59853 z "
+ id="path27221"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27226);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 575.52766,435.15398 C 574.78320,445.08005 576.52026,446.81711 579.99439,447.06526 C 583.46851,447.31341 587.43894,443.09483 586.94263,439.86886 C 586.44633,436.64289 575.52766,435.15398 575.52766,435.15398 z "
+ id="path27225"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27230);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 564.85714,445.57635 C 564.11268,455.50242 565.84974,457.23948 569.32387,457.48763 C 572.79799,457.73578 576.76842,453.51720 576.27211,450.29123 C 575.77581,447.06526 564.85714,445.57635 564.85714,445.57635 z "
+ id="path27229"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27232);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 567.09050,451.53199 C 566.34604,461.45806 568.08310,463.19512 571.55723,463.44327 C 575.03135,463.69142 579.00178,459.47284 578.50547,456.24687 C 578.00917,453.02090 567.09050,451.53199 567.09050,451.53199 z "
+ id="path27231"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27236);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 576.76842,443.83929 C 576.02396,453.76536 577.76102,455.50242 581.23515,455.75057 C 584.70927,455.99872 588.67970,451.78014 588.18339,448.55417 C 587.68709,445.32820 576.76842,443.83929 576.76842,443.83929 z "
+ id="path27235"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27238);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 582.22776,437.63550 C 581.48330,447.56157 583.22036,449.29863 586.69449,449.54678 C 590.16861,449.79493 594.13904,445.57635 593.64273,442.35038 C 593.14643,439.12441 582.22776,437.63550 582.22776,437.63550 z "
+ id="path27237"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27242);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 585.70188,444.58374 C 584.95742,454.50981 586.69448,456.24687 590.16861,456.49502 C 593.64273,456.74317 597.61316,452.52459 597.11685,449.29862 C 596.62055,446.07265 585.70188,444.58374 585.70188,444.58374 z "
+ id="path27241"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27244);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 577.51287,449.79493 C 576.76841,459.72100 578.50547,461.45806 581.97960,461.70621 C 585.45372,461.95436 589.42415,457.73578 588.92784,454.50981 C 588.43154,451.28384 577.51287,449.79493 577.51287,449.79493 z "
+ id="path27243"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27246);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 571.80539,455.99872 C 571.06093,465.92479 572.79799,467.66185 576.27212,467.91000 C 579.74624,468.15815 583.71667,463.93957 583.22036,460.71360 C 582.72406,457.48763 571.80539,455.99872 571.80539,455.99872 z "
+ id="path27245"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27248);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 575.77581,462.45066 C 575.03135,472.37673 576.76841,474.11379 580.24254,474.36194 C 583.71666,474.61009 587.68709,470.39151 587.19078,467.16554 C 586.69448,463.93957 575.77581,462.45066 575.77581,462.45066 z "
+ id="path27247"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27252);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 581.97960,456.74318 C 581.23514,466.66925 582.97220,468.40631 586.44633,468.65446 C 589.92045,468.90261 593.89088,464.68403 593.39457,461.45806 C 592.89827,458.23209 581.97960,456.74318 581.97960,456.74318 z "
+ id="path27251"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27256);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 591.65752,446.56896 C 590.91306,456.49503 592.65012,458.23209 596.12425,458.48024 C 599.59837,458.72839 603.56880,454.50981 603.07249,451.28384 C 602.57619,448.05787 591.65752,446.56896 591.65752,446.56896 z "
+ id="path27255"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27260);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 606.79477,442.59853 C 606.05031,452.52460 607.78737,454.26166 611.26150,454.50981 C 614.73562,454.75796 618.70605,450.53938 618.20974,447.31341 C 617.71344,444.08744 606.79477,442.59853 606.79477,442.59853 z "
+ id="path27259"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27262);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 595.08761,449.33831 C 594.34315,459.26438 596.08021,461.00144 599.55434,461.24959 C 603.02846,461.49774 606.99889,457.27916 606.50258,454.05319 C 606.00628,450.82722 595.08761,449.33831 595.08761,449.33831 z "
+ id="path27261"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27264);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 588.43889,457.45094 C 587.69443,467.37701 589.43149,469.11407 592.90562,469.36222 C 596.37974,469.61037 600.35017,465.39179 599.85386,462.16582 C 599.35756,458.93985 588.43889,457.45094 588.43889,457.45094 z "
+ id="path27263"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27266);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 587.17313,468.56341 C 586.42867,478.48948 588.16573,480.22654 591.63986,480.47469 C 595.11398,480.72284 599.08441,476.50426 598.58810,473.27829 C 598.09180,470.05232 587.17313,468.56341 587.17313,468.56341 z "
+ id="path27265"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27268);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 577.05326,468.12146 C 576.30880,478.04753 578.04586,479.78459 581.51999,480.03274 C 584.99411,480.28089 588.96454,476.06231 588.46823,472.83634 C 587.97193,469.61037 577.05326,468.12146 577.05326,468.12146 z "
+ id="path27267"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient27272);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 609.30853,437.08621 C 611.73957,446.73873 613.93661,447.83771 617.31107,446.97507 C 620.68553,446.11243 623.11905,440.85518 621.62855,437.95146 C 620.13806,435.04773 609.30853,437.08621 609.30853,437.08621 z "
+ id="path27271"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29213);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 582.49585,474.99422 C 581.75139,484.92029 583.48845,486.65735 586.96258,486.90550 C 590.43670,487.15365 594.40713,482.93507 593.91082,479.70910 C 593.41452,476.48313 582.49585,474.99422 582.49585,474.99422 z "
+ id="path28584"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29217);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 593.09871,463.62488 C 592.35425,473.55095 594.09131,475.28801 597.56544,475.53616 C 601.03956,475.78431 605.00999,471.56573 604.51368,468.33976 C 604.01738,465.11379 593.09871,463.62488 593.09871,463.62488 z "
+ id="path29216"
+ sodipodi:nodetypes="cccc" />
+ </g>
+ <g
+ id="BellyFeathers">
+ <path
+ style="fill:url(#linearGradient21547);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 632.51863,519.20390 C 631.77417,529.12997 633.51123,530.86703 636.98536,531.11518 C 640.45948,531.36333 644.42991,527.14475 643.93360,523.91878 C 643.43730,520.69281 632.51863,519.20390 632.51863,519.20390 z "
+ id="path21546"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21545);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 688.88128,542.38106 C 688.13682,552.30713 689.87388,554.04419 693.34801,554.29234 C 696.82213,554.54049 700.79256,550.32191 700.29625,547.09594 C 699.79995,543.86997 688.88128,542.38106 688.88128,542.38106 z "
+ id="path21544"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21543);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 714.69221,553.70627 C 713.94775,563.63234 715.68481,565.36940 719.15894,565.61755 C 722.63306,565.86570 726.60349,561.64712 726.10718,558.42115 C 725.61088,555.19518 714.69221,553.70627 714.69221,553.70627 z "
+ id="path21542"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21541);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 706.79091,549.75562 C 706.04645,559.68169 707.78351,561.41875 711.25764,561.66690 C 714.73176,561.91505 718.70219,557.69647 718.20588,554.47050 C 717.70958,551.24453 706.79091,549.75562 706.79091,549.75562 z "
+ id="path21540"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21539);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 723.38365,523.68130 C 722.63919,533.60737 724.37625,535.34443 727.85038,535.59258 C 731.32450,535.84073 735.29493,531.62215 734.79862,528.39618 C 734.30232,525.17021 723.38365,523.68130 723.38365,523.68130 z "
+ id="path21538"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21535);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 629.35810,456.52020 C 628.61364,466.44627 630.35070,468.18333 633.82483,468.43148 C 637.29895,468.67963 641.26938,464.46105 640.77307,461.23508 C 640.27677,458.00911 629.35810,456.52020 629.35810,456.52020 z "
+ id="path21534"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21533);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 713.90208,497.34362 C 713.15762,507.26969 714.89468,509.00675 718.36881,509.25490 C 721.84293,509.50305 725.81336,505.28447 725.31705,502.05850 C 724.82075,498.83253 713.90208,497.34362 713.90208,497.34362 z "
+ id="path21532"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21531);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 695.72908,480.22412 C 694.98462,490.15019 696.72168,491.88725 700.19581,492.13540 C 703.66993,492.38355 707.64036,488.16497 707.14405,484.93900 C 706.64775,481.71303 695.72908,480.22412 695.72908,480.22412 z "
+ id="path21530"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21529);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 709.16130,520.25741 C 708.41684,530.18348 710.15390,531.92054 713.62803,532.16869 C 717.10215,532.41684 721.07258,528.19826 720.57627,524.97229 C 720.07997,521.74632 709.16130,520.25741 709.16130,520.25741 z "
+ id="path21528"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21527);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 703.36701,516.57013 C 702.62255,526.49620 704.35961,528.23326 707.83374,528.48141 C 711.30786,528.72956 715.27829,524.51098 714.78198,521.28501 C 714.28568,518.05904 703.36701,516.57013 703.36701,516.57013 z "
+ id="path21526"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21525);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 690.19816,523.41793 C 689.45370,533.34400 691.19076,535.08106 694.66489,535.32921 C 698.13901,535.57736 702.10944,531.35878 701.61313,528.13281 C 701.11683,524.90684 690.19816,523.41793 690.19816,523.41793 z "
+ id="path21524"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21523);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 688.61790,512.09272 C 687.87344,522.01879 689.61050,523.75585 693.08463,524.00400 C 696.55875,524.25215 700.52918,520.03357 700.03287,516.80760 C 699.53657,513.58163 688.61790,512.09272 688.61790,512.09272 z "
+ id="path21522"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21521);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 675.18568,507.08856 C 674.44122,517.01463 676.17828,518.75169 679.65241,518.99984 C 683.12653,519.24799 687.09696,515.02941 686.60065,511.80344 C 686.10435,508.57747 675.18568,507.08856 675.18568,507.08856 z "
+ id="path21520"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21519);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 654.11553,508.40545 C 653.37107,518.33152 655.10813,520.06858 658.58226,520.31673 C 662.05638,520.56488 666.02681,516.34630 665.53050,513.12033 C 665.03420,509.89436 654.11553,508.40545 654.11553,508.40545 z "
+ id="path21518"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21517);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 634.62564,504.71817 C 633.88118,514.64424 635.61824,516.38130 639.09237,516.62945 C 642.56649,516.87760 646.53692,512.65902 646.04061,509.43305 C 645.54431,506.20708 634.62564,504.71817 634.62564,504.71817 z "
+ id="path21516"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21515);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 625.67083,503.13791 C 624.92637,513.06398 626.66343,514.80104 630.13756,515.04919 C 633.61168,515.29734 637.58211,511.07876 637.08580,507.85279 C 636.58950,504.62682 625.67083,503.13791 625.67083,503.13791 z "
+ id="path21514"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21513);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 614.08225,511.56597 C 613.33779,521.49204 615.07485,523.22910 618.54898,523.47725 C 622.02310,523.72540 625.99353,519.50682 625.49722,516.28085 C 625.00092,513.05488 614.08225,511.56597 614.08225,511.56597 z "
+ id="path21512"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21511);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 620.13991,514.46311 C 619.39545,524.38918 621.13251,526.12624 624.60664,526.37439 C 628.08076,526.62254 632.05119,522.40396 631.55488,519.17799 C 631.05858,515.95202 620.13991,514.46311 620.13991,514.46311 z "
+ id="path21510"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21509);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 629.09473,518.15039 C 628.35027,528.07646 630.08733,529.81352 633.56146,530.06167 C 637.03558,530.30982 641.00601,526.09124 640.50970,522.86527 C 640.01340,519.63930 629.09473,518.15039 629.09473,518.15039 z "
+ id="path21508"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21507);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 638.57630,521.83767 C 637.83184,531.76374 639.56890,533.50080 643.04303,533.74895 C 646.51715,533.99710 650.48758,529.77852 649.99127,526.55255 C 649.49497,523.32658 638.57630,521.83767 638.57630,521.83767 z "
+ id="path21506"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21505);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 672.55191,533.42625 C 671.80745,543.35232 673.54451,545.08938 677.01864,545.33753 C 680.49276,545.58568 684.46319,541.36710 683.96688,538.14113 C 683.47058,534.91516 672.55191,533.42625 672.55191,533.42625 z "
+ id="path21504"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21503);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 664.12385,533.95300 C 663.37939,543.87907 665.11645,545.61613 668.59058,545.86428 C 672.06470,546.11243 676.03513,541.89385 675.53882,538.66788 C 675.04252,535.44191 664.12385,533.95300 664.12385,533.95300 z "
+ id="path21502"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21501);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 696.51921,545.27821 C 695.77475,555.20428 697.51181,556.94134 700.98594,557.18949 C 704.46006,557.43764 708.43049,553.21906 707.93418,549.99309 C 707.43788,546.76712 696.51921,545.27821 696.51921,545.27821 z "
+ id="path21500"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21499);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 713.37533,552.65276 C 712.63087,562.57883 714.36793,564.31589 717.84206,564.56404 C 721.31618,564.81219 725.28661,560.59361 724.79030,557.36764 C 724.29400,554.14167 713.37533,552.65276 713.37533,552.65276 z "
+ id="path21498"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21497);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 732.86522,538.69379 C 732.12076,548.61986 733.85782,550.35692 737.33195,550.60507 C 740.80607,550.85322 744.77650,546.63464 744.28019,543.40867 C 743.78389,540.18270 732.86522,538.69379 732.86522,538.69379 z "
+ id="path21496"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21495);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 715.48234,522.62780 C 714.73788,532.55387 716.47494,534.29093 719.94907,534.53908 C 723.42319,534.78723 727.39362,530.56865 726.89731,527.34268 C 726.40101,524.11671 715.48234,522.62780 715.48234,522.62780 z "
+ id="path21494"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21493);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 726.54417,537.90366 C 725.79971,547.82973 727.53677,549.56679 731.01090,549.81494 C 734.48502,550.06309 738.45545,545.84451 737.95914,542.61854 C 737.46284,539.39257 726.54417,537.90366 726.54417,537.90366 z "
+ id="path21492"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21491);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 728.65119,525.26157 C 727.90673,535.18764 729.64379,536.92470 733.11792,537.17285 C 736.59204,537.42100 740.56247,533.20242 740.06616,529.97645 C 739.56986,526.75048 728.65119,525.26157 728.65119,525.26157 z "
+ id="path21490"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21489);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 737.07925,529.21222 C 736.33479,539.13829 738.07185,540.87535 741.54598,541.12350 C 745.02010,541.37165 748.99053,537.15307 748.49422,533.92710 C 747.99792,530.70113 737.07925,529.21222 737.07925,529.21222 z "
+ id="path21488"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21487);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 738.13276,533.68963 C 737.38830,543.61570 739.12536,545.35276 742.59949,545.60091 C 746.07361,545.84906 750.04404,541.63048 749.54773,538.40451 C 749.05143,535.17854 738.13276,533.68963 738.13276,533.68963 z "
+ id="path21486"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21485);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 729.70470,543.17119 C 728.96024,553.09726 730.69730,554.83432 734.17143,555.08247 C 737.64555,555.33062 741.61598,551.11204 741.11967,547.88607 C 740.62337,544.66010 729.70470,543.17119 729.70470,543.17119 z "
+ id="path21484"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21483);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 724.17378,546.33172 C 723.42932,556.25779 725.16638,557.99485 728.64051,558.24300 C 732.11463,558.49115 736.08506,554.27257 735.58875,551.04660 C 735.09245,547.82063 724.17378,546.33172 724.17378,546.33172 z "
+ id="path21482"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21481);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 711.26831,546.33172 C 710.52385,556.25779 712.26091,557.99485 715.73504,558.24300 C 719.20916,558.49115 723.17959,554.27257 722.68328,551.04660 C 722.18698,547.82063 711.26831,546.33172 711.26831,546.33172 z "
+ id="path21480"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21479);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 700.46986,520.25741 C 699.72540,530.18348 701.46246,531.92054 704.93659,532.16869 C 708.41071,532.41684 712.38114,528.19826 711.88483,524.97229 C 711.38853,521.74632 700.46986,520.25741 700.46986,520.25741 z "
+ id="path21478"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21477);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 696.25583,528.68547 C 695.51137,538.61154 697.24843,540.34860 700.72256,540.59675 C 704.19668,540.84490 708.16711,536.62632 707.67080,533.40035 C 707.17450,530.17438 696.25583,528.68547 696.25583,528.68547 z "
+ id="path21476"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21475);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 710.74156,524.47144 C 709.99710,534.39751 711.73416,536.13457 715.20829,536.38272 C 718.68241,536.63087 722.65284,532.41229 722.15653,529.18632 C 721.66023,525.96035 710.74156,524.47144 710.74156,524.47144 z "
+ id="path21474"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21473);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 721.27664,527.36858 C 720.53218,537.29465 722.26924,539.03171 725.74337,539.27986 C 729.21749,539.52801 733.18792,535.30943 732.69161,532.08346 C 732.19531,528.85749 721.27664,527.36858 721.27664,527.36858 z "
+ id="path21472"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21471);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 718.64287,543.96132 C 717.89841,553.88739 719.63547,555.62445 723.10960,555.87260 C 726.58372,556.12075 730.55415,551.90217 730.05784,548.67620 C 729.56154,545.45023 718.64287,543.96132 718.64287,543.96132 z "
+ id="path21470"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21469);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 700.46986,545.80496 C 699.72540,555.73103 701.46246,557.46809 704.93659,557.71624 C 708.41071,557.96439 712.38114,553.74581 711.88483,550.51984 C 711.38853,547.29387 700.46986,545.80496 700.46986,545.80496 z "
+ id="path21468"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21467);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 675.97581,534.21638 C 675.23135,544.14245 676.96841,545.87951 680.44254,546.12766 C 683.91666,546.37581 687.88709,542.15723 687.39078,538.93126 C 686.89448,535.70529 675.97581,534.21638 675.97581,534.21638 z "
+ id="path21466"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21465);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 683.08699,538.95716 C 682.34253,548.88323 684.07959,550.62029 687.55372,550.86844 C 691.02784,551.11659 694.99827,546.89801 694.50196,543.67204 C 694.00566,540.44607 683.08699,538.95716 683.08699,538.95716 z "
+ id="path21464"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21463);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 688.09115,541.06418 C 687.34669,550.99025 689.08375,552.72731 692.55788,552.97546 C 696.03200,553.22361 700.00243,549.00503 699.50612,545.77906 C 699.00982,542.55309 688.09115,541.06418 688.09115,541.06418 z "
+ id="path21462"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21461);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 674.92230,511.82935 C 674.17784,521.75542 675.91490,523.49248 679.38903,523.74063 C 682.86315,523.98878 686.83358,519.77020 686.33727,516.54423 C 685.84097,513.31826 674.92230,511.82935 674.92230,511.82935 z "
+ id="path21460"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21459);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 670.18152,523.15455 C 669.43706,533.08062 671.17412,534.81768 674.64825,535.06583 C 678.12237,535.31398 682.09280,531.09540 681.59649,527.86943 C 681.10019,524.64346 670.18152,523.15455 670.18152,523.15455 z "
+ id="path21458"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21457);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 658.59294,518.94052 C 657.84848,528.86659 659.58554,530.60365 663.05967,530.85180 C 666.53379,531.09995 670.50422,526.88137 670.00791,523.65540 C 669.51161,520.42943 658.59294,518.94052 658.59294,518.94052 z "
+ id="path21456"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21455);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 655.95917,526.05170 C 655.21471,535.97777 656.95177,537.71483 660.42590,537.96298 C 663.90002,538.21113 667.87045,533.99255 667.37414,530.76658 C 666.87784,527.54061 655.95917,526.05170 655.95917,526.05170 z "
+ id="path21454"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21453);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 662.54359,530.00235 C 661.79913,539.92842 663.53619,541.66548 667.01032,541.91363 C 670.48444,542.16178 674.45487,537.94320 673.95856,534.71723 C 673.46226,531.49126 662.54359,530.00235 662.54359,530.00235 z "
+ id="path21452"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21451);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 673.60542,532.89950 C 672.86096,542.82557 674.59802,544.56263 678.07215,544.81078 C 681.54627,545.05893 685.51670,540.84035 685.02039,537.61438 C 684.52409,534.38841 673.60542,532.89950 673.60542,532.89950 z "
+ id="path21450"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21449);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 582.21364,476.53684 C 581.46918,486.46291 583.20624,488.19997 586.68037,488.44812 C 590.15449,488.69627 594.12492,484.47769 593.62861,481.25172 C 593.13231,478.02575 582.21364,476.53684 582.21364,476.53684 z "
+ id="path21448"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21447);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 578.78974,472.05944 C 578.04528,481.98551 579.78234,483.72257 583.25647,483.97072 C 586.73059,484.21887 590.70102,480.00029 590.20471,476.77432 C 589.70841,473.54835 578.78974,472.05944 578.78974,472.05944 z "
+ id="path21446"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21445);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 594.59235,494.44647 C 593.84789,504.37254 595.58495,506.10960 599.05908,506.35775 C 602.53320,506.60590 606.50363,502.38732 606.00732,499.16135 C 605.51102,495.93538 594.59235,494.44647 594.59235,494.44647 z "
+ id="path21444"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient21443);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 601.44016,499.45063 C 600.69570,509.37670 602.43276,511.11376 605.90689,511.36191 C 609.38101,511.61006 613.35144,507.39148 612.85513,504.16551 C 612.35883,500.93954 601.44016,499.45063 601.44016,499.45063 z "
+ id="path21442"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient20817);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 609.86821,506.03505 C 609.12375,515.96112 610.86081,517.69818 614.33494,517.94633 C 617.80906,518.19448 621.77949,513.97590 621.28318,510.74993 C 620.78688,507.52396 609.86821,506.03505 609.86821,506.03505 z "
+ id="path20816"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29225);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 626.05700,429.26140 C 625.31254,439.18747 627.04960,440.92453 630.52373,441.17268 C 633.99785,441.42083 637.96828,437.20225 637.47197,433.97628 C 636.97567,430.75031 626.05700,429.26140 626.05700,429.26140 z "
+ id="path29224"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29223);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 621.20268,419.29726 C 620.45822,429.22333 622.19528,430.96039 625.66941,431.20854 C 629.14353,431.45669 633.11396,427.23811 632.61765,424.01214 C 632.12135,420.78617 621.20268,419.29726 621.20268,419.29726 z "
+ id="path29222"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29227);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 628.99514,423.89609 C 628.25068,433.82216 629.98774,435.55922 633.46187,435.80737 C 636.93599,436.05552 640.90642,431.83694 640.41011,428.61097 C 639.91381,425.38500 628.99514,423.89609 628.99514,423.89609 z "
+ id="path29226"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29229);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 619.41424,438.33131 C 618.66978,448.25738 620.40684,449.99444 623.88097,450.24259 C 627.35509,450.49074 631.32552,446.27216 630.82921,443.04619 C 630.33291,439.82022 619.41424,438.33131 619.41424,438.33131 z "
+ id="path29228"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29233);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 602.29637,450.33937 C 601.55191,460.26544 603.28897,462.00250 606.76310,462.25065 C 610.23722,462.49880 614.20765,458.28022 613.71134,455.05425 C 613.21504,451.82828 602.29637,450.33937 602.29637,450.33937 z "
+ id="path29232"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29235);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 584.02879,482.78668 C 583.28433,492.71275 585.02139,494.44981 588.49552,494.69796 C 591.96964,494.94611 595.94007,490.72753 595.44376,487.50156 C 594.94746,484.27559 584.02879,482.78668 584.02879,482.78668 z "
+ id="path29234"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29239);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 592.45998,482.91443 C 591.71552,492.84050 593.45258,494.57756 596.92671,494.82571 C 600.40083,495.07386 604.37126,490.85528 603.87495,487.62931 C 603.37865,484.40334 592.45998,482.91443 592.45998,482.91443 z "
+ id="path29238"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29241);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 591.18253,478.18785 C 590.43807,488.11392 592.17513,489.85098 595.64926,490.09913 C 599.12338,490.34728 603.09381,486.12870 602.59750,482.90273 C 602.10120,479.67676 591.18253,478.18785 591.18253,478.18785 z "
+ id="path29240"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29243);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 596.03685,492.36758 C 595.29239,502.29365 597.02945,504.03071 600.50358,504.27886 C 603.97770,504.52701 607.94813,500.30843 607.45182,497.08246 C 606.95552,493.85649 596.03685,492.36758 596.03685,492.36758 z "
+ id="path29242"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29245);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 601.01892,488.53522 C 600.27446,498.46129 602.01152,500.19835 605.48565,500.44650 C 608.95977,500.69465 612.93020,496.47607 612.43389,493.25010 C 611.93759,490.02413 601.01892,488.53522 601.01892,488.53522 z "
+ id="path29244"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29247);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 589.77733,473.46127 C 589.03287,483.38734 590.76993,485.12440 594.24406,485.37255 C 597.71818,485.62070 601.68861,481.40212 601.19230,478.17615 C 600.69600,474.95018 589.77733,473.46127 589.77733,473.46127 z "
+ id="path29246"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29251);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 605.61775,503.22593 C 604.87329,513.15200 606.61035,514.88906 610.08448,515.13721 C 613.55860,515.38536 617.52903,511.16678 617.03272,507.94081 C 616.53642,504.71484 605.61775,503.22593 605.61775,503.22593 z "
+ id="path29250"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29253);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 606.25648,494.53925 C 605.51202,504.46532 607.24908,506.20238 610.72321,506.45053 C 614.19733,506.69868 618.16776,502.48010 617.67145,499.25413 C 617.17515,496.02816 606.25648,494.53925 606.25648,494.53925 z "
+ id="path29252"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29257);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 612.64374,499.26583 C 611.89928,509.19190 613.63634,510.92896 617.11047,511.17711 C 620.58459,511.42526 624.55502,507.20668 624.05871,503.98071 C 623.56241,500.75474 612.64374,499.26583 612.64374,499.26583 z "
+ id="path29256"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29259);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 595.78136,470.39539 C 595.03690,480.32146 596.77396,482.05852 600.24809,482.30667 C 603.72221,482.55482 607.69264,478.33624 607.19633,475.11027 C 606.70003,471.88430 595.78136,470.39539 595.78136,470.39539 z "
+ id="path29258"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29261);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 600.63568,463.75263 C 599.89122,473.67870 601.62828,475.41576 605.10241,475.66391 C 608.57653,475.91206 612.54696,471.69348 612.05065,468.46751 C 611.55435,465.24154 600.63568,463.75263 600.63568,463.75263 z "
+ id="path29260"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29265);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 622.86337,426.96198 C 622.11891,436.88805 623.85597,438.62511 627.33010,438.87326 C 630.80422,439.12141 634.77465,434.90283 634.27834,431.67686 C 633.78204,428.45089 622.86337,426.96198 622.86337,426.96198 z "
+ id="path29264"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29263);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 607.15069,455.57693 C 606.40623,465.50300 608.14329,467.24006 611.61742,467.48821 C 615.09154,467.73636 619.06197,463.51778 618.56566,460.29181 C 618.06936,457.06584 607.15069,455.57693 607.15069,455.57693 z "
+ id="path29262"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29267);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 620.81944,447.65672 C 620.07498,457.58279 621.81204,459.31985 625.28617,459.56800 C 628.76029,459.81615 632.73072,455.59757 632.23441,452.37160 C 631.73811,449.14563 620.81944,447.65672 620.81944,447.65672 z "
+ id="path29266"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29269);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 620.56395,457.36536 C 619.81949,467.29143 621.55655,469.02849 625.03068,469.27664 C 628.50480,469.52479 632.47523,465.30621 631.97892,462.08024 C 631.48262,458.85427 620.56395,457.36536 620.56395,457.36536 z "
+ id="path29268"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29219);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 597.95303,455.57693 C 597.20857,465.50300 598.94563,467.24006 602.41976,467.48821 C 605.89388,467.73636 609.86431,463.51778 609.36800,460.29181 C 608.87170,457.06584 597.95303,455.57693 597.95303,455.57693 z "
+ id="path29218"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29296);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 692.00661,539.69571 C 705.09653,554.61199 710.88469,557.91423 717.75370,559.58130 C 724.62272,561.24840 725.90336,556.26291 720.26641,551.14157 C 714.62947,546.02022 692.00661,539.69571 692.00661,539.69571 z "
+ id="path29270"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29275);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 706.00056,540.30987 C 719.96650,554.40930 725.94333,557.35634 732.90040,558.60599 C 739.85748,559.85566 740.83502,554.80200 734.89939,550.03005 C 728.96376,545.25809 706.00056,540.30987 706.00056,540.30987 z "
+ id="path29274"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29279);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 704.97859,529.57926 C 718.94453,543.67869 724.92136,546.62573 731.87843,547.87538 C 738.83551,549.12505 739.81305,544.07139 733.87742,539.29944 C 727.94179,534.52748 704.97859,529.57926 704.97859,529.57926 z "
+ id="path29278"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29291);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 707.79329,509.12898 C 719.53468,525.12839 725.01332,528.92208 731.71108,531.18094 C 738.40885,533.43981 740.11872,528.58478 734.94913,522.99206 C 729.77953,517.39933 707.79329,509.12898 707.79329,509.12898 z "
+ id="path29290"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29231);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 611.23854,446.37927 C 610.49408,456.30534 612.23114,458.04240 615.70527,458.29055 C 619.17939,458.53870 623.14982,454.32012 622.65351,451.09415 C 622.15721,447.86818 611.23854,446.37927 611.23854,446.37927 z "
+ id="path29230"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29237);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 589.77733,488.66297 C 589.03287,498.58904 590.76993,500.32610 594.24406,500.57425 C 597.71818,500.82240 601.68861,496.60382 601.19230,493.37785 C 600.69600,490.15188 589.77733,488.66297 589.77733,488.66297 z "
+ id="path29236"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29249);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 597.56980,497.98837 C 596.82534,507.91444 598.56240,509.65150 602.03653,509.89965 C 605.51065,510.14780 609.48108,505.92922 608.98477,502.70325 C 608.48847,499.47728 597.56980,497.98837 597.56980,497.98837 z "
+ id="path29248"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29255);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 613.28247,505.39760 C 612.53801,515.32367 614.27507,517.06073 617.74920,517.30888 C 621.22332,517.55703 625.19375,513.33845 624.69744,510.11248 C 624.20114,506.88651 613.28247,505.39760 613.28247,505.39760 z "
+ id="path29254"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29277);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 699.61329,533.53936 C 713.57923,547.63879 719.55606,550.58583 726.51313,551.83548 C 733.47021,553.08515 734.44775,548.03149 728.51212,543.25954 C 722.57649,538.48758 699.61329,533.53936 699.61329,533.53936 z "
+ id="path29276"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29281);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 713.16227,520.87603 C 725.43418,536.47223 731.03709,540.07985 737.80692,542.11257 C 744.57675,544.14531 746.12266,539.23561 740.76822,533.81960 C 735.41378,528.40358 713.16227,520.87603 713.16227,520.87603 z "
+ id="path29280"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29283);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 718.96262,513.49785 C 731.52364,528.86217 737.19294,532.36453 743.99954,534.27048 C 750.80615,536.17644 752.26011,531.23873 746.80546,525.92365 C 741.35081,520.60857 718.96262,513.49785 718.96262,513.49785 z "
+ id="path29282"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29285);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 711.58789,503.73989 C 724.09972,519.14429 729.75780,522.66476 736.55827,524.59245 C 743.35875,526.52017 744.82849,521.58712 739.39086,516.25464 C 733.95324,510.92214 711.58789,503.73989 711.58789,503.73989 z "
+ id="path29284"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29287);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 705.48957,518.33767 C 719.45551,532.43710 725.43234,535.38414 732.38941,536.63379 C 739.34649,537.88346 740.32403,532.82980 734.38840,528.05785 C 728.45277,523.28589 705.48957,518.33767 705.48957,518.33767 z "
+ id="path29286"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29289);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 692.45955,521.02032 C 706.42549,535.11975 712.40232,538.06679 719.35939,539.31644 C 726.31647,540.56611 727.29401,535.51245 721.35838,530.74050 C 715.42275,525.96854 692.45955,521.02032 692.45955,521.02032 z "
+ id="path29288"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29293);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 685.68905,526.13014 C 699.65499,540.22957 705.63182,543.17661 712.58889,544.42626 C 719.54597,545.67593 720.52351,540.62227 714.58788,535.85032 C 708.65225,531.07836 685.68905,526.13014 685.68905,526.13014 z "
+ id="path29292"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29295);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 678.02433,535.32780 C 691.99027,549.42723 697.96710,552.37427 704.92417,553.62392 C 711.88125,554.87359 712.85879,549.81993 706.92316,545.04798 C 700.98753,540.27602 678.02433,535.32780 678.02433,535.32780 z "
+ id="path29294"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient2596);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 717.39526,535.19875 C 729.13665,551.19816 734.61529,554.99185 741.31305,557.25071 C 748.01082,559.50958 749.72069,554.65455 744.55110,549.06183 C 739.38150,543.46910 717.39526,535.19875 717.39526,535.19875 z "
+ id="path2595"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient2598);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 703.28860,541.26613 C 715.02999,557.26554 720.50863,561.05923 727.20639,563.31809 C 733.90416,565.57696 735.61403,560.72193 730.44444,555.12921 C 725.27484,549.53648 703.28860,541.26613 703.28860,541.26613 z "
+ id="path2597"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient2602);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 731.19855,528.52463 C 742.93994,544.52404 748.41858,548.31773 755.11634,550.57659 C 761.81411,552.83546 763.52398,547.98043 758.35439,542.38771 C 753.18479,536.79498 731.19855,528.52463 731.19855,528.52463 z "
+ id="path2601"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient2600);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 721.64243,528.52463 C 733.38382,544.52404 738.86246,548.31773 745.56022,550.57659 C 752.25799,552.83546 753.96786,547.98043 748.79827,542.38771 C 743.62867,536.79498 721.64243,528.52463 721.64243,528.52463 z "
+ id="path2599"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient2604);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 690.69879,542.47960 C 702.44018,558.47901 707.91882,562.27270 714.61658,564.53156 C 721.31435,566.79043 723.02422,561.93540 717.85463,556.34268 C 712.68503,550.74995 690.69879,542.47960 690.69879,542.47960 z "
+ id="path2603"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient2606);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 721.94580,533.68190 C 733.68719,549.68131 739.16583,553.47500 745.86359,555.73386 C 752.56136,557.99273 754.27123,553.13770 749.10164,547.54498 C 743.93204,541.95225 721.94580,533.68190 721.94580,533.68190 z "
+ id="path2605"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient2719);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 615.04942,511.27207 C 614.30496,521.19814 616.04202,522.93520 619.51615,523.18335 C 622.99027,523.43150 626.96070,519.21292 626.46439,515.98695 C 625.96809,512.76098 615.04942,511.27207 615.04942,511.27207 z "
+ id="path2718"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient2721);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 622.78533,514.76081 C 622.04087,524.68688 623.77793,526.42394 627.25206,526.67209 C 630.72618,526.92024 634.69661,522.70166 634.20030,519.47569 C 633.70400,516.24972 622.78533,514.76081 622.78533,514.76081 z "
+ id="path2720"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient2723);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 635.83020,515.67092 C 635.08574,525.59699 636.82280,527.33405 640.29693,527.58220 C 643.77105,527.83035 647.74148,523.61177 647.24517,520.38580 C 646.74887,517.15983 635.83020,515.67092 635.83020,515.67092 z "
+ id="path2722"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient2725);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;"
+ d="M 644.02116,521.58662 C 643.27670,531.51269 645.01376,533.24975 648.48789,533.49790 C 651.96201,533.74605 655.93244,529.52747 655.43613,526.30150 C 654.93983,523.07553 644.02116,521.58662 644.02116,521.58662 z "
+ id="path2724"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient3351);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 629.91450,517.94619 C 629.17004,527.87226 630.90710,529.60932 634.38123,529.85747 C 637.85535,530.10562 641.82578,525.88704 641.32947,522.66107 C 640.83317,519.43510 629.91450,517.94619 629.91450,517.94619 z "
+ id="path3350"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient3353);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 647.81327,525.53041 C 647.06881,535.45648 648.80587,537.19354 652.28000,537.44169 C 655.75412,537.68984 659.72455,533.47126 659.22824,530.24529 C 658.73194,527.01932 647.81327,525.53041 647.81327,525.53041 z "
+ id="path3352"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient3355);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 654.79076,528.26074 C 654.04630,538.18681 655.78336,539.92387 659.25749,540.17202 C 662.73161,540.42017 666.70204,536.20159 666.20573,532.97562 C 665.70943,529.74965 654.79076,528.26074 654.79076,528.26074 z "
+ id="path3354"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient3357);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 656.61097,522.95178 C 655.86651,532.87785 657.60357,534.61491 661.07770,534.86306 C 664.55182,535.11121 668.52225,530.89263 668.02594,527.66666 C 667.52964,524.44069 656.61097,522.95178 656.61097,522.95178 z "
+ id="path3356"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient3361);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 664.34688,527.35063 C 663.60242,537.27670 665.33948,539.01376 668.81361,539.26191 C 672.28773,539.51006 676.25816,535.29148 675.76185,532.06551 C 675.26555,528.83954 664.34688,527.35063 664.34688,527.35063 z "
+ id="path3360"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient3363);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 669.65584,535.99664 C 668.91138,545.92271 670.64844,547.65977 674.12257,547.90792 C 677.59669,548.15607 681.56712,543.93749 681.07081,540.71152 C 680.57451,537.48555 669.65584,535.99664 669.65584,535.99664 z "
+ id="path3362"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient3359);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 649.02675,516.27766 C 648.28229,526.20373 650.01935,527.94079 653.49348,528.18894 C 656.96760,528.43709 660.93803,524.21851 660.44172,520.99254 C 659.94542,517.76657 649.02675,516.27766 649.02675,516.27766 z "
+ id="path3358"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient3419);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 677.39175,470.92399 C 676.64729,480.85006 678.38435,482.58712 681.85848,482.83527 C 685.33260,483.08342 689.30303,478.86484 688.80672,475.63887 C 688.31042,472.41290 677.39175,470.92399 677.39175,470.92399 z "
+ id="path3418"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient3417);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 653.88065,475.01948 C 653.13619,484.94555 654.87325,486.68261 658.34738,486.93076 C 661.82150,487.17891 665.79193,482.96033 665.29562,479.73436 C 664.79932,476.50839 653.88065,475.01948 653.88065,475.01948 z "
+ id="path3416"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient3415);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 682.24565,490.03624 C 681.50119,499.96231 683.23825,501.69937 686.71238,501.94752 C 690.18650,502.19567 694.15693,497.97709 693.66062,494.75112 C 693.16432,491.52515 682.24565,490.03624 682.24565,490.03624 z "
+ id="path3414"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient3413);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 692.25683,541.91234 C 691.51237,551.83841 693.24943,553.57547 696.72356,553.82362 C 700.19768,554.07177 704.16811,549.85319 703.67180,546.62722 C 703.17550,543.40125 692.25683,541.91234 692.25683,541.91234 z "
+ id="path3412"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient3411);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 678.15017,536.75507 C 677.40571,546.68114 679.14277,548.41820 682.61690,548.66635 C 686.09102,548.91450 690.06145,544.69592 689.56514,541.46995 C 689.06884,538.24398 678.15017,536.75507 678.15017,536.75507 z "
+ id="path3410"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient3409);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 627.03250,508.84512 C 626.28804,518.77119 628.02510,520.50825 631.49923,520.75640 C 634.97335,521.00455 638.94378,516.78597 638.44747,513.56000 C 637.95117,510.33403 627.03250,508.84512 627.03250,508.84512 z "
+ id="path3408"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient3407);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 640.98747,510.21028 C 640.24301,520.13635 641.98007,521.87341 645.45420,522.12156 C 648.92832,522.36971 652.89875,518.15113 652.40244,514.92516 C 651.90614,511.69919 640.98747,510.21028 640.98747,510.21028 z "
+ id="path3406"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient3405);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 666.31878,506.87322 C 665.57432,516.79929 667.31138,518.53635 670.78551,518.78450 C 674.25963,519.03265 678.23006,514.81407 677.73375,511.58810 C 677.23745,508.36213 666.31878,506.87322 666.31878,506.87322 z "
+ id="path3404"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient3403);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 718.80162,513.85071 C 718.05716,523.77678 719.79422,525.51384 723.26835,525.76199 C 726.74247,526.01014 730.71290,521.79156 730.21659,518.56559 C 729.72029,515.33962 718.80162,513.85071 718.80162,513.85071 z "
+ id="path3402"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient3401);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 708.79044,508.54175 C 708.04598,518.46782 709.78304,520.20488 713.25717,520.45303 C 716.73129,520.70118 720.70172,516.48260 720.20541,513.25663 C 719.70911,510.03066 708.79044,508.54175 708.79044,508.54175 z "
+ id="path3400"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient3399);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 683.30745,505.96311 C 682.56299,515.88918 684.30005,517.62624 687.77418,517.87439 C 691.24830,518.12254 695.21873,513.90396 694.72242,510.67799 C 694.22612,507.45202 683.30745,505.96311 683.30745,505.96311 z "
+ id="path3398"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient3397);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 697.86916,507.17659 C 697.12470,517.10266 698.86176,518.83972 702.33589,519.08787 C 705.81001,519.33602 709.78044,515.11744 709.28413,511.89147 C 708.78783,508.66550 697.86916,507.17659 697.86916,507.17659 z "
+ id="path3396"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient3395);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 697.11074,530.08095 C 696.36628,540.00702 698.10334,541.74408 701.57747,541.99223 C 705.05159,542.24038 709.02202,538.02180 708.52571,534.79583 C 708.02941,531.56986 697.11074,530.08095 697.11074,530.08095 z "
+ id="path3394"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient3393);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 722.59373,531.44611 C 721.84927,541.37218 723.58633,543.10924 727.06046,543.35739 C 730.53458,543.60554 734.50501,539.38696 734.00870,536.16099 C 733.51240,532.93502 722.59373,531.44611 722.59373,531.44611 z "
+ id="path3392"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient3391);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 709.54886,540.39550 C 708.80440,550.32157 710.54146,552.05863 714.01559,552.30678 C 717.48971,552.55493 721.46014,548.33635 720.96383,545.11038 C 720.46753,541.88441 709.54886,540.39550 709.54886,540.39550 z "
+ id="path3390"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient3389);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 686.34114,533.26632 C 685.59668,543.19239 687.33374,544.92945 690.80787,545.17760 C 694.28199,545.42575 698.25242,541.20717 697.75611,537.98120 C 697.25981,534.75523 686.34114,533.26632 686.34114,533.26632 z "
+ id="path3388"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient3387);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 658.12782,518.09787 C 657.38336,528.02394 659.12042,529.76100 662.59455,530.00915 C 666.06867,530.25730 670.03910,526.03872 669.54279,522.81275 C 669.04649,519.58678 658.12782,518.09787 658.12782,518.09787 z "
+ id="path3386"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient3385);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 660.40309,522.95178 C 659.65863,532.87785 661.39569,534.61491 664.86982,534.86306 C 668.34394,535.11121 672.31437,530.89263 671.81806,527.66666 C 671.32176,524.44069 660.40309,522.95178 660.40309,522.95178 z "
+ id="path3384"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient3383);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 666.47047,529.32253 C 665.72601,539.24860 667.46307,540.98566 670.93720,541.23381 C 674.41132,541.48196 678.38175,537.26338 677.88544,534.03741 C 677.38914,530.81144 666.47047,529.32253 666.47047,529.32253 z "
+ id="path3382"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient3381);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 673.44795,523.25515 C 672.70349,533.18122 674.44055,534.91828 677.91468,535.16643 C 681.38880,535.41458 685.35923,531.19600 684.86292,527.97003 C 684.36662,524.74406 673.44795,523.25515 673.44795,523.25515 z "
+ id="path3380"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient3379);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 678.90860,526.13715 C 678.16414,536.06322 679.90120,537.80028 683.37533,538.04843 C 686.84945,538.29658 690.81988,534.07800 690.32357,530.85203 C 689.82727,527.62606 678.90860,526.13715 678.90860,526.13715 z "
+ id="path3378"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient3377);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 673.75132,515.82261 C 673.00686,525.74868 674.74392,527.48574 678.21805,527.73389 C 681.69217,527.98204 685.66260,523.76346 685.16629,520.53749 C 684.66999,517.31152 673.75132,515.82261 673.75132,515.82261 z "
+ id="path3376"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient3375);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 709.09381,516.27766 C 708.34935,526.20373 710.08641,527.94079 713.56054,528.18894 C 717.03466,528.43709 721.00509,524.21851 720.50878,520.99254 C 720.01248,517.76657 709.09381,516.27766 709.09381,516.27766 z "
+ id="path3374"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient3373);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 694.07705,515.21587 C 693.33259,525.14194 695.06965,526.87900 698.54378,527.12715 C 702.01790,527.37530 705.98833,523.15672 705.49202,519.93075 C 704.99572,516.70478 694.07705,515.21587 694.07705,515.21587 z "
+ id="path3372"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient3371);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 684.06587,516.88440 C 683.32141,526.81047 685.05847,528.54753 688.53260,528.79568 C 692.00672,529.04383 695.97715,524.82525 695.48084,521.59928 C 694.98454,518.37331 684.06587,516.88440 684.06587,516.88440 z "
+ id="path3370"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient3369);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 665.25699,517.94619 C 664.51253,527.87226 666.24959,529.60932 669.72372,529.85747 C 673.19784,530.10562 677.16827,525.88704 676.67196,522.66107 C 676.17566,519.43510 665.25699,517.94619 665.25699,517.94619 z "
+ id="path3368"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient3367);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 637.80210,519.91809 C 637.05764,529.84416 638.79470,531.58122 642.26883,531.82937 C 645.74295,532.07752 649.71338,527.85894 649.21707,524.63297 C 648.72077,521.40700 637.80210,519.91809 637.80210,519.91809 z "
+ id="path3366"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient3365);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 659.03793,531.59779 C 658.29347,541.52386 660.03053,543.26092 663.50466,543.50907 C 666.97878,543.75722 670.94921,539.53864 670.45290,536.31267 C 669.95660,533.08670 659.03793,531.59779 659.03793,531.59779 z "
+ id="path3364"
+ sodipodi:nodetypes="cccc" />
+ <g
+ id="BackFeathers">
+ <path
+ style="fill:url(#linearGradient29925);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 627.37393,464.98290 C 626.62947,474.90897 628.36653,476.64603 631.84066,476.89418 C 635.31478,477.14233 639.28521,472.92375 638.78890,469.69778 C 638.29260,466.47181 627.37393,464.98290 627.37393,464.98290 z "
+ id="path29924"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29923);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 641.28074,483.78285 C 640.53628,493.70892 642.27334,495.44598 645.74747,495.69413 C 649.22159,495.94228 653.19202,491.72370 652.69571,488.49773 C 652.19941,485.27176 641.28074,483.78285 641.28074,483.78285 z "
+ id="path29297"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29927);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 625.31366,451.59116 C 624.56920,461.51723 626.30626,463.25429 629.78039,463.50244 C 633.25451,463.75059 637.22494,459.53201 636.72863,456.30604 C 636.23233,453.08007 625.31366,451.59116 625.31366,451.59116 z "
+ id="path29926"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29929);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 624.54106,446.95556 C 623.79660,456.88163 625.53366,458.61869 629.00779,458.86684 C 632.48191,459.11499 636.45234,454.89641 635.95603,451.67044 C 635.45973,448.44447 624.54106,446.95556 624.54106,446.95556 z "
+ id="path29928"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29933);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 645.91634,450.81856 C 645.17188,460.74463 646.90894,462.48169 650.38307,462.72984 C 653.85719,462.97799 657.82762,458.75941 657.33131,455.53344 C 656.83501,452.30747 645.91634,450.81856 645.91634,450.81856 z "
+ id="path29932"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29937);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 667.80670,459.83223 C 667.06224,469.75830 668.79930,471.49536 672.27343,471.74351 C 675.74755,471.99166 679.71798,467.77308 679.22167,464.54711 C 678.72537,461.32114 667.80670,459.83223 667.80670,459.83223 z "
+ id="path29936"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29943);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 635.61500,468.58837 C 634.87054,478.51444 636.60760,480.25150 640.08173,480.49965 C 643.55585,480.74780 647.52628,476.52922 647.02997,473.30325 C 646.53367,470.07728 635.61500,468.58837 635.61500,468.58837 z "
+ id="path29942"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29945);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 638.70540,457.51443 C 637.96094,467.44050 639.69800,469.17756 643.17213,469.42571 C 646.64625,469.67386 650.61668,465.45528 650.12037,462.22931 C 649.62407,459.00334 638.70540,457.51443 638.70540,457.51443 z "
+ id="path29944"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29951);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 684.54638,470.90618 C 683.80192,480.83225 685.53898,482.56931 689.01311,482.81746 C 692.48723,483.06561 696.45766,478.84703 695.96135,475.62106 C 695.46505,472.39509 684.54638,470.90618 684.54638,470.90618 z "
+ id="path29950"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29947);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 626.60133,491.25133 C 625.85687,501.17740 627.59393,502.91446 631.06806,503.16261 C 634.54218,503.41076 638.51261,499.19218 638.01630,495.96621 C 637.52000,492.74024 626.60133,491.25133 626.60133,491.25133 z "
+ id="path29946"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29953);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 699.48332,485.58559 C 698.73886,495.51166 700.47592,497.24872 703.95005,497.49687 C 707.42417,497.74502 711.39460,493.52644 710.89829,490.30047 C 710.40199,487.07450 699.48332,485.58559 699.48332,485.58559 z "
+ id="path29952"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29975);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 650.29441,489.44859 C 649.54995,499.37466 651.28701,501.11172 654.76114,501.35987 C 658.23526,501.60802 662.20569,497.38944 661.70938,494.16347 C 661.21308,490.93750 650.29441,489.44859 650.29441,489.44859 z "
+ id="path29974"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29955);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 681.19844,493.31160 C 680.45398,503.23767 682.19104,504.97473 685.66517,505.22288 C 689.13929,505.47103 693.10972,501.25245 692.61341,498.02648 C 692.11711,494.80051 681.19844,493.31160 681.19844,493.31160 z "
+ id="path29954"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29973);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 653.89988,498.97733 C 653.15542,508.90340 654.89248,510.64046 658.36661,510.88861 C 661.84073,511.13676 665.81116,506.91818 665.31485,503.69221 C 664.81855,500.46624 653.89988,498.97733 653.89988,498.97733 z "
+ id="path29972"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29967);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 704.63399,502.84034 C 703.88953,512.76641 705.62659,514.50347 709.10072,514.75162 C 712.57484,514.99977 716.54527,510.78119 716.04896,507.55522 C 715.55266,504.32925 704.63399,502.84034 704.63399,502.84034 z "
+ id="path29966"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29959);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 649.00675,503.35540 C 648.26229,513.28147 649.99935,515.01853 653.47348,515.26668 C 656.94760,515.51483 660.91803,511.29625 660.42172,508.07028 C 659.92542,504.84431 649.00675,503.35540 649.00675,503.35540 z "
+ id="path29958"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29961);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 663.68616,503.35540 C 662.94170,513.28147 664.67876,515.01853 668.15289,515.26668 C 671.62701,515.51483 675.59744,511.29625 675.10113,508.07028 C 674.60483,504.84431 663.68616,503.35540 663.68616,503.35540 z "
+ id="path29960"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29965);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 697.68059,500.52254 C 696.93613,510.44861 698.67319,512.18567 702.14732,512.43382 C 705.62144,512.68197 709.59187,508.46339 709.09556,505.23742 C 708.59926,502.01145 697.68059,500.52254 697.68059,500.52254 z "
+ id="path29964"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29963);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 679.39571,500.26500 C 678.65125,510.19107 680.38831,511.92813 683.86244,512.17628 C 687.33656,512.42443 691.30699,508.20585 690.81068,504.97988 C 690.31438,501.75391 679.39571,500.26500 679.39571,500.26500 z "
+ id="path29962"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29977);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 648.49168,473.22398 C 647.74722,483.15005 649.48428,484.88711 652.95841,485.13526 C 656.43253,485.38341 660.40296,481.16483 659.90665,477.93886 C 659.41035,474.71289 648.49168,473.22398 648.49168,473.22398 z "
+ id="path29976"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29979);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 673.47243,487.13079 C 672.72797,497.05686 674.46503,498.79392 677.93916,499.04207 C 681.41328,499.29022 685.38371,495.07164 684.88740,491.84567 C 684.39110,488.61970 673.47243,487.13079 673.47243,487.13079 z "
+ id="path29978"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29989);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 671.15463,493.05406 C 670.41017,502.98013 672.14723,504.71719 675.62136,504.96534 C 679.09548,505.21349 683.06591,500.99491 682.56960,497.76894 C 682.07330,494.54297 671.15463,493.05406 671.15463,493.05406 z "
+ id="path29988"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29991);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 694.33265,496.14446 C 693.58819,506.07053 695.32525,507.80759 698.79938,508.05574 C 702.27350,508.30389 706.24393,504.08531 705.74762,500.85934 C 705.25132,497.63337 694.33265,496.14446 694.33265,496.14446 z "
+ id="path29990"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29993);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 685.06144,495.88693 C 684.31698,505.81300 686.05404,507.55006 689.52817,507.79821 C 693.00229,508.04636 696.97272,503.82778 696.47641,500.60181 C 695.98011,497.37584 685.06144,495.88693 685.06144,495.88693 z "
+ id="path29992"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29995);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 668.83683,500.26500 C 668.09237,510.19107 669.82943,511.92813 673.30356,512.17628 C 676.77768,512.42443 680.74811,508.20585 680.25180,504.97988 C 679.75550,501.75391 668.83683,500.26500 668.83683,500.26500 z "
+ id="path29994"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29997);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 720.34354,497.68967 C 719.59908,507.61574 721.33614,509.35280 724.81027,509.60095 C 728.28439,509.84910 732.25482,505.63052 731.75851,502.40455 C 731.26221,499.17858 720.34354,497.68967 720.34354,497.68967 z "
+ id="path29996"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29999);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 683.00117,464.98290 C 682.25671,474.90897 683.99377,476.64603 687.46790,476.89418 C 690.94202,477.14233 694.91245,472.92375 694.41614,469.69778 C 693.91984,466.47181 683.00117,464.98290 683.00117,464.98290 z "
+ id="path29998"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient30005);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 620.93559,475.28425 C 620.19113,485.21032 621.92819,486.94738 625.40232,487.19553 C 628.87644,487.44368 632.84687,483.22510 632.35056,479.99913 C 631.85426,476.77316 620.93559,475.28425 620.93559,475.28425 z "
+ id="path30004"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient30003);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 626.85886,476.31438 C 626.11440,486.24045 627.85146,487.97751 631.32559,488.22566 C 634.79971,488.47381 638.77014,484.25523 638.27383,481.02926 C 637.77753,477.80329 626.85886,476.31438 626.85886,476.31438 z "
+ id="path30002"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient30009);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 622.73832,488.93352 C 621.99386,498.85959 623.73092,500.59665 627.20505,500.84480 C 630.67917,501.09295 634.64960,496.87437 634.15329,493.64840 C 633.65699,490.42243 622.73832,488.93352 622.73832,488.93352 z "
+ id="path30008"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient30011);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 651.58208,498.71980 C 650.83762,508.64587 652.57468,510.38293 656.04881,510.63108 C 659.52293,510.87923 663.49336,506.66065 662.99705,503.43468 C 662.50075,500.20871 651.58208,498.71980 651.58208,498.71980 z "
+ id="path30010"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient30015);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 687.63678,500.00747 C 686.89232,509.93354 688.62938,511.67060 692.10351,511.91875 C 695.57763,512.16690 699.54806,507.94832 699.05175,504.72235 C 698.55545,501.49638 687.63678,500.00747 687.63678,500.00747 z "
+ id="path30014"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient30025);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 621.19312,462.66510 C 620.44866,472.59117 622.18572,474.32823 625.65985,474.57638 C 629.13397,474.82453 633.10440,470.60595 632.60809,467.37998 C 632.11179,464.15401 621.19312,462.66510 621.19312,462.66510 z "
+ id="path30024"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient30023);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 623.76846,439.74462 C 623.02400,449.67069 624.76106,451.40775 628.23519,451.65590 C 631.70931,451.90405 635.67974,447.68547 635.18343,444.45950 C 634.68713,441.23353 623.76846,439.74462 623.76846,439.74462 z "
+ id="path30022"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient30021);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 629.94926,431.24601 C 629.20480,441.17208 630.94186,442.90914 634.41599,443.15729 C 637.89011,443.40544 641.86054,439.18686 641.36423,435.96089 C 640.86793,432.73492 629.94926,431.24601 629.94926,431.24601 z "
+ id="path30020"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient30019);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 621.19312,483.26779 C 620.44866,493.19386 622.18572,494.93092 625.65985,495.17907 C 629.13397,495.42722 633.10440,491.20864 632.60809,487.98267 C 632.11179,484.75670 621.19312,483.26779 621.19312,483.26779 z "
+ id="path30018"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29931);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 636.64513,444.12269 C 635.90067,454.04876 637.63773,455.78582 641.11186,456.03397 C 644.58598,456.28212 648.55641,452.06354 648.06010,448.83757 C 647.56380,445.61160 636.64513,444.12269 636.64513,444.12269 z "
+ id="path29930"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29935);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 657.76289,456.74183 C 657.01843,466.66790 658.75549,468.40496 662.22962,468.65311 C 665.70374,468.90126 669.67417,464.68268 669.17786,461.45671 C 668.68156,458.23074 657.76289,456.74183 657.76289,456.74183 z "
+ id="path29934"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29939);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 678.10804,466.27057 C 677.36358,476.19664 679.10064,477.93370 682.57477,478.18185 C 686.04889,478.43000 690.01932,474.21142 689.52301,470.98545 C 689.02671,467.75948 678.10804,466.27057 678.10804,466.27057 z "
+ id="path29938"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29941);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 630.20680,480.43492 C 629.46234,490.36099 631.19940,492.09805 634.67353,492.34620 C 638.14765,492.59435 642.11808,488.37577 641.62177,485.14980 C 641.12547,481.92383 630.20680,480.43492 630.20680,480.43492 z "
+ id="path29940"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29949);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 634.84240,500.00747 C 634.09794,509.93354 635.83500,511.67060 639.30913,511.91875 C 642.78325,512.16690 646.75368,507.94832 646.25737,504.72235 C 645.76107,501.49638 634.84240,500.00747 634.84240,500.00747 z "
+ id="path29948"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29957);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 658.02042,479.91985 C 657.27596,489.84592 659.01302,491.58298 662.48715,491.83113 C 665.96127,492.07928 669.93170,487.86070 669.43539,484.63473 C 668.93909,481.40876 658.02042,479.91985 658.02042,479.91985 z "
+ id="path29956"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29969);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 643.08347,504.38554 C 642.33901,514.31161 644.07607,516.04867 647.55020,516.29682 C 651.02432,516.54497 654.99475,512.32639 654.49844,509.10042 C 654.00214,505.87445 643.08347,504.38554 643.08347,504.38554 z "
+ id="path29968"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29971);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 627.88899,498.46227 C 627.14453,508.38834 628.88159,510.12540 632.35572,510.37355 C 635.82984,510.62170 639.80027,506.40312 639.30396,503.17715 C 638.80766,499.95118 627.88899,498.46227 627.88899,498.46227 z "
+ id="path29970"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29981);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 659.82315,489.44859 C 659.07869,499.37466 660.81575,501.11172 664.28988,501.35987 C 667.76400,501.60802 671.73443,497.38944 671.23812,494.16347 C 670.74182,490.93750 659.82315,489.44859 659.82315,489.44859 z "
+ id="path29980"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29983);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 640.50814,491.25133 C 639.76368,501.17740 641.50074,502.91446 644.97487,503.16261 C 648.44899,503.41076 652.41942,499.19218 651.92311,495.96621 C 651.42681,492.74024 640.50814,491.25133 640.50814,491.25133 z "
+ id="path29982"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29985);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 644.37114,478.11712 C 643.62668,488.04319 645.36374,489.78025 648.83787,490.02840 C 652.31199,490.27655 656.28242,486.05797 655.78611,482.83200 C 655.28981,479.60603 644.37114,478.11712 644.37114,478.11712 z "
+ id="path29984"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient29987);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 646.17388,467.81577 C 645.42942,477.74184 647.16648,479.47890 650.64061,479.72705 C 654.11473,479.97520 658.08516,475.75662 657.58885,472.53065 C 657.09255,469.30468 646.17388,467.81577 646.17388,467.81577 z "
+ id="path29986"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient30001);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 657.50535,451.59116 C 656.76089,461.51723 658.49795,463.25429 661.97208,463.50244 C 665.44620,463.75059 669.41663,459.53201 668.92032,456.30604 C 668.42402,453.08007 657.50535,451.59116 657.50535,451.59116 z "
+ id="path30000"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient30007);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 621.19312,466.78564 C 620.44866,476.71171 622.18572,478.44877 625.65985,478.69692 C 629.13397,478.94507 633.10440,474.72649 632.60809,471.50052 C 632.11179,468.27455 621.19312,466.78564 621.19312,466.78564 z "
+ id="path30006"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient30013);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 660.08069,504.64307 C 659.33623,514.56914 661.07329,516.30620 664.54742,516.55435 C 668.02154,516.80250 671.99197,512.58392 671.49566,509.35795 C 670.99936,506.13198 660.08069,504.64307 660.08069,504.64307 z "
+ id="path30012"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient30017);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 640.25060,476.82945 C 639.50614,486.75552 641.24320,488.49258 644.71733,488.74073 C 648.19145,488.98888 652.16188,484.77030 651.66557,481.54433 C 651.16927,478.31836 640.25060,476.82945 640.25060,476.82945 z "
+ id="path30016"
+ sodipodi:nodetypes="cccc" />
+ </g>
+ </g>
+ </g>
+ <path
+ sodipodi:type="arc"
+ style="fill:url(#radialGradient18239);fill-opacity:1.0000000;stroke:none;stroke-width:1.8314677;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ id="FrontWingHalo"
+ sodipodi:cx="663.84143"
+ sodipodi:cy="345.54175"
+ sodipodi:rx="12.247025"
+ sodipodi:ry="34.765747"
+ d="M 676.08846 345.54175 A 12.247025 34.765747 0 1 1 651.59441,345.54175 A 12.247025 34.765747 0 1 1 676.08846 345.54175 z"
+ transform="matrix(2.338303,-0.399655,0.732237,1.663950,-1061.241,38.78233)" />
+ <g
+ id="FrontWing">
+ <path
+ style="fill:url(#linearGradient24706);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.2500000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"
+ d="M 631.80296,445.47783 C 698.00985,349.95074 729.48401,326.06151 745.56283,321.33245 C 761.64164,316.60339 741.53143,420.02030 731.12748,430.42424 C 718.49017,439.33927 686.55658,474.87744 686.55658,474.87744 L 631.80296,445.47783 z "
+ id="FrontWingBase"
+ sodipodi:nodetypes="ccccc" />
+ <g
+ id="FrontWingLongFeathers">
+ <path
+ style="fill:url(#linearGradient32560);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 679.03509,380.43065 C 723.65735,332.52713 746.14295,313.34351 751.82129,312.66976 C 757.49963,311.99601 717.48086,361.78277 709.68871,365.51055 C 701.89655,369.23833 679.03509,380.43065 679.03509,380.43065 z "
+ id="path31935" />
+ <path
+ style="fill:url(#linearGradient32562);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 671.04316,386.66475 C 723.61996,337.14797 749.78662,317.61301 756.11909,317.23904 C 762.45156,316.86505 714.84811,368.73440 705.97319,372.31194 C 697.09825,375.88946 671.04316,386.66475 671.04316,386.66475 z "
+ id="path32561" />
+ <path
+ style="fill:url(#linearGradient32564);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 678.53611,387.57209 C 726.40585,342.91359 750.18059,325.35299 755.89219,325.07885 C 761.60378,324.80470 718.19424,371.66444 710.15999,374.83696 C 702.12574,378.00948 678.53611,387.57209 678.53611,387.57209 z "
+ id="path32563" />
+ <path
+ style="fill:url(#linearGradient32566);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 623.81780,446.88904 C 689.24049,444.48784 718.70794,446.78621 723.20393,450.31942 C 727.69991,453.85264 664.20641,460.83827 656.05704,457.97441 C 647.90766,455.11055 623.81780,446.88904 623.81780,446.88904 z "
+ id="path32565" />
+ <path
+ style="fill:url(#linearGradient32568);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 629.44759,442.90897 C 694.75190,438.30008 724.28016,439.60213 728.89288,442.98153 C 733.50560,446.36091 670.28419,455.48648 662.04276,452.89944 C 653.80132,450.31238 629.44759,442.90897 629.44759,442.90897 z "
+ id="path32567" />
+ <path
+ style="fill:url(#linearGradient32570);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 634.60405,456.24577 C 684.92857,452.38278 707.65374,454.02190 711.17581,457.45374 C 714.69786,460.88557 665.93745,469.28871 659.61433,466.60773 C 653.29121,463.92675 634.60405,456.24577 634.60405,456.24577 z "
+ id="path32569" />
+ <path
+ style="fill:url(#linearGradient35362);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;"
+ d="M 653.08248,463.35514 C 687.75506,460.64601 703.55114,462.79967 706.12974,466.30511 C 708.70834,469.81056 675.30470,477.08671 670.81822,474.26686 C 666.33174,471.44700 653.08248,463.35514 653.08248,463.35514 z "
+ id="path32571" />
+ <path
+ style="fill:url(#linearGradient32574);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 672.87844,391.66688 C 727.79561,349.07999 754.65164,332.79378 760.74578,333.03548 C 766.83992,333.27717 716.46264,378.59651 707.63757,381.19156 C 698.81250,383.78662 672.87844,391.66688 672.87844,391.66688 z "
+ id="path32573" />
+ <path
+ style="fill:url(#linearGradient32576);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 668.95417,405.35129 C 724.45635,360.64669 751.57945,343.55855 757.71772,343.82092 C 763.85599,344.08330 712.91591,391.66711 704.01461,394.38381 C 695.11331,397.10050 668.95417,405.35129 668.95417,405.35129 z "
+ id="path32575" />
+ <path
+ style="fill:url(#linearGradient32578);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 665.63994,415.43670 C 721.14212,370.73210 748.26522,353.64396 754.40349,353.90633 C 760.54176,354.16871 709.60168,401.75252 700.70038,404.46922 C 691.79908,407.18591 665.63994,415.43670 665.63994,415.43670 z "
+ id="path32577" />
+ <path
+ style="fill:url(#linearGradient32580);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 664.60980,420.84491 C 720.11198,376.14031 747.23508,359.05217 753.37335,359.31454 C 759.51162,359.57692 708.57154,407.16073 699.67024,409.87743 C 690.76894,412.59412 664.60980,420.84491 664.60980,420.84491 z "
+ id="path32579" />
+ <path
+ style="fill:url(#linearGradient32582);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 663.32213,426.51065 C 718.82431,381.80605 745.94741,364.71791 752.08568,364.98028 C 758.22395,365.24266 707.28387,412.82647 698.38257,415.54317 C 689.48127,418.25986 663.32213,426.51065 663.32213,426.51065 z "
+ id="path32581" />
+ <path
+ style="fill:url(#linearGradient32584);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 661.26186,432.69145 C 716.76404,387.98685 743.88714,370.89871 750.02541,371.16108 C 756.16368,371.42346 705.22360,419.00727 696.32230,421.72397 C 687.42100,424.44066 661.26186,432.69145 661.26186,432.69145 z "
+ id="path32583" />
+ <path
+ style="fill:url(#linearGradient32586);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 655.34683,430.74313 C 715.38299,392.34193 744.20412,378.30592 750.27742,379.23452 C 756.35071,380.16312 700.53634,421.92275 691.39232,423.65496 C 682.24831,425.38716 655.34683,430.74313 655.34683,430.74313 z "
+ id="path32585" />
+ <path
+ style="fill:url(#linearGradient32588);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 651.61454,438.74758 C 711.84013,400.64414 740.73041,386.75103 746.79903,387.70969 C 752.86765,388.66835 696.84718,430.15109 687.69469,431.83799 C 678.54221,433.52488 651.61454,438.74758 651.61454,438.74758 z "
+ id="path32587" />
+ <path
+ style="fill:url(#linearGradient32590);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 649.19925,446.06157 C 710.34387,409.45106 739.56715,396.27278 745.61035,397.38042 C 751.65356,398.48807 694.62966,438.58029 685.43845,440.04155 C 676.24724,441.50281 649.19925,446.06157 649.19925,446.06157 z "
+ id="path32589" />
+ <path
+ style="fill:url(#linearGradient32592);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 656.63887,442.82942 C 713.54874,415.88969 740.18450,407.28373 745.19253,409.29279 C 750.20054,411.30186 696.34978,442.30658 688.32253,442.36066 C 680.29529,442.41472 656.63887,442.82942 656.63887,442.82942 z "
+ id="path32591" />
+ <path
+ style="fill:url(#linearGradient32594);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 658.99673,442.25801 C 710.79935,424.33474 734.64485,419.91322 738.76587,422.67680 C 742.88689,425.44039 693.31806,447.86431 686.38542,446.67989 C 679.45280,445.49546 658.99673,442.25801 658.99673,442.25801 z "
+ id="path32593" />
+ <path
+ style="fill:url(#linearGradient32596);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 657.46297,432.19015 C 708.16904,431.44160 730.85237,434.81269 734.16682,438.81875 C 737.48127,442.82482 688.05621,448.65877 681.88555,445.28178 C 675.71490,441.90479 657.46297,432.19015 657.46297,432.19015 z "
+ id="path32595" />
+ </g>
+ <g
+ id="FrontWingShortFeathers">
+ <path
+ style="fill:url(#linearGradient31675);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 655.51927,412.27597 C 661.48633,401.00567 666.45053,399.63230 668.33606,402.58435 C 670.22159,405.53640 673.96619,410.37900 670.31172,411.65725 C 666.65723,412.93549 655.51927,412.27597 655.51927,412.27597 z "
+ id="path31674" />
+ <path
+ style="fill:url(#linearGradient31673);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 649.96991,419.67871 C 658.72605,410.40750 663.87672,410.40750 664.90685,413.75544 C 665.93699,417.10337 668.25479,422.76911 664.39179,423.02665 C 660.52878,423.28418 649.96991,419.67871 649.96991,419.67871 z "
+ id="path31672" />
+ <path
+ style="fill:url(#linearGradient31671);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 651.00004,434.61565 C 659.75618,425.34444 664.90685,425.34444 665.93698,428.69238 C 666.96712,432.04031 669.28492,437.70605 665.42192,437.96359 C 661.55891,438.22112 651.00004,434.61565 651.00004,434.61565 z "
+ id="path31670" />
+ <path
+ style="fill:url(#linearGradient31667);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 642.75897,451.09780 C 651.51511,441.82659 656.66578,441.82659 657.69591,445.17453 C 658.72605,448.52246 661.04385,454.18820 657.18085,454.44574 C 653.31784,454.70327 642.75897,451.09780 642.75897,451.09780 z "
+ id="path31666" />
+ <path
+ style="fill:url(#linearGradient31663);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 644.30417,427.14718 C 653.06031,417.87597 658.21098,417.87597 659.24111,421.22391 C 660.27125,424.57184 662.58905,430.23758 658.72605,430.49512 C 654.86304,430.75265 644.30417,427.14718 644.30417,427.14718 z "
+ id="path31662" />
+ <path
+ style="fill:url(#linearGradient31659);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 640.69870,445.94713 C 649.45484,436.67592 654.60551,436.67592 655.63564,440.02386 C 656.66578,443.37179 658.98358,449.03753 655.12058,449.29507 C 651.25757,449.55260 640.69870,445.94713 640.69870,445.94713 z "
+ id="path31658" />
+ <path
+ style="fill:url(#linearGradient31657);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 630.18462,439.26715 C 638.94076,429.99594 644.09143,429.99594 645.12156,433.34388 C 646.15170,436.69181 648.46950,442.35755 644.60650,442.61509 C 640.74349,442.87262 630.18462,439.26715 630.18462,439.26715 z "
+ id="path30411" />
+ <path
+ style="fill:url(#linearGradient31691);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 657.95345,435.90332 C 666.70959,426.63211 671.86026,426.63211 672.89039,429.98005 C 673.92053,433.32798 676.23833,438.99372 672.37533,439.25126 C 668.51232,439.50879 657.95345,435.90332 657.95345,435.90332 z "
+ id="path31690" />
+ <path
+ style="fill:url(#linearGradient31693);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 653.31784,451.87040 C 662.07398,442.59919 667.22465,442.59919 668.25478,445.94713 C 669.28492,449.29506 671.60272,454.96080 667.73972,455.21834 C 663.87671,455.47587 653.31784,451.87040 653.31784,451.87040 z "
+ id="path31692" />
+ <path
+ style="fill:url(#linearGradient31695);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 648.16717,460.11148 C 656.92331,450.84027 662.07398,450.84027 663.10411,454.18821 C 664.13425,457.53614 666.45205,463.20188 662.58905,463.45942 C 658.72604,463.71695 648.16717,460.11148 648.16717,460.11148 z "
+ id="path31694" />
+ <path
+ style="fill:url(#linearGradient31697);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 676.77618,383.39852 C 682.39505,371.95065 687.31483,370.42579 689.28994,373.31868 C 691.26506,376.21156 695.15630,380.93713 691.54272,382.32677 C 687.92912,383.71640 676.77618,383.39852 676.77618,383.39852 z "
+ id="path31696" />
+ <path
+ style="fill:url(#linearGradient31661);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 640.95623,435.90332 C 649.71237,426.63211 654.86304,426.63211 655.89317,429.98005 C 656.92331,433.32798 659.24111,438.99372 655.37811,439.25126 C 651.51510,439.50879 640.95623,435.90332 640.95623,435.90332 z "
+ id="path31660" />
+ <path
+ style="fill:url(#linearGradient31665);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 638.12336,431.52525 C 646.87950,422.25404 652.03017,422.25404 653.06030,425.60198 C 654.09044,428.94991 656.40824,434.61565 652.54524,434.87319 C 648.68223,435.13072 638.12336,431.52525 638.12336,431.52525 z "
+ id="path31664" />
+ <path
+ style="fill:url(#linearGradient31669);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 654.34798,444.65946 C 663.10412,435.38825 668.25479,435.38825 669.28492,438.73619 C 670.31506,442.08412 672.63286,447.74986 668.76986,448.00740 C 664.90685,448.26493 654.34798,444.65946 654.34798,444.65946 z "
+ id="path31668" />
+ <path
+ style="fill:url(#linearGradient31677);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 662.68214,403.00236 C 666.94187,390.98237 671.65272,388.89976 673.94859,391.54529 C 676.24447,394.19081 680.65523,398.43557 677.22623,400.23308 C 673.79721,402.03059 662.68214,403.00236 662.68214,403.00236 z "
+ id="path31676" />
+ <path
+ style="fill:url(#linearGradient31679);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 670.87721,393.72162 C 674.67836,381.54884 679.30691,379.28920 681.70138,381.84582 C 684.09586,384.40244 688.66432,388.47700 685.30590,390.40317 C 681.94747,392.32933 670.87721,393.72162 670.87721,393.72162 z "
+ id="path31678" />
+ <path
+ style="fill:url(#linearGradient31681);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 659.75618,416.33077 C 668.51232,407.05956 673.66299,407.05956 674.69312,410.40750 C 675.72326,413.75543 678.04106,419.42117 674.17806,419.67871 C 670.31505,419.93624 659.75618,416.33077 659.75618,416.33077 z "
+ id="path31680" />
+ <path
+ style="fill:url(#linearGradient31683);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 666.45205,406.02943 C 675.20819,396.75822 680.35886,396.75822 681.38899,400.10616 C 682.41913,403.45409 684.73693,409.11983 680.87393,409.37737 C 677.01092,409.63490 666.45205,406.02943 666.45205,406.02943 z "
+ id="path31682" />
+ <path
+ style="fill:url(#linearGradient31685);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 672.63286,395.47055 C 681.38900,386.19934 686.53967,386.19934 687.56980,389.54728 C 688.59994,392.89521 690.91774,398.56095 687.05474,398.81849 C 683.19173,399.07602 672.63286,395.47055 672.63286,395.47055 z "
+ id="path31684" />
+ <path
+ style="fill:url(#linearGradient31687);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 658.21098,425.85951 C 666.96712,416.58830 672.11779,416.58830 673.14792,419.93624 C 674.17806,423.28417 676.49586,428.94991 672.63286,429.20745 C 668.76985,429.46498 658.21098,425.85951 658.21098,425.85951 z "
+ id="path31686" />
+ <path
+ style="fill:url(#linearGradient31699);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 683.31625,376.44614 C 688.08356,364.61829 692.87876,362.73800 695.05999,365.47883 C 697.24122,368.21964 701.46737,372.64823 697.96499,374.29821 C 694.46260,375.94819 683.31625,376.44614 683.31625,376.44614 z "
+ id="path31698" />
+ <path
+ style="fill:url(#linearGradient31701);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 678.04106,386.19934 C 686.79720,376.92813 691.94787,376.92813 692.97800,380.27607 C 694.00814,383.62400 696.32594,389.28974 692.46294,389.54728 C 688.59993,389.80481 678.04106,386.19934 678.04106,386.19934 z "
+ id="path31700" />
+ <path
+ style="fill:url(#linearGradient33239);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 632.57646,453.71217 C 638.54352,442.44187 643.50772,441.06850 645.39325,444.02055 C 647.27878,446.97260 651.02338,451.81520 647.36891,453.09345 C 643.71442,454.37169 632.57646,453.71217 632.57646,453.71217 z "
+ id="path33238" />
+ <path
+ style="fill:url(#linearGradient33241);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 626.39565,450.87930 C 632.36271,439.60900 637.32691,438.23563 639.21244,441.18768 C 641.09797,444.13973 644.84257,448.98233 641.18810,450.26058 C 637.53361,451.53882 626.39565,450.87930 626.39565,450.87930 z "
+ id="path33240" />
+ <path
+ style="fill:url(#linearGradient33243);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 635.40932,463.49844 C 641.37638,452.22814 646.34058,450.85477 648.22611,453.80682 C 650.11164,456.75887 653.85624,461.60147 650.20177,462.87972 C 646.54728,464.15796 635.40932,463.49844 635.40932,463.49844 z "
+ id="path33242" />
+ <path
+ style="fill:url(#linearGradient33245);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 644.16547,461.95324 C 650.13253,450.68294 655.09673,449.30957 656.98226,452.26162 C 658.86779,455.21367 662.61239,460.05627 658.95792,461.33452 C 655.30343,462.61276 644.16547,461.95324 644.16547,461.95324 z "
+ id="path33244" />
+ <path
+ style="fill:url(#linearGradient33247);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 646.74080,470.19432 C 652.70786,458.92402 657.67206,457.55065 659.55759,460.50270 C 661.44312,463.45475 665.18772,468.29735 661.53325,469.57560 C 657.87876,470.85384 646.74080,470.19432 646.74080,470.19432 z "
+ id="path33246" />
+ </g>
+ </g>
+ <g
+ id="FrontWingSwoosh">
+ <path
+ style="fill:url(#radialGradient4143);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 733.10739,293.85120 C 808.88563,341.05589 740.93444,476.67846 631.50566,498.52647 L 642.79758,429.45469 L 733.10739,293.85120 z "
+ id="path4142"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#radialGradient17593);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 745.08329,311.52412 C 809.02101,371.89671 767.70669,481.93255 645.37244,486.92444 L 654.24673,446.86423 L 745.08329,311.52412 z "
+ id="path17592"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#radialGradient17603);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 739.50530,339.44151 C 797.13436,374.89303 753.98501,466.59934 644.55623,488.44735 L 652.35602,464.77330 L 739.50530,339.44151 z "
+ id="path17602"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#radialGradient17605);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 726.20618,379.26109 C 762.97691,414.39148 764.99866,475.19535 655.56988,497.04336 L 657.45991,462.35566 L 726.20618,379.26109 z "
+ id="path17604"
+ sodipodi:nodetypes="cccc" />
+ </g>
+ </g>
+ <g
+ id="g2585"
+ transform="matrix(0.984584,-0.803347,0.691693,1.069070,524.7468,788.9838)">
+ <path
+ style="fill:url(#linearGradient2588);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 43.495157,164.66019 C 276.50486,388.34951 338.64079,376.95793 423.55988,385.24272 C 508.47898,393.52751 694.88669,258.89967 724.91909,252.68608 C 754.95149,246.47249 752.88029,251.65048 765.30749,256.82848 C 748.73789,210.22653 666.92559,97.346281 611.00319,62.135921 C 555.08089,26.925563 404.91910,-13.462777 280.64726,19.676373 C 198.83496,38.317153 115.98706,135.66343 43.495157,164.66019 z "
+ id="path2586"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:#080762;fill-opacity:0.053475920;fill-rule:evenodd;stroke:none;stroke-width:0.25000000pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"
+ d="M 449.21875,12.343750 C 372.55367,131.34626 351.03163,190.15459 345.31250,234.71875 C 296.43407,228.74167 250.88253,220.20102 210.06250,211.18750 C 210.18144,159.47011 307.03125,15.562500 307.03125,15.562500 C 231.73758,132.43627 211.35292,167.53740 205.28125,210.12500 C 111.44954,189.10115 46.625000,165.87500 46.625000,165.87500 C 95.278072,186.13432 149.62093,202.52998 204.53125,215.34375 C 205.73417,244.61892 210.49875,254.89076 234.81250,324.93750 C 212.11540,236.98624 209.34258,255.80079 209.75000,216.50000 C 255.62272,227.00430 301.69759,235.02520 345.12500,240.43750 C 346.64554,269.96362 353.89092,311.29960 377.53125,379.40625 C 355.00622,292.12181 351.03030,281.31222 351.31250,241.25000 C 399.42652,247.01704 443.95673,249.65958 480.81250,249.21875 C 482.09933,277.29978 486.10250,295.38014 509.81250,363.68750 C 486.91509,274.96003 484.85720,289.97427 485.34375,249.09375 C 521.11851,248.40068 549.34122,244.76072 565.71875,238.12500 C 576.82659,233.17150 593.20091,230.91691 611.78125,230.34375 C 609.02322,239.26769 604.15131,267.42325 620.50000,307.75000 C 605.49195,257.72323 612.64130,247.27739 614.87500,230.31250 C 668.07068,229.21004 737.88540,241.30570 757.40625,245.12500 C 735.98732,234.66460 664.92792,227.25580 615.21875,228.21875 C 615.22870,228.11904 615.24045,228.03777 615.25000,227.93750 C 616.41525,215.70752 675.84375,123.06250 675.84375,123.06250 C 614.59722,216.66570 616.91444,216.32105 612.43750,228.21875 C 605.01927,228.41116 598.05690,228.77061 591.93750,229.37500 C 561.08150,232.42251 544.14471,244.86783 485.50000,246.00000 C 481.12067,196.29050 582.62500,47.906250 582.62500,47.906250 C 504.83281,168.65828 486.07119,201.47841 480.75000,246.09375 C 450.57954,246.34478 409.84371,243.69470 351.53125,235.56250 C 347.17084,177.77103 449.21875,12.343750 449.21875,12.343750 z "
+ id="path2587"
+ sodipodi:nodetypes="cccccccccccccccccccccccccccccc" />
+ </g>
+</svg>
diff --git a/testing/talos/talos/tests/svg_static/images/kyoto_1.jpg b/testing/talos/talos/tests/svg_static/images/kyoto_1.jpg
new file mode 100644
index 0000000000..10e24fd81b
--- /dev/null
+++ b/testing/talos/talos/tests/svg_static/images/kyoto_1.jpg
Binary files differ
diff --git a/testing/talos/talos/tests/svg_static/svg_static.manifest b/testing/talos/talos/tests/svg_static/svg_static.manifest
new file mode 100644
index 0000000000..fe2fc9292a
--- /dev/null
+++ b/testing/talos/talos/tests/svg_static/svg_static.manifest
@@ -0,0 +1,8 @@
+# gearflowers image
+http://localhost/tests/svg_static/gearflowers.svg
+
+# some generic image compositing tests
+http://localhost/tests/svg_static/composite-scale.svg
+http://localhost/tests/svg_static/composite-scale-opacity.svg
+http://localhost/tests/svg_static/composite-scale-rotate.svg
+http://localhost/tests/svg_static/composite-scale-rotate-opacity.svg
diff --git a/testing/talos/talos/tests/svgx/hixie-001.xml b/testing/talos/talos/tests/svgx/hixie-001.xml
new file mode 100644
index 0000000000..726ed0d703
--- /dev/null
+++ b/testing/talos/talos/tests/svgx/hixie-001.xml
@@ -0,0 +1,297 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-200 -200 600 600">
+<!--
+This test attempts to test how fast an SVG implementation can repaint as
+a circle that only has a fill animates over complex SVG via changes to its
+"cx" and "cy" attributes.
+-->
+<script type="text/javascript">
+ var start = new Date();
+ </script>
+ <rect fill="none" stroke="black" x="-190" y="-190" width="580" height="580" rx="40"/>
+ <text x="-150" y="-150" font-size="10">SVG Performance test.</text>
+ <text x="200" y="350" font-size="10">Test not started.</text>
+ <g>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.172" d="M-122.304 84.285C-122.304 84.285 -122.203 86.179 -123.027 86.16C-123.851 86.141 -140.305 38.066 -160.833 40.309C-160.833 40.309 -143.05 32.956 -122.304 84.285z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.172" d="M-118.774 81.262C-118.774 81.262 -119.323 83.078 -120.092 82.779C-120.86 82.481 -119.977 31.675 -140.043 26.801C-140.043 26.801 -120.82 25.937 -118.774 81.262z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.172" d="M-91.284 123.59C-91.284 123.59 -89.648 124.55 -90.118 125.227C-90.589 125.904 -139.763 113.102 -149.218 131.459C-149.218 131.459 -145.539 112.572 -91.284 123.59z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.172" d="M-94.093 133.801C-94.093 133.801 -92.237 134.197 -92.471 134.988C-92.704 135.779 -143.407 139.121 -146.597 159.522C-146.597 159.522 -149.055 140.437 -94.093 133.801z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.172" d="M-98.304 128.276C-98.304 128.276 -96.526 128.939 -96.872 129.687C-97.218 130.435 -147.866 126.346 -153.998 146.064C-153.998 146.064 -153.646 126.825 -98.304 128.276z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.172" d="M-109.009 110.072C-109.009 110.072 -107.701 111.446 -108.34 111.967C-108.979 112.488 -152.722 86.634 -166.869 101.676C-166.869 101.676 -158.128 84.533 -109.009 110.072z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.172" d="M-116.554 114.263C-116.554 114.263 -115.098 115.48 -115.674 116.071C-116.25 116.661 -162.638 95.922 -174.992 112.469C-174.992 112.469 -168.247 94.447 -116.554 114.263z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.172" d="M-119.154 118.335C-119.154 118.335 -117.546 119.343 -118.036 120.006C-118.526 120.669 -167.308 106.446 -177.291 124.522C-177.291 124.522 -173.066 105.749 -119.154 118.335z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.172" d="M-108.42 118.949C-108.42 118.949 -107.298 120.48 -107.999 120.915C-108.7 121.35 -148.769 90.102 -164.727 103.207C-164.727 103.207 -153.862 87.326 -108.42 118.949z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.172" d="M-128.2 90C-128.2 90 -127.6 91.8 -128.4 92C-129.2 92.2 -157.8 50.2 -177.001 57.8C-177.001 57.8 -161.8 46 -128.2 90z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.172" d="M-127.505 96.979C-127.505 96.979 -126.53 98.608 -127.269 98.975C-128.007 99.343 -164.992 64.499 -182.101 76.061C-182.101 76.061 -169.804 61.261 -127.505 96.979z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.172" d="M-127.62 101.349C-127.62 101.349 -126.498 102.88 -127.199 103.315C-127.9 103.749 -167.969 72.502 -183.927 85.607C-183.927 85.607 -173.062 69.726 -127.62 101.349z"/>
+ <path fill="#ffffff" stroke="#000000" d="M-129.83 103.065C-129.327 109.113 -128.339 115.682 -126.6 118.801C-126.6 118.801 -130.2 131.201 -121.4 144.401C-121.4 144.401 -121.8 151.601 -120.2 154.801C-120.2 154.801 -116.2 163.201 -111.4 164.001C-107.516 164.648 -98.793 167.717 -88.932 169.121C-88.932 169.121 -71.8 183.201 -75 196.001C-75 196.001 -75.4 212.401 -79 214.001C-79 214.001 -67.4 202.801 -77 219.601L-81.4 238.401C-81.4 238.401 -55.8 216.801 -71.4 235.201L-81.4 261.201C-81.4 261.201 -61.8 242.801 -69 251.201L-72.2 260.001C-72.2 260.001 -29 232.801 -59.8 262.401C-59.8 262.401 -51.8 258.801 -47.4 261.601C-47.4 261.601 -40.6 260.401 -41.4 262.001C-41.4 262.001 -62.2 272.401 -65.8 290.801C-65.8 290.801 -57.4 280.801 -60.6 291.601L-60.2 303.201C-60.2 303.201 -56.2 281.601 -56.6 319.201C-56.6 319.201 -37.4 301.201 -49 322.001L-49 338.801C-49 338.801 -33.8 322.401 -40.2 335.201C-40.2 335.201 -30.2 326.401 -34.2 341.601C-34.2 341.601 -35 352.001 -30.6 340.801C-30.6 340.801 -14.6 310.201 -20.6 336.401C-20.6 336.401 -21.4 355.601 -16.6 340.801C-16.6 340.801 -16.2 351.201 -7 358.401C-7 358.401 -8.2 307.601 4.6 343.601L8.6 360.001C8.6 360.001 11.4 350.801 11 345.601C11 345.601 25.8 329.201 19 353.601C19 353.601 34.2 330.801 31 344.001C31 344.001 23.4 360.001 25 364.801C25 364.801 41.8 330.001 43 328.401C43 328.401 41 370.802 51.8 334.801C51.8 334.801 57.4 346.801 54.6 351.201C54.6 351.201 62.6 343.201 61.8 340.001C61.8 340.001 66.4 331.801 69.2 345.401C69.2 345.401 71 354.801 72.6 351.601C72.6 351.601 76.6 375.602 77.8 352.801C77.8 352.801 79.4 339.201 72.2 327.601C72.2 327.601 73 324.401 70.2 320.401C70.2 320.401 83.8 342.001 76.6 313.201C76.6 313.201 87.801 321.201 89.001 321.201C89.001 321.201 75.4 298.001 84.2 302.801C84.2 302.801 79 292.401 97.001 304.401C97.001 304.401 81 288.401 98.601 298.001C98.601 298.001 106.601 304.401 99.001 294.401C99.001 294.401 84.6 278.401 106.601 296.401C106.601 296.401 118.201 312.801 119.001 315.601C119.001 315.601 109.001 286.401 104.601 283.601C104.601 283.601 113.001 247.201 154.201 262.801C154.201 262.801 161.001 280.001 165.401 261.601C165.401 261.601 178.201 255.201 189.401 282.801C189.401 282.801 193.401 269.201 192.601 266.401C192.601 266.401 199.401 267.601 198.601 266.401C198.601 266.401 211.801 270.801 213.001 270.001C213.001 270.001 219.801 276.801 220.201 273.201C220.201 273.201 229.401 276.001 227.401 272.401C227.401 272.401 236.201 288.001 236.601 291.601L239.001 277.601L241.001 280.401C241.001 280.401 242.601 272.801 241.801 271.601C241.001 270.401 261.801 278.401 266.601 299.201L268.601 307.601C268.601 307.601 274.601 292.801 273.001 288.801C273.001 288.801 278.201 289.601 278.601 294.001C278.601 294.001 282.601 270.801 277.801 264.801C277.801 264.801 282.201 264.001 283.401 267.601L283.401 260.401C283.401 260.401 290.601 261.201 290.601 258.801C290.601 258.801 295.001 254.801 297.001 259.601C297.001 259.601 284.601 224.401 303.001 243.601C303.001 243.601 310.201 254.401 306.601 235.601C303.001 216.801 299.001 215.201 303.801 214.801C303.801 214.801 304.601 211.201 302.601 209.601C300.601 208.001 303.801 209.601 303.801 209.601C303.801 209.601 308.601 213.601 303.401 191.601C303.401 191.601 309.801 193.201 297.801 164.001C297.801 164.001 300.601 161.601 296.601 153.201C296.601 153.201 304.601 157.601 307.401 156.001C307.401 156.001 307.001 154.401 303.801 150.401C303.801 150.401 282.201 95.6 302.601 117.601C302.601 117.601 314.451 131.151 308.051 108.351C308.051 108.351 298.94 84.341 299.717 80.045L-129.83 103.065z"/>
+ <path fill="#cc7226" stroke="#000000" d="M299.717 80.245C300.345 80.426 302.551 81.55 303.801 83.2C303.801 83.2 310.601 94 305.401 75.6C305.401 75.6 296.201 46.8 305.001 58C305.001 58 311.001 65.2 307.801 51.6C303.936 35.173 301.401 28.8 301.401 28.8C301.401 28.8 313.001 33.6 286.201 -6L295.001 -2.4C295.001 -2.4 275.401 -42 253.801 -47.2L245.801 -53.2C245.801 -53.2 284.201 -91.2 271.401 -128C271.401 -128 264.601 -133.2 255.001 -124C255.001 -124 248.601 -119.2 242.601 -120.8C242.601 -120.8 211.801 -119.6 209.801 -119.6C207.801 -119.6 173.001 -156.8 107.401 -139.2C107.401 -139.2 102.201 -137.2 97.801 -138.4C97.801 -138.4 79.4 -154.4 30.6 -131.6C30.6 -131.6 20.6 -129.6 19 -129.6C17.4 -129.6 14.6 -129.6 6.6 -123.2C-1.4 -116.8 -1.8 -116 -3.8 -114.4C-3.8 -114.4 -20.2 -103.2 -25 -102.4C-25 -102.4 -36.6 -96 -41 -86L-44.6 -84.8C-44.6 -84.8 -46.2 -77.6 -46.6 -76.4C-46.6 -76.4 -51.4 -72.8 -52.2 -67.2C-52.2 -67.2 -61 -61.2 -60.6 -56.8C-60.6 -56.8 -62.2 -51.6 -63 -46.8C-63 -46.8 -70.2 -42 -69.4 -39.2C-69.4 -39.2 -77 -25.2 -75.8 -18.4C-75.8 -18.4 -82.2 -18.8 -85 -16.4C-85 -16.4 -85.8 -11.6 -87.4 -11.2C-87.4 -11.2 -90.2 -10 -87.8 -6C-87.8 -6 -89.4 -3.2 -89.8 -1.6C-89.8 -1.6 -89 1.2 -93.4 6.8C-93.4 6.8 -99.8 25.6 -97.8 30.8C-97.8 30.8 -97.4 35.6 -100.2 37.2C-100.2 37.2 -103.8 36.8 -95.4 48.8C-95.4 48.8 -94.6 50 -97.8 52.4C-97.8 52.4 -115 56 -117.4 72.4C-117.4 72.4 -131 87.2 -131 92.4C-131 94.705 -130.729 97.852 -130.03 102.465C-130.03 102.465 -130.6 110.801 -103 111.601C-75.4 112.401 299.717 80.245 299.717 80.245z"/>
+ <path fill="#cc7226" d="M-115.6 102.6C-140.6 63.2 -126.2 119.601 -126.2 119.601C-117.4 154.001 12.2 116.401 12.2 116.401C12.2 116.401 181.001 86 192.201 82C203.401 78 298.601 84.4 298.601 84.4L293.001 67.6C228.201 21.2 209.001 44.4 195.401 40.4C181.801 36.4 184.201 46 181.001 46.8C177.801 47.6 138.601 22.8 132.201 23.6C125.801 24.4 100.459 0.649 115.401 32.4C131.401 66.4 57 71.6 40.2 60.4C23.4 49.2 47.4 78.8 47.4 78.8C65.8 98.8 31.4 82 31.4 82C-3 69.2 -27 94.8 -30.2 95.6C-33.4 96.4 -38.2 99.6 -39 93.2C-39.8 86.8 -47.31 70.099 -79 96.4C-99 113.001 -112.8 91 -112.8 91L-115.6 102.6z"/>
+ <path fill="#e87f3a" d="M133.51 25.346C127.11 26.146 101.743 2.407 116.71 34.146C133.31 69.346 58.31 73.346 41.51 62.146C24.709 50.946 48.71 80.546 48.71 80.546C67.11 100.546 32.709 83.746 32.709 83.746C-1.691 70.946 -25.691 96.546 -28.891 97.346C-32.091 98.146 -36.891 101.346 -37.691 94.946C-38.491 88.546 -45.87 72.012 -77.691 98.146C-98.927 115.492 -112.418 94.037 -112.418 94.037L-115.618 104.146C-140.618 64.346 -125.546 122.655 -125.546 122.655C-116.745 157.056 13.509 118.146 13.509 118.146C13.509 118.146 182.31 87.746 193.51 83.746C204.71 79.746 299.038 86.073 299.038 86.073L293.51 68.764C228.71 22.364 210.31 46.146 196.71 42.146C183.11 38.146 185.51 47.746 182.31 48.546C179.11 49.346 139.91 24.546 133.51 25.346z"/>
+ <path fill="#ea8c4d" d="M134.819 27.091C128.419 27.891 103.685 3.862 118.019 35.891C134.219 72.092 59.619 75.092 42.819 63.892C26.019 52.692 50.019 82.292 50.019 82.292C68.419 102.292 34.019 85.492 34.019 85.492C-0.381 72.692 -24.382 98.292 -27.582 99.092C-30.782 99.892 -35.582 103.092 -36.382 96.692C-37.182 90.292 -44.43 73.925 -76.382 99.892C-98.855 117.983 -112.036 97.074 -112.036 97.074L-115.636 105.692C-139.436 66.692 -124.891 125.71 -124.891 125.71C-116.091 160.11 14.819 119.892 14.819 119.892C14.819 119.892 183.619 89.492 194.819 85.492C206.019 81.492 299.474 87.746 299.474 87.746L294.02 69.928C229.219 23.528 211.619 47.891 198.019 43.891C184.419 39.891 186.819 49.491 183.619 50.292C180.419 51.092 141.219 26.291 134.819 27.091z"/>
+ <path fill="#ec9961" d="M136.128 28.837C129.728 29.637 104.999 5.605 119.328 37.637C136.128 75.193 60.394 76.482 44.128 65.637C27.328 54.437 51.328 84.037 51.328 84.037C69.728 104.037 35.328 87.237 35.328 87.237C0.928 74.437 -23.072 100.037 -26.272 100.837C-29.472 101.637 -34.272 104.837 -35.072 98.437C-35.872 92.037 -42.989 75.839 -75.073 101.637C-98.782 120.474 -111.655 100.11 -111.655 100.11L-115.655 107.237C-137.455 70.437 -124.236 128.765 -124.236 128.765C-115.436 163.165 16.128 121.637 16.128 121.637C16.128 121.637 184.928 91.237 196.129 87.237C207.329 83.237 299.911 89.419 299.911 89.419L294.529 71.092C229.729 24.691 212.929 49.637 199.329 45.637C185.728 41.637 188.128 51.237 184.928 52.037C181.728 52.837 142.528 28.037 136.128 28.837z"/>
+ <path fill="#eea575" d="M137.438 30.583C131.037 31.383 106.814 7.129 120.637 39.383C137.438 78.583 62.237 78.583 45.437 67.383C28.637 56.183 52.637 85.783 52.637 85.783C71.037 105.783 36.637 88.983 36.637 88.983C2.237 76.183 -21.763 101.783 -24.963 102.583C-28.163 103.383 -32.963 106.583 -33.763 100.183C-34.563 93.783 -41.548 77.752 -73.763 103.383C-98.709 122.965 -111.273 103.146 -111.273 103.146L-115.673 108.783C-135.473 73.982 -123.582 131.819 -123.582 131.819C-114.782 166.22 17.437 123.383 17.437 123.383C17.437 123.383 186.238 92.983 197.438 88.983C208.638 84.983 300.347 91.092 300.347 91.092L295.038 72.255C230.238 25.855 214.238 51.383 200.638 47.383C187.038 43.383 189.438 52.983 186.238 53.783C183.038 54.583 143.838 29.783 137.438 30.583z"/>
+ <path fill="#f1b288" d="M138.747 32.328C132.347 33.128 106.383 9.677 121.947 41.128C141.147 79.928 63.546 80.328 46.746 69.128C29.946 57.928 53.946 87.528 53.946 87.528C72.346 107.528 37.946 90.728 37.946 90.728C3.546 77.928 -20.454 103.528 -23.654 104.328C-26.854 105.128 -31.654 108.328 -32.454 101.928C-33.254 95.528 -40.108 79.665 -72.454 105.128C-98.636 125.456 -110.891 106.183 -110.891 106.183L-115.691 110.328C-133.691 77.128 -122.927 134.874 -122.927 134.874C-114.127 169.274 18.746 125.128 18.746 125.128C18.746 125.128 187.547 94.728 198.747 90.728C209.947 86.728 300.783 92.764 300.783 92.764L295.547 73.419C230.747 27.019 215.547 53.128 201.947 49.128C188.347 45.128 190.747 54.728 187.547 55.528C184.347 56.328 145.147 31.528 138.747 32.328z"/>
+ <path fill="#f3bf9c" d="M140.056 34.073C133.655 34.873 107.313 11.613 123.255 42.873C143.656 82.874 64.855 82.074 48.055 70.874C31.255 59.674 55.255 89.274 55.255 89.274C73.655 109.274 39.255 92.474 39.255 92.474C4.855 79.674 -19.145 105.274 -22.345 106.074C-25.545 106.874 -30.345 110.074 -31.145 103.674C-31.945 97.274 -38.668 81.578 -71.145 106.874C-98.564 127.947 -110.509 109.219 -110.509 109.219L-115.709 111.874C-131.709 81.674 -122.273 137.929 -122.273 137.929C-113.473 172.329 20.055 126.874 20.055 126.874C20.055 126.874 188.856 96.474 200.056 92.474C211.256 88.474 301.22 94.437 301.22 94.437L296.056 74.583C231.256 28.183 216.856 54.874 203.256 50.874C189.656 46.873 192.056 56.474 188.856 57.274C185.656 58.074 146.456 33.273 140.056 34.073z"/>
+ <path fill="#f5ccb0" d="M141.365 35.819C134.965 36.619 107.523 13.944 124.565 44.619C146.565 84.219 66.164 83.819 49.364 72.619C32.564 61.419 56.564 91.019 56.564 91.019C74.964 111.019 40.564 94.219 40.564 94.219C6.164 81.419 -17.836 107.019 -21.036 107.819C-24.236 108.619 -29.036 111.819 -29.836 105.419C-30.636 99.019 -37.227 83.492 -69.836 108.619C-98.491 130.438 -110.127 112.256 -110.127 112.256L-115.727 113.419C-130.128 85.019 -121.618 140.983 -121.618 140.983C-112.818 175.384 21.364 128.619 21.364 128.619C21.364 128.619 190.165 98.219 201.365 94.219C212.565 90.219 301.656 96.11 301.656 96.11L296.565 75.746C231.765 29.346 218.165 56.619 204.565 52.619C190.965 48.619 193.365 58.219 190.165 59.019C186.965 59.819 147.765 35.019 141.365 35.819z"/>
+ <path fill="#f8d8c4" d="M142.674 37.565C136.274 38.365 108.832 15.689 125.874 46.365C147.874 85.965 67.474 85.565 50.674 74.365C33.874 63.165 57.874 92.765 57.874 92.765C76.274 112.765 41.874 95.965 41.874 95.965C7.473 83.165 -16.527 108.765 -19.727 109.565C-22.927 110.365 -27.727 113.565 -28.527 107.165C-29.327 100.765 -35.786 85.405 -68.527 110.365C-98.418 132.929 -109.745 115.293 -109.745 115.293L-115.745 114.965C-129.346 88.564 -120.963 144.038 -120.963 144.038C-112.163 178.438 22.673 130.365 22.673 130.365C22.673 130.365 191.474 99.965 202.674 95.965C213.874 91.965 302.093 97.783 302.093 97.783L297.075 76.91C232.274 30.51 219.474 58.365 205.874 54.365C192.274 50.365 194.674 59.965 191.474 60.765C188.274 61.565 149.074 36.765 142.674 37.565z"/>
+ <path fill="#fae5d7" d="M143.983 39.31C137.583 40.11 110.529 17.223 127.183 48.11C149.183 88.91 68.783 87.31 51.983 76.11C35.183 64.91 59.183 94.51 59.183 94.51C77.583 114.51 43.183 97.71 43.183 97.71C8.783 84.91 -15.217 110.51 -18.417 111.31C-21.618 112.11 -26.418 115.31 -27.218 108.91C-28.018 102.51 -34.346 87.318 -67.218 112.11C-98.345 135.42 -109.363 118.329 -109.363 118.329L-115.764 116.51C-128.764 92.51 -120.309 147.093 -120.309 147.093C-111.509 181.493 23.983 132.11 23.983 132.11C23.983 132.11 192.783 101.71 203.983 97.71C215.183 93.71 302.529 99.456 302.529 99.456L297.583 78.074C232.783 31.673 220.783 60.11 207.183 56.11C193.583 52.11 195.983 61.71 192.783 62.51C189.583 63.31 150.383 38.51 143.983 39.31z"/>
+ <path fill="#fcf2eb" d="M145.292 41.055C138.892 41.855 112.917 18.411 128.492 49.855C149.692 92.656 70.092 89.056 53.292 77.856C36.492 66.656 60.492 96.256 60.492 96.256C78.892 116.256 44.492 99.456 44.492 99.456C10.092 86.656 -13.908 112.256 -17.108 113.056C-20.308 113.856 -25.108 117.056 -25.908 110.656C-26.708 104.256 -32.905 89.232 -65.908 113.856C-98.273 137.911 -108.982 121.365 -108.982 121.365L-115.782 118.056C-128.582 94.856 -119.654 150.147 -119.654 150.147C-110.854 184.547 25.292 133.856 25.292 133.856C25.292 133.856 194.093 103.456 205.293 99.456C216.493 95.456 302.965 101.128 302.965 101.128L298.093 79.237C233.292 32.837 222.093 61.856 208.493 57.856C194.893 53.855 197.293 63.456 194.093 64.256C190.892 65.056 151.692 40.255 145.292 41.055z"/>
+ <path fill="#ffffff" d="M-115.8 119.601C-128.6 97.6 -119 153.201 -119 153.201C-110.2 187.601 26.6 135.601 26.6 135.601C26.6 135.601 195.401 105.2 206.601 101.2C217.801 97.2 303.401 102.8 303.401 102.8L298.601 80.4C233.801 34 223.401 63.6 209.801 59.6C196.201 55.6 198.601 65.2 195.401 66C192.201 66.8 153.001 42 146.601 42.8C140.201 43.6 114.981 19.793 129.801 51.6C152.028 99.307 69.041 89.227 54.6 79.6C37.8 68.4 61.8 98 61.8 98C80.2 118.001 45.8 101.2 45.8 101.2C11.4 88.4 -12.6 114.001 -15.8 114.801C-19 115.601 -23.8 118.801 -24.6 112.401C-25.4 106 -31.465 91.144 -64.6 115.601C-98.2 140.401 -108.6 124.401 -108.6 124.401L-115.8 119.601z"/>
+ <path fill="#000000" d="M-74.2 149.601C-74.2 149.601 -81.4 161.201 -60.6 174.401C-60.6 174.401 -59.2 175.801 -77.2 171.601C-77.2 171.601 -83.4 169.601 -85 159.201C-85 159.201 -89.8 154.801 -94.6 149.201C-99.4 143.601 -74.2 149.601 -74.2 149.601z"/>
+ <path fill="#cccccc" d="M65.8 102C65.8 102 83.498 128.821 82.9 133.601C81.6 144.001 81.4 153.601 84.6 157.601C87.801 161.601 96.601 194.801 96.601 194.801C96.601 194.801 96.201 196.001 108.601 158.001C108.601 158.001 120.201 142.001 100.201 123.601C100.201 123.601 65 94.8 65.8 102z"/>
+ <path fill="#000000" d="M-54.2 176.401C-54.2 176.401 -43 183.601 -57.4 214.801L-51 212.401C-51 212.401 -51.8 223.601 -55 226.001L-47.8 222.801C-47.8 222.801 -43 230.801 -47 235.601C-47 235.601 -30.2 243.601 -31 250.001C-31 250.001 -24.6 242.001 -28.6 235.601C-32.6 229.201 -39.8 233.201 -39 214.801L-47.8 218.001C-47.8 218.001 -42.2 209.201 -42.2 202.801L-50.2 205.201C-50.2 205.201 -34.731 178.623 -45.4 177.201C-51.4 176.401 -54.2 176.401 -54.2 176.401z"/>
+ <path fill="#cccccc" d="M-21.8 193.201C-21.8 193.201 -19 188.801 -21.8 189.601C-24.6 190.401 -55.8 205.201 -61.8 214.801C-61.8 214.801 -27.4 190.401 -21.8 193.201z"/>
+ <path fill="#cccccc" d="M-11.4 201.201C-11.4 201.201 -8.6 196.801 -11.4 197.601C-14.2 198.401 -45.4 213.201 -51.4 222.801C-51.4 222.801 -17 198.401 -11.4 201.201z"/>
+ <path fill="#cccccc" d="M1.8 186.001C1.8 186.001 4.6 181.601 1.8 182.401C-1 183.201 -32.2 198.001 -38.2 207.601C-38.2 207.601 -3.8 183.201 1.8 186.001z"/>
+ <path fill="#cccccc" d="M-21.4 229.601C-21.4 229.601 -21.4 223.601 -24.2 224.401C-27 225.201 -63 242.801 -69 252.401C-69 252.401 -27 226.801 -21.4 229.601z"/>
+ <path fill="#cccccc" d="M-20.2 218.801C-20.2 218.801 -19 214.001 -21.8 214.801C-23.8 214.801 -50.2 226.401 -56.2 236.001C-56.2 236.001 -26.6 214.401 -20.2 218.801z"/>
+ <path fill="#cccccc" d="M-34.6 266.401L-44.6 274.001C-44.6 274.001 -34.2 266.401 -30.6 267.601C-30.6 267.601 -37.4 278.801 -38.2 284.001C-38.2 284.001 -27.8 271.201 -22.2 271.601C-22.2 271.601 -14.6 272.001 -14.6 282.801C-14.6 282.801 -9 272.401 -5.8 272.801C-5.8 272.801 -4.6 279.201 -5.8 286.001C-5.8 286.001 -1.8 278.401 2.2 280.001C2.2 280.001 8.6 278.001 7.8 289.601C7.8 289.601 7.8 300.001 7 302.801C7 302.801 12.6 276.401 15 276.001C15 276.001 23 274.801 27.8 283.601C27.8 283.601 23.8 276.001 28.6 278.001C28.6 278.001 39.4 279.601 42.6 286.401C42.6 286.401 35.8 274.401 41.4 277.601C41.4 277.601 48.2 277.601 49.4 284.001C49.4 284.001 57.8 305.201 59.8 306.801C59.8 306.801 52.2 285.201 53.8 285.201C53.8 285.201 51.8 273.201 57 288.001C57 288.001 53.8 274.001 59.4 274.801C65 275.601 69.4 285.601 77.8 283.201C77.8 283.201 87.401 288.801 89.401 219.601L-34.6 266.401z"/>
+ <path fill="#000000" d="M-29.8 173.601C-29.8 173.601 -15 167.601 25 173.601C25 173.601 32.2 174.001 39 165.201C45.8 156.401 72.6 149.201 79 151.201L88.601 157.601L89.401 158.801C89.401 158.801 101.801 169.201 102.201 176.801C102.601 184.401 87.801 232.401 78.2 248.401C68.6 264.401 59 276.801 39.8 274.401C39.8 274.401 19 270.401 -6.6 274.401C-6.6 274.401 -35.8 272.801 -38.6 264.801C-41.4 256.801 -27.4 241.601 -27.4 241.601C-27.4 241.601 -23 233.201 -24.2 218.801C-25.4 204.401 -25 176.401 -29.8 173.601z"/>
+ <path fill="#e5668c" d="M-7.8 175.601C0.6 194.001 -29 259.201 -29 259.201C-31 260.801 -16.34 266.846 -6.2 264.401C4.746 261.763 45 266.001 45 266.001C68.6 250.401 81.4 206.001 81.4 206.001C81.4 206.001 91.801 182.001 74.2 178.801C56.6 175.601 -7.8 175.601 -7.8 175.601z"/>
+ <path fill="#b23259" d="M-9.831 206.497C-6.505 193.707 -4.921 181.906 -7.8 175.601C-7.8 175.601 54.6 182.001 65.8 161.201C70.041 153.326 84.801 184.001 84.4 193.601C84.4 193.601 21.4 208.001 6.6 196.801L-9.831 206.497z"/>
+ <path fill="#a5264c" d="M-5.4 222.801C-5.4 222.801 -3.4 230.001 -5.8 234.001C-5.8 234.001 -7.4 234.801 -8.6 235.201C-8.6 235.201 -7.4 238.801 -1.4 240.401C-1.4 240.401 0.6 244.801 3 245.201C5.4 245.601 10.2 251.201 14.2 250.001C18.2 248.801 29.4 244.801 29.4 244.801C29.4 244.801 35 241.601 43.8 245.201C43.8 245.201 46.175 244.399 46.6 240.401C47.1 235.701 50.2 232.001 52.2 230.001C54.2 228.001 63.8 215.201 62.6 214.801C61.4 214.401 -5.4 222.801 -5.4 222.801z"/>
+ <path fill="#ff727f" stroke="#000000" d="M-9.8 174.401C-9.8 174.401 -12.6 196.801 -9.4 205.201C-6.2 213.601 -7 215.601 -7.8 219.601C-8.6 223.601 -4.2 233.601 1.4 239.601L13.4 241.201C13.4 241.201 28.6 237.601 37.8 240.401C37.8 240.401 46.794 241.744 50.2 226.801C50.2 226.801 55 220.401 62.2 217.601C69.4 214.801 76.6 173.201 72.6 165.201C68.6 157.201 54.2 152.801 38.2 168.401C22.2 184.001 20.2 167.201 -9.8 174.401z"/>
+ <path fill="#ffffcc" stroke="#000000" stroke-width="0.5" d="M-8.2 249.201C-8.2 249.201 -9 247.201 -13.4 246.801C-13.4 246.801 -35.8 243.201 -44.2 230.801C-44.2 230.801 -51 225.201 -46.6 236.801C-46.6 236.801 -36.2 257.201 -29.4 260.001C-29.4 260.001 -13 264.001 -8.2 249.201z"/>
+ <path fill="#cc3f4c" d="M71.742 185.229C72.401 177.323 74.354 168.709 72.6 165.201C66.154 152.307 49.181 157.695 38.2 168.401C22.2 184.001 20.2 167.201 -9.8 174.401C-9.8 174.401 -11.545 188.364 -10.705 198.376C-10.705 198.376 26.6 186.801 27.4 192.401C27.4 192.401 29 189.201 38.2 189.201C47.4 189.201 70.142 188.029 71.742 185.229z"/>
+ <path stroke="#a51926" stroke-width="2" d="M28.6 175.201C28.6 175.201 33.4 180.001 29.8 189.601C29.8 189.601 15.4 205.601 17.4 219.601"/>
+ <path fill="#ffffcc" stroke="#000000" stroke-width="0.5" d="M-19.4 260.001C-19.4 260.001 -23.8 247.201 -15 254.001C-15 254.001 -10.2 256.001 -11.4 257.601C-12.6 259.201 -18.2 263.201 -19.4 260.001z"/>
+ <path fill="#ffffcc" stroke="#000000" stroke-width="0.5" d="M-14.36 261.201C-14.36 261.201 -17.88 250.961 -10.84 256.401C-10.84 256.401 -6.419 258.849 -7.96 259.281C-12.52 260.561 -7.96 263.121 -14.36 261.201z"/>
+ <path fill="#ffffcc" stroke="#000000" stroke-width="0.5" d="M-9.56 261.201C-9.56 261.201 -13.08 250.961 -6.04 256.401C-6.04 256.401 -1.665 258.711 -3.16 259.281C-6.52 260.561 -3.16 263.121 -9.56 261.201z"/>
+ <path fill="#ffffcc" stroke="#000000" stroke-width="0.5" d="M-2.96 261.401C-2.96 261.401 -6.48 251.161 0.56 256.601C0.56 256.601 4.943 258.933 3.441 259.481C0.48 260.561 3.441 263.321 -2.96 261.401z"/>
+ <path fill="#ffffcc" stroke="#000000" stroke-width="0.5" d="M3.52 261.321C3.52 261.321 0 251.081 7.041 256.521C7.041 256.521 10.881 258.121 9.921 259.401C8.961 260.681 9.921 263.241 3.52 261.321z"/>
+ <path fill="#ffffcc" stroke="#000000" stroke-width="0.5" d="M10.2 262.001C10.2 262.001 5.4 249.601 14.6 256.001C14.6 256.001 19.4 258.001 18.2 259.601C17 261.201 18.2 264.401 10.2 262.001z"/>
+ <path stroke="#a5264c" stroke-width="2" d="M-18.2 244.801C-18.2 244.801 -5 242.001 1 245.201C1 245.201 7 246.401 8.2 246.001C9.4 245.601 12.6 245.201 12.6 245.201"/>
+ <path stroke="#a5264c" stroke-width="2" d="M15.8 253.601C15.8 253.601 27.8 240.001 39.8 244.401C46.816 246.974 45.8 243.601 46.6 240.801C47.4 238.001 47.6 233.801 52.6 230.801"/>
+ <path fill="#ffffcc" stroke="#000000" stroke-width="0.5" d="M33 237.601C33 237.601 29 226.801 26.2 239.601C23.4 252.401 20.2 256.001 18.6 258.801C18.6 258.801 18.6 264.001 27 263.601C27 263.601 37.8 263.201 38.2 260.401C38.6 257.601 37 246.001 33 237.601z"/>
+ <path stroke="#a5264c" stroke-width="2" d="M47 244.801C47 244.801 50.6 242.401 53 243.601"/>
+ <path stroke="#a5264c" stroke-width="2" d="M53.5 228.401C53.5 228.401 56.4 223.501 61.2 222.701"/>
+ <path fill="#b2b2b2" d="M-25.8 265.201C-25.8 265.201 -7.8 268.401 -3.4 266.801C-3.4 266.801 5.4 266.801 -3 268.801C-3 268.801 -15.8 268.801 -23.8 267.601C-23.8 267.601 -35.4 262.001 -25.8 265.201z"/>
+ <path fill="#ffffcc" stroke="#000000" stroke-width="0.5" d="M-11.8 172.001C-11.8 172.001 5.8 172.001 7.8 172.801C7.8 172.801 15 203.601 11.4 211.201C11.4 211.201 10.2 214.001 7.4 208.401C7.4 208.401 -11 175.601 -14.2 173.601C-17.4 171.601 -13 172.001 -11.8 172.001z"/>
+ <path fill="#ffffcc" stroke="#000000" stroke-width="0.5" d="M-88.9 169.301C-88.9 169.301 -80 171.001 -67.4 173.601C-67.4 173.601 -62.6 196.001 -59.4 200.801C-56.2 205.601 -59.8 205.601 -63.4 202.801C-67 200.001 -81.8 186.001 -83.8 181.601C-85.8 177.201 -88.9 169.301 -88.9 169.301z"/>
+ <path fill="#ffffcc" stroke="#000000" stroke-width="0.5" d="M-67.039 173.818C-67.039 173.818 -61.239 175.366 -60.23 177.581C-59.222 179.795 -61.432 183.092 -61.432 183.092C-61.432 183.092 -62.432 186.397 -63.634 184.235C-64.836 182.072 -67.708 174.412 -67.039 173.818z"/>
+ <path fill="#000000" d="M-67 173.601C-67 173.601 -63.4 178.801 -59.8 178.801C-56.2 178.801 -55.818 178.388 -53 179.001C-48.4 180.001 -48.8 178.001 -42.2 179.201C-39.56 179.681 -37 178.801 -34.2 180.001C-31.4 181.201 -28.2 180.401 -27 178.401C-25.8 176.401 -21 172.201 -21 172.201C-21 172.201 -33.8 174.001 -36.6 174.801C-36.6 174.801 -59 176.001 -67 173.601z"/>
+ <path fill="#ffffcc" stroke="#000000" stroke-width="0.5" d="M-22.4 173.801C-22.4 173.801 -28.85 177.301 -29.25 179.701C-29.65 182.101 -24 185.801 -24 185.801C-24 185.801 -21.25 190.401 -20.65 188.001C-20.05 185.601 -21.6 174.201 -22.4 173.801z"/>
+ <path fill="#ffffcc" stroke="#000000" stroke-width="0.5" d="M-59.885 179.265C-59.885 179.265 -52.878 190.453 -52.661 179.242C-52.661 179.242 -52.104 177.984 -53.864 177.962C-59.939 177.886 -58.418 173.784 -59.885 179.265z"/>
+ <path fill="#ffffcc" stroke="#000000" stroke-width="0.5" d="M-52.707 179.514C-52.707 179.514 -44.786 190.701 -45.422 179.421C-45.422 179.421 -45.415 179.089 -47.168 178.936C-51.915 178.522 -51.57 174.004 -52.707 179.514z"/>
+ <path fill="#ffffcc" stroke="#000000" stroke-width="0.5" d="M-45.494 179.522C-45.494 179.522 -37.534 190.15 -38.203 180.484C-38.203 180.484 -38.084 179.251 -39.738 178.95C-43.63 178.244 -43.841 174.995 -45.494 179.522z"/>
+ <path fill="#ffffcc" stroke="#000000" stroke-width="0.5" d="M-38.618 179.602C-38.618 179.602 -30.718 191.163 -30.37 181.382C-30.37 181.382 -28.726 180.004 -30.472 179.782C-36.29 179.042 -35.492 174.588 -38.618 179.602z"/>
+ <path fill="#e5e5b2" d="M-74.792 183.132L-82.45 181.601C-85.05 176.601 -87.15 170.451 -87.15 170.451C-87.15 170.451 -80.8 171.451 -68.3 174.251C-68.3 174.251 -67.424 177.569 -65.952 183.364L-74.792 183.132z"/>
+ <path fill="#e5e5b2" d="M-9.724 178.47C-11.39 175.964 -12.707 174.206 -13.357 173.8C-16.37 171.917 -12.227 172.294 -11.098 172.294C-11.098 172.294 5.473 172.294 7.356 173.047C7.356 173.047 7.88 175.289 8.564 178.68C8.564 178.68 -1.524 176.67 -9.724 178.47z"/>
+ <path fill="#cc7226" d="M43.88 40.321C71.601 44.281 97.121 8.641 98.881 -1.04C100.641 -10.72 90.521 -22.6 90.521 -22.6C91.841 -25.68 87.001 -39.76 81.721 -49C76.441 -58.24 60.54 -57.266 43 -58.24C27.16 -59.12 8.68 -35.8 7.36 -34.04C6.04 -32.28 12.2 6.001 13.52 11.721C14.84 17.441 12.2 43.841 12.2 43.841C46.44 34.741 16.16 36.361 43.88 40.321z"/>
+ <path fill="#ea8e51" d="M8.088 -33.392C6.792 -31.664 12.84 5.921 14.136 11.537C15.432 17.153 12.84 43.073 12.84 43.073C45.512 34.193 16.728 35.729 43.944 39.617C71.161 43.505 96.217 8.513 97.945 -0.992C99.673 -10.496 89.737 -22.16 89.737 -22.16C91.033 -25.184 86.281 -39.008 81.097 -48.08C75.913 -57.152 60.302 -56.195 43.08 -57.152C27.528 -58.016 9.384 -35.12 8.088 -33.392z"/>
+ <path fill="#efaa7c" d="M8.816 -32.744C7.544 -31.048 13.48 5.841 14.752 11.353C16.024 16.865 13.48 42.305 13.48 42.305C44.884 33.145 17.296 35.097 44.008 38.913C70.721 42.729 95.313 8.385 97.009 -0.944C98.705 -10.272 88.953 -21.72 88.953 -21.72C90.225 -24.688 85.561 -38.256 80.473 -47.16C75.385 -56.064 60.063 -55.125 43.16 -56.064C27.896 -56.912 10.088 -34.44 8.816 -32.744z"/>
+ <path fill="#f4c6a8" d="M9.544 -32.096C8.296 -30.432 14.12 5.761 15.368 11.169C16.616 16.577 14.12 41.537 14.12 41.537C43.556 32.497 17.864 34.465 44.072 38.209C70.281 41.953 94.409 8.257 96.073 -0.895C97.737 -10.048 88.169 -21.28 88.169 -21.28C89.417 -24.192 84.841 -37.504 79.849 -46.24C74.857 -54.976 59.824 -54.055 43.24 -54.976C28.264 -55.808 10.792 -33.76 9.544 -32.096z"/>
+ <path fill="#f9e2d3" d="M10.272 -31.448C9.048 -29.816 14.76 5.681 15.984 10.985C17.208 16.289 14.76 40.769 14.76 40.769C42.628 31.849 18.432 33.833 44.136 37.505C69.841 41.177 93.505 8.129 95.137 -0.848C96.769 -9.824 87.385 -20.84 87.385 -20.84C88.609 -23.696 84.121 -36.752 79.225 -45.32C74.329 -53.888 59.585 -52.985 43.32 -53.888C28.632 -54.704 11.496 -33.08 10.272 -31.448z"/>
+ <path fill="#ffffff" d="M44.2 36.8C69.4 40.4 92.601 8 94.201 -0.8C95.801 -9.6 86.601 -20.4 86.601 -20.4C87.801 -23.2 83.4 -36 78.6 -44.4C73.8 -52.8 59.346 -51.914 43.4 -52.8C29 -53.6 12.2 -32.4 11 -30.8C9.8 -29.2 15.4 5.6 16.6 10.8C17.8 16 15.4 40 15.4 40C40.9 31.4 19 33.2 44.2 36.8z"/>
+ <path fill="#cccccc" d="M90.601 2.8C90.601 2.8 62.8 10.4 51.2 8.8C51.2 8.8 35.4 2.2 26.6 24C26.6 24 23 31.2 21 33.2C19 35.2 90.601 2.8 90.601 2.8z"/>
+ <path fill="#000000" d="M94.401 0.6C94.401 0.6 65.4 12.8 55.4 12.4C55.4 12.4 39 7.8 30.6 22.4C30.6 22.4 22.2 31.6 19 33.2C19 33.2 18.6 34.8 25 30.8L35.4 36C35.4 36 50.2 45.6 59.8 29.6C59.8 29.6 63.8 18.4 63.8 16.4C63.8 14.4 85 8.8 86.601 8.4C88.201 8 94.801 3.8 94.401 0.6z"/>
+ <path fill="#99cc32" d="M47 36.514C40.128 36.514 31.755 32.649 31.755 26.4C31.755 20.152 40.128 13.887 47 13.887C53.874 13.887 59.446 18.952 59.446 25.2C59.446 31.449 53.874 36.514 47 36.514z"/>
+ <path fill="#659900" d="M43.377 19.83C38.531 20.552 33.442 22.055 33.514 21.839C35.054 17.22 41.415 13.887 47 13.887C51.296 13.887 55.084 15.865 57.32 18.875C57.32 18.875 52.004 18.545 43.377 19.83z"/>
+ <path fill="#ffffff" d="M55.4 19.6C55.4 19.6 51 16.4 51 18.6C51 18.6 54.6 23 55.4 19.6z"/>
+ <path fill="#000000" d="M45.4 27.726C42.901 27.726 40.875 25.7 40.875 23.2C40.875 20.701 42.901 18.675 45.4 18.675C47.9 18.675 49.926 20.701 49.926 23.2C49.926 25.7 47.9 27.726 45.4 27.726z"/>
+ <path fill="#cc7226" d="M-58.6 14.4C-58.6 14.4 -61.8 -6.8 -59.4 -11.2C-59.4 -11.2 -48.6 -21.2 -49 -24.8C-49 -24.8 -49.4 -42.8 -50.6 -43.6C-51.8 -44.4 -59.4 -50.4 -65.4 -44C-65.4 -44 -75.8 -26 -75 -19.6L-75 -17.6C-75 -17.6 -82.6 -18 -84.2 -16C-84.2 -16 -85.4 -10.8 -86.6 -10.4C-86.6 -10.4 -89.4 -8 -87.4 -5.2C-87.4 -5.2 -89.4 -2.8 -89 1.2L-81.4 5.2C-81.4 5.2 -79.4 19.6 -68.6 24.8C-63.764 27.129 -60.6 20.4 -58.6 14.4z"/>
+ <path fill="#ffffff" d="M-59.6 12.56C-59.6 12.56 -62.48 -6.52 -60.32 -10.48C-60.32 -10.48 -50.6 -19.48 -50.96 -22.72C-50.96 -22.72 -51.32 -38.92 -52.4 -39.64C-53.48 -40.36 -60.32 -45.76 -65.72 -40C-65.72 -40 -75.08 -23.8 -74.36 -18.04L-74.36 -16.24C-74.36 -16.24 -81.2 -16.6 -82.64 -14.8C-82.64 -14.8 -83.72 -10.12 -84.8 -9.76C-84.8 -9.76 -87.32 -7.6 -85.52 -5.08C-85.52 -5.08 -87.32 -2.92 -86.96 0.68L-80.12 4.28C-80.12 4.28 -78.32 17.24 -68.6 21.92C-64.248 24.015 -61.4 17.96 -59.6 12.56z"/>
+ <path fill="#eb955c" d="M-51.05 -42.61C-52.14 -43.47 -59.63 -49.24 -65.48 -43C-65.48 -43 -75.62 -25.45 -74.84 -19.21L-74.84 -17.26C-74.84 -17.26 -82.25 -17.65 -83.81 -15.7C-83.81 -15.7 -84.98 -10.63 -86.15 -10.24C-86.15 -10.24 -88.88 -7.9 -86.93 -5.17C-86.93 -5.17 -88.88 -2.83 -88.49 1.07L-81.08 4.97C-81.08 4.97 -79.13 19.01 -68.6 24.08C-63.886 26.35 -60.8 19.79 -58.85 13.94C-58.85 13.94 -61.97 -6.73 -59.63 -11.02C-59.63 -11.02 -49.1 -20.77 -49.49 -24.28C-49.49 -24.28 -49.88 -41.83 -51.05 -42.61z"/>
+ <path fill="#f2b892" d="M-51.5 -41.62C-52.48 -42.54 -59.86 -48.08 -65.56 -42C-65.56 -42 -75.44 -24.9 -74.68 -18.82L-74.68 -16.92C-74.68 -16.92 -81.9 -17.3 -83.42 -15.4C-83.42 -15.4 -84.56 -10.46 -85.7 -10.08C-85.7 -10.08 -88.36 -7.8 -86.46 -5.14C-86.46 -5.14 -88.36 -2.86 -87.98 0.94L-80.76 4.74C-80.76 4.74 -78.86 18.42 -68.6 23.36C-64.006 25.572 -61 19.18 -59.1 13.48C-59.1 13.48 -62.14 -6.66 -59.86 -10.84C-59.86 -10.84 -49.6 -20.34 -49.98 -23.76C-49.98 -23.76 -50.36 -40.86 -51.5 -41.62z"/>
+ <path fill="#f8dcc8" d="M-51.95 -40.63C-52.82 -41.61 -60.09 -46.92 -65.64 -41C-65.64 -41 -75.26 -24.35 -74.52 -18.43L-74.52 -16.58C-74.52 -16.58 -81.55 -16.95 -83.03 -15.1C-83.03 -15.1 -84.14 -10.29 -85.25 -9.92C-85.25 -9.92 -87.84 -7.7 -85.99 -5.11C-85.99 -5.11 -87.84 -2.89 -87.47 0.81L-80.44 4.51C-80.44 4.51 -78.59 17.83 -68.6 22.64C-64.127 24.794 -61.2 18.57 -59.35 13.02C-59.35 13.02 -62.31 -6.59 -60.09 -10.66C-60.09 -10.66 -50.1 -19.91 -50.47 -23.24C-50.47 -23.24 -50.84 -39.89 -51.95 -40.63z"/>
+ <path fill="#ffffff" d="M-59.6 12.46C-59.6 12.46 -62.48 -6.52 -60.32 -10.48C-60.32 -10.48 -50.6 -19.48 -50.96 -22.72C-50.96 -22.72 -51.32 -38.92 -52.4 -39.64C-53.16 -40.68 -60.32 -45.76 -65.72 -40C-65.72 -40 -75.08 -23.8 -74.36 -18.04L-74.36 -16.24C-74.36 -16.24 -81.2 -16.6 -82.64 -14.8C-82.64 -14.8 -83.72 -10.12 -84.8 -9.76C-84.8 -9.76 -87.32 -7.6 -85.52 -5.08C-85.52 -5.08 -87.32 -2.92 -86.96 0.68L-80.12 4.28C-80.12 4.28 -78.32 17.24 -68.6 21.92C-64.248 24.015 -61.4 17.86 -59.6 12.46z"/>
+ <path fill="#cccccc" d="M-62.7 6.2C-62.7 6.2 -84.3 -4 -85.2 -4.8C-85.2 -4.8 -76.1 3.4 -75.3 3.4C-74.5 3.4 -62.7 6.2 -62.7 6.2z"/>
+ <path fill="#000000" d="M-79.8 0C-79.8 0 -61.4 3.6 -61.4 8C-61.4 10.912 -61.643 24.331 -67 22.8C-75.4 20.4 -71.8 6 -79.8 0z"/>
+ <path fill="#99cc32" d="M-71.4 3.8C-71.4 3.8 -62.422 5.274 -61.4 8C-60.8 9.6 -60.137 17.908 -65.6 19C-70.152 19.911 -72.382 9.69 -71.4 3.8z"/>
+ <path fill="#000000" d="M14.595 46.349C14.098 44.607 15.409 44.738 17.2 44.2C19.2 43.6 31.4 39.8 32.2 37.2C33 34.6 46.2 39 46.2 39C48 39.8 52.4 42.4 52.4 42.4C57.2 43.6 63.8 44 63.8 44C66.2 45 69.6 47.8 69.6 47.8C84.2 58 96.601 50.8 96.601 50.8C116.601 44.2 110.601 27 110.601 27C107.601 18 110.801 14.6 110.801 14.6C111.001 10.8 118.201 17.2 118.201 17.2C120.801 21.4 121.601 26.4 121.601 26.4C129.601 37.6 126.201 19.8 126.201 19.8C126.401 18.8 123.601 15.2 123.601 14C123.601 12.8 121.801 9.4 121.801 9.4C118.801 6 121.201 -1 121.201 -1C123.001 -14.8 120.801 -13 120.801 -13C119.601 -14.8 110.401 -4.8 110.401 -4.8C108.201 -1.4 102.201 0.2 102.201 0.2C99.401 2 96.001 0.6 96.001 0.6C93.401 0.2 87.801 7.2 87.801 7.2C90.601 7 93.001 11.4 95.401 11.6C97.801 11.8 99.601 9.2 101.201 8.6C102.801 8 105.601 13.8 105.601 13.8C106.001 16.4 100.401 21.2 100.401 21.2C100.001 25.8 98.401 24.2 98.401 24.2C95.401 23.6 94.201 27.4 93.201 32C92.201 36.6 88.001 37 88.001 37C86.401 44.4 85.2 41.4 85.2 41.4C85 35.8 79 41.6 79 41.6C77.8 43.6 73.2 41.4 73.2 41.4C66.4 39.4 68.8 37.4 68.8 37.4C70.6 35.2 81.8 37.4 81.8 37.4C84 35.8 76 31.8 76 31.8C75.4 30 76.4 25.6 76.4 25.6C77.6 22.4 84.4 16.8 84.4 16.8C93.801 15.6 91.001 14 91.001 14C84.801 8.8 79 16.4 79 16.4C76.8 22.6 59.4 37.6 59.4 37.6C54.6 41 57.2 34.2 53.2 37.6C49.2 41 28.6 32 28.6 32C17.038 30.807 14.306 46.549 10.777 43.429C10.777 43.429 16.195 51.949 14.595 46.349z"/>
+ <path fill="#000000" d="M209.401 -120C209.401 -120 183.801 -112 181.001 -93.2C181.001 -93.2 178.601 -70.4 199.001 -52.8C199.001 -52.8 199.401 -46.4 201.401 -43.2C201.401 -43.2 199.801 -38.4 218.601 -46L245.801 -54.4C245.801 -54.4 252.201 -56.8 257.401 -65.6C262.601 -74.4 277.801 -93.2 274.201 -118.4C274.201 -118.4 275.401 -129.6 269.401 -130C269.401 -130 261.001 -131.6 253.801 -124C253.801 -124 247.001 -120.8 244.601 -121.2L209.401 -120z"/>
+ <path fill="#000000" d="M264.022 -120.99C264.022 -120.99 266.122 -129.92 261.282 -125.08C261.282 -125.08 254.242 -119.36 246.761 -119.36C246.761 -119.36 232.241 -117.16 227.841 -103.96C227.841 -103.96 223.881 -77.12 231.801 -71.4C231.801 -71.4 236.641 -63.92 243.681 -70.52C250.722 -77.12 266.222 -107.35 264.022 -120.99z"/>
+ <path fill="#323232" d="M263.648 -120.632C263.648 -120.632 265.738 -129.376 260.986 -124.624C260.986 -124.624 254.074 -119.008 246.729 -119.008C246.729 -119.008 232.473 -116.848 228.153 -103.888C228.153 -103.888 224.265 -77.536 232.041 -71.92C232.041 -71.92 236.793 -64.576 243.705 -71.056C250.618 -77.536 265.808 -107.24 263.648 -120.632z"/>
+ <path fill="#666666" d="M263.274 -120.274C263.274 -120.274 265.354 -128.832 260.69 -124.168C260.69 -124.168 253.906 -118.656 246.697 -118.656C246.697 -118.656 232.705 -116.536 228.465 -103.816C228.465 -103.816 224.649 -77.952 232.281 -72.44C232.281 -72.44 236.945 -65.232 243.729 -71.592C250.514 -77.952 265.394 -107.13 263.274 -120.274z"/>
+ <path fill="#999999" d="M262.9 -119.916C262.9 -119.916 264.97 -128.288 260.394 -123.712C260.394 -123.712 253.738 -118.304 246.665 -118.304C246.665 -118.304 232.937 -116.224 228.777 -103.744C228.777 -103.744 225.033 -78.368 232.521 -72.96C232.521 -72.96 237.097 -65.888 243.753 -72.128C250.41 -78.368 264.98 -107.02 262.9 -119.916z"/>
+ <path fill="#cccccc" d="M262.526 -119.558C262.526 -119.558 264.586 -127.744 260.098 -123.256C260.098 -123.256 253.569 -117.952 246.633 -117.952C246.633 -117.952 233.169 -115.912 229.089 -103.672C229.089 -103.672 225.417 -78.784 232.761 -73.48C232.761 -73.48 237.249 -66.544 243.777 -72.664C250.305 -78.784 264.566 -106.91 262.526 -119.558z"/>
+ <path fill="#ffffff" d="M262.151 -119.2C262.151 -119.2 264.201 -127.2 259.801 -122.8C259.801 -122.8 253.401 -117.6 246.601 -117.6C246.601 -117.6 233.401 -115.6 229.401 -103.6C229.401 -103.6 225.801 -79.2 233.001 -74C233.001 -74 237.401 -67.2 243.801 -73.2C250.201 -79.2 264.151 -106.8 262.151 -119.2z"/>
+ <path fill="#992600" d="M50.6 84C50.6 84 30.2 64.8 22.2 64C22.2 64 -12.2 60 -27 78C-27 78 -9.4 57.6 18.2 63.2C18.2 63.2 -3.4 58.8 -15.8 62C-15.8 62 -32.6 62 -42.2 76L-45 80.8C-45 80.8 -41 66 -22.6 60C-22.6 60 0.2 55.2 11 60C11 60 -10.6 53.2 -20.6 55.2C-20.6 55.2 -51 52.8 -63.8 79.2C-63.8 79.2 -59.8 64.8 -45 57.6C-45 57.6 -31.4 48.8 -11 51.6C-11 51.6 3.4 54.8 8.6 57.2C13.8 59.6 12.6 56.8 4.2 52C4.2 52 -1.4 42 -15.4 42.4C-15.4 42.4 -58.2 46 -68.6 58C-68.6 58 -55 46.8 -44.6 44C-44.6 44 -22.2 36 -13.8 36.8C-13.8 36.8 11 37.8 18.6 33.8C18.6 33.8 7.4 38.8 10.6 42C13.8 45.2 20.6 52.8 20.6 54C20.6 55.2 44.8 77.3 48.4 81.7L50.6 84z"/>
+ <path fill="#cccccc" d="M189 278C189 278 173.5 241.5 161 232C161 232 187 248 190.5 266C190.5 266 190.5 276 189 278z"/>
+ <path fill="#cccccc" d="M236 285.5C236 285.5 209.5 230.5 191 206.5C191 206.5 234.5 244 239.5 270.5L240 276L237 273.5C237 273.5 236.5 282.5 236 285.5z"/>
+ <path fill="#cccccc" d="M292.5 237C292.5 237 230 177.5 228.5 175C228.5 175 289 241 292 248.5C292 248.5 290 239.5 292.5 237z"/>
+ <path fill="#cccccc" d="M104 280.5C104 280.5 123.5 228.5 142.5 251C142.5 251 157.5 261 157 264C157 264 153 257.5 135 258C135 258 116 255 104 280.5z"/>
+ <path fill="#cccccc" d="M294.5 153C294.5 153 249.5 124.5 242 123C230.193 120.639 291.5 152 296.5 162.5C296.5 162.5 298.5 160 294.5 153z"/>
+ <path fill="#000000" d="M143.801 259.601C143.801 259.601 164.201 257.601 171.001 250.801L175.401 254.401L193.001 216.001L196.601 221.201C196.601 221.201 211.001 206.401 210.201 198.401C209.401 190.401 223.001 204.401 223.001 204.401C223.001 204.401 222.201 192.801 229.401 199.601C229.401 199.601 227.001 184.001 235.401 192.001C235.401 192.001 224.864 161.844 247.401 187.601C253.001 194.001 248.601 187.201 248.601 187.201C248.601 187.201 222.601 139.201 244.201 153.601C244.201 153.601 246.201 130.801 245.001 126.401C243.801 122.001 241.801 99.6 237.001 94.4C232.201 89.2 237.401 87.6 243.001 92.8C243.001 92.8 231.801 68.8 245.001 80.8C245.001 80.8 241.401 65.6 237.001 62.8C237.001 62.8 231.401 45.6 246.601 56.4C246.601 56.4 242.201 44 239.001 40.8C239.001 40.8 227.401 13.2 234.601 18L239.001 21.6C239.001 21.6 232.201 7.6 238.601 12C245.001 16.4 245.001 16 245.001 16C245.001 16 223.801 -17.2 244.201 0.4C244.201 0.4 236.042 -13.518 232.601 -20.4C232.601 -20.4 213.801 -40.8 228.201 -34.4L233.001 -32.8C233.001 -32.8 224.201 -42.8 216.201 -44.4C208.201 -46 218.601 -52.4 225.001 -50.4C231.401 -48.4 247.001 -40.8 247.001 -40.8C247.001 -40.8 259.801 -22 263.801 -21.6C263.801 -21.6 243.801 -29.2 249.801 -21.2C249.801 -21.2 264.201 -7.2 257.001 -7.6C257.001 -7.6 251.001 -0.4 255.801 8.4C255.801 8.4 237.342 -9.991 252.201 15.6L259.001 32C259.001 32 234.601 7.2 245.801 29.2C245.801 29.2 263.001 52.8 265.001 53.2C267.001 53.6 271.401 62.4 271.401 62.4L267.001 60.4L272.201 69.2C272.201 69.2 261.001 57.2 267.001 70.4L272.601 84.8C272.601 84.8 252.201 62.8 265.801 92.4C265.801 92.4 249.401 87.2 258.201 104.4C258.201 104.4 256.601 120.401 257.001 125.601C257.401 130.801 258.601 159.201 254.201 167.201C249.801 175.201 260.201 194.401 262.201 198.401C264.201 202.401 267.801 213.201 259.001 204.001C250.201 194.801 254.601 200.401 256.601 209.201C258.601 218.001 264.601 233.601 263.801 239.201C263.801 239.201 262.601 240.401 259.401 236.801C259.401 236.801 244.601 214.001 246.201 228.401C246.201 228.401 245.001 236.401 241.801 245.201C241.801 245.201 238.601 256.001 238.601 247.201C238.601 247.201 235.401 230.401 232.601 238.001C229.801 245.601 226.201 251.601 223.401 254.001C220.601 256.401 215.401 233.601 214.201 244.001C214.201 244.001 202.201 231.601 197.401 248.001L185.801 264.401C185.801 264.401 185.401 252.001 184.201 258.001C184.201 258.001 154.201 264.001 143.801 259.601z"/>
+ <path fill="#000000" d="M109.401 -97.2C109.401 -97.2 97.801 -105.2 93.801 -104.8C89.801 -104.4 121.401 -113.6 162.601 -86C162.601 -86 167.401 -83.2 171.001 -83.6C171.001 -83.6 174.201 -81.2 171.401 -77.6C171.401 -77.6 162.601 -68 173.801 -56.8C173.801 -56.8 192.201 -50 186.601 -58.8C186.601 -58.8 197.401 -54.8 199.801 -50.8C202.201 -46.8 201.001 -50.8 201.001 -50.8C201.001 -50.8 194.601 -58 188.601 -63.2C188.601 -63.2 183.401 -65.2 180.601 -73.6C177.801 -82 175.401 -92 179.801 -95.2C179.801 -95.2 175.801 -90.8 176.601 -94.8C177.401 -98.8 181.001 -102.4 182.601 -102.8C184.201 -103.2 200.601 -119 207.401 -119.4C207.401 -119.4 198.201 -118 195.201 -119C192.201 -120 165.601 -131.4 159.601 -132.6C159.601 -132.6 142.801 -139.2 154.801 -137.2C154.801 -137.2 190.601 -133.4 208.801 -120.2C208.801 -120.2 201.601 -128.6 183.201 -135.6C183.201 -135.6 161.001 -148.2 125.801 -143.2C125.801 -143.2 108.001 -140 100.201 -138.2C100.201 -138.2 97.601 -138.8 97.001 -139.2C96.401 -139.6 84.6 -148.6 57 -141.6C57 -141.6 40 -137 31.4 -132.2C31.4 -132.2 16.2 -131 12.6 -127.8C12.6 -127.8 -6 -113.2 -8 -112.4C-10 -111.6 -21.4 -104 -22.2 -103.6C-22.2 -103.6 2.4 -110.2 4.8 -112.6C7.2 -115 24.6 -117.6 27 -116.2C29.4 -114.8 37.8 -115.4 28.2 -114.8C28.2 -114.8 103.801 -100 104.601 -98C105.401 -96 109.401 -97.2 109.401 -97.2z"/>
+ <path fill="#cc7226" d="M180.801 -106.4C180.801 -106.4 170.601 -113.8 168.601 -113.8C166.601 -113.8 154.201 -124 150.001 -123.6C145.801 -123.2 133.601 -133.2 106.201 -125C106.201 -125 105.601 -127 109.201 -127.8C109.201 -127.8 115.601 -130 116.001 -130.6C116.001 -130.6 136.201 -134.8 143.401 -131.2C143.401 -131.2 152.601 -128.6 158.801 -122.4C158.801 -122.4 170.001 -119.2 173.201 -120.2C173.201 -120.2 182.001 -118 182.401 -116.2C182.401 -116.2 188.201 -113.2 186.401 -110.6C186.401 -110.6 186.801 -109 180.801 -106.4z"/>
+ <path fill="#cc7226" d="M168.33 -108.509C169.137 -107.877 170.156 -107.779 170.761 -106.97C170.995 -106.656 170.706 -106.33 170.391 -106.233C169.348 -105.916 168.292 -106.486 167.15 -105.898C166.748 -105.691 166.106 -105.873 165.553 -106.022C163.921 -106.463 162.092 -106.488 160.401 -105.8C158.416 -106.929 156.056 -106.345 153.975 -107.346C153.917 -107.373 153.695 -107.027 153.621 -107.054C150.575 -108.199 146.832 -107.916 144.401 -110.2C141.973 -110.612 139.616 -111.074 137.188 -111.754C135.37 -112.263 133.961 -113.252 132.341 -114.084C130.964 -114.792 129.507 -115.314 127.973 -115.686C126.11 -116.138 124.279 -116.026 122.386 -116.546C122.293 -116.571 122.101 -116.227 122.019 -116.254C121.695 -116.362 121.405 -116.945 121.234 -116.892C119.553 -116.37 118.065 -117.342 116.401 -117C115.223 -118.224 113.495 -117.979 111.949 -118.421C108.985 -119.269 105.831 -117.999 102.801 -119C106.914 -120.842 111.601 -119.61 115.663 -121.679C117.991 -122.865 120.653 -121.763 123.223 -122.523C123.71 -122.667 124.401 -122.869 124.801 -122.2C124.935 -122.335 125.117 -122.574 125.175 -122.546C127.625 -121.389 129.94 -120.115 132.422 -119.049C132.763 -118.903 133.295 -119.135 133.547 -118.933C135.067 -117.717 137.01 -117.82 138.401 -116.6C140.099 -117.102 141.892 -116.722 143.621 -117.346C143.698 -117.373 143.932 -117.032 143.965 -117.054C145.095 -117.802 146.25 -117.531 147.142 -117.227C147.48 -117.112 148.143 -116.865 148.448 -116.791C149.574 -116.515 150.43 -116.035 151.609 -115.852C151.723 -115.834 151.908 -116.174 151.98 -116.146C153.103 -115.708 154.145 -115.764 154.801 -114.6C154.936 -114.735 155.101 -114.973 155.183 -114.946C156.21 -114.608 156.859 -113.853 157.96 -113.612C158.445 -113.506 159.057 -112.88 159.633 -112.704C162.025 -111.973 163.868 -110.444 166.062 -109.549C166.821 -109.239 167.697 -109.005 168.33 -108.509z"/>
+ <path fill="#cc7226" d="M91.696 -122.739C89.178 -124.464 86.81 -125.57 84.368 -127.356C84.187 -127.489 83.827 -127.319 83.625 -127.441C82.618 -128.05 81.73 -128.631 80.748 -129.327C80.209 -129.709 79.388 -129.698 78.88 -129.956C76.336 -131.248 73.707 -131.806 71.2 -133C71.882 -133.638 73.004 -133.394 73.6 -134.2C73.795 -133.92 74.033 -133.636 74.386 -133.827C76.064 -134.731 77.914 -134.884 79.59 -134.794C81.294 -134.702 83.014 -134.397 84.789 -134.125C85.096 -134.078 85.295 -133.555 85.618 -133.458C87.846 -132.795 90.235 -133.32 92.354 -132.482C93.945 -131.853 95.515 -131.03 96.754 -129.755C97.006 -129.495 96.681 -129.194 96.401 -129C96.789 -129.109 97.062 -128.903 97.173 -128.59C97.257 -128.351 97.257 -128.049 97.173 -127.81C97.061 -127.498 96.782 -127.397 96.408 -127.346C95.001 -127.156 96.773 -128.536 96.073 -128.088C94.8 -127.274 95.546 -125.868 94.801 -124.6C94.521 -124.794 94.291 -125.012 94.401 -125.4C94.635 -124.878 94.033 -124.588 93.865 -124.272C93.48 -123.547 92.581 -122.132 91.696 -122.739z"/>
+ <path fill="#cc7226" d="M59.198 -115.391C56.044 -116.185 52.994 -116.07 49.978 -117.346C49.911 -117.374 49.688 -117.027 49.624 -117.054C48.258 -117.648 47.34 -118.614 46.264 -119.66C45.351 -120.548 43.693 -120.161 42.419 -120.648C42.095 -120.772 41.892 -121.284 41.591 -121.323C40.372 -121.48 39.445 -122.429 38.4 -123C40.736 -123.795 43.147 -123.764 45.609 -124.148C45.722 -124.166 45.867 -123.845 46 -123.845C46.136 -123.845 46.266 -124.066 46.4 -124.2C46.595 -123.92 46.897 -123.594 47.154 -123.848C47.702 -124.388 48.258 -124.198 48.798 -124.158C48.942 -124.148 49.067 -123.845 49.2 -123.845C49.336 -123.845 49.467 -124.156 49.6 -124.156C49.736 -124.155 49.867 -123.845 50 -123.845C50.136 -123.845 50.266 -124.066 50.4 -124.2C51.092 -123.418 51.977 -123.972 52.799 -123.793C53.837 -123.566 54.104 -122.418 55.178 -122.12C59.893 -120.816 64.03 -118.671 68.393 -116.584C68.7 -116.437 68.91 -116.189 68.8 -115.8C69.067 -115.8 69.38 -115.888 69.57 -115.756C70.628 -115.024 71.669 -114.476 72.366 -113.378C72.582 -113.039 72.253 -112.632 72.02 -112.684C67.591 -113.679 63.585 -114.287 59.198 -115.391z"/>
+ <path fill="#cc7226" d="M45.338 -71.179C43.746 -72.398 43.162 -74.429 42.034 -76.221C41.82 -76.561 42.094 -76.875 42.411 -76.964C42.971 -77.123 43.514 -76.645 43.923 -76.443C45.668 -75.581 47.203 -74.339 49.2 -74.2C51.19 -71.966 55.45 -71.581 55.457 -68.2C55.458 -67.341 54.03 -68.259 53.6 -67.4C51.149 -68.403 48.76 -68.3 46.38 -69.767C45.763 -70.148 46.093 -70.601 45.338 -71.179z"/>
+ <path fill="#cc7226" d="M17.8 -123.756C17.935 -123.755 24.966 -123.522 24.949 -123.408C24.904 -123.099 17.174 -122.05 16.81 -122.22C16.646 -122.296 9.134 -119.866 9 -120C9.268 -120.135 17.534 -123.756 17.8 -123.756z"/>
+ <path fill="#000000" d="M33.2 -114C33.2 -114 18.4 -112.2 14 -111C9.6 -109.8 -9 -102.2 -12 -100.2C-12 -100.2 -25.4 -94.8 -42.4 -74.8C-42.4 -74.8 -34.8 -78.2 -32.6 -81C-32.6 -81 -19 -93.6 -19.2 -91C-19.2 -91 -7 -99.6 -7.6 -97.4C-7.6 -97.4 16.8 -108.6 14.8 -105.4C14.8 -105.4 36.4 -110 35.4 -108C35.4 -108 54.2 -103.6 51.4 -103.4C51.4 -103.4 45.6 -102.2 52 -98.6C52 -98.6 48.6 -94.2 43.2 -98.2C37.8 -102.2 40.8 -100 35.8 -99C35.8 -99 33.2 -98.2 28.6 -102.2C28.6 -102.2 23 -106.8 14.2 -103.2C14.2 -103.2 -16.4 -90.6 -18.4 -90C-18.4 -90 -22 -87.2 -24.4 -83.6C-24.4 -83.6 -30.2 -79.2 -33.2 -77.8C-33.2 -77.8 -46 -66.2 -47.2 -64.8C-47.2 -64.8 -50.6 -59.6 -51.4 -59.2C-51.4 -59.2 -45 -63 -43 -65C-43 -65 -29 -75 -23.6 -75.8C-23.6 -75.8 -19.2 -78.8 -18.4 -80.2C-18.4 -80.2 -4 -89.4 0.2 -89.4C0.2 -89.4 9.4 -84.2 11.8 -91.2C11.8 -91.2 17.6 -93 23.2 -91.8C23.2 -91.8 26.4 -94.4 25.6 -96.6C25.6 -96.6 27.2 -98.4 28.2 -94.6C28.2 -94.6 31.6 -91 36.4 -93C36.4 -93 40.4 -93.2 38.4 -90.8C38.4 -90.8 34 -87 22.2 -86.8C22.2 -86.8 9.8 -86.2 -6.6 -78.6C-6.6 -78.6 -36.4 -68.2 -45.6 -57.8C-45.6 -57.8 -52 -49 -57.4 -47.8C-57.4 -47.8 -63.2 -47 -69.2 -39.6C-69.2 -39.6 -59.4 -45.4 -50.4 -45.4C-50.4 -45.4 -46.4 -47.8 -50.2 -44.2C-50.2 -44.2 -53.8 -36.6 -52.2 -31.2C-52.2 -31.2 -52.8 -26 -53.6 -24.4C-53.6 -24.4 -61.4 -11.6 -61.4 -9.2C-61.4 -6.8 -60.2 3 -59.8 3.6C-59.4 4.2 -60.8 2 -57 4.4C-53.2 6.8 -50.4 8.4 -49.6 11.2C-48.8 14 -51.6 5.8 -51.8 4C-52 2.2 -56.2 -5 -55.4 -7.4C-55.4 -7.4 -54.4 -6.4 -53.6 -5C-53.6 -5 -54.2 -5.6 -53.6 -9.2C-53.6 -9.2 -52.8 -14.4 -51.4 -17.6C-50 -20.8 -48 -24.6 -47.6 -25.4C-47.2 -26.2 -47.2 -32 -45.8 -29.4L-42.4 -26.8C-42.4 -26.8 -45.2 -29.4 -43 -31.6C-43 -31.6 -44 -37.2 -42.2 -39.8C-42.2 -39.8 -35.2 -48.2 -33.6 -49.2C-32 -50.2 -33.4 -49.8 -33.4 -49.8C-33.4 -49.8 -27.4 -54 -33.2 -52.4C-33.2 -52.4 -37.2 -50.8 -40.2 -50.8C-40.2 -50.8 -47.8 -48.8 -43.8 -53C-39.8 -57.2 -29.8 -62.6 -26 -62.4L-25.2 -60.8L-14 -63.2L-15.2 -62.4C-15.2 -62.4 -15.4 -62.6 -11.2 -63C-7 -63.4 -1.2 -62 0.2 -63.8C1.6 -65.6 5 -66.6 4.6 -65.2C4.2 -63.8 4 -61.8 4 -61.8C4 -61.8 9 -67.6 8.4 -65.4C7.8 -63.2 -0.4 -58 -1.8 -51.8L8.6 -60L12.2 -63C12.2 -63 15.8 -60.8 16 -62.4C16.2 -64 20.8 -69.8 22 -69.6C23.2 -69.4 25.2 -72.2 25 -69.6C24.8 -67 32.4 -61.6 32.4 -61.6C32.4 -61.6 35.6 -63.4 37 -62C38.4 -60.6 42.6 -81.8 42.6 -81.8L67.6 -92.4L111.201 -95.8L94.201 -102.6L33.2 -114z"/>
+ <path stroke="#4c0000" stroke-width="2" d="M51.4 85C51.4 85 36.4 68.2 28 65.6C28 65.6 14.6 58.8 -10 66.6"/>
+ <path stroke="#4c0000" stroke-width="2" d="M24.8 64.2C24.8 64.2 -0.4 56.2 -15.8 60.4C-15.8 60.4 -34.2 62.4 -42.6 76.2"/>
+ <path stroke="#4c0000" stroke-width="2" d="M21.2 63C21.2 63 4.2 55.8 -10.6 53.6C-10.6 53.6 -27.2 51 -43.8 58.2C-43.8 58.2 -56 64.2 -61.4 74.4"/>
+ <path stroke="#4c0000" stroke-width="2" d="M22.2 63.4C22.2 63.4 6.8 52.4 5.8 51C5.8 51 -1.2 40 -14.2 39.6C-14.2 39.6 -35.6 40.4 -52.8 48.4"/>
+ <path fill="#000000" d="M20.895 54.407C22.437 55.87 49.4 84.8 49.4 84.8C84.6 121.401 56.6 87.2 56.6 87.2C49 82.4 39.8 63.6 39.8 63.6C38.6 60.8 53.8 70.8 53.8 70.8C57.8 71.6 71.4 90.8 71.4 90.8C64.6 88.4 69.4 95.6 69.4 95.6C72.2 97.6 92.601 113.201 92.601 113.201C96.201 117.201 100.201 118.801 100.201 118.801C114.201 113.601 107.801 126.801 107.801 126.801C110.201 133.601 115.801 122.001 115.801 122.001C127.001 105.2 110.601 107.601 110.601 107.601C80.6 110.401 73.8 94.4 73.8 94.4C71.4 92 80.2 94.4 80.2 94.4C88.601 96.4 73 82 73 82C75.4 82 84.6 88.8 84.6 88.8C95.001 98 97.001 96 97.001 96C115.001 87.2 125.401 94.8 125.401 94.8C127.401 96.4 121.801 103.2 123.401 108.401C125.001 113.601 129.801 126.001 129.801 126.001C127.401 127.601 127.801 138.401 127.801 138.401C144.601 161.601 135.001 159.601 135.001 159.601C119.401 159.201 134.201 166.801 134.201 166.801C137.401 168.801 146.201 176.001 146.201 176.001C143.401 174.801 141.801 180.001 141.801 180.001C146.601 184.001 143.801 188.801 143.801 188.801C137.801 190.001 136.601 194.001 136.601 194.001C143.401 202.001 133.401 202.401 133.401 202.401C137.001 206.801 132.201 218.801 132.201 218.801C127.401 218.801 121.001 224.401 121.001 224.401C123.401 229.201 113.001 234.801 113.001 234.801C104.601 236.401 107.401 243.201 107.401 243.201C99.401 249.201 97.001 265.201 97.001 265.201C96.201 275.601 93.801 278.801 99.001 276.801C104.201 274.801 103.401 262.401 103.401 262.401C98.601 246.801 141.401 230.801 141.401 230.801C145.401 229.201 146.201 224.001 146.201 224.001C148.201 224.401 157.001 232.001 157.001 232.001C164.601 243.201 165.001 234.001 165.001 234.001C166.201 230.401 164.601 224.401 164.601 224.401C170.601 202.801 156.601 196.401 156.601 196.401C146.601 162.801 160.601 171.201 160.601 171.201C163.401 176.801 174.201 182.001 174.201 182.001L177.801 179.601C176.201 174.801 184.601 168.801 184.601 168.801C187.401 175.201 193.401 167.201 193.401 167.201C197.001 142.801 209.401 157.201 209.401 157.201C213.401 158.401 214.601 151.601 214.601 151.601C218.201 141.201 214.601 127.601 214.601 127.601C218.201 127.201 227.801 133.201 227.801 133.201C230.601 129.601 221.401 112.801 225.401 115.201C229.401 117.601 233.801 119.201 233.801 119.201C234.601 117.201 224.601 104.801 224.601 104.801C220.201 102 215.001 81.6 215.001 81.6C222.201 85.2 212.201 70 212.201 70C212.201 66.8 218.201 55.6 218.201 55.6C217.401 48.8 218.201 49.2 218.201 49.2C221.001 50.4 229.001 52 222.201 45.6C215.401 39.2 223.001 34.4 223.001 34.4C227.401 31.6 213.801 32 213.801 32C208.601 27.6 209.001 23.6 209.001 23.6C217.001 25.6 202.601 11.2 200.201 7.6C197.801 4 207.401 -1.2 207.401 -1.2C220.601 -4.8 209.001 -8 209.001 -8C189.401 -7.6 200.201 -18.4 200.201 -18.4C206.201 -18 204.601 -20.4 204.601 -20.4C199.401 -21.6 189.801 -28 189.801 -28C185.801 -31.6 189.401 -30.8 189.401 -30.8C206.201 -29.6 177.401 -40.8 177.401 -40.8C185.401 -40.8 167.401 -51.2 167.401 -51.2C165.401 -52.8 162.201 -60.4 162.201 -60.4C156.201 -65.6 151.401 -72.4 151.401 -72.4C151.001 -76.8 146.201 -81.6 146.201 -81.6C134.601 -95.2 129.001 -94.8 129.001 -94.8C114.201 -98.4 109.001 -97.6 109.001 -97.6L56.2 -93.2C29.8 -80.4 37.6 -59.4 37.6 -59.4C44 -51 53.2 -54.8 53.2 -54.8C57.8 -61 69.4 -58.8 69.4 -58.8C89.801 -55.6 87.201 -59.2 87.201 -59.2C84.801 -63.8 68.6 -70 68.4 -70.6C68.2 -71.2 59.4 -74.6 59.4 -74.6C56.4 -75.8 52 -85 52 -85C48.8 -88.4 64.6 -82.6 64.6 -82.6C63.4 -81.6 70.8 -77.6 70.8 -77.6C88.201 -78.6 98.801 -67.8 98.801 -67.8C109.601 -51.2 109.801 -59.4 109.801 -59.4C112.601 -68.8 100.801 -90 100.801 -90C101.201 -92 109.401 -85.4 109.401 -85.4C110.801 -87.4 111.601 -81.6 111.601 -81.6C111.801 -79.2 115.601 -71.2 115.601 -71.2C118.401 -58.2 122.001 -65.6 122.001 -65.6L126.601 -56.2C128.001 -53.6 122.001 -46 122.001 -46C121.801 -43.2 122.601 -43.4 117.001 -35.8C111.401 -28.2 114.801 -23.8 114.801 -23.8C113.401 -17.2 122.201 -17.6 122.201 -17.6C124.801 -15.4 128.201 -15.4 128.201 -15.4C130.001 -13.4 132.401 -14 132.401 -14C134.001 -17.8 140.201 -15.8 140.201 -15.8C141.601 -18.2 149.801 -18.6 149.801 -18.6C150.801 -21.2 151.201 -22.8 154.601 -23.4C158.001 -24 133.401 -67 133.401 -67C139.801 -67.8 131.601 -80.2 131.601 -80.2C129.401 -86.8 140.801 -72.2 143.001 -70.8C145.201 -69.4 146.201 -67.2 144.601 -67.4C143.001 -67.6 141.201 -65.4 142.601 -65.2C144.001 -65 157.001 -50 160.401 -39.8C163.801 -29.6 169.801 -25.6 176.001 -19.6C182.201 -13.6 181.401 10.6 181.401 10.6C181.001 19.4 187.001 30 187.001 30C189.001 33.8 184.801 52 184.801 52C182.801 54.2 184.201 55 184.201 55C185.201 56.2 192.001 69.4 192.001 69.4C190.201 69.2 193.801 72.8 193.801 72.8C199.001 78.8 192.601 75.8 192.601 75.8C186.601 74.2 193.601 84 193.601 84C194.801 85.8 185.801 81.2 185.801 81.2C176.601 80.6 188.201 87.8 188.201 87.8C196.801 95 185.401 90.6 185.401 90.6C180.801 88.8 184.001 95.6 184.001 95.6C187.201 97.2 204.401 104.2 204.401 104.2C204.801 108.001 201.801 113.001 201.801 113.001C202.201 117.001 200.001 120.401 200.001 120.401C198.801 128.601 198.201 129.401 198.201 129.401C194.001 129.601 186.601 143.401 186.601 143.401C184.801 146.001 174.601 158.001 174.601 158.001C172.601 165.001 154.601 157.801 154.601 157.801C148.001 161.201 150.001 157.801 150.001 157.801C149.601 155.601 154.401 149.601 154.401 149.601C161.401 147.001 158.801 136.201 158.801 136.201C162.801 134.801 151.601 132.001 151.801 130.801C152.001 129.601 157.801 128.201 157.801 128.201C165.801 126.201 161.401 123.801 161.401 123.801C160.801 119.801 163.801 114.201 163.801 114.201C175.401 113.401 163.801 97.2 163.801 97.2C153.001 89.6 152.001 83.8 152.001 83.8C164.601 75.6 156.401 63.2 156.601 59.6C156.801 56 158.001 34.4 158.001 34.4C156.001 28.2 153.001 14.6 153.001 14.6C155.201 9.4 162.601 -3.2 162.601 -3.2C165.401 -7.4 174.201 -12.2 172.001 -15.2C169.801 -18.2 162.001 -16.4 162.001 -16.4C154.201 -17.8 154.801 -12.6 154.801 -12.6C153.201 -11.6 152.401 -6.6 152.401 -6.6C151.68 1.333 142.801 7.6 142.801 7.6C131.601 13.8 140.801 17.8 140.801 17.8C146.801 24.4 137.001 24.6 137.001 24.6C126.001 22.8 134.201 33 134.201 33C145.001 45.8 142.001 48.6 142.001 48.6C131.801 49.6 144.401 58.8 144.401 58.8C144.401 58.8 143.601 56.8 143.801 58.6C144.001 60.4 147.001 64.6 147.801 66.6C148.601 68.6 144.601 68.8 144.601 68.8C145.201 78.4 129.801 74.2 129.801 74.2C129.801 74.2 129.801 74.2 128.201 74.4C126.601 74.6 115.401 73.8 109.601 71.6C103.801 69.4 97.001 69.4 97.001 69.4C97.001 69.4 93.001 71.2 85.4 71C77.8 70.8 69.8 73.6 69.8 73.6C65.4 73.2 74 68.8 74.2 69C74.4 69.2 80 63.6 72 64.2C50.203 65.835 39.4 55.6 39.4 55.6C37.4 54.2 34.8 51.4 34.8 51.4C24.8 49.4 36.2 63.8 36.2 63.8C37.4 65.2 36 66.2 36 66.2C35.2 64.6 27.4 59.2 27.4 59.2C24.589 58.227 23.226 56.893 20.895 54.407z"/>
+ <path fill="#4c0000" d="M-3 42.8C-3 42.8 8.6 48.4 11.2 51.2C13.8 54 27.8 65.4 27.8 65.4C27.8 65.4 22.4 63.4 19.8 61.6C17.2 59.8 6.4 51.6 6.4 51.6C6.4 51.6 2.6 45.6 -3 42.8z"/>
+ <path fill="#99cc32" d="M-61.009 11.603C-60.672 11.455 -61.196 8.743 -61.4 8.2C-62.422 5.474 -71.4 4 -71.4 4C-71.627 5.365 -71.682 6.961 -71.576 8.599C-71.576 8.599 -66.708 14.118 -61.009 11.603z"/>
+ <path fill="#659900" d="M-61.009 11.403C-61.458 11.561 -61.024 8.669 -61.2 8.2C-62.222 5.474 -71.4 3.9 -71.4 3.9C-71.627 5.265 -71.682 6.861 -71.576 8.499C-71.576 8.499 -67.308 13.618 -61.009 11.403z"/>
+ <path fill="#000000" d="M-65.4 11.546C-66.025 11.546 -66.531 10.406 -66.531 9C-66.531 7.595 -66.025 6.455 -65.4 6.455C-64.775 6.455 -64.268 7.595 -64.268 9C-64.268 10.406 -64.775 11.546 -65.4 11.546z"/>
+ <path fill="#000000" d="M-65.4 9z"/>
+ <path fill="#000000" d="M-111 109.601C-111 109.601 -116.6 119.601 -91.8 113.601C-91.8 113.601 -77.8 112.401 -75.4 110.001C-74.2 110.801 -65.834 113.734 -63 114.401C-56.2 116.001 -47.8 106 -47.8 106C-47.8 106 -43.2 95.5 -40.4 95.5C-37.6 95.5 -40.8 97.1 -40.8 97.1C-40.8 97.1 -47.4 107.201 -47 108.801C-47 108.801 -52.2 128.801 -68.2 129.601C-68.2 129.601 -84.35 130.551 -83 136.401C-83 136.401 -74.2 134.001 -71.8 136.401C-71.8 136.401 -61 136.001 -69 142.401L-75.8 154.001C-75.8 154.001 -75.66 157.919 -85.8 154.401C-95.6 151.001 -105.9 138.101 -105.9 138.101C-105.9 138.101 -121.85 123.551 -111 109.601z"/>
+ <path fill="#e59999" d="M-112.2 113.601C-112.2 113.601 -114.2 123.201 -77.4 112.801C-77.4 112.801 -73 112.801 -70.6 113.601C-68.2 114.401 -56.2 117.201 -54.2 116.001C-54.2 116.001 -61.4 129.601 -73 128.001C-73 128.001 -86.2 129.601 -85.8 134.401C-85.8 134.401 -81.8 141.601 -77 144.001C-77 144.001 -74.2 146.401 -74.6 149.601C-75 152.801 -77.8 154.401 -79.8 155.201C-81.8 156.001 -85 152.801 -86.6 152.801C-88.2 152.801 -96.6 146.401 -101 141.601C-105.4 136.801 -113.8 124.801 -113.4 122.001C-113 119.201 -112.2 113.601 -112.2 113.601z"/>
+ <path fill="#b26565" d="M-109 131.051C-106.4 135.001 -103.2 139.201 -101 141.601C-96.6 146.401 -88.2 152.801 -86.6 152.801C-85 152.801 -81.8 156.001 -79.8 155.201C-77.8 154.401 -75 152.801 -74.6 149.601C-74.2 146.401 -77 144.001 -77 144.001C-80.066 142.468 -82.806 138.976 -84.385 136.653C-84.385 136.653 -84.2 139.201 -89.4 138.401C-94.6 137.601 -99.8 134.801 -101.4 131.601C-103 128.401 -105.4 126.001 -103.8 129.601C-102.2 133.201 -99.8 136.801 -98.2 137.201C-96.6 137.601 -97 138.801 -99.4 138.401C-101.8 138.001 -104.6 137.601 -109 132.401z"/>
+ <path fill="#992600" d="M-111.6 110.001C-111.6 110.001 -109.8 96.4 -108.6 92.4C-108.6 92.4 -109.4 85.6 -107 81.4C-104.6 77.2 -102.6 71 -99.6 65.6C-96.6 60.2 -96.4 56.2 -92.4 54.6C-88.4 53 -82.4 44.4 -79.6 43.4C-76.8 42.4 -77 43.2 -77 43.2C-77 43.2 -70.2 28.4 -56.6 32.4C-56.6 32.4 -72.8 29.6 -57 20.2C-57 20.2 -61.8 21.3 -58.5 14.3C-56.299 9.632 -56.8 16.4 -67.8 28.2C-67.8 28.2 -72.8 36.8 -78 39.8C-83.2 42.8 -95.2 49.8 -96.4 53.6C-97.6 57.4 -100.8 63.2 -102.8 64.8C-104.8 66.4 -107.6 70.6 -108 74C-108 74 -109.2 78 -110.6 79.2C-112 80.4 -112.2 83.6 -112.2 85.6C-112.2 87.6 -114.2 90.4 -114 92.8C-114 92.8 -113.2 111.801 -113.6 113.801L-111.6 110.001z"/>
+ <path fill="#ffffff" d="M-120.2 114.601C-120.2 114.601 -122.2 113.201 -126.6 119.201C-126.6 119.201 -119.3 152.201 -119.3 153.601C-119.3 153.601 -118.2 151.501 -119.5 144.301C-120.8 137.101 -121.7 124.401 -121.7 124.401L-120.2 114.601z"/>
+ <path fill="#992600" d="M-98.6 54C-98.6 54 -116.2 57.2 -115.8 86.4L-116.6 111.201C-116.6 111.201 -117.8 85.6 -119 84C-120.2 82.4 -116.2 71.2 -119.4 77.2C-119.4 77.2 -133.4 91.2 -125.4 112.401C-125.4 112.401 -123.9 115.701 -126.9 111.101C-126.9 111.101 -131.5 98.5 -130.4 92.1C-130.4 92.1 -130.2 89.9 -128.3 87.1C-128.3 87.1 -119.7 75.4 -117 73.1C-117 73.1 -115.2 58.7 -99.8 53.5C-99.8 53.5 -94.1 51.2 -98.6 54z"/>
+ <path fill="#000000" d="M40.8 -12.2C41.46 -12.554 41.451 -13.524 42.031 -13.697C43.18 -14.041 43.344 -15.108 43.862 -15.892C44.735 -17.211 44.928 -18.744 45.51 -20.235C45.782 -20.935 45.809 -21.89 45.496 -22.55C44.322 -25.031 43.62 -27.48 42.178 -29.906C41.91 -30.356 41.648 -31.15 41.447 -31.748C40.984 -33.132 39.727 -34.123 38.867 -35.443C38.579 -35.884 39.104 -36.809 38.388 -36.893C37.491 -36.998 36.042 -37.578 35.809 -36.552C35.221 -33.965 36.232 -31.442 37.2 -29C36.418 -28.308 36.752 -27.387 36.904 -26.62C37.614 -23.014 36.416 -19.662 35.655 -16.188C35.632 -16.084 35.974 -15.886 35.946 -15.824C34.724 -13.138 33.272 -10.693 31.453 -8.312C30.695 -7.32 29.823 -6.404 29.326 -5.341C28.958 -4.554 28.55 -3.588 28.8 -2.6C25.365 0.18 23.115 4.025 20.504 7.871C20.042 8.551 20.333 9.76 20.884 10.029C21.697 10.427 22.653 9.403 23.123 8.557C23.512 7.859 23.865 7.209 24.356 6.566C24.489 6.391 24.31 5.972 24.445 5.851C27.078 3.504 28.747 0.568 31.2 -1.8C33.15 -2.129 34.687 -3.127 36.435 -4.14C36.743 -4.319 37.267 -4.07 37.557 -4.265C39.31 -5.442 39.308 -7.478 39.414 -9.388C39.464 -10.272 39.66 -11.589 40.8 -12.2z"/>
+ <path fill="#000000" d="M31.959 -16.666C32.083 -16.743 31.928 -17.166 32.037 -17.382C32.199 -17.706 32.602 -17.894 32.764 -18.218C32.873 -18.434 32.71 -18.814 32.846 -18.956C35.179 -21.403 35.436 -24.427 34.4 -27.4C35.424 -28.02 35.485 -29.282 35.06 -30.129C34.207 -31.829 34.014 -33.755 33.039 -35.298C32.237 -36.567 30.659 -37.811 29.288 -36.508C28.867 -36.108 28.546 -35.321 28.824 -34.609C28.888 -34.446 29.173 -34.3 29.146 -34.218C29.039 -33.894 28.493 -33.67 28.487 -33.398C28.457 -31.902 27.503 -30.391 28.133 -29.062C28.905 -27.433 29.724 -25.576 30.4 -23.8C29.166 -21.684 30.199 -19.235 28.446 -17.358C28.31 -17.212 28.319 -16.826 28.441 -16.624C28.733 -16.138 29.139 -15.732 29.625 -15.44C29.827 -15.319 30.175 -15.317 30.375 -15.441C30.953 -15.803 31.351 -16.29 31.959 -16.666z"/>
+ <path fill="#000000" d="M94.771 -26.977C96.16 -25.185 96.45 -22.39 94.401 -21C94.951 -17.691 98.302 -19.67 100.401 -20.2C100.292 -20.588 100.519 -20.932 100.802 -20.937C101.859 -20.952 102.539 -21.984 103.601 -21.8C104.035 -23.357 105.673 -24.059 106.317 -25.439C108.043 -29.134 107.452 -33.407 104.868 -36.653C104.666 -36.907 104.883 -37.424 104.759 -37.786C104.003 -39.997 101.935 -40.312 100.001 -41C98.824 -44.875 98.163 -48.906 96.401 -52.6C94.787 -52.85 94.089 -54.589 92.752 -55.309C91.419 -56.028 90.851 -54.449 90.892 -53.403C90.899 -53.198 91.351 -52.974 91.181 -52.609C91.105 -52.445 90.845 -52.334 90.845 -52.2C90.846 -52.065 91.067 -51.934 91.201 -51.8C90.283 -50.98 88.86 -50.503 88.565 -49.358C87.611 -45.648 90.184 -42.523 91.852 -39.322C92.443 -38.187 91.707 -36.916 90.947 -35.708C90.509 -35.013 90.617 -33.886 90.893 -33.03C91.645 -30.699 93.236 -28.96 94.771 -26.977z"/>
+ <path fill="#000000" d="M57.611 -8.591C56.124 -6.74 52.712 -4.171 55.629 -2.243C55.823 -2.114 56.193 -2.11 56.366 -2.244C58.387 -3.809 60.39 -4.712 62.826 -5.294C62.95 -5.323 63.224 -4.856 63.593 -5.017C65.206 -5.72 67.216 -5.662 68.4 -7C72.167 -6.776 75.732 -7.892 79.123 -9.2C80.284 -9.648 81.554 -10.207 82.755 -10.709C84.131 -11.285 85.335 -12.213 86.447 -13.354C86.58 -13.49 86.934 -13.4 87.201 -13.4C87.161 -14.263 88.123 -14.39 88.37 -15.012C88.462 -15.244 88.312 -15.64 88.445 -15.742C90.583 -17.372 91.503 -19.39 90.334 -21.767C90.049 -22.345 89.8 -22.963 89.234 -23.439C88.149 -24.35 87.047 -23.496 86 -23.8C85.841 -23.172 85.112 -23.344 84.726 -23.146C83.867 -22.707 82.534 -23.292 81.675 -22.854C80.313 -22.159 79.072 -21.99 77.65 -21.613C77.338 -21.531 76.56 -21.627 76.4 -21C76.266 -21.134 76.118 -21.368 76.012 -21.346C74.104 -20.95 72.844 -20.736 71.543 -19.044C71.44 -18.911 70.998 -19.09 70.839 -18.955C69.882 -18.147 69.477 -16.913 68.376 -16.241C68.175 -16.118 67.823 -16.286 67.629 -16.157C66.983 -15.726 66.616 -15.085 65.974 -14.638C65.645 -14.409 65.245 -14.734 65.277 -14.99C65.522 -16.937 66.175 -18.724 65.6 -20.6C67.677 -23.12 70.194 -25.069 72 -27.8C72.015 -29.966 72.707 -32.112 72.594 -34.189C72.584 -34.382 72.296 -35.115 72.17 -35.462C71.858 -36.316 72.764 -37.382 71.92 -38.106C70.516 -39.309 69.224 -38.433 68.4 -37C66.562 -36.61 64.496 -35.917 62.918 -37.151C61.911 -37.938 61.333 -38.844 60.534 -39.9C59.549 -41.202 59.884 -42.638 59.954 -44.202C59.96 -44.33 59.645 -44.466 59.645 -44.6C59.646 -44.735 59.866 -44.866 60 -45C59.294 -45.626 59.019 -46.684 58 -47C58.305 -48.092 57.629 -48.976 56.758 -49.278C54.763 -49.969 53.086 -48.057 51.194 -47.984C50.68 -47.965 50.213 -49.003 49.564 -49.328C49.132 -49.544 48.428 -49.577 48.066 -49.311C47.378 -48.807 46.789 -48.693 46.031 -48.488C44.414 -48.052 43.136 -46.958 41.656 -46.103C40.171 -45.246 39.216 -43.809 38.136 -42.489C37.195 -41.337 37.059 -38.923 38.479 -38.423C40.322 -37.773 41.626 -40.476 43.592 -40.15C43.904 -40.099 44.11 -39.788 44 -39.4C44.389 -39.291 44.607 -39.52 44.8 -39.8C45.658 -38.781 46.822 -38.444 47.76 -37.571C48.73 -36.667 50.476 -37.085 51.491 -36.088C53.02 -34.586 52.461 -31.905 54.4 -30.6C53.814 -29.287 53.207 -28.01 52.872 -26.583C52.59 -25.377 53.584 -24.18 54.795 -24.271C56.053 -24.365 56.315 -25.124 56.8 -26.2C57.067 -25.933 57.536 -25.636 57.495 -25.42C57.038 -23.033 56.011 -21.04 55.553 -18.609C55.494 -18.292 55.189 -18.09 54.8 -18.2C54.332 -14.051 50.28 -11.657 47.735 -8.492C47.332 -7.99 47.328 -6.741 47.737 -6.338C49.14 -4.951 51.1 -6.497 52.8 -7C53.013 -8.206 53.872 -9.148 55.204 -9.092C55.46 -9.082 55.695 -9.624 56.019 -9.754C56.367 -9.892 56.869 -9.668 57.155 -9.866C58.884 -11.061 60.292 -12.167 62.03 -13.356C62.222 -13.487 62.566 -13.328 62.782 -13.436C63.107 -13.598 63.294 -13.985 63.617 -14.17C63.965 -14.37 64.207 -14.08 64.4 -13.8C63.754 -13.451 63.75 -12.494 63.168 -12.292C62.393 -12.024 61.832 -11.511 61.158 -11.064C60.866 -10.871 60.207 -11.119 60.103 -10.94C59.505 -9.912 58.321 -9.474 57.611 -8.591z"/>
+ <path fill="#000000" d="M2.2 -58C2.2 -58 -7.038 -60.872 -18.2 -35.2C-18.2 -35.2 -20.6 -30 -23 -28C-25.4 -26 -36.6 -22.4 -38.6 -18.4L-49 -2.4C-49 -2.4 -34.2 -18.4 -31 -20.8C-31 -20.8 -23 -29.2 -26.2 -22.4C-26.2 -22.4 -40.2 -11.6 -39 -2.4C-39 -2.4 -44.6 12 -45.4 14C-45.4 14 -29.4 -18 -27 -19.2C-24.6 -20.4 -23.4 -20.4 -24.6 -16.8C-25.8 -13.2 -26.2 3.2 -29 5.2C-29 5.2 -21 -15.2 -21.8 -18.4C-21.8 -18.4 -18.6 -22 -16.2 -16.8L-17.4 -0.8L-13 11.2C-13 11.2 -15.4 0 -13.8 -15.6C-13.8 -15.6 -15.8 -26 -11.8 -20.4C-7.8 -14.8 1.8 -8.8 1.8 -4C1.8 -4 -3.4 -21.6 -12.6 -26.4L-16.6 -20.4L-17.8 -22.4C-17.8 -22.4 -21.4 -23.2 -17 -30C-12.6 -36.8 -13 -37.6 -13 -37.6C-13 -37.6 -6.6 -30.4 -5 -30.4C-5 -30.4 8.2 -38 9.4 -13.6C9.4 -13.6 16.2 -28 7 -34.8C7 -34.8 -7.8 -36.8 -6.6 -42L0.6 -54.4C4.2 -59.6 2.6 -56.8 2.6 -56.8z"/>
+ <path fill="#000000" d="M-17.8 -41.6C-17.8 -41.6 -30.6 -41.6 -33.8 -36.4L-41 -26.8C-41 -26.8 -23.8 -36.8 -19.8 -38C-15.8 -39.2 -17.8 -41.6 -17.8 -41.6z"/>
+ <path fill="#000000" d="M-57.8 -35.2C-57.8 -35.2 -59.8 -34 -60.2 -31.2C-60.6 -28.4 -63 -28 -62.2 -25.2C-61.4 -22.4 -59.4 -20 -59.4 -24C-59.4 -28 -57.8 -30 -57 -31.2C-56.2 -32.4 -54.6 -36.8 -57.8 -35.2z"/>
+ <path fill="#000000" d="M-66.6 26C-66.6 26 -75 22 -78.2 18.4C-81.4 14.8 -80.948 19.966 -85.8 19.6C-91.647 19.159 -90.6 3.2 -90.6 3.2L-94.6 10.8C-94.6 10.8 -95.8 25.2 -87.8 22.8C-83.893 21.628 -82.6 23.2 -84.2 24C-85.8 24.8 -78.6 25.2 -81.4 26.8C-84.2 28.4 -69.8 23.2 -72.2 33.6L-66.6 26z"/>
+ <path fill="#000000" d="M-79.2 40.4C-79.2 40.4 -94.6 44.8 -98.2 35.2C-98.2 35.2 -103 37.6 -100.8 40.6C-98.6 43.6 -97.4 44 -97.4 44C-97.4 44 -92 45.2 -92.6 46C-93.2 46.8 -95.6 50.2 -95.6 50.2C-95.6 50.2 -85.4 44.2 -79.2 40.4z"/>
+ <path fill="#ffffff" d="M149.201 118.601C148.774 120.735 147.103 121.536 145.201 122.201C143.284 121.243 140.686 118.137 138.801 120.201C138.327 119.721 137.548 119.661 137.204 118.999C136.739 118.101 137.011 117.055 136.669 116.257C136.124 114.985 135.415 113.619 135.601 112.201C137.407 111.489 138.002 109.583 137.528 107.82C137.459 107.563 137.03 107.366 137.23 107.017C137.416 106.694 137.734 106.467 138.001 106.2C137.866 106.335 137.721 106.568 137.61 106.548C137 106.442 137.124 105.805 137.254 105.418C137.839 103.672 139.853 103.408 141.201 104.6C141.457 104.035 141.966 104.229 142.401 104.2C142.351 103.621 142.759 103.094 142.957 102.674C143.475 101.576 145.104 102.682 145.901 102.07C146.977 101.245 148.04 100.546 149.118 101.149C150.927 102.162 152.636 103.374 153.835 105.115C154.41 105.949 154.65 107.23 154.592 108.188C154.554 108.835 153.173 108.483 152.83 109.412C152.185 111.16 154.016 111.679 154.772 113.017C154.97 113.366 154.706 113.67 154.391 113.768C153.98 113.896 153.196 113.707 153.334 114.16C154.306 117.353 151.55 118.031 149.201 118.601z"/>
+ <path fill="#ffffff" d="M139.6 138.201C139.593 136.463 137.992 134.707 139.201 133.001C139.336 133.135 139.467 133.356 139.601 133.356C139.736 133.356 139.867 133.135 140.001 133.001C141.496 135.217 145.148 136.145 145.006 138.991C144.984 139.438 143.897 140.356 144.801 141.001C142.988 142.349 142.933 144.719 142.001 146.601C140.763 146.315 139.551 145.952 138.401 145.401C138.753 143.915 138.636 142.231 139.456 140.911C139.89 140.213 139.603 139.134 139.6 138.201z"/>
+ <path fill="#cccccc" d="M-26.6 129.201C-26.6 129.201 -43.458 139.337 -29.4 124.001C-20.6 114.401 -10.6 108.801 -10.6 108.801C-10.6 108.801 -0.2 104.4 3.4 103.2C7 102 22.2 96.8 25.4 96.4C28.6 96 38.2 92 45 96C51.8 100 59.8 104.4 59.8 104.4C59.8 104.4 43.4 96 39.8 98.4C36.2 100.8 29 100.4 23 103.6C23 103.6 8.2 108.001 5 110.001C1.8 112.001 -8.6 123.601 -10.2 122.801C-11.8 122.001 -9.8 121.601 -8.6 118.801C-7.4 116.001 -9.4 114.401 -17.4 120.801C-25.4 127.201 -26.6 129.201 -26.6 129.201z"/>
+ <path fill="#000000" d="M-19.195 123.234C-19.195 123.234 -17.785 110.194 -9.307 111.859C-9.307 111.859 -1.081 107.689 1.641 105.721C1.641 105.721 9.78 104.019 11.09 103.402C29.569 94.702 44.288 99.221 44.835 98.101C45.381 96.982 65.006 104.099 68.615 108.185C69.006 108.628 58.384 102.588 48.686 100.697C40.413 99.083 18.811 100.944 7.905 106.48C4.932 107.989 -4.013 113.773 -6.544 113.662C-9.075 113.55 -19.195 123.234 -19.195 123.234z"/>
+ <path fill="#cccccc" d="M-23 148.801C-23 148.801 -38.2 146.401 -21.4 144.801C-21.4 144.801 -3.4 142.801 0.6 137.601C0.6 137.601 14.2 128.401 17 128.001C19.8 127.601 49.8 120.401 50.2 118.001C50.6 115.601 56.2 115.601 57.8 116.401C59.4 117.201 58.6 118.401 55.8 119.201C53 120.001 21.8 136.401 15.4 137.601C9 138.801 -2.6 146.401 -7.4 147.601C-12.2 148.801 -23 148.801 -23 148.801z"/>
+ <path fill="#000000" d="M-3.48 141.403C-3.48 141.403 -12.062 140.574 -3.461 139.755C-3.461 139.755 5.355 136.331 7.403 133.668C7.403 133.668 14.367 128.957 15.8 128.753C17.234 128.548 31.194 124.861 31.399 123.633C31.604 122.404 65.67 109.823 70.09 113.013C73.001 115.114 63.1 113.437 53.466 117.847C52.111 118.467 18.258 133.054 14.981 133.668C11.704 134.283 5.765 138.174 3.307 138.788C0.85 139.403 -3.48 141.403 -3.48 141.403z"/>
+ <path fill="#000000" d="M-11.4 143.601C-11.4 143.601 -6.2 143.201 -7.4 144.801C-8.6 146.401 -11 145.601 -11 145.601L-11.4 143.601z"/>
+ <path fill="#000000" d="M-18.6 145.201C-18.6 145.201 -13.4 144.801 -14.6 146.401C-15.8 148.001 -18.2 147.201 -18.2 147.201L-18.6 145.201z"/>
+ <path fill="#000000" d="M-29 146.801C-29 146.801 -23.8 146.401 -25 148.001C-26.2 149.601 -28.6 148.801 -28.6 148.801L-29 146.801z"/>
+ <path fill="#000000" d="M-36.6 147.601C-36.6 147.601 -31.4 147.201 -32.6 148.801C-33.8 150.401 -36.2 149.601 -36.2 149.601L-36.6 147.601z"/>
+ <path fill="#000000" d="M1.8 108.001C1.8 108.001 6.2 108.001 5 109.601C3.8 111.201 0.6 110.801 0.6 110.801L1.8 108.001z"/>
+ <path fill="#000000" d="M-8.2 113.601C-8.2 113.601 -1.694 111.46 -4.2 114.801C-5.4 116.401 -7.8 115.601 -7.8 115.601L-8.2 113.601z"/>
+ <path fill="#000000" d="M-19.4 118.401C-19.4 118.401 -14.2 118.001 -15.4 119.601C-16.6 121.201 -19 120.401 -19 120.401L-19.4 118.401z"/>
+ <path fill="#000000" d="M-27 124.401C-27 124.401 -21.8 124.001 -23 125.601C-24.2 127.201 -26.6 126.401 -26.6 126.401L-27 124.401z"/>
+ <path fill="#000000" d="M-33.8 129.201C-33.8 129.201 -28.6 128.801 -29.8 130.401C-31 132.001 -33.4 131.201 -33.4 131.201L-33.8 129.201z"/>
+ <path fill="#000000" d="M5.282 135.598C5.282 135.598 12.203 135.066 10.606 137.195C9.009 139.325 5.814 138.26 5.814 138.26L5.282 135.598z"/>
+ <path fill="#000000" d="M15.682 130.798C15.682 130.798 22.603 130.266 21.006 132.395C19.409 134.525 16.214 133.46 16.214 133.46L15.682 130.798z"/>
+ <path fill="#000000" d="M26.482 126.398C26.482 126.398 33.403 125.866 31.806 127.995C30.209 130.125 27.014 129.06 27.014 129.06L26.482 126.398z"/>
+ <path fill="#000000" d="M36.882 121.598C36.882 121.598 43.803 121.066 42.206 123.195C40.609 125.325 37.414 124.26 37.414 124.26L36.882 121.598z"/>
+ <path fill="#000000" d="M9.282 103.598C9.282 103.598 16.203 103.066 14.606 105.195C13.009 107.325 9.014 107.06 9.014 107.06L9.282 103.598z"/>
+ <path fill="#000000" d="M19.282 100.398C19.282 100.398 26.203 99.866 24.606 101.995C23.009 104.125 18.614 103.86 18.614 103.86L19.282 100.398z"/>
+ <path fill="#000000" d="M-3.4 140.401C-3.4 140.401 1.8 140.001 0.6 141.601C-0.6 143.201 -3 142.401 -3 142.401L-3.4 140.401z"/>
+ <path fill="#992600" d="M-76.6 41.2C-76.6 41.2 -81 50 -81.4 53.2C-81.4 53.2 -80.6 44.4 -79.4 42.4C-78.2 40.4 -76.6 41.2 -76.6 41.2z"/>
+ <path fill="#992600" d="M-95 55.2C-95 55.2 -98.2 69.6 -97.8 72.4C-97.8 72.4 -99 60.8 -98.6 59.6C-98.2 58.4 -95 55.2 -95 55.2z"/>
+ <path fill="#cccccc" d="M-74.2 -19.4L-74.4 -16.2L-76.6 -16C-76.6 -16 -62.4 -3.4 -61.8 4.2C-61.8 4.2 -61 -4 -74.2 -19.4z"/>
+ <path fill="#000000" d="M-70.216 -18.135C-70.647 -18.551 -70.428 -19.296 -70.836 -19.556C-71.645 -20.072 -69.538 -20.129 -69.766 -20.845C-70.149 -22.051 -69.962 -22.072 -70.084 -23.348C-70.141 -23.946 -69.553 -25.486 -69.168 -25.926C-67.722 -27.578 -69.046 -30.51 -67.406 -32.061C-67.102 -32.35 -66.726 -32.902 -66.441 -33.32C-65.782 -34.283 -64.598 -34.771 -63.648 -35.599C-63.33 -35.875 -63.531 -36.702 -62.962 -36.61C-62.248 -36.495 -61.007 -36.625 -61.052 -35.784C-61.165 -33.664 -62.494 -31.944 -63.774 -30.276C-63.323 -29.572 -63.781 -28.937 -64.065 -28.38C-65.4 -25.76 -65.211 -22.919 -65.385 -20.079C-65.39 -19.994 -65.697 -19.916 -65.689 -19.863C-65.336 -17.528 -64.752 -15.329 -63.873 -13.1C-63.507 -12.17 -63.036 -11.275 -62.886 -10.348C-62.775 -9.662 -62.672 -8.829 -63.08 -8.124C-61.045 -5.234 -62.354 -2.583 -61.185 0.948C-60.978 1.573 -59.286 3.487 -59.749 3.326C-62.262 2.455 -62.374 2.057 -62.551 1.304C-62.697 0.681 -63.027 -0.696 -63.264 -1.298C-63.328 -1.462 -63.499 -3.346 -63.577 -3.468C-65.09 -5.85 -63.732 -5.674 -65.102 -8.032C-66.53 -8.712 -67.496 -9.816 -68.619 -10.978C-68.817 -11.182 -67.674 -11.906 -67.855 -12.119C-68.947 -13.408 -70.1 -14.175 -69.764 -15.668C-69.609 -16.358 -69.472 -17.415 -70.216 -18.135z"/>
+ <path fill="#000000" d="M-73.8 -16.4C-73.8 -16.4 -73.4 -9.6 -71 -8C-68.6 -6.4 -69.8 -7.2 -73 -8.4C-76.2 -9.6 -75 -10.4 -75 -10.4C-75 -10.4 -77.8 -10 -75.4 -8C-73 -6 -69.4 -3.6 -71 -3.6C-72.6 -3.6 -80.2 -7.6 -80.2 -10.4C-80.2 -13.2 -81.2 -17.3 -81.2 -17.3C-81.2 -17.3 -80.1 -18.1 -75.3 -18C-75.3 -18 -73.9 -17.3 -73.8 -16.4z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M-74.6 2.2C-74.6 2.2 -83.12 -0.591 -101.6 2.8C-101.6 2.8 -92.569 0.722 -73.8 3C-63.5 4.25 -74.6 2.2 -74.6 2.2z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M-72.502 2.129C-72.502 2.129 -80.748 -1.389 -99.453 0.392C-99.453 0.392 -90.275 -0.897 -71.774 2.995C-61.62 5.131 -72.502 2.129 -72.502 2.129z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M-70.714 2.222C-70.714 2.222 -78.676 -1.899 -97.461 -1.514C-97.461 -1.514 -88.213 -2.118 -70.052 3.14C-60.086 6.025 -70.714 2.222 -70.714 2.222z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M-69.444 2.445C-69.444 2.445 -76.268 -1.862 -93.142 -2.96C-93.142 -2.96 -84.803 -2.79 -68.922 3.319C-60.206 6.672 -69.444 2.445 -69.444 2.445z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M45.84 12.961C45.84 12.961 44.91 13.605 45.124 12.424C45.339 11.243 73.547 -1.927 77.161 -1.677C77.161 -1.677 46.913 11.529 45.84 12.961z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M42.446 13.6C42.446 13.6 41.57 14.315 41.691 13.121C41.812 11.927 68.899 -3.418 72.521 -3.452C72.521 -3.452 43.404 12.089 42.446 13.6z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M39.16 14.975C39.16 14.975 38.332 15.747 38.374 14.547C38.416 13.348 58.233 -2.149 68.045 -4.023C68.045 -4.023 50.015 4.104 39.16 14.975z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M36.284 16.838C36.284 16.838 35.539 17.532 35.577 16.453C35.615 15.373 53.449 1.426 62.28 -0.26C62.28 -0.26 46.054 7.054 36.284 16.838z"/>
+ <path fill="#cccccc" d="M4.6 164.801C4.6 164.801 -10.6 162.401 6.2 160.801C6.2 160.801 24.2 158.801 28.2 153.601C28.2 153.601 41.8 144.401 44.6 144.001C47.4 143.601 63.8 140.001 64.2 137.601C64.6 135.201 70.6 132.801 72.2 133.601C73.8 134.401 73.8 143.601 71 144.401C68.2 145.201 49.4 152.401 43 153.601C36.6 154.801 25 162.401 20.2 163.601C15.4 164.801 4.6 164.801 4.6 164.801z"/>
+ <path fill="#000000" d="M77.6 127.401C77.6 127.401 74.6 129.001 73.4 131.601C73.4 131.601 67 142.201 52.8 145.401C52.8 145.401 29.8 154.401 22 156.401C22 156.401 8.6 161.401 1.2 160.601C1.2 160.601 -5.8 160.801 0.4 162.401C0.4 162.401 20.6 160.401 24 158.601C24 158.601 39.6 153.401 42.6 150.801C45.6 148.201 63.8 143.201 66 141.201C68.2 139.201 78 130.801 77.6 127.401z"/>
+ <path fill="#000000" d="M18.882 158.911C18.882 158.911 24.111 158.685 22.958 160.234C21.805 161.784 19.357 160.91 19.357 160.91L18.882 158.911z"/>
+ <path fill="#000000" d="M11.68 160.263C11.68 160.263 16.908 160.037 15.756 161.586C14.603 163.136 12.155 162.263 12.155 162.263L11.68 160.263z"/>
+ <path fill="#000000" d="M1.251 161.511C1.251 161.511 6.48 161.284 5.327 162.834C4.174 164.383 1.726 163.51 1.726 163.51L1.251 161.511z"/>
+ <path fill="#000000" d="M-6.383 162.055C-6.383 162.055 -1.154 161.829 -2.307 163.378C-3.46 164.928 -5.908 164.054 -5.908 164.054L-6.383 162.055z"/>
+ <path fill="#000000" d="M35.415 151.513C35.415 151.513 42.375 151.212 40.84 153.274C39.306 155.336 36.047 154.174 36.047 154.174L35.415 151.513z"/>
+ <path fill="#000000" d="M45.73 147.088C45.73 147.088 51.689 143.787 51.155 148.849C50.885 151.405 46.362 149.749 46.362 149.749L45.73 147.088z"/>
+ <path fill="#000000" d="M54.862 144.274C54.862 144.274 62.021 140.573 60.287 146.035C59.509 148.485 55.493 146.935 55.493 146.935L54.862 144.274z"/>
+ <path fill="#000000" d="M64.376 139.449C64.376 139.449 68.735 134.548 69.801 141.21C70.207 143.748 65.008 142.11 65.008 142.11L64.376 139.449z"/>
+ <path fill="#000000" d="M26.834 155.997C26.834 155.997 32.062 155.77 30.91 157.32C29.757 158.869 27.308 157.996 27.308 157.996L26.834 155.997z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M62.434 34.603C62.434 34.603 61.708 35.268 61.707 34.197C61.707 33.127 79.191 19.863 88.034 18.479C88.034 18.479 71.935 25.208 62.434 34.603z"/>
+ <path fill="#000000" d="M65.4 98.4C65.4 98.4 87.401 120.801 96.601 124.401C96.601 124.401 105.801 135.601 101.801 161.601C101.801 161.601 98.601 169.201 95.401 148.401C95.401 148.401 98.601 123.201 87.401 139.201C87.401 139.201 79 129.301 85.4 129.601C85.4 129.601 88.601 131.601 89.001 130.001C89.401 128.401 81.4 114.801 64.2 100.4C47 86 65.4 98.4 65.4 98.4z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M7 137.201C7 137.201 6.8 135.401 8.6 136.201C10.4 137.001 104.601 143.201 136.201 167.201C136.201 167.201 91.001 144.001 7 137.201z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M17.4 132.801C17.4 132.801 17.2 131.001 19 131.801C20.8 132.601 157.401 131.601 181.001 164.001C181.001 164.001 159.001 138.801 17.4 132.801z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M29 128.801C29 128.801 28.8 127.001 30.6 127.801C32.4 128.601 205.801 115.601 229.401 148.001C229.401 148.001 219.801 122.401 29 128.801z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M39 124.001C39 124.001 38.8 122.201 40.6 123.001C42.4 123.801 164.601 85.2 188.201 117.601C188.201 117.601 174.801 93 39 124.001z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M-19 146.801C-19 146.801 -19.2 145.001 -17.4 145.801C-15.6 146.601 2.2 148.801 4.2 187.601C4.2 187.601 -3 145.601 -19 146.801z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M-27.8 148.401C-27.8 148.401 -28 146.601 -26.2 147.401C-24.4 148.201 -10.2 143.601 -13 182.401C-13 182.401 -11.8 147.201 -27.8 148.401z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M-35.8 148.801C-35.8 148.801 -36 147.001 -34.2 147.801C-32.4 148.601 -17 149.201 -29.4 171.601C-29.4 171.601 -19.8 147.601 -35.8 148.801z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M11.526 104.465C11.526 104.465 11.082 106.464 12.631 105.247C28.699 92.622 61.141 33.72 116.826 28.086C116.826 28.086 78.518 15.976 11.526 104.465z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M22.726 102.665C22.726 102.665 21.363 101.472 23.231 100.847C25.099 100.222 137.541 27.72 176.826 35.686C176.826 35.686 149.719 28.176 22.726 102.665z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M1.885 108.767C1.885 108.767 1.376 110.366 3.087 109.39C12.062 104.27 15.677 47.059 59.254 45.804C59.254 45.804 26.843 31.09 1.885 108.767z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M-18.038 119.793C-18.038 119.793 -19.115 121.079 -17.162 120.825C-6.916 119.493 14.489 78.222 58.928 83.301C58.928 83.301 26.962 68.955 -18.038 119.793z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M-6.8 113.667C-6.8 113.667 -7.611 115.136 -5.742 114.511C4.057 111.237 17.141 66.625 61.729 63.078C61.729 63.078 27.603 55.135 -6.8 113.667z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M-25.078 124.912C-25.078 124.912 -25.951 125.954 -24.369 125.748C-16.07 124.669 1.268 91.24 37.264 95.354C37.264 95.354 11.371 83.734 -25.078 124.912z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M-32.677 130.821C-32.677 130.821 -33.682 131.866 -32.091 131.748C-27.923 131.439 2.715 98.36 21.183 113.862C21.183 113.862 9.168 95.139 -32.677 130.821z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M36.855 98.898C36.855 98.898 35.654 97.543 37.586 97.158C39.518 96.774 160.221 39.061 198.184 51.927C198.184 51.927 172.243 41.053 36.855 98.898z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M3.4 163.201C3.4 163.201 3.2 161.401 5 162.201C6.8 163.001 22.2 163.601 9.8 186.001C9.8 186.001 19.4 162.001 3.4 163.201z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M13.8 161.601C13.8 161.601 13.6 159.801 15.4 160.601C17.2 161.401 35 163.601 37 202.401C37 202.401 29.8 160.401 13.8 161.601z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M20.6 160.001C20.6 160.001 20.4 158.201 22.2 159.001C24 159.801 48.6 163.201 72.2 195.601C72.2 195.601 36.6 158.801 20.6 160.001z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M28.225 157.972C28.225 157.972 27.788 156.214 29.678 156.768C31.568 157.322 52.002 155.423 90.099 189.599C90.099 189.599 43.924 154.656 28.225 157.972z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M38.625 153.572C38.625 153.572 38.188 151.814 40.078 152.368C41.968 152.922 76.802 157.423 128.499 192.399C128.499 192.399 54.324 150.256 38.625 153.572z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M-1.8 142.001C-1.8 142.001 -2 140.201 -0.2 141.001C1.6 141.801 55 144.401 85.4 171.201C85.4 171.201 50.499 146.426 -1.8 142.001z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M-11.8 146.001C-11.8 146.001 -12 144.201 -10.2 145.001C-8.4 145.801 16.2 149.201 39.8 181.601C39.8 181.601 4.2 144.801 -11.8 146.001z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M49.503 148.962C49.503 148.962 48.938 147.241 50.864 147.655C52.79 148.068 87.86 150.004 141.981 181.098C141.981 181.098 64.317 146.704 49.503 148.962z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M57.903 146.562C57.903 146.562 57.338 144.841 59.264 145.255C61.19 145.668 96.26 147.604 150.381 178.698C150.381 178.698 73.317 143.904 57.903 146.562z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M67.503 141.562C67.503 141.562 66.938 139.841 68.864 140.255C70.79 140.668 113.86 145.004 203.582 179.298C203.582 179.298 82.917 138.904 67.503 141.562z"/>
+ <path fill="#000000" d="M-43.8 148.401C-43.8 148.401 -38.6 148.001 -39.8 149.601C-41 151.201 -43.4 150.401 -43.4 150.401L-43.8 148.401z"/>
+ <path fill="#000000" d="M-13 162.401C-13 162.401 -7.8 162.001 -9 163.601C-10.2 165.201 -12.6 164.401 -12.6 164.401L-13 162.401z"/>
+ <path fill="#000000" d="M-21.8 162.001C-21.8 162.001 -16.6 161.601 -17.8 163.201C-19 164.801 -21.4 164.001 -21.4 164.001L-21.8 162.001z"/>
+ <path fill="#000000" d="M-117.169 150.182C-117.169 150.182 -112.124 151.505 -113.782 152.624C-115.439 153.744 -117.446 152.202 -117.446 152.202L-117.169 150.182z"/>
+ <path fill="#000000" d="M-115.169 140.582C-115.169 140.582 -110.124 141.905 -111.782 143.024C-113.439 144.144 -115.446 142.602 -115.446 142.602L-115.169 140.582z"/>
+ <path fill="#000000" d="M-122.369 136.182C-122.369 136.182 -117.324 137.505 -118.982 138.624C-120.639 139.744 -122.646 138.202 -122.646 138.202L-122.369 136.182z"/>
+ <path fill="#cccccc" d="M-42.6 211.201C-42.6 211.201 -44.2 211.201 -48.2 213.201C-50.2 213.201 -61.4 216.801 -67 226.801C-67 226.801 -54.6 217.201 -42.6 211.201z"/>
+ <path fill="#cccccc" d="M45.116 303.847C45.257 304.105 45.312 304.525 45.604 304.542C46.262 304.582 47.495 304.883 47.37 304.247C46.522 299.941 45.648 295.004 41.515 293.197C40.876 292.918 39.434 293.331 39.36 294.215C39.233 295.739 39.116 297.088 39.425 298.554C39.725 299.975 41.883 299.985 42.8 298.601C43.736 300.273 44.168 302.116 45.116 303.847z"/>
+ <path fill="#cccccc" d="M34.038 308.581C34.786 309.994 34.659 311.853 36.074 312.416C36.814 312.71 38.664 311.735 38.246 310.661C37.444 308.6 37.056 306.361 35.667 304.55C35.467 304.288 35.707 303.755 35.547 303.427C34.953 302.207 33.808 301.472 32.4 301.801C31.285 304.004 32.433 306.133 33.955 307.842C34.091 307.994 33.925 308.37 34.038 308.581z"/>
+ <path fill="#cccccc" d="M-5.564 303.391C-5.672 303.014 -5.71 302.551 -5.545 302.23C-5.014 301.197 -4.221 300.075 -4.558 299.053C-4.906 297.997 -6.022 298.179 -6.672 298.748C-7.807 299.742 -7.856 301.568 -8.547 302.927C-8.743 303.313 -8.692 303.886 -9.133 304.277C-9.607 304.698 -10.047 306.222 -9.951 306.793C-9.898 307.106 -10.081 317.014 -9.859 316.751C-9.24 316.018 -6.19 306.284 -6.121 305.392C-6.064 304.661 -5.332 304.196 -5.564 303.391z"/>
+ <path fill="#cccccc" d="M-31.202 296.599C-28.568 294.1 -25.778 291.139 -26.22 287.427C-26.336 286.451 -28.111 286.978 -28.298 287.824C-29.1 291.449 -31.139 294.11 -33.707 296.502C-35.903 298.549 -37.765 304.893 -38 305.401C-34.303 300.145 -32.046 297.399 -31.202 296.599z"/>
+ <path fill="#cccccc" d="M-44.776 290.635C-44.253 290.265 -44.555 289.774 -44.338 289.442C-43.385 287.984 -42.084 286.738 -42.066 285C-42.063 284.723 -42.441 284.414 -42.776 284.638C-43.053 284.822 -43.395 284.952 -43.503 285.082C-45.533 287.531 -46.933 290.202 -48.376 293.014C-48.559 293.371 -49.703 297.862 -49.39 297.973C-49.151 298.058 -47.431 293.877 -47.221 293.763C-45.958 293.077 -45.946 291.462 -44.776 290.635z"/>
+ <path fill="#cccccc" d="M-28.043 310.179C-27.599 309.31 -26.023 308.108 -26.136 307.219C-26.254 306.291 -25.786 304.848 -26.698 305.536C-27.955 306.484 -31.404 307.833 -31.674 313.641C-31.7 314.212 -28.726 311.519 -28.043 310.179z"/>
+ <path fill="#cccccc" d="M-13.6 293.001C-13.2 292.333 -12.492 292.806 -12.033 292.543C-11.385 292.171 -10.774 291.613 -10.482 290.964C-9.512 288.815 -7.743 286.995 -7.6 284.601C-9.091 283.196 -9.77 285.236 -10.4 286.201C-11.723 284.554 -12.722 286.428 -14.022 286.947C-14.092 286.975 -14.305 286.628 -14.38 286.655C-15.557 287.095 -16.237 288.176 -17.235 288.957C-17.406 289.091 -17.811 288.911 -17.958 289.047C-18.61 289.65 -19.583 289.975 -19.863 290.657C-20.973 293.364 -24.113 295.459 -26 303.001C-25.619 303.91 -21.488 296.359 -21.001 295.661C-20.165 294.465 -20.047 297.322 -18.771 296.656C-18.72 296.629 -18.534 296.867 -18.4 297.001C-18.206 296.721 -17.988 296.492 -17.6 296.601C-17.6 296.201 -17.734 295.645 -17.533 295.486C-16.296 294.509 -16.38 293.441 -15.6 292.201C-15.142 292.99 -14.081 292.271 -13.6 293.001z"/>
+ <path fill="#cccccc" d="M46.2 347.401C46.2 347.401 53.6 327.001 49.2 315.801C49.2 315.801 60.6 337.401 56 348.601C56 348.601 55.6 338.201 51.6 333.201C51.6 333.201 47.6 346.001 46.2 347.401z"/>
+ <path fill="#cccccc" d="M31.4 344.801C31.4 344.801 36.8 336.001 28.8 317.601C28.8 317.601 28 338.001 21.2 349.001C21.2 349.001 35.4 328.801 31.4 344.801z"/>
+ <path fill="#cccccc" d="M21.4 342.801C21.4 342.801 21.2 322.801 21.6 319.801C21.6 319.801 17.8 336.401 7.6 346.001C7.6 346.001 22 334.001 21.4 342.801z"/>
+ <path fill="#cccccc" d="M11.8 310.801C11.8 310.801 17.8 324.401 7.8 342.801C7.8 342.801 14.2 330.601 9.4 323.601C9.4 323.601 12 320.201 11.8 310.801z"/>
+ <path fill="#cccccc" d="M-7.4 342.401C-7.4 342.401 -8.4 326.801 -6.6 324.601C-6.6 324.601 -6.4 318.201 -6.8 317.201C-6.8 317.201 -2.8 311.001 -2.6 318.401C-2.6 318.401 -1.2 326.201 1.6 330.801C1.6 330.801 5.2 336.201 5 342.601C5 342.601 -5 312.401 -7.4 342.401z"/>
+ <path fill="#cccccc" d="M-11 314.801C-11 314.801 -17.6 325.601 -19.4 344.601C-19.4 344.601 -20.8 338.401 -17 324.001C-17 324.001 -12.8 308.601 -11 314.801z"/>
+ <path fill="#cccccc" d="M-32.8 334.601C-32.8 334.601 -27.8 329.201 -26.4 324.201C-26.4 324.201 -22.8 308.401 -29.2 317.001C-29.2 317.001 -29 325.001 -37.2 332.401C-37.2 332.401 -32.4 330.001 -32.8 334.601z"/>
+ <path fill="#cccccc" d="M-38.6 329.601C-38.6 329.601 -35.2 312.201 -34.4 311.401C-34.4 311.401 -32.6 308.001 -35.4 311.201C-35.4 311.201 -44.2 330.401 -48.2 337.001C-48.2 337.001 -40.2 327.801 -38.6 329.601z"/>
+ <path fill="#cccccc" d="M-44.4 313.001C-44.4 313.001 -32.8 290.601 -54.6 316.401C-54.6 316.401 -43.6 306.601 -44.4 313.001z"/>
+ <path fill="#cccccc" d="M-59.8 298.401C-59.8 298.401 -55 279.601 -52.4 279.801C-52.4 279.801 -44.2 270.801 -50.8 281.401C-50.8 281.401 -56.8 291.001 -56.2 300.801C-56.2 300.801 -56.8 291.201 -59.8 298.401z"/>
+ <path fill="#cccccc" d="M270.5 287C270.5 287 258.5 277 256 273.5C256 273.5 269.5 292 269.5 299C269.5 299 272 291.5 270.5 287z"/>
+ <path fill="#cccccc" d="M276 265C276 265 255 250 251.5 242.5C251.5 242.5 278 272 278 276.5C278 276.5 278.5 267.5 276 265z"/>
+ <path fill="#cccccc" d="M293 111C293 111 281 103 279.5 105C279.5 105 290 111.5 292.5 120C292.5 120 291 111 293 111z"/>
+ <path fill="#cccccc" d="M301.5 191.5L284 179.5C284 179.5 303 196.5 303.5 200.5L301.5 191.5z"/>
+ <path stroke="#000000" d="M-89.25 169L-67.25 173.75"/>
+ <path stroke="#000000" d="M-39 331C-39 331 -39.5 327.5 -48.5 338"/>
+ <path stroke="#000000" d="M-33.5 336C-33.5 336 -31.5 329.5 -38 334"/>
+ <path stroke="#000000" d="M20.5 344.5C20.5 344.5 22 333.5 10.5 346.5"/>
+ </g>
+ <circle id="ball" cx="130" cy="-50" r="50" fill="yellow"/>
+ <script type="text/javascript"><![CDATA[
+ var max = 75;
+ var svg = document.getElementsByTagNameNS('http://www.w3.org/2000/svg', 'svg')[0];
+ var c = document.getElementsByTagNameNS('http://www.w3.org/2000/svg', 'circle')[0];
+ var t = document.getElementsByTagNameNS('http://www.w3.org/2000/svg', 'text')[1];
+ var cx = parseInt(c.getAttribute('cx'));
+ var cy = parseInt(c.getAttribute('cy'));
+ var r = parseInt(c.getAttribute('r'));
+ var dx = 5;
+ var dy = -5;
+ var count = 0;
+ var rAF = window.requestAnimationFrame || window.mozRequestAnimationFrame;
+
+ function bounce() {
+ if ((cx + r + dx > 390) || (cx - r + dx < -190))
+ dx =- dx;
+ cx += dx;
+ if ((cy + r + dy > 390) || (cy - r + dy < -190))
+ dy =- dy;
+ cy += dy;
+ c.setAttribute('cx', cx);
+ c.setAttribute('cy', cy);
+ ++count;
+ if (count < max) {
+ rAF(bounce);
+ t.firstChild.data = 'Test in progress... ' + count + ' of ' + max;
+ } else {
+ var end = new Date();
+ var elapsed = (end - start) / 1000;
+ t.firstChild.data = 'Test completed in ' + elapsed.toFixed(2) + 's.';
+ if (window.tpRecordTime) window.tpRecordTime(end - start, start);
+ if (parent.reportResults) parent.reportResults(end - start, start);
+ }
+ }
+ addEventListener("load", function() {
+ TalosContentProfiler.subtestStart("hixie-001.xml loaded", true).then(() => {
+ rAF(bounce);
+ });
+ });
+ ]]></script>
+ <script type="text/javascript" xlink:href="resource://talos-powers/TalosContentProfiler.js"></script>
+</svg>
diff --git a/testing/talos/talos/tests/svgx/hixie-002.xml b/testing/talos/talos/tests/svgx/hixie-002.xml
new file mode 100644
index 0000000000..79277c3a0f
--- /dev/null
+++ b/testing/talos/talos/tests/svgx/hixie-002.xml
@@ -0,0 +1,300 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-200 -200 600 600">
+<!--
+This test attempts to test how fast an SVG implementation can repaint as a
+circle that has a fill and fill-opacity animates over complex SVG via
+changes to its "cx" and "cy" attributes.
+
+(Note the "fill" vs "fill and fill-opacity" difference.)
+-->
+ <script type="text/javascript">
+ var start = new Date();
+ </script>
+ <rect fill="none" stroke="black" x="-190" y="-190" width="580" height="580" rx="40"/>
+ <text x="-150" y="-150" font-size="10">SVG Performance test.</text>
+ <text x="200" y="350" font-size="10">Test not started.</text>
+ <g>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.172" d="M-122.304 84.285C-122.304 84.285 -122.203 86.179 -123.027 86.16C-123.851 86.141 -140.305 38.066 -160.833 40.309C-160.833 40.309 -143.05 32.956 -122.304 84.285z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.172" d="M-118.774 81.262C-118.774 81.262 -119.323 83.078 -120.092 82.779C-120.86 82.481 -119.977 31.675 -140.043 26.801C-140.043 26.801 -120.82 25.937 -118.774 81.262z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.172" d="M-91.284 123.59C-91.284 123.59 -89.648 124.55 -90.118 125.227C-90.589 125.904 -139.763 113.102 -149.218 131.459C-149.218 131.459 -145.539 112.572 -91.284 123.59z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.172" d="M-94.093 133.801C-94.093 133.801 -92.237 134.197 -92.471 134.988C-92.704 135.779 -143.407 139.121 -146.597 159.522C-146.597 159.522 -149.055 140.437 -94.093 133.801z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.172" d="M-98.304 128.276C-98.304 128.276 -96.526 128.939 -96.872 129.687C-97.218 130.435 -147.866 126.346 -153.998 146.064C-153.998 146.064 -153.646 126.825 -98.304 128.276z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.172" d="M-109.009 110.072C-109.009 110.072 -107.701 111.446 -108.34 111.967C-108.979 112.488 -152.722 86.634 -166.869 101.676C-166.869 101.676 -158.128 84.533 -109.009 110.072z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.172" d="M-116.554 114.263C-116.554 114.263 -115.098 115.48 -115.674 116.071C-116.25 116.661 -162.638 95.922 -174.992 112.469C-174.992 112.469 -168.247 94.447 -116.554 114.263z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.172" d="M-119.154 118.335C-119.154 118.335 -117.546 119.343 -118.036 120.006C-118.526 120.669 -167.308 106.446 -177.291 124.522C-177.291 124.522 -173.066 105.749 -119.154 118.335z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.172" d="M-108.42 118.949C-108.42 118.949 -107.298 120.48 -107.999 120.915C-108.7 121.35 -148.769 90.102 -164.727 103.207C-164.727 103.207 -153.862 87.326 -108.42 118.949z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.172" d="M-128.2 90C-128.2 90 -127.6 91.8 -128.4 92C-129.2 92.2 -157.8 50.2 -177.001 57.8C-177.001 57.8 -161.8 46 -128.2 90z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.172" d="M-127.505 96.979C-127.505 96.979 -126.53 98.608 -127.269 98.975C-128.007 99.343 -164.992 64.499 -182.101 76.061C-182.101 76.061 -169.804 61.261 -127.505 96.979z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.172" d="M-127.62 101.349C-127.62 101.349 -126.498 102.88 -127.199 103.315C-127.9 103.749 -167.969 72.502 -183.927 85.607C-183.927 85.607 -173.062 69.726 -127.62 101.349z"/>
+ <path fill="#ffffff" stroke="#000000" d="M-129.83 103.065C-129.327 109.113 -128.339 115.682 -126.6 118.801C-126.6 118.801 -130.2 131.201 -121.4 144.401C-121.4 144.401 -121.8 151.601 -120.2 154.801C-120.2 154.801 -116.2 163.201 -111.4 164.001C-107.516 164.648 -98.793 167.717 -88.932 169.121C-88.932 169.121 -71.8 183.201 -75 196.001C-75 196.001 -75.4 212.401 -79 214.001C-79 214.001 -67.4 202.801 -77 219.601L-81.4 238.401C-81.4 238.401 -55.8 216.801 -71.4 235.201L-81.4 261.201C-81.4 261.201 -61.8 242.801 -69 251.201L-72.2 260.001C-72.2 260.001 -29 232.801 -59.8 262.401C-59.8 262.401 -51.8 258.801 -47.4 261.601C-47.4 261.601 -40.6 260.401 -41.4 262.001C-41.4 262.001 -62.2 272.401 -65.8 290.801C-65.8 290.801 -57.4 280.801 -60.6 291.601L-60.2 303.201C-60.2 303.201 -56.2 281.601 -56.6 319.201C-56.6 319.201 -37.4 301.201 -49 322.001L-49 338.801C-49 338.801 -33.8 322.401 -40.2 335.201C-40.2 335.201 -30.2 326.401 -34.2 341.601C-34.2 341.601 -35 352.001 -30.6 340.801C-30.6 340.801 -14.6 310.201 -20.6 336.401C-20.6 336.401 -21.4 355.601 -16.6 340.801C-16.6 340.801 -16.2 351.201 -7 358.401C-7 358.401 -8.2 307.601 4.6 343.601L8.6 360.001C8.6 360.001 11.4 350.801 11 345.601C11 345.601 25.8 329.201 19 353.601C19 353.601 34.2 330.801 31 344.001C31 344.001 23.4 360.001 25 364.801C25 364.801 41.8 330.001 43 328.401C43 328.401 41 370.802 51.8 334.801C51.8 334.801 57.4 346.801 54.6 351.201C54.6 351.201 62.6 343.201 61.8 340.001C61.8 340.001 66.4 331.801 69.2 345.401C69.2 345.401 71 354.801 72.6 351.601C72.6 351.601 76.6 375.602 77.8 352.801C77.8 352.801 79.4 339.201 72.2 327.601C72.2 327.601 73 324.401 70.2 320.401C70.2 320.401 83.8 342.001 76.6 313.201C76.6 313.201 87.801 321.201 89.001 321.201C89.001 321.201 75.4 298.001 84.2 302.801C84.2 302.801 79 292.401 97.001 304.401C97.001 304.401 81 288.401 98.601 298.001C98.601 298.001 106.601 304.401 99.001 294.401C99.001 294.401 84.6 278.401 106.601 296.401C106.601 296.401 118.201 312.801 119.001 315.601C119.001 315.601 109.001 286.401 104.601 283.601C104.601 283.601 113.001 247.201 154.201 262.801C154.201 262.801 161.001 280.001 165.401 261.601C165.401 261.601 178.201 255.201 189.401 282.801C189.401 282.801 193.401 269.201 192.601 266.401C192.601 266.401 199.401 267.601 198.601 266.401C198.601 266.401 211.801 270.801 213.001 270.001C213.001 270.001 219.801 276.801 220.201 273.201C220.201 273.201 229.401 276.001 227.401 272.401C227.401 272.401 236.201 288.001 236.601 291.601L239.001 277.601L241.001 280.401C241.001 280.401 242.601 272.801 241.801 271.601C241.001 270.401 261.801 278.401 266.601 299.201L268.601 307.601C268.601 307.601 274.601 292.801 273.001 288.801C273.001 288.801 278.201 289.601 278.601 294.001C278.601 294.001 282.601 270.801 277.801 264.801C277.801 264.801 282.201 264.001 283.401 267.601L283.401 260.401C283.401 260.401 290.601 261.201 290.601 258.801C290.601 258.801 295.001 254.801 297.001 259.601C297.001 259.601 284.601 224.401 303.001 243.601C303.001 243.601 310.201 254.401 306.601 235.601C303.001 216.801 299.001 215.201 303.801 214.801C303.801 214.801 304.601 211.201 302.601 209.601C300.601 208.001 303.801 209.601 303.801 209.601C303.801 209.601 308.601 213.601 303.401 191.601C303.401 191.601 309.801 193.201 297.801 164.001C297.801 164.001 300.601 161.601 296.601 153.201C296.601 153.201 304.601 157.601 307.401 156.001C307.401 156.001 307.001 154.401 303.801 150.401C303.801 150.401 282.201 95.6 302.601 117.601C302.601 117.601 314.451 131.151 308.051 108.351C308.051 108.351 298.94 84.341 299.717 80.045L-129.83 103.065z"/>
+ <path fill="#cc7226" stroke="#000000" d="M299.717 80.245C300.345 80.426 302.551 81.55 303.801 83.2C303.801 83.2 310.601 94 305.401 75.6C305.401 75.6 296.201 46.8 305.001 58C305.001 58 311.001 65.2 307.801 51.6C303.936 35.173 301.401 28.8 301.401 28.8C301.401 28.8 313.001 33.6 286.201 -6L295.001 -2.4C295.001 -2.4 275.401 -42 253.801 -47.2L245.801 -53.2C245.801 -53.2 284.201 -91.2 271.401 -128C271.401 -128 264.601 -133.2 255.001 -124C255.001 -124 248.601 -119.2 242.601 -120.8C242.601 -120.8 211.801 -119.6 209.801 -119.6C207.801 -119.6 173.001 -156.8 107.401 -139.2C107.401 -139.2 102.201 -137.2 97.801 -138.4C97.801 -138.4 79.4 -154.4 30.6 -131.6C30.6 -131.6 20.6 -129.6 19 -129.6C17.4 -129.6 14.6 -129.6 6.6 -123.2C-1.4 -116.8 -1.8 -116 -3.8 -114.4C-3.8 -114.4 -20.2 -103.2 -25 -102.4C-25 -102.4 -36.6 -96 -41 -86L-44.6 -84.8C-44.6 -84.8 -46.2 -77.6 -46.6 -76.4C-46.6 -76.4 -51.4 -72.8 -52.2 -67.2C-52.2 -67.2 -61 -61.2 -60.6 -56.8C-60.6 -56.8 -62.2 -51.6 -63 -46.8C-63 -46.8 -70.2 -42 -69.4 -39.2C-69.4 -39.2 -77 -25.2 -75.8 -18.4C-75.8 -18.4 -82.2 -18.8 -85 -16.4C-85 -16.4 -85.8 -11.6 -87.4 -11.2C-87.4 -11.2 -90.2 -10 -87.8 -6C-87.8 -6 -89.4 -3.2 -89.8 -1.6C-89.8 -1.6 -89 1.2 -93.4 6.8C-93.4 6.8 -99.8 25.6 -97.8 30.8C-97.8 30.8 -97.4 35.6 -100.2 37.2C-100.2 37.2 -103.8 36.8 -95.4 48.8C-95.4 48.8 -94.6 50 -97.8 52.4C-97.8 52.4 -115 56 -117.4 72.4C-117.4 72.4 -131 87.2 -131 92.4C-131 94.705 -130.729 97.852 -130.03 102.465C-130.03 102.465 -130.6 110.801 -103 111.601C-75.4 112.401 299.717 80.245 299.717 80.245z"/>
+ <path fill="#cc7226" d="M-115.6 102.6C-140.6 63.2 -126.2 119.601 -126.2 119.601C-117.4 154.001 12.2 116.401 12.2 116.401C12.2 116.401 181.001 86 192.201 82C203.401 78 298.601 84.4 298.601 84.4L293.001 67.6C228.201 21.2 209.001 44.4 195.401 40.4C181.801 36.4 184.201 46 181.001 46.8C177.801 47.6 138.601 22.8 132.201 23.6C125.801 24.4 100.459 0.649 115.401 32.4C131.401 66.4 57 71.6 40.2 60.4C23.4 49.2 47.4 78.8 47.4 78.8C65.8 98.8 31.4 82 31.4 82C-3 69.2 -27 94.8 -30.2 95.6C-33.4 96.4 -38.2 99.6 -39 93.2C-39.8 86.8 -47.31 70.099 -79 96.4C-99 113.001 -112.8 91 -112.8 91L-115.6 102.6z"/>
+ <path fill="#e87f3a" d="M133.51 25.346C127.11 26.146 101.743 2.407 116.71 34.146C133.31 69.346 58.31 73.346 41.51 62.146C24.709 50.946 48.71 80.546 48.71 80.546C67.11 100.546 32.709 83.746 32.709 83.746C-1.691 70.946 -25.691 96.546 -28.891 97.346C-32.091 98.146 -36.891 101.346 -37.691 94.946C-38.491 88.546 -45.87 72.012 -77.691 98.146C-98.927 115.492 -112.418 94.037 -112.418 94.037L-115.618 104.146C-140.618 64.346 -125.546 122.655 -125.546 122.655C-116.745 157.056 13.509 118.146 13.509 118.146C13.509 118.146 182.31 87.746 193.51 83.746C204.71 79.746 299.038 86.073 299.038 86.073L293.51 68.764C228.71 22.364 210.31 46.146 196.71 42.146C183.11 38.146 185.51 47.746 182.31 48.546C179.11 49.346 139.91 24.546 133.51 25.346z"/>
+ <path fill="#ea8c4d" d="M134.819 27.091C128.419 27.891 103.685 3.862 118.019 35.891C134.219 72.092 59.619 75.092 42.819 63.892C26.019 52.692 50.019 82.292 50.019 82.292C68.419 102.292 34.019 85.492 34.019 85.492C-0.381 72.692 -24.382 98.292 -27.582 99.092C-30.782 99.892 -35.582 103.092 -36.382 96.692C-37.182 90.292 -44.43 73.925 -76.382 99.892C-98.855 117.983 -112.036 97.074 -112.036 97.074L-115.636 105.692C-139.436 66.692 -124.891 125.71 -124.891 125.71C-116.091 160.11 14.819 119.892 14.819 119.892C14.819 119.892 183.619 89.492 194.819 85.492C206.019 81.492 299.474 87.746 299.474 87.746L294.02 69.928C229.219 23.528 211.619 47.891 198.019 43.891C184.419 39.891 186.819 49.491 183.619 50.292C180.419 51.092 141.219 26.291 134.819 27.091z"/>
+ <path fill="#ec9961" d="M136.128 28.837C129.728 29.637 104.999 5.605 119.328 37.637C136.128 75.193 60.394 76.482 44.128 65.637C27.328 54.437 51.328 84.037 51.328 84.037C69.728 104.037 35.328 87.237 35.328 87.237C0.928 74.437 -23.072 100.037 -26.272 100.837C-29.472 101.637 -34.272 104.837 -35.072 98.437C-35.872 92.037 -42.989 75.839 -75.073 101.637C-98.782 120.474 -111.655 100.11 -111.655 100.11L-115.655 107.237C-137.455 70.437 -124.236 128.765 -124.236 128.765C-115.436 163.165 16.128 121.637 16.128 121.637C16.128 121.637 184.928 91.237 196.129 87.237C207.329 83.237 299.911 89.419 299.911 89.419L294.529 71.092C229.729 24.691 212.929 49.637 199.329 45.637C185.728 41.637 188.128 51.237 184.928 52.037C181.728 52.837 142.528 28.037 136.128 28.837z"/>
+ <path fill="#eea575" d="M137.438 30.583C131.037 31.383 106.814 7.129 120.637 39.383C137.438 78.583 62.237 78.583 45.437 67.383C28.637 56.183 52.637 85.783 52.637 85.783C71.037 105.783 36.637 88.983 36.637 88.983C2.237 76.183 -21.763 101.783 -24.963 102.583C-28.163 103.383 -32.963 106.583 -33.763 100.183C-34.563 93.783 -41.548 77.752 -73.763 103.383C-98.709 122.965 -111.273 103.146 -111.273 103.146L-115.673 108.783C-135.473 73.982 -123.582 131.819 -123.582 131.819C-114.782 166.22 17.437 123.383 17.437 123.383C17.437 123.383 186.238 92.983 197.438 88.983C208.638 84.983 300.347 91.092 300.347 91.092L295.038 72.255C230.238 25.855 214.238 51.383 200.638 47.383C187.038 43.383 189.438 52.983 186.238 53.783C183.038 54.583 143.838 29.783 137.438 30.583z"/>
+ <path fill="#f1b288" d="M138.747 32.328C132.347 33.128 106.383 9.677 121.947 41.128C141.147 79.928 63.546 80.328 46.746 69.128C29.946 57.928 53.946 87.528 53.946 87.528C72.346 107.528 37.946 90.728 37.946 90.728C3.546 77.928 -20.454 103.528 -23.654 104.328C-26.854 105.128 -31.654 108.328 -32.454 101.928C-33.254 95.528 -40.108 79.665 -72.454 105.128C-98.636 125.456 -110.891 106.183 -110.891 106.183L-115.691 110.328C-133.691 77.128 -122.927 134.874 -122.927 134.874C-114.127 169.274 18.746 125.128 18.746 125.128C18.746 125.128 187.547 94.728 198.747 90.728C209.947 86.728 300.783 92.764 300.783 92.764L295.547 73.419C230.747 27.019 215.547 53.128 201.947 49.128C188.347 45.128 190.747 54.728 187.547 55.528C184.347 56.328 145.147 31.528 138.747 32.328z"/>
+ <path fill="#f3bf9c" d="M140.056 34.073C133.655 34.873 107.313 11.613 123.255 42.873C143.656 82.874 64.855 82.074 48.055 70.874C31.255 59.674 55.255 89.274 55.255 89.274C73.655 109.274 39.255 92.474 39.255 92.474C4.855 79.674 -19.145 105.274 -22.345 106.074C-25.545 106.874 -30.345 110.074 -31.145 103.674C-31.945 97.274 -38.668 81.578 -71.145 106.874C-98.564 127.947 -110.509 109.219 -110.509 109.219L-115.709 111.874C-131.709 81.674 -122.273 137.929 -122.273 137.929C-113.473 172.329 20.055 126.874 20.055 126.874C20.055 126.874 188.856 96.474 200.056 92.474C211.256 88.474 301.22 94.437 301.22 94.437L296.056 74.583C231.256 28.183 216.856 54.874 203.256 50.874C189.656 46.873 192.056 56.474 188.856 57.274C185.656 58.074 146.456 33.273 140.056 34.073z"/>
+ <path fill="#f5ccb0" d="M141.365 35.819C134.965 36.619 107.523 13.944 124.565 44.619C146.565 84.219 66.164 83.819 49.364 72.619C32.564 61.419 56.564 91.019 56.564 91.019C74.964 111.019 40.564 94.219 40.564 94.219C6.164 81.419 -17.836 107.019 -21.036 107.819C-24.236 108.619 -29.036 111.819 -29.836 105.419C-30.636 99.019 -37.227 83.492 -69.836 108.619C-98.491 130.438 -110.127 112.256 -110.127 112.256L-115.727 113.419C-130.128 85.019 -121.618 140.983 -121.618 140.983C-112.818 175.384 21.364 128.619 21.364 128.619C21.364 128.619 190.165 98.219 201.365 94.219C212.565 90.219 301.656 96.11 301.656 96.11L296.565 75.746C231.765 29.346 218.165 56.619 204.565 52.619C190.965 48.619 193.365 58.219 190.165 59.019C186.965 59.819 147.765 35.019 141.365 35.819z"/>
+ <path fill="#f8d8c4" d="M142.674 37.565C136.274 38.365 108.832 15.689 125.874 46.365C147.874 85.965 67.474 85.565 50.674 74.365C33.874 63.165 57.874 92.765 57.874 92.765C76.274 112.765 41.874 95.965 41.874 95.965C7.473 83.165 -16.527 108.765 -19.727 109.565C-22.927 110.365 -27.727 113.565 -28.527 107.165C-29.327 100.765 -35.786 85.405 -68.527 110.365C-98.418 132.929 -109.745 115.293 -109.745 115.293L-115.745 114.965C-129.346 88.564 -120.963 144.038 -120.963 144.038C-112.163 178.438 22.673 130.365 22.673 130.365C22.673 130.365 191.474 99.965 202.674 95.965C213.874 91.965 302.093 97.783 302.093 97.783L297.075 76.91C232.274 30.51 219.474 58.365 205.874 54.365C192.274 50.365 194.674 59.965 191.474 60.765C188.274 61.565 149.074 36.765 142.674 37.565z"/>
+ <path fill="#fae5d7" d="M143.983 39.31C137.583 40.11 110.529 17.223 127.183 48.11C149.183 88.91 68.783 87.31 51.983 76.11C35.183 64.91 59.183 94.51 59.183 94.51C77.583 114.51 43.183 97.71 43.183 97.71C8.783 84.91 -15.217 110.51 -18.417 111.31C-21.618 112.11 -26.418 115.31 -27.218 108.91C-28.018 102.51 -34.346 87.318 -67.218 112.11C-98.345 135.42 -109.363 118.329 -109.363 118.329L-115.764 116.51C-128.764 92.51 -120.309 147.093 -120.309 147.093C-111.509 181.493 23.983 132.11 23.983 132.11C23.983 132.11 192.783 101.71 203.983 97.71C215.183 93.71 302.529 99.456 302.529 99.456L297.583 78.074C232.783 31.673 220.783 60.11 207.183 56.11C193.583 52.11 195.983 61.71 192.783 62.51C189.583 63.31 150.383 38.51 143.983 39.31z"/>
+ <path fill="#fcf2eb" d="M145.292 41.055C138.892 41.855 112.917 18.411 128.492 49.855C149.692 92.656 70.092 89.056 53.292 77.856C36.492 66.656 60.492 96.256 60.492 96.256C78.892 116.256 44.492 99.456 44.492 99.456C10.092 86.656 -13.908 112.256 -17.108 113.056C-20.308 113.856 -25.108 117.056 -25.908 110.656C-26.708 104.256 -32.905 89.232 -65.908 113.856C-98.273 137.911 -108.982 121.365 -108.982 121.365L-115.782 118.056C-128.582 94.856 -119.654 150.147 -119.654 150.147C-110.854 184.547 25.292 133.856 25.292 133.856C25.292 133.856 194.093 103.456 205.293 99.456C216.493 95.456 302.965 101.128 302.965 101.128L298.093 79.237C233.292 32.837 222.093 61.856 208.493 57.856C194.893 53.855 197.293 63.456 194.093 64.256C190.892 65.056 151.692 40.255 145.292 41.055z"/>
+ <path fill="#ffffff" d="M-115.8 119.601C-128.6 97.6 -119 153.201 -119 153.201C-110.2 187.601 26.6 135.601 26.6 135.601C26.6 135.601 195.401 105.2 206.601 101.2C217.801 97.2 303.401 102.8 303.401 102.8L298.601 80.4C233.801 34 223.401 63.6 209.801 59.6C196.201 55.6 198.601 65.2 195.401 66C192.201 66.8 153.001 42 146.601 42.8C140.201 43.6 114.981 19.793 129.801 51.6C152.028 99.307 69.041 89.227 54.6 79.6C37.8 68.4 61.8 98 61.8 98C80.2 118.001 45.8 101.2 45.8 101.2C11.4 88.4 -12.6 114.001 -15.8 114.801C-19 115.601 -23.8 118.801 -24.6 112.401C-25.4 106 -31.465 91.144 -64.6 115.601C-98.2 140.401 -108.6 124.401 -108.6 124.401L-115.8 119.601z"/>
+ <path fill="#000000" d="M-74.2 149.601C-74.2 149.601 -81.4 161.201 -60.6 174.401C-60.6 174.401 -59.2 175.801 -77.2 171.601C-77.2 171.601 -83.4 169.601 -85 159.201C-85 159.201 -89.8 154.801 -94.6 149.201C-99.4 143.601 -74.2 149.601 -74.2 149.601z"/>
+ <path fill="#cccccc" d="M65.8 102C65.8 102 83.498 128.821 82.9 133.601C81.6 144.001 81.4 153.601 84.6 157.601C87.801 161.601 96.601 194.801 96.601 194.801C96.601 194.801 96.201 196.001 108.601 158.001C108.601 158.001 120.201 142.001 100.201 123.601C100.201 123.601 65 94.8 65.8 102z"/>
+ <path fill="#000000" d="M-54.2 176.401C-54.2 176.401 -43 183.601 -57.4 214.801L-51 212.401C-51 212.401 -51.8 223.601 -55 226.001L-47.8 222.801C-47.8 222.801 -43 230.801 -47 235.601C-47 235.601 -30.2 243.601 -31 250.001C-31 250.001 -24.6 242.001 -28.6 235.601C-32.6 229.201 -39.8 233.201 -39 214.801L-47.8 218.001C-47.8 218.001 -42.2 209.201 -42.2 202.801L-50.2 205.201C-50.2 205.201 -34.731 178.623 -45.4 177.201C-51.4 176.401 -54.2 176.401 -54.2 176.401z"/>
+ <path fill="#cccccc" d="M-21.8 193.201C-21.8 193.201 -19 188.801 -21.8 189.601C-24.6 190.401 -55.8 205.201 -61.8 214.801C-61.8 214.801 -27.4 190.401 -21.8 193.201z"/>
+ <path fill="#cccccc" d="M-11.4 201.201C-11.4 201.201 -8.6 196.801 -11.4 197.601C-14.2 198.401 -45.4 213.201 -51.4 222.801C-51.4 222.801 -17 198.401 -11.4 201.201z"/>
+ <path fill="#cccccc" d="M1.8 186.001C1.8 186.001 4.6 181.601 1.8 182.401C-1 183.201 -32.2 198.001 -38.2 207.601C-38.2 207.601 -3.8 183.201 1.8 186.001z"/>
+ <path fill="#cccccc" d="M-21.4 229.601C-21.4 229.601 -21.4 223.601 -24.2 224.401C-27 225.201 -63 242.801 -69 252.401C-69 252.401 -27 226.801 -21.4 229.601z"/>
+ <path fill="#cccccc" d="M-20.2 218.801C-20.2 218.801 -19 214.001 -21.8 214.801C-23.8 214.801 -50.2 226.401 -56.2 236.001C-56.2 236.001 -26.6 214.401 -20.2 218.801z"/>
+ <path fill="#cccccc" d="M-34.6 266.401L-44.6 274.001C-44.6 274.001 -34.2 266.401 -30.6 267.601C-30.6 267.601 -37.4 278.801 -38.2 284.001C-38.2 284.001 -27.8 271.201 -22.2 271.601C-22.2 271.601 -14.6 272.001 -14.6 282.801C-14.6 282.801 -9 272.401 -5.8 272.801C-5.8 272.801 -4.6 279.201 -5.8 286.001C-5.8 286.001 -1.8 278.401 2.2 280.001C2.2 280.001 8.6 278.001 7.8 289.601C7.8 289.601 7.8 300.001 7 302.801C7 302.801 12.6 276.401 15 276.001C15 276.001 23 274.801 27.8 283.601C27.8 283.601 23.8 276.001 28.6 278.001C28.6 278.001 39.4 279.601 42.6 286.401C42.6 286.401 35.8 274.401 41.4 277.601C41.4 277.601 48.2 277.601 49.4 284.001C49.4 284.001 57.8 305.201 59.8 306.801C59.8 306.801 52.2 285.201 53.8 285.201C53.8 285.201 51.8 273.201 57 288.001C57 288.001 53.8 274.001 59.4 274.801C65 275.601 69.4 285.601 77.8 283.201C77.8 283.201 87.401 288.801 89.401 219.601L-34.6 266.401z"/>
+ <path fill="#000000" d="M-29.8 173.601C-29.8 173.601 -15 167.601 25 173.601C25 173.601 32.2 174.001 39 165.201C45.8 156.401 72.6 149.201 79 151.201L88.601 157.601L89.401 158.801C89.401 158.801 101.801 169.201 102.201 176.801C102.601 184.401 87.801 232.401 78.2 248.401C68.6 264.401 59 276.801 39.8 274.401C39.8 274.401 19 270.401 -6.6 274.401C-6.6 274.401 -35.8 272.801 -38.6 264.801C-41.4 256.801 -27.4 241.601 -27.4 241.601C-27.4 241.601 -23 233.201 -24.2 218.801C-25.4 204.401 -25 176.401 -29.8 173.601z"/>
+ <path fill="#e5668c" d="M-7.8 175.601C0.6 194.001 -29 259.201 -29 259.201C-31 260.801 -16.34 266.846 -6.2 264.401C4.746 261.763 45 266.001 45 266.001C68.6 250.401 81.4 206.001 81.4 206.001C81.4 206.001 91.801 182.001 74.2 178.801C56.6 175.601 -7.8 175.601 -7.8 175.601z"/>
+ <path fill="#b23259" d="M-9.831 206.497C-6.505 193.707 -4.921 181.906 -7.8 175.601C-7.8 175.601 54.6 182.001 65.8 161.201C70.041 153.326 84.801 184.001 84.4 193.601C84.4 193.601 21.4 208.001 6.6 196.801L-9.831 206.497z"/>
+ <path fill="#a5264c" d="M-5.4 222.801C-5.4 222.801 -3.4 230.001 -5.8 234.001C-5.8 234.001 -7.4 234.801 -8.6 235.201C-8.6 235.201 -7.4 238.801 -1.4 240.401C-1.4 240.401 0.6 244.801 3 245.201C5.4 245.601 10.2 251.201 14.2 250.001C18.2 248.801 29.4 244.801 29.4 244.801C29.4 244.801 35 241.601 43.8 245.201C43.8 245.201 46.175 244.399 46.6 240.401C47.1 235.701 50.2 232.001 52.2 230.001C54.2 228.001 63.8 215.201 62.6 214.801C61.4 214.401 -5.4 222.801 -5.4 222.801z"/>
+ <path fill="#ff727f" stroke="#000000" d="M-9.8 174.401C-9.8 174.401 -12.6 196.801 -9.4 205.201C-6.2 213.601 -7 215.601 -7.8 219.601C-8.6 223.601 -4.2 233.601 1.4 239.601L13.4 241.201C13.4 241.201 28.6 237.601 37.8 240.401C37.8 240.401 46.794 241.744 50.2 226.801C50.2 226.801 55 220.401 62.2 217.601C69.4 214.801 76.6 173.201 72.6 165.201C68.6 157.201 54.2 152.801 38.2 168.401C22.2 184.001 20.2 167.201 -9.8 174.401z"/>
+ <path fill="#ffffcc" stroke="#000000" stroke-width="0.5" d="M-8.2 249.201C-8.2 249.201 -9 247.201 -13.4 246.801C-13.4 246.801 -35.8 243.201 -44.2 230.801C-44.2 230.801 -51 225.201 -46.6 236.801C-46.6 236.801 -36.2 257.201 -29.4 260.001C-29.4 260.001 -13 264.001 -8.2 249.201z"/>
+ <path fill="#cc3f4c" d="M71.742 185.229C72.401 177.323 74.354 168.709 72.6 165.201C66.154 152.307 49.181 157.695 38.2 168.401C22.2 184.001 20.2 167.201 -9.8 174.401C-9.8 174.401 -11.545 188.364 -10.705 198.376C-10.705 198.376 26.6 186.801 27.4 192.401C27.4 192.401 29 189.201 38.2 189.201C47.4 189.201 70.142 188.029 71.742 185.229z"/>
+ <path stroke="#a51926" stroke-width="2" d="M28.6 175.201C28.6 175.201 33.4 180.001 29.8 189.601C29.8 189.601 15.4 205.601 17.4 219.601"/>
+ <path fill="#ffffcc" stroke="#000000" stroke-width="0.5" d="M-19.4 260.001C-19.4 260.001 -23.8 247.201 -15 254.001C-15 254.001 -10.2 256.001 -11.4 257.601C-12.6 259.201 -18.2 263.201 -19.4 260.001z"/>
+ <path fill="#ffffcc" stroke="#000000" stroke-width="0.5" d="M-14.36 261.201C-14.36 261.201 -17.88 250.961 -10.84 256.401C-10.84 256.401 -6.419 258.849 -7.96 259.281C-12.52 260.561 -7.96 263.121 -14.36 261.201z"/>
+ <path fill="#ffffcc" stroke="#000000" stroke-width="0.5" d="M-9.56 261.201C-9.56 261.201 -13.08 250.961 -6.04 256.401C-6.04 256.401 -1.665 258.711 -3.16 259.281C-6.52 260.561 -3.16 263.121 -9.56 261.201z"/>
+ <path fill="#ffffcc" stroke="#000000" stroke-width="0.5" d="M-2.96 261.401C-2.96 261.401 -6.48 251.161 0.56 256.601C0.56 256.601 4.943 258.933 3.441 259.481C0.48 260.561 3.441 263.321 -2.96 261.401z"/>
+ <path fill="#ffffcc" stroke="#000000" stroke-width="0.5" d="M3.52 261.321C3.52 261.321 0 251.081 7.041 256.521C7.041 256.521 10.881 258.121 9.921 259.401C8.961 260.681 9.921 263.241 3.52 261.321z"/>
+ <path fill="#ffffcc" stroke="#000000" stroke-width="0.5" d="M10.2 262.001C10.2 262.001 5.4 249.601 14.6 256.001C14.6 256.001 19.4 258.001 18.2 259.601C17 261.201 18.2 264.401 10.2 262.001z"/>
+ <path stroke="#a5264c" stroke-width="2" d="M-18.2 244.801C-18.2 244.801 -5 242.001 1 245.201C1 245.201 7 246.401 8.2 246.001C9.4 245.601 12.6 245.201 12.6 245.201"/>
+ <path stroke="#a5264c" stroke-width="2" d="M15.8 253.601C15.8 253.601 27.8 240.001 39.8 244.401C46.816 246.974 45.8 243.601 46.6 240.801C47.4 238.001 47.6 233.801 52.6 230.801"/>
+ <path fill="#ffffcc" stroke="#000000" stroke-width="0.5" d="M33 237.601C33 237.601 29 226.801 26.2 239.601C23.4 252.401 20.2 256.001 18.6 258.801C18.6 258.801 18.6 264.001 27 263.601C27 263.601 37.8 263.201 38.2 260.401C38.6 257.601 37 246.001 33 237.601z"/>
+ <path stroke="#a5264c" stroke-width="2" d="M47 244.801C47 244.801 50.6 242.401 53 243.601"/>
+ <path stroke="#a5264c" stroke-width="2" d="M53.5 228.401C53.5 228.401 56.4 223.501 61.2 222.701"/>
+ <path fill="#b2b2b2" d="M-25.8 265.201C-25.8 265.201 -7.8 268.401 -3.4 266.801C-3.4 266.801 5.4 266.801 -3 268.801C-3 268.801 -15.8 268.801 -23.8 267.601C-23.8 267.601 -35.4 262.001 -25.8 265.201z"/>
+ <path fill="#ffffcc" stroke="#000000" stroke-width="0.5" d="M-11.8 172.001C-11.8 172.001 5.8 172.001 7.8 172.801C7.8 172.801 15 203.601 11.4 211.201C11.4 211.201 10.2 214.001 7.4 208.401C7.4 208.401 -11 175.601 -14.2 173.601C-17.4 171.601 -13 172.001 -11.8 172.001z"/>
+ <path fill="#ffffcc" stroke="#000000" stroke-width="0.5" d="M-88.9 169.301C-88.9 169.301 -80 171.001 -67.4 173.601C-67.4 173.601 -62.6 196.001 -59.4 200.801C-56.2 205.601 -59.8 205.601 -63.4 202.801C-67 200.001 -81.8 186.001 -83.8 181.601C-85.8 177.201 -88.9 169.301 -88.9 169.301z"/>
+ <path fill="#ffffcc" stroke="#000000" stroke-width="0.5" d="M-67.039 173.818C-67.039 173.818 -61.239 175.366 -60.23 177.581C-59.222 179.795 -61.432 183.092 -61.432 183.092C-61.432 183.092 -62.432 186.397 -63.634 184.235C-64.836 182.072 -67.708 174.412 -67.039 173.818z"/>
+ <path fill="#000000" d="M-67 173.601C-67 173.601 -63.4 178.801 -59.8 178.801C-56.2 178.801 -55.818 178.388 -53 179.001C-48.4 180.001 -48.8 178.001 -42.2 179.201C-39.56 179.681 -37 178.801 -34.2 180.001C-31.4 181.201 -28.2 180.401 -27 178.401C-25.8 176.401 -21 172.201 -21 172.201C-21 172.201 -33.8 174.001 -36.6 174.801C-36.6 174.801 -59 176.001 -67 173.601z"/>
+ <path fill="#ffffcc" stroke="#000000" stroke-width="0.5" d="M-22.4 173.801C-22.4 173.801 -28.85 177.301 -29.25 179.701C-29.65 182.101 -24 185.801 -24 185.801C-24 185.801 -21.25 190.401 -20.65 188.001C-20.05 185.601 -21.6 174.201 -22.4 173.801z"/>
+ <path fill="#ffffcc" stroke="#000000" stroke-width="0.5" d="M-59.885 179.265C-59.885 179.265 -52.878 190.453 -52.661 179.242C-52.661 179.242 -52.104 177.984 -53.864 177.962C-59.939 177.886 -58.418 173.784 -59.885 179.265z"/>
+ <path fill="#ffffcc" stroke="#000000" stroke-width="0.5" d="M-52.707 179.514C-52.707 179.514 -44.786 190.701 -45.422 179.421C-45.422 179.421 -45.415 179.089 -47.168 178.936C-51.915 178.522 -51.57 174.004 -52.707 179.514z"/>
+ <path fill="#ffffcc" stroke="#000000" stroke-width="0.5" d="M-45.494 179.522C-45.494 179.522 -37.534 190.15 -38.203 180.484C-38.203 180.484 -38.084 179.251 -39.738 178.95C-43.63 178.244 -43.841 174.995 -45.494 179.522z"/>
+ <path fill="#ffffcc" stroke="#000000" stroke-width="0.5" d="M-38.618 179.602C-38.618 179.602 -30.718 191.163 -30.37 181.382C-30.37 181.382 -28.726 180.004 -30.472 179.782C-36.29 179.042 -35.492 174.588 -38.618 179.602z"/>
+ <path fill="#e5e5b2" d="M-74.792 183.132L-82.45 181.601C-85.05 176.601 -87.15 170.451 -87.15 170.451C-87.15 170.451 -80.8 171.451 -68.3 174.251C-68.3 174.251 -67.424 177.569 -65.952 183.364L-74.792 183.132z"/>
+ <path fill="#e5e5b2" d="M-9.724 178.47C-11.39 175.964 -12.707 174.206 -13.357 173.8C-16.37 171.917 -12.227 172.294 -11.098 172.294C-11.098 172.294 5.473 172.294 7.356 173.047C7.356 173.047 7.88 175.289 8.564 178.68C8.564 178.68 -1.524 176.67 -9.724 178.47z"/>
+ <path fill="#cc7226" d="M43.88 40.321C71.601 44.281 97.121 8.641 98.881 -1.04C100.641 -10.72 90.521 -22.6 90.521 -22.6C91.841 -25.68 87.001 -39.76 81.721 -49C76.441 -58.24 60.54 -57.266 43 -58.24C27.16 -59.12 8.68 -35.8 7.36 -34.04C6.04 -32.28 12.2 6.001 13.52 11.721C14.84 17.441 12.2 43.841 12.2 43.841C46.44 34.741 16.16 36.361 43.88 40.321z"/>
+ <path fill="#ea8e51" d="M8.088 -33.392C6.792 -31.664 12.84 5.921 14.136 11.537C15.432 17.153 12.84 43.073 12.84 43.073C45.512 34.193 16.728 35.729 43.944 39.617C71.161 43.505 96.217 8.513 97.945 -0.992C99.673 -10.496 89.737 -22.16 89.737 -22.16C91.033 -25.184 86.281 -39.008 81.097 -48.08C75.913 -57.152 60.302 -56.195 43.08 -57.152C27.528 -58.016 9.384 -35.12 8.088 -33.392z"/>
+ <path fill="#efaa7c" d="M8.816 -32.744C7.544 -31.048 13.48 5.841 14.752 11.353C16.024 16.865 13.48 42.305 13.48 42.305C44.884 33.145 17.296 35.097 44.008 38.913C70.721 42.729 95.313 8.385 97.009 -0.944C98.705 -10.272 88.953 -21.72 88.953 -21.72C90.225 -24.688 85.561 -38.256 80.473 -47.16C75.385 -56.064 60.063 -55.125 43.16 -56.064C27.896 -56.912 10.088 -34.44 8.816 -32.744z"/>
+ <path fill="#f4c6a8" d="M9.544 -32.096C8.296 -30.432 14.12 5.761 15.368 11.169C16.616 16.577 14.12 41.537 14.12 41.537C43.556 32.497 17.864 34.465 44.072 38.209C70.281 41.953 94.409 8.257 96.073 -0.895C97.737 -10.048 88.169 -21.28 88.169 -21.28C89.417 -24.192 84.841 -37.504 79.849 -46.24C74.857 -54.976 59.824 -54.055 43.24 -54.976C28.264 -55.808 10.792 -33.76 9.544 -32.096z"/>
+ <path fill="#f9e2d3" d="M10.272 -31.448C9.048 -29.816 14.76 5.681 15.984 10.985C17.208 16.289 14.76 40.769 14.76 40.769C42.628 31.849 18.432 33.833 44.136 37.505C69.841 41.177 93.505 8.129 95.137 -0.848C96.769 -9.824 87.385 -20.84 87.385 -20.84C88.609 -23.696 84.121 -36.752 79.225 -45.32C74.329 -53.888 59.585 -52.985 43.32 -53.888C28.632 -54.704 11.496 -33.08 10.272 -31.448z"/>
+ <path fill="#ffffff" d="M44.2 36.8C69.4 40.4 92.601 8 94.201 -0.8C95.801 -9.6 86.601 -20.4 86.601 -20.4C87.801 -23.2 83.4 -36 78.6 -44.4C73.8 -52.8 59.346 -51.914 43.4 -52.8C29 -53.6 12.2 -32.4 11 -30.8C9.8 -29.2 15.4 5.6 16.6 10.8C17.8 16 15.4 40 15.4 40C40.9 31.4 19 33.2 44.2 36.8z"/>
+ <path fill="#cccccc" d="M90.601 2.8C90.601 2.8 62.8 10.4 51.2 8.8C51.2 8.8 35.4 2.2 26.6 24C26.6 24 23 31.2 21 33.2C19 35.2 90.601 2.8 90.601 2.8z"/>
+ <path fill="#000000" d="M94.401 0.6C94.401 0.6 65.4 12.8 55.4 12.4C55.4 12.4 39 7.8 30.6 22.4C30.6 22.4 22.2 31.6 19 33.2C19 33.2 18.6 34.8 25 30.8L35.4 36C35.4 36 50.2 45.6 59.8 29.6C59.8 29.6 63.8 18.4 63.8 16.4C63.8 14.4 85 8.8 86.601 8.4C88.201 8 94.801 3.8 94.401 0.6z"/>
+ <path fill="#99cc32" d="M47 36.514C40.128 36.514 31.755 32.649 31.755 26.4C31.755 20.152 40.128 13.887 47 13.887C53.874 13.887 59.446 18.952 59.446 25.2C59.446 31.449 53.874 36.514 47 36.514z"/>
+ <path fill="#659900" d="M43.377 19.83C38.531 20.552 33.442 22.055 33.514 21.839C35.054 17.22 41.415 13.887 47 13.887C51.296 13.887 55.084 15.865 57.32 18.875C57.32 18.875 52.004 18.545 43.377 19.83z"/>
+ <path fill="#ffffff" d="M55.4 19.6C55.4 19.6 51 16.4 51 18.6C51 18.6 54.6 23 55.4 19.6z"/>
+ <path fill="#000000" d="M45.4 27.726C42.901 27.726 40.875 25.7 40.875 23.2C40.875 20.701 42.901 18.675 45.4 18.675C47.9 18.675 49.926 20.701 49.926 23.2C49.926 25.7 47.9 27.726 45.4 27.726z"/>
+ <path fill="#cc7226" d="M-58.6 14.4C-58.6 14.4 -61.8 -6.8 -59.4 -11.2C-59.4 -11.2 -48.6 -21.2 -49 -24.8C-49 -24.8 -49.4 -42.8 -50.6 -43.6C-51.8 -44.4 -59.4 -50.4 -65.4 -44C-65.4 -44 -75.8 -26 -75 -19.6L-75 -17.6C-75 -17.6 -82.6 -18 -84.2 -16C-84.2 -16 -85.4 -10.8 -86.6 -10.4C-86.6 -10.4 -89.4 -8 -87.4 -5.2C-87.4 -5.2 -89.4 -2.8 -89 1.2L-81.4 5.2C-81.4 5.2 -79.4 19.6 -68.6 24.8C-63.764 27.129 -60.6 20.4 -58.6 14.4z"/>
+ <path fill="#ffffff" d="M-59.6 12.56C-59.6 12.56 -62.48 -6.52 -60.32 -10.48C-60.32 -10.48 -50.6 -19.48 -50.96 -22.72C-50.96 -22.72 -51.32 -38.92 -52.4 -39.64C-53.48 -40.36 -60.32 -45.76 -65.72 -40C-65.72 -40 -75.08 -23.8 -74.36 -18.04L-74.36 -16.24C-74.36 -16.24 -81.2 -16.6 -82.64 -14.8C-82.64 -14.8 -83.72 -10.12 -84.8 -9.76C-84.8 -9.76 -87.32 -7.6 -85.52 -5.08C-85.52 -5.08 -87.32 -2.92 -86.96 0.68L-80.12 4.28C-80.12 4.28 -78.32 17.24 -68.6 21.92C-64.248 24.015 -61.4 17.96 -59.6 12.56z"/>
+ <path fill="#eb955c" d="M-51.05 -42.61C-52.14 -43.47 -59.63 -49.24 -65.48 -43C-65.48 -43 -75.62 -25.45 -74.84 -19.21L-74.84 -17.26C-74.84 -17.26 -82.25 -17.65 -83.81 -15.7C-83.81 -15.7 -84.98 -10.63 -86.15 -10.24C-86.15 -10.24 -88.88 -7.9 -86.93 -5.17C-86.93 -5.17 -88.88 -2.83 -88.49 1.07L-81.08 4.97C-81.08 4.97 -79.13 19.01 -68.6 24.08C-63.886 26.35 -60.8 19.79 -58.85 13.94C-58.85 13.94 -61.97 -6.73 -59.63 -11.02C-59.63 -11.02 -49.1 -20.77 -49.49 -24.28C-49.49 -24.28 -49.88 -41.83 -51.05 -42.61z"/>
+ <path fill="#f2b892" d="M-51.5 -41.62C-52.48 -42.54 -59.86 -48.08 -65.56 -42C-65.56 -42 -75.44 -24.9 -74.68 -18.82L-74.68 -16.92C-74.68 -16.92 -81.9 -17.3 -83.42 -15.4C-83.42 -15.4 -84.56 -10.46 -85.7 -10.08C-85.7 -10.08 -88.36 -7.8 -86.46 -5.14C-86.46 -5.14 -88.36 -2.86 -87.98 0.94L-80.76 4.74C-80.76 4.74 -78.86 18.42 -68.6 23.36C-64.006 25.572 -61 19.18 -59.1 13.48C-59.1 13.48 -62.14 -6.66 -59.86 -10.84C-59.86 -10.84 -49.6 -20.34 -49.98 -23.76C-49.98 -23.76 -50.36 -40.86 -51.5 -41.62z"/>
+ <path fill="#f8dcc8" d="M-51.95 -40.63C-52.82 -41.61 -60.09 -46.92 -65.64 -41C-65.64 -41 -75.26 -24.35 -74.52 -18.43L-74.52 -16.58C-74.52 -16.58 -81.55 -16.95 -83.03 -15.1C-83.03 -15.1 -84.14 -10.29 -85.25 -9.92C-85.25 -9.92 -87.84 -7.7 -85.99 -5.11C-85.99 -5.11 -87.84 -2.89 -87.47 0.81L-80.44 4.51C-80.44 4.51 -78.59 17.83 -68.6 22.64C-64.127 24.794 -61.2 18.57 -59.35 13.02C-59.35 13.02 -62.31 -6.59 -60.09 -10.66C-60.09 -10.66 -50.1 -19.91 -50.47 -23.24C-50.47 -23.24 -50.84 -39.89 -51.95 -40.63z"/>
+ <path fill="#ffffff" d="M-59.6 12.46C-59.6 12.46 -62.48 -6.52 -60.32 -10.48C-60.32 -10.48 -50.6 -19.48 -50.96 -22.72C-50.96 -22.72 -51.32 -38.92 -52.4 -39.64C-53.16 -40.68 -60.32 -45.76 -65.72 -40C-65.72 -40 -75.08 -23.8 -74.36 -18.04L-74.36 -16.24C-74.36 -16.24 -81.2 -16.6 -82.64 -14.8C-82.64 -14.8 -83.72 -10.12 -84.8 -9.76C-84.8 -9.76 -87.32 -7.6 -85.52 -5.08C-85.52 -5.08 -87.32 -2.92 -86.96 0.68L-80.12 4.28C-80.12 4.28 -78.32 17.24 -68.6 21.92C-64.248 24.015 -61.4 17.86 -59.6 12.46z"/>
+ <path fill="#cccccc" d="M-62.7 6.2C-62.7 6.2 -84.3 -4 -85.2 -4.8C-85.2 -4.8 -76.1 3.4 -75.3 3.4C-74.5 3.4 -62.7 6.2 -62.7 6.2z"/>
+ <path fill="#000000" d="M-79.8 0C-79.8 0 -61.4 3.6 -61.4 8C-61.4 10.912 -61.643 24.331 -67 22.8C-75.4 20.4 -71.8 6 -79.8 0z"/>
+ <path fill="#99cc32" d="M-71.4 3.8C-71.4 3.8 -62.422 5.274 -61.4 8C-60.8 9.6 -60.137 17.908 -65.6 19C-70.152 19.911 -72.382 9.69 -71.4 3.8z"/>
+ <path fill="#000000" d="M14.595 46.349C14.098 44.607 15.409 44.738 17.2 44.2C19.2 43.6 31.4 39.8 32.2 37.2C33 34.6 46.2 39 46.2 39C48 39.8 52.4 42.4 52.4 42.4C57.2 43.6 63.8 44 63.8 44C66.2 45 69.6 47.8 69.6 47.8C84.2 58 96.601 50.8 96.601 50.8C116.601 44.2 110.601 27 110.601 27C107.601 18 110.801 14.6 110.801 14.6C111.001 10.8 118.201 17.2 118.201 17.2C120.801 21.4 121.601 26.4 121.601 26.4C129.601 37.6 126.201 19.8 126.201 19.8C126.401 18.8 123.601 15.2 123.601 14C123.601 12.8 121.801 9.4 121.801 9.4C118.801 6 121.201 -1 121.201 -1C123.001 -14.8 120.801 -13 120.801 -13C119.601 -14.8 110.401 -4.8 110.401 -4.8C108.201 -1.4 102.201 0.2 102.201 0.2C99.401 2 96.001 0.6 96.001 0.6C93.401 0.2 87.801 7.2 87.801 7.2C90.601 7 93.001 11.4 95.401 11.6C97.801 11.8 99.601 9.2 101.201 8.6C102.801 8 105.601 13.8 105.601 13.8C106.001 16.4 100.401 21.2 100.401 21.2C100.001 25.8 98.401 24.2 98.401 24.2C95.401 23.6 94.201 27.4 93.201 32C92.201 36.6 88.001 37 88.001 37C86.401 44.4 85.2 41.4 85.2 41.4C85 35.8 79 41.6 79 41.6C77.8 43.6 73.2 41.4 73.2 41.4C66.4 39.4 68.8 37.4 68.8 37.4C70.6 35.2 81.8 37.4 81.8 37.4C84 35.8 76 31.8 76 31.8C75.4 30 76.4 25.6 76.4 25.6C77.6 22.4 84.4 16.8 84.4 16.8C93.801 15.6 91.001 14 91.001 14C84.801 8.8 79 16.4 79 16.4C76.8 22.6 59.4 37.6 59.4 37.6C54.6 41 57.2 34.2 53.2 37.6C49.2 41 28.6 32 28.6 32C17.038 30.807 14.306 46.549 10.777 43.429C10.777 43.429 16.195 51.949 14.595 46.349z"/>
+ <path fill="#000000" d="M209.401 -120C209.401 -120 183.801 -112 181.001 -93.2C181.001 -93.2 178.601 -70.4 199.001 -52.8C199.001 -52.8 199.401 -46.4 201.401 -43.2C201.401 -43.2 199.801 -38.4 218.601 -46L245.801 -54.4C245.801 -54.4 252.201 -56.8 257.401 -65.6C262.601 -74.4 277.801 -93.2 274.201 -118.4C274.201 -118.4 275.401 -129.6 269.401 -130C269.401 -130 261.001 -131.6 253.801 -124C253.801 -124 247.001 -120.8 244.601 -121.2L209.401 -120z"/>
+ <path fill="#000000" d="M264.022 -120.99C264.022 -120.99 266.122 -129.92 261.282 -125.08C261.282 -125.08 254.242 -119.36 246.761 -119.36C246.761 -119.36 232.241 -117.16 227.841 -103.96C227.841 -103.96 223.881 -77.12 231.801 -71.4C231.801 -71.4 236.641 -63.92 243.681 -70.52C250.722 -77.12 266.222 -107.35 264.022 -120.99z"/>
+ <path fill="#323232" d="M263.648 -120.632C263.648 -120.632 265.738 -129.376 260.986 -124.624C260.986 -124.624 254.074 -119.008 246.729 -119.008C246.729 -119.008 232.473 -116.848 228.153 -103.888C228.153 -103.888 224.265 -77.536 232.041 -71.92C232.041 -71.92 236.793 -64.576 243.705 -71.056C250.618 -77.536 265.808 -107.24 263.648 -120.632z"/>
+ <path fill="#666666" d="M263.274 -120.274C263.274 -120.274 265.354 -128.832 260.69 -124.168C260.69 -124.168 253.906 -118.656 246.697 -118.656C246.697 -118.656 232.705 -116.536 228.465 -103.816C228.465 -103.816 224.649 -77.952 232.281 -72.44C232.281 -72.44 236.945 -65.232 243.729 -71.592C250.514 -77.952 265.394 -107.13 263.274 -120.274z"/>
+ <path fill="#999999" d="M262.9 -119.916C262.9 -119.916 264.97 -128.288 260.394 -123.712C260.394 -123.712 253.738 -118.304 246.665 -118.304C246.665 -118.304 232.937 -116.224 228.777 -103.744C228.777 -103.744 225.033 -78.368 232.521 -72.96C232.521 -72.96 237.097 -65.888 243.753 -72.128C250.41 -78.368 264.98 -107.02 262.9 -119.916z"/>
+ <path fill="#cccccc" d="M262.526 -119.558C262.526 -119.558 264.586 -127.744 260.098 -123.256C260.098 -123.256 253.569 -117.952 246.633 -117.952C246.633 -117.952 233.169 -115.912 229.089 -103.672C229.089 -103.672 225.417 -78.784 232.761 -73.48C232.761 -73.48 237.249 -66.544 243.777 -72.664C250.305 -78.784 264.566 -106.91 262.526 -119.558z"/>
+ <path fill="#ffffff" d="M262.151 -119.2C262.151 -119.2 264.201 -127.2 259.801 -122.8C259.801 -122.8 253.401 -117.6 246.601 -117.6C246.601 -117.6 233.401 -115.6 229.401 -103.6C229.401 -103.6 225.801 -79.2 233.001 -74C233.001 -74 237.401 -67.2 243.801 -73.2C250.201 -79.2 264.151 -106.8 262.151 -119.2z"/>
+ <path fill="#992600" d="M50.6 84C50.6 84 30.2 64.8 22.2 64C22.2 64 -12.2 60 -27 78C-27 78 -9.4 57.6 18.2 63.2C18.2 63.2 -3.4 58.8 -15.8 62C-15.8 62 -32.6 62 -42.2 76L-45 80.8C-45 80.8 -41 66 -22.6 60C-22.6 60 0.2 55.2 11 60C11 60 -10.6 53.2 -20.6 55.2C-20.6 55.2 -51 52.8 -63.8 79.2C-63.8 79.2 -59.8 64.8 -45 57.6C-45 57.6 -31.4 48.8 -11 51.6C-11 51.6 3.4 54.8 8.6 57.2C13.8 59.6 12.6 56.8 4.2 52C4.2 52 -1.4 42 -15.4 42.4C-15.4 42.4 -58.2 46 -68.6 58C-68.6 58 -55 46.8 -44.6 44C-44.6 44 -22.2 36 -13.8 36.8C-13.8 36.8 11 37.8 18.6 33.8C18.6 33.8 7.4 38.8 10.6 42C13.8 45.2 20.6 52.8 20.6 54C20.6 55.2 44.8 77.3 48.4 81.7L50.6 84z"/>
+ <path fill="#cccccc" d="M189 278C189 278 173.5 241.5 161 232C161 232 187 248 190.5 266C190.5 266 190.5 276 189 278z"/>
+ <path fill="#cccccc" d="M236 285.5C236 285.5 209.5 230.5 191 206.5C191 206.5 234.5 244 239.5 270.5L240 276L237 273.5C237 273.5 236.5 282.5 236 285.5z"/>
+ <path fill="#cccccc" d="M292.5 237C292.5 237 230 177.5 228.5 175C228.5 175 289 241 292 248.5C292 248.5 290 239.5 292.5 237z"/>
+ <path fill="#cccccc" d="M104 280.5C104 280.5 123.5 228.5 142.5 251C142.5 251 157.5 261 157 264C157 264 153 257.5 135 258C135 258 116 255 104 280.5z"/>
+ <path fill="#cccccc" d="M294.5 153C294.5 153 249.5 124.5 242 123C230.193 120.639 291.5 152 296.5 162.5C296.5 162.5 298.5 160 294.5 153z"/>
+ <path fill="#000000" d="M143.801 259.601C143.801 259.601 164.201 257.601 171.001 250.801L175.401 254.401L193.001 216.001L196.601 221.201C196.601 221.201 211.001 206.401 210.201 198.401C209.401 190.401 223.001 204.401 223.001 204.401C223.001 204.401 222.201 192.801 229.401 199.601C229.401 199.601 227.001 184.001 235.401 192.001C235.401 192.001 224.864 161.844 247.401 187.601C253.001 194.001 248.601 187.201 248.601 187.201C248.601 187.201 222.601 139.201 244.201 153.601C244.201 153.601 246.201 130.801 245.001 126.401C243.801 122.001 241.801 99.6 237.001 94.4C232.201 89.2 237.401 87.6 243.001 92.8C243.001 92.8 231.801 68.8 245.001 80.8C245.001 80.8 241.401 65.6 237.001 62.8C237.001 62.8 231.401 45.6 246.601 56.4C246.601 56.4 242.201 44 239.001 40.8C239.001 40.8 227.401 13.2 234.601 18L239.001 21.6C239.001 21.6 232.201 7.6 238.601 12C245.001 16.4 245.001 16 245.001 16C245.001 16 223.801 -17.2 244.201 0.4C244.201 0.4 236.042 -13.518 232.601 -20.4C232.601 -20.4 213.801 -40.8 228.201 -34.4L233.001 -32.8C233.001 -32.8 224.201 -42.8 216.201 -44.4C208.201 -46 218.601 -52.4 225.001 -50.4C231.401 -48.4 247.001 -40.8 247.001 -40.8C247.001 -40.8 259.801 -22 263.801 -21.6C263.801 -21.6 243.801 -29.2 249.801 -21.2C249.801 -21.2 264.201 -7.2 257.001 -7.6C257.001 -7.6 251.001 -0.4 255.801 8.4C255.801 8.4 237.342 -9.991 252.201 15.6L259.001 32C259.001 32 234.601 7.2 245.801 29.2C245.801 29.2 263.001 52.8 265.001 53.2C267.001 53.6 271.401 62.4 271.401 62.4L267.001 60.4L272.201 69.2C272.201 69.2 261.001 57.2 267.001 70.4L272.601 84.8C272.601 84.8 252.201 62.8 265.801 92.4C265.801 92.4 249.401 87.2 258.201 104.4C258.201 104.4 256.601 120.401 257.001 125.601C257.401 130.801 258.601 159.201 254.201 167.201C249.801 175.201 260.201 194.401 262.201 198.401C264.201 202.401 267.801 213.201 259.001 204.001C250.201 194.801 254.601 200.401 256.601 209.201C258.601 218.001 264.601 233.601 263.801 239.201C263.801 239.201 262.601 240.401 259.401 236.801C259.401 236.801 244.601 214.001 246.201 228.401C246.201 228.401 245.001 236.401 241.801 245.201C241.801 245.201 238.601 256.001 238.601 247.201C238.601 247.201 235.401 230.401 232.601 238.001C229.801 245.601 226.201 251.601 223.401 254.001C220.601 256.401 215.401 233.601 214.201 244.001C214.201 244.001 202.201 231.601 197.401 248.001L185.801 264.401C185.801 264.401 185.401 252.001 184.201 258.001C184.201 258.001 154.201 264.001 143.801 259.601z"/>
+ <path fill="#000000" d="M109.401 -97.2C109.401 -97.2 97.801 -105.2 93.801 -104.8C89.801 -104.4 121.401 -113.6 162.601 -86C162.601 -86 167.401 -83.2 171.001 -83.6C171.001 -83.6 174.201 -81.2 171.401 -77.6C171.401 -77.6 162.601 -68 173.801 -56.8C173.801 -56.8 192.201 -50 186.601 -58.8C186.601 -58.8 197.401 -54.8 199.801 -50.8C202.201 -46.8 201.001 -50.8 201.001 -50.8C201.001 -50.8 194.601 -58 188.601 -63.2C188.601 -63.2 183.401 -65.2 180.601 -73.6C177.801 -82 175.401 -92 179.801 -95.2C179.801 -95.2 175.801 -90.8 176.601 -94.8C177.401 -98.8 181.001 -102.4 182.601 -102.8C184.201 -103.2 200.601 -119 207.401 -119.4C207.401 -119.4 198.201 -118 195.201 -119C192.201 -120 165.601 -131.4 159.601 -132.6C159.601 -132.6 142.801 -139.2 154.801 -137.2C154.801 -137.2 190.601 -133.4 208.801 -120.2C208.801 -120.2 201.601 -128.6 183.201 -135.6C183.201 -135.6 161.001 -148.2 125.801 -143.2C125.801 -143.2 108.001 -140 100.201 -138.2C100.201 -138.2 97.601 -138.8 97.001 -139.2C96.401 -139.6 84.6 -148.6 57 -141.6C57 -141.6 40 -137 31.4 -132.2C31.4 -132.2 16.2 -131 12.6 -127.8C12.6 -127.8 -6 -113.2 -8 -112.4C-10 -111.6 -21.4 -104 -22.2 -103.6C-22.2 -103.6 2.4 -110.2 4.8 -112.6C7.2 -115 24.6 -117.6 27 -116.2C29.4 -114.8 37.8 -115.4 28.2 -114.8C28.2 -114.8 103.801 -100 104.601 -98C105.401 -96 109.401 -97.2 109.401 -97.2z"/>
+ <path fill="#cc7226" d="M180.801 -106.4C180.801 -106.4 170.601 -113.8 168.601 -113.8C166.601 -113.8 154.201 -124 150.001 -123.6C145.801 -123.2 133.601 -133.2 106.201 -125C106.201 -125 105.601 -127 109.201 -127.8C109.201 -127.8 115.601 -130 116.001 -130.6C116.001 -130.6 136.201 -134.8 143.401 -131.2C143.401 -131.2 152.601 -128.6 158.801 -122.4C158.801 -122.4 170.001 -119.2 173.201 -120.2C173.201 -120.2 182.001 -118 182.401 -116.2C182.401 -116.2 188.201 -113.2 186.401 -110.6C186.401 -110.6 186.801 -109 180.801 -106.4z"/>
+ <path fill="#cc7226" d="M168.33 -108.509C169.137 -107.877 170.156 -107.779 170.761 -106.97C170.995 -106.656 170.706 -106.33 170.391 -106.233C169.348 -105.916 168.292 -106.486 167.15 -105.898C166.748 -105.691 166.106 -105.873 165.553 -106.022C163.921 -106.463 162.092 -106.488 160.401 -105.8C158.416 -106.929 156.056 -106.345 153.975 -107.346C153.917 -107.373 153.695 -107.027 153.621 -107.054C150.575 -108.199 146.832 -107.916 144.401 -110.2C141.973 -110.612 139.616 -111.074 137.188 -111.754C135.37 -112.263 133.961 -113.252 132.341 -114.084C130.964 -114.792 129.507 -115.314 127.973 -115.686C126.11 -116.138 124.279 -116.026 122.386 -116.546C122.293 -116.571 122.101 -116.227 122.019 -116.254C121.695 -116.362 121.405 -116.945 121.234 -116.892C119.553 -116.37 118.065 -117.342 116.401 -117C115.223 -118.224 113.495 -117.979 111.949 -118.421C108.985 -119.269 105.831 -117.999 102.801 -119C106.914 -120.842 111.601 -119.61 115.663 -121.679C117.991 -122.865 120.653 -121.763 123.223 -122.523C123.71 -122.667 124.401 -122.869 124.801 -122.2C124.935 -122.335 125.117 -122.574 125.175 -122.546C127.625 -121.389 129.94 -120.115 132.422 -119.049C132.763 -118.903 133.295 -119.135 133.547 -118.933C135.067 -117.717 137.01 -117.82 138.401 -116.6C140.099 -117.102 141.892 -116.722 143.621 -117.346C143.698 -117.373 143.932 -117.032 143.965 -117.054C145.095 -117.802 146.25 -117.531 147.142 -117.227C147.48 -117.112 148.143 -116.865 148.448 -116.791C149.574 -116.515 150.43 -116.035 151.609 -115.852C151.723 -115.834 151.908 -116.174 151.98 -116.146C153.103 -115.708 154.145 -115.764 154.801 -114.6C154.936 -114.735 155.101 -114.973 155.183 -114.946C156.21 -114.608 156.859 -113.853 157.96 -113.612C158.445 -113.506 159.057 -112.88 159.633 -112.704C162.025 -111.973 163.868 -110.444 166.062 -109.549C166.821 -109.239 167.697 -109.005 168.33 -108.509z"/>
+ <path fill="#cc7226" d="M91.696 -122.739C89.178 -124.464 86.81 -125.57 84.368 -127.356C84.187 -127.489 83.827 -127.319 83.625 -127.441C82.618 -128.05 81.73 -128.631 80.748 -129.327C80.209 -129.709 79.388 -129.698 78.88 -129.956C76.336 -131.248 73.707 -131.806 71.2 -133C71.882 -133.638 73.004 -133.394 73.6 -134.2C73.795 -133.92 74.033 -133.636 74.386 -133.827C76.064 -134.731 77.914 -134.884 79.59 -134.794C81.294 -134.702 83.014 -134.397 84.789 -134.125C85.096 -134.078 85.295 -133.555 85.618 -133.458C87.846 -132.795 90.235 -133.32 92.354 -132.482C93.945 -131.853 95.515 -131.03 96.754 -129.755C97.006 -129.495 96.681 -129.194 96.401 -129C96.789 -129.109 97.062 -128.903 97.173 -128.59C97.257 -128.351 97.257 -128.049 97.173 -127.81C97.061 -127.498 96.782 -127.397 96.408 -127.346C95.001 -127.156 96.773 -128.536 96.073 -128.088C94.8 -127.274 95.546 -125.868 94.801 -124.6C94.521 -124.794 94.291 -125.012 94.401 -125.4C94.635 -124.878 94.033 -124.588 93.865 -124.272C93.48 -123.547 92.581 -122.132 91.696 -122.739z"/>
+ <path fill="#cc7226" d="M59.198 -115.391C56.044 -116.185 52.994 -116.07 49.978 -117.346C49.911 -117.374 49.688 -117.027 49.624 -117.054C48.258 -117.648 47.34 -118.614 46.264 -119.66C45.351 -120.548 43.693 -120.161 42.419 -120.648C42.095 -120.772 41.892 -121.284 41.591 -121.323C40.372 -121.48 39.445 -122.429 38.4 -123C40.736 -123.795 43.147 -123.764 45.609 -124.148C45.722 -124.166 45.867 -123.845 46 -123.845C46.136 -123.845 46.266 -124.066 46.4 -124.2C46.595 -123.92 46.897 -123.594 47.154 -123.848C47.702 -124.388 48.258 -124.198 48.798 -124.158C48.942 -124.148 49.067 -123.845 49.2 -123.845C49.336 -123.845 49.467 -124.156 49.6 -124.156C49.736 -124.155 49.867 -123.845 50 -123.845C50.136 -123.845 50.266 -124.066 50.4 -124.2C51.092 -123.418 51.977 -123.972 52.799 -123.793C53.837 -123.566 54.104 -122.418 55.178 -122.12C59.893 -120.816 64.03 -118.671 68.393 -116.584C68.7 -116.437 68.91 -116.189 68.8 -115.8C69.067 -115.8 69.38 -115.888 69.57 -115.756C70.628 -115.024 71.669 -114.476 72.366 -113.378C72.582 -113.039 72.253 -112.632 72.02 -112.684C67.591 -113.679 63.585 -114.287 59.198 -115.391z"/>
+ <path fill="#cc7226" d="M45.338 -71.179C43.746 -72.398 43.162 -74.429 42.034 -76.221C41.82 -76.561 42.094 -76.875 42.411 -76.964C42.971 -77.123 43.514 -76.645 43.923 -76.443C45.668 -75.581 47.203 -74.339 49.2 -74.2C51.19 -71.966 55.45 -71.581 55.457 -68.2C55.458 -67.341 54.03 -68.259 53.6 -67.4C51.149 -68.403 48.76 -68.3 46.38 -69.767C45.763 -70.148 46.093 -70.601 45.338 -71.179z"/>
+ <path fill="#cc7226" d="M17.8 -123.756C17.935 -123.755 24.966 -123.522 24.949 -123.408C24.904 -123.099 17.174 -122.05 16.81 -122.22C16.646 -122.296 9.134 -119.866 9 -120C9.268 -120.135 17.534 -123.756 17.8 -123.756z"/>
+ <path fill="#000000" d="M33.2 -114C33.2 -114 18.4 -112.2 14 -111C9.6 -109.8 -9 -102.2 -12 -100.2C-12 -100.2 -25.4 -94.8 -42.4 -74.8C-42.4 -74.8 -34.8 -78.2 -32.6 -81C-32.6 -81 -19 -93.6 -19.2 -91C-19.2 -91 -7 -99.6 -7.6 -97.4C-7.6 -97.4 16.8 -108.6 14.8 -105.4C14.8 -105.4 36.4 -110 35.4 -108C35.4 -108 54.2 -103.6 51.4 -103.4C51.4 -103.4 45.6 -102.2 52 -98.6C52 -98.6 48.6 -94.2 43.2 -98.2C37.8 -102.2 40.8 -100 35.8 -99C35.8 -99 33.2 -98.2 28.6 -102.2C28.6 -102.2 23 -106.8 14.2 -103.2C14.2 -103.2 -16.4 -90.6 -18.4 -90C-18.4 -90 -22 -87.2 -24.4 -83.6C-24.4 -83.6 -30.2 -79.2 -33.2 -77.8C-33.2 -77.8 -46 -66.2 -47.2 -64.8C-47.2 -64.8 -50.6 -59.6 -51.4 -59.2C-51.4 -59.2 -45 -63 -43 -65C-43 -65 -29 -75 -23.6 -75.8C-23.6 -75.8 -19.2 -78.8 -18.4 -80.2C-18.4 -80.2 -4 -89.4 0.2 -89.4C0.2 -89.4 9.4 -84.2 11.8 -91.2C11.8 -91.2 17.6 -93 23.2 -91.8C23.2 -91.8 26.4 -94.4 25.6 -96.6C25.6 -96.6 27.2 -98.4 28.2 -94.6C28.2 -94.6 31.6 -91 36.4 -93C36.4 -93 40.4 -93.2 38.4 -90.8C38.4 -90.8 34 -87 22.2 -86.8C22.2 -86.8 9.8 -86.2 -6.6 -78.6C-6.6 -78.6 -36.4 -68.2 -45.6 -57.8C-45.6 -57.8 -52 -49 -57.4 -47.8C-57.4 -47.8 -63.2 -47 -69.2 -39.6C-69.2 -39.6 -59.4 -45.4 -50.4 -45.4C-50.4 -45.4 -46.4 -47.8 -50.2 -44.2C-50.2 -44.2 -53.8 -36.6 -52.2 -31.2C-52.2 -31.2 -52.8 -26 -53.6 -24.4C-53.6 -24.4 -61.4 -11.6 -61.4 -9.2C-61.4 -6.8 -60.2 3 -59.8 3.6C-59.4 4.2 -60.8 2 -57 4.4C-53.2 6.8 -50.4 8.4 -49.6 11.2C-48.8 14 -51.6 5.8 -51.8 4C-52 2.2 -56.2 -5 -55.4 -7.4C-55.4 -7.4 -54.4 -6.4 -53.6 -5C-53.6 -5 -54.2 -5.6 -53.6 -9.2C-53.6 -9.2 -52.8 -14.4 -51.4 -17.6C-50 -20.8 -48 -24.6 -47.6 -25.4C-47.2 -26.2 -47.2 -32 -45.8 -29.4L-42.4 -26.8C-42.4 -26.8 -45.2 -29.4 -43 -31.6C-43 -31.6 -44 -37.2 -42.2 -39.8C-42.2 -39.8 -35.2 -48.2 -33.6 -49.2C-32 -50.2 -33.4 -49.8 -33.4 -49.8C-33.4 -49.8 -27.4 -54 -33.2 -52.4C-33.2 -52.4 -37.2 -50.8 -40.2 -50.8C-40.2 -50.8 -47.8 -48.8 -43.8 -53C-39.8 -57.2 -29.8 -62.6 -26 -62.4L-25.2 -60.8L-14 -63.2L-15.2 -62.4C-15.2 -62.4 -15.4 -62.6 -11.2 -63C-7 -63.4 -1.2 -62 0.2 -63.8C1.6 -65.6 5 -66.6 4.6 -65.2C4.2 -63.8 4 -61.8 4 -61.8C4 -61.8 9 -67.6 8.4 -65.4C7.8 -63.2 -0.4 -58 -1.8 -51.8L8.6 -60L12.2 -63C12.2 -63 15.8 -60.8 16 -62.4C16.2 -64 20.8 -69.8 22 -69.6C23.2 -69.4 25.2 -72.2 25 -69.6C24.8 -67 32.4 -61.6 32.4 -61.6C32.4 -61.6 35.6 -63.4 37 -62C38.4 -60.6 42.6 -81.8 42.6 -81.8L67.6 -92.4L111.201 -95.8L94.201 -102.6L33.2 -114z"/>
+ <path stroke="#4c0000" stroke-width="2" d="M51.4 85C51.4 85 36.4 68.2 28 65.6C28 65.6 14.6 58.8 -10 66.6"/>
+ <path stroke="#4c0000" stroke-width="2" d="M24.8 64.2C24.8 64.2 -0.4 56.2 -15.8 60.4C-15.8 60.4 -34.2 62.4 -42.6 76.2"/>
+ <path stroke="#4c0000" stroke-width="2" d="M21.2 63C21.2 63 4.2 55.8 -10.6 53.6C-10.6 53.6 -27.2 51 -43.8 58.2C-43.8 58.2 -56 64.2 -61.4 74.4"/>
+ <path stroke="#4c0000" stroke-width="2" d="M22.2 63.4C22.2 63.4 6.8 52.4 5.8 51C5.8 51 -1.2 40 -14.2 39.6C-14.2 39.6 -35.6 40.4 -52.8 48.4"/>
+ <path fill="#000000" d="M20.895 54.407C22.437 55.87 49.4 84.8 49.4 84.8C84.6 121.401 56.6 87.2 56.6 87.2C49 82.4 39.8 63.6 39.8 63.6C38.6 60.8 53.8 70.8 53.8 70.8C57.8 71.6 71.4 90.8 71.4 90.8C64.6 88.4 69.4 95.6 69.4 95.6C72.2 97.6 92.601 113.201 92.601 113.201C96.201 117.201 100.201 118.801 100.201 118.801C114.201 113.601 107.801 126.801 107.801 126.801C110.201 133.601 115.801 122.001 115.801 122.001C127.001 105.2 110.601 107.601 110.601 107.601C80.6 110.401 73.8 94.4 73.8 94.4C71.4 92 80.2 94.4 80.2 94.4C88.601 96.4 73 82 73 82C75.4 82 84.6 88.8 84.6 88.8C95.001 98 97.001 96 97.001 96C115.001 87.2 125.401 94.8 125.401 94.8C127.401 96.4 121.801 103.2 123.401 108.401C125.001 113.601 129.801 126.001 129.801 126.001C127.401 127.601 127.801 138.401 127.801 138.401C144.601 161.601 135.001 159.601 135.001 159.601C119.401 159.201 134.201 166.801 134.201 166.801C137.401 168.801 146.201 176.001 146.201 176.001C143.401 174.801 141.801 180.001 141.801 180.001C146.601 184.001 143.801 188.801 143.801 188.801C137.801 190.001 136.601 194.001 136.601 194.001C143.401 202.001 133.401 202.401 133.401 202.401C137.001 206.801 132.201 218.801 132.201 218.801C127.401 218.801 121.001 224.401 121.001 224.401C123.401 229.201 113.001 234.801 113.001 234.801C104.601 236.401 107.401 243.201 107.401 243.201C99.401 249.201 97.001 265.201 97.001 265.201C96.201 275.601 93.801 278.801 99.001 276.801C104.201 274.801 103.401 262.401 103.401 262.401C98.601 246.801 141.401 230.801 141.401 230.801C145.401 229.201 146.201 224.001 146.201 224.001C148.201 224.401 157.001 232.001 157.001 232.001C164.601 243.201 165.001 234.001 165.001 234.001C166.201 230.401 164.601 224.401 164.601 224.401C170.601 202.801 156.601 196.401 156.601 196.401C146.601 162.801 160.601 171.201 160.601 171.201C163.401 176.801 174.201 182.001 174.201 182.001L177.801 179.601C176.201 174.801 184.601 168.801 184.601 168.801C187.401 175.201 193.401 167.201 193.401 167.201C197.001 142.801 209.401 157.201 209.401 157.201C213.401 158.401 214.601 151.601 214.601 151.601C218.201 141.201 214.601 127.601 214.601 127.601C218.201 127.201 227.801 133.201 227.801 133.201C230.601 129.601 221.401 112.801 225.401 115.201C229.401 117.601 233.801 119.201 233.801 119.201C234.601 117.201 224.601 104.801 224.601 104.801C220.201 102 215.001 81.6 215.001 81.6C222.201 85.2 212.201 70 212.201 70C212.201 66.8 218.201 55.6 218.201 55.6C217.401 48.8 218.201 49.2 218.201 49.2C221.001 50.4 229.001 52 222.201 45.6C215.401 39.2 223.001 34.4 223.001 34.4C227.401 31.6 213.801 32 213.801 32C208.601 27.6 209.001 23.6 209.001 23.6C217.001 25.6 202.601 11.2 200.201 7.6C197.801 4 207.401 -1.2 207.401 -1.2C220.601 -4.8 209.001 -8 209.001 -8C189.401 -7.6 200.201 -18.4 200.201 -18.4C206.201 -18 204.601 -20.4 204.601 -20.4C199.401 -21.6 189.801 -28 189.801 -28C185.801 -31.6 189.401 -30.8 189.401 -30.8C206.201 -29.6 177.401 -40.8 177.401 -40.8C185.401 -40.8 167.401 -51.2 167.401 -51.2C165.401 -52.8 162.201 -60.4 162.201 -60.4C156.201 -65.6 151.401 -72.4 151.401 -72.4C151.001 -76.8 146.201 -81.6 146.201 -81.6C134.601 -95.2 129.001 -94.8 129.001 -94.8C114.201 -98.4 109.001 -97.6 109.001 -97.6L56.2 -93.2C29.8 -80.4 37.6 -59.4 37.6 -59.4C44 -51 53.2 -54.8 53.2 -54.8C57.8 -61 69.4 -58.8 69.4 -58.8C89.801 -55.6 87.201 -59.2 87.201 -59.2C84.801 -63.8 68.6 -70 68.4 -70.6C68.2 -71.2 59.4 -74.6 59.4 -74.6C56.4 -75.8 52 -85 52 -85C48.8 -88.4 64.6 -82.6 64.6 -82.6C63.4 -81.6 70.8 -77.6 70.8 -77.6C88.201 -78.6 98.801 -67.8 98.801 -67.8C109.601 -51.2 109.801 -59.4 109.801 -59.4C112.601 -68.8 100.801 -90 100.801 -90C101.201 -92 109.401 -85.4 109.401 -85.4C110.801 -87.4 111.601 -81.6 111.601 -81.6C111.801 -79.2 115.601 -71.2 115.601 -71.2C118.401 -58.2 122.001 -65.6 122.001 -65.6L126.601 -56.2C128.001 -53.6 122.001 -46 122.001 -46C121.801 -43.2 122.601 -43.4 117.001 -35.8C111.401 -28.2 114.801 -23.8 114.801 -23.8C113.401 -17.2 122.201 -17.6 122.201 -17.6C124.801 -15.4 128.201 -15.4 128.201 -15.4C130.001 -13.4 132.401 -14 132.401 -14C134.001 -17.8 140.201 -15.8 140.201 -15.8C141.601 -18.2 149.801 -18.6 149.801 -18.6C150.801 -21.2 151.201 -22.8 154.601 -23.4C158.001 -24 133.401 -67 133.401 -67C139.801 -67.8 131.601 -80.2 131.601 -80.2C129.401 -86.8 140.801 -72.2 143.001 -70.8C145.201 -69.4 146.201 -67.2 144.601 -67.4C143.001 -67.6 141.201 -65.4 142.601 -65.2C144.001 -65 157.001 -50 160.401 -39.8C163.801 -29.6 169.801 -25.6 176.001 -19.6C182.201 -13.6 181.401 10.6 181.401 10.6C181.001 19.4 187.001 30 187.001 30C189.001 33.8 184.801 52 184.801 52C182.801 54.2 184.201 55 184.201 55C185.201 56.2 192.001 69.4 192.001 69.4C190.201 69.2 193.801 72.8 193.801 72.8C199.001 78.8 192.601 75.8 192.601 75.8C186.601 74.2 193.601 84 193.601 84C194.801 85.8 185.801 81.2 185.801 81.2C176.601 80.6 188.201 87.8 188.201 87.8C196.801 95 185.401 90.6 185.401 90.6C180.801 88.8 184.001 95.6 184.001 95.6C187.201 97.2 204.401 104.2 204.401 104.2C204.801 108.001 201.801 113.001 201.801 113.001C202.201 117.001 200.001 120.401 200.001 120.401C198.801 128.601 198.201 129.401 198.201 129.401C194.001 129.601 186.601 143.401 186.601 143.401C184.801 146.001 174.601 158.001 174.601 158.001C172.601 165.001 154.601 157.801 154.601 157.801C148.001 161.201 150.001 157.801 150.001 157.801C149.601 155.601 154.401 149.601 154.401 149.601C161.401 147.001 158.801 136.201 158.801 136.201C162.801 134.801 151.601 132.001 151.801 130.801C152.001 129.601 157.801 128.201 157.801 128.201C165.801 126.201 161.401 123.801 161.401 123.801C160.801 119.801 163.801 114.201 163.801 114.201C175.401 113.401 163.801 97.2 163.801 97.2C153.001 89.6 152.001 83.8 152.001 83.8C164.601 75.6 156.401 63.2 156.601 59.6C156.801 56 158.001 34.4 158.001 34.4C156.001 28.2 153.001 14.6 153.001 14.6C155.201 9.4 162.601 -3.2 162.601 -3.2C165.401 -7.4 174.201 -12.2 172.001 -15.2C169.801 -18.2 162.001 -16.4 162.001 -16.4C154.201 -17.8 154.801 -12.6 154.801 -12.6C153.201 -11.6 152.401 -6.6 152.401 -6.6C151.68 1.333 142.801 7.6 142.801 7.6C131.601 13.8 140.801 17.8 140.801 17.8C146.801 24.4 137.001 24.6 137.001 24.6C126.001 22.8 134.201 33 134.201 33C145.001 45.8 142.001 48.6 142.001 48.6C131.801 49.6 144.401 58.8 144.401 58.8C144.401 58.8 143.601 56.8 143.801 58.6C144.001 60.4 147.001 64.6 147.801 66.6C148.601 68.6 144.601 68.8 144.601 68.8C145.201 78.4 129.801 74.2 129.801 74.2C129.801 74.2 129.801 74.2 128.201 74.4C126.601 74.6 115.401 73.8 109.601 71.6C103.801 69.4 97.001 69.4 97.001 69.4C97.001 69.4 93.001 71.2 85.4 71C77.8 70.8 69.8 73.6 69.8 73.6C65.4 73.2 74 68.8 74.2 69C74.4 69.2 80 63.6 72 64.2C50.203 65.835 39.4 55.6 39.4 55.6C37.4 54.2 34.8 51.4 34.8 51.4C24.8 49.4 36.2 63.8 36.2 63.8C37.4 65.2 36 66.2 36 66.2C35.2 64.6 27.4 59.2 27.4 59.2C24.589 58.227 23.226 56.893 20.895 54.407z"/>
+ <path fill="#4c0000" d="M-3 42.8C-3 42.8 8.6 48.4 11.2 51.2C13.8 54 27.8 65.4 27.8 65.4C27.8 65.4 22.4 63.4 19.8 61.6C17.2 59.8 6.4 51.6 6.4 51.6C6.4 51.6 2.6 45.6 -3 42.8z"/>
+ <path fill="#99cc32" d="M-61.009 11.603C-60.672 11.455 -61.196 8.743 -61.4 8.2C-62.422 5.474 -71.4 4 -71.4 4C-71.627 5.365 -71.682 6.961 -71.576 8.599C-71.576 8.599 -66.708 14.118 -61.009 11.603z"/>
+ <path fill="#659900" d="M-61.009 11.403C-61.458 11.561 -61.024 8.669 -61.2 8.2C-62.222 5.474 -71.4 3.9 -71.4 3.9C-71.627 5.265 -71.682 6.861 -71.576 8.499C-71.576 8.499 -67.308 13.618 -61.009 11.403z"/>
+ <path fill="#000000" d="M-65.4 11.546C-66.025 11.546 -66.531 10.406 -66.531 9C-66.531 7.595 -66.025 6.455 -65.4 6.455C-64.775 6.455 -64.268 7.595 -64.268 9C-64.268 10.406 -64.775 11.546 -65.4 11.546z"/>
+ <path fill="#000000" d="M-65.4 9z"/>
+ <path fill="#000000" d="M-111 109.601C-111 109.601 -116.6 119.601 -91.8 113.601C-91.8 113.601 -77.8 112.401 -75.4 110.001C-74.2 110.801 -65.834 113.734 -63 114.401C-56.2 116.001 -47.8 106 -47.8 106C-47.8 106 -43.2 95.5 -40.4 95.5C-37.6 95.5 -40.8 97.1 -40.8 97.1C-40.8 97.1 -47.4 107.201 -47 108.801C-47 108.801 -52.2 128.801 -68.2 129.601C-68.2 129.601 -84.35 130.551 -83 136.401C-83 136.401 -74.2 134.001 -71.8 136.401C-71.8 136.401 -61 136.001 -69 142.401L-75.8 154.001C-75.8 154.001 -75.66 157.919 -85.8 154.401C-95.6 151.001 -105.9 138.101 -105.9 138.101C-105.9 138.101 -121.85 123.551 -111 109.601z"/>
+ <path fill="#e59999" d="M-112.2 113.601C-112.2 113.601 -114.2 123.201 -77.4 112.801C-77.4 112.801 -73 112.801 -70.6 113.601C-68.2 114.401 -56.2 117.201 -54.2 116.001C-54.2 116.001 -61.4 129.601 -73 128.001C-73 128.001 -86.2 129.601 -85.8 134.401C-85.8 134.401 -81.8 141.601 -77 144.001C-77 144.001 -74.2 146.401 -74.6 149.601C-75 152.801 -77.8 154.401 -79.8 155.201C-81.8 156.001 -85 152.801 -86.6 152.801C-88.2 152.801 -96.6 146.401 -101 141.601C-105.4 136.801 -113.8 124.801 -113.4 122.001C-113 119.201 -112.2 113.601 -112.2 113.601z"/>
+ <path fill="#b26565" d="M-109 131.051C-106.4 135.001 -103.2 139.201 -101 141.601C-96.6 146.401 -88.2 152.801 -86.6 152.801C-85 152.801 -81.8 156.001 -79.8 155.201C-77.8 154.401 -75 152.801 -74.6 149.601C-74.2 146.401 -77 144.001 -77 144.001C-80.066 142.468 -82.806 138.976 -84.385 136.653C-84.385 136.653 -84.2 139.201 -89.4 138.401C-94.6 137.601 -99.8 134.801 -101.4 131.601C-103 128.401 -105.4 126.001 -103.8 129.601C-102.2 133.201 -99.8 136.801 -98.2 137.201C-96.6 137.601 -97 138.801 -99.4 138.401C-101.8 138.001 -104.6 137.601 -109 132.401z"/>
+ <path fill="#992600" d="M-111.6 110.001C-111.6 110.001 -109.8 96.4 -108.6 92.4C-108.6 92.4 -109.4 85.6 -107 81.4C-104.6 77.2 -102.6 71 -99.6 65.6C-96.6 60.2 -96.4 56.2 -92.4 54.6C-88.4 53 -82.4 44.4 -79.6 43.4C-76.8 42.4 -77 43.2 -77 43.2C-77 43.2 -70.2 28.4 -56.6 32.4C-56.6 32.4 -72.8 29.6 -57 20.2C-57 20.2 -61.8 21.3 -58.5 14.3C-56.299 9.632 -56.8 16.4 -67.8 28.2C-67.8 28.2 -72.8 36.8 -78 39.8C-83.2 42.8 -95.2 49.8 -96.4 53.6C-97.6 57.4 -100.8 63.2 -102.8 64.8C-104.8 66.4 -107.6 70.6 -108 74C-108 74 -109.2 78 -110.6 79.2C-112 80.4 -112.2 83.6 -112.2 85.6C-112.2 87.6 -114.2 90.4 -114 92.8C-114 92.8 -113.2 111.801 -113.6 113.801L-111.6 110.001z"/>
+ <path fill="#ffffff" d="M-120.2 114.601C-120.2 114.601 -122.2 113.201 -126.6 119.201C-126.6 119.201 -119.3 152.201 -119.3 153.601C-119.3 153.601 -118.2 151.501 -119.5 144.301C-120.8 137.101 -121.7 124.401 -121.7 124.401L-120.2 114.601z"/>
+ <path fill="#992600" d="M-98.6 54C-98.6 54 -116.2 57.2 -115.8 86.4L-116.6 111.201C-116.6 111.201 -117.8 85.6 -119 84C-120.2 82.4 -116.2 71.2 -119.4 77.2C-119.4 77.2 -133.4 91.2 -125.4 112.401C-125.4 112.401 -123.9 115.701 -126.9 111.101C-126.9 111.101 -131.5 98.5 -130.4 92.1C-130.4 92.1 -130.2 89.9 -128.3 87.1C-128.3 87.1 -119.7 75.4 -117 73.1C-117 73.1 -115.2 58.7 -99.8 53.5C-99.8 53.5 -94.1 51.2 -98.6 54z"/>
+ <path fill="#000000" d="M40.8 -12.2C41.46 -12.554 41.451 -13.524 42.031 -13.697C43.18 -14.041 43.344 -15.108 43.862 -15.892C44.735 -17.211 44.928 -18.744 45.51 -20.235C45.782 -20.935 45.809 -21.89 45.496 -22.55C44.322 -25.031 43.62 -27.48 42.178 -29.906C41.91 -30.356 41.648 -31.15 41.447 -31.748C40.984 -33.132 39.727 -34.123 38.867 -35.443C38.579 -35.884 39.104 -36.809 38.388 -36.893C37.491 -36.998 36.042 -37.578 35.809 -36.552C35.221 -33.965 36.232 -31.442 37.2 -29C36.418 -28.308 36.752 -27.387 36.904 -26.62C37.614 -23.014 36.416 -19.662 35.655 -16.188C35.632 -16.084 35.974 -15.886 35.946 -15.824C34.724 -13.138 33.272 -10.693 31.453 -8.312C30.695 -7.32 29.823 -6.404 29.326 -5.341C28.958 -4.554 28.55 -3.588 28.8 -2.6C25.365 0.18 23.115 4.025 20.504 7.871C20.042 8.551 20.333 9.76 20.884 10.029C21.697 10.427 22.653 9.403 23.123 8.557C23.512 7.859 23.865 7.209 24.356 6.566C24.489 6.391 24.31 5.972 24.445 5.851C27.078 3.504 28.747 0.568 31.2 -1.8C33.15 -2.129 34.687 -3.127 36.435 -4.14C36.743 -4.319 37.267 -4.07 37.557 -4.265C39.31 -5.442 39.308 -7.478 39.414 -9.388C39.464 -10.272 39.66 -11.589 40.8 -12.2z"/>
+ <path fill="#000000" d="M31.959 -16.666C32.083 -16.743 31.928 -17.166 32.037 -17.382C32.199 -17.706 32.602 -17.894 32.764 -18.218C32.873 -18.434 32.71 -18.814 32.846 -18.956C35.179 -21.403 35.436 -24.427 34.4 -27.4C35.424 -28.02 35.485 -29.282 35.06 -30.129C34.207 -31.829 34.014 -33.755 33.039 -35.298C32.237 -36.567 30.659 -37.811 29.288 -36.508C28.867 -36.108 28.546 -35.321 28.824 -34.609C28.888 -34.446 29.173 -34.3 29.146 -34.218C29.039 -33.894 28.493 -33.67 28.487 -33.398C28.457 -31.902 27.503 -30.391 28.133 -29.062C28.905 -27.433 29.724 -25.576 30.4 -23.8C29.166 -21.684 30.199 -19.235 28.446 -17.358C28.31 -17.212 28.319 -16.826 28.441 -16.624C28.733 -16.138 29.139 -15.732 29.625 -15.44C29.827 -15.319 30.175 -15.317 30.375 -15.441C30.953 -15.803 31.351 -16.29 31.959 -16.666z"/>
+ <path fill="#000000" d="M94.771 -26.977C96.16 -25.185 96.45 -22.39 94.401 -21C94.951 -17.691 98.302 -19.67 100.401 -20.2C100.292 -20.588 100.519 -20.932 100.802 -20.937C101.859 -20.952 102.539 -21.984 103.601 -21.8C104.035 -23.357 105.673 -24.059 106.317 -25.439C108.043 -29.134 107.452 -33.407 104.868 -36.653C104.666 -36.907 104.883 -37.424 104.759 -37.786C104.003 -39.997 101.935 -40.312 100.001 -41C98.824 -44.875 98.163 -48.906 96.401 -52.6C94.787 -52.85 94.089 -54.589 92.752 -55.309C91.419 -56.028 90.851 -54.449 90.892 -53.403C90.899 -53.198 91.351 -52.974 91.181 -52.609C91.105 -52.445 90.845 -52.334 90.845 -52.2C90.846 -52.065 91.067 -51.934 91.201 -51.8C90.283 -50.98 88.86 -50.503 88.565 -49.358C87.611 -45.648 90.184 -42.523 91.852 -39.322C92.443 -38.187 91.707 -36.916 90.947 -35.708C90.509 -35.013 90.617 -33.886 90.893 -33.03C91.645 -30.699 93.236 -28.96 94.771 -26.977z"/>
+ <path fill="#000000" d="M57.611 -8.591C56.124 -6.74 52.712 -4.171 55.629 -2.243C55.823 -2.114 56.193 -2.11 56.366 -2.244C58.387 -3.809 60.39 -4.712 62.826 -5.294C62.95 -5.323 63.224 -4.856 63.593 -5.017C65.206 -5.72 67.216 -5.662 68.4 -7C72.167 -6.776 75.732 -7.892 79.123 -9.2C80.284 -9.648 81.554 -10.207 82.755 -10.709C84.131 -11.285 85.335 -12.213 86.447 -13.354C86.58 -13.49 86.934 -13.4 87.201 -13.4C87.161 -14.263 88.123 -14.39 88.37 -15.012C88.462 -15.244 88.312 -15.64 88.445 -15.742C90.583 -17.372 91.503 -19.39 90.334 -21.767C90.049 -22.345 89.8 -22.963 89.234 -23.439C88.149 -24.35 87.047 -23.496 86 -23.8C85.841 -23.172 85.112 -23.344 84.726 -23.146C83.867 -22.707 82.534 -23.292 81.675 -22.854C80.313 -22.159 79.072 -21.99 77.65 -21.613C77.338 -21.531 76.56 -21.627 76.4 -21C76.266 -21.134 76.118 -21.368 76.012 -21.346C74.104 -20.95 72.844 -20.736 71.543 -19.044C71.44 -18.911 70.998 -19.09 70.839 -18.955C69.882 -18.147 69.477 -16.913 68.376 -16.241C68.175 -16.118 67.823 -16.286 67.629 -16.157C66.983 -15.726 66.616 -15.085 65.974 -14.638C65.645 -14.409 65.245 -14.734 65.277 -14.99C65.522 -16.937 66.175 -18.724 65.6 -20.6C67.677 -23.12 70.194 -25.069 72 -27.8C72.015 -29.966 72.707 -32.112 72.594 -34.189C72.584 -34.382 72.296 -35.115 72.17 -35.462C71.858 -36.316 72.764 -37.382 71.92 -38.106C70.516 -39.309 69.224 -38.433 68.4 -37C66.562 -36.61 64.496 -35.917 62.918 -37.151C61.911 -37.938 61.333 -38.844 60.534 -39.9C59.549 -41.202 59.884 -42.638 59.954 -44.202C59.96 -44.33 59.645 -44.466 59.645 -44.6C59.646 -44.735 59.866 -44.866 60 -45C59.294 -45.626 59.019 -46.684 58 -47C58.305 -48.092 57.629 -48.976 56.758 -49.278C54.763 -49.969 53.086 -48.057 51.194 -47.984C50.68 -47.965 50.213 -49.003 49.564 -49.328C49.132 -49.544 48.428 -49.577 48.066 -49.311C47.378 -48.807 46.789 -48.693 46.031 -48.488C44.414 -48.052 43.136 -46.958 41.656 -46.103C40.171 -45.246 39.216 -43.809 38.136 -42.489C37.195 -41.337 37.059 -38.923 38.479 -38.423C40.322 -37.773 41.626 -40.476 43.592 -40.15C43.904 -40.099 44.11 -39.788 44 -39.4C44.389 -39.291 44.607 -39.52 44.8 -39.8C45.658 -38.781 46.822 -38.444 47.76 -37.571C48.73 -36.667 50.476 -37.085 51.491 -36.088C53.02 -34.586 52.461 -31.905 54.4 -30.6C53.814 -29.287 53.207 -28.01 52.872 -26.583C52.59 -25.377 53.584 -24.18 54.795 -24.271C56.053 -24.365 56.315 -25.124 56.8 -26.2C57.067 -25.933 57.536 -25.636 57.495 -25.42C57.038 -23.033 56.011 -21.04 55.553 -18.609C55.494 -18.292 55.189 -18.09 54.8 -18.2C54.332 -14.051 50.28 -11.657 47.735 -8.492C47.332 -7.99 47.328 -6.741 47.737 -6.338C49.14 -4.951 51.1 -6.497 52.8 -7C53.013 -8.206 53.872 -9.148 55.204 -9.092C55.46 -9.082 55.695 -9.624 56.019 -9.754C56.367 -9.892 56.869 -9.668 57.155 -9.866C58.884 -11.061 60.292 -12.167 62.03 -13.356C62.222 -13.487 62.566 -13.328 62.782 -13.436C63.107 -13.598 63.294 -13.985 63.617 -14.17C63.965 -14.37 64.207 -14.08 64.4 -13.8C63.754 -13.451 63.75 -12.494 63.168 -12.292C62.393 -12.024 61.832 -11.511 61.158 -11.064C60.866 -10.871 60.207 -11.119 60.103 -10.94C59.505 -9.912 58.321 -9.474 57.611 -8.591z"/>
+ <path fill="#000000" d="M2.2 -58C2.2 -58 -7.038 -60.872 -18.2 -35.2C-18.2 -35.2 -20.6 -30 -23 -28C-25.4 -26 -36.6 -22.4 -38.6 -18.4L-49 -2.4C-49 -2.4 -34.2 -18.4 -31 -20.8C-31 -20.8 -23 -29.2 -26.2 -22.4C-26.2 -22.4 -40.2 -11.6 -39 -2.4C-39 -2.4 -44.6 12 -45.4 14C-45.4 14 -29.4 -18 -27 -19.2C-24.6 -20.4 -23.4 -20.4 -24.6 -16.8C-25.8 -13.2 -26.2 3.2 -29 5.2C-29 5.2 -21 -15.2 -21.8 -18.4C-21.8 -18.4 -18.6 -22 -16.2 -16.8L-17.4 -0.8L-13 11.2C-13 11.2 -15.4 0 -13.8 -15.6C-13.8 -15.6 -15.8 -26 -11.8 -20.4C-7.8 -14.8 1.8 -8.8 1.8 -4C1.8 -4 -3.4 -21.6 -12.6 -26.4L-16.6 -20.4L-17.8 -22.4C-17.8 -22.4 -21.4 -23.2 -17 -30C-12.6 -36.8 -13 -37.6 -13 -37.6C-13 -37.6 -6.6 -30.4 -5 -30.4C-5 -30.4 8.2 -38 9.4 -13.6C9.4 -13.6 16.2 -28 7 -34.8C7 -34.8 -7.8 -36.8 -6.6 -42L0.6 -54.4C4.2 -59.6 2.6 -56.8 2.6 -56.8z"/>
+ <path fill="#000000" d="M-17.8 -41.6C-17.8 -41.6 -30.6 -41.6 -33.8 -36.4L-41 -26.8C-41 -26.8 -23.8 -36.8 -19.8 -38C-15.8 -39.2 -17.8 -41.6 -17.8 -41.6z"/>
+ <path fill="#000000" d="M-57.8 -35.2C-57.8 -35.2 -59.8 -34 -60.2 -31.2C-60.6 -28.4 -63 -28 -62.2 -25.2C-61.4 -22.4 -59.4 -20 -59.4 -24C-59.4 -28 -57.8 -30 -57 -31.2C-56.2 -32.4 -54.6 -36.8 -57.8 -35.2z"/>
+ <path fill="#000000" d="M-66.6 26C-66.6 26 -75 22 -78.2 18.4C-81.4 14.8 -80.948 19.966 -85.8 19.6C-91.647 19.159 -90.6 3.2 -90.6 3.2L-94.6 10.8C-94.6 10.8 -95.8 25.2 -87.8 22.8C-83.893 21.628 -82.6 23.2 -84.2 24C-85.8 24.8 -78.6 25.2 -81.4 26.8C-84.2 28.4 -69.8 23.2 -72.2 33.6L-66.6 26z"/>
+ <path fill="#000000" d="M-79.2 40.4C-79.2 40.4 -94.6 44.8 -98.2 35.2C-98.2 35.2 -103 37.6 -100.8 40.6C-98.6 43.6 -97.4 44 -97.4 44C-97.4 44 -92 45.2 -92.6 46C-93.2 46.8 -95.6 50.2 -95.6 50.2C-95.6 50.2 -85.4 44.2 -79.2 40.4z"/>
+ <path fill="#ffffff" d="M149.201 118.601C148.774 120.735 147.103 121.536 145.201 122.201C143.284 121.243 140.686 118.137 138.801 120.201C138.327 119.721 137.548 119.661 137.204 118.999C136.739 118.101 137.011 117.055 136.669 116.257C136.124 114.985 135.415 113.619 135.601 112.201C137.407 111.489 138.002 109.583 137.528 107.82C137.459 107.563 137.03 107.366 137.23 107.017C137.416 106.694 137.734 106.467 138.001 106.2C137.866 106.335 137.721 106.568 137.61 106.548C137 106.442 137.124 105.805 137.254 105.418C137.839 103.672 139.853 103.408 141.201 104.6C141.457 104.035 141.966 104.229 142.401 104.2C142.351 103.621 142.759 103.094 142.957 102.674C143.475 101.576 145.104 102.682 145.901 102.07C146.977 101.245 148.04 100.546 149.118 101.149C150.927 102.162 152.636 103.374 153.835 105.115C154.41 105.949 154.65 107.23 154.592 108.188C154.554 108.835 153.173 108.483 152.83 109.412C152.185 111.16 154.016 111.679 154.772 113.017C154.97 113.366 154.706 113.67 154.391 113.768C153.98 113.896 153.196 113.707 153.334 114.16C154.306 117.353 151.55 118.031 149.201 118.601z"/>
+ <path fill="#ffffff" d="M139.6 138.201C139.593 136.463 137.992 134.707 139.201 133.001C139.336 133.135 139.467 133.356 139.601 133.356C139.736 133.356 139.867 133.135 140.001 133.001C141.496 135.217 145.148 136.145 145.006 138.991C144.984 139.438 143.897 140.356 144.801 141.001C142.988 142.349 142.933 144.719 142.001 146.601C140.763 146.315 139.551 145.952 138.401 145.401C138.753 143.915 138.636 142.231 139.456 140.911C139.89 140.213 139.603 139.134 139.6 138.201z"/>
+ <path fill="#cccccc" d="M-26.6 129.201C-26.6 129.201 -43.458 139.337 -29.4 124.001C-20.6 114.401 -10.6 108.801 -10.6 108.801C-10.6 108.801 -0.2 104.4 3.4 103.2C7 102 22.2 96.8 25.4 96.4C28.6 96 38.2 92 45 96C51.8 100 59.8 104.4 59.8 104.4C59.8 104.4 43.4 96 39.8 98.4C36.2 100.8 29 100.4 23 103.6C23 103.6 8.2 108.001 5 110.001C1.8 112.001 -8.6 123.601 -10.2 122.801C-11.8 122.001 -9.8 121.601 -8.6 118.801C-7.4 116.001 -9.4 114.401 -17.4 120.801C-25.4 127.201 -26.6 129.201 -26.6 129.201z"/>
+ <path fill="#000000" d="M-19.195 123.234C-19.195 123.234 -17.785 110.194 -9.307 111.859C-9.307 111.859 -1.081 107.689 1.641 105.721C1.641 105.721 9.78 104.019 11.09 103.402C29.569 94.702 44.288 99.221 44.835 98.101C45.381 96.982 65.006 104.099 68.615 108.185C69.006 108.628 58.384 102.588 48.686 100.697C40.413 99.083 18.811 100.944 7.905 106.48C4.932 107.989 -4.013 113.773 -6.544 113.662C-9.075 113.55 -19.195 123.234 -19.195 123.234z"/>
+ <path fill="#cccccc" d="M-23 148.801C-23 148.801 -38.2 146.401 -21.4 144.801C-21.4 144.801 -3.4 142.801 0.6 137.601C0.6 137.601 14.2 128.401 17 128.001C19.8 127.601 49.8 120.401 50.2 118.001C50.6 115.601 56.2 115.601 57.8 116.401C59.4 117.201 58.6 118.401 55.8 119.201C53 120.001 21.8 136.401 15.4 137.601C9 138.801 -2.6 146.401 -7.4 147.601C-12.2 148.801 -23 148.801 -23 148.801z"/>
+ <path fill="#000000" d="M-3.48 141.403C-3.48 141.403 -12.062 140.574 -3.461 139.755C-3.461 139.755 5.355 136.331 7.403 133.668C7.403 133.668 14.367 128.957 15.8 128.753C17.234 128.548 31.194 124.861 31.399 123.633C31.604 122.404 65.67 109.823 70.09 113.013C73.001 115.114 63.1 113.437 53.466 117.847C52.111 118.467 18.258 133.054 14.981 133.668C11.704 134.283 5.765 138.174 3.307 138.788C0.85 139.403 -3.48 141.403 -3.48 141.403z"/>
+ <path fill="#000000" d="M-11.4 143.601C-11.4 143.601 -6.2 143.201 -7.4 144.801C-8.6 146.401 -11 145.601 -11 145.601L-11.4 143.601z"/>
+ <path fill="#000000" d="M-18.6 145.201C-18.6 145.201 -13.4 144.801 -14.6 146.401C-15.8 148.001 -18.2 147.201 -18.2 147.201L-18.6 145.201z"/>
+ <path fill="#000000" d="M-29 146.801C-29 146.801 -23.8 146.401 -25 148.001C-26.2 149.601 -28.6 148.801 -28.6 148.801L-29 146.801z"/>
+ <path fill="#000000" d="M-36.6 147.601C-36.6 147.601 -31.4 147.201 -32.6 148.801C-33.8 150.401 -36.2 149.601 -36.2 149.601L-36.6 147.601z"/>
+ <path fill="#000000" d="M1.8 108.001C1.8 108.001 6.2 108.001 5 109.601C3.8 111.201 0.6 110.801 0.6 110.801L1.8 108.001z"/>
+ <path fill="#000000" d="M-8.2 113.601C-8.2 113.601 -1.694 111.46 -4.2 114.801C-5.4 116.401 -7.8 115.601 -7.8 115.601L-8.2 113.601z"/>
+ <path fill="#000000" d="M-19.4 118.401C-19.4 118.401 -14.2 118.001 -15.4 119.601C-16.6 121.201 -19 120.401 -19 120.401L-19.4 118.401z"/>
+ <path fill="#000000" d="M-27 124.401C-27 124.401 -21.8 124.001 -23 125.601C-24.2 127.201 -26.6 126.401 -26.6 126.401L-27 124.401z"/>
+ <path fill="#000000" d="M-33.8 129.201C-33.8 129.201 -28.6 128.801 -29.8 130.401C-31 132.001 -33.4 131.201 -33.4 131.201L-33.8 129.201z"/>
+ <path fill="#000000" d="M5.282 135.598C5.282 135.598 12.203 135.066 10.606 137.195C9.009 139.325 5.814 138.26 5.814 138.26L5.282 135.598z"/>
+ <path fill="#000000" d="M15.682 130.798C15.682 130.798 22.603 130.266 21.006 132.395C19.409 134.525 16.214 133.46 16.214 133.46L15.682 130.798z"/>
+ <path fill="#000000" d="M26.482 126.398C26.482 126.398 33.403 125.866 31.806 127.995C30.209 130.125 27.014 129.06 27.014 129.06L26.482 126.398z"/>
+ <path fill="#000000" d="M36.882 121.598C36.882 121.598 43.803 121.066 42.206 123.195C40.609 125.325 37.414 124.26 37.414 124.26L36.882 121.598z"/>
+ <path fill="#000000" d="M9.282 103.598C9.282 103.598 16.203 103.066 14.606 105.195C13.009 107.325 9.014 107.06 9.014 107.06L9.282 103.598z"/>
+ <path fill="#000000" d="M19.282 100.398C19.282 100.398 26.203 99.866 24.606 101.995C23.009 104.125 18.614 103.86 18.614 103.86L19.282 100.398z"/>
+ <path fill="#000000" d="M-3.4 140.401C-3.4 140.401 1.8 140.001 0.6 141.601C-0.6 143.201 -3 142.401 -3 142.401L-3.4 140.401z"/>
+ <path fill="#992600" d="M-76.6 41.2C-76.6 41.2 -81 50 -81.4 53.2C-81.4 53.2 -80.6 44.4 -79.4 42.4C-78.2 40.4 -76.6 41.2 -76.6 41.2z"/>
+ <path fill="#992600" d="M-95 55.2C-95 55.2 -98.2 69.6 -97.8 72.4C-97.8 72.4 -99 60.8 -98.6 59.6C-98.2 58.4 -95 55.2 -95 55.2z"/>
+ <path fill="#cccccc" d="M-74.2 -19.4L-74.4 -16.2L-76.6 -16C-76.6 -16 -62.4 -3.4 -61.8 4.2C-61.8 4.2 -61 -4 -74.2 -19.4z"/>
+ <path fill="#000000" d="M-70.216 -18.135C-70.647 -18.551 -70.428 -19.296 -70.836 -19.556C-71.645 -20.072 -69.538 -20.129 -69.766 -20.845C-70.149 -22.051 -69.962 -22.072 -70.084 -23.348C-70.141 -23.946 -69.553 -25.486 -69.168 -25.926C-67.722 -27.578 -69.046 -30.51 -67.406 -32.061C-67.102 -32.35 -66.726 -32.902 -66.441 -33.32C-65.782 -34.283 -64.598 -34.771 -63.648 -35.599C-63.33 -35.875 -63.531 -36.702 -62.962 -36.61C-62.248 -36.495 -61.007 -36.625 -61.052 -35.784C-61.165 -33.664 -62.494 -31.944 -63.774 -30.276C-63.323 -29.572 -63.781 -28.937 -64.065 -28.38C-65.4 -25.76 -65.211 -22.919 -65.385 -20.079C-65.39 -19.994 -65.697 -19.916 -65.689 -19.863C-65.336 -17.528 -64.752 -15.329 -63.873 -13.1C-63.507 -12.17 -63.036 -11.275 -62.886 -10.348C-62.775 -9.662 -62.672 -8.829 -63.08 -8.124C-61.045 -5.234 -62.354 -2.583 -61.185 0.948C-60.978 1.573 -59.286 3.487 -59.749 3.326C-62.262 2.455 -62.374 2.057 -62.551 1.304C-62.697 0.681 -63.027 -0.696 -63.264 -1.298C-63.328 -1.462 -63.499 -3.346 -63.577 -3.468C-65.09 -5.85 -63.732 -5.674 -65.102 -8.032C-66.53 -8.712 -67.496 -9.816 -68.619 -10.978C-68.817 -11.182 -67.674 -11.906 -67.855 -12.119C-68.947 -13.408 -70.1 -14.175 -69.764 -15.668C-69.609 -16.358 -69.472 -17.415 -70.216 -18.135z"/>
+ <path fill="#000000" d="M-73.8 -16.4C-73.8 -16.4 -73.4 -9.6 -71 -8C-68.6 -6.4 -69.8 -7.2 -73 -8.4C-76.2 -9.6 -75 -10.4 -75 -10.4C-75 -10.4 -77.8 -10 -75.4 -8C-73 -6 -69.4 -3.6 -71 -3.6C-72.6 -3.6 -80.2 -7.6 -80.2 -10.4C-80.2 -13.2 -81.2 -17.3 -81.2 -17.3C-81.2 -17.3 -80.1 -18.1 -75.3 -18C-75.3 -18 -73.9 -17.3 -73.8 -16.4z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M-74.6 2.2C-74.6 2.2 -83.12 -0.591 -101.6 2.8C-101.6 2.8 -92.569 0.722 -73.8 3C-63.5 4.25 -74.6 2.2 -74.6 2.2z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M-72.502 2.129C-72.502 2.129 -80.748 -1.389 -99.453 0.392C-99.453 0.392 -90.275 -0.897 -71.774 2.995C-61.62 5.131 -72.502 2.129 -72.502 2.129z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M-70.714 2.222C-70.714 2.222 -78.676 -1.899 -97.461 -1.514C-97.461 -1.514 -88.213 -2.118 -70.052 3.14C-60.086 6.025 -70.714 2.222 -70.714 2.222z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M-69.444 2.445C-69.444 2.445 -76.268 -1.862 -93.142 -2.96C-93.142 -2.96 -84.803 -2.79 -68.922 3.319C-60.206 6.672 -69.444 2.445 -69.444 2.445z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M45.84 12.961C45.84 12.961 44.91 13.605 45.124 12.424C45.339 11.243 73.547 -1.927 77.161 -1.677C77.161 -1.677 46.913 11.529 45.84 12.961z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M42.446 13.6C42.446 13.6 41.57 14.315 41.691 13.121C41.812 11.927 68.899 -3.418 72.521 -3.452C72.521 -3.452 43.404 12.089 42.446 13.6z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M39.16 14.975C39.16 14.975 38.332 15.747 38.374 14.547C38.416 13.348 58.233 -2.149 68.045 -4.023C68.045 -4.023 50.015 4.104 39.16 14.975z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M36.284 16.838C36.284 16.838 35.539 17.532 35.577 16.453C35.615 15.373 53.449 1.426 62.28 -0.26C62.28 -0.26 46.054 7.054 36.284 16.838z"/>
+ <path fill="#cccccc" d="M4.6 164.801C4.6 164.801 -10.6 162.401 6.2 160.801C6.2 160.801 24.2 158.801 28.2 153.601C28.2 153.601 41.8 144.401 44.6 144.001C47.4 143.601 63.8 140.001 64.2 137.601C64.6 135.201 70.6 132.801 72.2 133.601C73.8 134.401 73.8 143.601 71 144.401C68.2 145.201 49.4 152.401 43 153.601C36.6 154.801 25 162.401 20.2 163.601C15.4 164.801 4.6 164.801 4.6 164.801z"/>
+ <path fill="#000000" d="M77.6 127.401C77.6 127.401 74.6 129.001 73.4 131.601C73.4 131.601 67 142.201 52.8 145.401C52.8 145.401 29.8 154.401 22 156.401C22 156.401 8.6 161.401 1.2 160.601C1.2 160.601 -5.8 160.801 0.4 162.401C0.4 162.401 20.6 160.401 24 158.601C24 158.601 39.6 153.401 42.6 150.801C45.6 148.201 63.8 143.201 66 141.201C68.2 139.201 78 130.801 77.6 127.401z"/>
+ <path fill="#000000" d="M18.882 158.911C18.882 158.911 24.111 158.685 22.958 160.234C21.805 161.784 19.357 160.91 19.357 160.91L18.882 158.911z"/>
+ <path fill="#000000" d="M11.68 160.263C11.68 160.263 16.908 160.037 15.756 161.586C14.603 163.136 12.155 162.263 12.155 162.263L11.68 160.263z"/>
+ <path fill="#000000" d="M1.251 161.511C1.251 161.511 6.48 161.284 5.327 162.834C4.174 164.383 1.726 163.51 1.726 163.51L1.251 161.511z"/>
+ <path fill="#000000" d="M-6.383 162.055C-6.383 162.055 -1.154 161.829 -2.307 163.378C-3.46 164.928 -5.908 164.054 -5.908 164.054L-6.383 162.055z"/>
+ <path fill="#000000" d="M35.415 151.513C35.415 151.513 42.375 151.212 40.84 153.274C39.306 155.336 36.047 154.174 36.047 154.174L35.415 151.513z"/>
+ <path fill="#000000" d="M45.73 147.088C45.73 147.088 51.689 143.787 51.155 148.849C50.885 151.405 46.362 149.749 46.362 149.749L45.73 147.088z"/>
+ <path fill="#000000" d="M54.862 144.274C54.862 144.274 62.021 140.573 60.287 146.035C59.509 148.485 55.493 146.935 55.493 146.935L54.862 144.274z"/>
+ <path fill="#000000" d="M64.376 139.449C64.376 139.449 68.735 134.548 69.801 141.21C70.207 143.748 65.008 142.11 65.008 142.11L64.376 139.449z"/>
+ <path fill="#000000" d="M26.834 155.997C26.834 155.997 32.062 155.77 30.91 157.32C29.757 158.869 27.308 157.996 27.308 157.996L26.834 155.997z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M62.434 34.603C62.434 34.603 61.708 35.268 61.707 34.197C61.707 33.127 79.191 19.863 88.034 18.479C88.034 18.479 71.935 25.208 62.434 34.603z"/>
+ <path fill="#000000" d="M65.4 98.4C65.4 98.4 87.401 120.801 96.601 124.401C96.601 124.401 105.801 135.601 101.801 161.601C101.801 161.601 98.601 169.201 95.401 148.401C95.401 148.401 98.601 123.201 87.401 139.201C87.401 139.201 79 129.301 85.4 129.601C85.4 129.601 88.601 131.601 89.001 130.001C89.401 128.401 81.4 114.801 64.2 100.4C47 86 65.4 98.4 65.4 98.4z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M7 137.201C7 137.201 6.8 135.401 8.6 136.201C10.4 137.001 104.601 143.201 136.201 167.201C136.201 167.201 91.001 144.001 7 137.201z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M17.4 132.801C17.4 132.801 17.2 131.001 19 131.801C20.8 132.601 157.401 131.601 181.001 164.001C181.001 164.001 159.001 138.801 17.4 132.801z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M29 128.801C29 128.801 28.8 127.001 30.6 127.801C32.4 128.601 205.801 115.601 229.401 148.001C229.401 148.001 219.801 122.401 29 128.801z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M39 124.001C39 124.001 38.8 122.201 40.6 123.001C42.4 123.801 164.601 85.2 188.201 117.601C188.201 117.601 174.801 93 39 124.001z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M-19 146.801C-19 146.801 -19.2 145.001 -17.4 145.801C-15.6 146.601 2.2 148.801 4.2 187.601C4.2 187.601 -3 145.601 -19 146.801z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M-27.8 148.401C-27.8 148.401 -28 146.601 -26.2 147.401C-24.4 148.201 -10.2 143.601 -13 182.401C-13 182.401 -11.8 147.201 -27.8 148.401z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M-35.8 148.801C-35.8 148.801 -36 147.001 -34.2 147.801C-32.4 148.601 -17 149.201 -29.4 171.601C-29.4 171.601 -19.8 147.601 -35.8 148.801z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M11.526 104.465C11.526 104.465 11.082 106.464 12.631 105.247C28.699 92.622 61.141 33.72 116.826 28.086C116.826 28.086 78.518 15.976 11.526 104.465z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M22.726 102.665C22.726 102.665 21.363 101.472 23.231 100.847C25.099 100.222 137.541 27.72 176.826 35.686C176.826 35.686 149.719 28.176 22.726 102.665z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M1.885 108.767C1.885 108.767 1.376 110.366 3.087 109.39C12.062 104.27 15.677 47.059 59.254 45.804C59.254 45.804 26.843 31.09 1.885 108.767z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M-18.038 119.793C-18.038 119.793 -19.115 121.079 -17.162 120.825C-6.916 119.493 14.489 78.222 58.928 83.301C58.928 83.301 26.962 68.955 -18.038 119.793z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M-6.8 113.667C-6.8 113.667 -7.611 115.136 -5.742 114.511C4.057 111.237 17.141 66.625 61.729 63.078C61.729 63.078 27.603 55.135 -6.8 113.667z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M-25.078 124.912C-25.078 124.912 -25.951 125.954 -24.369 125.748C-16.07 124.669 1.268 91.24 37.264 95.354C37.264 95.354 11.371 83.734 -25.078 124.912z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M-32.677 130.821C-32.677 130.821 -33.682 131.866 -32.091 131.748C-27.923 131.439 2.715 98.36 21.183 113.862C21.183 113.862 9.168 95.139 -32.677 130.821z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M36.855 98.898C36.855 98.898 35.654 97.543 37.586 97.158C39.518 96.774 160.221 39.061 198.184 51.927C198.184 51.927 172.243 41.053 36.855 98.898z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M3.4 163.201C3.4 163.201 3.2 161.401 5 162.201C6.8 163.001 22.2 163.601 9.8 186.001C9.8 186.001 19.4 162.001 3.4 163.201z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M13.8 161.601C13.8 161.601 13.6 159.801 15.4 160.601C17.2 161.401 35 163.601 37 202.401C37 202.401 29.8 160.401 13.8 161.601z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M20.6 160.001C20.6 160.001 20.4 158.201 22.2 159.001C24 159.801 48.6 163.201 72.2 195.601C72.2 195.601 36.6 158.801 20.6 160.001z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M28.225 157.972C28.225 157.972 27.788 156.214 29.678 156.768C31.568 157.322 52.002 155.423 90.099 189.599C90.099 189.599 43.924 154.656 28.225 157.972z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M38.625 153.572C38.625 153.572 38.188 151.814 40.078 152.368C41.968 152.922 76.802 157.423 128.499 192.399C128.499 192.399 54.324 150.256 38.625 153.572z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M-1.8 142.001C-1.8 142.001 -2 140.201 -0.2 141.001C1.6 141.801 55 144.401 85.4 171.201C85.4 171.201 50.499 146.426 -1.8 142.001z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M-11.8 146.001C-11.8 146.001 -12 144.201 -10.2 145.001C-8.4 145.801 16.2 149.201 39.8 181.601C39.8 181.601 4.2 144.801 -11.8 146.001z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M49.503 148.962C49.503 148.962 48.938 147.241 50.864 147.655C52.79 148.068 87.86 150.004 141.981 181.098C141.981 181.098 64.317 146.704 49.503 148.962z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M57.903 146.562C57.903 146.562 57.338 144.841 59.264 145.255C61.19 145.668 96.26 147.604 150.381 178.698C150.381 178.698 73.317 143.904 57.903 146.562z"/>
+ <path fill="#ffffff" stroke="#000000" stroke-width="0.1" d="M67.503 141.562C67.503 141.562 66.938 139.841 68.864 140.255C70.79 140.668 113.86 145.004 203.582 179.298C203.582 179.298 82.917 138.904 67.503 141.562z"/>
+ <path fill="#000000" d="M-43.8 148.401C-43.8 148.401 -38.6 148.001 -39.8 149.601C-41 151.201 -43.4 150.401 -43.4 150.401L-43.8 148.401z"/>
+ <path fill="#000000" d="M-13 162.401C-13 162.401 -7.8 162.001 -9 163.601C-10.2 165.201 -12.6 164.401 -12.6 164.401L-13 162.401z"/>
+ <path fill="#000000" d="M-21.8 162.001C-21.8 162.001 -16.6 161.601 -17.8 163.201C-19 164.801 -21.4 164.001 -21.4 164.001L-21.8 162.001z"/>
+ <path fill="#000000" d="M-117.169 150.182C-117.169 150.182 -112.124 151.505 -113.782 152.624C-115.439 153.744 -117.446 152.202 -117.446 152.202L-117.169 150.182z"/>
+ <path fill="#000000" d="M-115.169 140.582C-115.169 140.582 -110.124 141.905 -111.782 143.024C-113.439 144.144 -115.446 142.602 -115.446 142.602L-115.169 140.582z"/>
+ <path fill="#000000" d="M-122.369 136.182C-122.369 136.182 -117.324 137.505 -118.982 138.624C-120.639 139.744 -122.646 138.202 -122.646 138.202L-122.369 136.182z"/>
+ <path fill="#cccccc" d="M-42.6 211.201C-42.6 211.201 -44.2 211.201 -48.2 213.201C-50.2 213.201 -61.4 216.801 -67 226.801C-67 226.801 -54.6 217.201 -42.6 211.201z"/>
+ <path fill="#cccccc" d="M45.116 303.847C45.257 304.105 45.312 304.525 45.604 304.542C46.262 304.582 47.495 304.883 47.37 304.247C46.522 299.941 45.648 295.004 41.515 293.197C40.876 292.918 39.434 293.331 39.36 294.215C39.233 295.739 39.116 297.088 39.425 298.554C39.725 299.975 41.883 299.985 42.8 298.601C43.736 300.273 44.168 302.116 45.116 303.847z"/>
+ <path fill="#cccccc" d="M34.038 308.581C34.786 309.994 34.659 311.853 36.074 312.416C36.814 312.71 38.664 311.735 38.246 310.661C37.444 308.6 37.056 306.361 35.667 304.55C35.467 304.288 35.707 303.755 35.547 303.427C34.953 302.207 33.808 301.472 32.4 301.801C31.285 304.004 32.433 306.133 33.955 307.842C34.091 307.994 33.925 308.37 34.038 308.581z"/>
+ <path fill="#cccccc" d="M-5.564 303.391C-5.672 303.014 -5.71 302.551 -5.545 302.23C-5.014 301.197 -4.221 300.075 -4.558 299.053C-4.906 297.997 -6.022 298.179 -6.672 298.748C-7.807 299.742 -7.856 301.568 -8.547 302.927C-8.743 303.313 -8.692 303.886 -9.133 304.277C-9.607 304.698 -10.047 306.222 -9.951 306.793C-9.898 307.106 -10.081 317.014 -9.859 316.751C-9.24 316.018 -6.19 306.284 -6.121 305.392C-6.064 304.661 -5.332 304.196 -5.564 303.391z"/>
+ <path fill="#cccccc" d="M-31.202 296.599C-28.568 294.1 -25.778 291.139 -26.22 287.427C-26.336 286.451 -28.111 286.978 -28.298 287.824C-29.1 291.449 -31.139 294.11 -33.707 296.502C-35.903 298.549 -37.765 304.893 -38 305.401C-34.303 300.145 -32.046 297.399 -31.202 296.599z"/>
+ <path fill="#cccccc" d="M-44.776 290.635C-44.253 290.265 -44.555 289.774 -44.338 289.442C-43.385 287.984 -42.084 286.738 -42.066 285C-42.063 284.723 -42.441 284.414 -42.776 284.638C-43.053 284.822 -43.395 284.952 -43.503 285.082C-45.533 287.531 -46.933 290.202 -48.376 293.014C-48.559 293.371 -49.703 297.862 -49.39 297.973C-49.151 298.058 -47.431 293.877 -47.221 293.763C-45.958 293.077 -45.946 291.462 -44.776 290.635z"/>
+ <path fill="#cccccc" d="M-28.043 310.179C-27.599 309.31 -26.023 308.108 -26.136 307.219C-26.254 306.291 -25.786 304.848 -26.698 305.536C-27.955 306.484 -31.404 307.833 -31.674 313.641C-31.7 314.212 -28.726 311.519 -28.043 310.179z"/>
+ <path fill="#cccccc" d="M-13.6 293.001C-13.2 292.333 -12.492 292.806 -12.033 292.543C-11.385 292.171 -10.774 291.613 -10.482 290.964C-9.512 288.815 -7.743 286.995 -7.6 284.601C-9.091 283.196 -9.77 285.236 -10.4 286.201C-11.723 284.554 -12.722 286.428 -14.022 286.947C-14.092 286.975 -14.305 286.628 -14.38 286.655C-15.557 287.095 -16.237 288.176 -17.235 288.957C-17.406 289.091 -17.811 288.911 -17.958 289.047C-18.61 289.65 -19.583 289.975 -19.863 290.657C-20.973 293.364 -24.113 295.459 -26 303.001C-25.619 303.91 -21.488 296.359 -21.001 295.661C-20.165 294.465 -20.047 297.322 -18.771 296.656C-18.72 296.629 -18.534 296.867 -18.4 297.001C-18.206 296.721 -17.988 296.492 -17.6 296.601C-17.6 296.201 -17.734 295.645 -17.533 295.486C-16.296 294.509 -16.38 293.441 -15.6 292.201C-15.142 292.99 -14.081 292.271 -13.6 293.001z"/>
+ <path fill="#cccccc" d="M46.2 347.401C46.2 347.401 53.6 327.001 49.2 315.801C49.2 315.801 60.6 337.401 56 348.601C56 348.601 55.6 338.201 51.6 333.201C51.6 333.201 47.6 346.001 46.2 347.401z"/>
+ <path fill="#cccccc" d="M31.4 344.801C31.4 344.801 36.8 336.001 28.8 317.601C28.8 317.601 28 338.001 21.2 349.001C21.2 349.001 35.4 328.801 31.4 344.801z"/>
+ <path fill="#cccccc" d="M21.4 342.801C21.4 342.801 21.2 322.801 21.6 319.801C21.6 319.801 17.8 336.401 7.6 346.001C7.6 346.001 22 334.001 21.4 342.801z"/>
+ <path fill="#cccccc" d="M11.8 310.801C11.8 310.801 17.8 324.401 7.8 342.801C7.8 342.801 14.2 330.601 9.4 323.601C9.4 323.601 12 320.201 11.8 310.801z"/>
+ <path fill="#cccccc" d="M-7.4 342.401C-7.4 342.401 -8.4 326.801 -6.6 324.601C-6.6 324.601 -6.4 318.201 -6.8 317.201C-6.8 317.201 -2.8 311.001 -2.6 318.401C-2.6 318.401 -1.2 326.201 1.6 330.801C1.6 330.801 5.2 336.201 5 342.601C5 342.601 -5 312.401 -7.4 342.401z"/>
+ <path fill="#cccccc" d="M-11 314.801C-11 314.801 -17.6 325.601 -19.4 344.601C-19.4 344.601 -20.8 338.401 -17 324.001C-17 324.001 -12.8 308.601 -11 314.801z"/>
+ <path fill="#cccccc" d="M-32.8 334.601C-32.8 334.601 -27.8 329.201 -26.4 324.201C-26.4 324.201 -22.8 308.401 -29.2 317.001C-29.2 317.001 -29 325.001 -37.2 332.401C-37.2 332.401 -32.4 330.001 -32.8 334.601z"/>
+ <path fill="#cccccc" d="M-38.6 329.601C-38.6 329.601 -35.2 312.201 -34.4 311.401C-34.4 311.401 -32.6 308.001 -35.4 311.201C-35.4 311.201 -44.2 330.401 -48.2 337.001C-48.2 337.001 -40.2 327.801 -38.6 329.601z"/>
+ <path fill="#cccccc" d="M-44.4 313.001C-44.4 313.001 -32.8 290.601 -54.6 316.401C-54.6 316.401 -43.6 306.601 -44.4 313.001z"/>
+ <path fill="#cccccc" d="M-59.8 298.401C-59.8 298.401 -55 279.601 -52.4 279.801C-52.4 279.801 -44.2 270.801 -50.8 281.401C-50.8 281.401 -56.8 291.001 -56.2 300.801C-56.2 300.801 -56.8 291.201 -59.8 298.401z"/>
+ <path fill="#cccccc" d="M270.5 287C270.5 287 258.5 277 256 273.5C256 273.5 269.5 292 269.5 299C269.5 299 272 291.5 270.5 287z"/>
+ <path fill="#cccccc" d="M276 265C276 265 255 250 251.5 242.5C251.5 242.5 278 272 278 276.5C278 276.5 278.5 267.5 276 265z"/>
+ <path fill="#cccccc" d="M293 111C293 111 281 103 279.5 105C279.5 105 290 111.5 292.5 120C292.5 120 291 111 293 111z"/>
+ <path fill="#cccccc" d="M301.5 191.5L284 179.5C284 179.5 303 196.5 303.5 200.5L301.5 191.5z"/>
+ <path stroke="#000000" d="M-89.25 169L-67.25 173.75"/>
+ <path stroke="#000000" d="M-39 331C-39 331 -39.5 327.5 -48.5 338"/>
+ <path stroke="#000000" d="M-33.5 336C-33.5 336 -31.5 329.5 -38 334"/>
+ <path stroke="#000000" d="M20.5 344.5C20.5 344.5 22 333.5 10.5 346.5"/>
+ </g>
+ <circle id="ball" cx="130" cy="-50" r="50" fill="yellow" fill-opacity="0.5"/>
+ <script type="text/javascript"><![CDATA[
+ var max = 75;
+ var svg = document.getElementsByTagNameNS('http://www.w3.org/2000/svg', 'svg')[0];
+ var c = document.getElementsByTagNameNS('http://www.w3.org/2000/svg', 'circle')[0];
+ var t = document.getElementsByTagNameNS('http://www.w3.org/2000/svg', 'text')[1];
+ var cx = parseInt(c.getAttribute('cx'));
+ var cy = parseInt(c.getAttribute('cy'));
+ var r = parseInt(c.getAttribute('r'));
+ var dx = 5;
+ var dy = -5;
+ var count = 0;
+ var rAF = window.requestAnimationFrame || window.mozRequestAnimationFrame;
+
+ function bounce() {
+ if ((cx + r + dx > 390) || (cx - r + dx < -190))
+ dx =- dx;
+ cx += dx;
+ if ((cy + r + dy > 390) || (cy - r + dy < -190))
+ dy =- dy;
+ cy += dy;
+ c.setAttribute('cx', cx);
+ c.setAttribute('cy', cy);
+ ++count;
+ if (count < max) {
+ rAF(bounce);
+ t.firstChild.data = 'Test in progress... ' + count + ' of ' + max;
+ } else {
+ var end = new Date();
+ var elapsed = (end - start) / 1000;
+ t.firstChild.data = 'Test completed in ' + elapsed.toFixed(2) + 's.';
+ if (window.tpRecordTime) window.tpRecordTime(end - start, start);
+ if (parent.reportResults) parent.reportResults(end - start, start);
+ }
+ }
+
+ addEventListener("load", function() {
+ TalosContentProfiler.subtestStart("hixie-002.xml loaded", true).then(() => {
+ rAF(bounce);
+ });
+ });
+ ]]></script>
+ <script type="text/javascript" xlink:href="resource://talos-powers/TalosContentProfiler.js"></script>
+</svg>
diff --git a/testing/talos/talos/tests/svgx/hixie-003.xml b/testing/talos/talos/tests/svgx/hixie-003.xml
new file mode 100644
index 0000000000..a3812c944d
--- /dev/null
+++ b/testing/talos/talos/tests/svgx/hixie-003.xml
@@ -0,0 +1,85 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 100 100" width="400" height="400">
+<!--
+This test attempts to test how fast batches of individually transformed 'text'
+elements can be created, added to the document and repainted. The time required
+for each new batch is expected to increase since the previous batches are not
+removed from the document.
+-->
+ <script type="text/javascript">
+ var start = new Date();
+ </script>
+ <text x="10" y="15" font-weight="900" font-size="5">SVG Performance test.</text>
+ <text x="10" y="95" font-weight="900" font-size="5">Test not started.</text>
+ <rect x="0" y="0" height="100" width="100" stroke="black" fill="none"/>
+ <script type="text/javascript"><![CDATA[
+ var svg = document.getElementsByTagNameNS('http://www.w3.org/2000/svg', 'svg')[0];
+ var t = document.getElementsByTagNameNS('http://www.w3.org/2000/svg', 'text')[1];
+
+ var Xs = new Array(9, 65, 92, 30, 92, 40, 65, 47, 79, 10, 77, 45,
+ 27, 13, 43, 52, 55, 46, 1, 24, 42, 11, 15, 18, 42, 49, 50, 30, 69,
+ 95, 36, 49, 46, 85, 54, 26, 15, 56, 18, 92, 40, 41, 66, 85, 7, 47,
+ 66, 13, 72, 29, 48, 57, 61, 46, 70, 3, 62, 34, 74, 13, 32, 20, 8,
+ 2, 60, 97, 58, 1, 0, 89, 85, 48, 52, 98, 12, 26, 5, 5, 48, 19, 22,
+ 34, 83, 13, 65, 77, 23, 40, 56, 65, 13, 54, 81, 10, 53, 25, 93,
+ 61, 14, 7);
+
+ var Ys = new Array(42, 80, 93, 30, 54, 33, 76, 56, 2, 79, 37, 80,
+ 80, 19, 99, 31, 89, 22, 23, 42, 27, 81, 26, 19, 80, 6, 62, 67, 73,
+ 18, 69, 10, 42, 88, 100, 99, 47, 88, 26, 46, 49, 60, 7, 10, 48, 29,
+ 25, 26, 33, 73, 84, 24, 42, 74, 5, 49, 69, 81, 19.5, 67, 10, 53, 79,
+ 56, 32, 98, 78, 7, 3, 68, 12, 80, 42, 24, 82, 69, 9, 43, 47, 19,
+ 69, 45, 41, 64, 1, 39, 25, 84, 35, 77, 26, 43, 32, 75, 89, 66, 48,
+ 80, 1, 70);
+
+ var Ss = new Array(5, 3, 1, 3, 1, 8, 8, 7, 8, 5, 1, 4, 4, 2, 1, 2,
+ 2, 6, 4, 3, 1, 5, 1, 2, 6, 1, 5, 7, 3, 6, 6, 4, 7, 2, 5, 3, 5, 3,
+ 5, 2, 8, 1, 2, 1, 6, 4, 3, 2, 4, 8, 3, 5, 8, 8, 2, 2, 2, 8, 5, 6,
+ 4, 8, 5, 3, 6, 2, 3, 2, 3, 6, 3, 5, 8, 7, 2, 4, 8, 8, 6, 4, 6, 1,
+ 8, 6, 7, 4, 7, 8, 3, 7, 7, 8, 4, 2, 2, 8, 2, 8, 7, 3);
+
+ var Rs = new Array(157, 142, 37, 13, 349, 83, 158, 214, 34, 353,
+ 196, 29, 296, 225, 124, 355, 68, 305, 315, 190, 146, 274, 167,
+ 132, 298, 272, 266, 265, 28, 213, 99, 260, 323, 233, 111, 270,
+ 165, 177, 58, 350, 322, 137, 163, 80, 206, 138, 20, 355, 32, 310,
+ 309, 260, 153, 309, 151, 189, 52, 170, 326, 157, 65, 41, 28, 92,
+ 96, 196, 250, 313, 125, 226, 63, 245, 158, 196, 7, 169, 96, 224,
+ 222, 273, 37, 26, 331, 302, 57, 55, 171, 347, 319, 54, 83, 189,
+ 281, 79, 75, 138, 223, 138, 238, 69);
+
+ var maxPerBlock = Xs.length / 50;
+ var maxBlocks = Xs.length / maxPerBlock;
+ var count = 0;
+ var rAF = window.requestAnimationFrame || window.mozRequestAnimationFrame;
+
+ function runTest() {
+ for (var subcount = 0; subcount < maxPerBlock; subcount += 1) {
+ var index = count * maxPerBlock + subcount;
+ var newT = document.createElementNS('http://www.w3.org/2000/svg', 'text');
+ newT.setAttribute('x', Xs[index]);
+ newT.setAttribute('y', Ys[index]);
+ newT.setAttribute('font-size', Ss[index]);
+ newT.setAttribute('fill', 'aqua');
+ newT.setAttribute('transform', 'translate(50, 50) rotate(' + Rs[index] + ') translate(-50, -50)');
+ newT.appendChild(document.createTextNode(index));
+ svg.appendChild(newT);
+ }
+ ++count;
+ if (count < maxBlocks) {
+ rAF(runTest);
+ t.firstChild.data = 'Test in progress... ' + count + ' of ' + maxBlocks;
+ } else {
+ var end = new Date();
+ var elapsed = (end - start) / 1000;
+ t.firstChild.data = 'Test completed in ' + elapsed.toFixed(2) + 's.';
+ if (window.tpRecordTime) window.tpRecordTime(end - start, start);
+ if (parent.reportResults) parent.reportResults(end - start, start);
+ }
+ }
+ addEventListener("load", function() {
+ TalosContentProfiler.subtestStart("hixie-003.xml loaded", true).then(() => {
+ rAF(runTest);
+ });
+ });
+ ]]></script>
+ <script type="text/javascript" xlink:href="resource://talos-powers/TalosContentProfiler.js"></script>
+</svg>
diff --git a/testing/talos/talos/tests/svgx/hixie-004.xml b/testing/talos/talos/tests/svgx/hixie-004.xml
new file mode 100644
index 0000000000..12979b739c
--- /dev/null
+++ b/testing/talos/talos/tests/svgx/hixie-004.xml
@@ -0,0 +1,86 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 100 100" width="400" height="400">
+<!--
+This test attempts to test how fast batches of individually transformed 'image'
+elements can be created, added to the document and repainted. The time required
+for each new batch is expected to increase since the previous batches are not
+removed from the document.
+-->
+ <script type="text/javascript">
+ var start = new Date();
+ </script>
+ <text x="10" y="15" font-weight="900" font-size="5">SVG Performance test.</text>
+ <text x="10" y="95" font-weight="900" font-size="5">Test not started.</text>
+ <rect x="0" y="0" height="100" width="100" stroke="black" fill="none"/>
+ <script type="text/javascript"><![CDATA[
+ var svg = document.getElementsByTagNameNS('http://www.w3.org/2000/svg', 'svg')[0];
+ var t = document.getElementsByTagNameNS('http://www.w3.org/2000/svg', 'text')[1];
+
+ var Xs = new Array(9, 65, 92, 30, 92, 40, 65, 47, 79, 10, 77, 45,
+ 27, 13, 43, 52, 55, 46, 1, 24, 42, 11, 15, 18, 42, 49, 50, 30, 69,
+ 95, 36, 49, 46, 85, 54, 26, 15, 56, 18, 92, 40, 41, 66, 85, 7, 47,
+ 66, 13, 72, 29, 48, 57, 61, 46, 70, 3, 62, 34, 74, 13, 32, 20, 8,
+ 2, 60, 97, 58, 1, 0, 89, 85, 48, 52, 98, 12, 26, 5, 5, 48, 19, 22,
+ 34, 83, 13, 65, 77, 23, 40, 56, 65, 13, 54, 81, 10, 53, 25, 93,
+ 61, 14, 7);
+
+ var Ys = new Array(42, 80, 93, 30, 54, 33, 76, 56, 2, 79, 37, 80,
+ 80, 19, 99, 31, 89, 22, 23, 42, 27, 81, 26, 19, 80, 6, 62, 67, 73,
+ 18, 69, 10, 42, 88, 100, 99, 47, 88, 26, 46, 49, 60, 7, 10, 48, 29,
+ 25, 26, 33, 73, 84, 24, 42, 74, 5, 49, 69, 81, 19.5, 67, 10, 53, 79,
+ 56, 32, 98, 78, 7, 3, 68, 12, 80, 42, 24, 82, 69, 9, 43, 47, 19,
+ 69, 45, 41, 64, 1, 39, 25, 84, 35, 77, 26, 43, 32, 75, 89, 66, 48,
+ 80, 1, 70);
+
+ var Ss = new Array(5, 3, 1, 3, 1, 8, 8, 7, 8, 5, 1, 4, 4, 2, 1, 2,
+ 2, 6, 4, 3, 1, 5, 1, 2, 6, 1, 5, 7, 3, 6, 6, 4, 7, 2, 5, 3, 5, 3,
+ 5, 2, 8, 1, 2, 1, 6, 4, 3, 2, 4, 8, 3, 5, 8, 8, 2, 2, 2, 8, 5, 6,
+ 4, 8, 5, 3, 6, 2, 3, 2, 3, 6, 3, 5, 8, 7, 2, 4, 8, 8, 6, 4, 6, 1,
+ 8, 6, 7, 4, 7, 8, 3, 7, 7, 8, 4, 2, 2, 8, 2, 8, 7, 3);
+
+ var Rs = new Array(157, 142, 37, 13, 349, 83, 158, 214, 34, 353,
+ 196, 29, 296, 225, 124, 355, 68, 305, 315, 190, 146, 274, 167,
+ 132, 298, 272, 266, 265, 28, 213, 99, 260, 323, 233, 111, 270,
+ 165, 177, 58, 350, 322, 137, 163, 80, 206, 138, 20, 355, 32, 310,
+ 309, 260, 153, 309, 151, 189, 52, 170, 326, 157, 65, 41, 28, 92,
+ 96, 196, 250, 313, 125, 226, 63, 245, 158, 196, 7, 169, 96, 224,
+ 222, 273, 37, 26, 331, 302, 57, 55, 171, 347, 319, 54, 83, 189,
+ 281, 79, 75, 138, 223, 138, 238, 69);
+
+ var maxPerBlock = Xs.length / 50;
+ var maxBlocks = Xs.length / maxPerBlock;
+ var count = 0;
+ var rAF = window.requestAnimationFrame || window.mozRequestAnimationFrame;
+
+ function runTest() {
+ for (var subcount = 0; subcount < maxPerBlock; subcount += 1) {
+ var index = count * maxPerBlock + subcount;
+ var newI = document.createElementNS('http://www.w3.org/2000/svg', 'image');
+ newI.setAttribute('x', Xs[index] - (99 / Ss[index]) / 2);
+ newI.setAttribute('y', Ys[index] - (195 / Ss[index]) / 2);
+ newI.setAttribute('height', 195 / Ss[index]);
+ newI.setAttribute('width', 99 / Ss[index]);
+ newI.setAttributeNS('http://www.w3.org/1999/xlink', 'href', 'images/smallcats.gif');
+ newI.setAttribute('transform', 'translate(50, 50) rotate(' + Rs[index] + ') translate(-50, -50)');
+ newI.appendChild(document.createTextNode(index)); // 'TEST'));
+ svg.insertBefore(newI, t);
+ }
+ ++count;
+ if (count < maxBlocks) {
+ rAF(runTest);
+ t.firstChild.data = 'Test in progress... ' + count + ' of ' + maxBlocks;
+ } else {
+ var end = new Date();
+ var elapsed = (end - start) / 1000;
+ t.firstChild.data = 'Test completed in ' + elapsed.toFixed(2) + 's.';
+ if (window.tpRecordTime) window.tpRecordTime(end - start, start);
+ if (parent.reportResults) parent.reportResults(end - start, start);
+ }
+ }
+ addEventListener("load", function() {
+ TalosContentProfiler.subtestStart("hixie-004.xml loaded", true).then(() => {
+ rAF(runTest);
+ });
+ });
+ ]]></script>
+ <script type="text/javascript" xlink:href="resource://talos-powers/TalosContentProfiler.js"></script>
+</svg>
diff --git a/testing/talos/talos/tests/svgx/hixie-005.xml b/testing/talos/talos/tests/svgx/hixie-005.xml
new file mode 100644
index 0000000000..f2422b3695
--- /dev/null
+++ b/testing/talos/talos/tests/svgx/hixie-005.xml
@@ -0,0 +1,92 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 100 100" width="400" height="400">
+<!--
+This test attempts to test how fast batches of individually transformed 'rect'
+elements with a linearGradient fill can be created, added to the document and
+repainted. The time required for each new batch is expected to increase since
+the previous batches are not removed from the document.
+-->
+ <script type="text/javascript">
+ var start = new Date();
+ </script>
+ <text x="10" y="15" font-weight="900" font-size="5">SVG Performance test.</text>
+ <text x="10" y="95" font-weight="900" font-size="5">Test not started.</text>
+ <rect x="0" y="0" height="100" width="100" stroke="black" fill="none"/>
+ <linearGradient id="gradient">
+ <stop offset="0%" stop-color="#00F" />
+ <stop offset="10%" stop-color="#F60" />
+ <stop offset="90%" stop-color="#FF6" />
+ <stop offset="100%" stop-color="#00F" />
+ </linearGradient>
+ <script type="text/javascript"><![CDATA[
+ var svg = document.getElementsByTagNameNS('http://www.w3.org/2000/svg', 'svg')[0];
+ var t = document.getElementsByTagNameNS('http://www.w3.org/2000/svg', 'text')[1];
+
+ var Xs = new Array(9, 65, 92, 30, 92, 40, 65, 47, 79, 10, 77, 45,
+ 27, 13, 43, 52, 55, 46, 1, 24, 42, 11, 15, 18, 42, 49, 50, 30, 69,
+ 95, 36, 49, 46, 85, 54, 26, 15, 56, 18, 92, 40, 41, 66, 85, 7, 47,
+ 66, 13, 72, 29, 48, 57, 61, 46, 70, 3, 62, 34, 74, 13, 32, 20, 8,
+ 2, 60, 97, 58, 1, 0, 89, 85, 48, 52, 98, 12, 26, 5, 5, 48, 19, 22,
+ 34, 83, 13, 65, 77, 23, 40, 56, 65, 13, 54, 81, 10, 53, 25, 93,
+ 61, 14, 7);
+
+ var Ys = new Array(42, 80, 93, 30, 54, 33, 76, 56, 2, 79, 37, 80,
+ 80, 19, 99, 31, 89, 22, 23, 42, 27, 81, 26, 19, 80, 6, 62, 67, 73,
+ 18, 69, 10, 42, 88, 100, 99, 47, 88, 26, 46, 49, 60, 7, 10, 48, 29,
+ 25, 26, 33, 73, 84, 24, 42, 74, 5, 49, 69, 81, 19.5, 67, 10, 53, 79,
+ 56, 32, 98, 78, 7, 3, 68, 12, 80, 42, 24, 82, 69, 9, 43, 47, 19,
+ 69, 45, 41, 64, 1, 39, 25, 84, 35, 77, 26, 43, 32, 75, 89, 66, 48,
+ 80, 1, 70);
+
+ var Ss = new Array(5, 3, 1, 3, 1, 8, 8, 7, 8, 5, 1, 4, 4, 2, 1, 2,
+ 2, 6, 4, 3, 1, 5, 1, 2, 6, 1, 5, 7, 3, 6, 6, 4, 7, 2, 5, 3, 5, 3,
+ 5, 2, 8, 1, 2, 1, 6, 4, 3, 2, 4, 8, 3, 5, 8, 8, 2, 2, 2, 8, 5, 6,
+ 4, 8, 5, 3, 6, 2, 3, 2, 3, 6, 3, 5, 8, 7, 2, 4, 8, 8, 6, 4, 6, 1,
+ 8, 6, 7, 4, 7, 8, 3, 7, 7, 8, 4, 2, 2, 8, 2, 8, 7, 3);
+
+ var Rs = new Array(157, 142, 37, 13, 349, 83, 158, 214, 34, 353,
+ 196, 29, 296, 225, 124, 355, 68, 305, 315, 190, 146, 274, 167,
+ 132, 298, 272, 266, 265, 28, 213, 99, 260, 323, 233, 111, 270,
+ 165, 177, 58, 350, 322, 137, 163, 80, 206, 138, 20, 355, 32, 310,
+ 309, 260, 153, 309, 151, 189, 52, 170, 326, 157, 65, 41, 28, 92,
+ 96, 196, 250, 313, 125, 226, 63, 245, 158, 196, 7, 169, 96, 224,
+ 222, 273, 37, 26, 331, 302, 57, 55, 171, 347, 319, 54, 83, 189,
+ 281, 79, 75, 138, 223, 138, 238, 69);
+
+ var maxPerBlock = Xs.length / 50;
+ var maxBlocks = Xs.length / maxPerBlock;
+ var count = 0;
+ var rAF = window.requestAnimationFrame || window.mozRequestAnimationFrame;
+
+ function runTest() {
+ for (var subcount = 0; subcount < maxPerBlock; subcount += 1) {
+ var index = count * maxPerBlock + subcount;
+ var newI = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
+ newI.setAttribute('x', Xs[index] - (99 / Ss[index]) / 2);
+ newI.setAttribute('y', Ys[index] - (195 / Ss[index]) / 2);
+ newI.setAttribute('height', 195 / Ss[index]);
+ newI.setAttribute('width', 99 / Ss[index]);
+ newI.setAttribute('fill', 'url(#gradient)');
+ newI.setAttribute('transform', 'translate(50, 50) rotate(' + Rs[index] + ') translate(-50, -50)');
+ newI.appendChild(document.createTextNode(index));
+ svg.insertBefore(newI, t);
+ }
+ ++count;
+ if (count < maxBlocks) {
+ rAF(runTest);
+ t.firstChild.data = 'Test in progress... ' + count + ' of ' + maxBlocks;
+ } else {
+ var end = new Date();
+ var elapsed = (end - start) / 1000;
+ t.firstChild.data = 'Test completed in ' + elapsed.toFixed(2) + 's.';
+ if (window.tpRecordTime) window.tpRecordTime(end - start, start);
+ if (parent.reportResults) parent.reportResults(end - start, start);
+ }
+ }
+ addEventListener("load", function() {
+ TalosContentProfiler.subtestStart("hixie-005.xml loaded", true).then(() => {
+ rAF(runTest);
+ });
+ });
+ ]]></script>
+ <script type="text/javascript" xlink:href="resource://talos-powers/TalosContentProfiler.js"></script>
+</svg>
diff --git a/testing/talos/talos/tests/svgx/hixie-006.xml b/testing/talos/talos/tests/svgx/hixie-006.xml
new file mode 100644
index 0000000000..b04f2a95cb
--- /dev/null
+++ b/testing/talos/talos/tests/svgx/hixie-006.xml
@@ -0,0 +1,92 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 100 100" width="400" height="400">
+<!--
+This test attempts to test how fast batches of individually transformed 'rect'
+elements with a radialGradient fill can be created, be added to the document and
+repainted. The time required for each new batch is expected to increase since
+the previous batches are not removed from the document.
+-->
+ <script type="text/javascript">
+ var start = new Date();
+ </script>
+ <text x="10" y="15" font-weight="900" font-size="5">SVG Performance test.</text>
+ <text x="10" y="95" font-weight="900" font-size="5">Test not started.</text>
+ <rect x="0" y="0" height="100" width="100" stroke="black" fill="none"/>
+ <radialGradient id="gradient">
+ <stop offset="0%" stop-color="#00F" />
+ <stop offset="10%" stop-color="#F60" />
+ <stop offset="90%" stop-color="#FF6" />
+ <stop offset="100%" stop-color="#00F" />
+ </radialGradient>
+ <script type="text/javascript"><![CDATA[
+ var svg = document.getElementsByTagNameNS('http://www.w3.org/2000/svg', 'svg')[0];
+ var t = document.getElementsByTagNameNS('http://www.w3.org/2000/svg', 'text')[1];
+
+ var Xs = new Array(9, 65, 92, 30, 92, 40, 65, 47, 79, 10, 77, 45,
+ 27, 13, 43, 52, 55, 46, 1, 24, 42, 11, 15, 18, 42, 49, 50, 30, 69,
+ 95, 36, 49, 46, 85, 54, 26, 15, 56, 18, 92, 40, 41, 66, 85, 7, 47,
+ 66, 13, 72, 29, 48, 57, 61, 46, 70, 3, 62, 34, 74, 13, 32, 20, 8,
+ 2, 60, 97, 58, 1, 0, 89, 85, 48, 52, 98, 12, 26, 5, 5, 48, 19, 22,
+ 34, 83, 13, 65, 77, 23, 40, 56, 65, 13, 54, 81, 10, 53, 25, 93,
+ 61, 14, 7);
+
+ var Ys = new Array(42, 80, 93, 30, 54, 33, 76, 56, 2, 79, 37, 80,
+ 80, 19, 99, 31, 89, 22, 23, 42, 27, 81, 26, 19, 80, 6, 62, 67, 73,
+ 18, 69, 10, 42, 88, 100, 99, 47, 88, 26, 46, 49, 60, 7, 10, 48, 29,
+ 25, 26, 33, 73, 84, 24, 42, 74, 5, 49, 69, 81, 19.5, 67, 10, 53, 79,
+ 56, 32, 98, 78, 7, 3, 68, 12, 80, 42, 24, 82, 69, 9, 43, 47, 19,
+ 69, 45, 41, 64, 1, 39, 25, 84, 35, 77, 26, 43, 32, 75, 89, 66, 48,
+ 80, 1, 70);
+
+ var Ss = new Array(5, 3, 1, 3, 1, 8, 8, 7, 8, 5, 1, 4, 4, 2, 1, 2,
+ 2, 6, 4, 3, 1, 5, 1, 2, 6, 1, 5, 7, 3, 6, 6, 4, 7, 2, 5, 3, 5, 3,
+ 5, 2, 8, 1, 2, 1, 6, 4, 3, 2, 4, 8, 3, 5, 8, 8, 2, 2, 2, 8, 5, 6,
+ 4, 8, 5, 3, 6, 2, 3, 2, 3, 6, 3, 5, 8, 7, 2, 4, 8, 8, 6, 4, 6, 1,
+ 8, 6, 7, 4, 7, 8, 3, 7, 7, 8, 4, 2, 2, 8, 2, 8, 7, 3);
+
+ var Rs = new Array(157, 142, 37, 13, 349, 83, 158, 214, 34, 353,
+ 196, 29, 296, 225, 124, 355, 68, 305, 315, 190, 146, 274, 167,
+ 132, 298, 272, 266, 265, 28, 213, 99, 260, 323, 233, 111, 270,
+ 165, 177, 58, 350, 322, 137, 163, 80, 206, 138, 20, 355, 32, 310,
+ 309, 260, 153, 309, 151, 189, 52, 170, 326, 157, 65, 41, 28, 92,
+ 96, 196, 250, 313, 125, 226, 63, 245, 158, 196, 7, 169, 96, 224,
+ 222, 273, 37, 26, 331, 302, 57, 55, 171, 347, 319, 54, 83, 189,
+ 281, 79, 75, 138, 223, 138, 238, 69);
+
+ var maxPerBlock = Xs.length / 50;
+ var maxBlocks = Xs.length / maxPerBlock;
+ var count = 0;
+ var rAF = window.requestAnimationFrame || window.mozRequestAnimationFrame;
+
+ function runTest() {
+ for (var subcount = 0; subcount < maxPerBlock; subcount += 1) {
+ var index = count * maxPerBlock + subcount;
+ var newI = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
+ newI.setAttribute('x', Xs[index] - (99 / Ss[index]) / 2);
+ newI.setAttribute('y', Ys[index] - (195 / Ss[index]) / 2);
+ newI.setAttribute('height', 195 / Ss[index]);
+ newI.setAttribute('width', 99 / Ss[index]);
+ newI.setAttribute('fill', 'url(#gradient)');
+ newI.setAttribute('transform', 'translate(50, 50) rotate(' + Rs[index] + ') translate(-50, -50)');
+ newI.appendChild(document.createTextNode(index));
+ svg.insertBefore(newI, t);
+ }
+ ++count;
+ if (count < maxBlocks) {
+ rAF(runTest);
+ t.firstChild.data = 'Test in progress... ' + count + ' of ' + maxBlocks;
+ } else {
+ var end = new Date();
+ var elapsed = (end - start) / 1000;
+ t.firstChild.data = 'Test completed in ' + elapsed.toFixed(2) + 's.';
+ if (window.tpRecordTime) window.tpRecordTime(end - start, start);
+ if (parent.reportResults) parent.reportResults(end - start, start);
+ }
+ }
+ addEventListener("load", function() {
+ TalosContentProfiler.subtestStart("hixie-006.xml loaded", true).then(() => {
+ rAF(runTest);
+ });
+ });
+ ]]></script>
+ <script type="text/javascript" xlink:href="resource://talos-powers/TalosContentProfiler.js"></script>
+</svg>
diff --git a/testing/talos/talos/tests/svgx/hixie-007.xml b/testing/talos/talos/tests/svgx/hixie-007.xml
new file mode 100644
index 0000000000..104b33b11e
--- /dev/null
+++ b/testing/talos/talos/tests/svgx/hixie-007.xml
@@ -0,0 +1,284 @@
+<svg viewBox="0 0 800 400" width="800" xmlns="http://www.w3.org/2000/svg" xmlns:country="http://example.com/" xmlns:xlink="http://www.w3.org/1999/xlink" >
+<!--
+This test attempts to test how fast an implementation can repaint for changes
+to the "width" attributes of a root-<svg> with a viewBox and that
+contains many 'path' elements with fill and stroke.
+-->
+ <script type="text/javascript">
+ var start = new Date();
+ </script>
+ <style type="text/css">
+ svg { fill: none; stroke: none; }
+ text { fill: gray; stroke: none; }
+ #messages { fill: red; }
+ #countries > * { fill: silver; stroke-width: 0.2px; stroke: gray; }
+ #countries #BE { fill: rgb(0.00%, 2.35%, 0.00%); }
+ #countries #FR { fill: rgb(0.00%, 9.41%, 0.00%); }
+ #countries #BG { fill: rgb(0.00%, 13.68%, 0.00%); }
+ #countries #DK { fill: rgb(0.00%, 29.49%, 0.00%); }
+ #countries #HR { fill: rgb(0.00%, 1.04%, 0.00%); }
+ #countries #DE { fill: rgb(0.00%, 23.02%, 0.00%); }
+ #countries #JP { fill: rgb(0.00%, 26.38%, 0.00%); }
+ #countries #HU { fill: rgb(0.00%, 17.02%, 0.00%); }
+ #countries #HK { fill: rgb(0.00%, 3.46%, 0.00%); }
+ #countries #BR { fill: rgb(0.00%, 5.36%, 0.00%); }
+ #countries #FI { fill: rgb(0.00%, 8.42%, 0.00%); }
+ #countries #YU { fill: rgb(0.00%, 36.65%, 0.00%); }
+ #countries #GR { fill: rgb(0.00%, 9.88%, 0.00%); }
+ #countries #CN { fill: rgb(0.00%, 0.20%, 0.00%); }
+ #countries #RU { fill: rgb(0.00%, 100.00%, 0.00%); }
+ #countries #NL { fill: rgb(0.00%, 15.12%, 0.00%); }
+ #countries #PT { fill: rgb(0.00%, 4.36%, 0.00%); }
+ #countries #NO { fill: rgb(0.00%, 19.63%, 0.00%); }
+ #countries #TW { fill: rgb(0.00%, 2.09%, 0.00%); }
+ #countries #TR { fill: rgb(0.00%, 0.87%, 0.00%); }
+ #countries #LT { fill: rgb(0.00%, 23.96%, 0.00%); }
+ #countries #LV { fill: rgb(0.00%, 8.62%, 0.00%); }
+ #countries #NZ { fill: rgb(0.00%, 5.49%, 0.00%); }
+ #countries #LU { fill: rgb(0.00%, 11.40%, 0.00%); }
+ #countries #TH { fill: rgb(0.00%, 0.00%, 0.00%); }
+ #countries #PE { fill: rgb(0.00%, 0.94%, 0.00%); }
+ #countries #PH { fill: rgb(0.00%, 10.36%, 0.00%); }
+ #countries #RO { fill: rgb(0.00%, 16.37%, 0.00%); }
+ #countries #AE { fill: rgb(0.00%, 20.83%, 0.00%); }
+ #countries #CA { fill: rgb(0.00%, 7.12%, 0.00%); }
+ #countries #PL { fill: rgb(0.00%, 12.44%, 0.00%); }
+ #countries #CH { fill: rgb(0.00%, 4.94%, 0.00%); }
+ #countries #CO { fill: rgb(0.00%, 6.90%, 0.00%); }
+ #countries #VE { fill: rgb(0.00%, 6.01%, 0.00%); }
+ #countries #CL { fill: rgb(0.00%, 2.69%, 0.00%); }
+ #countries #EG { fill: rgb(0.00%, 0.05%, 0.00%); }
+ #countries #IR { fill: rgb(0.00%, 3.39%, 0.00%); }
+ #countries #IT { fill: rgb(0.00%, 5.59%, 0.00%); }
+ #countries #EC { fill: rgb(0.00%, 23.82%, 0.00%); }
+ #countries #ZA { fill: rgb(0.00%, 50.75%, 0.00%); }
+ #countries #CZ { fill: rgb(0.00%, 30.60%, 0.00%); }
+ #countries #AR { fill: rgb(0.00%, 12.67%, 0.00%); }
+ #countries #AU { fill: rgb(0.00%, 4.09%, 0.00%); }
+ #countries #AT { fill: rgb(0.00%, 50.10%, 0.00%); }
+ #countries #IN { fill: rgb(0.00%, 26.15%, 0.00%); }
+ #countries #VN { fill: rgb(0.00%, 6.68%, 0.00%); }
+ #countries #IE { fill: rgb(0.00%, 9.16%, 0.00%); }
+ #countries #ID { fill: rgb(0.00%, 20.91%, 0.00%); }
+ #countries #ES { fill: rgb(0.00%, 8.76%, 0.00%); }
+ #countries #MA { fill: rgb(0.00%, 0.53%, 0.00%); }
+ #countries #SG { fill: rgb(0.00%, 4.34%, 0.00%); }
+ #countries #MY { fill: rgb(0.00%, 6.67%, 0.00%); }
+ #countries #US { fill: rgb(0.00%, 20.40%, 0.00%); }
+ #countries #SK { fill: rgb(0.00%, 21.98%, 0.00%); }
+ #countries #KR { fill: rgb(0.00%, 3.46%, 0.00%); }
+ #countries #SI { fill: rgb(0.00%, 6.56%, 0.00%); }
+ #countries #OTHER { fill: rgb(0.00%, 15.43%, 0.00%); }
+ #countries #UK { fill: rgb(0.00%, 6.08%, 0.00%); }
+ #countries #SA { fill: rgb(0.00%, 4.58%, 0.00%); }
+ #countries #UA { fill: rgb(0.00%, 17.83%, 0.00%); }
+ #countries #MX { fill: rgb(0.00%, 5.61%, 0.00%); }
+ #countries #SE { fill: rgb(0.00%, 7.33%, 0.00%); }
+ #countries #IL { fill: rgb(0.00%, 4.05%, 0.00%); }
+ </style>
+ <rect id="water" x="0" y="0" height="400" width="800"/>
+ <g id="countries">
+ <path id="LU" country:name="Luxembourg" d="M413.519,90.071l0.136-0.348l-0.31-0.204l-0.017-0.327l0.213-0.322l0.245-0.147l0.142-0.08l0.225,0.072l0.062,0.301l0.41,0.312l0.466,0.096l-0.044,0.288l-0.248,0.144l0.074,0.353l-0.145-0.063l-0.568-0.011l-0.642-0.063z"/>
+ <path id="CH" country:name="Switzerland" d="M421.683,94.397l0.193,0.336l-0.266,0.274l0.214,0.288l-0.09,0.192l0.622,0.062l0.008,0.144l0.55,0.242l0.579-0.332l0.215,0.117l-0.029,0.171l-0.126,0.309l0.112,0.212l-0.038,0.192l-0.315-0.051l-0.176-0.162l-0.283,0.091l-0.081,0.273l0.244,0.131l-0.228,0.415l-0.244-0.333l-0.469,0.05l-0.071,0.122l-0.216,0.03l-0.23-0.142l-0.143-0.354l-0.371,0.081l0.019,0.333l-0.425,0.384l-0.018,0.535l-0.285,0.151l-0.385-0.312l0.098-0.182l-0.311-0.071l-0.534-0.363l-0.016-0.415l-0.777,0.404l0.103,0.212l-0.349,0.432l-0.275,0.16l-0.629-0.168l-0.627,0.204l-0.599-0.062l-0.102-0.424l-0.312-0.806l-0.616,0.147l-0.854,0.668l-0.369-0.111l0.238-0.226l0.013-0.322l-0.08-0.137l0.089-0.294l0.718-0.418l-0.038-0.315l0.575-0.24l0.012-0.076l0.528-0.494l0.173-0.035l-0.116-0.089l-0.153-0.028l0.221-0.302l0.446,0.007l-0.005,0.096l0.473,0.007l0.385-0.309l0.271,0.089l0.272-0.117l0.271,0.096l0.567-0.158l0.278,0.11l0.354-0.021l-0.179-0.199l0.709-0.199l0.017,0.151l0.199-0.014l0.149,0.089l0.852,0.007l0.664,0.261z"/>
+ <path id="FR" country:name="France" d="M421.394,104.558l0.104,0.175l0.04,0.256l-0.06,0.475l0.118,0.054l0.062,0.333l-0.076,0.795l-0.211,0.327l-0.118,0.724l-0.292,0.501l-0.298-0.043l-0.057-0.196l-0.41-0.076l-0.227-0.152l0.284-0.207l-0.07-0.076l-0.437-0.098l0.257-0.332l-0.11-0.071l-0.291,0.071l-0.053-0.147l0.115-0.022l0.175-0.158l-0.094-0.153l-0.257-0.082l0.015-0.164l0.247-0.12l-0.284-0.218l0.241-0.284l0.6-0.305l0.27-0.022l0.04-0.125l0.292-0.043l0.195,0.104l0.096-0.142l-0.022-0.344l0.072-0.224l0.143-0.011zM396.323,103.853l0.375-0.122l0.411-0.365l0.549-2.299l0.397-0.091l-0.21-0.29l-0.226,0.259l0.125-1.144l0.223-0.826l0.115,0.153l0.496,0.306l0.191,0.382l0.191,0.229l-0.281-0.673l-0.63-0.582l-0.242-0.233l0.024-0.249l0.359-0.477l-0.202-0.375l-0.2-0.274l-0.326-0.216l-0.685-0.1l-0.515-0.571l-0.416-0.323l0.278-0.426l-0.233-0.181l-0.343-0.131l-0.511-0.142l-0.184-0.173l0.247-0.376l-0.329-0.173l-0.509,0.179l-0.489-0.249l-0.824-0.251l-0.619-0.181l-0.325,0.014l-0.215-0.25l-0.91,0.167l-0.059-0.25l-0.265-0.125l-0.367-0.042l-0.056-0.104l0.861-0.083l-0.085-0.229l-0.526-0.104l0.442-0.104l0.086-0.205l-0.275,0.017l-0.263-0.021l-0.417,0.083l0.04-0.438l0.303,0.012l0.305-0.146l0.526-0.088l0.562-0.174l0.215,0.188l0.18-0.167l0.474,0.063l0.112-0.26l0.272-0.059l0.764-0.078l0.393,0.366l0.275,0.26l0.342,0.083l0.652-0.271l0.317,0.167l0.276-0.127l0.457-0.124l0.029,0.23l0.591-0.065l0.3-0.103l-0.265-0.188l-0.028-0.251l0.056-0.345l-0.037-0.428l-0.131,0.021l-0.562-0.682l-0.11-0.407l0.927,0.126l0.607-0.105l-0.084,0.397l0.248,0.419l0.342-0.146l1.241,0.104l0.501,0.146l0.079-0.014l0.525-0.093l0.662-0.27l-0.534-0.124l0.055-0.204l0.166-0.175l0.753-0.322l0.756-0.181l0.902-0.215l0.314-0.235l0.302-0.264l-0.053-0.775l0.135-0.542l0.521-0.25l0.46-0.16l0.916-0.092l0.177-0.096l0.208,0.447l0.311,0.335l0.266,0.127l0.141-0.071l0.41-0.208l0.153,0.17l0.202,0.458l0.194,0.133l0.518-0.012l0.159,0.301l0.259-0.012l0.576,0.048l0.375,0.168l-0.159,0.241l0.091,0.175l-0.072,0.198l0.285,0.122l0.406-0.075l0.446-0.035l0.193-0.313l0.245-0.072l-0.119,0.373l0.146,0.18l-0.039,0.228l0.529,0.048l0.341,0.192l0.371,0.204l0.127,0.228l0.694-0.174l0.079,0.114l0.642,0.063l0.568,0.011l0.145,0.063l0.428,0.319l0.337,0.277l0.395-0.055l0.045,0.145l0.689-0.062l0.072-0.048l0.233,0.007l0.095,0.186l0.456,0.09l0.479-0.014l0.605,0.193l-0.954,0.806l-0.054,0.213l-0.054,0.358l-0.321,0.372l-0.075,0.295l0.091,0.076l-0.216,0.701l0.135,0.233l-0.385,0.309l-0.473-0.007l0.005-0.096L415.96,94.5l-0.221,0.302l0.153,0.028l0.116,0.089l-0.173,0.035l-0.528,0.494l-0.012,0.076l-0.575,0.24l0.038,0.315l-0.718,0.418l-0.089,0.294l0.08,0.137l-0.013,0.322l-0.238,0.226l0.369,0.111l0.854-0.668l0.616-0.147l0.312,0.806l0.102,0.424l-0.624,0.301l0.532,0.344l0.025,0.292l0.43,0.192l-0.199,0.272l-0.541,0.353l-0.183-0.111l-0.437,0.186l0.352,0.358l0.616,0.191l0.135,0.331l-0.175,0.01l-0.315,0.371l0.193,0.442l0.754,0.391l0.849-0.07l0.062,0.281l-0.146,0.469l-0.346,0.23l-0.221,0.215l-0.833,0.488l-0.889,0.659l-0.427,0.087l-0.318,0.043l-0.798,0.159l-0.405-0.028l-0.471-0.156l-0.851-0.499l-0.315-0.085l-0.354,0.029l-0.231,0.072l-0.511-0.056l-0.752-0.313l-0.602,0.044l-0.731,0.345l-0.357,0.258l-0.555,0.559l-0.147,0.386l0.099,0.514l0.091,0.379l-0.334-0.091l-0.75,0.137l-0.039,0.136l-0.485-0.015l-0.427-0.197l-0.395,0.167l-0.261-0.015l-0.036-0.152l-0.335-0.091l-0.206,0.03l-0.374,0.076l-0.187-0.076l-0.035-0.289l-0.091-0.213l-1.252-0.304h-0.355l0.017,0.319l-0.542-0.015l-0.337,0.061l-0.037-0.122l-0.767,0.03l-0.084-0.114l-0.028-0.038l-0.431-0.152l-0.131,0.076l-0.262-0.03l-0.056,0.076l-0.507-0.395l-0.15,0.061l-1.088-0.334l-0.112,0.106l-0.15-0.03l-0.094-0.106l0.205-0.243l-0.058-0.122l-0.469,0.03l-0.472-0.243z"/>
+ <path id="KR" country:name="Korea, Republic of" country:shortname="Korea Rep" d="M681.312,116.395l0.235-0.171l0.283-0.256l0.633-0.738l0.315-0.157l0.595,0.011l0.579,0.068l0.511,0.096l0.309-0.115l0.571-0.678l0.682,0.621l1.178,1.611l0.329,0.495l0.269,0.664l0.002,0.75l-0.034,0.947l-0.129,0.637l0.143,0.113l0.5-0.043l-0.121,0.41l-0.282,0.523l-0.5,0.75l-0.316,0.312l-0.243,0.043l-0.567-0.211l-0.256,0.1l-0.607,0.58l-0.431-0.083l-0.289-0.225l-0.544,0.1l-0.526,0.199l-1.188,0.835l-0.462,0.043l-0.46,0.312l-0.055-0.564l-0.056-0.324l-0.163-0.705l-0.137-0.395l0.167-0.453l0.499-0.468v-0.353l0.226-0.425l-0.044-0.141l-0.378-0.311l-0.095-0.296l0.015-0.467l-0.087-0.339l-0.289-0.126l-0.603-0.084l0.654-0.411l0.303-0.114l0.654,0.268l0.254-0.241l-0.029-0.283l-0.764-0.89l-0.113-0.311l-0.137-0.105z"/>
+ <path id="CY" country:name="Cyprus" d="M475.646,121.847l-0.018,0.175l0.338,0.391l-0.295-0.009l-0.132,0.108l-0.104-0.059l-0.327-0.021l-0.121,0.33l-0.783,0.257l-0.384,0.046l-0.099,0.053v0.21l-0.217,0.006l-0.072-0.192l-0.402,0.023l-0.547-0.146l-0.191-0.087v-0.21l-0.161-0.105l-0.122-0.403l0.082-0.035l0.12,0.1l0.147-0.006l0.405-0.304l0.253-0.006l0.328,0.092l0.077-0.086l0.088-0.286l-0.053-0.175l0.627,0.093l0.658,0.027l0.367-0.056l0.818-0.233l0.689-0.304l0.535-0.158l-0.475,0.295l-0.436,0.231l-0.596,0.444z"/>
+ <path id="JP" country:name="Japan" d="M704.404,117.274l0.197-0.099l1.108-0.271l0.057,0.354l-0.481,0.284l-0.232,0.241l-0.068,0.453l0.139,0.367l0.291,0.056l0.221-0.114l0.418-0.354l0.24-0.085l1.656-0.697l0.389-0.213l0.46-0.326l0.349-0.638l0.76-0.412l0.347-0.327l0.191-0.269l0.142-0.51l0.538-0.582l-0.01-0.142l0.344-0.567l0.159-0.468l0.139-0.609l-0.043-0.467l-0.33-0.198l-0.128-0.24l0.234-0.213l0.166-0.284l-0.155-1.023l0.544-0.343l0.176-0.242l0.327-0.328l0.192,0l0.21,0.355l0.199,0.227l0.303-0.058l0.799-0.257l-0.169-0.526l-0.311-0.028l-0.36-0.312l0.694-0.415l0.441,0.156l0.336,0.227l0.025,0.199l-0.016,0.868l0.058,0.611l0.22,0.127l0.243,0.312l0.717,1.432l0.001,0.496l-0.246,0.709l-0.709,0.766l-0.226,0.439l0.064,0.368l-0.15,0.071l-0.737,0.285l-0.161,0.113l-0.164,0.199l-0.174,0.453l0.02,0.396l0.094,0.254l0.131,0.792l-0.04,0.693l-0.686,0.751l-0.242,0.736l0.02,0.707l0.198,0.296l0.422,0.353l-0.617,0.298l-0.193,0.127l-0.166,0.17l-0.174,0.834l-1.081,0.439l-0.094-0.282l0.294-0.665l0.184-0.523l-0.198-0.126l-0.514,0.241l-0.578,0.623l-0.476,0.001l-0.346,0.312l-0.066,0.748l-0.354,0.269l-0.188-0.028l-0.066-0.155l0.003-0.606l-0.149-0.155l-0.211,0.042l-0.309,0.156l-0.344,0.311l-0.325,0.523l-0.866-0.055l-0.505,0.057l-0.631,0.1l-0.458-0.549l-0.685-0.323l-0.26,0.254l-0.067,0.184l-0.177,0.353l0.037,0.056l0.417,0.197l0.416,0.323l-0.293,0.198l-0.829,0.129l-0.433,0.241l-0.463,0.622l-0.522,0.847l-0.688-0.365l-0.565-0.21l-0.285-0.197l-0.014-0.169l-0.194-0.818l0.099-0.155l0.495-0.325l0.179-0.269l-0.067-0.282l-0.18-0.042l-0.601,0.17l-0.341-0.028l-0.789-0.167l-0.475,0.128l-0.427,0.227l-0.437,0.184l-0.269-0.098l-0.256-0.027l-1.647,0.398l-0.814,0.298l-0.21-0.31l-0.452-0.042l-0.413,0.438l-0.006,0.635l-0.756-0.238l-0.579-0.055l-1.1,0.073l-0.267-0.14l0.072-0.339l0.179-0.283l0.483,0.013l0.499-0.114l0.751-0.467l2.201-1.953l0.28-0.015l0.427-0.128l0.056,0.424l0.495-0.128l1.278-0.257l0.933-0.058l1.183-0.172l0.892-0.256l0.068,0.452l0.377,0.268l0.167-0.085l0.654-0.199l0.446-0.34l-0.003-0.353l0.114-0.467l0.465-0.51l0.698-0.581l0.371-0.453l-0.062-1.117l0.182-0.213z M695.464,127.756l-0.292-0.197l-0.223-0.268l-0.101-0.381l-0.177-0.395l-0.492-0.535l0.731-0.382l0.287-0.269l0.456-0.593l0.409,0.253l0.615-0.015l0.483-0.185l0.311-0.339l0.451-0.311l0.454-0.029l0.316,0.169l0.862,0.224l0.153,0.254l-0.1,0.127l-0.102,0.423l-0.292,0.24l-0.864,0.876l-0.181-0.211l-0.424-0.295l-0.467-0.042l-0.612,0.213l-0.193,0.184l-0.245,0.495l-0.165,0.508l-0.153,0.212l-0.448,0.269z M691.12,131.448l-0.366-0.042l-0.056-0.141l0.268-0.537l0.128-0.593l-0.334-0.112l-0.239,0.198l-0.155,0.466l-0.381,0.452l-0.326-0.211l-0.059-0.211l0.322-0.466l0.032-0.296l-0.356-0.917l0.169-0.113l0.687-0.58l0.083-0.141l0.034-0.466l-0.532-0.789l-0.333-0.042l-0.162,0.269l-0.419,0.495l-0.249-0.112l-0.23-0.508l-0.376-0.267l-0.261-0.366l0.41-0.325l0.733,0.083l0.706-0.171l0.315-0.466l0.241-0.283l0.484-0.058l0.478,0.056l0.249,0.38l0.27,0.168l0.43,0.084l0.628-0.213l0.225,0.395l-0.569,0.438l0.405,0.239l0.443,0.437l0.079,0.254l-0.596,0.58l-0.242,0.41l-0.104,0.367l-0.085,0.621l-0.109,0.649l-0.242,0.353l-0.194,0.099l-0.165,0.071l-0.197,0.184l-0.479,0.678z M711.938,108.369l-0.222-0.241l-0.077-0.271l0.325-0.642l-0.055-0.342l-0.549-0.198l-0.168-0.171l-0.146-0.812l0.583-0.386l0.522-0.172l0.646-0.373l0.037-0.356l-0.318-0.285l0.277-0.3l0.224-0.015l0.661,0.427l0.373,0.085l0.532-0.201l-0.004-1.186l0.455-0.187l0.45-0.244l0.074-0.743l0.007-0.844l-0.398-0.758l-0.098-0.473l0.166-0.216l0.618-0.346l0.063,0.072l0.507,0.43l0.904,0.816l1.07,0.842l1.083,0.684l0.627,0.285l0.528,0.17l1.02,0.198l0.282,0.042l0.304-0.086l0.866-0.66l0.461-0.144l0.002,0.1l-0.308,0.358l-0.335,0.558l0.198,0.414l0.469,0.599l0.197,0.356l-0.561,0.272l-0.447,0.244l-0.534,0.158l-0.365,0.015l-0.488-0.199l-0.453,0.015l-0.363,0.144l-0.345,0.229l-0.754,0.786l-0.396,0.5l-0.26,0.599l-0.4-0.07l-0.425-0.241l-2.031-0.965l-0.461-0.085l-0.72,0.044l-1.038,0.587l-0.153-0.299l-0.372-0.356l-0.339,0.029l-0.266,0.115l-0.439,0.272l0.049,0.299l1.16,0.497l0.56,0.298l0.302,0.27l-0.391,0.214l-0.303,0.029l-0.305-0.128l-0.261,0.043l-0.324,0.314l-0.388,0.471l-0.347,0.114z"/>
+ <path id="BT" country:name="Bhutan" d="M597.917,139.685l1.251-1.545l0.609-0.539l0.348-0.239l0.149-0.103l0.417-0.016l0.309,0.294l0.479,0.208l1.659,0.047l0.371,0.041l0.312,0.209l0.329,0.619l-0.07,0.156l0.042,0.24l0.326,0.294l0.313,0.069l0.258,0.238l0.017,0.282l-0.217,0.58l-0.624,0.06l-1.036,0.062l-1.238-0.063l-0.335-0.125l-0.301-0.055l-0.531,0.313l-0.544,0.074l-0.085-0.021l-0.869-0.214l-0.559-0.081l-0.637-0.18l-0.235-0.493l0.092-0.113z"/>
+ <path id="EH" country:name="Western Sahara" country:shortname="W Sahara" d="M362.764,152.723l0.072-0.625l0.395-0.876l0.52-0.552l0.488-0.566l0.244-0.509l1.175-2.559l0.238-0.241l1.404-1.175l0.345-0.495l0.051-0.918l0.305-1.088l0.651-1.075l0.399-0.34l0.404-0.198l0.838-0.51l0.361-0.495l0.334-0.777l0.428-0.851l1.635-0.04l2.511,0l2.677-0.001l1.718,0.004l1.42-0.008l0.027,0.876l-0.03,1.752l0.002,0.65l-0.104,0.396l-0.56-0.011l-6.005-0.022l-0.557,0.074l-0.047,0.509l-0.07,2.261l-0.099,2.6l-0.144,0.128l-0.809,0.287l-0.726,0.315l-0.575,0.427l-0.249,0.383l-0.01,0.707l0.164,1.539l0.051,1.102l-0.212-0.027l-0.732,0.033l-2.396-0.014l-5.055-0.056l-0.474-0.013z"/>
+ <path id="QA" country:name="Qatar" d="M514.551,145.841l-0.374,0.027l-0.336-0.083l-0.008-0.615l-0.153-0.437l-0.108-0.791l0.187-0.607l0.188-0.11l-0.059-0.187l0.177-0.607l0.33-0.269l0.312,0.083l0.069,0.315l0.26,0.093l0.063,0.199l0.116,0.326l-0.106,0.42l0.031,0.708l0.118,0.254l-0.104,0.381l-0.327,0.467l-0.275,0.433z"/>
+ <path id="AE" country:name="United Arab Emirates" country:shortname="Untd Arab Em" d="M514.177,145.868l0.374-0.027l0.008,0.288l0.361,0.14l0.153,0.128l0.186-0.093l-0.046,0.443l0.397,0.001l0.402,0.127l0.687-0.093l0.103-0.21l0.183-0.058l0.218,0.117l0.424-0.042l0.595,0.112l0.224-0.035l0.079-0.105l1.358,0.222l0.732-0.14l-0.022-0.292l0.225,0.175l0.375-0.016l0.157-0.099l0.312-0.422l0.232-0.073l0.267-0.495l0.131-0.297l0.711-0.637l0.813-0.889l0.163,0.105l0.229-0.178l0.85-0.708l0.313-0.433l0.15,0.161l-0.248,0.42l-0.107,0.299l-0.004,0.176l0.099,0.064l0.121-0.024l0.454,0.042l0.09,0.324l0.001,0.508l-0.003,0.358l-0.49,0.034l-0.401-0.083l-0.107,0.396l0.073,1.326l-0.199,0.34l-0.536,0.596l0.003,0.946l0.024,2.075l0.063,0.183l-0.152,0.057l-0.584,0.469l-0.839-0.108l-3.387-0.446l-3.362-0.375l-0.261-0.902l-0.548-1.154l-1.043-2.198z"/>
+ <path id="TW" country:name="Taiwan" d="M668.627,151.365l-0.102-0.056l-0.107-0.325l-0.922-1.212l-0.332-0.987l-0.03-0.438l0.156-0.749l0.546-0.792l1.312-1.852l0.259-0.184l0.425-0.128l0.229-0.184l0.358-0.227l0.228,0.127l0.554,0.394l-0.334,0.424l-0.084,0.142l0.023,0.31l-0.067,0.622l-0.203,0.296l-0.182,0.354l-0.065,0.692l-0.1,0.494l-0.317,0.805l-0.473,0.707l-0.417,0.833l-0.014,0.353l-0.114,0.438l-0.228,0.142z"/>
+ <path id="ML" country:name="Mali" d="M389.765,144.543l0.1,0.084l0.895,0.531l2.054,1.344l0.811,0.575l3.283,2.241l1.924,1.26l1.292,0.824l0.397,0.253l2.472,1.469l0.181,0.253l-0.096,0.396l0.082,0.183l0.393,0.28l1.111,1.039l0.229,0.027l0.47-0.314l0.588,0.562l0.375,0.167l0.748,0.024l0.309,0.111l0.277,0.352l0.099,0.522l-0.161,0.679l0.146,0.564l2.176-0.408l0.064,1.017l0.034,2.203l0.001,0.96l-0.08,0.89l-0.145,0.919l-0.434,1.246l-0.596,0.794l-0.339,0.271l-0.29,0.129l-2.533,0.085l-1.808,0.124l-0.209,0.072l-0.562,0.427l-0.579,0.272l-0.678-0.053l-0.581-0.081l-1.062-0.173l-0.36-0.059l-0.356-0.125l-0.37,0.073l-1.22,0.713l-0.947,0.458l-0.304,0.228l-0.314,0.793l-0.274-0.027l-0.324-0.182l-0.518-0.209l-0.272,0.101l-0.638,0.625l-0.492,0.667l-0.393,0.822l-0.174,0.227l-0.45,0.102l-0.551-0.364l-0.293-0.281l-0.273,0.058l-0.397,0.384l-0.355,1.217l-0.292,1.047l-0.317,0.369l-0.543,0.271l-0.448,0.158l-0.257,0.016l-0.141,0.255l0.058,0.749l-0.133,0.876l-0.261,0.92l-0.172,0.326l-0.046,0.156l-0.08,0.043l-0.159,0.1l-0.604,0.399l-0.352,0.059l-0.148-0.239l-0.117-0.381l-0.004-0.297l-0.147-0.211l-0.257-0.041l-0.239,0.114l-0.571,0.483l-0.362,0.469l-0.35,0.228l-0.455-0.436l-0.566-0.321l-0.352,0.059l-0.522,0.54l-0.559-0.901l-0.194-1.143l-0.349-0.718l-0.474-0.478l-0.265-0.451l-0.271-0.832l-0.022-0.339l-0.246-0.281l-0.323-0.055l-0.684,0.428l-0.3,0.327l-0.43,0.243l-0.565-0.152l-0.356-0.153l-0.338-0.026l-0.475,0.413l-0.252,0.256l-0.536-0.265l-0.882-0.715l-0.18-0.183l-0.113-0.028l0.062-0.142l0.004-0.565l-0.082-0.833l-0.265-0.337l-0.554-0.322l-0.181-0.197l-0.22-0.479l-0.144-0.663l-0.251-1.1l0.057-0.339l0.506-0.399l0.332-0.284l0.018-0.607l0.181-0.552l0.252-0.256l0.402-0.073l0.261,0.111l0.568,0.83l0.214,0.168l0.454,0.082l0.107-0.269l-0.055-0.296l0.06-0.212l0.535,0.124l0.713,0.137l0.485,0.054l0.387-0.031l0.945-0.344l1.953-0.026l6.457-0.01l0.379-1.613l-0.724-0.787l-0.186-1.468l-0.202-2.386l-0.325-2.753l-0.178-1.736l-0.19-1.468l-0.908-7.962l-0.049-0.776l3.231-0.089l0.523-0.13z"/>
+ <path id="OM" country:name="Oman" d="M525.37,142.384l0.312-0.429l0.155-0.17l0.084,0.833l-0.423,0.707l-0.118,0.156l-0.121,0.024l-0.099-0.064l0.004-0.176l0.107-0.299l0.248-0.42l-0.15-0.161z M525.923,144.712v0.22l0.456,0.762l0.408,0.465l0.782,0.634l0.677,0.394l1.008,0.52l0.392,0.154l0.277,0.014l0.576-0.029l0.364,0.112l0.873,0.973l0.518,0.648l0.46,0.422l0.81,0.365l0.025,0.212l-0.67,1.06l-0.615,0.721l-0.883,0.807l-0.776,1.541l-0.242,0.142l-0.562-0.083l-0.235-0.084l-0.252,0.071l-0.278,0.509l-0.062,1.115l0.001,0.791l0.134,0.621l-0.403,0.142l-1.046,0.073l-0.627,0.27l-0.367,0.283l-0.29,0.495l-0.131,0.551l-0.204,0.283l-0.444,0.255l-0.544,0.1l-0.292,0l-0.386-0.042l-0.326,0.029l-0.382,0.283l-0.22,0.297l-0.125,0.508l0.003,0.353l-0.091,0.311l-0.631,0.396l-0.344,0.043l-0.776-0.21l-0.717,0.058l-0.896,0.27l-0.768,0.298l-0.283,0.099l-0.416,0.145l-0.241-0.306l-0.483-0.689l0.006-0.296l-0.127-0.253l-0.933-1.364l-0.604-0.971l-0.226-0.634l-0.092-0.663l1.691-0.815l2.35-1.213l5.346-2.982l-0.155-1.453l-0.581-0.914l-0.063-0.183l-0.024-2.075l-0.003-0.946l0.536-0.596l0.199-0.34l-0.073-1.326l0.107-0.396l0.401,0.083l0.49-0.034z"/>
+ <path id="NE" country:name="Niger" d="M405.733,173.04l-0.568-0.971l-0.562-0.025l-0.37,0.044l-0.516-0.181l-0.97-0.757l-0.114-0.226l0.335-0.439l-0.018-0.212l-0.179-0.268l-0.502-0.42l-0.389-0.266l-0.422-0.492l-0.426-0.93l-0.019-0.396l0.173-0.665l0.581,0.081l0.678,0.053l0.579-0.272l0.562-0.427l0.209-0.072l1.808-0.124l2.533-0.085l0.29-0.129l0.339-0.271l0.596-0.794l0.434-1.246l0.145-0.919l0.08-0.89l-0.001-0.96l-0.034-2.203l-0.064-1.017l1.672-0.321l1.82-0.364l3.084-2.617l0.834-0.655l2.308-1.454l1.607-0.956l4.012-2.241l1.632-0.843l0.265-0.186l0.832,0.137l1.646,0.442l1.008,0.333l0.258,0.182l1.192,0.911l0.231-0.157l1.519-0.729l0.364,2.145l0.169,1.298l0.42,1.028l0.554,0.802l0.703,0.604l-0.388,0.722l-0.265,0.99l-0.168,1.088l-0.084,0.989l0.022,0.537l-0.062,0.707l-0.019,1.045l-0.034,1.088l-0.056,0.466l-2.43,2.613l-0.591,0.78l-0.87,1.333l-0.572,0.794l-0.007,0.678l0.123,0.719l0.014,0.269l-0.951,0.034l-0.437,0.2l-0.453,0.299l-0.761,0.697l-0.259,0.058l-0.609-0.208l-0.724-0.193l-0.884-0.221l-0.531-0.04l-0.709,0.047l-0.628,0.103l-0.774,0.287l-0.403,0.327l-0.629,0.399l-0.273,0.059l-0.934,0.005l-0.965-0.277l-1.173-0.742l-0.354-0.083l-0.467,0.116l-1.337,0.544l-0.37,0.002l-0.209-0.098l-1.095-1.223l-0.821-0.277l-1.111-0.121l-1.174,0.108l-1.064,0.188l-0.676,0.4l-0.687,1.614l-0.353,0.482l-0.158,0.849l-0.092,0.961l-0.902-0.503l-0.727-0.589l-0.339-0.28l-0.321,0.073l-0.577,0.3z"/>
+ <path id="TD" country:name="Chad" d="M431.763,171.063l-0.351-0.407l-0.575-0.52l-0.173-0.394l-0.014-0.269l-0.123-0.719l0.007-0.678l0.572-0.794l0.87-1.333l0.591-0.78l2.43-2.613l0.056-0.466l0.034-1.088l0.019-1.045l0.062-0.707l-0.022-0.537l0.084-0.989l0.168-1.088l0.265-0.99l0.388-0.722l-0.703-0.604l-0.554-0.802l-0.42-1.028l-0.169-1.298l-0.364-2.145l1.818-0.858l0.41-0.059l5.231,2.554l4.941,2.372l5.577,2.792l1.981,0.963l-0.02,1.045l-0.016,0.946l-0.036,0.636l0.085,2.5l-0.038,0.749l0.036,1.002l0.031,1.229l-0.04,0.283l-0.839-0.009l-1.245,0.05l-0.229,0.143l-0.417,1.245l-0.583,0.809l-0.122,0.438l0.131,0.677l-0.149,0.212l-0.718,0.428l-0.053,0.24l0.342,0.662l-0.087,0.34l-0.542,0.596l-0.316,0.609l0.219,0.352l0.517-0.088l0.338,0.012l0.141,0.225l0.221,1.228l0.137,0.522l0.155,0.295l0.444,0.407l0.266,0.465l0.026,0.367l-0.15,0.425l-0.559-0.208l-0.321-0.012l-0.322,0.086l-0.939,0.613l-0.372,0.228l-0.165,0.382l-0.005,0.41l-0.196,0.284l-2.649,2.275l-0.386,0.087l-2.181,0.055l-0.434,0.059l-0.209,0.199l-0.117,0.806l-0.646,1.176l-0.258,0.143l-0.368,0.031l-0.881-0.009l-0.818,0.273l-0.754,0.386l-0.466,0.271l-0.224,0.03l-0.225-0.069l-0.494-0.661l-1.363,0.686l-0.449,0.158l-0.24-0.027l-0.096-0.084l-0.208-0.183l-0.382-1.057l-0.638-1.07l-1.343-1.179l-1.088-1.067l0.323-0.539l0.29-0.312l0.24-0.1l0.481,0.082l1.187,0.191l0.674-0.032l0.225-0.143l-0.047-0.127l-0.208-0.21l-0.381-0.633l-0.205-0.578l-0.169-1.228l0.134-0.651l-0.119-1.2l-0.395-0.887l-0.923-1.238l-0.208-0.083l-0.627-0.109z"/>
+ <path id="VN" country:name="Vietnam" d="M627.173,150.012l0.483-0.229l0.515-0.13l0.341,0.012l0.597,0.392l0.325,0.097l0.584-0.413l0.332-0.115l1.595-0.052l0.807-0.117l0.341-0.157l0.696-0.554l0.521-0.328l0.298-0.101l0.623,0.575l0.771,0.235l0.66,0.053l0.777-0.047l0.237,0.21l0.056,0.38l-0.472,0.75l0.096,0.521l0.273,0.365l0.943,0.615l0.621,0.166l0.909,0.107l0.197,0.143l-0.19,0.132l-0.826,0.482l0.106,0.465l-0.203,0.212l-1.261-0.054l-0.136,0.198l0.057,0.395l-0.283,0.382l-0.585,0.792l-0.221,0.142l-0.533,0.241l-0.171,0.127l-0.27,0.396l-0.303,0.932l-0.388,0.975l0.268,0.225l0.469,0.563l1.112,1.071l0.023,0.24l0.042,0.522l0.087,0.254l0.42,0.493l1.096,0.83l1.282,1.296l0.26,0.197l0.636,0.069l0.313,0.38l0.282,1.016l0.302,0.578l0.638,0.605l0.293,0.663l0.341,1.382l0.524,2.809l-0.295,0.438l-0.235,0.495l0.05,0.819l-0.095,0.41l0.056,0.664l-0.027,0.099l-0.364,0.551l-0.447,0.439l-0.254,0.127l-0.509,0.1l-0.419,0.17l-0.501,0.354l-0.591,0.622l-0.579,0.354l-0.325,0.043l-0.512-0.197l-0.404-0.31l-0.179-0.141l-0.153,0.424l0.051,0.494l0.048,0.353l-0.205,0.721l-0.388,0.424l-0.326,0.071l-0.235-0.07l-0.246,0.481l-0.427,0.326l-0.523,0.142l-0.417,0.213l-0.459,0.565l-0.196,0.269l-0.406,0.297l-0.264,0.099l-0.365-0.042l0.078-0.861l0.1-1.313l0.151-0.494l0.215-0.283l-0.02-0.353l-0.475-0.437l-0.749-0.238l-0.091-0.066l0.3-0.289l0.646-0.229l0.915-0.528l0.599-0.229l0.497,0.011l0.688,0.194l0.17-0.27l-0.03-0.197l-0.568-0.435l-0.216-0.422l0.234-0.425l0.99-0.571l0.521-0.229l0.932-0.443l0.599-0.187l0.385-0.285l0.217-0.509l-0.054-1.073l0.05-0.424l0.076-0.367l-0.455-1.014l-0.029-0.663l0.215-0.905l0.155-0.918l-0.064-0.578l-0.214-0.437l-0.529-0.477l-0.072-0.282l0.226-0.439l-0.136-0.395l-0.358-0.308l-0.685-0.391l-0.471-0.52l-0.57-0.914l-1.683-2.121l-0.698-0.772l-0.637-0.646l-0.632-0.476l-1.234-0.741l-0.162-0.098l-0.043-0.494l0.277-0.369l0.311-0.101l0.476,0.068l0.287-0.058l0.261-0.185l0.255-0.326l-0.009-0.508l-0.87-0.968l-0.434-0.675l-0.262-0.083l-0.39,0.171l-0.509,0.483l-0.287,0.058l-0.47-0.195l-0.607-0.434l-0.334-0.689l-0.338-0.929l-0.543-0.604l-0.613-0.575l-0.45-0.745z"/>
+ <path id="CU" country:name="Cuba" d="M217.961,150.385l0.304-0.043l0.84-0.27l-0.17-0.254l-0.312-0.112l-0.369-0.056l-0.651,0.016l-0.497-0.042l-0.645,0.157l-1.193,0.92l-0.371,0.029l-0.653,0.001l-0.211,0.113l-0.189,0.452l-0.396,0.284l-0.32,0.043l-0.786,0.086l0.259-0.325l0.473-0.312l-0.128-0.593l0.282-0.382l0.114-0.099l1.258-0.61l1.625-0.47l1.164-0.087l0.842-0.157l0.825,0.041l0.566-0.044l0.73,0.168l0.848,0.083l0.603,0.197l0.557,0.112l0.477,0.013l0.499,0.268l0.573,0.536l0.382,0.253l0.581,0.168l0.768,0.111l1.229,0.351l1.02,0.492l0.453,0.31l0.374,0.55l0.33,0.141l0.479,0.041l1.704,0.519l1.018,0.167l0.327,0.239l-0.344,0.58l0.233,0.155l0.559,0.042l0.756-0.072l0.495,0.168l0.507,0.38l0.591,0.281l0.381,0.296l-0.233,0.085l-0.981,0.087l-1.15,0.398l-0.626,0.058l-1.054-0.209l-0.9-0.041l-0.934,0.186l-0.943,0.115l-0.484,0.029l-0.449-0.07l0.353-0.382l0.728-0.623l0.173-0.396L229,154.204l-0.181-0.127l-0.622-0.14l-0.7,0.001l-0.603-0.112l-0.651-0.338l-0.141-0.748l-0.258-0.536l-0.218-0.155l-0.396-0.027l-1.005,0.044l-0.836-0.139l-0.621-0.225l-0.956-0.493l-0.739-0.238l-0.615-0.069l-1.154-0.068l-0.489-0.098l-0.855-0.352z"/>
+ <path id="LA" country:name="Laos" d="M634.036,168.444l0.808-0.64l0.121-0.438l-0.002-0.945l-0.157-0.507l-0.419-0.703l-0.979-1.279l-0.255-0.464l-0.107-0.366l-0.058-1.524l-0.435-0.632l-0.688-0.659l-0.285-0.535l-0.052-0.282l-0.266-0.153l-0.893-0.192l-0.403-0.012l-0.286,0.453l-0.2,0.538l-0.543,0.257l-0.223,0.072l-0.59-0.265l-0.835-0.348l-0.346,0.03l-1.173,1.178l-0.37,0.411l-0.481-0.138l-0.145-0.324l0.027-0.494l0.117-0.438l0.528-1.569l0.085-0.41l-0.249-1.311l-0.045-0.113l-0.414,0.045l-0.489,0.2l-0.423,0.003l-0.186-0.154l-0.066-0.367l0.106-0.805l-0.01-0.423l-0.118-0.168l-0.295-0.182l-0.541-0.166l0.193-0.185l0.582-0.455l0.442-0.581l0.53-0.61l0.502-0.355l0.178,0.196l0.321,0.21l0.769,0.08l0.266-0.213l0.109-0.339l-0.119-0.521l-0.228-0.366l-0.138-0.592l0.043-0.325l0.24-0.241l0.679-0.314l0.45,0.745l0.613,0.575l0.543,0.604l0.338,0.929l0.334,0.689l0.607,0.434l0.47,0.195l0.287-0.058l0.509-0.483l0.39-0.171l0.262,0.083l0.434,0.675l0.87,0.968l0.009,0.508l-0.255,0.326l-0.261,0.185l-0.287,0.058l-0.476-0.068l-0.311,0.101l-0.277,0.369l0.043,0.494l0.162,0.098l1.234,0.741l0.632,0.476l0.637,0.646l0.698,0.772l1.683,2.121l0.57,0.914l0.471,0.52l0.685,0.391l0.358,0.308l0.136,0.395l-0.226,0.439l0.072,0.282l0.529,0.477l0.214,0.437l0.064,0.578l-0.155,0.918l-0.209,0.114l-0.975,0.429l-0.3,0.072l-0.373-0.351l-0.444-0.181l-0.476,0.186l-0.392,0.285l0.107,0.296l0.187,0.182l0.103,0.211l-0.095,0.24l-0.248,0.058l-0.469-0.251l-0.341-0.111l-0.736-0.165l-0.533-0.251z"/>
+ <path id="US" country:name="United States" country:shortname="US" d="M60.074,72.607l-0.099,0.228l-0.491,0.472l-0.395,0.183l-0.462,0.062L58,73.461l-0.961-0.362l-0.153-0.197l0.169-0.289l0.54-0.274l0.341-0.32l0.716,0.364l0.3,0.091l0.465-0.26l0.215-0.213l0.064-0.366l0.485-0.047l1.107,0.135l0.536,0.334l0.133,0.213l-0.756,0.062l-0.429,0l-0.59,0.184l-0.11,0.092z M40.092,77.571l-0.729-0.029l-0.097-0.24l0.011-0.3l0.802-0.243l0.326-0.211l0.593-0.423l0.448-0.137l0.646-0.077l1.427,0.253l0.711,0.24l-0.079,0.211l-0.303,0.046l-0.754-0.074l-0.496,0.031l-1.077,0.183l-0.269,0.226l-1.161,0.543z M38.426,77.979l-0.515-0.209l-0.139-0.285l0.381-0.227l0.674,0.27l0.093,0.195l-0.122,0.15l-0.372,0.105z M37.896,78.449l-0.256,0.084l-0.558,0.151l-1.109-0.058l-0.387,0.135l-0.398,0.434l-0.31,0.15l-0.854-0.207l-0.135-0.224l0.497-0.359l0.5-0.315l0.955-0.166l0.863-0.346l0.39,0.089l0.461,0.224l0.341,0.409z M29.628,81.29l-0.168-0.594l-0.324-0.476l0.839-0.136l0.424,0.088l0.436,0.238l-0.244,0.268l-0.26,0.06l-0.073,0.297l-0.22,0.09l-0.412,0.164z M27.543,81.591l-0.39,0.031l-0.741,0.165l-0.311-0.133l-0.088-0.178l0.104-0.119l0.336-0.268l0.294-0.09l0.584,0.222l0.212,0.371z M54.394,157.986l-0.559-0.356l-0.044-0.884l-0.243-0.677l0.482-0.402l-0.035-0.2l-0.156-0.26l0.052-0.149l0.173-0.046l0.354,0.158l0.652,0.279l0.593,0.425l-0.015,0.275l0.238,0.046l0.12,0.287l0.306,0.149l-0.062,0.161L56,156.933l-0.172,0.204l-0.766,0.195l-0.374,0.23l-0.295,0.425z M23.015,59.92l-1.613-0.646l-0.75-0.205l-0.792-0.062l-0.9,0.065l-0.291-0.095l-0.431-0.222l0.179-0.287l0.516-0.049l1.135,0.221l0.579-0.001l0.543-0.081l0.538-0.001l0.828,0.285l1.725,0.362l0.429,0.237l0.046,0.111l-0.569-0.03l-0.646,0.033l-0.527,0.365z M99.855,70.993l0.467,0.929l-0.071,0.167l-0.879-0.272l-0.621-0.075l0.067,0.441l-0.056,0.228l-0.935-0.607L97.03,71.41l0.396-0.458l0.263-0.153l0.612-0.078l0.784,0.38l0.771-0.108z M100.975,73.606l0.128,0.272l-0.086,0.273l-0.318,0.483l-0.559-0.815l-0.597-0.909l-0.04-0.228l0.095-0.213l0.407,0.029l0.568,0.197l0.402,0.91z M106.858,78.207l-1.872-1.166l-0.566-0.555l0.01-0.467l-0.559-0.843l0.071-0.106l0.456,0.06l0.274,0.256l1.165,0.48l0.086,0.196l-0.059,0.136l-0.149,0.226l0.296,0.436l0.839,0.374l0.007,0.974z M140.191,127.819l-0.043-0.094l-0.198-0.36l-0.049-0.067l-0.032,0.042l-0.028,0.05l-0.04-0.092l0.002-0.664l-0.331-0.604l-0.472-0.451l-0.661-0.451l-0.512-0.197l-0.114-0.052l-0.145,0.034l0.002,0.092l-0.088,0.025l-0.1-0.042l-0.146-0.143l0.076-0.076l-0.073-0.202l-0.228-0.252l-0.283-0.025l-0.312,0.084l-0.932-0.336l-0.286-0.328l-0.428-0.244l-0.383,0.042l-0.932-0.16l-0.721,0.051l-0.12-0.185l-0.234-0.067l-0.046-0.177l0.094-0.117l-0.157-0.504l0.133-0.464l-0.227-0.096l-0.127,0.008l-0.249-0.134l0-0.101l0.075-0.093l-0.029-0.219l-0.347-0.185l-0.254-0.286l-0.415-0.219l-0.391-0.623l-0.202-0.076l-0.203-0.311l-0.409-0.219l-0.156-0.529l-0.002-0.227l0.178,0.007l0.147-0.164l0.029-0.326l-0.208-0.251l-0.192-0.045l-0.22,0.037l-0.303-0.126l-0.535-0.514l0.078-0.21l-0.091-0.312l-0.129-0.067l-0.044-0.463l0.058-0.152l0.119-0.025l0.099,0.067l0.073,0.076l-0.086,0.101l0.153,0.202l0.285,0.126l0.116,0.118l0.203,0.017l-0.385-0.564l-0.183-0.144l-0.021-0.236l-0.184-0.109l-0.051-0.344l-0.13,0.006l-0.011,0.144l0.048,0.446l-0.093,0.017l-0.293-0.194l-0.119,0.042l-0.516-0.404l-0.136-0.363l-0.377-0.514l-0.531-0.379l-0.624-0.583l-0.123-0.142l0.114-0.101l-0.327-0.751l0.161-0.43l-0.254-0.479l-0.22-0.355l-0.738-0.782l-0.104-0.299l0.099-0.627l0.252-0.628l0.166-0.357l0.059-0.856l-0.215-0.785l-0.692-1.486l-0.153-0.916l0.096-0.287l0.231-0.244l0.402-0.201l0.365-0.717l-0.365-0.573l-0.066-0.33l0.424-1.593l0.153-0.575l0.061-0.634l0.091-0.778l0.019-0.179l-0.153-0.16l0.08-0.231l-0.103-0.167l0.157-0.077l-0.03-0.186l-0.046-0.186l-0.031-0.103l-0.004-0.058l0.322,0.096l0.209-0.019l0.062-0.097l-0.211,0.006l-0.614-0.122l0.062-0.707l-0.103-0.328l0.017-0.277l0.587-0.225l-0.345-0.019l-0.16-0.142h-0.129l-0.053,0.045l0.042,0.116l-0.12,0.052l-0.133-0.979l-0.927-1.463l-0.017-0.465l0.129-0.131l0.544,0.086l0.632,0.217l0.785,0.114l0.641,0.028l0.546-0.044l0.415,0.086l0.547,0.318l0.039,0.435l-0.42,0.407l-0.413,0.347l0.532,0.146l0.184,0.188l0.251,0.169l0.029-0.228l0.161-0.232l0.393-0.305l0.21-0.581l0.102-0.465l-0.064-0.421l-0.356-0.958l-0.158-0.305l-0.655-0.516l0.194,0.013l2.579,0.001l1.335,0.022l4.588-0.025l3.938,0.008l2.87-0.001l1.687,0.006l5.117-0.028l0.74,0.011l4.13,0.021l1.089-0.035l3.821,0.023l0.875-0.005l3.617-0.004l4.84,0.018l0.601-0.003l2.935,0.014l2.131-0.012l2.781,0.029l2.915-0.016l2.105,0.003l1.348-0.007l2.798,0.029l2.687-0.029l0.68,0.003l-0.387-0.588l-0.131-0.347l0.501-0.036l0.896,0.748l0.279,0.371l0.468,0.46l0.833,0.451l0.518-0.076l1.425,0.208l0.02,0.185l0.271-0.012l0.338,0.48l0.16-0.247l0.502,0.013l0.241,0.271l0.469,0.086l0.064,0.185l0.506,0.098l0.573-0.141l0.219-0.06l0.412-0.191l0.373-0.075l0.028,0.282l0.197,0.116l0.855-0.083l0.474,0.041l0.156,0.115l0.196,0.144l0.542-0.049l0.707,0.074l1.469-0.592l0.805-0.189l0.797,0.227l0.977,0.386l3.975,1.576l2.15,1.061l0.101,0.429l0.46,0.465l0.628-0.024l0.178,0.135l0.184,0.294l0.916,0.181l0.307,0.235l-0.11,0.318l0.26,0.33l2.529,1.05l0.876,3.16l0.054,0.545l-0.028,0.746l-0.377,0.576l-0.294,0.544l-0.264,0.433l-0.414,0.294l-0.707,0.525l-0.044,0.218l0.012,0.33l0.371,0.427l0.497,0.169l0.573,0.068l0.524-0.117l0.925-0.506l0.939-0.478l0.88-0.262l0.919-0.062l0.944-0.163l1.464-0.452l0.875-0.427l-0.047-0.362l-0.16-0.471l-0.018-0.319l0.162-0.375l0.47-0.203l0.93-0.091l1.123,0.01l1.305,0.138l1.156-0.197l0.44-0.275l0.163-0.512l0.146-0.434l0.545-0.164l1.754-0.814l0.534-0.305l0.968-0.523l1.76-0.009l2.508,0.029l1.855,0.004l1.093,0.095l0.174-0.375l0.363-0.435l0.402-0.06l1.161,0.124l1.139-1.45l1.139-2.22l0.514-0.626l0.632-0.526l0.273,0.085l0.505,0.36l0.381,0.085l0.41-0.176l0.771,0.025l0.488,0.288l0.174,0.274l0.31,2.819l-0.077,0.229l0.606,0.231h0.224l0.042,0.154l-0.143,0.069l0.02,0.256l-0.192,0.077l0.16,0.291l0.188-0.153l0.349,0.495l-0.268,0.281l0.299-0.04l0.171,0.093l-0.511,0.374l-0.509,0.093l-0.297-0.12l-0.013,0.253l-0.138,0.067l-0.077-0.107l-0.231-0.08l-0.277,0.133l-0.101,0.28l-0.171-0.013l-0.15,0.16l-0.175-0.347l-0.746,0.28l-0.204-0.093l0.12,0.413l-0.666-0.213l0.199-0.48l-0.149-0.04l-0.364,0.52l-0.332,0.56l-0.342,0.333l-0.324-0.227l-0.249,0.439l-0.346-0.08l0.122-0.307l-0.325,0.253l0.165,0.16l-0.326,0.293l-0.318-0.133l0.105-0.226l-0.654,0.253l0.065,0.359l-0.264,0.04l-0.161,0.373l-0.352,0.106l-0.333,0.679l-0.404,0.505l0.173,0.146l0.068,0.212l0.168,0.053l0.083-0.08l0.169,0.013l-0.122,0.146l-0.547,0.106l0.053,0.093l-0.392,0.292l-0.068,0.159l0.337,0.027l0.282,0.093l0.599,0.704l0.055,0.398l0.399,0.106l0.691-0.239l-0.022-0.186l-0.14-0.027l-0.254-0.279l-0.097-0.04l-0.009-0.066h0.196l0.23,0.133l0.218,0.358l0.031,0.425l-1.599,0.292l-0.032-0.385l-0.124-0.066l-0.109,0.226l-0.164,0.04l-0.03,0.093l-0.105-0.106l-0.159,0.266l-0.164,0.04l-0.294,0.04l-0.045-0.332l0.198-0.332l-0.443,0.119l-0.154-0.146l-0.082,0.252l-0.087,0.664l-1.429,0.132l-1.694,0.159l-1.182,0.345l-0.787,0.358l-0.097,0.212l-0.32,0.053l-0.144,0.172l-0.032-0.04l0.308-0.756l0.024-0.106l-0.071,0.027l-0.41,0.994l-0.079-0.08l-0.406,0.292l0.218,0.318l0.553,0.093l-0.46,1.515l-0.302,0.429l-0.259-0.092l0.043,0.251l-0.062,0.185l-0.237,0.145l-0.462,0.501l-0.292,0.304l-0.167,0.026l-0.075-0.119l0.177-0.31l-0.113-0.178l-0.43,0.013l-0.447-0.343l-0.148-0.053l-0.329-0.541l0.315-0.257l0.151-0.245l-0.271,0.119l-0.362,0.37l0.489,0.845l0.033,0.356l0.387,0.581l0.28,0.066l0.104,0.765l-0.101,0.238l-0.151,0.23l-0.125-0.013l-0.487,0.666l-0.396,0.798l0.034,0.053l-0.13,0.132l-0.107-0.125l-0.374,0.725l0.026,0.125l-0.226,0.04l-0.137-0.263l0.342-0.864l0.195-0.29l0.247-0.119l0.061-0.237l-0.093-0.059l-0.374,0.119l0.226-0.383l-0.218,0.04l-0.176-0.093l0.012-0.191l0.242-0.04l-0.077-0.33l-0.439,0.296l-0.241-0.204l-0.157,0.053l-0.23-0.396l0.355-0.171l0.357-0.053l-0.005-0.06l-0.604-0.316l-0.092,0.165h-0.072l0.107-0.323l0.089-0.02l0.21,0.159l0.131-0.06l-0.098-0.224l-0.353-0.066l-0.065-0.112l0.096-0.112l0.336,0.02l0.193-0.284l-0.281,0.046l-0.158-0.059l0.241-0.37l0.652-0.152l-0.328-0.06l0.146-0.409l-0.28,0.093l-0.096,0.132l0.11,0.079l-0.315,0.191l-0.035-0.224l-0.093,0.053l0.051,0.224l-0.081,0.086l-0.051-0.158l-0.097-0.066l-0.103,0.416l-0.447-0.079l0.402,0.501l-0.294,0.666l0.07,0.237l0.272,0.488l-0.055,0.139l-0.466-0.317l-0.1-0.211l0.026,0.205l0.174,0.218l0.421,0.237l0.132,0.508l-0.631-0.402l-0.354-0.007l-0.118-0.283l-0.155-0.053l0.066,0.25l-0.541-0.323l-0.33,0.04l0.015-0.29l0.427-0.323l-0.428,0.079l-0.19,0.468l0.204,0.231l0.457,0.046l0.202,0.25l0.954,0.297l-0.047,0.092l0.554,0.165l0.158,0.132l-0.22,0.468l-0.227,0.06l-1.042-0.804l0.708,0.811l0.626,0.171l-0.248,0.092l0.323,0.079l-0.045,0.079l0.061,0.06l-0.034,0.25l-0.312-0.191l-0.071,0.073l0.104,0.211l-0.216,0.02l-0.656-0.56l-0.023,0.026l0.419,0.475l0.309,0.158l0.182-0.026l0.191,0.21l0.018,0.31l-0.298,0.059l-0.492-0.534l-0.474-0.198l-0.199,0.16l0.046,0.044l0.44,0.145l0.488,0.382l-0.047,0.237l0.442-0.033l0.031-0.119l0.748,0.119l0.151,0.382l0.406,1.212l0.448,0.803l-0.14-0.092l-0.262-0.349l-0.059-0.132l-0.359-1.172l-0.147-0.277l-0.056,0.31h0.135l0.034,0.198l-0.292-0.066l0.173,0.283l0.144,0.099l0.228,0.58l-0.144-0.053l-0.211-0.382l0.002,0.224l-0.52-0.303l-0.06,0.059l0.266,0.303l-0.247,0.119l-0.526-0.204l0.225,0.204l-0.375,0.211l-0.173-0.02l-0.251-0.21l-0.024-0.217l0.083-0.158l-0.081-0.053l-0.091,0.204l0.044,0.23l0.116,0.211l-0.107,0.158l0.894,0.02l0.571-0.145l0.125,0.165l-0.113,0.191l-0.072,0.369l0.14,0.066l0.092-0.257l0.135-0.369l0.18-0.105l0.266,0.31l0.047,0.296l-0.166,0.25l-0.163-0.013l-0.063-0.099l-0.316,0.474l-0.254,0.197l-0.483-0.053l-0.203-0.065l-0.147-0.066l-0.136-0.245l-0.151,0.014l0.141,0.244l-0.075,0.013l-0.538-0.125l-0.436-0.151l0.162,0.185l0.269,0.026l0.833,0.335l-0.034,0.119l-0.396,0.145l0.247,0.007l-0.19,0.25l-0.281,0.138h-0.149l-0.481-0.375l0.242,0.395l0.43,0.164l0.302-0.171l0.292,0.026l0.11-0.204l0.04,0.178l0.217,0.04l0.048,0.079l-0.428,0.322l-0.013,0.085l-0.261,0.072l-1.498,0.214l-0.865,0.895l-0.487,0.609l-0.13,0.127l-0.935,0.143l-0.528,0.128l-0.617,0.241l-0.678,0.539l-0.225,0.424l-0.096,0.354l-0.819,0.694l-0.693,0.383l-0.429,0.199l-0.797,0.086l-0.35,0.58l-0.177,0.198l-0.809,1.125l-0.273,0.781l-0.459,1.249l0.236,1.455l0.387,0.925l0.456,0.873l0.934,1.562l0.352,1.746l0.486,1.194l-0.075,0.092l0.287,0.276l0.123,0.333l0.062,0.827l-0.301,1.536l-0.064,0.278l-0.31,0.415l0.108,0.424l-0.02,0.252l-0.393,0.551l-0.017-0.092l0.129-0.241l-0.025-0.138l-0.256,0.035l-0.38,0.137l-0.291-0.126l-0.509,0.138l-0.12-0.329l0.014-0.233l-0.567-1.068l-0.764-0.138l-0.204-0.352l-0.113-0.819l-0.423-0.229l-0.144-0.702l-0.373,0.093l-0.608-1.08l-0.375-0.482h0.296l0.375-0.438l0.048-0.226l-0.167-0.226l-0.471,0.407l-0.277-0.208l0.126-0.573l0.147-0.758l0.158-1.043l-0.293-0.452l-0.258-0.169l-0.496-0.126l-0.832-0.987l-0.875-0.804l-0.528-0.168l-0.43,0.072l-0.536,0.298l-0.456,0.354l-1.202,0.299l-0.273-0.213l-0.131-0.62l-0.253-0.254l-0.264-0.113l-0.752-0.069l-0.516-0.296l-0.22-0.233l-0.504,0.138l-1.052,0.115l-0.653-0.184l-0.047,0.298l-0.64,0.099h-0.183l-0.578-0.926l-0.238,0.781l-0.447-0.135l-0.65,0.001l-1.328-0.04l-0.672,0.439l-0.39,0.055l-1-0.459l-0.096,0.009l-0.142,0.014l-0.362,0.528l0.201,0.229h0.303h0.211l0.537-0.207l0.406,0.092l0.676,0.482l-0.68,0.373l0.02,0.254l0.263,0.353l0.593,0.146l0.229,0.217l0.35,0.334l-0.533,0.136l-0.503-0.084l-0.276-0.419l-0.79-0.271l-0.224-0.211l-0.265-0.056l-0.013,0.02l-0.209,0.32l0.209,0.154l0.248,0.183l-0.248,0.179l-0.069,0.05l-0.447-0.459l-0.476,0.192l-0.287,0.291l-1.025-0.472l-0.419-0.494l-1.16-0.642l-0.615,0.066l0.554,0.393l-0.307,0.187l-1.17-0.083l-0.886-0.252l-0.896-0.168l-1.547,0.173l-0.632,0.328l-0.392-0.015l-0.433-0.031l-0.135-0.49l-0.333,0.057l-0.112,0.184l0.474,0.731l-0.877,0.64l-0.808,0.577l-0.915,0.317l-0.419,0.043l-0.414-0.056l-0.728-0.111l-0.126,0.198l0.437,0.437l-0.239,0.396l-0.327,0.199l-0.631,0.114l-0.737,0.27l-0.268,0.17l0.558,0.352l0.111,0.169l-0.659,0.694l-0.154,0.297l-0.012,0.848l0.144,0.636l0.271,0.762l0.425,0.903l-0.347-0.119l-0.816-0.377l-0.296,0.001l-0.416,0.116l-0.264-0.069l-1.029-0.56l-0.921-0.32l-0.375-0.365l-0.336-0.592l-0.332-0.932l-0.078-0.467l-0.268-0.253l-0.657-0.576l-0.845-1.042l-0.744-1.227l-0.663-1.029l-0.363-0.366l-0.412-0.252l-0.783-0.321l-0.475-0.082l-0.643,0.018l-0.468,0.201l-0.576,0.541l-0.418,0.413l-0.283,0.37l-0.416,0.158l-0.501-0.011l-0.337-0.069l-1.104-0.503l-1.092-0.659l-0.445-0.549l-0.318-0.847l-0.284-0.678l-0.179-0.226l-0.708-0.491l-0.837-0.519l-0.766-0.632l-0.631-0.662l-0.209-0.112l-1.892-0.046l-1.858-0.003l-0.096,0.892l-0.213,0.101l-1.867,0.011l-0.966-0.037l-1.544-0.02l-1.662-0.019l-0.338-0.055l-3.516-1.112l-2.811-0.933l-1.186-0.39l-0.267-0.154l-0.316-0.31l-2.381,0.084l-2.367,0.155l-0.34,0.017z M49.818,152.776l-0.122,0.086l-0.279,0.03l-0.111-0.131l-0.177-0.005l-0.324,0.051l-0.304-0.39l-0.071-0.263l0.339-0.01l0.299-0.253l0.188,0.218l0.106,0.294l0.223,0.096l0.233,0.279z M52.785,154.312l-0.155-0.081l-0.085-0.356l-0.461-0.321l0.095-0.229l0.143-0.058l0.366,0.209l0.344,0.055l0.616,0.356l-0.005,0.172l-0.294,0.184l-0.563,0.069zM111.683,77.224l-0.138,0.415l-0.45,0.067l-0.324,0.113l-0.295,0.247l-0.321-0.137l-0.185-0.21l0.087-0.443l0.086-0.443l-0.438-0.675l-0.463-0.319l-0.199-0.271l-1.281,0.055l-0.437,0.098l-0.153,0.161l-0.496,0.097l-0.019-0.193l-0.034-0.432l0.212-0.272l0.184-0.212l-0.378-0.347l-0.641-0.438l-0.693-0.696l-0.723-0.317l-0.453-0.136l0.132-0.35l-0.569-0.592l-0.099-0.213l0.371-0.229l-0.068-0.122l-0.301-0.152l-0.445-0.076l-0.392-0.274l-0.237-0.259l-0.57-0.305l-1-0.411l-0.479-0.765l-0.217-0.583l-0.367-0.399l-0.357,0.016l-0.101,0.814l0.42,0.873l0.104,0.306l-0.047,0.153l-0.701-0.136l-0.272-0.076l-0.511-0.504l-0.4-0.459l-0.537,0.139l-1.219-0.228l1.263,0.718l0.032,0.214l-1.62,0.171l-1.093-0.35l-1.388-0.948l-0.543-0.292l-0.664-0.043l-0.079,0l-0.933-0.213l-1.3-0.536l0.928-0.248l0.135-0.169L90.8,67.129l-0.384-0.153l-0.792,0.156l-0.454,0.14l-0.656,0.017l-1.058-0.06l-1.068-0.245l0.027-0.247l-0.148-0.186l-0.325-0.108l-0.359,0.016l-0.47,0.202l-1.036,0.049l-1.465-0.122L80.46,66.64l-0.786-0.091l-0.248-0.108l-0.651-0.387l-0.427-0.527l-0.301,0.218l-0.788,0.157l-0.89-0.293l-0.234-0.326l-0.417-0.139l-0.872-0.248l-1.538-0.23l-0.817-0.248l-0.671-0.342l-0.553,0.235l-0.675,0.079l0.06,0.437l-0.193,0.062l-0.389,0.25l-0.249,0.405l1.119,0.293l0.174,0.294l-0.096,0.388l-0.428,0.449l-0.458,0.001l-0.804-0.214l-0.586-0.061l-0.568,0.094l-0.978,0.603l-1.066,0.217l-0.936,0.448l-1.035,0.448l-1.095,0.109l0.178-0.308l0.063-0.123l0.72-0.401l-0.093-0.385l-0.655-0.523l0.004-0.108L64.1,66.19l0.411-0.482l0.157-0.42l0.736-0.312l0.87-0.235l1.165-0.018l1.085,0.123l0.239-0.156l-1.239-0.466l-0.971-0.389l-1.043,0.049l-0.226,0.219l-0.449,0.095l-0.573,0.438l-0.865,0.375l-1.019,0.282L61.553,65.9l-0.406,0.094l-0.298,0.14l0.131,0.325l-0.177,0.526l-0.563,0.34l-0.564,0.078L59,67.544l-0.592,0.278l-0.681,0.601l-0.035,0.292l0.38,0.168l0.36,0.03l0.667,0.106l0.465,0.229l-0.075,0.184l-0.43,0.338l-0.625,0.2l-0.557,0.277l-0.423,0.398l-0.544,0.383l-0.675,0.093l-1.434,0.308l-0.678,0.397l-1.036,0.337l-0.7,0.367l0.52,0.5l-0.1,0.167l-1.106,0.412l-0.897,0.153l-0.778,0.168L49.51,74.19l-1.214,0.456L48.1,74.828l-0.274,0.394l-0.753,0.439l-1.193,0.229l-1.234,0.184l-0.973-0.345l0.001-0.181l0.332-0.348l0.763-0.273l0.306-0.212l0.445-0.364l1.171-0.441l1.403,0.073l-0.12-0.212l0.02-0.516l0.47-0.304l0.725-0.291l0.754-0.366l0.266-0.214l0.002-0.731l0.246-0.749l0.693-0.49l0.194-0.398l0.034-0.412l-0.633,0.122l-1.251,0.186l-0.676-0.029l-0.5-0.597l-0.266,0.062l-0.613,0.216l-0.136,0.23l0.239,0.352l0.021,0.352l-0.169,0.046L47,70.115l-0.567-0.32l-0.487-0.397l-0.509-0.291l-0.56-0.03l-0.812-0.106l-0.91,0.094l0.028,0.138l-0.644,0.338l-1.175,0.14l-0.649-0.09l-0.064-0.123l-0.082-0.107l-0.125-1.028l0.3-0.508l-0.142-0.431l-0.864-1.002l-1.43,0.437l-0.738,0.078l-0.406,0.202l-1.091,0.094l-0.4-0.23l-0.394-0.355l-0.466-0.325l-1.007-0.463l-0.179-0.28l0.292-0.171l0.337-0.437l0.704,0.139l1.312,0.309l0.69,0.03l0.238-0.234l-0.375-0.482l-0.458-0.264l-0.363,0l-0.541,0.22l-0.528-0.015l-1.342-0.513l-0.623-0.186l-0.197,0.016l-0.858-0.029l-0.024-0.078l-0.623-0.985l0.79-0.19l0.071-0.456l0.495-0.221l0.102-0.299l0.227-0.347l0.893-0.491l0.337-0.38l0.386-0.301l0.527-0.476l0.39-0.175l0.719,0.109l0.98,0.268l0.485,0.094l0.752-0.144l0.427-0.254l0.675-0.429l1.252-0.257l0.774-0.033l0.955-0.049l0.354-0.175l0.187-0.478l-0.259-0.669l-0.814-0.686l0.026-0.096l0.927-0.034l0.343-0.256l-0.25-0.384l-0.497-0.256l-0.367-0.08l-1.88,0.389L39.33,56.53l-0.534,0.289l-0.496,0.065l-1.907-0.333l-0.848-0.031L34.8,56.49l-1.27,0.162l-1.265-0.029l-1.349-0.174l-0.53-0.207l-0.183-0.788l0.144-0.146l0.636-0.033l1.008-0.002l0.446-0.179l-1.057-0.241l-1.912-0.304L28.13,54.31l-1.285-0.208l0.219-0.114l0.781-0.262l1.568-0.214l1.325-0.328l0.958-0.214l1.058-0.361l0.953-0.23l1.399-0.281l1.513,0.128l-0.158,0.523l0.023,0.277l1.051,0.161l1.359,0.095l1.074-0.019l0.657-0.099l0.784-0.246l0.55-0.295l0.262-0.083l0.752,0.064l0.751,0.113l1.021-0.051l0.2-0.327l0.007-0.18l-0.689-0.064l-1.946-0.292l-1.283-0.047l-0.312-0.755l-1.473-0.162l-0.96-0.031l-1.573-0.096l-0.194-0.511l-0.484-0.312l-1.042-0.461l-0.512-0.148l-2.66-0.659l-2.008-0.545l0.317-0.167l0.812-0.402l0.086-0.485l2.136-0.054l0.99-0.069l1.829-0.288l0.784-0.354l0.452-0.623l0.788-0.575l0.616-0.525l0.818-0.41l0.742-0.224l1.066-0.104l1.133-0.241l1.047-0.036l1.804,0.065l0.146-0.188l-0.156-0.205L44.47,42.83l0.018-0.206l1.936-0.089l1.143,0.032l0.974-0.054l1.344-0.14l1.098-0.416l0.918-0.417l0.957-0.019l0.282,0.051l0.675,0.241l0.156,0.172l-0.383,0.139l0.017,0.344l1.049,0.136l0.424,0.034l0.536-0.293l0.297-0.208l1.419,0.187l1.534,0.049l1.062,0.049l0.715,0.033l0.711,0.257l0.359,0.274l0.783,0.358l0.494,0.085l0.421-0.086l1.292,0.117l1.124,0.015l1.556-0.054l1.449-0.088l1.213,0.1l1.377,0.254l0.883,0.118l3.424,0.13l1.279,0.168l0.743,0.169l2.027-0.038l2.339-0.141l1.123,0.236l2.441,0.791l1.206,0.301l0.227,0.008l0.102,0.483l-0.003,2.855l0.039,2.259l0.052,2.335l0.129,2.796l-0.026,2.183l-0.043,4.334l0.026,2.167l0.089,1.046l0.196,0.279l0.84,0.074l2.424-0.122l0.739,0.059l0.332,0.388l0.173,0.387l0.348,0.292l2.162,1.318l0.945,0.673l0.238-0.325l0.848-0.205l1.225-0.67l0.731-0.498l0.495-0.126l0.832,0.073l0.316,0.199l0.371,0.492l0.35,0.322l2.048,1.175l0.814,0.58l1.769,1.768l1.67,1.882l0.512,0.393l0.189,0.029l0.98,0.314l2.025,0.763l0.402,0.255l-0.163,0.788l0.393,0.777z"/>
+ <path id="CN" country:name="China" d="M643.755,159.873l-1.092-0.52l-0.637-0.337l-0.203-1.284l0.036-0.282l0.24-0.241l0.42-0.241l0.721-0.623l0.493,0.056l0.049-0.17l0.24-0.396l0.239,0.028l0.573,0.225l0.321-0.312l0.439-0.001l0.798-0.171l0.596,0.69l-0.163,0.17l-0.443,0.354l-0.412,0.538l-0.285,0.734l0.14,0.296l-0.22,0.311l-0.292,0.085l-1.026,0.383l-0.532,0.707z M627.173,150.012l-0.679,0.314l-0.24,0.241l-0.043,0.325l0.138,0.592l0.228,0.366l0.119,0.521l-0.109,0.339l-0.266,0.213l-0.769-0.08l-0.321-0.21l-0.178-0.196l-0.153-0.239l-0.111-0.38l-0.628,0.413l-0.647,0.159l-0.246-0.083l-0.378-0.266l-0.341-0.746l-0.291-0.379l-0.481,0.045l-0.507,0.003l-0.228-0.098l-0.117-0.352l0.729-1.584l-0.033-0.268l-0.521-0.096l-0.554,0.074l-0.202-0.324l-0.277-1.762l-0.156-0.126l-0.479,0.017l-0.771,0.089l-0.819,0.442l-0.312,0.086l-0.216-0.069v-0.268l0.224-0.58l-0.163-0.705l-0.075-0.465l0.617-0.85l0.191-0.198l0.487-0.271l0.611-0.525l0.429-0.722l0.353-0.862l-0.02-0.875l-0.195-1.649l-0.146-0.14l-0.504,0.031l-0.287-0.041l-0.217-0.309l-0.243-0.901l-0.397-0.435l-0.504-0.279l-0.277,0.044l-0.306,0.34l-0.001,0.127l-0.624-0.081l-0.73-0.179l-0.657-0.081l-0.3-0.055l-0.102-0.056l0.138-0.269l0.354-0.454l-0.046-0.38l-0.716-0.715l-0.455-0.392l-1.377,0.84l-0.377,0.044l-0.975-0.319l-0.286-0.167l-0.355,0.087l-0.546,0.299l-1.105,0.726l-0.829,0.258l-0.543,0.37l-1.123,1.107l-0.397,0.27l-0.714,0.216l-0.784,0.033l-0.189,0.1l-0.329-0.619l-0.312-0.209l-0.371-0.041l-1.659-0.047L601,137.538l-0.309-0.294l-0.417,0.016l-0.149,0.103l-0.348,0.239l-0.609,0.539l-1.251,1.545l-0.212-0.662l0.052-0.861l-0.139-0.183l-0.231-0.069l-0.471,0.102l-0.345,0.129l-0.655-0.159l-0.339,0.281l-0.341-0.116l-0.849,0.066l-0.319-0.364l-0.63-0.281h-0.407l-0.08,0.331l-0.271,0.083l-0.685-0.38l0.01,0.364l-0.237,0.099l-0.141-0.463l-0.54-0.496l-0.365,0.066l-0.935-0.066l-0.014-0.265l0.175-0.396l-0.326-0.017l-0.333,0.248l-1.451-0.893l0.069-0.281l-0.178-0.38l-0.289-0.166l-0.71,0.116l-0.158,0.166l-0.657-0.794l-0.454-0.281l-0.15,0.132l-0.472-0.215l-0.726-0.595l-0.867-0.264l-0.132-0.612l-1.079-0.199l-0.186,0.182l-0.275-0.066l-0.134,0.513l-0.276,0.314l-0.299-0.05l-0.24-0.43l-0.859-0.596l-0.154,0.066l-0.756-0.248l0.116-0.364l-1.078-0.579l-0.363,0.116l-0.772-0.843l-0.383-0.248l-0.477,0.314l-0.198-0.066l-0.099-0.43l0.215-0.215l-0.272-0.364l0.104-0.446l-0.579-0.595l-0.157-0.694l0.785-0.198l0.033,0.364l0.337,0.264l0.368-0.049l0.376-0.281l0.578-0.364l-0.367-0.694l0.104-0.414l-0.68-0.099l-0.044-0.182l-0.092-0.078l-0.718-0.096l-0.294-0.221l-0.037-0.552l-0.073-0.589l0.184-0.184l0.331-0.221l-0.221-0.258l-0.441-0.405l-0.81-0.11l-0.221-0.515l-0.441-1.03v-0.515l-0.502,0.152l-0.147-0.126l-0.305-0.111l-1.337-0.104l-0.565-0.436l-0.178-0.09l-0.104-0.199h-0.239l-0.52,0.196l-0.252-0.281l-0.198-0.218l-0.301-0.07l0.312-0.516l-0.007-0.501l-0.213-0.247l-0.373-0.323l-0.625,0.009l-0.282,0.128l-0.004-0.456l-0.554-0.117l-0.296-0.047l-0.281,0.21l-0.105-0.112l-0.313-0.14l-0.048-0.088l-0.236-0.012l-0.01-0.269l0.574,0.059l0.192-0.145l0.354-0.136l0.08-0.249l0.181-0.185l-0.2-0.163l0.152-0.36l-0.245-0.237l0.126-0.428l-0.049-0.123l-0.152-0.012l-0.028-0.246l0.009-0.284l-0.295-0.494l-0.273-0.154l-0.692-0.039l-0.22-0.06l-0.229,0.162l-0.463,0.045l-0.325-0.394l-0.077-0.305l0.207-0.223l-0.023-1.031l0.011-0.069l0.139-0.739l0.129-0.213l0.274-0.186l1.422-0.704l1.737-0.734l0.359-0.03l0.06,0.071l0.183,0.567l0.344,0.055l0.507-0.145l0.885-0.132l0.268-0.243l0.463-0.784l0.467-0.472l0.238-0.03l1.248,0.235l0.459-0.017l0.478-0.102l0.646-0.345l0.638-0.701l0.405-0.301l0.445-0.145l1.338-0.349l0.97-0.219l0.325-0.187l0.051-0.157l-0.031-0.194l-0.139-0.86l0.02-0.399l0.32-0.401l0.705-0.546l0.222-0.33l-0.119-0.47l-0.29-0.441l-0.345-0.627l-0.03-1.357l-0.483-0.141l-0.366,0.06l-0.232-0.185l0.068-0.215l0.215-0.302l0.393-0.188l1.799-0.254l1.082-0.207l0.35-0.06l0.5,0.184l1.133,0.238l0.394-0.074l0.231-0.145l0.156-0.245l-0.126-0.286l-0.622-0.514l0.137-0.418l0.286-0.605l0.438-0.794l0.516-1.141l0.427-0.507l1.096,0.254l0.721,0.141l0.594,0.141l1.402,0.079l0.718-0.062l0.417-0.103l0.444-0.392l0.157-0.39l-0.213-0.707l-0.097-0.75l0.34-0.581l0.428-0.277l1.199-0.093l0.289-0.06l0.306-0.219l0.035-0.478l0.011-0.275l0.279-0.262l0.542-0.148l0.551-0.034l0.228-0.014l0.569-0.003l0.244-0.074l0.062,0.145l0.131,0.405l0.24,0.563l0.371,0.433l1.301,0.745l0.834,0.415l0.614,0.069l0.731,0.167l0.633,0.144l0.354,0.143l0.568,0.618l1.07,1.451l0.401,0.66l-0.215,0.447l-0.237,0.75l-0.214,0.389l-0.369,0.347l-0.035,0.129l0.105,0.43l0.233,0.229l0.724,0.312l1.062,0.181l1.505,0.021l0.995,0.038l0.668,0.083l0.998,0.224l0.632,0.268l1.645,0.806l0.839,0.31l0.744,0.096l0.105,0.542l1.571,2.161l0.467,0.439l0.444,0.254l1.979,0.018l1.241,0.207l0.802,0.109l1.165,0.022l2.861-0.059l0.937,0.023l1.164,0.022l1.69,0.119l0.521,0.168l0.815,0.551l1.006,0.365l1.599,0.433l0.929,0.123l0.663-0.061l0.61,0.067l0.253,0.297l0.433,0.197l0.481-0.017l0.686-0.289l1.44-0.534l0.303-0.101l0.736-0.274l0.816-0.289l1.204-0.349l1.339-0.007l1.514-0.065l0.987,0.08l0.651-0.061l1.941-0.737l0.265-0.172l1.111-1.046l0.67-0.389l1.265-0.292l0.326-0.259l0.123-0.271l-0.188-0.228l-0.599-0.411l-0.389-0.569l-0.003-0.343l0.214-0.401l0.539-0.589l0.457-0.231l0.316-0.073l0.718,0.154l0.668,0.382l0.592,0.125l0.982-0.005l0.744-0.047l0.742-0.433l1.192-0.91l0.224,0.013l0.438,0.012l0.624,0.054l0.896-0.134l0.638-0.248l0.347-0.188l0.241-0.216l0.312-0.82l0.363-0.333l0.47-0.204l0.464-0.045l0.483,0.127l0.353-0.189l0.831-0.278l0.539-0.146l0.937-0.221l0.854-0.033l0.432,0.099l1.074,0.008l0.464,0.127l0.414-0.218l0.107-0.217l-0.048-0.273l-0.599-0.501l-0.879-0.99l-0.797-0.5l-0.538-0.199l-0.928-0.212l-0.438,0.002l-1.191,0.786l-0.292-0.07l-0.431-0.416l-0.317-0.085l-0.576,0.018l-0.754,0.062l-0.929,0.395l-0.342,0.045l-0.051-0.029l-0.269-0.836l0.381-0.58l1.224-1.959l0.687-1.207l0.295-0.31l0.046,0.018l0.452,0.172l1.126,0.574l0.343-0.016l0.438-0.089l2.44-0.752l0.779-0.339l0.123-0.233l-0.056-0.306l-0.35-0.348l-0.062-0.146l0.103-0.249l0.422-0.426l0.416-0.543l0.667-0.779l0.599-0.545l1.371-0.608l0.167-0.794l-0.107-0.249l-0.465-0.306l-0.558-0.026l-0.822,0.078l0.119-0.25l0.375-0.282l1.193-0.787l0.478-0.165l0.602-0.136l1.854-0.143l0.836-0.123l1.203-0.109l0.917-0.049l1.148,0.215l1.037,0.481l0.683,0.188l1.386-0.125l0.539,0.026l0.763,0.467l0.742,0.952l1.087,2.384l0.94,1.588l0.927,1.903l0.436,0.389l0.507,0.2l1.247,0.341l1.523,0.253l2.659,0.839l0.205,0.144l0.297,0.866l0.44,1.283l0.261,0.446l0.68-0.033l0.649-0.018l1.657-0.052l0.604-0.22l0.953-0.308l1.357-0.31l1.181-0.208l0.902-0.034l0.246,0.114l0.064,0.259l0.116,0.389l0.017,0.504l-0.566,0.407l-0.66,0.393l-0.291,0.707l-0.278,0.893l-0.538,1.066l-0.627,1.08l-0.329,0.432l-0.551,0.69l-0.47,0.347l-0.547-0.098l-0.679-0.225l-0.685-0.24l-0.396-0.041l-1.664,0.982l-0.048,0.557l0.332,0.897l0.062,0.656l-0.006,0.613l-0.025,0.385l-0.097,0.128l0.112,0.299l-0.156,0.329l-0.511,0.43l-1.252,0.462l-0.111,0.058l-0.579-0.68l-0.247,0.001l-0.253,0.129l-0.383,0.358l-0.23,0.713l-0.955,0.532l-0.62,0.259l-0.538,0.017l-0.452-0.054l-0.333-0.126l-0.392,0.059l-0.273,0.243l-0.025,0.342l0.508,0.765l0.046,0.113l-0.527,0.159l-0.975,0.048l-0.508-0.153l-0.493-0.253l-0.273-0.396l-0.448,0.017l-0.386,0.13l-0.686,1.027l-0.636,0.543l-1.032,0.545l-1.533,0.604l-0.52,0.329l-0.415,0.442l-0.379,0.528l-0.066-0.092l-0.417,0.171l-1.222,0.13l-0.728,0.171l-2.248,0.925l-0.632,0.37l-0.566,0.469l-0.604,0.271l-0.336,0.015l0.13-0.255l0.862-0.682l0.33-0.354l-0.47-0.113l-0.37,0.072l-0.153-0.297l0.058-0.156l0.953-0.781l0.269-0.384l0.55-0.413l0.159-0.2l-0.057-0.298l-0.73-0.553l-0.727-0.283l-0.131-0.014l-0.628,0.03l-0.166,0.015l-0.494,0.371l-1.146,1.183l-0.355,0.157l-0.643,0.086l-0.613,0.243l-0.36,0.199L665.49,112l-0.136,0.411l-0.131,0.255l-0.251,0.255l-0.437,0.128l-0.493-0.013l-0.326,0.27l-0.307,0.114l-0.455-0.565l-0.355-0.014l-0.349,0.128l-0.396,0.638l-0.301,0.694l0.088,0.34l0.245,0.368l0.558,0.268l0.8,0.268l1.21-0.045l0.29,0.254l-0.019,0.538l-0.123,0.581l0.057,0.538l0.261,0.283l0.733,0.069l0.698-0.157l0.76-0.525l0.509-0.497l0.552-0.228l0.534-0.128l0.287,0.07l0.895,0.621l0.543,0.197l1.023-0.087l0.361,0.027l0.471,0.141l0.274,0l-0.248,0.708l-0.057,0.552l-0.612-0.197l-0.297-0.084l-0.525,0.058l-1.677,0.555l-0.707,0.44l-0.072,0.735l-0.522,0.157l-0.146-0.113l-0.017-0.269l-0.127-0.084l-0.501,0.114l0.138,0.466l-0.152,0.368l-0.485,0.496l-1.397,1.119l-0.126,0.226l0.039,0.55l0.62,0.225l0.712,0.492l0.785,0.521l0.391,0.535l0.424,1.241l0.668,0.647l0.175,0.437l-0.13,0.677l0.172,0.183l0.694,0.295l0.399,0.592l0.562,0.253l0.272,0.268l0.087,0.31l-0.049,0.155l-0.789,0.369l0.088,0.07l0.425,0.31l0.314,0.79l-0.019,0.296l-0.141,0.184l-0.534,0.043l-0.651,0.213l-0.948,0.552l-0.849,0.213l-0.629,0.297l0.72,0.21l0.378,0.056l0.944-0.425l0.488-0.058l0.162,0.056l0.524,0.592l0.387,0.168l0.456,0.027l0.009,0.155l-0.231,0.311l-0.382,0.227l-0.304,0.241l0.11,0.155l0.326-0.029l0.202,0.084l-0.184,0.325l-0.298,0.749l-0.192,0.649l0.028,0.353l-0.22,0.452l-0.209,0.127l-0.35-0.338l-0.146,0.142l-0.569,0.763l-0.401,0.622l-0.215,0.622l-0.127,0.296l-0.595,0.425l-0.251,0.438l-0.254,0.184l-0.569,0.029l-0.382,0.227l0.279,0.719l-0.264,0.508l0.076,0.593l-0.093,0.269l-0.207,0.269l-0.532,0.199l-0.161,0.282l-0.174,0.396l-0.294,0.636l-0.626,0.354l-0.412,0.495l-0.492-0.14l-0.443-0.069l-0.142,0.113l-0.145,0.198l0.118,0.833l-0.213,0.142l-0.772,0.651l-0.356,0.127l-0.628,0.171l-0.563,0.467l-0.571,0.213l-0.107,0.113l-0.008,0.48l-0.133,0.156l-0.568,0.058l-0.5,0.114l-0.341,0.438l-0.364-0.126l-0.52-0.168l-0.274,0.057l-0.315,0.326l-0.435,0.198l-0.643,0.1l-0.047-0.465l-0.52,0.057l-0.699,0.213l-0.32,0.198l-0.285-0.042l-0.401-0.493l-0.163-0.155l-0.191,0.283l0.095,0.169l-0.045,0.212l-0.047,0.691l-0.209,0.297l-0.416,0.114l-0.501-0.182l-0.123,0.282l-0.001,0.24l-0.146,0.155l-0.615,0.058l-0.366,0.114l-0.596,0.043l-0.463-0.211l-0.217,0.1l-0.439,0.48l-0.227,0.071l-0.774-0.041l-0.747,0.227l-0.406,0.326l-0.451-0.027l-0.277-0.084l-0.011,0.057l-0.069,0.353l-0.29,0.396l0.011,0.113l0.48,0.634l0.269,0.126l0.043,0.198l-0.36,0.269l-0.763,0.157l-0.481-0.719l-0.241-0.691l0.012-0.395l0.396-0.777l-0.015-0.169l-0.587-0.253l-0.226,0.071l-0.206,0.297l-0.454,0.072l-0.676-0.21l-0.574-0.733l-0.196,0.085l-0.017,0.169l-0.159,0.396l-0.27,0.128l-0.332-0.056l-0.481,0.043l-0.055,0.038l-0.197-0.143l-0.909-0.107l-0.621-0.166l-0.943-0.615l-0.273-0.365l-0.096-0.521l0.472-0.75l-0.056-0.38l-0.237-0.21l-0.777,0.047l-0.66-0.053l-0.771-0.235l-0.623-0.575l-0.298,0.101l-0.521,0.328l-0.696,0.554l-0.341,0.157l-0.807,0.117l-1.595,0.052l-0.332,0.115l-0.584,0.413l-0.325-0.097l-0.597-0.392l-0.341-0.012l-0.515,0.13l-0.483,0.229z"/>
+ <path id="HT" country:name="Haiti" d="M241.073,156.152l0.017,0.52l0.098,1.215l0.012,0.212l-0.379,0.455l-0.011,0.17l0.485,1.358l-0.669-0.577l-0.445-0.056l-0.761,0.143l-0.877-0.012l-0.666-0.14l-0.574-0.056l-0.474,0.1l-0.378,0.354l-0.135-0.042l-0.993-0.549l-0.171-0.325l0.04-0.198l0.269-0.184l1.051,0.097l0.631,0.111l1.125,0.167l0.654,0.041l0.61-0.185l0.386-0.156l-0.198-0.155l-0.692-0.464l-0.136-0.296l0.184-0.707l-0.202-0.296l-0.394-0.154l-0.913-0.14l-0.305-0.211l0.04-0.184l0.119-0.085l0.344-0.1l0.724-0.058l0.781,0.125l1.081,0.294l0.576,0.056l0.147-0.089z"/>
+ <path id="DO" country:name="Dominican Republic" country:shortname="Dominican Rp" d="M241.295,160.082l-0.485-1.358l0.011-0.17l0.379-0.455l-0.012-0.212l-0.098-1.215l-0.017-0.52l0.503-0.279l0.393,0.14l0.342,0l0.384-0.17l0.369-0.043l0.14,0.198l0.177,0.112l1,0.309l0.657-0.072l0.213,0.395l0.335,0.338l0.528,0.324l0.335,0.084l0.643,0.21l0.916,0.45l0.399,0.352l0.231,0.311l-0.191,0.17l-0.144,0.297l-0.314,0.368l-0.238-0.098l-0.476-0.592l-0.378-0.042l-0.788,0.058l-0.288-0.098l-0.373,0l-0.329,0.1l-0.763,0.539l-0.396-0.056l-0.319-0.494l-0.166-0.028l-0.155,0.057l-0.658,0.326l-0.344,0.778l-0.41,0.65l-0.289-0.112l-0.325-0.551z"/>
+ <path id="PH" country:name="Philippines" d="M668.053,167.796l-0.131-0.099l-0.74-0.732l-0.444-1.255l0.037-0.424l0.054-0.706l-0.292-0.465l0.18-0.382l0.978,0.704l0.202-0.424l0.023-0.41l-0.101-0.438l-0.026-0.579l0.145-0.438l0.025-0.664l0.082-0.861l0.074-0.636l0.38-0.862l0.188-0.127l0.337-0.142l0.523,0.055l1.21,0.52l0.576,0.042l0.188-0.212l0.277-0.17l0.199,0.141l0.018,0.396l-0.266,0.438l-0.045,0.48l0.14,0.79l0.541,0.394l0.182,0.325l-0.427,1.271l-0.31,0.467l-0.834,0.608l-0.555,0.312l-0.082,0.099l0.003,0.268l-0.078,0.565l-0.28,0.424l0.127,0.211l0.35,0.733l0.345,1.101l0.26,0.62l0.093,0.028l0.451,0.324l0.296,0.07l0.161-0.325l0.485-0.537l0.197-0.029l0.418,0.112l0.226,0.211l0.179,0.635l0.286,0.353l0.326,0.084l0.505-0.58l0.621,0.267l0.141,0.028l0.078,0.127l-0.168,0.156l-0.378,0.156l-0.208,0.212l0.936,1.226l-0.315,0.184l-0.568-0.196l-0.404-0.098l-0.094-0.48l-0.229-0.31l-0.599-0.535l-0.753-0.577l-0.258,0l-0.099,0.226l0.371,0.776l-0.218,0.283l-0.727-0.775l-0.982-0.548l-0.309,0.015l-0.344,0.142l-0.182,0.255l-0.14,0.071l-0.395,0.057l-0.322-0.225l-0.591-0.366l-0.195-0.423l0.64-0.608l0.323,0.211l0.358,0.084l0.4-0.199l-0.151-0.169l-0.713-0.295l-0.422-0.395l-0.522-0.168l-0.239,0.607z M669.676,172.974l-0.452-0.366l-0.349-0.408l-0.051-0.226l-0.364-1.114l-0.459-0.521l0.685-0.058l0.868,0.012l0.314,0.169l0.274,0.451l0.028,0.861l-0.097,0.48l-0.214,0.283l-0.185,0.438z M679.073,175.368l-0.562-0.267l-0.178-0.254l-0.237-0.169l-0.064-0.127l0.139-0.339l-0.091-0.423l-0.55-0.352l-0.662-0.479l-0.147-0.466l0.513-0.1l1.017-0.143l0.371,0.112l0.283,0.409l0.069,0.818l0.123,0.805l0.257,0.79l-0.112,0.127l-0.167,0.057z M671.406,176.824l0.022-0.353l0.186-1.342l0.061-1.172l0.482,0.395l0.576,0.281l0.366,0.028l0.634-0.185l0.027,0.438l-0.079,0.396l-0.24,0.269l-0.184,0.198l-0.908,0.651l-0.943,0.397z M664.721,177.812l-0.366-0.027l0.127-0.297l0.202-0.099l0.314-0.396l0.265-0.523l0.082-0.607l0.138-0.509l0.326-0.184l0.14,0.183l-0.16,0.283l0.276,0.55l0.212,0.564l-0.108,0.113l-0.664,0.354l-0.406,0.368l-0.377,0.227z M673.781,179.981l-0.385-0.366l-0.828-0.591l-0.206-0.38l0.099-0.368l0.565-0.213l0.22-0.269l0.487-1.822l0.438-0.185l0.271,0.028l0.113,0.126l0.049,0.282l-0.373,0.905l-0.089,0.226l-0.315,1.413l0.165,0.296l0.214,0.465l-0.213,0.41l-0.212,0.043zM661.179,181.308l-0.317-0.042l0.215-0.48l0.343-0.467l0.35-0.34l0.592-0.354l0.636-0.496l0.933-1.089l0.11,0.55l-0.118,0.424l-0.267,0.297l-0.24,0.184l-0.516,0.213l-0.172,0.127l-0.244,0.622l-0.327,0.269l-0.591,0.171l-0.386,0.41z M680.678,185.402l-0.201-0.098l-0.098-0.438l-0.361-0.748l-0.297-0.112l-0.381,0.608l-0.361,0.82l0.246,0.38l0.166,0.395l0.148,0.677l-0.158,0.495l-0.383,0.509l-0.305-0.253l-0.176-0.268l0.201-0.41l-0.076-0.325l-0.363-0.07l-0.361,0.665l-0.173-0.056l-1.114-0.619l-0.557-0.549l-0.206-0.508l-0.037-0.635l0.466-0.905l-0.108-0.479l-0.466-0.409l-0.778-0.295l-0.292,0.043l-0.062,0.17l-0.129,0.226l-0.5,0.255l-0.661,0.058l-0.027-0.494l-0.174-0.24l-0.399,0.199l-0.504,0.961l-0.525,0.863l-0.219-0.084l-0.119-0.127l-0.034-0.197l0.054-0.311l0.359-0.749l0.185-0.537l0.263-0.283l0.383-0.184l0.564-0.044l0.219-0.127l0.134-0.466l0.205-0.156l0.549-0.241l0.777-0.101l0.292,0.353l0.102,0.72l0.317-0.156l0.485-0.058l0.207-0.184l0.207-0.565l0.358-0.255l0.479,0.21l0.186,0.084l0.158-1.087l0.29-0.015l0.264,0.465l0.315-0.481l0.205-0.142l0.392,0.098l0.133-0.227l-0.048-0.706l-0.172-0.564l0.146-0.353l0.413,0.549l0.711,0.803l0.229,0.48l0.083,0.324l-0.336,0.735l0.237,0.226l0.537-0.1l0.076,0.423l-0.114,0.424l0.056,0.692l0.207,0.437l-0.002,0.438l-0.111,0.424l-0.283,0.579l-0.332,0.622z"/>
+ <path id="PR" country:name="Puerto Rico" d="M251.898,160.229l-0.547-0.112l-0.073-0.212l0.051-0.551l-0.109-0.24l0.11-0.17l0.235-0.071l0.543,0.069l0.404-0.015l1.505,0.11l0.393,0.168l0.113,0.141l-0.188,0.354l-0.07,0.099l-0.283,0.227l-0.335,0.043l-0.739-0.083l-0.657,0.072l-0.354,0.17z"/>
+ <path id="JM" country:name="Jamaica" d="M228.82,160.519l-0.299-0.056l-0.693-0.224l-0.229-0.268l-0.47-0.366l-0.465-0.084l-0.142-0.211l0.53-0.284l0.704-0.072l1.364,0.251l0.97,0.351l0.651,0.267l0.279,0.282l-0.04,0.198l-0.332,0.071l-0.751-0.295l-0.543,0.058l-0.227,0.255l-0.308,0.128z"/>
+ <path id="BF" country:name="Burkina Faso" d="M400.72,175.499l-0.595-0.119l-0.161-0.032l-0.976,0.458l-1.429-0.006l-0.867-0.037l-2.119,0.041l-0.271,0.157l-0.125,0.34l0.261,1.934l0.02,0.41l-0.191,0.17l-0.63-0.434l-0.644-0.166l-0.769,0.075l-0.608,0.159l-0.446,0.257l-0.368,0.115l-0.354-0.083l-0.452-0.223l-0.52-0.562l-0.15-0.465l-0.308-0.252l-0.545,0.003l-0.259-0.168l0.08-0.043l0.046-0.156l0.172-0.326l0.261-0.92l0.133-0.876l-0.058-0.749l0.141-0.255l0.257-0.016l0.448-0.158l0.543-0.271l0.317-0.369l0.292-1.047l0.355-1.217l0.397-0.384l0.273-0.058l0.293,0.281l0.551,0.364l0.45-0.102l0.174-0.227l0.393-0.822l0.492-0.667l0.638-0.625l0.272-0.101l0.518,0.209l0.324,0.182l0.274,0.027l0.314-0.793l0.304-0.228l0.947-0.458l1.22-0.713l0.37-0.073l0.356,0.125l0.36,0.059l1.062,0.173l-0.173,0.665l0.019,0.396l0.426,0.93l0.422,0.492l0.389,0.266l0.502,0.42l0.179,0.268l0.018,0.212l-0.335,0.439l0.114,0.226l0.97,0.757l0.516,0.181l0.37-0.044l0.562,0.025l0.568,0.971l0.131,0.367l-0.237,0.764l-0.415,0.468l-0.337,0.158l-0.739-0.095l-0.418,0.045l-0.415,0.271l-0.366,0.553l-0.24,0.157l-0.062,0.142l-0.29-0.041l-0.611-0.166l-1.013-0.163z"/>
+ <path id="NI" country:name="Nicaragua" d="M209.823,175.47l-0.388-0.645l-0.932-0.888l-1.003-1.085l-0.837-0.817l-0.723-0.464l-0.196-0.183l-0.023-0.226l0.625-0.03l1.001-0.125l0.29-0.143l0.293-0.412l0.005-0.961l0.882-0.034l0.513-0.583l0.725,0.42l1.207-0.997l0.503-0.794l0.294-0.242l0.259,0.013l0.328,0.182l0.463,0.097l0.248-0.086l0.424-0.229l1.425-0.486l0.23,0.519l0.038,0.339l-0.057,0.509l-0.214,0.707l-0.543,0.806l-0.1,0.749l0.042,0.904l-0.245,1.13l-0.188,0.735l-0.101,1.385l0.031,0.55l0.184,0.466l0.188,0.363l-0.281,0.274l-0.767-0.149l-0.241-0.46l-0.285,0.077l-0.394-0.107l-0.603,0.25l-1.651-0.599l-0.43,0.271z"/>
+ <path id="KH" country:name="Cambodia" d="M634.036,168.444l0.533,0.251l0.736,0.165l0.341,0.111l0.469,0.251l0.248-0.058l0.095-0.24l-0.103-0.211l-0.187-0.182l-0.107-0.296l0.392-0.285l0.476-0.186l0.444,0.181l0.373,0.351l0.3-0.072l0.975-0.429l0.209-0.114l-0.215,0.905l0.029,0.663l0.455,1.014l-0.076,0.367l-0.05,0.424l0.054,1.073l-0.217,0.509l-0.385,0.285l-0.599,0.187l-0.932,0.443l-0.521,0.229l-0.99,0.571l-0.234,0.425l0.216,0.422l0.568,0.435l0.03,0.197l-0.17,0.27l-0.688-0.194l-0.497-0.011l-0.599,0.229l-0.915,0.528l-0.646,0.229l-0.3,0.289l-0.256-0.188l-0.248-0.268l-0.35-0.042l-0.382,0.142l-0.205-0.042l-0.293,0.043l-0.183-0.113l0.142-0.311l0.182-0.226l-0.04-0.254l-0.283-0.395l-0.277,0.043l-0.462,0.298l-0.339,0.015l-0.171-1.044l-0.649-1.488l0.146-0.176l-0.16-0.479l-0.487-0.717l-0.219-0.648l-0.026-0.635l0.076-0.382l0.146-0.297l0.92-1.233l0.521-0.441l0.383-0.101l1.172-0.091l0.798,0.066l0.558-0.074l0.575,0.039l0.599,0.109l0.301,0.167z"/>
+ <path id="CR" country:name="Costa Rica" d="M214.474,175.913l0.821,0.884l0.385,0.623l0.314,0.322l0.225,0.046l0.465,0.645l0.441,0.352l-0.014,0.006l-0.074,0.123l-0.478-0.184l-0.219,0.205l-0.014,0.321l0,0.58l0.507,0.307l-0.396,0.368l0.125,0.532l-0.374,0.369l0.243,0.184l-0.204,0.609l0.003-0.466l-0.296-0.307l0.01-0.568l-0.377-0.148l-0.238-0.102l-0.111,0.082l0.325,0.41l0.084,0.225l-0.113,0.062l-0.726-0.299l-0.13-0.282l0.251-0.339l0.04-0.382l-0.182-0.338l-0.486-0.324l-0.695-0.287l-0.079-0.144l-0.689-0.103l-0.316-0.327l0.007-0.421l-0.146-0.255l-0.249-0.098l-0.576-0.353l-0.416-0.266l0.225,0.512l0.086,0.222l0.422,0.044l0.181,0.266l-0.544,0.573l-0.144-0.262l-0.356-0.282l-0.561-0.211l-0.323-0.239l-0.147-0.24l-0.104-0.494l0.128-0.421l0.332-0.225l-0.008-0.389l-0.554-0.225l0.363-0.123l-0.057-0.227l-0.238,0.017l0.43-0.271l1.651,0.599l0.603-0.25l0.394,0.107l0.285-0.077l0.241,0.46l0.767,0.149l0.281-0.274z"/>
+ <path id="CF" country:name="Central African Republic" country:shortname="Cent Af Rep" d="M436.304,195.359l-0.209-0.451l-0.194-0.804l-0.498-0.802l-1.217-1.236l-0.112-0.324l-0.064-0.791l-0.432-0.605l-0.4-0.661l-0.207-0.592l-0.273-1.185l-0.112-0.776l0.064-0.424l0.144-0.198l0.528-0.399l0.4-0.511l0.866-1.743l0.354-0.327l0.208-0.114l0.096,0.084l0.24,0.027l0.449-0.158l1.363-0.686l0.494,0.661l0.225,0.069l0.224-0.03l0.466-0.271l0.754-0.386l0.818-0.273l0.881,0.009l0.368-0.031l0.258-0.143l0.646-1.176l0.117-0.806l0.209-0.199l0.434-0.059l2.181-0.055l0.386-0.087l2.649-2.275l0.196-0.284l0.005-0.41l0.165-0.382l0.372-0.228l0.939-0.613l0.322-0.086l0.321,0.012l0.559,0.208l1.342,1.673l0.347,0.549l0.122,0.536l-0.416,1.472l0.01,0.664l0.158,0.211l0.802-0.019l0.272-0.001l0.207,0.126l0.252,0.493l0.223,0.225l0.797,0.447l0.799,0.235l0.351,0.196l0.223,0.267l-0.148,0.481l0.173,0.395l0.445,0.351l0.558,0.378l0.717,0.434l0.207,0.168l0.206,0.366l0.059,0.72l0.285,0.436l0.367,0.224l0.814,0.165l0.558,0.477l0.157,0.352l-0.083,0.679l0.031,0.07l-0.496,0.145l-0.962,0.344l-0.319-0.026l-0.287-0.167l-0.687-0.264l-1.15-0.361l-0.4,0.13l-0.082,0.551l-0.13,0.241l-0.256,0.058l-0.399-0.026l-0.862-0.207l-0.593,0.102l-0.93,0.373l-0.93,0.486l-0.271,0.016l-0.559-0.35l-0.383-0.153l-0.353,0.186l-0.677,1.36l-0.176,0.157l-0.591-0.067l-1.934-0.511l-1.422-0.189l-0.512-0.322l-0.159-0.239l-0.334-0.394l-0.75-0.518l-0.432-0.167l-0.479,0.06l-0.529,0.3l-0.353,0.341l-0.785,0.979l-0.097,0.297l0.096,0.452l-0.017,0.353l-0.063,0.594l-0.16,0.058l-0.751,0.287l-0.895-0.093l-0.624-0.138l-0.367-0.054l-0.975,0.175l-0.479,0.102l-0.255,0.228l-0.222,1.287l-0.158,0.523l-0.365,0.497l-0.303,0.312z"/>
+ <path id="SL" country:name="Sierra Leone" d="M371.324,180.419l1.088-1.235l0.643-0.866l0.238-0.157l0.594,0.039l1.137-0.148l0.466,0.04l0.42,0.224l0.456,0.421l0.475,0.619l0.252,0.761l0.165,1.369l0.26,0.656l-0.259,0.502l-1.184,1.151l-0.63,0.724l-0.285,0.256l-0.061,0.103l-0.631-0.523l-0.661-0.408l-0.483-0.196l-0.033-0.141l0.061-0.297l-0.05-0.184l-0.531-0.21l-0.792-0.549l-0.389-0.366l-0.375-0.465l0.494-0.241l0.174-0.227l-0.034-0.155l-0.484-0.211l-0.065-0.113l0.022-0.173z"/>
+ <path id="LK" country:name="Sri Lanka" d="M579.606,186.906l-0.493-0.083l-0.265-0.197l-0.21-0.353l-0.246-0.621l-0.361-1.256l-0.034-0.649l0.005-0.763l-0.02-0.904l-0.24-0.696l0.188-0.513l-0.298-0.35l0.068-0.28l0.423,0.023l0.349-0.43l0.053-0.367l0.226-0.369l-0.152-0.537l0.529,0.48l0.699,0.38l0.234,0.395l0.549,0.776l0.175,0.324l-0.099,0.339l0.024,0.141l0.592,0.338l0.266,0.733l0.798,1.368l0.136,0.508l-0.193,0.735l-0.397,0.679l-0.369,0.396l-0.514,0.425l-0.78,0.284l-0.642,0.043z"/>
+ <path id="PM" country:name="Panama" d="M217.111,178.792l0.52,0.307l0.195,0.512l0.02,0.374l0.363,0.155l0.628,0.024l0.244-0.205l0.398,0.43l0.726,0.082l0.458-0.083l1.348-0.751l0.514-0.046l1.387-0.921l0.373,0.144l0.742,0.069l0.071,0.156l0.789-0.017l0.767,0.21l0.666,0.38l0.644,0.563l0.406,0.666l0.084,0.327l0.228,0.149l0.509,1.038l-0.322,0.062l-0.094,0.43l-0.584,0.409l-0.085-0.307l-0.19-0.082l0.045,0.45l-0.228,0.082l-0.256,0.753l-0.378-0.825l-0.441-0.762l-0.137-0.452l0.179-0.24l0.22-0.085l0.786,0.125l-0.336-0.193l-0.125-0.164l-0.096-0.471l-0.309,0.307l-0.439,0.041l-0.244-0.378l-0.031-0.269l-0.193-0.282l-0.132,0.151l-0.226-0.287l-0.11,0.102l-0.132-0.266l-0.456-0.192l-0.562-0.013l-0.499,0.241l-0.382,0.108l-0.07,0.359l0.081,0.234l-0.529,0.318l-0.374,0.184l-0.335,0.029l-0.345,0.41l0.049,0.296l0.316,0.297l0.464,0.43l0.178,0.386l-0.011,0.146l-0.281,0.081l-0.243-0.042l-0.431,0.391l-0.568,0.105l-0.339-0.042l-0.189-0.146l0.108-0.164l-0.349-0.833l-0.244-0.353l-0.177,0.674l-0.812-0.409l-0.227-0.757l-0.207,0.041l-0.96-0.123l-0.434-0.266l-0.599,0l-0.314,0.113l-0.361,0.495l0.204-0.609l-0.243-0.184l0.374-0.369l-0.125-0.532l0.396-0.368l-0.507-0.307l0-0.58l0.014-0.321l0.219-0.205l0.478,0.184l0.074-0.123z"/>
+ <path id="GY" country:name="Guyana" d="M266.015,188.956l-0.503-0.647l-0.732-0.745l-0.324-0.521l0.071-0.212l0.395-0.539l-0.008-0.58l0.061-0.452l1.032-0.19l0.41-0.144l0.308-0.299l-0.141-0.282l-0.62-0.604l-0.074-0.212l0.101-0.255l1.655-1.239l0.061-0.41l-0.095-0.296l0.072,0.049l0.496,0.338l0.856,0.521l0.695,0.521l0.587,0.663l0.128,0.409l-0.036,0.734l0.148,0.945l0.298-0.593l0.22-0.099l0.6,0.182l0.101,0.127l0.507,0.295l0.708,0.549l0.401,0.493l0.374,0.649l-0.015,0.339l-0.142,0.496l-0.082,0.862l-0.183,0.27l-1.131,0.091l-0.169,0.17l0.078,0.777l-0.095,0.467l-0.328,0.694l0.571,0.831l0.532,0.675l0.561,0.067l0.185,0.295l0.246,0.832l0.49,1.127l0.332,0.563l-0.06,0.212l-0.943-0.022l-0.934,0.429l-1,0.331l-0.505,0.314l-0.694,0.513l-0.686,0.075l-0.613-0.392l-1.103-0.897l-0.15-0.296l-0.008-0.396l0.072-0.354l-0.167-0.31l-0.281-0.394l-0.156-0.465l0.213-0.962l0.547-1.416l0.179-0.368l-0.435-0.958l-0.533-0.138l-0.304,0.001l0.452-1.09l-0.04-0.212l-0.26-0.111l-0.516-0.124l-0.302,0.058l-0.375,0.257z"/>
+ <path id="LR" country:name="Liberia" d="M377.518,182.142l0.193-0.376l0.252-0.242l0.367-0.143l0.528-0.046l0.338,0.097l0.165,0.366l0.22,0.846l0.009,0.65l-0.044,0.283l0.277,0.323l0.404,0.322l0.321,0.026l0.756-0.922l0.143-0.086l0.337,0.097l0.339,0.224l-0.062,0.17l0.119,0.55l-0.059,0.438l-0.501,0.865l0.05,0.183l0.194,0.183l0.369,0.097l0.592-0.032l1.264,1.334l0.131,0.282l-0.059,0.452l-0.247,0.849l-0.105,0.565l-0.041,0.919l-1.513-0.643l-1.221-0.619l-1.012-0.562l-0.403-0.423l-1.129-1.113l-1.111-0.76l-0.723-0.337l-0.901-0.535l-0.66-0.548l0.061-0.103l0.285-0.256l0.63-0.724l1.184-1.151l0.259-0.502z"/>
+ <path id="CD" country:name="Democratic Republic of the Congo (formerly Zaire)" d="M429.505,210.684l0.484,0.336l0.177,0.013l0.443-0.271l0.327-0.581l1.495-0.532l0.054,0.424l0.042,0.664l0.147,0.211l0.57-0.328l0.554-0.399l0.931-0.811l0.364-0.229l1.025-0.938l0.086-0.706l-0.122-0.72l0.074-0.396l0.193-1.159l0.343-0.751l0.47-0.836l0.41-0.454l0.809-0.599l0.525-0.229l0.459-0.427l0.139-0.523l0.169-0.708l0.115-0.61l0.254-1.342l0.196-2.021l0.156-0.764l0.094-0.551l0.349-0.821l0.558-0.837l0.398-1.203l0.031-0.156l-0.128-0.197l0.16-0.058l0.063-0.594l0.017-0.353l-0.096-0.452l0.097-0.297l0.785-0.979l0.353-0.341l0.529-0.3l0.479-0.06l0.432,0.167l0.75,0.518l0.334,0.394l0.159,0.239l0.512,0.322l1.422,0.189l1.934,0.511l0.591,0.067l0.176-0.157l0.677-1.36l0.353-0.186l0.383,0.153l0.559,0.35l0.271-0.016l0.93-0.486l0.93-0.373l0.593-0.102l0.862,0.207l0.399,0.026l0.256-0.058l0.13-0.241l0.082-0.551l0.4-0.13l1.15,0.361l0.687,0.264l0.287,0.167l0.319,0.026l0.962-0.344l0.496-0.145l0.143,0.239l0.795,0.772l0.348,0.493l0.525,0.477l0.366,0.195l0.352-0.016l0.258-0.242l0.529-0.37l0.384,0.012l0.684,0.631l0.16-0.1l0.436-0.582l0.258-0.157l0.207,0.083l1.032,0.926l1.288,1.32l0.063,0.028l0.159,0.183l-0.018,0.424l-0.26,1.88l0.128,0.253l0.191,0.027l0.479,0.04l0.271,0.182l0.111,0.31l-0.191,0.453l-1.195,1.066l-1.241,0.996l-0.255,0.284l-0.395,0.681l-0.217,1.02l-0.107,0.507l0.021,0.593l-0.025,0.734l0.057,0.748l-0.076,0.27l-0.188,0.298l-0.426,0.412l-0.301,0.171l-0.269,0.256l-0.122,0.425l-0.49,1.358l0.197,0.338l0.689,0.999l0.087,0.381l-0.04,0.438l0.014,0.636l0.237,0.634l0.017,1.329l-0.064,0.762l0.425,1.439l-0.102,0.848l0.122,0.693l0.486,0.631l0.936,0.898l0.428,0.78l0.689,1.804l-0.563,0.068l-3.015,0.499l-0.347,0.214l-0.154,0.198l-0.797,1.276l-0.029,0.622l0.372,2.088l-0.377,1.175l-0.3,1.02l0.043,0.296l0.456,0.605l0.837,0.843l0.445,0.279l0.515,0.012l0.448-0.455l0.362-0.186l0.136,0.183l0.032,0.791l0.028,1.427l-0.041,0.551l-0.371-0.012l-1.355-0.091l-0.348-0.21l-0.381-0.647l-0.561-0.731l-0.416-0.351l-0.477-0.252l-0.895-0.263l-0.38-0.28l-0.728-1.423l-0.212,0.354l-0.522,0.682l-0.366,0.087l-0.325-0.111l-0.922-0.164l-0.925-0.249l-0.489-0.194l-0.58-1.014l-0.175,0.071l-1.146,0.289l-0.195-0.056l-0.172-0.352l-0.365-0.379l-0.678-0.096l-1.24-0.147l-0.991,0.146l-0.859,0.26l-0.61,0.004l-0.199-0.197l-0.007-0.254l0.198-0.905l0.003-0.466l-0.306-0.62l-0.844-0.998l-0.117-0.211l-0.021-0.212l0.296-1.033l0.07-1.06l-0.109-0.607l-0.303-0.605l0.057-0.354l0.177-0.693l-0.052-0.183l-0.322-0.098l-1.231,0.093l-0.88,0.019l-0.212-0.168l0.055-0.48l-0.181-0.225l-2.016,0.082l-0.112,0.001l-0.089,0.354l0.027,0.593l-0.286,0.892l-0.184,0.411l-0.993,0.006l-0.899-0.122l-1.021,0.246l-0.88,0.034l-0.292-0.168l-0.64-0.787l-0.597-1.07l-0.537-1.409l-0.059-0.579l-0.121-0.521l-0.082-0.127l-0.321-0.111l-0.385-0.012l-1.104-0.008l-0.88,0.034l-0.624,0.003l-1.312-0.048l-0.945-0.052l-0.783,0.02l-0.432,0.03l-0.318,0.101l-0.896,0.062l-0.699,0.314l-0.56,0.06l-0.112-0.013l-0.322-0.922l0.012-0.053l0.74-0.3l-0.017-0.085l0.1-0.89l0.094-0.143l0.317-0.199l0.583-0.568z"/>
+ <path id="TZ" country:name="Tanzania, United Republic of" country:shortname="Tanzania" d="M468.568,202.653l1.277-0.05h4.659l1.448-0.033l4.663,2.568l3.553,1.984l0.137,0.381l-0.116,0.552l0.07,0.239l2.427,1.752l1.067,0.807l-0.237,0.427l-0.419,1.329l-0.137,1.017l0.109,0.551l0.665,0.987l0.768,0.577l-0.024,0.282l-0.263,0.354l-0.371,1.046l0.037,0.17l0.306,0.041l0.118,0.226l-0.172,0.692l-0.019,0.946l0.411,1.793l0.18,0.564l0.401,0.465l0.823,0.55l0.396,0.268l0.177,0.228l-1.157,0.836l-0.515,0.342l-1.218,0.402l-1.243,0.559l-0.448,0.031l-0.646-0.42l-0.276-0.083l-0.21,0.326l-0.543,0.766l-0.396,0.144l-0.42-0.054l-0.964,0.006l-0.963,0.02l-0.512-0.294l-0.323-0.394l-0.229-0.083l-0.123,0.128l-0.643,0.356l-0.526,0.088l-1.019-0.149l-0.898-0.018l-0.196-0.559l-0.135-0.766l-0.053-0.584l-0.135-0.946l-0.448-0.841l-0.663-0.538l-1.014-0.107l-0.223,0.016l-0.385-0.407l-0.732-0.349l-1.574-0.57l-1.269-0.6l-0.729-0.265l-0.263-0.21l-0.703-0.641l-0.689-1.804l-0.428-0.78l-0.936-0.898l-0.486-0.631l-0.122-0.693l0.102-0.848l-0.425-1.439l0.064-0.762l1.252-0.348l0.388-0.539l0.645-1.204l0.687-0.853l0.346-0.271l0.044-0.212l-0.148-0.239l-0.273-0.125l-0.401-0.068l-0.211-0.211l0.158-0.976l0.304-0.016l0.396-0.158l0.142-0.17l0.104-0.481l-0.167-0.493l-0.364-0.888l-0.121-0.748z"/>
+ <path id="RW" country:name="Rwanda" d="M464.786,206.235l-0.197-0.338l0.49-1.358l0.122-0.425l0.269-0.256l0.301-0.171l0.426-0.412l0.064,0.042l0.546,0.223l0.431-0.045l0.458-0.427l0.554-0.398l0.319-0.017l0.121,0.748l0.364,0.888l0.167,0.493l-0.104,0.481l-0.142,0.17l-0.396,0.158l-0.304,0.016l-0.559,0.031l-0.508,0.159l-0.391,0.567l-0.158,0.085l-0.396,0.13l-0.789-0.32l-0.688-0.024z"/>
+ <path id="BI" country:name="Burundi" d="M465.79,210.652l-0.017-1.329l-0.237-0.634l-0.014-0.636l0.04-0.438l-0.087-0.381l-0.689-0.999l0.688,0.024l0.789,0.32l0.396-0.13l0.158-0.085l0.391-0.567l0.508-0.159l0.559-0.031l-0.158,0.976l0.211,0.211l0.401,0.068l0.273,0.125l0.148,0.239l-0.044,0.212l-0.346,0.271l-0.687,0.853l-0.645,1.204l-0.388,0.539l-1.252,0.348z"/>
+ <path id="AO" country:name="Angola" d="M427.243,211.207l0.536-0.414l0.68-0.513l0.351-0.13l0.695,0.533l-0.583,0.568l-0.317,0.199l-0.094,0.143l-0.1,0.89l0.017,0.085l-0.74,0.3l0.143-0.625l-0.082-0.24l-0.505-0.796z M427.998,213.843l0.112,0.013l0.56-0.06l0.699-0.314l0.896-0.062l0.318-0.101l0.432-0.03l0.783-0.02l0.945,0.052l1.312,0.048l0.624-0.003l0.88-0.034l1.104,0.008l0.385,0.012l0.321,0.111l0.082,0.127l0.121,0.521l0.059,0.579l0.537,1.409l0.597,1.07l0.64,0.787l0.292,0.168l0.88-0.034l1.021-0.246l0.899,0.122l0.993-0.006l0.184-0.411l0.286-0.892l-0.027-0.593l0.089-0.354l0.112-0.001l2.016-0.082l0.181,0.225l-0.055,0.48l0.212,0.168l0.88-0.019l1.231-0.093l0.322,0.098l0.052,0.183l-0.177,0.693l-0.057,0.354l0.303,0.605l0.109,0.607l-0.07,1.06l-0.296,1.033l0.021,0.212l0.117,0.211l0.844,0.998l0.306,0.62l-0.003,0.466l-0.198,0.905l0.007,0.254l0.199,0.197l0.61-0.004l0.859-0.26l0.991-0.146l1.24,0.147l-0.214,1.344l0.195,1.059l0.269,0.323l0.089,0.254l-0.132,0.368l-0.436,0.44l-0.124,0.594l-0.125,0.086l-0.517-0.04l-3.408,0.091l-0.051,0.877l0.015,1.342l-0.024,3.249l0.017,0.848l0.023,0.594l0.099,0.438l0.308,0.394l0.471,0.436l1.354,1.391l0.611,0.632l-0.93,0.218l-1.96,0.379l-1.044,0.203l-0.717-0.08l-1.164,0.063l-0.408-0.083l-0.349-0.21l-2.024,0.026l-0.697-0.024l-0.622-0.151l-0.401-0.322l-0.305-0.366l-0.408-0.096l-0.989-0.023l-2.59,0.016l-1.636-0.019l-0.631-0.011l-1.296-0.006l-2.201,0.013l-0.636-0.151l-0.463-0.309l-0.45-0.478l-0.294-0.083l-0.499,0.088l-0.591,0.286l-0.778,0.513l-0.758-0.462l-0.352,0.144l-0.248,0.197l0.048-1.809l-0.017-0.805l-0.029-0.649l0.397-0.34l0.221-0.269l0.26-0.707l0.163-0.734l0.184-1.398l0.239-0.976l0.321-0.918l0.584-0.665l0.183-0.565l0.268-0.354l0.64-0.228l0.268-0.325l0.423-0.679l0.364-1.201l0.053-0.664l-0.046-0.848l-0.191-0.959l-0.201-0.536l-0.492-0.705l-0.476-0.776l-0.268-0.775l0.139-0.495l0.476-0.382l0.158-0.156l0.107-0.424l-0.006-0.479l-0.199-0.579l-0.489-0.69l-0.441-0.733l-0.203-1.031l-0.181-0.423l-0.276-0.366l-0.666-0.974l-0.072-0.15z"/>
+ <path id="ZM" country:name="Zambia" d="M452.198,239.34l-0.611-0.632l-1.354-1.391l-0.471-0.436l-0.308-0.394l-0.099-0.438l-0.023-0.594l-0.017-0.848l0.024-3.249l-0.015-1.342l0.051-0.877l3.408-0.091l0.517,0.04l0.125-0.086l0.124-0.594l0.436-0.44l0.132-0.368l-0.089-0.254l-0.269-0.323l-0.195-1.059l0.214-1.344l0.678,0.096l0.365,0.379l0.172,0.352l0.195,0.056l1.146-0.289l0.175-0.071l0.58,1.014l0.489,0.194l0.925,0.249l0.922,0.164l0.325,0.111l0.366-0.087l0.522-0.682l0.212-0.354l0.728,1.423l0.38,0.28l0.895,0.263l0.477,0.252l0.416,0.351l0.561,0.731l0.381,0.647l0.348,0.21l1.355,0.091l0.371,0.012l0.041-0.551l-0.028-1.427l-0.032-0.791l-0.136-0.183l-0.362,0.186l-0.448,0.455l-0.515-0.012l-0.445-0.279l-0.837-0.843l-0.456-0.605l-0.043-0.296l0.3-1.02l0.377-1.175l-0.372-2.088l0.029-0.622l0.797-1.276l0.154-0.198l0.347-0.214l3.015-0.499l0.563-0.068l0.703,0.641l0.263,0.21l0.729,0.265l1.269,0.6l1.574,0.57l0.732,0.349l0.385,0.407l0.559,0.887l0.434,0.859l0.013,0.324l-0.183,0.27l-0.709,0.344l-0.011,0.127l0.04,0.594l-0.091,1.682l0.08,0.353l0.216,0.168l0.511,0.266l0.072,0.197l-0.197,0.241l-0.472,0.258l-0.792,0.259l-0.146,0.34l-0.094,0.764l-0.3,0.807l0.2,0.479l0.261,0.408l0.394,0.125l-1.264,0.53l-1.696,0.575l-0.932,0.4l-2.165,0.578l-0.187,0.128l-0.009,0.495l0.152,0.465l0.087,0.438l-0.505-0.096l-0.999,0.049l-0.794,0.259l-0.636,0.54l-0.312,0.539l-0.019,0.579l-0.168,0.199l-0.285,0.114l-0.999,0.062l-0.621,0.202l-0.306,0.341l-0.777,0.937l-0.562,0.738l-0.825,0.951l-0.354,0.045l-0.803-0.165l-0.421-0.309l-0.334,0.129l-0.521,0.286l-0.404,0.017l-0.594-0.209l-0.264-0.097l-0.154-0.169l-0.163-0.027l-0.187-0.154l-0.456-0.393l-0.294-0.055l-1.089-0.093l-0.086-0.099l-0.165-0.056l-1.845,0.364z"/>
+ <path id="MW" country:name="Malawi" d="M477.231,225.874l-0.224,1.184l-0.107,0.48l0.252,0.917l0.177,1.017l0.149,0.408l0.238,0.268l0.803,0.588l1.189,1.166l0.454,0.661l0.14,0.48l-0.155,2.346l-0.04,0.41l-0.214,0.213l-0.432,0.073l-0.322,0.017l-0.229,0.213l-0.076,0.622l0.08,0.509l0.029,0.479l-0.096,0.283l-0.185-0.111l-0.562-0.463l-0.763-1.112l-0.484-0.548l-0.234-0.423l0.036-0.212l0.499-0.61l0.116-0.227l0.025-0.693l-0.1-0.96l-0.22-0.479l-0.261-0.056l-0.674,0.061l-0.702,0.132l-0.27-0.211l-0.343-0.407l-0.382-0.549l-0.195-0.041l-0.394-0.125l-0.261-0.408l-0.2-0.479l0.3-0.807l0.094-0.764l0.146-0.34l0.792-0.259l0.472-0.258l0.197-0.241l-0.072-0.197l-0.511-0.266l-0.216-0.168l-0.08-0.353l0.091-1.682l-0.04-0.594l0.011-0.127l0.709-0.344l0.183-0.27l-0.013-0.324l-0.434-0.859l-0.559-0.887l0.223-0.016l1.014,0.107l0.663,0.538l0.448,0.841l0.135,0.946l0.053,0.584l0.135,0.766l0.196,0.559z"/>
+ <path id="BO" country:name="Bolivia" d="M245.934,224.314l0.939,0.136l1.122,0.304l0.355-0.03l0.946-0.824l0.336,0.026l0.48,0.025l0.415-0.243l1.471-1.109l0.874-0.485l0.36-0.158l0.934-0.076l1.283,0.021l0.045,0.748l-0.079,0.621l-0.064,0.622l0.036,0.818l0.141,0.635l0.335,0.591l0.813,0.928l1.1,0.939l0.316,0.097l0.787,0.023l0.355-0.03l0.676,0.25l0.688,0.307l0.75,0.603l0.3,0.098l0.882,0.037l0.096,0.014l0.385,0.774l0.398,0.308l0.22,0.084l1.148-0.077l0.636,0.123l0.537,0.166l0.403,0.237l0.085,0.169l-0.038,0.565l0.203,1.029l0.03,0.706l0.138,2.032l0.249,0.944l0.153,0.112l0.967,0.036l0.5,0.012l1.615,0.019l0.693,0.024l0.042,0.296l-0.261,0.835l0.067,0.563l0.436,0.407l0.73,0.362l0.316,0.479l0.307,0.774l0.022,0.494l-0.185,1.173l-0.238,0.834l-0.38,0.765l-0.421,0.666l-0.089-0.084l-1.952-0.991l-0.352-0.054l-0.928,0.02l-0.843-0.01l-0.126,0.128l-1.076,0.204l-1.104,0.162l-0.784,0.202l-0.33,0.044l-0.332,0.383l-0.698,1.105l-0.278,0.341l-0.133,0.509l0.016,0.635l-0.385,1.188l-0.395,1.104l-0.149,0.325l-0.592-0.109l-1.33-0.077l-0.686,0.004l-1.034,1.784l-0.416-1.084l-0.341-0.309l-0.37-0.195l-0.531-0.067l-0.527,0.045l-0.901,0.034l-0.615-0.194l-0.193-0.169l-0.322-0.181l-0.292,0.27l-2.026,2.087l-1.047,0.006l-0.272-0.182l-0.397-2.144l-0.278-0.973l-0.212-0.563l-0.769-1.11l-0.249-0.676l0.04-0.354l0.437-1.555l-0.017-0.282l-0.761-0.744l-0.25-0.521l-0.193-1.213l-0.304-0.647l-0.555-0.745l-0.152-0.253l-0.018-0.142l-0.132-0.295l-0.049-0.48l0.12-0.227l0.723-0.61l0.285-0.439l-0.015-0.522l-0.604-1.168l-0.022-0.48l0.159-0.34l0.21-0.368l-0.347-0.845l0.102-0.452l0.532-0.582l0.221-0.34l0.156-0.34l-0.236-0.902l-0.057-0.522l0.143-0.848l0.15-0.523l0.437-0.736l-0.08-0.24l-0.922-1.646l-1.109-1.843z"/>
+ <path id="MZ" country:name="Mozambique" d="M473.575,260.04l-1.331,0.011l-0.192,0.058l-0.068-0.382l-0.261-0.889l0.071-0.495l-0.075-0.296l-0.095-0.324l0.03-0.806l0.057-1.301l-0.072-0.763l-0.147-0.678l-0.33-0.944l-0.441-0.689l-0.181-0.946l-0.295-1.199l-0.159-0.183l0.448-0.384l0.396-0.412l1.68-1.706l0.114-0.227l-0.09-0.367l0.075-0.834l0.229-0.481l0.736-0.683l0.205-0.341l0.168-0.41l-0.594-0.845l-0.118-0.805l-0.113-0.494l0.128-0.283l0.448-0.596l0.201-0.411l-0.132-0.805l-0.086-1.144l-0.031-0.791l-0.178-0.818l-0.441-0.379l-0.515-0.224l-1.167-0.347l-1.042-0.445l-0.658-0.223l-1.438-0.006l-0.137-0.14l-0.025-0.495l-0.011-0.212l-0.087-0.438l-0.152-0.465l0.009-0.495l0.187-0.128l2.165-0.578l0.932-0.4l1.696-0.575l1.264-0.53l0.195,0.041l0.382,0.549l0.343,0.407l0.27,0.211l0.702-0.132l0.674-0.061l0.261,0.056l0.22,0.479l0.1,0.96l-0.025,0.693l-0.116,0.227l-0.499,0.61l-0.036,0.212l0.234,0.423l0.484,0.548l0.763,1.112l0.562,0.463l0.185,0.111l0.096-0.283l-0.029-0.479l-0.08-0.509l0.076-0.622l0.229-0.213l0.322-0.017l0.432-0.073l0.214-0.213l0.04-0.41l0.155-2.346l-0.14-0.48l-0.454-0.661l-1.189-1.166l-0.803-0.588l-0.238-0.268l-0.149-0.408l-0.177-1.017l-0.252-0.917l0.107-0.48l0.224-1.184l0.898,0.018l1.019,0.149l0.526-0.088l0.643-0.356l0.123-0.128l0.229,0.083l0.323,0.394l0.512,0.294l0.963-0.02l0.964-0.006l0.42,0.054l0.396-0.144l0.543-0.766l0.21-0.326l0.276,0.083l0.646,0.42l0.448-0.031l1.243-0.559l1.218-0.402l0.515-0.342l1.157-0.836l0.128,0.167l0.212,0.479l-0.185,0.579l-0.302,0.453l-0.198,0.255l0.181,0.451l0.129,0.72l-0.012,0.466l0.182,1.115l-0.101,0.58l-0.258,0.325l0.374,0.705l0.154,0.494l-0.006,1.115l-0.004,0.819l0.043,0.184l0.185,0.127l0.327,0.084l0.015,0.269l-0.165,0.494l-0.563,0.58l0.184,0.381l-0.08,0.283l-0.418,0.565l-0.802,0.906l-0.512,0.622l-0.72,0.651l-1.36,0.751l-1.48,0.653l-0.73,0.228l-1.308,0.582l-0.852,0.637l-1.286,1.443l-0.886,0.85l-1.193,0.878l-1.181,0.836l-0.268,0.128l-0.035,0.96l-0.083,0.495l0.058,0.127l0.719,0.535l0.188,0.381l-0.166,0.452l-0.085,0.184l0.461,1.511l0.071,0.564l0.06,0.155l0.246,0.014l0.171-0.128l0.141-0.085l0.043,0.607l-0.234,2.218l-0.284,0.82l0.325,0.196l0.152,0.057l-0.025,0.325l-0.157,0.311l-0.516,0.566l-0.699,0.538l-0.664,0.34l-1.266,0.412l-0.796,0.312l-0.688,0.228l-0.895,0.524l-0.652,0.665l-0.337,0.51l0.292,0.338l0.589,0.338l0.045,0.325l-0.149,1.022z"/>
+ <path id="MG" country:name="Madagascar" d="M499.85,236.166l0.544-0.071l0.622-0.369l0.18,0.028l0.346,0.098l0.269-0.085l0.396-0.368l0.911-0.143l0.311,0.281l0.305-0.028l0.101-0.185l-0.171-0.366l0.771-0.539l0.423-0.198l0.322,0.226l0.389-0.213l-0.308-0.494l0.207-0.282l0.505-0.425l0.229,0.296l0.229,0.056l0.558-0.594l-0.158-0.197l-0.253-0.409l0.094-0.297l0.243,0.014l0.27-0.071l0.172-0.34l-0.297-0.875l0.06-0.339l0.255-0.043l0.117,0.07l0.253,0.438l0.28,0.099l0.2-0.41l0.692-0.524l0.235-0.367l0.134-0.452l0.168-0.692l-0.133-0.354l0.003-0.226l0.537-0.468l0.356,0.324l0.455,0.648l0.612,0.281l0.141,0.198l0.213,0.847l0.294,1.821l0.093,0.663l0.231,0.791l0.391,0.733l0.163,0.466l-0.038,0.367l-0.069,0.155l-0.058,0.099l-0.537,0.807l-0.22-0.127l-0.189-0.366l-0.555-0.748l-0.297,0.143l-0.05,0.424l0.193,0.875l0.396,0.521l0.079,0.396l-0.307,0.636l-0.746,1.005l-0.045,0.452l0.041,0.89l-0.18,0.946l-0.709,2.12l-0.825,2.572l-1.254,3.788l-1.324,4.48l-0.518,1.568l-0.188,0.255l-0.508,0.637l-0.2,0.113l-1.369,0.102l-0.999,0.327l-0.474,0.468l-0.813,0.086l-0.363-0.465l-0.196-0.142l-0.546-0.182l-0.37,0.071l-0.269-0.057l-0.863-0.718l-0.104-0.24l-0.02-0.565l-0.104-0.239l-0.46-0.366l-0.124-0.282l0.001-0.721l0.345-1.088l-0.094-0.325l-0.287-0.479l-0.62-0.931l-0.189-0.494l0.075-0.664l0.391-1.37l0.228-0.213l0.474-0.185l0.768-1.371l0.686-1.174l0.104-0.325l0.151-1.103l-0.11-0.353l-0.278-0.226l-0.354-0.366l0.066-0.184l0.252-0.509l-0.521-0.861l-0.117-0.677l-0.069-0.494l-0.231-0.721l0.024-0.112l0.517-0.693l0.362-0.594l0.163-0.438l0.007-1.073l0.484-0.016z"/>
+ <path id="ZW" country:name="Zimbabwe" d="M468.138,234.908l0.011,0.212l0.025,0.495l0.137,0.14l1.438,0.006l0.658,0.223l1.042,0.445l1.167,0.347l0.515,0.224l0.441,0.379l0.178,0.818l0.031,0.791l0.086,1.144l0.132,0.805l-0.201,0.411l-0.448,0.596l-0.128,0.283l0.113,0.494l0.118,0.805l0.594,0.845l-0.168,0.41l-0.205,0.341l-0.736,0.683l-0.229,0.481l-0.075,0.834l0.09,0.367l-0.114,0.227l-1.68,1.706l-0.396,0.412l-0.448,0.384l-0.342-0.225l-0.547-0.124l-0.442-0.025l-0.529,0.145l-0.31,0.016l-0.99-0.403l-0.597-0.139l-0.72-0.023l-0.067-0.042l-0.186-0.098l-0.306-0.451l-0.479-0.35l-0.549-0.167l-0.938-0.136l-0.352-0.153l-0.524-0.873l-0.163-0.564l0.032-0.565l-0.127-0.239l-0.78,0.019l-0.201-0.098l-0.109-0.211l0.051-0.537l-0.106-0.169l-0.552-0.266l-0.533-0.223l-0.57-0.321l-0.563-0.491l-0.377-0.662l-0.246-0.96l-0.469-0.604l-0.43-0.478l-0.267-0.451l0.103-0.227l0.594,0.209l0.404-0.017l0.521-0.286l0.334-0.129l0.421,0.309l0.803,0.165l0.354-0.045l0.825-0.951l0.562-0.738l0.777-0.937l0.306-0.341l0.621-0.202l0.999-0.062l0.285-0.114l0.168-0.199l0.019-0.579l0.312-0.539l0.636-0.54l0.794-0.259l0.999-0.049l0.505,0.096z"/>
+ <path id="NA" country:name="Namibia" d="M444.673,255.519l-0.006,3.434l0.031,1.894l0.025,2.246l-0.057,0.205l-0.454,0.318l-0.545,0.302l-0.581,0.498l-0.427,0.034l-0.581-0.166l-0.745-0.042l-0.892,0.048l-0.517-0.039l-0.296-0.212l-0.055-0.528l-0.042-0.345l-0.193-0.222l-0.637-0.348l-0.329-0.127l-0.335,0.116l-0.109,0.217l-0.317,0.416l-0.584,0.27l-0.152,0.068l-0.458-0.491l-1.041-1.001l-0.458-0.606l-0.359-1.03l-0.345-0.72l-0.136-0.493l0.12-0.269l0.053-0.34l-0.458-0.719l-0.231-0.861l0.148-0.861l-0.002-0.48l-0.537-1.326l-0.496-2.244l0.772-0.02l0.04-0.678l-0.077-0.749l-0.456-0.006l0.016-0.06l-0.099-0.522l-0.26-0.508l-1.018-1.283l-0.343-0.55l-1.102-2.158l-0.841-1.623l-0.9-1.509l-0.988-1.269l-0.511-1.044l-0.122-0.396l-0.045-0.551l0.015-0.578l0.248-0.197l0.352-0.144l0.758,0.462l0.778-0.513l0.591-0.286l0.499-0.088l0.294,0.083l0.45,0.478l0.463,0.309l0.636,0.151l2.201-0.013l1.296,0.006l0.631,0.011l1.636,0.019l2.59-0.016l0.989,0.023l0.408,0.096l0.305,0.366l0.401,0.322l0.622,0.151l0.697,0.024l2.024-0.026l0.349,0.21l0.408,0.083l1.164-0.063l0.717,0.08l1.044-0.203l1.96-0.379l0.93-0.218l1.845-0.364l0.165,0.056l0.086,0.099l1.089,0.093l0.294,0.055l0.456,0.393l-0.811,0.315l-0.891,0.02l-0.284,0.143l-0.993,0.938l-0.209,0.029l-0.62-0.773l-1.048,0.134l-2.962,0.47l-1.183,0.021l0.005,1.215l-0.007,1.286l-0.025,0.876l-0.043,1.201l0.002,3.561l-0.586,0.046l-1.564,0.052l-0.146,0.028l-0.106,2.657l-0.009,1.201l0.013,1.624l0.007,0.806z"/>
+ <path id="CL" country:name="Chile" d="M248.453,316.576l-0.306,0.101l-0.892-0.087l-0.538-0.293l-0.236-0.015l-0.311,0.163l-0.418,0.398l-0.498,0.192l-1.156,0.091l-0.349,0.09l-0.358,0.207l-0.267,0.621l-0.114,0.341l0.06,0.532l-0.163,0.622l-0.104,0.148l-0.453,0.031l-0.534,0.104l-0.956-0.413l0.667-0.639l0.326-0.444l0.582-0.4l0.025-0.147l-0.372-0.177l-0.273-0.117l-1.353,0.534l-1.01-0.013l-0.545,0.163l-0.202-0.339l0.128-0.192l0.959-0.268l0.266,0.028l0.792-0.208l0.441-0.118l-0.605-0.162l-0.582,0.002l-0.77,0.001l-0.014-0.413l0.265-0.31l-0.007-0.191l-0.446-0.073l-0.356-0.44l-0.66,0.384l-0.669-0.175l0.292-0.53l0.041-0.177l-0.378,0.045l-0.361,0.147l-0.416-0.396l-0.215-0.117l0.413-0.279l0.114-0.177l-0.091-0.278l-0.053-0.073l-0.351,0.03l-0.773-0.424l-0.135-0.059l0.844-0.192l0.253-0.161l0.1-0.294l0.396-0.366l0.049-0.234l-0.641,0.06l-0.257,0.104l-0.312-0.073l-0.256-0.672l0.573-0.395l-0.565-0.378l-0.12-0.421l0.757-0.452l-0.14-0.421l-0.686,0.422l-0.091-1.523l0.399-0.596l-0.185-0.825l0.013-0.218l0.593,0.014l0.41,0.245l0.711,0.071l0.171-0.246l0.002-0.159l-0.896-0.447l-0.867,0.146l-0.317-0.173l-0.536,0.059l-0.017-0.231l0.339-0.333l0.025-0.246l-0.067-0.087l0.186-0.202l0.536,0.014l0.229-0.377l0.01-0.216l-0.722-0.389l-0.354-0.129l-0.886,0.045l-0.332-0.101l-0.024-0.49l-0.939,0.16l-0.115-0.101l0.122-0.145l1.032-0.521l0.251-0.116l0.4-0.404l0.266-0.389l0.833-0.06l0.268,0.201l0.059,0.346l-0.648,0.202l-0.323,0.274l0.11,0.505l0.117,0.058l0.191-0.102l0.268-0.39l0.183-0.087l0.242,0.101l-0.037,0.317l0.057,0.504l0.886-0.996l0.161-0.678l0.056-0.647l0.237-0.375l0.079-0.058l0.631-0.217l-0.201-0.071l-0.438-0.143l-0.056-0.158l0.101-0.273l0.246-0.072l0.571-0.245l0.599-0.431l0.271-0.459l-0.061-0.229l-0.394-0.157l-0.662-0.399l-0.053-0.372l0.139-0.243l0.105-0.458l-0.06-0.828l0.366-0.33l0.676-0.272l-0.431-0.585l-0.053-0.784l0.133-0.158l0.554-0.157l0.054-0.314l-0.116-0.285l-0.317-0.085l-0.272-0.198l0.233-0.329l0.087-0.313l-0.401-0.185l-0.274-0.014l-0.161,0.101l-0.476,0.414l-0.548,0.058l-0.087,0.001l-0.289-0.199l-0.16-0.484l-0.399-0.726l-0.133-0.697l0.188-0.911l0.137-0.413l0.722-0.739l0.535-0.767l-0.006-0.326l-0.544-1.757l0.001-0.608l0.088-0.567l-0.076-0.438l-0.528-0.891l-0.04-0.298l0.236-0.198l0.499,0.098l0.182-0.085l0.2-0.142l0.097-0.143l0.41-1.288l0.252-0.481l0.304-0.935l0.18-0.65l0.664-0.808l0.363-0.722l0.201-0.636l0.252-0.946l0.311-0.691l0.187-0.128l0.273-0.382l0.013-0.296l-0.312-0.847l0.082-0.184l0.455-0.452l0.206-0.339l0.028-0.24l-0.093-0.226l-0.166-0.805l-0.292-2.088l-0.098-0.86l0.031-0.565l0.412-0.565l0.37-0.537l0.207-0.564l0.007-0.734l-0.339-0.521l-0.098-0.409l0.295-0.96l0.218-0.941l0.127-0.556l0.461-0.594l0.171-0.918l0.243-0.975l0.126-0.805l0.082-0.565l-0.063-1.087l0.422-0.664l0.211-0.494l-0.221-0.932l-0.048-0.833l0.148-0.24l-0.022-0.917l0.229-0.607l-0.124-0.297l-0.365-0.084l0.06-0.324l-0.046-0.396l0.223-0.198l0.402-0.198l0.137-0.424l-0.008-0.819l0.093-0.593l0.182-0.918l-0.004-2.344l-0.172-2.074l-0.042-1.539l-0.194-0.974l-0.15-0.387l0.852-0.275l0.259-0.298l0.228-0.933l0.15-0.199l0.586-0.187l0.152,0.253l0.555,0.745l0.304,0.647l0.193,1.213l0.25,0.521l0.761,0.744l0.017,0.282l-0.437,1.555l-0.04,0.354l0.249,0.676l0.769,1.11l0.212,0.563l0.278,0.973l0.397,2.144l0.272,0.182l1.047-0.006l0.107,0.056l0.212,0.14l0.161,0.154l-0.093,0.636l-0.541,1.457l-0.36,0.256l-1.346,0.53l-0.819,0.372l-0.204,0.312l0.25,0.817l-0.421,0.722l-0.007,0.579l0.113,0.437l0.34,0.449l0.03,0.226l-0.273,0.369l-0.161,0.382l0.114,0.507l0.53,0.477l0.011,0.227l-0.152,0.311l-0.333,0.017l-0.791,0.089l-0.329,0.835l-0.464,0.835l-0.608,0.694l-0.282,0.439l-0.823,1.839l0.167,1.466l0.054,0.762l-0.124,0.185l-0.492,0.271l-0.292,0.34l-0.388,1.201l-0.156,0.961l0.285,0.633l0.408,1.154l0.784,2.816l0.055,0.69l-0.075,0.41l-1.083,1.854l-0.319,0.595l0.088,0.409l0.189,1.06l-0.078,0.325l-1.334,1.11l-0.231,0.312l-0.142,1.075l0.014,1.16l0.249,1.103l0.437,0.932l-0.202,0.143l-0.951,0.529l-0.126,0.17l-0.053,0.312l-0.511,2.427l-0.316,0.541l-0.1,0.37l0.123,1.835l0.231,0.867l0.012,0.427l-0.596,0.317l-0.172,0.172l-0.106,0.271l0.094,1.226l0.125,0.128l0.555,0.111l0.088,0.655l-0.191,1.458l0.252,0.585l0.26,0.185l0.789,0.11l0.302,0.17l-0.007,0.186l-0.245,0.202l-0.322,0.13l-0.726,0.033l-0.757,0.146l0.176,0.171l0.586,0.298l0.552,0.385l0.017,0.216l-0.767,0.794l-0.059,1.094l0.158,1.035l-0.216,0.896l-0.212,0.434l-0.226,0.262l-0.598,0.161l-0.28,0.219l-0.249,0.781l0.446,0.648l-0.069,0.188l-0.296,1.218l-0.307,0.263l-1.729,1.01l-0.271,0.292l-0.037,0.45l0.28,1.309l0.508,1.123l0.218,0.043l0.961-0.283l0.654-0.121l0.187,0.248l0.231,2.285l0.778,0.568l0.669,0.041l1.41-0.052l2.827,0.132l0.841,0.217l1.385,0.36l0.286,0.039z M236.642,296.773l-0.394-0.113l-0.43-0.028l-0.21-0.171l-0.133-0.229l0.21-0.457l0.15-0.657l-0.087-0.514l0.011-0.414l0.364-0.728l0.817-0.116l0.36,0.327l0.044,0.328l-0.688,0.443l-0.146,0.229l0.493,0.771l-0.194,1.058l-0.167,0.271z M238.177,317.937l-0.445-0.177l0.083-0.842l-0.849,0.075l-0.073-0.368l0.218-0.354l0.823,0.102l0.508-0.207l0.205,0.103l0.054,0.812l-0.267,0.34l-0.257,0.518z M247.801,322.062l-1.033,0.102l-0.467-0.118l-0.55-0.237l-0.42,0.001l-0.481,0.104l-0.935,0.226l-0.496,0.03l0.125-0.343l0.202-0.312l-0.104-0.312l0.906-0.15l1.434,0.058l0.433,0.323l0.706-0.007l-0.622-0.689l-0.307-0.163l-0.56-0.117l-0.178-0.089l-0.188,0.03l-0.338-0.341l-0.229-0.4l1.611-0.581l-0.044-0.296l-0.165-0.147l-1.819,0.285l-0.292-0.222l0.263-0.474l0.146-0.163l1.074-0.52l0.868-0.637l0.414,0.28l1.153,0.062l-0.008,1.144l-0.098,3.675z"/>
+ <path id="BW" country:name="Botswana" d="M456.133,239.67l0.187,0.154l0.163,0.027l0.154,0.169l0.264,0.097l-0.103,0.227l0.267,0.451l0.43,0.478l0.469,0.604l0.246,0.96l0.377,0.662l0.563,0.491l0.57,0.321l0.533,0.223l0.552,0.266l0.106,0.169l-0.051,0.537l0.109,0.211l0.201,0.098l0.78-0.019l0.127,0.239l-0.032,0.565l0.163,0.564l0.524,0.873l0.352,0.153l0.938,0.136l0.549,0.167l0.479,0.35l0.306,0.451l0.186,0.098l-0.317,0.411l-0.388,0.327l-0.507,0.243l-0.747,0.075l-0.304,0.115l-0.7,0.823l-0.586,0.583l-0.362,0.229l-0.747,0.357l-0.388,0.355l-0.107,0.636l-0.222,0.666l-0.247,0.241l-0.634,0.357l-0.98,0.33l-0.249,0.214l-0.217,0.708l-0.345,0.963l-0.288,0.354l-0.237,0.129l-0.584,0.116l-0.43-0.026l-0.473,0.06l-0.511-0.011l-0.819-0.193l-0.744-0.32l-0.979-0.645l-0.545-0.039l-0.333,0.186l-0.084,0.24l-0.585,1.134l-0.382,0.469l-0.651,0.625l-0.632,0.428l-0.8,0.372l-0.823,0.033l-0.854,0.047l-0.368-0.097l-0.11-0.183l0.003-0.48l0.243-0.609l0.166-0.538l-0.21-0.762l-0.547-0.943l-0.716-0.787l-0.528-0.067l-0.007-0.806l-0.013-1.624l0.009-1.201l0.106-2.657l0.146-0.028l1.564-0.052l0.586-0.046l-0.002-3.561l0.043-1.201l0.025-0.876l0.007-1.286l-0.005-1.215l1.183-0.021l2.962-0.47l1.048-0.134l0.62,0.773l0.209-0.029l0.993-0.938l0.284-0.143l0.891-0.02l0.811-0.315z"/>
+ <path id="PY" country:name="Paraguay" d="M279.288,257.295l0.02,0.239l-0.544,1.57l-0.375,0.468l-1.007,0.74l-0.301,0.27l-0.352,0.51l-0.609-0.363l-0.35-0.097l-0.235,0.029l-0.387,0.172l-0.745,0.131l-0.71,0.005l-0.564-0.096l-0.992-0.333l-0.607-0.025l-1.187,0.332l-0.19-0.056l0.064-0.212l0.425-0.426l0.486-0.398l0.11-0.198l-0.21-0.619l0.048-0.227l0.625-0.851l0.617-1.203l0.018-0.268l-0.939-0.503l-0.65-0.18l-1.448-0.697l-1.632-1.106l-0.671-0.307l-1.173-0.204l-0.498-0.237l-0.835-0.588l-0.576-0.562l-1.271-1.376l-0.782-0.913l-0.225-0.337l-0.19-0.056l0.149-0.325l0.395-1.104l0.385-1.188l-0.016-0.635l0.133-0.509l0.278-0.341l0.698-1.105l0.332-0.383l0.33-0.044l0.784-0.202l1.104-0.162l1.076-0.204l0.126-0.128l0.843,0.01l0.928-0.02l0.352,0.054l1.952,0.991l0.089,0.084l0.253,0.408l0.084,0.663l0.521,0.872l0.104,0.959l-0.132,0.862l-0.086,0.721l-0.006,0.72l0.372,0.04l0.818,0.15l0.925,0.221l0.346-0.03l0.709-0.413l0.115-0.001l0.724,0.278l0.843,0.404l0.121,0.437l0.487,2.524l0.254,0.563l0.224,0.055l1.29-0.445l0.234,0.112l0.491,0.336l0.019,0.141l-0.321,0.75l-0.298,0.835l-0.222,0.819l-0.027,0.777l0.063,0.423z"/>
+ <path id="ZA" country:name="South Africa" d="M444.673,255.519l0.528,0.067l0.716,0.787l0.547,0.943l0.21,0.762l-0.166,0.538l-0.243,0.609l-0.003,0.48l0.11,0.183l0.368,0.097l0.854-0.047l0.823-0.033l0.8-0.372l0.632-0.428l0.651-0.625l0.382-0.469l0.585-1.134l0.084-0.24l0.333-0.186l0.545,0.039l0.979,0.645l0.744,0.32l0.819,0.193l0.511,0.011l0.473-0.06l0.43,0.026l0.584-0.116l0.237-0.129l0.288-0.354l0.345-0.963l0.217-0.708l0.249-0.214l0.98-0.33l0.634-0.357l0.247-0.241l0.222-0.666l0.107-0.636l0.388-0.355l0.747-0.357l0.362-0.229l0.586-0.583l0.7-0.823l0.304-0.115l0.747-0.075l0.507-0.243l0.388-0.327l0.317-0.411l0.067,0.042l0.72,0.023l0.597,0.139l0.99,0.403l0.31-0.016l0.529-0.145l0.442,0.025l0.547,0.124l0.342,0.225l0.159,0.183l0.295,1.199l0.181,0.946l0.441,0.689l0.33,0.944l0.147,0.678l0.072,0.763l-0.057,1.301l-0.03,0.806l0.095,0.324l-1.449-0.585l-0.279,0.199l-0.657,0.979l-0.28,0.567l-0.005,0.325l0.39,0.676l0.307,0.465l0.458,0.322l0.671,0.109l0.595-0.004l0.076-0.594l0.064-0.198l0.312-0.186l0.131-0.015l0.192-0.058l1.331-0.011l-0.182,1.195l-0.352,0.849l-0.182,0.184l-0.404,0.1l-0.093,0.24l0.199,0.536l-0.104,0.467l-0.248,0.354l-0.569,0.453l-0.923,0.581l-0.591,0.75l-1.383,1.98l-0.631,0.834l-1.242,1.373l-1.193,1.062l-0.829,0.863l-1.434,1.034l-1.379,1.091l-0.552,0.382l-0.989,0.638l-0.676,0.298l-0.782,0.101l-0.98-0.012l-0.549,0.071l-0.132,0.354l0.013,0.127l-0.109,0.085l-0.449-0.098l-0.553-0.126l-0.303,0.015l-0.25,0.198l-0.272,0.312l-0.226,0.113l-0.36-0.056l-0.768-0.408l-0.759-0.168l-0.542-0.013l-0.31,0.113l-0.38,0.27l-0.482-0.099l-0.645-0.21l-0.295,0.1l-0.638,0.043l-0.589,0.214l-0.729,0.538l-0.72,0.086l-0.44-0.013l-0.667-0.084l-0.738,0.072l-0.575,0.199l-0.827,0.82l-1.251-0.576l-0.092-0.509l-0.218-0.183l-0.479-0.056l-0.28,0.085l-0.257-0.479l-0.343-0.056l-0.149,0.255l-0.035,0.197l-0.312-0.112l-0.119-0.226l0.267-0.495l0.103-0.424l-0.857-1.354l-0.323-0.282l-0.134-0.226l0.173-0.17l0.636-0.044l0.172-0.424l0.06-0.819l-0.163-0.663l-0.186-0.522l-0.61-1.143l-0.75-1.029l-0.472-0.903l-0.612-1.383l-0.646-1.467l-0.573-0.818l-0.436-0.467l0.152-0.068l0.584-0.27l0.317-0.416l0.109-0.217l0.335-0.116l0.329,0.127l0.637,0.348l0.193,0.222l0.042,0.345l0.055,0.528l0.296,0.212l0.517,0.039l0.892-0.048l0.745,0.042l0.581,0.166l0.427-0.034l0.581-0.498l0.545-0.302l0.454-0.318l0.057-0.205l-0.025-2.246l-0.031-1.894l0.006-3.434z M462.462,268.501l0.412-0.044l0.194-0.553l0.633-0.343l1.035-0.303l0.263-0.199l0.582-1.007l0.268-0.326l0.143-0.241l-0.104-0.226l-0.967-0.744l-0.33-0.337l-0.422-0.266l-0.308,0.086l-0.995,0.359l-0.65,0.329l-0.513,0.567l-0.275,0.44l-0.691,0.611l0.12,0.409l0.582,0.858l0.285,0.366l0.739,0.561z M432.955,250.661l0.456,0.006l0.077,0.749l-0.04,0.678l-0.772,0.02l-0.078-0.354l-0.028-0.396l0.285-0.297l0.101-0.406z"/>
+ <path id="SZ" country:name="Swaziland" d="M471.719,258.047l0.075,0.296l-0.071,0.495l0.261,0.889l0.068,0.382l-0.131,0.015l-0.312,0.186l-0.064,0.198l-0.076,0.594l-0.595,0.004l-0.671-0.109l-0.458-0.322l-0.307-0.465l-0.39-0.676l0.005-0.325l0.28-0.567l0.657-0.979l0.279-0.199l1.449,0.585z"/>
+ <path id="LS" country:name="Lesotho" d="M462.462,268.501l-0.739-0.561l-0.285-0.366l-0.582-0.858l-0.12-0.409l0.691-0.611l0.275-0.44l0.513-0.567l0.65-0.329l0.995-0.359l0.308-0.086l0.422,0.266l0.33,0.337l0.967,0.744l0.104,0.226l-0.143,0.241l-0.268,0.326l-0.582,1.007l-0.263,0.199l-1.035,0.303l-0.633,0.343l-0.194,0.553l-0.412,0.044z"/>
+ <path id="NZ" country:name="New Zealand" d="M790.15,283.022l0.738,0.197l0.008-0.227l-0.242-0.524l0.052-0.284l0.233,0.014l0.389,0.17l0.37,0.751l0.277,0.964l0.48,0.17l1.753,0.691l0.506,0.113l0.37-0.072l0.699-0.483l0.885-0.343l0.4,0.027l0.329,0.17l0.066,0.454l-0.022,0.198l-0.402,1.236l-0.283,0.072l-0.761,0.058l-0.035,0.683l-0.124,0.156l-0.424,0.029l-0.746,0.016l-0.432,0.2l-0.271,0.284l0.041,0.384l0.254,0.525l-0.002,0.213l-0.151,0.199l-0.646,0.515l-0.898,1.129l-0.847,1.058l-0.756,0.587l-0.68,0.316l-0.337-0.171l-0.47-0.313l-0.237-0.328l0.056-0.314l0.288-0.386l0.307-0.671l0.398-0.5l-0.031-0.343l-0.271-0.128l-0.761-0.582l-0.421-0.185l-0.593-0.184l-0.98-0.452l-0.306-0.256l-0.11-0.17l0.081-0.128l0.419-0.157l1.389-0.685l0.209-0.512l-0.078-0.695l0.087-0.312l0.396-0.441l0.032-0.383l-0.482-0.837l0.081-0.567l-0.156-0.311l-0.479-0.655l-0.574-0.678l0.102-0.164l-0.145-0.304l-0.291-0.351l-0.336-0.188l-0.29-0.163l0.117,0.233l0.497,0.515l0.049,0.141h-0.169l-0.211-0.281l-0.525-0.631l-0.622-0.771l-0.518-0.561l0.001-0.117l-0.268-0.257l0.04-0.141l0.013-0.14l-0.048-0.188l-0.197-0.396l-0.379-0.42l-0.347-0.257l0.163-0.046l0.205,0.093l0.358-0.047l0.131-0.093l0.084,0.28l-0.149,0.187l0.186,0.303l0.177,0.21l0.167,0.116l0.228,0.164l0.041-0.141l0.269,0.023l0.519,0.257l0.42,0.117l0.274,0.07l0.128,0.257l-0.011,0.141l0.185,0.023l0.146-0.188l0.185,0.023l-0.022,0.164l0.227,0.351l0.249,0.187l0.233,0.28l-0.18,0.023l-0.076,0.164l0.093,0.163l-0.242-0.023l-0.175-0.047l0.143,0.117l0.251,0.188l0.23,0.233l0.352,0.28l0.063,0.234l0.019,0.21l-0.261-0.047l0.096,0.164l0.239,0.351l0.256,0.188l-0.292,0.023h-0.226l-0.205-0.047l-0.006,0.141l0.306,0.14l0.324,0.164l-0.09,0.211l0.205,0.046l0.265-0.023h0.226l0.223,0.141l-0.114,0.07l-0.031,0.141l0.025,0.141l0.136,0.06zM782.939,297.694l-0.088,0.158l-0.558,0.13l-0.309,0.288l-0.322,0.101l-0.246,0.244l-0.692-0.242l-0.16,0.086l0.15,0.216l0.429,0.415l-0.141,0.173l0.02,0.259l-0.064,0.431l-0.218-0.071l-0.976-0.099l0.418,0.229l0.449,0.244l-0.278,0.49l-0.427,0.896l-0.212,0.549l-0.418,0.318l-0.673,0.349l-0.171,0.246l-0.259,0.145l-0.581,0.233l-0.593,0.406l-0.398,0.015l-1.156-0.258l-0.628,0.112l-0.585-0.442l-0.812-0.158l-0.373-0.066l-0.162-0.308l-0.467-0.098l-0.24,0.142l-0.062,0.168l-0.78,0.095l-0.214-0.166l-0.515-0.095l-0.146-0.286l0.432-0.089l-0.223-0.216l0.328-0.116l0.322-0.001l-0.452-0.482l0.82,0.266l-0.464-0.576l0.121-0.145l0.946,0.156l0.082-0.13l-0.141-0.173l-0.201-0.216l-0.06-0.288l0.283-0.303l0.569-0.246l0.328-0.374l0.561-0.375l0.102-0.302l0.998-0.575l1.106-0.275l0.713-0.331l0.544-0.36l0.377-0.101l0.685-0.575l0.066-0.272l0.48-0.302l0.373-0.015l0.787-0.331l0.664-0.402l0.126-0.215l-0.008-0.172l0.266-0.144l0.448-0.302l-0.109-0.501l0.076-0.214l0.166-0.44l0.306,0.048l0.066-0.152l0.58-0.259l0.444-0.272l0.137-0.285l0.131-1.187l0.512-0.647l0.372,0.047l0.365,0.165l0.032,0.259l0.337,0.06l0.187,0.186l0.231,0.799l0.312,0.242l0.973-0.645l0.426-0.029l0.367,0.113l0.222,0.5l-0.197,0.399l0.299,0.429l0.066,0.271l-0.611,0.659l-0.261,0.401l-0.476,0.358l-0.868,0.746l-0.578,0.359l-0.295,0.13l-0.236,0.258l-0.389,0.159l-0.271,0.258l0.416,0.407l0.428,0.047l0.421,0.289l-0.276,0.113l-0.484,0.07l-0.503-0.296l-0.488,0.131l-0.352,0.158z"/>
+ <path id="AR" country:name="Argentina" d="M247.899,318.387l0.008-1.144l0.821,0.289l0.06,0.206l-0.354,0.312l-0.534,0.337z M248.453,316.576l-0.286-0.039l-1.385-0.36l-0.841-0.217l-2.827-0.132l-1.41,0.052l-0.669-0.041l-0.778-0.568l-0.231-2.285l-0.187-0.248l-0.654,0.121l-0.961,0.283l-0.218-0.043l-0.508-1.123l-0.28-1.309l0.037-0.45l0.271-0.292l1.729-1.01l0.307-0.263l0.296-1.218l0.069-0.188l-0.446-0.648l0.249-0.781l0.28-0.219l0.598-0.161l0.226-0.262l0.212-0.434l0.216-0.896l-0.158-1.035l0.059-1.094l0.767-0.794l-0.017-0.216l-0.552-0.385l-0.586-0.298l-0.176-0.171l0.757-0.146l0.726-0.033l0.322-0.13l0.245-0.202l0.007-0.186l-0.302-0.17l-0.789-0.11l-0.26-0.185l-0.252-0.585l0.191-1.458l-0.088-0.655l-0.555-0.111l-0.125-0.128l-0.094-1.226l0.106-0.271l0.172-0.172l0.596-0.317l-0.012-0.427l-0.231-0.867l-0.123-1.835l0.1-0.37l0.316-0.541l0.511-2.427l0.053-0.312l0.126-0.17l0.951-0.529l0.202-0.143l-0.437-0.932l-0.249-1.103l-0.014-1.16l0.142-1.075l0.231-0.312l1.334-1.11l0.078-0.325l-0.189-1.06l-0.088-0.409l0.319-0.595l1.083-1.854l0.075-0.41l-0.055-0.69l-0.784-2.816l-0.408-1.154l-0.285-0.633l0.156-0.961l0.388-1.201l0.292-0.34l0.492-0.271l0.124-0.185l-0.054-0.762l-0.167-1.466l0.823-1.839l0.282-0.439l0.608-0.694l0.464-0.835l0.329-0.835l0.791-0.089l0.333-0.017l0.152-0.311l-0.011-0.227l-0.53-0.477l-0.114-0.507l0.161-0.382l0.273-0.369l-0.03-0.226l-0.34-0.449l-0.113-0.437l0.007-0.579l0.421-0.722l-0.25-0.817l0.204-0.312l0.819-0.372l1.346-0.53l0.36-0.256l0.541-1.457l0.093-0.636l-0.161-0.154l-0.212-0.14l-0.107-0.056l2.026-2.087l0.292-0.27l0.322,0.181l0.193,0.169l0.615,0.194l0.901-0.034l0.527-0.045l0.531,0.067l0.37,0.195l0.341,0.309l0.416,1.084l1.034-1.784l0.686-0.004l1.33,0.077l0.592,0.109l0.19,0.056l0.225,0.337l0.782,0.913l1.271,1.376l0.576,0.562l0.835,0.588l0.498,0.237l1.173,0.204l0.671,0.307l1.632,1.106l1.448,0.697l0.65,0.18l0.939,0.503l-0.018,0.268l-0.617,1.203l-0.625,0.851l-0.048,0.227l0.21,0.619l-0.11,0.198l-0.486,0.398l-0.425,0.426l-0.064,0.212l0.19,0.056l1.187-0.332l0.607,0.025l0.992,0.333l0.564,0.096l0.71-0.005l0.745-0.131l0.387-0.172l0.235-0.029l0.35,0.097l0.609,0.363l0.352-0.51l0.301-0.27l1.007-0.74l0.375-0.468l0.544-1.57l-0.02-0.239l0.957-0.161l0.462-0.017l0.206,0.196l0.517,1.154l-0.094,1.638l-0.161,0.467l-0.521,0.313l-1.754,0.744l-0.348,0.242l-1.633,1.448l-1.435,1.363l-1.805,1.816l-0.833,0.88l-0.214,0.27l-0.443,0.524l-0.065,0.452l-0.595,2.359l-0.103,0.522l0.049,0.847l0.168,0.986l-0.118,0.325l-0.48,0.524l-0.24,0.495l-0.011,0.522l0.194,0.577l-0.054,0.338l-0.162,0.273l-0.26,0.325l0.015,0.226l0.924,0.831l0.68,0.281l0.715,0.281l0.283,0.169l0.281,0.325l-0.025,0.325l-0.362,0.523l-0.043,0.396l0.105,0.339l0.174,0.269l0.466,0.325l0.522,0.168l0.109,0.113l0.226,0.892l-0.308,0.481l-0.75,0.937l-0.729,0.766l-0.313,0.737l-0.368,0.284l-0.832,0.342l-1.04,0.342l-1.92,0.401l-1.795,0.188l-1.361,0.116l-0.945,0.044l-1.175-0.11l-0.934-0.226l-0.128,0.199l0.036,0.808l0.322,0.312l0.308,0.184l-0.09,0.298l-0.381,0.624l-0.345,0.498l-0.069,0.385l0.392,0.682l0.066,0.285l-0.208,0.214l-0.105,0.057l-1.251,0.473l-1.137,0.116l-0.814-0.069l-0.967-0.34l-1.47-0.396l-0.246,0.057l-0.23,0.271l0.041,0.598l0.429,0.684l0.037,0.398l-0.242,0.643l0.092,0.385l0.773,0.54l0.796,0.084l0.369-0.2l-0.387-0.398l0.872-0.188l0.383-0.043l0.234,1.041l0.052,0.3l-0.144,0.157l-0.299,0.101l-0.448,0.072l-0.261-0.157l-0.104-0.299l-0.115-0.071l-1.046,0.073l-0.67,0.201l-0.212,0.101l0.151,0.214l0.591,0.07l0.47,0.113l0.452,0.113l0.06,0.028l-0.864,0.388l-0.776,0.287l-0.577,0.602l0.003,0.414l0.161,0.787l-0.081,0.258l-0.815,0.817l0.022,0.215l0.423,0.371l-0.491,0.116l-1.194,0.088l-0.48,0.087l-0.632,0.246l-0.619,0.389l-0.56,0.548l-0.549,0.821l-0.052,0.389l0.061,0.375l0.312,0.591l0.48,0.446l0.98,0.633l0.657,0.244l0.97,0.143l0.362,0.086l0.14,0.274l-0.151,0.796l-0.128,0.348l-0.342,0.464l-0.189,0.145l-1.08,0.524l-1.541,0.814l-0.712,0.698l-0.179,0.276l-0.093,0.45l0.111,0.523l-0.169,0.451l-0.239,0.32l-0.97,0.454l-0.969,0.25l-0.421,0.221l-0.323,0.396l-0.226,0.791l-0.054,0.514l0.2,0.777l0.547,0.896l0.699,0.779l0.235,0.339l-0.101,0.032z M247.899,318.387l0.18,0.182l0.148,0.073l0.607-0.075l0.344,0.133l0.648,0.725l0.908,0.665l0.993,0.756l0.525,0.222l0.73,0.37l0.246,0.074l0.42-0.001l0.483,0.163l1.283,0.027l0.142-0.016l-0.006,0.224l-0.19,0.209l-0.492,0.06l-1.198,0.092l-0.777,0.196h-0.364l-1.179-0.355l-0.753-0.088l-1.15-0.027l-0.814-0.014l-0.831,0.081l0.098-3.675z"/>
+ <path id="IS" country:name="Iceland" d="M346.758,54.457l0.127-0.162l0.42-0.179l0.894,0.015l0.674-0.098l-0.354-0.227l-0.405-0.34l0.317-0.342l0.277,0l0.956,0.42l0.67,0.048l0.3-0.163l-0.191-0.26l-0.625-0.373l0.366-0.245l1.037,0.226l0.957,0.08l0.746,0.275l0.446,0.551l-0.119,0.405l-0.441,0.292l0.922,0.806l0.553-0.356l0.352-0.13l0.63-0.114l0.49-0.179l0.061-0.21l-0.169-0.778l0.542-0.245l0.501,0.454l0.426,0.307l0.489,0.209l0.215,0.016l0.185-0.13l-0.264-0.454l0.243-0.163l0.27-0.033l0.817-0.164l0.683,0.438l0.536,0.242l0.542,0.063l0.05-0.178l-0.358-0.535l1.006,0.145l1.439,0.079l0.787-0.115l0.427-0.229l-0.021-0.716l1.167,0.08l0.635,0.471l1.118,0.323l0.683,0.015l0.273,0.243l-0.252,0.552l0.786,0.29l1.674,0.159l0.127,0.145l0.143,0.548l-0.07,0.387l-0.152,0.256l-0.152,0.256l-0.443,0.129l-0.815,0.018l-0.195,0.096l-0.04,0.431l-0.515,0.463l-0.497,0.16l-0.568-0.031l-0.422-0.159l-0.817,0.495l-0.539,0.144l-1.46,0.463l-0.853,0.113l-0.726,0.001l-0.771,0.097l-0.784,0.587l-0.473,0.127l-1.078,0.097l-0.709-0.03l-1.316-0.171l-0.608-0.142l-1.283-0.489l-1.058-0.093l-0.443,0.064l-1.041-0.014l-1.834-0.124l-0.297-0.206l0.434-0.191l1.127-0.352l0.701-0.59l-0.818-0.015l-0.51-0.126l-0.428-0.398l-0.253-0.095l-0.358,0.081l-1.564,0.115l-0.557,0.033l-0.37-0.223l0.141-0.192l0.388-0.129l0.669-0.097l0.794-0.017l0.729-0.114l1.049-0.098l0.376-0.194l0.178-0.322l-0.144-0.258l-0.358-0.177l-0.426-0.015l-0.478-0.145l-1.005-0.047l-0.821,0.099l-0.424,0.162l-0.676,0.082l-1.041-0.272l-0.16-0.21z"/>
+ <path id="EE" country:name="Estonia" country:shortname="Estonia" d="M462.829,67.958l0.145,0.053l0.16,0.131l-0.043,0.174l-0.175,0.044h-0.189h-0.116l-0.088,0.043l-0.058,0.131l-0.175,0.277l-0.219,0.204l-0.319,0.131l-0.204,0.131l-0.088,0.16l0.029,0.16l0.131,0.437l0.073,0.189l0.029,0.16l-0.175,0.131v0.175l0.175,0.233l0.203,0.087l0.088,0.073v0.073l0.015,0.087l0.043,0.146l0.175,0.043l0.059,0.059l-0.175,0.073l-0.262,0.043l-0.16,0.058l-0.059,0.102l-0.087,0.116h-0.131L461.402,72l-0.015,0.087l-0.116,0.058l0.081,0.106l-0.125,0.025l-0.087-0.015l-0.306-0.043l-0.16-0.058l-0.175-0.073l-0.204-0.044l-0.131,0.102l-0.204-0.029l-0.131,0.044l-0.16,0.087l-0.146,0.014l-0.146-0.087l-0.116-0.029h-0.175l-0.204-0.117l-0.116-0.174l-0.203-0.117l-0.146-0.043l-0.072-0.117h-0.189l-0.247-0.043l-0.204-0.117h-0.029l-0.276-0.014l-0.102-0.102l-0.248-0.043l-0.116-0.102l-0.189-0.087v0.073l-0.116,0.087l-0.131-0.058l-0.015-0.073l-0.087-0.029h-0.103l-0.276,0.117l-0.102,0.029l-0.131,0.015l-0.219,0.015l-0.146,0.043l-0.262,0.029l-0.276,0.087l-0.116,0.102h-0.087l0.156-0.19l-0.003-0.351l0.183-0.238l-0.368-0.21l-0.605,0.437l-0.334-0.251l-0.527-0.038l0.043-0.942l-0.396,0.188l-0.336-0.415l0.158-0.202l-0.209-0.254l0.265-0.074l-0.092-0.252l0.344-0.042l1.026-0.084l-0.006-0.132l0.561-0.108l0.133-0.188l0.436,0.101l0.074-0.113l0.317,0.05l0.083-0.215l1.104,0.193l0.446-0.294l0.091,0.165l0.514-0.089l1.383,0.029l1.152,0.167l0.305,0.12l0.592-0.045l0.971,0.09l0.426-0.108l0.271-0.24l-0.006-0.009z"/>
+ <path id="LV" country:name="Latvia" country:shortname="Latvia" d="M461.353,72.251l0.37-0.004l-0.015,0.116v0.117l0.232,0.073l0.204,0.087l0.087,0.073l0.204,0.058l-0.015,0.087l-0.029,0.116l-0.015,0.087l-0.102,0.073l-0.087,0.015l-0.103,0.029l0.131,0.087l-0.072,0.131l0.029,0.117l-0.073,0.087l-0.102,0.073l-0.044,0.102l0.204-0.059l0.146-0.015l0.131,0.073l0.087,0.014l0.073,0.044l-0.059,0.087l-0.043,0.073l0.116,0.102l0.131,0.058l0.029,0.16l0.146,0.102l0.16,0.043l-0.059,0.087l0.131,0.117l-0.015,0.189l0.088,0.233l-0.044,0.087l-0.015,0.117l-0.061,0.042l-0.241,0.044l-0.24,0.051l-0.12,0.12l-0.223,0.034l-0.137,0.154l-0.137,0.085l-0.069,0.103l-0.068,0.206l-0.188,0.035l-0.239-0.035l-0.24-0.034l-0.325-0.034h-0.359l-0.172,0.068l-0.103,0.137l-0.223,0.085h-0.154l-0.103-0.017l-0.086,0.052l-0.377-0.035l-0.273-0.068l-0.154-0.171l-0.138-0.154l-0.325-0.137l-0.497-0.223l-0.342-0.24l-0.377-0.034l-0.583-0.035l-0.325-0.12l-0.291-0.188l-0.086-0.257l-0.188,0.017l-0.171,0.068l-0.36,0.171l-0.394,0.017h-0.24l-0.273,0.085l-0.24-0.085l-0.309-0.103l-0.6-0.017l-0.291,0.069l-0.359-0.069l-0.291-0.051l-0.154,0.034l-0.274,0.069l-0.103-0.052l-0.12-0.137h-0.154l-0.257,0.068h-0.188l-0.754-0.017l-0.445-0.085l-0.754,0.171l-0.599,0.154l-0.429,0.103l-0.257,0.137l-0.052,0.188l-0.526,0.026l-0.065-0.059l0.073-0.837l0.035-0.302l0.127-0.167l0.672-0.379l0.034-0.717l0.267-0.162l0.267-0.273l0.217-0.203l0.296-0.026l1.056-0.199l0.166-0.046l0.162-0.066h0.29l0.049,0.237l0.657,0.388l0.422,0.162l0.23,0.473l0.091,0.15l0.441,0.196l0.785,0.059l0.868-0.244l0.24-0.122l0.178-0.288l-0.052-0.394l-0.193-0.869l0.198-0.243l0.045-0.055h0.087l0.116-0.102l0.276-0.087l0.262-0.029l0.146-0.043l0.219-0.015l0.131-0.015l0.102-0.029l0.276-0.117h0.103l0.087,0.029l0.015,0.073l0.131,0.058l0.116-0.087v-0.073l0.189,0.087l0.116,0.102l0.248,0.043l0.102,0.102l0.276,0.014h0.029l0.204,0.117l0.247,0.043h0.189l0.072,0.117l0.146,0.043l0.203,0.117l0.116,0.174l0.204,0.117h0.175l0.116,0.029l0.146,0.087l0.146-0.014l0.16-0.087l0.131-0.044l0.204,0.029l0.131-0.102l0.204,0.044l0.175,0.073l0.16,0.058l0.306,0.043l0.087,0.015l0.125-0.025z"/>
+ <path id="LT" country:name="Lithuania" country:shortname="Lithuania" d="M451.02,79.165l-0.029-0.038l-0.034-0.137l-0.018-0.171l0.068-0.206l0.068-0.154l0.224-0.12l-0.052-0.12l-0.018-0.137l-0.171-0.069l-0.188-0.034l-0.103-0.103l-0.086-0.137l-0.223,0.017h-0.257h-0.445l-0.223,0.051l-0.086-0.103l-0.514-0.068l-0.257-0.069l-0.223-0.12h-0.24l-0.086-0.052l-0.051-0.154l-0.12,0.034l-0.353,0.096l-0.043-0.077l0.128-0.012l0.034-0.183l-0.439-0.646l-0.008-0.14l-0.042-0.727l-0.112-0.102l0.526-0.026l0.052-0.188l0.257-0.137l0.429-0.103l0.599-0.154l0.754-0.171l0.445,0.085l0.754,0.017h0.188l0.257-0.068h0.154l0.12,0.137l0.103,0.052l0.274-0.069l0.154-0.034l0.291,0.051l0.359,0.069l0.291-0.069l0.6,0.017l0.309,0.103l0.24,0.085l0.273-0.085h0.24l0.394-0.017l0.36-0.171l0.171-0.068l0.188-0.017l0.086,0.257l0.291,0.188l0.325,0.12l0.583,0.035l0.377,0.034l0.342,0.24l0.497,0.223l0.325,0.137l0.138,0.154l0.154,0.171l0.273,0.068l0.377,0.035l-0.017,0.171l-0.086,0.154l-0.034,0.12l-0.12,0.137l-0.086,0.137l0.343,0.034l0.274,0.052l0.085,0.051l-0.119,0.051h-0.086l-0.103,0.154l-0.018,0.154l-0.171,0.017l-0.12-0.086l-0.12,0.051l-0.239-0.034l-0.154,0.034l-0.086,0.154l-0.103,0.154l-0.257,0.068h-0.429l-0.137,0.137l-0.12,0.12l-0.034,0.154l-0.086,0.171l0.103,0.171l-0.068,0.137l-0.239,0.154v0.137l-0.068,0.085l-0.069,0.137l0.172,0.034h0.205l0.138,0.206l-0.086,0.188l-0.274,0.017l-0.223-0.068v-0.154l-0.034-0.085l-0.086-0.069l-0.171,0.051l-0.12,0.086l-0.291-0.034l-0.068,0.137l-0.24,0.12h-0.154l-0.188-0.034l-0.273,0.103l0.086,0.171l-0.069,0.12l-0.171,0.034l-0.137-0.034l-0.206,0.051l-0.377,0.154h-0.291l-0.068-0.103l-0.12-0.051l-0.239,0.051l-0.377,0.017l-0.24,0.034l-0.291-0.034l-0.154,0.034l-0.093-0.035l-0.09-0.171l-0.016-0.029l-0.099-0.186l-0.284-0.487l-0.679-0.243l-0.04-0.014l-0.641,0.021z"/>
+ <path id="BY" country:name="Byelarus" country:shortname="Byelarus" d="M452.867,80.273l0.093,0.035l0.154-0.034l0.291,0.034l0.24-0.034l0.377-0.017l0.239-0.051l0.12,0.051l0.068,0.103h0.291l0.377-0.154l0.206-0.051l0.137,0.034l0.171-0.034l0.069-0.12l-0.086-0.171l0.273-0.103l0.188,0.034h0.154l0.24-0.12l0.068-0.137l0.291,0.034l0.12-0.086l0.171-0.051l0.086,0.069l0.034,0.085v0.154l0.223,0.068l0.274-0.017l0.086-0.188l-0.138-0.206h-0.205l-0.172-0.034l0.069-0.137l0.068-0.085v-0.137l0.239-0.154l0.068-0.137l-0.103-0.171l0.086-0.171l0.034-0.154l0.12-0.12l0.137-0.137h0.429l0.257-0.068l0.103-0.154l0.086-0.154l0.154-0.034l0.239,0.034l0.12-0.051l0.12,0.086l0.171-0.017l0.018-0.154l0.103-0.154h0.086l0.119-0.051l-0.085-0.051l-0.274-0.052l-0.343-0.034l0.086-0.137l0.12-0.137l0.034-0.12l0.086-0.154l0.017-0.171l0.086-0.052l0.103,0.017h0.154l0.223-0.085l0.103-0.137l0.172-0.068h0.359l0.325,0.034l0.24,0.034l0.239,0.035l0.188-0.035l0.068-0.206l0.069-0.103l0.137-0.085l0.137-0.154l0.223-0.034l0.12-0.12l0.24-0.051l0.241-0.044l0.165,0.147l0.229,0.066l0.197-0.131l0.181,0.016l0.312,0.033l0.132,0.148l0.082,0.148l0.197-0.033l0.214-0.065l0.361-0.049l0.312,0.049l0.296,0.065l0.147,0.017v0.115l-0.164,0.099l-0.017,0.099l0.065,0.148l0.164,0.148h0.197l0.214-0.197l0.279-0.016h0.165l0.147-0.099l0.23-0.083l0.131,0.049l0.099,0.049l0.247-0.049l0.542,0.115l0.132,0.131l0.279,0.099l0.099,0.099l0.147,0.099l0.165,0.033l0.147-0.033l0.049,0.115l-0.065,0.115v0.083l-0.033,0.164l-0.131,0.165l0.197,0.247l0.147,0.099l0.05,0.164l-0.066,0.131h-0.114v0.083l-0.115,0.082l-0.099,0.049l-0.033,0.165l-0.049,0.147l0.345,0.049l0.132,0.181l0.082,0.115l0.181-0.049l0.132,0.033l-0.099,0.115l-0.066,0.131l0.017,0.099l0.214,0.017l0.164,0.263l0.115,0.23l0.443,0.213l0.23,0.066l0.279,0.082l0.164,0.099l0.066,0.148l-0.099,0.197l-0.066,0.181l0.182,0.066l0.361-0.066l0.378,0.066l0.361,0.099l0.263,0.066l-0.032,0.065l-0.066,0.049l-0.082,0.017l0.099,0.181l0.296,0.148l0.279,0.066l0.033,0.131l-0.065,0.164h-0.296l-0.148,0.083l-0.049,0.065l-0.444,0.247l-0.525,0.099l-0.51-0.016l-0.197-0.132l-0.328-0.049l-0.362,0.017l-0.131,0.165l-0.099,0.131l0.017,0.164l0.279,0.263l0.296,0.164v0.165l-0.132,0.066l0.099,0.148l0.147,0.131l-0.082,0.099l0.033,0.164l0.033,0.23l-0.033,0.099l0.164,0.082l0.082,0.115l0.165,0.066l0.002,0.142l-0.519-0.005l-0.522,0.056l-0.112,0.131l-0.205-0.056l-0.187-0.037l-0.336,0.075l-0.057,0.13l-0.111,0.112l-0.317,0.187l-0.188,0.261l-0.261,0.224l-0.057,0.206l0.243,0.205l0.056,0.149l-0.131,0.206l-0.261-0.019l-0.149-0.056l-0.149-0.206l-0.112-0.056l-0.187-0.075l-0.224-0.037l-0.225,0.037l-0.242,0.075l-0.299,0.019l-0.149-0.131l-0.224,0.075l-0.188,0.093l-0.316,0.056l-0.188-0.056l-0.037-0.205l-0.112-0.131l-0.168-0.131l-0.13,0.038l-0.131,0.075h-0.168l-0.299,0.149l-0.131,0.149h-0.168l-0.094-0.187l-0.13-0.075h-0.206l-0.224,0.112l-0.131-0.187l-0.224-0.093l-0.131,0.112l-0.354,0.056l-0.262-0.112h-0.112l-0.019,0.205l-0.168,0.093l-0.093-0.056l0.056-0.224l-0.243-0.038l-0.187-0.056l-0.541,0.112v-0.149h-0.187l0.019-0.224l-0.28-0.037l-0.242,0.075l-0.523-0.112l-0.578-0.056l-0.075-0.056h-0.522l-0.205-0.168l-0.262,0.019l-0.522-0.093l-0.467,0.075h-0.485l-0.354-0.056l-0.355,0.056l-0.354,0.056l-0.485-0.038l-0.485,0.019l-0.205,0.187l-0.037,0.168l-0.374,0.168l-0.373,0.206l-0.112-0.112h-0.261l-0.374-0.019l-0.037,0.131v0.045l-0.126-0.137l0.315-0.752l-0.013-0.25l-0.218-0.146l-0.149-0.176l-0.421-0.146l-0.289-0.012l0.128-0.292l0.291-0.328l0.571-0.244l0.44-0.03l0.263-0.208l0.023-0.236l-0.172-0.502l-0.615-1.5l-0.16-0.302z"/>
+ <path id="UK" country:name="United Kingdom" country:shortname="UK" d="M400.125,81.146l0.633,0.305l0.208,0.207l0.208,0.37l-0.038,0.193l-0.545,0.563l0.714,0.176l0.396-0.311l0.527-0.119l0.602,0.028l0.807,0.176l0.467,0.354l0.235,0.752l-0.077,0.221l-0.322,0.414l-1.068,0.473l-0.767,0.561l-0.96,0.237l1.223,0.167l0.501,0.043l0.354-0.104l0.39,0.117l-0.066,0.516l-0.997,0.308l0.005,0.199l-0.479-0.084l-1.068,0.443l-0.879-0.142l-0.293-0.048l-1.119,0.211l-0.587-0.211l-0.598,0.112l-1.584,0.141l0.137,0.295l-0.907-0.168l-0.264,0.168l-0.911-0.337l-0.334,0.143l-0.913,0.089l-0.093,0.569l-0.337,0.316l-0.37,0.042l-0.272-0.252l-0.53-0.172l-0.135,0.151l-0.527-0.077l-0.948,0.324l-0.701,0.552l-0.326-0.231l-0.775-0.147l1.2-0.472l0.492-0.476l0.447-0.097l0.468-0.388l0.118-0.485l0.242,0.063l0.367-0.211l-0.008-0.274l1.013-0.105l0.76,0.119l0.927,0.007l0.073-0.338l0.308-0.142l0.321-0.556l-0.939,0.394l-0.725,0.016l-1.467-0.482l-1.866-0.055l-0.399-0.191l-0.156-0.162l0.417-0.325l0.983-0.194l0.721-0.237l0.38-0.384l0.066-0.827l-0.119-0.192l-0.713,0.046l-0.34-0.044l0.288-0.355l0.387-0.223l0.802-0.253l1.394-0.062l0.922-0.076l-0.316-0.548l0.172-0.683l0.253-0.461l-0.045-0.312l-0.834,0.061l-0.484-0.296l-0.2-0.312l0.309-0.507l0.617-0.433l-0.347-0.104l-0.596-0.088l-0.735,0.3l-0.476,0.061l-0.753-0.222l-0.088,0.194l-0.222,0.194l-0.672-0.103l-0.464-0.133l0.1-0.343l0.348-0.36l0.604-0.706l-0.293-0.134l-0.305-0.39l0.028-0.24l0.304-0.106l0.3-0.196l-0.194-0.496l-0.306,0.076l-0.636,0.453l-0.442,0.031l-0.526,0.287l-0.14-0.421l0.302-0.527l0.438-0.559l0.065-0.257l-0.417-0.195l-0.196-0.045l-0.218,0.302l-0.394,0.257l-0.493-0.165l0.299-0.575l0.54-0.455l0.09-0.136l-0.225-0.575l0.366-0.092l0.225-0.197l-0.672-0.515l0.432-0.351l0.752,0.151l0.387-0.092l-0.645-0.759l0.975-0.169l-0.457-0.502l0.416-0.382l0.924,0.365l0.824-0.093l0.686-0.139l0.867-0.047l0.612,0.014l0.303,0.259l-0.307,0.29l-1.726,0.704l-0.46,0.274l-0.218,0.441l0.222,0.182l0.784,0.029l0.877-0.078l0.685-0.001l0.53,0.075l1.563-0.064l0.458,0.378l-0.363,0.425l-0.212,0.323l0.098,0.112l-0.565,0.66l-0.226,0.111l-0.339,0.437l-0.696,0.261l-0.382,0.038l0.451,0.186l0.508,0.167l-0.116,0.015l-0.272,0.19l-0.61,0.052l-0.275,0.196l-1.337-0.025l0.404,0.223h0.302l0.492,0.093l0.432-0.006l0.519-0.223l0.413-0.025l0.449,0.161l0.656,0.164l0.673,0.566l0.496,0.228l0.118,0.165l-0.067,0.238l0.312,0.78l0.371,0.536l0.438,0.189l0.714,0.107l0.59,0.549l0.688,0.593l0.135,0.52l-0.188,0.49l0.257,0.124z M387.915,77.13l-0.128-0.325l0.149-0.335l0.38-0.089l0.079,0.501l-0.307,0.251l-0.173-0.003zM386.786,80.184l-0.178-0.272l-0.967,0.072l0.123-0.256l-0.364-0.15l-0.26-0.257l-0.335-0.107l-0.253,0.364l-0.751,0.257l-0.778-0.192l-0.401-0.278l-0.101-0.278l0.86-0.278l-0.483-0.257l0.817-0.107l0.385-0.484l-0.029-0.235l0.449-0.09l0.508-0.15l0.781-0.077l0.424,0.044l0.389,0.104l0.362-0.046l0.218,0.149l0.519,0.791l0.047,0.179l-0.081,0.298l0.308,0.446l-0.155,0.328l-0.402,0.328l-0.354,0.12l-0.299,0.038z"/> <!-- ISO code is GB but domain is UK -->
+ <path id="KZ" country:name="Kazakhstan" country:shortname="Kazakhstan" d="M578.943,106.217l-0.41-0.375l-0.466-0.098h-0.663l-0.196-0.27l-0.27-0.147l-0.147-0.344l-0.564,0.049l-0.981-0.246l-0.662,0.074l-1.35-0.024l-0.662-0.098l-0.712-0.221l-0.785,0.147h-0.761l-0.858,0.024l-0.441,0.27l-0.54-0.098l-0.908-0.196l-0.735-0.246l-0.761-0.27l-0.589-0.074l-0.688,0.123l-0.466,0.368l-0.245,0.736l0.024,0.442l-0.344-0.123l-0.81-0.123l-0.688-0.196l-0.883-0.245l-0.883-0.147l-0.663,0.098l-0.736,0.123l-0.318,0.368l-0.393,0.442l0.044,0.273l-0.322,0.031l-0.377,0.377l-0.283-0.126l-0.22,0.063l-0.346,0.283l-0.534,0.471l-0.755,0.189l-0.943,0.377l-0.282,0.188l-0.221,0.472l-0.439,0.188l-0.504,0.44l0.157,0.409l-0.125,0.188h-0.66l-0.44-0.346l0.062-0.283l-0.062-0.283l-0.44-0.314h-0.346l-1.006,0.094l-0.691,0.032l-0.503-0.063l-0.346-1.069l-0.221-0.817h-1.006l-0.031-0.754l0.188-0.409l0.031-1.038l-0.66,0.314l-0.66-1.006l-0.597-0.22l-0.724-0.723l-1.1,0.409l-2.767-0.188l-2.578,0.346l-2.012-1.666l-5.722-2.986l-5.658,1.289l-0.056,8.174l-0.158-0.014l-0.341,0.106l-0.489,0.043l-0.447-0.255l-0.638-0.703l-0.256-0.511l-0.617-0.383l-0.681-0.383l-0.512-0.234l-0.979,0.085l-1.277,0.298l-0.937,0.532l-0.529,0.453l0.092-0.399l-0.06-0.18l-0.12-0.12l0.14-0.26l0.2-0.2l0.14-0.32l0.04-0.3l0.18-0.2l-0.159-0.24l-0.4-0.16l-0.459,0.06l-0.18-0.16l-0.3,0.06l-0.2,0.04l-0.199-0.18l-0.221-0.32l-0.319-0.28h-0.34l-0.359,0.02v-0.2l0.08-0.28l-0.2-0.379l-0.239-0.12l-0.2-0.24l-0.399-0.799l-0.08-0.28l-0.56-0.12l-0.699-0.08l-0.14-0.16l0.02-0.439l0.16-0.12l0.3-0.06l0.399,0.02l0.34,0.02l0.479,0.14l0.539,0.18l0.18-0.08l0.36-0.08l-0.2-0.16l-0.26-0.12l-0.399-0.2l-0.2-0.24l0.26-0.36l0.28-0.04l0.08-0.26l0.18-0.299l0.12-0.14l0.26,0.04l0.319-0.08l0.16-0.1l0.339,0.12h0.24l1.119-0.04l0.999,0.14l0.499,0.02l-0.159-0.08l-0.34-0.2l-0.479-0.12l-0.021-0.3l0.2-0.2l0.279-0.22l0.221-0.28l0.119-0.52l0.12-0.28l-0.16-0.24l-0.14-0.16l0.1-0.2l0.26-0.2l-0.119-0.12l-0.101-0.3l-0.359-0.12l-0.359-0.04l-0.68-0.1l-0.2,0.16l-0.199,0.08l-0.52,0.08l-0.46-0.12l-0.319-0.26l-0.26-0.06l-0.68-0.12l-0.56,0.06l-0.659,0.319l-0.42,0.02l-0.799,0.5l-0.72,0.28l-0.499,0.06l-0.42-0.02l-0.279,0.24l-0.213,0.18l-0.616-0.19l-0.857-0.377l-0.068-0.308l0.343-0.103l0.309,0.103l0.445,0.103l0.138-0.103l-0.96-1.131l-0.343-0.514l-0.479-0.206l-0.515-0.445l-0.514-0.034l-0.343,0.034l-0.583-0.206l-0.103,0.343l-0.514-0.514l0.068-0.309l-0.138-0.377l-1.37-0.343l0.65-1.165l0.446-0.274l0.239-0.206l-0.239-0.274l-0.343-0.171l0.205-1.303l0.823-0.137l0.343-0.549l0.103-0.308l0.411-0.069l0.514,0.24l0.48,0.548l0.514,0.411h0.651l0.411-0.24l0.068-0.446l-0.171-0.411l-0.068-0.445l0.479-0.206l0.891-0.411l0.172-0.24l0.309-0.309l0.514-0.171l0.549-0.068l0.788-0.377l0.548-0.343l0.515-0.309l0.651,0.069h0.479l0.309,0.274l0.651-0.137l0.273-0.137l0.617-0.24l0.411,0.069l0.411,0.514l0.788,0.035l0.617-0.069l0.96,0.171v0.343l0.582,0.206l0.789,0.343l0.411,0.274l0.068,0.583l0.274,0.137l0.239-0.274l-0.205-0.48l-0.034-0.24l0.72,0.068l0.582,0.548l0.686,0.137l0.411,0.24l0.686-0.171l0.274-0.274l0.377-0.343l0.514-0.377l0.823,0.068l0.65,0.035l0.651,0.411l0.617-0.068l0.137-0.412l1.062-0.103l0.754,0.103l0.274,0.548l0.926,0.309l0.754,0.137l0.411,0.171l0.651-0.343l0.171-0.309h0.24l0.343,0.343l0.959,0.034l1.577-0.411l0.137-0.309l0.138-0.686l-0.24-0.24l-1.165-0.171l-0.274-0.308l-0.651-0.069l-0.377-0.137l0.068-0.171l-0.377-0.137h-0.239l-0.164-0.274l0.467-0.067l0.735-0.368l0.588-0.147l0.331-0.294l-0.441-0.478l-0.146-0.257l0.662-0.515l0.698-0.184l1.103,0.147l0.515-0.073l0.11-0.257l-0.956-0.294l-1.065-0.11v-0.331l0.294-0.074l-0.294-0.221l-0.074-0.441l0.185-0.515l0.33-0.074l1.066,0.147h0.515h0.772l0.368-0.184l1.396-0.405l1.029-0.037l0.735-0.11l1.545-0.11l0.588-0.073l0.331,0.073l0.221-0.331l0.625-0.331l1.177-0.037l2.021-0.405l1.876-0.073l0.625-0.074l0.367-0.368V77.39l0.515-0.037l0.589-0.184l0.11-0.221l0.735-0.037l0.919,0.147l0.515,0.11l0.772,0.257l0.625-0.11l0.882-0.037l0.368,0.404l-0.037,0.331l0.147,0.221l0.515,0.22l-0.11,0.331l-0.147,0.257l0.073,0.331l-0.33,0.037l0.184,0.257l0.478,0.074l0.295-0.147l0.44,0.11l0.368-0.147l0.367,0.074l0.331-0.221l0.294,0.11l0.295,0.368l0.367,0.221l0.147-0.147l0.184-0.147l0.478,0.037l0.405,0.294l0.478,0.11l0.441-0.221h0.367l-0.146,0.294l-0.441,0.184l-0.331,0.441l0.331,0.184l0.441-0.11l0.771-0.073l0.441,0.037l0.552,0.184l0.294-0.294l0.772-0.441l1.103-0.257l0.956-0.515l0.772-0.221l0.515-0.22l0.809-0.074v0.441l-0.515,0.11l-0.11,0.368l1.104,0.588l0.809,0.294l1.287,0.772l1.066,1.029l1.69,2.133l0.846,0.882l1.104,1.434l0.515-0.257l0.331-0.257l0.367-0.515h0.92l0.367,0.331v0.368h0.478l0.258,0.257l0.184,0.184h0.589h0.992l0.993-0.221l0.771-0.221l0.993-0.037l0.698,0.441l0.772,0.588l0.331,0.625l0.956,0.147l0.588,0.552l0.662,0.699l0.882,0.073l0.993,0.074l0.478-0.368l0.625-0.184l-0.073,0.331l0.441,0.331l0.294,0.478h0.589l0.064,0.145l-0.551,0.034l-0.542,0.148l-0.279,0.262l-0.011,0.275l-0.035,0.478l-0.306,0.219l-0.289,0.06l-1.199,0.093l-0.428,0.277l-0.34,0.581l0.097,0.75l0.213,0.707l-0.157,0.39l-0.444,0.392l-0.417,0.103l-0.718,0.062l-1.402-0.079l-0.594-0.141l-0.721-0.141l-1.096-0.254l-0.427,0.507l-0.516,1.141L584.2,97.43l-0.286,0.605l-0.137,0.418l0.622,0.514l0.126,0.286l-0.156,0.245l-0.231,0.145l-0.394,0.074l-1.133-0.238l-0.5-0.184l-0.35,0.06l-1.082,0.207l-1.799,0.254l-0.393,0.188l-0.215,0.302l-0.068,0.215l0.232,0.185l0.366-0.06l0.483,0.141l0.03,1.357l0.345,0.627l0.29,0.441l0.119,0.47l-0.222,0.33l-0.705,0.546l-0.32,0.401l-0.02,0.399l0.139,0.86z"/>
+ <path id="IE" country:name="Ireland" d="M386.786,80.184l-0.304,0.038l-0.223,0.09l0.241,0.252l0.361,0.771l0.287,1.213l-0.061,0.281l-0.359,0.341l-0.242,0.414l-0.145,0.473l-0.185,0.044l-0.284-0.058l-0.616,0.031l-0.15,0.212l-0.913,0.042l-0.84,0.132l-0.247,0.144l-0.661,0.286l-0.903,0.498l-0.628,0.035l-0.879,0.283l-1.28,0.084l0.053-0.378l-0.089-0.441l-0.848,0.1l-0.171-0.487l0.734-0.254l-1.186-0.021l0.062-0.233l1.286,0.027l0.198-0.104l0.039-0.222l0.107-0.31l0.515-0.134l0.692-0.031l0.13-0.281l-1.07,0.099l0.387-0.437l-0.187-0.159l0.481-0.468l0.694-0.011l0.163-0.089l-0.174-0.311l-0.348,0.177l-0.309-0.131l-0.319,0.03l-0.391-0.177l-0.414,0.001l-0.182,0.106L378,81.478l0.309-0.306l-0.29-0.142l0.759-0.126l-0.139-0.301l0.391-0.235l-0.481-0.214l-0.59,0.128L378,79.792l0.38-0.268l0.215-0.16l0.928,0.187l0.336-0.075l0.527,0.038l1.102,0.123l-0.214-0.358L382.132,79l0.198-0.321h-1.373l0.154-0.15l0.569-0.107l0.061-0.29l0.291-0.479l0.505-0.181l0.804-0.169l0.22,0.302l0.354,0.149l0.156-0.031l0.029,0.235l-0.385,0.484l-0.817,0.107l0.483,0.257l-0.86,0.278l0.101,0.278l0.401,0.278l0.778,0.192l0.751-0.257l0.253-0.364l0.335,0.107l0.26,0.257l0.364,0.15l-0.123,0.256l0.967-0.072l0.178,0.272z"/>
+ <path id="UI" country:name="Ukraine" country:shortname="Ukraine" d="M452.998,85.535V85.49l0.037-0.131l0.374,0.019h0.261l0.112,0.112l0.373-0.206l0.374-0.168l0.037-0.168l0.205-0.187l0.485-0.019l0.485,0.038l0.354-0.056l0.355-0.056l0.354,0.056h0.485l0.467-0.075l0.522,0.093l0.262-0.019l0.205,0.168h0.522l0.075,0.056l0.578,0.056l0.523,0.112l0.242-0.075l0.28,0.037l-0.019,0.224h0.187v0.149l0.541-0.112l0.187,0.056l0.243,0.038l-0.056,0.224l0.093,0.056l0.168-0.093l0.019-0.205h0.112l0.262,0.112l0.354-0.056l0.131-0.112l0.224,0.093l0.131,0.187l0.224-0.112h0.206l0.13,0.075l0.094,0.187h0.168l0.131-0.149l0.299-0.149h0.168l0.131-0.075l0.13-0.038l0.168,0.131l0.112,0.131l0.037,0.205l0.188,0.056l0.316-0.056l0.188-0.093l0.224-0.075l0.149,0.131l0.299-0.019l0.242-0.075l0.225-0.037l0.224,0.037l0.187,0.075l0.112,0.056l0.149,0.206l0.149,0.056l0.261,0.019l0.131-0.206l-0.056-0.149l-0.243-0.205l0.057-0.206l0.261-0.224l0.188-0.261l0.317-0.187l0.111-0.112l0.057-0.13l0.336-0.075l0.187,0.037l0.205,0.056l0.112-0.131l0.522-0.056l0.519,0.005l0.357,0.089l0.469,0.022l0.313-0.156l0.179-0.291l0.134-0.268l0.536,0.246l0.536-0.022l0.67-0.223l0.692,0.112l0.514-0.134l0.201,0.268l0.312,0.134l0.246,0.335l0.134,0.201l0.246,0.156l0.312,0.156v0.268l-0.312-0.022l-0.312,0.134l0.134,0.291l0.111,0.357l0.269,0.29h0.647l0.156,0.112l0.514-0.067l0.38,0.022v0.312h0.402v0.357l0.224,0.268l0.089,0.246l-0.089,0.179l0.089,0.224l0.179,0.089l0.291,0.29l0.268-0.179l0.47-0.067l0.268,0.067l0.469,0.291l0.201-0.067l0.179,0.022l0.179,0.156l0.425-0.112l0.312-0.112h0.269l0.536-0.134l0.357-0.067l0.111,0.156l0.268,0.179v0.134l0.201,0.179l0.022,0.134l0.402,0.044l0.179,0.179l0.224,0.112l0.29-0.134l0.045-0.157l0.224-0.067l0.29,0.268l0.425,0.067l0.469,0.112l0.268,0.112l0.357-0.067l0.201,0.179l0.291,0.089l0.469,0.022l0.111,0.224l0.357,0.156h0.269l0.134-0.044l0.201-0.089l0.156,0.089l-0.089,0.111l-0.022,0.179l0.111,0.089l0.09,0.179l-0.045,0.224l-0.201,0.089l-0.156,0.067l-0.357,0.201l-0.312,0.044l0.223,0.246l0.269,0.089l0.29,0.044l-0.134,0.156h-0.312h-0.246l-0.045,0.179l-0.044,0.224l0.156,0.067l0.179,0.067l0.044,0.134l0.045,0.179l0.09,0.201l0.066,0.067l-0.156,0.491l-0.156,0.291v0.156l-0.335,0.134l-0.805-0.157l-0.736,0.045h-0.269l-0.022,0.179l-0.223,0.179l-0.38,0.134l-0.357,0.022l-0.224,0.089l-0.09,0.514v0.224l-0.021,0.112l-0.012,0.126l-0.779,0.104l-0.971,0.06l-0.511,0.405l-0.729,0.189l-1.135,0.075l-1.119,0.248l-0.502,0.318l-0.463,0.059l-0.453-0.316l-0.369,0.621l-0.31,0.188l-0.477,0.044l-0.438-0.057l-0.959,0.031l-0.5,0.16l0.641,0.287l1.957,1.004l0.053,0.172l-0.093,0.188l0.163,0.244l0.562,0.042l0.511-0.13l0.675-0.146l1.052,0.013l0.439,0.114l-0.235,0.259l-0.106,0.245l-0.228,0.144l-0.578,0.116l-0.31,0.029l-0.591-0.157l-0.473,0.044l-0.71,0.489l-1.007,0.045l-0.538,0.188l-0.527,0.488l-0.269,0.101l-0.786-0.07l-0.588-0.171l0.364-0.746l-0.096-0.416l-0.264-0.287l-0.854-0.286l-0.193-0.014l-0.629,0.016l-0.151,0.043l-0.16-0.187l0.887-0.505l0.644-0.261l0.772-0.188l0.221-0.116l-0.246-0.46l-0.435-0.071l-0.799,0.044l-1.015,0.045l-0.698-0.1l-0.195-0.101l-0.418-0.432l0.584-0.405l-0.528-0.605l-0.378,0.361l-0.541,0.001l-1.001,0.146l-0.565,0.131l-0.694,0.722l-1.003,0.867l-0.754,0.203l-0.223,0.044l-0.287,0.504l0.079,0.158l0.178,0.093l-0.706-0.131l-0.665,0.261h-0.457l-0.033,0.189l-0.609-0.047l-0.398-0.166l-0.119-0.249l-0.15,0.02l0.055-0.077l0.102-0.025l0.126,0.013l0.113,0.013h0.189l0.088-0.114v-0.088l-0.063-0.113l0.025-0.113l0.126-0.063l0.051-0.063l0.075-0.013l0.089-0.025l0.088-0.063l0.089-0.088l0.024-0.126l-0.013-0.114l0.14-0.013l0.29-0.063l0.075-0.076l-0.025-0.088l-0.062-0.088l0.126-0.114l0.037-0.063l-0.012-0.088l-0.114-0.113l0.051-0.101l-0.088-0.151l-0.063-0.101l0.202-0.151l0.239-0.025l0.126-0.088l0.113,0.025l0.013,0.088l-0.013,0.214l0.063,0.013h0.113V96.92l-0.013-0.063l0.101,0.038l0.063,0.051l0.025-0.076l0.075-0.038l0.139-0.012v0.075l0.089,0.063h0.075l0.126,0.164l0.076-0.076l0.075-0.076l0.013-0.05l0.101-0.025h0.177l-0.037,0.189l0.176,0.025l0.038-0.038l0.038-0.038l0.139,0.013h0.227l0.038-0.025l0.075-0.076l-0.126-0.013l-0.164-0.126l-0.101-0.051l-0.075-0.05l0.013-0.038l0.101-0.063l-0.025-0.113l0.038-0.101l-0.013-0.126l-0.051-0.139l-0.101-0.063l-0.177-0.076h-0.075l-0.151-0.126l-0.151-0.063l-0.151-0.038l0.051-0.151l0.037-0.088l-0.037-0.051l-0.127,0.038l-0.062-0.114l0.113-0.038l-0.013-0.189l0.089-0.075l-0.025-0.101l-0.038-0.088h-0.113l-0.102,0.05l-0.088,0.051l-0.113-0.088l-0.089-0.101l-0.188-0.101l-0.139-0.025l-0.102-0.139l-0.05-0.139l0.177-0.139v-0.189l0.024-0.114l0.051-0.05l-0.126-0.063l0.164-0.151l-0.113-0.025l-0.076-0.063l-0.062-0.126l-0.14-0.013l-0.062,0.101l-0.126-0.025l-0.215-0.025l-0.126-0.189l-0.05-0.189l-0.417-0.075l-0.277,0.012l-0.062,0.051l-0.076,0.101l-0.062-0.05v-0.076l-0.089-0.025l-0.101,0.038l0.038-0.05l0.088-0.101l-0.025-0.063h-0.113l-0.177,0.038l-0.126-0.025l-0.101,0.013l-0.076-0.076l-0.05-0.063l-0.101-0.063l-0.151-0.013l-0.139-0.05l-0.14-0.126l-0.214-0.088l-0.038-0.013l-0.126,0.025l-0.05,0.025l-0.114-0.051l-0.088-0.025l-0.139,0.025l-0.177,0.051l-0.177-0.025l-0.062,0.038l-0.126,0.114h-0.202l-0.265-0.038l-0.126,0.051l-0.315-0.114l-0.088,0.101l0.012,0.113h-0.126l-0.075-0.063l-0.126,0.114l-0.06,0.052l-0.634,0.08l-0.151,0.311l-0.278,0.178l-1.992,0.191l-0.186,0.215l-0.243,0.119l-0.339,0.06l-0.188-0.227l-0.327,0.004l-0.025-0.231l-0.363,0.045l-1.115-0.066l-0.958-0.193l-0.241,0.107l-0.787-0.121l-0.136,0.085l-0.678-0.387l-0.554-0.2l-0.668-0.301l-0.166,0.015l1.047-1.471l0.653,0.018l-0.349-0.383l-0.044-0.552l0.082-0.306l1.509-1.218l0.599-0.398l0.286-0.181l0.429-0.013l0.255-0.24l0.009-0.314l-0.328-0.302l0.085-0.133l0.298-0.048l-0.316-0.193l-0.816-0.835l0.074-0.242l-0.161-0.175z"/>
+ <path id="MN" country:name="Mongolia" d="M660.044,89.132l-0.295,0.31l-0.687,1.207l-1.224,1.959l-0.381,0.58l0.269,0.836l0.051,0.029l0.342-0.045l0.929-0.395l0.754-0.062l0.576-0.018l0.317,0.085l0.431,0.416l0.292,0.07l1.191-0.786l0.438-0.002l0.928,0.212l0.538,0.199l0.797,0.5l0.879,0.99l0.599,0.501l0.048,0.273l-0.107,0.217l-0.414,0.218l-0.464-0.127l-1.074-0.008l-0.432-0.099l-0.854,0.033l-0.937,0.221l-0.539,0.146l-0.831,0.278l-0.353,0.189l-0.483-0.127l-0.464,0.045l-0.47,0.204l-0.363,0.333l-0.312,0.82l-0.241,0.216l-0.347,0.188l-0.638,0.248l-0.896,0.134l-0.624-0.054l-0.438-0.012l-0.224-0.013l-1.192,0.91l-0.742,0.433l-0.744,0.047l-0.982,0.005l-0.592-0.125l-0.668-0.382l-0.718-0.154l-0.316,0.073l-0.457,0.231l-0.539,0.589l-0.214,0.401l0.003,0.343l0.389,0.569l0.599,0.411l0.188,0.228l-0.123,0.271l-0.326,0.259l-1.265,0.292l-0.67,0.389l-1.111,1.046l-0.265,0.172l-1.941,0.737l-0.651,0.061l-0.987-0.08l-1.514,0.065l-1.339,0.007l-1.204,0.349l-0.816,0.289l-0.736,0.274l-0.303,0.101l-1.44,0.534l-0.686,0.289l-0.481,0.017l-0.433-0.197l-0.253-0.297l-0.61-0.067l-0.663,0.061l-0.929-0.123l-1.599-0.433l-1.006-0.365l-0.815-0.551l-0.521-0.168l-1.69-0.119l-1.164-0.022l-0.937-0.023l-2.861,0.059l-1.165-0.022l-0.802-0.109l-1.241-0.207l-1.979-0.018l-0.444-0.254l-0.467-0.439l-1.571-2.161l-0.105-0.542l-0.744-0.096l-0.839-0.31l-1.645-0.806l-0.632-0.268l-0.998-0.224l-0.668-0.083l-0.995-0.038l-1.505-0.021l-1.062-0.181l-0.724-0.312l-0.233-0.229l-0.105-0.43l0.035-0.129l0.369-0.347l0.214-0.389l0.237-0.75l0.215-0.447l-0.401-0.66l-1.07-1.451l-0.568-0.618l-0.354-0.143l-0.633-0.144l-0.731-0.167l-0.614-0.069l-0.834-0.415l-1.301-0.745l-0.371-0.433l-0.24-0.563l-0.131-0.405l-0.062-0.145l0.154-0.044l0.799-0.425l0.599-0.207l1.387-0.08l0.603-0.148l0.727-0.381l0.017-0.012l0.971-0.692l0.787-0.398l1.143-0.341l1.512-0.476l0.84-0.18l0.953,0.097l0.932,0.156l1.842,0.122l0.831,0.083l0.694,0.755l0.393,0.406l0.699,0.113l1.458-0.008l0.719,0.083l0.85-0.004l0.875,0.068l0.312,0.114l0.576,0.186l0.562-0.018l0.755-0.28l0.31-0.162l0.744-0.572l0.163-0.526l-0.116-0.204l-0.396-0.304l-0.409-0.86l0.098-0.293l0.905-0.839l1.269-0.96l0.84,0.201l1.028,0.098l1.036,0.185l1.748,0.328l0.702,0.231l0.989,0.317l0.767,0.143l0.145,0.204l0.004,0.541l0.182,0.481l0.408,0.451l0.421,0.333l1.643,0.531l0.673,0.113l2.48-0.538l0.796-0.077l1.172,0.037l1.423,0.022l0.769,0.229l1.333,0.75l0.623,0.331l1.132,0.313l0.812,0.373l1.318,0.254l0.905,0.241l0.984,0.082l0.739,0.039l1.602-0.11l1.018-0.063l0.532-0.075l0.867-0.106l1.147-0.136l0.526-0.163l0.604-0.264l0.447-0.394l0.755-0.498l1.165-0.487l0.333-0.002l0.609-0.047l0.74,0.156l0.751,0.506l0.34,0.129l0.86,0.169l1.228-0.297l0.622-0.018l0.431,0.168z"/>
+ <path id="BE" country:name="Belgium" d="M406.183,86.551l1.051-0.494l0.485-0.089l0.574,0.087l0.465-0.016l0.209-0.147l0.477,0.098l0.407,0.042l0.52-0.034l-0.025-0.157l0.307,0.012h0.307l0.267-0.182l0.313,0.242l0.173-0.121l0.228,0.061l0.292,0.375l0.535-0.109l0.754,0.375l-0.11,0.423l-0.172,0.097l0.001,0.338l0.672-0.024l0.344,0.177l0.282,0.365l0.038,0.468l-0.422,0.376l-0.225-0.072l-0.142,0.08l-0.245,0.147l-0.213,0.322l0.017,0.327l0.31,0.204l-0.136,0.348l-0.079-0.114l-0.694,0.174l-0.127-0.228l-0.371-0.204l-0.341-0.192l-0.529-0.048l0.039-0.228l-0.146-0.18l0.119-0.373l-0.245,0.072l-0.193,0.313l-0.446,0.035l-0.406,0.075l-0.285-0.122l0.072-0.198l-0.091-0.175l0.159-0.241l-0.375-0.168l-0.576-0.048l-0.259,0.012l-0.159-0.301l-0.518,0.012l-0.194-0.133l-0.202-0.458l-0.153-0.17l-0.41,0.208l-0.141,0.071l-0.266-0.127l-0.311-0.335l-0.208-0.447z"/>
+ <path id="SK" country:name="Slovakia" country:shortname="Slovakia" d="M438.22,91.952l0.039-0.044l0.065-0.105l0.014-0.131l0.092-0.066l0.146-0.119l0.026-0.04l0.171-0.053l0.093-0.026l0.092,0.053l0.132,0.053h0.158l0.065-0.026h0.093l0.065,0.026l0.065,0.026l0.093-0.026l0.145-0.04h0.132l0.118-0.053l0.079-0.053l0.066-0.026l0.105-0.026h0.039l0.053-0.079l0.04-0.092l0.079-0.079l0.092,0.026l0.105-0.04l0.145-0.066l0.053-0.105l0.053-0.079l0.026-0.132l0.026-0.092l0.053-0.092l0.118-0.013l0.105-0.013l0.132-0.079l0.119-0.053l0.118-0.092l0.053-0.079l0.132-0.066l0.065-0.04L442,89.998l0.145,0.013l0.105,0.026l0.066-0.04l0.065-0.066l0.071,0.012l0.285,0.041l0.03,0.228l0.43-0.048l0.183-0.24l0.193,0.016l0.062-0.112l0.261-0.024l0.194,0.24l0.073,0.169l0.331-0.025l0.066,0.18l-0.026,0.083l0.003,0.204l0.389-0.083l0.18,0.12l0.149-0.135l0.104-0.177l0.558-0.204l0.168,0.056l0.483-0.046l0.46,0.254l0.373-0.18l0.073-0.137l0.508,0.041l0.561-0.076l0.129,0.13l0.703,0.186l0.104,0.216l0.424,0.101l0.831,0.33l-1.047,1.471l-0.629,0.076l-0.437-0.143l-0.534-0.359l-1.062,0.035l-0.717,0.047l-1.024,0.759L444.857,93l-0.59-0.072l-0.499,0.061l-0.761,0.134l-0.255,0.001l-0.334,0.568l-1.651-0.036l-0.414-0.027l-0.617-0.17l-0.399-0.172l-0.245,0.146l-0.761-0.547l-0.155-0.26l0.097-0.581l-0.053-0.093z"/>
+ <path id="HU" country:name="Hungary" d="M442.391,98.111l-0.589,0.203l-0.433,0.031l-0.668,0.047l-0.58-0.098l-1.116-0.671l-1.412-0.612l-0.215-0.197l-0.364-0.333l-0.304-0.59l0.346-0.299l0.154-0.294l-0.204-0.188l0.04-0.375l0.409-0.062l0.157-0.206l-0.136-0.196l-0.452-0.063l0.223-0.197h0.325l0.164,0.134l0.701-0.054l0.019-0.367l0.636-0.291l0.245-0.146l0.399,0.172l0.617,0.17l0.414,0.027l1.651,0.036l0.334-0.568l0.255-0.001l0.761-0.134l0.499-0.061l0.59,0.072l0.427-0.063l1.024-0.759l0.717-0.047l1.062-0.035l0.534,0.359l0.437,0.143l0.629-0.076l0.166-0.015l0.668,0.301l0.554,0.2l0.678,0.387l-0.45,0.338l-1.125,0.267l-0.581,0.408l-0.968,1.451l-0.63,0.84l-0.753,0.567l-0.361,0.16l-0.724,0.047l-0.264,0.103l-0.176-0.002l-0.907-0.067l-0.889,0.077l-1.535,0.529z"/>
+ <path id="MD" country:name="Moldova" country:shortname="Moldova" d="M459.717,92.836l0.06-0.052l0.126-0.114l0.075,0.063h0.126l-0.012-0.113l0.088-0.101l0.315,0.114l0.126-0.051l0.265,0.038h0.202l0.126-0.114l0.062-0.038l0.177,0.025l0.177-0.051l0.139-0.025l0.088,0.025l0.114,0.051l0.05-0.025l0.126-0.025l0.038,0.013l0.214,0.088l0.14,0.126l0.139,0.05l0.151,0.013l0.101,0.063l0.05,0.063l0.076,0.076l0.101-0.013l0.126,0.025l0.177-0.038h0.113l0.025,0.063l-0.088,0.101l-0.038,0.05l0.101-0.038l0.089,0.025v0.076l0.062,0.05l0.076-0.101l0.062-0.051l0.277-0.012l0.417,0.075l0.05,0.189l0.126,0.189l0.215,0.025l0.126,0.025l0.062-0.101l0.14,0.013l0.062,0.126l0.076,0.063l0.113,0.025l-0.164,0.151l0.126,0.063l-0.051,0.05l-0.024,0.114v0.189l-0.177,0.139l0.05,0.139l0.102,0.139l0.139,0.025l0.188,0.101l0.089,0.101l0.113,0.088l0.088-0.051l0.102-0.05h0.113l0.038,0.088l0.025,0.101l-0.089,0.075l0.013,0.189l-0.113,0.038l0.062,0.114l0.127-0.038l0.037,0.051l-0.037,0.088l-0.051,0.151l0.151,0.038l0.151,0.063l0.151,0.126h0.075l0.177,0.076l0.101,0.063l0.051,0.139l0.013,0.126l-0.038,0.101l0.025,0.113l-0.101,0.063l-0.013,0.038l0.075,0.05l0.101,0.051l0.164,0.126l0.126,0.013l-0.075,0.076l-0.038,0.025h-0.227l-0.139-0.013l-0.038,0.038l-0.038,0.038l-0.176-0.025l0.037-0.189h-0.177l-0.101,0.025l-0.013,0.05l-0.075,0.076l-0.076,0.076l-0.126-0.164h-0.075l-0.089-0.063v-0.075l-0.139,0.012l-0.075,0.038l-0.025,0.076l-0.063-0.051l-0.101-0.038l0.013,0.063v0.088h-0.113l-0.063-0.013l0.013-0.214l-0.013-0.088l-0.113-0.025l-0.126,0.088l-0.239,0.025l-0.202,0.151l0.063,0.101l0.088,0.151l-0.051,0.101l0.114,0.113l0.012,0.088l-0.037,0.063l-0.126,0.114l0.062,0.088l0.025,0.088l-0.075,0.076l-0.29,0.063l-0.14,0.013l0.013,0.114l-0.024,0.126l-0.089,0.088l-0.088,0.063l-0.089,0.025l-0.075,0.013l-0.051,0.063l-0.126,0.063l-0.025,0.113l0.063,0.113v0.088l-0.088,0.114h-0.189l-0.113-0.013l-0.126-0.013l-0.102,0.025l-0.055,0.077l-0.03,0.004l-0.062-0.237l-0.218-0.106l0.16-0.071l-0.021-0.267l-0.104-0.561l0.323-0.978l0.027-0.404l-0.353-0.856l-0.604-0.286l-1.037-1.119L460.567,93l-0.626-0.191l-0.225,0.028z"/>
+ <path id="RO" country:name="Romania" d="M445.722,97.573l0.176,0.002l0.264-0.103l0.724-0.047l0.361-0.16l0.753-0.567l0.63-0.84l0.968-1.451l0.581-0.408l1.125-0.267l0.45-0.338l0.136-0.085l0.787,0.121l0.241-0.107l0.958,0.193l1.115,0.066l0.363-0.045l0.025,0.231l0.327-0.004l0.188,0.227l0.339-0.06l0.243-0.119l0.186-0.215l1.992-0.191l0.278-0.178l0.151-0.311l0.634-0.08l0.225-0.028L460.567,93l0.767,1.17l1.037,1.119l0.604,0.286l0.353,0.856l-0.027,0.404l-0.323,0.978l0.104,0.561l0.021,0.267l-0.16,0.071l0.218,0.106l0.062,0.237l0.03-0.004l0.15-0.02l0.119,0.249l0.398,0.166l0.609,0.047l0.033-0.189h0.457l0.665-0.261l0.706,0.131l0.149,0.079l0.062,0.259l-0.293,0.446l-0.27,0.316l-0.436,0.044l-0.382,0.043l-0.382,0.245l-0.515,0.617l-0.252,0.645l-0.096,0.787l-0.044,0.223l-0.671-0.12l-1.346-0.336l-0.514-0.226l-0.295-0.042l-0.671-0.369l-0.562-0.04l-0.618,0.218l-1.904,0.771l-0.38,0.059l-1.385-0.35l-0.3-0.013l-0.69,0.261l-0.34,0.031l-1.151-0.395l-0.506-0.002l-0.771,0.189l-0.266,0.023l-0.048-0.189l0.234-0.318l-0.352-0.106l-0.392-0.204l-0.418-0.186l-0.146-0.33l0.32-0.201l0.351,0.012l-0.114-0.13l-0.625-0.248l-0.253,0.13l-0.215,0.283l-0.147,0.118l-0.414-0.239l-0.194-0.139l-0.594-0.059l-0.02-0.189h-0.234l-0.245-0.036l-0.052-0.165l0.178-0.094l0.271-0.071l-0.239-0.083l-0.183-0.059l0.124-0.146l0.19-0.127l-0.069-0.142l-0.306-0.118l-0.555-0.141l-0.712-0.471l0.058-0.088l-0.104-0.119l0.075-0.356l-0.202-0.036l-0.19-0.237l-0.569-0.178l-0.054-0.309z"/>
+ <path id="IT" country:name="Italy" d="M420.177,113.472l-0.274-0.042l-0.253-0.155l-0.367-0.325l-0.096-0.213l0.202-0.738l0.097-0.681l-0.046-0.583l-0.133-0.569l-0.503-0.44l-0.094-0.271l0.181-0.157l0.366-0.015l0.801-0.001l0.339-0.172l0.861-0.543l0.633,0.625l0.451,0.754l-0.014,0.271l-0.204,0.285l-0.145,0.484l0.149,0.894l-0.11,0.525l-0.377,0.695l-0.405-0.198l-0.52,0.03l-0.143,0.1l-0.149,0.27l-0.248,0.17z M433.783,118.446l-0.712-0.084l-0.902-0.607l-0.772-0.239l-1.904-0.817l-0.833-0.126l-0.232-0.127l-0.173-0.283l0.139-0.34l0.328-0.34l0.264-0.1l0.629,0.112l0.569-0.341l0.68,0.424l0.403,0.141l0.722-0.016l1.403-0.187l1.38-0.329l0.148,0.085l0.043,0.127l-0.112,0.127l-0.536,0.823l-0.153,0.497l0.009,0.382l0.411,0.509l-0.179,0.128l-0.43,0.567l-0.188,0.015zM431.244,98.829l-0.281-0.329l-0.242-0.027l-0.281,0.196l-0.156-0.125l-0.47-0.071l-0.114,0.32l-0.458,0.054l-1.001,0.364l0.078-0.151l-0.452,0.133l-0.063,0.249l-0.157,0.044l-0.01,0.125l0.303,0.08l0.021,0.302l0.193,0.119l0.253,0.236l-0.104,0.213l-0.449,0.254l0.016,0.272l0.143,0.554l0.783,0.814l2.008,0.889l0.29,0.357l0.134,0.558l0.274,0.557l0.395,0.585l0.694,0.57l0.254,0.274l0.446,0.195l0.041,0.21l0.408,0.167l1.17,0.255l1.254-0.105l0.388,0.141l0.024,0.212l-0.465,0.247l-0.258,0.294l0.262,0.213l0.954,0.283l1.168,0.411l0.829,0.366l1.589,0.739l0.058,0.185l0.719,0.458l0.31,0.475l-0.198,0.435l-0.152,0.337l-0.455-0.281l-0.318-0.167l-0.109-0.486l-0.263-0.17l-0.512-0.099l-0.483-0.009l-0.439-0.236l0.086-0.217l-0.353-0.065l-0.301,0.098l-0.232,0.262l-0.259,0.399l-0.273,0.208l0.043,0.271l-0.197,0.303l-0.007,0.298l0.76,0.342l0.611,0.271l-0.093,0.314l0.03,0.432l0.133,0.142l-0.191,0.238l-0.659-0.024l-0.41,0.219l-0.202,0.228l0.11,0.595l-0.536,0.303l-0.617,0.866l-0.595,0.048l-0.167-0.071l-0.184-0.14l-0.002-0.508l0.364-0.141l0.317-0.542l-0.236-0.184l0.361-0.249l0.361,0.074l0.133-0.17l-0.077-0.34l-0.211-0.181l-0.206-0.924l-0.367-0.516l-0.15-0.607l-0.201-0.352l-0.334,0.058l-0.187,0.171l-0.899-0.496l-0.286-0.065l0.208-0.291l-0.092-0.398l-0.461-0.34l-0.909,0.247l0.034-0.109l0.322-0.194l-0.276-0.27l-0.29-0.003l-0.42,0.19l-0.242-0.512l-0.198-0.207l-0.124-0.228l-0.663-0.241l-0.505-0.027l-0.654-0.127l-0.745-0.355l-0.548-0.441l-0.959-0.612l-1.036-0.826l-0.872-0.384l-0.805-0.67l-0.566-0.856l-0.434-1.043l-0.347-0.443l-0.505-0.457l-0.483-0.243l-1.188-0.341l-0.579-0.142l-0.5,0.044l-1.078,0.647l-0.46,0.359l-0.646,0.173l-0.303,0.043l0.146-0.469l-0.062-0.281l-0.849,0.07l-0.754-0.391l-0.193-0.442l0.315-0.371l0.175-0.01l-0.135-0.331l-0.616-0.191l-0.352-0.358l0.437-0.186l0.183,0.111l0.541-0.353l0.199-0.272l-0.43-0.192l-0.025-0.292l-0.532-0.344l0.624-0.301l0.599,0.062l0.627-0.204l0.629,0.168l0.275-0.16l0.349-0.432l-0.103-0.212l0.777-0.404l0.016,0.415l0.534,0.363l0.311,0.071l-0.098,0.182l0.385,0.312l0.285-0.151l0.018-0.535l0.425-0.384l-0.019-0.333l0.371-0.081l0.143,0.354l0.23,0.142l0.216-0.03l0.071-0.122l0.469-0.05l0.244,0.333l0.228-0.415l-0.244-0.131l0.081-0.273l0.283-0.091l0.176,0.162l0.315,0.051l0.038-0.192l-0.112-0.212l0.126-0.309l0.631,0.171l0.597,0.034l0.329-0.411l0.366-0.096l0.183,0.083l0.445-0.11l0.301,0.103l0.856-0.227l0.023,0.363l0.318,0.096l0.32,0.391l1.311,0.247l0.894,0.082l0.478,0.112l0.116,0.199l-0.614,0.303l0.098,0.151l0.297,0.002l0.187,0.185l-0.367,0.285l0.336,0.089l-0.127,0.361l0.36,0.11l0.284,0.198l-0.056,0.214z"/>
+ <path id="SI" country:name="Slovenia" country:shortname="Slovenia" d="M430.73,96.731l1.04,0.065l0.179,0.107l0.612-0.009l0.287,0.152l0.646-0.5l0.566-0.107l0.85,0.08l0.298-0.196l0.89,0.116l-0.082-0.393l0.693-0.157l0.304,0.59l0.364,0.333l-0.035-0.009l-0.1-0.073l-0.145-0.036h-0.172l-0.145,0.009l-0.055,0.063v0.072l0.019,0.09l0.009,0.082l-0.063,0.009l-0.136-0.009l-0.108-0.036l-0.091,0.063l-0.045,0.082l-0.081,0.063l-0.082,0.045l-0.081,0.009l-0.163,0.036l-0.117,0.036l-0.108,0.036l-0.055,0.045l-0.153-0.009l-0.127,0.072l-0.063,0.054l-0.018,0.082l0.036,0.072l0.081,0.054l0.063,0.055l0.045,0.045l0.019,0.063l0.018,0.09l-0.036,0.108l-0.018,0.063l-0.046,0.1h-0.108l-0.081-0.009l-0.091,0.027l-0.108,0.009l-0.117,0.054l-0.091,0.018l-0.081,0.027l-0.1,0.045l-0.055,0.063l-0.036,0.027l0.055,0.018l0.063,0.009l0.026,0.027l0.037,0.072l-0.046,0.063l-0.027,0.009l-0.081,0.027l-0.009,0.045l0.045,0.081v0.072l0.045,0.1l-0.054,0.072l-0.063-0.018l-0.1,0.045l-0.117,0.018l-0.127-0.036l-0.063-0.027l-0.1-0.063h-0.099l-0.063-0.027l-0.118-0.045l-0.018,0.045l-0.027,0.045l-0.1,0.027h-0.136l-0.054-0.045l-0.072-0.063l-0.127-0.018l-0.019-0.09l-0.026-0.018l-0.063-0.054l-0.055-0.027l-0.018-0.054l-0.01-0.054l-0.036-0.009l-0.063,0.018l-0.036,0.054l-0.009,0.027l-0.054,0.063l-0.019,0.018l-0.018,0.081l-0.063,0.045l-0.046,0.018l-0.062,0.054l-0.036,0.009h-0.254l-0.108-0.027l-0.108,0.027l-0.145,0.009l-0.1-0.009l-0.1-0.036l-0.045-0.019h-0.055v0.037v0.036l-0.045,0.027l-0.045,0.018l-0.136-0.009l-0.027-0.036l-0.108,0.018l-0.019,0.018l-0.136,0.018l-0.063,0.018l-0.126,0.018l-0.272-0.063l0.428-0.077l0.113-0.16l0.056-0.214l-0.284-0.198l-0.36-0.11l0.127-0.361l-0.336-0.089l0.367-0.285l-0.187-0.185l-0.297-0.002l-0.098-0.151l0.614-0.303l-0.116-0.199z"/>
+ <path id="HR" country:name="Croatia" country:shortname="Croatia" d="M439.573,104.709l-1.051-0.672l-0.185-0.222l-0.783-0.149l-0.203-0.159l-0.403-0.115l-0.683,0.177l-0.326-0.486l-1.112-0.627l-0.584-0.678l0.277,0.007l0.608,0.016l-0.583-0.221l-0.659-0.469l-0.183-0.407l0.086-0.452l-0.289-0.336l-0.646-0.418l-0.378-0.126l-0.258,0.579l-0.142,0.116l0.03,0.15l-0.284,0.106l-0.154,0.248l-0.213,0.053l-0.496-0.647l-0.063-0.286l-0.259-0.612l0.065-0.012l0.272,0.063l0.126-0.018l0.063-0.018l0.136-0.018l0.019-0.018l0.108-0.018l0.027,0.036l0.136,0.009l0.045-0.018l0.045-0.027v-0.036v-0.037h0.055l0.045,0.019l0.1,0.036l0.1,0.009l0.145-0.009l0.108-0.027l0.108,0.027h0.254l0.036-0.009l0.062-0.054l0.046-0.018l0.063-0.045l0.018-0.081l0.019-0.018l0.054-0.063l0.009-0.027l0.036-0.054l0.063-0.018l0.036,0.009l0.01,0.054l0.018,0.054l0.055,0.027l0.063,0.054l0.026,0.018l0.019,0.09l0.127,0.018l0.072,0.063l0.054,0.045h0.136l0.1-0.027l0.027-0.045l0.018-0.045l0.118,0.045l0.063,0.027h0.099l0.1,0.063l0.063,0.027l0.127,0.036l0.117-0.018l0.1-0.045l0.063,0.018l0.054-0.072l-0.045-0.1v-0.072l-0.045-0.081l0.009-0.045l0.081-0.027l0.027-0.009l0.046-0.063l-0.037-0.072l-0.026-0.027l-0.063-0.009l-0.055-0.018l0.036-0.027l0.055-0.063l0.1-0.045l0.081-0.027l0.091-0.018l0.117-0.054l0.108-0.009l0.091-0.027l0.081,0.009h0.108l0.046-0.1l0.018-0.063l0.036-0.108l-0.018-0.09l-0.019-0.063l-0.045-0.045l-0.063-0.055l-0.081-0.054l-0.036-0.072l0.018-0.082l0.063-0.054l0.127-0.072l0.153,0.009l0.055-0.045l0.108-0.036l0.117-0.036l0.163-0.036l0.081-0.009l0.082-0.045l0.081-0.063l0.045-0.082l0.091-0.063l0.108,0.036l0.136,0.009l0.063-0.009l-0.009-0.082l-0.019-0.09v-0.072l0.055-0.063l0.145-0.009h0.172l0.145,0.036l0.1,0.073l0.035,0.009l0.215,0.197l1.412,0.612l1.116,0.671l0.58,0.098l0.668-0.047l0.433-0.031l0.589-0.203l0.201,0.142l0.056,0.089l0.022,0.112l-0.022,0.078l0.045,0.044l0.011,0.067l-0.078,0.056l-0.011,0.146l0.078,0.067l0.145-0.034l0.101,0.034l0.045,0.089l-0.078,0.011l-0.056-0.022l-0.022,0.078l0.033,0.1l-0.045,0.034l-0.044,0.022l0.066,0.111l0.168-0.022l0.033,0.078l0.123,0.1h0.122h0.101l0.09,0.078l0.122,0.011h0.134l0.012,0.078l-0.033,0.056l-0.135-0.011l-0.089-0.034l-0.067,0.022l-0.078-0.011l-0.066-0.045l-0.056-0.011l-0.045,0.011l0.033,0.067l-0.101,0.089h-0.078v0.156l0.045,0.067l-0.033,0.078l0.022,0.078l0.011,0.078l-0.089,0.033l-0.09-0.033l-0.056,0.067l0.078,0.089l-0.078,0.011l-0.189,0.022l-0.201-0.022l-0.145-0.123l0.056-0.101l-0.045-0.089l-0.123-0.011l-0.022-0.112l-0.145-0.056l-0.146-0.045l-0.101,0.089l-0.1-0.011l-0.156-0.078l-0.067-0.022h-0.146l-0.156-0.045l-0.111,0.067l-0.134,0.045l-0.134-0.045l-0.111-0.067h-0.112l-0.122,0.089l-0.168,0.078l-0.156-0.067l-0.268-0.089l-0.179,0.011l-0.156,0.011l-0.189-0.056l-0.168-0.011l-0.156-0.089l-0.089,0.078l-0.111,0.022l-0.057-0.056l-0.234-0.078l-0.156-0.056l-0.134-0.045l-0.089-0.011l-0.134,0.123l-0.112-0.011l-0.223-0.022l-0.168-0.033l-0.212,0.022l-0.101,0.111l-0.145,0.145l-0.123,0.201l-0.201-0.022l-0.256-0.134l-0.156-0.19l-0.101-0.111l-0.312-0.034l-0.123,0.044l-0.089,0.179l-0.045,0.167l0.045,0.134v0.078l0.033,0.212l-0.123,0.067l0.022,0.089l0.134,0.078l0.09,0.089l0.122,0.034l0.101,0.033l0.179,0.179l0.146,0.234l0.089,0.134l0.022,0.123l0.156,0.111l-0.078,0.056l-0.012,0.1l0.022,0.146l0.168-0.011l0.089,0.111l0.056,0.123l0.112,0.111l0.167,0.045l0.167,0.033l0.369,0.357l0.021,0.167l0.078,0.044l0.213,0.078l0.379,0.357l0.224,0.123l0.223,0.067l0.101,0.056v0.112l0.078,0.279l0.201,0.078l0.189,0.167l0.146,0.112l0.245,0.123l0.067,0.212l-0.284,0.083z M439.792,104.833l0.132-0.118l0.134,0.011l0.123,0.034l0.045,0.078l0.066,0.089l0.146,0.089l0.179,0.078l0.212,0.011l0.312,0.257l0.045,0.067l0.134-0.033l0.123,0.022l0.089,0.034l0.062,0.063l0.005,0.004l-0.022,0.089l0.033,0.078l0.082,0.072l0.029,0.092l-0.002,0.1l-0.589-0.367l-0.549-0.371l-0.789-0.378z"/>
+ <path id="SR" country:name="Serbia" country:shortname="Serbia" d="M451.009,101.725l-0.328,0.346l-0.383,0.374l-0.18,0.302l0.056,0.271l1.326,1.122l0.028,0.2l-0.302,0.302l-0.762,0.333l-0.246,0.301l-0.008,0.514l-0.013,0.208l-0.058-0.017l-0.072,0.029l-0.16,0.022l-0.145,0.021l-0.116,0.022l-0.058,0.015l-0.102-0.051l-0.087,0.043l-0.088,0.021l-0.102-0.043l-0.064-0.021l-0.131,0.116l-0.087,0.08l-0.152-0.015l-0.196-0.007l-0.064,0.007l-0.175-0.043l-0.152,0.087l-0.151,0.102l-0.109,0.058l0.059,0.072l-0.029,0.058h-0.116l-0.094-0.109l-0.131-0.058l-0.087-0.073l-0.08,0.065l-0.116,0.058l-0.246,0.058l-0.225,0.058l-0.088,0.058l-0.058,0.167l0.029,0.13l-0.029,0.072l-0.072,0.087h-0.188l-0.14-0.049l-0.018-0.109l-0.733-0.866l-0.382-0.369l-0.058-0.004l0.109-0.286v-0.067l-0.078-0.067h-0.101l-0.056-0.056l0.022-0.089l0.111-0.033l0.146,0.011l0.167,0.033l0.057-0.033l0.021-0.067l0.09-0.044l0.134-0.022l0.089-0.011l-0.011-0.089l-0.101-0.101l-0.167-0.067l-0.134-0.045l-0.057-0.044l-0.111,0.022l-0.078-0.045l-0.033-0.067l-0.123-0.101l-0.078-0.1l-0.066-0.022l-0.067,0.044l-0.078-0.011l-0.101-0.056l-0.279-0.078l-0.078-0.022l-0.056-0.033l-0.167-0.134l-0.101-0.146l-0.111-0.111l-0.168-0.078l-0.156-0.101l-0.223-0.056v-0.101l0.179-0.101l0.089-0.111l0.078-0.011l0.067,0.034l0.078,0.044l0.1,0.022l0.045-0.022l0.012-0.134l0.011-0.19l-0.134-0.145l-0.179-0.19l-0.212-0.134l-0.101-0.145l0.101,0.022l0.101,0.011l0.145,0.056l0.224,0.044l0.134-0.078l0.089-0.056l0.067-0.078l-0.089-0.044l-0.135-0.022l-0.089-0.089l-0.123-0.078l-0.156-0.089l-0.033-0.101l-0.045-0.1l-0.212,0.011l-0.167-0.056l-0.078-0.1l-0.022-0.134l0.078-0.067v-0.089l-0.033-0.1l0.056-0.056l0.066-0.078l0.156-0.156l0.156-0.223l0.034-0.167l0.056-0.1l-0.022-0.067l-0.123-0.022l-0.179-0.011h-0.156l-0.212,0.112l-0.078-0.089l0.056-0.067l0.09,0.033l0.089-0.033l-0.011-0.078l-0.022-0.078l0.033-0.078l-0.045-0.067v-0.156h0.078l0.101-0.089l-0.033-0.067l0.045-0.011l0.056,0.011l0.066,0.045l0.078,0.011l0.067-0.022l0.089,0.034l0.135,0.011l0.033-0.056l-0.012-0.078h-0.134l-0.122-0.011l-0.09-0.078h-0.101h-0.122l-0.123-0.1l-0.033-0.078l-0.168,0.022l-0.066-0.111l0.044-0.022l0.045-0.034l-0.033-0.1l0.022-0.078l0.056,0.022l0.078-0.011l-0.045-0.089l-0.101-0.034l-0.145,0.034l-0.078-0.067l0.011-0.146l0.078-0.056l-0.011-0.067l-0.045-0.044l0.022-0.078l-0.022-0.112l-0.056-0.089l-0.201-0.142l1.535-0.529l0.889-0.077l0.907,0.067l0.054,0.309l0.569,0.178l0.19,0.237l0.202,0.036l-0.075,0.356l0.104,0.119l-0.058,0.088l0.712,0.471l0.555,0.141l0.306,0.118l0.069,0.142l-0.19,0.127l-0.124,0.146l0.183,0.059l0.239,0.083l-0.271,0.071l-0.178,0.094l0.052,0.165l0.245,0.036h0.234l0.02,0.189l0.594,0.059l0.194,0.139l0.414,0.239l0.147-0.118l0.215-0.283l0.253-0.13l0.625,0.248l0.114,0.13l-0.351-0.012l-0.32,0.201l0.146,0.33l0.418,0.186z"/>
+ <path id="UZ" country:name="Uzbekistan" country:shortname="Uzbekistan" d="M551.198,117.997l-0.351-0.48l-0.236-0.126l-1.217-0.05l-0.646-0.011l-0.096-0.016l0.091-0.726l-0.062-0.503l0.157-0.251l0.062-0.22l-0.503-0.094l-0.534-0.283l-0.566-0.189l-0.471,0.063l-0.378-0.251l-1.132-0.597l-0.565-0.22l-0.943-0.597l-0.314,0.063l-1.006-0.503l-0.377-0.44l-1.194-0.597l-1.384-0.975v-0.283l-0.188-0.44l-0.283-0.188l-0.408-0.597l-0.126-0.566l-0.22-0.377l-0.881-0.251l-0.188,0.157l-0.439,0.063l-0.535-0.126l-0.439,0.032l-0.503,0.094l-0.314-0.157l-0.691-0.314l0.094-0.22l0.157-0.188l-0.188-0.22l0.031-0.188l0.188-0.157l-0.439-0.283v-0.22l-0.032-0.22l-0.251-0.22l-0.534-0.094l-0.692-0.095l-0.22-0.314l-0.346-0.032l-0.629-0.377l-0.472-0.095l-0.188,0.063l-0.565,0.157l0.251,0.251l0.188,0.377l-0.597-0.283h-0.283l-0.126,0.126l-0.22,0.346l-0.283,0.126h-0.629l-0.503,0.251l-0.503,0.409l-0.062,0.628l0.314,0.409l-0.126,0.314l-1.383,0.032l-1.03-0.063l0.056-8.174l5.658-1.289l5.722,2.986l2.012,1.666l2.578-0.346l2.767,0.188l1.1-0.409l0.724,0.723l0.597,0.22l0.66,1.006l0.66-0.314l-0.031,1.038l-0.188,0.409l0.031,0.754h1.006l0.221,0.817l0.346,1.069l0.503,0.063l0.691-0.032l1.006-0.094h0.346l0.44,0.314l0.062,0.283l-0.062,0.283l0.44,0.346h0.66l0.125-0.188l-0.157-0.409l0.504-0.44l0.439-0.188l0.221-0.472l0.282-0.188l0.943-0.377l0.755-0.189l0.534-0.471l0.346-0.283l0.22-0.063l0.283,0.126l0.377-0.377l0.322-0.031l0.349-0.126l0.441,0.246l-0.368,0.172l-0.368,0.171l-0.221,0.049l-0.073,0.196l-0.295,0.049l-0.294,0.172l-0.196,0.147l-0.441,0.295l-0.172,0.098l-0.024,0.123l0.294,0.049l0.295,0.074l0.146,0.123l0.418-0.147l0.098,0.221l0.172,0.221l0.368,0.27h0.589h0.393l0.049-0.393l0.221,0.049l0.196-0.196l0.024-0.245l0.196,0.098l0.196,0.172l0.172,0.294l0.049,0.147l0.393,0.024l0.147-0.024l0.073,0.246l0.025,0.098l0.343-0.025l0.319,0.147l0.245,0.196l0.516,0.074l0.466,0.024l0.172,0.123l-0.49,0.221l-0.197,0.147l-0.221,0.147l-0.49-0.024l-0.245-0.049l0.049,0.171v0.147h-0.319l-0.172,0.049l-0.343,0.196l-0.221,0.196l-0.271,0.049l-0.221,0.196l-0.245-0.147l-0.319-0.098l-0.294-0.098l-0.221,0.025l-0.246,0.073l-0.318-0.073l-0.042,0.098l-0.345-0.005l-0.409,0.031l-0.188-0.283l-0.251-0.063l-0.126-0.188l0.251-0.126l0.409-0.346l0.188-0.22l-0.252-0.251l-0.439-0.377l-0.221,0.251l-0.471,0.346l-0.692,0.188l-0.22,0.157l-0.252-0.22l-0.22-0.157h-0.346l0.031,0.22l-0.283,0.314l0.189,0.314l-0.032,0.346l-0.062,0.126l-0.472-0.095l-0.565,0.095l-0.503,0.094l0.251,0.125l0.534-0.031l0.126,0.094l-0.251,0.063l-0.188,0.063l-0.032,0.346h-0.188l-0.251,0.157l-0.063,0.409l-0.282,0.188l-1.069-0.094l-0.629-0.126l-0.472,0.283l-0.125,0.471l0.251,0.283l0.346,0.188l0.157,0.157l0.44,0.032h0.346l0.126,0.22l-0.126,0.22l-0.031,0.472l0.126,0.409l0.471,0.314l0.126,0.283l-0.157,0.22l-0.503,0.346l-0.283,0.503l-0.377,0.377l0.063,0.377l-0.375,0.843z"/>
+ <path id="BA" country:name="Bosnia and Herzegovina" country:shortname="Bosnia/Herz" d="M439.792,104.833l-0.113-0.054l-0.105-0.07l0.284-0.083l-0.067-0.212l-0.245-0.123l-0.146-0.112l-0.189-0.167l-0.201-0.078l-0.078-0.279v-0.112l-0.101-0.056l-0.223-0.067l-0.224-0.123l-0.379-0.357l-0.213-0.078l-0.078-0.044l-0.021-0.167l-0.369-0.357l-0.167-0.033l-0.167-0.045l-0.112-0.111l-0.056-0.123l-0.089-0.111l-0.168,0.011l-0.022-0.146l0.012-0.1l0.078-0.056l-0.156-0.111l-0.022-0.123l-0.089-0.134l-0.146-0.234l-0.179-0.179l-0.101-0.033l-0.122-0.034l-0.09-0.089l-0.134-0.078l-0.022-0.089l0.123-0.067l-0.033-0.212v-0.078l-0.045-0.134l0.045-0.167l0.089-0.179l0.123-0.044l0.312,0.034l0.101,0.111l0.156,0.19l0.256,0.134l0.201,0.022l0.123-0.201l0.145-0.145l0.101-0.111l0.212-0.022l0.168,0.033l0.223,0.022l0.112,0.011l0.134-0.123l0.089,0.011l0.134,0.045l0.156,0.056l0.234,0.078l0.057,0.056l0.111-0.022l0.089-0.078l0.156,0.089l0.168,0.011l0.189,0.056l0.156-0.011l0.179-0.011l0.268,0.089l0.156,0.067l0.168-0.078l0.122-0.089h0.112l0.111,0.067l0.134,0.045l0.134-0.045l0.111-0.067l0.156,0.045h0.146l0.067,0.022l0.156,0.078l0.1,0.011l0.101-0.089l0.146,0.045l0.145,0.056l0.022,0.112l0.123,0.011l0.045,0.089l-0.056,0.101l0.145,0.123l0.201,0.022l0.189-0.022l0.078-0.011l0.212-0.112h0.156l0.179,0.011l0.123,0.022l0.022,0.067l-0.056,0.1l-0.034,0.167l-0.156,0.223l-0.156,0.156l-0.066,0.078l-0.056,0.056l0.033,0.1v0.089l-0.078,0.067l0.022,0.134l0.078,0.1l0.167,0.056l0.212-0.011l0.045,0.1l0.033,0.101l0.156,0.089l0.123,0.078l0.089,0.089l0.135,0.022l0.089,0.044l-0.067,0.078l-0.089,0.056l-0.134,0.078l-0.224-0.044l-0.145-0.056l-0.101-0.011l-0.101-0.022l0.101,0.145l0.212,0.134l0.179,0.19l0.134,0.145l-0.011,0.19l-0.012,0.134l-0.045,0.022l-0.1-0.022l-0.078-0.044l-0.067-0.034l-0.078,0.011l-0.089,0.111l-0.179,0.101l-0.056-0.033l-0.156,0.056l-0.112-0.022l-0.066-0.044l-0.112,0.033l-0.078,0.056l0.012,0.078l0.089,0.1l0.123,0.167l0.056,0.101l-0.056,0.101h-0.111l-0.09-0.056l-0.056-0.089l-0.056-0.044l-0.123-0.011l-0.122,0.056l-0.168,0.078l-0.045,0.101l-0.044,0.089l-0.112,0.101l0.034,0.089l0.011,0.1L442,104.458l-0.134,0.011l-0.111,0.022l-0.101,0.089l-0.012,0.134l0.012,0.112l0.011,0.145l0.012,0.044l0.066,0.112l0.078,0.089l0.045,0.101l-0.09,0.089l-0.183,0.108l-0.062-0.063l-0.089-0.034l-0.123-0.022l-0.134,0.033l-0.045-0.067l-0.312-0.257l-0.212-0.011l-0.179-0.078l-0.146-0.089l-0.066-0.089l-0.045-0.078l-0.123-0.034l-0.134-0.011l-0.132,0.118z"/>
+ <path id="BG" country:name="Bulgaria" d="M450.198,105.998l0.013-0.208l0.008-0.514l0.246-0.301l0.762-0.333l0.302-0.302l-0.028-0.2l-1.326-1.122l-0.056-0.271l0.18-0.302l0.383-0.374l0.328-0.346l0.392,0.204l0.352,0.106l-0.234,0.318l0.048,0.189l0.266-0.023l0.771-0.189l0.506,0.002l1.151,0.395l0.34-0.031l0.69-0.261l0.3,0.013l1.385,0.35l0.38-0.059l1.904-0.771l0.618-0.218l0.562,0.04l0.671,0.369l0.295,0.042l0.514,0.226l1.346,0.336l0.671,0.12l-0.066,0.335l-0.077,0.258l-0.261,0.086l-0.313-0.028l-0.339,0.129l-0.327,0.73l-0.039,0.586l-0.075,0.143l-0.404,0.115l-0.338,0.372l-0.017,0.257l0.252-0.036l0.255,0.224l0.033,0.154l0.391,0.375l0.01,0.223l-1.333-0.005l-0.527-0.111l-0.497,0.045l-0.629,0.374l-0.498,0.445l-0.363-0.026l-0.344,0.216l0.097,0.327l-0.086,0.257l-1.117,0.277l-0.388,0.031l-0.619-0.21l-1.473-0.505l-0.584,0.06l-0.799,0.261l-1.855,0.195l-0.09,0.029l-0.047-0.199l0.104-0.3l0.006-0.499l-0.225-0.469l-0.358-0.383l-0.666-0.296l-0.134-0.213l0.007-0.106z"/>
+ <path id="ES" country:name="Spain" d="M381.009,107l-0.121-0.278l0.138-0.4l0.343-0.5l-0.358-0.471l-0.304-0.428l-0.514-0.07l-0.164-0.1l-0.053-0.329l0.163-0.243l0.409-0.272l0.365-0.101l0.563-0.03l0.634-0.03l0.133-0.172l0.068-0.415l0.535-0.273l0.763,0.042l1.078,0.37l0.763,0.07l0.756-0.087l0.577-0.173l0.508-0.144l0.354-0.001l0.629,0.285l0.694,0.156l0.939,0.084l1.538,0.04l0.583,0.027l0.957,0.141l0.491-0.158l0.419-0.229l0.531,0.027l0.891,0.47l0.67-0.016l0.335,0.062l0.472,0.243l0.469-0.03l0.058,0.122l-0.205,0.243l0.094,0.106l0.15,0.03l0.112-0.106l1.088,0.334l0.15-0.061l0.507,0.395l0.056-0.076l0.262,0.03l0.131-0.076l0.431,0.152l0.028,0.038l0.084,0.114l0.767-0.03l0.037,0.122l0.337-0.061l0.542,0.015l-0.017-0.319h0.355l1.252,0.304l0.091,0.213l0.035,0.289l0.187,0.076l0.374-0.076l0.206-0.03l0.335,0.091l0.036,0.152l0.261,0.015l0.395-0.167l0.427,0.197l0.485,0.015l0.039-0.136l0.75-0.137l0.334,0.091l-0.001,0.088l-0.001,0.463l0.156,0.1l-0.062,0.485l-1.112,0.528l-0.95,0.385l-0.267,0.328l-1.046,0.198l-0.664,0.116l-0.96,0.301l-0.323,0.326l-0.053,0.2l0.261,0.128l-0.088,0.157l-0.628,0.143l-0.594,0.783l-0.886,0.787l-0.096,0.192l-0.18,0.361l-0.245,0.45l0.353,0.827l0.072,0.111l0.084,0.13l0.648,0.295l0.103,0.185l-0.621,0.327l-0.215,0.105l-0.515,0.252l-0.286,0.479l-0.224,0.085l-0.461,0.926l0.155,0.322l-0.257,0.099l-0.992,0.049l-0.581,0.242l-0.425,0.327l-0.274,0.757l-0.663,0.496l-0.258-0.213l-0.599,0.028l-0.305,0.27h-0.342l-0.121-0.113l-3.282,0.042l-0.69,0.524l-1.021,0.17l-0.35,0.382l-0.028,0.283l-0.083,0.085l-0.073-0.212l-0.068-0.014l0.005,0.241l-0.389,0.127l-0.421-0.142l-0.788-0.467l-0.224-0.382l0.036-0.262l-0.345-0.113l-0.125-0.213l0.175-0.163l-0.468-0.51l-0.702-0.284L385,117.498l-0.484-0.135l-0.586,0.039l0.008-0.018l0.304-0.951l0.242-0.37l0.884-0.643l-0.408-0.31l-0.812-0.123l0.17-0.455l0.506-0.655l0.347-0.371l-0.163-0.198l-0.455-0.551l-0.488-0.494l0.288-0.129l0.482-0.045l0.458-0.229l0.043-0.199l-0.057-0.938l0.132-0.983l-0.072-0.456l0.051-0.442l0.084-0.072l1.234-0.506l0.288-0.216l-0.062-0.242l-0.842-0.495l-0.15-0.242l-0.272-0.227l-0.335-0.055l-0.531,0.26L382.981,107l-0.531-0.439l-0.55,0.188L381.009,107z"/>
+ <path id="GE" country:name="Georgia" country:shortname="Georgia" d="M489.685,103.693l0.112-0.309l0.26-0.166l0.284,0.047l0.07,0.047l0.402,0.023l0.449,0.023l0.283,0.095l0.284,0.142l0.188,0.094l0.189,0.047h0.331h0.213l0.212,0.166l0.261,0.095l0.307,0.071l0.355,0.047h0.307l0.426-0.095h0.544l0.401,0.166h0.189l0.283-0.047l0.354,0.166l0.095,0.142l0.284,0.213l0.52,0.118l0.354,0.071l0.236,0.118l0.308,0.119l-0.142,0.118l-0.048,0.118l0.261,0.118l0.212,0.071l0.261-0.118h0.283l0.166-0.166l0.094-0.095l0.213-0.071h0.354l0.261,0.071l0.188,0.142l0.142-0.166l0.095-0.071h0.118l0.236,0.118l0.143,0.094h0.212l0.189,0.118l0.213,0.166h0.378l0.354,0.024l0.118,0.142l-0.118,0.189l-0.118,0.307l0.354,0.284l0.284,0.166l0.26,0.094l0.284,0.047l0.236-0.023l0.236,0.071l0.126,0.189l-0.268,0.189l-0.143,0.142l-0.095,0.071l0.143,0.26l0.213,0.307l0.614,0.166l0.118,0.213l-0.095,0.331l-0.236,0.095l-0.236,0.047l-0.26-0.189l-0.143-0.071l-0.188-0.023l-0.284,0.047l-0.638-0.189l-0.189-0.213l-0.331-0.189l-0.473-0.024h-0.236l-0.418,0.308l-0.291,0.094l-0.378,0.047l-0.591,0.095l-0.592-0.047l-0.401,0.118l-0.426,0.023l-0.308,0.095l-0.307-0.024l-0.377,0.108l-0.031-0.028l-1.326-1.018l-0.41-0.041l-0.761,0.36l-0.226,0.072l-0.491-0.068l-1.212-0.082l0.083-0.065l0.322-0.585l0.032-0.143l-0.064-0.728l-0.331-1.084l-0.206-0.399l-0.639-0.513l-0.341-0.128l-0.916-0.155l-0.679-0.271l-0.341-0.243z"/>
+ <path id="MW" country:name="Montenegro" country:shortname="Montenegro" d="M443.617,107.095l-0.065-0.035l-0.435-0.156l-0.017-0.15l-0.501-0.485l-0.848-0.3l-0.033-0.021l0.002-0.1l-0.029-0.092l-0.082-0.072l-0.033-0.078l0.022-0.089l-0.005-0.004l0.183-0.108l0.09-0.089l-0.045-0.101l-0.078-0.089l-0.066-0.112l-0.012-0.044l-0.011-0.145l-0.012-0.112l0.012-0.134l0.101-0.089l0.111-0.022l0.134-0.011l0.056-0.056l-0.011-0.1l-0.034-0.089l0.112-0.101l0.044-0.089l0.045-0.101l0.168-0.078l0.122-0.056l0.123,0.011l0.056,0.044l0.056,0.089l0.09,0.056h0.111l0.056-0.101l-0.056-0.101l-0.123-0.167l-0.089-0.1l-0.012-0.078l0.078-0.056l0.112-0.033l0.066,0.044l0.112,0.022l0.156-0.056l0.056,0.033v0.101l0.223,0.056l0.156,0.101l0.168,0.078l0.111,0.111l0.101,0.146l0.167,0.134l0.056,0.033l0.078,0.022l0.279,0.078l0.101,0.056l0.078,0.011l0.067-0.044l0.066,0.022l0.078,0.1l0.123,0.101l0.033,0.067l0.078,0.045l0.111-0.022l0.057,0.044l0.134,0.045l0.167,0.067l0.101,0.101l0.011,0.089l-0.089,0.011l-0.134,0.022l-0.09,0.044l-0.021,0.067l-0.057,0.033l-0.167-0.033l-0.146-0.011l-0.111,0.033l-0.022,0.089l0.056,0.056h0.101l0.078,0.067v0.067l-0.109,0.286l-0.361-0.022l-0.727-0.11l-0.273,0.273l-0.279,0.515l0.133,0.427l-0.002,0.342z"/>
+ <path id="KG" country:name="Kyrgyzstan" country:shortname="Kyrgyzstan" d="M558.52,110.652l0.042-0.098l0.318,0.073l0.246-0.073l0.221-0.025l0.294,0.098l0.319,0.098l0.245,0.147l0.221-0.196l0.271-0.049l0.221-0.196l0.343-0.196l0.172-0.049h0.319v-0.147l-0.049-0.171l0.245,0.049l0.49,0.024l0.221-0.147l0.197-0.147l0.49-0.221l-0.172-0.123l-0.466-0.024l-0.516-0.074l-0.245-0.196l-0.319-0.147l-0.343,0.025l-0.025-0.098l-0.073-0.246l-0.147,0.024l-0.393-0.024l-0.049-0.147l-0.172-0.294l-0.196-0.172l-0.196-0.098l-0.024,0.245l-0.196,0.196l-0.221-0.049l-0.049,0.393h-0.393h-0.589l-0.368-0.27l-0.172-0.221l-0.098-0.221l-0.418,0.147l-0.146-0.123l-0.295-0.074l-0.294-0.049l0.024-0.123l0.172-0.098l0.441-0.295l0.196-0.147l0.294-0.172l0.295-0.049l0.073-0.196l0.221-0.049l0.368-0.171l0.368-0.172l-0.441-0.246l-0.349,0.126l-0.044-0.273l0.393-0.442l0.318-0.368l0.736-0.123l0.663-0.098l0.883,0.147l0.883,0.245l0.688,0.196l0.81,0.123l0.344,0.123l-0.024-0.442l0.245-0.736l0.466-0.368l0.688-0.123l0.589,0.074l0.761,0.27l0.735,0.246l0.908,0.196l0.54,0.098l0.441-0.27l0.858-0.024h0.761l0.785-0.147l0.712,0.221l0.662,0.098l1.35,0.024l0.662-0.074l0.981,0.246l0.564-0.049l0.147,0.344l0.27,0.147l0.196,0.27h0.663l0.466,0.098l0.41,0.375l0.031,0.194l-0.051,0.157l-0.325,0.187l-0.97,0.219l-1.338,0.349l-0.445,0.145l-0.405,0.301l-0.638,0.701l-0.646,0.345l-0.478,0.102l-0.459,0.017l-1.248-0.235l-0.238,0.03l-0.467,0.472l-0.463,0.784l-0.268,0.243l-0.885,0.132l-0.507,0.145l-0.344-0.055l-0.183-0.567l-0.06-0.071l-0.359,0.03l-1.737,0.734l-1.422,0.704l-0.274,0.186l-0.129,0.213l-0.139,0.739l-0.196-0.073l-0.344,0.098l-0.344,0.171h-0.539l-0.663-0.073l-0.834,0.221l-0.172,0.147h-0.196l-0.172-0.319l-0.368,0.024l-0.318,0.172l-0.074-0.221l-0.049-0.172l-0.122,0.024l-0.319-0.123l-0.049-0.147l-0.221-0.024l-0.442,0.123l-0.343,0.049l0.024,0.221l-0.295,0.049l-0.393-0.074l-0.073-0.196l-0.147-0.123l-0.368-0.098l-0.49,0.147l-0.196-0.073l-0.688,0.024h-0.564l-0.589,0.024l-0.122-0.098l-0.049-0.147l-0.099-0.27l0.099-0.245l0.196-0.196l0.098,0.221l0.196-0.074l-0.049-0.196l0.098-0.27h0.123l0.981-0.196l0.515,0.147l0.516,0.196l0.099,0.172h0.196l0.024-0.246l0.441-0.196l0.302-0.147z"/>
+ <path id="KP" country:name="Korea, Democratic People&#39;s Republic of" country:shortname="Korea D P Rp" d="M685.343,114.455l-0.571,0.678l-0.309,0.115l-0.511-0.096l-0.579-0.068l-0.595-0.011l-0.315,0.157l-0.633,0.738l-0.283,0.256l-0.235,0.171l-0.268-0.206l-0.35,0.34l-0.319,0.199l-0.373-0.608l-0.398-0.112l-0.649,0.78l-0.195-0.382l-0.232-0.254l-0.683-0.367l-0.169-0.453l0.095-0.312l0.429-0.411l0.754-0.229l0.056-0.269l-0.591-0.282l0.407-0.879l0.189-0.34l-0.199-0.269l-0.632-0.296l-0.139,0l-0.381,0.029l-0.312,0.143l-0.234-0.07l-0.52-0.368l-0.167-0.233l0.379-0.528l0.415-0.442l0.52-0.329l1.533-0.604l1.032-0.545l0.636-0.543l0.686-1.027l0.386-0.13l0.448-0.017l0.273,0.396l0.493,0.253l0.508,0.153l0.975-0.048l0.527-0.159l-0.046-0.113l-0.508-0.765l0.025-0.342l0.273-0.243l0.392-0.059l0.333,0.126l0.452,0.054l0.538-0.017l0.62-0.259l0.955-0.532l0.23-0.713l0.383-0.358l0.253-0.129l0.247-0.001l0.579,0.68l0.298,0.439l0.167,0.393l-1.356,0.923l-0.408,0.457l-0.112,0.414l0.09,0.427l-0.154,0.456l-0.187,0.868l-0.668,0.115l-0.36,0.229l-0.497,0.385l-0.766,0.641l-0.468,0.214l-0.678,0.03l-0.577,0.199l-0.265,0.228l-0.248,0.312l-0.364,0.893l0.284,0.326l1.225,0.847l0.419,0.354z"/>
+ <path id="TM" country:name="Turkmenistan" country:shortname="Turkmenistan" d="M536.625,121.017l-0.078-0.028l-0.15-0.692l-0.01-0.565l-0.038-0.848l-0.185-0.211l-0.787,0.075l-0.696-0.01l-0.655-0.506l-1.803-1.362l-0.597-0.336l-0.66-0.167l-0.5-0.054l-0.788-0.066l-0.822-0.335l-0.708-0.251l-0.402-0.437l-1.055-0.107l-0.519-0.054l-0.343,0.129l-0.517,0.343l-0.333,0.03l-0.78-0.038l-0.609,0.032l-0.413,0.144l-0.476,0.328l-0.621,0.654l-0.466,0.3l-0.562,0.13l-0.441-0.025l-0.066-0.376l-0.128-0.681l-0.106-0.447l0.128-0.298v-0.383v-0.532l0.106-0.191l0.106-0.298l0.085-0.234l-0.085-0.212l-0.256-0.128l-0.319-0.191l-0.213-0.255l-0.042-0.149h-0.171l-0.191-0.042l-0.361-0.106l-0.191,0.192l-0.086-0.234l0.086-0.106l0.148-0.255l0.128,0.106l0.383-0.042l0.426,0.085l0.128,0.021l0.043-0.128l-0.319-0.213l-0.256-0.021l-0.085-0.277l0.17-0.255l0.213-0.191l-0.404-0.042l-0.319,0.085h-0.383l-0.319-0.085l-0.128,0.149l-0.17-0.255l-0.149-0.298v-0.34l-0.042-0.298l0.17-0.213l0.106-0.319l0.043-0.255l0.105-0.277l0.086-0.234l0.213,0.34l0.063,0.128l0.17,0.17l0.405-0.085l0.383,0.128l0.106-0.149l-0.021-0.149h0.106l0.148,0.021l0.064,0.319l0.106,0.191l0.298-0.021l0.298-0.063l0.256-0.106l0.233,0.085l0.192,0.064l0.085-0.128l-0.149-0.191l-0.042-0.213l0.191-0.042l0.106,0.149l0.233,0.085l0.256-0.085l0.213-0.064l0.021-0.234l-0.171-0.341l-0.34-0.234l-0.532-0.319l-0.426-0.213l-0.063-0.319l-0.043-0.34l-0.213-0.17v-0.213v-0.213l-0.085-0.127l-0.554-0.064l-0.617,0.085l-0.426,0.021l-0.446,0.127l-0.192,0.277l-0.085,0.298l0.128,0.192l-0.063,0.276l-0.086,0.405l0.064,0.234l0.021,0.298l-0.256-0.553l-0.361-0.319l0.042-0.17l-0.063-0.191l-0.274-0.143l0.529-0.453l0.937-0.532l1.277-0.298l0.979-0.085l0.512,0.234l0.681,0.383l0.617,0.383l0.256,0.511l0.638,0.703l0.447,0.255l0.489-0.043l0.341-0.106l0.158,0.014l1.03,0.063l1.383-0.032l0.126-0.314l-0.314-0.409l0.062-0.628l0.503-0.409l0.503-0.251h0.629l0.283-0.126l0.22-0.346l0.126-0.126h0.283l0.597,0.283l-0.188-0.377l-0.251-0.251l0.565-0.157l0.188-0.063l0.472,0.095l0.629,0.377l0.346,0.032l0.22,0.314l0.692,0.095l0.534,0.094l0.251,0.22l0.032,0.22v0.22l0.439,0.283l-0.188,0.157l-0.031,0.188l0.188,0.22l-0.157,0.188l-0.094,0.22l0.691,0.314l0.314,0.157l0.503-0.094l0.439-0.032l0.535,0.126l0.439-0.063l0.188-0.157l0.881,0.251l0.22,0.377l0.126,0.566l0.408,0.597l0.283,0.188l0.188,0.44v0.283l1.384,0.975l1.194,0.597l0.377,0.44l1.006,0.503l0.314-0.063l0.943,0.597l0.565,0.22l1.132,0.597l0.378,0.251l0.471-0.063l0.566,0.189l0.534,0.283l0.503,0.094l-0.062,0.22l-0.157,0.251l0.062,0.503l-0.091,0.726l-1.454-0.244l-0.565-0.294l-0.445,0.356l-0.417,0.2l-1.135,0.205l-0.432,0.809l-0.203,0.991l-0.103,0.128l-0.508,0.243l-1.985,0.689l-0.568,0.159l-0.119,0.199l-0.001,0.466l-0.22,0.199l-0.636,0.3l-0.534,0.031l-0.573-0.082l-0.999-0.348l-0.937-0.193l-0.193-0.112z"/>
+ <path id="AL" country:name="Albania" d="M445.294,112.196l-0.07-0.115l-0.138-0.469l-0.5-0.452l-0.966-0.541l0.024-0.141l0.23,0.062l0.023-0.237l-0.345-0.414l0.418-0.616l-0.182-0.22l0.188-0.563l-0.251-0.282l0.182-0.396l0.268-0.079l-0.027-0.45l-0.331-0.081l-0.2-0.107l0.002-0.342l-0.133-0.427l0.279-0.515l0.273-0.273l0.727,0.11l0.361,0.022l0.058,0.004l0.382,0.369l0.733,0.866l0.018,0.109l0.035,0.218l-0.132,0.429l0.074,0.641l0.298,0.668l0.722,0.608l-0.09,0.029l-0.449,0.842l-0.402,0.386l-0.496,0.472l-0.583,0.884z"/>
+ <path id="MK" country:name="Macedonia" country:shortname="Macedonia" d="M451.512,108.463l-0.507,0.16l-0.532,0.245l-0.622-0.054l-0.361-0.041l-0.365,0.159l-0.395,0.429l-0.606,0.146l-0.809,0.076l-0.722-0.608l-0.298-0.668l-0.074-0.641l0.132-0.429l-0.035-0.218l0.14,0.049h0.188l0.072-0.087l0.029-0.072l-0.029-0.13l0.058-0.167l0.088-0.058l0.225-0.058l0.246-0.058l0.116-0.058l0.08-0.065l0.087,0.073l0.131,0.058l0.094,0.109h0.116l0.029-0.058l-0.059-0.072l0.109-0.058l0.151-0.102l0.152-0.087l0.175,0.043l0.064-0.007l0.196,0.007l0.152,0.015l0.087-0.08l0.131-0.116l0.064,0.021l0.102,0.043l0.088-0.021l0.087-0.043l0.102,0.051l0.058-0.015l0.116-0.022l0.145-0.021l0.16-0.022l0.072-0.029l0.058,0.017l-0.007,0.106l0.134,0.213l0.666,0.296l0.358,0.383l0.225,0.469l-0.006,0.499l-0.104,0.3l0.047,0.199z"/>
+ <path id="PT" country:name="Portugal" d="M383.93,117.402l-0.249,0.101l-0.517,0.291l-0.439,0.052l-0.548-0.178h-0.58l-0.28-0.073l-0.719,0.292l-0.058-0.177l0.389-1.012l-0.021-0.856l-0.182-0.115l0.244-0.542l-0.054-0.397l0.13-0.114l-0.144-0.141l-0.375,0.085l-0.476,0.097l-0.108-0.449l0.48-0.052l0.283-0.22l-0.042-0.17l-0.178-0.226l-0.3,0.417l-0.413,0.136l-0.357-0.042l-0.059-0.188l0.198-0.397l0.138-0.616l-0.039-0.303l0.258-0.114l0.403-0.503l0.45-1.098l-0.12-0.115l0.612-1.783l-0.35-0.924l-0.007-0.42l-0.146-0.378l0.255-0.271l0.891-0.251l0.55-0.188l0.531,0.439l1.822,0.047l0.531-0.26l0.335,0.055l0.272,0.227l0.15,0.242l0.842,0.495l0.062,0.242l-0.288,0.216l-1.234,0.506l-0.084,0.072l-0.051,0.442l0.072,0.456l-0.132,0.983l0.057,0.938l-0.043,0.199l-0.458,0.229l-0.482,0.045l-0.288,0.129l0.488,0.494l0.455,0.551l0.163,0.198l-0.347,0.371l-0.506,0.655l-0.17,0.455l0.812,0.123l0.408,0.31l-0.884,0.643l-0.242,0.37l-0.304,0.951l-0.008,0.018z"/>
+ <path id="TR" country:name="Turkey" d="M500.121,117.572l-0.407-0.016l-0.433,0.388l-0.164,0.126l-0.318-0.105l-0.102-0.269l0.03-0.259l-0.274-0.151l-0.366-0.082l-0.244,0.234l-0.343-0.023l-0.811-0.153l-0.364,0.032l-0.304-0.16l-0.437,0.094l-0.266,0.143l-0.23,0.043l-0.064-0.245l-0.207-0.023l-0.24,0.292l-0.693,0.304l-1.185,0.224l-0.711-0.039l-0.747-0.123l-0.439,0.073l-1.498,0.673l-0.567,0.13l-1.104,0.176l-0.556-0.153l-1.532-0.444l-0.278,0.03l-0.929,0.373l-0.746,0.075l-0.575-0.025l-0.777-0.166l-0.222,0.001l-0.142-0.035l-0.055,0.319l0.102,0.452l0.243,0.423l-0.627,0.127l-0.156,0.374l-0.2,0.169l-0.171-0.041l-0.114,0.127l-0.39-0.125l-0.311,0.001l-0.245-0.459l-0.119-0.093l0.097-0.175l0.242-0.197l0.617-0.403l0.021-0.175l-0.049-0.134l-0.279-0.28l-0.146-0.053l-0.487,0.368l-0.23,0.041l-0.137,0.064l0.092,0.041l-0.118,0.216l-0.172,0.023l-0.063-0.047l-0.076,0.088l-0.297,0.058l-0.332-0.222l-0.447-0.198l-0.461-0.157l-0.395,0.046l-0.849,0.548l-0.337,0.286l0.006,0.204l-0.141,0.046l-0.122,0.07l-0.005,0.082l-0.179-0.169l-0.604,0.206l-0.689,0.185l-0.594-0.013l-0.587-0.07l-0.678-0.267l-0.963-0.819l-1.181-0.479l-1.034-0.182l-0.692,0.072l-0.119,0.255l-0.097,0.609l-0.053,0.411l-0.173,0.156l-0.256,0l-0.253-0.155l-1.12,0.243l-0.423-0.027l-0.386-0.183l-0.657-1.159l-0.42,0.354l-0.764-0.451l-0.451,0.057l-0.562,0.412l-0.227-0.382l0.066-0.127l0.242-0.17l-0.116-0.17l-0.989-0.012l-0.545-0.013l-0.088-0.269l0.571-0.199l-0.074-0.241l-0.284-0.198l-0.454-0.07l-0.084-0.297l0.041-0.34l0.087-0.284l-0.089-0.255l-0.396-0.126l-0.627-0.353l-0.371,0.086l-0.265-0.084l-0.004-0.255l0.171-0.501l0.131,0.059l0.478,0.311l0.567-0.271l-0.396-0.283l0.021-0.124l-0.296-0.128l0.03-0.128l0.571-0.159l0.152-0.113l-0.068-0.142l-0.149-0.088l-0.337-0.035l0.01-0.187l0.18-0.07l-0.163-0.164l-0.198-0.117l-0.009-0.152l-0.227-0.012l0.263-0.181l0.296-0.275l0.161-0.035l0.07-0.16l-0.341-0.042l-0.573,0.12l-0.905,0.164l-0.166-0.035l0.046-0.33l0.127-0.125l-0.003-0.199l-0.029-0.286l0.13-0.264l0.299,0.012l0.184-0.41l0.175-0.023l0.63-0.422l0.514,0.012l0.133-0.129l0.479-0.047l0.128,0.211l0.268,0.102l0.169,0.028l0.529,0.022l0.147-0.129l-0.067-0.129l-0.269-0.129l0.286-0.094l0.324,0.036l0.117,0.082l-0.219,0.223l0.213-0.026l1.053-0.073l0.619,0.042l0.379,0.046l0.279,0.047l0.155-0.176l-0.086-0.094l-0.468-0.035l-0.212-0.118l0.275-0.212l1.386-0.151l0.417-0.012l0.377-0.117l-0.442-0.012l-0.592,0.023h-0.215l-0.068-0.146l-0.611-0.382l0.325-0.528l0.926,0.14l1.244,0.048l0.264-0.117l1.086,0.321l1.051-0.031l0.414-0.243l-0.041-0.27l0.624-0.244l0.455-0.214l1.218-0.573l0.598-0.215l1.039-0.23l0.889-0.073l0.758,0.07l0.905,0.126l0.798,0.041l0.753-0.372l0.216,0.527l0.416,0.298l0.278,0.099l0.592,0.013l0.622-0.144l0.453,0.74l0.492,0.255l0.574-0.172l0.391,0.056l0.968,0.582l1.265,0.04l1.094,0.197l0.749-0.001l1.084-0.272l0.514-0.044l0.651,0.141l0.764,0.098l0.787-0.016l0.554-0.144l1.518-0.573l0.424-0.335l1.212,0.082l0.491,0.068l0.226-0.072l0.761-0.36l0.41,0.041l1.326,1.018l0.031,0.028l0.795,0.722l0.026,0.199l-0.421,0.813l0.033,0.412l0.284,0.211l1.413,0.12l0.492,0.451l-0.072,0.211l-0.409-0.023l-0.231,0.141l-0.009,0.433l-0.584,0.267l-0.039,0.27l0.264,0.67l-0.122,0.375l0.224,0.492l0.09,0.117l0.106-0.105l0.288,0.203l0.039,0.207l-0.229,0.281l-0.287,0.535l-0.06,0.128l0.213,0.14l0.424,0.111l-0.145,0.245l0.099,0.421l0.42,0.374l0.275,0.035l0.023,0.308z M462.617,106.804l0.241,0.211l-0.019,0.287l0.115,0.285l0.077,0.071l0.593,0.355l0.819,0.241l0.605,0.155l0.152,0.121L464.943,109l-0.304,0.166l-0.515-0.072l-0.94-0.246l-0.326,0.07l-0.209,0.152l-1.019-0.012l-0.357,0.384l-0.109,0.273l-0.833,0.316l-0.612,0.282l-0.222,0.258l-0.307,0.152l-0.268,0.293l-0.255,0.082l0.164-0.258l0.019-0.141l-0.062-0.176l0.584-0.293l0.22-0.141l-0.226-0.191l-0.082,0.015l-0.653-0.056l-0.229-0.148l0.326-0.546l0.387-0.558l0.678-0.631l-0.127-0.227l-0.427-0.197l-0.105,0l0.498-0.445l0.629-0.374l0.497-0.045l0.527,0.111l1.333,0.005z"/>
+ <path id="AZ" country:name="Azerbaijan" country:shortname="Azerbaijan" d="M509.077,114.955l-0.72-0.317l-0.268,0.016l-0.356-0.433l-0.374-0.105l-0.13-0.363l0.532-0.27l0.095-0.222l-0.43-0.176l-0.027-0.188l0.63-0.129l0.094-0.155l-0.061-0.113l-0.487-0.21l-0.351-0.281l-0.306-0.166l-0.456,0.234l-1.058,0.492l-0.374,0.445l-0.642,0.188l-0.254,0.255l-0.014-0.027l0.094-0.118l-0.094-0.213l-0.189-0.071l0.26-0.095l0.166-0.047l-0.261-0.189l-0.236-0.236l0.236-0.118l0.095-0.189l-0.283-0.047l-0.354-0.024l-0.284-0.118l-0.213-0.212l-0.236-0.024l-0.26-0.354l-0.283-0.142l-0.048-0.094h0.166h0.378l0.165-0.236v-0.236l-0.213-0.024l-0.188-0.142l-0.544-0.331l-0.283-0.354l0.047-0.284l0.402-0.142l-0.119-0.236l-0.212-0.166l-0.426-0.071l-0.284-0.095l0.071-0.094l0.071-0.118l-0.284-0.095l-0.087-0.212l0.418-0.308h0.236l0.473,0.024l0.331,0.189l0.189,0.213l0.638,0.189l0.284-0.047l0.188,0.023l0.143,0.071l0.26,0.189l0.236-0.047l0.236-0.095l0.095-0.331l-0.118-0.213l-0.614-0.166l-0.213-0.307l-0.143-0.26l0.095-0.071l0.143-0.142l0.268-0.189l0.229-0.023l0.023,0.166l0.213-0.047h0.189l0.142,0.189l0.473,0.284l0.095,0.118h0.118l0.283,0.284v0.308l0.591,0.094l0.449,0.142l0.379-0.047l0.165-0.213l0.308-0.331l0.283-0.094l0.496-0.284l0.292-0.449l0.465,0.331l0.236,0.378l0.26,0.189l0.284,0.307l0.095,0.52l0.142,0.236l0.283,0.26l0.284,0.165v0.166l0.449,0.236l0.473-0.047l0.378,0.071l0.284,0.166l0.236,0.189l0.095,0.189v0.142l-0.355-0.142l-0.401-0.047h-0.213l-0.26,0.047l-0.142,0.118l-0.402,0.071l-0.213,0.142l-0.047,0.189l-0.023,0.473l-0.118,0.26l-0.095,0.236l-0.095,0.378l0.213,0.236l-0.023,0.189l-0.237-0.071l-0.094,0.095l-0.071,0.331l-0.071,0.26l-0.118-0.047l-0.094-0.236l-0.143-0.095l-0.165,0.095l-0.047,0.307l0.07,0.166l-0.118,0.118l-0.118,0.095l0.095,0.26l-0.363,0.91z M499.844,111.738l0.709,0.061l0.142-0.047l0.26-0.071l0.236,0.236l0.071,0.166l0.378,0.142l0.213,0.071l0.308-0.118h0.52l-0.071,0.213l0.024,0.236l0.118,0.023l0.331,0.166l-0.071,0.236l0.421,0.763l-0.009,0.001l-0.253-0.133l-0.416,0.038l-0.512-0.025l-0.421-0.125l-0.335-0.211l-0.294-0.402l-0.551-0.223l-0.281-0.417l-0.265-0.381l-0.252-0.197z"/>
+ <path id="GR" country:name="Greece" d="M455.452,122.442l0.049-0.209l-0.057-0.128l-0.812-0.256l-0.691-0.006l-0.506-0.116l-0.484,0.017l-0.121-0.046l-0.103-0.093l0.139-0.56l0.315-0.005l-0.005-0.088l-0.009-0.122l0.069-0.07l0.083,0.157l0.021,0.146l0.303,0.021l0.172,0.055l0.184-0.076l-0.014-0.082l0.108-0.029l0.157,0.105l-0.037,0.093l-0.099,0.006l-0.04,0.053l0.088,0.023l0.144,0.035l0.094,0.046l0.021,0.128l0.353,0.041l0.846-0.122l0.509,0.016l0.035,0.13l0.192,0.035l0.608,0.064l0.307,0.051l0.358-0.121l0.09,0.05l-0.101,0.312l0.163,0.11h0.105l0.325-0.169l0.286-0.058l0.078,0.052l0.154-0.07l0.232-0.146l-0.083,0.187l0.015,0.186l-0.183,0.268l-0.582-0.046l-0.349,0.081l-0.335-0.017l-1.994,0.169z M445.294,112.196l0.583-0.884l0.496-0.472l0.402-0.386l0.449-0.842l0.09-0.029l0.809-0.076l0.606-0.146l0.395-0.429l0.365-0.159l0.361,0.041l0.622,0.054l0.532-0.245l0.507-0.16l0.09-0.029l1.855-0.195l0.799-0.261l0.584-0.06l1.473,0.505l0.619,0.21l0.388-0.031l1.117-0.277l0.086-0.257l-0.097-0.327l0.344-0.216l0.363,0.026l0.105,0l0.427,0.197l0.127,0.227l-0.678,0.631l-0.387,0.558l-0.326,0.546l-0.062-0.407l-0.794-0.056l-0.743-0.041l-0.566-0.125l-0.062-0.144l-0.459,0.186l-0.248,0.123l-0.403,0.012l-0.031-0.247l-0.335,0.029l-0.301,0.314l-0.431,0.186l-0.31,0.03l-0.306-0.159l-0.252,0.07l-0.004,0.133l0.169,0.185l0.169,0.34l0.308,0.059l0.826,0.609l-0.166,0.07l-0.369-0.258l-0.015-0.105l-0.276-0.082l-0.331-0.105l-0.116,0.099l-0.211,0.007l0.069,0.129l-0.016,0.129l0.338,0.164l0.145-0.012l0.114,0.234l-0.03,0.129l-0.245,0.023l-0.445-0.457l-0.341-0.141l-0.207-0.059l-0.128-0.012l0.003,0.094l-0.075,0.035l0.138,0.164l0.102,0.105l0.154,0.141l0.193,0.059l0.153,0.035l0.103,0.094l-0.093,0.058l-0.494-0.046l-0.253-0.035l0.035-0.176l-0.137-0.293l-0.164-0.188l-0.401-0.108l-0.472-0.373l0.258-0.118l0.025-0.136l-0.053-0.122l-0.182-0.035l-0.153,0.199l-0.465,0.176l0.245,0.224l-0.25,0.371l-0.05,0.249l0.13,0.121l0.065,0.172l0.311,0.338l0.133,0.036l0.131,0.479l0.579,0.421l0.359,0.467l-0.172,0.14l-0.237,0.082l0.106-0.187l-0.121-0.187l-0.142-0.128l-0.139-0.035l-0.151-0.047l-0.29,0.175l0.102,0.188l0.153,0.081l0.08,0.316l-0.193,0.187l-0.652,0.141l0.248,0.046l0.27,0.14l0.391,0.058l0.188,0.222l0.257-0.012l0.155,0.012l0.048,0.126l0.367,0.269l0.306,0.014l0.138,0.292l0.282,0.012h0.27l0.348,0.303l0.015,0.128l-0.193,0.082l0.238,0.782l-0.153,0.175h-0.185l-0.226-0.385l-0.222-0.047l-0.207-0.278l-0.101-0.142h-0.17l-0.496,0.14l-0.479,0.105l-0.184,0.128l0.315,0.093l0.013,0.188l0.007,0.291l0.229,0.117l0.153-0.026l0.225-0.079l-0.021,0.198l0.235,0.175l-0.519,0.093l0.002,0.117l-0.169,0.062l-0.309-0.086l0.121-0.21l-0.186-0.086l-0.508-0.056l-0.158-0.092l-0.008,0.206l0.194,0.453l0.193,0.17l-0.045,0.163l0.209,0.204l0.213,0.96l-0.688-0.31l-0.331,0.071l-0.298,0.439l-0.442-0.735l-0.46-0.367l-0.452,0.44l-0.428-0.353l-0.127-0.297l0.212-0.425l-0.028-0.241l-0.215-0.269l-0.491-0.424l-0.167-0.226l0.017-0.17l0.471-0.61l0.609,0.098l0.425-0.298l0.202,0.042l1.668,0.663l0.337-0.1l0.483-0.355l-0.266-0.049l-0.27-0.056l-1.204-0.493l-1.127-0.083l-0.367,0.058l-0.66,0.058l-0.427,0.143l-0.89-1.118l0.269-0.1l0.253,0.056l0.218-0.114l0.122-0.185l-0.339-0.24l-0.235,0.114l-0.496-0.042l-1.035-0.721l-0.199-0.325z"/>
+ <path id="AM" country:name="Armenia" country:shortname="Armenia" d="M504.136,113.458l-0.327,0.328l-0.377,0.03l-0.421-0.763l0.071-0.236l-0.331-0.166l-0.118-0.023l-0.024-0.236l0.071-0.213h-0.52l-0.308,0.118l-0.213-0.071l-0.378-0.142l-0.071-0.166l-0.236-0.236l-0.26,0.071l-0.142,0.047l-0.709-0.061l-0.492-0.451l-1.413-0.12l-0.284-0.211l-0.033-0.412l0.421-0.813l-0.026-0.199l-0.795-0.722l0.377-0.108l0.307,0.024l0.308-0.095l0.426-0.023l0.401-0.118l0.592,0.047l0.591-0.095l0.378-0.047l0.291-0.094l0.087,0.212l0.284,0.095l-0.071,0.118l-0.071,0.094l0.284,0.095l0.426,0.071l0.212,0.166l0.119,0.236l-0.402,0.142l-0.047,0.284l0.283,0.354l0.544,0.331l0.188,0.142l0.213,0.024v0.236l-0.165,0.236h-0.378h-0.166l0.048,0.094l0.283,0.142l0.26,0.354l0.236,0.024l0.213,0.212l0.284,0.118l0.354,0.024l0.283,0.047l-0.095,0.189l-0.236,0.118l0.236,0.236l0.261,0.189l-0.166,0.047l-0.26,0.095l0.189,0.071l0.094,0.213l-0.094,0.118l0.014,0.027z"/>
+ <path id="TJ" country:name="Tajikistan" country:shortname="Tajikistan" d="M566.651,117.4l-0.565-0.153l-0.496-0.054l-0.264-0.151l-0.564,0.227l-0.974,0.147l-0.137-0.059l0.129-0.176l-0.198-0.077l-0.678,0.03l-0.739,0.315l-0.592,0.486l-0.589,0.064l-0.745,0.495l-0.351,0.03l-0.368-0.026l-0.128-0.084l-0.164-0.409l-0.199-0.521l0.185-0.444l0.099-0.775l0.029-0.255l-0.17-0.187l-0.484,0.093l0.156-0.597l-0.576-0.45l-0.153-0.056l-0.384,0.016l-0.286,0.162l-0.134,0.363l-0.435,0.428l-0.049,0.425l0.006,0.255l-0.208,0.228l-0.442,0.158l-0.133-0.013l-0.587-0.152l-0.292,0.058l-0.073,0.185l0.007,0.311l-0.3,0.313l-0.21,0.128l-0.381,0.016l-0.63-0.237l-0.325,0.001l-0.581,0.286l-0.58,0.343l-0.485,0.144l-0.245-0.041l-0.129-0.141l-0.04-0.055l0.375-0.843l-0.063-0.377l0.377-0.377l0.283-0.503l0.503-0.346l0.157-0.22l-0.126-0.283l-0.471-0.314l-0.126-0.409l0.031-0.472l0.126-0.22l-0.126-0.22h-0.346l-0.44-0.032l-0.157-0.157l-0.346-0.188l-0.251-0.283l0.125-0.471l0.472-0.283l0.629,0.126l1.069,0.094l0.282-0.188l0.063-0.409l0.251-0.157h0.188l0.032-0.346l0.188-0.063l0.251-0.063l-0.126-0.094l-0.534,0.031l-0.251-0.125l0.503-0.094l0.565-0.095l0.472,0.095l0.062-0.126l0.032-0.346l-0.189-0.314l0.283-0.314l-0.031-0.22h0.346l0.22,0.157l0.252,0.22l0.22-0.157l0.692-0.188l0.471-0.346l0.221-0.251l0.439,0.377l0.252,0.251l-0.188,0.22l-0.409,0.346l-0.251,0.126l0.126,0.188l0.251,0.063l0.188,0.283l0.409-0.031l0.345,0.005l-0.302,0.147l-0.441,0.196l-0.024,0.246h-0.196l-0.099-0.172l-0.516-0.196l-0.515-0.147l-0.981,0.196h-0.123l-0.098,0.27l0.049,0.196l-0.196,0.074l-0.098-0.221l-0.196,0.196l-0.099,0.245l0.099,0.27l0.049,0.147l0.122,0.098l0.589-0.024h0.564l0.688-0.024l0.196,0.073l0.49-0.147l0.368,0.098l0.147,0.123l0.073,0.196l0.393,0.074l0.295-0.049l-0.024-0.221l0.343-0.049l0.442-0.123l0.221,0.024l0.049,0.147l0.319,0.123l0.122-0.024l0.049,0.172l0.074,0.221l0.318-0.172l0.368-0.024l0.172,0.319h0.196l0.172-0.147l0.834-0.221l0.663,0.073h0.539l0.344-0.171l0.344-0.098l0.196,0.073l-0.011,0.069l0.023,1.031l-0.207,0.223l0.077,0.305l0.325,0.394l0.463-0.045l0.229-0.162l0.22,0.06l0.692,0.039l0.273,0.154l0.295,0.494l-0.009,0.284l0.028,0.246l0.152,0.012l0.049,0.123l-0.126,0.428l0.245,0.237l-0.152,0.36l0.2,0.163l-0.181,0.185l-0.08,0.249l-0.354,0.136z"/>
+ <path id="IR" country:name="Iran" d="M500.121,117.572l-0.023-0.308l-0.275-0.035l-0.42-0.374l-0.099-0.421l0.145-0.245l-0.424-0.111l-0.213-0.14l0.06-0.128l0.287-0.535l0.229-0.281l-0.039-0.207l-0.288-0.203l-0.106,0.105l-0.09-0.117l-0.224-0.492l0.122-0.375l-0.264-0.67l0.039-0.27l0.584-0.267l0.009-0.433l0.231-0.141l0.409,0.023l0.072-0.211l0.252,0.197l0.265,0.381l0.281,0.417l0.551,0.223l0.294,0.402l0.335,0.211l0.421,0.125l0.512,0.025l0.416-0.038l0.253,0.133l0.009-0.001l0.377-0.03l0.327-0.328l0.254-0.255l0.642-0.188l0.374-0.445l1.058-0.492l0.456-0.234l0.306,0.166l0.351,0.281l0.487,0.21l0.061,0.113l-0.094,0.155l-0.63,0.129l0.027,0.188l0.43,0.176l-0.095,0.222l-0.532,0.27l0.13,0.363l0.374,0.105l0.356,0.433l0.268-0.016l0.72,0.317l0.015,0.007l-0.05,0.707l-0.143,0.581l0.205,0.48l0.494,0.252l0.925,0.235l0.827,0.052l0.424,0.097l0.162,0.282l0.312,0.451l0.687,0.463l1.902,0.513l0.841,0.052l0.438-0.059l1.354-0.262l1.192-0.148l1.469-0.079l0.41-0.229l0.185-0.354l-0.131-0.905l0.015,0l0.441,0.025l0.562-0.13l0.466-0.3l0.621-0.654l0.476-0.328l0.413-0.144l0.609-0.032l0.78,0.038l0.333-0.03l0.517-0.343l0.343-0.129l0.519,0.054l1.055,0.107l0.402,0.437l0.708,0.251l0.822,0.335l0.788,0.066l0.5,0.054l0.66,0.167l0.597,0.336l1.803,1.362l0.655,0.506l0.696,0.01l0.787-0.075l0.185,0.211l0.038,0.848l0.01,0.565l0.15,0.692l0.078,0.028l-0.145,0.241l-0.084,0.339l-0.246,0.807l-0.49,1.272l-0.222,0.297l-0.596,0.384l-0.016,0.141l0.119,0.663l0.096,0.098l0.738,0.235l0.026,0.183l-0.661,0.935l-0.034,0.155l0.254,1.085l0.167,1.283l0.143,0.775l0.191,0.21l0.209,0.041l1.198,0.275l0.401,0.167l0.144,0.366l0.046,0.437l-0.425,0.553l-0.853,0.795l-0.853,1.034l0.802,1.083l0.71,1.068l0.353,0.464l0.695,0.391l1.144,0.388l0.409,0.224l0.168,0.38l0.111,1.34l0.185,0.394l0.652,0.053l0.186,0.281l-0.036,0.974l-0.188,0.255l-0.209,0.072l-1,0.077l-0.697,0.258l-0.794,0.47l-0.285,0.383l-0.31,0.792l-0.049,0.354l-0.182,0.954l-0.502,0.028l-1.079-0.153l-0.236-0.197l-0.605-0.253l-0.403-0.056l-1.43,0.003l-0.783-0.041l-0.602,0.072l-0.475-0.38l-0.163-0.126l-0.835-0.026l-0.576,0.001l-0.465,0.014l-0.212-0.239l-0.756-0.125l-0.305-0.183l-0.162-0.014l-0.021-0.5l-0.295-0.128l-0.103-0.514l-0.292-0.349l-0.013-0.639l-0.309-0.493l-0.237,0.012l-0.035-0.181l-0.526-0.126l-0.807-0.013l-0.374,0.017l-0.209,0.222l-0.329,0.018l-0.517,0.075l-0.188,0.364l-0.538,0.138l-0.383,0.443l-0.368,0.283l-0.253,0.043l-1.292-0.689l-0.958-0.104l-0.562-0.359l-1.088-0.317l-0.247-0.301l-0.324-0.282l-0.497-0.592l-0.997-0.436l-0.584-0.083l-0.194-0.028l-0.58-0.465l-0.596-1.058l-0.635-1.114l-0.209-0.268l0.005-0.593l-0.767-0.761l-0.506-0.719l-0.921,0.143l-0.46-0.042l-0.13-0.126l-0.291-0.056l-0.191-0.268l-0.029-0.565l-0.448,0.1l-0.166,0.099l-0.32,0.678l-0.195,0.184l-0.355,0.012l-0.014-0.12l-0.351-0.224l-0.686-0.546l0.064-0.212l-0.007-0.395l-0.164-0.465l-0.215-0.013l-0.551,0.003l-0.034-0.325l0.055-0.579l0.197-0.622l0.014-0.508l-0.112-0.239l-0.29-0.28l-0.774-0.603l-0.436-0.209l-1.242-0.925l-0.533-0.025l-0.321,0.115L503,127.106l0.033-0.819l-1.02-0.954l-0.312-0.351l-0.002-0.184l0.133-0.875l0.235-0.763l1.142-0.98l-0.422-0.761l0.013-0.254l0.468-0.596l-1.067-0.107l-0.761-0.208l-0.065-0.198l-0.563-1.086l-0.69-1.397z"/>
+ <path id="AF" country:name="Afghanistan" d="M535.734,133.791l0.853-1.034l0.853-0.795l0.425-0.553l-0.046-0.437l-0.144-0.366l-0.401-0.167l-1.198-0.275l-0.209-0.041l-0.191-0.21l-0.143-0.775l-0.167-1.283l-0.254-1.085l0.034-0.155l0.661-0.935l-0.026-0.183l-0.738-0.235l-0.096-0.098l-0.119-0.663l0.016-0.141l0.596-0.384l0.222-0.297l0.49-1.272l0.246-0.807l0.084-0.339l0.145-0.241l0.193,0.112l0.937,0.193l0.999,0.348l0.573,0.082l0.534-0.031l0.636-0.3l0.22-0.199l0.001-0.466l0.119-0.199l0.568-0.159l1.985-0.689l0.508-0.243l0.103-0.128l0.203-0.991l0.432-0.809l1.135-0.205l0.417-0.2l0.445-0.356l0.565,0.294l1.454,0.244l0.096,0.016l0.646,0.011l1.217,0.05l0.236,0.126l0.351,0.48l0.04,0.055l0.129,0.141l0.245,0.041l0.485-0.144l0.58-0.343l0.581-0.286l0.325-0.001l0.63,0.237l0.381-0.016l0.21-0.128l0.3-0.313l-0.007-0.311l0.073-0.185l0.292-0.058l0.587,0.152l0.133,0.013l0.442-0.158l0.208-0.228l-0.006-0.255l0.049-0.425l0.435-0.428l0.134-0.363l0.286-0.162l0.384-0.016l0.153,0.056l0.576,0.45l-0.156,0.597l0.484-0.093l0.17,0.187l-0.029,0.255l-0.099,0.775l-0.185,0.444l0.199,0.521l0.164,0.409l0.128,0.084l0.368,0.026l0.351-0.03l0.745-0.495l0.589-0.064l0.592-0.486l0.739-0.315l0.678-0.03l0.198,0.077l-0.129,0.176l0.137,0.059l0.974-0.147l0.564-0.227l0.264,0.151l0.496,0.054l0.565,0.153l-0.192,0.145l-0.574-0.059l0.01,0.269l0.236,0.012l0.048,0.088l-0.148,0.142l-0.358,0.004l-0.455,0.297l-0.332-0.005l-0.338,0.179l-0.647-0.144l-1.345,0.012l-1.148,0.152l-0.53,0.292l-0.272,0.19l-0.559,0.395l-0.246-0.023l-0.258,0.214l-0.464,0.413l0.01,0.32l0.411,0.271l0.01,0.336l0.232,0.171l-0.119,0.483l0.198,0.477l-0.324,0.426l-0.524,0.355l-0.4,0.341l-0.13,0.283l0.223,0.478l0.033,0.31l-0.289,0.255l-0.513,0.215l-0.698-0.039l-0.997-0.122l-0.355,0.129l0.35,0.336l0.365,0.407l0.129,0.281l0.088,0.437l-0.199,0.255l-0.315,0.115l-0.513,0.031l-0.416,0.115l-0.292,0.228l-0.224,0.424l-0.288,0.834l-0.139,1.214l-0.021,0.084l-0.34,0.383l-0.237,0.086l-1.001-0.375l-0.562-0.025l-0.559,0.243l-0.362,0.271l-0.321,0.693l-0.254,0.086l-0.516-0.082l-0.644-0.039l-0.283,0.072l-0.597,0.441l-0.412,0.369l-0.188,0.34l-0.232,0.876l-0.099,0.903l-0.069,0.184l-0.247,0.156l-1.066,0.274l-1.183,0.19l-0.964,0.175l-1.234,0.12l-1.005-0.135l-0.349,0.002l-1.187,0.218l-0.742-0.024l-0.541-0.039l-0.854-0.235l-1.069-0.248l-0.63-0.194l-0.887-0.32z"/>
+ <path id="IQ" country:name="Iraq" d="M486.696,126.295l5.257-2.711l0.589-2.701l-0.024-0.467l-0.187-0.508l0.009-0.255l0.23-0.355l0.31-0.214l0.866-0.174l0.457-0.371l0.944-0.883l-0.059-0.24l0.23-0.043l0.266-0.143l0.437-0.094l0.304,0.16l0.364-0.032l0.811,0.153l0.343,0.023l0.244-0.234l0.366,0.082l0.274,0.151l-0.03,0.259l0.102,0.269l0.318,0.105l0.164-0.126l0.433-0.388l0.407,0.016l0.69,1.397l0.563,1.086l0.065,0.198l0.761,0.208l1.067,0.107l-0.468,0.596l-0.013,0.254l0.422,0.761l-1.142,0.98l-0.235,0.763l-0.133,0.875l0.002,0.184l0.312,0.351l1.02,0.954L503,127.106l0.075,0.155l0.321-0.115l0.533,0.025l1.242,0.925l0.436,0.209l0.774,0.603l0.29,0.28l0.112,0.239l-0.014,0.508l-0.197,0.622l-0.055,0.579l0.034,0.325l0.551-0.003l0.215,0.013l0.164,0.465l0.007,0.395l-0.064,0.212l0.686,0.546l0.351,0.224l0.014,0.12l-0.096,0.003l-0.664,0.101l-0.408-0.056l-0.157,0.057l-0.103,0.127l-1.271,0.044l-0.518,0.13l-0.343,0.693l-0.463,0.609l-0.521,0.568l-4.048-0.132l-1.557-0.697l-0.812-0.277l-0.118-0.253l-0.047-0.818l0.118-0.396l-0.135-0.366l-0.973,0.048l-0.141-0.07l-0.399-0.633l-0.258-0.196l-2.44-1.101l-1.14-0.473l-2.034-0.934l-0.757-0.222l-1.129-0.459l-0.093-0.056l-0.093-0.056l-0.311-0.69l-0.87-1.632z"/>
+ <path id="SY" country:name="Syria" d="M479.916,127.377l-0.082-0.085l0.047-0.122l-0.021-0.183l-0.201-0.128l-0.183-0.346l0.398-0.209l0.041-0.099l0.526-0.396l-0.048-0.058l-0.223-0.099l0.077-0.151l0.298-0.25l0.599-0.006l-0.14-0.146l-0.035-0.046l0.078-0.111l0.177-0.163l0.169-0.116l0.299-0.239l-0.068-0.058l0.023-0.163l-0.09-0.047l-0.031-0.221l-0.241-0.157l-0.222-0.058l0.204-0.204l-0.125-0.052l-0.053-0.116l-0.12,0.058l-0.335,0.052l-0.388-0.023l-0.225-0.564l0.129-0.593l0.072-0.064l-0.1-0.507l-0.42-0.326l0.126-0.093l0.036-0.152l0.117-0.128l-0.093-0.222l0.107-0.012l0.259-0.32l-0.061-0.112l0.311-0.001l0.39,0.125l0.114-0.127l0.171,0.041l0.2-0.169l0.156-0.374l0.627-0.127l-0.243-0.423l-0.102-0.452l0.055-0.319l0.142,0.035l0.222-0.001l0.777,0.166l0.575,0.025l0.746-0.075l0.929-0.373l0.278-0.03l1.532,0.444l0.556,0.153l1.104-0.176l0.567-0.13l1.498-0.673l0.439-0.073l0.747,0.123l0.711,0.039l1.185-0.224l0.693-0.304l0.24-0.292l0.207,0.023l0.064,0.245l0.059,0.24l-0.944,0.883l-0.457,0.371l-0.866,0.174l-0.31,0.214l-0.23,0.355l-0.009,0.255l0.187,0.508l0.024,0.467l-0.589,2.701l-5.257,2.711l-0.161,0.071l-2.96,1.541l-1.139,0.656l-0.253,0.016l-0.365-0.167l-1.902-1.034z"/>
+ <path id="TN" country:name="Tunisia" d="M426.068,126.434l-0.093,0.981l0.064,0.564l-0.093,0.269l-0.802,0.428l-0.579,0.314l-1.473,1.138l-0.126,0.354l0.274,0.973l-0.147,0.537l-0.155,0.227l-0.864,0.598l-0.22,0.143l-0.564-1.536l-0.699-2.242l-0.323-0.464l-0.363-0.252l-0.432-0.181l-0.484-0.831l-0.225-0.465l-0.363-0.28l-0.452-0.097l-0.336-0.774l-0.301-0.888l0.112-0.509l1-0.853l0.414-0.355l0.163-0.411l0.048-0.537l-0.052-0.594l-0.026-0.892l-0.012-1.429l0.114-0.439l0.685-0.627l0.012-0.184l0.508-0.185l0.633-0.455l0.591-0.228l0.703-0.016l0.643,0.183l0.247,0.212l0.059,0.241l0.25,0.538l0.27,0.084l0.417-0.171l0.584-0.44l0.401-0.17l0.034,0.354l-0.265,0.567l-0.638,0.511l-0.275,0.468l0.005,0.283l0.202,0.438l0.508,0.466l0.351,0.127l0.303,0.848l-0.094,0.212l-0.541,0.764l-0.59,0.34l-1.017,0.92l-0.216,0.339l0.287,0.451l0.587,0.55l0.528,0.295l0.284,0.056l0.396-0.227l0.316,0.084l0.244,0.635l0.582,0.239z"/>
+ <path id="DZ" country:name="Algeria" d="M381.402,139.704l-0.027-0.876l0.069-2.006l0.037-0.382l0.686-0.314l1.512-0.998l0.963-0.542l1.265,0.078l0.397-0.059l0.181-0.693l0.864-0.033l0.777-0.174l0.527-0.229l0.524-0.356l0.484-0.652l1.109-0.332l1.52-0.701l0.129-0.227l-0.296-0.62l-0.025-0.396l0.079-0.227l0.265-0.114l1.186-0.12l0.381-0.186l0.309-0.553l1.022,0.022l0.67-0.018l1.826,0.004l0.34-1.033l-0.07-0.211l-0.507-0.322L397,126.646l-0.158-0.465l0.016-1.271l0.022-0.833l-0.165-0.889l-0.189-0.211l-0.563-0.279l-0.259-0.508l0.351,0l0.66-0.143l0.541-0.256l0.369-0.566l0.405-0.312l0.509-0.086l0.407-0.157l0.679-0.27l0.324,0.226l0.176,0.017l0.249,0.024l0.238-0.142l0.407-0.51l0.613-0.426l0.682-0.355l0.614-0.171l1.16-0.116l1.587-0.06l0.513-0.072l0.634-0.312l0.578,0.211l0.564-0.072l0.585-0.313l0.343-0.1l0.939,0.012l0.513-0.015l0.307,0.056l0.221,0.042l0.322,0.113l0.816,0.168l0.529-0.015l0.772-0.171l0.705-0.2l0.612-0.554l0.994,0.508l0.339,0.099l0.312-0.143l0.314-0.241l0.228-0.156l0.528,0.042l0.388,0.197l0.162,0.269l0.269,0.126l0.516-0.086l1.093-0.158l-0.012,0.184l-0.685,0.627l-0.114,0.439l0.012,1.429l0.026,0.892l0.052,0.594l-0.048,0.537l-0.163,0.411l-0.414,0.355l-1,0.853l-0.112,0.509l0.301,0.888l0.336,0.774l0.452,0.097l0.363,0.28l0.225,0.465l0.484,0.831l0.432,0.181l0.363,0.252l0.323,0.464l0.699,2.242l0.564,1.536l-0.204,0.156l-0.241,0.383l0.88,1.605l0.147,0.833l0.052,0.691l-0.1,0.862l0.101,0.748l-0.16,0.622l-0.158,0.495l0.457,1.156l-0.061,0.664l-0.086,0.17l-0.666,0.47l-0.249,0.128l-0.152,0.283l1.272,1.702l0.249,0.917l0.562,0.873l0.244,0.154l0.544-0.201l0.702,0.165l1.028,0.347l0.178,0.168l0.86,1.506l0.098,0.07l-0.265,0.186l-1.632,0.843l-4.012,2.241l-1.607,0.956l-2.308,1.454l-0.834,0.655l-3.084,2.617l-1.82,0.364l-1.672,0.321l-2.176,0.408l-0.146-0.564l0.161-0.679l-0.099-0.522l-0.277-0.352l-0.309-0.111l-0.748-0.024l-0.375-0.167l-0.588-0.562l-0.47,0.314l-0.229-0.027l-1.111-1.039l-0.393-0.28l-0.082-0.183l0.096-0.396l-0.181-0.253l-2.472-1.469l-0.397-0.253l-1.292-0.824l-1.924-1.26l-3.283-2.241l-0.811-0.575l-2.054-1.344l-0.895-0.531l-0.1-0.084l-1.414-0.91l-4.12-2.42l-2.829-1.509z"/>
+ <path id="MA" country:name="Morocco" d="M395.704,122.189l0.259,0.508l0.563,0.279l0.189,0.211l0.165,0.889l-0.022,0.833l-0.016,1.271l0.158,0.465l0.598,0.788l0.507,0.322l0.07,0.211l-0.34,1.033l-1.826-0.004l-0.67,0.018l-1.022-0.022l-0.309,0.553l-0.381,0.186l-1.186,0.12l-0.265,0.114l-0.079,0.227l0.025,0.396l0.296,0.62l-0.129,0.227l-1.52,0.701l-1.109,0.332l-0.484,0.652l-0.524,0.356l-0.527,0.229l-0.777,0.174l-0.864,0.033l-0.181,0.693l-0.397,0.059l-1.265-0.078l-0.963,0.542l-1.512,0.998l-0.686,0.314l-0.037,0.382l-0.069,2.006l-1.42,0.008l-1.718-0.004l-2.677,0.001l-2.511,0l-1.635,0.04l0.141-0.28l0.431-0.411l0.427-0.085l1.296-0.285l1.143-0.455l0.453-0.312l1.147-0.85l1.149-0.878l1.043-1.104l0.46-0.693l0.133-0.509l-0.05-0.494l-0.427-0.776l-0.09-0.678l0.099-0.508l0.396-0.636l0.706-0.863l0.211-0.65l-0.063-0.367l0.071-0.353l1.285-1.203l0.724-0.481l0.916-0.327l1.266-0.469l0.73-0.397l0.558-0.552l0.537-0.736l0.466-0.905l0.829-1.925l0.269-0.128l0.54-0.171l0.19,0.127l0.684,0.848l0.138,0.099l1.148,0.507l0.661-0.001l0.595,0.042l1.304-0.074l0.522-0.228l0.437-0.27l0.398,0.551l0.256,0.099l0.798,0.097l0.361,0z"/>
+ <path id="LB" country:name="Lebanon" d="M480.248,123.437l0.388,0.023l0.335-0.052l0.12-0.058l0.053,0.116l0.125,0.052l-0.204,0.204l0.222,0.058l0.241,0.157l0.031,0.221l0.09,0.047l-0.023,0.163l0.068,0.058l-0.299,0.239l-0.169,0.116l-0.177,0.163l-0.078,0.111l0.035,0.046l0.14,0.146l-0.599,0.006l-0.298,0.25l-0.077,0.151l0.223,0.099l0.048,0.058l-0.526,0.396l-0.041,0.099l-0.398,0.209l-0.07-0.023l-0.088,0.041l-0.067,0.193l-0.009,0.167l-0.355,0.07l-0.07-0.099l-0.151-0.022l-0.372,0.051l0.26-0.291l0.097-0.361l0.169-0.227l0.328-0.681l-0.017-0.232h0.181l0.138-0.192l0.072-0.32l0.018-0.32l0.409-0.431l0.232-0.07l0.116-0.174l-0.048-0.157z"/>
+ <path id="MX" country:name="Mexico" d="M184.444,142.729l-0.367,0.82l-0.518,0.821l-0.186,0.763l-0.179,1.159l0.017,1.851l-0.133,1.187l-0.016,1.13l0.564,1.737l0.275,0.805l0.624,0.945l0.76,0.903l0.191,0.452l0.481,0.521l0.529,0.974l0.729,1.228l0.375,0.296l0.677,0.069l0.436-0.015l0.577,0.154l0.593,0.451l0.503,0.508l0.773,0.069l1.016-0.242l1.55-0.456l1.396-0.3l0.803-0.157l-0.02,0.542l0.838,0.223l0.264-0.286l0.293-0.199l-0.104-0.247l-0.393-0.175l1.073-0.62l0.633-0.62l0.086-0.827l0.498-0.429l-0.094-0.477l0.092-1.145l0.254-0.699l0.625-0.334l0.164-0.043l0.757-0.198l0.701-0.1l1.088-0.229l1.016-0.37l0.594-0.058l0.499,0.056l1.139,0.181l0.502-0.194l0.378,0.093l0.62,0.507l0.047,0.297l-0.079,0.424l-0.298,0.382l-0.541,0.496l-0.433,0.425l-0.317,0.445l-0.02,0.7l-0.254,0.297l-0.188,0.354l0.155,0.155l0.337-0.138l-0.101,0.652l-0.262,1.196L205.356,159l-0.062,0.24l-0.34-0.534l-0.167-0.452l-0.072-0.155l-0.386,0.34l-0.02,0.549l-0.437,0.016l-0.178,0.447l-0.599,0.857l-0.386-0.27l-0.278,0.095l0.025,0.329l-2.332-0.006l-1.792-0.005l-0.04,1.24l-0.999,0.032l0.396,0.223l0.495,0.541l0.624,0.231l0.359,0.69l0.532,0.223l-0.211,0.683l-1.762-0.007l-1.06,0.007l-1.076,1.812l0.305,0.397l-0.207,0.238l0.054,0.553l0.044,0.454l-0.704-0.555l-0.952-0.888l-0.956-0.761l-1.069-0.859l-0.534-0.352l-0.053-0.071l-0.639-0.252l-1.048-0.21l-0.657,0.044l-0.817,0.397l-1.1,0.567l-0.756,0.256l-0.931-0.069l-0.724-0.21l-0.48-0.197l-1.305-0.195l-0.588-0.267l-0.644-0.422l-0.935-0.521l-0.785-0.267l-1.711-0.392l-0.963-0.365l-0.722-0.366l-1.074-0.436l-0.592-0.352l-1.123-1l-0.207-0.07l-0.606,0.058l-0.689-0.14l-1.835-0.575l-0.565-0.536l-0.503-0.634l-0.495-0.395l-1.049-0.577l-0.619-0.267l-0.5-0.494l-0.742-0.987l-0.363-0.55l-0.038-0.113l0.15-0.155l0.504-0.086l0.18-0.17l0.047-0.184l-0.331-0.367l0.457-0.679l0.041-0.381l-0.172-0.466l-0.744-0.959l0.121-0.297l0.146-0.17l-0.07-0.268l-0.665-0.62l-1.495-1.777l-0.546-0.493l-0.963-1.058l-0.474-0.522l-0.815-0.578l-0.322-0.197l-0.158-0.268l-0.058-0.48l-0.144-0.183l-0.329-0.197l-0.609-0.197l-0.408-0.31l-0.366-0.522l-0.271-0.028l-0.414,0.114l-0.238-0.155l-0.163-0.367l-0.005-0.325l0.459-0.736l-0.126-0.339l-0.751-0.62l-0.439,0.255l-0.375-0.621l-0.118-0.353l-0.359-0.211l-0.61-0.168l-0.319-0.296l-0.125-0.254l0.05-0.381l0.084-0.269l-0.185-0.226l-0.561-0.21l-0.46-0.098l-0.46-0.253l-0.935-0.86l-0.478-0.706l-0.281-0.551l-0.646-0.832l-0.736-1.073l-0.184-0.423l-0.38-0.678l-0.242-0.338l-0.152-0.452l0.042-0.509l0.032-0.311l-0.56-0.239l-0.795-0.196l-0.06-0.452l-0.128-0.155l-0.458-0.183l-0.289,0.326l-0.251,0.043l-1.43-0.647l-0.285,1.004l-0.045,0.438l0.033,0.084l0.265,0.339l0.264,0.296l0.028,1.046l0.088,0.509l0.51,0.677l0.143,0.169l0.643,0.267l0.601,0.536l0.525,0.663l0.602,1.214l0.44,0.282l0.328,0.042l0.237,0.169l0.325,1.398l0.102,0.169l0.246,0.155l0.497,0.056l0.133,0.056l0.215,0.438l0.161,0.65l0.445,0.79l0.49-0.071l0.223-0.142l0.245,0.452l0.344,1.469l0.531,1.059l0.649,1.2l0.069,0.593l-0.014,0.522l0.26,0.353l0.378,0.154l0.389-0.17l0.234-0.198l0.588,0.804l0.258,0.579l0.464,0.253l0.281,0.014l0.133,0.311l-0.196,0.537l-0.136,0.127l-0.691,0.595l-0.254-0.042l-0.251-0.409l-0.24-0.734l-0.617-0.578l-0.625-0.309l-0.516-0.479l-0.834-0.507l-1.143-0.986l-0.416-0.451l-0.162-0.269l0.216-0.989l-0.035-0.254l-0.488-1.002l-0.238-0.381l-0.327-0.282l-0.44-0.098l-0.5-0.31l-0.675-0.677l-0.305,0.142l-0.363-0.056l-1.262-0.746l-0.722-0.31l-0.896-0.973l-0.139-0.127l-0.246-0.254l0.679,0.15l0.599,0.013l0.588-0.284l0.244-0.326l0.093-0.636l-0.01-0.184l-0.458-0.635l-0.466-0.452l-1.1-0.888l-0.986-0.493l-0.402-0.338l-0.203-0.522l-0.272-0.649l-0.091-0.155l-0.447-0.126l-0.15-0.353l-0.026-0.594l-0.203-0.395l-0.623-0.734l-0.434-0.706l-0.003-0.254l0.212-0.382l-0.777-0.62l-0.254-0.325l-0.22-0.485l0.34-0.017l2.367-0.155l2.381-0.084l0.316,0.31l0.267,0.154l1.186,0.39l2.811,0.933l3.516,1.112l0.338,0.055l1.662,0.019l1.544,0.02l0.966,0.037l1.867-0.011l0.213-0.101l0.096-0.892l1.858,0.003l1.892,0.046l0.209,0.112l0.631,0.662l0.766,0.632l0.837,0.519l0.708,0.491l0.179,0.226l0.284,0.678l0.318,0.847l0.445,0.549l1.092,0.659l1.104,0.503l0.337,0.069l0.501,0.011l0.416-0.158l0.283-0.37l0.418-0.413l0.576-0.541l0.468-0.201l0.643-0.018l0.475,0.082l0.783,0.321l0.412,0.252l0.363,0.366l0.663,1.029l0.744,1.227l0.845,1.042l0.657,0.576l0.268,0.253l0.078,0.467l0.332,0.932l0.336,0.592l0.375,0.365l0.921,0.32l1.029,0.56l0.264,0.069l0.416-0.116l0.296-0.001l0.816,0.377l0.347,0.119z"/>
+ <path id="KW" country:name="Kuwait" d="M507.047,133.665l0.055,0.197l0.134,0.691l-0.336-0.028l-0.513,0.513l0.421,0.194l0.418-0.206l0.306,0.021l0.698,1.84l-0.644,0.044l-1.07-0.05l-0.185-0.239l-0.334-0.619l-0.408-0.054l-1.657-0.259l0.521-0.568l0.463-0.609l0.343-0.693l0.518-0.13l1.271-0.044z"/>
+ <path id="MM" country:name="Burma" d="M606.155,150.953l0.595,0.152l0.255,0.14l0.25-0.129l0.273-0.368l0.015-0.678l-0.152-0.93l0.228-0.185l0.401-0.144l0.191-0.354l-0.146-1.594l0.133-0.283l0.811,0.32l0.391,0.11l0.309,0.013l0.17-0.128l1.148-2.25v-0.324l-0.192-0.408l0.045-0.212l0.938-1.134l0.136-0.382l-0.057-0.761l0.197-0.354l1.446-0.883l0.719-0.512l0.312-0.129l0.558,0.082l0.853,0.221l0.295-0.058l-0.184-0.718l0.072-0.283l0.596-0.582l0.112-0.24l0.018-0.508l0.001-0.127l0.306-0.34l0.277-0.044l0.504,0.279l0.397,0.435l0.243,0.901l0.217,0.309l0.287,0.041l0.504-0.031l0.146,0.14l0.195,1.649l0.02,0.875l-0.353,0.862l-0.429,0.722l-0.611,0.525l-0.487,0.271l-0.191,0.198l-0.617,0.85l0.075,0.465l0.163,0.705l-0.224,0.58v0.268l0.216,0.069l0.312-0.086l0.819-0.442l0.771-0.089l0.479-0.017l0.156,0.126l0.277,1.762l0.202,0.324l0.554-0.074l0.521,0.096l0.033,0.268l-0.729,1.584l0.117,0.352l0.228,0.098l0.507-0.003l0.481-0.045l0.291,0.379l0.341,0.746l0.378,0.266l0.246,0.083l0.647-0.159l0.628-0.413l0.111,0.38l0.153,0.239l-0.502,0.355l-0.53,0.61l-0.442,0.581l-0.582,0.455l-0.193,0.185l-0.08,0.085l-0.158,0.071l-0.645,0.06l-0.436,0.172l-0.528,0.342l-0.394,0.595l-1.078,0.316l-0.62,0.018l-0.474-0.082l-0.362,0.411l-0.143,0.368l-0.036,0.819l-0.114,0.509l0.064,0.409l-0.086,0.24l-0.163,0.001l-0.588,0.131l0.739,0.884l0.069,0.183l0.112,0.875l0.254,0.14l1.091,0.953l0.148,0.324l0.646,1.041l0.163,0.338l-0.194,0.241l-0.451,0.229l-0.128,0.226l0.231,1.185l-0.171,0.198l-0.812,0.428l0.178,0.38l0.6,1.436l0.54,0.477l0.606,0.604l0.203,0.479l0.088,0.663l-0.086,0.636l0.006,0.254l0.488,1.183l0.586,1.225l-0.077,0.297l-1.011,1.559l-1.01,1.7l-0.098,0.374l-0.359-0.181l-0.075-0.805l0.461-0.665l0.174-0.495l0.122-0.777l0.287-0.466l-0.512-0.027l-0.104-0.084l-0.004-0.282l0.195-0.509l-0.177-1.524l-0.246-0.832l-0.639-1.185l-0.488-1.312l-0.347-0.846l-0.179-0.875l-0.174-1.736l-0.117-0.677l-0.034-0.564l-0.051-0.212l-0.344-0.084l-0.148-0.098l-0.304-0.917l-0.516-0.677l-0.226-0.225l-0.247,0.029l-0.081,0.988l-0.158,0.424l-0.43,0.41l-0.59,0.284l-1.089,0.511l-0.359,0.622l-0.298,0.297l-0.196,0.142l-0.237-0.282l-0.007-0.438l-0.212,0.015l-0.338,0.354l-0.321-0.013l-0.166-0.211l0.147-0.495l-0.001-0.113l-0.621,0.171l-0.276,0.127l-0.247,0.283l-0.355-0.126l-0.002-0.466l0.553-1.54l0.162-0.791l0.001-0.889l-0.101-1.059l-0.384-0.973l-0.431-1.072l-0.196-0.296l-0.281,0.537l-0.32-0.126l-0.526-0.366l0.482-0.17l0.312-0.015l-0.149-0.479l-0.054-0.268l-0.684-0.775l-0.182-0.183l-0.19-0.028l-0.407,0.1l-0.38-0.267l0.086-0.438l-0.026-0.141l-0.209-0.112l-0.365,0.043l-0.577-0.465l-0.504-0.606l-0.117-0.244l0.252-0.341l0.801-0.527l-0.194-1.607z"/>
+ <path id="BD" country:name="Bangladesh" d="M605.297,153.429l-0.126-0.264l-0.269-0.55l-0.223-1.213l-0.611-1.41l-0.357-0.395l-0.73,0.354l-0.393,0l-0.034-0.084l-0.242-0.211l-0.356-0.592l-0.124-0.042l-0.152,0.127l-0.026,0.537l0.374,0.79l-0.006,0.424l-0.143,0.169l-0.455,0.086l-0.235,0.537l-0.261,0.1l-0.255-0.437l-0.311-0.395l-0.073-0.057l-0.163,0.669l-0.28,0.249l-0.203,0.043l-0.271-0.536l-0.495,0.636l-0.359-0.265l-0.147-0.532l-0.402-1.775l-0.325-1.409l-0.352-0.45l-0.04-0.254l0.505-0.765l0.029-0.269l-0.193-0.21l-1.042-0.431l-0.339-0.323l0.548-0.61l0.4-0.299l0.502-0.13l0.382-0.101l0.047-0.155l-0.126-0.112l-1.224-0.938l-0.494-0.237l-0.083-0.155l0.124-0.283l0.555-0.525l0.234-0.171l1.252,0.303l0.339,0.266l0.372,0.266l0.489-0.06l0.417,0.054l0.129,0.324l0.053,0.479l0.079,0.719l0.095,0.099l0.537,0.109l0.547,0.053l0.916-0.062l0.559-0.003l2.473,0.198l0.111,0.098l0.057,0.127l-0.012,0.79l-0.159,0.34l-0.938,0.767l-0.498,0.13l-0.651,0.356l-0.131,0.283l0.009,0.522l0.001,0.381l0.23,0.281l0.249,0.267l0.529,0.448l0.224-0.354l0.395-1.159l0.281-0.115l0.4-0.044l0.064,0.578l0.627,2.479l0.037,0.466l0.194,1.607l-0.801,0.527l-0.252,0.341z"/>
+ <path id="TH" country:name="Thailand" d="M627.408,186.411l-0.086,0.337l-0.495,0.35l-0.11,0.575l-0.644,0.089l-0.05-0.478l-0.309-0.163l-0.279,0.28l-0.244,0.394l-0.204-0.083l-0.118-0.239l0.213-0.398l-0.041-0.21l-0.055-0.226l-0.261-0.238l-0.447-0.119l-0.106-0.466l-0.571,0.013l-0.448,0.17l0.013-0.104l0.128-0.297l-0.15-0.183l-0.411,0.212l-0.301-0.07l-0.38-0.38l-0.116-0.508l0.064-0.282l-0.151-0.438l-0.229-0.169l-0.388,0.043l-0.39-0.719l-0.209-0.508l-0.3-0.324l-0.311-0.155l-0.456-0.395l-0.343,0.1l-0.218,0.142l-0.216-0.381l-0.04-0.607l0.163-0.749l0.559-1.738l0.29-0.848l-0.087-0.044l0.098-0.374l1.01-1.7l1.011-1.559l0.077-0.297l-0.586-1.225l-0.488-1.183l-0.006-0.254l0.086-0.636l-0.088-0.663l-0.203-0.479l-0.606-0.604l-0.54-0.477l-0.6-1.436l-0.178-0.38l0.812-0.428l0.171-0.198l-0.231-1.185l0.128-0.226l0.451-0.229l0.194-0.241l-0.163-0.338l-0.646-1.041l-0.148-0.324l-1.091-0.953l-0.254-0.14l-0.112-0.875l-0.069-0.183l-0.739-0.884l0.588-0.131l0.163-0.001l0.086-0.24l-0.064-0.409l0.114-0.509l0.036-0.819l0.143-0.368l0.362-0.411l0.474,0.082l0.62-0.018l1.078-0.316l0.394-0.595l0.528-0.342l0.436-0.172l0.645-0.06l0.158-0.071l0.08-0.085l0.541,0.166l0.295,0.182l0.118,0.168l0.01,0.423l-0.106,0.805l0.066,0.367l0.186,0.154l0.423-0.003l0.489-0.2l0.414-0.045l0.045,0.113l0.249,1.311l-0.085,0.41l-0.528,1.569l-0.117,0.438l-0.027,0.494l0.145,0.324l0.481,0.138l0.37-0.411l1.173-1.178l0.346-0.03l0.835,0.348l0.59,0.265l0.223-0.072l0.543-0.257l0.2-0.538l0.286-0.453l0.403,0.012l0.893,0.192l0.266,0.153l0.052,0.282l0.285,0.535l0.688,0.659l0.435,0.632l0.058,1.524l0.107,0.366l0.255,0.464l0.979,1.279l0.419,0.703l0.157,0.507l0.002,0.945l-0.121,0.438l-0.808,0.64l-0.301-0.167l-0.599-0.109l-0.575-0.039l-0.558,0.074l-0.798-0.066l-1.172,0.091l-0.383,0.101l-0.521,0.441l-0.92,1.233l-0.146,0.297l-0.076,0.382l0.026,0.635l0.219,0.648l0.487,0.717l0.16,0.479l-0.146,0.176l-0.026-0.063l-0.286-0.183l-0.458-0.084l-0.9-0.887l-0.434-0.154l-0.304-0.014l-0.572,0.227l-0.391-0.112l-0.29-0.141l-0.337-0.014v-0.282l0.19-1.243l-0.107-0.184l-0.719-0.055l-0.248-0.084l-0.521,0.043l-0.443,0.212l-0.244,0.297l0.207,0.593l-0.103,0.339l-0.318,0.707l0.083,0.579l0.054,0.41l-0.293,0.664l-0.583,1.187l-0.7,1.682l-0.255,1.314l0.104,1.171l0.172,0.296l0.229,0.169l0.55-0.072l0.396-0.142l0.252,0.07l0.135,0.353l0.009,0.325l-0.08,0.466l0.141,0.282l0.178,0.211l0.271-0.094l0.17,0.46l0.209,0.974l-0.032,0.254l0.127,0.737l0.434,0.871l0.167,0.155l0.801,0.281l0.539,0.112l0.467-0.058l0.294,0.197l0.266,0.612l0.664,0.544l0.212,0.145z"/>
+ <path id="BZ" country:name="Belize" d="M204.31,158.989l-0.175,0.412l0.612-0.173l0.026,0.429l-0.419,1.241l0.178,0.269l-0.237,0.795l0.189,0.318l-0.092,0.397l-0.358,0.875l-0.3,0.35l-0.36,0.032l-0.054,0.286l-0.388,0.238l0,0.286l-0.69,0.016l0.215-4.297l-0.025-0.329l0.278-0.095l0.386,0.27l0.599-0.857l0.178-0.447l0.437-0.016z"/>
+ <path id="GT" country:name="Guatemala" d="M200.276,169.481l-0.151-0.056l-0.928-0.342l-0.614,0.032l-0.766-0.032l-0.608-0.239l-0.909-0.656l-0.513-0.419l-0.044-0.454l-0.054-0.553l0.207-0.238l-0.305-0.397l1.076-1.812l1.06-0.007l1.762,0.007l0.211-0.683l-0.532-0.223l-0.359-0.69l-0.624-0.231l-0.495-0.541l-0.396-0.223l0.999-0.032l0.04-1.24l1.792,0.005l2.332,0.006l-0.215,4.297l0.69-0.016l0.303,0.095l0.311,0.302l0.14-0.191l-0.066-0.381l0.336,0.157l0.458,0.367l-1.507,1.208l-0.499,0.238l-0.177,0.493l0.162,0.604l-0.438,0.302l-0.467,0.048l-0.043,0.254l0.164,0.159l-0.351,0.111l-0.184,0.302l-0.22-0.016l-0.565,0.461l-0.012,0.223z"/>
+ <path id="HN" country:name="Honduras" d="M204.413,165.093l0.312-0.03l0.612-0.27l0.639-0.058l0.743,0.126l0.478,0.069l1.443,0.04l0.699-0.228l0.379-0.199l0.567,0.267l0.788-0.03l0.763-0.101l0.63-0.001l0.5,0.126l0.564,0.253l-0.038,0.353l-0.102,0.226l0.228,0.282l0.787,0.238l0.557,0.069l0.244,0.524l-1.425,0.486l-0.424,0.229l-0.248,0.086l-0.463-0.097l-0.328-0.182l-0.259-0.013l-0.294,0.242l-0.503,0.794l-1.207,0.997l-0.725-0.42l-0.513,0.583l-0.882,0.034l-0.005,0.961l-0.293,0.412l-0.29,0.143l-1.001,0.125l-0.311-0.661l-0.025-0.085l-0.478-0.3l0.085-0.731l-0.128-0.175h-0.272l-0.541-0.276l-0.433,0.34l-0.365-0.016l-0.066-0.271l-0.565-0.35l-0.409-0.08l-0.208-0.418l-0.677-0.17l0.438-0.302l-0.162-0.604l0.177-0.493l0.499-0.238l1.507-1.208z"/>
+ <path id="SV" country:name="El Salvador" d="M205.532,170.085l0.035,0.076l-0.203,0.057l0.01,0.265l-0.237,0.334l-0.68-0.046l-0.853-0.139l-1.697-0.505l-1.305-0.435l-0.325-0.21l0.012-0.223l0.565-0.461l0.22,0.016l0.184-0.302l0.351-0.111l-0.164-0.159l0.043-0.254l0.467-0.048l0.677,0.17l0.208,0.418l0.409,0.08l0.565,0.35l0.066,0.271l0.365,0.016l0.433-0.34l0.541,0.276h0.272l0.128,0.175l-0.085,0.731z"/>
+ <path id="CO" country:name="Colombia" d="M242.38,173.617l-0.128-0.105l-0.84,0.171l-0.534,0.156l-0.414,0.2l-0.056,0.288l0.048,0.497l-0.129,0.396l-0.227-0.027l-0.381,0.059l-0.99,1.758l-0.172,0.722l-0.241,0.722l-0.709,1.191l0.402,0.025l0.234-0.1l0.384-0.017l0.31,0.606l0.855,1.45l0.103,0.395l-0.226,1.132l0.099,0.353l0.401,0.309l0.429,0.548l0.397,0.252l0.496-0.017l1.163-0.12l1.167-0.05l0.521,0.181l0.64,0.321l0.188,0.253l0.847,0.998l0.554,0.576l0.144,0l0.522-0.13l0.76-0.174l1.99-0.224l0.644,0.081l-0.409,0.525l-0.085,1.004l-0.379,0.511l-0.147,0.326l0.026,0.254l0.035,0.438l0.048,0.367l0.162,0.804l0.447,0.789l0.256,0.437l0.486,0.647l0.121,0.282l-0.731,0.612l-0.479,0.526l0.51,0.491l0.797,1.182l-0.52,0.286l-0.834,0.57l-0.412,0.158l-0.463,0.017l-2.812-0.082l-0.64-0.024l-0.042,0.325l-0.013,1.031l0.178,0.154l0.896,0.122l0.177,0.084l0.293,0.408l0.052,0.367l-0.384-0.04l-0.417-0.11l-0.687,0.032l-0.493,0.187l-0.111,0.085l-0.001,1.071l0,0.554l0.192,0.197l0.688,0.363l0.192,0.183l-0.031,0.777l0.399,0.562l0.031,0.212l-0.326,1.428l-0.706,4.411l-0.073,0.382l-0.133,0.198l-0.156-0.14l-0.575-0.703l-0.237-0.126l-0.161,0.058l-0.448,0.031l1.155-1.956l0.035-0.198l-0.127-0.069l-1.299-0.84l-0.509-0.209l-0.708,0.442l-0.397-0.182l-0.523-0.421l-0.452,0.427l-0.337,0.157l-0.496,0.031l-1.038-0.008l-0.573-0.152l-0.092-0.281l0.004-0.396l-0.173-0.296l-0.479-0.039l-0.366-0.14l-0.078-0.282l-0.251-0.761l-0.988-0.672l-0.526-0.364l-0.208-0.62l-0.208-0.324l-0.513-0.435l-0.897-0.418l-0.927-0.107l-0.081-0.112l-0.269-0.162l-0.197-0.118l-0.709-0.631l-0.128-0.056l-0.89,0.401l-0.67,0.061l-0.977-0.277l-0.355-0.309l-0.166-0.493l-0.227-0.225l-1.432-0.656l-1.496-0.803l0.033-0.068l-0.117-0.311l-0.181-0.282l0.108-0.212l0.509-0.114l0.465,0.112l0.186-0.325l-0.348-0.564l0.086-0.424l0.314-0.227l0.878-0.058l0.193,0.042l0.41-0.227l0.445-0.679l0.45-0.961l0.651-1.061l-0.122-0.268l-0.56-0.408l-0.071-0.184l0.306-0.721l0.089-0.523l-0.149-0.861l-0.371-0.86l0.085-0.254l0.49-0.143l0.135-0.212l-0.088-0.198l-0.565-0.479l-0.042-0.226l0.103-0.198l0.242-0.326l0.036-0.254l-0.173-0.282l-0.739-0.719l-0.364-0.396l0.256-0.753l0.228-0.082l-0.045-0.45l0.19,0.082l0.085,0.307l0.584-0.409l0.094-0.43l0.322-0.062l-0.509-1.038l-0.228-0.149l-0.084-0.327l0.142,0.075l0.42,0.338l0.397,0.507l0.22,0.508l0.235,0.197l0.199-0.17l0.147-0.241l-0.332-0.776l0.02-0.212l0.176-0.297l0.445-0.34l0.399-0.297l0.501-0.736l0.327-0.156l0.684-0.101l0.217-0.382l-0.104-0.381l0.174-0.777l0.067-0.65l0.207-0.48l0.498-0.439l0.429-0.283l0.592-0.242h0.113l0.374,0.206l0.22,0.443l0.281-0.34l0.031-0.438l0.199-0.551l0.22-0.071l0.267,0.126l0.855,0.041l0.562-0.001l0.623-0.27l0.237-0.254l0.476-0.298l0.848-0.256l0.435-0.396l0.278-0.551l0.333-0.255l0.469-0.17l0.58,0.013l0.526,0.338l0.155,0.126l0.155,0.339l-0.285,0.332z"/>
+ <path id="BJ" country:name="Benin" d="M408.6,174.04l-0.062,0.777l0.164,0.762l0.388,0.718l-0.316,0.962l-0.19,0.566l-0.223,0.298l-0.656,0.414l-0.095,0.34l0.116,0.592l-0.078,0.368l-0.433,0.13l-0.257,0.03l-0.237,0.397l0.002,0.381l0.003,0.48l-0.012,0.876l-0.09,0.989l0.217,1.439l-0.121,1.188l0.006,0.234l-0.333,0.015l-1.232,0.144l-0.669,0.052l-0.106-0.205l-0.295-1.072l0.188-0.708l0.026-0.833l-0.036-0.537l-0.135-0.974l-0.006-0.862l-0.035-0.522l0.013-0.579l-0.442-1.311l-0.164-0.691l-0.403-0.323l-0.468-0.294l-0.18-0.395l0.141-0.594l0.046-0.424l0.062-0.142l0.24-0.157l0.366-0.553l0.415-0.271l0.418-0.045l0.739,0.095l0.337-0.158l0.415-0.468l0.237-0.764l-0.131-0.367l0.577-0.3l0.321-0.073l0.339,0.28l0.727,0.589l0.902,0.503z"/>
+ <path id="GH" country:name="Ghana" d="M394.266,178.814l0.191-0.17l-0.02-0.41l-0.261-1.934l0.125-0.34l0.271-0.157l2.119-0.041l0.867,0.037l1.429,0.006l0.976-0.458l0.161,0.032l0.595,0.119l-0.25,0.849l0.05,0.254l0.633,0.915l0.244,0.451l-0.188,0.721l0.02,0.396l0.265,1.114l0.181,0.592l0.503,0.788l0.032,0.155l-0.286,0.242l-0.174,0.382l0.01,1.314l-0.011,0.72l0.021,0.551l0.18,0.479l0.468,0.577l0.752,0.608l-0.503,0.682l-0.304,0.099l-0.593-0.013l-0.992,0.144l-0.463,0.185l-0.188,0.098l-0.898,0.469l-1.263,0.398l-0.942,0.412l-0.958,0.567l-0.578-0.324l-0.945-0.436l-0.074-0.124l-0.066-0.741l-0.554-1.155l-0.263-0.747l-0.103-0.706l0.327-1.005l0.437-1.274l0.521-0.851l0.203-0.595l-0.334-1.438l-0.189-1.285l-0.178-0.154z"/>
+ <path id="TG" country:name="Togo" d="M400.72,175.499l1.013,0.163l0.611,0.166l0.29,0.041l-0.046,0.424l-0.141,0.594l0.18,0.395l0.468,0.294l0.403,0.323l0.164,0.691l0.442,1.311l-0.013,0.579l0.035,0.522l0.006,0.862l0.135,0.974l0.036,0.537l-0.026,0.833l-0.188,0.708l0.295,1.072l0.106,0.205l-0.452,0.035l-0.479,0.128l-0.368,0.212l-0.023,0.04l-0.752-0.608l-0.468-0.577l-0.18-0.479l-0.021-0.551l0.011-0.72l-0.01-1.314l0.174-0.382l0.286-0.242l-0.032-0.155l-0.503-0.788l-0.181-0.592l-0.265-1.114l-0.02-0.396l0.188-0.721l-0.244-0.451l-0.633-0.915l-0.05-0.254l0.25-0.849z"/>
+ <path id="CI" country:name="Ivory Coast" d="M383.772,190.418l0.041-0.919l0.105-0.565l0.247-0.849l0.059-0.452l-0.131-0.282l-1.264-1.334l-0.592,0.032l-0.369-0.097l-0.194-0.183l-0.05-0.183l0.501-0.865l0.059-0.438l-0.119-0.55l0.062-0.17l0.047-0.099l0.602-0.554l0.188-0.354l-0.179-0.21l-0.296-0.549l0.03-0.127l0.158-0.199l0.304-0.03l0.548,0.223l0.304,0.012l0.19-0.143l-0.051-0.226l-0.648-0.561l-0.309-0.351l0.332-0.37l0.125-0.283l-0.197-0.31l-0.695-0.405l-0.214-0.409l0.264-0.623l0.379-0.397l0.522-0.54l0.352-0.059l0.566,0.321l0.455,0.436l0.35-0.228l0.362-0.469l0.571-0.483l0.239-0.114l0.257,0.041l0.147,0.211l0.004,0.297l0.117,0.381l0.148,0.239l0.352-0.059l0.604-0.399l0.159-0.1l0.259,0.168l0.545-0.003l0.308,0.252l0.15,0.465l0.52,0.562l0.452,0.223l0.354,0.083l0.368-0.115l0.446-0.257l0.608-0.159l0.769-0.075l0.644,0.166l0.63,0.434l0.178,0.154l0.189,1.285l0.334,1.438l-0.203,0.595l-0.521,0.851l-0.437,1.274l-0.327,1.005l0.103,0.706l0.263,0.747l0.554,1.155l0.066,0.741l-0.119-0.201l-0.289-0.197l-0.208,0.015l-0.143,0.24l-0.096,0.042l-0.48-0.027l-0.705-0.167l-0.608-0.083l-2.352,0.062l-1.279,0.243l-0.575,0.199l-1.07,0.369l-1.739,0.781l-0.701,0.425l-0.256-0.013l-0.075-0.032z"/>
+ <path id="MY" country:name="Malaysia" d="M627.408,186.411l0.035,0.024l0.523,0.098l1.061,1.198l0.693,0.916l0.506,0.762l0.081,0.579l-0.023,0.805l-0.134,0.862l0.07,1.073l-0.07,0.636l0.097,0.494l0.196,0.381l0.53,0.493l0.338,0.536l0.705,1.608l0.062,0.127l-0.366-0.069l-0.895-0.055l-0.401,0.142l-0.175-0.07l-0.521-0.437l-0.885-0.605l-0.6-0.337l-1.231-0.675l-1.02-0.732l-0.217-0.254l-0.16-0.988l-0.438-0.691l-0.895-0.817l-0.195-0.663l0.039-0.494l0.03-0.283l-0.107-0.409l-0.399-0.634l-0.347-1.849l-0.188-0.72l0.043-0.362l0.448-0.17l0.571-0.013l0.106,0.466l0.447,0.119l0.261,0.238l0.055,0.226l0.041,0.21l-0.213,0.398l0.118,0.239l0.204,0.083l0.244-0.394l0.279-0.28l0.309,0.163l0.05,0.478l0.644-0.089l0.11-0.575l0.495-0.35l0.086-0.337z M643.95,196.042l0.081,0.044l0.375,0.408l0.397,0.141l0.861,0.083l0.413,0.168l0.761,0.436l0.335,0.042l0.337-0.1l-0.503-0.535l0.169-0.551l0.365-0.608l0.528-1.258l0.584-0.27l1.481-0.342l1.018-0.299l0.428-0.326l0.524-1.021l0.523-0.323l0.87-1.117l0.22-0.212l0.244-0.147l0.112-0.068l0.084,0.126l0.062,0.37l0.234-0.012l0.111,0.259l0.309,0.271l0.383-0.271l1.234-0.42l-0.025-0.086l-0.197-0.197l0.013-0.247l0.024-0.111l-0.148-0.444l-0.11-0.174l0.167-0.042l0.188,0.143l0.085-0.016l0.449-0.084l0.161-0.283l-0.036-0.24l-0.478-0.366l0.197-0.396l0.436-0.071l0.511,0.041l0.154-0.605l0.408-0.313l0.284-0.48l0.531-0.58l0.498-1.032l0.075-0.17l0.322,0.465l0.33,0.098l0.315-0.424l0.305,0.494l0.351,0.282l0.402,0.211l0.075,0.338l-0.182,0.354l-0.234,0.452l0.037,0.198l0.631-0.128l0.472-0.128l0.115,0.226l-0.349,0.495l0.742-0.1l0.357-0.085l0.269,0.056l1.035,0.662l0.345,0.14l0.1,0.24l-0.158,0.269l-0.201,0.155l-0.44,0.143l-0.594,0.029l-0.683-0.083l-0.355,0.311l0.096,0.254l0.888,0.69l-0.161,0.311l-0.458,0.199l-0.646,0.1l-0.518,0.114l-0.067,0.15l-0.182-0.09l-0.753-0.292l-0.446-0.04l-0.624,0.018l-0.651-0.081l-0.748-0.081l-0.464,0.017l-0.247,0.157l-0.381,0.638l-0.119,0.565l0.106,0.988l-0.22,0.383l-0.646,0.244l-0.218,0.34l0.076,0.748l-0.928,1.785l-0.387,0.299l-0.864,0.175l-0.465,0.172l-0.467,0.356l-0.287,0.03l-0.559-0.152l-0.524-0.223l-0.557-0.251l-0.431-0.11l-0.479,0.074l-0.531,0.441l-0.403,0.525l-0.528,0.342l-0.399,0.172l-0.543-0.11l-0.526-0.223l-0.255,0.001l-0.928,0.416l-0.446-0.28l-0.304-0.083l-1-0.983l-0.253-0.295l-0.288-0.792z"/>
+ <path id="SR" country:name="Suriname" d="M274.556,195.884l0.06-0.212l-0.332-0.563l-0.49-1.127l-0.246-0.832l-0.185-0.295l-0.561-0.067l-0.532-0.675l-0.571-0.831l0.328-0.694l0.095-0.467l-0.078-0.777l0.169-0.17l1.131-0.091l0.183-0.27l0.082-0.862l0.142-0.496l0.015-0.339l0.326-0.312l0.382-0.057l1.392,0.463l0.465,0.042l0.083-0.41l0.141-0.085l0.337,0.027l0.833,0.012l0.863-0.03l0.723,0.069l0.63,0.182l0.999,0.427l-0.647,0.876l-0.391,0.751l-0.137,0.594l0.094,0.381l0.134,0.635l0.086,0.664l0.521,0.844l0.029,0.438l-0.424,1.472l-0.489,0.963l-1.05-0.488l-0.319,0.001l-0.534,0.385l-0.398,0.059l-0.418-0.139l-0.642-0.124l-0.172,0.156l-0.2,0.326l0.611,1.014l-0.528-0.054l-1.108-0.276l-0.4-0.04z"/>
+ <path id="GF" country:name="French Guiana" country:shortname="Fr Guiana" d="M285.859,190.719l0.015,0.422l-1.102,1.646l-0.427,0.765l-0.439,0.992l-0.464,0.681l-0.299,0.214l-0.56-0.025l-1.11-0.389l-0.882,0.613l-0.225-0.069l-0.649-0.505l0.489-0.963l0.424-1.472l-0.029-0.438l-0.521-0.844l-0.086-0.664l-0.134-0.635l-0.094-0.381l0.137-0.594l0.391-0.751l0.647-0.876l0.218,0.093l1.033,0.294l0.55,0.196l0.799,0.549l1.264,1.084l0.545,0.564l0.317,0.465l0.193,0.028z"/>
+ <path id="CF" country:name="Congo" d="M429.505,210.684l-0.695-0.533l-0.351,0.13l-0.68,0.513l-0.536,0.414l-0.112-0.177l-0.392-0.86l-1.381-1.344l0.184-0.295l0.413-0.229l0.803,0.307l0.343-0.681l-0.052-0.296l-0.274-0.253l-0.39-0.521l-0.116-0.366l0.058-0.495l0.127-0.1l0.909-0.146l0.604-0.243l0.125-0.213l0.167-0.807l0.174-0.185l0.239-0.029l0.193,0.14l0.341,0.479l0.405,0.521l0.386,0.195l0.287-0.016l0.188-0.228l0.362-0.482l0.29,0.253l0.167,0.578l0.146,0.112l0.304,0.068l0.255-0.114l0.184-0.68l0.243-1.089l0.131-1.229l0.229-1.047l-0.114-0.338l-0.161-0.127l-0.384-0.082l-0.528-0.208l-0.242-0.31l-0.132-0.437l0.008-0.109l0.021-0.3l0.157-0.284l0.492-0.398l0.556-0.441l0.094-0.354l-0.389-0.902l-0.369-0.322l-0.592-0.067l-0.939,0.5l-0.463-0.025l-0.146-0.253l-0.068-0.734l0.077-0.679l0.396-0.468l0.56,0.109l0.863,0.023l0.878-0.076l0.271,0.055l0.479,0.04l0.56,0.124l0.576,0.194l0.864,0.334l0.863,0.292l0.271-0.086l-0.1-0.861l0.159-0.185l0.303-0.312l0.365-0.497l0.158-0.523l0.222-1.287l0.255-0.228l0.479-0.102l0.975-0.175l0.367,0.054l0.624,0.138l0.895,0.093l0.751-0.287l0.128,0.197l-0.031,0.156l-0.398,1.203l-0.558,0.837l-0.349,0.821l-0.094,0.551l-0.156,0.764l-0.196,2.021l-0.254,1.342l-0.115,0.61l-0.169,0.708l-0.139,0.523l-0.459,0.427l-0.525,0.229l-0.809,0.599l-0.41,0.454l-0.47,0.836l-0.343,0.751l-0.193,1.159l-0.074,0.396l0.122,0.72l-0.086,0.706l-1.025,0.938l-0.364,0.229l-0.931,0.811l-0.554,0.399l-0.57,0.328l-0.147-0.211l-0.042-0.664l-0.054-0.424l-1.495,0.532l-0.327,0.581l-0.443,0.271l-0.177-0.013l-0.484-0.336z"/>
+ <path id="GA" country:name="Gabon" d="M425.506,195.522l0.045-0.495l0.88,0.093l1.773,0.088l0.831,0.038l1.022,0.149l-0.396,0.468l-0.077,0.679l0.068,0.734l0.146,0.253l0.463,0.025l0.939-0.5l0.592,0.067l0.369,0.322l0.389,0.902l-0.094,0.354l-0.556,0.441l-0.492,0.398l-0.157,0.284l-0.021,0.3l-0.008,0.109l0.132,0.437l0.242,0.31l0.528,0.208l0.384,0.082l0.161,0.127l0.114,0.338l-0.229,1.047l-0.131,1.229l-0.243,1.089l-0.184,0.68l-0.255,0.114l-0.304-0.068l-0.146-0.112l-0.167-0.578l-0.29-0.253l-0.362,0.482l-0.188,0.228l-0.287,0.016l-0.386-0.195l-0.405-0.521l-0.341-0.479l-0.193-0.14l-0.239,0.029l-0.174,0.185l-0.167,0.807l-0.125,0.213l-0.604,0.243l-0.909,0.146l-0.127,0.1l-0.058,0.495l0.116,0.366l0.39,0.521l0.274,0.253l0.052,0.296l-0.343,0.681l-0.803-0.307l-0.413,0.229l-0.184,0.295l-0.038-0.037l-0.563-0.493l-0.532-0.55l-0.259-0.466l-1.318-1.169l0.286-0.312l-0.369-0.281l-0.528-0.056l-0.918-1.438l0.382-0.297l0.111-0.1l-0.321-0.395l-0.464-0.14l-0.29-0.564l-0.369-0.451l0.319-0.17l0.541-0.411l0.223-0.396l0.291-0.976l0.089-0.295l0.415,0.07l0.495,0.013l-0.064-0.211l-0.56-0.352l-0.561-0.451l0.208-0.042l0.271-0.128l0.142-0.617l0.83-0.043l0.927,0.008l1.245,0.021l0.575-0.032l-0.001-0.155l-0.02-0.551l-0.026-1.836z"/>
+ <path id="GQ" country:name="Equatorial Guinea" country:shortname="Eq Guinea" d="M422.536,195.513l1.005-0.007l1.965,0.017l0.026,1.836l0.02,0.551l0.001,0.155l-0.575,0.032l-1.245-0.021l-0.927-0.008l-0.83,0.043l0.033-0.146l-0.049-0.297l-0.144-0.084l-0.416-0.098l0.287-0.467l0.447-0.523l0.335-0.58l0.066-0.403zM419.636,193.273l-0.484-0.049l-0.049-0.218l0.049-0.291l0.242-0.097l0.024-0.146v-0.291l0.17-0.097l0.169-0.121l0.219,0.048l0.218,0.048l0.097,0.194l-0.193,0.169l-0.146,0.243l-0.17,0.339l-0.146,0.267z"/>
+ <path id="EC" country:name="Ecuador" d="M222.291,207.801l0.188-0.126l0.264-0.312l0.585-1.061l0.038-0.269l-0.209-0.733l0.058-0.391l-0.478,0.617l-0.732,0.623l-0.333-0.098l-0.601-0.324l-0.408-0.408l0.389-0.283l0.1-0.24l-0.167-0.579l0.005-0.438l0.133-0.466l-0.109-0.282l-0.362-0.649l0.193-0.17l0.48-0.198l0.721-0.454l-0.319-0.395l0-0.226l0.175-0.354l0.497-0.462l0.157-0.146l0.14-0.848l-0.116-0.452l-0.082-0.184l0.11-0.226l0.686-0.101l0.891-0.341l0.396-0.241l0.474-0.382l0.09-0.186l1.496,0.803l1.432,0.656l0.227,0.225l0.166,0.493l0.355,0.309l0.977,0.277l0.67-0.061l0.89-0.401l0.128,0.056l0.709,0.631l0.197,0.118l0.269,0.162l0.081,0.112l0.387,0.76l0.321,0.789l-0.08,0.255l-0.352,0.384l-0.547,1.147l-0.533,0.779l-0.71,0.725l-1.001,0.755l-0.336,0.087l-1.028,0.303l-0.901,0.358l-0.809,0.499l-0.59,0.653l-0.284,0.51l-0.987,2.506l-0.267,0.312l-0.242,0.072l-0.398-0.068l-0.398-0.491l-0.191-0.479l-0.312-0.252l-0.815,0.005l-0.444-0.11l-0.105-0.197l-0.097-0.494l0.233-0.34l0.029-0.495l0.005-0.569z"/>
+ <path id="PE" country:name="Peru" d="M245.934,224.314l1.109,1.843l0.922,1.646l0.08,0.24l-0.437,0.736l-0.15,0.523l-0.143,0.848l0.057,0.522l0.236,0.902l-0.156,0.34l-0.221,0.34l-0.532,0.582l-0.102,0.452l0.347,0.845l-0.21,0.368l-0.159,0.34l0.022,0.48l0.604,1.168l0.015,0.522l-0.285,0.439l-0.723,0.61l-0.12,0.227l0.049,0.48l0.132,0.295l0.018,0.142l-0.586,0.187l-0.15,0.199l-0.228,0.933l-0.259,0.298l-0.852,0.275l-0.201-0.517l-0.289-0.31l-1.422-0.618l-0.313-0.239l-0.233-0.678l-0.315-0.38l-0.559-0.225l-0.504-0.281l-0.489-0.254l-0.616-0.309l-0.873-0.464l-0.673-0.366l-0.866-0.379l-0.838-0.337l-1.271-0.845l-1.354-0.985l-1.232-1.099l-0.594-0.705l-0.42-0.677l0.008-0.438l0-0.903l-0.269-0.606l-0.781-1.043l-1.389-2.778l-0.285-0.268l-0.467-0.211l-0.074-0.085l0.055-0.536l-0.02-0.396l-0.149-0.396l-1.208-2.199l-0.997-1.961l-0.688-1.27l-1.365-1.917l-0.272-0.353l-0.598-0.973l-0.462-0.423l-0.75-0.437l-0.914-0.365l-0.61-0.365l0.119-0.17l0.181-0.113l0.609-0.029l0.144-0.41l-0.118-0.282l-0.592-0.874l-0.353-0.437l-0.258-0.72l0.01-0.24l0.244-0.523l0.582-0.622l1.02-0.878l0.47-0.198l0.317-0.214l-0.005,0.569l-0.029,0.495l-0.233,0.34l0.097,0.494l0.105,0.197l0.444,0.11l0.815-0.005l0.312,0.252l0.191,0.479l0.398,0.491l0.398,0.068l0.242-0.072l0.267-0.312l0.987-2.506l0.284-0.51l0.59-0.653l0.809-0.499l0.901-0.358l1.028-0.303l0.336-0.087l1.001-0.755l0.71-0.725l0.533-0.779l0.547-1.147l0.352-0.384l0.08-0.255l-0.321-0.789l-0.387-0.76l0.927,0.107l0.897,0.418l0.513,0.435l0.208,0.324l0.208,0.62l0.526,0.364l0.988,0.672l0.251,0.761l0.078,0.282l0.366,0.14l0.479,0.039l0.173,0.296l-0.004,0.396l0.092,0.281l0.573,0.152l1.038,0.008l0.496-0.031l0.337-0.157l0.452-0.427l0.523,0.421l0.397,0.182l0.708-0.442l0.509,0.209l1.299,0.84l0.127,0.069l-0.035,0.198l-1.155,1.956l0.448-0.031l0.161-0.058l0.237,0.126l0.575,0.703l0.156,0.14l0.136,0.324l-0.341,0.186l-0.793-0.235l-0.493-0.096l-0.322,0.072l-0.604,0.441l-0.371,0.115l-0.669-0.066l-1.895,0.773l-0.701,0.442l-0.372,0.172l-0.599,1.415l-0.319,0.511l-0.021,0.155l0.277,0.86l0.012,0.112l-0.625,0.498l-0.62,0.328l-0.349,0.342l-0.247,0.622l0.106,0.564l0.619,0.957l1.333,2.166l0.106,0.127l-0.247,0.495l-0.208,0.312l1.085,0.12l0.415,0.04l0.312,0.182l0.241,0.323l0.096,0.663l1.843,0.032l0.762-0.499l0.648-0.484l0.326-0.114l-0.059,1.511l-0.098,1.173l0.108,0.353l0.317,0.337l0.285,0.068l0.358-0.072l0.786-0.259l0.42-0.045z"/>
+ <path id="BR" country:name="Brazil" d="M279.288,257.295l-0.063-0.423l0.027-0.777l0.222-0.819l0.298-0.835l0.321-0.75l-0.019-0.141l-0.491-0.336l-0.234-0.112l-1.29,0.445l-0.224-0.055l-0.254-0.563l-0.487-2.524l-0.121-0.437l-0.843-0.404l-0.724-0.278l-0.115,0.001l-0.709,0.413l-0.346,0.03l-0.925-0.221l-0.818-0.15l-0.372-0.04l0.006-0.72l0.086-0.721l0.132-0.862l-0.104-0.959l-0.521-0.872l-0.084-0.663l-0.253-0.408l0.421-0.666l0.38-0.765l0.238-0.834l0.185-1.173l-0.022-0.494l-0.307-0.774l-0.316-0.479l-0.73-0.362l-0.436-0.407l-0.067-0.563l0.261-0.835l-0.042-0.296l-0.693-0.024l-1.615-0.019l-0.5-0.012l-0.967-0.036l-0.153-0.112l-0.249-0.944l-0.138-2.032l-0.03-0.706l-0.203-1.029l0.038-0.565l-0.085-0.169l-0.403-0.237l-0.537-0.166l-0.636-0.123l-1.148,0.077l-0.22-0.084l-0.398-0.308l-0.385-0.774l-0.096-0.014l-0.882-0.037l-0.3-0.098l-0.75-0.603l-0.688-0.307l-0.676-0.25l-0.355,0.03l-0.787-0.023l-0.316-0.097l-1.1-0.939l-0.813-0.928l-0.335-0.591l-0.141-0.635l-0.036-0.818l0.064-0.622l0.079-0.621l-0.045-0.748l-1.283-0.021l-0.934,0.076l-0.36,0.158l-0.874,0.485l-1.471,1.109l-0.415,0.243l-0.48-0.025l-0.336-0.026l-0.946,0.824l-0.355,0.03l-1.122-0.304l-0.939-0.136l-0.42,0.045l-0.786,0.259l-0.358,0.072l-0.285-0.068l-0.317-0.337l-0.108-0.353l0.098-1.173l0.059-1.511l-0.326,0.114l-0.648,0.484l-0.762,0.499l-1.843-0.032l-0.096-0.663l-0.241-0.323l-0.312-0.182l-0.415-0.04l-1.085-0.12l0.208-0.312l0.247-0.495l-0.106-0.127l-1.333-2.166l-0.619-0.957l-0.106-0.564l0.247-0.622l0.349-0.342l0.62-0.328l0.625-0.498l-0.012-0.112l-0.277-0.86l0.021-0.155l0.319-0.511l0.599-1.415l0.372-0.172l0.701-0.442l1.895-0.773l0.669,0.066l0.371-0.115l0.604-0.441l0.322-0.072l0.493,0.096l0.793,0.235l0.341-0.186l-0.136-0.324l0.133-0.198l0.073-0.382l0.706-4.411l0.326-1.428l-0.031-0.212l-0.399-0.562l0.031-0.777l-0.192-0.183l-0.688-0.363l-0.192-0.197l0-0.554l0.001-1.071l0.111-0.085l0.493-0.187l0.687-0.032l0.417,0.11l0.384,0.04l-0.052-0.367l-0.293-0.408l-0.177-0.084l-0.896-0.122l-0.178-0.154l0.013-1.031l0.042-0.325l0.64,0.024l2.812,0.082l0.463-0.017l0.412-0.158l0.834-0.57l0.52-0.286l0.148,0.168l0.138,0.437l0.161,0.861l0.088,0.452l0.199,0.437l0.432,0.054l0.694,0.546l0.482,0.223l0.414-0.073l0.757-0.697l0.083,0.183l0.186,0.776l0.271-0.016l0.645-0.739l0.74-0.654l0.554-0.286l0.652-0.173l0.235-0.213l0.259-0.666l0.203-0.199l0.652-0.131l0.569-0.272l0.265-0.27l-0.15-0.253l-0.434-0.125l-0.96-0.051l-0.166-0.239l-0.079-0.55l-0.302-1.524l-0.391-0.69l-0.616-0.688l0.041-0.184l0.159-0.029l0.309,0.125l0.896,0.461l0.385,0.04l1.149-0.035l0.344,0.224l0.628,0.618l0.348-0.115l0.232-1.117l0.284-0.115l0.465,0.054l0.557-0.074l0.807-0.23l1.74-0.9l0.592-0.385l0.163-0.326l-0.103-0.169l0.375-0.257l0.302-0.058l0.516,0.124l0.26,0.111l0.04,0.212l-0.452,1.09l0.304-0.001l0.533,0.138l0.435,0.958l-0.179,0.368l-0.547,1.416l-0.213,0.962l0.156,0.465l0.281,0.394l0.167,0.31l-0.072,0.354l0.008,0.396l0.15,0.296l1.103,0.897l0.613,0.392l0.686-0.075l0.694-0.513l0.505-0.314l1-0.331l0.934-0.429l0.943,0.022l0.4,0.04l1.108,0.276l0.528,0.054l-0.611-1.014l0.2-0.326l0.172-0.156l0.642,0.124l0.418,0.139l0.398-0.059l0.534-0.385l0.319-0.001l1.05,0.488l0.649,0.505l0.225,0.069l0.882-0.613l1.11,0.389l0.56,0.025l0.299-0.214l0.464-0.681l0.439-0.992l0.427-0.765l1.102-1.646l-0.015-0.422l0.409-0.241l0.276,0.141l0.235,0.423l0.164,0.791l0.414,1.34l0.108,0.607l0.472,1.383l0.296,0.55l0.324,0.324l0.978,0.21l0.196,0.338l0.038,0.551l-0.045,0.254l-0.524,0.354l-0.933,1.414l-0.238,0.325l-0.51,0.411l-0.41,0.231l-0.244,0.138l-0.798,0.778l-0.544,0.947l-0.419,1.018l-0.402,0.453l0.271,0.112l0.512-0.072l0.497-0.198l1.202-0.709l0.112-0.028l0.299,0.889l0.442,0.818l0.255,0.112l0.287,0.07l1.135-0.031l0.592-0.058l0.737-0.298l-0.277,0.679l-0.017,0.584l0.448-0.557l1.254-1.006l0.289-0.156l0.306-0.382l0.499-0.933l0.272-0.396l0.256-0.099l1.006-0.003l0.352-0.198h0.175l0.687,0.549l0.654,0.267l0.32-0.028l0.814,0.28l1.069,0.45l0.334,0.281l0.269,0.593l0.08,0.028l0.176-0.015l0.402-0.354l0.319,0.042l0.302,0.254l0.538,0.789l0.205,0.396l-0.13,0.254l-0.308,0.41l-0.116,0.424l0.091,0.466l0.171,0.396l0.825-0.821l0.369-0.156l0.609-0.156l0.995-0.454l0.224-0.028l0.367,0.069l0.764,0.38l0.907,0.436l0.462,0.098l1.117,0.167l1.118,0.083l0.464-0.058l0.48-0.029l0.577-0.171l0.416-0.016l1.131,0.351l0.731,0.408l0.762,0.479l0.586,0.437l1.595,1.395l0.742,0.662l0.821,0.605l0.41,0.338l0.477,0.196l0.734,0.168l1.247,0.097l0.912,0.04l0.445,0.197l0.265,0.465l0.087,0.607l0.592,2.004l0.268,1.143l0.062,0.988l-0.076,0.579l-0.179,0.904l-0.243,0.848l-0.559,1.301l-0.518,0.849l-1.347,1.175l-1.388,1.288l-0.44,0.198l-0.354,0.043l-0.39,0.637l-0.094,0.396l-0.012,0.353l-0.504,1.074l-0.6,0.976l-0.8,1.104l-0.266,0.212l-0.194,0.015l-0.079-0.423l-0.278-0.296l-0.367-0.084l-0.064,0.79l-0.538,1.64l-0.049,0.734l-0.077,0.607l0.318,2.738l0.078,0.988l-0.577,2.543l-0.039,0.663l0.14,0.649l0.043,0.085l-0.759,0.495l-0.404,0.51l-0.261,0.791l-0.04,0.367l0.245,1.468l-0.106,0.367l-0.214,0.283l-0.676,0.608l-0.752,1.498l-1.01,1.4l-0.201,0.537l-0.055,0.311l0.144,0.945l-1.203,0.37l-0.544,0.283l-0.355,0.368l-0.084,0.466l0.021,0.367l-0.401,0.114l-0.864-0.041l-0.979,0.172l-0.654,0.001l-0.764-0.055l-0.465-0.112l-0.922,0.072l-0.736,0.002l-0.214,0.607l-0.295,0.198l-0.795,0.312l-0.481,0.453l-0.21,0.354l-0.747-0.267l-0.35,0.071l-0.563,0.255l-1.864,1.232l-0.528,0.396l-0.725,0.383l-0.616,0.438l-0.532,0.679l-0.486,0.241l-0.567,0.072l-0.278-0.014l0.006,0.24l0.336,0.225l0.12,0.536l-0.111,0.537l-0.099,0.282l-0.282,0.156l-0.084,0.155l0.384,0.648l0.036,1.186l0.05,1.045l-0.057,0.311l-0.11,0.594l-0.198,0.621l-0.464,0.735l-0.566,0.495l-0.788,0.524l-0.866,1.046l-0.208,0.396l-0.476,1.145l-0.499,0.933l-0.75,1.004l-0.69,0.623l-0.801,0.78l0.321-0.808l0.436-0.594l0.629-0.566l0.605-1.158l-0.06-0.254l-0.356,0.142l-0.397-0.014l-0.633-0.21l-0.075,0.155l0.002,0.297l-0.401,1.215l-0.349,0.48l-0.661,0.438l-0.317,0.283l-0.225,0.424l-0.013,0.354l-0.448,1.709l-0.481,0.763l-0.787,0.934l-1.076,0.979l-0.101-0.313l-0.258-0.746l0.103-0.269l0.634-0.766l0.017-0.269l-0.333-0.379l-0.163-0.027l-0.131-0.197l-0.853-1.109l-0.474-0.435l-0.999-0.587l-0.55-0.194l-0.617-0.194l-0.432-0.576l-0.365-0.393l-0.693,0.427l-0.27,0.016l-0.232-0.38l-0.59-0.814l-0.379-0.407l-0.47-0.364l-0.266-0.098l-0.25,0.101l-1.042,0.246l-0.55,0.003l0.214-0.27l0.833-0.88l1.805-1.816l1.435-1.363l1.633-1.448l0.348-0.242l1.754-0.744l0.521-0.313l0.161-0.467l0.094-1.638l-0.517-1.154l-0.206-0.196l-0.462,0.017l-0.957,0.161z M288.966,203.943l-0.558-0.125l-0.301-0.536l-0.078-0.382l0.16-0.197l-0.094-0.636l0.048-0.381l0.208-1.018l0.176-0.099l0.479-0.058l0.879,0.097l1.007,0.11l0.479-0.199l0.368,0.028l0.479,0.168l0.479,0.083l0.319,0.155l-0.335,0.538l-0.193,0.946l-0.257,0.494l-0.289,0.312l-0.561,0.326l-0.464,0.171l-0.527,0.015l-0.783,0.016l-0.641,0.171z"/>
+ <path id="PG" country:name="Papua New Guinea" country:shortname="Papua N Guin" d="M732.92,214.323l-0.164-0.24l-0.225-0.197l-0.379-0.126l-0.416,0.198l-0.399-0.38l-0.287-0.184l-0.659-0.238l-0.243-0.239l0.156-0.255l0.29,0.027l0.731-0.058l0.538,0.126l0.743,0.083l0.523-0.058l0.258-0.185l0.232-0.509l0.056,0.099l0.351,0.395l0.286,0.184l0.241,0.014l0.961-0.2l0.366-0.227l0.361-0.722l0.241-0.212l0.653-0.029l0.263-0.128l0.04-0.282l-0.064-0.565l-0.043-0.536l0.495,0.196l0.404,0.056l0.324-0.354l0.318,0.578l0.077,0.353l-0.196,0.495l-0.099,0.184l-0.509,0.044l-0.159,0.226l0.061,0.17l0.437,0.479l-0.308,0.354l-0.264,0.113l-0.742-0.083l-0.416,0.001l-0.091,0.269l-0.408,0.495l-0.275,0.156l-0.973,0.426l-0.484,0.143l-0.798,0.029l-0.807,0.115z M713.795,220.696l0.031-3.438l-0.046-0.805l-0.431-1.368l0.44-0.822l-0.169-7.966l2.581,0.802l0.85,0.337l1.04,0.295l1.254,0.378l0.848,0.507l0.613,0.323l0.597,0.084l0.38-0.058l0.26,0.508l0.274,0.254l0.635,0.352l0.687,0.395l0.779,0.718l-0.3,0.947l0.033,0.226l0.305,0.226l0.665,0.111l1.887,0.787l0.354,0.027l0.72,0.183l0.181,0.254l0.413,0.535l0.211,0.579l-0.166,0.113l-1.114,0.073l-0.563,0.156l-0.098,0.155l0.047,0.339l0.589,0.987l0.5,0.521l1.464,1l0.218,0.847l0.725,1.044l0.288,0.141l0.304-0.015l0.712-0.086l0.338,0.013l0.087,0.198l-0.354,0.551l0.218,0.212l0.401,0.141l0.423,0.041l0.63,0.168l0.096,0.127l-0.031,0.142l-0.648,0.213l0.287,0.24l1.064,0.28l0.538,0.295l0.235,0.763l-0.064,0.226l-1.094-0.012l-0.215-0.154l-0.146-0.466l-0.126-0.099l-1.011-0.111l-1.063-0.266l-0.644-0.126l-0.752,0.016l-0.774-0.026l-0.573-0.211l-0.494-0.352l-0.223-0.522l-0.24-0.268l-0.726-0.31l-0.472-0.338l-0.135-0.197l-1.089-1.608l-0.613-0.817l-0.454-0.056l-1.524-0.336l-0.671-0.31l-0.55-0.055l-0.415,0.185l-0.394,0.071l-0.78-0.45l0.282,0.762l-0.027,0.212l-0.249,0.071l-0.382-0.126l-0.311,0.1l0.296,0.395l-0.116,0.113l-1.037,0.045l-1.125-0.182l-0.478,0.029l0.237,0.127l0.24,0.154l0.642,0.169l0.662,0.352l0.404,0.338l0.219,0.395l-0.411,0.199l-0.739,0.425l-0.458,0.213l-0.668-0.097l-1.801-0.039l-1.219-0.092z"/>
+ <path id="AU" country:name="Australia" d="M726.605,297.247l-0.479-0.229l-1.179-0.471l-0.543-0.371l-0.508-0.715l-0.477-0.558l-0.216-0.414l0.264-0.044l0.169,0.1l0.421,0.171l0.129-0.143l-0.209-0.387l-0.703-0.699l-0.617-0.713l-0.149-0.257l-0.375-0.956l-0.008-0.67l0.177-0.044l1.004,0.312l1.476,0.354l1.089,0.369l0.797-0.03l0.463-0.144l0.382-0.115l0.373-0.058l0.684,0.027l0.306-0.301l0.716-0.244l0.475,0.385l-0.009,0.1l0.128,0.8l-0.009,0.686l-0.751,1.503l-0.124,0.758l-0.245,0.315l-0.943,0.26l-0.553,0.388l-0.49,0.689l-0.189,0.272l-0.274,0.072z M716.883,224.344l0.682,0.394l0.233,0.509l0.047,0.649l0.118,0.678l0.256,0.197l0.42,0.013l0.102,0.24l-0.45,0.919l0.715,0.338l0.175,0.282l0.147,0.593l0.08,1.3l0.144,0.621l0.456,1.157l0.293,0.268l0.422,0.014l0.328-0.312l0.384-0.185l0.32,0.663l0.363,0.127l0.563,0.408l0.385,0.154l0.144,0.155l0.002,0.41l0.083,0.96l0.275,0.776l-0.046,1.06l0.279,0.24l0.93,1.325l0.276,0.706l0.055,0.777l-0.209,0.876l0.403,0.649l0.275,0.833l0.204,0.353l1.395,0.803l0.285,0.154l0.744,0.111l0.402,0.649l0.843,0.535l0.483,0.169l1.141,0.068l0.117,0.197L731,245.42l-0.273,0.565l0.309,0.424l0.879,0.479l0.22,0.564l0.469,1.342l0.211,0.748l0.112,0.396l0.252,0.311l0.771,0.352l-0.021-0.127l-0.141-0.777l0.913,0.507l0.567,0.154l0.184,0.127l0.136,0.296l0.106,1.752l0.884,0.762l0.573,0.323l0.604,0.154l0.287,0.296l0.244,0.579l0.229,0.424l0.545,0.168l0.176,0.297l0.007,0.269l0.19,0.536l0.106,0.113l0.506,0.126l0.156,0.112l0.162,0.354l0.366,1.327l0.026,0.876l0.013,0.862l-0.132,0.41l-0.181,0.325l0.778,1.271l0.223,0.48l0.181,0.833l0.034,0.749l-0.293,0.708l-0.353,1.668l-0.585,1.755l0.137,0.791l-0.065,0.806l-0.306,0.778l-0.661,0.977l-0.203,0.665l-0.598,0.821l-0.45,0.185l-0.465,0.1l-0.423,0.468l-0.466,0.68l-0.328,1.527l-0.477,0.638l-0.34,0.495l0.014,0.65l-0.208,0.539l-0.331,0.312l-0.601,0.341l-0.27,0.326l-0.3,1.021l-0.169,1.049l-0.079,0.937l0.021,0.666l-0.283,0.64l-0.322,0.354l-0.463,0.3l-0.754,0.101l-1.158,0.087l-0.82,0.03l-0.527,0.157l-0.516,0.299l-1.529,0.94l-0.443,0.129l-0.214,0.284l-0.346,0.071l-0.528,0.059l-0.286-0.014l0.295,0.368l0.209,0.27l-1.315-0.665l-0.885-0.353l0.003-0.469l-0.073-0.156l-0.56-0.467l-0.628-0.368l-0.421-0.014l-0.485,0.172l-0.335,0.242l0.748,0.467l-0.97,0.243l-0.929,0.428l-0.953,0.442l-0.222,0.028l-0.604-0.226l-0.886-0.438l-0.67-0.226l-1.086-0.311l-0.51-0.041l-0.239,0.156l-0.044,0.113l-0.716-0.169l-0.751-0.353l-0.522-0.298l-0.896-0.82l-0.526-0.34l-0.422-0.879l0.09-1.035l-0.082-0.411l-0.184-0.495l-0.664-0.736l-0.141-0.523l-0.029-0.425l-0.534-0.014l-0.786,0.398l-0.597,0.114l-0.34,0.058l-0.178-0.07l-0.167-0.17l0.517-0.454l0.233-0.567l0.073-0.821l-0.253-0.324l-0.536-0.593l-0.247-0.353l-0.485,0.735l-0.443,1.431l-0.19,0.113l-0.796,0.002l-0.199,0.156l-0.196,0.015l-0.255,0.028l0.198-0.396l0.081-0.396l0.079-0.1l0.634,0.041l0.242-0.142l0.126-0.255l-0.105-1.004l0.454-0.835l0.328-0.453l0.091-0.396l0.018-0.409l0.151-0.128l0.245-0.015l0.218-0.354l-0.052-0.227l-0.323-0.494l-0.338-0.494l-0.107,0.707l-0.288,0.255l-0.518,0.299l-0.311,0.467l-0.086,0.155l-0.189,0.467l-0.281,0.326l-0.747,0.242l-0.735,0.481l-0.653,0.567l-0.36,0.693l-0.514,0.808l-0.41-0.339l-0.38-1.328l-0.263-0.579l-0.19-0.325l-0.688-0.79l-0.297-0.734l-0.176-0.212l-0.704,0.072l-0.235-0.099l-0.139-0.24l-0.085-0.269l0.334-0.34l-0.047-0.297l-0.346-0.395l-0.543-0.494l-0.266-0.098l-0.83,0.157l-0.486-0.07l-0.95-0.549l-0.274-0.014l-0.438,0.17l-0.433-0.027l-0.421-0.183l-0.662-0.521l-0.921-0.437l-0.218,0.001l-0.723,0.213l-1.282,0.088l-0.669,0.001l-1.764,0.061l-0.611,0.129l-0.656,0.213l-0.989,0.44l-0.972,0.256l-1.039,0.257l-1.503,0.088l-0.794-0.013l-0.383,0.044l-0.927,0.284l-0.993,0.469l-0.773,0.397l-0.538,0.143l-0.431,0.085l-0.361,0.199l-0.615,0.693l-0.774,1.02l-0.588,0.284l-0.766-0.013l-0.547-0.013l-0.927,0.143l-0.4,0.185l-0.663-0.395l-0.294-0.084l-0.734,0.016l-1.572,0.173l-0.938,0.157l-0.459-0.041l-0.672,0.044l-0.398,0.227l-0.583,0.793l-0.344,0.128l-0.958-0.125l-0.158,0.057l-0.57,0.708l-0.465,0.368l-0.919,0.271l-0.586,0.086l-1.516-0.082l-0.638-0.055l-0.688-0.197l-0.633-0.366l-0.778-0.677l-0.74-0.353l-0.374-0.041l-0.151-0.07l-0.19-1.229l0.055-0.255l0.489,0.112l0.45-0.086l0.332-0.425l0.197-0.467l0.267-1.357l-0.043-1.215l-0.156-0.622l-0.258-0.593l-1.117-1.906l-0.208-0.635l-0.144-0.834l0.027-0.989l-0.16-0.692l-0.467-1.072l-0.663-0.945l-0.603-0.734l-0.214-0.254l0.128-0.904l-0.215-0.536l-0.733-1.115l-0.972-1.018l-0.273-0.583l0.126-0.233l0.188,0.187l0.152,0.443l0.183,0.163l0.235,0.35l0.327,0.188l0.354,0.023l-0.348-1.144l-0.437-0.396l-0.226-0.326l0.08-0.304l0.748,0.84l0.495,0.979l0.477,0.065l-0.099-0.555l0.289-0.039l0.004-0.564l-0.282-0.48l-1.03-1.368l-0.354-0.691l-0.119-0.579l-0.038-0.734l0.355-0.595l0.323-0.523l0.21-0.664l-0.083-1.031l-0.254-0.635l0.033-0.368l0.438-0.692l0.109-0.325l0.064-0.156l0.271,0.649l0.011,0.424l0.105,0.184l0.35,0.027l0.171-0.113l0.187-0.565l0.141-0.48l0.765-0.468l1.22-0.624l0.484-0.326l0.676-0.581l0.585-0.467l0.632-0.327l0.79-0.114l0.697-0.016l0.7-0.002l0.431-0.043l0.352-0.185l0.474-0.453l0.494-0.128l0.929-0.072l0.279-0.143l0.291-0.551l0.158-0.1l0.444,0.027l0.877,0.224l0.626-0.043l0.911-0.299l1.084-0.469l0.359-0.213l0.716-0.665l0.427-0.58l0.29-0.622l0.132-0.297l0.41-0.369l0.968-0.651l0.079-0.17l-0.067-0.409l-0.242-0.805l-0.016-0.495l1.063-1.118l0.387-0.692l0.291,0.169l0.341,0.437l0.619,1.355l0.262,0.253l0.177-0.579l0.021-0.466l0.436,0.238l0.272,0.07l0.189-0.607l-0.06-0.142l-0.563-0.238l-0.175-0.24l0.007-0.565l0.044-0.112l0.897,0.04l0.661,0.253l0.642-0.029l0.334-0.029l0.289,0.074l-0.699-0.455l-0.431-0.141l0.128-0.537l-0.07-0.296l0.135-0.509l0.422-0.354l0.165-0.07l0.732,0.394l0.202-0.043l-0.112-0.452l0.11-0.48l0.146-0.367l-0.041-0.522l0.358-0.171l0.4-0.113l0.813,0.04l0.529-1.088l0.371-0.298l0.35,0.169l0.268,0.451l0.265-0.552l0.222-0.227l0.197-0.48l0.695,0.62l0.513,0.084l0.293,0.211l0.331,0.536l0.632,0.592l0.122,0.706l-0.072,0.594l0.181,0.197l0.256-0.283l0.462-0.679l0.155-0.128l1.16,0.082l0.479,0.155l0.637,0.492l0.332,0.141l0.156-0.48l0.302-0.297l0.022-0.24l-0.266-0.324l-0.601-0.395l-0.079-0.184l0.008-0.24l0.145-0.099l0.604-0.538l0.007-0.452l0.191-0.213l0.518-0.283l0.268-0.241l0.151-0.269l-0.094-0.184l0.003-0.296l0.512-0.863l0.121-0.057l0.317-0.029l0.397-0.029l0.248-0.17l-0.205-0.409l0.377-0.396l0.344-0.071l0.793,0.366l0.616-0.072l1.291-0.088l0.512-0.128l0.232-0.17l0.04-0.057l-0.077-0.197l-0.2-0.734l-0.248-0.282l-0.471-0.268l-0.374,0.086l-0.244-0.141l0.035-0.212l0.367-0.143l0.396-0.043l0.617,0.521l0.255,0.099l0.34-0.1l0.364,0.31l0.676,0.465l0.36,0.154l1.297,0.294l0.591,0.084l0.413-0.143l0.372,0.014l0.396,0.606l0.419,0.112l0.141-0.029l0.562-0.438l0.454,0.027l0.652,0.38l0.331,0.479l0.46-0.143l0.122-0.791l0.181-0.085l0.455,0.465l0.337,0.099l0.152,0.154l-0.436,0.411l-0.126,0.424l-0.176,0.212l-0.011,0.438l-0.12,0.255l-0.513,0.015l-0.51,0.228l-0.396,0.34l-0.004,0.551l0.301,0.353l-0.187,0.692l-0.381,0.58l-0.559,0.481l-0.155,0.48l0.063,0.17l0.469,0.437l1.038,0.619l0.81,0.677l0.508,0.606l0.246,0.099l0.349-0.114l0.264,0.027l0.782,0.352l0.742,0.465l0.434,0.451l0.679,0.535l0.335,0.127l0.442,0.027l0.784,0.182l0.25,0.184l0.218,0.621l0.167,0.169l0.507,0.31l0.76,0.423l0.537,0.154l0.422-0.072l0.414-0.17l0.603-0.199l0.208-0.156l0.736-1.344l0.403-1.131l0.194-1.314l0.259-0.721l0.43-0.679l-0.131-0.424l-0.409-0.621l0.022-0.311l0.236-0.637l0.187-0.48l-0.164-0.282l-0.183-0.395l0.088-0.692l0.104-1.004l0.225-0.297l0.329-0.156l0.158-0.311l-0.534-0.521l0.033-0.198l0.576-0.947l0.312-0.934l0.072-0.833l0.191-0.241l0.279-0.297z"/>
+ <path id="UY" country:name="Uruguay" d="M270.934,276.123l0.054-0.338l-0.194-0.577l0.011-0.522l0.24-0.495l0.48-0.524l0.118-0.325l-0.168-0.986l-0.049-0.847l0.103-0.522l0.595-2.359l0.065-0.452l0.443-0.524l0.55-0.003l1.042-0.246l0.25-0.101l0.266,0.098l0.47,0.364l0.379,0.407l0.59,0.814l0.232,0.38l0.27-0.016l0.693-0.427l0.365,0.393l0.432,0.576l0.617,0.194l0.55,0.194l0.999,0.587l0.474,0.435l0.853,1.109l0.131,0.197l0.163,0.027l0.333,0.379l-0.017,0.269l-0.634,0.766l-0.103,0.269l0.258,0.746l0.101,0.313l-0.059,0.053l-0.803,1.103l-0.625,0.552l-0.775,0.454l-0.441,0.156l-0.818,0.1l-0.874-0.337l-0.551,0.044l-0.551,0.114l-0.64,0.283l-0.38-0.042l-0.846-0.676l-0.637-0.252l-0.76-0.154l-0.469,0.128l-0.507,0.072l-0.327-0.127l-0.548-0.563l-0.354-0.159z"/>
+ <path id="DK" country:name="Denmark" d="M418.763,73.869l0.391-0.499l0.389-0.262l0.283,0.081l0.663-0.062l0.762-0.075l0.324-0.137l0.891-0.787l0.979-0.2l0.224,0.025l0.198-0.219l0.175,0.032l-0.349,0.531l0.11,0.106l0.026,0.481l-0.288,0.156l-0.17,0.368l-1.675,0.069l-0.376-0.106l-0.428,0.031l-0.14-0.062l-0.239,0.081l-0.275,0.031l-0.153,0.417l-0.249,0.218l-0.353,0.118l-0.08,0.112l-0.229-0.155l-0.411-0.292z M421.68,78.002l-1.839,0.129l-0.116-0.016l0.064-0.404l-0.19-0.638l-0.174,0.015l-0.36-0.293l-0.233,0.184l-0.398-0.172l0.2-0.355l0.434-0.293l-0.007-0.181l-0.445-0.541l0.018-0.256l0.131-0.498l0.279-0.106l0.318,0.15l0.495,0.12l0.43-0.574l0.299-0.091l0.296,0.437l0.391-0.046l0.022-0.528l0.107-0.363l1.032-0.017l0.848,0.089l0.03,0.544l0.187,0.301l1.138,0.058l0.14,0.166l-0.307,0.604l-0.565,0.142l-0.119-0.261l-0.331,0.031l-0.263,0.136l0.121,0.278l-0.184,0.414l-0.312,0.077l-0.069,0.244l-0.635,0.035l0.157,0.229l-0.291,0.094l-0.191,0.24l-0.061,0.285l0.003,0.21l-0.215,0.338l0.166,0.084z M427.177,77.967l-0.139-0.149l-0.312-0.344l-0.405,0.031l-0.665-0.059l-0.123-0.329l-0.285-0.66l0.433-0.091l0.603-0.467l0.356,0.495l0.521,0.179l0.2-0.271l0.078-0.586l0.333-0.046l0.459,0.044l0.056,0.571l-0.134,0.36l-0.144,0.09l-0.413,0.286l0.603,0.299l-0.285,0.166l-0.499,0.39l-0.238,0.09z"/>
+ <path id="DE" country:name="Germany" country:shortname="Germany" d="M417.259,94.301l-0.135-0.233l0.216-0.701l-0.091-0.076l0.075-0.295l0.321-0.372l0.054-0.358l0.054-0.213l0.954-0.806l-0.605-0.193l-0.479,0.014l-0.456-0.09l-0.095-0.186l-0.233-0.007l-0.072,0.048l-0.689,0.062l-0.045-0.145l-0.395,0.055l-0.337-0.277l-0.428-0.319l-0.074-0.353l0.248-0.144l0.044-0.288l-0.466-0.096l-0.41-0.312l-0.062-0.301l0.422-0.376l-0.038-0.468l-0.282-0.365l-0.344-0.177l0.165-0.278l-0.143-0.217l-0.182-0.037l0.08-0.097l0.235-0.133l0.236-0.133l-0.193-0.121l0.201-0.275l0.095-0.148l-0.152-0.292l-0.082-0.265l-0.376-0.182l0.07-0.182l0.341-0.078l0.175-0.092l0.378,0.134l0.664-0.151l0.32-0.152l0.128-0.376l0.412-0.207l0.003-0.328l-0.16-0.17l-0.188,0.061l-0.44-0.134l0.029-0.184l0.113-0.181l0.571,0.036l0.084-0.401l0.345-0.361l-0.151-0.438l0.066-0.147l-0.465-0.192l0.126-0.43l0.285-0.181l0.371-0.028l1.12-0.062l0.293-0.012l0.095,0.16l0.195,0.271l-0.155,0.158l0.324,0.113l0.148-0.068l0.042-0.192l-0.159-0.204l0.259,0.012l0.437,0.169l-0.163-0.362l0.247-0.419l0.687,0.113l0.614-0.091l-0.596-0.17l-0.084-0.227l0.282-0.102l-0.252-0.114l-0.12-0.147l0.166-0.08l0.068-0.136l-0.675,0.08l-0.06-0.182l0.664-0.125l0.218-0.193l-0.464-0.42l-0.324-0.341l0.045-0.28l0.116,0.016l1.839-0.129l0.254,0.13l0.565,0.341l0.271,0.297l-0.02,0.228l-0.252,0.175l0.445-0.05l0.171,0.216l0.157-0.078l0.283,0.021l0.235,0.156l0.45,0.073l0.866-0.121l0.077,0.208l-0.07,0.149l-0.057,0.125l-0.665,0.295l0.316,0.193l0.649-0.136l0.113,0.182l0.457-0.006l0.349-0.391l1.059-0.136l0.602-0.234l0.757-0.266l0.249,0.113l0.396-0.17l0.184,0.182l0.085,0.159l0.634,0.29l0.182,0.074l0.526-0.12l0.156,0.12l0.059,0.34l0.036,0.227l0.154,0.102l0.354,0.125l0.372-0.022l0.028,0.13l0.201,0.025l0.319,0.835l-0.219,0.52l-0.391,0.147l-0.051,0.328l0.391,0.102l0.683,0.429l-0.217,0.395l0.094,0.18l0.312,0.146l-0.021,0.304l0.131,0.102l-0.118,0.292l-0.214,0.124l-0.007,0.191l0.325,0.27l-0.114,0.258l0.468,0.188l0.281,0.485l-0.435,0.698l-0.142,0.115l-0.344-0.072l-0.031-0.278l-0.308-0.121l-0.436,0.072l0.282,0.218l-0.254,0.084l-0.284,0.097l-0.524,0.048l-0.124,0.169l-0.735,0.024l-0.112,0.217l-0.176-0.072l-0.358,0.061l-0.097,0.229l-0.382,0.012l-0.078,0.181h-0.442l-0.422,0.201l-0.293-0.033l-0.26,0.181l-0.243,0.168l0.037,0.056l0.258,0.378l0.413,0.098l-0.155,0.25l-0.08,0.406l0.159,0.085l0.036,0.233l0.244,0.173l0.478,0.265l0.188-0.072l0.573,0.515l0.431,0.17l0.184,0.201l0.219-0.084l0.165,0.18l0.207,0.036l0.447,0.633l-0.682,0.26l-0.437-0.151l-0.132,0.027l-0.039,0.337l-0.162,0.172l-0.968,0.295l-0.364,0.227l0.538,0.571l-0.197,0.295l0.334,0.014l0.056,0.158l-0.098,0.343l-0.082,0.055l-0.441-0.178l0.049-0.165l-0.146-0.117l-0.564,0.062l-0.195-0.138l-0.433,0.035l-0.092,0.178l-1.25,0.035l-0.125,0.171l-0.319,0.014l-0.044,0.13L425.4,94.7l-0.594,0.021l-0.059-0.144l-0.093-0.145l-0.493-0.089l-0.262,0.055l-0.237-0.041l0.032,0.274l-0.452,0.343h-0.215l0.078-0.195l-0.26-0.039l0.011-0.165l-0.194-0.048l-0.104-0.137l-0.249-0.007l-0.096-0.11l-0.164,0.137l-0.368-0.014l-0.664-0.261l-0.852-0.007l-0.149-0.089l-0.199,0.014l-0.017-0.151l-0.709,0.199l0.179,0.199l-0.354,0.021l-0.278-0.11l-0.567,0.158l-0.271-0.096l-0.272,0.117l-0.271-0.089z M432.012,80.473l-0.171-0.038l-0.088-0.049l-0.447,0.08l-0.111-0.264l0.002-0.213l0.647,0.281l0.168,0.203z"/>
+ <path id="PL" country:name="Poland" d="M450.734,91.05l-0.831-0.33l-0.424-0.101l-0.104-0.216l-0.703-0.186l-0.129-0.13l-0.561,0.076l-0.508-0.041l-0.073,0.137l-0.373,0.18l-0.46-0.254l-0.483,0.046l-0.168-0.056l-0.558,0.204l-0.104,0.177l-0.149,0.135l-0.18-0.12l-0.389,0.083l-0.003-0.204l0.026-0.083l-0.066-0.18l-0.331,0.025l-0.073-0.169l-0.194-0.24l-0.261,0.024l-0.062,0.112l-0.193-0.016l-0.183,0.24l-0.43,0.048l-0.03-0.228l-0.285-0.041l-0.105-0.331l-0.382-0.096l-0.188-0.208l0.02-0.249l-0.802-0.132l-0.311-0.181l-0.368,0.161l-0.293-0.013l-0.013-0.221l0.001-0.253l-0.329,0.084l0.181-0.283l-0.709,0.005l-0.258-0.121l-0.509-0.193l-0.286-0.024l-0.003,0.145l0.282,0.302l-0.41,0.12l-0.22,0.187l-0.318-0.072l-0.296-0.38l-0.55-0.247l0.224-0.211l0.208-0.024l0.099-0.121l-0.199-0.181l-0.257-0.024l-0.061,0.066l-0.466,0.066l0.005-0.169l-0.278,0.037l-0.132-0.181l-0.568-0.054l-0.201-0.025l-0.363-0.163l-0.093-0.26l-0.211-0.091l-0.361,0.018l-0.063,0.084l0.062,0.073l-0.024,0.151h-0.375l0.435-0.698l-0.281-0.485l-0.468-0.188l0.114-0.258l-0.325-0.27l0.007-0.191l0.214-0.124l0.118-0.292l-0.131-0.102l0.021-0.304l-0.312-0.146l-0.094-0.18l0.217-0.395l-0.683-0.429l-0.391-0.102l0.051-0.328l0.391-0.147l0.219-0.52l-0.319-0.835l0.34,0.043l0.23,0.125l-0.093-0.193l0.156-0.153l-0.019-0.147l-0.166-0.13l-0.021-0.129l-0.012-0.075l0.93-0.154l0.431-0.051l0.516-0.152l1.304-0.128l0.48-0.158l0.797-0.479l1.117-0.298l1.515-0.303l1.382-0.086l1.067,0.417l-0.882-0.294l-0.054,0.147l0.256,0.172l0.132,0.466l0.355,0.135l0.648,0.061l0.645-0.11l1.063-0.409l0.054,0.004l-0.978,0.417l-0.19,0.11l-0.004,0.123l0.218,0.012l0.286-0.123l0.613-0.208l0.543-0.253l0.842,0.006l2.246,0.115l2.96-0.101l0.641-0.021l0.04,0.014l0.679,0.243l0.284,0.487l0.099,0.186l0.016,0.029l0.09,0.171l0.16,0.302l0.615,1.5l0.172,0.502l-0.023,0.236l-0.263,0.208l-0.44,0.03l-0.571,0.244l-0.291,0.328l-0.128,0.292l0.289,0.012l0.421,0.146l0.149,0.176l0.218,0.146l0.013,0.25l-0.315,0.752l0.126,0.137l0.161,0.175l-0.074,0.242l0.816,0.835l0.316,0.193l-0.298,0.048l-0.085,0.133l0.328,0.302l-0.009,0.314l-0.255,0.24l-0.429,0.013l-0.286,0.181l-0.599,0.398l-1.509,1.218l-0.082,0.306l0.044,0.552l0.349,0.383l-0.653-0.018z M431.844,80.27l0.232,0.024l0.069,0.208l-0.134-0.029l-0.168-0.203z M432.739,80.361l-0.03,0.129l-0.278-0.024l-0.191,0.03l-0.046-0.208l0.174-0.012h0.266l0.106,0.085z"/>
+ <path id="NL" country:name="Netherlands" d="M416.488,81.945l0.151,0.438l-0.345,0.361l-0.084,0.401l-0.571-0.036l-0.113,0.181l-0.029,0.184l0.44,0.134l0.188-0.061l0.16,0.17l-0.003,0.328l-0.412,0.207l-0.128,0.376l-0.32,0.152l-0.664,0.151l-0.378-0.134l-0.175,0.092l-0.341,0.078l-0.07,0.182l0.376,0.182l0.082,0.265l0.152,0.292l-0.095,0.148l-0.201,0.275l0.193,0.121l-0.236,0.133l-0.235,0.133l-0.08,0.097l0.182,0.037l0.143,0.217l-0.165,0.278l-0.672,0.024l-0.001-0.338l0.172-0.097l0.11-0.423l-0.754-0.375l-0.535,0.109l-0.292-0.375l-0.228-0.061l-0.173,0.121l-0.313-0.242l-0.267,0.182h-0.307l-0.307-0.012l0.025,0.157l-0.52,0.034l-0.407-0.042l-0.477-0.098l-0.07-0.162l-0.496-0.264l0.795-0.472l0.858-0.621l0.273-0.354l0.563-1.167l0.173-0.104l0.644-0.12l0.367,0.251l0.136,0.268l-0.28,0.203l-0.228-0.056l0.066,0.496l-0.191,0.124l1.163,0.225l0.225-0.236l0.406-0.113l0.134-0.417l-0.458-0.022l-0.123-0.124l-0.02-0.203l0.236-0.158l-0.171-0.023l-0.558-0.067l0.072-0.328l-0.034-0.13l-0.023-0.034l0.128-0.283l0.572-0.198l0.709-0.238l0.654,0.03l1.089-0.151l0.245,0.275l0.329,0.045l0.076,0.181l0.259,0z"/>
+ <path id="CZ" country:name="Czech Republic" country:shortname="Czech Repub" d="M431.57,91.965l-0.447-0.633l-0.207-0.036l-0.165-0.18l-0.219,0.084L430.349,91l-0.431-0.17l-0.573-0.515l-0.188,0.072l-0.478-0.265l-0.244-0.173l-0.036-0.233l-0.159-0.085l0.08-0.406l0.155-0.25l-0.413-0.098l-0.258-0.378l-0.037-0.056l0.243-0.168l0.26-0.181l0.293,0.033l0.422-0.201h0.442l0.078-0.181l0.382-0.012l0.097-0.229l0.358-0.061l0.176,0.072l0.112-0.217l0.735-0.024l0.124-0.169l0.524-0.048l0.284-0.097l0.254-0.084l-0.282-0.218l0.436-0.072l0.308,0.121l0.031,0.278l0.344,0.072l0.142-0.115h0.375l0.024-0.151l-0.062-0.073l0.063-0.084l0.361-0.018l0.211,0.091l0.093,0.26l0.363,0.163l0.201,0.025l0.568,0.054l0.132,0.181l0.278-0.037l-0.005,0.169l0.466-0.066l0.061-0.066l0.257,0.024l0.199,0.181l-0.099,0.121l-0.208,0.024l-0.224,0.211l0.55,0.247l0.296,0.38l0.318,0.072l0.22-0.187l0.41-0.12l-0.282-0.302l0.003-0.145l0.286,0.024l0.509,0.193l0.258,0.121l0.709-0.005l-0.181,0.283l0.329-0.084l-0.001,0.253l0.013,0.221l0.293,0.013l0.368-0.161l0.311,0.181l0.802,0.132l-0.02,0.249l0.188,0.208l0.382,0.096l0.105,0.331l-0.071-0.012l-0.065,0.066l-0.066,0.04l-0.105-0.026L442,89.998l-0.119,0.013l-0.065,0.04l-0.132,0.066l-0.053,0.079l-0.118,0.092l-0.119,0.053l-0.132,0.079l-0.105,0.013l-0.118,0.013l-0.053,0.092l-0.026,0.092l-0.026,0.132l-0.053,0.079l-0.053,0.105l-0.145,0.066l-0.105,0.04l-0.092-0.026l-0.079,0.079l-0.04,0.092l-0.053,0.079h-0.039l-0.105,0.026l-0.066,0.026l-0.079,0.053l-0.118,0.053h-0.132l-0.145,0.04l-0.093,0.026l-0.065-0.026l-0.065-0.026h-0.093l-0.065,0.026h-0.158l-0.132-0.053l-0.092-0.053l-0.093,0.026l-0.171,0.053l-0.026,0.04l-0.146,0.119l-0.092,0.066l-0.014,0.131l-0.065,0.105l-0.039,0.044l-0.055-0.095l-0.545-0.2l-1.332,0.181l-1.019-0.227l-1.374-0.341l-0.746,0.773l-0.598,0.163l-0.483-0.099l-0.354-0.129l-0.145-0.014z"/>
+ <path id="AT" country:name="Austria" d="M421.683,94.397l0.368,0.014l0.164-0.137l0.096,0.11l0.249,0.007l0.104,0.137l0.194,0.048l-0.011,0.165l0.26,0.039l-0.078,0.195h0.215l0.452-0.343l-0.032-0.274l0.237,0.041l0.262-0.055l0.493,0.089l0.093,0.145l0.059,0.144L425.4,94.7l0.377-0.103l0.044-0.13l0.319-0.014l0.125-0.171l1.25-0.035l0.092-0.178l0.433-0.035l0.195,0.138l0.564-0.062l0.146,0.117l-0.049,0.165l0.441,0.178l0.082-0.055l0.098-0.343l-0.056-0.158l-0.334-0.014l0.197-0.295l-0.538-0.571l0.364-0.227l0.968-0.295l0.162-0.172l0.039-0.337l0.132-0.027l0.437,0.151l0.682-0.26l0.145,0.014l0.354,0.129l0.483,0.099l0.598-0.163l0.746-0.773l1.374,0.341l1.019,0.227l1.332-0.181l0.545,0.2l0.055,0.095l0.053,0.093l-0.097,0.581l0.155,0.26l0.761,0.547l-0.636,0.291l-0.019,0.367l-0.701,0.054l-0.164-0.134h-0.325l-0.223,0.197l0.452,0.063l0.136,0.196l-0.157,0.206l-0.409,0.062l-0.04,0.375l0.204,0.188l-0.154,0.294l-0.346,0.299l-0.693,0.157l0.082,0.393l-0.89-0.116l-0.298,0.196l-0.85-0.08l-0.566,0.107l-0.646,0.5l-0.287-0.152l-0.612,0.009l-0.179-0.107l-1.04-0.065l-0.478-0.112l-0.894-0.082l-1.311-0.247l-0.32-0.391l-0.318-0.096l-0.023-0.363l-0.856,0.227l-0.301-0.103l-0.445,0.11l-0.183-0.083l-0.366,0.096l-0.329,0.411l-0.597-0.034l-0.631-0.171l0.029-0.171l-0.215-0.117l-0.579,0.332l-0.55-0.242l-0.008-0.144l-0.622-0.062l0.09-0.192l-0.214-0.288l0.266-0.274l-0.193-0.336z"/>
+ <path id="NG" country:name="Nigeria" d="M431.763,171.063l-0.067,0.354l0.091,0.72l0.108,0.508l0.225,0.168l0.562,0.11l0.144,0.183l0.077,0.353l-0.089,1.116l-0.146,0.227l-0.274,0.171l-0.885,0.217l-0.291,0.256l-0.664,1.275l-0.503,1.203l-0.243,1.004l-0.354,0.129l-0.369,0.03l-0.129,0.354l-0.146,1.229l-0.192,0.312l-0.385,0.045l-0.257,0.284l-0.417,0.836l-0.944,2.223l-0.304,0.624l-0.352,0.496l-0.368,0.355l-0.239,0.114l-0.145-0.056l-0.722-0.97l-0.145-0.14l-1.104-0.05l-0.272,0.03l-1.31,1.265l-0.941,0.839l-0.495,0.526l0.02,0.974l-0.189,0.552l-0.376,0.686l-0.188-0.119l-0.224-0.042l-0.176-0.127l-0.145,0.212l0.144,0.296l-0.063,0.127l-0.353,0.198l-0.56,0.03l-0.977,0.101l-0.607-0.267l-0.288,0.043l-0.271,0.368l-0.177,0.113l-0.432-0.07l-1.247-0.011l-0.528-0.225l-0.543-0.451l-0.416-0.72l-0.192-0.649l0.048-0.254l0.208-0.254l-0.144-0.296l-0.513-0.069l-0.128-0.254l-0.464-0.55l-0.561-0.465l-0.608-0.253l-0.641-0.253l-0.272-0.31l-0.513,0.072l-0.24,0.297l-0.336,0.071l-0.881,0.044l-0.659,0.03l-0.006-0.234l0.121-1.188l-0.217-1.439l0.09-0.989l0.012-0.876l-0.003-0.48l-0.002-0.381l0.237-0.397l0.257-0.03l0.433-0.13l0.078-0.368l-0.116-0.592l0.095-0.34l0.656-0.414l0.223-0.298l0.19-0.566l0.316-0.962l-0.388-0.718l-0.164-0.762l0.062-0.777l0.092-0.961l0.158-0.849l0.353-0.482l0.687-1.614l0.676-0.4l1.064-0.188l1.174-0.108l1.111,0.121l0.821,0.277l1.095,1.223l0.209,0.098l0.37-0.002l1.337-0.544l0.467-0.116l0.354,0.083l1.173,0.742l0.965,0.277l0.934-0.005l0.273-0.059l0.629-0.399l0.403-0.327l0.774-0.287l0.628-0.103l0.709-0.047l0.531,0.04l0.884,0.221l0.724,0.193l0.609,0.208l0.259-0.058l0.761-0.697l0.453-0.299l0.437-0.2l0.951-0.034l0.173,0.394l0.575,0.52l0.351,0.407z"/>
+ <path id="CM" country:name="Cameroon" d="M425.506,195.522l-1.965-0.017l-1.005,0.007l0.029-0.176l-0.208-0.536l0.271-0.989l-0.159-0.72l-0.191-0.522l-0.399-0.649l0.433-0.396l-0.287-0.367l-0.24-0.056l-0.576,0.058l-0.559-0.268l-0.176-0.324l-0.063-0.537l-0.111-0.211l-0.527-0.14l-0.101-0.064l0.376-0.686l0.189-0.552l-0.02-0.974l0.495-0.526l0.941-0.839l1.31-1.265l0.272-0.03l1.104,0.05l0.145,0.14l0.722,0.97l0.145,0.056l0.239-0.114l0.368-0.355l0.352-0.496l0.304-0.624l0.944-2.223l0.417-0.836l0.257-0.284l0.385-0.045l0.192-0.312l0.146-1.229l0.129-0.354l0.369-0.03l0.354-0.129l0.243-1.004l0.503-1.203l0.664-1.275l0.291-0.256l0.885-0.217l0.274-0.171l0.146-0.227l0.089-1.116l-0.077-0.353l-0.144-0.183l-0.562-0.11l-0.225-0.168l-0.108-0.508l-0.091-0.72l0.067-0.354l0.627,0.109l0.208,0.083l0.923,1.238l0.395,0.887l0.119,1.2l-0.134,0.651l0.169,1.228l0.205,0.578l0.381,0.633l0.208,0.21l0.047,0.127l-0.225,0.143l-0.674,0.032l-1.187-0.191l-0.481-0.082l-0.24,0.1l-0.29,0.312l-0.323,0.539l1.088,1.067l1.343,1.179l0.638,1.07l0.382,1.057l0.208,0.183l-0.208,0.114l-0.354,0.327l-0.866,1.743l-0.4,0.511l-0.528,0.399l-0.144,0.198l-0.064,0.424l0.112,0.776l0.273,1.185l0.207,0.592l0.4,0.661l0.432,0.605l0.064,0.791l0.112,0.324l1.217,1.236l0.498,0.802l0.194,0.804l0.209,0.451l-0.159,0.185l0.1,0.861l-0.271,0.086l-0.863-0.292l-0.864-0.334l-0.576-0.194l-0.56-0.124l-0.479-0.04l-0.271-0.055l-0.878,0.076l-0.863-0.023l-0.56-0.109l-1.022-0.149l-0.831-0.038l-1.773-0.088l-0.88-0.093l-0.045,0.495z"/>
+ <path id="PK" country:name="Pakistan" d="M551.793,147.278l-0.788-0.111l-0.458-0.253l-0.379-0.367l-0.248-1.101l-0.112-0.141l-0.342-0.141l-0.662-0.083l-0.105-0.07l-0.014-0.268l0.116-0.466l-0.178-0.451l-0.418-0.38l-0.294-0.013l-1.181,0.412l-1.229,0.087l-0.81,0.143l-0.947,0.073l-0.415-0.083l-0.263-0.226l-0.135-0.197l-0.909,0.143l-0.548,0.382l-0.856,0.016l-1.264-0.011l-0.691,0.128l-0.723,0.115l-0.541,0.03l0.182-0.954l0.049-0.354l0.31-0.792l0.285-0.383l0.794-0.47l0.697-0.258l1-0.077l0.209-0.072l0.188-0.255l0.036-0.974l-0.186-0.281l-0.652-0.053l-0.185-0.394l-0.111-1.34l-0.168-0.38l-0.409-0.224l-1.144-0.388l-0.695-0.391l-0.353-0.464l-0.71-1.068l-0.802-1.083l0.887,0.32l0.63,0.194l1.069,0.248l0.854,0.235l0.541,0.039l0.742,0.024l1.187-0.218l0.349-0.002l1.005,0.135l1.234-0.12l0.964-0.175l1.183-0.19l1.066-0.274l0.247-0.156l0.069-0.184l0.099-0.903l0.232-0.876l0.188-0.34l0.412-0.369l0.597-0.441l0.283-0.072l0.644,0.039l0.516,0.082l0.254-0.086l0.321-0.693l0.362-0.271l0.559-0.243l0.562,0.025l1.001,0.375l0.237-0.086l0.34-0.383l0.021-0.084l0.139-1.214l0.288-0.834l0.224-0.424l0.292-0.228l0.416-0.115l0.513-0.031l0.315-0.115l0.199-0.255l-0.088-0.437l-0.129-0.281L556.193,125l-0.35-0.336l0.355-0.129l0.997,0.122l0.698,0.039l0.513-0.215l0.289-0.255l-0.033-0.31l-0.223-0.478l0.13-0.283l0.4-0.341l0.524-0.355l0.324-0.426l-0.198-0.477l0.119-0.483l-0.232-0.171l-0.01-0.336l-0.411-0.271l-0.01-0.32l0.464-0.413l0.258-0.214l0.246,0.023l0.559-0.395l0.272-0.19l0.53-0.292l1.148-0.152l1.345-0.012l0.647,0.144l0.338-0.179l0.332,0.005l0.455-0.297l0.358-0.004l0.148-0.142l0.313,0.14l0.105,0.112l0.281-0.21l0.296,0.047l0.554,0.117l0.004,0.456l0.282-0.128l0.625-0.009l0.373,0.323l0.213,0.247l0.007,0.501l-0.312,0.516l0.301,0.07l0.198,0.218l0.252,0.281l0.52-0.196h0.239l0.104,0.199l0.178,0.09l0.565,0.436l1.337,0.104l0.305,0.111l0.147,0.126l-0.207,0.084l-0.688,0.37l-0.411,0.232l-0.155,0.43l-0.071,0.479l-0.234,0.116l-0.125-0.179l-0.621-0.102l-0.438,0.132l-0.271,0.298l-0.262-0.116l-0.557,0.265l-0.928-0.149l-0.568-0.138l-1.708-0.325l-0.894,0.265l-0.38,0.611l0.09,0.166h0.336l0.047,0.314l-0.202,0.149l0.101,0.199l0.598-0.017l-0.002,0.347l-0.384,0.099l-0.139,0.413l0.389,0.232l-0.116,0.479l-0.215,0.132l0.089,0.248l0.606,0.298l-0.003,0.532l0.782-0.003l-0.039,0.43l0.188,0.248l0.702-0.05l0.668,0.377l0.012,0.211l-0.2,0.255l-0.504,0.2l-0.643,0.196l-0.517,0.248l0.032,0.366l0.188,0.377l-0.237,0.977l-1.512,1.503l0.261,0.38l-0.358,0.281l-0.609,0.133l-0.353,0.467l-0.509,1.216l-0.478,0.547l-1.193,0.496l-0.177,0.364l-0.277,0.481l-0.563,0.61l-0.076,0.38l-0.71,0.259l-0.734-0.011l-0.895,0.314l-0.361-0.094l-0.158-0.518l-0.207-0.132l-0.404,0.083l-0.535,0.463l-0.144,0.446l-0.979,0.893l-0.186,0.543l-0.079,0.269l0.116,0.38l0.541,0.163l0.504,0.085l0.425,0.014l-0.114,0.689l-0.154,0.735l0.412,0.411l0.33,0.099l0.537-0.099l0.112,0.441l0.216,0.507l0.654,1.333l-0.232,0.149l0.241,0.463l-0.317,0.066l-0.15,0.248l-0.55,0.083l-0.145-0.335l-0.183-0.062l-0.78,0.215l-0.2,0.331l-0.735-0.099l-0.229-0.149l-0.835-0.021l-0.835-0.009l-0.259-0.052l0.015,0.728l-0.866,0.017l-0.296,0.431l-0.37,0.036z"/>
+ <path id="IN" country:name="India" d="M606.155,150.953l-0.037-0.466l-0.627-2.479l-0.064-0.578l-0.4,0.044l-0.281,0.115l-0.395,1.159l-0.224,0.354l-0.529-0.448l-0.249-0.267l-0.23-0.281l-0.001-0.381l-0.009-0.522l0.131-0.283l0.651-0.356l0.498-0.13l0.938-0.767l0.159-0.34l0.012-0.79l-0.057-0.127l-0.111-0.098l-2.473-0.198l-0.559,0.003l-0.916,0.062l-0.547-0.053l-0.537-0.109l-0.095-0.099l-0.079-0.719l-0.053-0.479l-0.129-0.324l-0.417-0.054l-0.489,0.06l-0.372-0.266l-0.339-0.266l-1.252-0.303l-0.234,0.171l-0.555,0.525l-0.124,0.283l0.083,0.155l0.494,0.237l1.224,0.938l0.126,0.112l-0.047,0.155l-0.382,0.101l-0.502,0.13l-0.4,0.299l-0.548,0.61l0.339,0.323l1.042,0.431l0.193,0.21l-0.029,0.269l-0.505,0.765l0.04,0.254l0.352,0.45l0.325,1.409l0.402,1.775l0.147,0.532l-0.172,0.322l0.068,0.183l-0.321,0.071l-0.35-0.056l-0.148-0.706l-0.198-0.084l-0.253,0.354l-0.171,0.354l-0.172,0.057l-0.115-0.099l-0.28-0.592l-0.152-0.169l-0.412,0.537l-0.504,0.298l-0.992,0.397l-0.571,0.213l-0.264,0.226l-0.05,0.113l0.106,0.579l0.183,0.409l-0.336,0.495l-0.305,0.332l-0.013,0.257l-0.548,0.415l-0.593,0.467l-0.467,0.185l-0.432,0.057l-0.746,0.206l-0.591,0.362l-0.459,0.58l-0.551,0.552l-0.88,1.061l-0.611,0.552l-0.673,0.276l-0.675,0.829l-0.676,0.467l-0.728,0.368l-0.452,0.241l-0.427,0.312l-0.192,0.509l-0.073,0.466l-0.341,0.41l-0.649,0.298l-0.428,0.058l-0.506-0.098l-0.258,0.269l-0.366,0.887l-0.277,0.23l-0.505-0.253l-0.614,0.142l-0.354,0.283l-0.304,0.565l-0.165,0.48l-0.005,0.508l0.166,1.539l0.018,0.805l-0.208,0.495l0.227,0.324l0.315,0.423l-0.015,0.508l-0.199,0.607l-0.669,1.611l-0.341,0.834l-0.13,0.636l0.047,0.649l0.21,1.764l-0.081,0.24l-0.643,0.001l-0.433-0.013l-0.186,0.142l-0.334,0.961l-0.324,0.594l0.025,0.127l0.493,0.352l-0.805,0.327l-0.306,0.015l-0.77,0.284l-0.295,0.41l-0.101,0.692l-0.157,0.255l-0.367,0.283l-0.526,0.255l-0.099,0.057l-0.066,0.042l-0.231,0.156h-0.145l-0.174-0.056l-1.417-1.451l-0.092-0.395l-0.276-0.522l-0.34-1.397l-0.689-1.792l-0.94-1.933l-0.979-1.508l-0.554-1.722l-0.507-1.792l-0.738-1.636l-0.82-1.42l-0.424-0.737l-0.598-1.439l-0.363-1.157l-0.767-3.274l-0.469-2.695l-0.157-1.566l-0.051-0.24l0.232-0.565l0.546-0.834l0.007-0.311l-0.404-0.281l-0.367-0.437l-0.113-0.635l-0.108-0.917l0.065-0.622l-0.837,0.03l-0.19,0.212l-0.235,0.424l0.009,0.183l0.276,0.254l0.074,0.183l-0.073,0.438l-0.301,0.438l-0.503,0.368l-0.812,0.369l-0.504,0.114l-0.617,0.255l-0.377,0.015l-0.861-0.281l-0.572-0.38l-1.018-1l-1.391-1.268l-0.516-0.705l0.267-0.043l1.062,0.125l0.615-0.086l0.443-0.142l0.461-0.283l0.521-0.608l-0.067-0.24l-0.156,0.071l-0.587,0.114l-0.847-0.026l-0.607-0.112l-0.632-0.132l-0.5-0.218l-0.203-0.07l-0.929-0.661l-0.668-0.775l-0.057-0.197l0.37-0.036l0.296-0.431l0.866-0.017l-0.015-0.728l0.259,0.052l0.835,0.009l0.835,0.021l0.229,0.149l0.735,0.099l0.2-0.331l0.78-0.215l0.183,0.062l0.145,0.335l0.55-0.083l0.15-0.248l0.317-0.066l-0.241-0.463l0.232-0.149l-0.654-1.333l-0.216-0.507l-0.112-0.441L557,143.058l-0.33-0.099l-0.412-0.411l0.154-0.735l0.114-0.689l-0.425-0.014l-0.504-0.085l-0.541-0.163l-0.116-0.38l0.079-0.269l0.186-0.543l0.979-0.893l0.144-0.446l0.535-0.463l0.404-0.083l0.207,0.132l0.158,0.518l0.361,0.094l0.895-0.314l0.734,0.011l0.71-0.259l0.076-0.38l0.563-0.61l0.277-0.481l0.177-0.364l1.193-0.496l0.478-0.547l0.509-1.216l0.353-0.467l0.609-0.133l0.358-0.281l-0.261-0.38l1.512-1.503l0.237-0.977l-0.188-0.377l-0.032-0.366l0.517-0.248l0.643-0.196l0.504-0.2l0.2-0.255l-0.012-0.211l-0.668-0.377l-0.702,0.05l-0.188-0.248l0.039-0.43l-0.782,0.003l0.003-0.532l-0.606-0.298l-0.089-0.248l0.215-0.132l0.116-0.479l-0.389-0.232l0.139-0.413l0.384-0.099l0.002-0.347l-0.598,0.017l-0.101-0.199l0.202-0.149l-0.047-0.314h-0.336l-0.09-0.166l0.38-0.611l0.894-0.265l1.708,0.325l0.568,0.138l0.928,0.149l0.557-0.265l0.262,0.116l0.271-0.298l0.438-0.132l0.621,0.102l0.125,0.179l0.234-0.116l0.071-0.479l0.155-0.43l0.411-0.232l0.688-0.37l0.207-0.084l0.502-0.152v0.515l0.441,1.03l0.221,0.515l0.81,0.11l0.441,0.405l0.221,0.258l-0.331,0.221l-0.184,0.184l0.073,0.589l0.037,0.552l0.294,0.221l0.718,0.096l0.092,0.078l0.044,0.182l0.68,0.099l-0.104,0.414l0.367,0.694l-0.578,0.364l-0.376,0.281l-0.368,0.049l-0.337-0.264l-0.033-0.364l-0.785,0.198l0.157,0.694l0.579,0.595l-0.104,0.446l0.272,0.364l-0.215,0.215l0.099,0.43l0.198,0.066l0.477-0.314l0.383,0.248l0.772,0.843l0.363-0.116l1.078,0.579l-0.116,0.364l0.756,0.248l0.154-0.066l0.859,0.596l-1.07,0.909l-0.281,0.116l0.008,0.364l-0.221,0.265l0.04,0.396l-0.309,0.397l-0.218,0.43l0.039,0.248l0.63,0.38l0.466-0.083l0.665,0.479l0.704,0.149l0.305,0.529l1.242,0.678l0.231-0.166l1.027,0.595l0.538-0.066l0.182,0.397l0.835,0.166l0.304,0.198l0.15-0.066l0.087-0.215h0.503l0.482,0.265l0.582-0.347l0.494,0.298l0.643,0.066l0.142,0.231l-0.101,0.446l0.663,0.149l0.286,0.281l0.618,0.265l0.584-0.281l0.313,0.066l-0.034,0.331l0.312,0.248l0.379-0.231l0.721,0.148l0.847,0.364l0.606-0.297l0.268,0.364l0.399,0.116l0.357-0.132l0.271,0.083l0.687-0.132l0.336,0.05l0.311-0.694l-0.429-0.827l0.07-0.876l0.318-0.761l-0.037-0.022l0.345-0.129l0.471-0.102l0.231,0.069l0.139,0.183l-0.052,0.861l0.212,0.662l-0.092,0.113l0.235,0.493l0.637,0.18l0.559,0.081l0.869,0.214l0.085,0.021l0.544-0.074l0.531-0.313l0.301,0.055l0.335,0.125l1.238,0.063l1.036-0.062l0.624-0.06l0.217-0.58l-0.017-0.282l-0.258-0.238l-0.313-0.069l-0.326-0.294l-0.042-0.24l0.07-0.156l0.189-0.1l0.784-0.033l0.714-0.216l0.397-0.27l1.123-1.107l0.543-0.37l0.829-0.258l1.105-0.726l0.546-0.299l0.355-0.087l0.286,0.167l0.975,0.319l0.377-0.044l1.377-0.84l0.455,0.392l0.716,0.715l0.046,0.38l-0.354,0.454l-0.138,0.269l0.102,0.056l0.3,0.055l0.657,0.081l0.73,0.179l0.624,0.081l-0.018,0.508l-0.112,0.24l-0.596,0.582l-0.072,0.283l0.184,0.718l-0.295,0.058l-0.853-0.221l-0.558-0.082l-0.312,0.129l-0.719,0.512l-1.446,0.883l-0.197,0.354l0.057,0.761l-0.136,0.382l-0.938,1.134l-0.045,0.212l0.192,0.408v0.324l-1.148,2.25l-0.17,0.128l-0.309-0.013l-0.391-0.11l-0.811-0.32l-0.133,0.283l0.146,1.594l-0.191,0.354l-0.401,0.144l-0.228,0.185l0.152,0.93l-0.015,0.678l-0.273,0.368l-0.25,0.129l-0.255-0.14l-0.595-0.152z"/>
+ <path id="JO" country:name="Jordan" d="M478.516,135.173l0.052-0.292l-0.049-0.169l-0.197-0.107l0.107-0.175l0.292-0.919l-0.015-0.818l0.517-1.09l0.3-0.891l-0.004-0.409l0.133-0.283l0.07-0.749l0.033-0.847l0.062-0.174l0.026-0.278l-0.065-0.411l0.037-0.119l0.102-0.063l1.902,1.034l0.365,0.167l0.253-0.016l1.139-0.656l2.96-1.541l0.161-0.071l0.87,1.632l0.311,0.69l0.093,0.056l-0.46,0.44l-0.257,0.171l-0.97,0.26l-2.586,0.622l-0.646,0.229l1.146,1.32l0.698,0.885l-0.765,0.724l-0.456,0.37l-0.24,0.072l-1.249,0.332l-0.462,0.61l-0.975,0.782l-2.079-0.299l-0.154-0.017z"/>
+ <path id="LY" country:name="Libya" d="M456.028,151.46l-0.021,1.003l0.033,3.078l-0.088,0.17l-1.561-0.019l-0.52-0.011l-0.073,1.13l-1.981-0.963l-5.577-2.792l-4.941-2.372l-5.231-2.554l-0.41,0.059l-1.818,0.858l-1.519,0.729l-0.231,0.157l-1.192-0.911l-0.258-0.182l-1.008-0.333l-1.646-0.442l-0.832-0.137l-0.098-0.07l-0.86-1.506l-0.178-0.168l-1.028-0.347l-0.702-0.165l-0.544,0.201l-0.244-0.154l-0.562-0.873l-0.249-0.917l-1.272-1.702l0.152-0.283l0.249-0.128l0.666-0.47l0.086-0.17l0.061-0.664l-0.457-1.156l0.158-0.495l0.16-0.622l-0.101-0.748l0.1-0.862l-0.052-0.691l-0.147-0.833l-0.88-1.605l0.241-0.383l0.204-0.156l0.22-0.143l0.864-0.598l0.155-0.227l0.147-0.537l-0.274-0.973l0.126-0.354l1.473-1.138l0.579-0.314l0.802-0.428l0.093-0.269l-0.064-0.564l0.093-0.981l1.436,0.59l0.995,0.309l0.521,0.013l0.863-0.129l0.604,0.027l1.552,0.223l0.614,0.479l0.794,0.224l0.486-0.001l0.342,0.197l0.173,0.226l0.26,0.819l0.39,0.564l0.688,0.591l0.378,0.126l0.678,0.14l1.031,0.083l0.447,0.07l0.973,0.224l0.639,0.224l0.552,0.281l1.289,0.788l0.84,0.464l0.465,0.013l0.441-0.128l0.758-0.411l0.706-0.623l0.3-0.523v-0.254l-0.276-0.621l-0.112-0.579l0.044-0.41l0.237-0.537l0.661-0.58l0.333-0.198l0.554-0.241l0.644-0.298l1.376-0.413l1.205,0.054l0.728,0.154l0.844,0.365l0.188,0.169l0.043,0.508l0.281,0.253l0.301,0.014l0.945,0.125l0.712,0.309l0.45,0.027l1.286,0.04l0.302,0.197l0.068,0.381l0.276,0.296l-0.099,0.208l-0.369,0.228l-0.21,0.34l0.354,1.283l-0.231,0.425l-0.322,0.553l-0.056,0.311l0.185,0.945l0.388,0.916l0.042,0.367l-0.015,0.988l-0.019,3.869l-0.016,1.468l-0.008,2.048l-0.001,0.692l0.045,2.81l-0.021,1.342l0.011,2.612z"/>
+ <path id="IL" country:name="Israel" d="M478.212,134.714l-0.834-1.746l-0.796-1.944l-0.124-0.289l0.109-0.066l0.679-0.851l0.219-0.438l0.183-0.507l0.171-0.566l0.188-0.822l0.116,0.018l0.137-0.093l0.006-0.204l0.028-0.315l0.372-0.051l0.151,0.022l0.07,0.099l0.355-0.07l0.009-0.167l0.067-0.193l0.088-0.041l0.07,0.023l0.183,0.346l0.201,0.128l0.021,0.183l-0.047,0.122l0.082,0.085l-0.102,0.063l-0.037,0.119l0.065,0.411l-0.026,0.278l-0.062,0.174l-0.033,0.847l-0.07,0.749l-0.133,0.283l0.004,0.409l-0.3,0.891l-0.517,1.09l0.015,0.818l-0.292,0.919l-0.107,0.175l-0.067,0.068l-0.042,0.042z"/>
+ <path id="SA" country:name="Saudi Arabia" d="M495.751,163.817l-0.03-0.184l-0.112-0.537l-0.508-0.945l-0.73-0.987l-0.438-0.493l-0.846-0.69l-0.51-0.875l-0.814-1.876l-0.474-0.889l-0.28-0.409l-0.794-0.507l-1.271-0.689l-0.527-0.634l-0.8-1.17l-0.081-0.96l-0.061-0.776l-0.002-0.89l-0.104-0.381l-0.312-0.663l-0.944-1.65l-0.357-0.494l-0.758-0.62l-0.459-0.225l-0.499-0.126l-0.308-0.282l-0.483-0.578l0.149-0.692l-0.111-0.437l-0.474-0.818l-0.747-1.072l-0.793-0.902l-1.069-1.494l-0.525-0.931l-0.352-0.479l-0.722-0.761l-0.524-0.056l-0.248,0l0.077-0.296l0.193-0.283l0.311-1.314l0.104-0.583l0.154,0.017l2.079,0.299l0.975-0.782l0.462-0.61l1.249-0.332l0.24-0.072l0.456-0.37l0.765-0.724l-0.698-0.885l-1.146-1.32l0.646-0.229l2.586-0.622l0.97-0.26l0.257-0.171l0.46-0.44l0.093,0.056l1.129,0.459l0.757,0.222l2.034,0.934l1.14,0.473l2.44,1.101l0.258,0.196l0.399,0.633l0.141,0.07l0.973-0.048l0.135,0.366l-0.118,0.396l0.047,0.818l0.118,0.253l0.812,0.277l1.557,0.697l4.048,0.132l1.657,0.259l0.408,0.054l0.334,0.619l0.185,0.239l1.07,0.05l0.644-0.044l0.043,0.121l0.277,0.648l0.365,0.494l0.178,0.663l0.052,0.113l0.615-0.029l0.248,0.126l-0.204,0.237l0.194,0.187l0.184,0.282l0.234,0.067l0.234,0.27l0.886,0.168l0.423,0.437l-0.07,0.28l-0.235,0.035l-0.111,0.25l0.316,0.381l-0.188,0.593l-0.122,0.198l0.165,0.268l0.302,0.666l0.149-0.117l0.372,0.282l0.105,0.616l0.422,0.696l-0.028,0.423l0.222,0.268l0.16,0.197l0.287,0.084l0.136-0.007l0.336,0.083l1.043,2.198l0.548,1.154l0.261,0.902l3.362,0.375l3.387,0.446l0.839,0.108l0.584-0.469l0.152-0.057l0.581,0.914l0.155,1.453l-5.346,2.982l-2.35,1.213l-1.691,0.815l-0.169,0.085l-1.148,0.346l-3.097,1.035l-4.618,1.566l-0.484,0.229l-0.041,0.127l-0.383,0.397l-1.907,2.271l-2.042,2.667l-1.302-2.703l-1.211-2.45l-0.452-0.012l-0.715,0.047l-0.446-0.125l-0.671-0.151l-0.216,0.1l-0.174,0.185l-0.11,0.495l0.041,0.678l-0.113,0.565l-0.692,0.563z"/>
+ <path id="EG" country:name="Egypt" d="M476.458,130.735l0.124,0.289l0.796,1.944l0.834,1.746l-0.38,0.381l-0.479,1.145l-0.334,1.413l-0.171,0.593l-0.18,0.156l-0.407-0.07l-0.448-0.521l-0.782-0.676l-0.386-0.494l-0.338-0.988l-0.521-0.45l-0.289-0.621l-0.17-0.479l-0.198-0.353l-0.466,0.17l-0.267,0.523l0.604,1.34l0.131,0.381l0.634,0.86l0.933,1.042l0.473,1.199l0.526,0.973l0.277,0.818l0.391,0.465l0.912,1.735l1.072,1.904l0.428,0.705l0.586,0.549l0.451,0.352l0.151,0.183l-0.241,0.17l-0.285,0.1l-0.043,0.155l0.238,1.087l0.252,0.467l0.127,0.238l0.812,0.591l0.397,0.168l0.406,0.521l0.416,0.38l0.311,0.56l-10.382-0.006l-2.138-0.001l-2.774,0.002l-2.513,0.015l-2.268-0.029l-1.664,0.01l-1.241,0.007l-1.614-0.019l-0.914,0.005l-0.819,0.089l-0.011-2.612l0.021-1.342l-0.045-2.81l0.001-0.692l0.008-2.048l0.016-1.468l0.019-3.869l0.015-0.988l-0.042-0.367l-0.388-0.916l-0.185-0.945l0.056-0.311l0.322-0.553l0.231-0.425l-0.354-1.283l0.21-0.34l0.369-0.228l0.099-0.208l0.337,0.168l0.553-0.015l0.628-0.1l0.786-0.001l1.513,0.293l0.587,0.115l0.779,0.122l0.721,0.154l0.348,0.409l0.4,0l0.928,0.083l0.998,0.394l0.628,0.069l0.245-0.127l0.72-0.538l0.925-0.397l0.837-0.186l0.78-0.27l0.375-0.072l0.346,0.056l0.535-0.001l0.723,0.126l0.202,0.465l0.596,0.366l0.518-0.156l0.64,0.267l0.382,0.027l0.561-0.401l0.241,0.179l0.277,0.056l0.674,0.13l0.338-0.062l0.46-0.165l0.51-0.308z"/>
+ <path id="NP" country:name="Nepal" d="M580.625,132.873l0.24,0.43l0.299,0.05l0.276-0.314l0.134-0.513l0.275,0.066l0.186-0.182l1.079,0.199l0.132,0.612l0.867,0.264l0.726,0.595l0.472,0.215l0.15-0.132l0.454,0.281l0.657,0.794l0.158-0.166l0.71-0.116l0.289,0.166l0.178,0.38l-0.069,0.281l1.451,0.893l0.333-0.248l0.326,0.017l-0.175,0.396l0.014,0.265l0.935,0.066l0.365-0.066l0.54,0.496l0.141,0.463l0.237-0.099l-0.01-0.364l0.685,0.38l0.271-0.083l0.08-0.331h0.407l0.63,0.281l0.319,0.364l0.849-0.066l0.341,0.116l0.339-0.281l0.655,0.159l0.037,0.022l-0.318,0.761l-0.07,0.876l0.429,0.827l-0.311,0.694l-0.336-0.05l-0.687,0.132l-0.271-0.083l-0.357,0.132l-0.399-0.116l-0.268-0.364l-0.606,0.297l-0.847-0.364l-0.721-0.148l-0.379,0.231l-0.312-0.248l0.034-0.331l-0.313-0.066l-0.584,0.281l-0.618-0.265l-0.286-0.281l-0.663-0.149l0.101-0.446l-0.142-0.231l-0.643-0.066l-0.494-0.298l-0.582,0.347l-0.482-0.265h-0.503l-0.087,0.215l-0.15,0.066l-0.304-0.198l-0.835-0.166l-0.182-0.397l-0.538,0.066l-1.027-0.595l-0.231,0.166l-1.242-0.678l-0.305-0.529l-0.704-0.149l-0.665-0.479l-0.466,0.083l-0.63-0.38l-0.039-0.248l0.218-0.43l0.309-0.397l-0.04-0.396l0.221-0.265l-0.008-0.364l0.281-0.116l1.07-0.909z"/>
+ <path id="MR" country:name="Mauritania" d="M374.125,167.166l-1.41-0.924l-0.661-0.604l-0.537-0.788l-0.292-0.662l-0.15-0.183l-0.312-0.154l-0.567-0.053l-0.655-0.307l-0.695-0.561l-0.604-0.194l-0.567-0.025l-1.209,0.12l-1.821,0.194l-0.523,0.417l0.06-0.502l0.563-1.301l0.188-0.819l0.13-1.13l-0.162-1.101l-0.3-0.791l-0.624-0.747l0.267-0.283l0.182-0.424l0.067-0.975l-0.065-0.537l-0.174-0.353l-0.808-0.817l-0.297-0.112l-0.393,0.438l-0.055-0.197l-0.013-0.381l0.08-0.689l0.474,0.013l5.055,0.056l2.396,0.014l0.732-0.033l0.212,0.027l-0.051-1.102l-0.164-1.539l0.01-0.707l0.249-0.383l0.575-0.427l0.726-0.315l0.809-0.287l0.144-0.128l0.099-2.6l0.07-2.261l0.047-0.509l0.557-0.074l6.005,0.022l0.56,0.011l0.104-0.396l-0.002-0.65l0.03-1.752l2.829,1.509l4.12,2.42l1.414,0.91l-0.523,0.13l-3.231,0.089l0.049,0.776l0.908,7.962l0.19,1.468l0.178,1.736l0.325,2.753l0.202,2.386l0.186,1.468l0.724,0.787l-0.379,1.613l-6.457,0.01l-1.953,0.026l-0.945,0.344l-0.387,0.031l-0.485-0.054l-0.713-0.137l-0.535-0.124l-0.06,0.212l0.055,0.296l-0.107,0.269l-0.454-0.082l-0.214-0.168l-0.568-0.83l-0.261-0.111l-0.402,0.073l-0.252,0.256l-0.181,0.552l-0.018,0.607l-0.332,0.284z"/>
+ <path id="SD" country:name="Sudan" d="M476.114,191.139l-0.563,0.54l-0.626,0.314l-0.367,0.016l-0.303-0.196l-0.303-0.097l-0.88,0.132l-0.881,0.33l-0.911,0.048l-0.942-0.234l-0.495-0.011l-0.464,0.087l-0.496,0.229l-1.288-1.32l-1.032-0.926l-0.207-0.083l-0.258,0.157l-0.436,0.582l-0.16,0.1l-0.684-0.631l-0.384-0.012l-0.529,0.37l-0.258,0.242l-0.352,0.016l-0.366-0.195l-0.525-0.477l-0.348-0.493l-0.795-0.772l-0.143-0.239l-0.031-0.07l0.083-0.679l-0.157-0.352l-0.558-0.477l-0.814-0.165l-0.367-0.224l-0.285-0.436l-0.059-0.72l-0.206-0.366l-0.207-0.168l-0.717-0.434l-0.558-0.378l-0.445-0.351l-0.173-0.395l0.148-0.481l-0.223-0.267l-0.351-0.196l-0.799-0.235l-0.797-0.447l-0.223-0.225l-0.252-0.493l-0.207-0.126l-0.272,0.001l-0.802,0.019l-0.158-0.211l-0.01-0.664l0.416-1.472l-0.122-0.536l-0.347-0.549l-1.342-1.673l0.15-0.425l-0.026-0.367l-0.266-0.465l-0.444-0.407l-0.155-0.295l-0.137-0.522l-0.221-1.228l-0.141-0.225l-0.338-0.012l-0.517,0.088l-0.219-0.352l0.316-0.609l0.542-0.596l0.087-0.34l-0.342-0.662l0.053-0.24l0.718-0.428l0.149-0.212l-0.131-0.677l0.122-0.438l0.583-0.809l0.417-1.245l0.229-0.143l1.245-0.05l0.839,0.009l0.04-0.283l-0.031-1.229l-0.036-1.002l0.038-0.749l-0.085-2.5l0.036-0.636l0.016-0.946l0.02-1.045l0.073-1.13l0.52,0.011l1.561,0.019l0.088-0.17l-0.033-3.078l0.021-1.003l0.819-0.089l0.914-0.005l1.614,0.019l1.241-0.007l1.664-0.01l2.268,0.029l2.513-0.015l2.774-0.002l2.138,0.001l10.382,0.006l0.229,0.414l0.499,1.115l0.281,3.501l0.319,1.637l0.182,0.211l0.625,0.394l0.595,0.366l0.617,0.507l0.491,0.197l0.254,0.223l-0.238,0.199l-0.277,0.327l-0.306,0.566l-0.369,0.242l-0.511,0.172l-0.427,0.116l-0.153,0.142l-0.235,0.496l-0.348,0.171l-0.73,0.033l-0.204,0.552l-0.038,0.452l-0.202,0.862l-0.242,0.722l-0.541,1.302l-0.068,0.495l0.092,0.903l-0.013,0.679l-0.001,0.083l-0.148,0.947l-0.398,1.231l-0.214,1.061l-1.04,0.331l-0.414,0.37l-0.693,1.134l-0.154,0.34l-0.191,1.088l-0.141,1.074l-0.197,0.185l-0.274,0.044l-0.431-0.096l-0.259,0.072l-0.163,0.114l-0.187,1.103l-0.115,0.933l-0.2,1.272l0.039,0.522l-0.229,1.159l-0.469,0.299l-0.288-0.012l-0.928-0.122l-0.321,0.03l-0.188,0.806l-0.054,0.466l0.094,0.141l0.479,0.11l0.734,0.123l0.334,0.167l0.805,0.913l1.06,1.067l0.751,1.464l0.345,0.732l0.348,0.421l0.462,0.28l0.415,0.097l0.269,0.309l0.117,0.988l-0.034,0.17l-0.018,0.141l-0.079-0.028l-0.464,0.017l-1.009,0.133l-0.832,0.005l-0.671-0.052l-0.291,0.327l-0.678,0.795z"/>
+ <path id="YE" country:name="Yemen" d="M518.402,163.079l-0.282,0.097l-0.538,0.27l-0.656,0.566l-0.265,0.297l-0.166,0.508l-0.062,0.41l-0.41,0.326l-1.418,0.652l-2.27,0.641l-1.285,0.412l-0.843,0.312l-0.356,0.297l-0.473,0.622l-0.436,0.269l-0.506,0.114l-0.593-0.069l-0.521,0.072l-0.83,0.439l-0.65,0.396l-0.956,0.397l-0.752,0.199l-1.16,0.003l-0.562-0.013l-0.297,0.128l-0.386,0.312l-0.272,0.297l-0.45,0.312l-0.511,0.241l-0.389,0.043l-0.239-0.042l-0.535,0.411l-0.839,0.058l-0.494-0.112l-0.623-0.437l-0.17-0.155l-0.317-0.437l-0.084-0.254l0.18-0.721l-0.081-0.635l-0.312-0.507l-0.341-1.171l-0.572-1.919l-0.072-0.438l0.268-0.707l-0.124-0.748l0.692-0.563l0.113-0.565l-0.041-0.678l0.11-0.495l0.174-0.185l0.216-0.1l0.671,0.151l0.446,0.125l0.715-0.047l0.452,0.012l1.211,2.45l1.302,2.703l2.042-2.667l1.907-2.271l0.383-0.397l0.041-0.127l0.484-0.229l4.618-1.566l3.097-1.035l1.148-0.346l0.169-0.085l0.092,0.663l0.226,0.634l0.604,0.971l0.933,1.364l0.127,0.253l-0.006,0.296l0.483,0.689l0.241,0.306z"/>
+ <path id="ER" country:name="Eritrea" country:shortname="Eritrea" d="M494.64,172.627l-0.261-0.166l-0.476-0.633l-0.475-0.159l-0.437-0.911l-1.267-0.792l-0.277-0.594l-0.673-0.673l-0.594-0.119l-0.871-0.554l-0.555,0.079l-0.158-0.158l-0.237,0.04l-0.277-0.198l-0.356,0.159l-0.476,0.079l-0.277-0.436l-0.158,0.237l-0.436,0.198l-0.792,0.079l-0.554-0.594h-0.238l-0.396-0.317l-0.832,1.663l-0.436-0.871l-0.475,0.079l-0.277,0.356l-0.396-0.08l-0.349,0.041l0.013-0.679l-0.092-0.903l0.068-0.495l0.541-1.302l0.242-0.722l0.202-0.862l0.038-0.452l0.204-0.552l0.73-0.033l0.348-0.171l0.235-0.496l0.153-0.142l0.427-0.116l0.511-0.172l0.369-0.242l0.306-0.566l0.277-0.327l0.238-0.199l0.098,0.129l0.718,2.102l0.442,1.623l0.689,1.919l0.618,0.832l0.205-0.212l-0.072-0.479l0.093-0.226l0.31,0.253l0.4,0.677l0.384,0.395l0.534-0.043l0.242,0.014l1.338,1.282l0.809,0.916l0.124,0.099l0.706,0.055l0.618,0.874l0.021,0.24l-0.025,0.198l0.118,0.212l0.507,0.182l0.915,0.869l-0.075,0.094l-0.529,0.78l-0.331-0.182l-0.396-0.125l-0.214,0.114l-0.055,0.085z"/>
+ <path id="SG" country:name="Senegal" d="M370.147,172.035l-2.301-0.043l-1.045,0.006l-0.505,0.384l-0.51,0.187l-0.74-0.024l-0.819,0.047l-0.463,0.139l-0.009-0.003l-0.278-0.226l-0.169-0.409l0.104-0.424l-0.095-0.55l-0.018-0.198l0.001-0.046l1.695,0.014v-0.434h0.155l0.341-0.016l0.186-0.077l0.248,0.062l0.294-0.046l0.124-0.093l0.016-0.263l0.077-0.078l0.14-0.016l0.155,0.155l0.232,0.124l0.356,0.108l0.046,0.108l0.139,0.047l0.217-0.031l0.263,0.108l0.186,0.17h0.434l0.186-0.108l0.263-0.108h0.279l0.108-0.124l0.016-0.124l-0.155-0.217l-0.202-0.077l-0.201,0.031l-0.294,0.093l-0.108,0.093l-0.248,0.062l-0.279-0.186l-0.031-0.186l-0.186-0.108l-0.17-0.015l-0.186,0.124l-0.139-0.108l-0.108-0.217l-0.155-0.108l-0.201,0.031l-0.17-0.062l-0.387,0.17l-0.108-0.108l-0.155,0.046l-0.202,0.124l-0.093,0.294h-1.664l-0.007-0.067l-0.028-0.269l-0.377-0.268l-0.068-0.155l-0.057-0.367l-0.386-0.635l-0.399-0.494l-0.379-0.31l-0.472-0.183l0.54-0.34l0.723-0.75l0.588-1.004l0.334-0.82l0.099-0.826l0.523-0.417l1.821-0.194l1.209-0.12l0.567,0.025l0.604,0.194l0.695,0.561l0.655,0.307l0.567,0.053l0.312,0.154l0.15,0.183l0.292,0.662l0.537,0.788l0.661,0.604l1.41,0.924l-0.506,0.399l-0.057,0.339l0.251,1.1l0.144,0.663l0.22,0.479l0.181,0.197l0.554,0.322l0.265,0.337l0.082,0.833l-0.004,0.565l-0.062,0.142l-0.146-0.042l-0.963,0.091l-0.658,0.074l-0.725-0.081l-0.503-0.209l-0.795-0.32l-1.255-0.021z"/>
+ <path id="ET" country:name="Ethiopia" d="M495.973,175.881l-0.363,0.807l0.083,0.409l0.428,0.732l0.587,0.844l0.732,0.801l0.596,0.547l0.634,0.321l0.54,0.209l4.26,1.443l1.447,0.472l1.875-0.04l0.236,0.154l-4.087,4.205l-1.562,1.69l-0.813,0.909l-0.8,0.004l-1.693-0.046l-0.626,0.088l-0.562,0.215l-0.388,0.214l-0.502,0.497l-0.294,0.426l-0.337,0.115l-1.216,0.078l-0.305,0.101l-0.453,0.511l-1.103-0.106l-0.461-0.181l-0.46-0.336l-0.271-0.098l-0.852,0.358l-0.675,0.343l-0.258,0.199l-0.71,0.753l-0.16,0.114l-0.847-0.094l-0.67-0.193l-1.373-0.133l-0.335-0.041l-2.353-1.525l-0.604-0.293l-0.749-0.193l-1.054-0.149l-0.319-0.069l0.018-0.141l0.034-0.17l-0.117-0.988l-0.269-0.309l-0.415-0.097l-0.462-0.28l-0.348-0.421l-0.345-0.732l-0.751-1.464l-1.06-1.067l-0.805-0.913l-0.334-0.167l-0.734-0.123l-0.479-0.11l-0.094-0.141l0.054-0.466l0.188-0.806l0.321-0.03l0.928,0.122l0.288,0.012l0.469-0.299l0.229-1.159l-0.039-0.522l0.2-1.272l0.115-0.933l0.187-1.103l0.163-0.114l0.259-0.072l0.431,0.096l0.274-0.044l0.197-0.185l0.141-1.074l0.191-1.088l0.154-0.34l0.693-1.134l0.414-0.37l1.04-0.331l0.214-1.061l0.398-1.231l0.148-0.947l0.001-0.083l0.349-0.041l0.396,0.08l0.277-0.356l0.475-0.079l0.436,0.871l0.832-1.663l0.396,0.317h0.238l0.554,0.594l0.792-0.079l0.436-0.198l0.158-0.237l0.277,0.436l0.476-0.079l0.356-0.159l0.277,0.198l0.237-0.04l0.158,0.158l0.555-0.079l0.871,0.554l0.594,0.119l0.673,0.673l0.277,0.594l1.267,0.792l0.437,0.911l0.475,0.159l0.476,0.633l0.261,0.166l-0.594,0.921l-0.488,0.61l-0.105,0.254l-0.029,0.396l0.202,1.157l0.5-0.074l0.892-0.246l0.4,0.04l0.556,0.195z"/>
+ <path id="GM" country:name="Gambia, The" d="M364.011,169.929h1.664l0.093-0.294l0.202-0.124l0.155-0.046l0.108,0.108l0.387-0.17l0.17,0.062l0.201-0.031l0.155,0.108l0.108,0.217l0.139,0.108l0.186-0.124l0.17,0.015l0.186,0.108l0.031,0.186l0.279,0.186l0.248-0.062l0.108-0.093l0.294-0.093l0.201-0.031l0.202,0.077l0.155,0.217l-0.016,0.124l-0.108,0.124h-0.279l-0.263,0.108l-0.186,0.108h-0.434l-0.186-0.17l-0.263-0.108l-0.217,0.031l-0.139-0.047l-0.046-0.108l-0.356-0.108l-0.232-0.124l-0.155-0.155l-0.14,0.016l-0.077,0.078l-0.016,0.263l-0.124,0.093l-0.294,0.046l-0.248-0.062l-0.186,0.077l-0.341,0.016h-0.155v0.434l-1.695-0.014l0.019-0.477l0.173-0.198l0.434-0.058l0.093-0.155l-0.006-0.059z"/>
+ <path id="DJ" country:name="Djibouti" d="M495.973,175.881l-0.556-0.195l-0.4-0.04l-0.892,0.246l-0.5,0.074l-0.202-1.157l0.029-0.396l0.105-0.254l0.488-0.61l0.594-0.921l0.055-0.085l0.214-0.114l0.396,0.125l0.331,0.182l0.529-0.78l0.075-0.094l0.627,0.596l0.285,0.465l0.036,0.282l-0.118,0.113l-0.361,0.185l-0.438,0.1l-0.56,0.312l-0.566,0.467l0.253,0.127l0.645-0.058l0.321,0.013l0.434,0.124l-0.114,0.26l-0.37,0.468l-0.34,0.567z"/>
+ <path id="GW" country:name="Guinea-Bissau" country:shortname="GuineaBissau" d="M363.763,172.732l0.463-0.139l0.819-0.047l0.74,0.024l0.51-0.187l0.505-0.384l1.045-0.006l2.301,0.043l-0.111,0.792l0.115,0.847l-0.186,0.312l-0.333,0.186l-0.513,0.031l-0.401,0.017l-0.381,0.186l-0.789,0.64l-0.321,0.372l-0.047-0.126l-0.192,0l-0.501-0.14l-0.165-0.254l0.121-0.41l0.33-0.438l0.253-0.212l-0.131-0.141l-0.372-0.112l-0.498,0.015l-0.415,0.17h-0.161l-0.616-0.281l-0.36-0.296l-0.069-0.24l-0.323-0.084l-0.316-0.137z"/>
+ <path id="GN" country:name="Guinea" d="M383.005,177.596l-0.379,0.397l-0.264,0.623l0.214,0.409l0.695,0.405l0.197,0.31l-0.125,0.283l-0.332,0.37l0.309,0.351l0.648,0.561l0.051,0.226l-0.19,0.143l-0.304-0.012l-0.548-0.223l-0.304,0.03l-0.158,0.199l-0.03,0.127l0.296,0.549l0.179,0.21l-0.188,0.354l-0.602,0.554l-0.047,0.099l-0.339-0.224l-0.337-0.097l-0.143,0.086l-0.756,0.922l-0.321-0.026l-0.404-0.322l-0.277-0.323l0.044-0.283l-0.009-0.65l-0.22-0.846l-0.165-0.366l-0.338-0.097l-0.528,0.046l-0.367,0.143l-0.252,0.242l-0.193,0.376l-0.26-0.656l-0.165-1.369l-0.252-0.761l-0.475-0.619l-0.456-0.421l-0.42-0.224l-0.466-0.04l-1.137,0.148l-0.594-0.039l-0.238,0.157l-0.643,0.866l-1.088,1.235l0.051-0.392l-0.312-0.55l-0.764-0.775l-0.122-0.649l-0.84-0.366l-0.908-0.563l-0.277-0.296l0.09-0.396l-0.053-0.311l-0.547-0.041l-0.323-0.098l-0.115-0.155l0.059-0.311l-0.038-0.1l0.321-0.372l0.789-0.64l0.381-0.186l0.401-0.017l0.513-0.031l0.333-0.186l0.186-0.312l-0.115-0.847l0.111-0.792l1.255,0.021l0.795,0.32l0.503,0.209l0.725,0.081l0.658-0.074l0.963-0.091l0.146,0.042l0.113,0.028l0.18,0.183l0.882,0.715l0.536,0.265l0.252-0.256l0.475-0.413l0.338,0.026l0.356,0.153l0.565,0.152l0.43-0.243l0.3-0.327l0.684-0.428l0.323,0.055l0.246,0.281l0.022,0.339l0.271,0.832l0.265,0.451l0.474,0.478l0.349,0.718l0.194,1.143l0.559,0.901z"/>
+ <path id="VE" country:name="Venezuela" d="M266.015,188.956l0.103,0.169l-0.163,0.326l-0.592,0.385l-1.74,0.9l-0.807,0.23l-0.557,0.074l-0.465-0.054l-0.284,0.115l-0.232,1.117l-0.348,0.115l-0.628-0.618l-0.344-0.224l-1.149,0.035l-0.385-0.04l-0.896-0.461l-0.309-0.125l-0.159,0.029l-0.041,0.184l0.616,0.688l0.391,0.69l0.302,1.524l0.079,0.55l0.166,0.239l0.96,0.051l0.434,0.125l0.15,0.253l-0.265,0.27l-0.569,0.272l-0.652,0.131l-0.203,0.199l-0.259,0.666l-0.235,0.213l-0.652,0.173l-0.554,0.286l-0.74,0.654l-0.645,0.739l-0.271,0.016l-0.186-0.776l-0.083-0.183l-0.757,0.697l-0.414,0.073l-0.482-0.223l-0.694-0.546l-0.432-0.054l-0.199-0.437l-0.088-0.452l-0.161-0.861l-0.138-0.437l-0.148-0.168l-0.797-1.182l-0.51-0.491l0.479-0.526l0.731-0.612l-0.121-0.282l-0.486-0.647l-0.256-0.437l-0.447-0.789l-0.162-0.804l-0.048-0.367l-0.035-0.438l-0.026-0.254l0.147-0.326l0.379-0.511l0.085-1.004l0.409-0.525l-0.644-0.081l-1.99,0.224l-0.76,0.174l-0.522,0.13l-0.144,0l-0.554-0.576l-0.847-0.998l-0.188-0.253l-0.64-0.321l-0.521-0.181l-1.167,0.05l-1.163,0.12l-0.496,0.017l-0.397-0.252l-0.429-0.548l-0.401-0.309l-0.099-0.353l0.226-1.132l-0.103-0.395l-0.855-1.45l-0.31-0.606l-0.384,0.017l-0.234,0.1l-0.402-0.025l0.709-1.191l0.241-0.722l0.172-0.722l0.99-1.758l0.381-0.059l0.227,0.027l0.129-0.396l-0.048-0.497l0.056-0.288l0.414-0.2l0.534-0.156l0.84-0.171l0.128,0.105l-0.9,0.151l-0.731,0.312l-0.145,0.212l0.19,0.607l0.142,0.407l0.224,0.126l-0.043,0.145l0.153,0.579l-0.135,0.367l-0.327,0.364l-0.348,0.824l-0.137,0.368l0.253,0.479l0.288,0.253l0.25,0.72l0.341,0.353l0.523-0.114l0.184-0.156l0.419-0.255l0.12-0.142l0.066-0.523l-0.167-0.649l-0.21-0.282l-0.438-0.804l-0.136-0.135l-0.118-0.395l-0.247-0.18l0.239-0.099l0.095-0.251l-0.204-0.144l1-0.379l1.085-0.327l0.998-0.272l0.086-0.225l0.69-0.086l0.143-0.008l-0.042-0.157l-0.055-0.198l-0.125-0.036l-0.039-0.108l-0.128-0.072l-0.226,0.071l-0.156,0.027l-0.229-0.012l-0.315-0.55l0.109-0.254l0.337-0.213l0.367-0.043l0.09,0.112l0.14,0.368l0.186,0.162l-0.001,0.148l0.026,0.193l0.068,0.09l0.004,0.198l0.253,0.258l0.329-0.02l0.699,0.111l0.455,0.07l0.593,0.196l0.323,0.254l0.393,0.564l0.156,0.635l0.358,0.324l0.359,0.084l1.02-0.129l0.928-0.059l0.59-0.058l0.799-0.059l0.714,0.125l0.4,0.479l0.267,0.169l0.578,0.253l0.49,0.14l1.094,0.04l0.382-0.057l0.388-0.227l1.042-0.807l0.47-0.185l0.453,0.042l0.959-0.073l1.152-0.073l0.919,0.055l0.248,0.112l-0.056,0.141l-0.294,0.185l-0.854-0.041l-0.433,0.015l-0.083,0.212l0.059,0.184l0.593,0.253l0.609,0.535l0.195,0.649l0.246-0.523l0.185-0.142l0.415,0.253l0.483,0.027l0.374,0.098l0.258,0.338l0.918,0.394l0.464,0.295l-0.729,0.496l-0.161,0.65l-0.214,0.226l-1.055,0.417l0.5,0.064l0.598,0.098l0.368-0.029l0.33-0.142l0.929-0.03l0.725,0.083l0.84,0.274l0.095,0.296l-0.061,0.41l-1.655,1.239l-0.101,0.255l0.074,0.212l0.62,0.604l0.141,0.282l-0.308,0.299l-0.41,0.144l-1.032,0.19l-0.061,0.452l0.008,0.58l-0.395,0.539l-0.071,0.212l0.324,0.521l0.732,0.745l0.503,0.647z"/>
+ <path id="SO" country:name="Somalia" d="M493.044,204.258l-1.223-1.771l-0.027-0.932l-0.03-1.43l-0.042-2.045l-0.003-1.017v-0.438l0.016-0.848l0.004-1.215l0.002-0.508l1.649-2.467l0.453-0.511l0.305-0.101l1.216-0.078l0.337-0.115l0.294-0.426l0.502-0.497l0.388-0.214l0.562-0.215l0.626-0.088l1.693,0.046l0.8-0.004l0.813-0.909l1.562-1.69l4.087-4.205l-0.236-0.154l-1.875,0.04l-1.447-0.472l-4.26-1.443l-0.54-0.209l-0.634-0.321l-0.596-0.547l-0.732-0.801l-0.587-0.844l-0.428-0.732l-0.083-0.409l0.363-0.807l0.34-0.567l0.37-0.468l0.114-0.26l0.154,0.044l0.935,1.142l0.586,0.62l0.243,0.381l0.265,0.211l0.372-0.071l0.417-0.001l0.465,0.027l0.372-0.071l0.572-0.27l0.836-0.425l0.585-0.157l0.397,0.098l0.76,0.267l0.549-0.072l0.56-0.326l0.779-0.566l0.247-0.127l0.447,0.041l0.479,0.098l0.419-0.043l1.195-0.482l0.288,0.027l0.682,0.196l0.74-0.03l0.764-0.185l0.964-0.327l0.9-0.666l0.47-0.382l0.604,0.154l0.391,0.211l0.08,0.014l0.147,0.268l-0.414,0.919l0.021,0.564l0.132,0.621l-0.165,0.452l-0.375,0.509l-0.028,0.678l-0.047,0.833l-0.163,0.509l-1.264,2.262l-0.842,0.792l-0.122,0.311l0.102,0.353l-0.893,1.569l-0.834,1.272l-0.214,0.947l-0.351,0.636l-0.712,1.117l-0.874,1.188l-1.159,1.498l-0.384,0.439l-2.274,2.504l-1.82,1.557l-2.164,1.121l-0.593,0.382l-1.28,1.09l-1.74,1.755l-0.06,0.061l-1.055,1.1l-1.235,1.569l-0.615,0.835l0.1,0.353l-0.094,0.276z"/>
+ <path id="TT" country:name="Trinidad" d="M264.768,176.039l-0.128,0.225l-0.115,0.067l-0.029,0.135l0.039,0.25l-0.058,0.086l0.125,0.376l-0.039,0.424l-0.453,0.154l-0.135-0.01l-0.144,0.039l-0.482-0.039l-0.192,0.039l-0.087-0.048h-0.356l-0.02-0.058l0.039-0.067l0.202-0.029l0.222-0.135l0.019-0.087l0.106,0.02l0.154,0.01l0.135-0.145l-0.096-0.279l0.048-0.125l0.029-0.183l-0.067-0.125l-0.097-0.135l-0.279-0.048l0.116-0.096l0.164-0.019l0.231-0.029l0.115-0.087l0.385,0.02l0.106-0.039l0.299-0.067l0.244,0.006z"/>
+ <path id="BN" country:name="Brunei" d="M654.075,190.187l0.206-0.125l0.63-0.114l0.656-0.938l0.241-0.07l-0.069,0.268l0.122,0.087l0.187-0.046l0.11,0.174l0.148,0.444l-0.024,0.111l-0.013,0.247l0.197,0.197l0.025,0.086l-1.234,0.42l-0.383,0.271l-0.309-0.271l-0.111-0.259l-0.234,0.012l-0.062-0.37l-0.084-0.126z"/>
+ <path id="KE" country:name="Kenya" d="M493.044,204.258l-0.602,0.389l-0.557,0.171l-0.385-0.112l-0.086,0.777l-0.282,0.367l-0.67,0.115l-0.394,0.382l-0.088,0.48l0.006,0.353l-0.356,0.622l-0.964,1.358l0.092,0.536l-0.337,0.65l-0.25,0.255l-0.334,0.1l-0.084,0.152l-1.067-0.807l-2.427-1.752l-0.07-0.239l0.116-0.552l-0.137-0.381l-3.553-1.984l-4.663-2.568l-1.448,0.033l1.144-2.479l0.105-0.229l0.656-0.835l0.985-0.938l0.477-0.525l0.43-0.695l0.143-0.566l-0.048-0.664l-0.223-0.606l-0.224-0.352l-0.732-1.069l-0.174-0.465l-0.027-0.861l-0.126-0.226l-0.477-0.463l-0.3-0.493l0.678-0.795l0.291-0.327l0.671,0.052l0.832-0.005l1.009-0.133l0.464-0.017l0.079,0.028l0.319,0.069l1.054,0.149l0.749,0.193l0.604,0.293l2.353,1.525l0.335,0.041l1.373,0.133l0.67,0.193l0.847,0.094l0.16-0.114l0.71-0.753l0.258-0.199l0.675-0.343l0.852-0.358l0.271,0.098l0.46,0.336l0.461,0.181l1.103,0.106l-1.649,2.467l-0.002,0.508l-0.004,1.215l-0.016,0.848v0.438l0.003,1.017l0.042,2.045l0.03,1.43l0.027,0.932l1.223,1.771z"/>
+ <path id="UG" country:name="Uganda" d="M466.196,203.275l0.188-0.298l0.076-0.27l-0.057-0.748l0.025-0.734l-0.021-0.593l0.107-0.507l0.217-1.02l0.395-0.681l0.255-0.284l1.241-0.996l1.195-1.066l0.191-0.453l-0.111-0.31l-0.271-0.182l-0.479-0.04l-0.191-0.027l-0.128-0.253l0.26-1.88l0.018-0.424l-0.159-0.183l-0.063-0.028l0.496-0.229l0.464-0.087l0.495,0.011l0.942,0.234l0.911-0.048l0.881-0.33l0.88-0.132l0.303,0.097l0.303,0.196l0.367-0.016l0.626-0.314l0.563-0.54l0.3,0.493l0.477,0.463l0.126,0.226l0.027,0.861l0.174,0.465l0.732,1.069l0.224,0.352l0.223,0.606l0.048,0.664l-0.143,0.566l-0.43,0.695l-0.477,0.525l-0.985,0.938l-0.656,0.835l-0.105,0.229l-1.144,2.479h-4.659l-1.277,0.05l-0.319,0.017l-0.554,0.398l-0.458,0.427l-0.431,0.045l-0.546-0.223l-0.064-0.042z"/>
+ <path id="ID" country:name="Indonesia" d="M713.621,206.298l0.169,7.966l-0.44,0.822l0.431,1.368l0.046,0.805l-0.031,3.438l-0.515-0.512l-0.927-0.888l-0.716-0.902l-0.406-0.056l-0.776,0.101l-0.739,0.143l-0.434-0.013l0.091-0.382l0.435-0.65l0.006-0.283l-0.561-0.521l-0.565-0.775l0.028-0.226l0.442,0.111l0.236-0.042l0.135-0.113l-0.467-0.409l-0.595-0.408l-0.287-0.381l-0.275-0.648l-1.053-1.693l-0.508-0.394l-0.467-0.282l-0.604-0.196l-1.983-0.603l-1.26-0.379l-0.613-0.069l-0.705-0.238l-0.63-0.323l0.072-0.34l-0.098-0.268l-0.193-0.028l-0.617,0.101l-0.389-0.07l-0.412-0.196l-0.408-0.395l-0.209-0.579l0.133-0.494l-0.155-0.226l-0.187,0.113l-0.234,0.396l-0.122,0.664l-0.251,0.608l-0.334,0.269l-0.696,0.354l-0.155-0.169l-0.331-0.677l0.022-0.155l0.384-0.27l-0.152-0.424l-0.173-0.239l-0.564-0.395l-0.707-0.394l-0.338-0.056l-0.059-0.212l0.038-0.226l0.413-0.044l0.388,0.084l0.603,0.239l0.158-0.029l0.368-0.34l0.525-0.41l0.146,0.056l0.3,0.269l1.021-0.045l0.139-0.128l0.09-0.522l-0.063-0.409l-0.238,0.028l-0.345,0.199l-0.604,0.071l-0.656-0.041l-0.766,0.044l-1.026-0.082l-0.411-0.31l-0.135-0.197l-0.148-0.664l-0.202-0.338l-0.42-0.155l-1.249-0.124l0.265-0.297l0.058-0.255l0.004-0.593l0.463-0.029l0.92-0.411l0.49-0.383l0.444-0.283l0.352,0.027l0.4,0.069l1.494,0.646l0.515,0.169l0.913,0.153l0.382,0.705l0.138,0.396l-0.283,0.749l-0.067,0.381l0.221,0.381l0.115,0.494l0.115,0.48l0.215,0.521l0.186,0.197l0.197,0.127l0.226-0.65l0.085,0.113l0.087,0.141l0.309,1.073l0.169,0.169l0.234,0.183l0.294,0.112l0.354,0.056l0.58-0.198l0.504-0.439l1.192-1.853l0.352-0.015l1.078-0.215l0.378-0.142l0.045-0.085l0.014-0.509l0.219-0.17l1.1-0.609l0.335-0.043l1.732,0.759l2.129,0.941l1.54,0.52l1.299,0.404z M691.208,208.707l-0.388-0.069l-0.693-0.38l-0.852-0.647l-0.295-0.141l-0.414,0.028l-0.059,0.1l0.024,0.452l-0.206,0.028l-1.014-0.407l-0.258-0.353l-0.582,0.199l-0.289,0.269l-0.326,0.185l-0.186-0.184l-0.312-0.451l-0.245-0.451l0.246-0.198l0.303-0.029l0.274,0.056l1.104,0.04l0.574,0.31l0.319-0.015l0.544-0.326l0.414-0.015l0.534,0.126l0.857,0.21l0.499,0.395l0.293,0.395l0.179,0.621l-0.049,0.254z M682.045,208.699l-0.419-0.056l-0.715-0.493l-0.232-0.451l0.146-0.283l0.603-0.1l0.766-0.044l0.246,0.126l0.256,0.311l0.313,0.197l0.108,0.226l-0.067,0.226l-0.125,0.057l-0.879,0.285z M707.635,219.095l-1.11-0.209l0.589-1.032l0.56-0.708l0.407-0.269l0.427-0.072l0.527,0.338l0.198,0.24l-0.11,0.184l-0.324,0.637l-0.256,0.17l-0.638,0.693l-0.27,0.028z M673.797,218.703l-0.562,0.257l0.034,0.233l-0.886,0.326l-0.582,0.274l-0.339-0.041l-0.453,0.325l-0.504-0.069l-0.427-0.112l-0.378,0.255l-0.3,0.058l-0.358-0.07l-0.58-0.196l-1.046-0.04l-0.316,0.043l-0.211-0.564l0.027-0.24l0.383-0.198l0.672-0.199l0.528-0.016l1.142,0.407l0.445,0.324l0.338,0.013l0.326-0.297l0.464-0.016l0.429-0.071l0.414,0.187l0.467-0.116l-0.072-0.222l0.421-0.187l0.404-0.233l0.094-0.151l-0.076-0.117l-0.184,0.023l0.116-0.198l0.16,0.012l0.22,0.094l0.177,0.221l0.013,0.304z M662.661,219.065l-0.312-0.099l-0.203-0.127l-0.062-0.169l0.03-0.212l0.256-0.198l0.315-0.036l0.17,0.092l0.053,0.212l0.182,0.098l0.305-0.145l0.34,0.105l0.104,0.151l-0.012,0.451l0.183-0.148l0.163-0.304l0.318-0.029l0.229,0.226l0.021,0.424l0.181-0.036l0.062,0.104l-0.025,0.397l-0.316-0.211l-0.311-0.058l-0.141,0.058l0.072,0.155l-0.852,0.157l-0.143-0.091l0.097-0.268l-0.085-0.059l-0.308,0.269l-0.229,0.256l-0.296-0.046l-0.63,0.225l-0.624,0.199l-0.357-0.051l-0.31,0.123l-0.392-0.07l-0.103-0.07l-0.202-0.123l-0.063-0.279l0.143-0.261l-0.08-0.253l0.193-0.115l0.23-0.113l0.233-0.156l0.224,0.07l0.61,0.013l0.4,0.104l0.089,0.28l0.291,0.109l0.294,0.056l0.189-0.259l0.29-0.012l0.051-0.187l-0.263-0.15z M656.294,219.602l-0.393-0.282l-0.855-0.449l-0.118-0.269l0.417-0.001l0.514-0.185l0.462-0.029l0.925,0.521l-0.338,0.17l-0.232,0.1l-0.381,0.425z M631.053,200.125l-0.061,0.225l-0.413,0.439l-0.204,0.41l-0.381,0.354l0.164,0.353l0.162,0.169l0.806,0.493l0.832,0.055l0.241,0.112l0.151,0.381l0.128,0.763l-0.007,0.409l0.267,0.423l0.212,0.127l0.544,0.041l-0.45,0.933l0.151,0.212l0.703-0.453l0.824,0.252l0.177,0.042l0.265,0.254l0.144,0.438l0.698,0.676l-0.515,1.979l-0.04,0.452l0.23,0.946l-0.021,0.438l0.021,0.664l-0.002,0.268l-0.149,1.06l-0.087,0.156l-0.107,0.07l-0.367-0.253l-0.381-0.522l-0.261-0.084l-0.262,0.481l-0.081,0.268l-1.043-0.619l-0.219,0.086l0.394,0.747l-0.163,0.213l-0.204-0.197l-1.343-1.424l-0.775-0.761l-1.011-0.859l-1.348-0.958l-0.391-0.451l-0.199-0.493l-0.191-0.339l-1.003-0.633l-0.697-0.677l-1.186-1.509l-0.074-0.353l0.039-0.339l-0.324-0.875l-0.841-1.467l-0.667-1.044l-0.612-0.775l-0.369-0.301l-0.287-0.234l-0.64-0.295l-0.254-0.748l-0.688-1.806l0.067-0.24l-0.107-0.311l-0.157-0.197l-0.662-0.507l-0.711-0.394l-0.539-0.21l-0.317-0.099l-0.119-0.353l-0.077-0.734l-0.18-0.409l-0.386-0.479l-0.818-0.831l-0.368-0.423l-0.725,0.128l-0.613-0.676l-0.646-0.606l-0.593-0.69l-0.562-0.945l-0.229-0.635l-0.032-0.367l0.057-0.198l0.149-0.113l0.401-0.043l0.364,0.098l0.25,0.126l0.632,0.563l0.361,0.155l0.922,0.153l0.335,0.027l0.548-0.1l0.454-0.142l0.4-0.015l0.323,0.31l0.919,1.156l0.513,0.31l0.058,0.155l-0.12,0.537l1.066,0.916l0.749,0.493l1.175,0.689l0.678,0.323l0.139,0.169l0.03,0.593l-0.02,0.155l0.573,0.055l0.745,0.944l0.612,0.55l0.271-0.015l0.004-0.198l-0.123-0.226l0.069-0.24l0.507,0.21l0.479,0.804l0.441,0.38l0.446,0.056l0.429,0.197l0.314,0.366l0.28,0.734l0.316,0.437l0.431,0.268l0.511,0.126l0.767,0.083l0.431,0.154l0.494,0.38l0.576,0.606l-0.019,0.071z M684.201,200.125l-0.007-0.172l-0.414-1.058l0.18-0.551l-0.078-0.141l-0.141-0.296l0.036-0.325l0.286-0.89l0.514-0.82l0.263,0.367l0.152,0.353l-0.054,0.283l-0.246,0.396l-0.361,0.763l0.061,0.325l0.19,0.141l0.097-0.141l0.436-0.411l0.135-0.522l0.179-0.142l0.806-0.412l0.141,0.141l-0.052,0.254l0.104,0.55l-0.354,0.212l-0.467,0.354l-0.162,0.311l0.159,0.099l0.446,0.126l0.398,0.211l-0.016,0.141l0.159,0.353l-0.688-0.154l-0.431-0.154l-0.367-0.042l-0.304,0.156l-0.08,0.438l0.049,0.258l0.131,0.688l0.341,0.62l0.405,0.438l0.196,0.282l-0.156,0.212l-0.26-0.211l-0.664-0.648l-0.55-0.733l-0.002-0.396l-0.011-0.251z M637.361,207.144l-0.863-0.394l-0.377-0.239l-0.205-0.367l-0.045-0.367l-0.156-0.395l-0.507-0.395l-0.291-0.099l-0.446,0.029l-0.116-0.141l0.271-0.65l0.234-0.24l0.509,0.55l0.148-0.467l0.313-0.269l0.072,0.395l0.312,0.89l0.648,0.817l0.698,0.31l-0.265,0.184l-0.118,0.283l0.183,0.564zM634.321,215.345l-0.091-0.187l0.316-0.023l0.402,0.093l0.369-0.129l0.068-0.524l0.018-0.14l0.309,0.057l-0.043-0.5l0.222-0.235l0.093-0.277l0.202,0.121l0.631,0.112l0.474-0.047l0.237,0.443l0.524-0.089l0.158-0.297l0.022-0.244l0.259,0.116l0.618,0.168l0.411,0.438l0.338-0.046l0.204,0.271l0.446-0.029l0.453-0.185l0.302,0.211l0.369,0.522l0.179,0.521l0.884,0.041l0.462,0.188l0.49-0.077l1.435,0.124l0.479-0.029l0.34-0.17l0.213-0.65l0.271-0.269l0.447-0.015l0.223,0.211l0.289,0.494l0.633,0.125l0.53,0.027l0.774,0.083l0.796,0.153l0.289,0.24l0.293,0.288l-0.08,0.445l0.275,0.466l0.119,0.099l0.877,0.352l0.422,0.069l0.658,0.013l0.45-0.185l0.415-0.015l0.628,0.238l0.048,0.197l-0.255,0.425l-0.152,0.494l0.578,0.776l-0.499-0.211l-0.802-0.196l-0.599-0.253l-0.891-0.309l-0.528,0.001l-0.589,0.256l-0.348,0.057l-0.714-0.098l-1.454-0.138l-1.47-0.138l-0.805-0.253l-0.839-0.479l-1.099-0.336l-1.125-0.267l-0.948-0.04l-0.556,0.298l-0.445,0.043l-0.957-0.153l-0.805-0.492l-0.357-0.07l-1.606-0.066l-0.363-0.155l0.055-0.141l0.448-0.468l-0.402-0.267l-0.551-0.099l-0.506-0.14l-0.307-0.027l-1.261-0.121z M675.004,223.092l0.249-0.494l0.023-0.537l0.113-0.312l0.674-0.481l1.447-0.624l0.662-0.454l0.36-0.607l0.466-0.157l1.578-0.102l0.91-0.214l0.541-0.044l0.869-0.143l0.118,0.07l0.099,0.197l-0.237,0.212l-0.36,0.256l-1.609,0.61l-1.369,0.44l-0.713,0.256l-0.606,0.354l-1.09,0.963l-0.653,0.481l-0.439,0.086l-0.552,0.228l-0.48,0.015z M667.866,223.149l-0.217-0.069l-0.917-0.605l-0.8-0.45l-0.347-0.099l-0.493-0.126l-0.292-0.197l0.108-0.212l0.371-0.142l0.992-0.03l0.502-0.114l0.35,0.296l1.147,0.746l0.265,0.381l-0.125,0.325l-0.246,0.24l-0.299,0.057z M661.819,191.241l-0.041,0.09l0.319,0.691l-0.23,0.142l-0.546,0.043l-0.579,0.086l0.198,0.226l0.115,0.296l-0.169,0.226l0.216,0.211l0.235,0.112l0.546,0.832l0.536,0.747l0.043,0.198l-0.338,0.721l0.075,0.226l0.406,0.465l0.743,0.45l0.6,0.493l0.551,0.761l-0.465,0.17l-0.75-0.026l-0.797-0.238l-0.337,0.1l-0.387,0.467l-0.354,0.918l-0.08,0.476l-0.046,0.272l0.132,0.649l0.116,0.424l-0.133,0.848h-0.256l-0.466-0.154l-1.037,0.963l-0.433,0.65l-0.751,0.608l0.443,0.381l0.06,0.396l0.17,0.296l-0.685,0.058l0.452,0.578l0.009,0.212l-0.103,0.227l-0.547,0.665l-0.206,0.396l-0.127,0.354l-0.529,0.594l-1.294,0.61l-0.607,0.284l-0.292,0.198l-0.194-0.311l0.024-0.424l-0.33-0.804l-0.306-0.381l-0.265-0.184l-0.286,0.029l-0.503,0.523l-0.302,0.029l-0.328-0.508l-0.313-0.197l-0.437-0.112l-0.387-0.451l-0.342-0.154l-0.35,0.806l-0.135,0.198l-0.381,0.058l-0.356-0.112l-0.442,0.128l-0.318,0.354l-0.364,0.071l-0.059-0.551l0.034-0.311l-0.314-1.03l-0.336,0.396l-1.42,0.44l-0.321-0.408l-0.639,0.015l-0.281,0.156l-0.303,0.029l-0.058-0.649l-0.022-0.65l-0.267-1.411l-0.012-0.48l-0.352-0.747l-0.406-0.409l-0.79-0.422l-0.146-0.141l0.555-0.354l-0.531-0.38l-0.258-0.296l0.188-0.735l-0.074-0.128l-0.278-0.478l-0.352-0.296l0.065-0.466l-0.125-0.593l0.182-0.65l0.133-0.353l0.424-0.58l0.303-0.806l0.318,0.028l0.204,0.11l0.288,0.792l0.253,0.295l1,0.983l0.304,0.083l0.446,0.28l0.928-0.416l0.255-0.001l0.526,0.223l0.543,0.11l0.399-0.172l0.528-0.342l0.403-0.525l0.531-0.441l0.479-0.074l0.431,0.11l0.557,0.251l0.524,0.223l0.559,0.152l0.287-0.03l0.467-0.356l0.465-0.172l0.864-0.175l0.387-0.299l0.928-1.785l-0.076-0.748l0.218-0.34l0.646-0.244l0.22-0.383l-0.106-0.988l0.119-0.565l0.381-0.638l0.247-0.157l0.464-0.017l0.748,0.081l0.651,0.081l0.624-0.018l0.446,0.04l0.753,0.292l0.182,0.09z M666.561,200.125l0.012-0.049l0.48-1.188l0.434-0.41l0.289-0.142l0.429,0.338l0.29-0.311l0.162-0.325l0.293-0.481l0.496-0.058l0.605,0.14l0.729,0.535l0.447,0.027l0.863-0.044l0.478,0.168l0.749,0.267l0.577-0.227l1.853,0.081l0.72-0.128l0.627-0.354l0.211-0.283l-0.156-0.268l0.196-0.283l0.388-0.241l0.295-0.41l0.289-0.057l0.075,0.24l-0.073,0.537l-0.117,0.311l-0.081,0.127l-0.082,0.127l-0.969,1.259l-0.416,0.396l-0.464,0.1l-1.23,0.229l-0.495-0.069l-0.591-0.422l-1.149-0.068l-1.151,0.059l-0.878-0.041l-1.039,0.045l-0.575-0.083l-0.671,0.029l-0.415,0.1l-0.433,0.368l-0.259,0.461l-0.154,0.274l-0.187,0.721l0.068,0.48l0.263,0.494l0.194,0.183l0.403,0.226l0.259,0.196l0.221,0.607l0.179,0.154l0.226,0.042l0.815,0.026l0.249-0.269l0.652-0.976l0.385,0.056l0.307,0.183l0.496,0.041l0.363-0.227l0.669-0.156l0.62-0.143l0.268-0.298l0.271-0.057l0.466,0.196l0.131,0.212l-0.083,0.734l-0.469-0.267l-0.544-0.042l-0.361,0.298l-0.389,0.523l-0.438,0.425l-1.059,0.439l-0.214,0.325l-0.143,0.029l-0.241-0.042l-0.468-0.126l-0.03,0.056l0.025,0.312l0.212,0.126l0.676,0.578l0.467,0.521l0.854,1.24l-0.097,0.325l-0.156,0.679l0.102,0.409l0.447,0.535l0.555,0.438l0.062,0.226l-0.045,0.282l-0.436-0.056l-0.652,0.059l-0.412,0.297l-0.224,0.692l-0.498-0.026l-0.461-0.183l-0.107-0.17l0.052-0.649l0.204-0.58l-0.978-0.845l-0.417-0.31l-0.174-0.269l0.036-0.24l0.284-0.396l0.116-0.579l-0.165-0.494l-0.737-0.055l-0.503,0.213l-0.494,0.396l0.16,0.353l0.143,0.932l-0.068,0.509l-0.236,1.145l0.363,0.903l-0.01,0.311l-0.377,0.636l-0.019,0.227l0.275,0.564l-0.726,0.171l-0.513,0.241l-0.476,0.071l-0.245-0.324l-0.16-0.522l0.156-0.325l0.181-0.466l0.069-0.876l0.06-1.073l-0.125-0.509l0.029-0.339l-0.213-0.395l-0.311-0.127l-0.391,0.171l-0.574,0.029l0.011-0.41l-0.25-1.284l0.131-0.311l0.491-0.524l0.469-0.777l0.161-0.48l-0.089-0.918l-0.006-0.254l0.087-0.452l0.339-0.721l0.447-0.058l-0.043-0.861l0.254-1.053z"/>
+ <path id="GL" country:name="Greenland" country:shortname="Greenland" d="M341.05,41.069l2.084,0.272l0.344,0.361l-0.869,0.174l-0.541,0.139l-1.678,0.106l-1.159,0.037l-0.689,0.156l-0.372,0.224l-0.308,0.6l-0.361,0.376l1.05,0.39l0.971,0.168l2.117,0.064l0.601-0.001l1.775-0.242l1.93-0.038l0.866,0.135l0.933,0.219l0.417,0.135l0.284-0.018l1.001-0.002l1.277,0.032l0.615,0.05l-1.277,0.626l-1.583,0.457l-1.976,0.523l-0.556-0.016l-0.695-0.116l-0.951,0.671l-1.061,0.503l-1.246,0.452l-1.125,0.296l-0.211,0.056l-2.212,0.054l-0.525,0.134l-0.502,0.001l-0.982,0.201l-0.665,0.167l-0.528,0.051l-0.946-0.413l-0.375,0.05l-0.69,0.913l-0.958,0.118l-0.631-0.065l-0.743-0.197l-0.622-0.463l-0.854-0.43l-0.647-0.215h-0.109l0.008,0.2l0.707,1.043l-0.192,0.249l-0.319,0.017l-0.69,0.249l-0.84,0.249l-0.573,0.38l-1,0.906l-0.657,0.657l-1.051,0.851l-0.776,0.262l-1.034,0.083l-1.023-0.275l-0.148,0.554l-0.438,0.569l-0.783,0.277l-0.992-0.095l-0.616,0.05l-1.18,0.439l0.942-1.723l-0.121,0.017l-0.795-0.015l-1.055-0.177l0.26,0.423l-0.026,0.455l-0.386,0.407l-0.794,0.39l-1.16,0.164l-0.973,0.002l-1.255,0.083l0.467,0.403l0.212,0.403l-0.09,0.387l-0.379,0.097l-0.321-0.063l-0.47,0.033l-1.792-0.157l0.517,0.32l0.765,0.462l0.295,0.351l-0.01,0.224l-0.26,0.176l-1.197,0.034l-1.051,0.129l0.844,0.413l0.47,0.126l0.448,0.222l0.389,0.333l-0.554,0.461l-0.285,0.111l-0.599-0.094l-0.478,0.096l0.345,0.474l-0.009,0.127L308.501,60l-0.486-0.125l-0.583-0.062l0.026,0.158l0.255,0.457l-0.101,0.347l-0.288,0l-0.656-0.093l-0.089-0.016l-0.979,0.112l-1.081,0.018l0.682,0.487l1.108,0.391l0.331,0.204l-0.077,1.035l-0.382,0.938l-0.427,0.094l-0.815-0.061l0.489,0.591l-0.016,0.498l0.156,0.233l-0.068,0.373l-0.316,0.062l-0.495-0.03l-0.771,0.079l0.762,0.386l0.427,0.603l-0.117,0.447l-0.287,0.031l-0.967-0.26l-1.052-0.508l-0.498,0.294l-0.425,0.602l-0.635-0.599l0.158-0.573l-0.387-0.201l-1.124-0.184l-0.577-0.309l0.04-0.187l0.253-0.249l0.066-0.218l-0.325-0.28l-0.366-0.186l-0.668,0.359l-0.276,0.016l-0.3,0.141l-0.444-0.046l-0.98,0.064l-0.417,0.017l-0.571,0.296l-0.476,0.28l-0.426-0.403l-0.104-0.357l-0.222-0.217l-0.513-0.233l-0.817-0.232l-0.772-0.389l-0.517-0.781l0.07-0.737l-0.199-0.156l-0.434-0.094l-0.467,0.048l-0.97-0.266l-0.108-0.094l-0.138-0.236l0.14-0.457l0.459-0.395l0.071-0.269l-0.258-0.062l-0.551-0.031l-0.542-0.094l-0.278-0.221l-0.058-0.633l-0.458-0.126l-0.616,0.049l-0.589-0.57l0.023-0.191l0.198-0.254l0.618-0.367l1.22-0.337l0.405-0.304l0.476-0.128l0.051-0.383l-0.277-0.287l-0.473,0.097l-0.921,0.082l-0.493,0.097l-0.635,0.416l-0.538,0.129l-0.63,0.304l-0.339-0.318l0.038-0.623l-0.114-0.784l-0.206-0.451l0.015-0.355l-0.243-0.323l-0.504,0.082l-0.271-0.032l-0.666-0.355l-0.594-0.485l-0.013-0.357l0.842-0.538l0.265,0.019l-0.556-0.189l-1.083,0.064l-0.103-0.284l0.383-0.176l0.677-0.03l0.586-0.052l0.456-0.087l0.322-0.672l-1.208-0.047l-0.572,0.05l-0.362-0.032l-0.29-0.163l-0.116-0.197l0.223-0.28l0.218-0.008l0.18-0.16l0.427-0.055l-0.375-0.188l-0.552,0.073l-0.22-0.248l0.057-0.188l0.073-0.132l0.259,0l0.309-0.099l0.827-0.25l1.218,0.081l0.854,0.163l0.776,0.032l0.378,0.131l0.927,0.146l1.027,0.097l-0.031-0.363l0.299-0.545l-0.298-0.182l-1.02-0.263l-1.356-0.312l-0.903-0.164l-1.592-0.33l-0.354-0.116l0.336-0.35l0.788-0.001l1.462,0.363l1.034,0.048l0.463-0.067l0.114-0.067l0.088-0.6l0.088-0.301l0.595-0.034l0.528,0.116l0.227-0.101l-0.027-0.351l-0.195-0.184l-0.891-0.317l0.162-0.437l0.528-0.455l-0.258-0.286l-1.21-0.167l-1.154,0.002l-1.178-0.286l-1.649-0.49l-0.78-0.101l-0.903-0.05l-0.76-0.34l-0.811-0.477l0.156-0.035l0.323-0.155l0.605-0.001l0.572-0.019l2.085,0.305l0.716,0.033l1.249,0.306l1.451,0.458l0.729,0.169l0.056-0.307l-0.311-0.426l-0.86-0.546l-0.172-0.446l-0.603-0.446l-0.485-0.051l-0.677-0.24l0.361-0.277l0.542-0.139L285.644,41l-0.704-0.241l-1.101-0.015l-0.625-0.086l-1.132-0.327l-0.88,0.608l-0.324,0.156l-0.274,0.294l-0.875,0.243l-1.402-0.066l-1.031-0.343l-0.306-0.242l-0.027-0.294l0.438-0.313l0.293-0.645l-0.152-1.259l0.582-0.054l0.691,0.192l0.372-0.124l0.151-0.334l-0.383-0.369l-0.933-0.545l-0.452-0.141l-0.946-0.796l-0.895-0.925l-1.105-1.289l-0.578-0.485l-1.855-0.379l-0.667-0.255l-0.291-0.202l-0.052-0.701l-0.904-0.406l-0.962-0.109l-1.589-0.165l-1.928-0.425l-1.903-0.333l-2.133-0.183l-0.997-0.054l-1.632-0.035l-0.785,0.189l-1.043,0.096l-0.806,0.188l-1.419,0.152l-1.228-0.166l-1.46-0.296l0.319,0.747l-0.051,0.093l-1.051-0.017l-1.294-0.184l-3.168-0.611l1.538-0.566l0.463-0.114l-0.092-0.226l-0.423-0.169l-1.067-0.017l-2.21-0.015l-0.812-0.074l-0.629-0.018l-1.238-0.434l-0.87-0.208l0.587-0.306l1.257-0.041l3.036,0.147l2.025,0.034l1.343,0.017l2.117-0.157l1.055-0.212l0.292-0.096l0.054-0.345l-0.627-0.287l-0.82-0.21l-1.217,0.156l-1.11,0.252l-1.31,0.021l-1.138-0.113l-0.753,0.078l-0.879,0.098l-0.68-0.056l-0.857-0.19l-0.664-0.365l-0.816-0.191l-0.662-0.057l-0.726,0.059l-0.486-0.076l-1.416-0.481l-0.044-0.35l0.36-0.45l0.81-0.119l1.235-0.1l1.517-0.14l2.074-0.161l1.29-0.081l0.951-0.396l1.089-0.259l0.843-0.081l2.478-0.005l1.101-0.101l1.942,0.036l0.402-0.139l0.31-0.199l0.609-0.16l0.202-0.658l0.276-0.501l0.116-0.101l-0.89-0.228l-1.947-0.039l-1.155,0.194l-0.959-0.125l-1.243-0.383l0.595-0.781l1.38-0.332l2.845-0.359l1.407-0.225l1.962-0.249l2.112-0.162l1.163,0.087l1.213-0.07l1.319-0.07l0.345-0.181l0.011-0.226l-0.357-0.753l-0.022-0.208l0.522-0.14l1.886-0.05l1.526,0.205l2.141,0.41l1.296,0.226l0.802,0.181l0.823-0.275l-1.657-0.525l-0.697-0.509l0.167-0.047l2.2-0.122l1.166-0.12l1.854-0.216l2.52-0.195l0.73,0.069l1.064,0.116l0.232,1.738l0.913-0.162l0.539-0.322l0.432-1l1.003,0.021l2.004,0.323l1.858,0.414l1.529,0.25l0.205-0.3l-0.644-0.3l-0.816-0.537l-0.894-0.4l0.295-0.287l0.742,0.022l1.758,0.02l1.136,0.212l2.754,0.373l1.284,0.279l2.109,0.322l1.878,0.274l1.872,0.204l0.8-0.209l0.816-1.483l-0.326-0.191l-1.292-0.334l-1.176-0.533l0.708-0.247l2.404-0.005l2.962-0.328l1.329-0.077l1.527,0.17l2.221,0.488l1.567,0.167l2.005,0.142l0.3-0.761l-0.3-0.472l2.646-0.206l2.021-0.08l2.589,0.095l1.989,0.146l1.886-0.18l2.367-0.207l2.043-0.005l1.859,0.223l1.825-0.055l1.315,0.072l0.619,0.099l0.55-0.102l1.946,0.146l1.707,0.046l1.673,0.096l2.438,0.761l1.368,0.241l1.345-0.076l1.118,0.168l2.594,0.237l0.445,0.408l-0.304,0.12l-0.492,0.192l-1.683,0.146l-2.303,0.124l-1.152,0.121l-1.233,0.05l-1.469-0.068l-2.831-0.064l-2.22-0.066l-1.389,0.168l-1.614,0.027l-1.933,0.027l-1.16,0.026l-1.485,0.168l-0.444,0.118l-1.322,0.213l-0.335,0.464l0.743,0.251l2.551-0.281l1.367-0.072l3.912,0.038l2.223-0.12l2.331-0.005l0.997-0.025l0.93,0.067l1.77,0.434l0.671,0.09l1.087-0.186l1.663-0.21l1.536-0.281l1.964-0.144l0.59,0.462l-0.566,0.482l-2.316,0.639l-0.973,0.338l-1.281,0.734l0.12,0.307l0.319,0.152l0.796-0.089l0.477-0.044l1.616-0.553l1.766-0.537l1.413-0.385l1.706-0.32l0.775-0.207l1.662-0.163l1.618,0.111l1.391,0.065l1.497-0.3l0.703-0.324l1.129-0.234l2.148-0.004l1.672,0.112l1.097,0.044l1.197,0.136l1.135,0.228l1.107,0.112l0.316,0.25l-0.181,0.273l-1.97,0.252l-1.491,0.138l-1.245,0.494l-0.557,0.289l-1.604,0.355l-1.57,0.548l-1.063,0.089l-0.918-0.042l-1.592,0.047l-2.213-0.039l-1.491,0.198l-0.731,0.217l-0.495,0.535l0.166,0.322l1.949-0.305l1.581-0.046l1.856,0.101l0.003,0.42l-0.743,0.241l-2.388,0.124l-0.463,0.14l-0.213,0.199l-0.156,0.595l-0.471,0.71l-0.678,0.158l-1.06-0.077l-0.742,0.041l-0.837,0.9l-0.987,1.087l-0.15,0.347l0.454,0.307l0.403,0.095l0.602-0.481l0.743-0.368l0.856-0.041l2.345,0.266l0.353,0.096l0.262,0.288l-0.059,0.211l-1.234-0.074l-0.673-0.018l-0.512,0.097l-0.136,0.191l0.29,0.286l1.756,0.188l0.557,0.132l1.802-0.137l0.526,0.208l0.214,0.323l-0.049,0.436l-0.256,0.133l-1.835-0.186l-1.653-0.054l-0.781-0.074l-1.295,0.078l-1.382,0.475l-0.823-0.13l-0.49-0.15l-1.06,0.04l-0.283,0.377l1.393,0.599l1.187,0.222l1.298,0.128l1.665,0.072l0.696,0.148l0.551,0.482l0.272,0.444l0.014,0.554l-0.434,0.405l-0.384,0.074l-1.292-0.181l-0.82-0.109l-0.372,0.111l0.023,0.55l0.118,0.236l0.426,0.162l0.618,0.089l0.723,0.215l0.914,0.142l0.752,0.16l0.383,0.376l-0.338,0.233l-0.832,0.145l-0.647,0.126l-1.747-0.032l-1.176-0.087l-1.624-0.086l-0.592,0.448l0.551,0.195l1.396,0.051l1.052,0.158l0.724,0.248l0.088,0.319l-0.035,0.549l-0.13-0.005l-1.092-0.045l-1.247,0.108l-0.596,0.266l-1.246,0.02l-1.225-0.139l-1.497-0.404l-0.922-0.478l-0.373-0.07l-1.094,0.286L345,36.811l-1.084,0.09l-0.589,0.178l-1.451-0.033l-0.913-0.087l-0.969,0.143l-0.395,0.125l-0.174,0.283l0.006,0.141l0.354,0.527l0.71,0.245l1.284,0.05l1.515,0.26l1.567-0.056l1.323,0.54l0.758,0.226l0.482,0.226l1.196,0.329l1.252,0.38l0.376,0.276l0.483,0.898l0.892-0.208l0.278-0.139l0.397,0.207l0.298,0.43l0.071,0.344l0.198,1.164l-0.169,0.205l-0.371,0.12l-0.541-0.101l-0.546-0.119l-0.917,0.002l-1.041,0.036l-1.488-0.27l-0.637-0.409l-0.415-0.634l-0.354-0.274l-1.17-0.566l-0.84-0.292l-0.748-0.137l-1.095-0.084l-0.521,0.14l-0.962,0.105z M351.365,40.026l-1.527-0.537l-0.96-0.225l-0.712-0.156l-0.159-0.069l-0.314-0.419l1.483-0.038l0.893,0.139l1.064,0.26l0.819,0.296l0.162,0.488l-0.215,0.209l-0.533,0.053z M281.574,46.135l-0.568-0.133l-0.707-0.318l-0.801-0.183l-0.197-0.101l-0.25-0.218l-0.08-0.844l0.287-0.34l0.368-0.018l0.646,0.135l1.157,0.066l1.287,0.27l0.748,0.269l0.595,0.1l0.777,0.217l0.603,0.335l-0.144,0.202l-0.112,0.034l-0.543,0.051l-0.774,0.035l-0.77,0.186l-1.009,0.153l-0.511,0.102z"/>
+ <path id="CA" country:name="Canada" d="M105.98,81.688l-0.952-0.826l-0.198-0.342l-0.024-0.476l0.095-0.104l0.408,0.044l0.312-0.045l0.781,0.177l0.658-0.076l0.28,0.119l0.138,0.163l-0.234,0.224l-0.173,0.565l-0.028,0.312l-0.581,0.075l-0.483,0.19z M125.24,92.375l-1.312-0.288l-1.345-0.434l-0.218-0.174l0.061-0.189l0.376-0.466l-1.023,0.002l-0.413,0.248l-0.299-0.072l-0.416-0.188l0.166-0.452l-0.487-0.334l-0.269-0.014l-0.735-0.086l-0.226-0.262l0.317-0.292l-0.976-0.524l-0.556,0.118l-0.386-0.102l-0.852-0.511l-1.277-0.863l-0.219-0.235l0.02-0.117l0.962-0.12l0.337,0.043l1.979,0.598l0.981,0.204l1.772,0.202l0.385,0.263l0.618,0.526l0.426,0.642l0.433,0.422l0.362,0.189l1.587,0.536l0.316,0.203l0.48,0.756l0.116,0.407l-0.279,0.349l-0.407,0.016z M271.379,92.089l-1.202-0.23l0.641-0.743l0.358-0.161l0.279,0.058l0.292,0l0.355-0.263l-0.697-0.653l0.079-0.219L272,89.003l1.121-1.35l1.454-1.31l0.725-0.442l0.496-0.192l1.315-0.194l0.198,0.073l0.11,0.221l-0.299,0.221l-0.582,0.03l-0.242,0.133l0.349,0.44l-0.755,0.78l-1.226,1.438l-0.271,0.526l0.113,0.291h0.11l0.428-0.176l0.483-0.555l0.458-0.191l1.115,0.305l-0.896,0.687l0.261,0.203l0.229,0.072l1.423,0.565l0.758-0.03l0.325-0.408l0.309-0.059l0.718,0.057l0.826,0.202l0.616,0.231l-0.297,0.292l-0.373,0.233l-0.708,0.467l0.339,0.333l0.477,0.362l0.26,0.014l0.417-0.161l0.464-0.132l0.278,0.116l0.02,0.16l-0.254,0.262l-0.404,0.248l-0.892,0.104L280.84,93l0.273,0.362l0.124,0.405l0.28,0.231l0.183-0.203l0.309-0.262l0.527,0.159l-0.099,0.449l0.149,0.275l0.716,0.028l0.085-0.015l0.015,0.203l-0.168,0.304l-0.25,0.652l-0.34,0.651l-0.222-0.072l-0.71-0.128l-0.301-0.144l-0.042-0.651l-0.601,0.406l-0.374,0.015l-0.095-0.274l0.497-0.652l0.011-0.333l-0.421-0.478l-0.279-0.072l-0.388,0.392l-0.423,0.291l-0.365,0.146l-0.435,0.204l-0.552,0.536l-0.496,0.334l-0.881-0.042l-0.222-0.217l0.165-0.145l1.229-0.408l0.466-0.522l0.632-0.363l-0.699-0.129l-0.601-0.057l-0.322,0.464l-0.412,0.015l-0.13-0.159l0.04-0.493l-0.757,0.016l-0.148,0.29l-0.41,0.218l-1.052,0.045l-0.709-0.057l-1.139-0.186l-1.012-0.085l-1.355,0.061l-1.014,0.147l-0.145-0.188l-0.215-0.463l0.187-0.175l0.561-0.334l0.734-0.408l0.502-0.161l0.636-0.335z M265.435,98.655l-0.469-0.057l-0.497-0.273l-0.356-0.562l0.062-0.635l0.742-0.738l0.932-1.043l0.816,0.432l-0.375,0.435l-0.112,0.462l-0.233,0.333l-0.262,0.116l-0.58,0.319l-0.244,0.448l0.522,0.244l0.168-0.029l0.279-0.26l0.42-0.362l0.617-0.319l0.309,0.057l0.495,0.461l-0.177,0.347l-0.246,0.159l-1.134,0.42l-0.682,0.044z M211.34,59.677l-0.68-0.046l0.068-0.872l-0.375-0.333l-0.958,0.161l-2.375,0.29l0.107-0.461l0.56-0.303l1.644-0.561l-0.302-0.478l-0.102-0.415l0.106-0.417l0.398-0.835l0.434-0.566l0.254-0.648l0.331-0.471l1.11,0.566l-0.312,0.518l0.791,0.386l0.527,0.047l0.402-0.469l0.67,0.112l0.806,0.289l0.917,0.514l0.582,0.255l2.168,0.492l0.442,0.271l0.176,0.255l-0.09,0.925l0.539,0.047l0.57-0.065l0.934,0.046l0.701,0.142l1.019,0.427l-0.419,0.096l-0.269,0.127l-0.46,0.271l-0.949-0.046l-0.623-0.125l-1.328-0.125l-0.438-0.126L217.259,58l-0.528-0.301l-1.017-0.237l-0.528,0.017l-0.203,0.271l0.174,0.588l-0.126,0.096l-1.314,0.161l-0.673,0.493l-0.588,0.302l-1.116,0.287z M200.125,19.1l-0.862-0.015l-1.085-0.195l-0.308-0.664l0.819-0.304l0.77-0.072l0.666-0.024l3.475-0.125l1.263-0.12l1.374-0.026l1.714,0.324l0.397-0.094l0.397-0.377l1.303-0.287l1.759-0.099l1.975,0.209l0.746-0.001l2.562,0.137l2.621,0.324l1.424,0.09l1.461,0.161l0.448-0.165l-1.433-0.42l-1.67-0.352l-0.816-0.429l0.293-0.242l1.361-0.148l1.101-0.246l1.431-0.101l2.382-0.201l1.666,0.119l1.944,0.191l1.009,0.265l1.19,0.456l0.354,0.047l0.273-0.362l-0.959-0.508l-0.828-0.292l0.499-0.248l1.45,0.121l1.832,0.168l1.653,0.07l1.639,0.46l0.378,0.023l0.062-0.195l-0.301-0.539l1.781-0.004l1.408,0.046l0.832,0.269l0.831,0.34l0.618-0.001l-0.044-0.268l-0.331-0.467l1.075-0.077l3.691,0.386l2.726,0.288l1.937-0.077l2.987,0.018l0.967,0.047l0.757,0.12l0.126,0l1.419,0.094l1.089,0.191l0.744,0.095l1.685,0.044l1.357,0.357l-0.385,0.358l-1.237,0.121l-1.206,0.356l-1.849,0.191l-0.978-0.045l-2.191-0.159l-2.284,0.005l-0.776,0.142l-1.915,0.168l-0.597,0.465l0.75,0.366l0.761,0.044l1.03-0.048l1.705-0.279l0.79,0.021l0.808,0.434l-0.168,0.114l-1.246,0.139l-1.38,0.207l-1.174,0.295l-2.098,0.518l-1.316,0.224l-1.19,0.355l-0.924,0.286l-2.252,0.005l0.65,0.906l-0.449,0.193l-2.297,0.455l-0.768-0.019l-1.587-0.037l-1.462-0.218l-2.386-0.164l-0.66,0.33l2.591,0.695l-0.662,0.141l-0.967-0.038l-1.297,0.022l-1.068,0.022l-2.58-0.214l-2.009,0.063l-0.134,0.66l1.257-0.105l1.065,0.018l2.312,0.292l0.557,0.157l0.12,0.67l-0.33,0.197l-1.031,0.12l-0.515,0.705l-1.073,0.021l-0.448-0.058l-0.402,0.176l0.297,0.253l0.759,0.25l-0.328,0.136l-1.615,0.08l-0.867-0.037l-1.71-0.171l-0.422,0.078l0.41,0.791l-0.08,0.231l-0.649,0.289l-0.767,0.155l-1.52-0.112l-2.039-0.111l-1.43-0.227l-1.008,0.079l-1.219,0.5l1.031,0.112l0.368,0.057l2.154,0.11l1.759,0.13l1.534,0.168l2.001,0.034l0.66,0.34l0.045,0.359l-0.907,0.398l-2.685,0.268l-0.927,0.115l-1.054,0.227l-1.115,0.077l-0.467-0.28l-0.797-0.638l-0.56,0.039l-0.631,0.001l-1.453-0.318l-0.001,0.17l0.331,0.508l-1.477-0.016l-1.5-0.129l-0.875-0.319l-1.033-0.471l-0.388,0.058l0.527,0.717l-0.24,0.17l-0.821,0.133l-1.72-0.109l-2.276-0.033l-0.972-0.073l-1.382-0.394l-0.642-0.131l-0.282,0.453l-0.619,0.152l-1.843-0.316l0.161-0.586l0.219-0.228l1.525-0.117l0.61-0.249l0.961-0.173l1.179,0.036l0.499-0.172l-1.073-0.4l-1.043-0.651l0.052-0.154l0.479-0.117l1.316,0.036l1.743,0.093l0.888,0.21l1.108,0.517l1.35,0.323l1.085,0.093l1.667-0.022l0.829-0.136l0.086-0.268l0.514-0.304l-3.019,0.001l-1.025-0.171l-0.156-0.85l0.211-0.154l-1.74-0.153l-1.963-0.152l-0.274,0l-0.631,0.114l0.204-0.758l1.159-0.551l1.104-0.16l1.837-0.003l1.164,0.037l1.37,0.076l2.023,0.311l1.342,0.115l0.486-0.158l1.132-0.041l-3.399-0.802l-1.742-0.313l-3.555-1.27l-0.406,0.242l-1.398-0.878l0.025-0.258l0.313-0.108l1.747,0.104l1.905-0.004l2.019,0.06l1.6,0.382l2.535,0.784l1.448-0.043l0.833,0.095l-1.387-0.555l-2.015-0.317l1.208-0.743l1.456-0.329l1.731-0.025l1.529-0.222l2.042-0.07l1.157-0.112l1.414-0.051l-1.778-0.479l-1.425-0.153l-2.501,0.027l-1.243,0.248l-1.305,0.158l-1.425,0.202l-1.447,0.047l-0.586,0.067l-1.532-0.438l-0.214,0.111l-0.543,0.156l-2.16-0.018l-1.58,0.365l0.311-0.828l0.98-0.292l0.007-0.202l-0.606-0.247l-1.375-0.156l-1.39,0.003l-4.189,0.505l-2.031,0.672l-0.408-0.11l-0.569-0.251l0.395-0.133l0.678-0.023l-0.117-0.316l-0.698-0.398l-1.216-0.056l-0.216-0.003z M200.125,20.844l0.899-0.096l0.832,0.196l0.339,0.5l0.511,0.495l0.427,0.063l1.141,0.041l-0.081-0.236l0.056-0.411l0.438-0.109l0.718,0.194l0.718,0.322l0.374,0.3l-0.066,0.171l0.056,0.826l0.764,0.442l0.953-0.017l1.276-0.074l1.646,0.504l-1.123-0.264l-1.528,0.34l-1.599,0.221l-0.83,0.377l-0.287,0.197l-0.265,0.315l-0.448,0.021l-1.493-0.41l-0.656,0.335l0.465,0.43l-0.029,0.235l-0.412,0.196l-0.392,0.04l-1.086-0.31l-0.944-0.311l-0.26,0.645l-0.117,0.068l-0.083,0.049l-0.888,0.041l-1.74-0.094l-1.458-0.153l-0.888-0.154l-0.494,0.021l-3.115-1.31l-0.191-0.276l1.971-0.241l3.32,0.093l0.889,0.097l1.573,0.1l-2.485-0.693l-3.019-0.213l-1.103,0.122l-1.43-0.017l-0.597,0.18l-1.008,0.022l-0.606-0.198l-1.066-0.517l-1.425-0.479l-0.341-0.355l1.971,0.124l2.278-0.175l-1.255-0.249l-0.756-0.351l0.38-0.305l0.729-0.132l0.769-0.023l0.921,0.042l0.156-0.219l-1.799-0.793l1.053-0.114l1.213-0.182l1.13,0.087l0.584-0.046l0.145-0.18l-0.514-0.475l1.362,0.134l0.941,0.066l0.83,0.202l1.589,0.869l0.653,0.264l0.772,0.24l0.674-0.001l0.36-0.039z M179.067,27.216l-1.156-0.056l-0.604-0.173l-0.926-0.638l-0.621-0.193l-3.102-0.091l-1.487,0.081l-0.622,0.001l-1.444-0.056l-0.767-0.154l-1.019-0.37l-0.161-0.234l0.335-0.138l0.802-0.001l1.687,0.232l0.867-0.021l-0.031-0.235l-0.252-0.275l-1.344-0.49l-0.579-0.098l-1.075-0.077l-1.392-0.196l0.065-0.397l2.246-0.124l2.392,0.155l0.77,0.376l0.999,0.453l1.979,0.193l2.189,0.114l1.178,0.233l0.604,0.254l1.123,0.721l0.581,0.446l0.168,0.426l-0.481,0.194l-0.919,0.137z M185.907,26.758l-1.078-0.037L184,26.529l-1.029-0.484l-1.144-0.76l-0.03-0.216l0.239-0.099l2.296-0.044l1.816,0.311l3.101,0.542l-0.047,0.351l-0.254,0.331l-0.436,0.04l-1.563,0.177l-1.043,0.08z M156.886,26.865l-1.573,0.646l-0.558,0.27l-1.85,0.042l-1.019,0.079l-1.898-0.15l-0.577-0.114l-0.302-0.423l0.334-0.291l1.365-0.177l0.899,0.056l2.351-0.102l0.496,0l2.331,0.163z M132.902,31.305l-0.53-0.186l-0.95-0.466l-0.424-0.112l-0.33,0.057l-0.56,0.207l-1.269,0.059l-0.786-0.279l-0.283-0.319l0.23-0.264l1.13-0.097l0.503-0.133l0.771-0.134l0.977-0.399l0.848-0.211l0.726-0.172l0.548-0.344l1.083-0.231l1.277-0.079l2.532-0.158l1.68,0.016l0.888-0.29l1.038-0.079l1.503,0.438l-0.756,0.097l-0.852,0.231l-0.22,0.268l0.12,0.266l0.469,0.474l-0.777,0.001l-0.912,0.115l-0.918,0.662l-1-0.017l-0.867-0.981l-0.694-0.15l-0.379,0.02l-0.229,0.285l-0.588,0.342l-0.63,0.623l-0.595,0.151l-0.284,0.375l-0.705,0.356l-0.787,0.058z M191.827,30.313l-1.266-0.054l-2.278-0.165l-0.426,0.058l-0.332-0.094l-0.896-0.489l-1.185-0.414l0.192-0.229l2.433-0.042l1.542,0.263l1.472,0.054h0.171l0.89,0.358l-0.179,0.246l0.123,0.32l-0.263,0.188z M144.688,31.739l-2.222-0.395l-0.325-0.674l0.503-0.057l0.595-0.17l0.945-0.096l0.953-0.133l1.279-0.059l0.522,0.187l0.65,0.374l0.659,0.186l1.55-0.209l0.617,0.149l1.624,0.762l1.016,0.351l0.897,0.036l0.96-0.058l1.418,0.09l0.591-0.02l1.116-0.169l0.092-0.297l-0.557-0.559l-0.941-0.391l-1.347-0.354l0.96-0.322l0.524-0.379l0.569-0.152l1.097-0.116l0.507,0.17l0.773,0.678l-0.017,0.413l0.518,0.654l0.565,0.111l0.9,0.036l1.805,0.406l-0.334-0.465l0.151-0.28l0.409-0.076l1.495,0.24l0.932,0.39l-0.292,0.409l0.039,0.5l-0.358,0.461l-0.573,0.277l-0.755,0.111l-0.782,0.001l-1.682,0.095l-1.156-0.071l-1.757-0.18l-0.622-0.017l-1.129,0.277l-1.132,0.202l-0.76,0.182l-0.977,0.254l-1.625,0.292l-1.338,0.2L149.23,34.5l-0.748-0.07l-1.445-0.286l-0.276-0.378l0.648-0.128l1.219-0.038l0.738-0.146l0.852-0.075l1.166-0.057l0.622,0.017l1.09-0.149l0.483-0.553l-2.768-0.087l-0.925-0.054l-1.564,0.28l-1.625,0.168l-1.292,0.04l-0.795,0.093l-1.681-0.347l-0.479,0.167l-0.92,0.075l-0.979-0.127l-0.854-0.33l0.023-0.111l0.863-0.427l1.098-0.058l2.047-0.022l0.96-0.159z M178.479,33.234l-0.984-0.219l-0.193-0.294l0.764-0.389l0.433-0.112l0.088-0.167l-0.447-0.333l-1.161-0.054l-2.13,0.227l-0.939,0.076l-0.331,0.019l-0.854-0.276l0.039-0.335l0.739-0.02l0.542-0.244l0.587-0.057l-0.466-0.598l0.176-0.245l0.132-0.226l0.49,0.018l0.859,0.224l1.942,0.746l0.426,0.186l0.46-0.094l-0.101-0.243l-0.959-0.486l-0.371-0.131l-0.407-0.357l0.436-0.095l0.956-0.059l0.713,0.131l1.033,0.262l0.572,0.168l0.27,0.018l0.162-0.452l0.478-0.133l0.73,0.112l0.717,0.168l0.327,0.168l0.367,0.75l-0.034,0.616l-0.247,0.242l-0.831,0.335l-0.017,0.352l0.35,0.625l-0.361,0.147l-1.648-0.089l-0.862,0.112l-1.446,0.003z M200.125,30.572l-0.895,0.045l-0.853,0.17l-0.37,0.467l1.133,0.054l0.984-0.038l0.046-0.001l0.847,0.11l0.463,0.129l0.498,0.463l0.727,0.424l0.621,0.091l0.213-0.074l0.043-0.314l0.286-0.056l1.075-0.002l0.883-0.187l0.766,0.11l0.835,0.239l0.665,0.257l0.976,0.053l0.775-0.463l1.393-0.281l1.704-0.114l1.951-0.246l1.533,0.053l2.59,0.014l0.381,0.037l0.79,0.314l0.911,0.239l1.418,0.146l0.653,0.128l0.21,0.037l0.361,0.166l0.181,0.257l-0.4,0.148l-1.833,0.407l-0.135,0.255l0.469,0.666l-2.486,0.076l-0.592,0.02l-0.651,0.091l-0.768-0.053l-0.846-0.16l-0.405-0.125l-0.306-0.667l-0.833-0.218l-0.366,0.129l0.072,0.723l-0.536,0.127l-0.747-0.053l-0.91,0.109l-0.728-0.017l-0.495,0.001l-1.342-0.213l-0.593-0.197l-0.495-0.017l-0.209,0.433l-1.801,0.111l-0.831,0.074l-1.453-0.069l-0.404-0.251l-0.144-0.686l-1.237,0.129l-0.389,0.181l-0.326,0.325l-0.955,0.2l-1.011-0.034l-0.112-0.027l-0.704-0.169l-1.186-0.575l-0.675,0.489l-1.131-0.07l-0.666-0.688l-0.442-0.717l0.587-0.481l0.019-0.371l-0.292-0.316l-1.249-0.651l-0.617-0.299l-0.047-0.338l0.636-0.133l1.226-0.078l2.472-0.023l0.763,0.093l1.118,0.261l0.188,0.04l0.872,0.184l-0.613,0.189l-0.259,0.013z M128.19,41.985l-0.926-0.016l-1.059-0.102l-0.362-0.466l-0.549-0.467l-0.432-0.259l-1.123-0.363l-1.36-0.067l-0.951-0.138l-0.469-0.19l-0.168-0.174l0.537-0.106l0.589-0.298l0.481-0.211l0.08-0.386l-0.437-0.809l0.552-0.001l0.468-0.177l0.307-0.372l1.104-0.533l0.526-0.588l-0.121-0.32l-0.271-0.16l-1.229-0.677l-0.375-0.448l0.869-0.001l0.823-0.056l1.455,0.051l0.97,0.016l1.515-0.092l1.284-0.146l1.242-0.074l0.495,0.125l3.242,0.801l0.918,0.088l0.708-0.055l1.316-0.127l1.223,0.016l0.771,0.07l1.35,0.373l2.389,0.815l-0.242,0.143l-0.432,0.036l-0.26,0.072l-1.609,0.322l-1.073,0.144l-1.829,0.428l-1.069,0.319l-1.604,0.725l-1.025,0.563l-0.549,0.089l-0.974,0.124l0.066,0.924l-0.271,0.504l-0.662,0.278l-1.215,0.124l-1.213-0.067l-0.521,0.485l-0.898,0.312z M190.483,39.666l-1.146-0.208l-0.146-0.524l-0.941-0.806l-0.207-0.582l0.058-0.389l0.27-0.657l0.377-0.321l1.256,0.033l-0.089-0.16l-0.416-0.266l-0.185-0.286l0.211-0.09l0.234-0.072l2.154-0.058l1.215,0.087l1.464,0.248l1.282,0.051l1.316-0.146l1.051,0.016l0.694,0.105l0.639,0.213l-0.007,0.089l-0.224,0.179l-0.824,0.428l-0.874,0.746l-1.513,0.92l-1.386,0.073l-2.379-0.154l-1.269,0.055l1.392,0.717l-0.188,0.315l-0.855,0.369l-0.964,0.072z M181.204,41.523l-0.491-0.085l-1.101-0.552l-0.952-0.641l-1.014-0.468l-0.978-0.225l-1.438-0.12l-0.55-0.174l-2.255-1.066l0.866-0.654l0.653,0.14l1.032,0.474l1.063,0.227l0.46,0.052l0.615-0.283l0.908-0.619l0.415-0.036l0.018-0.212l-1.062-0.565l-1.068-0.424l-0.177-0.231l0.132-0.107l1.683,0.086l0.711-0.215l0.42,0l0.996,0.39l0.56,0.035l0.58-0.055l0.435-0.25l1.232-0.127l1.354,0.069l0.912,0.23l-0.324,0.268l-0.58,0.125l-0.323,0.338l-1.55,0.375l-0.392,0.16l-0.069,0.194l0.253,0.247l0.506,0.105l0.692-0.089l1.08,0.174l0.868,0.245l0.391,0.017l0.564,0.262l0.186,0.438l-0.681,0.352l-0.156,0.35l-0.271,0.68l-0.457,0.366l-0.508,0.14l-0.658,0.019l-0.582-0.103l-0.773-0.346l-0.653-0.103l0.013,0.208l1.054,0.553l-0.817,0.399l-0.77,0.036z M243.524,60.394l-0.234-0.208l-1.199-0.235l-0.673-0.331l-0.154-0.269l0.346-0.064l0.616-0.461l-1.378-0.521l-1.132-0.125l-0.76-0.349l-0.929-0.731l-0.035-0.511l-1.115-0.062l-1.311-0.366l-0.675-0.031l0.284,0.767l-0.155,0.096l-0.409-0.015l-1.704-0.332l-0.309,0.033l-0.325,0.304l-0.441,0.288l-1.312,0.082l-1.349-0.173l-1.343-0.189l-0.813-0.254l-0.052-0.319l0.196-0.4l0.382-0.354l1.066-0.163l0.192-0.178l-0.128-0.516l0.206-0.033l1.357,0.11l1.408,0.175l0.517,0.144l0.962,0.626l0.051-0.386l-0.154-0.193l0.077-0.194l0.585-0.033l0.977-0.099l0.652-0.163l0.649-0.114l0.515,0.063l0.785,0.031l0.166-0.275l-1.138-0.825l-0.773-0.356l-0.119-0.228l0.167-0.163l0.586-0.066l0.72-0.246l1.409-0.591l0.361-0.541l0.771-0.46l0.493-0.379l-0.109-0.593l-0.899-0.841l-0.407-0.496l-0.541-0.364l-0.414,0.001l-1.258-0.33l-1.041-0.481l-0.244-0.467l-0.527-0.384l-0.442,0.202l-0.551,0.202l-0.825-0.015l-0.293,0.117l-0.62,0.018l-1.255,0.169l-0.214-0.667l1.032-0.052l1.23-0.103l0.163-0.269l-1.604-0.618l-1.552-0.67l-0.879-0.015l-0.567-0.185l-0.169-0.542l-0.677-0.339l-0.45-0.05l-0.918-0.306l-0.687-0.341l-0.385-0.119l-0.611,0.155l-0.81-0.187l-1.177-0.238l-0.489-0.085l-0.379,0.138l0.529,0.307l0.453,0.05l2.838,0.712l0.438,0.271l0.069,0.306l-0.505,0.221l-0.669,0.069l-0.541-0.033l-0.757-0.049l-0.818-0.252l-1.153-0.27l-0.667-0.066l-0.323,0.17l0.044,0.204l0.426,0.236l0.259,0.438l-1.703-0.553l-0.47-0.05l-0.396,0.119l-0.63,0.153l-0.767-0.218l-0.693-0.117l-0.859,0.12l-1.474-0.184l-1.995-0.167l-1.321,0.037l-1.146-0.032l-0.862-0.186l-0.003-0.597l-0.363-0.153l-0.904-0.049l-0.396,0.342l-0.623,0.086l-1.214-0.049l-1.076-0.168l-1.303-0.477l-0.415-0.376l0.123-0.275l0.868-0.07l1.131,0.067l1.212,0.101l0.879-0.019l0.312-0.19l-0.934-0.463l-0.8-0.275l-0.905-0.102l-1.106-0.119l-0.752,0.036l-0.539-0.017l-1.249-0.223l0.114-0.416l0.292-0.557l0.34-0.14l0.646-0.054l0.081-0.227l-1.082-0.4l-0.044-0.175l0.449-0.79l1.197-0.919l0.565-0.284l0.918-0.321l0.74-0.374l0.423-0.037l0.37-0.178l0.698-0.001l0.481-0.125l0.71-0.09l1.436-0.109l1.348,0.033l0.857,0.194l-0.92,0.393l-0.815,0.48l-1.394,0.639l-0.43,0.529l0.169,0.369l1.256,0.541l-0.444,0.298l-0.076,0.402l0.257,0.313l0.862,0.554l1.559,0.621l-0.096,0.121l-1.272,0.331l-0.072,0.31l0.959,0.033l1.504,0.101l0.654-0.639l-0.103-0.415l-0.343-0.277l-0.724-0.103l-0.422-0.138l-0.884-0.538l0.101-0.157l0.506-0.245l0.473-0.193l1.001,0.12l0.837-0.071l-1.204-0.47l-0.703-0.034l-0.793-0.279l-0.056-0.193l0.053-0.545l0.886-0.319l1.207,0.086l1.509-0.056l-0.939-0.281l-1.233-0.351l0.793-0.303l1.288-0.198l1.044-0.126l1.688-0.323l1.114,0.016l0.642,0.052l0.833,0.141l0.782,0.478l1.536,0.97l0.058,0.141l-0.583,0.687l-0.709,0.632l0.038,0.733l0.364,0.086l0.65,0.033l1.088-0.315l0.284-0.455l0.595-0.088l0.791,0.034l0.454,0.174l-0.006,0.262l0.16,0.47l0.875,0.189l0.196-0.122l-0.204-0.854l0.218-0.123l0.456-0.474l1.038-0.265l0.98-0.054l0.748,0.034l0.98,0.174l1.172,0.138l1.151-0.09l0.688,0.139l0.327,0.262l0.621,0.331l0.574,0.191L235.438,40l0,0.191l-0.531,0.088l-0.484,0.279l-0.818,0.262l-0.148,0.225l0.45,0.259l0.427,0.068l0.897-0.417l0.652-0.174l0.502,0.051l0.476,0.242l0.365,0.466l0.516,0.413l0.342-0.242l1.304-0.798l1.935,0.256l0.915,0.361l-0.051,0.069l-0.638,0.346l-0.708,0.517l1.167-0.054l0.455-0.173l1.078-0.105l0.033,0.704l0.797,0.324l0.523-0.069l0.831-0.207l1.316-0.088l0.816,0.221l0.566,0.273l-0.162,0.154l-0.461,0.223l-1.87,0.43l-0.238,0.272l0.523,0.253l0.456-0.068l0.747-0.171l1.235-0.122l0.406-0.29l0.361-0.103l0.479,0.067l0.51,0.187l0.544,0.339l0.636,0.522l-1.019,0.002l-1.2,0.053l-0.424,0.135l0.059,0.269l0.372,0.134l1.333,0.065l0.938,0.183l0.543,0.217l0.233,0.301l-0.37,0.034l-0.748,0.001l-1.011-0.082l-0.875-0.216l-0.824-0.065l-0.316,0.185l1.23,0.583l-0.216,0.201l-1.552,0.12l0.245,0.283l0.437,0.166l0.551,0.032l1.331,0.364l1.312,0.347l0.247,0.182l0.039,0.282l0.351,0.38l0.75-0.217l0.536,0.049l1.413,0.295l0.298-0.067l0.649-0.15l0.61,0.032l0.752,0.379l0.862,0.477l0.376,0.346l-0.685,0.1l-0.801,0.117l-0.027,0.444l0.795-0.001l1.405-0.052l0.51-0.132l0.895,0.048l-0.386,0.559l0.918,0.179l0.514-0.001l0.943-0.379l0.685,0.343l1.089,0.407l0.194,0.098l-0.275,0.229l-0.254,0.099l-0.103,0.326l-0.819,0.05l-0.718-0.21l-0.247-0.048l-0.794,0.213l0.968,0.454l0.279,0.162l0.057,0.276l-1.057,0.197l-0.356,0.228l-0.312,0.292l-0.372-0.113l-0.819-0.583l-0.29,1.103l0.354,0.903l-0.419,0.065l-0.677-0.257l-0.751-0.176l-0.205-0.177l-0.018-0.243l-0.315-0.274l-0.93,0.276l-0.743-0.613l0.051-0.292l0.27-0.374l-0.304-0.129l-0.224-0.016l-0.992-0.08l-0.718-0.292l-1.17-0.617l-0.769-0.292l-0.762-0.048l-0.452,0.23l-0.645,0.083L250,52.592l0.281,0.179l1.05,0.682l-0.321,0.114l-0.686,0.05l-0.359-0.259L249.277,53l-0.646-0.21l0.275,0.488l0.859,0.972l0.604,0.015l0.587,0.08l0.5,0.581l0.612,0.805l0.513,0.432l0.615-0.321l0.285,0.047l0.592,0.399l0.585,0.271l1.38,0.396l-0.634,0.113l-0.213,0.208l0.254,0.19l0.568,0.286l0.962,0.444l0.324,0.237l0.242,0.682l-0.112,0.428l-1.302-1.155l-0.554-0.237l-0.027,0.238l0.118,0.27l1.055,1.281l-0.01,0.3l-0.926-0.125l0.053,0.205l0.432,0.409l0.378,0.519l-0.563-0.172l-0.615-0.313l-0.889-0.693l-0.145-0.031l-0.719,0.064l-0.91-0.188l-1.44-0.662l-0.319-0.285l-1.062-0.665l0.187,0.777l-1.22-0.473l-0.567-0.158l-0.872-0.03l0.095,0.222l0.799,0.696l0.853,0.426l1.842,0.645l1.296,0.644l0.774,0.549l0.442,0.486l0.429,0.689l-1.833-0.341l-1.524-0.421l-1.251-0.28l-1.444-0.107l-1.092-0.25l-0.898-0.644l-1.146-0.14l-0.638-0.204l-0.635-0.141l-0.058,0.145z M146.194,38.698l0.818-0.037l0.78-0.125l1.138-0.548l0.895-0.019l1.723,0.243l0.939,0.262l-0.188,0.877l0.515-0.071l0.66-0.019l0.792-0.229l0.599-0.141l0.758,0.016l0.334-0.071l-0.989-0.965l0.156-0.036l1.38,0.138l1.208,0.245l0.675,0.245l0.259,0.245l0.194,0.508l0.965,1.063l0.638,0.346l1.045-0.315l0.14-0.261l-1.243-1.361l-0.439-1.321l0.228-0.354l1.91,0.262l1.775,0.156l2.031,0.719l0.36,0.175l0.3,0.316l0.16,0.701l0.511,0.645l0.352,0.26l0.856,0.606l0.048,0.19l-0.178,0.243l-0.333,0.605l0.179,0.31l0.224,0.12l1.4,0.649l0.509,0.171l1.151,0.254l1.513,0.1l2.056,0.576l1.012,0.39l0.364,0.793l-0.168,0.101l-1.071-0.082l-0.811-0.234l-0.945-0.234l-0.551,0.169l-0.665,0.204l-1.021,0.036l-0.256,0.118l0.208,0.689l1.087-0.069l0.614-0.152l0.676-0.119l0.876,0.536l-0.01,0.235l-0.526,0.151l-0.517,0.252l-0.583,0.102l-1.417,0.12l-1.049-0.015l-1.194-0.082l-1.594-0.248l-2.278-0.499l-0.553-0.217l-0.436-0.335l-0.482-0.033l-0.581,0.102l-0.402,0.37l-1.114,0.505l-1.055,0.019l-1.411,0.103l-1.253,0.42l-2.753,0.356l-1.42,0.019l-1.205,0.086l-1.984-0.063l-0.483,0.101l-0.916-0.015l-1-0.282l-0.061-0.468l0.198-0.101l0.002-0.302l-0.395-0.2l-0.462-0.1l-3.146-0.112l-1.258-0.115l-0.864-0.167l-0.801-0.2l-0.753-0.504l-1.274-0.554l0.303-0.069l0.531-0.222l1.572-0.054l0.603-0.188l0.558,0.016l0.91-0.019l0.904-0.087l1.716,0.031l0.935-0.002l2.14,0.047l1.09-0.002l1.711-0.038l0.415-0.154l-0.681-0.221l-2.312-0.492l-1.942-0.202l-4.059-0.061l-1.569-0.014l-1.694,0.055l-0.955,0.053l-0.604,0.001l-1.651-0.529l0.011-0.207l0.28-0.069l0.823-0.053l1.315-0.209l0.996,0.032l1.78-0.141l0.931-0.105l0.5-0.277l-0.392-0.346l-2.023,0.073l-1.578,0.159l-0.393-0.051l-0.554-0.189l-0.677-0.346l-0.65-0.19l-0.692,0.054l-0.709-0.242l-0.039-0.279l1.304-0.981l2.62-0.848l0.909-0.143l0.373-0.177l1.297-0.267l1.324-0.162l0.701-0.267l1.113-0.091l1.026,0.246l-0.07,0.212l-0.548,0.354l-0.021,0.81z M251.273,99.526l-0.188,0.153l-0.16-0.291l0.192-0.077l-0.02-0.256l0.143-0.069l-0.042-0.154h-0.224l-0.606-0.231l0.077-0.229l-0.31-2.819l-0.174-0.274l-0.488-0.288l-0.771-0.025l-0.41,0.176l-0.381-0.085l-0.505-0.36l-0.273-0.085l-0.632,0.526l-0.514,0.626l-1.139,2.22l-1.139,1.45l-1.161-0.124l-0.402,0.06l-0.363,0.435l-0.174,0.375l-1.093-0.095l-1.855-0.004l-2.508-0.029l-1.76,0.009l-0.968,0.523l-0.534,0.305l-1.754,0.814l-0.545,0.164l-0.146,0.434l-0.163,0.512l-0.44,0.275l-1.156,0.197l-1.305-0.138l-1.123-0.01l-0.93,0.091l-0.47,0.203l-0.162,0.375l0.018,0.319l0.16,0.471l0.047,0.362l-0.875,0.427l-1.464,0.452l-0.944,0.163l-0.919,0.062l-0.88,0.262l-0.939,0.478l-0.925,0.506l-0.524,0.117l-0.573-0.068l-0.497-0.169l-0.371-0.427l-0.012-0.33l0.044-0.218l0.707-0.525l0.414-0.294l0.264-0.433l0.294-0.544l0.377-0.576l0.028-0.746l-0.054-0.545l-0.876-3.16l-2.529-1.05l-0.26-0.33l0.11-0.318l-0.307-0.235l-0.916-0.181l-0.184-0.294l-0.178-0.135l-0.628,0.024l-0.46-0.465l-0.101-0.429l-2.15-1.061l-3.975-1.576l-0.977-0.386l-0.797-0.227l-0.805,0.189l-1.469,0.592l-0.707-0.074l-0.542,0.049l-0.196-0.144l-0.156-0.115l-0.474-0.041l-0.855,0.083l-0.197-0.116l-0.028-0.282l-0.373,0.075l-0.412,0.191l-0.219,0.06l-0.573,0.141l-0.506-0.098l-0.064-0.185l-0.469-0.086l-0.241-0.271l-0.502-0.013l-0.16,0.247l-0.338-0.48l-0.271,0.012l-0.02-0.185l-1.425-0.208l-0.518,0.076l-0.833-0.451l-0.468-0.46l-0.279-0.371l-0.896-0.748l-0.501,0.036l0.131,0.347l0.387,0.588l-0.68-0.003l-2.687,0.029l-2.798-0.029l-1.348,0.007l-2.105-0.003l-2.915,0.016l-2.781-0.029l-2.131,0.012l-2.935-0.014l-0.601,0.003l-4.84-0.018l-3.617,0.004l-0.875,0.005l-3.821-0.023l-1.089,0.035l-4.13-0.021l-0.74-0.011l-5.117,0.028l-1.687-0.006l-2.87,0.001l-3.938-0.008l-4.588,0.025l-1.335-0.022l-2.579-0.001l-0.194-0.013l-0.187-0.151l-0.509-0.305l-0.071-0.437l0.074-0.346l-0.708,0.25l-0.373-0.029l-0.331-0.305l-0.162-0.496l-0.125-0.189l-0.385,0.088l-0.23,0.205l-0.483,0.059l-0.721-0.495l-0.119-0.425l-0.201-0.821l-1.051,0.104l-1.01-0.277l-0.487-0.087l-0.173-0.087l-0.143-0.396l-0.438-0.352l-0.591,0.222l-1.236,0.046l-0.461-0.117l-0.383-0.249l-0.106-0.25l0.257-0.648l0.458-0.222l-0.227-0.294l-1.24-0.086l0.617-0.518l0.398-0.281l0.547-0.149l0.605-0.508l-0.874,0.006l-0.621,0.149l-0.362-0.043L116,83.422l-0.039-0.978l-0.789,0.002l-1.015-1.066l0.132-0.238l0.034-0.53l-0.547,0.056l-0.83,0.492l-1.266-0.934l-0.384-0.521l-0.204-0.402l-0.068-0.432l0.419-0.404l0.161-0.254l0.436-0.3l-0.358-0.689l-0.393-0.777l0.163-0.788l-0.402-0.255l-2.025-0.763l-0.98-0.314l-0.189-0.029l-0.512-0.393l-1.67-1.882l-1.769-1.768l-0.814-0.58l-2.048-1.175l-0.35-0.322l-0.371-0.492l-0.316-0.199l-0.832-0.073l-0.495,0.126l-0.731,0.498l-1.225,0.67l-0.848,0.205l-0.238,0.325l-0.945-0.673l-2.162-1.318l-0.348-0.292l-0.173-0.387l-0.332-0.388l-0.739-0.059l-2.424,0.122l-0.84-0.074l-0.196-0.279l-0.089-1.046l-0.026-2.167l0.043-4.334l0.026-2.183l-0.129-2.796l-0.052-2.335l-0.039-2.259l0.003-2.855l-0.102-0.483l0.71,0.024l0.9-0.086l0.964,0.116l2.012,0.451l1.601,0.518l1.214,0.266l1.04,0.115l0.731,0.032l1.619,0.164l0.888,0.232l0.429,0.149l0.254-0.034l-0.452-0.601l-0.357-0.2l-0.345-0.15l-0.064-0.419l1.344-0.423l0.745,0.066l0.578-0.068l0.15-0.102l1.736,0.148l0.771-0.001l1.125-0.373l0.309-0.186l0.442,0l0.656-0.221l0.759-0.069l0.866-0.086l0.734-0.086l0.469-0.239l0.392-0.188l0.771-0.104l1.045-0.002l0.872,0.123l-0.445,0.404l-0.352,0.119l-1.101,0.137l-1.092,0.373l-1.244,0.171l-1.22,0.271l-0.699,0.522l-1.767,0.255l-0.681,0.487l0.846,0.266l1.441,0.748l-0.219-0.55l0.168-0.351l1.196-0.253l0.39-0.235l0.726-0.421l1.727-0.053l0.96-0.372l1.158-0.389l2.066-0.173l0.643-0.338l0.921-0.272l0.821-0.189l0.476-0.239l-0.178-0.272l-0.702-0.392l-0.655-0.444l0.899,0.101l0.764,0.272l0.701,0.306l0.412,0.324l0.376,0.476l0.449,0.523l0.393,0.235l1.246,0.486l0.186,0.067l1.154,0.216l0.394-0.018l0.199-0.151l-0.511-0.639l0.07-0.27l0.548-0.035l0.334-0.136l0.627-0.103l0.383,0.354l0.059,0.421l-0.205,0.287l0.833,0.133l0.938-0.069l1.136-0.457l0.536-0.49l0.479-0.069l1.131,0.015l1.536,0.267l1.745,0.435l1.396,0.334l2.095,0.349l1.024,0.216l0.619,0.066l1.572,0.282l1.121,0.065l1.144,0.148l1.096,0.032l1.4-0.086l0.899,0.099l1.008,0.282l0.982,0.349l0.434,0.249l0.191,0.333l-0.524,0.134l-0.935-0.032l-0.566,0.051l-0.849,0.135l-0.354,0.714l3.323,0.358l1.726,0.079l1.749,0.014l0.868-0.068l0.738-0.051l0.94-0.167l0.895-0.118l0.938-0.101l0.886,0.032l1.432,0.477l1.452,0.179l0.42,0.115l1.225,0.443l-0.013,0.312l-0.504,0.083l-0.35,0.247l0.305,0.147l1.823,0.979l-0.162-0.392l-0.024-0.312l0.456-0.05l0.617-0.132l-0.062-0.181l-0.972-0.656l-0.128-0.198l-0.145-0.445l0.121-0.745l0.35-0.034l1.944-0.136l0.928-0.151l0.207-0.299l0.459-0.217l0.613-0.035l1.098,0.281l1.528,0.279l0.968,0.064l0.969-0.102l0.612,0.414l0.248,0.082l0.962,0.213l1.211,0.13l0.678,0.081l1.146-0.002l0.879-0.2l1.755-0.02l1.876,0.029l1.07-0.052l1.18-0.267l0.959,0.478l0.95,0.296l0.522-0.018l0.243-0.314l-0.017-0.513l-0.666-0.231l-0.732-0.131l-1.377-0.064l0.089-0.449l1.193-0.085l0.575,0.065l0.804,0.214l0.871,0.198l0.858,0.048l0.498,0.198l0.088,0.183l-0.095,0.132l-0.287,0.86l0.179,0.51l0.304,0.164l0.177,0.065l0.792,0.097l0.951,0.311l-0.071-0.559l-0.466-0.989l0.137-0.48l0.258-0.266l0.712,0.015l0.811-0.035l1.229-0.85l0.492-0.051l0.479-0.001l0.517-0.151l0.033-0.133l-0.15-0.367l-0.375-0.35l-0.307,0.001l-0.81,0.185l-0.988-0.082l0.535-0.52l0.806-0.069l0.435-0.168l0.572-0.001l0.739,0.4l0.464,0.167l0.065-0.268l-0.081-0.956l-0.744,0.069l-0.897-0.032l-0.68-0.116l-0.859-0.318l-0.725,0.085l-1.245-0.183l-0.861-0.234l-0.956-0.218l-0.657-0.338l-0.092-0.136l-0.022-0.324l0.33-0.137l0.842-0.463l-0.486-0.221l-1.188-0.375l0.09-0.207l0.58-0.604l0.593-0.294l0.387-0.035l1.032,0.257l0.139-0.035l0.173-0.346l-0.709-0.362l-0.201-0.277l0.23-0.035l0.551-0.331l0.367-0.035l1.841-0.021l0.559,0.086l0.728,0.189l1.26,0.449l0.432,0.328l0.195,0.38l-0.246,0.603l1.261,0.53l0.809,0.495l1.134,0.493l-0.377,0.341l-0.985,0.036l-0.474,0.273l-0.416,0.557l0.471,0.067l1.071,0.233l0.805,0.049l0.387-0.136l0.597-0.001l1.477,0.351l-0.335,0.353l-0.563,0.219l0.092,0.151l0.796,0.467l0.358,0.601l0.025,0.833l0.303-0.063l0.021-0.004l0.411-0.067l0.608-0.367l0.655-1.137l0.668-0.42l0.523,0.016l0.731,0.284l1.064,0.55l0.473,0.383l0.209,0.45l-0.159,0.433l-0.336,0.034l-0.796-0.098l-0.202,0.299l-0.043,0.415l0.35,0.396l1.146,0.659l0.61,0.493l0.463,0.279l0.595-0.166l0.896-0.167l0.369-0.132l0.208-0.66l0.764-0.398l0.599-0.416l0.249-0.664l0.363-0.75l0.237-0.184l1.394,0.081l0.329-0.067l0.134-0.518l-0.985-0.333l-0.918-0.35l0.088-0.891l0.595-0.271l0.787,0.032l0.42-0.068l0.571,0.016l3.459,0.616l1.325,0.669l0.506-0.001l0.553-0.068l0.454,0.201l0.244,1.036l-0.474,0.268l-0.431,0.101l-0.243-0.05l-0.718-0.532l-0.263,0l-0.799,0.269l0.123,0.316l0.309,0.515l0.699,0.729l0.855,0.528l1.108,0.576l0.024,0.313l-0.478,0.642l-0.439,0.181l-1.407,0.772l-0.674,0.083l-1.123,0.509l-0.763-0.276l-1.654-0.962l-0.586-0.262l-0.497-0.048l-0.684,0.281l1.364,0.521l1.483,0.896l-0.708,0.067l-0.691-0.081l-1.288,0.084l-0.375-0.129l-0.596-0.62l-1.147-0.014l-1.857,0.118l-0.253,0.229l0.614,0.244l1.311,0.421l-0.159,0.195l-0.611,0.327l-2.045,1.106l-0.657,0.179l-0.527,0.001l-0.859-0.241l-0.816-0.484l-0.225-0.081l-1.189-0.225l-0.736-0.259l-0.598-0.112l-0.947,0.014l-0.289,0.004l-1.214,0.174l1.503,0.278l1.136,0.21l1.751,0.774l1.629,0.433l1.233,0.126l1.02,0.031l-0.618,1.091l-1.237,0.705l-0.856,0.432l-0.728,0.161l-0.829,0.049l-0.928-0.126l-1.062-0.38l-0.048,0.351l-0.025,0.287l0.321,0.572l-0.02,0.159l-0.741,0.031l-0.058,0.002l-1.365-0.108l-1.649-0.41l-0.884-0.078l-2.962-0.322l2.146,0.864l1.576,0.156l1.367,0.267l0.562,0.205l0.33,0.268l-0.011,0.19l-0.642,0.333l-1.106,0.207l-1.429-0.076l-0.511-0.062l-0.367,0.269l1.254,0.423l-0.469,0.426l-1.06,0.316l-1.454,0.662l-0.421,0.252l0.218,0.704l-0.313,0.235l-0.909,0.205l-0.31,0.282l-0.529,0.64l-0.276,0.296l-0.241,0.669l-0.274,0.543l-0.323,0.666l0.056,0.416l-0.161,0.554l0.123,0.875l0.136,0.536l0.598,0.366l0.25,0.015l0.257,0.091l0.664,0.014l1.164-0.094l0.276,0.045l0.367,0.29l0.413,0.763l0.813,1.157l0.22,0.668l-0.132,0.91l0.673,0.014l1.874-0.428l1.261-0.033l0.723,0.074l0.535,0.157l1.062,0.311l2.129,0.435l1.896,0.903l0.993,0.933l3.5,0.67l0.644,0.225l0.982,0.403l0.986,0.253l0.553,0.104l0.702-0.091l0.453,0.044l0.828-0.077l1.245,0.163l1.407,0.207l0.401,0.194l-0.297,0.702l-0.142,0.85l0.154,0.283l0.307,0.342l0.07,0.416l-0.115,1.025l-0.309,0.593l0.022,0.208l0.604,0.266l0.481,0.339l0.264,0.354l0.046,0.488l-0.076,0.354l0.97,0.116l0.963,0.47l0.676,0.588l0.392,0.588l0.078,0.162l0.64,0.014l0.726,0.41l0.907,0.601l-0.349-0.66l-0.22-0.279l0.134-0.338l0.573-0.414l0.365,0.176l0.381,0.456l0.262,0.353l0.165-0.354l0.107-0.545l-0.215-0.456l0.541-0.532l0.139-0.546l-0.183-0.517l-0.337-0.458l-0.261-0.754l-0.004-0.548l-0.205-0.593l-0.218-0.43l0.615-0.016l-0.097-0.476l-0.296-0.252l-0.657-0.163l-0.375-0.282l-0.326-0.923l1.252-0.271l0.872-0.241l0.625-0.271l1.758-0.949l0.629-0.302l1.043-0.935l0.434-0.544l0.237-0.665l0.054-0.529l-0.257-1.045l-0.246-0.531l-0.239-0.319l-0.938-0.729l-0.467-0.274l-1.105-0.532l-0.363-0.122l-0.453-0.274l-0.151-0.046l-0.293-0.351l0.08-0.107l0.868-0.522l0.553-0.875l0.293-0.416l0.25-0.092l0.447-0.017l0.295-0.277l-0.106-0.523l-0.18-0.355l-0.316-0.402l-0.048-0.202l0.258-0.357l0.005-0.264l-1.751-0.105l1.084-0.92l0.503-0.704l0.007-0.125l-0.316-0.203l-0.609-0.265l-0.244-0.266l-0.043-0.533l0.305-0.425l0.554-0.315l0.57-0.19l0.827,0.062l1.781,0.374l1.097,0.234l0.753,0.077l1.44,0.013l1.08-0.144l0.86-0.222l0.21-0.047l0.179-0.063l0.589,0.078l0.991,0.407l0.254,0.125l0.754,0.454l0.918,0.375l0.796,0.437l-0.294,0.391l0.406,0.233l1.698,0.496l1.958,0.354l0.725-0.033l0.368-0.203l0.339,0.295l-0.013,0.404l-0.577,0.343l-0.123,0.45l0.438,1.327l0.136,0.722l0.23,0.414l-0.049,0.353l-0.248,0.169l-0.445-0.014l-0.347-0.015l-0.138,0.674l0.375,0.274l1.137-0.415l0.366-0.047l0.781-0.047l0.286,0.015l0.677,0.32l0.378,0.351l0.004,0.259l-0.081,0.123l0.277,0.32l0.516-0.184l0.306-0.046l1.173-0.079l0.636-0.184l0.436-0.383l0.333-0.551l0.326,0.015l0.194,0.122l0.693,0.717l0.042-0.062l0.108-0.764l0.317-0.583l0.475-0.262l0.539-0.385l-0.651-0.505l0.008-0.308l0.272-0.139l0.98-0.094l0.193-0.139l0.512-0.665l0.667,0.37l0.607,0.599l0.785,0.506l0.596,0.797l1.045,0.764l0.264,0.352l-0.344,0.291l0.095,0.335l0.573-0.031l0.365,0.777l0.182,0.183l0.324,0.121l0.743,0.136l0.281,0.258l0.133,0.38l-0.379,0.092l-0.416,0.168l0.411,0.318l0.397,0.227l0.77,0.196l0.279,0.227l0.034,0.424l-0.056,0.076l-0.409,0.106l-0.676-0.029l-0.745-0.12l-0.316,0.061l0.091,0.166l0.273,0.181l0.189,0.241l0.333,0.513l0.411,0.226l0.634,0.029l0.462,0.18l0.838,0.496l0.899,0.435l0.246,0.33l-0.035,0.195l-0.447,0.781l0.508,0.059l0.663-0.166l0.786-0.077l0.79,0.164l0.574,0.194l1.162,0.49l0.981,0.132l1.517,0.295l-0.184,0.253l-0.718,0.21l-0.736,0.21l-0.663,0.046l-0.834,0.24l-0.583,0.402l-0.65,0.225l-1.032,0.061l-0.286,0.075l-0.324,0.268l0.029,0.371l-0.271,0.535l1.175-0.343l0.542-0.09l0.649-0.105l1.201-0.774l1.251-0.478l1.146-0.106l0.662,0.237l0.35,0.341l-0.398,0.446l0.036,0.119l0.307,0.296l0.616-0.224l0.455-0.164l0.655,0.192l1.051,0.487l0.226,0.251l0.022,0.178l-0.299,0.43l-0.05,0.355l-0.406,0.444l1.001,0.929l-0.365,0.37l-0.795,0.282l-1.078,0.621l-0.662,0.281l-1.097,0.046l-0.823,0.119l-1.548,0.077l-0.433,0.413l-0.916,0.795l-0.686,0.427l-0.612,0.294l-0.938,0.222l-1.494,0.172l-1.845,0.127l-1.452-0.07l-2.031-0.084l-0.355,0.03l-1.073,0.075l-1.058-0.012l-1.873-0.099l-0.917-0.027l-1.758,0.106l-0.547,0.206l-0.523,0.294l-0.537,0.585l-0.205,0.554l-0.287,0.335l-0.591,0.19l-1.07,0.104l-0.537,0.147l-1.098,0.555l-0.774,0.54l-0.794,0.612l-0.325,0.363l-0.33,0.233l-0.868,0.843l-0.485,0.566l-0.418,0.276l-0.46,0.58l-0.518,0.968l0.749-0.737l0.375-0.131l0.688-0.479l1.059-0.944l1.097-0.785l2.028-0.948l1.245-0.395l1.797-0.512l1.065-0.235l1.03-0.235l1.473-0.148l0.922,0.056l0.895,0.289l0.509,0.29l0.136,0.189l0.144,0.464l-0.125,0.218l-0.326,0.219l-1.059,0.292l-0.753,0.452l-0.581,0.044l-0.845-0.23l-0.726,0.045l-0.645,0.19l0.279,0.08l1.13,0.229l0.17,0.122l0.256,0.444l0.074,0.095l1.299-0.485l-0.028,0.216l0.479-0.148l0.372,0.162l-0.36,0.229l-0.231,0.256l0.112,0.27l-0.163,0.014l-0.074,0.229l-0.91,0.444l1.216,0.013l0.077,0.188l-0.187,0.282l0.091,0.43l0.118-0.081l0.239,0.134l-0.063,0.134l0.048,0.202l0.351,0.457l0.009,0.147l0.824,0.054l0.154,0.094l0.04-0.067l0.727,0.147l-0.315,0.134l-0.373-0.013l-0.047,0.134l0.525,0.147l0.211,0.241l0.569-0.081l0.135,0.134l0.212-0.014l0.134,0.174l0.418-0.04l-0.075-0.107l0.843,0.067l0.241,0.107l-0.207,0.201l0.242-0.107l0.26,0.027l0.245-0.013l0.696-0.362l0.303-0.081l0.104,0.362l0.377,0.161l0.538-0.121l0.488,0.416l-0.405,0.254l0.089,0.107l0.825,0.027l0.164,0.174l-0.521,0.121l-0.161-0.121l-0.3,0.134l0.118,0.094h-0.515l-0.23-0.04l0.109,0.161l-0.45,0.04l0.056,0.107l-0.443,0.014l-0.128,0.147l-0.45,0.04l-0.368,0.253l-0.09-0.106l-0.706,0.28l-0.046,0.053l-0.529,0.133l-0.119-0.267l-0.274,0.106l-0.163,0.267l-0.188-0.187l-0.068,0.253l-0.218,0.08l-0.094,0.187h-0.513l-0.081-0.08l-0.169-0.053l0.032-0.347l-0.242,0.36l-0.202,0.12l-0.131-0.253l-0.354,0.027l0.043,0.24l-0.233,0.04l0.312,0.08l0.033,0.213l-0.103,0.12l-0.174-0.067l-0.768,0.453l0.127,0.16l-0.235,0.12l-0.194,0.053l0.015,0.213l-0.161-0.12l0.083,0.173l-0.217,0.08l-0.14-0.107l0.096,0.253l-0.222,0.066l-0.146-0.08h-0.148l-0.064,0.133l-0.156-0.106l-0.243,0.227l-0.086,0.292l-0.201-0.226l-0.344,0.133l-0.154-0.187l-0.349-0.479l-0.138,0.24l-0.419-0.866l0.456-0.773l0.284-0.16l0.035-0.12l-0.35,0.12l-0.357,0.267l-0.076-0.106l0.924-0.507l0.125,0.146l0.195-0.093l-0.258-0.107l1.103-0.52l1.109-0.562l0.658-0.361l0.336,0.094l-0.067,0.428l0.179-0.054l0.258,0.281l-0.044-0.201l-0.017-0.174l0.632-0.214l0.73-0.134l0.192,0.067l0.202-0.081l-0.152-0.094l-0.653-0.053l-0.595,0.053l-0.42-0.053l-0.804-0.014l-0.306,0.027l-0.251,0.081l-0.246,0.094l0.033-0.214l1.128-0.563l0.054-0.201l0.252-0.08l-0.052-0.174l-0.523,0.281l0.097-0.134l-0.502-0.51l0.309,0.443l-0.36,0.482l-0.328,0.013l-1.974,0.817l-0.284,0.08l-0.362-0.201l-0.227-0.067l0.23,0.201l-0.788,0.401l-0.219-0.174l-1.019-0.054l-0.124,0.147l-0.38-0.241z M186.193,47.833l-0.713-0.032l-0.922-0.181l-0.882-0.065l-1.25-0.314l-0.973-0.182l-0.604-0.049l-1.083-0.199l0.43-0.335l1.542-0.405l0.385-0.186l0.115-0.673l0.305-0.236l0.831-0.069l0.743,0.184l1.436,0.603l1.287,0.4l0.074,0.285l0.315,0.284l1.094,0.516l-0.288,0.117l-1.263,0.486l-0.578,0.051z M231.09,50.646l-1.319-0.03l-0.449-0.147l-0.232-0.247l-0.173-0.478l0.3-0.43l0.708-0.664l0.662-0.267l1.359-0.168l0.911,0.197l0.79,0.314l-0.021,0.464l-0.039,0.727l-0.362,0.265l-1.025,0.348l-1.108,0.117z"/>
+ <path id="RU" country:name="Russia" country:shortname="Russia" d="M444.972,79.145l0.47-0.218l0.307-0.093l-0.294-0.024l-0.419,0.061l-0.15-0.135l-0.125,0.184l-0.108-0.012l0.066-0.491l0.177-0.218l0.41,0.009l1.489,0.062l0.417,0.014l0.339-0.075l0.121-0.253l-0.175-0.288l0.246-0.05l-0.068-0.122l-0.068-0.123l0.353-0.096l0.12-0.034l0.051,0.154l0.086,0.052h0.24l0.223,0.12l0.257,0.069l0.514,0.068l0.086,0.103l0.223-0.051h0.445h0.257l0.223-0.017l0.086,0.137l0.103,0.103l0.188,0.034l0.171,0.069l0.018,0.137l0.052,0.12l-0.224,0.12l-0.068,0.154l-0.068,0.206l0.018,0.171l0.034,0.137l0.029,0.038l-2.96,0.101l-2.246-0.115l-0.842-0.006z M717.633,81.109l0.42,0.443l0.429,0.62l0.183,0.457l0.01,0.767l-0.244,0.442l-0.197,0.78l-0.002,0.764l0.29,0.777l0.592,0.849l0.65,1.446l0.899,1.614l1.115,1.679l-1.26-0.677l-0.832-0.39l-0.99-0.056l-0.268,0.088l-0.396,0.204l-0.462,1.045l-0.266,1.101l-0.082,0.579l0.277,0.982l0.183,0.216l0.659,0.908l0.54,0.201l0.463,0.648l-0.314,1.246l-0.664-1.258l-0.866-0.301l-0.224,0.029l-0.415,0.303l-0.311,0.534l-0.643,0.907l-0.422-0.5l-0.19-0.929l0.637-1.146l-0.395-0.884l0.175-0.454l0.502-0.63l-0.131-0.723l-0.196-0.376l-0.27-0.55l-0.062-0.235l0.403-0.302l0.284-0.915l0.075-0.784l0.005-1.326l0.15-1.302l-0.09-0.732l-0.213-0.469l-0.83-0.85l-0.1-0.897l0.114-0.192l0.359-0.722l0.065-0.738l-0.336-0.457l0.172-0.237l0.374-0.03l0.62-0.031l1.023-0.534z M471.158,84.281l-0.002-0.142l-0.165-0.066l-0.082-0.115l-0.164-0.082l0.033-0.099l-0.033-0.23l-0.033-0.164l0.082-0.099l-0.147-0.131l-0.099-0.148l0.132-0.066v-0.165l-0.296-0.164l-0.279-0.263l-0.017-0.164l0.099-0.131l0.131-0.165l0.362-0.017l0.328,0.049l0.197,0.132l0.51,0.016l0.525-0.099l0.444-0.247l0.049-0.065l0.148-0.083h0.296l0.065-0.164l-0.033-0.131l-0.279-0.066l-0.296-0.148l-0.099-0.181l0.082-0.017l0.066-0.049l0.032-0.065l-0.263-0.066l-0.361-0.099l-0.378-0.066l-0.361,0.066l-0.182-0.066l0.066-0.181l0.099-0.197l-0.066-0.148l-0.164-0.099l-0.279-0.082l-0.23-0.066l-0.443-0.213l-0.115-0.23l-0.164-0.263l-0.214-0.017l-0.017-0.099l0.066-0.131l0.099-0.115l-0.132-0.033l-0.181,0.049l-0.082-0.115l-0.132-0.181l-0.345-0.049l0.049-0.147l0.033-0.165l0.099-0.049l0.115-0.082v-0.083h0.114l0.066-0.131l-0.05-0.164l-0.147-0.099l-0.197-0.247l0.131-0.165l0.033-0.164v-0.083l0.065-0.115l-0.049-0.115l-0.147,0.033l-0.165-0.033l-0.147-0.099l-0.099-0.099l-0.279-0.099l-0.132-0.131l-0.542-0.115l-0.247,0.049l-0.099-0.049l-0.131-0.049l-0.23,0.083l-0.147,0.099h-0.165l-0.279,0.016l-0.214,0.197h-0.197l-0.164-0.148l-0.065-0.148l0.017-0.099l0.164-0.099v-0.115l-0.147-0.017l-0.296-0.065l-0.312-0.049l-0.361,0.049l-0.214,0.065l-0.197,0.033l-0.082-0.148l-0.132-0.148l-0.312-0.033l-0.181-0.016l-0.197,0.131l-0.229-0.066l-0.165-0.147l0.061-0.042l0.015-0.117l0.044-0.087l-0.088-0.233l0.015-0.189l-0.131-0.117l0.059-0.087l-0.16-0.043l-0.146-0.102l-0.029-0.16l-0.131-0.058l-0.116-0.102l0.043-0.073l0.059-0.087l-0.073-0.044l-0.087-0.014l-0.131-0.073l-0.146,0.015l-0.204,0.059l0.044-0.102l0.102-0.073l0.073-0.087l-0.029-0.117l0.072-0.131l-0.131-0.087l0.103-0.029l0.087-0.015l0.102-0.073l0.015-0.087l0.029-0.116l0.015-0.087l-0.204-0.058l-0.087-0.073l-0.204-0.087l-0.232-0.073v-0.117l0.015-0.116l-0.37,0.004l-0.081-0.106l0.116-0.058L461.402,72l0.029-0.117h0.131l0.087-0.116l0.059-0.102l0.16-0.058l0.262-0.043l0.175-0.073l-0.059-0.059l-0.175-0.043l-0.043-0.146l-0.015-0.087v-0.073l-0.088-0.073l-0.203-0.087l-0.175-0.233v-0.175l0.175-0.131l-0.029-0.16l-0.073-0.189l-0.131-0.437l-0.029-0.16l0.088-0.16l0.204-0.131l0.319-0.131l0.219-0.204l0.175-0.277l0.058-0.131l0.088-0.043h0.116h0.189l0.175-0.044l0.043-0.174l-0.16-0.131l-0.145-0.053l-0.089-0.13l-0.17-0.038l0.1-0.253l0.339-0.038l0.153,0.165l0.229,0.063l0.188-0.088l-0.094-0.139l0.301-0.154l0.485,0.199l0.296-0.062l0.312-0.338l0.311-0.185l0.75,0.106l0.781,0.275l0.439,0l0.363-0.154l-0.386-0.399l-0.59-0.323l-0.393-0.03l-1.204,0.08l-0.616-0.091l-0.271-0.108l-0.299-0.309l0.258-0.434l-0.065-0.201l-0.199,0.044l0.174-0.285l1.946-1.145l1.983-1.195l1.385-0.758l0.591-0.536l0.43-0.536l0.105-0.409l-0.161-0.346l-0.436-0.392l-0.703-0.265l-1.357-0.499l-0.439-0.33l0.327-0.191l0.542-0.415l0.057-0.254l-0.151-0.253l-1.286-1.395l-0.37-0.509l0.029-0.37l0.187-0.403l0.44-0.535l0.196-0.356l-0.772-1.195l-1.402-1.394l0.328-0.296l1.303-0.777l0.421-0.364l-0.543-0.392l-0.964-0.506l-0.872-0.194l-0.563-0.212l-0.116-0.529l0.258-0.465l0.024-0.283l0.689-0.303l1.013-0.672l1.023-0.49l0.77-0.121l0.824-0.021l0.514-0.204l0.404-0.288l0.617-0.051l1.002-0.254l0.643-0.237l0.01,0.151l0.255,0.386l0.358,0.284l0.543,0.2l0.919,0.082l0.602,0.1l0.078,0.602l0.695-0.319l0.421,0.049l1.083,0.048l0.875,0.015l0.522,0.032l1.116-0.002l1.293,0.281l2.728,0.512l0.984,0.364l1.595,0.86l0.583,0.214l1.48,0.246l1.296,0.212l2.018,0.623l0.328,0.279l-0.051,0.444l0.147,0.295l0.426,0.294l0.104,0.294l-0.24,0.344l-0.69,0.491l-1.092,0.54l-0.816,0.262l-1.75,0.36l-0.907,0.083l-1.631-0.013l-1.391-0.192l-2.038-0.175l-1.63-0.192l-1.342-0.339l-2.256-0.485l-1.114-0.112l-0.476-0.048l-0.621-0.473l-0.371-0.163l-0.771-0.13l-0.943,0.117l0.307,0.163l0.149,0.065l0.73,0.538l0.482,0.146l1.109,0.601l0.832,0.291l0.921,0.161l0.634,0.242l0.405,0.453l-0.002,0.405l-0.276,0.291l-0.684,0.195l0.086,0.113l0.208,0.531l0.771,0.943l0.093,0.494l0.155,0.207l0.438,0.174l1.203,0.078l0.872,0.125l0.499,0.619l0.401,0.095l1.26,0.077l0.575,0.126l0.364,0.079l0.402-0.128l0.785-0.097l0.243-0.302l-0.001-0.318l-0.387-0.397l-0.471-0.079l-0.455,0.096l-0.447-0.031l-0.589-0.206l-0.952-0.795l0.701-0.674l0.484-0.001l1.116,0.479l1.441,0.333l2.09,0.427l0.952,0.078l0.834-0.146l0.723,0.174l0.261-0.224l0.05-0.415l-0.214-0.239l-0.858-0.656l-0.348-0.628l0.285-0.323l0.19-0.049l1.432-0.423l1.495-0.359l0.599-0.244l1.133-0.717l0.172-0.049l0.462,0.064l1.829,0.29l1.41,0.533l0.341-0.001l0.052-0.065l0.154-0.503l0.581-0.767l-0.048-0.653l-0.317-0.408l-0.847-0.163l-0.3-0.229l1.139-1.005l0.101-0.247l-0.205-0.594l-0.771-0.512l0.069-0.315l0.353-0.051l1.458,0.23l2.025-0.12l0.631,0.132l0.664,0.611l0.616,0.445l0.433,0.461l-1.045,0.051l-1.559,0.085l-0.822,0.215l-0.492,0.51l0.191,0.18l0.952,0.293l0.732,0.555l0.804,0.194l0.723,0.097l1.268-0.133l1.33-0.084l0.301-0.164l0.257-0.491l0.291-0.591l0.284-0.412l1.232-0.2l1.223-0.414l0.988-0.216l1.924-0.483l1.429-0.251l1.537-0.318l0.921-0.3l0.205,0.464l0.278,0.083l0.571-0.117l0.487-0.266l0.148-0.465l0.386-0.167l0.718-0.135l0.859,0.065l-0.18,0.399l-0.058,0.597l-0.858,0.084l-0.178,0.149l0.002,0.215l0.687,0.197l0.507-0.083l1.169-0.167l0.436-0.001l0.161,0.198l0.23,0.049l0.278-0.133l0.264-0.216l0.29-0.431l0.464-0.183l0.861-0.118l1.049-0.068l0.768,0.032l1.075,0.23l0.755-0.018l0.36-0.083l0.963-0.467l1-0.285l0.803-0.052l0.952,0.182l0.326,0.166l-0.631,0.45l0.129,0.232l0.217,0.099l0.632,0.131l0.579-0.018l0.288-0.232l0.074-0.398l0.342-0.084l0.962,0.065l0.543-0.184l0.395-0.316l0.115-0.417l-1.37-1.033l0.405-0.168l0.66-0.37l0.403-0.068l0.609,0.016l2.171,0.063l1.272,0.199l1.241,0.149l1.135,0.199l2.111,0.515l1.071,0.098l1.712,0.414l1.02,0.248l1.305,0.53l1.455,0.611l0.864,0.379l0.376,0.049l0.229-0.1l1.145-1.047l0.236-0.3l-0.927,0.035l-0.4-0.049l-0.564-0.232l-0.365-0.433l0.027-0.652l-0.727-0.283l-1.987-0.147l-0.19-0.268l0.064-0.168l0.305-0.303l0.693-0.255l0.236-0.153l0.085-0.187l-0.052-0.833l-0.251-0.238l-1.135-0.066l-0.232-0.29l0.328-0.532l0.359-0.241l0.391-0.035l1.482-0.416l1.098-0.485l0.521-0.416l0.581-0.608l0.544-1.22l0.637-0.421l0.374,0.069l1.562,0.155l1.613-0.125l1.605-0.091l0.695,0.069l1.066-0.055l0.574,0.122l0.309,0.279l-0.018,0.332l-0.423,0.836l-0.348,0.348l-1.334,0.833l-0.223,0.345l0.752,0.342l0.931,0.667l0.277,0.342l0.21,0.818l-0.174,0.222l-0.575,0.375l0.254,1.179l-0.058,1.305l0.263,0.583l0.45,0.381l1.027,0.264l0.19,0.166l-0.001,0.133l-0.485,0.481l-0.417,0.826l-0.333,0.33l-0.784,0.462l-1.232,0.625l-0.63,0.198l-0.55,0.263l0.321,0.522l-0.433,0.115L558,52.195l-1.599-0.372l-0.731-0.08l-0.97,0.034l-0.601,0.115l0.195,0.31l0.583,0.276l0.738,0.21l1.569,0.208l1.133,0.079l0.613-0.05l1.188,0.144l0.922-0.034l0.472-0.358l0.303-0.358l1.352-0.328l1.166-0.492l0.268-0.278l0.386-0.606l0.818-0.313l0.864-0.626l0.064-0.362l-0.225-0.561l-0.609-0.545l0.244-0.548l0.237-0.1l0.677-0.151l1.38-0.152l1.757-0.003l0.74,0.231l0.842,0.463l0.151,0.778l-0.34,1.023l0.302,0.279l0.92,0.212l1.298,0.047l0.864-0.149l0.129-0.296l-0.514-0.18l-0.797-0.18l-0.571,0.034l-0.457-0.098l0.068-0.379l1.03-0.382l0.065-0.249l-0.218-0.148l-0.166-0.331l-0.441-0.763l-0.511-0.266l-0.836-0.098l-1.093-0.231l-0.801-0.116l-1.288-0.165l-0.91,0.186l-0.638,0.101l-1.297-0.181l-0.896,0.019l-0.015-0.267l-0.564-1.071l0.305-0.657l0.736-0.697l0.282-0.46l-0.134-0.221l-1.092-1.042l-0.949-0.514l-0.12-0.189l0.833-0.554l1.213-0.106l0.998-0.262l0.744-0.348l0.172-0.226l0.169-0.644l-0.13-0.663l0.23,0.069l0.64,0.051l0.466,0.086l0.108,0.471l-0.186,0.54l-0.636,0.608l-0.167,0.554l0.14,0.448l0.373,0.274l0.485,0.274l1.384,0.134l1.574,0.169l1.632,0.083l0.819,0.409l0.321,0.017l0.799-0.036l-0.527-0.89l-0.521-0.274l-1.893-0.1l-0.931-0.067l-0.576-0.154l-0.609-0.448l0.275-0.329l1.374-0.054l0.444,0.172l1.145,0.084l0.747-0.157l-0.09-0.728l0.408-0.088l0.84-0.105l1.278-0.02l1.067,0.207l1.413,0.379l1.088,0.535l1.326,0.343l0.547,0.085l1.822,0.014l0.727-0.174l0.138,0.345l-0.781,0.38l-0.696,0.259l-0.248,0.771l-0.129,0.972l0.333,0.136l0.68-0.785l0.387-0.292l0.285,0.051l0.604,0.528l-0.088,0.749l0.743-0.205l0.681-0.273l-0.044-0.306l-0.191-0.119l-0.147-0.358l-0.748-0.821l0.188-0.223l0.686-0.759l-0.797-0.448l-0.772-0.258l-0.93-0.241l-0.257-0.382l-0.655-0.051l-0.979-0.242l-1.34-0.207l-0.307-0.296l0.062-0.577l-0.096-0.386l-0.811-0.667l0.081-0.247l0.266-0.16l0.484-0.125l2.31-0.11l2.54-0.022l2.125-0.128l1.421-0.162l0.475,0.317l0.382,0.052l0.844-0.267l1.056-0.286l1.413-0.109l0.589,0.194l-0.957,0.338l-0.451,0.407l1.737-0.233l0.521-0.107l0.955-0.374l0.27-0.284l-0.334-0.444l-0.326-0.177l-0.925-0.266l-0.365-0.303l-0.002-0.232l0.324-0.539l1.176-0.397l0.966-0.22l3.028-0.903l0.889-0.094l0.248-0.036l0.522-0.076l1.899-0.096l1.663-0.114l2.302-0.244l2.048-0.263l1.595-0.43l0.855-0.243l1.763,0.034l1.065-0.002l0.383,0.185l-0.351,0.409l1.504,0.108l1.018-0.039l1.261-0.188l1.345-0.225l0.95-0.039l0.982,0.166l0.687,0.073l0.693-0.206l0.12-0.335l-0.133-0.167l0.466-0.337l0.942-0.077l0.939,0.036l1.243-0.377l-0.618-0.506l0.122-0.34l1.165-0.438l1.554-0.383l2.23-0.406l1.229-0.077l0.993,0.056l1.486-0.003l0.86,0.265l0.045,0.266l-1.528,0.401l-0.66,0.342l0.488,0.15l1.83-0.117l1.588,0.148l2.039-0.079l0.177,0.113l-0.375,0.283l-1.187,0.453l-0.296,0.3l1.971-0.004l0.833-0.02l0.234,0.093l1.052-0.545l1.366-0.002l1.771-0.097l0.631,0.13l1.35-0.021l1.954,0.165l1.4,0.259l1.181,0.427l0.52,0.445l0.726-0.001l0.854-0.076l0.422,0.5l-1.354,0.832l0.241,0.128l0.896,0.365l-2.329,0.859l-1.035,0.235l-1.166,0.11l-3.404,1.061l-3.018,0.965l-0.793,0.285l-2.388,0.375l-2.35,0.586l-2.065,1.126l0.715,0.017l1.081-0.247l0.922-0.458l1.663-0.161l1.231-0.02l2.101-0.268l1.879-0.286l0.879-0.107l1.004-0.284l-0.094-0.389l-0.492-0.123l-0.034-0.071l0.281-0.249l0.581-0.214l0.873,0.211l0.603,0.389l0.621,0.052l0.593,0.193l0.737,0.052l0.853-0.055l1.155-0.268l0.499,0.07l0.192,0.3l0.009,0.512l0.522,0.404l1.422-0.778l1.66-0.021l1.506-0.145l2.354,0.014l1.919,0.155l0.854,0.034l1.204,0.033l-0.271,0.74l0.354,0.333l2.043,0.154l0.848,0.121l0.698,0.069l1.035,0.103l2.49-0.145l1.209-0.02l1.42,0.348l1.405-0.932l-0.161-0.352l-0.038-0.229l-0.034-0.105l1.806-0.48l0.521-0.019l0.802,0.104l1.148,0.298l0.851,0.281l1.711,0.032l1.354-0.073l1.384,0.033l1.323,0.431l0.409,0.181l0.058,0.386l-0.52,0.088l-0.268,0.036l-1.905,0.406l-2.438,0.737l-0.233,0.227l0.253,0.069l1.033,0.067l0.957,0.016l0.659,0.155l0.659,0.293l1.014,0.396l0.583,0.172l0.78,0.481l1.27,0.805l1.814,0.801l1.351,0.305l0.612-0.018l0.795-0.394l0.843-0.72l1.093-1.051l0.601-0.329l0.29,0.017l0.236,0.465l0.772,0.308l1.346,0.29l1.105,0.135l0.848-0.087l1.973-0.468l0.778-0.07l0.813,0.067l1.196,0.239l1.921,0.734l0.315-0.052l0.186-0.069l0.491-0.258l0.221-0.258l-0.137-0.051l0.013-0.189l0.726-0.312l0.509-0.018l0.5,0.257l0.575,0.188l1.302,0.032l0.181-0.5l-0.194-0.466l0.15-0.363l0.093-0.521l-1.131,0.159l-0.643,0.001l-0.179-0.104l0.442-0.296l0.318-0.087l0.986-0.089l1.021-0.02l0.832-0.141l1.566-0.648l0.254,0l1.76,0.241l1.561,0.137l2.036,0.188l0.997,0.068l0.654,0.103l2.307,0.065l-1.732,0.628l0.865,0.051l1.011-0.089l0.335,0.138l-0.305,0.381l-0.926,0.192l-0.846,0.261l-0.177,0.293l0.664,0.033l0.52-0.122l0.916-0.14l0.978-0.33l1.62-0.799l2.766,0.012l1.196,0.067l0.903,0.172l0.946,0.137l0.205,0.19l0.221,0.104l-2.247,0.59l0.559,0.137l1.674,0.289l2.174,0.202l0.946,0.204l0.801,0.375l0.367,0.427l0.564,0.357l0.522,0.152l1.459-0.037l1.364-0.105l1.138-0.139l2.518-0.329l2.208-0.107l3.008,0.131l1.515,0.134l0.734,0.118l1.168,0.424l0.655,0.169l0.525,0.338l0.361,0.39l-0.123,0.491l-0.286,0.521l0.509,0.25l0.764,0.065l0.835,0.015l0.643,0.083l-0.017,0.685l0.419,0.416l0.686-0.168l0.545-0.435l1.211-0.387l0.348-0.067l0.35,0.049l1.696-0.02l1.521-0.288l0.736,0.032l0.588,0.434l0.707,0.116l1.541,0.014l2.176,0.062l0.869-0.118l1.378-0.504l0.406,0.2l0.93,0.533l0.396,0.216l1.095,0.265l0.875,0.332l0.282,0.398l0.612,0.148l1.556-0.136l1.653-0.319l0.16-0.25l-0.248-0.333l-0.805-0.833l-0.833-0.115l0.4-0.336l0.479-0.571l1.89,0.098l1.214,0.082l1.135,0.065l1.221,0.166l0.222,0.318l1.396-0.153l2.084-0.054l2.304,0.013l1.292,0.148l0.786,0.199l1.185,0.199l1.391,0.098l0.751,0.182l1.302,0.332l0.747,0.065l0.703,0.182l1.145,0.505v2.126v2.222v2.222v1.292v0.157v0.576v0.219l-1.083,0.371l-0.651,0.03l-0.645,0.37l-0.56,0.065l-1.044,0.065l-0.355-0.079l-0.928-0.052l-0.118-0.343l-0.271-0.211l-0.501,0.027l0.241-0.185l-0.938,0.324l-0.846,0.02l-0.337-0.211l-0.478-0.079l0.424,0.501l-0.569,0.29l0.32,0.103l0.942,0.205l0.634-0.36l0.395,0.041l0.335,0.079v0.477l0.248,0.206l0.76,0.269l1.059-0.228l-0.439,0.322l0.741-0.243l0.065,0.336l0.247,0.206l0.187,0.363l0.068,0.189l-0.722,0.522l0.593-0.064l0.349,0.172l0.473,0.503l0.501,0.157l0.145,0.251l-0.162,0.456l0.792-0.111l-0.125,0.393l0.023,0.25l-0.43,0.299l-0.691,0.205l-0.635-0.046l-0.448-0.14l-1.243-0.154l-0.889-0.077l-0.347-0.14l0.123-0.267l-0.493-0.046l-0.304,0.032l-0.559,0.55l-0.069,0.11l-3.06,0.913l-1.155,0.174l-0.245,0l-0.43,0.203l-0.219,0.188l-0.719,0.22l-0.991,0.033l-0.308,0.11l-0.48,0.405l-0.462,0.203l-0.946,0.033l-0.854,0.622l-0.24,0.279l-1.67,0.452l-0.392,0.449l-1.229,0.25l-0.406,0.14l-0.151,0.293l0.01,0.292l-0.473,0.292l-0.406,0.016l-0.586-0.306l-0.183-0.262l-0.169-0.37l-0.67-0.308l-1.074-0.044l-1.021,0.048l-1.159,0.172l-1.301,0.188l-0.523,0.217l-1.333,0.756l-0.536,0.277l-0.184-0.138l0.575-1.293l-0.55,0.094l-0.392-0.097l-0.811,0.531l-0.67,0.186l-0.401,0.155l-0.114,0.506l-0.66,0.154l-0.317-0.168l-0.253-0.49l-0.483-0.261l-1.024,0.636l0.261-0.204l-0.557,0.062l-0.283,0.092l-0.628,0.522l-0.141,0.261l0.126,0.229l0.344,0.152l-0.932,0.521l-0.182,0.199l0.342,0.167l-0.647,0.352l-0.88,0.55l-0.626,0.503l-0.298,0.35l-0.01,0.531l0.421,0.317l0.477,0.09l1.382-0.048l0.562,0.166l0.11,0.167l-0.436,0.394l-0.752,0.455l-0.181,0.302l0.224,0.512l0.292,0.452l0.786,0.089l0.165,0.391l-0.014,0.616l-0.349,0.361l-0.528,0.061l-0.481-0.209l-0.017-0.21l0.388-0.527l-0.444-0.014l-0.454,0.242l-1.014,0.843l-0.56,0.675l-0.237,0.599l0.321,0.672l0.647,0.311l0.154,0.237l-0.294,0.387l-0.688,0.313l-0.956,0.031l-0.664-0.088l-0.344,0.001l-0.619,0.179l-0.837,0.476l-0.214,0.149l-0.525,0.504l-0.137,0.341l0.111,0.281l0.492,0.398l0.038,0.221l-0.056,0.133l-0.679,0.238l-0.604,0.016L753.44,82.4l-0.727,0.296l-0.065,0.251l0.067,0.28l-0.161,0.854l-0.293,0.412l-0.8,0.78l-1.53,0.971l-0.854,0.5l-0.285,0.103l-0.295-0.614l-0.198-0.821l-0.25-0.69l-0.064-0.794l-0.351-0.75l-0.305-0.383l-0.214-0.915l-0.514-1.36l-0.008-0.578l-0.154-0.563l-0.017-0.327l-0.105-0.193l-0.262-0.817l-0.026-0.792l0.116-0.808l0.271-1.396l0.167-0.226l1.185-0.86l0.716-0.424l0.57-0.695l0.14-0.227l-0.085-0.318l-0.139-0.166l1.632-0.367l1.001-0.305l0.811-0.32l1.729-0.884l0.641-0.412l0.431-0.428l0.14-0.335l1.784-0.889l0.872-0.445l1.535-0.861l0.368-0.293l0.26-0.433l1.252-0.435l2.106-0.514l0.257-0.434l0.773-0.528l0.086-0.233l-0.568-0.216l0.814-0.904l-0.036-0.483l0.183-0.391l0.598-0.204l1.729-0.082l0.513-0.063l-0.485-0.328l-2.065-0.215l-0.71,0.095l-1.062,0.174l-0.777,0.189l0.042,0.328l-0.664,0.923l0.125,0.202l-0.04,0.14l-0.662,0.11l-0.479,0.11l-1.555,0.718l-1.979,1.042l-1.169,0.342l-0.249-0.062l0.156-0.325l0.352-0.465l-0.933-0.076l-0.16-0.263l0.252-0.451l0.442-0.467l0.207-0.328l-0.069-0.202l-0.339-0.031l-1.136,0.454l-0.496,0.032l-0.277-0.358l-0.589-0.17l-1.606,0.144l-1.312,0.111l-0.956,0.08l-0.606,0.157l-0.894,0.359l-0.093,0.436l0.082,0.186l-1.262,0.53l-0.408,0.233l0.149,0.495l-1.294,0.357l-1.019,0.434l-0.84,0.479l-0.496,0.461l-0.332,0.46l0.004,0.383l0.527,0.213l1.269,0.043l0.278,0.275l0.062,0.122l-1.152,0.139l-1.028,0.262l-1.045-0.059l-0.698-0.136l-0.382,0.031l-0.311,0.107l-0.721,0.398l-0.695-0.35l-1.112,0.383l-0.747,0.139l-0.487-0.09l-0.284-0.137l0.108-0.29l0.748-0.124l0.868-0.124l0.164-0.046l-0.741-0.64L736.444,68l-1.06,0.017l-0.854,0.155l-0.353-0.061l-0.868-0.458l-0.775-0.029l-0.745,0.047l-0.704,0.246l0.042,0.398l-0.26,0.229l-0.477,0.215l-0.695-0.243l-0.408-0.122l-1.26,0.063l-0.784,0.093l-0.651-0.075l-0.887-0.136l-0.563,0.078l-0.067,0.122l-0.147,0.474l-0.677,0.017l-0.311-0.137l-0.038-0.382l-0.203-0.259l-1.241,0.094l-1.014-0.059l-1.257,0.033l-1.158,0.063l-0.836-0.029l-0.18,0.016l-1.085,0.292l-0.964,0.444l-0.74,0.474l-0.536,0.504l-0.789,0.245l-0.904,0.336l-0.194,0.152l-1.047,1.17l-1.634,0.684l-0.949,0.471l-1.157,0.711l-1.653,1.253l-0.828,0.572l-1.573,0.873l-0.893,0.376l-1.889,0.871l-0.632,0.388l-0.203,0.298l0.018,0.357l0.428,0.281l0.485,0.043l0.918,0.013l1.046-0.15l0.656,0.043l-0.329,1.261l0.016,0.415l0.303,0.103l0.63-0.09l0.601-0.371l0.761,0.117l-0.127,0.148L705.293,81l-0.112,0.222l0.373,0.073l1.645-0.018l0.566-0.238l0.39-0.519l0.017-0.638l0.763,0.014l0.647-0.001l0.726,0.014l0.951,0.265l0.658,0.354l0.486,0.591l0.847,0.575l0.426,0.176l0.506,0.324l-0.07,0.148l-0.581,0.355l0.453,0.221l0.13,0.309l-0.336,0.723l0.491,0.117l0.215,0.235l-0.291,0.515l-0.348,0.397l-0.532,0.559l-0.724,1.364l-0.181,0.688l0.057,0.219l0.24,0.701l-0.188,0.917l-0.098,0.741l-0.403,1.408l-0.146,0.493l-1.928,1.538l-0.371,0.435l-0.217,0.65l-0.587,0.42l-0.741,0.579l-0.241,0.361l-0.574,0.981l-0.587,0.606l-0.941,0.778l-1.784,1.512l-0.464,0.474l-0.235,0.458l-0.323,0.33l-0.758,0.388l-0.618,0.416l-0.574,0.702l-0.431,0.458l-0.875,0.673l-0.955,0.487l-1.838,0.475l-0.798,0.244l-0.278-0.427l-0.519-0.085l-0.243,0.043l-0.337-0.185l-0.337-0.513l-0.663,0.272l-0.464,0.101l0.424-0.586l-0.624,0.173l-0.506,0.486l-0.649,0.543l-1.326,1.001l-0.072,0.049l-0.167-0.393l-0.298-0.439l0.111-0.058l1.252-0.462l0.511-0.43l0.156-0.329l-0.112-0.299l0.097-0.128l0.025-0.385l0.006-0.613l-0.062-0.656l-0.332-0.897l0.048-0.557l1.664-0.982l0.396,0.041l0.685,0.24l0.679,0.225l0.547,0.098l0.47-0.347l0.551-0.69l0.329-0.432l0.627-1.08l0.538-1.066l0.278-0.893l0.291-0.707l0.66-0.393l0.566-0.407l-0.017-0.504l-0.116-0.389l-0.064-0.259l-0.246-0.114l-0.902,0.034l-1.181,0.208l-1.357,0.31l-0.953,0.308l-0.604,0.22l-1.657,0.052l-0.649,0.018l-0.68,0.033l-0.261-0.446l-0.44-1.283l-0.297-0.866l-0.205-0.144l-2.659-0.839l-1.523-0.253l-1.247-0.341l-0.507-0.2l-0.436-0.389l-0.927-1.903l-0.94-1.588l-1.087-2.384l-0.742-0.952l-0.763-0.467l-0.539-0.026l-1.386,0.125l-0.683-0.188l-1.037-0.481l-1.148-0.215l-0.917,0.049l-1.203,0.109l-0.836,0.123l-1.854,0.143l-0.602,0.136l-0.478,0.165l-1.193,0.787l-0.375,0.282l-0.119,0.25l0.822-0.078l0.558,0.026l0.465,0.306l0.107,0.249l-0.167,0.794l-1.371,0.608l-0.599,0.545l-0.667,0.779l-0.416,0.543l-0.422,0.426l-0.103,0.249l0.062,0.146l0.35,0.348l0.056,0.306l-0.123,0.233l-0.779,0.339l-2.44,0.752l-0.438,0.089l-0.343,0.016l-1.126-0.574l-0.452-0.172l-0.046-0.018l-0.431-0.168l-0.622,0.018l-1.228,0.297l-0.86-0.169l-0.34-0.129l-0.751-0.506l-0.74-0.156l-0.609,0.047l-0.333,0.002l-1.165,0.487l-0.755,0.498l-0.447,0.394l-0.604,0.264l-0.526,0.163l-1.147,0.136l-0.867,0.106l-0.532,0.075l-1.018,0.063l-1.602,0.11l-0.739-0.039l-0.984-0.082l-0.905-0.241l-1.318-0.254l-0.812-0.373l-1.132-0.313l-0.623-0.331l-1.333-0.75l-0.769-0.229l-1.423-0.022l-1.172-0.037l-0.796,0.077l-2.48,0.538l-0.673-0.113l-1.643-0.531l-0.421-0.333l-0.408-0.451l-0.182-0.481l-0.004-0.541l-0.145-0.204l-0.767-0.143l-0.989-0.317l-0.702-0.231l-1.748-0.328l-1.036-0.185l-1.028-0.098l-0.84-0.201l-1.269,0.96l-0.905,0.839l-0.098,0.293l0.409,0.86l0.396,0.304l0.116,0.204l-0.163,0.526l-0.744,0.572l-0.31,0.162l-0.755,0.28l-0.562,0.018l-0.576-0.186l-0.312-0.114l-0.875-0.068l-0.85,0.004l-0.719-0.083l-1.458,0.008l-0.699-0.113l-0.393-0.406l-0.694-0.755l-0.831-0.083l-1.842-0.122l-0.932-0.156l-0.953-0.097l-0.84,0.18l-1.512,0.476l-1.143,0.341l-0.787,0.398l-0.971,0.692l-0.017,0.012l-0.727,0.381l-0.603,0.148l-1.387,0.08l-0.599,0.207l-0.799,0.425l-0.154,0.044l-0.244,0.074l-0.569,0.003l-0.228,0.014l-0.064-0.145h-0.589l-0.294-0.478l-0.441-0.331l0.073-0.331l-0.625,0.184l-0.478,0.368l-0.993-0.074l-0.882-0.073l-0.662-0.699l-0.588-0.552l-0.956-0.147l-0.331-0.625l-0.772-0.588l-0.698-0.441l-0.993,0.037l-0.771,0.221l-0.993,0.221h-0.992h-0.589l-0.184-0.184l-0.258-0.257h-0.478v-0.368l-0.367-0.331h-0.92l-0.367,0.515l-0.331,0.257l-0.515,0.257l-1.104-1.434l-0.846-0.882l-1.69-2.133l-1.066-1.029l-1.287-0.772l-0.809-0.294l-1.104-0.588l0.11-0.368l0.515-0.11v-0.441l-0.809,0.074l-0.515,0.22l-0.772,0.221l-0.956,0.515l-1.103,0.257l-0.772,0.441l-0.294,0.294l-0.552-0.184l-0.441-0.037l-0.771,0.073l-0.441,0.11l-0.331-0.184l0.331-0.441l0.441-0.184l0.146-0.294h-0.367l-0.441,0.221l-0.478-0.11l-0.405-0.294l-0.478-0.037l-0.184,0.147l-0.147,0.147l-0.367-0.221l-0.295-0.368l-0.294-0.11l-0.331,0.221l-0.367-0.074l-0.368,0.147l-0.44-0.11l-0.295,0.147l-0.478-0.074l-0.184-0.257l0.33-0.037l-0.073-0.331l0.147-0.257l0.11-0.331l-0.515-0.22l-0.147-0.221l0.037-0.331l-0.368-0.404l-0.882,0.037l-0.625,0.11l-0.772-0.257l-0.515-0.11l-0.919-0.147l-0.735,0.037l-0.11,0.221l-0.589,0.184l-0.515,0.037v0.294l-0.367,0.368l-0.625,0.074l-1.876,0.073l-2.021,0.405l-1.177,0.037l-0.625,0.331l-0.221,0.331l-0.331-0.073l-0.588,0.073l-1.545,0.11l-0.735,0.11l-1.029,0.037l-1.396,0.405l-0.368,0.184h-0.772h-0.515L537.304,80l-0.33,0.074l-0.185,0.515l0.074,0.441l0.294,0.221l-0.294,0.074v0.331l1.065,0.11l0.956,0.294l-0.11,0.257l-0.515,0.073l-1.103-0.147l-0.698,0.184l-0.662,0.515l0.146,0.257l0.441,0.478l-0.331,0.294l-0.588,0.147l-0.735,0.368l-0.467,0.067l0.164,0.274h0.239l0.377,0.137l-0.068,0.171l0.377,0.137l0.651,0.069l0.274,0.308l1.165,0.171l0.24,0.24l-0.138,0.686l-0.137,0.309l-1.577,0.411l-0.959-0.034l-0.343-0.343h-0.24l-0.171,0.309l-0.651,0.343l-0.411-0.171l-0.754-0.137l-0.926-0.309l-0.274-0.548l-0.754-0.103l-1.062,0.103l-0.137,0.412l-0.617,0.068l-0.651-0.411l-0.65-0.035l-0.823-0.068l-0.514,0.377l-0.377,0.343l-0.274,0.274l-0.686,0.171l-0.411-0.24l-0.686-0.137l-0.582-0.548l-0.72-0.068l0.034,0.24l0.205,0.48l-0.239,0.274l-0.274-0.137l-0.068-0.583l-0.411-0.274l-0.789-0.343l-0.582-0.206v-0.343l-0.96-0.171l-0.617,0.069l-0.788-0.035l-0.411-0.514l-0.411-0.069l-0.617,0.24l-0.273,0.137l-0.651,0.137l-0.309-0.274h-0.479l-0.651-0.069l-0.515,0.309l-0.548,0.343l-0.788,0.377l-0.549,0.068l-0.514,0.171l-0.309,0.309l-0.172,0.24L509.58,87.5l-0.479,0.206l0.068,0.445l0.171,0.411l-0.068,0.446l-0.411,0.24h-0.651l-0.514-0.411l-0.48-0.548l-0.514-0.24l-0.411,0.069l-0.103,0.308l-0.343,0.549l-0.823,0.137l-0.205,1.303l0.343,0.171l0.239,0.274l-0.239,0.206l-0.446,0.274l-0.65,1.165l1.37,0.343l0.138,0.377l-0.068,0.309l0.514,0.514l0.103-0.343l0.583,0.206l0.343-0.034l0.514,0.034l0.515,0.445l0.479,0.206l0.343,0.514l0.96,1.131l-0.138,0.103l-0.445-0.103l-0.309-0.103l-0.343,0.103l0.068,0.308l0.857,0.377l0.616,0.19l-0.167,0.2l-0.399,0.28l-0.38,0.12h-0.12v0.14v0.22l-0.14,0.08l-0.3-0.2l-0.34,0.2l-0.399,0.26l-0.64,0.12l-0.319,0.08l-0.26-0.08l-0.181-0.08l-0.1,0.04l-0.06,0.16l0.12,0.26l-0.221,0.2l-0.18,0.3l-0.18,0.319l-0.319,0.42l-0.18,0.28l-0.32,0.16l-0.34,0.24l-0.14,0.32l0.08,0.2l0.34,0.2l0.319,0.04l0.18,0.3l0.24,0.04l0.239,0.34l0.28,0.419l-0.06,0.38l-0.101,0.2l0.061,0.16l0.1-0.2l0.1-0.34l0.12-0.22l0.16-0.02l-0.141,0.439l-0.22,0.36l0.061,0.4l0.12,0.1l-0.16,0.2l-0.04,0.4l0.38,0.24l0.119,0.1l0.12,0.52l0.28,0.06l0.359,0.42l0.2,0.28l0.439,0.419l0.18,0.36l0.359,0.06l0.047,0.146l-0.292,0.449l-0.496,0.284l-0.283,0.094l-0.308,0.331l-0.165,0.213l-0.379,0.047l-0.449-0.142l-0.591-0.094v-0.308l-0.283-0.284h-0.118l-0.095-0.118l-0.473-0.284l-0.142-0.189H504.5l-0.213,0.047L504.264,107l-0.229,0.023l-0.126-0.189l-0.236-0.071l-0.236,0.023l-0.284-0.047l-0.26-0.094l-0.284-0.166l-0.354-0.284l0.118-0.307l0.118-0.189l-0.118-0.142l-0.354-0.024h-0.378l-0.213-0.166l-0.189-0.118h-0.212l-0.143-0.094l-0.236-0.118h-0.118l-0.095,0.071l-0.142,0.166l-0.188-0.142l-0.261-0.071h-0.354l-0.213,0.071l-0.094,0.095l-0.166,0.166h-0.283l-0.261,0.118l-0.212-0.071l-0.261-0.118l0.048-0.118l0.142-0.118l-0.308-0.119l-0.236-0.118l-0.354-0.071l-0.52-0.118l-0.284-0.213l-0.095-0.142l-0.354-0.166l-0.283,0.047h-0.189l-0.401-0.166h-0.544l-0.426,0.095h-0.307l-0.355-0.047l-0.307-0.071l-0.261-0.095l-0.212-0.166h-0.213h-0.331l-0.189-0.047l-0.188-0.094l-0.284-0.142l-0.283-0.095l-0.449-0.023l-0.402-0.023l-0.07-0.047l-0.284-0.047l-0.26,0.166l-0.112,0.309l-1.421-1.012l-1.188-0.842l-0.817-0.385l-0.62-0.084l-0.373-0.157l-0.509-0.5l-0.236-0.057l-0.338,0.159l-0.329-0.042l-0.347-0.515l-0.795-0.674l0.595-0.188l0.519-0.001l0.445-0.073l0.1-0.519l0.359-0.476L485,97.85l0.526-0.03l0.516-0.131l-0.432-0.532l-0.654-0.273l-0.474-0.36l0.243-0.116l0.367-0.03l0.82-0.117l0.715-0.348l1.244-0.436l-0.196-0.375l-0.076-0.058l-0.799,0.088l-1.312,0.175l0.012-0.126l0.021-0.112v-0.224l0.09-0.514l0.224-0.089l0.357-0.022l0.38-0.134l0.223-0.179l0.022-0.179h0.269l0.736-0.045l0.805,0.157l0.335-0.134v-0.156l0.156-0.291l0.156-0.491l-0.066-0.067l-0.09-0.201l-0.045-0.179l-0.044-0.134l-0.179-0.067l-0.156-0.067l0.044-0.224l0.045-0.179h0.246h0.312l0.134-0.156l-0.29-0.044l-0.269-0.089l-0.223-0.246l0.312-0.044l0.357-0.201l0.156-0.067l0.201-0.089l0.045-0.224l-0.09-0.179l-0.111-0.089l0.022-0.179l0.089-0.111l-0.156-0.089l-0.201,0.089l-0.134,0.044h-0.269l-0.357-0.156l-0.111-0.224l-0.469-0.022l-0.291-0.089l-0.201-0.179l-0.357,0.067l-0.268-0.112l-0.469-0.112l-0.425-0.067l-0.29-0.268l-0.224,0.067l-0.045,0.157l-0.29,0.134l-0.224-0.112l-0.179-0.179l-0.402-0.044l-0.022-0.134l-0.201-0.179v-0.134l-0.268-0.179l-0.111-0.156l-0.357,0.067l-0.536,0.134h-0.269l-0.312,0.112l-0.425,0.112l-0.179-0.156l-0.179-0.022l-0.201,0.067l-0.469-0.291l-0.268-0.067l-0.47,0.067l-0.268,0.179l-0.291-0.29l-0.179-0.089l-0.089-0.224l0.089-0.179l-0.089-0.246l-0.224-0.268v-0.357h-0.402v-0.312l-0.38-0.022l-0.514,0.067l-0.156-0.112h-0.647l-0.269-0.29l-0.111-0.357l-0.134-0.291l0.312-0.134l0.312,0.022v-0.268l-0.312-0.156l-0.246-0.156l-0.134-0.201l-0.246-0.335l-0.312-0.134l-0.201-0.268l-0.514,0.134l-0.692-0.112l-0.67,0.223l-0.536,0.022l-0.536-0.246l-0.134,0.268l-0.179,0.291l-0.313,0.156l-0.469-0.022l-0.357-0.089z M527.156,37.071l-0.59-0.14l-0.955-0.21l-1.128-0.139l-0.739,0.054l-0.959,0.037l-0.732,0.143l-0.411-0.105l-1.025-0.476l0.737-0.303l1.21-0.429l0.654-0.09l1.549-0.002l0.135-0.357l-0.728-0.338l0.351-0.269l0.419-0.144l0.676-0.02l0.852-0.181l-0.25-0.161l-0.526-0.233l1.539-0.895l0.513-0.129l0.226,0.073l0.892,0.017l0.981-0.535l0.863-0.333l1.02-0.261l0.975-0.15l1.305-0.113l1.274,0.053l0.738-0.15l0.786-0.615l0.273,0.018l0.873-0.132l1.722,0.276l0.471-0.038l1.93-0.321l0.958-0.039l2.184-0.247l1.864-0.116l0.771-0.564l0.376-0.152l2.511-0.137l1.965-0.079l0.471,0.131l0.442,0.225l0.154,0.357l-0.812,0.47l-0.541,0.169l-1.346,0.319l-2.609,0.433l-4.329,0.49l-2.187,0.281l-2.122,0.299l-1.842,0.316l-2.102,0.242l-0.941,0.203l-0.288,0.274l0.644,0.216l-0.422,0.217l-0.943,0.361l-0.527,0.037l-2.047-0.068l-0.432,0.18l-0.119,0.233l0.621,0.249l-0.331,0.233l-1.206,0.448l-0.402-0.142l-0.752-0.087l-0.592,0.304l0.877,0.283l0.052,0.319l-1.094,0.657l-0.822,0.284z M517.491,38.443l1.041-0.37l0.512-0.299l0.428-0.212l1.426-0.021l1.316-0.249l0.987-0.02l1.412-0.091l0.551,0.069l0.988,0.227l-0.063,0.176l-0.463,0.528l-0.302,0.158l-0.697,0.071l-0.443,0.228l-0.233,0.385l0.006,0.818l0.445,1.039l0.957,0.826l0.505,0.308l0.775,0.307l1.162,0.392l-0.028,0.282l-2.62-0.089l-0.844,0.053l-0.917,0.326l-0.596,0.086l-0.676-0.494l-0.382-0.034l-1.091,0.088l-0.673-0.102l-0.031-0.359l1.347-0.362l0.073-0.24l-0.102-0.017l-0.944-0.273l-1.442-0.411l-1.519-0.17l-0.33,0.156l-0.624,0.122l-0.681-0.033l-0.625-0.396l-0.114-0.415l0.229-0.312l0.39-0.209l0.344-0.036l0.318,0.104l0.65,0.016l0.518-0.192l1.121-0.768l0.243-0.35l-0.322,0l-0.981-0.243z M0.125,56.089v-0.562v-0.576v-0.157v-1.292V51.28v-2.222v-2.12l2.917,0.61l1.693,0.598l0.933,0.181l3.819,0.99l1.059,0.395l0.204,0.149l0.074,0.214l0.445,0.429l0.406,0.789l-0.209,0.428l1.034,0.8l0.982,0.26l-0.02-0.18l0.297-0.148l-0.051-0.196l-0.638-0.392l0.016-0.542l0.077-0.296l1.026-0.183l0.984,0.278l0.573,0.098l0.767,0.064l1.003-0.117l0.933,0.13l0.93,0.425l0.694,0.359l1.676,0.684l0.32,0.081l0.584,0.179l0.43,0.211l0.09,0.13l-0.343,0.033l-1.026-0.096l-0.364,0.034l-0.808,0.798l-1.539-0.468l0.138,0.178l0.438,0.227l0.465,0.324l-1.177-0.111l-1.008,0.05l-1.202-0.387l-0.708-0.096l0.135,0.129l0.289,0.259h0.084l0.561,0.259l0.205,0.307l0.131,0.453l-0.056,0.339l-0.814,0.05l-0.805,0.065l-0.189,0.161l0.5,0.865l-0.115,0.272l-1.04-0.078l-0.397,0.081l-1.193-0.174l-0.264-0.352l-1.795-0.51l-0.253,0.273L9.85,55.79l-0.276-0.161l-0.265-0.403l0.174-0.178l-0.321-0.42l-0.87-0.339l-0.565-0.063l-0.762,0.034l-0.858,0.229l-1.343,0.084L3.57,54.443l0.059-0.325l-0.155-0.325l-0.618-0.487L1.958,53.43l-0.45,0.409l-0.655,1.228l-0.166,0.715l-0.562,0.307z"/>
+ <path id="NO" country:name="Norway" d="M449.401,22.792l-1.596-0.014l-2.019-0.016l-1.739,0.063l-0.764,0.061l-1.972-0.316l0.812-0.456l0.826-0.172l0.735-0.453l1.148-0.588l1.354,0.691l0.998,0.105l1.116-0.088l0.9,0.084l0.704,0.341l0.865-0.323l0.53-0.454l0.868-0.306l-0.311,0.823l0.086,0.32l0.851-0.001l0.991-0.495l1.061-0.261l0.803,0.128l0.559,0.472l0.705,0.041l2.007-0.111l1.543,0.189l0.551,0.376l-0.507,0.201l-2.004,0.622l-1.623,0.38l-1.069,0.062l-0.976,0.14l-1.324,0.366l-6.271-0.097l-0.033-0.377l1.492-0.26l0.702-0.677z M430.027,22.752l0.068,0.697l0.252,0.119l1.694,0.155l0.221-0.377l0.13-0.418l0.573-0.141l0.523-0.041l0.949,0.477l1.192,0.771l0.798,0.235l0.568-0.218l-0.222-0.296l-0.46-0.356l-0.327-0.477l-0.04-0.22l0.91-0.407l1.001,0.103l0.485,0.18l1.278,0.018l0.586,0.179l-0.08,0.419l-0.169,0.298l0.104,0.159l0.549,0.118l0.743-0.338l0.44-0.1l0.662,0.396l0.678,0.335l0.785,0.156l0.948,0.117l1.672,0.429l0.498,0.234l-1.305,0.277l-1.981,0.218l-0.696,0.293l-0.731,1.144l-0.885,0.885l-1.243,0.117l-0.766,0.535l-0.455,0.589l-0.029,0.378l-0.786,0.209l-0.556-0.018l-1.593-0.355l-1.883-0.507l-1.365-0.568l0.651-0.364l1.565-0.041l1.788-0.137l0.944-0.386l-0.652-0.249l-1.822,0.139l-1.566,0.118l-1.694,0.042l-0.502-0.519l0.959-0.06l1.371-0.215l2.149-0.314l1.547-0.45l-2.525-0.405l-0.881-0.292l-0.589,0.138l-1.036,0.646l-1.069,0.293l-0.562,0.059l-1.236-0.172l-0.338-0.174l-1.05-0.368l-0.807-0.233l-0.698-0.41l1.698-0.396l-0.817-0.571l-1.359,0.319l-0.467-0.078l-0.924-0.751l0.812-0.36l0.516-0.021l1.075-0.122l1.017,0.038l0.577-0.061l1.188-0.042z M425.42,68.82l-0.148-0.21l-0.629,0.132l-0.134-0.026l-0.249-0.237l-0.239-0.343l0.188-0.158l-0.143-0.291l-0.361,0.185l-0.062,0.29l0.113,0.237l-0.147,0.105l-0.339,0.316l-0.086,0.185l-0.521,0.105l-0.533-0.131l-0.781,0.342l0.057,0.131l-0.502,0.289l-0.498,0.263l-1.658,0.813L418.697,71l-0.274,0.052h-0.271l-2.111,0.209l-0.188-0.236l-0.33-0.131l-0.183,0.209L414.976,71l0.384-0.184l-0.935-0.236l-0.794-0.341l-0.574-0.052l-0.479-0.578l0.292-0.368l-0.126-0.21l0.34,0.026l0.085,0.316l0.284-0.21l0.667,0.263l-0.244-0.197l0.127-0.145l0.5-0.092l-0.479,0.026l-0.245,0.105l-0.263-0.184l-0.111-0.132l0.579-0.276l0.455-0.185l-0.482,0.066l-0.317-0.132l0.441-0.237l0.083-0.237l-0.661,0.475l-0.036-0.264l-0.265-0.171l0.005,0.211l0.076,0.171l-0.419,0.158h-0.41l0.014-0.277l-0.15,0.264l-0.235-0.079l-0.2-0.448l0.658-0.449l0.08,0.436l0.068-0.317l0.438,0.158l0.211-0.092l-0.166-0.106l0.674-0.079l0.479-0.251l-0.611,0.159h-0.48l-0.335-0.159l0.196-0.132l0.387-0.146l0.196-0.471l-0.821-0.014l-0.546,0.094l-0.406-0.309l0.368-0.14l0.643-0.404l-0.212-0.186l-0.445,0.063l-0.399-0.062l-0.211-0.217l0.284-0.482l0.619-0.265l-0.595-0.248l-0.225-0.374l0.272-0.188l-0.089-0.687l0.106-0.094l0.594-0.063l0.392-0.045l0.455,0.044l0.082-0.11l-0.255-0.134l-0.425-0.118l-0.228-0.17l0.098-0.188l0.211-0.125l0.575-0.064l0.511-0.346l0.567,0.109l0.498-0.111l0.179-0.55l0.835,0.093l0.668,0.125l0.571-0.252l-0.989-0.234l-0.266-0.314l0.236-0.143l1.151,0.014l0.851-0.08l0.538,0.219l0.06-0.473l0.477-0.27l0.297-0.333l0.78-0.175l0.438,0.189l0.138,0.079l0.5-0.476l0.869-0.413l0.084-0.429l0.437-0.398l1.497-0.735l0.335-0.192l0.235-0.048l0.481,0.175l0.335-0.001l0.319-0.224l-0.225-0.223l0.141-0.128l0.488-0.224l0.457-0.305l0.481-0.483l0.245,0.064l0.676-0.017l-0.067-0.612l-0.471-0.112l0.434-0.405l0.511-0.648l0.841,0.063l0.047-0.341l0.096-0.228l0.954-0.116l-0.396-0.357l-0.327-0.097l-0.193-0.146l0.164-0.245l0.313-0.246l0.464,0.048l0.888-0.067l-0.543-0.522l0.249-0.082l0.435-0.034l0.707-0.263l0.592-0.067l0.308-0.208l-0.358-0.064l-0.105-0.187l0.289-0.1l0.616-0.33l0.557,0.032l0.351,0.098l0.434-0.264l0.369-0.031l0.035-0.176l-0.421-0.321l0.627-0.232l0.146-0.275l0.336,0.01l0.359,0.297l0.397,0.082l0.526-0.381l-0.281-0.656l0.438,0.065l0.698-0.058l0.207-0.174l-0.604-0.315l0.411-0.224l0.816-0.251l0.093-0.257l0.261-0.194l0.73-0.135l0.074,0.067l0.274-0.051l0.102-0.067l0.492-0.67l0.521,0.25l0.96-0.153l0.411,0.133l0.265,0.1l0.646,0.065l0.536-0.419l0.747-0.84l0.286-0.085l0.16,0.168l-0.178,0.286l-0.182,0.587l0.791-0.454l0.403-0.572l0.819-0.085l0.688-0.439l0.437,0.117l0.665,0.353l0.567-0.643l0.318-0.272l0.976,0.1l1.019,0.506l0.197-0.152l0.479-0.595l0.709-0.444l0.283-0.052l0.562,0.067l0.338-0.308l0.469-0.291l0.619-0.189l1.2-0.173l0.984,0.015l-1.337,0.755l-0.24,0.273l-0.107,0.646l0.42,0.084l0.691-0.579l1.53-0.941l0.764-0.275l0.028,0.257l-0.004,0.905l0.704-0.172l0.438-0.239l0.855-0.874l0.959-0.104l0.586-0.001l0.216,0.154l-0.383,0.257l-0.335,0.257l0.074,0.239l-0.319,0.41l0.921,0.118l0.221-0.443l0.902-0.651l0.421,0.017l1.682,0.561l0.667,0.135l0.935,0.015l0.649,0.237l0.1,0.272l-1.216,0.393l-1.148,0.036l-2.233-0.047l0.193,0.084l0.585,0.304l1.058,0.284l0.383,0.302l0.728-0.052l0.679-0.102l0.831,0.032l0.708,0.25l-0.404,0.288l-0.514,0.204l-0.824,0.021l-0.77,0.121l-1.023,0.49l-1.013,0.672l-0.689,0.303l-0.001-0.2l0.096-0.367l0.874-0.923l-0.044-0.268l-0.88-0.348l-0.672-0.114l-1.125-0.431l-0.556,0.003l-0.555,0.07l-2.004,0.095l-0.865,0.374l-0.567,0.422l-0.26,0.437l-0.079,0.501l-0.188,0.5l-1.25,0.472l-0.582,0.368l-0.31-0.148l-1.288-0.492l-1.657,0.225l-1.411-0.042l-0.536-0.13l-0.861-0.595l-0.994-0.612l-0.486-0.082l-0.355,0.103l-1.012,0.656l-0.114-0.063l-0.41-0.031l-0.865,0.038l-0.281,1.066l-0.164,0.449l-0.271,0.25l-0.323-0.015l-0.67-0.129l-0.972-0.144l-1.731-0.389l-0.168,0.183l-0.021,0.663l-0.083,0.199l-0.318,0.299l-0.695,0.004l-0.871-0.095l-0.279-0.015l-0.465,0.167l-1.484,1.176l0.05,0.213l0.171,0.507l-0.188,0.345l-0.615,0.346l-1.325,0.919l-0.687,0.442l-0.981,0.021l-0.121,0.244l-0.06,0.971l-0.32,0.598l-0.383,0.469l-0.574,0.499l-0.495,0.545l0.339,0.125l0.381,0.269l0.252,0.587l-0.17,0.176l-0.44,0.177l-0.733,0.036l-0.932-0.027l-0.618,0.114l-0.613,0.257l-0.617,0.479l-0.389,0.492l-0.077,0.664l-0.349,1.093l0.65,0.729l-0.335,1.171l0.582,0.39l0.715,0.186l0.297,0.243l-0.432,0.67l-0.941,0.16l0.571,0.735l0.26,0.427l-0.249,0.346l-0.029,0.532l-0.769,0.384l-0.414,0.013l-0.117,0.423l-0.506,0.224l0.22,0.831l-0.324,0.737l-0.41,0.013l-0.15-0.342l-0.293-0.132z"/>
+ <path id="FI" country:name="Finland" d="M464.349,47.431l-0.024,0.283l-0.258,0.465l0.116,0.529l0.563,0.212l0.872,0.194l0.964,0.506l0.543,0.392l-0.421,0.364l-1.303,0.777l-0.328,0.296l1.402,1.394l0.772,1.195l-0.196,0.356l-0.44,0.535l-0.187,0.403l-0.029,0.37l0.37,0.509l1.286,1.395l0.151,0.253l-0.057,0.254l-0.542,0.415l-0.327,0.191l0.439,0.33l1.357,0.499l0.703,0.265l0.436,0.392l0.161,0.346l-0.105,0.409l-0.43,0.536l-0.591,0.536l-1.385,0.758l-1.983,1.195l-1.946,1.145l-0.174,0.285l-0.935,0.206l-1.195,0.188l-0.149,0.181l-0.506-0.217l-0.518,0.146l-0.052,0.134l-0.688-0.07l-0.193-0.108l0.057-0.387l-0.241,0.527l-0.268,0.14l-0.633,0.047l-0.328,0.03l-0.1,0.267l-0.589-0.326l-0.29,0.275l-0.676,0.064l-0.34,0.178l-0.052-0.127l-0.504,0.108l-0.504,0.108l-0.211,0.266l-0.311-0.152l-0.672,0.126l-0.04-0.114l-0.658,0.215l-0.547,0.013l-0.482,0.025l-0.487-0.253l-0.223-0.274l0.273-0.34l-0.846,0.017l-0.517,0.177l0.065-0.382l-0.446,0.076l-0.644-0.271l-0.409-0.061l-0.415-0.231l-0.26-0.403l-0.036-0.714l0.158-0.374l0.05-0.436l0.09-0.234l-0.347-0.483l-0.431-0.375l0.3-0.658l-0.02-0.392l-0.305-0.204l-0.37-0.093l0.062-0.299l0.295-0.331l0.637-0.285l0.144-0.189l-0.113-0.331l0.382-0.143l0.633,0.125l0.274,0.063l0.483-0.222l0.303-0.427l0.104-0.459l0.207-0.27l0.301,0.316l0.27,0l1.678-1.114l1.142-0.654l0.835-0.576l1.026-0.401l0.874,0.03l0.06-0.304l-0.13-0.144l-0.357-0.16l0.119-0.371l0.146-0.387l-0.329-0.274l-1.139-0.095l-0.836-0.451l-0.594-0.024l-0.113-0.234l-0.327-0.307l-0.208-0.535l0.5-0.8l-0.028-0.392l-0.405-0.685l-0.507-0.637l0.004-0.526l0.062-0.413l-0.77-0.558l-0.508-0.229l-1.583-0.207l-1.085-0.292l-1.286-0.658l-0.616-0.463l-0.146-0.033l1.012-0.656l0.355-0.103l0.486,0.082l0.994,0.612l0.861,0.595l0.536,0.13l1.411,0.042l1.657-0.225l1.288,0.492l0.31,0.148l0.582-0.368l1.25-0.472l0.188-0.5l0.079-0.501l0.26-0.437l0.567-0.422l0.865-0.374l2.004-0.095l0.555-0.07l0.556-0.003l1.125,0.431l0.672,0.114l0.88,0.348l0.044,0.268l-0.874,0.923l-0.096,0.367l0.001,0.2z"/>
+ <path id="SE" country:name="Sweden" d="M453.795,53.873l-0.23-0.004l-0.975,0.164l-0.447,0.098l-0.902-0.387l-0.339-0.178l-0.347,0.114l-0.641,0.374l-0.542,0.599l-0.309,0.146l-0.658,0.018l-0.545,0.355l0.325,0.241l0.146,0.192l-0.355,0.273l-0.907,0.401l0.317,0.271l0.385,0.159l0.33,0.302l-0.749,0.367l-0.405,0.43l-0.368,0.461l-1.591,0.669l-0.699,0.286l-0.456-0.205l-0.326,0.08l-0.538,0.539l-0.646,0.144l-0.663,0.348l-0.217,0.284l-0.191,0.142l-0.746,0.033l-0.221-0.031l0.151,0.535l-0.484,0.425L439,61.33l0.216,0.533l0.243,0.25l-0.244,0.955l-0.498,0.063l-0.217,0.204l0.189,0.757l-0.009,0.544l0.381,0.444l-0.287,0.175l0.926,0.082l0.225,0.187l0.499-0.082l0.652,0.594l0.428,0.314l0.86,0.163l0.198,0.406l0.32,0.139l0.014,0.335h-0.391l-0.508,0.323l-0.861,0.3l-0.492,0.162l-0.521-0.012l-0.146-0.115l-0.805-0.115l-0.66-0.173l-0.634-0.069l-0.137,0.104l-0.446-0.115l-0.257,0.3l0.819-0.069l0.497,0.265l0.591,0.046l0.205,0.208l0.481,0.069l0.021-0.127l0.616,0.069l0.258-0.196l0.297,0.011l0.481-0.104l0.226,0.081l0.026-0.15h0.164l0.214,0.15l-0.029,0.081l-0.722,0.023l0.219,0.288l-0.792,0.265l-0.168,0.288l-0.386,0.08l-0.089-0.092l0.042-0.161l-0.014-0.276l-0.258,0.023l-0.091,0.46l-0.501,0.333l-0.248,0.058l-0.36-0.069l-0.005,0.218l-1.418,0.035l0.156,0.458l0.513,0.258l0.066,0.609l-0.109,0.33l-0.281,0.051l-0.308-0.064l0.038,0.429l0.29,0.081l-0.126,0.268l0.24,0.228l-0.365,0.364l-0.222,0.455l-0.041,0.56l-0.766,1.043l-0.58,0.71l-0.165-0.062l-0.442-0.236l-0.614,0.193l-1.262-0.089l-0.106,0.311l-0.252-0.083l-0.518,0.264l-0.295,0.517l0.356,0.336l-0.376,0.374l-0.48-0.129l-0.173-0.037l-1.158,0.269l-1.11-0.116l-0.001-0.142l0.19-0.078l-0.062-0.181l0.281-0.297l-0.638-0.53l-0.413-0.479l-0.22-0.272l0.529-0.116l-0.082-0.312l0.421,0.077l0.147-0.245l-0.19-0.234l-0.285,0.013l-0.292-0.377l-0.527-0.221l-0.63-0.99h-0.286l0.011-0.408l-0.256-0.364l-0.348-0.298l0.221-0.484l0.206-0.341l-0.418-0.154l-0.405,0.102l-0.055-0.288l-0.412,0.051l-0.18-1.207l-0.225-0.131l0.311-0.355l0.293,0.132l0.15,0.342l0.41-0.013l0.324-0.737l-0.22-0.831l0.506-0.224l0.117-0.423l0.414-0.013l0.769-0.384l0.029-0.532l0.249-0.346l-0.26-0.427l-0.571-0.735l0.941-0.16l0.432-0.67l-0.297-0.243l-0.715-0.186l-0.582-0.39l0.335-1.171l-0.65-0.729l0.349-1.093l0.077-0.664l0.389-0.492l0.617-0.479l0.613-0.257l0.618-0.114l0.932,0.027l0.733-0.036l0.44-0.177l0.17-0.176l-0.252-0.587l-0.381-0.269l-0.339-0.125l0.495-0.545l0.574-0.499l0.383-0.469l0.32-0.598l0.06-0.971l0.121-0.244l0.981-0.021l0.687-0.442l1.325-0.919l0.615-0.346l0.188-0.345l-0.171-0.507l-0.05-0.213l1.484-1.176l0.465-0.167l0.279,0.015l0.871,0.095l0.695-0.004l0.318-0.299l0.083-0.199l0.021-0.663l0.168-0.183l1.731,0.389l0.972,0.144l0.67,0.129l0.323,0.015l0.271-0.25l0.164-0.449l0.281-1.066l0.865-0.038l0.41,0.031l0.114,0.063l0.146,0.033l0.616,0.463l1.286,0.658l1.085,0.292l1.583,0.207l0.508,0.229l0.77,0.558l-0.062,0.413l-0.004,0.526l0.507,0.637l0.405,0.685l0.028,0.392l-0.5,0.8l0.208,0.535l0.327,0.307l0.113,0.234z"/>
+ <path id="AQ" country:name="Antarctica" country:shortname="Antarctica" d="M238.107,361.753l0.515-0.688h0.859l1.202-0.515l-0.171-0.858l-3.091,0.344l-2.061,0.515l-1.545-0.344l-0.515-0.858l1.374-0.515l1.202-0.172l3.091-0.172l1.374-0.515l-0.172-1.03l0.859-0.516v-1.374l-1.326-1.054l0.982-0.491l1.202-0.344l1.545-0.172l0.858,0.344l0.858,0.858l1.03,1.374l1.374,1.202l1.03,1.373l-0.515,2.061l-1.545,0.516l-1.545,0.858l-3.434,0.172h-3.435z M172.686,360.379l3.091-0.687h3.262h5.495l2.919,1.202l-2.748,0.687l-3.759-0.337l-5.169-0.35l-3.091-0.516z M65.13,371.085l1.194-0.265l1.393,0.133l0.796,0.464h-1.99l-1.393-0.332z M277.944,379.954l0.515-1.202l2.404-1.03l2.748-0.172l2.061-0.171l1.545-0.859l0.343-1.545l1.374-0.687l3.091-0.688h4.464h2.404l3.434,0.688l0.687,1.889v1.202l-2.061,1.201l-11.848,1.03l-11.161,0.344zM36.004,376.434l1.202-0.858l2.061-0.343l4.121,0.515l4.293,1.374l-0.887,0.482l-2.719,0.204l-4.293-0.515l-3.777-0.859z M777.843,385.46l3.823,0.391l0.899,0.029l0.322,0.234l1.202,0.294l2.329,0.088l2.126-0.003l5.218,0.329l3.046,0.348l1.144-0.059l0.762,0.029l1.411,0.37v2.175v2.223v2.222v2.223v2.222v1.551h-0.041h-2.222h-2.223h-2.222h-2.223h-2.222h-2.223h-2.222h-2.223h-2.223h-2.222h-2.223h-2.222h-2.223h-2.222h-2.223h-2.222h-2.223h-2.223h-2.222h-2.223h-2.222h-2.223h-2.222h-2.223h-2.222h-2.223h-2.223h-2.222h-2.223h-2.222h-2.223h-2.222h-2.223h-2.222h-2.223h-2.223h-2.222h-2.223h-2.222h-2.223h-2.222h-2.223h-2.222h-2.223h-2.223h-2.222h-2.223h-2.222h-2.223h-2.222h-2.223h-2.222h-2.223h-2.223h-2.222h-2.223h-2.222h-2.223h-2.222h-2.223h-2.222h-2.223h-2.223h-2.222h-2.223h-2.222h-2.223h-2.222h-2.223h-2.222h-2.223h-2.223h-2.222h-2.223h-2.222h-2.223h-2.222h-2.223h-2.222h-2.223h-2.223h-2.222h-2.223h-2.222h-2.223h-2.222h-2.223h-2.222h-2.223h-2.182h-0.041h-2.222h-2.223h-2.222h-2.223h-2.222h-2.223h-2.222h-2.223h-2.223h-2.222h-2.223h-2.222h-2.223h-2.222h-2.223h-2.222h-2.223h-2.223h-2.222h-2.223h-2.222h-2.223h-2.222h-2.223h-2.222h-2.223h-2.223h-2.222h-2.223h-2.222h-2.223h-2.222h-2.223h-2.222h-2.223h-2.223h-2.222h-2.223h-2.222h-2.223h-2.222h-2.223h-2.222h-2.223h-2.223h-2.222h-2.223h-2.222h-2.223h-2.222h-2.223h-2.222h-2.223h-2.223h-2.222h-2.223h-2.222h-2.223h-2.222h-2.223h-2.222h-2.223h-2.223h-2.222h-2.223h-2.222h-2.223h-2.222h-2.223h-2.222h-2.223h-2.223h-2.222h-2.223h-2.222h-2.223h-2.222h-2.223h-2.222h-2.223h-2.223h-2.222h-2.223h-2.222h-2.223h-2.222h-2.223h-2.222h-2.223h-2.182h-2.222h-2.222h-2.222h-2.222h-2.223h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.223h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.223h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.223h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.223h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.223h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.223h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.223h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.223h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.223h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.223h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.223h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.223h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.223h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.223h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.223h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.223h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.223h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.223h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222h-2.222H9.014H6.792H4.569H2.347H0.125v-1.544v-2.222v-2.223v-2.222v-2.223v-2.223l3.941,0.297h10.131l7.898,0.516l6.868,0.172l8.586,0.858l6.353,0.515l8.757,0.172l4.808-0.172l6.525-0.172l2.404,0.344l3.606-0.858l16.312,0.344l4.638-0.013l1.143-0.467l-14.366-0.551l-9.616-0.688h-2.232l-3.091-0.172l-0.858-0.171l-1.545-0.344l-0.498-0.455l0.155-1.434l0.687-0.858l1.889-0.688l-3.263-0.687l-2.232-0.344l-0.953-0.503l1.589-0.521l-2.891-0.6l-3.074-0.208l-0.104-0.261l2.857-0.312h2.748l6.525,0.343h3.434l2.576,0.344l4.636-1.202l2.404-0.687l-2.748-1.03l-3.778-0.858l-4.391-0.405l-2.649-0.625l-3.262-0.172h-2.919l-2.919-0.858l2.576-0.516l1.28-0.342l-1.28-0.517l-2.919,0.516H52.66l-1.717-0.344L49.054,373l0.343-1.202l1.956-0.07l1.65-0.273h4.98l4.626,0.493l3.272,0.709l1.374,0.172l4.465-0.858l4.089,0.243v-0.729l0.066-0.597l-2.255-0.73l-2.93-0.075l-2.576-0.344l2.404-0.687l4.121,0.171l1.717-0.343l3.091-0.516l3.09-0.343l5.667-0.688l4.465-0.343l3.949-0.516l4.464-0.515l2.748,0.343h5.667l4.464,0.258l4.121-0.515l7.898,0.343l7.555-0.687l3.091,0.172l1.545-0.688l1.545,0.516l5.323-0.172l0.121-0.87l1.758-0.293l1.433,0.325l0.586,0.554l-0.423,0.813l2.364,0.329l1.38-0.264l-0.006-0.938l1.438-0.267l1.48,0.267l0.212,1.036l-1.009,0.423l0.521,0.781l3.024-0.351l1.889,0.343l3.434,0.172l2.576-0.687l3.778,0.086l4.868,0.33l2.344,0.013l1.449,0.109l0.693-0.53l-0.611-0.285l-2.202-0.122l1.305-0.285l0.041-0.408l-0.367-0.245l-1.386,0.123l-0.693,0.04l-0.856-0.979l-2.178-0.337l-0.676-0.193l-0.182-0.665l4.056,0.462l3.874-0.245l-1.224-0.489l-6.035-0.163l-0.774-0.082l-0.653-0.489v-0.815l2.301,0.105l0.839,0.67l5.301-0.204l7.253,0.736l2.404-0.172l3.262-0.172l4.464,0.172l3.263,0.172l2.061-0.516l0.687-0.687h1.202l0.344,1.03l2.576,0.343l2.404-0.343l0.858,0.515l3.435,0.688l3.777,0.343l2.061,0.172l1.03-0.515l0.687-1.202l2.747-0.172l1.03,0.515l1.717,0.688l3.091-0.172l3.434,0.258l4.121-0.344l4.979-0.516l5.495-0.858l3.091-0.515l1.202-0.688v-1.373l-1.374-1.202l-0.859-1.545l-1.202-0.688l-0.344-1.03l1.202-1.03l1.717-0.343l0.858-1.202l-0.343-0.858l-0.172-1.03l-1.202-0.516l0.344-1.545l1.889-0.172l2.404-1.374l1.545-0.515l0.859-0.859l1.03-0.687l2.919-1.202l3.606-0.515l2.404-1.202l2.404-0.172l2.232-1.03l1.545-0.343l0.343,1.03l-1.374,0.515l-1.03,0.344l-1.202,0.515h-0.858h-1.202l-2.919,1.202l-1.03,0.687l-1.717,1.374l-0.172,1.202l-0.687,0.687l-1.374-0.344h-1.03l-1.202,0.516l-1.202,0.687l-1.03,0.688l-0.687,1.201l0.515,0.688l0.687,0.687l1.374,0.344h1.545l0.858,0.515l0.687,1.202l1.545,1.546l0.687,0.858l1.03,0.687l0.687,1.374l0.858,1.373l0.344,1.546l-0.344,0.858l-0.858,1.717l-2.919,1.889l-1.202,0.172l-1.03,0.858l-1.717,1.03l-3.263,0.344l-4.979,0.858l-2.404,0.344l-2.919,0.687l-7.377-0.141l-4.556-0.316l-0.773-0.401l-1.717-0.344l-1.717-0.343h-1.374l-0.859,0.515l0.515,0.858l2.061,0.688l4.121,1.202l4.995,0.04l1.202,0.759l-3.278,0.574l-5.667-0.343l-4.979-0.516l-3.097-0.285l-2.151,0.253l0.823,0.696l1.164,0.538l3.262,0.172h2.232l1.374,0.343l-0.249,0.402l-0.782,0.113l-2.232,0.515l-5.151-0.171l-1.374-0.172l-2.232-1.202h-2.404l0.128,0.917l2.62,1.144l1.03,0.172l1.202-0.172l1.374,0.344h2.404l4.98-0.516l3.09,0.687l0.385,0.431l-0.041,0.6l-2.061,0.172l-3.263,0.172l-2.608-0.185l3.811,0.871l3.656-0.238l1.324,0.41l2.576,0.687l6.869,0.859l8.585,0.858l10.646,1.373l6.525,0.516l2.061,0.858l0.687,1.03l3.091-0.344l5.323-1.545l6.525-0.687l2.455-0.066l6.474-0.105l9.788-0.344l1.889,0.344l2.576-1.202l8.414-1.03l11.333-0.172l8.929-0.858l1.202-0.858l-1.202-0.516l-0.271-1.07l-1.184-0.338l-5.071,0.035l-2.232,0.172l-4.808-0.344h-3.091v-1.202l3.263-1.545l3.949-1.202l2.404-0.172l4.121-1.03l9.444-1.202l5.323-0.858h6.525l4.979-0.516l2.747-2.061l6.039-1.541l-1.23-0.52l-2.576,0.516l-2.061-0.344l1.545-1.03l1.545-0.343l2.48-0.249l0.696-0.742l3.85-0.742l1.577-0.418l0.603-0.557l-1.716-0.881l-0.093-0.604l1.252-0.231l0.464,0.742l1.017-0.097l2.061-0.858l1.03-0.343l0.858,0.171l1.203,1.544l2.403-0.342l0.242-0.91l0.96-0.807l1.889-0.516l1.374,0.516l-1.162,0.574l-0.139,0.604l3.189-0.319l4.808,0.258l3.263-0.172l1.03,0.858l1.545-0.344l1.717-0.515l5.839-0.858l7.212-1.03l4.292-0.858h2.061l2.061,1.373l1.718,0.344l1.889-0.344l1.545-0.858l7.556-0.344l3.434-0.171l4.293,0.171l6.697,0.945h2.575l4.293-0.516l6.01-0.687l5.151-0.688l2.404-0.515l2.231-0.344l0.615-0.959l1.148-0.835l1.671-0.095l0.938,0.965l1.294,0.409l1.732,1.052l1.009,0.139l1.009-0.661l1.322-0.174l0.209,0.522l-0.835,0.312l0.661,0.244l0.8,0.278l0.383-0.383l0.313-0.383l0.312,0.209l-0.174,0.348v0.521l0.592-0.174l1.913-0.557l0.418-1.704l5.102-1.137l1.374-0.687l3.605-0.172l1.363-0.646l2.758-0.126l0.21-0.27l-0.165-0.297l0.692-0.23l1.221,0.165l0.197,0.593l0.66,0.231l2.165-0.536l1.265-0.223l-0.726-0.297l-0.561-0.264l0.099-0.362l1.451-0.1l1.562,0.215l0.647,0.28l0.692-0.132l-0.066-0.33l-0.527-0.33v-0.561l0.297-0.23l0.846-0.242l4.292-0.858l2.92-0.172l3.058,0.115l2.296,1.076l1.316,0.023l0.741,0.144l0.023,0.383l-0.908,0.096l-0.168,0.454l1.723,0.216l4.892,0.646l5.571,0.453l1.546,0.172l1.717-0.172l7.556,0.688h5.323l0.687,0.687l0.2,1.075l-0.73,1.232l-0.672,0.439l-0.425,1.113l-0.73,0.319l-0.905-0.402l-0.83,0.402l-0.73,0.959l1.507,0.457l0.594,0.045l0.959-0.593l0.411,0.365l-0.867,1.05l-1.215,0.062l-1.717,1.374v0.858l1.889,0.688h2.919l1.718-0.859l1.889-1.545l1.717-1.717l1.374-0.688l4.121-1.03l2.231-0.687l3.263-0.344l2.061-1.03l1.03-1.03l3.435-1.03l2.403-0.687l2.061-0.687l2.061-0.172l6.182-0.687l3.778,0.171l1.204-0.542l0.169-0.659l0.54-0.759l0.49-0.101l0.471,0.776l0.305,0.775l4.892-0.35h5.838l4.979-0.172l3.091,0.344l2.112-0.214l1.328,0.085l1.018,0.594l1.188-0.764l2.714-1.046l1.866-0.226l0.664-0.028l0.594-0.028l0.777-0.057l1.512,0.311l1.166-0.172l3.606,0.687l3.777,0.344h1.03l1.064,0.573l0.745,0.088l2.149-0.088l1.271-0.263l1.315-0.438l-0.192-0.216l0.28-0.53l1.447-0.131l0.921-0.088l0.786,0.062l2.195-0.501l2.097,0.501l0.688,0.687l0.373,0.435l1.842-0.131l0.921-0.044l0.985,0.255l1.889,0.688l2.919,0.515l2.919-0.343l4.121-0.258l2.232-0.344h2.404l3.521,0.315l0.702-0.755l2.158-0.162l0.863,1.133l4.909,0.323l0.917-1.133l1.889-0.593l5.988,0.013l0.756-0.283l1.996,0.108l-0.432-1.403l0.054-0.809l1.232-0.36l0.872,1.277l-0.647,1.079l0.805,0.219l2.81,0.482l5.262,0.376l5.494,0.344l2.278,0.583l1.283,0.14l1.396-0.167l2.204,0.446l1.961-0.167l0.719,0.278l-0.435,0.431l-0.151,0.351l0.293,0.123l2.081,0.331l1.078,0.484l2.706-0.134l0.377,0.595l1.038,0.227l4.808,0.515l-0.123,0.536l0.567,0.236l2.695-0.095l3.214,0.181l-0.329-0.984l0.71-0.095l0.804,0.426l0.331,0.709l1.135,0.284l2.672,0.519l2.576-0.343l4.017,0.999l1.626,0.495l1.672,0.871l1.626,0.023l0.504,0.187l0.532-0.021l0.754-0.047l0.777,0.047l0.896,0.589l0.541,0.118l0.542,0.07l0.142-0.259h0.471l1.484-0.048l1.416,0.237l5.951,0.535l0.729,0.516l1.733,0.323l2.979,0.944l0.43-0.335l0.551,0.191l0.454,0.67l-0.741,0.215l-1.124,0.167l-0.216,0.359l0.168,0.263l0.55-0.048l-0.024,0.67l-0.43-0.048l-0.096,0.287l-0.312,0.071l-0.598,0.622l-0.526,0.12l-0.55,0.287l-0.168,0.669l-1.603,0.096l-1.339-0.239l-1.794,0.359l-2.153,0.425l-2.629,0.764l1.271,1.103l-1.907,0.212l-1.23-0.255l-0.763,0.212l-0.043,0.637l-2.374,0.169l0.136,0.514l0.924,0.632l-0.127,0.763l-0.382,0.085l-0.466,0.467l0.551,0.466l0.085,0.764l-0.764,0.424l0.637,0.254h0.763l0.764,0.255l0.339,0.509l0.17,0.721l1.284-0.187l0.836,0.907l2.035,0.297l0.339,0.339l2.672,0.552h-4.113l-2.799,0.138l-2.332,0.541l-1.823-0.085l-0.806,0.212l-1.611,0.339l-1.326-0.32l-0.546,0.426l1.116,0.529l-0.503,0.447l-0.669,0.195l-1.117,0.753l-2.623,0.642l0.475,0.391l2.205-0.111h0.53l0.809,0.307l0.168,0.363l0.499,0.18l0.422,0.183l0.111,0.894l0.209,0.502l3.195,0.279l2.874,0.948l3.662,0.801l5.151,1.202l1.456,0.062l1.015,0.17l-0.146,0.234l-1.67,0.264l-0.47,0.264l1.173,0.088l2.198-0.293l1.988,0.166z"/>
+ <g id="OTHER">
+ <circle cx="60" cy="300" r="6"/>
+ <text x="68" y="304" font-size="8">Other</text>
+ </g>
+ </g>
+ <text id="copyright" x="10" y="9" font-size="8">Based on map data marked &#x00A9; copyright iMapping Ltd. Used without permission under the auspices of Fair Use to improve interoperability. Source: http://www.wherearewe.co.nz/svg.html</text>
+ <text id="messages" x="280" y="330" font-size="30">Test not yet started.</text>
+ <script type="text/javascript"><![CDATA[
+ var svg = document.getElementsByTagNameNS('http://www.w3.org/2000/svg', 'svg')[0];
+ var t = document.getElementsByTagNameNS('http://www.w3.org/2000/svg', 'text')[2];
+
+ var low = 200;
+ var high = 800;
+ var delta = 60;
+ var current = low;
+ var rAF = window.requestAnimationFrame || window.mozRequestAnimationFrame;
+
+ function runTest() {
+ svg.setAttribute("width", current);
+ if (current < high) {
+ t.firstChild.data = 'Test in progress... ' + (100 * (current - low) / (high - low)).toFixed(1) + '%';
+ current += delta;
+ rAF(runTest);
+ } else {
+ var end = new Date();
+ var elapsed = (end - start) / 1000;
+ t.firstChild.data = 'Result: ' + elapsed.toFixed(2) + 's';
+ if (window.tpRecordTime) window.tpRecordTime(end - start, start);
+ if (parent.reportResults) parent.reportResults(end - start, start);
+ }
+ }
+ addEventListener("load", function() {
+ TalosContentProfiler.subtestStart("hixie-007.xml loaded", true).then(() => {
+ rAF(runTest);
+ });
+ });
+ ]]></script>
+ <script type="text/javascript" xlink:href="resource://talos-powers/TalosContentProfiler.js"></script>
+</svg>
diff --git a/testing/talos/talos/tests/svgx/images/smallcats.gif b/testing/talos/talos/tests/svgx/images/smallcats.gif
new file mode 100644
index 0000000000..b6b0560088
--- /dev/null
+++ b/testing/talos/talos/tests/svgx/images/smallcats.gif
Binary files differ
diff --git a/testing/talos/talos/tests/svgx/svgm.manifest b/testing/talos/talos/tests/svgx/svgm.manifest
new file mode 100644
index 0000000000..9a5b7dd2a9
--- /dev/null
+++ b/testing/talos/talos/tests/svgx/svgm.manifest
@@ -0,0 +1,8 @@
+# Painting multiple complex paths
+% http://localhost/tests/svgx/hixie-001.xml
+# Painting text
+% http://localhost/tests/svgx/hixie-003.xml
+# Painting linear gradients
+% http://localhost/tests/svgx/hixie-005.xml
+# World Map
+% http://localhost/tests/svgx/hixie-007.xml
diff --git a/testing/talos/talos/tests/svgx/svgx.manifest b/testing/talos/talos/tests/svgx/svgx.manifest
new file mode 100644
index 0000000000..02f9543531
--- /dev/null
+++ b/testing/talos/talos/tests/svgx/svgx.manifest
@@ -0,0 +1,14 @@
+# Painting multiple complex paths
+% http://localhost/tests/svgx/hixie-001.xml
+# Painting multiple complex paths with transparency
+% http://localhost/tests/svgx/hixie-002.xml
+# Painting text
+% http://localhost/tests/svgx/hixie-003.xml
+# Painting images
+% http://localhost/tests/svgx/hixie-004.xml
+# Painting linear gradients
+% http://localhost/tests/svgx/hixie-005.xml
+# Painting radial gradients
+% http://localhost/tests/svgx/hixie-006.xml
+# World Map
+% http://localhost/tests/svgx/hixie-007.xml \ No newline at end of file
diff --git a/testing/talos/talos/tests/tabpaint/api.js b/testing/talos/talos/tests/tabpaint/api.js
new file mode 100644
index 0000000000..abf64c6fe4
--- /dev/null
+++ b/testing/talos/talos/tests/tabpaint/api.js
@@ -0,0 +1,213 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/**
+ * This test will measure the performance of opening a tab and displaying
+ * the simplest content (a blank page). This test is concerned primarily
+ * with the time it takes to show the content area to the user, rather than
+ * the performance of the tab opening or closing animations (which are
+ * measured in the TART test). This is why this test disables tab animations.
+ *
+ * When opening tabs and showing content, there are two cases to consider:
+ *
+ * 1) The tab has been opened via a command from the parent process. For example,
+ * the user has clicked on a link in a separate application which is opening
+ * in this browser, so the message to open the tab and display the content
+ * comes from the operating system, to the parent.
+ *
+ * 2) The tab has been opened by clicking on a link in content. It is possible
+ * for certain types of links (_blank links for example) to open new tabs.
+ */
+
+ChromeUtils.defineESModuleGetters(this, {
+ BrowserWindowTracker: "resource:///modules/BrowserWindowTracker.sys.mjs",
+ TalosParentProfiler: "resource://talos-powers/TalosParentProfiler.sys.mjs",
+});
+
+const REDUCE_MOTION_PREF = "ui.prefersReducedMotion";
+const MULTI_OPT_OUT_PREF = "dom.ipc.multiOptOut";
+
+const MESSAGES = ["TabPaint:Go", "TabPaint:Painted"];
+
+const BROWSER_FLUSH_TOPIC = "sessionstore-browser-shutdown-flush";
+
+/* globals ExtensionAPI */
+this.tabpaint = class extends ExtensionAPI {
+ onStartup() {
+ // We don't have a window in this scope, and in fact, there might
+ // not be any browser windows around. Since pageloader is loading
+ // this add-on, along with the tabpaint.html content, what we'll do
+ // is wait for the tabpaint.html content to send us a message to
+ // get us moving.
+ for (let msgName of MESSAGES) {
+ Services.mm.addMessageListener(msgName, this);
+ }
+
+ this.framescriptURL = this.extension.baseURI.resolve("/framescript.js");
+ Services.mm.loadFrameScript(this.framescriptURL, true);
+
+ Services.prefs.setIntPref(REDUCE_MOTION_PREF, 1);
+ Services.prefs.setIntPref(
+ MULTI_OPT_OUT_PREF,
+ Services.appinfo.E10S_MULTI_EXPERIMENT
+ );
+
+ /**
+ * We'll store a callback here to be fired once the target page
+ * reports that it has painted.
+ */
+ this.paintCallback = null;
+ }
+
+ onShutdown() {
+ for (let msgName of MESSAGES) {
+ Services.mm.removeMessageListener(msgName, this);
+ }
+
+ Services.mm.removeDelayedFrameScript(this.framescriptURL);
+
+ Services.prefs.clearUserPref(REDUCE_MOTION_PREF);
+ Services.prefs.clearUserPref(MULTI_OPT_OUT_PREF);
+ }
+
+ receiveMessage(msg) {
+ let browser = msg.target;
+
+ let gBrowser = browser.ownerGlobal.gBrowser;
+
+ switch (msg.name) {
+ case "TabPaint:Go": {
+ // Our document has loaded, and we're off to the races!
+ this.go(browser.messageManager, gBrowser, msg.data.target);
+ break;
+ }
+
+ case "TabPaint:Painted": {
+ // Content has reported that it has painted.
+ if (!this.paintCallback) {
+ throw new Error("TabPaint:Painted fired without a paintCallback set");
+ }
+
+ let tab = gBrowser.getTabForBrowser(browser);
+ let delta = msg.data.delta;
+ this.paintCallback({ tab, delta });
+ break;
+ }
+ }
+ }
+
+ /**
+ * Start a single run of the test. This will measure the time
+ * to open a new tab from the parent, and then measure the time
+ * to open a new tab from content.
+ *
+ * @param gBrowser (<xul:tabbrowser>)
+ * The tabbrowser of the window to use.
+ */
+ async go(mm, gBrowser, target) {
+ let fromParent = await this.openTabFromParent(gBrowser, target);
+ let fromContent = await this.openTabFromContent(gBrowser);
+
+ mm.sendAsyncMessage("TabPaint:FinalResults", { fromParent, fromContent });
+ }
+
+ /**
+ * Opens a tab from the parent, waits until it is displayed, then
+ * removes the tab.
+ *
+ * @param gBrowser (<xul:tabbrowser>)
+ * The tabbrowser of the window to use.
+ *
+ * @return Promise
+ * Resolves once the tab has been fully removed. Resolves
+ * with the time (in ms) it took to open the tab from the parent.
+ */
+ async openTabFromParent(gBrowser, target) {
+ let win = BrowserWindowTracker.getTopWindow();
+
+ TalosParentProfiler.subtestStart("TabPaint Parent Start");
+ let startTime = Cu.now();
+
+ gBrowser.selectedTab = gBrowser.addTab(
+ //win.performance.now() + win.performance.timing.navigationStart gives the UNIX timestamp.
+ `${target}?${
+ win.performance.now() + win.performance.timing.navigationStart
+ }`,
+ {
+ triggeringPrincipal:
+ Services.scriptSecurityManager.getSystemPrincipal(),
+ }
+ );
+
+ let { tab, delta } = await this.whenTabShown();
+ TalosParentProfiler.subtestEnd(
+ "Talos - Tabpaint: Open Tab from Parent",
+ startTime
+ );
+ await this.removeTab(tab);
+ return delta;
+ }
+
+ /**
+ * Opens a tab from content, waits until it is displayed, then
+ * removes the tab.
+ *
+ * @param gBrowser (<xul:tabbrowser>)
+ * The tabbrowser of the window to use.
+ *
+ * @return Promise
+ * Resolves once the tab has been fully removed. Resolves
+ * with the time (in ms) it took to open the tab from content.
+ */
+ async openTabFromContent(gBrowser) {
+ TalosParentProfiler.subtestStart("TabPaint Content Start");
+ let start_time = Cu.now();
+
+ Services.mm.broadcastAsyncMessage("TabPaint:OpenFromContent");
+
+ let { tab, delta } = await this.whenTabShown();
+ TalosParentProfiler.subtestEnd(
+ "Talos - Tabpaint: Open Tab from Content",
+ start_time
+ );
+ await this.removeTab(tab);
+ return delta;
+ }
+
+ /**
+ * Returns a Promise that will resolve once the next tab reports
+ * it has shown.
+ *
+ * @return Promise
+ */
+ whenTabShown() {
+ return new Promise(resolve => {
+ this.paintCallback = resolve;
+ });
+ }
+
+ /**
+ * Returns a Promise that removes a tab, and resolves once the final
+ * message from that tab has come up.
+ *
+ * @param tab (<xul:tab>)
+ * The tab to remove.
+ *
+ * @return Promise
+ */
+ removeTab(tab) {
+ TalosParentProfiler.mark("Tabpaint: Remove Tab");
+ return new Promise(resolve => {
+ let browser = tab.linkedBrowser;
+ let observer = (subject, topic, data) => {
+ if (subject === browser) {
+ Services.obs.removeObserver(observer, BROWSER_FLUSH_TOPIC);
+ resolve();
+ }
+ };
+ Services.obs.addObserver(observer, BROWSER_FLUSH_TOPIC);
+ tab.ownerGlobal.gBrowser.removeTab(tab);
+ });
+ }
+};
diff --git a/testing/talos/talos/tests/tabpaint/framescript.js b/testing/talos/talos/tests/tabpaint/framescript.js
new file mode 100644
index 0000000000..2d4d7149fc
--- /dev/null
+++ b/testing/talos/talos/tests/tabpaint/framescript.js
@@ -0,0 +1,102 @@
+/* eslint-env mozilla/frame-script */
+
+(function () {
+ addEventListener(
+ "load",
+ loadevt => {
+ if (!content.location.pathname.endsWith("target.html")) {
+ return;
+ }
+
+ /**
+ * When a page is loaded, we expect a search string to be
+ * appended with the "starting time" (in ms) of when the tab
+ * was opened.
+ *
+ * Example: target.html?1457063506846
+ */
+ let opened = parseInt(content.location.search.substring(1), 10);
+
+ addEventListener("MozAfterPaint", function onPaint(e) {
+ // Bug 1371332 - sometimes, MozAfterPaint events fire
+ // for "empty" paints, where nothing has actually been
+ // painted. We can detect that by looking at the rect
+ // for the region that has painted.
+ let rect = e.boundingClientRect;
+ if (!rect.width && !rect.height) {
+ return;
+ }
+
+ removeEventListener("MozAfterPaint", onPaint);
+
+ // The MozAfterPaint event comes with a paintTimeStamp
+ // which tells us when in this content's lifetime the
+ // paint actually occurred. Note that this is not a
+ // measurement of when this paint occurred from
+ // the UNIX epoch. This makes it a little tricky to
+ // calculate when the paint actually occurred relative
+ // to the starting time that's been appended to the
+ // page's URL.
+ //
+ // Thankfully, the PerformanceTiming API gives us a
+ // sense of when this page's lifetime started, relative
+ // to the UNIX epoch - the "fetchStart". Taking that
+ // time and adding the paintTimeStamp should give us
+ // a pretty decent approximation of when since the
+ // UNIX epoch the paint actually occurred for this
+ // content.
+ //
+ // We can then subtract the starting time to get the
+ // delta, which should now represent the time it took
+ // from requesting that the tab be opened, to the
+ // paint occurring within the tab.
+ let fetchStart = content.performance.timing.fetchStart;
+ let presented = fetchStart + e.paintTimeStamp;
+ let delta = presented - opened;
+
+ sendAsyncMessage("TabPaint:Painted", { delta });
+ });
+ },
+ true
+ );
+
+ addEventListener(
+ "TabPaint:Ping",
+ e => {
+ let evt = new content.CustomEvent("TabPaint:Pong", { bubbles: true });
+ content.dispatchEvent(evt);
+ },
+ false,
+ true
+ );
+
+ addEventListener(
+ "TabPaint:Go",
+ e => {
+ sendAsyncMessage("TabPaint:Go", { target: e.detail.target });
+ },
+ false,
+ true
+ );
+
+ addMessageListener("TabPaint:OpenFromContent", msg => {
+ let evt = new content.CustomEvent("TabPaint:OpenFromContent", {
+ bubbles: true,
+ });
+ content.dispatchEvent(evt);
+ });
+
+ addMessageListener("TabPaint:FinalResults", msg => {
+ let evt = Cu.cloneInto(
+ {
+ bubbles: true,
+ detail: msg.data,
+ },
+ content
+ );
+
+ content.dispatchEvent(
+ new content.CustomEvent("TabPaint:FinalResults", evt)
+ );
+ });
+})();
diff --git a/testing/talos/talos/tests/tabpaint/manifest.json b/testing/talos/talos/tests/tabpaint/manifest.json
new file mode 100644
index 0000000000..105e04719a
--- /dev/null
+++ b/testing/talos/talos/tests/tabpaint/manifest.json
@@ -0,0 +1,23 @@
+{
+ "manifest_version": 2,
+ "name": "tabpaint test",
+ "version": "1.1",
+ "description": "Measures the performance of opening tabs",
+
+ "browser_specific_settings": {
+ "gecko": {
+ "id": "tabpaint-test@mozilla.org"
+ }
+ },
+
+ "experiment_apis": {
+ "tabpaint": {
+ "schema": "schema.json",
+ "parent": {
+ "scopes": ["addon_parent"],
+ "script": "api.js",
+ "events": ["startup"]
+ }
+ }
+ }
+}
diff --git a/testing/talos/talos/tests/tabpaint/schema.json b/testing/talos/talos/tests/tabpaint/schema.json
new file mode 100644
index 0000000000..fe51488c70
--- /dev/null
+++ b/testing/talos/talos/tests/tabpaint/schema.json
@@ -0,0 +1 @@
+[]
diff --git a/testing/talos/talos/tests/tabpaint/tabpaint.html b/testing/talos/talos/tests/tabpaint/tabpaint.html
new file mode 100644
index 0000000000..0ab7242304
--- /dev/null
+++ b/testing/talos/talos/tests/tabpaint/tabpaint.html
@@ -0,0 +1,57 @@
+<html>
+<head>
+<script>
+
+function init() {
+ let targetURL = new URL(window.location.href);
+ let i = targetURL.pathname.lastIndexOf("/");
+ targetURL.pathname = `${targetURL.pathname.substring(0, i)}/target.html`;
+
+ window.addEventListener("TabPaint:FinalResults", (event) => {
+ let { fromParent, fromContent } = event.detail;
+
+ tpRecordTime([fromParent, fromContent].join(","), 0, "tabpaint-from-parent, tabpaint-from-content");
+ }, {once: true});
+
+ window.addEventListener("TabPaint:OpenFromContent", (event) => {
+ let target = document.getElementById("target");
+
+ //win.performance.now() + win.performance.timing.navigationStart gives the UNIX timestamp.
+ let now = window.performance.now() + window.performance.timing.navigationStart;
+
+ target.href = `${targetURL.href}?${now}`;
+ target.click();
+ });
+
+ async function tryPing() {
+ let pingPromise = new Promise(resolve => {
+ window.addEventListener("TabPaint:Pong", resolve, {once: true});
+ dispatchEvent(new CustomEvent("TabPaint:Ping", {bubbles: true}));
+ });
+ let timeoutPromise = new Promise((resolve, reject) => setTimeout(reject, 500));
+
+ try {
+ await Promise.race([pingPromise, timeoutPromise]);
+ } catch (e) {
+ return tryPing();
+ }
+ return null;
+ }
+
+ tryPing().then(() => {
+ dispatchEvent(new CustomEvent("TabPaint:Go", {
+ bubbles: true,
+ detail: {
+ target: targetURL.href,
+ },
+ }));
+ });
+}
+</script>
+</head>
+<body onload="init();">
+ Hello, Talos!
+
+ <a href="#" id="target" target="_blank">I'll open a new tab</a>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/tabpaint/tabpaint.manifest b/testing/talos/talos/tests/tabpaint/tabpaint.manifest
new file mode 100644
index 0000000000..68116b6dca
--- /dev/null
+++ b/testing/talos/talos/tests/tabpaint/tabpaint.manifest
@@ -0,0 +1,2 @@
+% http://localhost/tests/tabpaint/tabpaint.html
+
diff --git a/testing/talos/talos/tests/tabpaint/target.html b/testing/talos/talos/tests/tabpaint/target.html
new file mode 100644
index 0000000000..79b661596e
--- /dev/null
+++ b/testing/talos/talos/tests/tabpaint/target.html
@@ -0,0 +1,9 @@
+<html>
+<head>
+<title>TABPAINT</title>
+<meta http-equiv="Content-Type" content="text/html;charset=utf-8"></meta>
+</head>
+<body>
+<p>TABPAINT</p>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/tabswitch/actors/TalosTabSwitchChild.sys.mjs b/testing/talos/talos/tests/tabswitch/actors/TalosTabSwitchChild.sys.mjs
new file mode 100644
index 0000000000..5b27d677e3
--- /dev/null
+++ b/testing/talos/talos/tests/tabswitch/actors/TalosTabSwitchChild.sys.mjs
@@ -0,0 +1,31 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+import { RemotePageChild } from "resource://gre/actors/RemotePageChild.sys.mjs";
+
+export class TalosTabSwitchChild extends RemotePageChild {
+ actorCreated() {
+ // Ignore about:blank pages that can get here.
+ if (!String(this.document.location).startsWith("about:tabswitch")) {
+ return;
+ }
+
+ // If an error occurs, it was probably already added by an earlier test run.
+ try {
+ this.addPage("about:tabswitch", {
+ RPMSendQuery: ["tabswitch-do-test"],
+ });
+ } catch {}
+
+ super.actorCreated();
+ }
+
+ handleEvent(event) {}
+
+ receiveMessage(message) {
+ if (message.name == "GarbageCollect") {
+ this.contentWindow.windowUtils.garbageCollect();
+ }
+ }
+}
diff --git a/testing/talos/talos/tests/tabswitch/actors/TalosTabSwitchParent.sys.mjs b/testing/talos/talos/tests/tabswitch/actors/TalosTabSwitchParent.sys.mjs
new file mode 100644
index 0000000000..3b609af0a7
--- /dev/null
+++ b/testing/talos/talos/tests/tabswitch/actors/TalosTabSwitchParent.sys.mjs
@@ -0,0 +1,344 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+let TalosParentProfiler;
+
+export class TalosTabSwitchParent extends JSWindowActorParent {
+ receiveMessage(message) {
+ if (message.name == "tabswitch-do-test") {
+ let browser = this.browsingContext.top.embedderElement;
+ return this.test(browser.ownerGlobal);
+ }
+
+ return undefined;
+ }
+
+ /**
+ * Returns a Promise that resolves when browser-delayed-startup-finished
+ * fires for a given window
+ *
+ * @param win
+ * The window that we're waiting for the notification for.
+ * @returns Promise
+ */
+ waitForDelayedStartup(win) {
+ return new Promise(resolve => {
+ const topic = "browser-delayed-startup-finished";
+ Services.obs.addObserver(function onStartup(subject) {
+ if (win == subject) {
+ Services.obs.removeObserver(onStartup, topic);
+ resolve();
+ }
+ }, topic);
+ });
+ }
+
+ /**
+ * For some <xul:tabbrowser>, loads a collection of URLs as new tabs
+ * in that browser.
+ *
+ * @param gBrowser (<xul:tabbrowser>)
+ * The <xul:tabbrowser> in which to load the new tabs.
+ * @param urls (Array)
+ * An array of URL strings to be loaded as new tabs.
+ * @returns Promise
+ * Resolves once all tabs have finished loading.
+ */
+ loadTabs(gBrowser, urls) {
+ return new Promise(resolve => {
+ gBrowser.loadTabs(urls, {
+ inBackground: true,
+ triggeringPrincipal:
+ Services.scriptSecurityManager.getSystemPrincipal(),
+ });
+
+ let waitingToLoad = new Set(urls);
+
+ let listener = {
+ QueryInterface: ChromeUtils.generateQI([
+ "nsIWebProgressListener",
+ "nsISupportsWeakReference",
+ ]),
+ onStateChange(aBrowser, aWebProgress, aRequest, aStateFlags, aStatus) {
+ let loadedState =
+ Ci.nsIWebProgressListener.STATE_STOP |
+ Ci.nsIWebProgressListener.STATE_IS_NETWORK;
+ if (
+ (aStateFlags & loadedState) == loadedState &&
+ !aWebProgress.isLoadingDocument &&
+ aWebProgress.isTopLevel &&
+ Components.isSuccessCode(aStatus)
+ ) {
+ dump(`Loaded: ${aBrowser.currentURI.spec}\n`);
+ waitingToLoad.delete(aBrowser.currentURI.spec);
+
+ if (!waitingToLoad.size) {
+ gBrowser.removeTabsProgressListener(listener);
+ dump("Loads complete - starting tab switches\n");
+ resolve();
+ }
+ }
+ },
+ };
+
+ gBrowser.addTabsProgressListener(listener);
+ });
+ }
+
+ /**
+ * For some <xul:tab> in a browser window, have that window switch
+ * to that tab. Returns a Promise that resolves ones the tab content
+ * has been presented to the user.
+ */
+ async switchToTab(tab) {
+ let browser = tab.linkedBrowser;
+ let gBrowser = tab.ownerGlobal.gBrowser;
+
+ let start = Cu.now();
+
+ // We need to wait for the TabSwitchDone event to make sure
+ // that the async tab switcher has shut itself down.
+ let switchDone = this.waitForTabSwitchDone(browser);
+ // Set up our promise that will wait for the content to be
+ // presented.
+ let finishPromise = this.waitForContentPresented(browser);
+ // Finally, do the tab switch.
+ gBrowser.selectedTab = tab;
+
+ await switchDone;
+ let finish = await finishPromise;
+
+ return finish - start;
+ }
+
+ /**
+ * For some <xul:browser>, find the <xul:tabbrowser> associated with it,
+ * and wait until that tabbrowser has finished a tab switch. This function
+ * assumes a tab switch has started, or is about to start.
+ *
+ * @param browser (<xul:browser>)
+ * The browser whose tabbrowser we expect to be involved in a tab
+ * switch.
+ * @returns Promise
+ * Resolves once the TabSwitchDone event is fired.
+ */
+ waitForTabSwitchDone(browser) {
+ return new Promise(resolve => {
+ let gBrowser = browser.ownerGlobal.gBrowser;
+ gBrowser.addEventListener(
+ "TabSwitchDone",
+ function onTabSwitchDone() {
+ resolve();
+ },
+ { once: true }
+ );
+ });
+ }
+
+ /**
+ * For some <xul:browser>, returns a Promise that resolves once its
+ * content has been presented to the user.
+ *
+ * @param browser (<xul:browser>)
+ * The browser we expect to be presented.
+ *
+ * @returns Promise
+ * Resolves once the content has been presented. Resolves to
+ * the system time that the presentation occurred at, in
+ * milliseconds since midnight 01 January, 1970 UTC.
+ */
+ waitForContentPresented(browser) {
+ return new Promise(resolve => {
+ function onLayersReady() {
+ let now = Cu.now();
+ TalosParentProfiler.mark("Browser layers seen by tabswitch");
+ resolve(now);
+ }
+ if (browser.hasLayers) {
+ onLayersReady();
+ return;
+ }
+ browser.addEventListener("MozLayerTreeReady", onLayersReady, {
+ once: true,
+ });
+ });
+ }
+
+ /**
+ * Do a garbage collect in the parent, and then a garbage
+ * collection in the content process that the actor is
+ * running in.
+ *
+ * @returns Promise
+ * Resolves once garbage collection has been completed in the
+ * parent, and the content process for the actor.
+ */
+ forceGC(win) {
+ win.windowUtils.garbageCollect();
+ return this.sendQuery("GarbageCollect");
+ }
+
+ /**
+ * Given some host window, open a new window, browser its initial tab to
+ * about:blank, then load up our set of testing URLs. Once they've all finished
+ * loading, switch through each tab, recording their tab switch times. Finally,
+ * report the results.
+ *
+ * @param window
+ * A host window. Primarily, we just use this for the OpenBrowserWindow
+ * function defined in that window.
+ * @returns Promise
+ */
+ async test(window) {
+ if (!window.gMultiProcessBrowser) {
+ dump(
+ "** The tabswitch Talos test does not support running in non-e10s mode " +
+ "anymore! Bailing out!\n"
+ );
+ return null;
+ }
+
+ TalosParentProfiler = ChromeUtils.importESModule(
+ "resource://talos-powers/TalosParentProfiler.sys.mjs"
+ ).TalosParentProfiler;
+
+ let testURLs = [];
+
+ let win = window.OpenBrowserWindow();
+ try {
+ let prefFile = Services.prefs.getCharPref("addon.test.tabswitch.urlfile");
+ if (prefFile) {
+ testURLs = handleFile(win, prefFile);
+ }
+ } catch (ex) {
+ /* error condition handled below */
+ }
+ if (!testURLs || !testURLs.length) {
+ dump(
+ "no tabs to test, 'addon.test.tabswitch.urlfile' pref isn't set to page set path\n"
+ );
+ return null;
+ }
+
+ await this.waitForDelayedStartup(win);
+
+ let gBrowser = win.gBrowser;
+
+ // We don't want to catch scrolling the tabstrip in our tests
+ gBrowser.tabContainer.style.opacity = "0";
+
+ let initialTab = gBrowser.selectedTab;
+ await this.loadTabs(gBrowser, testURLs);
+
+ // We'll switch back to about:blank after each tab switch
+ // in an attempt to put the graphics layer into a "steady"
+ // state before switching to the next tab.
+ initialTab.linkedBrowser.loadURI(Services.io.newURI("about:blank"), {
+ triggeringPrincipal: Services.scriptSecurityManager.createNullPrincipal(
+ {}
+ ),
+ });
+
+ let tabs = gBrowser.getTabsToTheEndFrom(initialTab);
+ let times = [];
+
+ for (let tab of tabs) {
+ // Let's do an initial run to warm up any paint related caches
+ // (like glyph caches for text). In the next loop we will start with
+ // a GC before each switch so we don't need here.
+ dump(`${tab.linkedBrowser.currentURI.spec}: warm up begin\n`);
+ await this.switchToTab(tab);
+ dump(`${tab.linkedBrowser.currentURI.spec}: warm up end\n`);
+
+ await this.switchToTab(initialTab);
+ }
+
+ for (let tab of tabs) {
+ // Moving a tab causes expensive style/layout computations on the tab bar
+ // that are delayed using requestAnimationFrame, so wait for an animation
+ // frame callback + one tick to ensure we aren't measuring the time it
+ // takes to move a tab.
+ gBrowser.moveTabTo(tab, 1);
+ await new Promise(resolve => win.requestAnimationFrame(resolve));
+ await new Promise(resolve => Services.tm.dispatchToMainThread(resolve));
+
+ await this.forceGC(win);
+ TalosParentProfiler.subtestStart();
+ let time = await this.switchToTab(tab);
+ TalosParentProfiler.subtestEnd(
+ "TabSwitch Test: " + tab.linkedBrowser.currentURI.spec
+ );
+ dump(`${tab.linkedBrowser.currentURI.spec}: ${time}ms\n`);
+ times.push(time);
+ await this.switchToTab(initialTab);
+ }
+
+ let output =
+ "<!DOCTYPE html>" +
+ '<html lang="en">' +
+ "<head><title>Tab Switch Results</title></head>" +
+ "<body><h1>Tab switch times</h1>" +
+ "<table>";
+ let time = 0;
+ for (let i in times) {
+ time += times[i];
+ output +=
+ "<tr><td>" + testURLs[i] + "</td><td>" + times[i] + "ms</td></tr>";
+ }
+ output += "</table></body></html>";
+ dump("total tab switch time:" + time + "\n");
+
+ let resultsTab = win.gBrowser.addTab(
+ "data:text/html;charset=utf-8," + encodeURIComponent(output),
+ {
+ triggeringPrincipal:
+ Services.scriptSecurityManager.getSystemPrincipal(),
+ }
+ );
+
+ win.gBrowser.selectedTab = resultsTab;
+
+ TalosParentProfiler.afterProfileGathered().then(() => {
+ win.close();
+ });
+
+ return {
+ times,
+ urls: testURLs,
+ };
+ }
+}
+
+// This just has to match up with the make_talos_domain function in talos.py
+function makeTalosDomain(host) {
+ return host + "-talos";
+}
+
+function handleFile(win, file) {
+ let localFile = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
+ localFile.initWithPath(file);
+ let localURI = Services.io.newFileURI(localFile);
+ let req = new win.XMLHttpRequest();
+ req.open("get", localURI.spec, false);
+ req.send(null);
+
+ let testURLs = [];
+ let maxurls = Services.prefs.getIntPref("addon.test.tabswitch.maxurls");
+ let lines = req.responseText.split('<a href="');
+ testURLs = [];
+ if (maxurls && maxurls > 0) {
+ lines.splice(maxurls, lines.length);
+ }
+ lines.forEach(function (a) {
+ let url = a.split('"')[0];
+ if (url != "") {
+ let domain = url.split("/")[0];
+ if (domain != "") {
+ testURLs.push(`http://${makeTalosDomain(domain)}/fis/tp5n/${url}`);
+ }
+ }
+ });
+
+ return testURLs;
+}
diff --git a/testing/talos/talos/tests/tabswitch/api.js b/testing/talos/talos/tests/tabswitch/api.js
new file mode 100644
index 0000000000..8ebccdf411
--- /dev/null
+++ b/testing/talos/talos/tests/tabswitch/api.js
@@ -0,0 +1,62 @@
+// -*- Mode: js; tab-width: 2; indent-tabs-mode: nil; js2-basic-offset: 2; js2-skip-preprocessor-directives: t; -*-
+
+/* globals ExtensionAPI, Services */
+
+ChromeUtils.defineESModuleGetters(this, {
+ AboutNewTab: "resource:///modules/AboutNewTab.sys.mjs",
+});
+
+this.tabswitch = class extends ExtensionAPI {
+ getAPI(context) {
+ return {
+ tabswitch: {
+ setup() {
+ AboutNewTab.newTabURL = "about:blank";
+
+ let uri = Services.io.newURI(
+ "actors/",
+ null,
+ context.extension.rootURI
+ );
+ let resProto = Services.io
+ .getProtocolHandler("resource")
+ .QueryInterface(Ci.nsIResProtocolHandler);
+ resProto.setSubstitution("talos-tabswitch", uri);
+
+ const processScriptURL = context.extension.baseURI.resolve(
+ "content/tabswitch-content-process.js"
+ );
+ Services.ppmm.loadProcessScript(processScriptURL, true);
+
+ let tabSwitchTalosActors = {
+ parent: {
+ esModuleURI:
+ "resource://talos-tabswitch/TalosTabSwitchParent.sys.mjs",
+ },
+ child: {
+ esModuleURI:
+ "resource://talos-tabswitch/TalosTabSwitchChild.sys.mjs",
+ events: {
+ DOMDocElementInserted: { capture: true },
+ },
+ },
+ };
+ ChromeUtils.registerWindowActor(
+ "TalosTabSwitch",
+ tabSwitchTalosActors
+ );
+
+ return () => {
+ Services.ppmm.sendAsyncMessage("Tabswitch:Teardown");
+ ChromeUtils.unregisterWindowActor(
+ "TalosTabSwitch",
+ tabSwitchTalosActors
+ );
+ AboutNewTab.resetNewTabURL();
+ resProto.setSubstitution("talos-tabswitch", null);
+ };
+ },
+ },
+ };
+ }
+};
diff --git a/testing/talos/talos/tests/tabswitch/background.js b/testing/talos/talos/tests/tabswitch/background.js
new file mode 100644
index 0000000000..6727db475f
--- /dev/null
+++ b/testing/talos/talos/tests/tabswitch/background.js
@@ -0,0 +1,11 @@
+/* globals browser */
+
+/**
+ * The tabswitch test is a Pageloader test, meaning that the tabswitch.manifest file
+ * tells Talos to load a particular page. The loading of that page signals
+ * the start of the test. It's also where results need to go, as the
+ * Talos gunk augments the loaded page with a special tpRecordTime
+ * function that is used to report results.
+ */
+
+browser.tabswitch.setup();
diff --git a/testing/talos/talos/tests/tabswitch/content/tabswitch-content-process.js b/testing/talos/talos/tests/tabswitch/content/tabswitch-content-process.js
new file mode 100644
index 0000000000..53c4935953
--- /dev/null
+++ b/testing/talos/talos/tests/tabswitch/content/tabswitch-content-process.js
@@ -0,0 +1,69 @@
+/* eslint-env mozilla/process-script */
+
+const { ComponentUtils } = ChromeUtils.importESModule(
+ "resource://gre/modules/ComponentUtils.sys.mjs"
+);
+
+const WEBEXTENSION_ID = "tabswitch-talos@mozilla.org";
+const ABOUT_PAGE_NAME = "tabswitch";
+const Registrar = Components.manager.QueryInterface(Ci.nsIComponentRegistrar);
+const UUID = "0f459ab4-b4ba-4741-ac89-ee47dea07adb";
+const ABOUT_PATH_PATH = "content/test.html";
+
+const { WebExtensionPolicy } = Cu.getGlobalForObject(Services);
+
+const TPSProcessScript = {
+ init() {
+ let extensionPolicy = WebExtensionPolicy.getByID(WEBEXTENSION_ID);
+ let aboutPageURI = extensionPolicy.getURL(ABOUT_PATH_PATH);
+
+ class TabSwitchAboutModule {
+ constructor() {
+ this.QueryInterface = ChromeUtils.generateQI(["nsIAboutModule"]);
+ }
+ newChannel(aURI, aLoadInfo) {
+ let uri = Services.io.newURI(aboutPageURI);
+ let chan = Services.io.newChannelFromURIWithLoadInfo(uri, aLoadInfo);
+ chan.originalURI = aURI;
+ return chan;
+ }
+ getURIFlags(aURI) {
+ return (
+ Ci.nsIAboutModule.ALLOW_SCRIPT |
+ Ci.nsIAboutModule.URI_MUST_LOAD_IN_CHILD |
+ Ci.nsIAboutModule.URI_SAFE_FOR_UNTRUSTED_CONTENT
+ );
+ }
+ }
+
+ let factory = ComponentUtils.generateSingletonFactory(TabSwitchAboutModule);
+ this._factory = factory;
+
+ Registrar.registerFactory(
+ Components.ID(UUID),
+ "",
+ `@mozilla.org/network/protocol/about;1?what=${ABOUT_PAGE_NAME}`,
+ factory
+ );
+
+ this._hasSetup = true;
+ },
+
+ teardown() {
+ if (!this._hasSetup) {
+ return;
+ }
+
+ Registrar.unregisterFactory(Components.ID(UUID), this._factory);
+ this._hasSetup = false;
+ this._factory = null;
+ },
+
+ receiveMessage(msg) {
+ if (msg.name == "Tabswitch:Teardown") {
+ this.teardown();
+ }
+ },
+};
+
+TPSProcessScript.init();
diff --git a/testing/talos/talos/tests/tabswitch/content/test.html b/testing/talos/talos/tests/tabswitch/content/test.html
new file mode 100644
index 0000000000..3cdc7a673c
--- /dev/null
+++ b/testing/talos/talos/tests/tabswitch/content/test.html
@@ -0,0 +1,17 @@
+<html>
+ <head>
+ <script>
+ /* global RPMSendQuery */
+ function do_test(override) {
+ if (override || document.location.hash.indexOf("#auto") == 0) {
+ RPMSendQuery("tabswitch-do-test", {}).then(results => {
+ tpRecordTime(results.times.join(","), 0, results.urls.join(","));
+ });
+ }
+ }
+ </script>
+ </head>
+ <body onload="do_test(false)">
+ Hello Talos!
+ </body>
+</html>
diff --git a/testing/talos/talos/tests/tabswitch/manifest.json b/testing/talos/talos/tests/tabswitch/manifest.json
new file mode 100644
index 0000000000..d8f4451c4e
--- /dev/null
+++ b/testing/talos/talos/tests/tabswitch/manifest.json
@@ -0,0 +1,24 @@
+{
+ "browser_specific_settings": {
+ "gecko": {
+ "id": "tabswitch-talos@mozilla.org"
+ }
+ },
+ "manifest_version": 2,
+ "name": "Tabswitch Talos Test",
+ "version": "0.1",
+ "permissions": [],
+ "background": {
+ "scripts": ["background.js"]
+ },
+ "experiment_apis": {
+ "tabswitch": {
+ "schema": "schema.json",
+ "parent": {
+ "scopes": ["addon_parent"],
+ "script": "api.js",
+ "paths": [["tabswitch"]]
+ }
+ }
+ }
+}
diff --git a/testing/talos/talos/tests/tabswitch/schema.json b/testing/talos/talos/tests/tabswitch/schema.json
new file mode 100644
index 0000000000..6a8e54177e
--- /dev/null
+++ b/testing/talos/talos/tests/tabswitch/schema.json
@@ -0,0 +1,14 @@
+[
+ {
+ "namespace": "tabswitch",
+ "description": "Special powers for the tabswitch Talos test",
+ "functions": [
+ {
+ "name": "setup",
+ "type": "function",
+ "description": "Prepares the tabswitch test to be run by the Talos framework.",
+ "parameters": []
+ }
+ ]
+ }
+]
diff --git a/testing/talos/talos/tests/tabswitch/tabswitch.manifest b/testing/talos/talos/tests/tabswitch/tabswitch.manifest
new file mode 100644
index 0000000000..cabe207e5d
--- /dev/null
+++ b/testing/talos/talos/tests/tabswitch/tabswitch.manifest
@@ -0,0 +1 @@
+% about:tabswitch#auto
diff --git a/testing/talos/talos/tests/tart/addon/api.js b/testing/talos/talos/tests/tart/addon/api.js
new file mode 100644
index 0000000000..062c279ef6
--- /dev/null
+++ b/testing/talos/talos/tests/tart/addon/api.js
@@ -0,0 +1,109 @@
+"use strict";
+
+/* globals Services, XPCOMUtils */
+
+XPCOMUtils.defineLazyServiceGetter(
+ this,
+ "aomStartup",
+ "@mozilla.org/addons/addon-manager-startup;1",
+ "amIAddonManagerStartup"
+);
+
+XPCOMUtils.defineLazyServiceGetter(
+ this,
+ "clipboardHelper",
+ "@mozilla.org/widget/clipboardhelper;1",
+ "nsIClipboardHelper"
+);
+
+/* globals ExtensionAPI */
+
+const PREFIX = "tart@mozilla.org";
+
+this.tart = class extends ExtensionAPI {
+ constructor(...args) {
+ super(...args);
+ this.loadedWindows = new WeakSet();
+ }
+
+ onStartup() {
+ const manifestURI = Services.io.newURI(
+ "manifest.json",
+ null,
+ this.extension.rootURI
+ );
+ this.chromeHandle = aomStartup.registerChrome(manifestURI, [
+ ["content", "tart", "chrome/"],
+ ]);
+
+ this.framescriptURL = this.extension.baseURI.resolve(
+ "/content/framescript.js"
+ );
+ Services.mm.loadFrameScript(this.framescriptURL, true);
+ Services.mm.addMessageListener(`${PREFIX}:chrome-exec-message`, this);
+ }
+
+ onShutdown() {
+ Services.mm.removeMessageListener(`${PREFIX}:chrome-exec-message`, this);
+ Services.mm.removeDelayedFrameScript(this.framescriptURL);
+ this.chromeHandle.destruct();
+ }
+
+ receiveMessage({ target, data }) {
+ let win = target.ownerGlobal;
+ if (!this.loadedWindows.has(win)) {
+ let { baseURI } = this.extension;
+ Services.scriptloader.loadSubScript(
+ baseURI.resolve("/content/Profiler.js"),
+ win
+ );
+ Services.scriptloader.loadSubScript(
+ baseURI.resolve("/content/tart.js"),
+ win
+ );
+ this.loadedWindows.add(win);
+ }
+
+ function sendResult(result) {
+ target.messageManager.sendAsyncMessage(`${PREFIX}:chrome-exec-reply`, {
+ id: data.id,
+ result,
+ });
+ }
+
+ let { command } = data;
+
+ switch (command.name) {
+ case "ping":
+ sendResult();
+ break;
+
+ case "runTest":
+ win.gBrowserInit.idleTasksFinishedPromise.then(() => {
+ new win.Tart().startTest(sendResult, command.data);
+ });
+ break;
+
+ case "setASAP":
+ Services.prefs.setIntPref("layout.frame_rate", 0);
+ Services.prefs.setIntPref("docshell.event_starvation_delay_hint", 1);
+ sendResult();
+ break;
+
+ case "unsetASAP":
+ Services.prefs.clearUserPref("layout.frame_rate");
+ Services.prefs.clearUserPref("docshell.event_starvation_delay_hint");
+ sendResult();
+ break;
+
+ case "toClipboard":
+ clipboardHelper.copyString(command.data);
+ sendResult();
+ break;
+
+ default:
+ console.error(`Unknown TART command ${command.name}\n`);
+ break;
+ }
+ }
+};
diff --git a/testing/talos/talos/tests/tart/addon/chrome/blank.icon.html b/testing/talos/talos/tests/tart/addon/chrome/blank.icon.html
new file mode 100644
index 0000000000..deaee86485
--- /dev/null
+++ b/testing/talos/talos/tests/tart/addon/chrome/blank.icon.html
@@ -0,0 +1,7 @@
+<html>
+<head>
+<meta charset="UTF-8"/>
+<link id="tart-icon" rel="icon" href="tart.ico"/>
+<title>Just another blank TART page with an icon</title>
+</head>
+</html>
diff --git a/testing/talos/talos/tests/tart/addon/chrome/tart.ico b/testing/talos/talos/tests/tart/addon/chrome/tart.ico
new file mode 100644
index 0000000000..5575a55913
--- /dev/null
+++ b/testing/talos/talos/tests/tart/addon/chrome/tart.ico
Binary files differ
diff --git a/testing/talos/talos/tests/tart/addon/content/Profiler.js b/testing/talos/talos/tests/tart/addon/content/Profiler.js
new file mode 100644
index 0000000000..23a69fe693
--- /dev/null
+++ b/testing/talos/talos/tests/tart/addon/content/Profiler.js
@@ -0,0 +1,173 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// - NOTE: This file is duplicated verbatim at:
+// - talos/pageloader/chrome/Profiler.js
+// - talos/tests/tart/addon/content/Profiler.js
+// - talos/startup_test/tresize/addon/content/Profiler.js
+//
+// - Please keep these copies in sync.
+// - Please make sure your changes apply cleanly to all use cases.
+
+// Finer grained profiler control
+//
+// Use this object to pause and resume the profiler so that it only profiles the
+// relevant parts of our tests.
+var Profiler;
+
+(function () {
+ var _profiler;
+
+ // If this script is loaded in a framescript context, there won't be a
+ // document object, so just use a fallback value in that case.
+ var test_name = this.document ? this.document.location.pathname : "unknown";
+
+ // Whether Profiler has been initialized. Until that happens, most calls
+ // will be ignored.
+ var enabled = false;
+
+ // The subtest name that beginTest() was called with.
+ var currentTest = "";
+
+ // Start time of the current subtest. It will be used to create a duration
+ // marker at the end of the subtest.
+ var profilerSubtestStartTime;
+
+ // Profiling settings.
+ var profiler_interval,
+ profiler_entries,
+ profiler_featuresArray,
+ profiler_threadsArray,
+ profiler_dir;
+
+ try {
+ // eslint-disable-next-line mozilla/use-services
+ _profiler = Cc["@mozilla.org/tools/profiler;1"].getService(Ci.nsIProfiler);
+ } catch (ex) {
+ (typeof dumpLog == "undefined" ? dump : dumpLog)(ex + "\n");
+ }
+
+ // Parses an url query string into a JS object.
+ function searchToObject(locationSearch) {
+ var pairs = locationSearch.substring(1).split("&");
+ var result = {};
+
+ for (var i in pairs) {
+ if (pairs[i] !== "") {
+ var pair = pairs[i].split("=");
+ result[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1] || "");
+ }
+ }
+
+ return result;
+ }
+
+ Profiler = {
+ /**
+ * Initialize the profiler using profiler settings supplied in a JS object.
+ * The following properties on the object are respected:
+ * - gecko_profile_interval
+ * - gecko_profile_entries
+ * - gecko_profile_features
+ * - gecko_profile_threads
+ * - gecko_profile_dir
+ */
+ initFromObject: function Profiler__initFromObject(obj) {
+ if (
+ obj &&
+ "gecko_profile_dir" in obj &&
+ typeof obj.gecko_profile_dir == "string" &&
+ "gecko_profile_interval" in obj &&
+ Number.isFinite(obj.gecko_profile_interval * 1) &&
+ "gecko_profile_entries" in obj &&
+ Number.isFinite(obj.gecko_profile_entries * 1) &&
+ "gecko_profile_features" in obj &&
+ typeof obj.gecko_profile_features == "string" &&
+ "gecko_profile_threads" in obj &&
+ typeof obj.gecko_profile_threads == "string"
+ ) {
+ profiler_interval = obj.gecko_profile_interval;
+ profiler_entries = obj.gecko_profile_entries;
+ profiler_featuresArray = obj.gecko_profile_features.split(",");
+ profiler_threadsArray = obj.gecko_profile_threads.split(",");
+ profiler_dir = obj.gecko_profile_dir;
+ enabled = true;
+ }
+ },
+ initFromURLQueryParams: function Profiler__initFromURLQueryParams(
+ locationSearch
+ ) {
+ this.initFromObject(searchToObject(locationSearch));
+ },
+ beginTest: function Profiler__beginTest(testName) {
+ currentTest = testName;
+ if (_profiler && enabled) {
+ _profiler.StartProfiler(
+ profiler_entries,
+ profiler_interval,
+ profiler_featuresArray,
+ profiler_threadsArray
+ );
+ }
+ },
+ finishTest: function Profiler__finishTest() {
+ if (_profiler && enabled) {
+ _profiler.Pause();
+ _profiler.dumpProfileToFile(
+ profiler_dir + "/" + currentTest + ".profile"
+ );
+ _profiler.StopProfiler();
+ }
+ },
+ finishStartupProfiling: function Profiler__finishStartupProfiling() {
+ if (_profiler && enabled) {
+ _profiler.dumpProfileToFile(profiler_dir + "/startup.profile");
+ _profiler.StopProfiler();
+ }
+ },
+
+ /**
+ * Set a marker indicating the start of the subtest.
+ *
+ * It will also set the `profilerSubtestStartTime` to be used later by
+ * `subtestEnd`.
+ */
+ subtestStart: function Profiler__subtestStart(name, explicit) {
+ profilerSubtestStartTime = performance.now();
+ if (_profiler) {
+ ChromeUtils.addProfilerMarker(
+ "Talos",
+ { category: "Test" },
+ explicit ? name : 'Start of test "' + (name || test_name) + '"'
+ );
+ }
+ },
+
+ /**
+ * Set a marker indicating the duration of the subtest.
+ *
+ * This will take the `profilerSubtestStartTime` that was set by
+ * `subtestStart` and will create a duration marker by setting the `endTime`
+ * to the current time.
+ */
+ subtestEnd: function Profiler__subtestEnd(name, explicit) {
+ if (_profiler) {
+ ChromeUtils.addProfilerMarker(
+ "Talos",
+ { startTime: profilerSubtestStartTime, category: "Test" },
+ explicit ? name : 'Test "' + (name || test_name) + '"'
+ );
+ }
+ },
+ mark: function Profiler__mark(marker, explicit) {
+ if (_profiler) {
+ ChromeUtils.addProfilerMarker(
+ "Talos",
+ { category: "Test" },
+ explicit ? marker : 'Profiler: "' + (marker || test_name) + '"'
+ );
+ }
+ },
+ };
+})();
diff --git a/testing/talos/talos/tests/tart/addon/content/framescript.js b/testing/talos/talos/tests/tart/addon/content/framescript.js
new file mode 100644
index 0000000000..66d9554853
--- /dev/null
+++ b/testing/talos/talos/tests/tart/addon/content/framescript.js
@@ -0,0 +1,58 @@
+/* eslint-env mozilla/frame-script */
+
+(function () {
+ const TART_PREFIX = "tart@mozilla.org:";
+
+ addEventListener(
+ TART_PREFIX + "chrome-exec-event",
+ function (e) {
+ if (!content.location.pathname.endsWith("tart.html")) {
+ console.error(
+ `Ignore chrome-exec-event on non-tart page ${content.location.href}`
+ );
+ return;
+ }
+
+ function dispatchReply(result) {
+ let contentEvent = Cu.cloneInto(
+ {
+ bubbles: true,
+ detail: result,
+ },
+ content
+ );
+ content.dispatchEvent(
+ new content.CustomEvent(e.detail.replyEvent, contentEvent)
+ );
+ }
+
+ if (e.detail.command.name == "ping") {
+ dispatchReply();
+ return;
+ }
+
+ var uniqueMessageId =
+ TART_PREFIX +
+ content.document.documentURI +
+ content.window.performance.now() +
+ Math.random();
+
+ addMessageListener(
+ TART_PREFIX + "chrome-exec-reply",
+ function done(reply) {
+ if (reply.data.id == uniqueMessageId) {
+ removeMessageListener(TART_PREFIX + "chrome-exec-reply", done);
+ dispatchReply(reply.data.result);
+ }
+ }
+ );
+
+ sendAsyncMessage(TART_PREFIX + "chrome-exec-message", {
+ command: e.detail.command,
+ id: uniqueMessageId,
+ });
+ },
+ false,
+ true
+ );
+})();
diff --git a/testing/talos/talos/tests/tart/addon/content/tab-min-width-1px.css b/testing/talos/talos/tests/tart/addon/content/tab-min-width-1px.css
new file mode 100644
index 0000000000..994ced11dd
--- /dev/null
+++ b/testing/talos/talos/tests/tart/addon/content/tab-min-width-1px.css
@@ -0,0 +1,11 @@
+@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
+
+/*
+Overlay this style rule at tart/chrome.manifest (but it seems to regress tab perf):
+style chrome://browser/content/browser.xhtml chrome://tart/content/tab-min-width-1px.css
+*/
+
+/* Prevent overflow while adding many tabs */
+.tabbrowser-tab[fadein]:not([pinned]) {
+ min-width: 1px !important;
+}
diff --git a/testing/talos/talos/tests/tart/addon/content/tart.js b/testing/talos/talos/tests/tart/addon/content/tart.js
new file mode 100644
index 0000000000..f3616cd4a9
--- /dev/null
+++ b/testing/talos/talos/tests/tart/addon/content/tart.js
@@ -0,0 +1,1034 @@
+// TODO:
+// V - Read transition duration from style instead of hardcoded 250ms (mconley)
+// V - Remove caret from tart.html (unfocus url bar)
+// V - Add fade-only tests (added icon @DPI2/current, simple @dpi current, lastTab @current. only icon@dpi2 runs on talos by default)
+// V - Output JSON results (OK to log, check with MattN if that's enough)
+// V - UI: Add tests descriptions, button to deselect all, Notice about profiling and Accurate 1st frame, copy JSON to clipboard.
+// V - Add profiler markers as start/done:[test-name]
+// V - Add custom subtests for talos by URL (tart.html)
+// V - Change repeat order from column to row major
+// (now repeats each test N times then advances to next test - instead of repeating the entire set N times)
+// V - Objectify
+// V - make sure of window size (use pinned tart tab - enough even in scale 2 with australis)
+// V - Make sure test-cases work on australis (min tab width for 8th tab)
+// V - pref - disable paint starvation: docshell.event_starvation_delay_hint=1 -> will be set by talos or by the user
+// V - For manual test: display: relevent prefs instructions (rate, starve hint), instructions for many-tabs
+// V - allow API-less intervals recording (using rAF, since the API is b0rked with OMTC)
+// (but using rAF appears to record spurious very short intervals which I think are not really frames)
+// V - Optimize cases (minimize test count without hurting cover):
+// - v1: only single tab, open + close, DPI1: about:blank, with-icon-and-long-title. DPI2: only the icon case
+// V - Log output
+// X - Support scroll into view (no end event)
+// X - have preview images: hard to make work across versions
+// - Tests:
+// V - With favicon
+// V - Different DPIs
+// V - with fade only (no tab open/close overhead)
+// X - tab drag
+// X - tab remove from the middle
+// X - Without add-tab button -> can be hidden while testing manually. in talos always with the button
+ChromeUtils.defineESModuleGetters(this, {
+ AboutNewTab: "resource:///modules/AboutNewTab.sys.mjs",
+});
+
+/* globals res:true, sequenceArray:true */
+
+function Tart() {}
+
+Tart.prototype = {
+ // Detector methods expect 'this' to be the detector object.
+ // Detectors must support measureNow(e) which indicates to collect the intervals and stop the recording.
+ // Detectors may support keepListening(e) to indicate to keep waiting before continuing to the next animation.
+
+ tabDetector: {
+ arm(handler, win) {
+ win.gBrowser.tabContainer.addEventListener("transitionend", handler);
+ },
+
+ measureNow(e) {
+ return e.type == "transitionend" && e.propertyName == "max-width";
+ },
+
+ cleanup(handler, win) {
+ win.gBrowser.tabContainer.removeEventListener("transitionend", handler);
+ },
+ },
+
+ customizeEnterDetector: {
+ arm(handler, win) {
+ win.gNavToolbox.addEventListener("customizationready", handler);
+ },
+
+ measureNow(e) {
+ return e.type == "customizationready";
+ },
+
+ cleanup(handler, win) {
+ win.gNavToolbox.removeEventListener("customizationready", handler);
+ },
+ },
+
+ makeNewTabURLChangePromise(url) {
+ let promise = new Promise(resolve => {
+ Services.obs.addObserver(function observer(subject, topic, data) {
+ Services.obs.removeObserver(observer, topic);
+ if (data == url) {
+ resolve();
+ }
+ }, "newtab-url-changed");
+ });
+ if (url === "about:newtab") {
+ AboutNewTab.resetNewTabURL();
+ } else {
+ AboutNewTab.newTabURL = url;
+ }
+ return promise;
+ },
+
+ // Same as customizeEnterDetector, but stops recording when the CSS animation ends
+ // The detector then waits until customizationready
+ customizeEnterCssDetector: {
+ arm(handler, win) {
+ win.gNavToolbox.addEventListener("customizationready", handler);
+ win.gNavToolbox.addEventListener("customization-transitionend", handler);
+ },
+
+ measureNow(e) {
+ return e.type == "customization-transitionend";
+ },
+
+ keepListening(e) {
+ return e.type != "customizationready";
+ },
+
+ cleanup(handler, win) {
+ win.gNavToolbox.removeEventListener(
+ "customization-transitionend",
+ handler
+ );
+ win.gNavToolbox.removeEventListener("customizationready", handler);
+ },
+ },
+
+ customizeExitDetector: {
+ arm(handler, win) {
+ win.gNavToolbox.addEventListener("aftercustomization", handler);
+ },
+
+ measureNow(e) {
+ return e.type == "aftercustomization";
+ },
+
+ cleanup(handler, win) {
+ win.gNavToolbox.removeEventListener("aftercustomization", handler);
+ },
+ },
+
+ clickNewTab() {
+ this._endDetection = this.tabDetector;
+ this._win.BrowserOpenTab();
+ // Modifying the style for each tab right after opening seems like it could regress performance,
+ // However, overlaying a global style over browser.xhtml actually ends up having greater ovrehead,
+ // especially while closing the last of many tabs (a noticeable ~250ms delay before expanding the rest).
+ // To overlay the style globally, add at tart/chrome.manifest:
+ // style chrome://browser/content/browser.xhtml chrome://tart/content/tab-min-width-1px.css
+ // where the file tab-min-width-1px.css is:
+ // .tabbrowser-tab[fadein]:not([pinned]) { min-width: 1px !important; }
+ // Additionally, the global style overlay apparently messes with intervals recording when layout.frame_rate=10000:
+ // Using the startFrameTimeRecording API, the first interval appears extra long (~1000ms) even with much widget tickling,
+ // Per-tab min-width on open it is then.
+
+ // --> many-tabs case which requires modified max-width will not go into v1. No need for now.
+ // this._win.gBrowser.selectedTab.style.minWidth = "1px"; // Prevent overflow regrdless of DPI scale.
+
+ return this._win.gBrowser.selectedTab;
+ },
+
+ clickCloseCurrentTab() {
+ this._endDetection = this.tabDetector;
+ this._win.BrowserCloseTabOrWindow();
+ return this._win.gBrowser.selectedTab;
+ },
+
+ fadeOutCurrentTab() {
+ this._endDetection = this.tabDetector;
+ this._win.gBrowser.selectedTab.removeAttribute("fadein");
+ },
+
+ fadeInCurrentTab() {
+ this._endDetection = this.tabDetector;
+ this._win.gBrowser.selectedTab.setAttribute("fadein", "true");
+ },
+
+ addSomeChromeUriTab() {
+ this._endDetection = this.tabDetector;
+ this._win.gBrowser.selectedTab = this._win.gBrowser.addTrustedTab(
+ "chrome://tart/content/blank.icon.html"
+ );
+ },
+
+ triggerCustomizeEnter() {
+ this._endDetection = this.customizeEnterDetector;
+ this._win.gCustomizeMode.enter();
+ },
+
+ triggerCustomizeEnterCss() {
+ this._endDetection = this.customizeEnterCssDetector;
+ this._win.gCustomizeMode.enter();
+ },
+
+ triggerCustomizeExit() {
+ this._endDetection = this.customizeExitDetector;
+ this._win.gCustomizeMode.exit();
+ },
+
+ pinTart() {
+ return this._win.gBrowser.pinTab(this._tartTab);
+ },
+
+ unpinTart() {
+ return this._win.gBrowser.unpinTab(this._tartTab);
+ },
+
+ USE_RECORDING_API: true, // true for Start[/Stop]FrameTimeRecording, otherwise record using rAF - which will also work with OMTC
+ // but (currently) also records iterations without paint invalidations
+
+ _win: undefined,
+ _tartTab: undefined,
+ _results: [],
+ _config: {
+ subtests: [],
+ repeat: 1,
+ rest: 500,
+ tickle: true,
+ controlProfiler: true,
+ },
+
+ _animate(
+ preWaitMs,
+ triggerFunc,
+ onDoneCallback,
+ isReportResult,
+ name,
+ referenceDuration
+ ) {
+ var self = this;
+ var recordingHandle;
+ var timeoutId = 0;
+ var detector; // will be assigned after calling trigger.
+ var rAF = window.requestAnimationFrame || window.mozRequestAnimationFrame;
+
+ var _recording = [];
+ var _abortRecording = false;
+ var startRecordTimestamp;
+ function startRecord() {
+ if (self._config.controlProfiler) {
+ if (isReportResult) {
+ Profiler.subtestStart(name);
+ }
+ } else {
+ Profiler.mark("Start: " + (isReportResult ? name : "[warmup]"), true);
+ }
+ startRecordTimestamp = window.performance.now();
+ if (self.USE_RECORDING_API) {
+ return window.windowUtils.startFrameTimeRecording();
+ }
+
+ _recording = [];
+ _abortRecording = false;
+
+ var last = performance.now();
+ function rec() {
+ // self._win.getComputedStyle(self._win.gBrowser.selectedTab).width; // force draw - not good - too much regression
+ if (_abortRecording) {
+ return;
+ }
+
+ var now = performance.now();
+ _recording.push(now - last);
+ last = now;
+ rAF(rec);
+ }
+
+ rAF(rec);
+
+ return 1; // dummy
+ }
+
+ var recordingAbsoluteDuration;
+ function stopRecord() {
+ recordingAbsoluteDuration =
+ window.performance.now() - startRecordTimestamp;
+ if (self._config.controlProfiler) {
+ if (isReportResult) {
+ Profiler.subtestEnd(name);
+ }
+ } else {
+ Profiler.mark("End: " + (isReportResult ? name : "[warmup]"), true);
+ }
+ if (self.USE_RECORDING_API) {
+ return window.windowUtils.stopFrameTimeRecording(recordingHandle);
+ }
+
+ _abortRecording = true;
+ return _recording.slice(0); // clone
+ }
+
+ function addResult(intervals) {
+ // For each animation sequence (intervals) we report 3 values:
+ // 1. Average interval for the last 50% of the reference duration
+ // (e.g. if the reference duration is 250ms then average of the last 125ms,
+ // regardless of the actual animation duration in practice)
+ // 2. Average interval for the entire animation.
+ // 3. Absolute difference between reference duration to actual diration.
+
+ var sumLastHalf = 0;
+ var countLastHalf = 0;
+ var sumMost = 0;
+ var sum = 0;
+ for (var i = intervals.length - 1; i >= 0; i--) {
+ sum += intervals[i];
+ if (sumLastHalf < referenceDuration / 2) {
+ sumLastHalf += intervals[i];
+ countLastHalf++;
+ }
+ if (sumMost < referenceDuration * 0.85) {
+ sumMost += intervals[i];
+ }
+ }
+ dump("overall: " + sum + "\n");
+
+ var averageLastHalf = countLastHalf ? sumLastHalf / countLastHalf : 0;
+ var averageOverall = intervals.length ? sum / intervals.length : 0;
+ var durationDiff = Math.abs(
+ recordingAbsoluteDuration - referenceDuration
+ );
+
+ self._results.push({ name: name + ".raw.TART", value: intervals }); // Just for display if running manually - Not collected for talos.
+ self._results.push({ name: name + ".half.TART", value: averageLastHalf });
+ self._results.push({ name: name + ".all.TART", value: averageOverall });
+ self._results.push({ name: name + ".error.TART", value: durationDiff });
+ }
+
+ function transEnd(e) {
+ if (e) {
+ let isMeasureNow = detector.measureNow(e);
+
+ if (isMeasureNow) {
+ // Get the recorded frame intervals and append result if required
+ let intervals = stopRecord();
+ if (isReportResult) {
+ addResult(intervals);
+ }
+ }
+
+ // If detector supports keepListening, use it, otherwise - measurement indicates the end.
+ if (
+ detector.keepListening ? detector.keepListening(e) : !isMeasureNow
+ ) {
+ return;
+ }
+ } else {
+ // No event == timeout
+ dump("TART: TIMEOUT\n");
+ }
+
+ // Cleanup
+ detector.cleanup(transEnd, self._win);
+ clearTimeout(timeoutId);
+
+ onDoneCallback();
+ }
+
+ function trigger(f) {
+ if (!self.USE_RECORDING_API) {
+ return rAF(f);
+ }
+
+ // When using the recording API, the first interval is to last frame, which could have been a while ago.
+ // To make sure the first interval is counted correctly, we "tickle" a widget
+ // and immidiatly afterwards start the test, such the last frame timestamp prior to the recording is now.
+ // However, on some systems, modifying the widget once isn't always enough, hence the tickle loop.
+ //
+ var id = "back-button";
+ var orig = self._win.document.getElementById(id).style.opacity;
+ var i = 0;
+
+ function tickleLoop() {
+ if (i++ < (isReportResult && self._config.tickle ? 17 : 0)) {
+ self._win.document.getElementById(id).style.opacity =
+ (i % 10) / 10 + 0.05; // just some style modification which will force redraw
+ return rAF(tickleLoop);
+ }
+
+ self._win.document.getElementById(id).style.opacity = orig;
+ return rAF(f);
+ }
+
+ tickleLoop();
+
+ return false;
+ }
+
+ setTimeout(function () {
+ trigger(function () {
+ timeoutId = setTimeout(transEnd, 3000);
+ recordingHandle = startRecord();
+ triggerFunc(); // also chooses detector
+ detector = self._endDetection;
+ detector.arm(transEnd, self._win);
+ });
+ }, preWaitMs);
+ },
+
+ _nextCommandIx: 0,
+ _commands: [],
+ _onSequenceComplete: 0,
+ _nextCommand() {
+ if (this._nextCommandIx >= this._commands.length) {
+ this._onSequenceComplete();
+ return;
+ }
+ this._commands[this._nextCommandIx++]();
+ },
+ // Each command at the array a function which must call nextCommand once it's done
+ _doSequence(commands, onComplete) {
+ this._commands = commands;
+ this._onSequenceComplete = onComplete;
+ this._results = [];
+ this._nextCommandIx = 0;
+
+ this._nextCommand();
+ },
+
+ _log(str) {
+ if (window.MozillaFileLogger && window.MozillaFileLogger.log) {
+ window.MozillaFileLogger.log(str);
+ }
+
+ window.dump(str);
+ },
+
+ _logLine(str) {
+ return this._log(str + "\n");
+ },
+
+ _reportAllResults() {
+ var out = "";
+ for (var i in this._results) {
+ res = this._results[i];
+ var disp = []
+ .concat(res.value)
+ .map(function (a) {
+ return isNaN(a) ? -1 : a.toFixed(1);
+ })
+ .join(" ");
+ out += res.name + ": " + disp + "\n";
+ }
+ this._log("\n" + out);
+ },
+
+ _onTestComplete: null,
+
+ _doneInternal() {
+ this._logLine("TART_RESULTS_JSON=" + JSON.stringify(this._results));
+ this._reportAllResults();
+ this._win.gBrowser.selectedTab = this._tartTab;
+
+ if (this._onTestComplete) {
+ this._onTestComplete(JSON.parse(JSON.stringify(this._results))); // Clone results
+ }
+ },
+
+ _startTest() {
+ // Save prefs and states which will change during the test, to get restored when done.
+ var origPreload = Services.prefs.getBoolPref("browser.newtab.preload");
+ var origDpi = Services.prefs.getCharPref("layout.css.devPixelsPerPx");
+ var origPinned = this._tartTab.pinned;
+
+ var self = this;
+ var animate = this._animate.bind(this);
+ var addTab = this.clickNewTab.bind(this);
+ var closeCurrentTab = this.clickCloseCurrentTab.bind(this);
+ var fadein = this.fadeInCurrentTab.bind(this);
+ var fadeout = this.fadeOutCurrentTab.bind(this);
+
+ var addSomeTab = this.addSomeChromeUriTab.bind(this);
+ var customizeEnter = this.triggerCustomizeEnter.bind(this);
+ var customizeEnterCss = this.triggerCustomizeEnterCss.bind(this);
+ var customizeExit = this.triggerCustomizeExit.bind(this);
+
+ var next = this._nextCommand.bind(this);
+ var rest = 500; // 500ms default rest before measuring an animation
+ if (this._config.rest) {
+ rest = this._config.rest;
+ }
+
+ // NOTE: causes a (slow) reflow, don't use right before measurements.
+ function getMaxTabTransitionTimeMs(aTab) {
+ let cstyle = window.getComputedStyle(aTab);
+ try {
+ return (
+ 1000 *
+ Math.max.apply(
+ null,
+ cstyle.transitionDuration.split(", ").map(s => parseFloat(s, 10))
+ )
+ );
+ } catch (e) {
+ return 250;
+ }
+ }
+
+ this.unpinTart();
+ var tabRefDuration = getMaxTabTransitionTimeMs(this._tartTab);
+ if (tabRefDuration < 20 || tabRefDuration > 2000) {
+ // Hardcoded fallback in case the value doesn't make sense as tab animation duration.
+ tabRefDuration = 250;
+ }
+
+ var custRefDuration = 0;
+
+ var subtests = {
+ init: [
+ // This is called before each subtest, so it's safe to assume the following prefs:
+ function () {
+ Services.prefs.setBoolPref("browser.newtab.preload", false);
+ self.pinTart();
+ self.makeNewTabURLChangePromise("about:blank").then(next);
+ },
+ ],
+
+ restore: [
+ // Restore prefs which were modified during the test
+ function () {
+ Services.prefs.setBoolPref("browser.newtab.preload", origPreload);
+ Services.prefs.setCharPref("layout.css.devPixelsPerPx", origDpi);
+ if (origPinned) {
+ self.pinTart();
+ } else {
+ self.unpinTart();
+ }
+ self.makeNewTabURLChangePromise("about:newtab").then(next);
+ },
+ ],
+
+ simple: [
+ function () {
+ Services.prefs.setCharPref("layout.css.devPixelsPerPx", "1");
+ next();
+ },
+ function () {
+ animate(0, addTab, next);
+ },
+ function () {
+ animate(0, closeCurrentTab, next);
+ },
+
+ function () {
+ animate(rest, addTab, next, true, "simple-open-DPI1", tabRefDuration);
+ },
+ function () {
+ animate(
+ rest,
+ closeCurrentTab,
+ next,
+ true,
+ "simple-close-DPI1",
+ tabRefDuration
+ );
+ },
+ ],
+
+ iconDpi1: [
+ function () {
+ Services.prefs.setCharPref("layout.css.devPixelsPerPx", "1");
+ self
+ .makeNewTabURLChangePromise("chrome://tart/content/blank.icon.html")
+ .then(next);
+ },
+ function () {
+ animate(0, addTab, next);
+ },
+ function () {
+ animate(0, closeCurrentTab, next);
+ },
+
+ function () {
+ animate(rest, addTab, next, true, "icon-open-DPI1", tabRefDuration);
+ },
+ function () {
+ animate(
+ rest,
+ closeCurrentTab,
+ next,
+ true,
+ "icon-close-DPI1",
+ tabRefDuration
+ );
+ },
+ ],
+
+ iconDpi2: [
+ function () {
+ Services.prefs.setCharPref("layout.css.devPixelsPerPx", "2");
+ self
+ .makeNewTabURLChangePromise("chrome://tart/content/blank.icon.html")
+ .then(next);
+ },
+ function () {
+ animate(0, addTab, next);
+ },
+ function () {
+ animate(0, closeCurrentTab, next);
+ },
+
+ function () {
+ animate(rest, addTab, next, true, "icon-open-DPI2", tabRefDuration);
+ },
+ function () {
+ animate(
+ rest,
+ closeCurrentTab,
+ next,
+ true,
+ "icon-close-DPI2",
+ tabRefDuration
+ );
+ },
+ ],
+
+ newtabNoPreload: [
+ function () {
+ Services.prefs.setCharPref("layout.css.devPixelsPerPx", "-1");
+ Services.prefs.setBoolPref("browser.newtab.preload", false);
+ self.makeNewTabURLChangePromise("about:newtab").then(next);
+ },
+ function () {
+ animate(
+ rest,
+ addTab,
+ next,
+ true,
+ "newtab-open-preload-no",
+ tabRefDuration
+ );
+ },
+ function () {
+ animate(0, closeCurrentTab, next);
+ },
+ ],
+
+ newtabYesPreload: [
+ function () {
+ Services.prefs.setCharPref("layout.css.devPixelsPerPx", "-1");
+ Services.prefs.setBoolPref("browser.newtab.preload", true);
+ self.makeNewTabURLChangePromise("about:newtab").then(next);
+ },
+ function () {
+ animate(0, addTab, next);
+ },
+ function () {
+ animate(0, closeCurrentTab, next);
+ },
+
+ function () {
+ animate(
+ 1000,
+ addTab,
+ next,
+ true,
+ "newtab-open-preload-yes",
+ tabRefDuration
+ );
+ },
+ function () {
+ animate(0, closeCurrentTab, next);
+ },
+ ],
+
+ simple3open3closeDpiCurrent: [
+ function () {
+ animate(
+ rest,
+ addTab,
+ next,
+ true,
+ "simple3-1-open-DPIcurrent",
+ tabRefDuration
+ );
+ },
+ function () {
+ animate(
+ rest,
+ addTab,
+ next,
+ true,
+ "simple3-2-open-DPIcurrent",
+ tabRefDuration
+ );
+ },
+ function () {
+ animate(
+ rest,
+ addTab,
+ next,
+ true,
+ "simple3-3-open-DPIcurrent",
+ tabRefDuration
+ );
+ },
+
+ function () {
+ animate(
+ rest,
+ closeCurrentTab,
+ next,
+ true,
+ "simple3-3-close-DPIcurrent",
+ tabRefDuration
+ );
+ },
+ function () {
+ animate(
+ rest,
+ closeCurrentTab,
+ next,
+ true,
+ "simple3-2-close-DPIcurrent",
+ tabRefDuration
+ );
+ },
+ function () {
+ animate(
+ rest,
+ closeCurrentTab,
+ next,
+ true,
+ "simple3-1-close-DPIcurrent",
+ tabRefDuration
+ );
+ },
+ ],
+
+ multi: [
+ function () {
+ Services.prefs.setCharPref("layout.css.devPixelsPerPx", "1.0");
+ self
+ .makeNewTabURLChangePromise("chrome://tart/content/blank.icon.html")
+ .then(next);
+ },
+
+ function () {
+ animate(0, addTab, next);
+ },
+ function () {
+ animate(0, addTab, next);
+ },
+ function () {
+ animate(0, addTab, next);
+ },
+ function () {
+ animate(0, addTab, next);
+ },
+ function () {
+ animate(0, addTab, next);
+ },
+ function () {
+ animate(0, addTab, next);
+ },
+
+ function () {
+ animate(
+ rest * 2,
+ addTab,
+ next,
+ true,
+ "multi-open-DPI1",
+ tabRefDuration
+ );
+ },
+ function () {
+ animate(
+ rest * 2,
+ closeCurrentTab,
+ next,
+ true,
+ "multi-close-DPI1",
+ tabRefDuration
+ );
+ },
+
+ function () {
+ Services.prefs.setCharPref("layout.css.devPixelsPerPx", "2");
+ next();
+ },
+ function () {
+ animate(0, addTab, next);
+ },
+ function () {
+ animate(0, closeCurrentTab, next);
+ },
+ function () {
+ animate(
+ rest * 2,
+ addTab,
+ next,
+ true,
+ "multi-open-DPI2",
+ tabRefDuration
+ );
+ },
+ function () {
+ animate(
+ rest * 2,
+ closeCurrentTab,
+ next,
+ true,
+ "multi-close-DPI2",
+ tabRefDuration
+ );
+ },
+
+ function () {
+ Services.prefs.setCharPref("layout.css.devPixelsPerPx", "-1");
+ next();
+ },
+
+ function () {
+ animate(0, closeCurrentTab, next);
+ },
+ function () {
+ animate(0, closeCurrentTab, next);
+ },
+ function () {
+ animate(0, closeCurrentTab, next);
+ },
+ function () {
+ animate(0, closeCurrentTab, next);
+ },
+ function () {
+ animate(0, closeCurrentTab, next);
+ },
+ function () {
+ animate(0, closeCurrentTab, next);
+ },
+ ],
+
+ simpleFadeDpiCurrent: [
+ function () {
+ self.makeNewTabURLChangePromise("about:blank").then(next);
+ },
+
+ function () {
+ animate(0, addTab, next);
+ },
+ function () {
+ animate(
+ rest,
+ fadeout,
+ next,
+ true,
+ "simpleFade-close-DPIcurrent",
+ tabRefDuration
+ );
+ },
+ function () {
+ animate(
+ rest,
+ fadein,
+ next,
+ true,
+ "simpleFade-open-DPIcurrent",
+ tabRefDuration
+ );
+ },
+ function () {
+ animate(0, closeCurrentTab, next);
+ },
+ ],
+
+ iconFadeDpiCurrent: [
+ function () {
+ self
+ .makeNewTabURLChangePromise("chrome://tart/content/blank.icon.html")
+ .then(next);
+ },
+
+ function () {
+ animate(0, addTab, next);
+ },
+ function () {
+ animate(
+ rest,
+ fadeout,
+ next,
+ true,
+ "iconFade-close-DPIcurrent",
+ tabRefDuration
+ );
+ },
+ function () {
+ animate(
+ rest,
+ fadein,
+ next,
+ true,
+ "iconFade-open-DPIcurrent",
+ tabRefDuration
+ );
+ },
+ function () {
+ animate(0, closeCurrentTab, next);
+ },
+ ],
+
+ iconFadeDpi2: [
+ function () {
+ Services.prefs.setCharPref("layout.css.devPixelsPerPx", "2");
+ self
+ .makeNewTabURLChangePromise("chrome://tart/content/blank.icon.html")
+ .then(next);
+ },
+ function () {
+ animate(0, addTab, next);
+ },
+ function () {
+ animate(
+ rest,
+ fadeout,
+ next,
+ true,
+ "iconFade-close-DPI2",
+ tabRefDuration
+ );
+ },
+ function () {
+ animate(
+ rest,
+ fadein,
+ next,
+ true,
+ "iconFade-open-DPI2",
+ tabRefDuration
+ );
+ },
+ function () {
+ animate(0, closeCurrentTab, next);
+ },
+ ],
+
+ lastTabFadeDpiCurrent: [
+ function () {
+ self._win.gBrowser.selectedTab =
+ self._win.gBrowser.tabs[gBrowser.tabs.length - 1];
+ next();
+ },
+ function () {
+ animate(
+ rest,
+ fadeout,
+ next,
+ true,
+ "lastTabFade-close-DPIcurrent",
+ tabRefDuration
+ );
+ },
+ function () {
+ animate(
+ rest,
+ fadein,
+ next,
+ true,
+ "lastTabFade-open-DPIcurrent",
+ tabRefDuration
+ );
+ },
+ ],
+
+ customize: [
+ // Test australis customize mode animation with default DPI.
+ function () {
+ Services.prefs.setCharPref("layout.css.devPixelsPerPx", "-1");
+ next();
+ },
+ // Adding a non-newtab since the behavior of exiting customize mode which was entered on newtab may change. See bug 957202.
+ function () {
+ animate(0, addSomeTab, next);
+ },
+
+ // The prefixes 1- and 2- were added because talos cuts common prefixes on all "pages", which ends up as "customize-e" prefix.
+ function () {
+ animate(
+ rest,
+ customizeEnter,
+ next,
+ true,
+ "1-customize-enter",
+ custRefDuration
+ );
+ },
+ function () {
+ animate(
+ rest,
+ customizeExit,
+ next,
+ true,
+ "2-customize-exit",
+ custRefDuration
+ );
+ },
+
+ // Measures the CSS-animation-only part of entering into customize mode
+ function () {
+ animate(
+ rest,
+ customizeEnterCss,
+ next,
+ true,
+ "3-customize-enter-css",
+ custRefDuration
+ );
+ },
+ function () {
+ animate(0, customizeExit, next);
+ },
+
+ function () {
+ animate(0, closeCurrentTab, next);
+ },
+ ],
+ };
+
+ // Construct the sequence array: config.repeat times config.subtests,
+ // where each subtest implicitly starts with init.
+ sequenceArray = [];
+ for (var i in this._config.subtests) {
+ for (var r = 0; r < this._config.repeat; r++) {
+ sequenceArray = sequenceArray.concat(subtests.init);
+ sequenceArray = sequenceArray.concat(
+ subtests[this._config.subtests[i]]
+ );
+ }
+ }
+ sequenceArray = sequenceArray.concat(subtests.restore);
+
+ this._doSequence(sequenceArray, this._doneInternal);
+ },
+
+ startTest(doneCallback, config) {
+ this._onTestComplete = function (results) {
+ Profiler.mark("TART - end", true);
+ doneCallback(results);
+ };
+ this._config = config;
+
+ this._win = Services.wm.getMostRecentWindow("navigator:browser");
+ this._tartTab = this._win.gBrowser.selectedTab;
+ this._win.gBrowser.selectedBrowser.focus(); // Unfocus the URL bar to avoid caret blink
+
+ Profiler.mark("TART - start", true);
+
+ return this._startTest();
+ },
+};
diff --git a/testing/talos/talos/tests/tart/addon/manifest.json b/testing/talos/talos/tests/tart/addon/manifest.json
new file mode 100644
index 0000000000..90553f6510
--- /dev/null
+++ b/testing/talos/talos/tests/tart/addon/manifest.json
@@ -0,0 +1,22 @@
+{
+ "manifest_version": 2,
+ "name": "TART - Tab Animation regression Test",
+ "version": "2.0",
+
+ "browser_specific_settings": {
+ "gecko": {
+ "id": "bug848358@mozilla.org"
+ }
+ },
+
+ "experiment_apis": {
+ "tart": {
+ "schema": "schema.json",
+ "parent": {
+ "scopes": ["addon_parent"],
+ "script": "api.js",
+ "events": ["startup"]
+ }
+ }
+ }
+}
diff --git a/testing/talos/talos/tests/tart/addon/schema.json b/testing/talos/talos/tests/tart/addon/schema.json
new file mode 100644
index 0000000000..fe51488c70
--- /dev/null
+++ b/testing/talos/talos/tests/tart/addon/schema.json
@@ -0,0 +1 @@
+[]
diff --git a/testing/talos/talos/tests/tart/tart.html b/testing/talos/talos/tests/tart/tart.html
new file mode 100644
index 0000000000..4aa35c4e1e
--- /dev/null
+++ b/testing/talos/talos/tests/tart/tart.html
@@ -0,0 +1,320 @@
+<html>
+<head>
+
+<meta charset="UTF-8"/>
+<link id="tart-icon" rel="icon" href="tart.ico"/>
+<title>TART - Tab Animation Regression Test</title>
+
+<script type="application/x-javascript">
+
+function $(id) {
+ return document.getElementById(id);
+}
+
+// Executes command at the chrome process.
+// Limited to one argument (data), which is enough for TART.
+// doneCallback will be called once done and, if applicable, with the result as argument.
+// Execution might finish quickly (e.g. when setting prefs) or
+// take a while (e.g. when triggering the test run)
+let _replyId = 1;
+function chromeExec(commandName, data, doneCallback) {
+ let replyEvent = `tart@mozilla.org:chrome-exec-reply:${_replyId++}`;
+ if (doneCallback) {
+ addEventListener(replyEvent, e => { doneCallback(e.detail); },
+ {once: true});
+ }
+
+ dispatchEvent(
+ new CustomEvent("tart@mozilla.org:chrome-exec-event", {
+ bubbles: true,
+ detail: {
+ command: {
+ name: commandName,
+ data,
+ },
+ replyEvent,
+ },
+ })
+ );
+}
+
+function setASAP() {
+ chromeExec("setASAP");
+}
+
+function unsetASAP() {
+ chromeExec("unsetASAP");
+}
+
+function toClipboard(text) {
+ chromeExec("toClipboard", text);
+}
+
+function runTest(config, doneCallback) {
+ chromeExec("runTest", config, doneCallback);
+}
+
+// Returns a Promise that resolves when the test extension is loaded.
+function waitForLoad() {
+ async function tryPing() {
+ let pingPromise = new Promise(resolve => chromeExec("ping", null, resolve));
+ let timeoutPromise = new Promise((resolve, reject) => setTimeout(reject, 500));
+
+ try {
+ await Promise.race([pingPromise, timeoutPromise]);
+ } catch (e) {
+ return tryPing();
+ }
+ return null;
+ }
+ return tryPing();
+}
+
+
+function sum(values) {
+ return values.reduce(function(a, b) { return a + b; });
+}
+
+function average(values) {
+ return values.length ? sum(values) / values.length : 999999999;
+}
+
+function stddev(values, avg) {
+ if (undefined == avg) avg = average(values);
+ if (values.length <= 1) return 0;
+
+ return Math.sqrt(
+ values.map(function(v) { return Math.pow(v - avg, 2); })
+ .reduce(function(a, b) { return a + b; }) / (values.length - 1));
+}
+
+var lastResults = '["[no results collected]"]';
+
+function doneTest(dispResult) {
+ $("hide-during-run").style.display = "block";
+ $("show-during-run").style.display = "none";
+ if (dispResult) {
+ // Array of test results, each element has .name and .value (test name and test result).
+ // Test result may also be an array of numeric values (all the intervals)
+
+ lastResults = JSON.stringify(dispResult); // for "Copy to clipboard" button
+
+ var stats = {}; // Used for average, stddev when repeat!=1
+ var isRepeat = false;
+
+ for (var i in dispResult) {
+ var di = dispResult[i];
+ var disp = [].concat(di.value).map(function(a) { return " " + (isNaN(a) ? -1 : a.toFixed(1)); }).join("&nbsp;&nbsp;");
+ dispResult[i] = String(di.name) + ": " + disp;
+ if (di.name.includes(".half") || di.name.includes(".all"))
+ dispResult[i] = "<b>" + dispResult[i] + "</b>";
+ if (di.name.includes(".raw"))
+ dispResult[i] = "<br/>" + dispResult[i]; // Add space before raw results (which are the first result of an animation)
+
+ // stats:
+ if (!di.name.includes(".raw")) {
+ if (!stats[di.name]) {
+ stats[di.name] = [];
+ } else {
+ isRepeat = true;
+ }
+
+ stats[di.name].push(di.value);
+ }
+ }
+
+ var dispStats = "";
+ if (isRepeat) {
+ dispStats = "<hr/><b>Aggregated</b>:<br/>";
+ for (var s in stats) {
+ if (s.includes(".half") )
+ dispStats += "<br/>";
+ dispStats += s + "&nbsp;&nbsp;&nbsp;&nbsp;Average (" + stats[s].length + "): " + average(stats[s]).toFixed(2) + " stddev: " + stddev(stats[s]).toFixed(2) + "<br/>";
+ }
+
+ dispStats += "<hr/><b>Individual animations</b>:<br/>";
+ }
+
+ // eslint-disable-next-line no-unsanitized/property
+ $("run-results").innerHTML = "<hr/><br/>Results <button onclick='toClipboard(lastResults)'>[ Copy to clipboard as JSON ]</button>:<br/>" + dispStats + dispResult.join("<br/>");
+
+ let testNames = [], testResults = [];
+ for (let result of JSON.parse(lastResults)) {
+ if (!Array.isArray(result.value)) {
+ testNames.push(result.name);
+ testResults.push(result.value);
+ }
+ }
+ window.tpRecordTime(testResults.join(","), 0, testNames.join(","));
+ }
+}
+
+var config = {subtests: [], repeat: 1}; // Empty subtests interpreted as all subtests, since otherwise meaningless.
+
+function triggerStart() {
+ updateConfig();
+ $("hide-during-run").style.display = "none";
+ $("show-during-run").style.display = "block";
+ $("run-results").innerHTML = "";
+
+ waitForLoad().then(() => {
+ runTest(config, doneTest);
+ });
+}
+
+var defaultConfig = {
+ repeat: 1,
+ rest: 500,
+ tickle: true,
+ controlProfiler: true, // If true, pause the profiler when not measuring. Else just add markers.
+ subtests: {
+ simple: true,
+ iconDpi1: true,
+ iconDpi2: true,
+ iconFadeDpi2: true,
+ newtabNoPreload: true,
+ newtabYesPreload: true,
+ simple3open3closeDpiCurrent: false,
+ multi: false,
+ simpleFadeDpiCurrent: false,
+ iconFadeDpiCurrent: false,
+ lastTabFadeDpiCurrent: false,
+ customize: false,
+ },
+ };
+
+var simpleInfo = "Measure open/close of a new tab of about:blank";
+var iconInfo = "Measure open/close of a new empty tab with favicon and long title";
+var newtabInfo = "Measure open of the standard about:newtab";
+var fadeInfo = "Open a new tab, then measure Fade-out/in";
+var dpi1Info = " (@DPI 1.0)";
+var dpi2Info = " (@DPI 2.0)";
+var dpiCurrentInfo = " (@DPI unchanged)";
+
+var testsInfo = {
+ simple: simpleInfo + dpi1Info,
+ iconDpi1: iconInfo + dpi1Info,
+ iconDpi2: iconInfo + dpi2Info,
+ iconFadeDpi2: fadeInfo + dpi2Info,
+ newtabNoPreload: newtabInfo + " (without preload)",
+ newtabYesPreload: newtabInfo + " (with preload)",
+ simple3open3closeDpiCurrent: "Measure 3 tab opens and 3 tab closes" + dpiCurrentInfo,
+ multi: "Open 6 tabs, then measures open/close of the 7th tab (@DPI 1.0 and 2.0)",
+ simpleFadeDpiCurrent: fadeInfo + dpiCurrentInfo,
+ iconFadeDpiCurrent: fadeInfo + dpiCurrentInfo,
+ lastTabFadeDpiCurrent: "Focus the last tab, then measure Fade-out/in (requires to manually add a tab before testing)",
+ customize: "Measure (Australis) Customize-mode enter/exit",
+};
+
+
+function deselectAll() {
+ for (var test in defaultConfig.subtests) {
+ $("subtest-" + test).checked = false;
+ }
+}
+
+function updateConfig() {
+ config = {subtests: []};
+ for (var test in defaultConfig.subtests) {
+ if ($("subtest-" + test).checked) {
+ config.subtests.push(test);
+ }
+ }
+
+ var repeat = $("repeat").value;
+ config.repeat = isNaN(repeat) ? 1 : repeat;
+
+ var rest = $("rest").value;
+ config.rest = isNaN(rest) ? 500 : rest; // 500ms default, use 1ms as minimum
+ config.rest = config.rest ? config.rest : 1;
+
+ config.tickle = $("tickle").checked;
+
+ config.controlProfiler = $("controlProfiler").checked;
+}
+
+// E.g. returns "world" for key "hello", "2014" for key "year", and "" for key "dummy":
+// http://localhost/x.html#hello=world&x=12&year=2014
+function getUriHashValue(key) {
+ var k = String(key) + "=";
+ var uriVars = unescape(document.location.hash).substr(1).split("&");
+ for (var i in uriVars) {
+ if (uriVars[i].indexOf(k) == 0)
+ return uriVars[i].substr(k.length);
+ }
+ return "";
+}
+
+// URL e.g. chrome://tart/content/tart.html#auto&tests=["simple","iconFadeDpiCurrent"]
+// Note - there's no error checking for arguments parsing errors.
+// Any errors will express as either javascript errors or not reading the args correctly.
+// This is not an "official" part of the UI, and when used in talos, will fail early
+// enough to not cause "weird" issues too late.
+function updateOptionsFromUrl() {
+ var uriTests = getUriHashValue("tests");
+ var tests = uriTests ? JSON.parse(uriTests) : [];
+
+ if (tests.length) {
+ for (var d in defaultConfig.subtests) {
+ $("subtest-" + d).checked = false;
+ for (var t in tests) {
+ if (tests[t] == d) {
+ $("subtest-" + d).checked = true;
+ }
+ }
+ }
+ }
+
+ var cp = getUriHashValue("controlProfiler");
+ if (cp.length)
+ $("controlProfiler").checked = (cp == "true");
+}
+
+function init() {
+ updateOptionsFromUrl();
+ if (document.location.hash.indexOf("#auto") == 0) {
+ triggerStart();
+ }
+}
+
+addEventListener("load", init);
+
+</script>
+</head>
+<body style="font-family:sans-serif;">
+<h4>TART - Tab Animation Regression Tests</h4>
+<div id="hide-during-run">
+ Visit <a href="https://wiki.mozilla.org/Performance_sheriffing/Talos/Tests#TART">talos/TART</a> for detailed info.<br/>
+ <ul>
+ <li><b>If you just opened the browser</b> - give Firefox few seconds to settle down before testing.</li>
+ <li><button onclick="setASAP()">Set ASAP mode</button> <button onclick="unsetASAP()">Restore default</button> (requires restart to take effect). TART runs best (and in talos) with vsync disabled - to measure maximum throughput (ASAP mode). This means the preferences layout.frame_rate = 0 and docshell.event_starvation_delay_hint = 1</li>
+ <li>In talos, TART runs with a single tab. If you wish to test a specific animation with several tabs open, you can do so as well by manually opening few tabs before starting the test.</li>
+ </ul>
+
+Utilities:
+ <a href="blank.icon.html">blank with icon</a>&nbsp;&nbsp;&nbsp;
+ <a href="about:config?filter=/newtab|_rate|devP|offmain|docshell.event_starvation_delay_hint|rce-en/">about:config (already filtered with relevant prefs)</a>
+<br/><br/>
+<b>Configure TART</b> (CTRL-F5 to reset to talos defaults) <button type="button" onclick="deselectAll()">Deselect all tests</button><br/>
+<script>
+ for (var test in defaultConfig.subtests) {
+ // eslint-disable-next-line no-unsanitized/method
+ document.write('<input type="checkbox" id="subtest-' + test + '" ' + (defaultConfig.subtests[test] ? "" : "un") + "checked>"
+ + test + "</input>"
+ + '<span style="color:grey">&nbsp;&nbsp;&nbsp;' + testsInfo[test] + "</span>"
+ + "<br/>");
+ }
+ $("subtest-simple3open3closeDpiCurrent").checked = false; // Disabled by default for talos
+</script>
+ <br/>
+ Repeat: <input id="repeat" type="text" size=2 value="1" onchange="updateConfig()"/> times<br/>
+ Delay before starting a measured animation: <input id="rest" type="text" size=4 value="500"/> ms<br/>
+ <input id="controlProfiler" type="checkbox" checked>Pause the profiler during animations which are <b>not</b> measured.</input><br/>
+ <input id="tickle" type="checkbox" checked>Accurate first recorded frame (tickle the Back button before measurements)</iinput><br/>
+
+ <button type="button" id="start-test-button" onclick="triggerStart()">Start Tab Animation tests</button>&nbsp;&nbsp;&nbsp;
+ <div id="run-results"></div>
+</div>
+<div id="show-during-run" style="display:none">Testing in progress ...</div>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/tart/tart.ico b/testing/talos/talos/tests/tart/tart.ico
new file mode 100644
index 0000000000..5575a55913
--- /dev/null
+++ b/testing/talos/talos/tests/tart/tart.ico
Binary files differ
diff --git a/testing/talos/talos/tests/tart/tart.manifest b/testing/talos/talos/tests/tart/tart.manifest
new file mode 100644
index 0000000000..ee318cd07f
--- /dev/null
+++ b/testing/talos/talos/tests/tart/tart.manifest
@@ -0,0 +1 @@
+% http://localhost/tests/tart/tart.html#auto
diff --git a/testing/talos/talos/tests/tp5o.html b/testing/talos/talos/tests/tp5o.html
new file mode 100644
index 0000000000..82ba15b4e9
--- /dev/null
+++ b/testing/talos/talos/tests/tp5o.html
@@ -0,0 +1,51 @@
+<a href="cgi.ebay.com/cgi.ebay.com/ALL-NEW-KINDLE-3-eBOOK-WIRELESS-READING-DEVICE-W-WIFI-/130496077314@pt=LH_DefaultDomain_0&hash=item1e622c1e02.html">link</a><br>
+<a href="163.com/www.163.com/index.html">link</a><br>
+<a href="mail.ru/mail.ru/index.html">link</a><br>
+<a href="bbc.co.uk/www.bbc.co.uk/news/index.html">link</a><br>
+<a href="store.apple.com/store.apple.com/us@mco=Nzc1MjMwNA.html">link</a><br>
+<a href="imdb.com/www.imdb.com/title/tt1099212/index.html">link</a><br>
+<a href="cnn.com/www.cnn.com/index.html">link</a><br>
+<a href="sohu.com/www.sohu.com/index.html">link</a><br>
+<a href="youku.com/www.youku.com/index.html">link</a><br>
+<a href="ifeng.com/ifeng.com/index.html">link</a><br>
+<a href="tudou.com/www.tudou.com/index.html">link</a><br>
+<a href="chemistry.about.com/chemistry.about.com/index.html">link</a><br>
+<a href="beatonna.livejournal.com/beatonna.livejournal.com/index.html">link</a><br>
+<a href="rakuten.co.jp/www.rakuten.co.jp/index.html">link</a><br>
+<a href="uol.com.br/www.uol.com.br/index.html">link</a><br>
+<a href="thepiratebay.org/thepiratebay.org/top/201.html">link</a><br>
+<a href="page.renren.com/page.renren.com/index.html">link</a><br>
+<a href="chinaz.com/chinaz.com/index.html">link</a><br>
+<a href="globo.com/www.globo.com/index.html">link</a><br>
+<a href="spiegel.de/www.spiegel.de/index.html">link</a><br>
+<a href="dailymotion.com/www.dailymotion.com/us.html">link</a><br>
+<a href="goo.ne.jp/goo.ne.jp/index.html">link</a><br>
+<a href="stackoverflow.com/stackoverflow.com/questions/184618/what-is-the-best-comment-in-source-code-you-have-ever-encountered.html">link</a><br>
+<a href="ezinearticles.com/ezinearticles.com/index.html@Migraine-Ocular---The-Eye-Migraines&id=4684133.html">link</a><br>
+<a href="huffingtonpost.com/www.huffingtonpost.com/index.html">link</a><br>
+<a href="media.photobucket.com/media.photobucket.com/image/funny%20gif/findstuff22/Best%20Images/Funny/funny-gif1.jpg@o=1.html">link</a><br>
+<a href="imgur.com/imgur.com/gallery/index.html">link</a><br>
+<a href="reddit.com/www.reddit.com/index.html">link</a><br>
+<a href="noimpactman.typepad.com/noimpactman.typepad.com/index.html">link</a><br>
+<a href="myspace.com/www.myspace.com/albumart.html">link</a><br>
+<a href="mashable.com/mashable.com/index.html">link</a><br>
+<a href="dailymail.co.uk/www.dailymail.co.uk/ushome/index.html">link</a><br>
+<a href="whois.domaintools.com/whois.domaintools.com/mozilla.com.html">link</a><br>
+<a href="indiatimes.com/www.indiatimes.com/index.html">link</a><br>
+<a href="reuters.com/www.reuters.com/index.html">link</a><br>
+<a href="xinhuanet.com/xinhuanet.com/index.html">link</a><br>
+<a href="56.com/www.56.com/index.html">link</a><br>
+<a href="bild.de/www.bild.de/index.html">link</a><br>
+<a href="guardian.co.uk/www.guardian.co.uk/index.html">link</a><br>
+<a href="naver.com/www.naver.com/index.html">link</a><br>
+<a href="yelp.com/www.yelp.com/biz/alexanders-steakhouse-cupertino.html">link</a><br>
+<a href="wsj.com/online.wsj.com/home-page.html">link</a><br>
+<a href="google.com/www.google.com/search@q=mozilla.html">link</a><br>
+<a href="xunlei.com/xunlei.com/index.html">link</a><br>
+<a href="aljazeera.net/aljazeera.net/portal.html">link</a><br>
+<a href="w3.org/www.w3.org/standards/webdesign/htmlcss.html">link</a><br>
+<a href="homeway.com.cn/www.hexun.com/index.html">link</a><br>
+<a href="youtube.com/www.youtube.com/music.html">link</a><br>
+<a href="people.com.cn/people.com.cn/index.html">link</a><br>
+<a href="amazon.com/www.amazon.com/Kindle-Wireless-Reader-Wifi-Graphite/dp/B002Y27P3M/507846.html">link</a><br>
+
diff --git a/testing/talos/talos/tests/tresize/addon/api.js b/testing/talos/talos/tests/tresize/addon/api.js
new file mode 100644
index 0000000000..975eee6c08
--- /dev/null
+++ b/testing/talos/talos/tests/tresize/addon/api.js
@@ -0,0 +1,47 @@
+"use strict";
+
+/* globals ExtensionAPI, Services, XPCOMUtils */
+
+const PREFIX = "tresize@mozilla.org";
+
+this.tresize = class extends ExtensionAPI {
+ onStartup() {
+ let { baseURI } = this.extension;
+
+ this.listener = function listener({ target, data }) {
+ let win = target.ownerGlobal;
+ Services.scriptloader.loadSubScript(
+ baseURI.resolve("/content/Profiler.js"),
+ win
+ );
+ Services.scriptloader.loadSubScript(
+ baseURI.resolve("/content/tresize.js"),
+ win
+ );
+
+ function sendResult(result) {
+ target.messageManager.sendAsyncMessage(`${PREFIX}:chrome-run-reply`, {
+ id: data.id,
+ result,
+ });
+ }
+ win.runTest(sendResult, data.locationSearch);
+ };
+
+ Services.mm.addMessageListener(
+ `${PREFIX}:chrome-run-message`,
+ this.listener
+ );
+
+ this.framescriptURL = baseURI.resolve("/content/framescript.js");
+ Services.mm.loadFrameScript(this.framescriptURL, true);
+ }
+
+ onShutdown() {
+ Services.mm.removeDelayedFrameScript(this.framescriptURL);
+ Services.mm.removeMessageListener(
+ `${PREFIX}:chrome-run-message`,
+ this.listener
+ );
+ }
+};
diff --git a/testing/talos/talos/tests/tresize/addon/chrome/tresize-test.html b/testing/talos/talos/tests/tresize/addon/chrome/tresize-test.html
new file mode 100644
index 0000000000..b50a4a8821
--- /dev/null
+++ b/testing/talos/talos/tests/tresize/addon/chrome/tresize-test.html
@@ -0,0 +1,24 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ - You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<html>
+<head>
+<script language="javascript" type="text/javascript">
+
+function runTest() {
+ dispatchEvent(
+ new CustomEvent("tresize@mozilla.org:chrome-run-event",
+ { bubbles: true,
+ detail: { locationSearch: location.search } })
+ );
+}
+
+</script>
+</head>
+<body id="body" onload="runTest();">
+<div style="text-align:center; margin-left:auto; margin-right:auto; background-color:Silver; width:100px; height:100%;">RESIZE</div>
+<iframe src="http://fakedomain1.talos/tests/tresize/tresize-iframe.html" style="position: absolute; top: 0px; width: 25%; height: 25%;"></iframe>
+<iframe src="http://fakedomain2.talos/tests/tresize/tresize-iframe.html" style="position: absolute; top: 0px; right: 0px; width: 25%; height: 25%;"></iframe>
+
+</body>
+</html>
diff --git a/testing/talos/talos/tests/tresize/addon/content/Profiler.js b/testing/talos/talos/tests/tresize/addon/content/Profiler.js
new file mode 100644
index 0000000000..7724b51ae2
--- /dev/null
+++ b/testing/talos/talos/tests/tresize/addon/content/Profiler.js
@@ -0,0 +1,173 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// - NOTE: This file is duplicated verbatim at:
+// - talos/pageloader/chrome/Profiler.js
+// - talos/tests/tart/addon/content/Profiler.js
+// - talos/startup_test/tresize/addon/content/Profiler.js
+//
+// - Please keep these copies in sync.
+// - Please make sure your changes apply cleanly to all use cases.
+
+// Finer grained profiler control
+//
+// Use this object to pause and resume the profiler so that it only profiles the
+// relevant parts of our tests.
+var Profiler;
+
+(function () {
+ var _profiler;
+
+ // If this script is loaded in a framescript context, there won't be a
+ // document object, so just use a fallback value in that case.
+ var test_name = this.document ? this.document.location.pathname : "unknown";
+
+ // Whether Profiler has been initialized. Until that happens, most calls
+ // will be ignored.
+ var enabled = false;
+
+ // The subtest name that beginTest() was called with.
+ var currentTest = "";
+
+ // Start time of the current subtest. It will be used to create a duration
+ // marker at the end of the subtest.
+ var profilerSubtestStartTime;
+
+ // Profiling settings.
+ var profiler_interval,
+ profiler_entries,
+ profiler_featuresArray,
+ profiler_threadsArray,
+ profiler_dir;
+
+ try {
+ // eslint-disable-next-line mozilla/use-services
+ _profiler = Cc["@mozilla.org/tools/profiler;1"].getService(Ci.nsIProfiler);
+ } catch (ex) {
+ (typeof dumpLog == "undefined" ? dump : dumpLog)(ex + "\n");
+ }
+
+ // Parses an url query string into a JS object.
+ function searchToObject(locationSearch) {
+ var pairs = locationSearch.substring(1).split("&");
+ var result = {};
+
+ for (var i in pairs) {
+ if (pairs[i] !== "") {
+ var pair = pairs[i].split("=");
+ result[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1] || "");
+ }
+ }
+
+ return result;
+ }
+
+ Profiler = {
+ /**
+ * Initialize the profiler using profiler settings supplied in a JS object.
+ * The following properties on the object are respected:
+ * - gecko_profile_interval
+ * - gecko_profile_entries
+ * - gecko_profile_features
+ * - gecko_profile_threads
+ * - gecko_profile_dir
+ */
+ initFromObject: function Profiler__initFromObject(obj) {
+ if (
+ obj &&
+ "gecko_profile_dir" in obj &&
+ typeof obj.gecko_profile_dir == "string" &&
+ "gecko_profile_interval" in obj &&
+ Number.isFinite(obj.gecko_profile_interval * 1) &&
+ "gecko_profile_entries" in obj &&
+ Number.isFinite(obj.gecko_profile_entries * 1) &&
+ "gecko_profile_features" in obj &&
+ typeof obj.gecko_profile_features == "string" &&
+ "gecko_profile_threads" in obj &&
+ typeof obj.gecko_profile_threads == "string"
+ ) {
+ profiler_interval = obj.gecko_profile_interval;
+ profiler_entries = obj.gecko_profile_entries;
+ profiler_featuresArray = obj.gecko_profile_features.split(",");
+ profiler_threadsArray = obj.gecko_profile_threads.split(",");
+ profiler_dir = obj.gecko_profile_dir;
+ enabled = true;
+ }
+ },
+ initFromURLQueryParams: function Profiler__initFromURLQueryParams(
+ locationSearch
+ ) {
+ this.initFromObject(searchToObject(locationSearch));
+ },
+ beginTest: function Profiler__beginTest(testName) {
+ currentTest = testName;
+ if (_profiler && enabled) {
+ _profiler.StartProfiler(
+ profiler_entries,
+ profiler_interval,
+ profiler_featuresArray,
+ profiler_threadsArray
+ );
+ }
+ },
+ finishTest: function Profiler__finishTest() {
+ if (_profiler && enabled) {
+ _profiler.dumpProfileToFile(
+ profiler_dir + "/" + currentTest + ".profile"
+ );
+ _profiler.StopProfiler();
+ }
+ },
+ finishStartupProfiling: function Profiler__finishStartupProfiling() {
+ if (_profiler && enabled) {
+ _profiler.Pause();
+ _profiler.dumpProfileToFile(profiler_dir + "/startup.profile");
+ _profiler.StopProfiler();
+ }
+ },
+
+ /**
+ * Set a marker indicating the start of the subtest.
+ *
+ * It will also set the `profilerSubtestStartTime` to be used later by
+ * `subtestEnd`.
+ */
+ subtestStart: function Profiler__subtestStart(name, explicit) {
+ profilerSubtestStartTime = performance.now();
+ if (_profiler) {
+ ChromeUtils.addProfilerMarker(
+ "Talos",
+ { category: "Test" },
+ explicit ? name : 'Start of test "' + (name || test_name) + '"'
+ );
+ }
+ },
+
+ /**
+ * Set a marker indicating the duration of the subtest.
+ *
+ * This will take the `profilerSubtestStartTime` that was set by
+ * `subtestStart` and will create a duration marker by setting the `endTime`
+ * to the current time.
+ */
+ subtestEnd: function Profiler__subtestEnd(name, explicit) {
+ if (_profiler) {
+ ChromeUtils.addProfilerMarker(
+ "Talos",
+ { startTime: profilerSubtestStartTime, category: "Test" },
+ explicit ? name : 'Test "' + (name || test_name) + '"'
+ );
+ }
+ },
+ mark: function Profiler__mark(marker, explicit) {
+ if (_profiler) {
+ ChromeUtils.addProfilerMarker(
+ "Talos",
+ { category: "Test" },
+ explicit ? marker : 'Profiler: "' + (marker || test_name) + '"'
+ );
+ }
+ },
+ };
+})();
diff --git a/testing/talos/talos/tests/tresize/addon/content/framescript.js b/testing/talos/talos/tests/tresize/addon/content/framescript.js
new file mode 100644
index 0000000000..d239f5df73
--- /dev/null
+++ b/testing/talos/talos/tests/tresize/addon/content/framescript.js
@@ -0,0 +1,33 @@
+/* eslint-env mozilla/frame-script */
+
+(function () {
+ const TRESIZE_PREFIX = "tresize@mozilla.org:";
+
+ addEventListener(
+ TRESIZE_PREFIX + "chrome-run-event",
+ function (e) {
+ var uniqueMessageId =
+ TRESIZE_PREFIX +
+ content.document.documentURI +
+ content.window.performance.now() +
+ Math.random();
+
+ addMessageListener(
+ TRESIZE_PREFIX + "chrome-run-reply",
+ function done(reply) {
+ if (reply.data.id == uniqueMessageId) {
+ removeMessageListener(TRESIZE_PREFIX + "chrome-run-reply", done);
+ content.wrappedJSObject.tpRecordTime(reply.data.result.average);
+ }
+ }
+ );
+
+ sendAsyncMessage(TRESIZE_PREFIX + "chrome-run-message", {
+ id: uniqueMessageId,
+ locationSearch: e.detail.locationSearch,
+ });
+ },
+ false,
+ true
+ );
+})();
diff --git a/testing/talos/talos/tests/tresize/addon/content/tresize.js b/testing/talos/talos/tests/tresize/addon/content/tresize.js
new file mode 100644
index 0000000000..7859204ba9
--- /dev/null
+++ b/testing/talos/talos/tests/tresize/addon/content/tresize.js
@@ -0,0 +1,67 @@
+/*
+ * tresize-test - A purer form of paint measurement than tpaint. This
+ * test opens a single window positioned at 10,10 and sized to 425,425,
+ * then resizes the window outward |max| times measuring the amount of
+ * time it takes to repaint each resize. Calls the provided callback
+ * with an array of resize times in milliseconds.
+ */
+
+async function runTest(callback, locationSearch) {
+ const INCREMENT = 3;
+ const MAX = 200;
+
+ // Measure the time it take for the provided action to trigger a
+ // MozAfterPaint event. This function ensures that the event being
+ // measured is really a result of the given action.
+ function measurePaintTime(action, marker) {
+ return new Promise(resolve => {
+ let startTime;
+ let lastTransaction = window.windowUtils.lastTransactionId;
+ function painted(event) {
+ if (event.transactionId <= lastTransaction) {
+ return;
+ }
+
+ if (marker) {
+ Profiler.subtestEnd(marker);
+ }
+ window.removeEventListener("MozAfterPaint", painted, true);
+ let time = event.paintTimeStamp - startTime;
+ resolve(time);
+ }
+ window.addEventListener("MozAfterPaint", painted, true);
+ if (marker) {
+ Profiler.subtestStart(marker);
+ }
+ startTime = window.performance.now();
+ action();
+ });
+ }
+
+ // Position the intial window and set up profiling...
+ let windowSize = 425;
+ await measurePaintTime(() => {
+ window.moveTo(10, 10);
+ window.resizeTo(windowSize, windowSize);
+ });
+
+ Profiler.initFromURLQueryParams(locationSearch);
+ Profiler.beginTest("tresize");
+
+ let times = [];
+ for (let i = 0; i < MAX; i++) {
+ const marker = `resize ${i}`;
+ windowSize += INCREMENT;
+
+ let time = await measurePaintTime(() => {
+ window.resizeTo(windowSize, windowSize);
+ }, marker);
+ times.push(time);
+
+ await new Promise(resolve => setTimeout(resolve, 20));
+ }
+
+ let total = times.reduce((a, b) => a + b);
+ let average = total / times.length;
+ callback({ average });
+}
diff --git a/testing/talos/talos/tests/tresize/addon/manifest.json b/testing/talos/talos/tests/tresize/addon/manifest.json
new file mode 100644
index 0000000000..03940873ad
--- /dev/null
+++ b/testing/talos/talos/tests/tresize/addon/manifest.json
@@ -0,0 +1,23 @@
+{
+ "manifest_version": 2,
+ "name": "TResize - Firefox Window Resize Test",
+ "description": "https://wiki.mozilla.org/Buildbot/Talos/Tests",
+ "version": "1.1",
+
+ "browser_specific_settings": {
+ "gecko": {
+ "id": "tresize@mozilla.org"
+ }
+ },
+
+ "experiment_apis": {
+ "tresize": {
+ "schema": "schema.json",
+ "parent": {
+ "scopes": ["addon_parent"],
+ "script": "api.js",
+ "events": ["startup"]
+ }
+ }
+ }
+}
diff --git a/testing/talos/talos/tests/tresize/addon/schema.json b/testing/talos/talos/tests/tresize/addon/schema.json
new file mode 100644
index 0000000000..fe51488c70
--- /dev/null
+++ b/testing/talos/talos/tests/tresize/addon/schema.json
@@ -0,0 +1 @@
+[]
diff --git a/testing/talos/talos/tests/tresize/tresize-iframe.html b/testing/talos/talos/tests/tresize/tresize-iframe.html
new file mode 100644
index 0000000000..8aa813e58a
--- /dev/null
+++ b/testing/talos/talos/tests/tresize/tresize-iframe.html
@@ -0,0 +1,11 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ - You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<html>
+<head>
+</head>
+<body id="body">
+<div style="text-align:center; margin-left:auto; margin-right:auto; background-color:green; width:50px; height:100%;">IFRAME</div>
+
+</body>
+</html>
diff --git a/testing/talos/talos/tests/tresize/tresize.manifest b/testing/talos/talos/tests/tresize/tresize.manifest
new file mode 100644
index 0000000000..c518276abb
--- /dev/null
+++ b/testing/talos/talos/tests/tresize/tresize.manifest
@@ -0,0 +1 @@
+% http://fakedomain/tests/tresize/addon/chrome/tresize-test.html
diff --git a/testing/talos/talos/tests/twinopen/api.js b/testing/talos/talos/tests/twinopen/api.js
new file mode 100644
index 0000000000..c93755242a
--- /dev/null
+++ b/testing/talos/talos/tests/twinopen/api.js
@@ -0,0 +1,71 @@
+"use strict";
+
+/* globals AppConstants, Services */
+
+ChromeUtils.defineESModuleGetters(this, {
+ TalosParentProfiler: "resource://talos-powers/TalosParentProfiler.sys.mjs",
+});
+
+var OPENER_DELAY = 1000; // ms delay between tests
+
+async function openDelay(win) {
+ return new Promise(resolve => {
+ win.setTimeout(resolve, OPENER_DELAY);
+ });
+}
+
+function waitForBrowserPaint() {
+ return new Promise(resolve => {
+ let observer = {
+ observe(doc) {
+ if (
+ !doc.location ||
+ doc.location.href != AppConstants.BROWSER_CHROME_URL
+ ) {
+ return;
+ }
+ Services.obs.removeObserver(observer, "document-element-inserted");
+ doc.ownerGlobal.addEventListener(
+ "MozAfterPaint",
+ evt => {
+ resolve(
+ doc.ownerGlobal.performance.timing.fetchStart + evt.paintTimeStamp
+ );
+ },
+ { once: true }
+ );
+ },
+ };
+ Services.obs.addObserver(observer, "document-element-inserted");
+ });
+}
+
+async function startTest(context) {
+ TalosParentProfiler.subtestStart("twinopen");
+ Cu.forceGC();
+ Cu.forceCC();
+ Cu.forceShrinkingGC();
+ let win = context.appWindow;
+ await openDelay(win);
+ let mozAfterPaint = waitForBrowserPaint();
+
+ // We have to compare time measurements across two windows so we must use
+ // the absolute time.
+ let start = win.performance.timing.fetchStart + win.performance.now();
+ let newWin = win.OpenBrowserWindow();
+ let end = await mozAfterPaint;
+ TalosParentProfiler.subtestEnd("twinopen");
+ newWin.close();
+ return end - start;
+}
+
+/* globals ExtensionAPI */
+this.twinopen = class extends ExtensionAPI {
+ getAPI(context) {
+ return {
+ twinopen: {
+ startTest: () => startTest(context),
+ },
+ };
+ }
+};
diff --git a/testing/talos/talos/tests/twinopen/driver.js b/testing/talos/talos/tests/twinopen/driver.js
new file mode 100644
index 0000000000..4d94456b01
--- /dev/null
+++ b/testing/talos/talos/tests/twinopen/driver.js
@@ -0,0 +1,6 @@
+/* eslint-env webextensions */
+addEventListener("load", () => {
+ browser.twinopen.startTest().then(result => {
+ window.tpRecordTime(result);
+ });
+});
diff --git a/testing/talos/talos/tests/twinopen/manifest.json b/testing/talos/talos/tests/twinopen/manifest.json
new file mode 100644
index 0000000000..dbdeee33d4
--- /dev/null
+++ b/testing/talos/talos/tests/twinopen/manifest.json
@@ -0,0 +1,30 @@
+{
+ "manifest_version": 2,
+ "name": "twinopen",
+ "version": "0.1",
+
+ "browser_specific_settings": {
+ "gecko": {
+ "id": "bug1388159@mozilla.org"
+ }
+ },
+
+ "protocol_handlers": [
+ {
+ "protocol": "ext+twinopen",
+ "name": "twinopen protocol",
+ "uriTemplate": "/twinopen.html"
+ }
+ ],
+
+ "experiment_apis": {
+ "twinopen": {
+ "schema": "schema.json",
+ "parent": {
+ "scopes": ["addon_parent"],
+ "script": "api.js",
+ "paths": [["twinopen"]]
+ }
+ }
+ }
+}
diff --git a/testing/talos/talos/tests/twinopen/schema.json b/testing/talos/talos/tests/twinopen/schema.json
new file mode 100644
index 0000000000..bcc6ac8f38
--- /dev/null
+++ b/testing/talos/talos/tests/twinopen/schema.json
@@ -0,0 +1,13 @@
+[
+ {
+ "namespace": "twinopen",
+ "functions": [
+ {
+ "name": "startTest",
+ "type": "function",
+ "async": true,
+ "parameters": []
+ }
+ ]
+ }
+]
diff --git a/testing/talos/talos/tests/twinopen/twinopen.html b/testing/talos/talos/tests/twinopen/twinopen.html
new file mode 100644
index 0000000000..a1005d5b2d
--- /dev/null
+++ b/testing/talos/talos/tests/twinopen/twinopen.html
@@ -0,0 +1,12 @@
+<html>
+<head>
+<meta charset="UTF-8"/>
+<title>twinopen</title>
+
+<script src="driver.js"></script>
+</head>
+
+<body>
+ <h4>twinopen</h4>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/twinopen/twinopen.manifest b/testing/talos/talos/tests/twinopen/twinopen.manifest
new file mode 100644
index 0000000000..6074f9b7e3
--- /dev/null
+++ b/testing/talos/talos/tests/twinopen/twinopen.manifest
@@ -0,0 +1 @@
+% ext+twinopen:twinopen.html
diff --git a/testing/talos/talos/tests/twinopen/twinopen.manifest.develop b/testing/talos/talos/tests/twinopen/twinopen.manifest.develop
new file mode 100644
index 0000000000..6074f9b7e3
--- /dev/null
+++ b/testing/talos/talos/tests/twinopen/twinopen.manifest.develop
@@ -0,0 +1 @@
+% ext+twinopen:twinopen.html
diff --git a/testing/talos/talos/tests/v8_7/base.js b/testing/talos/talos/tests/v8_7/base.js
new file mode 100644
index 0000000000..609097394d
--- /dev/null
+++ b/testing/talos/talos/tests/v8_7/base.js
@@ -0,0 +1,298 @@
+// Copyright 2012 the V8 project authors. All rights reserved.
+// 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 Google Inc. 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 THE COPYRIGHT
+// OWNER OR CONTRIBUTORS 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.
+
+
+// Simple framework for running the benchmark suites and
+// computing a score based on the timing measurements.
+
+
+// A benchmark has a name (string) and a function that will be run to
+// do the performance measurement. The optional setup and tearDown
+// arguments are functions that will be invoked before and after
+// running the benchmark, but the running time of these functions will
+// not be accounted for in the benchmark score.
+function Benchmark(name, run, setup, tearDown) {
+ this.name = name;
+ this.run = run;
+ this.Setup = setup ? setup : function() { };
+ this.TearDown = tearDown ? tearDown : function() { };
+}
+
+
+// Benchmark results hold the benchmark and the measured time used to
+// run the benchmark. The benchmark score is computed later once a
+// full benchmark suite has run to completion.
+function BenchmarkResult(benchmark, time) {
+ this.benchmark = benchmark;
+ this.time = time;
+}
+
+
+// Automatically convert results to numbers. Used by the geometric
+// mean computation.
+BenchmarkResult.prototype.valueOf = function() {
+ return this.time;
+}
+
+
+// Suites of benchmarks consist of a name and the set of benchmarks in
+// addition to the reference timing that the final score will be based
+// on. This way, all scores are relative to a reference run and higher
+// scores implies better performance.
+function BenchmarkSuite(name, reference, benchmarks) {
+ this.name = name;
+ this.reference = reference;
+ this.benchmarks = benchmarks;
+ BenchmarkSuite.suites.push(this);
+}
+
+
+// Keep track of all declared benchmark suites.
+BenchmarkSuite.suites = [];
+
+
+// Scores are not comparable across versions. Bump the version if
+// you're making changes that will affect that scores, e.g. if you add
+// a new benchmark or change an existing one.
+BenchmarkSuite.version = '7';
+
+
+// To make the benchmark results predictable, we replace Math.random
+// with a 100% deterministic alternative.
+Math.random = (function() {
+ var seed = 49734321;
+ return function() {
+ // Robert Jenkins' 32 bit integer hash function.
+ seed = ((seed + 0x7ed55d16) + (seed << 12)) & 0xffffffff;
+ seed = ((seed ^ 0xc761c23c) ^ (seed >>> 19)) & 0xffffffff;
+ seed = ((seed + 0x165667b1) + (seed << 5)) & 0xffffffff;
+ seed = ((seed + 0xd3a2646c) ^ (seed << 9)) & 0xffffffff;
+ seed = ((seed + 0xfd7046c5) + (seed << 3)) & 0xffffffff;
+ seed = ((seed ^ 0xb55a4f09) ^ (seed >>> 16)) & 0xffffffff;
+ return (seed & 0xfffffff) / 0x10000000;
+ };
+})();
+
+
+// Runs all registered benchmark suites and optionally yields between
+// each individual benchmark to avoid running for too long in the
+// context of browsers. Once done, the final score is reported to the
+// runner.
+BenchmarkSuite.RunSuites = function(runner) {
+ var continuation = null;
+ var suites = BenchmarkSuite.suites;
+ var length = suites.length;
+ BenchmarkSuite.scores = [];
+ BenchmarkSuite.raw_results = [];
+ BenchmarkSuite.names = [];
+ BenchmarkSuite.reference = 0;
+ var index = 0;
+ function RunStep() {
+ while (continuation || index < length) {
+ if (continuation) {
+ continuation = continuation();
+ } else {
+ var suite = suites[index++];
+ if (runner.NotifyStart) runner.NotifyStart(suite.name);
+ continuation = suite.RunStep(runner);
+ }
+ if (continuation && typeof window != 'undefined' && window.setTimeout) {
+ window.setTimeout(RunStep, 25);
+ return;
+ }
+ }
+ if (runner.NotifyScore) {
+ if ( typeof tpRecordTime !== "undefined" ) {
+ tpRecordTime(BenchmarkSuite.raw_results.join(','), null, BenchmarkSuite.names.join(','));
+ } else {
+ //NOTE: BenchmarkSuite.scores is an array of [reference/GeometricMean(test.results), ...]
+ var score = BenchmarkSuite.GeometricMean(BenchmarkSuite.scores);
+ var formatted = BenchmarkSuite.FormatScore(100 * score);
+ runner.NotifyScore(formatted);
+ }
+ }
+ }
+ RunStep();
+}
+
+
+// Counts the total number of registered benchmarks. Useful for
+// showing progress as a percentage.
+BenchmarkSuite.CountBenchmarks = function() {
+ var result = 0;
+ var suites = BenchmarkSuite.suites;
+ for (var i = 0; i < suites.length; i++) {
+ result += suites[i].benchmarks.length;
+ }
+ return result;
+}
+
+// Computes the geometric mean of a set of numbers.
+BenchmarkSuite.GeometricMean = function(numbers) {
+ var log = 0;
+ for (var i = 0; i < numbers.length; i++) {
+ log += Math.log(numbers[i]);
+ }
+ return Math.pow(Math.E, log / numbers.length);
+}
+
+
+// Converts a score value to a string with at least three significant
+// digits.
+BenchmarkSuite.FormatScore = function(value) {
+ if (value > 100) {
+ return value.toFixed(0);
+ } else {
+ return value.toPrecision(3);
+ }
+}
+
+// Notifies the runner that we're done running a single benchmark in
+// the benchmark suite. This can be useful to report progress.
+BenchmarkSuite.prototype.NotifyStep = function(result) {
+ this.results.push(result);
+ if (this.runner.NotifyStep) this.runner.NotifyStep(result.benchmark.name);
+}
+
+
+// Notifies the runner that we're done with running a suite and that
+// we have a result which can be reported to the user if needed.
+BenchmarkSuite.prototype.NotifyResult = function() {
+ for (var i=0; i<this.results.length; i++) {
+ BenchmarkSuite.raw_results.push(this.results[i].time);
+ BenchmarkSuite.names.push(this.results[i].benchmark.name)
+ BenchmarkSuite.reference = this.reference;
+ }
+ var mean = BenchmarkSuite.GeometricMean(this.results);
+ var score = this.reference / mean;
+ BenchmarkSuite.scores.push(score);
+ if (this.runner.NotifyResult) {
+ var formatted = BenchmarkSuite.FormatScore(100 * score);
+ this.runner.NotifyResult(this.name, formatted);
+ }
+}
+
+
+// Notifies the runner that running a benchmark resulted in an error.
+BenchmarkSuite.prototype.NotifyError = function(error) {
+ if (this.runner.NotifyError) {
+ this.runner.NotifyError(this.name, error);
+ }
+ if (this.runner.NotifyStep) {
+ this.runner.NotifyStep(this.name);
+ }
+}
+
+
+// Runs a single benchmark for at least a second and computes the
+// average time it takes to run a single iteration.
+BenchmarkSuite.prototype.RunSingleBenchmark = function(benchmark, data) {
+ function Measure(data) {
+ var elapsed = 0;
+ Profiler.subtestStart(benchmark.name);
+ var start = new Date();
+ for (var n = 0; elapsed < 1000; n++) {
+ benchmark.run();
+ elapsed = new Date() - start;
+ }
+ Profiler.subtestEnd(benchmark.name);
+ if (data != null) {
+ data.runs += n;
+ data.elapsed += elapsed;
+ }
+ }
+
+ if (data == null) {
+ // Measure the benchmark once for warm up and throw the result
+ // away. Return a fresh data object.
+ Measure(null);
+ return { runs: 0, elapsed: 0 };
+ } else {
+ Measure(data);
+ // If we've run too few iterations, we continue for another second.
+ if (data.runs < 32) return data;
+ var usec = (data.elapsed * 1000) / data.runs;
+ this.NotifyStep(new BenchmarkResult(benchmark, usec));
+ return null;
+ }
+}
+
+
+// This function starts running a suite, but stops between each
+// individual benchmark in the suite and returns a continuation
+// function which can be invoked to run the next benchmark. Once the
+// last benchmark has been executed, null is returned.
+BenchmarkSuite.prototype.RunStep = function(runner) {
+ this.results = [];
+ this.runner = runner;
+ var length = this.benchmarks.length;
+ var index = 0;
+ var suite = this;
+ var data;
+
+ // Run the setup, the actual benchmark, and the tear down in three
+ // separate steps to allow the framework to yield between any of the
+ // steps.
+
+ function RunNextSetup() {
+ if (index < length) {
+ try {
+ suite.benchmarks[index].Setup();
+ } catch (e) {
+ suite.NotifyError(e);
+ return null;
+ }
+ return RunNextBenchmark;
+ }
+ suite.NotifyResult();
+ return null;
+ }
+
+ function RunNextBenchmark() {
+ try {
+ data = suite.RunSingleBenchmark(suite.benchmarks[index], data);
+ } catch (e) {
+ suite.NotifyError(e);
+ return null;
+ }
+ // If data is null, we're done with this benchmark.
+ return (data == null) ? RunNextTearDown : RunNextBenchmark();
+ }
+
+ function RunNextTearDown() {
+ try {
+ suite.benchmarks[index++].TearDown();
+ } catch (e) {
+ suite.NotifyError(e);
+ return null;
+ }
+ return RunNextSetup;
+ }
+
+ // Start out running the setup.
+ return RunNextSetup();
+}
diff --git a/testing/talos/talos/tests/v8_7/crypto.js b/testing/talos/talos/tests/v8_7/crypto.js
new file mode 100644
index 0000000000..531ad456e0
--- /dev/null
+++ b/testing/talos/talos/tests/v8_7/crypto.js
@@ -0,0 +1,1698 @@
+/*
+ * Copyright (c) 2003-2005 Tom Wu
+ * All Rights Reserved.
+ *
+ * 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" AND WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
+ * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
+ * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER
+ * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF
+ * THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT
+ * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * In addition, the following condition applies:
+ *
+ * All redistributions must retain an intact copy of this copyright notice
+ * and disclaimer.
+ */
+
+
+// The code has been adapted for use as a benchmark by Google.
+var Crypto = new BenchmarkSuite('Crypto', 266181, [
+ new Benchmark("Encrypt", encrypt),
+ new Benchmark("Decrypt", decrypt)
+]);
+
+
+// Basic JavaScript BN library - subset useful for RSA encryption.
+
+// Bits per digit
+var dbits;
+var BI_DB;
+var BI_DM;
+var BI_DV;
+
+var BI_FP;
+var BI_FV;
+var BI_F1;
+var BI_F2;
+
+// JavaScript engine analysis
+var canary = 0xdeadbeefcafe;
+var j_lm = ((canary&0xffffff)==0xefcafe);
+
+// (public) Constructor
+function BigInteger(a,b,c) {
+ this.array = new Array();
+ if(a != null)
+ if("number" == typeof a) this.fromNumber(a,b,c);
+ else if(b == null && "string" != typeof a) this.fromString(a,256);
+ else this.fromString(a,b);
+}
+
+// return new, unset BigInteger
+function nbi() { return new BigInteger(null); }
+
+// am: Compute w_j += (x*this_i), propagate carries,
+// c is initial carry, returns final carry.
+// c < 3*dvalue, x < 2*dvalue, this_i < dvalue
+// We need to select the fastest one that works in this environment.
+
+// am1: use a single mult and divide to get the high bits,
+// max digit bits should be 26 because
+// max internal value = 2*dvalue^2-2*dvalue (< 2^53)
+function am1(i,x,w,j,c,n) {
+ var this_array = this.array;
+ var w_array = w.array;
+ while(--n >= 0) {
+ var v = x*this_array[i++]+w_array[j]+c;
+ c = Math.floor(v/0x4000000);
+ w_array[j++] = v&0x3ffffff;
+ }
+ return c;
+}
+
+// am2 avoids a big mult-and-extract completely.
+// Max digit bits should be <= 30 because we do bitwise ops
+// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
+function am2(i,x,w,j,c,n) {
+ var this_array = this.array;
+ var w_array = w.array;
+ var xl = x&0x7fff, xh = x>>15;
+ while(--n >= 0) {
+ var l = this_array[i]&0x7fff;
+ var h = this_array[i++]>>15;
+ var m = xh*l+h*xl;
+ l = xl*l+((m&0x7fff)<<15)+w_array[j]+(c&0x3fffffff);
+ c = (l>>>30)+(m>>>15)+xh*h+(c>>>30);
+ w_array[j++] = l&0x3fffffff;
+ }
+ return c;
+}
+
+// Alternately, set max digit bits to 28 since some
+// browsers slow down when dealing with 32-bit numbers.
+function am3(i,x,w,j,c,n) {
+ var this_array = this.array;
+ var w_array = w.array;
+
+ var xl = x&0x3fff, xh = x>>14;
+ while(--n >= 0) {
+ var l = this_array[i]&0x3fff;
+ var h = this_array[i++]>>14;
+ var m = xh*l+h*xl;
+ l = xl*l+((m&0x3fff)<<14)+w_array[j]+c;
+ c = (l>>28)+(m>>14)+xh*h;
+ w_array[j++] = l&0xfffffff;
+ }
+ return c;
+}
+
+// This is tailored to VMs with 2-bit tagging. It makes sure
+// that all the computations stay within the 29 bits available.
+function am4(i,x,w,j,c,n) {
+ var this_array = this.array;
+ var w_array = w.array;
+
+ var xl = x&0x1fff, xh = x>>13;
+ while(--n >= 0) {
+ var l = this_array[i]&0x1fff;
+ var h = this_array[i++]>>13;
+ var m = xh*l+h*xl;
+ l = xl*l+((m&0x1fff)<<13)+w_array[j]+c;
+ c = (l>>26)+(m>>13)+xh*h;
+ w_array[j++] = l&0x3ffffff;
+ }
+ return c;
+}
+
+// am3/28 is best for SM, Rhino, but am4/26 is best for v8.
+// Kestrel (Opera 9.5) gets its best result with am4/26.
+// IE7 does 9% better with am3/28 than with am4/26.
+// Firefox (SM) gets 10% faster with am3/28 than with am4/26.
+
+setupEngine = function(fn, bits) {
+ BigInteger.prototype.am = fn;
+ dbits = bits;
+
+ BI_DB = dbits;
+ BI_DM = ((1<<dbits)-1);
+ BI_DV = (1<<dbits);
+
+ BI_FP = 52;
+ BI_FV = Math.pow(2,BI_FP);
+ BI_F1 = BI_FP-dbits;
+ BI_F2 = 2*dbits-BI_FP;
+}
+
+
+// Digit conversions
+var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz";
+var BI_RC = new Array();
+var rr,vv;
+rr = "0".charCodeAt(0);
+for(vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv;
+rr = "a".charCodeAt(0);
+for(vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv;
+rr = "A".charCodeAt(0);
+for(vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv;
+
+function int2char(n) { return BI_RM.charAt(n); }
+function intAt(s,i) {
+ var c = BI_RC[s.charCodeAt(i)];
+ return (c==null)?-1:c;
+}
+
+// (protected) copy this to r
+function bnpCopyTo(r) {
+ var this_array = this.array;
+ var r_array = r.array;
+
+ for(var i = this.t-1; i >= 0; --i) r_array[i] = this_array[i];
+ r.t = this.t;
+ r.s = this.s;
+}
+
+// (protected) set from integer value x, -DV <= x < DV
+function bnpFromInt(x) {
+ var this_array = this.array;
+ this.t = 1;
+ this.s = (x<0)?-1:0;
+ if(x > 0) this_array[0] = x;
+ else if(x < -1) this_array[0] = x+DV;
+ else this.t = 0;
+}
+
+// return bigint initialized to value
+function nbv(i) { var r = nbi(); r.fromInt(i); return r; }
+
+// (protected) set from string and radix
+function bnpFromString(s,b) {
+ var this_array = this.array;
+ var k;
+ if(b == 16) k = 4;
+ else if(b == 8) k = 3;
+ else if(b == 256) k = 8; // byte array
+ else if(b == 2) k = 1;
+ else if(b == 32) k = 5;
+ else if(b == 4) k = 2;
+ else { this.fromRadix(s,b); return; }
+ this.t = 0;
+ this.s = 0;
+ var i = s.length, mi = false, sh = 0;
+ while(--i >= 0) {
+ var x = (k==8)?s[i]&0xff:intAt(s,i);
+ if(x < 0) {
+ if(s.charAt(i) == "-") mi = true;
+ continue;
+ }
+ mi = false;
+ if(sh == 0)
+ this_array[this.t++] = x;
+ else if(sh+k > BI_DB) {
+ this_array[this.t-1] |= (x&((1<<(BI_DB-sh))-1))<<sh;
+ this_array[this.t++] = (x>>(BI_DB-sh));
+ }
+ else
+ this_array[this.t-1] |= x<<sh;
+ sh += k;
+ if(sh >= BI_DB) sh -= BI_DB;
+ }
+ if(k == 8 && (s[0]&0x80) != 0) {
+ this.s = -1;
+ if(sh > 0) this_array[this.t-1] |= ((1<<(BI_DB-sh))-1)<<sh;
+ }
+ this.clamp();
+ if(mi) BigInteger.ZERO.subTo(this,this);
+}
+
+// (protected) clamp off excess high words
+function bnpClamp() {
+ var this_array = this.array;
+ var c = this.s&BI_DM;
+ while(this.t > 0 && this_array[this.t-1] == c) --this.t;
+}
+
+// (public) return string representation in given radix
+function bnToString(b) {
+ var this_array = this.array;
+ if(this.s < 0) return "-"+this.negate().toString(b);
+ var k;
+ if(b == 16) k = 4;
+ else if(b == 8) k = 3;
+ else if(b == 2) k = 1;
+ else if(b == 32) k = 5;
+ else if(b == 4) k = 2;
+ else return this.toRadix(b);
+ var km = (1<<k)-1, d, m = false, r = "", i = this.t;
+ var p = BI_DB-(i*BI_DB)%k;
+ if(i-- > 0) {
+ if(p < BI_DB && (d = this_array[i]>>p) > 0) { m = true; r = int2char(d); }
+ while(i >= 0) {
+ if(p < k) {
+ d = (this_array[i]&((1<<p)-1))<<(k-p);
+ d |= this_array[--i]>>(p+=BI_DB-k);
+ }
+ else {
+ d = (this_array[i]>>(p-=k))&km;
+ if(p <= 0) { p += BI_DB; --i; }
+ }
+ if(d > 0) m = true;
+ if(m) r += int2char(d);
+ }
+ }
+ return m?r:"0";
+}
+
+// (public) -this
+function bnNegate() { var r = nbi(); BigInteger.ZERO.subTo(this,r); return r; }
+
+// (public) |this|
+function bnAbs() { return (this.s<0)?this.negate():this; }
+
+// (public) return + if this > a, - if this < a, 0 if equal
+function bnCompareTo(a) {
+ var this_array = this.array;
+ var a_array = a.array;
+
+ var r = this.s-a.s;
+ if(r != 0) return r;
+ var i = this.t;
+ r = i-a.t;
+ if(r != 0) return r;
+ while(--i >= 0) if((r=this_array[i]-a_array[i]) != 0) return r;
+ return 0;
+}
+
+// returns bit length of the integer x
+function nbits(x) {
+ var r = 1, t;
+ if((t=x>>>16) != 0) { x = t; r += 16; }
+ if((t=x>>8) != 0) { x = t; r += 8; }
+ if((t=x>>4) != 0) { x = t; r += 4; }
+ if((t=x>>2) != 0) { x = t; r += 2; }
+ if((t=x>>1) != 0) { x = t; r += 1; }
+ return r;
+}
+
+// (public) return the number of bits in "this"
+function bnBitLength() {
+ var this_array = this.array;
+ if(this.t <= 0) return 0;
+ return BI_DB*(this.t-1)+nbits(this_array[this.t-1]^(this.s&BI_DM));
+}
+
+// (protected) r = this << n*DB
+function bnpDLShiftTo(n,r) {
+ var this_array = this.array;
+ var r_array = r.array;
+ var i;
+ for(i = this.t-1; i >= 0; --i) r_array[i+n] = this_array[i];
+ for(i = n-1; i >= 0; --i) r_array[i] = 0;
+ r.t = this.t+n;
+ r.s = this.s;
+}
+
+// (protected) r = this >> n*DB
+function bnpDRShiftTo(n,r) {
+ var this_array = this.array;
+ var r_array = r.array;
+ for(var i = n; i < this.t; ++i) r_array[i-n] = this_array[i];
+ r.t = Math.max(this.t-n,0);
+ r.s = this.s;
+}
+
+// (protected) r = this << n
+function bnpLShiftTo(n,r) {
+ var this_array = this.array;
+ var r_array = r.array;
+ var bs = n%BI_DB;
+ var cbs = BI_DB-bs;
+ var bm = (1<<cbs)-1;
+ var ds = Math.floor(n/BI_DB), c = (this.s<<bs)&BI_DM, i;
+ for(i = this.t-1; i >= 0; --i) {
+ r_array[i+ds+1] = (this_array[i]>>cbs)|c;
+ c = (this_array[i]&bm)<<bs;
+ }
+ for(i = ds-1; i >= 0; --i) r_array[i] = 0;
+ r_array[ds] = c;
+ r.t = this.t+ds+1;
+ r.s = this.s;
+ r.clamp();
+}
+
+// (protected) r = this >> n
+function bnpRShiftTo(n,r) {
+ var this_array = this.array;
+ var r_array = r.array;
+ r.s = this.s;
+ var ds = Math.floor(n/BI_DB);
+ if(ds >= this.t) { r.t = 0; return; }
+ var bs = n%BI_DB;
+ var cbs = BI_DB-bs;
+ var bm = (1<<bs)-1;
+ r_array[0] = this_array[ds]>>bs;
+ for(var i = ds+1; i < this.t; ++i) {
+ r_array[i-ds-1] |= (this_array[i]&bm)<<cbs;
+ r_array[i-ds] = this_array[i]>>bs;
+ }
+ if(bs > 0) r_array[this.t-ds-1] |= (this.s&bm)<<cbs;
+ r.t = this.t-ds;
+ r.clamp();
+}
+
+// (protected) r = this - a
+function bnpSubTo(a,r) {
+ var this_array = this.array;
+ var r_array = r.array;
+ var a_array = a.array;
+ var i = 0, c = 0, m = Math.min(a.t,this.t);
+ while(i < m) {
+ c += this_array[i]-a_array[i];
+ r_array[i++] = c&BI_DM;
+ c >>= BI_DB;
+ }
+ if(a.t < this.t) {
+ c -= a.s;
+ while(i < this.t) {
+ c += this_array[i];
+ r_array[i++] = c&BI_DM;
+ c >>= BI_DB;
+ }
+ c += this.s;
+ }
+ else {
+ c += this.s;
+ while(i < a.t) {
+ c -= a_array[i];
+ r_array[i++] = c&BI_DM;
+ c >>= BI_DB;
+ }
+ c -= a.s;
+ }
+ r.s = (c<0)?-1:0;
+ if(c < -1) r_array[i++] = BI_DV+c;
+ else if(c > 0) r_array[i++] = c;
+ r.t = i;
+ r.clamp();
+}
+
+// (protected) r = this * a, r != this,a (HAC 14.12)
+// "this" should be the larger one if appropriate.
+function bnpMultiplyTo(a,r) {
+ var this_array = this.array;
+ var r_array = r.array;
+ var x = this.abs(), y = a.abs();
+ var y_array = y.array;
+
+ var i = x.t;
+ r.t = i+y.t;
+ while(--i >= 0) r_array[i] = 0;
+ for(i = 0; i < y.t; ++i) r_array[i+x.t] = x.am(0,y_array[i],r,i,0,x.t);
+ r.s = 0;
+ r.clamp();
+ if(this.s != a.s) BigInteger.ZERO.subTo(r,r);
+}
+
+// (protected) r = this^2, r != this (HAC 14.16)
+function bnpSquareTo(r) {
+ var x = this.abs();
+ var x_array = x.array;
+ var r_array = r.array;
+
+ var i = r.t = 2*x.t;
+ while(--i >= 0) r_array[i] = 0;
+ for(i = 0; i < x.t-1; ++i) {
+ var c = x.am(i,x_array[i],r,2*i,0,1);
+ if((r_array[i+x.t]+=x.am(i+1,2*x_array[i],r,2*i+1,c,x.t-i-1)) >= BI_DV) {
+ r_array[i+x.t] -= BI_DV;
+ r_array[i+x.t+1] = 1;
+ }
+ }
+ if(r.t > 0) r_array[r.t-1] += x.am(i,x_array[i],r,2*i,0,1);
+ r.s = 0;
+ r.clamp();
+}
+
+// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
+// r != q, this != m. q or r may be null.
+function bnpDivRemTo(m,q,r) {
+ var pm = m.abs();
+ if(pm.t <= 0) return;
+ var pt = this.abs();
+ if(pt.t < pm.t) {
+ if(q != null) q.fromInt(0);
+ if(r != null) this.copyTo(r);
+ return;
+ }
+ if(r == null) r = nbi();
+ var y = nbi(), ts = this.s, ms = m.s;
+ var pm_array = pm.array;
+ var nsh = BI_DB-nbits(pm_array[pm.t-1]); // normalize modulus
+ if(nsh > 0) { pm.lShiftTo(nsh,y); pt.lShiftTo(nsh,r); }
+ else { pm.copyTo(y); pt.copyTo(r); }
+ var ys = y.t;
+
+ var y_array = y.array;
+ var y0 = y_array[ys-1];
+ if(y0 == 0) return;
+ var yt = y0*(1<<BI_F1)+((ys>1)?y_array[ys-2]>>BI_F2:0);
+ var d1 = BI_FV/yt, d2 = (1<<BI_F1)/yt, e = 1<<BI_F2;
+ var i = r.t, j = i-ys, t = (q==null)?nbi():q;
+ y.dlShiftTo(j,t);
+
+ var r_array = r.array;
+ if(r.compareTo(t) >= 0) {
+ r_array[r.t++] = 1;
+ r.subTo(t,r);
+ }
+ BigInteger.ONE.dlShiftTo(ys,t);
+ t.subTo(y,y); // "negative" y so we can replace sub with am later
+ while(y.t < ys) y_array[y.t++] = 0;
+ while(--j >= 0) {
+ // Estimate quotient digit
+ var qd = (r_array[--i]==y0)?BI_DM:Math.floor(r_array[i]*d1+(r_array[i-1]+e)*d2);
+ if((r_array[i]+=y.am(0,qd,r,j,0,ys)) < qd) { // Try it out
+ y.dlShiftTo(j,t);
+ r.subTo(t,r);
+ while(r_array[i] < --qd) r.subTo(t,r);
+ }
+ }
+ if(q != null) {
+ r.drShiftTo(ys,q);
+ if(ts != ms) BigInteger.ZERO.subTo(q,q);
+ }
+ r.t = ys;
+ r.clamp();
+ if(nsh > 0) r.rShiftTo(nsh,r); // Denormalize remainder
+ if(ts < 0) BigInteger.ZERO.subTo(r,r);
+}
+
+// (public) this mod a
+function bnMod(a) {
+ var r = nbi();
+ this.abs().divRemTo(a,null,r);
+ if(this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r,r);
+ return r;
+}
+
+// Modular reduction using "classic" algorithm
+function Classic(m) { this.m = m; }
+function cConvert(x) {
+ if(x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m);
+ else return x;
+}
+function cRevert(x) { return x; }
+function cReduce(x) { x.divRemTo(this.m,null,x); }
+function cMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }
+function cSqrTo(x,r) { x.squareTo(r); this.reduce(r); }
+
+Classic.prototype.convert = cConvert;
+Classic.prototype.revert = cRevert;
+Classic.prototype.reduce = cReduce;
+Classic.prototype.mulTo = cMulTo;
+Classic.prototype.sqrTo = cSqrTo;
+
+// (protected) return "-1/this % 2^DB"; useful for Mont. reduction
+// justification:
+// xy == 1 (mod m)
+// xy = 1+km
+// xy(2-xy) = (1+km)(1-km)
+// x[y(2-xy)] = 1-k^2m^2
+// x[y(2-xy)] == 1 (mod m^2)
+// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
+// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
+// JS multiply "overflows" differently from C/C++, so care is needed here.
+function bnpInvDigit() {
+ var this_array = this.array;
+ if(this.t < 1) return 0;
+ var x = this_array[0];
+ if((x&1) == 0) return 0;
+ var y = x&3; // y == 1/x mod 2^2
+ y = (y*(2-(x&0xf)*y))&0xf; // y == 1/x mod 2^4
+ y = (y*(2-(x&0xff)*y))&0xff; // y == 1/x mod 2^8
+ y = (y*(2-(((x&0xffff)*y)&0xffff)))&0xffff; // y == 1/x mod 2^16
+ // last step - calculate inverse mod DV directly;
+ // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
+ y = (y*(2-x*y%BI_DV))%BI_DV; // y == 1/x mod 2^dbits
+ // we really want the negative inverse, and -DV < y < DV
+ return (y>0)?BI_DV-y:-y;
+}
+
+// Montgomery reduction
+function Montgomery(m) {
+ this.m = m;
+ this.mp = m.invDigit();
+ this.mpl = this.mp&0x7fff;
+ this.mph = this.mp>>15;
+ this.um = (1<<(BI_DB-15))-1;
+ this.mt2 = 2*m.t;
+}
+
+// xR mod m
+function montConvert(x) {
+ var r = nbi();
+ x.abs().dlShiftTo(this.m.t,r);
+ r.divRemTo(this.m,null,r);
+ if(x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r,r);
+ return r;
+}
+
+// x/R mod m
+function montRevert(x) {
+ var r = nbi();
+ x.copyTo(r);
+ this.reduce(r);
+ return r;
+}
+
+// x = x/R mod m (HAC 14.32)
+function montReduce(x) {
+ var x_array = x.array;
+ while(x.t <= this.mt2) // pad x so am has enough room later
+ x_array[x.t++] = 0;
+ for(var i = 0; i < this.m.t; ++i) {
+ // faster way of calculating u0 = x[i]*mp mod DV
+ var j = x_array[i]&0x7fff;
+ var u0 = (j*this.mpl+(((j*this.mph+(x_array[i]>>15)*this.mpl)&this.um)<<15))&BI_DM;
+ // use am to combine the multiply-shift-add into one call
+ j = i+this.m.t;
+ x_array[j] += this.m.am(0,u0,x,i,0,this.m.t);
+ // propagate carry
+ while(x_array[j] >= BI_DV) { x_array[j] -= BI_DV; x_array[++j]++; }
+ }
+ x.clamp();
+ x.drShiftTo(this.m.t,x);
+ if(x.compareTo(this.m) >= 0) x.subTo(this.m,x);
+}
+
+// r = "x^2/R mod m"; x != r
+function montSqrTo(x,r) { x.squareTo(r); this.reduce(r); }
+
+// r = "xy/R mod m"; x,y != r
+function montMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }
+
+Montgomery.prototype.convert = montConvert;
+Montgomery.prototype.revert = montRevert;
+Montgomery.prototype.reduce = montReduce;
+Montgomery.prototype.mulTo = montMulTo;
+Montgomery.prototype.sqrTo = montSqrTo;
+
+// (protected) true iff this is even
+function bnpIsEven() {
+ var this_array = this.array;
+ return ((this.t>0)?(this_array[0]&1):this.s) == 0;
+}
+
+// (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
+function bnpExp(e,z) {
+ if(e > 0xffffffff || e < 1) return BigInteger.ONE;
+ var r = nbi(), r2 = nbi(), g = z.convert(this), i = nbits(e)-1;
+ g.copyTo(r);
+ while(--i >= 0) {
+ z.sqrTo(r,r2);
+ if((e&(1<<i)) > 0) z.mulTo(r2,g,r);
+ else { var t = r; r = r2; r2 = t; }
+ }
+ return z.revert(r);
+}
+
+// (public) this^e % m, 0 <= e < 2^32
+function bnModPowInt(e,m) {
+ var z;
+ if(e < 256 || m.isEven()) z = new Classic(m); else z = new Montgomery(m);
+ return this.exp(e,z);
+}
+
+// protected
+BigInteger.prototype.copyTo = bnpCopyTo;
+BigInteger.prototype.fromInt = bnpFromInt;
+BigInteger.prototype.fromString = bnpFromString;
+BigInteger.prototype.clamp = bnpClamp;
+BigInteger.prototype.dlShiftTo = bnpDLShiftTo;
+BigInteger.prototype.drShiftTo = bnpDRShiftTo;
+BigInteger.prototype.lShiftTo = bnpLShiftTo;
+BigInteger.prototype.rShiftTo = bnpRShiftTo;
+BigInteger.prototype.subTo = bnpSubTo;
+BigInteger.prototype.multiplyTo = bnpMultiplyTo;
+BigInteger.prototype.squareTo = bnpSquareTo;
+BigInteger.prototype.divRemTo = bnpDivRemTo;
+BigInteger.prototype.invDigit = bnpInvDigit;
+BigInteger.prototype.isEven = bnpIsEven;
+BigInteger.prototype.exp = bnpExp;
+
+// public
+BigInteger.prototype.toString = bnToString;
+BigInteger.prototype.negate = bnNegate;
+BigInteger.prototype.abs = bnAbs;
+BigInteger.prototype.compareTo = bnCompareTo;
+BigInteger.prototype.bitLength = bnBitLength;
+BigInteger.prototype.mod = bnMod;
+BigInteger.prototype.modPowInt = bnModPowInt;
+
+// "constants"
+BigInteger.ZERO = nbv(0);
+BigInteger.ONE = nbv(1);
+// Copyright (c) 2005 Tom Wu
+// All Rights Reserved.
+// See "LICENSE" for details.
+
+// Extended JavaScript BN functions, required for RSA private ops.
+
+// (public)
+function bnClone() { var r = nbi(); this.copyTo(r); return r; }
+
+// (public) return value as integer
+function bnIntValue() {
+ var this_array = this.array;
+ if(this.s < 0) {
+ if(this.t == 1) return this_array[0]-BI_DV;
+ else if(this.t == 0) return -1;
+ }
+ else if(this.t == 1) return this_array[0];
+ else if(this.t == 0) return 0;
+ // assumes 16 < DB < 32
+ return ((this_array[1]&((1<<(32-BI_DB))-1))<<BI_DB)|this_array[0];
+}
+
+// (public) return value as byte
+function bnByteValue() {
+ var this_array = this.array;
+ return (this.t==0)?this.s:(this_array[0]<<24)>>24;
+}
+
+// (public) return value as short (assumes DB>=16)
+function bnShortValue() {
+ var this_array = this.array;
+ return (this.t==0)?this.s:(this_array[0]<<16)>>16;
+}
+
+// (protected) return x s.t. r^x < DV
+function bnpChunkSize(r) { return Math.floor(Math.LN2*BI_DB/Math.log(r)); }
+
+// (public) 0 if this == 0, 1 if this > 0
+function bnSigNum() {
+ var this_array = this.array;
+ if(this.s < 0) return -1;
+ else if(this.t <= 0 || (this.t == 1 && this_array[0] <= 0)) return 0;
+ else return 1;
+}
+
+// (protected) convert to radix string
+function bnpToRadix(b) {
+ if(b == null) b = 10;
+ if(this.signum() == 0 || b < 2 || b > 36) return "0";
+ var cs = this.chunkSize(b);
+ var a = Math.pow(b,cs);
+ var d = nbv(a), y = nbi(), z = nbi(), r = "";
+ this.divRemTo(d,y,z);
+ while(y.signum() > 0) {
+ r = (a+z.intValue()).toString(b).substr(1) + r;
+ y.divRemTo(d,y,z);
+ }
+ return z.intValue().toString(b) + r;
+}
+
+// (protected) convert from radix string
+function bnpFromRadix(s,b) {
+ this.fromInt(0);
+ if(b == null) b = 10;
+ var cs = this.chunkSize(b);
+ var d = Math.pow(b,cs), mi = false, j = 0, w = 0;
+ for(var i = 0; i < s.length; ++i) {
+ var x = intAt(s,i);
+ if(x < 0) {
+ if(s.charAt(i) == "-" && this.signum() == 0) mi = true;
+ continue;
+ }
+ w = b*w+x;
+ if(++j >= cs) {
+ this.dMultiply(d);
+ this.dAddOffset(w,0);
+ j = 0;
+ w = 0;
+ }
+ }
+ if(j > 0) {
+ this.dMultiply(Math.pow(b,j));
+ this.dAddOffset(w,0);
+ }
+ if(mi) BigInteger.ZERO.subTo(this,this);
+}
+
+// (protected) alternate constructor
+function bnpFromNumber(a,b,c) {
+ if("number" == typeof b) {
+ // new BigInteger(int,int,RNG)
+ if(a < 2) this.fromInt(1);
+ else {
+ this.fromNumber(a,c);
+ if(!this.testBit(a-1)) // force MSB set
+ this.bitwiseTo(BigInteger.ONE.shiftLeft(a-1),op_or,this);
+ if(this.isEven()) this.dAddOffset(1,0); // force odd
+ while(!this.isProbablePrime(b)) {
+ this.dAddOffset(2,0);
+ if(this.bitLength() > a) this.subTo(BigInteger.ONE.shiftLeft(a-1),this);
+ }
+ }
+ }
+ else {
+ // new BigInteger(int,RNG)
+ var x = new Array(), t = a&7;
+ x.length = (a>>3)+1;
+ b.nextBytes(x);
+ if(t > 0) x[0] &= ((1<<t)-1); else x[0] = 0;
+ this.fromString(x,256);
+ }
+}
+
+// (public) convert to bigendian byte array
+function bnToByteArray() {
+ var this_array = this.array;
+ var i = this.t, r = new Array();
+ r[0] = this.s;
+ var p = BI_DB-(i*BI_DB)%8, d, k = 0;
+ if(i-- > 0) {
+ if(p < BI_DB && (d = this_array[i]>>p) != (this.s&BI_DM)>>p)
+ r[k++] = d|(this.s<<(BI_DB-p));
+ while(i >= 0) {
+ if(p < 8) {
+ d = (this_array[i]&((1<<p)-1))<<(8-p);
+ d |= this_array[--i]>>(p+=BI_DB-8);
+ }
+ else {
+ d = (this_array[i]>>(p-=8))&0xff;
+ if(p <= 0) { p += BI_DB; --i; }
+ }
+ if((d&0x80) != 0) d |= -256;
+ if(k == 0 && (this.s&0x80) != (d&0x80)) ++k;
+ if(k > 0 || d != this.s) r[k++] = d;
+ }
+ }
+ return r;
+}
+
+function bnEquals(a) { return(this.compareTo(a)==0); }
+function bnMin(a) { return(this.compareTo(a)<0)?this:a; }
+function bnMax(a) { return(this.compareTo(a)>0)?this:a; }
+
+// (protected) r = this op a (bitwise)
+function bnpBitwiseTo(a,op,r) {
+ var this_array = this.array;
+ var a_array = a.array;
+ var r_array = r.array;
+ var i, f, m = Math.min(a.t,this.t);
+ for(i = 0; i < m; ++i) r_array[i] = op(this_array[i],a_array[i]);
+ if(a.t < this.t) {
+ f = a.s&BI_DM;
+ for(i = m; i < this.t; ++i) r_array[i] = op(this_array[i],f);
+ r.t = this.t;
+ }
+ else {
+ f = this.s&BI_DM;
+ for(i = m; i < a.t; ++i) r_array[i] = op(f,a_array[i]);
+ r.t = a.t;
+ }
+ r.s = op(this.s,a.s);
+ r.clamp();
+}
+
+// (public) this & a
+function op_and(x,y) { return x&y; }
+function bnAnd(a) { var r = nbi(); this.bitwiseTo(a,op_and,r); return r; }
+
+// (public) this | a
+function op_or(x,y) { return x|y; }
+function bnOr(a) { var r = nbi(); this.bitwiseTo(a,op_or,r); return r; }
+
+// (public) this ^ a
+function op_xor(x,y) { return x^y; }
+function bnXor(a) { var r = nbi(); this.bitwiseTo(a,op_xor,r); return r; }
+
+// (public) this & ~a
+function op_andnot(x,y) { return x&~y; }
+function bnAndNot(a) { var r = nbi(); this.bitwiseTo(a,op_andnot,r); return r; }
+
+// (public) ~this
+function bnNot() {
+ var this_array = this.array;
+ var r = nbi();
+ var r_array = r.array;
+
+ for(var i = 0; i < this.t; ++i) r_array[i] = BI_DM&~this_array[i];
+ r.t = this.t;
+ r.s = ~this.s;
+ return r;
+}
+
+// (public) this << n
+function bnShiftLeft(n) {
+ var r = nbi();
+ if(n < 0) this.rShiftTo(-n,r); else this.lShiftTo(n,r);
+ return r;
+}
+
+// (public) this >> n
+function bnShiftRight(n) {
+ var r = nbi();
+ if(n < 0) this.lShiftTo(-n,r); else this.rShiftTo(n,r);
+ return r;
+}
+
+// return index of lowest 1-bit in x, x < 2^31
+function lbit(x) {
+ if(x == 0) return -1;
+ var r = 0;
+ if((x&0xffff) == 0) { x >>= 16; r += 16; }
+ if((x&0xff) == 0) { x >>= 8; r += 8; }
+ if((x&0xf) == 0) { x >>= 4; r += 4; }
+ if((x&3) == 0) { x >>= 2; r += 2; }
+ if((x&1) == 0) ++r;
+ return r;
+}
+
+// (public) returns index of lowest 1-bit (or -1 if none)
+function bnGetLowestSetBit() {
+ var this_array = this.array;
+ for(var i = 0; i < this.t; ++i)
+ if(this_array[i] != 0) return i*BI_DB+lbit(this_array[i]);
+ if(this.s < 0) return this.t*BI_DB;
+ return -1;
+}
+
+// return number of 1 bits in x
+function cbit(x) {
+ var r = 0;
+ while(x != 0) { x &= x-1; ++r; }
+ return r;
+}
+
+// (public) return number of set bits
+function bnBitCount() {
+ var r = 0, x = this.s&BI_DM;
+ for(var i = 0; i < this.t; ++i) r += cbit(this_array[i]^x);
+ return r;
+}
+
+// (public) true iff nth bit is set
+function bnTestBit(n) {
+ var this_array = this.array;
+ var j = Math.floor(n/BI_DB);
+ if(j >= this.t) return(this.s!=0);
+ return((this_array[j]&(1<<(n%BI_DB)))!=0);
+}
+
+// (protected) this op (1<<n)
+function bnpChangeBit(n,op) {
+ var r = BigInteger.ONE.shiftLeft(n);
+ this.bitwiseTo(r,op,r);
+ return r;
+}
+
+// (public) this | (1<<n)
+function bnSetBit(n) { return this.changeBit(n,op_or); }
+
+// (public) this & ~(1<<n)
+function bnClearBit(n) { return this.changeBit(n,op_andnot); }
+
+// (public) this ^ (1<<n)
+function bnFlipBit(n) { return this.changeBit(n,op_xor); }
+
+// (protected) r = this + a
+function bnpAddTo(a,r) {
+ var this_array = this.array;
+ var a_array = a.array;
+ var r_array = r.array;
+ var i = 0, c = 0, m = Math.min(a.t,this.t);
+ while(i < m) {
+ c += this_array[i]+a_array[i];
+ r_array[i++] = c&BI_DM;
+ c >>= BI_DB;
+ }
+ if(a.t < this.t) {
+ c += a.s;
+ while(i < this.t) {
+ c += this_array[i];
+ r_array[i++] = c&BI_DM;
+ c >>= BI_DB;
+ }
+ c += this.s;
+ }
+ else {
+ c += this.s;
+ while(i < a.t) {
+ c += a_array[i];
+ r_array[i++] = c&BI_DM;
+ c >>= BI_DB;
+ }
+ c += a.s;
+ }
+ r.s = (c<0)?-1:0;
+ if(c > 0) r_array[i++] = c;
+ else if(c < -1) r_array[i++] = BI_DV+c;
+ r.t = i;
+ r.clamp();
+}
+
+// (public) this + a
+function bnAdd(a) { var r = nbi(); this.addTo(a,r); return r; }
+
+// (public) this - a
+function bnSubtract(a) { var r = nbi(); this.subTo(a,r); return r; }
+
+// (public) this * a
+function bnMultiply(a) { var r = nbi(); this.multiplyTo(a,r); return r; }
+
+// (public) this / a
+function bnDivide(a) { var r = nbi(); this.divRemTo(a,r,null); return r; }
+
+// (public) this % a
+function bnRemainder(a) { var r = nbi(); this.divRemTo(a,null,r); return r; }
+
+// (public) [this/a,this%a]
+function bnDivideAndRemainder(a) {
+ var q = nbi(), r = nbi();
+ this.divRemTo(a,q,r);
+ return new Array(q,r);
+}
+
+// (protected) this *= n, this >= 0, 1 < n < DV
+function bnpDMultiply(n) {
+ var this_array = this.array;
+ this_array[this.t] = this.am(0,n-1,this,0,0,this.t);
+ ++this.t;
+ this.clamp();
+}
+
+// (protected) this += n << w words, this >= 0
+function bnpDAddOffset(n,w) {
+ var this_array = this.array;
+ while(this.t <= w) this_array[this.t++] = 0;
+ this_array[w] += n;
+ while(this_array[w] >= BI_DV) {
+ this_array[w] -= BI_DV;
+ if(++w >= this.t) this_array[this.t++] = 0;
+ ++this_array[w];
+ }
+}
+
+// A "null" reducer
+function NullExp() {}
+function nNop(x) { return x; }
+function nMulTo(x,y,r) { x.multiplyTo(y,r); }
+function nSqrTo(x,r) { x.squareTo(r); }
+
+NullExp.prototype.convert = nNop;
+NullExp.prototype.revert = nNop;
+NullExp.prototype.mulTo = nMulTo;
+NullExp.prototype.sqrTo = nSqrTo;
+
+// (public) this^e
+function bnPow(e) { return this.exp(e,new NullExp()); }
+
+// (protected) r = lower n words of "this * a", a.t <= n
+// "this" should be the larger one if appropriate.
+function bnpMultiplyLowerTo(a,n,r) {
+ var r_array = r.array;
+ var a_array = a.array;
+ var i = Math.min(this.t+a.t,n);
+ r.s = 0; // assumes a,this >= 0
+ r.t = i;
+ while(i > 0) r_array[--i] = 0;
+ var j;
+ for(j = r.t-this.t; i < j; ++i) r_array[i+this.t] = this.am(0,a_array[i],r,i,0,this.t);
+ for(j = Math.min(a.t,n); i < j; ++i) this.am(0,a_array[i],r,i,0,n-i);
+ r.clamp();
+}
+
+// (protected) r = "this * a" without lower n words, n > 0
+// "this" should be the larger one if appropriate.
+function bnpMultiplyUpperTo(a,n,r) {
+ var r_array = r.array;
+ var a_array = a.array;
+ --n;
+ var i = r.t = this.t+a.t-n;
+ r.s = 0; // assumes a,this >= 0
+ while(--i >= 0) r_array[i] = 0;
+ for(i = Math.max(n-this.t,0); i < a.t; ++i)
+ r_array[this.t+i-n] = this.am(n-i,a_array[i],r,0,0,this.t+i-n);
+ r.clamp();
+ r.drShiftTo(1,r);
+}
+
+// Barrett modular reduction
+function Barrett(m) {
+ // setup Barrett
+ this.r2 = nbi();
+ this.q3 = nbi();
+ BigInteger.ONE.dlShiftTo(2*m.t,this.r2);
+ this.mu = this.r2.divide(m);
+ this.m = m;
+}
+
+function barrettConvert(x) {
+ if(x.s < 0 || x.t > 2*this.m.t) return x.mod(this.m);
+ else if(x.compareTo(this.m) < 0) return x;
+ else { var r = nbi(); x.copyTo(r); this.reduce(r); return r; }
+}
+
+function barrettRevert(x) { return x; }
+
+// x = x mod m (HAC 14.42)
+function barrettReduce(x) {
+ x.drShiftTo(this.m.t-1,this.r2);
+ if(x.t > this.m.t+1) { x.t = this.m.t+1; x.clamp(); }
+ this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3);
+ this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);
+ while(x.compareTo(this.r2) < 0) x.dAddOffset(1,this.m.t+1);
+ x.subTo(this.r2,x);
+ while(x.compareTo(this.m) >= 0) x.subTo(this.m,x);
+}
+
+// r = x^2 mod m; x != r
+function barrettSqrTo(x,r) { x.squareTo(r); this.reduce(r); }
+
+// r = x*y mod m; x,y != r
+function barrettMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }
+
+Barrett.prototype.convert = barrettConvert;
+Barrett.prototype.revert = barrettRevert;
+Barrett.prototype.reduce = barrettReduce;
+Barrett.prototype.mulTo = barrettMulTo;
+Barrett.prototype.sqrTo = barrettSqrTo;
+
+// (public) this^e % m (HAC 14.85)
+function bnModPow(e,m) {
+ var e_array = e.array;
+ var i = e.bitLength(), k, r = nbv(1), z;
+ if(i <= 0) return r;
+ else if(i < 18) k = 1;
+ else if(i < 48) k = 3;
+ else if(i < 144) k = 4;
+ else if(i < 768) k = 5;
+ else k = 6;
+ if(i < 8)
+ z = new Classic(m);
+ else if(m.isEven())
+ z = new Barrett(m);
+ else
+ z = new Montgomery(m);
+
+ // precomputation
+ var g = new Array(), n = 3, k1 = k-1, km = (1<<k)-1;
+ g[1] = z.convert(this);
+ if(k > 1) {
+ var g2 = nbi();
+ z.sqrTo(g[1],g2);
+ while(n <= km) {
+ g[n] = nbi();
+ z.mulTo(g2,g[n-2],g[n]);
+ n += 2;
+ }
+ }
+
+ var j = e.t-1, w, is1 = true, r2 = nbi(), t;
+ i = nbits(e_array[j])-1;
+ while(j >= 0) {
+ if(i >= k1) w = (e_array[j]>>(i-k1))&km;
+ else {
+ w = (e_array[j]&((1<<(i+1))-1))<<(k1-i);
+ if(j > 0) w |= e_array[j-1]>>(BI_DB+i-k1);
+ }
+
+ n = k;
+ while((w&1) == 0) { w >>= 1; --n; }
+ if((i -= n) < 0) { i += BI_DB; --j; }
+ if(is1) { // ret == 1, don't bother squaring or multiplying it
+ g[w].copyTo(r);
+ is1 = false;
+ }
+ else {
+ while(n > 1) { z.sqrTo(r,r2); z.sqrTo(r2,r); n -= 2; }
+ if(n > 0) z.sqrTo(r,r2); else { t = r; r = r2; r2 = t; }
+ z.mulTo(r2,g[w],r);
+ }
+
+ while(j >= 0 && (e_array[j]&(1<<i)) == 0) {
+ z.sqrTo(r,r2); t = r; r = r2; r2 = t;
+ if(--i < 0) { i = BI_DB-1; --j; }
+ }
+ }
+ return z.revert(r);
+}
+
+// (public) gcd(this,a) (HAC 14.54)
+function bnGCD(a) {
+ var x = (this.s<0)?this.negate():this.clone();
+ var y = (a.s<0)?a.negate():a.clone();
+ if(x.compareTo(y) < 0) { var t = x; x = y; y = t; }
+ var i = x.getLowestSetBit(), g = y.getLowestSetBit();
+ if(g < 0) return x;
+ if(i < g) g = i;
+ if(g > 0) {
+ x.rShiftTo(g,x);
+ y.rShiftTo(g,y);
+ }
+ while(x.signum() > 0) {
+ if((i = x.getLowestSetBit()) > 0) x.rShiftTo(i,x);
+ if((i = y.getLowestSetBit()) > 0) y.rShiftTo(i,y);
+ if(x.compareTo(y) >= 0) {
+ x.subTo(y,x);
+ x.rShiftTo(1,x);
+ }
+ else {
+ y.subTo(x,y);
+ y.rShiftTo(1,y);
+ }
+ }
+ if(g > 0) y.lShiftTo(g,y);
+ return y;
+}
+
+// (protected) this % n, n < 2^26
+function bnpModInt(n) {
+ var this_array = this.array;
+ if(n <= 0) return 0;
+ var d = BI_DV%n, r = (this.s<0)?n-1:0;
+ if(this.t > 0)
+ if(d == 0) r = this_array[0]%n;
+ else for(var i = this.t-1; i >= 0; --i) r = (d*r+this_array[i])%n;
+ return r;
+}
+
+// (public) 1/this % m (HAC 14.61)
+function bnModInverse(m) {
+ var ac = m.isEven();
+ if((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO;
+ var u = m.clone(), v = this.clone();
+ var a = nbv(1), b = nbv(0), c = nbv(0), d = nbv(1);
+ while(u.signum() != 0) {
+ while(u.isEven()) {
+ u.rShiftTo(1,u);
+ if(ac) {
+ if(!a.isEven() || !b.isEven()) { a.addTo(this,a); b.subTo(m,b); }
+ a.rShiftTo(1,a);
+ }
+ else if(!b.isEven()) b.subTo(m,b);
+ b.rShiftTo(1,b);
+ }
+ while(v.isEven()) {
+ v.rShiftTo(1,v);
+ if(ac) {
+ if(!c.isEven() || !d.isEven()) { c.addTo(this,c); d.subTo(m,d); }
+ c.rShiftTo(1,c);
+ }
+ else if(!d.isEven()) d.subTo(m,d);
+ d.rShiftTo(1,d);
+ }
+ if(u.compareTo(v) >= 0) {
+ u.subTo(v,u);
+ if(ac) a.subTo(c,a);
+ b.subTo(d,b);
+ }
+ else {
+ v.subTo(u,v);
+ if(ac) c.subTo(a,c);
+ d.subTo(b,d);
+ }
+ }
+ if(v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO;
+ if(d.compareTo(m) >= 0) return d.subtract(m);
+ if(d.signum() < 0) d.addTo(m,d); else return d;
+ if(d.signum() < 0) return d.add(m); else return d;
+}
+
+var lowprimes = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509];
+var lplim = (1<<26)/lowprimes[lowprimes.length-1];
+
+// (public) test primality with certainty >= 1-.5^t
+function bnIsProbablePrime(t) {
+ var i, x = this.abs();
+ var x_array = x.array;
+ if(x.t == 1 && x_array[0] <= lowprimes[lowprimes.length-1]) {
+ for(i = 0; i < lowprimes.length; ++i)
+ if(x_array[0] == lowprimes[i]) return true;
+ return false;
+ }
+ if(x.isEven()) return false;
+ i = 1;
+ while(i < lowprimes.length) {
+ var m = lowprimes[i], j = i+1;
+ while(j < lowprimes.length && m < lplim) m *= lowprimes[j++];
+ m = x.modInt(m);
+ while(i < j) if(m%lowprimes[i++] == 0) return false;
+ }
+ return x.millerRabin(t);
+}
+
+// (protected) true if probably prime (HAC 4.24, Miller-Rabin)
+function bnpMillerRabin(t) {
+ var n1 = this.subtract(BigInteger.ONE);
+ var k = n1.getLowestSetBit();
+ if(k <= 0) return false;
+ var r = n1.shiftRight(k);
+ t = (t+1)>>1;
+ if(t > lowprimes.length) t = lowprimes.length;
+ var a = nbi();
+ for(var i = 0; i < t; ++i) {
+ a.fromInt(lowprimes[i]);
+ var y = a.modPow(r,this);
+ if(y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
+ var j = 1;
+ while(j++ < k && y.compareTo(n1) != 0) {
+ y = y.modPowInt(2,this);
+ if(y.compareTo(BigInteger.ONE) == 0) return false;
+ }
+ if(y.compareTo(n1) != 0) return false;
+ }
+ }
+ return true;
+}
+
+// protected
+BigInteger.prototype.chunkSize = bnpChunkSize;
+BigInteger.prototype.toRadix = bnpToRadix;
+BigInteger.prototype.fromRadix = bnpFromRadix;
+BigInteger.prototype.fromNumber = bnpFromNumber;
+BigInteger.prototype.bitwiseTo = bnpBitwiseTo;
+BigInteger.prototype.changeBit = bnpChangeBit;
+BigInteger.prototype.addTo = bnpAddTo;
+BigInteger.prototype.dMultiply = bnpDMultiply;
+BigInteger.prototype.dAddOffset = bnpDAddOffset;
+BigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo;
+BigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo;
+BigInteger.prototype.modInt = bnpModInt;
+BigInteger.prototype.millerRabin = bnpMillerRabin;
+
+// public
+BigInteger.prototype.clone = bnClone;
+BigInteger.prototype.intValue = bnIntValue;
+BigInteger.prototype.byteValue = bnByteValue;
+BigInteger.prototype.shortValue = bnShortValue;
+BigInteger.prototype.signum = bnSigNum;
+BigInteger.prototype.toByteArray = bnToByteArray;
+BigInteger.prototype.equals = bnEquals;
+BigInteger.prototype.min = bnMin;
+BigInteger.prototype.max = bnMax;
+BigInteger.prototype.and = bnAnd;
+BigInteger.prototype.or = bnOr;
+BigInteger.prototype.xor = bnXor;
+BigInteger.prototype.andNot = bnAndNot;
+BigInteger.prototype.not = bnNot;
+BigInteger.prototype.shiftLeft = bnShiftLeft;
+BigInteger.prototype.shiftRight = bnShiftRight;
+BigInteger.prototype.getLowestSetBit = bnGetLowestSetBit;
+BigInteger.prototype.bitCount = bnBitCount;
+BigInteger.prototype.testBit = bnTestBit;
+BigInteger.prototype.setBit = bnSetBit;
+BigInteger.prototype.clearBit = bnClearBit;
+BigInteger.prototype.flipBit = bnFlipBit;
+BigInteger.prototype.add = bnAdd;
+BigInteger.prototype.subtract = bnSubtract;
+BigInteger.prototype.multiply = bnMultiply;
+BigInteger.prototype.divide = bnDivide;
+BigInteger.prototype.remainder = bnRemainder;
+BigInteger.prototype.divideAndRemainder = bnDivideAndRemainder;
+BigInteger.prototype.modPow = bnModPow;
+BigInteger.prototype.modInverse = bnModInverse;
+BigInteger.prototype.pow = bnPow;
+BigInteger.prototype.gcd = bnGCD;
+BigInteger.prototype.isProbablePrime = bnIsProbablePrime;
+
+// BigInteger interfaces not implemented in jsbn:
+
+// BigInteger(int signum, byte[] magnitude)
+// double doubleValue()
+// float floatValue()
+// int hashCode()
+// long longValue()
+// static BigInteger valueOf(long val)
+// prng4.js - uses Arcfour as a PRNG
+
+function Arcfour() {
+ this.i = 0;
+ this.j = 0;
+ this.S = new Array();
+}
+
+// Initialize arcfour context from key, an array of ints, each from [0..255]
+function ARC4init(key) {
+ var i, j, t;
+ for(i = 0; i < 256; ++i)
+ this.S[i] = i;
+ j = 0;
+ for(i = 0; i < 256; ++i) {
+ j = (j + this.S[i] + key[i % key.length]) & 255;
+ t = this.S[i];
+ this.S[i] = this.S[j];
+ this.S[j] = t;
+ }
+ this.i = 0;
+ this.j = 0;
+}
+
+function ARC4next() {
+ var t;
+ this.i = (this.i + 1) & 255;
+ this.j = (this.j + this.S[this.i]) & 255;
+ t = this.S[this.i];
+ this.S[this.i] = this.S[this.j];
+ this.S[this.j] = t;
+ return this.S[(t + this.S[this.i]) & 255];
+}
+
+Arcfour.prototype.init = ARC4init;
+Arcfour.prototype.next = ARC4next;
+
+// Plug in your RNG constructor here
+function prng_newstate() {
+ return new Arcfour();
+}
+
+// Pool size must be a multiple of 4 and greater than 32.
+// An array of bytes the size of the pool will be passed to init()
+var rng_psize = 256;
+// Random number generator - requires a PRNG backend, e.g. prng4.js
+
+// For best results, put code like
+// <body onClick='rng_seed_time();' onKeyPress='rng_seed_time();'>
+// in your main HTML document.
+
+var rng_state;
+var rng_pool;
+var rng_pptr;
+
+// Mix in a 32-bit integer into the pool
+function rng_seed_int(x) {
+ rng_pool[rng_pptr++] ^= x & 255;
+ rng_pool[rng_pptr++] ^= (x >> 8) & 255;
+ rng_pool[rng_pptr++] ^= (x >> 16) & 255;
+ rng_pool[rng_pptr++] ^= (x >> 24) & 255;
+ if(rng_pptr >= rng_psize) rng_pptr -= rng_psize;
+}
+
+// Mix in the current time (w/milliseconds) into the pool
+function rng_seed_time() {
+ // Use pre-computed date to avoid making the benchmark
+ // results dependent on the current date.
+ rng_seed_int(1122926989487);
+}
+
+// Initialize the pool with junk if needed.
+if(rng_pool == null) {
+ rng_pool = new Array();
+ rng_pptr = 0;
+ var t;
+ while(rng_pptr < rng_psize) { // extract some randomness from Math.random()
+ t = Math.floor(65536 * Math.random());
+ rng_pool[rng_pptr++] = t >>> 8;
+ rng_pool[rng_pptr++] = t & 255;
+ }
+ rng_pptr = 0;
+ rng_seed_time();
+ //rng_seed_int(window.screenX);
+ //rng_seed_int(window.screenY);
+}
+
+function rng_get_byte() {
+ if(rng_state == null) {
+ rng_seed_time();
+ rng_state = prng_newstate();
+ rng_state.init(rng_pool);
+ for(rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr)
+ rng_pool[rng_pptr] = 0;
+ rng_pptr = 0;
+ //rng_pool = null;
+ }
+ // TODO: allow reseeding after first request
+ return rng_state.next();
+}
+
+function rng_get_bytes(ba) {
+ var i;
+ for(i = 0; i < ba.length; ++i) ba[i] = rng_get_byte();
+}
+
+function SecureRandom() {}
+
+SecureRandom.prototype.nextBytes = rng_get_bytes;
+// Depends on jsbn.js and rng.js
+
+// convert a (hex) string to a bignum object
+function parseBigInt(str,r) {
+ return new BigInteger(str,r);
+}
+
+function linebrk(s,n) {
+ var ret = "";
+ var i = 0;
+ while(i + n < s.length) {
+ ret += s.substring(i,i+n) + "\n";
+ i += n;
+ }
+ return ret + s.substring(i,s.length);
+}
+
+function byte2Hex(b) {
+ if(b < 0x10)
+ return "0" + b.toString(16);
+ else
+ return b.toString(16);
+}
+
+// PKCS#1 (type 2, random) pad input string s to n bytes, and return a bigint
+function pkcs1pad2(s,n) {
+ if(n < s.length + 11) {
+ alert("Message too long for RSA");
+ return null;
+ }
+ var ba = new Array();
+ var i = s.length - 1;
+ while(i >= 0 && n > 0) ba[--n] = s.charCodeAt(i--);
+ ba[--n] = 0;
+ var rng = new SecureRandom();
+ var x = new Array();
+ while(n > 2) { // random non-zero pad
+ x[0] = 0;
+ while(x[0] == 0) rng.nextBytes(x);
+ ba[--n] = x[0];
+ }
+ ba[--n] = 2;
+ ba[--n] = 0;
+ return new BigInteger(ba);
+}
+
+// "empty" RSA key constructor
+function RSAKey() {
+ this.n = null;
+ this.e = 0;
+ this.d = null;
+ this.p = null;
+ this.q = null;
+ this.dmp1 = null;
+ this.dmq1 = null;
+ this.coeff = null;
+}
+
+// Set the public key fields N and e from hex strings
+function RSASetPublic(N,E) {
+ if(N != null && E != null && N.length > 0 && E.length > 0) {
+ this.n = parseBigInt(N,16);
+ this.e = parseInt(E,16);
+ }
+ else
+ alert("Invalid RSA public key");
+}
+
+// Perform raw public operation on "x": return x^e (mod n)
+function RSADoPublic(x) {
+ return x.modPowInt(this.e, this.n);
+}
+
+// Return the PKCS#1 RSA encryption of "text" as an even-length hex string
+function RSAEncrypt(text) {
+ var m = pkcs1pad2(text,(this.n.bitLength()+7)>>3);
+ if(m == null) return null;
+ var c = this.doPublic(m);
+ if(c == null) return null;
+ var h = c.toString(16);
+ if((h.length & 1) == 0) return h; else return "0" + h;
+}
+
+// Return the PKCS#1 RSA encryption of "text" as a Base64-encoded string
+//function RSAEncryptB64(text) {
+// var h = this.encrypt(text);
+// if(h) return hex2b64(h); else return null;
+//}
+
+// protected
+RSAKey.prototype.doPublic = RSADoPublic;
+
+// public
+RSAKey.prototype.setPublic = RSASetPublic;
+RSAKey.prototype.encrypt = RSAEncrypt;
+//RSAKey.prototype.encrypt_b64 = RSAEncryptB64;
+// Depends on rsa.js and jsbn2.js
+
+// Undo PKCS#1 (type 2, random) padding and, if valid, return the plaintext
+function pkcs1unpad2(d,n) {
+ var b = d.toByteArray();
+ var i = 0;
+ while(i < b.length && b[i] == 0) ++i;
+ if(b.length-i != n-1 || b[i] != 2)
+ return null;
+ ++i;
+ while(b[i] != 0)
+ if(++i >= b.length) return null;
+ var ret = "";
+ while(++i < b.length)
+ ret += String.fromCharCode(b[i]);
+ return ret;
+}
+
+// Set the private key fields N, e, and d from hex strings
+function RSASetPrivate(N,E,D) {
+ if(N != null && E != null && N.length > 0 && E.length > 0) {
+ this.n = parseBigInt(N,16);
+ this.e = parseInt(E,16);
+ this.d = parseBigInt(D,16);
+ }
+ else
+ alert("Invalid RSA private key");
+}
+
+// Set the private key fields N, e, d and CRT params from hex strings
+function RSASetPrivateEx(N,E,D,P,Q,DP,DQ,C) {
+ if(N != null && E != null && N.length > 0 && E.length > 0) {
+ this.n = parseBigInt(N,16);
+ this.e = parseInt(E,16);
+ this.d = parseBigInt(D,16);
+ this.p = parseBigInt(P,16);
+ this.q = parseBigInt(Q,16);
+ this.dmp1 = parseBigInt(DP,16);
+ this.dmq1 = parseBigInt(DQ,16);
+ this.coeff = parseBigInt(C,16);
+ }
+ else
+ alert("Invalid RSA private key");
+}
+
+// Generate a new random private key B bits long, using public expt E
+function RSAGenerate(B,E) {
+ var rng = new SecureRandom();
+ var qs = B>>1;
+ this.e = parseInt(E,16);
+ var ee = new BigInteger(E,16);
+ for(;;) {
+ for(;;) {
+ this.p = new BigInteger(B-qs,1,rng);
+ if(this.p.subtract(BigInteger.ONE).gcd(ee).compareTo(BigInteger.ONE) == 0 && this.p.isProbablePrime(10)) break;
+ }
+ for(;;) {
+ this.q = new BigInteger(qs,1,rng);
+ if(this.q.subtract(BigInteger.ONE).gcd(ee).compareTo(BigInteger.ONE) == 0 && this.q.isProbablePrime(10)) break;
+ }
+ if(this.p.compareTo(this.q) <= 0) {
+ var t = this.p;
+ this.p = this.q;
+ this.q = t;
+ }
+ var p1 = this.p.subtract(BigInteger.ONE);
+ var q1 = this.q.subtract(BigInteger.ONE);
+ var phi = p1.multiply(q1);
+ if(phi.gcd(ee).compareTo(BigInteger.ONE) == 0) {
+ this.n = this.p.multiply(this.q);
+ this.d = ee.modInverse(phi);
+ this.dmp1 = this.d.mod(p1);
+ this.dmq1 = this.d.mod(q1);
+ this.coeff = this.q.modInverse(this.p);
+ break;
+ }
+ }
+}
+
+// Perform raw private operation on "x": return x^d (mod n)
+function RSADoPrivate(x) {
+ if(this.p == null || this.q == null)
+ return x.modPow(this.d, this.n);
+
+ // TODO: re-calculate any missing CRT params
+ var xp = x.mod(this.p).modPow(this.dmp1, this.p);
+ var xq = x.mod(this.q).modPow(this.dmq1, this.q);
+
+ while(xp.compareTo(xq) < 0)
+ xp = xp.add(this.p);
+ return xp.subtract(xq).multiply(this.coeff).mod(this.p).multiply(this.q).add(xq);
+}
+
+// Return the PKCS#1 RSA decryption of "ctext".
+// "ctext" is an even-length hex string and the output is a plain string.
+function RSADecrypt(ctext) {
+ var c = parseBigInt(ctext, 16);
+ var m = this.doPrivate(c);
+ if(m == null) return null;
+ return pkcs1unpad2(m, (this.n.bitLength()+7)>>3);
+}
+
+// Return the PKCS#1 RSA decryption of "ctext".
+// "ctext" is a Base64-encoded string and the output is a plain string.
+//function RSAB64Decrypt(ctext) {
+// var h = b64tohex(ctext);
+// if(h) return this.decrypt(h); else return null;
+//}
+
+// protected
+RSAKey.prototype.doPrivate = RSADoPrivate;
+
+// public
+RSAKey.prototype.setPrivate = RSASetPrivate;
+RSAKey.prototype.setPrivateEx = RSASetPrivateEx;
+RSAKey.prototype.generate = RSAGenerate;
+RSAKey.prototype.decrypt = RSADecrypt;
+//RSAKey.prototype.b64_decrypt = RSAB64Decrypt;
+
+
+nValue="a5261939975948bb7a58dffe5ff54e65f0498f9175f5a09288810b8975871e99af3b5dd94057b0fc07535f5f97444504fa35169d461d0d30cf0192e307727c065168c788771c561a9400fb49175e9e6aa4e23fe11af69e9412dd23b0cb6684c4c2429bce139e848ab26d0829073351f4acd36074eafd036a5eb83359d2a698d3";
+eValue="10001";
+dValue="8e9912f6d3645894e8d38cb58c0db81ff516cf4c7e5a14c7f1eddb1459d2cded4d8d293fc97aee6aefb861859c8b6a3d1dfe710463e1f9ddc72048c09751971c4a580aa51eb523357a3cc48d31cfad1d4a165066ed92d4748fb6571211da5cb14bc11b6e2df7c1a559e6d5ac1cd5c94703a22891464fba23d0d965086277a161";
+pValue="d090ce58a92c75233a6486cb0a9209bf3583b64f540c76f5294bb97d285eed33aec220bde14b2417951178ac152ceab6da7090905b478195498b352048f15e7d";
+qValue="cab575dc652bb66df15a0359609d51d1db184750c00c6698b90ef3465c99655103edbf0d54c56aec0ce3c4d22592338092a126a0cc49f65a4a30d222b411e58f";
+dmp1Value="1a24bca8e273df2f0e47c199bbf678604e7df7215480c77c8db39f49b000ce2cf7500038acfff5433b7d582a01f1826e6f4d42e1c57f5e1fef7b12aabc59fd25";
+dmq1Value="3d06982efbbe47339e1f6d36b1216b8a741d410b0c662f54f7118b27b9a4ec9d914337eb39841d8666f3034408cf94f5b62f11c402fc994fe15a05493150d9fd";
+coeffValue="3a3e731acd8960b7ff9eb81a7ff93bd1cfa74cbd56987db58b4594fb09c09084db1734c8143f98b602b981aaa9243ca28deb69b5b280ee8dcee0fd2625e53250";
+
+setupEngine(am3, 28);
+
+var TEXT = "The quick brown fox jumped over the extremely lazy frog! " +
+ "Now is the time for all good men to come to the party.";
+var encrypted;
+
+function encrypt() {
+ var RSA = new RSAKey();
+ RSA.setPublic(nValue, eValue);
+ RSA.setPrivateEx(nValue, eValue, dValue, pValue, qValue, dmp1Value, dmq1Value, coeffValue);
+ encrypted = RSA.encrypt(TEXT);
+}
+
+function decrypt() {
+ var RSA = new RSAKey();
+ RSA.setPublic(nValue, eValue);
+ RSA.setPrivateEx(nValue, eValue, dValue, pValue, qValue, dmp1Value, dmq1Value, coeffValue);
+ var decrypted = RSA.decrypt(encrypted);
+ if (decrypted != TEXT) {
+ throw new Error("Crypto operation failed");
+ }
+}
diff --git a/testing/talos/talos/tests/v8_7/deltablue.js b/testing/talos/talos/tests/v8_7/deltablue.js
new file mode 100644
index 0000000000..548fd96ffb
--- /dev/null
+++ b/testing/talos/talos/tests/v8_7/deltablue.js
@@ -0,0 +1,880 @@
+// Copyright 2008 the V8 project authors. All rights reserved.
+// Copyright 1996 John Maloney and Mario Wolczko.
+
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+// This implementation of the DeltaBlue benchmark is derived
+// from the Smalltalk implementation by John Maloney and Mario
+// Wolczko. Some parts have been translated directly, whereas
+// others have been modified more aggresively to make it feel
+// more like a JavaScript program.
+
+
+var DeltaBlue = new BenchmarkSuite('DeltaBlue', 66118, [
+ new Benchmark('DeltaBlue', deltaBlue)
+]);
+
+
+/**
+ * A JavaScript implementation of the DeltaBlue constraint-solving
+ * algorithm, as described in:
+ *
+ * "The DeltaBlue Algorithm: An Incremental Constraint Hierarchy Solver"
+ * Bjorn N. Freeman-Benson and John Maloney
+ * January 1990 Communications of the ACM,
+ * also available as University of Washington TR 89-08-06.
+ *
+ * Beware: this benchmark is written in a grotesque style where
+ * the constraint model is built by side-effects from constructors.
+ * I've kept it this way to avoid deviating too much from the original
+ * implementation.
+ */
+
+
+/* --- O b j e c t M o d e l --- */
+
+Object.prototype.inheritsFrom = function (shuper) {
+ function Inheriter() { }
+ Inheriter.prototype = shuper.prototype;
+ this.prototype = new Inheriter();
+ this.superConstructor = shuper;
+}
+
+function OrderedCollection() {
+ this.elms = new Array();
+}
+
+OrderedCollection.prototype.add = function (elm) {
+ this.elms.push(elm);
+}
+
+OrderedCollection.prototype.at = function (index) {
+ return this.elms[index];
+}
+
+OrderedCollection.prototype.size = function () {
+ return this.elms.length;
+}
+
+OrderedCollection.prototype.removeFirst = function () {
+ return this.elms.pop();
+}
+
+OrderedCollection.prototype.remove = function (elm) {
+ var index = 0, skipped = 0;
+ for (var i = 0; i < this.elms.length; i++) {
+ var value = this.elms[i];
+ if (value != elm) {
+ this.elms[index] = value;
+ index++;
+ } else {
+ skipped++;
+ }
+ }
+ for (var i = 0; i < skipped; i++)
+ this.elms.pop();
+}
+
+/* --- *
+ * S t r e n g t h
+ * --- */
+
+/**
+ * Strengths are used to measure the relative importance of constraints.
+ * New strengths may be inserted in the strength hierarchy without
+ * disrupting current constraints. Strengths cannot be created outside
+ * this class, so pointer comparison can be used for value comparison.
+ */
+function Strength(strengthValue, name) {
+ this.strengthValue = strengthValue;
+ this.name = name;
+}
+
+Strength.stronger = function (s1, s2) {
+ return s1.strengthValue < s2.strengthValue;
+}
+
+Strength.weaker = function (s1, s2) {
+ return s1.strengthValue > s2.strengthValue;
+}
+
+Strength.weakestOf = function (s1, s2) {
+ return this.weaker(s1, s2) ? s1 : s2;
+}
+
+Strength.strongest = function (s1, s2) {
+ return this.stronger(s1, s2) ? s1 : s2;
+}
+
+Strength.prototype.nextWeaker = function () {
+ switch (this.strengthValue) {
+ case 0: return Strength.WEAKEST;
+ case 1: return Strength.WEAK_DEFAULT;
+ case 2: return Strength.NORMAL;
+ case 3: return Strength.STRONG_DEFAULT;
+ case 4: return Strength.PREFERRED;
+ case 5: return Strength.REQUIRED;
+ }
+}
+
+// Strength constants.
+Strength.REQUIRED = new Strength(0, "required");
+Strength.STONG_PREFERRED = new Strength(1, "strongPreferred");
+Strength.PREFERRED = new Strength(2, "preferred");
+Strength.STRONG_DEFAULT = new Strength(3, "strongDefault");
+Strength.NORMAL = new Strength(4, "normal");
+Strength.WEAK_DEFAULT = new Strength(5, "weakDefault");
+Strength.WEAKEST = new Strength(6, "weakest");
+
+/* --- *
+ * C o n s t r a i n t
+ * --- */
+
+/**
+ * An abstract class representing a system-maintainable relationship
+ * (or "constraint") between a set of variables. A constraint supplies
+ * a strength instance variable; concrete subclasses provide a means
+ * of storing the constrained variables and other information required
+ * to represent a constraint.
+ */
+function Constraint(strength) {
+ this.strength = strength;
+}
+
+/**
+ * Activate this constraint and attempt to satisfy it.
+ */
+Constraint.prototype.addConstraint = function () {
+ this.addToGraph();
+ planner.incrementalAdd(this);
+}
+
+/**
+ * Attempt to find a way to enforce this constraint. If successful,
+ * record the solution, perhaps modifying the current dataflow
+ * graph. Answer the constraint that this constraint overrides, if
+ * there is one, or nil, if there isn't.
+ * Assume: I am not already satisfied.
+ */
+Constraint.prototype.satisfy = function (mark) {
+ this.chooseMethod(mark);
+ if (!this.isSatisfied()) {
+ if (this.strength == Strength.REQUIRED)
+ alert("Could not satisfy a required constraint!");
+ return null;
+ }
+ this.markInputs(mark);
+ var out = this.output();
+ var overridden = out.determinedBy;
+ if (overridden != null) overridden.markUnsatisfied();
+ out.determinedBy = this;
+ if (!planner.addPropagate(this, mark))
+ alert("Cycle encountered");
+ out.mark = mark;
+ return overridden;
+}
+
+Constraint.prototype.destroyConstraint = function () {
+ if (this.isSatisfied()) planner.incrementalRemove(this);
+ else this.removeFromGraph();
+}
+
+/**
+ * Normal constraints are not input constraints. An input constraint
+ * is one that depends on external state, such as the mouse, the
+ * keybord, a clock, or some arbitraty piece of imperative code.
+ */
+Constraint.prototype.isInput = function () {
+ return false;
+}
+
+/* --- *
+ * U n a r y C o n s t r a i n t
+ * --- */
+
+/**
+ * Abstract superclass for constraints having a single possible output
+ * variable.
+ */
+function UnaryConstraint(v, strength) {
+ UnaryConstraint.superConstructor.call(this, strength);
+ this.myOutput = v;
+ this.satisfied = false;
+ this.addConstraint();
+}
+
+UnaryConstraint.inheritsFrom(Constraint);
+
+/**
+ * Adds this constraint to the constraint graph
+ */
+UnaryConstraint.prototype.addToGraph = function () {
+ this.myOutput.addConstraint(this);
+ this.satisfied = false;
+}
+
+/**
+ * Decides if this constraint can be satisfied and records that
+ * decision.
+ */
+UnaryConstraint.prototype.chooseMethod = function (mark) {
+ this.satisfied = (this.myOutput.mark != mark)
+ && Strength.stronger(this.strength, this.myOutput.walkStrength);
+}
+
+/**
+ * Returns true if this constraint is satisfied in the current solution.
+ */
+UnaryConstraint.prototype.isSatisfied = function () {
+ return this.satisfied;
+}
+
+UnaryConstraint.prototype.markInputs = function (mark) {
+ // has no inputs
+}
+
+/**
+ * Returns the current output variable.
+ */
+UnaryConstraint.prototype.output = function () {
+ return this.myOutput;
+}
+
+/**
+ * Calculate the walkabout strength, the stay flag, and, if it is
+ * 'stay', the value for the current output of this constraint. Assume
+ * this constraint is satisfied.
+ */
+UnaryConstraint.prototype.recalculate = function () {
+ this.myOutput.walkStrength = this.strength;
+ this.myOutput.stay = !this.isInput();
+ if (this.myOutput.stay) this.execute(); // Stay optimization
+}
+
+/**
+ * Records that this constraint is unsatisfied
+ */
+UnaryConstraint.prototype.markUnsatisfied = function () {
+ this.satisfied = false;
+}
+
+UnaryConstraint.prototype.inputsKnown = function () {
+ return true;
+}
+
+UnaryConstraint.prototype.removeFromGraph = function () {
+ if (this.myOutput != null) this.myOutput.removeConstraint(this);
+ this.satisfied = false;
+}
+
+/* --- *
+ * S t a y C o n s t r a i n t
+ * --- */
+
+/**
+ * Variables that should, with some level of preference, stay the same.
+ * Planners may exploit the fact that instances, if satisfied, will not
+ * change their output during plan execution. This is called "stay
+ * optimization".
+ */
+function StayConstraint(v, str) {
+ StayConstraint.superConstructor.call(this, v, str);
+}
+
+StayConstraint.inheritsFrom(UnaryConstraint);
+
+StayConstraint.prototype.execute = function () {
+ // Stay constraints do nothing
+}
+
+/* --- *
+ * E d i t C o n s t r a i n t
+ * --- */
+
+/**
+ * A unary input constraint used to mark a variable that the client
+ * wishes to change.
+ */
+function EditConstraint(v, str) {
+ EditConstraint.superConstructor.call(this, v, str);
+}
+
+EditConstraint.inheritsFrom(UnaryConstraint);
+
+/**
+ * Edits indicate that a variable is to be changed by imperative code.
+ */
+EditConstraint.prototype.isInput = function () {
+ return true;
+}
+
+EditConstraint.prototype.execute = function () {
+ // Edit constraints do nothing
+}
+
+/* --- *
+ * B i n a r y C o n s t r a i n t
+ * --- */
+
+var Direction = new Object();
+Direction.NONE = 0;
+Direction.FORWARD = 1;
+Direction.BACKWARD = -1;
+
+/**
+ * Abstract superclass for constraints having two possible output
+ * variables.
+ */
+function BinaryConstraint(var1, var2, strength) {
+ BinaryConstraint.superConstructor.call(this, strength);
+ this.v1 = var1;
+ this.v2 = var2;
+ this.direction = Direction.NONE;
+ this.addConstraint();
+}
+
+BinaryConstraint.inheritsFrom(Constraint);
+
+/**
+ * Decides if this constraint can be satisfied and which way it
+ * should flow based on the relative strength of the variables related,
+ * and record that decision.
+ */
+BinaryConstraint.prototype.chooseMethod = function (mark) {
+ if (this.v1.mark == mark) {
+ this.direction = (this.v2.mark != mark && Strength.stronger(this.strength, this.v2.walkStrength))
+ ? Direction.FORWARD
+ : Direction.NONE;
+ }
+ if (this.v2.mark == mark) {
+ this.direction = (this.v1.mark != mark && Strength.stronger(this.strength, this.v1.walkStrength))
+ ? Direction.BACKWARD
+ : Direction.NONE;
+ }
+ if (Strength.weaker(this.v1.walkStrength, this.v2.walkStrength)) {
+ this.direction = Strength.stronger(this.strength, this.v1.walkStrength)
+ ? Direction.BACKWARD
+ : Direction.NONE;
+ } else {
+ this.direction = Strength.stronger(this.strength, this.v2.walkStrength)
+ ? Direction.FORWARD
+ : Direction.BACKWARD
+ }
+}
+
+/**
+ * Add this constraint to the constraint graph
+ */
+BinaryConstraint.prototype.addToGraph = function () {
+ this.v1.addConstraint(this);
+ this.v2.addConstraint(this);
+ this.direction = Direction.NONE;
+}
+
+/**
+ * Answer true if this constraint is satisfied in the current solution.
+ */
+BinaryConstraint.prototype.isSatisfied = function () {
+ return this.direction != Direction.NONE;
+}
+
+/**
+ * Mark the input variable with the given mark.
+ */
+BinaryConstraint.prototype.markInputs = function (mark) {
+ this.input().mark = mark;
+}
+
+/**
+ * Returns the current input variable
+ */
+BinaryConstraint.prototype.input = function () {
+ return (this.direction == Direction.FORWARD) ? this.v1 : this.v2;
+}
+
+/**
+ * Returns the current output variable
+ */
+BinaryConstraint.prototype.output = function () {
+ return (this.direction == Direction.FORWARD) ? this.v2 : this.v1;
+}
+
+/**
+ * Calculate the walkabout strength, the stay flag, and, if it is
+ * 'stay', the value for the current output of this
+ * constraint. Assume this constraint is satisfied.
+ */
+BinaryConstraint.prototype.recalculate = function () {
+ var ihn = this.input(), out = this.output();
+ out.walkStrength = Strength.weakestOf(this.strength, ihn.walkStrength);
+ out.stay = ihn.stay;
+ if (out.stay) this.execute();
+}
+
+/**
+ * Record the fact that this constraint is unsatisfied.
+ */
+BinaryConstraint.prototype.markUnsatisfied = function () {
+ this.direction = Direction.NONE;
+}
+
+BinaryConstraint.prototype.inputsKnown = function (mark) {
+ var i = this.input();
+ return i.mark == mark || i.stay || i.determinedBy == null;
+}
+
+BinaryConstraint.prototype.removeFromGraph = function () {
+ if (this.v1 != null) this.v1.removeConstraint(this);
+ if (this.v2 != null) this.v2.removeConstraint(this);
+ this.direction = Direction.NONE;
+}
+
+/* --- *
+ * S c a l e C o n s t r a i n t
+ * --- */
+
+/**
+ * Relates two variables by the linear scaling relationship: "v2 =
+ * (v1 * scale) + offset". Either v1 or v2 may be changed to maintain
+ * this relationship but the scale factor and offset are considered
+ * read-only.
+ */
+function ScaleConstraint(src, scale, offset, dest, strength) {
+ this.direction = Direction.NONE;
+ this.scale = scale;
+ this.offset = offset;
+ ScaleConstraint.superConstructor.call(this, src, dest, strength);
+}
+
+ScaleConstraint.inheritsFrom(BinaryConstraint);
+
+/**
+ * Adds this constraint to the constraint graph.
+ */
+ScaleConstraint.prototype.addToGraph = function () {
+ ScaleConstraint.superConstructor.prototype.addToGraph.call(this);
+ this.scale.addConstraint(this);
+ this.offset.addConstraint(this);
+}
+
+ScaleConstraint.prototype.removeFromGraph = function () {
+ ScaleConstraint.superConstructor.prototype.removeFromGraph.call(this);
+ if (this.scale != null) this.scale.removeConstraint(this);
+ if (this.offset != null) this.offset.removeConstraint(this);
+}
+
+ScaleConstraint.prototype.markInputs = function (mark) {
+ ScaleConstraint.superConstructor.prototype.markInputs.call(this, mark);
+ this.scale.mark = this.offset.mark = mark;
+}
+
+/**
+ * Enforce this constraint. Assume that it is satisfied.
+ */
+ScaleConstraint.prototype.execute = function () {
+ if (this.direction == Direction.FORWARD) {
+ this.v2.value = this.v1.value * this.scale.value + this.offset.value;
+ } else {
+ this.v1.value = (this.v2.value - this.offset.value) / this.scale.value;
+ }
+}
+
+/**
+ * Calculate the walkabout strength, the stay flag, and, if it is
+ * 'stay', the value for the current output of this constraint. Assume
+ * this constraint is satisfied.
+ */
+ScaleConstraint.prototype.recalculate = function () {
+ var ihn = this.input(), out = this.output();
+ out.walkStrength = Strength.weakestOf(this.strength, ihn.walkStrength);
+ out.stay = ihn.stay && this.scale.stay && this.offset.stay;
+ if (out.stay) this.execute();
+}
+
+/* --- *
+ * E q u a l i t y C o n s t r a i n t
+ * --- */
+
+/**
+ * Constrains two variables to have the same value.
+ */
+function EqualityConstraint(var1, var2, strength) {
+ EqualityConstraint.superConstructor.call(this, var1, var2, strength);
+}
+
+EqualityConstraint.inheritsFrom(BinaryConstraint);
+
+/**
+ * Enforce this constraint. Assume that it is satisfied.
+ */
+EqualityConstraint.prototype.execute = function () {
+ this.output().value = this.input().value;
+}
+
+/* --- *
+ * V a r i a b l e
+ * --- */
+
+/**
+ * A constrained variable. In addition to its value, it maintain the
+ * structure of the constraint graph, the current dataflow graph, and
+ * various parameters of interest to the DeltaBlue incremental
+ * constraint solver.
+ **/
+function Variable(name, initialValue) {
+ this.value = initialValue || 0;
+ this.constraints = new OrderedCollection();
+ this.determinedBy = null;
+ this.mark = 0;
+ this.walkStrength = Strength.WEAKEST;
+ this.stay = true;
+ this.name = name;
+}
+
+/**
+ * Add the given constraint to the set of all constraints that refer
+ * this variable.
+ */
+Variable.prototype.addConstraint = function (c) {
+ this.constraints.add(c);
+}
+
+/**
+ * Removes all traces of c from this variable.
+ */
+Variable.prototype.removeConstraint = function (c) {
+ this.constraints.remove(c);
+ if (this.determinedBy == c) this.determinedBy = null;
+}
+
+/* --- *
+ * P l a n n e r
+ * --- */
+
+/**
+ * The DeltaBlue planner
+ */
+function Planner() {
+ this.currentMark = 0;
+}
+
+/**
+ * Attempt to satisfy the given constraint and, if successful,
+ * incrementally update the dataflow graph. Details: If satifying
+ * the constraint is successful, it may override a weaker constraint
+ * on its output. The algorithm attempts to resatisfy that
+ * constraint using some other method. This process is repeated
+ * until either a) it reaches a variable that was not previously
+ * determined by any constraint or b) it reaches a constraint that
+ * is too weak to be satisfied using any of its methods. The
+ * variables of constraints that have been processed are marked with
+ * a unique mark value so that we know where we've been. This allows
+ * the algorithm to avoid getting into an infinite loop even if the
+ * constraint graph has an inadvertent cycle.
+ */
+Planner.prototype.incrementalAdd = function (c) {
+ var mark = this.newMark();
+ var overridden = c.satisfy(mark);
+ while (overridden != null)
+ overridden = overridden.satisfy(mark);
+}
+
+/**
+ * Entry point for retracting a constraint. Remove the given
+ * constraint and incrementally update the dataflow graph.
+ * Details: Retracting the given constraint may allow some currently
+ * unsatisfiable downstream constraint to be satisfied. We therefore collect
+ * a list of unsatisfied downstream constraints and attempt to
+ * satisfy each one in turn. This list is traversed by constraint
+ * strength, strongest first, as a heuristic for avoiding
+ * unnecessarily adding and then overriding weak constraints.
+ * Assume: c is satisfied.
+ */
+Planner.prototype.incrementalRemove = function (c) {
+ var out = c.output();
+ c.markUnsatisfied();
+ c.removeFromGraph();
+ var unsatisfied = this.removePropagateFrom(out);
+ var strength = Strength.REQUIRED;
+ do {
+ for (var i = 0; i < unsatisfied.size(); i++) {
+ var u = unsatisfied.at(i);
+ if (u.strength == strength)
+ this.incrementalAdd(u);
+ }
+ strength = strength.nextWeaker();
+ } while (strength != Strength.WEAKEST);
+}
+
+/**
+ * Select a previously unused mark value.
+ */
+Planner.prototype.newMark = function () {
+ return ++this.currentMark;
+}
+
+/**
+ * Extract a plan for resatisfaction starting from the given source
+ * constraints, usually a set of input constraints. This method
+ * assumes that stay optimization is desired; the plan will contain
+ * only constraints whose output variables are not stay. Constraints
+ * that do no computation, such as stay and edit constraints, are
+ * not included in the plan.
+ * Details: The outputs of a constraint are marked when it is added
+ * to the plan under construction. A constraint may be appended to
+ * the plan when all its input variables are known. A variable is
+ * known if either a) the variable is marked (indicating that has
+ * been computed by a constraint appearing earlier in the plan), b)
+ * the variable is 'stay' (i.e. it is a constant at plan execution
+ * time), or c) the variable is not determined by any
+ * constraint. The last provision is for past states of history
+ * variables, which are not stay but which are also not computed by
+ * any constraint.
+ * Assume: sources are all satisfied.
+ */
+Planner.prototype.makePlan = function (sources) {
+ var mark = this.newMark();
+ var plan = new Plan();
+ var todo = sources;
+ while (todo.size() > 0) {
+ var c = todo.removeFirst();
+ if (c.output().mark != mark && c.inputsKnown(mark)) {
+ plan.addConstraint(c);
+ c.output().mark = mark;
+ this.addConstraintsConsumingTo(c.output(), todo);
+ }
+ }
+ return plan;
+}
+
+/**
+ * Extract a plan for resatisfying starting from the output of the
+ * given constraints, usually a set of input constraints.
+ */
+Planner.prototype.extractPlanFromConstraints = function (constraints) {
+ var sources = new OrderedCollection();
+ for (var i = 0; i < constraints.size(); i++) {
+ var c = constraints.at(i);
+ if (c.isInput() && c.isSatisfied())
+ // not in plan already and eligible for inclusion
+ sources.add(c);
+ }
+ return this.makePlan(sources);
+}
+
+/**
+ * Recompute the walkabout strengths and stay flags of all variables
+ * downstream of the given constraint and recompute the actual
+ * values of all variables whose stay flag is true. If a cycle is
+ * detected, remove the given constraint and answer
+ * false. Otherwise, answer true.
+ * Details: Cycles are detected when a marked variable is
+ * encountered downstream of the given constraint. The sender is
+ * assumed to have marked the inputs of the given constraint with
+ * the given mark. Thus, encountering a marked node downstream of
+ * the output constraint means that there is a path from the
+ * constraint's output to one of its inputs.
+ */
+Planner.prototype.addPropagate = function (c, mark) {
+ var todo = new OrderedCollection();
+ todo.add(c);
+ while (todo.size() > 0) {
+ var d = todo.removeFirst();
+ if (d.output().mark == mark) {
+ this.incrementalRemove(c);
+ return false;
+ }
+ d.recalculate();
+ this.addConstraintsConsumingTo(d.output(), todo);
+ }
+ return true;
+}
+
+
+/**
+ * Update the walkabout strengths and stay flags of all variables
+ * downstream of the given constraint. Answer a collection of
+ * unsatisfied constraints sorted in order of decreasing strength.
+ */
+Planner.prototype.removePropagateFrom = function (out) {
+ out.determinedBy = null;
+ out.walkStrength = Strength.WEAKEST;
+ out.stay = true;
+ var unsatisfied = new OrderedCollection();
+ var todo = new OrderedCollection();
+ todo.add(out);
+ while (todo.size() > 0) {
+ var v = todo.removeFirst();
+ for (var i = 0; i < v.constraints.size(); i++) {
+ var c = v.constraints.at(i);
+ if (!c.isSatisfied())
+ unsatisfied.add(c);
+ }
+ var determining = v.determinedBy;
+ for (var i = 0; i < v.constraints.size(); i++) {
+ var next = v.constraints.at(i);
+ if (next != determining && next.isSatisfied()) {
+ next.recalculate();
+ todo.add(next.output());
+ }
+ }
+ }
+ return unsatisfied;
+}
+
+Planner.prototype.addConstraintsConsumingTo = function (v, coll) {
+ var determining = v.determinedBy;
+ var cc = v.constraints;
+ for (var i = 0; i < cc.size(); i++) {
+ var c = cc.at(i);
+ if (c != determining && c.isSatisfied())
+ coll.add(c);
+ }
+}
+
+/* --- *
+ * P l a n
+ * --- */
+
+/**
+ * A Plan is an ordered list of constraints to be executed in sequence
+ * to resatisfy all currently satisfiable constraints in the face of
+ * one or more changing inputs.
+ */
+function Plan() {
+ this.v = new OrderedCollection();
+}
+
+Plan.prototype.addConstraint = function (c) {
+ this.v.add(c);
+}
+
+Plan.prototype.size = function () {
+ return this.v.size();
+}
+
+Plan.prototype.constraintAt = function (index) {
+ return this.v.at(index);
+}
+
+Plan.prototype.execute = function () {
+ for (var i = 0; i < this.size(); i++) {
+ var c = this.constraintAt(i);
+ c.execute();
+ }
+}
+
+/* --- *
+ * M a i n
+ * --- */
+
+/**
+ * This is the standard DeltaBlue benchmark. A long chain of equality
+ * constraints is constructed with a stay constraint on one end. An
+ * edit constraint is then added to the opposite end and the time is
+ * measured for adding and removing this constraint, and extracting
+ * and executing a constraint satisfaction plan. There are two cases.
+ * In case 1, the added constraint is stronger than the stay
+ * constraint and values must propagate down the entire length of the
+ * chain. In case 2, the added constraint is weaker than the stay
+ * constraint so it cannot be accomodated. The cost in this case is,
+ * of course, very low. Typical situations lie somewhere between these
+ * two extremes.
+ */
+function chainTest(n) {
+ planner = new Planner();
+ var prev = null, first = null, last = null;
+
+ // Build chain of n equality constraints
+ for (var i = 0; i <= n; i++) {
+ var name = "v" + i;
+ var v = new Variable(name);
+ if (prev != null)
+ new EqualityConstraint(prev, v, Strength.REQUIRED);
+ if (i == 0) first = v;
+ if (i == n) last = v;
+ prev = v;
+ }
+
+ new StayConstraint(last, Strength.STRONG_DEFAULT);
+ var edit = new EditConstraint(first, Strength.PREFERRED);
+ var edits = new OrderedCollection();
+ edits.add(edit);
+ var plan = planner.extractPlanFromConstraints(edits);
+ for (var i = 0; i < 100; i++) {
+ first.value = i;
+ plan.execute();
+ if (last.value != i)
+ alert("Chain test failed.");
+ }
+}
+
+/**
+ * This test constructs a two sets of variables related to each
+ * other by a simple linear transformation (scale and offset). The
+ * time is measured to change a variable on either side of the
+ * mapping and to change the scale and offset factors.
+ */
+function projectionTest(n) {
+ planner = new Planner();
+ var scale = new Variable("scale", 10);
+ var offset = new Variable("offset", 1000);
+ var src = null, dst = null;
+
+ var dests = new OrderedCollection();
+ for (var i = 0; i < n; i++) {
+ src = new Variable("src" + i, i);
+ dst = new Variable("dst" + i, i);
+ dests.add(dst);
+ new StayConstraint(src, Strength.NORMAL);
+ new ScaleConstraint(src, scale, offset, dst, Strength.REQUIRED);
+ }
+
+ change(src, 17);
+ if (dst.value != 1170) alert("Projection 1 failed");
+ change(dst, 1050);
+ if (src.value != 5) alert("Projection 2 failed");
+ change(scale, 5);
+ for (var i = 0; i < n - 1; i++) {
+ if (dests.at(i).value != i * 5 + 1000)
+ alert("Projection 3 failed");
+ }
+ change(offset, 2000);
+ for (var i = 0; i < n - 1; i++) {
+ if (dests.at(i).value != i * 5 + 2000)
+ alert("Projection 4 failed");
+ }
+}
+
+function change(v, newValue) {
+ var edit = new EditConstraint(v, Strength.PREFERRED);
+ var edits = new OrderedCollection();
+ edits.add(edit);
+ var plan = planner.extractPlanFromConstraints(edits);
+ for (var i = 0; i < 10; i++) {
+ v.value = newValue;
+ plan.execute();
+ }
+ edit.destroyConstraint();
+}
+
+// Global variable holding the current planner.
+var planner = null;
+
+function deltaBlue() {
+ chainTest(100);
+ projectionTest(100);
+}
diff --git a/testing/talos/talos/tests/v8_7/earley-boyer.js b/testing/talos/talos/tests/v8_7/earley-boyer.js
new file mode 100644
index 0000000000..b2328d6ba1
--- /dev/null
+++ b/testing/talos/talos/tests/v8_7/earley-boyer.js
@@ -0,0 +1,4684 @@
+// This file is automatically generated by scheme2js, except for the
+// benchmark harness code at the beginning and end of the file.
+
+var EarleyBoyer = new BenchmarkSuite('EarleyBoyer', 666463, [
+ new Benchmark("Earley", function () { BgL_earleyzd2benchmarkzd2(); }),
+ new Benchmark("Boyer", function () { BgL_nboyerzd2benchmarkzd2(); })
+]);
+
+
+/************* GENERATED FILE - DO NOT EDIT *************/
+/************* GENERATED FILE - DO NOT EDIT *************/
+/************* GENERATED FILE - DO NOT EDIT *************/
+/************* GENERATED FILE - DO NOT EDIT *************/
+/************* GENERATED FILE - DO NOT EDIT *************/
+/************* GENERATED FILE - DO NOT EDIT *************/
+/************* GENERATED FILE - DO NOT EDIT *************/
+/************* GENERATED FILE - DO NOT EDIT *************/
+/*
+ * To use write/prints/... the default-output port has to be set first.
+ * Simply setting SC_DEFAULT_OUT and SC_ERROR_OUT to the desired values
+ * should do the trick.
+ * In the following example the std-out and error-port are redirected to
+ * a DIV.
+function initRuntime() {
+ function escapeHTML(s) {
+ var tmp = s;
+ tmp = tmp.replace(/&/g, "&amp;");
+ tmp = tmp.replace(/</g, "&lt;");
+ tmp = tmp.replace(/>/g, "&gt;");
+ tmp = tmp.replace(/ /g, "&nbsp;");
+ tmp = tmp.replace(/\n/g, "<br />");
+ tmp = tmp.replace(/\t/g, "&nbsp;&nbsp;&nbsp;&nbsp");
+ return tmp;
+
+ }
+
+ document.write("<div id='stdout'></div>");
+ SC_DEFAULT_OUT = new sc_GenericOutputPort(
+ function(s) {
+ var stdout = document.getElementById('stdout');
+ stdout.innerHTML = stdout.innerHTML + escapeHTML(s);
+ });
+ SC_ERROR_OUT = SC_DEFAULT_OUT;
+}
+*/
+
+
+function sc_print_debug() {
+ sc_print.apply(null, arguments);
+}
+/*** META ((export *js*)) */
+var sc_JS_GLOBALS = this;
+
+var __sc_LINE=-1;
+var __sc_FILE="";
+
+/*** META ((export #t)) */
+function sc_alert() {
+ var len = arguments.length;
+ var s = "";
+ var i;
+
+ for( i = 0; i < len; i++ ) {
+ s += sc_toDisplayString(arguments[ i ]);
+ }
+
+ return alert( s );
+}
+
+/*** META ((export #t)) */
+function sc_typeof( x ) {
+ return typeof x;
+}
+
+/*** META ((export #t)) */
+function sc_error() {
+ var a = [sc_jsstring2symbol("*error*")];
+ for (var i = 0; i < arguments.length; i++) {
+ a[i+1] = arguments[i];
+ }
+ throw a;
+}
+
+/*** META ((export #t)
+ (peephole (prefix "throw ")))
+*/
+function sc_raise(obj) {
+ throw obj;
+}
+
+/*** META ((export with-handler-lambda)) */
+function sc_withHandlerLambda(handler, body) {
+ try {
+ return body();
+ } catch(e) {
+ if (!e._internalException)
+ return handler(e);
+ else
+ throw e;
+ }
+}
+
+var sc_properties = new Object();
+
+/*** META ((export #t)) */
+function sc_putpropBang(sym, key, val) {
+ var ht = sc_properties[sym];
+ if (!ht) {
+ ht = new Object();
+ sc_properties[sym] = ht;
+ }
+ ht[key] = val;
+}
+
+/*** META ((export #t)) */
+function sc_getprop(sym, key) {
+ var ht = sc_properties[sym];
+ if (ht) {
+ if (key in ht)
+ return ht[key];
+ else
+ return false;
+ } else
+ return false;
+}
+
+/*** META ((export #t)) */
+function sc_rempropBang(sym, key) {
+ var ht = sc_properties[sym];
+ if (ht)
+ delete ht[key];
+}
+
+/*** META ((export #t)) */
+function sc_any2String(o) {
+ return jsstring2string(sc_toDisplayString(o));
+}
+
+/*** META ((export #t)
+ (peephole (infix 2 2 "==="))
+ (type bool))
+*/
+function sc_isEqv(o1, o2) {
+ return (o1 === o2);
+}
+
+/*** META ((export #t)
+ (peephole (infix 2 2 "==="))
+ (type bool))
+*/
+function sc_isEq(o1, o2) {
+ return (o1 === o2);
+}
+
+/*** META ((export #t)
+ (type bool))
+*/
+function sc_isNumber(n) {
+ return (typeof n === "number");
+}
+
+/*** META ((export #t)
+ (type bool))
+*/
+function sc_isComplex(n) {
+ return sc_isNumber(n);
+}
+
+/*** META ((export #t)
+ (type bool))
+*/
+function sc_isReal(n) {
+ return sc_isNumber(n);
+}
+
+/*** META ((export #t)
+ (type bool))
+*/
+function sc_isRational(n) {
+ return sc_isReal(n);
+}
+
+/*** META ((export #t)
+ (type bool))
+*/
+function sc_isInteger(n) {
+ return (parseInt(n) === n);
+}
+
+/*** META ((export #t)
+ (type bool)
+ (peephole (postfix ", false")))
+*/
+// we don't have exact numbers...
+function sc_isExact(n) {
+ return false;
+}
+
+/*** META ((export #t)
+ (peephole (postfix ", true"))
+ (type bool))
+*/
+function sc_isInexact(n) {
+ return true;
+}
+
+/*** META ((export = =fx =fl)
+ (type bool)
+ (peephole (infix 2 2 "===")))
+*/
+function sc_equal(x) {
+ for (var i = 1; i < arguments.length; i++)
+ if (x !== arguments[i])
+ return false;
+ return true;
+}
+
+/*** META ((export < <fx <fl)
+ (type bool)
+ (peephole (infix 2 2 "<")))
+*/
+function sc_less(x) {
+ for (var i = 1; i < arguments.length; i++) {
+ if (x >= arguments[i])
+ return false;
+ x = arguments[i];
+ }
+ return true;
+}
+
+/*** META ((export > >fx >fl)
+ (type bool)
+ (peephole (infix 2 2 ">")))
+*/
+function sc_greater(x, y) {
+ for (var i = 1; i < arguments.length; i++) {
+ if (x <= arguments[i])
+ return false;
+ x = arguments[i];
+ }
+ return true;
+}
+
+/*** META ((export <= <=fx <=fl)
+ (type bool)
+ (peephole (infix 2 2 "<=")))
+*/
+function sc_lessEqual(x, y) {
+ for (var i = 1; i < arguments.length; i++) {
+ if (x > arguments[i])
+ return false;
+ x = arguments[i];
+ }
+ return true;
+}
+
+/*** META ((export >= >=fl >=fx)
+ (type bool)
+ (peephole (infix 2 2 ">=")))
+*/
+function sc_greaterEqual(x, y) {
+ for (var i = 1; i < arguments.length; i++) {
+ if (x < arguments[i])
+ return false;
+ x = arguments[i];
+ }
+ return true;
+}
+
+/*** META ((export #t)
+ (type bool)
+ (peephole (postfix "=== 0")))
+*/
+function sc_isZero(x) {
+ return (x === 0);
+}
+
+/*** META ((export #t)
+ (type bool)
+ (peephole (postfix "> 0")))
+*/
+function sc_isPositive(x) {
+ return (x > 0);
+}
+
+/*** META ((export #t)
+ (type bool)
+ (peephole (postfix "< 0")))
+*/
+function sc_isNegative(x) {
+ return (x < 0);
+}
+
+/*** META ((export #t)
+ (type bool)
+ (peephole (postfix "%2===1")))
+*/
+function sc_isOdd(x) {
+ return (x % 2 === 1);
+}
+
+/*** META ((export #t)
+ (type bool)
+ (peephole (postfix "%2===0")))
+*/
+function sc_isEven(x) {
+ return (x % 2 === 0);
+}
+
+/*** META ((export #t)) */
+var sc_max = Math.max;
+/*** META ((export #t)) */
+var sc_min = Math.min;
+
+/*** META ((export + +fx +fl)
+ (peephole (infix 0 #f "+" "0")))
+*/
+function sc_plus() {
+ var sum = 0;
+ for (var i = 0; i < arguments.length; i++)
+ sum += arguments[i];
+ return sum;
+}
+
+/*** META ((export * *fx *fl)
+ (peephole (infix 0 #f "*" "1")))
+*/
+function sc_multi() {
+ var product = 1;
+ for (var i = 0; i < arguments.length; i++)
+ product *= arguments[i];
+ return product;
+}
+
+/*** META ((export - -fx -fl)
+ (peephole (minus)))
+*/
+function sc_minus(x) {
+ if (arguments.length === 1)
+ return -x;
+ else {
+ var res = x;
+ for (var i = 1; i < arguments.length; i++)
+ res -= arguments[i];
+ return res;
+ }
+}
+
+/*** META ((export / /fl)
+ (peephole (div)))
+*/
+function sc_div(x) {
+ if (arguments.length === 1)
+ return 1/x;
+ else {
+ var res = x;
+ for (var i = 1; i < arguments.length; i++)
+ res /= arguments[i];
+ return res;
+ }
+}
+
+/*** META ((export #t)) */
+var sc_abs = Math.abs;
+
+/*** META ((export quotient /fx)
+ (peephole (hole 2 "parseInt(" x "/" y ")")))
+*/
+function sc_quotient(x, y) {
+ return parseInt(x / y);
+}
+
+/*** META ((export #t)
+ (peephole (infix 2 2 "%")))
+*/
+function sc_remainder(x, y) {
+ return x % y;
+}
+
+/*** META ((export #t)
+ (peephole (modulo)))
+*/
+function sc_modulo(x, y) {
+ var remainder = x % y;
+ // if they don't have the same sign
+ if ((remainder * y) < 0)
+ return remainder + y;
+ else
+ return remainder;
+}
+
+function sc_euclid_gcd(a, b) {
+ var temp;
+ if (a === 0) return b;
+ if (b === 0) return a;
+ if (a < 0) {a = -a;};
+ if (b < 0) {b = -b;};
+ if (b > a) {temp = a; a = b; b = temp;};
+ while (true) {
+ a %= b;
+ if(a === 0) {return b;};
+ b %= a;
+ if(b === 0) {return a;};
+ };
+ return b;
+}
+
+/*** META ((export #t)) */
+function sc_gcd() {
+ var gcd = 0;
+ for (var i = 0; i < arguments.length; i++)
+ gcd = sc_euclid_gcd(gcd, arguments[i]);
+ return gcd;
+}
+
+/*** META ((export #t)) */
+function sc_lcm() {
+ var lcm = 1;
+ for (var i = 0; i < arguments.length; i++) {
+ var f = Math.round(arguments[i] / sc_euclid_gcd(arguments[i], lcm));
+ lcm *= Math.abs(f);
+ }
+ return lcm;
+}
+
+// LIMITATION: numerator and denominator don't make sense in floating point world.
+//var SC_MAX_DECIMALS = 1000000
+//
+// function sc_numerator(x) {
+// var rounded = Math.round(x * SC_MAX_DECIMALS);
+// return Math.round(rounded / sc_euclid_gcd(rounded, SC_MAX_DECIMALS));
+// }
+
+// function sc_denominator(x) {
+// var rounded = Math.round(x * SC_MAX_DECIMALS);
+// return Math.round(SC_MAX_DECIMALS / sc_euclid_gcd(rounded, SC_MAX_DECIMALS));
+// }
+
+/*** META ((export #t)) */
+var sc_floor = Math.floor;
+/*** META ((export #t)) */
+var sc_ceiling = Math.ceil;
+/*** META ((export #t)) */
+var sc_truncate = parseInt;
+/*** META ((export #t)) */
+var sc_round = Math.round;
+
+// LIMITATION: sc_rationalize doesn't make sense in a floating point world.
+
+/*** META ((export #t)) */
+var sc_exp = Math.exp;
+/*** META ((export #t)) */
+var sc_log = Math.log;
+/*** META ((export #t)) */
+var sc_sin = Math.sin;
+/*** META ((export #t)) */
+var sc_cos = Math.cos;
+/*** META ((export #t)) */
+var sc_tan = Math.tan;
+/*** META ((export #t)) */
+var sc_asin = Math.asin;
+/*** META ((export #t)) */
+var sc_acos = Math.acos;
+/*** META ((export #t)) */
+var sc_atan = Math.atan;
+
+/*** META ((export #t)) */
+var sc_sqrt = Math.sqrt;
+/*** META ((export #t)) */
+var sc_expt = Math.pow;
+
+// LIMITATION: we don't have complex numbers.
+// LIMITATION: the following functions are hence not implemented.
+// LIMITATION: make-rectangular, make-polar, real-part, imag-part, magnitude, angle
+// LIMITATION: 2 argument atan
+
+/*** META ((export #t)
+ (peephole (id)))
+*/
+function sc_exact2inexact(x) {
+ return x;
+}
+
+/*** META ((export #t)
+ (peephole (id)))
+*/
+function sc_inexact2exact(x) {
+ return x;
+}
+
+function sc_number2jsstring(x, radix) {
+ if (radix)
+ return x.toString(radix);
+ else
+ return x.toString();
+}
+
+function sc_jsstring2number(s, radix) {
+ if (s === "") return false;
+
+ if (radix) {
+ var t = parseInt(s, radix);
+ if (!t && t !== 0) return false;
+ // verify that each char is in range. (parseInt ignores leading
+ // white and trailing chars)
+ var allowedChars = "01234567890abcdefghijklmnopqrstuvwxyz".substring(0, radix+1);
+ if ((new RegExp("^["+allowedChars+"]*$", "i")).test(s))
+ return t;
+ else return false;
+ } else {
+ var t = +s; // does not ignore trailing chars.
+ if (!t && t !== 0) return false;
+ // simply verify that first char is not whitespace.
+ var c = s.charAt(0);
+ // if +c is 0, but the char is not "0", then we have a whitespace.
+ if (+c === 0 && c !== "0") return false;
+ return t;
+ }
+}
+
+/*** META ((export #t)
+ (type bool)
+ (peephole (not)))
+*/
+function sc_not(b) {
+ return b === false;
+}
+
+/*** META ((export #t)
+ (type bool))
+*/
+function sc_isBoolean(b) {
+ return (b === true) || (b === false);
+}
+
+function sc_Pair(car, cdr) {
+ this.car = car;
+ this.cdr = cdr;
+}
+
+sc_Pair.prototype.toString = function() {
+ return sc_toDisplayString(this);
+};
+sc_Pair.prototype.sc_toWriteOrDisplayString = function(writeOrDisplay) {
+ var current = this;
+
+ var res = "(";
+
+ while(true) {
+ res += writeOrDisplay(current.car);
+ if (sc_isPair(current.cdr)) {
+ res += " ";
+ current = current.cdr;
+ } else if (current.cdr !== null) {
+ res += " . " + writeOrDisplay(current.cdr);
+ break;
+ } else // current.cdr == null
+ break;
+ }
+
+ res += ")";
+
+ return res;
+};
+sc_Pair.prototype.sc_toDisplayString = function() {
+ return this.sc_toWriteOrDisplayString(sc_toDisplayString);
+};
+sc_Pair.prototype.sc_toWriteString = function() {
+ return this.sc_toWriteOrDisplayString(sc_toWriteString);
+};
+// sc_Pair.prototype.sc_toWriteCircleString in IO.js
+
+/*** META ((export #t)
+ (type bool)
+ (peephole (postfix " instanceof sc_Pair")))
+*/
+function sc_isPair(p) {
+ return (p instanceof sc_Pair);
+}
+
+function sc_isPairEqual(p1, p2, comp) {
+ return (comp(p1.car, p2.car) && comp(p1.cdr, p2.cdr));
+}
+
+/*** META ((export #t)
+ (peephole (hole 2 "new sc_Pair(" car ", " cdr ")")))
+*/
+function sc_cons(car, cdr) {
+ return new sc_Pair(car, cdr);
+}
+
+/*** META ((export cons*)) */
+function sc_consStar() {
+ var res = arguments[arguments.length - 1];
+ for (var i = arguments.length-2; i >= 0; i--)
+ res = new sc_Pair(arguments[i], res);
+ return res;
+}
+
+/*** META ((export #t)
+ (peephole (postfix ".car")))
+*/
+function sc_car(p) {
+ return p.car;
+}
+
+/*** META ((export #t)
+ (peephole (postfix ".cdr")))
+*/
+function sc_cdr(p) {
+ return p.cdr;
+}
+
+/*** META ((export #t)
+ (peephole (hole 2 p ".car = " val)))
+*/
+function sc_setCarBang(p, val) {
+ p.car = val;
+}
+
+/*** META ((export #t)
+ (peephole (hole 2 p ".cdr = " val)))
+*/
+function sc_setCdrBang(p, val) {
+ p.cdr = val;
+}
+
+/*** META ((export #t)
+ (peephole (postfix ".car.car")))
+*/
+function sc_caar(p) { return p.car.car; }
+/*** META ((export #t)
+ (peephole (postfix ".cdr.car")))
+*/
+function sc_cadr(p) { return p.cdr.car; }
+/*** META ((export #t)
+ (peephole (postfix ".car.cdr")))
+*/
+function sc_cdar(p) { return p.car.cdr; }
+/*** META ((export #t)
+ (peephole (postfix ".cdr.cdr")))
+*/
+function sc_cddr(p) { return p.cdr.cdr; }
+/*** META ((export #t)
+ (peephole (postfix ".car.car.car")))
+*/
+function sc_caaar(p) { return p.car.car.car; }
+/*** META ((export #t)
+ (peephole (postfix ".car.cdr.car")))
+*/
+function sc_cadar(p) { return p.car.cdr.car; }
+/*** META ((export #t)
+ (peephole (postfix ".cdr.car.car")))
+*/
+function sc_caadr(p) { return p.cdr.car.car; }
+/*** META ((export #t)
+ (peephole (postfix ".cdr.cdr.car")))
+*/
+function sc_caddr(p) { return p.cdr.cdr.car; }
+/*** META ((export #t)
+ (peephole (postfix ".car.car.cdr")))
+*/
+function sc_cdaar(p) { return p.car.car.cdr; }
+/*** META ((export #t)
+ (peephole (postfix ".cdr.car.cdr")))
+*/
+function sc_cdadr(p) { return p.cdr.car.cdr; }
+/*** META ((export #t)
+ (peephole (postfix ".car.cdr.cdr")))
+*/
+function sc_cddar(p) { return p.car.cdr.cdr; }
+/*** META ((export #t)
+ (peephole (postfix ".cdr.cdr.cdr")))
+*/
+function sc_cdddr(p) { return p.cdr.cdr.cdr; }
+/*** META ((export #t)
+ (peephole (postfix ".car.car.car.car")))
+*/
+function sc_caaaar(p) { return p.car.car.car.car; }
+/*** META ((export #t)
+ (peephole (postfix ".car.cdr.car.car")))
+*/
+function sc_caadar(p) { return p.car.cdr.car.car; }
+/*** META ((export #t)
+ (peephole (postfix ".cdr.car.car.car")))
+*/
+function sc_caaadr(p) { return p.cdr.car.car.car; }
+/*** META ((export #t)
+ (peephole (postfix ".cdr.cdr.car.car")))
+*/
+function sc_caaddr(p) { return p.cdr.cdr.car.car; }
+/*** META ((export #t)
+ (peephole (postfix ".car.car.car.cdr")))
+*/
+function sc_cdaaar(p) { return p.car.car.car.cdr; }
+/*** META ((export #t)
+ (peephole (postfix ".car.cdr.car.cdr")))
+*/
+function sc_cdadar(p) { return p.car.cdr.car.cdr; }
+/*** META ((export #t)
+ (peephole (postfix ".cdr.car.car.cdr")))
+*/
+function sc_cdaadr(p) { return p.cdr.car.car.cdr; }
+/*** META ((export #t)
+ (peephole (postfix ".cdr.cdr.car.cdr")))
+*/
+function sc_cdaddr(p) { return p.cdr.cdr.car.cdr; }
+/*** META ((export #t)
+ (peephole (postfix ".car.car.cdr.car")))
+*/
+function sc_cadaar(p) { return p.car.car.cdr.car; }
+/*** META ((export #t)
+ (peephole (postfix ".car.cdr.cdr.car")))
+*/
+function sc_caddar(p) { return p.car.cdr.cdr.car; }
+/*** META ((export #t)
+ (peephole (postfix ".cdr.car.cdr.car")))
+*/
+function sc_cadadr(p) { return p.cdr.car.cdr.car; }
+/*** META ((export #t)
+ (peephole (postfix ".cdr.cdr.cdr.car")))
+*/
+function sc_cadddr(p) { return p.cdr.cdr.cdr.car; }
+/*** META ((export #t)
+ (peephole (postfix ".car.car.cdr.cdr")))
+*/
+function sc_cddaar(p) { return p.car.car.cdr.cdr; }
+/*** META ((export #t)
+ (peephole (postfix ".car.cdr.cdr.cdr")))
+*/
+function sc_cdddar(p) { return p.car.cdr.cdr.cdr; }
+/*** META ((export #t)
+ (peephole (postfix ".cdr.car.cdr.cdr")))
+*/
+function sc_cddadr(p) { return p.cdr.car.cdr.cdr; }
+/*** META ((export #t)
+ (peephole (postfix ".cdr.cdr.cdr.cdr")))
+*/
+function sc_cddddr(p) { return p.cdr.cdr.cdr.cdr; }
+
+/*** META ((export #t)) */
+function sc_lastPair(l) {
+ if (!sc_isPair(l)) sc_error("sc_lastPair: pair expected");
+ var res = l;
+ var cdr = l.cdr;
+ while (sc_isPair(cdr)) {
+ res = cdr;
+ cdr = res.cdr;
+ }
+ return res;
+}
+
+/*** META ((export #t)
+ (type bool)
+ (peephole (postfix " === null")))
+*/
+function sc_isNull(o) {
+ return (o === null);
+}
+
+/*** META ((export #t)
+ (type bool))
+*/
+function sc_isList(o) {
+ var rabbit;
+ var turtle;
+
+ var rabbit = o;
+ var turtle = o;
+ while (true) {
+ if (rabbit === null ||
+ (rabbit instanceof sc_Pair && rabbit.cdr === null))
+ return true; // end of list
+ else if ((rabbit instanceof sc_Pair) &&
+ (rabbit.cdr instanceof sc_Pair)) {
+ rabbit = rabbit.cdr.cdr;
+ turtle = turtle.cdr;
+ if (rabbit === turtle) return false; // cycle
+ } else
+ return false; // not pair
+ }
+}
+
+/*** META ((export #t)) */
+function sc_list() {
+ var res = null;
+ var a = arguments;
+ for (var i = a.length-1; i >= 0; i--)
+ res = new sc_Pair(a[i], res);
+ return res;
+}
+
+/*** META ((export #t)) */
+function sc_iota(num, init) {
+ var res = null;
+ if (!init) init = 0;
+ for (var i = num - 1; i >= 0; i--)
+ res = new sc_Pair(i + init, res);
+ return res;
+}
+
+/*** META ((export #t)) */
+function sc_makeList(nbEls, fill) {
+ var res = null;
+ for (var i = 0; i < nbEls; i++)
+ res = new sc_Pair(fill, res);
+ return res;
+}
+
+/*** META ((export #t)) */
+function sc_length(l) {
+ var res = 0;
+ while (l !== null) {
+ res++;
+ l = l.cdr;
+ }
+ return res;
+}
+
+/*** META ((export #t)) */
+function sc_remq(o, l) {
+ var dummy = { cdr : null };
+ var tail = dummy;
+ while (l !== null) {
+ if (l.car !== o) {
+ tail.cdr = sc_cons(l.car, null);
+ tail = tail.cdr;
+ }
+ l = l.cdr;
+ }
+ return dummy.cdr;
+}
+
+/*** META ((export #t)) */
+function sc_remqBang(o, l) {
+ var dummy = { cdr : null };
+ var tail = dummy;
+ var needsAssig = true;
+ while (l !== null) {
+ if (l.car === o) {
+ needsAssig = true;
+ } else {
+ if (needsAssig) {
+ tail.cdr = l;
+ needsAssig = false;
+ }
+ tail = l;
+ }
+ l = l.cdr;
+ }
+ tail.cdr = null;
+ return dummy.cdr;
+}
+
+/*** META ((export #t)) */
+function sc_delete(o, l) {
+ var dummy = { cdr : null };
+ var tail = dummy;
+ while (l !== null) {
+ if (!sc_isEqual(l.car, o)) {
+ tail.cdr = sc_cons(l.car, null);
+ tail = tail.cdr;
+ }
+ l = l.cdr;
+ }
+ return dummy.cdr;
+}
+
+/*** META ((export #t)) */
+function sc_deleteBang(o, l) {
+ var dummy = { cdr : null };
+ var tail = dummy;
+ var needsAssig = true;
+ while (l !== null) {
+ if (sc_isEqual(l.car, o)) {
+ needsAssig = true;
+ } else {
+ if (needsAssig) {
+ tail.cdr = l;
+ needsAssig = false;
+ }
+ tail = l;
+ }
+ l = l.cdr;
+ }
+ tail.cdr = null;
+ return dummy.cdr;
+}
+
+function sc_reverseAppendBang(l1, l2) {
+ var res = l2;
+ while (l1 !== null) {
+ var tmp = res;
+ res = l1;
+ l1 = l1.cdr;
+ res.cdr = tmp;
+ }
+ return res;
+}
+
+function sc_dualAppend(l1, l2) {
+ if (l1 === null) return l2;
+ if (l2 === null) return l1;
+ var rev = sc_reverse(l1);
+ return sc_reverseAppendBang(rev, l2);
+}
+
+/*** META ((export #t)) */
+function sc_append() {
+ if (arguments.length === 0)
+ return null;
+ var res = arguments[arguments.length - 1];
+ for (var i = arguments.length - 2; i >= 0; i--)
+ res = sc_dualAppend(arguments[i], res);
+ return res;
+}
+
+function sc_dualAppendBang(l1, l2) {
+ if (l1 === null) return l2;
+ if (l2 === null) return l1;
+ var tmp = l1;
+ while (tmp.cdr !== null) tmp=tmp.cdr;
+ tmp.cdr = l2;
+ return l1;
+}
+
+/*** META ((export #t)) */
+function sc_appendBang() {
+ var res = null;
+ for (var i = 0; i < arguments.length; i++)
+ res = sc_dualAppendBang(res, arguments[i]);
+ return res;
+}
+
+/*** META ((export #t)) */
+function sc_reverse(l1) {
+ var res = null;
+ while (l1 !== null) {
+ res = sc_cons(l1.car, res);
+ l1 = l1.cdr;
+ }
+ return res;
+}
+
+/*** META ((export #t)) */
+function sc_reverseBang(l) {
+ return sc_reverseAppendBang(l, null);
+}
+
+/*** META ((export #t)) */
+function sc_listTail(l, k) {
+ var res = l;
+ for (var i = 0; i < k; i++) {
+ res = res.cdr;
+ }
+ return res;
+}
+
+/*** META ((export #t)) */
+function sc_listRef(l, k) {
+ return sc_listTail(l, k).car;
+}
+
+/* // unoptimized generic versions
+function sc_memX(o, l, comp) {
+ while (l != null) {
+ if (comp(l.car, o))
+ return l;
+ l = l.cdr;
+ }
+ return false;
+}
+function sc_memq(o, l) { return sc_memX(o, l, sc_isEq); }
+function sc_memv(o, l) { return sc_memX(o, l, sc_isEqv); }
+function sc_member(o, l) { return sc_memX(o, l, sc_isEqual); }
+*/
+
+/* optimized versions */
+/*** META ((export #t)) */
+function sc_memq(o, l) {
+ while (l !== null) {
+ if (l.car === o)
+ return l;
+ l = l.cdr;
+ }
+ return false;
+}
+/*** META ((export #t)) */
+function sc_memv(o, l) {
+ while (l !== null) {
+ if (l.car === o)
+ return l;
+ l = l.cdr;
+ }
+ return false;
+}
+/*** META ((export #t)) */
+function sc_member(o, l) {
+ while (l !== null) {
+ if (sc_isEqual(l.car,o))
+ return l;
+ l = l.cdr;
+ }
+ return false;
+}
+
+/* // generic unoptimized versions
+function sc_assX(o, al, comp) {
+ while (al != null) {
+ if (comp(al.car.car, o))
+ return al.car;
+ al = al.cdr;
+ }
+ return false;
+}
+function sc_assq(o, al) { return sc_assX(o, al, sc_isEq); }
+function sc_assv(o, al) { return sc_assX(o, al, sc_isEqv); }
+function sc_assoc(o, al) { return sc_assX(o, al, sc_isEqual); }
+*/
+// optimized versions
+/*** META ((export #t)) */
+function sc_assq(o, al) {
+ while (al !== null) {
+ if (al.car.car === o)
+ return al.car;
+ al = al.cdr;
+ }
+ return false;
+}
+/*** META ((export #t)) */
+function sc_assv(o, al) {
+ while (al !== null) {
+ if (al.car.car === o)
+ return al.car;
+ al = al.cdr;
+ }
+ return false;
+}
+/*** META ((export #t)) */
+function sc_assoc(o, al) {
+ while (al !== null) {
+ if (sc_isEqual(al.car.car, o))
+ return al.car;
+ al = al.cdr;
+ }
+ return false;
+}
+
+/* can be used for mutable strings and characters */
+function sc_isCharStringEqual(cs1, cs2) { return cs1.val === cs2.val; }
+function sc_isCharStringLess(cs1, cs2) { return cs1.val < cs2.val; }
+function sc_isCharStringGreater(cs1, cs2) { return cs1.val > cs2.val; }
+function sc_isCharStringLessEqual(cs1, cs2) { return cs1.val <= cs2.val; }
+function sc_isCharStringGreaterEqual(cs1, cs2) { return cs1.val >= cs2.val; }
+function sc_isCharStringCIEqual(cs1, cs2)
+ { return cs1.val.toLowerCase() === cs2.val.toLowerCase(); }
+function sc_isCharStringCILess(cs1, cs2)
+ { return cs1.val.toLowerCase() < cs2.val.toLowerCase(); }
+function sc_isCharStringCIGreater(cs1, cs2)
+ { return cs1.val.toLowerCase() > cs2.val.toLowerCase(); }
+function sc_isCharStringCILessEqual(cs1, cs2)
+ { return cs1.val.toLowerCase() <= cs2.val.toLowerCase(); }
+function sc_isCharStringCIGreaterEqual(cs1, cs2)
+ { return cs1.val.toLowerCase() >= cs2.val.toLowerCase(); }
+
+
+
+
+function sc_Char(c) {
+ var cached = sc_Char.lazy[c];
+ if (cached)
+ return cached;
+ this.val = c;
+ sc_Char.lazy[c] = this;
+ // add return, so FF does not complain.
+ return undefined;
+}
+sc_Char.lazy = new Object();
+// thanks to Eric
+sc_Char.char2readable = {
+ "\000": "#\\null",
+ "\007": "#\\bell",
+ "\010": "#\\backspace",
+ "\011": "#\\tab",
+ "\012": "#\\newline",
+ "\014": "#\\page",
+ "\015": "#\\return",
+ "\033": "#\\escape",
+ "\040": "#\\space",
+ "\177": "#\\delete",
+
+ /* poeticless names */
+ "\001": "#\\soh",
+ "\002": "#\\stx",
+ "\003": "#\\etx",
+ "\004": "#\\eot",
+ "\005": "#\\enq",
+ "\006": "#\\ack",
+
+ "\013": "#\\vt",
+ "\016": "#\\so",
+ "\017": "#\\si",
+
+ "\020": "#\\dle",
+ "\021": "#\\dc1",
+ "\022": "#\\dc2",
+ "\023": "#\\dc3",
+ "\024": "#\\dc4",
+ "\025": "#\\nak",
+ "\026": "#\\syn",
+ "\027": "#\\etb",
+
+ "\030": "#\\can",
+ "\031": "#\\em",
+ "\032": "#\\sub",
+ "\033": "#\\esc",
+ "\034": "#\\fs",
+ "\035": "#\\gs",
+ "\036": "#\\rs",
+ "\037": "#\\us"};
+
+sc_Char.readable2char = {
+ "null": "\000",
+ "bell": "\007",
+ "backspace": "\010",
+ "tab": "\011",
+ "newline": "\012",
+ "page": "\014",
+ "return": "\015",
+ "escape": "\033",
+ "space": "\040",
+ "delete": "\000",
+ "soh": "\001",
+ "stx": "\002",
+ "etx": "\003",
+ "eot": "\004",
+ "enq": "\005",
+ "ack": "\006",
+ "bel": "\007",
+ "bs": "\010",
+ "ht": "\011",
+ "nl": "\012",
+ "vt": "\013",
+ "np": "\014",
+ "cr": "\015",
+ "so": "\016",
+ "si": "\017",
+ "dle": "\020",
+ "dc1": "\021",
+ "dc2": "\022",
+ "dc3": "\023",
+ "dc4": "\024",
+ "nak": "\025",
+ "syn": "\026",
+ "etb": "\027",
+ "can": "\030",
+ "em": "\031",
+ "sub": "\032",
+ "esc": "\033",
+ "fs": "\034",
+ "gs": "\035",
+ "rs": "\036",
+ "us": "\037",
+ "sp": "\040",
+ "del": "\177"};
+
+sc_Char.prototype.toString = function() {
+ return this.val;
+};
+// sc_toDisplayString == toString
+sc_Char.prototype.sc_toWriteString = function() {
+ var entry = sc_Char.char2readable[this.val];
+ if (entry)
+ return entry;
+ else
+ return "#\\" + this.val;
+};
+
+/*** META ((export #t)
+ (type bool)
+ (peephole (postfix "instanceof sc_Char")))
+*/
+function sc_isChar(c) {
+ return (c instanceof sc_Char);
+}
+
+/*** META ((export char=?)
+ (type bool)
+ (peephole (hole 2 c1 ".val === " c2 ".val")))
+*/
+var sc_isCharEqual = sc_isCharStringEqual;
+/*** META ((export char<?)
+ (type bool)
+ (peephole (hole 2 c1 ".val < " c2 ".val")))
+*/
+var sc_isCharLess = sc_isCharStringLess;
+/*** META ((export char>?)
+ (type bool)
+ (peephole (hole 2 c1 ".val > " c2 ".val")))
+*/
+var sc_isCharGreater = sc_isCharStringGreater;
+/*** META ((export char<=?)
+ (type bool)
+ (peephole (hole 2 c1 ".val <= " c2 ".val")))
+*/
+var sc_isCharLessEqual = sc_isCharStringLessEqual;
+/*** META ((export char>=?)
+ (type bool)
+ (peephole (hole 2 c1 ".val >= " c2 ".val")))
+*/
+var sc_isCharGreaterEqual = sc_isCharStringGreaterEqual;
+/*** META ((export char-ci=?)
+ (type bool)
+ (peephole (hole 2 c1 ".val.toLowerCase() === " c2 ".val.toLowerCase()")))
+*/
+var sc_isCharCIEqual = sc_isCharStringCIEqual;
+/*** META ((export char-ci<?)
+ (type bool)
+ (peephole (hole 2 c1 ".val.toLowerCase() < " c2 ".val.toLowerCase()")))
+*/
+var sc_isCharCILess = sc_isCharStringCILess;
+/*** META ((export char-ci>?)
+ (type bool)
+ (peephole (hole 2 c1 ".val.toLowerCase() > " c2 ".val.toLowerCase()")))
+*/
+var sc_isCharCIGreater = sc_isCharStringCIGreater;
+/*** META ((export char-ci<=?)
+ (type bool)
+ (peephole (hole 2 c1 ".val.toLowerCase() <= " c2 ".val.toLowerCase()")))
+*/
+var sc_isCharCILessEqual = sc_isCharStringCILessEqual;
+/*** META ((export char-ci>=?)
+ (type bool)
+ (peephole (hole 2 c1 ".val.toLowerCase() >= " c2 ".val.toLowerCase()")))
+*/
+var sc_isCharCIGreaterEqual = sc_isCharStringCIGreaterEqual;
+
+var SC_NUMBER_CLASS = "0123456789";
+var SC_WHITESPACE_CLASS = ' \r\n\t\f';
+var SC_LOWER_CLASS = 'abcdefghijklmnopqrstuvwxyz';
+var SC_UPPER_CLASS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
+
+function sc_isCharOfClass(c, cl) { return (cl.indexOf(c) != -1); }
+/*** META ((export #t)
+ (type bool))
+*/
+function sc_isCharAlphabetic(c)
+ { return sc_isCharOfClass(c.val, SC_LOWER_CLASS) ||
+ sc_isCharOfClass(c.val, SC_UPPER_CLASS); }
+/*** META ((export #t)
+ (type bool)
+ (peephole (hole 1 "SC_NUMBER_CLASS.indexOf(" c ".val) != -1")))
+*/
+function sc_isCharNumeric(c)
+ { return sc_isCharOfClass(c.val, SC_NUMBER_CLASS); }
+/*** META ((export #t)
+ (type bool))
+*/
+function sc_isCharWhitespace(c) {
+ var tmp = c.val;
+ return tmp === " " || tmp === "\r" || tmp === "\n" || tmp === "\t" || tmp === "\f";
+}
+/*** META ((export #t)
+ (type bool)
+ (peephole (hole 1 "SC_UPPER_CLASS.indexOf(" c ".val) != -1")))
+*/
+function sc_isCharUpperCase(c)
+ { return sc_isCharOfClass(c.val, SC_UPPER_CLASS); }
+/*** META ((export #t)
+ (type bool)
+ (peephole (hole 1 "SC_LOWER_CLASS.indexOf(" c ".val) != -1")))
+*/
+function sc_isCharLowerCase(c)
+ { return sc_isCharOfClass(c.val, SC_LOWER_CLASS); }
+
+/*** META ((export #t)
+ (peephole (postfix ".val.charCodeAt(0)")))
+*/
+function sc_char2integer(c)
+ { return c.val.charCodeAt(0); }
+/*** META ((export #t)
+ (peephole (hole 1 "new sc_Char(String.fromCharCode(" n "))")))
+*/
+function sc_integer2char(n)
+ { return new sc_Char(String.fromCharCode(n)); }
+
+/*** META ((export #t)
+ (peephole (hole 1 "new sc_Char(" c ".val.toUpperCase())")))
+*/
+function sc_charUpcase(c)
+ { return new sc_Char(c.val.toUpperCase()); }
+/*** META ((export #t)
+ (peephole (hole 1 "new sc_Char(" c ".val.toLowerCase())")))
+*/
+function sc_charDowncase(c)
+ { return new sc_Char(c.val.toLowerCase()); }
+
+function sc_makeJSStringOfLength(k, c) {
+ var fill;
+ if (c === undefined)
+ fill = " ";
+ else
+ fill = c;
+ var res = "";
+ var len = 1;
+ // every round doubles the size of fill.
+ while (k >= len) {
+ if (k & len)
+ res = res.concat(fill);
+ fill = fill.concat(fill);
+ len *= 2;
+ }
+ return res;
+}
+
+function sc_makejsString(k, c) {
+ var fill;
+ if (c)
+ fill = c.val;
+ else
+ fill = " ";
+ return sc_makeJSStringOfLength(k, fill);
+}
+
+function sc_jsstring2list(s) {
+ var res = null;
+ for (var i = s.length - 1; i >= 0; i--)
+ res = sc_cons(new sc_Char(s.charAt(i)), res);
+ return res;
+}
+
+function sc_list2jsstring(l) {
+ var a = new Array();
+ while(l !== null) {
+ a.push(l.car.val);
+ l = l.cdr;
+ }
+ return "".concat.apply("", a);
+}
+
+var sc_Vector = Array;
+
+sc_Vector.prototype.sc_toWriteOrDisplayString = function(writeOrDisplay) {
+ if (this.length === 0) return "#()";
+
+ var res = "#(" + writeOrDisplay(this[0]);
+ for (var i = 1; i < this.length; i++)
+ res += " " + writeOrDisplay(this[i]);
+ res += ")";
+ return res;
+};
+sc_Vector.prototype.sc_toDisplayString = function() {
+ return this.sc_toWriteOrDisplayString(sc_toDisplayString);
+};
+sc_Vector.prototype.sc_toWriteString = function() {
+ return this.sc_toWriteOrDisplayString(sc_toWriteString);
+};
+
+/*** META ((export vector? array?)
+ (type bool)
+ (peephole (postfix " instanceof sc_Vector")))
+*/
+function sc_isVector(v) {
+ return (v instanceof sc_Vector);
+}
+
+// only applies to vectors
+function sc_isVectorEqual(v1, v2, comp) {
+ if (v1.length !== v2.length) return false;
+ for (var i = 0; i < v1.length; i++)
+ if (!comp(v1[i], v2[i])) return false;
+ return true;
+}
+
+/*** META ((export make-vector make-array)) */
+function sc_makeVector(size, fill) {
+ var a = new sc_Vector(size);
+ if (fill !== undefined)
+ sc_vectorFillBang(a, fill);
+ return a;
+}
+
+/*** META ((export vector array)
+ (peephole (vector)))
+*/
+function sc_vector() {
+ var a = new sc_Vector();
+ for (var i = 0; i < arguments.length; i++)
+ a.push(arguments[i]);
+ return a;
+}
+
+/*** META ((export vector-length array-length)
+ (peephole (postfix ".length")))
+*/
+function sc_vectorLength(v) {
+ return v.length;
+}
+
+/*** META ((export vector-ref array-ref)
+ (peephole (hole 2 v "[" pos "]")))
+*/
+function sc_vectorRef(v, pos) {
+ return v[pos];
+}
+
+/*** META ((export vector-set! array-set!)
+ (peephole (hole 3 v "[" pos "] = " val)))
+*/
+function sc_vectorSetBang(v, pos, val) {
+ v[pos] = val;
+}
+
+/*** META ((export vector->list array->list)) */
+function sc_vector2list(a) {
+ var res = null;
+ for (var i = a.length-1; i >= 0; i--)
+ res = sc_cons(a[i], res);
+ return res;
+}
+
+/*** META ((export list->vector list->array)) */
+function sc_list2vector(l) {
+ var a = new sc_Vector();
+ while(l !== null) {
+ a.push(l.car);
+ l = l.cdr;
+ }
+ return a;
+}
+
+/*** META ((export vector-fill! array-fill!)) */
+function sc_vectorFillBang(a, fill) {
+ for (var i = 0; i < a.length; i++)
+ a[i] = fill;
+}
+
+
+/*** META ((export #t)) */
+function sc_copyVector(a, len) {
+ if (len <= a.length)
+ return a.slice(0, len);
+ else {
+ var tmp = a.concat();
+ tmp.length = len;
+ return tmp;
+ }
+}
+
+/*** META ((export #t)
+ (peephole (hole 3 a ".slice(" start "," end ")")))
+*/
+function sc_vectorCopy(a, start, end) {
+ return a.slice(start, end);
+}
+
+/*** META ((export #t)) */
+function sc_vectorCopyBang(target, tstart, source, sstart, send) {
+ if (!sstart) sstart = 0;
+ if (!send) send = source.length;
+
+ // if target == source we don't want to overwrite not yet copied elements.
+ if (tstart <= sstart) {
+ for (var i = tstart, j = sstart; j < send; i++, j++) {
+ target[i] = source[j];
+ }
+ } else {
+ var diff = send - sstart;
+ for (var i = tstart + diff - 1, j = send - 1;
+ j >= sstart;
+ i--, j--) {
+ target[i] = source[j];
+ }
+ }
+ return target;
+}
+
+/*** META ((export #t)
+ (type bool)
+ (peephole (hole 1 "typeof " o " === 'function'")))
+*/
+function sc_isProcedure(o) {
+ return (typeof o === "function");
+}
+
+/*** META ((export #t)) */
+function sc_apply(proc) {
+ var args = new Array();
+ // first part of arguments are not in list-form.
+ for (var i = 1; i < arguments.length - 1; i++)
+ args.push(arguments[i]);
+ var l = arguments[arguments.length - 1];
+ while (l !== null) {
+ args.push(l.car);
+ l = l.cdr;
+ }
+ return proc.apply(null, args);
+}
+
+/*** META ((export #t)) */
+function sc_map(proc, l1) {
+ if (l1 === undefined)
+ return null;
+ // else
+ var nbApplyArgs = arguments.length - 1;
+ var applyArgs = new Array(nbApplyArgs);
+ var revres = null;
+ while (l1 !== null) {
+ for (var i = 0; i < nbApplyArgs; i++) {
+ applyArgs[i] = arguments[i + 1].car;
+ arguments[i + 1] = arguments[i + 1].cdr;
+ }
+ revres = sc_cons(proc.apply(null, applyArgs), revres);
+ }
+ return sc_reverseAppendBang(revres, null);
+}
+
+/*** META ((export #t)) */
+function sc_mapBang(proc, l1) {
+ if (l1 === undefined)
+ return null;
+ // else
+ var l1_orig = l1;
+ var nbApplyArgs = arguments.length - 1;
+ var applyArgs = new Array(nbApplyArgs);
+ while (l1 !== null) {
+ var tmp = l1;
+ for (var i = 0; i < nbApplyArgs; i++) {
+ applyArgs[i] = arguments[i + 1].car;
+ arguments[i + 1] = arguments[i + 1].cdr;
+ }
+ tmp.car = proc.apply(null, applyArgs);
+ }
+ return l1_orig;
+}
+
+/*** META ((export #t)) */
+function sc_forEach(proc, l1) {
+ if (l1 === undefined)
+ return undefined;
+ // else
+ var nbApplyArgs = arguments.length - 1;
+ var applyArgs = new Array(nbApplyArgs);
+ while (l1 !== null) {
+ for (var i = 0; i < nbApplyArgs; i++) {
+ applyArgs[i] = arguments[i + 1].car;
+ arguments[i + 1] = arguments[i + 1].cdr;
+ }
+ proc.apply(null, applyArgs);
+ }
+ // add return so FF does not complain.
+ return undefined;
+}
+
+/*** META ((export #t)) */
+function sc_filter(proc, l1) {
+ var dummy = { cdr : null };
+ var tail = dummy;
+ while (l1 !== null) {
+ if (proc(l1.car) !== false) {
+ tail.cdr = sc_cons(l1.car, null);
+ tail = tail.cdr;
+ }
+ l1 = l1.cdr;
+ }
+ return dummy.cdr;
+}
+
+/*** META ((export #t)) */
+function sc_filterBang(proc, l1) {
+ var head = sc_cons("dummy", l1);
+ var it = head;
+ var next = l1;
+ while (next !== null) {
+ if (proc(next.car) !== false) {
+ it.cdr = next
+ it = next;
+ }
+ next = next.cdr;
+ }
+ it.cdr = null;
+ return head.cdr;
+}
+
+function sc_filterMap1(proc, l1) {
+ var revres = null;
+ while (l1 !== null) {
+ var tmp = proc(l1.car)
+ if (tmp !== false) revres = sc_cons(tmp, revres);
+ l1 = l1.cdr;
+ }
+ return sc_reverseAppendBang(revres, null);
+}
+function sc_filterMap2(proc, l1, l2) {
+ var revres = null;
+ while (l1 !== null) {
+ var tmp = proc(l1.car, l2.car);
+ if(tmp !== false) revres = sc_cons(tmp, revres);
+ l1 = l1.cdr;
+ l2 = l2.cdr
+ }
+ return sc_reverseAppendBang(revres, null);
+}
+
+/*** META ((export #t)) */
+function sc_filterMap(proc, l1, l2, l3) {
+ if (l2 === undefined)
+ return sc_filterMap1(proc, l1);
+ else if (l3 === undefined)
+ return sc_filterMap2(proc, l1, l2);
+ // else
+ var nbApplyArgs = arguments.length - 1;
+ var applyArgs = new Array(nbApplyArgs);
+ var revres = null;
+ while (l1 !== null) {
+ for (var i = 0; i < nbApplyArgs; i++) {
+ applyArgs[i] = arguments[i + 1].car;
+ arguments[i + 1] = arguments[i + 1].cdr;
+ }
+ var tmp = proc.apply(null, applyArgs);
+ if(tmp !== false) revres = sc_cons(tmp, revres);
+ }
+ return sc_reverseAppendBang(revres, null);
+}
+
+/*** META ((export #t)) */
+function sc_any(proc, l) {
+ var revres = null;
+ while (l !== null) {
+ var tmp = proc(l.car);
+ if(tmp !== false) return tmp;
+ l = l.cdr;
+ }
+ return false;
+}
+
+/*** META ((export any?)
+ (peephole (hole 2 "sc_any(" proc "," l ") !== false")))
+*/
+function sc_anyPred(proc, l) {
+ return sc_any(proc, l)!== false;
+}
+
+/*** META ((export #t)) */
+function sc_every(proc, l) {
+ var revres = null;
+ var tmp = true;
+ while (l !== null) {
+ tmp = proc(l.car);
+ if (tmp === false) return false;
+ l = l.cdr;
+ }
+ return tmp;
+}
+
+/*** META ((export every?)
+ (peephole (hole 2 "sc_every(" proc "," l ") !== false")))
+*/
+function sc_everyPred(proc, l) {
+ var tmp = sc_every(proc, l);
+ if (tmp !== false) return true;
+ return false;
+}
+
+/*** META ((export #t)
+ (peephole (postfix "()")))
+*/
+function sc_force(o) {
+ return o();
+}
+
+/*** META ((export #t)) */
+function sc_makePromise(proc) {
+ var isResultReady = false;
+ var result = undefined;
+ return function() {
+ if (!isResultReady) {
+ var tmp = proc();
+ if (!isResultReady) {
+ isResultReady = true;
+ result = tmp;
+ }
+ }
+ return result;
+ };
+}
+
+function sc_Values(values) {
+ this.values = values;
+}
+
+/*** META ((export #t)
+ (peephole (values)))
+*/
+function sc_values() {
+ if (arguments.length === 1)
+ return arguments[0];
+ else
+ return new sc_Values(arguments);
+}
+
+/*** META ((export #t)) */
+function sc_callWithValues(producer, consumer) {
+ var produced = producer();
+ if (produced instanceof sc_Values)
+ return consumer.apply(null, produced.values);
+ else
+ return consumer(produced);
+}
+
+/*** META ((export #t)) */
+function sc_dynamicWind(before, thunk, after) {
+ before();
+ try {
+ var res = thunk();
+ return res;
+ } finally {
+ after();
+ }
+}
+
+
+// TODO: eval/scheme-report-environment/null-environment/interaction-environment
+
+// LIMITATION: 'load' doesn't exist without files.
+// LIMITATION: transcript-on/transcript-off doesn't exist without files.
+
+
+function sc_Struct(name) {
+ this.name = name;
+}
+sc_Struct.prototype.sc_toDisplayString = function() {
+ return "#<struct" + sc_hash(this) + ">";
+};
+sc_Struct.prototype.sc_toWriteString = sc_Struct.prototype.sc_toDisplayString;
+
+/*** META ((export #t)
+ (peephole (hole 1 "new sc_Struct(" name ")")))
+*/
+function sc_makeStruct(name) {
+ return new sc_Struct(name);
+}
+
+/*** META ((export #t)
+ (type bool)
+ (peephole (postfix " instanceof sc_Struct")))
+*/
+function sc_isStruct(o) {
+ return (o instanceof sc_Struct);
+}
+
+/*** META ((export #t)
+ (type bool)
+ (peephole (hole 2 "(" 1 " instanceof sc_Struct) && ( " 1 ".name === " 0 ")")))
+*/
+function sc_isStructNamed(name, s) {
+ return ((s instanceof sc_Struct) && (s.name === name));
+}
+
+/*** META ((export struct-field)
+ (peephole (hole 3 0 "[" 2 "]")))
+*/
+function sc_getStructField(s, name, field) {
+ return s[field];
+}
+
+/*** META ((export struct-field-set!)
+ (peephole (hole 4 0 "[" 2 "] = " 3)))
+*/
+function sc_setStructFieldBang(s, name, field, val) {
+ s[field] = val;
+}
+
+/*** META ((export #t)
+ (peephole (prefix "~")))
+*/
+function sc_bitNot(x) {
+ return ~x;
+}
+
+/*** META ((export #t)
+ (peephole (infix 2 2 "&")))
+*/
+function sc_bitAnd(x, y) {
+ return x & y;
+}
+
+/*** META ((export #t)
+ (peephole (infix 2 2 "|")))
+*/
+function sc_bitOr(x, y) {
+ return x | y;
+}
+
+/*** META ((export #t)
+ (peephole (infix 2 2 "^")))
+*/
+function sc_bitXor(x, y) {
+ return x ^ y;
+}
+
+/*** META ((export #t)
+ (peephole (infix 2 2 "<<")))
+*/
+function sc_bitLsh(x, y) {
+ return x << y;
+}
+
+/*** META ((export #t)
+ (peephole (infix 2 2 ">>")))
+*/
+function sc_bitRsh(x, y) {
+ return x >> y;
+}
+
+/*** META ((export #t)
+ (peephole (infix 2 2 ">>>")))
+*/
+function sc_bitUrsh(x, y) {
+ return x >>> y;
+}
+
+/*** META ((export js-field js-property)
+ (peephole (hole 2 o "[" field "]")))
+*/
+function sc_jsField(o, field) {
+ return o[field];
+}
+
+/*** META ((export js-field-set! js-property-set!)
+ (peephole (hole 3 o "[" field "] = " val)))
+*/
+function sc_setJsFieldBang(o, field, val) {
+ return o[field] = val;
+}
+
+/*** META ((export js-field-delete! js-property-delete!)
+ (peephole (hole 2 "delete" o "[" field "]")))
+*/
+function sc_deleteJsFieldBang(o, field) {
+ delete o[field];
+}
+
+/*** META ((export #t)
+ (peephole (jsCall)))
+*/
+function sc_jsCall(o, fun) {
+ var args = new Array();
+ for (var i = 2; i < arguments.length; i++)
+ args[i-2] = arguments[i];
+ return fun.apply(o, args);
+}
+
+/*** META ((export #t)
+ (peephole (jsMethodCall)))
+*/
+function sc_jsMethodCall(o, field) {
+ var args = new Array();
+ for (var i = 2; i < arguments.length; i++)
+ args[i-2] = arguments[i];
+ return o[field].apply(o, args);
+}
+
+/*** META ((export new js-new)
+ (peephole (jsNew)))
+*/
+function sc_jsNew(c) {
+ var evalStr = "new c(";
+ evalStr +=arguments.length > 1? "arguments[1]": "";
+ for (var i = 2; i < arguments.length; i++)
+ evalStr += ", arguments[" + i + "]";
+ evalStr +=")";
+ return eval(evalStr);
+}
+
+// ======================== RegExp ====================
+/*** META ((export #t)) */
+function sc_pregexp(re) {
+ return new RegExp(sc_string2jsstring(re));
+}
+
+/*** META ((export #t)) */
+function sc_pregexpMatch(re, s) {
+ var reg = (re instanceof RegExp) ? re : sc_pregexp(re);
+ var tmp = reg.exec(sc_string2jsstring(s));
+
+ if (tmp == null) return false;
+
+ var res = null;
+ for (var i = tmp.length-1; i >= 0; i--) {
+ if (tmp[i] !== null) {
+ res = sc_cons(sc_jsstring2string(tmp[i]), res);
+ } else {
+ res = sc_cons(false, res);
+ }
+ }
+ return res;
+}
+
+/*** META ((export #t)) */
+function sc_pregexpReplace(re, s1, s2) {
+ var reg;
+ var jss1 = sc_string2jsstring(s1);
+ var jss2 = sc_string2jsstring(s2);
+
+ if (re instanceof RegExp) {
+ if (re.global)
+ reg = re;
+ else
+ reg = new RegExp(re.source);
+ } else {
+ reg = new RegExp(sc_string2jsstring(re));
+ }
+
+ return jss1.replace(reg, jss2);
+}
+
+/*** META ((export pregexp-replace*)) */
+function sc_pregexpReplaceAll(re, s1, s2) {
+ var reg;
+ var jss1 = sc_string2jsstring(s1);
+ var jss2 = sc_string2jsstring(s2);
+
+ if (re instanceof RegExp) {
+ if (re.global)
+ reg = re;
+ else
+ reg = new RegExp(re.source, "g");
+ } else {
+ reg = new RegExp(sc_string2jsstring(re), "g");
+ }
+
+ return jss1.replace(reg, jss2);
+}
+
+/*** META ((export #t)) */
+function sc_pregexpSplit(re, s) {
+ var reg = ((re instanceof RegExp) ?
+ re :
+ new RegExp(sc_string2jsstring(re)));
+ var jss = sc_string2jsstring(s);
+ var tmp = jss.split(reg);
+
+ if (tmp == null) return false;
+
+ return sc_vector2list(tmp);
+}
+
+
+/* =========================================================================== */
+/* Other library stuff */
+/* =========================================================================== */
+
+/*** META ((export #t)
+ (peephole (hole 1 "Math.floor(Math.random()*" 'n ")")))
+*/
+function sc_random(n) {
+ return Math.floor(Math.random()*n);
+}
+
+/*** META ((export current-date)
+ (peephole (hole 0 "new Date()")))
+*/
+function sc_currentDate() {
+ return new Date();
+}
+
+function sc_Hashtable() {
+}
+sc_Hashtable.prototype.toString = function() {
+ return "#{%hashtable}";
+};
+// sc_toWriteString == sc_toDisplayString == toString
+
+function sc_HashtableElement(key, val) {
+ this.key = key;
+ this.val = val;
+}
+
+/*** META ((export #t)
+ (peephole (hole 0 "new sc_Hashtable()")))
+*/
+function sc_makeHashtable() {
+ return new sc_Hashtable();
+}
+
+/*** META ((export #t)) */
+function sc_hashtablePutBang(ht, key, val) {
+ var hash = sc_hash(key);
+ ht[hash] = new sc_HashtableElement(key, val);
+}
+
+/*** META ((export #t)) */
+function sc_hashtableGet(ht, key) {
+ var hash = sc_hash(key);
+ if (hash in ht)
+ return ht[hash].val;
+ else
+ return false;
+}
+
+/*** META ((export #t)) */
+function sc_hashtableForEach(ht, f) {
+ for (var v in ht) {
+ if (ht[v] instanceof sc_HashtableElement)
+ f(ht[v].key, ht[v].val);
+ }
+}
+
+/*** META ((export hashtable-contains?)
+ (peephole (hole 2 "sc_hash(" 1 ") in " 0)))
+*/
+function sc_hashtableContains(ht, key) {
+ var hash = sc_hash(key);
+ if (hash in ht)
+ return true;
+ else
+ return false;
+}
+
+var SC_HASH_COUNTER = 0;
+
+function sc_hash(o) {
+ if (o === null)
+ return "null";
+ else if (o === undefined)
+ return "undefined";
+ else if (o === true)
+ return "true";
+ else if (o === false)
+ return "false";
+ else if (typeof o === "number")
+ return "num-" + o;
+ else if (typeof o === "string")
+ return "jsstr-" + o;
+ else if (o.sc_getHash)
+ return o.sc_getHash();
+ else
+ return sc_counterHash.call(o);
+}
+function sc_counterHash() {
+ if (!this.sc_hash) {
+ this.sc_hash = "hash-" + SC_HASH_COUNTER;
+ SC_HASH_COUNTER++;
+ }
+ return this.sc_hash;
+}
+
+function sc_Trampoline(args, maxTailCalls) {
+ this['__trampoline return__'] = true;
+ this.args = args;
+ this.MAX_TAIL_CALLs = maxTailCalls;
+}
+// TODO: call/cc stuff
+sc_Trampoline.prototype.restart = function() {
+ var o = this;
+ while (true) {
+ // set both globals.
+ SC_TAIL_OBJECT.calls = o.MAX_TAIL_CALLs-1;
+ var fun = o.args.callee;
+ var res = fun.apply(SC_TAIL_OBJECT, o.args);
+ if (res instanceof sc_Trampoline)
+ o = res;
+ else
+ return res;
+ }
+}
+
+/*** META ((export bind-exit-lambda)) */
+function sc_bindExitLambda(proc) {
+ var escape_obj = new sc_BindExitException();
+ var escape = function(res) {
+ escape_obj.res = res;
+ throw escape_obj;
+ };
+ try {
+ return proc(escape);
+ } catch(e) {
+ if (e === escape_obj) {
+ return e.res;
+ }
+ throw e;
+ }
+}
+function sc_BindExitException() {
+ this._internalException = true;
+}
+
+var SC_SCM2JS_GLOBALS = new Object();
+
+// default tail-call depth.
+// normally the program should set it again. but just in case...
+var SC_TAIL_OBJECT = new Object();
+SC_SCM2JS_GLOBALS.TAIL_OBJECT = SC_TAIL_OBJECT;
+// ======================== I/O =======================
+
+/*------------------------------------------------------------------*/
+
+function sc_EOF() {
+}
+var SC_EOF_OBJECT = new sc_EOF();
+
+function sc_Port() {
+}
+
+/* --------------- Input ports -------------------------------------*/
+
+function sc_InputPort() {
+}
+sc_InputPort.prototype = new sc_Port();
+
+sc_InputPort.prototype.peekChar = function() {
+ if (!("peeked" in this))
+ this.peeked = this.getNextChar();
+ return this.peeked;
+}
+sc_InputPort.prototype.readChar = function() {
+ var tmp = this.peekChar();
+ delete this.peeked;
+ return tmp;
+}
+sc_InputPort.prototype.isCharReady = function() {
+ return true;
+}
+sc_InputPort.prototype.close = function() {
+ // do nothing
+}
+
+/* .............. String port ..........................*/
+function sc_ErrorInputPort() {
+};
+sc_ErrorInputPort.prototype = new sc_InputPort();
+sc_ErrorInputPort.prototype.getNextChar = function() {
+ throw "can't read from error-port.";
+};
+sc_ErrorInputPort.prototype.isCharReady = function() {
+ return false;
+};
+
+
+/* .............. String port ..........................*/
+
+function sc_StringInputPort(jsStr) {
+ // we are going to do some charAts on the str.
+ // instead of recreating all the time a String-object, we
+ // create one in the beginning. (not sure, if this is really an optim)
+ this.str = new String(jsStr);
+ this.pos = 0;
+}
+sc_StringInputPort.prototype = new sc_InputPort();
+sc_StringInputPort.prototype.getNextChar = function() {
+ if (this.pos >= this.str.length)
+ return SC_EOF_OBJECT;
+ return this.str.charAt(this.pos++);
+};
+
+/* ------------- Read and other lib-funs -------------------------------*/
+function sc_Token(type, val, pos) {
+ this.type = type;
+ this.val = val;
+ this.pos = pos;
+}
+sc_Token.EOF = 0/*EOF*/;
+sc_Token.OPEN_PAR = 1/*OPEN_PAR*/;
+sc_Token.CLOSE_PAR = 2/*CLOSE_PAR*/;
+sc_Token.OPEN_BRACE = 3/*OPEN_BRACE*/;
+sc_Token.CLOSE_BRACE = 4/*CLOSE_BRACE*/;
+sc_Token.OPEN_BRACKET = 5/*OPEN_BRACKET*/;
+sc_Token.CLOSE_BRACKET = 6/*CLOSE_BRACKET*/;
+sc_Token.WHITESPACE = 7/*WHITESPACE*/;
+sc_Token.QUOTE = 8/*QUOTE*/;
+sc_Token.ID = 9/*ID*/;
+sc_Token.DOT = 10/*DOT*/;
+sc_Token.STRING = 11/*STRING*/;
+sc_Token.NUMBER = 12/*NUMBER*/;
+sc_Token.ERROR = 13/*ERROR*/;
+sc_Token.VECTOR_BEGIN = 14/*VECTOR_BEGIN*/;
+sc_Token.TRUE = 15/*TRUE*/;
+sc_Token.FALSE = 16/*FALSE*/;
+sc_Token.UNSPECIFIED = 17/*UNSPECIFIED*/;
+sc_Token.REFERENCE = 18/*REFERENCE*/;
+sc_Token.STORE = 19/*STORE*/;
+sc_Token.CHAR = 20/*CHAR*/;
+
+var SC_ID_CLASS = SC_LOWER_CLASS + SC_UPPER_CLASS + "!$%*+-./:<=>?@^_~";
+function sc_Tokenizer(port) {
+ this.port = port;
+}
+sc_Tokenizer.prototype.peekToken = function() {
+ if (this.peeked)
+ return this.peeked;
+ var newToken = this.nextToken();
+ this.peeked = newToken;
+ return newToken;
+};
+sc_Tokenizer.prototype.readToken = function() {
+ var tmp = this.peekToken();
+ delete this.peeked;
+ return tmp;
+};
+sc_Tokenizer.prototype.nextToken = function() {
+ var port = this.port;
+
+ function isNumberChar(c) {
+ return (c >= "0" && c <= "9");
+ };
+ function isIdOrNumberChar(c) {
+ return SC_ID_CLASS.indexOf(c) != -1 || // ID-char
+ (c >= "0" && c <= "9");
+ }
+ function isWhitespace(c) {
+ return c === " " || c === "\r" || c === "\n" || c === "\t" || c === "\f";
+ };
+ function isWhitespaceOrEOF(c) {
+ return isWhitespace(c) || c === SC_EOF_OBJECT;
+ };
+
+ function readString() {
+ res = "";
+ while (true) {
+ var c = port.readChar();
+ switch (c) {
+ case '"':
+ return new sc_Token(11/*STRING*/, res);
+ case "\\":
+ var tmp = port.readChar();
+ switch (tmp) {
+ case '0': res += "\0"; break;
+ case 'a': res += "\a"; break;
+ case 'b': res += "\b"; break;
+ case 'f': res += "\f"; break;
+ case 'n': res += "\n"; break;
+ case 'r': res += "\r"; break;
+ case 't': res += "\t"; break;
+ case 'v': res += "\v"; break;
+ case '"': res += '"'; break;
+ case '\\': res += '\\'; break;
+ case 'x':
+ /* hexa-number */
+ var nb = 0;
+ while (true) {
+ var hexC = port.peekChar();
+ if (hexC >= '0' && hexC <= '9') {
+ port.readChar();
+ nb = nb * 16 + hexC.charCodeAt(0) - '0'.charCodeAt(0);
+ } else if (hexC >= 'a' && hexC <= 'f') {
+ port.readChar();
+ nb = nb * 16 + hexC.charCodeAt(0) - 'a'.charCodeAt(0);
+ } else if (hexC >= 'A' && hexC <= 'F') {
+ port.readChar();
+ nb = nb * 16 + hexC.charCodeAt(0) - 'A'.charCodeAt(0);
+ } else {
+ // next char isn't part of hex.
+ res += String.fromCharCode(nb);
+ break;
+ }
+ }
+ break;
+ default:
+ if (tmp === SC_EOF_OBJECT) {
+ return new sc_Token(13/*ERROR*/, "unclosed string-literal" + res);
+ }
+ res += tmp;
+ }
+ break;
+ default:
+ if (c === SC_EOF_OBJECT) {
+ return new sc_Token(13/*ERROR*/, "unclosed string-literal" + res);
+ }
+ res += c;
+ }
+ }
+ };
+ function readIdOrNumber(firstChar) {
+ var res = firstChar;
+ while (isIdOrNumberChar(port.peekChar()))
+ res += port.readChar();
+ if (isNaN(res))
+ return new sc_Token(9/*ID*/, res);
+ else
+ return new sc_Token(12/*NUMBER*/, res - 0);
+ };
+
+ function skipWhitespaceAndComments() {
+ var done = false;
+ while (!done) {
+ done = true;
+ while (isWhitespace(port.peekChar()))
+ port.readChar();
+ if (port.peekChar() === ';') {
+ port.readChar();
+ done = false;
+ while (true) {
+ curChar = port.readChar();
+ if (curChar === SC_EOF_OBJECT ||
+ curChar === '\n')
+ break;
+ }
+ }
+ }
+ };
+
+ function readDot() {
+ if (isWhitespace(port.peekChar()))
+ return new sc_Token(10/*DOT*/);
+ else
+ return readIdOrNumber(".");
+ };
+
+ function readSharp() {
+ var c = port.readChar();
+ if (isWhitespace(c))
+ return new sc_Token(13/*ERROR*/, "bad #-pattern0.");
+
+ // reference
+ if (isNumberChar(c)) {
+ var nb = c - 0;
+ while (isNumberChar(port.peekChar()))
+ nb = nb*10 + (port.readChar() - 0);
+ switch (port.readChar()) {
+ case '#':
+ return new sc_Token(18/*REFERENCE*/, nb);
+ case '=':
+ return new sc_Token(19/*STORE*/, nb);
+ default:
+ return new sc_Token(13/*ERROR*/, "bad #-pattern1." + nb);
+ }
+ }
+
+ if (c === "(")
+ return new sc_Token(14/*VECTOR_BEGIN*/);
+
+ if (c === "\\") { // character
+ var tmp = ""
+ while (!isWhitespaceOrEOF(port.peekChar()))
+ tmp += port.readChar();
+ switch (tmp.length) {
+ case 0: // it's escaping a whitespace char:
+ if (sc_isEOFObject(port.peekChar))
+ return new sc_Token(13/*ERROR*/, "bad #-pattern2.");
+ else
+ return new sc_Token(20/*CHAR*/, port.readChar());
+ case 1:
+ return new sc_Token(20/*CHAR*/, tmp);
+ default:
+ var entry = sc_Char.readable2char[tmp.toLowerCase()];
+ if (entry)
+ return new sc_Token(20/*CHAR*/, entry);
+ else
+ return new sc_Token(13/*ERROR*/, "unknown character description: #\\" + tmp);
+ }
+ }
+
+ // some constants (#t, #f, #unspecified)
+ var res;
+ var needing;
+ switch (c) {
+ case 't': res = new sc_Token(15/*TRUE*/, true); needing = ""; break;
+ case 'f': res = new sc_Token(16/*FALSE*/, false); needing = ""; break;
+ case 'u': res = new sc_Token(17/*UNSPECIFIED*/, undefined); needing = "nspecified"; break;
+ default:
+ return new sc_Token(13/*ERROR*/, "bad #-pattern3: " + c);
+ }
+ while(true) {
+ c = port.peekChar();
+ if ((isWhitespaceOrEOF(c) || c === ')') &&
+ needing == "")
+ return res;
+ else if (isWhitespace(c) || needing == "")
+ return new sc_Token(13/*ERROR*/, "bad #-pattern4 " + c + " " + needing);
+ else if (needing.charAt(0) == c) {
+ port.readChar(); // consume
+ needing = needing.slice(1);
+ } else
+ return new sc_Token(13/*ERROR*/, "bad #-pattern5");
+ }
+
+ };
+
+ skipWhitespaceAndComments();
+ var curChar = port.readChar();
+ if (curChar === SC_EOF_OBJECT)
+ return new sc_Token(0/*EOF*/, curChar);
+ switch (curChar)
+ {
+ case " ":
+ case "\n":
+ case "\t":
+ return readWhitespace();
+ case "(":
+ return new sc_Token(1/*OPEN_PAR*/);
+ case ")":
+ return new sc_Token(2/*CLOSE_PAR*/);
+ case "{":
+ return new sc_Token(3/*OPEN_BRACE*/);
+ case "}":
+ return new sc_Token(4/*CLOSE_BRACE*/);
+ case "[":
+ return new sc_Token(5/*OPEN_BRACKET*/);
+ case "]":
+ return new sc_Token(6/*CLOSE_BRACKET*/);
+ case "'":
+ return new sc_Token(8/*QUOTE*/);
+ case "#":
+ return readSharp();
+ case ".":
+ return readDot();
+ case '"':
+ return readString();
+ default:
+ if (isIdOrNumberChar(curChar))
+ return readIdOrNumber(curChar);
+ throw "unexpected character: " + curChar;
+ }
+};
+
+function sc_Reader(tokenizer) {
+ this.tokenizer = tokenizer;
+ this.backref = new Array();
+}
+sc_Reader.prototype.read = function() {
+ function readList(listBeginType) {
+ function matchesPeer(open, close) {
+ return open === 1/*OPEN_PAR*/ && close === 2/*CLOSE_PAR*/
+ || open === 3/*OPEN_BRACE*/ && close === 4/*CLOSE_BRACE*/
+ || open === 5/*OPEN_BRACKET*/ && close === 6/*CLOSE_BRACKET*/;
+ };
+ var res = null;
+
+ while (true) {
+ var token = tokenizer.peekToken();
+
+ switch (token.type) {
+ case 2/*CLOSE_PAR*/:
+ case 4/*CLOSE_BRACE*/:
+ case 6/*CLOSE_BRACKET*/:
+ if (matchesPeer(listBeginType, token.type)) {
+ tokenizer.readToken(); // consume token
+ return sc_reverseBang(res);
+ } else
+ throw "closing par doesn't match: " + listBeginType
+ + " " + listEndType;
+
+ case 0/*EOF*/:
+ throw "unexpected end of file";
+
+ case 10/*DOT*/:
+ tokenizer.readToken(); // consume token
+ var cdr = this.read();
+ var par = tokenizer.readToken();
+ if (!matchesPeer(listBeginType, par.type))
+ throw "closing par doesn't match: " + listBeginType
+ + " " + par.type;
+ else
+ return sc_reverseAppendBang(res, cdr);
+
+
+ default:
+ res = sc_cons(this.read(), res);
+ }
+ }
+ };
+ function readQuote() {
+ return sc_cons("quote", sc_cons(this.read(), null));
+ };
+ function readVector() {
+ // opening-parenthesis is already consumed
+ var a = new Array();
+ while (true) {
+ var token = tokenizer.peekToken();
+ switch (token.type) {
+ case 2/*CLOSE_PAR*/:
+ tokenizer.readToken();
+ return a;
+
+ default:
+ a.push(this.read());
+ }
+ }
+ };
+
+ function storeRefence(nb) {
+ var tmp = this.read();
+ this.backref[nb] = tmp;
+ return tmp;
+ };
+
+ function readReference(nb) {
+ if (nb in this.backref)
+ return this.backref[nb];
+ else
+ throw "bad reference: " + nb;
+ };
+
+ var tokenizer = this.tokenizer;
+
+ var token = tokenizer.readToken();
+
+ // handle error
+ if (token.type === 13/*ERROR*/)
+ throw token.val;
+
+ switch (token.type) {
+ case 1/*OPEN_PAR*/:
+ case 3/*OPEN_BRACE*/:
+ case 5/*OPEN_BRACKET*/:
+ return readList.call(this, token.type);
+ case 8/*QUOTE*/:
+ return readQuote.call(this);
+ case 11/*STRING*/:
+ return sc_jsstring2string(token.val);
+ case 20/*CHAR*/:
+ return new sc_Char(token.val);
+ case 14/*VECTOR_BEGIN*/:
+ return readVector.call(this);
+ case 18/*REFERENCE*/:
+ return readReference.call(this, token.val);
+ case 19/*STORE*/:
+ return storeRefence.call(this, token.val);
+ case 9/*ID*/:
+ return sc_jsstring2symbol(token.val);
+ case 0/*EOF*/:
+ case 12/*NUMBER*/:
+ case 15/*TRUE*/:
+ case 16/*FALSE*/:
+ case 17/*UNSPECIFIED*/:
+ return token.val;
+ default:
+ throw "unexpected token " + token.type + " " + token.val;
+ }
+};
+
+/*** META ((export #t)) */
+function sc_read(port) {
+ if (port === undefined) // we assume the port hasn't been given.
+ port = SC_DEFAULT_IN; // THREAD: shared var...
+ var reader = new sc_Reader(new sc_Tokenizer(port));
+ return reader.read();
+}
+/*** META ((export #t)) */
+function sc_readChar(port) {
+ if (port === undefined) // we assume the port hasn't been given.
+ port = SC_DEFAULT_IN; // THREAD: shared var...
+ var t = port.readChar();
+ return t === SC_EOF_OBJECT? t: new sc_Char(t);
+}
+/*** META ((export #t)) */
+function sc_peekChar(port) {
+ if (port === undefined) // we assume the port hasn't been given.
+ port = SC_DEFAULT_IN; // THREAD: shared var...
+ var t = port.peekChar();
+ return t === SC_EOF_OBJECT? t: new sc_Char(t);
+}
+/*** META ((export #t)
+ (type bool))
+*/
+function sc_isCharReady(port) {
+ if (port === undefined) // we assume the port hasn't been given.
+ port = SC_DEFAULT_IN; // THREAD: shared var...
+ return port.isCharReady();
+}
+/*** META ((export #t)
+ (peephole (postfix ".close()")))
+*/
+function sc_closeInputPort(p) {
+ return p.close();
+}
+
+/*** META ((export #t)
+ (type bool)
+ (peephole (postfix " instanceof sc_InputPort")))
+*/
+function sc_isInputPort(o) {
+ return (o instanceof sc_InputPort);
+}
+
+/*** META ((export eof-object?)
+ (type bool)
+ (peephole (postfix " === SC_EOF_OBJECT")))
+*/
+function sc_isEOFObject(o) {
+ return o === SC_EOF_OBJECT;
+}
+
+/*** META ((export #t)
+ (peephole (hole 0 "SC_DEFAULT_IN")))
+*/
+function sc_currentInputPort() {
+ return SC_DEFAULT_IN;
+}
+
+/* ------------ file operations are not supported -----------*/
+/*** META ((export #t)) */
+function sc_callWithInputFile(s, proc) {
+ throw "can't open " + s;
+}
+
+/*** META ((export #t)) */
+function sc_callWithOutputFile(s, proc) {
+ throw "can't open " + s;
+}
+
+/*** META ((export #t)) */
+function sc_withInputFromFile(s, thunk) {
+ throw "can't open " + s;
+}
+
+/*** META ((export #t)) */
+function sc_withOutputToFile(s, thunk) {
+ throw "can't open " + s;
+}
+
+/*** META ((export #t)) */
+function sc_openInputFile(s) {
+ throw "can't open " + s;
+}
+
+/*** META ((export #t)) */
+function sc_openOutputFile(s) {
+ throw "can't open " + s;
+}
+
+/* ----------------------------------------------------------------------------*/
+/*** META ((export #t)) */
+function sc_basename(p) {
+ var i = p.lastIndexOf('/');
+
+ if(i >= 0)
+ return p.substring(i + 1, p.length);
+ else
+ return '';
+}
+
+/*** META ((export #t)) */
+function sc_dirname(p) {
+ var i = p.lastIndexOf('/');
+
+ if(i >= 0)
+ return p.substring(0, i);
+ else
+ return '';
+}
+
+/* ----------------------------------------------------------------------------*/
+
+/*** META ((export #t)) */
+function sc_withInputFromPort(p, thunk) {
+ try {
+ var tmp = SC_DEFAULT_IN; // THREAD: shared var.
+ SC_DEFAULT_IN = p;
+ return thunk();
+ } finally {
+ SC_DEFAULT_IN = tmp;
+ }
+}
+
+/*** META ((export #t)) */
+function sc_withInputFromString(s, thunk) {
+ return sc_withInputFromPort(new sc_StringInputPort(sc_string2jsstring(s)), thunk);
+}
+
+/*** META ((export #t)) */
+function sc_withOutputToPort(p, thunk) {
+ try {
+ var tmp = SC_DEFAULT_OUT; // THREAD: shared var.
+ SC_DEFAULT_OUT = p;
+ return thunk();
+ } finally {
+ SC_DEFAULT_OUT = tmp;
+ }
+}
+
+/*** META ((export #t)) */
+function sc_withOutputToString(thunk) {
+ var p = new sc_StringOutputPort();
+ sc_withOutputToPort(p, thunk);
+ return p.close();
+}
+
+/*** META ((export #t)) */
+function sc_withOutputToProcedure(proc, thunk) {
+ var t = function(s) { proc(sc_jsstring2string(s)); };
+ return sc_withOutputToPort(new sc_GenericOutputPort(t), thunk);
+}
+
+/*** META ((export #t)
+ (peephole (hole 0 "new sc_StringOutputPort()")))
+*/
+function sc_openOutputString() {
+ return new sc_StringOutputPort();
+}
+
+/*** META ((export #t)) */
+function sc_openInputString(str) {
+ return new sc_StringInputPort(sc_string2jsstring(str));
+}
+
+/* ----------------------------------------------------------------------------*/
+
+function sc_OutputPort() {
+}
+sc_OutputPort.prototype = new sc_Port();
+sc_OutputPort.prototype.appendJSString = function(obj) {
+ /* do nothing */
+}
+sc_OutputPort.prototype.close = function() {
+ /* do nothing */
+}
+
+function sc_StringOutputPort() {
+ this.res = "";
+}
+sc_StringOutputPort.prototype = new sc_OutputPort();
+sc_StringOutputPort.prototype.appendJSString = function(s) {
+ this.res += s;
+}
+sc_StringOutputPort.prototype.close = function() {
+ return sc_jsstring2string(this.res);
+}
+
+/*** META ((export #t)) */
+function sc_getOutputString(sp) {
+ return sc_jsstring2string(sp.res);
+}
+
+
+function sc_ErrorOutputPort() {
+}
+sc_ErrorOutputPort.prototype = new sc_OutputPort();
+sc_ErrorOutputPort.prototype.appendJSString = function(s) {
+ throw "don't write on ErrorPort!";
+}
+sc_ErrorOutputPort.prototype.close = function() {
+ /* do nothing */
+}
+
+function sc_GenericOutputPort(appendJSString, close) {
+ this.appendJSString = appendJSString;
+ if (close)
+ this.close = close;
+}
+sc_GenericOutputPort.prototype = new sc_OutputPort();
+
+/*** META ((export #t)
+ (type bool)
+ (peephole (postfix " instanceof sc_OutputPort")))
+*/
+function sc_isOutputPort(o) {
+ return (o instanceof sc_OutputPort);
+}
+
+/*** META ((export #t)
+ (peephole (postfix ".close()")))
+*/
+function sc_closeOutputPort(p) {
+ return p.close();
+}
+
+/* ------------------ write ---------------------------------------------------*/
+
+/*** META ((export #t)) */
+function sc_write(o, p) {
+ if (p === undefined) // we assume not given
+ p = SC_DEFAULT_OUT;
+ p.appendJSString(sc_toWriteString(o));
+}
+
+function sc_toWriteString(o) {
+ if (o === null)
+ return "()";
+ else if (o === true)
+ return "#t";
+ else if (o === false)
+ return "#f";
+ else if (o === undefined)
+ return "#unspecified";
+ else if (typeof o === 'function')
+ return "#<procedure " + sc_hash(o) + ">";
+ else if (o.sc_toWriteString)
+ return o.sc_toWriteString();
+ else
+ return o.toString();
+}
+
+function sc_escapeWriteString(s) {
+ var res = "";
+ var j = 0;
+ for (i = 0; i < s.length; i++) {
+ switch (s.charAt(i)) {
+ case "\0": res += s.substring(j, i) + "\\0"; j = i + 1; break;
+ case "\b": res += s.substring(j, i) + "\\b"; j = i + 1; break;
+ case "\f": res += s.substring(j, i) + "\\f"; j = i + 1; break;
+ case "\n": res += s.substring(j, i) + "\\n"; j = i + 1; break;
+ case "\r": res += s.substring(j, i) + "\\r"; j = i + 1; break;
+ case "\t": res += s.substring(j, i) + "\\t"; j = i + 1; break;
+ case "\v": res += s.substring(j, i) + "\\v"; j = i + 1; break;
+ case '"': res += s.substring(j, i) + '\\"'; j = i + 1; break;
+ case "\\": res += s.substring(j, i) + "\\\\"; j = i + 1; break;
+ default:
+ var c = s.charAt(i);
+ if ("\a" !== "a" && c == "\a") {
+ res += s.substring(j, i) + "\\a"; j = i + 1; continue;
+ }
+ if ("\v" !== "v" && c == "\v") {
+ res += s.substring(j, i) + "\\v"; j = i + 1; continue;
+ }
+ //if (s.charAt(i) < ' ' || s.charCodeAt(i) > 127) {
+ // CARE: Manuel is this OK with HOP?
+ if (s.charAt(i) < ' ') {
+ /* non printable character and special chars */
+ res += s.substring(j, i) + "\\x" + s.charCodeAt(i).toString(16);
+ j = i + 1;
+ }
+ // else just let i increase...
+ }
+ }
+ res += s.substring(j, i);
+ return res;
+}
+
+/* ------------------ display ---------------------------------------------------*/
+
+/*** META ((export #t)) */
+function sc_display(o, p) {
+ if (p === undefined) // we assume not given
+ p = SC_DEFAULT_OUT;
+ p.appendJSString(sc_toDisplayString(o));
+}
+
+function sc_toDisplayString(o) {
+ if (o === null)
+ return "()";
+ else if (o === true)
+ return "#t";
+ else if (o === false)
+ return "#f";
+ else if (o === undefined)
+ return "#unspecified";
+ else if (typeof o === 'function')
+ return "#<procedure " + sc_hash(o) + ">";
+ else if (o.sc_toDisplayString)
+ return o.sc_toDisplayString();
+ else
+ return o.toString();
+}
+
+/* ------------------ newline ---------------------------------------------------*/
+
+/*** META ((export #t)) */
+function sc_newline(p) {
+ if (p === undefined) // we assume not given
+ p = SC_DEFAULT_OUT;
+ p.appendJSString("\n");
+}
+
+/* ------------------ write-char ---------------------------------------------------*/
+
+/*** META ((export #t)) */
+function sc_writeChar(c, p) {
+ if (p === undefined) // we assume not given
+ p = SC_DEFAULT_OUT;
+ p.appendJSString(c.val);
+}
+
+/* ------------------ write-circle ---------------------------------------------------*/
+
+/*** META ((export #t)) */
+function sc_writeCircle(o, p) {
+ if (p === undefined) // we assume not given
+ p = SC_DEFAULT_OUT;
+ p.appendJSString(sc_toWriteCircleString(o));
+}
+
+function sc_toWriteCircleString(o) {
+ var symb = sc_gensym("writeCircle");
+ var nbPointer = new Object();
+ nbPointer.nb = 0;
+ sc_prepWriteCircle(o, symb, nbPointer);
+ return sc_genToWriteCircleString(o, symb);
+}
+
+function sc_prepWriteCircle(o, symb, nbPointer) {
+ // TODO sc_Struct
+ if (o instanceof sc_Pair ||
+ o instanceof sc_Vector) {
+ if (o[symb] !== undefined) {
+ // not the first visit.
+ o[symb]++;
+ // unless there is already a number, assign one.
+ if (!o[symb + "nb"]) o[symb + "nb"] = nbPointer.nb++;
+ return;
+ }
+ o[symb] = 0;
+ if (o instanceof sc_Pair) {
+ sc_prepWriteCircle(o.car, symb, nbPointer);
+ sc_prepWriteCircle(o.cdr, symb, nbPointer);
+ } else {
+ for (var i = 0; i < o.length; i++)
+ sc_prepWriteCircle(o[i], symb, nbPointer);
+ }
+ }
+}
+
+function sc_genToWriteCircleString(o, symb) {
+ if (!(o instanceof sc_Pair ||
+ o instanceof sc_Vector))
+ return sc_toWriteString(o);
+ return o.sc_toWriteCircleString(symb);
+}
+sc_Pair.prototype.sc_toWriteCircleString = function(symb, inList) {
+ if (this[symb + "use"]) { // use-flag is set. Just use it.
+ var nb = this[symb + "nb"];
+ if (this[symb]-- === 0) { // if we are the last use. remove all fields.
+ delete this[symb];
+ delete this[symb + "nb"];
+ delete this[symb + "use"];
+ }
+ if (inList)
+ return '. #' + nb + '#';
+ else
+ return '#' + nb + '#';
+ }
+ if (this[symb]-- === 0) { // if we are the last use. remove all fields.
+ delete this[symb];
+ delete this[symb + "nb"];
+ delete this[symb + "use"];
+ }
+
+ var res = "";
+
+ if (this[symb] !== undefined) { // implies > 0
+ this[symb + "use"] = true;
+ if (inList)
+ res += '. #' + this[symb + "nb"] + '=';
+ else
+ res += '#' + this[symb + "nb"] + '=';
+ inList = false;
+ }
+
+ if (!inList)
+ res += "(";
+
+ // print car
+ res += sc_genToWriteCircleString(this.car, symb);
+
+ if (sc_isPair(this.cdr)) {
+ res += " " + this.cdr.sc_toWriteCircleString(symb, true);
+ } else if (this.cdr !== null) {
+ res += " . " + sc_genToWriteCircleString(this.cdr, symb);
+ }
+ if (!inList)
+ res += ")";
+ return res;
+};
+sc_Vector.prototype.sc_toWriteCircleString = function(symb) {
+ if (this[symb + "use"]) { // use-flag is set. Just use it.
+ var nb = this[symb + "nb"];
+ if (this[symb]-- === 0) { // if we are the last use. remove all fields.
+ delete this[symb];
+ delete this[symb + "nb"];
+ delete this[symb + "use"];
+ }
+ return '#' + nb + '#';
+ }
+ if (this[symb]-- === 0) { // if we are the last use. remove all fields.
+ delete this[symb];
+ delete this[symb + "nb"];
+ delete this[symb + "use"];
+ }
+
+ var res = "";
+ if (this[symb] !== undefined) { // implies > 0
+ this[symb + "use"] = true;
+ res += '#' + this[symb + "nb"] + '=';
+ }
+ res += "#(";
+ for (var i = 0; i < this.length; i++) {
+ res += sc_genToWriteCircleString(this[i], symb);
+ if (i < this.length - 1) res += " ";
+ }
+ res += ")";
+ return res;
+};
+
+
+/* ------------------ print ---------------------------------------------------*/
+
+/*** META ((export #t)) */
+function sc_print(s) {
+ if (arguments.length === 1) {
+ sc_display(s);
+ sc_newline();
+ }
+ else {
+ for (var i = 0; i < arguments.length; i++)
+ sc_display(arguments[i]);
+ sc_newline();
+ }
+}
+
+/* ------------------ format ---------------------------------------------------*/
+/*** META ((export #t)) */
+function sc_format(s, args) {
+ var len = s.length;
+ var p = new sc_StringOutputPort();
+ var i = 0, j = 1;
+
+ while( i < len ) {
+ var i2 = s.indexOf("~", i);
+
+ if (i2 == -1) {
+ p.appendJSString( s.substring( i, len ) );
+ return p.close();
+ } else {
+ if (i2 > i) {
+ if (i2 == (len - 1)) {
+ p.appendJSString(s.substring(i, len));
+ return p.close();
+ } else {
+ p.appendJSString(s.substring(i, i2));
+ i = i2;
+ }
+ }
+
+ switch(s.charCodeAt(i2 + 1)) {
+ case 65:
+ case 97:
+ // a
+ sc_display(arguments[j], p);
+ i += 2; j++;
+ break;
+
+ case 83:
+ case 115:
+ // s
+ sc_write(arguments[j], p);
+ i += 2; j++;
+ break;
+
+ case 86:
+ case 118:
+ // v
+ sc_display(arguments[j], p);
+ p.appendJSString("\n");
+ i += 2; j++;
+ break;
+
+ case 67:
+ case 99:
+ // c
+ p.appendJSString(String.fromCharCode(arguments[j]));
+ i += 2; j++;
+ break;
+
+ case 88:
+ case 120:
+ // x
+ p.appendJSString(arguments[j].toString(6));
+ i += 2; j++;
+ break;
+
+ case 79:
+ case 111:
+ // o
+ p.appendJSString(arguments[j].toString(8));
+ i += 2; j++;
+ break;
+
+ case 66:
+ case 98:
+ // b
+ p.appendJSString(arguments[j].toString(2));
+ i += 2; j++;
+ break;
+
+ case 37:
+ case 110:
+ // %, n
+ p.appendJSString("\n");
+ i += 2; break;
+
+ case 114:
+ // r
+ p.appendJSString("\r");
+ i += 2; break;
+
+ case 126:
+ // ~
+ p.appendJSString("~");
+ i += 2; break;
+
+ default:
+ sc_error( "format: illegal ~"
+ + String.fromCharCode(s.charCodeAt(i2 + 1))
+ + " sequence" );
+ return "";
+ }
+ }
+ }
+
+ return p.close();
+}
+
+/* ------------------ global ports ---------------------------------------------------*/
+
+var SC_DEFAULT_IN = new sc_ErrorInputPort();
+var SC_DEFAULT_OUT = new sc_ErrorOutputPort();
+var SC_ERROR_OUT = new sc_ErrorOutputPort();
+
+var sc_SYMBOL_PREFIX = "\u1E9C";
+var sc_KEYWORD_PREFIX = "\u1E9D";
+
+/*** META ((export #t)
+ (peephole (id))) */
+function sc_jsstring2string(s) {
+ return s;
+}
+
+/*** META ((export #t)
+ (peephole (prefix "'\\u1E9C' +")))
+*/
+function sc_jsstring2symbol(s) {
+ return sc_SYMBOL_PREFIX + s;
+}
+
+/*** META ((export #t)
+ (peephole (id)))
+*/
+function sc_string2jsstring(s) {
+ return s;
+}
+
+/*** META ((export #t)
+ (peephole (symbol2jsstring_immutable)))
+*/
+function sc_symbol2jsstring(s) {
+ return s.slice(1);
+}
+
+/*** META ((export #t)
+ (peephole (postfix ".slice(1)")))
+*/
+function sc_keyword2jsstring(k) {
+ return k.slice(1);
+}
+
+/*** META ((export #t)
+ (peephole (prefix "'\\u1E9D' +")))
+*/
+function sc_jsstring2keyword(s) {
+ return sc_KEYWORD_PREFIX + s;
+}
+
+/*** META ((export #t)
+ (type bool))
+*/
+function sc_isKeyword(s) {
+ return (typeof s === "string") &&
+ (s.charAt(0) === sc_KEYWORD_PREFIX);
+}
+
+
+/*** META ((export #t)) */
+var sc_gensym = function() {
+ var counter = 1000;
+ return function(sym) {
+ counter++;
+ if (!sym) sym = sc_SYMBOL_PREFIX;
+ return sym + "s" + counter + "~" + "^sC-GeNsYm ";
+ };
+}();
+
+
+/*** META ((export #t)
+ (type bool))
+*/
+function sc_isEqual(o1, o2) {
+ return ((o1 === o2) ||
+ (sc_isPair(o1) && sc_isPair(o2)
+ && sc_isPairEqual(o1, o2, sc_isEqual)) ||
+ (sc_isVector(o1) && sc_isVector(o2)
+ && sc_isVectorEqual(o1, o2, sc_isEqual)));
+}
+
+/*** META ((export number->symbol integer->symbol)) */
+function sc_number2symbol(x, radix) {
+ return sc_SYMBOL_PREFIX + sc_number2jsstring(x, radix);
+}
+
+/*** META ((export number->string integer->string)) */
+var sc_number2string = sc_number2jsstring;
+
+/*** META ((export #t)) */
+function sc_symbol2number(s, radix) {
+ return sc_jsstring2number(s.slice(1), radix);
+}
+
+/*** META ((export #t)) */
+var sc_string2number = sc_jsstring2number;
+
+/*** META ((export #t)
+ (peephole (prefix "+" s)))
+ ;; peephole will only apply if no radix is given.
+*/
+function sc_string2integer(s, radix) {
+ if (!radix) return +s;
+ return parseInt(s, radix);
+}
+
+/*** META ((export #t)
+ (peephole (prefix "+")))
+*/
+function sc_string2real(s) {
+ return +s;
+}
+
+
+/*** META ((export #t)
+ (type bool))
+*/
+function sc_isSymbol(s) {
+ return (typeof s === "string") &&
+ (s.charAt(0) === sc_SYMBOL_PREFIX);
+}
+
+/*** META ((export #t)
+ (peephole (symbol2string_immutable)))
+*/
+function sc_symbol2string(s) {
+ return s.slice(1);
+}
+
+/*** META ((export #t)
+ (peephole (prefix "'\\u1E9C' +")))
+*/
+function sc_string2symbol(s) {
+ return sc_SYMBOL_PREFIX + s;
+}
+
+/*** META ((export symbol-append)
+ (peephole (symbolAppend_immutable)))
+*/
+function sc_symbolAppend() {
+ var res = sc_SYMBOL_PREFIX;
+ for (var i = 0; i < arguments.length; i++)
+ res += arguments[i].slice(1);
+ return res;
+}
+
+/*** META ((export #t)
+ (peephole (postfix ".val")))
+*/
+function sc_char2string(c) { return c.val; }
+
+/*** META ((export #t)
+ (peephole (hole 1 "'\\u1E9C' + " c ".val")))
+*/
+function sc_char2symbol(c) { return sc_SYMBOL_PREFIX + c.val; }
+
+/*** META ((export #t)
+ (type bool))
+*/
+function sc_isString(s) {
+ return (typeof s === "string") &&
+ (s.charAt(0) !== sc_SYMBOL_PREFIX);
+}
+
+/*** META ((export #t)) */
+var sc_makeString = sc_makejsString;
+
+
+/*** META ((export #t)) */
+function sc_string() {
+ for (var i = 0; i < arguments.length; i++)
+ arguments[i] = arguments[i].val;
+ return "".concat.apply("", arguments);
+}
+
+/*** META ((export #t)
+ (peephole (postfix ".length")))
+*/
+function sc_stringLength(s) { return s.length; }
+
+/*** META ((export #t)) */
+function sc_stringRef(s, k) {
+ return new sc_Char(s.charAt(k));
+}
+
+/* there's no stringSet in the immutable version
+function sc_stringSet(s, k, c)
+*/
+
+
+/*** META ((export string=?)
+ (type bool)
+ (peephole (hole 2 str1 " === " str2)))
+*/
+function sc_isStringEqual(s1, s2) {
+ return s1 === s2;
+}
+/*** META ((export string<?)
+ (type bool)
+ (peephole (hole 2 str1 " < " str2)))
+*/
+function sc_isStringLess(s1, s2) {
+ return s1 < s2;
+}
+/*** META ((export string>?)
+ (type bool)
+ (peephole (hole 2 str1 " > " str2)))
+*/
+function sc_isStringGreater(s1, s2) {
+ return s1 > s2;
+}
+/*** META ((export string<=?)
+ (type bool)
+ (peephole (hole 2 str1 " <= " str2)))
+*/
+function sc_isStringLessEqual(s1, s2) {
+ return s1 <= s2;
+}
+/*** META ((export string>=?)
+ (type bool)
+ (peephole (hole 2 str1 " >= " str2)))
+*/
+function sc_isStringGreaterEqual(s1, s2) {
+ return s1 >= s2;
+}
+/*** META ((export string-ci=?)
+ (type bool)
+ (peephole (hole 2 str1 ".toLowerCase() === " str2 ".toLowerCase()")))
+*/
+function sc_isStringCIEqual(s1, s2) {
+ return s1.toLowerCase() === s2.toLowerCase();
+}
+/*** META ((export string-ci<?)
+ (type bool)
+ (peephole (hole 2 str1 ".toLowerCase() < " str2 ".toLowerCase()")))
+*/
+function sc_isStringCILess(s1, s2) {
+ return s1.toLowerCase() < s2.toLowerCase();
+}
+/*** META ((export string-ci>?)
+ (type bool)
+ (peephole (hole 2 str1 ".toLowerCase() > " str2 ".toLowerCase()")))
+*/
+function sc_isStringCIGreater(s1, s2) {
+ return s1.toLowerCase() > s2.toLowerCase();
+}
+/*** META ((export string-ci<=?)
+ (type bool)
+ (peephole (hole 2 str1 ".toLowerCase() <= " str2 ".toLowerCase()")))
+*/
+function sc_isStringCILessEqual(s1, s2) {
+ return s1.toLowerCase() <= s2.toLowerCase();
+}
+/*** META ((export string-ci>=?)
+ (type bool)
+ (peephole (hole 2 str1 ".toLowerCase() >= " str2 ".toLowerCase()")))
+*/
+function sc_isStringCIGreaterEqual(s1, s2) {
+ return s1.toLowerCase() >= s2.toLowerCase();
+}
+
+/*** META ((export #t)
+ (peephole (hole 3 s ".substring(" start ", " end ")")))
+*/
+function sc_substring(s, start, end) {
+ return s.substring(start, end);
+}
+
+/*** META ((export #t))
+*/
+function sc_isSubstring_at(s1, s2, i) {
+ return s2 == s1.substring(i, i+ s2.length);
+}
+
+/*** META ((export #t)
+ (peephole (infix 0 #f "+" "''")))
+*/
+function sc_stringAppend() {
+ return "".concat.apply("", arguments);
+}
+
+/*** META ((export #t)) */
+var sc_string2list = sc_jsstring2list;
+
+/*** META ((export #t)) */
+var sc_list2string = sc_list2jsstring;
+
+/*** META ((export #t)
+ (peephole (id)))
+*/
+function sc_stringCopy(s) {
+ return s;
+}
+
+/* there's no string-fill in the immutable version
+function sc_stringFill(s, c)
+*/
+
+/*** META ((export #t)
+ (peephole (postfix ".slice(1)")))
+*/
+function sc_keyword2string(o) {
+ return o.slice(1);
+}
+
+/*** META ((export #t)
+ (peephole (prefix "'\\u1E9D' +")))
+*/
+function sc_string2keyword(o) {
+ return sc_KEYWORD_PREFIX + o;
+}
+
+String.prototype.sc_toDisplayString = function() {
+ if (this.charAt(0) === sc_SYMBOL_PREFIX)
+ // TODO: care for symbols with spaces (escape-chars symbols).
+ return this.slice(1);
+ else if (this.charAt(0) === sc_KEYWORD_PREFIX)
+ return ":" + this.slice(1);
+ else
+ return this.toString();
+};
+
+String.prototype.sc_toWriteString = function() {
+ if (this.charAt(0) === sc_SYMBOL_PREFIX)
+ // TODO: care for symbols with spaces (escape-chars symbols).
+ return this.slice(1);
+ else if (this.charAt(0) === sc_KEYWORD_PREFIX)
+ return ":" + this.slice(1);
+ else
+ return '"' + sc_escapeWriteString(this) + '"';
+};
+/* Exported Variables */
+var BgL_testzd2boyerzd2;
+var BgL_nboyerzd2benchmarkzd2;
+var BgL_setupzd2boyerzd2;
+/* End Exports */
+
+var translate_term_nboyer;
+var translate_args_nboyer;
+var untranslate_term_nboyer;
+var BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer;
+var BgL_sc_za2symbolzd2recordszd2alistza2_2z00_nboyer;
+var translate_alist_nboyer;
+var apply_subst_nboyer;
+var apply_subst_lst_nboyer;
+var tautologyp_nboyer;
+var if_constructor_nboyer;
+var rewrite_count_nboyer;
+var rewrite_nboyer;
+var rewrite_args_nboyer;
+var unify_subst_nboyer;
+var one_way_unify1_nboyer;
+var false_term_nboyer;
+var true_term_nboyer;
+var trans_of_implies1_nboyer;
+var is_term_equal_nboyer;
+var is_term_member_nboyer;
+var const_nboyer;
+var sc_const_3_nboyer;
+var sc_const_4_nboyer;
+{
+ (sc_const_4_nboyer = (new sc_Pair("\u1E9Cimplies",(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cz",(new sc_Pair("\u1E9Cu",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cu",(new sc_Pair("\u1E9Cw",null)))))),null)))))),null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cw",null)))))),null)))))));
+ (sc_const_3_nboyer = sc_list((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ccompile",(new sc_Pair("\u1E9Cform",null)))),(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair((new sc_Pair("\u1E9Ccodegen",(new sc_Pair((new sc_Pair("\u1E9Coptimize",(new sc_Pair("\u1E9Cform",null)))),(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ceqp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cy",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgreaterp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clesseqp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgreatereqp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cboolean",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cf",null)),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ciff",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ceven1",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Ct",null)),(new sc_Pair((new sc_Pair("\u1E9Codd",(new sc_Pair((new sc_Pair("\u1E9Csub1",(new sc_Pair("\u1E9Cx",null)))),null)))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ccountps-",(new sc_Pair("\u1E9Cl",(new sc_Pair("\u1E9Cpred",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ccountps-loop",(new sc_Pair("\u1E9Cl",(new sc_Pair("\u1E9Cpred",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cfact-",(new sc_Pair("\u1E9Ci",null)))),(new sc_Pair((new sc_Pair("\u1E9Cfact-loop",(new sc_Pair("\u1E9Ci",(new sc_Pair((1),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Creverse-",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Creverse-loop",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdivides",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cassume-true",(new sc_Pair("\u1E9Cvar",(new sc_Pair("\u1E9Calist",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cvar",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),null)))))),(new sc_Pair("\u1E9Calist",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cassume-false",(new sc_Pair("\u1E9Cvar",(new sc_Pair("\u1E9Calist",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cvar",(new sc_Pair((new sc_Pair("\u1E9Cf",null)),null)))))),(new sc_Pair("\u1E9Calist",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctautology-checker",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Ctautologyp",(new sc_Pair((new sc_Pair("\u1E9Cnormalize",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cfalsify",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cfalsify1",(new sc_Pair((new sc_Pair("\u1E9Cnormalize",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cprime",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))),null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cprime1",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Csub1",(new sc_Pair("\u1E9Cx",null)))),null)))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair("\u1E9Cp",(new sc_Pair("\u1E9Cq",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cp",(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cq",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),(new sc_Pair((new sc_Pair("\u1E9Cf",null)),null)))))))),(new sc_Pair((new sc_Pair("\u1E9Cf",null)),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair("\u1E9Cp",(new sc_Pair("\u1E9Cq",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cp",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cq",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),(new sc_Pair((new sc_Pair("\u1E9Cf",null)),null)))))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair("\u1E9Cp",null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cp",(new sc_Pair((new sc_Pair("\u1E9Cf",null)),(new sc_Pair((new sc_Pair("\u1E9Ct",null)),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cp",(new sc_Pair("\u1E9Cq",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cp",(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cq",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),(new sc_Pair((new sc_Pair("\u1E9Cf",null)),null)))))))),(new sc_Pair((new sc_Pair("\u1E9Ct",null)),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",(new sc_Pair("\u1E9Cc",null)))))))),(new sc_Pair("\u1E9Cd",(new sc_Pair("\u1E9Ce",null)))))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Ca",(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cb",(new sc_Pair("\u1E9Cd",(new sc_Pair("\u1E9Ce",null)))))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cc",(new sc_Pair("\u1E9Cd",(new sc_Pair("\u1E9Ce",null)))))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cx",null)))),null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Ca",null)))),(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cb",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cc",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cb",null)))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cc",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair((new sc_Pair("\u1E9Cplus-tree",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair((new sc_Pair("\u1E9Cplus-tree",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair((new sc_Pair("\u1E9Cplus-tree",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair("\u1E9Ca",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair((new sc_Pair("\u1E9Cplus-tree",(new sc_Pair((new sc_Pair("\u1E9Cplus-fringe",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Ca",null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair("\u1E9Cb",null)))),(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair("\u1E9Ca",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cz",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cexec",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cpds",(new sc_Pair("\u1E9Cenvrn",null)))))))),(new sc_Pair((new sc_Pair("\u1E9Cexec",(new sc_Pair("\u1E9Cy",(new sc_Pair((new sc_Pair("\u1E9Cexec",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cpds",(new sc_Pair("\u1E9Cenvrn",null)))))))),(new sc_Pair("\u1E9Cenvrn",null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmc-flatten",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair((new sc_Pair("\u1E9Cflatten",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair("\u1E9Cy",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cb",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair("\u1E9Cy",null)))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair("\u1E9Cx",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Ca",(new sc_Pair((new sc_Pair("\u1E9Cintersect",(new sc_Pair("\u1E9Cb",(new sc_Pair("\u1E9Cc",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cc",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cnth",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),(new sc_Pair("\u1E9Ci",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cexp",(new sc_Pair("\u1E9Ci",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cj",(new sc_Pair("\u1E9Ck",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair((new sc_Pair("\u1E9Cexp",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cj",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cexp",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Ck",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cexp",(new sc_Pair("\u1E9Ci",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cj",(new sc_Pair("\u1E9Ck",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cexp",(new sc_Pair((new sc_Pair("\u1E9Cexp",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cj",null)))))),(new sc_Pair("\u1E9Ck",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Creverse-loop",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair("\u1E9Cy",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Creverse-loop",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair("\u1E9Cx",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ccount-list",(new sc_Pair("\u1E9Cz",(new sc_Pair((new sc_Pair("\u1E9Csort-lp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Ccount-list",(new sc_Pair("\u1E9Cz",(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ccount-list",(new sc_Pair("\u1E9Cz",(new sc_Pair("\u1E9Cy",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cc",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cb",(new sc_Pair("\u1E9Cc",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cy",(new sc_Pair((new sc_Pair("\u1E9Cquotient",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cx",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair((new sc_Pair("\u1E9Cbig-plus1",(new sc_Pair("\u1E9Cl",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cbase",null)))))))),(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair("\u1E9Cl",(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair("\u1E9Ci",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair((new sc_Pair("\u1E9Cbig-plus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cbase",null)))))))))),(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ci",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cbase",null)))))),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Cy",(new sc_Pair((1),null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair((new sc_Pair("\u1E9Cquotient",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cj",null)))))),(new sc_Pair("\u1E9Ci",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Ci",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cj",null)))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cj",(new sc_Pair((1),null)))))),null)))),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair((new sc_Pair("\u1E9Cpower-rep",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Ci",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair((new sc_Pair("\u1E9Cbig-plus",(new sc_Pair((new sc_Pair("\u1E9Cpower-rep",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cpower-rep",(new sc_Pair("\u1E9Cj",(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),(new sc_Pair("\u1E9Cbase",null)))))))))),(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cj",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgcd",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cgcd",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cnth",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair("\u1E9Ci",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair((new sc_Pair("\u1E9Cnth",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Ci",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnth",(new sc_Pair("\u1E9Cb",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Ci",(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair("\u1E9Ca",null)))),null)))))),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cy",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cy",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cz",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cc",(new sc_Pair("\u1E9Cw",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cc",(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cw",(new sc_Pair("\u1E9Cx",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cb",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cc",null)))))),null)))))),(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cb",(new sc_Pair("\u1E9Cc",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))),(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair("\u1E9Cy",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cz",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cz",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cy",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cx",null)))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgcd",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cz",(new sc_Pair((new sc_Pair("\u1E9Cgcd",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cvalue",(new sc_Pair((new sc_Pair("\u1E9Cnormalize",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cvalue",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Ca",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cflatten",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cy",(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnlistp",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clistp",(new sc_Pair((new sc_Pair("\u1E9Cgopher",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Clistp",(new sc_Pair("\u1E9Cx",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Csamefringe",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cflatten",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cflatten",(new sc_Pair("\u1E9Cy",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgreatest-factor",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cy",(new sc_Pair((1),null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgreatest-factor",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((1),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((1),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair((new sc_Pair("\u1E9Cgreatest-factor",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cy",(new sc_Pair((1),null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cx",null)))),null)))),null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctimes-list",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair((new sc_Pair("\u1E9Ctimes-list",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Ctimes-list",(new sc_Pair("\u1E9Cy",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cprime-list",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cprime-list",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cprime-list",(new sc_Pair("\u1E9Cy",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cz",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cw",(new sc_Pair("\u1E9Cz",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cz",null)))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cz",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cw",(new sc_Pair((1),null)))))),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgreatereqp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cy",(new sc_Pair((1),null)))))),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((1),null)))))),(new sc_Pair(sc_list("\u1E9Cand", (new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Ca",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),null)))), (new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cb",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),null)))), (new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Ca",null)))), (new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cb",null)))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Csub1",(new sc_Pair("\u1E9Ca",null)))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Csub1",(new sc_Pair("\u1E9Cb",null)))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair((new sc_Pair("\u1E9Cdelete",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cl",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair("\u1E9Cl",null)))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cl",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Csort2",(new sc_Pair((new sc_Pair("\u1E9Cdelete",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cl",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cdelete",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Csort2",(new sc_Pair("\u1E9Cl",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdsort",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Csort2",(new sc_Pair("\u1E9Cx",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cx1",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cx2",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cx3",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cx4",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cx5",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cx6",(new sc_Pair("\u1E9Cx7",null)))))),null)))))),null)))))),null)))))),null)))))),null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((6),(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair("\u1E9Cx7",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((2),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cx",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cquotient",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((2),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cquotient",(new sc_Pair("\u1E9Cy",(new sc_Pair((2),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Csigma",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),(new sc_Pair("\u1E9Ci",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cquotient",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Ci",(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair("\u1E9Ci",null)))),null)))))),(new sc_Pair((2),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair("\u1E9Cy",null)))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair("\u1E9Cx",null)))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cz",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cz",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cz",null)))),null)))))),null)))))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair((new sc_Pair("\u1E9Cplus-tree",(new sc_Pair((new sc_Pair("\u1E9Cdelete",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair((new sc_Pair("\u1E9Cplus-tree",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Ca",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair((new sc_Pair("\u1E9Cplus-tree",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair("\u1E9Ca",null)))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair("\u1E9Cy",null)))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cx",null)))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cnth",(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),(new sc_Pair("\u1E9Ci",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Ci",null)))),(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clast",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Clistp",(new sc_Pair("\u1E9Cb",null)))),(new sc_Pair((new sc_Pair("\u1E9Clast",(new sc_Pair("\u1E9Cb",null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Clistp",(new sc_Pair("\u1E9Ca",null)))),(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair((new sc_Pair("\u1E9Ccar",(new sc_Pair((new sc_Pair("\u1E9Clast",(new sc_Pair("\u1E9Ca",null)))),null)))),(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair("\u1E9Cb",null)))))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cf",null)),(new sc_Pair("\u1E9Cz",null)))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cassignment",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Cassignedp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cassignment",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cassignment",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cb",null)))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ccar",(new sc_Pair((new sc_Pair("\u1E9Cgopher",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Clistp",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Ccar",(new sc_Pair((new sc_Pair("\u1E9Cflatten",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cflatten",(new sc_Pair((new sc_Pair("\u1E9Ccdr",(new sc_Pair((new sc_Pair("\u1E9Cgopher",(new sc_Pair("\u1E9Cx",null)))),null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Clistp",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Ccdr",(new sc_Pair((new sc_Pair("\u1E9Cflatten",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cquotient",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cx",null)))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cget",(new sc_Pair("\u1E9Cj",(new sc_Pair((new sc_Pair("\u1E9Cset",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cval",(new sc_Pair("\u1E9Cmem",null)))))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Ceqp",(new sc_Pair("\u1E9Cj",(new sc_Pair("\u1E9Ci",null)))))),(new sc_Pair("\u1E9Cval",(new sc_Pair((new sc_Pair("\u1E9Cget",(new sc_Pair("\u1E9Cj",(new sc_Pair("\u1E9Cmem",null)))))),null)))))))),null))))))));
+ (const_nboyer = (new sc_Pair((new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cf",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cc",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cf",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cc",(new sc_Pair("\u1E9Cd",null)))))),null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cz",(new sc_Pair("\u1E9Cf",(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),null)))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cu",(new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))))),(new sc_Pair((new sc_Pair("\u1E9Cw",(new sc_Pair("\u1E9Clessp",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Ca",(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair("\u1E9Cb",null)))),null)))))),null)))))))),null)))))))))));
+ BgL_nboyerzd2benchmarkzd2 = function() {
+ var args = null;
+ for (var sc_tmp = arguments.length - 1; sc_tmp >= 0; sc_tmp--) {
+ args = sc_cons(arguments[sc_tmp], args);
+ }
+ var n;
+ return ((n = ((args === null)?(0):(args.car))), (BgL_setupzd2boyerzd2()), (BgL_runzd2benchmarkzd2(("nboyer"+(sc_number2string(n))), (1), function() {
+ return (BgL_testzd2boyerzd2(n));
+ }, function(rewrites) {
+ if ((sc_isNumber(rewrites)))
+ switch (n) {
+ case (0):
+ return (rewrites===(95024));
+ break;
+ case (1):
+ return (rewrites===(591777));
+ break;
+ case (2):
+ return (rewrites===(1813975));
+ break;
+ case (3):
+ return (rewrites===(5375678));
+ break;
+ case (4):
+ return (rewrites===(16445406));
+ break;
+ case (5):
+ return (rewrites===(51507739));
+ break;
+ default:
+ return true;
+ break;
+ }
+ else
+ return false;
+ })));
+ };
+ BgL_setupzd2boyerzd2 = function() {
+ return true;
+ };
+ BgL_testzd2boyerzd2 = function() {
+ return true;
+ };
+ translate_term_nboyer = function(term) {
+ var lst;
+ return (!(term instanceof sc_Pair)?term:(new sc_Pair((BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer((term.car))), ((lst = (term.cdr)), ((lst === null)?null:(new sc_Pair((translate_term_nboyer((lst.car))), (translate_args_nboyer((lst.cdr))))))))));
+ };
+ translate_args_nboyer = function(lst) {
+ var sc_lst_5;
+ var term;
+ return ((lst === null)?null:(new sc_Pair(((term = (lst.car)), (!(term instanceof sc_Pair)?term:(new sc_Pair((BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer((term.car))), (translate_args_nboyer((term.cdr))))))), ((sc_lst_5 = (lst.cdr)), ((sc_lst_5 === null)?null:(new sc_Pair((translate_term_nboyer((sc_lst_5.car))), (translate_args_nboyer((sc_lst_5.cdr))))))))));
+ };
+ untranslate_term_nboyer = function(term) {
+ var optrOpnd;
+ var tail1131;
+ var L1127;
+ var falseHead1130;
+ var symbol_record;
+ if (!(term instanceof sc_Pair))
+ return term;
+ else
+ {
+ (falseHead1130 = (new sc_Pair(null, null)));
+ (L1127 = (term.cdr));
+ (tail1131 = falseHead1130);
+ while (!(L1127 === null)) {
+ {
+ (tail1131.cdr = (new sc_Pair((untranslate_term_nboyer((L1127.car))), null)));
+ (tail1131 = (tail1131.cdr));
+ (L1127 = (L1127.cdr));
+ }
+ }
+ (optrOpnd = (falseHead1130.cdr));
+ return (new sc_Pair(((symbol_record = (term.car)), (symbol_record[(0)])), optrOpnd));
+ }
+ };
+ BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer = function(sym) {
+ var r;
+ var x;
+ return ((x = (sc_assq(sym, BgL_sc_za2symbolzd2recordszd2alistza2_2z00_nboyer))), ((x!== false)?(x.cdr):((r = [sym, null]), (BgL_sc_za2symbolzd2recordszd2alistza2_2z00_nboyer = (new sc_Pair((new sc_Pair(sym, r)), BgL_sc_za2symbolzd2recordszd2alistza2_2z00_nboyer))), r)));
+ };
+ (BgL_sc_za2symbolzd2recordszd2alistza2_2z00_nboyer = null);
+ translate_alist_nboyer = function(alist) {
+ var sc_alist_6;
+ var term;
+ return ((alist === null)?null:(new sc_Pair((new sc_Pair((alist.car.car), ((term = (alist.car.cdr)), (!(term instanceof sc_Pair)?term:(new sc_Pair((BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer((term.car))), (translate_args_nboyer((term.cdr))))))))), ((sc_alist_6 = (alist.cdr)), ((sc_alist_6 === null)?null:(new sc_Pair((new sc_Pair((sc_alist_6.car.car), (translate_term_nboyer((sc_alist_6.car.cdr))))), (translate_alist_nboyer((sc_alist_6.cdr))))))))));
+ };
+ apply_subst_nboyer = function(alist, term) {
+ var lst;
+ var temp_temp;
+ return (!(term instanceof sc_Pair)?((temp_temp = (sc_assq(term, alist))), ((temp_temp!== false)?(temp_temp.cdr):term)):(new sc_Pair((term.car), ((lst = (term.cdr)), ((lst === null)?null:(new sc_Pair((apply_subst_nboyer(alist, (lst.car))), (apply_subst_lst_nboyer(alist, (lst.cdr))))))))));
+ };
+ apply_subst_lst_nboyer = function(alist, lst) {
+ var sc_lst_7;
+ return ((lst === null)?null:(new sc_Pair((apply_subst_nboyer(alist, (lst.car))), ((sc_lst_7 = (lst.cdr)), ((sc_lst_7 === null)?null:(new sc_Pair((apply_subst_nboyer(alist, (sc_lst_7.car))), (apply_subst_lst_nboyer(alist, (sc_lst_7.cdr))))))))));
+ };
+ tautologyp_nboyer = function(sc_x_11, true_lst, false_lst) {
+ var tmp1125;
+ var x;
+ var tmp1126;
+ var sc_x_8;
+ var sc_tmp1125_9;
+ var sc_tmp1126_10;
+ var sc_x_11;
+ var true_lst;
+ var false_lst;
+ while (true) {
+ if ((((sc_tmp1126_10 = (is_term_equal_nboyer(sc_x_11, true_term_nboyer))), ((sc_tmp1126_10!== false)?sc_tmp1126_10:(is_term_member_nboyer(sc_x_11, true_lst))))!== false))
+ return true;
+ else
+ if ((((sc_tmp1125_9 = (is_term_equal_nboyer(sc_x_11, false_term_nboyer))), ((sc_tmp1125_9!== false)?sc_tmp1125_9:(is_term_member_nboyer(sc_x_11, false_lst))))!== false))
+ return false;
+ else
+ if (!(sc_x_11 instanceof sc_Pair))
+ return false;
+ else
+ if (((sc_x_11.car)===if_constructor_nboyer))
+ if ((((sc_x_8 = (sc_x_11.cdr.car)), (tmp1126 = (is_term_equal_nboyer(sc_x_8, true_term_nboyer))), ((tmp1126!== false)?tmp1126:(is_term_member_nboyer(sc_x_8, true_lst))))!== false))
+ (sc_x_11 = (sc_x_11.cdr.cdr.car));
+ else
+ if ((((x = (sc_x_11.cdr.car)), (tmp1125 = (is_term_equal_nboyer(x, false_term_nboyer))), ((tmp1125!== false)?tmp1125:(is_term_member_nboyer(x, false_lst))))!== false))
+ (sc_x_11 = (sc_x_11.cdr.cdr.cdr.car));
+ else
+ if (((tautologyp_nboyer((sc_x_11.cdr.cdr.car), (new sc_Pair((sc_x_11.cdr.car), true_lst)), false_lst))!== false))
+ {
+ (false_lst = (new sc_Pair((sc_x_11.cdr.car), false_lst)));
+ (sc_x_11 = (sc_x_11.cdr.cdr.cdr.car));
+ }
+ else
+ return false;
+ else
+ return false;
+ }
+ };
+ (if_constructor_nboyer = "\u1E9C*");
+ (rewrite_count_nboyer = (0));
+ rewrite_nboyer = function(term) {
+ var term2;
+ var sc_term_12;
+ var lst;
+ var symbol_record;
+ var sc_lst_13;
+ {
+ (++rewrite_count_nboyer);
+ if (!(term instanceof sc_Pair))
+ return term;
+ else
+ {
+ (sc_term_12 = (new sc_Pair((term.car), ((sc_lst_13 = (term.cdr)), ((sc_lst_13 === null)?null:(new sc_Pair((rewrite_nboyer((sc_lst_13.car))), (rewrite_args_nboyer((sc_lst_13.cdr))))))))));
+ (lst = ((symbol_record = (term.car)), (symbol_record[(1)])));
+ while (true) {
+ if ((lst === null))
+ return sc_term_12;
+ else
+ if ((((term2 = ((lst.car).cdr.car)), (unify_subst_nboyer = null), (one_way_unify1_nboyer(sc_term_12, term2)))!== false))
+ return (rewrite_nboyer((apply_subst_nboyer(unify_subst_nboyer, ((lst.car).cdr.cdr.car)))));
+ else
+ (lst = (lst.cdr));
+ }
+ }
+ }
+ };
+ rewrite_args_nboyer = function(lst) {
+ var sc_lst_14;
+ return ((lst === null)?null:(new sc_Pair((rewrite_nboyer((lst.car))), ((sc_lst_14 = (lst.cdr)), ((sc_lst_14 === null)?null:(new sc_Pair((rewrite_nboyer((sc_lst_14.car))), (rewrite_args_nboyer((sc_lst_14.cdr))))))))));
+ };
+ (unify_subst_nboyer = "\u1E9C*");
+ one_way_unify1_nboyer = function(term1, term2) {
+ var lst1;
+ var lst2;
+ var temp_temp;
+ if (!(term2 instanceof sc_Pair))
+ {
+ (temp_temp = (sc_assq(term2, unify_subst_nboyer)));
+ if ((temp_temp!== false))
+ return (is_term_equal_nboyer(term1, (temp_temp.cdr)));
+ else
+ if ((sc_isNumber(term2)))
+ return (sc_isEqual(term1, term2));
+ else
+ {
+ (unify_subst_nboyer = (new sc_Pair((new sc_Pair(term2, term1)), unify_subst_nboyer)));
+ return true;
+ }
+ }
+ else
+ if (!(term1 instanceof sc_Pair))
+ return false;
+ else
+ if (((term1.car)===(term2.car)))
+ {
+ (lst1 = (term1.cdr));
+ (lst2 = (term2.cdr));
+ while (true) {
+ if ((lst1 === null))
+ return (lst2 === null);
+ else
+ if ((lst2 === null))
+ return false;
+ else
+ if (((one_way_unify1_nboyer((lst1.car), (lst2.car)))!== false))
+ {
+ (lst1 = (lst1.cdr));
+ (lst2 = (lst2.cdr));
+ }
+ else
+ return false;
+ }
+ }
+ else
+ return false;
+ };
+ (false_term_nboyer = "\u1E9C*");
+ (true_term_nboyer = "\u1E9C*");
+ trans_of_implies1_nboyer = function(n) {
+ var sc_n_15;
+ return ((sc_isEqual(n, (1)))?(sc_list("\u1E9Cimplies", (0), (1))):(sc_list("\u1E9Cand", (sc_list("\u1E9Cimplies", (n-(1)), n)), ((sc_n_15 = (n-(1))), ((sc_isEqual(sc_n_15, (1)))?(sc_list("\u1E9Cimplies", (0), (1))):(sc_list("\u1E9Cand", (sc_list("\u1E9Cimplies", (sc_n_15-(1)), sc_n_15)), (trans_of_implies1_nboyer((sc_n_15-(1)))))))))));
+ };
+ is_term_equal_nboyer = function(x, y) {
+ var lst1;
+ var lst2;
+ var r2;
+ var r1;
+ if ((x instanceof sc_Pair))
+ if ((y instanceof sc_Pair))
+ if ((((r1 = (x.car)), (r2 = (y.car)), (r1===r2))!== false))
+ {
+ (lst1 = (x.cdr));
+ (lst2 = (y.cdr));
+ while (true) {
+ if ((lst1 === null))
+ return (lst2 === null);
+ else
+ if ((lst2 === null))
+ return false;
+ else
+ if (((is_term_equal_nboyer((lst1.car), (lst2.car)))!== false))
+ {
+ (lst1 = (lst1.cdr));
+ (lst2 = (lst2.cdr));
+ }
+ else
+ return false;
+ }
+ }
+ else
+ return false;
+ else
+ return false;
+ else
+ return (sc_isEqual(x, y));
+ };
+ is_term_member_nboyer = function(x, lst) {
+ var x;
+ var lst;
+ while (true) {
+ if ((lst === null))
+ return false;
+ else
+ if (((is_term_equal_nboyer(x, (lst.car)))!== false))
+ return true;
+ else
+ (lst = (lst.cdr));
+ }
+ };
+ BgL_setupzd2boyerzd2 = function() {
+ var symbol_record;
+ var value;
+ var BgL_sc_symbolzd2record_16zd2;
+ var sym;
+ var sc_sym_17;
+ var term;
+ var lst;
+ var sc_term_18;
+ var sc_term_19;
+ {
+ (BgL_sc_za2symbolzd2recordszd2alistza2_2z00_nboyer = null);
+ (if_constructor_nboyer = (BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer("\u1E9Cif")));
+ (false_term_nboyer = ((sc_term_19 = (new sc_Pair("\u1E9Cf",null))), (!(sc_term_19 instanceof sc_Pair)?sc_term_19:(new sc_Pair((BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer((sc_term_19.car))), (translate_args_nboyer((sc_term_19.cdr))))))));
+ (true_term_nboyer = ((sc_term_18 = (new sc_Pair("\u1E9Ct",null))), (!(sc_term_18 instanceof sc_Pair)?sc_term_18:(new sc_Pair((BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer((sc_term_18.car))), (translate_args_nboyer((sc_term_18.cdr))))))));
+ (lst = sc_const_3_nboyer);
+ while (!(lst === null)) {
+ {
+ (term = (lst.car));
+ if (((term instanceof sc_Pair)&&(((term.car)==="\u1E9Cequal")&&((term.cdr.car) instanceof sc_Pair))))
+ {
+ (sc_sym_17 = ((term.cdr.car).car));
+ (value = (new sc_Pair((!(term instanceof sc_Pair)?term:(new sc_Pair((BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer((term.car))), (translate_args_nboyer((term.cdr)))))), ((sym = ((term.cdr.car).car)), (BgL_sc_symbolzd2record_16zd2 = (BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer(sym))), (BgL_sc_symbolzd2record_16zd2[(1)])))));
+ (symbol_record = (BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer(sc_sym_17)));
+ (symbol_record[(1)] = value);
+ }
+ else
+ (sc_error("ADD-LEMMA did not like term: ", term));
+ (lst = (lst.cdr));
+ }
+ }
+ return true;
+ }
+ };
+ BgL_testzd2boyerzd2 = function(n) {
+ var optrOpnd;
+ var term;
+ var sc_n_20;
+ var answer;
+ var sc_term_21;
+ var sc_term_22;
+ {
+ (rewrite_count_nboyer = (0));
+ (term = sc_const_4_nboyer);
+ (sc_n_20 = n);
+ while (!(sc_n_20=== 0)) {
+ {
+ (term = (sc_list("\u1E9Cor", term, (new sc_Pair("\u1E9Cf",null)))));
+ (--sc_n_20);
+ }
+ }
+ (sc_term_22 = term);
+ if (!(sc_term_22 instanceof sc_Pair))
+ (optrOpnd = sc_term_22);
+ else
+ (optrOpnd = (new sc_Pair((BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer((sc_term_22.car))), (translate_args_nboyer((sc_term_22.cdr))))));
+ (sc_term_21 = (apply_subst_nboyer(((const_nboyer === null)?null:(new sc_Pair((new sc_Pair((const_nboyer.car.car), (translate_term_nboyer((const_nboyer.car.cdr))))), (translate_alist_nboyer((const_nboyer.cdr)))))), optrOpnd)));
+ (answer = (tautologyp_nboyer((rewrite_nboyer(sc_term_21)), null, null)));
+ (sc_write(rewrite_count_nboyer));
+ (sc_display(" rewrites"));
+ (sc_newline());
+ if ((answer!== false))
+ return rewrite_count_nboyer;
+ else
+ return false;
+ }
+ };
+}
+/* Exported Variables */
+var BgL_parsezd2ze3nbzd2treesze3;
+var BgL_earleyzd2benchmarkzd2;
+var BgL_parsezd2ze3parsedzf3zc2;
+var test;
+var BgL_parsezd2ze3treesz31;
+var BgL_makezd2parserzd2;
+/* End Exports */
+
+var const_earley;
+{
+ (const_earley = (new sc_Pair((new sc_Pair("\u1E9Cs",(new sc_Pair((new sc_Pair("\u1E9Ca",null)),(new sc_Pair((new sc_Pair("\u1E9Cs",(new sc_Pair("\u1E9Cs",null)))),null)))))),null)));
+ BgL_makezd2parserzd2 = function(grammar, lexer) {
+ var i;
+ var parser_descr;
+ var def_loop;
+ var nb_nts;
+ var names;
+ var steps;
+ var predictors;
+ var enders;
+ var starters;
+ var nts;
+ var sc_names_1;
+ var sc_steps_2;
+ var sc_predictors_3;
+ var sc_enders_4;
+ var sc_starters_5;
+ var nb_confs;
+ var BgL_sc_defzd2loop_6zd2;
+ var BgL_sc_nbzd2nts_7zd2;
+ var sc_nts_8;
+ var BgL_sc_defzd2loop_9zd2;
+ var ind;
+ {
+ ind = function(nt, sc_nts_10) {
+ var i;
+ {
+ (i = ((sc_nts_10.length)-(1)));
+ while (true) {
+ if ((i>=(0)))
+ if ((sc_isEqual((sc_nts_10[i]), nt)))
+ return i;
+ else
+ (--i);
+ else
+ return false;
+ }
+ }
+ };
+ (sc_nts_8 = ((BgL_sc_defzd2loop_9zd2 = function(defs, sc_nts_11) {
+ var rule_loop;
+ var head;
+ var def;
+ return ((defs instanceof sc_Pair)?((def = (defs.car)), (head = (def.car)), (rule_loop = function(rules, sc_nts_12) {
+ var nt;
+ var l;
+ var sc_nts_13;
+ var rule;
+ if ((rules instanceof sc_Pair))
+ {
+ (rule = (rules.car));
+ (l = rule);
+ (sc_nts_13 = sc_nts_12);
+ while ((l instanceof sc_Pair)) {
+ {
+ (nt = (l.car));
+ (l = (l.cdr));
+ (sc_nts_13 = (((sc_member(nt, sc_nts_13))!== false)?sc_nts_13:(new sc_Pair(nt, sc_nts_13))));
+ }
+ }
+ return (rule_loop((rules.cdr), sc_nts_13));
+ }
+ else
+ return (BgL_sc_defzd2loop_9zd2((defs.cdr), sc_nts_12));
+ }), (rule_loop((def.cdr), (((sc_member(head, sc_nts_11))!== false)?sc_nts_11:(new sc_Pair(head, sc_nts_11)))))):(sc_list2vector((sc_reverse(sc_nts_11)))));
+ }), (BgL_sc_defzd2loop_9zd2(grammar, null))));
+ (BgL_sc_nbzd2nts_7zd2 = (sc_nts_8.length));
+ (nb_confs = (((BgL_sc_defzd2loop_6zd2 = function(defs, BgL_sc_nbzd2confs_14zd2) {
+ var rule_loop;
+ var def;
+ return ((defs instanceof sc_Pair)?((def = (defs.car)), (rule_loop = function(rules, BgL_sc_nbzd2confs_15zd2) {
+ var l;
+ var BgL_sc_nbzd2confs_16zd2;
+ var rule;
+ if ((rules instanceof sc_Pair))
+ {
+ (rule = (rules.car));
+ (l = rule);
+ (BgL_sc_nbzd2confs_16zd2 = BgL_sc_nbzd2confs_15zd2);
+ while ((l instanceof sc_Pair)) {
+ {
+ (l = (l.cdr));
+ (++BgL_sc_nbzd2confs_16zd2);
+ }
+ }
+ return (rule_loop((rules.cdr), (BgL_sc_nbzd2confs_16zd2+(1))));
+ }
+ else
+ return (BgL_sc_defzd2loop_6zd2((defs.cdr), BgL_sc_nbzd2confs_15zd2));
+ }), (rule_loop((def.cdr), BgL_sc_nbzd2confs_14zd2))):BgL_sc_nbzd2confs_14zd2);
+ }), (BgL_sc_defzd2loop_6zd2(grammar, (0))))+BgL_sc_nbzd2nts_7zd2));
+ (sc_starters_5 = (sc_makeVector(BgL_sc_nbzd2nts_7zd2, null)));
+ (sc_enders_4 = (sc_makeVector(BgL_sc_nbzd2nts_7zd2, null)));
+ (sc_predictors_3 = (sc_makeVector(BgL_sc_nbzd2nts_7zd2, null)));
+ (sc_steps_2 = (sc_makeVector(nb_confs, false)));
+ (sc_names_1 = (sc_makeVector(nb_confs, false)));
+ (nts = sc_nts_8);
+ (starters = sc_starters_5);
+ (enders = sc_enders_4);
+ (predictors = sc_predictors_3);
+ (steps = sc_steps_2);
+ (names = sc_names_1);
+ (nb_nts = (sc_nts_8.length));
+ (i = (nb_nts-(1)));
+ while ((i>=(0))) {
+ {
+ (sc_steps_2[i] = (i-nb_nts));
+ (sc_names_1[i] = (sc_list((sc_nts_8[i]), (0))));
+ (sc_enders_4[i] = (sc_list(i)));
+ (--i);
+ }
+ }
+ def_loop = function(defs, conf) {
+ var rule_loop;
+ var head;
+ var def;
+ return ((defs instanceof sc_Pair)?((def = (defs.car)), (head = (def.car)), (rule_loop = function(rules, conf, rule_num) {
+ var i;
+ var sc_i_17;
+ var nt;
+ var l;
+ var sc_conf_18;
+ var sc_i_19;
+ var rule;
+ if ((rules instanceof sc_Pair))
+ {
+ (rule = (rules.car));
+ (names[conf] = (sc_list(head, rule_num)));
+ (sc_i_19 = (ind(head, nts)));
+ (starters[sc_i_19] = (new sc_Pair(conf, (starters[sc_i_19]))));
+ (l = rule);
+ (sc_conf_18 = conf);
+ while ((l instanceof sc_Pair)) {
+ {
+ (nt = (l.car));
+ (steps[sc_conf_18] = (ind(nt, nts)));
+ (sc_i_17 = (ind(nt, nts)));
+ (predictors[sc_i_17] = (new sc_Pair(sc_conf_18, (predictors[sc_i_17]))));
+ (l = (l.cdr));
+ (++sc_conf_18);
+ }
+ }
+ (steps[sc_conf_18] = ((ind(head, nts))-nb_nts));
+ (i = (ind(head, nts)));
+ (enders[i] = (new sc_Pair(sc_conf_18, (enders[i]))));
+ return (rule_loop((rules.cdr), (sc_conf_18+(1)), (rule_num+(1))));
+ }
+ else
+ return (def_loop((defs.cdr), conf));
+ }), (rule_loop((def.cdr), conf, (1)))):undefined);
+ };
+ (def_loop(grammar, (sc_nts_8.length)));
+ (parser_descr = [lexer, sc_nts_8, sc_starters_5, sc_enders_4, sc_predictors_3, sc_steps_2, sc_names_1]);
+ return function(input) {
+ var optrOpnd;
+ var sc_optrOpnd_20;
+ var sc_optrOpnd_21;
+ var sc_optrOpnd_22;
+ var loop1;
+ var BgL_sc_stateza2_23za2;
+ var toks;
+ var BgL_sc_nbzd2nts_24zd2;
+ var sc_steps_25;
+ var sc_enders_26;
+ var state_num;
+ var BgL_sc_statesza2_27za2;
+ var states;
+ var i;
+ var conf;
+ var l;
+ var tok_nts;
+ var sc_i_28;
+ var sc_i_29;
+ var l1;
+ var l2;
+ var tok;
+ var tail1129;
+ var L1125;
+ var goal_enders;
+ var BgL_sc_statesza2_30za2;
+ var BgL_sc_nbzd2nts_31zd2;
+ var BgL_sc_nbzd2confs_32zd2;
+ var nb_toks;
+ var goal_starters;
+ var sc_states_33;
+ var BgL_sc_nbzd2confs_34zd2;
+ var BgL_sc_nbzd2toks_35zd2;
+ var sc_toks_36;
+ var falseHead1128;
+ var sc_names_37;
+ var sc_steps_38;
+ var sc_predictors_39;
+ var sc_enders_40;
+ var sc_starters_41;
+ var sc_nts_42;
+ var lexer;
+ var sc_ind_43;
+ var make_states;
+ var BgL_sc_confzd2setzd2getza2_44za2;
+ var conf_set_merge_new_bang;
+ var conf_set_adjoin;
+ var BgL_sc_confzd2setzd2adjoinza2_45za2;
+ var BgL_sc_confzd2setzd2adjoinza2za2_46z00;
+ var conf_set_union;
+ var forw;
+ var is_parsed;
+ var deriv_trees;
+ var BgL_sc_derivzd2treesza2_47z70;
+ var nb_deriv_trees;
+ var BgL_sc_nbzd2derivzd2treesza2_48za2;
+ {
+ sc_ind_43 = function(nt, sc_nts_49) {
+ var i;
+ {
+ (i = ((sc_nts_49.length)-(1)));
+ while (true) {
+ if ((i>=(0)))
+ if ((sc_isEqual((sc_nts_49[i]), nt)))
+ return i;
+ else
+ (--i);
+ else
+ return false;
+ }
+ }
+ };
+ make_states = function(BgL_sc_nbzd2toks_50zd2, BgL_sc_nbzd2confs_51zd2) {
+ var v;
+ var i;
+ var sc_states_52;
+ {
+ (sc_states_52 = (sc_makeVector((BgL_sc_nbzd2toks_50zd2+(1)), false)));
+ (i = BgL_sc_nbzd2toks_50zd2);
+ while ((i>=(0))) {
+ {
+ (v = (sc_makeVector((BgL_sc_nbzd2confs_51zd2+(1)), false)));
+ (v[(0)] = (-1));
+ (sc_states_52[i] = v);
+ (--i);
+ }
+ }
+ return sc_states_52;
+ }
+ };
+ BgL_sc_confzd2setzd2getza2_44za2 = function(state, BgL_sc_statezd2num_53zd2, sc_conf_54) {
+ var conf_set;
+ var BgL_sc_confzd2set_55zd2;
+ return ((BgL_sc_confzd2set_55zd2 = (state[(sc_conf_54+(1))])), ((BgL_sc_confzd2set_55zd2!== false)?BgL_sc_confzd2set_55zd2:((conf_set = (sc_makeVector((BgL_sc_statezd2num_53zd2+(6)), false))), (conf_set[(1)] = (-3)), (conf_set[(2)] = (-1)), (conf_set[(3)] = (-1)), (conf_set[(4)] = (-1)), (state[(sc_conf_54+(1))] = conf_set), conf_set)));
+ };
+ conf_set_merge_new_bang = function(conf_set) {
+ return ((conf_set[((conf_set[(1)])+(5))] = (conf_set[(4)])), (conf_set[(1)] = (conf_set[(3)])), (conf_set[(3)] = (-1)), (conf_set[(4)] = (-1)));
+ };
+ conf_set_adjoin = function(state, conf_set, sc_conf_56, i) {
+ var tail;
+ return ((tail = (conf_set[(3)])), (conf_set[(i+(5))] = (-1)), (conf_set[(tail+(5))] = i), (conf_set[(3)] = i), ((tail<(0))?((conf_set[(0)] = (state[(0)])), (state[(0)] = sc_conf_56)):undefined));
+ };
+ BgL_sc_confzd2setzd2adjoinza2_45za2 = function(sc_states_57, BgL_sc_statezd2num_58zd2, l, i) {
+ var conf_set;
+ var sc_conf_59;
+ var l1;
+ var state;
+ {
+ (state = (sc_states_57[BgL_sc_statezd2num_58zd2]));
+ (l1 = l);
+ while ((l1 instanceof sc_Pair)) {
+ {
+ (sc_conf_59 = (l1.car));
+ (conf_set = (BgL_sc_confzd2setzd2getza2_44za2(state, BgL_sc_statezd2num_58zd2, sc_conf_59)));
+ if (((conf_set[(i+(5))])=== false))
+ {
+ (conf_set_adjoin(state, conf_set, sc_conf_59, i));
+ (l1 = (l1.cdr));
+ }
+ else
+ (l1 = (l1.cdr));
+ }
+ }
+ return undefined;
+ }
+ };
+ BgL_sc_confzd2setzd2adjoinza2za2_46z00 = function(sc_states_60, BgL_sc_statesza2_61za2, BgL_sc_statezd2num_62zd2, sc_conf_63, i) {
+ var BgL_sc_confzd2setza2_64z70;
+ var BgL_sc_stateza2_65za2;
+ var conf_set;
+ var state;
+ return ((state = (sc_states_60[BgL_sc_statezd2num_62zd2])), ((((conf_set = (state[(sc_conf_63+(1))])), ((conf_set!== false)?(conf_set[(i+(5))]):false))!== false)?((BgL_sc_stateza2_65za2 = (BgL_sc_statesza2_61za2[BgL_sc_statezd2num_62zd2])), (BgL_sc_confzd2setza2_64z70 = (BgL_sc_confzd2setzd2getza2_44za2(BgL_sc_stateza2_65za2, BgL_sc_statezd2num_62zd2, sc_conf_63))), (((BgL_sc_confzd2setza2_64z70[(i+(5))])=== false)?(conf_set_adjoin(BgL_sc_stateza2_65za2, BgL_sc_confzd2setza2_64z70, sc_conf_63, i)):undefined), true):false));
+ };
+ conf_set_union = function(state, conf_set, sc_conf_66, other_set) {
+ var i;
+ {
+ (i = (other_set[(2)]));
+ while ((i>=(0))) {
+ if (((conf_set[(i+(5))])=== false))
+ {
+ (conf_set_adjoin(state, conf_set, sc_conf_66, i));
+ (i = (other_set[(i+(5))]));
+ }
+ else
+ (i = (other_set[(i+(5))]));
+ }
+ return undefined;
+ }
+ };
+ forw = function(sc_states_67, BgL_sc_statezd2num_68zd2, sc_starters_69, sc_enders_70, sc_predictors_71, sc_steps_72, sc_nts_73) {
+ var next_set;
+ var next;
+ var conf_set;
+ var ender;
+ var l;
+ var starter_set;
+ var starter;
+ var sc_l_74;
+ var sc_loop1_75;
+ var head;
+ var BgL_sc_confzd2set_76zd2;
+ var BgL_sc_statezd2num_77zd2;
+ var state;
+ var sc_states_78;
+ var preds;
+ var BgL_sc_confzd2set_79zd2;
+ var step;
+ var sc_conf_80;
+ var BgL_sc_nbzd2nts_81zd2;
+ var sc_state_82;
+ {
+ (sc_state_82 = (sc_states_67[BgL_sc_statezd2num_68zd2]));
+ (BgL_sc_nbzd2nts_81zd2 = (sc_nts_73.length));
+ while (true) {
+ {
+ (sc_conf_80 = (sc_state_82[(0)]));
+ if ((sc_conf_80>=(0)))
+ {
+ (step = (sc_steps_72[sc_conf_80]));
+ (BgL_sc_confzd2set_79zd2 = (sc_state_82[(sc_conf_80+(1))]));
+ (head = (BgL_sc_confzd2set_79zd2[(4)]));
+ (sc_state_82[(0)] = (BgL_sc_confzd2set_79zd2[(0)]));
+ (conf_set_merge_new_bang(BgL_sc_confzd2set_79zd2));
+ if ((step>=(0)))
+ {
+ (sc_l_74 = (sc_starters_69[step]));
+ while ((sc_l_74 instanceof sc_Pair)) {
+ {
+ (starter = (sc_l_74.car));
+ (starter_set = (BgL_sc_confzd2setzd2getza2_44za2(sc_state_82, BgL_sc_statezd2num_68zd2, starter)));
+ if (((starter_set[(BgL_sc_statezd2num_68zd2+(5))])=== false))
+ {
+ (conf_set_adjoin(sc_state_82, starter_set, starter, BgL_sc_statezd2num_68zd2));
+ (sc_l_74 = (sc_l_74.cdr));
+ }
+ else
+ (sc_l_74 = (sc_l_74.cdr));
+ }
+ }
+ (l = (sc_enders_70[step]));
+ while ((l instanceof sc_Pair)) {
+ {
+ (ender = (l.car));
+ if ((((conf_set = (sc_state_82[(ender+(1))])), ((conf_set!== false)?(conf_set[(BgL_sc_statezd2num_68zd2+(5))]):false))!== false))
+ {
+ (next = (sc_conf_80+(1)));
+ (next_set = (BgL_sc_confzd2setzd2getza2_44za2(sc_state_82, BgL_sc_statezd2num_68zd2, next)));
+ (conf_set_union(sc_state_82, next_set, next, BgL_sc_confzd2set_79zd2));
+ (l = (l.cdr));
+ }
+ else
+ (l = (l.cdr));
+ }
+ }
+ }
+ else
+ {
+ (preds = (sc_predictors_71[(step+BgL_sc_nbzd2nts_81zd2)]));
+ (sc_states_78 = sc_states_67);
+ (state = sc_state_82);
+ (BgL_sc_statezd2num_77zd2 = BgL_sc_statezd2num_68zd2);
+ (BgL_sc_confzd2set_76zd2 = BgL_sc_confzd2set_79zd2);
+ sc_loop1_75 = function(l) {
+ var sc_state_83;
+ var BgL_sc_nextzd2set_84zd2;
+ var sc_next_85;
+ var pred_set;
+ var i;
+ var pred;
+ if ((l instanceof sc_Pair))
+ {
+ (pred = (l.car));
+ (i = head);
+ while ((i>=(0))) {
+ {
+ (pred_set = ((sc_state_83 = (sc_states_78[i])), (sc_state_83[(pred+(1))])));
+ if ((pred_set!== false))
+ {
+ (sc_next_85 = (pred+(1)));
+ (BgL_sc_nextzd2set_84zd2 = (BgL_sc_confzd2setzd2getza2_44za2(state, BgL_sc_statezd2num_77zd2, sc_next_85)));
+ (conf_set_union(state, BgL_sc_nextzd2set_84zd2, sc_next_85, pred_set));
+ }
+ (i = (BgL_sc_confzd2set_76zd2[(i+(5))]));
+ }
+ }
+ return (sc_loop1_75((l.cdr)));
+ }
+ else
+ return undefined;
+ };
+ (sc_loop1_75(preds));
+ }
+ }
+ else
+ return undefined;
+ }
+ }
+ }
+ };
+ is_parsed = function(nt, i, j, sc_nts_86, sc_enders_87, sc_states_88) {
+ var conf_set;
+ var state;
+ var sc_conf_89;
+ var l;
+ var BgL_sc_ntza2_90za2;
+ {
+ (BgL_sc_ntza2_90za2 = (sc_ind_43(nt, sc_nts_86)));
+ if ((BgL_sc_ntza2_90za2!== false))
+ {
+ (sc_nts_86.length);
+ (l = (sc_enders_87[BgL_sc_ntza2_90za2]));
+ while (true) {
+ if ((l instanceof sc_Pair))
+ {
+ (sc_conf_89 = (l.car));
+ if ((((state = (sc_states_88[j])), (conf_set = (state[(sc_conf_89+(1))])), ((conf_set!== false)?(conf_set[(i+(5))]):false))!== false))
+ return true;
+ else
+ (l = (l.cdr));
+ }
+ else
+ return false;
+ }
+ }
+ else
+ return false;
+ }
+ };
+ deriv_trees = function(sc_conf_91, i, j, sc_enders_92, sc_steps_93, sc_names_94, sc_toks_95, sc_states_96, BgL_sc_nbzd2nts_97zd2) {
+ var sc_loop1_98;
+ var prev;
+ var name;
+ return ((name = (sc_names_94[sc_conf_91])), ((name!== false)?((sc_conf_91<BgL_sc_nbzd2nts_97zd2)?(sc_list((sc_list(name, ((sc_toks_95[i]).car))))):(sc_list((sc_list(name))))):((prev = (sc_conf_91-(1))), (sc_loop1_98 = function(l1, l2) {
+ var loop2;
+ var ender_set;
+ var state;
+ var ender;
+ var l1;
+ var l2;
+ while (true) {
+ if ((l1 instanceof sc_Pair))
+ {
+ (ender = (l1.car));
+ (ender_set = ((state = (sc_states_96[j])), (state[(ender+(1))])));
+ if ((ender_set!== false))
+ {
+ loop2 = function(k, l2) {
+ var loop3;
+ var ender_trees;
+ var prev_trees;
+ var conf_set;
+ var sc_state_99;
+ var k;
+ var l2;
+ while (true) {
+ if ((k>=(0)))
+ if (((k>=i)&&(((sc_state_99 = (sc_states_96[k])), (conf_set = (sc_state_99[(prev+(1))])), ((conf_set!== false)?(conf_set[(i+(5))]):false))!== false)))
+ {
+ (prev_trees = (deriv_trees(prev, i, k, sc_enders_92, sc_steps_93, sc_names_94, sc_toks_95, sc_states_96, BgL_sc_nbzd2nts_97zd2)));
+ (ender_trees = (deriv_trees(ender, k, j, sc_enders_92, sc_steps_93, sc_names_94, sc_toks_95, sc_states_96, BgL_sc_nbzd2nts_97zd2)));
+ loop3 = function(l3, l2) {
+ var l4;
+ var sc_l2_100;
+ var ender_tree;
+ if ((l3 instanceof sc_Pair))
+ {
+ (ender_tree = (sc_list((l3.car))));
+ (l4 = prev_trees);
+ (sc_l2_100 = l2);
+ while ((l4 instanceof sc_Pair)) {
+ {
+ (sc_l2_100 = (new sc_Pair((sc_append((l4.car), ender_tree)), sc_l2_100)));
+ (l4 = (l4.cdr));
+ }
+ }
+ return (loop3((l3.cdr), sc_l2_100));
+ }
+ else
+ return (loop2((ender_set[(k+(5))]), l2));
+ };
+ return (loop3(ender_trees, l2));
+ }
+ else
+ (k = (ender_set[(k+(5))]));
+ else
+ return (sc_loop1_98((l1.cdr), l2));
+ }
+ };
+ return (loop2((ender_set[(2)]), l2));
+ }
+ else
+ (l1 = (l1.cdr));
+ }
+ else
+ return l2;
+ }
+ }), (sc_loop1_98((sc_enders_92[(sc_steps_93[prev])]), null)))));
+ };
+ BgL_sc_derivzd2treesza2_47z70 = function(nt, i, j, sc_nts_101, sc_enders_102, sc_steps_103, sc_names_104, sc_toks_105, sc_states_106) {
+ var conf_set;
+ var state;
+ var sc_conf_107;
+ var l;
+ var trees;
+ var BgL_sc_nbzd2nts_108zd2;
+ var BgL_sc_ntza2_109za2;
+ {
+ (BgL_sc_ntza2_109za2 = (sc_ind_43(nt, sc_nts_101)));
+ if ((BgL_sc_ntza2_109za2!== false))
+ {
+ (BgL_sc_nbzd2nts_108zd2 = (sc_nts_101.length));
+ (l = (sc_enders_102[BgL_sc_ntza2_109za2]));
+ (trees = null);
+ while ((l instanceof sc_Pair)) {
+ {
+ (sc_conf_107 = (l.car));
+ if ((((state = (sc_states_106[j])), (conf_set = (state[(sc_conf_107+(1))])), ((conf_set!== false)?(conf_set[(i+(5))]):false))!== false))
+ {
+ (l = (l.cdr));
+ (trees = (sc_append((deriv_trees(sc_conf_107, i, j, sc_enders_102, sc_steps_103, sc_names_104, sc_toks_105, sc_states_106, BgL_sc_nbzd2nts_108zd2)), trees)));
+ }
+ else
+ (l = (l.cdr));
+ }
+ }
+ return trees;
+ }
+ else
+ return false;
+ }
+ };
+ nb_deriv_trees = function(sc_conf_110, i, j, sc_enders_111, sc_steps_112, sc_toks_113, sc_states_114, BgL_sc_nbzd2nts_115zd2) {
+ var sc_loop1_116;
+ var tmp1124;
+ var prev;
+ return ((prev = (sc_conf_110-(1))), ((((tmp1124 = (sc_conf_110<BgL_sc_nbzd2nts_115zd2)), ((tmp1124!== false)?tmp1124:((sc_steps_112[prev])<(0))))!== false)?(1):((sc_loop1_116 = function(l, sc_n_118) {
+ var nb_ender_trees;
+ var nb_prev_trees;
+ var conf_set;
+ var state;
+ var k;
+ var n;
+ var ender_set;
+ var sc_state_117;
+ var ender;
+ var l;
+ var sc_n_118;
+ while (true) {
+ if ((l instanceof sc_Pair))
+ {
+ (ender = (l.car));
+ (ender_set = ((sc_state_117 = (sc_states_114[j])), (sc_state_117[(ender+(1))])));
+ if ((ender_set!== false))
+ {
+ (k = (ender_set[(2)]));
+ (n = sc_n_118);
+ while ((k>=(0))) {
+ if (((k>=i)&&(((state = (sc_states_114[k])), (conf_set = (state[(prev+(1))])), ((conf_set!== false)?(conf_set[(i+(5))]):false))!== false)))
+ {
+ (nb_prev_trees = (nb_deriv_trees(prev, i, k, sc_enders_111, sc_steps_112, sc_toks_113, sc_states_114, BgL_sc_nbzd2nts_115zd2)));
+ (nb_ender_trees = (nb_deriv_trees(ender, k, j, sc_enders_111, sc_steps_112, sc_toks_113, sc_states_114, BgL_sc_nbzd2nts_115zd2)));
+ (k = (ender_set[(k+(5))]));
+ (n +=(nb_prev_trees*nb_ender_trees));
+ }
+ else
+ (k = (ender_set[(k+(5))]));
+ }
+ return (sc_loop1_116((l.cdr), n));
+ }
+ else
+ (l = (l.cdr));
+ }
+ else
+ return sc_n_118;
+ }
+ }), (sc_loop1_116((sc_enders_111[(sc_steps_112[prev])]), (0))))));
+ };
+ BgL_sc_nbzd2derivzd2treesza2_48za2 = function(nt, i, j, sc_nts_119, sc_enders_120, sc_steps_121, sc_toks_122, sc_states_123) {
+ var conf_set;
+ var state;
+ var sc_conf_124;
+ var l;
+ var nb_trees;
+ var BgL_sc_nbzd2nts_125zd2;
+ var BgL_sc_ntza2_126za2;
+ {
+ (BgL_sc_ntza2_126za2 = (sc_ind_43(nt, sc_nts_119)));
+ if ((BgL_sc_ntza2_126za2!== false))
+ {
+ (BgL_sc_nbzd2nts_125zd2 = (sc_nts_119.length));
+ (l = (sc_enders_120[BgL_sc_ntza2_126za2]));
+ (nb_trees = (0));
+ while ((l instanceof sc_Pair)) {
+ {
+ (sc_conf_124 = (l.car));
+ if ((((state = (sc_states_123[j])), (conf_set = (state[(sc_conf_124+(1))])), ((conf_set!== false)?(conf_set[(i+(5))]):false))!== false))
+ {
+ (l = (l.cdr));
+ (nb_trees = ((nb_deriv_trees(sc_conf_124, i, j, sc_enders_120, sc_steps_121, sc_toks_122, sc_states_123, BgL_sc_nbzd2nts_125zd2))+nb_trees));
+ }
+ else
+ (l = (l.cdr));
+ }
+ }
+ return nb_trees;
+ }
+ else
+ return false;
+ }
+ };
+ (lexer = (parser_descr[(0)]));
+ (sc_nts_42 = (parser_descr[(1)]));
+ (sc_starters_41 = (parser_descr[(2)]));
+ (sc_enders_40 = (parser_descr[(3)]));
+ (sc_predictors_39 = (parser_descr[(4)]));
+ (sc_steps_38 = (parser_descr[(5)]));
+ (sc_names_37 = (parser_descr[(6)]));
+ (falseHead1128 = (new sc_Pair(null, null)));
+ (L1125 = (lexer(input)));
+ (tail1129 = falseHead1128);
+ while (!(L1125 === null)) {
+ {
+ (tok = (L1125.car));
+ (l1 = (tok.cdr));
+ (l2 = null);
+ while ((l1 instanceof sc_Pair)) {
+ {
+ (sc_i_29 = (sc_ind_43((l1.car), sc_nts_42)));
+ if ((sc_i_29!== false))
+ {
+ (l1 = (l1.cdr));
+ (l2 = (new sc_Pair(sc_i_29, l2)));
+ }
+ else
+ (l1 = (l1.cdr));
+ }
+ }
+ (sc_optrOpnd_22 = (new sc_Pair((tok.car), (sc_reverse(l2)))));
+ (sc_optrOpnd_21 = (new sc_Pair(sc_optrOpnd_22, null)));
+ (tail1129.cdr = sc_optrOpnd_21);
+ (tail1129 = (tail1129.cdr));
+ (L1125 = (L1125.cdr));
+ }
+ }
+ (sc_optrOpnd_20 = (falseHead1128.cdr));
+ (sc_toks_36 = (sc_list2vector(sc_optrOpnd_20)));
+ (BgL_sc_nbzd2toks_35zd2 = (sc_toks_36.length));
+ (BgL_sc_nbzd2confs_34zd2 = (sc_steps_38.length));
+ (sc_states_33 = (make_states(BgL_sc_nbzd2toks_35zd2, BgL_sc_nbzd2confs_34zd2)));
+ (goal_starters = (sc_starters_41[(0)]));
+ (BgL_sc_confzd2setzd2adjoinza2_45za2(sc_states_33, (0), goal_starters, (0)));
+ (forw(sc_states_33, (0), sc_starters_41, sc_enders_40, sc_predictors_39, sc_steps_38, sc_nts_42));
+ (sc_i_28 = (0));
+ while ((sc_i_28<BgL_sc_nbzd2toks_35zd2)) {
+ {
+ (tok_nts = ((sc_toks_36[sc_i_28]).cdr));
+ (BgL_sc_confzd2setzd2adjoinza2_45za2(sc_states_33, (sc_i_28+(1)), tok_nts, sc_i_28));
+ (forw(sc_states_33, (sc_i_28+(1)), sc_starters_41, sc_enders_40, sc_predictors_39, sc_steps_38, sc_nts_42));
+ (++sc_i_28);
+ }
+ }
+ (nb_toks = (sc_toks_36.length));
+ (BgL_sc_nbzd2confs_32zd2 = (sc_steps_38.length));
+ (BgL_sc_nbzd2nts_31zd2 = (sc_nts_42.length));
+ (BgL_sc_statesza2_30za2 = (make_states(nb_toks, BgL_sc_nbzd2confs_32zd2)));
+ (goal_enders = (sc_enders_40[(0)]));
+ (l = goal_enders);
+ while ((l instanceof sc_Pair)) {
+ {
+ (conf = (l.car));
+ (BgL_sc_confzd2setzd2adjoinza2za2_46z00(sc_states_33, BgL_sc_statesza2_30za2, nb_toks, conf, (0)));
+ (l = (l.cdr));
+ }
+ }
+ (i = nb_toks);
+ while ((i>=(0))) {
+ {
+ (states = sc_states_33);
+ (BgL_sc_statesza2_27za2 = BgL_sc_statesza2_30za2);
+ (state_num = i);
+ (sc_enders_26 = sc_enders_40);
+ (sc_steps_25 = sc_steps_38);
+ (BgL_sc_nbzd2nts_24zd2 = BgL_sc_nbzd2nts_31zd2);
+ (toks = sc_toks_36);
+ (BgL_sc_stateza2_23za2 = (BgL_sc_statesza2_30za2[i]));
+ loop1 = function() {
+ var sc_loop1_127;
+ var prev;
+ var BgL_sc_statesza2_128za2;
+ var sc_states_129;
+ var j;
+ var i;
+ var sc_i_130;
+ var head;
+ var conf_set;
+ var sc_conf_131;
+ {
+ (sc_conf_131 = (BgL_sc_stateza2_23za2[(0)]));
+ if ((sc_conf_131>=(0)))
+ {
+ (conf_set = (BgL_sc_stateza2_23za2[(sc_conf_131+(1))]));
+ (head = (conf_set[(4)]));
+ (BgL_sc_stateza2_23za2[(0)] = (conf_set[(0)]));
+ (conf_set_merge_new_bang(conf_set));
+ (sc_i_130 = head);
+ while ((sc_i_130>=(0))) {
+ {
+ (i = sc_i_130);
+ (j = state_num);
+ (sc_states_129 = states);
+ (BgL_sc_statesza2_128za2 = BgL_sc_statesza2_27za2);
+ (prev = (sc_conf_131-(1)));
+ if (((sc_conf_131>=BgL_sc_nbzd2nts_24zd2)&&((sc_steps_25[prev])>=(0))))
+ {
+ sc_loop1_127 = function(l) {
+ var k;
+ var ender_set;
+ var state;
+ var ender;
+ var l;
+ while (true) {
+ if ((l instanceof sc_Pair))
+ {
+ (ender = (l.car));
+ (ender_set = ((state = (sc_states_129[j])), (state[(ender+(1))])));
+ if ((ender_set!== false))
+ {
+ (k = (ender_set[(2)]));
+ while ((k>=(0))) {
+ {
+ if ((k>=i))
+ if (((BgL_sc_confzd2setzd2adjoinza2za2_46z00(sc_states_129, BgL_sc_statesza2_128za2, k, prev, i))!== false))
+ (BgL_sc_confzd2setzd2adjoinza2za2_46z00(sc_states_129, BgL_sc_statesza2_128za2, j, ender, k));
+ (k = (ender_set[(k+(5))]));
+ }
+ }
+ return (sc_loop1_127((l.cdr)));
+ }
+ else
+ (l = (l.cdr));
+ }
+ else
+ return undefined;
+ }
+ };
+ (sc_loop1_127((sc_enders_26[(sc_steps_25[prev])])));
+ }
+ (sc_i_130 = (conf_set[(sc_i_130+(5))]));
+ }
+ }
+ return (loop1());
+ }
+ else
+ return undefined;
+ }
+ };
+ (loop1());
+ (--i);
+ }
+ }
+ (optrOpnd = BgL_sc_statesza2_30za2);
+ return [sc_nts_42, sc_starters_41, sc_enders_40, sc_predictors_39, sc_steps_38, sc_names_37, sc_toks_36, optrOpnd, is_parsed, BgL_sc_derivzd2treesza2_47z70, BgL_sc_nbzd2derivzd2treesza2_48za2];
+ }
+ };
+ }
+ };
+ BgL_parsezd2ze3parsedzf3zc2 = function(parse, nt, i, j) {
+ var is_parsed;
+ var states;
+ var enders;
+ var nts;
+ return ((nts = (parse[(0)])), (enders = (parse[(2)])), (states = (parse[(7)])), (is_parsed = (parse[(8)])), (is_parsed(nt, i, j, nts, enders, states)));
+ };
+ BgL_parsezd2ze3treesz31 = function(parse, nt, i, j) {
+ var BgL_sc_derivzd2treesza2_132z70;
+ var states;
+ var toks;
+ var names;
+ var steps;
+ var enders;
+ var nts;
+ return ((nts = (parse[(0)])), (enders = (parse[(2)])), (steps = (parse[(4)])), (names = (parse[(5)])), (toks = (parse[(6)])), (states = (parse[(7)])), (BgL_sc_derivzd2treesza2_132z70 = (parse[(9)])), (BgL_sc_derivzd2treesza2_132z70(nt, i, j, nts, enders, steps, names, toks, states)));
+ };
+ BgL_parsezd2ze3nbzd2treesze3 = function(parse, nt, i, j) {
+ var BgL_sc_nbzd2derivzd2treesza2_133za2;
+ var states;
+ var toks;
+ var steps;
+ var enders;
+ var nts;
+ return ((nts = (parse[(0)])), (enders = (parse[(2)])), (steps = (parse[(4)])), (toks = (parse[(6)])), (states = (parse[(7)])), (BgL_sc_nbzd2derivzd2treesza2_133za2 = (parse[(10)])), (BgL_sc_nbzd2derivzd2treesza2_133za2(nt, i, j, nts, enders, steps, toks, states)));
+ };
+ test = function(k) {
+ var x;
+ var p;
+ return ((p = (BgL_makezd2parserzd2(const_earley, function(l) {
+ var sc_x_134;
+ var tail1134;
+ var L1130;
+ var falseHead1133;
+ {
+ (falseHead1133 = (new sc_Pair(null, null)));
+ (tail1134 = falseHead1133);
+ (L1130 = l);
+ while (!(L1130 === null)) {
+ {
+ (tail1134.cdr = (new sc_Pair(((sc_x_134 = (L1130.car)), (sc_list(sc_x_134, sc_x_134))), null)));
+ (tail1134 = (tail1134.cdr));
+ (L1130 = (L1130.cdr));
+ }
+ }
+ return (falseHead1133.cdr);
+ }
+ }))), (x = (p((sc_vector2list((sc_makeVector(k, "\u1E9Ca"))))))), (sc_length((BgL_parsezd2ze3treesz31(x, "\u1E9Cs", (0), k)))));
+ };
+ BgL_earleyzd2benchmarkzd2 = function() {
+ var args = null;
+ for (var sc_tmp = arguments.length - 1; sc_tmp >= 0; sc_tmp--) {
+ args = sc_cons(arguments[sc_tmp], args);
+ }
+ var k;
+ return ((k = ((args === null)?(7):(args.car))), (BgL_runzd2benchmarkzd2("earley", (1), function() {
+ return (test(k));
+ }, function(result) {
+ return ((sc_display(result)), (sc_newline()), result == 132);
+ })));
+ };
+}
+
+
+/************* END OF GENERATED CODE *************/
+// Invoke this function to run a benchmark.
+// The first argument is a string identifying the benchmark.
+// The second argument is the number of times to run the benchmark.
+// The third argument is a function that runs the benchmark.
+// The fourth argument is a unary function that warns if the result
+// returned by the benchmark is incorrect.
+//
+// Example:
+// RunBenchmark("new Array()",
+// 1,
+// function () { new Array(1000000); }
+// function (v) {
+// return (v instanceof Array) && (v.length == 1000000);
+// });
+
+SC_DEFAULT_OUT = new sc_GenericOutputPort(function(s) {});
+SC_ERROR_OUT = SC_DEFAULT_OUT;
+
+function RunBenchmark(name, count, run, warn) {
+ for (var n = 0; n < count; ++n) {
+ result = run();
+ if (!warn(result)) {
+ throw new Error("Earley or Boyer did incorrect number of rewrites");
+ }
+ }
+}
+
+var BgL_runzd2benchmarkzd2 = RunBenchmark;
diff --git a/testing/talos/talos/tests/v8_7/navier-stokes.js b/testing/talos/talos/tests/v8_7/navier-stokes.js
new file mode 100644
index 0000000000..b0dc3c8645
--- /dev/null
+++ b/testing/talos/talos/tests/v8_7/navier-stokes.js
@@ -0,0 +1,387 @@
+/**
+ * Copyright 2012 the V8 project authors. All rights reserved.
+ * Copyright 2009 Oliver Hunt <http://nerget.com>
+ *
+ * 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.
+ */
+
+var NavierStokes = new BenchmarkSuite('NavierStokes', 1484000,
+ [new Benchmark('NavierStokes',
+ runNavierStokes,
+ setupNavierStokes,
+ tearDownNavierStokes)]);
+
+var solver = null;
+
+function runNavierStokes()
+{
+ solver.update();
+}
+
+function setupNavierStokes()
+{
+ solver = new FluidField(null);
+ solver.setResolution(128, 128);
+ solver.setIterations(20);
+ solver.setDisplayFunction(function(){});
+ solver.setUICallback(prepareFrame);
+ solver.reset();
+}
+
+function tearDownNavierStokes()
+{
+ solver = null;
+}
+
+function addPoints(field) {
+ var n = 64;
+ for (var i = 1; i <= n; i++) {
+ field.setVelocity(i, i, n, n);
+ field.setDensity(i, i, 5);
+ field.setVelocity(i, n - i, -n, -n);
+ field.setDensity(i, n - i, 20);
+ field.setVelocity(128 - i, n + i, -n, -n);
+ field.setDensity(128 - i, n + i, 30);
+ }
+}
+
+var framesTillAddingPoints = 0;
+var framesBetweenAddingPoints = 5;
+
+function prepareFrame(field)
+{
+ if (framesTillAddingPoints == 0) {
+ addPoints(field);
+ framesTillAddingPoints = framesBetweenAddingPoints;
+ framesBetweenAddingPoints++;
+ } else {
+ framesTillAddingPoints--;
+ }
+}
+
+// Code from Oliver Hunt (http://nerget.com/fluidSim/pressure.js) starts here.
+function FluidField(canvas) {
+ function addFields(x, s, dt)
+ {
+ for (var i=0; i<size ; i++ ) x[i] += dt*s[i];
+ }
+
+ function set_bnd(b, x)
+ {
+ if (b===1) {
+ for (var i = 1; i <= width; i++) {
+ x[i] = x[i + rowSize];
+ x[i + (height+1) *rowSize] = x[i + height * rowSize];
+ }
+
+ for (var j = 1; i <= height; i++) {
+ x[j * rowSize] = -x[1 + j * rowSize];
+ x[(width + 1) + j * rowSize] = -x[width + j * rowSize];
+ }
+ } else if (b === 2) {
+ for (var i = 1; i <= width; i++) {
+ x[i] = -x[i + rowSize];
+ x[i + (height + 1) * rowSize] = -x[i + height * rowSize];
+ }
+
+ for (var j = 1; j <= height; j++) {
+ x[j * rowSize] = x[1 + j * rowSize];
+ x[(width + 1) + j * rowSize] = x[width + j * rowSize];
+ }
+ } else {
+ for (var i = 1; i <= width; i++) {
+ x[i] = x[i + rowSize];
+ x[i + (height + 1) * rowSize] = x[i + height * rowSize];
+ }
+
+ for (var j = 1; j <= height; j++) {
+ x[j * rowSize] = x[1 + j * rowSize];
+ x[(width + 1) + j * rowSize] = x[width + j * rowSize];
+ }
+ }
+ var maxEdge = (height + 1) * rowSize;
+ x[0] = 0.5 * (x[1] + x[rowSize]);
+ x[maxEdge] = 0.5 * (x[1 + maxEdge] + x[height * rowSize]);
+ x[(width+1)] = 0.5 * (x[width] + x[(width + 1) + rowSize]);
+ x[(width+1)+maxEdge] = 0.5 * (x[width + maxEdge] + x[(width + 1) + height * rowSize]);
+ }
+
+ function lin_solve(b, x, x0, a, c)
+ {
+ if (a === 0 && c === 1) {
+ for (var j=1 ; j<=height; j++) {
+ var currentRow = j * rowSize;
+ ++currentRow;
+ for (var i = 0; i < width; i++) {
+ x[currentRow] = x0[currentRow];
+ ++currentRow;
+ }
+ }
+ set_bnd(b, x);
+ } else {
+ var invC = 1 / c;
+ for (var k=0 ; k<iterations; k++) {
+ for (var j=1 ; j<=height; j++) {
+ var lastRow = (j - 1) * rowSize;
+ var currentRow = j * rowSize;
+ var nextRow = (j + 1) * rowSize;
+ var lastX = x[currentRow];
+ ++currentRow;
+ for (var i=1; i<=width; i++)
+ lastX = x[currentRow] = (x0[currentRow] + a*(lastX+x[++currentRow]+x[++lastRow]+x[++nextRow])) * invC;
+ }
+ set_bnd(b, x);
+ }
+ }
+ }
+
+ function diffuse(b, x, x0, dt)
+ {
+ var a = 0;
+ lin_solve(b, x, x0, a, 1 + 4*a);
+ }
+
+ function lin_solve2(x, x0, y, y0, a, c)
+ {
+ if (a === 0 && c === 1) {
+ for (var j=1 ; j <= height; j++) {
+ var currentRow = j * rowSize;
+ ++currentRow;
+ for (var i = 0; i < width; i++) {
+ x[currentRow] = x0[currentRow];
+ y[currentRow] = y0[currentRow];
+ ++currentRow;
+ }
+ }
+ set_bnd(1, x);
+ set_bnd(2, y);
+ } else {
+ var invC = 1/c;
+ for (var k=0 ; k<iterations; k++) {
+ for (var j=1 ; j <= height; j++) {
+ var lastRow = (j - 1) * rowSize;
+ var currentRow = j * rowSize;
+ var nextRow = (j + 1) * rowSize;
+ var lastX = x[currentRow];
+ var lastY = y[currentRow];
+ ++currentRow;
+ for (var i = 1; i <= width; i++) {
+ lastX = x[currentRow] = (x0[currentRow] + a * (lastX + x[currentRow] + x[lastRow] + x[nextRow])) * invC;
+ lastY = y[currentRow] = (y0[currentRow] + a * (lastY + y[++currentRow] + y[++lastRow] + y[++nextRow])) * invC;
+ }
+ }
+ set_bnd(1, x);
+ set_bnd(2, y);
+ }
+ }
+ }
+
+ function diffuse2(x, x0, y, y0, dt)
+ {
+ var a = 0;
+ lin_solve2(x, x0, y, y0, a, 1 + 4 * a);
+ }
+
+ function advect(b, d, d0, u, v, dt)
+ {
+ var Wdt0 = dt * width;
+ var Hdt0 = dt * height;
+ var Wp5 = width + 0.5;
+ var Hp5 = height + 0.5;
+ for (var j = 1; j<= height; j++) {
+ var pos = j * rowSize;
+ for (var i = 1; i <= width; i++) {
+ var x = i - Wdt0 * u[++pos];
+ var y = j - Hdt0 * v[pos];
+ if (x < 0.5)
+ x = 0.5;
+ else if (x > Wp5)
+ x = Wp5;
+ var i0 = x | 0;
+ var i1 = i0 + 1;
+ if (y < 0.5)
+ y = 0.5;
+ else if (y > Hp5)
+ y = Hp5;
+ var j0 = y | 0;
+ var j1 = j0 + 1;
+ var s1 = x - i0;
+ var s0 = 1 - s1;
+ var t1 = y - j0;
+ var t0 = 1 - t1;
+ var row1 = j0 * rowSize;
+ var row2 = j1 * rowSize;
+ d[pos] = s0 * (t0 * d0[i0 + row1] + t1 * d0[i0 + row2]) + s1 * (t0 * d0[i1 + row1] + t1 * d0[i1 + row2]);
+ }
+ }
+ set_bnd(b, d);
+ }
+
+ function project(u, v, p, div)
+ {
+ var h = -0.5 / Math.sqrt(width * height);
+ for (var j = 1 ; j <= height; j++ ) {
+ var row = j * rowSize;
+ var previousRow = (j - 1) * rowSize;
+ var prevValue = row - 1;
+ var currentRow = row;
+ var nextValue = row + 1;
+ var nextRow = (j + 1) * rowSize;
+ for (var i = 1; i <= width; i++ ) {
+ div[++currentRow] = h * (u[++nextValue] - u[++prevValue] + v[++nextRow] - v[++previousRow]);
+ p[currentRow] = 0;
+ }
+ }
+ set_bnd(0, div);
+ set_bnd(0, p);
+
+ lin_solve(0, p, div, 1, 4 );
+ var wScale = 0.5 * width;
+ var hScale = 0.5 * height;
+ for (var j = 1; j<= height; j++ ) {
+ var prevPos = j * rowSize - 1;
+ var currentPos = j * rowSize;
+ var nextPos = j * rowSize + 1;
+ var prevRow = (j - 1) * rowSize;
+ var currentRow = j * rowSize;
+ var nextRow = (j + 1) * rowSize;
+
+ for (var i = 1; i<= width; i++) {
+ u[++currentPos] -= wScale * (p[++nextPos] - p[++prevPos]);
+ v[currentPos] -= hScale * (p[++nextRow] - p[++prevRow]);
+ }
+ }
+ set_bnd(1, u);
+ set_bnd(2, v);
+ }
+
+ function dens_step(x, x0, u, v, dt)
+ {
+ addFields(x, x0, dt);
+ diffuse(0, x0, x, dt );
+ advect(0, x, x0, u, v, dt );
+ }
+
+ function vel_step(u, v, u0, v0, dt)
+ {
+ addFields(u, u0, dt );
+ addFields(v, v0, dt );
+ var temp = u0; u0 = u; u = temp;
+ var temp = v0; v0 = v; v = temp;
+ diffuse2(u,u0,v,v0, dt);
+ project(u, v, u0, v0);
+ var temp = u0; u0 = u; u = temp;
+ var temp = v0; v0 = v; v = temp;
+ advect(1, u, u0, u0, v0, dt);
+ advect(2, v, v0, u0, v0, dt);
+ project(u, v, u0, v0 );
+ }
+ var uiCallback = function(d,u,v) {};
+
+ function Field(dens, u, v) {
+ // Just exposing the fields here rather than using accessors is a measurable win during display (maybe 5%)
+ // but makes the code ugly.
+ this.setDensity = function(x, y, d) {
+ dens[(x + 1) + (y + 1) * rowSize] = d;
+ }
+ this.getDensity = function(x, y) {
+ return dens[(x + 1) + (y + 1) * rowSize];
+ }
+ this.setVelocity = function(x, y, xv, yv) {
+ u[(x + 1) + (y + 1) * rowSize] = xv;
+ v[(x + 1) + (y + 1) * rowSize] = yv;
+ }
+ this.getXVelocity = function(x, y) {
+ return u[(x + 1) + (y + 1) * rowSize];
+ }
+ this.getYVelocity = function(x, y) {
+ return v[(x + 1) + (y + 1) * rowSize];
+ }
+ this.width = function() { return width; }
+ this.height = function() { return height; }
+ }
+ function queryUI(d, u, v)
+ {
+ for (var i = 0; i < size; i++)
+ u[i] = v[i] = d[i] = 0.0;
+ uiCallback(new Field(d, u, v));
+ }
+
+ this.update = function () {
+ queryUI(dens_prev, u_prev, v_prev);
+ vel_step(u, v, u_prev, v_prev, dt);
+ dens_step(dens, dens_prev, u, v, dt);
+ displayFunc(new Field(dens, u, v));
+ }
+ this.setDisplayFunction = function(func) {
+ displayFunc = func;
+ }
+
+ this.iterations = function() { return iterations; }
+ this.setIterations = function(iters) {
+ if (iters > 0 && iters <= 100)
+ iterations = iters;
+ }
+ this.setUICallback = function(callback) {
+ uiCallback = callback;
+ }
+ var iterations = 10;
+ var visc = 0.5;
+ var dt = 0.1;
+ var dens;
+ var dens_prev;
+ var u;
+ var u_prev;
+ var v;
+ var v_prev;
+ var width;
+ var height;
+ var rowSize;
+ var size;
+ var displayFunc;
+ function reset()
+ {
+ rowSize = width + 2;
+ size = (width+2)*(height+2);
+ dens = new Array(size);
+ dens_prev = new Array(size);
+ u = new Array(size);
+ u_prev = new Array(size);
+ v = new Array(size);
+ v_prev = new Array(size);
+ for (var i = 0; i < size; i++)
+ dens_prev[i] = u_prev[i] = v_prev[i] = dens[i] = u[i] = v[i] = 0;
+ }
+ this.reset = reset;
+ this.setResolution = function (hRes, wRes)
+ {
+ var res = wRes * hRes;
+ if (res > 0 && res < 1000000 && (wRes != width || hRes != height)) {
+ width = wRes;
+ height = hRes;
+ reset();
+ return true;
+ }
+ return false;
+ }
+ this.setResolution(64, 64);
+}
diff --git a/testing/talos/talos/tests/v8_7/raytrace.js b/testing/talos/talos/tests/v8_7/raytrace.js
new file mode 100644
index 0000000000..971ef7218e
--- /dev/null
+++ b/testing/talos/talos/tests/v8_7/raytrace.js
@@ -0,0 +1,904 @@
+// The ray tracer code in this file is written by Adam Burmister. It
+// is available in its original form from:
+//
+// http://labs.flog.nz.co/raytracer/
+//
+// It has been modified slightly by Google to work as a standalone
+// benchmark, but the all the computational code remains
+// untouched. This file also contains a copy of parts of the Prototype
+// JavaScript framework which is used by the ray tracer.
+
+var RayTrace = new BenchmarkSuite('RayTrace', 739989, [
+ new Benchmark('RayTrace', renderScene)
+]);
+
+
+// Variable used to hold a number that can be used to verify that
+// the scene was ray traced correctly.
+var checkNumber;
+
+
+// ------------------------------------------------------------------------
+// ------------------------------------------------------------------------
+
+// The following is a copy of parts of the Prototype JavaScript library:
+
+// Prototype JavaScript framework, version 1.5.0
+// (c) 2005-2007 Sam Stephenson
+//
+// Prototype is freely distributable under the terms of an MIT-style license.
+// For details, see the Prototype web site: http://prototype.conio.net/
+
+
+var Class = {
+ create: function() {
+ return function() {
+ this.initialize.apply(this, arguments);
+ }
+ }
+};
+
+
+Object.extend = function(destination, source) {
+ for (var property in source) {
+ destination[property] = source[property];
+ }
+ return destination;
+};
+
+
+// ------------------------------------------------------------------------
+// ------------------------------------------------------------------------
+
+// The rest of this file is the actual ray tracer written by Adam
+// Burmister. It's a concatenation of the following files:
+//
+// flog/color.js
+// flog/light.js
+// flog/vector.js
+// flog/ray.js
+// flog/scene.js
+// flog/material/basematerial.js
+// flog/material/solid.js
+// flog/material/chessboard.js
+// flog/shape/baseshape.js
+// flog/shape/sphere.js
+// flog/shape/plane.js
+// flog/intersectioninfo.js
+// flog/camera.js
+// flog/background.js
+// flog/engine.js
+
+
+/* Fake a Flog.* namespace */
+if(typeof(Flog) == 'undefined') var Flog = {};
+if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {};
+
+Flog.RayTracer.Color = Class.create();
+
+Flog.RayTracer.Color.prototype = {
+ red : 0.0,
+ green : 0.0,
+ blue : 0.0,
+
+ initialize : function(r, g, b) {
+ if(!r) r = 0.0;
+ if(!g) g = 0.0;
+ if(!b) b = 0.0;
+
+ this.red = r;
+ this.green = g;
+ this.blue = b;
+ },
+
+ add : function(c1, c2){
+ var result = new Flog.RayTracer.Color(0,0,0);
+
+ result.red = c1.red + c2.red;
+ result.green = c1.green + c2.green;
+ result.blue = c1.blue + c2.blue;
+
+ return result;
+ },
+
+ addScalar: function(c1, s){
+ var result = new Flog.RayTracer.Color(0,0,0);
+
+ result.red = c1.red + s;
+ result.green = c1.green + s;
+ result.blue = c1.blue + s;
+
+ result.limit();
+
+ return result;
+ },
+
+ subtract: function(c1, c2){
+ var result = new Flog.RayTracer.Color(0,0,0);
+
+ result.red = c1.red - c2.red;
+ result.green = c1.green - c2.green;
+ result.blue = c1.blue - c2.blue;
+
+ return result;
+ },
+
+ multiply : function(c1, c2) {
+ var result = new Flog.RayTracer.Color(0,0,0);
+
+ result.red = c1.red * c2.red;
+ result.green = c1.green * c2.green;
+ result.blue = c1.blue * c2.blue;
+
+ return result;
+ },
+
+ multiplyScalar : function(c1, f) {
+ var result = new Flog.RayTracer.Color(0,0,0);
+
+ result.red = c1.red * f;
+ result.green = c1.green * f;
+ result.blue = c1.blue * f;
+
+ return result;
+ },
+
+ divideFactor : function(c1, f) {
+ var result = new Flog.RayTracer.Color(0,0,0);
+
+ result.red = c1.red / f;
+ result.green = c1.green / f;
+ result.blue = c1.blue / f;
+
+ return result;
+ },
+
+ limit: function(){
+ this.red = (this.red > 0.0) ? ( (this.red > 1.0) ? 1.0 : this.red ) : 0.0;
+ this.green = (this.green > 0.0) ? ( (this.green > 1.0) ? 1.0 : this.green ) : 0.0;
+ this.blue = (this.blue > 0.0) ? ( (this.blue > 1.0) ? 1.0 : this.blue ) : 0.0;
+ },
+
+ distance : function(color) {
+ var d = Math.abs(this.red - color.red) + Math.abs(this.green - color.green) + Math.abs(this.blue - color.blue);
+ return d;
+ },
+
+ blend: function(c1, c2, w){
+ var result = new Flog.RayTracer.Color(0,0,0);
+ result = Flog.RayTracer.Color.prototype.add(
+ Flog.RayTracer.Color.prototype.multiplyScalar(c1, 1 - w),
+ Flog.RayTracer.Color.prototype.multiplyScalar(c2, w)
+ );
+ return result;
+ },
+
+ brightness : function() {
+ var r = Math.floor(this.red*255);
+ var g = Math.floor(this.green*255);
+ var b = Math.floor(this.blue*255);
+ return (r * 77 + g * 150 + b * 29) >> 8;
+ },
+
+ toString : function () {
+ var r = Math.floor(this.red*255);
+ var g = Math.floor(this.green*255);
+ var b = Math.floor(this.blue*255);
+
+ return "rgb("+ r +","+ g +","+ b +")";
+ }
+}
+/* Fake a Flog.* namespace */
+if(typeof(Flog) == 'undefined') var Flog = {};
+if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {};
+
+Flog.RayTracer.Light = Class.create();
+
+Flog.RayTracer.Light.prototype = {
+ position: null,
+ color: null,
+ intensity: 10.0,
+
+ initialize : function(pos, color, intensity) {
+ this.position = pos;
+ this.color = color;
+ this.intensity = (intensity ? intensity : 10.0);
+ },
+
+ toString : function () {
+ return 'Light [' + this.position.x + ',' + this.position.y + ',' + this.position.z + ']';
+ }
+}
+/* Fake a Flog.* namespace */
+if(typeof(Flog) == 'undefined') var Flog = {};
+if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {};
+
+Flog.RayTracer.Vector = Class.create();
+
+Flog.RayTracer.Vector.prototype = {
+ x : 0.0,
+ y : 0.0,
+ z : 0.0,
+
+ initialize : function(x, y, z) {
+ this.x = (x ? x : 0);
+ this.y = (y ? y : 0);
+ this.z = (z ? z : 0);
+ },
+
+ copy: function(vector){
+ this.x = vector.x;
+ this.y = vector.y;
+ this.z = vector.z;
+ },
+
+ normalize : function() {
+ var m = this.magnitude();
+ return new Flog.RayTracer.Vector(this.x / m, this.y / m, this.z / m);
+ },
+
+ magnitude : function() {
+ return Math.sqrt((this.x * this.x) + (this.y * this.y) + (this.z * this.z));
+ },
+
+ cross : function(w) {
+ return new Flog.RayTracer.Vector(
+ -this.z * w.y + this.y * w.z,
+ this.z * w.x - this.x * w.z,
+ -this.y * w.x + this.x * w.y);
+ },
+
+ dot : function(w) {
+ return this.x * w.x + this.y * w.y + this.z * w.z;
+ },
+
+ add : function(v, w) {
+ return new Flog.RayTracer.Vector(w.x + v.x, w.y + v.y, w.z + v.z);
+ },
+
+ subtract : function(v, w) {
+ if(!w || !v) throw 'Vectors must be defined [' + v + ',' + w + ']';
+ return new Flog.RayTracer.Vector(v.x - w.x, v.y - w.y, v.z - w.z);
+ },
+
+ multiplyVector : function(v, w) {
+ return new Flog.RayTracer.Vector(v.x * w.x, v.y * w.y, v.z * w.z);
+ },
+
+ multiplyScalar : function(v, w) {
+ return new Flog.RayTracer.Vector(v.x * w, v.y * w, v.z * w);
+ },
+
+ toString : function () {
+ return 'Vector [' + this.x + ',' + this.y + ',' + this.z + ']';
+ }
+}
+/* Fake a Flog.* namespace */
+if(typeof(Flog) == 'undefined') var Flog = {};
+if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {};
+
+Flog.RayTracer.Ray = Class.create();
+
+Flog.RayTracer.Ray.prototype = {
+ position : null,
+ direction : null,
+ initialize : function(pos, dir) {
+ this.position = pos;
+ this.direction = dir;
+ },
+
+ toString : function () {
+ return 'Ray [' + this.position + ',' + this.direction + ']';
+ }
+}
+/* Fake a Flog.* namespace */
+if(typeof(Flog) == 'undefined') var Flog = {};
+if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {};
+
+Flog.RayTracer.Scene = Class.create();
+
+Flog.RayTracer.Scene.prototype = {
+ camera : null,
+ shapes : [],
+ lights : [],
+ background : null,
+
+ initialize : function() {
+ this.camera = new Flog.RayTracer.Camera(
+ new Flog.RayTracer.Vector(0,0,-5),
+ new Flog.RayTracer.Vector(0,0,1),
+ new Flog.RayTracer.Vector(0,1,0)
+ );
+ this.shapes = new Array();
+ this.lights = new Array();
+ this.background = new Flog.RayTracer.Background(new Flog.RayTracer.Color(0,0,0.5), 0.2);
+ }
+}
+/* Fake a Flog.* namespace */
+if(typeof(Flog) == 'undefined') var Flog = {};
+if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {};
+if(typeof(Flog.RayTracer.Material) == 'undefined') Flog.RayTracer.Material = {};
+
+Flog.RayTracer.Material.BaseMaterial = Class.create();
+
+Flog.RayTracer.Material.BaseMaterial.prototype = {
+
+ gloss: 2.0, // [0...infinity] 0 = matt
+ transparency: 0.0, // 0=opaque
+ reflection: 0.0, // [0...infinity] 0 = no reflection
+ refraction: 0.50,
+ hasTexture: false,
+
+ initialize : function() {
+
+ },
+
+ getColor: function(u, v){
+
+ },
+
+ wrapUp: function(t){
+ t = t % 2.0;
+ if(t < -1) t += 2.0;
+ if(t >= 1) t -= 2.0;
+ return t;
+ },
+
+ toString : function () {
+ return 'Material [gloss=' + this.gloss + ', transparency=' + this.transparency + ', hasTexture=' + this.hasTexture +']';
+ }
+}
+/* Fake a Flog.* namespace */
+if(typeof(Flog) == 'undefined') var Flog = {};
+if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {};
+
+Flog.RayTracer.Material.Solid = Class.create();
+
+Flog.RayTracer.Material.Solid.prototype = Object.extend(
+ new Flog.RayTracer.Material.BaseMaterial(), {
+ initialize : function(color, reflection, refraction, transparency, gloss) {
+ this.color = color;
+ this.reflection = reflection;
+ this.transparency = transparency;
+ this.gloss = gloss;
+ this.hasTexture = false;
+ },
+
+ getColor: function(u, v){
+ return this.color;
+ },
+
+ toString : function () {
+ return 'SolidMaterial [gloss=' + this.gloss + ', transparency=' + this.transparency + ', hasTexture=' + this.hasTexture +']';
+ }
+ }
+);
+/* Fake a Flog.* namespace */
+if(typeof(Flog) == 'undefined') var Flog = {};
+if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {};
+
+Flog.RayTracer.Material.Chessboard = Class.create();
+
+Flog.RayTracer.Material.Chessboard.prototype = Object.extend(
+ new Flog.RayTracer.Material.BaseMaterial(), {
+ colorEven: null,
+ colorOdd: null,
+ density: 0.5,
+
+ initialize : function(colorEven, colorOdd, reflection, transparency, gloss, density) {
+ this.colorEven = colorEven;
+ this.colorOdd = colorOdd;
+ this.reflection = reflection;
+ this.transparency = transparency;
+ this.gloss = gloss;
+ this.density = density;
+ this.hasTexture = true;
+ },
+
+ getColor: function(u, v){
+ var t = this.wrapUp(u * this.density) * this.wrapUp(v * this.density);
+
+ if(t < 0.0)
+ return this.colorEven;
+ else
+ return this.colorOdd;
+ },
+
+ toString : function () {
+ return 'ChessMaterial [gloss=' + this.gloss + ', transparency=' + this.transparency + ', hasTexture=' + this.hasTexture +']';
+ }
+ }
+);
+/* Fake a Flog.* namespace */
+if(typeof(Flog) == 'undefined') var Flog = {};
+if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {};
+if(typeof(Flog.RayTracer.Shape) == 'undefined') Flog.RayTracer.Shape = {};
+
+Flog.RayTracer.Shape.Sphere = Class.create();
+
+Flog.RayTracer.Shape.Sphere.prototype = {
+ initialize : function(pos, radius, material) {
+ this.radius = radius;
+ this.position = pos;
+ this.material = material;
+ },
+
+ intersect: function(ray){
+ var info = new Flog.RayTracer.IntersectionInfo();
+ info.shape = this;
+
+ var dst = Flog.RayTracer.Vector.prototype.subtract(ray.position, this.position);
+
+ var B = dst.dot(ray.direction);
+ var C = dst.dot(dst) - (this.radius * this.radius);
+ var D = (B * B) - C;
+
+ if(D > 0){ // intersection!
+ info.isHit = true;
+ info.distance = (-B) - Math.sqrt(D);
+ info.position = Flog.RayTracer.Vector.prototype.add(
+ ray.position,
+ Flog.RayTracer.Vector.prototype.multiplyScalar(
+ ray.direction,
+ info.distance
+ )
+ );
+ info.normal = Flog.RayTracer.Vector.prototype.subtract(
+ info.position,
+ this.position
+ ).normalize();
+
+ info.color = this.material.getColor(0,0);
+ } else {
+ info.isHit = false;
+ }
+ return info;
+ },
+
+ toString : function () {
+ return 'Sphere [position=' + this.position + ', radius=' + this.radius + ']';
+ }
+}
+/* Fake a Flog.* namespace */
+if(typeof(Flog) == 'undefined') var Flog = {};
+if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {};
+if(typeof(Flog.RayTracer.Shape) == 'undefined') Flog.RayTracer.Shape = {};
+
+Flog.RayTracer.Shape.Plane = Class.create();
+
+Flog.RayTracer.Shape.Plane.prototype = {
+ d: 0.0,
+
+ initialize : function(pos, d, material) {
+ this.position = pos;
+ this.d = d;
+ this.material = material;
+ },
+
+ intersect: function(ray){
+ var info = new Flog.RayTracer.IntersectionInfo();
+
+ var Vd = this.position.dot(ray.direction);
+ if(Vd == 0) return info; // no intersection
+
+ var t = -(this.position.dot(ray.position) + this.d) / Vd;
+ if(t <= 0) return info;
+
+ info.shape = this;
+ info.isHit = true;
+ info.position = Flog.RayTracer.Vector.prototype.add(
+ ray.position,
+ Flog.RayTracer.Vector.prototype.multiplyScalar(
+ ray.direction,
+ t
+ )
+ );
+ info.normal = this.position;
+ info.distance = t;
+
+ if(this.material.hasTexture){
+ var vU = new Flog.RayTracer.Vector(this.position.y, this.position.z, -this.position.x);
+ var vV = vU.cross(this.position);
+ var u = info.position.dot(vU);
+ var v = info.position.dot(vV);
+ info.color = this.material.getColor(u,v);
+ } else {
+ info.color = this.material.getColor(0,0);
+ }
+
+ return info;
+ },
+
+ toString : function () {
+ return 'Plane [' + this.position + ', d=' + this.d + ']';
+ }
+}
+/* Fake a Flog.* namespace */
+if(typeof(Flog) == 'undefined') var Flog = {};
+if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {};
+
+Flog.RayTracer.IntersectionInfo = Class.create();
+
+Flog.RayTracer.IntersectionInfo.prototype = {
+ isHit: false,
+ hitCount: 0,
+ shape: null,
+ position: null,
+ normal: null,
+ color: null,
+ distance: null,
+
+ initialize : function() {
+ this.color = new Flog.RayTracer.Color(0,0,0);
+ },
+
+ toString : function () {
+ return 'Intersection [' + this.position + ']';
+ }
+}
+/* Fake a Flog.* namespace */
+if(typeof(Flog) == 'undefined') var Flog = {};
+if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {};
+
+Flog.RayTracer.Camera = Class.create();
+
+Flog.RayTracer.Camera.prototype = {
+ position: null,
+ lookAt: null,
+ equator: null,
+ up: null,
+ screen: null,
+
+ initialize : function(pos, lookAt, up) {
+ this.position = pos;
+ this.lookAt = lookAt;
+ this.up = up;
+ this.equator = lookAt.normalize().cross(this.up);
+ this.screen = Flog.RayTracer.Vector.prototype.add(this.position, this.lookAt);
+ },
+
+ getRay: function(vx, vy){
+ var pos = Flog.RayTracer.Vector.prototype.subtract(
+ this.screen,
+ Flog.RayTracer.Vector.prototype.subtract(
+ Flog.RayTracer.Vector.prototype.multiplyScalar(this.equator, vx),
+ Flog.RayTracer.Vector.prototype.multiplyScalar(this.up, vy)
+ )
+ );
+ pos.y = pos.y * -1;
+ var dir = Flog.RayTracer.Vector.prototype.subtract(
+ pos,
+ this.position
+ );
+
+ var ray = new Flog.RayTracer.Ray(pos, dir.normalize());
+
+ return ray;
+ },
+
+ toString : function () {
+ return 'Ray []';
+ }
+}
+/* Fake a Flog.* namespace */
+if(typeof(Flog) == 'undefined') var Flog = {};
+if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {};
+
+Flog.RayTracer.Background = Class.create();
+
+Flog.RayTracer.Background.prototype = {
+ color : null,
+ ambience : 0.0,
+
+ initialize : function(color, ambience) {
+ this.color = color;
+ this.ambience = ambience;
+ }
+}
+/* Fake a Flog.* namespace */
+if(typeof(Flog) == 'undefined') var Flog = {};
+if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {};
+
+Flog.RayTracer.Engine = Class.create();
+
+Flog.RayTracer.Engine.prototype = {
+ canvas: null, /* 2d context we can render to */
+
+ initialize: function(options){
+ this.options = Object.extend({
+ canvasHeight: 100,
+ canvasWidth: 100,
+ pixelWidth: 2,
+ pixelHeight: 2,
+ renderDiffuse: false,
+ renderShadows: false,
+ renderHighlights: false,
+ renderReflections: false,
+ rayDepth: 2
+ }, options || {});
+
+ this.options.canvasHeight /= this.options.pixelHeight;
+ this.options.canvasWidth /= this.options.pixelWidth;
+
+ /* TODO: dynamically include other scripts */
+ },
+
+ setPixel: function(x, y, color){
+ var pxW, pxH;
+ pxW = this.options.pixelWidth;
+ pxH = this.options.pixelHeight;
+
+ if (this.canvas) {
+ this.canvas.fillStyle = color.toString();
+ this.canvas.fillRect (x * pxW, y * pxH, pxW, pxH);
+ } else {
+ if (x === y) {
+ checkNumber += color.brightness();
+ }
+ // print(x * pxW, y * pxH, pxW, pxH);
+ }
+ },
+
+ renderScene: function(scene, canvas){
+ checkNumber = 0;
+ /* Get canvas */
+ if (canvas) {
+ this.canvas = canvas.getContext("2d");
+ } else {
+ this.canvas = null;
+ }
+
+ var canvasHeight = this.options.canvasHeight;
+ var canvasWidth = this.options.canvasWidth;
+
+ for(var y=0; y < canvasHeight; y++){
+ for(var x=0; x < canvasWidth; x++){
+ var yp = y * 1.0 / canvasHeight * 2 - 1;
+ var xp = x * 1.0 / canvasWidth * 2 - 1;
+
+ var ray = scene.camera.getRay(xp, yp);
+
+ var color = this.getPixelColor(ray, scene);
+
+ this.setPixel(x, y, color);
+ }
+ }
+ if (checkNumber !== 2321) {
+ throw new Error("Scene rendered incorrectly");
+ }
+ },
+
+ getPixelColor: function(ray, scene){
+ var info = this.testIntersection(ray, scene, null);
+ if(info.isHit){
+ var color = this.rayTrace(info, ray, scene, 0);
+ return color;
+ }
+ return scene.background.color;
+ },
+
+ testIntersection: function(ray, scene, exclude){
+ var hits = 0;
+ var best = new Flog.RayTracer.IntersectionInfo();
+ best.distance = 2000;
+
+ for(var i=0; i<scene.shapes.length; i++){
+ var shape = scene.shapes[i];
+
+ if(shape != exclude){
+ var info = shape.intersect(ray);
+ if(info.isHit && info.distance >= 0 && info.distance < best.distance){
+ best = info;
+ hits++;
+ }
+ }
+ }
+ best.hitCount = hits;
+ return best;
+ },
+
+ getReflectionRay: function(P,N,V){
+ var c1 = -N.dot(V);
+ var R1 = Flog.RayTracer.Vector.prototype.add(
+ Flog.RayTracer.Vector.prototype.multiplyScalar(N, 2*c1),
+ V
+ );
+ return new Flog.RayTracer.Ray(P, R1);
+ },
+
+ rayTrace: function(info, ray, scene, depth){
+ // Calc ambient
+ var color = Flog.RayTracer.Color.prototype.multiplyScalar(info.color, scene.background.ambience);
+ var oldColor = color;
+ var shininess = Math.pow(10, info.shape.material.gloss + 1);
+
+ for(var i=0; i<scene.lights.length; i++){
+ var light = scene.lights[i];
+
+ // Calc diffuse lighting
+ var v = Flog.RayTracer.Vector.prototype.subtract(
+ light.position,
+ info.position
+ ).normalize();
+
+ if(this.options.renderDiffuse){
+ var L = v.dot(info.normal);
+ if(L > 0.0){
+ color = Flog.RayTracer.Color.prototype.add(
+ color,
+ Flog.RayTracer.Color.prototype.multiply(
+ info.color,
+ Flog.RayTracer.Color.prototype.multiplyScalar(
+ light.color,
+ L
+ )
+ )
+ );
+ }
+ }
+
+ // The greater the depth the more accurate the colours, but
+ // this is exponentially (!) expensive
+ if(depth <= this.options.rayDepth){
+ // calculate reflection ray
+ if(this.options.renderReflections && info.shape.material.reflection > 0)
+ {
+ var reflectionRay = this.getReflectionRay(info.position, info.normal, ray.direction);
+ var refl = this.testIntersection(reflectionRay, scene, info.shape);
+
+ if (refl.isHit && refl.distance > 0){
+ refl.color = this.rayTrace(refl, reflectionRay, scene, depth + 1);
+ } else {
+ refl.color = scene.background.color;
+ }
+
+ color = Flog.RayTracer.Color.prototype.blend(
+ color,
+ refl.color,
+ info.shape.material.reflection
+ );
+ }
+
+ // Refraction
+ /* TODO */
+ }
+
+ /* Render shadows and highlights */
+
+ var shadowInfo = new Flog.RayTracer.IntersectionInfo();
+
+ if(this.options.renderShadows){
+ var shadowRay = new Flog.RayTracer.Ray(info.position, v);
+
+ shadowInfo = this.testIntersection(shadowRay, scene, info.shape);
+ if(shadowInfo.isHit && shadowInfo.shape != info.shape /*&& shadowInfo.shape.type != 'PLANE'*/){
+ var vA = Flog.RayTracer.Color.prototype.multiplyScalar(color, 0.5);
+ var dB = (0.5 * Math.pow(shadowInfo.shape.material.transparency, 0.5));
+ color = Flog.RayTracer.Color.prototype.addScalar(vA,dB);
+ }
+ }
+
+ // Phong specular highlights
+ if(this.options.renderHighlights && !shadowInfo.isHit && info.shape.material.gloss > 0){
+ var Lv = Flog.RayTracer.Vector.prototype.subtract(
+ info.shape.position,
+ light.position
+ ).normalize();
+
+ var E = Flog.RayTracer.Vector.prototype.subtract(
+ scene.camera.position,
+ info.shape.position
+ ).normalize();
+
+ var H = Flog.RayTracer.Vector.prototype.subtract(
+ E,
+ Lv
+ ).normalize();
+
+ var glossWeight = Math.pow(Math.max(info.normal.dot(H), 0), shininess);
+ color = Flog.RayTracer.Color.prototype.add(
+ Flog.RayTracer.Color.prototype.multiplyScalar(light.color, glossWeight),
+ color
+ );
+ }
+ }
+ color.limit();
+ return color;
+ }
+};
+
+
+function renderScene(){
+ var scene = new Flog.RayTracer.Scene();
+
+ scene.camera = new Flog.RayTracer.Camera(
+ new Flog.RayTracer.Vector(0, 0, -15),
+ new Flog.RayTracer.Vector(-0.2, 0, 5),
+ new Flog.RayTracer.Vector(0, 1, 0)
+ );
+
+ scene.background = new Flog.RayTracer.Background(
+ new Flog.RayTracer.Color(0.5, 0.5, 0.5),
+ 0.4
+ );
+
+ var sphere = new Flog.RayTracer.Shape.Sphere(
+ new Flog.RayTracer.Vector(-1.5, 1.5, 2),
+ 1.5,
+ new Flog.RayTracer.Material.Solid(
+ new Flog.RayTracer.Color(0,0.5,0.5),
+ 0.3,
+ 0.0,
+ 0.0,
+ 2.0
+ )
+ );
+
+ var sphere1 = new Flog.RayTracer.Shape.Sphere(
+ new Flog.RayTracer.Vector(1, 0.25, 1),
+ 0.5,
+ new Flog.RayTracer.Material.Solid(
+ new Flog.RayTracer.Color(0.9,0.9,0.9),
+ 0.1,
+ 0.0,
+ 0.0,
+ 1.5
+ )
+ );
+
+ var plane = new Flog.RayTracer.Shape.Plane(
+ new Flog.RayTracer.Vector(0.1, 0.9, -0.5).normalize(),
+ 1.2,
+ new Flog.RayTracer.Material.Chessboard(
+ new Flog.RayTracer.Color(1,1,1),
+ new Flog.RayTracer.Color(0,0,0),
+ 0.2,
+ 0.0,
+ 1.0,
+ 0.7
+ )
+ );
+
+ scene.shapes.push(plane);
+ scene.shapes.push(sphere);
+ scene.shapes.push(sphere1);
+
+ var light = new Flog.RayTracer.Light(
+ new Flog.RayTracer.Vector(5, 10, -1),
+ new Flog.RayTracer.Color(0.8, 0.8, 0.8)
+ );
+
+ var light1 = new Flog.RayTracer.Light(
+ new Flog.RayTracer.Vector(-3, 5, -15),
+ new Flog.RayTracer.Color(0.8, 0.8, 0.8),
+ 100
+ );
+
+ scene.lights.push(light);
+ scene.lights.push(light1);
+
+ var imageWidth = 100; // $F('imageWidth');
+ var imageHeight = 100; // $F('imageHeight');
+ var pixelSize = "5,5".split(','); // $F('pixelSize').split(',');
+ var renderDiffuse = true; // $F('renderDiffuse');
+ var renderShadows = true; // $F('renderShadows');
+ var renderHighlights = true; // $F('renderHighlights');
+ var renderReflections = true; // $F('renderReflections');
+ var rayDepth = 2;//$F('rayDepth');
+
+ var raytracer = new Flog.RayTracer.Engine(
+ {
+ canvasWidth: imageWidth,
+ canvasHeight: imageHeight,
+ pixelWidth: pixelSize[0],
+ pixelHeight: pixelSize[1],
+ "renderDiffuse": renderDiffuse,
+ "renderHighlights": renderHighlights,
+ "renderShadows": renderShadows,
+ "renderReflections": renderReflections,
+ "rayDepth": rayDepth
+ }
+ );
+
+ raytracer.renderScene(scene, null, 0);
+}
diff --git a/testing/talos/talos/tests/v8_7/regexp.js b/testing/talos/talos/tests/v8_7/regexp.js
new file mode 100644
index 0000000000..9c83142266
--- /dev/null
+++ b/testing/talos/talos/tests/v8_7/regexp.js
@@ -0,0 +1,1764 @@
+// Copyright 2010 the V8 project authors. All rights reserved.
+// 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 Google Inc. 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 THE COPYRIGHT
+// OWNER OR CONTRIBUTORS 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.
+
+// Automatically generated on 2009-01-30. Manually updated on 2010-09-17.
+
+// This benchmark is generated by loading 50 of the most popular pages
+// on the web and logging all regexp operations performed. Each
+// operation is given a weight that is calculated from an estimate of
+// the popularity of the pages where it occurs and the number of times
+// it is executed while loading each page. Furthermore the literal
+// letters in the data are encoded using ROT13 in a way that does not
+// affect how the regexps match their input. Finally the strings are
+// scrambled to exercise the regexp engine on different input strings.
+
+
+var RegExp = new BenchmarkSuite('RegExp', 910985, [
+ new Benchmark("RegExp", RegExpRun, RegExpSetup, RegExpTearDown)
+]);
+
+var regExpBenchmark = null;
+
+function RegExpSetup() {
+ regExpBenchmark = new RegExpBenchmark();
+ RegExpRun(); // run once to get system initialized
+}
+
+function RegExpRun() {
+ regExpBenchmark.run();
+}
+
+function RegExpTearDown() {
+ regExpBenchmark = null;
+}
+
+// Returns an array of n different variants of the input string str.
+// The variants are computed by randomly rotating one random
+// character.
+function computeInputVariants(str, n) {
+ var variants = [ str ];
+ for (var i = 1; i < n; i++) {
+ var pos = Math.floor(Math.random() * str.length);
+ var chr = String.fromCharCode((str.charCodeAt(pos) + Math.floor(Math.random() * 128)) % 128);
+ variants[i] = str.substring(0, pos) + chr + str.substring(pos + 1, str.length);
+ }
+ return variants;
+}
+
+function RegExpBenchmark() {
+ var re0 = /^ba/;
+ var re1 = /(((\w+):\/\/)([^\/:]*)(:(\d+))?)?([^#?]*)(\?([^#]*))?(#(.*))?/;
+ var re2 = /^\s*|\s*$/g;
+ var re3 = /\bQBZPbageby_cynprubyqre\b/;
+ var re4 = /,/;
+ var re5 = /\bQBZPbageby_cynprubyqre\b/g;
+ var re6 = /^[\s\xa0]+|[\s\xa0]+$/g;
+ var re7 = /(\d*)(\D*)/g;
+ var re8 = /=/;
+ var re9 = /(^|\s)lhv\-h(\s|$)/;
+ var str0 = 'Zbmvyyn/5.0 (Jvaqbjf; H; Jvaqbjf AG 5.1; ra-HF) NccyrJroXvg/528.9 (XUGZY, yvxr Trpxb) Puebzr/2.0.157.0 Fnsnev/528.9';
+ var re10 = /\#/g;
+ var re11 = /\./g;
+ var re12 = /'/g;
+ var re13 = /\?[\w\W]*(sevraqvq|punaaryvq|tebhcvq)=([^\&\?#]*)/i;
+ var str1 = 'Fubpxjnir Synfu 9.0 e115';
+ var re14 = /\s+/g;
+ var re15 = /^\s*(\S*(\s+\S+)*)\s*$/;
+ var re16 = /(-[a-z])/i;
+
+ var s0 = computeInputVariants('pyvpx', 6511);
+ var s1 = computeInputVariants('uggc://jjj.snprobbx.pbz/ybtva.cuc', 1844);
+ var s2 = computeInputVariants('QBZPbageby_cynprubyqre', 739);
+ var s3 = computeInputVariants('uggc://jjj.snprobbx.pbz/', 598);
+ var s4 = computeInputVariants('uggc://jjj.snprobbx.pbz/fepu.cuc', 454);
+ var s5 = computeInputVariants('qqqq, ZZZ q, llll', 352);
+ var s6 = computeInputVariants('vachggrkg QBZPbageby_cynprubyqre', 312);
+ var s7 = computeInputVariants('/ZlFcnprUbzrcntr/Vaqrk-FvgrUbzr,10000000', 282);
+ var s8 = computeInputVariants('vachggrkg', 177);
+ var s9 = computeInputVariants('528.9', 170);
+ var s10 = computeInputVariants('528', 170);
+ var s11 = computeInputVariants('VCPhygher=ra-HF', 156);
+ var s12 = computeInputVariants('CersreerqPhygher=ra-HF', 156);
+ var s13 = computeInputVariants('xrlcerff', 144);
+ var s14 = computeInputVariants('521', 139);
+ var s15 = computeInputVariants(str0, 139);
+ var s16 = computeInputVariants('qvi .so_zrah', 137);
+ var s17 = computeInputVariants('qvi.so_zrah', 137);
+ var s18 = computeInputVariants('uvqqra_ryrz', 117);
+ var s19 = computeInputVariants('sevraqfgre_naba=nvq%3Qn6ss9p85n868ro9s059pn854735956o3%26ers%3Q%26df%3Q%26vpgl%3QHF', 95);
+ var s20 = computeInputVariants('uggc://ubzr.zlfcnpr.pbz/vaqrk.psz', 93);
+ var s21 = computeInputVariants(str1, 92);
+ var s22 = computeInputVariants('svefg', 85);
+ var s23 = computeInputVariants('uggc://cebsvyr.zlfcnpr.pbz/vaqrk.psz', 85);
+ var s24 = computeInputVariants('ynfg', 85);
+ var s25 = computeInputVariants('qvfcynl', 85);
+
+ function runBlock0() {
+ for (var i = 0; i < 6511; i++) {
+ re0.exec(s0[i]);
+ }
+ for (var i = 0; i < 1844; i++) {
+ re1.exec(s1[i]);
+ }
+ for (var i = 0; i < 739; i++) {
+ s2[i].replace(re2, '');
+ }
+ for (var i = 0; i < 598; i++) {
+ re1.exec(s3[i]);
+ }
+ for (var i = 0; i < 454; i++) {
+ re1.exec(s4[i]);
+ }
+ for (var i = 0; i < 352; i++) {
+ /qqqq|qqq|qq|q|ZZZZ|ZZZ|ZZ|Z|llll|ll|l|uu|u|UU|U|zz|z|ff|f|gg|g|sss|ss|s|mmm|mm|m/g.exec(s5[i]);
+ }
+ for (var i = 0; i < 312; i++) {
+ re3.exec(s6[i]);
+ }
+ for (var i = 0; i < 282; i++) {
+ re4.exec(s7[i]);
+ }
+ for (var i = 0; i < 177; i++) {
+ s8[i].replace(re5, '');
+ }
+ for (var i = 0; i < 170; i++) {
+ s9[i].replace(re6, '');
+ re7.exec(s10[i]);
+ }
+ for (var i = 0; i < 156; i++) {
+ re8.exec(s11[i]);
+ re8.exec(s12[i]);
+ }
+ for (var i = 0; i < 144; i++) {
+ re0.exec(s13[i]);
+ }
+ for (var i = 0; i < 139; i++) {
+ s14[i].replace(re6, '');
+ re7.exec(s14[i]);
+ re9.exec('');
+ /JroXvg\/(\S+)/.exec(s15[i]);
+ }
+ for (var i = 0; i < 137; i++) {
+ s16[i].replace(re10, '');
+ s16[i].replace(/\[/g, '');
+ s17[i].replace(re11, '');
+ }
+ for (var i = 0; i < 117; i++) {
+ s18[i].replace(re2, '');
+ }
+ for (var i = 0; i < 95; i++) {
+ /(?:^|;)\s*sevraqfgre_ynat=([^;]*)/.exec(s19[i]);
+ }
+ for (var i = 0; i < 93; i++) {
+ s20[i].replace(re12, '');
+ re13.exec(s20[i]);
+ }
+ for (var i = 0; i < 92; i++) {
+ s21[i].replace(/([a-zA-Z]|\s)+/, '');
+ }
+ for (var i = 0; i < 85; i++) {
+ s22[i].replace(re14, '');
+ s22[i].replace(re15, '');
+ s23[i].replace(re12, '');
+ s24[i].replace(re14, '');
+ s24[i].replace(re15, '');
+ re16.exec(s25[i]);
+ re13.exec(s23[i]);
+ }
+ }
+ var re17 = /(^|[^\\])\"\\\/Qngr\((-?[0-9]+)\)\\\/\"/g;
+ var str2 = '{"anzr":"","ahzoreSbezng":{"PheeraplQrpvznyQvtvgf":2,"PheeraplQrpvznyFrcnengbe":".","VfErnqBayl":gehr,"PheeraplTebhcFvmrf":[3],"AhzoreTebhcFvmrf":[3],"CrepragTebhcFvmrf":[3],"PheeraplTebhcFrcnengbe":",","PheeraplFlzoby":"\xa4","AnAFlzoby":"AnA","PheeraplArtngvirCnggrea":0,"AhzoreArtngvirCnggrea":1,"CrepragCbfvgvirCnggrea":0,"CrepragArtngvirCnggrea":0,"ArtngvirVasvavglFlzoby":"-Vasvavgl","ArtngvirFvta":"-","AhzoreQrpvznyQvtvgf":2,"AhzoreQrpvznyFrcnengbe":".","AhzoreTebhcFrcnengbe":",","PheeraplCbfvgvirCnggrea":0,"CbfvgvirVasvavglFlzoby":"Vasvavgl","CbfvgvirFvta":"+","CrepragQrpvznyQvtvgf":2,"CrepragQrpvznyFrcnengbe":".","CrepragTebhcFrcnengbe":",","CrepragFlzoby":"%","CreZvyyrFlzoby":"\u2030","AngvirQvtvgf":["0","1","2","3","4","5","6","7","8","9"],"QvtvgFhofgvghgvba":1},"qngrGvzrSbezng":{"NZQrfvtangbe":"NZ","Pnyraqne":{"ZvaFhccbegrqQngrGvzr":"@-62135568000000@","ZnkFhccbegrqQngrGvzr":"@253402300799999@","NytbevguzGlcr":1,"PnyraqneGlcr":1,"Renf":[1],"GjbQvtvgLrneZnk":2029,"VfErnqBayl":gehr},"QngrFrcnengbe":"/","SvefgQnlBsJrrx":0,"PnyraqneJrrxEhyr":0,"ShyyQngrGvzrCnggrea":"qqqq, qq ZZZZ llll UU:zz:ff","YbatQngrCnggrea":"qqqq, qq ZZZZ llll","YbatGvzrCnggrea":"UU:zz:ff","ZbaguQnlCnggrea":"ZZZZ qq","CZQrfvtangbe":"CZ","ESP1123Cnggrea":"qqq, qq ZZZ llll UU\':\'zz\':\'ff \'TZG\'","FubegQngrCnggrea":"ZZ/qq/llll","FubegGvzrCnggrea":"UU:zz","FbegnoyrQngrGvzrCnggrea":"llll\'-\'ZZ\'-\'qq\'G\'UU\':\'zz\':\'ff","GvzrFrcnengbe":":","HavirefnyFbegnoyrQngrGvzrCnggrea":"llll\'-\'ZZ\'-\'qq UU\':\'zz\':\'ff\'M\'","LrneZbaguCnggrea":"llll ZZZZ","NooerivngrqQnlAnzrf":["Fha","Zba","Ghr","Jrq","Guh","Sev","Fng"],"FubegrfgQnlAnzrf":["Fh","Zb","Gh","Jr","Gu","Se","Fn"],"QnlAnzrf":["Fhaqnl","Zbaqnl","Ghrfqnl","Jrqarfqnl","Guhefqnl","Sevqnl","Fngheqnl"],"NooerivngrqZbaguAnzrf":["Wna","Sro","Zne","Nce","Znl","Wha","Why","Nht","Frc","Bpg","Abi","Qrp",""],"ZbaguAnzrf":["Wnahnel","Sroehnel","Znepu","Ncevy","Znl","Whar","Whyl","Nhthfg","Frcgrzore","Bpgbore","Abirzore","Qrprzore",""],"VfErnqBayl":gehr,"AngvirPnyraqneAnzr":"Tertbevna Pnyraqne","NooerivngrqZbaguTravgvirAnzrf":["Wna","Sro","Zne","Nce","Znl","Wha","Why","Nht","Frc","Bpg","Abi","Qrp",""],"ZbaguTravgvirAnzrf":["Wnahnel","Sroehnel","Znepu","Ncevy","Znl","Whar","Whyl","Nhthfg","Frcgrzore","Bpgbore","Abirzore","Qrprzore",""]}}';
+ var str3 = '{"anzr":"ra-HF","ahzoreSbezng":{"PheeraplQrpvznyQvtvgf":2,"PheeraplQrpvznyFrcnengbe":".","VfErnqBayl":snyfr,"PheeraplTebhcFvmrf":[3],"AhzoreTebhcFvmrf":[3],"CrepragTebhcFvmrf":[3],"PheeraplTebhcFrcnengbe":",","PheeraplFlzoby":"$","AnAFlzoby":"AnA","PheeraplArtngvirCnggrea":0,"AhzoreArtngvirCnggrea":1,"CrepragCbfvgvirCnggrea":0,"CrepragArtngvirCnggrea":0,"ArtngvirVasvavglFlzoby":"-Vasvavgl","ArtngvirFvta":"-","AhzoreQrpvznyQvtvgf":2,"AhzoreQrpvznyFrcnengbe":".","AhzoreTebhcFrcnengbe":",","PheeraplCbfvgvirCnggrea":0,"CbfvgvirVasvavglFlzoby":"Vasvavgl","CbfvgvirFvta":"+","CrepragQrpvznyQvtvgf":2,"CrepragQrpvznyFrcnengbe":".","CrepragTebhcFrcnengbe":",","CrepragFlzoby":"%","CreZvyyrFlzoby":"\u2030","AngvirQvtvgf":["0","1","2","3","4","5","6","7","8","9"],"QvtvgFhofgvghgvba":1},"qngrGvzrSbezng":{"NZQrfvtangbe":"NZ","Pnyraqne":{"ZvaFhccbegrqQngrGvzr":"@-62135568000000@","ZnkFhccbegrqQngrGvzr":"@253402300799999@","NytbevguzGlcr":1,"PnyraqneGlcr":1,"Renf":[1],"GjbQvtvgLrneZnk":2029,"VfErnqBayl":snyfr},"QngrFrcnengbe":"/","SvefgQnlBsJrrx":0,"PnyraqneJrrxEhyr":0,"ShyyQngrGvzrCnggrea":"qqqq, ZZZZ qq, llll u:zz:ff gg","YbatQngrCnggrea":"qqqq, ZZZZ qq, llll","YbatGvzrCnggrea":"u:zz:ff gg","ZbaguQnlCnggrea":"ZZZZ qq","CZQrfvtangbe":"CZ","ESP1123Cnggrea":"qqq, qq ZZZ llll UU\':\'zz\':\'ff \'TZG\'","FubegQngrCnggrea":"Z/q/llll","FubegGvzrCnggrea":"u:zz gg","FbegnoyrQngrGvzrCnggrea":"llll\'-\'ZZ\'-\'qq\'G\'UU\':\'zz\':\'ff","GvzrFrcnengbe":":","HavirefnyFbegnoyrQngrGvzrCnggrea":"llll\'-\'ZZ\'-\'qq UU\':\'zz\':\'ff\'M\'","LrneZbaguCnggrea":"ZZZZ, llll","NooerivngrqQnlAnzrf":["Fha","Zba","Ghr","Jrq","Guh","Sev","Fng"],"FubegrfgQnlAnzrf":["Fh","Zb","Gh","Jr","Gu","Se","Fn"],"QnlAnzrf":["Fhaqnl","Zbaqnl","Ghrfqnl","Jrqarfqnl","Guhefqnl","Sevqnl","Fngheqnl"],"NooerivngrqZbaguAnzrf":["Wna","Sro","Zne","Nce","Znl","Wha","Why","Nht","Frc","Bpg","Abi","Qrp",""],"ZbaguAnzrf":["Wnahnel","Sroehnel","Znepu","Ncevy","Znl","Whar","Whyl","Nhthfg","Frcgrzore","Bpgbore","Abirzore","Qrprzore",""],"VfErnqBayl":snyfr,"AngvirPnyraqneAnzr":"Tertbevna Pnyraqne","NooerivngrqZbaguTravgvirAnzrf":["Wna","Sro","Zne","Nce","Znl","Wha","Why","Nht","Frc","Bpg","Abi","Qrp",""],"ZbaguTravgvirAnzrf":["Wnahnel","Sroehnel","Znepu","Ncevy","Znl","Whar","Whyl","Nhthfg","Frcgrzore","Bpgbore","Abirzore","Qrprzore",""]}}';
+ var str4 = 'HFEYBP=DKWyLHAiMTH9AwHjWxAcqUx9GJ91oaEunJ4tIzyyqlMQo3IhqUW5D29xMG1IHlMQo3IhqUW5GzSgMG1Iozy0MJDtH3EuqTImWxEgLHAiMTH9BQN3WxkuqTy0qJEyCGZ3YwDkBGVzGT9hM2y0qJEyCF0kZwVhZQH3APMDo3A0LJkQo2EyCGx0ZQDmWyWyM2yiox5uoJH9D0R%3Q';
+ var str5 = 'HFEYBP=DKWyLHAiMTH9AwHjWxAcqUx9GJ91oaEunJ4tIzyyqlMQo3IhqUW5D29xMG1IHlMQo3IhqUW5GzSgMG1Iozy0MJDtH3EuqTImWxEgLHAiMTH9BQN3WxkuqTy0qJEyCGZ3YwDkBGVzGT9hM2y0qJEyCF0kZwVhZQH3APMDo3A0LJkQo2EyCGx0ZQDmWyWyM2yiox5uoJH9D0R=';
+ var re18 = /^\s+|\s+$/g;
+ var str6 = 'uggc://jjj.snprobbx.pbz/vaqrk.cuc';
+ var re19 = /(?:^|\s+)ba(?:\s+|$)/;
+ var re20 = /[+, ]/;
+ var re21 = /ybnqrq|pbzcyrgr/;
+ var str7 = ';;jvaqbj.IjPurpxZbhfrCbfvgvbaNQ_VQ=shapgvba(r){vs(!r)ine r=jvaqbj.rirag;ine c=-1;vs(d1)c=d1.EbyybssCnary;ine bo=IjTrgBow("IjCnayNQ_VQ_"+c);vs(bo&&bo.fglyr.ivfvovyvgl=="ivfvoyr"){ine fns=IjFns?8:0;ine pheK=r.pyvragK+IjBOFpe("U")+fns,pheL=r.pyvragL+IjBOFpe("I")+fns;ine y=IjBOEC(NQ_VQ,bo,"Y"),g=IjBOEC(NQ_VQ,bo,"G");ine e=y+d1.Cnaryf[c].Jvqgu,o=g+d1.Cnaryf[c].Urvtug;vs((pheK<y)||(pheK>e)||(pheL<g)||(pheL>o)){vs(jvaqbj.IjBaEbyybssNQ_VQ)IjBaEbyybssNQ_VQ(c);ryfr IjPybfrNq(NQ_VQ,c,gehr,"");}ryfr erghea;}IjPnapryZbhfrYvfgrareNQ_VQ();};;jvaqbj.IjFrgEbyybssCnaryNQ_VQ=shapgvba(c){ine z="zbhfrzbir",q=qbphzrag,s=IjPurpxZbhfrCbfvgvbaNQ_VQ;c=IjTc(NQ_VQ,c);vs(d1&&d1.EbyybssCnary>-1)IjPnapryZbhfrYvfgrareNQ_VQ();vs(d1)d1.EbyybssCnary=c;gel{vs(q.nqqRiragYvfgrare)q.nqqRiragYvfgrare(z,s,snyfr);ryfr vs(q.nggnpuRirag)q.nggnpuRirag("ba"+z,s);}pngpu(r){}};;jvaqbj.IjPnapryZbhfrYvfgrareNQ_VQ=shapgvba(){ine z="zbhfrzbir",q=qbphzrag,s=IjPurpxZbhfrCbfvgvbaNQ_VQ;vs(d1)d1.EbyybssCnary=-1;gel{vs(q.erzbirRiragYvfgrare)q.erzbirRiragYvfgrare(z,s,snyfr);ryfr vs(q.qrgnpuRirag)q.qrgnpuRirag("ba"+z,s);}pngpu(r){}};;d1.IjTc=d2(n,c){ine nq=d1;vs(vfAnA(c)){sbe(ine v=0;v<nq.Cnaryf.yratgu;v++)vs(nq.Cnaryf[v].Anzr==c)erghea v;erghea 0;}erghea c;};;d1.IjTpy=d2(n,c,p){ine cn=d1.Cnaryf[IjTc(n,c)];vs(!cn)erghea 0;vs(vfAnA(p)){sbe(ine v=0;v<cn.Pyvpxguehf.yratgu;v++)vs(cn.Pyvpxguehf[v].Anzr==p)erghea v;erghea 0;}erghea p;};;d1.IjGenpr=d2(n,f){gel{vs(jvaqbj["Ij"+"QtQ"])jvaqbj["Ij"+"QtQ"](n,1,f);}pngpu(r){}};;d1.IjYvzvg1=d2(n,f){ine nq=d1,vh=f.fcyvg("/");sbe(ine v=0,p=0;v<vh.yratgu;v++){vs(vh[v].yratgu>0){vs(nq.FzV.yratgu>0)nq.FzV+="/";nq.FzV+=vh[v];nq.FtZ[nq.FtZ.yratgu]=snyfr;}}};;d1.IjYvzvg0=d2(n,f){ine nq=d1,vh=f.fcyvg("/");sbe(ine v=0;v<vh.yratgu;v++){vs(vh[v].yratgu>0){vs(nq.OvC.yratgu>0)nq.OvC+="/";nq.OvC+=vh[v];}}};;d1.IjRVST=d2(n,c){jvaqbj["IjCnayNQ_VQ_"+c+"_Bow"]=IjTrgBow("IjCnayNQ_VQ_"+c+"_Bow");vs(jvaqbj["IjCnayNQ_VQ_"+c+"_Bow"]==ahyy)frgGvzrbhg("IjRVST(NQ_VQ,"+c+")",d1.rvsg);};;d1.IjNavzSHC=d2(n,c){ine nq=d1;vs(c>nq.Cnaryf.yratgu)erghea;ine cna=nq.Cnaryf[c],nn=gehr,on=gehr,yn=gehr,en=gehr,cn=nq.Cnaryf[0],sf=nq.ShF,j=cn.Jvqgu,u=cn.Urvtug;vs(j=="100%"){j=sf;en=snyfr;yn=snyfr;}vs(u=="100%"){u=sf;nn=snyfr;on=snyfr;}vs(cn.YnY=="Y")yn=snyfr;vs(cn.YnY=="E")en=snyfr;vs(cn.GnY=="G")nn=snyfr;vs(cn.GnY=="O")on=snyfr;ine k=0,l=0;fjvgpu(nq.NshP%8){pnfr 0:oernx;pnfr 1:vs(nn)l=-sf;oernx;pnfr 2:k=j-sf;oernx;pnfr 3:vs(en)k=j;oernx;pnfr 4:k=j-sf;l=u-sf;oernx;pnfr 5:k=j-sf;vs(on)l=u;oernx;pnfr 6:l=u-sf;oernx;pnfr 7:vs(yn)k=-sf;l=u-sf;oernx;}vs(nq.NshP++ <nq.NshG)frgGvzrbhg(("IjNavzSHC(NQ_VQ,"+c+")"),nq.NshC);ryfr{k=-1000;l=k;}cna.YrsgBssfrg=k;cna.GbcBssfrg=l;IjNhErcb(n,c);};;d1.IjTrgErnyCbfvgvba=d2(n,b,j){erghea IjBOEC.nccyl(guvf,nethzragf);};;d1.IjPnapryGvzrbhg=d2(n,c){c=IjTc(n,c);ine cay=d1.Cnaryf[c];vs(cay&&cay.UgU!=""){pyrneGvzrbhg(cay.UgU);}};;d1.IjPnapryNyyGvzrbhgf=d2(n){vs(d1.YbpxGvzrbhgPunatrf)erghea;sbe(ine c=0;c<d1.bac;c++)IjPnapryGvzrbhg(n,c);};;d1.IjFgnegGvzrbhg=d2(n,c,bG){c=IjTc(n,c);ine cay=d1.Cnaryf[c];vs(cay&&((cay.UvqrGvzrbhgInyhr>0)||(nethzragf.yratgu==3&&bG>0))){pyrneGvzrbhg(cay.UgU);cay.UgU=frgGvzrbhg(cay.UvqrNpgvba,(nethzragf.yratgu==3?bG:cay.UvqrGvzrbhgInyhr));}};;d1.IjErfrgGvzrbhg=d2(n,c,bG){c=IjTc(n,c);IjPnapryGvzrbhg(n,c);riny("IjFgnegGvzrbhg(NQ_VQ,c"+(nethzragf.yratgu==3?",bG":"")+")");};;d1.IjErfrgNyyGvzrbhgf=d2(n){sbe(ine c=0;c<d1.bac;c++)IjErfrgGvzrbhg(n,c);};;d1.IjQrgnpure=d2(n,rig,sap){gel{vs(IjQVR5)riny("jvaqbj.qrgnpuRirag(\'ba"+rig+"\',"+sap+"NQ_VQ)");ryfr vs(!IjQVRZnp)riny("jvaqbj.erzbirRiragYvfgrare(\'"+rig+"\',"+sap+"NQ_VQ,snyfr)");}pngpu(r){}};;d1.IjPyrnaHc=d2(n){IjCvat(n,"G");ine nq=d1;sbe(ine v=0;v<nq.Cnaryf.yratgu;v++){IjUvqrCnary(n,v,gehr);}gel{IjTrgBow(nq.gya).vaareUGZY="";}pngpu(r){}vs(nq.gya!=nq.gya2)gel{IjTrgBow(nq.gya2).vaareUGZY="";}pngpu(r){}gel{d1=ahyy;}pngpu(r){}gel{IjQrgnpure(n,"haybnq","IjHayNQ_VQ");}pngpu(r){}gel{jvaqbj.IjHayNQ_VQ=ahyy;}pngpu(r){}gel{IjQrgnpure(n,"fpebyy","IjFeNQ_VQ");}pngpu(r){}gel{jvaqbj.IjFeNQ_VQ=ahyy;}pngpu(r){}gel{IjQrgnpure(n,"erfvmr","IjEmNQ_VQ");}pngpu(r){}gel{jvaqbj.IjEmNQ_VQ=ahyy;}pngpu(r){}gel{IjQrgnpure(n';
+ var str8 = ';;jvaqbj.IjPurpxZbhfrCbfvgvbaNQ_VQ=shapgvba(r){vs(!r)ine r=jvaqbj.rirag;ine c=-1;vs(jvaqbj.IjNqNQ_VQ)c=jvaqbj.IjNqNQ_VQ.EbyybssCnary;ine bo=IjTrgBow("IjCnayNQ_VQ_"+c);vs(bo&&bo.fglyr.ivfvovyvgl=="ivfvoyr"){ine fns=IjFns?8:0;ine pheK=r.pyvragK+IjBOFpe("U")+fns,pheL=r.pyvragL+IjBOFpe("I")+fns;ine y=IjBOEC(NQ_VQ,bo,"Y"),g=IjBOEC(NQ_VQ,bo,"G");ine e=y+jvaqbj.IjNqNQ_VQ.Cnaryf[c].Jvqgu,o=g+jvaqbj.IjNqNQ_VQ.Cnaryf[c].Urvtug;vs((pheK<y)||(pheK>e)||(pheL<g)||(pheL>o)){vs(jvaqbj.IjBaEbyybssNQ_VQ)IjBaEbyybssNQ_VQ(c);ryfr IjPybfrNq(NQ_VQ,c,gehr,"");}ryfr erghea;}IjPnapryZbhfrYvfgrareNQ_VQ();};;jvaqbj.IjFrgEbyybssCnaryNQ_VQ=shapgvba(c){ine z="zbhfrzbir",q=qbphzrag,s=IjPurpxZbhfrCbfvgvbaNQ_VQ;c=IjTc(NQ_VQ,c);vs(jvaqbj.IjNqNQ_VQ&&jvaqbj.IjNqNQ_VQ.EbyybssCnary>-1)IjPnapryZbhfrYvfgrareNQ_VQ();vs(jvaqbj.IjNqNQ_VQ)jvaqbj.IjNqNQ_VQ.EbyybssCnary=c;gel{vs(q.nqqRiragYvfgrare)q.nqqRiragYvfgrare(z,s,snyfr);ryfr vs(q.nggnpuRirag)q.nggnpuRirag("ba"+z,s);}pngpu(r){}};;jvaqbj.IjPnapryZbhfrYvfgrareNQ_VQ=shapgvba(){ine z="zbhfrzbir",q=qbphzrag,s=IjPurpxZbhfrCbfvgvbaNQ_VQ;vs(jvaqbj.IjNqNQ_VQ)jvaqbj.IjNqNQ_VQ.EbyybssCnary=-1;gel{vs(q.erzbirRiragYvfgrare)q.erzbirRiragYvfgrare(z,s,snyfr);ryfr vs(q.qrgnpuRirag)q.qrgnpuRirag("ba"+z,s);}pngpu(r){}};;jvaqbj.IjNqNQ_VQ.IjTc=shapgvba(n,c){ine nq=jvaqbj.IjNqNQ_VQ;vs(vfAnA(c)){sbe(ine v=0;v<nq.Cnaryf.yratgu;v++)vs(nq.Cnaryf[v].Anzr==c)erghea v;erghea 0;}erghea c;};;jvaqbj.IjNqNQ_VQ.IjTpy=shapgvba(n,c,p){ine cn=jvaqbj.IjNqNQ_VQ.Cnaryf[IjTc(n,c)];vs(!cn)erghea 0;vs(vfAnA(p)){sbe(ine v=0;v<cn.Pyvpxguehf.yratgu;v++)vs(cn.Pyvpxguehf[v].Anzr==p)erghea v;erghea 0;}erghea p;};;jvaqbj.IjNqNQ_VQ.IjGenpr=shapgvba(n,f){gel{vs(jvaqbj["Ij"+"QtQ"])jvaqbj["Ij"+"QtQ"](n,1,f);}pngpu(r){}};;jvaqbj.IjNqNQ_VQ.IjYvzvg1=shapgvba(n,f){ine nq=jvaqbj.IjNqNQ_VQ,vh=f.fcyvg("/");sbe(ine v=0,p=0;v<vh.yratgu;v++){vs(vh[v].yratgu>0){vs(nq.FzV.yratgu>0)nq.FzV+="/";nq.FzV+=vh[v];nq.FtZ[nq.FtZ.yratgu]=snyfr;}}};;jvaqbj.IjNqNQ_VQ.IjYvzvg0=shapgvba(n,f){ine nq=jvaqbj.IjNqNQ_VQ,vh=f.fcyvg("/");sbe(ine v=0;v<vh.yratgu;v++){vs(vh[v].yratgu>0){vs(nq.OvC.yratgu>0)nq.OvC+="/";nq.OvC+=vh[v];}}};;jvaqbj.IjNqNQ_VQ.IjRVST=shapgvba(n,c){jvaqbj["IjCnayNQ_VQ_"+c+"_Bow"]=IjTrgBow("IjCnayNQ_VQ_"+c+"_Bow");vs(jvaqbj["IjCnayNQ_VQ_"+c+"_Bow"]==ahyy)frgGvzrbhg("IjRVST(NQ_VQ,"+c+")",jvaqbj.IjNqNQ_VQ.rvsg);};;jvaqbj.IjNqNQ_VQ.IjNavzSHC=shapgvba(n,c){ine nq=jvaqbj.IjNqNQ_VQ;vs(c>nq.Cnaryf.yratgu)erghea;ine cna=nq.Cnaryf[c],nn=gehr,on=gehr,yn=gehr,en=gehr,cn=nq.Cnaryf[0],sf=nq.ShF,j=cn.Jvqgu,u=cn.Urvtug;vs(j=="100%"){j=sf;en=snyfr;yn=snyfr;}vs(u=="100%"){u=sf;nn=snyfr;on=snyfr;}vs(cn.YnY=="Y")yn=snyfr;vs(cn.YnY=="E")en=snyfr;vs(cn.GnY=="G")nn=snyfr;vs(cn.GnY=="O")on=snyfr;ine k=0,l=0;fjvgpu(nq.NshP%8){pnfr 0:oernx;pnfr 1:vs(nn)l=-sf;oernx;pnfr 2:k=j-sf;oernx;pnfr 3:vs(en)k=j;oernx;pnfr 4:k=j-sf;l=u-sf;oernx;pnfr 5:k=j-sf;vs(on)l=u;oernx;pnfr 6:l=u-sf;oernx;pnfr 7:vs(yn)k=-sf;l=u-sf;oernx;}vs(nq.NshP++ <nq.NshG)frgGvzrbhg(("IjNavzSHC(NQ_VQ,"+c+")"),nq.NshC);ryfr{k=-1000;l=k;}cna.YrsgBssfrg=k;cna.GbcBssfrg=l;IjNhErcb(n,c);};;jvaqbj.IjNqNQ_VQ.IjTrgErnyCbfvgvba=shapgvba(n,b,j){erghea IjBOEC.nccyl(guvf,nethzragf);};;jvaqbj.IjNqNQ_VQ.IjPnapryGvzrbhg=shapgvba(n,c){c=IjTc(n,c);ine cay=jvaqbj.IjNqNQ_VQ.Cnaryf[c];vs(cay&&cay.UgU!=""){pyrneGvzrbhg(cay.UgU);}};;jvaqbj.IjNqNQ_VQ.IjPnapryNyyGvzrbhgf=shapgvba(n){vs(jvaqbj.IjNqNQ_VQ.YbpxGvzrbhgPunatrf)erghea;sbe(ine c=0;c<jvaqbj.IjNqNQ_VQ.bac;c++)IjPnapryGvzrbhg(n,c);};;jvaqbj.IjNqNQ_VQ.IjFgnegGvzrbhg=shapgvba(n,c,bG){c=IjTc(n,c);ine cay=jvaqbj.IjNqNQ_VQ.Cnaryf[c];vs(cay&&((cay.UvqrGvzrbhgInyhr>0)||(nethzragf.yratgu==3&&bG>0))){pyrneGvzrbhg(cay.UgU);cay.UgU=frgGvzrbhg(cay.UvqrNpgvba,(nethzragf.yratgu==3?bG:cay.UvqrGvzrbhgInyhr));}};;jvaqbj.IjNqNQ_VQ.IjErfrgGvzrbhg=shapgvba(n,c,bG){c=IjTc(n,c);IjPnapryGvzrbhg(n,c);riny("IjFgnegGvzrbhg(NQ_VQ,c"+(nethzragf.yratgu==3?",bG":"")+")");};;jvaqbj.IjNqNQ_VQ.IjErfrgNyyGvzrbhgf=shapgvba(n){sbe(ine c=0;c<jvaqbj.IjNqNQ_VQ.bac;c++)IjErfrgGvzrbhg(n,c);};;jvaqbj.IjNqNQ_VQ.IjQrgnpure=shapgvba(n,rig,sap){gel{vs(IjQVR5)riny("jvaqbj.qrgnpuRirag(\'ba"+rig+"\',"+sap+"NQ_VQ)");ryfr vs(!IjQVRZnp)riny("jvaqbj.erzbir';
+ var str9 = ';;jvaqbj.IjPurpxZbhfrCbfvgvbaNQ_VQ=shapgvba(r){vs(!r)ine r=jvaqbj.rirag;ine c=-1;vs(jvaqbj.IjNqNQ_VQ)c=jvaqbj.IjNqNQ_VQ.EbyybssCnary;ine bo=IjTrgBow("IjCnayNQ_VQ_"+c);vs(bo&&bo.fglyr.ivfvovyvgl=="ivfvoyr"){ine fns=IjFns?8:0;ine pheK=r.pyvragK+IjBOFpe("U")+fns,pheL=r.pyvragL+IjBOFpe("I")+fns;ine y=IjBOEC(NQ_VQ,bo,"Y"),g=IjBOEC(NQ_VQ,bo,"G");ine e=y+jvaqbj.IjNqNQ_VQ.Cnaryf[c].Jvqgu,o=g+jvaqbj.IjNqNQ_VQ.Cnaryf[c].Urvtug;vs((pheK<y)||(pheK>e)||(pheL<g)||(pheL>o)){vs(jvaqbj.IjBaEbyybssNQ_VQ)IjBaEbyybssNQ_VQ(c);ryfr IjPybfrNq(NQ_VQ,c,gehr,"");}ryfr erghea;}IjPnapryZbhfrYvfgrareNQ_VQ();};;jvaqbj.IjFrgEbyybssCnaryNQ_VQ=shapgvba(c){ine z="zbhfrzbir",q=qbphzrag,s=IjPurpxZbhfrCbfvgvbaNQ_VQ;c=IjTc(NQ_VQ,c);vs(jvaqbj.IjNqNQ_VQ&&jvaqbj.IjNqNQ_VQ.EbyybssCnary>-1)IjPnapryZbhfrYvfgrareNQ_VQ();vs(jvaqbj.IjNqNQ_VQ)jvaqbj.IjNqNQ_VQ.EbyybssCnary=c;gel{vs(q.nqqRiragYvfgrare)q.nqqRiragYvfgrare(z,s,snyfr);ryfr vs(q.nggnpuRirag)q.nggnpuRirag("ba"+z,s);}pngpu(r){}};;jvaqbj.IjPnapryZbhfrYvfgrareNQ_VQ=shapgvba(){ine z="zbhfrzbir",q=qbphzrag,s=IjPurpxZbhfrCbfvgvbaNQ_VQ;vs(jvaqbj.IjNqNQ_VQ)jvaqbj.IjNqNQ_VQ.EbyybssCnary=-1;gel{vs(q.erzbirRiragYvfgrare)q.erzbirRiragYvfgrare(z,s,snyfr);ryfr vs(q.qrgnpuRirag)q.qrgnpuRirag("ba"+z,s);}pngpu(r){}};;jvaqbj.IjNqNQ_VQ.IjTc=d2(n,c){ine nq=jvaqbj.IjNqNQ_VQ;vs(vfAnA(c)){sbe(ine v=0;v<nq.Cnaryf.yratgu;v++)vs(nq.Cnaryf[v].Anzr==c)erghea v;erghea 0;}erghea c;};;jvaqbj.IjNqNQ_VQ.IjTpy=d2(n,c,p){ine cn=jvaqbj.IjNqNQ_VQ.Cnaryf[IjTc(n,c)];vs(!cn)erghea 0;vs(vfAnA(p)){sbe(ine v=0;v<cn.Pyvpxguehf.yratgu;v++)vs(cn.Pyvpxguehf[v].Anzr==p)erghea v;erghea 0;}erghea p;};;jvaqbj.IjNqNQ_VQ.IjGenpr=d2(n,f){gel{vs(jvaqbj["Ij"+"QtQ"])jvaqbj["Ij"+"QtQ"](n,1,f);}pngpu(r){}};;jvaqbj.IjNqNQ_VQ.IjYvzvg1=d2(n,f){ine nq=jvaqbj.IjNqNQ_VQ,vh=f.fcyvg("/");sbe(ine v=0,p=0;v<vh.yratgu;v++){vs(vh[v].yratgu>0){vs(nq.FzV.yratgu>0)nq.FzV+="/";nq.FzV+=vh[v];nq.FtZ[nq.FtZ.yratgu]=snyfr;}}};;jvaqbj.IjNqNQ_VQ.IjYvzvg0=d2(n,f){ine nq=jvaqbj.IjNqNQ_VQ,vh=f.fcyvg("/");sbe(ine v=0;v<vh.yratgu;v++){vs(vh[v].yratgu>0){vs(nq.OvC.yratgu>0)nq.OvC+="/";nq.OvC+=vh[v];}}};;jvaqbj.IjNqNQ_VQ.IjRVST=d2(n,c){jvaqbj["IjCnayNQ_VQ_"+c+"_Bow"]=IjTrgBow("IjCnayNQ_VQ_"+c+"_Bow");vs(jvaqbj["IjCnayNQ_VQ_"+c+"_Bow"]==ahyy)frgGvzrbhg("IjRVST(NQ_VQ,"+c+")",jvaqbj.IjNqNQ_VQ.rvsg);};;jvaqbj.IjNqNQ_VQ.IjNavzSHC=d2(n,c){ine nq=jvaqbj.IjNqNQ_VQ;vs(c>nq.Cnaryf.yratgu)erghea;ine cna=nq.Cnaryf[c],nn=gehr,on=gehr,yn=gehr,en=gehr,cn=nq.Cnaryf[0],sf=nq.ShF,j=cn.Jvqgu,u=cn.Urvtug;vs(j=="100%"){j=sf;en=snyfr;yn=snyfr;}vs(u=="100%"){u=sf;nn=snyfr;on=snyfr;}vs(cn.YnY=="Y")yn=snyfr;vs(cn.YnY=="E")en=snyfr;vs(cn.GnY=="G")nn=snyfr;vs(cn.GnY=="O")on=snyfr;ine k=0,l=0;fjvgpu(nq.NshP%8){pnfr 0:oernx;pnfr 1:vs(nn)l=-sf;oernx;pnfr 2:k=j-sf;oernx;pnfr 3:vs(en)k=j;oernx;pnfr 4:k=j-sf;l=u-sf;oernx;pnfr 5:k=j-sf;vs(on)l=u;oernx;pnfr 6:l=u-sf;oernx;pnfr 7:vs(yn)k=-sf;l=u-sf;oernx;}vs(nq.NshP++ <nq.NshG)frgGvzrbhg(("IjNavzSHC(NQ_VQ,"+c+")"),nq.NshC);ryfr{k=-1000;l=k;}cna.YrsgBssfrg=k;cna.GbcBssfrg=l;IjNhErcb(n,c);};;jvaqbj.IjNqNQ_VQ.IjTrgErnyCbfvgvba=d2(n,b,j){erghea IjBOEC.nccyl(guvf,nethzragf);};;jvaqbj.IjNqNQ_VQ.IjPnapryGvzrbhg=d2(n,c){c=IjTc(n,c);ine cay=jvaqbj.IjNqNQ_VQ.Cnaryf[c];vs(cay&&cay.UgU!=""){pyrneGvzrbhg(cay.UgU);}};;jvaqbj.IjNqNQ_VQ.IjPnapryNyyGvzrbhgf=d2(n){vs(jvaqbj.IjNqNQ_VQ.YbpxGvzrbhgPunatrf)erghea;sbe(ine c=0;c<jvaqbj.IjNqNQ_VQ.bac;c++)IjPnapryGvzrbhg(n,c);};;jvaqbj.IjNqNQ_VQ.IjFgnegGvzrbhg=d2(n,c,bG){c=IjTc(n,c);ine cay=jvaqbj.IjNqNQ_VQ.Cnaryf[c];vs(cay&&((cay.UvqrGvzrbhgInyhr>0)||(nethzragf.yratgu==3&&bG>0))){pyrneGvzrbhg(cay.UgU);cay.UgU=frgGvzrbhg(cay.UvqrNpgvba,(nethzragf.yratgu==3?bG:cay.UvqrGvzrbhgInyhr));}};;jvaqbj.IjNqNQ_VQ.IjErfrgGvzrbhg=d2(n,c,bG){c=IjTc(n,c);IjPnapryGvzrbhg(n,c);riny("IjFgnegGvzrbhg(NQ_VQ,c"+(nethzragf.yratgu==3?",bG":"")+")");};;jvaqbj.IjNqNQ_VQ.IjErfrgNyyGvzrbhgf=d2(n){sbe(ine c=0;c<jvaqbj.IjNqNQ_VQ.bac;c++)IjErfrgGvzrbhg(n,c);};;jvaqbj.IjNqNQ_VQ.IjQrgnpure=d2(n,rig,sap){gel{vs(IjQVR5)riny("jvaqbj.qrgnpuRirag(\'ba"+rig+"\',"+sap+"NQ_VQ)");ryfr vs(!IjQVRZnp)riny("jvaqbj.erzbirRiragYvfgrare(\'"+rig+"\',"+sap+"NQ_VQ,snyfr)");}pngpu(r){}};;jvaqbj.IjNqNQ_VQ.IjPyrna';
+
+ var s26 = computeInputVariants('VC=74.125.75.1', 81);
+ var s27 = computeInputVariants('9.0 e115', 78);
+ var s28 = computeInputVariants('k',78);
+ var s29 = computeInputVariants(str2, 81);
+ var s30 = computeInputVariants(str3, 81);
+ var s31 = computeInputVariants('144631658', 78);
+ var s32 = computeInputVariants('Pbhagel=IIZ%3Q', 78);
+ var s33 = computeInputVariants('Pbhagel=IIZ=', 78);
+ var s34 = computeInputVariants('CersreerqPhygherCraqvat=', 78);
+ var s35 = computeInputVariants(str4, 78);
+ var s36 = computeInputVariants(str5, 78);
+ var s37 = computeInputVariants('__hgzp=144631658', 78);
+ var s38 = computeInputVariants('gvzrMbar=-8', 78);
+ var s39 = computeInputVariants('gvzrMbar=0', 78);
+ // var s40 = computeInputVariants(s15[i], 78);
+ var s41 = computeInputVariants('vachggrkg QBZPbageby_cynprubyqre', 78);
+ var s42 = computeInputVariants('xrlqbja', 78);
+ var s43 = computeInputVariants('xrlhc', 78);
+ var s44 = computeInputVariants('uggc://zrffntvat.zlfcnpr.pbz/vaqrk.psz', 77);
+ var s45 = computeInputVariants('FrffvbaFgbentr=%7O%22GnoThvq%22%3N%7O%22thvq%22%3N1231367125017%7Q%7Q', 73);
+ var s46 = computeInputVariants(str6, 72);
+ var s47 = computeInputVariants('3.5.0.0', 70);
+ var s48 = computeInputVariants(str7, 70);
+ var s49 = computeInputVariants(str8, 70);
+ var s50 = computeInputVariants(str9, 70);
+ var s51 = computeInputVariants('NI%3Q1_CI%3Q1_PI%3Q1_EI%3Q1_HI%3Q1_HP%3Q1_IC%3Q0.0.0.0_IH%3Q0', 70);
+ var s52 = computeInputVariants('svz_zlfcnpr_ubzrcntr_abgybttrqva,svz_zlfcnpr_aba_HTP,svz_zlfcnpr_havgrq-fgngrf', 70);
+ var s53 = computeInputVariants('ybnqvat', 70);
+ var s54 = computeInputVariants('#', 68);
+ var s55 = computeInputVariants('ybnqrq', 68);
+ var s56 = computeInputVariants('pbybe', 49);
+ var s57 = computeInputVariants('uggc://sevraqf.zlfcnpr.pbz/vaqrk.psz', 44);
+
+ function runBlock1() {
+ for (var i = 0; i < 81; i++) {
+ re8.exec(s26[i]);
+ }
+ for (var i = 0; i < 78; i++) {
+ s27[i].replace(/(\s)+e/, '');
+ s28[i].replace(/./, '');
+ s29[i].replace(re17, '');
+ s30[i].replace(re17, '');
+ re8.exec(s31[i]);
+ re8.exec(s32[i]);
+ re8.exec(s33[i]);
+ re8.exec(s34[i]);
+ re8.exec(s35[i]);
+ re8.exec(s36[i]);
+ re8.exec(s37[i]);
+ re8.exec(s38[i]);
+ re8.exec(s39[i]);
+ /Fnsnev\/(\d+\.\d+)/.exec(s15[i]);
+ re3.exec(s41[i]);
+ re0.exec(s42[i]);
+ re0.exec(s43[i]);
+ }
+ for (var i = 0; i < 77; i++) {
+ s44[i].replace(re12, '');
+ re13.exec(s44[i]);
+ }
+ for (var i = 0; i < 73; i++) {
+ s45[i].replace(re18, '');
+ }
+ for (var i = 0; i < 72; i++) {
+ re1.exec(s46[i]);
+ }
+ for (var i = 0; i < 71; i++) {
+ re19.exec('');
+ }
+ for (var i = 0; i < 70; i++) {
+ s47[i].replace(re11, '');
+ s48[i].replace(/d1/g, '');
+ s49[i].replace(/NQ_VQ/g, '');
+ s50[i].replace(/d2/g, '');
+ s51[i].replace(/_/g, '');
+ s52[i].split(re20);
+ re21.exec(s53[i]);
+ }
+ for (var i = 0; i < 68; i++) {
+ re1.exec(s54[i]);
+ /(?:ZFVR.(\d+\.\d+))|(?:(?:Sversbk|TenaCnenqvfb|Vprjrnfry).(\d+\.\d+))|(?:Bcren.(\d+\.\d+))|(?:NccyrJroXvg.(\d+(?:\.\d+)?))/.exec(s15[i]);
+ /(Znp BF K)|(Jvaqbjf;)/.exec(s15[i]);
+ /Trpxb\/([0-9]+)/.exec(s15[i]);
+ re21.exec(s55[i]);
+ }
+ for (var i = 0; i < 49; i++) {
+ re16.exec(s56[i]);
+ }
+ for (var i = 0; i < 44; i++) {
+ s57[i].replace(re12, '');
+ re13.exec(s57[i]);
+ }
+ }
+ var re22 = /\bso_zrah\b/;
+ var re23 = /^(?:(?:[^:\/?#]+):)?(?:\/\/(?:[^\/?#]*))?([^?#]*)(?:\?([^#]*))?(?:#(.*))?/;
+ var re24 = /uggcf?:\/\/([^\/]+\.)?snprobbx\.pbz\//;
+ var re25 = /"/g;
+ var re26 = /^([^?#]+)(?:\?([^#]*))?(#.*)?/;
+ var s57a = computeInputVariants('fryrpgrq', 40);
+ var s58 = computeInputVariants('vachggrkg uvqqra_ryrz', 40);
+ var s59 = computeInputVariants('vachggrkg ', 40);
+ var s60 = computeInputVariants('vachggrkg', 40);
+ var s61 = computeInputVariants('uggc://jjj.snprobbx.pbz/', 40);
+ var s62 = computeInputVariants('uggc://jjj.snprobbx.pbz/ybtva.cuc', 40);
+ var s63 = computeInputVariants('Funer guvf tnqtrg', 40);
+ var s64 = computeInputVariants('uggc://jjj.tbbtyr.pbz/vt/qverpgbel', 40);
+ var s65 = computeInputVariants('419', 40);
+ var s66 = computeInputVariants('gvzrfgnzc', 40);
+
+ function runBlock2() {
+ for (var i = 0; i < 40; i++) {
+ s57a[i].replace(re14, '');
+ s57a[i].replace(re15, '');
+ }
+ for (var i = 0; i < 39; i++) {
+ s58[i].replace(/\buvqqra_ryrz\b/g, '');
+ re3.exec(s59[i]);
+ re3.exec(s60[i]);
+ re22.exec('HVYvaxOhggba');
+ re22.exec('HVYvaxOhggba_E');
+ re22.exec('HVYvaxOhggba_EJ');
+ re22.exec('zrah_ybtva_pbagnvare');
+ /\buvqqra_ryrz\b/.exec('vachgcnffjbeq');
+ }
+ for (var i = 0; i < 37; i++) {
+ re8.exec('111soqs57qo8o8480qo18sor2011r3n591q7s6s37r120904');
+ re8.exec('SbeprqRkcvengvba=633669315660164980');
+ re8.exec('FrffvbaQQS2=111soqs57qo8o8480qo18sor2011r3n591q7s6s37r120904');
+ }
+ for (var i = 0; i < 35; i++) {
+ 'puvyq p1 svefg'.replace(re14, '');
+ 'puvyq p1 svefg'.replace(re15, '');
+ 'sylbhg pybfrq'.replace(re14, '');
+ 'sylbhg pybfrq'.replace(re15, '');
+ }
+ for (var i = 0; i < 34; i++) {
+ re19.exec('gno2');
+ re19.exec('gno3');
+ re8.exec('44132r503660');
+ re8.exec('SbeprqRkcvengvba=633669316860113296');
+ re8.exec('AFP_zp_dfctwzs-aowb_80=44132r503660');
+ re8.exec('FrffvbaQQS2=s6r4579npn4rn2135s904r0s75pp1o5334p6s6pospo12696');
+ re8.exec('s6r4579npn4rn2135s904r0s75pp1o5334p6s6pospo12696');
+ }
+ for (var i = 0; i < 32; i++) {
+ /puebzr/i.exec(s15[i]);
+ }
+ for (var i = 0; i < 31; i++) {
+ s61[i].replace(re23, '');
+ re8.exec('SbeprqRkcvengvba=633669358527244818');
+ re8.exec('VC=66.249.85.130');
+ re8.exec('FrffvbaQQS2=s15q53p9n372sn76npr13o271n4s3p5r29p235746p908p58');
+ re8.exec('s15q53p9n372sn76npr13o271n4s3p5r29p235746p908p58');
+ re24.exec(s61[i]);
+ }
+ for (var i = 0; i < 30; i++) {
+ s65[i].replace(re6, '');
+ /(?:^|\s+)gvzrfgnzc(?:\s+|$)/.exec(s66[i]);
+ re7.exec(s65[i]);
+ }
+ for (var i = 0; i < 29; i++) {
+ s62[i].replace(re23, '');
+ }
+ for (var i = 0; i < 28; i++) {
+ s63[i].replace(re25, '');
+ s63[i].replace(re12, '');
+ re26.exec(s64[i]);
+ }
+ }
+ var re27 = /-\D/g;
+ var re28 = /\bnpgvingr\b/;
+ var re29 = /%2R/gi;
+ var re30 = /%2S/gi;
+ var re31 = /^(mu-(PA|GJ)|wn|xb)$/;
+ var re32 = /\s?;\s?/;
+ var re33 = /%\w?$/;
+ var re34 = /TNQP=([^;]*)/i;
+ var str10 = 'FrffvbaQQS2=111soqs57qo8o8480qo18sor2011r3n591q7s6s37r120904; ZFPhygher=VC=74.125.75.1&VCPhygher=ra-HF&CersreerqPhygher=ra-HF&CersreerqPhygherCraqvat=&Pbhagel=IIZ=&SbeprqRkcvengvba=633669315660164980&gvzrMbar=0&HFEYBP=DKWyLHAiMTH9AwHjWxAcqUx9GJ91oaEunJ4tIzyyqlMQo3IhqUW5D29xMG1IHlMQo3IhqUW5GzSgMG1Iozy0MJDtH3EuqTImWxEgLHAiMTH9BQN3WxkuqTy0qJEyCGZ3YwDkBGVzGT9hM2y0qJEyCF0kZwVhZQH3APMDo3A0LJkQo2EyCGx0ZQDmWyWyM2yiox5uoJH9D0R=';
+ var str11 = 'FrffvbaQQS2=111soqs57qo8o8480qo18sor2011r3n591q7s6s37r120904; __hgzm=144631658.1231363570.1.1.hgzpfe=(qverpg)|hgzppa=(qverpg)|hgzpzq=(abar); __hgzn=144631658.3426875219718084000.1231363570.1231363570.1231363570.1; __hgzo=144631658.0.10.1231363570; __hgzp=144631658; ZFPhygher=VC=74.125.75.1&VCPhygher=ra-HF&CersreerqPhygher=ra-HF&Pbhagel=IIZ%3Q&SbeprqRkcvengvba=633669315660164980&gvzrMbar=-8&HFEYBP=DKWyLHAiMTH9AwHjWxAcqUx9GJ91oaEunJ4tIzyyqlMQo3IhqUW5D29xMG1IHlMQo3IhqUW5GzSgMG1Iozy0MJDtH3EuqTImWxEgLHAiMTH9BQN3WxkuqTy0qJEyCGZ3YwDkBGVzGT9hM2y0qJEyCF0kZwVhZQH3APMDo3A0LJkQo2EyCGx0ZQDmWyWyM2yiox5uoJH9D0R%3Q';
+ var str12 = 'uggc://tbbtyrnqf.t.qbhoyrpyvpx.arg/cntrnq/nqf?pyvrag=pn-svz_zlfcnpr_zlfcnpr-ubzrcntr_wf&qg=1231363514065&uy=ra&nqfnsr=uvtu&br=hgs8&ahz_nqf=4&bhgchg=wf&nqgrfg=bss&pbeeryngbe=1231363514065&punaary=svz_zlfcnpr_ubzrcntr_abgybttrqva%2Psvz_zlfcnpr_aba_HTP%2Psvz_zlfcnpr_havgrq-fgngrf&hey=uggc%3N%2S%2Subzr.zlfcnpr.pbz%2Svaqrk.psz&nq_glcr=grkg&rvq=6083027&rn=0&sez=0&tn_ivq=1326469221.1231363557&tn_fvq=1231363557&tn_uvq=1114636509&synfu=9.0.115&h_u=768&h_j=1024&h_nu=738&h_nj=1024&h_pq=24&h_gm=-480&h_uvf=2&h_wnin=gehr&h_acyht=7&h_azvzr=22';
+ var str13 = 'ZFPhygher=VC=74.125.75.1&VCPhygher=ra-HF&CersreerqPhygher=ra-HF&Pbhagel=IIZ%3Q&SbeprqRkcvengvba=633669315660164980&gvzrMbar=-8&HFEYBP=DKWyLHAiMTH9AwHjWxAcqUx9GJ91oaEunJ4tIzyyqlMQo3IhqUW5D29xMG1IHlMQo3IhqUW5GzSgMG1Iozy0MJDtH3EuqTImWxEgLHAiMTH9BQN3WxkuqTy0qJEyCGZ3YwDkBGVzGT9hM2y0qJEyCF0kZwVhZQH3APMDo3A0LJkQo2EyCGx0ZQDmWyWyM2yiox5uoJH9D0R%3Q';
+ var str14 = 'ZFPhygher=VC=74.125.75.1&VCPhygher=ra-HF&CersreerqPhygher=ra-HF&CersreerqPhygherCraqvat=&Pbhagel=IIZ=&SbeprqRkcvengvba=633669315660164980&gvzrMbar=0&HFEYBP=DKWyLHAiMTH9AwHjWxAcqUx9GJ91oaEunJ4tIzyyqlMQo3IhqUW5D29xMG1IHlMQo3IhqUW5GzSgMG1Iozy0MJDtH3EuqTImWxEgLHAiMTH9BQN3WxkuqTy0qJEyCGZ3YwDkBGVzGT9hM2y0qJEyCF0kZwVhZQH3APMDo3A0LJkQo2EyCGx0ZQDmWyWyM2yiox5uoJH9D0R=';
+ var re35 = /[<>]/g;
+ var str15 = 'FrffvbaQQS2=s6r4579npn4rn2135s904r0s75pp1o5334p6s6pospo12696; ZFPhygher=VC=74.125.75.1&VCPhygher=ra-HF&CersreerqPhygher=ra-HF&CersreerqPhygherCraqvat=&Pbhagel=IIZ=&SbeprqRkcvengvba=633669316860113296&gvzrMbar=0&HFEYBP=DKWyLHAiMTH9AwHjWxAcqUx9GJ91oaEunJ4tIzyyqlMQo3IhqUW5D29xMG1IHlMQo3IhqUW5GzSgMG1Iozy0MJDtH3EuqTImWxEgLHAiMTH9BQN3WxkuqTy0qJEyCGZ3YwDkBGVzGT9hM2y0qJEyCF0kZwVhZQH3APMDo3A0LJkQo2EyCGx0ZQDmWyWyM2yiox5uoJH9D0R=; AFP_zp_dfctwzs-aowb_80=44132r503660';
+ var str16 = 'FrffvbaQQS2=s6r4579npn4rn2135s904r0s75pp1o5334p6s6pospo12696; AFP_zp_dfctwzs-aowb_80=44132r503660; __hgzm=144631658.1231363638.1.1.hgzpfe=(qverpg)|hgzppa=(qverpg)|hgzpzq=(abar); __hgzn=144631658.965867047679498800.1231363638.1231363638.1231363638.1; __hgzo=144631658.0.10.1231363638; __hgzp=144631658; ZFPhygher=VC=74.125.75.1&VCPhygher=ra-HF&CersreerqPhygher=ra-HF&Pbhagel=IIZ%3Q&SbeprqRkcvengvba=633669316860113296&gvzrMbar=-8&HFEYBP=DKWyLHAiMTH9AwHjWxAcqUx9GJ91oaEunJ4tIzyyqlMQo3IhqUW5D29xMG1IHlMQo3IhqUW5GzSgMG1Iozy0MJDtH3EuqTImWxEgLHAiMTH9BQN3WxkuqTy0qJEyCGZ3YwDkBGVzGT9hM2y0qJEyCF0kZwVhZQH3APMDo3A0LJkQo2EyCGx0ZQDmWyWyM2yiox5uoJH9D0R%3Q';
+ var str17 = 'uggc://tbbtyrnqf.t.qbhoyrpyvpx.arg/cntrnq/nqf?pyvrag=pn-svz_zlfcnpr_zlfcnpr-ubzrcntr_wf&qg=1231363621014&uy=ra&nqfnsr=uvtu&br=hgs8&ahz_nqf=4&bhgchg=wf&nqgrfg=bss&pbeeryngbe=1231363621014&punaary=svz_zlfcnpr_ubzrcntr_abgybttrqva%2Psvz_zlfcnpr_aba_HTP%2Psvz_zlfcnpr_havgrq-fgngrf&hey=uggc%3N%2S%2Scebsvyr.zlfcnpr.pbz%2Svaqrk.psz&nq_glcr=grkg&rvq=6083027&rn=0&sez=0&tn_ivq=348699119.1231363624&tn_fvq=1231363624&tn_uvq=895511034&synfu=9.0.115&h_u=768&h_j=1024&h_nu=738&h_nj=1024&h_pq=24&h_gm=-480&h_uvf=2&h_wnin=gehr&h_acyht=7&h_azvzr=22';
+ var str18 = 'uggc://jjj.yrobapbva.se/yv';
+ var str19 = 'ZFPhygher=VC=74.125.75.1&VCPhygher=ra-HF&CersreerqPhygher=ra-HF&Pbhagel=IIZ%3Q&SbeprqRkcvengvba=633669316860113296&gvzrMbar=-8&HFEYBP=DKWyLHAiMTH9AwHjWxAcqUx9GJ91oaEunJ4tIzyyqlMQo3IhqUW5D29xMG1IHlMQo3IhqUW5GzSgMG1Iozy0MJDtH3EuqTImWxEgLHAiMTH9BQN3WxkuqTy0qJEyCGZ3YwDkBGVzGT9hM2y0qJEyCF0kZwVhZQH3APMDo3A0LJkQo2EyCGx0ZQDmWyWyM2yiox5uoJH9D0R%3Q';
+ var str20 = 'ZFPhygher=VC=74.125.75.1&VCPhygher=ra-HF&CersreerqPhygher=ra-HF&CersreerqPhygherCraqvat=&Pbhagel=IIZ=&SbeprqRkcvengvba=633669316860113296&gvzrMbar=0&HFEYBP=DKWyLHAiMTH9AwHjWxAcqUx9GJ91oaEunJ4tIzyyqlMQo3IhqUW5D29xMG1IHlMQo3IhqUW5GzSgMG1Iozy0MJDtH3EuqTImWxEgLHAiMTH9BQN3WxkuqTy0qJEyCGZ3YwDkBGVzGT9hM2y0qJEyCF0kZwVhZQH3APMDo3A0LJkQo2EyCGx0ZQDmWyWyM2yiox5uoJH9D0R=';
+
+ var s67 = computeInputVariants('e115', 27);
+ var s68 = computeInputVariants('qvfcynl', 27);
+ var s69 = computeInputVariants('cbfvgvba', 27);
+ var s70 = computeInputVariants('uggc://jjj.zlfcnpr.pbz/', 27);
+ var s71 = computeInputVariants('cntrivrj', 27);
+ var s72 = computeInputVariants('VC=74.125.75.3', 27);
+ var s73 = computeInputVariants('ra', 27);
+ var s74 = computeInputVariants(str10, 27);
+ var s75 = computeInputVariants(str11, 27);
+ var s76 = computeInputVariants(str12, 27);
+ var s77 = computeInputVariants(str17, 27);
+ var s78 = computeInputVariants(str18, 27);
+
+ function runBlock3() {
+ for (var i = 0; i < 27; i++) {
+ s67[i].replace(/[A-Za-z]/g, '');
+ }
+ for (var i = 0; i < 23; i++) {
+ s68[i].replace(re27, '');
+ s69[i].replace(re27, '');
+ }
+ for (var i = 0; i < 22; i++) {
+ 'unaqyr'.replace(re14, '');
+ 'unaqyr'.replace(re15, '');
+ 'yvar'.replace(re14, '');
+ 'yvar'.replace(re15, '');
+ 'cnerag puebzr6 fvatyr1 gno'.replace(re14, '');
+ 'cnerag puebzr6 fvatyr1 gno'.replace(re15, '');
+ 'fyvqre'.replace(re14, '');
+ 'fyvqre'.replace(re15, '');
+ re28.exec('');
+ }
+ for (var i = 0; i < 21; i++) {
+ s70[i].replace(re12, '');
+ re13.exec(s70[i]);
+ }
+ for (var i = 0; i < 20; i++) {
+ s71[i].replace(re29, '');
+ s71[i].replace(re30, '');
+ re19.exec('ynfg');
+ re19.exec('ba svefg');
+ re8.exec(s72[i]);
+ }
+ for (var i = 0; i < 19; i++) {
+ re31.exec(s73[i]);
+ }
+ for (var i = 0; i < 18; i++) {
+ s74[i].split(re32);
+ s75[i].split(re32);
+ s76[i].replace(re33, '');
+ re8.exec('144631658.0.10.1231363570');
+ re8.exec('144631658.1231363570.1.1.hgzpfe=(qverpg)|hgzppa=(qverpg)|hgzpzq=(abar)');
+ re8.exec('144631658.3426875219718084000.1231363570.1231363570.1231363570.1');
+ re8.exec(str13);
+ re8.exec(str14);
+ re8.exec('__hgzn=144631658.3426875219718084000.1231363570.1231363570.1231363570.1');
+ re8.exec('__hgzo=144631658.0.10.1231363570');
+ re8.exec('__hgzm=144631658.1231363570.1.1.hgzpfe=(qverpg)|hgzppa=(qverpg)|hgzpzq=(abar)');
+ re34.exec(s74[i]);
+ re34.exec(s75[i]);
+ }
+ for (var i = 0; i < 17; i++) {
+ s15[i].match(/zfvr/gi);
+ s15[i].match(/bcren/gi);
+ str15.split(re32);
+ str16.split(re32);
+ 'ohggba'.replace(re14, '');
+ 'ohggba'.replace(re15, '');
+ 'puvyq p1 svefg sylbhg pybfrq'.replace(re14, '');
+ 'puvyq p1 svefg sylbhg pybfrq'.replace(re15, '');
+ 'pvgvrf'.replace(re14, '');
+ 'pvgvrf'.replace(re15, '');
+ 'pybfrq'.replace(re14, '');
+ 'pybfrq'.replace(re15, '');
+ 'qry'.replace(re14, '');
+ 'qry'.replace(re15, '');
+ 'uqy_zba'.replace(re14, '');
+ 'uqy_zba'.replace(re15, '');
+ s77[i].replace(re33, '');
+ s78[i].replace(/%3P/g, '');
+ s78[i].replace(/%3R/g, '');
+ s78[i].replace(/%3q/g, '');
+ s78[i].replace(re35, '');
+ 'yvaxyvfg16'.replace(re14, '');
+ 'yvaxyvfg16'.replace(re15, '');
+ 'zvahf'.replace(re14, '');
+ 'zvahf'.replace(re15, '');
+ 'bcra'.replace(re14, '');
+ 'bcra'.replace(re15, '');
+ 'cnerag puebzr5 fvatyr1 ps NU'.replace(re14, '');
+ 'cnerag puebzr5 fvatyr1 ps NU'.replace(re15, '');
+ 'cynlre'.replace(re14, '');
+ 'cynlre'.replace(re15, '');
+ 'cyhf'.replace(re14, '');
+ 'cyhf'.replace(re15, '');
+ 'cb_uqy'.replace(re14, '');
+ 'cb_uqy'.replace(re15, '');
+ 'hyJVzt'.replace(re14, '');
+ 'hyJVzt'.replace(re15, '');
+ re8.exec('144631658.0.10.1231363638');
+ re8.exec('144631658.1231363638.1.1.hgzpfe=(qverpg)|hgzppa=(qverpg)|hgzpzq=(abar)');
+ re8.exec('144631658.965867047679498800.1231363638.1231363638.1231363638.1');
+ re8.exec('4413268q3660');
+ re8.exec('4ss747o77904333q374or84qrr1s9r0nprp8r5q81534o94n');
+ re8.exec('SbeprqRkcvengvba=633669321699093060');
+ re8.exec('VC=74.125.75.20');
+ re8.exec(str19);
+ re8.exec(str20);
+ re8.exec('AFP_zp_tfwsbrg-aowb_80=4413268q3660');
+ re8.exec('FrffvbaQQS2=4ss747o77904333q374or84qrr1s9r0nprp8r5q81534o94n');
+ re8.exec('__hgzn=144631658.965867047679498800.1231363638.1231363638.1231363638.1');
+ re8.exec('__hgzo=144631658.0.10.1231363638');
+ re8.exec('__hgzm=144631658.1231363638.1.1.hgzpfe=(qverpg)|hgzppa=(qverpg)|hgzpzq=(abar)');
+ re34.exec(str15);
+ re34.exec(str16);
+ }
+ }
+ var re36 = /uers|fep|fryrpgrq/;
+ var re37 = /\s*([+>~\s])\s*([a-zA-Z#.*:\[])/g;
+ var re38 = /^(\w+|\*)$/;
+ var str21 = 'FrffvbaQQS2=s15q53p9n372sn76npr13o271n4s3p5r29p235746p908p58; ZFPhygher=VC=66.249.85.130&VCPhygher=ra-HF&CersreerqPhygher=ra-HF&CersreerqPhygherCraqvat=&Pbhagel=IIZ=&SbeprqRkcvengvba=633669358527244818&gvzrMbar=0&HFEYBP=DKWyLHAiMTH9AwHjWxAcqUx9GJ91oaEunJ4tIzyyqlMQo3IhqUW5D29xMG1IHlMQo3IhqUW5GzSgMG1Iozy0MJDtH3EuqTImWxEgLHAiMTH9BQN3WxkuqTy0qJEyCGZ3YwDkBGVzGT9hM2y0qJEyCF0kZwVhZQH3APMDo3A0LJkQo2EyCGx0ZQDmWyWyM2yiox5uoJH9D0R=';
+ var str22 = 'FrffvbaQQS2=s15q53p9n372sn76npr13o271n4s3p5r29p235746p908p58; __hgzm=144631658.1231367822.1.1.hgzpfe=(qverpg)|hgzppa=(qverpg)|hgzpzq=(abar); __hgzn=144631658.4127520630321984500.1231367822.1231367822.1231367822.1; __hgzo=144631658.0.10.1231367822; __hgzp=144631658; ZFPhygher=VC=66.249.85.130&VCPhygher=ra-HF&CersreerqPhygher=ra-HF&Pbhagel=IIZ%3Q&SbeprqRkcvengvba=633669358527244818&gvzrMbar=-8&HFEYBP=DKWyLHAiMTH9AwHjWxAcqUx9GJ91oaEunJ4tIzyyqlMQo3IhqUW5D29xMG1IHlMQo3IhqUW5GzSgMG1Iozy0MJDtH3EuqTImWxEgLHAiMTH9BQN3WxkuqTy0qJEyCGZ3YwDkBGVzGT9hM2y0qJEyCF0kZwVhZQH3APMDo3A0LJkQo2EyCGx0ZQDmWyWyM2yiox5uoJH9D0R%3Q';
+ var str23 = 'uggc://tbbtyrnqf.t.qbhoyrpyvpx.arg/cntrnq/nqf?pyvrag=pn-svz_zlfcnpr_zlfcnpr-ubzrcntr_wf&qg=1231367803797&uy=ra&nqfnsr=uvtu&br=hgs8&ahz_nqf=4&bhgchg=wf&nqgrfg=bss&pbeeryngbe=1231367803797&punaary=svz_zlfcnpr_ubzrcntr_abgybttrqva%2Psvz_zlfcnpr_aba_HTP%2Psvz_zlfcnpr_havgrq-fgngrf&hey=uggc%3N%2S%2Szrffntvat.zlfcnpr.pbz%2Svaqrk.psz&nq_glcr=grkg&rvq=6083027&rn=0&sez=0&tn_ivq=1192552091.1231367807&tn_fvq=1231367807&tn_uvq=1155446857&synfu=9.0.115&h_u=768&h_j=1024&h_nu=738&h_nj=1024&h_pq=24&h_gm=-480&h_uvf=2&h_wnin=gehr&h_acyht=7&h_azvzr=22';
+ var str24 = 'ZFPhygher=VC=66.249.85.130&VCPhygher=ra-HF&CersreerqPhygher=ra-HF&Pbhagel=IIZ%3Q&SbeprqRkcvengvba=633669358527244818&gvzrMbar=-8&HFEYBP=DKWyLHAiMTH9AwHjWxAcqUx9GJ91oaEunJ4tIzyyqlMQo3IhqUW5D29xMG1IHlMQo3IhqUW5GzSgMG1Iozy0MJDtH3EuqTImWxEgLHAiMTH9BQN3WxkuqTy0qJEyCGZ3YwDkBGVzGT9hM2y0qJEyCF0kZwVhZQH3APMDo3A0LJkQo2EyCGx0ZQDmWyWyM2yiox5uoJH9D0R%3Q';
+ var str25 = 'ZFPhygher=VC=66.249.85.130&VCPhygher=ra-HF&CersreerqPhygher=ra-HF&CersreerqPhygherCraqvat=&Pbhagel=IIZ=&SbeprqRkcvengvba=633669358527244818&gvzrMbar=0&HFEYBP=DKWyLHAiMTH9AwHjWxAcqUx9GJ91oaEunJ4tIzyyqlMQo3IhqUW5D29xMG1IHlMQo3IhqUW5GzSgMG1Iozy0MJDtH3EuqTImWxEgLHAiMTH9BQN3WxkuqTy0qJEyCGZ3YwDkBGVzGT9hM2y0qJEyCF0kZwVhZQH3APMDo3A0LJkQo2EyCGx0ZQDmWyWyM2yiox5uoJH9D0R=';
+ var str26 = 'hy.ynat-fryrpgbe';
+ var re39 = /\\/g;
+ var re40 = / /g;
+ var re41 = /\/\xc4\/t/;
+ var re42 = /\/\xd6\/t/;
+ var re43 = /\/\xdc\/t/;
+ var re44 = /\/\xdf\/t/;
+ var re45 = /\/\xe4\/t/;
+ var re46 = /\/\xf6\/t/;
+ var re47 = /\/\xfc\/t/;
+ var re48 = /\W/g;
+ var re49 = /uers|fep|fglyr/;
+ var s79 = computeInputVariants(str21, 16);
+ var s80 = computeInputVariants(str22, 16);
+ var s81 = computeInputVariants(str23, 16);
+ var s82 = computeInputVariants(str26, 16);
+
+ function runBlock4() {
+ for (var i = 0; i < 16; i++) {
+ ''.replace(/\*/g, '');
+ /\bnpgvir\b/.exec('npgvir');
+ /sversbk/i.exec(s15[i]);
+ re36.exec('glcr');
+ /zfvr/i.exec(s15[i]);
+ /bcren/i.exec(s15[i]);
+ }
+ for (var i = 0; i < 15; i++) {
+ s79[i].split(re32);
+ s80[i].split(re32);
+ 'uggc://ohyyrgvaf.zlfcnpr.pbz/vaqrk.psz'.replace(re12, '');
+ s81[i].replace(re33, '');
+ 'yv'.replace(re37, '');
+ 'yv'.replace(re18, '');
+ re8.exec('144631658.0.10.1231367822');
+ re8.exec('144631658.1231367822.1.1.hgzpfe=(qverpg)|hgzppa=(qverpg)|hgzpzq=(abar)');
+ re8.exec('144631658.4127520630321984500.1231367822.1231367822.1231367822.1');
+ re8.exec(str24);
+ re8.exec(str25);
+ re8.exec('__hgzn=144631658.4127520630321984500.1231367822.1231367822.1231367822.1');
+ re8.exec('__hgzo=144631658.0.10.1231367822');
+ re8.exec('__hgzm=144631658.1231367822.1.1.hgzpfe=(qverpg)|hgzppa=(qverpg)|hgzpzq=(abar)');
+ re34.exec(s79[i]);
+ re34.exec(s80[i]);
+ /\.([\w-]+)|\[(\w+)(?:([!*^$~|]?=)["']?(.*?)["']?)?\]|:([\w-]+)(?:\(["']?(.*?)?["']?\)|$)/g.exec(s82[i]);
+ re13.exec('uggc://ohyyrgvaf.zlfcnpr.pbz/vaqrk.psz');
+ re38.exec('yv');
+ }
+ for (var i = 0; i < 14; i++) {
+ ''.replace(re18, '');
+ '9.0 e115'.replace(/(\s+e|\s+o[0-9]+)/, '');
+ 'Funer guvf tnqtrg'.replace(/</g, '');
+ 'Funer guvf tnqtrg'.replace(/>/g, '');
+ 'Funer guvf tnqtrg'.replace(re39, '');
+ 'uggc://cebsvyrrqvg.zlfcnpr.pbz/vaqrk.psz'.replace(re12, '');
+ 'grnfre'.replace(re40, '');
+ 'grnfre'.replace(re41, '');
+ 'grnfre'.replace(re42, '');
+ 'grnfre'.replace(re43, '');
+ 'grnfre'.replace(re44, '');
+ 'grnfre'.replace(re45, '');
+ 'grnfre'.replace(re46, '');
+ 'grnfre'.replace(re47, '');
+ 'grnfre'.replace(re48, '');
+ re16.exec('znetva-gbc');
+ re16.exec('cbfvgvba');
+ re19.exec('gno1');
+ re9.exec('qz');
+ re9.exec('qg');
+ re9.exec('zbqobk');
+ re9.exec('zbqobkva');
+ re9.exec('zbqgvgyr');
+ re13.exec('uggc://cebsvyrrqvg.zlfcnpr.pbz/vaqrk.psz');
+ re26.exec('/vt/znvytnqtrg');
+ re49.exec('glcr');
+ }
+ }
+ var re50 = /(?:^|\s+)fryrpgrq(?:\s+|$)/;
+ var re51 = /\&/g;
+ var re52 = /\+/g;
+ var re53 = /\?/g;
+ var re54 = /\t/g;
+ var re55 = /(\$\{nqiHey\})|(\$nqiHey\b)/g;
+ var re56 = /(\$\{cngu\})|(\$cngu\b)/g;
+ function runBlock5() {
+ for (var i = 0; i < 13; i++) {
+ 'purpx'.replace(re14, '');
+ 'purpx'.replace(re15, '');
+ 'pvgl'.replace(re14, '');
+ 'pvgl'.replace(re15, '');
+ 'qrpe fyvqrgrkg'.replace(re14, '');
+ 'qrpe fyvqrgrkg'.replace(re15, '');
+ 'svefg fryrpgrq'.replace(re14, '');
+ 'svefg fryrpgrq'.replace(re15, '');
+ 'uqy_rag'.replace(re14, '');
+ 'uqy_rag'.replace(re15, '');
+ 'vape fyvqrgrkg'.replace(re14, '');
+ 'vape fyvqrgrkg'.replace(re15, '');
+ 'vachggrkg QBZPbageby_cynprubyqre'.replace(re5, '');
+ 'cnerag puebzr6 fvatyr1 gno fryrpgrq'.replace(re14, '');
+ 'cnerag puebzr6 fvatyr1 gno fryrpgrq'.replace(re15, '');
+ 'cb_guz'.replace(re14, '');
+ 'cb_guz'.replace(re15, '');
+ 'fhozvg'.replace(re14, '');
+ 'fhozvg'.replace(re15, '');
+ re50.exec('');
+ /NccyrJroXvg\/([^\s]*)/.exec(s15[i]);
+ /XUGZY/.exec(s15[i]);
+ }
+ for (var i = 0; i < 12; i++) {
+ '${cebg}://${ubfg}${cngu}/${dz}'.replace(/(\$\{cebg\})|(\$cebg\b)/g, '');
+ '1'.replace(re40, '');
+ '1'.replace(re10, '');
+ '1'.replace(re51, '');
+ '1'.replace(re52, '');
+ '1'.replace(re53, '');
+ '1'.replace(re39, '');
+ '1'.replace(re54, '');
+ '9.0 e115'.replace(/^(.*)\..*$/, '');
+ '9.0 e115'.replace(/^.*e(.*)$/, '');
+ '<!-- ${nqiHey} -->'.replace(re55, '');
+ '<fpevcg glcr="grkg/wninfpevcg" fep="${nqiHey}"></fpevcg>'.replace(re55, '');
+ s21[i].replace(/^.*\s+(\S+\s+\S+$)/, '');
+ 'tzk%2Subzrcntr%2Sfgneg%2Sqr%2S'.replace(re30, '');
+ 'tzk'.replace(re30, '');
+ 'uggc://${ubfg}${cngu}/${dz}'.replace(/(\$\{ubfg\})|(\$ubfg\b)/g, '');
+ 'uggc://nqpyvrag.hvzfrei.arg${cngu}/${dz}'.replace(re56, '');
+ 'uggc://nqpyvrag.hvzfrei.arg/wf.at/${dz}'.replace(/(\$\{dz\})|(\$dz\b)/g, '');
+ 'frpgvba'.replace(re29, '');
+ 'frpgvba'.replace(re30, '');
+ 'fvgr'.replace(re29, '');
+ 'fvgr'.replace(re30, '');
+ 'fcrpvny'.replace(re29, '');
+ 'fcrpvny'.replace(re30, '');
+ re36.exec('anzr');
+ /e/.exec('9.0 e115');
+ }
+ }
+ var re57 = /##yv4##/gi;
+ var re58 = /##yv16##/gi;
+ var re59 = /##yv19##/gi;
+ var str27 = '<hy pynff="nqi">##yv4##Cbjreshy Zvpebfbsg grpuabybtl urycf svtug fcnz naq vzcebir frphevgl.##yv19##Trg zber qbar gunaxf gb terngre rnfr naq fcrrq.##yv16##Ybgf bs fgbentr &#40;5 TO&#41; - zber pbby fghss ba gur jnl.##OE## ##OE## ##N##Yrnea zber##/N##</hy>';
+ var str28 = '<hy pynff="nqi"><yv vq="YvOYG4" fglyr="onpxtebhaq-vzntr:hey(uggc://vzt.jykef.pbz/~Yvir.FvgrPbagrag.VQ/~14.2.1230/~/~/~/oyg4.cat)">Cbjreshy Zvpebfbsg grpuabybtl urycf svtug fcnz naq vzcebir frphevgl.##yv19##Trg zber qbar gunaxf gb terngre rnfr naq fcrrq.##yv16##Ybgf bs fgbentr &#40;5 TO&#41; - zber pbby fghss ba gur jnl.##OE## ##OE## ##N##Yrnea zber##/N##</hy>';
+ var str29 = '<hy pynff="nqi"><yv vq="YvOYG4" fglyr="onpxtebhaq-vzntr:hey(uggc://vzt.jykef.pbz/~Yvir.FvgrPbagrag.VQ/~14.2.1230/~/~/~/oyg4.cat)">Cbjreshy Zvpebfbsg grpuabybtl urycf svtug fcnz naq vzcebir frphevgl.##yv19##Trg zber qbar gunaxf gb terngre rnfr naq fcrrq.<yv vq="YvOYG16" fglyr="onpxtebhaq-vzntr:hey(uggc://vzt.jykef.pbz/~Yvir.FvgrPbagrag.VQ/~14.2.1230/~/~/~/oyg16.cat)">Ybgf bs fgbentr &#40;5 TO&#41; - zber pbby fghss ba gur jnl.##OE## ##OE## ##N##Yrnea zber##/N##</hy>';
+ var str30 = '<hy pynff="nqi"><yv vq="YvOYG4" fglyr="onpxtebhaq-vzntr:hey(uggc://vzt.jykef.pbz/~Yvir.FvgrPbagrag.VQ/~14.2.1230/~/~/~/oyg4.cat)">Cbjreshy Zvpebfbsg grpuabybtl urycf svtug fcnz naq vzcebir frphevgl.<yv vq="YvOYG19" fglyr="onpxtebhaq-vzntr:hey(uggc://vzt.jykef.pbz/~Yvir.FvgrPbagrag.VQ/~14.2.1230/~/~/~/oyg19.cat)">Trg zber qbar gunaxf gb terngre rnfr naq fcrrq.<yv vq="YvOYG16" fglyr="onpxtebhaq-vzntr:hey(uggc://vzt.jykef.pbz/~Yvir.FvgrPbagrag.VQ/~14.2.1230/~/~/~/oyg16.cat)">Ybgf bs fgbentr &#40;5 TO&#41; - zber pbby fghss ba gur jnl.##OE## ##OE## ##N##Yrnea zber##/N##</hy>';
+ var str31 = '<hy pynff="nqi"><yv vq="YvOYG4" fglyr="onpxtebhaq-vzntr:hey(uggc://vzt.jykef.pbz/~Yvir.FvgrPbagrag.VQ/~14.2.1230/~/~/~/oyg4.cat)">Cbjreshy Zvpebfbsg grpuabybtl urycf svtug fcnz naq vzcebir frphevgl.<yv vq="YvOYG19" fglyr="onpxtebhaq-vzntr:hey(uggc://vzt.jykef.pbz/~Yvir.FvgrPbagrag.VQ/~14.2.1230/~/~/~/oyg19.cat)">Trg zber qbar gunaxf gb terngre rnfr naq fcrrq.<yv vq="YvOYG16" fglyr="onpxtebhaq-vzntr:hey(uggc://vzt.jykef.pbz/~Yvir.FvgrPbagrag.VQ/~14.2.1230/~/~/~/oyg16.cat)">Ybgf bs fgbentr &#40;5 TO&#41; - zber pbby fghss ba gur jnl.<oe> <oe> ##N##Yrnea zber##/N##</hy>';
+ var str32 = '<hy pynff="nqi"><yv vq="YvOYG4" fglyr="onpxtebhaq-vzntr:hey(uggc://vzt.jykef.pbz/~Yvir.FvgrPbagrag.VQ/~14.2.1230/~/~/~/oyg4.cat)">Cbjreshy Zvpebfbsg grpuabybtl urycf svtug fcnz naq vzcebir frphevgl.<yv vq="YvOYG19" fglyr="onpxtebhaq-vzntr:hey(uggc://vzt.jykef.pbz/~Yvir.FvgrPbagrag.VQ/~14.2.1230/~/~/~/oyg19.cat)">Trg zber qbar gunaxf gb terngre rnfr naq fcrrq.<yv vq="YvOYG16" fglyr="onpxtebhaq-vzntr:hey(uggc://vzt.jykef.pbz/~Yvir.FvgrPbagrag.VQ/~14.2.1230/~/~/~/oyg16.cat)">Ybgf bs fgbentr &#40;5 TO&#41; - zber pbby fghss ba gur jnl.<oe> <oe> <n uers="uggc://znvy.yvir.pbz/znvy/nobhg.nfck" gnetrg="_oynax">Yrnea zber##/N##</hy>';
+ var str33 = 'Bar Jvaqbjf Yvir VQ trgf lbh vagb <o>Ubgznvy</o>, <o>Zrffratre</o>, <o>Kobk YVIR</o> \u2014 naq bgure cynprf lbh frr #~#argjbexybtb#~#';
+ var re60 = /(?:^|\s+)bss(?:\s+|$)/;
+ var re61 = /^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/;
+ var re62 = /^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/;
+ var str34 = '${1}://${2}${3}${4}${5}';
+ var str35 = ' O=6gnyg0g4znrrn&o=3&f=gc; Q=_lyu=K3bQZGSxnT4lZzD3OS9GNmV3ZGLkAQxRpTyxNmRlZmRmAmNkAQLRqTImqNZjOUEgpTjQnJ5xMKtgoN--; SCF=qy';
+ var s83 = computeInputVariants(str27, 11);
+ var s84 = computeInputVariants(str28, 11);
+ var s85 = computeInputVariants(str29, 11);
+ var s86 = computeInputVariants(str30, 11);
+ var s87 = computeInputVariants(str31, 11);
+ var s88 = computeInputVariants(str32, 11);
+ var s89 = computeInputVariants(str33, 11);
+ var s90 = computeInputVariants(str34, 11);
+
+ function runBlock6() {
+ for (var i = 0; i < 11; i++) {
+ s83[i].replace(/##yv0##/gi, '');
+ s83[i].replace(re57, '');
+ s84[i].replace(re58, '');
+ s85[i].replace(re59, '');
+ s86[i].replace(/##\/o##/gi, '');
+ s86[i].replace(/##\/v##/gi, '');
+ s86[i].replace(/##\/h##/gi, '');
+ s86[i].replace(/##o##/gi, '');
+ s86[i].replace(/##oe##/gi, '');
+ s86[i].replace(/##v##/gi, '');
+ s86[i].replace(/##h##/gi, '');
+ s87[i].replace(/##n##/gi, '');
+ s88[i].replace(/##\/n##/gi, '');
+ s89[i].replace(/#~#argjbexybtb#~#/g, '');
+ / Zbovyr\//.exec(s15[i]);
+ /##yv1##/gi.exec(s83[i]);
+ /##yv10##/gi.exec(s84[i]);
+ /##yv11##/gi.exec(s84[i]);
+ /##yv12##/gi.exec(s84[i]);
+ /##yv13##/gi.exec(s84[i]);
+ /##yv14##/gi.exec(s84[i]);
+ /##yv15##/gi.exec(s84[i]);
+ re58.exec(s84[i]);
+ /##yv17##/gi.exec(s85[i]);
+ /##yv18##/gi.exec(s85[i]);
+ re59.exec(s85[i]);
+ /##yv2##/gi.exec(s83[i]);
+ /##yv20##/gi.exec(s86[i]);
+ /##yv21##/gi.exec(s86[i]);
+ /##yv22##/gi.exec(s86[i]);
+ /##yv23##/gi.exec(s86[i]);
+ /##yv3##/gi.exec(s83[i]);
+ re57.exec(s83[i]);
+ /##yv5##/gi.exec(s84[i]);
+ /##yv6##/gi.exec(s84[i]);
+ /##yv7##/gi.exec(s84[i]);
+ /##yv8##/gi.exec(s84[i]);
+ /##yv9##/gi.exec(s84[i]);
+ re8.exec('473qq1rs0n2r70q9qo1pq48n021s9468ron90nps048p4p29');
+ re8.exec('SbeprqRkcvengvba=633669325184628362');
+ re8.exec('FrffvbaQQS2=473qq1rs0n2r70q9qo1pq48n021s9468ron90nps048p4p29');
+ /AbxvnA[^\/]*/.exec(s15[i]);
+ }
+ for (var i = 0; i < 10; i++) {
+ ' bss'.replace(/(?:^|\s+)bss(?:\s+|$)/g, '');
+ s90[i].replace(/(\$\{0\})|(\$0\b)/g, '');
+ s90[i].replace(/(\$\{1\})|(\$1\b)/g, '');
+ s90[i].replace(/(\$\{pbzcyrgr\})|(\$pbzcyrgr\b)/g, '');
+ s90[i].replace(/(\$\{sentzrag\})|(\$sentzrag\b)/g, '');
+ s90[i].replace(/(\$\{ubfgcbeg\})|(\$ubfgcbeg\b)/g, '');
+ s90[i].replace(re56, '');
+ s90[i].replace(/(\$\{cebgbpby\})|(\$cebgbpby\b)/g, '');
+ s90[i].replace(/(\$\{dhrel\})|(\$dhrel\b)/g, '');
+ 'nqfvmr'.replace(re29, '');
+ 'nqfvmr'.replace(re30, '');
+ 'uggc://${2}${3}${4}${5}'.replace(/(\$\{2\})|(\$2\b)/g, '');
+ 'uggc://wf.hv-cbegny.qr${3}${4}${5}'.replace(/(\$\{3\})|(\$3\b)/g, '');
+ 'arjf'.replace(re40, '');
+ 'arjf'.replace(re41, '');
+ 'arjf'.replace(re42, '');
+ 'arjf'.replace(re43, '');
+ 'arjf'.replace(re44, '');
+ 'arjf'.replace(re45, '');
+ 'arjf'.replace(re46, '');
+ 'arjf'.replace(re47, '');
+ 'arjf'.replace(re48, '');
+ / PC=i=(\d+)&oe=(.)/.exec(str35);
+ re60.exec(' ');
+ re60.exec(' bss');
+ re60.exec('');
+ re19.exec(' ');
+ re19.exec('svefg ba');
+ re19.exec('ynfg vtaber');
+ re19.exec('ba');
+ re9.exec('scnq so ');
+ re9.exec('zrqvgobk');
+ re9.exec('hsgy');
+ re9.exec('lhv-h');
+ /Fnsnev|Xbadhrebe|XUGZY/gi.exec(s15[i]);
+ re61.exec('uggc://wf.hv-cbegny.qr/tzk/ubzr/wf/20080602/onfr.wf');
+ re62.exec('#Ybtva_rznvy');
+ }
+ }
+ var re63 = /\{0\}/g;
+ var str36 = 'FrffvbaQQS2=4ss747o77904333q374or84qrr1s9r0nprp8r5q81534o94n; ZFPhygher=VC=74.125.75.20&VCPhygher=ra-HF&CersreerqPhygher=ra-HF&CersreerqPhygherCraqvat=&Pbhagel=IIZ=&SbeprqRkcvengvba=633669321699093060&gvzrMbar=0&HFEYBP=DKWyLHAiMTH9AwHjWxAcqUx9GJ91oaEunJ4tIzyyqlMQo3IhqUW5D29xMG1IHlMQo3IhqUW5GzSgMG1Iozy0MJDtH3EuqTImWxEgLHAiMTH9BQN3WxkuqTy0qJEyCGZ3YwDkBGVzGT9hM2y0qJEyCF0kZwVhZQH3APMDo3A0LJkQo2EyCGx0ZQDmWyWyM2yiox5uoJH9D0R=; AFP_zp_tfwsbrg-aowb_80=4413268q3660';
+ var str37 = 'FrffvbaQQS2=4ss747o77904333q374or84qrr1s9r0nprp8r5q81534o94n; AFP_zp_tfwsbrg-aowb_80=4413268q3660; __hgzm=144631658.1231364074.1.1.hgzpfe=(qverpg)|hgzppa=(qverpg)|hgzpzq=(abar); __hgzn=144631658.2294274870215848400.1231364074.1231364074.1231364074.1; __hgzo=144631658.0.10.1231364074; __hgzp=144631658; ZFPhygher=VC=74.125.75.20&VCPhygher=ra-HF&CersreerqPhygher=ra-HF&Pbhagel=IIZ%3Q&SbeprqRkcvengvba=633669321699093060&gvzrMbar=-8&HFEYBP=DKWyLHAiMTH9AwHjWxAcqUx9GJ91oaEunJ4tIzyyqlMQo3IhqUW5D29xMG1IHlMQo3IhqUW5GzSgMG1Iozy0MJDtH3EuqTImWxEgLHAiMTH9BQN3WxkuqTy0qJEyCGZ3YwDkBGVzGT9hM2y0qJEyCF0kZwVhZQH3APMDo3A0LJkQo2EyCGx0ZQDmWyWyM2yiox5uoJH9D0R%3Q';
+ var str38 = 'uggc://tbbtyrnqf.t.qbhoyrpyvpx.arg/cntrnq/nqf?pyvrag=pn-svz_zlfcnpr_zlfcnpr-ubzrcntr_wf&qg=1231364057761&uy=ra&nqfnsr=uvtu&br=hgs8&ahz_nqf=4&bhgchg=wf&nqgrfg=bss&pbeeryngbe=1231364057761&punaary=svz_zlfcnpr_ubzrcntr_abgybttrqva%2Psvz_zlfcnpr_aba_HTP%2Psvz_zlfcnpr_havgrq-fgngrf&hey=uggc%3N%2S%2Ssevraqf.zlfcnpr.pbz%2Svaqrk.psz&nq_glcr=grkg&rvq=6083027&rn=0&sez=0&tn_ivq=1667363813.1231364061&tn_fvq=1231364061&tn_uvq=1917563877&synfu=9.0.115&h_u=768&h_j=1024&h_nu=738&h_nj=1024&h_pq=24&h_gm=-480&h_uvf=2&h_wnin=gehr&h_acyht=7&h_azvzr=22';
+ var str39 = 'ZFPhygher=VC=74.125.75.20&VCPhygher=ra-HF&CersreerqPhygher=ra-HF&Pbhagel=IIZ%3Q&SbeprqRkcvengvba=633669321699093060&gvzrMbar=-8&HFEYBP=DKWyLHAiMTH9AwHjWxAcqUx9GJ91oaEunJ4tIzyyqlMQo3IhqUW5D29xMG1IHlMQo3IhqUW5GzSgMG1Iozy0MJDtH3EuqTImWxEgLHAiMTH9BQN3WxkuqTy0qJEyCGZ3YwDkBGVzGT9hM2y0qJEyCF0kZwVhZQH3APMDo3A0LJkQo2EyCGx0ZQDmWyWyM2yiox5uoJH9D0R%3Q';
+ var str40 = 'ZFPhygher=VC=74.125.75.20&VCPhygher=ra-HF&CersreerqPhygher=ra-HF&CersreerqPhygherCraqvat=&Pbhagel=IIZ=&SbeprqRkcvengvba=633669321699093060&gvzrMbar=0&HFEYBP=DKWyLHAiMTH9AwHjWxAcqUx9GJ91oaEunJ4tIzyyqlMQo3IhqUW5D29xMG1IHlMQo3IhqUW5GzSgMG1Iozy0MJDtH3EuqTImWxEgLHAiMTH9BQN3WxkuqTy0qJEyCGZ3YwDkBGVzGT9hM2y0qJEyCF0kZwVhZQH3APMDo3A0LJkQo2EyCGx0ZQDmWyWyM2yiox5uoJH9D0R=';
+ var s91 = computeInputVariants(str36, 9);
+ var s92 = computeInputVariants(str37, 9);
+ var s93 = computeInputVariants(str38, 9);
+ function runBlock7() {
+ for (var i = 0; i < 9; i++) {
+ '0'.replace(re40, '');
+ '0'.replace(re10, '');
+ '0'.replace(re51, '');
+ '0'.replace(re52, '');
+ '0'.replace(re53, '');
+ '0'.replace(re39, '');
+ '0'.replace(re54, '');
+ 'Lrf'.replace(re40, '');
+ 'Lrf'.replace(re10, '');
+ 'Lrf'.replace(re51, '');
+ 'Lrf'.replace(re52, '');
+ 'Lrf'.replace(re53, '');
+ 'Lrf'.replace(re39, '');
+ 'Lrf'.replace(re54, '');
+ }
+ for (var i = 0; i < 8; i++) {
+ 'Pybfr {0}'.replace(re63, '');
+ 'Bcra {0}'.replace(re63, '');
+ s91[i].split(re32);
+ s92[i].split(re32);
+ 'puvyq p1 svefg gnournqref'.replace(re14, '');
+ 'puvyq p1 svefg gnournqref'.replace(re15, '');
+ 'uqy_fcb'.replace(re14, '');
+ 'uqy_fcb'.replace(re15, '');
+ 'uvag'.replace(re14, '');
+ 'uvag'.replace(re15, '');
+ s93[i].replace(re33, '');
+ 'yvfg'.replace(re14, '');
+ 'yvfg'.replace(re15, '');
+ 'at_bhgre'.replace(re30, '');
+ 'cnerag puebzr5 qbhoyr2 NU'.replace(re14, '');
+ 'cnerag puebzr5 qbhoyr2 NU'.replace(re15, '');
+ 'cnerag puebzr5 dhnq5 ps NU osyvax zbarl'.replace(re14, '');
+ 'cnerag puebzr5 dhnq5 ps NU osyvax zbarl'.replace(re15, '');
+ 'cnerag puebzr6 fvatyr1'.replace(re14, '');
+ 'cnerag puebzr6 fvatyr1'.replace(re15, '');
+ 'cb_qrs'.replace(re14, '');
+ 'cb_qrs'.replace(re15, '');
+ 'gnopbagrag'.replace(re14, '');
+ 'gnopbagrag'.replace(re15, '');
+ 'iv_svefg_gvzr'.replace(re30, '');
+ /(^|.)(ronl|qri-ehf3.wbg)(|fgberf|zbgbef|yvirnhpgvbaf|jvxv|rkcerff|punggre).(pbz(|.nh|.pa|.ux|.zl|.ft|.oe|.zk)|pb(.hx|.xe|.am)|pn|qr|se|vg|ay|or|ng|pu|vr|va|rf|cy|cu|fr)$/i.exec('cntrf.ronl.pbz');
+ re8.exec('144631658.0.10.1231364074');
+ re8.exec('144631658.1231364074.1.1.hgzpfe=(qverpg)|hgzppa=(qverpg)|hgzpzq=(abar)');
+ re8.exec('144631658.2294274870215848400.1231364074.1231364074.1231364074.1');
+ re8.exec('4413241q3660');
+ re8.exec('SbeprqRkcvengvba=633669357391353591');
+ re8.exec(str39);
+ re8.exec(str40);
+ re8.exec('AFP_zp_kkk-gdzogv_80=4413241q3660');
+ re8.exec('FrffvbaQQS2=p98s8o9q42nr21or1r61pqorn1n002nsss569635984s6qp7');
+ re8.exec('__hgzn=144631658.2294274870215848400.1231364074.1231364074.1231364074.1');
+ re8.exec('__hgzo=144631658.0.10.1231364074');
+ re8.exec('__hgzm=144631658.1231364074.1.1.hgzpfe=(qverpg)|hgzppa=(qverpg)|hgzpzq=(abar)');
+ re8.exec('p98s8o9q42nr21or1r61pqorn1n002nsss569635984s6qp7');
+ re34.exec(s91[i]);
+ re34.exec(s92[i]);
+ }
+ }
+ var re64 = /\b[a-z]/g;
+ var re65 = /^uggc:\/\//;
+ var re66 = /(?:^|\s+)qvfnoyrq(?:\s+|$)/;
+ var str41 = 'uggc://cebsvyr.zlfcnpr.pbz/Zbqhyrf/Nccyvpngvbaf/Cntrf/Pnainf.nfck';
+ function runBlock8() {
+ for (var i = 0; i < 7; i++) {
+ s21[i].match(/\d+/g);
+ 'nsgre'.replace(re64, '');
+ 'orsber'.replace(re64, '');
+ 'obggbz'.replace(re64, '');
+ 'ohvygva_jrngure.kzy'.replace(re65, '');
+ 'ohggba'.replace(re37, '');
+ 'ohggba'.replace(re18, '');
+ 'qngrgvzr.kzy'.replace(re65, '');
+ 'uggc://eff.paa.pbz/eff/paa_gbcfgbevrf.eff'.replace(re65, '');
+ 'vachg'.replace(re37, '');
+ 'vachg'.replace(re18, '');
+ 'vafvqr'.replace(re64, '');
+ 'cbvagre'.replace(re27, '');
+ 'cbfvgvba'.replace(/[A-Z]/g, '');
+ 'gbc'.replace(re27, '');
+ 'gbc'.replace(re64, '');
+ 'hy'.replace(re37, '');
+ 'hy'.replace(re18, '');
+ str26.replace(re37, '');
+ str26.replace(re18, '');
+ 'lbhghor_vtbbtyr/i2/lbhghor.kzy'.replace(re65, '');
+ 'm-vaqrk'.replace(re27, '');
+ /#([\w-]+)/.exec(str26);
+ re16.exec('urvtug');
+ re16.exec('znetvaGbc');
+ re16.exec('jvqgu');
+ re19.exec('gno0 svefg ba');
+ re19.exec('gno0 ba');
+ re19.exec('gno4 ynfg');
+ re19.exec('gno4');
+ re19.exec('gno5');
+ re19.exec('gno6');
+ re19.exec('gno7');
+ re19.exec('gno8');
+ /NqborNVE\/([^\s]*)/.exec(s15[i]);
+ /NccyrJroXvg\/([^ ]*)/.exec(s15[i]);
+ /XUGZY/gi.exec(s15[i]);
+ /^(?:obql|ugzy)$/i.exec('YV');
+ re38.exec('ohggba');
+ re38.exec('vachg');
+ re38.exec('hy');
+ re38.exec(str26);
+ /^(\w+|\*)/.exec(str26);
+ /znp|jva|yvahk/i.exec('Jva32');
+ /eton?\([\d\s,]+\)/.exec('fgngvp');
+ }
+ for (var i = 0; i < 6; i++) {
+ ''.replace(/\r/g, '');
+ '/'.replace(re40, '');
+ '/'.replace(re10, '');
+ '/'.replace(re51, '');
+ '/'.replace(re52, '');
+ '/'.replace(re53, '');
+ '/'.replace(re39, '');
+ '/'.replace(re54, '');
+ 'uggc://zfacbegny.112.2b7.arg/o/ff/zfacbegnyubzr/1/U.7-cqi-2/{0}?[NDO]&{1}&{2}&[NDR]'.replace(re63, '');
+ str41.replace(re12, '');
+ 'uggc://jjj.snprobbx.pbz/fepu.cuc'.replace(re23, '');
+ 'freivpr'.replace(re40, '');
+ 'freivpr'.replace(re41, '');
+ 'freivpr'.replace(re42, '');
+ 'freivpr'.replace(re43, '');
+ 'freivpr'.replace(re44, '');
+ 'freivpr'.replace(re45, '');
+ 'freivpr'.replace(re46, '');
+ 'freivpr'.replace(re47, '');
+ 'freivpr'.replace(re48, '');
+ /((ZFVR\s+([6-9]|\d\d)\.))/.exec(s15[i]);
+ re66.exec('');
+ re50.exec('fryrpgrq');
+ re8.exec('8sqq78r9n442851q565599o401385sp3s04r92rnn7o19ssn');
+ re8.exec('SbeprqRkcvengvba=633669340386893867');
+ re8.exec('VC=74.125.75.17');
+ re8.exec('FrffvbaQQS2=8sqq78r9n442851q565599o401385sp3s04r92rnn7o19ssn');
+ /Xbadhrebe|Fnsnev|XUGZY/.exec(s15[i]);
+ re13.exec(str41);
+ re49.exec('unfsbphf');
+ }
+ }
+ var re67 = /zrah_byq/g;
+ var str42 = 'FrffvbaQQS2=473qq1rs0n2r70q9qo1pq48n021s9468ron90nps048p4p29; ZFPhygher=VC=74.125.75.3&VCPhygher=ra-HF&CersreerqPhygher=ra-HF&CersreerqPhygherCraqvat=&Pbhagel=IIZ=&SbeprqRkcvengvba=633669325184628362&gvzrMbar=0&HFEYBP=DKWyLHAiMTH9AwHjWxAcqUx9GJ91oaEunJ4tIzyyqlMQo3IhqUW5D29xMG1IHlMQo3IhqUW5GzSgMG1Iozy0MJDtH3EuqTImWxEgLHAiMTH9BQN3WxkuqTy0qJEyCGZ3YwDkBGVzGT9hM2y0qJEyCF0kZwVhZQH3APMDo3A0LJkQo2EyCGx0ZQDmWyWyM2yiox5uoJH9D0R=';
+ var str43 = 'FrffvbaQQS2=473qq1rs0n2r70q9qo1pq48n021s9468ron90nps048p4p29; __hgzm=144631658.1231364380.1.1.hgzpfe=(qverpg)|hgzppa=(qverpg)|hgzpzq=(abar); __hgzn=144631658.3931862196947939300.1231364380.1231364380.1231364380.1; __hgzo=144631658.0.10.1231364380; __hgzp=144631658; ZFPhygher=VC=74.125.75.3&VCPhygher=ra-HF&CersreerqPhygher=ra-HF&Pbhagel=IIZ%3Q&SbeprqRkcvengvba=633669325184628362&gvzrMbar=-8&HFEYBP=DKWyLHAiMTH9AwHjWxAcqUx9GJ91oaEunJ4tIzyyqlMQo3IhqUW5D29xMG1IHlMQo3IhqUW5GzSgMG1Iozy0MJDtH3EuqTImWxEgLHAiMTH9BQN3WxkuqTy0qJEyCGZ3YwDkBGVzGT9hM2y0qJEyCF0kZwVhZQH3APMDo3A0LJkQo2EyCGx0ZQDmWyWyM2yiox5uoJH9D0R%3Q';
+ var str44 = 'uggc://tbbtyrnqf.t.qbhoyrpyvpx.arg/cntrnq/nqf?pyvrag=pn-svz_zlfcnpr_vzntrf_wf&qg=1231364373088&uy=ra&nqfnsr=uvtu&br=hgs8&ahz_nqf=4&bhgchg=wf&nqgrfg=bss&pbeeryngbe=1231364373088&punaary=svz_zlfcnpr_hfre-ivrj-pbzzragf%2Psvz_zlfcnpr_havgrq-fgngrf&hey=uggc%3N%2S%2Spbzzrag.zlfcnpr.pbz%2Svaqrk.psz&nq_glcr=grkg&rvq=6083027&rn=0&sez=0&tn_ivq=1158737789.1231364375&tn_fvq=1231364375&tn_uvq=415520832&synfu=9.0.115&h_u=768&h_j=1024&h_nu=738&h_nj=1024&h_pq=24&h_gm=-480&h_uvf=2&h_wnin=gehr&h_acyht=7&h_azvzr=22';
+ var str45 = 'ZFPhygher=VC=74.125.75.3&VCPhygher=ra-HF&CersreerqPhygher=ra-HF&Pbhagel=IIZ%3Q&SbeprqRkcvengvba=633669325184628362&gvzrMbar=-8&HFEYBP=DKWyLHAiMTH9AwHjWxAcqUx9GJ91oaEunJ4tIzyyqlMQo3IhqUW5D29xMG1IHlMQo3IhqUW5GzSgMG1Iozy0MJDtH3EuqTImWxEgLHAiMTH9BQN3WxkuqTy0qJEyCGZ3YwDkBGVzGT9hM2y0qJEyCF0kZwVhZQH3APMDo3A0LJkQo2EyCGx0ZQDmWyWyM2yiox5uoJH9D0R%3Q';
+ var str46 = 'ZFPhygher=VC=74.125.75.3&VCPhygher=ra-HF&CersreerqPhygher=ra-HF&CersreerqPhygherCraqvat=&Pbhagel=IIZ=&SbeprqRkcvengvba=633669325184628362&gvzrMbar=0&HFEYBP=DKWyLHAiMTH9AwHjWxAcqUx9GJ91oaEunJ4tIzyyqlMQo3IhqUW5D29xMG1IHlMQo3IhqUW5GzSgMG1Iozy0MJDtH3EuqTImWxEgLHAiMTH9BQN3WxkuqTy0qJEyCGZ3YwDkBGVzGT9hM2y0qJEyCF0kZwVhZQH3APMDo3A0LJkQo2EyCGx0ZQDmWyWyM2yiox5uoJH9D0R=';
+ var re68 = /^([#.]?)((?:[\w\u0128-\uffff*_-]|\\.)*)/;
+ var re69 = /\{1\}/g;
+ var re70 = /\s+/;
+ var re71 = /(\$\{4\})|(\$4\b)/g;
+ var re72 = /(\$\{5\})|(\$5\b)/g;
+ var re73 = /\{2\}/g;
+ var re74 = /[^+>] [^+>]/;
+ var re75 = /\bucpyv\s*=\s*([^;]*)/i;
+ var re76 = /\bucuvqr\s*=\s*([^;]*)/i;
+ var re77 = /\bucfie\s*=\s*([^;]*)/i;
+ var re78 = /\bhfucjrn\s*=\s*([^;]*)/i;
+ var re79 = /\bmvc\s*=\s*([^;]*)/i;
+ var re80 = /^((?:[\w\u0128-\uffff*_-]|\\.)+)(#)((?:[\w\u0128-\uffff*_-]|\\.)+)/;
+ var re81 = /^([>+~])\s*(\w*)/i;
+ var re82 = /^>\s*((?:[\w\u0128-\uffff*_-]|\\.)+)/;
+ var re83 = /^[\s[]?shapgvba/;
+ var re84 = /v\/g.tvs#(.*)/i;
+ var str47 = '#Zbq-Vasb-Vasb-WninFpevcgUvag';
+ var str48 = ',n.svryqOgaPnapry';
+ var str49 = 'FrffvbaQQS2=p98s8o9q42nr21or1r61pqorn1n002nsss569635984s6qp7; ZFPhygher=VC=74.125.75.3&VCPhygher=ra-HF&CersreerqPhygher=ra-HF&CersreerqPhygherCraqvat=&Pbhagel=IIZ=&SbeprqRkcvengvba=633669357391353591&gvzrMbar=0&HFEYBP=DKWyLHAiMTH9AwHjWxAcqUx9GJ91oaEunJ4tIzyyqlMQo3IhqUW5D29xMG1IHlMQo3IhqUW5GzSgMG1Iozy0MJDtH3EuqTImWxEgLHAiMTH9BQN3WxkuqTy0qJEyCGZ3YwDkBGVzGT9hM2y0qJEyCF0kZwVhZQH3APMDo3A0LJkQo2EyCGx0ZQDmWyWyM2yiox5uoJH9D0R=; AFP_zp_kkk-gdzogv_80=4413241q3660';
+ var str50 = 'FrffvbaQQS2=p98s8o9q42nr21or1r61pqorn1n002nsss569635984s6qp7; AFP_zp_kkk-gdzogv_80=4413241q3660; AFP_zp_kkk-aowb_80=4413235p3660; __hgzm=144631658.1231367708.1.1.hgzpfe=(qverpg)|hgzppa=(qverpg)|hgzpzq=(abar); __hgzn=144631658.2770915348920628700.1231367708.1231367708.1231367708.1; __hgzo=144631658.0.10.1231367708; __hgzp=144631658; ZFPhygher=VC=74.125.75.3&VCPhygher=ra-HF&CersreerqPhygher=ra-HF&Pbhagel=IIZ%3Q&SbeprqRkcvengvba=633669357391353591&gvzrMbar=-8&HFEYBP=DKWyLHAiMTH9AwHjWxAcqUx9GJ91oaEunJ4tIzyyqlMQo3IhqUW5D29xMG1IHlMQo3IhqUW5GzSgMG1Iozy0MJDtH3EuqTImWxEgLHAiMTH9BQN3WxkuqTy0qJEyCGZ3YwDkBGVzGT9hM2y0qJEyCF0kZwVhZQH3APMDo3A0LJkQo2EyCGx0ZQDmWyWyM2yiox5uoJH9D0R%3Q';
+ var str51 = 'uggc://tbbtyrnqf.t.qbhoyrpyvpx.arg/cntrnq/nqf?pyvrag=pn-svz_zlfcnpr_zlfcnpr-ubzrcntr_wf&qg=1231367691141&uy=ra&nqfnsr=uvtu&br=hgs8&ahz_nqf=4&bhgchg=wf&nqgrfg=bss&pbeeryngbe=1231367691141&punaary=svz_zlfcnpr_ubzrcntr_abgybttrqva%2Psvz_zlfcnpr_aba_HTP%2Psvz_zlfcnpr_havgrq-fgngrf&hey=uggc%3N%2S%2Sjjj.zlfcnpr.pbz%2S&nq_glcr=grkg&rvq=6083027&rn=0&sez=0&tn_ivq=320757904.1231367694&tn_fvq=1231367694&tn_uvq=1758792003&synfu=9.0.115&h_u=768&h_j=1024&h_nu=738&h_nj=1024&h_pq=24&h_gm=-480&h_uvf=2&h_wnin=gehr&h_acyht=7&h_azvzr=22';
+ var str52 = 'uggc://zfacbegny.112.2b7.arg/o/ff/zfacbegnyubzr/1/U.7-cqi-2/f55332979829981?[NDO]&aqu=1&g=7%2S0%2S2009%2014%3N38%3N42%203%20480&af=zfacbegny&cntrAnzr=HF%20UCZFSGJ&t=uggc%3N%2S%2Sjjj.zfa.pbz%2S&f=1024k768&p=24&x=L&oj=994&ou=634&uc=A&{2}&[NDR]';
+ var str53 = 'cnerag puebzr6 fvatyr1 gno fryrpgrq ovaq qbhoyr2 ps';
+ var str54 = 'ZFPhygher=VC=74.125.75.3&VCPhygher=ra-HF&CersreerqPhygher=ra-HF&Pbhagel=IIZ%3Q&SbeprqRkcvengvba=633669357391353591&gvzrMbar=-8&HFEYBP=DKWyLHAiMTH9AwHjWxAcqUx9GJ91oaEunJ4tIzyyqlMQo3IhqUW5D29xMG1IHlMQo3IhqUW5GzSgMG1Iozy0MJDtH3EuqTImWxEgLHAiMTH9BQN3WxkuqTy0qJEyCGZ3YwDkBGVzGT9hM2y0qJEyCF0kZwVhZQH3APMDo3A0LJkQo2EyCGx0ZQDmWyWyM2yiox5uoJH9D0R%3Q';
+ var str55 = 'ZFPhygher=VC=74.125.75.3&VCPhygher=ra-HF&CersreerqPhygher=ra-HF&CersreerqPhygherCraqvat=&Pbhagel=IIZ=&SbeprqRkcvengvba=633669357391353591&gvzrMbar=0&HFEYBP=DKWyLHAiMTH9AwHjWxAcqUx9GJ91oaEunJ4tIzyyqlMQo3IhqUW5D29xMG1IHlMQo3IhqUW5GzSgMG1Iozy0MJDtH3EuqTImWxEgLHAiMTH9BQN3WxkuqTy0qJEyCGZ3YwDkBGVzGT9hM2y0qJEyCF0kZwVhZQH3APMDo3A0LJkQo2EyCGx0ZQDmWyWyM2yiox5uoJH9D0R=';
+ var str56 = 'ne;ng;nh;or;oe;pn;pu;py;pa;qr;qx;rf;sv;se;to;ux;vq;vr;va;vg;wc;xe;zk;zl;ay;ab;am;cu;cy;cg;eh;fr;ft;gu;ge;gj;mn;';
+ var str57 = 'ZP1=I=3&THVQ=6nnpr9q661804s33nnop45nosqp17q85; zu=ZFSG; PHYGHER=RA-HF; SyvtugTebhcVq=97; SyvtugVq=OnfrCntr; ucfie=Z:5|S:5|G:5|R:5|Q:oyh|J:S; ucpyv=J.U|Y.|F.|E.|H.Y|P.|U.; hfucjrn=jp:HFPN0746; ZHVQ=Q783SN9O14054831N4869R51P0SO8886&GHVQ=1';
+ var str58 = 'ZP1=I=3&THVQ=6nnpr9q661804s33nnop45nosqp17q85; zu=ZFSG; PHYGHER=RA-HF; SyvtugTebhcVq=97; SyvtugVq=OnfrCntr; ucfie=Z:5|S:5|G:5|R:5|Q:oyh|J:S; ucpyv=J.U|Y.|F.|E.|H.Y|P.|U.; hfucjrn=jp:HFPN0746; ZHVQ=Q783SN9O14054831N4869R51P0SO8886';
+ var str59 = 'ZP1=I=3&THVQ=6nnpr9q661804s33nnop45nosqp17q85; zu=ZFSG; PHYGHER=RA-HF; SyvtugTebhcVq=97; SyvtugVq=OnfrCntr; ucfie=Z:5|S:5|G:5|R:5|Q:oyh|J:S; ucpyv=J.U|Y.|F.|E.|H.Y|P.|U.; hfucjrn=jp:HFPN0746; ZHVQ=Q783SN9O14054831N4869R51P0SO8886; mvc=m:94043|yn:37.4154|yb:-122.0585|p:HF|ue:1';
+ var str60 = 'ZP1=I=3&THVQ=6nnpr9q661804s33nnop45nosqp17q85; zu=ZFSG; PHYGHER=RA-HF; SyvtugTebhcVq=97; SyvtugVq=OnfrCntr; ucfie=Z:5|S:5|G:5|R:5|Q:oyh|J:S; ucpyv=J.U|Y.|F.|E.|H.Y|P.|U.; hfucjrn=jp:HFPN0746; ZHVQ=Q783SN9O14054831N4869R51P0SO8886; mvc=m:94043|yn:37.4154|yb:-122.0585|p:HF';
+ var str61 = 'uggc://gx2.fgp.f-zfa.pbz/oe/uc/11/ra-hf/pff/v/g.tvs#uggc://gx2.fgo.f-zfa.pbz/v/29/4RQP4969777N048NPS4RRR3PO2S7S.wct';
+ var str62 = 'uggc://gx2.fgp.f-zfa.pbz/oe/uc/11/ra-hf/pff/v/g.tvs#uggc://gx2.fgo.f-zfa.pbz/v/OQ/63NP9O94NS5OQP1249Q9S1ROP7NS3.wct';
+ var str63 = 'zbmvyyn/5.0 (jvaqbjf; h; jvaqbjf ag 5.1; ra-hf) nccyrjroxvg/528.9 (xugzy, yvxr trpxb) puebzr/2.0.157.0 fnsnev/528.9';
+ var s94 = computeInputVariants(str42, 5);
+ var s95 = computeInputVariants(str43, 5);
+ var s96 = computeInputVariants(str44, 5);
+ var s97 = computeInputVariants(str47, 5);
+ var s98 = computeInputVariants(str48, 5);
+ var s99 = computeInputVariants(str49, 5);
+ var s100 = computeInputVariants(str50, 5);
+ var s101 = computeInputVariants(str51, 5);
+ var s102 = computeInputVariants(str52, 5);
+ var s103 = computeInputVariants(str53, 5);
+
+ function runBlock9() {
+ for (var i = 0; i < 5; i++) {
+ s94[i].split(re32);
+ s95[i].split(re32);
+ 'svz_zlfcnpr_hfre-ivrj-pbzzragf,svz_zlfcnpr_havgrq-fgngrf'.split(re20);
+ s96[i].replace(re33, '');
+ 'zrah_arj zrah_arj_gbttyr zrah_gbttyr'.replace(re67, '');
+ 'zrah_byq zrah_byq_gbttyr zrah_gbttyr'.replace(re67, '');
+ re8.exec('102n9o0o9pq60132qn0337rr867p75953502q2s27s2s5r98');
+ re8.exec('144631658.0.10.1231364380');
+ re8.exec('144631658.1231364380.1.1.hgzpfe=(qverpg)|hgzppa=(qverpg)|hgzpzq=(abar)');
+ re8.exec('144631658.3931862196947939300.1231364380.1231364380.1231364380.1');
+ re8.exec('441326q33660');
+ re8.exec('SbeprqRkcvengvba=633669341278771470');
+ re8.exec(str45);
+ re8.exec(str46);
+ re8.exec('AFP_zp_dfctwzssrwh-aowb_80=441326q33660');
+ re8.exec('FrffvbaQQS2=102n9o0o9pq60132qn0337rr867p75953502q2s27s2s5r98');
+ re8.exec('__hgzn=144631658.3931862196947939300.1231364380.1231364380.1231364380.1');
+ re8.exec('__hgzo=144631658.0.10.1231364380');
+ re8.exec('__hgzm=144631658.1231364380.1.1.hgzpfe=(qverpg)|hgzppa=(qverpg)|hgzpzq=(abar)');
+ }
+ for (var i = 0; i < 4; i++) {
+ ' yvfg1'.replace(re14, '');
+ ' yvfg1'.replace(re15, '');
+ ' yvfg2'.replace(re14, '');
+ ' yvfg2'.replace(re15, '');
+ ' frneputebhc1'.replace(re14, '');
+ ' frneputebhc1'.replace(re15, '');
+ s97[i].replace(re68, '');
+ s97[i].replace(re18, '');
+ ''.replace(/&/g, '');
+ ''.replace(re35, '');
+ '(..-{0})(\|(\d+)|)'.replace(re63, '');
+ s98[i].replace(re18, '');
+ '//vzt.jro.qr/vij/FC/${cngu}/${anzr}/${inyhr}?gf=${abj}'.replace(re56, '');
+ '//vzt.jro.qr/vij/FC/tzk_uc/${anzr}/${inyhr}?gf=${abj}'.replace(/(\$\{anzr\})|(\$anzr\b)/g, '');
+ '<fcna pynff="urnq"><o>Jvaqbjf Yvir Ubgznvy</o></fcna><fcna pynff="zft">{1}</fcna>'.replace(re69, '');
+ '<fcna pynff="urnq"><o>{0}</o></fcna><fcna pynff="zft">{1}</fcna>'.replace(re63, '');
+ '<fcna pynff="fvtahc"><n uers=uggc://jjj.ubgznvy.pbz><o>{1}</o></n></fcna>'.replace(re69, '');
+ '<fcna pynff="fvtahc"><n uers={0}><o>{1}</o></n></fcna>'.replace(re63, '');
+ 'Vzntrf'.replace(re15, '');
+ 'ZFA'.replace(re15, '');
+ 'Zncf'.replace(re15, '');
+ 'Zbq-Vasb-Vasb-WninFpevcgUvag'.replace(re39, '');
+ 'Arjf'.replace(re15, '');
+ s99[i].split(re32);
+ s100[i].split(re32);
+ 'Ivqrb'.replace(re15, '');
+ 'Jro'.replace(re15, '');
+ 'n'.replace(re39, '');
+ 'nwnkFgneg'.split(re70);
+ 'nwnkFgbc'.split(re70);
+ 'ovaq'.replace(re14, '');
+ 'ovaq'.replace(re15, '');
+ 'oevatf lbh zber. Zber fcnpr (5TO), zber frphevgl, fgvyy serr.'.replace(re63, '');
+ 'puvyq p1 svefg qrpx'.replace(re14, '');
+ 'puvyq p1 svefg qrpx'.replace(re15, '');
+ 'puvyq p1 svefg qbhoyr2'.replace(re14, '');
+ 'puvyq p1 svefg qbhoyr2'.replace(re15, '');
+ 'puvyq p2 ynfg'.replace(re14, '');
+ 'puvyq p2 ynfg'.replace(re15, '');
+ 'puvyq p2'.replace(re14, '');
+ 'puvyq p2'.replace(re15, '');
+ 'puvyq p3'.replace(re14, '');
+ 'puvyq p3'.replace(re15, '');
+ 'puvyq p4 ynfg'.replace(re14, '');
+ 'puvyq p4 ynfg'.replace(re15, '');
+ 'pbclevtug'.replace(re14, '');
+ 'pbclevtug'.replace(re15, '');
+ 'qZFAZR_1'.replace(re14, '');
+ 'qZFAZR_1'.replace(re15, '');
+ 'qbhoyr2 ps'.replace(re14, '');
+ 'qbhoyr2 ps'.replace(re15, '');
+ 'qbhoyr2'.replace(re14, '');
+ 'qbhoyr2'.replace(re15, '');
+ 'uqy_arj'.replace(re14, '');
+ 'uqy_arj'.replace(re15, '');
+ 'uc_fubccvatobk'.replace(re30, '');
+ 'ugzy%2Rvq'.replace(re29, '');
+ 'ugzy%2Rvq'.replace(re30, '');
+ s101[i].replace(re33, '');
+ 'uggc://wf.hv-cbegny.qr/tzk/ubzr/wf/20080602/cebgbglcr.wf${4}${5}'.replace(re71, '');
+ 'uggc://wf.hv-cbegny.qr/tzk/ubzr/wf/20080602/cebgbglcr.wf${5}'.replace(re72, '');
+ s102[i].replace(re73, '');
+ 'uggc://zfacbegny.112.2b7.arg/o/ff/zfacbegnyubzr/1/U.7-cqi-2/f55332979829981?[NDO]&{1}&{2}&[NDR]'.replace(re69, '');
+ 'vztZFSG'.replace(re14, '');
+ 'vztZFSG'.replace(re15, '');
+ 'zfasbbg1 ps'.replace(re14, '');
+ 'zfasbbg1 ps'.replace(re15, '');
+ s103[i].replace(re14, '');
+ s103[i].replace(re15, '');
+ 'cnerag puebzr6 fvatyr1 gno fryrpgrq ovaq'.replace(re14, '');
+ 'cnerag puebzr6 fvatyr1 gno fryrpgrq ovaq'.replace(re15, '');
+ 'cevznel'.replace(re14, '');
+ 'cevznel'.replace(re15, '');
+ 'erpgnatyr'.replace(re30, '');
+ 'frpbaqnel'.replace(re14, '');
+ 'frpbaqnel'.replace(re15, '');
+ 'haybnq'.split(re70);
+ '{0}{1}1'.replace(re63, '');
+ '|{1}1'.replace(re69, '');
+ /(..-HF)(\|(\d+)|)/i.exec('xb-xe,ra-va,gu-gu');
+ re4.exec('/ZlFcnprNccf/NccPnainf,45000012');
+ re8.exec('144631658.0.10.1231367708');
+ re8.exec('144631658.1231367708.1.1.hgzpfe=(qverpg)|hgzppa=(qverpg)|hgzpzq=(abar)');
+ re8.exec('144631658.2770915348920628700.1231367708.1231367708.1231367708.1');
+ re8.exec('4413235p3660');
+ re8.exec('441327q73660');
+ re8.exec('9995p6rp12rrnr893334ro7nq70o7p64p69rqn844prs1473');
+ re8.exec('SbeprqRkcvengvba=633669350559478880');
+ re8.exec(str54);
+ re8.exec(str55);
+ re8.exec('AFP_zp_dfctwzs-aowb_80=441327q73660');
+ re8.exec('AFP_zp_kkk-aowb_80=4413235p3660');
+ re8.exec('FrffvbaQQS2=9995p6rp12rrnr893334ro7nq70o7p64p69rqn844prs1473');
+ re8.exec('__hgzn=144631658.2770915348920628700.1231367708.1231367708.1231367708.1');
+ re8.exec('__hgzo=144631658.0.10.1231367708');
+ re8.exec('__hgzm=144631658.1231367708.1.1.hgzpfe=(qverpg)|hgzppa=(qverpg)|hgzpzq=(abar)');
+ re34.exec(s99[i]);
+ re34.exec(s100[i]);
+ /ZFVR\s+5[.]01/.exec(s15[i]);
+ /HF(?=;)/i.exec(str56);
+ re74.exec(s97[i]);
+ re28.exec('svefg npgvir svefgNpgvir');
+ re28.exec('ynfg');
+ /\bp:(..)/i.exec('m:94043|yn:37.4154|yb:-122.0585|p:HF');
+ re75.exec(str57);
+ re75.exec(str58);
+ re76.exec(str57);
+ re76.exec(str58);
+ re77.exec(str57);
+ re77.exec(str58);
+ /\bhfucce\s*=\s*([^;]*)/i.exec(str59);
+ re78.exec(str57);
+ re78.exec(str58);
+ /\bjci\s*=\s*([^;]*)/i.exec(str59);
+ re79.exec(str58);
+ re79.exec(str60);
+ re79.exec(str59);
+ /\|p:([a-z]{2})/i.exec('m:94043|yn:37.4154|yb:-122.0585|p:HF|ue:1');
+ re80.exec(s97[i]);
+ re61.exec('cebgbglcr.wf');
+ re68.exec(s97[i]);
+ re81.exec(s97[i]);
+ re82.exec(s97[i]);
+ /^Fubpxjnir Synfu (\d)/.exec(s21[i]);
+ /^Fubpxjnir Synfu (\d+)/.exec(s21[i]);
+ re83.exec('[bowrpg tybony]');
+ re62.exec(s97[i]);
+ re84.exec(str61);
+ re84.exec(str62);
+ /jroxvg/.exec(str63);
+ }
+ }
+ var re85 = /eaq_zbqobkva/;
+ var str64 = '1231365729213';
+ var str65 = '74.125.75.3-1057165600.29978900';
+ var str66 = '74.125.75.3-1057165600.29978900.1231365730214';
+ var str67 = 'Frnepu%20Zvpebfbsg.pbz';
+ var str68 = 'FrffvbaQQS2=8sqq78r9n442851q565599o401385sp3s04r92rnn7o19ssn; ZFPhygher=VC=74.125.75.17&VCPhygher=ra-HF&CersreerqPhygher=ra-HF&CersreerqPhygherCraqvat=&Pbhagel=IIZ=&SbeprqRkcvengvba=633669340386893867&gvzrMbar=0&HFEYBP=DKWyLHAiMTH9AwHjWxAcqUx9GJ91oaEunJ4tIzyyqlMQo3IhqUW5D29xMG1IHlMQo3IhqUW5GzSgMG1Iozy0MJDtH3EuqTImWxEgLHAiMTH9BQN3WxkuqTy0qJEyCGZ3YwDkBGVzGT9hM2y0qJEyCF0kZwVhZQH3APMDo3A0LJkQo2EyCGx0ZQDmWyWyM2yiox5uoJH9D0R=';
+ var str69 = 'FrffvbaQQS2=8sqq78r9n442851q565599o401385sp3s04r92rnn7o19ssn; __hgzm=144631658.1231365779.1.1.hgzpfe=(qverpg)|hgzppa=(qverpg)|hgzpzq=(abar); __hgzn=144631658.1877536177953918500.1231365779.1231365779.1231365779.1; __hgzo=144631658.0.10.1231365779; __hgzp=144631658; ZFPhygher=VC=74.125.75.17&VCPhygher=ra-HF&CersreerqPhygher=ra-HF&Pbhagel=IIZ%3Q&SbeprqRkcvengvba=633669340386893867&gvzrMbar=-8&HFEYBP=DKWyLHAiMTH9AwHjWxAcqUx9GJ91oaEunJ4tIzyyqlMQo3IhqUW5D29xMG1IHlMQo3IhqUW5GzSgMG1Iozy0MJDtH3EuqTImWxEgLHAiMTH9BQN3WxkuqTy0qJEyCGZ3YwDkBGVzGT9hM2y0qJEyCF0kZwVhZQH3APMDo3A0LJkQo2EyCGx0ZQDmWyWyM2yiox5uoJH9D0R%3Q';
+ var str70 = 'I=3%26THVQ=757q3ss871q44o7o805n8113n5p72q52';
+ var str71 = 'I=3&THVQ=757q3ss871q44o7o805n8113n5p72q52';
+ var str72 = 'uggc://tbbtyrnqf.t.qbhoyrpyvpx.arg/cntrnq/nqf?pyvrag=pn-svz_zlfcnpr_zlfcnpr-ubzrcntr_wf&qg=1231365765292&uy=ra&nqfnsr=uvtu&br=hgs8&ahz_nqf=4&bhgchg=wf&nqgrfg=bss&pbeeryngbe=1231365765292&punaary=svz_zlfcnpr_ubzrcntr_abgybttrqva%2Psvz_zlfcnpr_aba_HTP%2Psvz_zlfcnpr_havgrq-fgngrf&hey=uggc%3N%2S%2Sohyyrgvaf.zlfcnpr.pbz%2Svaqrk.psz&nq_glcr=grkg&rvq=6083027&rn=0&sez=0&tn_ivq=1579793869.1231365768&tn_fvq=1231365768&tn_uvq=2056210897&synfu=9.0.115&h_u=768&h_j=1024&h_nu=738&h_nj=1024&h_pq=24&h_gm=-480&h_uvf=2&h_wnin=gehr&h_acyht=7&h_azvzr=22';
+ var str73 = 'frnepu.zvpebfbsg.pbz';
+ var str74 = 'frnepu.zvpebfbsg.pbz/';
+ var str75 = 'ZFPhygher=VC=74.125.75.17&VCPhygher=ra-HF&CersreerqPhygher=ra-HF&Pbhagel=IIZ%3Q&SbeprqRkcvengvba=633669340386893867&gvzrMbar=-8&HFEYBP=DKWyLHAiMTH9AwHjWxAcqUx9GJ91oaEunJ4tIzyyqlMQo3IhqUW5D29xMG1IHlMQo3IhqUW5GzSgMG1Iozy0MJDtH3EuqTImWxEgLHAiMTH9BQN3WxkuqTy0qJEyCGZ3YwDkBGVzGT9hM2y0qJEyCF0kZwVhZQH3APMDo3A0LJkQo2EyCGx0ZQDmWyWyM2yiox5uoJH9D0R%3Q';
+ var str76 = 'ZFPhygher=VC=74.125.75.17&VCPhygher=ra-HF&CersreerqPhygher=ra-HF&CersreerqPhygherCraqvat=&Pbhagel=IIZ=&SbeprqRkcvengvba=633669340386893867&gvzrMbar=0&HFEYBP=DKWyLHAiMTH9AwHjWxAcqUx9GJ91oaEunJ4tIzyyqlMQo3IhqUW5D29xMG1IHlMQo3IhqUW5GzSgMG1Iozy0MJDtH3EuqTImWxEgLHAiMTH9BQN3WxkuqTy0qJEyCGZ3YwDkBGVzGT9hM2y0qJEyCF0kZwVhZQH3APMDo3A0LJkQo2EyCGx0ZQDmWyWyM2yiox5uoJH9D0R=';
+ function runBlock10() {
+ for (var i = 0; i < 3; i++) {
+ '%3Szxg=ra-HF'.replace(re39, '');
+ '-8'.replace(re40, '');
+ '-8'.replace(re10, '');
+ '-8'.replace(re51, '');
+ '-8'.replace(re52, '');
+ '-8'.replace(re53, '');
+ '-8'.replace(re39, '');
+ '-8'.replace(re54, '');
+ '1.5'.replace(re40, '');
+ '1.5'.replace(re10, '');
+ '1.5'.replace(re51, '');
+ '1.5'.replace(re52, '');
+ '1.5'.replace(re53, '');
+ '1.5'.replace(re39, '');
+ '1.5'.replace(re54, '');
+ '1024k768'.replace(re40, '');
+ '1024k768'.replace(re10, '');
+ '1024k768'.replace(re51, '');
+ '1024k768'.replace(re52, '');
+ '1024k768'.replace(re53, '');
+ '1024k768'.replace(re39, '');
+ '1024k768'.replace(re54, '');
+ str64.replace(re40, '');
+ str64.replace(re10, '');
+ str64.replace(re51, '');
+ str64.replace(re52, '');
+ str64.replace(re53, '');
+ str64.replace(re39, '');
+ str64.replace(re54, '');
+ '14'.replace(re40, '');
+ '14'.replace(re10, '');
+ '14'.replace(re51, '');
+ '14'.replace(re52, '');
+ '14'.replace(re53, '');
+ '14'.replace(re39, '');
+ '14'.replace(re54, '');
+ '24'.replace(re40, '');
+ '24'.replace(re10, '');
+ '24'.replace(re51, '');
+ '24'.replace(re52, '');
+ '24'.replace(re53, '');
+ '24'.replace(re39, '');
+ '24'.replace(re54, '');
+ str65.replace(re40, '');
+ str65.replace(re10, '');
+ str65.replace(re51, '');
+ str65.replace(re52, '');
+ str65.replace(re53, '');
+ str65.replace(re39, '');
+ str65.replace(re54, '');
+ str66.replace(re40, '');
+ str66.replace(re10, '');
+ str66.replace(re51, '');
+ str66.replace(re52, '');
+ str66.replace(re53, '');
+ str66.replace(re39, '');
+ str66.replace(re54, '');
+ '9.0'.replace(re40, '');
+ '9.0'.replace(re10, '');
+ '9.0'.replace(re51, '');
+ '9.0'.replace(re52, '');
+ '9.0'.replace(re53, '');
+ '9.0'.replace(re39, '');
+ '9.0'.replace(re54, '');
+ '994k634'.replace(re40, '');
+ '994k634'.replace(re10, '');
+ '994k634'.replace(re51, '');
+ '994k634'.replace(re52, '');
+ '994k634'.replace(re53, '');
+ '994k634'.replace(re39, '');
+ '994k634'.replace(re54, '');
+ '?zxg=ra-HF'.replace(re40, '');
+ '?zxg=ra-HF'.replace(re10, '');
+ '?zxg=ra-HF'.replace(re51, '');
+ '?zxg=ra-HF'.replace(re52, '');
+ '?zxg=ra-HF'.replace(re53, '');
+ '?zxg=ra-HF'.replace(re54, '');
+ 'PAA.pbz'.replace(re25, '');
+ 'PAA.pbz'.replace(re12, '');
+ 'PAA.pbz'.replace(re39, '');
+ 'Qngr & Gvzr'.replace(re25, '');
+ 'Qngr & Gvzr'.replace(re12, '');
+ 'Qngr & Gvzr'.replace(re39, '');
+ 'Frnepu Zvpebfbsg.pbz'.replace(re40, '');
+ 'Frnepu Zvpebfbsg.pbz'.replace(re54, '');
+ str67.replace(re10, '');
+ str67.replace(re51, '');
+ str67.replace(re52, '');
+ str67.replace(re53, '');
+ str67.replace(re39, '');
+ str68.split(re32);
+ str69.split(re32);
+ str70.replace(re52, '');
+ str70.replace(re53, '');
+ str70.replace(re39, '');
+ str71.replace(re40, '');
+ str71.replace(re10, '');
+ str71.replace(re51, '');
+ str71.replace(re54, '');
+ 'Jrngure'.replace(re25, '');
+ 'Jrngure'.replace(re12, '');
+ 'Jrngure'.replace(re39, '');
+ 'LbhGhor'.replace(re25, '');
+ 'LbhGhor'.replace(re12, '');
+ 'LbhGhor'.replace(re39, '');
+ str72.replace(re33, '');
+ 'erzbgr_vsenzr_1'.replace(/^erzbgr_vsenzr_/, '');
+ str73.replace(re40, '');
+ str73.replace(re10, '');
+ str73.replace(re51, '');
+ str73.replace(re52, '');
+ str73.replace(re53, '');
+ str73.replace(re39, '');
+ str73.replace(re54, '');
+ str74.replace(re40, '');
+ str74.replace(re10, '');
+ str74.replace(re51, '');
+ str74.replace(re52, '');
+ str74.replace(re53, '');
+ str74.replace(re39, '');
+ str74.replace(re54, '');
+ 'lhv-h'.replace(/\-/g, '');
+ re9.exec('p');
+ re9.exec('qz p');
+ re9.exec('zbqynory');
+ re9.exec('lhv-h svefg');
+ re8.exec('144631658.0.10.1231365779');
+ re8.exec('144631658.1231365779.1.1.hgzpfe=(qverpg)|hgzppa=(qverpg)|hgzpzq=(abar)');
+ re8.exec('144631658.1877536177953918500.1231365779.1231365779.1231365779.1');
+ re8.exec(str75);
+ re8.exec(str76);
+ re8.exec('__hgzn=144631658.1877536177953918500.1231365779.1231365779.1231365779.1');
+ re8.exec('__hgzo=144631658.0.10.1231365779');
+ re8.exec('__hgzm=144631658.1231365779.1.1.hgzpfe=(qverpg)|hgzppa=(qverpg)|hgzpzq=(abar)');
+ re34.exec(str68);
+ re34.exec(str69);
+ /^$/.exec('');
+ re31.exec('qr');
+ /^znk\d+$/.exec('');
+ /^zva\d+$/.exec('');
+ /^erfgber$/.exec('');
+ re85.exec('zbqobkva zbqobk_abcnqqvat ');
+ re85.exec('zbqgvgyr');
+ re85.exec('eaq_zbqobkva ');
+ re85.exec('eaq_zbqgvgyr ');
+ /frpgvba\d+_pbagragf/.exec('obggbz_ani');
+ }
+ }
+ var re86 = /;\s*/;
+ var re87 = /(\$\{inyhr\})|(\$inyhr\b)/g;
+ var re88 = /(\$\{abj\})|(\$abj\b)/g;
+ var re89 = /\s+$/;
+ var re90 = /^\s+/;
+ var re91 = /(\\\"|\x00-|\x1f|\x7f-|\x9f|\u00ad|\u0600-|\u0604|\u070f|\u17b4|\u17b5|\u200c-|\u200f|\u2028-|\u202f|\u2060-|\u206f|\ufeff|\ufff0-|\uffff)/g;
+ var re92 = /^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/;
+ var re93 = /^([:.#]*)((?:[\w\u0128-\uffff*_-]|\\.)+)/;
+ var re94 = /^(\[) *@?([\w-]+) *([!*$^~=]*) *('?"?)(.*?)\4 *\]/;
+ var str77 = '#fubhgobk .pybfr';
+ var str78 = 'FrffvbaQQS2=102n9o0o9pq60132qn0337rr867p75953502q2s27s2s5r98; ZFPhygher=VC=74.125.75.1&VCPhygher=ra-HF&CersreerqPhygher=ra-HF&CersreerqPhygherCraqvat=&Pbhagel=IIZ=&SbeprqRkcvengvba=633669341278771470&gvzrMbar=0&HFEYBP=DKWyLHAiMTH9AwHjWxAcqUx9GJ91oaEunJ4tIzyyqlMQo3IhqUW5D29xMG1IHlMQo3IhqUW5GzSgMG1Iozy0MJDtH3EuqTImWxEgLHAiMTH9BQN3WxkuqTy0qJEyCGZ3YwDkBGVzGT9hM2y0qJEyCF0kZwVhZQH3APMDo3A0LJkQo2EyCGx0ZQDmWyWyM2yiox5uoJH9D0R=; AFP_zp_dfctwzssrwh-aowb_80=441326q33660';
+ var str79 = 'FrffvbaQQS2=102n9o0o9pq60132qn0337rr867p75953502q2s27s2s5r98; AFP_zp_dfctwzssrwh-aowb_80=441326q33660; __hgzm=144631658.1231365869.1.1.hgzpfe=(qverpg)|hgzppa=(qverpg)|hgzpzq=(abar); __hgzn=144631658.1670816052019209000.1231365869.1231365869.1231365869.1; __hgzo=144631658.0.10.1231365869; __hgzp=144631658; ZFPhygher=VC=74.125.75.1&VCPhygher=ra-HF&CersreerqPhygher=ra-HF&Pbhagel=IIZ%3Q&SbeprqRkcvengvba=633669341278771470&gvzrMbar=-8&HFEYBP=DKWyLHAiMTH9AwHjWxAcqUx9GJ91oaEunJ4tIzyyqlMQo3IhqUW5D29xMG1IHlMQo3IhqUW5GzSgMG1Iozy0MJDtH3EuqTImWxEgLHAiMTH9BQN3WxkuqTy0qJEyCGZ3YwDkBGVzGT9hM2y0qJEyCF0kZwVhZQH3APMDo3A0LJkQo2EyCGx0ZQDmWyWyM2yiox5uoJH9D0R%3Q';
+ var str80 = 'FrffvbaQQS2=9995p6rp12rrnr893334ro7nq70o7p64p69rqn844prs1473; ZFPhygher=VC=74.125.75.1&VCPhygher=ra-HF&CersreerqPhygher=ra-HF&CersreerqPhygherCraqvat=&Pbhagel=IIZ=&SbeprqRkcvengvba=633669350559478880&gvzrMbar=0&HFEYBP=DKWyLHAiMTH9AwHjWxAcqUx9GJ91oaEunJ4tIzyyqlMQo3IhqUW5D29xMG1IHlMQo3IhqUW5GzSgMG1Iozy0MJDtH3EuqTImWxEgLHAiMTH9BQN3WxkuqTy0qJEyCGZ3YwDkBGVzGT9hM2y0qJEyCF0kZwVhZQH3APMDo3A0LJkQo2EyCGx0ZQDmWyWyM2yiox5uoJH9D0R=; AFP_zp_dfctwzs-aowb_80=441327q73660';
+ var str81 = 'FrffvbaQQS2=9995p6rp12rrnr893334ro7nq70o7p64p69rqn844prs1473; AFP_zp_dfctwzs-aowb_80=441327q73660; __hgzm=144631658.1231367054.1.1.hgzpfe=(qverpg)|hgzppa=(qverpg)|hgzpzq=(abar); __hgzn=144631658.1796080716621419500.1231367054.1231367054.1231367054.1; __hgzo=144631658.0.10.1231367054; __hgzp=144631658; ZFPhygher=VC=74.125.75.1&VCPhygher=ra-HF&CersreerqPhygher=ra-HF&Pbhagel=IIZ%3Q&SbeprqRkcvengvba=633669350559478880&gvzrMbar=-8&HFEYBP=DKWyLHAiMTH9AwHjWxAcqUx9GJ91oaEunJ4tIzyyqlMQo3IhqUW5D29xMG1IHlMQo3IhqUW5GzSgMG1Iozy0MJDtH3EuqTImWxEgLHAiMTH9BQN3WxkuqTy0qJEyCGZ3YwDkBGVzGT9hM2y0qJEyCF0kZwVhZQH3APMDo3A0LJkQo2EyCGx0ZQDmWyWyM2yiox5uoJH9D0R%3Q';
+ var str82 = '[glcr=fhozvg]';
+ var str83 = 'n.svryqOga,n.svryqOgaPnapry';
+ var str84 = 'n.svryqOgaPnapry';
+ var str85 = 'oyvpxchaxg';
+ var str86 = 'qvi.bow-nppbeqvba qg';
+ var str87 = 'uggc://tbbtyrnqf.t.qbhoyrpyvpx.arg/cntrnq/nqf?pyvrag=pn-svz_zlfcnpr_nccf_wf&qg=1231367052227&uy=ra&nqfnsr=uvtu&br=hgs8&ahz_nqf=4&bhgchg=wf&nqgrfg=bss&pbeeryngbe=1231367052227&punaary=svz_zlfcnpr_nccf-pnainf%2Psvz_zlfcnpr_havgrq-fgngrf&hey=uggc%3N%2S%2Scebsvyr.zlfcnpr.pbz%2SZbqhyrf%2SNccyvpngvbaf%2SCntrf%2SPnainf.nfck&nq_glcr=grkg&rvq=6083027&rn=0&sez=1&tn_ivq=716357910.1231367056&tn_fvq=1231367056&tn_uvq=1387206491&synfu=9.0.115&h_u=768&h_j=1024&h_nu=738&h_nj=1024&h_pq=24&h_gm=-480&h_uvf=2&h_wnin=gehr&h_acyht=7&h_azvzr=22';
+ var str88 = 'uggc://tbbtyrnqf.t.qbhoyrpyvpx.arg/cntrnq/nqf?pyvrag=pn-svz_zlfcnpr_zlfcnpr-ubzrcntr_wf&qg=1231365851658&uy=ra&nqfnsr=uvtu&br=hgs8&ahz_nqf=4&bhgchg=wf&nqgrfg=bss&pbeeryngbe=1231365851658&punaary=svz_zlfcnpr_ubzrcntr_abgybttrqva%2Psvz_zlfcnpr_aba_HTP%2Psvz_zlfcnpr_havgrq-fgngrf&hey=uggc%3N%2S%2Scebsvyrrqvg.zlfcnpr.pbz%2Svaqrk.psz&nq_glcr=grkg&rvq=6083027&rn=0&sez=0&tn_ivq=1979828129.1231365855&tn_fvq=1231365855&tn_uvq=2085229649&synfu=9.0.115&h_u=768&h_j=1024&h_nu=738&h_nj=1024&h_pq=24&h_gm=-480&h_uvf=2&h_wnin=gehr&h_acyht=7&h_azvzr=22';
+ var str89 = 'uggc://zfacbegny.112.2b7.arg/o/ff/zfacbegnyubzr/1/U.7-cqi-2/f55023338617756?[NDO]&aqu=1&g=7%2S0%2S2009%2014%3N12%3N47%203%20480&af=zfacbegny&cntrAnzr=HF%20UCZFSGJ&t=uggc%3N%2S%2Sjjj.zfa.pbz%2S&f=0k0&p=43835816&x=A&oj=994&ou=634&uc=A&{2}&[NDR]';
+ var str90 = 'zrgn[anzr=nwnkHey]';
+ var str91 = 'anpuevpugra';
+ var str92 = 'b oS={\'oT\':1.1};x $8n(B){z(B!=o9)};x $S(B){O(!$8n(B))z A;O(B.4L)z\'T\';b S=7t B;O(S==\'2P\'&&B.p4){23(B.7f){12 1:z\'T\';12 3:z/\S/.2g(B.8M)?\'ox\':\'oh\'}}O(S==\'2P\'||S==\'x\'){23(B.nE){12 2V:z\'1O\';12 7I:z\'5a\';12 18:z\'4B\'}O(7t B.I==\'4F\'){O(B.3u)z\'pG\';O(B.8e)z\'1p\'}}z S};x $2p(){b 4E={};Z(b v=0;v<1p.I;v++){Z(b X 1o 1p[v]){b nc=1p[v][X];b 6E=4E[X];O(6E&&$S(nc)==\'2P\'&&$S(6E)==\'2P\')4E[X]=$2p(6E,nc);17 4E[X]=nc}}z 4E};b $E=7p.E=x(){b 1d=1p;O(!1d[1])1d=[p,1d[0]];Z(b X 1o 1d[1])1d[0][X]=1d[1][X];z 1d[0]};b $4D=7p.pJ=x(){Z(b v=0,y=1p.I;v<y;v++){1p[v].E=x(1J){Z(b 1I 1o 1J){O(!p.1Y[1I])p.1Y[1I]=1J[1I];O(!p[1I])p[1I]=$4D.6C(1I)}}}};$4D.6C=x(1I){z x(L){z p.1Y[1I].3H(L,2V.1Y.nV.1F(1p,1))}};$4D(7F,2V,6J,nb);b 3l=x(B){B=B||{};B.E=$E;z B};b pK=Y 3l(H);b pZ=Y 3l(C);C.6f=C.35(\'6f\')[0];x $2O(B){z!!(B||B===0)};x $5S(B,n8){z $8n(B)?B:n8};x $7K(3c,1m){z 1q.na(1q.7K()*(1m-3c+1)+3c)};x $3N(){z Y 97().os()};x $4M(1U){pv(1U);pa(1U);z 1S};H.43=!!(C.5Z);O(H.nB)H.31=H[H.7q?\'py\':\'nL\']=1r;17 O(C.9N&&!C.om&&!oy.oZ)H.pF=H.4Z=H[H.43?\'pt\':\'65\']=1r;17 O(C.po!=1S)H.7J=1r;O(7t 5B==\'o9\'){b 5B=x(){};O(H.4Z)C.nd("pW");5B.1Y=(H.4Z)?H["[[oN.1Y]]"]:{}}5B.1Y.4L=1r;O(H.nL)5s{C.oX("pp",A,1r)}4K(r){};b 18=x(1X){b 63=x(){z(1p[0]!==1S&&p.1w&&$S(p.1w)==\'x\')?p.1w.3H(p,1p):p};$E(63,p);63.1Y=1X;63.nE=18;z 63};18.1z=x(){};18.1Y={E:x(1X){b 7x=Y p(1S);Z(b X 1o 1X){b nC=7x[X];7x[X]=18.nY(nC,1X[X])}z Y 18(7x)},3d:x(){Z(b v=0,y=1p.I;v<y;v++)$E(p.1Y,1p[v])}};18.nY=x(2b,2n){O(2b&&2b!=2n){b S=$S(2n);O(S!=$S(2b))z 2n;23(S){12\'x\':b 7R=x(){p.1e=1p.8e.1e;z 2n.3H(p,1p)};7R.1e=2b;z 7R;12\'2P\':z $2p(2b,2n)}}z 2n};b 8o=Y 18({oQ:x(J){p.4w=p.4w||[];p.4w.1x(J);z p},7g:x(){O(p.4w&&p.4w.I)p.4w.9J().2x(10,p)},oP:x(){p.4w=[]}});b 2d=Y 18({1V:x(S,J){O(J!=18.1z){p.$19=p.$19||{};p.$19[S]=p.$19[S]||[];p.$19[S].5j(J)}z p},1v:x(S,1d,2x){O(p.$19&&p.$19[S]){p.$19[S].1b(x(J){J.3n({\'L\':p,\'2x\':2x,\'1p\':1d})()},p)}z p},3M:x(S,J){O(p.$19&&p.$19[S])p.$19[S].2U(J);z p}});b 4v=Y 18({2H:x(){p.P=$2p.3H(1S,[p.P].E(1p));O(!p.1V)z p;Z(b 3O 1o p.P){O($S(p.P[3O]==\'x\')&&3O.2g(/^5P[N-M]/))p.1V(3O,p.P[3O])}z p}});2V.E({7y:x(J,L){Z(b v=0,w=p.I;v<w;v++)J.1F(L,p[v],v,p)},3s:x(J,L){b 54=[];Z(b v=0,w=p.I;v<w;v++){O(J.1F(L,p[v],v,p))54.1x(p[v])}z 54},2X:x(J,L){b 54=[];Z(b v=0,w=p.I;v<w;v++)54[v]=J.1F(L,p[v],v,p);z 54},4i:x(J,L){Z(b v=0,w=p.I;v<w;v++){O(!J.1F(L,p[v],v,p))z A}z 1r},ob:x(J,L){Z(b v=0,w=p.I;v<w;v++){O(J.1F(L,p[v],v,p))z 1r}z A},3F:x(3u,15){b 3A=p.I;Z(b v=(15<0)?1q.1m(0,3A+15):15||0;v<3A;v++){O(p[v]===3u)z v}z-1},8z:x(1u,I){1u=1u||0;O(1u<0)1u=p.I+1u;I=I||(p.I-1u);b 89=[];Z(b v=0;v<I;v++)89[v]=p[1u++];z 89},2U:x(3u){b v=0;b 3A=p.I;6L(v<3A){O(p[v]===3u){p.6l(v,1);3A--}17{v++}}z p},1y:x(3u,15){z p.3F(3u,15)!=-1},oz:x(1C){b B={},I=1q.3c(p.I,1C.I);Z(b v=0;v<I;v++)B[1C[v]]=p[v];z B},E:x(1O){Z(b v=0,w=1O.I;v<w;v++)p.1x(1O[v]);z p},2p:x(1O){Z(b v=0,y=1O.I;v<y;v++)p.5j(1O[v]);z p},5j:x(3u){O(!p.1y(3u))p.1x(3u);z p},oc:x(){z p[$7K(0,p.I-1)]||A},7L:x(){z p[p.I-1]||A}});2V.1Y.1b=2V.1Y.7y;2V.1Y.2g=2V.1Y.1y;x $N(1O){z 2V.8z(1O)};x $1b(3J,J,L){O(3J&&7t 3J.I==\'4F\'&&$S(3J)!=\'2P\')2V.7y(3J,J,L);17 Z(b 1j 1o 3J)J.1F(L||3J,3J[1j],1j)};6J.E({2g:x(6b,2F){z(($S(6b)==\'2R\')?Y 7I(6b,2F):6b).2g(p)},3p:x(){z 5K(p,10)},o4:x(){z 69(p)},7A:x(){z p.3y(/-\D/t,x(2G){z 2G.7G(1).nW()})},9b:x(){z p.3y(/\w[N-M]/t,x(2G){z(2G.7G(0)+\'-\'+2G.7G(1).5O())})},8V:x(){z p.3y(/\b[n-m]/t,x(2G){z 2G.nW()})},5L:x(){z p.3y(/^\s+|\s+$/t,\'\')},7j:x(){z p.3y(/\s{2,}/t,\' \').5L()},5V:x(1O){b 1i=p.2G(/\d{1,3}/t);z(1i)?1i.5V(1O):A},5U:x(1O){b 3P=p.2G(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/);z(3P)?3P.nV(1).5U(1O):A},1y:x(2R,f){z(f)?(f+p+f).3F(f+2R+f)>-1:p.3F(2R)>-1},nX:x(){z p.3y(/([.*+?^${}()|[\]\/\\])/t,\'\\$1\')}});2V.E({5V:x(1O){O(p.I<3)z A;O(p.I==4&&p[3]==0&&!1O)z\'p5\';b 3P=[];Z(b v=0;v<3;v++){b 52=(p[v]-0).4h(16);3P.1x((52.I==1)?\'0\'+52:52)}z 1O?3P:\'#\'+3P.2u(\'\')},5U:x(1O){O(p.I!=3)z A;b 1i=[];Z(b v=0;v<3;v++){1i.1x(5K((p[v].I==1)?p[v]+p[v]:p[v],16))}z 1O?1i:\'1i(\'+1i.2u(\',\')+\')\'}});7F.E({3n:x(P){b J=p;P=$2p({\'L\':J,\'V\':A,\'1p\':1S,\'2x\':A,\'4s\':A,\'6W\':A},P);O($2O(P.1p)&&$S(P.1p)!=\'1O\')P.1p=[P.1p];z x(V){b 1d;O(P.V){V=V||H.V;1d=[(P.V===1r)?V:Y P.V(V)];O(P.1p)1d.E(P.1p)}17 1d=P.1p||1p;b 3C=x(){z J.3H($5S(P';
+ var str93 = 'hagreunyghat';
+ var str94 = 'ZFPhygher=VC=74.125.75.1&VCPhygher=ra-HF&CersreerqPhygher=ra-HF&Pbhagel=IIZ%3Q&SbeprqRkcvengvba=633669341278771470&gvzrMbar=-8&HFEYBP=DKWyLHAiMTH9AwHjWxAcqUx9GJ91oaEunJ4tIzyyqlMQo3IhqUW5D29xMG1IHlMQo3IhqUW5GzSgMG1Iozy0MJDtH3EuqTImWxEgLHAiMTH9BQN3WxkuqTy0qJEyCGZ3YwDkBGVzGT9hM2y0qJEyCF0kZwVhZQH3APMDo3A0LJkQo2EyCGx0ZQDmWyWyM2yiox5uoJH9D0R%3Q';
+ var str95 = 'ZFPhygher=VC=74.125.75.1&VCPhygher=ra-HF&CersreerqPhygher=ra-HF&Pbhagel=IIZ%3Q&SbeprqRkcvengvba=633669350559478880&gvzrMbar=-8&HFEYBP=DKWyLHAiMTH9AwHjWxAcqUx9GJ91oaEunJ4tIzyyqlMQo3IhqUW5D29xMG1IHlMQo3IhqUW5GzSgMG1Iozy0MJDtH3EuqTImWxEgLHAiMTH9BQN3WxkuqTy0qJEyCGZ3YwDkBGVzGT9hM2y0qJEyCF0kZwVhZQH3APMDo3A0LJkQo2EyCGx0ZQDmWyWyM2yiox5uoJH9D0R%3Q';
+ var str96 = 'ZFPhygher=VC=74.125.75.1&VCPhygher=ra-HF&CersreerqPhygher=ra-HF&CersreerqPhygherCraqvat=&Pbhagel=IIZ=&SbeprqRkcvengvba=633669341278771470&gvzrMbar=0&HFEYBP=DKWyLHAiMTH9AwHjWxAcqUx9GJ91oaEunJ4tIzyyqlMQo3IhqUW5D29xMG1IHlMQo3IhqUW5GzSgMG1Iozy0MJDtH3EuqTImWxEgLHAiMTH9BQN3WxkuqTy0qJEyCGZ3YwDkBGVzGT9hM2y0qJEyCF0kZwVhZQH3APMDo3A0LJkQo2EyCGx0ZQDmWyWyM2yiox5uoJH9D0R=';
+ var str97 = 'ZFPhygher=VC=74.125.75.1&VCPhygher=ra-HF&CersreerqPhygher=ra-HF&CersreerqPhygherCraqvat=&Pbhagel=IIZ=&SbeprqRkcvengvba=633669350559478880&gvzrMbar=0&HFEYBP=DKWyLHAiMTH9AwHjWxAcqUx9GJ91oaEunJ4tIzyyqlMQo3IhqUW5D29xMG1IHlMQo3IhqUW5GzSgMG1Iozy0MJDtH3EuqTImWxEgLHAiMTH9BQN3WxkuqTy0qJEyCGZ3YwDkBGVzGT9hM2y0qJEyCF0kZwVhZQH3APMDo3A0LJkQo2EyCGx0ZQDmWyWyM2yiox5uoJH9D0R=';
+ var str98 = 'shapgvba (){Cuk.Nccyvpngvba.Frghc.Pber();Cuk.Nccyvpngvba.Frghc.Nwnk();Cuk.Nccyvpngvba.Frghc.Synfu();Cuk.Nccyvpngvba.Frghc.Zbqhyrf()}';
+ function runBlock11() {
+ for (var i = 0; i < 2; i++) {
+ ' .pybfr'.replace(re18, '');
+ ' n.svryqOgaPnapry'.replace(re18, '');
+ ' qg'.replace(re18, '');
+ str77.replace(re68, '');
+ str77.replace(re18, '');
+ ''.replace(re39, '');
+ ''.replace(/^/, '');
+ ''.split(re86);
+ '*'.replace(re39, '');
+ '*'.replace(re68, '');
+ '*'.replace(re18, '');
+ '.pybfr'.replace(re68, '');
+ '.pybfr'.replace(re18, '');
+ '//vzt.jro.qr/vij/FC/tzk_uc/fperra/${inyhr}?gf=${abj}'.replace(re87, '');
+ '//vzt.jro.qr/vij/FC/tzk_uc/fperra/1024?gf=${abj}'.replace(re88, '');
+ '//vzt.jro.qr/vij/FC/tzk_uc/jvafvmr/${inyhr}?gf=${abj}'.replace(re87, '');
+ '//vzt.jro.qr/vij/FC/tzk_uc/jvafvmr/992/608?gf=${abj}'.replace(re88, '');
+ '300k120'.replace(re30, '');
+ '300k250'.replace(re30, '');
+ '310k120'.replace(re30, '');
+ '310k170'.replace(re30, '');
+ '310k250'.replace(re30, '');
+ '9.0 e115'.replace(/^.*\.(.*)\s.*$/, '');
+ 'Nppbeqvba'.replace(re2, '');
+ 'Nxghryy\x0a'.replace(re89, '');
+ 'Nxghryy\x0a'.replace(re90, '');
+ 'Nccyvpngvba'.replace(re2, '');
+ 'Oyvpxchaxg\x0a'.replace(re89, '');
+ 'Oyvpxchaxg\x0a'.replace(re90, '');
+ 'Svanamra\x0a'.replace(re89, '');
+ 'Svanamra\x0a'.replace(re90, '');
+ 'Tnzrf\x0a'.replace(re89, '');
+ 'Tnzrf\x0a'.replace(re90, '');
+ 'Ubebfxbc\x0a'.replace(re89, '');
+ 'Ubebfxbc\x0a'.replace(re90, '');
+ 'Xvab\x0a'.replace(re89, '');
+ 'Xvab\x0a'.replace(re90, '');
+ 'Zbqhyrf'.replace(re2, '');
+ 'Zhfvx\x0a'.replace(re89, '');
+ 'Zhfvx\x0a'.replace(re90, '');
+ 'Anpuevpugra\x0a'.replace(re89, '');
+ 'Anpuevpugra\x0a'.replace(re90, '');
+ 'Cuk'.replace(re2, '');
+ 'ErdhrfgSvavfu'.split(re70);
+ 'ErdhrfgSvavfu.NWNK.Cuk'.split(re70);
+ 'Ebhgr\x0a'.replace(re89, '');
+ 'Ebhgr\x0a'.replace(re90, '');
+ str78.split(re32);
+ str79.split(re32);
+ str80.split(re32);
+ str81.split(re32);
+ 'Fcbeg\x0a'.replace(re89, '');
+ 'Fcbeg\x0a'.replace(re90, '');
+ 'GI-Fcbg\x0a'.replace(re89, '');
+ 'GI-Fcbg\x0a'.replace(re90, '');
+ 'Gbhe\x0a'.replace(re89, '');
+ 'Gbhe\x0a'.replace(re90, '');
+ 'Hagreunyghat\x0a'.replace(re89, '');
+ 'Hagreunyghat\x0a'.replace(re90, '');
+ 'Ivqrb\x0a'.replace(re89, '');
+ 'Ivqrb\x0a'.replace(re90, '');
+ 'Jrggre\x0a'.replace(re89, '');
+ 'Jrggre\x0a'.replace(re90, '');
+ str82.replace(re68, '');
+ str82.replace(re18, '');
+ str83.replace(re68, '');
+ str83.replace(re18, '');
+ str84.replace(re68, '');
+ str84.replace(re18, '');
+ 'nqiFreivprObk'.replace(re30, '');
+ 'nqiFubccvatObk'.replace(re30, '');
+ 'nwnk'.replace(re39, '');
+ 'nxghryy'.replace(re40, '');
+ 'nxghryy'.replace(re41, '');
+ 'nxghryy'.replace(re42, '');
+ 'nxghryy'.replace(re43, '');
+ 'nxghryy'.replace(re44, '');
+ 'nxghryy'.replace(re45, '');
+ 'nxghryy'.replace(re46, '');
+ 'nxghryy'.replace(re47, '');
+ 'nxghryy'.replace(re48, '');
+ str85.replace(re40, '');
+ str85.replace(re41, '');
+ str85.replace(re42, '');
+ str85.replace(re43, '');
+ str85.replace(re44, '');
+ str85.replace(re45, '');
+ str85.replace(re46, '');
+ str85.replace(re47, '');
+ str85.replace(re48, '');
+ 'pngrtbel'.replace(re29, '');
+ 'pngrtbel'.replace(re30, '');
+ 'pybfr'.replace(re39, '');
+ 'qvi'.replace(re39, '');
+ str86.replace(re68, '');
+ str86.replace(re18, '');
+ 'qg'.replace(re39, '');
+ 'qg'.replace(re68, '');
+ 'qg'.replace(re18, '');
+ 'rzorq'.replace(re39, '');
+ 'rzorq'.replace(re68, '');
+ 'rzorq'.replace(re18, '');
+ 'svryqOga'.replace(re39, '');
+ 'svryqOgaPnapry'.replace(re39, '');
+ 'svz_zlfcnpr_nccf-pnainf,svz_zlfcnpr_havgrq-fgngrf'.split(re20);
+ 'svanamra'.replace(re40, '');
+ 'svanamra'.replace(re41, '');
+ 'svanamra'.replace(re42, '');
+ 'svanamra'.replace(re43, '');
+ 'svanamra'.replace(re44, '');
+ 'svanamra'.replace(re45, '');
+ 'svanamra'.replace(re46, '');
+ 'svanamra'.replace(re47, '');
+ 'svanamra'.replace(re48, '');
+ 'sbphf'.split(re70);
+ 'sbphf.gno sbphfva.gno'.split(re70);
+ 'sbphfva'.split(re70);
+ 'sbez'.replace(re39, '');
+ 'sbez.nwnk'.replace(re68, '');
+ 'sbez.nwnk'.replace(re18, '');
+ 'tnzrf'.replace(re40, '');
+ 'tnzrf'.replace(re41, '');
+ 'tnzrf'.replace(re42, '');
+ 'tnzrf'.replace(re43, '');
+ 'tnzrf'.replace(re44, '');
+ 'tnzrf'.replace(re45, '');
+ 'tnzrf'.replace(re46, '');
+ 'tnzrf'.replace(re47, '');
+ 'tnzrf'.replace(re48, '');
+ 'ubzrcntr'.replace(re30, '');
+ 'ubebfxbc'.replace(re40, '');
+ 'ubebfxbc'.replace(re41, '');
+ 'ubebfxbc'.replace(re42, '');
+ 'ubebfxbc'.replace(re43, '');
+ 'ubebfxbc'.replace(re44, '');
+ 'ubebfxbc'.replace(re45, '');
+ 'ubebfxbc'.replace(re46, '');
+ 'ubebfxbc'.replace(re47, '');
+ 'ubebfxbc'.replace(re48, '');
+ 'uc_cebzbobk_ugzy%2Puc_cebzbobk_vzt'.replace(re30, '');
+ 'uc_erpgnatyr'.replace(re30, '');
+ str87.replace(re33, '');
+ str88.replace(re33, '');
+ 'uggc://wf.hv-cbegny.qr/tzk/ubzr/wf/20080602/onfr.wf${4}${5}'.replace(re71, '');
+ 'uggc://wf.hv-cbegny.qr/tzk/ubzr/wf/20080602/onfr.wf${5}'.replace(re72, '');
+ 'uggc://wf.hv-cbegny.qr/tzk/ubzr/wf/20080602/qlaYvo.wf${4}${5}'.replace(re71, '');
+ 'uggc://wf.hv-cbegny.qr/tzk/ubzr/wf/20080602/qlaYvo.wf${5}'.replace(re72, '');
+ 'uggc://wf.hv-cbegny.qr/tzk/ubzr/wf/20080602/rssrpgYvo.wf${4}${5}'.replace(re71, '');
+ 'uggc://wf.hv-cbegny.qr/tzk/ubzr/wf/20080602/rssrpgYvo.wf${5}'.replace(re72, '');
+ str89.replace(re73, '');
+ 'uggc://zfacbegny.112.2b7.arg/o/ff/zfacbegnyubzr/1/U.7-cqi-2/f55023338617756?[NDO]&{1}&{2}&[NDR]'.replace(re69, '');
+ str6.replace(re23, '');
+ 'xvab'.replace(re40, '');
+ 'xvab'.replace(re41, '');
+ 'xvab'.replace(re42, '');
+ 'xvab'.replace(re43, '');
+ 'xvab'.replace(re44, '');
+ 'xvab'.replace(re45, '');
+ 'xvab'.replace(re46, '');
+ 'xvab'.replace(re47, '');
+ 'xvab'.replace(re48, '');
+ 'ybnq'.split(re70);
+ 'zrqvnzbqgno lhv-anifrg lhv-anifrg-gbc'.replace(re18, '');
+ 'zrgn'.replace(re39, '');
+ str90.replace(re68, '');
+ str90.replace(re18, '');
+ 'zbhfrzbir'.split(re70);
+ 'zbhfrzbir.gno'.split(re70);
+ str63.replace(/^.*jroxvg\/(\d+(\.\d+)?).*$/, '');
+ 'zhfvx'.replace(re40, '');
+ 'zhfvx'.replace(re41, '');
+ 'zhfvx'.replace(re42, '');
+ 'zhfvx'.replace(re43, '');
+ 'zhfvx'.replace(re44, '');
+ 'zhfvx'.replace(re45, '');
+ 'zhfvx'.replace(re46, '');
+ 'zhfvx'.replace(re47, '');
+ 'zhfvx'.replace(re48, '');
+ 'zlfcnpr_nccf_pnainf'.replace(re52, '');
+ str91.replace(re40, '');
+ str91.replace(re41, '');
+ str91.replace(re42, '');
+ str91.replace(re43, '');
+ str91.replace(re44, '');
+ str91.replace(re45, '');
+ str91.replace(re46, '');
+ str91.replace(re47, '');
+ str91.replace(re48, '');
+ 'anzr'.replace(re39, '');
+ str92.replace(/\b\w+\b/g, '');
+ 'bow-nppbeqvba'.replace(re39, '');
+ 'bowrpg'.replace(re39, '');
+ 'bowrpg'.replace(re68, '');
+ 'bowrpg'.replace(re18, '');
+ 'cnenzf%2Rfglyrf'.replace(re29, '');
+ 'cnenzf%2Rfglyrf'.replace(re30, '');
+ 'cbchc'.replace(re30, '');
+ 'ebhgr'.replace(re40, '');
+ 'ebhgr'.replace(re41, '');
+ 'ebhgr'.replace(re42, '');
+ 'ebhgr'.replace(re43, '');
+ 'ebhgr'.replace(re44, '');
+ 'ebhgr'.replace(re45, '');
+ 'ebhgr'.replace(re46, '');
+ 'ebhgr'.replace(re47, '');
+ 'ebhgr'.replace(re48, '');
+ 'freivprobk_uc'.replace(re30, '');
+ 'fubccvatobk_uc'.replace(re30, '');
+ 'fubhgobk'.replace(re39, '');
+ 'fcbeg'.replace(re40, '');
+ 'fcbeg'.replace(re41, '');
+ 'fcbeg'.replace(re42, '');
+ 'fcbeg'.replace(re43, '');
+ 'fcbeg'.replace(re44, '');
+ 'fcbeg'.replace(re45, '');
+ 'fcbeg'.replace(re46, '');
+ 'fcbeg'.replace(re47, '');
+ 'fcbeg'.replace(re48, '');
+ 'gbhe'.replace(re40, '');
+ 'gbhe'.replace(re41, '');
+ 'gbhe'.replace(re42, '');
+ 'gbhe'.replace(re43, '');
+ 'gbhe'.replace(re44, '');
+ 'gbhe'.replace(re45, '');
+ 'gbhe'.replace(re46, '');
+ 'gbhe'.replace(re47, '');
+ 'gbhe'.replace(re48, '');
+ 'gi-fcbg'.replace(re40, '');
+ 'gi-fcbg'.replace(re41, '');
+ 'gi-fcbg'.replace(re42, '');
+ 'gi-fcbg'.replace(re43, '');
+ 'gi-fcbg'.replace(re44, '');
+ 'gi-fcbg'.replace(re45, '');
+ 'gi-fcbg'.replace(re46, '');
+ 'gi-fcbg'.replace(re47, '');
+ 'gi-fcbg'.replace(re48, '');
+ 'glcr'.replace(re39, '');
+ 'haqrsvarq'.replace(/\//g, '');
+ str93.replace(re40, '');
+ str93.replace(re41, '');
+ str93.replace(re42, '');
+ str93.replace(re43, '');
+ str93.replace(re44, '');
+ str93.replace(re45, '');
+ str93.replace(re46, '');
+ str93.replace(re47, '');
+ str93.replace(re48, '');
+ 'ivqrb'.replace(re40, '');
+ 'ivqrb'.replace(re41, '');
+ 'ivqrb'.replace(re42, '');
+ 'ivqrb'.replace(re43, '');
+ 'ivqrb'.replace(re44, '');
+ 'ivqrb'.replace(re45, '');
+ 'ivqrb'.replace(re46, '');
+ 'ivqrb'.replace(re47, '');
+ 'ivqrb'.replace(re48, '');
+ 'ivfvgf=1'.split(re86);
+ 'jrggre'.replace(re40, '');
+ 'jrggre'.replace(re41, '');
+ 'jrggre'.replace(re42, '');
+ 'jrggre'.replace(re43, '');
+ 'jrggre'.replace(re44, '');
+ 'jrggre'.replace(re45, '');
+ 'jrggre'.replace(re46, '');
+ 'jrggre'.replace(re47, '');
+ 'jrggre'.replace(re48, '');
+ /#[a-z0-9]+$/i.exec('uggc://jjj.fpuhryreim.arg/Qrsnhyg');
+ re66.exec('fryrpgrq');
+ /(?:^|\s+)lhv-ani(?:\s+|$)/.exec('sff lhv-ani');
+ /(?:^|\s+)lhv-anifrg(?:\s+|$)/.exec('zrqvnzbqgno lhv-anifrg');
+ /(?:^|\s+)lhv-anifrg-gbc(?:\s+|$)/.exec('zrqvnzbqgno lhv-anifrg');
+ re91.exec('GnoThvq');
+ re91.exec('thvq');
+ /(pbzcngvoyr|jroxvg)/.exec(str63);
+ /.+(?:ei|vg|en|vr)[\/: ]([\d.]+)/.exec(str63);
+ re8.exec('144631658.0.10.1231365869');
+ re8.exec('144631658.0.10.1231367054');
+ re8.exec('144631658.1231365869.1.1.hgzpfe=(qverpg)|hgzppa=(qverpg)|hgzpzq=(abar)');
+ re8.exec('144631658.1231367054.1.1.hgzpfe=(qverpg)|hgzppa=(qverpg)|hgzpzq=(abar)');
+ re8.exec('144631658.1670816052019209000.1231365869.1231365869.1231365869.1');
+ re8.exec('144631658.1796080716621419500.1231367054.1231367054.1231367054.1');
+ re8.exec(str94);
+ re8.exec(str95);
+ re8.exec(str96);
+ re8.exec(str97);
+ re8.exec('__hgzn=144631658.1670816052019209000.1231365869.1231365869.1231365869.1');
+ re8.exec('__hgzn=144631658.1796080716621419500.1231367054.1231367054.1231367054.1');
+ re8.exec('__hgzo=144631658.0.10.1231365869');
+ re8.exec('__hgzo=144631658.0.10.1231367054');
+ re8.exec('__hgzm=144631658.1231365869.1.1.hgzpfe=(qverpg)|hgzppa=(qverpg)|hgzpzq=(abar)');
+ re8.exec('__hgzm=144631658.1231367054.1.1.hgzpfe=(qverpg)|hgzppa=(qverpg)|hgzpzq=(abar)');
+ re34.exec(str78);
+ re34.exec(str79);
+ re34.exec(str81);
+ re74.exec(str77);
+ re74.exec('*');
+ re74.exec(str82);
+ re74.exec(str83);
+ re74.exec(str86);
+ re74.exec('rzorq');
+ re74.exec('sbez.nwnk');
+ re74.exec(str90);
+ re74.exec('bowrpg');
+ /\/onfr.wf(\?.+)?$/.exec('/uggc://wf.hv-cbegny.qr/tzk/ubzr/wf/20080602/onfr.wf');
+ re28.exec('uvag ynfgUvag ynfg');
+ re75.exec('');
+ re76.exec('');
+ re77.exec('');
+ re78.exec('');
+ re80.exec(str77);
+ re80.exec('*');
+ re80.exec('.pybfr');
+ re80.exec(str82);
+ re80.exec(str83);
+ re80.exec(str84);
+ re80.exec(str86);
+ re80.exec('qg');
+ re80.exec('rzorq');
+ re80.exec('sbez.nwnk');
+ re80.exec(str90);
+ re80.exec('bowrpg');
+ re61.exec('qlaYvo.wf');
+ re61.exec('rssrpgYvo.wf');
+ re61.exec('uggc://jjj.tzk.arg/qr/?fgnghf=uvajrvf');
+ re92.exec(' .pybfr');
+ re92.exec(' n.svryqOgaPnapry');
+ re92.exec(' qg');
+ re92.exec(str48);
+ re92.exec('.nwnk');
+ re92.exec('.svryqOga,n.svryqOgaPnapry');
+ re92.exec('.svryqOgaPnapry');
+ re92.exec('.bow-nppbeqvba qg');
+ re68.exec(str77);
+ re68.exec('*');
+ re68.exec('.pybfr');
+ re68.exec(str82);
+ re68.exec(str83);
+ re68.exec(str84);
+ re68.exec(str86);
+ re68.exec('qg');
+ re68.exec('rzorq');
+ re68.exec('sbez.nwnk');
+ re68.exec(str90);
+ re68.exec('bowrpg');
+ re93.exec(' .pybfr');
+ re93.exec(' n.svryqOgaPnapry');
+ re93.exec(' qg');
+ re93.exec(str48);
+ re93.exec('.nwnk');
+ re93.exec('.svryqOga,n.svryqOgaPnapry');
+ re93.exec('.svryqOgaPnapry');
+ re93.exec('.bow-nppbeqvba qg');
+ re81.exec(str77);
+ re81.exec('*');
+ re81.exec(str48);
+ re81.exec('.pybfr');
+ re81.exec(str82);
+ re81.exec(str83);
+ re81.exec(str84);
+ re81.exec(str86);
+ re81.exec('qg');
+ re81.exec('rzorq');
+ re81.exec('sbez.nwnk');
+ re81.exec(str90);
+ re81.exec('bowrpg');
+ re94.exec(' .pybfr');
+ re94.exec(' n.svryqOgaPnapry');
+ re94.exec(' qg');
+ re94.exec(str48);
+ re94.exec('.nwnk');
+ re94.exec('.svryqOga,n.svryqOgaPnapry');
+ re94.exec('.svryqOgaPnapry');
+ re94.exec('.bow-nppbeqvba qg');
+ re94.exec('[anzr=nwnkHey]');
+ re94.exec(str82);
+ re31.exec('rf');
+ re31.exec('wn');
+ re82.exec(str77);
+ re82.exec('*');
+ re82.exec(str48);
+ re82.exec('.pybfr');
+ re82.exec(str82);
+ re82.exec(str83);
+ re82.exec(str84);
+ re82.exec(str86);
+ re82.exec('qg');
+ re82.exec('rzorq');
+ re82.exec('sbez.nwnk');
+ re82.exec(str90);
+ re82.exec('bowrpg');
+ re83.exec(str98);
+ re83.exec('shapgvba sbphf() { [angvir pbqr] }');
+ re62.exec('#Ybtva');
+ re62.exec('#Ybtva_cnffjbeq');
+ re62.exec(str77);
+ re62.exec('#fubhgobkWf');
+ re62.exec('#fubhgobkWfReebe');
+ re62.exec('#fubhgobkWfFhpprff');
+ re62.exec('*');
+ re62.exec(str82);
+ re62.exec(str83);
+ re62.exec(str86);
+ re62.exec('rzorq');
+ re62.exec('sbez.nwnk');
+ re62.exec(str90);
+ re62.exec('bowrpg');
+ re49.exec('pbagrag');
+ re24.exec(str6);
+ /xbadhrebe/.exec(str63);
+ /znp/.exec('jva32');
+ /zbmvyyn/.exec(str63);
+ /zfvr/.exec(str63);
+ /ag\s5\.1/.exec(str63);
+ /bcren/.exec(str63);
+ /fnsnev/.exec(str63);
+ /jva/.exec('jva32');
+ /jvaqbjf/.exec(str63);
+ }
+ }
+
+ function run() {
+ for (var i = 0; i < 5; i++) {
+ runBlock0();
+ runBlock1();
+ runBlock2();
+ runBlock3();
+ runBlock4();
+ runBlock5();
+ runBlock6();
+ runBlock7();
+ runBlock8();
+ runBlock9();
+ runBlock10();
+ runBlock11();
+ }
+ }
+
+ this.run = run;
+}
diff --git a/testing/talos/talos/tests/v8_7/revisions.html b/testing/talos/talos/tests/v8_7/revisions.html
new file mode 100644
index 0000000000..3ce9889592
--- /dev/null
+++ b/testing/talos/talos/tests/v8_7/revisions.html
@@ -0,0 +1,104 @@
+<html>
+<head>
+<title>V8 Benchmark Suite Revisions</title>
+<link type="text/css" rel="stylesheet" href="style.css" />
+</head>
+<body>
+<div>
+ <div class="title"><h1>V8 Benchmark Suite Revisions</h1></div>
+ <table>
+ <tr>
+ <td class="contents">
+
+<p>
+
+The V8 benchmark suite is changed from time to time as we fix bugs or
+expand the scope of the benchmarks. Here is a list of revisions, with
+a description of the changes made. Note that benchmark results are
+not comparable unless both results are run with the same revision of
+the benchmark suite.
+
+</p>
+<div class="subtitle"><h3>Version 7 (<a href="http://v8.googlecode.com/svn/data/benchmarks/v7/run.html">link</a>)</h3></div>
+
+<p>This version includes the new Navier-Stokes benchmark, a 2D differential
+ equation solver that stresses arithmetic computations on double arrays.</p>
+
+<div class="subtitle"><h3>Version 6 (<a href="http://v8.googlecode.com/svn/data/benchmarks/v6/run.html">link</a>)</h3></div>
+
+<p>Removed dead code from the RayTrace benchmark and fixed a couple of
+typos in the DeltaBlue implementation. Changed the Splay benchmark to
+avoid converting the same numeric key to a string over and over again
+and to avoid inserting and removing the same element repeatedly thus
+increasing pressure on the memory subsystem. Changed the RegExp
+benchmark to exercise the regular expression engine on different input
+strings.</p>
+
+<p>Furthermore, the benchmark runner was changed to run the benchmarks
+for at least a few times to stabilize the reported numbers on slower
+machines.</p>
+
+<div class="subtitle"><h3>Version 5 (<a href="http://v8.googlecode.com/svn/data/benchmarks/v5/run.html">link</a>)</h3></div>
+
+<p>Removed duplicate line in random seed code, and changed the name of
+the Object.prototype.inherits function in the DeltaBlue benchmark to
+inheritsFrom to avoid name clashes when running in Chromium with
+extensions enabled.
+</p>
+
+<div class="subtitle"><h3>Version 4 (<a href="http://v8.googlecode.com/svn/data/benchmarks/v4/run.html">link</a>)</h3></div>
+
+<p>The <i>Splay</i> benchmark is a newcomer in version 4. It
+manipulates a splay tree by adding and removing data nodes, thus
+exercising the memory management subsystem of the JavaScript engine.
+</p>
+
+<p>
+Furthermore, all the unused parts of the Prototype library were
+removed from the RayTrace benchmark. This does not affect the running
+of the benchmark.
+</p>
+
+
+<div class="subtitle"><h3>Version 3 (<a href="http://v8.googlecode.com/svn/data/benchmarks/v3/run.html">link</a>)</h3></div>
+
+<p>Version 3 adds a new benchmark, <i>RegExp</i>. The RegExp
+benchmark is generated by loading 50 of the most popular pages on the
+web and logging all regexp operations performed. Each operation is
+given a weight that is calculated from an estimate of the popularity
+of the pages where it occurs and the number of times it is executed
+while loading each page. Finally the literal letters in the data are
+encoded using ROT13 in a way that does not affect how the regexps
+match their input.
+</p>
+
+
+<div class="subtitle"><h3>Version 2 (<a href="http://v8.googlecode.com/svn/data/benchmarks/v2/run.html">link</a>)</h3></div>
+
+<p>For version 2 the Crypto benchmark was fixed. Previously, the
+decryption stage was given plaintext as input, which resulted in an
+error. Now, the decryption stage is given the output of the
+encryption stage as input. The result is checked against the original
+plaintext. For this to give the correct results the crypto objects
+are reset for each iteration of the benchmark. In addition, the size
+of the plain text has been increased a little and the use of
+Math.random() and new Date() to build an RNG pool has been
+removed. </p>
+
+<p>Other benchmarks were fixed to do elementary verification of the
+results of their calculations. This is to avoid accidentally
+obtaining scores that are the result of an incorrect JavaScript engine
+optimization.</p>
+
+
+<div class="subtitle"><h3>Version 1 (<a href="http://v8.googlecode.com/svn/data/benchmarks/v1/run.html">link</a>)</h3></div>
+
+<p>Initial release.</p>
+
+</td><td style="text-align: center">
+</td></tr></table>
+
+</div>
+
+</body>
+</html>
diff --git a/testing/talos/talos/tests/v8_7/richards.js b/testing/talos/talos/tests/v8_7/richards.js
new file mode 100644
index 0000000000..054928db16
--- /dev/null
+++ b/testing/talos/talos/tests/v8_7/richards.js
@@ -0,0 +1,539 @@
+// Copyright 2006-2008 the V8 project authors. All rights reserved.
+// 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 Google Inc. 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 THE COPYRIGHT
+// OWNER OR CONTRIBUTORS 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.
+
+
+// This is a JavaScript implementation of the Richards
+// benchmark from:
+//
+// http://www.cl.cam.ac.uk/~mr10/Bench.html
+//
+// The benchmark was originally implemented in BCPL by
+// Martin Richards.
+
+
+var Richards = new BenchmarkSuite('Richards', 35302, [
+ new Benchmark("Richards", runRichards)
+]);
+
+
+/**
+ * The Richards benchmark simulates the task dispatcher of an
+ * operating system.
+ **/
+function runRichards() {
+ var scheduler = new Scheduler();
+ scheduler.addIdleTask(ID_IDLE, 0, null, COUNT);
+
+ var queue = new Packet(null, ID_WORKER, KIND_WORK);
+ queue = new Packet(queue, ID_WORKER, KIND_WORK);
+ scheduler.addWorkerTask(ID_WORKER, 1000, queue);
+
+ queue = new Packet(null, ID_DEVICE_A, KIND_DEVICE);
+ queue = new Packet(queue, ID_DEVICE_A, KIND_DEVICE);
+ queue = new Packet(queue, ID_DEVICE_A, KIND_DEVICE);
+ scheduler.addHandlerTask(ID_HANDLER_A, 2000, queue);
+
+ queue = new Packet(null, ID_DEVICE_B, KIND_DEVICE);
+ queue = new Packet(queue, ID_DEVICE_B, KIND_DEVICE);
+ queue = new Packet(queue, ID_DEVICE_B, KIND_DEVICE);
+ scheduler.addHandlerTask(ID_HANDLER_B, 3000, queue);
+
+ scheduler.addDeviceTask(ID_DEVICE_A, 4000, null);
+
+ scheduler.addDeviceTask(ID_DEVICE_B, 5000, null);
+
+ scheduler.schedule();
+
+ if (scheduler.queueCount != EXPECTED_QUEUE_COUNT ||
+ scheduler.holdCount != EXPECTED_HOLD_COUNT) {
+ var msg =
+ "Error during execution: queueCount = " + scheduler.queueCount +
+ ", holdCount = " + scheduler.holdCount + ".";
+ throw new Error(msg);
+ }
+}
+
+var COUNT = 1000;
+
+/**
+ * These two constants specify how many times a packet is queued and
+ * how many times a task is put on hold in a correct run of richards.
+ * They don't have any meaning a such but are characteristic of a
+ * correct run so if the actual queue or hold count is different from
+ * the expected there must be a bug in the implementation.
+ **/
+var EXPECTED_QUEUE_COUNT = 2322;
+var EXPECTED_HOLD_COUNT = 928;
+
+
+/**
+ * A scheduler can be used to schedule a set of tasks based on their relative
+ * priorities. Scheduling is done by maintaining a list of task control blocks
+ * which holds tasks and the data queue they are processing.
+ * @constructor
+ */
+function Scheduler() {
+ this.queueCount = 0;
+ this.holdCount = 0;
+ this.blocks = new Array(NUMBER_OF_IDS);
+ this.list = null;
+ this.currentTcb = null;
+ this.currentId = null;
+}
+
+var ID_IDLE = 0;
+var ID_WORKER = 1;
+var ID_HANDLER_A = 2;
+var ID_HANDLER_B = 3;
+var ID_DEVICE_A = 4;
+var ID_DEVICE_B = 5;
+var NUMBER_OF_IDS = 6;
+
+var KIND_DEVICE = 0;
+var KIND_WORK = 1;
+
+/**
+ * Add an idle task to this scheduler.
+ * @param {int} id the identity of the task
+ * @param {int} priority the task's priority
+ * @param {Packet} queue the queue of work to be processed by the task
+ * @param {int} count the number of times to schedule the task
+ */
+Scheduler.prototype.addIdleTask = function (id, priority, queue, count) {
+ this.addRunningTask(id, priority, queue, new IdleTask(this, 1, count));
+};
+
+/**
+ * Add a work task to this scheduler.
+ * @param {int} id the identity of the task
+ * @param {int} priority the task's priority
+ * @param {Packet} queue the queue of work to be processed by the task
+ */
+Scheduler.prototype.addWorkerTask = function (id, priority, queue) {
+ this.addTask(id, priority, queue, new WorkerTask(this, ID_HANDLER_A, 0));
+};
+
+/**
+ * Add a handler task to this scheduler.
+ * @param {int} id the identity of the task
+ * @param {int} priority the task's priority
+ * @param {Packet} queue the queue of work to be processed by the task
+ */
+Scheduler.prototype.addHandlerTask = function (id, priority, queue) {
+ this.addTask(id, priority, queue, new HandlerTask(this));
+};
+
+/**
+ * Add a handler task to this scheduler.
+ * @param {int} id the identity of the task
+ * @param {int} priority the task's priority
+ * @param {Packet} queue the queue of work to be processed by the task
+ */
+Scheduler.prototype.addDeviceTask = function (id, priority, queue) {
+ this.addTask(id, priority, queue, new DeviceTask(this))
+};
+
+/**
+ * Add the specified task and mark it as running.
+ * @param {int} id the identity of the task
+ * @param {int} priority the task's priority
+ * @param {Packet} queue the queue of work to be processed by the task
+ * @param {Task} task the task to add
+ */
+Scheduler.prototype.addRunningTask = function (id, priority, queue, task) {
+ this.addTask(id, priority, queue, task);
+ this.currentTcb.setRunning();
+};
+
+/**
+ * Add the specified task to this scheduler.
+ * @param {int} id the identity of the task
+ * @param {int} priority the task's priority
+ * @param {Packet} queue the queue of work to be processed by the task
+ * @param {Task} task the task to add
+ */
+Scheduler.prototype.addTask = function (id, priority, queue, task) {
+ this.currentTcb = new TaskControlBlock(this.list, id, priority, queue, task);
+ this.list = this.currentTcb;
+ this.blocks[id] = this.currentTcb;
+};
+
+/**
+ * Execute the tasks managed by this scheduler.
+ */
+Scheduler.prototype.schedule = function () {
+ this.currentTcb = this.list;
+ while (this.currentTcb != null) {
+ if (this.currentTcb.isHeldOrSuspended()) {
+ this.currentTcb = this.currentTcb.link;
+ } else {
+ this.currentId = this.currentTcb.id;
+ this.currentTcb = this.currentTcb.run();
+ }
+ }
+};
+
+/**
+ * Release a task that is currently blocked and return the next block to run.
+ * @param {int} id the id of the task to suspend
+ */
+Scheduler.prototype.release = function (id) {
+ var tcb = this.blocks[id];
+ if (tcb == null) return tcb;
+ tcb.markAsNotHeld();
+ if (tcb.priority > this.currentTcb.priority) {
+ return tcb;
+ } else {
+ return this.currentTcb;
+ }
+};
+
+/**
+ * Block the currently executing task and return the next task control block
+ * to run. The blocked task will not be made runnable until it is explicitly
+ * released, even if new work is added to it.
+ */
+Scheduler.prototype.holdCurrent = function () {
+ this.holdCount++;
+ this.currentTcb.markAsHeld();
+ return this.currentTcb.link;
+};
+
+/**
+ * Suspend the currently executing task and return the next task control block
+ * to run. If new work is added to the suspended task it will be made runnable.
+ */
+Scheduler.prototype.suspendCurrent = function () {
+ this.currentTcb.markAsSuspended();
+ return this.currentTcb;
+};
+
+/**
+ * Add the specified packet to the end of the worklist used by the task
+ * associated with the packet and make the task runnable if it is currently
+ * suspended.
+ * @param {Packet} packet the packet to add
+ */
+Scheduler.prototype.queue = function (packet) {
+ var t = this.blocks[packet.id];
+ if (t == null) return t;
+ this.queueCount++;
+ packet.link = null;
+ packet.id = this.currentId;
+ return t.checkPriorityAdd(this.currentTcb, packet);
+};
+
+/**
+ * A task control block manages a task and the queue of work packages associated
+ * with it.
+ * @param {TaskControlBlock} link the preceding block in the linked block list
+ * @param {int} id the id of this block
+ * @param {int} priority the priority of this block
+ * @param {Packet} queue the queue of packages to be processed by the task
+ * @param {Task} task the task
+ * @constructor
+ */
+function TaskControlBlock(link, id, priority, queue, task) {
+ this.link = link;
+ this.id = id;
+ this.priority = priority;
+ this.queue = queue;
+ this.task = task;
+ if (queue == null) {
+ this.state = STATE_SUSPENDED;
+ } else {
+ this.state = STATE_SUSPENDED_RUNNABLE;
+ }
+}
+
+/**
+ * The task is running and is currently scheduled.
+ */
+var STATE_RUNNING = 0;
+
+/**
+ * The task has packets left to process.
+ */
+var STATE_RUNNABLE = 1;
+
+/**
+ * The task is not currently running. The task is not blocked as such and may
+* be started by the scheduler.
+ */
+var STATE_SUSPENDED = 2;
+
+/**
+ * The task is blocked and cannot be run until it is explicitly released.
+ */
+var STATE_HELD = 4;
+
+var STATE_SUSPENDED_RUNNABLE = STATE_SUSPENDED | STATE_RUNNABLE;
+var STATE_NOT_HELD = ~STATE_HELD;
+
+TaskControlBlock.prototype.setRunning = function () {
+ this.state = STATE_RUNNING;
+};
+
+TaskControlBlock.prototype.markAsNotHeld = function () {
+ this.state = this.state & STATE_NOT_HELD;
+};
+
+TaskControlBlock.prototype.markAsHeld = function () {
+ this.state = this.state | STATE_HELD;
+};
+
+TaskControlBlock.prototype.isHeldOrSuspended = function () {
+ return (this.state & STATE_HELD) != 0 || (this.state == STATE_SUSPENDED);
+};
+
+TaskControlBlock.prototype.markAsSuspended = function () {
+ this.state = this.state | STATE_SUSPENDED;
+};
+
+TaskControlBlock.prototype.markAsRunnable = function () {
+ this.state = this.state | STATE_RUNNABLE;
+};
+
+/**
+ * Runs this task, if it is ready to be run, and returns the next task to run.
+ */
+TaskControlBlock.prototype.run = function () {
+ var packet;
+ if (this.state == STATE_SUSPENDED_RUNNABLE) {
+ packet = this.queue;
+ this.queue = packet.link;
+ if (this.queue == null) {
+ this.state = STATE_RUNNING;
+ } else {
+ this.state = STATE_RUNNABLE;
+ }
+ } else {
+ packet = null;
+ }
+ return this.task.run(packet);
+};
+
+/**
+ * Adds a packet to the worklist of this block's task, marks this as runnable if
+ * necessary, and returns the next runnable object to run (the one
+ * with the highest priority).
+ */
+TaskControlBlock.prototype.checkPriorityAdd = function (task, packet) {
+ if (this.queue == null) {
+ this.queue = packet;
+ this.markAsRunnable();
+ if (this.priority > task.priority) return this;
+ } else {
+ this.queue = packet.addTo(this.queue);
+ }
+ return task;
+};
+
+TaskControlBlock.prototype.toString = function () {
+ return "tcb { " + this.task + "@" + this.state + " }";
+};
+
+/**
+ * An idle task doesn't do any work itself but cycles control between the two
+ * device tasks.
+ * @param {Scheduler} scheduler the scheduler that manages this task
+ * @param {int} v1 a seed value that controls how the device tasks are scheduled
+ * @param {int} count the number of times this task should be scheduled
+ * @constructor
+ */
+function IdleTask(scheduler, v1, count) {
+ this.scheduler = scheduler;
+ this.v1 = v1;
+ this.count = count;
+}
+
+IdleTask.prototype.run = function (packet) {
+ this.count--;
+ if (this.count == 0) return this.scheduler.holdCurrent();
+ if ((this.v1 & 1) == 0) {
+ this.v1 = this.v1 >> 1;
+ return this.scheduler.release(ID_DEVICE_A);
+ } else {
+ this.v1 = (this.v1 >> 1) ^ 0xD008;
+ return this.scheduler.release(ID_DEVICE_B);
+ }
+};
+
+IdleTask.prototype.toString = function () {
+ return "IdleTask"
+};
+
+/**
+ * A task that suspends itself after each time it has been run to simulate
+ * waiting for data from an external device.
+ * @param {Scheduler} scheduler the scheduler that manages this task
+ * @constructor
+ */
+function DeviceTask(scheduler) {
+ this.scheduler = scheduler;
+ this.v1 = null;
+}
+
+DeviceTask.prototype.run = function (packet) {
+ if (packet == null) {
+ if (this.v1 == null) return this.scheduler.suspendCurrent();
+ var v = this.v1;
+ this.v1 = null;
+ return this.scheduler.queue(v);
+ } else {
+ this.v1 = packet;
+ return this.scheduler.holdCurrent();
+ }
+};
+
+DeviceTask.prototype.toString = function () {
+ return "DeviceTask";
+};
+
+/**
+ * A task that manipulates work packets.
+ * @param {Scheduler} scheduler the scheduler that manages this task
+ * @param {int} v1 a seed used to specify how work packets are manipulated
+ * @param {int} v2 another seed used to specify how work packets are manipulated
+ * @constructor
+ */
+function WorkerTask(scheduler, v1, v2) {
+ this.scheduler = scheduler;
+ this.v1 = v1;
+ this.v2 = v2;
+}
+
+WorkerTask.prototype.run = function (packet) {
+ if (packet == null) {
+ return this.scheduler.suspendCurrent();
+ } else {
+ if (this.v1 == ID_HANDLER_A) {
+ this.v1 = ID_HANDLER_B;
+ } else {
+ this.v1 = ID_HANDLER_A;
+ }
+ packet.id = this.v1;
+ packet.a1 = 0;
+ for (var i = 0; i < DATA_SIZE; i++) {
+ this.v2++;
+ if (this.v2 > 26) this.v2 = 1;
+ packet.a2[i] = this.v2;
+ }
+ return this.scheduler.queue(packet);
+ }
+};
+
+WorkerTask.prototype.toString = function () {
+ return "WorkerTask";
+};
+
+/**
+ * A task that manipulates work packets and then suspends itself.
+ * @param {Scheduler} scheduler the scheduler that manages this task
+ * @constructor
+ */
+function HandlerTask(scheduler) {
+ this.scheduler = scheduler;
+ this.v1 = null;
+ this.v2 = null;
+}
+
+HandlerTask.prototype.run = function (packet) {
+ if (packet != null) {
+ if (packet.kind == KIND_WORK) {
+ this.v1 = packet.addTo(this.v1);
+ } else {
+ this.v2 = packet.addTo(this.v2);
+ }
+ }
+ if (this.v1 != null) {
+ var count = this.v1.a1;
+ var v;
+ if (count < DATA_SIZE) {
+ if (this.v2 != null) {
+ v = this.v2;
+ this.v2 = this.v2.link;
+ v.a1 = this.v1.a2[count];
+ this.v1.a1 = count + 1;
+ return this.scheduler.queue(v);
+ }
+ } else {
+ v = this.v1;
+ this.v1 = this.v1.link;
+ return this.scheduler.queue(v);
+ }
+ }
+ return this.scheduler.suspendCurrent();
+};
+
+HandlerTask.prototype.toString = function () {
+ return "HandlerTask";
+};
+
+/* --- *
+ * P a c k e t
+ * --- */
+
+var DATA_SIZE = 4;
+
+/**
+ * A simple package of data that is manipulated by the tasks. The exact layout
+ * of the payload data carried by a packet is not importaint, and neither is the
+ * nature of the work performed on packets by the tasks.
+ *
+ * Besides carrying data, packets form linked lists and are hence used both as
+ * data and worklists.
+ * @param {Packet} link the tail of the linked list of packets
+ * @param {int} id an ID for this packet
+ * @param {int} kind the type of this packet
+ * @constructor
+ */
+function Packet(link, id, kind) {
+ this.link = link;
+ this.id = id;
+ this.kind = kind;
+ this.a1 = 0;
+ this.a2 = new Array(DATA_SIZE);
+}
+
+/**
+ * Add this packet to the end of a worklist, and return the worklist.
+ * @param {Packet} queue the worklist to add this packet to
+ */
+Packet.prototype.addTo = function (queue) {
+ this.link = null;
+ if (queue == null) return this;
+ var peek, next = queue;
+ while ((peek = next.link) != null)
+ next = peek;
+ next.link = this;
+ return queue;
+};
+
+Packet.prototype.toString = function () {
+ return "Packet";
+};
diff --git a/testing/talos/talos/tests/v8_7/run.html b/testing/talos/talos/tests/v8_7/run.html
new file mode 100644
index 0000000000..fe2ea227db
--- /dev/null
+++ b/testing/talos/talos/tests/v8_7/run.html
@@ -0,0 +1,167 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
+ "http://www.w3.org/TR/html4/strict.dtd">
+<html lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<meta http-equiv="Content-Script-Type" content="text/javascript">
+<meta http-equiv="Content-Style-Type" content="text/css">
+<title>V8 Benchmark Suite</title>
+<script src="../../scripts/Profiler.js"></script>
+<script type="text/javascript" src="base.js"></script>
+<script type="text/javascript" src="richards.js"></script>
+<script type="text/javascript" src="deltablue.js"></script>
+<script type="text/javascript" src="crypto.js"></script>
+<script type="text/javascript" src="raytrace.js"></script>
+<script type="text/javascript" src="earley-boyer.js"></script>
+<script type="text/javascript" src="regexp.js"></script>
+<script type="text/javascript" src="splay.js"></script>
+<script type="text/javascript" src="navier-stokes.js"></script>
+<link type="text/css" rel="stylesheet" href="style.css" />
+<script type="text/javascript">
+var completed = 0;
+var benchmarks = BenchmarkSuite.CountBenchmarks();
+var success = true;
+
+
+var testName = null;
+function parseParams() {
+ var s = document.location.search.substring(1);
+ var params = s.replace("%26", "&").split('&');
+ for (var i = 0; i < params.length; ++i) {
+ var fields = params[i].split('=');
+ switch (fields[0]) {
+ case 'testName':
+ testName = fields[1];
+ break;
+ }
+ }
+}
+parseParams();
+for (var i=0; i < BenchmarkSuite.suites.length; i++) {
+ if (BenchmarkSuite.suites[i].name == testName) break;
+}
+if (i < BenchmarkSuite.suites.length) {
+ suite = BenchmarkSuite.suites[i];
+ BenchmarkSuite.suites = [suite];
+}
+
+function ShowProgress(name) {
+ var status = document.getElementById("status");
+ var percentage = ((++completed) / benchmarks) * 100;
+ status.innerHTML = "Running: " + Math.round(percentage) + "% completed.";
+}
+
+
+function AddResult(name, result) {
+ var text = name + ': ' + result;
+ var results = document.getElementById("results");
+ results.innerHTML += (text + "<br>");
+}
+
+
+function AddError(name, error) {
+ AddResult(name, '<b>error<\/b>');
+ success = false;
+}
+
+
+function AddScore(score) {
+ var status = document.getElementById("status");
+ if (success) {
+ status.innerHTML = "Score: " + score;
+ }
+}
+
+
+function Run() {
+ BenchmarkSuite.RunSuites({ NotifyStep: ShowProgress,
+ NotifyError: AddError,
+ NotifyResult: AddResult,
+ NotifyScore: AddScore });
+}
+
+function ShowWarningIfObsolete() {
+ // If anything goes wrong we will just catch the exception and no
+ // warning is shown, i.e., no harm is done.
+ try {
+ var xmlhttp;
+ var next_version = parseInt(BenchmarkSuite.version) + 1;
+ var next_version_url = "../v" + next_version + "/run.html";
+ if (window.XMLHttpRequest) {
+ xmlhttp = new window.XMLHttpRequest();
+ } else if (window.ActiveXObject) {
+ xmlhttp = new window.ActiveXObject("Microsoft.XMLHTTP");
+ }
+ xmlhttp.open('GET', next_version_url, true);
+ xmlhttp.onreadystatechange = function() {
+ if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
+ document.getElementById('obsolete').style.display="block";
+ }
+ };
+ xmlhttp.send(null);
+ } catch(e) {
+ // Ignore exception if check for next version fails.
+ // Hence no warning is displayed.
+ }
+}
+
+function Load() {
+ var version = BenchmarkSuite.version;
+ document.getElementById("version").innerHTML = version;
+ ShowWarningIfObsolete();
+ setTimeout(Run, 200);
+}
+</script>
+</head>
+<body onload="Load()">
+<div>
+ <div class="title"><h1>V8 Benchmark Suite - version <span id="version">?</span></h1></div>
+ <div class="warning" id="obsolete">
+Warning! This is not the latest version of the V8 benchmark
+suite. Consider running the
+<a href="http://v8.googlecode.com/svn/data/benchmarks/current/run.html">
+latest version</a>.
+ </div>
+ <table>
+ <tr>
+ <td class="contents">
+This page contains a suite of pure JavaScript benchmarks that we have
+used to tune V8. The final score is computed as the geometric mean of
+the individual results to make it independent of the running times of
+the individual benchmarks and of a reference system (score
+100). Scores are not comparable across benchmark suite versions and
+higher scores means better performance: <em>Bigger is better!</em>
+
+<ul>
+<li><b>Richards</b><br>OS kernel simulation benchmark, originally written in BCPL by Martin Richards (<i>539 lines</i>).</li>
+<li><b>DeltaBlue</b><br>One-way constraint solver, originally written in Smalltalk by John Maloney and Mario Wolczko (<i>880 lines</i>).</li>
+<li><b>Crypto</b><br>Encryption and decryption benchmark based on code by Tom Wu (<i>1698 lines</i>).</li>
+<li><b>RayTrace</b><br>Ray tracer benchmark based on code by <a href="http://flog.co.nz/">Adam Burmister</a> (<i>904 lines</i>).</li>
+<li><b>EarleyBoyer</b><br>Classic Scheme benchmarks, translated to JavaScript by Florian Loitsch's Scheme2Js compiler (<i>4684 lines</i>).</li>
+<li><b>RegExp</b><br>Regular expression benchmark generated by extracting regular expression operations from 50 of the most popular web pages
+(<i>1761 lines</i>).
+</li>
+<li><b>Splay</b><br>Data manipulation benchmark that deals with splay trees and exercises the automatic memory management subsystem (<i>394 lines</i>).</li>
+<li><b>NavierStokes</b><br>Solves NavierStokes equations in 2D, heavily manipulating double precision arrays. Based on Oliver Hunt's code (<i>387 lines</i>).</li>
+</ul>
+
+<p>
+Note that benchmark results are not comparable unless both results are
+run with the same revision of the benchmark suite. We will be making
+revisions from time to time in order to fix bugs or expand the scope
+of the benchmark suite. For previous revisions and the change log see
+the <a href="http://v8.googlecode.com/svn/data/benchmarks/current/revisions.html">revisions</a> page.
+</p>
+
+</td><td style="text-align: center">
+<div class="run">
+ <div id="status">Starting...</div>
+ <div id="results">
+ </div>
+</div>
+</td></tr></table>
+
+</div>
+
+</body>
+</html>
diff --git a/testing/talos/talos/tests/v8_7/splay.js b/testing/talos/talos/tests/v8_7/splay.js
new file mode 100644
index 0000000000..6b4f56d321
--- /dev/null
+++ b/testing/talos/talos/tests/v8_7/splay.js
@@ -0,0 +1,394 @@
+// Copyright 2009 the V8 project authors. All rights reserved.
+// 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 Google Inc. 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 THE COPYRIGHT
+// OWNER OR CONTRIBUTORS 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.
+
+// This benchmark is based on a JavaScript log processing module used
+// by the V8 profiler to generate execution time profiles for runs of
+// JavaScript applications, and it effectively measures how fast the
+// JavaScript engine is at allocating nodes and reclaiming the memory
+// used for old nodes. Because of the way splay trees work, the engine
+// also has to deal with a lot of changes to the large tree object
+// graph.
+
+var Splay = new BenchmarkSuite('Splay', 81491, [
+ new Benchmark("Splay", SplayRun, SplaySetup, SplayTearDown)
+]);
+
+
+// Configuration.
+var kSplayTreeSize = 8000;
+var kSplayTreeModifications = 80;
+var kSplayTreePayloadDepth = 5;
+
+var splayTree = null;
+
+
+function GeneratePayloadTree(depth, tag) {
+ if (depth == 0) {
+ return {
+ array : [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ],
+ string : 'String for key ' + tag + ' in leaf node'
+ };
+ } else {
+ return {
+ left: GeneratePayloadTree(depth - 1, tag),
+ right: GeneratePayloadTree(depth - 1, tag)
+ };
+ }
+}
+
+
+function GenerateKey() {
+ // The benchmark framework guarantees that Math.random is
+ // deterministic; see base.js.
+ return Math.random();
+}
+
+
+function InsertNewNode() {
+ // Insert new node with a unique key.
+ var key;
+ do {
+ key = GenerateKey();
+ } while (splayTree.find(key) != null);
+ var payload = GeneratePayloadTree(kSplayTreePayloadDepth, String(key));
+ splayTree.insert(key, payload);
+ return key;
+}
+
+
+
+function SplaySetup() {
+ splayTree = new SplayTree();
+ for (var i = 0; i < kSplayTreeSize; i++) InsertNewNode();
+}
+
+
+function SplayTearDown() {
+ // Allow the garbage collector to reclaim the memory
+ // used by the splay tree no matter how we exit the
+ // tear down function.
+ var keys = splayTree.exportKeys();
+ splayTree = null;
+
+ // Verify that the splay tree has the right size.
+ var length = keys.length;
+ if (length != kSplayTreeSize) {
+ throw new Error("Splay tree has wrong size");
+ }
+
+ // Verify that the splay tree has sorted, unique keys.
+ for (var i = 0; i < length - 1; i++) {
+ if (keys[i] >= keys[i + 1]) {
+ throw new Error("Splay tree not sorted");
+ }
+ }
+}
+
+
+function SplayRun() {
+ // Replace a few nodes in the splay tree.
+ for (var i = 0; i < kSplayTreeModifications; i++) {
+ var key = InsertNewNode();
+ var greatest = splayTree.findGreatestLessThan(key);
+ if (greatest == null) splayTree.remove(key);
+ else splayTree.remove(greatest.key);
+ }
+}
+
+
+/**
+ * Constructs a Splay tree. A splay tree is a self-balancing binary
+ * search tree with the additional property that recently accessed
+ * elements are quick to access again. It performs basic operations
+ * such as insertion, look-up and removal in O(log(n)) amortized time.
+ *
+ * @constructor
+ */
+function SplayTree() {
+};
+
+
+/**
+ * Pointer to the root node of the tree.
+ *
+ * @type {SplayTree.Node}
+ * @private
+ */
+SplayTree.prototype.root_ = null;
+
+
+/**
+ * @return {boolean} Whether the tree is empty.
+ */
+SplayTree.prototype.isEmpty = function() {
+ return !this.root_;
+};
+
+
+/**
+ * Inserts a node into the tree with the specified key and value if
+ * the tree does not already contain a node with the specified key. If
+ * the value is inserted, it becomes the root of the tree.
+ *
+ * @param {number} key Key to insert into the tree.
+ * @param {*} value Value to insert into the tree.
+ */
+SplayTree.prototype.insert = function(key, value) {
+ if (this.isEmpty()) {
+ this.root_ = new SplayTree.Node(key, value);
+ return;
+ }
+ // Splay on the key to move the last node on the search path for
+ // the key to the root of the tree.
+ this.splay_(key);
+ if (this.root_.key == key) {
+ return;
+ }
+ var node = new SplayTree.Node(key, value);
+ if (key > this.root_.key) {
+ node.left = this.root_;
+ node.right = this.root_.right;
+ this.root_.right = null;
+ } else {
+ node.right = this.root_;
+ node.left = this.root_.left;
+ this.root_.left = null;
+ }
+ this.root_ = node;
+};
+
+
+/**
+ * Removes a node with the specified key from the tree if the tree
+ * contains a node with this key. The removed node is returned. If the
+ * key is not found, an exception is thrown.
+ *
+ * @param {number} key Key to find and remove from the tree.
+ * @return {SplayTree.Node} The removed node.
+ */
+SplayTree.prototype.remove = function(key) {
+ if (this.isEmpty()) {
+ throw Error('Key not found: ' + key);
+ }
+ this.splay_(key);
+ if (this.root_.key != key) {
+ throw Error('Key not found: ' + key);
+ }
+ var removed = this.root_;
+ if (!this.root_.left) {
+ this.root_ = this.root_.right;
+ } else {
+ var right = this.root_.right;
+ this.root_ = this.root_.left;
+ // Splay to make sure that the new root has an empty right child.
+ this.splay_(key);
+ // Insert the original right child as the right child of the new
+ // root.
+ this.root_.right = right;
+ }
+ return removed;
+};
+
+
+/**
+ * Returns the node having the specified key or null if the tree doesn't contain
+ * a node with the specified key.
+ *
+ * @param {number} key Key to find in the tree.
+ * @return {SplayTree.Node} Node having the specified key.
+ */
+SplayTree.prototype.find = function(key) {
+ if (this.isEmpty()) {
+ return null;
+ }
+ this.splay_(key);
+ return this.root_.key == key ? this.root_ : null;
+};
+
+
+/**
+ * @return {SplayTree.Node} Node having the maximum key value.
+ */
+SplayTree.prototype.findMax = function(opt_startNode) {
+ if (this.isEmpty()) {
+ return null;
+ }
+ var current = opt_startNode || this.root_;
+ while (current.right) {
+ current = current.right;
+ }
+ return current;
+};
+
+
+/**
+ * @return {SplayTree.Node} Node having the maximum key value that
+ * is less than the specified key value.
+ */
+SplayTree.prototype.findGreatestLessThan = function(key) {
+ if (this.isEmpty()) {
+ return null;
+ }
+ // Splay on the key to move the node with the given key or the last
+ // node on the search path to the top of the tree.
+ this.splay_(key);
+ // Now the result is either the root node or the greatest node in
+ // the left subtree.
+ if (this.root_.key < key) {
+ return this.root_;
+ } else if (this.root_.left) {
+ return this.findMax(this.root_.left);
+ } else {
+ return null;
+ }
+};
+
+
+/**
+ * @return {Array<*>} An array containing all the keys of tree's nodes.
+ */
+SplayTree.prototype.exportKeys = function() {
+ var result = [];
+ if (!this.isEmpty()) {
+ this.root_.traverse_(function(node) { result.push(node.key); });
+ }
+ return result;
+};
+
+
+/**
+ * Perform the splay operation for the given key. Moves the node with
+ * the given key to the top of the tree. If no node has the given
+ * key, the last node on the search path is moved to the top of the
+ * tree. This is the simplified top-down splaying algorithm from:
+ * "Self-adjusting Binary Search Trees" by Sleator and Tarjan
+ *
+ * @param {number} key Key to splay the tree on.
+ * @private
+ */
+SplayTree.prototype.splay_ = function(key) {
+ if (this.isEmpty()) {
+ return;
+ }
+ // Create a dummy node. The use of the dummy node is a bit
+ // counter-intuitive: The right child of the dummy node will hold
+ // the L tree of the algorithm. The left child of the dummy node
+ // will hold the R tree of the algorithm. Using a dummy node, left
+ // and right will always be nodes and we avoid special cases.
+ var dummy, left, right;
+ dummy = left = right = new SplayTree.Node(null, null);
+ var current = this.root_;
+ while (true) {
+ if (key < current.key) {
+ if (!current.left) {
+ break;
+ }
+ if (key < current.left.key) {
+ // Rotate right.
+ var tmp = current.left;
+ current.left = tmp.right;
+ tmp.right = current;
+ current = tmp;
+ if (!current.left) {
+ break;
+ }
+ }
+ // Link right.
+ right.left = current;
+ right = current;
+ current = current.left;
+ } else if (key > current.key) {
+ if (!current.right) {
+ break;
+ }
+ if (key > current.right.key) {
+ // Rotate left.
+ var tmp = current.right;
+ current.right = tmp.left;
+ tmp.left = current;
+ current = tmp;
+ if (!current.right) {
+ break;
+ }
+ }
+ // Link left.
+ left.right = current;
+ left = current;
+ current = current.right;
+ } else {
+ break;
+ }
+ }
+ // Assemble.
+ left.right = current.left;
+ right.left = current.right;
+ current.left = dummy.right;
+ current.right = dummy.left;
+ this.root_ = current;
+};
+
+
+/**
+ * Constructs a Splay tree node.
+ *
+ * @param {number} key Key.
+ * @param {*} value Value.
+ */
+SplayTree.Node = function(key, value) {
+ this.key = key;
+ this.value = value;
+};
+
+
+/**
+ * @type {SplayTree.Node}
+ */
+SplayTree.Node.prototype.left = null;
+
+
+/**
+ * @type {SplayTree.Node}
+ */
+SplayTree.Node.prototype.right = null;
+
+
+/**
+ * Performs an ordered traversal of the subtree starting at
+ * this SplayTree.Node.
+ *
+ * @param {function(SplayTree.Node)} f Visitor function.
+ * @private
+ */
+SplayTree.Node.prototype.traverse_ = function(f) {
+ var current = this;
+ while (current) {
+ var left = current.left;
+ if (left) left.traverse_(f);
+ f(current);
+ current = current.right;
+ }
+};
diff --git a/testing/talos/talos/tests/v8_7/style.css b/testing/talos/talos/tests/v8_7/style.css
new file mode 100644
index 0000000000..d9f4dbfc0c
--- /dev/null
+++ b/testing/talos/talos/tests/v8_7/style.css
@@ -0,0 +1,77 @@
+hr {
+ border: 1px solid;
+ border-color: #36C;
+ margin: 1em 0;
+}
+
+h1, h2, h3, h4 {
+ margin: 0;
+ margin-bottom: 0;
+}
+
+h1 {
+ font-size: 154%;
+ height: 1.2em;
+}
+
+
+li {
+ margin: .3em 0 1em 0;
+}
+
+body {
+ font-family: Helvetica,Arial,sans-serif;
+ color: #000;
+ background-color: #fff;
+}
+
+div.title {
+ background-color: rgb(229, 236, 249);
+ border-top: 1px solid rgb(51, 102, 204);
+ text-align: center;
+ padding-top: 0.2em;
+ padding-bottom: 0.2em;
+ margin-bottom: 20px;
+}
+
+div.subtitle {
+ border-bottom: 1px solid rgb(51, 102, 204);
+ margin-top: 2em;
+}
+
+td.contents {
+ text-align: left;
+}
+
+div.run {
+ margin: 20px;
+ width: 300px;
+ height: 300px;
+ float: right;
+ background-color: rgb(229, 236, 249);
+ background-image: url(v8-logo.png);
+ background-position: center center;
+ background-repeat: no-repeat;
+ border: 1px solid rgb(51, 102, 204);
+}
+
+div.warning {
+ background: #ffffd9;
+ border: 1px solid #d2d26a;
+ display: none;
+ margin: 1em 0 2em;
+ padding: 8px;
+ text-align: center;
+}
+
+#status {
+ text-align: center;
+ margin-top: 50px;
+ font-size: 120%;
+ font-weight: bold;
+}
+
+#results {
+ text-align: left;
+ margin: 30px 0 0 90px;
+}
diff --git a/testing/talos/talos/tests/v8_7/v8-logo.png b/testing/talos/talos/tests/v8_7/v8-logo.png
new file mode 100644
index 0000000000..91867657f7
--- /dev/null
+++ b/testing/talos/talos/tests/v8_7/v8-logo.png
Binary files differ
diff --git a/testing/talos/talos/tests/v8_7/v8.manifest b/testing/talos/talos/tests/v8_7/v8.manifest
new file mode 100644
index 0000000000..acfd64acda
--- /dev/null
+++ b/testing/talos/talos/tests/v8_7/v8.manifest
@@ -0,0 +1 @@
+% http://localhost/tests/v8_7/run.html
diff --git a/testing/talos/talos/tests/video/clips/testsrc.1080p.60fps.av1.short.mp4 b/testing/talos/talos/tests/video/clips/testsrc.1080p.60fps.av1.short.mp4
new file mode 100644
index 0000000000..5d21f9751b
--- /dev/null
+++ b/testing/talos/talos/tests/video/clips/testsrc.1080p.60fps.av1.short.mp4
Binary files differ
diff --git a/testing/talos/talos/tests/video/clips/testsrc.1080p.60fps.h264.short.mp4 b/testing/talos/talos/tests/video/clips/testsrc.1080p.60fps.h264.short.mp4
new file mode 100644
index 0000000000..6ee3b681b8
--- /dev/null
+++ b/testing/talos/talos/tests/video/clips/testsrc.1080p.60fps.h264.short.mp4
Binary files differ
diff --git a/testing/talos/talos/tests/video/clips/testsrc.1080p.60fps.mp4 b/testing/talos/talos/tests/video/clips/testsrc.1080p.60fps.mp4
new file mode 100644
index 0000000000..e5a43a114e
--- /dev/null
+++ b/testing/talos/talos/tests/video/clips/testsrc.1080p.60fps.mp4
Binary files differ
diff --git a/testing/talos/talos/tests/video/clips/testsrc.1080p.60fps.vp9.short.mp4 b/testing/talos/talos/tests/video/clips/testsrc.1080p.60fps.vp9.short.mp4
new file mode 100644
index 0000000000..0619210b13
--- /dev/null
+++ b/testing/talos/talos/tests/video/clips/testsrc.1080p.60fps.vp9.short.mp4
Binary files differ
diff --git a/testing/talos/talos/tests/video/clips/testsrc.240p.120fps.mp4 b/testing/talos/talos/tests/video/clips/testsrc.240p.120fps.mp4
new file mode 100644
index 0000000000..df3fb06eb0
--- /dev/null
+++ b/testing/talos/talos/tests/video/clips/testsrc.240p.120fps.mp4
Binary files differ
diff --git a/testing/talos/talos/tests/video/clips/testsrc.480p.60fps.webm b/testing/talos/talos/tests/video/clips/testsrc.480p.60fps.webm
new file mode 100644
index 0000000000..b17341376f
--- /dev/null
+++ b/testing/talos/talos/tests/video/clips/testsrc.480p.60fps.webm
Binary files differ
diff --git a/testing/talos/talos/tests/video/video.manifest b/testing/talos/talos/tests/video/video.manifest
new file mode 100644
index 0000000000..1b6cf26cbe
--- /dev/null
+++ b/testing/talos/talos/tests/video/video.manifest
@@ -0,0 +1,2 @@
+% http://localhost/tests/video/video_playback.html
+
diff --git a/testing/talos/talos/tests/video/video_playback.html b/testing/talos/talos/tests/video/video_playback.html
new file mode 100644
index 0000000000..99bec7c6c1
--- /dev/null
+++ b/testing/talos/talos/tests/video/video_playback.html
@@ -0,0 +1,155 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ - You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<html>
+<head>
+<script src="resource://talos-powers/TalosPowersContent.js"></script>
+<script src="resource://talos-powers/TalosContentProfiler.js"></script>
+<script language="javascript" type="text/javascript">
+const MEASUREMENT1_MS = 3000;
+const MEASUREMENT2_MS = 2000;
+const PLAYBACK_RATE = 5;
+var vdo;
+var start1 = 0;
+var paintedFramesStart1 = 0;
+var start2 = 0;
+var paintedFramesStart2 = 0;
+var testIndex = 0;
+var test = [
+ "testsrc.240p.120fps.mp4",
+ "testsrc.480p.60fps.webm",
+ "testsrc.1080p.60fps.mp4",
+];
+var viewModeIndex = 0;
+// Remove fullscreen mode since it causes intermittent failures on try server. See bug 1192317.
+var viewMode = [1, 1.1, 2];
+var testResult = {names: [], values: []};
+
+/* globals readyToStart:true */
+
+function init() {
+ TalosPowersContent.focus(content_focused);
+}
+
+function content_focused() {
+ vdo = document.getElementById("vdo");
+ vdo.addEventListener("loadeddata", prepare);
+ document.addEventListener("fullscreenchange", fullscreen);
+ document.addEventListener("mozfullscreenchange", fullscreen);
+ runTest();
+}
+
+function fullscreen(event) {
+ if ((document.fullscreenElement && document.fullscreenElement !== null) ||
+ document.mozFullScreen) {
+ startTest();
+ } else {
+ nextTest();
+ }
+}
+
+function runTest() {
+ // Windows XP cannot play mp4 clip due to the lack of gmp-eme-plugin, so skip it.
+ if (window.navigator.oscpu == "Windows NT 5.1" && test[testIndex].includes("mp4")) {
+ nextTest();
+ }
+ vdo.setAttribute("src", "clips/" + test[testIndex]);
+ vdo.load();
+}
+
+function prepare() {
+ if (viewMode[viewModeIndex] == "fullscreen") {
+ // Fullscreen mode
+ vdo.setAttribute("width", "100%");
+ vdo.setAttribute("height", "100%");
+ if (document.body.requestFullscreen) {
+ document.body.requestFullscreen();
+ } else if (document.body.mozRequestFullScreen) {
+ document.body.mozRequestFullScreen();
+ }
+ } else {
+ readyToStart = true;
+ vdo.setAttribute("width", vdo.videoWidth * viewMode[viewModeIndex]);
+ vdo.setAttribute("height", vdo.videoHeight * viewMode[viewModeIndex]);
+ startTest();
+ }
+}
+
+function startTest() {
+ TalosContentProfiler.subtestStart("start test " + test[testIndex], true).then(() => {
+ vdo.playbackRate = PLAYBACK_RATE;
+ start1 = performance.now();
+ paintedFramesStart1 = vdo.mozPaintedFrames;
+ vdo.play();
+ setTimeout(function() {
+ start2 = performance.now();
+ paintedFramesStart2 = vdo.mozPaintedFrames;
+ setTimeout(measurementEnded, MEASUREMENT2_MS);
+ }, MEASUREMENT1_MS);
+ });
+}
+
+function measurementEnded() {
+ vdo.pause();
+ var end = performance.now();
+ var paintedFramesEnd = vdo.mozPaintedFrames;
+ var timePerFrame1 = (start2 - start1) / (paintedFramesStart2 - paintedFramesStart1);
+ var timePerFrame2 = (end - start2) / (paintedFramesEnd - paintedFramesStart2);
+ testResult.names.push(test[testIndex] + "_scale_" + viewMode[viewModeIndex] + "_startup");
+ testResult.values.push(timePerFrame1);
+ testResult.names.push(test[testIndex] + "_scale_" + viewMode[viewModeIndex] + "_inclip");
+ testResult.values.push(timePerFrame2);
+
+ TalosContentProfiler.subtestEnd("Test " + test[testIndex], true).then(() => {
+ if (viewMode[viewModeIndex] == "fullscreen") {
+ // Exit fullscreen mode
+ if (document.exitFullscreen) {
+ document.exitFullscreen();
+ } else if (document.mozCancelFullScreen) {
+ document.mozCancelFullScreen();
+ }
+ } else {
+ nextTest();
+ }
+ });
+}
+
+function nextTest() {
+ viewModeIndex++;
+ if (viewModeIndex >= viewMode.length) {
+ viewModeIndex = 0;
+ testIndex++;
+ }
+ if (testIndex >= test.length) {
+ // End the test
+ reportResult();
+ } else {
+ runTest();
+ }
+}
+
+function reportResult() {
+ var msg = "";
+ for (var i = 0; i < testResult.names.length; i++) {
+ msg += testResult.names[i] + " = " + testResult.values[i] + " ms/frame\n\n";
+ }
+
+ dump(msg); // Put the readable report at talos run-log
+
+ if (window.tpRecordTime) {
+ // Within talos - report the results
+ return tpRecordTime(testResult.values.join(","), 0, testResult.names.join(","));
+ }
+ // Local run in a plain browser, display the formatted report
+ alert(msg);
+
+ return undefined;
+}
+</script>
+
+</head>
+<body id="body" onload="init();">
+<video id="vdo" width="100%" height="100%">
+</video>
+</body>
+</html>
diff --git a/testing/talos/talos/tests/webgl/benchmarks/terrain/grass.jpeg b/testing/talos/talos/tests/webgl/benchmarks/terrain/grass.jpeg
new file mode 100644
index 0000000000..641daff112
--- /dev/null
+++ b/testing/talos/talos/tests/webgl/benchmarks/terrain/grass.jpeg
Binary files differ
diff --git a/testing/talos/talos/tests/webgl/benchmarks/terrain/perftest.html b/testing/talos/talos/tests/webgl/benchmarks/terrain/perftest.html
new file mode 100644
index 0000000000..a472162552
--- /dev/null
+++ b/testing/talos/talos/tests/webgl/benchmarks/terrain/perftest.html
@@ -0,0 +1,407 @@
+<html>
+<!--
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+ Version 1.1
+ - Added viewport rotation.
+ - Adapted for talos with with 4 runs on combinations of alpha/antialias
+
+ Version 1.0
+ - Benoit Jacob's WebGL tutorial demos: http://bjacob.github.io/webgl-tutorial/12-texture.html
+-->
+<head>
+<meta charset="utf-8"/>
+<script src="resource://talos-powers/TalosContentProfiler.js"></script>
+<script type="x-shader/x-vertex" id="vertexShader">
+ attribute vec3 vertexPosition;
+ attribute vec3 normalVector;
+ attribute vec2 textureCoord;
+ uniform mat4 modelview;
+ uniform mat4 projection;
+ varying vec3 varyingNormalVector;
+ varying vec2 varyingTextureCoord;
+ void main(void) {
+ gl_Position = projection * modelview * vec4(vertexPosition, 1.0);
+ varyingNormalVector = normalVector;
+ varyingTextureCoord = textureCoord;
+ }
+</script>
+<script type="x-shader/x-fragment" id="fragmentShader">
+ precision mediump float;
+ varying vec3 varyingNormalVector;
+ uniform vec3 lightDirection;
+ uniform sampler2D grassTextureSampler;
+ varying vec2 varyingTextureCoord;
+ void main(void) {
+ vec3 grassColor = texture2D(grassTextureSampler, varyingTextureCoord).rgb;
+ const float ambientLight = 0.3;
+ const float diffuseLight = 0.7;
+ float c = clamp(dot(normalize(varyingNormalVector), lightDirection), 0.0, 1.0);
+ vec3 resultColor = grassColor * (c * diffuseLight + ambientLight);
+ gl_FragColor = vec4(resultColor, 1);
+ }
+</script>
+<script>
+ var gl;
+
+ var modelviewUniformLoc;
+ var projectionUniformLoc;
+ var lightDirectionUniformLoc;
+ var grassTextureSamplerUniformLoc;
+
+ var modelviewMatrix = new Float32Array(16);
+ var projectionMatrix = new Float32Array(16);
+
+ var terrainSize = 32;
+ var aspectRatio;
+
+ function startTest(alpha, antialias, doneCallback) {
+ gl = document.getElementById("c").getContext("webgl", {alpha, antialias});
+
+ var grassImage = document.getElementById("grass");
+ var grassTexture = gl.createTexture();
+ gl.bindTexture(gl.TEXTURE_2D, grassTexture);
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, grassImage);
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR);
+ gl.generateMipmap(gl.TEXTURE_2D);
+
+ var vertexShader = gl.createShader(gl.VERTEX_SHADER);
+ var vertexShaderString = document.getElementById("vertexShader").text;
+ gl.shaderSource(vertexShader, vertexShaderString);
+ gl.compileShader(vertexShader);
+
+ var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
+ var fragmentShaderString = document.getElementById("fragmentShader").text;
+ gl.shaderSource(fragmentShader, fragmentShaderString);
+ gl.compileShader(fragmentShader);
+
+ var program = gl.createProgram();
+ gl.attachShader(program, vertexShader);
+ gl.attachShader(program, fragmentShader);
+ gl.linkProgram(program);
+ gl.useProgram(program);
+
+ var vertexPositionAttrLoc = gl.getAttribLocation(program, "vertexPosition");
+ gl.enableVertexAttribArray(vertexPositionAttrLoc);
+ var normalVectorAttrLoc = gl.getAttribLocation(program, "normalVector");
+ gl.enableVertexAttribArray(normalVectorAttrLoc);
+ var textureCoordAttrLoc = gl.getAttribLocation(program, "textureCoord");
+ gl.enableVertexAttribArray(textureCoordAttrLoc);
+
+ modelviewUniformLoc = gl.getUniformLocation(program, "modelview");
+ projectionUniformLoc = gl.getUniformLocation(program, "projection");
+ lightDirectionUniformLoc = gl.getUniformLocation(program, "lightDirection");
+ grassTextureSamplerUniformLoc = gl.getUniformLocation(program, "grassTextureSampler");
+
+ var vertices = new Float32Array(terrainSize * terrainSize * 3);
+ var normalVectors = new Float32Array(terrainSize * terrainSize * 3);
+ var textureCoords = new Float32Array(terrainSize * terrainSize * 2);
+
+ for (var i = 0; i < terrainSize; i++) {
+ for (var j = 0; j < terrainSize; j++) {
+ var a = 2 * Math.PI * i / terrainSize;
+ var b = 2 * Math.PI * j / terrainSize;
+ var height = 4 * Math.cos(a) + 6 * Math.sin(b) + Math.cos(4 * a) + Math.sin(5 * b);
+ vertices[3 * (i + terrainSize * j) + 0] = i;
+ vertices[3 * (i + terrainSize * j) + 1] = height;
+ vertices[3 * (i + terrainSize * j) + 2] = j;
+
+ var d_y_d_x = (2 * Math.PI / terrainSize) * (-4 * Math.sin(a) - 4 * Math.sin(4 * a));
+ var d_y_d_z = (2 * Math.PI / terrainSize) * (6 * Math.cos(b) + 5 * Math.cos(5 * b));
+ var normal_x = d_y_d_x;
+ var normal_y = -1;
+ var normal_z = d_y_d_z;
+ var normal_length = Math.sqrt(normal_x * normal_x + normal_y * normal_y + normal_z * normal_z);
+ normalVectors[3 * (i + terrainSize * j) + 0] = normal_x / normal_length;
+ normalVectors[3 * (i + terrainSize * j) + 1] = normal_y / normal_length;
+ normalVectors[3 * (i + terrainSize * j) + 2] = normal_z / normal_length;
+
+ var textureRepeatingSpeed = 0.5;
+ textureCoords[2 * (i + terrainSize * j) + 0] = i * textureRepeatingSpeed;
+ textureCoords[2 * (i + terrainSize * j) + 1] = j * textureRepeatingSpeed;
+ }
+ }
+
+ var vertexPositionBuffer = gl.createBuffer();
+ gl.bindBuffer(gl.ARRAY_BUFFER, vertexPositionBuffer);
+ gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);
+ gl.vertexAttribPointer(vertexPositionAttrLoc, 3, gl.FLOAT, false, 0, 0);
+
+ var normalVectorBuffer = gl.createBuffer();
+ gl.bindBuffer(gl.ARRAY_BUFFER, normalVectorBuffer);
+ gl.bufferData(gl.ARRAY_BUFFER, normalVectors, gl.STATIC_DRAW);
+ gl.vertexAttribPointer(normalVectorAttrLoc, 3, gl.FLOAT, false, 0, 0);
+
+ var textureCoordBuffer = gl.createBuffer();
+ gl.bindBuffer(gl.ARRAY_BUFFER, textureCoordBuffer);
+ gl.bufferData(gl.ARRAY_BUFFER, textureCoords, gl.STATIC_DRAW);
+ gl.vertexAttribPointer(textureCoordAttrLoc, 2, gl.FLOAT, false, 0, 0);
+
+ var indexBuffer = gl.createBuffer();
+ gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);
+ var indices = [];
+ for (var k = 0; k < terrainSize - 1; k++) {
+ for (var l = 0; l < terrainSize - 1; l++) {
+ indices.push(k + terrainSize * l);
+ indices.push(k + 1 + terrainSize * l);
+ indices.push(k + 1 + terrainSize * (l + 1));
+
+ indices.push(k + terrainSize * l);
+ indices.push(k + 1 + terrainSize * (l + 1));
+ indices.push(k + terrainSize * (l + 1));
+ }
+ }
+ gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(indices), gl.STATIC_DRAW);
+
+ gl.enable(gl.DEPTH_TEST);
+
+ onresize();
+ window.addEventListener("resize", onresize);
+
+ startTestLoop(doneCallback);
+ }
+
+ function average(arr) {
+ var sum = 0;
+ for (var i in arr)
+ sum += arr[i];
+ return sum / (arr.length || 1);
+ }
+
+ // We use sample stddev and not population stddev because
+ // well.. it's a sample and we can't collect all/infinite number of frames.
+ function sampleStdDev(arr) {
+ if (arr.length <= 1) {
+ return 0;
+ }
+ var avg = average(arr);
+
+ var squareDiffArr = arr.map( function(v) { return Math.pow(v - avg, 2); } );
+ var sum = squareDiffArr.reduce( function(a, b) { return a + b; } );
+ var rv = Math.sqrt(sum / (arr.length - 1));
+ return rv;
+ }
+
+ const PRETEST_DELAY_MS = 500;
+ const WARMUP_TIMESTAMPS = 30; // Must be at least 2
+ const MEASURED_FRAMES = 100;
+
+ var gDoneCallback = function placeholder(intervals) {};
+ var gCurrentTimestamp = 0;
+ var gResultTimestamps = [];
+
+ function startTestLoop(doneCallback) {
+ gDoneCallback = doneCallback;
+ gCurrentTimestamp = 0;
+ gResultTimestamps = new Array(WARMUP_TIMESTAMPS + MEASURED_FRAMES);
+
+ TalosContentProfiler.subtestStart("Starting requestAnimationFrame loop", true).then(() => {
+ requestAnimationFrame(draw);
+ });
+ }
+
+ function draw(timestamp) {
+ // It's possible that under some implementations (even if not our current one),
+ // the rAF callback arg will be in some way "optimized", e.g. always point to the
+ // estimated next vsync timestamp, in order to allow the callee to have less
+ // jitter in its time-dependent positioning/processing.
+ // Such behaviour would harm our measurements, especially with vsync off.
+ // performance.now() will not have this potential issue and is high-resolution.
+ gResultTimestamps[gCurrentTimestamp++] = performance.now();
+ var recordedTimestamps = gCurrentTimestamp;
+ if (recordedTimestamps >= WARMUP_TIMESTAMPS + MEASURED_FRAMES) {
+ TalosContentProfiler.subtestEnd("requestAnimationFrame loop", true).then(() => {
+ var intervals = [];
+ var lastWarmupTimestampId = WARMUP_TIMESTAMPS - 1;
+ for (var i = lastWarmupTimestampId + 1; i < gResultTimestamps.length; i++) {
+ intervals.push(gResultTimestamps[i] - gResultTimestamps[i - 1]);
+ }
+
+ gDoneCallback(intervals);
+ });
+
+ return;
+ }
+
+ // Used for rendering reproducible frames which are independent of actual performance (timestamps).
+ var simulatedTimestamp = gCurrentTimestamp * 1000 / 60;
+
+ var speed = 0.001;
+ var angle = simulatedTimestamp * speed;
+ var c = Math.cos(angle / 10);
+ var s = Math.sin(angle / 10);
+ var light_x = Math.cos(angle);
+ var light_y = -1;
+ var light_z = Math.sin(angle);
+ var l = Math.sqrt(light_x * light_x + light_y * light_y + light_z * light_z);
+ light_x /= l;
+ light_y /= l;
+ light_z /= l;
+ gl.uniform3f(lightDirectionUniformLoc, light_x, light_y, light_z);
+
+ modelviewMatrix[0] = c;
+ modelviewMatrix[1] = 0;
+ modelviewMatrix[2] = s;
+ modelviewMatrix[3] = 0;
+
+ modelviewMatrix[4] = 0;
+ modelviewMatrix[5] = 1;
+ modelviewMatrix[6] = 0;
+ modelviewMatrix[7] = 0;
+
+ modelviewMatrix[8] = -s;
+ modelviewMatrix[9] = 0;
+ modelviewMatrix[10] = c;
+ modelviewMatrix[11] = 0;
+
+ modelviewMatrix[12] = -terrainSize / 2;
+ modelviewMatrix[13] = 0;
+ modelviewMatrix[14] = -terrainSize;
+ modelviewMatrix[15] = 1;
+
+ gl.uniformMatrix4fv(modelviewUniformLoc, false, modelviewMatrix);
+
+ var fieldOfViewY = Math.PI / 4;
+ aspectRatio = gl.drawingBufferWidth / gl.drawingBufferHeight;
+ var zNear = 1;
+ var zFar = terrainSize;
+
+ projectionMatrix[0] = fieldOfViewY / aspectRatio;
+ projectionMatrix[1] = 0;
+ projectionMatrix[2] = 0;
+ projectionMatrix[3] = 0;
+
+ projectionMatrix[4] = 0;
+ projectionMatrix[5] = fieldOfViewY;
+ projectionMatrix[6] = 0;
+ projectionMatrix[7] = 0;
+
+ projectionMatrix[8] = 0;
+ projectionMatrix[9] = 0;
+ projectionMatrix[10] = (zNear + zFar) / (zNear - zFar);
+ projectionMatrix[11] = -1;
+
+ projectionMatrix[12] = 0;
+ projectionMatrix[13] = 0;
+ projectionMatrix[14] = 2 * zNear * zFar / (zNear - zFar);
+ projectionMatrix[15] = 0;
+
+ gl.uniformMatrix4fv(projectionUniformLoc, false, projectionMatrix);
+
+ gl.uniform1i(grassTextureSamplerUniformLoc, 0);
+
+ gl.clearColor(0.4, 0.6, 1.0, 0.5);
+ gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
+ gl.drawElements(gl.TRIANGLES, (terrainSize - 1) * (terrainSize - 1) * 6, gl.UNSIGNED_SHORT, 0);
+
+ if (gCurrentTimestamp == 1) {
+ // First frame only - wait a bit (after rendering the scene once)
+ requestAnimationFrame(function() {
+ setTimeout(requestAnimationFrame, PRETEST_DELAY_MS, draw);
+ });
+ } else {
+ requestAnimationFrame(draw);
+ }
+ }
+
+ function onresize() {
+ var canvas = document.getElementById("c");
+ canvas.width = window.innerWidth;
+ canvas.height = window.innerHeight;
+ aspectRatio = canvas.width / canvas.height;
+ gl.viewport(0, 0, canvas.width, canvas.height);
+ }
+
+ var gResults = {values: [], names: [], raw: []};
+
+ function setupAndRun(alpha, antialias, name, doneCallback) {
+ // Remove the old canvas if exists, and create a new one for the new run
+ var c = document.getElementById("c");
+ if (c)
+ c.remove();
+ c = document.createElement("canvas");
+ c.id = "c";
+ document.body.insertBefore(c, document.body.firstChild);
+
+ // Trigger the run with specified args, with callback function to process the result
+ startTest(alpha, antialias, function(intervals) {
+ gResults.names.push(name);
+ gResults.raw.push(intervals);
+ setTimeout(doneCallback, 0);
+ });
+ }
+
+ function reportResults(results) {
+ // Format a nice human-readable report
+ var msg = "";
+ for (var i = 0; i < results.names.length; i++) {
+ var data = results.raw[i];
+ var avg = average(data);
+ gResults.values.push(avg); // This is the only "official" reported value for this set
+ var sd = sampleStdDev(data);
+
+ // Compose a nice human readable message. Not used officially anywhere.
+ msg += results.names[i] + "= Average: " + avg.toFixed(2)
+ + " stddev: " + sd.toFixed(1) + " (" + (100 * sd / avg).toFixed(1) + "%)"
+ + "\nIntervals: " + data.map(function(v) {
+ // Display with 1 decimal point digit, and make excessively big values noticeable.
+ var value = v.toFixed(1);
+ // Not scientific, but intervals over 2 * average are.. undesirable.
+ var threshold = avg * 2;
+ return v < threshold ? value : " [_" + value + "_] ";
+ }).join(" ")
+ + "\n\n";
+ }
+ dump(msg); // Put the readable report at talos run-log
+
+ if (window.tpRecordTime) {
+ // within talos - report the results
+ return tpRecordTime(results.values.join(","), 0, results.names.join(","));
+ }
+ // Local run in a plain browser, display the formatted report
+ alert(msg);
+ return undefined;
+ }
+
+ // The full test starts here
+ function test() {
+ // We initially hide the <body>, to reduce the chance of spinning our wheels
+ // with incremental ASAP-paint-mode paints during pageload. Now that onload
+ // has fired, we un-hide it:
+ document.body.style.display = "";
+
+ gResults = {values: [], names: [], raw: []};
+ // This test measures average frame interval during WebGL animation as follows:
+ // 1. Creates a new WebGL canvas.
+ // 2. setup the scene and render 1 frame.
+ // 3. Idle a bit (500ms).
+ // 4. Render/Animate several (129) frames using requestAnimationFrame.
+ // 5. Average the intervals of the last (100) frames <-- the result.
+ //
+ // The reason for the initial idle is to allow some internal cleanups (like CC/GC etc).
+ // The unmeasured warmup rendering intervals are to allow Firefox to settle at a consistent rate.
+ // The idle + warmup are common practices in benchmarking where we're mostly interested
+ // in the stable/consistent throughput rather than in the throughput during transition state
+ // from idle to iterating.
+
+ // Run the same sequence 4 times for all combination of alpha and antialias
+ // (Not using promises chaining for better compatibility, ending up with nesting instead)
+ // talos unfortunately trims common prefixes, so we prefix with a running number to keep the full name
+ setupAndRun(false, false, "0.WebGL-terrain-alpha-no-AA-no", function() {
+ setupAndRun(false, true, "1.WebGL-terrain-alpha-no-AA-yes", function() {
+ setupAndRun(true, false, "2.WebGL-terrain-alpha-yes-AA-no", function() {
+ setupAndRun(true, true, "3.WebGL-terrain-alpha-yes-AA-yes", function() {
+ reportResults(gResults);
+ });
+ });
+ });
+ });
+ }
+</script>
+</head>
+<body onload="test();" style="overflow:hidden; margin:0; display:none">
+<canvas id="c"></canvas>
+<img src="grass.jpeg" style="display:none" id="grass"/>
+</body>
diff --git a/testing/talos/talos/tests/webgl/benchmarks/video/video_upload.html b/testing/talos/talos/tests/webgl/benchmarks/video/video_upload.html
new file mode 100644
index 0000000000..7fe36ba020
--- /dev/null
+++ b/testing/talos/talos/tests/webgl/benchmarks/video/video_upload.html
@@ -0,0 +1,72 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ - You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<html>
+<head>
+<script src="resource://talos-powers/TalosPowersContent.js"></script>
+<script type="text/javascript" src="resource://talos-powers/TalosContentProfiler.js"></script>
+<script language="javascript" type="text/javascript">
+const kTotalTicks = 100;
+var start;
+var gl = document.createElement("canvas").getContext("webgl");
+gl.bindTexture(gl.TEXTURE_2D, gl.createTexture());
+var video;
+video = document.createElement("video");
+video.src = "../../../video/clips/testsrc.1080p.60fps.mp4";
+video.addEventListener("playing", playingListener, true); // loadstart?
+video.loop = true;
+
+function init() {
+ TalosPowersContent.focus(content_focused);
+}
+
+function content_focused() {
+ TalosContentProfiler.subtestStart("glvideo start", true).then(() => {
+ video.play();
+ });
+}
+
+function playingListener() {
+ video.removeEventListener("playing", playingListener, true);
+ start = performance.now();
+ tick();
+}
+
+var tickCount = 0;
+function tick() {
+ if (tickCount >= kTotalTicks) {
+ var elapsed = performance.now() - start;
+ TalosContentProfiler.subtestEnd("glvideo", true).then(() => {
+ reportResult(elapsed, kTotalTicks);
+ });
+ return;
+ }
+
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, video);
+ ++tickCount;
+
+ window.setTimeout(tick, 0);
+}
+
+function reportResult(totalTime, totalTicks) {
+ var meanTickTime = totalTime / totalTicks;
+ var desc = "Mean tick time across " + totalTicks + " ticks: ";
+ var text = desc + meanTickTime + " ms\n";
+
+ dump("[talos glvideo result] " + text);
+
+ if (window.tpRecordTime) {
+ // Within talos - report the results
+ return tpRecordTime(meanTickTime, 0, desc);
+ }
+ // Local run in a plain browser, display the formatted report
+ alert("[talos glvideo result] " + text);
+
+ return undefined;
+}
+</script>
+
+</head>
+<body id="body" onload="init();">
+</body>
+</html>
diff --git a/testing/talos/talos/tests/webgl/glterrain.manifest b/testing/talos/talos/tests/webgl/glterrain.manifest
new file mode 100644
index 0000000000..8333ee7aeb
--- /dev/null
+++ b/testing/talos/talos/tests/webgl/glterrain.manifest
@@ -0,0 +1 @@
+% http://localhost/tests/webgl/benchmarks/terrain/perftest.html
diff --git a/testing/talos/talos/tests/webgl/glvideo.manifest b/testing/talos/talos/tests/webgl/glvideo.manifest
new file mode 100644
index 0000000000..64bfeb5ab1
--- /dev/null
+++ b/testing/talos/talos/tests/webgl/glvideo.manifest
@@ -0,0 +1 @@
+% http://localhost/tests/webgl/benchmarks/video/video_upload.html \ No newline at end of file
diff --git a/testing/talos/talos/ttest.py b/testing/talos/talos/ttest.py
new file mode 100644
index 0000000000..46cc53265a
--- /dev/null
+++ b/testing/talos/talos/ttest.py
@@ -0,0 +1,290 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+"""A generic means of running an URL based browser test
+ follows the following steps
+ - creates a profile
+ - tests the profile
+ - gets metrics for the current test environment
+ - loads the url
+ - collects info on any counters while test runs
+ - waits for a 'dump' from the browser
+"""
+import json
+import os
+import platform
+import shutil
+import subprocess
+import sys
+import time
+
+import mozcrash
+import mozfile
+import six
+from mozlog import get_proxy_logger
+
+from talos import results, talosconfig, utils
+from talos.cmanager import CounterManagement
+from talos.ffsetup import FFSetup
+from talos.talos_process import run_browser
+from talos.utils import TalosCrash, TalosError, TalosRegression, run_in_debug_mode
+
+LOG = get_proxy_logger()
+
+
+class TTest(object):
+ def check_for_crashes(self, browser_config, minidump_dir, test_name):
+ # check for minidumps
+ found = mozcrash.check_for_crashes(
+ minidump_dir, browser_config["symbols_path"], test_name=test_name
+ )
+ mozfile.remove(minidump_dir)
+
+ if found:
+ raise TalosCrash("Found crashes after test run, terminating test")
+
+ def runTest(self, browser_config, test_config, utility_path=None):
+ """
+ Runs an url based test on the browser as specified in the
+ browser_config dictionary
+
+ Args:
+ browser_config: Dictionary of configuration options for the
+ browser (paths, prefs, etc)
+ test_config : Dictionary of configuration for the given
+ test (url, cycles, counters, etc)
+
+ """
+
+ with FFSetup(browser_config, test_config) as setup:
+ return self._runTest(
+ browser_config, test_config, setup, utility_path=utility_path
+ )
+
+ @staticmethod
+ def _get_counter_prefix():
+ if platform.system() == "Linux":
+ return "linux"
+ elif platform.system() in ("Windows", "Microsoft"):
+ if "6.1" in platform.version(): # w7
+ return "w7"
+ elif "6.2" in platform.version(): # w8
+ return "w8"
+ # Bug 1264325 - FIXME: with python 2.7.11: reports win8 instead of 8.1
+ elif "6.3" in platform.version():
+ return "w8"
+ # Bug 1264325 - FIXME: with python 2.7.11: reports win8 instead of 10
+ elif "10.0" in platform.version():
+ return "w8"
+ else:
+ raise TalosError("unsupported windows version")
+ elif platform.system() == "Darwin":
+ return "mac"
+
+ def _runTest(self, browser_config, test_config, setup, utility_path=None):
+ minidump_dir = os.path.join(setup.profile_dir, "minidumps")
+ counters = test_config.get("%s_counters" % self._get_counter_prefix(), [])
+ resolution = test_config["resolution"]
+
+ # add the mainthread_io to the environment variable, as defined
+ # in test.py configs
+ here = os.path.dirname(os.path.realpath(__file__))
+ if test_config["mainthread"]:
+ mainthread_io = os.path.join(here, "mainthread_io.log")
+ setup.env["MOZ_MAIN_THREAD_IO_LOG"] = mainthread_io
+
+ # set url if there is one (i.e. receiving a test page, not a manifest/pageloader test)
+ if test_config.get("url", None) is not None:
+ test_config["url"] = utils.interpolate(
+ test_config["url"],
+ profile=setup.profile_dir,
+ firefox=browser_config["browser_path"],
+ )
+ else:
+ setup.env["MOZ_USE_PAGELOADER"] = "1"
+
+ # setup global (cross-cycle) responsiveness counters
+ global_counters = {}
+ if browser_config.get("xperf_path"):
+ for c in test_config.get("xperf_counters", []):
+ global_counters[c] = []
+
+ if test_config.get("responsiveness") and platform.system() != "Darwin":
+ # ignore osx for now as per bug 1245793
+ setup.env["MOZ_INSTRUMENT_EVENT_LOOP"] = "1"
+ setup.env["MOZ_INSTRUMENT_EVENT_LOOP_THRESHOLD"] = "20"
+ setup.env["MOZ_INSTRUMENT_EVENT_LOOP_INTERVAL"] = "10"
+ global_counters["responsiveness"] = []
+
+ setup.env["MOZ_DISABLE_NONLOCAL_CONNECTIONS"] = "1"
+
+ # instantiate an object to hold test results
+ test_results = results.TestResults(
+ test_config, global_counters, browser_config.get("framework")
+ )
+
+ for i in six.moves.range(test_config["cycles"]):
+ time.sleep(0.25)
+ LOG.info(
+ "Running cycle %d/%d for %s test..."
+ % (i + 1, test_config["cycles"], test_config["name"])
+ )
+
+ # remove the browser error file
+ mozfile.remove(browser_config["error_filename"])
+
+ # individual tests can have different frameworks
+ # TODO: ensure that we don't run >1 test with custom frameworks
+ if test_config.get("perfherder_framework", None) is not None:
+ test_results.framework = test_config["perfherder_framework"]
+
+ if browser_config.get("browser_version", None) is not None:
+ test_results.browser_name = browser_config["browser_name"]
+ test_results.browser_version = browser_config["browser_version"]
+
+ # reinstall any file whose stability we need to ensure across
+ # the cycles
+ if test_config.get("reinstall", ""):
+ for keep in test_config["reinstall"]:
+ origin = os.path.join(test_config["profile_path"], keep)
+ dest = os.path.join(setup.profile_dir, keep)
+ LOG.debug("Reinstalling %s on top of %s" % (origin, dest))
+ shutil.copy(origin, dest)
+
+ # Run the test
+ timeout = test_config.get("timeout", 600) # 10 minutes default
+ if setup.gecko_profile:
+ # When profiling, give the browser some extra time
+ # to dump the profile.
+ timeout += 5 * 60
+ # store profiling info for pageloader; too late to add it as browser pref
+ setup.env["TPPROFILINGINFO"] = json.dumps(
+ setup.gecko_profile.profiling_info
+ )
+
+ command_args = utils.GenerateBrowserCommandLine(
+ browser_config["browser_path"],
+ browser_config["extra_args"],
+ setup.profile_dir,
+ test_config["url"],
+ profiling_info=(
+ setup.gecko_profile.profiling_info if setup.gecko_profile else None
+ ),
+ )
+
+ mainthread_error_count = 0
+ if test_config["setup"]:
+ # Generate bcontroller.json for xperf
+ talosconfig.generateTalosConfig(
+ command_args, browser_config, test_config
+ )
+ subprocess.call(
+ ["python"] + test_config["setup"].split(),
+ )
+
+ counter_management = None
+ if counters:
+ counter_management = CounterManagement(
+ browser_config["process"], counters, resolution
+ )
+
+ try:
+ pcontext = run_browser(
+ command_args,
+ minidump_dir,
+ timeout=timeout,
+ env=setup.env,
+ # start collecting counters as soon as possible
+ on_started=(
+ counter_management.start if counter_management else None
+ ),
+ debug=browser_config["debug"],
+ debugger=browser_config["debugger"],
+ debugger_args=browser_config["debugger_args"],
+ utility_path=utility_path,
+ )
+ except Exception:
+ self.check_for_crashes(
+ browser_config, minidump_dir, test_config["name"]
+ )
+ raise
+ finally:
+ if counter_management:
+ counter_management.stop()
+
+ try:
+ if test_config["mainthread"]:
+ rawlog = os.path.join(here, "mainthread_io.log")
+ if os.path.exists(rawlog):
+ processedlog = os.path.join(here, "mainthread_io.json")
+ xre_path = os.path.dirname(browser_config["browser_path"])
+ mtio_py = os.path.join(here, "mainthreadio.py")
+ command = ["python", mtio_py, rawlog, processedlog, xre_path]
+ mtio = subprocess.Popen(
+ command, env=os.environ.copy(), stdout=subprocess.PIPE
+ )
+ output, stderr = mtio.communicate()
+ for line in output.split(b"\n"):
+ if line.strip() == b"":
+ continue
+
+ print(line)
+ mainthread_error_count += 1
+ mozfile.remove(rawlog)
+
+ if test_config["cleanup"]:
+ # HACK: add the pid to support xperf where we require
+ # the pid in post processing
+ talosconfig.generateTalosConfig(
+ command_args, browser_config, test_config, pid=pcontext.pid
+ )
+ subprocess.call([sys.executable] + test_config["cleanup"].split())
+
+ # For startup tests, we launch the browser multiple times
+ # with the same profile
+ for fname in ("sessionstore.js", ".parentlock", "sessionstore.bak"):
+ mozfile.remove(os.path.join(setup.profile_dir, fname))
+
+ # check for xperf errors
+ if (
+ os.path.exists(browser_config["error_filename"])
+ or mainthread_error_count > 0
+ ):
+ raise TalosRegression(
+ "Talos has found a regression, if you have questions"
+ " ask for help in matrix on the #perftest channel"
+ )
+
+ # add the results from the browser output
+ if not run_in_debug_mode(browser_config):
+ test_results.add(
+ "\n".join(pcontext.output),
+ counter_results=(
+ counter_management.results() if counter_management else None
+ ),
+ )
+
+ if setup.gecko_profile:
+ setup.gecko_profile.symbolicate(i)
+
+ finally:
+ self.check_for_crashes(
+ browser_config, minidump_dir, test_config["name"]
+ )
+
+ # include global (cross-cycle) counters
+ test_results.all_counter_results.extend(
+ [{key: value} for key, value in global_counters.items()]
+ )
+ for c in test_results.all_counter_results:
+ for key, value in c.items():
+ LOG.debug("COUNTER %r: %s" % (key, value))
+
+ # if running against a code-coverage instrumented build, move the
+ # produced gcda files to a folder where they will be collected later
+ if browser_config.get("code_coverage", False):
+ setup.collect_or_clean_ccov()
+
+ # return results
+ return test_results
diff --git a/testing/talos/talos/unittests/__init__.py b/testing/talos/talos/unittests/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/testing/talos/talos/unittests/__init__.py
diff --git a/testing/talos/talos/unittests/browser_output.ts.txt b/testing/talos/talos/unittests/browser_output.ts.txt
new file mode 100644
index 0000000000..90b59744db
--- /dev/null
+++ b/testing/talos/talos/unittests/browser_output.ts.txt
@@ -0,0 +1,8 @@
+__start_report392__end_report
+
+Failed to load native module at path '/home/jhammel/firefox/components/libmozgnome.so': (80004005) libnotify.so.1: cannot open shared object file: No such file or directory
+Could not read chrome manifest 'file:///home/jhammel/firefox/extensions/%7B972ce4c6-7e08-4474-a285-3208198ce6fd%7D/chrome.manifest'.
+[JavaScript Warning: "Use of enablePrivilege is deprecated. Please use code that runs with the system principal (e.g. an extension) instead." {file: "http://localhost:15707/startup_test/startup_test.html?begin=1333663595557" line: 0}]
+__startTimestamp1333663595953__endTimestamp
+__startBeforeLaunchTimestamp1333663595557__endBeforeLaunchTimestamp
+__startAfterTerminationTimestamp1333663596551__endAfterTerminationTimestamp
diff --git a/testing/talos/talos/unittests/browser_output.tsvg.txt b/testing/talos/talos/unittests/browser_output.tsvg.txt
new file mode 100644
index 0000000000..f220f8627f
--- /dev/null
+++ b/testing/talos/talos/unittests/browser_output.tsvg.txt
@@ -0,0 +1,214 @@
+RSS: Main: 54116352
+
+Cycle 1(1): loaded http://localhost:15707/page_load_test/svg/gearflowers.svg (next: http://localhost:15707/page_load_test/svg/composite-scale.svg)
+RSS: Main: 57442304
+
+Cycle 1(1): loaded http://localhost:15707/page_load_test/svg/composite-scale.svg (next: http://localhost:15707/page_load_test/svg/composite-scale-opacity.svg)
+RSS: Main: 57868288
+
+Cycle 1(1): loaded http://localhost:15707/page_load_test/svg/composite-scale-opacity.svg (next: http://localhost:15707/page_load_test/svg/composite-scale-rotate.svg)
+RSS: Main: 57880576
+
+Cycle 1(1): loaded http://localhost:15707/page_load_test/svg/composite-scale-rotate.svg (next: http://localhost:15707/page_load_test/svg/composite-scale-rotate-opacity.svg)
+RSS: Main: 58232832
+
+Cycle 1(1): loaded http://localhost:15707/page_load_test/svg/composite-scale-rotate-opacity.svg (next: http://localhost:15707/page_load_test/svg/hixie-001.xml)
+RSS: Main: 56283136
+
+Cycle 1(1): loaded http://localhost:15707/page_load_test/svg/hixie-001.xml (next: http://localhost:15707/page_load_test/svg/hixie-002.xml)
+RSS: Main: 58114048
+
+Cycle 1(1): loaded http://localhost:15707/page_load_test/svg/hixie-002.xml (next: http://localhost:15707/page_load_test/svg/hixie-003.xml)
+RSS: Main: 55123968
+
+Cycle 1(1): loaded http://localhost:15707/page_load_test/svg/hixie-003.xml (next: http://localhost:15707/page_load_test/svg/hixie-004.xml)
+RSS: Main: 57470976
+
+Cycle 1(1): loaded http://localhost:15707/page_load_test/svg/hixie-004.xml (next: http://localhost:15707/page_load_test/svg/hixie-005.xml)
+RSS: Main: 57995264
+
+Cycle 1(1): loaded http://localhost:15707/page_load_test/svg/hixie-005.xml (next: http://localhost:15707/page_load_test/svg/hixie-006.xml)
+RSS: Main: 58552320
+
+Cycle 1(1): loaded http://localhost:15707/page_load_test/svg/hixie-006.xml (next: http://localhost:15707/page_load_test/svg/hixie-007.xml)
+RSS: Main: 58793984
+
+Cycle 1(1): loaded http://localhost:15707/page_load_test/svg/hixie-007.xml (next: http://localhost:15707/page_load_test/svg/gearflowers.svg)
+RSS: Main: 59756544
+
+RSS: Main: 59756544
+
+Cycle 2(1): loaded http://localhost:15707/page_load_test/svg/gearflowers.svg (next: http://localhost:15707/page_load_test/svg/composite-scale.svg)
+RSS: Main: 61984768
+
+Cycle 2(1): loaded http://localhost:15707/page_load_test/svg/composite-scale.svg (next: http://localhost:15707/page_load_test/svg/composite-scale-opacity.svg)
+RSS: Main: 62033920
+
+Cycle 2(1): loaded http://localhost:15707/page_load_test/svg/composite-scale-opacity.svg (next: http://localhost:15707/page_load_test/svg/composite-scale-rotate.svg)
+RSS: Main: 62033920
+
+Cycle 2(1): loaded http://localhost:15707/page_load_test/svg/composite-scale-rotate.svg (next: http://localhost:15707/page_load_test/svg/composite-scale-rotate-opacity.svg)
+RSS: Main: 62058496
+
+Cycle 2(1): loaded http://localhost:15707/page_load_test/svg/composite-scale-rotate-opacity.svg (next: http://localhost:15707/page_load_test/svg/hixie-001.xml)
+RSS: Main: 59916288
+
+Cycle 2(1): loaded http://localhost:15707/page_load_test/svg/hixie-001.xml (next: http://localhost:15707/page_load_test/svg/hixie-002.xml)
+RSS: Main: 58867712
+
+Cycle 2(1): loaded http://localhost:15707/page_load_test/svg/hixie-002.xml (next: http://localhost:15707/page_load_test/svg/hixie-003.xml)
+RSS: Main: 58101760
+
+Cycle 2(1): loaded http://localhost:15707/page_load_test/svg/hixie-003.xml (next: http://localhost:15707/page_load_test/svg/hixie-004.xml)
+RSS: Main: 58953728
+
+Cycle 2(1): loaded http://localhost:15707/page_load_test/svg/hixie-004.xml (next: http://localhost:15707/page_load_test/svg/hixie-005.xml)
+RSS: Main: 59559936
+
+Cycle 2(1): loaded http://localhost:15707/page_load_test/svg/hixie-005.xml (next: http://localhost:15707/page_load_test/svg/hixie-006.xml)
+RSS: Main: 58613760
+
+Cycle 2(1): loaded http://localhost:15707/page_load_test/svg/hixie-006.xml (next: http://localhost:15707/page_load_test/svg/hixie-007.xml)
+RSS: Main: 58822656
+
+Cycle 2(1): loaded http://localhost:15707/page_load_test/svg/hixie-007.xml (next: http://localhost:15707/page_load_test/svg/gearflowers.svg)
+RSS: Main: 61407232
+
+RSS: Main: 61407232
+
+Cycle 3(1): loaded http://localhost:15707/page_load_test/svg/gearflowers.svg (next: http://localhost:15707/page_load_test/svg/composite-scale.svg)
+RSS: Main: 62328832
+
+Cycle 3(1): loaded http://localhost:15707/page_load_test/svg/composite-scale.svg (next: http://localhost:15707/page_load_test/svg/composite-scale-opacity.svg)
+RSS: Main: 62447616
+
+Cycle 3(1): loaded http://localhost:15707/page_load_test/svg/composite-scale-opacity.svg (next: http://localhost:15707/page_load_test/svg/composite-scale-rotate.svg)
+RSS: Main: 62382080
+
+Cycle 3(1): loaded http://localhost:15707/page_load_test/svg/composite-scale-rotate.svg (next: http://localhost:15707/page_load_test/svg/composite-scale-rotate-opacity.svg)
+RSS: Main: 62398464
+
+Cycle 3(1): loaded http://localhost:15707/page_load_test/svg/composite-scale-rotate-opacity.svg (next: http://localhost:15707/page_load_test/svg/hixie-001.xml)
+RSS: Main: 60207104
+
+Cycle 3(1): loaded http://localhost:15707/page_load_test/svg/hixie-001.xml (next: http://localhost:15707/page_load_test/svg/hixie-002.xml)
+RSS: Main: 59191296
+
+Cycle 3(1): loaded http://localhost:15707/page_load_test/svg/hixie-002.xml (next: http://localhost:15707/page_load_test/svg/hixie-003.xml)
+RSS: Main: 59179008
+
+Cycle 3(1): loaded http://localhost:15707/page_load_test/svg/hixie-003.xml (next: http://localhost:15707/page_load_test/svg/hixie-004.xml)
+RSS: Main: 59752448
+
+Cycle 3(1): loaded http://localhost:15707/page_load_test/svg/hixie-004.xml (next: http://localhost:15707/page_load_test/svg/hixie-005.xml)
+RSS: Main: 59912192
+
+Cycle 3(1): loaded http://localhost:15707/page_load_test/svg/hixie-005.xml (next: http://localhost:15707/page_load_test/svg/hixie-006.xml)
+RSS: Main: 58626048
+
+Cycle 3(1): loaded http://localhost:15707/page_load_test/svg/hixie-006.xml (next: http://localhost:15707/page_load_test/svg/hixie-007.xml)
+RSS: Main: 59596800
+
+Cycle 3(1): loaded http://localhost:15707/page_load_test/svg/hixie-007.xml (next: http://localhost:15707/page_load_test/svg/gearflowers.svg)
+RSS: Main: 61300736
+
+RSS: Main: 61300736
+
+Cycle 4(1): loaded http://localhost:15707/page_load_test/svg/gearflowers.svg (next: http://localhost:15707/page_load_test/svg/composite-scale.svg)
+RSS: Main: 62353408
+
+Cycle 4(1): loaded http://localhost:15707/page_load_test/svg/composite-scale.svg (next: http://localhost:15707/page_load_test/svg/composite-scale-opacity.svg)
+RSS: Main: 62541824
+
+Cycle 4(1): loaded http://localhost:15707/page_load_test/svg/composite-scale-opacity.svg (next: http://localhost:15707/page_load_test/svg/composite-scale-rotate.svg)
+RSS: Main: 62488576
+
+Cycle 4(1): loaded http://localhost:15707/page_load_test/svg/composite-scale-rotate.svg (next: http://localhost:15707/page_load_test/svg/composite-scale-rotate-opacity.svg)
+RSS: Main: 62500864
+
+Cycle 4(1): loaded http://localhost:15707/page_load_test/svg/composite-scale-rotate-opacity.svg (next: http://localhost:15707/page_load_test/svg/hixie-001.xml)
+RSS: Main: 60387328
+
+Cycle 4(1): loaded http://localhost:15707/page_load_test/svg/hixie-001.xml (next: http://localhost:15707/page_load_test/svg/hixie-002.xml)
+RSS: Main: 59912192
+
+Cycle 4(1): loaded http://localhost:15707/page_load_test/svg/hixie-002.xml (next: http://localhost:15707/page_load_test/svg/hixie-003.xml)
+RSS: Main: 59858944
+
+Cycle 4(1): loaded http://localhost:15707/page_load_test/svg/hixie-003.xml (next: http://localhost:15707/page_load_test/svg/hixie-004.xml)
+RSS: Main: 60334080
+
+Cycle 4(1): loaded http://localhost:15707/page_load_test/svg/hixie-004.xml (next: http://localhost:15707/page_load_test/svg/hixie-005.xml)
+RSS: Main: 60751872
+
+Cycle 4(1): loaded http://localhost:15707/page_load_test/svg/hixie-005.xml (next: http://localhost:15707/page_load_test/svg/hixie-006.xml)
+RSS: Main: 60944384
+
+Cycle 4(1): loaded http://localhost:15707/page_load_test/svg/hixie-006.xml (next: http://localhost:15707/page_load_test/svg/hixie-007.xml)
+RSS: Main: 59129856
+
+Cycle 4(1): loaded http://localhost:15707/page_load_test/svg/hixie-007.xml (next: http://localhost:15707/page_load_test/svg/gearflowers.svg)
+RSS: Main: 61718528
+
+RSS: Main: 61718528
+
+Cycle 5(1): loaded http://localhost:15707/page_load_test/svg/gearflowers.svg (next: http://localhost:15707/page_load_test/svg/composite-scale.svg)
+RSS: Main: 62312448
+
+Cycle 5(1): loaded http://localhost:15707/page_load_test/svg/composite-scale.svg (next: http://localhost:15707/page_load_test/svg/composite-scale-opacity.svg)
+RSS: Main: 62607360
+
+Cycle 5(1): loaded http://localhost:15707/page_load_test/svg/composite-scale-opacity.svg (next: http://localhost:15707/page_load_test/svg/composite-scale-rotate.svg)
+RSS: Main: 62611456
+
+Cycle 5(1): loaded http://localhost:15707/page_load_test/svg/composite-scale-rotate.svg (next: http://localhost:15707/page_load_test/svg/composite-scale-rotate-opacity.svg)
+RSS: Main: 62570496
+
+Cycle 5(1): loaded http://localhost:15707/page_load_test/svg/composite-scale-rotate-opacity.svg (next: http://localhost:15707/page_load_test/svg/hixie-001.xml)
+RSS: Main: 60448768
+
+Cycle 5(1): loaded http://localhost:15707/page_load_test/svg/hixie-001.xml (next: http://localhost:15707/page_load_test/svg/hixie-002.xml)
+RSS: Main: 59535360
+
+Cycle 5(1): loaded http://localhost:15707/page_load_test/svg/hixie-002.xml (next: http://localhost:15707/page_load_test/svg/hixie-003.xml)
+RSS: Main: 59113472
+
+Cycle 5(1): loaded http://localhost:15707/page_load_test/svg/hixie-003.xml (next: http://localhost:15707/page_load_test/svg/hixie-004.xml)
+RSS: Main: 59822080
+
+Cycle 5(1): loaded http://localhost:15707/page_load_test/svg/hixie-004.xml (next: http://localhost:15707/page_load_test/svg/hixie-005.xml)
+RSS: Main: 60170240
+
+Cycle 5(1): loaded http://localhost:15707/page_load_test/svg/hixie-005.xml (next: http://localhost:15707/page_load_test/svg/hixie-006.xml)
+RSS: Main: 61100032
+
+Cycle 5(1): loaded http://localhost:15707/page_load_test/svg/hixie-006.xml (next: http://localhost:15707/page_load_test/svg/hixie-007.xml)
+RSS: Main: 59305984
+
+Cycle 5(1): loaded http://localhost:15707/page_load_test/svg/hixie-007.xml (next: http://localhost:15707/page_load_test/svg/gearflowers.svg)
+RSS: Main: 61734912
+
+__start_tp_report
+_x_x_mozilla_page_load
+_x_x_mozilla_page_load_details
+|i|pagename|runs|
+|0;gearflowers.svg;79;65;68;68;67
+|1;composite-scale.svg;46;35;44;41;42
+|2;composite-scale-opacity.svg;21;22;24;22;20
+|3;composite-scale-rotate.svg;23;21;21;20;19
+|4;composite-scale-rotate-opacity.svg;19;24;19;19;23
+|5;hixie-001.xml;45643;14976;17807;14971;17235
+|6;hixie-002.xml;51257;15193;21693;14969;14974
+|7;hixie-003.xml;5016;37375;5021;5024;5008
+|8;hixie-004.xml;5052;5053;5054;5054;5053
+|9;hixie-005.xml;4618;4533;4611;4532;4554
+|10;hixie-006.xml;5059;5107;9741;5107;5089
+|11;hixie-007.xml;1629;1651;1648;1652;1649
+__end_tp_report
+__start_cc_report
+_x_x_mozilla_cycle_collect,729
+__end_cc_report
+__startTimestamp1333666702130__endTimestamp
+
+__startBeforeLaunchTimestamp1333666292747__endBeforeLaunchTimestamp
+__startAfterTerminationTimestamp1333666702743__endAfterTerminationTimestamp
diff --git a/testing/talos/talos/unittests/conftest.py b/testing/talos/talos/unittests/conftest.py
new file mode 100644
index 0000000000..96cc9ca9b9
--- /dev/null
+++ b/testing/talos/talos/unittests/conftest.py
@@ -0,0 +1,47 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+import os
+
+here = os.path.realpath(__file__)
+__TESTS_DIR = os.path.join(os.path.dirname(os.path.dirname(here)), "tests")
+
+
+def remove_develop_files(starting_dir=__TESTS_DIR):
+ for file_name in os.listdir(starting_dir):
+ file_path = os.path.join(starting_dir, file_name)
+
+ if file_name.endswith(".develop") and os.path.isfile(file_path):
+ os.remove(file_path)
+ elif os.path.isdir(file_path):
+ remove_develop_files(file_path)
+
+
+def patched_build_manifest(config, manifestName):
+ # for unit testing, we aren't downloading the tp5 pageset; therefore
+ # manifest file doesn't exist; create a dummy one so we can continue
+ if not os.path.exists(manifestName):
+ try:
+ if not os.path.exists(os.path.dirname(manifestName)):
+ os.makedirs(os.path.dirname(manifestName))
+ f = open(manifestName, "w")
+ f.close()
+ except Exception as e:
+ raise (e)
+
+ # read manifest lines
+ with open(manifestName, "r") as fHandle:
+ manifestLines = fHandle.readlines()
+
+ # write modified manifest lines
+ with open(manifestName + ".develop", "w") as newHandle:
+ for line in manifestLines:
+ newline = line.replace("localhost", config["webserver"])
+ newline = newline.replace("page_load_test", "tests")
+ newHandle.write(newline)
+
+ newManifestName = manifestName + ".develop"
+
+ # return new manifest
+ return newManifestName
diff --git a/testing/talos/talos/unittests/profile.tgz b/testing/talos/talos/unittests/profile.tgz
new file mode 100644
index 0000000000..0ca4fe62d3
--- /dev/null
+++ b/testing/talos/talos/unittests/profile.tgz
Binary files differ
diff --git a/testing/talos/talos/unittests/ps-Acj.out b/testing/talos/talos/unittests/ps-Acj.out
new file mode 100644
index 0000000000..c0139143fe
--- /dev/null
+++ b/testing/talos/talos/unittests/ps-Acj.out
@@ -0,0 +1,44 @@
+USER PID PPID PGID SESS JOBC STAT TT TIME COMMAND
+root 1 0 1 d49fe78 0 Ss ?? 0:00.28 launchd
+root 10 1 10 d49fc08 0 Ss ?? 0:00.77 kextd
+root 11 1 11 d49fad0 0 Ss ?? 0:00.69 DirectoryService
+root 12 1 12 d49f998 0 Ss ?? 0:00.15 notifyd
+root 13 1 13 d49f860 0 Ss ?? 0:00.04 syslogd
+root 14 1 14 d49f728 0 Ss ?? 0:00.07 diskarbitrationd
+root 15 1 15 d49f5f0 0 Ss ?? 0:01.06 configd
+daemon 16 1 16 d49f4b8 0 Ss ?? 0:00.08 distnoted
+_mdnsresponder 17 1 17 d49f380 0 Ss ?? 0:01.93 mDNSResponder
+root 23 1 23 d49efd8 0 Ss ?? 0:00.12 securityd
+root 27 1 27 d49ed68 0 Ss ?? 0:00.27 httpd
+root 28 1 28 d49ec30 0 Ss ?? 0:00.04 krb5kdc
+_usbmuxd 31 1 31 db264b8 0 Ss ?? 0:00.07 usbmuxd
+root 35 1 35 d49e3a8 0 Ss ?? 0:00.02 RFBRegisterMDNS
+root 36 1 36 d49e270 0 Ss ?? 0:00.02 ptmd
+root 37 1 37 d49e000 0 Ss ?? 0:00.35 mds
+cltbld 38 1 38 d49e750 0 Ss ?? 0:00.25 loginwindow
+root 39 1 39 d49e138 0 Ss ?? 0:00.01 KernelEventAgent
+root 41 1 41 db26ad0 0 Ss ?? 0:00.01 hidd
+root 42 1 42 db26998 0 Ss ?? 0:00.15 fseventsd
+root 44 1 44 db26d40 0 Ss ?? 0:00.01 dynamic_pager
+root 50 1 50 db25ea0 0 Ss ?? 0:00.01 autofsd
+root 72 1 72 db26c08 0 Ss ?? 0:02.66 coreservicesd
+_www 73 27 27 d49ed68 0 S ?? 0:00.00 httpd
+_windowserver 74 1 74 d49e888 0 Ss ?? 0:01.72 WindowServer
+root 79 1 79 db26e78 0 Ss ?? 0:00.01 cvmsServ
+_coreaudiod 90 1 90 db26380 0 Ss ?? 0:00.05 coreaudiod
+cltbld 94 1 94 db265f0 0 Ss ?? 0:00.10 launchd
+cltbld 98 94 98 db265f0 1 S ?? 0:03.08 Dock
+cltbld 99 94 99 db265f0 1 S ?? 0:00.45 SystemUIServer
+cltbld 100 94 100 db265f0 1 S ?? 0:04.43 Finder
+cltbld 103 94 103 db265f0 1 S ?? 0:00.35 fontd
+cltbld 110 94 110 db265f0 1 S ?? 0:00.11 UserEventAgent
+cltbld 113 94 113 db265f0 1 S ?? 0:00.02 AppleVNCServer
+cltbld 118 94 118 db265f0 1 S ?? 0:00.01 AirPort Base Station Agent
+cltbld 122 94 122 db265f0 1 S ?? 0:00.00 pboard
+cltbld 123 94 123 db265f0 1 ?? 0:00.00 (CCacheServer)
+root 268 1 268 d49eea0 0 Ss ?? 0:00.03 ntpd
+cltbld 285 1 284 db26110 0 S ?? 0:02.01 python
+cltbld 334 285 334 db26110 1 S ?? 0:01.93 python
+root 358 1 358 db25fd8 0 Ss ?? 0:00.01 taskgated
+cltbld 378 94 378 db265f0 1 S ?? 0:00.03 cvmsComp_x86_64
+root 547 334 334 db26110 1 R ?? 0:00.00 ps \ No newline at end of file
diff --git a/testing/talos/talos/unittests/python.toml b/testing/talos/talos/unittests/python.toml
new file mode 100644
index 0000000000..d94b347db2
--- /dev/null
+++ b/testing/talos/talos/unittests/python.toml
@@ -0,0 +1,8 @@
+[DEFAULT]
+subsuite = "talos"
+
+["test_config.py"]
+
+["test_test.py"]
+
+["test_xtalos.py"]
diff --git a/testing/talos/talos/unittests/test_cmanager.py b/testing/talos/talos/unittests/test_cmanager.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/testing/talos/talos/unittests/test_cmanager.py
diff --git a/testing/talos/talos/unittests/test_cmanager_base.py b/testing/talos/talos/unittests/test_cmanager_base.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/testing/talos/talos/unittests/test_cmanager_base.py
diff --git a/testing/talos/talos/unittests/test_cmanager_linux.py b/testing/talos/talos/unittests/test_cmanager_linux.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/testing/talos/talos/unittests/test_cmanager_linux.py
diff --git a/testing/talos/talos/unittests/test_cmanager_mac.py b/testing/talos/talos/unittests/test_cmanager_mac.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/testing/talos/talos/unittests/test_cmanager_mac.py
diff --git a/testing/talos/talos/unittests/test_cmanger_win32.py b/testing/talos/talos/unittests/test_cmanger_win32.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/testing/talos/talos/unittests/test_cmanger_win32.py
diff --git a/testing/talos/talos/unittests/test_cmdline.py b/testing/talos/talos/unittests/test_cmdline.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/testing/talos/talos/unittests/test_cmdline.py
diff --git a/testing/talos/talos/unittests/test_config.py b/testing/talos/talos/unittests/test_config.py
new file mode 100644
index 0000000000..ae58364b07
--- /dev/null
+++ b/testing/talos/talos/unittests/test_config.py
@@ -0,0 +1,1313 @@
+import copy
+import os
+from unittest import mock
+
+import conftest
+import mozunit
+import pytest
+import six
+
+from talos.config import (
+ DEFAULTS,
+ ConfigurationError,
+ get_active_tests,
+ get_browser_config,
+ get_config,
+ get_configs,
+ get_test,
+)
+from talos.test import PageloaderTest
+
+ORIGINAL_DEFAULTS = copy.deepcopy(DEFAULTS)
+
+
+class mock_test(PageloaderTest):
+ keys = [
+ "tpmanifest",
+ "tpcycles",
+ "tppagecycles",
+ "tprender",
+ "tpchrome",
+ "tpmozafterpaint",
+ "fnbpaint",
+ "tploadnocache",
+ "firstpaint",
+ "userready",
+ "testeventmap",
+ "base_vs_ref",
+ "mainthread",
+ "resolution",
+ "cycles",
+ "gecko_profile",
+ "gecko_profile_interval",
+ "gecko_profile_entries",
+ "tptimeout",
+ "win_counters",
+ "w7_counters",
+ "linux_counters",
+ "mac_counters",
+ "tpscrolltest",
+ "xperf_counters",
+ "timeout",
+ "shutdown",
+ "responsiveness",
+ "profile_path",
+ "xperf_providers",
+ "xperf_user_providers",
+ "xperf_stackwalk",
+ "format_pagename",
+ "filters",
+ "preferences",
+ "extensions",
+ "setup",
+ "cleanup",
+ "lower_is_better",
+ "alert_threshold",
+ "unit",
+ "webextensions",
+ "profile",
+ "tpmozafterpaint",
+ "url",
+ ]
+
+ tpmozafterpaint = "value"
+ firstpaint = "value"
+ userready = "value"
+ fnbpaint = "value"
+
+
+class Test_get_active_tests(object):
+ def test_raises_exception_for_undefined_test(self):
+ with pytest.raises(ConfigurationError):
+ get_active_tests({"activeTests": "undefined_test"})
+
+ with pytest.raises(ConfigurationError):
+ get_active_tests({"activeTests": " undefined_test "})
+
+ with pytest.raises(ConfigurationError):
+ get_active_tests({"activeTests": "undef_test:undef_test2:undef_test3"})
+
+
+class Test_get_test(object):
+ global_overrides = {
+ "tpmozafterpaint": "overriden",
+ "firstpaint": "overriden",
+ "userready": "overriden",
+ "fnbpaint": "overriden",
+ }
+
+ config = {"webserver": "test_webserver"}
+
+ def test_doesnt_override_specific_keys_unless_they_are_null(self):
+ test_instance = mock_test()
+ test_dict = get_test({}, self.global_overrides, [], test_instance)
+
+ assert test_dict["tpmozafterpaint"] == "value"
+ assert test_dict["firstpaint"] == "value"
+ assert test_dict["userready"] == "value"
+ assert test_dict["fnbpaint"] == "value"
+
+ # nulls still get overriden
+ test_instance = mock_test(
+ tpmozafterpaint=None, firstpaint=None, userready=None, fnbpaint=None
+ )
+ test_dict = get_test({}, self.global_overrides, [], test_instance)
+
+ assert test_dict["tpmozafterpaint"] == "overriden"
+ assert test_dict["firstpaint"] == "overriden"
+ assert test_dict["userready"] == "overriden"
+ assert test_dict["fnbpaint"] == "overriden"
+
+ @mock.patch("talos.config.open", create=True)
+ def test_interpolate_keys(self, mock_open):
+ mock_open.return_value = mock.MagicMock(readlines=lambda: [])
+
+ test_instance = mock_test(
+ url="${talos}/test_page.html", tpmanifest="${talos}/file.manifest"
+ )
+
+ test_dict = get_test(self.config, self.global_overrides, [], test_instance)
+ assert test_dict["url"].startswith("http://test_webserver/")
+ assert "${talos}" not in test_dict["url"]
+ assert "${talos}" not in test_dict["tpmanifest"]
+
+ def test_build_tpmanifest(self, tmpdir):
+ manifest_file = tmpdir.join("file.manifest").ensure(file=True)
+ test_instance = mock_test(url="test_page.html", tpmanifest=str(manifest_file))
+
+ test_dict = get_test(self.config, self.global_overrides, [], test_instance)
+ assert test_dict["tpmanifest"].endswith(".develop")
+
+ def test_add_counters(self):
+ test_instance = mock_test(
+ linux_counters=None,
+ mac_counters=[],
+ win_counters=["counter_a"],
+ w7_counters=["counter_a", "counter_b"],
+ xperf_counters=["counter_a", "counter_extra"],
+ )
+
+ counters = ["counter_a", "counter_b", "counter_c"]
+ test_dict = get_test(
+ self.config, self.global_overrides, counters, test_instance
+ )
+
+ assert test_dict["linux_counters"] == counters
+ assert test_dict["mac_counters"] == counters
+ assert test_dict["win_counters"] == counters
+ assert test_dict["w7_counters"] == counters
+ assert set(test_dict["xperf_counters"]) == set(counters + ["counter_extra"])
+
+
+class Test_get_browser_config(object):
+ required = (
+ "extensions",
+ "browser_path",
+ "browser_wait",
+ "extra_args",
+ "buildid",
+ "env",
+ "init_url",
+ "webserver",
+ )
+ optional = [
+ "bcontroller_config",
+ "child_process",
+ "debug",
+ "debugger",
+ "debugger_args",
+ "develop",
+ "e10s",
+ "process",
+ "framework",
+ "repository",
+ "sourcestamp",
+ "symbols_path",
+ "test_timeout",
+ "xperf_path",
+ "error_filename",
+ "no_upload_results",
+ "subtests",
+ "preferences",
+ ]
+
+ def test_that_contains_title(self):
+ config_no_optionals = dict.fromkeys(self.required, "")
+ config_no_optionals.update(title="is_mandatory")
+
+ browser_config = get_browser_config(config_no_optionals)
+ assert browser_config["title"] == "is_mandatory"
+
+ def test_raises_keyerror_for_missing_title(self):
+ config_missing_title = dict.fromkeys(self.required, "")
+
+ with pytest.raises(KeyError):
+ get_browser_config(config_missing_title)
+
+ def test_raises_keyerror_for_required_keys(self):
+ config_missing_required = dict.fromkeys(self.required, "")
+ config_missing_required.update(title="is_mandatory")
+ del config_missing_required["extensions"]
+
+ with pytest.raises(KeyError):
+ get_browser_config(config_missing_required)
+
+ def test_doesnt_raise_on_missing_optionals(self):
+ config_missing_optionals = dict.fromkeys(self.required, "")
+ config_missing_optionals["title"] = "is_mandatory"
+
+ try:
+ get_browser_config(config_missing_optionals)
+ except KeyError:
+ pytest.fail("Must not raise exception on missing optional")
+
+
+class Test_get_config(object):
+ @classmethod
+ def setup_class(cls):
+ cls.argv = "--suite other-e10s --mainthread -e /some/random/path".split()
+ cls.argv_unprovided_tests = "-e /some/random/path".split()
+ cls.argv_unknown_suite = (
+ "--suite random-unknown-suite -e /some/random/path".split()
+ )
+ cls.argv_overrides_defaults = """
+ --suite other-e10s
+ --executablePath /some/random/path
+ --cycles 20
+ --gecko-profile
+ --gecko-profile-interval 1000
+ --gecko-profile-entries 1000
+ --mainthread
+ --tpcycles 20
+ --mozAfterPaint
+ --firstPaint
+ --firstNonBlankPaint
+ --userReady
+ --tppagecycles 20
+ """.split()
+
+ cls.argv_ts_paint = "--activeTests ts_paint -e /some/random/path".split()
+ cls.argv_ts_paint_webext = (
+ "--activeTests ts_paint_webext -e /some/random/path".split()
+ )
+ cls.argv_ts_paint_heavy = (
+ "--activeTests ts_paint_heavy -e /some/random/path".split()
+ )
+ cls.argv_sessionrestore = (
+ "--activeTests sessionrestore -e /some/random/path".split()
+ )
+ cls.argv_sessionrestore_no_auto_restore = (
+ "--activeTests sessionrestore_no_auto_restore -e /some/random/path".split()
+ )
+ cls.argv_sessionrestore_many_windows = (
+ "--activeTests sessionrestore_many_windows -e /some/random/path".split()
+ )
+ cls.argv_tresize = "--activeTests tresize -e /some/random/path".split()
+ cls.argv_cpstartup = "--activeTests cpstartup -e /some/random/path".split()
+ cls.argv_tabpaint = "--activeTests tabpaint -e /some/random/path".split()
+ cls.argv_tabswitch = "--activeTests tabswitch -e /some/random/path".split()
+ cls.argv_tart = "--activeTests tart -e /some/random/path".split()
+ cls.argv_damp = "--activeTests damp -e /some/random/path".split()
+ cls.argv_glterrain = "--activeTests glterrain -e /some/random/path".split()
+ cls.argv_glvideo = "--activeTests glvideo -e /some/random/path".split()
+ cls.argv_canvas2dvideo = (
+ "--activeTests canvas2dvideo -e /some/random/path".split()
+ )
+ cls.argv_offscreencanvas_webcodecs_main_webgl_h264 = "--activeTests offscreencanvas_webcodecs_main_webgl_h264 -e /some/random/path".split()
+ cls.argv_offscreencanvas_webcodecs_main_webgl_vp9 = "--activeTests offscreencanvas_webcodecs_main_webgl_vp9 -e /some/random/path".split()
+ cls.argv_offscreencanvas_webcodecs_main_webgl_av1 = "--activeTests offscreencanvas_webcodecs_main_webgl_av1 -e /some/random/path".split()
+ cls.argv_offscreencanvas_webcodecs_worker_webgl_h264 = "--activeTests offscreencanvas_webcodecs_worker_webgl_h264 -e /some/random/path".split()
+ cls.argv_offscreencanvas_webcodecs_worker_webgl_vp9 = "--activeTests offscreencanvas_webcodecs_worker_webgl_vp9 -e /some/random/path".split()
+ cls.argv_offscreencanvas_webcodecs_worker_webgl_av1 = "--activeTests offscreencanvas_webcodecs_worker_webgl_av1 -e /some/random/path".split()
+ cls.argv_offscreencanvas_webcodecs_main_2d_h264 = "--activeTests offscreencanvas_webcodecs_main_2d_h264 -e /some/random/path".split()
+ cls.argv_offscreencanvas_webcodecs_main_2d_vp9 = "--activeTests offscreencanvas_webcodecs_main_2d_vp9 -e /some/random/path".split()
+ cls.argv_offscreencanvas_webcodecs_main_2d_av1 = "--activeTests offscreencanvas_webcodecs_main_2d_av1 -e /some/random/path".split()
+ cls.argv_offscreencanvas_webcodecs_worker_2d_h264 = "--activeTests offscreencanvas_webcodecs_worker_2d_h264 -e /some/random/path".split()
+ cls.argv_offscreencanvas_webcodecs_worker_2d_vp9 = "--activeTests offscreencanvas_webcodecs_worker_2d_vp9 -e /some/random/path".split()
+ cls.argv_offscreencanvas_webcodecs_worker_2d_av1 = "--activeTests offscreencanvas_webcodecs_worker_2d_av1 -e /some/random/path".split()
+ cls.argv_tp5n = "--activeTests tp5n -e /some/random/path".split()
+ cls.argv_tp5o = "--activeTests tp5o -e /some/random/path".split()
+ cls.argv_tp5o_webext = "--activeTests tp5o_webext -e /some/random/path".split()
+ cls.argv_tp5o_scroll = "--activeTests tp5o_scroll -e /some/random/path".split()
+ cls.argv_v8_7 = "--activeTests v8_7 -e /some/random/path".split()
+ cls.argv_kraken = "--activeTests kraken -e /some/random/path".split()
+ cls.argv_basic_compositor_video = (
+ "--activeTests basic_compositor_video -e /some/random/path".split()
+ )
+ cls.argv_dromaeo_css = "--activeTests dromaeo_css -e /some/random/path".split()
+ cls.argv_dromaeo_dom = "--activeTests dromaeo_dom -e /some/random/path".split()
+ cls.argv_tsvgm = "--activeTests tsvgm -e /some/random/path".split()
+ cls.argv_tsvgx = "--activeTests tsvgx -e /some/random/path".split()
+ cls.argv_tsvg_static = "--activeTests tsvg_static -e /some/random/path".split()
+ cls.argv_tsvgr_opacity = (
+ "--activeTests tsvgr_opacity -e /some/random/path".split()
+ )
+ cls.argv_tscrollx = "--activeTests tscrollx -e /some/random/path".split()
+ cls.argv_a11yr = "--activeTests a11yr -e /some/random/path".split()
+ cls.argv_perf_reftest = (
+ "--activeTests perf_reftest -e /some/random/path".split()
+ )
+ cls.argv_perf_reftest_singletons = (
+ "--activeTests perf_reftest_singletons -e /some/random/path".split()
+ )
+
+ @classmethod
+ def teardown_class(cls):
+ conftest.remove_develop_files()
+
+ def test_correctly_overrides_test_valus(self):
+ config = get_config(self.argv)
+ assert bool(config) is True
+
+ # no null values
+ null_keys = [key for key, val in six.iteritems(config) if val is None]
+ assert len(null_keys) == 0
+
+ # expected keys are there
+ assert config["browser_path"] == "/some/random/path"
+ assert config["suite"] == "other-e10s"
+ assert config["mainthread"] is True
+
+ # default values overriden
+ config = get_config(self.argv_overrides_defaults)
+ assert config["basetest"] == ORIGINAL_DEFAULTS["basetest"]
+
+ def test_config_has_tests(self):
+ config = get_config(self.argv)
+ assert len(config["tests"]) > 0
+
+ def test_global_variable_isnt_modified(self):
+ get_config(self.argv)
+ assert ORIGINAL_DEFAULTS == DEFAULTS
+
+ def test_raises_except_if_unprovided_tests_on_cli(self):
+ with pytest.raises(ConfigurationError):
+ get_config(self.argv_unprovided_tests)
+
+ with pytest.raises(ConfigurationError):
+ get_config(self.argv_unknown_suite)
+
+ def test_ts_paint_has_expected_attributes(self):
+ config = get_config(self.argv_ts_paint)
+ test_config = config["tests"][0]
+
+ assert test_config["name"] == "ts_paint"
+ assert test_config["cycles"] == 20
+ assert test_config["timeout"] == 150
+ assert test_config["gecko_profile_startup"] is True
+ assert test_config["gecko_profile_entries"] == 10000000
+ assert (
+ test_config["url"] != "startup_test/tspaint_test.html"
+ ) # interpolation was done
+ assert test_config["xperf_counters"] == []
+ # TODO: these don't work; is this a bug?
+ # assert test_config['win7_counters'] == []
+ assert test_config["filters"] is not None
+ assert test_config["tpmozafterpaint"] is True
+ # assert test_config['mainthread'] is False
+ # assert test_config['responsiveness'] is False
+ # assert test_config['unit'] == 'ms'
+
+ def test_ts_paint_webext_has_expected_attributes(self):
+ config = get_config(self.argv_ts_paint_webext)
+ test_config = config["tests"][0]
+
+ assert test_config["name"] == "ts_paint_webext"
+ assert test_config["cycles"] == 20
+ assert test_config["timeout"] == 150
+ assert test_config["gecko_profile_startup"] is True
+ assert test_config["gecko_profile_entries"] == 10000000
+ assert (
+ test_config["url"] != "startup_test/tspaint_test.html"
+ ) # interpolation was done
+ assert test_config["xperf_counters"] == []
+ # TODO: these don't work; is this a bug?
+ # assert test_config['win7_counters'] == []
+ assert test_config["filters"] is not None
+ assert test_config["tpmozafterpaint"] is True
+ # assert test_config['mainthread'] is False
+ # assert test_config['responsiveness'] is False
+ # assert test_config['unit'] == 'ms'
+ # TODO: this isn't overriden
+ # assert test_config['webextensions'] != '${talos}/webextensions/dummy/dummy-signed.xpi'
+ assert test_config["preferences"] == {"xpinstall.signatures.required": False}
+
+ def test_ts_paint_heavy_has_expected_attributes(self):
+ config = get_config(self.argv_ts_paint_heavy)
+ test_config = config["tests"][0]
+
+ assert test_config["name"] == "ts_paint_heavy"
+ assert test_config["cycles"] == 20
+ assert test_config["timeout"] == 150
+ assert test_config["gecko_profile_startup"] is True
+ assert test_config["gecko_profile_entries"] == 10000000
+ assert (
+ test_config["url"] != "startup_test/tspaint_test.html"
+ ) # interpolation was done
+ assert test_config["xperf_counters"] == []
+ # TODO: this doesn't work; is this a bug?
+ # assert test_config['win7_counters'] == []
+ assert test_config["filters"] is not None
+ assert test_config["tpmozafterpaint"] is True
+ # assert test_config['mainthread'] is False
+ # assert test_config['responsiveness'] is False
+ # assert test_config['unit'] == 'ms'
+ assert test_config["profile"] == "simple"
+
+ def test_sessionrestore_has_expected_attributes(self):
+ config = get_config(self.argv_sessionrestore)
+ test_config = config["tests"][0]
+
+ assert test_config["name"] == "sessionrestore"
+ assert test_config["cycles"] == 10
+ assert test_config["timeout"] == 900
+ assert test_config["gecko_profile_startup"] is True
+ assert test_config["gecko_profile_entries"] == 10000000
+ assert test_config["reinstall"] == [
+ "sessionstore.jsonlz4",
+ "sessionstore.js",
+ "sessionCheckpoints.json",
+ ]
+ assert test_config["url"] == "about:home"
+ assert test_config["preferences"] == {"browser.startup.page": 3}
+ # assert test_config['unit'] == 'ms'
+
+ def test_sesssionrestore_no_auto_restore_has_expected_attributes(self):
+ config = get_config(self.argv_sessionrestore_no_auto_restore)
+ test_config = config["tests"][0]
+
+ assert test_config["name"] == "sessionrestore_no_auto_restore"
+ assert test_config["cycles"] == 10
+ assert test_config["timeout"] == 900
+ assert test_config["gecko_profile_startup"] is True
+ assert test_config["gecko_profile_entries"] == 10000000
+ assert test_config["reinstall"] == [
+ "sessionstore.jsonlz4",
+ "sessionstore.js",
+ "sessionCheckpoints.json",
+ ]
+ assert test_config["url"] == "about:home"
+ assert test_config["preferences"] == {"browser.startup.page": 1}
+ # assert test_config['unit'] == 'ms'
+
+ def test_sessionrestore_many_windows_has_expected_attributes(self):
+ config = get_config(self.argv_sessionrestore_many_windows)
+ test_config = config["tests"][0]
+
+ assert test_config["name"] == "sessionrestore_many_windows"
+ assert test_config["cycles"] == 10
+ assert test_config["timeout"] == 900
+ assert test_config["gecko_profile_startup"] is True
+ assert test_config["gecko_profile_entries"] == 10000000
+ assert test_config["reinstall"] == [
+ "sessionstore.jsonlz4",
+ "sessionstore.js",
+ "sessionCheckpoints.json",
+ ]
+ assert test_config["url"] == "about:home"
+ assert test_config["preferences"] == {"browser.startup.page": 3}
+ # assert test_config['unit'] == 'ms'
+
+ def test_tresize_has_expected_attributes(self):
+ config = get_config(self.argv_tresize)
+ test_config = config["tests"][0]
+
+ assert test_config["name"] == "tresize"
+ assert test_config["cycles"] == 20
+ assert (
+ test_config["url"] != "startup_test/tresize/addon/content/tresize-test.html"
+ )
+ assert test_config["timeout"] == 150
+ assert test_config["gecko_profile_interval"] == 2
+ assert test_config["gecko_profile_entries"] == 1000000
+ assert test_config["tpmozafterpaint"] is True
+ assert test_config["filters"] is not None
+ # assert test_config['unit'] == 'ms'
+
+ def test_cpstartup_has_expected_attributes(self):
+ config = get_config(self.argv_cpstartup)
+ test_config = config["tests"][0]
+
+ assert test_config["name"] == "cpstartup"
+ assert test_config["tpcycles"] == 1
+ assert (
+ test_config["tpmanifest"] != "${talos}/tests/cpstartup/cpstartup.manifest"
+ )
+ assert test_config["tppagecycles"] == 20
+ assert test_config["gecko_profile_entries"] == 1000000
+ assert test_config["tploadnocache"] is True
+ assert test_config["unit"] == "ms"
+ assert test_config["preferences"] == {
+ "addon.test.cpstartup.webserver": "${webserver}",
+ "browser.link.open_newwindow": 3,
+ "browser.link.open_newwindow.restriction": 2,
+ }
+
+ def test_tabpaint_has_expected_attributes(self):
+ config = get_config(self.argv_tabpaint)
+ test_config = config["tests"][0]
+
+ assert test_config["name"] == "tabpaint"
+ assert test_config["tpcycles"] == 1
+ assert test_config["tpmanifest"] != "${talos}/tests/tabpaint/tabpaint.manifest"
+ assert test_config["tppagecycles"] == 20
+ assert test_config["gecko_profile_entries"] == 1000000
+ assert test_config["tploadnocache"] is True
+ assert test_config["unit"] == "ms"
+ assert test_config["preferences"] == {
+ "browser.link.open_newwindow": 3,
+ "browser.link.open_newwindow.restriction": 2,
+ }
+
+ def test_tabswitch_has_expected_attributes(self):
+ config = get_config(self.argv_tabswitch)
+ test_config = config["tests"][0]
+
+ assert test_config["name"] == "tabswitch"
+ assert test_config["tpcycles"] == 1
+ assert (
+ test_config["tpmanifest"] != "${talos}/tests/tabswitch/tabswitch.manifest"
+ )
+ assert test_config["tppagecycles"] == 5
+ assert test_config["gecko_profile_entries"] == 5000000
+ assert test_config["tploadnocache"] is True
+ assert test_config["preferences"] == {
+ "addon.test.tabswitch.urlfile": os.path.join(
+ "${talos}", "tests", "tp5o.html"
+ ),
+ "addon.test.tabswitch.webserver": "${webserver}",
+ "addon.test.tabswitch.maxurls": -1,
+ }
+ assert test_config["unit"] == "ms"
+
+ def test_tart_has_expected_attributes(self):
+ config = get_config(self.argv_tart)
+ test_config = config["tests"][0]
+
+ assert test_config["name"] == "tart"
+ assert test_config["tpmanifest"] != "${talos}/tests/tart/tart.manifest"
+ assert test_config["tpcycles"] == 1
+ assert test_config["tppagecycles"] == 25
+ assert test_config["tploadnocache"] is True
+ assert test_config["tpmozafterpaint"] is False
+ assert test_config["gecko_profile_interval"] == 10
+ assert test_config["gecko_profile_entries"] == 1000000
+ assert "win_counters" not in test_config
+ assert "w7_counters" not in test_config
+ assert "linux_counters" not in test_config
+ assert "mac_counters" not in test_config
+ assert test_config["preferences"] == {
+ "layout.frame_rate": 0,
+ "docshell.event_starvation_delay_hint": 1,
+ "dom.send_after_paint_to_content": False,
+ }
+ assert test_config["filters"] is not None
+ assert test_config["unit"] == "ms"
+
+ def test_damp_has_expected_attributes(self):
+ config = get_config(self.argv_damp)
+ test_config = config["tests"][0]
+
+ assert test_config["name"] == "damp"
+ assert test_config["tpmanifest"] != "${talos}/tests/devtools/damp.manifest"
+ assert test_config["cycles"] == 5
+ assert test_config["tpcycles"] == 1
+ assert test_config["tppagecycles"] == 5
+ assert test_config["tploadnocache"] is True
+ assert test_config["tpmozafterpaint"] is False
+ assert test_config["gecko_profile_interval"] == 10
+ assert test_config["gecko_profile_entries"] == 1000000
+ assert "win_counters" not in test_config
+ assert "w7_counters" not in test_config
+ assert "linux_counters" not in test_config
+ assert "mac_counters" not in test_config
+ assert test_config["filters"] is not None
+ assert test_config["preferences"] == {"devtools.memory.enabled": True}
+ assert test_config["unit"] == "ms"
+
+ def test_glterrain_has_expected_attributes(self):
+ config = get_config(self.argv_glterrain)
+ test_config = config["tests"][0]
+
+ assert test_config["name"] == "glterrain"
+ assert test_config["tpmanifest"] != "${talos}/tests/webgl/glterrain.manifest"
+ assert test_config["tpcycles"] == 1
+ assert test_config["tppagecycles"] == 25
+ assert test_config["tploadnocache"] is True
+ assert test_config["tpmozafterpaint"] is False
+ assert test_config["tpchrome"] is False
+ assert test_config["gecko_profile_interval"] == 10
+ assert test_config["gecko_profile_entries"] == 2000000
+ assert "win_counters" not in test_config
+ assert "w7_counters" not in test_config
+ assert "linux_counters" not in test_config
+ assert "mac_counters" not in test_config
+ assert test_config["preferences"] == {
+ "layout.frame_rate": 0,
+ "docshell.event_starvation_delay_hint": 1,
+ "dom.send_after_paint_to_content": False,
+ }
+ assert test_config["filters"] is not None
+ assert test_config["unit"] == "frame interval"
+
+ def test_glvideo_has_expected_attributes(self):
+ config = get_config(self.argv_glvideo)
+ test_config = config["tests"][0]
+
+ assert test_config["name"] == "glvideo"
+ assert test_config["tpmanifest"] != "${talos}/tests/webgl/glvideo.manifest"
+ assert test_config["tpcycles"] == 1
+ assert test_config["tppagecycles"] == 5
+ assert test_config["tploadnocache"] is True
+ assert test_config["tpmozafterpaint"] is False
+ assert test_config["tpchrome"] is False
+ assert test_config["gecko_profile_interval"] == 2
+ assert test_config["gecko_profile_entries"] == 2000000
+ assert "win_counters" not in test_config
+ assert "w7_counters" not in test_config
+ assert "linux_counters" not in test_config
+ assert "mac_counters" not in test_config
+ assert test_config["filters"] is not None
+ assert test_config["unit"] == "ms"
+
+ def test_canvas2dvideo_has_expected_attributes(self):
+ config = get_config(self.argv_canvas2dvideo)
+ test_config = config["tests"][0]
+
+ assert test_config["name"] == "canvas2dvideo"
+ assert (
+ test_config["tpmanifest"]
+ != "${talos}/tests/canvas2d/canvas2dvideo.manifest"
+ )
+ assert test_config["tpcycles"] == 1
+ assert test_config["tppagecycles"] == 5
+ assert test_config["tploadnocache"] is True
+ assert test_config["tpmozafterpaint"] is False
+ assert test_config["tpchrome"] is False
+ assert test_config["gecko_profile_interval"] == 2
+ assert test_config["gecko_profile_entries"] == 2000000
+ assert "win_counters" not in test_config
+ assert "w7_counters" not in test_config
+ assert "linux_counters" not in test_config
+ assert "mac_counters" not in test_config
+ assert test_config["filters"] is not None
+ assert test_config["unit"] == "ms"
+
+ def test_offscreencanvas_webcodecs_main_webgl_h264_has_expected_attributes(self):
+ config = get_config(self.argv_offscreencanvas_webcodecs_main_webgl_h264)
+ test_config = config["tests"][0]
+
+ assert test_config["name"] == "offscreencanvas_webcodecs_main_webgl_h264"
+ assert (
+ test_config["tpmanifest"]
+ != "${talos}/tests/offscreencanvas/offscreencanvas_webcodecs_main_webgl_h264.manifest"
+ )
+ assert test_config["tpcycles"] == 1
+ assert test_config["tppagecycles"] == 5
+ assert test_config["tploadnocache"] is True
+ assert test_config["tpmozafterpaint"] is False
+ assert test_config["tpchrome"] is False
+ assert test_config["gecko_profile_interval"] == 2
+ assert test_config["gecko_profile_entries"] == 2000000
+ assert "win_counters" not in test_config
+ assert "w7_counters" not in test_config
+ assert "linux_counters" not in test_config
+ assert "mac_counters" not in test_config
+ assert test_config["filters"] is not None
+ assert test_config["unit"] == "ms"
+
+ def test_offscreencanvas_webcodecs_main_webgl_vp9_has_expected_attributes(self):
+ config = get_config(self.argv_offscreencanvas_webcodecs_main_webgl_vp9)
+ test_config = config["tests"][0]
+
+ assert test_config["name"] == "offscreencanvas_webcodecs_main_webgl_vp9"
+ assert (
+ test_config["tpmanifest"]
+ != "${talos}/tests/offscreencanvas/offscreencanvas_webcodecs_main_webgl_vp9.manifest"
+ )
+ assert test_config["tpcycles"] == 1
+ assert test_config["tppagecycles"] == 5
+ assert test_config["tploadnocache"] is True
+ assert test_config["tpmozafterpaint"] is False
+ assert test_config["tpchrome"] is False
+ assert test_config["gecko_profile_interval"] == 2
+ assert test_config["gecko_profile_entries"] == 2000000
+ assert "win_counters" not in test_config
+ assert "w7_counters" not in test_config
+ assert "linux_counters" not in test_config
+ assert "mac_counters" not in test_config
+ assert test_config["filters"] is not None
+ assert test_config["unit"] == "ms"
+
+ def test_offscreencanvas_webcodecs_main_webgl_av1_has_expected_attributes(self):
+ config = get_config(self.argv_offscreencanvas_webcodecs_main_webgl_av1)
+ test_config = config["tests"][0]
+
+ assert test_config["name"] == "offscreencanvas_webcodecs_main_webgl_av1"
+ assert (
+ test_config["tpmanifest"]
+ != "${talos}/tests/offscreencanvas/offscreencanvas_webcodecs_main_webgl_av1.manifest"
+ )
+ assert test_config["tpcycles"] == 1
+ assert test_config["tppagecycles"] == 5
+ assert test_config["tploadnocache"] is True
+ assert test_config["tpmozafterpaint"] is False
+ assert test_config["tpchrome"] is False
+ assert test_config["gecko_profile_interval"] == 2
+ assert test_config["gecko_profile_entries"] == 2000000
+ assert "win_counters" not in test_config
+ assert "w7_counters" not in test_config
+ assert "linux_counters" not in test_config
+ assert "mac_counters" not in test_config
+ assert test_config["filters"] is not None
+ assert test_config["unit"] == "ms"
+
+ def test_offscreencanvas_webcodecs_worker_webgl_h264_has_expected_attributes(self):
+ config = get_config(self.argv_offscreencanvas_webcodecs_worker_webgl_h264)
+ test_config = config["tests"][0]
+
+ assert test_config["name"] == "offscreencanvas_webcodecs_worker_webgl_h264"
+ assert (
+ test_config["tpmanifest"]
+ != "${talos}/tests/offscreencanvas/offscreencanvas_webcodecs_worker_webgl_h264.manifest"
+ )
+ assert test_config["tpcycles"] == 1
+ assert test_config["tppagecycles"] == 5
+ assert test_config["tploadnocache"] is True
+ assert test_config["tpmozafterpaint"] is False
+ assert test_config["tpchrome"] is False
+ assert test_config["gecko_profile_interval"] == 2
+ assert test_config["gecko_profile_entries"] == 2000000
+ assert "win_counters" not in test_config
+ assert "w7_counters" not in test_config
+ assert "linux_counters" not in test_config
+ assert "mac_counters" not in test_config
+ assert test_config["filters"] is not None
+ assert test_config["unit"] == "ms"
+
+ def test_offscreencanvas_webcodecs_worker_webgl_vp9_has_expected_attributes(self):
+ config = get_config(self.argv_offscreencanvas_webcodecs_worker_webgl_vp9)
+ test_config = config["tests"][0]
+
+ assert test_config["name"] == "offscreencanvas_webcodecs_worker_webgl_vp9"
+ assert (
+ test_config["tpmanifest"]
+ != "${talos}/tests/offscreencanvas/offscreencanvas_webcodecs_worker_webgl_vp9.manifest"
+ )
+ assert test_config["tpcycles"] == 1
+ assert test_config["tppagecycles"] == 5
+ assert test_config["tploadnocache"] is True
+ assert test_config["tpmozafterpaint"] is False
+ assert test_config["tpchrome"] is False
+ assert test_config["gecko_profile_interval"] == 2
+ assert test_config["gecko_profile_entries"] == 2000000
+ assert "win_counters" not in test_config
+ assert "w7_counters" not in test_config
+ assert "linux_counters" not in test_config
+ assert "mac_counters" not in test_config
+ assert test_config["filters"] is not None
+ assert test_config["unit"] == "ms"
+
+ def test_offscreencanvas_webcodecs_worker_webgl_av1_has_expected_attributes(self):
+ config = get_config(self.argv_offscreencanvas_webcodecs_worker_webgl_av1)
+ test_config = config["tests"][0]
+
+ assert test_config["name"] == "offscreencanvas_webcodecs_worker_webgl_av1"
+ assert (
+ test_config["tpmanifest"]
+ != "${talos}/tests/offscreencanvas/offscreencanvas_webcodecs_worker_webgl_av1.manifest"
+ )
+ assert test_config["tpcycles"] == 1
+ assert test_config["tppagecycles"] == 5
+ assert test_config["tploadnocache"] is True
+ assert test_config["tpmozafterpaint"] is False
+ assert test_config["tpchrome"] is False
+ assert test_config["gecko_profile_interval"] == 2
+ assert test_config["gecko_profile_entries"] == 2000000
+ assert "win_counters" not in test_config
+ assert "w7_counters" not in test_config
+ assert "linux_counters" not in test_config
+ assert "mac_counters" not in test_config
+ assert test_config["filters"] is not None
+ assert test_config["unit"] == "ms"
+
+ def test_offscreencanvas_webcodecs_main_2d_h264_has_expected_attributes(self):
+ config = get_config(self.argv_offscreencanvas_webcodecs_main_2d_h264)
+ test_config = config["tests"][0]
+
+ assert test_config["name"] == "offscreencanvas_webcodecs_main_2d_h264"
+ assert (
+ test_config["tpmanifest"]
+ != "${talos}/tests/offscreencanvas/offscreencanvas_webcodecs_main_2d_h264.manifest"
+ )
+ assert test_config["tpcycles"] == 1
+ assert test_config["tppagecycles"] == 5
+ assert test_config["tploadnocache"] is True
+ assert test_config["tpmozafterpaint"] is False
+ assert test_config["tpchrome"] is False
+ assert test_config["gecko_profile_interval"] == 2
+ assert test_config["gecko_profile_entries"] == 2000000
+ assert "win_counters" not in test_config
+ assert "w7_counters" not in test_config
+ assert "linux_counters" not in test_config
+ assert "mac_counters" not in test_config
+ assert test_config["filters"] is not None
+ assert test_config["unit"] == "ms"
+
+ def test_offscreencanvas_webcodecs_main_2d_vp9_has_expected_attributes(self):
+ config = get_config(self.argv_offscreencanvas_webcodecs_main_2d_vp9)
+ test_config = config["tests"][0]
+
+ assert test_config["name"] == "offscreencanvas_webcodecs_main_2d_vp9"
+ assert (
+ test_config["tpmanifest"]
+ != "${talos}/tests/offscreencanvas/offscreencanvas_webcodecs_main_2d_vp9.manifest"
+ )
+ assert test_config["tpcycles"] == 1
+ assert test_config["tppagecycles"] == 5
+ assert test_config["tploadnocache"] is True
+ assert test_config["tpmozafterpaint"] is False
+ assert test_config["tpchrome"] is False
+ assert test_config["gecko_profile_interval"] == 2
+ assert test_config["gecko_profile_entries"] == 2000000
+ assert "win_counters" not in test_config
+ assert "w7_counters" not in test_config
+ assert "linux_counters" not in test_config
+ assert "mac_counters" not in test_config
+ assert test_config["filters"] is not None
+ assert test_config["unit"] == "ms"
+
+ def test_offscreencanvas_webcodecs_main_2d_av1_has_expected_attributes(self):
+ config = get_config(self.argv_offscreencanvas_webcodecs_main_2d_av1)
+ test_config = config["tests"][0]
+
+ assert test_config["name"] == "offscreencanvas_webcodecs_main_2d_av1"
+ assert (
+ test_config["tpmanifest"]
+ != "${talos}/tests/offscreencanvas/offscreencanvas_webcodecs_main_2d_av1.manifest"
+ )
+ assert test_config["tpcycles"] == 1
+ assert test_config["tppagecycles"] == 5
+ assert test_config["tploadnocache"] is True
+ assert test_config["tpmozafterpaint"] is False
+ assert test_config["tpchrome"] is False
+ assert test_config["gecko_profile_interval"] == 2
+ assert test_config["gecko_profile_entries"] == 2000000
+ assert "win_counters" not in test_config
+ assert "w7_counters" not in test_config
+ assert "linux_counters" not in test_config
+ assert "mac_counters" not in test_config
+ assert test_config["filters"] is not None
+ assert test_config["unit"] == "ms"
+
+ def test_offscreencanvas_webcodecs_worker_2d_h264_has_expected_attributes(self):
+ config = get_config(self.argv_offscreencanvas_webcodecs_worker_2d_h264)
+ test_config = config["tests"][0]
+
+ assert test_config["name"] == "offscreencanvas_webcodecs_worker_2d_h264"
+ assert (
+ test_config["tpmanifest"]
+ != "${talos}/tests/offscreencanvas/offscreencanvas_webcodecs_worker_2d_h264.manifest"
+ )
+ assert test_config["tpcycles"] == 1
+ assert test_config["tppagecycles"] == 5
+ assert test_config["tploadnocache"] is True
+ assert test_config["tpmozafterpaint"] is False
+ assert test_config["tpchrome"] is False
+ assert test_config["gecko_profile_interval"] == 2
+ assert test_config["gecko_profile_entries"] == 2000000
+ assert "win_counters" not in test_config
+ assert "w7_counters" not in test_config
+ assert "linux_counters" not in test_config
+ assert "mac_counters" not in test_config
+ assert test_config["filters"] is not None
+ assert test_config["unit"] == "ms"
+
+ def test_offscreencanvas_webcodecs_worker_2d_vp9_has_expected_attributes(self):
+ config = get_config(self.argv_offscreencanvas_webcodecs_worker_2d_vp9)
+ test_config = config["tests"][0]
+
+ assert test_config["name"] == "offscreencanvas_webcodecs_worker_2d_vp9"
+ assert (
+ test_config["tpmanifest"]
+ != "${talos}/tests/offscreencanvas/offscreencanvas_webcodecs_worker_2d_vp9.manifest"
+ )
+ assert test_config["tpcycles"] == 1
+ assert test_config["tppagecycles"] == 5
+ assert test_config["tploadnocache"] is True
+ assert test_config["tpmozafterpaint"] is False
+ assert test_config["tpchrome"] is False
+ assert test_config["gecko_profile_interval"] == 2
+ assert test_config["gecko_profile_entries"] == 2000000
+ assert "win_counters" not in test_config
+ assert "w7_counters" not in test_config
+ assert "linux_counters" not in test_config
+ assert "mac_counters" not in test_config
+ assert test_config["filters"] is not None
+ assert test_config["unit"] == "ms"
+
+ def test_offscreencanvas_webcodecs_worker_2d_av1_has_expected_attributes(self):
+ config = get_config(self.argv_offscreencanvas_webcodecs_worker_2d_av1)
+ test_config = config["tests"][0]
+
+ assert test_config["name"] == "offscreencanvas_webcodecs_worker_2d_av1"
+ assert (
+ test_config["tpmanifest"]
+ != "${talos}/tests/offscreencanvas/offscreencanvas_webcodecs_worker_2d_av1.manifest"
+ )
+ assert test_config["tpcycles"] == 1
+ assert test_config["tppagecycles"] == 5
+ assert test_config["tploadnocache"] is True
+ assert test_config["tpmozafterpaint"] is False
+ assert test_config["tpchrome"] is False
+ assert test_config["gecko_profile_interval"] == 2
+ assert test_config["gecko_profile_entries"] == 2000000
+ assert "win_counters" not in test_config
+ assert "w7_counters" not in test_config
+ assert "linux_counters" not in test_config
+ assert "mac_counters" not in test_config
+ assert test_config["filters"] is not None
+ assert test_config["unit"] == "ms"
+
+ @mock.patch("talos.config.build_manifest", conftest.patched_build_manifest)
+ def test_tp5n_has_expected_attributes(self):
+ config = get_config(self.argv_tp5n)
+ test_config = config["tests"][0]
+
+ assert test_config["name"] == "tp5n"
+ assert test_config["resolution"] == 20
+ assert test_config["tpmanifest"] != "${talos}/tests/tp5n/tp5n.manifest"
+ assert test_config["tpcycles"] == 1
+ assert test_config["tppagecycles"] == 1
+ assert test_config["cycles"] == 1
+ assert test_config["tpmozafterpaint"] is True
+ assert test_config["tptimeout"] == 5000
+ assert test_config["mainthread"] is True
+ assert test_config["w7_counters"] == []
+ assert test_config["win_counters"] == []
+ assert test_config["linux_counters"] == []
+ assert test_config["mac_counters"] == []
+ assert test_config["xperf_counters"] == [
+ "main_startup_fileio",
+ "main_startup_netio",
+ "main_normal_fileio",
+ "main_normal_netio",
+ "nonmain_startup_fileio",
+ "nonmain_normal_fileio",
+ "nonmain_normal_netio",
+ "mainthread_readcount",
+ "mainthread_readbytes",
+ "mainthread_writecount",
+ "mainthread_writebytes",
+ ]
+ assert test_config["xperf_providers"] == [
+ "PROC_THREAD",
+ "LOADER",
+ "HARD_FAULTS",
+ "FILENAME",
+ "FILE_IO",
+ "FILE_IO_INIT",
+ ]
+ assert test_config["xperf_user_providers"] == [
+ "Mozilla Generic Provider",
+ "Microsoft-Windows-TCPIP",
+ ]
+ assert test_config["xperf_stackwalk"] == [
+ "FileCreate",
+ "FileRead",
+ "FileWrite",
+ "FileFlush",
+ "FileClose",
+ ]
+ assert test_config["filters"] is not None
+ assert test_config["timeout"] == 1800
+ assert test_config["preferences"] == {
+ "extensions.enabledScopes": "",
+ "talos.logfile": "browser_output.txt",
+ }
+ assert test_config["unit"] == "ms"
+
+ @mock.patch("talos.config.build_manifest", conftest.patched_build_manifest)
+ def test_tp5o_has_expected_attributes(self):
+ config = get_config(self.argv_tp5o)
+ test_config = config["tests"][0]
+
+ assert test_config["name"] == "tp5o"
+ assert test_config["tpcycles"] == 1
+ assert test_config["tppagecycles"] == 25
+ assert test_config["cycles"] == 1
+ assert test_config["tpmozafterpaint"] is True
+ assert test_config["tptimeout"] == 5000
+ assert test_config["mainthread"] is False
+ assert test_config["tpmanifest"] != "${talos}/tests/tp5n/tp5o.manifest"
+ assert test_config["win_counters"] == ["% Processor Time"]
+ assert test_config["w7_counters"] == ["% Processor Time"]
+ assert test_config["linux_counters"] == ["XRes"]
+ assert test_config["mac_counters"] == []
+ assert test_config["responsiveness"] is True
+ assert test_config["gecko_profile_interval"] == 2
+ assert test_config["gecko_profile_entries"] == 4000000
+ assert test_config["filters"] is not None
+ assert test_config["timeout"] == 1800
+ assert test_config["unit"] == "ms"
+
+ @mock.patch("talos.config.build_manifest", conftest.patched_build_manifest)
+ def test_tp5o_webext_has_expected_attributes(self):
+ config = get_config(self.argv_tp5o_webext)
+ test_config = config["tests"][0]
+
+ assert test_config["name"] == "tp5o_webext"
+ assert test_config["tpcycles"] == 1
+ assert test_config["tppagecycles"] == 25
+ assert test_config["cycles"] == 1
+ assert test_config["tpmozafterpaint"] is True
+ assert test_config["tptimeout"] == 5000
+ assert test_config["mainthread"] is False
+ assert test_config["tpmanifest"] != "${talos}/tests/tp5n/tp5o.manifest"
+ assert test_config["win_counters"] == ["% Processor Time"]
+ assert test_config["w7_counters"] == ["% Processor Time"]
+ assert test_config["linux_counters"] == ["XRes"]
+ assert test_config["mac_counters"] == []
+ assert test_config["responsiveness"] is True
+ assert test_config["gecko_profile_interval"] == 2
+ assert test_config["gecko_profile_entries"] == 4000000
+ assert test_config["filters"] is not None
+ assert test_config["timeout"] == 1800
+ assert test_config["unit"] == "ms"
+ assert test_config["webextensions"] == "${talos}/webextensions/dummy/dummy.xpi"
+ assert test_config["preferences"] == {"xpinstall.signatures.required": False}
+
+ @mock.patch("talos.config.build_manifest", conftest.patched_build_manifest)
+ def test_tp5o_scroll_has_expected_attributes(self):
+ config = get_config(self.argv_tp5o_scroll)
+ test_config = config["tests"][0]
+
+ assert test_config["name"] == "tp5o_scroll"
+ assert test_config["tpmanifest"] != "${talos}/tests/tp5n/tp5o.manifest"
+ assert test_config["tpcycles"] == 1
+ assert test_config["tppagecycles"] == 12
+ assert test_config["gecko_profile_interval"] == 2
+ assert test_config["gecko_profile_entries"] == 2000000
+ assert test_config["tpscrolltest"] is True
+ assert test_config["tpmozafterpaint"] is False
+ assert test_config["preferences"] == {
+ "layout.frame_rate": 0,
+ "docshell.event_starvation_delay_hint": 1,
+ "dom.send_after_paint_to_content": False,
+ "layout.css.scroll-behavior.spring-constant": "'10'",
+ "toolkit.framesRecording.bufferSize": 10000,
+ }
+ assert test_config["filters"] is not None
+ assert test_config["unit"] == "1/FPS"
+
+ def test_v8_7_has_expected_attributes(self):
+ config = get_config(self.argv_v8_7)
+ test_config = config["tests"][0]
+
+ assert test_config["name"] == "v8_7"
+ assert test_config["tpmanifest"] != "${talos}/tests/v8_7/v8.manifest"
+ assert test_config["gecko_profile_interval"] == 1
+ assert test_config["gecko_profile_entries"] == 1000000
+ assert test_config["tpcycles"] == 1
+ assert test_config["resolution"] == 20
+ assert test_config["tpmozafterpaint"] is False
+ assert test_config["preferences"] == {"dom.send_after_paint_to_content": False}
+ assert test_config["filters"] is not None
+ assert test_config["unit"] == "score"
+ assert test_config["lower_is_better"] is False
+
+ def test_kraken_has_expected_attributes(self):
+ config = get_config(self.argv_kraken)
+ test_config = config["tests"][0]
+
+ assert test_config["name"] == "kraken"
+ assert test_config["tpmanifest"] != "${talos}/tests/kraken/kraken.manifest"
+ assert test_config["tpcycles"] == 1
+ assert test_config["tppagecycles"] == 1
+ assert test_config["gecko_profile_interval"] == 1
+ assert test_config["gecko_profile_entries"] == 5000000
+ assert test_config["tpmozafterpaint"] is False
+ assert test_config["tpchrome"] is False
+ assert test_config["preferences"] == {"dom.send_after_paint_to_content": False}
+ assert test_config["filters"] is not None
+ assert test_config["unit"] == "score"
+
+ def test_basic_compositor_video_has_expected_attributes(self):
+ config = get_config(self.argv_basic_compositor_video)
+ test_config = config["tests"][0]
+
+ assert test_config["name"] == "basic_compositor_video"
+ assert test_config["tpmanifest"] != "${talos}/tests/video/video.manifest"
+ assert test_config["tpcycles"] == 1
+ assert test_config["tppagecycles"] == 12
+ assert test_config["tpchrome"] is False
+ assert test_config["timeout"] == 10000
+ assert test_config["gecko_profile_interval"] == 1
+ assert test_config["gecko_profile_entries"] == 2000000
+ assert test_config["preferences"] == {
+ "full-screen-api.allow-trusted-requests-only": False,
+ "layers.acceleration.force-enabled": False,
+ "layers.acceleration.disabled": True,
+ "layout.frame_rate": 0,
+ "docshell.event_starvation_delay_hint": 1,
+ "full-screen-api.warning.timeout": 500,
+ "media.ruin-av-sync.enabled": True,
+ }
+ assert test_config["filters"] is not None
+ assert test_config["unit"] == "ms/frame"
+ assert test_config["lower_is_better"] is True
+
+ def test_dromaeo_css_has_expected_attributes(self):
+ config = get_config(self.argv_dromaeo_css)
+ test_config = config["tests"][0]
+
+ assert test_config["name"] == "dromaeo_css"
+ assert test_config["tpcycles"] == 1
+ assert test_config["filters"] is not None
+ assert test_config["lower_is_better"] is False
+ assert test_config["alert_threshold"] == 5.0
+ assert test_config["tpchrome"] is False
+ assert test_config["gecko_profile_interval"] == 2
+ assert test_config["gecko_profile_entries"] == 10000000
+ assert test_config["tpmanifest"] != "${talos}/tests/dromaeo/css.manifest"
+ assert test_config["unit"] == "score"
+
+ def test_dromaeo_dom_has_expected_attributes(self):
+ config = get_config(self.argv_dromaeo_dom)
+ test_config = config["tests"][0]
+
+ assert test_config["name"] == "dromaeo_dom"
+ assert test_config["tpcycles"] == 1
+ assert test_config["filters"] is not None
+ assert test_config["lower_is_better"] is False
+ assert test_config["alert_threshold"] == 5.0
+ assert test_config["tpchrome"] is False
+ assert test_config["gecko_profile_interval"] == 2
+ assert test_config["gecko_profile_entries"] == 10000000
+ assert test_config["tpmanifest"] != "${talos}/tests/dromaeo/dom.manifest"
+ assert test_config["unit"] == "score"
+
+ def test_tsvgm_has_expected_attributes(self):
+ config = get_config(self.argv_tsvgm)
+ test_config = config["tests"][0]
+
+ assert test_config["name"] == "tsvgm"
+ assert test_config["tpmanifest"] != "${talos}/tests/svgx/svgm.manifest"
+ assert test_config["tpcycles"] == 1
+ assert test_config["tppagecycles"] == 7
+ assert test_config["tpmozafterpaint"] is False
+ assert test_config["tpchrome"] is False
+ assert test_config["gecko_profile_interval"] == 10
+ assert test_config["gecko_profile_entries"] == 1000000
+ assert test_config["preferences"] == {
+ "layout.frame_rate": 0,
+ "docshell.event_starvation_delay_hint": 1,
+ "dom.send_after_paint_to_content": False,
+ }
+ assert test_config["filters"] is not None
+ assert test_config["unit"] == "ms"
+
+ def test_tsvgx_has_expected_attributes(self):
+ config = get_config(self.argv_tsvgx)
+ test_config = config["tests"][0]
+
+ assert test_config["name"] == "tsvgx"
+ assert test_config["tpmanifest"] != "${talos}/tests/svgx/svgx.manifest"
+ assert test_config["tpcycles"] == 1
+ assert test_config["tppagecycles"] == 25
+ assert test_config["tpmozafterpaint"] is False
+ assert test_config["tpchrome"] is False
+ assert test_config["gecko_profile_interval"] == 10
+ assert test_config["gecko_profile_entries"] == 1000000
+ assert test_config["preferences"] == {
+ "layout.frame_rate": 0,
+ "docshell.event_starvation_delay_hint": 1,
+ "dom.send_after_paint_to_content": False,
+ }
+ assert test_config["filters"] is not None
+ assert test_config["unit"] == "ms"
+
+ def test_tsvg_static_has_expected_attributes(self):
+ config = get_config(self.argv_tsvg_static)
+ test_config = config["tests"][0]
+
+ assert test_config["name"] == "tsvg_static"
+ assert (
+ test_config["tpmanifest"] != "${talos}/tests/svg_static/svg_static.manifest"
+ )
+ assert test_config["tpcycles"] == 1
+ assert test_config["tppagecycles"] == 25
+ assert test_config["tpmozafterpaint"] is True
+ assert test_config["tpchrome"] is False
+ assert test_config["gecko_profile_interval"] == 1
+ assert test_config["gecko_profile_entries"] == 10000000
+ assert test_config["filters"] is not None
+ assert test_config["unit"] == "ms"
+
+ def test_tsvgr_opacity_has_expected_attributes(self):
+ config = get_config(self.argv_tsvgr_opacity)
+ test_config = config["tests"][0]
+
+ assert test_config["name"] == "tsvgr_opacity"
+ assert (
+ test_config["tpmanifest"]
+ != "${talos}/tests/svg_opacity/svg_opacity.manifest"
+ )
+ assert test_config["tpcycles"] == 1
+ assert test_config["tppagecycles"] == 25
+ assert test_config["tpmozafterpaint"] is True
+ assert test_config["tpchrome"] is False
+ assert test_config["gecko_profile_interval"] == 1
+ assert test_config["gecko_profile_entries"] == 10000000
+ assert test_config["filters"] is not None
+ assert test_config["unit"] == "ms"
+
+ def test_tscrollx_has_expected_attributes(self):
+ config = get_config(self.argv_tscrollx)
+ test_config = config["tests"][0]
+
+ assert test_config["name"] == "tscrollx"
+ assert test_config["tpmanifest"] != "${talos}/tests/scroll/scroll.manifest"
+ assert test_config["tpcycles"] == 1
+ assert test_config["tppagecycles"] == 25
+ assert test_config["tpmozafterpaint"] is False
+ assert test_config["tpchrome"] is False
+ assert test_config["gecko_profile_interval"] == 1
+ assert test_config["gecko_profile_entries"] == 1000000
+ assert test_config["preferences"] == {
+ "layout.frame_rate": 0,
+ "docshell.event_starvation_delay_hint": 1,
+ "dom.send_after_paint_to_content": False,
+ "layout.css.scroll-behavior.spring-constant": "'10'",
+ "toolkit.framesRecording.bufferSize": 10000,
+ }
+ assert test_config["filters"] is not None
+ assert test_config["unit"] == "ms"
+
+ def test_a11yr_has_expect_attributes(self):
+ config = get_config(self.argv_a11yr)
+ test_config = config["tests"][0]
+
+ assert test_config["name"] == "a11yr"
+ assert test_config["tpmanifest"] != "${talos}/tests/a11y/a11y.manifest"
+ assert test_config["tpcycles"] == 1
+ assert test_config["tppagecycles"] == 25
+ assert test_config["tpmozafterpaint"] is True
+ assert test_config["tpchrome"] is False
+ assert test_config["preferences"] == {"dom.send_after_paint_to_content": False}
+ assert test_config["unit"] == "ms"
+ assert test_config["alert_threshold"] == 5.0
+
+ def test_perf_reftest_has_expected_attributes(self):
+ config = get_config(self.argv_perf_reftest)
+ test_config = config["tests"][0]
+
+ assert test_config["name"] == "perf_reftest"
+ assert test_config["base_vs_ref"] is True
+ assert (
+ test_config["tpmanifest"]
+ != "${talos}/tests/perf-reftest/perf_reftest.manifest"
+ )
+ assert test_config["tpcycles"] == 1
+ assert test_config["tppagecycles"] == 10
+ assert test_config["tptimeout"] == 30000
+ assert test_config["gecko_profile_interval"] == 1
+ assert test_config["gecko_profile_entries"] == 2000000
+ assert test_config["filters"] is not None
+ assert test_config["unit"] == "ms"
+ assert test_config["lower_is_better"] is True
+ assert test_config["alert_threshold"] == 5.0
+
+ def test_perf_reftest_singletons_has_expected_attributes(self):
+ config = get_config(self.argv_perf_reftest_singletons)
+ test_config = config["tests"][0]
+
+ assert test_config["name"] == "perf_reftest_singletons"
+ assert (
+ test_config["tpmanifest"]
+ != "${talos}/tests/perf-reftest-singletons/perf_reftest_singletons.manifest"
+ )
+ assert test_config["tpcycles"] == 1
+ assert test_config["tppagecycles"] == 15
+ assert test_config["tptimeout"] == 30000
+ assert test_config["gecko_profile_interval"] == 1
+ assert test_config["gecko_profile_entries"] == 2000000
+ assert test_config["filters"] is not None
+ assert test_config["unit"] == "ms"
+ assert test_config["lower_is_better"] is True
+ assert test_config["alert_threshold"] == 5.0
+
+
+@mock.patch("talos.config.get_browser_config")
+@mock.patch("talos.config.get_config")
+def test_get_configs(get_config_mock, get_browser_config_mock):
+ # unpacks in right order
+ get_config_mock.return_value = "first"
+ get_browser_config_mock.return_value = "second"
+
+ first, second = get_configs()
+ assert (first, second) == ("first", "second")
+
+
+if __name__ == "__main__":
+ mozunit.main()
diff --git a/testing/talos/talos/unittests/test_gecko_profile.py b/testing/talos/talos/unittests/test_gecko_profile.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/testing/talos/talos/unittests/test_gecko_profile.py
diff --git a/testing/talos/talos/unittests/test_mainthreadio.py b/testing/talos/talos/unittests/test_mainthreadio.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/testing/talos/talos/unittests/test_mainthreadio.py
diff --git a/testing/talos/talos/unittests/test_output.py b/testing/talos/talos/unittests/test_output.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/testing/talos/talos/unittests/test_output.py
diff --git a/testing/talos/talos/unittests/test_run_tests.py b/testing/talos/talos/unittests/test_run_tests.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/testing/talos/talos/unittests/test_run_tests.py
diff --git a/testing/talos/talos/unittests/test_talos_process.py b/testing/talos/talos/unittests/test_talos_process.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/testing/talos/talos/unittests/test_talos_process.py
diff --git a/testing/talos/talos/unittests/test_talosconfig_browser_config.json b/testing/talos/talos/unittests/test_talosconfig_browser_config.json
new file mode 100644
index 0000000000..4ce52f8dc6
--- /dev/null
+++ b/testing/talos/talos/unittests/test_talosconfig_browser_config.json
@@ -0,0 +1 @@
+{'deviceroot': '', 'dirs': {}, 'repository': 'https://hg.mozilla.org/releases/mozilla-release', 'buildid': '20131205075310', 'results_log': 'pathtoresults_log', 'symbols_path': None, 'bcontroller_config': 'pathtobcontroller', 'host': '', 'browser_name': 'Firefox', 'sourcestamp': '39faf812aaec', 'remote': False, 'child_process': 'plugin-container', 'browser_version': '26.0', 'extra_args': '', 'develop': True, 'preferences': {'browser.display.overlaynavbuttons': False, 'extensions.getAddons.get.url': 'http://127.0.0.1/extensions-dummy/repositoryGetURL', 'dom.max_chrome_script_run_time': 0, 'network.proxy.type': 1, 'extensions.update.background.url': 'http://127.0.0.1/extensions-dummy/updateBackgroundURL', 'network.proxy.http': 'localhost', 'plugins.update.url': 'http://127.0.0.1/plugins-dummy/updateCheckURL', 'dom.max_script_run_time': 0, 'extensions.update.enabled': False, 'browser.safebrowsing.keyURL': 'http://127.0.0.1/safebrowsing-dummy/newkey', 'media.navigator.permission.disabled': True, 'app.update.checkInstallTime': False, 'app.update.disabledForTesting': True, 'browser.EULA.override': True, 'extensions.checkCompatibility': False, 'talos.logfile': 'pathtofile', 'browser.safebrowsing.gethashURL': 'http://127.0.0.1/safebrowsing-dummy/gethash', 'extensions.hotfix.url': 'http://127.0.0.1/extensions-dummy/hotfixURL', 'dom.disable_window_move_resize': True, 'network.proxy.http_port': 80, 'browser.dom.window.dump.enabled': True, 'extensions.update.url': 'http://127.0.0.1/extensions-dummy/updateURL', 'browser.link.open_newwindow': 2, 'security.turn_off_all_security_so_that_viruses_can_take_over_this_computer': True, 'dom.disable_open_during_load': False, 'extensions.getAddons.search.browseURL': 'http://127.0.0.1/extensions-dummy/repositoryBrowseURL', 'browser.cache.disk.smart_size.enabled': False, 'hangmonitor.timeout': 0, 'dom.send_after_paint_to_content': True, 'security.fileuri.strict_origin_policy': False, 'media.capturestream_hints.enabled': True, 'extensions.update.notifyUser': False, 'extensions.blocklist.enabled': False, 'browser.bookmarks.max_backups': 0, 'browser.shell.checkDefaultBrowser': False, 'media.peerconnection.enabled': True, 'dom.disable_window_flip': True, 'security.enable_java': False, 'browser.warnOnQuit': False, 'media.navigator.enabled': True, 'browser.safebrowsing.updateURL': 'http://127.0.0.1/safebrowsing-dummy/update', 'dom.allow_scripts_to_close_windows': True, 'test_timeout': 1200, 'title': 'qm-pxp01', 'error_filename': 'pathtoerrorfile', 'webserver': 'localhost:15707', 'browser_path':ffox_path, 'port': 20701, 'browser_log': 'browser_output.txt', 'process': 'firefox.exe', 'xperf_path': 'C:/Program Files/Microsoft Windows Performance Toolkit/xperf.exe', 'extensions': ['pathtopageloader'], 'fennecIDs': '', 'init_url': 'http://localhost:15707/getInfo.html', 'browser_wait': 5}
diff --git a/testing/talos/talos/unittests/test_talosconfig_test_config.json b/testing/talos/talos/unittests/test_talosconfig_test_config.json
new file mode 100644
index 0000000000..541bad3bce
--- /dev/null
+++ b/testing/talos/talos/unittests/test_talosconfig_test_config.json
@@ -0,0 +1 @@
+{'remote_counters': [], 'filters': [['ignore_first', [5]], ['median', []]], 'xperf_user_providers': ['Mozilla Generic Provider', 'Microsoft-Windows-TCPIP'], 'tpcycles': 1, 'browser_log': 'browser_output.txt', 'shutdown': False, 'fennecIDs': False, 'responsiveness': False, 'tpmozafterpaint': True, 'cleanup': 'pathtofile', 'tprender': False, 'xperf_counters': ['main_startup_fileio', 'main_startup_netio', 'main_normal_fileio', 'main_normal_netio', 'nonmain_startup_fileio', 'nonmain_normal_fileio', 'nonmain_normal_netio', 'mainthread_readcount', 'mainthread_readbytes', 'mainthread_writecount', 'mainthread_writebytes'], 'mac_counters': [], 'tpnoisy': True, 'tppagecycles': 1, 'tploadaboutblank': False, 'xperf_providers': ['PROC_THREAD', 'LOADER', 'HARD_FAULTS', 'FILENAME', 'FILE_IO', 'FILE_IO_INIT'], 'rss': True, 'profile_path': 'path', 'name': 'tp5n', 'url': '-tp pathtotp5n.manifest -tpchrome -tpmozafterpaint -tpnoisy -rss -tpcycles 1 -tppagecycles 1', 'setup': 'pathtosetup', 'linux_counters': [], 'tpmanifest': 'pathtotp5n.manifest', 'w7_counters': [], 'timeout': 1800, 'xperf_stackwalk': ['FileCreate', 'FileRead', 'FileWrite', 'FileFlush', 'FileClose'], 'win_counters': [], 'cycles': 1, 'resolution': 20, 'tpchrome': True} \ No newline at end of file
diff --git a/testing/talos/talos/unittests/test_test.py b/testing/talos/talos/unittests/test_test.py
new file mode 100644
index 0000000000..0f20676d25
--- /dev/null
+++ b/testing/talos/talos/unittests/test_test.py
@@ -0,0 +1,199 @@
+import mozunit
+import pytest
+
+from talos.test import Test, TsBase, register_test, test_dict, ts_paint
+
+
+class BasicTestA(Test):
+ pass
+
+
+class BasicTestB(Test):
+ pass
+
+
+class BasicTestC(Test):
+ """basic description"""
+
+ keys = ["nonnull_attrib", "null_attrib"]
+
+ nonnull_attrib = "value"
+ null_attrib = None
+
+
+class NotATest(object):
+ pass
+
+
+class Test_register_test(object):
+ def test_same_instance_returned(self):
+ decorator = register_test()
+ NewBasicTest = decorator(BasicTestA)
+
+ assert BasicTestA is NewBasicTest
+
+ def test_class_registered(self):
+ _TESTS = test_dict()
+ decorator = register_test()
+
+ # class registered
+ decorator(BasicTestB)
+ assert "BasicTestB" in _TESTS
+ assert BasicTestB in _TESTS.values()
+
+ # cannot register same class
+ with pytest.raises(AssertionError):
+ decorator(BasicTestB)
+
+ # # cannot register other class type
+ with pytest.raises(AssertionError):
+ decorator(NotATest)
+
+
+class TestTest(object):
+ def test_same_class_name(self):
+ assert BasicTestA.name() == "BasicTestA"
+
+ def test_class_doc(self):
+ assert BasicTestA.description() is not None
+ assert BasicTestC.description() == "basic description"
+
+ def test_init(self):
+ basic_test = BasicTestA(new_attrib_a="value_a", new_attrib_b="value_b")
+ assert basic_test.new_attrib_a == "value_a"
+ assert basic_test.new_attrib_b == "value_b"
+
+ def test_update(self):
+ basic_test = BasicTestA()
+ basic_test.update(new_attrib_a="value_a", new_attrib_b="value_b")
+
+ assert basic_test.new_attrib_a == "value_a"
+ assert basic_test.new_attrib_b == "value_b"
+
+ basic_test.update(new_attrib_c="value_c")
+ assert basic_test.new_attrib_c == "value_c"
+
+ def test_items(self):
+ basic_test = BasicTestC()
+
+ # returns iterable
+ try:
+ iter(basic_test.items())
+ except TypeError:
+ pytest.fail("Test.items() did not return iterator")
+
+ tuple_result = basic_test.items()[0]
+ assert len(tuple_result) == 2
+
+ # returns not nones
+ assert ("nonnull_attrib", "value") in basic_test.items()
+ assert ("null_attrib", None) not in basic_test.items()
+
+ # not overriden Test instance
+ test_instance = Test()
+ assert test_instance.items() == [("name", "Test")]
+
+ # overriden Test instance
+ test_instance = Test(unregistered_attr="value")
+ assert ("unregistered_attr", "value") not in test_instance.items()
+
+ test_instance = Test()
+ test_instance.update(keys=["cycles", "desktop", "lower_is_better"])
+ assert dict(test_instance.items()) == {
+ "name": "Test",
+ "desktop": True,
+ "lower_is_better": True,
+ }
+
+ test_instance = Test()
+ test_instance.update(new_attrib="some")
+ assert ("new_attrib", "some") not in test_instance.items()
+
+ test_instance = Test()
+ test_instance.update(keys=["new_attrib"], new_attrib="value")
+ assert dict(test_instance.items()) == {"name": "Test", "new_attrib": "value"}
+
+ test_instance = Test(cycles=20, desktop=False)
+ assert test_instance.cycles == 20
+ assert test_instance.desktop is False
+
+ test_instance = Test()
+ test_instance.update(cycles=20, desktop=False)
+ assert test_instance.cycles == 20
+ assert test_instance.desktop is False
+
+
+class TestTsBase(object):
+ ts_base_registered_keys = {
+ "url",
+ "url_timestamp",
+ "timeout",
+ "cycles",
+ "profile_path",
+ "gecko_profile",
+ "gecko_profile_interval",
+ "gecko_profile_entries",
+ "gecko_profile_startup",
+ "preferences",
+ "xperf_counters",
+ "xperf_providers",
+ "xperf_user_providers",
+ "xperf_stackwalk",
+ "tpmozafterpaint",
+ "fnbpaint",
+ "tphero",
+ "profile",
+ "firstpaint",
+ "userready",
+ "testeventmap",
+ "base_vs_ref",
+ "extensions",
+ "filters",
+ "setup",
+ "cleanup",
+ "webextensions",
+ "reinstall",
+ }
+
+ def setup_method(self):
+ self.test_instance = TsBase()
+
+ def test_no_unknown_keys_are_somehow_added_alongside_registered_ones(self):
+ assert set(self.test_instance.keys) == self.ts_base_registered_keys
+
+ self.test_instance.update(attribute_one="value", attribute_two="value")
+ assert set(self.test_instance.keys) == self.ts_base_registered_keys
+
+ def test_nonnull_keys_show_up(self):
+ assert dict(self.test_instance.items()) == {
+ "name": "TsBase",
+ "filters": self.test_instance.filters,
+ }
+
+ self.test_instance.update(timeout=500)
+ assert dict(self.test_instance.items()) == {
+ "name": "TsBase",
+ "filters": self.test_instance.filters,
+ "timeout": 500,
+ }
+
+
+class Test_ts_paint(object):
+ def test_test_nonnull_keys_show_up(self):
+ test_instance = ts_paint()
+ keys = {key for key, _ in test_instance.items()}
+ assert keys == {
+ "name",
+ "cycles",
+ "timeout",
+ "gecko_profile_startup",
+ "gecko_profile_entries",
+ "url",
+ "xperf_counters",
+ "filters",
+ "tpmozafterpaint",
+ }
+
+
+if __name__ == "__main__":
+ mozunit.main()
diff --git a/testing/talos/talos/unittests/test_ttest.py b/testing/talos/talos/unittests/test_ttest.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/testing/talos/talos/unittests/test_ttest.py
diff --git a/testing/talos/talos/unittests/test_whitelist.py b/testing/talos/talos/unittests/test_whitelist.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/testing/talos/talos/unittests/test_whitelist.py
diff --git a/testing/talos/talos/unittests/test_xtalos.py b/testing/talos/talos/unittests/test_xtalos.py
new file mode 100644
index 0000000000..ed536d7930
--- /dev/null
+++ b/testing/talos/talos/unittests/test_xtalos.py
@@ -0,0 +1,40 @@
+import re
+
+import mozunit
+
+from talos.xtalos.etlparser import NAME_SUBSTITUTIONS
+
+
+def test_NAME_SUBSTITUTIONS():
+ filepaths_map = {
+ # tp5n files
+ r"{talos}\talos\tests\tp5n\alibaba.com\i03.i.aliimg.com\images\eng\style\css_images": r"{talos}\talos\tests\{tp5n_files}", # NOQA: E501
+ r"{talos}\talos\tests\tp5n\cnet.com\i.i.com.com\cnwk.1d\i\tron\fd": r"{talos}\talos\tests\{tp5n_files}", # NOQA: E501
+ r"{talos}\talos\tests\tp5n\tp5n.manifest": r"{talos}\talos\tests\{tp5n_files}",
+ r"{talos}\talos\tests\tp5n\tp5n.manifest.develop": r"{talos}\talos\tests\{tp5n_files}",
+ r"{talos}\talos\tests\tp5n\yelp.com\media1.ct.yelpcdn.com\photo": r"{talos}\talos\tests\{tp5n_files}", # NOQA: E501
+ # cltbld for Windows 7 32bit
+ r"c:\users\cltbld.t-w732-ix-015.000\appdata\locallow\mozilla": r"c:\users\{cltbld}\appdata\locallow\mozilla", # NOQA: E501
+ r"c:\users\cltbld.t-w732-ix-035.000\appdata\locallow\mozilla": r"c:\users\{cltbld}\appdata\locallow\mozilla", # NOQA: E501
+ r"c:\users\cltbld.t-w732-ix-058.000\appdata\locallow\mozilla": r"c:\users\{cltbld}\appdata\locallow\mozilla", # NOQA: E501
+ r"c:\users\cltbld.t-w732-ix-112.001\appdata\local\temp": r"c:\users\{cltbld}\appdata\local\temp", # NOQA: E501
+ # nvidia's 3D Vision
+ r"c:\program files\nvidia corporation\3d vision\npnv3dv.dll": r"c:\program files\{nvidia_3d_vision}", # NOQA: E501
+ r"c:\program files\nvidia corporation\3d vision\npnv3dvstreaming.dll": r"c:\program files\{nvidia_3d_vision}", # NOQA: E501
+ r"c:\program files\nvidia corporation\3d vision\nvstereoapii.dll": r"c:\program files\{nvidia_3d_vision}", # NOQA: E501
+ r"{firefox}\browser\extensions\{45b6d270-f6ec-4930-a6ad-14bac5ea2204}.xpi": r"{firefox}\browser\extensions\{uuid}.xpi", # NOQA: E501
+ r"c:\slave\test\build\venv\lib\site-packages\pip\_vendor\html5lib\treebuilders": r"c:\slave\test\build\venv\lib\site-packages\{pip_vendor}", # NOQA: E501
+ r"c:\slave\test\build\venv\lib\site-packages\pip\_vendor\colorama": r"c:\slave\test\build\venv\lib\site-packages\{pip_vendor}", # NOQA: E501
+ r"c:\slave\test\build\venv\lib\site-packages\pip\_vendor\cachecontrol\caches": r"c:\slave\test\build\venv\lib\site-packages\{pip_vendor}", # NOQA: E501
+ r"c:\slave\test\build\venv\lib\site-packages\pip\_vendor\requests\packages\urllib3\packages\ssl_match_hostname": r"c:\slave\test\build\venv\lib\site-packages\{pip_vendor}", # NOQA: E501
+ }
+
+ for given_raw_path, exp_normal_path in filepaths_map.items():
+ normal_path = given_raw_path
+ for pattern, substitution in NAME_SUBSTITUTIONS:
+ normal_path = re.sub(pattern, substitution, normal_path)
+ assert exp_normal_path == normal_path
+
+
+if __name__ == "__main__":
+ mozunit.main()
diff --git a/testing/talos/talos/unittests/xrestop_output.txt b/testing/talos/talos/unittests/xrestop_output.txt
new file mode 100644
index 0000000000..25a1b48efe
--- /dev/null
+++ b/testing/talos/talos/unittests/xrestop_output.txt
@@ -0,0 +1,224 @@
+0 - Thunderbird ( PID: 2035 ):
+ res_base : 0x1600000
+ res_mask : 0x1fffff
+ windows : 69
+ GCs : 35
+ fonts : 1
+ pixmaps : 175
+ pictures : 272
+ glyphsets : 73
+ colormaps : 0
+ passive grabs : 0
+ cursors : 9
+ unknowns : 42
+ pixmap bytes : 4715737
+ other bytes : ~13024
+ total bytes : ~4728761
+1 - 809276 – GetXRes should parse output of xrestop in process versus crazy shell commands - Nightly ( PID: 6076 ):
+ res_base : 0x1400000
+ res_mask : 0x1fffff
+ windows : 24
+ GCs : 36
+ fonts : 1
+ pixmaps : 122
+ pictures : 172
+ glyphsets : 49
+ colormaps : 0
+ passive grabs : 0
+ cursors : 6
+ unknowns : 19
+ pixmap bytes : 3535225
+ other bytes : ~8368
+ total bytes : ~3543593
+2 - Terminal ( PID: 1668 ):
+ res_base : 0x800000
+ res_mask : 0x1fffff
+ windows : 27
+ GCs : 3
+ fonts : 1
+ pixmaps : 32
+ pictures : 50
+ glyphsets : 4
+ colormaps : 0
+ passive grabs : 0
+ cursors : 5
+ unknowns : 56
+ pixmap bytes : 1943716
+ other bytes : ~4504
+ total bytes : ~1948220
+3 - Fluxbox ( PID: ? ):
+ res_base : 0xa00000
+ res_mask : 0x1fffff
+ windows : 286
+ GCs : 21
+ fonts : 1
+ pixmaps : 33
+ pictures : 562
+ glyphsets : 3
+ colormaps : 1
+ passive grabs : 254
+ cursors : 19
+ unknowns : 27
+ pixmap bytes : 684196
+ other bytes : ~29176
+ total bytes : ~713372
+4 - notify-osd ( PID: 1813 ):
+ res_base : 0x1000000
+ res_mask : 0x1fffff
+ windows : 2
+ GCs : 3
+ fonts : 0
+ pixmaps : 1
+ pictures : 2
+ glyphsets : 0
+ colormaps : 0
+ passive grabs : 0
+ cursors : 0
+ unknowns : 10
+ pixmap bytes : 74408
+ other bytes : ~408
+ total bytes : ~74816
+5 - <unknown> ( PID: ? ):
+ res_base : 0x0
+ res_mask : 0x1fffff
+ windows : 1
+ GCs : 0
+ fonts : 2
+ pixmaps : 0
+ pictures : 0
+ glyphsets : 0
+ colormaps : 0
+ passive grabs : 0
+ cursors : 1
+ unknowns : 68
+ pixmap bytes : 28940
+ other bytes : ~3728
+ total bytes : ~32668
+6 - <unknown> ( PID: ? ):
+ res_base : 0xe00000
+ res_mask : 0x1fffff
+ windows : 0
+ GCs : 0
+ fonts : 0
+ pixmaps : 1
+ pictures : 0
+ glyphsets : 0
+ colormaps : 0
+ passive grabs : 0
+ cursors : 0
+ unknowns : 0
+ pixmap bytes : 28940
+ other bytes : ~0
+ total bytes : ~28940
+7 - emacs@jhammel-ThinkPad-X230 ( PID: 4824 ):
+ res_base : 0x1a00000
+ res_mask : 0x1fffff
+ windows : 5
+ GCs : 45
+ fonts : 1
+ pixmaps : 8
+ pictures : 18
+ glyphsets : 3
+ colormaps : 1
+ passive grabs : 0
+ cursors : 9
+ unknowns : 9
+ pixmap bytes : 9239
+ other bytes : ~3184
+ total bytes : ~12423
+8 - NetworkManager Applet ( PID: 1798 ):
+ res_base : 0xc00000
+ res_mask : 0x1fffff
+ windows : 4
+ GCs : 3
+ fonts : 1
+ pixmaps : 17
+ pictures : 33
+ glyphsets : 2
+ colormaps : 0
+ passive grabs : 0
+ cursors : 1
+ unknowns : 15
+ pixmap bytes : 408
+ other bytes : ~2416
+ total bytes : ~2824
+9 - gnome-screensaver ( PID: 1817 ):
+ res_base : 0x1200000
+ res_mask : 0x1fffff
+ windows : 3
+ GCs : 1
+ fonts : 0
+ pixmaps : 0
+ pictures : 0
+ glyphsets : 0
+ colormaps : 0
+ passive grabs : 0
+ cursors : 0
+ unknowns : 9
+ pixmap bytes : 0
+ other bytes : ~312
+ total bytes : ~312
+10 - xrestop ( PID: ? ):
+ res_base : 0x1800000
+ res_mask : 0x1fffff
+ windows : 1
+ GCs : 1
+ fonts : 0
+ pixmaps : 0
+ pictures : 0
+ glyphsets : 0
+ colormaps : 0
+ passive grabs : 0
+ cursors : 0
+ unknowns : 0
+ pixmap bytes : 0
+ other bytes : ~48
+ total bytes : ~48
+11 - <unknown> ( PID: ? ):
+ res_base : 0x400000
+ res_mask : 0x1fffff
+ windows : 1
+ GCs : 1
+ fonts : 0
+ pixmaps : 0
+ pictures : 0
+ glyphsets : 0
+ colormaps : 0
+ passive grabs : 0
+ cursors : 0
+ unknowns : 0
+ pixmap bytes : 0
+ other bytes : ~48
+ total bytes : ~48
+12 - <unknown> ( PID: ? ):
+ res_base : 0x600000
+ res_mask : 0x1fffff
+ windows : 0
+ GCs : 1
+ fonts : 0
+ pixmaps : 0
+ pictures : 0
+ glyphsets : 0
+ colormaps : 0
+ passive grabs : 0
+ cursors : 0
+ unknowns : 0
+ pixmap bytes : 0
+ other bytes : ~24
+ total bytes : ~24
+13 - <unknown> ( PID: ? ):
+ res_base : 0x200000
+ res_mask : 0x1fffff
+ windows : 0
+ GCs : 0
+ fonts : 0
+ pixmaps : 0
+ pictures : 0
+ glyphsets : 0
+ colormaps : 0
+ passive grabs : 0
+ cursors : 0
+ unknowns : 0
+ pixmap bytes : 0
+ other bytes : ~0
+ total bytes : ~0
diff --git a/testing/talos/talos/utils.py b/testing/talos/talos/utils.py
new file mode 100644
index 0000000000..9b1c104258
--- /dev/null
+++ b/testing/talos/talos/utils.py
@@ -0,0 +1,177 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+"""Utility functions for Talos"""
+import os
+import platform
+import re
+import string
+import time
+import urllib.parse
+from sys import stdout
+
+try:
+ from mozlog import get_proxy_logger
+
+ LOG = get_proxy_logger()
+except ModuleNotFoundError:
+ LOG = stdout
+
+# directory of this file for use with interpolatePath()
+here = os.path.dirname(os.path.realpath(__file__))
+
+
+class Timer(object):
+ def __init__(self):
+ self._start_time = 0
+ self.start()
+
+ def start(self):
+ self._start_time = time.time()
+
+ def elapsed(self):
+ seconds = time.time() - self._start_time
+ return time.strftime("%H:%M:%S", time.gmtime(seconds))
+
+
+class TalosError(Exception):
+ "Errors found while running the talos harness."
+
+
+class TalosRegression(Exception):
+ """When a regression is detected at runtime, report it properly
+ Currently this is a simple definition so we can detect the class type
+ """
+
+
+class TalosCrash(Exception):
+ """Exception type where we want to report a crash and stay
+ compatible with tbpl while allowing us to continue on.
+
+ https://bugzilla.mozilla.org/show_bug.cgi?id=829734
+ """
+
+
+def interpolate(template, **kwargs):
+ """
+ Use string.Template to substitute variables in a string.
+
+ The placeholder ${talos} is always defined and will be replaced by the
+ folder containing this file (global variable 'here').
+
+ You can add placeholders using kwargs.
+ """
+ kwargs.setdefault("talos", here)
+ return string.Template(template).safe_substitute(**kwargs)
+
+
+def findall(string, token):
+ """find all occurences in a string"""
+ return [m.start() for m in re.finditer(re.escape(token), string)]
+
+
+def tokenize(string, start, end):
+ """
+ tokenize a string by start + end tokens,
+ returns parts and position of last token
+ """
+ assert end not in start, "End token '%s' is contained in start token '%s'" % (
+ end,
+ start,
+ )
+ assert start not in end, "Start token '%s' is contained in end token '%s'" % (
+ start,
+ end,
+ )
+ _start = findall(string, start)
+ _end = findall(string, end)
+ if not _start and not _end:
+ return [], -1
+ assert len(_start), "Could not find start token: '%s'" % start
+ assert len(_end), "Could not find end token: '%s'" % end
+ assert len(_start) == len(
+ _end
+ ), "Unmatched number of tokens found: '%s' (%d) vs '%s' (%d)" % (
+ start,
+ len(_start),
+ end,
+ len(_end),
+ )
+ for i in range(len(_start)):
+ assert _end[i] > _start[i], "End token '%s' occurs before start token '%s'" % (
+ end,
+ start,
+ )
+ parts = []
+ for i in range(len(_start)):
+ parts.append(string[_start[i] + len(start) : _end[i]])
+ return parts, _end[-1]
+
+
+def urlsplit(url, default_scheme="file"):
+ """front-end to urlparse.urlsplit"""
+
+ if "://" not in url:
+ url = "%s://%s" % (default_scheme, url)
+
+ if url.startswith("file://"):
+ # file:// URLs do not play nice with windows
+ # https://bugzilla.mozilla.org/show_bug.cgi?id=793875
+ return ["file", "", url[len("file://") :], "", ""]
+
+ # split the URL and return a list
+ return [i for i in urllib.parse.urlsplit(url)]
+
+
+def parse_pref(value):
+ """parse a preference value from a string"""
+ from mozprofile.prefs import Preferences
+
+ return Preferences.cast(value)
+
+
+def GenerateBrowserCommandLine(
+ browser_path, extra_args, profile_dir, url, profiling_info=None
+):
+ # TODO: allow for spaces in file names on Windows
+ command_args = [browser_path.strip()]
+
+ if platform.system() == "Darwin":
+ command_args.extend(["-foreground"])
+
+ if isinstance(extra_args, list):
+ command_args.extend(extra_args)
+
+ elif extra_args.strip():
+ command_args.extend([extra_args])
+
+ command_args.extend(["-profile", profile_dir])
+
+ if profiling_info:
+ # pageloader tests use a tpmanifest browser pref instead of passing in a manifest url
+ # profiling info is handled differently for pageloader vs non-pageloader (startup) tests
+ # for pageloader the profiling info was mirrored already in an env var; so here just
+ # need to setup profiling info for startup / non-pageloader tests
+ if url is not None:
+ # for non-pageloader/non-manifest tests the profiling info is added to the test url
+ if url.find("?") != -1:
+ url += "&" + urllib.parse.urlencode(profiling_info)
+ else:
+ url += "?" + urllib.parse.urlencode(profiling_info)
+
+ # if there's a url i.e. startup test / non-manifest test, add it to the cmd line args
+ if url is not None:
+ command_args.extend(url.split(" "))
+
+ return command_args
+
+
+def run_in_debug_mode(browser_config):
+ if (
+ browser_config.get("debug")
+ or browser_config.get("debugger")
+ or browser_config.get("debugg_args")
+ ):
+ return True
+ return False
diff --git a/testing/talos/talos/webextensions/dummy/background.js b/testing/talos/talos/webextensions/dummy/background.js
new file mode 100644
index 0000000000..1b20f85cfa
--- /dev/null
+++ b/testing/talos/talos/webextensions/dummy/background.js
@@ -0,0 +1,88 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+/* eslint-env webextensions */
+
+let skipFilters = false;
+
+browser.webRequest.onBeforeRequest.addListener(
+ details => {
+ if (details.url.endsWith("/startup_test/tspaint_test.html")) {
+ skipFilters = true;
+ }
+ if (skipFilters || details.url.endsWith("/favicon.ico")) {
+ return;
+ }
+
+ let filter = browser.webRequest.filterResponseData(details.requestId);
+
+ filter.onstop = event => {
+ filter.close();
+ };
+ filter.ondata = event => {
+ filter.write(event.data);
+ };
+ },
+ {
+ urls: ["<all_urls>"],
+ },
+ ["blocking"]
+);
+
+browser.webRequest.onBeforeSendHeaders.addListener(
+ details => {
+ return { requestHeaders: details.requestHeaders };
+ },
+ { urls: ["https://*/*", "http://*/*"] },
+ ["blocking", "requestHeaders"]
+);
+
+browser.webRequest.onHeadersReceived.addListener(
+ details => {
+ return { responseHeaders: details.responseHeaders };
+ },
+ { urls: ["https://*/*", "http://*/*"] },
+ ["blocking", "responseHeaders"]
+);
+
+browser.webRequest.onErrorOccurred.addListener(details => {}, {
+ urls: ["https://*/*", "http://*/*"],
+});
+
+browser.runtime.onMessage.addListener(msg => {
+ return Promise.resolve({ code: "10-4", msg });
+});
+
+browser.tabs.onUpdated.addListener((tabId, changed, tab) => {
+ if (changed.url) {
+ browser.pageAction.show(tabId);
+ }
+ if (changed.title) {
+ browser.pageAction.setTitle({ tabId, title: `title: ${tab.title}` });
+ browser.pageAction.setIcon({ tabId, path: { 16: "/icon.png" } });
+
+ browser.browserAction.setTitle({ tabId, title: `title: ${tab.title}` });
+ browser.browserAction.setIcon({ path: { 16: "/icon.png" } });
+ }
+
+ browser.tabs.sendMessage(tabId, { changed, tab }).catch(() => {
+ // Ignore tabs that don't have a listener yet.
+ });
+});
+
+browser.tabs.onActivated.addListener(({ tabId, windowId }) => {
+ browser.pageAction.show(tabId);
+});
+
+browser.tabs.onCreated.addListener(tab => {
+ browser.pageAction.show(tab.id);
+});
+
+browser.tabs.onRemoved.addListener((tabId, removeInfo) => {});
+
+browser.tabs.onAttached.addListener((tabId, attachInfo) => {});
+
+browser.tabs.onDetached.addListener((tabId, detachInfo) => {});
diff --git a/testing/talos/talos/webextensions/dummy/content.js b/testing/talos/talos/webextensions/dummy/content.js
new file mode 100644
index 0000000000..3a5a7e02cb
--- /dev/null
+++ b/testing/talos/talos/webextensions/dummy/content.js
@@ -0,0 +1,16 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+/* eslint-env webextensions */
+
+browser.runtime.sendMessage({
+ msg: "Hello from content script",
+ url: location.href,
+});
+
+browser.runtime.onMessage.addListener(msg => {
+ return Promise.resolve({ code: "10-4", msg });
+});
diff --git a/testing/talos/talos/webextensions/dummy/dummy.xpi b/testing/talos/talos/webextensions/dummy/dummy.xpi
new file mode 100644
index 0000000000..86850e2a6f
--- /dev/null
+++ b/testing/talos/talos/webextensions/dummy/dummy.xpi
Binary files differ
diff --git a/testing/talos/talos/webextensions/dummy/icon.png b/testing/talos/talos/webextensions/dummy/icon.png
new file mode 100644
index 0000000000..253851bc46
--- /dev/null
+++ b/testing/talos/talos/webextensions/dummy/icon.png
Binary files differ
diff --git a/testing/talos/talos/webextensions/dummy/manifest.json b/testing/talos/talos/webextensions/dummy/manifest.json
new file mode 100644
index 0000000000..9ef2838400
--- /dev/null
+++ b/testing/talos/talos/webextensions/dummy/manifest.json
@@ -0,0 +1,26 @@
+{
+ "browser_specific_settings": {
+ "gecko": {
+ "id": "talos@mozilla.org"
+ }
+ },
+ "manifest_version": 2,
+ "name": "Talos Blank Web Extension System Add-on",
+ "version": "0.2.2",
+ "permissions": [
+ "http://*/",
+ "https://*/",
+ "tabs",
+ "webRequest",
+ "webRequestBlocking"
+ ],
+ "background": { "scripts": ["background.js"] },
+ "content_scripts": [
+ {
+ "matches": ["<all_urls>"],
+ "js": ["content.js"]
+ }
+ ],
+ "browser_action": {},
+ "page_action": {}
+}
diff --git a/testing/talos/talos/xtalos/__init__.py b/testing/talos/talos/xtalos/__init__.py
new file mode 100644
index 0000000000..6fbe8159b2
--- /dev/null
+++ b/testing/talos/talos/xtalos/__init__.py
@@ -0,0 +1,3 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
diff --git a/testing/talos/talos/xtalos/etlparser.py b/testing/talos/talos/xtalos/etlparser.py
new file mode 100644
index 0000000000..5bbfa913f5
--- /dev/null
+++ b/testing/talos/talos/xtalos/etlparser.py
@@ -0,0 +1,639 @@
+#!/usr/bin/env python
+
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import csv
+import json
+import os
+import re
+import shutil
+import subprocess
+import sys
+
+from talos.xtalos import xtalos
+
+EVENTNAME_INDEX = 0
+PROCESS_INDEX = 2
+THREAD_ID_INDEX = 3
+PARENT_PID_INDEX = 3
+DISKBYTES_COL = "Size"
+FNAME_COL = "FileName"
+IMAGEFUNC_COL = "Image!Function"
+EVENTGUID_COL = "EventGuid"
+ACTIVITY_ID_COL = "etw:ActivityId"
+NUMBYTES_COL = "NumBytes"
+BYTESSENT_COL = "BytesSent"
+
+CEVT_WINDOWS_RESTORED = "{917b96b1-ecad-4dab-a760-8d49027748ae}"
+CEVT_XPCOM_SHUTDOWN = "{26d1e091-0ae7-4f49-a554-4214445c505c}"
+NAME_SUBSTITUTIONS = [
+ # Careful with your regex!
+ # Substitution happens after combinations like \t \s \n ... are replaced
+ # with their real representations. So, prepend them with extra backslash.
+ # Read more: https://docs.python.org/2.7/library/re.html#re.sub
+ (re.compile(r"{\w{8}-\w{4}-\w{4}-\w{4}-\w{12}}"), "{uuid}"),
+ (re.compile(r"talos\\tests\\tp5n\\.*"), r"talos\\tests\{tp5n_files}"),
+ (re.compile(r"nvidia corporation\\3d vision\\.*"), "{nvidia_3d_vision}"),
+ (re.compile(r"cltbld\.t-w732-ix-\d+\.\d+"), "{cltbld}"),
+ (
+ re.compile(r"venv\\lib\\site-packages\\pip\\_vendor\\.*"),
+ r"venv\\lib\\site-packages\\{pip_vendor}",
+ ),
+]
+stages = ["startup", "normal", "shutdown"]
+net_events = {
+ "TcpDataTransferReceive": "recv",
+ "UdpEndpointReceiveMessages": "recv",
+ "TcpDataTransferSend": "send",
+ "UdpEndpointSendMessages": "send",
+}
+gThreads = {}
+gConnectionIDs = {}
+gHeaders = {}
+gBrowserPID = None
+
+
+def uploadFile(filename):
+ mud = os.environ.get("MOZ_UPLOAD_DIR", None)
+ if mud:
+ print("uploading raw file %s via blobber" % filename)
+ mud_filename = os.path.join(mud, filename)
+ shutil.copyfile(filename, "%s.log" % mud_filename)
+
+
+def filterOutHeader(data):
+ # -1 means we have not yet found the header
+ # 0 means we are in the header
+ # 1+ means that we are past the header
+ state = -1
+ done = False
+ while not done:
+ try:
+ row = next(data)
+ except StopIteration:
+ done = True
+ break
+ except UnicodeDecodeError:
+ continue
+ except csv.Error:
+ continue
+
+ if not len(row):
+ continue
+
+ if state < 0:
+ # Keep looking for the header (denoted by "BeginHeader").
+ if row[0] == "BeginHeader":
+ state = 0
+ continue
+
+ if state == 0:
+ # Eventually, we'll find the end (denoted by "EndHeader").
+ if row[0] == "EndHeader":
+ state = 1
+ continue
+
+ gHeaders[row[EVENTNAME_INDEX]] = row
+ continue
+
+ if state >= 1:
+ state = state + 1
+
+ # The line after "EndHeader" is also not useful, so we want to strip
+ # that in addition to the header.
+ if state > 2:
+ yield row
+
+
+def getIndex(eventName, *colNames):
+ eventHeader = gHeaders[eventName]
+
+ for colName in colNames:
+ try:
+ return eventHeader.index(colName)
+ except ValueError:
+ pass
+
+ return None
+
+
+def readFile(filename):
+ data = csv.reader(
+ open(filename, "r", encoding="cp1252"),
+ delimiter=",",
+ quotechar='"',
+ skipinitialspace=True,
+ )
+ data = filterOutHeader(data)
+ return data
+
+
+def fileSummary(row, stage, retVal):
+ event = row[EVENTNAME_INDEX]
+
+ # TODO: do we care about the other events?
+ if event not in ("FileIoRead", "FileIoWrite"):
+ return
+ fname_index = getIndex(event, FNAME_COL)
+
+ # We only care about events that have a file name.
+ if fname_index is None:
+ return
+
+ # Some data rows are missing the filename?
+ if len(row) <= fname_index:
+ return
+
+ thread_extra = ""
+ if gThreads[row[THREAD_ID_INDEX]] == "main":
+ thread_extra = " (main)"
+ key_tuple = (
+ row[fname_index],
+ "%s%s" % (row[THREAD_ID_INDEX], thread_extra),
+ stages[stage],
+ )
+ total_tuple = (
+ row[fname_index],
+ "%s%s" % (row[THREAD_ID_INDEX], thread_extra),
+ "all",
+ )
+
+ if key_tuple not in retVal:
+ retVal[key_tuple] = {
+ "DiskReadBytes": 0,
+ "DiskReadCount": 0,
+ "DiskWriteBytes": 0,
+ "DiskWriteCount": 0,
+ }
+ retVal[total_tuple] = retVal[key_tuple]
+
+ if event == "FileIoRead":
+ retVal[key_tuple]["DiskReadCount"] += 1
+ retVal[total_tuple]["DiskReadCount"] += 1
+ idx = getIndex(event, DISKBYTES_COL)
+ retVal[key_tuple]["DiskReadBytes"] += int(row[idx], 16)
+ retVal[total_tuple]["DiskReadBytes"] += int(row[idx], 16)
+ elif event == "FileIoWrite":
+ retVal[key_tuple]["DiskWriteCount"] += 1
+ retVal[total_tuple]["DiskWriteCount"] += 1
+ idx = getIndex(event, DISKBYTES_COL)
+ retVal[key_tuple]["DiskWriteBytes"] += int(row[idx], 16)
+ retVal[total_tuple]["DiskWriteBytes"] += int(row[idx], 16)
+
+
+def etl2csv(xperf_path, etl_filename, debug=False):
+ """
+ Convert etl_filename to etl_filename.csv (temp file) which is the .csv
+ representation of the .etl file Etlparser will read this .csv and parse
+ the information we care about into the final output. This is done to keep
+ things simple and to preserve resources on talos machines
+ (large files == high memory + cpu)
+ """
+
+ xperf_cmd = [
+ xperf_path,
+ "-merge",
+ "%s.user" % etl_filename,
+ "%s.kernel" % etl_filename,
+ etl_filename,
+ ]
+ if debug:
+ print("executing '%s'" % subprocess.list2cmdline(xperf_cmd))
+ subprocess.call(xperf_cmd)
+
+ csv_filename = "%s.csv" % etl_filename
+ xperf_cmd = [xperf_path, "-i", etl_filename, "-o", csv_filename]
+ if debug:
+ print("executing '%s'" % subprocess.list2cmdline(xperf_cmd))
+ subprocess.call(xperf_cmd)
+ return csv_filename
+
+
+def trackProcess(row, firstFirefoxPID):
+ global gBrowserPID
+ if gBrowserPID:
+ return
+
+ # Without the launcher, the initial Firefox process *is* the browser
+ # process. OTOH, with the launcher process enabled, the browser is actually
+ # the first child process of the first Firefox process.
+ parentPID = int(row[PARENT_PID_INDEX])
+ if parentPID == firstFirefoxPID:
+ proc = row[PROCESS_INDEX]
+ gBrowserPID = int(re.search("^.* \(\s*(\d+)\)$", proc).group(1))
+
+
+def getBrowserPID():
+ global gBrowserPID
+ return gBrowserPID
+
+
+def trackThread(row, browserPID):
+ event, proc, tid = row[EVENTNAME_INDEX], row[PROCESS_INDEX], row[THREAD_ID_INDEX]
+ if event in ["T-DCStart", "T-Start"]:
+ procName, procID = re.search("^(.*) \(\s*(\d+)\)$", proc).group(1, 2)
+ if procID == str(browserPID):
+ imgIdx = getIndex(event, IMAGEFUNC_COL)
+ img = re.match("([^!]+)!", row[imgIdx]).group(1)
+ if img == procName:
+ gThreads[tid] = "main"
+ else:
+ gThreads[tid] = "nonmain"
+ elif event in ["T-DCEnd", "T-End"] and tid in gThreads:
+ del gThreads[tid]
+
+
+def trackThreadFileIO(row, io, stage):
+ event, tid = row[EVENTNAME_INDEX], row[THREAD_ID_INDEX]
+ opType = {"FileIoWrite": "write", "FileIoRead": "read"}[event]
+ th, stg = gThreads[tid], stages[stage]
+ sizeIdx = getIndex(event, DISKBYTES_COL)
+ bytes = int(row[sizeIdx], 16)
+ io[(th, stg, "file_%s_ops" % opType)] = (
+ io.get((th, stg, "file_%s_ops" % opType), 0) + 1
+ )
+ io[(th, stg, "file_%s_bytes" % opType)] = (
+ io.get((th, stg, "file_%s_bytes" % opType), 0) + bytes
+ )
+ io[(th, stg, "file_io_bytes")] = io.get((th, stg, "file_io_bytes"), 0) + bytes
+
+
+def trackThreadNetIO(row, io, stage):
+ event, tid = row[EVENTNAME_INDEX], row[THREAD_ID_INDEX]
+ connIdIdx = getIndex(event, ACTIVITY_ID_COL)
+ connID = row[connIdIdx]
+ if connID not in gConnectionIDs:
+ gConnectionIDs[connID] = tid
+ origThread = gConnectionIDs[connID]
+ if origThread in gThreads:
+ match = re.match("[\w-]+\/([\w-]+)?", event)
+ if not match:
+ raise xtalos.XTalosError(
+ "Could not find a regular expression match for event: {}".format(event)
+ )
+ netEvt = match.group(1)
+
+ if netEvt in net_events:
+ opType = net_events[netEvt]
+ th, stg = gThreads[origThread], stages[stage]
+ # On newer versions of Windows, some net I/O events have switched to
+ # using BYTESSENT_COL, so we try both
+ lenIdx = getIndex(event, NUMBYTES_COL, BYTESSENT_COL)
+ bytes = int(row[lenIdx])
+ io[(th, stg, "net_%s_bytes" % opType)] = (
+ io.get((th, stg, "net_%s_bytes" % opType), 0) + bytes
+ )
+ io[(th, stg, "net_io_bytes")] = io.get((th, stg, "net_io_bytes"), 0) + bytes
+
+
+def updateStage(row, stage):
+ guidIdx = getIndex(row[EVENTNAME_INDEX], EVENTGUID_COL)
+ if row[guidIdx] == CEVT_WINDOWS_RESTORED and stage == 0:
+ stage = 1
+ elif row[guidIdx] == CEVT_XPCOM_SHUTDOWN and stage == 1:
+ stage = 2
+ return stage
+
+
+def loadAllowlist(filename):
+ if not filename:
+ return
+ if not os.path.exists(filename):
+ print("Warning: xperf allowlist %s was not found" % filename)
+ return
+ lines = open(filename).readlines()
+ # Expand paths
+ lines = [os.path.expandvars(elem.strip()) for elem in lines]
+ files = set()
+ dirs = set()
+ recur = set()
+ for line in lines:
+ if line.startswith("#"):
+ continue
+ elif line.endswith("\\*\\*"):
+ recur.add(line[:-4])
+ elif line.endswith("\\*"):
+ dirs.add(line[:-2])
+ else:
+ files.add(line)
+ return (files, dirs, recur)
+
+
+def checkAllowlist(filename, allowlist):
+ if not allowlist:
+ return False
+ if filename in allowlist[0]:
+ return True
+ if os.path.dirname(filename) in allowlist[1]:
+ return True
+ head = filename
+ while len(head) > 3: # Length 3 implies root directory, e.g. C:\
+ head, tail = os.path.split(head)
+ if head in allowlist[2]:
+ return True
+ return False
+
+
+def etlparser(
+ xperf_path,
+ etl_filename,
+ processID,
+ approot=None,
+ configFile=None,
+ outputFile=None,
+ allowlist_file=None,
+ error_filename=None,
+ all_stages=False,
+ all_threads=False,
+ debug=False,
+):
+ global NAME_SUBSTITUTIONS
+
+ # setup output file
+ if outputFile:
+ outFile = open(outputFile, "w")
+ else:
+ outFile = sys.stdout
+
+ files = {}
+ io = {}
+ stage = 0
+
+ csvname = etl2csv(xperf_path, etl_filename, debug=debug)
+ for row in readFile(csvname):
+ event = row[EVENTNAME_INDEX]
+ if event == "P-Start":
+ trackProcess(row, processID)
+ elif event in ["T-DCStart", "T-Start", "T-DCEnd", "T-End"]:
+ trackThread(row, getBrowserPID())
+ elif (
+ event in ["FileIoRead", "FileIoWrite"] and row[THREAD_ID_INDEX] in gThreads
+ ):
+ fileSummary(row, stage, files)
+ trackThreadFileIO(row, io, stage)
+ elif event.endswith("Event/Classic") and row[THREAD_ID_INDEX] in gThreads:
+ stage = updateStage(row, stage)
+ elif event.startswith("Microsoft-Windows-TCPIP"):
+ trackThreadNetIO(row, io, stage)
+
+ if debug:
+ uploadFile(csvname)
+
+ output = "thread, stage, counter, value\n"
+ for cntr in sorted(io.keys()):
+ output += "%s, %s\n" % (", ".join(cntr), str(io[cntr]))
+ if outputFile:
+ fname = "%s_thread_stats%s" % os.path.splitext(outputFile)
+ with open(fname, "w") as f:
+ f.write(output)
+
+ if debug:
+ uploadFile(fname)
+ else:
+ print(output)
+
+ allowlist = loadAllowlist(allowlist_file)
+
+ header = "filename, tid, stage, readcount, readbytes, writecount," " writebytes"
+ outFile.write(header + "\n")
+
+ # Filter out stages, threads, and allowlisted files that we're not
+ # interested in
+ filekeys = [
+ x
+ for x in files.keys()
+ if (all_stages or x[2] == stages[0])
+ and (all_threads or x[1].endswith("(main)"))
+ and (all_stages and x[2] != stages[0] or not checkAllowlist(x[0], allowlist))
+ ]
+ if debug:
+ # in debug, we want stages = [startup+normal] and all threads, not just (main)
+ # we will use this data to upload fileIO info to blobber only for debug mode
+ outputData = [
+ x
+ for x in files.keys()
+ if (all_stages or x[2] in [stages[0], stages[1]])
+ and (
+ all_stages
+ and x[2] not in [stages[0], stages[1]]
+ or not checkAllowlist(x[0], allowlist)
+ )
+ ]
+ else:
+ outputData = filekeys
+
+ # output data
+ for row in outputData:
+ output = "%s, %s, %s, %s, %s, %s, %s\n" % (
+ row[0],
+ row[1],
+ row[2],
+ files[row]["DiskReadCount"],
+ files[row]["DiskReadBytes"],
+ files[row]["DiskWriteCount"],
+ files[row]["DiskWriteBytes"],
+ )
+ outFile.write(output)
+
+ if outputFile:
+ # close the file handle
+ outFile.close()
+ if debug:
+ uploadFile(outputFile)
+
+ # We still like to have the outputfile to record the raw data, now
+ # filter out acceptable files/ranges
+ allowlist_path = None
+ wl_temp = {}
+ dirname = os.path.dirname(__file__)
+ if os.path.exists(os.path.join(dirname, "xperf_allowlist.json")):
+ allowlist_path = os.path.join(dirname, "xperf_allowlist.json")
+ elif os.path.exists(os.path.join(dirname, "xtalos")) and os.path.exists(
+ os.path.join(dirname, "xtalos", "xperf_allowlist.json")
+ ):
+ allowlist_path = os.path.join(dirname, "xtalos", "xperf_allowlist.json")
+
+ wl_temp = {}
+ if allowlist_path:
+ with open(allowlist_path, "r") as fHandle:
+ wl_temp = json.load(fHandle)
+
+ # Approot is the full path where the application is located at
+ # We depend on it for dependentlibs.list to ignore files required for
+ # normal startup.
+ if approot:
+ if os.path.exists("%s\\dependentlibs.list" % approot):
+ with open("%s\\dependentlibs.list" % approot, "r") as fhandle:
+ libs = fhandle.readlines()
+
+ for lib in libs:
+ wl_temp["{firefox}\\%s" % lib.strip()] = {"ignore": True}
+
+ # Windows isn't case sensitive, this protects us against mismatched
+ # systems.
+ wl = {}
+ for item in wl_temp:
+ wl[item.lower()] = wl_temp[item]
+
+ errors = []
+ for row in filekeys:
+ filename = original_filename = row[0]
+ filename = filename.lower()
+ # take care of 'program files (x86)' matching 'program files'
+ filename = filename.replace(" (x86)", "")
+
+ paths = ["profile", "firefox", "desktop", "talos"]
+ for path in paths:
+ pathname = "%s\\" % path
+ parts = filename.split(pathname)
+ if len(parts) >= 2:
+ filename = "{%s}\\%s" % (path, pathname.join(parts[1:]))
+
+ parts = filename.split("\\installtime")
+ if len(parts) >= 2:
+ filename = "%s\\{time}" % parts[0]
+
+ # NOTE: this is Prefetch or prefetch, not case sensitive operating
+ # system
+ parts = filename.split("refetch")
+ if len(parts) >= 2:
+ filename = "%srefetch\\{prefetch}.pf" % parts[0]
+
+ for pattern, substitution in NAME_SUBSTITUTIONS:
+ filename = re.sub(pattern, substitution, filename)
+
+ if filename in wl:
+ if "ignore" in wl[filename] and wl[filename]["ignore"]:
+ continue
+
+ # too noisy
+ # if wl[filename]['minbytes'] > (files[row]['DiskReadBytes'] +\
+ # files[row]['DiskWriteBytes']):
+ # print "%s: read %s bytes, less than expected minimum: %s"
+ # % (filename, (files[row]['DiskReadBytes'] +
+ # files[row]['DiskWriteBytes']),
+ # wl[filename]['minbytes'])
+
+ # don't report in first round
+ # elif wl[filename]['maxbytes'] < (files[row]['DiskReadBytes'] +\
+ # files[row]['DiskWriteBytes']):
+ # errors.append("%s: read %s bytes, more than expected maximum:"
+ # " %s"
+ # % (filename, (files[row]['DiskReadBytes'] +
+ # files[row]['DiskWriteBytes']),
+ # wl[filename]['maxbytes']))
+
+ # too noisy
+ # elif wl[filename]['mincount'] > (files[row]['DiskReadCount'] +\
+ # files[row]['DiskWriteCount']):
+ # print "%s: %s accesses, less than expected minimum: %s"
+ # % (filename, (files[row]['DiskReadCount'] +
+ # files[row]['DiskWriteCount']),
+ # wl[filename]['mincount'])
+
+ # don't report in first round
+ # elif wl[filename]['maxcount'] < (files[row]['DiskReadCount'] +\
+ # files[row]['DiskWriteCount']):
+ # errors.append("%s: %s accesses, more than expected maximum:"
+ # " %s"
+ # % (filename, (files[row]['DiskReadCount'] +
+ # files[row]['DiskWriteCount']),
+ # wl[filename]['maxcount']))
+ else:
+ errors.append(
+ "File '%s' (normalized from '%s') was accessed and we were not expecting"
+ " it. DiskReadCount: %s, DiskWriteCount: %s,"
+ " DiskReadBytes: %s, DiskWriteBytes: %s"
+ % (
+ filename,
+ original_filename,
+ files[row]["DiskReadCount"],
+ files[row]["DiskWriteCount"],
+ files[row]["DiskReadBytes"],
+ files[row]["DiskWriteBytes"],
+ )
+ )
+
+ if errors:
+ # output specific errors to be picked up by tbpl parser
+ for error in errors:
+ # NOTE: the ' :' is intentional, without the space before the :,
+ # some parser will translate this
+ print("TEST-UNEXPECTED-FAIL : xperf: %s" % error)
+
+ # We detect if browser_failures.txt exists to exit and turn the job
+ # orange
+ if error_filename:
+ with open(error_filename, "w") as errorFile:
+ errorFile.write("\n".join(errors))
+
+ if debug:
+ uploadFile(etl_filename)
+
+
+def etlparser_from_config(config_file, **kwargs):
+ """start from a YAML config file"""
+
+ # option defaults
+ args = {
+ "xperf_path": "xperf.exe",
+ "etl_filename": "test.etl",
+ "outputFile": "etl_output.csv",
+ "processID": None,
+ "approot": None,
+ "allowlist_file": None,
+ "error_filename": None,
+ "all_stages": False,
+ "all_threads": False,
+ }
+ args.update(kwargs)
+
+ # override from YAML config file
+ args = xtalos.options_from_config(args, config_file)
+
+ # ensure process ID is given
+ if not args.get("processID"):
+ raise xtalos.XTalosError("No process ID option given")
+
+ # ensure path to xperf given
+ if not os.path.exists(args["xperf_path"]):
+ raise xtalos.XTalosError(
+ "ERROR: xperf_path '%s' does not exist" % args["xperf_path"]
+ )
+
+ # update args with config file
+ args["configFile"] = config_file
+
+ # call etlparser
+ etlparser(**args)
+
+
+def main(args=sys.argv[1:]):
+ # parse command line arguments
+ parser = xtalos.XtalosOptions()
+ args = parser.parse_args(args)
+ args = parser.verifyOptions(args)
+ if args is None:
+ parser.error("Unable to verify arguments")
+ if not args.processID:
+ parser.error("No process ID argument given")
+
+ # call API
+ etlparser(
+ args.xperf_path,
+ args.etl_filename,
+ args.processID,
+ args.approot,
+ args.configFile,
+ args.outputFile,
+ args.allowlist_file,
+ args.error_filename,
+ args.all_stages,
+ args.all_threads,
+ debug=args.debug_level >= xtalos.DEBUG_INFO,
+ )
+
+
+if __name__ == "__main__":
+ main()
diff --git a/testing/talos/talos/xtalos/parse_xperf.py b/testing/talos/talos/xtalos/parse_xperf.py
new file mode 100644
index 0000000000..eef9c7a9b1
--- /dev/null
+++ b/testing/talos/talos/xtalos/parse_xperf.py
@@ -0,0 +1,126 @@
+#!/usr/bin/env python
+
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import os
+import subprocess
+import sys
+
+import etlparser
+import xtalos
+from xperf_analyzer import (
+ ProcessStart,
+ SessionStoreWindowRestored,
+ XPerfAttribute,
+ XPerfFile,
+ XPerfInterval,
+)
+
+
+def run_session_restore_analysis(debug=False, **kwargs):
+ required = ("csv_filename", "outputFile")
+ for r in required:
+ if r not in kwargs:
+ raise xtalos.XTalosError("%s required" % r)
+
+ final_output_file = "%s_session_restore_stats%s" % os.path.splitext(
+ kwargs["outputFile"]
+ )
+
+ output = "time_to_session_store_window_restored_ms\n"
+
+ with XPerfFile(csvfile=kwargs["csv_filename"], debug=debug) as xperf:
+ fx_start = ProcessStart("firefox.exe")
+ ss_window_restored = SessionStoreWindowRestored()
+
+ interval = XPerfInterval(fx_start, ss_window_restored)
+ xperf.add_attr(interval)
+
+ xperf.analyze()
+
+ results = interval.get_results()
+ if results != {}:
+ output += "%.3f\n" % (results[XPerfAttribute.RESULT])
+
+ with open(final_output_file, "w") as out:
+ out.write(output)
+
+ if debug:
+ etlparser.uploadFile(final_output_file)
+
+
+def stop(xperf_path, debug=False):
+ xperf_cmd = [xperf_path, "-stop", "-stop", "talos_ses"]
+ if debug:
+ print("executing '%s'" % subprocess.list2cmdline(xperf_cmd))
+ subprocess.call(xperf_cmd)
+
+
+def stop_from_config(config_file=None, debug=False, **kwargs):
+ """start from a YAML config file"""
+
+ # required options and associated error messages
+ required = {
+ "xperf_path": "xperf_path not given",
+ "etl_filename": "No etl_filename given",
+ }
+ for key in required:
+ if key not in kwargs:
+ kwargs[key] = None
+
+ if config_file:
+ # override options from YAML config file
+ kwargs = xtalos.options_from_config(kwargs, config_file)
+
+ # ensure the required options are given
+ for key, msg in required.items():
+ if not kwargs.get(key):
+ raise xtalos.XTalosError(msg)
+
+ # ensure path to xperf actually exists
+ if not os.path.exists(kwargs["xperf_path"]):
+ raise xtalos.XTalosError(
+ "ERROR: xperf_path '%s' does not exist" % kwargs["xperf_path"]
+ )
+
+ # make calling arguments
+ stopargs = {}
+ stopargs["xperf_path"] = kwargs["xperf_path"]
+ stopargs["debug"] = debug
+
+ # call start
+ stop(**stopargs)
+
+ etlparser.etlparser_from_config(
+ config_file,
+ approot=kwargs["approot"],
+ error_filename=kwargs["error_filename"],
+ processID=kwargs["processID"],
+ )
+
+ csv_base = "%s.csv" % kwargs["etl_filename"]
+ run_session_restore_analysis(csv_filename=csv_base, debug=debug, **kwargs)
+
+ if not debug:
+ os.remove(csv_base)
+
+
+def main(args=sys.argv[1:]):
+ # parse command line arguments
+ parser = xtalos.XtalosOptions()
+ args = parser.parse_args(args)
+
+ # stop xperf
+ try:
+ stop_from_config(
+ config_file=args.configFile,
+ debug=args.debug_level >= xtalos.DEBUG_INFO,
+ **args.__dict__
+ )
+ except xtalos.XTalosError as e:
+ parser.error(str(e))
+
+
+if __name__ == "__main__":
+ main()
diff --git a/testing/talos/talos/xtalos/start_xperf.py b/testing/talos/talos/xtalos/start_xperf.py
new file mode 100644
index 0000000000..87cc6dc029
--- /dev/null
+++ b/testing/talos/talos/xtalos/start_xperf.py
@@ -0,0 +1,104 @@
+#!/usr/bin/env python
+
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import os
+import subprocess
+import sys
+
+import xtalos
+
+
+def start(
+ xperf_path,
+ xperf_providers,
+ xperf_stackwalk,
+ xperf_user_providers,
+ etl_filename,
+ debug=False,
+):
+ xperf_cmd = [
+ xperf_path,
+ "-on",
+ "+".join(xperf_providers),
+ "-stackwalk",
+ "+".join(xperf_stackwalk),
+ "-MaxBuffers",
+ "1024",
+ "-BufferSize",
+ "1024",
+ "-f",
+ "%s.kernel" % etl_filename,
+ "-start",
+ "talos_ses",
+ "-on",
+ "+".join(xperf_user_providers),
+ "-MaxBuffers",
+ "1024",
+ "-BufferSize",
+ "1024",
+ "-f",
+ "%s.user" % etl_filename,
+ ]
+ if debug:
+ print("executing '%s'" % subprocess.list2cmdline(xperf_cmd))
+ subprocess.call(xperf_cmd)
+
+
+def start_from_config(config_file=None, debug=False, **kwargs):
+ """start from a YAML config file"""
+
+ # required options and associated error messages
+ required = {
+ "xperf_path": "xperf_path not given",
+ "xperf_providers": "No xperf providers given",
+ "xperf_user_providers": "No xperf user providers given",
+ "xperf_stackwalk": "No xperf stackwalk options given",
+ "etl_filename": "No etl_filename given",
+ }
+ for key in required:
+ if key not in kwargs:
+ kwargs[key] = None
+
+ if config_file:
+ # override options from YAML config file
+ kwargs = xtalos.options_from_config(kwargs, config_file)
+
+ # ensure the required options are given
+ for key, msg in required.items():
+ if not kwargs.get(key):
+ raise xtalos.XTalosError(msg)
+
+ # ensure path to xperf actually exists
+ if not os.path.exists(kwargs["xperf_path"]):
+ raise xtalos.XTalosError(
+ "ERROR: xperf_path '%s' does not exist" % kwargs["xperf_path"]
+ )
+
+ # make calling arguments
+ args = dict([(key, kwargs[key]) for key in required.keys()])
+ args["debug"] = debug
+
+ # call start
+ start(**args)
+
+
+def main(args=sys.argv[1:]):
+ # parse command line options
+ parser = xtalos.XtalosOptions()
+ args = parser.parse_args(args)
+
+ # start xperf
+ try:
+ start_from_config(
+ config_file=args.configFile,
+ debug=args.debug_level >= xtalos.DEBUG_INFO,
+ **args.__dict__
+ )
+ except xtalos.XTalosError as e:
+ parser.error(str(e))
+
+
+if __name__ == "__main__":
+ main()
diff --git a/testing/talos/talos/xtalos/xperf_allowlist.json b/testing/talos/talos/xtalos/xperf_allowlist.json
new file mode 100644
index 0000000000..45749b4dac
--- /dev/null
+++ b/testing/talos/talos/xtalos/xperf_allowlist.json
@@ -0,0 +1,683 @@
+{
+ "\\fi_unknown": {
+ "mincount": 0,
+ "maxcount": 2,
+ "minbytes": 0,
+ "maxbytes": 8192
+ },
+ "c:\\windowsazure": {
+ "ignore": true
+ },
+ "c:\\windowsazure\\logs": {
+ "ignore": true
+ },
+ "c:\\windowsazure\\logs\\aggregatestatus": {
+ "ignore": true
+ },
+ "c:\\worker-runner": {
+ "ignore": true
+ },
+ "c:\\$extend\\$usnjrnl:$j": {
+ "ignore": true
+ },
+ "c:\\$logfile": {
+ "ignore": true
+ },
+ "c:\\$mft": {
+ "ignore": true
+ },
+ "z:\\$mft::$bitmap": {
+ "ignore": true
+ },
+ "z:\\$bitmap": {
+ "ignore": true
+ },
+ "c:\\$secure": {
+ "ignore": true
+ },
+ "c:\\$secure:$sds": {
+ "ignore": true
+ },
+ "c:\\$secure:$sii:$index_allocation": {
+ "ignore": true
+ },
+ "c:\\$secure:$sdh:$index_allocation": {
+ "ignore": true
+ },
+ "c:\\program files\\desktop.ini": {
+ "mincount": 2,
+ "maxcount": 2,
+ "minbytes": 352,
+ "maxbytes": 352
+ },
+ "c:\\program files\\{nvidia_3d_vision}": {
+ "mincount": 0,
+ "maxcount": 24,
+ "minbytes": 0,
+ "maxbytes": 578560
+ },
+ "c:\\programdata\\nvidia corporation\\drs\\nvapptimestamps": {
+ "mincount": 22,
+ "maxcount": 22,
+ "minbytes": 704,
+ "maxbytes": 704
+ },
+ "c:\\programdata\\nvidia corporation\\drs\\nvdrssel.bin": {
+ "mincount": 2,
+ "maxcount": 2,
+ "minbytes": 2,
+ "maxbytes": 2
+ },
+ "c:\\program files\\windows kits\\10\\windows performance toolkit": {
+ "mincount": 0,
+ "maxcount": 2,
+ "minbytes": 0,
+ "maxbytes": 8192
+ },
+ "c:\\slave\\test\\build\\venv\\lib\\site-packages\\{pip_vendor}": {
+ "ignore": true
+ },
+ "c:\\users\\{cltbld}\\appdata\\locallow\\mozilla": {
+ "mincount": 0,
+ "maxcount": 8,
+ "minbytes": 0,
+ "maxbytes": 32768
+ },
+ "c:\\users\\desktop.ini": {
+ "mincount": 2,
+ "maxcount": 2,
+ "minbytes": 352,
+ "maxbytes": 352
+ },
+ "c:\\windows\\fonts\\segoeuii.ttf": {
+ "mincount": 0,
+ "maxcount": 4,
+ "minbytes": 0,
+ "maxbytes": 90112
+ },
+ "c:\\windows\\fonts\\staticcache.dat": {
+ "mincount": 2,
+ "maxcount": 2,
+ "minbytes": 120,
+ "maxbytes": 120
+ },
+ "c:\\windows\\prefetch\\{prefetch}.pf": {
+ "ignore": true
+ },
+ "c:\\windows\\system32\\catroot2": {
+ "mincount": 0,
+ "maxcount": 2,
+ "minbytes": 0,
+ "maxbytes": 8192
+ },
+ "c:\\windows\\system32\\webauthn.dll": {
+ "mincount": 0,
+ "maxcount": 2,
+ "minbytes": 0,
+ "maxbytes": 8192
+ },
+ "c:\\windows\\system32\\shell32.dll": {
+ "mincount": 0,
+ "maxcount": 2,
+ "minbytes": 0,
+ "maxbytes": 16384
+ },
+ "c:\\windows\\system32\\kernelbase.dll": {
+ "mincount": 0,
+ "maxcount": 2,
+ "minbytes": 0,
+ "maxbytes": 16384
+ },
+ "c:\\windows\\system32\\inputhost.dll": {
+ "mincount": 0,
+ "maxcount": 2,
+ "minbytes": 0,
+ "maxbytes": 32768
+ },
+ "c:\\windows\\system32\\advapi32.dll": {
+ "mincount": 0,
+ "maxcount": 2,
+ "minbytes": 0,
+ "maxbytes": 24576
+ },
+ "c:\\windows\\system32\\apphelp.dll": {
+ "mincount": 0,
+ "maxcount": 2,
+ "minbytes": 0,
+ "maxbytes": 32768
+ },
+ "c:\\windows\\system32\\windows.storage.dll": {
+ "mincount": 2,
+ "maxcount": 2,
+ "minbytes": 0,
+ "maxbytes": 24576
+ },
+ "c:\\windows\\system32\\ole32.dll": {
+ "mincount": 4,
+ "maxcount": 4,
+ "minbytes": 0,
+ "maxbytes": 65536
+ },
+ "c:\\windows\\system32\\oleaut32.dll": {
+ "mincount": 4,
+ "maxcount": 4,
+ "minbytes": 0,
+ "maxbytes": 65536
+ },
+ "c:\\windows\\system32\\wscapi.dll": {
+ "mincount": 0,
+ "maxcount": 2,
+ "minbytes": 0,
+ "maxbytes": 15360
+ },
+ "c:\\windows\\system32\\ucrtbase.dll": {
+ "mincount": 4,
+ "maxcount": 4,
+ "minbytes": 16384,
+ "maxbytes": 32768
+ },
+ "c:\\windows\\system32\\user32.dll": {
+ "mincount": 4,
+ "maxcount": 4,
+ "minbytes": 0,
+ "maxbytes": 65536
+ },
+ "c:\\windows\\system32\\audioses.dll": {
+ "mincount": 4,
+ "maxcount": 4,
+ "minbytes": 16384,
+ "maxbytes": 32768
+ },
+ "c:\\windows\\system32\\d3d10warp.dll": {
+ "mincount": 6,
+ "maxcount": 6,
+ "minbytes": 81920,
+ "maxbytes": 81920
+ },
+ "c:\\windows\\system32\\d3d11.dll": {
+ "mincount": 10,
+ "maxcount": 10,
+ "minbytes": 139264,
+ "maxbytes": 139264
+ },
+ "c:\\windows\\system32\\directmanipulation.dll": {
+ "mincount": 0,
+ "maxcount": 6,
+ "minbytes": 0,
+ "maxbytes": 96256
+ },
+ "c:\\windows\\system32\\dwrite.dll": {
+ "mincount": 4,
+ "maxcount": 4,
+ "minbytes": 16384,
+ "maxbytes": 90112
+ },
+ "c:\\windows\\system32\\dxgi.dll": {
+ "mincount": 2,
+ "maxcount": 2,
+ "minbytes": 32768,
+ "maxbytes": 32768
+ },
+ "c:\\windows\\system32\\gdi32.dll": {
+ "mincount": 0,
+ "maxcount": 4,
+ "minbytes": 0,
+ "maxbytes": 114688
+ },
+ "c:\\windows\\system32\\kernel32.dll": {
+ "mincount": 0,
+ "maxcount": 2,
+ "minbytes": 0,
+ "maxbytes": 65536
+ },
+ "c:\\windows\\system32\\mscms.dll": {
+ "mincount": 0,
+ "maxcount": 73728,
+ "minbytes": 0,
+ "maxbytes": 73728
+ },
+ "c:\\windows\\system32\\msctf.dll": {
+ "mincount": 0,
+ "maxcount": 2,
+ "minbytes": 0,
+ "maxbytes": 65536
+ },
+ "c:\\windows\\system32\\setupapi.dll": {
+ "mincount": 0,
+ "maxcount": 8,
+ "minbytes": 0,
+ "maxbytes": 87040
+ },
+ "c:\\windows\\system32\\windows.globalization.dll": {
+ "mincount": 0,
+ "maxcount": 8,
+ "minbytes": 0,
+ "maxbytes": 126976
+ },
+ "c:\\windows\\system32\\spool\\drivers\\color": {
+ "mincount": 0,
+ "maxcount": 2,
+ "minbytes": 0,
+ "maxbytes": 8192
+ },
+ "c:\\windows\\system32\\spool\\drivers\\color\\srgb color space profile.icm": {
+ "mincount": 2,
+ "maxcount": 2,
+ "minbytes": 8192,
+ "maxbytes": 8192
+ },
+ "z:\\$logfile": {
+ "ignore": true
+ },
+ "{appdata}\\local\\temp": {
+ "mincount": 0,
+ "maxcount": 4,
+ "minbytes": 0,
+ "maxbytes": 278528
+ },
+ "{desktop}\\desktop.ini": {
+ "mincount": 6,
+ "maxcount": 6,
+ "minbytes": 1692,
+ "maxbytes": 1692
+ },
+ "{firefox}\\browser\\blocklist.xml": {
+ "mincount": 0,
+ "maxcount": 66,
+ "minbytes": 0,
+ "maxbytes": 540672
+ },
+ "{firefox}\\browser\\extensions\\{uuid}.xpi": {
+ "mincount": 0,
+ "maxcount": 2,
+ "minbytes": 0,
+ "maxbytes": 8192
+ },
+ "{firefox}\\browser\\features\\formautofill@mozilla.org.xpi": {
+ "mincount": 0,
+ "maxcount": 6,
+ "minbytes": 0,
+ "maxbytes": 393216
+ },
+ "{firefox}\\browser\\features\\flyweb@mozilla.org.xpi": {
+ "mincount": 0,
+ "maxcount": 2,
+ "minbytes": 0,
+ "maxbytes": 32768
+ },
+ "{firefox}\\browser\\omni.ja": {
+ "mincount": 0,
+ "maxcount": 28,
+ "minbytes": 0,
+ "maxbytes": 1835008
+ },
+ "{firefox}\\crash reports\\lastcrash": {
+ "mincount": 0,
+ "maxcount": 2,
+ "minbytes": 0,
+ "maxbytes": 20
+ },
+ "{firefox}\\crash reports\\{time}": {
+ "ignore": true
+ },
+ "{firefox}\\defaults\\pref\\channel-prefs.js": {
+ "mincount": 4,
+ "maxcount": 4,
+ "minbytes": 1432,
+ "maxbytes": 1432
+ },
+ "{firefox}\\dependentlibs.list": {
+ "mincount": 4,
+ "maxcount": 4,
+ "minbytes": 16384,
+ "maxbytes": 16384
+ },
+ "{firefox}\\firefox.exe": {
+ "mincount": 2,
+ "maxcount": 2,
+ "minbytes": 8192,
+ "maxbytes": 8192
+ },
+ "{firefox}\\gmp-clearkey\\0.1\\manifest.json": {
+ "mincount": 2,
+ "maxcount": 2,
+ "minbytes": 512,
+ "maxbytes": 512
+ },
+ "{firefox}\\omni.ja": {
+ "mincount": 0,
+ "maxcount": 46,
+ "minbytes": 0,
+ "maxbytes": 3014656
+ },
+ "{firefox}\\profiles.ini": {
+ "mincount": 2,
+ "maxcount": 2,
+ "minbytes": 8192,
+ "maxbytes": 8192
+ },
+ "{profile}\\addonstartup.json.lz4": {
+ "mincount": 0,
+ "maxcount": 2,
+ "minbytes": 0,
+ "maxbytes": 8192
+ },
+ "{profile}\\cert8.db": {
+ "mincount": 0,
+ "maxcount": 12,
+ "minbytes": 0,
+ "maxbytes": 65536
+ },
+ "{profile}\\cert9.db": {
+ "mincount": 0,
+ "maxcount": 18,
+ "minbytes": 0,
+ "maxbytes": 196968
+ },
+ "{profile}\\compatibility.ini": {
+ "mincount": 2,
+ "maxcount": 34,
+ "minbytes": 734,
+ "maxbytes": 8192
+ },
+ "{profile}\\containers.json": {
+ "mincount": 0,
+ "maxcount": 4,
+ "minbytes": 0,
+ "maxbytes": 512
+ },
+ "{profile}\\content-prefs.sqlite": {
+ "mincount": 6,
+ "maxcount": 6,
+ "minbytes": 65768,
+ "maxbytes": 65768
+ },
+ "{profile}\\content-prefs.sqlite-journal": {
+ "mincount": 14,
+ "maxcount": 116,
+ "minbytes": 112,
+ "maxbytes": 1244640
+ },
+ "{profile}\\cookies.sqlite": {
+ "mincount": 1,
+ "maxcount": 6,
+ "minbytes": 0,
+ "maxbytes": 200000
+ },
+ "{profile}\\cookies.sqlite-shm": {
+ "mincount": 1,
+ "maxcount": 6,
+ "minbytes": 0,
+ "maxbytes": 200000
+ },
+ "{profile}\\extensions.ini": {
+ "mincount": 2,
+ "maxcount": 2,
+ "minbytes": 8192,
+ "maxbytes": 8192
+ },
+ "{profile}\\extensions.json": {
+ "mincount": 0,
+ "maxcount": 4,
+ "minbytes": 0,
+ "maxbytes": 512
+ },
+ "{profile}\\extensions\\pageloader@mozilla.org\\bootstrap.js": {
+ "mincount": 0,
+ "maxcount": 6,
+ "minbytes": 0,
+ "maxbytes": 30000
+ },
+ "{profile}\\extensions\\pageloader@mozilla.org\\chrome.manifest": {
+ "mincount": 2,
+ "maxcount": 2,
+ "minbytes": 600,
+ "maxbytes": 600
+ },
+ "{profile}\\extensions\\pageloader@mozilla.org\\chrome\\memory.js": {
+ "mincount": 0,
+ "maxcount": 4,
+ "minbytes": 0,
+ "maxbytes": 127000
+ },
+ "{profile}\\extensions\\pageloader@mozilla.org\\chrome\\mozillafilelogger.js": {
+ "mincount": 0,
+ "maxcount": 4,
+ "minbytes": 0,
+ "maxbytes": 125200
+ },
+ "{profile}\\extensions\\pageloader@mozilla.org\\chrome\\pageloader.js": {
+ "mincount": 0,
+ "maxcount": 2,
+ "minbytes": 0,
+ "maxbytes": 127000
+ },
+ "{profile}\\extensions\\pageloader@mozilla.org\\chrome\\pageloader.xhtml": {
+ "mincount": 0,
+ "maxcount": 4,
+ "minbytes": 0,
+ "maxbytes": 127000
+ },
+ "{profile}\\extensions\\pageloader@mozilla.org\\chrome\\profiler.js": {
+ "mincount": 0,
+ "maxcount": 4,
+ "minbytes": 0,
+ "maxbytes": 127000
+ },
+ "{profile}\\extensions\\pageloader@mozilla.org\\chrome\\quit.js": {
+ "mincount": 0,
+ "maxcount": 4,
+ "minbytes": 0,
+ "maxbytes": 127000
+ },
+ "{profile}\\extensions\\pageloader@mozilla.org\\chrome\\report.js": {
+ "mincount": 0,
+ "maxcount": 4,
+ "minbytes": 0,
+ "maxbytes": 127000
+ },
+ "{profile}\\extensions\\pageloader@mozilla.org\\install.rdf": {
+ "mincount": 0,
+ "maxcount": 2,
+ "minbytes": 0,
+ "maxbytes": 8192
+ },
+ "{profile}\\extensions\\talos-powers@mozilla.org\\bootstrap.js": {
+ "mincount": 0,
+ "maxcount": 6,
+ "minbytes": 0,
+ "maxbytes": 30000
+ },
+ "{profile}\\extensions\\talos-powers@mozilla.org\\chrome.manifest": {
+ "mincount": 2,
+ "maxcount": 2,
+ "minbytes": 600,
+ "maxbytes": 600
+ },
+ "{profile}\\extensions\\talos-powers@mozilla.org\\chrome\\talos-powers-content.js": {
+ "mincount": 2,
+ "maxcount": 2,
+ "minbytes": 2000,
+ "maxbytes": 2000
+ },
+ "{profile}\\favicons.sqlite": {
+ "mincount": 8,
+ "maxcount": 12,
+ "minbytes": 196808,
+ "maxbytes": 393216
+ },
+ "{profile}\\favicons.sqlite-journal": {
+ "mincount": 2,
+ "maxcount": 8,
+ "minbytes": 16,
+ "maxbytes": 9264
+ },
+ "{profile}\\favicons.sqlite-shm": {
+ "mincount": 0,
+ "maxcount": 4,
+ "minbytes": 65536,
+ "maxbytes": 131072
+ },
+ "{profile}\\favicons.sqlite-wal": {
+ "mincount": 0,
+ "maxcount": 32,
+ "minbytes": 0,
+ "maxbytes": 131072
+ },
+ "{profile}\\handlers.json": {
+ "mincount": 0,
+ "maxcount": 4,
+ "minbytes": 0,
+ "maxbytes": 1388
+ },
+ "{profile}\\invalidprefs.js": {
+ "mincount": 0,
+ "maxcount": 2,
+ "minbytes": 0,
+ "maxbytes": 25412
+ },
+ "{profile}\\key3.db": {
+ "mincount": 0,
+ "maxcount": 12,
+ "minbytes": 0,
+ "maxbytes": 32768
+ },
+ "{profile}\\key4.db": {
+ "mincount": 0,
+ "maxcount": 16,
+ "minbytes": 0,
+ "maxbytes": 196936
+ },
+ "{profile}\\permissions.sqlite": {
+ "mincount": 14,
+ "maxcount": 14,
+ "minbytes": 4424,
+ "maxbytes": 4424
+ },
+ "{profile}\\permissions.sqlite-journal": {
+ "mincount": 0,
+ "maxcount": 18,
+ "minbytes": 0,
+ "maxbytes": 7208
+ },
+ "{profile}\\pkcs11.txt": {
+ "mincount": 0,
+ "maxcount": 4,
+ "minbytes": 0,
+ "maxbytes": 16384
+ },
+ "{profile}\\places.sqlite": {
+ "mincount": 8,
+ "maxcount": 8,
+ "minbytes": 196808,
+ "maxbytes": 196808
+ },
+ "{profile}\\places.sqlite-journal": {
+ "mincount": 2,
+ "maxcount": 8,
+ "minbytes": 16,
+ "maxbytes": 9264
+ },
+ "{profile}\\places.sqlite-shm": {
+ "mincount": 2,
+ "maxcount": 2,
+ "minbytes": 65536,
+ "maxbytes": 65536
+ },
+ "{profile}\\places.sqlite-wal": {
+ "mincount": 0,
+ "maxcount": 32,
+ "minbytes": 0,
+ "maxbytes": 131072
+ },
+ "{profile}\\pluginreg.dat": {
+ "mincount": 2,
+ "maxcount": 2,
+ "minbytes": 1892,
+ "maxbytes": 1892
+ },
+ "{profile}\\pluginreg.dat.tmp": {
+ "mincount": 0,
+ "maxcount": 30,
+ "minbytes": 0,
+ "maxbytes": 958
+ },
+ "{profile}\\prefs-1.js": {
+ "mincount": 0,
+ "maxcount": 10,
+ "minbytes": 0,
+ "maxbytes": 53950
+ },
+ "{profile}\\prefs.js": {
+ "mincount": 4,
+ "maxcount": 4,
+ "minbytes": 19612,
+ "maxbytes": 20136
+ },
+ "{profile}\\secmod.db": {
+ "mincount": 0,
+ "maxcount": 12,
+ "minbytes": 0,
+ "maxbytes": 32768
+ },
+ "{profile}\\sessioncheckpoints.json": {
+ "mincount": 0,
+ "maxcount": 2,
+ "minbytes": 0,
+ "maxbytes": 512
+ },
+ "{profile}\\sessioncheckpoints.json.tmp": {
+ "mincount": 0,
+ "maxcount": 2,
+ "minbytes": 0,
+ "maxbytes": 512
+ },
+ "{profile}\\sessionstore-backups\\recovery.js": {
+ "mincount": 0,
+ "maxcount": 2,
+ "minbytes": 0,
+ "maxbytes": 5602
+ },
+ "{profile}\\sessionstore.js": {
+ "mincount": 0,
+ "maxcount": 2,
+ "minbytes": 0,
+ "maxbytes": 4096
+ },
+ "{profile}\\startupcache": {
+ "mincount": 0,
+ "maxcount": 2,
+ "minbytes": 0,
+ "maxbytes": 8192
+ },
+ "{profile}\\times.json": {
+ "mincount": 0,
+ "maxcount": 4,
+ "minbytes": 0,
+ "maxbytes": 512
+ },
+ "{profile}\\user.js": {
+ "mincount": 4,
+ "maxcount": 4,
+ "minbytes": 6000,
+ "maxbytes": 6000
+ },
+ "{profile}\\xulstore.json": {
+ "mincount": 0,
+ "maxcount": 0,
+ "minbytes": 0,
+ "maxbytes": 702
+ },
+ "{profile}\\xulstore\\data.safe.bin": {
+ "mincount": 0,
+ "maxcount": 4,
+ "minbytes": 0,
+ "maxbytes": 574
+ },
+ "{talos}\\talos\\tests\\{tp5n_files}": {
+ "mincount": 0,
+ "maxcount": 2,
+ "minbytes": 0,
+ "maxbytes": 16384
+ }
+}
diff --git a/testing/talos/talos/xtalos/xperf_analyzer.py b/testing/talos/talos/xtalos/xperf_analyzer.py
new file mode 100644
index 0000000000..833dc9960a
--- /dev/null
+++ b/testing/talos/talos/xtalos/xperf_analyzer.py
@@ -0,0 +1,1224 @@
+# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+import csv
+import os
+import re
+import subprocess
+from abc import ABCMeta, abstractmethod
+from collections import deque
+from uuid import UUID
+
+import six
+
+# This constant must match the event declared in
+# toolkit/components/startup/mozprofilerprobe.mof
+EVENT_ID_FIREFOX_WINDOW_RESTORED = "{917B96B1-ECAD-4DAB-A760-8D49027748AE}"
+
+
+class XPerfSession(object):
+ """This class encapsulates data that is retained for the term of the xperf
+ analysis. This includes the set of attributes, the set of events that are
+ owned by those attributes, and the mapping of field names to row indices.
+ """
+
+ def __init__(self):
+ self.attrs = set()
+ self.evtkey = dict()
+ self.evtset = set()
+
+ def is_empty(self):
+ return not self.attrs
+
+ def add_field_mapping(self, event_name, field_mapping):
+ self.evtkey[event_name] = field_mapping
+
+ def get_field_index(self, event_name, field_name):
+ return self.evtkey[event_name][field_name]
+
+ def add_attr(self, attr):
+ self.evtset.update(attr.get_events())
+ self.attrs.add(attr)
+
+ def remove_attr_events(self, attr):
+ self.evtset.difference_update(attr.get_events())
+
+ def remove_event(self, evt):
+ self.evtset.remove(evt)
+
+ def remove_attr(self, attr):
+ self.attrs.remove(attr)
+
+ def match_events(self, row):
+ # Make a shallow copy because events will mutate the event set
+ local_evtset = self.evtset.copy()
+ for e in local_evtset:
+ e.do_match(row)
+
+
+class XPerfAttribute(six.with_metaclass(ABCMeta, object)):
+ """Base class for all attributes. Each attribute has one or more events
+ that are associated with it. When those events fire, the attribute
+ accumulates statistics for those events.
+
+ Once all events for the attribute have fired, the attribute considers
+ itself to have completed, at which point its results may be retrieved. Note
+ that persistent attributes are an exception to this (see __init__).
+ """
+
+ # Keys for the dict returned by get_results:
+
+ # Key whose value should be a dict containing any statistics that were
+ # accumulated by this attribute.
+ ACCUMULATIONS = "XPerfAttribute.ACCUMULATIONS"
+
+ # The class name of this attribute.
+ NAME = "XPerfAttribute.NAME"
+
+ # The primary result of the attribute.
+ RESULT = "XPerfAttribute.RESULT"
+
+ # Some attributes may themselves act as containers for other attributes.
+ # The results of those contained attributes should be added to a dict that
+ # is indexed by this key.
+ SUB_ATTRIBUTES = "XPerfAttribute.SUB_ATTRIBUTES"
+
+ # Other constants:
+ NON_PERSISTENT = False
+ PERSISTENT = True
+
+ def __init__(self, events, persistent=NON_PERSISTENT, **kwargs):
+ """Positional arguments:
+
+ events -- a list containing one or more events that will be associated
+ with the attribute.
+
+ Keyword arguments:
+
+ persistent -- either XPerfAttribute.PERSISTENT or
+ XPerfAttribute.NON_PERSISTENT. Non-persistent attributes
+ retire their events as the events occur. The attributes
+ consider themselves to have completed once all of their
+ events have been retired. Persistent attributes never
+ retire their events. This is useful for writing
+ attributes that must accumulate data from an indefinite
+ number of events. Once example scenario would be
+ implementing a counter of file I/O events; we don't want
+ to retire after the first file I/O event is encountered;
+ we want to continue counting the events until the end of
+ the analysis.
+
+ output -- an optional function that accepts a single argument that will
+ be a reference to the attribute itself. This function will be
+ called as soon as the attribute's results are available.
+ """
+ for e in events:
+ e.set_attr(self)
+ self.evtlist = events
+ self.seen_evtlist = []
+ self.persistent = persistent
+ try:
+ self.output = kwargs["output"]
+ except KeyError:
+ self.output = lambda a: None
+
+ def get_events(self):
+ return self.evtlist
+
+ def is_persistent(self):
+ return self.persistent
+
+ def set_session(self, sess):
+ if sess:
+ sess.add_attr(self)
+ else:
+ self.sess.remove_attr_events(self)
+ self.sess = sess
+
+ def get_field_index(self, key, field):
+ return self.sess.get_field_index(key, field)
+
+ def on_event_matched(self, evt):
+ """Attributes that override this method should always call super().
+
+ This method is called any time one of the attribute's events matches
+ the current event, which is passed in as the evt parameter.
+ """
+ if evt not in self.evtlist:
+ raise Exception(
+ 'Event mismatch: "{!s}" is not in this '.format((evt))
+ + "attribute's event list"
+ )
+
+ self.accumulate(evt)
+
+ # Persistent attributes never retire their events
+ if self.persistent:
+ return
+
+ self.remove_event(evt)
+
+ if self.evtlist:
+ # Propagate the whiteboard from the current event to the next
+ self.evtlist[0].set_whiteboard(evt.get_whiteboard())
+ else:
+ self.do_process()
+
+ def remove_event(self, evt):
+ self.evtlist.remove(evt)
+ self.seen_evtlist.append(evt)
+ self.sess.remove_event(evt)
+
+ def do_process(self):
+ self.sess.remove_attr(self)
+ self.process()
+ self.output(self)
+
+ def accumulate(self, evt):
+ """Optional method that an attribute may implement for the purposes
+ of accumulating data about multiple events.
+ """
+ pass
+
+ @abstractmethod
+ def process(self):
+ """This method is called once all of the attribute's events have been
+ retired.
+ """
+ pass
+
+ @abstractmethod
+ def get_results(self):
+ """This method is used to retrieve the attibute's results. It returns
+ a dict whose keys are any of the constants declared at the top of this
+ class. At the very least, the XPerfAttribute.NAME and
+ XPerfAttribute.RESULT keys must be set.
+ """
+ pass
+
+
+class XPerfInterval(XPerfAttribute):
+ """This attribute computes the duration of time between a start event and
+ and end event. It also accepts sub-attributes which are only active for the
+ duration of the interval.
+ """
+
+ def __init__(self, startevt, endevt, attrs=None, **kwargs):
+ super(XPerfInterval, self).__init__([startevt, endevt], **kwargs)
+ if not attrs:
+ self.attrs_during_interval = []
+ else:
+ if isinstance(attrs, list):
+ self.attrs_during_interval = attrs
+ else:
+ self.attrs_during_interval = [attrs]
+
+ def on_event_matched(self, evt):
+ if evt == self.evtlist[0]:
+ # When we see our start event, we need to activate our
+ # sub-attributes by setting their session to the same as ours.
+ for a in self.attrs_during_interval:
+ a.set_session(self.sess)
+ elif evt == self.evtlist[-1]:
+ # When we see our end event, we need to deactivate our
+ # sub-attributes by setting their session to None.
+ for a in self.attrs_during_interval:
+ a.set_session(None)
+ super(XPerfInterval, self).on_event_matched(evt)
+
+ def process(self):
+ # Propagate the process call to our sub-attributes
+ for a in self.attrs_during_interval:
+ a.process()
+
+ def __str__(self):
+ if len(self.seen_evtlist) == 0:
+ return ""
+ end = self.seen_evtlist[-1]
+ start = self.seen_evtlist[0]
+ duration = end.get_timestamp() - start.get_timestamp()
+ msg = "Interval from [{!s}] to [{!s}] took [{:.3f}]" " milliseconds.".format(
+ (start), (end), (duration)
+ )
+ if self.attrs_during_interval:
+ msg += " Within this interval:"
+ for attr in self.attrs_during_interval:
+ msg += " {!s}".format((attr))
+ msg += "\nStart: [{}]".format((start.get_timestamp()))
+ msg += " End: [{}]".format((end.get_timestamp()))
+ return msg
+
+ def get_results(self):
+ """The result of an XPerf interval is the interval's duration, in
+ milliseconds. The results of the sub-attributes are also provided.
+ """
+ if len(self.seen_evtlist) == 0:
+ return {}
+
+ end = self.seen_evtlist[-1]
+ start = self.seen_evtlist[0]
+ duration = end.get_timestamp() - start.get_timestamp()
+
+ sub_attrs = []
+ for attr in self.attrs_during_interval:
+ sub_attrs.append(attr.get_results())
+
+ results = {
+ XPerfAttribute.NAME: self.__class__.__name__,
+ XPerfAttribute.RESULT: duration,
+ }
+ if sub_attrs:
+ results[XPerfAttribute.SUB_ATTRIBUTES] = sub_attrs
+
+ return results
+
+
+class XPerfCounter(XPerfAttribute):
+ """This persistent attribute computes the number of occurrences of the
+ event specified to __init__. It can also accumulate additional data from
+ the events.
+ """
+
+ def __init__(self, evt, **kwargs):
+ """Positional parameters:
+
+ evt -- The event to be counted.
+
+ Keyword arguments:
+
+ filters -- An optional argument that provides a dictionary that
+ provides filters to be used to screen out unwanted events.
+ Their key points to one of the XPerfEvent constants, and the
+ value is a function that evaluates the corresponding value
+ from the event's whiteboard.
+ """
+ super(XPerfCounter, self).__init__([evt], XPerfAttribute.PERSISTENT, **kwargs)
+ self.values = dict()
+ self.count = 0
+ try:
+ self.filters = kwargs["filters"]
+ except KeyError:
+ self.filters = dict()
+
+ def accumulate(self, evt):
+ data = evt.get_whiteboard()
+
+ for key, comp in six.iteritems(self.filters):
+ try:
+ testdata = data[key]
+ except KeyError:
+ pass
+ else:
+ if not comp(testdata):
+ return
+
+ self.count += 1
+
+ fields = data[XPerfEvent.EVENT_ACCUMULATABLE_FIELDS]
+
+ for f in fields:
+ value = data[f]
+ try:
+ self.values[f] += value
+ except KeyError:
+ self.values[f] = value
+
+ def process(self):
+ self.remove_event(self.evtlist[0])
+
+ def __str__(self):
+ msg = "[{!s}] events of type [{!s}]".format(
+ (self.count), (self.seen_evtlist[0])
+ )
+ if self.values:
+ msg += " with accumulated"
+ for k, v in six.iteritems(self.values):
+ msg += " [[{!s}] == {!s}]".format((k), (v))
+ return msg
+
+ def get_results(self):
+ results = {
+ XPerfAttribute.NAME: self.__class__.__name__,
+ XPerfAttribute.RESULT: self.count,
+ }
+
+ if self.values:
+ results[XPerfAttribute.ACCUMULATIONS] = self.values
+
+ return results
+
+
+class XPerfEvent(object):
+ """Base class for all events. An important feature of this class is the
+ whiteboard variable. This variable allows for passing values between
+ successive events that are *owned by the same attribute*.
+
+ This allows, for example, a thread ID from a scheduler event to be consumed
+ by a subsequent event that only wants to fire for particular thread IDs.
+ """
+
+ # These keys are used to reference accumulated data that is passed across
+ # events by |self.whiteboard|:
+
+ # The pid recorded by a process or thread related event
+ EVENT_DATA_PID = "pid"
+ # The command line recorded by a ProcessStart event
+ EVENT_DATA_CMD_LINE = "cmd_line"
+ # The tid recorded by a thread related event
+ EVENT_DATA_TID = "tid"
+ # Number of bytes recorded by an event that contains such quantities
+ EVENT_NUM_BYTES = "num_bytes"
+ # File name recorded by an I/O event
+ EVENT_FILE_NAME = "file_name"
+ # Set of field names that may be accumulated by an XPerfCounter. The
+ # counter uses this to query the whiteboard for other EVENT_* keys that
+ # contain values that should be accumulated.
+ EVENT_ACCUMULATABLE_FIELDS = "accumulatable_fields"
+
+ timestamp_index = None
+
+ def __init__(self, key):
+ self.key = key
+ self.whiteboard = dict()
+
+ def set_attr(self, attr):
+ self.attr = attr
+
+ def get_attr(self):
+ return self.attr
+
+ def set_whiteboard(self, data):
+ self.whiteboard = data
+
+ def get_whiteboard(self):
+ return self.whiteboard
+
+ def get_field_index(self, field):
+ return self.attr.get_field_index(self.key, field)
+
+ def do_match(self, row):
+ if not self.match(row):
+ return False
+
+ # All events use the same index for timestamps, so timestamp_index can
+ # be a class variable.
+ if not XPerfEvent.timestamp_index:
+ XPerfEvent.timestamp_index = self.get_field_index("TimeStamp")
+
+ # Convert microseconds to milliseconds
+ self.timestamp = float(row[XPerfEvent.timestamp_index]) / 1000.0
+ self.attr.on_event_matched(self)
+ return True
+
+ def match(self, row):
+ return self.key == row[0]
+
+ def get_timestamp(self):
+ return self.timestamp
+
+
+class EventExpression(six.with_metaclass(ABCMeta, object)):
+ """EventExpression is an optional layer that sits between attributes and
+ events, and allow the user to compose multiple events into a more complex
+ event. To achieve this, EventExpression implementations must implement both
+ the XPerfEvent interface (so that their underlying attributes may
+ communicate with them), as well as the XPerfAttribute interface, so that
+ they present themselves as attributes to the events that run above them.
+ """
+
+ def __init__(self, events):
+ # Event expressions implement the attribute interface, so for each
+ # event, we set ourselves as the underlying attribute
+ if isinstance(events, list):
+ for e in events:
+ e.set_attr(self)
+ else:
+ events.set_attr(self)
+
+ def set_attr(self, attr):
+ self.attr = attr
+
+ def get_attr(self):
+ return self.attr
+
+ def get_field_index(self, key, field):
+ return self.attr.get_field_index(key, field)
+
+ @abstractmethod
+ def set_whiteboard(self, data):
+ pass
+
+ @abstractmethod
+ def get_whiteboard(self):
+ pass
+
+ @abstractmethod
+ def on_event_matched(self, evt):
+ pass
+
+ @abstractmethod
+ def do_match(self, row):
+ pass
+
+ @abstractmethod
+ def get_timestamp(self):
+ pass
+
+
+class Nth(EventExpression):
+ """This is a simple EventExpression that does not fire until the Nth
+ occurrence of the event that it encapsulates.
+ """
+
+ def __init__(self, N, event):
+ super(Nth, self).__init__(event)
+ self.event = event
+ self.N = N
+ self.match_count = 0
+
+ def on_event_matched(self, evt):
+ if evt != self.event:
+ raise Exception(
+ "Nth expression for event "
+ + '"%s" fired for event "%s" instead' % (self.event, evt)
+ )
+ self.match_count += 1
+ if self.match_count == self.N:
+ self.attr.on_event_matched(self)
+
+ def set_whiteboard(self, data):
+ self.event.set_whiteboard(data)
+
+ def get_whiteboard(self):
+ return self.event.get_whiteboard()
+
+ def do_match(self, row):
+ self.event.do_match(row)
+
+ def get_timestamp(self):
+ return self.event.get_timestamp()
+
+ def get_suffix(self):
+ lastDigit = str(self.N)[-1]
+ if lastDigit == "1":
+ return "st"
+ elif lastDigit == "2":
+ return "nd"
+ elif lastDigit == "3":
+ return "rd"
+ else:
+ return "th"
+
+ def __str__(self):
+ suffix = self.get_suffix()
+ return "{!s}{} [{!s}]".format((self.N), (suffix), (self.event))
+
+
+class EventSequence(EventExpression):
+ """This EventExpression represents a sequence of events that must fire in
+ the correct order. Once the final event in the sequence is received, then
+ the EventSequence fires itself.
+
+ One interesting point of note is what happens when one of the events passed
+ into the EventSequence is persistent. If a peristent event is supplied as
+ the final entry in the sequence, and since the persistent event never
+ retires itself, the sequence will keep firing every time the persistent
+ event fires. This allows the user to provide an event sequence that is
+ essentially interpreted as, "once all of these other events have triggered,
+ fire this last one repeatedly for the remainder of the analysis."
+ """
+
+ def __init__(self, *events):
+ super(EventSequence, self).__init__(list(events))
+ if len(events) < 2:
+ raise Exception(
+ "EventSequence requires at least two events, %d provided" % len(events)
+ )
+ self.events = deque(events)
+ self.seen_events = []
+
+ def on_event_matched(self, evt):
+ unseen_events = len(self.events) > 0
+ if (
+ unseen_events
+ and evt != self.events[0]
+ or not unseen_events
+ and evt != self.seen_events[-1]
+ ):
+ raise Exception(
+ 'Unexpected event "%s" is not a member of this event sequence' % (evt)
+ )
+
+ # Move the event from events queue to seen_events
+ if unseen_events:
+ self.events.popleft()
+ self.seen_events.append(evt)
+
+ if self.events:
+ # Transfer attr data to the next event that will run
+ self.events[0].set_whiteboard(evt.get_whiteboard())
+ else:
+ # Or else we have run all of our events; notify the attribute
+ self.attr.on_event_matched(self)
+
+ def set_whiteboard(self, data):
+ self.events[0].set_whiteboard(data)
+
+ def get_whiteboard(self):
+ return self.seen_events[-1].get_whiteboard()
+
+ def do_match(self, row):
+ if self.attr.is_persistent() and len(self.events) == 0:
+ # Persistent attributes may repeatedly match the final event
+ self.seen_events[-1].do_match(row)
+ else:
+ self.events[0].do_match(row)
+
+ def get_timestamp(self):
+ return self.seen_events[-1].get_timestamp()
+
+ def __str__(self):
+ result = str()
+ for e in self.seen_events[:-1]:
+ result += "When [{!s}], ".format((e))
+ result += "then [{!s}]".format((self.seen_events[-1]))
+ return result
+
+
+class BindThread(EventExpression):
+ """This event expression binds the event that it encapsulates to a
+ specific thread ID. This is used to force an event to only fire when it
+ matches the thread ID supplied by the whiteboard.
+ """
+
+ def __init__(self, event):
+ super(BindThread, self).__init__(event)
+ self.event = event
+ self.tid = None
+
+ def on_event_matched(self, evt):
+ if evt != self.event:
+ raise Exception(
+ "BindThread expression for event "
+ + '"%s" fired for event "%s" instead' % (self.event, evt)
+ )
+ self.attr.on_event_matched(self)
+
+ def set_whiteboard(self, data):
+ self.tid = data[XPerfEvent.EVENT_DATA_TID]
+ self.event.set_whiteboard(data)
+
+ def get_whiteboard(self):
+ return self.event.get_whiteboard()
+
+ def do_match(self, row):
+ try:
+ tid_index = self.get_field_index(row[0], "ThreadID")
+ except KeyError:
+ # Not every event has a thread ID. We don't care about those.
+ return
+
+ if int(row[tid_index]) == self.tid:
+ self.event.do_match(row)
+
+ def get_timestamp(self):
+ return self.event.get_timestamp()
+
+ def __str__(self):
+ return "[{!s}] bound to thread [{!s}]".format((self.event), (self.tid))
+
+
+class ClassicEvent(XPerfEvent):
+ """Classic ETW events are differentiated via a GUID. This class
+ implements the boilerplate for matching those events.
+ """
+
+ guid_index = None
+
+ def __init__(self, guidstr):
+ super(ClassicEvent, self).__init__("UnknownEvent/Classic")
+ self.guid = UUID(guidstr)
+
+ def match(self, row):
+ if not super(ClassicEvent, self).match(row):
+ return False
+
+ if not ClassicEvent.guid_index:
+ ClassicEvent.guid_index = self.get_field_index("EventGuid")
+
+ guid = UUID(row[ClassicEvent.guid_index])
+ return guid.int == self.guid.int
+
+ def __str__(self):
+ return "User event (classic): [{{{!s}}}]".format((self.guid))
+
+
+class SessionStoreWindowRestored(ClassicEvent):
+ """The Firefox session store window restored event"""
+
+ def __init__(self):
+ super(SessionStoreWindowRestored, self).__init__(
+ EVENT_ID_FIREFOX_WINDOW_RESTORED
+ )
+
+ def __str__(self):
+ return "Firefox Session Store Window Restored"
+
+
+class ProcessStart(XPerfEvent):
+ cmd_line_index = None
+ process_index = None
+ extractor = re.compile("^(.+) \(\s*(\d+)\)$")
+
+ def __init__(self, leafname):
+ super(ProcessStart, self).__init__("P-Start")
+ self.leafname = leafname.lower()
+
+ @staticmethod
+ def tokenize_cmd_line(cmd_line_str):
+ result = []
+ quoted = False
+ current = str()
+
+ for c in cmd_line_str:
+ if quoted:
+ if c == '"':
+ quoted = False
+ else:
+ if c == '"':
+ quoted = True
+ elif c == " ":
+ result.append(current)
+ current = str()
+ continue
+
+ current += c
+
+ # Capture the final token
+ if current:
+ result.append(current)
+
+ return [t.strip('"') for t in result]
+
+ def match(self, row):
+ if not super(ProcessStart, self).match(row):
+ return False
+
+ if not ProcessStart.process_index:
+ ProcessStart.process_index = self.get_field_index("Process Name ( PID)")
+
+ m = ProcessStart.extractor.match(row[ProcessStart.process_index])
+ executable = m.group(1).lower()
+
+ if executable != self.leafname:
+ return False
+
+ pid = int(m.group(2))
+
+ if not ProcessStart.cmd_line_index:
+ ProcessStart.cmd_line_index = self.get_field_index("Command Line")
+
+ cmd_line = row[ProcessStart.cmd_line_index]
+ cmd_line_tokens = ProcessStart.tokenize_cmd_line(cmd_line)
+
+ self.whiteboard[XPerfEvent.EVENT_DATA_PID] = pid
+
+ try:
+ cmd_line_dict = self.whiteboard[XPerfEvent.EVENT_DATA_CMD_LINE]
+ except KeyError:
+ self.whiteboard[XPerfEvent.EVENT_DATA_CMD_LINE] = {pid: cmd_line_tokens}
+ else:
+ cmd_line_dict[pid] = cmd_line_tokens
+
+ return True
+
+ def __str__(self):
+ return "Start of a [{!s}] process".format((self.leafname))
+
+
+class ThreadStart(XPerfEvent):
+ """ThreadStart only fires for threads whose process matches the
+ XPerfEvent.EVENT_DATA_PID entry in the whiteboard.
+ """
+
+ process_index = None
+ tid_index = None
+ pid_extractor = re.compile("^.+ \(\s*(\d+)\)$")
+
+ def __init__(self):
+ super(ThreadStart, self).__init__("T-Start")
+
+ def match(self, row):
+ if not super(ThreadStart, self).match(row):
+ return False
+
+ if not ThreadStart.process_index:
+ ThreadStart.process_index = self.get_field_index("Process Name ( PID)")
+
+ m = ThreadStart.pid_extractor.match(row[ThreadStart.process_index])
+ if self.whiteboard[XPerfEvent.EVENT_DATA_PID] != int(m.group(1)):
+ return False
+
+ if not ThreadStart.tid_index:
+ ThreadStart.tid_index = self.get_field_index("ThreadID")
+
+ self.whiteboard[XPerfEvent.EVENT_DATA_TID] = int(row[ThreadStart.tid_index])
+ return True
+
+ def __str__(self):
+ s = "Thread start in process [{}]".format(
+ (self.whiteboard[XPerfEvent.EVENT_DATA_PID])
+ )
+ return s
+
+
+class ReadyThread(XPerfEvent):
+ """ReadyThread only fires for the last thread whose ID was recorded in the
+ whiteboard via the XPerfEvent.EVENT_DATA_TID key.
+ """
+
+ tid_index = None
+
+ def __init__(self):
+ super(ReadyThread, self).__init__("ReadyThread")
+
+ def set_whiteboard(self, data):
+ super(ReadyThread, self).set_whiteboard(data)
+
+ def match(self, row):
+ if not super(ReadyThread, self).match(row):
+ return False
+
+ if not ReadyThread.tid_index:
+ ReadyThread.tid_index = self.get_field_index("Rdy TID")
+
+ try:
+ return self.whiteboard[XPerfEvent.EVENT_DATA_TID] == int(
+ row[ReadyThread.tid_index]
+ )
+ except KeyError:
+ return False
+
+ def __str__(self):
+ return "Thread [{!s}] is ready".format(
+ (self.whiteboard[XPerfEvent.EVENT_DATA_TID])
+ )
+
+
+class ContextSwitchToThread(XPerfEvent):
+ """ContextSwitchToThread only fires for the last thread whose ID was
+ recorded in the whiteboard via the XPerfEvent.EVENT_DATA_TID key.
+ """
+
+ tid_index = None
+
+ def __init__(self):
+ super(ContextSwitchToThread, self).__init__("CSwitch")
+
+ def match(self, row):
+ if not super(ContextSwitchToThread, self).match(row):
+ return False
+
+ if not ContextSwitchToThread.tid_index:
+ ContextSwitchToThread.tid_index = self.get_field_index("New TID")
+
+ try:
+ return self.whiteboard[XPerfEvent.EVENT_DATA_TID] == int(
+ row[ContextSwitchToThread.tid_index]
+ )
+ except KeyError:
+ return False
+
+ def __str__(self):
+ return "Context switch to thread " + "[{!s}]".format(
+ (self.whiteboard[XPerfEvent.EVENT_DATA_TID])
+ )
+
+
+class FileIOReadOrWrite(XPerfEvent):
+ READ = 0
+ WRITE = 1
+
+ tid_index = None
+ num_bytes_index = None
+ file_name_index = None
+
+ def __init__(self, verb):
+ if verb == FileIOReadOrWrite.WRITE:
+ evt_name = "FileIoWrite"
+ self.strverb = "Write"
+ elif verb == FileIOReadOrWrite.READ:
+ evt_name = "FileIoRead"
+ self.strverb = "Read"
+ else:
+ raise Exception("Invalid verb argument to FileIOReadOrWrite")
+
+ super(FileIOReadOrWrite, self).__init__(evt_name)
+
+ self.verb = verb
+
+ def match(self, row):
+ if not super(FileIOReadOrWrite, self).match(row):
+ return False
+
+ if not FileIOReadOrWrite.tid_index:
+ FileIOReadOrWrite.tid_index = self.get_field_index("ThreadID")
+
+ if not FileIOReadOrWrite.num_bytes_index:
+ FileIOReadOrWrite.num_bytes_index = self.get_field_index("Size")
+
+ if not FileIOReadOrWrite.file_name_index:
+ FileIOReadOrWrite.file_name_index = self.get_field_index("FileName")
+
+ self.whiteboard[XPerfEvent.EVENT_DATA_TID] = int(
+ row[FileIOReadOrWrite.tid_index]
+ )
+ self.whiteboard[XPerfEvent.EVENT_NUM_BYTES] = int(
+ row[FileIOReadOrWrite.num_bytes_index], 0
+ )
+ self.whiteboard[XPerfEvent.EVENT_FILE_NAME] = row[
+ FileIOReadOrWrite.file_name_index
+ ].strip('"')
+ self.whiteboard[XPerfEvent.EVENT_ACCUMULATABLE_FIELDS] = {
+ XPerfEvent.EVENT_NUM_BYTES
+ }
+
+ return True
+
+ def __str__(self):
+ return "File I/O Bytes {}".format((self.strverb))
+
+
+class XPerfFile(object):
+ """This class is the main entry point into xperf analysis. The user should
+ create one or more attributes, add them via add_attr(), and then call
+ analyze() to run.
+ """
+
+ def __init__(self, xperf_path=None, debug=False, **kwargs):
+ """Keyword arguments:
+
+ debug -- When True, enables additional diagnostics
+ etlfile -- Path to a merged .etl file to use for the analysis.
+ etluser -- Path a a user-mode .etl file to use for the analysis. It
+ will be merged with the supplied kernel-mode .etl file
+ before running the analysis.
+ etlkernel -- Path to a kernel-mode .etl file to use for the analysis.
+ It will be merged with the supplied user-mode .etl file
+ before running the analysis.
+ csvfile -- Path to a CSV file that was previously exported using xperf.
+ This file will be used for the analysis.
+ csvout -- When used with either the etlfile option or the (etluser and
+ etlkernel) option, specifies the path to use for the exported
+ CSV file.
+ keepcsv -- When true, any CSV file generated during the analysis will
+ be left on the file system. Otherwise, the CSV file will be
+ removed once the analysis is complete.
+ xperf_path -- Absolute path to xperf.exe. When absent, XPerfFile will
+ attempt to resolve xperf via the system PATH.
+ """
+
+ self.csv_fd = None
+ self.csvfile = None
+ self.csvout = None
+ self.debug = debug
+ self.etlfile = None
+ self.keepcsv = False
+ self.xperf_path = xperf_path
+
+ if "etlfile" in kwargs:
+ self.etlfile = os.path.abspath(kwargs["etlfile"])
+ elif "etluser" in kwargs and "etlkernel" in kwargs:
+ self.etlfile = self.etl_merge_user_kernel(**kwargs)
+ elif "csvfile" not in kwargs:
+ raise Exception("Missing parameters: etl or csv files required")
+
+ if self.etlfile:
+ try:
+ self.csvout = os.path.abspath(kwargs["csvout"])
+ except KeyError:
+ pass
+ self.csvfile = self.etl2csv()
+ else:
+ self.csvfile = os.path.abspath(kwargs["csvfile"])
+
+ try:
+ self.keepcsv = kwargs["keepcsv"]
+ except KeyError:
+ # If we've been supplied a csvfile, assume by default that we don't
+ # want that file deleted by us.
+ self.keepcsv = "csvfile" in kwargs
+
+ self.sess = XPerfSession()
+
+ def add_attr(self, attr):
+ attr.set_session(self.sess)
+
+ def get_xperf_path(self):
+ if self.xperf_path:
+ return self.xperf_path
+
+ leaf_name = "xperf.exe"
+ access_flags = os.R_OK | os.X_OK
+ path_entries = os.environ["PATH"].split(os.pathsep)
+ for entry in path_entries:
+ full = os.path.join(entry, leaf_name)
+ if os.access(full, access_flags):
+ self.xperf_path = os.path.abspath(full)
+ return self.xperf_path
+
+ raise Exception("Cannot find xperf")
+
+ def etl_merge_user_kernel(self, **kwargs):
+ user = os.path.abspath(kwargs["etluser"])
+ kernel = os.path.abspath(kwargs["etlkernel"])
+ (base, leaf) = os.path.split(user)
+ merged = os.path.join(base, "merged.etl")
+
+ xperf_cmd = [self.get_xperf_path(), "-merge", user, kernel, merged]
+ if self.debug:
+ print("Executing '%s'" % subprocess.list2cmdline(xperf_cmd))
+ subprocess.call(xperf_cmd)
+ return merged
+
+ def etl2csv(self):
+ if self.csvout:
+ abs_csv_name = self.csvout
+ else:
+ (base, leaf) = os.path.split(self.etlfile)
+ (leaf, ext) = os.path.splitext(leaf)
+ abs_csv_name = os.path.join(base, "{}.csv".format((leaf)))
+
+ xperf_cmd = [self.get_xperf_path(), "-i", self.etlfile, "-o", abs_csv_name]
+ if self.debug:
+ print("Executing '%s'" % subprocess.list2cmdline(xperf_cmd))
+ subprocess.call(xperf_cmd)
+ return abs_csv_name
+
+ def __enter__(self):
+ if not self.load():
+ raise Exception("Load failed")
+ return self
+
+ def __exit__(self, exc_type, exc_value, traceback):
+ if self.csv_fd:
+ self.csv_fd.close()
+ if not self.csvout and not self.keepcsv:
+ os.remove(self.csvfile)
+
+ def load(self):
+ if not self.csvfile:
+ return False
+
+ self.csv_fd = open(self.csvfile, "rb")
+ self.data = self.filter_xperf_header(
+ csv.reader(
+ self.csv_fd,
+ delimiter=",",
+ quotechar='"',
+ quoting=csv.QUOTE_NONE,
+ skipinitialspace=True,
+ )
+ )
+
+ return True
+
+ def filter_xperf_header(self, csvdata):
+ XPERF_CSV_NO_HEADER = -1
+ XPERF_CSV_IN_HEADER = 0
+ XPERF_CSV_END_HEADER_SEEN = 1
+ XPERF_CSV_PAST_HEADER = 2
+
+ state = XPERF_CSV_NO_HEADER
+
+ while True:
+ try:
+ row = next(csvdata)
+ except StopIteration:
+ break
+ except csv.Error:
+ continue
+
+ if not row:
+ continue
+
+ if state < XPERF_CSV_IN_HEADER:
+ if row[0] == "BeginHeader":
+ state = XPERF_CSV_IN_HEADER
+ continue
+
+ if state == XPERF_CSV_IN_HEADER:
+ if row[0] == "EndHeader":
+ state = XPERF_CSV_END_HEADER_SEEN
+ continue
+
+ # Map field names to indices
+ self.sess.add_field_mapping(
+ row[0], {v: k + 1 for k, v in enumerate(row[1:])}
+ )
+ continue
+
+ if state >= XPERF_CSV_END_HEADER_SEEN:
+ state += 1
+
+ if state > XPERF_CSV_PAST_HEADER:
+ yield row
+
+ def analyze(self):
+ for row in self.data:
+ self.sess.match_events(row)
+ if self.sess.is_empty():
+ # No more attrs to look for, we might as well quit
+ return
+
+
+if __name__ == "__main__":
+
+ def main():
+ import argparse
+
+ parser = argparse.ArgumentParser()
+ subparsers = parser.add_subparsers()
+
+ etl_parser = subparsers.add_parser(
+ "etl", help="Input consists of one .etl file"
+ )
+ etl_parser.add_argument(
+ "etlfile",
+ type=str,
+ help="Path to a single .etl containing merged kernel "
+ + "and user mode data",
+ )
+ etl_parser.add_argument(
+ "--csvout",
+ required=False,
+ help="Specify a path to save the interim csv file to disk",
+ )
+ etl_parser.add_argument(
+ "--keepcsv",
+ required=False,
+ help="Do not delete the interim csv file that was written to disk",
+ action="store_true",
+ )
+
+ etls_parser = subparsers.add_parser(
+ "etls", help="Input consists of two .etl files"
+ )
+ etls_parser.add_argument(
+ "--user",
+ type=str,
+ help="Path to a user-mode .etl file",
+ dest="etluser",
+ required=True,
+ )
+ etls_parser.add_argument(
+ "--kernel",
+ type=str,
+ help="Path to a kernel-mode .etl file",
+ dest="etlkernel",
+ required=True,
+ )
+ etls_parser.add_argument(
+ "--csvout",
+ required=False,
+ help="Specify a path to save the interim csv file to disk",
+ )
+ etls_parser.add_argument(
+ "--keepcsv",
+ required=False,
+ help="Do not delete the interim csv file that was written to disk",
+ action="store_true",
+ )
+
+ csv_parser = subparsers.add_parser(
+ "csv", help="Input consists of one .csv file"
+ )
+ csv_parser.add_argument(
+ "csvfile", type=str, help="Path to a .csv file generated by xperf"
+ )
+ # We always imply --keepcsv when running in csv mode
+ csv_parser.add_argument(
+ "--keepcsv",
+ required=False,
+ help=argparse.SUPPRESS,
+ action="store_true",
+ default=True,
+ )
+
+ args = parser.parse_args()
+
+ # This is merely sample code for running analyses.
+
+ with XPerfFile(**vars(args)) as etl:
+
+ def null_output(attr):
+ pass
+
+ def structured_output(attr):
+ print("Results: [{!r}]".format((attr.get_results())))
+
+ def test_filter_exclude_dll(file):
+ (base, ext) = os.path.splitext(file)
+ return ext.lower() != ".dll"
+
+ myfilters = {XPerfEvent.EVENT_FILE_NAME: test_filter_exclude_dll}
+
+ fxstart1 = ProcessStart("firefox.exe")
+ sess_restore = SessionStoreWindowRestored()
+ interval1 = XPerfInterval(
+ fxstart1, sess_restore, output=lambda a: print(str(a))
+ )
+ etl.add_attr(interval1)
+
+ fxstart2 = ProcessStart("firefox.exe")
+ ready = EventSequence(
+ Nth(2, ProcessStart("firefox.exe")), ThreadStart(), ReadyThread()
+ )
+ interval2 = XPerfInterval(fxstart2, ready, output=structured_output)
+ etl.add_attr(interval2)
+
+ browser_main_thread_file_io_read = EventSequence(
+ Nth(2, ProcessStart("firefox.exe")),
+ ThreadStart(),
+ BindThread(FileIOReadOrWrite(FileIOReadOrWrite.READ)),
+ )
+ read_counter = XPerfCounter(
+ browser_main_thread_file_io_read,
+ output=structured_output,
+ filters=myfilters,
+ )
+
+ browser_main_thread_file_io_write = EventSequence(
+ Nth(2, ProcessStart("firefox.exe")),
+ ThreadStart(),
+ BindThread(FileIOReadOrWrite(FileIOReadOrWrite.WRITE)),
+ )
+ write_counter = XPerfCounter(
+ browser_main_thread_file_io_write, output=structured_output
+ )
+
+ # This is equivalent to the old-style xperf test (with launcher)
+ parent_process_started = Nth(2, ProcessStart("firefox.exe"))
+ interval3 = XPerfInterval(
+ parent_process_started,
+ SessionStoreWindowRestored(),
+ read_counter,
+ output=structured_output,
+ )
+ etl.add_attr(interval3)
+
+ parent_process_started2 = Nth(2, ProcessStart("firefox.exe"))
+ interval4 = XPerfInterval(
+ parent_process_started2,
+ SessionStoreWindowRestored(),
+ write_counter,
+ output=structured_output,
+ )
+ etl.add_attr(interval4)
+
+ etl.analyze()
+
+ main()
diff --git a/testing/talos/talos/xtalos/xtalos.py b/testing/talos/talos/xtalos/xtalos.py
new file mode 100644
index 0000000000..fad7afa0de
--- /dev/null
+++ b/testing/talos/talos/xtalos/xtalos.py
@@ -0,0 +1,167 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import argparse
+import json
+import os
+
+DEBUG_CRITICAL = 0
+DEBUG_ERROR = 1
+DEBUG_WARNING = 2
+DEBUG_INFO = 3
+DEBUG_VERBOSE = 4
+
+
+class XTalosError(Exception):
+ """error related to xtalos invocation"""
+
+
+def options_from_config(options, config_file):
+ """override options from a json config file; returns the dictionary
+ - options: a dictionary with default options
+ - config_file: path to a json config file
+ """
+
+ with open(config_file, "r") as config:
+ conf = json.load(config)
+ for optname, value in options.items():
+ options[optname] = conf.get(optname, value)
+ return options
+
+
+class XtalosOptions(argparse.ArgumentParser):
+ def __init__(self, **kwargs):
+ argparse.ArgumentParser.__init__(self, **kwargs)
+ defaults = {}
+
+ self.add_argument(
+ "--pid", dest="processID", help="process ID of the process we launch"
+ )
+ defaults["processID"] = None
+
+ self.add_argument(
+ "-x",
+ "--xperf",
+ dest="xperf_path",
+ help="location of xperf tool, defaults to" " 'xperf.exe'",
+ )
+ defaults["xperf_path"] = "xperf.exe"
+
+ self.add_argument(
+ "-e",
+ "--etl_filename",
+ dest="etl_filename",
+ help="Name of the .etl file to work with." " Defaults to 'output.etl'",
+ )
+ defaults["etl_filename"] = "test.etl"
+
+ self.add_argument(
+ "-d",
+ "--debug",
+ type=int,
+ dest="debug_level",
+ help="debug level for output from tool (0-5, 5"
+ " being everything), defaults to 1",
+ )
+ defaults["debug_level"] = 1
+
+ self.add_argument(
+ "-o",
+ "--output-file",
+ dest="outputFile",
+ help="Filename to write all output to, default" " is stdout",
+ )
+ defaults["outputFile"] = "etl_output.csv"
+
+ self.add_argument(
+ "-r",
+ "--providers",
+ dest="xperf_providers",
+ action="append",
+ help="xperf providers to collect data from",
+ )
+ defaults["xperf_providers"] = []
+
+ self.add_argument(
+ "--user-providers",
+ dest="xperf_user_providers",
+ action="append",
+ help="user mode xperf providers to collect data" " from",
+ )
+ defaults["xperf_user_providers"] = []
+
+ self.add_argument(
+ "-s",
+ "--stackwalk",
+ dest="xperf_stackwalk",
+ action="append",
+ help="xperf stackwalk arguments to collect",
+ )
+ defaults["xperf_stackwalk"] = []
+
+ self.add_argument(
+ "-c",
+ "--config-file",
+ dest="configFile",
+ help="Name of the json config file with test run"
+ " and browser information",
+ )
+ defaults["configFile"] = None
+
+ self.add_argument(
+ "-w",
+ "--allowlist-file",
+ dest="allowlist_file",
+ help="Name of allowlist file",
+ )
+ defaults["allowlist_file"] = None
+
+ self.add_argument(
+ "-i",
+ "--all-stages",
+ dest="all_stages",
+ action="store_true",
+ help="Include all stages in file I/O output," "not just startup",
+ )
+ defaults["all_stages"] = False
+
+ self.add_argument(
+ "-t",
+ "--all-threads",
+ dest="all_threads",
+ action="store_true",
+ help="Include all threads in file I/O output," " not just main",
+ )
+ defaults["all_threads"] = False
+
+ self.add_argument(
+ "-a",
+ "--approot",
+ dest="approot",
+ help="Provide the root directory of the application"
+ " we are testing to find related files (i.e."
+ " dependentlibs.list)",
+ )
+ defaults["approot"] = None
+
+ self.add_argument(
+ "--error-filename",
+ dest="error_filename",
+ help="Filename to store the failures detected" " while runnning the test",
+ )
+ defaults["error_filename"] = None
+
+ self.set_defaults(**defaults)
+
+ def verifyOptions(self, options):
+ # override options from config file
+ if options.configFile:
+ options_from_config(options.__dict__, options.configFile)
+
+ # ensure xperf path exists
+ options.xperf_path = os.path.abspath(options.xperf_path)
+ if not os.path.exists(options.xperf_path):
+ print("ERROR: xperf_path '%s' does not exist" % options.xperf_path)
+ return None
+
+ return options
diff --git a/testing/talos/talos_from_code.py b/testing/talos/talos_from_code.py
new file mode 100644
index 0000000000..c5d24bd7b1
--- /dev/null
+++ b/testing/talos/talos_from_code.py
@@ -0,0 +1,141 @@
+#! /usr/bin/env python
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+#
+# Script name: talos_from_code.py
+# Purpose: Read from a talos.json file the different files to download for a talos job
+# Author(s): Zambrano Gasparnian, Armen <armenzg@mozilla.com>
+# Target: Python 2.5
+#
+import json
+import os
+import re
+import sys
+from optparse import OptionParser
+
+import six
+
+
+def main():
+ """
+ This script downloads a talos.json file which indicates which files to download
+ for a talos job.
+ See a talos.json file for a better understand:
+ https://hg.mozilla.org/mozilla-central/raw-file/default/testing/talos/talos.json
+ """
+ parser = OptionParser()
+ parser.add_option(
+ "--talos-json-url",
+ dest="talos_json_url",
+ type="string",
+ help="It indicates from where to download the talos.json file.",
+ )
+ (options, args) = parser.parse_args()
+
+ # 1) check that the url was passed
+ if options.talos_json_url is None:
+ print("You need to specify --talos-json-url.")
+ sys.exit(1)
+
+ # 2) try to download the talos.json file
+ try:
+ jsonFilename = download_file(options.talos_json_url)
+ except Exception as e:
+ print("ERROR: We tried to download the talos.json file but something failed.")
+ print("ERROR: %s" % str(e))
+ sys.exit(1)
+
+ # 3) download the necessary files
+ print("INFO: talos.json URL: %s" % options.talos_json_url)
+ try:
+ key = "talos.zip"
+ entity = get_value(jsonFilename, key)
+ if passesRestrictions(options.talos_json_url, entity["url"]):
+ # the key is at the same time the filename e.g. talos.zip
+ print(
+ "INFO: Downloading %s as %s"
+ % (entity["url"], os.path.join(entity["path"], key))
+ )
+ download_file(entity["url"], entity["path"], key)
+ else:
+ print(
+ "ERROR: You have tried to download a file "
+ + "from: %s " % entity["url"]
+ + "which is a location different than http://talos-bundles.pvt.build.mozilla.org/"
+ )
+ print("ERROR: This is only allowed for the certain branches.")
+ sys.exit(1)
+ except Exception as e:
+ print("ERROR: %s" % str(e))
+ sys.exit(1)
+
+
+def passesRestrictions(talosJsonUrl, fileUrl):
+ """
+ Only certain branches are exempted from having to host their downloadable files
+ in talos-bundles.pvt.build.mozilla.org
+ """
+ if (
+ talosJsonUrl.startswith("http://hg.mozilla.org/try/")
+ or talosJsonUrl.startswith("https://hg.mozilla.org/try/")
+ or talosJsonUrl.startswith("http://hg.mozilla.org/projects/pine/")
+ or talosJsonUrl.startswith("https://hg.mozilla.org/projects/pine/")
+ or talosJsonUrl.startswith("http://hg.mozilla.org/projects/ash/")
+ or talosJsonUrl.startswith("https://hg.mozilla.org/projects/ash/")
+ ):
+ return True
+ else:
+ p = re.compile("^http://talos-bundles.pvt.build.mozilla.org/")
+ m = p.match(fileUrl)
+ if m is None:
+ return False
+ return True
+
+
+def get_filename_from_url(url):
+ """
+ This returns the filename of the file we're trying to download
+ """
+ parsed = six.moves.urllib.parse.urlsplit(url.rstrip("/"))
+ if parsed.path != "":
+ return parsed.path.rsplit("/", 1)[-1]
+ else:
+ print(
+ "ERROR: We were trying to download a file from %s "
+ + "but the URL seems to be incorrect."
+ )
+ sys.exit(1)
+
+
+def download_file(url, path="", saveAs=None):
+ """
+ It downloads a file from URL to the indicated path
+ """
+ req = six.moves.urllib.request.Request(url)
+ f = six.moves.urllib.request.urlopen(req)
+ if path != "" and not os.path.isdir(path):
+ try:
+ os.makedirs(path)
+ print("INFO: directory %s created" % path)
+ except Exception as e:
+ print("ERROR: %s" % str(e))
+ sys.exit(1)
+ filename = saveAs if saveAs else get_filename_from_url(url)
+ local_file = open(os.path.join(path, filename), "wb")
+ local_file.write(f.read())
+ local_file.close()
+ return filename
+
+
+def get_value(json_filename, key):
+ """
+ It loads up a JSON file and returns the value for the given string
+ """
+ f = open(json_filename, "r")
+ return json.load(f)[key]
+
+
+if __name__ == "__main__":
+ main()
diff --git a/testing/talos/tp5n-pageset.manifest b/testing/talos/tp5n-pageset.manifest
new file mode 100644
index 0000000000..1266b04612
--- /dev/null
+++ b/testing/talos/tp5n-pageset.manifest
@@ -0,0 +1,10 @@
+[
+ {
+ "size": 80669109,
+ "visibility": "public",
+ "digest": "d12b0ec9e80795703066e34aeaa363dc8633fdd8e0e555057fabcf720bc64507113889be49b4acd08910b84e073b18d2ad1f762ba8bfc3af32fd2d6ece957fed",
+ "algorithm": "sha512",
+ "filename": "tp5n.zip",
+ "unpack": false
+ }
+] \ No newline at end of file
diff --git a/testing/talos/webextensions.manifest b/testing/talos/webextensions.manifest
new file mode 100644
index 0000000000..293cd6709a
--- /dev/null
+++ b/testing/talos/webextensions.manifest
@@ -0,0 +1,9 @@
+[
+ {
+ "size": 2608427,
+ "visibility": "public",
+ "digest": "f3198257ca82043bb9fe9a7085cff7af6f0d11685a0416ebb73e8edec547b970dd044666120e44898e2de36372add88ef93cd08af79dcd03e32fa1e9ef2053c8",
+ "algorithm": "sha512",
+ "filename": "webextensions.zip"
+ }
+] \ No newline at end of file